summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSVN Migration <svn@php.net>2004-09-07 00:34:15 +0000
committerSVN Migration <svn@php.net>2004-09-07 00:34:15 +0000
commit785b3d9bf1487a624f5b89e81e9204a6c95785ab (patch)
tree163fa0b77898639a9daa3ffa3ce675cb1cddef96
parent882a4c4d2c2f9960e7239e2a9afcd96a4b7a0c8d (diff)
downloadphp-git-PRE_ZEND_VM_DISPATCH_PATCH.tar.gz
This commit was manufactured by cvs2svn to create tagPRE_ZEND_VM_DISPATCH_PATCH
'PRE_ZEND_VM_DISPATCH_PATCH'.
-rw-r--r--.gdbinit359
-rw-r--r--CODING_STANDARDS272
-rw-r--r--CREDITS2
-rw-r--r--ChangeLog16840
-rw-r--r--ChangeLog.1999.gzbin78772 -> 0 bytes
-rw-r--r--ChangeLog.2000.gzbin159518 -> 0 bytes
-rw-r--r--ChangeLog.2001.gzbin198003 -> 0 bytes
-rw-r--r--ChangeLog.2002.gzbin262369 -> 0 bytes
-rw-r--r--ChangeLog.2003.gzbin183857 -> 0 bytes
-rw-r--r--EXTENSIONS462
-rw-r--r--INSTALL1341
-rw-r--r--LICENSE68
-rw-r--r--Makefile.frag23
-rw-r--r--Makefile.global76
-rw-r--r--NEWS578
-rw-r--r--README.CVS-RULES107
-rw-r--r--README.EXTENSIONS39
-rw-r--r--README.EXT_SKEL194
-rw-r--r--README.PARAMETER_PARSING_API127
-rw-r--r--README.PHP4-TO-PHP5-THIN-CHANGES155
-rw-r--r--README.QNX57
-rw-r--r--README.SELF-CONTAINED-EXTENSIONS155
-rw-r--r--README.STREAMS379
-rw-r--r--README.SUBMITTING_PATCH126
-rw-r--r--README.TESTING179
-rw-r--r--README.TESTING2137
-rw-r--r--README.UNIX-BUILD-SYSTEM123
-rw-r--r--README.WIN32-BUILD-SYSTEM174
-rw-r--r--README.Zeus112
-rw-r--r--README.input_filter193
-rw-r--r--TODO155
-rw-r--r--TODO-5.110
-rw-r--r--TODO-PHP5109
-rw-r--r--TODO.BUILDv53
-rw-r--r--TSRM/LICENSE26
-rw-r--r--TSRM/Makefile.am6
-rw-r--r--TSRM/TODO2
-rw-r--r--TSRM/TSRM.c704
-rw-r--r--TSRM/TSRM.dsp186
-rw-r--r--TSRM/TSRM.h177
-rw-r--r--TSRM/acconfig.h1
-rw-r--r--TSRM/acinclude.m45
-rw-r--r--TSRM/build.mk43
-rwxr-xr-xTSRM/buildconf33
-rw-r--r--TSRM/config.w3210
-rw-r--r--TSRM/configure.in31
-rw-r--r--TSRM/readdir.h44
-rw-r--r--TSRM/threads.m4165
-rw-r--r--TSRM/tsrm.m4129
-rw-r--r--TSRM/tsrm_config.nw.h11
-rw-r--r--TSRM/tsrm_config.w32.h20
-rw-r--r--TSRM/tsrm_config_common.h60
-rw-r--r--TSRM/tsrm_nw.c240
-rw-r--r--TSRM/tsrm_nw.h29
-rw-r--r--TSRM/tsrm_strtok_r.c63
-rw-r--r--TSRM/tsrm_strtok_r.h6
-rw-r--r--TSRM/tsrm_virtual_cwd.c893
-rw-r--r--TSRM/tsrm_virtual_cwd.h293
-rw-r--r--TSRM/tsrm_win32.c388
-rw-r--r--TSRM/tsrm_win32.h106
-rw-r--r--acconfig.h.in1
-rw-r--r--acinclude.m41933
-rw-r--r--build/build.mk73
-rw-r--r--build/build2.mk64
-rwxr-xr-xbuild/buildcheck.sh93
-rwxr-xr-xbuild/config-stubs8
-rw-r--r--build/genif.sh41
-rw-r--r--build/mkdep.awk75
-rw-r--r--build/order_by_dep.awk89
-rw-r--r--build/print_include.awk6
-rw-r--r--build/scan_makefile_in.awk32
-rwxr-xr-xbuild/shtool1046
-rwxr-xr-xbuildconf64
-rw-r--r--buildconf.bat2
-rw-r--r--config.guess1363
-rw-r--r--config.sub1470
-rw-r--r--configure.in1436
-rwxr-xr-xcvsclean3
-rwxr-xr-xcvsclean.bat2
-rw-r--r--ext/bcmath/CREDITS2
-rw-r--r--ext/bcmath/bcmath.c574
-rw-r--r--ext/bcmath/config.m417
-rw-r--r--ext/bcmath/config.w3214
-rw-r--r--ext/bcmath/libbcmath/AUTHORS3
-rw-r--r--ext/bcmath/libbcmath/COPYING.LIB515
-rw-r--r--ext/bcmath/libbcmath/ChangeLog10
-rw-r--r--ext/bcmath/libbcmath/FAQ21
-rw-r--r--ext/bcmath/libbcmath/INSTALL9
-rw-r--r--ext/bcmath/libbcmath/Makefile.am12
-rw-r--r--ext/bcmath/libbcmath/NEWS3
-rw-r--r--ext/bcmath/libbcmath/README9
-rw-r--r--ext/bcmath/libbcmath/acconfig.h9
-rw-r--r--ext/bcmath/libbcmath/aclocal.m4127
-rw-r--r--ext/bcmath/libbcmath/config.h.in41
-rw-r--r--ext/bcmath/libbcmath/configure1859
-rw-r--r--ext/bcmath/libbcmath/configure.in18
-rw-r--r--ext/bcmath/libbcmath/install-sh238
-rw-r--r--ext/bcmath/libbcmath/missing134
-rw-r--r--ext/bcmath/libbcmath/mkinstalldirs36
-rw-r--r--ext/bcmath/libbcmath/src/Makefile.am22
-rw-r--r--ext/bcmath/libbcmath/src/add.c88
-rw-r--r--ext/bcmath/libbcmath/src/bcmath.h162
-rw-r--r--ext/bcmath/libbcmath/src/compare.c161
-rw-r--r--ext/bcmath/libbcmath/src/config.h12
-rw-r--r--ext/bcmath/libbcmath/src/debug.c69
-rw-r--r--ext/bcmath/libbcmath/src/div.c274
-rw-r--r--ext/bcmath/libbcmath/src/divmod.c87
-rw-r--r--ext/bcmath/libbcmath/src/doaddsub.c232
-rw-r--r--ext/bcmath/libbcmath/src/init.c131
-rw-r--r--ext/bcmath/libbcmath/src/int2num.c84
-rw-r--r--ext/bcmath/libbcmath/src/nearzero.c69
-rw-r--r--ext/bcmath/libbcmath/src/neg.c49
-rw-r--r--ext/bcmath/libbcmath/src/num2long.c70
-rw-r--r--ext/bcmath/libbcmath/src/num2str.c79
-rw-r--r--ext/bcmath/libbcmath/src/outofmem.c46
-rw-r--r--ext/bcmath/libbcmath/src/output.c208
-rw-r--r--ext/bcmath/libbcmath/src/private.h43
-rw-r--r--ext/bcmath/libbcmath/src/raise.c124
-rw-r--r--ext/bcmath/libbcmath/src/raisemod.c97
-rw-r--r--ext/bcmath/libbcmath/src/recmul.c306
-rw-r--r--ext/bcmath/libbcmath/src/rmzero.c55
-rw-r--r--ext/bcmath/libbcmath/src/rt.c65
-rw-r--r--ext/bcmath/libbcmath/src/sqrt.c129
-rw-r--r--ext/bcmath/libbcmath/src/str2num.c109
-rw-r--r--ext/bcmath/libbcmath/src/sub.c90
-rw-r--r--ext/bcmath/libbcmath/src/zero.c64
-rw-r--r--ext/bcmath/package.xml94
-rw-r--r--ext/bcmath/php_bcmath.h69
-rw-r--r--ext/bcmath/tests/bcadd.phpt16
-rw-r--r--ext/bcmath/tests/bccomp.phpt18
-rw-r--r--ext/bcmath/tests/bcdiv.phpt18
-rw-r--r--ext/bcmath/tests/bcmod.phpt16
-rw-r--r--ext/bcmath/tests/bcmul.phpt18
-rw-r--r--ext/bcmath/tests/bcpow.phpt16
-rw-r--r--ext/bcmath/tests/bcscale.phpt21
-rw-r--r--ext/bcmath/tests/bcsqrt.phpt14
-rw-r--r--ext/bcmath/tests/bcsub.phpt16
-rw-r--r--ext/bz2/CREDITS2
-rw-r--r--ext/bz2/bz2.c549
-rw-r--r--ext/bz2/bz2.dsp112
-rw-r--r--ext/bz2/bz2_filter.c384
-rw-r--r--ext/bz2/config.m440
-rw-r--r--ext/bz2/config.w3218
-rw-r--r--ext/bz2/package.xml38
-rw-r--r--ext/bz2/php_bz2.def7
-rw-r--r--ext/bz2/php_bz2.h83
-rw-r--r--ext/bz2/tests/bz2_filter_compress.phpt17
-rw-r--r--ext/bz2/tests/bz2_filter_decompress.phpt17
-rw-r--r--ext/bz2/tests/with_files.phpt23
-rw-r--r--ext/bz2/tests/with_strings.phpt27
-rw-r--r--ext/calendar/CREDITS2
-rw-r--r--ext/calendar/cal_unix.c88
-rw-r--r--ext/calendar/calendar.c639
-rw-r--r--ext/calendar/config.m411
-rw-r--r--ext/calendar/config.w3210
-rw-r--r--ext/calendar/dow.c76
-rw-r--r--ext/calendar/easter.c141
-rw-r--r--ext/calendar/french.c160
-rw-r--r--ext/calendar/gregor.c265
-rw-r--r--ext/calendar/jewish.c763
-rw-r--r--ext/calendar/julian.c249
-rw-r--r--ext/calendar/package.xml73
-rw-r--r--ext/calendar/php_calendar.h50
-rw-r--r--ext/calendar/sdncal.h97
-rw-r--r--ext/calendar/tests/jdtojewish.phpt28
-rw-r--r--ext/com_dotnet/CREDITS2
-rw-r--r--ext/com_dotnet/README71
-rw-r--r--ext/com_dotnet/com_com.c837
-rw-r--r--ext/com_dotnet/com_dotnet.c224
-rw-r--r--ext/com_dotnet/com_extension.c358
-rw-r--r--ext/com_dotnet/com_handlers.c709
-rw-r--r--ext/com_dotnet/com_iterator.c239
-rw-r--r--ext/com_dotnet/com_misc.c141
-rw-r--r--ext/com_dotnet/com_olechar.c103
-rwxr-xr-xext/com_dotnet/com_persist.c787
-rw-r--r--ext/com_dotnet/com_saproxy.c584
-rw-r--r--ext/com_dotnet/com_typeinfo.c601
-rw-r--r--ext/com_dotnet/com_variant.c909
-rw-r--r--ext/com_dotnet/com_wrapper.c635
-rw-r--r--ext/com_dotnet/config.w3213
-rw-r--r--ext/com_dotnet/package.xml52
-rw-r--r--ext/com_dotnet/php_com_dotnet.h69
-rw-r--r--ext/com_dotnet/php_com_dotnet_internal.h183
-rwxr-xr-xext/com_dotnet/tests/27974.phpt43
-rw-r--r--ext/com_dotnet/tests/variants.phpt637
-rw-r--r--ext/cpdf/CREDITS2
-rw-r--r--ext/cpdf/config.m476
-rw-r--r--ext/cpdf/config.w3214
-rw-r--r--ext/cpdf/cpdf.c2263
-rw-r--r--ext/cpdf/cpdf.dsp111
-rw-r--r--ext/cpdf/package.xml44
-rw-r--r--ext/cpdf/php_cpdf.h119
-rw-r--r--ext/ctype/CREDITS2
-rw-r--r--ext/ctype/README5
-rw-r--r--ext/ctype/config.m411
-rw-r--r--ext/ctype/config.w329
-rw-r--r--ext/ctype/ctype.c222
-rw-r--r--ext/ctype/ctype.dsp107
-rw-r--r--ext/ctype/ctype.xml245
-rw-r--r--ext/ctype/package.xml46
-rw-r--r--ext/ctype/php_ctype.h83
-rw-r--r--ext/ctype/tests/001.phpt39
-rw-r--r--ext/ctype/tests/002.phpt48
-rw-r--r--ext/ctype/tests/bug25745.phpt24
-rw-r--r--ext/curl/CREDITS2
-rw-r--r--ext/curl/config.m478
-rw-r--r--ext/curl/config.w3220
-rw-r--r--ext/curl/curl.dsp186
-rw-r--r--ext/curl/interface.c1479
-rw-r--r--ext/curl/multi.c274
-rw-r--r--ext/curl/package.xml52
-rw-r--r--ext/curl/php_curl.h170
-rw-r--r--ext/curl/streams.c386
-rw-r--r--ext/dba/CREDITS2
-rwxr-xr-xext/dba/README54
-rw-r--r--ext/dba/config.m4477
-rw-r--r--ext/dba/config.w3218
-rw-r--r--ext/dba/dba.c1130
-rw-r--r--ext/dba/dba.dsp213
-rw-r--r--ext/dba/dba_cdb.c350
-rw-r--r--ext/dba/dba_db2.c209
-rw-r--r--ext/dba/dba_db3.c238
-rw-r--r--ext/dba/dba_db4.c248
-rw-r--r--ext/dba/dba_dbm.c213
-rw-r--r--ext/dba/dba_flatfile.c188
-rw-r--r--ext/dba/dba_gdbm.c200
-rw-r--r--ext/dba/dba_inifile.c194
-rw-r--r--ext/dba/dba_ndbm.c171
-rwxr-xr-xext/dba/dba_qdbm.c194
-rwxr-xr-xext/dba/install_cdb.sh53
-rw-r--r--ext/dba/libcdb/cdb.c193
-rw-r--r--ext/dba/libcdb/cdb.h57
-rw-r--r--ext/dba/libcdb/cdb_make.c244
-rw-r--r--ext/dba/libcdb/cdb_make.h64
-rw-r--r--ext/dba/libcdb/uint32.c49
-rw-r--r--ext/dba/libcdb/uint32.h39
-rw-r--r--ext/dba/libflatfile/flatfile.c321
-rw-r--r--ext/dba/libflatfile/flatfile.h48
-rw-r--r--ext/dba/libinifile/inifile.c592
-rw-r--r--ext/dba/libinifile/inifile.h66
-rw-r--r--ext/dba/php_cdb.h12
-rw-r--r--ext/dba/php_db2.h12
-rw-r--r--ext/dba/php_db3.h12
-rw-r--r--ext/dba/php_db4.h12
-rw-r--r--ext/dba/php_dba.h153
-rw-r--r--ext/dba/php_dbm.h12
-rw-r--r--ext/dba/php_flatfile.h12
-rw-r--r--ext/dba/php_gdbm.h12
-rw-r--r--ext/dba/php_inifile.h12
-rw-r--r--ext/dba/php_ndbm.h12
-rw-r--r--ext/dba/php_qdbm.h12
-rw-r--r--ext/dba/tests/dba001.phpt21
-rw-r--r--ext/dba/tests/dba002.phpt22
-rw-r--r--ext/dba/tests/dba003.phpt24
-rw-r--r--ext/dba/tests/dba004.phpt28
-rw-r--r--ext/dba/tests/dba005.phpt35
-rw-r--r--ext/dba/tests/dba006.phpt37
-rw-r--r--ext/dba/tests/dba007.phpt45
-rw-r--r--ext/dba/tests/dba008.phpt32
-rwxr-xr-xext/dba/tests/dba009.phpt33
-rw-r--r--ext/dba/tests/dba_cdb.phpt47
-rw-r--r--ext/dba/tests/dba_cdb_make.phpt38
-rw-r--r--ext/dba/tests/dba_cdb_read.phpt65
-rw-r--r--ext/dba/tests/dba_db2.phpt46
-rw-r--r--ext/dba/tests/dba_db3.phpt46
-rw-r--r--ext/dba/tests/dba_db4.phpt46
-rw-r--r--ext/dba/tests/dba_dbm.phpt46
-rw-r--r--ext/dba/tests/dba_flatfile.phpt46
-rw-r--r--ext/dba/tests/dba_gdbm.phpt34
-rw-r--r--ext/dba/tests/dba_handler.inc90
-rw-r--r--ext/dba/tests/dba_inifile.phpt46
-rw-r--r--ext/dba/tests/dba_ndbm.phpt46
-rwxr-xr-xext/dba/tests/dba_qdbm.phpt34
-rw-r--r--ext/dba/tests/skipif.inc23
-rw-r--r--ext/dba/tests/test.cdbbin2230 -> 0 bytes
-rw-r--r--ext/dba/tests/test.inc7
-rw-r--r--ext/dbase/CREDITS2
-rw-r--r--ext/dbase/config.m413
-rw-r--r--ext/dbase/config.w3210
-rw-r--r--ext/dbase/dbase.c843
-rw-r--r--ext/dbase/dbase.dsp151
-rw-r--r--ext/dbase/dbf.h94
-rw-r--r--ext/dbase/dbf_head.c291
-rw-r--r--ext/dbase/dbf_head.h11
-rw-r--r--ext/dbase/dbf_misc.c179
-rw-r--r--ext/dbase/dbf_misc.h13
-rw-r--r--ext/dbase/dbf_ndx.c191
-rw-r--r--ext/dbase/dbf_ndx.h98
-rw-r--r--ext/dbase/dbf_rec.c206
-rw-r--r--ext/dbase/dbf_rec.h10
-rw-r--r--ext/dbase/package.xml57
-rw-r--r--ext/dbase/php_dbase.h45
-rw-r--r--ext/dbx/CREDITS2
-rw-r--r--ext/dbx/INSTALL25
-rw-r--r--ext/dbx/config.m410
-rw-r--r--ext/dbx/config.w3210
-rw-r--r--ext/dbx/dbx.c995
-rw-r--r--ext/dbx/dbx.dsp181
-rw-r--r--ext/dbx/dbx.h63
-rw-r--r--ext/dbx/dbx_fbsql.c283
-rw-r--r--ext/dbx/dbx_fbsql.h63
-rw-r--r--ext/dbx/dbx_mssql.c282
-rw-r--r--ext/dbx/dbx_mssql.h62
-rw-r--r--ext/dbx/dbx_mysql.c304
-rw-r--r--ext/dbx/dbx_mysql.h62
-rw-r--r--ext/dbx/dbx_oci8.c293
-rw-r--r--ext/dbx/dbx_oci8.h62
-rw-r--r--ext/dbx/dbx_odbc.c301
-rw-r--r--ext/dbx/dbx_odbc.h62
-rw-r--r--ext/dbx/dbx_pgsql.c297
-rw-r--r--ext/dbx/dbx_pgsql.h58
-rw-r--r--ext/dbx/dbx_sqlite.c273
-rw-r--r--ext/dbx/dbx_sqlite.h62
-rw-r--r--ext/dbx/dbx_sybasect.c307
-rw-r--r--ext/dbx/dbx_sybasect.h62
-rw-r--r--ext/dbx/howto_extend_dbx.html316
-rw-r--r--ext/dbx/package.xml89
-rw-r--r--ext/dbx/php_dbx.h89
-rw-r--r--ext/dbx/tests/001.phpt10
-rw-r--r--ext/dbx/tests/002.phpt31
-rw-r--r--ext/dbx/tests/003.phpt139
-rw-r--r--ext/dbx/tests/004.phpt35
-rw-r--r--ext/dbx/tests/005.phpt113
-rw-r--r--ext/dbx/tests/006.phpt57
-rw-r--r--ext/dbx/tests/007.phpt74
-rw-r--r--ext/dbx/tests/008.phpt146
-rw-r--r--ext/dbx/tests/009.phpt65
-rw-r--r--ext/dbx/tests/010.phpt52
-rw-r--r--ext/dbx/tests/dbx_test.p73
-rw-r--r--ext/dbx/tests/dbx_test.pgsql.script37
-rw-r--r--ext/dbx/tests/dbx_test.script38
-rw-r--r--ext/dbx/tests/skipif.inc6
-rw-r--r--ext/dio/EXPERIMENTAL0
-rw-r--r--ext/dio/config.m410
-rw-r--r--ext/dio/config.w329
-rw-r--r--ext/dio/dio.c642
-rw-r--r--ext/dio/package.xml46
-rw-r--r--ext/dio/php_dio.h62
-rw-r--r--ext/dio/tests/001.phpt21
-rw-r--r--ext/dom/CREDITS2
-rw-r--r--ext/dom/TODO4
-rw-r--r--ext/dom/attr.c283
-rw-r--r--ext/dom/cdatasection.c78
-rw-r--r--ext/dom/characterdata.c384
-rw-r--r--ext/dom/comment.c77
-rw-r--r--ext/dom/config.m433
-rw-r--r--ext/dom/config.w3222
-rw-r--r--ext/dom/document.c2159
-rw-r--r--ext/dom/documentfragment.c105
-rw-r--r--ext/dom/documenttype.c234
-rw-r--r--ext/dom/dom.dsp250
-rw-r--r--ext/dom/dom_ce.h57
-rw-r--r--ext/dom/dom_fe.h264
-rw-r--r--ext/dom/dom_iterators.c312
-rw-r--r--ext/dom/dom_properties.h162
-rw-r--r--ext/dom/domconfiguration.c79
-rw-r--r--ext/dom/domerror.c138
-rw-r--r--ext/dom/domerrorhandler.c55
-rw-r--r--ext/dom/domexception.c111
-rw-r--r--ext/dom/domimplementation.c233
-rw-r--r--ext/dom/domimplementationlist.c71
-rw-r--r--ext/dom/domimplementationsource.c67
-rw-r--r--ext/dom/domlocator.c123
-rw-r--r--ext/dom/domstringlist.c71
-rw-r--r--ext/dom/element.c885
-rw-r--r--ext/dom/entity.c196
-rw-r--r--ext/dom/entityreference.c85
-rw-r--r--ext/dom/examples/dom1.inc43
-rw-r--r--ext/dom/examples/dom1.php94
-rw-r--r--ext/dom/examples/note-invalid.xml9
-rw-r--r--ext/dom/examples/note.dtd6
-rw-r--r--ext/dom/examples/note.php19
-rw-r--r--ext/dom/examples/note.xml8
-rw-r--r--ext/dom/examples/relaxNG.php11
-rw-r--r--ext/dom/examples/relaxNG.rng11
-rw-r--r--ext/dom/examples/relaxNG.xml1
-rw-r--r--ext/dom/examples/relaxNG2.rng23
-rw-r--r--ext/dom/examples/relaxNG3.rng8
-rw-r--r--ext/dom/examples/shipping.php11
-rw-r--r--ext/dom/examples/shipping.xml21
-rw-r--r--ext/dom/examples/shipping.xsd36
-rw-r--r--ext/dom/namednodemap.c288
-rw-r--r--ext/dom/namelist.c81
-rw-r--r--ext/dom/node.c1691
-rw-r--r--ext/dom/nodelist.c168
-rw-r--r--ext/dom/notation.c102
-rw-r--r--ext/dom/php_dom.c1386
-rw-r--r--ext/dom/php_dom.h143
-rw-r--r--ext/dom/processinginstruction.c173
-rw-r--r--ext/dom/string_extend.c67
-rw-r--r--ext/dom/tests/book.xml11
-rw-r--r--ext/dom/tests/book.xml.gzbin119 -> 0 bytes
-rw-r--r--ext/dom/tests/bug28721.phpt485
-rw-r--r--ext/dom/tests/dom001.phpt275
-rw-r--r--ext/dom/tests/dom002.phpt57
-rw-r--r--ext/dom/tests/dom003.phpt44
-rw-r--r--ext/dom/tests/dom004.phpt25
-rw-r--r--ext/dom/tests/dom005.phpt36
-rw-r--r--ext/dom/tests/dom006.phpt40
-rw-r--r--ext/dom/tests/dom_create_element.phpt394
-rw-r--r--ext/dom/tests/dom_import_simplexml.phpt27
-rw-r--r--ext/dom/tests/dom_test.inc47
-rw-r--r--ext/dom/tests/dom_xinclude.phpt33
-rw-r--r--ext/dom/tests/skipif.inc1
-rw-r--r--ext/dom/tests/test.html9
-rw-r--r--ext/dom/tests/xinclude.xml4
-rw-r--r--ext/dom/text.c202
-rw-r--r--ext/dom/typeinfo.c74
-rw-r--r--ext/dom/userdatahandler.c55
-rw-r--r--ext/dom/xml_common.h102
-rw-r--r--ext/dom/xpath.c262
-rw-r--r--ext/enchant/CREDITS2
-rwxr-xr-xext/enchant/config.m436
-rw-r--r--ext/enchant/config.w3213
-rw-r--r--ext/enchant/docs/examples/example1.php25
-rwxr-xr-xext/enchant/enchant.c731
-rwxr-xr-xext/enchant/package.xml83
-rw-r--r--ext/enchant/php_enchant.h80
-rw-r--r--ext/ereg/ereg.c637
-rw-r--r--ext/ereg/php_ereg.h50
-rw-r--r--ext/ereg/php_regex.h65
-rw-r--r--ext/ereg/regex/COPYRIGHT20
-rw-r--r--ext/ereg/regex/README32
-rw-r--r--ext/ereg/regex/WHATSNEW92
-rw-r--r--ext/ereg/regex/cclass.h30
-rw-r--r--ext/ereg/regex/cname.h102
-rw-r--r--ext/ereg/regex/debug.c242
-rw-r--r--ext/ereg/regex/debug.ih14
-rw-r--r--ext/ereg/regex/engine.c1019
-rw-r--r--ext/ereg/regex/engine.ih35
-rw-r--r--ext/ereg/regex/main.c510
-rw-r--r--ext/ereg/regex/main.ih19
-rw-r--r--ext/ereg/regex/mkh76
-rw-r--r--ext/ereg/regex/regcomp.c1608
-rw-r--r--ext/ereg/regex/regcomp.ih53
-rw-r--r--ext/ereg/regex/regerror.c126
-rw-r--r--ext/ereg/regex/regerror.ih12
-rw-r--r--ext/ereg/regex/regex.3502
-rw-r--r--ext/ereg/regex/regex.7233
-rw-r--r--ext/ereg/regex/regex.dsp106
-rw-r--r--ext/ereg/regex/regex.dsw29
-rw-r--r--ext/ereg/regex/regex.h83
-rw-r--r--ext/ereg/regex/regex.mak304
-rw-r--r--ext/ereg/regex/regex2.h140
-rw-r--r--ext/ereg/regex/regex_extra.h23
-rw-r--r--ext/ereg/regex/regexec.c138
-rw-r--r--ext/ereg/regex/regfree.c37
-rw-r--r--ext/ereg/regex/split.c316
-rw-r--r--ext/ereg/regex/tests475
-rw-r--r--ext/ereg/regex/utils.h25
-rw-r--r--ext/ereg/tests/001.phpt7
-rw-r--r--ext/ereg/tests/002.phpt7
-rw-r--r--ext/ereg/tests/003.phpt8
-rw-r--r--ext/ereg/tests/004.phpt14
-rw-r--r--ext/ereg/tests/005.phpt18
-rw-r--r--ext/ereg/tests/006.phpt8
-rw-r--r--ext/ereg/tests/007.phpt10
-rw-r--r--ext/ereg/tests/008.phpt8
-rw-r--r--ext/ereg/tests/009.phpt17
-rw-r--r--ext/ereg/tests/010.phpt7
-rw-r--r--ext/ereg/tests/011.phpt7
-rw-r--r--ext/ereg/tests/012.phpt7
-rw-r--r--ext/ereg/tests/013.phpt7
-rw-r--r--ext/ereg/tests/014.phpt7
-rw-r--r--ext/ereg/tests/015.phpt6
-rw-r--r--ext/ereg/tests/016.phpt6
-rw-r--r--ext/exif/CREDITS2
-rw-r--r--ext/exif/config.m411
-rw-r--r--ext/exif/config.w3210
-rw-r--r--ext/exif/example.php23
-rw-r--r--ext/exif/exif.c4048
-rw-r--r--ext/exif/exif.dsp113
-rw-r--r--ext/exif/package.xml62
-rw-r--r--ext/exif/php_exif.h30
-rw-r--r--ext/exif/test.php3
-rw-r--r--ext/exif/test.txt365
-rw-r--r--ext/exif/tests/exif000.phpt57
-rw-r--r--ext/exif/tests/exif001.phpt84
-rw-r--r--ext/exif/tests/exif002.phpt24
-rw-r--r--ext/exif/tests/exif003.phpt91
-rw-r--r--ext/exif/tests/exif004.phpt38
-rw-r--r--ext/exif/tests/exif005.phpt22
-rw-r--r--ext/exif/tests/exif006.phpt89
-rw-r--r--ext/exif/tests/test1.jpgbin523 -> 0 bytes
-rw-r--r--ext/exif/tests/test2.jpgbin1240 -> 0 bytes
-rw-r--r--ext/exif/tests/test3.jpgbin1240 -> 0 bytes
-rw-r--r--ext/exif/tests/test4.jpgbin713 -> 0 bytes
-rw-r--r--ext/exif/tests/test5.jpgbin603 -> 0 bytes
-rw-r--r--ext/exif/tests/test6.jpgbin1240 -> 0 bytes
-rwxr-xr-xext/ext_skel300
-rw-r--r--ext/ext_skel_win32.php65
-rw-r--r--ext/fam/CREDITS2
-rw-r--r--ext/fam/config.m456
-rw-r--r--ext/fam/fam.c432
-rw-r--r--ext/fam/package.xml48
-rw-r--r--ext/fam/php_fam.h89
-rw-r--r--ext/fbsql/CREDITS2
-rw-r--r--ext/fbsql/Readme_w32.txt22
-rw-r--r--ext/fbsql/config.m443
-rw-r--r--ext/fbsql/config.w3219
-rw-r--r--ext/fbsql/fbsql.dsp171
-rw-r--r--ext/fbsql/php_fbsql.c3653
-rw-r--r--ext/fbsql/php_fbsql.h147
-rw-r--r--ext/fdf/CREDITS2
-rw-r--r--ext/fdf/config.m473
-rw-r--r--ext/fdf/config.w3215
-rw-r--r--ext/fdf/fdf.c1628
-rw-r--r--ext/fdf/fdf.dsp114
-rw-r--r--ext/fdf/package.xml58
-rw-r--r--ext/fdf/php_fdf.h96
-rw-r--r--ext/fdf/tests/01-general.phpt10
-rw-r--r--ext/fdf/tests/02-values.phpt19
-rw-r--r--ext/fdf/tests/03-read-file.phpt15
-rw-r--r--ext/fdf/tests/04-POST.phpt40
-rw-r--r--ext/fdf/tests/simple.fdf18
-rw-r--r--ext/fileinfo/CREDITS2
-rw-r--r--ext/fileinfo/EXPERIMENTAL0
-rw-r--r--ext/fileinfo/config.m454
-rw-r--r--ext/fileinfo/fileinfo.c433
-rw-r--r--ext/fileinfo/fileinfo.php29
-rw-r--r--ext/fileinfo/package.xml43
-rw-r--r--ext/fileinfo/php_fileinfo.h61
-rw-r--r--ext/filepro/CREDITS2
-rw-r--r--ext/filepro/config.m411
-rw-r--r--ext/filepro/config.w329
-rw-r--r--ext/filepro/filepro.c572
-rw-r--r--ext/filepro/filepro.dsp109
-rw-r--r--ext/filepro/package.xml40
-rw-r--r--ext/filepro/php_filepro.h48
-rw-r--r--ext/ftp/CREDITS2
-rw-r--r--ext/ftp/config.m411
-rw-r--r--ext/ftp/config.w329
-rw-r--r--ext/ftp/ftp.c1969
-rw-r--r--ext/ftp/ftp.h213
-rw-r--r--ext/ftp/package.xml56
-rw-r--r--ext/ftp/php_ftp.c1253
-rw-r--r--ext/ftp/php_ftp.h79
-rw-r--r--ext/gd/CREDITS2
-rw-r--r--ext/gd/config.m4422
-rw-r--r--ext/gd/config.w3248
-rw-r--r--ext/gd/gd.c4230
-rw-r--r--ext/gd/gd.dsp600
-rw-r--r--ext/gd/gd_ctx.c163
-rw-r--r--ext/gd/gdcache.c203
-rw-r--r--ext/gd/gdcache.h87
-rw-r--r--ext/gd/gdttf.c845
-rw-r--r--ext/gd/gdttf.h16
-rw-r--r--ext/gd/libgd/README72
-rw-r--r--ext/gd/libgd/gd.c3813
-rw-r--r--ext/gd/libgd/gd.h664
-rw-r--r--ext/gd/libgd/gd2copypal.c65
-rw-r--r--ext/gd/libgd/gd2time.c60
-rw-r--r--ext/gd/libgd/gd2topng.c49
-rw-r--r--ext/gd/libgd/gd_arc_f_buggy.c741
-rw-r--r--ext/gd/libgd/gd_gd.c274
-rw-r--r--ext/gd/libgd/gd_gd2.c825
-rw-r--r--ext/gd/libgd/gd_gif_in.c580
-rw-r--r--ext/gd/libgd/gd_gif_out.c759
-rw-r--r--ext/gd/libgd/gd_io.c146
-rw-r--r--ext/gd/libgd/gd_io.h43
-rw-r--r--ext/gd/libgd/gd_io_dp.c360
-rw-r--r--ext/gd/libgd/gd_io_file.c128
-rw-r--r--ext/gd/libgd/gd_io_ss.c138
-rw-r--r--ext/gd/libgd/gd_jpeg.c763
-rw-r--r--ext/gd/libgd/gd_png.c706
-rw-r--r--ext/gd/libgd/gd_ss.c49
-rw-r--r--ext/gd/libgd/gd_topal.c2122
-rw-r--r--ext/gd/libgd/gd_wbmp.c210
-rw-r--r--ext/gd/libgd/gdcache.c214
-rw-r--r--ext/gd/libgd/gdcache.h86
-rw-r--r--ext/gd/libgd/gddemo.c118
-rw-r--r--ext/gd/libgd/gdfontg.c4389
-rw-r--r--ext/gd/libgd/gdfontg.h30
-rw-r--r--ext/gd/libgd/gdfontl.c4646
-rw-r--r--ext/gd/libgd/gdfontl.h31
-rw-r--r--ext/gd/libgd/gdfontmb.c3876
-rw-r--r--ext/gd/libgd/gdfontmb.h29
-rw-r--r--ext/gd/libgd/gdfonts.c3876
-rw-r--r--ext/gd/libgd/gdfonts.h29
-rw-r--r--ext/gd/libgd/gdfontt.c2597
-rw-r--r--ext/gd/libgd/gdfontt.h30
-rw-r--r--ext/gd/libgd/gdft.c1105
-rw-r--r--ext/gd/libgd/gdhelpers.c76
-rw-r--r--ext/gd/libgd/gdhelpers.h39
-rw-r--r--ext/gd/libgd/gdkanji.c627
-rw-r--r--ext/gd/libgd/gdparttopng.c59
-rw-r--r--ext/gd/libgd/gdtables.c730
-rw-r--r--ext/gd/libgd/gdtest.c409
-rw-r--r--ext/gd/libgd/gdtestft.c108
-rw-r--r--ext/gd/libgd/gdtopng.c44
-rw-r--r--ext/gd/libgd/gdxpm.c139
-rw-r--r--ext/gd/libgd/jisx0208.h1205
-rw-r--r--ext/gd/libgd/mathmake.c52
-rw-r--r--ext/gd/libgd/pngtogd.c45
-rw-r--r--ext/gd/libgd/pngtogd2.c52
-rw-r--r--ext/gd/libgd/testac.c129
-rw-r--r--ext/gd/libgd/wbmp.c369
-rw-r--r--ext/gd/libgd/wbmp.h48
-rw-r--r--ext/gd/libgd/webpng.c289
-rw-r--r--ext/gd/libgd/xbm.c239
-rw-r--r--ext/gd/php_gd.h189
-rw-r--r--ext/gd/tests/bug19366.phpt53
-rw-r--r--ext/gd/tests/bug22544.phpt26
-rw-r--r--ext/gd/tests/bug24155.phpt26
-rw-r--r--ext/gd/tests/bug24594.phpt85
-rw-r--r--ext/gd/tests/bug27582_1.phpt24
-rw-r--r--ext/gd/tests/bug28147.phpt27
-rw-r--r--ext/gd/tests/conv_test.gifbin4998 -> 0 bytes
-rw-r--r--ext/gd/tests/conv_test.jpegbin2317 -> 0 bytes
-rw-r--r--ext/gd/tests/conv_test.pngbin4053 -> 0 bytes
-rw-r--r--ext/gd/tests/conv_test.xbm4
-rw-r--r--ext/gd/tests/conv_test.xpm1588
-rw-r--r--ext/gd/tests/gif2gd.phpt32
-rw-r--r--ext/gd/tests/gif2jpg.phpt29
-rw-r--r--ext/gd/tests/gif2png.phpt29
-rw-r--r--ext/gd/tests/imagefilter.phpt89
-rw-r--r--ext/gd/tests/imagefttext.phpt52
-rw-r--r--ext/gd/tests/jpeg2png.phpt47
-rw-r--r--ext/gd/tests/jpg2gd.phpt44
-rw-r--r--ext/gd/tests/png2gd.phpt44
-rw-r--r--ext/gd/tests/test.pngbin2711 -> 0 bytes
-rw-r--r--ext/gd/tests/test8859.ttfbin10576 -> 0 bytes
-rw-r--r--ext/gd/tests/xbm2png.phpt26
-rw-r--r--ext/gd/tests/xpm2gd.phpt32
-rw-r--r--ext/gd/tests/xpm2jpg.phpt29
-rw-r--r--ext/gd/tests/xpm2png.phpt29
-rw-r--r--ext/gettext/CREDITS2
-rw-r--r--ext/gettext/config.m450
-rw-r--r--ext/gettext/config.w3212
-rw-r--r--ext/gettext/gettext.c319
-rw-r--r--ext/gettext/gettext.dsp113
-rw-r--r--ext/gettext/php_gettext.h55
-rw-r--r--ext/gettext/tests/gettext_basic.phpt25
-rw-r--r--ext/gettext/tests/locale/fi/LC_MESSAGES/messages.mobin199 -> 0 bytes
-rw-r--r--ext/gettext/tests/locale/fi/LC_MESSAGES/messages.po15
-rw-r--r--ext/gmp/CREDITS2
-rw-r--r--ext/gmp/README5
-rw-r--r--ext/gmp/TODO22
-rw-r--r--ext/gmp/config.m436
-rw-r--r--ext/gmp/gmp.c1312
-rw-r--r--ext/gmp/php_gmp.h104
-rw-r--r--ext/gmp/tests/001.phpt21
-rw-r--r--ext/gmp/tests/002.phpt17
-rw-r--r--ext/gmp/tests/003.phpt47
-rw-r--r--ext/hwapi/CREDITS2
-rw-r--r--ext/hwapi/config.m435
-rw-r--r--ext/hwapi/hwapi.cpp5031
-rw-r--r--ext/hwapi/php_hwapi.h159
-rw-r--r--ext/iconv/CREDITS2
-rw-r--r--ext/iconv/config.m4137
-rw-r--r--ext/iconv/config.w3220
-rw-r--r--ext/iconv/iconv.c2691
-rw-r--r--ext/iconv/iconv.dsp107
-rw-r--r--ext/iconv/php_iconv.def6
-rw-r--r--ext/iconv/php_iconv.h94
-rw-r--r--ext/iconv/tests/Quotes.UTF-84
-rw-r--r--ext/iconv/tests/bug16069.phpt22
-rw-r--r--ext/iconv/tests/eucjp2iso2022jp.phpt27
-rw-r--r--ext/iconv/tests/eucjp2sjis.phpt58
-rw-r--r--ext/iconv/tests/eucjp2utf8.phpt58
-rw-r--r--ext/iconv/tests/iconv001.phpt18
-rw-r--r--ext/iconv/tests/iconv002.phpt30
-rw-r--r--ext/iconv/tests/iconv003.phpt13
-rw-r--r--ext/iconv/tests/iconv_mime_decode.phpt90
-rw-r--r--ext/iconv/tests/iconv_mime_decode_headers.phpt89
-rw-r--r--ext/iconv/tests/iconv_mime_encode.phpt426
-rw-r--r--ext/iconv/tests/iconv_stream_filter.phpt41
-rw-r--r--ext/iconv/tests/iconv_stream_filter.txt1
-rw-r--r--ext/iconv/tests/iconv_strlen.phpt19
-rw-r--r--ext/iconv/tests/iconv_strpos.phpt52
-rw-r--r--ext/iconv/tests/iconv_strrpos.phpt56
-rw-r--r--ext/iconv/tests/iconv_substr.phpt59
-rw-r--r--ext/iconv/tests/ob_iconv_handler.phpt17
-rw-r--r--ext/iconv/tests/skipif.inc12
-rw-r--r--ext/iconv/tests/test.inc7
-rw-r--r--ext/iconv/tests/translit-failure.phpt31
-rw-r--r--ext/iconv/tests/translit-utf8.phpt28
-rw-r--r--ext/imap/CREDITS2
-rw-r--r--ext/imap/IMAP_Win32_HOWTO.txt32
-rw-r--r--ext/imap/config.m4204
-rw-r--r--ext/imap/config.w3221
-rw-r--r--ext/imap/imap.dsp176
-rw-r--r--ext/imap/imap.h103
-rw-r--r--ext/imap/php_imap.c4343
-rw-r--r--ext/imap/php_imap.h224
-rw-r--r--ext/informix/CREDITS2
-rw-r--r--ext/informix/Makefile.frag13
-rw-r--r--ext/informix/config.m496
-rw-r--r--ext/informix/config.w3232
-rw-r--r--ext/informix/ifx.dsp138
-rw-r--r--ext/informix/ifx.ec4712
-rw-r--r--ext/informix/php_informix.h125
-rw-r--r--ext/informix/php_informix_includes.h90
-rw-r--r--ext/ingres_ii/CREDITS2
-rw-r--r--ext/ingres_ii/EXPERIMENTAL5
-rw-r--r--ext/ingres_ii/README13
-rw-r--r--ext/ingres_ii/config.m435
-rw-r--r--ext/ingres_ii/ii.c1545
-rw-r--r--ext/ingres_ii/ii.h65
-rw-r--r--ext/ingres_ii/ingres.dsp111
-rw-r--r--ext/ingres_ii/php_ii.h100
-rw-r--r--ext/interbase/CREDITS2
-rw-r--r--ext/interbase/config.m446
-rw-r--r--ext/interbase/config.w3217
-rw-r--r--ext/interbase/ibase_blobs.c594
-rw-r--r--ext/interbase/ibase_events.c385
-rw-r--r--ext/interbase/ibase_query.c2115
-rw-r--r--ext/interbase/ibase_service.c629
-rw-r--r--ext/interbase/interbase.c1206
-rw-r--r--ext/interbase/interbase.dsp135
-rw-r--r--ext/interbase/interbase.rc81
-rwxr-xr-xext/interbase/php_ibase_includes.h200
-rw-r--r--ext/interbase/php_ibase_udf.c405
-rw-r--r--ext/interbase/php_interbase.h107
-rw-r--r--ext/interbase/tests/002.phpt33
-rw-r--r--ext/interbase/tests/003.phpt183
-rw-r--r--ext/interbase/tests/004.phpt182
-rw-r--r--ext/interbase/tests/005.phpt290
-rw-r--r--ext/interbase/tests/006.phpt301
-rw-r--r--ext/interbase/tests/007.phpt183
-rwxr-xr-xext/interbase/tests/008.phpt48
-rwxr-xr-xext/interbase/tests/interbase.inc117
-rwxr-xr-xext/interbase/tests/skipif.inc5
-rw-r--r--ext/ldap/CREDITS2
-rw-r--r--ext/ldap/LDAP_Win32_HOWTO.txt33
-rw-r--r--ext/ldap/config.m4191
-rw-r--r--ext/ldap/config.w3222
-rw-r--r--ext/ldap/ldap.c2190
-rw-r--r--ext/ldap/ldap.dsp288
-rw-r--r--ext/ldap/ldap.mak173
-rw-r--r--ext/ldap/php_ldap.h110
-rw-r--r--ext/libxml/CREDITS2
-rw-r--r--ext/libxml/config.w3222
-rw-r--r--ext/libxml/config0.m424
-rw-r--r--ext/libxml/libxml.c690
-rw-r--r--ext/libxml/php_libxml.h104
-rw-r--r--ext/libxml/php_libxml2.def1571
-rw-r--r--ext/mbstring/CREDITS2
-rw-r--r--ext/mbstring/README17
-rw-r--r--ext/mbstring/README.libmbfl16
-rw-r--r--ext/mbstring/README_PHP3-i18n-ja774
-rw-r--r--ext/mbstring/config.m4264
-rw-r--r--ext/mbstring/config.w3263
-rw-r--r--ext/mbstring/libmbfl/AUTHORS10
-rw-r--r--ext/mbstring/libmbfl/DISCLAIMER69
-rw-r--r--ext/mbstring/libmbfl/INSTALL12
-rw-r--r--ext/mbstring/libmbfl/LICENSE458
-rw-r--r--ext/mbstring/libmbfl/Makefile.am5
-rw-r--r--ext/mbstring/libmbfl/Makefile.bcc3233
-rw-r--r--ext/mbstring/libmbfl/README8
-rwxr-xr-xext/mbstring/libmbfl/buildconf6
-rw-r--r--ext/mbstring/libmbfl/config.h.bcc3212
-rw-r--r--ext/mbstring/libmbfl/config.h.in87
-rw-r--r--ext/mbstring/libmbfl/config.h.vc612
-rw-r--r--ext/mbstring/libmbfl/configure.in32
-rwxr-xr-xext/mbstring/libmbfl/cvsclean14
-rw-r--r--ext/mbstring/libmbfl/filters/Makefile.am5
-rw-r--r--ext/mbstring/libmbfl/filters/Makefile.bcc329
-rw-r--r--ext/mbstring/libmbfl/filters/cp932_table.h95
-rw-r--r--ext/mbstring/libmbfl/filters/html_entities.c297
-rw-r--r--ext/mbstring/libmbfl/filters/html_entities.h41
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_7bit.c82
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_7bit.h43
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_ascii.c114
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_ascii.h46
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_base64.c214
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_base64.h45
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_big5.c227
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_big5.h43
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_byte2.c137
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_byte2.h48
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_byte4.c159
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_byte4.h46
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_cp1251.c152
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_cp1251.h44
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_cp1252.c147
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_cp1252.h43
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_cp866.c151
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_cp866.h41
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_cp932.c350
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_cp932.h43
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_cp936.c228
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_cp936.h43
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_euc_cn.c236
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_euc_cn.h43
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_euc_jp.c331
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_euc_jp.h43
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_euc_jp_win.c420
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_euc_jp_win.h43
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_euc_kr.c256
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_euc_kr.h43
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_euc_tw.c329
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_euc_tw.h43
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_htmlent.c260
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_htmlent.h48
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_hz.c276
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_hz.h44
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_iso2022_kr.c353
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_iso2022_kr.h44
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_iso8859_1.c100
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_iso8859_1.h43
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_iso8859_10.c138
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_iso8859_10.h43
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_iso8859_13.c138
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_iso8859_13.h43
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_iso8859_14.c138
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_iso8859_14.h26
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_iso8859_15.c136
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_iso8859_15.h26
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_iso8859_2.c139
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_iso8859_2.h43
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_iso8859_3.c139
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_iso8859_3.h43
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_iso8859_4.c137
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_iso8859_4.h41
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_iso8859_5.c139
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_iso8859_5.h43
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_iso8859_6.c139
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_iso8859_6.h43
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_iso8859_7.c139
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_iso8859_7.h43
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_iso8859_8.c137
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_iso8859_8.h43
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_iso8859_9.c138
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_iso8859_9.h43
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_jis.c658
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_jis.h49
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_koi8r.c149
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_koi8r.h50
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_qprint.c233
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_qprint.h44
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_sjis.c295
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_sjis.h47
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_ucs2.c238
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_ucs2.h51
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_ucs4.c275
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_ucs4.h49
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_uhc.c266
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_uhc.h43
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_utf16.c309
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_utf16.h49
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_utf32.c272
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_utf32.h50
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_utf7.c460
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_utf7.h44
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_utf7imap.c372
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_utf7imap.h43
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_utf8.c269
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_utf8.h41
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_uuencode.c152
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_uuencode.h39
-rw-r--r--ext/mbstring/libmbfl/filters/unicode_prop.h167
-rw-r--r--ext/mbstring/libmbfl/filters/unicode_table_big5.h5123
-rw-r--r--ext/mbstring/libmbfl/filters/unicode_table_cns11643.h6149
-rw-r--r--ext/mbstring/libmbfl/filters/unicode_table_cp1251.h51
-rw-r--r--ext/mbstring/libmbfl/filters/unicode_table_cp1252.h40
-rw-r--r--ext/mbstring/libmbfl/filters/unicode_table_cp866.h51
-rw-r--r--ext/mbstring/libmbfl/filters/unicode_table_cp932_ext.h170
-rw-r--r--ext/mbstring/libmbfl/filters/unicode_table_cp936.h6489
-rw-r--r--ext/mbstring/libmbfl/filters/unicode_table_iso8859_10.h44
-rw-r--r--ext/mbstring/libmbfl/filters/unicode_table_iso8859_13.h44
-rw-r--r--ext/mbstring/libmbfl/filters/unicode_table_iso8859_14.h44
-rw-r--r--ext/mbstring/libmbfl/filters/unicode_table_iso8859_15.h44
-rw-r--r--ext/mbstring/libmbfl/filters/unicode_table_iso8859_2.h45
-rw-r--r--ext/mbstring/libmbfl/filters/unicode_table_iso8859_3.h43
-rw-r--r--ext/mbstring/libmbfl/filters/unicode_table_iso8859_4.h44
-rw-r--r--ext/mbstring/libmbfl/filters/unicode_table_iso8859_5.h44
-rw-r--r--ext/mbstring/libmbfl/filters/unicode_table_iso8859_6.h44
-rw-r--r--ext/mbstring/libmbfl/filters/unicode_table_iso8859_7.h44
-rw-r--r--ext/mbstring/libmbfl/filters/unicode_table_iso8859_8.h44
-rw-r--r--ext/mbstring/libmbfl/filters/unicode_table_iso8859_9.h44
-rw-r--r--ext/mbstring/libmbfl/filters/unicode_table_jis.h5847
-rw-r--r--ext/mbstring/libmbfl/filters/unicode_table_koi8r.h53
-rw-r--r--ext/mbstring/libmbfl/filters/unicode_table_uhc.h7186
-rw-r--r--ext/mbstring/libmbfl/libmbfl.dsp763
-rw-r--r--ext/mbstring/libmbfl/libmbfl.dsw29
-rw-r--r--ext/mbstring/libmbfl/mbfl.def80
-rw-r--r--ext/mbstring/libmbfl/mbfl.rc24
-rw-r--r--ext/mbstring/libmbfl/mbfl/Makefile.am15
-rw-r--r--ext/mbstring/libmbfl/mbfl/Makefile.bcc327
-rw-r--r--ext/mbstring/libmbfl/mbfl/mbfilter.c2703
-rw-r--r--ext/mbstring/libmbfl/mbfl/mbfilter.h280
-rw-r--r--ext/mbstring/libmbfl/mbfl/mbfilter_8bit.c50
-rw-r--r--ext/mbstring/libmbfl/mbfl/mbfilter_8bit.h39
-rw-r--r--ext/mbstring/libmbfl/mbfl/mbfilter_pass.c65
-rw-r--r--ext/mbstring/libmbfl/mbfl/mbfilter_pass.h41
-rw-r--r--ext/mbstring/libmbfl/mbfl/mbfilter_wchar.c48
-rw-r--r--ext/mbstring/libmbfl/mbfl/mbfilter_wchar.h39
-rw-r--r--ext/mbstring/libmbfl/mbfl/mbfl_allocators.c93
-rw-r--r--ext/mbstring/libmbfl/mbfl/mbfl_allocators.h56
-rw-r--r--ext/mbstring/libmbfl/mbfl/mbfl_consts.h85
-rw-r--r--ext/mbstring/libmbfl/mbfl/mbfl_convert.c499
-rw-r--r--ext/mbstring/libmbfl/mbfl/mbfl_convert.h88
-rwxr-xr-xext/mbstring/libmbfl/mbfl/mbfl_defs.h52
-rw-r--r--ext/mbstring/libmbfl/mbfl/mbfl_encoding.c301
-rw-r--r--ext/mbstring/libmbfl/mbfl/mbfl_encoding.h126
-rw-r--r--ext/mbstring/libmbfl/mbfl/mbfl_filter_output.c49
-rw-r--r--ext/mbstring/libmbfl/mbfl/mbfl_filter_output.h37
-rw-r--r--ext/mbstring/libmbfl/mbfl/mbfl_ident.c245
-rw-r--r--ext/mbstring/libmbfl/mbfl/mbfl_ident.h72
-rw-r--r--ext/mbstring/libmbfl/mbfl/mbfl_language.c165
-rw-r--r--ext/mbstring/libmbfl/mbfl/mbfl_language.h84
-rw-r--r--ext/mbstring/libmbfl/mbfl/mbfl_memory_device.c350
-rw-r--r--ext/mbstring/libmbfl/mbfl/mbfl_memory_device.h73
-rw-r--r--ext/mbstring/libmbfl/mbfl/mbfl_string.c79
-rw-r--r--ext/mbstring/libmbfl/mbfl/mbfl_string.h56
-rw-r--r--ext/mbstring/libmbfl/mksbcc32.bat5
-rw-r--r--ext/mbstring/libmbfl/nls/Makefile.am5
-rw-r--r--ext/mbstring/libmbfl/nls/Makefile.bcc328
-rw-r--r--ext/mbstring/libmbfl/nls/nls_de.c23
-rw-r--r--ext/mbstring/libmbfl/nls/nls_de.h8
-rw-r--r--ext/mbstring/libmbfl/nls/nls_en.c21
-rw-r--r--ext/mbstring/libmbfl/nls/nls_en.h8
-rw-r--r--ext/mbstring/libmbfl/nls/nls_ja.c20
-rw-r--r--ext/mbstring/libmbfl/nls/nls_ja.h8
-rw-r--r--ext/mbstring/libmbfl/nls/nls_kr.c21
-rw-r--r--ext/mbstring/libmbfl/nls/nls_kr.h8
-rw-r--r--ext/mbstring/libmbfl/nls/nls_neutral.c21
-rw-r--r--ext/mbstring/libmbfl/nls/nls_neutral.h8
-rw-r--r--ext/mbstring/libmbfl/nls/nls_ru.c20
-rw-r--r--ext/mbstring/libmbfl/nls/nls_ru.h9
-rw-r--r--ext/mbstring/libmbfl/nls/nls_uni.c23
-rw-r--r--ext/mbstring/libmbfl/nls/nls_uni.h8
-rw-r--r--ext/mbstring/libmbfl/nls/nls_zh.c31
-rw-r--r--ext/mbstring/libmbfl/nls/nls_zh.h9
-rw-r--r--ext/mbstring/libmbfl/rules.mak.bcc327
-rw-r--r--ext/mbstring/libmbfl/tests/sample.c38
-rw-r--r--ext/mbstring/mb_gpc.c406
-rw-r--r--ext/mbstring/mb_gpc.h47
-rw-r--r--ext/mbstring/mbstring.c3668
-rw-r--r--ext/mbstring/mbstring.dsp1068
-rw-r--r--ext/mbstring/mbstring.h231
-rw-r--r--ext/mbstring/oniguruma/COPYING32
-rw-r--r--ext/mbstring/oniguruma/HISTORY887
-rw-r--r--ext/mbstring/oniguruma/README165
-rw-r--r--ext/mbstring/oniguruma/config.h.in66
-rw-r--r--ext/mbstring/oniguruma/enc/ascii.c54
-rw-r--r--ext/mbstring/oniguruma/enc/big5.c122
-rw-r--r--ext/mbstring/oniguruma/enc/euc_jp.c191
-rw-r--r--ext/mbstring/oniguruma/enc/euc_kr.c136
-rw-r--r--ext/mbstring/oniguruma/enc/euc_tw.c98
-rw-r--r--ext/mbstring/oniguruma/enc/iso8859_1.c152
-rw-r--r--ext/mbstring/oniguruma/enc/iso8859_10.c155
-rw-r--r--ext/mbstring/oniguruma/enc/iso8859_11.c92
-rw-r--r--ext/mbstring/oniguruma/enc/iso8859_13.c155
-rw-r--r--ext/mbstring/oniguruma/enc/iso8859_14.c155
-rw-r--r--ext/mbstring/oniguruma/enc/iso8859_15.c155
-rw-r--r--ext/mbstring/oniguruma/enc/iso8859_16.c155
-rw-r--r--ext/mbstring/oniguruma/enc/iso8859_2.c152
-rw-r--r--ext/mbstring/oniguruma/enc/iso8859_3.c152
-rw-r--r--ext/mbstring/oniguruma/enc/iso8859_4.c155
-rw-r--r--ext/mbstring/oniguruma/enc/iso8859_5.c144
-rw-r--r--ext/mbstring/oniguruma/enc/iso8859_6.c92
-rw-r--r--ext/mbstring/oniguruma/enc/iso8859_7.c151
-rw-r--r--ext/mbstring/oniguruma/enc/iso8859_8.c92
-rw-r--r--ext/mbstring/oniguruma/enc/iso8859_9.c152
-rw-r--r--ext/mbstring/oniguruma/enc/koi8.c144
-rw-r--r--ext/mbstring/oniguruma/enc/koi8_r.c144
-rw-r--r--ext/mbstring/oniguruma/enc/mktable.c1069
-rw-r--r--ext/mbstring/oniguruma/enc/sjis.c174
-rw-r--r--ext/mbstring/oniguruma/enc/utf8.c566
-rw-r--r--ext/mbstring/oniguruma/onigcmpt200.h304
-rw-r--r--ext/mbstring/oniguruma/oniggnu.h77
-rw-r--r--ext/mbstring/oniguruma/onigposix.h136
-rw-r--r--ext/mbstring/oniguruma/oniguruma.h717
-rw-r--r--ext/mbstring/oniguruma/php_onig_compat.h7
-rw-r--r--ext/mbstring/oniguruma/regcomp.c5440
-rw-r--r--ext/mbstring/oniguruma/regenc.c586
-rw-r--r--ext/mbstring/oniguruma/regenc.h96
-rw-r--r--ext/mbstring/oniguruma/regerror.c291
-rw-r--r--ext/mbstring/oniguruma/regex.c26
-rw-r--r--ext/mbstring/oniguruma/regexec.c3299
-rw-r--r--ext/mbstring/oniguruma/reggnu.c256
-rw-r--r--ext/mbstring/oniguruma/regint.h685
-rw-r--r--ext/mbstring/oniguruma/regparse.c4815
-rw-r--r--ext/mbstring/oniguruma/regparse.h277
-rw-r--r--ext/mbstring/oniguruma/regposerr.c68
-rw-r--r--ext/mbstring/oniguruma/regposix.c252
-rw-r--r--ext/mbstring/oniguruma/testc.c833
-rw-r--r--ext/mbstring/oniguruma/win32/config.h84
-rw-r--r--ext/mbstring/php_mbregex.c1231
-rw-r--r--ext/mbstring/php_mbregex.h119
-rw-r--r--ext/mbstring/php_unicode.c313
-rw-r--r--ext/mbstring/php_unicode.h201
-rw-r--r--ext/mbstring/tests/bug20087.phpt20
-rw-r--r--ext/mbstring/tests/bug25140.phpt10
-rw-r--r--ext/mbstring/tests/bug26639.phpt123
-rw-r--r--ext/mbstring/tests/casefold.phpt24
-rw-r--r--ext/mbstring/tests/common.inc53
-rw-r--r--ext/mbstring/tests/htmlent.phpt38
-rw-r--r--ext/mbstring/tests/ini_language.phpt15
-rw-r--r--ext/mbstring/tests/mb_convert_encoding.phpt138
-rw-r--r--ext/mbstring/tests/mb_convert_variables.phpt164
-rw-r--r--ext/mbstring/tests/mb_detect_encoding.phpt121
-rw-r--r--ext/mbstring/tests/mb_detect_order.phpt61
-rw-r--r--ext/mbstring/tests/mb_ereg-compat-01.phpt21
-rw-r--r--ext/mbstring/tests/mb_ereg-compat-02.phpt25
-rw-r--r--ext/mbstring/tests/mb_ereg.phpt47
-rw-r--r--ext/mbstring/tests/mb_ereg_replace-compat-01.phpt15
-rw-r--r--ext/mbstring/tests/mb_ereg_replace-compat-02.phpt15
-rw-r--r--ext/mbstring/tests/mb_ereg_replace-compat-03.phpt15
-rw-r--r--ext/mbstring/tests/mb_ereg_replace-compat-04.phpt15
-rw-r--r--ext/mbstring/tests/mb_ereg_replace-compat-05.phpt16
-rw-r--r--ext/mbstring/tests/mb_ereg_replace-compat-06.phpt14
-rw-r--r--ext/mbstring/tests/mb_ereg_replace-compat-07.phpt15
-rw-r--r--ext/mbstring/tests/mb_ereg_replace-compat-08.phpt15
-rw-r--r--ext/mbstring/tests/mb_ereg_replace-compat-09.phpt15
-rw-r--r--ext/mbstring/tests/mb_ereg_replace-compat-10.phpt15
-rw-r--r--ext/mbstring/tests/mb_ereg_replace-compat-11.phpt15
-rw-r--r--ext/mbstring/tests/mb_ereg_replace-compat-12.phpt14
-rw-r--r--ext/mbstring/tests/mb_ereg_replace-compat-13.phpt14
-rw-r--r--ext/mbstring/tests/mb_ereg_replace.phpt18
-rw-r--r--ext/mbstring/tests/mb_ereg_search_xxx.phpt82
-rw-r--r--ext/mbstring/tests/mb_http_input.phpt51
-rw-r--r--ext/mbstring/tests/mb_http_output.phpt84
-rw-r--r--ext/mbstring/tests/mb_internal_encoding.phpt68
-rw-r--r--ext/mbstring/tests/mb_output_handler_euc_jp.phpt21
-rw-r--r--ext/mbstring/tests/mb_output_handler_shift_jis.phpt16
-rw-r--r--ext/mbstring/tests/mb_parse_str.phpt80
-rw-r--r--ext/mbstring/tests/mb_parse_str02.phpt105
-rw-r--r--ext/mbstring/tests/mb_preferred_mime_name.phpt61
-rw-r--r--ext/mbstring/tests/mb_regex_set_options.phpt18
-rw-r--r--ext/mbstring/tests/mb_send_mail01.phpt38
-rw-r--r--ext/mbstring/tests/mb_send_mail02.phpt38
-rw-r--r--ext/mbstring/tests/mb_send_mail03.phpt38
-rw-r--r--ext/mbstring/tests/mb_send_mail04.phpt38
-rw-r--r--ext/mbstring/tests/mb_send_mail05.phpt42
-rw-r--r--ext/mbstring/tests/mb_send_mail06.phpt41
-rw-r--r--ext/mbstring/tests/mb_send_mail07.phpt41
-rw-r--r--ext/mbstring/tests/mb_split-compat-01.phpt23
-rw-r--r--ext/mbstring/tests/mb_split.phpt48
-rw-r--r--ext/mbstring/tests/mb_strcut.phpt34
-rw-r--r--ext/mbstring/tests/mb_strimwidth.phpt43
-rw-r--r--ext/mbstring/tests/mb_strlen.phpt106
-rw-r--r--ext/mbstring/tests/mb_strpos.phpt175
-rw-r--r--ext/mbstring/tests/mb_strwidth.phpt32
-rw-r--r--ext/mbstring/tests/mb_substitute_character.phpt49
-rw-r--r--ext/mbstring/tests/mb_substr.phpt34
-rw-r--r--ext/mbstring/tests/mb_substr_count.phpt44
-rw-r--r--ext/mbstring/tests/overload01.phpt25
-rw-r--r--ext/mbstring/tests/overload02.phpt36
-rw-r--r--ext/mbstring/tests/php_gr_jp_10830.phpt18
-rw-r--r--ext/mbstring/tests/php_gr_jp_16242.phpt33
-rw-r--r--ext/mbstring/tests/php_gr_jp_dev_884-1.phpt18
-rw-r--r--ext/mbstring/tests/php_gr_jp_dev_884-2.phpt19
-rw-r--r--ext/mbstring/tests/simpletest.phpt34
-rw-r--r--ext/mbstring/tests/skipif.inc14
-rw-r--r--ext/mbstring/tests/zend-multibyte.phpt23
-rw-r--r--ext/mbstring/unicode_data.h2738
-rw-r--r--ext/mcrypt/CREDITS2
-rw-r--r--ext/mcrypt/TODO6
-rw-r--r--ext/mcrypt/config.m461
-rw-r--r--ext/mcrypt/config.w3217
-rw-r--r--ext/mcrypt/mcrypt.c1275
-rw-r--r--ext/mcrypt/mcrypt.dsp117
-rw-r--r--ext/mcrypt/php_mcrypt.h95
-rw-r--r--ext/mcrypt/tests/blowfish.phpt75
-rw-r--r--ext/mcrypt/tests/bug8040.phpt24
-rw-r--r--ext/mcrypt/tests/vectors.txt33
-rw-r--r--ext/mcve/CREDITS2
-rw-r--r--ext/mcve/config.m496
-rw-r--r--ext/mcve/config.w3218
-rw-r--r--ext/mcve/mcve.c2473
-rw-r--r--ext/mcve/mcve.dsp107
-rw-r--r--ext/mcve/mcve.php12
-rw-r--r--ext/mcve/mcve_simple_test.php19
-rw-r--r--ext/mcve/mcve_test1.php83
-rw-r--r--ext/mcve/mcve_test2.php68
-rw-r--r--ext/mcve/php_mcve.h206
-rw-r--r--ext/mcve/tests/001.phpt21
-rw-r--r--ext/mhash/CREDITS2
-rw-r--r--ext/mhash/config.m423
-rw-r--r--ext/mhash/config.w3216
-rw-r--r--ext/mhash/mhash.c254
-rw-r--r--ext/mhash/mhash.dsp115
-rw-r--r--ext/mhash/php_mhash.h49
-rw-r--r--ext/mhash/tests/001.phpt74
-rw-r--r--ext/mhash/tests/002.phpt64
-rw-r--r--ext/mhash/tests/003.phpt73
-rw-r--r--ext/mhash/tests/skip.inc5
-rw-r--r--ext/mime_magic/CREDITS2
-rw-r--r--ext/mime_magic/DEPRECATED36
-rw-r--r--ext/mime_magic/EXPERIMENTAL2
-rw-r--r--ext/mime_magic/TODO3
-rw-r--r--ext/mime_magic/config.m437
-rw-r--r--ext/mime_magic/config.w329
-rw-r--r--ext/mime_magic/mime_magic.c1978
-rw-r--r--ext/mime_magic/mime_magic.dsp112
-rw-r--r--ext/mime_magic/package.xml49
-rw-r--r--ext/mime_magic/php_mime_magic.h49
-rw-r--r--ext/mime_magic/phpmimemagic.h381
-rw-r--r--ext/ming/CREDITS2
-rw-r--r--ext/ming/EXPERIMENTAL5
-rw-r--r--ext/ming/config.m477
-rw-r--r--ext/ming/config.w3244
-rw-r--r--ext/ming/ming.c4125
-rw-r--r--ext/ming/ming.dsp107
-rw-r--r--ext/ming/php_ming.h240
-rw-r--r--ext/ming/tests/swfaction.phpt48
-rw-r--r--ext/mnogosearch/CREDITS2
-rw-r--r--ext/mnogosearch/README24
-rw-r--r--ext/mnogosearch/config.m453
-rw-r--r--ext/mnogosearch/index.php1055
-rw-r--r--ext/mnogosearch/php_mnogo.c2641
-rw-r--r--ext/mnogosearch/php_mnogo.h113
-rw-r--r--ext/msession/CREDITS3
-rw-r--r--ext/msession/README33
-rw-r--r--ext/msession/config.m436
-rw-r--r--ext/msession/msession-test.php125
-rw-r--r--ext/msession/msession.c1390
-rw-r--r--ext/msession/msession.php10
-rw-r--r--ext/msession/php_msession.h109
-rw-r--r--ext/msession/reqclient.h171
-rw-r--r--ext/msql/CREDITS2
-rw-r--r--ext/msql/config.m442
-rw-r--r--ext/msql/config.w3218
-rw-r--r--ext/msql/msql.dsp107
-rw-r--r--ext/msql/php_msql.c1317
-rw-r--r--ext/msql/php_msql.h82
-rw-r--r--ext/mssql/CREDITS2
-rw-r--r--ext/mssql/config.m452
-rw-r--r--ext/mssql/config.w3215
-rw-r--r--ext/mssql/mssql.dsp117
-rw-r--r--ext/mssql/mssql_win32_howto.txt35
-rw-r--r--ext/mssql/php_mssql.c2258
-rw-r--r--ext/mssql/php_mssql.h209
-rw-r--r--ext/mysql/CREDITS2
-rw-r--r--ext/mysql/config.m4131
-rw-r--r--ext/mysql/config.w3214
-rw-r--r--ext/mysql/mysql.dsp171
-rw-r--r--ext/mysql/mysql.mak169
-rw-r--r--ext/mysql/package.xml63
-rw-r--r--ext/mysql/php_mysql.c2521
-rw-r--r--ext/mysql/php_mysql.h125
-rwxr-xr-xext/mysql/tests/001.phpt30
-rwxr-xr-xext/mysql/tests/002.phpt53
-rwxr-xr-xext/mysql/tests/003.phpt84
-rwxr-xr-xext/mysql/tests/connect.inc10
-rwxr-xr-xext/mysql/tests/skipif.inc8
-rw-r--r--ext/mysqli/CREDITS2
-rw-r--r--ext/mysqli/TODO2
-rw-r--r--ext/mysqli/config.m459
-rw-r--r--ext/mysqli/config.w3214
-rw-r--r--ext/mysqli/mysqli.c940
-rwxr-xr-xext/mysqli/mysqli.dsp120
-rw-r--r--ext/mysqli/mysqli_api.c1996
-rw-r--r--ext/mysqli/mysqli_fe.c287
-rw-r--r--ext/mysqli/mysqli_nonapi.c282
-rw-r--r--ext/mysqli/mysqli_prop.c255
-rw-r--r--ext/mysqli/mysqli_repl.c221
-rw-r--r--ext/mysqli/mysqli_report.c75
-rw-r--r--ext/mysqli/mysqli_report.h54
-rw-r--r--ext/mysqli/package.xml118
-rw-r--r--ext/mysqli/php_mysqli.h420
-rw-r--r--ext/mysqli/tests/001.phpt55
-rw-r--r--ext/mysqli/tests/002.phpt60
-rw-r--r--ext/mysqli/tests/003.phpt56
-rw-r--r--ext/mysqli/tests/004.phpt35
-rw-r--r--ext/mysqli/tests/005.phpt38
-rw-r--r--ext/mysqli/tests/006.phpt51
-rw-r--r--ext/mysqli/tests/007.phpt51
-rw-r--r--ext/mysqli/tests/008.phpt51
-rw-r--r--ext/mysqli/tests/009.phpt51
-rw-r--r--ext/mysqli/tests/010.phpt56
-rw-r--r--ext/mysqli/tests/011.phpt55
-rw-r--r--ext/mysqli/tests/012.phpt56
-rw-r--r--ext/mysqli/tests/013.phpt45
-rw-r--r--ext/mysqli/tests/014.phpt66
-rw-r--r--ext/mysqli/tests/015.phpt68
-rw-r--r--ext/mysqli/tests/016.phpt25
-rw-r--r--ext/mysqli/tests/017.phpt32
-rw-r--r--ext/mysqli/tests/018.phpt25
-rw-r--r--ext/mysqli/tests/019.phpt68
-rw-r--r--ext/mysqli/tests/020.phpt64
-rw-r--r--ext/mysqli/tests/021.phpt40
-rw-r--r--ext/mysqli/tests/022.phpt44
-rw-r--r--ext/mysqli/tests/023.phpt62
-rw-r--r--ext/mysqli/tests/024.phpt63
-rw-r--r--ext/mysqli/tests/025.phpt67
-rw-r--r--ext/mysqli/tests/026.phpt48
-rw-r--r--ext/mysqli/tests/027.phpt20
-rw-r--r--ext/mysqli/tests/028.phpt19
-rw-r--r--ext/mysqli/tests/029.phpt25
-rw-r--r--ext/mysqli/tests/030.phpt24
-rw-r--r--ext/mysqli/tests/031.phpt24
-rw-r--r--ext/mysqli/tests/032.phpt25
-rw-r--r--ext/mysqli/tests/033.phpt19
-rw-r--r--ext/mysqli/tests/034.phpt19
-rw-r--r--ext/mysqli/tests/035.phpt19
-rw-r--r--ext/mysqli/tests/036.phpt43
-rw-r--r--ext/mysqli/tests/037.phpt34
-rw-r--r--ext/mysqli/tests/038.phpt31
-rw-r--r--ext/mysqli/tests/039.phpt24
-rw-r--r--ext/mysqli/tests/040.phpt31
-rw-r--r--ext/mysqli/tests/041.phpt24
-rw-r--r--ext/mysqli/tests/042.phpt59
-rw-r--r--ext/mysqli/tests/043.phpt40
-rw-r--r--ext/mysqli/tests/044.phpt19
-rw-r--r--ext/mysqli/tests/045.phpt43
-rw-r--r--ext/mysqli/tests/046.phpt31
-rw-r--r--ext/mysqli/tests/047.phpt73
-rw-r--r--ext/mysqli/tests/048.phpt60
-rw-r--r--ext/mysqli/tests/049.phpt23
-rw-r--r--ext/mysqli/tests/050.phpt19
-rw-r--r--ext/mysqli/tests/051.phpt20
-rw-r--r--ext/mysqli/tests/052.phpt20
-rw-r--r--ext/mysqli/tests/053.phpt18
-rw-r--r--ext/mysqli/tests/054.phpt18
-rw-r--r--ext/mysqli/tests/055.phpt17
-rw-r--r--ext/mysqli/tests/056.phpt19
-rw-r--r--ext/mysqli/tests/057.phpt52
-rw-r--r--ext/mysqli/tests/058.phpt55
-rw-r--r--ext/mysqli/tests/059.phpt39
-rw-r--r--ext/mysqli/tests/060.phpt57
-rw-r--r--ext/mysqli/tests/061.phpt39
-rw-r--r--ext/mysqli/tests/bug29311.phpt44
-rw-r--r--ext/mysqli/tests/connect.inc10
-rw-r--r--ext/ncurses/CREDITS2
-rw-r--r--ext/ncurses/EXPERIMENTAL0
-rw-r--r--ext/ncurses/c-prototypes263
-rw-r--r--ext/ncurses/config.m465
-rw-r--r--ext/ncurses/example1.php28
-rw-r--r--ext/ncurses/ncurses.c318
-rw-r--r--ext/ncurses/ncurses.php10
-rw-r--r--ext/ncurses/ncurses_fe.c238
-rw-r--r--ext/ncurses/ncurses_functions.c2458
-rw-r--r--ext/ncurses/package.xml73
-rw-r--r--ext/ncurses/php_ncurses.h84
-rw-r--r--ext/ncurses/php_ncurses_fe.h197
-rw-r--r--ext/ncurses/tests/001.phpt21
-rw-r--r--ext/oci8/CREDITS2
-rw-r--r--ext/oci8/config.m4167
-rw-r--r--ext/oci8/config.w3223
-rw-r--r--ext/oci8/oci8.c7138
-rw-r--r--ext/oci8/oci8.dsp113
-rw-r--r--ext/oci8/package.xml85
-rw-r--r--ext/oci8/php_oci8.h225
-rw-r--r--ext/oci8/tests/bug26133.phpt36
-rw-r--r--ext/oci8/tests/connect.inc39
-rw-r--r--ext/oci8/tests/create_table.inc12
-rw-r--r--ext/oci8/tests/drop_table.inc12
-rw-r--r--ext/oci8/tests/skipif.inc10
-rw-r--r--ext/odbc/CREDITS2
-rw-r--r--ext/odbc/birdstep.c652
-rw-r--r--ext/odbc/config.m4521
-rw-r--r--ext/odbc/config.w3212
-rw-r--r--ext/odbc/php_birdstep.h92
-rw-r--r--ext/odbc/php_odbc.c3647
-rw-r--r--ext/odbc/php_odbc.h117
-rw-r--r--ext/odbc/php_odbc_includes.h287
-rw-r--r--ext/openssl/CREDITS2
-rw-r--r--ext/openssl/README322
-rw-r--r--ext/openssl/config.w3217
-rw-r--r--ext/openssl/config0.m417
-rw-r--r--ext/openssl/openssl.c3302
-rw-r--r--ext/openssl/openssl.dsp111
-rw-r--r--ext/openssl/openssl.mak185
-rw-r--r--ext/openssl/php_openssl.h83
-rw-r--r--ext/openssl/tests/001.phpt72
-rw-r--r--ext/openssl/tests/bug25614.phpt11
-rw-r--r--ext/openssl/tests/skipif.inc11
-rw-r--r--ext/openssl/xp_ssl.c711
-rw-r--r--ext/oracle/CREDITS2
-rw-r--r--ext/oracle/config.m4159
-rw-r--r--ext/oracle/config.w3218
-rw-r--r--ext/oracle/oracle.c1770
-rw-r--r--ext/oracle/oracle.dsp113
-rw-r--r--ext/oracle/package.xml68
-rw-r--r--ext/oracle/php_oracle.h137
-rw-r--r--ext/ovrimos/CREDITS2
-rw-r--r--ext/ovrimos/config.m426
-rw-r--r--ext/ovrimos/ovrimos.c1291
-rw-r--r--ext/ovrimos/php_ovrimos.h44
-rw-r--r--ext/pcntl/CREDITS2
-rw-r--r--ext/pcntl/EXPERIMENTAL5
-rw-r--r--ext/pcntl/README16
-rw-r--r--ext/pcntl/config.m419
-rw-r--r--ext/pcntl/package.xml46
-rwxr-xr-xext/pcntl/pcntl.c698
-rw-r--r--ext/pcntl/php_pcntl.h82
-rw-r--r--ext/pcntl/php_signal.c46
-rw-r--r--ext/pcntl/php_signal.h28
-rwxr-xr-xext/pcntl/test-pcntl.php39
-rw-r--r--ext/pcntl/tests/001.phpt82
-rw-r--r--ext/pcre/CREDITS2
-rw-r--r--ext/pcre/config.m456
-rw-r--r--ext/pcre/config.w3213
-rw-r--r--ext/pcre/config0.m456
-rw-r--r--ext/pcre/pcrelib/AUTHORS6
-rw-r--r--ext/pcre/pcrelib/COPYING54
-rw-r--r--ext/pcre/pcrelib/ChangeLog1475
-rw-r--r--ext/pcre/pcrelib/LICENCE54
-rw-r--r--ext/pcre/pcrelib/NEWS154
-rw-r--r--ext/pcre/pcrelib/NON-UNIX-USE122
-rw-r--r--ext/pcre/pcrelib/README365
-rw-r--r--ext/pcre/pcrelib/chartables.c183
-rw-r--r--ext/pcre/pcrelib/dftables.c167
-rw-r--r--ext/pcre/pcrelib/doc/Tech.Notes281
-rw-r--r--ext/pcre/pcrelib/doc/pcre.txt3169
-rw-r--r--ext/pcre/pcrelib/get.c349
-rw-r--r--ext/pcre/pcrelib/internal.h709
-rw-r--r--ext/pcre/pcrelib/maketables.c140
-rw-r--r--ext/pcre/pcrelib/pcre.c8304
-rw-r--r--ext/pcre/pcrelib/pcre.def22
-rw-r--r--ext/pcre/pcrelib/pcre.h195
-rw-r--r--ext/pcre/pcrelib/pcregrep.c642
-rw-r--r--ext/pcre/pcrelib/pcreposix.c305
-rw-r--r--ext/pcre/pcrelib/pcreposix.h88
-rw-r--r--ext/pcre/pcrelib/pcretest.c1483
-rw-r--r--ext/pcre/pcrelib/study.c472
-rw-r--r--ext/pcre/pcrelib/testdata/testinput13808
-rw-r--r--ext/pcre/pcrelib/testdata/testinput21162
-rw-r--r--ext/pcre/pcrelib/testdata/testinput365
-rw-r--r--ext/pcre/pcrelib/testdata/testinput4155
-rw-r--r--ext/pcre/pcrelib/testdata/testinput591
-rw-r--r--ext/pcre/pcrelib/testdata/testinput678
-rw-r--r--ext/pcre/pcrelib/testdata/testoutput16222
-rw-r--r--ext/pcre/pcrelib/testdata/testoutput24088
-rw-r--r--ext/pcre/pcrelib/testdata/testoutput3116
-rw-r--r--ext/pcre/pcrelib/testdata/testoutput4304
-rw-r--r--ext/pcre/pcrelib/testdata/testoutput5339
-rw-r--r--ext/pcre/pcrelib/testdata/testoutput6319
-rw-r--r--ext/pcre/php_pcre.c1629
-rw-r--r--ext/pcre/php_pcre.h80
-rw-r--r--ext/pcre/tests/bug20528.phpt24
-rw-r--r--ext/pcre/tests/bug21732.phpt29
-rw-r--r--ext/pcre/tests/bug26927.phpt11
-rw-r--r--ext/pcre/tests/bug27103.phpt37
-rwxr-xr-xext/pdo/CREDITS2
-rw-r--r--ext/pdo/EXPERIMENTAL0
-rw-r--r--ext/pdo/Makefile.frag31
-rwxr-xr-xext/pdo/README56
-rwxr-xr-xext/pdo/TODO25
-rwxr-xr-xext/pdo/config.m410
-rwxr-xr-xext/pdo/config.w329
-rwxr-xr-xext/pdo/package.xml84
-rwxr-xr-xext/pdo/pdo.c316
-rwxr-xr-xext/pdo/pdo.php35
-rwxr-xr-xext/pdo/pdo_dbh.c721
-rw-r--r--ext/pdo/pdo_sql_parser.c317
-rw-r--r--ext/pdo/pdo_sql_parser.re201
-rwxr-xr-xext/pdo/pdo_stmt.c1111
-rwxr-xr-xext/pdo/php_pdo.h69
-rwxr-xr-xext/pdo/php_pdo_driver.h427
-rwxr-xr-xext/pdo/php_pdo_int.h61
-rw-r--r--ext/pdo/php_pdo_sql_parser.h27
-rw-r--r--ext/pdo_firebird/CREDITS2
-rw-r--r--ext/pdo_firebird/EXPERIMENTAL0
-rw-r--r--ext/pdo_firebird/config.m449
-rw-r--r--ext/pdo_firebird/config.w3218
-rw-r--r--ext/pdo_firebird/firebird_driver.c659
-rw-r--r--ext/pdo_firebird/firebird_statement.c696
-rw-r--r--ext/pdo_firebird/package.xml55
-rw-r--r--ext/pdo_firebird/pdo_firebird.c87
-rw-r--r--ext/pdo_firebird/php_pdo_firebird.h58
-rw-r--r--ext/pdo_firebird/php_pdo_firebird_int.h127
-rw-r--r--ext/pdo_firebird/tests/connect.phpt16
-rw-r--r--ext/pdo_firebird/tests/ddl.phpt37
-rw-r--r--ext/pdo_firebird/tests/execute.phpt65
-rw-r--r--ext/pdo_firebird/tests/skipif.inc5
-rw-r--r--ext/pdo_firebird/tests/testdb.inc34
-rwxr-xr-xext/pdo_mysql/CREDITS2
-rwxr-xr-xext/pdo_mysql/config.m471
-rw-r--r--ext/pdo_mysql/config.w3215
-rwxr-xr-xext/pdo_mysql/mysql_driver.c344
-rwxr-xr-xext/pdo_mysql/mysql_statement.c169
-rw-r--r--ext/pdo_mysql/package.xml48
-rwxr-xr-xext/pdo_mysql/pdo_mysql.c94
-rwxr-xr-xext/pdo_mysql/php_pdo_mysql.h53
-rwxr-xr-xext/pdo_mysql/php_pdo_mysql_int.h69
-rwxr-xr-xext/pdo_oci/CREDITS2
-rw-r--r--ext/pdo_oci/EXPERIMENTAL0
-rwxr-xr-xext/pdo_oci/config.m4142
-rwxr-xr-xext/pdo_oci/config.w3242
-rwxr-xr-xext/pdo_oci/oci_driver.c481
-rwxr-xr-xext/pdo_oci/oci_statement.c429
-rwxr-xr-xext/pdo_oci/package.xml47
-rwxr-xr-xext/pdo_oci/pdo_oci.c120
-rwxr-xr-xext/pdo_oci/php_pdo_oci.h53
-rwxr-xr-xext/pdo_oci/php_pdo_oci_int.h89
-rw-r--r--ext/pdo_oci/tests/connect.phpt17
-rw-r--r--ext/pdo_oci/tests/settings.inc13
-rwxr-xr-xext/pdo_odbc/CREDITS2
-rw-r--r--ext/pdo_odbc/EXPERIMENTAL0
-rwxr-xr-xext/pdo_odbc/config.m4111
-rwxr-xr-xext/pdo_odbc/config.w3215
-rwxr-xr-xext/pdo_odbc/odbc_driver.c410
-rwxr-xr-xext/pdo_odbc/odbc_stmt.c262
-rwxr-xr-xext/pdo_odbc/package.xml53
-rwxr-xr-xext/pdo_odbc/pdo_odbc.c155
-rw-r--r--ext/pdo_odbc/php_pdo_odbc.h81
-rwxr-xr-xext/pdo_odbc/php_pdo_odbc_int.h163
-rw-r--r--ext/pdo_pgsql/CREDITS2
-rw-r--r--ext/pdo_pgsql/config.m4102
-rw-r--r--ext/pdo_pgsql/config.w3216
-rw-r--r--ext/pdo_pgsql/package.xml53
-rw-r--r--ext/pdo_pgsql/pdo_pgsql.c113
-rw-r--r--ext/pdo_pgsql/pgsql_driver.c391
-rw-r--r--ext/pdo_pgsql/pgsql_statement.c157
-rw-r--r--ext/pdo_pgsql/php_pdo_pgsql.h58
-rw-r--r--ext/pdo_pgsql/php_pdo_pgsql_int.h80
-rw-r--r--ext/pfpro/CREDITS2
-rw-r--r--ext/pfpro/TODO12
-rw-r--r--ext/pfpro/config.m470
-rw-r--r--ext/pfpro/pfpro.c549
-rw-r--r--ext/pfpro/php_pfpro.h85
-rw-r--r--ext/pgsql/CREDITS2
-rw-r--r--ext/pgsql/README235
-rw-r--r--ext/pgsql/config.m491
-rw-r--r--ext/pgsql/config.w3215
-rw-r--r--ext/pgsql/mysql_users.php82
-rw-r--r--ext/pgsql/pgsql.c4783
-rw-r--r--ext/pgsql/pgsql.dsp167
-rw-r--r--ext/pgsql/pgsql.mak170
-rw-r--r--ext/pgsql/php_pgsql.h271
-rw-r--r--ext/pgsql/tests/01createdb.phpt28
-rw-r--r--ext/pgsql/tests/02connection.phpt53
-rw-r--r--ext/pgsql/tests/03sync_query.phpt53
-rw-r--r--ext/pgsql/tests/04async_query.phpt65
-rw-r--r--ext/pgsql/tests/05large_object.phpt82
-rw-r--r--ext/pgsql/tests/06copy.phpt15
-rw-r--r--ext/pgsql/tests/07optional.phpt19
-rw-r--r--ext/pgsql/tests/08escape.phpt69
-rw-r--r--ext/pgsql/tests/09notice.phpt28
-rw-r--r--ext/pgsql/tests/10pg_convert.phpt26
-rw-r--r--ext/pgsql/tests/11pg_meta_data.phpt64
-rw-r--r--ext/pgsql/tests/12pg_insert.phpt21
-rw-r--r--ext/pgsql/tests/13pg_select.phpt34
-rw-r--r--ext/pgsql/tests/14pg_update.phpt22
-rw-r--r--ext/pgsql/tests/15pg_delete.phpt23
-rw-r--r--ext/pgsql/tests/16pg_result_status.phpt19
-rw-r--r--ext/pgsql/tests/17result.phpt67
-rw-r--r--ext/pgsql/tests/18pg_escape_bytea.phpt28
-rw-r--r--ext/pgsql/tests/19pg_ping.phpt15
-rw-r--r--ext/pgsql/tests/20pg_get_pid.phpt17
-rw-r--r--ext/pgsql/tests/21pg_get_notify.phpt20
-rwxr-xr-xext/pgsql/tests/22pg_fetch_object.phpt37
-rw-r--r--ext/pgsql/tests/80_bug14383.phpt37
-rwxr-xr-xext/pgsql/tests/80_bug24499.phpt66
-rwxr-xr-xext/pgsql/tests/80_bug27597.phpt60
-rw-r--r--ext/pgsql/tests/98old_api.phpt33
-rw-r--r--ext/pgsql/tests/9999dropdb.phpt18
-rw-r--r--ext/pgsql/tests/README16
-rw-r--r--ext/pgsql/tests/config.inc12
-rw-r--r--ext/pgsql/tests/php.gifbin3872 -> 0 bytes
-rw-r--r--ext/pgsql/tests/skipif.inc18
-rw-r--r--ext/posix/CREDITS2
-rw-r--r--ext/posix/config.m413
-rw-r--r--ext/posix/package.xml49
-rw-r--r--ext/posix/php_posix.h124
-rw-r--r--ext/posix/posix.c914
-rw-r--r--ext/pspell/CREDITS2
-rw-r--r--ext/pspell/README51
-rw-r--r--ext/pspell/config.m436
-rw-r--r--ext/pspell/config.w3216
-rw-r--r--ext/pspell/php_pspell.h54
-rw-r--r--ext/pspell/pspell.c954
-rw-r--r--ext/pspell/pspell.dsp112
-rw-r--r--ext/pspell/tests/01pspell_basic.phpt140
-rw-r--r--ext/readline/CREDITS2
-rw-r--r--ext/readline/README.libedit4
-rw-r--r--ext/readline/config.m498
-rw-r--r--ext/readline/php_readline.h39
-rw-r--r--ext/readline/readline.c537
-rw-r--r--ext/recode/CREDITS2
-rw-r--r--ext/recode/config.m464
-rw-r--r--ext/recode/config9.m414
-rw-r--r--ext/recode/php_recode.h39
-rw-r--r--ext/recode/recode.c240
-rwxr-xr-xext/reflection/tests/bug26640.phpt25
-rw-r--r--ext/reflection/tests/exception.inc16
-rwxr-xr-xext/reflection/tests/invoke.phpt42
-rwxr-xr-xext/reflection/tests/parameters_001.phpt38
-rwxr-xr-xext/reflection/tests/static_properties_002.phpt62
-rw-r--r--ext/session/CREDITS2
-rw-r--r--ext/session/config.m431
-rw-r--r--ext/session/config.w3211
-rw-r--r--ext/session/mod_files.c423
-rw-r--r--ext/session/mod_files.h27
-rw-r--r--ext/session/mod_files.sh16
-rw-r--r--ext/session/mod_mm.c437
-rw-r--r--ext/session/mod_mm.h35
-rw-r--r--ext/session/mod_user.c184
-rw-r--r--ext/session/mod_user.h39
-rw-r--r--ext/session/package.xml82
-rw-r--r--ext/session/php_session.h236
-rw-r--r--ext/session/session.c1839
-rw-r--r--ext/session/tests/001.phpt33
-rw-r--r--ext/session/tests/002.phpt11
-rw-r--r--ext/session/tests/003.phpt44
-rw-r--r--ext/session/tests/004.phpt111
-rw-r--r--ext/session/tests/005.phpt146
-rw-r--r--ext/session/tests/006.phpt70
-rw-r--r--ext/session/tests/007.phpt59
-rw-r--r--ext/session/tests/008-php4.2.3.phpt68
-rw-r--r--ext/session/tests/008.phpt61
-rw-r--r--ext/session/tests/009.phpt57
-rw-r--r--ext/session/tests/010.phpt19
-rw-r--r--ext/session/tests/011.phpt20
-rw-r--r--ext/session/tests/012.phpt34
-rw-r--r--ext/session/tests/013.phpt26
-rw-r--r--ext/session/tests/014.phpt41
-rw-r--r--ext/session/tests/015.phpt24
-rw-r--r--ext/session/tests/016.phpt21
-rw-r--r--ext/session/tests/017.phpt25
-rw-r--r--ext/session/tests/018.phpt24
-rw-r--r--ext/session/tests/019.phpt72
-rw-r--r--ext/session/tests/020.phpt25
-rw-r--r--ext/session/tests/021.phpt61
-rw-r--r--ext/session/tests/bug24592.phpt35
-rw-r--r--ext/session/tests/bug26862.phpt22
-rw-r--r--ext/session/tests/skipif.inc25
-rw-r--r--ext/shmop/CREDITS2
-rw-r--r--ext/shmop/README69
-rw-r--r--ext/shmop/config.m48
-rw-r--r--ext/shmop/config.w329
-rw-r--r--ext/shmop/package.xml47
-rw-r--r--ext/shmop/php_shmop.h84
-rw-r--r--ext/shmop/shmop.c368
-rw-r--r--ext/shmop/shmop.dsp107
-rw-r--r--ext/shmop/tests/001.phpt91
-rw-r--r--ext/simplexml/CREDITS2
-rwxr-xr-xext/simplexml/README34
-rw-r--r--ext/simplexml/config.m422
-rw-r--r--ext/simplexml/config.w3216
-rw-r--r--ext/simplexml/examples/book.php8
-rw-r--r--ext/simplexml/examples/book.xml10
-rw-r--r--ext/simplexml/examples/interop.php27
-rw-r--r--ext/simplexml/examples/security.php6
-rw-r--r--ext/simplexml/examples/security.xml4
-rw-r--r--ext/simplexml/examples/xpath.php9
-rw-r--r--ext/simplexml/php_simplexml.h94
-rwxr-xr-xext/simplexml/php_simplexml_exports.h65
-rw-r--r--ext/simplexml/simplexml.c1743
-rw-r--r--ext/simplexml/simplexml.dsp111
-rw-r--r--ext/simplexml/tests/001.phpt43
-rw-r--r--ext/simplexml/tests/002.phpt62
-rwxr-xr-xext/simplexml/tests/003.phpt69
-rwxr-xr-xext/simplexml/tests/004.phpt65
-rwxr-xr-xext/simplexml/tests/005.phpt40
-rwxr-xr-xext/simplexml/tests/006.phpt80
-rwxr-xr-xext/simplexml/tests/007.phpt92
-rw-r--r--ext/simplexml/tests/008.phpt39
-rwxr-xr-xext/simplexml/tests/009.phpt45
-rw-r--r--ext/simplexml/tests/010.phpt63
-rwxr-xr-xext/simplexml/tests/011.phpt47
-rwxr-xr-xext/simplexml/tests/012.phpt39
-rwxr-xr-xext/simplexml/tests/013.phpt23
-rw-r--r--ext/simplexml/tests/014.phpt60
-rwxr-xr-xext/simplexml/tests/014a.phpt56
-rwxr-xr-xext/simplexml/tests/014b.phpt55
-rw-r--r--ext/simplexml/tests/015.phpt56
-rw-r--r--ext/simplexml/tests/016.phpt57
-rw-r--r--ext/simplexml/tests/017.phpt86
-rw-r--r--ext/simplexml/tests/018.phpt65
-rwxr-xr-xext/simplexml/tests/019.phpt80
-rwxr-xr-xext/simplexml/tests/020.phpt21
-rw-r--r--ext/simplexml/tests/021.phpt25
-rw-r--r--ext/simplexml/tests/book.xml10
-rw-r--r--ext/simplexml/tests/bug24392.phpt22
-rw-r--r--ext/simplexml/tests/bug24392.xml76
-rw-r--r--ext/simplexml/tests/bug25756.xsd24
-rw-r--r--ext/simplexml/tests/bug25756_1.xml13
-rw-r--r--ext/simplexml/tests/bug25756_2.xml13
-rw-r--r--ext/simplexml/tests/bug26976.phpt28
-rwxr-xr-xext/simplexml/tests/bug27010.phpt32
-rw-r--r--ext/simplexml/tests/profile01.phpt18
-rw-r--r--ext/simplexml/tests/profile02.phpt21
-rw-r--r--ext/simplexml/tests/profile03.phpt18
-rw-r--r--ext/simplexml/tests/profile04.phpt18
-rw-r--r--ext/simplexml/tests/profile05.phpt18
-rw-r--r--ext/simplexml/tests/profile06.phpt20
-rw-r--r--ext/simplexml/tests/profile07.phpt23
-rw-r--r--ext/simplexml/tests/profile08.phpt18
-rw-r--r--ext/simplexml/tests/profile09.phpt19
-rw-r--r--ext/simplexml/tests/profile10.phpt25
-rw-r--r--ext/simplexml/tests/profile11.phpt26
-rwxr-xr-xext/simplexml/tests/simplexml_import_dom.phpt22
-rwxr-xr-xext/simplexml/tests/sxe.dtd21
-rwxr-xr-xext/simplexml/tests/sxe.ent1
-rwxr-xr-xext/simplexml/tests/sxe.xml17
-rw-r--r--ext/skeleton/CREDITS1
-rw-r--r--ext/skeleton/EXPERIMENTAL0
-rwxr-xr-xext/skeleton/create_stubs289
-rw-r--r--ext/skeleton/php_skeleton.h56
-rw-r--r--ext/skeleton/skeleton.c167
-rw-r--r--ext/skeleton/skeleton.dsp113
-rw-r--r--ext/skeleton/skeleton.php19
-rw-r--r--ext/skeleton/tests/001.phpt21
-rw-r--r--ext/snmp/CREDITS2
-rw-r--r--ext/snmp/config.m4138
-rw-r--r--ext/snmp/config.w3218
-rw-r--r--ext/snmp/php_snmp.h84
-rw-r--r--ext/snmp/snmp.c1099
-rw-r--r--ext/snmp/snmp.dsp109
-rw-r--r--ext/snmp/winsnmp.c249
-rw-r--r--ext/soap/CREDITS2
-rw-r--r--ext/soap/EXPERIMENTAL0
-rw-r--r--ext/soap/TODO100
-rw-r--r--ext/soap/TODO.old39
-rw-r--r--ext/soap/config.m420
-rw-r--r--ext/soap/config.w3215
-rw-r--r--ext/soap/interop/client_round2.php113
-rw-r--r--ext/soap/interop/client_round2_interop.php785
-rw-r--r--ext/soap/interop/client_round2_params.php622
-rw-r--r--ext/soap/interop/client_round2_results.php75
-rw-r--r--ext/soap/interop/client_round2_run.php53
-rw-r--r--ext/soap/interop/config.php.dist5
-rw-r--r--ext/soap/interop/database_round2.sql44
-rw-r--r--ext/soap/interop/echoheadersvc.wsdl.php398
-rw-r--r--ext/soap/interop/index.php59
-rw-r--r--ext/soap/interop/interop.wsdl.php336
-rw-r--r--ext/soap/interop/interopB.wsdl.php196
-rw-r--r--ext/soap/interop/server_round2_base.php105
-rw-r--r--ext/soap/interop/server_round2_groupB.php58
-rw-r--r--ext/soap/interop/server_round2_groupC.php43
-rw-r--r--ext/soap/interop/test.utility.php143
-rw-r--r--ext/soap/package.xml64
-rw-r--r--ext/soap/php_encoding.c2873
-rw-r--r--ext/soap/php_encoding.h221
-rw-r--r--ext/soap/php_http.c969
-rw-r--r--ext/soap/php_http.h34
-rw-r--r--ext/soap/php_packet_soap.c391
-rw-r--r--ext/soap/php_packet_soap.h27
-rw-r--r--ext/soap/php_schema.c2369
-rw-r--r--ext/soap/php_schema.h34
-rw-r--r--ext/soap/php_sdl.c2377
-rw-r--r--ext/soap/php_sdl.h263
-rw-r--r--ext/soap/php_soap.dsp148
-rw-r--r--ext/soap/php_soap.h202
-rw-r--r--ext/soap/php_xml.c335
-rw-r--r--ext/soap/php_xml.h86
-rw-r--r--ext/soap/readme.html646
-rw-r--r--ext/soap/soap.c3967
-rw-r--r--ext/soap/tests/bugs/bug27722.phpt13
-rw-r--r--ext/soap/tests/bugs/bug27722.wsdl92
-rw-r--r--ext/soap/tests/bugs/bug27742.phpt13
-rw-r--r--ext/soap/tests/bugs/bug27742.wsdl854
-rw-r--r--ext/soap/tests/bugs/bug28751.phpt38
-rw-r--r--ext/soap/tests/bugs/bug28969.phpt38
-rw-r--r--ext/soap/tests/bugs/bug28985.phpt204
-rw-r--r--ext/soap/tests/bugs/bug28985.wsdl683
-rw-r--r--ext/soap/tests/bugs/bug29061.phpt12
-rw-r--r--ext/soap/tests/bugs/bug29061.wsdl41
-rw-r--r--ext/soap/tests/bugs/bug29109.phpt18
-rw-r--r--ext/soap/tests/bugs/bug29109.wsdl121
-rw-r--r--ext/soap/tests/bugs/bug29236.phpt20
-rw-r--r--ext/soap/tests/bugs/bug29236.wsdl287
-rw-r--r--ext/soap/tests/bugs/bug29795.phpt32
-rw-r--r--ext/soap/tests/bugs/bug29795.wsdl40
-rw-r--r--ext/soap/tests/bugs/bug29830.phpt25
-rw-r--r--ext/soap/tests/bugs/bug29839.phpt41
-rw-r--r--ext/soap/tests/bugs/bug29839.wsdl42
-rw-r--r--ext/soap/tests/bugs/bug29844.phpt36
-rw-r--r--ext/soap/tests/bugs/bug29844.wsdl66
-rw-r--r--ext/soap/tests/bugs/skipif.inc3
-rw-r--r--ext/soap/tests/bugs/xml.xsd34
-rw-r--r--ext/soap/tests/schema/schema001.phpt20
-rw-r--r--ext/soap/tests/schema/schema002.phpt23
-rw-r--r--ext/soap/tests/schema/schema003.phpt23
-rw-r--r--ext/soap/tests/schema/schema004.phpt20
-rw-r--r--ext/soap/tests/schema/schema005.phpt24
-rw-r--r--ext/soap/tests/schema/schema006.phpt25
-rw-r--r--ext/soap/tests/schema/schema007.phpt25
-rw-r--r--ext/soap/tests/schema/schema008.phpt27
-rw-r--r--ext/soap/tests/schema/schema009.phpt20
-rw-r--r--ext/soap/tests/schema/schema010.phpt20
-rw-r--r--ext/soap/tests/schema/schema011.phpt24
-rw-r--r--ext/soap/tests/schema/schema012.phpt24
-rw-r--r--ext/soap/tests/schema/schema013.phpt20
-rw-r--r--ext/soap/tests/schema/schema014.phpt20
-rw-r--r--ext/soap/tests/schema/schema015.phpt30
-rw-r--r--ext/soap/tests/schema/schema016.phpt30
-rw-r--r--ext/soap/tests/schema/schema017.phpt27
-rw-r--r--ext/soap/tests/schema/schema018.phpt27
-rw-r--r--ext/soap/tests/schema/schema019.phpt27
-rw-r--r--ext/soap/tests/schema/schema020.phpt27
-rw-r--r--ext/soap/tests/schema/schema021.phpt24
-rw-r--r--ext/soap/tests/schema/schema022.phpt24
-rw-r--r--ext/soap/tests/schema/schema023.phpt29
-rw-r--r--ext/soap/tests/schema/schema024.phpt31
-rw-r--r--ext/soap/tests/schema/schema025.phpt30
-rw-r--r--ext/soap/tests/schema/schema026.phpt31
-rw-r--r--ext/soap/tests/schema/schema027.phpt35
-rw-r--r--ext/soap/tests/schema/schema028.phpt36
-rw-r--r--ext/soap/tests/schema/schema029.phpt38
-rw-r--r--ext/soap/tests/schema/schema030.phpt28
-rw-r--r--ext/soap/tests/schema/schema031.phpt28
-rw-r--r--ext/soap/tests/schema/schema032.phpt26
-rw-r--r--ext/soap/tests/schema/schema033.phpt36
-rw-r--r--ext/soap/tests/schema/schema034.phpt37
-rw-r--r--ext/soap/tests/schema/schema035.phpt38
-rw-r--r--ext/soap/tests/schema/schema036.phpt37
-rw-r--r--ext/soap/tests/schema/schema037.phpt28
-rw-r--r--ext/soap/tests/schema/schema038.phpt29
-rw-r--r--ext/soap/tests/schema/schema039.phpt31
-rw-r--r--ext/soap/tests/schema/schema040.phpt32
-rw-r--r--ext/soap/tests/schema/schema041.phpt31
-rw-r--r--ext/soap/tests/schema/schema042.phpt29
-rw-r--r--ext/soap/tests/schema/schema043.phpt38
-rw-r--r--ext/soap/tests/schema/schema044.phpt29
-rw-r--r--ext/soap/tests/schema/schema045.phpt36
-rw-r--r--ext/soap/tests/schema/schema046.phpt38
-rw-r--r--ext/soap/tests/schema/schema047.phpt34
-rw-r--r--ext/soap/tests/schema/schema048.phpt36
-rw-r--r--ext/soap/tests/schema/schema049.phpt34
-rw-r--r--ext/soap/tests/schema/schema050.phpt28
-rw-r--r--ext/soap/tests/schema/schema051.phpt33
-rw-r--r--ext/soap/tests/schema/schema052.phpt28
-rw-r--r--ext/soap/tests/schema/schema053.phpt26
-rw-r--r--ext/soap/tests/schema/schema054.phpt21
-rw-r--r--ext/soap/tests/schema/schema055.phpt28
-rw-r--r--ext/soap/tests/schema/schema056.phpt29
-rw-r--r--ext/soap/tests/schema/schema057.phpt31
-rw-r--r--ext/soap/tests/schema/schema058.phpt30
-rw-r--r--ext/soap/tests/schema/schema059.phpt31
-rw-r--r--ext/soap/tests/schema/schema060.phpt36
-rw-r--r--ext/soap/tests/schema/schema061.phpt38
-rw-r--r--ext/soap/tests/schema/schema062.phpt29
-rw-r--r--ext/soap/tests/schema/schema063.phpt16
-rw-r--r--ext/soap/tests/schema/schema064.phpt57
-rw-r--r--ext/soap/tests/schema/schema065.phpt26
-rw-r--r--ext/soap/tests/schema/schema066.phpt26
-rw-r--r--ext/soap/tests/schema/schema067.phpt26
-rw-r--r--ext/soap/tests/schema/schema068.phpt18
-rw-r--r--ext/soap/tests/schema/schema069.phpt27
-rw-r--r--ext/soap/tests/schema/schema070.phpt29
-rw-r--r--ext/soap/tests/schema/schema071.phpt23
-rw-r--r--ext/soap/tests/schema/schema072.phpt25
-rw-r--r--ext/soap/tests/schema/schema073.phpt24
-rw-r--r--ext/soap/tests/schema/skipif.inc3
-rw-r--r--ext/soap/tests/schema/test_schema.inc74
-rw-r--r--ext/soap/tests/server001.phpt33
-rw-r--r--ext/soap/tests/server002.phpt37
-rw-r--r--ext/soap/tests/server003.phpt32
-rw-r--r--ext/soap/tests/server004.phpt40
-rw-r--r--ext/soap/tests/server005.phpt36
-rw-r--r--ext/soap/tests/server006.phpt42
-rw-r--r--ext/soap/tests/server007.phpt26
-rw-r--r--ext/soap/tests/server008.phpt29
-rw-r--r--ext/soap/tests/server009.phpt66
-rw-r--r--ext/soap/tests/server010.phpt61
-rw-r--r--ext/soap/tests/server011.phpt25
-rw-r--r--ext/soap/tests/server012.phpt20
-rw-r--r--ext/soap/tests/server013.phpt44
-rw-r--r--ext/soap/tests/server014.phpt37
-rw-r--r--ext/soap/tests/server015.phpt33
-rw-r--r--ext/soap/tests/server016.phpt34
-rw-r--r--ext/soap/tests/server017.phpt33
-rw-r--r--ext/soap/tests/server018.phpt33
-rw-r--r--ext/soap/tests/server019.phpt37
-rw-r--r--ext/soap/tests/server020.phpt37
-rw-r--r--ext/soap/tests/server021.phpt40
-rw-r--r--ext/soap/tests/skipif.inc3
-rw-r--r--ext/soap/tests/soap12/T01.phpt23
-rw-r--r--ext/soap/tests/soap12/T02.phpt23
-rw-r--r--ext/soap/tests/soap12/T03.phpt22
-rw-r--r--ext/soap/tests/soap12/T04.phpt23
-rw-r--r--ext/soap/tests/soap12/T05.phpt23
-rw-r--r--ext/soap/tests/soap12/T10.phpt23
-rw-r--r--ext/soap/tests/soap12/T11.phpt24
-rw-r--r--ext/soap/tests/soap12/T12.phpt23
-rw-r--r--ext/soap/tests/soap12/T13.phpt23
-rw-r--r--ext/soap/tests/soap12/T14.phpt23
-rw-r--r--ext/soap/tests/soap12/T15.phpt24
-rw-r--r--ext/soap/tests/soap12/T19.phpt24
-rw-r--r--ext/soap/tests/soap12/T22.phpt24
-rw-r--r--ext/soap/tests/soap12/T23.phpt24
-rw-r--r--ext/soap/tests/soap12/T24.phpt21
-rw-r--r--ext/soap/tests/soap12/T25.phpt22
-rw-r--r--ext/soap/tests/soap12/T26.phpt21
-rw-r--r--ext/soap/tests/soap12/T27.phpt29
-rw-r--r--ext/soap/tests/soap12/T28.phpt22
-rw-r--r--ext/soap/tests/soap12/T29.phpt23
-rw-r--r--ext/soap/tests/soap12/T30.phpt20
-rw-r--r--ext/soap/tests/soap12/T31.phpt22
-rw-r--r--ext/soap/tests/soap12/T32.phpt25
-rw-r--r--ext/soap/tests/soap12/T33.phpt20
-rw-r--r--ext/soap/tests/soap12/T34.phpt24
-rw-r--r--ext/soap/tests/soap12/T35.phpt24
-rw-r--r--ext/soap/tests/soap12/T36.phpt23
-rw-r--r--ext/soap/tests/soap12/T37.phpt23
-rw-r--r--ext/soap/tests/soap12/T38_1.phpt27
-rw-r--r--ext/soap/tests/soap12/T38_2.phpt27
-rw-r--r--ext/soap/tests/soap12/T39.phpt22
-rw-r--r--ext/soap/tests/soap12/T40.phpt26
-rw-r--r--ext/soap/tests/soap12/T41.phpt30
-rw-r--r--ext/soap/tests/soap12/T42.phpt39
-rw-r--r--ext/soap/tests/soap12/T43.phpt30
-rw-r--r--ext/soap/tests/soap12/T44.phpt27
-rw-r--r--ext/soap/tests/soap12/T45.phpt35
-rw-r--r--ext/soap/tests/soap12/T46.phpt36
-rw-r--r--ext/soap/tests/soap12/T47.phpt29
-rw-r--r--ext/soap/tests/soap12/T48.phpt29
-rw-r--r--ext/soap/tests/soap12/T49.phpt29
-rw-r--r--ext/soap/tests/soap12/T50.phpt29
-rw-r--r--ext/soap/tests/soap12/T51.phpt27
-rw-r--r--ext/soap/tests/soap12/T52.phpt25
-rw-r--r--ext/soap/tests/soap12/T53.phpt25
-rw-r--r--ext/soap/tests/soap12/T54.phpt25
-rw-r--r--ext/soap/tests/soap12/T55.phpt25
-rw-r--r--ext/soap/tests/soap12/T56.phpt34
-rw-r--r--ext/soap/tests/soap12/T57.phpt32
-rw-r--r--ext/soap/tests/soap12/T58.phpt28
-rw-r--r--ext/soap/tests/soap12/T59.phpt28
-rw-r--r--ext/soap/tests/soap12/T60.phpt29
-rw-r--r--ext/soap/tests/soap12/T61.phpt28
-rw-r--r--ext/soap/tests/soap12/T63.phpt24
-rw-r--r--ext/soap/tests/soap12/T64.phpt24
-rw-r--r--ext/soap/tests/soap12/T65.phpt26
-rw-r--r--ext/soap/tests/soap12/T66.phpt23
-rw-r--r--ext/soap/tests/soap12/T67.phpt23
-rw-r--r--ext/soap/tests/soap12/T68.phpt32
-rw-r--r--ext/soap/tests/soap12/T69.phpt19
-rw-r--r--ext/soap/tests/soap12/T70.phpt23
-rw-r--r--ext/soap/tests/soap12/T71.phpt24
-rw-r--r--ext/soap/tests/soap12/T72.phpt22
-rw-r--r--ext/soap/tests/soap12/T73.phpt26
-rw-r--r--ext/soap/tests/soap12/T74.phpt28
-rw-r--r--ext/soap/tests/soap12/T75.phpt28
-rw-r--r--ext/soap/tests/soap12/T76_1.phpt25
-rw-r--r--ext/soap/tests/soap12/T76_2.phpt32
-rw-r--r--ext/soap/tests/soap12/T77_1.phpt25
-rw-r--r--ext/soap/tests/soap12/T77_2.phpt24
-rw-r--r--ext/soap/tests/soap12/T77_3.phpt27
-rw-r--r--ext/soap/tests/soap12/T78.phpt23
-rw-r--r--ext/soap/tests/soap12/T80.phpt19
-rw-r--r--ext/soap/tests/soap12/skipif.inc3
-rw-r--r--ext/soap/tests/soap12/soap12-test.inc130
-rw-r--r--ext/soap/tests/soap12/soap12-test.wsdl771
-rw-r--r--ext/soap/tests/test.wsdl55
-rw-r--r--ext/soap/tests/transport001.phpt36
-rw-r--r--ext/sockets/CREDITS2
-rw-r--r--ext/sockets/config.m435
-rw-r--r--ext/sockets/config.w3215
-rw-r--r--ext/sockets/package.xml67
-rw-r--r--ext/sockets/php_sockets.h120
-rw-r--r--ext/sockets/php_sockets_win.c109
-rw-r--r--ext/sockets/php_sockets_win.h56
-rw-r--r--ext/sockets/sockets.c1769
-rw-r--r--ext/sockets/sockets.dsp117
-rw-r--r--ext/sockets/sockets.php10
-rw-r--r--ext/sockets/tests/ipv4loop.phpt49
-rw-r--r--ext/sockets/tests/ipv6loop.phpt52
-rw-r--r--ext/sockets/unix_socket_constants.h426
-rw-r--r--ext/sockets/win32_socket_constants.h74
-rwxr-xr-xext/spl/CREDITS2
-rwxr-xr-xext/spl/README50
-rwxr-xr-xext/spl/TODO4
-rwxr-xr-xext/spl/config.m414
-rw-r--r--ext/spl/config.w3212
-rwxr-xr-xext/spl/doxygen.cfg209
-rwxr-xr-xext/spl/examples/appenditerator.inc116
-rwxr-xr-xext/spl/examples/autoload.inc50
-rwxr-xr-xext/spl/examples/dba_array.php52
-rwxr-xr-xext/spl/examples/dba_dump.php42
-rwxr-xr-xext/spl/examples/dbaarray.inc98
-rwxr-xr-xext/spl/examples/dbareader.inc96
-rwxr-xr-xext/spl/examples/directoryfilterdots.inc59
-rwxr-xr-xext/spl/examples/directorytree.inc27
-rwxr-xr-xext/spl/examples/directorytree.php37
-rw-r--r--ext/spl/examples/directorytreeiterator.inc47
-rwxr-xr-xext/spl/examples/emptyiterator.inc62
-rwxr-xr-xext/spl/examples/findfile.inc65
-rwxr-xr-xext/spl/examples/findfile.php33
-rwxr-xr-xext/spl/examples/findregex.php36
-rwxr-xr-xext/spl/examples/infiniteiterator.inc102
-rwxr-xr-xext/spl/examples/ini_groups.php41
-rwxr-xr-xext/spl/examples/inigroups.inc54
-rwxr-xr-xext/spl/examples/keyfilter.inc64
-rwxr-xr-xext/spl/examples/norewinditerator.inc53
-rwxr-xr-xext/spl/examples/regexfindfile.inc40
-rwxr-xr-xext/spl/examples/searchiterator.inc58
-rwxr-xr-xext/spl/examples/tests/examples.inc27
-rwxr-xr-xext/spl/examples/tests/iterators_001.phpt20
-rwxr-xr-xext/spl/examples/tests/iterators_002.phpt53
-rwxr-xr-xext/spl/examples/tests/iterators_003.phpt35
-rwxr-xr-xext/spl/examples/tests/iterators_004.phpt68
-rwxr-xr-xext/spl/examples/tree.php39
-rwxr-xr-xext/spl/internal/cachingiterator.inc81
-rwxr-xr-xext/spl/internal/cachingrecursiveiterator.inc53
-rwxr-xr-xext/spl/internal/filteriterator.inc97
-rwxr-xr-xext/spl/internal/limititerator.inc72
-rwxr-xr-xext/spl/internal/parentiterator.inc25
-rwxr-xr-xext/spl/internal/recursiveiterator.inc9
-rwxr-xr-xext/spl/internal/recursiveiteratoriterator.inc101
-rwxr-xr-xext/spl/internal/seekableiterator.inc29
-rwxr-xr-xext/spl/package.xml77
-rwxr-xr-xext/spl/php_spl.c232
-rwxr-xr-xext/spl/php_spl.h83
-rwxr-xr-xext/spl/spl.php566
-rwxr-xr-xext/spl/spl_array.c899
-rwxr-xr-xext/spl/spl_array.h41
-rwxr-xr-xext/spl/spl_directory.c803
-rwxr-xr-xext/spl/spl_directory.h51
-rwxr-xr-xext/spl/spl_engine.c67
-rwxr-xr-xext/spl/spl_engine.h72
-rwxr-xr-xext/spl/spl_functions.c160
-rwxr-xr-xext/spl/spl_functions.h95
-rwxr-xr-xext/spl/spl_iterators.c1383
-rwxr-xr-xext/spl/spl_iterators.h94
-rwxr-xr-xext/spl/spl_sxe.c178
-rwxr-xr-xext/spl/spl_sxe.h40
-rwxr-xr-xext/spl/tests/.htaccess3
-rwxr-xr-xext/spl/tests/array_001.phpt103
-rwxr-xr-xext/spl/tests/array_002.phpt37
-rwxr-xr-xext/spl/tests/array_003.phpt61
-rwxr-xr-xext/spl/tests/array_004.phpt143
-rwxr-xr-xext/spl/tests/array_005.phpt93
-rwxr-xr-xext/spl/tests/array_006.phpt32
-rwxr-xr-xext/spl/tests/array_007.phpt65
-rwxr-xr-xext/spl/tests/array_008.phpt62
-rwxr-xr-xext/spl/tests/array_009.phpt37
-rwxr-xr-xext/spl/tests/array_010.phpt148
-rwxr-xr-xext/spl/tests/array_011.phpt37
-rwxr-xr-xext/spl/tests/array_012.phpt65
-rwxr-xr-xext/spl/tests/array_013.phpt81
-rwxr-xr-xext/spl/tests/array_014.phpt44
-rwxr-xr-xext/spl/tests/bug28822.phpt16
-rwxr-xr-xext/spl/tests/iterator_001.phpt162
-rwxr-xr-xext/spl/tests/iterator_002.phpt55
-rwxr-xr-xext/spl/tests/iterator_003.phpt97
-rwxr-xr-xext/spl/tests/iterator_004.phpt144
-rwxr-xr-xext/spl/tests/sxe_001.phpt60
-rwxr-xr-xext/spl/tests/sxe_002.phpt75
-rwxr-xr-xext/spl/tests/sxe_003.phpt77
-rw-r--r--ext/sqlite/CREDITS2
-rw-r--r--ext/sqlite/README14
-rw-r--r--ext/sqlite/TODO19
-rw-r--r--ext/sqlite/config.m4112
-rw-r--r--ext/sqlite/config.w3232
-rw-r--r--ext/sqlite/libsqlite/README37
-rw-r--r--ext/sqlite/libsqlite/VERSION1
-rw-r--r--ext/sqlite/libsqlite/src/attach.c311
-rw-r--r--ext/sqlite/libsqlite/src/auth.c219
-rw-r--r--ext/sqlite/libsqlite/src/btree.c3584
-rw-r--r--ext/sqlite/libsqlite/src/btree.h156
-rw-r--r--ext/sqlite/libsqlite/src/btree_rb.c1493
-rw-r--r--ext/sqlite/libsqlite/src/build.c2156
-rwxr-xr-xext/sqlite/libsqlite/src/config_static.w32.h1
-rw-r--r--ext/sqlite/libsqlite/src/copy.c110
-rw-r--r--ext/sqlite/libsqlite/src/date.c873
-rw-r--r--ext/sqlite/libsqlite/src/delete.c393
-rw-r--r--ext/sqlite/libsqlite/src/encode.c254
-rw-r--r--ext/sqlite/libsqlite/src/expr.c1659
-rw-r--r--ext/sqlite/libsqlite/src/func.c646
-rw-r--r--ext/sqlite/libsqlite/src/hash.c356
-rw-r--r--ext/sqlite/libsqlite/src/hash.h109
-rw-r--r--ext/sqlite/libsqlite/src/insert.c919
-rwxr-xr-xext/sqlite/libsqlite/src/libsqlite.dsp353
-rw-r--r--ext/sqlite/libsqlite/src/main.c1139
-rw-r--r--ext/sqlite/libsqlite/src/opcodes.c140
-rw-r--r--ext/sqlite/libsqlite/src/opcodes.h138
-rw-r--r--ext/sqlite/libsqlite/src/os.c1845
-rw-r--r--ext/sqlite/libsqlite/src/os.h191
-rw-r--r--ext/sqlite/libsqlite/src/pager.c2220
-rw-r--r--ext/sqlite/libsqlite/src/pager.h107
-rw-r--r--ext/sqlite/libsqlite/src/parse.c4035
-rw-r--r--ext/sqlite/libsqlite/src/parse.h130
-rw-r--r--ext/sqlite/libsqlite/src/parse.y897
-rw-r--r--ext/sqlite/libsqlite/src/pragma.c712
-rw-r--r--ext/sqlite/libsqlite/src/printf.c855
-rw-r--r--ext/sqlite/libsqlite/src/random.c97
-rw-r--r--ext/sqlite/libsqlite/src/select.c2412
-rw-r--r--ext/sqlite/libsqlite/src/sqlite.h.in868
-rw-r--r--ext/sqlite/libsqlite/src/sqlite.w32.h764
-rw-r--r--ext/sqlite/libsqlite/src/sqliteInt.h1266
-rw-r--r--ext/sqlite/libsqlite/src/sqlite_config.w32.h8
-rw-r--r--ext/sqlite/libsqlite/src/table.c203
-rw-r--r--ext/sqlite/libsqlite/src/tokenize.c679
-rw-r--r--ext/sqlite/libsqlite/src/trigger.c764
-rw-r--r--ext/sqlite/libsqlite/src/update.c459
-rw-r--r--ext/sqlite/libsqlite/src/util.c1135
-rw-r--r--ext/sqlite/libsqlite/src/vacuum.c327
-rw-r--r--ext/sqlite/libsqlite/src/vdbe.c4916
-rw-r--r--ext/sqlite/libsqlite/src/vdbe.h112
-rw-r--r--ext/sqlite/libsqlite/src/vdbeInt.h303
-rw-r--r--ext/sqlite/libsqlite/src/vdbeaux.c1061
-rw-r--r--ext/sqlite/libsqlite/src/where.c1204
-rw-r--r--ext/sqlite/package.xml136
-rw-r--r--ext/sqlite/php_sqlite.def43
-rw-r--r--ext/sqlite/php_sqlite.h113
-rw-r--r--ext/sqlite/sess_sqlite.c197
-rw-r--r--ext/sqlite/sqlite.c2957
-rw-r--r--ext/sqlite/sqlite.dsp339
-rw-r--r--ext/sqlite/sqlite.php36
-rw-r--r--ext/sqlite/tests/blankdb.inc17
-rwxr-xr-xext/sqlite/tests/blankdb_oo.inc11
-rw-r--r--ext/sqlite/tests/bug26911.phpt12
-rwxr-xr-xext/sqlite/tests/bug28112.phpt14
-rwxr-xr-xext/sqlite/tests/sqlite_001.phpt16
-rwxr-xr-xext/sqlite/tests/sqlite_002.phpt32
-rwxr-xr-xext/sqlite/tests/sqlite_003.phpt52
-rw-r--r--ext/sqlite/tests/sqlite_004.phpt49
-rw-r--r--ext/sqlite/tests/sqlite_005.phpt50
-rw-r--r--ext/sqlite/tests/sqlite_006.phpt55
-rwxr-xr-xext/sqlite/tests/sqlite_007.phpt52
-rwxr-xr-xext/sqlite/tests/sqlite_008.phpt46
-rwxr-xr-xext/sqlite/tests/sqlite_009.phpt46
-rwxr-xr-xext/sqlite/tests/sqlite_010.phpt81
-rwxr-xr-xext/sqlite/tests/sqlite_011.phpt34
-rwxr-xr-xext/sqlite/tests/sqlite_012.phpt38
-rwxr-xr-xext/sqlite/tests/sqlite_013.phpt78
-rwxr-xr-xext/sqlite/tests/sqlite_014.phpt120
-rwxr-xr-xext/sqlite/tests/sqlite_015.phpt49
-rwxr-xr-xext/sqlite/tests/sqlite_016.phpt45
-rwxr-xr-xext/sqlite/tests/sqlite_017.phpt33
-rwxr-xr-xext/sqlite/tests/sqlite_018.phpt14
-rwxr-xr-xext/sqlite/tests/sqlite_019.phpt47
-rwxr-xr-xext/sqlite/tests/sqlite_022.phpt101
-rw-r--r--ext/sqlite/tests/sqlite_023.phpt105
-rwxr-xr-xext/sqlite/tests/sqlite_024.phpt76
-rwxr-xr-xext/sqlite/tests/sqlite_025.phpt38
-rwxr-xr-xext/sqlite/tests/sqlite_026.phpt27
-rwxr-xr-xext/sqlite/tests/sqlite_027.phpt15
-rwxr-xr-xext/sqlite/tests/sqlite_oo_001.phpt17
-rwxr-xr-xext/sqlite/tests/sqlite_oo_002.phpt41
-rwxr-xr-xext/sqlite/tests/sqlite_oo_003.phpt51
-rwxr-xr-xext/sqlite/tests/sqlite_oo_008.phpt43
-rwxr-xr-xext/sqlite/tests/sqlite_oo_009.phpt43
-rwxr-xr-xext/sqlite/tests/sqlite_oo_010.phpt44
-rwxr-xr-xext/sqlite/tests/sqlite_oo_011.phpt33
-rwxr-xr-xext/sqlite/tests/sqlite_oo_012.phpt35
-rwxr-xr-xext/sqlite/tests/sqlite_oo_013.phpt75
-rwxr-xr-xext/sqlite/tests/sqlite_oo_014.phpt118
-rwxr-xr-xext/sqlite/tests/sqlite_oo_015.phpt47
-rwxr-xr-xext/sqlite/tests/sqlite_oo_016.phpt42
-rwxr-xr-xext/sqlite/tests/sqlite_oo_020.phpt66
-rwxr-xr-xext/sqlite/tests/sqlite_oo_021.phpt48
-rwxr-xr-xext/sqlite/tests/sqlite_oo_022.phpt98
-rwxr-xr-xext/sqlite/tests/sqlite_oo_024.phpt74
-rwxr-xr-xext/sqlite/tests/sqlite_oo_025.phpt103
-rwxr-xr-xext/sqlite/tests/sqlite_oo_026.phpt56
-rwxr-xr-xext/sqlite/tests/sqlite_oo_027.phpt42
-rwxr-xr-xext/sqlite/tests/sqlite_oo_028.phpt25
-rwxr-xr-xext/sqlite/tests/sqlite_oo_029.phpt53
-rwxr-xr-xext/sqlite/tests/sqlite_oo_030.phpt42
-rwxr-xr-xext/sqlite/tests/sqlite_oo_031.phpt125
-rw-r--r--ext/standard/CREDITS3
-rw-r--r--ext/standard/Makefile.frag13
-rw-r--r--ext/standard/array.c4369
-rw-r--r--ext/standard/assert.c295
-rw-r--r--ext/standard/base64.c257
-rw-r--r--ext/standard/base64.h37
-rw-r--r--ext/standard/basic_functions.c3290
-rw-r--r--ext/standard/basic_functions.h243
-rw-r--r--ext/standard/browscap.c360
-rw-r--r--ext/standard/config.m4474
-rw-r--r--ext/standard/config.w3218
-rw-r--r--ext/standard/crc32.c52
-rw-r--r--ext/standard/crc32.h109
-rw-r--r--ext/standard/credits.c124
-rw-r--r--ext/standard/credits.h42
-rw-r--r--ext/standard/credits_ext.h93
-rw-r--r--ext/standard/credits_sapi.h31
-rw-r--r--ext/standard/crypt.c161
-rw-r--r--ext/standard/css.c58
-rw-r--r--ext/standard/css.h26
-rw-r--r--ext/standard/cyr_convert.c299
-rw-r--r--ext/standard/cyr_convert.h29
-rw-r--r--ext/standard/datetime.c1105
-rw-r--r--ext/standard/datetime.h47
-rw-r--r--ext/standard/dir.c507
-rw-r--r--ext/standard/dl.c285
-rw-r--r--ext/standard/dl.h34
-rw-r--r--ext/standard/dns.c906
-rw-r--r--ext/standard/dns.h58
-rw-r--r--ext/standard/exec.c480
-rw-r--r--ext/standard/exec.h41
-rw-r--r--ext/standard/file.c2211
-rw-r--r--ext/standard/file.h130
-rw-r--r--ext/standard/filestat.c877
-rw-r--r--ext/standard/filters.c1845
-rw-r--r--ext/standard/flock_compat.c238
-rw-r--r--ext/standard/flock_compat.h55
-rw-r--r--ext/standard/formatted_print.c893
-rw-r--r--ext/standard/fsock.c141
-rw-r--r--ext/standard/fsock.h50
-rw-r--r--ext/standard/ftok.c71
-rw-r--r--ext/standard/ftp_fopen_wrapper.c1173
-rw-r--r--ext/standard/head.c269
-rw-r--r--ext/standard/head.h34
-rw-r--r--ext/standard/html.c1293
-rw-r--r--ext/standard/html.h41
-rw-r--r--ext/standard/http.c229
-rw-r--r--ext/standard/http_fopen_wrapper.c632
-rw-r--r--ext/standard/image.c1362
-rw-r--r--ext/standard/incomplete_class.c169
-rw-r--r--ext/standard/info.c1098
-rw-r--r--ext/standard/info.h88
-rw-r--r--ext/standard/iptc.c391
-rw-r--r--ext/standard/lcg.c138
-rw-r--r--ext/standard/levenshtein.c150
-rw-r--r--ext/standard/link.c227
-rw-r--r--ext/standard/mail.c295
-rw-r--r--ext/standard/math.c1182
-rw-r--r--ext/standard/md5.c446
-rw-r--r--ext/standard/md5.h65
-rw-r--r--ext/standard/metaphone.c478
-rw-r--r--ext/standard/microtime.c173
-rw-r--r--ext/standard/microtime.h32
-rw-r--r--ext/standard/pack.c918
-rw-r--r--ext/standard/pack.h28
-rw-r--r--ext/standard/pageinfo.c196
-rw-r--r--ext/standard/pageinfo.h35
-rw-r--r--ext/standard/parsedate.y1161
-rw-r--r--ext/standard/php_array.h118
-rw-r--r--ext/standard/php_assert.h32
-rw-r--r--ext/standard/php_browscap.h29
-rw-r--r--ext/standard/php_crypt.h39
-rw-r--r--ext/standard/php_dir.h40
-rw-r--r--ext/standard/php_ext_syslog.h39
-rw-r--r--ext/standard/php_filestat.h106
-rw-r--r--ext/standard/php_fopen_wrapper.c256
-rw-r--r--ext/standard/php_fopen_wrappers.h33
-rw-r--r--ext/standard/php_ftok.h28
-rw-r--r--ext/standard/php_http.h46
-rw-r--r--ext/standard/php_image.h63
-rw-r--r--ext/standard/php_incomplete_class.h65
-rw-r--r--ext/standard/php_iptc.h27
-rw-r--r--ext/standard/php_lcg.h44
-rw-r--r--ext/standard/php_link.h33
-rw-r--r--ext/standard/php_mail.h34
-rw-r--r--ext/standard/php_math.h160
-rw-r--r--ext/standard/php_metaphone.h26
-rw-r--r--ext/standard/php_parsedate.h26
-rw-r--r--ext/standard/php_rand.h60
-rw-r--r--ext/standard/php_smart_str.h193
-rw-r--r--ext/standard/php_smart_str_public.h30
-rw-r--r--ext/standard/php_standard.h74
-rw-r--r--ext/standard/php_string.h159
-rw-r--r--ext/standard/php_sunfuncs.h42
-rw-r--r--ext/standard/php_type.h41
-rw-r--r--ext/standard/php_uuencode.h37
-rw-r--r--ext/standard/php_var.h69
-rw-r--r--ext/standard/php_versioning.h30
-rw-r--r--ext/standard/proc_open.c919
-rw-r--r--ext/standard/proc_open.h49
-rw-r--r--ext/standard/quot_print.c220
-rw-r--r--ext/standard/quot_print.h28
-rw-r--r--ext/standard/rand.c407
-rw-r--r--ext/standard/reg.c637
-rw-r--r--ext/standard/reg.h50
-rw-r--r--ext/standard/scanf.c1260
-rw-r--r--ext/standard/scanf.h49
-rw-r--r--ext/standard/sha1.c427
-rw-r--r--ext/standard/sha1.h40
-rw-r--r--ext/standard/soundex.c115
-rw-r--r--ext/standard/streamsfuncs.c1235
-rw-r--r--ext/standard/streamsfuncs.h63
-rw-r--r--ext/standard/string.c4860
-rw-r--r--ext/standard/strnatcmp.c175
-rw-r--r--ext/standard/sunfuncs.c244
-rw-r--r--ext/standard/syslog.c282
-rw-r--r--ext/standard/tests/array/001.phpt157
-rw-r--r--ext/standard/tests/array/002.phpt644
-rw-r--r--ext/standard/tests/array/003.phpt104
-rw-r--r--ext/standard/tests/array/004.phpt59
-rw-r--r--ext/standard/tests/array/005.phpt46
-rw-r--r--ext/standard/tests/array/006.phpt49
-rw-r--r--ext/standard/tests/array/007.phpt651
-rw-r--r--ext/standard/tests/array/008.phpt310
-rw-r--r--ext/standard/tests/array/array_change_key_case.phpt769
-rw-r--r--ext/standard/tests/array/array_chunk.phpt5326
-rw-r--r--ext/standard/tests/array/array_count_values.phpt95
-rw-r--r--ext/standard/tests/array/array_diff_1.phpt15
-rw-r--r--ext/standard/tests/array/array_diff_key.phpt250
-rw-r--r--ext/standard/tests/array/array_intersect_1.phpt565
-rw-r--r--ext/standard/tests/array/array_intersect_key.phpt209
-rw-r--r--ext/standard/tests/array/array_search.phpt23
-rw-r--r--ext/standard/tests/array/array_sum.phpt29
-rw-r--r--ext/standard/tests/array/bug12776.phpt25
-rw-r--r--ext/standard/tests/array/bug14580.phpt11
-rw-r--r--ext/standard/tests/array/bug20381.phpt79
-rw-r--r--ext/standard/tests/array/bug20865.phpt11
-rw-r--r--ext/standard/tests/array/bug21182.phpt12
-rwxr-xr-xext/standard/tests/array/bug21918.phpt55
-rw-r--r--ext/standard/tests/array/bug21998.phpt24
-rw-r--r--ext/standard/tests/array/bug22088.phpt33
-rw-r--r--ext/standard/tests/array/bug22463.phpt29
-rw-r--r--ext/standard/tests/array/bug23581.phpt44
-rw-r--r--ext/standard/tests/array/bug23788.phpt24
-rw-r--r--ext/standard/tests/array/bug24198.phpt25
-rw-r--r--ext/standard/tests/array/bug24220.phpt91
-rw-r--r--ext/standard/tests/array/bug24766.phpt45
-rw-r--r--ext/standard/tests/array/bug24897.phpt21
-rw-r--r--ext/standard/tests/array/bug24980.phpt53
-rw-r--r--ext/standard/tests/array/bug25708.phpt223
-rw-r--r--ext/standard/tests/array/bug25758.phpt14
-rw-r--r--ext/standard/tests/array/bug26458.phptbin395 -> 0 bytes
-rw-r--r--ext/standard/tests/array/bug28739.phpt58
-rw-r--r--ext/standard/tests/array/bug28974.phpt89
-rw-r--r--ext/standard/tests/array/count_recursive.phpt52
-rw-r--r--ext/standard/tests/array/data.inc13
-rw-r--r--ext/standard/tests/array/range.phpt1345
-rw-r--r--ext/standard/tests/array/var_export.phpt11
-rw-r--r--ext/standard/tests/assert/assert.phpt39
-rw-r--r--ext/standard/tests/file/001-win32.phpt125
-rw-r--r--ext/standard/tests/file/001.phpt145
-rw-r--r--ext/standard/tests/file/002.phpt52
-rw-r--r--ext/standard/tests/file/003.phpt41
-rw-r--r--ext/standard/tests/file/004.phpt61
-rw-r--r--ext/standard/tests/file/bug12556.phpt48
-rw-r--r--ext/standard/tests/file/bug20424.phpt10
-rw-r--r--ext/standard/tests/file/bug22382.phpt25
-rw-r--r--ext/standard/tests/file/bug22414.phpt34
-rw-r--r--ext/standard/tests/file/bug24313.phpt10
-rw-r--r--ext/standard/tests/file/bug24482.phpt37
-rw-r--r--ext/standard/tests/file/bug26003.phptbin225 -> 0 bytes
-rw-r--r--ext/standard/tests/file/bug26615.phpt14
-rw-r--r--ext/standard/tests/file/bug26938.phpt24
-rw-r--r--ext/standard/tests/file/bug27619.phpt18
-rw-r--r--ext/standard/tests/file/fgetcsv.phpt158
-rw-r--r--ext/standard/tests/file/fopencookie.phpt86
-rw-r--r--ext/standard/tests/file/proc_open01.phpt67
-rw-r--r--ext/standard/tests/file/statcache-corruption.phpt13
-rw-r--r--ext/standard/tests/file/test.csv17
-rw-r--r--ext/standard/tests/file/test2.csv1
-rw-r--r--ext/standard/tests/file/test3.csvbin8 -> 0 bytes
-rw-r--r--ext/standard/tests/file/userdirstream.phpt52
-rw-r--r--ext/standard/tests/file/userfilters.phpt37
-rw-r--r--ext/standard/tests/file/userstreams.phpt325
-rw-r--r--ext/standard/tests/file/userwrapper.phpt83
-rw-r--r--ext/standard/tests/filters/basic.phpt44
-rw-r--r--ext/standard/tests/filters/bug22538.phpt44
-rw-r--r--ext/standard/tests/general_functions/001.phpt67
-rw-r--r--ext/standard/tests/general_functions/002.phpt11
-rw-r--r--ext/standard/tests/general_functions/003.phpt58
-rw-r--r--ext/standard/tests/general_functions/004.data4
-rw-r--r--ext/standard/tests/general_functions/004.phpt16
-rw-r--r--ext/standard/tests/general_functions/005.phpt24
-rw-r--r--ext/standard/tests/general_functions/006.phpt11
-rw-r--r--ext/standard/tests/general_functions/007.phpt24
-rw-r--r--ext/standard/tests/general_functions/008.phpt40
-rw-r--r--ext/standard/tests/general_functions/009.phpt24
-rwxr-xr-xext/standard/tests/general_functions/bug25038.phpt32
-rw-r--r--ext/standard/tests/general_functions/bug29038.phpt74
-rw-r--r--ext/standard/tests/general_functions/getopt.phpt30
-rw-r--r--ext/standard/tests/general_functions/highlight_heredoc.phpt19
-rw-r--r--ext/standard/tests/general_functions/is_resource.phpt10
-rw-r--r--ext/standard/tests/general_functions/proc_open.phpt28
-rw-r--r--ext/standard/tests/general_functions/sunfuncts.phpt44
-rw-r--r--ext/standard/tests/image/246x247.pngbin360 -> 0 bytes
-rw-r--r--ext/standard/tests/image/384x385.pngbin267 -> 0 bytes
-rw-r--r--ext/standard/tests/image/bug13213.jpgbin596 -> 0 bytes
-rw-r--r--ext/standard/tests/image/bug13213.phpt23
-rw-r--r--ext/standard/tests/image/getimagesize.phpt196
-rw-r--r--ext/standard/tests/image/getimagesize_246x247.phpt42
-rw-r--r--ext/standard/tests/image/getimagesize_384x385.phpt42
-rw-r--r--ext/standard/tests/image/getimagesize_swc.phpt25
-rw-r--r--ext/standard/tests/image/image_type_to_mime_type.phpt51
-rw-r--r--ext/standard/tests/image/skipif_imagetype.inc15
-rwxr-xr-xext/standard/tests/image/test13pix.swfbin589 -> 0 bytes
-rw-r--r--ext/standard/tests/image/test1pix.bmpbin58 -> 0 bytes
-rw-r--r--ext/standard/tests/image/test1pix.jp2bin243 -> 0 bytes
-rw-r--r--ext/standard/tests/image/test1pix.jpcbin127 -> 0 bytes
-rw-r--r--ext/standard/tests/image/test1pix.jpgbin523 -> 0 bytes
-rw-r--r--ext/standard/tests/image/test2pix.gifbin35 -> 0 bytes
-rw-r--r--ext/standard/tests/image/test4pix.gifbin42 -> 0 bytes
-rw-r--r--ext/standard/tests/image/test4pix.iffbin114 -> 0 bytes
-rw-r--r--ext/standard/tests/image/test4pix.pngbin148 -> 0 bytes
-rw-r--r--ext/standard/tests/image/test4pix.psdbin1247 -> 0 bytes
-rwxr-xr-xext/standard/tests/image/test4pix.swfbin609 -> 0 bytes
-rw-r--r--ext/standard/tests/image/test4pix.tifbin312 -> 0 bytes
-rw-r--r--ext/standard/tests/math/abs.phpt24
-rw-r--r--ext/standard/tests/math/bug21523.phpt11
-rw-r--r--ext/standard/tests/math/bug24142.phpt20
-rw-r--r--ext/standard/tests/math/bug25665.phpt11
-rw-r--r--ext/standard/tests/math/bug25694.phpt35
-rwxr-xr-xext/standard/tests/math/bug27646.phpt47
-rwxr-xr-xext/standard/tests/math/bug28228.phpt14
-rw-r--r--ext/standard/tests/math/floorceil.phpt44
-rw-r--r--ext/standard/tests/math/hexdec.phpt22
-rw-r--r--ext/standard/tests/math/log.phpt42
-rw-r--r--ext/standard/tests/math/pow.phpt149
-rw-r--r--ext/standard/tests/math/round.phpt37
-rw-r--r--ext/standard/tests/network/bug20134.phpt24
-rw-r--r--ext/standard/tests/network/tcp4loop.phpt34
-rw-r--r--ext/standard/tests/network/tcp6loop.phpt42
-rw-r--r--ext/standard/tests/network/udgloop.phpt37
-rw-r--r--ext/standard/tests/network/udp4loop.phpt27
-rw-r--r--ext/standard/tests/network/udp6loop.phpt41
-rw-r--r--ext/standard/tests/network/unixloop.phpt44
-rw-r--r--ext/standard/tests/reg/001.phpt7
-rw-r--r--ext/standard/tests/reg/002.phpt7
-rw-r--r--ext/standard/tests/reg/003.phpt8
-rw-r--r--ext/standard/tests/reg/004.phpt14
-rw-r--r--ext/standard/tests/reg/005.phpt18
-rw-r--r--ext/standard/tests/reg/006.phpt8
-rw-r--r--ext/standard/tests/reg/007.phpt10
-rw-r--r--ext/standard/tests/reg/008.phpt8
-rw-r--r--ext/standard/tests/reg/009.phpt17
-rw-r--r--ext/standard/tests/reg/010.phpt7
-rw-r--r--ext/standard/tests/reg/011.phpt7
-rw-r--r--ext/standard/tests/reg/012.phpt7
-rw-r--r--ext/standard/tests/reg/013.phpt7
-rw-r--r--ext/standard/tests/reg/014.phpt7
-rw-r--r--ext/standard/tests/reg/015.phpt6
-rw-r--r--ext/standard/tests/reg/016.phpt6
-rw-r--r--ext/standard/tests/serialize/001.phpt120
-rw-r--r--ext/standard/tests/serialize/003.phpt25
-rw-r--r--ext/standard/tests/serialize/004.phpt33
-rw-r--r--ext/standard/tests/serialize/bug14293.phpt36
-rw-r--r--ext/standard/tests/serialize/bug21957.phpt49
-rw-r--r--ext/standard/tests/serialize/bug23298.phpt13
-rw-r--r--ext/standard/tests/serialize/bug24063.phpt23
-rw-r--r--ext/standard/tests/serialize/bug25378.phpt59
-rwxr-xr-xext/standard/tests/serialize/bug26762.phpt27
-rw-r--r--ext/standard/tests/serialize/bug27469.phpt27
-rw-r--r--ext/standard/tests/serialize/bug28325.phpt39
-rw-r--r--ext/standard/tests/strings/004.phpt84
-rw-r--r--ext/standard/tests/strings/add-and-stripcslashes.phpt26
-rw-r--r--ext/standard/tests/strings/add-and-stripslashes.phpt30
-rw-r--r--ext/standard/tests/strings/basename.phptbin1148 -> 0 bytes
-rw-r--r--ext/standard/tests/strings/bin2hex.phpt14
-rw-r--r--ext/standard/tests/strings/bug20108.phpt11
-rw-r--r--ext/standard/tests/strings/bug20169.phpt14
-rw-r--r--ext/standard/tests/strings/bug20261.phpt26
-rw-r--r--ext/standard/tests/strings/bug20927.phpt17
-rw-r--r--ext/standard/tests/strings/bug20934.phpt17
-rw-r--r--ext/standard/tests/strings/bug21338.phpt10
-rw-r--r--ext/standard/tests/strings/bug21453.phpt18
-rw-r--r--ext/standard/tests/strings/bug21730.phpt35
-rw-r--r--ext/standard/tests/strings/bug21744.phpt15
-rw-r--r--ext/standard/tests/strings/bug22008.phpt24
-rw-r--r--ext/standard/tests/strings/bug22187.phpt10
-rw-r--r--ext/standard/tests/strings/bug22207.phpt11
-rw-r--r--ext/standard/tests/strings/bug22224.phpt26
-rw-r--r--ext/standard/tests/strings/bug22227.phpt9
-rw-r--r--ext/standard/tests/strings/bug22904.phpt30
-rw-r--r--ext/standard/tests/strings/bug23650.phpt31
-rw-r--r--ext/standard/tests/strings/bug23894.phpt15
-rw-r--r--ext/standard/tests/strings/bug24098.phpt17
-rw-r--r--ext/standard/tests/strings/bug24208.phpt12
-rw-r--r--ext/standard/tests/strings/bug24281.phpt18
-rw-r--r--ext/standard/tests/strings/bug24312.phpt27
-rw-r--r--ext/standard/tests/strings/bug25671.phpt23
-rw-r--r--ext/standard/tests/strings/bug25707.phpt12
-rw-r--r--ext/standard/tests/strings/bug26817.phpt26
-rw-r--r--ext/standard/tests/strings/bug26819.phpt9
-rw-r--r--ext/standard/tests/strings/bug26878.phpt9
-rw-r--r--ext/standard/tests/strings/bug26973.phpt34
-rw-r--r--ext/standard/tests/strings/bug27276.phpt15
-rw-r--r--ext/standard/tests/strings/bug27278.phpt21
-rw-r--r--ext/standard/tests/strings/bug27295.phpt14
-rw-r--r--ext/standard/tests/strings/bug27457.phpt21
-rw-r--r--ext/standard/tests/strings/bug27675.phpt8
-rw-r--r--ext/standard/tests/strings/bug28386.phpt13
-rw-r--r--ext/standard/tests/strings/bug28633.phpt10
-rw-r--r--ext/standard/tests/strings/bug29075.phpt14
-rw-r--r--ext/standard/tests/strings/bug29119.phpt8
-rw-r--r--ext/standard/tests/strings/chr_ord.phpt10
-rw-r--r--ext/standard/tests/strings/chunk_split.phpt17
-rw-r--r--ext/standard/tests/strings/count_chars.phpt18
-rw-r--r--ext/standard/tests/strings/crc32.phpt14
-rw-r--r--ext/standard/tests/strings/crypt.phpt32
-rw-r--r--ext/standard/tests/strings/explode.phpt154
-rw-r--r--ext/standard/tests/strings/htmlentities.phpt19
-rw-r--r--ext/standard/tests/strings/htmlentities01.phpt13
-rw-r--r--ext/standard/tests/strings/htmlentities02.phpt21
-rw-r--r--ext/standard/tests/strings/htmlentities03.phpt20
-rw-r--r--ext/standard/tests/strings/htmlentities04.phpt20
-rw-r--r--ext/standard/tests/strings/htmlentities05.phpt25
-rw-r--r--ext/standard/tests/strings/htmlentities06.phpt22
-rw-r--r--ext/standard/tests/strings/htmlentities07.phpt23
-rw-r--r--ext/standard/tests/strings/htmlentities08.phpt23
-rw-r--r--ext/standard/tests/strings/htmlentities09.phpt23
-rw-r--r--ext/standard/tests/strings/htmlentities10.phpt16
-rw-r--r--ext/standard/tests/strings/htmlentities11.phpt14
-rw-r--r--ext/standard/tests/strings/htmlentities12.phpt14
-rw-r--r--ext/standard/tests/strings/htmlentities13.phpt14
-rw-r--r--ext/standard/tests/strings/htmlentities14.phpt14
-rw-r--r--ext/standard/tests/strings/htmlentities15.phpt22
-rw-r--r--ext/standard/tests/strings/htmlentities16.phpt21
-rw-r--r--ext/standard/tests/strings/implode.phpt23
-rw-r--r--ext/standard/tests/strings/md5.phpt20
-rw-r--r--ext/standard/tests/strings/md5raw.phpt20
-rw-r--r--ext/standard/tests/strings/nl2br.phpt60
-rw-r--r--ext/standard/tests/strings/sha1.phpt14
-rw-r--r--ext/standard/tests/strings/sha1raw.phpt14
-rwxr-xr-xext/standard/tests/strings/sprintf_f.phpt40
-rw-r--r--ext/standard/tests/strings/str_repeat.phpt27
-rw-r--r--ext/standard/tests/strings/str_shuffle.phpt12
-rw-r--r--ext/standard/tests/strings/strcspn.phpt18
-rw-r--r--ext/standard/tests/strings/strings001.phpt12
-rw-r--r--ext/standard/tests/strings/strip_tags.phpt27
-rw-r--r--ext/standard/tests/strings/strpos.phpt30
-rw-r--r--ext/standard/tests/strings/strrev.phpt19
-rw-r--r--ext/standard/tests/strings/strripos.phpt33
-rw-r--r--ext/standard/tests/strings/strrpos.phpt32
-rw-r--r--ext/standard/tests/strings/strspn.phpt18
-rw-r--r--ext/standard/tests/strings/strstr.phpt30
-rw-r--r--ext/standard/tests/strings/strtoupper.phpt20
-rw-r--r--ext/standard/tests/strings/strtr.phpt10
-rw-r--r--ext/standard/tests/strings/substr_count.phpt24
-rw-r--r--ext/standard/tests/strings/substr_replace.phpt810
-rw-r--r--ext/standard/tests/strings/trim.phpt27
-rw-r--r--ext/standard/tests/strings/url_t.phpt650
-rw-r--r--ext/standard/tests/strings/wordwrap.phpt35
-rw-r--r--ext/standard/tests/time/001.phpt34
-rw-r--r--ext/standard/tests/time/002-win32.phpt66
-rw-r--r--ext/standard/tests/time/002.phpt96
-rw-r--r--ext/standard/tests/time/003.phpt41
-rw-r--r--ext/standard/tests/time/bug13142.phpt20
-rw-r--r--ext/standard/tests/time/bug17988.phpt33
-rw-r--r--ext/standard/tests/time/bug20382.phpt16
-rw-r--r--ext/standard/tests/time/bug21966.phpt19
-rw-r--r--ext/standard/tests/time/bug26198.phpt10
-rw-r--r--ext/standard/tests/time/bug26317.phpt17
-rw-r--r--ext/standard/tests/time/bug26320.phpt15
-rw-r--r--ext/standard/tests/time/bug27719.phpt65
-rw-r--r--ext/standard/tests/time/bug27780.phpt113
-rw-r--r--ext/standard/tests/time/date.phpt22
-rw-r--r--ext/standard/tests/time/idate.phpt32
-rw-r--r--ext/standard/tests/time/mktime.phpt49
-rw-r--r--ext/standard/tests/versioning/version_compare.phpt600
-rw-r--r--ext/standard/type.c395
-rw-r--r--ext/standard/uniqid.c97
-rw-r--r--ext/standard/uniqid.h28
-rw-r--r--ext/standard/url.c655
-rw-r--r--ext/standard/url.h55
-rw-r--r--ext/standard/url_scanner.c384
-rw-r--r--ext/standard/url_scanner.h54
-rw-r--r--ext/standard/url_scanner_ex.c1101
-rw-r--r--ext/standard/url_scanner_ex.h65
-rw-r--r--ext/standard/url_scanner_ex.re530
-rw-r--r--ext/standard/user_filters.c547
-rw-r--r--ext/standard/uuencode.c222
-rw-r--r--ext/standard/var.c864
-rw-r--r--ext/standard/var_unserializer.c1011
-rw-r--r--ext/standard/var_unserializer.re535
-rw-r--r--ext/standard/versioning.c256
-rw-r--r--ext/sybase/CREDITS2
-rw-r--r--ext/sybase/config.m430
-rw-r--r--ext/sybase/php_sybase_db.c1452
-rw-r--r--ext/sybase/php_sybase_db.h89
-rw-r--r--ext/sybase_ct/CREDITS2
-rw-r--r--ext/sybase_ct/config.m456
-rw-r--r--ext/sybase_ct/config.w3218
-rw-r--r--ext/sybase_ct/php_sybase_ct.c2250
-rw-r--r--ext/sybase_ct/php_sybase_ct.h131
-rw-r--r--ext/sybase_ct/sybase_ct.dsp114
-rw-r--r--ext/sybase_ct/tests/bug22403.phpt88
-rw-r--r--ext/sybase_ct/tests/bug26407.phpt91
-rw-r--r--ext/sybase_ct/tests/bug27843.phpt54
-rw-r--r--ext/sybase_ct/tests/bug28354.phpt46
-rw-r--r--ext/sybase_ct/tests/bug29064.phpt143
-rw-r--r--ext/sybase_ct/tests/bug6339.phpt24
-rw-r--r--ext/sybase_ct/tests/skipif.inc8
-rw-r--r--ext/sybase_ct/tests/test.inc84
-rw-r--r--ext/sybase_ct/tests/test_appname.phpt65
-rw-r--r--ext/sybase_ct/tests/test_connect.phpt19
-rw-r--r--ext/sybase_ct/tests/test_connectionbased_msghandler.phpt27
-rw-r--r--ext/sybase_ct/tests/test_fetch_object.phpt74
-rw-r--r--ext/sybase_ct/tests/test_fields.phpt76
-rw-r--r--ext/sybase_ct/tests/test_long.phpt80
-rw-r--r--ext/sybase_ct/tests/test_msghandler.phpt43
-rw-r--r--ext/sybase_ct/tests/test_msghandler_handled.phpt69
-rw-r--r--ext/sybase_ct/tests/test_query_nostore.phpt98
-rw-r--r--ext/sybase_ct/tests/test_types.phpt87
-rw-r--r--ext/sybase_ct/tests/test_unbuffered_query.phpt57
-rw-r--r--ext/sysvmsg/CREDITS2
-rw-r--r--ext/sysvmsg/config.m49
-rw-r--r--ext/sysvmsg/package.xml40
-rw-r--r--ext/sysvmsg/php_sysvmsg.h76
-rw-r--r--ext/sysvmsg/sysvmsg.c425
-rw-r--r--ext/sysvmsg/tests/001.phpt22
-rw-r--r--ext/sysvsem/CREDITS2
-rw-r--r--ext/sysvsem/config.m429
-rw-r--r--ext/sysvsem/package.xml39
-rw-r--r--ext/sysvsem/php_sysvsem.h57
-rw-r--r--ext/sysvsem/sysvsem.c407
-rw-r--r--ext/sysvsem/tests/sysv.phpt114
-rw-r--r--ext/sysvshm/CREDITS2
-rw-r--r--ext/sysvshm/config.m411
-rw-r--r--ext/sysvshm/package.xml40
-rw-r--r--ext/sysvshm/php_sysvshm.h77
-rw-r--r--ext/sysvshm/sysvshm.c445
-rw-r--r--ext/tidy/CREDITS2
-rw-r--r--ext/tidy/README16
-rw-r--r--ext/tidy/TODO3
-rw-r--r--ext/tidy/config.m438
-rw-r--r--ext/tidy/config.w3222
-rw-r--r--ext/tidy/examples/cleanhtml.php40
-rw-r--r--ext/tidy/examples/cleanhtml5.php39
-rw-r--r--ext/tidy/examples/dumpit5.php92
-rw-r--r--ext/tidy/examples/urlgrab5.php39
-rw-r--r--ext/tidy/libtidy.txt12
-rw-r--r--ext/tidy/package.xml65
-rw-r--r--ext/tidy/php_tidy.def292
-rw-r--r--ext/tidy/php_tidy.h113
-rw-r--r--ext/tidy/tests/001.phpt10
-rw-r--r--ext/tidy/tests/002.phpt18
-rw-r--r--ext/tidy/tests/003.phpt21
-rw-r--r--ext/tidy/tests/004.phpt17
-rw-r--r--ext/tidy/tests/005.html1
-rw-r--r--ext/tidy/tests/005.phpt18
-rw-r--r--ext/tidy/tests/006.phpt16
-rw-r--r--ext/tidy/tests/007.html1
-rw-r--r--ext/tidy/tests/007.phpt21
-rw-r--r--ext/tidy/tests/008.phpt15
-rw-r--r--ext/tidy/tests/009.phpt19
-rw-r--r--ext/tidy/tests/010.phpt245
-rw-r--r--ext/tidy/tests/011.phpt22
-rw-r--r--ext/tidy/tests/012.phpt347
-rw-r--r--ext/tidy/tests/013.html1
-rw-r--r--ext/tidy/tests/013.phpt13
-rw-r--r--ext/tidy/tests/014.phpt14
-rw-r--r--ext/tidy/tests/015.html1
-rw-r--r--ext/tidy/tests/015.phpt13
-rw-r--r--ext/tidy/tests/016.html1
-rw-r--r--ext/tidy/tests/016.phpt24
-rw-r--r--ext/tidy/tests/016.tcfg1
-rw-r--r--ext/tidy/tests/017.phpt17
-rw-r--r--ext/tidy/tidy.c1772
-rwxr-xr-xext/tidy/tidy.dsp108
-rw-r--r--ext/tokenizer/CREDITS2
-rw-r--r--ext/tokenizer/Makefile.frag2
-rw-r--r--ext/tokenizer/config.m412
-rw-r--r--ext/tokenizer/config.w3211
-rw-r--r--ext/tokenizer/package.xml46
-rw-r--r--ext/tokenizer/php_tokenizer.h62
-rw-r--r--ext/tokenizer/tests/bug26463.phpt118
-rw-r--r--ext/tokenizer/tokenizer.c550
-rw-r--r--ext/tokenizer/tokenizer.dsp108
-rw-r--r--ext/tokenizer/tokenizer.php35
-rw-r--r--ext/w32api/CREDITS2
-rw-r--r--ext/w32api/EXPERIMENTAL0
-rw-r--r--ext/w32api/README5
-rw-r--r--ext/w32api/TODO3
-rw-r--r--ext/w32api/package.xml47
-rw-r--r--ext/w32api/php_w32api.h345
-rw-r--r--ext/w32api/w32api.c2293
-rw-r--r--ext/w32api/w32api.dsp281
-rw-r--r--ext/w32api/w32api_function_definition_parser.y67
-rw-r--r--ext/w32api/w32api_function_definition_scanner.l63
-rw-r--r--ext/w32api/w32api_type_definition_parser.y67
-rw-r--r--ext/w32api/w32api_type_definition_scanner.l56
-rw-r--r--ext/wddx/CREDITS2
-rw-r--r--ext/wddx/config.m415
-rw-r--r--ext/wddx/config.w3212
-rw-r--r--ext/wddx/package.xml43
-rw-r--r--ext/wddx/php_wddx.h44
-rw-r--r--ext/wddx/php_wddx_api.h66
-rw-r--r--ext/wddx/tests/001.phpt57
-rwxr-xr-xext/wddx/tests/bug27287.phpt18
-rw-r--r--ext/wddx/tests/wddx.xml60
-rw-r--r--ext/wddx/wddx.c1340
-rw-r--r--ext/xml/CREDITS2
-rw-r--r--ext/xml/compat.c633
-rw-r--r--ext/xml/config.m452
-rw-r--r--ext/xml/config.w3215
-rw-r--r--ext/xml/expat_compat.h149
-rw-r--r--ext/xml/package.xml74
-rw-r--r--ext/xml/php_xml.h161
-rw-r--r--ext/xml/tests/bug25666.phpt34
-rw-r--r--ext/xml/tests/bug26528.phpt27
-rw-r--r--ext/xml/tests/bug26614.phpt88
-rw-r--r--ext/xml/tests/inc.ent1
-rw-r--r--ext/xml/tests/skipif.inc10
-rw-r--r--ext/xml/tests/xml001.phpt99
-rw-r--r--ext/xml/tests/xml002.phpt100
-rw-r--r--ext/xml/tests/xml003.phpt98
-rw-r--r--ext/xml/tests/xml004.phpt64
-rw-r--r--ext/xml/tests/xml006.phpt12
-rw-r--r--ext/xml/tests/xml007.phpt53
-rw-r--r--ext/xml/tests/xml009.phpt34
-rw-r--r--ext/xml/tests/xml010.phpt38
-rw-r--r--ext/xml/tests/xmltest.xml20
-rw-r--r--ext/xml/xml.c1630
-rw-r--r--ext/xml/xml.mak172
-rw-r--r--ext/xmlreader/CREDITS2
-rw-r--r--ext/xmlreader/README5
-rw-r--r--ext/xmlreader/TODO8
-rw-r--r--ext/xmlreader/config.m422
-rw-r--r--ext/xmlreader/config.w3214
-rw-r--r--ext/xmlreader/examples/dtdexample.dtd8
-rw-r--r--ext/xmlreader/examples/dtdexample.xml15
-rw-r--r--ext/xmlreader/examples/relaxNG.rng11
-rw-r--r--ext/xmlreader/examples/relaxNG.xml1
-rw-r--r--ext/xmlreader/examples/relaxNG2.rng23
-rw-r--r--ext/xmlreader/examples/relaxNG3.rng8
-rw-r--r--ext/xmlreader/examples/xmlreader.xml10
-rw-r--r--ext/xmlreader/examples/xmlreader_file.php20
-rw-r--r--ext/xmlreader/examples/xmlreader_relaxNG.php25
-rw-r--r--ext/xmlreader/examples/xmlreader_string.php31
-rw-r--r--ext/xmlreader/examples/xmlreader_validatedtd.php18
-rw-r--r--ext/xmlreader/package.xml77
-rw-r--r--ext/xmlreader/php_xmlreader.c1174
-rw-r--r--ext/xmlreader/php_xmlreader.h72
-rw-r--r--ext/xmlreader/xmlreader.dsp114
-rw-r--r--ext/xmlrpc/CREDITS2
-rw-r--r--ext/xmlrpc/EXPERIMENTAL5
-rw-r--r--ext/xmlrpc/config.m493
-rw-r--r--ext/xmlrpc/config.w3214
-rw-r--r--ext/xmlrpc/libxmlrpc/README17
-rw-r--r--ext/xmlrpc/libxmlrpc/acinclude.m432
-rw-r--r--ext/xmlrpc/libxmlrpc/base64.c192
-rw-r--r--ext/xmlrpc/libxmlrpc/base64.h38
-rw-r--r--ext/xmlrpc/libxmlrpc/encodings.c118
-rw-r--r--ext/xmlrpc/libxmlrpc/encodings.h46
-rw-r--r--ext/xmlrpc/libxmlrpc/queue.c982
-rw-r--r--ext/xmlrpc/libxmlrpc/queue.h89
-rw-r--r--ext/xmlrpc/libxmlrpc/simplestring.c248
-rw-r--r--ext/xmlrpc/libxmlrpc/simplestring.h76
-rw-r--r--ext/xmlrpc/libxmlrpc/system_methods.c375
-rw-r--r--ext/xmlrpc/libxmlrpc/system_methods_private.h91
-rw-r--r--ext/xmlrpc/libxmlrpc/xml_element.c742
-rw-r--r--ext/xmlrpc/libxmlrpc/xml_element.h202
-rw-r--r--ext/xmlrpc/libxmlrpc/xml_to_dandarpc.c319
-rw-r--r--ext/xmlrpc/libxmlrpc/xml_to_dandarpc.h44
-rw-r--r--ext/xmlrpc/libxmlrpc/xml_to_soap.c670
-rw-r--r--ext/xmlrpc/libxmlrpc/xml_to_soap.h44
-rw-r--r--ext/xmlrpc/libxmlrpc/xml_to_xmlrpc.c409
-rw-r--r--ext/xmlrpc/libxmlrpc/xml_to_xmlrpc.h45
-rw-r--r--ext/xmlrpc/libxmlrpc/xmlrpc.c2957
-rw-r--r--ext/xmlrpc/libxmlrpc/xmlrpc.h454
-rw-r--r--ext/xmlrpc/libxmlrpc/xmlrpc.m412
-rw-r--r--ext/xmlrpc/libxmlrpc/xmlrpc_introspection.c601
-rw-r--r--ext/xmlrpc/libxmlrpc/xmlrpc_introspection.h101
-rw-r--r--ext/xmlrpc/libxmlrpc/xmlrpc_introspection_private.h106
-rw-r--r--ext/xmlrpc/libxmlrpc/xmlrpc_private.h178
-rw-r--r--ext/xmlrpc/libxmlrpc/xmlrpc_win32.h11
-rw-r--r--ext/xmlrpc/php_xmlrpc.h122
-rw-r--r--ext/xmlrpc/xmlrpc-epi-php.c1492
-rw-r--r--ext/xmlrpc/xmlrpc.dsp211
-rw-r--r--ext/xmlwriter/CREDITS2
-rw-r--r--ext/xmlwriter/EXPERIMENTAL4
-rw-r--r--ext/xmlwriter/TODO5
-rw-r--r--ext/xmlwriter/config.m461
-rw-r--r--ext/xmlwriter/config.w3218
-rw-r--r--ext/xmlwriter/package.xml38
-rw-r--r--ext/xmlwriter/php_xmlwriter.c1317
-rw-r--r--ext/xmlwriter/php_xmlwriter.h94
-rw-r--r--ext/xsl/CREDITS2
-rw-r--r--ext/xsl/config.m463
-rw-r--r--ext/xsl/config.w3247
-rw-r--r--ext/xsl/php_xsl.c296
-rw-r--r--ext/xsl/php_xsl.h123
-rw-r--r--ext/xsl/tests/area_list.xsl10
-rw-r--r--ext/xsl/tests/area_name.xml12
-rw-r--r--ext/xsl/tests/bug26384.phpt33
-rw-r--r--ext/xsl/tests/documentxpath.xsl10
-rw-r--r--ext/xsl/tests/exslt.xml9
-rw-r--r--ext/xsl/tests/exslt.xsl45
-rw-r--r--ext/xsl/tests/prepare.inc20
-rw-r--r--ext/xsl/tests/skipif.inc1
-rw-r--r--ext/xsl/tests/streamsinclude.xsl6
-rw-r--r--ext/xsl/tests/xslt.xml28
-rw-r--r--ext/xsl/tests/xslt.xsl26
-rw-r--r--ext/xsl/tests/xslt.xsl.gzbin395 -> 0 bytes
-rw-r--r--ext/xsl/tests/xslt001.phpt22
-rw-r--r--ext/xsl/tests/xslt002.phpt29
-rw-r--r--ext/xsl/tests/xslt003.phpt23
-rw-r--r--ext/xsl/tests/xslt004.phpt29
-rw-r--r--ext/xsl/tests/xslt005.phpt31
-rw-r--r--ext/xsl/tests/xslt006.phpt23
-rw-r--r--ext/xsl/tests/xslt007.phpt24
-rw-r--r--ext/xsl/tests/xslt008.phpt31
-rw-r--r--ext/xsl/tests/xslt009.phpt28
-rw-r--r--ext/xsl/tests/xslt010.phpt112
-rw-r--r--ext/xsl/tests/xslt011.phpt59
-rw-r--r--ext/xsl/tests/xslt011.xml1
-rw-r--r--ext/xsl/tests/xslt011.xsl25
-rw-r--r--ext/xsl/tests/xslt012.phpt52
-rw-r--r--ext/xsl/tests/xslt012.xsl29
-rw-r--r--ext/xsl/xsl.dsp120
-rw-r--r--ext/xsl/xsl_fe.h36
-rw-r--r--ext/xsl/xsltprocessor.c719
-rw-r--r--ext/yp/CREDITS2
-rw-r--r--ext/yp/config.m438
-rw-r--r--ext/yp/package.xml46
-rw-r--r--ext/yp/php_yp.h69
-rw-r--r--ext/yp/yp.c430
-rw-r--r--ext/zlib/CREDITS2
-rw-r--r--ext/zlib/config.w3217
-rw-r--r--ext/zlib/config0.m458
-rw-r--r--ext/zlib/package.xml70
-rw-r--r--ext/zlib/php_zlib.def14
-rw-r--r--ext/zlib/php_zlib.h83
-rw-r--r--ext/zlib/tests/001.phpt32
-rw-r--r--ext/zlib/tests/002.phpt24
-rw-r--r--ext/zlib/tests/003.phpt14
-rw-r--r--ext/zlib/tests/gzfilegzreadfile.phpt82
-rw-r--r--ext/zlib/tests/gzreadgzwrite.phpt31
-rw-r--r--ext/zlib/tests/gzreadgzwriteplain.phpt45
-rw-r--r--ext/zlib/tests/zlib_filter_deflate.phpt17
-rw-r--r--ext/zlib/tests/zlib_filter_inflate.phpt17
-rw-r--r--ext/zlib/zlib.c998
-rw-r--r--ext/zlib/zlib.dsp121
-rw-r--r--ext/zlib/zlib_filter.c421
-rw-r--r--ext/zlib/zlib_fopen_wrapper.c188
-rw-r--r--ext/zlib/zlib_win32_howto.txt16
-rw-r--r--footer9
-rwxr-xr-xgenfiles14
-rw-r--r--header19
-rw-r--r--ltmain.sh5062
-rw-r--r--main/SAPI.c932
-rw-r--r--main/SAPI.h303
-rw-r--r--main/alloca.c501
-rw-r--r--main/build-defs.h.in91
-rw-r--r--main/config.nw.h316
-rw-r--r--main/config.w32.h205
-rw-r--r--main/fopen_wrappers.c578
-rw-r--r--main/fopen_wrappers.h48
-rw-r--r--main/internal_functions.c.in50
-rw-r--r--main/internal_functions_nw.c102
-rw-r--r--main/internal_functions_registry.h37
-rw-r--r--main/internal_functions_win32.c174
-rw-r--r--main/logos.h1314
-rw-r--r--main/main.c1778
-rw-r--r--main/mergesort.c363
-rw-r--r--main/network.c1037
-rw-r--r--main/output.c1077
-rw-r--r--main/php.h468
-rw-r--r--main/php3_compat.h122
-rw-r--r--main/php_compat.h341
-rw-r--r--main/php_content_types.c92
-rw-r--r--main/php_content_types.h30
-rw-r--r--main/php_globals.h163
-rw-r--r--main/php_ini.c630
-rw-r--r--main/php_ini.h78
-rw-r--r--main/php_logos.c100
-rw-r--r--main/php_logos.h34
-rw-r--r--main/php_main.h58
-rw-r--r--main/php_memory_streams.h65
-rw-r--r--main/php_network.h219
-rw-r--r--main/php_open_temporary_file.c264
-rw-r--r--main/php_open_temporary_file.h30
-rw-r--r--main/php_output.h114
-rw-r--r--main/php_realpath.c285
-rw-r--r--main/php_reentrancy.h133
-rw-r--r--main/php_regex.h65
-rw-r--r--main/php_scandir.c137
-rw-r--r--main/php_scandir.h54
-rw-r--r--main/php_sprintf.c55
-rwxr-xr-xmain/php_streams.h557
-rw-r--r--main/php_syslog.h57
-rw-r--r--main/php_ticks.c81
-rw-r--r--main/php_ticks.h40
-rw-r--r--main/php_variables.c784
-rw-r--r--main/php_variables.h47
-rw-r--r--main/php_version.h7
-rw-r--r--main/reentrancy.c504
-rw-r--r--main/rfc1867.c1205
-rw-r--r--main/rfc1867.h33
-rw-r--r--main/safe_mode.c229
-rw-r--r--main/safe_mode.h41
-rw-r--r--main/snprintf.c1169
-rw-r--r--main/snprintf.h138
-rw-r--r--main/spprintf.c756
-rw-r--r--main/spprintf.h52
-rw-r--r--main/streams/cast.c350
-rw-r--r--main/streams/filter.c434
-rw-r--r--main/streams/memory.c473
-rw-r--r--main/streams/mmap.c61
-rw-r--r--main/streams/php_stream_context.h136
-rw-r--r--main/streams/php_stream_filter_api.h155
-rw-r--r--main/streams/php_stream_mmap.h83
-rw-r--r--main/streams/php_stream_plain_wrapper.h65
-rw-r--r--main/streams/php_stream_transport.h194
-rw-r--r--main/streams/php_stream_userspace.h35
-rw-r--r--main/streams/php_streams_int.h61
-rw-r--r--main/streams/plain_wrapper.c1315
-rwxr-xr-xmain/streams/streams.c1941
-rw-r--r--main/streams/transports.c497
-rw-r--r--main/streams/userspace.c1265
-rw-r--r--main/streams/xp_socket.c806
-rw-r--r--main/strlcat.c106
-rw-r--r--main/strlcpy.c103
-rw-r--r--main/win95nt.h82
-rwxr-xr-xmakedist142
-rw-r--r--makerpm203
-rw-r--r--netware/ApacheCore.imp365
-rwxr-xr-xnetware/BisonExtStandard.bat3
-rwxr-xr-xnetware/BisonFlexZend.bat8
-rw-r--r--netware/ZendEngine2.mak160
-rwxr-xr-xnetware/build.bat21
-rwxr-xr-xnetware/buildext.bat18
-rwxr-xr-xnetware/buildlib.bat20
-rwxr-xr-xnetware/buildsapi.bat18
-rw-r--r--netware/common.mif90
-rw-r--r--netware/geterrnoptr.c9
-rw-r--r--netware/grp.h31
-rw-r--r--netware/libpq-fe.h378
-rw-r--r--netware/libpq.imp93
-rw-r--r--netware/libpq/libpq-fs.h24
-rw-r--r--netware/mktemp.c87
-rw-r--r--netware/mktemp.h1
-rw-r--r--netware/param.h20
-rwxr-xr-xnetware/php-nw.bat10
-rw-r--r--netware/php5apache.mak165
-rw-r--r--netware/php5apache2filter.mak166
-rw-r--r--netware/php5cli.mak163
-rw-r--r--netware/phplib.imp177
-rw-r--r--netware/phplib.mak404
-rw-r--r--netware/phptest.ncf1
-rw-r--r--netware/pipe.c329
-rw-r--r--netware/pipe.h11
-rw-r--r--netware/postgres_ext.h45
-rw-r--r--netware/pwd.c86
-rw-r--r--netware/pwd.h54
-rw-r--r--netware/sendmail_nw.h17
-rwxr-xr-xnetware/setbuild.bat19
-rw-r--r--netware/start.c119
-rw-r--r--netware/sys/stat.h147
-rw-r--r--netware/sysexits.h114
-rw-r--r--netware/time_nw.c246
-rw-r--r--netware/time_nw.h57
-rw-r--r--netware/tsrm.mak109
-rw-r--r--netware/wfile.c17
-rw-r--r--netware/wfile.h16
-rw-r--r--netware/zend.mak158
-rw-r--r--pear/Archive/Tar.php1601
-rw-r--r--pear/Archive/docs/Tar.txt424
-rw-r--r--pear/CODING_STANDARDS8
-rw-r--r--pear/Console/Getopt.php251
-rw-r--r--pear/Console/tests/001-getopt.phpt68
-rw-r--r--pear/Makefile.frag22
-rw-r--r--pear/OS/Guess.php265
-rw-r--r--pear/PEAR.php975
-rw-r--r--pear/PEAR/Autoloader.php208
-rw-r--r--pear/PEAR/Builder.php392
-rw-r--r--pear/PEAR/Command.php398
-rw-r--r--pear/PEAR/Command/Auth.php155
-rw-r--r--pear/PEAR/Command/Build.php89
-rw-r--r--pear/PEAR/Command/Common.php249
-rw-r--r--pear/PEAR/Command/Config.php225
-rw-r--r--pear/PEAR/Command/Install.php464
-rw-r--r--pear/PEAR/Command/Mirror.php101
-rw-r--r--pear/PEAR/Command/Package.php722
-rw-r--r--pear/PEAR/Command/Registry.php351
-rw-r--r--pear/PEAR/Command/Remote.php435
-rw-r--r--pear/PEAR/Common.php2040
-rw-r--r--pear/PEAR/Config.php1169
-rw-r--r--pear/PEAR/Dependency.php486
-rw-r--r--pear/PEAR/DependencyDB.php348
-rw-r--r--pear/PEAR/Downloader.php672
-rw-r--r--pear/PEAR/ErrorStack.php970
-rw-r--r--pear/PEAR/Exception.php222
-rw-r--r--pear/PEAR/Frontend/CLI.php509
-rw-r--r--pear/PEAR/Installer.php1046
-rw-r--r--pear/PEAR/Packager.php165
-rw-r--r--pear/PEAR/Registry.php533
-rw-r--r--pear/PEAR/Remote.php394
-rw-r--r--pear/README18
-rw-r--r--pear/System.php540
-rw-r--r--pear/catalog1
-rw-r--r--pear/docs/Archive_Tar.txt424
-rw-r--r--pear/docs/rfc01_PEAR_pecl-binaries.txt88
-rw-r--r--pear/docs/rfc01_PEAR_subpackages.txt65
-rwxr-xr-xpear/go-pear-list.php21
-rw-r--r--pear/go-pear.bat4
-rw-r--r--pear/install-pear.php137
-rw-r--r--pear/install-pear.txt11
-rw-r--r--pear/package-Archive_Tar.xml85
-rw-r--r--pear/package-Console_Getopt.xml80
-rw-r--r--pear/package-PEAR.xml169
-rw-r--r--pear/package.dtd110
-rw-r--r--pear/packages/XML_RPC-1.1.0.tarbin52224 -> 0 bytes
-rwxr-xr-xpear/scripts/pear.bat69
-rw-r--r--pear/scripts/pear.sh28
-rw-r--r--pear/scripts/pearcmd.php311
-rw-r--r--pear/scripts/pearwin.php233
-rw-r--r--pear/template.spec64
-rw-r--r--pear/tests/PEAR_ErrorStack/Error_Stack_TestCase_getErrorMessage.php142
-rw-r--r--pear/tests/PEAR_ErrorStack/Error_Stack_TestCase_getErrorMessageTemplate.php88
-rw-r--r--pear/tests/PEAR_ErrorStack/Error_Stack_TestCase_getErrors.php135
-rw-r--r--pear/tests/PEAR_ErrorStack/Error_Stack_TestCase_pushpop.php367
-rw-r--r--pear/tests/PEAR_ErrorStack/Error_Stack_TestCase_pushpopcallback.php320
-rw-r--r--pear/tests/PEAR_ErrorStack/Error_Stack_TestCase_pushpopstatic.php327
-rw-r--r--pear/tests/PEAR_ErrorStack/Error_Stack_TestCase_singleton.php93
-rw-r--r--pear/tests/PEAR_ErrorStack/Error_Stack_TestCase_staticGetErrors.php225
-rw-r--r--pear/tests/PEAR_ErrorStack/HTML_TestListener.php64
-rw-r--r--pear/tests/PEAR_ErrorStack/TestUnit.php55
-rw-r--r--pear/tests/PEAR_ErrorStack/base_regression.php550
-rw-r--r--pear/tests/PEAR_ErrorStack/stylesheet.css65
-rw-r--r--pear/tests/PEAR_ErrorStack/testsuite.php152
-rw-r--r--pear/tests/PEAR_test_mock_pearweb.php.inc234
-rw-r--r--pear/tests/common_sortPkgDeps1_package.xml38
-rw-r--r--pear/tests/common_sortPkgDeps2_package.xml39
-rw-r--r--pear/tests/common_sortPkgDeps3_package.xml39
-rw-r--r--pear/tests/common_sortPkgDeps4_package.xml38
-rw-r--r--pear/tests/common_sortPkgDeps5_package.xml38
-rw-r--r--pear/tests/common_sortPkgDeps6_package.xml35
-rw-r--r--pear/tests/depnoreleases-1.0.tgzbin711 -> 0 bytes
-rw-r--r--pear/tests/depunstable-1.0.tgzbin718 -> 0 bytes
-rw-r--r--pear/tests/dirtree/multiplepackages/pkg1file.php0
-rw-r--r--pear/tests/dirtree/multiplepackages/pkg2file.php0
-rw-r--r--pear/tests/dirtree/nestedroot/emptydir/fakefile1.php0
-rw-r--r--pear/tests/dirtree/nestedroot/emptydir/nesteddir/nestedfile.php0
-rw-r--r--pear/tests/dirtree/nestedroot/rootfile.php0
-rw-r--r--pear/tests/dirtree/package-fail.xml42
-rw-r--r--pear/tests/dirtree/package.xml36
-rw-r--r--pear/tests/dirtree/package2.xml41
-rw-r--r--pear/tests/dirtree/pkg1-1.0.tgzbin560 -> 0 bytes
-rw-r--r--pear/tests/dirtree/pkg1/randomfile.php0
-rw-r--r--pear/tests/dirtree/pkg2-1.0.tgzbin608 -> 0 bytes
-rw-r--r--pear/tests/download_test.config.inc2159
-rw-r--r--pear/tests/download_test_classes.php.inc404
-rw-r--r--pear/tests/merge.input1
-rw-r--r--pear/tests/merge2.input1
-rw-r--r--pear/tests/package-PEARtests.xml176
-rw-r--r--pear/tests/pear1.phpt90
-rw-r--r--pear/tests/pear2.phpt850
-rw-r--r--pear/tests/pear_autoloader.phpt81
-rw-r--r--pear/tests/pear_channelfile.phpt1545
-rw-r--r--pear/tests/pear_common_analyzeSC.phpt165
-rw-r--r--pear/tests/pear_common_buildProvidesArray.phpt152
-rw-r--r--pear/tests/pear_common_downloadHttp.phpt214
-rw-r--r--pear/tests/pear_common_infoFromString.phpt1752
-rw-r--r--pear/tests/pear_common_sortPkgDeps.phpt73
-rw-r--r--pear/tests/pear_common_validPackageVersion.phpt81
-rw-r--r--pear/tests/pear_config.phpt304
-rw-r--r--pear/tests/pear_config_1.1.phpt395
-rw-r--r--pear/tests/pear_dependency_checkExtension.phpt260
-rw-r--r--pear/tests/pear_dependency_checkPackage.phpt267
-rw-r--r--pear/tests/pear_dependency_checkPackageUninstall.phpt176
-rw-r--r--pear/tests/pear_downloader_invalid.phpt379
-rw-r--r--pear/tests/pear_downloader_new.phpt578
-rw-r--r--pear/tests/pear_downloader_old.phpt609
-rw-r--r--pear/tests/pear_error.phpt156
-rw-r--r--pear/tests/pear_error2.phpt27
-rw-r--r--pear/tests/pear_error3.phpt58
-rw-r--r--pear/tests/pear_error4.phpt108
-rw-r--r--pear/tests/pear_installer1.phpt213
-rw-r--r--pear/tests/pear_installer2.phpt398
-rw-r--r--pear/tests/pear_installer3.phpt415
-rw-r--r--pear/tests/pear_installer4.phpt266
-rw-r--r--pear/tests/pear_installer5.phpt224
-rw-r--r--pear/tests/pear_installer_installFile_channels.phpt447
-rw-r--r--pear/tests/pear_installer_install_channels.phpt214
-rw-r--r--pear/tests/pear_packager.phpt396
-rw-r--r--pear/tests/pear_registry.phpt140
-rw-r--r--pear/tests/pear_registry_1.1.phpt294
-rw-r--r--pear/tests/pear_registry_inc.php.inc74
-rw-r--r--pear/tests/pear_system.phpt110
-rw-r--r--pear/tests/php.ini2
-rw-r--r--pear/tests/php_dump.php.inc57
-rw-r--r--pear/tests/pkg1-1.1.tgzbin700 -> 0 bytes
-rw-r--r--pear/tests/pkg1-2.0b1.tgzbin703 -> 0 bytes
-rw-r--r--pear/tests/pkg2-1.1.tgzbin704 -> 0 bytes
-rw-r--r--pear/tests/pkg3-1.1.tgzbin714 -> 0 bytes
-rw-r--r--pear/tests/pkg3-1.4.tgzbin734 -> 0 bytes
-rw-r--r--pear/tests/pkg4-1.1.tgzbin702 -> 0 bytes
-rw-r--r--pear/tests/pkg4AndAHalf-1.3.tgzbin681 -> 0 bytes
-rw-r--r--pear/tests/pkg5-1.1.tgzbin706 -> 0 bytes
-rw-r--r--pear/tests/stabilitytoolow-0.3.tgzbin711 -> 0 bytes
-rw-r--r--pear/tests/stabilitytoolow-0.5.tgzbin713 -> 0 bytes
-rw-r--r--pear/tests/stabilitytoolow-0.6beta.tgzbin714 -> 0 bytes
-rw-r--r--pear/tests/stabilitytoolow-1.0b1.tgzbin715 -> 0 bytes
-rw-r--r--pear/tests/stabilitytoolow-2.0a1.tgzbin718 -> 0 bytes
-rw-r--r--pear/tests/stabilitytoolow-2.0b1.tgzbin713 -> 0 bytes
-rw-r--r--pear/tests/stabilitytoolow-2.0dev.tgzbin713 -> 0 bytes
-rw-r--r--pear/tests/stabilitytoolow-3.0dev.tgzbin716 -> 0 bytes
-rw-r--r--pear/tests/system.input1
-rw-r--r--pear/tests/test-pkg6/conflictpackage.xml35
-rw-r--r--pear/tests/test-pkg6/conflictpackage2.xml36
-rw-r--r--pear/tests/test-pkg6/goompness/Mopreeb.php11
-rw-r--r--pear/tests/test-pkg6/goompness/oggbrzitzkee.php11
-rw-r--r--pear/tests/test-pkg6/goompness/test.dat0
-rw-r--r--pear/tests/test-pkg6/invalidtgz.tgz35
-rw-r--r--pear/tests/test-pkg6/nopackagexml.tgzbin272 -> 0 bytes
-rw-r--r--pear/tests/test-pkg6/package.xml35
-rw-r--r--pear/tests/test-pkg6/package2.xml36
-rw-r--r--pear/tests/test-pkg6/package2_invalid.xml35
-rw-r--r--pear/tests/test-pkg6/pkg6-1.1.tgzbin673 -> 0 bytes
-rw-r--r--pear/tests/test-pkg6/pkg6-2.0b1.tgzbin725 -> 0 bytes
-rw-r--r--pear/tests/test-pkg6/zoorb.php11
-rw-r--r--pear/tests/testdownload.tgzbin41655 -> 0 bytes
-rw-r--r--pear/tests/toonew.conf2
-rw-r--r--pear/tests/user.input1
-rw-r--r--pear/tests/user2.input1
-rw-r--r--pear/tests/user3.input1
-rw-r--r--php.gifbin3872 -> 0 bytes
-rw-r--r--php.ini-dist1197
-rw-r--r--php.ini-recommended1255
-rw-r--r--php5.spec.in48
-rw-r--r--regex/COPYRIGHT20
-rw-r--r--regex/README32
-rw-r--r--regex/WHATSNEW92
-rw-r--r--regex/cclass.h30
-rw-r--r--regex/cname.h102
-rw-r--r--regex/debug.c242
-rw-r--r--regex/debug.ih14
-rw-r--r--regex/engine.c1019
-rw-r--r--regex/engine.ih35
-rw-r--r--regex/main.c510
-rw-r--r--regex/main.ih19
-rw-r--r--regex/mkh76
-rw-r--r--regex/regcomp.c1608
-rw-r--r--regex/regcomp.ih53
-rw-r--r--regex/regerror.c126
-rw-r--r--regex/regerror.ih12
-rw-r--r--regex/regex.3502
-rw-r--r--regex/regex.7233
-rw-r--r--regex/regex.dsp106
-rw-r--r--regex/regex.dsw29
-rw-r--r--regex/regex.h83
-rw-r--r--regex/regex.mak304
-rw-r--r--regex/regex2.h140
-rw-r--r--regex/regex_extra.h23
-rw-r--r--regex/regexec.c138
-rw-r--r--regex/regfree.c37
-rw-r--r--regex/split.c316
-rw-r--r--regex/tests475
-rw-r--r--regex/utils.h25
-rw-r--r--run-tests-config.php74
-rwxr-xr-xrun-tests.php1187
-rw-r--r--run-tests2.php1573
-rw-r--r--sapi/aolserver/CREDITS2
-rw-r--r--sapi/aolserver/README69
-rw-r--r--sapi/aolserver/aolserver.c616
-rw-r--r--sapi/aolserver/config.m433
-rw-r--r--sapi/aolserver/config.w3216
-rw-r--r--sapi/aolserver/php.sym2
-rw-r--r--sapi/aolserver/php5aolserver.dsp135
-rw-r--r--sapi/apache/CREDITS3
-rw-r--r--sapi/apache/apMakefile.libdir4
-rw-r--r--sapi/apache/apMakefile.tmpl77
-rw-r--r--sapi/apache/config.m4272
-rw-r--r--sapi/apache/config.w3224
-rw-r--r--sapi/apache/libphp5.module.in11
-rw-r--r--sapi/apache/libpre.c55
-rw-r--r--sapi/apache/mod_php5.c982
-rw-r--r--sapi/apache/mod_php5.exp1
-rw-r--r--sapi/apache/mod_php5.h54
-rw-r--r--sapi/apache/php.sym1
-rw-r--r--sapi/apache/php5apache.dsp151
-rw-r--r--sapi/apache/php_apache.c546
-rw-r--r--sapi/apache/php_apache_http.h70
-rw-r--r--sapi/apache/sapi_apache.c74
-rw-r--r--sapi/apache2filter/CREDITS2
-rw-r--r--sapi/apache2filter/EXPERIMENTAL5
-rw-r--r--sapi/apache2filter/README71
-rw-r--r--sapi/apache2filter/apache_config.c230
-rw-r--r--sapi/apache2filter/config.m4130
-rw-r--r--sapi/apache2filter/php.sym1
-rw-r--r--sapi/apache2filter/php_apache.h72
-rw-r--r--sapi/apache2filter/php_functions.c393
-rw-r--r--sapi/apache2filter/sapi_apache2.c730
-rw-r--r--sapi/apache2handler/CREDITS2
-rw-r--r--sapi/apache2handler/EXPERIMENTAL5
-rw-r--r--sapi/apache2handler/README76
-rw-r--r--sapi/apache2handler/apache_config.c212
-rw-r--r--sapi/apache2handler/config.m4129
-rw-r--r--sapi/apache2handler/config.w3218
-rw-r--r--sapi/apache2handler/mod_php5.c45
-rw-r--r--sapi/apache2handler/php.sym1
-rw-r--r--sapi/apache2handler/php5apache2.dsp146
-rw-r--r--sapi/apache2handler/php_apache.h84
-rw-r--r--sapi/apache2handler/php_functions.c514
-rw-r--r--sapi/apache2handler/sapi_apache2.c594
-rw-r--r--sapi/apache_hooks/CREDITS2
-rw-r--r--sapi/apache_hooks/README206
-rw-r--r--sapi/apache_hooks/apMakefile.libdir4
-rw-r--r--sapi/apache_hooks/apMakefile.tmpl77
-rw-r--r--sapi/apache_hooks/config.m4242
-rw-r--r--sapi/apache_hooks/config.w3221
-rw-r--r--sapi/apache_hooks/libphp5.module.in11
-rw-r--r--sapi/apache_hooks/mod_php5.c1478
-rw-r--r--sapi/apache_hooks/mod_php5.exp1
-rw-r--r--sapi/apache_hooks/mod_php5.h81
-rw-r--r--sapi/apache_hooks/php.sym1
-rwxr-xr-xsapi/apache_hooks/php5apache_hooks.dsp151
-rw-r--r--sapi/apache_hooks/php_apache.c1954
-rw-r--r--sapi/apache_hooks/php_apache_http.h44
-rw-r--r--sapi/apache_hooks/sapi_apache.c136
-rw-r--r--sapi/caudium/CREDITS2
-rw-r--r--sapi/caudium/README16
-rw-r--r--sapi/caudium/TODO30
-rw-r--r--sapi/caudium/caudium.c791
-rw-r--r--sapi/caudium/config.m499
-rw-r--r--sapi/cgi/CREDITS2
-rw-r--r--sapi/cgi/Makefile.frag2
-rw-r--r--sapi/cgi/README.FastCGI146
-rw-r--r--sapi/cgi/cgi_main.c1683
-rw-r--r--sapi/cgi/config.w3225
-rw-r--r--sapi/cgi/config9.m4172
-rw-r--r--sapi/cgi/getopt.c154
-rw-r--r--sapi/cgi/libfcgi/LICENSE.TERMS28
-rw-r--r--sapi/cgi/libfcgi/acinclude.m4389
-rw-r--r--sapi/cgi/libfcgi/fcgi_stdio.c801
-rw-r--r--sapi/cgi/libfcgi/fcgiapp.c2323
-rw-r--r--sapi/cgi/libfcgi/include/fastcgi.h136
-rw-r--r--sapi/cgi/libfcgi/include/fcgi_config.h7
-rw-r--r--sapi/cgi/libfcgi/include/fcgi_config_win32.h108
-rw-r--r--sapi/cgi/libfcgi/include/fcgi_config_x86.h103
-rw-r--r--sapi/cgi/libfcgi/include/fcgi_stdio.h249
-rw-r--r--sapi/cgi/libfcgi/include/fcgiapp.h640
-rw-r--r--sapi/cgi/libfcgi/include/fcgiappmisc.h50
-rw-r--r--sapi/cgi/libfcgi/include/fcgimisc.h38
-rw-r--r--sapi/cgi/libfcgi/include/fcgio.h147
-rw-r--r--sapi/cgi/libfcgi/include/fcgios.h140
-rw-r--r--sapi/cgi/libfcgi/libfcgi.m477
-rw-r--r--sapi/cgi/libfcgi/os_unix.c1273
-rw-r--r--sapi/cgi/libfcgi/os_win32.c2067
-rw-r--r--sapi/cgi/libfcgi/strerror.c91
-rw-r--r--sapi/cgi/php.sym0
-rw-r--r--sapi/cgi/php_getopt.h30
-rw-r--r--sapi/cli/CREDITS2
-rw-r--r--sapi/cli/Makefile.frag11
-rw-r--r--sapi/cli/README20
-rw-r--r--sapi/cli/TODO2
-rw-r--r--sapi/cli/cli_win32.c2
-rw-r--r--sapi/cli/config.m440
-rw-r--r--sapi/cli/config.w3218
-rw-r--r--sapi/cli/getopt.c156
-rw-r--r--sapi/cli/php.1.in392
-rw-r--r--sapi/cli/php_cli.c1075
-rw-r--r--sapi/cli/php_getopt.h32
-rw-r--r--sapi/continuity/CREDITS2
-rw-r--r--sapi/continuity/capi.c507
-rw-r--r--sapi/continuity/config.m435
-rw-r--r--sapi/embed/CREDITS2
-rw-r--r--sapi/embed/EXPERIMENTAL5
-rw-r--r--sapi/embed/config.m432
-rw-r--r--sapi/embed/config.w328
-rw-r--r--sapi/embed/php5embed.dsp100
-rw-r--r--sapi/embed/php_embed.c225
-rw-r--r--sapi/embed/php_embed.h61
-rw-r--r--sapi/isapi/CREDITS2
-rw-r--r--sapi/isapi/config.m427
-rw-r--r--sapi/isapi/config.w3213
-rw-r--r--sapi/isapi/php.sym5
-rw-r--r--sapi/isapi/php5isapi.c952
-rw-r--r--sapi/isapi/php5isapi.def5
-rw-r--r--sapi/isapi/php5isapi.dsp165
-rw-r--r--sapi/isapi/stresstest/getopt.c175
-rw-r--r--sapi/isapi/stresstest/getopt.h12
-rw-r--r--sapi/isapi/stresstest/notes.txt56
-rw-r--r--sapi/isapi/stresstest/stresstest.cpp936
-rw-r--r--sapi/isapi/stresstest/stresstest.dsp108
-rw-r--r--sapi/milter/CREDITS2
-rw-r--r--sapi/milter/EXPERIMENTAL5
-rw-r--r--sapi/milter/Makefile.frag2
-rw-r--r--sapi/milter/TODO5
-rw-r--r--sapi/milter/config.m439
-rw-r--r--sapi/milter/getopt.c173
-rw-r--r--sapi/milter/milter.php132
-rw-r--r--sapi/milter/php_getopt.h7
-rw-r--r--sapi/milter/php_milter.c1139
-rw-r--r--sapi/milter/php_milter.h31
-rw-r--r--sapi/nsapi/CREDITS2
-rw-r--r--sapi/nsapi/config.m445
-rw-r--r--sapi/nsapi/config.w3219
-rw-r--r--sapi/nsapi/nsapi-readme.txt154
-rw-r--r--sapi/nsapi/nsapi.c1013
-rw-r--r--sapi/nsapi/php5nsapi.dsp135
-rw-r--r--sapi/phttpd/CREDITS2
-rw-r--r--sapi/phttpd/README5
-rw-r--r--sapi/phttpd/config.m425
-rw-r--r--sapi/phttpd/php.sym4
-rw-r--r--sapi/phttpd/php_phttpd.h24
-rw-r--r--sapi/phttpd/phttpd.c305
-rw-r--r--sapi/pi3web/CREDITS2
-rw-r--r--sapi/pi3web/README50
-rw-r--r--sapi/pi3web/config.m435
-rw-r--r--sapi/pi3web/config.w3216
-rw-r--r--sapi/pi3web/php.sym0
-rw-r--r--sapi/pi3web/php5pi3web.dsp136
-rw-r--r--sapi/pi3web/pi3web_sapi.c483
-rw-r--r--sapi/pi3web/pi3web_sapi.h95
-rw-r--r--sapi/roxen/README18
-rw-r--r--sapi/roxen/TODO33
-rw-r--r--sapi/roxen/config.m460
-rw-r--r--sapi/roxen/roxen.c725
-rw-r--r--sapi/tests/test001.phpt16
-rw-r--r--sapi/tests/test002.phpt22
-rw-r--r--sapi/tests/test003.phpt21
-rw-r--r--sapi/tests/test004.phpt26
-rw-r--r--sapi/tests/test005.phpt27
-rw-r--r--sapi/tests/test006.phpt73
-rw-r--r--sapi/tests/test007.phpt46
-rw-r--r--sapi/thttpd/CREDITS2
-rw-r--r--sapi/thttpd/README85
-rw-r--r--sapi/thttpd/config.m439
-rw-r--r--sapi/thttpd/php.sym3
-rw-r--r--sapi/thttpd/php_thttpd.h35
-rw-r--r--sapi/thttpd/stub.c0
-rw-r--r--sapi/thttpd/thttpd.c768
-rw-r--r--sapi/thttpd/thttpd_patch2377
-rw-r--r--sapi/tux/CREDITS2
-rw-r--r--sapi/tux/README86
-rw-r--r--sapi/tux/config.m418
-rw-r--r--sapi/tux/php.sym2
-rw-r--r--sapi/tux/php_tux.c453
-rw-r--r--sapi/webjames/CREDITS2
-rw-r--r--sapi/webjames/README28
-rw-r--r--sapi/webjames/config.m420
-rw-r--r--sapi/webjames/php_webjames.h28
-rw-r--r--sapi/webjames/webjames.c305
-rw-r--r--scripts/Makefile.frag74
-rwxr-xr-xscripts/apache/apconf-conv.sh24
-rwxr-xr-xscripts/apache/aphtaccess-conv.sh24
-rw-r--r--scripts/apache/conffix.awk23
-rw-r--r--scripts/apache/htaccessfix.awk23
-rwxr-xr-xscripts/dev/conv_proto30
-rwxr-xr-xscripts/dev/conv_z_macros61
-rwxr-xr-xscripts/dev/credits26
-rw-r--r--scripts/dev/extern_c.php45
-rwxr-xr-xscripts/dev/search_underscores.php97
-rw-r--r--scripts/php-config.in32
-rwxr-xr-xscripts/phpextdist27
-rw-r--r--scripts/phpize.in157
-rw-r--r--scripts/phpize.m4116
-rwxr-xr-xsnapshot7
-rw-r--r--stamp-h.in1
-rw-r--r--stub.c1
-rw-r--r--tests/basic/001.phpt6
-rw-r--r--tests/basic/002.phpt11
-rw-r--r--tests/basic/003.phpt14
-rw-r--r--tests/basic/004.phpt12
-rw-r--r--tests/basic/005.phpt12
-rw-r--r--tests/basic/006.phpt6
-rw-r--r--tests/basic/007.phpt6
-rw-r--r--tests/basic/008.phpt6
-rw-r--r--tests/basic/009.phpt6
-rw-r--r--tests/basic/010.phpt6
-rw-r--r--tests/basic/011.phpt27
-rw-r--r--tests/basic/012.phpt28
-rw-r--r--tests/basic/bug20539.phpt10
-rw-r--r--tests/bin-info.inc21
-rw-r--r--tests/classes/__call_001.phpt42
-rwxr-xr-xtests/classes/__call_002.phpt15
-rw-r--r--tests/classes/__set__get_001.phpt72
-rwxr-xr-xtests/classes/__set__get_002.phpt14
-rwxr-xr-xtests/classes/__set__get_003.phpt14
-rw-r--r--tests/classes/__set_data_corrupt.phpt29
-rw-r--r--tests/classes/abstract.phpt30
-rw-r--r--tests/classes/abstract_class.phpt29
-rw-r--r--tests/classes/abstract_derived.phpt20
-rw-r--r--tests/classes/abstract_final.phpt16
-rw-r--r--tests/classes/abstract_inherit.phpt22
-rw-r--r--tests/classes/abstract_not_declared.phpt15
-rw-r--r--tests/classes/abstract_redeclare.phpt22
-rw-r--r--tests/classes/abstract_static.phpt26
-rw-r--r--tests/classes/array_access_001.phpt198
-rw-r--r--tests/classes/array_access_002.phpt198
-rw-r--r--tests/classes/array_access_003.phpt61
-rw-r--r--tests/classes/array_access_004.phpt58
-rwxr-xr-xtests/classes/array_access_005.phpt58
-rw-r--r--tests/classes/array_access_006.phpt37
-rwxr-xr-xtests/classes/array_access_007.phpt57
-rw-r--r--tests/classes/assign_op_property_001.phpt31
-rwxr-xr-xtests/classes/autoload_001.phpt24
-rwxr-xr-xtests/classes/autoload_002.phpt27
-rwxr-xr-xtests/classes/autoload_003.phpt25
-rwxr-xr-xtests/classes/autoload_004.phpt28
-rwxr-xr-xtests/classes/autoload_005.phpt45
-rwxr-xr-xtests/classes/autoload_derived.p5c6
-rwxr-xr-xtests/classes/autoload_root.p5c10
-rw-r--r--tests/classes/bug23951.phpt44
-rw-r--r--tests/classes/bug24399.phpt12
-rw-r--r--tests/classes/bug24445.phpt12
-rw-r--r--tests/classes/bug26737.phpt22
-rw-r--r--tests/classes/bug27468.phpt15
-rw-r--r--tests/classes/bug27504.phpt24
-rwxr-xr-xtests/classes/class_abstract.phpt28
-rw-r--r--tests/classes/class_example.phpt85
-rwxr-xr-xtests/classes/class_final.phpt22
-rwxr-xr-xtests/classes/class_stdclass.phpt14
-rwxr-xr-xtests/classes/clone_001.phpt43
-rwxr-xr-xtests/classes/clone_002.phpt45
-rwxr-xr-xtests/classes/clone_003.phpt58
-rwxr-xr-xtests/classes/clone_004.phpt82
-rwxr-xr-xtests/classes/clone_005.phpt19
-rwxr-xr-xtests/classes/clone_006.phpt39
-rw-r--r--tests/classes/constants_scope_001.phpt38
-rw-r--r--tests/classes/ctor_dtor.phpt40
-rw-r--r--tests/classes/ctor_dtor_inheritance.phpt99
-rwxr-xr-xtests/classes/ctor_failure.phpt33
-rw-r--r--tests/classes/dereferencing_001.phpt35
-rwxr-xr-xtests/classes/destructor_and_echo.phpt24
-rwxr-xr-xtests/classes/destructor_and_globals.phpt56
-rwxr-xr-xtests/classes/destructor_and_references.phpt26
-rwxr-xr-xtests/classes/destructor_inheritance.phpt29
-rwxr-xr-xtests/classes/destructor_visibility_001.phpt24
-rwxr-xr-xtests/classes/destructor_visibility_002.phpt24
-rwxr-xr-xtests/classes/destructor_visibility_003.phpt28
-rw-r--r--tests/classes/factory_001.phpt35
-rwxr-xr-xtests/classes/factory_and_singleton_001.phpt101
-rwxr-xr-xtests/classes/factory_and_singleton_002.phpt100
-rwxr-xr-xtests/classes/factory_and_singleton_003.phpt18
-rwxr-xr-xtests/classes/factory_and_singleton_004.phpt18
-rwxr-xr-xtests/classes/factory_and_singleton_005.phpt19
-rwxr-xr-xtests/classes/factory_and_singleton_006.phpt20
-rwxr-xr-xtests/classes/factory_and_singleton_007.phpt20
-rwxr-xr-xtests/classes/factory_and_singleton_008.phpt20
-rwxr-xr-xtests/classes/factory_and_singleton_009.phpt21
-rwxr-xr-xtests/classes/factory_and_singleton_010.phpt21
-rw-r--r--tests/classes/final.phpt31
-rw-r--r--tests/classes/final_abstract.phpt16
-rw-r--r--tests/classes/final_redeclare.phpt25
-rw-r--r--tests/classes/incdec_property_001.phpt31
-rw-r--r--tests/classes/incdec_property_002.phpt31
-rw-r--r--tests/classes/incdec_property_003.phpt31
-rw-r--r--tests/classes/incdec_property_004.phpt31
-rw-r--r--tests/classes/inheritance.phpt56
-rwxr-xr-xtests/classes/inheritance_002.phpt71
-rwxr-xr-xtests/classes/interface_and_extends.phpt26
-rw-r--r--tests/classes/interface_class.phpt14
-rwxr-xr-xtests/classes/interface_construct.phpt24
-rw-r--r--tests/classes/interface_doubled.phpt201
-rw-r--r--tests/classes/interface_implemented.phpt103
-rw-r--r--tests/classes/interface_instantiate.phpt16
-rw-r--r--tests/classes/interface_member.phpt13
-rw-r--r--tests/classes/interface_method.phpt15
-rw-r--r--tests/classes/interface_method_final.phpt15
-rw-r--r--tests/classes/interface_method_private.phpt15
-rw-r--r--tests/classes/interface_must_be_implemented.phpt17
-rwxr-xr-xtests/classes/interface_optional_arg.phpt27
-rw-r--r--tests/classes/interfaces_001.phpt26
-rw-r--r--tests/classes/interfaces_002.phpt29
-rwxr-xr-xtests/classes/iterators_001.phpt201
-rwxr-xr-xtests/classes/iterators_002.phpt114
-rwxr-xr-xtests/classes/iterators_003.phpt116
-rwxr-xr-xtests/classes/iterators_004.phpt62
-rwxr-xr-xtests/classes/iterators_005.phpt20
-rw-r--r--tests/classes/iterators_006.phpt87
-rw-r--r--tests/classes/object_reference_001.phpt27
-rw-r--r--tests/classes/private_001.phpt26
-rw-r--r--tests/classes/private_002.phpt35
-rw-r--r--tests/classes/private_003.phpt36
-rw-r--r--tests/classes/private_003b.phpt37
-rw-r--r--tests/classes/private_004.phpt32
-rw-r--r--tests/classes/private_004b.phpt35
-rw-r--r--tests/classes/private_005.phpt32
-rw-r--r--tests/classes/private_005b.phpt35
-rw-r--r--tests/classes/private_006.phpt41
-rw-r--r--tests/classes/private_006b.phpt41
-rw-r--r--tests/classes/private_007.phpt30
-rw-r--r--tests/classes/private_007b.phpt31
-rwxr-xr-xtests/classes/private_members.phpt103
-rwxr-xr-xtests/classes/private_redeclare.phpt38
-rw-r--r--tests/classes/protected_001.phpt26
-rw-r--r--tests/classes/protected_001b.phpt27
-rw-r--r--tests/classes/protected_002.phpt35
-rw-r--r--tests/classes/singleton_001.phpt37
-rw-r--r--tests/classes/static_mix_1.phpt26
-rw-r--r--tests/classes/static_mix_2.phpt27
-rwxr-xr-xtests/classes/static_properties_001.phpt27
-rwxr-xr-xtests/classes/this.phpt54
-rw-r--r--tests/classes/tostring.phpt86
-rw-r--r--tests/classes/type_hinting_001.phpt38
-rwxr-xr-xtests/classes/type_hinting_002.phpt17
-rw-r--r--tests/classes/visibility_000a.phpt33
-rw-r--r--tests/classes/visibility_000b.phpt33
-rw-r--r--tests/classes/visibility_000c.phpt33
-rw-r--r--tests/classes/visibility_001a.phpt33
-rw-r--r--tests/classes/visibility_001b.phpt33
-rw-r--r--tests/classes/visibility_001c.phpt33
-rw-r--r--tests/classes/visibility_002a.phpt33
-rw-r--r--tests/classes/visibility_002b.phpt33
-rw-r--r--tests/classes/visibility_002c.phpt33
-rw-r--r--tests/classes/visibility_003a.phpt33
-rw-r--r--tests/classes/visibility_003b.phpt33
-rw-r--r--tests/classes/visibility_003c.phpt33
-rw-r--r--tests/classes/visibility_004a.phpt33
-rw-r--r--tests/classes/visibility_004b.phpt33
-rw-r--r--tests/classes/visibility_004c.phpt33
-rwxr-xr-xtests/classes/visibility_005.phpt58
-rw-r--r--tests/foo5
-rw-r--r--tests/foo23
-rw-r--r--tests/foo343
-rw-r--r--tests/foo441
-rw-r--r--tests/func/001.phpt6
-rw-r--r--tests/func/002.phpt21
-rw-r--r--tests/func/003.phpt291
-rw-r--r--tests/func/004.phpt65
-rw-r--r--tests/func/005.phpt19
-rw-r--r--tests/func/005a.phpt28
-rw-r--r--tests/func/006.phpt26
-rw-r--r--tests/func/007.phpt22
-rw-r--r--tests/func/008.phpt16
-rw-r--r--tests/func/009.phpt16
-rw-r--r--tests/lang/001.phpt6
-rw-r--r--tests/lang/002.phpt12
-rw-r--r--tests/lang/003.phpt19
-rw-r--r--tests/lang/004.phpt13
-rw-r--r--tests/lang/005.phpt16
-rw-r--r--tests/lang/006.phpt23
-rw-r--r--tests/lang/007.phpt27
-rw-r--r--tests/lang/008.phpt18
-rw-r--r--tests/lang/009.phpt11
-rw-r--r--tests/lang/010.phpt13
-rw-r--r--tests/lang/011.phpt23
-rw-r--r--tests/lang/012.phpt18
-rw-r--r--tests/lang/013.phpt10
-rw-r--r--tests/lang/014.phpt13
-rwxr-xr-xtests/lang/015.inc3
-rw-r--r--tests/lang/015.phpt8
-rwxr-xr-xtests/lang/016.inc5
-rw-r--r--tests/lang/016.phpt9
-rw-r--r--tests/lang/017.phpt18
-rw-r--r--tests/lang/018.phpt34
-rw-r--r--tests/lang/019.phpt36
-rw-r--r--tests/lang/020.phpt76
-rw-r--r--tests/lang/021.phpt42
-rw-r--r--tests/lang/022.phpt63
-rwxr-xr-xtests/lang/023-1.inc356
-rwxr-xr-xtests/lang/023-2.inc6
-rw-r--r--tests/lang/023.phpt254
-rw-r--r--tests/lang/024.phpt11623
-rw-r--r--tests/lang/025.phpt531
-rw-r--r--tests/lang/026.phpt6
-rw-r--r--tests/lang/027.phpt12
-rw-r--r--tests/lang/028.phpt1058
-rw-r--r--tests/lang/030.phpt36
-rw-r--r--tests/lang/031.phpt70
-rw-r--r--tests/lang/032.phpt36
-rw-r--r--tests/lang/033.phpt53
-rw-r--r--tests/lang/034.phpt18
-rw-r--r--tests/lang/035.phpt38
-rwxr-xr-xtests/lang/036.phpt27
-rwxr-xr-xtests/lang/037.phpt30
-rwxr-xr-xtests/lang/038.phpt41
-rwxr-xr-xtests/lang/039.phpt45
-rw-r--r--tests/lang/bison1.phpt9
-rw-r--r--tests/lang/bug17115.phpt16
-rw-r--r--tests/lang/bug18872.phpt18
-rw-r--r--tests/lang/bug19566.phpt10
-rw-r--r--tests/lang/bug19943.phpt29
-rw-r--r--tests/lang/bug20175.phpt165
-rw-r--r--tests/lang/bug21094.phpt17
-rw-r--r--tests/lang/bug21600.phpt34
-rw-r--r--tests/lang/bug21669.phpt23
-rw-r--r--tests/lang/bug21800.phpt19
-rw-r--r--tests/lang/bug21820.phpt13
-rw-r--r--tests/lang/bug21849.phpt16
-rw-r--r--tests/lang/bug21961.phpt58
-rw-r--r--tests/lang/bug22231.phpt40
-rw-r--r--tests/lang/bug22367.phpt130
-rw-r--r--tests/lang/bug22510.phpt124
-rw-r--r--tests/lang/bug22592.phpt53
-rw-r--r--tests/lang/bug22690.phpt12
-rw-r--r--tests/lang/bug23279.phpt16
-rw-r--r--tests/lang/bug23384.phpt33
-rw-r--r--tests/lang/bug23489.phpt23
-rwxr-xr-xtests/lang/bug23524.phpt29
-rw-r--r--tests/lang/bug23584.phpt13
-rw-r--r--tests/lang/bug23624.phpt12
-rw-r--r--tests/lang/bug23922.phpt20
-rw-r--r--tests/lang/bug24054.phpt24
-rw-r--r--tests/lang/bug24396.phpt19
-rw-r--r--tests/lang/bug24403.phpt20
-rw-r--r--tests/lang/bug24436.phpt15
-rwxr-xr-xtests/lang/bug24499.phpt24
-rw-r--r--tests/lang/bug24573.phpt24
-rwxr-xr-xtests/lang/bug24640.phpt63
-rwxr-xr-xtests/lang/bug24652.phpt31
-rw-r--r--tests/lang/bug24658.phpt56
-rw-r--r--tests/lang/bug24783.phpt13
-rwxr-xr-xtests/lang/bug24908.phpt18
-rw-r--r--tests/lang/bug24926.phpt28
-rw-r--r--tests/lang/bug24951.phpt42
-rwxr-xr-xtests/lang/bug25145.phpt22
-rwxr-xr-xtests/lang/bug25547.phpt30
-rwxr-xr-xtests/lang/bug25652.phpt22
-rwxr-xr-xtests/lang/bug25922.phpt21
-rw-r--r--tests/lang/bug26182.phpt25
-rw-r--r--tests/lang/bug26696.phpt28
-rw-r--r--tests/lang/bug26866.phpt25
-rw-r--r--tests/lang/bug26869.phpt15
-rw-r--r--tests/lang/bug27354.phpt14
-rwxr-xr-xtests/lang/bug27439.phpt74
-rw-r--r--tests/lang/bug27443.phpt8
-rw-r--r--tests/lang/bug27535.phpt28
-rw-r--r--tests/lang/bug28213.phpt10
-rw-r--r--tests/lang/bug28800.phpt17
-rwxr-xr-xtests/lang/bug29566.phpt16
-rwxr-xr-xtests/lang/bug29893.phpt11
-rwxr-xr-xtests/lang/bug29944.phpt20
-rw-r--r--tests/lang/bug7515.phpt36
-rw-r--r--tests/lang/each_binary_safety.phpt13
-rw-r--r--tests/lang/error_2_exception_001.phpt45
-rwxr-xr-xtests/lang/foreach_with_object_001.phpt25
-rw-r--r--tests/lang/foreach_with_references_001.phpt32
-rw-r--r--tests/lang/type_hints_001.phpt26
-rw-r--r--tests/odbc-display.php19
-rw-r--r--tests/odbc-t1.php38
-rw-r--r--tests/odbc-t2.php82
-rw-r--r--tests/odbc-t3.php95
-rw-r--r--tests/odbc-t4.php91
-rw-r--r--tests/odbc-t5.php137
-rw-r--r--tests/quicktester.inc75
-rw-r--r--tests/recurse21
-rw-r--r--tests/run-test/test001.phpt6
-rw-r--r--tests/run-test/test002.phpt18
-rw-r--r--tests/run-test/test003.phpt6
-rw-r--r--tests/run-test/test004.phpt10
-rw-r--r--tests/run-test/test005.phpt32
-rw-r--r--tests/run-test/test006.phpt9
-rw-r--r--tests/run-test/test007.phptbin1191 -> 0 bytes
-rw-r--r--tests/run-test/test008.phpt33
-rw-r--r--tests/run-test/test008a.phpt32
-rw-r--r--tests/run-test/test009.phpt12
-rw-r--r--tests/run.html11
-rw-r--r--tests/run.php17
-rw-r--r--tests/scan_cases28
-rw-r--r--tests/strings/001.phpt207
-rw-r--r--tests/strings/002.phpt83
-rw-r--r--tests/strings/004.phpt22
-rwxr-xr-xtests/strings/bug22592.phpt27
-rw-r--r--tests/strings/bug26703.phpt18
-rw-r--r--tests/test.pl34
-rw-r--r--tests/test_class_inheritance29
-rw-r--r--tests/testarray21
-rw-r--r--tests/testarray.pl5
-rw-r--r--tests/testarray25
-rw-r--r--tests/testarray2.pl3
-rw-r--r--tests/testclassfunc9
-rw-r--r--tests/testcom11
-rw-r--r--tests/testcpdf97
-rw-r--r--tests/testcpdfclock87
-rw-r--r--tests/testdom73
-rw-r--r--tests/testfe18
-rw-r--r--tests/testfunc33
-rw-r--r--tests/testfunc.pl20
-rw-r--r--tests/testfunc219
-rw-r--r--tests/testfunc2.pl22
-rw-r--r--tests/testfuncref10
-rw-r--r--tests/testhyperwave235
-rw-r--r--tests/testinclude5
-rw-r--r--tests/testobj29
-rw-r--r--tests/testpfpro.php39
-rw-r--r--tests/tests.dsp61
-rw-r--r--tests/tests.mak27
-rw-r--r--tests/testscanf.php113
-rw-r--r--tests/testswf120
-rwxr-xr-xwin32/EngineSelect.bat5
-rw-r--r--win32/EngineSelect.dsp85
-rw-r--r--win32/build/Makefile136
-rw-r--r--win32/build/buildconf.js231
-rw-r--r--win32/build/config.w32235
-rw-r--r--win32/build/config.w32.h.in144
-rw-r--r--win32/build/configure.tail6
-rw-r--r--win32/build/confutils.js1496
-rw-r--r--win32/build/cvsclean.js120
-rw-r--r--win32/build/deplister.c60
-rw-r--r--win32/build/mkdist.php407
-rw-r--r--win32/build/php.icobin1718 -> 0 bytes
-rwxr-xr-xwin32/build/registersyslog.php45
-rw-r--r--win32/build/template.rc69
-rwxr-xr-xwin32/build/wsyslog.mc28
-rw-r--r--win32/builddef.bat7
-rw-r--r--win32/crypt_win32.c355
-rw-r--r--win32/crypt_win32.h60
-rw-r--r--win32/flock.c84
-rw-r--r--win32/flock.h11
-rw-r--r--win32/glob.c922
-rw-r--r--win32/glob.h101
-rwxr-xr-xwin32/globals.c51
-rw-r--r--win32/grp.h26
-rw-r--r--win32/install.txt1441
-rw-r--r--win32/installer/README93
-rw-r--r--win32/installer/gen-nsis.php446
-rw-r--r--win32/installer/setini.php87
-rw-r--r--win32/md5crypt.c163
-rw-r--r--win32/md5crypt.h37
-rw-r--r--win32/param.h16
-rw-r--r--win32/php5.dsp134
-rw-r--r--win32/php5.dsw107
-rw-r--r--win32/php5dll.dsp1731
-rw-r--r--win32/php5dllts.dsp2446
-rw-r--r--win32/php5dllts.rc126
-rw-r--r--win32/php5dllts.rc261
-rw-r--r--win32/php5ts.dsp187
-rw-r--r--win32/php5ts.dsw242
-rw-r--r--win32/php5ts.rc126
-rw-r--r--win32/php5ts.rc261
-rw-r--r--win32/php5ts_cli.dsp175
-rw-r--r--win32/php5ts_cli.rc126
-rw-r--r--win32/php5ts_cli.rc261
-rw-r--r--win32/php_modules.dsw521
-rw-r--r--win32/php_registry.h8
-rwxr-xr-xwin32/php_win32_globals.h58
-rw-r--r--win32/pwd.c66
-rw-r--r--win32/pwd.h38
-rw-r--r--win32/pws-php5cgi.reg6
-rw-r--r--win32/pws-php5isapi.reg5
-rw-r--r--win32/readdir.c146
-rw-r--r--win32/readdir.h43
-rw-r--r--win32/registry.c111
-rw-r--r--win32/resource.h15
-rw-r--r--win32/select.c176
-rw-r--r--win32/select.h22
-rw-r--r--win32/sendmail.c953
-rw-r--r--win32/sendmail.h61
-rw-r--r--win32/signal.h16
-rw-r--r--win32/syslog.h78
-rw-r--r--win32/syslog.reg5
-rw-r--r--win32/testsuite.dsp150
-rw-r--r--win32/time.c228
-rw-r--r--win32/time.h43
-rw-r--r--win32/unistd.h4
-rw-r--r--win32/wfile.c17
-rw-r--r--win32/wfile.h16
-rw-r--r--win32/winutil.c33
-rw-r--r--win32/winutil.h21
-rw-r--r--win32/wsyslog.c131
3601 files changed, 0 insertions, 779100 deletions
diff --git a/.gdbinit b/.gdbinit
deleted file mode 100644
index 7c58e86fda..0000000000
--- a/.gdbinit
+++ /dev/null
@@ -1,359 +0,0 @@
-set $zts = 0
-
-define ____executor_globals
- if $zts
- set $eg = ((zend_executor_globals) (*((void ***) tsrm_ls))[executor_globals_id-1])
- else
- set $eg = executor_globals
- end
-end
-
-document ____executor_globals
- portable way of accessing executor_globals
- type "set $zts = 1" if you use --enable-maintainer-zts on your configure line
-end
-
-define dump_bt
- set $t = $arg0
- while $t
- printf "[0x%08x] ", $t
- if $t->function_state.function->common.function_name
- printf "%s() ", $t->function_state.function->common.function_name
- else
- printf "??? "
- end
- if $t->op_array != 0
- printf "%s:%d ", $t->op_array->filename, $t->opline->lineno
- end
- set $t = $t->prev_execute_data
- printf "\n"
- end
-end
-
-document dump_bt
- dumps the current execution stack. usage: dump_bt executor_globals.current_execute_data
-end
-
-define printzv
- set $ind = 1
- ____printzv $arg0 0
-end
-
-document printzv
- prints content of zval
-end
-
-define ____printzv_contents
- ____executor_globals
- set $zvalue = $arg0
-
- if $zvalue.type == 0
- set $typename = "NULL"
- end
- if $zvalue.type == 1
- set $typename = "long"
- end
- if $zvalue.type == 2
- set $typename = "double"
- end
- if $zvalue.type == 3
- set $typename = "string"
- end
- if $zvalue.type == 4
- set $typename = "array"
- end
- if $zvalue.type == 5
- set $typename = "object"
- end
- if $zvalue.type == 6
- set $typename = "bool"
- end
- if $zvalue.type == 7
- set $typename = "resource"
- end
- if $zvalue.type == 8
- set $typename = "constant"
- end
- if $zvalue.type == 9
- set $typename = "const_array"
- end
-
- printf "(refcount=%d) %s: ", $zvalue.refcount, $typename
- if $zvalue.type == 1
- printf "%ld", $zvalue.value.lval
- end
- if $zvalue->type == 2
- printf "%lf", $zvalue.value.dval
- end
- if $zvalue.type == 3
- printf "\"%s\"(%d)", $zvalue.value.str.val, $zvalue.value.str.len
- end
- if $zvalue.type == 4
- if ! $arg1
- printf "{\n"
- set $ind = $ind + 1
- ____print_ht $zvalue.value.ht
- set $ind = $ind - 1
- set $i = $ind
- while $i > 0
- printf " "
- set $i = $i - 1
- end
- printf "}"
- end
- end
- if $zvalue.type == 5
- if ! $arg1
- printf "(prop examination disabled due to a gdb bug)"
- if $zvalue.value.obj.handlers->get_properties
-# set $ht = $zvalue->value.obj.handlers->get_properties($zvalue)
-# printf "{\n"
-# set $ind = $ind + 1
-# ____print_ht $ht
-# set $ind = $ind - 1
-# set $i = $ind
-# while $i > 0
-# printf " "
-# set $i = $i - 1
-# end
-# printf "}"
- end
- end
- end
- if $zvalue.type == 6
- if $zvalue.value.lval
- printf "true"
- else
- printf "false"
- end
- end
- if $zvalue.type == 7
- printf "#%d", $zvalue.value.lval
- end
- printf "\n"
-end
-
-define ____printzv
- ____executor_globals
- set $zvalue = $arg0
-
- printf "[0x%08x] ", $zvalue
-
- if $zvalue == $eg.uninitialized_zval_ptr
- printf "*uninitialized* "
- end
-
- set $zcontents = *(struct _zval_struct *) $zvalue
- if $arg1
- ____printzv_contents $zcontents $arg1
- else
- ____printzv_contents $zcontents 0
- end
-end
-
-define ____print_const_table
- set $ht = $arg0
- set $p = $ht->pListHead
-
- while $p != 0
- set $const = *(zend_constant *) $p->pData
-
- set $i = $ind
- while $i > 0
- printf " "
- set $i = $i - 1
- end
-
- if $p->nKeyLength > 0
- printf "\"%s\" => ", $p->arKey
- else
- printf "%d => ", $p->h
- end
-
- ____printzv_contents $const.value 0
- set $p = $p->pListNext
- end
-end
-
-define print_const_table
- set $ind = 1
- printf "[0x%08x] {\n", $arg0
- ____print_const_table $arg0
- printf "}\n"
-end
-
-define ____print_ht
- set $ht = $arg0
- set $p = $ht->pListHead
-
- while $p != 0
- set $zval = *(struct _zval_struct **)$p->pData
-
- set $i = $ind
- while $i > 0
- printf " "
- set $i = $i - 1
- end
-
- if $p->nKeyLength > 0
- printf "\"%s\" => ", $p->arKey
- else
- printf "%d => ", $p->h
- end
-
- ____printzv $zval 1
- set $p = $p->pListNext
- end
-end
-
-define print_ht
- set $ind = 1
- printf "[0x%08x] {\n", $arg0
- ____print_ht $arg0
- printf "}\n"
-end
-
-document print_ht
- dumps elements of HashTable made of zval
-end
-
-define printzn
- ____executor_globals
- set $ind = 0
- set $znode = $arg0
- if $znode->op_type == 1
- set $optype = "IS_CONST"
- end
- if $znode->op_type == 2
- set $optype = "IS_TMP_VAR"
- end
- if $znode->op_type == 4
- set $optype = "IS_VAR"
- end
- if $znode->op_type == 8
- set $optype = "IS_UNUSED"
- end
-
- printf "[0x%08x] %s", $znode, $optype
-
- if $znode->op_type == 1
- printf ": "
- ____printzv &$znode->u.constant 0
- end
- if $znode->op_type == 2
- printf ": "
- set $tvar = (union _temp_variable *)((char *)$eg.current_execute_data->Ts + $znode->u.var)
- ____printzv ((union _temp_variable *)$tvar)->tmp_var 0
- end
- if $znode->op_type == 4
- printf ": "
- set $tvar = (union _temp_variable *)((char *)$eg.current_execute_data->Ts + $znode->u.var)
- ____printzv *$tvar->var.ptr_ptr 0
- end
- if $znode->op_type == 8
- printf "\n"
- end
-end
-
-document printzn
- print type and content of znode.
- usage: printzn &opline->op1
-end
-
-define printzops
- printf "op1 => "
- printzn &execute_data->opline.op1
- printf "op2 => "
- printzn &execute_data->opline.op2
- printf "result => "
- printzn &execute_data->opline.result
-end
-
-document printzops
- dump operands of the current opline
-end
-
-define zbacktrace
- ____executor_globals
- dump_bt $eg.current_execute_data
-end
-
-document zbacktrace
- prints backtrace.
- This command is almost a short cut for
- > (gdb) ____executor_globals
- > (gdb) dump_bt $eg.current_execute_data
-end
-
-define zmemcheck
- set $p = alloc_globals.head
- set $stat = "?"
- set $total_size = 0
- if $arg0 != 0
- set $not_found = 1
- else
- set $not_found = 0
- end
- printf " block size status file:line\n"
- printf "-------------------------------------------------------------------------------\n"
- while $p
- set $aptr = $p + sizeof(struct _zend_mem_header) + sizeof(align_test)
- if $arg0 == 0 || (void *)$aptr == (void *)$arg0
- if $p->magic == 0x7312f8dc
- set $stat = "OK"
- end
- if $p->magic == 0x99954317
- set $stat = "FREED"
- end
- if $p->magic == 0xfb8277dc
- set $stat = "CACHED"
- end
- set $filename = strrchr($p->filename, '/')
- if !$filename
- set $filename = $p->filename
- else
- set $filename = $filename + 1
- end
- printf " 0x%08x ", $aptr
- if $p->size == sizeof(struct _zval_struct) && ((struct _zval_struct *)$aptr)->type >= 0 && ((struct _zval_struct *)$aptr)->type < 10
- printf "ZVAL?(%-2d) ", $p->size
- else
- printf "%-9d ", $p->size
- end
- set $total_size = $total_size + $p->size
- printf "%-06s %s:%d", $stat, $filename, $p->lineno
- if $p->orig_filename
- set $orig_filename = strrchr($p->orig_filename, '/')
- if !$orig_filename
- set $orig_filename = $p->orig_filename
- else
- set $orig_filename = $orig_filename + 1
- end
- printf " <= %s:%d\n", $orig_filename, $p->orig_lineno
- else
- printf "\n"
- end
- if $arg0 != 0
- set $p = 0
- set $not_found = 0
- else
- set $p = $p->pNext
- end
- else
- set $p = $p->pNext
- end
- end
- if $not_found
- printf "no such block that begins at 0x%08x.\n", $aptr
- end
- if $arg0 == 0
- printf "-------------------------------------------------------------------------------\n"
- printf " total: %d bytes\n", $total_size
- end
-end
-
-document zmemcheck
- show status of a memory block.
- usage: zmemcheck [ptr].
- if ptr is 0, all blocks will be listed.
-end
diff --git a/CODING_STANDARDS b/CODING_STANDARDS
deleted file mode 100644
index ff26a8985a..0000000000
--- a/CODING_STANDARDS
+++ /dev/null
@@ -1,272 +0,0 @@
-PHP Coding Standards
-====================
-
-
-This file lists several standards that any programmer, adding or changing
-code in PHP, should follow. Since this file was added at a very late
-stage of the development of PHP v3.0, the code base does not (yet) fully
-follow it, but it's going in that general direction. Since we are now
-well into the version 4 releases, many sections have been recoded to use
-these rules.
-
-
-Code Implementation
--------------------
-
-[0] Document your code in source files and the manual. [tm]
-
-[1] Functions that are given pointers to resources should not free them
-
-For instance, function int mail(char *to, char *from) should NOT free
-to and/or from.
-Exceptions:
-
- - The function's designated behavior is freeing that resource. E.g. efree()
- - The function is given a boolean argument, that controls whether or not
- the function may free its arguments (if true - the function must free its
- arguments, if false - it must not)
- - Low-level parser routines, that are tightly integrated with the token
- cache and the bison code for minimum memory copying overhead.
-
-[2] Functions that are tightly integrated with other functions within the
- same module, and rely on each other non-trivial behavior, should be
- documented as such and declared 'static'. They should be avoided if
- possible.
-
-[3] Use definitions and macros whenever possible, so that constants have
- meaningful names and can be easily manipulated. The only exceptions
- to this rule are 0 and 1, when used as false and true (respectively).
- Any other use of a numeric constant to specify different behavior
- or actions should be done through a #define.
-
-[4] When writing functions that deal with strings, be sure to remember
- that PHP holds the length property of each string, and that it
- shouldn't be calculated with strlen(). Write your functions in a such
- a way so that they'll take advantage of the length property, both
- for efficiency and in order for them to be binary-safe.
- Functions that change strings and obtain their new lengths while
- doing so, should return that new length, so it doesn't have to be
- recalculated with strlen() (e.g. php_addslashes())
-
-[5] NEVER USE strncat(). If you're absolutely sure you know what you're doing,
- check its man page again, and only then, consider using it, and even then,
- try avoiding it.
-
-[6] Use PHP_* macros in the PHP source, and ZEND_* macros in the Zend
- part of the source. Although the PHP_* macro's are mostly aliased to the
- ZEND_* macros it gives a better understanding on what kind of macro you're
- calling.
-
-[7] When commenting out code using a #if statement, do NOT use 0 only. Instead
- use "<cvs username here>_0". For example, #if FOO_0, where FOO is your
- cvs user foo. This allows easier tracking of why code was commented out,
- especially in bundled libraries.
-
-[8] Do not define functions that are not available. For instance, if a
- library is missing a function, do not define the PHP version of the
- function, and do not raise a run-time error about the function not
- existing. End users should use function_exists() to test for the
- existence of a function
-
-[9] Prefer emalloc(), efree(), estrdup(), etc. to their standard C library
- counterparts. These functions implement an internal "safety-net"
- mechanism that ensures the deallocation of any unfreed memory at the
- end of a request. They also provide useful allocation and overflow
- information while running in debug mode.
-
- In almost all cases, memory returned to the engine must be allocated
- using emalloc().
-
- The use of malloc() should be limited to cases where a third-party
- library may need to control or free the memory, or when the memory in
- question needs to survive between multiple requests.
-
-Naming Conventions
-------------------
-
-[1] Function names for user-level functions should be enclosed with in
- the PHP_FUNCTION() macro. They should be in lowercase, with words
- underscore delimited, with care taken to minimize the letter count.
- Abbreviations should not be used when they greatly decrease the
- readability of the function name itself.
-
- Good:
- 'mcrypt_enc_self_test'
- 'mysql_list_fields'
-
- Ok:
- 'mcrypt_module_get_algo_supported_key_sizes'
- (could be 'mcrypt_mod_get_algo_sup_key_sizes'?)
- 'get_html_translation_table'
- (could be 'html_get_trans_table'?)
-
- Bad:
- 'hw_GetObjectByQueryCollObj'
- 'pg_setclientencoding'
- 'jf_n_s_i'
-
-[2] If they are part of a "parent set" of functions, that parent should
- be included in the user function name, and should be clearly related
- to the parent program or function family. This should be in the form
- of parent_*.
-
- A family of 'foo' functions, for example:
- Good:
- 'foo_select_bar'
- 'foo_insert_baz'
- 'foo_delete_baz'
-
- Bad:
- 'fooselect_bar'
- 'fooinsertbaz'
- 'delete_foo_baz'
-
-[3] Function names used by user functions should be prefixed
- with "_php_", and followed by a word or an underscore-delimited list of
- words, in lowercase letters, that describes the function. If applicable,
- they should be declared 'static'.
-
-[4] Variable names must be meaningful. One letter variable names must be
- avoided, except for places where the variable has no real meaning or
- a trivial meaning (e.g. for (i=0; i<100; i++) ...).
-
-[5] Variable names should be in lowercase. Use underscores to separate
- between words.
-
-[6] Method names follow the 'studlyCaps' (also referred to as 'bumpy case'
- or 'camel caps') naming convention, with care taken to minimize the
- letter count. The initial letter of the name is lowercase, and each
- letter that starts a new 'word' is capitalized.
-
- Good:
- 'connect()'
- 'getData()'
- 'buildSomeWidget()'
-
- Bad:
- 'get_Data()'
- 'buildsomewidget'
- 'getI()'
-
-[7] Classes should be given descriptive names. Avoid using abbreviations
- where possible. Each word in the class name should start with a capital
- letter, with words underscore delimited. The class name should be prefixed
- with the name of the 'parent set'.
-
- Good:
- 'Curl'
- 'Foo_Bar'
-
- Bad:
- 'foobar'
- 'foo_bar'
- 'FooBar'
-
-
-Syntax and indentation
-----------------------
-
-[1] Never use C++ style comments (i.e. // comment). Always use C-style
- comments instead. PHP is written in C, and is aimed at compiling
- under any ANSI-C compliant compiler. Even though many compilers
- accept C++-style comments in C code, you have to ensure that your
- code would compile with other compilers as well.
- The only exception to this rule is code that is Win32-specific,
- because the Win32 port is MS-Visual C++ specific, and this compiler
- is known to accept C++-style comments in C code.
-
-[2] Use K&R-style. Of course, we can't and don't want to
- force anybody to use a style he or she is not used to, but,
- at the very least, when you write code that goes into the core
- of PHP or one of its standard modules, please maintain the K&R
- style. This applies to just about everything, starting with
- indentation and comment styles and up to function declaration
- syntax.
-
- (see also http://www.catb.org/~esr/jargon/html/I/indent-style.html)
-
-[3] Be generous with whitespace and braces. Always prefer:
-
- if (foo) {
- bar;
- }
-
- to:
-
- if(foo)bar;
-
- Keep one empty line between the variable declaration section and
- the statements in a block, as well as between logical statement
- groups in a block. Maintain at least one empty line between
- two functions, preferably two.
-
-[4] When indenting, use the tab character. A tab is expected to represent
- four spaces. It is important to maintain consistency in indenture so
- that definitions, comments, and control structures line up correctly.
-
-[5] Preprocessor statements (#if and such) MUST start at column one. To
- indent preprocessor directives you should put the # at the beginning
- of a line, followed by any number of whitespace.
-
-Documentation and Folding Hooks
--------------------------------
-
-In order to make sure that the online documentation stays in line with
-the code, each user-level function should have its user-level function
-prototype before it along with a brief one-line description of what the
-function does. It would look like this:
-
-/* {{{ proto int abs(int number)
- Returns the absolute value of the number */
-PHP_FUNCTION(abs)
-{
- ...
-}
-/* }}} */
-
-The {{{ symbols are the default folding symbols for the folding mode in
-Emacs and vim (set fdm=marker). Folding is very useful when dealing with
-large files because you can scroll through the file quickly and just unfold
-the function you wish to work on. The }}} at the end of each function marks
-the end of the fold, and should be on a separate line.
-
-The "proto" keyword there is just a helper for the doc/genfuncsummary script
-which generates a full function summary. Having this keyword in front of the
-function prototypes allows us to put folds elsewhere in the code without
-messing up the function summary.
-
-Optional arguments are written like this:
-
-/* {{{ proto object imap_header(int stream_id, int msg_no [, int from_length [, int subject_length [, string default_host]]])
- Returns a header object with the defined parameters */
-
-And yes, please keep the prototype on a single line, even if that line
-is massive.
-
-New and Experimental Functions
------------------------------------
-To reduce the problems normally associated with the first public
-implementation of a new set of functions, it has been suggested
-that the first implementation include a file labeled 'EXPERIMENTAL'
-in the function directory, and that the functions follow the
-standard prefixing conventions during their initial implementation.
-
-The file labelled 'EXPERIMENTAL' should include the following
-information:
- Any authoring information (known bugs, future directions of the module).
- Ongoing status notes which may not be appropriate for CVS comments.
-
-Aliases & Legacy Documentation
------------------------------------
-You may also have some deprecated aliases with close to duplicate
-names, for example, somedb_select_result and somedb_selectresult. For
-documentation purposes, these will only be documented by the most
-current name, with the aliases listed in the documentation for
-the parent function. For ease of reference, user-functions with
-completely different names, that alias to the same function (such as
-highlight_file and show_source), will be separately documented. The
-proto should still be included, describing which function is aliased.
-
-Backwards compatible functions and names should be maintained as long
-as the code can be reasonably be kept as part of the codebase. See
-/phpdoc/README for more information on documentation.
diff --git a/CREDITS b/CREDITS
deleted file mode 100644
index 42549a2773..0000000000
--- a/CREDITS
+++ /dev/null
@@ -1,2 +0,0 @@
-For the list of people who've put work into PHP, please see
-http://www.php.net/credits.php
diff --git a/ChangeLog b/ChangeLog
deleted file mode 100644
index c88710e162..0000000000
--- a/ChangeLog
+++ /dev/null
@@ -1,16840 +0,0 @@
-2004-09-06 Marcus Boerger <marcus.boerger@post.rwth-aachen.de>
-
- * ZendEngine2/zend_objects.c:
- - Fix handling of exceptions in dtors
-
-2004-09-06 Rob Richards <rrichards@ctindustries.net>
-
- * (PHP_5_0)
- NEWS:
- BFN
-
-2004-09-06 Dmitry Stogov <dmitry@zend.com>
-
- * tests/classes/interface_and_extends.phpt:
- Fix: interfac -> interface
-
-2004-09-05 Zeev Suraski <zeev@zend.com>
-
- * ZendEngine2/zend.c
- ZendEngine2/zend.h
- ZendEngine2/zend_ini_parser.y
- main/main.c:
- Fix reverse dependency
-
-2004-09-05 Marcus Boerger <marcus.boerger@post.rwth-aachen.de>
-
- * ext/standard/var_unserializer.c:
- Touch
-
- * (PHP_5_0)
- NEWS:
- BFN
-
- * ext/standard/incomplete_class.c:
- - Bugfix #29985
-
- * ext/standard/var_unserializer.re:
- - Add some checks to unserialize() to prevent bufferoverflows
-
- * ext/standard/php_var.h
- ext/standard/var.c
- ext/standard/var_unserializer.c
- ext/standard/tests/serialize/bug25378.phpt:
- - Add some checks when unserializing data to prevent buffer overflows
-
-2004-09-05 Andrey Hristov <php@hristov.com>
-
- * ext/standard/file.c:
- remove "." at the end of messages
-
-2004-09-05 Moshe Doron <mosdoron@netvision.net.il>
-
- * ext/standard/sunfuncs.c:
- make autogenerated docs happy (Friedhelm Betz)
-
-2004-09-04 Andi Gutmans <andi@zend.com>
-
- * ZendEngine2/zend_API.c:
- - Don't destroy object when calling overloaded cast method in
- - zend_parse_parameters()
-
-2004-09-04 Georg Richter <georg@mysql.com>
-
- * (PHP_5_0)
- ext/mysqli/mysqli.c
- ext/mysqli/mysqli_api.c
- ext/mysqli/mysqli_nonapi.c
- ext/mysqli/php_mysqli.h
- ext/mysqli/tests/061.csv
- ext/mysqli/tests/061.csv
- ext/mysqli/tests/061.phpt:
- MFH: LOAD DATA INFILE now uses PHP's fopen wrapper
-
- * ext/mysqli/mysqli_api.c:
- forgot to remove comment in last commit
-
-2004-09-03 Ilia Alshanetsky <ilia@prohost.org>
-
- * ext/dio/dio.c:
- Adjusted input check.
-
- * (PHP_4_3)
- ext/session/session.c:
- MFH: Fixed bug #29925 (Added a check to prevent illegal characters in
- session key).
-
-2004-09-02 Frank M. Kromann <frank@kromann.info>
-
- * ext/ming/ming.c:
- Adding swfvideostreamp and swfprebuiltclipp, available in ming 0.3
-
-2004-09-02 Marcus Boerger <marcus.boerger@post.rwth-aachen.de>
-
- * ext/standard/var.c:
- Fix memleak in serialize
-
- * ext/standard/tests/serialize/bug14293.phpt:
- Fix test
-
-2004-09-02 Sebastian Bergmann <sb@sebastian-bergmann.de>
-
- * ZendEngine2/zend_compile.c:
- Fugbix typo.
-
-2004-09-02 Stanislav Malyshev <stas@zend.com>
-
- * ext/standard/filestat.c:
- MF4: fix crash if shutdown uses file stats
-
- * (PHP_4_3)
- ext/standard/filestat.c:
- this crashed if some of the shutdown handlers called some file stat
- function
-
-2004-09-02 Derick Rethans <php@derickrethans.nl>
-
- * tests/lang/bug29944.phpt:
- - Added test for bug #29944.
-
- * tests/lang/bug29944.phpt:
- 1.1.4;
- file bug29944.phpt was initially added on branch PHP_4_3.
-
-2004-09-02 Georg Richter <georg@mysql.com>
-
- * ext/mysqli/php_mysqli.h:
- fixed bug #29283
-
- * (PHP_5_0)
- NEWS
- ext/mysqli/mysqli_api.c
- ext/mysqli/php_mysqli.h:
- fixed compiler warnings
- fixed bug #29283
-
-2004-09-02 Ilia Alshanetsky <ilia@prohost.org>
-
- * (PHP_5_0)
- ext/session/session.c:
- MFH: Fixed bug #29925 (Added a check to prevent illegal characters in
- session key).
-
- * ext/session/session.c:
- Fixed bug #29925 (Added a check to prevent illegal characters in session
- key).
-
-2004-08-31 Sara Golemon <php@alphaweb.net>
-
- * (PHP_4_3)
- ext/curl/curlstreams.c
- ext/curl/streams.c:
- MFH: Use user_agent ini setting if it's available.
-
- * ext/curl/streams.c:
- Use user_agent ini setting if it's available.
-
-2004-08-31 Joe Orton <jorton@redhat.com>
-
- * ext/gd/libgd/gd.h
- ext/gd/libgd/gdtables.c
- ext/gd/libgd/wbmp.h
- main/php_compat.h:
- Move global symbols defined by bundled copy of libgd into private
- php_gd_* namespace, to avoid symbol conflicts with, for instance,
- another Apache module which loads a different copy of libgd.
-
-2004-08-31 Stanislav Malyshev <stas@zend.com>
-
- * (PHP_4_3)
- main/streams.c:
- if not using Zend's alloc, don't touch _emalloc
-
-2004-08-31 Ilia Alshanetsky <ilia@prohost.org>
-
- * (PHP_4_3)
- configure.in
- main/php_version.h:
- back to dev.
-
- * (PHP_4_3)
- NEWS
- configure.in
- main/php_version.h:
- 4.3.9RC2
-
-2004-08-31 Joe Orton <jorton@redhat.com>
-
- * (PHP_5_0)
- tests/lang/bug27354.phpt
- tests/lang/bug27354.phpt:
- MFH: Do not rely on handling of integers which might be outside the
- range of a 32-bit signed long.
-
-2004-08-31 Antony Dovgal <tony2001@phpclub.net>
-
- * (PHP_5_0)
- main/streams/streams.c:
- MFH: fix bug #29723 (file_get_contents() fails with the file:// wrapper
- under Win32)
-
- * main/streams/streams.c:
- fix bug #29723 (file_get_contents() fails with the file:// wrapper under
- Win32)
-
-2004-08-31 Joe Orton <jorton@redhat.com>
-
- * (PHP_4_3)
- ext/standard/tests/time/001.phpt
- ext/standard/tests/time/001.phpt:
- MFH: fix gettimeofday() tests to not fail if the same time is
- returned by successive calls.
-
- * tests/lang/bug27354.phpt:
- Do not rely on behaviour of integers which might be greater than
- LONG_MAX on 32-bit architectures.
-
-2004-08-31 Antony Dovgal <tony2001@phpclub.net>
-
- * (PHP_5_0)
- ext/oci8/oci8.dsw
- ext/oci8/oci8.dsw:
- MFH: this file shouldn't be in the repository at all
-
- * ext/oci8/oci8.dsw:
- this file shouldn't be in the repository at all
-
-2004-08-30 Ilia Alshanetsky <ilia@prohost.org>
-
- * (PHP_4_3)
- ext/dio/dio.c
- ext/dio/dio.c:
- MFH: Added missing input validation to dio_write().
-
- * ext/dio/dio.c:
- Added missing input validation to dio_write().
-
-2004-08-30 Frank M. Kromann <frank@kromann.info>
-
- * ext/mssql/mssql.dsp:
- Fif for #28047. Set correct debug options for debug_ts build
-
-2004-08-30 Marcus Boerger <marcus.boerger@post.rwth-aachen.de>
-
- * (PHP_5_0)
- ZendEngine2/ZEND_CHANGES:
- MFH: Add some information about array overloading
-
- * ZendEngine2/ZEND_CHANGES:
- Add some information about array overloading
-
-2004-08-30 Rob Richards <rrichards@ctindustries.net>
-
- * (PHP_5_0)
- ext/dom/document.c
- ext/dom/documenttype.c
- ext/dom/element.c
- ext/dom/node.c
- ext/dom/php_dom.c
- ext/dom/php_dom.h
- ext/simplexml/simplexml.c:
- MFH: remove cloning under ze1_compatibility_mode
- - minor BC break but doesnt work right under compat mode anyways
-
- * ext/dom/document.c
- ext/dom/documenttype.c
- ext/dom/element.c
- ext/dom/node.c
- ext/dom/php_dom.c
- ext/dom/php_dom.h
- ext/simplexml/simplexml.c:
- remove cloning under ze1_compatibility_mode
- - minor BC break but doesnt work right under compat mode anyways
-
- * ext/xsl/php_xsl.c:
- remove clone functionality
-
-2004-08-30 Antony Dovgal <tony2001@phpclub.net>
-
- * tests/lang/bug29893.phpt:
- 1.1.4;
- add testcase for bug #29893
-
-2004-08-30 Stanislav Malyshev <stas@zend.com>
-
- * ZendEngine2/zend_execute.c:
- fix crash #29893
-
-2004-08-29 Marcus Boerger <marcus.boerger@post.rwth-aachen.de>
-
- * ZendEngine2/zend_execute.c:
- String offset starts with 0, fix isset($str[$len])
-
-2004-08-29 Ilia Alshanetsky <ilia@prohost.org>
-
- * (PHP_5_0)
- ext/standard/var.c:
- MFH: Fixed leak when serializing protected & private properties.
-
- * ext/standard/var.c:
- Fixed leak when serializing protected & private properties.
-
-2004-08-29 Marcus Boerger <marcus.boerger@post.rwth-aachen.de>
-
- * (PHP_4_3)
- NEWS
- Zend/zend_compile.c
- ZendEngine2/zend_compile.c:
- MFH: Bugfix #29882 isset crashes on arrays
-
- * ZendEngine2/zend_compile.c:
- Bugfix #29882 isset crashes on arrays
-
-2004-08-29 Sergey Kartashoff <gluke@mail.ru>
-
- * ext/mnogosearch/config.m4
- ext/mnogosearch/config.m4
- ext/mnogosearch/config.m4:
- - A fix for building of shared mnogosearch module
-
-2004-08-28 Derick Rethans <php@derickrethans.nl>
-
- * (PHP_5_0)
- NEWS
- ext/pcntl/pcntl.c
- ext/pcntl/php_pcntl.h:
- - MFH: Fixed bug #29873 (No defines around pcntl_*priority definitions).
-
- * ext/pcntl/pcntl.c
- ext/pcntl/php_pcntl.h:
- - Fixed bug #29873 (No defines around pcntl_*priority definitions).
-
-2004-08-27 Christian Stocker <chregu@phant.ch>
-
- * (PHP_5_0)
- EXTENSIONS:
- Marking DOM and XSL as "Working". This should have happened with the
- release of PHP 5.0.0 already.
-
-2004-08-27 Andi Gutmans <andi@zend.com>
-
- * (PHP_4_3)
- Zend/zend_alloc.c:
- - MF PHP 5
-
- * ZendEngine2/zend_alloc.c:
- - Fix leak report for 0 byte allocations (Dmitry)
-
-2004-08-27 Dmitry Stogov <dmitry@zend.com>
-
- * (PHP_5_0)
- NEWS:
- Fixed bug #29842 (soapclient return null value)
-
-2004-08-26 Ilia Alshanetsky <ilia@prohost.org>
-
- * (PHP_4_3)
- ext/zlib/zlib_fopen_wrapper.c
- ext/zlib/zlib_fopen_wrapper.c:
- MFH: Fixed a nasty resource/memory/disk-space leak when opening zlib files
- via wrapper stacking ala compress.zlib://http://...
-
- * ext/zlib/zlib_fopen_wrapper.c:
- Fixed a nasty resource/memory/disk-space leak when opening zlib files
- via wrapper stacking ala compress.zlib://http://...
-
-2004-08-26 Marcus Boerger <marcus.boerger@post.rwth-aachen.de>
-
- * (PHP_5_0)
- ZendEngine2/zend_compile.c:
- MFH: Enforce semantics: Classes cannot extend Interfaces
-
- * ZendEngine2/zend_compile.c:
- Enforce semantics: Classes cannot extend Interfaces
-
- * ZendEngine2/tests/bug29828.phpt:
- Fix test: Classes cannot extend Interfaces
-
- * (PHP_5_0)
- NEWS:
- BFN
-
- * ZendEngine2/zend_compile.c:
- Drop doubled check
-
- * ZendEngine2/zend_compile.c:
- - Bugfix #29828 Interfaces no longer work
-
- * ZendEngine2/tests/bug29828.phpt
- tests/classes/interface_and_extends.phpt:
-
- Add new test
-
-2004-08-26 Rob Richards <rrichards@ctindustries.net>
-
- * ext/dom/EXPERIMENTAL
- ext/dom/EXPERIMENTAL:
- not experimental
-
-2004-08-26 Dmitry Stogov <dmitry@zend.com>
-
- * (PHP_5_0)
- NEWS:
- Fixed bug #29839 (incorrect convert (xml:lang to lang))
-
- * (PHP_5_0)
- NEWS:
- Fixed bug #29795 (SegFault with Soap and Amazon's Web Services)
- Fixed bug #27994 (segfault with Soapserver when WSDL-Cache is enabled)
-
-2004-08-26 Thies C. Arntzen <thies@thieso.net>
-
- * (PHP_4_3)
- ext/standard/formatted_print.c:
-
-
-2004-08-26 Dmitry Stogov <dmitry@zend.com>
-
- * (PHP_5_0)
- NEWS:
- Fixed bug #29844 (SOAP doesn't return the result of a valid SOAP request).
- Fixed bug #29830 (SoapServer::setClass() should not export non-public
- methods).
-
-2004-08-26 Ilia Alshanetsky <ilia@prohost.org>
-
- * (PHP_5_0)
- NEWS
- ext/standard/array.c:
- MFH: Fixed bug #29808 (array_count_values() breaks with numeric strings).
-
- * ext/standard/array.c:
- Fixed bug #29808 (array_count_values() breaks with numeric strings).
-
-2004-08-25 Andrei Zmievski <andreiz@gmail.com>
-
- * ext/pcre/php_pcre.c
- ext/pcre/php_pcre.c:
- MFB.
-
- * (PHP_4_3)
- ext/pcre/php_pcre.c:
- Rewrite cache clean-up using zend_hash_apply_with_argument().
-
-2004-08-25 Ilia Alshanetsky <ilia@prohost.org>
-
- * (PHP_4_3)
- ext/bz2/bz2.c:
- Fixed operations on remote bzip2 compressed files ala:
- compress.bzip2://http://downloads.php.net/ilia/php-4.3.5RC1.tar.bz2
-
- Patch by Wez (MFH from HEAD)
-
-2004-08-25 Georg Richter <georg@mysql.com>
-
- * ext/mysqli/tests/061.phpt:
- test for local_infile_handler
-
- * ext/mysqli/mysqli.c
- ext/mysqli/mysqli_api.c
- ext/mysqli/mysqli_nonapi.c
- ext/mysqli/php_mysqli.h:
- changed local_infile_handler:
- mysql client lib now uses php_local_infile functions by default, which
- allows
- to use php_fopen_wrapper: e.g. LOAD DATA LOCAL INFILE
- 'http://foo.com/bar.csv' ...
-
- mysql_set_local_infile_handler now only supports a callback function for
- read.
-
-2004-08-25 Christian Stocker <chregu@phant.ch>
-
- * ext/dom/document.c:
- if $doc->recover = true; set error_reporting to (old | E_WARNING)
- This way, you can't silence XML parse errors with the @ character
-
-2004-08-25 Marcus Boerger <marcus.boerger@post.rwth-aachen.de>
-
- * tests/lang/bug29566.phpt:
- No short tags
-
-2004-08-25 Andrey Hristov <php@hristov.com>
-
- * (PHP_5_0)
- NEWS:
- .
-
-2004-08-25 Derick Rethans <php@derickrethans.nl>
-
- * NEWS:
- - Those two are already in the NEWS for 5.0.2.
-
-2004-08-25 Andi Gutmans <andi@zend.com>
-
- * NEWS
- NEWS:
- - Improve wording
-
- * NEWS:
- - MFB
-
- * (PHP_5_0)
- NEWS:
- - NEWS
-
- * ZendEngine2/zend_builtin_functions.c:
- - Add interface_exists() and differentiate between classes and interfaces
- (Andrey Hristov)
-
-2004-08-24 Andrey Hristov <php@hristov.com>
-
- * README.PHP4-TO-PHP5-THIN-CHANGES:
- new incompatibilities. maybe someone from the doc group will update the
- migrating guide. also Derick may add new slides to his talk :)
-
-2004-08-24 Marcus Boerger <marcus.boerger@post.rwth-aachen.de>
-
- * ext/pcre/php_pcre.c:
- MFB: TSRM fix
-
- * (PHP_5_0)
- ext/pcre/php_pcre.c:
- TSRM fix
-
- * (PHP_5_0)
- tests/lang/bug29566.phpt:
- Add new test
-
- * tests/lang/bug29566.phpt:
-
- Add new test
-
-2004-08-24 Andrei Zmievski <andreiz@gmail.com>
-
- * (PHP_5_0)
- NEWS
- ext/pcre/php_pcre.c:
- MFB
-
- * NEWS
- ext/pcre/php_pcre.c:
- MFB.
-
- * (PHP_4_3)
- NEWS
- ext/pcre/php_pcre.c:
- Implement periodic PCRE compiled regexp cache cleanup, to avoid memory
- exhaustion.
-
-2004-08-24 Marcus Boerger <marcus.boerger@post.rwth-aachen.de>
-
- * ZendEngine2/zend_API.c:
- - Add missing brackets
-
-2004-08-24 Frank M. Kromann <frank@kromann.info>
-
- * (PHP_4_3)
- ext/fbsql/php_fbsql.c:
- Fix a possible crash in fbsql_database() if the function was called before
- a connection was made.
-
- * ext/fbsql/php_fbsql.c
- ext/fbsql/php_fbsql.h:
- Add fbsql_rows_fetched() - returns the total number of rows fetched.
- Fix a possible crash in fbsql_database() if the function was called before
- a connection was made.
-
-2004-08-24 Ilia Alshanetsky <ilia@prohost.org>
-
- * (PHP_5_0)
- NEWS
- ext/standard/uuencode.c:
- MFH: Fixed bug #29821 (Fixed possible crashes in convert_uudecode() on
- invalid data).
-
- * ext/standard/uuencode.c:
- Fixed bug #29821 (Fixed possible crashes in convert_uudecode() on invalid
- data).
-
-2004-08-24 Rob Richards <rrichards@ctindustries.net>
-
- * ext/xsl/php_xsl.c:
- fix segfault when object cloned
-
-2004-08-24 Wez Furlong <wez.php@thebrainroom.net>
-
- * ext/readline/config.m4
- ext/readline/readline.c:
- Add support for the readline callback interface, allowing you to interleave
- IO and user input. Sample script:
-
- <?php
- dl("readline.so");
-
- function handle_user_input($line)
- {
- echo "You typed: '$line'\n";
- if ($line == 'exit')
- exit;
- }
-
- readline_callback_handler_install('type! > ', 'handle_user_input');
-
- while (true) {
- $n = stream_select($r = array(STDIN), $w = null, $e = null, null);
-
- if ($n && in_array(STDIN, $r)) {
- readline_callback_read_char();
- }
- }
-
-2004-08-24 Derick Rethans <php@derickrethans.nl>
-
- * ext/readline/config.m4:
- - No tabs here please
-
-2004-08-24 Wez Furlong <wez.php@thebrainroom.net>
-
- * ext/readline/config.m4:
- use dependent libs while probing for functions
-
-2004-08-24 Christian Stocker <chregu@phant.ch>
-
- * (PHP_5_0)
- ext/xsl/EXPERIMENTAL:
- MFH ;)
- (This extension is no more experimental)
-
- * ext/xsl/EXPERIMENTAL:
- This extension is no more experimental
-
-2004-08-24 Andi Gutmans <andi@zend.com>
-
- * NEWS:
- - Fix typo
-
-2004-08-23 Marcus Boerger <marcus.boerger@post.rwth-aachen.de>
-
- * ZendEngine2/zend_compile.c:
- - Drop unused variable
-
- * ZendEngine2/zend_execute_API.c
- ZendEngine2/zend_globals.h:
- - Boost up __autoload() calls by caching the lookup
-
-2004-08-23 Andi Gutmans <andi@zend.com>
-
- * NEWS:
- - Improve wording
-
- * NEWS:
- - NEWS
-
- * ZendEngine2/zend_compile.c:
- - Improve performance of switch()
-
-2004-08-23 Ilia Alshanetsky <ilia@prohost.org>
-
- * (PHP_4_3)
- ext/dio/dio.c
- ext/dio/dio.c:
- MFH: Fixed possible crash inside dio_read().
-
- * ext/dio/dio.c:
- Fixed possible crash inside dio_read().
-
- * ext/standard/head.c:
- Fixed proto of headers_list().
-
-2004-08-23 Zeev Suraski <zeev@zend.com>
-
- * (PHP_5_0)
- ZendEngine2/zend_reflection_api.c:
- Fix names
-
-2004-08-23 Derick Rethans <php@derickrethans.nl>
-
- * (PHP_5_0)
- NEWS:
- - There was a bug # attached to this fix.
-
- * sapi/apache2filter/config.m4
- sapi/apache2handler/config.m4:
- - MFB: Fixed Apache 2.0 SAPI build against Apache 2 HEAD. (Patch by Joe
- Orton)
-
- * NEWS:
- - Little changes.
-
- * (PHP_5_0)
- NEWS
- sapi/apache2filter/config.m4
- sapi/apache2handler/config.m4:
- - Fixed Apache 2.0 SAPI build against Apache 2 HEAD. (Patch by Joe Orton)
-
-2004-08-22 Ilia Alshanetsky <ilia@prohost.org>
-
- * (PHP_5_0)
- main/streams/xp_socket.c:
- MFH: Using int when long should be used.
-
- * main/streams/xp_socket.c:
- Using int when long should be used.
-
-2004-08-21 Timm Friebe <thekid@thekid.de>
-
- * ext/sybase_ct/php_sybase_ct.c:
- - Fixed packet size setting
-
-2004-08-21 Andrey Hristov <php@hristov.com>
-
- * ext/standard/var.c
- tests/classes/bug26737.phpt:
- fix for bug 26737 : private & protected member variables not serialized
- when user defined __sleep() is declared. Additionally E_NOTICE is
- being thrown if __sleep() returns a non-existing member variable name
-
-2004-08-21 Frank M. Kromann <frank@kromann.info>
-
- * main/SAPI.h:
- Fix win32 compilation. Missing uid_t and gid_t definitions.
-
-2004-08-21 Sara Golemon <php@alphaweb.net>
-
- * ZendEngine2/zend_compile.c:
- Bugfix#29777 Some compilers don't like // style comments
-
-2004-08-20 Sara Golemon <php@alphaweb.net>
-
- * ZendEngine2/zend_ini_parser.y:
- Fix compile
-
-2004-08-20 Ilia Alshanetsky <ilia@prohost.org>
-
- * ext/curl/interface.c:
- MFB: Removed unneeded bits.
-
- * (PHP_5_0)
- ext/curl/interface.c:
- MFB: removed unneeded bits.
-
- * (PHP_4_3)
- ext/curl/curl.c:
- Removed unneeded bits.
-
-2004-08-20 Derick Rethans <php@derickrethans.nl>
-
- * NEWS:
- - Order and removed a bugfix which was already in 5.0.2/
-
- * (PHP_5_0)
- NEWS:
- - 78 chars please.
-
-2004-08-20 Ilia Alshanetsky <ilia@prohost.org>
-
- * ext/curl/interface.c:
- Added more missing cURL options.
-
- * (PHP_4_3)
- NEWS
- ext/mcal/php_mcal.c:
- MFH: Fixed bug #29753 (mcal_fetch_event() allows 2nd argument to be
- optional).
-
-2004-08-19 Andi Gutmans <andi@zend.com>
-
- * ZendEngine2/zend_execute.c:
- - Cleanup
-
-2004-08-19 Brian France <list@firehawksystems.com>
-
- * (PHP_4_3)
- NEWS
- NEWS
- main/SAPI.c
- main/SAPI.c:
-
- [MFH] If you send a post with a content-type header and then the next post
- without the content-type header, raw_post_data will not be set. This is
- because SG(request_info).post_entry is set to the first requests function
- pointer which makes it follow the wrong code path.
-
-2004-08-19 Andi Gutmans <andi@zend.com>
-
- * ZendEngine2/zend.c
- ZendEngine2/zend_execute_API.c
- ZendEngine2/zend_globals.h:
- - Second wave of garbage removal.
-
-2004-08-19 Brian France <list@firehawksystems.com>
-
- * NEWS
- main/SAPI.c:
-
- If you send a post with a content-type header and then the next post
- without the content-type header, raw_post_data will not be set. This is
- because SG(request_info).post_entry is set to the first requests function
- pointer which makes it follow the wrong code path.
-
-2004-08-19 Andi Gutmans <andi@zend.com>
-
- * ZendEngine2/zend_compile.h
- ZendEngine2/zend_execute.c:
- - Stop using garbage. Please let me know if you find any bugs resulting
- - of this patch (very likely). (Dmitry, Andi)
-
-2004-08-19 Marcus Boerger <marcus.boerger@post.rwth-aachen.de>
-
- * NEWS:
- Janify [tm]
-
-2004-08-19 Antony Dovgal <tony2001@phpclub.net>
-
- * NEWS
- NEWS:
- BFN
-
- * ext/standard/basic_functions.c:
- fix #29737 in the right way with performance in mind
-
- * (PHP_5_0)
- ext/standard/basic_functions.c:
- MFH: fix #29737 (ip2long should return -1 if IP is 255.255.255.255 and
- FALSE on error)
-
- * ext/standard/basic_functions.c:
- fix #29737 (ip2long should return -1 if IP is 255.255.255.255 and FALSE on
- error)
-
-2004-08-19 Derick Rethans <php@derickrethans.nl>
-
- * (PHP_5_0)
- NEWS:
- - Reorder
-
-2004-08-19 Christian Stocker <chregu@phant.ch>
-
- * (PHP_5_0)
- NEWS
- ext/xml/compat.c
- ext/xml/xml.c:
- MFH
- - Fixed bug #29657 (xml_* functions throw non descriptive error).
- (Christian, Rob)
- - Fixed bug #29711 (Changed ext/xml to default to UTF-8 output). (Rob)
-
- * ext/xml/compat.c
- ext/xml/xml.c:
- fix for bug #29657 xml_* functions throw non descriptive error, compared to
- php4
- fix for bug #29711 libxml and non iso-8859-1.
- If no encoding specified, it defaults to UTF-8 now
-
-2004-08-19 Marcus Boerger <marcus.boerger@post.rwth-aachen.de>
-
- * ext/dba/tests/dba_handler.inc:
- Fix issue in test
-
- * NEWS:
- BFN + reorder
-
- * ZendEngine2/zend_reflection_api.c:
- - Implement #29728: Reflection API Feature: Default parameter value.
- . ReflectionParameter::isDefaultValueAvailable()
- . ReflectionParameter::getDefaultValue()
-
- * ZendEngine2/zend_reflection_api.c:
- - Nedd to work on copy
-
-2004-08-18 Marcus Boerger <marcus.boerger@post.rwth-aachen.de>
-
- * ZendEngine2/zend_reflection_api.c:
- - Show default value of optional parameters of user defined functions.
-
-2004-08-18 Ilia Alshanetsky <ilia@prohost.org>
-
- * (PHP_4_3)
- NEWS
- ext/curl/curl.c
- ext/curl/interface.c:
- MFH: Fixed bug #29727 (Added missing CURL authentication directives).
-
- * ext/curl/interface.c:
- Fixed bug #29727 (Added missing CURL authentication directives).
-
-2004-08-18 Andrei Zmievski <andreiz@gmail.com>
-
- * ZendEngine2/zend_ini_parser.y:
- Forgot to turn off debugging.
-
- * NEWS
- TODO-5.1
- ZendEngine2/zend_ini_parser.y
- ZendEngine2/zend_ini_scanner.l:
- Re-add my patch for .ini variable access.
-
-2004-08-18 Antony Dovgal <tony2001@phpclub.net>
-
- * sapi/apache/config.m4
- sapi/apache/config.m4:
- MFB: typo in config.m4 (potential configuration problem with Stronghold)
-
- * (PHP_4_3)
- sapi/apache/config.m4:
- typo in config.m4 (potential configuration problem with Stronghold)
-
- * (PHP_4_3)
- ext/xslt/config.m4:
- fix #29625 (no quotes around the shell variable's value cause ./configure
- to fail)
-
-2004-08-17 Andi Gutmans <andi@zend.com>
-
- * php.ini-dist
- php.ini-dist
- php.ini-recommended
- php.ini-recommended:
- - Fix typos
-
-2004-08-17 Ilia Alshanetsky <ilia@prohost.org>
-
- * (PHP_4_3)
- NEWS
- ext/standard/file.c:
- Fixed bug #29719 (fgetcsv() has problem parsing strings ending with escaped
- enclosures).
-
-2004-08-17 Antony Dovgal <tony2001@phpclub.net>
-
- * php.ini-dist
- php.ini-recommended:
- fix typo
-
-2004-08-16 Ilia Alshanetsky <ilia@prohost.org>
-
- * (PHP_4_3)
- NEWS
- ext/gd/gd.c
- ext/gd/gd.c:
- MFH: Fixed bug #29594 (Use PHP's own tmpfile() implementation).
-
- * ext/gd/gd.c:
- Fixed bug #29594 (Use PHP's own tmpfile() implementation).
-
-2004-08-16 Zeev Suraski <zeev@zend.com>
-
- * (PHP_4_3)
- NEWS
- NEWS:
- -** empty log message ***
-
- * main/main.c:
- Fix an oldie fd leak
-
- * (PHP_4_3)
- main/main.c:
- Fix an OLDIE fd leak
-
-2004-08-16 Marcus Boerger <marcus.boerger@post.rwth-aachen.de>
-
- * (PHP_5_0)
- NEWS:
- BFN
-
- * (PHP_5_0)
- ZendEngine2/zend_reflection_api.c:
- MFH: Fix bug #29447: Reflection API issues
-
- * ZendEngine2/zend_reflection_api.c:
- - Fix bug #29447: Reflection API issues
-
-2004-08-16 Ilia Alshanetsky <ilia@prohost.org>
-
- * (PHP_5_0)
- NEWS
- ext/standard/ftp_fopen_wrapper.c:
- MFH: Fixed bug #29678 (opendir() with ftp:// wrapper segfaults if path
- does not have trailing slash).
-
- * ext/standard/ftp_fopen_wrapper.c:
- Fixed bug #29678 (opendir() with ftp:// wrapper segfaults if path does not
- have trailing slash).
-
-2004-08-15 Marcus Boerger <marcus.boerger@post.rwth-aachen.de>
-
- * ZendEngine2/zend_compile.c:
- Remove unnecessary check
-
-2004-08-15 Georg Richter <georg@mysql.com>
-
- * ext/mysqli/mysqli.c
- ext/mysqli/mysqli.c:
- fixed default for mysqli_fetch_array
-
-2004-08-14 Marcus Boerger <marcus.boerger@post.rwth-aachen.de>
-
- * ZendEngine2/zend_compile.c:
- Add missing check
-
-2004-08-13 Dan Kalowsky <dank@deadmime.org>
-
- * ext/odbc/php_odbc.c:
- Checking in a patch by Dave Lawson (dlawson@masterytech.com) to correct
- some of the behavior found in the odbc_fetch_*() functions. This patch
- NEEDS to be tested on MS Access before a release is done with it. This
- submission is to get it into the daily builds for testing.
-
-2004-08-13 Georg Richter <georg@mysql.com>
-
- * (PHP_5_0)
- NEWS
- ext/mysqli/mysqli.c
- ext/mysqli/mysqli.c:
- fixed bug #29656 (segfault on result and statement properties)
-
-2004-08-13 Antony Dovgal <tony2001@phpclub.net>
-
- * (PHP_5_0)
- regex/engine.c
- regex/regexec.c:
- MFH: fix yet another annoying compile warning
-
- * regex/engine.c
- regex/regexec.c:
- fix yet another annoying compile warning
-
- * ext/iconv/iconv.c:
- fix compile warning
-
-2004-08-13 Christian Stocker <chregu@phant.ch>
-
- * NEWS:
- Forgot to add DomDocumentFragment->appendXML(), when I commited it back
- then
-
- * NEWS
- ext/dom/document.c
- ext/dom/dom_properties.h
- ext/dom/php_dom.c
- ext/dom/xml_common.h:
- Added DomDocument->recover property for parsing not well-formed XML
- Documents.
-
-2004-08-13 Rob Richards <rrichards@ctindustries.net>
-
- * (PHP_4_3)
- NEWS:
- BFN
-
- * (PHP_4_3)
- ext/domxml/php_domxml.c
- ext/domxml/php_domxml.h:
- Fixed bug #29599 (domxml_error segfaults another apache module)
-
-2004-08-13 Derick Rethans <php@derickrethans.nl>
-
- * (PHP_5_0)
- NEWS
- main/main.c:
- - MFH: Added PHP_EOL constant that contains the OS way of representing
- newlines. (Patch by Paul Hudson)
-
- * main/main.c:
- - Added the PHP_EOL constant (Patch by Paul Hudson)
-
-2004-08-12 Georg Richter <georg@mysql.com>
-
- * ext/mysqli/mysqli_api.c
- ext/mysqli/mysqli_api.c:
- minor fix in mysqli_prepare: copying stmt errormessag to mysql structure
-
-2004-08-12 Andi Gutmans <andi@zend.com>
-
- * (PHP_5_0)
- NEWS
- configure.in
- ZendEngine2/zend.h
- main/php_version.h:
- - Back to 5.0.2-dev
-
- * (PHP_5_0)
- NEWS
- configure.in
- ZendEngine2/zend.h
- main/php_version.h:
- - Roll 5.0.1
-
-2004-08-12 Chuck Hagenbuch <chuck@horde.org>
-
- * ext/imap/php_imap.c
- ext/imap/php_imap.c
- ext/imap/php_imap.c:
- More spaces -> tabs.
-
-2004-08-12 Ilia Alshanetsky <ilia@prohost.org>
-
- * (PHP_4_3)
- ext/imap/php_imap.c
- ext/imap/php_imap.c:
- MFH: Properly fix the msgno check inside imap_fetchbody().
-
- * ext/imap/php_imap.c:
- Properly fix the msgno check inside imap_fetchbody().
-
-2004-08-12 Chuck Hagenbuch <chuck@horde.org>
-
- * ext/imap/php_imap.c:
- fix.
-
-2004-08-12 Marcus Boerger <marcus.boerger@post.rwth-aachen.de>
-
- * tests/classes/iterators_001.phpt
- tests/classes/iterators_002.phpt:
- Fix tests after foreach patch
-
-2004-08-12 Derick Rethans <php@derickrethans.nl>
-
- * (PHP_5_0)
- NEWS:
- - Reorder a bit and add .
-
-2004-08-12 Andi Gutmans <andi@zend.com>
-
- * (PHP_5_0)
- configure.in
- ZendEngine2/zend.h
- main/php_version.h:
- - Back to -dev
-
- * (PHP_5_0)
- NEWS
- configure.in
- ZendEngine2/zend.h
- main/php_version.h:
- - 5.0.1RC2
-
- * ext/standard/array.c:
- - Use FREE_HASHTABLE()
-
- * ZendEngine2/zend_compile.c
- ZendEngine2/zend_compile.h
- ZendEngine2/zend_execute.c:
- - Don't use magic numbers
-
-2004-08-12 Magnus Määttä <novell@kiruna.se>
-
- * (PHP_5_0)
- NEWS:
- Add missing NEWS entry (bug 29147).
-
-2004-08-12 Andi Gutmans <andi@zend.com>
-
- * ZendEngine2/zend_compile.c
- ZendEngine2/zend_execute.c:
- - Significantly improve performance of foreach($arr as $data). (Marcus)
-
-2004-08-12 Marcus Boerger <marcus.boerger@post.rwth-aachen.de>
-
- * ext/dba/tests/dba_cdb_make.phpt:
- Change to use md5_file()
-
-2004-08-11 Ilia Alshanetsky <ilia@prohost.org>
-
- * ext/gd/libgd/gd_topal.c:
- Fixed memory leak.
-
- * (PHP_4_3)
- configure.in
- main/php_version.h:
- back to dev.
-
- * (PHP_4_3)
- configure.in
- main/php_version.h:
- 4.3.9RC1 is a go.
-
- * (PHP_4_3)
- NEWS:
- Bug fixing news.
-
- * (PHP_4_3)
- Zend/zend_highlight.c
- ZendEngine2/zend_highlight.c:
- MFH: Fixed bug #29607 (highlighting code with HEREDOC produces invalid
- output).
-
- * (PHP_5_0)
- ZendEngine2/zend_highlight.c:
- Fixed bug #29607 (highlighting code with HEREDOC produces invalid output).
-
-2004-08-11 Marcus Boerger <marcus.boerger@post.rwth-aachen.de>
-
- * sapi/apache2handler/sapi_apache2.c:
- TSRM fix
-
- * ZendEngine2/zend_execute.c:
- More meaningfull error message
-
-2004-08-11 Derick Rethans <php@derickrethans.nl>
-
- * (PHP_5_0)
- NEWS:
- - Tix Fypo
-
- * ext/standard/image.c:
- - Added a notice to getimagesize in case zlib is not available and a
- compressed
- SWF movie has been passed to the function.
-
- * (PHP_5_0)
- ext/standard/image.c:
- - MFH: Added a notice to getimagesize in case zlib is not available and a
- compressed SWF movie has been passed to the function.
-
- * (PHP_5_0)
- NEWS:
- - Reworded this a bit
-
-2004-08-11 Christian Stocker <chregu@phant.ch>
-
- * ext/dom/tests/dom005.phpt:
- fix test
-
-2004-08-11 Rasmus Lerdorf <rasmus@lerdorf.com>
-
- * main/SAPI.c:
- Reset global request_time in sapi_activate. Reset it in sapi_deactivate
- too, although I can't see why that would be necessary, but most of the
- other sapi globals are reset there as well.
-
-2004-08-11 Derick Rethans <php@derickrethans.nl>
-
- * (PHP_5_0)
- ZendEngine2/zend_alloc.h:
- - MFH: Patch to allow the Zend memory allocators to be disabled.
-
- * ZendEngine2/zend_alloc.h:
- - Added missing defines.
-
- * (PHP_4_3)
- Zend/zend_alloc.h:
- - Commit my patch to allow the Zend allocation service to be disabled.
-
-2004-08-11 Sara Golemon <php@alphaweb.net>
-
- * main/rfc1867.c:
- Minor format specifier fixes
-
- * (PHP_5_0)
- ext/standard/basic_functions.c:
- MFH: $errmsg should have been forced reference
-
- * ext/standard/basic_functions.c:
- Don't require the user to specify as a reference
-
-2004-08-10 Marcus Boerger <marcus.boerger@post.rwth-aachen.de>
-
- * (PHP_5_0)
- NEWS:
- BFN (small but important change)
-
-2004-08-10 Ilia Alshanetsky <ilia@prohost.org>
-
- * (PHP_5_0)
- NEWS:
- Bug fixing news.
-
- * (PHP_5_0)
- ZendEngine2/zend_highlight.c:
- MFH: Fixed bug #29606 (php_strip_whitespace() prints to stdout rather then
- returning the value).
-
- * ZendEngine2/zend_highlight.c:
- Fixed bug #29606 (php_strip_whitespace() prints to stdout rather then
- returning the value).
-
-2004-08-10 Rasmus Lerdorf <rasmus@lerdorf.com>
-
- * NEWS
- main/SAPI.c
- main/SAPI.h
- sapi/apache/mod_php5.c
- sapi/apache2filter/sapi_apache2.c
- sapi/apache2handler/sapi_apache2.c:
- Add SAPI hook to get the request time if provided by the web server,
- otherwise call time(0) on the first call and store it so subsequent
- calls will get the same time. Hook support for Apache1/2 included.
-
-2004-08-10 Dmitry Stogov <dmitry@zend.com>
-
- * NEWS:
- Changed bugs order.
-
- * (PHP_5_0)
- NEWS:
- Fixed bug #28969 (Wrong data encoding of special characters)
-
- * NEWS:
- Fixed bug #28969 (Wrong data encoding of special characters).
-
- * NEWS:
- Fixed bug #29256 (SOAP HTTP Error when envelop size is more than 24345
- bytes)
-
-2004-08-10 Wez Furlong <wez.php@thebrainroom.net>
-
- * (PHP_5_0)
- NEWS:
- BFN
-
- * main/streams/xp_socket.c:
- Fix for #29256 from Dmitry, very slightly modified
-
-2004-08-10 Christian Stocker <chregu@phant.ch>
-
- * ext/xsl/xsltprocessor.c:
- Fix segfault on error in xslt
-
-2004-08-10 Andi Gutmans <andi@zend.com>
-
- * (PHP_5_0)
- configure.in
- ZendEngine2/zend.h
- main/php_version.h:
- - Back to -dev
-
- * (PHP_5_0)
- NEWS
- configure.in
- ZendEngine2/zend.h
- main/php_version.h:
- - 5.0.1RC1
-
-2004-08-10 Marcus Boerger <marcus.boerger@post.rwth-aachen.de>
-
- * ZendEngine2/zend_execute.c:
- - Fix warnings
-
-2004-08-10 Andi Gutmans <andi@zend.com>
-
- * (PHP_4_3)
- INSTALL
- NEWS
- win32/install.txt:
- - MF PHP_5_0
-
-2004-08-10 Moriyoshi Koizumi <moriyoshi@at.wakwak.com>
-
- * (PHP_4_3)
- NEWS
- ext/standard/array.c:
- - MFH: Bugfix #29493 (extract(array, EXTR_REFS) misbehaves with elements
- referred twice or more times)
-
- * (PHP_5_0)
- ext/standard/array.c:
- - Bugfix #29493 (extract(array, EXTR_REFS) misbehaves with elements
- referred
- twice or more times)
-
- * ext/standard/array.c:
- - Bugfix #29493 (extract(array, EXTR_REFS) misbehaves with elements
- referred
- twice or more times). (Patch inspired by Michael Manley. Thanks.)
-
-2004-08-10 Andi Gutmans <andi@zend.com>
-
- * INSTALL
- NEWS
- win32/install.txt:
- - MFB
-
- * (PHP_5_0)
- INSTALL
- NEWS
- win32/install.txt:
- - The documentation team has re-wroten the installation part of the manual.
-
-2004-08-10 Ilia Alshanetsky <ilia@prohost.org>
-
- * (PHP_4_3)
- NEWS
- php.ini-dist
- php.ini-dist
- php.ini-recommended
- php.ini-recommended:
- MFH: Fixed bug #29581 (Typo inside php.ini comments for mysql.trace_mode).
-
- * php.ini-dist
- php.ini-recommended:
- Fixed bug #29581 (Typo inside php.ini comments for mysql.trace_mode).
-
-2004-08-09 Andi Gutmans <andi@zend.com>
-
- * (PHP_5_0)
- NEWS:
- - Update NEWS
-
- * (PHP_5_0)
- ext/standard/credits.c:
- Update credits for php docs
-
- * (PHP_4_3)
- ext/standard/credits.c:
- - Update credits for PHP docs
-
-2004-08-09 Derick Rethans <php@derickrethans.nl>
-
- * NEWS:
- - Fixed speling and some reordering
-
-2004-08-09 Dmitry Stogov <dmitry@zend.com>
-
- * (PHP_5_0)
- NEWS:
- Included ext/soap fixes from CVS HEAD.
-
-2004-08-09 Georg Richter <georg@mysql.com>
-
- * (PHP_5_0)
- NEWS
- ext/mysqli/mysqli.c
- ext/mysqli/mysqli.c:
- fixed bug #29577 (MYSQLI_CLIENT_FOUND_ROWS undefined)
-
-2004-08-08 Ilia Alshanetsky <ilia@prohost.org>
-
- * pear/tests/pear_config.phpt
- pear/tests/pear_config_1.1.phpt
- pear/tests/pear_registry_1.1.phpt:
- When skip condition is met, stop.
-
- * ext/standard/math.c:
- MFB: removed \r characters.
-
- * (PHP_5_0)
- ext/standard/math.c:
- Remove \r characters from file.
-
-2004-08-08 Christian Stocker <chregu@phant.ch>
-
- * (PHP_5_0)
- NEWS:
- Fixed bug #29573.
-
- * (PHP_5_0)
- ext/xsl/xsltprocessor.c:
- MFH (fix for Bug #29573 : Segmentation fault when php function(called from
- XSLT templat) throw exception
- and Zero Byte Memory Leaks)
-
- * ext/xsl/xsltprocessor.c:
- - Fix bug #29573: Segmentation fault when php function(called from XSLT
- templat) throw exception
- - Fix some 0 Byte Memory Leaks
-
-2004-08-07 Wez Furlong <wez.php@thebrainroom.net>
-
- * (PHP_5_0)
- NEWS:
- BFN
-
- * (PHP_5_0)
- ext/com_dotnet/com_dotnet.c:
- MFH: Fix for Bug #29490 from Michael Sisolak
-
- * ext/com_dotnet/com_dotnet.c:
- Fix for Bug #29490 from Michael Sisolak.
- Another fine patch; thanks Michael.
-
-2004-08-07 Sara Golemon <php@alphaweb.net>
-
- * ext/standard/basic_functions.c
- ext/standard/basic_functions.h:
- Fix inet_pton/ntop() on BSD
-
- * ext/standard/basic_functions.c:
- Binary safety fix for inet_pton()
-
- * NEWS
- ext/standard/basic_functions.c
- ext/standard/basic_functions.h:
- New Functions inet_pton() and inet_ntop()
-
-2004-08-07 Andi Gutmans <andi@zend.com>
-
- * ZendEngine2/zend_alloc.h:
- - Commit Derick's patch for allowing Zend to use regular libc memory
- - allocation functions. Mainly useful in conjunction with tools such as
- - valgrind which enables us to find bugs we might not find with the
- - current memory managers boundary protection.
-
-2004-08-06 Sara Golemon <php@alphaweb.net>
-
- * ext/standard/dns.c:
- Add A6 support, fix IPv6 address parsing, and improve define compatability
-
- * ext/simplexml/simplexml.c:
- ZTS Fix
-
-2004-08-06 Wez Furlong <wez.php@thebrainroom.net>
-
- * (PHP_5_0)
- ext/standard/streamsfuncs.c:
- MFH: avoid possible segfault with stream_socket_client and bogus flags.
-
- * ext/standard/streamsfuncs.c:
- Avoid possible segfault when using stream_socket_client with bogus flags.
-
-2004-08-05 Ilia Alshanetsky <ilia@prohost.org>
-
- * ext/simplexml/php_simplexml_exports.h
- ext/simplexml/simplexml.c:
- php_error() -> php_error_docref()
-
-2004-08-05 Gabor Hojtsy <gabor@hojtsy.hu>
-
- * ext/standard/credits.c:
- update documentation credits, mentioning that more contributors are listed
- in the manual
-
-2004-08-05 Antony Dovgal <tony2001@phpclub.net>
-
- * (PHP_5_0)
- README.CVS-RULES
- README.CVS-RULES:
- MFH: remove all references to @ thing, as it's not recommended
-
- * README.CVS-RULES:
- remove all references to @ thing, as it's not recommended.
- always add it to NEWS yourself please (c) Derick =)
-
- * NEWS:
- news entry
-
- * ext/xsl/xsltprocessor.c:
- change xsl_xsltprocessor_set_parameter() to support parameter->value arrays
- add test for it
-
-2004-08-05 Wez Furlong <wez.php@thebrainroom.net>
-
- * win32/syslog.reg:
- Generate a .reg file for the syslog stuff
- NB: still need a solution for zts and non-zts on the same machine.
-
-2004-08-05 Ilia Alshanetsky <ilia@prohost.org>
-
- * ZendEngine2/zend_builtin_functions.c:
- Eliminate unneeded variable.
-
-2004-08-04 Marcus Boerger <marcus.boerger@post.rwth-aachen.de>
-
- * ZendEngine2/zend_reflection_api.c
- ZendEngine2/tests/bug29523.phpt:
- - Fix bug #29523 (ReflectionParameter::isOptional() is incorrect)
-
-2004-08-04 Frank M. Kromann <frank@kromann.info>
-
- * (PHP_5_0)
- ext/iconv/config.w32
- ext/iconv/php_iconv.def:
- MFH: Move iconv exports to the iconv extension and make libxml depend on
- iconv
-
- * ext/iconv/config.w32
- ext/iconv/php_iconv.def:
- Move iconv exports to the iconv extension
-
-2004-08-04 Antony Dovgal <tony2001@phpclub.net>
-
- * ext/simplexml/simplexml.c:
- nuke unused variable
-
-2004-08-04 Zeev Suraski <zeev@zend.com>
-
- * ext/simplexml/simplexml.c
- ext/simplexml/simplexml.c:
- Fix prototypes
-
-2004-08-04 Georg Richter <georg@mysql.com>
-
- * ext/mysqli/mysqli.c:
- forgot to remove debug variable :( (Thx to Derick)
-
- * NEWS
- ext/mysqli/mysqli.c
- ext/mysqli/mysqli.c:
- fixed bug #29522
-
- * ext/mysqli/mysqli.c:
- fixed properties when connect wasn't called
-
-2004-08-04 Ilia Alshanetsky <ilia@prohost.org>
-
- * (PHP_5_0)
- ext/standard/sunfuncs.c:
- MFH: Fixed argument handling in sun* functions.
-
- * ext/standard/sunfuncs.c:
- Fixed argument handling in sun* functions.
-
-2004-08-03 Edin Kadribasic <edink@emini.dk>
-
- * (PHP_5_0)
- NEWS:
- Typofix
-
-2004-08-03 Frank M. Kromann <frank@kromann.info>
-
- * (PHP_4_3)
- ext/iconv/iconv.dsp:
- Oops. remember to save the project file before commiting.
-
- * (PHP_4_3)
- ext/iconv/iconv.dsp:
- Updating library name to iconv.lib
-
-2004-08-03 Marcus Boerger <marcus.boerger@post.rwth-aachen.de>
-
- * ZendEngine2/ZEND_CHANGES:
- Update
-
- * (PHP_5_0)
- ZendEngine2/zend_builtin_functions.c
- ZendEngine2/tests/bug29505.phpt:
- - MFH Bug #29505 get_class_vars() severely broken when used with arrays
-
- * ZendEngine2/tests/bug29505.phpt:
-
- Add new test
-
- * ZendEngine2/zend_builtin_functions.c:
- - Fixed Bug #29505 get_class_vars() severely broken when used with arrays
-
- * NEWS
- NEWS:
- BFN
-
-2004-08-03 Wez Furlong <wez.php@thebrainroom.net>
-
- * ext/com_dotnet/com_dotnet.c:
- Even more verbosity...
-
- * ext/com_dotnet/com_dotnet.c:
- Even more verbosity in case of error
-
-2004-08-03 Antony Dovgal <tony2001@phpclub.net>
-
- * ext/standard/mail.c:
- fix typo in mail.c: mail_force_extra_parameters ->
- mail.force_extra_parameters
-
- * (PHP_5_0)
- php.ini-dist
- php.ini-recommended:
- MFH: fix typo in php.ini-dist & php.ini-recommended
-
- * php.ini-dist
- php.ini-recommended:
- fix typo in php.ini: paramAters -> paramEters
-
-2004-08-03 Greg Beaver <greg@chiaraquartet.net>
-
- * (PHP_5_0)
- pear/go-pear.bat:
- commit for win32 - binary so line endings are always preserved - ..and in
- PHP_5_0, where it also belongs
-
- * pear/go-pear.bat:
-
- commit for win32 - binary so line endings are always preserved - this time
- on HEAD, where it belongs
-
- * pear/go-pear.bat
- pear/go-pear.bat:
-
- file go-pear.bat was initially added on branch PHP_4_3.
-
-2004-08-03 Frank M. Kromann <frank@kromann.info>
-
- * ext/mime_magic/mime_magic.c:
- sys/stat.h is includes in php_streams.h no need to do that again.
-
-2004-08-03 Wez Furlong <wez.php@thebrainroom.net>
-
- * ext/ming/config.w32:
- Avoid possible exception
-
-2004-08-02 Marcus Boerger <marcus.boerger@post.rwth-aachen.de>
-
- * ZendEngine2/zend_reflection_api.c:
- - Add methods to check parameter count
-
-2004-08-02 Ilia Alshanetsky <ilia@prohost.org>
-
- * (PHP_5_0)
- ext/sqlite/sqlite.c:
- MFH: Allow sqlite_fetch_column_types() to properly handle table names with
- spaces in them.
-
- * ext/sqlite/sqlite.c:
- Allow sqlite_fetch_column_types() to properly handle table names with
- spaces in them.
-
-2004-08-02 Marcus Boerger <marcus.boerger@post.rwth-aachen.de>
-
- * (PHP_5_0)
- ZendEngine2/zend_compile.c:
- MFH Change to use memcmp instead of strcmp
-
- * ZendEngine2/zend_compile.c:
- - Change to use memcmp instead of strcmp
-
-2004-08-02 Wez Furlong <wez.php@thebrainroom.net>
-
- * ext/com_dotnet/com_dotnet.c:
- Better error reporting
-
-2004-08-02 Andi Gutmans <andi@zend.com>
-
- * ZendEngine2/zend_compile.c:
- - Fix typo
-
-2004-08-02 Marcus Boerger <marcus.boerger@post.rwth-aachen.de>
-
- * ZendEngine2/zend_language_parser.y
- ZendEngine2/zend_language_scanner.l:
- - Remove all for now
-
- * tests/classes/__call_002.phpt
- tests/classes/__set__get_002.phpt
- tests/classes/__set__get_003.phpt
- tests/classes/destructor_visibility_001.phpt
- tests/classes/destructor_visibility_002.phpt
- tests/classes/destructor_visibility_003.phpt:
- MFB Enforce protocol of magic methods/classes
-
- * ZendEngine2/zend_compile.c
- ZendEngine2/zend_compile.h
- ZendEngine2/zend_execute_API.c
- ext/mbstring/tests/htmlent.phpt
- tests/classes/ctor_failure.phpt:
- MFB: Enforce protocol on magic methods/functions
-
-2004-08-02 Sascha Schumann <sascha@schumann.cx>
-
- * ext/session/session.c:
- fix empty_string issue
-
- Patch submitted by Antony Dovgal <tony2001@phpclub.net>
-
- * ext/session/mod_files.c:
- don't read empty files
-
- 0 malloc noticed by Antony Dovgal <tony2001@phpclub.net>
-
-2004-08-02 Ilia Alshanetsky <ilia@prohost.org>
-
- * (PHP_4_3)
- Zend/zend_execute.c
- ZendEngine2/zend_execute.c:
- MFH: A gentler (performance wise) allocation of buffer for temp variables.
-
- * ZendEngine2/zend_execute.c:
- A gentler (performance wise) allocation of buffer for temp variables.
-
-2004-08-01 Marcus Boerger <marcus.boerger@post.rwth-aachen.de>
-
- * tests/classes/__call_002.phpt
- tests/classes/__call_002.phpt
- tests/classes/__set__get_002.phpt
- tests/classes/__set__get_002.phpt
- tests/classes/__set__get_003.phpt
- tests/classes/__set__get_003.phpt
- tests/classes/ctor_failure.phpt
- tests/classes/destructor_visibility_001.phpt
- tests/classes/destructor_visibility_001.phpt
- tests/classes/destructor_visibility_002.phpt
- tests/classes/destructor_visibility_002.phpt
- tests/classes/destructor_visibility_003.phpt
- tests/classes/destructor_visibility_003.phpt:
-
- file __call_002.phpt was initially added on branch PHP_5_0.
-
- * (PHP_5_0)
- ZendEngine2/zend_compile.c
- ZendEngine2/zend_compile.h
- ZendEngine2/zend_execute_API.c:
- - Enforce protocol on magic methods/functions
-
-2004-08-01 Wez Furlong <wez.php@thebrainroom.net>
-
- * win32/.cvsignore:
- More hoops for VC6
-
-2004-07-31 Wez Furlong <wez.php@thebrainroom.net>
-
- * win32/wsyslog.c:
- Fix bug #8314: sane syslog output to the WinNT event log.
-
- Big fat note: if you're building from a .dsp, you need to replicate
- the custom build step that uses MC to generate the message catalog
-
- To make use of this fix, you need to register the event source; running
- "nmake
- install" will handle this for you (if you also build the win32std
- extension
- from pecl).
-
- I'll arrange with Phil to have the installer handle this registration too.
-
- * pear/go-pear-list.php:
- Un-bork
-
- * ext/standard/basic_functions.c
- ext/standard/streamsfuncs.c
- win32/globals.c
- win32/php_win32_globals.h:
- Allow win32 stuff to build non-zts.
- Fix stream crypto func (again? didn't I already commit that?)
-
- * ext/com_dotnet/com_persist.c
- ext/com_dotnet/com_wrapper.c:
- Allow COM to build under non-zts.
- Thanks Frank.
-
- * main/streams/xp_socket.c:
- zts fix...
-
- * main/streams/transports.c
- main/streams/xp_socket.c:
- Misc sendto/recvfrom tweaks that have been pending here for a while...
-
- * main/streams/xp_socket.c:
- Make sure this is initialized...
-
- * main/streams/plain_wrapper.c:
- Implement an fstat cache for plain files.
-
-2004-07-30 Andi Gutmans <andi@zend.com>
-
- * win32/php5dllts.dsp:
- - Add globals.c
-
-2004-07-30 Frank M. Kromann <frank@kromann.info>
-
- * ext/standard/file.h:
- Adding missing PHPAPI for non ZTS builds
-
-2004-07-30 Andi Gutmans <andi@zend.com>
-
- * ZendEngine2/zend_execute.c
- ZendEngine2/zend_execute_API.c
- ZendEngine2/zend_ptr_stack.c
- ZendEngine2/zend_ptr_stack.h:
- - More ptr_stack optimizations and cleanups
-
- * ZendEngine2/zend_alloc.c
- ZendEngine2/zend_alloc.h
- ZendEngine2/zend_execute.c
- ZendEngine2/zend_fast_cache.h
- ZendEngine2/zend_ptr_stack.h:
- - Improve performance by inlining zend_ptr_stack_n_push(). var_args can
- usually not be inlined by compilers.
-
-2004-07-30 Frank M. Kromann <frank@kromann.info>
-
- * (PHP_4_3)
- win32/php_win32_globals.h:
- Add missing header for def. of struct timeval.
-
- * (PHP_4_3)
- win32/php4dllts.dsp:
- Adding new win32 globals to project
-
- * (PHP_4_3)
- ext/standard/basic_functions.c:
- Add missing header for win32 builds
-
- * win32/globals.c
- win32/globals.c
- win32/php_win32_globals.h
- win32/php_win32_globals.h:
- Fix line endings
-
-2004-07-30 Edin Kadribasic <edink@emini.dk>
-
- * win32/install.txt:
- Nuke references to InstallShield
-
- * win32/install.txt:
- Update for php5
-
- * win32/install.txt:
- s/php.exe/php-cgi.exe
-
-2004-07-30 Ilia Alshanetsky <ilia@prohost.org>
-
- * (PHP_4_3)
- NEWS
- ext/standard/image.c
- ext/standard/image.c:
- MFH: Fixed bug #29443 (Sanity check for wbmp detection).
-
- * ext/standard/image.c:
- Fixed bug #29443 (Sanity check for wbmp detection).
-
-2004-07-29 Edin Kadribasic <edink@emini.dk>
-
- * ext/gettext/gettext.c:
- Fixed bug #29264. Newer libintl redefines function names so all
- PHP gettext function names become prefixed with libintl_
-
- * (PHP_5_0)
- NEWS
- ext/informix/config.w32:
- MFH: Fix informix compilation on Windows (bug #29340)
-
- * ext/informix/config.w32:
- Fix compilation on Windows (bug #29340)
-
-2004-07-29 Timm Friebe <thekid@thekid.de>
-
- * (PHP_5_0)
- ext/sybase_ct/php_sybase_ct.c:
- - MFH:
- . Fixed bug #29064 (Exact numeric/decimal/money datatypes lose
- precision)
- . Fixed bug #27843 (sybase_query() triggers (spurious?) notices when
- query is a stored procedure)
- . Fixed multiple memory leaks with sybase_unbuffered_query()
- . Changed sybase_query() to ignore store_results = false in buffering
- mode, it would yield unpredictable results
- . Fixed sybase_unbuffered_query() when used with store_results = false
- . Changed sybase_fetch_object() to ignore second argument when passed
- as NULL
- . Made sybase_data_seek() error message more verbose
- . Fixed memory leak in shutdown when not all rows where selected in an
- unbuffered query
-
- * ext/sybase_ct/php_sybase_ct.c:
- - Fixed bug #29064 (Exact numeric/decimal/money datatypes lose precision)
- - Fixed bug #27843 (sybase_query() triggers (spurious?) notices when
- query is a stored procedure)
- - Fixed multiple memory leaks with sybase_unbuffered_query()
- - Changed sybase_query() to ignore store_results = false in buffering
- mode, it would yield unpredictable results
- - Fixed sybase_unbuffered_query() when used with store_results = false
- - Changed sybase_fetch_object() to ignore second argument when passed
- as NULL
- - Made sybase_data_seek() error message more verbose
- - Fixed memory leak in shutdown when not all rows where selected in an
- unbuffered query
-
-2004-07-29 Marcus Boerger <marcus.boerger@post.rwth-aachen.de>
-
- * ZendEngine2/zend_hash.c:
- - Increase performance of *sort() and some internal sort operations.
-
-2004-07-29 Sara Golemon <php@alphaweb.net>
-
- * ZendEngine2/zend_compile.c
- ZendEngine2/zend_compile.h
- ZendEngine2/zend_execute.c
- ZendEngine2/zend_language_parser.y
- ZendEngine2/zend_language_scanner.l
- ZendEngine2/zend_opcode.c:
- Revert goto opcode
-
- * ZendEngine2/zend_execute.c:
- &tmp and label are the same thing, don't free it till we're done with it.
-
- * ZendEngine2/zend_compile.c
- ZendEngine2/zend_execute.c:
- Plug some memory leaks and promote unknown label to E_ERROR.
- If someone tries to jump to a non-existant label execution really
- shouldn't try to carry on.
-
- * ZendEngine2/zend_compile.c
- ZendEngine2/zend_compile.h
- ZendEngine2/zend_execute.c
- ZendEngine2/zend_language_parser.y
- ZendEngine2/zend_language_scanner.l
- ZendEngine2/zend_opcode.c:
- Add goto operator by popular request.
-
-2004-07-29 Wez Furlong <wez.php@thebrainroom.net>
-
- * ext/com_dotnet/com_handlers.c
- ext/com_dotnet/com_wrapper.c:
- Fix my favourite call user func mistake
-
- * ext/standard/basic_functions.c:
- Missing ifdef; thanks Tony
-
-2004-07-29 Christian Stocker <chregu@phant.ch>
-
- * NEWS:
- Remove News entry, which is already in 5.0
-
-2004-07-29 Wez Furlong <wez.php@thebrainroom.net>
-
- * ext/com_dotnet/com_wrapper.c:
- Use the correct lengths when building the name -> dispid mapping
-
- * win32/globals.c:
- Missing return statement
-
- * ext/standard/basic_functions.c
- ext/standard/syslog.c
- win32/globals.c
- win32/php_win32_globals.h
- win32/pwd.c
- win32/time.c
- win32/wsyslog.c:
- Misc. win32 thread safety fixes.
-
-2004-07-29 Ilia Alshanetsky <ilia@prohost.org>
-
- * (PHP_5_0)
- NEWS
- ext/standard/array.c:
- MFH: Fixed but #29437 (Possible crash inside array_walk_recursive()).
-
- * ext/standard/array.c:
- Fixed but #29437 (Possible crash inside array_walk_recursive()).
-
-2004-07-29 Wez Furlong <wez.php@thebrainroom.net>
-
- * (PHP_5_0)
- NEWS:
- BFN
-
-2004-07-28 Wez Furlong <wez.php@thebrainroom.net>
-
- * (PHP_5_0)
- ext/com_dotnet/com_extension.c
- ext/com_dotnet/com_handlers.c
- ext/com_dotnet/com_variant.c
- ext/com_dotnet/com_wrapper.c:
- MFH:
-
- * (PHP_5_0)
- sapi/activescript/CREDITS
- sapi/activescript/EXPERIMENTAL
- sapi/activescript/README
- sapi/activescript/classfactory.cpp
- sapi/activescript/config.w32
- sapi/activescript/php5activescript.c
- sapi/activescript/php5activescript.def
- sapi/activescript/php5activescript.dsp
- sapi/activescript/php5activescript.h
- sapi/activescript/php5as_classfactory.h
- sapi/activescript/php5as_scriptengine.h
- sapi/activescript/scriptengine.cpp:
- Moved to PECL
-
-2004-07-28 Ilia Alshanetsky <ilia@prohost.org>
-
- * ext/standard/streamsfuncs.c:
- Better address availability check.
-
-2004-07-28 Wez Furlong <wez.php@thebrainroom.net>
-
- * main/network.c:
- Ensure that port numbers get set in the peer/socket name functions.
- (duh!)
-
-2004-07-28 Ilia Alshanetsky <ilia@prohost.org>
-
- * (PHP_5_0)
- ext/standard/streamsfuncs.c:
- MFH: Fixed possible crash in stream_socket_recvfrom() when length
- parameter has a negative value.
-
- * ext/standard/streamsfuncs.c:
- Fixed possible crash in stream_socket_recvfrom() when length parameter has
- a negative value.
-
-2004-07-28 Wez Furlong <wez.php@thebrainroom.net>
-
- * main/network.c:
- Fix #29431: crash when parsing an invalid network address
-
- * ZendEngine2/zend_ini.c:
- Fix: ini entries for dl()'d modules now work under ZTS
- Side-effect: avoid possible crashes when multiple threads load/unload
- modules and mess with the global hash table.
-
-2004-07-28 Andi Gutmans <andi@zend.com>
-
- * (PHP_4)
- Zend/zend.h:
- - Use native MAC OS X DSO
-
- * (PHP_4_3)
- Zend/zend.h
- ZendEngine2/zend.h
- ZendEngine2/zend.h:
- - Fix MAC OSX to always use native DSO loading
-
-2004-07-28 Christian Stocker <chregu@phant.ch>
-
- * (PHP_5_0)
- NEWS
- ext/xsl/php_xsl.c
- ext/xsl/php_xsl.h
- ext/xsl/xsltprocessor.c:
- MFH
- Fixed bug #29409 (Segfault in PHP functions called from XSLT). (Rob)
-
- * NEWS
- ext/xsl/php_xsl.c
- ext/xsl/php_xsl.h
- ext/xsl/xsltprocessor.c:
- Fix for bug #29409 (Segfault in PHP functions called from XSLT). (by Rob)
-
-2004-07-28 Wez Furlong <wez.php@thebrainroom.net>
-
- * sapi/activescript/CREDITS
- sapi/activescript/EXPERIMENTAL
- sapi/activescript/README
- sapi/activescript/classfactory.cpp
- sapi/activescript/config.w32
- sapi/activescript/marshal.cpp
- sapi/activescript/php5activescript.c
- sapi/activescript/php5activescript.def
- sapi/activescript/php5activescript.dsp
- sapi/activescript/php5activescript.h
- sapi/activescript/php5as_classfactory.h
- sapi/activescript/php5as_scriptengine.h
- sapi/activescript/scriptengine.cpp:
- Move activescript sapi to PECL
-
- * sapi/activescript/README
- sapi/activescript/classfactory.cpp
- sapi/activescript/scriptengine.cpp:
- - Rename ProgID from ActivePHP (tm) to PHPScript (bah)
- - Convert line-endings for error messages to CRLF
- - Misc other tweaks
-
-2004-07-28 Ilia Alshanetsky <ilia@prohost.org>
-
- * (PHP_5_0)
- NEWS
- ext/standard/datetime.c:
- MFH: Fixed bug #29342 (strtotime() does not handle empty date string
- properly).
-
- * ext/standard/datetime.c:
- Fixed bug #29342 (strtotime() does not handle empty date string properly).
-
-2004-07-27 Wez Furlong <wez.php@thebrainroom.net>
-
- * sapi/activescript/README
- sapi/activescript/marshal.cpp
- sapi/activescript/php5activescript.c
- sapi/activescript/php5as_scriptengine.h
- sapi/activescript/scriptengine.cpp:
- Tidy up a few loose ends.
- Override normal php.ini behaviour so that only the launching applications
- folder is searched; this avoids picking up a default php.ini with an
- execution
- time limit set.
-
- * ext/com_dotnet/com_extension.c:
- that's not my copy of the exception ctor, do don't fiddle its flags.
-
- * ext/com_dotnet/com_handlers.c:
- "better" "fix" for #29392.
- This fixes the crash; the sample script:
-
- $c = new COM('ADODB.Connection');
- echo $c;
-
- still does not work because the engine tries to call $c->__toString() and
- the
- ADODB object *might* implement that method, but doesn't know until you
- open the
- connection.
-
-2004-07-27 Ilia Alshanetsky <ilia@prohost.org>
-
- * (PHP_5_0)
- NEWS
- ext/sqlite/sqlite.c
- ext/sqlite/sqlite.c:
- MFH: Fixed bug 29395 (sqlite_escape_string() returns bogus data on empty
- strings).
-
- * ext/sqlite/sqlite.c:
- Fixed bug 29395 (sqlite_escape_string() returns bogus data on empty
- strings).
-
- Original Patch by: Tony
-
-2004-07-27 Marcus Boerger <marcus.boerger@post.rwth-aachen.de>
-
- * ZendEngine2/zend_exceptions.c:
- - Be specific about visibility
-
-2004-07-27 Ilia Alshanetsky <ilia@prohost.org>
-
- * ext/gd/config.m4:
- Added missing comma. Thanks Tony.
-
-2004-07-27 Wez Furlong <wez.php@thebrainroom.net>
-
- * sapi/activescript/README
- sapi/activescript/classfactory.cpp
- sapi/activescript/config.w32
- sapi/activescript/marshal.cpp
- sapi/activescript/php5activescript.c
- sapi/activescript/php5as_classfactory.h
- sapi/activescript/php5as_scriptengine.h
- sapi/activescript/scriptengine.cpp:
- Major re-jig.
- With thanks to Rob Richards for tracking down a couple of big bugs caused
- by
- teeny bits of code.
-
- * ext/com_dotnet/com_wrapper.c:
- protect caller from a potential bailout
-
- * ext/com_dotnet/com_handlers.c:
- Revert last fix, because it breaks dynamic methods
-
- * ext/com_dotnet/com_handlers.c:
- Fix #29392 COM behaved badly for non-existant methods
-
- * ZendEngine2/zend_builtin_functions.c:
- Fix two possible crashes. Latter is unlikely unless you are doing scary
- things, but former looks nasty.
-
-2004-07-27 Ilia Alshanetsky <ilia@prohost.org>
-
- * (PHP_4_3)
- NEWS
- ext/gd/config.m4
- ext/gd/config.m4
- ext/gd/gd.c
- ext/gd/gd.c:
- MFH: Fixed bug #29349 (imagecreatefromstring() crashes with external GD
- library).
-
- * ext/gd/config.m4
- ext/gd/gd.c:
- Fixed bug #29349 (imagecreatefromstring() crashes with external GD library)
-
- Original Patch By: adconrad at debian dot org
-
-2004-07-26 Stanislav Malyshev <stas@zend.com>
-
- * ZendEngine2/zend_interfaces.c:
- quick fix for #29382
-
-2004-07-26 Georg Richter <georg@mysql.com>
-
- * NEWS
- ext/mysqli/mysqli.c:
- fixed bug #29335
-
-2004-07-26 Andrey Hristov <php@hristov.com>
-
- * ext/standard/array.c:
- proto fix
- (thanks to dave%php.net for spotting)
-
-2004-07-26 Georg Richter <georg@mysql.com>
-
- * (PHP_5_0)
- NEWS
- ext/mysqli/mysqli_prop.c:
- MFH: fixed bug in mysqli->client_version
-
- * NEWS
- ext/mysqli/mysqli_prop.c:
- fixed bug in mysql->client_version
- added mysql->client_info property
-
-2004-07-25 Marcus Boerger <marcus.boerger@post.rwth-aachen.de>
-
- * (PHP_5_0)
- tests/classes/abstract_derived.phpt
- tests/classes/autoload_001.phpt
- tests/classes/autoload_002.phpt
- tests/classes/autoload_003.phpt
- tests/classes/autoload_004.phpt
- tests/classes/autoload_005.phpt
- tests/classes/ctor_failure.phpt
- tests/classes/destructor_and_echo.phpt:
- - Update/Add tests
-
- * tests/classes/autoload_001.phpt
- tests/classes/autoload_002.phpt
- tests/classes/autoload_003.phpt
- tests/classes/autoload_004.phpt:
- - Do not autoload classes in skip code
-
- * tests/classes/ctor_failure.phpt:
-
- - Add new test
-
- * tests/classes/autoload_005.phpt:
-
- - Add test
-
-2004-07-25 Ilia Alshanetsky <ilia@prohost.org>
-
- * (PHP_4_3)
- NEWS
- main/rfc1867.c
- main/rfc1867.c:
- MFH: Fixed bug #29369 (Uploaded files with ' or " in their names get their
- names truncated at those characters).
-
- * main/rfc1867.c:
- Fixed bug #29369 (Uploaded files with ' or " in their names get their names
- truncated at those characters).
-
-2004-07-25 Marcus Boerger <marcus.boerger@post.rwth-aachen.de>
-
- * ext/dom/php_dom.c:
- - Fixed Bug #29354 Exception constructor marked as both public and
- protected
-
- * ZendEngine2/zend_reflection_api.c:
- - Show visibility errors (try to fix #29354)
-
- * (PHP_5_0)
- NEWS:
- BFN
-
- * (PHP_5_0)
- ZendEngine2/zend_execute.c
- ZendEngine2/zend_objects_API.c
- ZendEngine2/zend_objects_API.h:
- - MFH: Fix bug #29368 : The destructor is called when an exception is
- thrown from the constructor
-
- * ZendEngine2/zend_execute.c
- ZendEngine2/zend_objects_API.c
- ZendEngine2/zend_objects_API.h:
- - Fix bug #29368 : The destructor is called when an exception is thrown
- from the constructor
-
- * tests/classes/destructor_and_echo.phpt:
-
- - Add new patch for reordered shutdown sequence
-
-2004-07-25 Christian Stocker <chregu@phant.ch>
-
- * NEWS
- ext/simplexml/simplexml.c:
- renamed registerNamespace() to registerXPathNamespace()
-
- * NEWS
- ext/simplexml/simplexml.c:
- added new method SimpleXMLElement->registerNamespace(string prefix, string
- uri)
- "registers a prefix <-> namespaceURI combination for use in a later xpath
- query. "
-
- * ext/xsl/php_xsl.c:
- set errorhandler to generic php_libxml_error_handler
-
-2004-07-25 Marcus Boerger <marcus.boerger@post.rwth-aachen.de>
-
- * ZendEngine2/zend.c
- ZendEngine2/zend.h
- ZendEngine2/zend_execute.h
- ZendEngine2/zend_execute_API.c
- main/main.c:
- - Execute destructors earlier (Florian Schaper, fschaper at intux org)
-
- * ZendEngine2/zend_reflection_api.c:
- - Add ReflectionParameter::isOptional() to test whether a parameter is
- optional and also show this information in export.
-
- * ZendEngine2/zend_exceptions.c:
- - Add optional parameters $filename and $lineno to ErrorException
- constructor to allow overwriting automatically retrieved information.
-
-2004-07-24 Rob Richards <rrichards@ctindustries.net>
-
- * sapi/activescript/classfactory.cpp
- sapi/activescript/php5activescript.dsp:
- fix build for VC++ 6
- update dsp (Enable IObjectSafety)
-
-2004-07-24 Wez Furlong <wez.php@thebrainroom.net>
-
- * sapi/activescript/config.w32:
- Enable IObjectSafety so that we can be used in the M$ scripting control.
- Thanks to Rob for checking this out.
-
-2004-07-24 Andrey Hristov <php@hristov.com>
-
- * ext/standard/array.c:
- make behavior a bit field
-
-2004-07-24 Sara Golemon <php@alphaweb.net>
-
- * ext/standard/ftp_fopen_wrapper.c:
- Oh by the way, only use proxy mode for reading...
-
- * NEWS
- ext/standard/ftp_fopen_wrapper.c
- ext/standard/http_fopen_wrapper.c:
- Add proxy support to ftp using http wrapper
-
-2004-07-23 Andi Gutmans <andi@zend.com>
-
- * ext/standard/tests/time/001.phpt:
- - There's no reason why gettimeofday() shouldn''t return the same time in
- successive calls; this test fails spuriously on Linux/x86_64 (which has
- a particularly fast gettimeofday() implementation).
- - Joe Orton <jorton@redhat>
-
-2004-07-23 Georg Richter <georg@mysql.com>
-
- * (PHP_5_0)
- ext/mysqli/mysqli_fe.c
- ext/mysqli/tests/bug29311.phpt:
- fixed bug #29311
-
- * NEWS
- ext/mysqli/mysqli.c
- ext/mysqli/mysqli_fe.c
- ext/mysqli/tests/bug29311.phpt:
- fixed bug #29311
- added support for Cursors (MySQL 5.0.x)
-
-2004-07-23 Marcus Boerger <marcus.boerger@post.rwth-aachen.de>
-
- * ZendEngine2/zend_execute.c:
- Fix 0 Byte leak after alloca to emalloc change
-
-2004-07-23 Edin Kadribasic <edink@emini.dk>
-
- * (PHP_4_3)
- ext/gd/gd.dsp:
- Fix .dsp
-
- * (PHP_5_0)
- ext/gd/gd.c:
- MFB: Updated version number
-
- * ext/gd/gd.c:
- Updated version number
-
-2004-07-23 Ilia Alshanetsky <ilia@prohost.org>
-
- * (PHP_4_3)
- NEWS
- ext/standard/url_scanner_ex.c
- ext/standard/url_scanner_ex.c
- ext/standard/url_scanner_ex.re
- ext/standard/url_scanner_ex.re:
- MFH: Fixed bug #29333 (output_buffering + trans_sess_id can corrupt output)
-
- * ext/standard/url_scanner_ex.c
- ext/standard/url_scanner_ex.re:
- Fixed bug #29333 (output_buffering + trans_sess_id can corrupt output).
-
-2004-07-22 Stefan Esser <sesser@suspekt.org>
-
- * ext/gd/gd.dsp:
- Fix .dsp
-
- * ext/gd/config.m4
- ext/gd/config.w32
- ext/gd/gd.dsp
- ext/gd/libgd/gd.h
- ext/gd/libgd/gd_gif_out.c
- ext/gd/libgd/gd_topal.c:
- Merge changes from GD 2.0.28
-
-2004-07-22 Marcus Boerger <marcus.boerger@post.rwth-aachen.de>
-
- * tests/classes/bug26737.phpt
- tests/classes/bug26737.phpt:
- Fix testcase
-
-2004-07-22 Wez Furlong <wez.php@thebrainroom.net>
-
- * NEWS:
- news...
-
- * ext/standard/basic_functions.c
- ext/standard/file.c
- ext/standard/streamsfuncs.c
- ext/standard/streamsfuncs.h:
- Added stream_context_get_default() which returns the default context
- option.
- You may then set options that affect streams operations for the whole
- script.
-
- Added stream_socket_enable_crypto() which allows you to turn on or off a
- crypto
- layer (eg: SSL/TLS) on stream, if supported by the underlying transport.
-
- Registered a bunch of constants for that.
-
-2004-07-22 Zeev Suraski <zeev@zend.com>
-
- * ZendEngine2/zend_object_handlers.c:
- Fix bug in handling of protected properties
-
- * win32/php5dllts.dsp:
- Fix Windows build
-
-2004-07-22 Georg Richter <georg@mysql.com>
-
- * (PHP_5_0)
- ext/mysqli/config.m4:
- MFH: changed warning (bug #29298) for outdated client library
-
- * ext/mysqli/config.m4:
- changed warning (bug #29298) for outdated client library
-
-2004-07-22 Sara Golemon <php@alphaweb.net>
-
- * (PHP_5_0)
- ext/mysqli/mysqli_api.c:
- MFH: This should fix binary safety for bound results.
-
- * ext/mysqli/mysqli_api.c:
- This should fix binary safety for bound results or may coogle strike me
- down.
-
-2004-07-21 Edin Kadribasic <edink@emini.dk>
-
- * configure.in
- main/php_version.h:
- HEAD is 5.1.0-dev now
-
- * sapi/isapi/php5isapi.c:
- Fix for #28929 by Michael Sisolak
-
- * ZendEngine2/zend_builtin_functions.c:
- Fixed build
-
-2004-07-21 Ilia Alshanetsky <ilia@prohost.org>
-
- * (PHP_4_3)
- NEWS
- ext/imap/php_imap.c
- ext/imap/php_imap.c:
- MFH: Fixed bug #29209 (imap_fetchbody() doesn't check message index).
-
- * ext/imap/php_imap.c:
- Fixed bug #29209 (imap_fetchbody() doesn't check message index).
-
-
-2004-07-21 Andrey Hristov <php@hristov.com>
-
- * NEWS
- ext/standard/array.c
- ext/standard/basic_functions.c
- ext/standard/php_array.h
- ext/standard/tests/array/array_diff_key.phpt
- ext/standard/tests/array/array_intersect_key.phpt:
- add array_:
- intersect_key()
- intersect_ukey()
- diff_key()
- diff_ukey()
- The first two by a patch of Cristiano Duarte. The second two were
- implemented in almost the same way except one small difference.
-
-2004-07-21 Marcus Boerger <marcus.boerger@post.rwth-aachen.de>
-
- * (PHP_5_0)
- NEWS:
- BFN
-
- * (PHP_5_0)
- ZendEngine2/zend_builtin_functions.c:
- MFH: Fixded #29291: get_class_vars() return names with NULLs
-
- * ZendEngine2/zend_builtin_functions.c:
- - Fixded #29291: get_class_vars() return names with NULLs
-
-2004-07-21 Stefan Esser <sesser@suspekt.org>
-
- * (PHP_4_3)
- ext/mssql/php_mssql.c
- ext/session/session.c
- ext/sybase/php_sybase_db.c
- ext/sybase_ct/php_sybase_ct.c
- ext/w32api/w32api.c
- main/main.c
- main/rfc1867.c
- sapi/apache/mod_php4.c:
- Merge all not yet merged security fixes into the 4_3 branch
-
-2004-07-21 Christian Stocker <chregu@phant.ch>
-
- * (PHP_5_0)
- run-tests.php:
- MFH. Fix for Bug 29010 "make test does not wait to email address" (by
- Sebastian Nohn)
-
- * run-tests.php:
- Fix for Bug 29010 "make test does not wait to email address" (by Sebastian
- Nohn)
-
-2004-07-21 Sara Golemon <php@alphaweb.net>
-
- * NEWS:
- MDTM added to ftp_url_stat
-
- * ext/standard/ftp_fopen_wrapper.c:
- Add MTDM support to ftp_fopen_wrapper::url_stat()
-
- * ext/zlib/zlib_filter.c:
- Oops, copy/paste typo
-
- * ext/bz2/bz2_filter.c
- ext/zlib/zlib_filter.c:
- Persistent mallocs can return NULL (on failure)
-
-2004-07-21 Ilia Alshanetsky <ilia@prohost.org>
-
- * ext/standard/sunfuncs.c:
- Abort earlier on invalid format.
-
-2004-07-20 Moriyoshi Koizumi <moriyoshi@at.wakwak.com>
-
- * ZendEngine2/zend_alloc.c
- ZendEngine2/zend_alloc.h:
- - Add safe_pemalloc()
-
- * (PHP_4_3)
- sapi/apache2handler/sapi_apache2.c:
- - MFH (sapi_apache2.c: 1.41): request_dtor() should be called if a fatal
- error occurs during activation phase.
-
- * (PHP_4_3)
- ext/ctype/ctype.c
- ext/ctype/ctype.c:
- - MFH (ctype.c: 1.31): Correct range checks.
- - MFH (ctype.c: 1.31): Normalize negative values.
-
- * ext/ctype/ctype.c:
- - Correct range checks.
- - Normalize negative values.
-
- * ext/standard/filters.c:
- - Cleanups.
-
- * ext/standard/filters.c
- ext/standard/filters.c:
- oops...
-
-2004-07-20 Marcus Boerger <marcus.boerger@post.rwth-aachen.de>
-
- * (PHP_5_0)
- NEWS
- NEWS:
- BFN
-
- * ext/standard/dl.c:
- - Need to set handle prior to calling zend_register_module_ex()
- (Marcus, Kamesh Jayachandran <kameshj at fastmail dot fm>)
-
-2004-07-20 Moriyoshi Koizumi <moriyoshi@at.wakwak.com>
-
- * (PHP_5_0)
- ext/iconv/iconv.c:
- - MFH (iconv.c: 1.119): Fix possible leaks / segfaults in persistent iconv
- filter.
-
- * ext/iconv/iconv.c:
- - Fix possible leaks / segfaults in persistent filter
-
-2004-07-20 Marcus Boerger <marcus.boerger@post.rwth-aachen.de>
-
- * ZendEngine2/zend_reflection_api.c:
- - Fixed bug 28895 again (long live the dead)
-
-2004-07-20 Moriyoshi Koizumi <moriyoshi@at.wakwak.com>
-
- * (PHP_5_0)
- ext/standard/filters.c:
- - MFH (filters.c: 1.41): Add more null checks.
-
- * ext/standard/filters.c:
- - Add more null checks.
-
- * (PHP_5_0)
- ext/standard/filters.c:
- - MFH (filters.c: 1.40): pemalloc() might return NULL
-
- * ext/standard/filters.c:
- - pemalloc() might return NULL.
-
-2004-07-20 Zeev Suraski <zeev@zend.com>
-
- * ZendEngine2/zend_exceptions.c:
- Fix prototypes
-
- * ZendEngine2/zend_exceptions.c:
- Add descriptions
-
-2004-07-20 Stanislav Malyshev <stas@zend.com>
-
- * ZendEngine2/zend_compile.c:
- add todo
-
- * (PHP_5_0)
- ZendEngine2/zend_ini.h
- ZendEngine2/zend_ini_parser.y:
- export ini parser
-
-2004-07-20 Sebastian Bergmann <sb@sebastian-bergmann.de>
-
- * (PHP_5_0)
- NEWS:
- BFN: Fixed ReflectionClass::getMethod() and ReflectionClass::getProperty()
- to raise an ReflectionException instead of returning NULL on failure.
-
-2004-07-20 Sara Golemon <php@alphaweb.net>
-
- * NEWS
- ext/bz2/bz2.c
- ext/bz2/bz2.dsp
- ext/bz2/bz2_filter.c
- ext/bz2/config.m4
- ext/bz2/config.w32
- ext/bz2/php_bz2.h
- ext/bz2/tests/bz2_filter_compress.phpt
- ext/bz2/tests/bz2_filter_decompress.phpt:
- Add bz2 stream filter support
-
- * ext/zlib/zlib_filter.c:
- Make persistency safe
-
-2004-07-20 Ilia Alshanetsky <ilia@prohost.org>
-
- * (PHP_4_3)
- NEWS
- ext/ctype/ctype.c
- ext/ctype/ctype.c:
- MFH: Fixed bug #29226 (ctype_* functions missing validation of numeric
- string representations).
-
- * ext/ctype/ctype.c:
- Fixed bug #29226 (ctype_* functions missing validation of numeric string
- representations).
-
-2004-07-19 Frank M. Kromann <frank@kromann.info>
-
- * ext/ming/ming.c:
- Fix compilation with older versions of libMing. Thanks Markus
-
- * ext/ming/ming.c:
- Sync. with the API of libMing 0.3b1
-
-2004-07-19 Sergey Kartashoff <gluke@mail.ru>
-
- * (PHP_5_0)
- ext/mnogosearch/php_mnogo.c:
- - A Bug #29147 was fixed. Thanks to Antony Dovgal <tony2001 at phpclub.net>
- for his patch.
-
-2004-07-19 Sebastian Bergmann <sb@sebastian-bergmann.de>
-
- * ZendEngine2/zend_reflection_api.c:
- Fix prototypes: Reflection_* -> Reflection*.
-
- * ZendEngine2/zend_reflection_api.c:
- Make ReflectionClass::getMethod() and ReflectionClass::getProperty() raise
- an ReflectionException instead of returning NULL on failure.
-
- * ZendEngine2/zend_reflection_api.c:
- Do not use contracted forms.
-
-2004-07-19 Moriyoshi Koizumi <moriyoshi@at.wakwak.com>
-
- * (PHP_5_0)
- ext/standard/tests/strings/bug29119.phpt:
- - MFH (bug29119.phpt: 1.2): Fix test name
-
- * ext/standard/tests/strings/bug29119.phpt:
- - Fix test name
-
- * (PHP_5_0)
- NEWS
- ext/standard/html.c
- ext/standard/tests/strings/bug29119.phpt:
- - MFH (html.c: 1.98, bug29199.phpt: 1.1): Fix bug #29199
- (html_entity_decode()
- misbehaves with UTF-8)
-
- * ext/standard/tests/strings/bug29199.phpt:
- - Oops, actual PR # is 29119, not 29199...
-
- * ext/standard/tests/strings/bug29119.phpt:
-
- - Oops, actual PR # is 29119, not 29199...
-
- * ext/standard/html.c
- ext/standard/tests/strings/bug29199.phpt:
- - Fix bug #29199 (html_entity_decode() misbehaves with UTF-8)
-
-2004-07-19 Stanislav Malyshev <stas@zend.com>
-
- * ZendEngine2/zend_ini.h
- ZendEngine2/zend_ini_parser.y:
- export INI parser
-
-2004-07-19 Dmitry Stogov <dmitry@zend.com>
-
- * NEWS:
- Fixed bug #28985 (__getTypes() returning nothing on complex WSDL).
-
-2004-07-19 Stanislav Malyshev <stas@zend.com>
-
- * ZendEngine2/zend_object_handlers.c:
- __set and __get will be called not only when variable doesn't exist but
- also when it's
- invisible
-
-2004-07-19 Andi Gutmans <andi@zend.com>
-
- * ZendEngine2/zend_extensions.h
- ZendEngine2/zend_modules.h:
- - Bump API number due to empty_string change
-
-2004-07-19 Dmitry Stogov <dmitry@zend.com>
-
- * NEWS:
- Fixed bugs #29109 and #29236. (WSDL cache failure)
-
-2004-07-19 Wez Furlong <wez.php@thebrainroom.net>
-
- * ext/com_dotnet/com_variant.c:
- Possible fix for #29258 (unverified)
- win32 people, please test (I have no working win32 build env right now)
-
-2004-07-19 Dmitry Stogov <dmitry@zend.com>
-
- * NEWS:
- Fixed bug #29061 (soap extension segfaults).
-
-2004-07-19 Moriyoshi Koizumi <moriyoshi@at.wakwak.com>
-
- * (PHP_5_0)
- ext/iconv/iconv.c:
- - MFH (iconv.c: 1.118): Fix a bug in iconv stream filter that prevents
- pending buckets from being processed.
-
- * ext/iconv/iconv.c:
- - Fix a bug in iconv stream filter that prevents pending buckets from being
- processed on flush operation (same issue pollita fixed several days
- ago).
-
-2004-07-19 Antony Dovgal <tony2001@phpclub.net>
-
- * ext/oci8/oci8.c:
- fix build
-
-2004-07-19 Andi Gutmans <andi@zend.com>
-
- * ZendEngine2/zend.c
- ZendEngine2/zend.h
- ZendEngine2/zend_API.h
- ZendEngine2/zend_alloc.h
- ZendEngine2/zend_execute.c
- ZendEngine2/zend_object_handlers.c
- ZendEngine2/zend_operators.c
- ZendEngine2/zend_variables.c
- ext/gd/gd.c
- ext/gd/gd_ctx.c
- ext/ircg/ircg.c
- ext/mbstring/php_mbregex.c
- ext/msql/php_msql.c
- ext/mssql/php_mssql.c
- ext/mysql/php_mysql.c
- ext/mysqli/mysqli_api.c
- ext/oci8/oci8.c
- ext/odbc/php_odbc.c
- ext/pcre/php_pcre.c
- ext/pgsql/pgsql.c
- ext/session/session.c
- ext/standard/file.c
- ext/standard/math.c
- ext/standard/reg.c
- ext/standard/string.c
- ext/standard/var_unserializer.c
- ext/standard/var_unserializer.re
- ext/sybase/php_sybase_db.c
- ext/sybase_ct/php_sybase_ct.c
- ext/wddx/wddx.c
- main/php_ini.c
- main/safe_mode.c
- sapi/apache/mod_php5.c
- sapi/apache2filter/php_functions.c
- sapi/apache2filter/sapi_apache2.c
- sapi/apache2handler/php_functions.c
- sapi/apache2handler/sapi_apache2.c
- sapi/apache_hooks/mod_php5.c:
- - Nuke empty_string. It is a reminanent from the time where RETURN_FALSE()
- used to return "" and not bool(false). It's not worth keeping it because
- STR_FREE() and zval_dtor() always have to check for it and it slows down
- the general case. In addition, it seems that empty_string has been
- abused
- quite a lot, and was used not only for setting zval's but generally in
- PHP code instead of "", which wasn't the intention. Last but not least,
- nuking empty_string should improve stability as I doubt every place
- correctly checked if they are not mistakenly erealloc()'ing it or
- calling efree() on it.
- NOTE: Some code is probably broken. Each extension maintainer should
- check and see that my changes are OK. Also, I haven't had time to touch
- PECL yet. Will try and do it tomorrow.
-
-2004-07-19 Moriyoshi Koizumi <moriyoshi@at.wakwak.com>
-
- * (PHP_5_0)
- ext/mbstring/config.m4:
- - MFH (config.m4: 1.52): Fix VPATH build. (patch by Joe Orton)
-
- * ext/mbstring/config.m4:
- - Fix VPATH build. (patch by Joe Orton)
-
-2004-07-18 Ilia Alshanetsky <ilia@prohost.org>
-
- * (PHP_4_3)
- NEWS
- ext/standard/formatted_print.c
- ext/standard/formatted_print.c
- ext/standard/tests/strings/bug22207.phpt
- ext/standard/tests/strings/bug22207.phpt
- ext/standard/tests/strings/bug28633.phpt
- ext/standard/tests/strings/bug28633.phpt:
- MFH: Fixed bug #28633 (sprintf incorrectly adding padding to floats).
-
- * ext/standard/formatted_print.c
- ext/standard/tests/strings/bug22207.phpt
- ext/standard/tests/strings/bug28633.phpt:
- Fixed bug #28633 (sprintf incorrectly adding padding to floats).
-
-2004-07-18 Rob Richards <rrichards@ctindustries.net>
-
- * ext/dom/documentfragment.c
- ext/dom/dom_fe.h:
- add appendXML() to DOMFragment (chregu)
-
-2004-07-18 Marcus Boerger <marcus.boerger@post.rwth-aachen.de>
-
- * EXTENSIONS
- ext/standard/credits_ext.h:
- Update
-
-2004-07-18 Wez Furlong <wez.php@thebrainroom.net>
-
- * ext/zlib/zlib_filter.c:
- not safe for persistent streams
-
-2004-07-18 Rob Richards <rrichards@ctindustries.net>
-
- * ext/xsl/config.w32:
- MFB: enable exslt support for win32 builds
- WS fixes for exslt tests
-
- * (PHP_5_0)
- ext/xsl/config.w32:
- enable exslt support for win32 builds
- WS fixes for exslt tests
-
- * ext/dom/document.c:
- MFB: add missing optional value param to createElementNS (chregu)
-
- * (PHP_5_0)
- ext/dom/document.c:
- add missing optional value param to createElementNS (chregu)
-
-2004-07-18 Marcus Boerger <marcus.boerger@post.rwth-aachen.de>
-
- * TODO-5.1:
- remove this entry
-
-2004-07-18 Wez Furlong <wez.php@thebrainroom.net>
-
- * acinclude.m4
- configure.in
- build/genif.sh
- build/order_by_dep.awk
- ext/dom/config.m4
- ext/simplexml/config.m4
- ext/xml/config.m4
- ext/xsl/config.m4:
- Implement extension load-order deps.
-
-2004-07-18 Andrey Hristov <php@hristov.com>
-
- * ext/standard/string.c
- ext/standard/tests/strings/explode.phpt:
- Add support for negative values of limit of explode(). If limit is negative
- then all components are returned except the last abs(limit) ones.
-
-2004-07-18 Sergey Kartashoff <gluke@mail.ru>
-
- * ext/mnogosearch/php_mnogo.c:
- - A Bug #29147 was fixed. Thanks to Antony Dovgal <tony2001 at phpclub.net>
- for his patch.
-
-2004-07-18 Wez Furlong <wez.php@thebrainroom.net>
-
- * ext/sqlite/libsqlite/src/parse.c:
- touch to avoid weird implicit makefile rule
-
- * (PECL_4_3)
- ext/sqlite/package.xml
- ext/sqlite/sqlite.c
- ext/sqlite/libsqlite/src/parse.c:
- prep for release.
- Touch parse.c to avoid weird implicit bison make rule breaking build
-
- * ext/standard/basic_functions.c:
- don't allocate 0 bytes here either
-
- * ZendEngine2/zend_execute_API.c:
- No point allocating 0 bytes
-
-2004-07-17 Moriyoshi Koizumi <moriyoshi@at.wakwak.com>
-
- * (PHP_5_0)
- sapi/apache2handler/sapi_apache2.c:
- - MFH (sapi_apache2.c: 1.41): request_dtor should be called if a fatal
- error
- occurs during activation phase.
-
- * sapi/apache2handler/sapi_apache2.c:
- - request_dtor() should be called if a fatal error occurs during activation
- phase.
-
-2004-07-17 Georg Richter <georg@mysql.com>
-
- * ext/mysqli/mysqli_api.c:
- fixed paraenthesis warning in mysql_stmt_attr_set/get
-
-2004-07-17 Sara Golemon <php@alphaweb.net>
-
- * ext/zlib/config.w32
- ext/zlib/zlib.dsp:
- Update windows build files for filter support
-
- * NEWS
- ext/zlib/config0.m4
- ext/zlib/php_zlib.h
- ext/zlib/zlib.c
- ext/zlib/zlib_filter.c
- ext/zlib/tests/zlib_filter_deflate.phpt
- ext/zlib/tests/zlib_filter_inflate.phpt:
- Add zlib stream filter support
-
-2004-07-16 Sara Golemon <php@alphaweb.net>
-
- * (PHP_5_0)
- NEWS:
- BFN
-
- * (PHP_5_0)
- ext/standard/filters.c:
- MFH: convert.* filters not consuming buckets_in on PSFS_FLUSH_*
-
- * ext/standard/filters.c:
- convert.* filters not consuming buckets_in on PSFS_FLUSH_*
-
-2004-07-16 Anantha Kesari H Y <hyanantha@novell.com>
-
- * ext/openssl/openssl.mak:
- NetWare specific openssl build file
-
-2004-07-16 Sebastian Bergmann <sb@sebastian-bergmann.de>
-
- * NEWS:
- (IMO) Better NEWS entry for true/false/null implementation change.
-
-2004-07-16 Marcus Boerger <marcus.boerger@post.rwth-aachen.de>
-
- * NEWS:
- Correct version
-
- * NEWS
- NEWS
- TODO-5.1:
- BFN
-
- * ZendEngine2/zend_language_parser.y
- ZendEngine2/zend_language_scanner.l:
- - Speed up by making null/false/true reserved word which allows to drop
- an opcode (FETCH_CONSTANT) for every usage.
-
- * ZendEngine2/zend_execute.c:
- Bugfix #28464 catch() does not catch exceptions by interfaces
-
-2004-07-16 Sara Golemon <php@alphaweb.net>
-
- * (PHP_4_3)
- NEWS
- ext/standard/filestat.c:
- Bugfix# 29114 Potential double free in php_stat
-
-2004-07-16 Ilia Alshanetsky <ilia@prohost.org>
-
- * (PHP_4_3)
- NEWS
- Zend/zend_operators.h
- tests/lang/bug28800.phpt:
- MFH: Fixed bug #28800 (strings beginning with "inf" improperly converted).
-
- * ZendEngine2/zend_operators.h
- tests/lang/bug28800.phpt:
- MFB: Fixed bug #28800 (strings beginning with "inf" improperly converted).
-
- * (PHP_5_0)
- ZendEngine2/zend_operators.h
- tests/lang/bug28800.phpt
- tests/lang/bug28800.phpt:
- Fixed bug #28800 (strings beginning with "inf" improperly converted).
-
-2004-07-15 Andi Gutmans <andi@zend.com>
-
- * ZendEngine2/zend_alloc.c
- ZendEngine2/zend_alloc.h:
- - Improve performance of zend_alloc by stopping the size from being a bit
- - field.
-
-2004-07-15 Zeev Suraski <zeev@zend.com>
-
- * ext/sqlite/libsqlite/src/sqlite.w32.h:
- Fix sqlite build
-
-2004-07-15 Marcus Boerger <marcus.boerger@post.rwth-aachen.de>
-
- * main/main.c:
- - Use ErrorException instead of Exception
-
- * ZendEngine2/zend_exceptions.c
- ZendEngine2/zend_exceptions.h:
- - Add new class ErrorException to encapsulate errors in exceptions
-
- * TSRM/TSRM.c:
- Apply the fix
-
- * ZendEngine2/zend_dynamic_array.h:
- - Fix prototype
-
- * php.ini-dist
- php.ini-recommended:
- Synch comments
-
-2004-07-15 Dan Kalowsky <dank@deadmime.org>
-
- * ext/odbc/php_odbc.c:
- Bug 29058 (patch submitted by bug reporter)
-
-2004-07-15 Magnus Määttä <novell@kiruna.se>
-
- * tests/classes/bug26737.phpt:
- Test for bug 26737:
- Protected and private variables are not saved on serialization
- when a user defined __sleep is used.
-
-2004-07-15 Antony Dovgal <tony2001@phpclub.net>
-
- * ext/oci8/oci8.c:
- fix #29012 (Potential race during first connection) thanks to cjbj at
- hotmail dot com
-
-2004-07-15 Ilia Alshanetsky <ilia@prohost.org>
-
- * (PHP_4_3)
- NEWS
- ext/standard/strnatcmp.c
- ext/standard/tests/strings/bug29075.phpt:
- MFH: Fixed Bug #29075 (strnatcmp() incorrectly handles whitespace).
-
- * ext/standard/strnatcmp.c
- ext/standard/tests/strings/bug29075.phpt:
- Fixed Bug #29075 (strnatcmp() incorrectly handles whitespace).
-
-
-2004-07-14 Edin Kadribasic <edink@emini.dk>
-
- * (PHP_4_3)
- sapi/cgi/cgi_main.c
- sapi/cli/php_cli.c:
- MFH: Made php -m output sorted case-insensitevly
-
- * sapi/cgi/cgi_main.c
- sapi/cli/php_cli.c:
- Made php -m output sorted case-insensitevly
-
-2004-07-14 Stefan Esser <sesser@suspekt.org>
-
- * (PHP_4_3)
- ext/standard/tests/strings/strip_tags.phpt:
- Ups... CAN-2004-0595 regression test went into wrong branch...
-
- * (PHP_4_3_7)
- ext/standard/tests/strings/strip_tags.phpt:
- Add CAN-2004-0595 regression test. (modified from Joe Ortons version)
-
- * sapi/apache_hooks/mod_php5.c:
- same bug.
-
-2004-07-14 Derick Rethans <php@derickrethans.nl>
-
- * ext/iconv/config.m4:
- - Fixed text.
-
-2004-07-14 Stefan Esser <sesser@suspekt.org>
-
- * sapi/apache/mod_php5.c:
- Security Fix broken! Destroyed Basic auth. Blame: me
- 4.3.x not affected
-
-2004-07-14 Stanislav Malyshev <stas@zend.com>
-
- * ZendEngine2/zend_object_handlers.c:
- be consistent with write_dimension
-
- * ZendEngine2/zend_object_handlers.c:
- fix #28957
-
-2004-07-14 Sara Golemon <php@alphaweb.net>
-
- * NEWS
- ext/bcmath/bcmath.c
- ext/bcmath/php_bcmath.h:
- Bugfix# 28829 bcmath values for 0, 1, and 2 initialized/freed at wrong time
- for threaded sapis.
-
-2004-07-13 Andi Gutmans <andi@zend.com>
-
- * NEWS
- configure.in
- ZendEngine2/zend.h
- main/php_version.h:
- - 5.0.1-dev
-
-2004-07-13 Marcus Boerger <marcus.boerger@post.rwth-aachen.de>
-
- * (PHP_4_3)
- NEWS
- NEWS:
- BFN
-
- * ZendEngine2/zend_constants.c:
- Bugfix #29116 Zend constant warning uses memory after free (jdolecek at
- NetBSD dot org)
-
-2004-07-13 Andi Gutmans <andi@zend.com>
-
- * (php_5_0_0)
- NEWS
- configure.in
- ZendEngine2/zend.h
- main/php_version.h:
- - Roll PHP 5.0.0
-
-2004-07-13 Wez Furlong <wez.php@thebrainroom.net>
-
- * (php_5_0_0)
- ext/standard/html.c:
- add missing break
-
-2004-07-13 Georg Richter <georg@mysql.com>
-
- * (php_5_0_0)
- ext/mysqli/mysqli_api.c:
- prototype fixes
-
-2004-07-13 Wez Furlong <wez.php@thebrainroom.net>
-
- * (php_5_0_0)
- main/streams/streams.c:
- Looks like Sara forgot to change this too.
-
-2004-07-13 Georg Richter <georg@mysql.com>
-
- * ext/mysqli/mysqli_api.c:
- changed mysqli_stmt_reset (returns now bool instead of void)
-
-2004-07-13 Ilia Alshanetsky <ilia@prohost.org>
-
- * (PHP_4_3_7)
- NEWS
- configure.in
- Zend/zend_alloc.c
- Zend/zend_constants.c
- Zend/zend_execute.c
- Zend/zend_hash.c
- Zend/zend_variables.c
- ext/imap/php_imap.c
- ext/msession/msession.c
- ext/mssql/php_mssql.c
- ext/mysql/php_mysql.c
- ext/pcntl/pcntl.c
- ext/session/mod_mm.c
- ext/session/session.c
- ext/standard/ftok.c
- ext/standard/iptc.c
- ext/standard/string.c
- ext/sybase/php_sybase_db.c
- ext/sybase_ct/php_sybase_ct.c
- ext/w32api/w32api.c
- ext/wddx/wddx.c
- main/main.c
- main/php_version.h
- main/rfc1867.c:
- 4.3.8 patches.
-
-2004-07-13 Derick Rethans <php@derickrethans.nl>
-
- * (PHP_4_3_7)
- main/php_version.h:
- - Fixed typo
-
- * (PHP_4_3)
- configure.in
- main/php_version.h:
- - Bump version numbers in the PHP_4_3 branch.
-
- * (PHP_4_3_7)
- configure.in
- main/php_version.h:
- - Create a branch PHP_4_3_7 based on php 4.3.7 to form 4.3.8
- - Updated version numbers in branch
-
-2004-07-13 Stefan Esser <sesser@suspekt.org>
-
- * (php_5_0_0)
- tests/lang/038.phpt:
- Fixed typo
-
-2004-07-13 Alan Knowles <alan@akbkhome.com>
-
- * (php_5_0_0)
- tests/lang/039.phpt:
- remove test dependance on postgres ** this still fails however
-
- * tests/lang/038.phpt:
- ensure that test passes on systems without postgres built in.
-
-2004-07-12 Ilia Alshanetsky <ilia@prohost.org>
-
- * (PHP_4_3)
- Zend/zend_alloc.c
- Zend/zend_hash.c
- Zend/zend_variables.c:
- MFHZE2: Better stability during premature shutdown of request startup
-
-2004-07-12 Timm Friebe <thekid@thekid.de>
-
- * (PHP_4_3)
- ext/sybase_ct/php_sybase_ct.c:
- - Fixed bug #29064 (Exact numeric/decimal/money datatypes lose precision)
- - Fixed bug #27843 (sybase_query() triggers (spurious?) notices when
- query is a stored procedure)
- - Fixed multiple memory leaks with sybase_unbuffered_query()
- - Changed sybase_query() to ignore store_results = false in buffering
- mode, it would yield unpredictable results
- - Fixed sybase_unbuffered_query() when used with store_results = false
- - Changed sybase_fetch_object() to ignore second argument when passed
- as NULL
- - Made sybase_data_seek() error message more verbose
- - Fixed memory leak in shutdown when not all rows where selected in an
- unbuffered query
- CVS ----------------------------------------------------------------------
-
-2004-07-12 Wez Furlong <wez.php@thebrainroom.net>
-
- * main/streams/streams.c:
- Fix file_get_contents() bug...
-
-2004-07-12 Ilia Alshanetsky <ilia@prohost.org>
-
- * (php_5_0_0RC4)
- ext/standard/exec.c:
- Missing patch.
-
- * (php_5_0_0RC4)
- NEWS:
- Fixed bug #28999 (fixed behaviour of exec() to work as it did in 4.X).
-
- * (PHP_4_3)
- Zend/zend_execute.c:
- MFZE2: Fixed bug #29086 & #28064 (PHP crashes on extremly long scripts).
-
- * (php_5_0_0RC4)
- ZendEngine2/zend_execute.c:
- Fixed bug #29086 & #28064 (PHP crashes on extremly long scripts).
-
- * (php_5_0_0RC4)
- ext/sqlite/libsqlite/src/parse.c:
- Touch the file so that build system does not try to rebuild it.
-
-2004-07-12 Andi Gutmans <andi@zend.com>
-
- * (php_5_0_0RC4)
- ZendEngine2/zend.c:
- - Convert zend_class_entry -> zend_class_entry *
-
-2004-07-12 Christian Stocker <chregu@phant.ch>
-
- * (php_5_0_0RC4)
- ext/xsl/php_xsl.c:
- implement the clone code for the XSLTProcessor object and fix #29108
- "xslt segfaults when ze1_compatibility_mode is on" (By Rob Richards)
-
-2004-07-12 Antony Dovgal <tony2001@phpclub.net>
-
- * (PHP_4_3)
- ext/oci8/oci8.c:
- MFH: fix #28978 (multiple OCIBindByName on the same placeholder eats
- memory)
-
- * (php_5_0_0RC4)
- ext/oci8/oci8.c:
- fix #28978 (multiple OCIBindByName on the same placeholder eats memory)
-
-2004-07-11 Andrey Hristov <php@hristov.com>
-
- * NEWS:
- reorder + add
-
- * (PHP_4_3)
- NEWS:
- news stuff
-
- * (PHP_4_3)
- ext/standard/array.c
- ext/standard/string.c
- ext/standard/tests/array/bug28974.phpt:
- MFH:
- fixed bug #28974 : overflow in array_slice()
- The same kind of overflow appeared in array_splice(), substr() and
- substr_replace()
-
- * ext/standard/array.c
- ext/standard/string.c
- ext/standard/tests/array/bug28974.phpt:
- fixing bug #28974 : overflow in array_slice()
- The same kind of overflow appeared in array_splice(), substr() and
- substr_replace()
-
-2004-07-11 Stefan Esser <sesser@suspekt.org>
-
- * main/php_variables.c:
- Ooups...
-
- * main/php_variables.c:
- Fixed: PARSE_TYPE parameter to input_filter
- Fixed: input_filter should also be able to filter empty variables by name
-
-2004-07-11 Andrey Hristov <php@hristov.com>
-
- * ext/standard/array.c
- ext/standard/tests/array/bug28739.phpt:
- fixing bug #28739
- array_*diff() and array_*intersect() not clearing the fci cache before
- work.
- FCI call cache was introduced in HEAD. All functions that perform sorting
- of arrays clear the fci cache before work. array_*diff() and\
- array_*intersect()
- were somehow missed to be updated.
-
- * ext/standard/tests/general_functions/bug29038.phpt:
-
- fixing the name of the test
-
- * ext/standard/array.c
- ext/standard/tests/general_functions/bug29038.phpt:
- fixing bug 29038:
- EXTR_PREFIX_SAME is prevented from creating a new variable when the key
- is a empty string. EXTR_PREFIX_ALL is also prevented from doing that,
- but works for numbers.
-
-2004-07-11 Ilia Alshanetsky <ilia@prohost.org>
-
- * NEWS
- ext/standard/array.c:
- Fixed bug #29008 (array_combine() does not handle non-numeric/string keys).
-
-2004-07-10 Jon Parise <jon+php@csh.rit.edu>
-
- * (PHP_4_3)
- Zend/zend.c:
- MFH 1.286:
-
- DragonFly BSD is derived from FreeBSD and requires the same floating point
- precision fix.
-
- * ZendEngine2/zend.c:
- DragonFly BSD is derived from FreeBSD and requires the same floating point
- precision fix.
-
-2004-07-10 Wez Furlong <wez.php@thebrainroom.net>
-
- * (PECL_4_3)
- ext/sqlite/package.xml:
- tweak release notes
-
- * ext/sqlite/config.m4
- ext/sqlite/config.m4:
- Fix #28402: no need for -ldl
-
- * ext/sqlite/package.xml
- ext/sqlite/sqlite.c:
- Bump PHP 5 sqlite extension number to 2.0
- (put some distance between it and the 4.3 version)
-
- * ext/sqlite/Makefile.frag
- ext/sqlite/config.m4
- ext/sqlite/config.m4
- ext/sqlite/package.xml
- ext/sqlite/package.xml
- ext/sqlite/php_sqlite.def
- ext/sqlite/sqlite.c
- ext/sqlite/libsqlite/VERSION
- ext/sqlite/libsqlite/VERSION
- ext/sqlite/libsqlite/src/attach.c
- ext/sqlite/libsqlite/src/attach.c
- ext/sqlite/libsqlite/src/auth.c
- ext/sqlite/libsqlite/src/auth.c
- ext/sqlite/libsqlite/src/btree.c
- ext/sqlite/libsqlite/src/btree.c
- ext/sqlite/libsqlite/src/btree.h
- ext/sqlite/libsqlite/src/btree.h
- ext/sqlite/libsqlite/src/btree_rb.c
- ext/sqlite/libsqlite/src/build.c
- ext/sqlite/libsqlite/src/build.c
- ext/sqlite/libsqlite/src/copy.c
- ext/sqlite/libsqlite/src/copy.c
- ext/sqlite/libsqlite/src/date.c
- ext/sqlite/libsqlite/src/date.c
- ext/sqlite/libsqlite/src/delete.c
- ext/sqlite/libsqlite/src/delete.c
- ext/sqlite/libsqlite/src/encode.c
- ext/sqlite/libsqlite/src/encode.c
- ext/sqlite/libsqlite/src/expr.c
- ext/sqlite/libsqlite/src/expr.c
- ext/sqlite/libsqlite/src/func.c
- ext/sqlite/libsqlite/src/func.c
- ext/sqlite/libsqlite/src/hash.c
- ext/sqlite/libsqlite/src/hash.c
- ext/sqlite/libsqlite/src/hash.h
- ext/sqlite/libsqlite/src/hash.h
- ext/sqlite/libsqlite/src/insert.c
- ext/sqlite/libsqlite/src/insert.c
- ext/sqlite/libsqlite/src/main.c
- ext/sqlite/libsqlite/src/main.c
- ext/sqlite/libsqlite/src/opcodes.c
- ext/sqlite/libsqlite/src/opcodes.c
- ext/sqlite/libsqlite/src/opcodes.h
- ext/sqlite/libsqlite/src/opcodes.h
- ext/sqlite/libsqlite/src/os.c
- ext/sqlite/libsqlite/src/os.c
- ext/sqlite/libsqlite/src/os.h
- ext/sqlite/libsqlite/src/os.h
- ext/sqlite/libsqlite/src/pager.c
- ext/sqlite/libsqlite/src/pager.c
- ext/sqlite/libsqlite/src/pager.h
- ext/sqlite/libsqlite/src/pager.h
- ext/sqlite/libsqlite/src/parse.c
- ext/sqlite/libsqlite/src/parse.c
- ext/sqlite/libsqlite/src/parse.h
- ext/sqlite/libsqlite/src/parse.h
- ext/sqlite/libsqlite/src/parse.y
- ext/sqlite/libsqlite/src/parse.y
- ext/sqlite/libsqlite/src/pragma.c
- ext/sqlite/libsqlite/src/pragma.c
- ext/sqlite/libsqlite/src/printf.c
- ext/sqlite/libsqlite/src/printf.c
- ext/sqlite/libsqlite/src/random.c
- ext/sqlite/libsqlite/src/random.c
- ext/sqlite/libsqlite/src/select.c
- ext/sqlite/libsqlite/src/select.c
- ext/sqlite/libsqlite/src/sqlite.h.in
- ext/sqlite/libsqlite/src/sqlite.h.in
- ext/sqlite/libsqlite/src/sqlite.w32.h
- ext/sqlite/libsqlite/src/sqliteInt.h
- ext/sqlite/libsqlite/src/sqliteInt.h
- ext/sqlite/libsqlite/src/table.c
- ext/sqlite/libsqlite/src/tokenize.c
- ext/sqlite/libsqlite/src/tokenize.c
- ext/sqlite/libsqlite/src/trigger.c
- ext/sqlite/libsqlite/src/trigger.c
- ext/sqlite/libsqlite/src/update.c
- ext/sqlite/libsqlite/src/update.c
- ext/sqlite/libsqlite/src/util.c
- ext/sqlite/libsqlite/src/util.c
- ext/sqlite/libsqlite/src/vacuum.c
- ext/sqlite/libsqlite/src/vacuum.c
- ext/sqlite/libsqlite/src/vdbe.c
- ext/sqlite/libsqlite/src/vdbe.c
- ext/sqlite/libsqlite/src/vdbe.h
- ext/sqlite/libsqlite/src/vdbe.h
- ext/sqlite/libsqlite/src/vdbeInt.h
- ext/sqlite/libsqlite/src/vdbeInt.h
- ext/sqlite/libsqlite/src/vdbeaux.c
- ext/sqlite/libsqlite/src/vdbeaux.c
- ext/sqlite/libsqlite/src/where.c
- ext/sqlite/libsqlite/src/where.c:
- Upgrade bundled library to 2.8.14 + misc fixes
- (http://www.sqlite.org/cvstrac/chngview?cn=1742)
-
- * (PECL_4_3)
- ext/sqlite/Makefile.frag:
- this is no longer needed
-
- * main/streams/streams.c:
- RIP: greedy ready problems
- This allows people to use fread($fp, filesize($filename)) for regular
- files,
- but packet-based non-greedy reads for everything else.
-
-2004-07-10 Andi Gutmans <andi@zend.com>
-
- * ZendEngine2/zend_alloc.c
- ZendEngine2/zend_hash.c
- ZendEngine2/zend_variables.c
- ext/mssql/php_mssql.c
- ext/session/session.c
- ext/sybase/php_sybase_db.c
- ext/sybase_ct/php_sybase_ct.c
- ext/w32api/w32api.c
- main/php_variables.c
- main/rfc1867.c
- sapi/apache/mod_php5.c
- sapi/apache_hooks/mod_php5.c:
- - Better stability during premature shutdown of request startup
-
-2004-07-08 Ilia Alshanetsky <ilia@prohost.org>
-
- * (PHP_4_3)
- NEWS
- ext/standard/array.c:
- MFH: Fixed bug #29049 (array sorting via user function/method does not
- validate it).
-
- * ext/standard/array.c:
- Fixed bug #29049 (array sorting via user function/method does not validate
- it).
-
-2004-07-08 Sergey Kartashoff <gluke@mail.ru>
-
- * ext/mnogosearch/php_mnogo.c:
- - A bugfix in search words hilightling code (mnogosearch extension).
-
-2004-07-08 Ilia Alshanetsky <ilia@prohost.org>
-
- * ext/com_dotnet/com_saproxy.c:
- Last dangerous alloca() bits.
-
-2004-07-07 Georg Richter <georg@mysql.com>
-
- * ext/mysqli/config.m4
- ext/mysqli/mysqli.c
- ext/mysqli/mysqli_api.c
- ext/mysqli/mysqli_fe.c
- ext/mysqli/mysqli_prop.c
- ext/mysqli/mysqli_report.c
- ext/mysqli/php_mysqli.h:
- added check in config.m4 for deprecated library
- added support for new 4.1.3-beta functions
- mysqli_stmt_field_count
- mysqli_stmt_attr_set
- mysqli_stmt_attr_get
- removed support for deprecated/old api functions
- fixed bug in constructor_get
-
-2004-07-06 Ilia Alshanetsky <ilia@prohost.org>
-
- * (PHP_4_3)
- NEWS
- ext/standard/string.c:
- MFH: Fixed bug #29034 (wordwrap() returns a boolean when passed empty
- string).
-
- * ext/standard/string.c:
- Fixed bug #29034 (wordwrap() returns a boolean when passed empty string).
-
-2004-07-06 Sergey Kartashoff <gluke@mail.ru>
-
- * ext/mnogosearch/php_mnogo.c:
- - Some fixes in mnogosearch extension
-
-2004-07-06 Marcus Boerger <marcus.boerger@post.rwth-aachen.de>
-
- * ext/standard/dl.c:
- - Revert storing handle, got lost in 1.92, noticed by Kamesh Jayachandran
- <kameshj at fastmail dot fm>
-
-2004-07-06 Ard Biesheuvel <a.k.biesheuvel@ewi.tudelft.nl>
-
- * ext/interbase/ibase_query.c
- ext/interbase/interbase.c
- ext/interbase/php_ibase_includes.h:
- Don't copy ini items to module globals
- (fixed unregistered bug with mangled default_db setting)
-
-2004-07-06 Dmitry Stogov <dmitry@zend.com>
-
- * NEWS:
- Fixed bug #28751 (SoapServer does not call _autoload())
-
-2004-07-05 Marcus Boerger <marcus.boerger@post.rwth-aachen.de>
-
- * NEWS
- ext/mysqli/mysqli.c:
- - Bugfix: #29019 Database not closing
-
-2004-07-05 Andi Gutmans <andi@zend.com>
-
- * ZendEngine2/zend_mm.h:
- - Disable zend_mm for 5.0.0
-
-2004-07-05 Sascha Schumann <sascha@schumann.cx>
-
- * (PHP_4_3)
- NEWS:
- add
-
- * sapi/cgi/cgi_main.c:
- - revert to proper behaviour
-
- * (PHP_4_3)
- sapi/cgi/cgi_main.c:
- - revert to proper behaviour. The environment variable PHP_FCGI_CHILDREN
- must be explicitly set to != 0 to make the fastcgi-enabled binary
- act as a standalone fcgi server.
-
-2004-07-05 Moriyoshi Koizumi <moriyoshi@at.wakwak.com>
-
- * ext/standard/tests/serialize/bug28325.phpt:
- - Add test for bug #28325.
-
-2004-07-04 Ilia Alshanetsky <ilia@prohost.org>
-
- * ext/interbase/ibase_query.c:
- Eliminate potentially dangerous alloca().
-
- * (PHP_4_3)
- NEWS
- ext/imap/php_imap.c:
- MFH: Fixed bug #28963 (Missing space for \0 in address allocation).
-
- * ext/imap/php_imap.c:
- Fixed bug #28963 (Missing space for \0 in address allocation).
-
-2004-07-04 Marcus Boerger <marcus.boerger@post.rwth-aachen.de>
-
- * ext/standard/var.c:
- Fix TSRM build
-
-2004-07-03 Moriyoshi Koizumi <moriyoshi@at.wakwak.com>
-
- * NEWS:
- BFN
-
- * ext/standard/var.c:
- - Bugfix #28325 (circular reference serialisation).
-
-2004-07-03 Pierre-Alain Joye <pierre@dotgeek.org>
-
- * (PHP_4_3)
- ext/gd/libgd/gd.c
- ext/gd/tests/bug28984.phpt
- ext/gd/tests/bug28984.phpt:
- - Fix #28984, using full transparent segfauls in imagefill
- (NB: imagefill is broken in HEAD, same code)
- - Add testcase
-
-2004-07-03 Andi Gutmans <andi@zend.com>
-
- * ZendEngine2/zend_alloc.c:
- - Should fix mem leak with ZEND_MM. I made this change a while ago and
- - rolled it back but I don't remember why. Please test!
-
-2004-07-02 Wez Furlong <wez.php@thebrainroom.net>
-
- * (PHP_4_3)
- main/network.c:
- Fix #28996: unix sockets leak when connection fails
-
-2004-07-02 Ilia Alshanetsky <ilia@prohost.org>
-
- * (PHP_4_3)
- Zend/zend_constants.c:
- MFH: alloca() elimination in constant creation (missed in previous patch).
-
-2004-07-01 Ilia Alshanetsky <ilia@prohost.org>
-
- * (PHP_4_3)
- Zend/zend_constants.c:
- MFHZE2: Do not use alloca() where it can be easily abused by the users.
-
- * ZendEngine2/zend_constants.c:
- Do not use alloca() where it can be easily abused by the users.
-
-
-2004-07-01 Zeev Suraski <zeev@zend.com>
-
- * (PHP_4_3)
- main/php_ini.c:
- MFH (more or less) registry-based setting for the location of php.ini
-
-2004-07-01 Sterling Hughes <winnie@edwardbear.org>
-
- * ext/curl/interface.c:
- fix bug wrt to CURLOPT_POSTFIELDS where if you passed it code like:
-
- $fields = array('foo' => 'bar');
- curl_setopt($ch, CURLOPT_POSTFIELDS, $fields);
- curl_exec($ch);
- as opposed to :
-
- curl_setopt($ch, CURLOPT_POSTFIELDS, array('foo' => 'bar'));
-
- you'll get a segv or no results, depending on the mood and cycle of the
- moon.
-
-2004-07-01 Sara Golemon <php@alphaweb.net>
-
- * ext/cpdf/cpdf.c:
- That hashtable should never have been an argument....
-
-2004-06-30 Frank M. Kromann <frank@kromann.info>
-
- * NEWS
- NEWS:
- Fix for #28512. news entry
-
- * (PHP_4_3)
- ext/mssql/php_mssql.c:
- MFH: Fix for #28512. Allocate enough space to store data
-
- * ext/mssql/php_mssql.c:
- Fix for #28512. Allocate enough space to store data
-
-2004-06-30 Ilia Alshanetsky <ilia@prohost.org>
-
- * (PHP_4_3)
- ext/msession/msession.c:
- MFH: Another instance where alloca() is not needed.
-
- * ext/msession/msession.c:
- Another instance where alloca() is not needed.
-
-2004-06-30 Ard Biesheuvel <a.k.biesheuvel@ewi.tudelft.nl>
-
- * ext/interbase/interbase.c:
- Fixed Ilia's alloca() issue/exploit
- Removed pointless RINIT()
- Use macros for consistent resource type names
-
-2004-06-30 Ilia Alshanetsky <ilia@prohost.org>
-
- * (PHP_4_3)
- ext/pcntl/pcntl.c
- ext/session/mod_mm.c
- ext/wddx/wddx.c:
- MFH: Do not use alloca() where it can be abused through user input.
-
- * ext/pcntl/pcntl.c
- ext/session/mod_mm.c
- ext/wddx/wddx.c:
- Do not use alloca() where it can be abused through user input.
-
-2004-06-29 Wez Furlong <wez.php@thebrainroom.net>
-
- * (PHP_4_3)
- main/streams.c
- main/streams/streams.c:
- Fix for Bug #28964 fread "greedy" behaviour
-
-2004-06-28 Ilia Alshanetsky <ilia@prohost.org>
-
- * ext/ldap/ldap.c:
- Removed pointless allocation check.
-
-2004-06-28 Sebastian Bergmann <sb@sebastian-bergmann.de>
-
- * INSTALL:
- Fix #28921 (Bad grammar in INSTALL).
-
-2004-06-28 Derick Rethans <php@derickrethans.nl>
-
- * (PHP_4_3)
- NEWS
- ext/standard/datetime.c:
- - MFH: Fixed bug with leap year checking.
-
- * ext/standard/datetime.c:
- - Fixed bug with leap year checking.
-
-2004-06-28 Ard Biesheuvel <a.k.biesheuvel@ewi.tudelft.nl>
-
- * NEWS:
- Revert at Derick's request
-
- * NEWS
- NEWS:
- BFN
-
- * ext/interbase/ibase_query.c:
- MFB Fixed bug #28897 (-1 returned as -0.000 for 64-bit scaled int)
-
- * (PHP_4_3)
- ext/interbase/interbase.c:
- Fixed bug #28897 (-1 returned as -0.000 for 64-bit scaled int)
-
-2004-06-27 Ilia Alshanetsky <ilia@prohost.org>
-
- * ext/standard/basic_functions.c:
- Removed unneeded if().
-
-2004-06-27 Marcus Boerger <marcus.boerger@post.rwth-aachen.de>
-
- * tests/lang/038.phpt
- tests/lang/039.phpt:
- Add more tests
-
-2004-06-26 Marcus Boerger <marcus.boerger@post.rwth-aachen.de>
-
- * NEWS:
- BFN
-
-2004-06-26 Moriyoshi Koizumi <moriyoshi@at.wakwak.com>
-
- * (PHP_4_3)
- NEWS:
- - This one should've been here, not in HEAD.
-
- * NEWS:
- -** empty log message ***
-
-2004-06-26 Uwe Schindler <uwe@thetaphi.de>
-
- * sapi/nsapi/nsapi.c:
- replace strncpy with strlcpy
-
-2004-06-26 Stefan Esser <sesser@suspekt.org>
-
- * main/php_variables.c:
- As long we pass values by reference this is needed. Ugly!
-
- * ext/mbstring/mb_gpc.c:
- Fixed input_filter functions need emalloc()ed values.
-
- * NEWS:
- strip_tags() news
-
- * ext/standard/string.c:
- IE we love you all...
-
-2004-06-26 Moriyoshi Koizumi <moriyoshi@at.wakwak.com>
-
- * NEWS:
- - WS
-
- * NEWS
- ext/mbstring/mbstring.c
- ext/mbstring/tests/bug26639.phpt:
- - Fix bug #28466 (mbstring_convert_variables() problem).
-
-2004-06-25 Edin Kadribasic <edink@emini.dk>
-
- * sapi/apache2handler/sapi_apache2.c:
- MFB: Memory leak fix (patch by Joe Orton)
- Fixes #28113. Adapted to php5 by Magnus Määttä.
-
-2004-06-25 Wez Furlong <wez.php@thebrainroom.net>
-
- * ZendEngine2/zend_stream.c
- ZendEngine2/zend_stream.h:
- export zend stream functions for zend extensions under windows
-
-2004-06-25 Edin Kadribasic <edink@emini.dk>
-
- * (PHP_4_3)
- sapi/apache2handler/sapi_apache2.c:
- Memory leak fix (patch by Joe Orton)
-
-2004-06-24 Sara Golemon <php@alphaweb.net>
-
- * (PHP_4_3)
- Zend/zend_execute.c:
- Let's not throw this error in PHP4. 5.0.0 introduces it at E_STRICT and
- 5.1.0 (may) raise it to a proper E_WARNING. Ease into it.
-
- * ZendEngine2/zend_execute.c:
- Ease off on severity of new error (Using Resources as array offsets)
-
-2004-06-24 Stefan Esser <sesser@suspekt.org>
-
- * README.input_filter:
- Fixed zend_parse_parameters arguments...
-
-2004-06-24 Ilia Alshanetsky <ilia@prohost.org>
-
- * ext/standard/ftok.c:
- Added missing safe_mode & open_basedir checks.
-
- * (PHP_4_3)
- ext/standard/ftok.c:
- MFH: Added missing safe_mode & open_basedir checks.
-
-2004-06-23 Sara Golemon <php@alphaweb.net>
-
- * (PHP_4_3)
- NEWS:
- BFN and order fix
-
- * ZendEngine2/zend_execute.c:
- BugFix #28879 Inconsistent behavior between explicit and implicit array
- creation.
-
- Changes:
-
- Throw E_WARNING "Illegal offset type" when explicitly creating
- array elements with objects, arrays, or resorces as indexes.
- This matches implicit creation w/ obj/arr indices.
-
- Throw E_WARNING "Resource ID#%ld used as offset, casting to integer (%ld)"
- when implicitly creating array with resource as index. (BC)
-
-2004-06-23 Moriyoshi Koizumi <moriyoshi@at.wakwak.com>
-
- * (PHP_4_3)
- ext/mbstring/tests/bug26639.phpt:
- - Modify test case for wider coverage.
-
- * (PHP_4_3)
- ext/mbstring/mbstring.c:
- - Fix buf #28466 (mbstring_convert_variables() problem).
-
-2004-06-23 Georg Richter <georg@mysql.com>
-
- * ext/mysqli/mysqli.c
- ext/mysqli/mysqli_fe.c:
- added php_mysqli_construct_get to support __construct in extended classes
-
-2004-06-23 Sascha Schumann <sascha@schumann.cx>
-
- * (PHP_4_3)
- ext/session/session.c:
- - fix logic. if the client already sent us the cookie, we don't
- need to send it again. if the id has been changed, we need to
- update the client side.
-
-2004-06-23 Uwe Schindler <uwe@thetaphi.de>
-
- * (PHP_4_3)
- NEWS
- sapi/nsapi/nsapi.c
- sapi/nsapi/nsapi.c:
- Addendum to bug #28878: change ini keys as PHP_INI_SYSTEM
- Also: Adding "bucket" parameter to non-ini-keys, Elemination of double
- CONTENT_TYPE/_LENGTH environment variables
-
-2004-06-23 Dmitry Stogov <dmitry@zend.com>
-
- * php.ini-dist
- php.ini-recommended:
- Added SOAP configuration directives
-
-2004-06-22 Andrei Zmievski <andreiz@gmail.com>
-
- * NEWS
- ext/pcre/php_pcre.c:
- MFB (better error checking in pcre_fullinfo() calls).
-
- * (PHP_4_3)
- NEWS
- ext/pcre/php_pcre.c:
- pcre_info() is deprecated. Hence, update to pcre_fullinfo() and do more
- rigorous checking of return values.
-
-2004-06-22 Ilia Alshanetsky <ilia@prohost.org>
-
- * ext/standard/iptc.c:
- Fixed possible buffer overflow.
-
-2004-06-22 Uwe Schindler <uwe@thetaphi.de>
-
- * (PHP_4_3)
- NEWS
- sapi/nsapi/nsapi.c:
- Fix bug #28878: php.ini values in php4_execute
-
- * sapi/nsapi/nsapi.c:
- Fix bug #28878: php.ini values in php5_execute
-
-2004-06-21 Ilia Alshanetsky <ilia@prohost.org>
-
- * ext/standard/iptc.c:
- Added missing safe_mode check.
-
-2004-06-21 Sara Golemon <php@alphaweb.net>
-
- * NEWS
- NEWS:
- BFN
-
- * ext/standard/basic_functions.c
- ext/standard/file.h
- ext/standard/user_filters.c
- main/php_streams.h
- main/streams/filter.c
- main/streams/php_stream_filter_api.h
- main/streams/streams.c:
- BugFix#28868 (Part Two): This fixes thread unsafety in the userspace
- filters which relates to the fix just applied for userspace wrappers.
-
- * (PHP_4_3)
- ext/standard/basic_functions.c
- ext/standard/file.h
- main/php_streams.h
- main/streams.c
- main/user_streams.c:
- MFH: BugFix#28868 Wrapper hash not thread-safe
-
-2004-06-21 Marcus Boerger <marcus.boerger@post.rwth-aachen.de>
-
- * NEWS:
- Fixed bug #28822: ArrayObject::offsetExists() works inverted
-
-2004-06-21 Sara Golemon <php@alphaweb.net>
-
- * ext/standard/basic_functions.c
- ext/standard/file.h
- main/php_streams.h
- main/streams/streams.c
- main/streams/userspace.c:
- BugFix#28868: Wrapper hash not thread-safe.
-
- Userdefined wrappers were being registered into a global wrapper hash
- which can cross threads. Termination of once instance then has the
- potential to leave an active stream in another instance with no wrapper
- leading to segfault.
-
-2004-06-21 Tomas V.V.Cox <cox@idecnet.com>
-
- * pear/PEAR/Exception.php:
- More output magic on nested exceptions
-
- * pear/PEAR/Exception.php:
- Be more consistent with CS
-
- * pear/PEAR/Exception.php:
- Some API changes:
- - addObserver() params order switched
- - signal() -> _signal()
- - public:getCauseMessage() -> private:_getCauseMessage()
- - some more docs
-
-2004-06-20 Ilia Alshanetsky <ilia@prohost.org>
-
- * ext/standard/levenshtein.c:
- Removed unneeded checks around Zend allocation macros.
-
-2004-06-20 Tomas V.V.Cox <cox@idecnet.com>
-
- * pear/PEAR/Exception.php:
- First release of the PEAR_Exception class
- (dedicated to otherbird)
-
-2004-06-20 Marcus Boerger <marcus.boerger@post.rwth-aachen.de>
-
- * NEWS
- NEWS:
- BFN
-
- * ext/standard/basic_functions.c:
- Bugfix #28851: call_user_func_array has typo in error message
-
-2004-06-19 Jan Lehnardt <jan@dasmoped.net>
-
- * scripts/phpize.in:
- - do it right (phpize path issue)
-
- * scripts/phpize.in:
- - phpize now can handle directories with spaces in their name (#28847)
-
-2004-06-19 Sebastian Bergmann <sb@sebastian-bergmann.de>
-
- * ZendEngine2/zend_reflection_api.c:
- Reflection_* -> Reflection*. Patch by Timm Friebe.
-
-2004-06-19 Stefan Esser <sesser@suspekt.org>
-
- * (PHP_4_3)
- ext/domxml/php_domxml.c
- ext/ncurses/ncurses_functions.c
- ext/w32api/w32api.c:
- Fixed some 64bit and other zend_parse_parameters bugs
-
-2004-06-18 Sara Golemon <php@alphaweb.net>
-
- * (PHP_4_3)
- Zend/zend_execute.c:
- MFH: typo in converting array index doubles to long.
-
- * ZendEngine2/zend_execute.c:
- Another typo in converting array index doubles to long.
-
-2004-06-18 George Schlossnagle <george@omniti.com>
-
- * tests/lang/bug28213.phpt:
- tests for the crash in bug 28213
-
- * ZendEngine2/zend_builtin_functions.c:
- fix for 28213.
-
- class_name and call_type should be reinitialized on every loop iter.
-
-2004-06-18 Martin Jansen <mail@martin-jansen.de>
-
- * pear/PEAR/Downloader.php
- pear/tests/pear_downloader_invalid.phpt:
- - Replaced the nonexistent word "postfix" with "suffix".
-
-2004-06-18 Sara Golemon <php@alphaweb.net>
-
- * ext/standard/url.c:
- String lengths should never be char pointers.
-
-2004-06-18 Ilia Alshanetsky <ilia@prohost.org>
-
- * ext/odbc/php_odbc.c:
- Fixed possible memory leak.
-
- * (PHP_4_3)
- NEWS
- sapi/apache2filter/sapi_apache2.c
- sapi/apache2handler/sapi_apache2.c:
- MFH: Fixed bug #28818 (Apache 2 sapis do not export st_dev).
-
- * sapi/apache2filter/sapi_apache2.c
- sapi/apache2handler/sapi_apache2.c:
- Fixed bug #28818 (Apache 2 sapis do not export st_dev).
-
-2004-06-17 Sara Golemon <php@alphaweb.net>
-
- * ZendEngine2/zend_builtin_functions.c:
- String length in parse_parameters should be int
-
-2004-06-17 Brad House <brad@mainstreetsoftworks.com>
-
- * (PHP_4_3)
- ext/mcve/mcve.c
- ext/mcve/php_mcve.h:
- merge name change from mcve -> monetra
- add compatability layer for v3.2 functionality, so existing scripts
- will work without any migration needed.
- This patch has been sitting in PHP 5 for some time, and seems to
- be working quite well. A quick backport of that patch to php4.
-
-2004-06-17 Ilia Alshanetsky <ilia@prohost.org>
-
- * (PHP_4_3)
- ext/standard/soundex.c:
- MFH: Properly handly high ascii values in soundex().
-
- * ext/standard/soundex.c:
- Properly handly high ascii values in soundex().
-
-2004-06-16 Ard Biesheuvel <a.k.biesheuvel@ewi.tudelft.nl>
-
- * ext/com_dotnet/com_com.c
- ext/com_dotnet/com_dotnet.c
- ext/com_dotnet/com_persist.c
- ext/com_dotnet/com_variant.c
- ext/com_dotnet/php_com_dotnet_internal.h
- ext/sqlite/sqlite.c
- ext/standard/dir.c
- ext/standard/file.c
- ext/standard/fsock.c
- ext/standard/proc_open.c
- ext/standard/streamsfuncs.c:
- 64-bit bugsquash party
-
-2004-06-16 Stig Bakken <stig@yahoo-inc.com>
-
- * pear/PEAR.php:
- - don't register object on destructors list if it does not define its
- own emulated destructor
-
-2004-06-16 Ilia Alshanetsky <ilia@prohost.org>
-
- * (PHP_4_3)
- ext/standard/string.c:
- New & improved strspn() & strcspn(), ~30% in most cases.
-
-
-2004-06-15 Stefan Esser <sesser@suspekt.org>
-
- * ext/standard/string.c:
- Fixed: made 3rd parameter to strrpos 64bit safe.
-
-2004-06-15 Marcus Boerger <marcus.boerger@post.rwth-aachen.de>
-
- * NEWS:
- BFN
-
- * ZendEngine2/zend_reflection_api.c:
-
-
-2004-06-15 Pierre-Alain Joye <pierre@dotgeek.org>
-
- * pear/PEAR/Command/Config.php:
- - Fix #1602 (reported by Cox)
- Do not display var=value using config-get (easy scripting)
-
- * pear/PEAR.php
- pear/System.php
- pear/package-PEAR.xml:
- - Fix licence (#1645)
- - update my status there, reflecting the fact for the past 11 months
-
-2004-06-15 Rob Richards <rrichards@ctindustries.net>
-
- * NEWS:
- BFN
-
- * ext/dom/php_dom.c
- ext/dom/tests/bug28721.phpt:
- Fixed bug #28771 (Segfault when using xslt and clone)
- Add test case for bug #28721
-
-2004-06-15 Ilia Alshanetsky <ilia@prohost.org>
-
- * (PHP_4_3)
- ext/standard/string.c:
- A faster & more memory efficient php_addslashes() implementation.
-
-2004-06-14 Marcus Boerger <marcus.boerger@post.rwth-aachen.de>
-
- * ZendEngine2/zend_language_scanner.l:
- Need {} here
-
-2004-06-13 Ilia Alshanetsky <ilia@prohost.org>
-
- * ext/standard/syslog.c:
- Standardize error reporting.
-
-2004-06-13 Pierre-Alain Joye <pierre@dotgeek.org>
-
- * pear/PEAR/Packager.php:
- - Typo (#1627) (cox)
-
-2004-06-13 Rob Richards <rrichards@ctindustries.net>
-
- * NEWS:
- BFN
-
- * ext/dom/node.c:
- Fix bug #28721 (appendChild() and insertBefore() unset DOMText)
-
-2004-06-13 Edin Kadribasic <edink@emini.dk>
-
- * (PHP_4_3)
- ext/gettext/gettext.dsp:
- Part of fix for #28745: link agains extension against iconv
-
-2004-06-12 Ard Biesheuvel <a.k.biesheuvel@ewi.tudelft.nl>
-
- * ext/interbase/ibase_query.c
- ext/interbase/php_interbase.h:
- Revert
-
-2004-06-12 Greg Beaver <greg@chiaraquartet.net>
-
- * pear/PEAR/Common.php:
- fix bug #1610: pear package doesn't validate deps
-
- It was never validating deps at all!
-
- * (PHP_4_3)
- pear/PEAR/ErrorStack.php
- pear/PEAR/Installer.php:
- MFH: Installer and ErrorStack bugfixes/ErrorStack features
-
- * pear/PEAR/Installer.php:
- fix bug #1615: installer must create extension dir if it doesn't exist,
- patch by Tomas
-
- * pear/PEAR/ErrorStack.php:
- fix bug #1617, exception never returned from PEAR_ErrorStack->push()
-
-2004-06-12 Ard Biesheuvel <a.k.biesheuvel@ewi.tudelft.nl>
-
- * ext/interbase/ibase_query.c
- ext/interbase/php_interbase.h:
- Added export macros
-
-2004-06-10 Ilia Alshanetsky <ilia@prohost.org>
-
- * ext/standard/math.c:
- hypot() is not experimental.
-
-2004-06-10 Derick Rethans <php@derickrethans.nl>
-
- * (PHP_4_3)
- configure.in:
- - Fixed bug #28730 (Wrong website in configure output)
-
-2004-06-10 Ilia Alshanetsky <ilia@prohost.org>
-
- * (PHP_4_3)
- NEWS
- ext/mbstring/config.m4:
- MFH: Fixed bug #28723 (Fixed mbstring config.m4 to work on OSes where test
- command does not support -e parameter).
-
- * ext/mbstring/config.m4:
- Fixed bug #28723 (Fixed mbstring config.m4 to work on OSes where test
- command does not support -e parameter).
-
-2004-06-10 Marcus Boerger <marcus.boerger@post.rwth-aachen.de>
-
- * NEWS:
- Changed that a bit
-
- * ZendEngine2/zend_language_scanner.l:
- - Require a single white-space char after /** to start a doc comment that
- way we prevent /*** from becoming a doc comment (as requested Derick).
-
- * ZendEngine2/zend_API.h:
- Add missing declaration
-
- * ZendEngine2/zend_reflection_api.c:
- Small code layout change
-
- * NEWS
- NEWS:
- BFN
-
- * ZendEngine2/zend_language_scanner.l:
- Do not require NEWLINE at start of doccomment
-
- * ZendEngine2/zend_reflection_api.c:
- Bugfix #28699: Reflection api bugs
-
-2004-06-10 Dmitry Stogov <dmitry@zend.com>
-
- * NEWS:
- Fixed bug #28702 (SOAP does not parse WSDL service address correctly).
-
-2004-06-09 Frank M. Kromann <frank@kromann.info>
-
- * ext/dio/config.w32
- ext/dio/dio.c:
- Allow compilation on Win32.
- Need to implement a few Windows specific functions.
-
-2004-06-09 Marcus Boerger <marcus.boerger@post.rwth-aachen.de>
-
- * NEWS:
- BFN
-
- * ZendEngine2/zend_reflection_api.c:
- Fix Bug #28694 ReflectionExtension::getFunctions() crashes PHP
-
-2004-06-09 Ilia Alshanetsky <ilia@prohost.org>
-
- * (PHP_4_3)
- ext/standard/info.c:
- Correct alt text for easter egg logo.
-
- * (PHP_4_3)
- NEWS
- ext/gd/libgd/gdft.c:
- MFH: Fixed bug #28175 (Allow bundled GD to compile against freetype 2.1.2).
-
- * ext/gd/libgd/gdft.c:
- Fixed bug #28175 (Allow bundled GD to compile against freetype 2.1.2).
-
- * (PHP_4_3)
- NEWS
- ext/gmp/gmp.c:
- MFH: Fixed bug #28525 (gmp_powm() does not work with hexadecimal string
- modulo represented as a string).
-
- * ext/gmp/gmp.c:
- Fixed bug #28525 (gmp_powm() does not work with hexadecimal string modulo
- represented as a string).
- Patch by: pickett at sumu dot org
-
- * (PHP_4_3)
- win32/readdir.c:
- MFH: Fixed memory leak on error in win32's opendir() emulation.
-
- * win32/readdir.c:
- Fixed memory leak on error in win32's opendir() emulation. (Patch by Wez)
-
-2004-06-08 Ard Biesheuvel <a.k.biesheuvel@ewi.tudelft.nl>
-
- * NEWS:
- Interbase news
-
-2004-06-08 Greg Beaver <greg@chiaraquartet.net>
-
- * (PHP_4_3)
- pear/PEAR/Command/Package.php:
- MFH partial fix, bug #1163: rpm build doesn't build properly
-
- * pear/PEAR/Command/Package.php:
- partial fix, bug #1163: rpm build doesn't build properly
-
- * (PHP_4_3)
- pear/PEAR/Builder.php:
- MFH fix bug #1550: Builder does not set path to match bin_dir
-
- * pear/PEAR/Builder.php:
- fix bug #1550: Builder does not set path to match bin_dir
-
- * (PHP_4_3)
- pear/PEAR/Remote.php:
- MFH fix bug #1378: user/pass must be urldecoded from parse_url in
- Remote.php
-
- * pear/PEAR/Remote.php:
- fix bug #1378: user/pass must be urldecoded from parse_url in Remote.php
-
- * pear/scripts/pear.bat:
- fix bug #1153: PEAR command doesn't work after upgrading
-
- reverting earlier fix - people must have register_argc_argv=on set in
- php.ini for PEAR to work.
-
- * pear/scripts/pearcmd.php:
- fix bug #1581: unhelpful error message if "pear blatch" is typed
-
-2004-06-08 Ilia Alshanetsky <ilia@prohost.org>
-
- * (PHP_4_3)
- NEWS
- main/SAPI.c:
- MFH: Fixed bug #28692 (\0 in Authenticate header passed via safe_mode).
-
- * main/SAPI.c:
- Fixed bug #28692 (\0 in Authenticate header passed via safe_mode).
-
-2004-06-08 Ard Biesheuvel <a.k.biesheuvel@ewi.tudelft.nl>
-
- * ext/interbase/interbase.dsp
- ext/interbase/interbase.rc:
- ... back from the dead
-
-2004-06-08 Georg Richter <georg@mysql.com>
-
- * ext/mysqli/mysqli_api.c:
- fixed crash (changed MYSQL TO MY_MYSQL in mysql_stmt_init)
-
-2004-06-07 Andi Gutmans <andi@zend.com>
-
- * NEWS
- configure.in
- ZendEngine2/zend.h
- main/php_version.h:
- - Go back to -dev (Shouldn't need another RC)
-
-2004-06-07 Ilia Alshanetsky <ilia@prohost.org>
-
- * (PHP_4_3)
- NEWS
- ext/standard/dir.c:
- MFH: Fixed bug #28668 (glob() does not work with relative paths on Windows)
-
- * ext/standard/dir.c:
- Fixed bug #28668 (glob() does not work with relative paths on Windows).
-
-2004-06-07 Frank M. Kromann <frank@kromann.info>
-
- * ext/mssql/php_mssql.h:
- Fix build on win32
-
-2004-06-07 Andi Gutmans <andi@zend.com>
-
- * (php_5_0_0RC3)
- NEWS
- configure.in
- ZendEngine2/zend.h
- main/php_version.h:
- - Roll RC3
-
-2004-06-07 Ilia Alshanetsky <ilia@prohost.org>
-
- * (PHP_4_3)
- NEWS
- main/SAPI.c:
- MFH: Fixed bug #28670 (WWW-Authentication header mangling with PCRE in
- safe_mode adds extra spaces).
-
- * (php_5_0_0RC3)
- main/SAPI.c:
- Fixed bug #28670 (WWW-Authentication header mangling with PCRE in safe_mode
- adds extra spaces).
-
-2004-06-07 Georg Richter <georg@mysql.com>
-
- * (php_5_0_0RC3)
- ext/mysqli/mysqli_fe.c:
- forgot to remove Win32 restrictions for mysql methods
-
-2004-06-07 Derick Rethans <php@derickrethans.nl>
-
- * NEWS:
- - Reorder (again :)
-
-2004-06-07 Sara Golemon <php@alphaweb.net>
-
- * (php_5_0_0RC3)
- ext/sockets/sockets.c:
- MFB: Missing length limit parameter.
-
- * (PHP_4_3)
- ext/sockets/sockets.c:
- Missing length limit parameter.
-
-2004-06-06 Pierre-Alain Joye <pierre@dotgeek.org>
-
- * pear/go-pear-list.php:
- - No more Pager
-
- * pear/go-pear-list.php:
- - Update for 5.0RC3
-
-2004-06-06 Ilia Alshanetsky <ilia@prohost.org>
-
- * (PHP_4_3)
- NEWS
- ext/standard/dir.c:
- MFH: Fixed bug #28649 (Proper glob() return value on Linux when there are
- no matches).
-
- * ext/standard/dir.c:
- Fixed bug #28649 (Proper glob() return value on Linux when there are no
- matches).
-
-2004-06-06 Greg Beaver <greg@chiaraquartet.net>
-
- * pear/tests/PEAR_test_mock_pearweb.php.inc
- pear/tests/download_test.config.inc
- pear/tests/package-PEARtests.xml
- pear/tests/pear_downloader_invalid.phpt:
- update unit tests for PEAR 1.4.0dev6, using new getDownloadURL() xml-rpc
- call
-
- * pear/scripts/pearcmd.php:
- add missing $tmp to PEAR::isError()
-
- * pear/scripts/pearcmd.php:
- eliminate the annoyance of upgrading from crapster versions of PEAR once
- and for all.
-
- Now, if getopt2 exists, it is used, otherwise getopt is used.
-
-2004-06-06 Georg Richter <georg@mysql.com>
-
- * ext/mysqli/mysqli_api.c
- ext/mysqli/mysqli_fe.c
- ext/mysqli/php_mysqli.h:
- removed conditional defines for load_data_infile_handlers on windows
- (4.1.2 windows build is fixed now on mysql.com)
-
-2004-06-06 Stefan Esser <sesser@suspekt.org>
-
- * ZendEngine2/zend_compile.h
- ZendEngine2/zend_opcode.c:
- Fixed Zend Function Destructor to use correct TSRM handle.
-
-2004-06-06 Sebastian Bergmann <sb@sebastian-bergmann.de>
-
- * ext/mysqli/mysqli.c:
- ZTS fixes.
-
-2004-06-05 Georg Richter <georg@mysql.com>
-
- * NEWS:
- added mysqli changes
-
- * ext/mysqli/mysqli.c
- ext/mysqli/mysqli_api.c
- ext/mysqli/mysqli_fe.c
- ext/mysqli/mysqli_nonapi.c
- ext/mysqli/mysqli_prop.c
- ext/mysqli/php_mysqli.h:
- Major changes for 4.1.2-alpha/4.1.3-beta:
- - added container for mysql structure
- - added load data infile callback functions (currently disabled under win)
- Bug fixes:
- - fixed property changes (4.1.1 -> 4.1.2)
- - fixed memleak in mysqli_connect
- - fixed bug #28100
- - fixed bug #28205
- - fixed bug #28430
-
-2004-06-05 Marcus Boerger <marcus.boerger@post.rwth-aachen.de>
-
- * NEWS:
- BFN
-
- * ZendEngine2/zend_API.c:
- Fix #28641: Instance of Interface
-
-2004-06-05 Ard Biesheuvel <a.k.biesheuvel@ewi.tudelft.nl>
-
- * ext/interbase/php_ibase_udf.c:
- Added support for date/time types
- Added support for compiling/executing PHP code stored in the database
- Added support for TSRM
-
-2004-06-04 Ard Biesheuvel <a.k.biesheuvel@ewi.tudelft.nl>
-
- * ext/standard/http.c:
- Fixed unregistered bug [crash in http_build_query()]
-
-2004-06-04 Ilia Alshanetsky <ilia@prohost.org>
-
- * (PHP_4_3)
- NEWS
- ext/mysql/php_mysql.c:
- MFH: Fixed bug #28632 (Prevent open_basedir bypass in MySQL's LOAD DATA
- LOCAL).
-
- * ext/mysql/php_mysql.c:
- Fixed bug #28632 (Prevent open_basedir bypass in MySQL's LOAD DATA LOCAL).
-
-2004-06-04 Ard Biesheuvel <a.k.biesheuvel@ewi.tudelft.nl>
-
- * ext/interbase/php_ibase_udf.c:
- Added support for scaled integers
-
-2004-06-04 Ilia Alshanetsky <ilia@prohost.org>
-
- * (PHP_4_3)
- NEWS
- ext/mysql/php_mysql.c:
- MFH: Fixed bug #28627 (When multiple MySQL links are used default link is
- leaked).
-
- * ext/mysql/php_mysql.c:
- Fixed bug #28627 (When multiple MySQL links are used default link is
- leaked).
- Patch by: gavin at ipalsoftware dot com
-
-2004-06-04 Ard Biesheuvel <a.k.biesheuvel@ewi.tudelft.nl>
-
- * ext/interbase/php_ibase_udf.c:
- Added support for arbitrary input types
- Added support for NULL input/output values
-
-2004-06-04 Sara Golemon <php@alphaweb.net>
-
- * ext/mssql/php_mssql.c
- ext/mssql/php_mssql.h:
- MFB BugFix# 28626 You can't #ifdef check a typedef. Just give it another
- name since it's only used once anyway.
-
- * (PHP_4_3)
- ext/mssql/php_mssql.c
- ext/mssql/php_mssql.h:
- BugFix# 28626 You can't #ifdef check a typedef. Just give it another name
- since it's only used once anyway.
-
-2004-06-03 Ard Biesheuvel <a.k.biesheuvel@ewi.tudelft.nl>
-
- * ext/interbase/php_ibase_udf.c:
- Let DB handle type coercion instead of PHP
-
- * ext/interbase/php_ibase_udf.c:
- Added support for other return types besides VARCHAR
-
-2004-06-03 Ilia Alshanetsky <ilia@prohost.org>
-
- * (PHP_4_3)
- configure.in
- main/php_version.h:
- Back to dev.
-
-2004-06-03 Ard Biesheuvel <a.k.biesheuvel@ewi.tudelft.nl>
-
- * ext/interbase/ibase_blobs.c:
- Fixed blob ID format
-
- * NEWS:
- news
-
-2004-06-03 Andi Gutmans <andi@zend.com>
-
- * (php_5_0_0RC3RC2)
- NEWS
- configure.in
- ZendEngine2/zend.h
- main/php_version.h:
- - Prepare for RC3RC2
-
-2004-06-01 Ard Biesheuvel <a.k.biesheuvel@ewi.tudelft.nl>
-
- * ext/interbase/ibase_query.c:
- Don't be too strict if the number of binding arguments provided exceeds the
- expected number
-
-2004-06-01 Ilia Alshanetsky <ilia@prohost.org>
-
- * (PHP_4_3)
- ext/ldap/ldap.c:
- MFH: No need to NULL terminate manually, snprintf() does it for us already.
-
- * ext/ldap/ldap.c:
- No need to NULL terminate manually, snprintf() does it for us already.
-
- * (PHP_4_3)
- NEWS
- ext/xmlrpc/libxmlrpc/xml_element.c:
- MFH: Fixed bug #28597 (xmlrpc_encode_request() incorrectly encodes chars in
- 200-210 range).
-
- * ext/xmlrpc/libxmlrpc/xml_element.c:
- Fixed bug #28597 (xmlrpc_encode_request() incorrectly encodes chars in
- 200-210 range).
- Patch by: fernando dot nemec at folha dot com dot br
-
-2004-06-01 Ard Biesheuvel <a.k.biesheuvel@ewi.tudelft.nl>
-
- * ext/interbase/ibase_query.c:
- Removed debugging code
-
-2004-06-01 Andrei Zmievski <andreiz@gmail.com>
-
- * (PHP_4_3)
- NEWS:
- -** empty log message ***
-
- * (PHP_4_3)
- Zend/zend.c:
- MFH (If user error handler returns "false" then we relay to the built in
- error handler)
-
-2004-06-01 Greg Beaver <greg@chiaraquartet.net>
-
- * pear/tests/package-PEARtests.xml:
- update dependency to PEAR 1.4.0dev5
-
- * pear/tests/package-PEARtests.xml
- pear/tests/pear_error.phpt
- pear/tests/pear_error2.phpt
- pear/tests/pear_error3.phpt
- pear/tests/pear_error4.phpt
- pear/tests/pear_installer1.phpt
- pear/tests/pear_installer_install_channels.phpt
- pear/tests/pear_registry.phpt
- pear/tests/pear_registry_1.1.phpt:
- test files for PEAR are now installable!
-
- * pear/tests/pear_registry_inc.php.inc:
- file needed for registry test
-
- * pear/tests/package-PEARtests.xml:
- update to include all new unit tests and files
-
- * pear/tests/package-PEARtests.xml:
- begin work on making the tests installable
-
- * pear/tests/pear_packager.phpt:
- prepare for actual installable unit tests
-
- * pear/tests/pear_dependency_checkPackageUninstall.phpt
- pear/tests/pear_downloader_invalid.phpt:
- fix unit tests for 1.4.0dev4
-
-2004-06-01 Derick Rethans <php@derickrethans.nl>
-
- * NEWS:
- - Reorder
-
-2004-06-01 Andi Gutmans <andi@zend.com>
-
- * NEWS:
- - NEWS
-
- * ZendEngine2/zend.c:
- - If user error handler returns "false" then we relay to the built in error
- handler
-
-2004-06-01 Ard Biesheuvel <a.k.biesheuvel@ewi.tudelft.nl>
-
- * ext/interbase/ibase_query.c
- ext/interbase/interbase.c
- ext/interbase/php_ibase_includes.h
- ext/interbase/tests/interbase.inc:
- Use constant IBASE_CREATE instead of just 0
-
- * (PHP_4_3)
- NEWS:
-
-
- * (PHP_4_3)
- ext/informix/ifx.ec:
- MFH: Fixed bug #28569 (connection id is not thread safe)
-
- * ext/informix/ifx.ec:
- Woops, missed one
-
- * ext/informix/ifx.ec:
- Fixed bug #28569 (connection id is not thread safe)
-
-2004-05-31 Marcus Boerger <marcus.boerger@post.rwth-aachen.de>
-
- * ZendEngine2/zend_reflection_api.c:
- Refcount must not be set separatley again.
-
- * ZendEngine2/zend_reflection_api.c
- ZendEngine2/zend_reflection_api.c:
- Add missing initialization
-
- * ZendEngine2/zend_compile.c:
-
-
-2004-05-31 Pierre-Alain Joye <pierre@dotgeek.org>
-
- * ext/informix/ifx.ec:
- MFB: missing ';'
-
-2004-05-31 Ilia Alshanetsky <ilia@prohost.org>
-
- * ext/yp/yp.c:
- Added missing argument check.
-
-2004-05-31 Pierre-Alain Joye <pierre@dotgeek.org>
-
- * (PHP_4_3)
- ext/informix/ifx.ec:
- - Missing ';'
-
-2004-05-31 Ilia Alshanetsky <ilia@prohost.org>
-
- * ext/informix/ifx.ec:
- Fix build.
-
-2004-05-31 Ard Biesheuvel <a.k.biesheuvel@ewi.tudelft.nl>
-
- * ext/interbase/ibase_query.c:
- Fix typo in error message
-
- * ext/interbase/ibase_query.c
- ext/interbase/php_ibase_includes.h
- ext/interbase/tests/interbase.inc:
- Improved handling of 'CREATE DATABASE ...' by ibase_query()
- Improved param handling of ibase_query() and ibase_execute()
-
-2004-05-31 Rob Richards <rrichards@ctindustries.net>
-
- * ext/dom/attr.c
- ext/dom/cdatasection.c
- ext/dom/characterdata.c
- ext/dom/comment.c
- ext/dom/document.c
- ext/dom/documentfragment.c
- ext/dom/documenttype.c
- ext/dom/domexception.c
- ext/dom/domimplementation.c
- ext/dom/element.c
- ext/dom/entity.c
- ext/dom/entityreference.c
- ext/dom/namednodemap.c
- ext/dom/namelist.c
- ext/dom/node.c
- ext/dom/nodelist.c
- ext/dom/notation.c
- ext/dom/processinginstruction.c
- ext/dom/text.c
- ext/dom/xpath.c:
- Fix bug #28584: DOMText::splitText() does not split text properly
- (benjcarson)
- Prototype fixes
-
-2004-05-31 Zeev Suraski <zeev@zend.com>
-
- * ext/dom/document.c:
- Fix prototypes
-
-2004-05-31 Ard Biesheuvel <a.k.biesheuvel@ewi.tudelft.nl>
-
- * (PHP_4_3)
- ext/informix/ifx.ec:
- Fix build
-
-2004-05-30 Brad House <brad@mainstreetsoftworks.com>
-
- * ext/mcve/mcve.c
- ext/mcve/php_mcve.h:
- Update the mcve module for libmonetra 4.0
- A compatability layer has been introduced which should mean all
- scripts written for v 3.2 of the module should continue working,
- as well as compilation should still work against libmcve 3.2.x.
- This module eventually needs to be renamed to 'monetra' to reflect
- the naming change of the underlying library.
-
-2004-05-30 Ard Biesheuvel <a.k.biesheuvel@ewi.tudelft.nl>
-
- * ext/interbase/ibase_query.c:
- Restrict 'CREATE DATABASE' in sql safe mode
-
- * ext/interbase/ibase_query.c
- ext/interbase/interbase.c:
- Fix Win32 build
- Added missing 'break'
-
-2004-05-30 Ilia Alshanetsky <ilia@prohost.org>
-
- * ext/informix/ifx.ec:
- Fixed memory leak on ifx_error().
-
- * (PHP_4_3)
- NEWS
- ext/informix/Makefile.frag
- ext/informix/ifx.ec:
- MFH: Fixed bug #28564 (Problem building informix as a shared extension).
-
- * ext/informix/Makefile.frag
- ext/informix/ifx.ec:
- Fixed bug #28564 (Problem building informix as a shared extension).
- Patch by: roques at mti dot ag
-
-2004-05-30 Zeev Suraski <zeev@zend.com>
-
- * sapi/apache_hooks/php_apache.c:
- Fix prototypes
-
-2004-05-30 Ard Biesheuvel <a.k.biesheuvel@ewi.tudelft.nl>
-
- * ext/interbase/ibase_query.c:
- Fix unregistered bug (segfault on uninitialised pointer)
- Return string("0 ") from ibase_query() if query succeeded but did not
- affect any rows
-
-2004-05-30 Zeev Suraski <zeev@zend.com>
-
- * ext/dom/node.c:
- No meaning for unsigned
-
-2004-05-30 Greg Beaver <greg@chiaraquartet.net>
-
- * pear/tests/pear_channelfile.phpt
- pear/tests/pear_dependency_checkPackage.phpt
- pear/tests/pear_installer4.phpt
- pear/tests/pear_installer_install_channels.phpt
- pear/tests/pear_packager.phpt
- pear/tests/pear_registry.phpt:
- fix unit tests for 1.4.0dev3
-
-2004-05-30 Ard Biesheuvel <a.k.biesheuvel@ewi.tudelft.nl>
-
- * ext/interbase/tests/interbase.inc:
- Use default character set in generated test DB
-
- * ext/interbase/interbase.c:
- Fix HTML/table layout in info() entry
-
- * ext/interbase/interbase.c
- ext/interbase/php_ibase_includes.h
- ext/interbase/tests/003.phpt
- ext/interbase/tests/006.phpt
- ext/interbase/tests/007.phpt:
- Removed ibase_timefmt() - use ini_set() instead
- Improved phpinfo() appearance
-
-2004-05-30 Zeev Suraski <zeev@zend.com>
-
- * ext/ming/ming.c:
- Update to PHP-style prototypes
- (a PHP function returning char *? What were you smoking? :)
-
-2004-05-30 Brad House <brad@mainstreetsoftworks.com>
-
- * ext/mcve/config.m4:
- manually check for egrep
-
- * (PHP_4_3)
- ext/mcve/config.m4:
- Manually check for egrep
-
-2004-05-29 Wez Furlong <wez.php@thebrainroom.net>
-
- * ext/standard/proc_open.c:
- Turn this off then
-
-2004-05-29 Greg Beaver <greg@chiaraquartet.net>
-
- * pear/tests/PEAR_test_mock_pearweb.php.inc
- pear/tests/pear_downloader_invalid.phpt
- pear/tests/php_dump.php.inc:
- modify php_dump.php, .cvsignore ignores *.php
- move include to the place where it is used
-
- * pear/tests/pear_installer2.phpt:
- update _installFile() test for channels
-
- * pear/tests/pear_installer1.phpt:
- update checkDeps/extractDownloadFilename tests for channels
-
- * pear/tests/pear_registry.phpt:
- update registry test for channels
-
- * pear/tests/pear_downloader_invalid.phpt
- pear/tests/pear_downloader_new.phpt
- pear/tests/pear_downloader_old.phpt:
- use fake pearweb - now anyone can run the download unit tests.
-
- These tests require channels to pass
-
- * pear/tests/depnoreleases-1.0.tgz
- pear/tests/depunstable-1.0.tgz
- pear/tests/pkg1-1.1.tgz
- pear/tests/pkg1-2.0b1.tgz
- pear/tests/pkg2-1.1.tgz
- pear/tests/pkg3-1.1.tgz
- pear/tests/pkg3-1.4.tgz
- pear/tests/pkg4-1.1.tgz
- pear/tests/pkg4AndAHalf-1.3.tgz
- pear/tests/pkg5-1.1.tgz
- pear/tests/stabilitytoolow-0.3.tgz
- pear/tests/stabilitytoolow-0.5.tgz
- pear/tests/stabilitytoolow-0.6beta.tgz
- pear/tests/stabilitytoolow-1.0b1.tgz
- pear/tests/stabilitytoolow-2.0a1.tgz
- pear/tests/stabilitytoolow-2.0b1.tgz
- pear/tests/stabilitytoolow-2.0dev.tgz
- pear/tests/stabilitytoolow-3.0dev.tgz:
- fake pearweb package files, for unit testing downloads without an installed
- pearweb
-
- * pear/tests/pear_config.phpt
- pear/tests/pear_config_1.1.phpt:
- config unit tests, ready for channels
-
- * pear/tests/PEAR_test_mock_pearweb.php.inc
- pear/tests/download_test.config.inc
- pear/tests/download_test_classes.php.inc
- pear/tests/merge2.input
- pear/tests/pear_channelfile.phpt
- pear/tests/pear_installer_installFile_channels.phpt
- pear/tests/pear_installer_install_channels.phpt
- pear/tests/pear_registry_1.1.phpt
- pear/tests/user3.input:
- new unit tests
- pearweb mock object is complete
-
- * pear/tests/pear_installer4.phpt:
- update for conflicting file test
-
-2004-05-29 Wez Furlong <wez.php@thebrainroom.net>
-
- * ext/standard/proc_open.c:
- Don't rely on TIOCNOTTY.
-
-2004-05-28 Ard Biesheuvel <a.k.biesheuvel@ewi.tudelft.nl>
-
- * ext/interbase/interbase.c
- ext/interbase/php_ibase_includes.h:
- Changed default date format to ISO
- Enable sync flag in connect()
-
- * ext/interbase/interbase.c:
- Fix commit/rollback of multi-link transactions
- Some CS
-
-2004-05-28 Andrei Zmievski <andreiz@gmail.com>
-
- * ZendEngine2/zend.c:
- Allow user-defined error handlers to indicate whether default error
- handler should be re-invoked, by returning true or false.
-
-2004-05-28 Ilia Alshanetsky <ilia@prohost.org>
-
- * ext/xsl/xsltprocessor.c:
- Fixed memory leak on error.
-
- * main/main.c:
- The engine will take care out-of-memory situation for us.
-
- * (PHP_4_3)
- ext/gd/libgd/gd_topal.c:
- MFH: Fixed bug #28311 (Transparency detection code is off by 1).
-
-2004-05-28 Stefan Esser <sesser@suspekt.org>
-
- * ext/standard/http_fopen_wrapper.c:
- Fixed off-by-one in http_fopen_wrapper
-
-2004-05-28 Wez Furlong <wez.php@thebrainroom.net>
-
- * ext/standard/proc_open.c:
- Hopefully resolve proc_open build issues.
-
- If we need anything more elaborate than this, then we can move to a
- configure
- time check as Sascha suggests.
-
-2004-05-28 Christian Stocker <chregu@phant.ch>
-
- * ext/xsl/xsltprocessor.c:
- fix memleak in php callbacks
-
-2004-05-28 Stefan Esser <sesser@suspekt.org>
-
- * ext/standard/url.c:
- Fixed off-by-one in php_parse_url.
-
-2004-05-28 Derick Rethans <php@derickrethans.nl>
-
- * TODO-5.1:
- - Added date/time parser thingy.
-
- * NEWS
- ext/standard/basic_functions.c:
- - Fixed ip2long() behavior if an invalid IP address was passed to the
- function. This makes it possible to distingiush between
- "255.255.255.255"
- and a wrong one.
-
-2004-05-28 Marcus Boerger <marcus.boerger@post.rwth-aachen.de>
-
- * TODO-5.1:
- Add more outstanding patches
-
- * TODO
- TODO-PHP5:
- Remove finished tasks
-
- * TODO-5.1:
- Add more things
-
- * ZendEngine2/zend_execute.c:
- Prevent possible problems with illegal properties
-
-2004-05-28 Derick Rethans <php@derickrethans.nl>
-
- * ZendEngine2/zend_builtin_functions.c:
- - Make the default mask for user defined error handlers include ALL errors,
- including E_STRICT.
-
-2004-05-27 Ilia Alshanetsky <ilia@prohost.org>
-
- * ext/session/tests/skipif.inc:
- Better skip condition check for session tests.
-
-2004-05-27 Andrei Zmievski <andreiz@gmail.com>
-
- * TODO-5.1:
- 5.1 tasks.
-
-2004-05-27 Andi Gutmans <andi@zend.com>
-
- * configure.in
- ZendEngine2/zend.h
- main/php_version.h:
- - Back to RC3-dev until we roll final
-
-2004-05-27 Wez Furlong <wez.php@thebrainroom.net>
-
- * (php_5_0_0RC3RC1)
- main/streams/streams.c:
- Fix #25939 for good this time.
-
-2004-05-27 Derick Rethans <php@derickrethans.nl>
-
- * (php_5_0_0RC3RC1)
- NEWS:
- Put similar items next to eachother
-
-2004-05-27 Andi Gutmans <andi@zend.com>
-
- * NEWS:
- - More news
-
- * (php_5_0_0RC3RC1)
- ZendEngine2/zend_execute.c:
- - Fix problem with exceptions returning from include(). (Dmitry)
-
- * NEWS
- configure.in
- ZendEngine2/zend.h
- main/php_version.h:
- - RC3RC1
-
-2004-05-27 Rob Richards <rrichards@ctindustries.net>
-
- * (php_5_0_0RC3RC1)
- ext/dom/document.c
- ext/dom/element.c
- ext/dom/entityreference.c
- ext/dom/php_dom.c
- ext/dom/processinginstruction.c
- ext/dom/tests/dom_create_element.phpt:
- namespace/tagname validation fixes (Adam Trachtenberg)
- added new test
-
-2004-05-27 Andi Gutmans <andi@zend.com>
-
- * NEWS:
- - NEWS
-
-2004-05-26 Wez Furlong <wez.php@thebrainroom.net>
-
- * ZendEngine2/zend_object_handlers.c:
- Fix leak on systems where alloca isn't really alloca.
-
- * main/streams/filter.c
- main/streams/php_stream_filter_api.h:
- Fix silly mistake.
- Thanks Antony :)
-
-2004-05-26 Andrei Zmievski <andreiz@gmail.com>
-
- * (PHP_4_3)
- Zend/zend_constants.c:
- Make sure zend_get_constant() result is initialized properly.
-
- * ZendEngine2/zend_constants.c:
- Avoid unnecessary and silly copying of constant name when registering.
-
-2004-05-26 Andi Gutmans <andi@zend.com>
-
- * ZendEngine2/zend_alloc.c:
- - Fix memory manager problem
-
-2004-05-26 Andrei Zmievski <andreiz@gmail.com>
-
- * (PHP_4_3)
- Zend/zend_constants.c:
- Avoid unnecessary copy when registering a constant.
-
-2004-05-26 Ilia Alshanetsky <ilia@prohost.org>
-
- * (PHP_4_3)
- run-tests.php:
- MFH: Turn off session.auto_start to prevent test failures.
-
- * run-tests.php:
- Turn off session.auto_start to prevent test failures.
-
-2004-05-26 Pierre-Alain Joye <pierre@dotgeek.org>
-
- * ext/gd/tests/bug27582_2.phpt:
- - Remove this test, it still segfaults anyway (less noise in tests :) )
- Already removed in PHP_4_3 branch
-
-2004-05-26 Ilia Alshanetsky <ilia@prohost.org>
-
- * (PHP_4_3)
- ext/xslt/tests/xslt_backend_info.phpt:
- Fixed test failure due to incorrect library check.
-
-2004-05-26 Andi Gutmans <andi@zend.com>
-
- * ext/standard/basic_functions.c:
- - Use FREE_HASHTABLE instead of efree()
-
-2004-05-26 Wez Furlong <wez.php@thebrainroom.net>
-
- * ext/standard/proc_open.c:
- Apparently it is better to specify 500 here for unix98 bits and pieces.
-
- * (PHP_4_3)
- ext/mcve/config.m4:
- Fix build
-
- * ext/mcve/config.m4:
- Fix build...
-
-2004-05-26 Sebastian Bergmann <sb@sebastian-bergmann.de>
-
- * ZendEngine2/ZEND_CHANGES:
- Update Reflection API class names. Whitespace fixes.
-
-2004-05-26 Derick Rethans <php@derickrethans.nl>
-
- * (PHP_4_3)
- ext/sockets/sockets.c:
- - MFH: Fixed bug #28523 (Typo in ext/sockets/sockets.c)
-
- * ext/sockets/sockets.c:
- - Fixed bug #28523 (Typo in ext/sockets/sockets.c)
-
-2004-05-25 Stefan Esser <sesser@suspekt.org>
-
- * main/SAPI.c:
- break is better
-
-2004-05-25 Brad House <brad@mainstreetsoftworks.com>
-
- * ext/mcve/config.m4
- ext/mcve/config.m4:
- PHP_SETUP_OPENSSL is NOT SNMP_SHARED_LIBADD, it's MCVE_SHARED_LIBADD
- requires AC_PROG_EGREP when you phpize
-
-2004-05-25 Andi Gutmans <andi@zend.com>
-
- * ZendEngine2/zend_objects_API.h:
- - Nuke unused decleration
-
-2004-05-25 Ilia Alshanetsky <ilia@prohost.org>
-
- * (PHP_4_3)
- configure.in
- main/php_version.h:
- Back to dev.
-
- * ext/standard/dl.c:
- Kill unused var.
-
-2004-05-25 Wez Furlong <wez.php@thebrainroom.net>
-
- * ext/standard/dl.c:
- Merge that nicer error message here too
-
- * main/streams/plain_wrapper.c:
- -sigh*, obviously, we need this to be able to use sapi_module.name
-
- * main/streams/plain_wrapper.c:
- DEBUG -> PHP_DEBUG
-
-2004-05-25 Ilia Alshanetsky <ilia@prohost.org>
-
- * (PHP_4_3)
- NEWS
- configure.in
- main/php_version.h:
- Prepare for 4.3.7RC1.
-
-2004-05-25 Wez Furlong <wez.php@thebrainroom.net>
-
- * ext/sqlite/config.w32:
- Allow sqlite to build as a shared ext under win32
-
- * main/streams/plain_wrapper.c:
- check if it matches... not if it doesn't...
-
- * main/streams/plain_wrapper.c:
- In debug mode, under CLI don't close stderr.
- This is so that we can see any error reports.
-
-
-2004-05-25 Andi Gutmans <andi@zend.com>
-
- * ZendEngine2/zend_alloc.c
- ZendEngine2/zend_alloc.h:
- - More fixes
-
- * ZendEngine2/zend_alloc.c
- ZendEngine2/zend_alloc.h:
- - Make fix compile.
-
- * ZendEngine2/zend_alloc.c
- ZendEngine2/zend_alloc.h:
- - Fix memory leak in mem cache in conjunction with Zend MM. How come no one
- - noticed this? :)
-
-2004-05-24 Pierre-Alain Joye <pierre@dotgeek.org>
-
- * (PHP_4_3)
- NEWS
- ext/gd/libgd/gd.c:
- - MFH: Fix #28506, negative angle returns "random arcs"
- while (s < 0) s += 360 is used now
-
- * ext/gd/libgd/gd.c:
- - Fix #28506, negative angle returns "random arcs"
- while (angle < 0) angle += 2*M_PI is used now
-
-2004-05-24 Ilia Alshanetsky <ilia@prohost.org>
-
- * (PHP_4_3)
- NEWS
- ext/standard/basic_functions.c
- ext/standard/math.c
- ext/standard/php_math.h:
- MFH: Fixed bug #28508 (Do not make hypot() available if not supported by
- libc).
-
- * ext/standard/basic_functions.c
- ext/standard/math.c
- ext/standard/php_math.h:
- Fixed bug #28508 (Do not make hypot() available if not supported by libc).
-
-2004-05-24 Wez Furlong <wez.php@thebrainroom.net>
-
- * NEWS
- ext/pdf/.cvsignore
- ext/pdf/CREDITS
- ext/pdf/config.m4
- ext/pdf/config.w32
- ext/pdf/package.xml
- ext/pdf/pdf.c
- ext/pdf/pdf.dsp
- ext/pdf/php_pdf.h:
- Moved pdflib extension to PECL
-
-2004-05-23 Andi Gutmans <andi@zend.com>
-
- * ZendEngine2/zend_objects_API.c:
- - Fix problem with object being destroyed more than once
-
- * ZendEngine2/zend_builtin_functions.c:
- - Fix the following script (it crashed):
- <?php
- class ErrorHandler {
- function __construct() {
- set_error_handler(array(&$this, 'handle'));
- }
-
- function __destruct() {
- restore_error_handler();
- }
-
- function handle($code, $msg, $file, $line, $locals) {
- }
- }
-
- new ErrorHandler();
- ?>
-
- * NEWS:
- - NEWS
-
- * TSRM/TSRM.c:
- - Fix typo although it isn't being built
-
- * main/main.c:
- - Fixed bug #27640 memory leak of registered_zend_ini_directives (Dmitry)
-
-2004-05-23 Andrey Hristov <php@hristov.com>
-
- * NEWS:
- adding this
-
- * NEWS:
- Ansrei reverted this
-
-2004-05-23 Wez Furlong <wez.php@thebrainroom.net>
-
- * (PHP_4_3)
- NEWS:
- BFN
-
- * (PHP_4_3)
- main/network.c:
- MFH: Bugfix for #23220: IIS messes up SSL shutdown
-
- * ext/openssl/xp_ssl.c:
- Finally a fix for #23220: IIS does not cleanly close SSL connections.
- Also enable the safe and recommended bug work around options in the SSL
- context.
-
-2004-05-23 Stefan Esser <sesser@suspekt.org>
-
- * main/rfc1867.c:
- This is more correct.
-
-2004-05-23 Greg Beaver <greg@chiaraquartet.net>
-
- * pear/PEAR/ErrorStack.php:
- Fix #1395: PEAR_ErrorStack::staticCallback needs to instantiate the stack
- Fix up default callback, so that it can be set for each package as well as
- for all packages.
-
- Callbacks now have 3 levels of control, which may be a bit too complex,
- default callbacks might have to go for debugging reasons. Either that or
- some kind of origination information should be appended to the error array
- describing which callbacks were called, so debugging is at least possible
-
- * pear/tests/PEAR_test_mock_pearweb.php.inc:
- in preparation for testing all remote functionality, use a mock object for
- a functioning pearweb server
-
-2004-05-22 Ard Biesheuvel <a.k.biesheuvel@ewi.tudelft.nl>
-
- * ext/interbase/interbase.c:
- Use dummy status vector in ibase_connect()
- Added fbird_ aliases for all ibase_ functions
-
-2004-05-21 Timm Friebe <thekid@thekid.de>
-
- * ext/sybase_ct/php_sybase_ct.c:
- - Fixed bug #28354
-
-2004-05-21 Wez Furlong <wez.php@thebrainroom.net>
-
- * ext/standard/dl.c:
- Ok, so we do need to rinit here after all.
-
- * ext/standard/dl.c:
- Update to reflect recent changes in dl()
-
- * pear/PEAR/Common.php:
- Better error message to save looking in the wrong place.
-
-2004-05-21 Derick Rethans <php@derickrethans.nl>
-
- * NEWS:
- - Fixed order (again)
-
-2004-05-21 Dmitry Stogov <dmitry@zend.com>
-
- * NEWS:
- Fixed bug #28239 (No results returned on SOAP call, no error given)
-
-2004-05-21 Ard Biesheuvel <a.k.biesheuvel@ewi.tudelft.nl>
-
- * ext/interbase/ibase_query.c
- ext/interbase/tests/003.phpt:
- Removed strcpy() call from most common case
- Added test for hash index generation
-
- * ext/interbase/ibase_query.c:
- Added test for duplicate field names when returning rows as hashes or
- objects
-
- * ext/interbase/php_ibase_includes.h:
- Make sure METADATALENGTH is defined (used by IB 7)
-
-2004-05-21 Derick Rethans <php@derickrethans.nl>
-
- * (PHP_4_3)
- main/rfc1867.c:
- - MFH: Fixed TSRM problem in latest commit.
-
- * main/rfc1867.c:
- - Fixed TSRM problem in latest commit.
-
- * (PHP_4_3)
- NEWS
- main/rfc1867.c:
- - MFH: Fixed bug #28456 (Problem with enclosed / in uploaded files).
-
- * main/rfc1867.c:
- - Fixed bug #28456 (Problem with enclosed / in uploaded file names)
-
-2004-05-21 Greg Beaver <greg@chiaraquartet.net>
-
- * pear/PEAR/ErrorStack.php:
- fix missing assignment
- $this->_errors = array_filter($this->_errors);
-
- * pear/PEAR/ErrorStack.php:
- Several issues resolved.
- fix 1444: PEAR_ErrorStack->push() needs to validate $msg and $code as
- string/int
- add error level checking to hasErrors() and getErrors().
- BC break!!:
- staticGetErrors adds the parameter $level between $purge and $merge, as it
- will be as common (or more common) as $purge.
-
-2004-05-20 Ilia Alshanetsky <ilia@prohost.org>
-
- * ext/gd/gd.c:
- Fixed stream leak on error.
-
-2004-05-20 Andrey Hristov <php@hristov.com>
-
- * ext/standard/var.c:
- for now removing ":public". Waiting for a decision? ":public" will require
- quite a lot of phpt files changes.
-
- * ext/dom/tests/dom003.phpt
- ext/standard/tests/array/007.phpt
- ext/standard/tests/array/array_intersect_1.phpt:
- fixing the tests so to work with the new var_dump() (dumping private and
- protected member variables)
-
-2004-05-20 Wez Furlong <wez.php@thebrainroom.net>
-
- * ZendEngine2/zend_exceptions.c
- ZendEngine2/zend_exceptions.h:
- Revert; obviously I missed the function at the bottom of the file...
-
-2004-05-20 Andrey Hristov <php@hristov.com>
-
- * ext/standard/var.c:
- var_dump() now shows private and protected member variables.
- Not BC is that since now the public variables are explicitly shown as
- public
- Example :
-
- class a{ protected $a=1; private $b=2;var $c=3;} $a=new a(); var_dump($a);
-
- object(a)#1 (3) {
- ["a:protected"]=>
- int(1)
- ["b:private"]=>
- int(2)
- ["c:public"]=>
- int(3)
- }
-
-2004-05-20 Wez Furlong <wez.php@thebrainroom.net>
-
- * ZendEngine2/zend_exceptions.c
- ZendEngine2/zend_exceptions.h:
- Export this, so extensions may throw their own exception objects that
- they have already instantiated.
-
-2004-05-20 Derick Rethans <php@derickrethans.nl>
-
- * ext/fam/fam.c
- ext/ncurses/ncurses.c:
- - Removed unused INI sections.
-
- * main/main.c:
- - Allow extra parameters to mail to be forced also from virtual host
- settings.
-
-2004-05-20 Ilia Alshanetsky <ilia@prohost.org>
-
- * ext/pfpro/pfpro.c:
- Free vars before calling E_ERROR.
-
-2004-05-19 Ard Biesheuvel <a.k.biesheuvel@ewi.tudelft.nl>
-
- * ext/standard/formatted_print.c:
- Fixed unregistered bug (memory leak in printf() & friends)
-
-2004-05-19 Marcus Boerger <marcus.boerger@post.rwth-aachen.de>
-
- * ext/bz2/tests/with_files.phpt
- ext/bz2/tests/with_strings.phpt
- ext/ctype/tests/001.phpt
- ext/ctype/tests/002.phpt
- ext/dio/tests/001.phpt
- ext/fdf/tests/01-general.phpt
- ext/fdf/tests/02-values.phpt
- ext/fdf/tests/03-read-file.phpt
- ext/fdf/tests/04-POST.phpt
- ext/gmp/tests/001.phpt
- ext/gmp/tests/002.phpt
- ext/gmp/tests/003.phpt
- ext/interbase/tests/002.phpt
- ext/interbase/tests/003.phpt
- ext/interbase/tests/004.phpt
- ext/interbase/tests/005.phpt
- ext/interbase/tests/006.phpt
- ext/interbase/tests/007.phpt
- ext/interbase/tests/008.phpt
- ext/mcrypt/tests/blowfish.phpt
- ext/mcrypt/tests/bug8040.phpt
- ext/mcve/tests/001.phpt
- ext/ncurses/tests/001.phpt
- ext/openssl/tests/001.phpt
- ext/pcntl/tests/001.phpt
- ext/pspell/tests/01pspell_basic.phpt
- ext/session/tests/001.phpt
- ext/session/tests/002.phpt
- ext/skeleton/tests/001.phpt
- ext/standard/tests/array/001.phpt
- ext/standard/tests/file/001-win32.phpt
- ext/standard/tests/file/001.phpt
- ext/standard/tests/file/002.phpt
- ext/standard/tests/file/003.phpt
- ext/standard/tests/file/bug12556.phpt
- ext/standard/tests/file/bug20424.phpt
- ext/standard/tests/file/bug22382.phpt
- ext/standard/tests/file/bug26615.phpt
- ext/standard/tests/general_functions/001.phpt
- ext/standard/tests/general_functions/002.phpt
- ext/standard/tests/general_functions/003.phpt
- ext/standard/tests/general_functions/004.phpt
- ext/standard/tests/general_functions/005.phpt
- ext/standard/tests/general_functions/006.phpt
- ext/standard/tests/general_functions/007.phpt
- ext/standard/tests/general_functions/009.phpt
- ext/standard/tests/general_functions/proc_open.phpt
- ext/standard/tests/math/abs.phpt
- ext/standard/tests/math/floorceil.phpt
- ext/standard/tests/math/log.phpt
- ext/standard/tests/math/pow.phpt
- ext/standard/tests/math/round.phpt
- ext/standard/tests/reg/001.phpt
- ext/standard/tests/reg/002.phpt
- ext/standard/tests/reg/003.phpt
- ext/standard/tests/reg/004.phpt
- ext/standard/tests/reg/005.phpt
- ext/standard/tests/reg/006.phpt
- ext/standard/tests/reg/007.phpt
- ext/standard/tests/reg/008.phpt
- ext/standard/tests/reg/009.phpt
- ext/standard/tests/reg/010.phpt
- ext/standard/tests/reg/011.phpt
- ext/standard/tests/reg/012.phpt
- ext/standard/tests/reg/013.phpt
- ext/standard/tests/reg/014.phpt
- ext/standard/tests/reg/015.phpt
- ext/standard/tests/reg/016.phpt
- ext/standard/tests/serialize/001.phpt
- ext/standard/tests/strings/add-and-stripcslashes.phpt
- ext/standard/tests/strings/add-and-stripslashes.phpt
- ext/standard/tests/strings/basename.phpt
- ext/standard/tests/strings/bin2hex.phpt
- ext/standard/tests/strings/bug20108.phpt
- ext/standard/tests/strings/bug20927.phpt
- ext/standard/tests/strings/chr_ord.phpt
- ext/standard/tests/strings/chunk_split.phpt
- ext/standard/tests/strings/count_chars.phpt
- ext/standard/tests/strings/crc32.phpt
- ext/standard/tests/strings/explode.phpt
- ext/standard/tests/strings/implode.phpt
- ext/standard/tests/strings/nl2br.phpt
- ext/standard/tests/strings/str_repeat.phpt
- ext/standard/tests/strings/strip_tags.phpt
- ext/standard/tests/strings/strpos.phpt
- ext/standard/tests/strings/strrev.phpt
- ext/standard/tests/strings/strripos.phpt
- ext/standard/tests/strings/strrpos.phpt
- ext/standard/tests/strings/strstr.phpt
- ext/standard/tests/strings/substr_count.phpt
- ext/standard/tests/strings/substr_replace.phpt
- ext/standard/tests/strings/trim.phpt
- ext/standard/tests/strings/url_t.phpt
- ext/standard/tests/strings/wordwrap.phpt
- ext/standard/tests/time/003.phpt
- ext/sysvmsg/tests/001.phpt
- ext/zlib/tests/001.phpt
- ext/zlib/tests/002.phpt
- ext/zlib/tests/003.phpt
- ext/zlib/tests/gzfilegzreadfile.phpt
- ext/zlib/tests/gzreadgzwrite.phpt
- ext/zlib/tests/gzreadgzwriteplain.phpt
- pear/tests/pear1.phpt
- pear/tests/pear2.phpt
- pear/tests/pear_common_analyzeSC.phpt
- pear/tests/pear_common_buildProvidesArray.phpt
- pear/tests/pear_common_downloadHttp.phpt
- pear/tests/pear_common_infoFromString.phpt
- pear/tests/pear_common_sortPkgDeps.phpt
- pear/tests/pear_common_validPackageVersion.phpt
- pear/tests/pear_dependency_checkExtension.phpt
- pear/tests/pear_dependency_checkPackage.phpt
- pear/tests/pear_dependency_checkPackageUninstall.phpt
- pear/tests/pear_downloader_invalid.phpt
- pear/tests/pear_downloader_new.phpt
- pear/tests/pear_downloader_old.phpt
- pear/tests/pear_error.phpt
- pear/tests/pear_error2.phpt
- pear/tests/pear_installer1.phpt
- pear/tests/pear_installer2.phpt
- pear/tests/pear_installer3.phpt
- pear/tests/pear_installer4.phpt
- pear/tests/pear_installer5.phpt
- pear/tests/pear_packager.phpt
- sapi/tests/test001.phpt
- sapi/tests/test002.phpt
- sapi/tests/test003.phpt
- sapi/tests/test004.phpt
- sapi/tests/test005.phpt
- sapi/tests/test006.phpt
- sapi/tests/test007.phpt
- tests/basic/001.phpt
- tests/basic/002.phpt
- tests/basic/004.phpt
- tests/basic/005.phpt
- tests/basic/006.phpt
- tests/basic/007.phpt
- tests/basic/008.phpt
- tests/basic/009.phpt
- tests/basic/010.phpt
- tests/lang/001.phpt
- tests/lang/002.phpt
- tests/lang/003.phpt
- tests/lang/004.phpt
- tests/lang/005.phpt
- tests/lang/006.phpt
- tests/lang/007.phpt
- tests/lang/008.phpt
- tests/lang/009.phpt
- tests/lang/010.phpt
- tests/lang/011.phpt
- tests/lang/012.phpt
- tests/lang/013.phpt
- tests/lang/014.phpt
- tests/lang/015.phpt
- tests/lang/016.phpt
- tests/lang/017.phpt
- tests/lang/018.phpt
- tests/lang/019.phpt
- tests/lang/020.phpt
- tests/lang/021.phpt
- tests/lang/022.phpt
- tests/lang/023.phpt
- tests/lang/024.phpt
- tests/lang/025.phpt
- tests/lang/026.phpt
- tests/lang/027.phpt
- tests/lang/028.phpt
- tests/lang/031.phpt
- tests/lang/032.phpt
- tests/lang/034.phpt
- tests/strings/001.phpt
- tests/strings/004.phpt:
- - Remove unused blocks
-
-2004-05-18 Ilia Alshanetsky <ilia@prohost.org>
-
- * ext/ingres_ii/ii.c:
- Fixed possible memory leak.
-
-2004-05-18 Marcus Boerger <marcus.boerger@post.rwth-aachen.de>
-
- * tests/strings/002.phpt:
- Fix test
-
- * ZendEngine2/zend_API.c:
- - Need to operate on module pointer in hash table
-
-2004-05-18 Wez Furlong <wez.php@thebrainroom.net>
-
- * ZendEngine2/zend_execute_API.c:
- Fix bug #28438: win32 build fails in non-zts mode
-
-2004-05-18 Stanislav Malyshev <stas@zend.com>
-
- * ZendEngine2/zend_API.c
- ext/standard/dl.c:
- Z_TYPE_P is for zvals
-
-2004-05-18 Wez Furlong <wez.php@thebrainroom.net>
-
- * ext/standard/dl.c:
- Fix dl() and extension=
-
- * ZendEngine2/zend_API.c:
- Register according to the type specified by the module.
- (Helps to fix dl() bug)
-
-2004-05-18 Ilia Alshanetsky <ilia@prohost.org>
-
- * (PHP_4_3)
- NEWS
- ext/standard/exec.c:
- MFH: Fixed command line escaping routines for win32.
-
- * ext/standard/exec.c:
- Fixed command line escaping routines for win32.
-
-2004-05-18 Edin Kadribasic <edink@emini.dk>
-
- * ext/pspell/pspell.c:
- Move declarations to the begining of function.
- This allows it to actually compile on windows.
-
- * ext/sybase_ct/php_sybase_ct.c:
- TSRM fix
-
- * ext/sockets/sockets.c:
- No length parameter -> estrdup()
-
-2004-05-18 Sara Golemon <php@alphaweb.net>
-
- * ZendEngine2/zend_execute.c:
- Bugfix#28404 When type is double we need to access dval, not lval
-
-2004-05-17 Ilia Alshanetsky <ilia@prohost.org>
-
- * ext/standard/tests/strings/bug26973.phpt
- tests/strings/002.phpt:
- Correct output.
-
-2004-05-17 Sara Golemon <php@alphaweb.net>
-
- * ext/standard/ftp_fopen_wrapper.c:
- BugFix# 27982: Provide error message when trying to overwrite an existant
- file without overwrite context option.
-
-2004-05-17 Andrei Zmievski <andreiz@gmail.com>
-
- * ZendEngine2/zend_ini_parser.y
- ZendEngine2/zend_ini_scanner.l:
- Revert the .ini vars patch. Will have to try again next Christmas
- apparently.
-
- * ZendEngine2/zend_ini_parser.y:
- Fix the apparent bug (; at the end of parse rule block).
-
-2004-05-17 Derick Rethans <php@derickrethans.nl>
-
- * (PHP_4_3)
- php.ini-dist
- php.ini-recommended:
- - MFH: Document the smtp_post setting in php.ini*
-
- * php.ini-dist
- php.ini-recommended:
- - Document the smtp_port setting in php.ini
-
-2004-05-17 Wez Furlong <wez.php@thebrainroom.net>
-
- * ZendEngine2/zend_objects_API.c
- ZendEngine2/zend_objects_API.h:
- As discussed with Andi, add this helper API for setting the object pointer
- from
- within the constructor.
-
- Please read the comment for notes about how to use it; in general, you
- don't
- need it, so don't use it.
-
-2004-05-16 Pierre-Alain Joye <pierre@dotgeek.org>
-
- * pear/PEAR/Common.php:
- - T_WHITESPACE for the 1st test...
-
- * pear/PEAR/Common.php:
- - PHP allows spaces before :: (parent :: foo(); )
- Nota bene, requires another change to really check the syntax:
- loop back to the first non white space element and valid it (parent,
- string or var)
-
-2004-05-16 Timm Friebe <thekid@thekid.de>
-
- * (PHP_4_3)
- ext/sybase_ct/php_sybase_ct.c:
- - MFH: Fixed auto-conversion from long to double when LONG_MAX /
- LONG_MIN where overflown
-
- * ext/sybase_ct/php_sybase_ct.c:
- - Fixed auto-conversion from long to double when LONG_MAX /
- LONG_MIN where overflown
-
-2004-05-16 Ilia Alshanetsky <ilia@prohost.org>
-
- * (PECL_4_3)
- ext/sqlite/sqlite.c:
- Better fix for a possible double free in sqlite_single|array_query() when
- a failure occurs between query execution and data retrieval.
-
-2004-05-16 Stanislav Malyshev <stas@zend.com>
-
- * (PECL_4_3)
- ext/sqlite/sqlite.c:
- attempt to fix double free on failed query
-
-2004-05-16 Pierre-Alain Joye <pierre@dotgeek.org>
-
- * pear/PEAR/Command.php:
- - Fix #1329, closedir on exit (kameshj at fastmail dot fm)
-
- * pear/PEAR/Command/Install.php:
- - Fix #1330, unused variable
-
- * pear/PEAR/Downloader.php:
- - Fix #1249 (wrong print out the wrong state with force option)
- - some NL issues, sorry, commit now too
-
-2004-05-16 Ilia Alshanetsky <ilia@prohost.org>
-
- * (PHP_4_3)
- ext/sockets/sockets.c:
- MFH: Do not allocate error buffer at the start of every request.
-
- * ext/sockets/sockets.c:
- Do not allocate error buffer at the start of every request.
-
-2004-05-16 Marcus Boerger <marcus.boerger@post.rwth-aachen.de>
-
- * ext/standard/tests/strings/sprintf_f.phpt:
-
- - Add new test
-
-2004-05-16 Ilia Alshanetsky <ilia@prohost.org>
-
- * (PHP_4_3)
- ext/fdf/fdf.c:
- MFH: Added missing safe_mode & open_basedir checks.
-
- * ext/fdf/fdf.c:
- Added missing safe_mode & open_basedir checks.
-
-2004-05-16 Marcus Boerger <marcus.boerger@post.rwth-aachen.de>
-
- * ext/standard/formatted_print.c:
- - Fix printf with floats
-
-2004-05-16 Wez Furlong <wez.php@thebrainroom.net>
-
- * ext/ext_skel:
- ;
-
- * ext/ext_skel:
- Add config.w32 template to ext_skel
-
-2004-05-16 Rob Richards <rrichards@ctindustries.net>
-
- * ext/dom/TODO
- ext/dom/attr.c
- ext/dom/cdatasection.c
- ext/dom/comment.c
- ext/dom/document.c
- ext/dom/documentfragment.c
- ext/dom/dom_fe.h
- ext/dom/element.c
- ext/dom/entityreference.c
- ext/dom/php_dom.c
- ext/dom/processinginstruction.c
- ext/dom/text.c
- ext/dom/xpath.c:
- constructors throw DOMException
- add DOM_PHP_ERR DomException code
- validate tagnames in constructors
- use C style comments
- update TODO
-
-2004-05-16 Brad House <brad@mainstreetsoftworks.com>
-
- * ext/mcve/config.m4
- ext/mcve/config.m4:
- update config.m4 for libmonetra 4.0 compatability.
- Library no longer has MCVE_ symbols, the header file has #define\'s to
- convert MCVE_ -> M_ to reflect the Monetra name change from MCVE.
- More updates to follow.
-
-2004-05-14 Andrei Zmievski <andrei@gravitonic.com>
-
- * NEWS:
- .ini variables patch notice
-
- * ZendEngine2/zend_ini_parser.y
- ZendEngine2/zend_ini_scanner.l:
- Adding ability to refer to existing .ini variables from within .ini
- files. Example:
-
- open_basedir = ${open_basedir} ":/new/dir"
-
-2004-05-14 Ilia Alshanetsky <ilia@prohost.org>
-
- * (PHP_4_3)
- ext/standard/file.c:
- MFH: Fixed possible memory leak inside popen().
-
- * ext/standard/file.c:
- Fixed possible memory leak inside popen().
-
-2004-05-13 Ilia Alshanetsky <ilia@prohost.org>
-
- * (PHP_4_3)
- NEWS
- ext/standard/string.c
- ext/standard/tests/strings/bug28386.phpt:
- MFH: Fixed bug #28386 (wordwrap() wraps lines 1 character too soon).
-
- * ext/standard/string.c
- ext/standard/tests/strings/bug28386.phpt:
- Fixed bug #28386 (wordwrap() wraps lines 1 character too soon).
-
- * (PHP_4_3)
- sapi/isapi/php4isapi.c:
- MFH: Make isapi more compatible with apache sapis as far as the creation
- $_COOKIE super-global and various $_SERVER values.
-
- * sapi/isapi/php5isapi.c:
- Make isapi more compatible with apache sapis as far as the creation
- $_COOKIE super-global and various $_SERVER values.
-
-2004-05-13 Edin Kadribasic <edink@emini.dk>
-
- * (PHP_4_3)
- ext/curl/curl.c:
- Make curl compile with the latest win32 libcurl
-
-2004-05-13 Stanislav Malyshev <stas@zend.com>
-
- * (PECL_4_3)
- ext/sqlite/php_sqlite.h
- ext/sqlite/sqlite.c:
- add sqlite_exec - now to the right tag
-
- * ext/sqlite/php_sqlite.h
- ext/sqlite/sqlite.c:
- add sqlite_exec()
-
- * (PHP_4)
- ext/sqlite/php_sqlite.h
- ext/sqlite/sqlite.c:
- Add sqlite_exec
-
-2004-05-13 Ilia Alshanetsky <ilia@prohost.org>
-
- * (PHP_4_3)
- ext/session/tests/skipif.inc:
- MFH: Skip session tests if session.save_path is not writable.
-
- * ext/session/tests/skipif.inc:
- Skip session tests if session.save_path is not writable.
-
-2004-05-13 Marcus Boerger <marcus.boerger@post.rwth-aachen.de>
-
- * TSRM/TSRM.c:
- - Once ts_free_id() will be used, we cannot call ctors for deleted ids
- when creating new threads.
-
-2004-05-12 Marcus Boerger <marcus.boerger@post.rwth-aachen.de>
-
- * ZendEngine2/zend_API.c:
- - Centralize register and hash operations for startup/register_module
- in new zend_register_module_ex().
-
- * ZendEngine2/zend_API.c:
- - Revert to 1.249
-
- * TSRM/TSRM.c:
- - More work on ts_free_id() but still keep it out
-
- * TSRM/TSRM.c:
- ifdef out the ts_free_id until php 5.1 and until it is complete
-
-2004-05-12 Ilia Alshanetsky <ilia@prohost.org>
-
- * (PHP_4_3)
- ext/imap/php_imap.c:
- MFH: Fixed various possible memory leaks.
-
- * ext/imap/php_imap.c:
- Fixed various possible memory leaks.
-
- * (PHP_4_3)
- NEWS
- ext/pgsql/pgsql.c:
- MFH: Fixed bug #28374 (Possible unterminated loop inside
- _php_pgsql_trim_message()).
-
- * ext/pgsql/pgsql.c:
- Fixed bug #28374 (Possible unterminated loop inside
- _php_pgsql_trim_message()).
-
-2004-05-12 Ard Biesheuvel <a.k.biesheuvel@ewi.tudelft.nl>
-
- * ext/interbase/ibase_query.c:
- Fixed a couple of inconsistencies in param binding
-
- * ext/interbase/config.m4
- ext/interbase/config.w32
- ext/interbase/ibase_query.c
- ext/interbase/ibase_service.c
- ext/interbase/interbase.c
- ext/interbase/php_ibase_includes.h
- ext/interbase/php_interbase.h:
- Dropped support for ancient Interbase versions (< 6)
-
- * ext/interbase/interbase.c:
- Made ibase_timefmt() check its args more thoroughly and nuked a pointless
- malloc()
-
- * ext/interbase/interbase.c:
- Made ibase_gen_id() bail out on incorrect args
-
-2004-05-12 Wez Furlong <wez.php@thebrainroom.net>
-
- * (PHP_4_3)
- main/streams.c:
- Avoid Bug #28363 by not seeking if we don't have a read buffer
-
-2004-05-12 Marcus Boerger <marcus.boerger@post.rwth-aachen.de>
-
- * TSRM/TSRM.c:
- - Implement ts_free_id()
-
- * ext/standard/url_scanner_ex.c:
- - Touch
-
- * ext/standard/basic_functions.c
- ext/standard/url_scanner_ex.re:
- - Move hash table destruction to proper location
-
- * ext/bcmath/bcmath.c
- ext/ldap/ldap.c
- ext/sqlite/sqlite.c:
- - Added missing UNREGISTER_INI_ENTRIES
-
-2004-05-11 Ilia Alshanetsky <ilia@prohost.org>
-
- * (PHP_4_3)
- ext/standard/formatted_print.c:
- MFH: Make vprintf() and printf() return the length of the string printed.
-
- * ext/standard/formatted_print.c:
- Make vprintf() and printf() return the length of the string printed.
- Make fprintf() and vfprints() return the correct length of the string
- printed.
-
-2004-05-11 Derick Rethans <php@derickrethans.nl>
-
- * main/rfc1867.c:
- - Fixed defines
-
-2004-05-11 Andi Gutmans <andi@zend.com>
-
- * ZendEngine2/zend_compile.c:
- - Don't allow passing NULL to type hinted parameter.
-
-2004-05-11 Ilia Alshanetsky <ilia@prohost.org>
-
- * (PHP_4_3)
- NEWS
- ext/standard/dir.c:
- MFH: Fixed bug #28355 (glob() does not return error on Linux when it does
- not have permission to open the directory).
-
- * ext/standard/dir.c:
- Fixed bug #28355 (glob() does not return error on Linux when it does not
- have permission to open the directory).
-
-2004-05-10 Ilia Alshanetsky <ilia@prohost.org>
-
- * (PHP_4_3)
- NEWS
- ext/cpdf/cpdf.c:
- MFH: Fixed crash inside cpdf_place_inline_image() when working with
- truecolor images.
-
- * ext/cpdf/cpdf.c:
- Fixed crash inside cpdf_place_inline_image() when working with truecolor
- images.
-
-2004-05-10 Zeev Suraski <zeev@zend.com>
-
- * ZendEngine2/zend_operators.c:
- - Fix comparison of objects
- - Clarify convert_object_to_type()
-
-2004-05-10 Stefan Esser <sesser@suspekt.org>
-
- * ZendEngine2/zend_alloc.c:
- Checking MEMORY_LIMIT before doing emalloc/erealloc solves several ugly
- problems.
-
-2004-05-10 Zeev Suraski <zeev@zend.com>
-
- * win32/php5dllts.dsp:
- Fix Win32 build
-
-2004-05-10 Marcus Boerger <marcus.boerger@post.rwth-aachen.de>
-
- * ext/standard/basic_functions.c
- ext/standard/config.m4:
- - Decouple NAN and INF
-
-2004-05-10 Ilia Alshanetsky <ilia@prohost.org>
-
- * (PHP_4_3)
- ext/gd/libgd/gd.h:
- Added missing upgrade bit.
-
- * ext/gd/libgd/gd.h:
- Missing part of the upgrade patch.
-
-2004-05-10 Marcus Boerger <marcus.boerger@post.rwth-aachen.de>
-
- * (PHP_4_3)
- NEWS:
- BFN
-
- * ext/dba/dba_db2.c
- ext/dba/dba_db3.c
- ext/dba/dba_db4.c:
- - Fix problems with c mode
-
-2004-05-09 Ilia Alshanetsky <ilia@prohost.org>
-
- * (PHP_4_3)
- NEWS
- ext/standard/dir.c:
- MFH: Fixed bug #28289 (incorrect resolving of relative paths by glob() in
- windows).
-
- * ext/standard/dir.c:
- Fixed bug #28289 (incorrect resolving of relative paths by glob() in
- windows).
-
- * NEWS:
- GD bug fixing news.
-
- * ext/gd/libgd/gd.c:
- Fixed bug #28304 (Missing bounds check inside imagefilter()).
-
- * ext/gd/libgd/gd_topal.c:
- Fixed bug #28311 (Transparency detection code is off by 1).
-
- * ext/gd/gd.c:
- Fixed bug #28267 (php_image_filter_contrast calls gdImageBrightness).
-
- * (PHP_4_3)
- NEWS
- ext/gd/gd.c
- ext/gd/libgd/gdft.c:
- MFH:
- Upgrade bundled GD library to 2.0.23.
- Fixed bug #28175 (build problem for people using FreeType 2.1.0-2.1.2).
-
- * ext/gd/gd.c
- ext/gd/libgd/gdft.c:
- Upgrade bundled GD library to 2.0.23.
- Fixed bug #28175 (build problem for people using FreeType 2.1.0-2.1.2).
-
-2004-05-09 Wez Furlong <wez.php@thebrainroom.net>
-
- * ext/com_dotnet/com_com.c
- ext/com_dotnet/com_extension.c
- ext/com_dotnet/com_persist.c
- ext/com_dotnet/config.w32
- ext/com_dotnet/php_com_dotnet_internal.h:
- Implement com_get_active_object() and a helper object for working with
- persistent COM objects.
- (That's the last of the stuff I want to sneak in before 5.0 is released).
-
- * ext/com_dotnet/com_misc.c:
- Urgh!
- Use the correct function to free messages from php_win_err(), otherwise
- we say hello to Mr. S. Fault.
-
-2004-05-09 Derick Rethans <php@derickrethans.nl>
-
- * NEWS:
- - Fixed news
-
-2004-05-09 John Coggeshall <john@coggeshall.org>
-
- * NEWS:
- Tell ppl about it.
-
-2004-05-09 Stanislav Malyshev <stas@zend.com>
-
- * ext/standard/proc_open.c:
- Add __EXTENSIONS__ define - otherwise it won't compile on Solaris
-
-2004-05-08 Sergey Kartashoff <gluke@mail.ru>
-
- * ext/mnogosearch/php_mnogo.c
- ext/mnogosearch/php_mnogo.h:
- - mnoGoSearch extension was updated to support CachedCopies of
- mnogosearch-3.2.16 or later. Udm_Get_Agent_Param and
- Udm_Store_Doc_Cgi functions were added. MnoGoSearch-3.2.3 stored API
- was removed.
-
-2004-05-08 Sara Golemon <php@alphaweb.net>
-
- * (PHP_4_3)
- NEWS
- ext/session/session.c:
- MFH: if statement logic would never eval to false.
-
- * ext/session/session.c:
- if statement logic would never eval to false.
-
-2004-05-07 Wez Furlong <wez.php@thebrainroom.net>
-
- * ext/pcre/config.w32:
- spot the vim user
-
- * ext/pcre/config.w32:
- Fix Bug #28317: Avoid recursion in libpcre on windows platform.
-
-2004-05-07 Ard Biesheuvel <a.k.biesheuvel@ewi.tudelft.nl>
-
- * (PHP_4_3)
- ext/interbase/interbase.c:
- MFH: fixed unregistered pointer juggling bug
-
- * ext/interbase/ibase_query.c:
- Fix unregistered bug in zval pointer/array juggling
-
-2004-05-06 Derick Rethans <php@derickrethans.nl>
-
- * tests/lang/bug22367.phpt:
- - Fixed test
-
-2004-05-06 Jay Smith <jsmith@tutorbuddy.com>
-
- * ext/standard/string.c:
- Fixed a segfault. (It's possible for large offsets to make strrpos()
- read past the end of the haystack string...)
-
-2004-05-06 Stanislav Malyshev <stas@zend.com>
-
- * sapi/cgi/cgi_main.c:
- fix line endings
-
- * sapi/cgi/cgi_main.c:
- Fix fastCGI breakage: due to calling flush on unitialized requests,
- request was aborted unless ignore_user_abort is set
-
-2004-05-06 Sara Golemon <php@alphaweb.net>
-
- * NEWS
- ext/standard/user_filters.c
- main/streams/userspace.c:
- Bugfix #28300 Userspace stream/filter names don't need to be lowercased.
-
-2004-05-06 Marc Boeren <M.Boeren@guidance.nl>
-
- * ext/dbx/dbx_oci8.c
- ext/dbx/dbx_pgsql.c:
- Call functions by their new, proper names instead of what are now aliases.
- Change OCIFetchInto (deprecated) to oci_fetch_array.
-
-2004-05-05 Ard Biesheuvel <a.k.biesheuvel@ewi.tudelft.nl>
-
- * ext/interbase/ibase_query.c:
- Fixed unregistered bug: array count is incorrect when binding array ids
- Fixed unregistered bug: empty numeric/datetime param argument is coerced
- to
- a string that cannot be handled by the IB API layer
-
-2004-05-05 Sara Golemon <php@alphaweb.net>
-
- * NEWS
- ext/standard/user_filters.c
- main/streams/userspace.c:
- BugFix#28287 stream_*_register() not calling __autoload().
-
-2004-05-04 Wez Furlong <wez.php@thebrainroom.net>
-
- * NEWS:
- news
-
- * ext/com_dotnet/com_handlers.c
- ext/com_dotnet/com_saproxy.c
- ext/simplexml/simplexml.c
- ext/standard/array.c:
- Update for count_elements handler for overloaded objects.
-
- * ZendEngine2/zend_iterators.c
- ZendEngine2/zend_object_handlers.c
- ZendEngine2/zend_object_handlers.h
- ZendEngine2/zend_objects_API.c:
- Add count_elements handler for overloaded objects.
-
- * sapi/activescript/php5as_scriptengine.h:
- Just in case this header isn't present on the snaps machine.
-
- * sapi/activescript/README
- sapi/activescript/classfactory.cpp
- sapi/activescript/php5activescript.c
- sapi/activescript/php5as_classfactory.h
- sapi/activescript/php5as_scriptengine.h
- sapi/activescript/scriptengine.cpp:
- Improve stability.
- Give it a new CLSID and change the engine name to ActivePHP5.
- Globals registered by the scripting host are now auto-globals and don't
- need to be declared global when accessed from within functions.
-
-2004-05-04 Ard Biesheuvel <a.k.biesheuvel@ewi.tudelft.nl>
-
- * ext/interbase/ibase_query.c:
- ibase_query(): Be careful not to return true on error conditions
-
-2004-05-04 Martin Jansen <mail@martin-jansen.de>
-
- * pear/CODING_STANDARDS:
- - Providing the full URL to the coding standards.
-
-2004-05-03 Wez Furlong <wez.php@thebrainroom.net>
-
- * ext/com_dotnet/com_extension.c
- ext/com_dotnet/com_handlers.c
- ext/com_dotnet/com_misc.c
- ext/com_dotnet/com_saproxy.c
- ext/com_dotnet/com_variant.c
- ext/com_dotnet/tests/27974.phpt:
- Enable writing to SafeArray dimensions.
-
- * ext/com_dotnet/com_handlers.c
- ext/com_dotnet/com_saproxy.c
- ext/com_dotnet/tests/variants.phpt:
- Fix problem when assigning to a variable that holds an instance of
- a COM/VARIANT/DOTNET object.
-
- * ext/com_dotnet/README
- ext/com_dotnet/com_extension.c
- ext/com_dotnet/com_variant.c
- ext/com_dotnet/com_wrapper.c:
- Fixup some constants and error handling.
- Remove unfinished and un-needed function.
-
-2004-05-03 Uwe Schindler <uwe@thetaphi.de>
-
- * sapi/nsapi/nsapi.c
- sapi/nsapi/nsapi.c:
- Security fix: Put '\0' string termination before loop
-
-2004-05-02 Andi Gutmans <andi@zend.com>
-
- * ZendEngine2/zend_operators.c:
- - Fix comparison of two objects in non-compatibility mode.
-
-2004-05-02 Marcus Boerger <marcus.boerger@post.rwth-aachen.de>
-
- * ext/standard/info.c:
- Use caseinsensitive sort
-
-2004-05-02 Wez Furlong <wez.php@thebrainroom.net>
-
- * ext/standard/proc_open.c:
- Fix Bug #28251
-
-2004-05-02 Marcus Boerger <marcus.boerger@post.rwth-aachen.de>
-
- * sapi/cli/php.1.in:
- Add a notice on STDIN
-
-2004-05-01 Marcus Boerger <marcus.boerger@post.rwth-aachen.de>
-
- * ZendEngine2/zend_API.c
- ext/standard/dl.c:
- Don't load modules twice
-
-2004-04-30 Derick Rethans <php@derickrethans.nl>
-
- * ext/sqlite/package.xml:
- - HTML entity to ISO char.
-
-2004-04-30 Marcus Boerger <marcus.boerger@post.rwth-aachen.de>
-
- * (PHP_4_3)
- NEWS
- run-tests.php:
- MFH Bugfix #28229 (PATCH run-tests tripped up by spaces in names)
-
-2004-04-30 Greg Beaver <greg@chiaraquartet.net>
-
- * pear/tests/pear_registry.phpt:
- fix to work with only the installed version of PEAR
-
- * (PHP_4_3)
- pear/PEAR/Downloader.php
- pear/PEAR/Installer.php:
- MFH fix included files and put error messages in PEAR_Downloader where they
- are needed
-
- * pear/PEAR/Downloader.php
- pear/PEAR/Installer.php:
- fix included files and put error messages in PEAR_Downloader where they are
- needed
-
-2004-04-30 Ilia Alshanetsky <ilia@prohost.org>
-
- * (PHP_4_3)
- NEWS
- ext/standard/math.c
- ext/standard/tests/math/bug28228.phpt:
- MFH: Fixed bug #28228 (number_format() does not allow empty decimal
- separator).
-
- * ext/standard/math.c
- ext/standard/tests/math/bug28228.phpt:
- Fixed bug #28228 (number_format() does not allow empty decimal separator).
-
-2004-04-30 Marcus Boerger <marcus.boerger@post.rwth-aachen.de>
-
- * run-tests.php:
- Bugfix #28229 (PATCH run-tests tripped up by spaces in names)
-
-2004-04-30 Greg Beaver <greg@chiaraquartet.net>
-
- * pear/tests/user.input:
- remove notices in E_ALL for config test in PHP 4.3.6
-
- * pear/tests/pear_packager.phpt:
- hopefully fix this test for all cases
-
- * pear/package-PEAR.xml:
- update to begin process for next release (release is not imminent)
-
- * (PHP_4_3)
- pear/package-PEAR.xml:
- MFH update to begin process for next release (release is not imminent)
-
- * pear/tests/pear_common_buildProvidesArray.phpt:
- fix unit test to work with 1.3.2 (which will be needed)
-
- * (PHP_4_3)
- pear/PEAR/Common.php:
- MFH fix 1186: notice in PEAR_Common undeclared $_packageName
-
- * pear/PEAR/Common.php:
- fix 1186: notice in PEAR_Common undeclared $_packageName
-
- * pear/tests/pear_common_analyzeSC.phpt:
- fix unit test with PEAR 1.3.1
-
-2004-04-29 Marcus Boerger <marcus.boerger@post.rwth-aachen.de>
-
- * ext/sqlite/CREDITS:
- An oumlaut doesn't work here, need ASCII only
-
-2004-04-29 Ilia Alshanetsky <ilia@prohost.org>
-
- * (PHP_4_3)
- NEWS
- ext/curl/curl.c:
- MFH: Fixed bug #28196 (missing error constants in cURL extension).
-
- * ext/curl/interface.c:
- Fixed bug #28196 (missing error constants in cURL extension).
-
- * ext/dom/documentfragment.c
- ext/msession/reqclient.h
- ext/oci8/php_oci8.h
- ext/w32api/w32api.c
- sapi/milter/php_milter.c:
- C++ comments.
-
-2004-04-29 Wez Furlong <wez.php@thebrainroom.net>
-
- * NEWS:
- another down...
-
-2004-04-29 Stanislav Malyshev <stas@zend.com>
-
- * ZendEngine2/zend_execute.c:
- Fix bug #27876
-
-2004-04-28 Wez Furlong <wez.php@thebrainroom.net>
-
- * ext/com_dotnet/com_extension.c:
- Should have tested this change before committing.
-
-2004-04-28 Marcus Boerger <marcus.boerger@post.rwth-aachen.de>
-
- * ZendEngine2/zend_exceptions.h:
- Fix c++ builds
-
-2004-04-28 Wez Furlong <wez.php@thebrainroom.net>
-
- * ext/com_dotnet/com_com.c
- ext/com_dotnet/com_extension.c
- ext/com_dotnet/com_handlers.c
- ext/com_dotnet/com_saproxy.c
- ext/com_dotnet/php_com_dotnet_internal.h:
- Fix for Bug #28161 (and probably others that I can't find in the bug db;
- the search interface sucks).
-
- Expand the proxy object so it can handle psuedo array style properties.
-
- ASP/VB code like this:
-
- headObj.Attribute("RID") = rid
-
- can be expressed like this in PHP:
-
- $headObj->Attribute['RID'] = $rid;
-
- In theory, this feature can be used for "multi dimensional" properties:
-
- headObj.Attribute("RID", "Foo") = rid;
-
- like this:
-
- $headObj->Attribute['RID']['Foo'] = $rid;
-
-2004-04-27 Sara Golemon <php@alphaweb.net>
-
- * (PHP_4_3)
- ext/standard/url.c:
- MFH Don't strip off those []s, it'll only create problems in wrappers and
- elsewhere.
-
- * ext/standard/url.c:
- Don't strip off those []s, it'll only create problems in wrappers and
- elsewhere.
-
- * (PHP_4_3)
- NEWS
- ext/standard/url.c:
- MFH BugFix 28187 parse_url does not handle
- scheme://[0123:4567::89]:12345/etc style IPv6 embedded address URLs
-
- * ext/standard/url.c:
- BugFix 28187 parse_url does not handle scheme://[0123:4567::89]:12345/etc
- style IPv6 embedded address URLs
-
-2004-04-27 Marcus Boerger <marcus.boerger@post.rwth-aachen.de>
-
- * ZendEngine2/zend_builtin_functions.c:
- - Optional parameter to class_exists() that can be used to bypass
- __autoload() which can be helpfull in __autoload() itself.
-
-2004-04-27 Ilia Alshanetsky <ilia@prohost.org>
-
- * ext/xmlrpc/libxmlrpc/base64.c
- ext/xmlrpc/libxmlrpc/queue.h
- ext/xmlrpc/libxmlrpc/xml_to_soap.c
- ext/xmlrpc/libxmlrpc/xml_to_xmlrpc.c
- ext/xmlrpc/libxmlrpc/xmlrpc.c:
- Removed C++ style comments.
-
-2004-04-27 Marcus Boerger <marcus.boerger@post.rwth-aachen.de>
-
- * ZendEngine2/zend_interfaces.c:
- - Fix warnings
-
- * ZendEngine2/zend_interfaces.c
- ZendEngine2/zend_interfaces.h
- ZendEngine2/zend_iterators.h:
- - no unneccessary retval initialization
- - new c-level iterator handler invalidate_current that is optionally
- used to clear internal caching like in implementation of Iterator
-
-2004-04-27 Andi Gutmans <andi@zend.com>
-
- * ZendEngine2/zend_reflection_api.c:
- - Fix prototypes
-
-2004-04-27 Ilia Alshanetsky <ilia@prohost.org>
-
- * (PHP_4_3)
- ext/gd/libgd/gd.c:
- MFH: Fixed bug #28184 (C++ comments in GD library sources).
-
- * ext/gd/libgd/gd.c:
- Fixed bug #28184 (C++ comments in GD library sources).
-
-2004-04-27 Greg Beaver <greg@chiaraquartet.net>
-
- * pear/PEAR/ErrorStack.php:
- fix bug 1242 - notice if multi-dimensional array is passed as a parameter
- add optional parameter to staticHasErrors() that allows error
- determination for a single package
-
-2004-04-26 Ilia Alshanetsky <ilia@prohost.org>
-
- * ext/yp/yp.c:
- Removed pointless check.
-
-2004-04-26 Marcus Boerger <marcus.boerger@post.rwth-aachen.de>
-
- * ZendEngine2/zend_reflection_api.c:
- Fix prototype
-
-2004-04-26 Antony Dovgal <tony2001@phpclub.net>
-
- * ext/oci8/oci8.c:
- hmm. this comma is supposed to be a semicolon.
-
-2004-04-25 Derick Rethans <php@derickrethans.nl>
-
- * ext/gd/libgd/gd.c
- ext/gd/tests/bug28147.phpt:
- - MFB: Fixed bug #28147 (Crash with drawing anti-alised lines)
-
- * (PHP_4_3)
- NEWS
- ext/gd/libgd/gd.c
- ext/gd/tests/bug28147.phpt
- ext/gd/tests/bug28147.phpt:
- - Fixed bug #28147 (Crash with drawing anti-aliased lines)
-
-2004-04-25 Marcus Boerger <marcus.boerger@post.rwth-aachen.de>
-
- * ZendEngine2/zend_builtin_functions.c:
- Skip correct amount of stack entries
-
- * ZendEngine2/zend_interfaces.c:
- Capture potential problem by error message
-
- * ZendEngine2/zend_reflection_api.c:
- Show number of classes
-
- * NEWS:
- BFN
-
-2004-04-25 Andi Gutmans <andi@zend.com>
-
- * NEWS
- configure.in
- ZendEngine2/zend.h
- main/php_version.h:
- - RC3-dev
-
- * (php_5_0_0RC2)
- NEWS:
- - This was forgotten
-
- * NEWS
- configure.in
- ZendEngine2/zend.h
- main/php_version.h:
- - RC2
-
-2004-04-25 Wez Furlong <wez.php@thebrainroom.net>
-
- * NEWS:
- Spell it out.
-
-2004-04-24 Ilia Alshanetsky <ilia@prohost.org>
-
- * tests/strings/002.phpt:
- Fixed test.
-
-2004-04-23 Andi Gutmans <andi@zend.com>
-
- * ZendEngine2/zend_compile.c:
- - Fixed bug #27923. foreach() without a key should not check if the key
- - is a reference (Adam)
-
- * NEWS:
- NEWS
-
-2004-04-23 Derick Rethans <php@derickrethans.nl>
-
- * (PHP_4_3)
- NEWS:
- Reorder NEWS
-
- * NEWS:
- This was already in NEWS for the branch, removing
-
- * NEWS:
- Cleanup NEWS
-
-2004-04-23 Rasmus Lerdorf <rasmus@lerdorf.com>
-
- * NEWS
- ext/pcre/php_pcre.c:
- MFB: Fix for bug #27810
-
- * (PHP_4_3)
- NEWS
- ext/pcre/php_pcre.c:
- bug #27810 from Joe Orton
-
-2004-04-23 Ilia Alshanetsky <ilia@prohost.org>
-
- * (PHP_4_3)
- NEWS
- ext/mysql/php_mysql.c:
- MFH: Fixed bug #28087 (Do not force mysql.trace_mode to 0 on every request)
-
- * ext/mysql/php_mysql.c:
- Fixed bug #28087 (Do not force mysql.trace_mode to 0 on every request).
-
-2004-04-23 Derick Rethans <php@derickrethans.nl>
-
- * ext/standard/info.c:
- - Fixed buffer overflow in phpinfo() for Zend Extension Api NO.
-
-2004-04-23 Wez Furlong <wez.php@thebrainroom.net>
-
- * NEWS:
- Another one bites the dust
-
-2004-04-23 Sara Golemon <php@alphaweb.net>
-
- * ext/standard/http_fopen_wrapper.c:
- In-HEAD bugfix# 28115
-
-2004-04-22 Marcus Boerger <marcus.boerger@post.rwth-aachen.de>
-
- * ext/sqlite/tests/bug28112.phpt:
- Avoid warning to interfere test result
-
- * (PHP_4_3)
- NEWS:
- BFN
-
-2004-04-22 Ilia Alshanetsky <ilia@prohost.org>
-
- * (PECL_4_3)
- ext/sqlite/sqlite.c:
- MFH: Fixed bug #28112 (Empty queries may result in crashes).
-
- * ext/sqlite/sqlite.c:
- Empty query checks, bug #28112.
-
-2004-04-22 Marcus Boerger <marcus.boerger@post.rwth-aachen.de>
-
- * ext/sqlite/tests/bug28112.phpt:
-
- Add test for bug #28112
-
- * ext/sqlite/sqlite.c:
- bugfix #28112
-
-2004-04-22 Wez Furlong <wez.php@thebrainroom.net>
-
- * ext/com_dotnet/tests/27974.phpt:
- Add test
-
- * ext/com_dotnet/com_variant.c:
- A working fix for the safearray mapping bug.
-
- * ext/standard/basic_functions.c:
- The fix for the vc7 libc putenv bug is also needed here to avoid a crash.
-
-2004-04-22 Hartmut Holzgraefe <hartmut@php-groupies.de>
-
- * ext/mime_magic/DEPRECATED
- ext/mime_magic/EXPERIMENTAL
- ext/mime_magic/config.m4:
- Depercating mime_magic in favor of PECL::fileinfo
-
-2004-04-22 Wez Furlong <wez.php@thebrainroom.net>
-
- * ext/com_dotnet/com_variant.c:
- (probable) fix for Bug #27974: PHP Arrays are not mapped to VARIANTs.
-
-2004-04-22 Ilia Alshanetsky <ilia@prohost.org>
-
- * (PHP_4_3)
- NEWS
- ext/pgsql/pgsql.c:
- MFH: Fixed possible crash inside pg_copy_(to|from) function if delimiter is
- more then 1 character long.
-
- * ext/pgsql/pgsql.c:
- Fixed possible crash inside pg_copy_(to|from) function if delimiter is more
- then 1 character long.
-
-2004-04-21 Wez Furlong <wez.php@thebrainroom.net>
-
- * NEWS:
- News about the ssl server socket bug
-
- * ext/openssl/openssl.c
- ext/openssl/xp_ssl.c:
- Fix bug #28096 - stream_socket_accept() on an SSL server socket doesn't
- enable SSL on the accepted socket.
-
- - Add cipher list context option
- - Add helpful hint about why SSL server socket fails with mysterious
- error (eg: you need an SSL certificate for most ciphers).
-
- * NEWS
- main/streams/mmap.c:
- Fixed bug #19749 (shouldn't mmap() files larger than memory_limit)
-
-2004-04-21 Andi Gutmans <andi@zend.com>
-
- * configure.in
- ZendEngine2/zend.h
- main/php_version.h:
- - RC2-dev
-
- * (php_5_0_0RC2RC2)
- configure.in
- ZendEngine2/zend.h
- main/php_version.h:
- - Prepare for RC2RC2 (if everything is OK especially Zeev's interface
- - patch I'll roll RC2 tomorrow).
-
-2004-04-21 Wez Furlong <wez.php@thebrainroom.net>
-
- * (php_5_0_0RC2RC2)
- NEWS:
- yaz moved
-
- * ext/yaz/.cvsignore
- ext/yaz/CREDITS
- ext/yaz/README
- ext/yaz/config.m4
- ext/yaz/config.w32
- ext/yaz/package.xml
- ext/yaz/php_yaz.c
- ext/yaz/php_yaz.h
- ext/yaz/yaz.dsp:
- Moved ext/yaz to PECL.
-
-2004-04-21 Zeev Suraski <zeev@zend.com>
-
- * (php_5_0_0RC2RC2)
- ZendEngine2/zend_compile.c:
- Restore fatal error in case a method that's supposed to implement an
- interface/abstract method, breaks its prototype
-
-2004-04-21 Derick Rethans <php@derickrethans.nl>
-
- * NEWS:
- - Reorder news
-
-2004-04-21 Ilia Alshanetsky <ilia@prohost.org>
-
- * (PHP_4_3)
- NEWS:
- Correct news entry order.
-
- * (PHP_4_3)
- ext/sysvshm/sysvshm.c:
- MFH:
- Fixed possible memory leaks.
- Prevent shm_attach() from destroying non-shm resources.
-
- * (php_5_0_0RC2RC2)
- ext/sysvshm/sysvshm.c:
- Fixed possible memory leaks.
- Prevent shm_attach() from destroying non-shm resources.
-
-2004-04-20 Frank M. Kromann <frank@kromann.info>
-
- * NEWS
- NEWS:
- mssql related fixes
-
- * (PHP_4_3)
- ext/mssql/php_mssql.h:
- MFH: Fix #28007. Compile fails when the SHORT type is undefined (older
- versions of FreeTDS)
-
- * ext/mssql/php_mssql.h:
- Fix #28007. Compile fails when the SHORT type is undefined (older versions
- of FreeTDS)
-
- * (PHP_4_3)
- ext/mssql/php_mssql.c:
- MFH: Fix problem getting return value from stored procedure when it returns
- multiple results
-
- * ext/mssql/php_mssql.c:
- Fix problem getting return value from stored procedure when it returns
- multiple results
-
-2004-04-20 John Coggeshall <john@coggeshall.org>
-
- * NEWS:
- minor update
-
-2004-04-20 Andi Gutmans <andi@zend.com>
-
- * NEWS:
- - Fix news
-
- * NEWS:
- - More news
-
- * ZendEngine2/zend_language_parser.y:
- - Fix bug #27283 - Exceptions where the last catch() statement was
- sometimes
- - skipped.
-
-2004-04-20 Christian Stocker <chregu@phant.ch>
-
- * ext/xsl/xsltprocessor.c:
- - make static methods calls work from within xslt
- - extended tests
-
-2004-04-20 Marcus Boerger <marcus.boerger@post.rwth-aachen.de>
-
- * tests/classes/interface_construct.phpt
- tests/classes/interface_optional_arg.phpt:
- Add new tests (by magnus)
-
-2004-04-19 Rob Richards <rrichards@ctindustries.net>
-
- * scripts/Makefile.frag:
- add ext/libxml/ to the headers path
-
-2004-04-19 Marcus Boerger <marcus.boerger@post.rwth-aachen.de>
-
- * ZendEngine2/zend_reflection_api.c:
- show ini entries and classes for extensions.
-
-2004-04-19 Wez Furlong <wez.php@thebrainroom.net>
-
- * NEWS
- ext/standard/php_fopen_wrapper.c:
- Fix #27865; don't dup STDIN, STDOUT or STDERR when running under CLI.
-
-2004-04-19 Derick Rethans <php@derickrethans.nl>
-
- * NEWS:
- - Is it really this hard?</jani>
-
-2004-04-19 John Coggeshall <john@coggeshall.org>
-
- * NEWS:
- Adding tidy error handling news
-
-2004-04-19 Wez Furlong <wez.php@thebrainroom.net>
-
- * NEWS:
- and the news
-
- * configure.in
- ext/standard/proc_open.c:
- Add pty support to proc_open() for systems with Unix98 ptys.
-
-2004-04-19 Edin Kadribasic <edink@emini.dk>
-
- * ext/interbase/ibase_blobs.c
- ext/interbase/ibase_events.c
- ext/interbase/php_ibase_includes.h:
- No need to export anything. Fixes win32 build
-
-2004-04-19 Wez Furlong <wez.php@thebrainroom.net>
-
- * (PHP_4_3)
- NEWS:
- news!
-
- * (PHP_4_3)
- main/network.c:
- MFH: timeout duration too long in liveness checks for sockets.
- Fixes Bug #28055
-
-2004-04-18 Ilia Alshanetsky <ilia@prohost.org>
-
- * ext/posix/posix.c:
- Simplify code via the use of macros.
-
-2004-04-18 Derick Rethans <php@derickrethans.nl>
-
- * ext/mcrypt/mcrypt.c:
- - Whitespace
-
-2004-04-17 Derick Rethans <php@derickrethans.nl>
-
- * ext/standard/html.c:
- - MFH: Fix for bug #28042 (greek letters in html to entitity mapping not
- correct)
-
- * (PHP_4_3)
- NEWS
- ext/standard/html.c:
- - Fix for bug #28042 (greek letters in html to entitity mapping not
- correct)
-
-2004-04-17 Marcus Boerger <marcus.boerger@post.rwth-aachen.de>
-
- * ZendEngine2/zend.c:
- Retval may not be set when zend_execute() is overloaded
-
-2004-04-16 Uwe Schindler <uwe@thetaphi.de>
-
- * (PHP_4_3)
- ext/sybase/php_sybase_db.c
- ext/sybase_ct/php_sybase_ct.c:
- MFH: set Sybase default APPNAME to ("PHP " PHP_VERSION)
-
- * ext/sybase/php_sybase_db.c
- ext/sybase_ct/php_sybase_ct.c:
- set Sybase default APPNAME to ("PHP " PHP_VERSION)
-
-2004-04-15 Marcus Boerger <marcus.boerger@post.rwth-aachen.de>
-
- * main/snprintf.c:
- Bugfix #28012, now for snprintf
-
- * main/spprintf.c:
- Bugfix #28012 spprintf() output inconsistent for %p
-
- * ZendEngine2/zend_execute.c:
- Handle failure in get_current_data
-
-2004-04-15 Andi Gutmans <andi@zend.com>
-
- * ext/mysqli/mysqli.c:
- - Temporary fix for bug #27869
- - George, you need to implement clone in order for "clone" and
- - compatibility mode to work.
-
-2004-04-15 Hartmut Holzgraefe <hartmut@php-groupies.de>
-
- * README.TESTING:
- typo
-
- * README.TESTING:
- be a bit more explanatory ...
-
-2004-04-15 Ilia Alshanetsky <ilia@prohost.org>
-
- * (PHP_4_3)
- ext/session/tests/bug26862.phpt:
- MFH: Fixed test failure if session.use_trans_sid is enabled.
-
- * ext/session/tests/bug26862.phpt:
- Fixed test failure if session.use_trans_sid is enabled.
-
-2004-04-15 Jani Taskinen <jani.taskinen@kolumbus.fi>
-
- * NEWS:
- Remove duplicate entries
-
-2004-04-15 Wez Furlong <wez.php@thebrainroom.net>
-
- * ext/sysvmsg/EXPERIMENTAL
- ext/sysvmsg/package.xml:
- been stable for a long time now
-
-2004-04-15 Dmitry Stogov <dmitry@zend.com>
-
- * NEWS:
- Fixed bug #27681 (soap extension fails without HAVE_TM_GMTOFF).
-
-2004-04-15 Jani Taskinen <jani.taskinen@kolumbus.fi>
-
- * NEWS:
- reorder..is this so hard..? :)
-
-2004-04-14 Marcus Boerger <marcus.boerger@post.rwth-aachen.de>
-
- * NEWS:
- BFN
-
-2004-04-14 Ilia Alshanetsky <ilia@prohost.org>
-
- * (PHP_4_3)
- NEWS
- ext/gd/libgd/gd.c:
- Fixed bug #27995 (imagefilltoborder() stops the fill process prematurely).
-
-
-2004-04-14 Andi Gutmans <andi@zend.com>
-
- * ZendEngine2/zend_extensions.h:
- - Add comment
-
-2004-04-14 Ilia Alshanetsky <ilia@prohost.org>
-
- * (PHP_4_3)
- configure.in
- main/php_version.h:
- Back to dev.
-
- * (PHP_4_3)
- configure.in
- main/php_version.h:
- Prepare for 4.3.6
-
-2004-04-14 Edin Kadribasic <edink@emini.dk>
-
- * (PHP_4_3)
- NEWS:
- News update
-
- * ext/bz2/config.w32:
- According to Wez, this is not needed.
- It also breaks win32 build.
-
-2004-04-14 Andi Gutmans <andi@zend.com>
-
- * configure.in
- ZendEngine2/zend.h
- main/php_version.h:
- - RC2-dev
-
- * (php_5_0_0RC2RC1)
- configure.in
- ZendEngine2/zend.h
- main/php_version.h:
- - RC2RC1
-
-2004-04-14 Derick Rethans <php@derickrethans.nl>
-
- * (php_5_0_0RC2RC1)
- ext/iconv/config.m4:
- - Enable iconv by default
-
-2004-04-13 Marcus Boerger <marcus.boerger@post.rwth-aachen.de>
-
- * ZendEngine2/zend_exceptions.c:
- Classnames shall start with an uppercase character
-
-2004-04-13 Ilia Alshanetsky <ilia@prohost.org>
-
- * (PHP_4_3)
- NEWS
- ext/session/session.c:
- MFH: Fixed bug #27963 (Session lifetime setting may leak between requests).
-
- * ext/session/session.c:
- Another setting leak in session code (bug #27963).
-
-2004-04-13 Sara Golemon <php@alphaweb.net>
-
- * ext/bz2/config.w32
- ext/bz2/php_bz2.def:
- Export symbols needed by bz2_filter
-
-2004-04-13 Wez Furlong <wez.php@thebrainroom.net>
-
- * ext/com_dotnet/com_saproxy.c:
- This wasn't updated for new parameters for object handlers yet...
-
-2004-04-13 Jani Taskinen <jani.taskinen@kolumbus.fi>
-
- * NEWS:
- BFN
-
-2004-04-13 Zeev Suraski <zeev@zend.com>
-
- * ZendEngine2/zend_builtin_functions.c:
- Fix debug_backtrace to show arguments again
- We need to merge code from debug_backtrace & debug_print_backtrace at
- some point!
-
-2004-04-13 Andi Gutmans <andi@zend.com>
-
- * ZendEngine2/zend_extensions.h:
- - Fix API no of Engine 2. The first number is the engine version and the
- - rest is the API_NO. This way engine2_api_no is always greater than
- - engine1_api_no.
-
- * ZendEngine2/zend.c
- ZendEngine2/zend_exceptions.c
- ZendEngine2/zend_exceptions.h:
- - Add hook for exception handler (Derick)
-
-2004-04-13 Ilia Alshanetsky <ilia@prohost.org>
-
- * ext/session/session.c:
- Fixed bug #27963 (Session lifetime setting may leak between requests).
-
-2004-04-12 Derick Rethans <php@derickrethans.nl>
-
- * (PHP_4_3)
- ext/gd/libgd/gd.h:
- - MFH: Add default fontpath for win98/xp
-
- * ext/gd/libgd/gd.h:
- - Add fontpath for win98/XP (Patch by Friedhelm Betz)
-
-2004-04-12 Marcus Boerger <marcus.boerger@post.rwth-aachen.de>
-
- * ZendEngine2/zend_API.h:
- Fix order of macro parameter (synch with other macros)
-
-2004-04-12 Andi Gutmans <andi@zend.com>
-
- * ZendEngine2/OBJECTS2_HOWTO
- ZendEngine2/zend_extensions.h
- ZendEngine2/zend_ini.c
- ZendEngine2/zend_ini.h
- ZendEngine2/zend_modules.h
- ext/standard/basic_functions.c:
- - modifyable -> modifiable
-
-2004-04-11 Ilia Alshanetsky <ilia@prohost.org>
-
- * (PECL_4_3)
- ext/sqlite/sqlite.c:
- MFH: Open basedir & safe_mode exception when copying or attaching to a
- memory only database.
-
- * ext/sqlite/sqlite.c:
- Open basedir & safe_mode exception when copying or attaching to a memory
- only database.
-
-2004-04-10 Marcus Boerger <marcus.boerger@post.rwth-aachen.de>
-
- * ext/standard/user_filters.c:
- studlyCaps
-
-2004-04-09 Sara Golemon <php@alphaweb.net>
-
- * main/network.c:
- BugFix: Copy/Paste mistake referenced undefined variable on platforms
- without gettimeofday()
-
-2004-04-09 Ard Biesheuvel <a.k.biesheuvel@ewi.tudelft.nl>
-
- * ext/interbase/ibase_service.c:
- Changed ibase_user_[add|modify|delete]() to use service resources
-
-2004-04-09 Ilia Alshanetsky <ilia@prohost.org>
-
- * (PECL_4_3)
- ext/sqlite/libsqlite/src/os.c:
- MFH: Fixed bug #27928 (sqlite incorrectly handles invalid filenames).
-
- * NEWS
- ext/sqlite/libsqlite/src/os.c:
- Fixed bug #27928 (sqlite incorrectly handles invalid filenames).
-
-2004-04-09 Andi Gutmans <andi@zend.com>
-
- * NEWS:
- - NEWS
-
- * ZendEngine2/zend_object_handlers.c:
- - Fix bug #26441 (When __set() returned a value it corrupted it)
-
-2004-04-09 Greg Beaver <greg@chiaraquartet.net>
-
- * pear/packages/DB-1.6.2.tar
- pear/packages/DB-1.6.2.tar
- pear/packages/Mail-1.1.3.tar
- pear/packages/Mail-1.1.3.tar
- pear/packages/XML_RPC-1.1.0.tar:
-
- file DB-1.6.2.tar was initially added on branch PHP_4_3.
-
- * pear/packages/DB-1.6.0.tar
- pear/packages/DB-1.6.0.tar
- pear/packages/HTTP-1.2.2.tar
- pear/packages/Mail-1.1.2.tar
- pear/packages/Mail-1.1.2.tar
- pear/packages/Net_SMTP-1.2.3.tar
- pear/packages/Net_Socket-1.0.1.tar
- pear/packages/XML_Parser-1.0.1.tar
- pear/packages/XML_RPC-1.0.4.tar
- pear/packages/XML_RPC-1.0.4.tar:
- re-organize as per PEAR-Core discussion
-
- * pear/packages/XML_RPC-1.1.0.tar:
-
- re-organize as per PEAR-Core discussion
-
- * pear/go-pear-list.php:
- as per PEAR-Core discussion, remove all but absolutely essential
- packages for the installer, and for PEAR_Frontend_Web
-
-2004-04-08 Jani Taskinen <jani.taskinen@kolumbus.fi>
-
- * (PHP_4_3)
- configure.in:
- fix typo
-
- * (PHP_4_3)
- ext/yaz/config.m4:
- PHP_ADD_LIBPATH checks that the path is not /usr/lib..
-
-2004-04-08 Greg Beaver <greg@chiaraquartet.net>
-
- * pear/go-pear-list.php:
- oops, PHPUnit2, not PHPUnit
-
-2004-04-08 Andi Gutmans <andi@zend.com>
-
- * (PHP_4_3)
- NEWS:
- - News
-
-2004-04-08 Marcus Boerger <marcus.boerger@post.rwth-aachen.de>
-
- * NEWS:
- BFN
-
- * ZendEngine2/zend_reflection_api.c:
- Bugfix #27519 Reflection_Function constructor crashes with non-existant
- function's name
-
-2004-04-08 Derick Rethans <php@derickrethans.nl>
-
- * (PHP_4_3)
- ext/standard/parsedate.y:
- - Added missing CEST zone
-
- * ext/standard/parsedate.y:
- - Add missing "CEST" timezone
-
-2004-04-08 Ilia Alshanetsky <ilia@prohost.org>
-
- * (PHP_4_3)
- configure.in
- main/php_version.h:
- Back to dev.
-
- * (PHP_4_3)
- NEWS
- configure.in
- main/php_version.h:
- 4.3.6RC3
-
-2004-04-08 Jon Parise <jon@csh.rit.edu>
-
- * pear/go-pear-list.php:
- Include Mail 1.1.3 with PHP 5.
-
-2004-04-08 Stanislav Malyshev <stas@zend.com>
-
- * (PHP_4_3)
- Zend/zend.c:
- Fix elusive crash: executor_globals_dtor shouldn't destroy resource dtor
- hash, since this hash is global (GLOBAL - one for all threads) and
- executor_globals_dtor is called on thread shutdown.
- Fix destructors_list cleanup call - it can be called last on shutdown
- since this hash doesn't have dtor
-
-2004-04-08 Derick Rethans <php@derickrethans.nl>
-
- * NEWS:
- - Added reworded destructor change
-
- * ext/standard/tests/time/bug20382.phpt:
- - Added test and not the diff ;-)
-
-2004-04-08 Jani Taskinen <jani.taskinen@kolumbus.fi>
-
- * ext/standard/tests/time/bug20382.diff:
- remove crap
-
-2004-04-08 Greg Beaver <greg@chiaraquartet.net>
-
- * pear/go-pear-list.php:
- Dan wants tabs -> spaces
-
- * pear/go-pear-list.php:
- forgot phpunit -> phpunit2 for php5
-
- * pear/go-pear-list.php:
- this should update the list
-
-
-2004-04-08 Derick Rethans <php@derickrethans.nl>
-
- * ext/standard/tests/time/bug20382.diff:
- - Test case for bug #20382
-
-2004-04-08 Wez Furlong <wez.php@thebrainroom.net>
-
- * pear/go-pear-list.php:
- Add this list here, so that pear-core guys can manipulate the PEAR bundle
- for the win32 snapshot.
-
-2004-04-08 Ilia Alshanetsky <ilia@prohost.org>
-
- * (PHP_4_3)
- NEWS:
- Prepare news file for release.
-
-2004-04-08 Wez Furlong <wez.php@thebrainroom.net>
-
- * ext/mbstring/config.w32:
- Enable mbregex in win32 build
-
-2004-04-08 Jani Taskinen <jani.taskinen@kolumbus.fi>
-
- * ext/gd/tests/bug22544.phpt
- ext/gd/tests/bug24155.phpt
- ext/gd/tests/bug27582_1.phpt:
- - Fix test file outputs.
-
- * NEWS:
- pfft..
-
-2004-04-08 Moriyoshi Koizumi <moriyoshi@at.wakwak.com>
-
- * ext/mbstring/config.m4:
- - Add missing checks. Maybe fixes PR #27680
-
-2004-04-07 Ilia Alshanetsky <ilia@prohost.org>
-
- * (PHP_4_3)
- NEWS:
- Missing news entries.
-
-2004-04-07 Edin Kadribasic <edink@emini.dk>
-
- * (PHP_4_3)
- ext/gd/gd.c:
- Merged wrongly s/#ifdef/#if/
-
- * ext/gd/gd.c:
- Allow compilation with gdlib 1.8
-
-2004-04-07 Ilia Alshanetsky <ilia@prohost.org>
-
- * (PHP_4_3)
- ext/gd/tests/bug27582_2.phpt:
- Removed test for a problem inside the GD library.
-
-2004-04-07 Adam Dickmeiss <adam@indexdata.dk>
-
- * (PHP_4_3)
- ext/yaz/config.m4:
- Fixed bug #27803 (YAZ lib path)
-
-2004-04-07 Frank M. Kromann <frank@kromann.info>
-
- * ext/zlib/php_zlib.def:
- Export symbols required by zlib_filter extension
-
-2004-04-07 Rob Richards <rrichards@ctindustries.net>
-
- * ext/xsl/php_xsl.c:
- Fix class name
-
- * NEWS:
- BFN
-
- * ext/xml/compat.c
- ext/xml/xml.c:
- Fix bug #27821 xml_parse segfaults when xml_set_object called from class
- method
- fix memleaks in compat.c
-
-2004-04-07 Andi Gutmans <andi@zend.com>
-
- * ZendEngine2/zend_builtin_functions.c:
- - Hopefully fix the debug_backtrace() code.
-
- * ZendEngine2/zend_builtin_functions.c:
- - Fix crash bug in zend_debug_backtrace(). No idea how come this survived
- - for so long....
-
-2004-04-07 Jani Taskinen <jani.taskinen@kolumbus.fi>
-
- * (PHP_4_3)
- NEWS
- configure.in:
- MFH: Revert the patch to "fix" #27664 and added more informal error msg.
-
- * configure.in:
- Revert the patch to "fix" #27664 and added more informal error msg.
-
-2004-04-07 Ard Biesheuvel <a.k.biesheuvel@ewi.tudelft.nl>
-
- * ext/interbase/ibase_service.c
- ext/interbase/php_ibase_includes.h:
- Don't define ibase_service struct type unless its member types are defined
-
-2004-04-07 Stanislav Malyshev <stas@zend.com>
-
- * ext/standard/incomplete_class.c:
- Fix incomplete class for the new object model
-
-2004-04-07 Greg Beaver <greg@chiaraquartet.net>
-
- * pear/package-PEAR.xml
- pear/package-PEAR.xml:
- developer -> lead for cellog
-
-2004-04-06 Ilia Alshanetsky <ilia@prohost.org>
-
- * ext/ldap/ldap.c:
- Removed pointless check.
-
-2004-04-06 Greg Beaver <greg@chiaraquartet.net>
-
- * (RELEASE_1_3_1)
- pear/package-PEAR.xml:
- add PEAR_ErrorStack to description of PEAR
-
- * pear/package-PEAR.xml
- pear/package-PEAR.xml:
- change release date
-
-2004-04-06 Rob Richards <rrichards@ctindustries.net>
-
- * ext/dom/xpath.c:
- register_namespace changed to registerNamespace for consistency
-
-2004-04-06 Derick Rethans <php@derickrethans.nl>
-
- * (PHP_4_3)
- NEWS:
- - Update NEWS with fugbix.
-
-2004-04-06 Rob Richards <rrichards@ctindustries.net>
-
- * (PHP_4_3)
- ext/domxml/php_domxml.c:
- Fix Bug #27769 crash using domxml_xmltree
-
-2004-04-06 Adam Dickmeiss <adam@indexdata.dk>
-
- * ext/yaz/php_yaz.c:
- Allow character set conversion for yaz_record's array method, e.g.
- yaz_record($id,$pos,"array;charset=marc8,iso-8859-1")
-
-2004-04-06 Jani Taskinen <jani.taskinen@kolumbus.fi>
-
- * (PHP_4_3)
- ext/standard/credits_ext.h:
- update credits
-
- * NEWS:
- reorder, reword, typos..
-
- * NEWS:
- Remove duplicate entry
-
- * (PHP_4_3)
- NEWS:
- rtd
-
-2004-04-05 Ilia Alshanetsky <ilia@prohost.org>
-
- * (PHP_4_3)
- configure.in
- main/php_version.h:
- Back to dev.
-
- * (PHP_4_3)
- NEWS
- configure.in
- main/php_version.h:
- Prepare for 4.3.6RC2
-
- * (PHP_4_3)
- ext/wddx/tests/001.phpt
- ext/wddx/tests/wddx.xml:
- Restore wddx tests, without the troublesome date conversions.
-
-2004-04-05 Ard Biesheuvel <a.k.biesheuvel@ewi.tudelft.nl>
-
- * ext/interbase/config.m4
- ext/interbase/config.w32
- ext/interbase/ibase_blobs.c
- ext/interbase/ibase_events.c
- ext/interbase/ibase_query.c
- ext/interbase/ibase_service.c
- ext/interbase/interbase.c
- ext/interbase/php_ibase_includes.h:
- More divide & conquer
-
-2004-04-05 Dmitry Stogov <dmitry@zend.com>
-
- * tests/lang/bug22367.phpt:
- Fix (using patterns)
-
-2004-04-04 Moriyoshi Koizumi <moriyoshi@at.wakwak.com>
-
- * ext/mbstring/config.m4:
- - Let it work safely
-
- * (PHP_4_3)
- ext/wddx/tests/001.phpt
- ext/wddx/tests/wddx.xml:
- - Remove test, as it's never worked as expected.
-
-2004-04-04 Derick Rethans <php@derickrethans.nl>
-
- * ext/mbstring/config.m4:
- - Fixed test
-
-2004-04-04 Ilia Alshanetsky <ilia@prohost.org>
-
- * ZendEngine2/zend_objects_API.c:
- Removed unused variable.
-
-2004-04-04 Moriyoshi Koizumi <moriyoshi@at.wakwak.com>
-
- * ext/wddx/tests/001.phpt:
- - Fix test: Any datetime value that exceeds the unix time range should
- not be unserialized.
-
-2004-04-04 Ilia Alshanetsky <ilia@prohost.org>
-
- * (PHP_4_3)
- NEWS
- ext/gd/gd.c:
- MFH: Fixed a bug that prevented building of the GD extension against
- external GD lib 1.X.
-
- * ext/gd/gd.c:
- Fixed a bug that prevented building of gd extension against external GD
- lib 1.X.
-
-2004-04-04 Ard Biesheuvel <a.k.biesheuvel@ewi.tudelft.nl>
-
- * ext/interbase/php_ibase_includes.h:
- CS
-
-2004-04-04 Derick Rethans <php@derickrethans.nl>
-
- * ext/standard/tests/time/bug21966.phpt:
- - Fixed comment and double 0
-
- * ext/standard/tests/time/bug21966.phpt:
-
- - One more test for a date/time related bug.
-
-2004-04-04 Marcus Boerger <marcus.boerger@post.rwth-aachen.de>
-
- * ext/standard/config.m4:
- Add a comment why it is in
-
-2004-04-03 Andi Gutmans <andi@zend.com>
-
- * ZendEngine2/zend_builtin_functions.c:
- Patch by Timm Friebe:
- It changes
- set_exception_handler() to accept the pseudo-type "callable" (instead of
- a string referring to a global function).
-
-
- Examples:
- set_exception_handler('function_name');
- set_exception_handler(array('class_name', 'static_method'));
- set_exception_handler(array($instance, 'instance_method'));
-
-
- This also makes set_exception_handler() more consistent with all the
- other callback functionality, e.g. set_error_handler().
-
-2004-04-03 Derick Rethans <php@derickrethans.nl>
-
- * ext/mbstring/config.m4:
- - MFB: Fixed bug #27849 (configure craps out on trivial syntax error).
-
- * (PHP_4_3)
- NEWS
- ext/mbstring/config.m4:
- - Fixed bug #27849 (configure craps out on trivial syntax error).
-
-2004-04-03 Andi Gutmans <andi@zend.com>
-
- * ZendEngine2/zend_operators.c:
- - Nuke more old junk
-
-2004-04-03 Ard Biesheuvel <a.k.biesheuvel@ewi.tudelft.nl>
-
- * ext/standard/config.m4:
- That should do it
-
-2004-04-03 Greg Beaver <greg@chiaraquartet.net>
-
- * (PHP_4_3)
- pear/PEAR/Command/Remote.php:
- MFH
- fixed #534 for real (remove notice if state=stable doesn't exist, and use
- "none" for stable version number)
-
- * pear/PEAR/Command/Remote.php:
- fixed #534 for real (remove notice if state=stable doesn't exist, and use
- "none" for stable version number)
-
-2004-04-03 Ard Biesheuvel <a.k.biesheuvel@ewi.tudelft.nl>
-
- * ext/interbase/tests/008.phpt:
- Skip on Windows
-
- * ext/interbase/tests/interbase.inc:
- Don't rely on OS-based authentication (as it is not supported under Win32)
-
-2004-04-03 Marcus Boerger <marcus.boerger@post.rwth-aachen.de>
-
- * ext/sqlite/sqlite.c
- ext/sqlite/tests/sqlite_014.phpt
- ext/sqlite/tests/sqlite_oo_014.phpt:
- Increase severity level and use a more precise error message.
-
-2004-04-03 Ard Biesheuvel <a.k.biesheuvel@ewi.tudelft.nl>
-
- * (PHP_4_3)
- ext/standard/config.m4:
- 2nd try for glibc2.2/sparc64
-
-2004-04-03 Andi Gutmans <andi@zend.com>
-
- * ZendEngine2/zend.h
- ZendEngine2/zend_operators.c
- ZendEngine2/zend_operators.h:
- - Nuke code which hasn't been in use for ages.
-
-2004-04-03 Ard Biesheuvel <a.k.biesheuvel@ewi.tudelft.nl>
-
- * ext/interbase/tests/004.phpt:
- fclose() tempfile so unlink() doesn't choke on Win32
-
- * ext/interbase/interbase.c:
- Change definition of ISC_LONG_[MIN|MAX] to please MSVC.
-
- * ext/standard/config.m4:
- MFB: more elaborate HUGE_VAL test
-
-2004-04-03 Marcus Boerger <marcus.boerger@post.rwth-aachen.de>
-
- * ext/standard/basic_functions.c:
- Initialize to 0 to prevent valgrind warnings
-
-2004-04-03 Ard Biesheuvel <a.k.biesheuvel@ewi.tudelft.nl>
-
- * (PHP_4_3)
- ext/standard/config.m4:
- Changed test to include returning HUGE_VAL as well (intended to resolve
- #27830)
-
-2004-04-03 Greg Beaver <greg@chiaraquartet.net>
-
- * (PHP_4_3)
- pear/PEAR.php
- pear/package-PEAR.xml:
- MFH
- fix Bug #937 throwError() treats every call as static
- fix Bug #964 PEAR_ERROR_EXCEPTION causes fatal error
-
- * pear/PEAR.php
- pear/package-PEAR.xml:
- fix Bug #937 throwError() treats every call as static
- fix Bug #964 PEAR_ERROR_EXCEPTION causes fatal error
-
- * (PHP_4_3)
- pear/package-PEAR.xml
- pear/PEAR/Command/Remote.php:
- MFH fix #534: pear search doesn't list unstable releases
-
- * pear/package-PEAR.xml
- pear/PEAR/Command/Remote.php:
- fix #534: pear search doesn't list unstable releases
-
- * pear/package-PEAR.xml
- pear/package-PEAR.xml:
- not devel any more
-
-2004-04-02 Derick Rethans <php@derickrethans.nl>
-
- * ext/standard/parsedate.y:
- - Fixed expected shift/reduce conflict count nu,ber
-
-2004-04-02 Sara Golemon <php@alphaweb.net>
-
- * win32/install.txt:
- Update sample SAPI locations. BugFix# 27829
-
-2004-04-02 Ilia Alshanetsky <ilia@prohost.org>
-
- * (PHP_4_3)
- ext/standard/file.c
- ext/standard/tests/file/fgetcsv.phpt:
- Fixed bug #27730.
-
-2004-04-02 Dmitry Stogov <dmitry@zend.com>
-
- * tests/lang/bug22367.phpt:
- Test file was fixed (implicit cloning strict warnings)
-
-2004-04-02 Derick Rethans <php@derickrethans.nl>
-
- * (PHP_4_3)
- ext/standard/basic_functions.c:
- - Fixed unintialized variables.
-
-2004-04-02 Dmitry Stogov <dmitry@zend.com>
-
- * NEWS:
- Fixed bug #27742 (WDSL SOAP Parsing Schema bug)
-
-2004-04-01 Ilia Alshanetsky <ilia@prohost.org>
-
- * ZendEngine2/zend_builtin_functions.c
- ext/standard/array.c
- ext/standard/tests/array/bug27782.phpt:
- MFB: Revert patch for bug #27782.
-
- * (PHP_4_3)
- Zend/zend_execute.c
- tests/lang/bug27731.phpt:
- MFH: Fixed reversed condition for error reporting.
-
- * ZendEngine2/zend_execute.c
- ZendEngine2/tests/bug27731.phpt:
- Fixed reversed condition for error reporting.
-
- * (PHP_4_3)
- configure.in
- main/php_version.h:
- Back to dev.
-
-2004-04-01 Derick Rethans <php@derickrethans.nl>
-
- * ext/standard/parsedate.y
- ext/standard/tests/time/bug27780.phpt:
- - MFB: Fixed bug #27780 (strtotime(+1 xxx) returns a wrong date/time)
-
-2004-04-01 Ilia Alshanetsky <ilia@prohost.org>
-
- * (PHP_4_3)
- NEWS
- configure.in
- main/php_version.h:
- Prepare for 4.3.6RC1.
-
-2004-04-01 Derick Rethans <php@derickrethans.nl>
-
- * ext/standard/tests/time/bug27780.phpt
- ext/standard/tests/time/bug27780.phpt:
-
- file bug27780.phpt was initially added on branch PHP_4_3.
-
- * (PHP_4_3)
- NEWS
- ext/standard/parsedate.y:
- - Fixed bug #27780 (strtotime(+1 xxx) returns a wrong date/time)
-
-2004-04-01 Ilia Alshanetsky <ilia@prohost.org>
-
- * (PHP_4_3)
- NEWS
- ext/standard/array.c
- ext/standard/tests/array/bug27782.phpt:
- Revert patch for bug #27782.
-
- * (PHP_4_3)
- Zend/zend_builtin_functions.c:
- Revert patch for bug #27782.
-
-
-2004-04-01 Ard Biesheuvel <a.k.biesheuvel@ewi.tudelft.nl>
-
- * ext/interbase/tests/003.phpt
- ext/interbase/tests/interbase.inc:
- CS/WS
-
-2004-04-01 Ilia Alshanetsky <ilia@prohost.org>
-
- * tests/lang/bug27819.phpt
- tests/lang/bug27819.phpt:
-
- file bug27819.phpt was initially added on branch PHP_4_3.
-
- * (PHP_4_3)
- NEWS:
- Bug fixing news & test for bug #27819.
-
- * (PHP_4_3)
- Zend/zend_execute.c:
- MFH: Fixed bug #27819 (problems returning reference to a reference
- parameter).
-
-2004-04-01 Ard Biesheuvel <a.k.biesheuvel@ewi.tudelft.nl>
-
- * ext/interbase/tests/006.phpt:
- Test binding of numeric timestamps
-
- * ext/interbase/tests/002.phpt
- ext/interbase/tests/005.phpt
- ext/interbase/tests/interbase.inc
- ext/interbase/tests/skipif.inc:
- Don't rely on isql anymore, as creating databases is now supported by the
- API
- Changed tests to include ibase_query("SET TRANSACTION ...")
-
-2004-04-01 Dmitry Stogov <dmitry@zend.com>
-
- * NEWS:
- Fixed bug #27722 (Segfault on schema without targetNamespace).
-
-2004-04-01 Ard Biesheuvel <a.k.biesheuvel@ewi.tudelft.nl>
-
- * ext/interbase/interbase.c:
- WS
-
- * ext/interbase/interbase.c:
- Fix unregistered bug (crash when closing db opened with "CREATE DATABASE
- ...")
-
-2004-04-01 Derick Rethans <php@derickrethans.nl>
-
- * (PHP_4_3)
- NEWS
- ext/standard/type.c
- ext/standard/tests/general_functions/is_resource.phpt:
- - MFH: Fixed bug #27822 (is_resource() returns TRUE for closed resources)
-
- * ext/standard/type.c:
- - Fixed bug #27822 (is_resource() returns TRUE for closed resources)
-
- * ext/standard/tests/general_functions/is_resource.phpt:
-
- - Fixed bug #27822 (is_resource() returns TRUE for closed resources)
-
-2004-04-01 Sara Golemon <php@alphaweb.net>
-
- * main/streams/filter.c:
- Only wind filters when appending to the read chain.
-
- * main/streams/streams.c:
- This leaks when a stream opener proxy opens another stream.
-
-2004-03-31 Sara Golemon <php@alphaweb.net>
-
- * NEWS
- ext/standard/tests/file/bug27619.phpt
- main/streams/filter.c
- main/streams/php_stream_filter_api.h
- main/streams/streams.c:
- BugFix#27619
- Filters not applied to pre-buffered stream data.
- (esp. http:// streams)
-
-2004-03-31 Ilia Alshanetsky <ilia@prohost.org>
-
- * (PHP_4_3)
- NEWS:
- Bug fixing news.
-
- * (PHP_4_3)
- Zend/zend_execute.c:
- MFH: Fixed bug #25547 (error_handler and array index with function call).
-
-
-2004-03-31 Derick Rethans <php@derickrethans.nl>
-
- * ext/mysqli/config.m4:
- - Align help output for configure.
-
-2004-03-31 Ilia Alshanetsky <ilia@prohost.org>
-
- * (PHP_4_3)
- NEWS
- ext/ftp/ftp.c:
- MFH: Fixed bug #27809 (ftp_systype returns null on some ftp servers).
-
- * ext/ftp/ftp.c:
- Fixed bug #27809 (ftp_systype returns null on some ftp servers).
-
-2004-03-31 Hartmut Holzgraefe <hartmut@php-groupies.de>
-
- * ext/standard/datetime.c:
- disallow negative timestamps on windows only
-
-2004-03-31 Rob Richards <rrichards@ctindustries.net>
-
- * ext/dom/attr.c
- ext/dom/cdatasection.c
- ext/dom/comment.c
- ext/dom/document.c
- ext/dom/documentfragment.c
- ext/dom/dom_fe.h
- ext/dom/element.c
- ext/dom/entityreference.c
- ext/dom/nodelist.c
- ext/dom/processinginstruction.c
- ext/dom/text.c
- ext/dom/xpath.c:
- use new style constructors
- fix return for nodelist item
-
-2004-03-31 Ilia Alshanetsky <ilia@prohost.org>
-
- * (PHP_4_3)
- NEWS
- sapi/cgi/cgi_main.c:
- MFH: Fixed bug #27802 (default number of children to 8 when
- PHP_FCGI_CHILDREN is not defined).
-
- * sapi/cgi/cgi_main.c:
- Fixed bug #27802 (default number of children to 8 when PHP_FCGI_CHILDREN is
- not defined).
-
-2004-03-31 Dmitry Stogov <dmitry@zend.com>
-
- * ZendEngine2/zend_execute.c:
- Fixed BUG in zend_post_incdec_property
-
-2004-03-31 Andi Gutmans <andi@zend.com>
-
- * ZendEngine2/zend_reflection_api.c:
- - Fix typo
-
-2004-03-31 Ard Biesheuvel <a.k.biesheuvel@ewi.tudelft.nl>
-
- * ext/standard/tests/time/003.phpt
- ext/standard/tests/time/bug27719.phpt
- ext/standard/tests/time/mktime.phpt:
- Make time tests more robust against differences in implementation
-
-2004-03-30 Ilia Alshanetsky <ilia@prohost.org>
-
- * run-tests.php:
- Fixed generate_array_diff().
-
-2004-03-30 Marcus Boerger <marcus.boerger@post.rwth-aachen.de>
-
- * tests/lang/bug26640.phpt:
- Fix tests
-
- * ZendEngine2/tests/bug26695.phpt
- tests/classes/static_properties_002.phpt:
- Fix test
-
- * scripts/dev/search_underscores.php:
- Add more statistics
-
-2004-03-30 Ilia Alshanetsky <ilia@prohost.org>
-
- * (PHP_4_3)
- NEWS
- Zend/zend_builtin_functions.c
- ext/standard/array.c
- ext/standard/tests/array/bug27782.phpt:
- MFH: Fixed bug #27782 (Wrong behaviour of next(), prev() and each()).
-
- * ZendEngine2/zend_builtin_functions.c
- ext/standard/array.c:
- Fixed bug #27782 (Wrong behaviour of next(), prev() and each()).
-
- * ext/standard/tests/array/bug27782.phpt:
-
- Fixed bug #27782 (Wrong behaviour of next(), prev() and each()).
-
-2004-03-30 Marcus Boerger <marcus.boerger@post.rwth-aachen.de>
-
- * scripts/dev/search_underscores.php:
- The test script to search for underscores
-
- * ZendEngine2/zend_reflection_api.c:
- TSRM fix
-
- * ZendEngine2/zend.c
- ZendEngine2/zend.h
- ZendEngine2/zend_API.c
- ZendEngine2/zend_API.h
- ZendEngine2/zend_globals.h
- ZendEngine2/zend_reflection_api.c:
- - Fix Reflection class names
- - Add ability to get the extension an internal class was defined in
-
-2004-03-30 Frank M. Kromann <frank@kromann.info>
-
- * (PHP_4_3)
- ext/mssql/php_mssql.c:
- MFH: Fix for #27764. Get return value from a stored procedure not returning
- any result sets
-
- * ext/mssql/php_mssql.c:
- Fix for #27764. Get return value from a stored procedure not returning any
- result sets
-
-2004-03-30 Stanislav Malyshev <stas@zend.com>
-
- * TSRM/TSRM.c:
- Disabled calling dtors on tsrm_shutdown - calling dtors in tsrm_shutdown
- makes
- modules registering TSRM ids to crash, if they have dtors, since the
- module
- is unloaded before tsrm_shutdown is called. Can be re-enabled after
- tsrm_free_id is implemented.
-
- * (PHP_4_3)
- TSRM/TSRM.c:
- Disabled calling dtors on tsrm_shutdown - calling dtors in tsrm_shutdown
- makes
- modules registering TSRM ids to crash, if they have dtors,
- since the module is unloaded before tsrm_shutdown is called.
- Can be re-enabled after tsrm_free_id is implemented.
-
-2004-03-30 Ilia Alshanetsky <ilia@prohost.org>
-
- * (PHP_4_3)
- NEWS:
- Bug fixing news.
-
-2004-03-30 Ard Biesheuvel <a.k.biesheuvel@ewi.tudelft.nl>
-
- * ext/standard/tests/general_functions/sunfuncts.phpt:
- Prevent test from failing on least significant digit
-
-2004-03-30 Wez Furlong <wez.php@thebrainroom.net>
-
- * (PHP_4_3)
- main/streams.c:
- Fix for Bug #27762: SCO Openserver doesn't have S_ISSOCK
- Possible side effect from this is that CLI scripts run from inetd won't
- realize that stdin/stdout are sockets. But thats not our problem.
-
-2004-03-30 Andi Gutmans <andi@zend.com>
-
- * ext/standard/incomplete_class.c:
- - Tiny improvement.
-
-2004-03-29 Marcus Boerger <marcus.boerger@post.rwth-aachen.de>
-
- * ZendEngine2/acconfig.h
- ext/standard/config.m4:
- NAN==NAN doest work (Ard)
-
-2004-03-29 Ilia Alshanetsky <ilia@prohost.org>
-
- * (PHP_4_3)
- ext/standard/tests/time/bug27719.phpt:
- MFH: Removed extra spaces that cause the test to fail.
-
- * ext/standard/tests/time/bug27719.phpt:
- Removed extra spaces that cause the test to fail.
-
-2004-03-29 Wez Furlong <wez.php@thebrainroom.net>
-
- * php.ini-dist
- php.ini-recommended
- ext/session/mod_files.c
- ext/session/session.c
- main/php_open_temporary_file.c
- main/php_open_temporary_file.h:
- Fix for Bug #26757: session.save_path defaults to bogus value on win32
- Merge from branch with one main difference: the default save_path is
- set to the empty string on all platforms, whereas the code in the
- branch only does so for win32.
-
- * (PHP_4_3)
- php.ini-dist
- php.ini-recommended
- ext/session/mod_files.c
- ext/session/session.c
- main/php_open_temporary_file.c
- main/php_open_temporary_file.h:
- Fix for Bug #26757: session.save_path default is bogus for win32
- Based on a patch found in the bug report.
- Concept approved by Ilia.
-
-2004-03-29 Marcus Boerger <marcus.boerger@post.rwth-aachen.de>
-
- * ext/dom/namednodemap.c:
- DOM_RET_OBJ for return_value needs to be followed by return
-
- * ext/dom/tests/dom001.phpt:
- Remove debug code
-
- * ext/dom/tests/dom001.phpt
- ext/dom/tests/dom003.phpt
- ext/dom/tests/dom006.phpt:
- Fix tests
-
-2004-03-29 Ilia Alshanetsky <ilia@prohost.org>
-
- * ext/dom/namednodemap.c
- ext/dom/nodelist.c
- ext/openssl/openssl.c:
- Fixed compiler warnings.
-
- * (PHP_4_3)
- NEWS:
- Bug fixing news.
-
-2004-03-29 Marcus Boerger <marcus.boerger@post.rwth-aachen.de>
-
- * ext/dom/php_dom.c
- ext/ming/ming.c
- ext/simplexml/simplexml.c
- ext/simplexml/tests/001.phpt
- ext/simplexml/tests/002.phpt
- ext/simplexml/tests/003.phpt
- ext/simplexml/tests/004.phpt
- ext/simplexml/tests/007.phpt
- ext/simplexml/tests/008.phpt
- ext/simplexml/tests/009.phpt
- ext/simplexml/tests/010.phpt
- ext/simplexml/tests/014.phpt
- ext/simplexml/tests/014a.phpt
- ext/simplexml/tests/014b.phpt
- ext/simplexml/tests/015.phpt
- ext/simplexml/tests/016.phpt
- ext/sqlite/sqlite.c
- ext/sqlite/tests/blankdb_oo.inc
- ext/sqlite/tests/sqlite_oo_001.phpt
- ext/sqlite/tests/sqlite_oo_002.phpt
- ext/sqlite/tests/sqlite_oo_014.phpt
- ext/sqlite/tests/sqlite_oo_020.phpt
- ext/sqlite/tests/sqlite_oo_021.phpt
- ext/sqlite/tests/sqlite_oo_022.phpt:
- Fix class names
-
- * (PHP_4_3)
- ext/standard/basic_functions.c
- ext/standard/config.m4
- main/config.w32.h:
- MFH: Found a NAN/INF solution that should be portable everywhere(?)
-
- * ext/standard/basic_functions.c
- ext/standard/config.m4:
- Found a NAN/INF solution that should be portable everywhere(?) (Ard,Marcus)
-
- * ZendEngine2/zend_builtin_functions.c:
- Allow mixed case search for extensions
-
-2004-03-29 Frank M. Kromann <frank@kromann.info>
-
- * (PHP_4_3)
- ext/mssql/php_mssql.c:
- MFH: Fix for #27743. Make sure Money types are converted and returned
- correct
-
- * ext/mssql/php_mssql.c:
- Fix for #27743. Make sure Money types are converted and returned correct
-
-2004-03-29 Ilia Alshanetsky <ilia@prohost.org>
-
- * (PHP_4_3)
- NEWS
- ext/gd/gd.c
- ext/gd/libgd/gd.c
- ext/gd/libgd/gd.h
- ext/gd/libgd/gd_gd.c
- ext/gd/libgd/gd_gd2.c
- ext/gd/libgd/gd_io_dp.c
- ext/gd/libgd/gd_jpeg.c
- ext/gd/libgd/gd_png.c
- ext/gd/libgd/gd_wbmp.c
- ext/gd/libgd/gdfontg.c
- ext/gd/libgd/gdfontg.h
- ext/gd/libgd/gdfontl.c
- ext/gd/libgd/gdfontl.h
- ext/gd/libgd/gdfontmb.c
- ext/gd/libgd/gdfontmb.h
- ext/gd/libgd/gdfonts.c
- ext/gd/libgd/gdfonts.h
- ext/gd/libgd/gdfontt.c
- ext/gd/libgd/gdfontt.h
- ext/gd/libgd/gdft.c:
- MFH: Synchronized bundled GD library with GD 2.0.22.
-
- * ext/gd/gd.c
- ext/gd/libgd/gd.c
- ext/gd/libgd/gd.h
- ext/gd/libgd/gd_gd.c
- ext/gd/libgd/gd_gd2.c
- ext/gd/libgd/gd_io_dp.c
- ext/gd/libgd/gd_jpeg.c
- ext/gd/libgd/gd_png.c
- ext/gd/libgd/gd_wbmp.c
- ext/gd/libgd/gdfontg.c
- ext/gd/libgd/gdfontg.h
- ext/gd/libgd/gdfontl.c
- ext/gd/libgd/gdfontl.h
- ext/gd/libgd/gdfontmb.c
- ext/gd/libgd/gdfontmb.h
- ext/gd/libgd/gdfonts.c
- ext/gd/libgd/gdfonts.h
- ext/gd/libgd/gdfontt.c
- ext/gd/libgd/gdfontt.h
- ext/gd/libgd/gdft.c:
- Synchronized bundled GD library with GD 2.0.22.
-
-2004-03-29 Sebastian Bergmann <sb@sebastian-bergmann.de>
-
- * ZendEngine2/zend_execute.c:
- -clonning+cloning
-
-2004-03-29 Dmitry Stogov <dmitry@zend.com>
-
- * ZendEngine2/zend_execute.c:
- Implicit clonning strict warning was added for ze1_compatibility_mode
-
-2004-03-29 Jan Lehnardt <jan@dasmoped.net>
-
- * run-tests.php:
- - be more verbose
-
-2004-03-29 Hartmut Holzgraefe <hartmut@php-groupies.de>
-
- * ext/xml/tests/bug26614.phpt:
- Test updated to test for additional libxml2/expat inconsistencies
-
-2004-03-29 Ilia Alshanetsky <ilia@prohost.org>
-
- * (PHP_4_3)
- NEWS
- Zend/zend_execute.c
- tests/lang/bug27731.phpt
- tests/lang/bug27731.phpt:
- MFH: Fixed bug #27731 (error_reporting() inside @ block fails to set
- error_reporting level).
-
- * ZendEngine2/zend_execute.c
- ZendEngine2/tests/bug27731.phpt:
- Fixed bug #27731 (error_reporting() inside @ block fails to set
- error_reporting level).
-
- * (PHP_4_3)
- ext/standard/datetime.h:
- Fixed build.
-
- * (PHP_4_3)
- NEWS
- ext/xslt/config.m4:
- Fixed bug #27732 (Fixed compilation bug inside php_sab_info.h).
-
-2004-03-28 Marcus Boerger <marcus.boerger@post.rwth-aachen.de>
-
- * ZendEngine2/zend_API.c:
- Use lowercasing here
-
- * run-tests.php:
- Add ability to pass -n to the executed php
-
- * ext/standard/basic_functions.c:
- Improve portability (idea by Ard)
-
- * ZendEngine2/zend.c:
- Initialize the complete struct
-
- * ext/simplexml/CREDITS
- ext/simplexml/simplexml.c
- ext/sqlite/CREDITS
- ext/sqlite/sqlite.c
- ext/standard/credits_ext.h:
- Fix writing of SQLite and SimpleXMl extension and add Rob to the credits
- line of the latter. Add ext/SPL.
-
-2004-03-28 Stanislav Malyshev <stas@zend.com>
-
- * ZendEngine2/zend_language_parser.y:
- check writability on =& too
-
-2004-03-28 Marcus Boerger <marcus.boerger@post.rwth-aachen.de>
-
- * ext/xsl/xsltprocessor.c:
- Fix XSL (Rob/Marcus)
-
-2004-03-28 Rasmus Lerdorf <rasmus@lerdorf.com>
-
- * NEWS
- ext/standard/datetime.c
- ext/standard/tests/time/bug27719.phpt:
- MFB test case for bug #27719 and improve comments in this tricky DST code
-
- * (PHP_4_3)
- NEWS
- ext/session/session.c
- ext/standard/datetime.c
- ext/standard/head.c
- ext/standard/tests/time/bug27719.phpt:
- - Merge whitespace and trivial changes from HEAD back to the branch so the
- diff between HEAD and PHP_4_3 only shows feature changes
- - Fix test case for bug #27719 (TZ=EST means no DST so the test was wrong)
-
-2004-03-28 Stanislav Malyshev <stas@zend.com>
-
- * ZendEngine2/zend_execute.c:
- - call set handler if assigning to object having this handler
- - cleanup: use macros to access object internal vars
-
- * ZendEngine2/zend_interfaces.c:
- preserve ZEND_API in definition
-
- * ZendEngine2/zend_interfaces.h:
- declare as extern
-
-2004-03-28 Marcus Boerger <marcus.boerger@post.rwth-aachen.de>
-
- * run-tests.php:
- Show progress
-
- * tests/classes/tostring.phpt:
- Adapt ecpectations to 5.0 reality
-
- * ZendEngine2/zend_reflection_api.c:
- Fix memleak found by Timm
-
-2004-03-28 Stanislav Malyshev <stas@zend.com>
-
- * ZendEngine2/zend_operators.c:
- centralize object-to-scalar conversion, make it work with get handler
-
- * ZendEngine2/zend.c:
- try get handler on printable conversion
-
- * ZendEngine2/zend_object_handlers.h:
- some more clear comments
-
- * ZendEngine2/zend_operators.c:
- Use macros for object parts access
-
-2004-03-28 Dmitry Stogov <dmitry@zend.com>
-
- * ZendEngine2/zend_execute_API.c:
- fix of fix related to __autoload. (ext/standard/tests/network/bug20134.phpt
- passes again)
-
-2004-03-28 Andrey Hristov <php@hristov.com>
-
- * README.PHP4-TO-PHP5-THIN-CHANGES:
- - Fixed the explanation and example about "classes must be declared before
- used".
- - Added new entry about get_class() (Thanks Lukas for reminding
- (toStudlyCapOrNotToStudlyCap.txt).
-
-2004-03-27 Marcus Boerger <marcus.boerger@post.rwth-aachen.de>
-
- * tests/classes/type_hinting_002.phpt:
- Add new test
-
- * ZendEngine2/zend.c:
- Even though it is uncommented it should be right
-
-2004-03-27 Rui Hirokawa <rui_hirokawa@ybb.ne.jp>
-
- * ext/mbstring/mbstring.dsp:
- added missing files of oniguruma to mbstring.dsp.
-
-2004-03-27 Ard Biesheuvel <a.k.biesheuvel@ewi.tudelft.nl>
-
- * acinclude.m4:
- Put AC_DEFINE in correct place so caching will work properly
-
-2004-03-27 Marcus Boerger <marcus.boerger@post.rwth-aachen.de>
-
- * (PHP_4_3)
- NEWS
- NEWS:
- BFN
-
- * (PHP_4_3)
- main/SAPI.c:
- Fixed bug #27687 (Bug Adding Default Charset to 'text/*' Content-Type
- Header
-
- * ext/standard/config.m4:
- Move defines to proper location
-
- * ext/standard/var_unserializer.c
- ext/standard/var_unserializer.c:
- Touch after .c
-
- * ext/standard/tests/math/bug27646.phpt:
-
- Portable solution for bug #27646 that works correct on Windows, too
-
- * ext/standard/basic_functions.c
- ext/standard/basic_functions.h
- ext/standard/config.m4
- ext/standard/var_unserializer.re:
- Portable solution for bug #27646 that works correct on Windows, too
-
- * ext/ming/php_ming.h:
- Commit the header, too.
-
- * ext/ming/ming.c:
- Follow ming_xy naming convention
-
-2004-03-26 Frank M. Kromann <frank@kromann.info>
-
- * ext/ming/ming.c:
- Fix complation errors after convertion to new macro's
-
-2004-03-26 Marcus Boerger <marcus.boerger@post.rwth-aachen.de>
-
- * NEWS
- ext/sqlite/sqlite.c
- ext/sqlite/tests/sqlite_oo_002.phpt
- ext/sqlite/tests/sqlite_oo_003.phpt
- ext/sqlite/tests/sqlite_oo_008.phpt
- ext/sqlite/tests/sqlite_oo_009.phpt
- ext/sqlite/tests/sqlite_oo_010.phpt
- ext/sqlite/tests/sqlite_oo_011.phpt
- ext/sqlite/tests/sqlite_oo_012.phpt
- ext/sqlite/tests/sqlite_oo_013.phpt
- ext/sqlite/tests/sqlite_oo_014.phpt
- ext/sqlite/tests/sqlite_oo_015.phpt
- ext/sqlite/tests/sqlite_oo_016.phpt
- ext/sqlite/tests/sqlite_oo_020.phpt
- ext/sqlite/tests/sqlite_oo_021.phpt
- ext/sqlite/tests/sqlite_oo_024.phpt
- ext/sqlite/tests/sqlite_oo_025.phpt
- ext/sqlite/tests/sqlite_oo_026.phpt
- ext/sqlite/tests/sqlite_oo_028.phpt
- ext/sqlite/tests/sqlite_oo_029.phpt
- ext/sqlite/tests/sqlite_oo_030.phpt
- ext/sqlite/tests/sqlite_oo_031.phpt:
- Change to studlyCaps convention
-
- * ext/ming/ming.c:
- Use studlyCaps and new macros (that should be it)
-
-2004-03-26 Ard Biesheuvel <a.k.biesheuvel@ewi.tudelft.nl>
-
- * (PHP_4_3)
- ext/standard/file.c:
- Alignment fix
-
-2004-03-26 Marcus Boerger <marcus.boerger@post.rwth-aachen.de>
-
- * NEWS
- ZendEngine2/zend_API.c
- ZendEngine2/zend_compile.c:
- Force destructors to have empty signatures
-
-2004-03-26 Ard Biesheuvel <a.k.biesheuvel@ewi.tudelft.nl>
-
- * (PHP_4_3)
- ext/standard/math.c:
- MFH: Calculate pow(long,long) in a way that works on 64-bit platforms
-
-2004-03-26 Marcus Boerger <marcus.boerger@post.rwth-aachen.de>
-
- * ext/standard/basic_functions.c:
- Correct that name
-
-2004-03-26 Derick Rethans <php@derickrethans.nl>
-
- * (PHP_4_3)
- ext/standard/tests/time/bug27719.diff
- ext/standard/tests/time/bug27719.phpt
- ext/standard/tests/time/bug27719.phpt:
- - COmmit the test, not the diff
-
-2004-03-26 Ilia Alshanetsky <ilia@prohost.org>
-
- * (PHP_4_3)
- NEWS
- configure.in:
- MFH: Fixed bug #27664 (--disable-cli doesn't force --without-pear).
-
- * configure.in:
- Fixed bug #27664 (--disable-cli doesn't force --without-pear).
-
-2004-03-26 Marcus Boerger <marcus.boerger@post.rwth-aachen.de>
-
- * ext/standard/basic_functions.c:
- let inf be generated by INF constant (thanks to Wez)
-
-2004-03-26 Derick Rethans <php@derickrethans.nl>
-
- * ext/standard/tests/time/bug27719.diff
- ext/standard/tests/time/bug27719.diff:
-
- file bug27719.diff was initially added on branch PHP_4_3.
-
-2004-03-26 Rasmus Lerdorf <rasmus@lerdorf.com>
-
- * ext/standard/datetime.c:
- MFB: The 2am offset was a bad choice as this hour doesn't necessarily exist
- on a DST switch. So use 4am instead. Fixes bug #27719
-
- * (PHP_4_3)
- ext/standard/datetime.c:
- The 2am offset was a bad choice as this hour doesn't necessarily exist
- on a DST switch. So use 4am instead. Fixes bug #27719
-
-2004-03-26 Sara Golemon <php@alphaweb.net>
-
- * ext/standard/string.c
- ext/standard/tests/strings/bug27675.phpt:
- BugFix 27675 and add regression test.
-
-2004-03-26 Ilia Alshanetsky <ilia@prohost.org>
-
- * (PHP_4_3)
- NEWS:
- Bug fixing news.
-
- * (PHP_4_3)
- ext/curl/curl.c:
- MFH: Fixes to allow curl extension to compile against libcurl 7.11.1
-
-2004-03-26 Andi Gutmans <andi@zend.com>
-
- * ZendEngine2/zend_execute.c:
- - Fix build (thanks to Timm)
-
-2004-03-25 Marcus Boerger <marcus.boerger@post.rwth-aachen.de>
-
- * ext/standard/url_scanner_ex.c:
- Pending touch
-
- * ext/standard/basic_functions.c
- ext/standard/tests/math/bug27646.phpt:
- -Make NAN and INF more portable (atof() doesn't work on MSVC.6 for example)
- -Change test to use constants without prior conversion
-
- * ext/ming/ming.c:
- Really use studlyCaps here
-
-2004-03-25 Derick Rethans <php@derickrethans.nl>
-
- * NEWS
- main/rfc1867.c:
- - Stopped file uploads from throwing E_WARNINGs and E_NOTICEs which can not
- be
- hidden from within scripts (and a result value in the $_FILES global can
- be
- used to see the real failure anyway).
-
- * ZendEngine2/zend_language_scanner.l:
- - Remove old and deprecated <?php_track_vars?> scanner token.
-
-2004-03-25 Ilia Alshanetsky <ilia@prohost.org>
-
- * ext/shmop/package.xml:
- Corrected package file.
-
-2004-03-25 Hartmut Holzgraefe <hartmut@php-groupies.de>
-
- * ext/shmop/package.xml:
- another package description
-
-2004-03-25 Andi Gutmans <andi@zend.com>
-
- * NEWS:
- - Update NEWS
-
- * ZendEngine2/zend_compile.c:
- - If __construct() is defined then it will always take precedence over
- - old style constructors.
-
-2004-03-25 Ilia Alshanetsky <ilia@prohost.org>
-
- * (PHP_4_3)
- configure.in
- main/php_version.h:
- Back to dev.
-
-2004-03-25 Stanislav Malyshev <stas@zend.com>
-
- * ZendEngine2/zend_execute.c:
- no need to use result for RECV's - as in PHP4
-
-2004-03-25 Ilia Alshanetsky <ilia@prohost.org>
-
- * (PHP_4_3)
- configure.in
- main/php_version.h:
- Go with 4.3.5
-
-2004-03-25 Stanislav Malyshev <stas@zend.com>
-
- * ZendEngine2/zend_execute.c:
- Use get/set handlers for increment.decrement ops on objects
-
-2004-03-25 Andi Gutmans <andi@zend.com>
-
- * ZendEngine2/zend_execute_API.c:
- /* The compiler is not-reentrant. Make sure we __autoload() only during
- run-time
- * (doesn't impact fuctionality of __autoload()
- */
-
-2004-03-25 Marcus Boerger <marcus.boerger@post.rwth-aachen.de>
-
- * NEWS
- main/SAPI.c:
- Fixed bug #27687 (Bug Adding Default Charset to 'text/*' Content-Type
- Header
-
-2004-03-25 Dmitry Stogov <dmitry@zend.com>
-
- * ZendEngine2/zend_execute_API.c:
- Using ALLOC_HASHTABLE/FREE_HASHTABLE instead of emalloc/free.
-
-2004-03-24 Hartmut Holzgraefe <hartmut@php-groupies.de>
-
- * ext/dbx/package.xml
- ext/filepro/package.xml
- ext/session/package.xml
- ext/sockets/package.xml
- ext/tokenizer/package.xml
- ext/wddx/package.xml
- ext/yaz/package.xml:
- more visa to sibira ;)
-
-2004-03-24 George Schlossnagle <george@omniti.com>
-
- * ext/simplexml/tests/021.phpt:
- added test for property_exists checks.
-
-2004-03-24 Dmitry Stogov <dmitry@zend.com>
-
- * ZendEngine2/zend.c
- ZendEngine2/zend_execute_API.c
- ZendEngine2/zend_globals.h:
- New autoload protection schema was implemented (Using HashTable instead of
- boolean flag)
-
-2004-03-24 Derick Rethans <php@derickrethans.nl>
-
- * ZendEngine2/zend_operators.c
- main/rfc1867.c:
- - Revert bogus commit
-
-2004-03-24 Dmitry Stogov <dmitry@zend.com>
-
- * tests/lang/bug22367.phpt:
- Fixed (strict warning was added to expected output)
-
-2004-03-24 Stanislav Malyshev <stas@zend.com>
-
- * main/main.c:
- and set module startup flag on startup
-
- * main/main.c:
- reset module shutdown flag on startup
-
-2004-03-24 Derick Rethans <php@derickrethans.nl>
-
- * NEWS
- ZendEngine2/zend_operators.c
- main/rfc1867.c:
- - Fixed NEWS
-
-2004-03-24 Dmitry Stogov <dmitry@zend.com>
-
- * NEWS
- ZendEngine2/tests/bug27641.phpt:
- Fixed bug #27641 (Object cloning in ze1_compatibility_mode was
- reimplemented)
-
- * ZendEngine2/zend_execute.c
- ZendEngine2/zend_variables.c:
- Object cloning in ze1 compatibility mode (zend.ze1_compatibility_mode) was
- reimplemented (Dmitry, Andi)
-
-2004-03-24 Antony Dovgal <tony2001@phpclub.net>
-
- * ext/oci8/package.xml:
- add account names & emails
-
-2004-03-24 George Schlossnagle <george@omniti.com>
-
- * ext/simplexml/simplexml.c:
- fixed non-existent elements check
- ref: http://news.php.net/article.php?group=php.internals&article=8660
-
-2004-03-23 Marcus Boerger <marcus.boerger@post.rwth-aachen.de>
-
- * ext/sqlite/sqlite.c
- ext/sqlite/tests/sqlite_oo_002.phpt
- ext/sqlite/tests/sqlite_oo_003.phpt
- ext/sqlite/tests/sqlite_oo_008.phpt
- ext/sqlite/tests/sqlite_oo_009.phpt
- ext/sqlite/tests/sqlite_oo_010.phpt
- ext/sqlite/tests/sqlite_oo_011.phpt
- ext/sqlite/tests/sqlite_oo_012.phpt
- ext/sqlite/tests/sqlite_oo_013.phpt
- ext/sqlite/tests/sqlite_oo_014.phpt
- ext/sqlite/tests/sqlite_oo_015.phpt
- ext/sqlite/tests/sqlite_oo_016.phpt
- ext/sqlite/tests/sqlite_oo_020.phpt
- ext/sqlite/tests/sqlite_oo_021.phpt
- ext/sqlite/tests/sqlite_oo_024.phpt
- ext/sqlite/tests/sqlite_oo_025.phpt
- ext/sqlite/tests/sqlite_oo_026.phpt
- ext/sqlite/tests/sqlite_oo_028.phpt
- ext/sqlite/tests/sqlite_oo_029.phpt
- ext/sqlite/tests/sqlite_oo_030.phpt
- ext/sqlite/tests/sqlite_oo_031.phpt:
- Revert studlyCaps change for now
-
-2004-03-23 Ilia Alshanetsky <ilia@prohost.org>
-
- * ext/snmp/snmp.c:
- Fixed bug #27661 (snmpget() does not close the socket in some cases).
-
-2004-03-23 Marcus Boerger <marcus.boerger@post.rwth-aachen.de>
-
- * ext/standard/var_unserializer.c:
- Update .c output after .re
-
- * ext/standard/basic_functions.c
- ext/standard/var_unserializer.re
- ext/standard/tests/math/bug27646.phpt:
- - Allow negative infinity
- - Register missing constants, they work anyway but cause an E_NOTICE
-
- * NEWS:
- BFN
-
- * ext/standard/var_unserializer.c
- ext/standard/var_unserializer.re:
- Bugfix #27646: Cannot serialize/unserialize non-finite numeric values
-
-2004-03-23 Ilia Alshanetsky <ilia@prohost.org>
-
- * (PHP_4_3)
- NEWS:
- Prepare NEWS file for 4.3.5 release.
-
-2004-03-23 Hartmut Holzgraefe <hartmut@php-groupies.de>
-
- * ext/bcmath/.cvsignore
- ext/bz2/.cvsignore
- ext/calendar/.cvsignore
- ext/cpdf/.cvsignore
- ext/ctype/.cvsignore
- ext/curl/.cvsignore
- ext/dba/.cvsignore
- ext/dbase/.cvsignore
- ext/dbx/.cvsignore
- ext/dio/.cvsignore
- ext/dom/.cvsignore
- ext/exif/.cvsignore
- ext/fam/.cvsignore
- ext/fbsql/.cvsignore
- ext/fdf/.cvsignore
- ext/filepro/.cvsignore
- ext/ftp/.cvsignore
- ext/gd/.cvsignore
- ext/gettext/.cvsignore
- ext/gmp/.cvsignore
- ext/hwapi/.cvsignore
- ext/iconv/.cvsignore
- ext/imap/.cvsignore
- ext/informix/.cvsignore
- ext/ingres_ii/.cvsignore
- ext/interbase/.cvsignore
- ext/ircg/.cvsignore
- ext/ldap/.cvsignore
- ext/mbstring/.cvsignore
- ext/mcrypt/.cvsignore
- ext/mcve/.cvsignore
- ext/mhash/.cvsignore
- ext/mime_magic/.cvsignore
- ext/ming/.cvsignore
- ext/mnogosearch/.cvsignore
- ext/msession/.cvsignore
- ext/msql/.cvsignore
- ext/mssql/.cvsignore
- ext/mysql/.cvsignore
- ext/mysqli/.cvsignore
- ext/ncurses/.cvsignore
- ext/oci8/.cvsignore
- ext/odbc/.cvsignore
- ext/openssl/.cvsignore
- ext/oracle/.cvsignore
- ext/ovrimos/.cvsignore
- ext/pcntl/.cvsignore
- ext/pcre/.cvsignore
- ext/pdf/.cvsignore
- ext/pfpro/.cvsignore
- ext/pgsql/.cvsignore
- ext/posix/.cvsignore
- ext/pspell/.cvsignore
- ext/readline/.cvsignore
- ext/recode/.cvsignore
- ext/session/.cvsignore
- ext/shmop/.cvsignore
- ext/simplexml/.cvsignore
- ext/snmp/.cvsignore
- ext/sockets/.cvsignore
- ext/sqlite/.cvsignore
- ext/standard/.cvsignore
- ext/sybase/.cvsignore
- ext/sybase_ct/.cvsignore
- ext/sysvmsg/.cvsignore
- ext/sysvsem/.cvsignore
- ext/sysvshm/.cvsignore
- ext/tokenizer/.cvsignore
- ext/w32api/.cvsignore
- ext/wddx/.cvsignore
- ext/xml/.cvsignore
- ext/xmlrpc/.cvsignore
- ext/xsl/.cvsignore
- ext/yaz/.cvsignore
- ext/yp/.cvsignore
- ext/zlib/.cvsignore:
- make sure that all extensions ignore build system helper files
- (both autotools and VisualStudio) and common editor backup files
- (especially usefull in combination with 'cvsclean')
-
- * ext/bcmath/package.xml
- ext/bz2/package.xml
- ext/calendar/package.xml
- ext/com_dotnet/package.xml
- ext/cpdf/package.xml
- ext/ctype/package.xml
- ext/curl/package.xml
- ext/dbase/package.xml
- ext/dio/package.xml
- ext/exif/package.xml
- ext/fam/package.xml
- ext/fdf/package.xml
- ext/ftp/package.xml
- ext/mime_magic/package.xml
- ext/mysql/package.xml
- ext/mysqli/package.xml
- ext/ncurses/package.xml
- ext/oci8/package.xml
- ext/oracle/package.xml
- ext/pcntl/package.xml
- ext/pdf/package.xml
- ext/posix/package.xml
- ext/sysvmsg/package.xml
- ext/sysvsem/package.xml
- ext/sysvshm/package.xml
- ext/w32api/package.xml
- ext/xml/package.xml
- ext/yp/package.xml
- ext/zlib/package.xml:
- "The Visa to Sibiria" (work in progress)
-
- Adding a package.xml to a bundled extension does not only
- ease the transition to PECL whereever suitable but also
- allows to build and install an extension as "shared" using
- the PEAR installer without having to deal with phpize and
- friends by hand
-
-2004-03-23 Marcus Boerger <marcus.boerger@post.rwth-aachen.de>
-
- * ext/sqlite/sqlite.c
- ext/sqlite/tests/sqlite_oo_009.phpt
- ext/sqlite/tests/sqlite_oo_010.phpt
- ext/sqlite/tests/sqlite_oo_012.phpt
- ext/sqlite/tests/sqlite_oo_013.phpt
- ext/sqlite/tests/sqlite_oo_014.phpt
- ext/sqlite/tests/sqlite_oo_015.phpt
- ext/sqlite/tests/sqlite_oo_016.phpt
- ext/sqlite/tests/sqlite_oo_020.phpt
- ext/sqlite/tests/sqlite_oo_021.phpt
- ext/sqlite/tests/sqlite_oo_025.phpt
- ext/sqlite/tests/sqlite_oo_026.phpt
- ext/sqlite/tests/sqlite_oo_029.phpt
- ext/sqlite/tests/sqlite_oo_030.phpt
- ext/sqlite/tests/sqlite_oo_031.phpt:
- Consitency rules
-
- * NEWS
- ext/sqlite/sqlite.c
- ext/sqlite/tests/sqlite_oo_002.phpt
- ext/sqlite/tests/sqlite_oo_003.phpt
- ext/sqlite/tests/sqlite_oo_008.phpt
- ext/sqlite/tests/sqlite_oo_009.phpt
- ext/sqlite/tests/sqlite_oo_010.phpt
- ext/sqlite/tests/sqlite_oo_011.phpt
- ext/sqlite/tests/sqlite_oo_012.phpt
- ext/sqlite/tests/sqlite_oo_013.phpt
- ext/sqlite/tests/sqlite_oo_014.phpt
- ext/sqlite/tests/sqlite_oo_015.phpt
- ext/sqlite/tests/sqlite_oo_016.phpt
- ext/sqlite/tests/sqlite_oo_020.phpt
- ext/sqlite/tests/sqlite_oo_021.phpt
- ext/sqlite/tests/sqlite_oo_024.phpt
- ext/sqlite/tests/sqlite_oo_025.phpt
- ext/sqlite/tests/sqlite_oo_026.phpt
- ext/sqlite/tests/sqlite_oo_028.phpt
- ext/sqlite/tests/sqlite_oo_029.phpt
- ext/sqlite/tests/sqlite_oo_030.phpt
- ext/sqlite/tests/sqlite_oo_031.phpt:
- Changed sqlite's OO API to studlyCaps.
-
-2004-03-22 Wez Furlong <wez.php@thebrainroom.net>
-
- * ext/com_dotnet/com_handlers.c:
- update for read handler api change
-
-2004-03-22 Ilia Alshanetsky <ilia@prohost.org>
-
- * ext/curl/interface.c:
- Fixes to allow curl extension to compile against libcurl 7.11.1
-
- * ext/gd/libgd/gd.c:
- Revert patch to imagefillborder.
-
-2004-03-22 Andi Gutmans <andi@zend.com>
-
- * ZendEngine2/zend_compile.c:
- - Fix bug
-
- * ZendEngine2/zend_execute.c:
- - Remove whitespace
-
-2004-03-21 Greg Beaver <greg@chiaraquartet.net>
-
- * pear/package-PEARtests.xml
- pear/tests/package-PEARtests.xml:
- added in wrong directory, move to tests/
-
- * pear/PEAR/ErrorStack.php:
- small changes
- Use '' instead of ""
- allow subclasses to easily change the exception class used just by
- overriding the _exceptionClass property
-
- * pear/package-PEARtests.xml:
- new package.xml to be used for installing tests, to make it easy to collect
- all tests in the same location for all PEAR packages
-
-2004-03-21 Stig Bakken <ssb@trd.overture.com>
-
- * pear/PEAR.php:
- - fit copyright header on 80 columns
-
-2004-03-21 Andi Gutmans <andi@zend.com>
-
- * ZendEngine2/zend_execute.c:
- - Improve consistency
-
-2004-03-21 Georg Richter <phpinfo@t-online.de>
-
- * ext/mysqli/mysqli_fe.c:
- ups - changed alias instead of method before
-
- * ext/mysqli/mysqli_fe.c:
- renamed get_metadata method to get_result_metadata.
- (We have to differentiate between result_metadata and param_metdata.
- mysql_stmt_param_metadata will be added in libmysql 4.1.3)
-
-2004-03-21 Stanislav Malyshev <stas@zend.com>
-
- * ZendEngine2/zend_objects_API.c
- ZendEngine2/zend_objects_API.h:
- return zval *, to make it useful for read_property
-
- * ext/dom/php_dom.c
- ext/mysqli/mysqli.c
- ext/simplexml/simplexml.c:
- Update for new read_property API
-
- * ZendEngine2/zend_objects_API.c:
- update to new API
-
- * ZendEngine2/zend_execute.c
- ZendEngine2/zend_object_handlers.c
- ZendEngine2/zend_object_handlers.h:
- API change for read_property:
- instead of bool silent it now gets fetch type
- This can be used for creating proxy objects for write contexts
-
-2004-03-21 Ilia Alshanetsky <ilia@prohost.org>
-
- * ext/gd/libgd/gd.c:
- Fixed a possible crash inside libgd's gdImageFillToBorder() due to a stack
- overflow.
-
-2004-03-21 Andi Gutmans <andi@zend.com>
-
- * ZendEngine2/zend_execute.c:
- - Nuke unused code
-
-2004-03-20 Marcus Boerger <marcus.boerger@post.rwth-aachen.de>
-
- * tests/lang/bug23384.phpt:
- Fix test
-
-2004-03-19 Sara Golemon <php@alphaweb.net>
-
- * ext/standard/dns.c:
- Cleanup, minor refactor, and CS
-
- * ext/standard/dns.c:
- Bug Fix #27657: TXT records longer than MAXHOSTNAMELEN cause segfaults.
-
-2004-03-19 Marcus Boerger <marcus.boerger@post.rwth-aachen.de>
-
- * ext/sqlite/tests/sqlite_oo_031.phpt:
- Fix test
-
- * ext/sqlite/tests/sqlite_oo_020.phpt:
- Fix test
-
- * ext/sqlite/tests/sqlite_027.phpt:
- Make test work when user has memory limit setting
-
-2004-03-19 Frank M. Kromann <frank@kromann.info>
-
- * (PHP_4_3)
- ext/mssql/php_mssql.c:
- MFH Fix for #26589. Crash when selecting many columns of type Money
-
- * ext/mssql/php_mssql.c:
- Fix for #26589. Crash when selecting many columns of type Money
-
-2004-03-19 Ilia Alshanetsky <ilia@prohost.org>
-
- * NEWS
- ext/standard/http_fopen_wrapper.c:
- MFH: Fixed bug #27628 (Simplify the process of making a POST request via
- stream context).
-
-2004-03-19 Greg Beaver <greg@chiaraquartet.net>
-
- * pear/package-PEAR.xml:
- update to 1.3.1dev
-
- * pear/PEAR/ErrorStack.php:
-
- new Error Stack for PEAR, EXPERIMENTAL until proven solid and stable
-
-2004-03-18 Pierre-Alain Joye <paj@pearfr.org>
-
- * ext/gd/tests/bug27582_2.phpt:
- - Fix the test description and $Id$
-
-2004-03-18 Derick Rethans <php@derickrethans.nl>
-
- * NEWS:
- - Fixed layout
-
-2004-03-18 Ilia Alshanetsky <ilia@prohost.org>
-
- * (PHP_4_3)
- configure.in
- main/php_version.h:
- Back to dev.
-
-2004-03-18 Dmitry Stogov <dmitry@zend.com>
-
- * NEWS
- NEWS
- NEWS:
- -** empty log message ***
-
-2004-03-18 Ilia Alshanetsky <ilia@prohost.org>
-
- * (PHP_4_3)
- configure.in
- main/php_version.h:
- Go for PHP 4.3.5RC4
-
- * (PHP_4_3)
- NEWS
- ext/ftp/ftp.c:
- MFH: Fixed bug #27633 (Incorrect EOL translation by ftp_get() in ASCII
- mode).
-
- * ext/ftp/ftp.c:
- Fixed bug #27633 (Incorrect EOL translation by ftp_get() in ASCII mode).
-
-2004-03-18 Dmitry Stogov <dmitry@zend.com>
-
- * ext/standard/incomplete_class.c
- ext/standard/php_incomplete_class.h
- ext/standard/var.c
- ext/standard/tests/serialize/bug27469.phpt:
- BUG #27469 was fixed (serialize() objects of incomplete class)
-
-2004-03-18 Andi Gutmans <andi@zend.com>
-
- * NEWS
- configure.in
- ZendEngine2/zend.h
- main/php_version.h:
- - Back to RC2-dev
-
-2004-03-18 Pierre-Alain Joye <paj@pearfr.org>
-
- * tests/classes/__set_data_corrupt.phpt:
- - Test for possible data corruption with __set
-
-2004-03-18 Zeev Suraski <zeev@zend.com>
-
- * (php_5_0_0RC1)
- NEWS:
- Add missing bug updates
-
- * NEWS
- configure.in
- ZendEngine2/zend.h
- main/php_version.h:
- Prepare to roll RC1
-
- * (php_5_0_0RC1)
- ZendEngine2/zend_execute.c:
- Fix possible data corruption with __set()
-
-2004-03-18 Uwe Schindler <uwe@thetaphi.de>
-
- * (php_5_0_0RC1)
- sapi/nsapi/nsapi-readme.txt
- sapi/nsapi/nsapi-readme.txt:
- hint to raise stacksize (bug #27231)
-
-2004-03-18 Stanislav Malyshev <stas@zend.com>
-
- * ZendEngine2/zend_execute.c:
- Improve error message - on E_STRICT, method is actually called,
- so the error shouldn't say it cannot be called.
-
-2004-03-18 Georg Richter <phpinfo@t-online.de>
-
- * (php_5_0_0RC1)
- ext/mysqli/mysqli_api.c:
- fixed problems in mysql_stmt_init (missing alloc from stmt)
-
- * (php_5_0_0RC1)
- ext/mysqli/mysqli.c:
- removed if type=string: val is allocated for any type of data
-
-2004-03-18 Martin Jansen <mail@martin-jansen.de>
-
- * (php_5_0_0RC1)
- pear/PEAR/Command/Mirror.php:
- - Converting tabs to spaces
-
- * pear/PEAR/Command/Mirror.php:
- - Typo fixes
-
-2004-03-18 Ard Biesheuvel <a.k.biesheuvel@ewi.tudelft.nl>
-
- * (PHP_4_3)
- ext/interbase/CREDITS:
- Added myself
-
-2004-03-18 Derick Rethans <php@derickrethans.nl>
-
- * NEWS:
- - Reorganize
-
-2004-03-18 Dmitry Stogov <dmitry@zend.com>
-
- * (php_5_0_0RC1)
- ext/standard/string.c:
- BUG #27457 was fixed (using temporary hash table with string keys only)
-
-2004-03-18 Andi Gutmans <andi@zend.com>
-
- * (php_5_0_0RC1)
- ZendEngine2/zend_compile.c:
- - Change redefinition of constructor from E_COMPILE_ERROR to E_STRICT.
-
- * (php_5_0_0RC1)
- ZendEngine2/ZEND_CHANGES:
- - Update Changes
-
-2004-03-18 Ilia Alshanetsky <ilia@prohost.org>
-
- * (php_5_0_0RC1)
- ext/com_dotnet/com_typeinfo.c
- ext/com_dotnet/com_wrapper.c:
- s/emalloc/safe_emalloc/ where appropriate.
-
- * (PHP_4_3)
- NEWS
- ext/pgsql/pgsql.c:
- MFH: Fixed bug #27300 (Improved regex for pg_convert()).
-
- * (php_5_0_0RC1)
- ext/pgsql/pgsql.c:
- Fixed bug #27300 (Improved regex for pg_convert()).
-
-
-2004-03-17 Sascha Schumann <sascha@schumann.cx>
-
- * (PHP_4_3)
- Zend/zend_multiply.h:
- more accurate overflow detection
-
- * ZendEngine2/zend_multiply.h:
- Readd x86 implementation
-
-2004-03-17 Sara Golemon <php@alphaweb.net>
-
- * ext/standard/tests/file/userdirstream.phpt:
- Userspace Directory Stream Test
-
-2004-03-17 Pierre-Alain Joye <paj@pearfr.org>
-
- * (PHP_4_3)
- NEWS:
- - Add entry, crash in imagecolortransparent
-
- * (PHP_4_3)
- ext/gd/libgd/gd.c:
- - MFH (crash in imagecolortransparent with invalid color index)
-
- * ext/gd/libgd/gd.c:
- - Fix crash when an invalid color index is used with imagecolortransparent
-
-2004-03-17 Andi Gutmans <andi@zend.com>
-
- * (php_5_0_0RC1RC2)
- ZendEngine2/zend_multiply.h:
- - Improved patch for support multiplication on 64bit machines
-
- * (php_5_0_0RC1RC2)
- ZendEngine2/zend_execute.c:
- - Fix tiny bug (one of the reasons we can't support __toString() for
- - regular objects).
-
-2004-03-17 Dmitry Stogov <dmitry@zend.com>
-
- * (php_5_0_0RC1RC2)
- ext/sqlite/tests/sqlite_oo_030.phpt:
- Test was fixed
-
-2004-03-17 Andi Gutmans <andi@zend.com>
-
- * (php_5_0_0RC1RC2)
- ZendEngine2/zend.c:
- - Stop make_printable_zval() from calling __toString()
-
- * ZendEngine2/zend_execute.c:
- - Fixed problem with __toString(). Due to the engine's architecture it is
- - currently not possible to call __toString() anywhere besides print &
- eval.
- - Follow up will be on internals@
-
-2004-03-17 Stanislav Malyshev <stas@zend.com>
-
- * (php_5_0_0RC1RC2)
- ZendEngine2/zend_compile.c:
- fix typo
-
-2004-03-17 Andi Gutmans <andi@zend.com>
-
- * ZendEngine2/zend_multiply.h
- ZendEngine2/zend_operators.c:
- - Apply Ard's patch to support multiplication & overflow on both 32bit
- and 64bit machines
-
-2004-03-17 Sara Golemon <php@alphaweb.net>
-
- * (php_5_0_0RC1RC2)
- main/streams/userspace.c:
- Provide a meaningful error message when registration fails
-
-2004-03-16 Ilia Alshanetsky <ilia@prohost.org>
-
- * (PHP_4_3)
- NEWS
- ext/standard/dir.c
- main/streams.c:
- MFH: Fixed bug #27498 (bogus safe_mode error on nonexistent directories for
- chdir() and opendir() functions).
-
- * ext/standard/dir.c
- main/streams/plain_wrapper.c:
- Fixed bug #27498 (bogus safe_mode error on nonexistent directories for
- chdir() and opendir() functions).
-
- * (PHP_4_3)
- NEWS
- sapi/apache2handler/sapi_apache2.c:
- MFH:
- Fixed bug #27580 (pre-initialization errors in ap2 handler are not
- being written to vhost error log).
- Stop using depreciated and ignored APLOG_NOERRNO directive.
- Make file not found & directory as script invocation error messages
- more descriptive.
-
- * sapi/apache2handler/sapi_apache2.c:
- Fixed bug #27580 (pre-initialization errors in ap2 handler are not being
- written to vhost error log).
- Stop using depreciated and ignored APLOG_NOERRNO directive.
- Make file not found & directory as script invocation error messages more
- descriptive.
-
-2004-03-16 Derick Rethans <php@derickrethans.nl>
-
- * NEWS
- main/main.c:
- - Replaced the exec_finished hook by the zend_post_deactive hook for
- extensions. The new hook will be run after the symbol table and
- destructors
- are run. (PHP part)
-
- * ZendEngine2/zend.c
- ZendEngine2/zend.h
- ZendEngine2/zend_API.h
- ZendEngine2/zend_modules.h:
- - Replaced the exec_finished hook by the zend_post_deactive hook for
- extensions. The new hook will be run after the symbol table and
- destructors
- are run. (Derick)
-
- * NEWS:
- - Update news with fugbix
-
-2004-03-16 Georg Richter <phpinfo@t-online.de>
-
- * ext/mysqli/mysqli.c
- ext/mysqli/mysqli_api.c
- ext/mysqli/mysqli_prop.c
- ext/mysqli/mysqli_report.c
- ext/mysqli/php_mysqli.h:
- fixed stmt->stmt->query which was removed in libmysql 4.1.2
- added query buffer in internal stmt structure to copy string
- after prepare
-
-2004-03-16 Derick Rethans <php@derickrethans.nl>
-
- * ext/simplexml/simplexml.c:
- - Fixed compilation on the 'broken' IRIX native compiler.
-
- * ZendEngine2/zend_modules.h:
- - Bump API number so that it actually differs from PHP 4. This is needed
- because we don't want PHP 4 and PHP 5 extensions to be in the same
- directory
- when doing "make install" for shared, or phpize'd extensions.
-
-2004-03-16 Marcus Boerger <marcus.boerger@post.rwth-aachen.de>
-
- * ZendEngine2/zend_execute_API.c:
- Fix SEGV in certain conditions while calling static methods
-
-2004-03-16 Derick Rethans <php@derickrethans.nl>
-
- * ext/exif/exif.c:
- - Fixed typo
-
-2004-03-16 Zeev Suraski <zeev@zend.com>
-
- * main/main.c
- main/php_globals.h
- main/php_variables.c:
- Improve the way auto-globals JIT works, and add the ability to turn it off
-
- * ZendEngine2/zend_compile.c
- ZendEngine2/zend_compile.h:
- Add ability to disable JIT for a particular auto global
-
-2004-03-16 Stanislav Malyshev <stas@zend.com>
-
- * (PHP_4_3)
- win32/php_registry.h
- win32/registry.c:
- MFH registry fixes:
- fix off-by-one in registry per-dir values
- add IniFilePath value for setting php.ini path via registry
-
-2004-03-16 Marcus Boerger <marcus.boerger@post.rwth-aachen.de>
-
- * tests/classes/tostring.phpt:
- Update message
-
- * ZendEngine2/zend_execute_API.c:
- TSRM fix
-
-2004-03-16 Sascha Schumann <sascha@schumann.cx>
-
- * (PHP_4_3)
- Zend/zend.h:
- typo
-
- * (PHP_4_3)
- Zend/zend.h
- ZendEngine2/zend.h:
- Enable ptr format check for GCC 3.1 and higher
-
-2004-03-16 Pierre-Alain Joye <paj@pearfr.org>
-
- * tests/classes/bug27504.phpt:
- - initial commit
- test case for #27504 (http://bugs.php.net/bug.php?id=27504)
-
-2004-03-16 Jani Taskinen <jani.taskinen@kolumbus.fi>
-
- * NEWS:
- fix typos
-
-2004-03-16 Ilia Alshanetsky <ilia@prohost.org>
-
- * ZendEngine2/zend.h:
- Do not allow 3.0.4 for __attribute__.
-
- * (PHP_4_3)
- Zend/zend.h:
- 3.0.4 is borked, so we do not want it either.
-
- * (PHP_4_3)
- NEWS
- Zend/zend.h:
- MFH: Fixed bug #27600 (GCC 3.0.4 does not like __attribute__ directive).
-
- * ZendEngine2/zend.h:
- Fixed bug #27600 (GCC 3.0.4 does not like __attribute__ directive)
-
-2004-03-16 Andi Gutmans <andi@zend.com>
-
- * ZendEngine2/zend_compile.c:
- - Fix problem when using old-style constructors it wasn't being inherited
- correctly.
-
-2004-03-16 Derick Rethans <php@derickrethans.nl>
-
- * ZendEngine2/zend_execute_API.c:
- - Spaces to tabs
-
-2004-03-16 Andi Gutmans <andi@zend.com>
-
- * NEWS:
- - NEWS
-
- * ZendEngine2/zend_execute_API.c:
- - If the called method is static then don't define $this
-
- * ZendEngine2/zend_execute.c
- ZendEngine2/zend_execute_API.c:
- - Error out if get_method() isn't defined.
- - Use calling scope of internal function callee when calling a method
- using static syntax (array("A", "func"));
-
-2004-03-16 Marcus Boerger <marcus.boerger@post.rwth-aachen.de>
-
- * ZendEngine2/zend_execute.c
- ZendEngine2/zend_execute.h
- ZendEngine2/zend_execute_API.c
- main/main.c:
- Improve error message
-
-2004-03-16 Ilia Alshanetsky <ilia@prohost.org>
-
- * (PHP_4_3)
- NEWS
- main/fopen_wrappers.c:
- MFH: Fixed bug #27559 (Corrected open_basedir resolving logic).
-
- * main/fopen_wrappers.c:
- Fixed bug #27559 (Corrected open_basedir resolving logic).
-
-2004-03-15 Jay Smith <jsmith@tutorbuddy.com>
-
- * (PHP_4_3)
- NEWS
- ext/standard/browscap.c:
- MFH: Fixed bug #27291 (get_browser matches browscap.ini patterns
- incorrectly).
-
- * NEWS
- ext/standard/browscap.c:
- Fixed bug #27291 (get_browser matches browscap.ini patterns incorrectly).
-
-2004-03-15 Marcus Boerger <marcus.boerger@post.rwth-aachen.de>
-
- * ext/pgsql/pgsql.c
- ext/pgsql/tests/22pg_fetch_object.phpt:
- Keep BC of pg_fetch_object
-
- * NEWS
- ext/pgsql/pgsql.c
- ext/pgsql/tests/80_bug27597.phpt:
- Bugfix #27597 pg_fetch_array not returning false .
-
-2004-03-15 Frank M. Kromann <frank@kromann.info>
-
- * (PHP_4_3)
- ext/mssql/php_mssql.c:
- MFH: Fix for #27594. Comuted columns does not return a column source
-
- * ext/mssql/php_mssql.c:
- Fix for #27594. Comuted columns does not return a column source
-
-2004-03-15 Rasmus Lerdorf <rasmus@lerdorf.com>
-
- * NEWS:
- Missing NEWS entries
-
- * (PHP_4_3)
- NEWS:
- Forgot to add NEWS entries for these
-
-2004-03-15 Andi Gutmans <andi@zend.com>
-
- * ZendEngine2/zend_operators.c:
- - Restore E_NOTICE for longs and doubles.
-
-2004-03-15 Jon Parise <jon@csh.rit.edu>
-
- * (PHP_4_3)
- NEWS
- ext/standard/info.c:
- MFH 1.243:
-
- Fixed crash in php_ini_scanned_files() when no additional INI files were
- actually parsed.
-
-2004-03-15 Jani Taskinen <jani.taskinen@kolumbus.fi>
-
- * (PHP_4_3)
- NEWS:
- BFN
-
- * (PHP_4_3)
- Zend/zend.h:
- MFH: - Fixed bug #24582 (extensions can not be loaded dynamically in
- Solaris/iPlanet)
-
- * ZendEngine2/zend.h:
- - Fixed bug #24582 (extensions can not be loaded dynamically in
- Solaris/iPlanet)
-
- * ext/xml/tests/bug26614.phpt:
- - Fix test (wrong expected result..)
-
-2004-03-15 Andi Gutmans <andi@zend.com>
-
- * ZendEngine2/zend_operators.c:
- - Nuke E_NOTICE. This caused a notice when doing if ($obj == NULL)
-
-2004-03-15 Zeev Suraski <zeev@zend.com>
-
- * (PHP_4_3)
- win32/php4dllts.dsp:
- Add misisng library path
-
-2004-03-15 Adam Dickmeiss <adam@indexdata.dk>
-
- * ext/yaz/php_yaz.c:
- Use MAKE_STD_ZVAL instead of ALLOC_ZVAL
-
-2004-03-15 Jon Parise <jon@csh.rit.edu>
-
- * NEWS
- ext/standard/info.c:
- Fixed crash in php_ini_scanned_files() when no additional INI files were
- actually parsed.
-
- I'll merge this into the PHP_4_3 branch as soon as I receive permission
- from the release master.
-
-2004-03-15 Sebastian Bergmann <sb@sebastian-bergmann.de>
-
- * (php_5_0_0RC1RC1)
- NEWS:
- Fugbix typo.
-
-2004-03-14 Marcus Boerger <marcus.boerger@post.rwth-aachen.de>
-
- * main/main.c
- main/output.c
- main/php_output.h:
- Guard display_startup_errors with checking for default (working) output
- functions.
-
-2004-03-14 Jani Taskinen <jani.taskinen@kolumbus.fi>
-
- * NEWS:
- typo
-
-2004-03-14 Marcus Boerger <marcus.boerger@post.rwth-aachen.de>
-
- * NEWS:
- BFN
-
- * ext/standard/type.c:
- Fix strval to use __toString if necessary
-
- * ZendEngine2/zend_builtin_functions.c:
- Make object parameter optional
-
-2004-03-14 Derick Rethans <php@derickrethans.nl>
-
- * php.ini-dist:
- - That change was unintentional, but it would be the right thing to do ;-)
-
- * php.ini-dist
- php.ini-recommended:
- - The extension list is ordered alphabetically, also moved the tidy section
- to a more suitable place (new things go at the end, not at the start).
-
- * NEWS:
- - Reorder
-
-2004-03-14 Andi Gutmans <andi@zend.com>
-
- * NEWS:
- - Typo
-
- * NEWS:
- - Add all of the fixes from the past week. Almost ready for RC1 now.
-
-2004-03-14 Ilia Alshanetsky <ilia@prohost.org>
-
- * (PHP_4_3)
- NEWS:
- Bug fixing news.
-
- * (PHP_4_3)
- Zend/zend.c:
- MFH: Fixed bug #27590 (crash during shutdown when freeing persistent
- resources in ZTS mode).
-
- * ZendEngine2/zend.c:
- Fixed bug #27590 (crash during shutdown when freeing persistent resources
- in ZTS mode).
-
-2004-03-14 Andi Gutmans <andi@zend.com>
-
- * ZendEngine2/zend_execute_API.c:
- - Fix windows build
-
-2004-03-14 Jan Lehnardt <jan@dasmoped.net>
-
- * ext/sockets/sockets.c:
- - improve error message
-
-2004-03-14 Andi Gutmans <andi@zend.com>
-
- * ZendEngine2/zend_execute_API.c:
- - Fix for bug #27504
-
-2004-03-14 Sascha Schumann <sascha@schumann.cx>
-
- * cvsclean
- build/build.mk:
- Renaming cvsclean target; IRIX make seems to ignore .PHONY
-
- * (PHP_4_3)
- cvsclean
- build/build.mk:
- Renaming cvsclean target -- IRIX make seems to ignore the .PHONY target.
-
-2004-03-14 Andi Gutmans <andi@zend.com>
-
- * ZendEngine2/zend_builtin_functions.c:
- - Fixing bug #27123
-
- * ZendEngine2/zend_operators.c:
- - Improve compatibility mode and compare objects according to property
- - comparison (sucky but this is how PHP 4 behaved).
-
- * ZendEngine2/zend.c:
- - Fix flow of logic
-
- * ZendEngine2/zend_operators.c:
- - Support old style of converting objects to long/double/bool.
- - This is only enabled in compatibility mode, else it calls cast_object()
- - and if that is not available we return 1 (true) so that the following
- - code would work:
- if ($obj) {
- }
-
-2004-03-14 Marcus Boerger <marcus.boerger@post.rwth-aachen.de>
-
- * ext/simplexml/tests/020.phpt:
- Add new test
-
- * ZendEngine2/zend_operators.c:
- Fix: Add return type void
-
-2004-03-14 Andi Gutmans <andi@zend.com>
-
- * ZendEngine2/zend.c
- ZendEngine2/zend_object_handlers.c
- ZendEngine2/zend_object_handlers.h
- ZendEngine2/zend_operators.c:
- - Support Cast operator in convert_to_* so that we support internal
- - extensions such as SimpleXML. This is for Sterling.
-
- * ZendEngine2/zend_operators.c:
- - Fix memory leak in the following code (Dmitry):
- <?php
- $a = array();
- $a .= "x";
- ?>
-
- * ZendEngine2/zend_operators.c:
- - Initial commit which allows comparing overloaded objects with native
- - types (only for internal classes and not for user-land classes).
-
-2004-03-14 Melvyn Sopacua <msopacua@idg.nl>
-
- * ext/sockets/sockets.c:
- Fix a typo, dating back from 1.145.
-
-2004-03-14 Jani Taskinen <jani.taskinen@kolumbus.fi>
-
- * (PHP_4_3)
- NEWS:
- reorder
-
-2004-03-14 Pierre-Alain Joye <paj@pearfr.org>
-
- * ext/gd/tests/bug27582_1.phpt:
- - add a 2nd test for #27582
-
-2004-03-14 John Coggeshall <john@coggeshall.org>
-
- * php.ini-dist
- php.ini-recommended:
-
- Adding extension=php_tidy.dll
-
-2004-03-14 Pierre-Alain Joye <paj@pearfr.org>
-
- * (PHP_4_3)
- ext/gd/libgd/gd.c:
- - missing restoreAlphaBleding declaration
-
-2004-03-13 Pierre-Alain Joye <paj@pearfr.org>
-
- * (PHP_4_3)
- NEWS:
- - entry for fix #27582
-
- * ext/gd/tests/bug27582_1.phpt
- ext/gd/tests/bug27582_1.phpt
- ext/gd/tests/bug27582_2.phpt:
-
- file bug27582_1.phpt was initially added on branch PHP_4_3.
-
- * (PHP_4_3)
- ext/gd/libgd/gd.c:
- - MFH bug #27582 (imagefilltoborder crashes)
-
- * ext/gd/tests/bug27582_2.phpt:
-
- - add tests for the bug #27582 (imagefilltoborder crashes)
-
- * ext/gd/libgd/gd.c:
- - restore too the alphablending if we do not reach the end of the function
- Notice: This function still crashes (stack overflow), to reproduce it
- see bug27582_2.phpt
-
-2004-03-13 Marcus Boerger <marcus.boerger@post.rwth-aachen.de>
-
- * NEWS:
- Bugfix #27586 ArrayObject::getIterator crashes with [] assignment
-
-2004-03-13 Greg Beaver <greg@chiaraquartet.net>
-
- * (PHP_4_3)
- pear/scripts/pear.bat:
- oops
-
-2004-03-13 Pierre-Alain Joye <paj@pearfr.org>
-
- * ext/gd/libgd/gd.c:
- - fix #27582 (http://bugs.php.net/bug.php?id=27582)
- The problem was that the colors were changed endlessly, blending over
- and over. An endless loop and recursive calls filled the stack=>segfault
-
-2004-03-13 Greg Beaver <greg@chiaraquartet.net>
-
- * pear/scripts/pear.bat
- pear/scripts/pear.bat
- pear/scripts/pearcmd.php
- pear/scripts/pearcmd.php:
- fix #1008: safe mode raises warning
- fix register_argc_argv in pear.bat
-
-2004-03-12 Sara Golemon <php@alphaweb.net>
-
- * (PHP_4_3)
- NEWS:
- BFN
-
- * configure.in:
- MFB: Test getaddrinfo() for brokenness. Pretend it doesn't exist if it
- misbehaves.
-
-2004-03-12 Sterling Hughes <winnie@edwardbear.org>
-
- * ext/curl/interface.c:
- zval **, not a zval *
-
- * ext/curl/interface.c:
- avoid a memory leak when a php_curl handle is allocated, but the
- initialization
- of a CURL handle fails.
-
- * ext/curl/interface.c
- ext/curl/php_curl.h:
- add the curl_copy_handle() function which will exactly duplicate a cURL
- handle.
- Useful when you have multiple "similair" transforms as with a multi handle
- with
- only small variances (like the URL)
-
-2004-03-12 Pierre-Alain Joye <paj@pearfr.org>
-
- * pear/PEAR/Common.php:
- - revert previous commit:
- - Features freeze period
- - No agreement on this change
- - Even if an agreement exists, this change is not enough to allow the
- usage of this new tag
-
-2004-03-12 Martin Jansen <mail@martin-jansen.de>
-
- * pear/PEAR/Common.php:
- - Adding new state "emeritus", which can be used for former maintainers of
- packages.
-
- Submitted by: Daniel Convissor
-
-
-2004-03-12 Ilia Alshanetsky <ilia@prohost.org>
-
- * (PHP_4_3)
- ext/curl/curl.c:
- MFH: Add checks of return values from user callback functions.
-
-2004-03-12 Rasmus Lerdorf <rasmus@lerdorf.com>
-
- * (PHP_4_3)
- ext/standard/basic_functions.c:
- MFH
- getopt() doesn't work if variables_order does not include "S" because it
- only looks in $_SERVER for argv. So, if we don't find argv in $_SERVER
- fall back to looking in the global symbol table where register_argc_argv
- would have put it.
-
-2004-03-12 Ilia Alshanetsky <ilia@prohost.org>
-
- * ext/curl/interface.c:
- Simplify check.
-
- * ext/curl/interface.c:
- Additional checks of return values from user callback functions.
-
-2004-03-12 Rasmus Lerdorf <rasmus@lerdorf.com>
-
- * ext/standard/datetime.c
- ext/standard/datetime.c:
- Fix/workaround for http://bugs.php.net/27533
-
-2004-03-12 Sterling Hughes <winnie@edwardbear.org>
-
- * ext/curl/interface.c:
- leave length as -1, no need to strdup()
-
-2004-03-12 John Coggeshall <john@coggeshall.org>
-
- * ext/curl/interface.c:
- Opps. Shouldn't look at the value, just the type
-
- * ext/curl/interface.c:
- CURLOPT_INFILE === CURLOPT_READDATA
-
- * ext/curl/interface.c:
- Fixed a crash which happens if your READFUNCTION callback doesn't actually
- return a string as promised.
-
-2004-03-12 Ilia Alshanetsky <ilia@prohost.org>
-
- * (PHP_4_3)
- NEWS
- sapi/cgi/cgi_main.c:
- MFH: Fixed bug #22127 (Invalid response code when force-cgi-redirect safety
- mechanism is triggered).
-
- * sapi/cgi/cgi_main.c:
- Invalid response code when force-cgi-redirect safety mechanism is triggered
-
- * ext/mbstring/mbstring.c:
- Fixed compiler warning.
-
-2004-03-12 Sara Golemon <php@alphaweb.net>
-
- * (PHP_4_3)
- configure.in:
- Test getaddrinfo() for brokenness. Pretend it doesn't exist if it
- misbehaves.
-
-2004-03-11 Frank M. Kromann <frank@kromann.info>
-
- * ext/ming/config.w32:
- Hack to check for ming version 0.2 and 0.3 to inclue the right libs.
-
-2004-03-11 Sara Golemon <php@alphaweb.net>
-
- * (PHP_4_3)
- NEWS:
- BFN
-
-2004-03-11 Jani Taskinen <jani.taskinen@kolumbus.fi>
-
- * NEWS:
- update
-
-2004-03-11 Andi Gutmans <andi@zend.com>
-
- * ZendEngine2/zend_objects_API.c:
- - Real fix for bug #27535 (Dmitry)
-
- * ZendEngine2/zend_objects_API.c:
- - Attempt to fix bug #27535
-
-2004-03-11 Ilia Alshanetsky <ilia@prohost.org>
-
- * ext/curl/multi.c:
- Readability++
-
- * ext/curl/interface.c
- ext/curl/multi.c
- ext/curl/php_curl.h:
- Fixed memory leak in the multi interface.
- Fixed proto of curl_multi_exec().
- Fixed crash in curl resource attached to curl multi resource is manually
- freed via curl_close().
-
-2004-03-10 Frank M. Kromann <frank@kromann.info>
-
- * ext/zlib/php_zlib.def:
- More ZLIB exports needed by the ming extension
-
-2004-03-10 Moriyoshi Koizumi <moriyoshi@at.wakwak.com>
-
- * (PHP_4_3)
- ext/mbstring/mbstring.c:
- - MFH (r-1.212): Revert ini setting patch as I notified in...
-
- * ext/mbstring/mbstring.c:
- - Revert ini setting patch, as I notified in
- http://news.php.net/article.php?group=php.internals&article=8451
-
-2004-03-10 Rasmus Lerdorf <rasmus@lerdorf.com>
-
- * ext/standard/basic_functions.c:
- getopt() doesn't work if variables_order does not include "S" because it
- only looks in $_SERVER for argv. So, if we don't find argv in $_SERVER
- fall back to looking in the global symbol table where register_argc_argv
- would have put it.
-
-2004-03-10 Frank M. Kromann <frank@kromann.info>
-
- * ext/zlib/config.w32
- ext/zlib/php_zlib.def:
- Reexport some zlib symbols so we can avoid linking with zlib.lib in shared
- extensions (on win32)
-
-2004-03-10 Ard Biesheuvel <a.k.biesheuvel@ewi.tudelft.nl>
-
- * ext/standard/math.c:
- Nuke unused vars
-
- * ext/standard/math.c:
- Don't use fp arithmetic for int results
-
-2004-03-10 Martin Kraemer <Martin.Kraemer@fujitsu-siemens.com>
-
- * ext/sqlite/tests/sqlite_oo_003.phpt:
- Typo
-
-2004-03-10 Georg Richter <phpinfo@t-online.de>
-
- * ext/mysqli/mysqli_api.c
- ext/mysqli/mysqli_fe.c
- ext/mysqli/php_mysqli.h:
- added new function mysql_stmt_free_result
-
-2004-03-09 Rasmus Lerdorf <rasmus@lerdorf.com>
-
- * (PHP_4_3)
- ext/curl/curl.c
- ext/curl/interface.c:
- Make curl_setopt($ch,CURLOPT_RETURNTRANSFER,0) reset the RETURNTRANSFER to
- stdout as is implied in the documentation. Currently it simply does
- absolutely nothing and there is no way to reset it to stdout.
-
-2004-03-09 Marcus Boerger <marcus.boerger@post.rwth-aachen.de>
-
- * ZendEngine2/ZEND_CHANGES:
- Rename hasMore() to valid() as discussed. (Part VI)
-
- * tests/classes/constants_scope_001.phpt:
- Update test
-
- * ZendEngine2/zend_API.c
- ZendEngine2/zend_compile.c
- ZendEngine2/zend_compile.h
- ZendEngine2/zend_execute.c
- ZendEngine2/zend_execute_API.c
- ZendEngine2/zend_interfaces.c
- ZendEngine2/zend_language_parser.y
- ZendEngine2/zend_reflection_api.c:
- Clearify the different method/class flags (as discussed with Andi).
-
- * ZendEngine2/zend.h:
- No longer needed
-
-2004-03-09 Andi Gutmans <andi@zend.com>
-
- * ZendEngine2/zend_constants.c:
- - Fix crash:
- <?php
- class ResourceFormat
- {
- const IMG = 1;
- }
-
- class Image
- {
- const RESOURCE_FORMAT = ResourceFormat::IMG;
- }
-
- print_r(constant('Image::RESOURCE_FORMAT'));
- ?>
-
- * ZendEngine2/zend_compile.c
- ZendEngine2/zend_compile.h
- ZendEngine2/zend_execute.c:
- - Nuke unused code.
-
-2004-03-09 Ilia Alshanetsky <ilia@prohost.org>
-
- * ext/curl/multi.c:
- Fixed memory leak with curl_multi_init() de-initialization.
-
- * TSRM/tsrm_virtual_cwd.c:
- Fixed define.
-
- * NEWS
- TSRM/tsrm_virtual_cwd.c:
- Fixed bug #27338 (memory leak inside tsrm_virtual_cwd.c on win32).
-
-2004-03-09 Marcus Boerger <marcus.boerger@post.rwth-aachen.de>
-
- * run-tests.php:
- Make run-tests.php work with xdebug being loaded.
-
- * ext/pgsql/tests/02connection.phpt:
- Show the connect result
-
- * ext/mysqli/mysqli.c:
- Missing buffer->val change
-
-2004-03-09 Jani Taskinen <jani.taskinen@kolumbus.fi>
-
- * (PHP_4_3)
- ext/standard/tests/strings/bug27457.phpt:
- test for bug #27457
-
- * ext/standard/tests/strings/bug27457.phpt:
-
- test for bug #27457
-
- * (PHP_4_3)
- NEWS:
- order
-
-2004-03-09 Georg Richter <phpinfo@t-online.de>
-
- * ext/mysqli/config.m4
- ext/mysqli/mysqli_api.c
- ext/mysqli/mysqli_fe.c
- ext/mysqli/php_mysqli.h:
- fixed memleaks in bind functions
- added 4.1.2 support (renamed functions)
-
-2004-03-09 Derick Rethans <php@derickrethans.nl>
-
- * tests/lang/bug27535.phpt:
- - Added test for bug #27535 (Objects pointing to each other cause Apache to
- crash).
-
-2004-03-09 Ilia Alshanetsky <ilia@prohost.org>
-
- * (PHP_4_3)
- NEWS
- main/SAPI.c:
- MFH: Fixed bug #27530 (broken http auth when safe_mode is on and PCRE is
- disabled).
-
- * main/SAPI.c:
- Fixed bug #27530 (broken http auth when safe_mode is on and PCRE is
- disabled).
-
- * ext/sqlite/libsqlite/src/sqlite.h.in:
- Fix function declaration.
-
- * ext/sqlite/sqlite.c:
- Change float operations to safe_emalloc().
- Original idea by Sascha (see sess_sqlite.c)
-
-2004-03-08 Ard Biesheuvel <a.k.biesheuvel@ewi.tudelft.nl>
-
- * ext/sqlite/libsqlite/src/main.c
- ext/sqlite/libsqlite/src/table.c
- ext/sqlite/libsqlite/src/vdbeaux.c
- ext/standard/datetime.c
- ext/standard/var.c
- main/spprintf.c
- main/streams/userspace.c
- main/streams/xp_socket.c:
- More wordsize fixes
-
- * ext/xmlrpc/libxmlrpc/encodings.c:
- Fix warning
-
-2004-03-08 Derick Rethans <php@derickrethans.nl>
-
- * NEWS
- ext/mbstring/mbstring.c
- ext/mbstring/mbstring.h:
- - Added mb_list_encoding() to return an array with all mbstring supported
- encodings.
-
-2004-03-08 Marcus Boerger <marcus.boerger@post.rwth-aachen.de>
-
- * ext/com_dotnet/com_iterator.c
- ext/com_dotnet/com_saproxy.c:
- Rename hasMore() to valid() as discussed. (Part V)
-
- * ext/dom/dom_iterators.c:
- Rename hasMore() to valid() as discussed. (Part IV)
-
-2004-03-08 Ard Biesheuvel <a.k.biesheuvel@ewi.tudelft.nl>
-
- * ext/xmlrpc/libxmlrpc/encodings.c:
- MFB fix #27408
-
-2004-03-08 Marcus Boerger <marcus.boerger@post.rwth-aachen.de>
-
- * NEWS:
- Rename hasMore() to valid() as discussed. (Part III)
-
-2004-03-08 Ard Biesheuvel <a.k.biesheuvel@ewi.tudelft.nl>
-
- * (PHP_4_3)
- ext/xmlrpc/libxmlrpc/encodings.c:
- Possible fix for #27408 (wordsize/alignment issue)
-
-2004-03-08 Marcus Boerger <marcus.boerger@post.rwth-aachen.de>
-
- * ZendEngine2/zend_execute.c
- ZendEngine2/zend_interfaces.c
- ZendEngine2/zend_iterators.h
- ext/simplexml/simplexml.c
- ext/sqlite/php_sqlite.h
- ext/sqlite/sqlite.c
- ext/sqlite/tests/sqlite_010.phpt
- ext/sqlite/tests/sqlite_013.phpt
- ext/sqlite/tests/sqlite_016.phpt
- ext/sqlite/tests/sqlite_023.phpt
- ext/sqlite/tests/sqlite_024.phpt:
- Rename hasMore() to valid() as discussed. (Part II)
-
- * ZendEngine2/zend_interfaces.c
- ext/sqlite/sqlite.c
- ext/sqlite/tests/sqlite_oo_010.phpt
- ext/sqlite/tests/sqlite_oo_013.phpt
- ext/sqlite/tests/sqlite_oo_016.phpt
- ext/sqlite/tests/sqlite_oo_020.phpt
- ext/sqlite/tests/sqlite_oo_024.phpt
- ext/sqlite/tests/sqlite_oo_026.phpt
- ext/sqlite/tests/sqlite_oo_031.phpt
- tests/classes/iterators_001.phpt
- tests/classes/iterators_002.phpt
- tests/classes/iterators_003.phpt
- tests/classes/iterators_004.phpt
- tests/classes/iterators_006.phpt:
- Rename hasMore() to valid() as discussed. (Part I)
-
- * ZendEngine2/zend_execute_API.c:
- Check count.
-
-2004-03-08 Ard Biesheuvel <a.k.biesheuvel@ewi.tudelft.nl>
-
- * ext/interbase/interbase.c:
- Merged some more odd fixes from my own branch
-
- * ext/interbase/interbase.c
- ext/interbase/php_ibase_includes.h:
- Cleaned up array handling and optimize for the case where no array fields
- are used
- Fix timestamp binding for Win32 (which doesn't have gmtime_r())
- CS
-
-2004-03-08 Derick Rethans <php@derickrethans.nl>
-
- * ext/tokenizer/tokenizer.c:
- - Fixed bug #24550 (tokenizing with __METHOD__ crash) (Patch by Greg
- Beaver)
-
-2004-03-08 Ilia Alshanetsky <ilia@prohost.org>
-
- * (PHP_4_3)
- NEWS
- sapi/apache2filter/sapi_apache2.c
- sapi/apache2handler/sapi_apache2.c:
- MFH: Fixed bug #27424 (headers missing on flush() in apache 2 SAPIs).
-
- * sapi/apache2filter/sapi_apache2.c
- sapi/apache2handler/sapi_apache2.c:
- Fixed bug #27424 (headers missing on flush() in apache 2 SAPIs).
-
- * ext/standard/var.c:
- Fixed compiler warnings.
-
-2004-03-08 Marcus Boerger <marcus.boerger@post.rwth-aachen.de>
-
- * ZendEngine2/zend_reflection_api.c:
- Add another missing conversion
-
-2004-03-07 Marcus Boerger <marcus.boerger@post.rwth-aachen.de>
-
- * ext/dba/config.m4:
- Search for db-4.2.x
-
-2004-03-07 Sascha Schumann <sascha@schumann.cx>
-
- * ext/sqlite/sess_sqlite.c:
- Avoid using floating point arithmetic and rely on safe_emalloc
- for the multiplication.
-
- The actual size requirement is spelled out as:
-
- ** The result is written into a preallocated output buffer "out".
- ** "out" must be able to hold at least 2 +(257*n)/254 bytes.
- ** In other words, the output will be expanded by as much as 3
- ** bytes for every 254 bytes of input plus 2 bytes of fixed overhead.
- ** (This is approximately 2 + 1.0118*n or about a 1.2% size increase.)
-
-2004-03-07 Wez Furlong <wez.php@thebrainroom.net>
-
- * main/streams/streams.c:
- add cast for qsort compare function.
- Kinda ugly, but helps assert that we are doing the right thing as well as
- kill the warning there.
-
- * main/streams/userspace.c:
- Connect feof() call to user-space stream feof() method.
- Fixes Bug #27417 and #27508
-
-2004-03-07 Ilia Alshanetsky <ilia@prohost.org>
-
- * (PECL_4_3)
- ext/sqlite/sqlite.c:
- MFH: Corrected string escape calculation.
-
- * ext/sqlite/sess_sqlite.c
- ext/sqlite/sqlite.c:
- Corrected string escape calculation.
-
-2004-03-07 Wez Furlong <wez.php@thebrainroom.net>
-
- * main/streams/streams.c:
- Less magic please
-
-2004-03-07 Ard Biesheuvel <a.k.biesheuvel@ewi.tudelft.nl>
-
- * ext/interbase/interbase.c:
- Simplify / fix
-
- * ext/interbase/interbase.c:
- Added missing support for binding timestamps
-
-2004-03-07 Moriyoshi Koizumi <moriyoshi@at.wakwak.com>
-
- * ext/wddx/tests/wddx.xml:
- - Forgot to commit this one.
-
-2004-03-06 Moriyoshi Koizumi <moriyoshi@at.wakwak.com>
-
- * ext/wddx/tests/001.phpt:
- - Fix test, take 2
-
-2004-03-06 Ilia Alshanetsky <ilia@prohost.org>
-
- * (PHP_4_3)
- NEWS
- ext/mbstring/mbstring.c:
- MFH: Fixed bug #27421 (mbstring.func_overload should be system ini setting)
-
- * ext/mbstring/mbstring.c:
- Fixed bug #27421 (mbstring.func_overload should be system ini setting).
-
- * (PHP_4_3)
- NEWS
- ext/standard/base64.c:
- MFH: Fixed bug #27460 (base64_decode() does not handle extra padding).
-
- * ext/standard/base64.c:
- Fixed bug #27460 (base64_decode() does not handle extra padding).
-
- * (PHP_4_3)
- NEWS
- ext/standard/html.c:
- MFH: Fixed bug #27505 (htmlentities() does not handle BIG5 correctly).
-
- * ext/standard/html.c:
- Fixed bug #27505 (htmlentities() does not handle BIG5 correctly).
-
- * ext/sqlite/sqlite.c:
- Use correct variable name.
-
- * (PHP_4_3)
- NEWS
- ext/gd/libgd/gdft.c
- ext/gd/libgd/gdft.c:
- Fixed bug #27437 (wrong freetype include inside GD library).
-
- * ext/sqlite/sqlite.c:
- Fixed a possible memory leaks inside sqlite_popen() &
- sqlite_fetch_column_types().
- Resolve the file path inside sqlite_factory().
-
- * ext/sqlite/sess_sqlite.c:
- Fixed possible crash due to an integer overflow.
-
- * ext/sqlite/sqlite.php:
- Better extension availability check.
-
-2004-03-06 Pierre-Alain Joye <paj@pearfr.org>
-
- * (PHP_4_3)
- NEWS:
- - Add #27238 entry
-
- * ext/standard/iptc.c:
- - fix #27238
-
-2004-03-05 Andi Gutmans <andi@zend.com>
-
- * ZendEngine2/zend_compile.c:
- - Fix some small problems I introduce in last patch.
-
- * ZendEngine2/zend_compile.c:
- - Finally fix the following:
- $xml_mem =
- simplexml_load_string('<bookbody><part><chapter><page>1</page></chapter></part></bookbody>');
- /* The following works fine */
- foreach ($xml_mem->part as $part) {
- foreach($part->chapter->page as $page) {
- print $page;
- }
- }
- /* The following segfaults */
- foreach ($xml_mem->part as $part) {
- foreach($part->chapter as $chapter) { // Difference here from previous
- example
- print $chapter;
- }
- }
-
-2004-03-05 Dmitry Stogov <dmitry@zend.com>
-
- * tests/classes/ctor_dtor.phpt
- tests/classes/inheritance_002.phpt:
- Test files were fixed acording to new constructor redeclaration semantic
-
- * tests/classes/bug27468.phpt:
- Test file was fixed (stack trace is removed)
-
-2004-03-04 Moriyoshi Koizumi <moriyoshi@at.wakwak.com>
-
- * sapi/cli/php_cli.c:
- - typo (must have sleep.)
-
- * ZendEngine2/zend_language_scanner.l:
- - Fix memleak when scanner is called from within tokenizer extension.
-
- * sapi/cli/php_cli.c:
- - Prevent cli from printing multiple "Interactive mode enabled" if
- the command line option is given more than once (like -aaaaaa).
-
-2004-03-04 Sara Golemon <php@alphaweb.net>
-
- * (PHP_4_3)
- ext/ftp/ftp.c:
- MFH: Don't rely on ANSI tmpfile(), use the streams layer instead, it'll
- deal with platform issues.
-
- * ext/ftp/ftp.c:
- Don't rely on ANSI tmpfile(), use the streams layer instead, it'll deal
- with platform issues.
-
-2004-03-04 Derick Rethans <php@derickrethans.nl>
-
- * EXTENSIONS:
- - No maintainer anymore.
-
-2004-03-04 Christian Stocker <chregu@phant.ch>
-
- * (PHP_4_3)
- pear/PEAR/Builder.php:
- MFH (fix a linefeed problem, if more than one configureoption)
-
- * pear/PEAR/Builder.php:
- - fix a linefeed problem, if there are more than one configureoption
-
-2004-03-04 Stanislav Malyshev <stas@zend.com>
-
- * ZendEngine2/zend_execute.h:
- fix the fix
-
- * ZendEngine2/zend_execute.h:
- oops, fix cut&paste gone bad
-
- * ZendEngine2/zend_execute.h:
- Fix object true value: if we are in compat mode and it's Zend object -
- use PHP4 rules. Otherwise, object is always true.
-
-2004-03-04 Derick Rethans <php@derickrethans.nl>
-
- * ZendEngine2/zend_constants.h
- ZendEngine2/zend_operators.h:
- - Fixed a 64bit issue (for zend_builtin_functions.c, module_number is an
- int).
- - Change the MAX_LENGTH_OF_LONG constant to 20, as LONG_MAX is 20
- characters.
- (Patches by Ard Biesheuven)
-
- * ZendEngine2/tests/zend_operators.phpt:
- - Added instance_of test (patch by Ard Biesheuvel)
-
-2004-03-04 Stanislav Malyshev <stas@zend.com>
-
- * ZendEngine2/zend_compile.c:
- Disallow redefining ctors and cleanup
-
- * ZendEngine2/zend_mm.c:
- Handle out of memory/bad size situation gracefully, without getting into
- loop
-
-2004-03-03 Rob Richards <rrichards@ctindustries.net>
-
- * ext/dom/document.c:
- Fix bug #27467: domDocument::load() called from class method crashes
- the methods can be called statically only from within classes which
- are not extending DomDocument
-
-2004-03-03 Edin Kadribasic <edink@emini.dk>
-
- * ext/mysqli/mysqli_fe.c:
- Attempt at fixing win32 link errors
-
- * ext/mysqli/config.w32:
- Add missing source file
-
- * ext/mysqli/config.w32:
- Replace mysql with mysqli in paths to allow building both mysql and mysqli
-
-2004-03-03 Moriyoshi Koizumi <moriyoshi@at.wakwak.com>
-
- * ext/mbstring/config.w32:
- - Add missing include path.
-
-2004-03-03 Andi Gutmans <andi@zend.com>
-
- * ZendEngine2/zend_objects_API.c:
- - Fix crash:
- <?
- class foo {
- function __destruct() {
- foreach ($this->x as $x);
- }
- }
- new foo();
- echo 'OK';
- ?>
-
-2004-03-02 Moriyoshi Koizumi <moriyoshi@at.wakwak.com>
-
- * ext/mbstring/config.w32:
- - proper DLL linkage specifier.
-
-
-2004-03-02 Derick Rethans <php@derickrethans.nl>
-
- * NEWS
- ext/gd/libgd/gd.c:
- - Fixed bug in gdImageFilledRectangle in the bundled GD library, that
- required
- x1 < x2 and y1 < y2 for coordinates.
-
- * tests/classes/bug27468.phpt:
- - Fixed timing issues in test
-
- * tests/classes/bug27468.phpt:
- - Added testcase for bug #27468
-
-2004-03-02 Moriyoshi Koizumi <moriyoshi@at.wakwak.com>
-
- * ext/mbstring/config.w32:
- - Fix typo.
-
-2004-03-02 Derick Rethans <php@derickrethans.nl>
-
- * ext/tokenizer/tokenizer.c:
- - CLONE, not CLOSE
-
- * ext/tokenizer/tokenizer.c:
- - Added "clone" to the list of tokens. (Patch by Greg Beaver)
-
-2004-03-02 Marcus Boerger <marcus.boerger@post.rwth-aachen.de>
-
- * ZendEngine2/zend_API.c
- ZendEngine2/zend_API.h:
- Fix zend_parse_method_parameters_ex() and make it consistant with
- zend_parse_method_parameters().
-
-2004-03-02 Derick Rethans <php@derickrethans.nl>
-
- * tests/lang/bug27439.phpt:
- - Consistent naming
-
-2004-03-02 Pierre-Alain Joye <paj@pearfr.org>
-
- * tests/lang/bug27439.phpt:
- - initial test for #27439, covers more cases we got during
- foreach($this->foo as $bar) bug
-
-2004-03-02 Moriyoshi Koizumi <moriyoshi@at.wakwak.com>
-
- * ext/mbstring/config.w32:
- - Really fix the build.
-
-2004-03-02 Derick Rethans <php@derickrethans.nl>
-
- * ext/standard/parsedate.y:
- - Fixed yacc file
-
-2004-03-02 Edin Kadribasic <edink@emini.dk>
-
- * ext/mbstring/config.w32:
- Temporary fix for win32 build
-
-2004-03-02 Andi Gutmans <andi@zend.com>
-
- * ZendEngine2/zend_compile.c:
- - Fix leaks (although there might be still a problem here).
-
- * ZendEngine2/zend_execute.c:
- - Fix leak (Dmitry)
-
- * ZendEngine2/zend_compile.c:
- - Fix crash in:
- <?php
- class Foo {
- public $attributes= array();
-
- function export() {
- foreach ($this->attributes as $name => $attr) {
- }
- }
- }
-
- $f= new Foo();
- $f->export();
- ?>
-
- * ZendEngine2/zend_objects.c:
- - Improve fix for protecting destructor's from exceptions.
- - I was killing the current exception completely which was wrong.
-
-2004-03-01 Moriyoshi Koizumi <moriyoshi@at.wakwak.com>
-
- * ext/mbstring/config.w32:
- - Fix win32 build.
-
-2004-03-01 Andi Gutmans <andi@zend.com>
-
- * ZendEngine2/zend_objects.c:
- - Fix crash in destructors(). You can't throw an exception in destructors
- as there is no guaranteed time when the destructor will be called.
-
- * ZendEngine2/zend_reflection_api.c:
- - Fix leak
-
- * ZendEngine2/zend_reflection_api.c:
- - Fix crash in reflection API (pierre)
-
- * ZendEngine2/zend.c
- ZendEngine2/zend_exceptions.c
- ZendEngine2/zend_execute_API.c:
- - Fix crash in exception handling (zend_exception_error(...) and
- zend_eval_string_ex() were buggy (Dmitry, Andi)
-
-2004-03-01 Rob Richards <rrichards@ctindustries.net>
-
- * ext/xsl/xsltprocessor.c:
- use php_libxml_import_node for transform functions
-
-2004-03-01 Derick Rethans <php@derickrethans.nl>
-
- * ZendEngine2/zend_compile.h:
- - Typo fix (by Jan)
-
-2004-03-01 Rob Richards <rrichards@ctindustries.net>
-
- * ext/dom/php_dom.c
- ext/simplexml/simplexml.c
- ext/xsl/xsltprocessor.c:
- Fix bug #27436 dom_import_simplexml innaccurate
- extensions register callbacks to export nodes
- prevents segfault passing invalid objects to import functions
-
-2004-03-01 Moriyoshi Koizumi <moriyoshi@at.wakwak.com>
-
- * NEWS:
- - Use past tense
-
- * NEWS:
- - NFN
-
- * ext/wddx/tests/001.phpt:
- - Fix test.
-
- * ext/standard/parsedate.y
- ext/standard/tests/time/002.phpt:
- - Add support for more ISO8601 style formats.
- . Timezone specifier (ex. 20040301T00:00:00+1900)
- . Week specifier "W" (ex. 1997W021)
- - Modified test case to test new features.
-
-2004-03-01 Derick Rethans <php@derickrethans.nl>
-
- * (PHP_4_3)
- NEWS
- Zend/zend_builtin_functions.c
- tests/lang/bug27443.phpt:
- - MFH: Fixed bug #27443 (defined() returns wrong type).
-
- * tests/lang/bug27443.phpt:
-
- - Fixed bug #27443 (defined() returns wrong type).
-
- * ZendEngine2/zend_builtin_functions.c:
- - Fixed bug #27443 (defined() returns wrong type).
-
-2004-03-01 Jon Parise <jon@csh.rit.edu>
-
- * main/streams/streams.c:
- Cast the php_stream_dirent to a 'const char *' for estrndup() to avoid a
- compiler warning.
-
-2004-03-01 Sara Golemon <php@alphaweb.net>
-
- * ext/standard/dir.c:
- context parameter for opendir() and dir()
-
- * main/streams/php_stream_context.h:
- Must addref the resource when we make a new zval reference to it that will
- be exported to userspace.
-
-2004-02-29 Moriyoshi Koizumi <moriyoshi@at.wakwak.com>
-
- * NEWS:
- - Yet another BFN
-
-2004-02-29 Andi Gutmans <andi@zend.com>
-
- * ZendEngine2/zend_reflection_api.c:
- - Apply fixes by Timm.
-
- * ZendEngine2/zend_compile.c:
- - Change prototype isA check not to check the constructor.
- - Only give an E_STRICT for non-isA compliant code as opposed to
- E_COMPILE_ERROR.
-
-2004-02-29 Stanislav Malyshev <stas@zend.com>
-
- * ZendEngine2/zend_compile.h:
- add ZEND_API there too for opcode handlers
-
-2004-02-29 Derick Rethans <php@derickrethans.nl>
-
- * ZendEngine2/zend_execute.c:
- - Initialize memory to \0 so that we can reliable detect whether a specific
- opcode element is in use.
-
-2004-02-29 Anil Madhavapeddy <anil@recoil.org>
-
- * pear/PEAR/Downloader.php
- pear/PEAR/Installer.php:
- Move the _prependPath function into PEAR_Downloader from PEAR_Installer,
- as PEAR_Downloader uses it (and PEAR_Installer inherits PEAR_Downloader).
-
- Unbreaks 'pear install -R'
-
-2004-02-29 Stanislav Malyshev <stas@zend.com>
-
- * ZendEngine2/zend_execute.c:
- export opcode table
-
-2004-02-29 Moriyoshi Koizumi <moriyoshi@at.wakwak.com>
-
- * NEWS:
- - BFN
-
- * ext/wddx/wddx.c:
- - Bugfix #27287 (wddx segfaults during deserialization)
-
- * ext/session/session.c:
- - Fix segfaults on deserialisation of referenced variables.
-
-2004-02-28 Ilia Alshanetsky <ilia@prohost.org>
-
- * ext/pdf/pdf.c:
- Remove unused variable.
-
-2004-02-28 Moriyoshi Koizumi <moriyoshi@at.wakwak.com>
-
- * NEWS:
- - Reordering.
-
-2004-02-28 Ilia Alshanetsky <ilia@prohost.org>
-
- * ext/pdf/pdf.c:
- Memory allocation check.
-
-2004-02-28 Moriyoshi Koizumi <moriyoshi@at.wakwak.com>
-
- * NEWS:
- - BFN & misc.
-
- * ext/mbstring/config.m4
- ext/mbstring/mbstring.c
- ext/mbstring/php_mbregex.c
- ext/mbstring/php_mbregex.h:
- - Upgrade bundled oniguruma regex library to 2.2.2 (Rui, Moriyoshi)
- . Supports various encodings such as BIG5, GB2312 and ISO-8859-*
- . Fixes bug #26677 (mbstring compile errors with IRIX)
- . Many thanks to K.Kosako.
- - Remove redundant files that are not relevant to the build.
-
-2004-02-27 Rasmus Lerdorf <rasmus@lerdorf.com>
-
- * sapi/cgi/cgi_main.c:
- As discussed a while ago. There is no reason to disallow command-line
- arguments for the cgi version when run in a cgi context. Our own test
- framework is in fact broken because of this unnecessary restriction.
-
-2004-02-27 Frank M. Kromann <frank@kromann.info>
-
- * ext/fbsql/php_fbsql.c:
- Define buffer size macro and add a comment about the buffer size.
-
-2004-02-27 Marcus Boerger <marcus.boerger@post.rwth-aachen.de>
-
- * ZendEngine2/zend_API.c
- ZendEngine2/zend_compile.h:
- Add some comments
-
- * tests/classes/abstract_redeclare.phpt:
- The order of error has changed here. So the expectations must change too.
-
- * ZendEngine2/zend_API.c
- ZendEngine2/zend_compile.c
- ZendEngine2/zend_execute.c:
- Fixes for abstract classes/methods
-
-2004-02-27 Greg Beaver <greg@chiaraquartet.net>
-
- * pear/PEAR.php:
- fix #640, error in comment for getStaticProperty
-
- * pear/PEAR/Autoloader.php
- pear/PEAR/Command.php:
- get_class -> is_a
-
-2004-02-27 Ilia Alshanetsky <ilia@prohost.org>
-
- * (PECL_4_3)
- ext/sqlite/sqlite.c
- ext/sqlite/tests/sqlite_027.phpt:
- MFH: Fixed possible crash inside sqlite_escape_string() and
- sqlite_udf_encode_binary().
-
- * ext/sqlite/tests/sqlite_027.phpt:
-
- Fixed possible crash inside sqlite_escape_string() and
- sqlite_udf_encode_binary().
-
- * ext/sqlite/sqlite.c:
- Fixed possible crash inside sqlite_escape_string() and
- sqlite_udf_encode_binary().
-
-2004-02-26 Frank M. Kromann <frank@kromann.info>
-
- * ext/fbsql/php_fbsql.c
- ext/fbsql/php_fbsql.h:
- Adding function to change user passwords
-
-2004-02-26 Marcus Boerger <marcus.boerger@post.rwth-aachen.de>
-
- * tests/classes/abstract_derived.phpt:
- Fixes for abstract classes
-
- * ZendEngine2/zend_language_parser.y
- ZendEngine2/zend_language_scanner.l:
- Fix __METHOD__ (noticed by Davey Sahfik)
-
- * tests/lang/foreach_with_object_001.phpt:
- Add new test (from pierre)
-
-2004-02-26 Jani Taskinen <jani.taskinen@kolumbus.fi>
-
- * ext/mysqli/mysqli_prop.c
- ext/mysqli/mysqli_repl.c
- ext/mysqli/mysqli_report.h
- ext/mysqli/php_mysqli.h:
- ws & cs fixes
-
-2004-02-26 Georg Richter <phpinfo@t-online.de>
-
- * ext/mysqli/mysqli_api.c:
- prototype fix for mysqli_ping
-
- * php.ini-dist
- php.ini-recommended
- ext/mysqli/mysqli.c
- ext/mysqli/mysqli_api.c
- ext/mysqli/mysqli_nonapi.c
- ext/mysqli/php_mysqli.h:
- added MySQLI ini entries
- added ini parameter for mysql->reconnect
-
- * ext/mysqli/mysqli_api.c
- ext/mysqli/mysqli_fe.c
- ext/mysqli/mysqli_prop.c:
- removed blocking calls to mysql_set_server_option (MYSQLI_DISABLE_MQ)
- added mysqli_multi_query to function table
- changed stmt->affected_rows property (http://bugs.mysql.com/?id=2247) for
- 4.1.2
-
-2004-02-26 Jani Taskinen <jani.taskinen@kolumbus.fi>
-
- * tests/lang/bug27395.phpt
- tests/lang/bug27395.phpt:
- Remove bogus test: see bug #20993
-
-2004-02-26 Marcus Boerger <marcus.boerger@post.rwth-aachen.de>
-
- * ZendEngine2/zend_reflection_api.c:
- Fix problem with Reflection_Property (patch from Timm slightly modified).
-
-2004-02-26 Jani Taskinen <jani.taskinen@kolumbus.fi>
-
- * ext/standard/http_fopen_wrapper.c:
- MFB: typofix
-
- * (PHP_4_3)
- ext/standard/http_fopen_wrapper.c:
- typofix
-
-2004-02-26 Ilia Alshanetsky <ilia@prohost.org>
-
- * (PHP_4_3)
- ext/standard/http_fopen_wrapper.c:
- MFH: Handle situation where feof() occurs before the HTTP header is
- retrieved.
-
- * ext/standard/http_fopen_wrapper.c:
- Handle situation where feof() occurs before the HTTP header is retrieved.
-
-2004-02-25 Derick Rethans <php@derickrethans.nl>
-
- * ext/standard/tests/general_functions/highlight_heredoc.phpt
- tests/strings/004.phpt
- tests/strings/bug26703.phpt:
- - Fix tests after change to highlight_string()
-
-2004-02-25 Ilia Alshanetsky <ilia@prohost.org>
-
- * (PHP_4_3)
- NEWS
- ext/sockets/sockets.c:
- MFH:
- Fixed bug #21760 (Use of uninitialized pointer inside php_read()).
- Fixed 3 possible crashes due to integer overflow or invalid user input
- inside the sockets extension.
-
- * ext/sockets/sockets.c:
- Fixed bug #21760 (Use of uninitialized pointer inside php_read()).
- Fixed 3 possible crashes due to integer overflow or invalid user input
- inside the sockets extension.
-
-2004-02-25 Marcus Boerger <marcus.boerger@post.rwth-aachen.de>
-
- * ZendEngine2/zend_objects_API.c:
- As Andi found out the dtor may increase the refcount.
-
-2004-02-25 Jani Taskinen <jani.taskinen@kolumbus.fi>
-
- * ZendEngine2/zend_builtin_functions.c:
- ws + cs
-
- * tests/lang/bug22367.phpt:
- Revert and add the compatibility option.
-
- * NEWS:
- typofix
-
-2004-02-25 Ard Biesheuvel <a.k.biesheuvel@ewi.tudelft.nl>
-
- * ext/bcmath/bcmath.c
- ext/ftp/php_ftp.c
- ext/mysqli/mysqli_nonapi.c
- ext/mysqli/mysqli_report.c
- ext/oci8/oci8.c
- ext/pgsql/pgsql.c
- ext/sqlite/sqlite.c
- ext/standard/dir.c
- ext/standard/file.c
- ext/standard/streamsfuncs.c
- ext/standard/string.c
- ext/standard/sunfuncs.c
- ext/standard/var.c
- ext/w32api/w32api.c:
- Wordsize fixes
-
-2004-02-25 Jani Taskinen <jani.taskinen@kolumbus.fi>
-
- * NEWS:
- style
-
- * tests/lang/bug27395.phpt:
-
- Test for bug #27395
-
-2004-02-25 Andi Gutmans <andi@zend.com>
-
- * NEWS:
- - More NEWS
-
-2004-02-25 Zeev Suraski <zeev@zend.com>
-
- * ZendEngine2/zend_compile.c
- ZendEngine2/zend_execute.c:
- Fix leak in foreach ($o->mthd()->arr)
-
- * tests/lang/bug22367.phpt:
- This is no longer valid out of the box PHP 5 code.
- We tried to enable compatibility mode but the test engine doesn't appear
- to take the --INI-- section into account in compile time, so it didn't
- work...
-
- * ZendEngine2/zend_API.c
- ZendEngine2/zend_API.h
- ZendEngine2/zend_compile.c
- ZendEngine2/zend_compile.h
- ZendEngine2/zend_execute.c:
- - Improve ARG_INFO() macros to support supplying required_num_args
- - Initial fix for foreach($o->mthd()->arr) crash (now leaks)
-
-2004-02-25 Derick Rethans <php@derickrethans.nl>
-
- * ZendEngine2/zend_highlight.c:
- - Use <span> instead of <font> in highlight_string(). (Patch by
- mg@iceni.pl)
-
-2004-02-25 Jani Taskinen <jani.taskinen@kolumbus.fi>
-
- * ext/mysqli/config.w32:
- Do not corrupt mysql build with mysqli build stuff. (should fix #27387)
-
- * ZendEngine2/zend_exceptions.c:
- Improve error messages
-
-2004-02-25 Zeev Suraski <zeev@zend.com>
-
- * NEWS:
- update
-
-2004-02-25 Jani Taskinen <jani.taskinen@kolumbus.fi>
-
- * (PHP_4_3)
- NEWS
- ext/standard/pack.c:
- MFH: Fixed bug #27384 (unpack() misbehaves with 1 char string). (GeorgeS)
-
-2004-02-25 Zeev Suraski <zeev@zend.com>
-
- * php.ini-dist
- php.ini-recommended
- main/main.c:
- - Rename compatiblity mode to zend.ze2_compatibility_mode (it doesn't
- only affect auto-clone).
- - Perform implementation checks even with simple inheritance (off when
- compatibility mode is enabled).
- - Restore default arguments in interfaces and handle it correctly.
- - Move registration of internal classes later in the startup sequence
- in order to have INI options available.
-
- * ZendEngine2/zend.c
- ZendEngine2/zend_compile.c
- ZendEngine2/zend_execute.c
- ZendEngine2/zend_execute_API.c
- ZendEngine2/zend_globals.h
- ZendEngine2/zend_variables.c:
- - Rename compatiblity mode to zend.ze2_compatibility_mode (it doesn't
- only affect auto-clone).
- - Perform implementation checks even with simple inheritance (off when
- compatibility mode is enabled).
- - Restore default arguments in interfaces and handle it correctly.
- - Move registration of internal classes later in the startup sequence
- in order to have INI options available.
-
-2004-02-25 Derick Rethans <php@derickrethans.nl>
-
- * ZendEngine2/zend_exceptions.c:
- - Fixed bug #27391 (typo in Fatal Error message).
-
-2004-02-25 Sebastian Bergmann <sb@sebastian-bergmann.de>
-
- * ext/standard/http_fopen_wrapper.c:
- ZTS fix.
-
-2004-02-25 Zeev Suraski <zeev@zend.com>
-
- * ZendEngine2/zend_API.c
- ZendEngine2/zend_compile.c
- ZendEngine2/zend_compile.h
- ZendEngine2/zend_opcode.c:
- - Abstract methods cannot have defaults for arguments
- - Make function foo($a, $b=null) satisfy both foo($a) and foo($a, $b)
- prototypes
-
-2004-02-25 Sebastian Bergmann <sb@sebastian-bergmann.de>
-
- * ZendEngine2/zend_reflection_api.c:
- Proto fixes.
-
-2004-02-25 Marcus Boerger <marcus.boerger@post.rwth-aachen.de>
-
- * ZendEngine2/zend_objects_API.c:
- Fix object destruction/free in shutdown
- - set destructor_called even when no dtor is given
- - use free_storage even when no dtor hat to be called
-
- * ZendEngine2/zend_objects_API.c:
- Checking once for dtor is enough
-
-2004-02-24 Marcus Boerger <marcus.boerger@post.rwth-aachen.de>
-
- * ZendEngine2/zend_API.c:
- Fix class flags when handling abstract methods
-
-2004-02-24 Ilia Alshanetsky <ilia@prohost.org>
-
- * (PHP_4_3)
- NEWS
- ext/standard/http_fopen_wrapper.c:
- MFH: Fixed bug #27383 (Potential crash inside fopen_wrapper, while parsing
- response code).
-
- * ext/standard/http_fopen_wrapper.c:
- Fixed bug #27383 (Potential crash inside fopen_wrapper, while parsing
- response code).
-
-2004-02-24 George Schlossnagle <george@omniti.com>
-
- * ext/standard/pack.c:
- fix for bug 27384
-
-2004-02-24 Ard Biesheuvel <a.k.biesheuvel@ewi.tudelft.nl>
-
- * ext/sqlite/sqlite.c:
- More wordsize/alignment fixes
-
-2004-02-24 Zeev Suraski <zeev@zend.com>
-
- * main/main.c:
- Remove empty comment
-
-2004-02-24 Christian Stocker <chregu@phant.ch>
-
- * (PHP_4_3)
- ext/domxml/php_domxml.c:
- fix for bug 27349 "Invalid parsing of CDATA sections in XSL templates"
-
-2004-02-24 Rob Richards <rrichards@ctindustries.net>
-
- * ext/xml/compat.c:
- fix win32 compile with libxml 2.6
- fix mem leaks
-
-2004-02-24 Jani Taskinen <jani.taskinen@kolumbus.fi>
-
- * (PHP_4_3)
- NEWS
- ext/session/session.c:
- MFH: - Fixed bug #26005 (Random "cannot change the session ini settings"
- errors).
-
- * ext/session/session.c:
- Fix bug #26005 (Random "cannot change the session ini settings" errors)
-
-2004-02-23 Wez Furlong <wez.php@thebrainroom.net>
-
- * ext/standard/tests/file/statcache-corruption.phpt:
- test case for statcache corruption of BG
-
- * ext/standard/basic_functions.h:
- Ooops, these should not be pointers ;)
-
-2004-02-23 Sara Golemon <php@alphaweb.net>
-
- * ext/standard/string.c:
- Make today's changes work w/ str_ireplace() as well.
-
- * ext/standard/string.c:
- Short circuit str_replaces when we already know that needle does not occur
- in haystack.
-
- Note: Prior bugfix was for #27176 not #27276
-
- * ext/standard/string.c:
- Bugfix #27276: When using str_replace to expand a string, count occurances
- of needle in haystack to avoid massive overallocation
-
-2004-02-23 Ilia Alshanetsky <ilia@prohost.org>
-
- * (PHP_4_3)
- NEWS
- ext/curl/curl.c:
- MFH: Fixed bug #27341 (HEAD requests fail to return data).
-
- * ext/curl/interface.c:
- Fixed bug #27341 (HEAD requests fail to return data).
-
-2004-02-23 Derick Rethans <php@derickrethans.nl>
-
- * ext/standard/tests/strings/bug27276.phpt:
- - Added testcase for bug #27276
-
-2004-02-23 Jani Taskinen <jani.taskinen@kolumbus.fi>
-
- * (PHP_4_3)
- Zend/zend.c:
- Fix memleak during shutdown (ZTS), kill compile warning
-
- * (PHP_4_3)
- NEWS
- sapi/isapi/php4isapi.c:
- MFH: fixed bug #27337 (missing sapi_shutdown())
-
- * sapi/isapi/php5isapi.c:
- Fix bug #27337 (missing sapi_shutdown() causing memory leak)
-
-2004-02-23 Andi Gutmans <andi@zend.com>
-
- * ZendEngine2/zend_language_parser.y:
- - Improve precendence:
-
- <?php
-
- $obj->foo = "Blah";
-
- if (!$obj instanceof StdClass) {
- print "No";
- } else {
- print "Yes";
- }
-
-2004-02-23 Georg Richter <phpinfo@t-online.de>
-
- * ext/mysqli/mysqli_nonapi.c:
- fixed prototypes for mysqli_connect_err* functions
- (thx to Mehdi Achour)
-
-2004-02-23 Ard Biesheuvel <a.k.biesheuvel@ewi.tudelft.nl>
-
- * ext/sqlite/sqlite.c
- ext/standard/streamsfuncs.c:
- 64-bit fixes
-
-2004-02-23 Christian Stocker <chregu@phant.ch>
-
- * ext/xml/xml.c
- ext/xml/tests/bug25666.phpt
- ext/xml/tests/xml009.phpt
- ext/xml/tests/xml010.phpt:
- - omit WARNING instead of ERROR for x_p_c_ns
- - fix SKIPIF code in tests
-
- * ext/xml/tests/bug25666.phpt
- ext/xml/tests/xml009.phpt
- ext/xml/tests/xml010.phpt:
- skip tests, if xml_parser_create_ns is not supported.
-
- * ext/xml/tests/xml010.phpt:
- test for attributes
-
- * ext/xml/compat.c:
- - mixed up name and value... fixed
-
- * ext/xml/compat.c:
- fix attribute handling in combination with sax2
-
-2004-02-23 Adam Dickmeiss <adam@indexdata.dk>
-
- * ext/yaz/config.m4
- ext/yaz/php_yaz.c:
- Use ZOOM_resultset_sort for yaz_sort. Require YAZ 2.0.13 or later.
-
-2004-02-23 Christian Stocker <chregu@phant.ch>
-
- * (PHP_4_3)
- ext/domxml/tests/bug26384.phpt:
- skip test, if no XSLT support is compiled in
-
- * ext/xml/compat.c
- ext/xml/xml.c:
- remove compiler warnings
-
-2004-02-23 Andi Gutmans <andi@zend.com>
-
- * ZendEngine2/zend_language_parser.y:
- - Decrease precedence of instanceof so that the following is true:
- php -r 'var_export((object)1 instanceof stdClass);';
- Patch by Jan Lehnardt
-
-2004-02-23 Christian Stocker <chregu@phant.ch>
-
- * ext/xml/compat.c
- ext/xml/xml.c:
- - make it compile with libxml2 2.5 again
- - disable xml_parser_create_ns with libxml2 2.5 for the time being
- - the #if s can be removed, once we insist on libxml2 2.6
-
-2004-02-23 Georg Richter <phpinfo@t-online.de>
-
- * ext/mysqli/mysqli_api.c
- ext/mysqli/mysqli_nonapi.c:
- fixed report message
- Disabled reconnect option
-
-2004-02-23 Jani Taskinen <jani.taskinen@kolumbus.fi>
-
- * acinclude.m4
- ext/imap/config.m4:
- - Added PHP_TEST_BUILD macro which can be used to test whether build
- works / would work with current LIBS (+ additional extra-libs)
-
-2004-02-23 Ard Biesheuvel <a.k.biesheuvel@ewi.tudelft.nl>
-
- * ext/sqlite/sqlite.c
- ext/standard/tests/array/array_sum.phpt:
- 64-bit fix
-
-2004-02-22 Derick Rethans <php@derickrethans.nl>
-
- * (PHP_4_3)
- NEWS
- Zend/zend_operators.c
- tests/lang/bug27354.phpt:
- - MFH: Fixed bug #27354 (Modulus operator crashes PHP).
-
- * tests/lang/bug27354.phpt:
-
- - Added testcase for bug #27354 (Modulus operator crashes PHP).
-
- * ZendEngine2/zend_operators.c:
- - Fixed bug #27354 (Modulus operator crashes PHP).
-
-2004-02-22 Marcus Boerger <marcus.boerger@post.rwth-aachen.de>
-
- * ZendEngine2/ZEND_CHANGES:
- Add some more obviously needed information
-
-2004-02-22 Christian Stocker <chregu@phant.ch>
-
- * ext/xml/tests/xml009.phpt:
- add test for default namespaces and same-prefix/different-namespaceURI
-
-2004-02-22 Ilia Alshanetsky <ilia@prohost.org>
-
- * ext/gd/gd.c:
- wbmp conversion warning fix.
-
-2004-02-22 Christian Stocker <chregu@phant.ch>
-
- * ext/xml/compat.c
- ext/xml/expat_compat.h:
- Fix broken Namespace support, use libxml2 namespace methods instead of
- homebrown solution:
- - default namespaces are recognized
- - different namespaces with same prefix in different nodes are treated
- correctly
- - libxml2 parser warnings are not errors anymore
-
-2004-02-22 Rob Richards <rrichards@ctindustries.net>
-
- * ext/dom/element.c:
- add optional third parameter to support namespace in constructor
-
-2004-02-22 Ard Biesheuvel <a.k.biesheuvel@ewi.tudelft.nl>
-
- * ext/sqlite/sqlite.c:
- Fix 64-bit crash
-
-2004-02-21 Sara Golemon <php@alphaweb.net>
-
- * ext/ftp/ftp.c:
- Avoid use of memcpy(), reply on struct in_addr to be right sized instead
-
-2004-02-21 Ilia Alshanetsky <ilia@prohost.org>
-
- * ext/gd/gd.c:
- Set correct default threshold for image2wbmp().
-
-2004-02-21 Sebastian Bergmann <sb@sebastian-bergmann.de>
-
- * ext/mysqli/config.w32:
- Can't test whether it works (no current >=mysql-4.1.2 available on
- Windows), but it should.
-
-2004-02-21 Georg Richter <phpinfo@t-online.de>
-
- * ext/mysqli/mysqli_fe.c:
- fixed typo in method alias
-
-2004-02-20 Sara Golemon <php@alphaweb.net>
-
- * ext/ftp/ftp.c:
- s_addr is always unsigned 32bit, long is not.
-
- * ext/standard/http.c:
- Bug Fix #27335: Numeric indexes crashing http_build_query()
-
-2004-02-20 Greg Beaver <greg@chiaraquartet.net>
-
- * pear/package-PEAR.xml
- pear/package-PEAR.xml:
- stupid oversight, no 4.2 dep
-
-2004-02-20 Pierre-Alain Joye <paj@pearfr.org>
-
- * (PHP_4_3)
- pear/packages/DB-1.6.0.tar
- pear/packages/DB-1.6.0RC6.tar:
- - Update to DB-1.6.0
-
- * pear/packages/DB-1.6.0RC6.tar:
- - Remove DB 1.6.0RC6
-
- * pear/packages/DB-1.6.0.tar:
-
- - Update to DB-1.6.0 stable
-
- * pear/package-PEAR.xml:
- - MFB
-
- * (PHP_4_3)
- pear/package-PEAR.xml:
- - 1.3b6=>1.3 stable, prepare stable release
-
-2004-02-20 Georg Richter <phpinfo@t-online.de>
-
- * ext/mysqli/config.m4
- ext/mysqli/mysqli_api.c
- ext/mysqli/mysqli_repl.c:
- Moved functions for replication support in to file mysqli_repl.c
- - these functions are marked as experimental now in documentation
- not sure if we will replace or extend them with NDB support in
- April
-
-2004-02-20 Antony Dovgal <tony2001@phpclub.net>
-
- * ext/oci8/oci8.c:
- this should really fix compile failure with gcc 2.96
-
-2004-02-20 Ard Biesheuvel <a.k.biesheuvel@ewi.tudelft.nl>
-
- * ext/interbase/interbase.c
- ext/interbase/php_ibase_includes.h:
- Fix some issues with persistent links
-
-2004-02-20 Hartmut Holzgraefe <hartmut@php-groupies.de>
-
- * main/streams/php_stream_context.h
- main/streams/php_stream_filter_api.h
- main/streams/php_stream_mmap.h
- main/streams/php_stream_plain_wrapper.h
- main/streams/php_stream_transport.h:
- EXTERN_C wrapping for PHPAPI prototypes
- (Zend and main should now be ok)
-
- * main/php_memory_streams.h
- main/php_network.h
- main/php_open_temporary_file.h
- main/php_output.h
- main/php_reentrancy.h
- main/php_streams.h
- main/php_ticks.h
- main/safe_mode.h:
- wrap all PHPAPI prototypes into BEGIN_EXTERN_C/END_EXTERN_C blocks
- (else they won't be usable from C++ extensions)
-
- * ZendEngine2/zend.h
- ZendEngine2/zend_API.h
- ZendEngine2/zend_iterators.h
- ZendEngine2/zend_operators.h
- ZendEngine2/zend_variables.h:
- more EXTERN_C wrapping of ZEND_API prototypes
-
- * scripts/dev/extern_c.php:
- A script that searches for PHPAPI and ZEND_API prototypes
- not enclosed by BEGIN_EXTERN_C/END_EXTERN_C
-
-2004-02-20 Jani Taskinen <jani.taskinen@kolumbus.fi>
-
- * ZendEngine2/zend_opcode.c:
- ws fix
-
- * ext/oci8/oci8.c:
- Fix compile failure
-
- * ext/oci8/oci8.c:
- Only use Z_TYPE* with zvals..
-
-2004-02-20 Ilia Alshanetsky <ilia@prohost.org>
-
- * (PHP_4_3)
- ext/dio/dio.c:
- MFH: missing safe_mode & open_basedir checks.
-
- * ext/dio/dio.c:
- Added missing safe_mode & open_basedir checks.
-
-2004-02-19 Ilia Alshanetsky <ilia@prohost.org>
-
- * (PHP_4_3)
- ext/cpdf/cpdf.c:
- MFH: Fixed possible resource/memory leak.
-
- * ext/cpdf/cpdf.c:
- Fixed possible resource/memory leak.
-
-2004-02-19 Jani Taskinen <jani.taskinen@kolumbus.fi>
-
- * ext/session/session.c:
- Improve error messages
-
-2004-02-18 Hartmut Holzgraefe <hartmut@php-groupies.de>
-
- * ZendEngine2/zend.h
- ZendEngine2/zend_builtin_functions.h
- ZendEngine2/zend_extensions.h
- ZendEngine2/zend_indent.h
- ZendEngine2/zend_interfaces.h
- ZendEngine2/zend_object_handlers.h
- ZendEngine2/zend_objects.h
- ZendEngine2/zend_objects_API.h
- ZendEngine2/zend_ptr_stack.h
- ZendEngine2/zend_stack.h
- ZendEngine2/zend_stream.h:
- wrap ZEND_API prototypes into BEGIN_EXTERN_C/END_EXTERN_C
- for C++ extension support
-
-2004-02-18 Rob Richards <rrichards@ctindustries.net>
-
- * ext/dom/xpath.c:
- always return domnodelist unless error
-
-2004-02-18 Hartmut Holzgraefe <hartmut@php-groupies.de>
-
- * main/php_logos.h:
- be nice to C++ extensions
-
-2004-02-18 Rob Richards <rrichards@ctindustries.net>
-
- * ext/dom/node.c:
- correct implementation of prefix write property
-
-2004-02-18 Jani Taskinen <jani.taskinen@kolumbus.fi>
-
- * ext/mssql/php_mssql.c:
- register_list_destructors -> zend_register_list_destructors_ex
-
-2004-02-18 Ilia Alshanetsky <ilia@prohost.org>
-
- * (PHP_4_3)
- NEWS
- ext/standard/scanf.c
- ext/standard/tests/strings/bug27295.phpt:
- MFH: Fixed bug #27295 (memory leak inside sscanf()).
-
- * ext/standard/tests/strings/bug27295.phpt:
-
- Fixed bug #27295 (memory leak inside sscanf()).
-
- * ext/standard/scanf.c:
- Fixed bug #27295 (memory leak inside sscanf()).
-
-2004-02-18 Georg Richter <phpinfo@t-online.de>
-
- * ext/mysqli/mysqli_api.c:
- changed return value of mysql_fetch
- - instead of MYSQL_NO_DATA mysql_fetch will now return NULL
-
-2004-02-18 Zeev Suraski <zeev@zend.com>
-
- * ZendEngine2/zend.c:
- Forward-port fixlet from PHP 4 (thanks to Michael Sisolak)
-
-2004-02-18 Sara Golemon <php@alphaweb.net>
-
- * ext/standard/info.c:
- Show registered transports in phpinfo()
-
-2004-02-18 Jani Taskinen <jani.taskinen@kolumbus.fi>
-
- * ext/wddx/tests/bug27287.phpt:
-
- Test for bug #27287
-
-2004-02-17 Jani Taskinen <jani.taskinen@kolumbus.fi>
-
- * ZendEngine2/zend_list.c:
- MFB: - Fix bug #26753 (zend_fetch_list_dtor_id() does not check NULL
- strings)
-
-2004-02-17 Ilia Alshanetsky <ilia@prohost.org>
-
- * (PHP_4_3)
- NEWS
- ext/gd/gd.c:
- MFH: Fixed bug #27293 (two crashes inside image2wbmp()).
-
- * ext/gd/gd.c:
- Fixed bug #27293 (two crashes inside image2wbmp()).
-
-2004-02-17 Ard Biesheuvel <a.k.biesheuvel@ewi.tudelft.nl>
-
- * (PHP_4_3)
- ext/interbase/interbase.c:
- Really disallow persistent connections if ini option is set
-
-2004-02-17 Rob Richards <rrichards@ctindustries.net>
-
- * ext/dom/php_dom.c:
- add dtor to cleanup iterator related data
-
-2004-02-17 Ard Biesheuvel <a.k.biesheuvel@ewi.tudelft.nl>
-
- * ext/interbase/ibase_blobs.c
- ext/interbase/ibase_events.c
- ext/interbase/interbase.c
- ext/interbase/php_ibase_includes.h
- ext/interbase/tests/004.phpt:
- Fixed unregistered bugs in event handling
- Cleaned up some of the code
- Removed ISC_QUAD from static initializers because it looks different on
- some platforms
-
- * ext/interbase/tests/004.phpt
- ext/interbase/tests/008.phpt:
- Added event handling test
- CS
-
-2004-02-17 Wez Furlong <wez.php@thebrainroom.net>
-
- * ext/gettext/config.w32:
- Fix:
-
-2004-02-17 Rob Richards <rrichards@ctindustries.net>
-
- * ext/dom/dom_iterators.c
- ext/dom/namednodemap.c
- ext/dom/node.c
- ext/dom/nodelist.c
- ext/dom/php_dom.c
- ext/dom/xpath.c:
- implement clone functionality to fix segfault
- DomNode->clone() creates new doc proxy if document is cloned
- remove printf from xpath
- fix remaining invalid object state issues
-
-2004-02-17 Jani Taskinen <jani.taskinen@kolumbus.fi>
-
- * (PHP_4_3)
- NEWS
- Zend/zend_list.c:
- - Fixed bug #26753 (zend_fetch_list_dtor_id() does not check NULL strings).
-
-2004-02-17 Georg Richter <phpinfo@t-online.de>
-
- * ext/mysqli/tests/027.phpt:
- changed output
-
-2004-02-17 Stig Bakken <ssb@trd.overture.com>
-
- * pear/PEAR/Frontend/CLI.php:
- - apply bold escape codes only if output is going to a terminal/tty
-
-2004-02-16 Moriyoshi Koizumi <moriyoshi@at.wakwak.com>
-
- * .gdbinit:
- - Add "zbacktrace" user-defined command.
-
-2004-02-16 Jani Taskinen <jani.taskinen@kolumbus.fi>
-
- * ext/standard/tests/strings/bug27278.phpt:
- shorten the description a bit
-
- * (PHP_4_3)
- NEWS:
- typofix :)
-
-2004-02-16 Ilia Alshanetsky <ilia@prohost.org>
-
- * (PHP_4_3)
- NEWS
- ext/standard/formatted_print.c:
- MFH: Fixed bug #27278 (*printf() functions treat arguments as if passed by
- reference).
-
- * ext/standard/formatted_print.c:
- Fixed bug #27278 (*printf() functions treat arguments as if passed by
- reference).
-
-2004-02-16 Jani Taskinen <jani.taskinen@kolumbus.fi>
-
- * ext/standard/tests/strings/bug27278.phpt:
-
- nuke copypaste rubbish
-
- * ext/standard/tests/strings/bug27278.phpt:
- test for bug #27278
-
-2004-02-16 Sergey Kartashoff <gluke@mail.ru>
-
- * (PHP_4_3)
- ext/mnogosearch/php_mnogo.c:
- - A fix to make UDM_LIMIT_DATE work was applied. Thanks to
- d.rousseau at nnx.com
-
- * ext/mnogosearch/php_mnogo.c:
- - A fix to make UDM_LIMIT_DATE work was applied. Thanx to
- d.rousseau at nnx.com
-
-2004-02-16 Ilia Alshanetsky <ilia@prohost.org>
-
- * (PHP_4_3)
- configure.in
- main/php_version.h:
- Back to dev.
-
- * (PHP_4_3)
- configure.in
- main/php_version.h:
- Go with RC3
-
-2004-02-16 Georg Richter <phpinfo@t-online.de>
-
- * ext/mysqli/tests/017.phpt
- ext/mysqli/tests/026.phpt
- ext/mysqli/tests/035.phpt
- ext/mysqli/tests/045.phpt:
- fixed some tests
- added skip section for prepared statements when using SHOW command
-
-2004-02-16 Ilia Alshanetsky <ilia@prohost.org>
-
- * (PHP_4_3)
- NEWS:
- Bug fixing news.
-
- * ext/gmp/gmp.c:
- Better gmp fix.
-
-2004-02-16 Derick Rethans <php@derickrethans.nl>
-
- * (PHP_4_3)
- NEWS:
- - Update news too
-
- * (PHP_4_3)
- main/php_ini.c:
- - MFH: Fixed zero bytes memory allocation when no extra ini files are found
- in
- the --with-config-file-scan-dir specified directory. (Eric Colinet,
- Derick)
-
-2004-02-16 Rob Richards <rrichards@ctindustries.net>
-
- * ext/dom/attr.c
- ext/dom/characterdata.c
- ext/dom/document.c
- ext/dom/documenttype.c
- ext/dom/element.c
- ext/dom/entity.c
- ext/dom/node.c
- ext/dom/notation.c
- ext/dom/processinginstruction.c
- ext/dom/text.c:
- issue warning if object is in invalid state when dealing with properties
-
-2004-02-16 Derick Rethans <php@derickrethans.nl>
-
- * ZendEngine2/ZEND_CHANGES:
- - Clearify clone behavior, fixed clone example (Patch by Jan Lehnardt)
-
-2004-02-16 Stanislav Malyshev <stas@zend.com>
-
- * ext/standard/var.c:
- ce is not used, don't get it
-
-2004-02-16 Jani Taskinen <jani.taskinen@kolumbus.fi>
-
- * ext/standard/tests/assert/assert.phpt:
- - fix test
-
-2004-02-16 Marcus Boerger <marcus.boerger@post.rwth-aachen.de>
-
- * NEWS:
- BFN
-
- * ZendEngine2/zend_compile.c:
- Bugfix #27227 Mixed case class names causes Fatal Error in Constructor call
-
-2004-02-15 Pierre-Alain Joye <paj@pearfr.org>
-
- * (PHP_4_3)
- pear/packages/DB-1.6.0RC6.tar:
- - DB 1.6RC6
-
- * (PHP_4_3)
- pear/packages/DB-1.6.0RC1.tar:
- - remove DB 1.6RC1
-
-2004-02-15 Ard Biesheuvel <a.k.biesheuvel@ewi.tudelft.nl>
-
- * (PHP_4_3)
- ext/interbase/tests/002.phpt
- ext/interbase/tests/003.phpt
- ext/interbase/tests/004.phpt
- ext/interbase/tests/005.phpt
- ext/interbase/tests/006.phpt:
- CS/WS
-
-2004-02-15 Ilia Alshanetsky <ilia@prohost.org>
-
- * ext/sqlite/sqlite.c:
- For get_data iterator do not force numeric keys, return keys the user
- requests.
-
-2004-02-15 Georg Richter <phpinfo@t-online.de>
-
- * ext/mysqli/mysqli_api.c:
- fixed several binding problems
-
-2004-02-15 Ilia Alshanetsky <ilia@prohost.org>
-
- * ext/sqlite/sqlite.c:
- Fixed a crash inside create_aggregate() method due to incorrect argument
- parsing.
-
-2004-02-15 Rob Richards <rrichards@ctindustries.net>
-
- * ext/dom/attr.c
- ext/dom/characterdata.c:
- switch to zend_parse_method_parameters for consistancy
- insure object parameters are correct class types
- convert zvals to correct type if needed for property writes
- fix a few segfaults found while testing
-
-2004-02-15 Ard Biesheuvel <a.k.biesheuvel@ewi.tudelft.nl>
-
- * ext/interbase/interbase.c
- ext/interbase/tests/003.phpt:
- Reintroduce param NULL testing (see bug #26777)
-
-2004-02-15 Jani Taskinen <jani.taskinen@kolumbus.fi>
-
- * ext/recode/config9.m4:
- Prevent bug reports like #27260
-
-2004-02-15 Stig Bakken <ssb@trd.overture.com>
-
- * pear/PEAR/Frontend/CLI.php:
- - don't cut lines when wrapping output
-
-2004-02-15 Ilia Alshanetsky <ilia@prohost.org>
-
- * (PHP_4_3)
- ext/gmp/gmp.c:
- MFH: Fixed bug #27258 (moved FPE check to correct location).
- Fixed several possible FPE.
-
- * ext/gmp/gmp.c:
- Fixed bug #27258 (moved FPE check to correct location).
- Fixed several possible FPE.
-
-2004-02-15 Rob Richards <rrichards@ctindustries.net>
-
- * ext/dom/document.c
- ext/dom/documenttype.c
- ext/dom/dom_fe.h
- ext/dom/domimplementation.c
- ext/dom/php_dom.c
- ext/dom/processinginstruction.c:
- allow certain methods to be called statically again:
- domdocument (all load methods)
- domimplementation (all methods)
- switch to zend_parse_method_parameters for consistancy
- insure object parameters are correct class types
- convert zvals to correct type if needed for property writes
- fix a few segfaults found while testing
-
-2004-02-15 Marcus Boerger <marcus.boerger@post.rwth-aachen.de>
-
- * NEWS
- main/main.c:
- Fix startup errors
-
-2004-02-15 Rob Richards <rrichards@ctindustries.net>
-
- * ext/dom/element.c
- ext/dom/node.c:
- switch to zend_parse_method_parameters for consistancy
- insure object parameters are correct class types
- convert zvals to correct type if needed for property writes
-
-2004-02-15 Zeev Suraski <zeev@zend.com>
-
- * ext/com_dotnet/com_saproxy.c
- ext/mysqli/mysqli.c
- ext/session/session.c:
- Use zval_ptr_dtor() to free variables as soon as they hit refcount of 0.
-
- Note: You should not be using ZVAL_DELREF() in day to day usage.
- Instead,
- you should use zval_ptr_dtor(). Use ZVAL_DELREF() only if you're
- messing with the refcount directly and know what you're doing.
- Note #2: For clarity, if you want to initialize a new zval with a
- refcount
- of 0, it's best to do that directly, instead of using
- ZVAL_DELREF
- after allocating the zval...
-
-2004-02-15 Jan Lehnardt <jan@dasmoped.net>
-
- * ext/mono/php_mono.c:
- - fix build (patch by josh at mediascape dot com)
- - close #26045
-
-2004-02-15 Rob Richards <rrichards@ctindustries.net>
-
- * ext/dom/processinginstruction.c
- ext/dom/text.c
- ext/dom/xpath.c:
- start of dom update
- switch to zend_parse_method_parameters for consistancy
- insure object parameters are correct class types
- convert zvals to correct type if needed for property writes
-
-2004-02-15 Timm Friebe <thekid@thekid.de>
-
- * ext/sybase_ct/php_sybase_ct.c
- ext/sybase_ct/php_sybase_ct.c:
- - Fixed bug #26407 (Result set fetching broken around transactions)
-
- * ext/sybase_ct/php_sybase_ct.c
- ext/sybase_ct/php_sybase_ct.c:
- - Changed initialization of function arguments to message handler
-
-2004-02-14 Greg Beaver <greg@chiaraquartet.net>
-
- * (PHP_4_3)
- pear/scripts/pear.bat:
- re-add as binary
-
- * (PHP_4_3)
- pear/scripts/pear.bat:
- remove in order to re-add binary
-
-2004-02-14 Jan Lehnardt <jan@dasmoped.net>
-
- * ext/standard/dl.c:
- - improve error message
-
-2004-02-14 Jani Taskinen <jani.taskinen@kolumbus.fi>
-
- * NEWS:
- bfn
-
-2004-02-14 Marcus Boerger <marcus.boerger@post.rwth-aachen.de>
-
- * ZendEngine2/zend_iterators.c:
- dtor's may not be called from free_storage handlers
-
-2004-02-14 Derick Rethans <php@derickrethans.nl>
-
- * main/php_ini.c:
- - We always need to destroy the llist though.
-
- * NEWS
- main/php_ini.c:
- - Fixed zero bytes memory allocation when no extra ini files are found in
- the
- --with-config-file-scan-dir specified directory. (patch by Eric Colinet
- <e.colinet@laposte.net>)
-
-2004-02-13 Rob Richards <rrichards@ctindustries.net>
-
- * ext/simplexml/simplexml.c:
- Fix bug #27237: Working with simplexml crashes apache2
- object dtor must be used to cleanup iterator data correctly
- Fix asXML() outputing incorrect node
-
-2004-02-13 Ard Biesheuvel <a.k.biesheuvel@ewi.tudelft.nl>
-
- * (PHP_4_3)
- NEWS:
- BFN
-
- * (PHP_4_3)
- ext/interbase/interbase.c
- ext/interbase/tests/003.phpt:
- Fixed bug #27235 (NUMERIC x.0 field returns empty string on 0)
- CS/WS
-
-2004-02-13 Ilia Alshanetsky <ilia@prohost.org>
-
- * ext/pspell/pspell.c:
- Fixed compile warnings.
-
-2004-02-13 Frank M. Kromann <frank@kromann.info>
-
- * ext/simplexml/php_simplexml.h:
- Adding mising declaration (needed for Win32 compilation)
-
-2004-02-12 Derick Rethans <php@derickrethans.nl>
-
- * NEWS
- ext/simplexml/simplexml.c:
- - Fixed start-up problem if both SPL and SimpleXML were enabled. The
- double initialization of apache 1.3 was causing problems here.
-
-2004-02-12 Stig Bakken <ssb@trd.overture.com>
-
- * ext/oci8/oci8.c
- ext/standard/crypt.c
- ext/standard/php_crypt.h:
- - email address update
-
- * ext/oci8/oci8.c:
- - update my email address
-
-2004-02-12 Stefan Esser <s.esser@e-matters.de>
-
- * main/rfc1867.c:
- better write into the correct buffer
-
-2004-02-12 Andi Gutmans <andi@zend.com>
-
- * NEWS
- configure.in
- main/php_version.h:
- - We are RC1-dev now
-
- * (php_5_0_0b4)
- configure.in
- main/php_version.h:
- - Roll Beta 4
-
- * (php_5_0_0b4)
- ZendEngine2/zend_execute.c:
- - Remove old code
-
-2004-02-12 Hartmut Holzgraefe <hartmut@php-groupies.de>
-
- * (php_5_0_0b4)
- README.PHP4-TO-PHP5-THIN-CHANGES
- ZendEngine2/ZEND_CHANGES:
- making sure that the provided examples actualy work (or at least do not
- generate no parse errors) unless they are really expected to fail
-
-2004-02-12 Jani Taskinen <jani.taskinen@kolumbus.fi>
-
- * (php_5_0_0b4)
- NEWS:
- reorder
-
-2004-02-12 Andi Gutmans <andi@zend.com>
-
- * (php_5_0_0b4)
- ZendEngine2/zend_object_handlers.c:
- - This was too strict.
-
-2004-02-12 Zeev Suraski <zeev@zend.com>
-
- * (php_5_0_0b4)
- tests/classes/array_access_005.phpt:
- Fix test
-
-2004-02-12 Pierre-Alain Joye <paj@pearfr.org>
-
- * (php_5_0_0b4)
- pear/packages/DB-1.6.0RC6.tar:
- - Update to DB-1.6.0RC6 (stable)
- notabene: No more RC with stable state will be bundled with stable
- php release. It's ok for php5 beta4.
-
- * pear/packages/DB-1.6.0RC1.tar:
- - Remove old DB
-
-2004-02-12 Zeev Suraski <zeev@zend.com>
-
- * (php_5_0_0b4)
- ext/com_dotnet/com_saproxy.c:
- Fix prototype/warning
-
-2004-02-12 Andi Gutmans <andi@zend.com>
-
- * NEWS:
- - More news
-
-2004-02-12 Zeev Suraski <zeev@zend.com>
-
- * (php_5_0_0b4)
- ZendEngine2/zend_API.c
- ZendEngine2/zend_API.h
- ZendEngine2/zend_compile.c
- ZendEngine2/zend_compile.h
- ZendEngine2/zend_interfaces.c
- ZendEngine2/zend_object_handlers.c:
- - Check return-by-reference bit when implementing interface prototypes
- - Add infrastructure for built-in functions to hint whether they
- return by reference or not. It is NOT currently used for anything,
- except for interface prototypes (you can use it to request that the
- function that implements your prototype returns by reference or
- doesn't return by reference).
- For downwards compatibility - by default, interface prototypes are
- agnostic as to whether the function that implements them returns
- by reference or not. Use ZEND_BEGIN_ARG_INFO_EX() with
- ZEND_RETURN_VALUE/ZEND_RETURN_REFERENCE to change that.
- - Fix ArrayAccess::getOffset() to conduct additional checks.
- If your getOffset() should work with multidimensional arrays - it
- must return by reference.
-
-2004-02-12 Andi Gutmans <andi@zend.com>
-
- * NEWS:
- - Add News entry
-
- * (php_5_0_0b4)
- ZendEngine2/zend_object_handlers.h:
- - Add comments to read/write property/dimension for extension authors
-
-2004-02-12 Zeev Suraski <zeev@zend.com>
-
- * (php_5_0_0b4)
- tests/lang/035.phpt
- tests/lang/error_2_exception_001.phpt:
- extend Exception
-
-2004-02-12 Wez Furlong <wez.php@thebrainroom.net>
-
- * (php_5_0_0b4)
- ext/com_dotnet/com_handlers.c:
- fix copy-n-past error in constructor.
- Spotted by Eric Colinet.
-
-2004-02-12 Zeev Suraski <zeev@zend.com>
-
- * configure.in:
- Update configure
-
- * ZendEngine2/zend_default_classes.h
- ext/com_dotnet/com_com.c
- ext/com_dotnet/com_dotnet.c
- ext/com_dotnet/com_extension.c
- ext/com_dotnet/com_handlers.c
- ext/com_dotnet/com_iterator.c
- ext/com_dotnet/com_misc.c
- ext/com_dotnet/com_saproxy.c
- ext/dom/php_dom.h
- ext/mysql/php_mysql.c
- ext/mysqli/mysqli.c
- ext/pgsql/pgsql.c
- ext/simplexml/simplexml.c
- ext/sqlite/sqlite.c
- main/main.c:
- zend_default_classes.h -> zend_exceptions.h
-
-2004-02-12 Andi Gutmans <andi@zend.com>
-
- * (php_5_0_0b4)
- ZendEngine2/Makefile.am:
- - Add zend_exceptions.c
-
-2004-02-12 Zeev Suraski <zeev@zend.com>
-
- * (php_5_0_0b4)
- ZendEngine2/ZendTS.dsp
- ZendEngine2/zend.c
- ZendEngine2/zend_default_classes.c
- ZendEngine2/zend_exceptions.c
- ZendEngine2/zend_exceptions.h
- ZendEngine2/zend_execute.c
- ZendEngine2/zend_execute.h
- ZendEngine2/zend_execute_API.c
- ZendEngine2/zend_reflection_api.c:
- Centralize exceptions code in zend_exceptions.[ch].
- Remove zend_default_classes.h (use zend_exceptions.h instead)
-
- NOTE: This currently breaks the build, fixes to php-src and pecl coming
- soon
-
-2004-02-12 Andi Gutmans <andi@zend.com>
-
- * ZendEngine2/zend_execute.c:
- - Use zend_throw_exception_object() in throw_handler to make sure it
- - does all the checks
-
-2004-02-12 Zeev Suraski <zeev@zend.com>
-
- * ZendEngine2/zend_default_classes.c
- ZendEngine2/zend_default_classes.h
- ZendEngine2/zend_exceptions.c
- ZendEngine2/zend_exceptions.h
- ZendEngine2/zend_execute.h
- ZendEngine2/zend_execute_API.c:
- Exceptions updates:
-
- - Enforce exceptions to be derived from class Exception. This allows
- users to perform catch-all. It's not yet complete, so don't get
- comfortable with it just yet :) Updates are coming soon.
- - Implement zend_throw_exception() using zend_throw_exception_ex()
-
-2004-02-12 Andi Gutmans <andi@zend.com>
-
- * ZendEngine2/zend_execute.h
- ZendEngine2/zend_execute_API.c:
- - Add API function to throw exception by using an object
-
- * (php_5_0_0b4RC1)
- NEWS
- configure.in
- main/php_version.h:
- - Go with b4 RC 1 (Sanity package)
-
-2004-02-12 Jani Taskinen <jani.taskinen@kolumbus.fi>
-
- * (PHP_4_3)
- NEWS:
- BFN
-
- * (php_5_0_0b4RC1)
- ext/standard/datetime.c:
- ws fix
-
- * (PHP_4_3)
- ext/standard/datetime.c:
- MFH: - Fixed bug #23467 (Showing incorrect Time Zone)
-
- * ext/standard/datetime.c:
- - Fixed bug #23467 (Showing incorrect Time Zone)
-
-2004-02-11 Marcus Boerger <marcus.boerger@post.rwth-aachen.de>
-
- * ZendEngine2/zend.c:
- Must be initialized in ZTS mode
-
- * ZendEngine2/ZEND_CHANGES
- ZendEngine2/ZEND_CHANGES:
- Update
-
- * ZendEngine2/zend_compile.c
- ZendEngine2/zend_language_parser.y
- tests/classes/interface_doubled.phpt:
- Fix: <interface> [extends <interface> [, <ineterface>]* ]
-
- * (PHP_4_3)
- NEWS
- sapi/cgi/cgi_main.c
- sapi/cli/php_cli.c:
- MFH: Bug #27104 CLI/CGI SAPI module variable name conflict
-
-2004-02-11 Jani Taskinen <jani.taskinen@kolumbus.fi>
-
- * ext/pspell/pspell.c:
- There is CODING_STANDARDS..at least NEW code should respect those..
-
- * NEWS:
- style
-
-2004-02-11 Marcus Boerger <marcus.boerger@post.rwth-aachen.de>
-
- * sapi/cgi/cgi_main.c
- sapi/cli/php_cli.c:
- Bugfix #27104 CLI/CGI SAPI module variable name conflict
-
-2004-02-11 Zeev Suraski <zeev@zend.com>
-
- * ext/simplexml/simplexml.c:
- Prevent SimpleXML from silently modifying types of variables that are
- assigned to its objects.
-
- Implementation notes for overloaded object modules:
-
- - If you return a zval which is not otherwise referenced by the extension
- or the engine's symbol table, its reference count should be 0.
- - If you receive a value zval in write_property/write_dimension, you
- may only modify it if its reference count is 1. Otherwise, you must
- create a copy of that zval before making any changes. You should NOT
- modify the reference count of the value passed to you.
-
- Have fun!
-
- * ZendEngine2/zend_execute.c:
- Fix leaks in assignments to overloaded objects
-
-2004-02-11 Brian France <list@firehawksystems.com>
-
- * NEWS:
-
- - Added checks for invalid characters in a cookie name or cookie data
- from setrawcookie. (Brian)
- - Added new pspell functions to set the dict-dir and data-dir options.
- (Brian)
-
- * ext/standard/head.c:
-
- Added checks for invalid characters in a cookie name or cookie data from
- setrawcookie
-
- * ext/pspell/php_pspell.h
- ext/pspell/pspell.c:
-
- Added two new functions to set the dict-dir and data-dir options.
-
-2004-02-11 Ilia Alshanetsky <ilia@prohost.org>
-
- * (PHP_4_3)
- ext/standard/url_scanner_ex.c:
- MFH: 'Touch' the file to make sure re2c is not needed.
-
- * ext/standard/url_scanner_ex.c:
- 'Touch' the file to make sure re2c is not needed.
-
- * (PHP_4_3)
- NEWS
- main/user_streams.c:
- Fixed bug #27183 (userland stream wrapper segfaults on stream_write).
-
- * ext/standard/tests/file/bug27183.phpt
- ext/standard/tests/file/bug27183.phpt:
-
- file bug27183.phpt was initially added on branch PHP_4_3.
-
- * (PHP_4_3)
- NEWS
- ext/session/tests/bug26862.phpt
- ext/standard/url_scanner_ex.c
- ext/standard/url_scanner_ex.re:
- MFH: Fixed bug #26862 (ob_flush() followed by output_reset_rewrite_vars()
- may result in data loss).
-
- * ext/session/tests/bug26862.phpt:
-
- Fixed bug #26862 (ob_flush() followed by output_reset_rewrite_vars() may
- result in data loss).
-
- * ext/standard/url_scanner_ex.c
- ext/standard/url_scanner_ex.re:
- Fixed bug #26862 (ob_flush() followed by output_reset_rewrite_vars() may
- result in data loss).
-
- * (PHP_4_3)
- configure.in
- main/php_version.h:
- Back to dev tree (forgot to restore versions).
-
-2004-02-11 Zeev Suraski <zeev@zend.com>
-
- * ZendEngine2/zend_execute.c:
- Fix leak with overloaded objects, when they're used just "for the hell
- of it" :)
-
-2004-02-11 Ard Biesheuvel <a.k.biesheuvel@ewi.tudelft.nl>
-
- * ext/interbase/config.m4:
- Look in the right place for lib
-
-2004-02-11 Zeev Suraski <zeev@zend.com>
-
- * tests/func/002.phpt
- tests/func/003.phpt
- tests/func/004.phpt:
- Get rid of some yucky past, and reenable these tests
-
- * ZendEngine2/zend_execute.c:
- Fixed a bug the caused overloaded array indices to be converted to strings
-
- * ZendEngine2/zend_execute.c:
- Turn off bogus warnings with overloaded dimensions and += (and friends)
-
-2004-02-11 Ilia Alshanetsky <ilia@prohost.org>
-
- * sapi/cgi/cgi_main.c:
- Proper win32 fix.
-
-2004-02-11 Zeev Suraski <zeev@zend.com>
-
- * ZendEngine2/zend_execute.c:
- Improve the implementation of unset() on array dimensions to be more
- consistent with that of regular variables and string offsets
-
- * ZendEngine2/zend_execute_API.c:
- Fix bug #25038
-
-2004-02-11 Rob Richards <rrichards@ctindustries.net>
-
- * ext/simplexml/tests/014.phpt:
- Fix test
-
-2004-02-11 Zeev Suraski <zeev@zend.com>
-
- * ZendEngine2/zend_reflection_api.c:
- Fix crash (patch by Rob Richards)
-
- * ZendEngine2/zend.c
- ZendEngine2/zend_execute_API.c:
- Fix exceptions thrown without a stack frame
- Always enable set_exception_handler()
-
-2004-02-11 Rob Richards <rrichards@ctindustries.net>
-
- * ext/simplexml/simplexml.c
- ext/simplexml/tests/014.phpt
- ext/simplexml/tests/014a.phpt
- ext/simplexml/tests/014b.phpt
- ext/simplexml/tests/016.phpt
- ext/simplexml/tests/bug27010.phpt:
- Fix compiler warnings
- Update tests
-
-2004-02-11 Ard Biesheuvel <a.k.biesheuvel@ewi.tudelft.nl>
-
- * ext/interbase/interbase.c:
- Add version info about run-time client library
-
- * ext/interbase/ibase_events.c
- ext/interbase/ibase_service.c:
- CS/WS
-
-2004-02-11 Andi Gutmans <andi@zend.com>
-
- * configure.in
- main/php_version.h:
- - Change to b4
-
-2004-02-11 Zeev Suraski <zeev@zend.com>
-
- * ZendEngine2/zend_list.h:
- Change FETCH_RESOURCE to return false on error instead of null, for
- consistency with other error situations
-
- * ext/standard/dl.c:
- Finally add a notice to hint people that using dl() is a bad idea...
-
- * ZendEngine2/zend_compile.c:
- Fix bug #26802 (the right aspects of it found by Marcus, anyway :)
-
- * ZendEngine2/tests/bug26802.phpt:
- Fix and clarify the test case
-
- * ZendEngine2/zend_execute_API.c:
- Complete the fix for handling of exceptions happening during the
- argument passing phase of function calls (fixes bug #26866)
-
- * ZendEngine2/zend_execute_API.c:
- whitespace
-
-2004-02-11 Georg Richter <phpinfo@t-online.de>
-
- * ext/mysqli/mysqli.c
- ext/mysqli/mysqli_api.c:
- removed printfs :)
- Thx Andi!
-
- * ext/mysqli/tests/017.phpt
- ext/mysqli/tests/019.phpt
- ext/mysqli/tests/020.phpt
- ext/mysqli/tests/021.phpt
- ext/mysqli/tests/022.phpt
- ext/mysqli/tests/023.phpt
- ext/mysqli/tests/024.phpt
- ext/mysqli/tests/025.phpt
- ext/mysqli/tests/026.phpt
- ext/mysqli/tests/042.phpt
- ext/mysqli/tests/043.phpt
- ext/mysqli/tests/046.phpt
- ext/mysqli/tests/058.phpt
- ext/mysqli/tests/059.phpt:
- changed first param in mysqli_bind_param
-
- * ext/mysqli/mysqli.c
- ext/mysqli/mysqli_api.c:
- changed first parameter in mysqli_bind_param from array to string
- (as discussed on berlin db meeting)
-
-2004-02-11 Rui Hirokawa <rui_hirokawa@ybb.ne.jp>
-
- * sapi/apache2handler/sapi_apache2.c:
- fixed a compilation error.
-
-2004-02-10 Zeev Suraski <zeev@zend.com>
-
- * ZendEngine2/tests/bug26698.phpt:
- Ignore the memleak in this test
-
- * main/config.w32.h:
- Clear that up
-
- * main/main.c:
- Cleanup
-
- * main/config.w32.h
- main/main.c:
- Fix report_memleaks
-
-2004-02-10 Ilia Alshanetsky <ilia@prohost.org>
-
- * (PHP_4_3)
- sapi/cgi/cgi_main.c:
- MFH:
- Fixed win32 build.
- Added missing headers needed for wait().
- Removed duplicate signal.h header.
-
- * sapi/cgi/cgi_main.c
- sapi/cgi/libfcgi/include/fcgi_config.h:
- Fixed win32 build.
- Fixed building of libfcgi when PHP is built from another directory.
- Added missing headers needed for wait().
- Removed duplicate signal.h header.
- Removed unneeded variables.
-
-2004-02-10 Zeev Suraski <zeev@zend.com>
-
- * main/main.c:
- Whitespace
-
- * ZendEngine2/zend_execute.c:
- Fix bug #26698 (exceptions handled properly during argument passing to
- functions)
-
-2004-02-10 Ilia Alshanetsky <ilia@prohost.org>
-
- * (PHP_4_3)
- NEWS
- main/fopen_wrappers.c:
- MFH: Fixed bug #26653 (open_basedir incorrectly resolved on win32).
-
- * main/fopen_wrappers.c:
- Fixed bug #26653 (open_basedir incorrectly resolved on win32).
-
-2004-02-10 Zeev Suraski <zeev@zend.com>
-
- * ZendEngine2/zend_default_classes.c:
- Fix bug #27186
-
- * ZendEngine2/zend_execute_API.c:
- Fix bug #26869
-
-2004-02-10 Andi Gutmans <andi@zend.com>
-
- * tests/lang/bug22231.phpt
- tests/lang/bug22510.phpt:
- Fix a couple of tests
-
-2004-02-10 Zeev Suraski <zeev@zend.com>
-
- * ZendEngine2/zend_execute.c:
- Fix refcounting of ++/+= overloading (fix leak in __get()/__set()
- based classes)
-
-2004-02-10 Jan Lehnardt <jan@dasmoped.net>
-
- * ext/tokenizer/tokenizer.c:
- - fix #27197 for Greg (cellog@php.net)
-
-2004-02-10 Jani Taskinen <jani.taskinen@kolumbus.fi>
-
- * tests/lang/bug26866.phpt:
- Add test case for bug #26866
-
-2004-02-10 Andi Gutmans <andi@zend.com>
-
- * ZendEngine2/zend_compile.c:
- - Nuke more unused code
-
-2004-02-10 Zeev Suraski <zeev@zend.com>
-
- * ZendEngine2/zend_execute.c:
- Fix handling in assignment using multidimensional array syntax to string
- offset ($s = "FUBAR"; $s[0][0] = 1;)
-
-2004-02-10 Andi Gutmans <andi@zend.com>
-
- * ZendEngine2/ZEND_CHANGES:
- - We will go with PHP 4 behavior. With the new object model assigning by
- reference has lost a lot of its importance.
-
- * ZendEngine2/zend_compile.c:
- - Remove junk
-
-2004-02-10 Zeev Suraski <zeev@zend.com>
-
- * ZendEngine2/zend_execute.c:
- Fix exception handling in opcodes spanned across multiple oplines (fixes
- the crash in __set())
-
- * NEWS:
- Update NEWS
-
- * ext/simplexml/simplexml.c:
- Implement get callback for SimpleXML (it now supports pre/post increment
- as well as binary-assign-ops)
-
- * ZendEngine2/zend_execute.c:
- - Fix pre/post increment for overloaded objects
- - Fix binary-assign-op for overloaded objects
-
- NOTE: This requires the implementation of the 'get' callback!
-
-2004-02-10 Moriyoshi Koizumi <moriyoshi@at.wakwak.com>
-
- * ZendEngine2/tests/bug22836.phpt:
- - Correcting test.
-
-2004-02-10 Jani Taskinen <jani.taskinen@kolumbus.fi>
-
- * (PHP_4_3)
- NEWS:
- typos
-
-2004-02-10 Ilia Alshanetsky <ilia@prohost.org>
-
- * (PHP_4_3)
- NEWS
- sapi/cgi/cgi_main.c:
- MFH: Fixed bug #26758 (FastCGI exits immediately with status 255).
-
- * sapi/cgi/cgi_main.c:
- Fixed bug #26758 (FastCGI exits immediately with status 255).
-
- * (PHP_4_3)
- NEWS
- php.ini-dist
- php.ini-recommended
- sapi/cgi/cgi_main.c:
- MFH: Fixed bug #27026 (Added cgi.nph that allows forcing of the Status: 200
- header that is not normally needed).
-
- * php.ini-dist
- php.ini-recommended
- sapi/cgi/cgi_main.c:
- Fixed bug #27026 (Added cgi.nph that allows forcing of the Status: 200
- header that is not normally needed).
-
-2004-02-09 Ilia Alshanetsky <ilia@prohost.org>
-
- * (PHP_4_3)
- NEWS
- sapi/apache2filter/sapi_apache2.c
- sapi/apache2handler/sapi_apache2.c:
- MFH: Fixed bug #27196 (Missing content_length initialization in apache 2
- sapis).
-
- * sapi/apache2filter/sapi_apache2.c
- sapi/apache2handler/sapi_apache2.c:
- Fixed bug #27196 (Missing content_length initialization in apache 2 sapis).
-
-2004-02-09 Frank M. Kromann <frank@kromann.info>
-
- * ext/fbsql/php_fbsql.c
- ext/fbsql/php_fbsql.c:
- Delay creation of exec handle til it's needed
-
-2004-02-09 Ilia Alshanetsky <ilia@prohost.org>
-
- * (PHP_4_3)
- NEWS
- ext/gmp/gmp.c:
- MFH: Fixed bug #27172 (Possible floating point exception in gmp_powm()).
-
- * ext/gmp/gmp.c:
- Fixed bug #27172 (Possible floating point exception in gmp_powm()).
-
- * (PHP_4_3)
- NEWS:
- Bug fixing news.
-
- * (PHP_4_3)
- main/main.c:
- MFH: Fixed bug #27175 (tzset() is not being called by PHP on startup).
-
- * main/main.c:
- Fixed bug #27175 (tzset() is not being called by PHP on startup).
-
-2004-02-08 Andi Gutmans <andi@zend.com>
-
- * README.PHP4-TO-PHP5-THIN-CHANGES
- README.Zeus
- README.input_filter
- makerpm:
- - Change from PHP5 -> PHP 5
-
-2004-02-08 Zeev Suraski <zeev@zend.com>
-
- * ext/com_dotnet/com_handlers.c
- ext/simplexml/simplexml.c:
- Update to new API
-
- * ZendEngine2/zend_execute.c
- ZendEngine2/zend_object_handlers.c
- ZendEngine2/zend_object_handlers.h:
- Fix write-mode of overloaded objects when using array dimensions
-
-2004-02-08 Andi Gutmans <andi@zend.com>
-
- * ZendEngine2/zend_objects_API.c:
- - Check if free_storage exists
-
-2004-02-07 Jani Taskinen <jani.taskinen@kolumbus.fi>
-
- * ext/gmp/gmp.c:
- Fixed bug #27171
-
-2004-02-07 Georg Richter <phpinfo@t-online.de>
-
- * ext/mysqli/mysqli.c:
- fixed cast warning
-
-2004-02-07 Stig Bakken <ssb@trd.overture.com>
-
- * pear/CMD.php:
- - obsolete
-
-2004-02-07 Greg Beaver <greg@chiaraquartet.net>
-
- * pear/PEAR.php:
- fix PATH_SEPARATOR issues - was defined in PHP 4.3.0, but documentation
- never showed this.
-
-2004-02-06 Ard Biesheuvel <a.k.biesheuvel@ewi.tudelft.nl>
-
- * ext/interbase/config.w32
- ext/interbase/interbase.c:
- Fix build with Win32 Interbase 5.x
-
-2004-02-06 Ilia Alshanetsky <ilia@prohost.org>
-
- * (PHP_4_3)
- sapi/cli/php_cli.c:
- MFH: Fixed possible memory leak with INI values.
-
- * sapi/cli/php_cli.c:
- Fixed possible memory leak with INI values.
-
- * (PHP_4_3)
- Zend/zend_execute.c:
- MFH: Fixed bug #24773 (unseting of strings as arrays causes a crash).
-
-2004-02-05 Andrey Hristov <andrey@webgate.bg>
-
- * NEWS:
- typo
-
-2004-02-05 Sebastian Bergmann <sb@sebastian-bergmann.de>
-
- * ZendEngine2/ZEND_CHANGES:
- Committing for Jan.
-
-2004-02-05 Stanislav Malyshev <stas@zend.com>
-
- * ext/standard/var.c:
- fix serialization
-
- * ext/session/tests/019.phpt:
- fix test - remove warning
-
-2004-02-05 Antony Dovgal <tony2001@phpclub.net>
-
- * ext/oci8/oci8.c:
- fix bug #27149
- (offset should start with 1)
-
-2004-02-05 Ilia Alshanetsky <ilia@prohost.org>
-
- * NEWS:
- Bug fixing news.
-
- * ZendEngine2/zend_compile.c
- ZendEngine2/tests/bug27145.phpt:
- Fixed bug #27145 (Unmangle private/protected property names before printing
- then inside error messages).
-
-2004-02-04 Zeev Suraski <zeev@zend.com>
-
- * ZendEngine2/zend_execute_API.c:
- Fix exceptions happening inside internal functions called through
- zend_user_function()
-
- * ZendEngine2/zend_execute_API.c:
- Remove double initialization
-
-2004-02-04 Ilia Alshanetsky <ilia@prohost.org>
-
- * (PHP_4_3)
- sapi/cli/php_cli.c:
- MFH: Parse command line ini directives passed using -d before -i, to ensure
- correct settings output.
-
- * sapi/cli/php_cli.c:
- Parse command line ini directives passed using -d before -i, to ensure
- correct settings output.
-
-2004-02-04 Wez Furlong <wez.php@thebrainroom.net>
-
- * main/streams/streams.c
- main/streams/transports.c
- main/streams/xp_socket.c:
- Fix a bug in the persistent socket liveness checks and feof(); they were
- using the default socket timeout of 60 seconds before returning the socket
- to the calling script. The reason they were using that value is that the
- same code is used for feof(), so the fix is allowing the caller to
- indicate the timeout value for liveness checks.
-
- A possible remaining issue now is that 0 second timeout[1] for pfsockopen
- is possibly too short; it's impossible to specify a sane value for all
- possible uses, so maybe we need a stream context or an .ini option to
- control this, or maybe use the timeout value that was passed to
- pfsockopen().
-
-
-2004-02-04 Marcus Boerger <marcus.boerger@post.rwth-aachen.de>
-
- * ZendEngine2/zend_objects.h:
- Add new prototype
-
- * ZendEngine2/zend_reflection_api.c:
- Fix reflection
-
- * tests/classes/this.phpt:
- Add test
-
- * tests/lang/030.phpt:
- The &new is no longer needed, prevent E_STRICT message
-
-2004-02-04 Andi Gutmans <andi@zend.com>
-
- * NEWS:
- - Added recent stuff to NEWS
-
-2004-02-04 Marcus Boerger <marcus.boerger@post.rwth-aachen.de>
-
- * ext/xsl/php_xsl.c:
- Fix Warning
-
- * ZendEngine2/zend_iterators.c:
- Fix warnings
-
-2004-02-04 Zeev Suraski <zeev@zend.com>
-
- * ZendEngine2/zend_compile.c:
- Fixlet
-
- * ZendEngine2/zend_compile.c:
- Fix handling of $this in some cases
-
- * tests/lang/bug24573.phpt:
- Update test (reason: can no longer assign to $this)
-
- * tests/classes/final_redeclare.phpt:
- Update test (reason: early binding changes its behavior)
-
- * tests/classes/class_final.phpt:
- Update test (reason: early binding changes its behavior)
-
- * ZendEngine2/zend_compile.c:
- Handle additional cases
-
- * ZendEngine2/zend_compile.c
- ZendEngine2/zend_compile.h
- ZendEngine2/zend_execute.c
- ZendEngine2/zend_execute.h
- ZendEngine2/zend_execute_API.c
- ZendEngine2/zend_language_parser.y:
- Reinstate early-binding for classes.
-
- Note that this is available for downwards compatibility only - and it
- doesn't
- work if you use new features (namely, interfaces). Generally, people
- should
- declare their classes before using them, but we just didn't want hell to
- break
- loose (c)
-
- * ZendEngine2/zend_opcode.c:
- Optimize
-
- * ZendEngine2/zend_compile.c:
- - Improve $this assignment detection and generalize some code in
- zend_compile.c
-
-2004-02-04 Ilia Alshanetsky <ilia@prohost.org>
-
- * ext/dom/php_dom.c:
- Fixed compile warnings.
-
-2004-02-04 Zeev Suraski <zeev@zend.com>
-
- * ZendEngine2/zend_compile.c:
- -Error out when trying to re-assign $this
-
- * ext/sqlite/sqlite.c:
- kill warning
-
- * ZendEngine2/zend_objects_API.c
- ZendEngine2/zend_objects_API.h:
- The valid bit was necessary after all - restored
-
- * ZendEngine2/zend_objects_API.c:
- Fixlets
-
- * ZendEngine2/zend_compile.c
- ZendEngine2/zend_objects.c:
- - Small fixes
-
- * ZendEngine2/zend_execute.c:
- - Improve wording
-
- * ext/com_dotnet/com_handlers.c
- ext/com_dotnet/com_misc.c
- ext/com_dotnet/com_saproxy.c
- ext/com_dotnet/php_com_dotnet_internal.h
- ext/dom/php_dom.c
- ext/mono/php_mono.c
- ext/mysqli/mysqli.c
- ext/simplexml/simplexml.c
- ext/sqlite/sqlite.c
- ext/xsl/php_xsl.c
- ext/xsl/php_xsl.h:
- - Update with new destructor code
-
- * ZendEngine2/zend_execute_API.c
- ZendEngine2/zend_iterators.c
- ZendEngine2/zend_objects.c
- ZendEngine2/zend_objects_API.c
- ZendEngine2/zend_objects_API.h
- ZendEngine2/zend_reflection_api.c:
- Change destructor implementation (details will follow on internals@)
-
-2004-02-03 Greg Beaver <greg@chiaraquartet.net>
-
- * pear/scripts/pear.bat:
- re-adding as binary - file is unmodified
-
- * pear/scripts/pear.bat:
- remove in order to re-add as binary
-
-2004-02-03 Marcus Boerger <marcus.boerger@post.rwth-aachen.de>
-
- * ZendEngine2/tests/bug24884.phpt
- ext/simplexml/tests/002.phpt
- ext/simplexml/tests/006.phpt
- ext/simplexml/tests/019.phpt
- tests/classes/__clone_001.phpt
- tests/classes/clone_001.phpt
- tests/classes/clone_002.phpt
- tests/classes/clone_003.phpt
- tests/classes/clone_004.phpt
- tests/classes/clone_006.phpt
- tests/classes/factory_and_singleton_007.phpt
- tests/classes/factory_and_singleton_008.phpt:
- Update tests
-
- * tests/lang/bug26900.phpt:
- No longer needed
-
- * ZendEngine2/zend_objects.c:
- Nuke unused variable
-
- * ZendEngine2/zend_compile.c:
- Fix Warning
-
-2004-02-03 Sebastian Bergmann <sb@sebastian-bergmann.de>
-
- * ZendEngine2/ZEND_CHANGES:
- clone/__clone() related changes.
-
-2004-02-03 Zeev Suraski <zeev@zend.com>
-
- * ZendEngine2/zend_compile.c:
- Remove unused variable
-
-2004-02-03 Jani Taskinen <jani.taskinen@kolumbus.fi>
-
- * ext/standard/var_unserializer.c:
- touch
-
-2004-02-03 Zeev Suraski <zeev@zend.com>
-
- * ZendEngine2/zend_objects_API.c
- ZendEngine2/zend_objects_API.h:
- Remove more garbage - valid bit was not really necessary
-
- * ZendEngine2/zend_execute_API.c
- ZendEngine2/zend_object_handlers.c
- ZendEngine2/zend_object_handlers.h
- ZendEngine2/zend_objects_API.c
- ZendEngine2/zend_objects_API.h:
- - Clean garbage (delete was nuked a long time ago)
-
-2004-02-03 Ilia Alshanetsky <ilia@prohost.org>
-
- * (PHP_4_3)
- configure.in
- main/php_version.h:
- Go with RC2
-
- * (PHP_4_3)
- NEWS:
- RC2 news bit.
-
- * ZendEngine2/zend_execute.c:
- More unneeded code removed.
-
-2004-02-03 Zeev Suraski <zeev@zend.com>
-
- * ZendEngine2/zend_execute.c
- ZendEngine2/zend_language_scanner.l:
- Abort on parse error in an include file (patch by Ilia)
-
-2004-02-03 Ilia Alshanetsky <ilia@prohost.org>
-
- * (PHP_4_3)
- Zend/zend_execute.c
- Zend/zend_language_scanner.l:
- Revert the old patch for handling of parse errors inside include/require.
- Add a new, much simpler patch to address the situation.
-
-2004-02-03 Zeev Suraski <zeev@zend.com>
-
- * ZendEngine2/zend_compile.c:
- Remove redundant code
-
-2004-02-03 Antony Dovgal <tony2001@phpclub.net>
-
- * (PHP_4_3)
- ext/oci8/config.m4
- ext/oci8/oci8.c:
- MFH (making oci8 able to compile with Oracle 10)
-
- * ext/oci8/config.m4
- ext/oci8/oci8.c:
- -remove obsolete types
- -changes in config.m4 to make oci8 to compile with Oracle 10g
- (thanks to cjbj at hotmail dot com for reporting both problems)
-
-2004-02-03 Stanislav Malyshev <stas@zend.com>
-
- * ext/standard/var.c
- ext/standard/var_unserializer.c
- ext/standard/var_unserializer.re:
- fix bug #27120 and bug #25975 - preserve is_ref when bound
- objects are serialized
-
-2004-02-03 Zeev Suraski <zeev@zend.com>
-
- * ZendEngine2/zend_execute.c:
- Fix try/catch block logic
-
- * ZendEngine2/zend_compile.c
- ZendEngine2/zend_objects.c:
- Perform a bitwise copy of the object even when __clone() is defined.
- __clone() is back to not requiring any arguments, as $that is no longer
- needed ($this already contains a copy of the original object, by the time
- we __clone() is executed).
- Calling the parent clone is done using parent::__clone()
-
- * ZendEngine2/zend_compile.c
- ZendEngine2/zend_compile.h
- ZendEngine2/zend_default_classes.c
- ZendEngine2/zend_execute.c
- ZendEngine2/zend_execute.h
- ZendEngine2/zend_execute_API.c
- ZendEngine2/zend_globals.h
- ZendEngine2/zend_language_parser.y
- ZendEngine2/zend_language_scanner.l
- ZendEngine2/zend_opcode.c:
- Rewrote exception support. Fixes a few limitations and bugs in the old
- implementation, and allows exceptions to 'fire' much earlier than before.
-
- Instructions on how to use the new mechanism will follow on internals@
- shortly...
-
- Note - this (most probably) breaks the current implementation of
- set_exception_handler()
-
-2004-02-03 Stig Bakken <ssb@trd.overture.com>
-
- * ext/sqlite/config.m4:
- SQLITE_ENCODING should be UTF8 rather than UTF-8
-
-2004-02-03 Martin Kraemer <Martin.Kraemer@fujitsu-siemens.com>
-
- * build/build.mk:
- Prevent cvsclean from being removed on interrupts
-
-2004-02-03 Jani Taskinen <jani.taskinen@kolumbus.fi>
-
- * NEWS:
- order
-
-2004-02-03 Vlad Krupin <phpdevel@echospace.com>
-
- * ext/pspell/pspell.c:
- This should allow us to read dictionary locations from the win32 registry
- when we use a custom config.
- Not doing so when I added win32 support was an oversight.
- Now all pspell_new_* functions should be usable on win32.
-
-2004-02-03 Ilia Alshanetsky <ilia@prohost.org>
-
- * ext/snmp/snmp.c:
- Fixed possible overflow.
-
-2004-02-02 Andrey Hristov <php@hristov.com>
-
- * ext/skeleton/php_skeleton.h
- ext/skeleton/php_skeleton.h:
- typo fix
-
-2004-02-02 Ard Biesheuvel <a.k.biesheuvel@ewi.tudelft.nl>
-
- * NEWS:
- Interbase news
-
- * ext/interbase/ibase_service.c
- ext/interbase/interbase.c:
- Use correct flag for repair options
-
- * ext/interbase/ibase_service.c:
- Fix Win32 build
-
- * ext/interbase/ibase_service.c
- ext/interbase/interbase.c
- ext/interbase/php_interbase.h:
- Use php_ prefix for header files
- Added nearly complete implementation of service API
-
- * ext/interbase/ibase_blobs.c
- ext/interbase/ibase_events.c
- ext/interbase/interbase.h
- ext/interbase/php_ibase_includes.h:
- Use php_ prefix for header files.
-
-2004-02-02 Zeev Suraski <zeev@zend.com>
-
- * ZendEngine2/zend_compile.c
- ZendEngine2/zend_compile.h
- ZendEngine2/zend_language_parser.y
- ZendEngine2/zend_language_scanner.l
- ZendEngine2/zend_objects.c:
- Redesign the clone() feature to fix some fundamental flaws in the previous
- implementation.
-
- Using clone directly is now done using
- $replica = clone $src;
-
- Clone methods must now be declared as follows:
- function __clone($that)
- {
- }
-
- Clone methods in derived classes can call the __clone method of their
- parent
- classes using parent::__clone($that)
-
-2004-02-02 Antony Dovgal <tony2001@phpclub.net>
-
- * ext/oci8/oci8.c:
- add missing alias for ocifreecursor()
-
-2004-02-02 Jani Taskinen <jani.taskinen@kolumbus.fi>
-
- * ext/simplexml/simplexml.c:
- CS fix (functions should not be available if they are not available :)
-
-2004-02-02 Antony Dovgal <tony2001@phpclub.net>
-
- * ext/oci8/oci8.c:
- fix yet another possible segfault
-
-2004-02-02 Ilia Alshanetsky <ilia@prohost.org>
-
- * ext/calendar/calendar.c:
- Fixed possible overflows.
-
-2004-02-01 Moriyoshi Koizumi <moriyoshi@at.wakwak.com>
-
- * (PHP_4_3)
- ext/pcre/php_pcre.c:
- MFH(r-1.153): POSIX / ISO compliancy.
-
-2004-02-01 Ard Biesheuvel <a.k.biesheuvel@ewi.tudelft.nl>
-
- * ext/interbase/ibase_blobs.c:
- No explicit inline (fixes Win32 linkage issue)
-
- * ext/interbase/interbase.h:
- Whoops line endings
-
- * ext/interbase/ibase_blobs.c
- ext/interbase/ibase_events.c
- ext/interbase/ibase_service.c
- ext/interbase/interbase.c
- ext/interbase/interbase.h
- ext/interbase/php_interbase.h:
- Remove extension internals from php_interbase.h
-
- * ext/interbase/config.m4
- ext/interbase/config.w32:
- Test for Interbase version 6 API in 'configure'
-
- * ext/interbase/config.m4
- ext/interbase/config.w32
- ext/interbase/ibase_blobs.c
- ext/interbase/ibase_events.c
- ext/interbase/ibase_service.c
- ext/interbase/interbase.c
- ext/interbase/php_interbase.h:
- Added backup/restore functions
- Split interbase.c into several files
-
-2004-02-01 Sebastian Bergmann <sb@sebastian-bergmann.de>
-
- * ext/pcre/php_pcre.c:
- ZTS fix.
-
-2004-02-01 Moriyoshi Koizumi <moriyoshi@at.wakwak.com>
-
- * ext/pcre/tests/bug27103.phpt:
- - Forgot to add test case.
-
- * ext/pcre/php_pcre.h:
- - Binary compatibility stuff, for safety.
-
-2004-01-31 Greg Beaver <greg@chiaraquartet.net>
-
- * pear/PEAR/Command/Package.php:
- make pear run-tests work with PEAR core tests, allow it to work for Windows
- users as well
-
-2004-01-31 Moriyoshi Koizumi <moriyoshi@at.wakwak.com>
-
- * NEWS
- ext/pcre/php_pcre.c
- ext/pcre/php_pcre.h:
- - Fix bug #27103 (preg_split('//u') incorrectly splits UTF-8 strings into
- octets).
-
- * ext/pcre/php_pcre.c:
- - POSIX / ISOX compliancy. This is needed to correctly handle UTF-8
- characters.
-
-2004-01-31 Marcus Boerger <marcus.boerger@post.rwth-aachen.de>
-
- * ZendEngine2/zend_reflection_api.c:
- Throw an exception in case a reflection object cannot be found and do not
- override the exception from constructors in static method calls.
-
-2004-01-31 Georg Richter <phpinfo@t-online.de>
-
- * ext/mysqli/mysqli_api.c:
- Corrected binding:
- if column has type DECIMAL it will converted to string now.
- Thanks to Brian Aker for pointing this out.
-
-2004-01-30 Georg Richter <phpinfo@t-online.de>
-
- * ext/mysqli/mysqli_prop.c:
- added nuw_rows property for statement object
-
-2004-01-30 Wez Furlong <wez.php@thebrainroom.net>
-
- * CODING_STANDARDS:
- word fix
-
-2004-01-30 Jani Taskinen <jani.taskinen@kolumbus.fi>
-
- * NEWS:
- order
-
-2004-01-30 Marcus Boerger <marcus.boerger@post.rwth-aachen.de>
-
- * CODING_STANDARDS:
- Include Sascha's indendation hint
-
- * CODING_STANDARDS:
- Newer compilers don't need this so many people don't know. Hence we make
- it a coding standard.
-
-2004-01-30 Ilia Alshanetsky <ilia@prohost.org>
-
- * (PHP_4_3)
- Zend/zend_execute.c:
- MFH: Apply the same parse error handling to (include|require)_once as the
- one for their non-once counterparts.
-
- * ZendEngine2/zend_execute.c:
- Apply the same parse error handling to (include|require)_once as the one
- for
- their non-once counterparts.
-
-2004-01-30 Sara Golemon <php@alphaweb.net>
-
- * NEWS
- ext/standard/http_fopen_wrapper.c:
- Fix potential bug in http:// proxy support.
- Some proxy servers require entire URI be sent in request string.
-
- Add context option "http"/"request_fulluri" to allow this behavior.
-
-2004-01-29 Ilia Alshanetsky <ilia@prohost.org>
-
- * ext/sqlite/config.m4:
- Proper configure switch for sqlite.
-
- * (PHP_4_3)
- sapi/apache2filter/sapi_apache2.c
- sapi/apache2handler/sapi_apache2.c:
- MFH: Apache 2 portion of the fix for bug #25753.
-
- * sapi/apache2filter/sapi_apache2.c
- sapi/apache2handler/sapi_apache2.c:
- Apache 2 portion of the fix for bug #25753.
-
- * (PHP_4_3)
- ext/standard/file.c
- ext/standard/tests/file/fgetcsv.phpt:
- Fix for a possible crash in fgetcsv(). (Patch by Moriyoshi Koizumi)
-
-2004-01-29 Jani Taskinen <jani.taskinen@kolumbus.fi>
-
- * (PHP_4_3)
- NEWS:
- typofix
-
-2004-01-29 Ilia Alshanetsky <ilia@prohost.org>
-
- * (PHP_4_3)
- NEWS
- ext/pgsql/pgsql.c:
- MFH: Fixed bug #27007 (missing connection closure when connect fails in
- pgsql)
-
- * ext/pgsql/pgsql.c:
- Fixed bug #27007 (missing connection closure when connect fails in pgsql).
-
- * (PHP_4_3)
- NEWS
- sapi/apache2handler/sapi_apache2.c:
- MFH: Fixed bug #27037 (fixed possible crash in apache2handler output code).
-
- * sapi/apache2handler/sapi_apache2.c:
- Fixed bug #27037 (fixed possible crash in apache2handler output code).
-
-2004-01-29 Rob Richards <rrichards@ctindustries.net>
-
- * ext/xsl/xsltprocessor.c:
- fix corruption when cloneDocument is not defined
-
-2004-01-29 Sara Golemon <php@alphaweb.net>
-
- * (PHP_4_3)
- NEWS:
- BFN
-
- * main/main.c
- main/main.c:
- This should not have been an INI_ALL directive.
-
-2004-01-28 Georg Richter <phpinfo@t-online.de>
-
- * ext/mysqli/EXPERIMENTAL
- ext/mysqli/mysqli.c
- ext/mysqli/mysqli_api.c
- ext/mysqli/mysqli_fe.c
- ext/mysqli/mysqli_nonapi.c
- ext/mysqli/mysqli_prop.c
- ext/mysqli/mysqli_report.c
- ext/mysqli/php_mysqli.h:
- removed experimental status
- fixed bug in mysqli_data_seek (thx to Andrey "Effendi" Hristov)
- various prototype fixes
- moved some methods to properties which are part of mysql struct
- added function mysqli_get_server_version
-
-2004-01-28 Sara Golemon <php@alphaweb.net>
-
- * ext/standard/ftp_fopen_wrapper.c:
- FTP dirstream_read should not leave whitespace/newlines on dirents
-
-2004-01-28 Zeev Suraski <zeev@zend.com>
-
- * ZendEngine2/zend_compile.c:
- Tweak checks to detect some additional cases.
- Reorder checks to make more sense.
-
-2004-01-28 Sara Golemon <php@alphaweb.net>
-
- * ext/standard/dir.c
- main/php_streams.h
- main/streams/streams.c:
- 'Bug Fix': scandir, being a new function in PHP5 should have always been
- wrapper aware.
-
-2004-01-28 Ilia Alshanetsky <ilia@prohost.org>
-
- * (PHP_4_3)
- NEWS
- ext/pcre/php_pcre.c:
- MFH: Fixed bug #27011 (64bit int/long confusion in preg_match*() functions)
-
- * ext/pcre/php_pcre.c:
- Fixed bug #27011 (64bit int/long confusion in preg_match*() functions).
-
-2004-01-28 Andrey Hristov <php@hristov.com>
-
- * ext/standard/array.c:
- this should not belong to HEAD
-
-2004-01-28 Jani Taskinen <jani.taskinen@kolumbus.fi>
-
- * (PHP_4_3)
- NEWS:
- BFN
-
-2004-01-28 Rasmus Lerdorf <rasmus@lerdorf.com>
-
- * sapi/apache_hooks/mod_php5.c:
- Fix applies to apache_hooks sapi as well. See bug #25753 for details.
-
- * sapi/apache/mod_php5.c:
- MFB - see bug #25753 for details
-
- * (PHP_4_3)
- sapi/apache/mod_php4.c:
- If we have a text/html file with the executable bit set, we load up the
- current ini, but if php's xbithack option is not set we forgot to restore
- the previous ini settings potentially leaking ini settings from one
- request
- to the next. Closes bug #25753 and a few others.
-
-2004-01-28 Martin Kraemer <Martin.Kraemer@fujitsu-siemens.com>
-
- * ext/gd/gd_ctx.c
- ext/gd/gd_ctx.c:
- Bug fix: Images would be broken on big-endian machines because the putc
- function wrote the first (instead of "the low order") byte. That resulted
- in unexpected zero bytes.
-
-2004-01-28 Zeev Suraski <zeev@zend.com>
-
- * ZendEngine2/zend_compile.c:
- - Error message fix
- - Prevent inheritance of the same constant from two interfaces
-
- * ZendEngine2/zend_compile.c:
- Fixlets
-
- * ZendEngine2/zend_compile.c
- ZendEngine2/zend_compile.h:
- Prevent classes from implementing interfaces that have the same function
-
- * ZendEngine2/zend_execute.c:
- Whitespace
-
- * ZendEngine2/zend_compile.c:
- Code relayout
-
- * ZendEngine2/zend_execute_API.c:
- Forward-port fix for timeouts under Windows
-
-2004-01-28 Antony Dovgal <tony2001@phpclub.net>
-
- * ext/oci8/oci8.c:
- two fixes:
- -oci_lob_load shouldn't reset LOB's length to zero
- -Oracle feels bad, but reports no error, when trying to erase LOB with
- offset bigger than LOB
-
-2004-01-28 Ilia Alshanetsky <ilia@prohost.org>
-
- * (PHP_4_3)
- NEWS:
- Bug fixing news.
-
- * (PHP_4_3)
- ext/sybase/php_sybase_db.c:
- MFH: Fixed bug #27058 (crash in sybase_connect() with 2 arguments).
-
- * ext/sybase/php_sybase_db.c:
- Fixed bug #27058 (crash in sybase_connect() with 2 arguments).
-
- * (PHP_4_3)
- NEWS
- ext/gd/gd.c:
- MFH: Fixed bug #27056 (ints used instead of longs inside some GD functions)
-
- * ext/gd/gd.c:
- Fixed bug #27056 (ints used instead of longs inside some GD functions).
-
-2004-01-27 Andrey Hristov <php@hristov.com>
-
- * ext/mysql/php_mysql.c:
- message about that mysql_list_tables() is deprecated
-
-2004-01-27 Wez Furlong <wez.php@thebrainroom.net>
-
- * main/streams/transports.c:
- Fix segfault for scripts like this:
- <?php
- pfsockopen("foo");
- pfsockopen("foo");
- ?>
- Where the transport fails to connect (since args are bogus);
- the problem was that the persistent stream entry was not
- correctly freed.
-
-2004-01-27 Georg Richter <phpinfo@t-online.de>
-
- * ext/mysqli/mysqli_api.c:
- changed prototype mysql_dataseek from void to bool
- add check for specified offset
-
- * ext/mysqli/mysqli_api.c
- ext/mysqli/mysqli_fe.c:
- prototype fixes
- removed method field_tell (which is already property current_field)
-
-2004-01-27 Ilia Alshanetsky <ilia@prohost.org>
-
- * main/streams/userspace.c:
- Removed unused variable.
-
-2004-01-27 Marcus Boerger <marcus.boerger@post.rwth-aachen.de>
-
- * (PHP_4_3)
- makerpm:
- still version 4 here
-
- * (PHP_4_3)
- makerpm:
- Use RPM variables
-
-2004-01-26 Marcus Boerger <marcus.boerger@post.rwth-aachen.de>
-
- * ZendEngine2/zend_interfaces.c
- ZendEngine2/zend_interfaces.h:
- - Export struct zend_user_iterator
- - Ad 'it' to function prefix to prevent naming clashes
- - Export zend_user_it_free_current
-
- * NEWS:
- Fixed bug #27042 (SPL: SeekableIterator seek() broken).
-
-2004-01-26 Georg Richter <phpinfo@t-online.de>
-
- * ext/mysqli/mysqli_api.c:
- fixed compiler warning (thx to Marcus Boerger)
-
-2004-01-26 Antony Dovgal <tony2001@phpclub.net>
-
- * ext/oci8/oci8.c:
- change to use different allocator (Sascha, thanks =) )
-
- * ext/oci8/oci8.c:
- fix this annoying notice about limited range
-
- * ext/oci8/oci8.c:
- improve debug messages
-
- * ext/oci8/oci8.c:
- oops =(
- forgot these brackets..
-
- * ext/oci8/oci8.c:
- fix oci_field_type_raw's proto
- oci_collection_element_get should return FALSE only if there is no such
- element and NULL, if it's null
-
-2004-01-26 Adam Dickmeiss <adam@indexdata.dk>
-
- * ext/yaz/config.m4
- ext/yaz/php_yaz.c
- ext/yaz/php_yaz.h:
- New function yaz_es that creates Z39.50 Extended Service Package to
- facilitate record update, database create, database drop.
-
-2004-01-26 Georg Richter <phpinfo@t-online.de>
-
- * ext/mysqli/mysqli_api.c
- ext/mysqli/mysqli_fe.c:
- proto fixes
- removed mysqli_read_query_result (will be removed in libmysql)
-
-2004-01-26 Sebastian Bergmann <sb@sebastian-bergmann.de>
-
- * CODING_STANDARDS:
- Update URL.
-
-2004-01-26 Marcus Boerger <marcus.boerger@post.rwth-aachen.de>
-
- * ext/dba/README:
-
- Add README
-
-2004-01-26 Georg Richter <phpinfo@t-online.de>
-
- * ext/mysqli/mysqli_api.c
- ext/mysqli/mysqli_nonapi.c:
- more prototype fixes.
- fixed a bug in mysqli_send_long_data
-
-2004-01-26 Jani Taskinen <jani.taskinen@kolumbus.fi>
-
- * ext/curl/interface.c:
- - Fixed compile problem with CURLOPT_HTTPAUTH
-
- * tests/lang/bug26900.phpt:
- test for bug #26900
-
- * php.ini-dist
- php.ini-recommended
- main/main.c
- main/php_globals.h
- main/php_variables.c:
- - Remove gpc_order since it doesn't serve any purpose.
-
-2004-01-26 Pierre-Alain Joye <paj@pearfr.org>
-
- * (RELEASE_1_3b6)
- pear/scripts/pearcmd.php:
- - "Fix" the command name in the usage text
-
- * (RELEASE_1_3b6)
- pear/package-PEAR.xml:
- - # 521 entry
-
- * (RELEASE_1_3b6)
- pear/PEAR/Common.php:
- - Remove useless property
-
- * pear/PEAR/Common.php:
- - Fix #521, incorrect filename in CS warnings
-
-2004-01-26 Moriyoshi Koizumi <moriyoshi@at.wakwak.com>
-
- * (PHP_4_3)
- NEWS:
- BFN
-
-2004-01-26 Jani Taskinen <jani.taskinen@kolumbus.fi>
-
- * (PHP_4_3)
- NEWS
- ext/curl/curl.c:
- MFH: - Fixed bug #27040 (passing an array of form-fields to
- CURLOPT_POSTFIELDS does not work).
-
- * ext/curl/interface.c:
- - Fixed bug #27040 (passing an array of form-fields to CURLOPT_POSTFIELDS
- does not work).
-
-2004-01-26 Ilia Alshanetsky <ilia@prohost.org>
-
- * (PHP_4_3)
- NEWS:
- A better bug description, for people without the official Ilia decoder
- ring.
-
-2004-01-25 Ilia Alshanetsky <ilia@prohost.org>
-
- * (PHP_4_3)
- NEWS:
- bug fixing news.
-
- * (PHP_4_3)
- Zend/zend_execute.c:
- MFH: Fixed bug #26814 (On parse error include included file, terminate
- execution script).
-
- * ZendEngine2/zend_execute.c:
- Fixed bug #26814 (On parse error include included file, terminate
- execution script).
-
-2004-01-25 Pierre-Alain Joye <paj@pearfr.org>
-
- * pear/PEAR.php:
- - Use is_a
-
- * pear/package.dtd:
- WS
-
- * (PHP_4_3)
- pear/package.dtd:
- - 2004 (c)
-
- * (PHP_4_3)
- pear/CMD.php
- pear/PEAR.php
- pear/System.php
- pear/PEAR/Autoloader.php
- pear/PEAR/Builder.php
- pear/PEAR/Command.php
- pear/PEAR/Config.php
- pear/PEAR/Dependency.php
- pear/PEAR/Downloader.php
- pear/PEAR/Installer.php
- pear/PEAR/Packager.php
- pear/PEAR/Registry.php
- pear/PEAR/Command/Auth.php
- pear/PEAR/Command/Build.php
- pear/PEAR/Command/Common.php
- pear/PEAR/Command/Config.php
- pear/PEAR/Command/Install.php
- pear/PEAR/Command/Mirror.php
- pear/PEAR/Command/Package.php
- pear/PEAR/Command/Remote.php
- pear/PEAR/Frontend/CLI.php
- pear/scripts/pear.bat
- pear/scripts/pearcmd.php
- pear/scripts/pearwin.php:
- - year++;
-
- * pear/packages/DB-1.6.0RC1.tar
- pear/packages/HTTP-1.2.2.tar
- pear/packages/Mail-1.1.2.tar:
- - Update Mail, HTTP and DB. Adding new archives
-
- * pear/packages/DB-1.5.0RC1.tar
- pear/packages/HTTP-1.2.1.tar
- pear/packages/Mail-1.1.0.tar:
- - Update HTTP, DB and Mail packages
-
- * pear/packages/Mail-1.1.2.tar
- pear/packages/Mail-1.1.2.tar:
-
- file Mail-1.1.2.tar was initially added on branch PHP_4_3.
-
- * pear/packages/DB-1.6.0RC1.tar
- pear/packages/DB-1.6.0RC1.tar
- pear/packages/HTTP-1.2.2.tar
- pear/packages/HTTP-1.2.2.tar:
-
- file DB-1.6.0RC1.tar was initially added on branch PHP_4_3.
-
- * (PHP_4_3)
- pear/packages/DB-1.5.0RC2.tar
- pear/packages/HTTP-1.2.1.tar
- pear/packages/Mail-1.1.1.tar:
- - Prepare 4.3.5, remove old archives
-
-2004-01-25 Ilia Alshanetsky <ilia@prohost.org>
-
- * (PHP_4_3)
- NEWS:
- sybase_ct extension fixes and improvements by Timm Friebe.
-
-2004-01-25 Timm Friebe <thekid@thekid.de>
-
- * ext/sybase_ct/php_sybase_ct.c
- ext/sybase_ct/php_sybase_ct.h:
-
-
-2004-01-25 Ard Biesheuvel <a.k.biesheuvel@ewi.tudelft.nl>
-
- * php.ini-dist
- php.ini-recommended:
- MySQL is no longer built in by default
-
- * ext/standard/url.c:
- CS
-
-2004-01-25 Andrey Hristov <php@hristov.com>
-
- * NEWS:
- entrt about feature request #24258
-
-2004-01-25 Marcus Boerger <marcus.boerger@post.rwth-aachen.de>
-
- * NEWS
- NEWS:
- BFN
-
- * ZendEngine2/zend_execute.c
- ZendEngine2/zend_iterators.c
- ZendEngine2/zend_iterators.h:
- Respect proeprty visibility in foreach
-
- * ZendEngine2/tests/bug26696.phpt:
- Update test
-
-2004-01-25 Ard Biesheuvel <a.k.biesheuvel@ewi.tudelft.nl>
-
- * ext/interbase/config.w32:
- Check for both Firebird 1+ and Interbase/FB1
-
-2004-01-25 Georg Richter <phpinfo@t-online.de>
-
- * ext/mysqli/mysqli_api.c:
- prototype fix for mysqli_fetch
-
-2004-01-25 Jani Taskinen <jani.taskinen@kolumbus.fi>
-
- * ext/standard/file.c:
- Fixed bug #27020 (Compile failure; sys/select.h: No such file or directory)
-
-2004-01-25 Ard Biesheuvel <a.k.biesheuvel@ewi.tudelft.nl>
-
- * ext/standard/ftp_fopen_wrapper.c
- ext/standard/url.c
- ext/standard/url.h:
- Changed prototypes to allow parsing of string literals and constant strings
- Minor CS/WS
-
-2004-01-24 Marcus Boerger <marcus.boerger@post.rwth-aachen.de>
-
- * ZendEngine2/zend_API.c
- ZendEngine2/zend_compile.c
- ZendEngine2/zend_compile.h
- ZendEngine2/zend_execute.c
- ZendEngine2/zend_execute_API.c
- tests/lang/bug23384.phpt:
- Switch from ZEND_ACC_DYNAMIC to ZEND_ACC_ALLOW_STATIC and disallow calling
- internal non-static methods statically.
-
-2004-01-24 Georg Richter <phpinfo@t-online.de>
-
- * ext/mysqli/mysqli_api.c:
- prototype fixes
-
-2004-01-24 Sebastian Bergmann <sb@sebastian-bergmann.de>
-
- * ZendEngine2/zend_execute.c
- ZendEngine2/zend_execute_API.c:
- Change message as proposed by Jon.
-
-2004-01-24 Timm Friebe <thekid@thekid.de>
-
- * ext/sybase_ct/php_sybase_ct.c:
-
-
-2004-01-24 Marcus Boerger <marcus.boerger@post.rwth-aachen.de>
-
- * README.PHP4-TO-PHP5-THIN-CHANGES:
- This is a definitive 'must'
-
-2004-01-24 Andrey Hristov <php@hristov.com>
-
- * ext/standard/array.c:
- Added third parameter (optional) to array_keys for strictness. It behaves
- like the "strict" parameter of in_array().
-
- * README.PHP4-TO-PHP5-THIN-CHANGES:
- Adding note about declaration first use after that for classes.
-
-2004-01-23 Marcus Boerger <marcus.boerger@post.rwth-aachen.de>
-
- * ZendEngine2/zend_API.c
- ZendEngine2/zend_compile.c
- ZendEngine2/zend_compile.h
- ZendEngine2/zend_execute.c
- ZendEngine2/zend_execute_API.c:
- Simplify detection of methods that must be called dynamic (with object)
-
- * ZendEngine2/zend_execute.c
- ZendEngine2/zend_execute_API.c:
- Disallow calling __clone/__construct/__destruct static
- Send an E_STRICT when calling a non static method static
-
- * ZendEngine2/zend_API.c
- ZendEngine2/zend_compile.c
- ZendEngine2/zend_compile.h:
- Disallow static declaration of clone
-
-2004-01-23 Jani Taskinen <jani.taskinen@kolumbus.fi>
-
- * ext/pcntl/pcntl.c:
- typofix (thanks to Mehdi Achour for noticing this)
-
- * ZendEngine2/zend_constants.h
- ZendEngine2/zend_ini.h
- ext/mysqli/php_mysqli.h
- ext/ncurses/php_ncurses.h
- ext/session/php_session.h:
- Silence some compile warnings
-
-2004-01-22 Rob Richards <rrichards@ctindustries.net>
-
- * ext/dom/tests/dom003.phpt:
- update test
-
-2004-01-22 Marcus Boerger <marcus.boerger@post.rwth-aachen.de>
-
- * ext/simplexml/tests/bug27010.phpt:
- Add new test
-
- * ext/simplexml/tests/007.phpt
- ext/simplexml/tests/015.phpt
- ext/simplexml/tests/016.phpt
- ext/simplexml/tests/bug24392.phpt:
- Update tests
-
-2004-01-22 Rob Richards <rrichards@ctindustries.net>
-
- * ext/simplexml/php_simplexml.h
- ext/simplexml/simplexml.c:
- Fix bug #27010: segfault after returning nodes with children()
- Fix segfault in match_ns when matching prefix and node without ns
- some general cleanup and code consilidation
- better write handling - engine support dependent
- better isset handling - engine support dependent
- namespace fixes for reading/writing
-
- * ext/dom/attr.c
- ext/dom/cdatasection.c
- ext/dom/comment.c
- ext/dom/document.c
- ext/dom/documentfragment.c
- ext/dom/element.c
- ext/dom/entityreference.c
- ext/dom/namednodemap.c
- ext/dom/nodelist.c
- ext/dom/php_dom.c
- ext/dom/php_dom.h
- ext/dom/processinginstruction.c
- ext/dom/text.c
- ext/dom/xpath.c:
- update constructors so they cant be called statically
-
-2004-01-22 Marcus Boerger <marcus.boerger@post.rwth-aachen.de>
-
- * ZendEngine2/zend_default_classes.c:
- Fix internal access to exception properties
-
-2004-01-22 Antony Dovgal <tony2001@phpclub.net>
-
- * ext/oci8/config.w32:
- add collections support to win32 build
-
- * ext/oci8/oci8.c:
- add missing protos
- and some minor changes
-
- * ext/oci8/oci8.c:
- MFB
- oci_lob_save() should be removed indeed, but we're already in feature
- freeze =(
-
-2004-01-22 Jani Taskinen <jani.taskinen@kolumbus.fi>
-
- * (PHP_4_3)
- ext/standard/fsock.c:
- Nuke unused variable
-
-2004-01-21 Jani Taskinen <jani.taskinen@kolumbus.fi>
-
- * ext/standard/tests/file/bug26938.phpt:
-
- test case for bug #26938
-
-2004-01-21 Marcus Boerger <marcus.boerger@post.rwth-aachen.de>
-
- * tests/classes/interface_doubled.phpt:
- Change to correct syntax.
-
- * CODING_STANDARDS:
- All technical reasons that prevented us from studlyCaps are solved
- and all current extensions as well as the whole PEAR framework follow
- this rule. So for consistency i readd it.
-
-2004-01-21 Ilia Alshanetsky <ilia@prohost.org>
-
- * NEWS
- ext/standard/exec.c:
- Fixed bug #26938 (exec() has problems reading long lines).
-
-2004-01-21 Antony Dovgal <tony2001@phpclub.net>
-
- * ext/oci8/oci8.c:
- -change constant name, coz it doesn't comply with others
- *add constant's alias, coz others do have aliases
- *change protos (oops =))
- *add notices to collection functions
- *change coll_element_get & coll_assign to inform user, that this type of
- element is not supported yet.
-
-2004-01-21 Rob Richards <rrichards@ctindustries.net>
-
- * ext/simplexml/simplexml.c
- ext/simplexml/tests/profile10.phpt:
- Fix namespace regression bug
- Read attributes correctly
- Update sxe_prop_dim_exists logic
- Update profile
-
-2004-01-21 Antony Dovgal <tony2001@phpclub.net>
-
- * ext/oci8/oci8.c:
- fix potential segfault in oci_lob_write()
- change oci_lob_trim() - truncate length should be 0 by default.
-
-2004-01-21 Rob Richards <rrichards@ctindustries.net>
-
- * ext/simplexml/simplexml.c
- ext/simplexml/tests/015.phpt:
- Fix Bug #26976 (Can not access array elements using array indices)
- return index 0 as non iterable object
- update test
-
-2004-01-21 Ard Biesheuvel <a.k.biesheuvel@ewi.tudelft.nl>
-
- * ext/interbase/interbase.c:
- MFB
-
-2004-01-21 Hartmut Holzgraefe <hartmut@php-groupies.de>
-
- * NEWS:
- News update on new streams method
-
- * main/streams/userspace.c:
- stream_lock() method added to userspace streams wrapper
-
-2004-01-21 Ard Biesheuvel <a.k.biesheuvel@ewi.tudelft.nl>
-
- * (PHP_4_3)
- NEWS
- ext/interbase/interbase.c:
- Fixed bug #26968 (Segfault with Interbase module built as shared)
-
-2004-01-21 Jon Parise <jon@csh.rit.edu>
-
- * ext/sqlite/Makefile.frag:
- Adding dependencies on sqlite.h for the rest of the source files in the
- libsqlite distribution.
-
-2004-01-21 Jani Taskinen <jani.taskinen@kolumbus.fi>
-
- * .cvsignore
- build/build.mk:
- Last php4 occurances..
-
-2004-01-21 Marcus Boerger <marcus.boerger@post.rwth-aachen.de>
-
- * (PHP_4_3)
- makerpm:
- Add these files to the actual package
-
- * (PHP_4_3)
- makerpm:
- Make this thing actually work again
-
-2004-01-21 Jani Taskinen <jani.taskinen@kolumbus.fi>
-
- * ext/bz2/config.m4:
- Break out the test with first hit.
-
-2004-01-21 Sara Golemon <php@alphaweb.net>
-
- * ext/standard/tests/file/userwrapper.phpt:
- Typo
-
-2004-01-21 Jani Taskinen <jani.taskinen@kolumbus.fi>
-
- * (PHP_4_3)
- NEWS
- ext/standard/formatted_print.c:
- MFH: - Fixed bug #26973 (*printf() + modifier broken)
-
- * ext/standard/formatted_print.c:
- - Fixed bug #26973 (*printf() + modifier broken)
-
- * ext/standard/tests/strings/bug26973.phpt:
- extend a bit
-
- * ext/standard/tests/strings/bug26973.phpt:
-
- test case for bug #26973
-
- * ext/simplexml/tests/bug26976.phpt:
- typo fix
-
- * ext/simplexml/tests/bug26976.phpt:
- test for bug #26976
-
-2004-01-21 Ilia Alshanetsky <ilia@prohost.org>
-
- * (PHP_4_3)
- NEWS
- ext/standard/file.c:
- MFH: Fixed bug #26974 (rename() doesn't check the destination file against
- safe_mode/open_basedir).
-
- * main/streams/plain_wrapper.c:
- Fixed bug #26974 (rename() doesn't check the destination file
- against safe_mode/open_basedir).
-
-2004-01-21 Jani Taskinen <jani.taskinen@kolumbus.fi>
-
- * ext/simplexml/simplexml.c:
- Goto targets should not be indented (some compilers choke on this, iirc)
-
-2004-01-20 Antony Dovgal <tony2001@phpclub.net>
-
- * (PHP_4_3)
- ext/oci8/oci8.c:
- fix savelob() to make it possible to write data at the beginning of LOB
-
-2004-01-20 Rob Richards <rrichards@ctindustries.net>
-
- * ext/dom/document.c
- ext/dom/dom_iterators.c
- ext/dom/xpath.c:
- Warn when empty string supplied to load methods (by Pierre-Alain)
- Fix refcount on xpath iterators
- xpath_query should return nodelist even when empty
-
-2004-01-20 Wez Furlong <wez.php@thebrainroom.net>
-
- * ext/com_dotnet/README:
- update todo part of readme
-
-2004-01-20 Marcus Boerger <marcus.boerger@post.rwth-aachen.de>
-
- * ext/dom/xpath.c:
- Fix warning (and possible problem)
-
-2004-01-20 Sterling Hughes <winnie@edwardbear.org>
-
- * ext/simplexml/simplexml.c:
- -
-
-2004-01-20 Jani Taskinen <jani.taskinen@kolumbus.fi>
-
- * (PHP_4_3)
- NEWS
- acinclude.m4:
- MFH: Fixed bug #26969 (shared openssl build fails)
-
- * acinclude.m4:
- - Fixed Bug #26969 (shared openssl build fails)
-
- * NEWS:
- BfN
-
- * tests/lang/bug26696.phpt:
- test case for bug #26696
-
-2004-01-19 Frank M. Kromann <frank@kromann.info>
-
- * ext/simplexml/simplexml.c:
- Fix compilation of simplexml when spl is build as shared object
-
-2004-01-19 Christian Stocker <chregu@phant.ch>
-
- * ext/dom/xpath.c:
- Fix leaks in dom_xpath_query (create retval only if requiered) by
- Pierre-Alain
-
- * ext/dom/document.c:
- fixes segfault, if file doesn't exist (by Pierre-Alain)
-
-2004-01-19 Marcus Boerger <marcus.boerger@post.rwth-aachen.de>
-
- * (PHP_4_3)
- makerpm:
- Correct license
-
- * (PHP_4_3)
- sapi/cgi/cgi_main.c:
- Fix a memleak
-
-2004-01-19 Jani Taskinen <jani.taskinen@kolumbus.fi>
-
- * (PHP_4_3)
- NEWS
- ext/standard/basic_functions.c:
- - Fixed bug #26381 (rand() without srand() doesn't work with certain
- php.ini)
-
- * ext/standard/basic_functions.c:
- - Make sure srand() / mt_srand() are really called.
-
-2004-01-19 Ilia Alshanetsky <ilia@prohost.org>
-
- * (PHP_4_3)
- NEWS:
- Bug fixing news.
-
- * (PHP_4_3)
- ext/standard/file.c:
- MFH: Fixed bug #26967 (make various file operations return FALSE on error).
-
- * ext/standard/file.c:
- Fixed bug #26967 (make various file operations return FALSE on error).
-
-2004-01-19 Christian Stocker <chregu@phant.ch>
-
- * NEWS:
- added missing dots..
-
- * NEWS
- ext/xsl/xsltprocessor.c:
- Cosmetics and NEWS entry
-
-2004-01-19 Moriyoshi Koizumi <moriyoshi@at.wakwak.com>
-
- * (PHP_4_3)
- ext/mbstring/tests/mb_strlen.phpt:
- - MFH(r-1.3): Turn off mbstring.func_overload as this test uses plain
- strlen()
- for comparison.
-
- * ext/mbstring/tests/mb_strlen.phpt:
- - Turn off mbstring.func_overload as this test uses plain strlen() for
- comparison.
-
-2004-01-19 Christian Stocker <chregu@phant.ch>
-
- * ext/xsl/php_xsl.c
- ext/xsl/php_xsl.h
- ext/xsl/xsl_fe.h
- ext/xsl/xsltprocessor.c:
- without that method call, it is not allowed to call php functions from
- xslt stylesheets for security reasons.
-
-2004-01-19 Martin Jansen <mail@martin-jansen.de>
-
- * pear/PEAR.php:
- - CS
-
-2004-01-19 Andi Gutmans <andi@zend.com>
-
- * ZendEngine2/zend_execute.c
- ZendEngine2/zend_execute.h:
- - Hopefully fix bug #26696.
- - Please let me know if hell-breaks loose
-
-2004-01-19 Zeev Suraski <zeev@zend.com>
-
- * (PHP_4_3)
- Zend/zend_execute_API.c:
- Backport fix for bug #21513
-
-2004-01-19 Derick Rethans <php@derickrethans.nl>
-
- * NEWS:
- - SPL lives now in ext/
-
-2004-01-19 Ilia Alshanetsky <ilia@prohost.org>
-
- * ext/standard/tests/file/fgetcsv.phpt:
-
- Added fgetcsv() tests.
-
-2004-01-19 Greg Beaver <greg@chiaraquartet.net>
-
- * pear/System.php:
- fix -m argument to mkDir(). Conversion to octal was not being made,
- and a string should never be passed into mkdir().
-
- Thanks to Alex Hayes
-
-2004-01-19 Jani Taskinen <jani.taskinen@kolumbus.fi>
-
- * (PHP_4_3)
- ext/standard/crypt.c
- ext/standard/rand.c:
- MFH: Moved php_srand() call into php_rand().
-
- * ext/standard/crypt.c
- ext/standard/rand.c:
- - Moved php_srand() call into php_rand().
-
-
- * NEWS
- NEWS:
- BFN
-
- * (PHP_4_3)
- NEWS
- ext/standard/php_rand.h:
- MFH: - Fixed bug #26949 (rand(min,max) always returns min when ZTS enabled)
-
- * ext/standard/php_rand.h:
- - Fixed bug #26949 (rand(min,max) always returns min when ZTS enabled)
-
-2004-01-19 Marcus Boerger <marcus.boerger@post.rwth-aachen.de>
-
- * ZendEngine2/zend_API.c
- ZendEngine2/zend_API.h:
- Add zend_get_module_started() to quickly check whether a module is present
- and its MINIT function has been called.
-
-2004-01-18 Marcus Boerger <marcus.boerger@post.rwth-aachen.de>
-
- * ZendEngine2/zend_execute.h
- ZendEngine2/zend_execute_API.c:
- Improove debug capabilities
-
- * ext/simplexml/php_simplexml_exports.h
- ext/simplexml/simplexml.c
- ext/simplexml/simplexml.h:
- Rename header to prevent name clashes with external files
-
- * ext/simplexml/simplexml.c:
- Necessary as long as SPL is shared/dll
-
- * ext/sqlite/tests/sqlite_oo_031.phpt:
- Update, id_l is unique
-
- * ext/sqlite/tests/sqlite_oo_031.phpt:
- Add spl interaction test.
-
-2004-01-18 Moriyoshi Koizumi <moriyoshi@at.wakwak.com>
-
- * ext/standard/file.c:
- Fix fgetcsv() to reflect the change on 4.3.5 behaviour.
-
-2004-01-18 Marcus Boerger <marcus.boerger@post.rwth-aachen.de>
-
- * ext/sqlite/tests/bug26911.phpt
- ext/sqlite/tests/sqlite_oo_029.phpt:
- Update
-
-2004-01-18 Derick Rethans <php@derickrethans.nl>
-
- * ext/mcrypt/config.w32:
- - This define is not used anymore
-
-2004-01-18 Ilia Alshanetsky <ilia@prohost.org>
-
- * (PHP_4_3)
- ext/standard/file.c
- ext/standard/tests/file/bug26634.phpt:
- Corrections for various fgetcsv() issues.
-
-2004-01-18 Timm Friebe <thekid@thekid.de>
-
- * ext/sybase_ct/php_sybase_ct.c:
- - Fixed compiler warnings (int format, long int arg)
-
-2004-01-18 Marcus Boerger <marcus.boerger@post.rwth-aachen.de>
-
- * ext/simplexml/simplexml.c:
- Fix Warning
-
- * ext/simplexml/php_simplexml.h
- ext/simplexml/simplexml.c
- ext/simplexml/simplexml.h:
- Enable inherited classes inside SPL and respect order of module init.
-
- * ext/simplexml/tests/002.phpt
- ext/simplexml/tests/003.phpt
- ext/simplexml/tests/003.xml
- ext/simplexml/tests/007.phpt
- ext/simplexml/tests/008.phpt
- ext/simplexml/tests/010.phpt:
- Use external files only in 001.phpt & tests for bugs
-
- * ext/simplexml/php_simplexml.h
- ext/simplexml/simplexml.c:
- Export access to class_entry by function.
-
-2004-01-18 Christian Stocker <chregu@phant.ch>
-
- * ext/dom/document.c:
- - fix for bug #26947 Crash by using DomDocument::getElementById()
-
-2004-01-18 Marcus Boerger <marcus.boerger@post.rwth-aachen.de>
-
- * ZendEngine2/zend_reflection_api.c:
- Fix some casing issues
-
-2004-01-17 Sterling Hughes <winnie@edwardbear.org>
-
- * ext/simplexml/tests/profile08.phpt
- ext/simplexml/tests/profile11.phpt:
- update the tests proper-like
-
- * ext/simplexml/examples/security.php
- ext/simplexml/examples/xpath.php:
- update the examples
-
- * ext/simplexml/php_simplexml.h
- ext/simplexml/simplexml.c
- ext/simplexml/tests/profile04.phpt
- ext/simplexml/tests/profile05.phpt
- ext/simplexml/tests/profile06.phpt
- ext/simplexml/tests/profile07.phpt
- ext/simplexml/tests/profile10.phpt:
- namespace accesses are now soley URI based as opposed to prefix based.
-
-2004-01-17 Jon Parise <jon@csh.rit.edu>
-
- * ext/sqlite/Makefile.frag:
- Make the compilation of vdbeaux.c dependent on the generation of sqlite.h.
- An incremental 'make -j' build will now complete successfully.
-
-2004-01-17 Andrey Hristov <php@hristov.com>
-
- * README.PHP4-TO-PHP5-THIN-CHANGES:
- use Rasmus' words
-
-2004-01-17 Derick Rethans <php@derickrethans.nl>
-
- * ext/simplexml/README:
- - Fix typoes
-
-2004-01-17 Jon Parise <jon@csh.rit.edu>
-
- * ext/simplexml/README:
- Spell 'element' correctly.
-
-2004-01-17 Andrey Hristov <php@hristov.com>
-
- * README.PHP4-TO-PHP5-THIN-CHANGES:
- adding info about $argc and $argv in CLI mode
-
-2004-01-17 Marcus Boerger <marcus.boerger@post.rwth-aachen.de>
-
- * ext/simplexml/CREDITS
- ext/simplexml/README
- ext/simplexml/php_simplexml.h
- ext/simplexml/simplexml.c
- ext/simplexml/tests/006.phpt
- ext/simplexml/tests/007.phpt
- ext/simplexml/tests/008.phpt
- ext/simplexml/tests/011.phpt
- ext/simplexml/tests/012.phpt
- ext/simplexml/tests/014.phpt
- ext/simplexml/tests/014a.phpt
- ext/simplexml/tests/014b.phpt
- ext/simplexml/tests/015.phpt
- ext/simplexml/tests/016.phpt
- ext/simplexml/tests/017.phpt
- ext/simplexml/tests/018.phpt
- ext/simplexml/tests/019.phpt
- ext/simplexml/tests/bug25756.phpt:
- Major bugfix for consistency.
-
-2004-01-17 Andrey Hristov <php@hristov.com>
-
- * README.PHP4-TO-PHP5-THIN-CHANGES:
- Clarification about phpDoc comments. Spotted by Greag Beaver.
-
-2004-01-17 Marcus Boerger <marcus.boerger@post.rwth-aachen.de>
-
- * ext/sqlite/sqlite.c:
- No longer needed
-
-2004-01-17 Andrey Hristov <php@hristov.com>
-
- * ext/tokenizer/tokenizer.c
- ext/xml/xml.c:
- HEAD is bundled with ZE2
-
-2004-01-17 Marcus Boerger <marcus.boerger@post.rwth-aachen.de>
-
- * ext/simplexml/tests/005.xml
- ext/simplexml/tests/006.xml
- ext/simplexml/tests/009.xml:
- Drop the external xml files no longer needed
-
- * ext/simplexml/tests/005.phpt
- ext/simplexml/tests/006.phpt
- ext/simplexml/tests/009.phpt:
- No external xml files
-
- * ext/simplexml/tests/004.phpt
- ext/simplexml/tests/004.xml:
- Don't use external xml files
-
-2004-01-17 Greg Beaver <greg@chiaraquartet.net>
-
- * pear/package-PEAR.xml
- pear/PEAR/Common.php:
- fix Bug #594 PEAR_Common::analyzeSourceCode fails on string with $var and {
- also fixes SOAP packaging error
-
-2004-01-17 Marcus Boerger <marcus.boerger@post.rwth-aachen.de>
-
- * ZendEngine2/zend_interfaces.c:
-
-
-2004-01-17 Sterling Hughes <winnie@edwardbear.org>
-
- * ext/simplexml/tests/profile06.phpt
- ext/simplexml/tests/profile07.phpt
- ext/simplexml/tests/profile10.phpt:
- remove the parser errors here, so they accurately reflect what should
- happen.
-
-2004-01-17 Marcus Boerger <marcus.boerger@post.rwth-aachen.de>
-
- * ZendEngine2/zend_interfaces.c:
- Fix inheritance rule for interface Traversable
-
- * ext/simplexml/simplexml.c:
- Fix parameter list and protos
-
- * ext/simplexml/tests/010.phpt:
- Add test for inherited simplexml classes
-
- * ext/simplexml/simplexml.c:
- Make inherited sxe classes work
-
-2004-01-17 Jani Taskinen <jani.taskinen@kolumbus.fi>
-
- * ChangeLog
- README.PHP4-TO-PHP5-THIN-CHANGES
- README.Zeus
- configure.in
- php4.spec.in
- php5.spec.in
- ZendEngine2/tests/bug26802.phpt
- ext/bz2/bz2.dsp
- ext/com_dotnet/README
- ext/cpdf/cpdf.dsp
- ext/ctype/ctype.dsp
- ext/curl/curl.dsp
- ext/dba/dba.dsp
- ext/dbase/dbase.dsp
- ext/dbx/dbx.dsp
- ext/dio/tests/001.phpt
- ext/dom/dom.dsp
- ext/exif/exif.dsp
- ext/fbsql/fbsql.dsp
- ext/fdf/fdf.dsp
- ext/filepro/filepro.dsp
- ext/gd/gd.dsp
- ext/gettext/gettext.dsp
- ext/gmp/tests/001.phpt
- ext/iconv/iconv.dsp
- ext/imap/imap.dsp
- ext/informix/ifx.dsp
- ext/informix/ifx.ec
- ext/ingres_ii/README
- ext/ingres_ii/ingres.dsp
- ext/interbase/interbase.dsp
- ext/ldap/LDAP_Win32_HOWTO.txt
- ext/ldap/ldap.dsp
- ext/ldap/ldap.mak
- ext/mbstring/mbstring.c
- ext/mbstring/mbstring.dsp
- ext/mbstring/mbstring.h
- ext/mcrypt/mcrypt.dsp
- ext/mcve/config.m4
- ext/mcve/mcve.dsp
- ext/mcve/tests/001.phpt
- ext/mhash/mhash.dsp
- ext/mime_magic/mime_magic.dsp
- ext/ming/ming.dsp
- ext/mnogosearch/README
- ext/mnogosearch/index.php
- ext/msql/msql.dsp
- ext/mssql/mssql.dsp
- ext/mssql/mssql_win32_howto.txt
- ext/mssql/php_mssql.c
- ext/mysql/mysql.dsp
- ext/mysqli/mysqli.dsp
- ext/ncurses/tests/001.phpt
- ext/oci8/oci8.dsp
- ext/odbc/config.m4
- ext/openssl/README
- ext/openssl/openssl.dsp
- ext/oracle/oracle.dsp
- ext/pdf/pdf.dsp
- ext/pgsql/pgsql.dsp
- ext/pspell/README
- ext/pspell/pspell.dsp
- ext/shmop/README
- ext/shmop/shmop.dsp
- ext/simplexml/simplexml.dsp
- ext/skeleton/skeleton.dsp
- ext/skeleton/tests/001.phpt
- ext/snmp/snmp.dsp
- ext/sockets/sockets.dsp
- ext/sqlite/sqlite.dsp
- ext/standard/credits_ext.h
- ext/standard/credits_sapi.h
- ext/sybase/php_sybase_db.c
- ext/sybase_ct/php_sybase_ct.c
- ext/sybase_ct/sybase_ct.dsp
- ext/tokenizer/tokenizer.dsp
- ext/w32api/w32api.c
- ext/w32api/w32api.dsp
- ext/xml/xml.mak
- ext/xmlrpc/xmlrpc.dsp
- ext/xsl/xsl.dsp
- ext/yaz/yaz.dsp
- ext/zlib/zlib.dsp
- ext/zlib/zlib_win32_howto.txt
- netware/buildsapi.bat
- netware/php4apache.mak
- netware/php4apache2filter.mak
- netware/php4cli.mak
- netware/php5apache.mak
- netware/php5apache2filter.mak
- netware/php5cli.mak
- netware/phplib.mak
- sapi/activescript/README
- sapi/activescript/classfactory.cpp
- sapi/activescript/config.w32
- sapi/activescript/php4activescript.c
- sapi/activescript/php4activescript.def
- sapi/activescript/php4activescript.dsp
- sapi/activescript/php4activescript.h
- sapi/activescript/php4as_classfactory.h
- sapi/activescript/php4as_scriptengine.h
- sapi/activescript/php5activescript.c
- sapi/activescript/php5activescript.def
- sapi/activescript/php5activescript.dsp
- sapi/activescript/php5activescript.h
- sapi/activescript/php5as_classfactory.h
- sapi/activescript/php5as_scriptengine.h
- sapi/activescript/scriptengine.cpp
- sapi/aolserver/README
- sapi/aolserver/php4aolserver.dsp
- sapi/aolserver/php5aolserver.dsp
- sapi/apache/config.w32
- sapi/apache/php4apache.dsp
- sapi/apache/php5apache.dsp
- sapi/apache2filter/.cvsignore
- sapi/apache2handler/.cvsignore
- sapi/apache2handler/php4apache2.dsp
- sapi/apache2handler/php5apache2.dsp
- sapi/apache_hooks/.cvsignore
- sapi/apache_hooks/apMakefile.tmpl
- sapi/apache_hooks/config.m4
- sapi/apache_hooks/config.w32
- sapi/apache_hooks/libphp4.module.in
- sapi/apache_hooks/libphp5.module.in
- sapi/apache_hooks/mod_php4.c
- sapi/apache_hooks/mod_php4.exp
- sapi/apache_hooks/mod_php4.h
- sapi/apache_hooks/mod_php5.c
- sapi/apache_hooks/mod_php5.exp
- sapi/apache_hooks/mod_php5.h
- sapi/apache_hooks/php.sym
- sapi/apache_hooks/php4apache_hooks.dsp
- sapi/apache_hooks/php5apache_hooks.dsp
- sapi/apache_hooks/php_apache_http.h
- sapi/caudium/.cvsignore
- sapi/caudium/caudium.c
- sapi/caudium/config.m4
- sapi/cgi/README.FastCGI
- sapi/embed/php4embed.dsp
- sapi/embed/php5embed.dsp
- sapi/isapi/config.m4
- sapi/isapi/config.w32
- sapi/isapi/php4isapi.c
- sapi/isapi/php4isapi.def
- sapi/isapi/php4isapi.dsp
- sapi/isapi/php5isapi.c
- sapi/isapi/php5isapi.def
- sapi/isapi/php5isapi.dsp
- sapi/isapi/stresstest/notes.txt
- sapi/isapi/stresstest/stresstest.cpp
- sapi/nsapi/php4nsapi.dsp
- sapi/nsapi/php5nsapi.dsp
- sapi/pi3web/README
- sapi/pi3web/config.m4
- sapi/pi3web/config.w32
- sapi/pi3web/php4pi3web.dsp
- sapi/pi3web/php5pi3web.dsp
- sapi/pi3web/pi3web_sapi.c
- sapi/pi3web/pi3web_sapi.h
- sapi/roxen/.cvsignore
- sapi/roxen/README
- sapi/roxen/TODO
- sapi/roxen/config.m4
- sapi/roxen/roxen.c
- sapi/thttpd/config.m4
- sapi/thttpd/thttpd_patch
- sapi/tux/README
- sapi/tux/config.m4
- sapi/webjames/README
- scripts/dev/credits
- tests/test.php4
- tests/classes/inheritance_002.phpt
- win32/install.txt
- win32/php4.dsp
- win32/php4.dsw
- win32/php4dll.dsp
- win32/php4dllts.dsp
- win32/php4dllts.rc
- win32/php4dllts.rc2
- win32/php4ts.dsp
- win32/php4ts.rc
- win32/php4ts.rc2
- win32/php4ts_cli.dsp
- win32/php4ts_cli.rc
- win32/php4ts_cli.rc2
- win32/php5.dsp
- win32/php5.dsw
- win32/php5dll.dsp
- win32/php5dllts.dsp
- win32/php5dllts.rc
- win32/php5dllts.rc2
- win32/php5ts.dsp
- win32/php5ts.dsw
- win32/php5ts.rc
- win32/php5ts.rc2
- win32/php5ts_cli.dsp
- win32/php5ts_cli.rc
- win32/php5ts_cli.rc2
- win32/pws-php4cgi.reg
- win32/pws-php4isapi.reg
- win32/pws-php5cgi.reg
- win32/pws-php5isapi.reg
- win32/resource.h
- win32/signal.h
- win32/installer/README
- win32/installer/gen-nsis.php:
- - Renamed all *php4* files to *php5*, changed all php4/PHP4 to php5/PHP5
-
-2004-01-17 Tim Toohey <php@toowards.com>
-
- * ext/gd/libgd/gd.c:
- (gdImageSetPixel) Tidied 'normal' blending effect
-
-2004-01-17 Jani Taskinen <jani.taskinen@kolumbus.fi>
-
- * tests/classes/destructor_and_references.phpt:
- typofix
-
-2004-01-17 Wez Furlong <wez.php@thebrainroom.net>
-
- * (PECL_4_3)
- ext/sqlite/package.xml:
- bah bah
-
- * (PECL_4_3)
- ext/sqlite/package.xml:
- I will test package even at 1am...
-
- * (PECL_4_3)
- ext/sqlite/package.xml:
- update for release
-
-2004-01-17 Ilia Alshanetsky <ilia@prohost.org>
-
- * ZendEngine2/zend_object_handlers.c
- ZendEngine2/zend_object_handlers.h:
- Expose zend_std_call_user_call(), needed for implementation of things like
- __call handlers.
-
-2004-01-17 Wez Furlong <wez.php@thebrainroom.net>
-
- * (PECL_4_3)
- ext/sqlite/sqlite.dsp:
- better fix
-
-2004-01-17 Edin Kadribasic <edink@emini.dk>
-
- * (PECL_4_3)
- ext/sqlite/sqlite.c:
- Not everybody has this ;)
-
-2004-01-17 Jani Taskinen <jani.taskinen@kolumbus.fi>
-
- * ZendEngine2/zend_compile.c
- ZendEngine2/zend_language_scanner.h
- ZendEngine2/zend_language_scanner.l:
- Nuke compile warning by using the LANG_SCNG macro instead
-
-2004-01-17 Wez Furlong <wez.php@thebrainroom.net>
-
- * (PECL_4_3)
- ext/sqlite/sqlite.dsp:
- fix win32 build
-
-2004-01-17 Jani Taskinen <jani.taskinen@kolumbus.fi>
-
- * (PHP_4_3)
- NEWS
- ext/imap/config.m4:
- MFH: Fixed bug #26923 (ext/imap: pam and crypt libraries missing when build
- as shared)
-
- * ext/imap/config.m4:
- Fixed bug #26923 (ext/imap: pam and crypt libraries missing when build as
- shared)
-
-2004-01-16 Wez Furlong <wez.php@thebrainroom.net>
-
- * ext/sqlite/libsqlite/src/sqlite.w32.h:
- update file for win32 build
-
-2004-01-16 Sterling Hughes <winnie@edwardbear.org>
-
- * ext/simplexml/tests/profile04.phpt
- ext/simplexml/tests/profile05.phpt
- ext/simplexml/tests/profile06.phpt
- ext/simplexml/tests/profile07.phpt
- ext/simplexml/tests/profile10.phpt
- ext/simplexml/tests/profile11.phpt:
- update the profile of how namespaces should work after discussions with
- shane and rob richards. there were a lot of race conditions with regards
- to the way namespaces have been handled in XML documents so far, this new
- method removes the race conditions, and gives me a real reason to add the
- children() and attributes() methods.
-
-2004-01-16 Jani Taskinen <jani.taskinen@kolumbus.fi>
-
- * NEWS
- ZendEngine2/zend_reflection_api.c:
- - Fixed bug #26640 (__autoload() not invoked by Reflection classes)
-
-
-2004-01-16 Sterling Hughes <winnie@edwardbear.org>
-
- * ext/simplexml/tests/profile01.phpt
- ext/simplexml/tests/profile02.phpt
- ext/simplexml/tests/profile03.phpt
- ext/simplexml/tests/profile04.phpt
- ext/simplexml/tests/profile05.phpt
- ext/simplexml/tests/profile06.phpt
- ext/simplexml/tests/profile07.phpt
- ext/simplexml/tests/profile08.phpt
- ext/simplexml/tests/profile09.phpt
- ext/simplexml/tests/profile10.phpt
- ext/simplexml/tests/profile11.phpt:
- Add a "profile" of simplexml's expected behaviour in the form of tests.
- This will be expanded as issues arise and will be a formal definition
- (in code) of simplexml's behaviour.
-
-2004-01-16 Jani Taskinen <jani.taskinen@kolumbus.fi>
-
- * (PHP_4_3)
- NEWS
- ext/xml/xml.c:
- MFH: - Fixed bug #26937 (Warning in xml.c)
-
- * ext/xml/xml.c:
- Kill warning (bug #26937)
-
- * tests/lang/bug26640.phpt:
- Added test case for bug #26640
-
-2004-01-16 Ilia Alshanetsky <ilia@prohost.org>
-
- * ext/sqlite/TODO:
- Update TODO
-
- * EXTENSIONS
- EXTENSIONS:
- Added Antony Dovgal as OCI8 maintainer.
-
- * run-tests.php:
- Fixed division by zero warning.
-
-2004-01-16 Jani Taskinen <jani.taskinen@kolumbus.fi>
-
- * NEWS
- NEWS:
- BFN
-
- * ext/mime_magic/mime_magic.c:
- Fix the mime_magic.debug option init
-
-2004-01-16 Antony Dovgal <tony2001@phpclub.net>
-
- * ext/oci8/CREDITS:
- Add myself at last =)
-
-2004-01-16 Ilia Alshanetsky <ilia@prohost.org>
-
- * (PHP_4_3)
- NEWS
- ext/pcre/php_pcre.c
- ext/pcre/tests/bug26927.phpt:
- MFH: Fixed Bug #26927 (preg_quote() does not escape \0).
-
- * ext/pcre/tests/bug26927.phpt:
-
- Fixed Bug #26927 (preg_quote() does not escape \0).
-
- * ext/pcre/php_pcre.c:
- Fixed Bug #26927 (preg_quote() does not escape \0).
-
-2004-01-15 Marcus Boerger <marcus.boerger@post.rwth-aachen.de>
-
- * ext/sqlite/sqlite.c
- ext/sqlite/sqlite.c:
- Fix shutdown
-
- * (PHP_4_3)
- ext/dba/dba.c:
- Add missing fd creation
-
-2004-01-15 Pierre-Alain Joye <paj@pearfr.org>
-
- * ext/sqlite/package.xml:
- - Fix the php dependency
- (wide copy/paste is not that good no? ;) )
-
-2004-01-15 Zeev Suraski <zeev@zend.com>
-
- * ZendEngine2/zend.c:
- Nice patch Christian, but it wasn't at all enabled? :)
-
- Fix bug #26883
-
-2004-01-15 Antony Dovgal <tony2001@phpclub.net>
-
- * ext/oci8/oci8.c:
- Fix bug #26892, ORA-21301 in ocinewcollection() call.
- pEnv should be initialized in object mode too.
-
-2004-01-15 Marcus Boerger <marcus.boerger@post.rwth-aachen.de>
-
- * ext/simplexml/simplexml.c:
- Drop userspace iteration correctly.
-
-2004-01-15 Jani Taskinen <jani.taskinen@kolumbus.fi>
-
- * ext/oci8/config.m4
- ext/oci8/oci8.c:
- Fix typo
-
- * (PHP_4_3)
- ext/mime_magic/mime_magic.c:
- Fix overflow
-
- * NEWS
- ext/mime_magic/mime_magic.c:
- - Fixed bug #26844 (ext/mime_magic: magic file validation broken).
-
-2004-01-15 Ilia Alshanetsky <ilia@prohost.org>
-
- * (PHP_4_3)
- NEWS
- ext/imap/php_imap.c:
- MFH: Fixed bug #26909 (crash in imap_mime_header_decode() when no encoding
- is
- used).
-
- * ext/imap/php_imap.c:
- Fixed bug #26909 (crash in imap_mime_header_decode() when no encoding is
- used).
-
-2004-01-14 Greg Beaver <greg@chiaraquartet.net>
-
- * pear/PEAR.php:
- fix get_class() case-sensitive incompatibility in PHP5
-
-2004-01-14 Edin Kadribasic <edink@emini.dk>
-
- * (PECL_4_3)
- ext/sqlite/libsqlite/src/sqlite.w32.h:
- Update version number
-
- * (PECL_4_3)
- ext/sqlite/sqlite.dsp:
- Add new files to windows build
-
-2004-01-14 Ilia Alshanetsky <ilia@prohost.org>
-
- * (PECL_4_3)
- ext/sqlite/libsqlite/src/date.c
- ext/sqlite/libsqlite/src/vdbeInt.h
- ext/sqlite/libsqlite/src/vdbeaux.c:
- Added new files.
-
-2004-01-14 Marcus Boerger <marcus.boerger@post.rwth-aachen.de>
-
- * ext/simplexml/simplexml.c
- ext/simplexml/tests/010.phpt:
- This is no longer usefull in any way.
-
-2004-01-14 Ilia Alshanetsky <ilia@prohost.org>
-
- * ext/sqlite/tests/bug26911.phpt:
-
- MFH: Fixed bug #26911 (crash in sqlite extension when fetching data from
- empty queries).
-
- * NEWS
- ext/sqlite/sqlite.c
- ext/sqlite/sqlite.c
- ext/sqlite/tests/bug26911.phpt:
- MFH: Fixed bug #26911 (crash in sqlite extension when fetching data from
- empty queries).
-
-2004-01-14 Rob Richards <rrichards@ctindustries.net>
-
- * ext/simplexml/simplexml.c:
- test user define namespace aliases
-
-2004-01-14 Ilia Alshanetsky <ilia@prohost.org>
-
- * (PECL_4_3)
- ext/sqlite/libsqlite/src/parse.c:
- Touch parser.
-
- * (PECL_4_3)
- ext/sqlite/config.m4
- ext/sqlite/libsqlite/VERSION
- ext/sqlite/libsqlite/src/attach.c
- ext/sqlite/libsqlite/src/auth.c
- ext/sqlite/libsqlite/src/btree.c
- ext/sqlite/libsqlite/src/btree.h
- ext/sqlite/libsqlite/src/btree_rb.c
- ext/sqlite/libsqlite/src/build.c
- ext/sqlite/libsqlite/src/copy.c
- ext/sqlite/libsqlite/src/delete.c
- ext/sqlite/libsqlite/src/encode.c
- ext/sqlite/libsqlite/src/expr.c
- ext/sqlite/libsqlite/src/func.c
- ext/sqlite/libsqlite/src/hash.c
- ext/sqlite/libsqlite/src/hash.h
- ext/sqlite/libsqlite/src/insert.c
- ext/sqlite/libsqlite/src/main.c
- ext/sqlite/libsqlite/src/opcodes.c
- ext/sqlite/libsqlite/src/opcodes.h
- ext/sqlite/libsqlite/src/os.c
- ext/sqlite/libsqlite/src/os.h
- ext/sqlite/libsqlite/src/pager.c
- ext/sqlite/libsqlite/src/pager.h
- ext/sqlite/libsqlite/src/parse.c
- ext/sqlite/libsqlite/src/parse.h
- ext/sqlite/libsqlite/src/parse.y
- ext/sqlite/libsqlite/src/pragma.c
- ext/sqlite/libsqlite/src/printf.c
- ext/sqlite/libsqlite/src/random.c
- ext/sqlite/libsqlite/src/select.c
- ext/sqlite/libsqlite/src/sqlite.h.in
- ext/sqlite/libsqlite/src/sqlite.w32.h
- ext/sqlite/libsqlite/src/sqliteInt.h
- ext/sqlite/libsqlite/src/table.c
- ext/sqlite/libsqlite/src/tokenize.c
- ext/sqlite/libsqlite/src/trigger.c
- ext/sqlite/libsqlite/src/update.c
- ext/sqlite/libsqlite/src/util.c
- ext/sqlite/libsqlite/src/vacuum.c
- ext/sqlite/libsqlite/src/vdbe.c
- ext/sqlite/libsqlite/src/vdbe.h
- ext/sqlite/libsqlite/src/where.c:
- Upgrade bundled libsqlite to 2.8.11
-
- * ext/sqlite/libsqlite/src/parse.c:
- touch generated parser.
-
- * ext/sqlite/libsqlite/src/date.c
- ext/sqlite/libsqlite/src/hash.c
- ext/sqlite/libsqlite/src/hash.h
- ext/sqlite/libsqlite/src/opcodes.c
- ext/sqlite/libsqlite/src/opcodes.h
- ext/sqlite/libsqlite/src/os.c
- ext/sqlite/libsqlite/src/os.h
- ext/sqlite/libsqlite/src/pager.c
- ext/sqlite/libsqlite/src/printf.c
- ext/sqlite/libsqlite/src/select.c
- ext/sqlite/libsqlite/src/sqliteInt.h
- ext/sqlite/libsqlite/src/tokenize.c
- ext/sqlite/libsqlite/src/util.c
- ext/sqlite/libsqlite/src/vdbe.c
- ext/sqlite/libsqlite/src/vdbeInt.h
- ext/sqlite/libsqlite/src/vdbeaux.c
- ext/sqlite/libsqlite/src/where.c:
-
- Upgraded bundled libsqlite to 2.8.11 (fixed critical bug of *NIX systems).
-
- * NEWS
- ext/sqlite/libsqlite/VERSION
- ext/sqlite/libsqlite/src/btree_rb.c:
- Upgraded bundled libsqlite to 2.8.11 (fixed critical bug of *NIX systems).
-
-2004-01-14 Wez Furlong <wez.php@thebrainroom.net>
-
- * (PHP_4_3)
- main/network.c:
- Probable fix for:
- Bug #25575 stream_set_blocking with STDIN doesnt block
-
- * ext/standard/file.c:
- Remove stale code from flock();
- spotted by Hartmut.
-
- * (PHP_4_3)
- NEWS
- ext/standard/file.c:
- Fixed bug #26772 (fgets returns NULL instead of FALSE). (Wez)
-
- * ext/standard/file.c:
- Fix #26772: fgets returns NULL instead of FALSE.
-
-2004-01-14 Zeev Suraski <zeev@zend.com>
-
- * ZendEngine2/zend_compile.c:
- Don't allow interfaces to implement anything
-
-2004-01-14 Wez Furlong <wez.php@thebrainroom.net>
-
- * ext/sqlite/libsqlite/src/parse.c:
- touch
-
-2004-01-14 Andi Gutmans <andi@zend.com>
-
- * ZendEngine2/zend_operators.h:
- - Remove bogus macros
-
- * ext/imap/php_imap.c:
- - Remove use of bogus macro
-
-2004-01-14 Wez Furlong <wez.php@thebrainroom.net>
-
- * sapi/cli/cli_win32.c
- sapi/cli/config.w32
- sapi/cli/php_cli.c:
- Add optional php-win.exe variation of the CLI sapi.
- php-win.exe runs in the windows GUI subsystem, and thus
- has no console; stdio handles are effectively set to /dev/null
- and no "dos box" will appear on screen when running scripts
- using this sapi (php-gtk people will be familiar with this concept).
-
- Aside from those differences, php-win.exe is 100% identical to
- regular CLI
-
-2004-01-13 Ilia Alshanetsky <ilia@prohost.org>
-
- * (PHP_4_3)
- NEWS
- ext/standard/formatted_print.c
- ext/standard/tests/strings/bug26878.phpt:
- MFH: Fixed bug #26878 (problem with multiple references to the same
- variable
- with different types).
-
- * ext/standard/tests/strings/bug26878.phpt:
-
- Fixed bug #26878 (problem with multiple references to the same variable
- with different types).
-
- * ext/standard/formatted_print.c:
- Fixed bug #26878 (problem with multiple references to the same variable
- with different types).
-
-2004-01-13 Rob Richards <rrichards@ctindustries.net>
-
- * ext/simplexml/simplexml.c
- ext/simplexml/tests/017.phpt:
- add support for $foo["a:bar"]
- fix xsearch to only return values for text,element and attribute nodes
- fix getChildren and return array
- remove most methods
- update test
-
-2004-01-13 Jani Taskinen <jani.taskinen@kolumbus.fi>
-
- * (PHP_4_3)
- ext/ftp/ftp.c:
- MFH: - Fixed bug #26896 (ext/ftp does not work as shared extension)
-
- * ext/ftp/ftp.c:
- - Fixed bug #26896 (ext/ftp does not work as shared extension)
-
- * NEWS
- NEWS:
- BFN
-
-2004-01-13 Wez Furlong <wez.php@thebrainroom.net>
-
- * ZendEngine2/zend_ini_parser.y:
- Don't treat strings containing : as potential constant names in
- the .ini parser.
- This fixes Bug #26893
-
- * ext/com_dotnet/com_handlers.c:
- reinstate this ifdef for people without .Net SDK
-
- * ext/com_dotnet/com_handlers.c:
- Fix refcount on these return values to avoid a leak and allow object dtor's
- to be called.
- This in turn prevents a massive slow-down in CoUninitialize which would
- have to
- forcibly destroy the COM objects in request shutdown.
-
-2004-01-13 Rob Richards <rrichards@ctindustries.net>
-
- * ext/dom/php_dom.c:
- fix getElementsByTagName and getElementsByTagNameNS - allow *
-
-2004-01-13 Wez Furlong <wez.php@thebrainroom.net>
-
- * ext/com_dotnet/com_com.c
- ext/com_dotnet/com_extension.c
- ext/com_dotnet/com_handlers.c
- ext/com_dotnet/php_com_dotnet_internal.h:
- Fix leaking constructors.
- Implement a cache for method signatures and DISPID's to
- greatly improve performance when repeatedly accessing
- members with the same names.
-
-2004-01-13 Derick Rethans <php@derickrethans.nl>
-
- * (PHP_4_3)
- Zend/zend.c
- sapi/cgi/cgi_main.c
- sapi/cli/php_cli.c:
- - Fixed year in version notices
-
-2004-01-13 Sara Golemon <php@alphaweb.net>
-
- * ext/curl/config.w32:
- Don't even define this.
-
-2004-01-13 John Coggeshall <john@coggeshall.org>
-
- * ext/sqlite/sess_sqlite.c:
- Whoops... Ilia forgot a ')'
-
-2004-01-13 Wez Furlong <wez.php@thebrainroom.net>
-
- * win32/time.c:
- make usleep actually work properly
-
- * ext/com_dotnet/com_com.c
- ext/com_dotnet/com_handlers.c
- ext/com_dotnet/php_com_dotnet_internal.h:
- Support automatic handling of byref parameters
-
-2004-01-12 Ilia Alshanetsky <ilia@prohost.org>
-
- * ext/sqlite/sess_sqlite.c:
- Fixed a bug that would cause the sqlite session database to grow endlessly.
-
-2004-01-12 Ard Biesheuvel <a.k.biesheuvel@ewi.tudelft.nl>
-
- * ext/interbase/interbase.c:
- More handsome solution for previous fix
-
- * ext/interbase/interbase.c:
- Added sanity check on ibase_[p]connect() dialect argument (fixes obscure
- unregistered bug)
-
-2004-01-12 Martin Kraemer <Martin.Kraemer@fujitsu-siemens.com>
-
- * ext/bz2/php_bz2.h:
- Avoid duplicate symbols; definition is in bz2.c
-
-2004-01-12 Ilia Alshanetsky <ilia@prohost.org>
-
- * (PHP_4_3)
- configure.in
- main/php_version.h:
- Back to dev.
-
- * (PHP_4_3)
- NEWS:
- Set release date.
-
- * (PHP_4_3)
- configure.in
- main/php_version.h:
- Go with 4.3.5RC1
-
-2004-01-12 Andi Gutmans <andi@zend.com>
-
- * ZendEngine2/zend_compile.c:
- - Return the PHP 4 behavior of not allowing class declerations within
- - class declerations. This happened when declaring a class within a
- - method.
- class A {
- function foo() {
- class B {
- }
- }
- }
-
-2004-01-12 Marcus Boerger <marcus.boerger@post.rwth-aachen.de>
-
- * ext/mysql/php_mysql.c:
- Synch mysql_fetch_object with mysqli, sqlite and pgsql
-
- * ext/mysqli/mysqli_nonapi.c:
- Proto fix
-
- * ext/sqlite/sqlite.c:
- No longer needed
-
- * ZendEngine2/zend_API.h
- main/php.h:
- Add missing macro
-
-2004-01-11 Wez Furlong <wez.php@thebrainroom.net>
-
- * ZendEngine2/zend_compile.c
- ZendEngine2/zend_language_scanner.h
- ZendEngine2/zend_language_scanner.l:
- TSRMLS fix
-
-2004-01-11 Ilia Alshanetsky <ilia@prohost.org>
-
- * (PHP_4_3)
- NEWS
- ext/pgsql/pgsql.c:
- MFH: Fixed bug #26864 (pg_(update|delete) ignore PGSQL_DML_EXEC option).
-
- * ext/pgsql/pgsql.c:
- Fixed bug #26864 (pg_(update|delete) ignore PGSQL_DML_EXEC option).
-
-2004-01-11 Andi Gutmans <andi@zend.com>
-
- * ZendEngine2/zend_language_parser.y:
- - Re-allow conditional class declerations. Needless to say that I also
- - think it's not great coding.. Use polymorphism instead :)
-
- * ZendEngine2/zend_compile.c
- ZendEngine2/zend_language_scanner.h
- ZendEngine2/zend_language_scanner.l:
- - This should fix the problem of conditional function decleration on the
- - same line of code not to work. You should re-evaluate your coding style
- - if you really code this way :)
-
-2004-01-11 Jani Taskinen <jani.taskinen@kolumbus.fi>
-
- * NEWS:
- oops..
-
- * NEWS:
- BFN
-
- * tests/lang/bug26869.phpt:
-
- add test case for bug #26869
-
-2004-01-11 Andrey Hristov <php@hristov.com>
-
- * ext/standard/tests/array/var_export.phpt:
- fixing test
-
-2004-01-11 Rui Hirokawa <rui_hirokawa@ybb.ne.jp>
-
- * ext/sqlite/config.m4:
- added utf8 support option for sqlite >= 2.8.9.
-
-2004-01-10 Andrey Hristov <php@hristov.com>
-
- * ext/standard/tests/array/007.phpt
- ext/standard/tests/array/array_intersect_1.phpt:
- fixing tests after last Derick's commit that changed the behaviour of
- var_export() :)
-
-2004-01-10 Marcus Boerger <marcus.boerger@post.rwth-aachen.de>
-
- * ext/simplexml/tests/014.phpt
- ext/simplexml/tests/014a.phpt
- ext/simplexml/tests/014b.phpt:
- Update attribute tests.
-
- * ext/simplexml/simplexml.c:
- - Cleanup class_entry
- - allow derived classes
- - fix new SimpleXML_Element()
-
-2004-01-10 Zeev Suraski <zeev@zend.com>
-
- * ZendEngine2/zend_operators.c:
- Remove conflict
-
-2004-01-10 Rob Richards <rrichards@ctindustries.net>
-
- * ext/dom/dom_iterators.c
- ext/dom/nodelist.c
- ext/dom/php_dom.h
- ext/dom/xpath.c:
- XPath query returns nodelist object rather than array
-
-2004-01-10 Zeev Suraski <zeev@zend.com>
-
- * ZendEngine2/zend_builtin_functions.c
- ZendEngine2/zend_execute_API.c
- ZendEngine2/zend_globals.h
- ZendEngine2/zend_operators.c:
- Added error mask to set_error_handler()
- Patch by Christian Schneider <cschneid@cschneid.com>
-
-2004-01-09 Wez Furlong <wez.php@thebrainroom.net>
-
- * acinclude.m4
- ZendEngine2/acconfig.h:
- support for building asm in the unix buildsys.
- Also, when ZEND_ACCONFIG_H_NO_C_PROTOS is defined,
- omit the C prototypes from the configuration header
- so that it can be included into asm files.
-
-2004-01-09 Marcus Boerger <marcus.boerger@post.rwth-aachen.de>
-
- * ZendEngine2/RFCs/002.txt:
- this one is declined
-
- * ext/pgsql/config.m4:
- Use pg_config if it can be found.
-
-2004-01-09 Wez Furlong <wez.php@thebrainroom.net>
-
- * ZendEngine2/zend_object_handlers.h:
- must be extern to avoid problems with some compilers
-
- * ext/session/php_session.h
- ext/session/session.c:
- export tsrm id for session globals.
-
- * ext/informix/config.w32:
- let informix build
-
-2004-01-09 Stanislav Malyshev <stas@zend.com>
-
- * ZendEngine2/tests/bug26077.phpt:
- fix expect
-
-2004-01-09 Edin Kadribasic <edink@emini.dk>
-
- * ext/informix/ifx.ec:
- Fix ZTS build
-
-2004-01-09 Stanislav Malyshev <stas@zend.com>
-
- * ZendEngine2/zend_compile.c:
- Bug #25816 - disallow arrays in class constants
-
- * ZendEngine2/tests/bug26077.phpt:
- add test
-
- * ZendEngine2/zend_compile.c
- ZendEngine2/zend_execute.c:
- Fix Bug #26077 - memory leak when new() result is not assigned
- and no constructor defined
-
-2004-01-09 Wez Furlong <wez.php@thebrainroom.net>
-
- * ext/mhash/config.w32:
- let mhash build
-
-2004-01-09 Sterling Hughes <winnie@edwardbear.org>
-
- * ext/simplexml/php_simplexml.h
- ext/simplexml/simplexml.c:
- Remove these initializers as they are unused.
-
-2004-01-09 Jani Taskinen <jani.taskinen@kolumbus.fi>
-
- * ext/sqlite/libsqlite/src/libsqlite.dsp:
- - Fix build
-
-2004-01-09 Ilia Alshanetsky <ilia@prohost.org>
-
- * NEWS:
- sqlite news
-
- * (PHP_4_3)
- NEWS
- ext/standard/mail.c:
- MFH: Fixed bug #26847 (memory leak in mail() when to/subject contain only
- spaces).
-
- * ext/standard/mail.c:
- Fixed bug #26847 (memory leak in mail() when to/subject contain only
- spaces)
-
-2004-01-08 Sterling Hughes <winnie@edwardbear.org>
-
- * ext/simplexml/simplexml.c:
- Fix dumping, when dumping a text element, for example:
-
- <?php
- $doc = simplexml_load_string('<?xml version="1.0"?>
- <namelist>
- <name>
- <first>helly</first>
- </name>
- <name>
- <first>sterling</first>
- </name>
- </namelist>');
- var_dump($doc->name[0]->first);
-
- Used to not display the node's content, now it does.
-
-2004-01-08 Wez Furlong <wez.php@thebrainroom.net>
-
- * ext/simplexml/config.w32:
- add optional dep on spl for simplexml.
- Fix dep handling in buildconf
-
-2004-01-08 Marcus Boerger <marcus.boerger@post.rwth-aachen.de>
-
- * ext/simplexml/README:
- Add some minimalistic documentation
-
- * ext/simplexml/simplexml.c:
- Fix windows build issue
-
- * ext/simplexml/simplexml.c:
- Cannot use shared SPL
-
- * ext/sqlite/sqlite.c:
- There's no more interaction with SPL
-
-2004-01-08 Jani Taskinen <jani.taskinen@kolumbus.fi>
-
- * ext/standard/url_scanner_ex.c
- ext/standard/var_unserializer.c:
- touch generated files
-
- * ext/sqlite/libsqlite/src/parse.c:
- touch to make build work without lemon..
-
- * run-tests.php
- run-tests2.php
- TSRM/tsrm_nw.h
- TSRM/tsrm_virtual_cwd.h
- TSRM/tsrm_win32.h
- ZendEngine2/acconfig.h
- ZendEngine2/zend.c
- ZendEngine2/zend.h
- ZendEngine2/zend_API.c
- ZendEngine2/zend_API.h
- ZendEngine2/zend_alloc.c
- ZendEngine2/zend_alloc.h
- ZendEngine2/zend_builtin_functions.c
- ZendEngine2/zend_builtin_functions.h
- ZendEngine2/zend_compile.c
- ZendEngine2/zend_compile.h
- ZendEngine2/zend_config.nw.h
- ZendEngine2/zend_config.w32.h
- ZendEngine2/zend_constants.c
- ZendEngine2/zend_constants.h
- ZendEngine2/zend_default_classes.c
- ZendEngine2/zend_default_classes.h
- ZendEngine2/zend_dynamic_array.c
- ZendEngine2/zend_dynamic_array.h
- ZendEngine2/zend_errors.h
- ZendEngine2/zend_execute.c
- ZendEngine2/zend_execute.h
- ZendEngine2/zend_execute_API.c
- ZendEngine2/zend_extensions.c
- ZendEngine2/zend_extensions.h
- ZendEngine2/zend_fast_cache.h
- ZendEngine2/zend_globals.h
- ZendEngine2/zend_globals_macros.h
- ZendEngine2/zend_hash.c
- ZendEngine2/zend_hash.h
- ZendEngine2/zend_highlight.c
- ZendEngine2/zend_highlight.h
- ZendEngine2/zend_indent.c
- ZendEngine2/zend_indent.h
- ZendEngine2/zend_ini.c
- ZendEngine2/zend_ini.h
- ZendEngine2/zend_ini_scanner.h
- ZendEngine2/zend_interfaces.c
- ZendEngine2/zend_interfaces.h
- ZendEngine2/zend_istdiostream.h
- ZendEngine2/zend_iterators.c
- ZendEngine2/zend_iterators.h
- ZendEngine2/zend_language_scanner.h
- ZendEngine2/zend_list.c
- ZendEngine2/zend_list.h
- ZendEngine2/zend_llist.c
- ZendEngine2/zend_llist.h
- ZendEngine2/zend_mm.c
- ZendEngine2/zend_mm.h
- ZendEngine2/zend_modules.h
- ZendEngine2/zend_multibyte.c
- ZendEngine2/zend_multibyte.h
- ZendEngine2/zend_multiply.h
- ZendEngine2/zend_object_handlers.c
- ZendEngine2/zend_object_handlers.h
- ZendEngine2/zend_objects.c
- ZendEngine2/zend_objects.h
- ZendEngine2/zend_objects_API.c
- ZendEngine2/zend_objects_API.h
- ZendEngine2/zend_opcode.c
- ZendEngine2/zend_operators.c
- ZendEngine2/zend_operators.h
- ZendEngine2/zend_ptr_stack.c
- ZendEngine2/zend_ptr_stack.h
- ZendEngine2/zend_qsort.c
- ZendEngine2/zend_qsort.h
- ZendEngine2/zend_reflection_api.c
- ZendEngine2/zend_reflection_api.h
- ZendEngine2/zend_sprintf.c
- ZendEngine2/zend_stack.c
- ZendEngine2/zend_stack.h
- ZendEngine2/zend_static_allocator.c
- ZendEngine2/zend_static_allocator.h
- ZendEngine2/zend_stream.c
- ZendEngine2/zend_stream.h
- ZendEngine2/zend_ts_hash.c
- ZendEngine2/zend_ts_hash.h
- ZendEngine2/zend_types.h
- ZendEngine2/zend_variables.c
- ZendEngine2/zend_variables.h
- build/build.mk
- build/build2.mk
- build/buildcheck.sh
- build/mkdep.awk
- ext/bcmath/php_bcmath.h
- ext/bz2/php_bz2.h
- ext/com_dotnet/php_com_dotnet.h
- ext/com_dotnet/php_com_dotnet_internal.h
- ext/cpdf/php_cpdf.h
- ext/ctype/php_ctype.h
- ext/curl/php_curl.h
- ext/dba/php_dba.h
- ext/dba/libcdb/cdb.h
- ext/dba/libcdb/cdb_make.h
- ext/dba/libcdb/uint32.h
- ext/dba/libflatfile/flatfile.h
- ext/dba/libinifile/inifile.h
- ext/dbase/php_dbase.h
- ext/dbx/dbx.h
- ext/dbx/dbx_fbsql.h
- ext/dbx/dbx_mssql.h
- ext/dbx/dbx_mysql.h
- ext/dbx/dbx_oci8.h
- ext/dbx/dbx_odbc.h
- ext/dbx/dbx_pgsql.h
- ext/dbx/dbx_sqlite.h
- ext/dbx/dbx_sybasect.h
- ext/dbx/php_dbx.h
- ext/dio/php_dio.h
- ext/dom/dom_ce.h
- ext/dom/dom_fe.h
- ext/dom/dom_properties.h
- ext/dom/php_dom.h
- ext/dom/xml_common.h
- ext/exif/php_exif.h
- ext/fam/php_fam.h
- ext/fbsql/php_fbsql.h
- ext/fdf/php_fdf.h
- ext/filepro/php_filepro.h
- ext/ftp/ftp.h
- ext/ftp/php_ftp.h
- ext/gd/php_gd.h
- ext/gettext/php_gettext.h
- ext/gmp/php_gmp.h
- ext/iconv/php_iconv.h
- ext/imap/php_imap.h
- ext/informix/ifx.ec
- ext/informix/php_informix.h
- ext/informix/php_informix_includes.h
- ext/ingres_ii/ii.h
- ext/ingres_ii/php_ii.h
- ext/interbase/interbase.rc
- ext/interbase/php_interbase.h
- ext/ircg/ircg_scanner.re
- ext/ircg/php_ircg.h
- ext/ldap/php_ldap.h
- ext/mbstring/mb_gpc.h
- ext/mbstring/mbstring.h
- ext/mbstring/php_mbregex.h
- ext/mbstring/php_unicode.h
- ext/mcrypt/php_mcrypt.h
- ext/mcve/php_mcve.h
- ext/mhash/php_mhash.h
- ext/mime_magic/php_mime_magic.h
- ext/mime_magic/phpmimemagic.h
- ext/ming/php_ming.h
- ext/mnogosearch/php_mnogo.h
- ext/mono/php_mono.h
- ext/msession/msession.c
- ext/msession/php_msession.h
- ext/msql/php_msql.h
- ext/mssql/php_mssql.h
- ext/mysql/php_mysql.h
- ext/mysqli/mysqli_fe.c
- ext/mysqli/mysqli_prop.c
- ext/mysqli/mysqli_report.h
- ext/mysqli/php_mysqli.h
- ext/ncurses/php_ncurses.h
- ext/ncurses/php_ncurses_fe.h
- ext/oci8/php_oci8.h
- ext/odbc/php_birdstep.h
- ext/odbc/php_odbc.h
- ext/odbc/php_odbc_includes.h
- ext/openssl/php_openssl.h
- ext/pcntl/php_pcntl.h
- ext/pcntl/php_signal.h
- ext/pcre/php_pcre.h
- ext/pdf/php_pdf.h
- ext/pfpro/php_pfpro.h
- ext/pgsql/php_pgsql.h
- ext/posix/php_posix.h
- ext/pspell/php_pspell.h
- ext/readline/php_readline.h
- ext/recode/php_recode.h
- ext/session/mod_files.h
- ext/session/mod_mm.h
- ext/session/mod_user.h
- ext/session/php_session.h
- ext/shmop/php_shmop.h
- ext/simplexml/php_simplexml.h
- ext/snmp/php_snmp.h
- ext/sockets/php_sockets.h
- ext/sockets/php_sockets_win.h
- ext/sockets/unix_socket_constants.h
- ext/sockets/win32_socket_constants.h
- ext/sqlite/php_sqlite.h
- ext/standard/base64.h
- ext/standard/basic_functions.h
- ext/standard/crc32.h
- ext/standard/credits.h
- ext/standard/css.h
- ext/standard/cyr_convert.h
- ext/standard/datetime.h
- ext/standard/dl.h
- ext/standard/dns.h
- ext/standard/exec.h
- ext/standard/file.h
- ext/standard/flock_compat.h
- ext/standard/fsock.h
- ext/standard/head.h
- ext/standard/html.h
- ext/standard/info.h
- ext/standard/md5.h
- ext/standard/microtime.h
- ext/standard/pack.h
- ext/standard/pageinfo.h
- ext/standard/php_array.h
- ext/standard/php_assert.h
- ext/standard/php_browscap.h
- ext/standard/php_crypt.h
- ext/standard/php_dir.h
- ext/standard/php_ext_syslog.h
- ext/standard/php_filestat.h
- ext/standard/php_fopen_wrappers.h
- ext/standard/php_ftok.h
- ext/standard/php_http.h
- ext/standard/php_image.h
- ext/standard/php_incomplete_class.h
- ext/standard/php_iptc.h
- ext/standard/php_lcg.h
- ext/standard/php_link.h
- ext/standard/php_mail.h
- ext/standard/php_math.h
- ext/standard/php_metaphone.h
- ext/standard/php_parsedate.h
- ext/standard/php_rand.h
- ext/standard/php_smart_str.h
- ext/standard/php_smart_str_public.h
- ext/standard/php_standard.h
- ext/standard/php_string.h
- ext/standard/php_sunfuncs.h
- ext/standard/php_type.h
- ext/standard/php_uuencode.h
- ext/standard/php_var.h
- ext/standard/php_versioning.h
- ext/standard/proc_open.h
- ext/standard/quot_print.h
- ext/standard/reg.h
- ext/standard/scanf.h
- ext/standard/sha1.h
- ext/standard/streamsfuncs.h
- ext/standard/uniqid.h
- ext/standard/url.h
- ext/standard/url_scanner.h
- ext/standard/url_scanner_ex.h
- ext/standard/url_scanner_ex.re
- ext/standard/var_unserializer.re
- ext/sybase/php_sybase_db.h
- ext/sybase_ct/php_sybase_ct.h
- ext/sysvmsg/php_sysvmsg.h
- ext/sysvsem/php_sysvsem.h
- ext/sysvshm/php_sysvshm.h
- ext/tokenizer/php_tokenizer.h
- ext/wddx/php_wddx.h
- ext/wddx/php_wddx_api.h
- ext/xml/expat_compat.h
- ext/xml/php_xml.h
- ext/xmlrpc/php_xmlrpc.h
- ext/xsl/php_xsl.h
- ext/xsl/xsl_fe.h
- ext/yaz/php_yaz.h
- ext/yp/php_yp.h
- ext/zlib/php_zlib.h
- main/SAPI.h
- main/build-defs.h.in
- main/config.nw.h
- main/fopen_wrappers.h
- main/internal_functions.c.in
- main/internal_functions_registry.h
- main/logos.h
- main/php.h
- main/php3_compat.h
- main/php_compat.h
- main/php_content_types.h
- main/php_globals.h
- main/php_ini.h
- main/php_logos.h
- main/php_main.h
- main/php_memory_streams.h
- main/php_network.h
- main/php_open_temporary_file.h
- main/php_output.h
- main/php_realpath.c
- main/php_reentrancy.h
- main/php_regex.h
- main/php_scandir.h
- main/php_streams.h
- main/php_syslog.h
- main/php_ticks.h
- main/php_variables.h
- main/rfc1867.h
- main/safe_mode.h
- main/snprintf.h
- main/spprintf.h
- main/win95nt.h
- main/streams/php_stream_context.h
- main/streams/php_stream_filter_api.h
- main/streams/php_stream_mmap.h
- main/streams/php_stream_plain_wrapper.h
- main/streams/php_stream_transport.h
- main/streams/php_stream_userspace.h
- main/streams/php_streams_int.h
- netware/sys/stat.h
- pear/CMD.php
- pear/PEAR.php
- pear/System.php
- pear/package.dtd
- pear/Archive/Tar.php
- pear/Console/Getopt.php
- pear/OS/Guess.php
- pear/PEAR/Autoloader.php
- pear/PEAR/Builder.php
- pear/PEAR/Command.php
- pear/PEAR/Common.php
- pear/PEAR/Config.php
- pear/PEAR/Dependency.php
- pear/PEAR/DependencyDB.php
- pear/PEAR/Downloader.php
- pear/PEAR/Installer.php
- pear/PEAR/Packager.php
- pear/PEAR/Registry.php
- pear/PEAR/Remote.php
- pear/PEAR/Command/Auth.php
- pear/PEAR/Command/Build.php
- pear/PEAR/Command/Common.php
- pear/PEAR/Command/Config.php
- pear/PEAR/Command/Install.php
- pear/PEAR/Command/Mirror.php
- pear/PEAR/Command/Package.php
- pear/PEAR/Command/Registry.php
- pear/PEAR/Command/Remote.php
- pear/PEAR/Frontend/CLI.php
- pear/scripts/pear.bat
- pear/scripts/pearcmd.php
- pear/scripts/pearwin.php
- sapi/activescript/classfactory.cpp
- sapi/activescript/php4activescript.h
- sapi/activescript/php4as_classfactory.h
- sapi/activescript/php4as_scriptengine.h
- sapi/activescript/scriptengine.cpp
- sapi/apache/mod_php5.h
- sapi/apache/php_apache_http.h
- sapi/apache2filter/php_apache.h
- sapi/apache2handler/php_apache.h
- sapi/apache_hooks/mod_php4.h
- sapi/cgi/php_getopt.h
- sapi/cli/php.1.in
- sapi/cli/php_getopt.h
- sapi/embed/php_embed.h
- sapi/phttpd/php_phttpd.h
- sapi/thttpd/php_thttpd.h
- sapi/webjames/php_webjames.h
- scripts/dev/conv_z_macros
- win32/crypt_win32.h
- win32/grp.h
- win32/md5crypt.h
- win32/php5dllts.rc2
- win32/php5ts.rc2
- win32/php5ts_cli.rc2
- win32/pwd.h
- win32/select.h
- win32/syslog.h
- win32/winutil.h:
- - Happy new year and PHP 5 for rest of the files too..
-
-2004-01-08 Wez Furlong <wez.php@thebrainroom.net>
-
- * ext/sqlite/tests/blankdb.inc
- ext/sqlite/tests/sqlite_oo_029.phpt:
- fix tests for win32
-
-2004-01-08 Jani Taskinen <jani.taskinen@kolumbus.fi>
-
- * ext/dba/dba_qdbm.c:
- correct header
-
- * header:
- Happy new year!
-
-2004-01-08 Wez Furlong <wez.php@thebrainroom.net>
-
- * ext/sqlite/sqlite.dsp:
- add new files to .dsp
-
- * ext/sqlite/config.w32
- ext/sqlite/libsqlite/src/sqlite.w32.h:
- Update win32 build for new version of libsqlite
-
-2004-01-08 Ilia Alshanetsky <ilia@prohost.org>
-
- * ext/sqlite/config.m4
- ext/sqlite/config.w32
- ext/sqlite/libsqlite/VERSION
- ext/sqlite/libsqlite/src/attach.c
- ext/sqlite/libsqlite/src/auth.c
- ext/sqlite/libsqlite/src/btree.c
- ext/sqlite/libsqlite/src/btree.h
- ext/sqlite/libsqlite/src/btree_rb.c
- ext/sqlite/libsqlite/src/build.c
- ext/sqlite/libsqlite/src/copy.c
- ext/sqlite/libsqlite/src/date.c
- ext/sqlite/libsqlite/src/delete.c
- ext/sqlite/libsqlite/src/encode.c
- ext/sqlite/libsqlite/src/expr.c
- ext/sqlite/libsqlite/src/func.c
- ext/sqlite/libsqlite/src/hash.c
- ext/sqlite/libsqlite/src/hash.h
- ext/sqlite/libsqlite/src/insert.c
- ext/sqlite/libsqlite/src/main.c
- ext/sqlite/libsqlite/src/opcodes.c
- ext/sqlite/libsqlite/src/opcodes.h
- ext/sqlite/libsqlite/src/os.c
- ext/sqlite/libsqlite/src/os.h
- ext/sqlite/libsqlite/src/pager.c
- ext/sqlite/libsqlite/src/pager.h
- ext/sqlite/libsqlite/src/parse.c
- ext/sqlite/libsqlite/src/parse.h
- ext/sqlite/libsqlite/src/parse.y
- ext/sqlite/libsqlite/src/pragma.c
- ext/sqlite/libsqlite/src/printf.c
- ext/sqlite/libsqlite/src/random.c
- ext/sqlite/libsqlite/src/select.c
- ext/sqlite/libsqlite/src/sqlite.h.in
- ext/sqlite/libsqlite/src/sqliteInt.h
- ext/sqlite/libsqlite/src/table.c
- ext/sqlite/libsqlite/src/tokenize.c
- ext/sqlite/libsqlite/src/trigger.c
- ext/sqlite/libsqlite/src/update.c
- ext/sqlite/libsqlite/src/util.c
- ext/sqlite/libsqlite/src/vacuum.c
- ext/sqlite/libsqlite/src/vdbe.c
- ext/sqlite/libsqlite/src/vdbe.h
- ext/sqlite/libsqlite/src/vdbeInt.h
- ext/sqlite/libsqlite/src/vdbeaux.c
- ext/sqlite/libsqlite/src/where.c:
- Upgrade bundled libsqlite to 2.8.9
-
-2004-01-08 Wez Furlong <wez.php@thebrainroom.net>
-
- * sapi/cgi/config.w32:
- fix fastcgi build
-
-2004-01-08 Andi Gutmans <andi@zend.com>
-
- * ZendEngine2/zend_ini_parser.y
- ZendEngine2/zend_ini_scanner.l
- ZendEngine2/zend_language_parser.y
- ZendEngine2/zend_language_scanner.l:
- - - A belated happy holidays (by two years)
-
- * TSRM/tsrm_nw.c
- TSRM/tsrm_virtual_cwd.c
- TSRM/tsrm_win32.c
- ext/bcmath/bcmath.c
- ext/bz2/bz2.c
- ext/calendar/cal_unix.c
- ext/calendar/calendar.c
- ext/calendar/easter.c
- ext/com_dotnet/com_com.c
- ext/com_dotnet/com_dotnet.c
- ext/com_dotnet/com_extension.c
- ext/com_dotnet/com_handlers.c
- ext/com_dotnet/com_iterator.c
- ext/com_dotnet/com_misc.c
- ext/com_dotnet/com_olechar.c
- ext/com_dotnet/com_saproxy.c
- ext/com_dotnet/com_typeinfo.c
- ext/com_dotnet/com_variant.c
- ext/com_dotnet/com_wrapper.c
- ext/cpdf/cpdf.c
- ext/ctype/ctype.c
- ext/curl/interface.c
- ext/curl/multi.c
- ext/curl/streams.c
- ext/dba/dba.c
- ext/dba/dba_cdb.c
- ext/dba/dba_db2.c
- ext/dba/dba_db3.c
- ext/dba/dba_db4.c
- ext/dba/dba_dbm.c
- ext/dba/dba_flatfile.c
- ext/dba/dba_gdbm.c
- ext/dba/dba_inifile.c
- ext/dba/dba_ndbm.c
- ext/dba/dba_qdbm.c
- ext/dba/libcdb/cdb.c
- ext/dba/libcdb/cdb_make.c
- ext/dba/libcdb/uint32.c
- ext/dba/libflatfile/flatfile.c
- ext/dba/libinifile/inifile.c
- ext/dbase/dbase.c
- ext/dbx/dbx.c
- ext/dbx/dbx_fbsql.c
- ext/dbx/dbx_mssql.c
- ext/dbx/dbx_mysql.c
- ext/dbx/dbx_oci8.c
- ext/dbx/dbx_odbc.c
- ext/dbx/dbx_pgsql.c
- ext/dbx/dbx_sqlite.c
- ext/dbx/dbx_sybasect.c
- ext/dio/dio.c
- ext/dom/attr.c
- ext/dom/cdatasection.c
- ext/dom/characterdata.c
- ext/dom/comment.c
- ext/dom/document.c
- ext/dom/documentfragment.c
- ext/dom/documenttype.c
- ext/dom/dom_iterators.c
- ext/dom/domconfiguration.c
- ext/dom/domerror.c
- ext/dom/domerrorhandler.c
- ext/dom/domexception.c
- ext/dom/domimplementation.c
- ext/dom/domimplementationlist.c
- ext/dom/domimplementationsource.c
- ext/dom/domlocator.c
- ext/dom/domstringlist.c
- ext/dom/element.c
- ext/dom/entity.c
- ext/dom/entityreference.c
- ext/dom/namednodemap.c
- ext/dom/namelist.c
- ext/dom/node.c
- ext/dom/nodelist.c
- ext/dom/notation.c
- ext/dom/php_dom.c
- ext/dom/processinginstruction.c
- ext/dom/string_extend.c
- ext/dom/text.c
- ext/dom/typeinfo.c
- ext/dom/userdatahandler.c
- ext/dom/xpath.c
- ext/exif/exif.c
- ext/fam/fam.c
- ext/fbsql/php_fbsql.c
- ext/fdf/fdf.c
- ext/filepro/filepro.c
- ext/ftp/ftp.c
- ext/ftp/php_ftp.c
- ext/gd/gd.c
- ext/gd/gd_ctx.c
- ext/gd/libgd/xbm.c
- ext/gettext/gettext.c
- ext/gmp/gmp.c
- ext/iconv/iconv.c
- ext/imap/php_imap.c
- ext/ingres_ii/ii.c
- ext/interbase/interbase.c
- ext/ircg/ircg.c
- ext/ircg/ircg_common.c
- ext/ircg/ircg_scanner.c
- ext/ircg/ircg_thttpd.c
- ext/ldap/ldap.c
- ext/mbstring/mb_gpc.c
- ext/mbstring/mbstring.c
- ext/mbstring/php_mbregex.c
- ext/mbstring/php_unicode.c
- ext/mcrypt/mcrypt.c
- ext/mcve/mcve.c
- ext/mhash/mhash.c
- ext/mime_magic/mime_magic.c
- ext/ming/ming.c
- ext/mnogosearch/php_mnogo.c
- ext/mono/php_mono.c
- ext/msql/php_msql.c
- ext/mssql/php_mssql.c
- ext/mysql/php_mysql.c
- ext/mysqli/mysqli.c
- ext/mysqli/mysqli_api.c
- ext/mysqli/mysqli_fe.c
- ext/mysqli/mysqli_nonapi.c
- ext/mysqli/mysqli_report.c
- ext/ncurses/ncurses.c
- ext/ncurses/ncurses_fe.c
- ext/ncurses/ncurses_functions.c
- ext/oci8/oci8.c
- ext/odbc/birdstep.c
- ext/odbc/php_odbc.c
- ext/openssl/openssl.c
- ext/openssl/xp_ssl.c
- ext/oracle/oracle.c
- ext/ovrimos/ovrimos.c
- ext/pcntl/pcntl.c
- ext/pcntl/php_signal.c
- ext/pcre/php_pcre.c
- ext/pcre/pcrelib/dftables.c
- ext/pcre/pcrelib/get.c
- ext/pcre/pcrelib/maketables.c
- ext/pcre/pcrelib/pcre.c
- ext/pcre/pcrelib/pcreposix.c
- ext/pcre/pcrelib/study.c
- ext/pdf/pdf.c
- ext/pfpro/pfpro.c
- ext/pgsql/pgsql.c
- ext/posix/posix.c
- ext/pspell/pspell.c
- ext/readline/readline.c
- ext/recode/recode.c
- ext/session/mod_files.c
- ext/session/mod_mm.c
- ext/session/mod_user.c
- ext/session/session.c
- ext/shmop/shmop.c
- ext/simplexml/simplexml.c
- ext/snmp/snmp.c
- ext/sockets/php_sockets_win.c
- ext/sockets/sockets.c
- ext/sqlite/sess_sqlite.c
- ext/sqlite/sqlite.c
- ext/standard/array.c
- ext/standard/assert.c
- ext/standard/base64.c
- ext/standard/basic_functions.c
- ext/standard/browscap.c
- ext/standard/crc32.c
- ext/standard/credits.c
- ext/standard/crypt.c
- ext/standard/css.c
- ext/standard/cyr_convert.c
- ext/standard/datetime.c
- ext/standard/dir.c
- ext/standard/dl.c
- ext/standard/dns.c
- ext/standard/exec.c
- ext/standard/file.c
- ext/standard/filestat.c
- ext/standard/filters.c
- ext/standard/flock_compat.c
- ext/standard/formatted_print.c
- ext/standard/fsock.c
- ext/standard/ftok.c
- ext/standard/ftp_fopen_wrapper.c
- ext/standard/head.c
- ext/standard/html.c
- ext/standard/http.c
- ext/standard/http_fopen_wrapper.c
- ext/standard/image.c
- ext/standard/incomplete_class.c
- ext/standard/info.c
- ext/standard/iptc.c
- ext/standard/lcg.c
- ext/standard/levenshtein.c
- ext/standard/link.c
- ext/standard/mail.c
- ext/standard/math.c
- ext/standard/md5.c
- ext/standard/metaphone.c
- ext/standard/microtime.c
- ext/standard/pack.c
- ext/standard/pageinfo.c
- ext/standard/php_fopen_wrapper.c
- ext/standard/proc_open.c
- ext/standard/quot_print.c
- ext/standard/rand.c
- ext/standard/reg.c
- ext/standard/scanf.c
- ext/standard/sha1.c
- ext/standard/soundex.c
- ext/standard/streamsfuncs.c
- ext/standard/string.c
- ext/standard/sunfuncs.c
- ext/standard/syslog.c
- ext/standard/type.c
- ext/standard/uniqid.c
- ext/standard/url.c
- ext/standard/url_scanner.c
- ext/standard/url_scanner_ex.c
- ext/standard/user_filters.c
- ext/standard/uuencode.c
- ext/standard/var.c
- ext/standard/var_unserializer.c
- ext/standard/versioning.c
- ext/sybase/php_sybase_db.c
- ext/sybase_ct/php_sybase_ct.c
- ext/sysvmsg/sysvmsg.c
- ext/sysvsem/sysvsem.c
- ext/sysvshm/sysvshm.c
- ext/tokenizer/tokenizer.c
- ext/wddx/wddx.c
- ext/xml/compat.c
- ext/xml/xml.c
- ext/xmlrpc/xmlrpc-epi-php.c
- ext/xsl/php_xsl.c
- ext/xsl/xsltprocessor.c
- ext/yaz/php_yaz.c
- ext/yp/yp.c
- ext/zlib/zlib.c
- ext/zlib/zlib_fopen_wrapper.c
- main/SAPI.c
- main/fopen_wrappers.c
- main/internal_functions_nw.c
- main/internal_functions_win32.c
- main/main.c
- main/network.c
- main/output.c
- main/php_content_types.c
- main/php_ini.c
- main/php_logos.c
- main/php_open_temporary_file.c
- main/php_scandir.c
- main/php_sprintf.c
- main/php_ticks.c
- main/php_variables.c
- main/reentrancy.c
- main/rfc1867.c
- main/safe_mode.c
- main/snprintf.c
- main/spprintf.c
- main/strlcat.c
- main/strlcpy.c
- main/streams/cast.c
- main/streams/filter.c
- main/streams/memory.c
- main/streams/mmap.c
- main/streams/plain_wrapper.c
- main/streams/streams.c
- main/streams/transports.c
- main/streams/userspace.c
- main/streams/xp_socket.c
- netware/start.c
- sapi/activescript/php4activescript.c
- sapi/aolserver/aolserver.c
- sapi/apache/libpre.c
- sapi/apache/mod_php5.c
- sapi/apache/php_apache.c
- sapi/apache/sapi_apache.c
- sapi/apache2filter/apache_config.c
- sapi/apache2filter/php_functions.c
- sapi/apache2filter/sapi_apache2.c
- sapi/apache2handler/apache_config.c
- sapi/apache2handler/mod_php5.c
- sapi/apache2handler/php_functions.c
- sapi/apache2handler/sapi_apache2.c
- sapi/apache_hooks/mod_php4.c
- sapi/apache_hooks/php_apache.c
- sapi/apache_hooks/sapi_apache.c
- sapi/caudium/caudium.c
- sapi/cgi/cgi_main.c
- sapi/cgi/getopt.c
- sapi/cli/getopt.c
- sapi/cli/php_cli.c
- sapi/embed/php_embed.c
- sapi/isapi/php4isapi.c
- sapi/milter/php_milter.c
- sapi/nsapi/nsapi.c
- sapi/phttpd/phttpd.c
- sapi/pi3web/pi3web_sapi.c
- sapi/roxen/roxen.c
- sapi/thttpd/thttpd.c
- sapi/tux/php_tux.c
- sapi/webjames/webjames.c
- win32/crypt_win32.c
- win32/md5crypt.c
- win32/pwd.c
- win32/select.c
- win32/winutil.c:
- - A belated happy holidays and PHP 5
-
-2004-01-08 Jani Taskinen <jani.taskinen@kolumbus.fi>
-
- * win32/php_modules.dsw:
- - remove non-existing project
-
- * (PHP_4_3)
- ext/imap/php_imap.c:
- MFH: Added missing constants (bug #26831)
-
- * ext/imap/php_imap.c:
- Added missing constants (bug #26831)
-
-2004-01-08 Frank M. Kromann <frank@kromann.info>
-
- * win32/php5dllts.dsp:
- Adding new com_dotnet source files to project
-
-2004-01-07 Jani Taskinen <jani.taskinen@kolumbus.fi>
-
- * NEWS
- NEWS:
- BFN
-
-2004-01-07 Wez Furlong <wez.php@thebrainroom.net>
-
- * ext/gd/config.w32:
- win32 build:
- gd should build shared by default
- don't use php.ini when running mkdist.php
-
- * sapi/activescript/config.w32
- sapi/activescript/php4activescript.def
- sapi/activescript/scriptengine.cpp:
- Make activescript SAPI build under php5.
- Untested...!
-
- * ext/com_dotnet/com_com.c
- ext/com_dotnet/com_dotnet.c
- ext/com_dotnet/com_extension.c
- ext/com_dotnet/com_handlers.c
- ext/com_dotnet/com_iterator.c
- ext/com_dotnet/com_misc.c
- ext/com_dotnet/com_olechar.c
- ext/com_dotnet/com_saproxy.c
- ext/com_dotnet/com_typeinfo.c
- ext/com_dotnet/com_variant.c
- ext/com_dotnet/com_wrapper.c
- ext/com_dotnet/config.w32
- ext/com_dotnet/php_com_dotnet.h
- ext/com_dotnet/php_com_dotnet_internal.h:
- Port other major parts of PHP 4 COM extension into PHP 5 com_dotnet
- extension.
- This enables:
- - iteration of SafeArray types via foreach()
- - proxying of multi-dimensional SafeArray types so that multi-dimension
- array accesses work (untested!)
- - Fix COM exceptions, and expose them as their own class of exception
- "com_exception"
- - auto typelib file import (com.typelib_file ini option)
- - event sinking
- - wrapper to map PHP objects to COM
- - fix mapping of variant values to PHP values
-
-
- * ext/oci8/config.w32
- ext/oracle/config.w32
- ext/pspell/config.w32
- ext/zlib/config.w32
- sapi/nsapi/config.w32:
- glob-ify lib checks; this simplifies writing of config.w32 files a little.
-
-2004-01-07 Rob Richards <rrichards@ctindustries.net>
-
- * ext/dom/document.c
- ext/dom/tests/dom_xinclude.phpt:
- Fix bug #26815 (foreach (DOM) childnodes causes error using Xinclude)
- update xinclude test
-
-2004-01-07 Ard Biesheuvel <a.k.biesheuvel@ewi.tudelft.nl>
-
- * (PHP_4_3)
- ext/interbase/interbase.c:
- MFH: Let DB handle NULL params, fixes bug #26777
-
- * ext/interbase/interbase.c:
- Let DB handle NULL params, fixes bug #26777
-
-2004-01-07 Marcus Boerger <marcus.boerger@post.rwth-aachen.de>
-
- * ZendEngine2/zend_execute.c:
- Reimplement part of Bug #24608 that was reverted too
-
- * ZendEngine2/zend_execute.c:
- Revert patch that allowed to call sttaic methods via $method()
-
-2004-01-06 Ilia Alshanetsky <ilia@prohost.org>
-
- * ZendEngine2/zend_mm.c:
- Check if realloc() succeeds or not. (Noticed by Andrey)
-
-2004-01-06 Zeev Suraski <zeev@zend.com>
-
- * ext/standard/http.c:
- Fix C++ style declaration
-
-2004-01-06 Ilia Alshanetsky <ilia@prohost.org>
-
- * NEWS
- ext/standard/http.c
- ext/standard/php_http.h
- ext/standard/tests/strings/bug26817.phpt
- ext/standard/tests/strings/bug26819.phpt:
- Fixed bug #26819 (http_build_query() crashes on NULL output).
- Fixed bug #26817 (http_build_query() does not handle private & protected
- object properties correctly).
-
- * ext/standard/rand.c:
- Revert proto 'fix'.
-
-2004-01-06 Moriyoshi Koizumi <moriyoshi@at.wakwak.com>
-
- * ext/iconv/iconv.c:
- Prevent a character from being wrongly doubled in the buffer.
-
-2004-01-06 Ilia Alshanetsky <ilia@prohost.org>
-
- * ext/standard/rand.c:
- Proto fixes.
-
-2004-01-06 Marcus Boerger <marcus.boerger@post.rwth-aachen.de>
-
- * ZendEngine2/tests/bug26802.phpt:
- Update
-
-2004-01-05 Marcus Boerger <marcus.boerger@post.rwth-aachen.de>
-
- * ZendEngine2/zend_execute.c
- ZendEngine2/tests/bug26802.phpt:
- Fixed bug #26802
-
- * ZendEngine2/tests/bug26802.phpt:
- Fix test
-
- * ZendEngine2/tests/bug26801.phpt
- ZendEngine2/tests/bug26802.phpt:
- Add new test
-
-2004-01-05 Georg Richter <phpinfo@t-online.de>
-
- * (PHP_4_3)
- ext/mysql/php_mysql.c
- ext/mysql/php_mysql.h:
- s/2003/2004 :)
-
-2004-01-05 Jani Taskinen <jani.taskinen@kolumbus.fi>
-
- * NEWS:
- BFN
-
-2004-01-05 Marcus Boerger <marcus.boerger@post.rwth-aachen.de>
-
- * ZendEngine2/tests/bug26696.phpt:
- Update test
-
-2004-01-05 Stanislav Malyshev <stas@zend.com>
-
- * ZendEngine2/zend_API.c:
- Fix bug #26543 - check parent:: and self:: in class names
-
- * ZendEngine2/zend_execute.c
- ZendEngine2/zend_object_handlers.c:
- Bug #24608 - fix interaction between __accessors and get_property_ptr
-
-2004-01-05 Andrey Hristov <php@hristov.com>
-
- * README.PHP4-TO-PHP5-THIN-CHANGES:
- another example
-
-2004-01-04 Ilia Alshanetsky <ilia@prohost.org>
-
- * (PHP_4_3)
- ext/crack/crack.c:
- Fixed compile warnings.
- Fixed crash in crack_closedict();
- Switched from zend_error() to php_error_docref();
-
-2004-01-04 Moriyoshi Koizumi <moriyoshi@at.wakwak.com>
-
- * ext/standard/tests/file/bug26615.phpt:
- "seq" isn't available for all platforms.
-
-2004-01-03 Edin Kadribasic <edink@emini.dk>
-
- * (PHP_4_3)
- NEWS:
- BFN
-
- * (PHP_4_3)
- NEWS:
- More proper news format.
-
- * (PHP_4_3)
- NEWS
- sapi/cli/php_cli.c:
- MFH: cli overrides php.ini and switches output buffering off.
-
-2004-01-03 Jan Lehnardt <jan@dasmoped.net>
-
- * scripts/phpize.in:
- - remove unneeded subroutine call
-
-2004-01-03 Derick Rethans <php@derickrethans.nl>
-
- * .cvsignore:
- - Added test results to .cvsignore file
-
- * NEWS
- ZendEngine2/zend.c
- ZendEngine2/zend_API.c
- ZendEngine2/zend_compile.c
- ZendEngine2/zend_compile.h
- ZendEngine2/zend_execute.c
- ZendEngine2/zend_object_handlers.c
- ZendEngine2/zend_reflection_api.c
- ext/standard/basic_functions.c
- ext/standard/var.c:
- - Fixed var_export() to show public, protected and private modifiers
- properly.
- - Exported (un)mangle_property_name.
-
- * scripts/phpize.in:
- - Show the API numbers again while phpizing.
-
-2004-01-03 Ilia Alshanetsky <ilia@prohost.org>
-
- * ext/standard/file.c:
- s/then/than/ Thanks Jani & Andi
-
-2004-01-02 Edin Kadribasic <edink@emini.dk>
-
- * sapi/cli/php_cli.c:
- Disable output buffering in CLI overriding php.ini setting.
- Fixes #26755.
-
-2004-01-02 Andrei Zmievski <andrei@gravitonic.com>
-
- * ZendEngine2/zend_default_classes.c:
- Do not show exception message if it's empty.
-
-
-2004-01-02 Jani Taskinen <jani.taskinen@kolumbus.fi>
-
- * ext/oci8/oci8.c
- ext/oci8/php_oci8.h:
- ws + cs
-
- * ext/oci8/oci8.c:
- another ZTS fix
-
-2004-01-02 Marcus Boerger <marcus.boerger@post.rwth-aachen.de>
-
- * NEWS:
- BFN
-
- * ext/standard/var_unserializer.c
- ext/standard/var_unserializer.re:
- Bugfix #26762 unserialize() produces lowercase classnames
-
- * ext/standard/tests/serialize/bug26762.phpt:
- Add new test
-
-2004-01-02 Jani Taskinen <jani.taskinen@kolumbus.fi>
-
- * NEWS:
- dotdotdot..
-
- * ext/oci8/oci8.c:
- fix ZTS build
-
-2004-01-02 Ilia Alshanetsky <ilia@prohost.org>
-
- * (PHP_4_3)
- NEWS
- ext/standard/file.c:
- MFH: Fixed bug #26752 (Silent unterminated loop when length parameter for
- fgets(), fread() and fgetss() is 0).
-
- * ext/standard/file.c:
- Fixed bug #26752 (Silent unterminated loop when length parameter for
- fgets(), fread() and fgetss() is 0).
-
-2004-01-01 Marcus Boerger <marcus.boerger@post.rwth-aachen.de>
-
- * ext/recode/recode.c:
- Fix ZTS build
-
-2004-01-01 Georg Richter <phpinfo@t-online.de>
-
- * ext/mysqli/mysqli_prop.c:
- fixed bug(s) in macro call for statement properties
-
- * ext/mysqli/mysqli_prop.c:
- Added Macro for longlong values
- added property stmt->affected_rows
-
-2004-01-01 Derick Rethans <php@derickrethans.nl>
-
- * ChangeLog
- ChangeLog.2003.gz:
- - Compress 2003 changelog
-
diff --git a/ChangeLog.1999.gz b/ChangeLog.1999.gz
deleted file mode 100644
index 9d92dda73f..0000000000
--- a/ChangeLog.1999.gz
+++ /dev/null
Binary files differ
diff --git a/ChangeLog.2000.gz b/ChangeLog.2000.gz
deleted file mode 100644
index 91cd3b2425..0000000000
--- a/ChangeLog.2000.gz
+++ /dev/null
Binary files differ
diff --git a/ChangeLog.2001.gz b/ChangeLog.2001.gz
deleted file mode 100644
index 4f0a6f8241..0000000000
--- a/ChangeLog.2001.gz
+++ /dev/null
Binary files differ
diff --git a/ChangeLog.2002.gz b/ChangeLog.2002.gz
deleted file mode 100644
index 6a8c3bea44..0000000000
--- a/ChangeLog.2002.gz
+++ /dev/null
Binary files differ
diff --git a/ChangeLog.2003.gz b/ChangeLog.2003.gz
deleted file mode 100644
index 0cb1d569b1..0000000000
--- a/ChangeLog.2003.gz
+++ /dev/null
Binary files differ
diff --git a/EXTENSIONS b/EXTENSIONS
deleted file mode 100644
index f61742fbf6..0000000000
--- a/EXTENSIONS
+++ /dev/null
@@ -1,462 +0,0 @@
- List of PHP maintainers
- =======================
-
-Maintenance legend
-------------------
- Supported: Someone is actually paid to look after this.
- Maintained: Someone actually looks after it.
- Odd Fixes: It has a maintainer but they don't have time to do
- much other than throw the odd patch in. See below.
- Orphan: No current maintainer [but maybe you could take the
- role as you write your new code].
- Obsolete: Old code. Something tagged obsolete generally means
- it has been replaced by a better system and you
- should be using that.
- Unknown: Not known at this time.
-
-Status legend
--------------
- Working: Working under both Windows and Unix.
- Windows: Working only under Windows.
- Unix: Working only under Unix.
- Experimental: Under development or initial release.
- Not Working: Not working.
- Unknown: Status unknown.
-
-
-== Server APIs ==
-
--------------------------------------------------------------------------------
-EXTENSION: activescript
-PRIMARY MAINTAINER: Wez Furlong <wez@php.net>
-MAINTENANCE: Odd Fixes
-STATUS: Experimental
--------------------------------------------------------------------------------
-EXTENSION: aolserver
-MAINTENANCE: Unknown
-STATUS: Unknown
--------------------------------------------------------------------------------
-EXTENSION: apache
-PRIMARY MAINTAINER: Rasmus Lerdorf <rasmus@php.net>
-MAINTENANCE: Maintained
-STATUS: Working
--------------------------------------------------------------------------------
-EXTENSION: apache2handler / apache2filter
-PRIMARY MAINTAINER: Aaron Bannert <aaron@php.net>
-MAINTENANCE: Maintained
-STATUS: Experimental
--------------------------------------------------------------------------------
-EXTENSION: apache_hooks
-MAINTENANCE: Unknown
-STATUS: Unknown
--------------------------------------------------------------------------------
-EXTENSION: caudium
-MAINTENANCE: Unknown
-STATUS: Unknown
--------------------------------------------------------------------------------
-EXTENSION: cgi
-MAINTENANCE: Unknown
-STATUS: Working
--------------------------------------------------------------------------------
-EXTENSION: cli
-MAINTENANCE: Marcus Boerger <helly@php.net>, Edin Kadribasic <edink@php.net>
-STATUS: Working
-SINCE: 4.3.0
--------------------------------------------------------------------------------
-EXTENSION: embed
-PRIMARY MAINTAINER: Edin Kadribasic <edink@php.net>
-MAINTENANCE: Maintained
-STATUS: Working
--------------------------------------------------------------------------------
-EXTENSION: isapi
-MAINTENANCE: Unknown
-STATUS: Working
--------------------------------------------------------------------------------
-EXTENSION: milter
-MAINTENANCE: Unknown
-STATUS: Unknown
--------------------------------------------------------------------------------
-EXTENSION: nsapi
-PRIMARY MAINTAINER: Uwe Schindler <thetaphi@php.net>
-MAINTENANCE: Maintained
-STATUS: Working
--------------------------------------------------------------------------------
-EXTENSION: phttpd
-MAINTENANCE: Unknown
-STATUS: Unknown
--------------------------------------------------------------------------------
-EXTENSION: pi3web
-MAINTENANCE: Unknown
-STATUS: Unknown
--------------------------------------------------------------------------------
-EXTENSION: roxen
-MAINTENANCE: Unknown
-STATUS: Unknown
--------------------------------------------------------------------------------
-EXTENSION: thttpd
-PRIMARY MAINTAINER: Sascha Schumann <sascha@schumann.cx>
-MAINTENANCE: Odd fixes
-STATUS: Working
--------------------------------------------------------------------------------
-EXTENSION: tux
-MAINTENANCE: Unknown
-STATUS: Unknown
--------------------------------------------------------------------------------
-EXTENSION: webjames
-PRIMARY MAINTAINER: Alex Waugh <alex@alexwaugh.com>
-MAINTENANCE: Maintained
-STATUS: Experimental
--------------------------------------------------------------------------------
-
-
-== Database extensions ==
-
--------------------------------------------------------------------------------
-EXTENSION: dba
-PRIMARY MAINTAINER: Marcus Börger <helly@php.net>
-MAINTENANCE: Maintained
-STATUS: Working
-COMMENT: DBM abstraction for db2, db3, db4, dbm, ndbm, gdbm, ini
--------------------------------------------------------------------------------
-EXTENSION: dbase
-MAINTENANCE: Orphaned
-STATUS: Working
--------------------------------------------------------------------------------
-EXTENSION: dbx
-PRIMARY MAINTAINER: Marc Boeren <M.Boeren@guidance.nl>
-MAINTENANCE: Maintained
-STATUS: Working
-SINCE: 4.0.6
-COMMENT: DB abstraction for odbc, mysql, pgsql, mssql, fbsql and more, see documentation
--------------------------------------------------------------------------------
-EXTENSION: filepro
-MAINTENANCE: Unknown
-STATUS: Unknown
--------------------------------------------------------------------------------
-EXTENSION: hwapi
-PRIMARY MAINTAINER: Uwe Steinmann <steinm@php.net>
-MAINTENANCE: Unknown
-STATUS: Unknown
--------------------------------------------------------------------------------
-EXTENSION: informix
-PRIMARY MAINTAINER: Danny Heijl <Danny.Heijl@cevi.be>
-MAINTENANCE: Maintained
-STATUS: Working
--------------------------------------------------------------------------------
-EXTENSION: ingres_ii
-PRIMARY MAINTAINER: David Hénot <henot@php.net>
-MAINTENANCE: Maintained
-STATUS: Experimental
-SINCE: 4.0.2
--------------------------------------------------------------------------------
-EXTENSION: interbase
-PRIMARY MAINTAINER: Ard Biesheuvel <ard@ard.nu>, Jouni Ahto <jouni.ahto@exdec.fi>
-MAINTENANCE: Maintained
-STATUS: Working
--------------------------------------------------------------------------------
-EXTENSION: msql
-MAINTENANCE: Unknown
-STATUS: Working
--------------------------------------------------------------------------------
-EXTENSION: mssql
-PRIMARY MAINTAINER: Frank M. Kromann <fmk@swwwing.com>
-MAINTENANCE: Maintained
-STATUS: Working
-COMMENT: Tested on phpts and isapi versions
--------------------------------------------------------------------------------
-EXTENSION: mysql
-PRIMARY MAINTAINER: Zak Greant <zak@mysql.com>, Georg Richter <georg@php.net>
-MAINTENANCE: Maintained
-STATUS: Working
--------------------------------------------------------------------------------
-EXTENSION: mysqli
-PRIMARY MAINTAINER: Georg Richter <georg@php.net>
-MAINTENANCE: Maintained
-STATUS: Experimental
-SINCE: 5.0
--------------------------------------------------------------------------------
-EXTENSION: pgsql
-PRIMARY MAINTAINER: Marcus Boerger <helly@php.net>, Yasuo Ohgaki <yohgaki@php.net>
-MAINTENANCE: Maintained
-STATUS: Working
-COMMENT: Use PostgreSQL 7.0.x or later. PostgreSQL 6.5.3 or less have fatal bug.
--------------------------------------------------------------------------------
-EXTENSION: sqlite
-PRIMARY MAINTAINER: Marcus Boerger <helly@php.net>, Wez Furlong <wez@php.net>
-MAINTENANCE: Maintained
-STATUS: Working
-SINCE: 5.0 (Since 4.3.2 in PECL)
-COMMENT: Integrates SQLite embeddable SQL database engine.
--------------------------------------------------------------------------------
-EXTENSION: sybase
-MAINTENANCE: Unknown
-STATUS: Not Working
--------------------------------------------------------------------------------
-EXTENSION: sybase_ct
-MAINTENANCE: Unknown
-STATUS: Working
--------------------------------------------------------------------------------
-EXTENSION: oci8
-PRIMARY MAINTAINER: Antony Dovgal <tony2001@php.net>
-MAINTENANCE: Maintained
-STATUS: Working
--------------------------------------------------------------------------------
-EXTENSION: odbc
-PRIMARY MAINTAINER: Daniel R. Kalowsky <kalowsky@php.net>
-MAINTENANCE: Maintained
-STATUS: Working
-COMMENT: Working
--------------------------------------------------------------------------------
-EXTENSION: oracle
-MAINTENANCE: Orphaned
-STATUS: Working
-COMMENT: Using the new OCI8 driver is encouraged where possible.
--------------------------------------------------------------------------------
-
-
-== XML extensions ==
-
--------------------------------------------------------------------------------
-EXTENSION: dom
-PRIMARY MAINTAINER: Christian Stocker <chregu@php.net>, Rob Richards <rrichards@php.net>, Marcus Boerger <helly@php.net>
-MAINTENANCE: Maintained
-STATUS: Working
-SINCE: 5.0
--------------------------------------------------------------------------------
-EXTENSION: simplexml
-PRIMARY MAINTAINER: Sterling Hughes <sterling@php.net>
-MAINTENANCE: Maintained
-STATUS: Working
-SINCE: 5.0
--------------------------------------------------------------------------------
-EXTENSION: wddx
-PRIMARY MAINTAINER: Andrei Zmievski <andrei@php.net>
-MAINTENANCE: Maintained
-STATUS: Working
--------------------------------------------------------------------------------
-EXTENSION: xml
-PRIMARY MAINTAINER: Thies C. Arntzen <thies@thieso.net>
-MAINTENANCE: Maintained
-STATUS: Working
--------------------------------------------------------------------------------
-EXTENSION: xmlrpc
-PRIMARY MAINTAINER: Dan Libby
-MAINTENANCE: UNKNOWN
-STATUS: Experimental
--------------------------------------------------------------------------------
-EXTENSION: xsl
-PRIMARY MAINTAINER: Christian Stocker <chregu@php.net>, Rob Richards <rrichards@php.net>
-MAINTENANCE: Maintained
-STATUS: Working
-SINCE: 5.0
--------------------------------------------------------------------------------
-
-
-== Other extensions ==
-
--------------------------------------------------------------------------------
-EXTENSION: bcmath
-MAINTENANCE: Unknown
-STATUS: Unknown
--------------------------------------------------------------------------------
-EXTENSION: bz2
-PRIMARY MAINTAINER: Hartmut Holzgraefe <hholzgra@php.net>
-MAINTENANCE: Odd Fixes
-STATUS: Working
-SINCE: 4.0.3
--------------------------------------------------------------------------------
-EXTENSION: dio
-MAINTENANCE: Orphaned
-STATUS: Working
-SINCE: 4.0.6
--------------------------------------------------------------------------------
-EXTENSION: calendar
-PRIMARY MAINTAINER: Hartmut Holzgraefe <hholzgra@php.net>
-MAINTENANCE: Odd Fixes
-STATUS: Working
--------------------------------------------------------------------------------
-EXTENSION: com_dotnet
-PRIMARY MAINTAINER: Wez Furlong <wez@php.net>
-MAINTENANCE: Maintained
-STATUS: Windows
-SINCE: 5.0
--------------------------------------------------------------------------------
-EXTENSION: cpdf
-PRIMARY MAINTAINER: Uwe Steinmann <steinm@php.net>
-MAINTENANCE: Maintained
-STATUS: Working
--------------------------------------------------------------------------------
-EXTENSION: ctype
-PRIMARY MAINTAINER: Hartmut Holzgraefe <hholzgra@php.net>
-MAINTENANCE: Maintained
-STATUS: Working
--------------------------------------------------------------------------------
-EXTENSION: curl
-PRIMARY MAINTAINER: Sterling Hughes <sterling@php.net>
-MAINTENANCE: Maintained
-STATUS: Working
-SINCE: 4.0.2
--------------------------------------------------------------------------------
-EXTENSION: exif
-PRIMARY MAINTAINER: Marcus Boerger <helly@php.net>
-MAINTENANCE: Maintained
-STATUS: Working
-SINCE: 4.2
--------------------------------------------------------------------------------
-EXTENSION: fdf
-PRIMARY MAINTAINER: Uwe Steinmann <steinm@php.net>
-MAINTENANCE: Maintained
-STATUS: Unknown
--------------------------------------------------------------------------------
-EXTENSION: ftp
-PRIMARY MAINTAINER: Stefan Esser (sesser@php.net)
-MAINTENANCE: Maintained
-STATUS: Working
--------------------------------------------------------------------------------
-EXTENSION: gd
-PRIMARY MAINTAINER: Rasmus Lerdorf <rasmus@php.net>
-MAINTENANCE: Maintained
-STATUS: Working
--------------------------------------------------------------------------------
-EXTENSION: gettext
-MAINTENANCE: Unknown
-STATUS: Working
--------------------------------------------------------------------------------
-EXTENSION: gmp
-MAINTENANCE: Unknown
-STATUS: Unknown
-SINCE: 4.0.4
--------------------------------------------------------------------------------
-EXTENSION: iconv
-PRIMARY MAINTAINER: Moriyoshi Koizumi <moriyoshi@php.net>
-MAINTENANCE: Maintained
-STATUS: Working
--------------------------------------------------------------------------------
-EXTENSION: imap
-PRIMARY MAINTAINER: Chuck Hagenbuch <chuck@horde.org>
-MAINTENANCE: Odd Fixes
-STATUS: Working
--------------------------------------------------------------------------------
-EXTENSION: ldap
-PRIMARY MAINTAINER: Stig Venaas <venaas@php.net>
-MAINTENANCE: Maintained
-STATUS: Working
--------------------------------------------------------------------------------
-EXTENSION: mbstring
-PRIMARY MAINTAINER: Rui Hirokawa <hirokawa@php.net>
-MAINTENANCE: Maintained
-STATUS: Working
--------------------------------------------------------------------------------
-EXTENSION: mcrypt
-PRIMARY MAINTAINER: Derick Rethans <derick@derickrethans.nl>
-MAINTENANCE: Maintained
-STATUS: Working
--------------------------------------------------------------------------------
-EXTENSION: mhash
-PRIMARY MAINTAINER: Sascha Schumann <sascha@schumann.cx>
-MAINTENANCE: Maintained
-STATUS: Working
--------------------------------------------------------------------------------
-EXTENSION: msession
-PRIMARY MAINTAINER Mark L. Woodward mlwmohawk@mohawksoft.com
-MAINTENANCE: Maintained
-STATUS: Working/Experimental
-COMMENT: Tested on Linux, should work on other UNIX platforms. Backend server code can compile under Windows.
--------------------------------------------------------------------------------
-EXTENSION: openssl
-PRIMARY MAINTAINER: Wez Furlong <wez@php.net>
-MAINTENANCE: Maintained
-STATUS: Experimental
-SINCE: 4.0.4
--------------------------------------------------------------------------------
-EXTENSION: pcre
-PRIMARY MAINTAINER: Andrei Zmievski <andrei@php.net>
-MAINTENANCE: Maintained
-STATUS: Working
--------------------------------------------------------------------------------
-EXTENSION: pdf
-PRIMARY MAINTAINER: Uwe Steinmann <steinm@php.net>
-MAINTENANCE: Maintained
-STATUS: Working
--------------------------------------------------------------------------------
-EXTENSION: pfpro
-PRIMARY MAINTAINER: David Croft <david@infotrek.co.uk>
-MAINTENANCE: Maintained
-STATUS: Working
-SINCE: 4.0.2
--------------------------------------------------------------------------------
-EXTENSION: posix
-PRIMARY MAINTAINER: Kristian Köhntopp <kris@koehntopp.de>
-MAINTENANCE: Maintained
-STATUS: Working
--------------------------------------------------------------------------------
-EXTENSION: pspell
-PRIMARY MAINTAINER: Vlad Krupin <phpdevel@echospace.com>
-MAINTENANCE: Unknown
-STATUS: Unknown
-SINCE: 4.0.2
--------------------------------------------------------------------------------
-EXTENSION: readline
-MAINTENANCE: Unknown
-STATUS: Unknown
--------------------------------------------------------------------------------
-EXTENSION: recode
-PRIMARY MAINTAINER: Kristian Köhntopp <kris@koehntopp.de>
-MAINTENANCE: Maintained
-STATUS: Working
--------------------------------------------------------------------------------
-EXTENSION: session
-PRIMARY MAINTAINER: Sascha Schumann <sascha@schumann.cx>
-MAINTENANCE: Maintained
-STATUS: Working
--------------------------------------------------------------------------------
-EXTENSION: shmop
-PRIMARY MAINTAINER: Ilia Alshanetsky <iliaa@php.net>
-MAINTENANCE: Maintained
-STATUS: Experimental
-SINCE: 4.0.3
--------------------------------------------------------------------------------
-EXTENSION: snmp
-PRIMARY MAINTAINER: Rasmus Lerdorf <rasmus@php.net>
-MAINTENANCE: Odd Fixes
-STATUS: Working
--------------------------------------------------------------------------------
-EXTENSION: sockets
-PRIMARY MAINTAINER: Chris Vandomelen <chrisv@b0rked.dhs.org>
-MAINTENANCE: Maintained
-STATUS: Experimental
-SINCE: 4.0.2
--------------------------------------------------------------------------------
-EXTENSION: spl
-PRIMARY MAINTAINER: Marcus Boerger <helly@php.net>
-MAINTENANCE: Maintained
-STATUS: Working
-SINCE: 5.0.0
--------------------------------------------------------------------------------
-EXTENSION: sysvmsg
-MAINTENANCE: Unknown
-STATUS: Unknown
--------------------------------------------------------------------------------
-EXTENSION: sysvsem
-MAINTENANCE: Unknown
-STATUS: Unknown
--------------------------------------------------------------------------------
-EXTENSION: sysvshm
-MAINTENANCE: Unknown
-STATUS: Working
--------------------------------------------------------------------------------
-EXTENSION: yaz
-PRIMARY MAINTAINER: Adam Dickmeiss <adam@indexdata.dk>
-MAINTENANCE: Maintained
-STATUS: Unknown
-SINCE: 4.0.1
--------------------------------------------------------------------------------
-EXTENSION: yp
-MAINTENANCE: Unknown
-STATUS: Unknown
--------------------------------------------------------------------------------
-EXTENSION: zlib
-PRIMARY MAINTAINER: Stefan Roehrich <sr@linux.de>
-MAINTENANCE: Maintained
-STATUS: Working
--------------------------------------------------------------------------------
diff --git a/INSTALL b/INSTALL
deleted file mode 100644
index 7775bf7594..0000000000
--- a/INSTALL
+++ /dev/null
@@ -1,1341 +0,0 @@
-
-Installing PHP
- _________________________________________________________________
-
- Table of Contents
- 1. General Installation Considerations
- 2. Installation on Mac OS X
-
- Using Packages
- Compiling for OS X Server
- Compiling for MacOS X Client
-
- 3. Installation on Unix systems
-
- Gentoo installation notes
- HP-UX specific installation notes
- OpenBSD installation notes
- Solaris specific installation tips
- Apache 1.3.x on Unix systems
- Apache 2.0 on Unix systems
- Caudium
- fhttpd related notes
- Sun, iPlanet and Netscape servers on Sun Solaris
- CGI and commandline setups
-
- 4. Problems?
-
- Read the FAQ
- Other problems
- Bug reports
-
- 5. Runtime Configuration
-
- The configuration file
- How to change configuration settings
- _________________________________________________________________
-
-Chapter 1. General Installation Considerations
-
- Before starting the installation, first you need to know what do you
- want to use PHP for. There are three main fields you can use PHP, as
- described in the What can PHP do? section:
-
- * Server-side scripting
- * Command line scripting
- * Client-side GUI applications
-
- For the first and most common form, you need three things: PHP itself,
- a web server and a web browser. You probably already have a web
- browser, and depending on your operating system setup, you may also
- have a web server (e.g. Apache on Linux and MacOS X; IIS on Windows).
- You may also rent webspace at a company. This way, you don't need to
- set up anything on your own, only write your PHP scripts, upload it to
- the server you rent, and see the results in your browser.
-
- While setting up the server and PHP on your own, you have two choices
- for the method of connecting PHP to the server. For many servers PHP
- has a direct module interface (also called SAPI). These servers
- include Apache, Microsoft Internet Information Server, Netscape and
- iPlanet servers. Many other servers have support for ISAPI, the
- Microsoft module interface (OmniHTTPd for example). If PHP has no
- module support for your web server, you can always use it as a CGI or
- FastCGI processor. This means you set up your server to use the CGI
- executable of PHP to process all PHP file requests on the server.
-
- If you are also interested to use PHP for command line scripting (e.g.
- write scripts autogenerating some images for you offline, or
- processing text files depending on some arguments you pass to them),
- you always need the command line executable. For more information,
- read the section about writing command line PHP applications. In this
- case, you need no server and no browser.
-
- With PHP you can also write desktop GUI applications using the PHP-GTK
- extension. This is a completely different approach than writing web
- pages, as you do not output any HTML, but manage windows and objects
- within them. For more information about PHP-GTK, please visit the site
- dedicated to this extension. PHP-GTK is not included in the official
- PHP distribution.
-
- From now on, this section deals with setting up PHP for web servers on
- Unix and Windows with server module interfaces and CGI executables.
- You will also find information on the command line executable in the
- following sections.
-
- PHP source code and binary distributions for Windows can be found at
- http://www.php.net/downloads.php. We recommend you to choose a mirror
- nearest to you for downloading the distributions.
- _________________________________________________________________
-
-Chapter 2. Installation on Mac OS X
-
- This section contains notes and hints specific to installing PHP on
- Mac OS X. There are two slightly different versions of Mac OS X,
- Client and Server, our manual deals with installing PHP on both
- systems. Note that PHP is not available for MacOS 9 and earlier
- versions.
- _________________________________________________________________
-
-Using Packages
-
- There are a few pre-packaged and pre-compiled versions of PHP for Mac
- OS X. This can help in setting up a standard configuration, but if you
- need to have a different set of features (such as a secure server, or
- a different database driver), you may need to build PHP and/or your
- web server yourself. If you are unfamiliar with building and compiling
- your own software, it's worth checking whether somebody has already
- built a packaged version of PHP with the features you need.
- _________________________________________________________________
-
-Compiling for OS X Server
-
- Mac OS X Server install.
-
- 1. Get the latest distributions of Apache and PHP.
- 2. Untar them, and run the configure program on Apache like so.
-
-./configure --exec-prefix=/usr \
---localstatedir=/var \
---mandir=/usr/share/man \
---libexecdir=/System/Library/Apache/Modules \
---iconsdir=/System/Library/Apache/Icons \
---includedir=/System/Library/Frameworks/Apache.framework/Versions/1.3/Headers \
---enable-shared=max \
---enable-module=most \
---target=apache
-
- 3. If you want the compiler to do some optimization, you may also
- want to add this line:
-
-setenv OPTIM=-O2
-
- 4. Next, go to the PHP 4 source directory and configure it.
-
-./configure --prefix=/usr \
- --sysconfdir=/etc \
- --localstatedir=/var \
- --mandir=/usr/share/man \
- --with-xml \
- --with-apache=/src/apache_1.3.12
-
- If you have any other additions (MySQL, GD, etc.), be sure to add
- them here. For the --with-apache string, put in the path to your
- apache source directory, for example /src/apache_1.3.12.
- 5. Type make and make install. This will add a directory to your
- Apache source directory under src/modules/php4.
- 6. Now, reconfigure Apache to build in PHP 4.
-
-./configure --exec-prefix=/usr \
---localstatedir=/var \
---mandir=/usr/share/man \
---libexecdir=/System/Library/Apache/Modules \
---iconsdir=/System/Library/Apache/Icons \
---includedir=/System/Library/Frameworks/Apache.framework/Versions/1.3/Headers \
---enable-shared=max \
---enable-module=most \
---target=apache \
---activate-module=src/modules/php4/libphp4.a
-
- You may get a message telling you that libmodphp4.a is out of
- date. If so, go to the src/modules/php4 directory inside your
- Apache source directory and run this command: ranlib libmodphp4.a.
- Then go back to the root of the Apache source directory and run
- the above configure command again. That'll bring the link table up
- to date. Run make and make install again.
- 7. Copy and rename the php.ini-dist file to your bin directory from
- your PHP 4 source directory: cp php.ini-dist
- /usr/local/bin/php.ini or (if your don't have a local directory)
- cp php.ini-dist /usr/bin/php.ini.
- _________________________________________________________________
-
-Compiling for MacOS X Client
-
- The following instructions will help you install a PHP module for the
- Apache web server included in MacOS X. This version includes support
- for the MySQL and PostgreSQL databases. These instructions are
- graciously provided by Marc Liyanage.
-
- Warning
-
- Be careful when you do this, you could screw up your Apache web
- server!
-
- Do this to install:
-
- 1. Open a terminal window.
- 2. Type wget
- http://www.diax.ch/users/liyanage/software/macosx/libphp4.so.gz,
- wait for the download to finish.
- 3. Type gunzip libphp4.so.gz.
- 4. Type sudo apxs -i -a -n php4 libphp4.so
- 5. Now type sudo open -a TextEdit /etc/httpd/httpd.conf. TextEdit
- will open with the web server configuration file. Locate these two
- lines towards the end of the file: (Use the Find command)
-
-#AddType application/x-httpd-php .php
-#AddType application/x-httpd-php-source .phps
-
- Remove the two hash marks (#), then save the file and quit
- TextEdit.
- 6. Finally, type sudo apachectl graceful to restart the web server.
-
- PHP should now be up and running. You can test it by dropping a file
- into your Sites folder which is called test.php. Into that file, write
- this line: <?php phpinfo() ?>.
-
- Now open up 127.0.0.1/~your_username/test.php in your web browser. You
- should see a status table with information about the PHP module.
- _________________________________________________________________
-
-Chapter 3. Installation on Unix systems
-
- This section will guide you through the general configuration and
- installation of PHP on Unix systems. Be sure to investigate any
- sections specific to your platform or web server before you begin the
- process.
-
- As our manual outlines in the General Installation Considerations
- section, we are mainly dealing with web centric setups of PHP in this
- section, although we will cover setting up PHP for command line usage
- as well.
-
- There are several ways to install PHP for the Unix platform, either
- with a compile and configure process, or through various pre-packaged
- methods. This documentation is mainly focused around the process of
- compiling and configuring PHP. Many Unix like systems have some sort
- of package installation system. This can assist in setting up a
- standard configuration, but if you need to have a different set of
- features (such as a secure server, or a different database driver),
- you may need to build PHP and/or your webserver. If you are unfamiliar
- with building and compiling your own software, it is worth checking to
- see whether somebody has already built a packaged version of PHP with
- the features you need.
-
- Prerequisite knowledge and software for compiling:
-
- * Basic Unix skills (being able to operate "make" and a C compiler)
- * An ANSI C compiler
- * flex
- * bison
- * A web server
- * Any module specific components (such as gd, pdf libs, etc.)
-
- The initial PHP setup and configuration process is controlled by the
- use of the commandline options of the configure script. Our manual
- documents the different options separately. You will find the core
- options in the appendix, while the different extension specific
- options are descibed on the reference pages.
-
- When PHP is configured, you are ready to build the module and/or
- executables. The command make should take care of this. If it fails
- and you can't figure out why, see the Problems section.
- _________________________________________________________________
-
-Gentoo installation notes
-
- This section contains notes and hints specific to installing PHP on
- Gentoo Linux.
- _________________________________________________________________
-
-Using Portage (emerge)
-
- While you can just download the PHP source and compile it youself,
- using Gentoo's packaging system is the simplest and cleanest method of
- installing PHP. If you are not familiar with building software on
- Linux, this is the way to go.
-
- If you have built your Gentoo system so far, you are probably used to
- Portage already. Installing Apache and PHP is no different than the
- other system tools.
-
- The first decision you need to make is whether you want to install
- Apache 1.3.x or Apache 2.x. While both can be used with PHP, the steps
- given bellow will use Apache 1.3.x. Another thing to consider is
- whether your local Portage tree is up to date. If you have not updated
- it recently, you need to run emerge sync before anything else. This
- way, you will be using the most recent stable version of Apache and
- PHP.
-
- Now that everything is in place, you can use the following example to
- install Apache and PHP:
-
- Example 3-1. Gentoo Install Example with Apache 1.3
-# emerge \<apache-2
-# USE="-*" emerge php mod_php
-# ebuild /var/db/pkg/dev-php/mod_php-<your PHP version>/mod_php-<your PHP versi
-on>.ebuild config
-# nano /etc/conf.d/apache
- Add "-D PHP4" to APACHE_OPTS
-
-# rc-update add apache default
-# /etc/init.d/apache start
-
- You can read more about emerge in the excellent Portage Manual
- provided on the Gentoo website.
-
- If you need to use Apache 2, you can simply use emerge apache in the
- last example.
- _________________________________________________________________
-
-Better control on configuration
-
- In the last section, PHP was emerged without any activated modules. As
- of this writing, the only module activated by default with Portage is
- XML which is needed by PEAR. This may not be what you want and you
- will soon discover that you need more activated modules, like MySQL,
- gettext, GD, etc.
-
- When you compile PHP from source yourself, you need to activate
- modules via the configure command. With Gentoo, you can simply provide
- USE flags which will be passed to the configure script automatically.
- To see which USE flags to use with emerge, you can try:
-
- Example 3-2. Getting the list of valid USE flags
-# USE="-*" emerge -pv php
-
-[ebuild N ] dev-php/php-4.3.6-r1 -X -berkdb -crypt -curl -debug -doc
--fdftk -firebird -flash -freetds -gd -gd-external -gdbm -gmp -hardenedphp
--imap -informix -ipv6 -java -jpeg -kerberos -ldap -mcal -memlimit -mssql
--mysql -ncurses -nls -oci8 -odbc -pam -pdflib -png -postgres -qt -readline
--snmp -spell -ssl -tiff -truetype -xml2 -yaz 3,876 kB
-
- As you can see from the last output, PHP considers a lot of USE flags.
- Look at them closely and choose what you need. If you choose a flag
- and you do not have the proper librairies, Portage will compile them
- for you. It is a good idea to use emerge -pv again to see what Portage
- will compile in accordance to your USE flags. As an example, if you do
- not have X installed and you choose to include X in the USE flags,
- Portage will compile X prior to PHP, which can take a couple of hours.
-
- If you choose to compile PHP with MySQL, cURL and GD support, the
- command will look something like this:
-
- Example 3-3. Install PHP with USE flags
- # USE="-* curl mysql gd" emerge php mod_php
-
- As in the last example, do not forget to emerge php as well as
- mod_php. php is responsible for the command line version of PHP as
- mod_php is for the Apache module version of PHP.
- _________________________________________________________________
-
-Common Problems
-
- * If you see the PHP source instead of the result the script should
- produce, you have probably forgot to edit /etc/conf.d/apache.
- Apache needs to be started with the -D PHP4 flag. To see if the
- flag is present, you should be able to see it when using ps ax |
- grep apache while Apache is running.
- * Due to slotting problems, you might end up with more than one
- version of PHP installed on your system. If this is the case, you
- need to unmerge the old versions manually by using emerge unmerge
- mod_php-<old version>.
- * If you cannot emerge PHP because of Java, try putting -* in front
- of your USE flags like in the above examples.
- * If you are having problems configuring Apache and PHP, you can
- always search the Gentoo Forums. Try searching with the keywords
- "Apache PHP".
- _________________________________________________________________
-
-HP-UX specific installation notes
-
- This section contains notes and hints specific to installing PHP on
- HP-UX systems. (Contributed by paul_mckay at clearwater-it dot co dot
- uk).
-
- Note: These tips were written for PHP 4.0.4 and Apache 1.3.9.
-
- 1. You need gzip, download a binary distribution from
- http://hpux.connect.org.uk/ftp/hpux/Gnu/gzip-1.2.4a/gzip-1.2.4a-sd
- -10.20.depot.Z uncompress the file and install using swinstall.
- 2. You need gcc, download a binary distribution from
- http://gatekeep.cs.utah.edu/ftp/hpux/Gnu/gcc-2.95.2/gcc-2.95.2-sd-
- 10.20.depot.gz. uncompress this file and install gcc using
- swinstall.
- 3. You need the GNU binutils, you can download a binary distribution
- from
- http://hpux.connect.org.uk/ftp/hpux/Gnu/binutils-2.9.1/binutils-2.
- 9.1-sd-10.20.depot.gz. uncompress this file and install binutils
- using swinstall.
- 4. You now need bison, you can download a binary distribution from
- http://hpux.connect.org.uk/ftp/hpux/Gnu/bison-1.28/bison-1.28-sd-1
- 0.20.depot.gz, install as above.
- 5. You now need flex, you need to download the source from one of the
- http://www.gnu.org mirrors. It is in the non-gnu directory of the
- ftp site. Download the file, gunzip, then tar -xvf it. Go into the
- newly created flex directory and run ./configure, followed by
- make, and then make install.
- If you have errors here, it's probably because gcc etc. are not in
- your PATH so add them to your PATH.
- 6. Download the PHP and apache sources.
- 7. gunzip and tar -xvf them. We need to hack a couple of files so
- that they can compile OK.
- 8. Firstly the configure file needs to be hacked because it seems to
- lose track of the fact that you are a hpux machine, there will be
- a better way of doing this but a cheap and cheerful hack is to put
- lt_target=hpux10.20 on line 47286 of the configure script.
- 9. Next, the Apache GuessOS file needs to be hacked. Under
- apache_1.3.9/src/helpers change line 89 from echo
- "hp${HPUXMACH}-hpux${HPUXVER}"; exit 0 to: echo
- "hp${HPUXMACH}-hp-hpux${HPUXVER}"; exit 0
- 10. You cannot install PHP as a shared object under HP-UX so you must
- compile it as a static, just follow the instructions at the Apache
- page.
- 11. PHP and Apache should have compiled OK, but Apache won't start.
- you need to create a new user for Apache, e.g. www, or apache. You
- then change lines 252 and 253 of the conf/httpd.conf in Apache so
- that instead of
-
-User nobody
-Group nogroup
-
- you have something like
-
-User www
-Group sys
-
- This is because you can't run Apache as nobody under hp-ux. Apache
- and PHP should then work.
- _________________________________________________________________
-
-OpenBSD installation notes
-
- This section contains notes and hints specific to installing PHP on
- OpenBSD 3.4.
- _________________________________________________________________
-
-Using Binary Packages
-
- Using binary packages to install PHP on OpenBSD is the recommended and
- simplest method. The core package has been separated from the various
- modules, and each can be installed and removed independently from the
- others. The files you need can be found on your OpenBSD CD or on the
- FTP site.
-
- The main package you need to install is php4-core-4.3.3.tgz, which
- contains the basic engine (plus gettext and iconv). Next, take a look
- at the module packages, such as php4-mysql-4.3.3.tgz or
- php4-imap-4.3.3.tgz. You need to use the phpxs command to activate and
- deactivate these modules in your php.ini.
-
- Example 3-4. OpenBSD Package Install Example
-# pkg_add php4-core-4.3.3.tgz
-# /usr/local/sbin/phpxs -s
-# cp /usr/local/share/doc/php4/php.ini-recommended /var/www/conf/php.ini
- (add in mysql)
-# pkg_add php4-mysql-4.3.3.tgz
-# /usr/local/sbin/phpxs -a mysql
- (add in imap)
-# pkg_add php4-imap-4.3.3.tgz
-# /usr/local/sbin/phpxs -a imap
- (remove mysql as a test)
-# pkg_delete php4-mysql-4.3.3
-# /usr/local/sbin/phpxs -r mysql
- (install the PEAR libraries)
-# pkg_add php4-pear-4.3.3.tgz
-
- Read the packages(7) manual page for more information about binary
- packages on OpenBSD.
- _________________________________________________________________
-
-Using Ports
-
- You can also compile up PHP from source using the ports tree. However,
- this is only recommended for users familiar with OpenBSD. The PHP 4
- port is split into two sub-directories: core and extensions. The
- extensions directory generates sub-packages for all of the supported
- PHP modules. If you find you do not want to create some of these
- modules, use the no_* FLAVOR. For example, to skip building the imap
- module, set the FLAVOR to no_imap.
- _________________________________________________________________
-
-Common Problems
-
- * The default install of Apache runs inside a chroot(2) jail, which
- will restrict PHP scripts to accessing files under /var/www. You
- will therefore need to create a /var/www/tmp directory for PHP
- session files to be stored, or use an alternative session backend.
- In addition, database sockets need to be placed inside the jail or
- listen on the localhost interface. If you use network functions,
- some files from /etc such as /etc/resolv.conf and /etc/services
- will need to be moved into /var/www/etc. The OpenBSD PEAR package
- automatically installs into the correct chroot directories, so no
- special modification is needed there. More information on the
- OpenBSD Apache is available in the OpenBSD FAQ.
- * The OpenBSD 3.4 package for the gd extension requires XFree86 to
- be installed. If you do not wish to use some of the font features
- that require X11, install the php4-gd-4.3.3-no_x11.tgz package
- instead.
- _________________________________________________________________
-
-Older Releases
-
- Older releases of OpenBSD used the FLAVORS system to compile up a
- statically linked PHP. Since it is hard to generate binary packages
- using this method, it is now deprecated. You can still use the old
- stable ports trees if you wish, but they are unsupported by the
- OpenBSD team. If you have any comments about this, the current
- maintainer for the port is Anil Madhavapeddy (avsm at openbsd dot
- org).
- _________________________________________________________________
-
-Solaris specific installation tips
-
- This section contains notes and hints specific to installing PHP on
- Solaris systems.
- _________________________________________________________________
-
-Required software
-
- Solaris installs often lack C compilers and their related tools. Read
- this FAQ for information on why using GNU versions for some of these
- tools is necessary. The required software is as follows:
-
- * gcc (recommended, other C compilers may work)
- * make
- * flex
- * bison
- * m4
- * autoconf
- * automake
- * perl
- * gzip
- * tar
- * GNU sed
-
- In addition, you will need to install (and possibly compile) any
- additional software specific to your configuration, such as Oracle or
- MySQL.
- _________________________________________________________________
-
-Using Packages
-
- You can simplify the Solaris install process by using pkgadd to
- install most of your needed components.
- _________________________________________________________________
-
-Apache 1.3.x on Unix systems
-
- This section contains notes and hints specific to Apache installs of
- PHP on Unix platforms. We also have instructions and notes for Apache
- 2 on a separate page.
-
- You can select arguments to add to the configure on line 10 below from
- the list of core configure options and from extension specific options
- described at the respective places in the manual. The version numbers
- have been omitted here, to ensure the instructions are not incorrect.
- You will need to replace the 'xxx' here with the correct values from
- your files.
-
- Example 3-5. Installation Instructions (Apache Shared Module Version)
- for PHP
-1. gunzip apache_xxx.tar.gz
-2. tar -xvf apache_xxx.tar
-3. gunzip php-xxx.tar.gz
-4. tar -xvf php-xxx.tar
-5. cd apache_xxx
-6. ./configure --prefix=/www --enable-module=so
-7. make
-8. make install
-9. cd ../php-xxx
-
-10. Now, configure your PHP. This is where you customize your PHP
- with various options, like which extensions will be enabled. Do a
- ./configure --help for a list of available options. In our example
- we'll do a simple configure with Apache 1 and MySQL support. Your
- path to apxs may differ from our example.
-
- ./configure --with-mysql --with-apxs=/www/bin/apxs
-
-11. make
-12. make install
-
- If you decide to change your configure options after installation,
- you only need to repeat the last three steps. You only need to
- restart apache for the new module to take effect. A recompile of
- Apache is not needed.
-
- Note that unless told otherwise, 'make install' will also install PEAR,
- various PHP tools such as phpize, install the PHP CLI, and more.
-
-13. Setup your php.ini file:
-
- cp php.ini-dist /usr/local/lib/php.ini
-
- You may edit your .ini file to set PHP options. If you prefer your
- php.ini in another location, use --with-config-file-path=/some/path in
- step 10.
-
- If you instead choose php.ini-recommended, be certain to read the list
- of changes within, as they affect how PHP behaves.
-
-14. Edit your httpd.conf to load the PHP module. The path on the right hand
- side of the LoadModule statement must point to the path of the PHP
- module on your system. The make install from above may have already
- added this for you, but be sure to check.
-
- For PHP 4:
-
- LoadModule php4_module libexec/libphp4.so
-
- For PHP 5:
-
- LoadModule php5_module libexec/libphp5.so
-
-15. And in the AddModule section of httpd.conf, somewhere under the
- ClearModuleList, add this:
-
- For PHP 4:
-
- AddModule mod_php4.c
-
- For PHP 5:
-
- AddModule mod_php5.c
-
-16. Tell Apache to parse certain extensions as PHP. For example,
- let's have Apache parse the .php extension as PHP. You could
- have any extension(s) parse as PHP by simply adding more, with
- each separated by a space. We'll add .phtml to demonstrate.
-
- AddType application/x-httpd-php .php .phtml
-
- It's also common to setup the .phps extension to show highlighted PHP
- source, this can be done with:
-
- AddType application/x-httpd-php-source .phps
-
-17. Use your normal procedure for starting the Apache server. (You must
- stop and restart the server, not just cause the server to reload by
- using a HUP or USR1 signal.)
-
- Depending on your Apache install and Unix variant, there are many
- possible ways to stop and restart the server. Below are some typical
- lines used in restarting the server, for different apache/unix
- installations. You should replace /path/to/ with the path to these
- applications on your systems.
-
- Example 3-6. Example commands for restarting Apache
-1. Several Linux and SysV variants:
-/etc/rc.d/init.d/httpd restart
-
-2. Using apachectl scripts:
-/path/to/apachectl stop
-/path/to/apachectl start
-
-3. httpdctl and httpsdctl (Using OpenSSL), similar to apachectl:
-/path/to/httpsdctl stop
-/path/to/httpsdctl start
-
-4. Using mod_ssl, or another SSL server, you may want to manually
-stop and start:
-/path/to/apachectl stop
-/path/to/apachectl startssl
-
- The locations of the apachectl and http(s)dctl binaries often vary. If
- your system has locate or whereis or which commands, these can assist
- you in finding your server control programs.
-
- Different examples of compiling PHP for apache are as follows:
-
- ./configure --with-apxs --with-pgsql
-
- This will create a libphp4.so shared library that is loaded into
- Apache using a LoadModule line in Apache's httpd.conf file. The
- PostgreSQL support is embedded into this libphp4.so library.
-
- ./configure --with-apxs --with-pgsql=shared
-
- This will create a libphp4.so shared library for Apache, but it will
- also create a pgsql.so shared library that is loaded into PHP either
- by using the extension directive in php.ini file or by loading it
- explicitly in a script using the dl() function.
-
- ./configure --with-apache=/path/to/apache_source --with-pgsql
-
- This will create a libmodphp4.a library, a mod_php4.c and some
- accompanying files and copy this into the src/modules/php4 directory
- in the Apache source tree. Then you compile Apache using
- --activate-module=src/modules/php4/libphp4.a and the Apache build
- system will create libphp4.a and link it statically into the httpd
- binary. The PostgreSQL support is included directly into this httpd
- binary, so the final result here is a single httpd binary that
- includes all of Apache and all of PHP.
-
- ./configure --with-apache=/path/to/apache_source --with-pgsql=shared
-
- Same as before, except instead of including PostgreSQL support
- directly into the final httpd you will get a pgsql.so shared library
- that you can load into PHP from either the php.ini file or directly
- using dl().
-
- When choosing to build PHP in different ways, you should consider the
- advantages and drawbacks of each method. Building as a shared object
- will mean that you can compile apache separately, and don't have to
- recompile everything as you add to, or change, PHP. Building PHP into
- apache (static method) means that PHP will load and run faster. For
- more information, see the Apache webpage on DSO support.
-
- Note: Apache's default httpd.conf currently ships with a section
- that looks like this:
-
-User nobody
-Group "#-1"
-
- Unless you change that to "Group nogroup" or something like that
- ("Group daemon" is also very common) PHP will not be able to open
- files.
-
- Note: Make sure you specify the installed version of apxs when
- using --with-apxs=/path/to/apxs. You must NOT use the apxs version
- that is in the apache sources but the one that is actually
- installed on your system.
- _________________________________________________________________
-
-Apache 2.0 on Unix systems
-
- This section contains notes and hints specific to Apache 2.0 installs
- of PHP on Unix systems.
-
- Warning
-
- Do not use Apache 2.0.x and PHP in a production environment neither on
- Unix nor on Windows. For information on why, read the following FAQ
- entry
-
- You are highly encouraged to take a look at the Apache Documentation
- to get a basic understanding of the Apache 2.0 Server.
-
- PHP and Apache 2.0.x compatibility notes: The following versions of
- PHP are known to work with the most recent version of Apache 2.0.x:
-
- * PHP 4.3.0 or later available at http://www.php.net/downloads.php.
- * the latest stable development version. Get the source code
- http://snaps.php.net/php4-latest.tar.gz or download binaries for
- Windows http://snaps.php.net/win32/php4-win32-latest.zip.
- * a prerelease version downloadable from http://qa.php.net/.
- * you have always the option to obtain PHP through anonymous CVS.
-
- These versions of PHP are compatible to Apache 2.0.40 and later.
-
- Apache 2.0 SAPI-support started with PHP 4.2.0. PHP 4.2.3 works
- with Apache 2.0.39, don't use any other version of Apache with PHP
- 4.2.3. However, the recommended setup is to use PHP 4.3.0 or later
- with the most recent version of Apache2.
-
- All mentioned versions of PHP will work still with Apache 1.3.x.
-
- Download the most recent version of Apache 2.0 and a fitting PHP
- version from the above mentioned places. This quick guide covers only
- the basics to get started with Apache 2.0 and PHP. For more
- information read the Apache Documentation. The version numbers have
- been omitted here, to ensure the instructions are not incorrect. You
- will need to replace the 'NN' here with the correct values from your
- files.
-
- Example 3-7. Installation Instructions (Apache 2 Shared Module
- Version)
-1. gzip -d httpd-2_0_NN.tar.gz
-2. tar xvf httpd-2_0_NN.tar
-3. gunzip php-NN.tar.gz
-4. tar -xvf php-NN.tar
-5. cd httpd-2_0_NN
-6. ./configure --enable-so
-7. make
-8. make install
-
- Now you have Apache 2.0.NN available under /usr/local/apache2,
- configured with loadable module support and the standard MPM prefork.
- To test the installation use your normal procedure for starting
- the Apache server, e.g.:
- /usr/local/apache2/bin/apachectl start
- and stop the server to go on with the configuration for PHP:
- /usr/local/apache2/bin/apachectl stop.
-
-9. cd ../php-NN
-
-10. Now, configure your PHP. This is where you customize your PHP
- with various options, like which extensions will be enabled. Do a
- ./configure --help for a list of available options. In our example
- we'll do a simple configure with Apache 2 and MySQL support. Your
- path to apxs may differ, in fact, the binary may even be named apxs2 on
- your system.
-
- ./configure --with-apxs2=/usr/local/apache2/bin/apxs --with-mysql
-
-11. make
-12. make install
-
- If you decide to change your configure options after installation,
- you only need to repeat the last three steps. You only need to
- restart apache for the new module to take effect. A recompile of
- Apache is not needed.
-
- Note that unless told otherwise, 'make install' will also install PEAR,
- various PHP tools such as phpize, install the PHP CLI, and more.
-
-13. Setup your php.ini
-
- cp php.ini-dist /usr/local/lib/php.ini
-
- You may edit your .ini file to set PHP options. If you prefer having
- php.ini in another location, use --with-config-file-path=/some/path in
- step 10.
-
- If you instead choose php.ini-recommended, be certain to read the list
- of changes within, as they affect how PHP behaves.
-
-14. Edit your httpd.conf to load the PHP module. The path on the right hand
- side of the LoadModule statement must point to the path of the PHP
- module on your system. The make install from above may have already
- added this for you, but be sure to check.
-
- For PHP 4:
-
- LoadModule php4_module libexec/libphp4.so
-
- For PHP 5:
-
- LoadModule php5_module libexec/libphp5.so
-
-15. Tell Apache to parse certain extensions as PHP. For example,
- let's have Apache parse the .php extension as PHP. You could
- have any extension(s) parse as PHP by simply adding more, with
- each separated by a space. We'll add .phtml to demonstrate.
-
- AddType application/x-httpd-php .php .phtml
-
- It's also common to setup the .phps extension to show highlighted PHP
- source, this can be done with:
-
- AddType application/x-httpd-php-source .phps
-
-16. Use your normal procedure for starting the Apache server, e.g.:
-
- /usr/local/apache2/bin/apachectl start
-
- Following the steps above you will have a running Apache 2.0 with
- support for PHP as SAPI module. Of course there are many more
- configuration options available for both, Apache and PHP. For more
- information use ./configure --help in the corresponding source tree.
- In case you wish to build a multithreaded version of Apache 2.0 you
- must overwrite the standard MPM-Module prefork either with worker or
- perchild. To do so append to your configure line in step 6 above
- either the option --with-mpm=worker or --with-mpm=perchild. Take care
- about the consequences and understand what you are doing. For more
- information read the Apache documentation about the MPM-Modules.
-
- Note: To build a multithreaded version of Apache your system must
- support threads. This also implies to build PHP with experimental
- Zend Thread Safety (ZTS). Therefore not all extensions might be
- available. The recommended setup is to build Apache with the
- standard prefork MPM-Module.
- _________________________________________________________________
-
-Caudium
-
- PHP 4 can be built as a Pike module for the Caudium webserver. Note
- that this is not supported with PHP 3. Follow the simple instructions
- below to install PHP 4 for Caudium.
-
- Example 3-8. Caudium Installation Instructions
-1. Make sure you have Caudium installed prior to attempting to
- install PHP 4. For PHP 4 to work correctly, you will need Pike
- 7.0.268 or newer. For the sake of this example we assume that
- Caudium is installed in /opt/caudium/server/.
-2. Change directory to php-x.y.z (where x.y.z is the version number).
-3. ./configure --with-caudium=/opt/caudium/server
-4. make
-5. make install
-6. Restart Caudium if it's currently running.
-7. Log into the graphical configuration interface and go to the
- virtual server where you want to add PHP 4 support.
-8. Click Add Module and locate and then add the PHP 4 Script Support module.
-9. If the documentation says that the 'PHP 4 interpreter isn't
- available', make sure that you restarted the server. If you did
- check /opt/caudium/logs/debug/default.1 for any errors related to
- <filename>PHP4.so</filename>. Also make sure that
- <filename>caudium/server/lib/[pike-version]/PHP4.so</filename>
- is present.
-10. Configure the PHP Script Support module if needed.
-
- You can of course compile your Caudium module with support for the
- various extensions available in PHP 4. See the reference pages for
- extension specific configure options.
-
- Note: When compiling PHP 4 with MySQL support you must make sure
- that the normal MySQL client code is used. Otherwise there might be
- conflicts if your Pike already has MySQL support. You do this by
- specifying a MySQL install directory the --with-mysql option.
- _________________________________________________________________
-
-fhttpd related notes
-
- To build PHP as an fhttpd module, answer "yes" to "Build as an fhttpd
- module?" (the --with-fhttpd=DIR option to configure) and specify the
- fhttpd source base directory. The default directory is
- /usr/local/src/fhttpd. If you are running fhttpd, building PHP as a
- module will give better performance, more control and remote execution
- capability.
-
- Note: Support for fhttpd is no longer available as of PHP 4.3.0.
- _________________________________________________________________
-
-Sun, iPlanet and Netscape servers on Sun Solaris
-
- This section contains notes and hints specific to Sun Java System Web
- Server, Sun ONE Web Server, iPlanet and Netscape server installs of
- PHP on Sun Solaris.
-
- From PHP 4.3.3 on you can use PHP scripts with the NSAPI module to
- generate custom directory listings and error pages. Additional
- functions for Apache compatibility are also available. For support in
- current webservers read the note about subrequests.
-
- You can find more information about setting up PHP for the Netscape
- Enterprise Server (NES) here:
- http://benoit.noss.free.fr/php/install-php4.html
-
- To build PHP with Sun JSWS/Sun ONE WS/iPlanet/Netscape webservers,
- enter the proper install directory for the --with-nsapi=[DIR] option.
- The default directory is usually /opt/netscape/suitespot/. Please also
- read /php-xxx-version/sapi/nsapi/nsapi-readme.txt.
-
- 1. Install the following packages from http://www.sunfreeware.com/ or
- another download site:
-
- autoconf-2.13
- automake-1.4
- bison-1_25-sol26-sparc-local
- flex-2_5_4a-sol26-sparc-local
- gcc-2_95_2-sol26-sparc-local
- gzip-1.2.4-sol26-sparc-local
- m4-1_4-sol26-sparc-local
- make-3_76_1-sol26-sparc-local
- mysql-3.23.24-beta (if you want mysql support)
- perl-5_005_03-sol26-sparc-local
- tar-1.13 (GNU tar)
- 2. Make sure your path includes the proper directories
- PATH=.:/usr/local/bin:/usr/sbin:/usr/bin:/usr/ccs/bin and make it
- available to your system export PATH.
- 3. gunzip php-x.x.x.tar.gz (if you have a .gz dist, otherwise go to
- 4).
- 4. tar xvf php-x.x.x.tar
- 5. Change to your extracted PHP directory: cd ../php-x.x.x
- 6. For the following step, make sure /opt/netscape/suitespot/ is
- where your netscape server is installed. Otherwise, change to the
- correct path and run:
-
-./configure --with-mysql=/usr/local/mysql \
---with-nsapi=/opt/netscape/suitespot/ \
---enable-libgcc
-
- 7. Run make followed by make install.
-
- After performing the base install and reading the appropriate readme
- file, you may need to perform some additional configuration steps.
-
- Configuration Instructions for Sun/iPlanet/Netscape. Firstly you may
- need to add some paths to the LD_LIBRARY_PATH environment for the
- server to find all the shared libs. This can best done in the start
- script for your webserver. The start script is often located in:
- /path/to/server/https-servername/start. You may also need to edit the
- configuration files that are located in:
- /path/to/server/https-servername/config/.
-
- 1. Add the following line to mime.types (you can do that by the
- administration server):
-
-type=magnus-internal/x-httpd-php exts=php
-
- 2. Edit magnus.conf (for servers >= 6) or obj.conf (for servers < 6)
- and add the following, shlib will vary depending on your system,
- it will be something like /opt/netscape/suitespot/bin/libphp4.so.
- You should place the following lines after mime types init.
-
-Init fn="load-modules" funcs="php4_init,php4_execute,php4_auth_trans" shlib="/o
-pt/netscape/suitespot/bin/libphp4.so"
-Init fn="php4_init" LateInit="yes" errorString="Failed to initialize PHP!" [php
-_ini="/path/to/php.ini"]
-
- (PHP >= 4.3.3) The php_ini parameter is optional but with it you
- can place your php.ini in your webserver config directory.
- 3. Configure the default object in obj.conf (for virtual server
- classes [version 6.0+] in their vserver.obj.conf):
-
-<Object name="default">
-.
-.
-.
-.#NOTE this next line should happen after all 'ObjectType' and before all 'AddL
-og' lines
-Service fn="php4_execute" type="magnus-internal/x-httpd-php" [inikey=value inik
-ey=value ...]
-.
-.
-</Object>
-
- (PHP >= 4.3.3) As additional parameters you can add some special
- php.ini-values, for example you can set a
- docroot="/path/to/docroot" specific to the context php4_execute is
- called. For boolean ini-keys please use 0/1 as value, not
- "On","Off",... (this will not work correctly), e.g.
- zlib.output_compression=1 instead of zlib.output_compression="On"
- 4. This is only needed if you want to configure a directory that only
- consists of PHP scripts (same like a cgi-bin directory):
-
-<Object name="x-httpd-php">
-ObjectType fn="force-type" type="magnus-internal/x-httpd-php"
-Service fn=php4_execute [inikey=value inikey=value ...]
-</Object>
-
- After that you can configure a directory in the Administration
- server and assign it the style x-httpd-php. All files in it will
- get executed as PHP. This is nice to hide PHP usage by renaming
- files to .html.
- 5. Setup of authentication: PHP authentication cannot be used with
- any other authentication. ALL AUTHENTICATION IS PASSED TO YOUR PHP
- SCRIPT. To configure PHP Authentication for the entire server, add
- the following line to your default object:
-
-<Object name="default">
-AuthTrans fn=php4_auth_trans
-.
-.
-.
-</Object>
-
- 6. To use PHP Authentication on a single directory, add the
- following:
-
-<Object ppath="d:\path\to\authenticated\dir\*">
-AuthTrans fn=php4_auth_trans
-</Object>
-
- Note: The stacksize that PHP uses depends on the configuration of
- the webserver. If you get crashes with very large PHP scripts, it
- is recommended to raise it with the Admin Server (in the section
- "MAGNUS EDITOR").
- _________________________________________________________________
-
-CGI environment and recommended modifications in php.ini
-
- Important when writing PHP scripts is the fact that Sun JSWS/Sun ONE
- WS/iPlanet/Netscape is a multithreaded web server. Because of that all
- requests are running in the same process space (the space of the
- webserver itself) and this space has only one environment. If you want
- to get CGI variables like PATH_INFO, HTTP_HOST etc. it is not the
- correct way to try this in the old PHP 3.x way with getenv() or a
- similar way (register globals to environment, $_ENV). You would only
- get the environment of the running webserver without any valid CGI
- variables!
-
- Note: Why are there (invalid) CGI variables in the environment?
-
- Answer: This is because you started the webserver process from the
- admin server which runs the startup script of the webserver, you
- wanted to start, as a CGI script (a CGI script inside of the admin
- server!). This is why the environment of the started webserver has
- some CGI environment variables in it. You can test this by starting
- the webserver not from the administration server. Use the command
- line as root user and start it manually - you will see there are no
- CGI-like environment variables.
-
- Simply change your scripts to get CGI variables in the correct way for
- PHP 4.x by using the superglobal $_SERVER. If you have older scripts
- which use $HTTP_HOST, etc., you should turn on register_globals in
- php.ini and change the variable order too (important: remove "E" from
- it, because you do not need the environment here):
-variables_order = "GPCS"
-register_globals = On
- _________________________________________________________________
-
-Special use for error pages or self-made directory listings (PHP >= 4.3.3)
-
- You can use PHP to generate the error pages for "404 Not Found" or
- similar. Add the following line to the object in obj.conf for every
- error page you want to overwrite:
-Error fn="php4_execute" code=XXX script="/path/to/script.php" [inikey=value ini
-key=value...]
-
- where XXX is the HTTP error code. Please delete any other Error
- directives which could interfere with yours. If you want to place a
- page for all errors that could exist, leave the code parameter out.
- Your script can get the HTTP status code with $_SERVER['ERROR_TYPE'].
-
- Another possibility is to generate self-made directory listings. Just
- create a PHP script which displays a directory listing and replace the
- corresponding default Service line for
- type="magnus-internal/directory" in obj.conf with the following:
-Service fn="php4_execute" type="magnus-internal/directory" script="/path/to/scr
-ipt.php" [inikey=value inikey=value...]
-
- For both error and directory listing pages the original URI and
- translated URI are in the variables $_SERVER['PATH_INFO'] and
- $_SERVER['PATH_TRANSLATED'].
- _________________________________________________________________
-
-Note about nsapi_virtual() and subrequests (PHP >= 4.3.3)
-
- The NSAPI module now supports the nsapi_virtual() function (alias:
- virtual()) to make subrequests on the webserver and insert the result
- in the webpage. This function uses some undocumented features from the
- NSAPI library. On Unix the module automatically looks for the needed
- functions and uses them if available. If not, nsapi_virtual() is
- disabled.
-
- Note: But be warned: Support for nsapi_virtual() is EXPERIMENTAL!!!
- _________________________________________________________________
-
-CGI and commandline setups
-
- The default is to build PHP as a CGI program. This creates a
- commandline interpreter, which can be used for CGI processing, or for
- non-web-related PHP scripting. If you are running a web server PHP has
- module support for, you should generally go for that solution for
- performance reasons. However, the CGI version enables users to run
- different PHP-enabled pages under different user-ids.
-
- Warning
-
- By using the CGI setup, your server is open to several possible
- attacks. Please read our CGI security section to learn how to defend
- yourself from those attacks.
-
- As of PHP 4.3.0, some important additions have happened to PHP. A new
- SAPI named CLI also exists and it has the same name as the CGI binary.
- What is installed at {PREFIX}/bin/php depends on your configure line
- and this is described in detail in the manual section named Using PHP
- from the command line. For further details please read that section of
- the manual.
- _________________________________________________________________
-
-Testing
-
- If you have built PHP as a CGI program, you may test your build by
- typing make test. It is always a good idea to test your build. This
- way you may catch a problem with PHP on your platform early instead of
- having to struggle with it later.
- _________________________________________________________________
-
-Benchmarking
-
- If you have built PHP 3 as a CGI program, you may benchmark your build
- by typing make bench. Note that if safe mode is on by default, the
- benchmark may not be able to finish if it takes longer then the 30
- seconds allowed. This is because the set_time_limit() can not be used
- in safe mode. Use the max_execution_time configuration setting to
- control this time for your own scripts. make bench ignores the
- configuration file.
-
- Note: make bench is only available for PHP 3.
- _________________________________________________________________
-
-Using Variables
-
- Some server supplied environment variables are not defined in the
- current CGI/1.1 specification. Only the following variables are
- defined there: AUTH_TYPE, CONTENT_LENGTH, CONTENT_TYPE,
- GATEWAY_INTERFACE, PATH_INFO, PATH_TRANSLATED, QUERY_STRING,
- REMOTE_ADDR, REMOTE_HOST, REMOTE_IDENT, REMOTE_USER, REQUEST_METHOD,
- SCRIPT_NAME, SERVER_NAME, SERVER_PORT, SERVER_PROTOCOL, and
- SERVER_SOFTWARE. Everything else should be treated as 'vendor
- extensions'.
- _________________________________________________________________
-
-Chapter 4. Problems?
-
-Read the FAQ
-
- Some problems are more common than others. The most common ones are
- listed in the PHP FAQ, part of this manual.
- _________________________________________________________________
-
-Other problems
-
- If you are still stuck, someone on the PHP installation mailing list
- may be able to help you. You should check out the archive first, in
- case someone already answered someone else who had the same problem as
- you. The archives are available from the support page on
- http://www.php.net/support.php. To subscribe to the PHP installation
- mailing list, send an empty mail to
- php-install-subscribe@lists.php.net. The mailing list address is
- php-install@lists.php.net.
-
- If you want to get help on the mailing list, please try to be precise
- and give the necessary details about your environment (which operating
- system, what PHP version, what web server, if you are running PHP as
- CGI or a server module, safe mode, etc...), and preferably enough code
- to make others able to reproduce and test your problem.
- _________________________________________________________________
-
-Bug reports
-
- If you think you have found a bug in PHP, please report it. The PHP
- developers probably don't know about it, and unless you report it,
- chances are it won't be fixed. You can report bugs using the
- bug-tracking system at http://bugs.php.net/. Please do not send bug
- reports in mailing list or personal letters. The bug system is also
- suitable to submit feature requests.
-
- Read the How to report a bug document before submitting any bug
- reports!
- _________________________________________________________________
-
-Chapter 5. Runtime Configuration
-
-The configuration file
-
- The configuration file (called php3.ini in PHP 3, and simply php.ini
- as of PHP 4) is read when PHP starts up. For the server module
- versions of PHP, this happens only once when the web server is
- started. For the CGI and CLI version, it happens on every invocation.
-
- The default location of php.ini is a compile time option (see the FAQ
- entry), but can be changed for the CGI and CLI version with the -c
- command line switch, see the chapter about using PHP from the command
- line. You can also use the environment variable PHPRC for an
- additional path to search for a php.ini file.
-
- If php-SAPI.ini exists (where SAPI is used SAPI, so the filename is
- e.g. php-cli.ini or php-apache.ini), it's used instead of php.ini.
-
- Note: The Apache web server changes the directory to root at
- startup causing PHP to attempt to read php.ini from the root
- filesystem if it exists.
-
- The php.ini directives handled by extensions are documented
- respectively on the pages of the extensions themselfs. The list of the
- core directives is available in the appendix. Probably not all the PHP
- directives are documented in the manual though. For a completel list
- of directives available in your PHP version, please read your well
- commented php.ini file. Alternatively, you may find the the latest
- php.ini from CVS helpful too.
-
- Example 5-1. php.ini example
-; any text on a line after an unquoted semicolon (;) is ignored
-[php] ; section markers (text within square brackets) are also ignored
-; Boolean values can be set to either:
-; true, on, yes
-; or false, off, no, none
-register_globals = off
-track_errors = yes
-
-; you can enclose strings in double-quotes
-include_path = ".:/usr/local/lib/php"
-
-; backslashes are treated the same as any other character
-include_path = ".;c:\php\lib"
- _________________________________________________________________
-
-How to change configuration settings
-
-Running PHP as an Apache module
-
- When using PHP as an Apache module, you can also change the
- configuration settings using directives in Apache configuration files
- (e.g. httpd.conf) and .htaccess files. You will need "AllowOverride
- Options" or "AllowOverride All" privileges to do so.
-
- With PHP 4 and PHP 5, there are several Apache directives that allow
- you to change the PHP configuration from within the Apache
- configuration files. For a listing of which directives are
- PHP_INI_ALL, PHP_INI_PERDIR, or PHP_INI_SYSTEM, have a look at the
- table found within the ini_set() documentation.
-
- Note: With PHP 3, there are Apache directives that correspond to
- each configuration setting in the php3.ini name, except the name is
- prefixed by "php3_".
-
- php_value name value
- Sets the value of the specified directive. Can be used only
- with PHP_INI_ALL and PHP_INI_PERDIR type directives. To clear a
- previously set value use none as the value.
-
- Note: Don't use php_value to set boolean values. php_flag (see
- below) should be used instead.
-
- php_flag name on|off
- Used to set a boolean configuration directive. Can be used only
- with PHP_INI_ALL and PHP_INI_PERDIR type directives.
-
- php_admin_value name value
- Sets the value of the specified directive. This can not be used
- in .htaccess files. Any directive type set with php_admin_value
- can not be overridden by .htaccess or virtualhost directives.
- To clear a previously set value use none as the value.
-
- php_admin_flag name on|off
- Used to set a boolean configuration directive. This can not be
- used in .htaccess files. Any directive type set with
- php_admin_flag can not be overridden by .htaccess or
- virtualhost directives.
-
- Example 5-2. Apache configuration example
-<IfModule mod_php5.c>
- php_value include_path ".:/usr/local/lib/php"
- php_admin_flag safe_mode on
-</IfModule>
-<IfModule mod_php4.c>
- php_value include_path ".:/usr/local/lib/php"
- php_admin_flag safe_mode on
-</IfModule>
-<IfModule mod_php3.c>
- php3_include_path ".:/usr/local/lib/php"
- php3_safe_mode on
-</IfModule>
-
- Caution
-
- PHP constants do not exist outside of PHP. For example, in httpd.conf
- you can not use PHP constants such as E_ALL or E_NOTICE to set the
- error_reporting directive as they will have no meaning and will
- evaluate to 0. Use the associated bitmask values instead. These
- constants can be used in php.ini
- _________________________________________________________________
-
-Changing PHP configuration via the Windows registry
-
- When running PHP on Windows, the configuration values can be modified
- on a per-directory basis using the Windows registry. The configuration
- values are stored in the registry key HKLM\SOFTWARE\PHP\Per Directory
- Values, in the sub-keys corresponding to the path names. For example,
- configuration values for the directory c:\inetpub\wwwroot would be
- stored in the key HKLM\SOFTWARE\PHP\Per Directory
- Values\c\inetpub\wwwroot. The settings for the directory would be
- active for any script running from this directory or any subdirectory
- of it. The values under the key should have the name of the PHP
- configuration directive and the string value. PHP constants in the
- values are not parsed.
- _________________________________________________________________
-
-Other interfaces to PHP
-
- Regardless of how you run PHP, you can change certain values at
- runtime of your scripts through ini_set(). See the documentation on
- the ini_set() page for more information.
-
- If you are interested in a complete list of configuration settings on
- your system with their current values, you can execute the phpinfo()
- function, and review the resulting page. You can also access the
- values of individual configuration directives at runtime using
- ini_get() or get_cfg_var().
diff --git a/LICENSE b/LICENSE
deleted file mode 100644
index d4335c298c..0000000000
--- a/LICENSE
+++ /dev/null
@@ -1,68 +0,0 @@
---------------------------------------------------------------------
- The PHP License, Version 3.0
-Copyright (c) 1999 - 2003 The PHP Group. All rights reserved.
---------------------------------------------------------------------
-
-Redistribution and use in source and binary forms, with or without
-modification, is 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 name "PHP" must not be used to endorse or promote products
- derived from this software without prior written permission. For
- written permission, please contact group@php.net.
-
- 4. Products derived from this software may not be called "PHP", nor
- may "PHP" appear in their name, without prior written permission
- from group@php.net. You may indicate that your software works in
- conjunction with PHP by saying "Foo for PHP" instead of calling
- it "PHP Foo" or "phpfoo"
-
- 5. The PHP Group may publish revised and/or new versions of the
- license from time to time. Each version will be given a
- distinguishing version number.
- Once covered code has been published under a particular version
- of the license, you may always continue to use it under the terms
- of that version. You may also choose to use such covered code
- under the terms of any subsequent version of the license
- published by the PHP Group. No one other than the PHP Group has
- the right to modify the terms applicable to covered code created
- under this License.
-
- 6. Redistributions of any form whatsoever must retain the following
- acknowledgment:
- "This product includes PHP, freely available from
- <http://www.php.net/>".
-
-THIS SOFTWARE IS PROVIDED BY THE PHP DEVELOPMENT TEAM ``AS IS'' AND
-ANY EXPRESSED 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 PHP
-DEVELOPMENT TEAM OR ITS 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 software consists of voluntary contributions made by many
-individuals on behalf of the PHP Group.
-
-The PHP Group can be contacted via Email at group@php.net.
-
-For more information on the PHP Group and the PHP project,
-please see <http://www.php.net>.
-
-This product includes the Zend Engine, freely available at
-<http://www.zend.com>.
diff --git a/Makefile.frag b/Makefile.frag
deleted file mode 100644
index 2a4aa1c7f8..0000000000
--- a/Makefile.frag
+++ /dev/null
@@ -1,23 +0,0 @@
-
-#
-# Zend
-#
-
-$(builddir)/zend_language_scanner.lo: $(builddir)/zend_language_parser.h
-$(builddir)/zend_ini_scanner.lo: $(builddir)/zend_ini_parser.h
-
-$(builddir)/zend_language_scanner.c: $(srcdir)/zend_language_scanner.l
- $(LEX) -Pzend -S$(srcdir)/flex.skl -o$@ -i $(srcdir)/zend_language_scanner.l
-
-$(builddir)/zend_language_parser.h: $(builddir)/zend_language_parser.c
-$(builddir)/zend_language_parser.c: $(srcdir)/zend_language_parser.y
- $(YACC) -p zend -v -d $(srcdir)/zend_language_parser.y -o $@
-
-$(builddir)/zend_ini_parser.h: $(builddir)/zend_ini_parser.c
-$(builddir)/zend_ini_parser.c: $(srcdir)/zend_ini_parser.y
- $(YACC) -p ini_ -v -d $(srcdir)/zend_ini_parser.y -o $@
-
-$(builddir)/zend_ini_scanner.c: $(srcdir)/zend_ini_scanner.l
- $(LEX) -Pini_ -S$(srcdir)/flex.skl -o$@ -i $(srcdir)/zend_ini_scanner.l
-
-$(builddir)/zend_indent.lo $(builddir)/zend_highlight.lo $(builddir)/zend_compile.lo: $(builddir)/zend_language_parser.h
diff --git a/Makefile.global b/Makefile.global
deleted file mode 100644
index e30bc42f78..0000000000
--- a/Makefile.global
+++ /dev/null
@@ -1,76 +0,0 @@
-mkinstalldirs = $(top_srcdir)/build/shtool mkdir -p
-INSTALL = $(top_srcdir)/build/shtool install -c
-INSTALL_DATA = $(INSTALL) -m 644
-
-DEFS = -DPHP_ATOM_INC -I$(top_builddir)/include -I$(top_builddir)/main -I$(top_srcdir)
-COMMON_FLAGS = $(DEFS) $(INCLUDES) $(EXTRA_INCLUDES) $(CPPFLAGS) $(PHP_FRAMEWORKPATH)
-
-
-all: $(all_targets)
- @echo
- @echo "Build complete."
- @echo "(It is safe to ignore warnings about tempnam and tmpnam)."
- @echo
-
-build-modules: $(PHP_MODULES)
-
-libphp5.la: $(PHP_GLOBAL_OBJS) $(PHP_SAPI_OBJS)
- $(LIBTOOL) --mode=link $(CC) $(CFLAGS) $(EXTRA_CFLAGS) -rpath $(phptempdir) $(EXTRA_LDFLAGS) $(LDFLAGS) $(PHP_RPATHS) $(PHP_GLOBAL_OBJS) $(PHP_SAPI_OBJS) $(EXTRA_LIBS) $(ZEND_EXTRA_LIBS) -o $@
- -@$(LIBTOOL) --silent --mode=install cp libphp5.la $(phptempdir)/libphp5.la >/dev/null 2>&1
-
-libs/libphp5.bundle: $(PHP_GLOBAL_OBJS) $(PHP_SAPI_OBJS)
- $(CC) $(MH_BUNDLE_FLAGS) $(CFLAGS_CLEAN) $(EXTRA_CFLAGS) $(LDFLAGS) $(EXTRA_LDFLAGS) $(PHP_GLOBAL_OBJS:.lo=.o) $(PHP_SAPI_OBJS:.lo=.o) $(PHP_FRAMEWORKS) $(EXTRA_LIBS) $(ZEND_EXTRA_LIBS) -o $@ && cp $@ libs/libphp5.so
-
-install: $(all_targets) $(install_targets)
-
-install-sapi: $(OVERALL_TARGET)
- @echo "Installing PHP SAPI module: $(PHP_SAPI)"
- -@$(mkinstalldirs) $(INSTALL_ROOT)$(bindir)
- -@if test ! -r $(phptempdir)/libphp5.$(SHLIB_SUFFIX_NAME); then \
- for i in 0.0.0 0.0 0; do \
- if test -r $(phptempdir)/libphp5.$(SHLIB_SUFFIX_NAME).$$i; then \
- $(LN_S) $(phptempdir)/libphp5.$(SHLIB_SUFFIX_NAME).$$i $(phptempdir)/libphp5.$(SHLIB_SUFFIX_NAME); \
- break; \
- fi; \
- done; \
- fi
- @$(INSTALL_IT)
-
-install-modules: build-modules
- @test -d modules && \
- $(mkinstalldirs) $(INSTALL_ROOT)$(EXTENSION_DIR)
- @echo "Installing shared extensions: $(INSTALL_ROOT)$(EXTENSION_DIR)/"
- @rm -f modules/*.la >/dev/null 2>&1
- @$(INSTALL) modules/* $(INSTALL_ROOT)$(EXTENSION_DIR)
-
-install-tester:
- @echo "Installing regression tester: $(INSTALL_ROOT)$(PEAR_INSTALLDIR)/"
- @$(mkinstalldirs) $(INSTALL_ROOT)$(PEAR_INSTALLDIR)
- @$(INSTALL) -m 755 $(top_srcdir)/run-tests.php $(INSTALL_ROOT)$(PEAR_INSTALLDIR)
-
-install-su: install-pear install-tester
-
-test:
- -@if test -x $(SAPI_CLI_PATH) && test ! -z $(SAPI_CLI_PATH); then \
- TEST_PHP_EXECUTABLE=$(top_builddir)/$(SAPI_CLI_PATH) \
- TEST_PHP_SRCDIR=$(top_srcdir) \
- CC="$(CC)" \
- $(top_builddir)/$(SAPI_CLI_PATH) -d 'open_basedir=' -d 'safe_mode=0' -d 'output_buffering=0' $(top_srcdir)/run-tests.php $(TESTS); \
- else \
- echo "ERROR: Cannot run tests without CLI sapi."; \
- fi
-
-clean:
- find . -name \*.lo -o -name \*.o | xargs rm -f
- find . -name \*.la -o -name \*.a | xargs rm -f
- find . -name \*.so | xargs rm -f
- find . -name .libs -a -type d|xargs rm -rf
- rm -f libphp5.la $(SAPI_CLI_PATH) $(OVERALL_TARGET) modules/* libs/*
-
-distclean: clean
- rm -f config.cache config.log config.status Makefile.objects Makefile.fragments libtool main/php_config.h stamp-h php5.spec sapi/apache/libphp5.module buildmk.stamp
- egrep define'.*include/php' configure|sed 's/.*>//'|xargs rm -f
- find . -name Makefile | xargs rm -f
-
-.PHONY: all clean install distclean test
-.NOEXPORT:
diff --git a/NEWS b/NEWS
deleted file mode 100644
index c620a4f167..0000000000
--- a/NEWS
+++ /dev/null
@@ -1,578 +0,0 @@
-PHP NEWS
-|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
-?? ??? 2004, PHP 5.1.0
-- Improved performance of switch statement. (Dmitry)
-- Removed garbage manager in Zend Engine which results in more aggressive
- freeing of data. (Dmitry, Andi)
-- Implemented access to INI variables from within .ini file. (Andrei)
-- PHP will now respect extension dependencies when initializing. (Wez)
-- Added SAPI hook to get the current request time. (Rasmus)
-- Added new functions:
- . array_diff_key() (Andrey)
- . array_diff_ukey() (Andrey)
- . array_intersect_key() (Christiano Duarte)
- . array_intersect_ukey() (Christiano Duarte)
- . stream_context_get_default() (Wez)
- . stream_socket_enable_crypto() (Wez)
- . DomDocumentFragment->appendXML() (Christian)
- . SimpleXMLElement->registerXPathNamespace() (Christian)
- . mysqli->client_info property (Georg)
- . inet_pton() (Sara)
- . inet_ntop() (Sara)
-- Added DomDocument->recover property for parsing not well-formed
- XML Documents. (Christian)
-- Added Cursor support for MySQL 5.0.x in mysqli (Georg)
-- Added proxy support to ftp wrapper via http. (Sara)
-- Added MDTM support to ftp_url_stat. (Sara)
-- Added zlib stream filter support. (Sara)
-- Added bz2 stream filter support. (Sara)
-- Added support of parameter->value arrays to xsl_xsltprocessor_set_parameter()
- (Tony)
-- Fixed bug with raw_post_data not getting set. (Brian)
-- Fixed bug in mysql->client_version. (Georg)
-- Fixed ZTS destruction. (Marcus)
-- Fixed bug #29728 (Reflection API Feature: Default parameter value). (Marcus)
-- Fixed bug #29522 (accessing properties without connection). (Georg)
-- Fixed bug #29335 (fetch functions now use MYSQLI_BOTH as default). (Georg)
-- Fixed bug #29311 (calling parent constructor in mysqli). (Georg)
-- Fixed bug #29256 (SOAP HTTP Error when envelop size is more than 24345 bytes)
- (Dmitry, Wez)
-- Fixed bug #29236 (memory error when wsdl-cache is enabled). (Dmitry)
-- Fixed bug #29109 (SoapFault exception: [WSDL] Out of memory). (Dmitry)
-- Fixed bug #29061 (soap extension segfaults). (Dmitry)
-- Fixed bug #28985 (__getTypes() returning nothing on complex WSDL). (Dmitry)
-- Fixed bug #28969 (Wrong data encoding of special characters). (Dmitry)
-
-13 Jul 2004, PHP 5.0.0
-- Rewritten UNIX and Windows install help files. (Documentation Team)
-- Updated PCRE to provide better error handling in certain cases. (Andrei)
-- Changed doc comments to require a single white space after '/**'. (Marcus)
-- Fixed bug #29019 (Database not closing). (Marcus)
-- Fixed bug #29008 (array_combine() does not handle non-numeric/string keys).
- (Ilia)
-- Fixed bug #28999 (fixed behaviour of exec() to work as it did in 4.X). (Ilia)
-- Fixed bug #28895 (ReflectionClass::isAbstract always returns false). (Marcus)
-- Fixed bug #28868 (Internal filter registry not thread safe). (Sara)
-- Fixed bug #28851 (call_user_func_array has typo in error message). (Marcus)
-- Fixed bug #28831 (ArrayObject::offsetGet() does the work of offsetUnset()).
- (Marcus)
-- Fixed bug #28822 (ArrayObject::offsetExists() works inverted). (Marcus)
-- Fixed bug #28789 (ReflectionProperty getValue() fails on public static
- members). (Marcus)
-- Fixed bug #28771 (Segfault when using xslt and clone). (Rob)
-- Fixed bug #28751 (SoapServer does not call _autoload()). (Dmitry)
-- Fixed bug #28739 (array_*diff() and array_*intersect() not clearing the fci
- cache before work). (Andrey)
-- Fixed bug #28721 (appendChild() and insertBefore() unset DOMText).(Rob)
-- Fixed bug #28702 (SOAP does not parse WSDL service address correctly). (Dmitry)
-- Fixed bug #28699 (Reflection api bugs). (Marcus)
-- Fixed bug #28694 (ReflectionExtension::getFunctions() crashes PHP). (Marcus)
-- Fixed bug #28512 (Allocate enough space to store MSSQL data). (Frank)
-- Fixed bug #28325 (Circular references not properly serialised). (Moriyoshi)
-- Fixed strip_tags() to correctly handle '\0' characters. (Stefan)
-
-7 Jun 2004, PHP 5 Release Candidate 3
-- Moved the PDFLib extension to PECL. (Wez)
-- Added MySQL 4.1.2-alpha and 4.1.3-beta support to MySQLI extension. (Georg)
-- Added support for dumping private/protected properties to var_dump().
- (Andrey)
-- Added count() support for COM arrays. (Wez)
-- Added Firebird/InterBase UDF source that allows PHP functions to be called
- from SQL (Ard)
-- Removed Firebird/Interbase function ibase_timefmt() (Ard)
-- Changed user error handler mechanism to relay to built-in error handler if it
- returns false. (Andrei)
-- Changed class type hints for function parameters to not allow the passing of
- NULL values. (Andi)
-- Changed tidy_node to tidyNode and removed tidy_exception. (John)
-- Fixed ip2long() to return FALSE if an IP address passed to this function
- is not valid. (Derick)
-- Fixed memory leak in memory manager. (Andi)
-- Fixed problem with exceptions returning from include(). (Dmitry)
-- Fixed bug #28641 (Instance of Interface). (Marcus)
-- Fixed bug #28430 (Extending mysqli class). (Georg)
-- Fixed bug #28311 (Transparency detection code is off by 1).
- (Ilia, pikeman at pikeman dot sytes dot net)
-- Fixed bug #28304 (Missing bounds check inside imagefilter()). (Ilia)
-- Fixed bug #28300 (Userspace stream/filter names forced to lowercase). (Sara)
-- Fixed bug #28287 (stream_*_register() not calling __autoload()). (Sara)
-- Fixed bug #28267 (php_image_filter_contrast calls gdImageBrightness). (Ilia)
-- Fixed bug #28239 (No results returned on SOAP call, no error given). (Dmitry)
-- Fixed bug #28205 (num_rows property for statement object). (Georg)
-- Fixed bug #28161 (COM: Array style properties could not be accessed). (Wez)
-- Fixed bug #28125 (ArrayObject leaks when accessing elements). (Marcus)
-- Fixed bug #28100 (NULL parameter support for mysqli_ssl_set). (Georg)
-- Fixed bug #28099 (ArrayObject doesn't implement ArrayAccess). (Marcus)
-- Fixed bug #27929 (SPL: change visibility of ArrayIterator::__construct).
- (Marcus)
-- Fixed bug #27640 (memory leak of registered_zend_ini_directives). (Dmitry)
-- Fixed bug #27063 (SPL: ArrayObject does not handle PPP correctly). (Marcus)
-
-25 Apr 2004, PHP 5 Release Candidate 2
-- Implementing an interface/abstract method with the wrong prototype is now
- a fatal error. (Zeev)
-- Reimplemented zend.ze1_compatibility_mode to have better PHP 4 compliance.
- (Dmitry, Andi)
-- Under CLI, fclose() on php://stdin, php://stdout and php://stderr will now
- close the real stream. Please update your CLI scripts to use STDIN, STDOUT
- and STDERR constants instead of fopen()/fclose(). (Wez)
-- Moved yaz extension to PECL. (Wez)
-- Added pty support to proc_open(). (Wez)
-- Added possibility to check in which extension an internal class was defined
- in using reflection API. (Marcus)
-- Changed tidy error handling to no longer use exceptions and
- renamed the "error_buf" property to errorBuffer. (John)
-- Changed class and method names to use studlyCaps convention. (Marcus)
-- Changed language parser to throw errors when a non-empty signature is used in
- a destructor definition. (Marcus)
-- Changed HTTP file uploads not to throw E_WARNINGs and E_NOTICEs. The error
- value in the $_FILES global should be used for error handling. (Derick)
-- Changed __construct() to always take precedence over old style constructor.
- (Dmitry)
-- Fixed handling of return values from storred procedures in mssql_execute()
- with multiple result sets returned. (Frank)
-- Fixed bug #28096 (stream_socket_accept() doesn't work with ssl). (Wez)
-- Fixed bug #28007 (compile mssql extension with old versions of FreeTDS
- fails). (Frank)
-- Fixed bug #27997 (SPL: Crash with getInnerIterator()). (Marcus)
-- Fixed bug #27974 (COM doesn't pass array parameters). (Wez)
-- Fixed bug #27928 (sqlite incorrectly handles invalid filenames). (Ilia)
-- Fixed bug $27923 (in some cases using foreach() to iterate over values
- led to a false error message about the key being a reference). (Adam)
-- Fixed bug #27865 (STDIN, STDOUT, STDERR are dup()d under CLI). (Wez)
-- Fixed bug #27821 (xml_parse() segfaults when xml_set_object() is called from
- class method). (Andi, Rob)
-- Fixed bug #27742 (WDSL SOAP Parsing Schema bug). (Dmitry)
-- Fixed bug #27722 (Segfault on schema without targetNamespace). (Dmitry)
-- Fixed bug #27719 (mktime issues on and around DST changeover). (Rasmus)
-- Fixed bug #27681 (soap extension fails without HAVE_TM_GMTOFF). (Dmitry)
-- Fixed bug #27641 (Object cloning in ze1_compatibility_mode was reimplemented)
- (Dmitry, Andi)
-- Fixed bug #27628 (Simplify the process of making a POST request via stream
- context). (Ilia)
-- Fixed bug #27619 (filters not applied to pre-buffered stream data). (Sara)
-- Fixed bug #27519 (Reflection_Function constructor crashes with non-existant
- function's name). (Marcus)
-- Fixed bug #27469 (serialize() objects of incomplete class). (Dmitry)
-- Fixed bug #27457 (handling of numeric indexes in strtr()). (Dmitry)
-- Fixed bug #27397 (debug_backtrace() not showing function arguments). (Zeev)
-- Fixed bug #27283 (The last catch statement was sometimes skipped). (Andi)
-- Fixed bug #26441 (When __set() returned a value it corrupted it). (Andi)
-- Fixed bug #19749 (shouldn't mmap() files larger than memory_limit). (Wez)
-
-18 March 2004, PHP 5 Release Candidate 1
-- Fixed numerous bugs with the just-in-time auto-global initialization, that
- could cause $_SERVER, $argv/$argc and other variables not to work properly.
- (Zeev)
-- Fixed data corruption with constant assignments to object properties. (Zeev)
-- Changed __toString() to be called automatically only with print and echo
- statements. (Andi)
-- Replaced the exec_finished hook by the zend_post_deactive hook for
- extensions. The new hook will be run after the symbol table and destructors
- are run. (Derick)
-- Fixed possible crash when internal get_method() is not defined. (Andi)
-- Fixed calling methods using call_user_func() in conjunction with
- the array("Class","Method") syntax to use the scope of the PHP user function.
- (Dmitry)
-- Fixed php-cgi to not ignore command-line switches when run in a web context.
- This fixes our test cases allowing INI with GET sections to work. (Rasmus)
-- Fixed getopt() so it works without $_SERVER. (Rasmus, bfrance)
-- Added support for PHP 4 style object comparisons which is enabled in
- ze1_compatiblity_mode. (Andi)
-- Added support for PHP 4 style object conversion to long, double, and boolean
- values which is enabled in ze1_compatibility_mode. (Andi, Stas)
-- Allow object oriented extensions to overload comparison functions and other
- operations. Solves problems using SimpleXML values. (Andi, Zeev)
-- Fixed crash when accessing a class constant with a value which in turn is
- also a constant. (Dmitry)
-- Fixed object's truth value conversion. It is always true unless
- ze1_compatibility_mode is on in which it behaves like in PHP 4. (Stas)
-- Improved out of memory handling in new memory manager. (Stas)
-- Fixed crash when an object references itself during destructor call. (Andi)
-- Fixed crash in foreach() when iterating over object properties or a method's
- return values. (Andi)
-- Fixed crash when an exception is thrown in a destructor. Such exceptions are
- now ignored as destruction happens out of context at no definite time. (Andi)
-- Fixed crashes in exception handling. (Dmitry, Andi)
-- Changed prototype checks so that they aren't done on constructors. (Andi)
-- Changed prototype checks to output an E_STRICT message instead of
- an E_COMPILE_ERROR. (Andi)
-- Changed Iterator::has_more() to Iterator::valid(). (Marcus)
-- Upgraded bundled oniguruma library to version 2.2.2. (Rui, Moriyoshi)
-- Added mb_list_encoding() to return an array with all mbstring supported
- encodings. (Derick)
-- Added support for more ISO8601 datetime formats in strtotime(). (Moriyoshi)
- . Timezone specifier (ex. "20040301T02:00:00+19:00")
- . Week specifier (ex. "1997W021")
-- Renamed php.ini option "zend2.implicit_clone" to
- "zend.ze1_compatibility_mode" as it doesn't only affect implicit cloning.
- (Andi, Zeev)
-- Methods that override parent methods are now subject to prototype checking,
- and have to be compatible with the method they're overriding - this check is
- disabled in compatibility mode. (Andi, Zeev)
-- Fixed crash in php_ini_scanned_files() when no additional INI files were
- actually parsed. (Jon)
-- Fixed bug in gdImageFilledRectangle in the bundled GD library, that required
- x1 < x2 and y1 < y2 for coordinates. (Derick)
-- Fixed crash with foreach() and temporary objects($obj->method()->a ...) where
- method returns a non-referenced object. (Andi, Zeev)
-- Fixed problem preventing startup errors from being displayed. (Marcus)
-- Fixed start-up problem if both SPL and SimpleXML were enabled. The double
- initialization of apache 1.3 was causing problems here. (Marcus, Derick)
-- Fixed bug #27606 (Expression must be a modifiable lvalue compiler error).
- (Derick)
-- Fixed bug #27597 (pg_fetch_array not returning false). (Marcus)
-- Fixed bug #27586 (ArrayObject::getIterator crashes with [] assignment).
- (Marcus)
-- Fixed bug #27537 (Objects pointing to each other segfaults). (Dmitry)
-- Fixed bug #27535 (Problem with object freeing mechanism). (Dmitry)
-- Fixed bug #27504 (Visibility bugs in call_user_function()). (Dmitry)
-- Fixed bug #27338 (memory leak inside tsrm_virtual_cwd.c on win32). (Ilia)
-- Fixed bug #27291 (get_browser matches browscap.ini patterns incorrectly).
- (Jay)
-- Fixed bug #27287 (wddx segfaults during deserialization). (Moriyoshi)
-- Fixed bug #27263 (session extension crashes when unserializing referenced
- values / objects). (Moriyoshi)
-- Fixed bug #27237 (Working with simplexml crashes apache2). (Rob)
-- Fixed bug #27227 (Mixed case class names causes Fatal Error in Constructor
- call). (Marcus)
-- Fixed bug #27125 (strval() doesn't work for objects with __toString()).
- (Marcus)
-- Fixed bug #27123 (Fix crash caused by bug in get_object_vars()). (Andi)
-- Fixed bug #26677 (mbstring compile errors with IRIX compiler).
- (K.Kosako <kosako at sofnec dot co dot jp>, Rui, Moriyoshi)
-- Fixed bug #26206 (register_long_arrays breaks superglobals). (Zeev)
-- Fixed bug #25724 (argv and argc not defined). (Zeev)
-
-12 Feb 2004, PHP 5 Beta 4
-- Changed exceptions so that they must now inherit from the built-in Exception
- class. This allows for a general catch(Exception $e) statement to catch all
- exceptions. (Andi, Zeev)
-- Added SPL extension. (Marcus, Derick)
-- Added checks for invalid characters in a cookie name and cookie data
- into set[raw]cookie(). (Brian)
-- Added support for ++ and += (and similar) to SimpleXML. (Andi, Zeev)
-- Added infrastructure for ++ and += (and similar) to object overloading
- modules. (Andi, Zeev)
-- Added error message when trying to re-assign to $this variable. (Zeev, Andi)
-- Added support for an interface to extend another interface. (Zeev)
-- Added new pspell functions: (Brian)
- . pspell_config_dict_dir()
- . pspell_config_data_dir()
-- Added new Interbase functions: (Ard)
- . ibase_service_attach() and ibase_service_detach().
- . ibase_backup() and ibase_restore().
- . ibase_maintain_db(), ibase_db_info() and ibase_server_info().
-- Added context option "http"/"request_fulluri" to send entire URI in request
- which is required format for some proxies. (Sara)
-- Added optional third parameter 'strict' to array_keys(). (Andrey)
-- Added stream_lock() method to userspace streams interface. (Hartmut, Wez)
-- Added xsltprocessor->registerPHPFunctions(). (Christian)
-- Readded support for using classes before they are declared according to
- the behavior in PHP 4. This won't work with classes who are using PHP 5
- features such as interfaces. (Zeev, Andi)
-- Completely overhauled SimpleXML extension. (Marcus, Rob, Sterling)
-- Upgraded bundled SQLite library to version 2.8.11. (Ilia, Wez)
-- Improved destructor implementation to always call destructors on clean
- shutdown. An order of destruction is not guaranteed. (Zeev, Andi)
-- Redesigned exception support. This fixes many bugs in the previous design
- such as nested try's and problems with overloaded extensions. (Zeev, Andi)
-- Redesigned clone by adding a clone keyword (clone $obj) and copying all
- properties before __clone() is called. Also allows calling parent __clone
- function by using parent::__clone(). (Zeev, Andi)
-- Fixed interfaces to check for function return-by-reference equality when
- inheriting and implementing interfaces. (Andi, Zeev)
-- Fixed foreach() to respect property visibility. (Marcus)
-- Fixed problem with parse error in include() file not stopping PHP's
- execution. (Ilia)
-- Fixed var_export() to show public, protected and private modifiers properly.
- (Derick)
-- Fixed problems with longlong values in mysqli. (Georg)
-- Fixed class name case preserving of user defined classes. (Marcus)
-- Fixed bug #27145 (Unmangle private/protected property names before printing
- them inside error messages). (Ilia)
-- Fixed bug #27103 (preg_split('//u') incorrectly splits UTF-8 strings into
- octets). (Moriyoshi)
-- Fixed bug #27042 (SPL: SeekableIterator seek() broken). (Marcus)
-- Fixed bug #27008 (Every class method can be called as static). (Marcus)
-- Fixed bug #26938 (exec() has problems reading long lines).
- (Ilia, runekl[at]opoint[dot]com
-- Fixed bug #26947 (ext/dom: Crash when using DomDocument::getElementById()).
- (Christian)
-- Fixed bug #26911 (crash in sqlite extension when fetching data from empty
- queries). (Ilia)
-- Fixed bug #26844 (ext/mime_magic: magic file validation broken). (Jani)
-- Fixed bug #26819 (http_build_query() crashes on NULL output). (Ilia)
-- Fixed bug #26817 (http_build_query() does not handle private & protected
- object properties correctly). (Ilia)
-- Fixed bug #26815 (foreach of (DOM) childnodes crashes when Xinclude is used).
- (Rob)
-- Fixed bug #26796 (SQLite causes crashes with other extensions *connect()
- calls). (Marcus)
-- Fixed bug #26762 (unserialize() produces lowercase classnames). (Marcus)
-- Fixed bug #26743 (getElementsByTagName doesn't work properly). (Rob)
-- Fixed bug #26736 (__autoload not invoked for parent classes). (Marcus)
-- Fixed bug #26723 (domNode::appendChild() changes child node namespace). (Rob)
-- Fixed bug #26697 (calling class_exists() on a nonexistent class in __autoload
- results in segfault). (Marcus)
-- Fixed bug #26696 (string index in a switch() crashes with multiple matches).
- (Andi)
-- Fixed bug #26695 (Reflection API does not recognize mixed-case class hints).
- (Marcus)
-- Fixed bug #26690 (make xsltProcessor->transformToUri use streams wrappers).
- (Ilia)
-- Fixed bug #26680 (Added version check in mysqli_report_index). (Georg)
-- Fixed bug #26675 (Segfault on ArrayAccess use). (Marcus)
-- Fixed bug #26640 (__autoload() not invoked by Reflection classes). (Jani)
-- Fixed bug #26543 (call_user_func() broken for self, parent). (Stanislav)
-- Fixed bug #26077 (memory leak when new() result is not assigned and no
- constructor is defined). (Stanislav)
-- Fixed bug #26065 (Crash when nesting classes). (Marcus)
-- Fixed bug #25816 (disallow arrays in class constants). (Stanislav)
-- Fixed bug #25329 (sqlite_create_function with method and reference to $this).
- (Marcus)
-- Fixed bug #25038 (call_user_func() issues a warning if function throws an
- exception). (Marcus)
-- Fixed bug #24608 (__set not triggered when overloading with array).
- (Stanislav)
-- Fixed bug #24243 (enabling browscap causes segfault). (Wez)
-
-21 Dec 2003, PHP 5 Beta 3
-- Bundled new tidy extension (John, Wez)
-- Upgraded PCRE library to version 4.5. (Andrei)
-- Dropped Windows 95 support. (Andi)
-- Moved extensions to PECL:
- . ext/crack (Jani, Derick)
- . ext/db (Jani, Derick)
- . ext/mcal (Jani, Derick)
- . ext/qtdom (Jani, Derick)
- . ext/notes (Wez)
-- Added 'c' modifier to date() which returns the date in the ISO 8601 format.
- (Derick, Manuzhai)
-- Added an optional parameter to microtime() to get the time as float. (Andrey)
-- Added MacRoman encoding support to htmlentities(). (Derick, Marcus Bointon)
-- Added possibility to call PHP functions as XSLT-functions. (Christian)
-- Added possibility to prevent PHP from registering variables when input filter
- support is used. (Derick)
-- Added iconv stream filter (convert.iconv.*). (Moriyoshi)
-- Added EXSLT support in ext/xsl. (Christian)
-- Added qdbm handler for dba extension. (mg at iceni dot pl, Marcus)
-- Added new functions:
- . dba_key_split() to split inifile keys in an array. (Marcus)
- . time_nanosleep() signal safe sleep (Magnus, Ilia)
- . headers_list(). (Sara)
- . php_strip_whitespace(). strip whitespace & comments from a script. (Ilia)
- . php_check_syntax(). check php script for parse errors. (Ilia)
- . image_type_to_extension(). return extension based on image type. (Ilia)
- . stream_socket_sendto() and stream_socket_recvfrom(). (Wez)
- . iconv_mime_decode_headers(). (Moriyoshi)
- . get_declared_interfaces(). (Andrey, Marcus)
- . sqlite_fetch_column_types(). (Ilia)
-- Added proxy support to http:// wrapper. (Sara)
-- Added rename(), rmdir() and mkdir() support to userstreams. (Sara)
-- Added rename(), rmdir() and mkdir() support to ftp:// wrapper. (Sara)
-- Changed rename(), rmdir() and mkdir() to be routed via streams API. (Sara)
-- Changed stat() and family to be routed via streams API. (Sara)
-- Fixed include_once() / require_once() on Windows to honor case-insensitivity
- of files. (Andi)
-- Fixed get_declared_classes() to return only classes. (Andrey, Marcus)
-- Fixed __autoload() to preserve case of the passed class name. (Andi)
-- Fixed bug #26615 () (runekl at opoint dot com, Derick)
-- Fixed bug #26591 ("__autoload threw an exception" during an uncaught).
- (Marcus)
-- Fixed bug #26534 (stream_get_meta_data() -> Access Violation). (Wez)
-- Fixed bug #26528 (HTML entities are not being decoded by
- xml_parse()/xml_parse_into_struct()). (Ilia)
-- Fixed bug #26182 (Object properties created redundantly). (Andi)
-- Fixed bug #26156 (REPLACE_ZVAL_VALUE works on uninit stack-based zvals).
- (Moriyoshi)
-- Fixed bug #26083 (Non-working write support in ext/dom). (Ilia)
-- Fixed bug #26072 (--disable-libxml does not work). (Jani)
-- Fixed bug #26001 (serialize crashes when accessing an overloaded object that
- has no properties (NULL hashtable)). (Wez)
-- Fixed bug #25664 (COM crashes when calling a Delphi implementations of
- ITypeInfo). (Wez)
-- Fixed bug #24837 (Incorrect behaviour of PPP using foreach). (Marcus)
-- Fixed bug #24693 (Allow session.use_trans_sid to be enabled/disabled from
- inside the script). (Ilia)
-- Fixed bug #24394 (Serializing cross-referenced objects causes segfault).
- (Moriyoshi)
-
-30 Oct 2003, PHP 5 Beta 2
-- Lots and lots of changes in the Zend Engine 2 since beta 1:
- . Added Iterators
- . Improved memory manager
- . Added Reflection API
- . Removed the not so working namespaces support
- . Removed support for expressions within constant declarations.
- . You can read about most changes in ZEND_CHANGES under the Zend directory.
-- Improved the DBX extension: (Marc)
- . Added DBX_RESULT_UNBUFFERED flag for dbx_query().
- . Added dbx_fetch_row()
- . Added SQLite support.
-- Improved the Interbase extension: (Ard Biesheuvel)
- . Added support for multiple databases into ibase_trans()
- . Added support for CREATE DATABASE, SET TRANSACTION and EXECUTE PROCEDURE
- statements into ibase_query()
- . Added ability to bind PHP arrays to native Interbase arrays
- . Added ibase_commit_ret() and ibase_rollback_ret()
- . Added ibase_drop_db()
- . Added ibase_gen_id()
- . Added ibase_name_result()
- . Added ibase_errcode()
- . Added ibase_affected_rows() and ibase_num_params()
- . Added ibase_param_info()
- . Added ibase_wait_event()
- . Added ibase_set_event_handler() and ibase_free_event_handler()
-- Added new COM extension with integrated .Net support. (Wez)
-- Added new functions:
- . setrawcookie(). (Brian)
- . pg_version(). (Marcus)
- . dbase_get_header_info(). (Zak)
- . snmp_read_mib(). (Jani)
- . http_build_query(). (Sara)
- . ftp_alloc(). (Sara)
- . array_udiff(). (Andrey)
- . array_udiff_assoc(). (Andrey)
- . array_udiff_uassoc(). (Andrey)
- . array_diff_uassoc(). (Andrey)
- . convert_uuencode(). (Ilia)
- . convert_uudecode(). (Ilia)
- . substr_compare(). (Ilia)
- . pcntl_wait(). (GeorgeS)
-- Added "resume_pos" context option to "ftp://" wrapper. (Sara)
-- Added optional parameter to OCIWriteTemporaryLob() to specify the type of LOB
- (Patch by Novicky Marek <novicky@aarongroup.cz>). (Thies)
-- Added reflection API. (Andrei, George, Timm)
-- Changed length parameter in fgetcsv() to be optional. (Moriyoshi)
-- Fixed IPv6 support in MacOSX Panther. (Dan, Marko)
-- Fixed fgetcsv() to correctly handle international (non-ascii) characters.
- (Moriyoshi)
-- Fixed support for <![CDATA[]]> fields within XML documents in ext/xml.
- (Sterling)
-- Fixed visibility of __construct and __clone. (Marcus)
-- Fixed bug #25756 (SimpleXML's validate_schema_file() broken). (Moriyoshi)
-- Fixed bug #25581 (getimagesize() returns incorrect values on bitmap (os2)
- files). (Marcus)
-- Fixed bug #25494 (array_merge*() allows non-arrays as argument). (Jay)
-- Fixed bug #24766 (strange result array from unpack()). (Moriyoshi)
-- Fixed bug #24729 ($obj = new $className; causes crash when $className is not
- set). (Marcus)
-- Fixed bug #24565 (cannot read array elements received via $_REQUEST). (Zeev)
-- Fixed bug #24445 (get_parent_class() returns different values).
- (Sterling, Stanislav)
-- Fixed bug #24403 (preg_replace() problem: Using $this when not in object
- context). (Zeev)
-- Fixed bug #24399 (PEAR DB isError crash [instanceof_function fault?]).
- (Sterling, Marcus)
-- Fixed bug #24396 (foreach ($k=>$v), the key $k is missing). (Zeev)
-- Fixed bug #24279 (__get() crash when no value is returned). (Ilia)
-- Fixed bug #22367 (undefined variable has a value). (Zeev)
-- Fixed bug #19859 (allow fast_call_user_function to support __call).
- (Stanislav)
-- Fixed bug #17997 (Warning when switch() and reference are combined). (Zeev)
-- Fixed bug #17988 (strtotime failed to parse postgresql timestamp). (Derick)
-
-29 Jun 2003, PHP 5 Beta 1
-- Removed the bundled MySQL client library. (Sterling)
-- Switched to Zend Engine 2, which includes numerous engine level improvements.
- A full list is available at http://www.php.net/zend-engine-2.php.
-- Added SQLite (http://www.hwaci.com/sw/sqlite/) extension: (Wez, Marcus, Tal)
- . Includes bundled SQLite library
- . Enabled by default
-- Completely Overhauled XML support:
- . New simplexml extension. (Sterling)
- . New DOM extension. (Rob, Chregu, Marcus)
- . New XSL extension. (Chregu, Rob)
- . Moved the old DOM-XML and XSLT extensions to PECL. (James, Sterling)
- . ext/xml can now use either libxml2 or expat to parse XML. (Sterling)
- . Removed bundled expat library. (Jani)
-- New php.ini options:
- . "session.hash_function" and "session.hash_bits_per_character". (Sascha)
- . "mail.force_extra_paramaters". (Derick)
- . "register_long_arrays". (Zeev)
-- Improved the speed of internal functions that use callbacks by 40% due to a
- new internal fast_call_user_function() function. (Sterling)
-- Improved the streams support: (Wez)
- . Improved performance of readfile(), fpassthru() and some internal streams
- operations under Win32.
- . stream_socket_client() - similar to fsockopen(), but more powerful.
- . stream_socket_server() - Creates a server socket.
- . stream_socket_accept() - Accept a client connection.
- . stream_socket_get_name() - Get local or remote name of socket.
- . stream_copy_to_stream()
- . stream_get_line() - Reads either the specified number of bytes or until
- the ending string is found. (Ilia)
- . Added context property to userspace streams object. (Sara)
- . Added generic crypto interface for streams.
- (supports dynamic loading of OpenSSL)
- . Added lightweight streaming input abstraction to the Zend Engine scanners
- to provide uniform support for include()'ing data from PHP streams across
- all platforms.
- . Added 'string.base64' stream filter. (Moriyoshi)
- . Renamed stream_register_wrapper() to stream_wrapper_register(). (Derick)
-- Improved the GD extension: (Pierre-Alain Joye, Ilia)
- . imagefilter() - Apply different filters to image.
- (Only available with bundled GD library)
- . Antialiased drawing support:
- o imageantialias() - (de)active antialias
- o imageline() and imagepolygon() antialias support
-- Changed the length parameter in fgetss() to be optional. (Moriyoshi)
-- Changed ini parser to allow for handling of quoted multi-line values. (Ilia)
-- Changed get_extension_funcs() to return list of the built-in Zend Engine
- functions if "zend" is specified as the module name. (Ilia)
-- Changed array_search() to accept also objects as a needle. (Moriyoshi)
-- Changed ext/mcrypt to require libmcrypt version 2.5.6 or greater. (Derick)
-- Changed uniqid() parameters to be optional and allow any prefix length.
- (Marcus)
-- Added new iconv functions. (Moriyoshi)
- . iconv_strlen()
- . iconv_substr()
- . iconv_strpos()
- . iconv_strrpos()
- . iconv_mime_decode()
- . iconv_mime_encode()
-- Added misc. new functions:
- . ldap_sasl_bind(). (peter_c60@hotmail.com, Jani)
- . imap_getacl(). (Dan, Holger Burbach)
- . file_put_contents(). (Sterling)
- . proc_nice() - Changes priority of the current process. (Ilia)
- . pcntl_getpriority() and pcntl_setpriority(). (Ilia)
- . idate(), date_sunrise() and date_sunset(). (Moshe Doron)
- . strpbrk() - Searches a string for a list of characters. (Ilia)
- . get_headers() - Returns headers sent by the server of the specified URL.
- (Ilia)
- . str_split() - Breaks down a string into an array of elements based on
- length. (Ilia)
- . array_walk_recursive(). (Ilia)
- . array_combine(). (Andrey)
-- Added optional parameter to get_browser() to make it return an array. (Jay)
-- Added optional parameter to openssl_sign() to specify the hashing algorithm.
- (scott@planetscott.ca, Derick)
-- Added optional parameter to sha1(), sha1_file(), md5() and md5_file() which
- makes them return the digest as binary data. (Michael Bretterklieber, Derick)
-- Added optional parameter to mkdir() to make directory creation recursive.
- (Ilia)
-- Added optional parameter to file() which makes the result array not contain
- the line endings and to skip empty lines. (Ilia)
-- Added new range() functionality:
- . Support for float modifier. (Ilia)
- . Detection of numeric values inside strings passed as high & low. (Ilia)
- . Proper handle the situations where high == low. (Ilia)
- . Added an optional step parameter. (Jon)
-- Added encoding detection feature for expat XML parser.
- (Adam Dickmeiss, Moriyoshi)
-- Added missing multibyte (unicode) support and numeric entity support to
- html_entity_decode(). (Moriyoshi)
-- Added IPv6 support to ext/sockets. (Sara)
-- Added "ftp://" wrapper support to opendir(), stat() and unlink(). (Sara)
-- Added context options 'method', 'header' and 'content' for "http://" fopen
- wrapper. (Sara)
-- Added input filter support. See README.input_filter for more info. (Rasmus)
-- Added a replace count for str_[i]replace(), see bug #8218. (Sara)
-- Fixed is_executable() to be available also on Windows. (Shane)
-- Fixed dirname() and strip_tags() to be binary-safe. (Moriyoshi)
-- Fixed bug #24098 (crash in pathinfo()). (Ilia)
-- Fixed bug #21985 and #22064 (various mb_send_mail() issues). (Moriyoshi)
-- Fixed bug #21600 (Assign by reference function call changes variable
- contents). (Zeev)
diff --git a/README.CVS-RULES b/README.CVS-RULES
deleted file mode 100644
index cab77fc62c..0000000000
--- a/README.CVS-RULES
+++ /dev/null
@@ -1,107 +0,0 @@
-This is the first file you should be reading after you get your CVS account.
-We'll assume you're basically familiar with CVS, but feel free to post
-your questions on the mailing list. Please have a look at
-http://cvsbook.red-bean.com/ for more detailed information on CVS.
-
-PHP is developed through the efforts of a large number of people.
-Collaboration is a Good Thing(tm), and CVS lets us do this. Thus, following
-some basic rules with regards to CVS usage will:
-
- a. Make everybody happier, especially those responsible for maintaining
- the CVS itself.
- b. Keep the changes consistently well documented and easily trackable.
- c. Prevent some of those 'Oops' moments.
- d. Increase the general level of good will on planet Earth.
-
-
-Having said that, here are the organizational rules:
-
- 1. Respect other people working on the project.
-
- 2. Discuss any significant changes on the list before committing.
-
- 3. Look at EXTENSIONS file to see who is the primary maintainer of
- the code you want to contribute to.
-
- 4. If you "strongly disagree" about something another person did, don't
- start fighting publicly - take it up in private email.
-
- 5. If you don't know how to do something, ask first!
-
- 6. Test your changes before committing them. We mean it. Really.
-
-
-The next few rules are more of a technical nature.
-
- 1. DO NOT TOUCH ChangeLog! It is automagically updated from the commit
- messages every day. Woe be to those who attempt to mess with it.
-
- 2. All news updates intended for public viewing, such as new features,
- bug fixes, improvements, etc., should go into the NEWS file.
-
- NB! Lines, starting with @ will go automagically into NEWS file, but
- this is NOT recommended, though. Please, add news entries directly to
- NEWS file and don't forget to keep them adjusted and sorted.
-
- 3. Do not commit multiple file and dump all messages in one commit. If you
- modified several unrelated files, commit each group separately and
- provide a nice commit message for each one. See example below.
-
- 4. Do write your commit message in such a way that it makes sense even
- without the corresponding diff. One should be able to look at it, and
- immediately know what was modified. Definitely include the function name
- in the message as shown below.
-
- 5. In your commit messages, keep each line shorter than 80 characters. And
- try to align your lines vertically, if they wrap. It looks bad otherwise.
-
- 6. If you modified a function that is callable from PHP, prepend PHP to
- the function name as shown below.
-
-
-The format of the commit messages is pretty simple.
-
-If a line begins with #, it is taken to be a comment and will not appear
-in the ChangeLog. Everything else goes into the ChangeLog.
-
-It is important to note that if your comment or news logline spans multiple
-lines, you have to put # at the beginning of _every_ such line.
-
-Example. Say you modified two files, datetime.c and string.c. In datetime.c
-you added a new format option for date() function, and in string.c you fixed
-a memory leak in php_trim(). Don't commit both of these at once. Commit them
-separately and try to make sure your commit messages look something like the
-following.
-
-For datetime.c:
-
-(PHP date) Added new 'K' format modifier for printing out number of
- days until New Year's Eve.
-
-For string.c:
-(php_trim) Fixed a memory leak resulting from improper use of zval_dtor().
-# Man, that thing was leaking all over the place!
-
-The # lines will be omitted from the ChangeLog automagically.
-
-If you fix some bugs, you should note the bug ID numbers in your
-commit message. Bug ID should be prefixed by "#" for easier access to
-bug report when developers are browsing CVS via. LXR or Bonsai.
-
-Example:
-
-Fixed pgsql notice handler double free crash bug. Bug #14016
-
-If you don't see your messages in ChangeLog right away, don't worry!
-These files are updated once a day, so your stuff will not show up until
-somewhat later.
-
-You can use LXR (http://lxr.php.net/) and Bonsai (http://bonsai.php.net/)
-to look at PHP CVS repository in various ways.
-
-To receive daily updates to ChangeLog and NEWS, send an empty message to
-php-cvs-daily-subscribe@lists.php.net.
-
-Happy hacking,
-
-PHP Team
diff --git a/README.EXTENSIONS b/README.EXTENSIONS
deleted file mode 100644
index 51e3b730e7..0000000000
--- a/README.EXTENSIONS
+++ /dev/null
@@ -1,39 +0,0 @@
-Between PHP 4.0.6 and 4.1.0, the Zend module struct changed in a way
-that broke both source and binary compatibility. If you are
-maintaining a third party extension, here's how to update it:
-
-If this was your old module entry:
-
-zend_module_entry foo_module_entry = {
- "foo", /* extension name */
- foo_functions, /* extension function list */
- NULL, /* extension-wide startup function */
- NULL, /* extension-wide shutdown function */
- PHP_RINIT(foo), /* per-request startup function */
- PHP_RSHUTDOWN(foo), /* per-request shutdown function */
- PHP_MINFO(foo), /* information function */
- STANDARD_MODULE_PROPERTIES
-};
-
-Here's how it should look if you want your code to build with PHP
-4.1.0 and up:
-
-zend_module_entry foo_module_entry = {
-#if ZEND_MODULE_API_NO >= 20010901
- STANDARD_MODULE_HEADER,
-#endif
- "foo", /* extension name */
- foo_functions, /* extension function list */
- NULL, /* extension-wide startup function */
- NULL, /* extension-wide shutdown function */
- PHP_RINIT(foo), /* per-request startup function */
- PHP_RSHUTDOWN(foo), /* per-request shutdown function */
- PHP_MINFO(foo), /* information function */
-#if ZEND_MODULE_API_NO >= 20010901
- FOO_VERSION, /* extension version number (string) */
-#endif
- STANDARD_MODULE_PROPERTIES
-};
-
-If you don't care about source compatibility with earlier PHP releases
-than 4.1.0, you can drop the #if/#endif lines.
diff --git a/README.EXT_SKEL b/README.EXT_SKEL
deleted file mode 100644
index 599e6997c4..0000000000
--- a/README.EXT_SKEL
+++ /dev/null
@@ -1,194 +0,0 @@
-(NOTE: you may also want to take a look at the pear package
- PECL_Gen, a PHP-only alternative for this script that
- supports way more extension writing tasks and is
- supposed to replace ext_skel completely in the long run ...)
-
-WHAT IT IS
-
- It's a tool for automatically creating the basic framework for a PHP module
- and writing C code handling arguments passed to your functions from a simple
- configuration file. See an example at the end of this file.
-
-HOW TO USE IT
-
- Very simple. First, change to the ext/ directory of the PHP 4 sources. If
- you just need the basic framework and will be writing all the code in your
- functions yourself, you can now do
-
- ./ext_skel --extname=module_name
-
- and everything you need is placed in directory module_name.
-
- [ Note that GNU awk is likely required for this script to work. Debian
- systems seem to default to using mawk, so you may need to change the
- #! line in skeleton/create_stubs and the cat $proto | awk line in
- ext_skel to use gawk explicitly. ]
-
- If you don't need to test the existence of any external header files,
- libraries or functions in them, the module is already almost ready to be
- compiled in PHP. Just remove 3 comments in your_module_name/config.m4,
- change back up to PHP sources top directory, and do
-
- ./buildconf; ./configure --enable-module_name; make
-
- But if you already have planned the overall scheme of your module, what
- functions it will contain, their return types and the arguments they take
- (a very good idea) and don't want to bother yourself with creating function
- definitions and handling arguments passed yourself, it's time to create a
- function definitions file, which you will give as an argument to ext_skel
- with option
-
- --proto=filename.
-
-FORMAT OF FUNCTION DEFINITIONS FILE
-
- All the definitions must be on one line. In it's simplest form, it's just
- the function name, e.g.
-
- my_function
-
- but then you'll be left with an almost empty function body without any
- argument handling.
-
- Arguments are given in parenthesis after the function name, and are of
- the form 'argument_type argument_name'. Arguments are separated from each
- other with a comma and optional space. Argument_type can be one of int,
- bool, double, float, string, array, object or mixed.
-
- An optional argument is separated from the previous by an optional space,
- then '[' and of course comma and optional space, like all the other
- arguments. You should close a row of optional arguments with same amount of
- ']'s as there where '['s. Currently, it does not harm if you forget to do it
- or there is a wrong amount of ']'s, but this may change in the future.
-
- An additional short description may be added after the parameters.
- If present it will be filled into the 'proto' header comments in the stubs
- code and the <refpurpose> tag in the XML documentation.
-
- An example:
-
- my_function(int arg1, int arg2 [, int arg3 [, int arg4]]) this is my 1st
-
- Arguments arg3 and arg4 are optional.
-
- If possible, the function definition should also contain it's return type
- in front of the definition. It's not actually used for any C code generating
- purposes but PHP in-source documentation instead, and as such, very useful.
- It can be any of int, double, string, bool, array, object, resource, mixed
- or void.
-
- The file must contain nothing else but function definitions, no comments or
- empty lines.
-
-OTHER OPTIONS
-
- --no-help
-
- By default, ext_skel creates both comments in the source code and a test
- function to help first time module writers to get started and testing
- configuring and compiling their module. This option turns off all such things
- which may just annoy experienced PHP module coders. Especially useful with
-
- --stubs=file
-
- which will leave out also all module specific stuff and write just function
- stubs with function value declarations and passed argument handling, and
- function entries and definitions at the end of the file, for copying and
- pasting into an already existing module.
-
- --assign-params
- --string-lens
-
- By default, function proto 'void foo(string bar)' creates the following:
- ...
- zval **bar;
- ... (zend_get_parameters_ex() called in the middle...)
- convert_to_string_ex(bar);
-
- Specifying both of these options changes the generated code to:
- ...
- zval **bar_arg;
- int bar_len;
- char *bar = NULL;
- ... (zend_get_parameters_ex() called in the middle...)
- convert_to_string_ex(bar_arg);
- bar = Z_STRVAL_PP(bar_arg);
- bar_len = Z_STRLEN_PP(bar_arg);
-
- You shouldn't have to ask what happens if you leave --string-lens out. If you
- have to, it's questionable whether you should be reading this document.
-
- --with-xml[=file]
-
- Creates the basics for phpdoc .xml file.
-
- --full-xml
-
- Not implemented yet. When or if there will ever be created a framework for
- self-contained extensions to use phpdoc system for their documentation, this
- option enables it on the created xml file.
-
-CURRENT LIMITATIONS, BUGS AND OTHER ODDITIES
-
- Only arguments of types int, bool, double, float, string and array are
- handled. For other types you must write the code yourself. And for type
- mixed, it wouldn't even be possible to write anything, because only you
- know what to expect.
-
- It can't handle correctly, and probably never will, variable list of
- of arguments. (void foo(int bar [, ...])
-
- Don't trust the generated code too much. It tries to be useful in most of
- the situations you might encounter, but automatic code generation will never
- beat a programmer who knows the real situation at hand. ext_skel is generally
- best suited for quickly generating a wrapper for c-library functions you
- might want to have available in PHP too.
-
- This program doesn't have a --help option. It has --no-help instead.
-
-EXAMPLE
-
- The following _one_ line
-
- bool my_drawtext(resource image, string text, resource font, int x, int y [, int color])
-
- will create this function definition for you (note that there are a few
- question marks to be replaced by you, and you must of course add your own
- value definitions too):
-
-/* {{{ proto bool my_drawtext(resource image, string text, resource font, int x, int y[, int color])
- */
-PHP_FUNCTION(my_drawtext)
-{
- zval **image, **text, **font, **x, **y, **color;
- int argc;
- int image_id = -1;
- int font_id = -1;
-
- argc = ZEND_NUM_ARGS();
- if (argc < 5 || argc > 6 || zend_get_parameters_ex(argc, &image, &text, &font, &x, &y, &color) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(???, ???, image, image_id, "???", ???_rsrc_id);
- ZEND_FETCH_RESOURCE(???, ???, font, font_id, "???", ???_rsrc_id);
-
- switch (argc) {
- case 6:
- convert_to_long_ex(color);
- /* Fall-through. */
- case 5:
- convert_to_long_ex(y);
- convert_to_long_ex(x);
- /* font: fetching resources already handled. */
- convert_to_string_ex(text);
- /* image: fetching resources already handled. */
- break;
- default:
- WRONG_PARAM_COUNT;
- }
-
- php_error(E_WARNING, "my_drawtext: not yet implemented");
-}
-/* }}} */
-
diff --git a/README.PARAMETER_PARSING_API b/README.PARAMETER_PARSING_API
deleted file mode 100644
index a051723b5b..0000000000
--- a/README.PARAMETER_PARSING_API
+++ /dev/null
@@ -1,127 +0,0 @@
-New parameter parsing functions
-===============================
-
-It should be easier to parse input parameters to an extension function.
-Hence, borrowing from Python's example, there are now a set of functions
-that given the string of type specifiers, can parse the input parameters
-and store the results in the user specified variables. This avoids most
-of the IS_* checks and convert_to_* conversions. The functions also
-check for the appropriate number of parameters, and try to output
-meaningful error messages.
-
-
-Prototypes
-----------
-/* Implemented. */
-int zend_parse_parameters(int num_args TSRMLS_DC, char *type_spec, ...);
-int zend_parse_parameters_ex(int flags, int num_args TSRMLS_DC, char *type_spec, ...);
-
-The zend_parse_parameters() function takes the number of parameters
-passed to the extension function, the type specifier string, and the
-list of pointers to variables to store the results in. The _ex() version
-also takes 'flags' argument -- current only ZEND_PARSE_PARAMS_QUIET can
-be used as 'flags' to specify that the function should operate quietly
-and not output any error messages.
-
-Both functions return SUCCESS or FAILURE depending on the result.
-
-The auto-conversions are performed as necessary. Arrays, objects, and
-resources cannot be auto-converted.
-
-
-Type specifiers
----------------
- l - long
- d - double
- s - string (with possible null bytes) and its length
- b - boolean, stored in zend_bool
- r - resource (stored in zval)
- a - array
- o - object (of any type)
- O - object (of specific type, specified by class entry)
- z - the actual zval
-
- The following characters also have a meaning in the specifier string:
- | - indicates that the remaining parameters are optional, they
- should be initialized to default values by the extension since they
- will not be touched by the parsing function if they are not
- passed to it.
- / - use SEPARATE_ZVAL_IF_NOT_REF() on the parameter it follows
- ! - the parameter it follows can be of specified type or NULL (only applies
- to 'a', 'o', 'O', 'r', and 'z'). If NULL is passed, the results
- pointer is set to NULL as well.
-
-Examples
---------
-/* Gets a long, a string and its length, and a zval */
-long l;
-char *s;
-int s_len;
-zval *param;
-if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "lsz",
- &l, &s, &s_len, &param) == FAILURE) {
- return;
-}
-
-
-/* Gets an object of class specified by my_ce, and an optional double. */
-zval *obj;
-double d = 0.5;
-zend_class_entry my_ce;
-if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "O|d",
- &obj, my_ce, &d) == FAILURE) {
- return;
-}
-
-
-/* Gets an object or null, and an array.
- If null is passed for object, obj will be set to NULL. */
-zval *obj;
-zval *arr;
-if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "o!a",
- &obj, &arr) == FAILURE) {
- return;
-}
-
-
-/* Gets a separated array which can also be null. */
-zval *arr;
-if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "a/!",
- &arr) == FAILURE) {
- return;
-}
-
-
-/* Get only the first three parameters (useful for varargs functions). */
-zval *z;
-zend_bool b;
-zval *r;
-if (zend_parse_parameters(3 TSRMLS_CC, "zbr!",
- &z, &b, &r) == FAILURE) {
- return;
-}
-
-
-/* Get either a set of 3 longs or a string. */
-long l1, l2, l3;
-char *s;
-/*
- * The function expects a pointer to a integer in this case, not a long
- * or any other type. If you specify a type which is larger
- * than a 'int', the upper bits might not be initialized
- * properly, leading to random crashes on platforms like
- * Tru64 or Linux/Alpha.
- */
-int length;
-
-if (zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, ZEND_NUM_ARGS() TSRMLS_CC,
- "lll", &l1, &l2, &l3) == SUCCESS) {
- /* manipulate longs */
-} else if (zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, ZEND_NUM_ARGS() TSRMLS_CC,
- "s", &s, &length) == SUCCESS) {
- /* manipulate string */
-} else {
- /* output error */
-
- return;
-}
diff --git a/README.PHP4-TO-PHP5-THIN-CHANGES b/README.PHP4-TO-PHP5-THIN-CHANGES
deleted file mode 100644
index 0a2c6d6657..0000000000
--- a/README.PHP4-TO-PHP5-THIN-CHANGES
+++ /dev/null
@@ -1,155 +0,0 @@
-1. strrpos() and strripos() now use the entire string as a needle. Be aware
- that the existing scripts may no longer work as you expect.
-
- EX :
- <?php
- var_dump(strrpos("ABCDEF","DEF"));
- var_dump(strrpos("ABCDEF","DAF"));
- ?>
-
- Will give you different results. The former returns 3 while the latter
- returns false rather than the position of the last occurrence of 'D'.
- The same applies to strripos().
-
-2. Illegal use of string offsets causes E_ERROR instead of E_WARNING.
-
- EX :
- <?php
- $a = "foo";
- unset($a[0][1][2]);
- ?>
-
- Fatal error: Cannot use string offset as an array in ... on line 1
-
-3. array_merge() was changed to accept only arrays. If a non-array variable is
- passed, a E_WARNING will be thrown for every such parameter. Be careful
- because your code may start emitting E_WARNING out of the blue.
-
-4. Be careful when porting from ext/mysql to ext/mysqli. The following
- functions return NULL when no more data is available in the result set
- (ext/mysql's functions return FALSE).
-
- - mysqli_fetch_row()
- - mysqli_fetch_array()
- - mysqli_fetch_assoc()
-
-5. PATH_TRANSLATED server variable is no longer set implicitly under
- Apache2 SAPI in contrast to the situation in PHP 4, where it is set to the
- same value as the SCRIPT_FILENAME server variable when it is not populated
- by Apache. This change was made to comply with the CGI specification.
- Please refer to bug #23610 for further information.
-
-6. Starting PHP 5.0.0 the T_ML_CONSTANT constant is no longer defined by the
- ext/tokenizer extension. If error_reporting is set to E_ALL notices will
- be produced. Instead of T_ML_CONSTANT for /* */ the T_COMMENT constant
- is used, thus both // and /* */ are resolved as the T_COMMENT constant.
- However the PHPDoc style comments /** */ ,which starting PHP 5 are parsed
- by PHP, are recongnized as T_DOC_COMMENT.
-
-7. $_SERVER should be populated with argc and argv if variables_order
- includes "S". If you have specifically configured your system to not
- create $_SERVER, then of course it shouldn't be there. The change was to
- always make argc and argv available in the CLI version regardless of the
- variables_order setting. As in, the CLI version will now always populate
- the global $argc and $argv variables.
-
-8. In some cases classes must be declared before used. It only happens only
- if some of the new features of PHP 5 are used. Otherwise the behaviour is
- the old.
- Example 1 (works with no errors):
- <?php
- $a = new a();
- class a {
- }
- ?>
-
- Example 2 (throws an error):
- <?php
- $a = new a();
- interface b{
- }
- class a implements b {
- }
- ?>
-
- Output (example 2) :
- Fatal error: Class 'a' not found in /tmp/cl.php on line 2
-
-9. get_class() starting PHP 5 returns the name of the class as it was
- declared which may lead to problems in older scripts that rely on
- the previous behaviour - the class name is lowercased. Expect the
- same behaviour from get_parent_class() when applicable.
- Example :
- <?php
- class FooBar {
- }
- class ExtFooBar extends FooBar{}
- $a = new FooBar();
- var_dump(get_class($a), get_parent_class($a));
- ?>
-
- Output (PHP 4):
- string(6) "foobar"
- string(9) "extfoobar"
-
- Output (PHP 5):
- string(6) "FooBar"
- string(9) "ExtFooBar"
- ----------------------------------------------------------------------
- Example code that will break :
- //....
- function someMethod($p) {
- if (get_class($p) != 'helpingclass') {
- return FALSE;
- }
- //...
- }
- //...
- Possible solution is to search for get_class() and get_parent_class() in
- all your scripts and use strtolower().
-
-10. get_class_methods() returns the names of the methods of a class as they
- declared. In PHP4 the names are all lowercased.
- Example code :
- <?php
- class Foo{
- function doFoo(){}
- function hasFoo(){}
- }
- var_dump(get_class_methods("Foo"));
- ?>
- Output (PHP4):
- array(2) {
- [0]=>
- string(5) "dofoo"
- [1]=>
- string(6) "hasfoo"
- }
- Output (PHP5):
- array(2) {
- [0]=>
- string(5) "doFoo"
- [1]=>
- string(6) "hasFoo"
- }
-
-11. Assignment $this is impossible. Starting PHP 5.0.0 $this has special
- meaning in class methods and is recognized by the PHP parser. The latter
- will generate a parse error when assignment to $this is found
- Example code :
- <?php
- class Foo {
- function assignNew($obj) {
- $this = $obj;
- }
- }
- $a = new Foo();
- $b = new Foo();
- $a->assignNew($b);
- echo "I was executed\n";
- ?>
- Output (PHP 4):
- I was executed
- Output (PHP 5):
- PHP Fatal error: Cannot re-assign $this in /tmp/this_ex.php on line 4
-
diff --git a/README.QNX b/README.QNX
deleted file mode 100644
index d70d2e5d8b..0000000000
--- a/README.QNX
+++ /dev/null
@@ -1,57 +0,0 @@
-QNX4 Installation Notes
------------------------
-
-NOTE: General installation instructions are in the INSTALL file
-
-
-1. To compile and test PHP3 you have to grab, compile and install:
- - GNU dbm library or another db library;
- - GNU bison (1.25 or later; 1.25 tested);
- - GNU flex (any version supporting -o and -P options; 2.5.4 tested);
- - GNU diffutils (any version supporting -w option; 2.7 tested);
-
-2. To use CVS version you may need also:
- - GNU CVS (1.9 tested);
- - GNU autoconf (2.12 tested);
- - GNU m4 (1.3 or later preferable; 1.4 tested);
-
-3. To run configure define -lunix in command line:
- LDFLAGS=-lunix ./configure
-
-4. To use Sybase SQL Anywhere define ODBC_QNX and CUSTOM_ODBC_LIBS in
- command line and run configure with --with-custom-odbc:
- CFLAGS=-DODBC_QNX LDFLAGS=-lunix CUSTOM_ODBC_LIBS="-ldblib -lodbc" ./configure --with-custom-odbc=/usr/lib/sqlany50
- If you have SQL Anywhere version 5.5.00, then you have to add
- CFLAGS=-DSQLANY_BUG
- to workaround its SQLFreeEnv() bug. Other versions has not been tested,
- so try without this flag first.
-
-5. To build the Apache module, you may have to hardcode an include path for
- alloc.h in your Apache base directory:
- - APACHE_DIRECTORY/src/httpd.h:
- change #include "alloc.h"
- to #include "APACHE_DIRECTORY/src/alloc.h"
- Unless you want to use system regex library, you have to hardcode also
- a path to regex.h:
- - APACHE_DIRECTORY/src/conf.h:
- change #include <regex.h>
- to #include "APACHE_DIRECTORY/src/regex/regex.h"
- I don't know so far why this required for QNX, may be it is Watcom
- compiler problem.
-
- If you building Apache module with SQL Anywhere support, you'll get
- symbol conflict with BOOL. It is defined in Apache (httpd.h) and in
- SQL Anywhere (odbc.h). This has nothing to do with PHP, so you have to
- fix it yourself someway.
-
-6. With above precautions, it should compile as is and pass regression
- tests completely:
- make
- make check
- make install
-
- Don't bother me unless you really sure you made that all but it
- still doesn't work.
-
-June 28, 1998
-Igor Kovalenko -- owl@infomarket.ru
diff --git a/README.SELF-CONTAINED-EXTENSIONS b/README.SELF-CONTAINED-EXTENSIONS
deleted file mode 100644
index e6a375331b..0000000000
--- a/README.SELF-CONTAINED-EXTENSIONS
+++ /dev/null
@@ -1,155 +0,0 @@
-$Id$
-=============================================================================
-
-HOW TO CREATE A SELF-CONTAINED PHP EXTENSION
-
- A self-contained extension can be distributed independently of
- the PHP source. To create such an extension, two things are
- required:
-
- - Configuration file (config.m4)
- - Source code for your module
-
- We will describe now how to create these and how to put things
- together.
-
-PREPARING YOUR SYSTEM
-
- While the result will run on any system, a developer's setup needs these
- tools:
-
- GNU autoconf
- GNU automake
- GNU libtool
- GNU m4
-
- All of these are available from
-
- ftp://ftp.gnu.org/pub/gnu/
-
-CONVERTING AN EXISTING EXTENSION
-
- Just to show you how easy it is to create a self-contained
- extension, we will convert an embedded extension into a
- self-contained one. Install PHP and execute the following
- commands.
-
- $ mkdir /tmp/newext
- $ cd /tmp/newext
-
- You now have an empty directory. We will copy the files from
- the mysql extension:
-
- $ cp -rp php-4.0.X/ext/mysql/* .
-
- It is time to finish the module. Run:
-
- $ phpize
-
- You can now ship the contents of the directory - the extension
- can live completely on its own.
-
- The user instructions boil down to
-
- $ ./configure \
- [--with-php-config=/path/to/php-config] \
- [--with-mysql=MYSQL-DIR]
- $ make install
-
- The MySQL module will either use the embedded MySQL client
- library or the MySQL installation in MYSQL-DIR.
-
-
-DEFINING THE NEW EXTENSION
-
- Our demo extension is called "foobar".
-
- It consists of two source files "foo.c" and "bar.c"
- (and any arbitrary amount of header files, but that is not
- important here).
-
- The demo extension does not reference any external
- libraries (that is important, because the user does not
- need to specify anything).
-
-
- LTLIBRARY_SOURCES specifies the names of the sources files. You can
- name an arbitrary number of source files here.
-
-CREATING THE M4 CONFIGURATION FILE
-
- The m4 configuration can perform additional checks. For a
- self-contained extension, you do not need more than a few
- macro calls.
-
-------------------------------------------------------------------------------
-PHP_ARG_ENABLE(foobar,whether to enable foobar,
-[ --enable-foobar Enable foobar])
-
-if test "$PHP_FOOBAR" != "no"; then
- PHP_NEW_EXTENSION(foobar, foo.c bar.c, $ext_shared)
-fi
-------------------------------------------------------------------------------
-
- PHP_ARG_ENABLE will automatically set the correct variables, so
- that the extension will be enabled by PHP_NEW_EXTENSION in shared mode.
-
- The first argument of PHP_NEW_EXTENSION describes the name of the
- extension. The second names the source-code files. The third passes
- $ext_shared which is set by PHP_ARG_ENABLE/WITH to PHP_NEW_EXTENSION.
-
- Please use always PHP_ARG_ENABLE or PHP_ARG_WITH. Even if you do not
- plan to distribute your module with PHP, these facilities allow you
- to integrate your module easily into the main PHP module framework.
-
-CREATING SOURCE FILES
-
- ext_skel can be of great help when creating the common code for all modules
- in PHP for you and also writing basic function definitions and C code for
- handling arguments passed to your functions. See README.EXT_SKEL for further
- information.
-
- As for the rest, you are currently alone here. There are a lot of existing
- modules, use a simple module as a starting point and add your own code.
-
-
-CREATING THE SELF-CONTAINED EXTENSION
-
- Put config.m4 and the source files into one directory. Then, run phpize
- (this is installed during make install by PHP 4.0).
-
- For example, if you configured PHP with --prefix=/php, you would run
-
- $ /php/bin/phpize
-
- This will automatically copy the necessary build files and create
- configure from your config.m4.
-
- And that's it. You now have a self-contained extension.
-
-INSTALLING A SELF-CONTAINED EXTENSION
-
- An extension can be installed by running:
-
- $ ./configure \
- [--with-php-config=/path/to/php-config]
- $ make install
-
-ADDING SHARED MODULE SUPPORT TO A MODULE
-
- In order to be useful, a self-contained extension must be loadable
- as a shared module. I will explain now how you can add shared module
- support to an existing module called foo.
-
- 1. In config.m4, use PHP_ARG_WITH/PHP_ARG_ENABLE. Then you will
- automatically be able to use --with-foo=shared[,..] or
- --enable-foo=shared[,..].
-
- 2. In config.m4, use PHP_NEW_EXTENSION(foo,.., $ext_shared) to enable
- building the extension.
-
- 3. Add the following lines to your C source file:
-
- #ifdef COMPILE_DL_FOO
- ZEND_GET_MODULE(foo)
- #endif
diff --git a/README.STREAMS b/README.STREAMS
deleted file mode 100644
index f625406a3b..0000000000
--- a/README.STREAMS
+++ /dev/null
@@ -1,379 +0,0 @@
-An Overview of the PHP Streams abstraction
-==========================================
-$Id$
-
-WARNING: some prototypes in this file are out of date.
-The information contained here is being integrated into
-the PHP manual - stay tuned...
-
-Please send comments to: Wez Furlong <wez@thebrainroom.com>
-
-Why Streams?
-============
-You may have noticed a shed-load of issock parameters flying around the PHP
-code; we don't want them - they are ugly and cumbersome and force you to
-special case sockets and files every time you need to work with a "user-level"
-PHP file pointer.
-Streams take care of that and present the PHP extension coder with an ANSI
-stdio-alike API that looks much nicer and can be extended to support non file
-based data sources.
-
-Using Streams
-=============
-Streams use a php_stream* parameter just as ANSI stdio (fread etc.) use a
-FILE* parameter.
-
-The main functions are:
-
-PHPAPI size_t php_stream_read(php_stream * stream, char * buf, size_t count);
-PHPAPI size_t php_stream_write(php_stream * stream, const char * buf, size_t
- count);
-PHPAPI size_t php_stream_printf(php_stream * stream TSRMLS_DC,
- const char * fmt, ...);
-PHPAPI int php_stream_eof(php_stream * stream);
-PHPAPI int php_stream_getc(php_stream * stream);
-PHPAPI char *php_stream_gets(php_stream * stream, char *buf, size_t maxlen);
-PHPAPI int php_stream_close(php_stream * stream);
-PHPAPI int php_stream_flush(php_stream * stream);
-PHPAPI int php_stream_seek(php_stream * stream, off_t offset, int whence);
-PHPAPI off_t php_stream_tell(php_stream * stream);
-PHPAPI int php_stream_lock(php_stream * stream, int mode);
-
-These (should) behave in the same way as the ANSI stdio functions with similar
-names: fread, fwrite, fprintf, feof, fgetc, fgets, fclose, fflush, fseek, ftell, flock.
-
-Opening Streams
-===============
-In most cases, you should use this API:
-
-PHPAPI php_stream *php_stream_open_wrapper(char *path, char *mode,
- int options, char **opened_path TSRMLS_DC);
-
-Where:
- path is the file or resource to open.
- mode is the stdio compatible mode eg: "wb", "rb" etc.
- options is a combination of the following values:
- IGNORE_PATH (default) - don't use include path to search for the file
- USE_PATH - use include path to search for the file
- IGNORE_URL - do not use plugin wrappers
- REPORT_ERRORS - show errors in a standard format if something
- goes wrong.
- STREAM_MUST_SEEK - If you really need to be able to seek the stream
- and don't need to be able to write to the original
- file/URL, use this option to arrange for the stream
- to be copied (if needed) into a stream that can
- be seek()ed.
-
- opened_path is used to return the path of the actual file opened,
- but if you used STREAM_MUST_SEEK, may not be valid. You are
- responsible for efree()ing opened_path. opened_path may be (and usually
- is) NULL.
-
-If you need to open a specific stream, or convert standard resources into
-streams there are a range of functions to do this defined in php_streams.h.
-A brief list of the most commonly used functions:
-
-PHPAPI php_stream *php_stream_fopen_from_file(FILE *file, const char *mode);
- Convert a FILE * into a stream.
-
-PHPAPI php_stream *php_stream_fopen_tmpfile(void);
- Open a FILE * with tmpfile() and convert into a stream.
-
-PHPAPI php_stream *php_stream_fopen_temporary_file(const char *dir,
- const char *pfx, char **opened_path TSRMLS_DC);
- Generate a temporary file name and open it.
-
-There are some network enabled relatives in php_network.h:
-
-PHPAPI php_stream *php_stream_sock_open_from_socket(int socket, int persistent);
- Convert a socket into a stream.
-
-PHPAPI php_stream *php_stream_sock_open_host(const char *host, unsigned short port,
- int socktype, int timeout, int persistent);
- Open a connection to a host and return a stream.
-
-PHPAPI php_stream *php_stream_sock_open_unix(const char *path, int persistent,
- struct timeval *timeout);
- Open a UNIX domain socket.
-
-
-Stream Utilities
-================
-
-If you need to copy some data from one stream to another, you will be please
-to know that the streams API provides a standard way to do this:
-
-PHPAPI size_t php_stream_copy_to_stream(php_stream *src,
- php_stream *dest, size_t maxlen);
-
-If you want to copy all remaining data from the src stream, pass
-PHP_STREAM_COPY_ALL as the maxlen parameter, otherwise maxlen indicates the
-number of bytes to copy.
-This function will try to use mmap where available to make the copying more
-efficient.
-
-If you want to read the contents of a stream into an allocated memory buffer,
-you should use:
-
-PHPAPI size_t php_stream_copy_to_mem(php_stream *src, char **buf,
- size_t maxlen, int persistent);
-
-This function will set buf to the address of the buffer that it allocated,
-which will be maxlen bytes in length, or will be the entire length of the
-data remaining on the stream if you set maxlen to PHP_STREAM_COPY_ALL.
-The buffer is allocated using pemalloc(); you need to call pefree() to
-release the memory when you are done.
-As with copy_to_stream, this function will try use mmap where it can.
-
-If you have an existing stream and need to be able to seek() it, you
-can use this function to copy the contents into a new stream that can
-be seek()ed:
-
-PHPAPI int php_stream_make_seekable(php_stream *origstream, php_stream **newstream);
-
-It returns one of the following values:
-#define PHP_STREAM_UNCHANGED 0 /* orig stream was seekable anyway */
-#define PHP_STREAM_RELEASED 1 /* newstream should be used; origstream is no longer valid */
-#define PHP_STREAM_FAILED 2 /* an error occurred while attempting conversion */
-#define PHP_STREAM_CRITICAL 3 /* an error occurred; origstream is in an unknown state; you should close origstream */
-
-make_seekable will always set newstream to be the stream that is valid
-if the function succeeds.
-When you have finished, remember to close the stream.
-
-NOTE: If you only need to seek forward, there is no need to call this
-function, as the php_stream_seek can emulate forward seeking when the
-whence parameter is SEEK_CUR.
-
-NOTE: Writing to the stream may not affect the original source, so it
-only makes sense to use this for read-only use.
-
-NOTE: If the origstream is network based, this function will block
-until the whole contents have been downloaded.
-
-NOTE: Never call this function with an origstream that is referenced
-as a resource! It will close the origstream on success, and this
-can lead to a crash when the resource is later used/released.
-
-NOTE: If you are opening a stream and need it to be seekable, use the
-STREAM_MUST_SEEK option to php_stream_open_wrapper();
-
-PHPAPI int php_stream_supports_lock(php_stream * stream);
-
-This function will return either 1 (success) or 0 (failure) indicating whether or
-not a lock can be set on this stream. Typically you can only set locks on stdio streams.
-
-Casting Streams
-===============
-What if your extension needs to access the FILE* of a user level file pointer?
-You need to "cast" the stream into a FILE*, and this is how you do it:
-
-FILE * fp;
-php_stream * stream; /* already opened */
-
-if (php_stream_cast(stream, PHP_STREAM_AS_STDIO, (void*)&fp, REPORT_ERRORS) == FAILURE) {
- RETURN_FALSE;
-}
-
-The prototype is:
-
-PHPAPI int php_stream_cast(php_stream * stream, int castas, void ** ret, int
- show_err);
-
-The show_err parameter, if non-zero, will cause the function to display an
-appropriate error message of type E_WARNING if the cast fails.
-
-castas can be one of the following values:
-PHP_STREAM_AS_STDIO - a stdio FILE*
-PHP_STREAM_AS_FD - a generic file descriptor
-PHP_STREAM_AS_SOCKETD - a socket descriptor
-
-If you ask a socket stream for a FILE*, the abstraction will use fdopen to
-create it for you. Be warned that doing so may cause buffered data to be lost
-if you mix ANSI stdio calls on the FILE* with php stream calls on the stream.
-
-If your system has the fopencookie function, php streams can synthesize a
-FILE* on top of any stream, which is useful for SSL sockets, memory based
-streams, data base streams etc. etc.
-
-In situations where this is not desirable, you should query the stream
-to see if it naturally supports FILE *. You can use this code snippet
-for this purpose:
-
- if (php_stream_is(stream, PHP_STREAM_IS_STDIO)) {
- /* can safely cast to FILE* with no adverse side effects */
- }
-
-You can use:
-
-PHPAPI int php_stream_can_cast(php_stream * stream, int castas)
-
-to find out if a stream can be cast, without actually performing the cast, so
-to check if a stream is a socket you might use:
-
-if (php_stream_can_cast(stream, PHP_STREAM_AS_SOCKETD) == SUCCESS) {
- /* it can be a socket */
-}
-
-Please note the difference between php_stream_is and php_stream_can_cast;
-stream_is tells you if the stream is a particular type of stream, whereas
-can_cast tells you if the stream can be forced into the form you request.
-The former doesn't change anything, while the later *might* change some
-state in the stream.
-
-Stream Internals
-================
-
-There are two main structures associated with a stream - the php_stream
-itself, which holds some state information (and possibly a buffer) and a
-php_stream_ops structure, which holds the "virtual method table" for the
-underlying implementation.
-
-The php_streams ops struct consists of pointers to methods that implement
-read, write, close, flush, seek, gets and cast operations. Of these, an
-implementation need only implement write, read, close and flush. The gets
-method is intended to be used for streams if there is an underlying method
-that can efficiently behave as fgets. The ops struct also contains a label
-for the implementation that will be used when printing error messages - the
-stdio implementation has a label of "STDIO" for example.
-
-The idea is that a stream implementation defines a php_stream_ops struct, and
-associates it with a php_stream using php_stream_alloc.
-
-As an example, the php_stream_fopen() function looks like this:
-
-PHPAPI php_stream * php_stream_fopen(const char * filename, const char * mode)
-{
- FILE * fp = fopen(filename, mode);
- php_stream * ret;
-
- if (fp) {
- ret = php_stream_alloc(&php_stream_stdio_ops, fp, 0, 0, mode);
- if (ret)
- return ret;
-
- fclose(fp);
- }
- return NULL;
-}
-
-php_stream_stdio_ops is a php_stream_ops structure that can be used to handle
-FILE* based streams.
-
-A socket based stream would use code similar to that above to create a stream
-to be passed back to fopen_wrapper (or it's yet to be implemented successor).
-
-The prototype for php_stream_alloc is this:
-
-PHPAPI php_stream * php_stream_alloc(php_stream_ops * ops, void * abstract,
- size_t bufsize, int persistent, const char * mode)
-
-ops is a pointer to the implementation,
-abstract holds implementation specific data that is relevant to this instance
-of the stream,
-bufsize is the size of the buffer to use - if 0, then buffering at the stream
-level will be disabled (recommended for underlying sources that implement
-their own buffering - such a FILE*),
-persistent controls how the memory is to be allocated - persistently so that
-it lasts across requests, or non-persistently so that it is freed at the end
-of a request (it uses pemalloc),
-mode is the stdio-like mode of operation - php streams places no real meaning
-in the mode parameter, except that it checks for a 'w' in the string when
-attempting to write (this may change).
-
-The mode parameter is passed on to fdopen/fopencookie when the stream is cast
-into a FILE*, so it should be compatible with the mode parameter of fopen().
-
-Writing your own stream implementation
-======================================
-
-!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-RULE #1: when writing your own streams: make sure you have configured PHP with
---enable-debug.
-I've taken some great pains to hook into the Zend memory manager to help track
-down allocation problems. It will also help you spot incorrect use of the
-STREAMS_DC, STREAMS_CC and the semi-private STREAMS_REL_CC macros for function
-definitions.
-!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-
-RULE #2: Please use the stdio stream as a reference; it will help you
-understand the semantics of the stream operations, and it will always
-be more up to date than these docs :-)
-
-First, you need to figure out what data you need to associate with the
-php_stream. For example, you might need a pointer to some memory for memory
-based streams, or if you were making a stream to read data from an RDBMS like
-MySQL, you might want to store the connection and rowset handles.
-
-The stream has a field called abstract that you can use to hold this data.
-If you need to store more than a single field of data, define a structure to
-hold it, allocate it (use pemalloc with the persistent flag set
-appropriately), and use the abstract pointer to refer to it.
-
-For structured state you might have this:
-
-struct my_state {
- MYSQL conn;
- MYSQL_RES * result;
-};
-
-struct my_state * state = pemalloc(sizeof(struct my_state), persistent);
-
-/* initialize the connection, and run a query, using the fields in state to
- * hold the results */
-
-state->result = mysql_use_result(&state->conn);
-
-/* now allocate the stream itself */
-stream = php_stream_alloc(&my_ops, state, 0, persistent, "r");
-
-/* now stream->abstract == state */
-
-Once you have that part figured out, you can write your implementation and
-define the your own php_stream_ops struct (we called it my_ops in the above
-example).
-
-For example, for reading from this weird MySQL stream:
-
-static size_t php_mysqlop_read(php_stream * stream, char * buf, size_t count)
-{
- struct my_state * state = (struct my_state*)stream->abstract;
-
- if (buf == NULL && count == 0) {
- /* in this special case, php_streams is asking if we have reached the
- * end of file */
- if (... at end of file ...)
- return EOF;
- else
- return 0;
- }
-
- /* pull out some data from the stream and put it in buf */
- ... mysql_fetch_row(state->result) ...
- /* we could do something strange, like format the data as XML here,
- and place that in the buf, but that brings in some complexities,
- such as coping with a buffer size too small to hold the data,
- so I won't even go in to how to do that here */
-}
-
-Implement the other operations - remember that write, read, close and flush
-are all mandatory. The rest are optional. Declare your stream ops struct:
-
-php_stream_ops my_ops = {
- php_mysqlop_write, php_mysqlop_read, php_mysqlop_close,
- php_mysqlop_flush, NULL, NULL, NULL,
- "Strange MySQL example"
-}
-
-Thats it!
-
-Take a look at the STDIO implementation in streams.c for more information
-about how these operations work.
-The main thing to remember is that in your close operation you need to release
-and free the resources you allocated for the abstract field. In the case of
-the example above, you need to use mysql_free_result on the rowset, close the
-connection and then use pefree to dispose of the struct you allocated.
-You may read the stream->persistent field to determine if your struct was
-allocated in persistent mode or not.
-
-vim:tw=78:et
diff --git a/README.SUBMITTING_PATCH b/README.SUBMITTING_PATCH
deleted file mode 100644
index 04847d79c2..0000000000
--- a/README.SUBMITTING_PATCH
+++ /dev/null
@@ -1,126 +0,0 @@
-Submitting Patch for PHP
-========================
-
-This document describes how to submit a patch for PHP. Since you are
-reading this document, you are willing to submit a patch for PHP.
-Please keep reading! Submitting a patch for PHP is easy. The hard
-part is making it acceptable for inclusion into our repository. :-)
-
-How to create patch?
---------------------
-We are working with CVS. You need to get CVS source to create a patch
-that we accept. Visit http://www.php.net/anoncvs.php to get CVS
-source. You can check out older versions, but make sure you get
-the default branch (i.e. Do not use -r option when you check out the
-CVS source)
-
-Read CODING_STANDARDS file before you start working.
-
-Now you are ready to create a patch. Modify source to fix a bug in PHP or
-add a new feature to PHP. After you finished editing, please test your
-patch. Read README.TESTING for testing.
-
-After you finish testing your patch, take diff file using
-"cvs diff > your.patch" command.
-
-Read README.TESTING for submitting a test script for your patch. This is
-not strictly required, but it is preferred to submit a test script along
-with your patch. Making new test script is very easy. It also helps us
-to understand what you have been fixed or added to PHP.
-
-
-Tips for creating patch
------------------------
-If you would like to fix multiple bugs. It is easier for us if you
-could create 1 patch for 1 bug, but this is not strictly required.
-Note though that you might get little response, if your patch is
-too hard to review.
-
-If you would like change/add many lines, it is better to ask module
-maintainer and/or internals@lists.php.net, or pear-dev@lists.php.net if
-you are patching PEAR. Official module maintainers can be found in
-EXTENSIONS file in PHP source.
-
-If you are new to CVS (Concurrent Versions System), visit
-http://cvshome.org/ for details.
-
-
-Recommended CVS client settings for creating patch file
-------------------------------------------------------
-Recommended ~/.cvsrc file setting is:
-------
-cvs -z3
-update -d -P
-checkout -P
-diff -u
-
-------
-diff -u means:
- -u Use the unified output format.
-
-With this CVS setting, you don't have to worry about adding/deleting
-newlines and spaces.
-
-
-Check list for submitting patch
--------------------------------
- - Did you run "make test" to check if your patch didn't break
- other features?
- - Did you compile PHP with --enable-debug and check the PHP and
- web server error logs when you test your patch?
- - Did you build PHP for multi-threaded web servers. (Optional)
- - Did you create test script for "make test"? (Recommended)
- - Did you check your patch is unified format and it does not
- contain white space changes? (If you are not using recommended
- cvs setting)
- - Did you update CVS source before you take final patch?
- - Did you read the patch again?
-
-
-Where to send your patch?
--------------------------
-If you are patching C source, send the patch to internals@lists.php.net.
-If you are patching a module, you should also send the patch to the
-maintainer. Official module maintainers are listed in EXTENSION file
-in source.
-
-If you are patching PEAR, send the patch to pear-dev@lists.php.net.
-
-Please add the prefix "[PATCH]" to your email subject and make sure
-to include the patch as a MIME attachment even if it is short.
-
-NOTE: only MIME attachments of type 'text/*' are accepted. The
- easiest way to accomplish this, is to make the extension
- '.txt'.
-
-Test scripts should be included in the same email.
-Explain what has been fixed/added/changed by your patch.
-
-Finally, add the bug Id(s) which can be closed by your patch, if any.
-
-
-What happens after you submit your patch
-----------------------------------------
-If your patch is easy to review and has obviously no side-effects,
-it might take up to a few hours until someone commits it.
-
-Because this is a volunteer-driven effort, more complex patches will
-require more patience on your side.
-
-If you did not receive any feedback in a few days, please consider
-resubmitting the description of your patch, along-side with
-these questions:
-
-- Is my patch too hard to review? Because of which factors?
-- Should I split it up in multiple parts?
-- Are there any unwanted whitespace changes?
-
-
-What happens when your patch is applied?
-----------------------------------------
-Your name will be included together with your email address in the CVS
-commit log. If your patch affects end-users, a brief description
-and your name might be added to the NEWS file.
-
-
-Thank you for submitting patch for PHP!
diff --git a/README.TESTING b/README.TESTING
deleted file mode 100644
index 117a360b85..0000000000
--- a/README.TESTING
+++ /dev/null
@@ -1,179 +0,0 @@
-[IMPORTANT NOTICE]
-------------------
- Failed tests usualy indicate a problem with your local system setup
-and not within PHP itself (at least for official PHP release versions).
-You may decide to automaticaly submit a test summary to our QA workflow
-at the end of a test run.
- Please do *not* submit a failed test as a bug or ask for help on why
-it failed on your system without providing substantial backup information
-on *why* the test failed on your special setup. Thank you :-)
-
-
-[Testing Basics]
-----------------
- The easiest way to test your PHP build is to run "make test" from the
-command line after successfully compiling. This will run the complete
-tests for all enabled functionalities and extensions using the PHP
-CLI binary.
- To execute test scripts, you must build PHP with some SAPI, then you
-type "make test" to execute all or some test scripts saved under
-"tests" directory under source root directory.
-
-Usage:
-make test
-
- "make test" basically executes "run-tests.php" script
-under the source root (parallel builds will not work). Therefore you
-can execute the script as follows:
-
-TEST_PHP_EXECUTABLE=sapi/cli/php \
-sapi/cli/php [-c /path/to/php.ini] run-tests.php [ext/foo/tests/GLOB]
-
-
-[Which "php" executable "make test" look for]
----------------------------------------------
- You must use TEST_PHP_EXECUTABLE environment variable to explicitly
-select the php executable to be used to run the tests. That can either
-be the CLI or CGI executable.
-
- "make test" executes "run-tests.php" script with "php" binary. Some
-test scripts such as session must be executed by CGI SAPI. Therefore,
-you must build PHP with CGI SAPI to perform all tests.
-
-NOTE: PHP binary executing "run-tests.php" and php binary used for
-executing test scripts may differ. If you use different PHP binary for
-executing "run-tests.php" script, you may get errors.
-
-
-[Which php.ini is used]
------------------------
- "make test" uses the same php.ini file as it would once installed.
-The tests have been written to be independent of that php.ini file,
-so if you find a test that is affected by a setting, please report
-this, so we can address the issue.
-
-
-[Which test scripts are executed]
----------------------------------
- "run-tests.php" ("make test"), without any arguments executes all
-test scripts by extracting all directories named "tests"
-from the source root and any subdirectories below. If there are files,
-which have a "phpt" extension, "run-tests.php" looks at the sections
-in these files, determines whether it should run it, by evaluating
-the 'SKIP' section. If the test is eligible for execution, the 'FILE'
-section is extracted into a ".php" file (with the same name besides
-the extension) and gets executed.
-When an argument is given or TESTS environment variable is set, the
-GLOB is expanded by the shell and any file with extension "*.phpt" is
-regarded as a test file.
-
- Tester can easily execute tests selectively with as follows.
-
-Examples:
-./sapi/cli/php run-tests.php ext/mbstring/*
-./sapi/cli/php run-tests.php ext/mbstring/020.phpt
-
-
-[Test results]
---------------
- Test results are printed to standard output. If there is a failed test,
-the "run-tests.php" script saves the result, the expected result and the
-code executed to the test script directory. For example, if
-ext/myext/tests/myext.phpt fails to pass, the following files are created:
-
-ext/myext/tests/myext.php - actual test file executed
-ext/myext/tests/myext.log - log of test execution (L)
-ext/myext/tests/myext.exp - expected output (E)
-ext/myext/tests/myext.out - output from test script (O)
-ext/myext/tests/myext.diff - diff of .out and .exp (D)
-
- Failed tests are always bugs. Either the test is bugged or not considering
-factors applying to the tester's environment, or there is a bug in PHP.
-If this is a known bug, we strive to provide bug numbers, in either the
-test name or the file name. You can check the status of such a bug, by
-going to: http://bugs.php.net/12345 where 12345 is the bug number.
-For clarity and automated processing, bug numbers are prefixed by a hash
-sign '#' in test names and/or test cases are named bug12345.phpt.
-
-NOTE: The files generated by tests can be selected by setting the
-environment variable TEST_PHP_LOG_FORMAT. For each file you want to be
-generated use the character in brackets as shown above (default is LEOD).
-The php file will be generated always.
-
-NOTE: You can set environment variable TEST_PHP_DETAILED to enable
-detailed test information.
-
-[Automated testing]
- If you like to keep up to speed, with latest developments and quality
-assurance, setting the environment variable NO_INTERACTION to 1, will not
-prompt the tester for any user input.
-
-Normally, the exit status of "make test" is zero, regardless of the results
-of independent tests. Set the environment variable REPORT_EXIT_STATUS to 1,
-and "make test" will set the exit status ("$?") to non-zero, when an
-individual test has failed.
-
-Example script to be run by cron(1):
-========== qa-test.sh =============
-#!/bin/sh
-
-CO_DIR=$HOME/cvs/php5
-MYMAIL=qa-test@domain.com
-TMPDIR=/var/tmp
-TODAY=`date +"%Y%m%d"`
-
-# Make sure compilation enviroment is correct
-CONFIGURE_OPTS='--disable-all --enable-cli --with-pcre'
-export MAKE=gmake
-export CC=gcc
-
-# Set test environment
-export NO_INTERACTION=1
-export REPORT_EXIT_STATUS=1
-
-cd $CO_DIR
-cvs update . >>$TMPDIR/phpqatest.$TODAY
-./cvsclean ; ./buildconf ; ./configure $CONFIGURE_OPTS ; $MAKE
-$MAKE test >>$TMPDIR/phpqatest.$TODAY 2>&1
-if test $? -gt 0
-then
- cat $TMPDIR/phpqatest.$TODAY | mail -s"PHP-QA Test Failed for $TODAY" $MYMAIL
-fi
-========== end of qa-test.sh =============
-
-NOTE: the exit status of run-tests.php will be 1 when
-REPORT_EXIT_STATUS is set. The result of "make test" may be higher
-than that. At present, gmake 3.79.1 returns 2, so it is
-advised to test for non-zero, rather then a specific value.
-
-
-[Creating new test files]
--------------------------
- Writing test file is very easy if you are used to PHP.
-See the HOWTO at http://qa.php.net/write-test.php
-
-
-[How to help us]
-----------------
- If you find bug in PHP, you can submit bug report AND test script
-for us. You don't have to write complete script, just give us test
-script with following format. Please test the script and make sure
-you write the correct ACTUAL OUTPUT and EXPECTED OUTPUT before you
-submit.
-
-<?php
-/*
-Bug #12345
-substr() bug. Do not return expected string.
-
-ACTUAL OUTPUT
-XYXA
-
-EXPECTED OUTPUT
-ABCD
-*/
-
-$str = "XYZABCD";
-echo substr($str,3,7);
-
-?>
diff --git a/README.TESTING2 b/README.TESTING2
deleted file mode 100644
index 30bd26c88e..0000000000
--- a/README.TESTING2
+++ /dev/null
@@ -1,137 +0,0 @@
-[IMPORTANT NOTICE]
-------------------
-This is an addendum to README.TESTING with additional information
-specific to run-tests2.php.
-
-run-tests2.php is backward compatible with tests developed for
-the original run-tests.php script. run-tests2 is *not* used by
-'make test'. run-tests2 was developed to provide support for
-testing PHP under it's primary environment, HTTP, and can run the
-PHP tests under any of the SAPI modules that are direct executables,
-or are accessable via HTTP.
-
-[New features]
-----------------
-* Command line interface:
- You can run 'php run-tests2.php -h' to get all the possible options.
-* Configuration file:
- the -c argument will allow you to use a configuration file. This is
- handy if you are testing multiple environments and need various options
- depending on the environment.
- see run-tests-config.php for details.
-* CGI Emulation:
- Will emulate a CGI environment when testing with the cgi sapi executable.
-* HTTP testing:
- can be configured to run test scripts through an HTTP server running
- on localhost. localhost is required since either the web server must
- alias a directory to the php source directory, or the test scripts
- must be copied to a directory under the web server
- (see config options TEST_WEB_BASE_URL, TEST_BASE_PATH, and TEST_WEB_EXT)
-* New sections supported for test files (see below)
-
-When running tests over http, tests that require ini settings different that what
-the web server runs under will be skipped. Since the test harness defines a number
-of ini settings by default, the web server may require special configuration to
-make testing work.
-
-[Example Usage]
-----------------
-Some (but not all!) examples of usage:
-
-1. run tests from the php source directory
- php run-tests2.php -p /path/to/php-cli
-
-2. run tests using cgi emulation
- php run-tests2.php -p /path/to/php-cgi
-
-3. run tests over http, copying test files into document root
- php run-tests2.php -w -u http://localhost/test -m /path/to/htdocs/test
-
-4. run tests over http, php sources have been aliased in web server
- php run-tests2.php -w -u http://localhost/test
-
-5. run tests using configuration file
- php run-tests2.php -c /path/to/run-tests-config.php
-
-6. run tests using configuration file, but overriding some settings:
- (config file must be first)
- php run-tests2.php -c /path/to/run-tests-config.php -w -t 3 -d /path/to/testdir
-
-NOTE: configuration as described in README.TESTING still works.
-
-[New Test Sections]
-----------------
-In addition to the traditional test sections
-(see http://qa.php.net/write-test.php), several new sections are available
-under run-tests2.
-
---POST--
-This is not a new section, but not multipart posts are supported for testing
-file uploads, or other types of POST data.
-
---CGI--
-This section takes no value. It merely provides a simple marker for tests
-that MUST be run as CGI, even if there is no --POST-- or --GET-- sections
-in the test file.
-
---DESCRIPTION--
-Not used for anything, just a section for documenting the test
-
---ENV--
-This section get's eval()'d to help build an environment for the
-execution of the test. This can be used to change environment
-vars that are used for CGI emulation, or simply to set env vars
-for cli testing. A full example looks like:
-
- --ENV--
- return <<<END
- PATH_TRANSLATED=$filename
- PATH_INFO=$scriptname
- SCRIPT_NAME=$scriptname
- END;
-
-Some variables are made easily available for use in this section, they
-include:
- $filename full native path to file, will become PATH_TRANSLATED
- $filepath =dirname($filename)
- $scriptname this is what will become SCRIPT_NAME unless you override it
- $docroot the equivelant of DOCUMENT_ROOT under Apache
- $cwd the directory that the test is being initiated from
- $this->conf all run-tests2 configuration vars
- $this->env all environment variables that will get passed to the test
-
-
---REQUEST--
-This section is also eval'd, and is similar in nature to --ENV--. However,
-this section is used to build the url used in an HTTP request. Valid values
-to set in this section would include:
- SCRIPT_NAME The inital part of the request url
- PATH_INFO The pathinfo part of a request url
- FRAGMENT The fragment section of a url (after #)
- QUERY_STRING The query part of a url (after ?)
-
- --REQUEST--
- return <<<END
- PATH_INFO=/path/info
- END;
-
---HEADERS--
-This section is also eval'd. It is used to provide additional headers sent
-in an HTTP request, such as content type for multipart posts, cookies, etc.
-
- --HEADERS--
- return <<<END
- Content-Type=multipart/form-data; boundary=---------------------------240723202011929
- Content-Length=100
- END;
-
---EXPECTHEADERS--
-This section can be used to define what headers are required to be
-received back from a request, and is checked in addition to the
-regular expect sections. For example:
-
- --EXPECTHEADERS--
- Status: 404
-
-
-
diff --git a/README.UNIX-BUILD-SYSTEM b/README.UNIX-BUILD-SYSTEM
deleted file mode 100644
index 9b49cb8bc8..0000000000
--- a/README.UNIX-BUILD-SYSTEM
+++ /dev/null
@@ -1,123 +0,0 @@
-PHP Build System V5 Overview
-
-- supports Makefile.ins during transition phase
-- not-really-portable Makefile includes have been eliminated
-- supports separate build directories without VPATH by using
- explicit rules only
-- does not waste disk-space/CPU-time for building temporary libraries
- => especially noticeable on slower systems
-- slow recursive make replaced with one global Makefile
-- eases integration of proper dependencies
-- adds PHP_DEFINE(what[, value]) which creates a single include-file
- per what. This will allow more fine-grained dependencies.
-- abandoning the "one library per directory" concept
-- improved integration of the CLI
-- several new targets
- build-modules: builds and copies dynamic modules into modules/
- install-cli: installs the CLI only, so that the install-sapi
- target does only what its name says
-- finally abandoned automake (still requires aclocal at this time)
-- changed some configure-time constructs to run at buildconf-time
-- upgraded shtool to 1.5.4
-- removed $(moduledir) (use EXTENSION_DIR)
-
-The Reason For a New System
-
-It became more and more apparent that there is a severe need
-for addressing the portability concerns and improving the chance
-that your build is correct (how often have you been told to
-"make clean"? When this is done, you won't need to anymore).
-
-
-If You Build PHP on a Unix System
-
-
-You, as a user of PHP, will notice no changes. Of course, the build
-system will be faster, look better and work smarter.
-
-
-
-If You Are Developing PHP
-
-
-
-
-Extension developers:
-
-Makefile.ins are abandoned. The files which are to be compiled
-are specified in the config.m4 now using the following macro:
-
-PHP_NEW_EXTENSION(foo, foo.c bar.c baz.cpp, $ext_shared)
-
-E.g. this enables the extension foo which consists of three source-code
-modules, two in C and one in C++. And, depending on the user's wishes,
-the extension will even be built as a dynamic module.
-
-The full syntax:
-
-PHP_NEW_EXTENSION(extname, sources [, shared [,sapi_class[, extra-cflags]]])
-
-Please have a look at acinclude.m4 for the gory details and meanings
-of the other parameters.
-
-And that's basically it for the extension side.
-
-If you previously built sub-libraries for this module, add
-the source-code files here as well. If you need to specify
-separate include directories, do it this way:
-
-PHP_NEW_EXTENSION(foo, foo.c mylib/bar.c mylib/gregor.c,,,-I@ext_srcdir@/lib)
-
-E.g. this builds the three files which are located relative to the
-extension source directory and compiles all three files with the
-special include directive (@ext_srcdir@ is automatically replaced).
-
-Now, you need to tell the build system that you want to build files
-in a directory called $ext_builddir/lib:
-
-PHP_ADD_BUILD_DIR($ext_builddir/lib)
-
-Make sure to call this after PHP_NEW_EXTENSION, because $ext_builddir
-is only set by the latter.
-
-If you have a complex extension, you might to need add special
-Make rules. You can do this by calling PHP_ADD_MAKEFILE_FRAGMENT
-in your config.m4 after PHP_NEW_EXTENSION.
-
-This will read a file in the source-dir of your extension called
-Makefile.frag. In this file, $(builddir) and $(srcdir) will be
-replaced by the values which are correct for your extension
-and which are again determined by the PHP_NEW_EXTENSION macro.
-
-Make sure to prefix *all* relative paths correctly with either
-$(builddir) or $(srcdir). Because the build system does not
-change the working directory anymore, we must use either
-absolute paths or relative ones to the top build-directory.
-Correct prefixing ensures that.
-
-
-SAPI developers:
-
-Instead of using PHP_SAPI=foo/PHP_BUILD_XYZ, you will need to type
-
-PHP_SELECT_SAPI(name, type, sources.c)
-
-I.e. specify the source-code files as above and also pass the
-information regarding how PHP is supposed to be built (shared
-module, program, etc).
-
-For example for APXS:
-
-PHP_SELECT_SAPI(apache, shared, sapi_apache.c mod_php5.c php_apache.c)
-
-
-
-General info
-
-The foundation for the new system is the flexible handling of
-sources and their contexts. With the help of macros you
-can define special flags for each source-file, where it is
-located, in which target context it can work, etc.
-
-Have a look at the well documented macros
-PHP_ADD_SOURCES(_X) in acinclude.m4.
diff --git a/README.WIN32-BUILD-SYSTEM b/README.WIN32-BUILD-SYSTEM
deleted file mode 100644
index 7d3c792767..0000000000
--- a/README.WIN32-BUILD-SYSTEM
+++ /dev/null
@@ -1,174 +0,0 @@
-The Win32 Build System.
-$Id$
-Wez Furlong <wez@thebrainroom.com>
-
-If you need help with the build system, send mail to
-internals@lists.php.net; please don't email me directly.
-
-===========================================================
-Contents:
-1. How to build PHP under windows
- a. Requirements
- b. Opening a command prompt
- c. Generating configure.js
- d. Configuring
- e. Building
- f. Cleaning up
- g. Running the test suite
- h. snapshot building
-
-2. How to write config.w32 files
- x. to be written.
-
-===========================================================
-1. How to build PHP under windows
-a. Requirements
-
- You need:
- - Windows Scripting Host (cscript.exe)
- - Microsoft Build Tools from:
- Microsoft Visual Studio (VC6) or later
-
- You also need:
- - bindlib_w32 [http://www.php.net/extra/bindlib_w32.zip]
- - win32build [http://www.php.net/extra/win32build.zip]
-
- b. Opening the Build Environment Command Prompt:
- - Using Visual Studio (VC6)
- 1. Install it
- 2. If you have a VC++ Command Prompt icon on your start menu,
- click on it to get a Command Prompt with the env vars
- set up correctly.
-
- If not, create a new shortcut and set the Target to:
-
- %comspec% /k "C:\Program Files\Microsoft Visual Studio\VC98\Bin\vcvars32.bat"
-
- You might also want to set the prompt to start in
- a convenient location (such as the root of your
- PHP source checkout).
-
- - Using Visual Studio .Net
- 1. Install it.
- 2. Under the Visual Studio .Net Tools sub menu of your start
- menu, you should have a Visual Studio .Net Command Prompt
- icon. If not, create a new shortcut and set the Target to:
-
- %comspec% /k "C:\Program Files\Microsoft Visual Studio .NET 2003\Common7\Tools\vsvars32.bat"
-
- You might also want to set the prompt to start in
- a convenient location (such as the root of your
- PHP source checkout).
-
- - Using the Platform SDK tools
- 1. Download the Platform SDK:
- http://www.microsoft.com/msdownload/platformsdk/sdkupdate/
-
- - You need the Core SDK, which is approx 200MB to download
- and requires approx 500MB of disk space.
- - The other components of the SDK are not required by PHP
- - You might be able to reduce the download size by downloading
- the installer control component first and then selecting
- only the Build Environment (around 30MB), but I haven't
- tried this.
-
- ** Note: it seems that MS don't include the 32 bit
- build tools in the platform SDK any longer, so
- you will probably have very limited luck if you
- don't also have VC++ or VS.Net already installed.
-
- 2. Once installed, you will have an icon on your start menu
- that will launch the build environment; the latest SDK's
- install a number of different versions of this; you probably
- want to choose the Windows 2000 Retail build environment.
- Clicking on this will open a command prompt with its Path,
- Include and Lib env vars set to point to the build tools
- and win32 headers.
-
-c. Generating configure
-
- Change directory to where you have your PHP 5 sources.
- Run buildconf.bat.
-
-d. Configuring
-
- cscript /nologo configure.js --help
-
- Will give you a list of configuration options; these will
- have the form:
-
- --enable-foo or --disable-foo or --with-foo or --without-foo.
-
- --enable-foo will turn something on, and is equivalent to
- specifying --enable-foo=yes
-
- --disable-foo will turn something off, and is equivalent to
- specifying --enable-foo=no
-
- --enable-foo=shared will attempt to build that feature as
- a shared, dynamically loadable module.
-
- Sometimes a configure option needs additional information
- about where to find headers and libraries; quite often
- you can specify --enable-foo=option where option could be
- the path to where to find those files. If you want to
- specify a parameter and build it as shared, you can use
- this syntax instead: --enable-foo=shared,option
-
- The same rules all apply to --with-foo and --without-foo;
- the only difference is the way the options are named;
- the convention is that --enable-foo means that you are
- switching on something that comes with PHP, whereas
- --with-foo means that you want to build in something
- external to PHP.
-
-e. Building
-
- Once you have successfully configured your build (make
- sure you read the output from the command to make sure
- it worked correctly), you can build the code; simply type
-
- "nmake" at the command prompt, and it will build everthing
- you asked for.
-
- Once the build has completed, you will find your binaries
- in the build dir determined by configure; this is typically
- Release_TS for release builds or Debug_TS for debug builds.
- If you build a non-thread-safe build, it will use Release
- or Debug to store the files. Also in this build dir you
- will find sub directories for each module that went into
- your PHP build. The files you'll want to keep are the
- .exe and .dll files directly in your build dir.
-
-f. Cleaning Up
-
- You can automatically delete everything that was built
- by running "nmake clean". This will delete everything
- that was put there when you ran nmake, including the
- .exe and .dll files.
-
-g. Running the test suite
-
- You can verify that your build is working well by running
- the regression test suite. You do this by typing
- "nmake test". You can specify the tests you want to run
- by defing the TESTS variable - if you wanted to run the
- sqlite test suite only, you would type
- "nmake /D TESTS=ext/sqlite/tests test"
-
-h. Snapshot Building
-
- If you want to set up an automated build that will tolerate
- breakages in some of the modules, you can use the
- --enable-snapshot-build configure option to generate a
- makefile optimized for that purpose. A snapshot build will
- switch the argument parser so that the default option for
- configure switches that your don't specify will be set
- to "shared". The effect of this is to turn on all options
- unless you explicitly disable them. When you have configured
- your snapshot build, you can use "nmake build-snap" to build
- everything, ignoring build errors in individual extensions
- or SAPI.
-
-vim:tw=78:sw=1:ts=1:et
-
diff --git a/README.Zeus b/README.Zeus
deleted file mode 100644
index 7fecaf0d89..0000000000
--- a/README.Zeus
+++ /dev/null
@@ -1,112 +0,0 @@
-Using PHP 5 with the Zeus Web Server
------------------------------------
-
-Zeus fully supports running PHP in combination with our
-webserver. There are three different interfaces that can be used to
-enable PHP:
-
-* CGI
-* ISAPI
-* FastCGI
-
-Of the three, we recommend using FastCGI, which has been tested and
-benchmarked as providing the best performance and reliability.
-
-Full details of how to install PHP are available from our
-website, at:
-
-http://support.zeus.com/products/php.html
-
-If you have any problems, please check the support site for more
-up-to-date information and advice.
-
-
-Quick guide to installing CGI/FastCGI with Zeus
------------------------------------------------
-
-Step 1 - Compile PHP as FastCGI.
-
-Compile as follows:
- ./configure --enable-fastcgi
- make
-
-Note that PHP has many options to the configure script -
-e.g. --with-mysql. You will probably want to select your usual options
-before compiling; the above is just a bare minimum, for illustration.
-
-After compilation finishes, you will be left with an executable
-program called 'php'. Copy this into your document root, under a
-dedicated FastCGI directory (e.g. $DOCROOT/fcgi-bin/php)
-
-
-Step 2 - configure Zeus
-
-Four stages:
- - enable FastCGI
- - configure FastCGI
- - setup alias for FastCGI
- - setup alias for PHP
-
-1) Using the admin server, go to the 'module configuration' page for
-your virtual server, and ensure that 'fastcgi' is enabled (select the
-tickbox to the left).
-
-2) While we can run FastCGI's locally, there are known problems with
-some OS's (specifically, the communication between web server and
-FastCGI happens over a unix domain socket, and some OS's have trouble
-sustaining high connection rates over these sockets). So instead, we
-are going to set up the PHP FastCGI to run 'remotely' over localhost
-(this uses TCP sockets, which do not suffer this problem). Go to the
-'fastcgi configuration' page, and under 'add remote fastcgi':
- Add Remote FastCGI
- Docroot path /fcgi-bin/php
- Remote machine localhost:8002
-The first entry is where you saved PHP, above.
-The second entry is localhost:<any unused port>
-We will start the FastCGI listening on this port shortly.
-Click 'update' to commit these changes.
-
-3) Go to the path mapping module and add an alias for FastCGI:
- Add Alias
- Docroot path /fcgi-bin
- Filesystem directory /path/to/docroot/fcgi-bin
- Alias type fastcgi
-Click 'update' to commit these changes
-
-4) Also on the path mapping module, add a handler for PHP:
- Add handler
- File extension php
- Handler /fcgi-bin/php
-Click 'update' to commit these changes
-
-Finally restart your virtual server for these changes to take effect.
-
-
-Step 3 - start PHP as a FastCGI runner
-
-When you start PHP, it will pre-fork a given number of child processes
-to handle incoming PHP requests. Each process will handle a given
-number of requests before exiting (and being replaced by a newly
-forked process). You can control these two parameters by setting the
-following environment variables BEFORE starting the FastCGI runner:
-
-PHP_FCGI_CHILDREN - the number of child processes to pre-fork. This
-variable MUST be set, if not then the PHP will not run as a FastCGI.
-We recommend a value of 8 for a fairly busy site. If you have many,
-long-running PHP scripts, then you may need to increase this further.
-
-PHP_FCGI_MAX_REQUESTS - the number of requests each PHP child process
-handles before exiting. If not set, defaults to 500.
-
-To start the FastCGI runner, execute '$ZEUSHOME/web/bin/fcgirunner
-8002 $DOCROOT/fcgi-bin/php'. Substitute the appropriate values for
-$ZEUSHOME and $DOCROOT; also substitute for 8002 the port you chose,
-above.
-
-To stop the runner (e.g. to experiment with the above environment
-variables) you will need to manually stop and running PHP
-processes. (Use 'ps' and 'kill'). As it is PHP which is forking lots
-of children and not the runner, Zeus unfortunately cannot keep track
-of what processes are running, sorry. A typical command line may look
-like 'ps -efl | grep $DOCROOT/fcgi-bin/php | grep -v grep | awk
-'{print $4}' | xargs kill'
diff --git a/README.input_filter b/README.input_filter
deleted file mode 100644
index 969b421b82..0000000000
--- a/README.input_filter
+++ /dev/null
@@ -1,193 +0,0 @@
-Input Filter Support in PHP 5
------------------------------
-
-XSS (Cross Site Scripting) hacks are becoming more and more prevalent,
-and can be quite difficult to prevent. Whenever you accept user data
-and somehow display this data back to users, you are likely vulnerable
-to XSS hacks.
-
-The Input Filter support in PHP 5 is aimed at providing the framework
-through which a company-wide or site-wide security policy can be
-enforced. It is implemented as a SAPI hook and is called from the
-treat_data and post handler functions. To implement your own security
-policy you will need to write a standard PHP extension.
-
-A simple implementation might look like the following. This stores the
-original raw user data and adds a my_get_raw() function while the normal
-$_POST, $_GET and $_COOKIE arrays are only populated with stripped
-data. In this simple example all I am doing is calling strip_tags() on
-the data. If register_globals is turned on, the default globals that
-are created will be stripped ($foo) while a $RAW_foo is created with the
-original user input.
-
-ZEND_BEGIN_MODULE_GLOBALS(my_input_filter)
- zval *post_array;
- zval *get_array;
- zval *cookie_array;
-ZEND_END_MODULE_GLOBALS(my_input_filter)
-
-#ifdef ZTS
-#define IF_G(v) TSRMG(my_input_filter_globals_id, zend_my_input_filter_globals *, v)
-#else
-#define IF_G(v) (my_input_filter_globals.v)
-#endif
-
-ZEND_DECLARE_MODULE_GLOBALS(my_input_filter)
-
-function_entry my_input_filter_functions[] = {
- PHP_FE(my_get_raw, NULL)
- {NULL, NULL, NULL}
-};
-
-zend_module_entry my_input_filter_module_entry = {
- STANDARD_MODULE_HEADER,
- "my_input_filter",
- my_input_filter_functions,
- PHP_MINIT(my_input_filter),
- PHP_MSHUTDOWN(my_input_filter),
- NULL,
- PHP_RSHUTDOWN(my_input_filter),
- PHP_MINFO(my_input_filter),
- "0.1",
- STANDARD_MODULE_PROPERTIES
-};
-
-PHP_MINIT_FUNCTION(my_input_filter)
-{
- ZEND_INIT_MODULE_GLOBALS(my_input_filter, php_my_input_filter_init_globals, NULL);
-
- REGISTER_LONG_CONSTANT("POST", PARSE_POST, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("GET", PARSE_GET, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("COOKIE", PARSE_COOKIE, CONST_CS | CONST_PERSISTENT);
-
- sapi_register_input_filter(my_sapi_input_filter);
- return SUCCESS;
-}
-
-PHP_RSHUTDOWN_FUNCTION(my_input_filter)
-{
- if(IF_G(get_array)) {
- zval_ptr_dtor(&IF_G(get_array));
- IF_G(get_array) = NULL;
- }
- if(IF_G(post_array)) {
- zval_ptr_dtor(&IF_G(post_array));
- IF_G(post_array) = NULL;
- }
- if(IF_G(cookie_array)) {
- zval_ptr_dtor(&IF_G(cookie_array));
- IF_G(cookie_array) = NULL;
- }
- return SUCCESS;
-}
-
-PHP_MINFO_FUNCTION(my_input_filter)
-{
- php_info_print_table_start();
- php_info_print_table_row( 2, "My Input Filter Support", "enabled" );
- php_info_print_table_row( 2, "Revision", "$Revision$");
- php_info_print_table_end();
-}
-
-/* The filter handler. If you return 1 from it, then PHP also registers the
- * (modified) variable. Returning 0 prevents PHP from registering the variable;
- * you can use this if your filter already registers the variable under a
- * different name, or if you just don't want the variable registered at all. */
-SAPI_INPUT_FILTER_FUNC(my_sapi_input_filter)
-{
- zval new_var;
- zval *array_ptr = NULL;
- char *raw_var;
- int var_len;
-
- assert(*val != NULL);
-
- switch(arg) {
- case PARSE_GET:
- if(!IF_G(get_array)) {
- ALLOC_ZVAL(array_ptr);
- array_init(array_ptr);
- INIT_PZVAL(array_ptr);
- }
- IF_G(get_array) = array_ptr;
- break;
- case PARSE_POST:
- if(!IF_G(post_array)) {
- ALLOC_ZVAL(array_ptr);
- array_init(array_ptr);
- INIT_PZVAL(array_ptr);
- }
- IF_G(post_array) = array_ptr;
- break;
- case PARSE_COOKIE:
- if(!IF_G(cookie_array)) {
- ALLOC_ZVAL(array_ptr);
- array_init(array_ptr);
- INIT_PZVAL(array_ptr);
- }
- IF_G(cookie_array) = array_ptr;
- break;
- }
- Z_STRLEN(new_var) = val_len;
- Z_STRVAL(new_var) = estrndup(*val, val_len);
- Z_TYPE(new_var) = IS_STRING;
-
- var_len = strlen(var);
- raw_var = emalloc(var_len+5); /* RAW_ and a \0 */
- strcpy(raw_var, "RAW_");
- strlcat(raw_var,var,var_len+5);
-
- php_register_variable_ex(raw_var, &new_var, array_ptr TSRMLS_DC);
-
- php_strip_tags(*val, val_len, NULL, NULL, 0);
-
- *new_val_len = strlen(*val);
- return 1;
-}
-
-PHP_FUNCTION(my_get_raw)
-{
- long arg;
- char *var;
- int var_len;
- zval **tmp;
- zval *array_ptr = NULL;
- HashTable *hash_ptr;
- char *raw_var;
-
- if(zend_parse_parameters(2 TSRMLS_CC, "ls", &arg, &var, &var_len) == FAILURE) {
- return;
- }
-
- switch(arg) {
- case PARSE_GET:
- array_ptr = IF_G(get_array);
- break;
- case PARSE_POST:
- array_ptr = IF_G(post_array);
- break;
- case PARSE_COOKIE:
- array_ptr = IF_G(post_array);
- break;
- }
-
- if(!array_ptr) RETURN_FALSE;
-
- /*
- * I'm changing the variable name here because when running with register_globals on,
- * the variable will end up in the global symbol table
- */
- raw_var = emalloc(var_len+5); /* RAW_ and a \0 */
- strcpy(raw_var, "RAW_");
- strlcat(raw_var,var,var_len+5);
- hash_ptr = HASH_OF(array_ptr);
-
- if(zend_hash_find(hash_ptr, raw_var, var_len+5, (void **)&tmp) == SUCCESS) {
- *return_value = **tmp;
- zval_copy_ctor(return_value);
- } else {
- RETVAL_FALSE;
- }
- efree(raw_var);
-}
-
diff --git a/TODO b/TODO
deleted file mode 100644
index 5e7ac3897f..0000000000
--- a/TODO
+++ /dev/null
@@ -1,155 +0,0 @@
-Things to do or at least think about doing in the future. Name in
-parenthesis means that person has taken on this project.
-
-Zend
-----
- * Allow foreach ($array as $k => list($a, $b)) syntax for multi
- dimensional arrays.
- * Look at replacing c-lib call tolower().
- * Make hash API functions work with HASH_OF() to save time.
- * Add configure test to determine if dlsym() requires underscore and set
- DLSYM_NEEDS_UNDERSCORE accordingly. Perl and zsh have it in configure,
- for example. (DONE?)
- * Native large number support (probably with GNU GMP)
- * Const'ify APIs. Right now, many functions leave parameters untouched,
- but don't declare those as const. This makes interaction with other
- interfaces difficult which pass const parameters to us.
-
-
-global
-------
- * Make sure that all ZTS globals get destructed. Most ts_allocate_id()
- calls should have a dtor entry.
- * on some platforms unimplemented function will just do nothing
- (e.g. symlink) they should print a warning or not even be defined!
- (DONE ?)
- * --enable-all in configure. (--enable-shared=max ...)
- * make configure print out a summary when it's done (like XEmacs)
- * replace standard functions which work on static data with
- reentrancy-safe functions (DONE?).
- * make SAPI conform to CGI/1.1. Currently, all SAPI modules
- define REMOTE_ADDR etc. themselves and reach only various level
- of compliance.
- * see what functions might need to be changed to use HashPosition, so
- that the internal array pointer is not affected.
- * Move most extensions and PEAR packages out of the PHP CVS tree,
- include them again during release packaging.
-
- Other
- * use thread-safe resolver functions (either require BIND 8 or adns).
- * implement javadoc based function docs template system.
- * provide optional IPv6 support (seems to be done?).
- * find a better way to implement script timeouts. SIGVTALRM is used
- by some POSIX threads implementations (i.e. OpenBSD) and is not
- available in ZTS mode.
- * Implement flush feature suitable for nested output buffers.
-
-Streams
--------
- * Route filestat.c through the wrapper layer; isolate the statcache code
- so that it is independent of php functions and can be applied to any
- stream/path.
- * Implement generalized connection pool for stated protocols such as
- ftp and http/1.1 (using keep-alive) to avoid having to negotiate
- new command/request stream for each subsequent call; Possibly store
- resources in contexts (creating a default context if necessary) to
- allow segmentation of connection pools.
- * Add a method to take ownership of the memory buffer in memory streams so
- that generating string values for zvals doesn't require an estrdup.
- * bundle and use curl lib for fopen wrapper.
-
-documentation
--------------
- * Add remarks in the documentation which functions are not implemented
- on win32.
- * Add remarks in the documentation which functions are not binary-safe.
- * Update curl documentation (DONE?)
- * Add developer documentation.
- * Add detailed documentation for Java extension.
-
-ext/bz2
--------
- * Add an ini directive to specify the size of decompression buffer.
- The default 4k is too small for large files and also requires much time
- for decompression. 40k is suitable for such files, however it may be too
- much under certain environments. There should be appropriate default
- settings for the various SAPI modules (e.g. apache and cli).
-
-ext/curl
---------
- * Have a warning scheme for when people use unsupported features.
-
-ext/oci8
---------
- * All OCIFetch*() functions should return 0 for no more data and false on
- error.
- * Have a flag that trims trailing spaces from CHAR fields on retrieval.
- * Make allow_call_time_pass_reference=Off working.
- * For additional todo information, see oci8.c, in ext/oci8
-
-ext/odbc
---------
- For PHP 4.3.0:
- * update all php_error calls to php_error_docref where valid
- * integrate EXPERIMENTAL ODBC update for use in PHP 5.0, use for
- testing purposes only.
-
- For PHP 5.0.0
- * Activate EXPERIMENTAL ODBC codebase update
-
-ext/pcre
---------
- * Allow user to set PCRE_NOTEMPTY, PCRE_ANCHORED at execution time, maybe
-
-ext/pcntl
----------
- * Change internal callback handler to use TICKS
- * Remove all zend_extension code
- * Add object callback support to pcntl_signal()
-
-ext/pgsql
----------
- For PHP 4.3.0:
- * Add pg_metadata() with metadata cache feature.
- * Add pg_convert() to check and convert array value for query.
- * Add pg_insert/pg_update/pg_delete/pg_select for simple query.
-
-ext/session
------------
- For PHP 4.3.0:
- * session_abort() to abort session. ie: Do not save session data.
- * Allow unset($_SESSION) or unset($HTTP_SESSION_VARS) to unset
- session vars regardless of register_globals setting.
-
- Other:
- * Maybe implement finer-grained session variables that could be
- locked individually.
- * Write a network-transparent storage back-end with fallover
- facilities
- * Provide a callback facility which is executed upon encountering
- an unknown class name during deserialization
-
-ext/standard
-------------
- * Add a version number to data serialized via serialize().
- * Possibly modify parsing of GPC data to automatically create arrays if
- variable name is seen more than once.
- * Implement regex-cache for url-functions.
- * Move socket related functions to fsock.c.
-
-ext/wddx
---------
- * See if we can support the remaining data types:
- dateTime
- binary
-
- http://www.wddx.org/WDDX_SDK_10a/7__References/WDDX_DTD.htm
- (Andrei)
-
- * implement wddx_packet_as_javascript(). (Andrei)
-
-other cool stuff
-----------------
- * PVM extension
-
-vim:et:sw=4:ts=4
diff --git a/TODO-5.1 b/TODO-5.1
deleted file mode 100644
index 9c9e956125..0000000000
--- a/TODO-5.1
+++ /dev/null
@@ -1,10 +0,0 @@
-Zend Engine
------------
- - Look at making zend_constant value member be a zval* instead of zval. (Andi)
- - Implement inheritance rules for type hints. (Marcus)
- - Implement typehinting for arrays (apply the patch). (Andi, Marcus)
- - Find a keyword for the if-set-or operator (apply the patch). (Marcus, all)
-
-Standard Library
-----------------
- - Implement new time/date parsing and handling functions. (Derick)
diff --git a/TODO-PHP5 b/TODO-PHP5
deleted file mode 100644
index c21671faa4..0000000000
--- a/TODO-PHP5
+++ /dev/null
@@ -1,109 +0,0 @@
-Component: Zend Engine 2
-
- Important stuff to finish: PPP members/PPP methods,
- support of overloaded extensions, possibly differentiate
- between class and namespace as discussed with Stig in
- Germany.
-Responsibility: Zeev, Andi, Stas
-Time frame: Couple of months for first part and extensions will be
- ongoing while PHP is being fixed.
- Things to leave for later versions: Native aggregation
- support, accessing static members via object and not class.
-
-
-Component: Aggregation
-Responsibility: Andi, Stig?
-Time frame: ?
-
-
-Component: Redesign of API Versioning
-Responsibility: ?
-Time frame: 1 month
-
-
-Component: Thread Safety
- Identify the extensions that are not thread safe by design
- or due to dependant libraries and identify them as such.
- If possible try to resolve thread safety issue via code
- improvements (if php code or patches will be accepted by
- library maintainers). For situations where thread safety
- cannot easily be acheived a flag in the extension API is
- set so PHP can identify non-thread safe extensions. These
- extensions will not be loaded in a ZTS compiled binary
- (unless it is cli/cgi).
-
-Responsibility: ?
-Time frame: ?
-
-
-Component: SAPI
- Environment variables defined in the CGI spec need to be
- verified in each SAPI module that they conform to the CGI
- spec correctly. If they do not, the SAPI module needs to
- fix the variable prior to script execution. Having this
- conformity will aid in having PHP scripts run correctly
- under different sapi modules.
-
-Responsibility: Shane Caraveo & each sapi module owner
-Timeframe: ? (but shouldn't be much effort, most modules are probably ok)
-
-
-Component: Input Filtering
- - Implement a SAPI input filter hook that will get called
- just before registering a variable in the
- treat_data/post_handler hooks. (done)
- - Make sure this is also done in mbstring (done)
- - Provide access functions, or perhaps a new
- $_RAW_GET/POST/Cookie set of superglobals to get at the
- unfiltered data
- - Provide a .ini directive which allows people to set their
- input filter to one of the built-in strip_tags,
- htmlspecialchars or whatever other internal function might
- be useful here.
- - (The main benefit of this is to make it easier for people
- to solve the XSS problem once and for all without having
- to go through every line of their code and adding input
- validation/filtering everywhere)
-Responsibility: Rasmus
-Timeframe: Yesterday
-
-
-Component: RPC Abstraction Layer
- Porting java, com, dotnet, xmlrpc, corba, soap and python, srm
- (are there more ?) to work with the new oo api and preferably
- by using ext/rpc.
-Responsibility: Harald
-Time frame: 2 months (but i have to wait for a few engine features first)
-
-
-Component: OO Extensions
- Each OO extension has to be revised and rewritten to fit into
- the new OO model. We should decide which extensions are a must
- to have for the release and which can be ported by the maintainer
- later as a separate pecl release.
- A list of extensions to be extended that have to be investigated:
- * browscap
- * aggregate
- * all *sql extensions (*_fetch_object)
- * domxml (seems like christian is rewriting it anyways)
- * ming
-Responsibility: Harald (, extension maintainers)
-
-
-Component: Abstract Data Types (ADT)
-Responsibility: Sterling, Harald
-Time frame: ?
-
-
-Component: Test Suite
- Extending the test suite with atleast a test for every
- function in an extension that doesn't require external
- resources. Also developing an automated test thing which
- cvs ups's, compiles and tests the build on a daily base on
- as much platforms/extensions as possible.
-
- The test suite will also be extended to support threaded
- testing and testing for differing sapi modules (via http
- calls or other methods).
-Reponsibility: Derick (, extension maintainers)
-Time frame: 3 months
diff --git a/TODO.BUILDv5 b/TODO.BUILDv5
deleted file mode 100644
index 28237ea4d1..0000000000
--- a/TODO.BUILDv5
+++ /dev/null
@@ -1,3 +0,0 @@
-- clean up .cvsignores
-- purge Makefile.ins and replace PHP_EXTENSION in config.m4s
- with appropiate calls to PHP_NEW_EXTENSION
diff --git a/TSRM/LICENSE b/TSRM/LICENSE
deleted file mode 100644
index 8d208476e4..0000000000
--- a/TSRM/LICENSE
+++ /dev/null
@@ -1,26 +0,0 @@
-Copyright (c) 1999, 2000, Andi Gutmans, Sascha Schumann, Zeev Suraski.
-All rights reserved.
-
-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.
-
-- Neither name of the copyright holders nor the names of their 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 HOLDERS 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.
diff --git a/TSRM/Makefile.am b/TSRM/Makefile.am
deleted file mode 100644
index 91e585b65c..0000000000
--- a/TSRM/Makefile.am
+++ /dev/null
@@ -1,6 +0,0 @@
-## process this file with automake to produce Makefile.am
-AUTOMAKE_OPTIONS=foreign
-noinst_LTLIBRARIES=libtsrm.la
-libtsrm_la_SOURCES = TSRM.c tsrm_strtok_r.c tsrm_virtual_cwd.c
-
-depend:
diff --git a/TSRM/TODO b/TSRM/TODO
deleted file mode 100644
index 82b4fedfde..0000000000
--- a/TSRM/TODO
+++ /dev/null
@@ -1,2 +0,0 @@
-- Improve the lock in ts_resource_ex() in order to cover less code.
- This can probably be done by more careful hash table access
diff --git a/TSRM/TSRM.c b/TSRM/TSRM.c
deleted file mode 100644
index db47adfb1c..0000000000
--- a/TSRM/TSRM.c
+++ /dev/null
@@ -1,704 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | Thread Safe Resource Manager |
- +----------------------------------------------------------------------+
- | Copyright (c) 1999, 2000, Andi Gutmans, Sascha Schumann, Zeev Suraski|
- | This source file is subject to the TSRM license, that is bundled |
- | with this package in the file LICENSE |
- +----------------------------------------------------------------------+
- | Authors: Zeev Suraski <zeev@zend.com> |
- +----------------------------------------------------------------------+
-*/
-
-#include "TSRM.h"
-
-#ifdef ZTS
-
-#include <stdio.h>
-
-#if HAVE_STDARG_H
-#include <stdarg.h>
-#endif
-
-typedef struct _tsrm_tls_entry tsrm_tls_entry;
-
-struct _tsrm_tls_entry {
- void **storage;
- int count;
- THREAD_T thread_id;
- tsrm_tls_entry *next;
-};
-
-
-typedef struct {
- size_t size;
- ts_allocate_ctor ctor;
- ts_allocate_dtor dtor;
- int done;
-} tsrm_resource_type;
-
-
-/* The memory manager table */
-static tsrm_tls_entry **tsrm_tls_table=NULL;
-static int tsrm_tls_table_size;
-static ts_rsrc_id id_count;
-
-/* The resource sizes table */
-static tsrm_resource_type *resource_types_table=NULL;
-static int resource_types_table_size;
-
-
-static MUTEX_T tsmm_mutex; /* thread-safe memory manager mutex */
-
-/* New thread handlers */
-static tsrm_thread_begin_func_t tsrm_new_thread_begin_handler;
-static tsrm_thread_end_func_t tsrm_new_thread_end_handler;
-
-/* Debug support */
-int tsrm_error(int level, const char *format, ...);
-
-/* Read a resource from a thread's resource storage */
-static int tsrm_error_level;
-static FILE *tsrm_error_file;
-
-#if TSRM_DEBUG
-#define TSRM_ERROR(args) tsrm_error args
-#define TSRM_SAFE_RETURN_RSRC(array, offset, range) \
- { \
- int unshuffled_offset = TSRM_UNSHUFFLE_RSRC_ID(offset); \
- \
- if (offset==0) { \
- return &array; \
- } else if ((unshuffled_offset)>=0 && (unshuffled_offset)<(range)) { \
- TSRM_ERROR((TSRM_ERROR_LEVEL_INFO, "Successfully fetched resource id %d for thread id %ld - 0x%0.8X", \
- unshuffled_offset, (long) thread_resources->thread_id, array[unshuffled_offset])); \
- return array[unshuffled_offset]; \
- } else { \
- TSRM_ERROR((TSRM_ERROR_LEVEL_ERROR, "Resource id %d is out of range (%d..%d)", \
- unshuffled_offset, TSRM_SHUFFLE_RSRC_ID(0), TSRM_SHUFFLE_RSRC_ID(thread_resources->count-1))); \
- return NULL; \
- } \
- }
-#else
-#define TSRM_ERROR(args)
-#define TSRM_SAFE_RETURN_RSRC(array, offset, range) \
- if (offset==0) { \
- return &array; \
- } else { \
- return array[TSRM_UNSHUFFLE_RSRC_ID(offset)]; \
- }
-#endif
-
-#if defined(PTHREADS)
-/* Thread local storage */
-static pthread_key_t tls_key;
-#elif defined(TSRM_ST)
-static int tls_key;
-#elif defined(TSRM_WIN32)
-static DWORD tls_key;
-#elif defined(BETHREADS)
-static int32 tls_key;
-#endif
-
-/* Startup TSRM (call once for the entire process) */
-TSRM_API int tsrm_startup(int expected_threads, int expected_resources, int debug_level, char *debug_filename)
-{
-#if defined(GNUPTH)
- pth_init();
-#elif defined(PTHREADS)
- pthread_key_create( &tls_key, 0 );
-#elif defined(TSRM_ST)
- st_init();
- st_key_create(&tls_key, 0);
-#elif defined(TSRM_WIN32)
- tls_key = TlsAlloc();
-#elif defined(BETHREADS)
- tls_key = tls_allocate();
-#endif
-
- tsrm_error_file = stderr;
- tsrm_error_set(debug_level, debug_filename);
- tsrm_tls_table_size = expected_threads;
-
- tsrm_tls_table = (tsrm_tls_entry **) calloc(tsrm_tls_table_size, sizeof(tsrm_tls_entry *));
- if (!tsrm_tls_table) {
- TSRM_ERROR((TSRM_ERROR_LEVEL_ERROR, "Unable to allocate TLS table"));
- return 0;
- }
- id_count=0;
-
- resource_types_table_size = expected_resources;
- resource_types_table = (tsrm_resource_type *) calloc(resource_types_table_size, sizeof(tsrm_resource_type));
- if (!resource_types_table) {
- TSRM_ERROR((TSRM_ERROR_LEVEL_ERROR, "Unable to allocate resource types table"));
- free(tsrm_tls_table);
- tsrm_tls_table = NULL;
- return 0;
- }
-
- tsmm_mutex = tsrm_mutex_alloc();
-
- tsrm_new_thread_begin_handler = tsrm_new_thread_end_handler = NULL;
-
- TSRM_ERROR((TSRM_ERROR_LEVEL_CORE, "Started up TSRM, %d expected threads, %d expected resources", expected_threads, expected_resources));
- return 1;
-}
-
-
-/* Shutdown TSRM (call once for the entire process) */
-TSRM_API void tsrm_shutdown(void)
-{
- int i;
-
- if (tsrm_tls_table) {
- for (i=0; i<tsrm_tls_table_size; i++) {
- tsrm_tls_entry *p = tsrm_tls_table[i], *next_p;
-
- while (p) {
- int j;
-
- next_p = p->next;
- for (j=0; j<p->count; j++) {
- if (p->storage[j]) {
- if (resource_types_table && !resource_types_table[j].done && resource_types_table[j].dtor) {
- resource_types_table[j].dtor(p->storage[j], &p->storage);
- }
- free(p->storage[j]);
- }
- }
- free(p->storage);
- free(p);
- p = next_p;
- }
- }
- free(tsrm_tls_table);
- tsrm_tls_table = NULL;
- }
- if (resource_types_table) {
- free(resource_types_table);
- resource_types_table=NULL;
- }
- tsrm_mutex_free(tsmm_mutex);
- tsmm_mutex = NULL;
- TSRM_ERROR((TSRM_ERROR_LEVEL_CORE, "Shutdown TSRM"));
- if (tsrm_error_file!=stderr) {
- fclose(tsrm_error_file);
- }
-#if defined(GNUPTH)
- pth_kill();
-#elif defined(PTHREADS)
- pthread_setspecific(tls_key, 0);
- pthread_key_delete(tls_key);
-#elif defined(TSRM_WIN32)
- TlsFree(tls_key);
-#endif
-}
-
-
-/* allocates a new thread-safe-resource id */
-TSRM_API ts_rsrc_id ts_allocate_id(ts_rsrc_id *rsrc_id, size_t size, ts_allocate_ctor ctor, ts_allocate_dtor dtor)
-{
- int i;
-
- TSRM_ERROR((TSRM_ERROR_LEVEL_CORE, "Obtaining a new resource id, %d bytes", size));
-
- tsrm_mutex_lock(tsmm_mutex);
-
- /* obtain a resource id */
- *rsrc_id = TSRM_SHUFFLE_RSRC_ID(id_count++);
- TSRM_ERROR((TSRM_ERROR_LEVEL_CORE, "Obtained resource id %d", *rsrc_id));
-
- /* store the new resource type in the resource sizes table */
- if (resource_types_table_size < id_count) {
- resource_types_table = (tsrm_resource_type *) realloc(resource_types_table, sizeof(tsrm_resource_type)*id_count);
- if (!resource_types_table) {
- tsrm_mutex_unlock(tsmm_mutex);
- TSRM_ERROR((TSRM_ERROR_LEVEL_ERROR, "Unable to allocate storage for resource"));
- *rsrc_id = 0;
- return 0;
- }
- resource_types_table_size = id_count;
- }
- resource_types_table[TSRM_UNSHUFFLE_RSRC_ID(*rsrc_id)].size = size;
- resource_types_table[TSRM_UNSHUFFLE_RSRC_ID(*rsrc_id)].ctor = ctor;
- resource_types_table[TSRM_UNSHUFFLE_RSRC_ID(*rsrc_id)].dtor = dtor;
- resource_types_table[TSRM_UNSHUFFLE_RSRC_ID(*rsrc_id)].done = 0;
-
- /* enlarge the arrays for the already active threads */
- for (i=0; i<tsrm_tls_table_size; i++) {
- tsrm_tls_entry *p = tsrm_tls_table[i];
-
- while (p) {
- if (p->count < id_count) {
- int j;
-
- p->storage = (void *) realloc(p->storage, sizeof(void *)*id_count);
- for (j=p->count; j<id_count; j++) {
- p->storage[j] = (void *) malloc(resource_types_table[j].size);
- if (resource_types_table[j].ctor) {
- resource_types_table[j].ctor(p->storage[j], &p->storage);
- }
- }
- p->count = id_count;
- }
- p = p->next;
- }
- }
- tsrm_mutex_unlock(tsmm_mutex);
-
- TSRM_ERROR((TSRM_ERROR_LEVEL_CORE, "Successfully allocated new resource id %d", *rsrc_id));
- return *rsrc_id;
-}
-
-
-static void allocate_new_resource(tsrm_tls_entry **thread_resources_ptr, THREAD_T thread_id)
-{
- int i;
-
- TSRM_ERROR((TSRM_ERROR_LEVEL_CORE, "Creating data structures for thread %x", thread_id));
- (*thread_resources_ptr) = (tsrm_tls_entry *) malloc(sizeof(tsrm_tls_entry));
- (*thread_resources_ptr)->storage = (void **) malloc(sizeof(void *)*id_count);
- (*thread_resources_ptr)->count = id_count;
- (*thread_resources_ptr)->thread_id = thread_id;
- (*thread_resources_ptr)->next = NULL;
-
-#if defined(PTHREADS)
- /* Set thread local storage to this new thread resources structure */
- pthread_setspecific(tls_key, (void *) *thread_resources_ptr);
-#elif defined(TSRM_ST)
- st_thread_setspecific(tls_key, (void *) *thread_resources_ptr);
-#elif defined(TSRM_WIN32)
- TlsSetValue(tls_key, (void *) *thread_resources_ptr);
-#elif defined(BETHREADS)
- tls_set(tls_key, (void*) *thread_resources_ptr);
-#endif
-
- if (tsrm_new_thread_begin_handler) {
- tsrm_new_thread_begin_handler(thread_id, &((*thread_resources_ptr)->storage));
- }
- for (i=0; i<id_count; i++) {
- if (resource_types_table[i].done) {
- (*thread_resources_ptr)->storage[i] = NULL;
- } else
- {
- (*thread_resources_ptr)->storage[i] = (void *) malloc(resource_types_table[i].size);
- if (resource_types_table[i].ctor) {
- resource_types_table[i].ctor((*thread_resources_ptr)->storage[i], &(*thread_resources_ptr)->storage);
- }
- }
- }
-
- tsrm_mutex_unlock(tsmm_mutex);
-
- if (tsrm_new_thread_end_handler) {
- tsrm_new_thread_end_handler(thread_id, &((*thread_resources_ptr)->storage));
- }
-}
-
-
-/* fetches the requested resource for the current thread */
-TSRM_API void *ts_resource_ex(ts_rsrc_id id, THREAD_T *th_id)
-{
- THREAD_T thread_id;
- int hash_value;
- tsrm_tls_entry *thread_resources;
-
-#ifdef NETWARE
- /* The below if loop is added for NetWare to fix an abend while unloading PHP
- * when an Apache unload command is issued on the system console.
- * While exiting from PHP, at the end for some reason, this function is called
- * with tsrm_tls_table = NULL. When this happened, the server abends when
- * tsrm_tls_table is accessed since it is NULL.
- */
- if(tsrm_tls_table) {
-#endif
- if (!th_id) {
-#if defined(PTHREADS)
- /* Fast path for looking up the resources for the current
- * thread. Its used by just about every call to
- * ts_resource_ex(). This avoids the need for a mutex lock
- * and our hashtable lookup.
- */
- thread_resources = pthread_getspecific(tls_key);
-#elif defined(TSRM_ST)
- thread_resources = st_thread_getspecific(tls_key);
-#elif defined(TSRM_WIN32)
- thread_resources = TlsGetValue(tls_key);
-#elif defined(BETHREADS)
- thread_resources = (tsrm_tls_entry*)tls_get(tls_key);
-#else
- thread_resources = NULL;
-#endif
- if (thread_resources) {
- TSRM_ERROR((TSRM_ERROR_LEVEL_INFO, "Fetching resource id %d for current thread %d", id, (long) thread_resources->thread_id));
- /* Read a specific resource from the thread's resources.
- * This is called outside of a mutex, so have to be aware about external
- * changes to the structure as we read it.
- */
- TSRM_SAFE_RETURN_RSRC(thread_resources->storage, id, thread_resources->count);
- }
- thread_id = tsrm_thread_id();
- } else {
- thread_id = *th_id;
- }
-
- TSRM_ERROR((TSRM_ERROR_LEVEL_INFO, "Fetching resource id %d for thread %ld", id, (long) thread_id));
- tsrm_mutex_lock(tsmm_mutex);
-
- hash_value = THREAD_HASH_OF(thread_id, tsrm_tls_table_size);
- thread_resources = tsrm_tls_table[hash_value];
-
- if (!thread_resources) {
- allocate_new_resource(&tsrm_tls_table[hash_value], thread_id);
- return ts_resource_ex(id, &thread_id);
- } else {
- do {
- if (thread_resources->thread_id == thread_id) {
- break;
- }
- if (thread_resources->next) {
- thread_resources = thread_resources->next;
- } else {
- allocate_new_resource(&thread_resources->next, thread_id);
- return ts_resource_ex(id, &thread_id);
- /*
- * thread_resources = thread_resources->next;
- * break;
- */
- }
- } while (thread_resources);
- }
- tsrm_mutex_unlock(tsmm_mutex);
- /* Read a specific resource from the thread's resources.
- * This is called outside of a mutex, so have to be aware about external
- * changes to the structure as we read it.
- */
- TSRM_SAFE_RETURN_RSRC(thread_resources->storage, id, thread_resources->count);
-#ifdef NETWARE
- } /* if(tsrm_tls_table) */
-#endif
-}
-
-
-/* frees all resources allocated for the current thread */
-void ts_free_thread(void)
-{
- tsrm_tls_entry *thread_resources;
- int i;
- THREAD_T thread_id = tsrm_thread_id();
- int hash_value;
- tsrm_tls_entry *last=NULL;
-
- tsrm_mutex_lock(tsmm_mutex);
- hash_value = THREAD_HASH_OF(thread_id, tsrm_tls_table_size);
- thread_resources = tsrm_tls_table[hash_value];
-
- while (thread_resources) {
- if (thread_resources->thread_id == thread_id) {
- for (i=0; i<thread_resources->count; i++) {
- if (resource_types_table[i].dtor) {
- resource_types_table[i].dtor(thread_resources->storage[i], &thread_resources->storage);
- }
- }
- for (i=0; i<thread_resources->count; i++) {
- free(thread_resources->storage[i]);
- }
- free(thread_resources->storage);
- if (last) {
- last->next = thread_resources->next;
- } else {
- tsrm_tls_table[hash_value] = thread_resources->next;
- }
-#if defined(PTHREADS)
- pthread_setspecific(tls_key, 0);
-#elif defined(TSRM_WIN32)
- TlsSetValue(tls_key, 0);
-#endif
- free(thread_resources);
- break;
- }
- if (thread_resources->next) {
- last = thread_resources;
- }
- thread_resources = thread_resources->next;
- }
- tsrm_mutex_unlock(tsmm_mutex);
-}
-
-
-/* deallocates all occurrences of a given id */
-void ts_free_id(ts_rsrc_id id)
-{
- int i;
- int j = TSRM_UNSHUFFLE_RSRC_ID(id);
-
- tsrm_mutex_lock(tsmm_mutex);
-
- TSRM_ERROR((TSRM_ERROR_LEVEL_CORE, "Freeing resource id %d", id));
-
- if (tsrm_tls_table) {
- for (i=0; i<tsrm_tls_table_size; i++) {
- tsrm_tls_entry *p = tsrm_tls_table[i];
-
- while (p) {
- if (p->count > j && p->storage[j]) {
- if (resource_types_table && resource_types_table[j].dtor) {
- resource_types_table[j].dtor(p->storage[j], &p->storage);
- }
- free(p->storage[j]);
- p->storage[j] = NULL;
- }
- p = p->next;
- }
- }
- }
- resource_types_table[j].done = 1;
-
- tsrm_mutex_unlock(tsmm_mutex);
-
- TSRM_ERROR((TSRM_ERROR_LEVEL_CORE, "Successfully freed resource id %d", id));
-}
-
-
-
-
-/*
- * Utility Functions
- */
-
-/* Obtain the current thread id */
-TSRM_API THREAD_T tsrm_thread_id(void)
-{
-#ifdef TSRM_WIN32
- return GetCurrentThreadId();
-#elif defined(NETWARE)
- /* There seems to be some problem with the LibC call: NXThreadGetId().
- * Due to this, the PHPMyAdmin application is abending in PHP calls.
- * Used the call, kCurrentThread instead and it works fine.
- */
-/* return NXThreadGetId(); */
- return kCurrentThread();
-#elif defined(GNUPTH)
- return pth_self();
-#elif defined(PTHREADS)
- return pthread_self();
-#elif defined(NSAPI)
- return systhread_current();
-#elif defined(PI3WEB)
- return PIThread_getCurrent();
-#elif defined(TSRM_ST)
- return st_thread_self();
-#elif defined(BETHREADS)
- return find_thread(NULL);
-#endif
-}
-
-
-/* Allocate a mutex */
-TSRM_API MUTEX_T tsrm_mutex_alloc(void)
-{
- MUTEX_T mutexp;
-#ifdef NETWARE
-#ifndef USE_MPK
- /* To use the Recursive Mutex Locking of LibC */
- long flags = NX_MUTEX_RECURSIVE;
- NXHierarchy_t order = 0;
- NX_LOCK_INFO_ALLOC (lockInfo, "PHP-TSRM", 0);
-#endif
-#endif
-
-#ifdef TSRM_WIN32
- mutexp = malloc(sizeof(CRITICAL_SECTION));
- InitializeCriticalSection(mutexp);
-#elif defined(NETWARE)
-#ifdef USE_MPK
- mutexp = kMutexAlloc((BYTE*)"PHP-TSRM");
-#else
- mutexp = NXMutexAlloc(flags, order, &lockInfo);
-#endif
-#elif defined(GNUPTH)
- mutexp = (MUTEX_T) malloc(sizeof(*mutexp));
- pth_mutex_init(mutexp);
-#elif defined(PTHREADS)
- mutexp = (pthread_mutex_t *)malloc(sizeof(pthread_mutex_t));
- pthread_mutex_init(mutexp,NULL);
-#elif defined(NSAPI)
- mutexp = crit_init();
-#elif defined(PI3WEB)
- mutexp = PIPlatform_allocLocalMutex();
-#elif defined(TSRM_ST)
- mutexp = st_mutex_new();
-#elif defined(BETHREADS)
- mutexp = (beos_ben*)malloc(sizeof(beos_ben));
- mutexp->ben = 0;
- mutexp->sem = create_sem(1, "PHP sempahore");
-#endif
-#ifdef THR_DEBUG
- printf("Mutex created thread: %d\n",mythreadid());
-#endif
- return( mutexp );
-}
-
-
-/* Free a mutex */
-TSRM_API void tsrm_mutex_free(MUTEX_T mutexp)
-{
- if (mutexp) {
-#ifdef TSRM_WIN32
- DeleteCriticalSection(mutexp);
- free(mutexp);
-#elif defined(NETWARE)
-#ifdef USE_MPK
- kMutexFree(mutexp);
-#else
- NXMutexFree(mutexp);
-#endif
-#elif defined(GNUPTH)
- free(mutexp);
-#elif defined(PTHREADS)
- pthread_mutex_destroy(mutexp);
- free(mutexp);
-#elif defined(NSAPI)
- crit_terminate(mutexp);
-#elif defined(PI3WEB)
- PISync_delete(mutexp);
-#elif defined(TSRM_ST)
- st_mutex_destroy(mutexp);
-#elif defined(BETHREADS)
- delete_sem(mutexp->sem);
- free(mutexp);
-#endif
- }
-#ifdef THR_DEBUG
- printf("Mutex freed thread: %d\n",mythreadid());
-#endif
-}
-
-
-/* Lock a mutex */
-TSRM_API int tsrm_mutex_lock(MUTEX_T mutexp)
-{
- TSRM_ERROR((TSRM_ERROR_LEVEL_INFO, "Mutex locked thread: %ld", tsrm_thread_id()));
-#ifdef TSRM_WIN32
- EnterCriticalSection(mutexp);
- return 1;
-#elif defined(NETWARE)
-#ifdef USE_MPK
- return kMutexLock(mutexp);
-#else
- return NXLock(mutexp);
-#endif
-#elif defined(GNUPTH)
- return pth_mutex_acquire(mutexp, 0, NULL);
-#elif defined(PTHREADS)
- return pthread_mutex_lock(mutexp);
-#elif defined(NSAPI)
- return crit_enter(mutexp);
-#elif defined(PI3WEB)
- return PISync_lock(mutexp);
-#elif defined(TSRM_ST)
- return st_mutex_lock(mutexp);
-#elif defined(BETHREADS)
- if (atomic_add(&mutexp->ben, 1) != 0)
- return acquire_sem(mutexp->sem);
- return 0;
-#endif
-}
-
-
-/* Unlock a mutex */
-TSRM_API int tsrm_mutex_unlock(MUTEX_T mutexp)
-{
- TSRM_ERROR((TSRM_ERROR_LEVEL_INFO, "Mutex unlocked thread: %ld", tsrm_thread_id()));
-#ifdef TSRM_WIN32
- LeaveCriticalSection(mutexp);
- return 1;
-#elif defined(NETWARE)
-#ifdef USE_MPK
- return kMutexUnlock(mutexp);
-#else
- return NXUnlock(mutexp);
-#endif
-#elif defined(GNUPTH)
- return pth_mutex_release(mutexp);
-#elif defined(PTHREADS)
- return pthread_mutex_unlock(mutexp);
-#elif defined(NSAPI)
- return crit_exit(mutexp);
-#elif defined(PI3WEB)
- return PISync_unlock(mutexp);
-#elif defined(TSRM_ST)
- return st_mutex_unlock(mutexp);
-#elif defined(BETHREADS)
- if (atomic_add(&mutexp->ben, -1) != 1)
- return release_sem(mutexp->sem);
- return 0;
-#endif
-}
-
-
-TSRM_API void *tsrm_set_new_thread_begin_handler(tsrm_thread_begin_func_t new_thread_begin_handler)
-{
- void *retval = (void *) tsrm_new_thread_begin_handler;
-
- tsrm_new_thread_begin_handler = new_thread_begin_handler;
- return retval;
-}
-
-
-TSRM_API void *tsrm_set_new_thread_end_handler(tsrm_thread_end_func_t new_thread_end_handler)
-{
- void *retval = (void *) tsrm_new_thread_end_handler;
-
- tsrm_new_thread_end_handler = new_thread_end_handler;
- return retval;
-}
-
-
-
-/*
- * Debug support
- */
-
-#if TSRM_DEBUG
-int tsrm_error(int level, const char *format, ...)
-{
- if (level<=tsrm_error_level) {
- va_list args;
- int size;
-
- fprintf(tsrm_error_file, "TSRM: ");
- va_start(args, format);
- size = vfprintf(tsrm_error_file, format, args);
- va_end(args);
- fprintf(tsrm_error_file, "\n");
- fflush(tsrm_error_file);
- return size;
- } else {
- return 0;
- }
-}
-#endif
-
-
-void tsrm_error_set(int level, char *debug_filename)
-{
- tsrm_error_level = level;
-
-#if TSRM_DEBUG
- if (tsrm_error_file!=stderr) { /* close files opened earlier */
- fclose(tsrm_error_file);
- }
-
- if (debug_filename) {
- tsrm_error_file = fopen(debug_filename, "w");
- if (!tsrm_error_file) {
- tsrm_error_file = stderr;
- }
- } else {
- tsrm_error_file = stderr;
- }
-#endif
-}
-
-#endif /* ZTS */
diff --git a/TSRM/TSRM.dsp b/TSRM/TSRM.dsp
deleted file mode 100644
index 1a5693f5a2..0000000000
--- a/TSRM/TSRM.dsp
+++ /dev/null
@@ -1,186 +0,0 @@
-# Microsoft Developer Studio Project File - Name="TSRM" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Static Library" 0x0104
-
-CFG=TSRM - Win32 Debug_TS
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "TSRM.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "TSRM.mak" CFG="TSRM - Win32 Debug_TS"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "TSRM - Win32 Debug_TS" (based on "Win32 (x86) Static Library")
-!MESSAGE "TSRM - Win32 Release_TS" (based on "Win32 (x86) Static Library")
-!MESSAGE "TSRM - Win32 Release_TS_inline" (based on "Win32 (x86) Static Library")
-!MESSAGE "TSRM - Win32 Release_TSDbg" (based on "Win32 (x86) Static Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "TSRM - Win32 Debug_TS"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "TSRM___Win32_Debug_TS"
-# PROP BASE Intermediate_Dir "TSRM___Win32_Debug_TS"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug_TS"
-# PROP Intermediate_Dir "Debug_TS"
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /I "C:\Projects\TSRM" /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c
-# ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "." /D "_DEBUG" /D "ZTS" /D "_LIB" /D "TSRM_EXPORTS" /D "WIN32" /D "_MBCS" /D TSRM_DEBUG=1 /YX /FD /GZ /c
-# ADD BASE RSC /l 0x40d /d "_DEBUG"
-# ADD RSC /l 0x40d /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo
-# ADD LIB32 /nologo
-
-!ELSEIF "$(CFG)" == "TSRM - Win32 Release_TS"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "TSRM___Win32_Release_TS"
-# PROP BASE Intermediate_Dir "TSRM___Win32_Release_TS"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release_TS"
-# PROP Intermediate_Dir "Release_TS"
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c
-# ADD CPP /nologo /MD /W3 /GX /O2 /I "." /D "NDEBUG" /D "ZTS" /D "_LIB" /D "TSRM_EXPORTS" /D "WIN32" /D "_MBCS" /D TSRM_DEBUG=0 /YX /FD /c
-# ADD BASE RSC /l 0x40d /d "NDEBUG"
-# ADD RSC /l 0x40d /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo
-# ADD LIB32 /nologo
-
-!ELSEIF "$(CFG)" == "TSRM - Win32 Release_TS_inline"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "TSRM___Win32_Release_TS_inline"
-# PROP BASE Intermediate_Dir "TSRM___Win32_Release_TS_inline"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release_TS_inline"
-# PROP Intermediate_Dir "Release_TS_inline"
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MD /W3 /GX /O2 /I "." /D "NDEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /D "TSRM_EXPORTS" /YX /FD /c
-# ADD CPP /nologo /MD /W3 /GX /O2 /I "." /D "NDEBUG" /D "ZTS" /D "_LIB" /D "TSRM_EXPORTS" /D "WIN32" /D "_MBCS" /D TSRM_DEBUG=0 /YX /FD /c
-# ADD BASE RSC /l 0x40d /d "NDEBUG"
-# ADD RSC /l 0x40d /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo
-# ADD LIB32 /nologo
-
-!ELSEIF "$(CFG)" == "TSRM - Win32 Release_TSDbg"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "TSRM___Win32_Release_TSDbg"
-# PROP BASE Intermediate_Dir "TSRM___Win32_Release_TSDbg"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release_TSDbg"
-# PROP Intermediate_Dir "Release_TSDbg"
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MD /W3 /GX /O2 /I "." /D "NDEBUG" /D "ZTS" /D "_LIB" /D "TSRM_EXPORTS" /D "WIN32" /D "_MBCS" /D TSRM_DEBUG=0 /YX /FD /c
-# ADD CPP /nologo /MD /W3 /GX /Zi /Od /I "." /D "NDEBUG" /D "ZTS" /D "_LIB" /D "TSRM_EXPORTS" /D "WIN32" /D "_MBCS" /D TSRM_DEBUG=0 /YX /FD /c
-# ADD BASE RSC /l 0x40d /d "NDEBUG"
-# ADD RSC /l 0x40d /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo
-# ADD LIB32 /nologo
-
-!ENDIF
-
-# Begin Target
-
-# Name "TSRM - Win32 Debug_TS"
-# Name "TSRM - Win32 Release_TS"
-# Name "TSRM - Win32 Release_TS_inline"
-# Name "TSRM - Win32 Release_TSDbg"
-# Begin Group "Source Files"
-
-# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
-# Begin Source File
-
-SOURCE=.\TSRM.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\tsrm_strtok_r.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\tsrm_virtual_cwd.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\tsrm_win32.c
-# End Source File
-# End Group
-# Begin Group "Header Files"
-
-# PROP Default_Filter "h;hpp;hxx;hm;inl"
-# Begin Source File
-
-SOURCE=.\readdir.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\TSRM.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\tsrm_config.w32.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\tsrm_config_common.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\tsrm_strtok_r.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\tsrm_virtual_cwd.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\tsrm_win32.h
-# End Source File
-# End Group
-# End Target
-# End Project
diff --git a/TSRM/TSRM.h b/TSRM/TSRM.h
deleted file mode 100644
index 87f5ad94b7..0000000000
--- a/TSRM/TSRM.h
+++ /dev/null
@@ -1,177 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | Thread Safe Resource Manager |
- +----------------------------------------------------------------------+
- | Copyright (c) 1999, 2000, Andi Gutmans, Sascha Schumann, Zeev Suraski|
- | This source file is subject to the TSRM license, that is bundled |
- | with this package in the file LICENSE |
- +----------------------------------------------------------------------+
- | Authors: Zeev Suraski <zeev@zend.com> |
- +----------------------------------------------------------------------+
-*/
-
-#ifndef TSRM_H
-#define TSRM_H
-
-/* #ifndef WIN32 */
-#if !defined(WIN32) && !defined(NETWARE)
-# include "tsrm_config.h"
-#endif
-
-#ifdef WIN32
-# define TSRM_WIN32
-# include "tsrm_config.w32.h"
-#endif
-
-#ifdef TSRM_WIN32
-# ifdef TSRM_EXPORTS
-# define TSRM_API __declspec(dllexport)
-# else
-# define TSRM_API __declspec(dllimport)
-# endif
-#else
-# define TSRM_API
-#endif
-
-/* Only compile multi-threading functions if we're in ZTS mode */
-#ifdef ZTS
-
-#ifdef TSRM_WIN32
-# ifndef TSRM_INCLUDE_FULL_WINDOWS_HEADERS
-# define WIN32_LEAN_AND_MEAN
-# endif
-# include <windows.h>
-# include <shellapi.h>
-#elif defined(NETWARE)
-# include <nks/thread.h>
-#ifdef USE_MPK
-# include <mpklib4php.h>
-#else
-# include <nks/synch.h>
-#endif
-#elif defined(GNUPTH)
-# include <pth.h>
-#elif defined(PTHREADS)
-# include <pthread.h>
-#elif defined(TSRM_ST)
-# include <st.h>
-#elif defined(BETHREADS)
-#include <kernel/OS.h>
-#include <TLS.h>
-#endif
-
-typedef int ts_rsrc_id;
-
-/* Define THREAD_T and MUTEX_T */
-#ifdef TSRM_WIN32
-# define THREAD_T DWORD
-# define MUTEX_T CRITICAL_SECTION *
-#elif defined(NETWARE)
-# define THREAD_T NXThreadId_t
-#ifdef USE_MPK
-# define MUTEX_T MUTEX
-#else
-# define MUTEX_T NXMutex_t *
-#endif
-#elif defined(GNUPTH)
-# define THREAD_T pth_t
-# define MUTEX_T pth_mutex_t *
-#elif defined(PTHREADS)
-# define THREAD_T pthread_t
-# define MUTEX_T pthread_mutex_t *
-#elif defined(NSAPI)
-# define THREAD_T SYS_THREAD
-# define MUTEX_T CRITICAL
-#elif defined(PI3WEB)
-# define THREAD_T PIThread *
-# define MUTEX_T PISync *
-#elif defined(TSRM_ST)
-# define THREAD_T st_thread_t
-# define MUTEX_T st_mutex_t
-#elif defined(BETHREADS)
-# define THREAD_T thread_id
-typedef struct {
- sem_id sem;
- int32 ben;
-} beos_ben;
-# define MUTEX_T beos_ben *
-#endif
-
-typedef void (*ts_allocate_ctor)(void *, void ***);
-typedef void (*ts_allocate_dtor)(void *, void ***);
-
-#define THREAD_HASH_OF(thr,ts) (unsigned long)thr%(unsigned long)ts
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/* startup/shutdown */
-TSRM_API int tsrm_startup(int expected_threads, int expected_resources, int debug_level, char *debug_filename);
-TSRM_API void tsrm_shutdown(void);
-
-/* allocates a new thread-safe-resource id */
-TSRM_API ts_rsrc_id ts_allocate_id(ts_rsrc_id *rsrc_id, size_t size, ts_allocate_ctor ctor, ts_allocate_dtor dtor);
-
-/* fetches the requested resource for the current thread */
-TSRM_API void *ts_resource_ex(ts_rsrc_id id, THREAD_T *th_id);
-#define ts_resource(id) ts_resource_ex(id, NULL)
-
-/* frees all resources allocated for the current thread */
-TSRM_API void ts_free_thread(void);
-
-/* deallocates all occurrences of a given id */
-TSRM_API void ts_free_id(ts_rsrc_id id);
-
-
-/* Debug support */
-#define TSRM_ERROR_LEVEL_ERROR 1
-#define TSRM_ERROR_LEVEL_CORE 2
-#define TSRM_ERROR_LEVEL_INFO 3
-
-typedef void (*tsrm_thread_begin_func_t)(THREAD_T thread_id, void ***tsrm_ls);
-typedef void (*tsrm_thread_end_func_t)(THREAD_T thread_id, void ***tsrm_ls);
-
-
-TSRM_API int tsrm_error(int level, const char *format, ...);
-TSRM_API void tsrm_error_set(int level, char *debug_filename);
-
-/* utility functions */
-TSRM_API THREAD_T tsrm_thread_id(void);
-TSRM_API MUTEX_T tsrm_mutex_alloc(void);
-TSRM_API void tsrm_mutex_free(MUTEX_T mutexp);
-TSRM_API int tsrm_mutex_lock(MUTEX_T mutexp);
-TSRM_API int tsrm_mutex_unlock(MUTEX_T mutexp);
-
-TSRM_API void *tsrm_set_new_thread_begin_handler(tsrm_thread_begin_func_t new_thread_begin_handler);
-TSRM_API void *tsrm_set_new_thread_end_handler(tsrm_thread_end_func_t new_thread_end_handler);
-
-#define TSRM_SHUFFLE_RSRC_ID(rsrc_id) ((rsrc_id)+1)
-#define TSRM_UNSHUFFLE_RSRC_ID(rsrc_id) ((rsrc_id)-1)
-
-#define TSRMLS_FETCH() void ***tsrm_ls = (void ***) ts_resource_ex(0, NULL)
-#define TSRMLS_FETCH_FROM_CTX(ctx) void ***tsrm_ls = (void ***) ctx
-#define TSRMLS_SET_CTX(ctx) (void ***) ctx = tsrm_ls
-#define TSRMG(id, type, element) (((type) (*((void ***) tsrm_ls))[TSRM_UNSHUFFLE_RSRC_ID(id)])->element)
-#define TSRMLS_D void ***tsrm_ls
-#define TSRMLS_DC , TSRMLS_D
-#define TSRMLS_C tsrm_ls
-#define TSRMLS_CC , TSRMLS_C
-
-#ifdef __cplusplus
-}
-#endif
-
-#else /* non ZTS */
-
-#define TSRMLS_FETCH()
-#define TSRMLS_FETCH_FROM_CTX(ctx)
-#define TSRMLS_SET_CTX(ctx)
-#define TSRMLS_D void
-#define TSRMLS_DC
-#define TSRMLS_C
-#define TSRMLS_CC
-
-#endif /* ZTS */
-
-#endif /* TSRM_H */
diff --git a/TSRM/acconfig.h b/TSRM/acconfig.h
deleted file mode 100644
index 2b94cf35e7..0000000000
--- a/TSRM/acconfig.h
+++ /dev/null
@@ -1 +0,0 @@
-#undef PTHREADS
diff --git a/TSRM/acinclude.m4 b/TSRM/acinclude.m4
deleted file mode 100644
index 1953172aef..0000000000
--- a/TSRM/acinclude.m4
+++ /dev/null
@@ -1,5 +0,0 @@
-
-AC_DEFUN(AM_SET_LIBTOOL_VARIABLE,[
- LIBTOOL='$(SHELL) $(top_builddir)/libtool $1'
-])
-
diff --git a/TSRM/build.mk b/TSRM/build.mk
deleted file mode 100644
index aac1a8b982..0000000000
--- a/TSRM/build.mk
+++ /dev/null
@@ -1,43 +0,0 @@
-# Makefile to generate build tools
-#
-# Standard usage:
-# make -f build.mk
-#
-# Written by Sascha Schumann
-#
-# $Id$
-
-
-LT_TARGETS = ltmain.sh ltconfig
-
-config_h_in = tsrm_config.h.in
-
-makefile_am_files = Makefile.am
-makefile_in_files = $(makefile_am_files:.am=.in)
-makefile_files = $(makefile_am_files:e.am=e)
-
-targets = $(makefile_in_files) $(LT_TARGETS) configure $(config_h_in)
-
-all: $(targets)
-
-clean:
- rm -f $(targets)
-
-$(LT_TARGETS):
- rm -f $(LT_TARGETS)
- libtoolize --automake $(AMFLAGS) -f
-
-$(makefile_in_files): $(makefile_am_files)
- automake -a -i $(AMFLAGS) $(makefile_files)
-
-aclocal.m4: configure.in acinclude.m4
- aclocal
-
-$(config_h_in): configure.in acconfig.h
-# explicitly remove target since autoheader does not seem to work
-# correctly otherwise (timestamps are not updated)
- @rm -f $@
- autoheader
-
-configure: aclocal.m4 configure.in
- autoconf
diff --git a/TSRM/buildconf b/TSRM/buildconf
deleted file mode 100755
index fe8dee6f76..0000000000
--- a/TSRM/buildconf
+++ /dev/null
@@ -1,33 +0,0 @@
-#!/bin/sh
-
-case "$1" in
---copy)
- automake_flags=--copy
- shift
-;;
-esac
-
-libtoolize --force --automake $automake_flags
-
-mv aclocal.m4 aclocal.m4.old 2>/dev/null
-aclocal
-if cmp aclocal.m4.old aclocal.m4 > /dev/null 2>&1; then
- echo "buildconf: keeping ${1}aclocal.m4"
- mv aclocal.m4.old aclocal.m4
-else
- echo "buildconf: created or modified ${1}aclocal.m4"
-fi
-
-autoheader
-
-automake --add-missing --include-deps $automake_flags
-
-mv configure configure.old 2>/dev/null
-autoconf
-if cmp configure.old configure > /dev/null 2>&1; then
- echo "buildconf: keeping ${1}configure"
- mv configure.old configure
-else
- echo "buildconf: created or modified ${1}configure"
-fi
-
diff --git a/TSRM/config.w32 b/TSRM/config.w32
deleted file mode 100644
index 525f4390e5..0000000000
--- a/TSRM/config.w32
+++ /dev/null
@@ -1,10 +0,0 @@
-// vim:ft=javascript
-// $Id$
-
-if (CHECK_HEADER_ADD_INCLUDE("NewAPIs.h", "CFLAGS_PHP", php_usual_include_suspects)) {
- // Need to add the flag directly, since TSRM doesn't include the config
- // header
- ADD_FLAG("CFLAGS_PHP", "/DHAVE_NEWAPIS_H=1");
-}
-ADD_SOURCES("TSRM", "TSRM.c tsrm_strtok_r.c tsrm_virtual_cwd.c tsrm_win32.c");
-
diff --git a/TSRM/configure.in b/TSRM/configure.in
deleted file mode 100644
index acfdd00b35..0000000000
--- a/TSRM/configure.in
+++ /dev/null
@@ -1,31 +0,0 @@
-dnl $Id$
-dnl
-dnl Minimalistic configure.in for TSRM.
-dnl
-
-AC_INIT(TSRM.c)
-AM_INIT_AUTOMAKE(TSRM, 1.0, nodefine)
-AM_CONFIG_HEADER(tsrm_config.h)
-
-sinclude(tsrm.m4)
-
-TSRM_BASIC_CHECKS
-TSRM_THREADS_CHECKS
-
-AM_PROG_LIBTOOL
-if test "$enable_debug" != "yes"; then
- AM_SET_LIBTOOL_VARIABLE([--silent])
-fi
-
-dnl TSRM_PTHREAD
-
-AC_CHECK_HEADERS(
-utime.h \
-dirent.h \
-stdarg.h \
-alloca.h \
-unistd.h \
-limits.h
-)
-
-AC_OUTPUT(Makefile)
diff --git a/TSRM/readdir.h b/TSRM/readdir.h
deleted file mode 100644
index b0f1ad9e6f..0000000000
--- a/TSRM/readdir.h
+++ /dev/null
@@ -1,44 +0,0 @@
-#ifndef READDIR_H
-#define READDIR_H
-
-
-/*
- * Structures and types used to implement opendir/readdir/closedir
- * on Windows 95/NT.
- */
-
-#include <io.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <sys/types.h>
-
-
-/* struct dirent - same as Unix */
-
-struct dirent {
- long d_ino; /* inode (always 1 in WIN32) */
- off_t d_off; /* offset to this dirent */
- unsigned short d_reclen; /* length of d_name */
- char d_name[_MAX_FNAME + 1]; /* filename (null terminated) */
-};
-
-
-/* typedef DIR - not the same as Unix */
-typedef struct {
- long handle; /* _findfirst/_findnext handle */
- short offset; /* offset into directory */
- short finished; /* 1 if there are not more files */
- struct _finddata_t fileinfo; /* from _findfirst/_findnext */
- char *dir; /* the dir we are reading */
- struct dirent dent; /* the dirent to return */
-} DIR;
-
-/* Function prototypes */
-DIR *opendir(const char *);
-struct dirent *readdir(DIR *);
-int readdir_r(DIR *, struct dirent *, struct dirent **);
-int closedir(DIR *);
-void rewinddir(DIR *);
-
-
-#endif /* READDIR_H */
diff --git a/TSRM/threads.m4 b/TSRM/threads.m4
deleted file mode 100644
index 790579656e..0000000000
--- a/TSRM/threads.m4
+++ /dev/null
@@ -1,165 +0,0 @@
-dnl Copyright (c) 1999, 2000 Sascha Schumann. All rights reserved.
-dnl
-dnl Redistribution and use in source and binary forms, with or without
-dnl modification, are permitted provided that the following conditions
-dnl are met:
-dnl
-dnl 1. Redistributions of source code must retain the above copyright
-dnl notice, this list of conditions and the following disclaimer.
-dnl
-dnl 2. Redistributions in binary form must reproduce the above copyright
-dnl notice, this list of conditions and the following disclaimer in
-dnl the documentation and/or other materials provided with the
-dnl distribution.
-dnl
-dnl THIS SOFTWARE IS PROVIDED BY SASCHA SCHUMANN ``AS IS'' AND ANY
-dnl EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-dnl IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-dnl PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SASCHA SCHUMANN OR
-dnl HIS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-dnl SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
-dnl NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-dnl LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
-dnl HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
-dnl STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-dnl ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
-dnl OF THE POSSIBILITY OF SUCH DAMAGE.
-
-dnl
-dnl PTHREADS_FLAGS
-dnl
-dnl Set some magic defines to achieve POSIX threads conformance
-dnl
-AC_DEFUN(PTHREADS_FLAGS,[
- if test -z "$host_alias" && test -n "$host"; then
- host_alias=$host
- fi
- if test -z "$host_alias"; then
- AC_MSG_ERROR(host_alias is not set. Make sure to run config.guess)
- fi
- case $host_alias in
- *solaris*)
- PTHREAD_FLAGS="-D_POSIX_PTHREAD_SEMANTICS -D_REENTRANT";;
- *freebsd*)
- PTHREAD_FLAGS="-D_REENTRANT -D_THREAD_SAFE";;
- *linux*)
- PTHREAD_FLAGS=-D_REENTRANT;;
- *aix*)
- PTHREAD_FLAGS=-D_THREAD_SAFE;;
- *irix*)
- PTHREAD_FLAGS=-D_POSIX_THREAD_SAFE_FUNCTIONS;;
- *hpux*)
- PTHREAD_FLAGS=-D_REENTRANT;;
- *sco*)
- PTHREAD_FLAGS=-D_REENTRANT;;
-dnl Solves sigwait() problem, creates problems with u_long etc.
-dnl PTHREAD_FLAGS="-D_REENTRANT -D_XOPEN_SOURCE=500 -D_POSIX_C_SOURCE=199506 -D_XOPEN_SOURCE_EXTENDED=1";;
- esac
-
- if test -n "$PTHREAD_FLAGS"; then
- CPPFLAGS="$CPPFLAGS $PTHREAD_FLAGS"
- fi
-])dnl
-dnl
-dnl PTHREADS_CHECK_COMPILE
-dnl
-dnl Check whether the current setup can use POSIX threads calls
-dnl
-AC_DEFUN(PTHREADS_CHECK_COMPILE, [
-AC_TRY_RUN( [
-#include <pthread.h>
-#include <stddef.h>
-
-void *thread_routine(void *data) {
- return data;
-}
-
-int main() {
- pthread_t thd;
- pthread_mutexattr_t mattr;
- int data = 1;
- pthread_mutexattr_init(&mattr);
- return pthread_create(&thd, NULL, thread_routine, &data);
-} ], [
- pthreads_working=yes
- ], [
- pthreads_working=no
- ], pthreads_working=no ) ] )dnl
-dnl
-dnl PTHREADS_CHECK()
-dnl
-dnl Try to find a way to enable POSIX threads
-dnl
-dnl Magic flags
-dnl -kthread gcc (FreeBSD)
-dnl -Kthread UDK cc (UnixWare)
-dnl -mt WorkShop cc (Solaris)
-dnl -mthreads gcc (AIX)
-dnl -pthread gcc (Linux, FreeBSD, NetBSD, OpenBSD)
-dnl -pthreads gcc (Solaris)
-dnl -qthreaded AIX cc V5
-dnl -threads gcc (HP-UX)
-dnl
-AC_DEFUN(PTHREADS_CHECK,[
-
-if test "$beos_threads" = "1"; then
- pthreads_working="yes"
- ac_cv_pthreads_cflags=""
-else
- save_CFLAGS=$CFLAGS
- save_LIBS=$LIBS
- PTHREADS_ASSIGN_VARS
- PTHREADS_CHECK_COMPILE
- LIBS=$save_LIBS
- CFLAGS=$save_CFLAGS
-
- AC_CACHE_CHECK(for pthreads_cflags,ac_cv_pthreads_cflags,[
- ac_cv_pthreads_cflags=
- if test "$pthreads_working" != "yes"; then
- for flag in -kthread -pthread -pthreads -mthreads -Kthread -threads -mt -qthreaded; do
- ac_save=$CFLAGS
- CFLAGS="$CFLAGS $flag"
- PTHREADS_CHECK_COMPILE
- CFLAGS=$ac_save
- if test "$pthreads_working" = "yes"; then
- ac_cv_pthreads_cflags=$flag
- break
- fi
- done
- fi
-fi
-])
-
-AC_CACHE_CHECK(for pthreads_lib, ac_cv_pthreads_lib,[
-ac_cv_pthreads_lib=
-if test "$pthreads_working" != "yes"; then
- for lib in pthread pthreads c_r; do
- ac_save=$LIBS
- LIBS="$LIBS -l$lib"
- PTHREADS_CHECK_COMPILE
- LIBS=$ac_save
- if test "$pthreads_working" = "yes"; then
- ac_cv_pthreads_lib=$lib
- break
- fi
- done
-fi
-])
-
-if test "$pthreads_working" = "yes"; then
- threads_result="POSIX-Threads found"
-else
- threads_result="POSIX-Threads not found"
-fi
-])dnl
-dnl
-dnl
-AC_DEFUN(PTHREADS_ASSIGN_VARS,[
-if test -n "$ac_cv_pthreads_lib"; then
- LIBS="$LIBS -l$ac_cv_pthreads_lib"
-fi
-
-if test -n "$ac_cv_pthreads_cflags"; then
- CFLAGS="$CFLAGS $ac_cv_pthreads_cflags"
-fi
-])dnl
diff --git a/TSRM/tsrm.m4 b/TSRM/tsrm.m4
deleted file mode 100644
index 291b7f2e4e..0000000000
--- a/TSRM/tsrm.m4
+++ /dev/null
@@ -1,129 +0,0 @@
-
-dnl TSRM_CHECK_GCC_ARG(ARG, ACTION-IF-FOUND, ACTION-IF-NOT_FOUND)
-AC_DEFUN(TSRM_CHECK_GCC_ARG,[
- gcc_arg_name=[ac_cv_gcc_arg]translit($1,A-Z-,a-z_)
- AC_CACHE_CHECK([whether $CC supports $1], [ac_cv_gcc_arg]translit($1,A-Z-,a-z_), [
- echo 'void somefunc() { };' > conftest.c
- cmd='$CC $1 -c conftest.c'
- if eval $cmd 2>&1 | egrep -e $1 >/dev/null ; then
- ac_result=no
- else
- ac_result=yes
- fi
- eval $gcc_arg_name=$ac_result
- rm -f conftest.*
- ])
- if eval test "\$$gcc_arg_name" = "yes"; then
- $2
- else
- :
- $3
- fi
-])
-
-AC_DEFUN(TSRM_BASIC_CHECKS,[
-
-AC_REQUIRE([AC_PROG_CC])dnl
-dnl AC_REQUIRE([AM_PROG_CC_STDC])dnl
-AC_REQUIRE([AC_PROG_CC_C_O])dnl
-AC_REQUIRE([AC_PROG_RANLIB])dnl
-
-AC_CHECK_HEADERS(stdarg.h)
-
-])
-
-
-AC_DEFUN(TSRM_CHECK_PTH,[
-
-AC_MSG_CHECKING(for GNU Pth)
-PTH_PREFIX="`$1 --prefix`"
-if test -z "$PTH_PREFIX"; then
- AC_MSG_RESULT(Please check your Pth installation)
-fi
-
-CPPFLAGS="$CPPFLAGS `$1 --cflags`"
-LDFLAGS="$LDFLAGS `$1 --ldflags`"
-LIBS="$LIBS `$1 --libs`"
-
-AC_DEFINE(GNUPTH, 1, [Whether you use GNU Pth])
-AC_MSG_RESULT(yes - installed in $PTH_PREFIX)
-
-])
-
-AC_DEFUN(TSRM_CHECK_ST,[
- if test -r "$1/include/st.h"; then
- CPPFLAGS="$CPPFLAGS -I$1/include"
- LDFLAGS="$LDFLAGS -L$1/lib"
- elif test -r "$1/st.h"; then
- CPPFLAGS="$CPPFLAGS -I$1"
- LDFLAGS="$LDFLAGS -L$1"
- fi
- AC_CHECK_HEADERS(st.h,[],[
- AC_MSG_ERROR([Sorry[,] I was unable to locate the State Threads header file. Please specify the prefix using --with-tsrm-st=/prefix])
- ])
- LIBS="$LIBS -lst"
- AC_MSG_CHECKING(for SGI's State Threads)
- AC_MSG_RESULT(yes)
- AC_DEFINE(TSRM_ST, 1, [ ])
-])
-
-sinclude(threads.m4)
-sinclude(TSRM/threads.m4)
-
-AC_DEFUN(TSRM_CHECK_PTHREADS,[
-
-PTHREADS_CHECK
-
-if test "$beos_threads" = "1"; then
- AC_DEFINE(BETHREADS, 1, Whether to use native BeOS threads)
-else
- if test "$pthreads_working" != "yes"; then
- AC_MSG_ERROR(Your system seems to lack POSIX threads.)
- fi
-
- AC_DEFINE(PTHREADS, 1, Whether to use Pthreads)
-
- AC_MSG_CHECKING(for POSIX threads)
- AC_MSG_RESULT(yes)
-fi
-])
-
-
-AC_DEFUN(TSRM_THREADS_CHECKS,[
-
-dnl For the thread implementations, we always use --with-*
-dnl to maintain consistency
-
-AC_ARG_WITH(tsrm-pth,
-[ --with-tsrm-pth[=pth-config]
- Use GNU Pth.],[
- TSRM_PTH=$withval
-],[
- TSRM_PTH=no
-])
-
-AC_ARG_WITH(tsrm-st,
-[ --with-tsrm-st Use SGI's State Threads],[
- TSRM_ST=$withval
-],[
- TSRM_ST=no
-])
-
-AC_ARG_WITH(tsrm-pthreads,
-[ --with-tsrm-pthreads Use POSIX threads (default)],[
- TSRM_PTHREADS=$withval
-],[
- TSRM_PTHREADS=yes
-])
-
-test "$TSRM_PTH" = "yes" && TSRM_PTH=pth-config
-
-if test "$TSRM_PTH" != "no"; then
- TSRM_CHECK_PTH($TSRM_PTH)
-elif test "$TSRM_ST" != "no"; then
- TSRM_CHECK_ST($TSRM_ST)
-elif test "$TSRM_PTHREADS" != "no"; then
- TSRM_CHECK_PTHREADS
-fi
-
-])
diff --git a/TSRM/tsrm_config.nw.h b/TSRM/tsrm_config.nw.h
deleted file mode 100644
index 14fcc19ab2..0000000000
--- a/TSRM/tsrm_config.nw.h
+++ /dev/null
@@ -1,11 +0,0 @@
-#ifndef TSRM_CONFIG_NW_H
-#define TSRM_CONFIG_NW_H
-
-#define HAVE_UTIME 1
-
-/* Though we have alloca(), this seems to be causing some problem
- * with the stack pointer. Hence not using it
- */
-/*#define HAVE_ALLOCA 1*/
-
-#endif
diff --git a/TSRM/tsrm_config.w32.h b/TSRM/tsrm_config.w32.h
deleted file mode 100644
index 28a4e4242e..0000000000
--- a/TSRM/tsrm_config.w32.h
+++ /dev/null
@@ -1,20 +0,0 @@
-#ifndef TSRM_CONFIG_W32_H
-#define TSRM_CONFIG_W32_H
-
-#define HAVE_UTIME 1
-#define HAVE_ALLOCA 1
-#define HAVE_REALPATH 1
-
-#include <malloc.h>
-#include <stdlib.h>
-#include <crtdbg.h>
-
-#undef inline
-#ifdef ZEND_WIN32_FORCE_INLINE
-# define inline __forceinline
-#else
-# define inline
-#endif
-
-
-#endif
diff --git a/TSRM/tsrm_config_common.h b/TSRM/tsrm_config_common.h
deleted file mode 100644
index 9930a51a69..0000000000
--- a/TSRM/tsrm_config_common.h
+++ /dev/null
@@ -1,60 +0,0 @@
-#ifndef TSRM_CONFIG_COMMON_H
-#define TSRM_CONFIG_COMMON_H
-
-#if WINNT|WIN32
-# define TSRM_WIN32
-#endif
-
-#ifdef TSRM_WIN32
-# include "tsrm_config.w32.h"
-#elif defined(NETWARE)
-# include "tsrm_config.nw.h"
-#else
-# include "tsrm_config.h"
-# include <sys/param.h>
-#endif
-
-#if HAVE_ALLOCA_H && !defined(_ALLOCA_H)
-# include <alloca.h>
-#endif
-
-/* AIX requires this to be the first thing in the file. */
-#ifndef __GNUC__
-# ifndef HAVE_ALLOCA_H
-# ifdef _AIX
-#pragma alloca
-# else
-# ifndef alloca /* predefined by HP cc +Olibcalls */
-# ifndef NETWARE
-char *alloca ();
-# endif
-# endif
-# endif
-# endif
-#endif
-
-#if HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-
-#if HAVE_LIMITS_H
-#include <limits.h>
-#endif
-
-#ifndef MAXPATHLEN
-# ifdef PATH_MAX
-# define MAXPATHLEN PATH_MAX
-# else
-# define MAXPATHLEN 256
-# endif
-#endif
-
-#if (HAVE_ALLOCA || (defined (__GNUC__) && __GNUC__ >= 2))
-# define tsrm_do_alloca(p) alloca(p)
-# define tsrm_free_alloca(p)
-#else
-# define tsrm_do_alloca(p) malloc(p)
-# define tsrm_free_alloca(p) free(p)
-#endif
-
-#endif /* TSRM_CONFIG_COMMON_H */
diff --git a/TSRM/tsrm_nw.c b/TSRM/tsrm_nw.c
deleted file mode 100644
index 442e096b23..0000000000
--- a/TSRM/tsrm_nw.c
+++ /dev/null
@@ -1,240 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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. |
- +----------------------------------------------------------------------+
- | Authors: Venkat Raghavan S <rvenkat@novell.com> |
- | Anantha Kesari H Y <hyanantha@novell.com> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <fcntl.h>
-
-#include "TSRM.h"
-
-#ifdef NETWARE
-
-#ifdef USE_MKFIFO
-#include <sys/stat.h>
-#elif !defined(USE_PIPE_OPEN) /* NXFifoOpen */
-#include <nks/fsio.h>
-#endif
-
-#include <nks/vm.h>
-#include <nks/memory.h>
-
-#include <string.h>
-
-#include "mktemp.h"
-
-/* strtok() call in LibC is abending when used in a different address space
- * -- hence using PHP's version itself for now
- */
-#include "tsrm_strtok_r.h"
-#define tsrm_strtok_r(a,b,c) strtok((a),(b))
-
-#define WHITESPACE " \t"
-#define MAX_ARGS 10
-
-
-TSRM_API FILE* popen(const char *commandline, const char *type)
-{
- char *command = NULL, *argv[MAX_ARGS] = {'\0'}, **env = NULL;
- char *tempName = "sys:/php/temp/phpXXXXXX.tmp";
- char *filePath = NULL;
- char *ptr = NULL;
- int ptrLen = 0, argc = 0, i = 0, envCount = 0, err = 0;
- FILE *stream = NULL;
-#if defined(USE_PIPE_OPEN) || defined(USE_MKFIFO)
- int pipe_handle;
- int mode = O_RDONLY;
-#else
- NXHandle_t pipe_handle;
- NXMode_t mode = NX_O_RDONLY;
-#endif
- NXExecEnvSpec_t envSpec;
- NXNameSpec_t nameSpec;
- NXVmId_t newVM = 0;
-
- /* Check for validity of input parameters */
- if (!commandline || !type)
- return NULL;
-
- /* Get temporary file name */
- filePath = mktemp(tempName);
- if (!filePath)
- return NULL;
-
- /* Set pipe mode according to type -- for now allow only "r" or "w" */
- if (strcmp(type, "r") == 0)
-#if defined(USE_PIPE_OPEN) || defined(USE_MKFIFO)
- mode = O_RDONLY;
-#else
- mode = NX_O_RDONLY;
-#endif
- else if (strcmp(type, "w") == 0)
-#if defined(USE_PIPE_OPEN) || defined(USE_MKFIFO)
- mode = O_WRONLY;
-#else
- mode = NX_O_WRONLY;
-#endif
- else
- return NULL;
-
-#ifdef USE_PIPE_OPEN
- pipe_handle = pipe_open(filePath, mode);
- if (pipe_handle == -1)
- return NULL;
-#elif defined(USE_MKFIFO)
- pipe_handle = mkfifo(filePath, mode);
- if (pipe_handle == -1)
- return NULL;
-#else
- /* - NetWare doesn't require first parameter
- * - Allowing LibC to choose the buffer size for now
- */
- err = NXFifoOpen(0, filePath, mode, 0, &pipe_handle);
- if (err)
- return NULL;
-#endif
-
- /* Copy the environment variables in preparation for the spawn call */
- envCount = NXGetEnvCount() + 1; /* add one for NULL */
- env = (char **) NXMemAlloc(sizeof(char *) * envCount, 0);
- if (!env)
- return NULL;
-
- err = NXCopyEnv(env, envCount);
- if (err) {
- NXMemFree (env);
- return NULL;
- }
-
- /* Separate commandline string into words */
- ptr = tsrm_strtok_r((char*)commandline, WHITESPACE, NULL);
- ptrLen = strlen(ptr);
-
- command = (char*)malloc(ptrLen + 1);
- if (!command) {
- NXMemFree (env);
- return NULL;
- }
-
- strcpy (command, ptr);
-
- ptr = tsrm_strtok_r(NULL, WHITESPACE, NULL);
- while (ptr && (argc < MAX_ARGS)) {
- ptrLen = strlen(ptr);
-
- argv[argc] = (char*)malloc(ptrLen + 1);
- if (!argv[argc]) {
- NXMemFree (env);
- if (command)
- free (command);
-
- for (i = 0; i < argc; i++) {
- if (argv[i])
- free (argv[i]);
- }
-
- return NULL;
- }
-
- strcpy (argv[argc], ptr);
- argc++;
- ptr = tsrm_strtok_r(NULL, WHITESPACE, NULL);
- }
-
- /* Setup the execution environment and spawn new process */
- envSpec.esFlags = 0; /* Not used */
- envSpec.esArgc = argc;
- envSpec.esArgv = (void **) argv;
- envSpec.esEnv = (void **) env;
-
-/* envSpec.esStdin.ssType = */
- envSpec.esStdout.ssType = NX_OBJ_FIFO;
- envSpec.esStderr.ssType = NX_OBJ_FILE;
-
- /* 'ssHandle' is not a struct/union/class member */
-/*
- envSpec.esStdin.ssHandle =
- envSpec.esStdout.ssHandle =
- envSpec.esStderr.ssHandle = -1;
-*/
- envSpec.esStdin.ssPathCtx = NULL;
- envSpec.esStdout.ssPathCtx = NULL;
- envSpec.esStderr.ssPathCtx = NULL;
-
-#if defined(USE_PIPE_OPEN) || defined(USE_MKFIFO)
- if (mode == O_RDONLY) {
-#else
- if (mode == NX_O_RDONLY) {
-#endif
- envSpec.esStdin.ssPath = filePath;
- envSpec.esStdout.ssPath = stdout;
- } else { /* Write Only */
- envSpec.esStdin.ssPath = stdin;
- envSpec.esStdout.ssPath = filePath;
- }
-
- envSpec.esStderr.ssPath = stdout;
-
- nameSpec.ssType = NX_OBJ_FIFO;
-/* nameSpec.ssHandle = 0; */ /* 'ssHandle' is not a struct/union/class member */
- nameSpec.ssPathCtx = NULL; /* Not used */
- nameSpec.ssPath = argv[0];
- err = NXVmSpawn(&nameSpec, &envSpec, 0, &newVM);
- if (!err)
- /* Get file pointer corresponding to the pipe (file) opened */
- stream = fdopen(pipe_handle, type);
-
- /* Clean-up */
- if (env)
- NXMemFree (env);
-
- if (pipe_handle)
-#if defined(USE_PIPE_OPEN) || defined(USE_MKFIFO)
- close(pipe_handle);
-#else
- NXClose(pipe_handle);
-#endif
-
- if (command)
- free (command);
-
- for (i = 0; i < argc; i++) {
- if (argv[i])
- free (argv[i]);
- }
-
- return stream;
-}
-
-TSRM_API int pclose(FILE* stream)
-{
- int err = 0;
- NXHandle_t fd = 0;
-
- /* Get the process associated with this pipe (file) handle and terminate it */
- fd = fileno(stream);
- NXClose (fd);
-
- err = fclose(stream);
-
- return err;
-}
-
-#endif /* NETWARE */
diff --git a/TSRM/tsrm_nw.h b/TSRM/tsrm_nw.h
deleted file mode 100644
index 24188d56a7..0000000000
--- a/TSRM/tsrm_nw.h
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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. |
- +----------------------------------------------------------------------+
- | Authors: Venkat Raghavan S <rvenkat@novell.com> |
- | Anantha Kesari H Y <hyanantha@novell.com> |
- +----------------------------------------------------------------------+
-*/
-
-
-#ifndef TSRM_NW_H
-#define TSRM_NW_H
-
-#include "TSRM.h"
-
-TSRM_API FILE* popen(const char *command, const char *type);
-TSRM_API int pclose(FILE* stream);
-
-#endif
diff --git a/TSRM/tsrm_strtok_r.c b/TSRM/tsrm_strtok_r.c
deleted file mode 100644
index e9ad26a7ac..0000000000
--- a/TSRM/tsrm_strtok_r.c
+++ /dev/null
@@ -1,63 +0,0 @@
-#include <stdio.h>
-
-#include "tsrm_config_common.h"
-#include "tsrm_strtok_r.h"
-
-static inline int in_character_class(char ch, const char *delim)
-{
- while (*delim) {
- if (*delim == ch) {
- return 1;
- }
- delim++;
- }
- return 0;
-}
-
-char *tsrm_strtok_r(char *s, const char *delim, char **last)
-{
- char *token;
-
- if (s == NULL) {
- s = *last;
- }
-
- while (*s && in_character_class(*s, delim)) {
- s++;
- }
- if (!*s) {
- return NULL;
- }
-
- token = s;
-
- while (*s && !in_character_class(*s, delim)) {
- s++;
- }
- if (!*s) {
- *last = s;
- } else {
- *s = '\0';
- *last = s + 1;
- }
- return token;
-}
-
-#if 0
-
-main()
-{
- char foo[] = "/foo/bar//\\barbara";
- char *last;
- char *token;
-
- token = tsrm_strtok_r(foo, "/\\", &last);
- while (token) {
- printf ("Token = '%s'\n", token);
- token = tsrm_strtok_r(NULL, "/\\", &last);
- }
-
- return 0;
-}
-
-#endif
diff --git a/TSRM/tsrm_strtok_r.h b/TSRM/tsrm_strtok_r.h
deleted file mode 100644
index 8c9e8198e7..0000000000
--- a/TSRM/tsrm_strtok_r.h
+++ /dev/null
@@ -1,6 +0,0 @@
-#ifndef TSRM_STRTOK_R
-#define TSRM_STRTOK_R
-
-char *tsrm_strtok_r(char *s, const char *delim, char **last);
-
-#endif
diff --git a/TSRM/tsrm_virtual_cwd.c b/TSRM/tsrm_virtual_cwd.c
deleted file mode 100644
index d0c741faae..0000000000
--- a/TSRM/tsrm_virtual_cwd.c
+++ /dev/null
@@ -1,893 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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. |
- +----------------------------------------------------------------------+
- | Authors: Andi Gutmans <andi@zend.com> |
- | Sascha Schumann <sascha@schumann.cx> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <string.h>
-#include <stdio.h>
-#include <limits.h>
-#include <errno.h>
-#include <stdlib.h>
-#include <fcntl.h>
-
-#include "tsrm_virtual_cwd.h"
-#include "tsrm_strtok_r.h"
-
-#ifdef TSRM_WIN32
-#include <io.h>
-#include "tsrm_win32.h"
-# if HAVE_NEWAPIS_H
-# define WANT_GETLONGPATHNAME_WRAPPER
-# define COMPILE_NEWAPIS_STUBS
-# include <NewAPIs.h>
-# endif
-#endif
-
-#ifdef NETWARE
-/*#include "pipe.h"*/
-#include "tsrm_nw.h"
-#endif
-
-#ifndef HAVE_REALPATH
-#define realpath(x,y) strcpy(y,x)
-#endif
-
-#define VIRTUAL_CWD_DEBUG 0
-
-#include "TSRM.h"
-
-/* Only need mutex for popen() in Windows and NetWare because it doesn't chdir() on UNIX */
-#if (defined(TSRM_WIN32) || defined(NETWARE)) && defined(ZTS)
-MUTEX_T cwd_mutex;
-#endif
-
-#ifdef ZTS
-static ts_rsrc_id cwd_globals_id;
-#else
-static virtual_cwd_globals cwd_globals;
-#endif
-
-cwd_state main_cwd_state; /* True global */
-
-#ifndef TSRM_WIN32
-#include <unistd.h>
-#else
-#include <direct.h>
-#endif
-
-#ifndef S_ISDIR
-#define S_ISDIR(mode) ((mode) & _S_IFDIR)
-#endif
-
-#ifndef S_ISREG
-#define S_ISREG(mode) ((mode) & _S_IFREG)
-#endif
-
-#ifdef TSRM_WIN32
-#include <tchar.h>
-#define tsrm_strtok_r(a,b,c) _tcstok((a),(b))
-#define TOKENIZER_STRING "/\\"
-
-static int php_check_dots(const char *element, int n)
-{
- while (n-- > 0) if (element[n] != '.') break;
-
- return (n != -1);
-}
-
-#define IS_DIRECTORY_UP(element, len) \
- (len >= 2 && !php_check_dots(element, len))
-
-#define IS_DIRECTORY_CURRENT(element, len) \
- (len == 1 && element[0] == '.')
-
-#elif defined(NETWARE)
-/* NetWare has strtok() (in LibC) and allows both slashes in paths, like Windows --
- but rest of the stuff is like Unix */
-/* strtok() call in LibC is abending when used in a different address space -- hence using
- PHP's version itself for now */
-/*#define tsrm_strtok_r(a,b,c) strtok((a),(b))*/
-#define TOKENIZER_STRING "/\\"
-
-#else
-#define TOKENIZER_STRING "/"
-#endif
-
-
-/* default macros */
-
-#ifndef IS_DIRECTORY_UP
-#define IS_DIRECTORY_UP(element, len) \
- (len == 2 && element[0] == '.' && element[1] == '.')
-#endif
-
-#ifndef IS_DIRECTORY_CURRENT
-#define IS_DIRECTORY_CURRENT(element, len) \
- (len == 1 && element[0] == '.')
-#endif
-
-/* define this to check semantics */
-#define IS_DIR_OK(s) (1)
-
-#ifndef IS_DIR_OK
-#define IS_DIR_OK(state) (php_is_dir_ok(state) == 0)
-#endif
-
-
-#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);
-
-#define CWD_STATE_FREE(s) \
- free((s)->cwd);
-
-static int php_is_dir_ok(const cwd_state *state)
-{
-#if !(defined(NETWARE) && defined(CLIB_STAT_PATCH))
- struct stat buf;
-
- if (stat(state->cwd, &buf) == 0 && S_ISDIR(buf.st_mode))
-#else
- struct stat_libc buf;
-
- if (stat(state->cwd, (struct stat*)(&buf)) == 0 && S_ISDIR(buf.st_mode))
-#endif
- return (0);
-
- return (1);
-}
-
-static int php_is_file_ok(const cwd_state *state)
-{
-#if !(defined(NETWARE) && defined(CLIB_STAT_PATCH))
- struct stat buf;
-
- if (stat(state->cwd, &buf) == 0 && S_ISREG(buf.st_mode))
-#else
- struct stat_libc buf;
-
- if (stat(state->cwd, (struct stat*)(&buf)) == 0 && S_ISREG(buf.st_mode))
-#endif
- return (0);
-
- return (1);
-}
-
-static void cwd_globals_ctor(virtual_cwd_globals *cwd_globals TSRMLS_DC)
-{
- CWD_STATE_COPY(&cwd_globals->cwd, &main_cwd_state);
-}
-
-static void cwd_globals_dtor(virtual_cwd_globals *cwd_globals TSRMLS_DC)
-{
- CWD_STATE_FREE(&cwd_globals->cwd);
-}
-
-static char *tsrm_strndup(const char *s, size_t length)
-{
- char *p;
-
- p = (char *) malloc(length+1);
- if (!p) {
- return (char *)NULL;
- }
- if (length) {
- memcpy(p,s,length);
- }
- p[length]=0;
- return p;
-}
-
-CWD_API void virtual_cwd_startup(void)
-{
- char cwd[MAXPATHLEN];
- char *result;
-
- result = getcwd(cwd, sizeof(cwd));
- if (!result) {
- cwd[0] = '\0';
- }
- main_cwd_state.cwd = strdup(cwd);
- main_cwd_state.cwd_length = strlen(cwd);
-
-#ifdef ZTS
- ts_allocate_id(&cwd_globals_id, sizeof(virtual_cwd_globals), (ts_allocate_ctor) cwd_globals_ctor, (ts_allocate_dtor) cwd_globals_dtor);
-#else
- cwd_globals_ctor(&cwd_globals TSRMLS_CC);
-#endif
-
-#if (defined(TSRM_WIN32) || defined(NETWARE)) && defined(ZTS)
- cwd_mutex = tsrm_mutex_alloc();
-#endif
-}
-
-CWD_API void virtual_cwd_shutdown(void)
-{
-#ifndef ZTS
- cwd_globals_dtor(&cwd_globals TSRMLS_CC);
-#endif
-#if (defined(TSRM_WIN32) || defined(NETWARE)) && defined(ZTS)
- tsrm_mutex_free(cwd_mutex);
-#endif
-
- free(main_cwd_state.cwd); /* Don't use CWD_STATE_FREE because the non global states will probably use emalloc()/efree() */
-}
-
-CWD_API char *virtual_getcwd_ex(size_t *length TSRMLS_DC)
-{
- cwd_state *state;
-
- state = &CWDG(cwd);
-
- if (state->cwd_length == 0) {
- char *retval;
-
- *length = 1;
- retval = (char *) malloc(2);
- retval[0] = DEFAULT_SLASH;
- retval[1] = '\0';
- return retval;
- }
-
-#ifdef TSRM_WIN32
- /* If we have something like C: */
- if (state->cwd_length == 2 && state->cwd[state->cwd_length-1] == ':') {
- char *retval;
-
- *length = state->cwd_length+1;
- retval = (char *) malloc(*length+1);
- memcpy(retval, state->cwd, *length);
- retval[*length-1] = DEFAULT_SLASH;
- retval[*length] = '\0';
- return retval;
- }
-#endif
- *length = state->cwd_length;
- return strdup(state->cwd);
-}
-
-
-/* Same semantics as UNIX getcwd() */
-CWD_API char *virtual_getcwd(char *buf, size_t size TSRMLS_DC)
-{
- size_t length;
- char *cwd;
-
- cwd = virtual_getcwd_ex(&length TSRMLS_CC);
-
- if (buf == NULL) {
- return cwd;
- }
- if (length > size-1) {
- free(cwd);
- errno = ERANGE; /* Is this OK? */
- return NULL;
- }
- memcpy(buf, cwd, length+1);
- free(cwd);
- return buf;
-}
-
-/* Resolve path relatively to state and put the real path into state */
-/* returns 0 for ok, 1 for error */
-CWD_API int virtual_file_ex(cwd_state *state, const char *path, verify_path_func verify_path, int use_realpath)
-{
- int path_length = strlen(path);
- char *ptr, *path_copy;
- char *tok = NULL;
- int ptr_length;
- cwd_state *old_state;
- int ret = 0;
- int copy_amount = -1;
- char *free_path;
- unsigned char is_absolute = 0;
-#ifndef TSRM_WIN32
- char resolved_path[MAXPATHLEN];
-#else
- char *new_path;
-#endif
-
- if (path_length == 0)
- return (0);
-
-#if !defined(TSRM_WIN32) && !defined(NETWARE)
- /* 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) || (state->cwd_length < 1)) {
- if (use_realpath && realpath(path, resolved_path)) {
- path = resolved_path;
- path_length = strlen(path);
- }
- } else { /* Concat current directory with relative path and then run realpath() on it */
- char *tmp;
- char *ptr;
-
- ptr = tmp = (char *) malloc(state->cwd_length+path_length+sizeof("/"));
- if (!tmp) {
- return 1;
- }
- memcpy(ptr, state->cwd, state->cwd_length);
- ptr += state->cwd_length;
- *ptr++ = DEFAULT_SLASH;
- memcpy(ptr, path, path_length);
- ptr += path_length;
- *ptr = '\0';
- if (use_realpath && realpath(tmp, resolved_path)) {
- path = resolved_path;
- path_length = strlen(path);
- }
- free(tmp);
- }
-#endif
-#if defined(TSRM_WIN32)
- {
- char *dummy = NULL;
- int new_path_length;
-
- new_path_length = GetLongPathName(path, dummy, 0) + 1;
- if (new_path_length == 0) {
- return 1;
- }
- new_path = (char *) malloc(new_path_length);
- if (!new_path) {
- return 1;
- }
-
- if (GetLongPathName(path, new_path, new_path_length) != 0) {
- path = new_path;
- path_length = new_path_length;
- } else {
- free(new_path);
- new_path = NULL;
- }
- }
-#endif
- free_path = path_copy = tsrm_strndup(path, path_length);
-
- old_state = (cwd_state *) malloc(sizeof(cwd_state));
- CWD_STATE_COPY(old_state, state);
-#if VIRTUAL_CWD_DEBUG
- fprintf(stderr,"cwd = %s path = %s\n", state->cwd, path);
-#endif
- if (IS_ABSOLUTE_PATH(path_copy, path_length)) {
- copy_amount = COPY_WHEN_ABSOLUTE(path_copy);
- is_absolute = 1;
-#ifdef TSRM_WIN32
- } else if (IS_SLASH(path_copy[0])) {
- copy_amount = 2;
-#endif
- }
-
- if (copy_amount != -1) {
- state->cwd = (char *) realloc(state->cwd, copy_amount + 1);
- if (copy_amount) {
- if (is_absolute) {
- memcpy(state->cwd, path_copy, copy_amount);
- path_copy += copy_amount;
- } else {
- memcpy(state->cwd, old_state->cwd, copy_amount);
- }
- }
- state->cwd[copy_amount] = '\0';
- state->cwd_length = copy_amount;
- }
-
-
- if (state->cwd_length > 0 || IS_ABSOLUTE_PATH(path, path_length)) {
- ptr = tsrm_strtok_r(path_copy, TOKENIZER_STRING, &tok);
- while (ptr) {
- ptr_length = strlen(ptr);
-
- if (IS_DIRECTORY_UP(ptr, ptr_length)) {
- char save;
-
- save = DEFAULT_SLASH;
-
-#define PREVIOUS state->cwd[state->cwd_length - 1]
-
- while (IS_ABSOLUTE_PATH(state->cwd, state->cwd_length) &&
- !IS_SLASH(PREVIOUS)) {
- save = PREVIOUS;
- PREVIOUS = '\0';
- state->cwd_length--;
- }
-
- if (!IS_ABSOLUTE_PATH(state->cwd, state->cwd_length)) {
- state->cwd[state->cwd_length++] = save;
- state->cwd[state->cwd_length] = '\0';
- } else {
- PREVIOUS = '\0';
- state->cwd_length--;
- }
- } else if (!IS_DIRECTORY_CURRENT(ptr, ptr_length)) {
- state->cwd = (char *) realloc(state->cwd, state->cwd_length+ptr_length+1+1);
-#ifdef TSRM_WIN32
- /* Windows 9x will consider C:\\Foo as a network path. Avoid it. */
- if ((state->cwd[state->cwd_length-1]!='\\' && state->cwd[state->cwd_length-1]!='/') ||
- IsDBCSLeadByte(state->cwd[state->cwd_length-2])) {
- state->cwd[state->cwd_length++] = DEFAULT_SLASH;
- }
-#elif defined(NETWARE)
- /* If the token is a volume name, it will have colon at the end -- so, no slash before it */
- if (ptr[ptr_length-1] != ':') {
- state->cwd[state->cwd_length++] = DEFAULT_SLASH;
- }
-#else
- state->cwd[state->cwd_length++] = DEFAULT_SLASH;
-#endif
- memcpy(&state->cwd[state->cwd_length], ptr, ptr_length+1);
- state->cwd_length += ptr_length;
- }
- ptr = tsrm_strtok_r(NULL, TOKENIZER_STRING, &tok);
- }
-
- if (state->cwd_length == COPY_WHEN_ABSOLUTE(state->cwd)) {
- state->cwd = (char *) realloc(state->cwd, state->cwd_length+1+1);
- state->cwd[state->cwd_length] = DEFAULT_SLASH;
- state->cwd[state->cwd_length+1] = '\0';
- state->cwd_length++;
- }
- } else {
- state->cwd = (char *) realloc(state->cwd, path_length+1);
- memcpy(state->cwd, path, path_length+1);
- state->cwd_length = path_length;
- }
-
- if (verify_path && verify_path(state)) {
- CWD_STATE_FREE(state);
-
- *state = *old_state;
-
- ret = 1;
- } else {
- CWD_STATE_FREE(old_state);
- ret = 0;
- }
-
- free(old_state);
-#ifdef TSRM_WIN32
- if (new_path) {
- free(new_path);
- }
-#endif
- free(free_path);
-#if VIRTUAL_CWD_DEBUG
- fprintf (stderr, "virtual_file_ex() = %s\n",state->cwd);
-#endif
- return (ret);
-}
-
-CWD_API int virtual_chdir(const char *path TSRMLS_DC)
-{
- return virtual_file_ex(&CWDG(cwd), path, php_is_dir_ok, 1)?-1:0;
-}
-
-CWD_API int virtual_chdir_file(const char *path, int (*p_chdir)(const char *path TSRMLS_DC) TSRMLS_DC)
-{
- int length = strlen(path);
- char *temp;
- int retval;
-
- if (length == 0) {
- return 1; /* Can't cd to empty string */
- }
- while(--length >= 0 && !IS_SLASH(path[length])) {
- }
-
- if (length == -1) {
- /* No directory only file name */
- errno = ENOENT;
- return -1;
- }
-
- if (length == COPY_WHEN_ABSOLUTE(path) && IS_ABSOLUTE_PATH(path, length+1)) { /* Also use trailing slash if this is absolute */
- length++;
- }
- temp = (char *) tsrm_do_alloca(length+1);
- memcpy(temp, path, length);
- temp[length] = 0;
-#if VIRTUAL_CWD_DEBUG
- fprintf (stderr, "Changing directory to %s\n", temp);
-#endif
- retval = p_chdir(temp TSRMLS_CC);
- tsrm_free_alloca(temp);
- return retval;
-}
-
-CWD_API char *virtual_realpath(const char *path, char *real_path TSRMLS_DC)
-{
- cwd_state new_state;
- char *retval;
-
- CWD_STATE_COPY(&new_state, &CWDG(cwd));
-
- if (virtual_file_ex(&new_state, path, NULL, 1)==0) {
- int len = new_state.cwd_length>MAXPATHLEN-1?MAXPATHLEN-1:new_state.cwd_length;
-
- memcpy(real_path, new_state.cwd, len);
- real_path[len] = '\0';
- retval = real_path;
- } else {
- retval = NULL;
- }
-
- CWD_STATE_FREE(&new_state);
-
- return retval;
-}
-
-CWD_API int virtual_filepath_ex(const char *path, char **filepath, verify_path_func verify_path TSRMLS_DC)
-{
- cwd_state new_state;
- int retval;
-
- CWD_STATE_COPY(&new_state, &CWDG(cwd));
- retval = virtual_file_ex(&new_state, path, verify_path, 1);
-
- *filepath = new_state.cwd;
-
- return retval;
-
-}
-
-CWD_API int virtual_filepath(const char *path, char **filepath TSRMLS_DC)
-{
- return virtual_filepath_ex(path, filepath, php_is_file_ok TSRMLS_CC);
-}
-
-CWD_API FILE *virtual_fopen(const char *path, const char *mode TSRMLS_DC)
-{
- cwd_state new_state;
- FILE *f;
-
- if (path[0] == '\0') { /* Fail to open empty path */
- return NULL;
- }
-
- CWD_STATE_COPY(&new_state, &CWDG(cwd));
- virtual_file_ex(&new_state, path, NULL, 1);
-
- f = fopen(new_state.cwd, mode);
-
- CWD_STATE_FREE(&new_state);
- return f;
-}
-
-CWD_API int virtual_access(const char *pathname, int mode TSRMLS_DC)
-{
- cwd_state new_state;
- int ret;
-
- CWD_STATE_COPY(&new_state, &CWDG(cwd));
- virtual_file_ex(&new_state, pathname, NULL, 1);
-
-#if defined(TSRM_WIN32)
- ret = tsrm_win32_access(new_state.cwd, mode);
-#else
- ret = access(new_state.cwd, mode);
-#endif
-
- CWD_STATE_FREE(&new_state);
-
- return ret;
-}
-
-
-#if HAVE_UTIME
-CWD_API int virtual_utime(const char *filename, struct utimbuf *buf TSRMLS_DC)
-{
- cwd_state new_state;
- int ret;
-
- CWD_STATE_COPY(&new_state, &CWDG(cwd));
- virtual_file_ex(&new_state, filename, NULL, 0);
-
- ret = utime(new_state.cwd, buf);
-
- CWD_STATE_FREE(&new_state);
- return ret;
-}
-#endif
-
-CWD_API int virtual_chmod(const char *filename, mode_t mode TSRMLS_DC)
-{
- cwd_state new_state;
- int ret;
-
- CWD_STATE_COPY(&new_state, &CWDG(cwd));
- virtual_file_ex(&new_state, filename, NULL, 1);
-
- ret = chmod(new_state.cwd, mode);
-
- CWD_STATE_FREE(&new_state);
- return ret;
-}
-
-#if !defined(TSRM_WIN32) && !defined(NETWARE)
-CWD_API int virtual_chown(const char *filename, uid_t owner, gid_t group TSRMLS_DC)
-{
- cwd_state new_state;
- int ret;
-
- CWD_STATE_COPY(&new_state, &CWDG(cwd));
- virtual_file_ex(&new_state, filename, NULL, 0);
-
- ret = chown(new_state.cwd, owner, group);
-
- CWD_STATE_FREE(&new_state);
- return ret;
-}
-#endif
-
-CWD_API int virtual_open(const char *path TSRMLS_DC, int flags, ...)
-{
- cwd_state new_state;
- int f;
-
- CWD_STATE_COPY(&new_state, &CWDG(cwd));
- virtual_file_ex(&new_state, path, NULL, 1);
-
- if (flags & O_CREAT) {
- mode_t mode;
- va_list arg;
-
- va_start(arg, flags);
- mode = (mode_t) va_arg(arg, int);
- va_end(arg);
-
- f = open(new_state.cwd, flags, mode);
- } else {
- f = open(new_state.cwd, flags);
- }
- CWD_STATE_FREE(&new_state);
- return f;
-}
-
-CWD_API int virtual_creat(const char *path, mode_t mode TSRMLS_DC)
-{
- cwd_state new_state;
- int f;
-
- CWD_STATE_COPY(&new_state, &CWDG(cwd));
- virtual_file_ex(&new_state, path, NULL, 1);
-
- f = creat(new_state.cwd, mode);
-
- CWD_STATE_FREE(&new_state);
- return f;
-}
-
-CWD_API int virtual_rename(char *oldname, char *newname TSRMLS_DC)
-{
- cwd_state old_state;
- cwd_state new_state;
- int retval;
-
- CWD_STATE_COPY(&old_state, &CWDG(cwd));
- virtual_file_ex(&old_state, oldname, NULL, 0);
- oldname = old_state.cwd;
-
- CWD_STATE_COPY(&new_state, &CWDG(cwd));
- virtual_file_ex(&new_state, newname, NULL, 0);
- newname = new_state.cwd;
-
- retval = rename(oldname, newname);
-
- CWD_STATE_FREE(&old_state);
- CWD_STATE_FREE(&new_state);
-
- return retval;
-}
-
-#if !(defined(NETWARE) && defined(CLIB_STAT_PATCH))
-CWD_API int virtual_stat(const char *path, struct stat *buf TSRMLS_DC)
-{
- cwd_state new_state;
- int retval;
-
- CWD_STATE_COPY(&new_state, &CWDG(cwd));
- virtual_file_ex(&new_state, path, NULL, 1);
-
- retval = stat(new_state.cwd, buf);
-
- CWD_STATE_FREE(&new_state);
- return retval;
-}
-#else
-CWD_API int virtual_stat(const char *path, struct stat_libc *buf TSRMLS_DC)
-{
- cwd_state new_state;
- int retval;
-
- CWD_STATE_COPY(&new_state, &CWDG(cwd));
- virtual_file_ex(&new_state, path, NULL, 1);
-
- retval = stat(new_state.cwd, (struct stat*)buf);
-
- CWD_STATE_FREE(&new_state);
- return retval;
-}
-#endif
-
-#if !defined(TSRM_WIN32) && !defined(NETWARE)
-CWD_API int virtual_lstat(const char *path, struct stat *buf TSRMLS_DC)
-{
- cwd_state new_state;
- int retval;
-
- CWD_STATE_COPY(&new_state, &CWDG(cwd));
- virtual_file_ex(&new_state, path, NULL, 0);
-
- retval = lstat(new_state.cwd, buf);
-
- CWD_STATE_FREE(&new_state);
- return retval;
-}
-#endif
-
-CWD_API int virtual_unlink(const char *path TSRMLS_DC)
-{
- cwd_state new_state;
- int retval;
-
- CWD_STATE_COPY(&new_state, &CWDG(cwd));
- virtual_file_ex(&new_state, path, NULL, 0);
-
- retval = unlink(new_state.cwd);
-
- CWD_STATE_FREE(&new_state);
- return retval;
-}
-
-CWD_API int virtual_mkdir(const char *pathname, mode_t mode TSRMLS_DC)
-{
- cwd_state new_state;
- int retval;
-
- CWD_STATE_COPY(&new_state, &CWDG(cwd));
- virtual_file_ex(&new_state, pathname, NULL, 1);
-
-#ifdef TSRM_WIN32
- retval = mkdir(new_state.cwd);
-#else
- retval = mkdir(new_state.cwd, mode);
-#endif
- CWD_STATE_FREE(&new_state);
- return retval;
-}
-
-CWD_API int virtual_rmdir(const char *pathname TSRMLS_DC)
-{
- cwd_state new_state;
- int retval;
-
- CWD_STATE_COPY(&new_state, &CWDG(cwd));
- virtual_file_ex(&new_state, pathname, NULL, 0);
-
- retval = rmdir(new_state.cwd);
-
- CWD_STATE_FREE(&new_state);
- return retval;
-}
-
-#ifdef TSRM_WIN32
-DIR *opendir(const char *name);
-#endif
-
-CWD_API DIR *virtual_opendir(const char *pathname TSRMLS_DC)
-{
- cwd_state new_state;
- DIR *retval;
-
- CWD_STATE_COPY(&new_state, &CWDG(cwd));
- virtual_file_ex(&new_state, pathname, NULL, 1);
-
- retval = opendir(new_state.cwd);
-
- CWD_STATE_FREE(&new_state);
- return retval;
-}
-
-#ifdef TSRM_WIN32
-
-CWD_API FILE *virtual_popen(const char *command, const char *type TSRMLS_DC)
-{
- return popen_ex(command, type, CWDG(cwd).cwd, NULL);
-}
-
-#elif defined(NETWARE)
-
-/* On NetWare, the trick of prepending "cd cwd; " doesn't work so we need to perform
- a VCWD_CHDIR() and mutex it
- */
-CWD_API FILE *virtual_popen(const char *command, const char *type TSRMLS_DC)
-{
- char prev_cwd[MAXPATHLEN];
- char *getcwd_result;
- FILE *retval;
-
- getcwd_result = VCWD_GETCWD(prev_cwd, MAXPATHLEN);
- if (!getcwd_result) {
- return NULL;
- }
-
-#ifdef ZTS
- tsrm_mutex_lock(cwd_mutex);
-#endif
-
- VCWD_CHDIR(CWDG(cwd).cwd);
- retval = popen(command, type);
- VCWD_CHDIR(prev_cwd);
-
-#ifdef ZTS
- tsrm_mutex_unlock(cwd_mutex);
-#endif
-
- return retval;
-}
-
-#else /* Unix */
-
-CWD_API FILE *virtual_popen(const char *command, const char *type TSRMLS_DC)
-{
- int command_length;
- char *command_line;
- char *ptr;
- FILE *retval;
-
- command_length = strlen(command);
-
- ptr = command_line = (char *) malloc(command_length + sizeof("cd ; ") + CWDG(cwd).cwd_length+1);
- if (!command_line) {
- return NULL;
- }
- memcpy(ptr, "cd ", sizeof("cd ")-1);
- ptr += sizeof("cd ")-1;
-
- if (CWDG(cwd).cwd_length == 0) {
- *ptr++ = DEFAULT_SLASH;
- } else {
- memcpy(ptr, CWDG(cwd).cwd, CWDG(cwd).cwd_length);
- ptr += CWDG(cwd).cwd_length;
- }
-
- *ptr++ = ' ';
- *ptr++ = ';';
- *ptr++ = ' ';
-
- memcpy(ptr, command, command_length+1);
- retval = popen(command_line, type);
-
- free(command_line);
- return retval;
-}
-
-#endif
-
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- */
diff --git a/TSRM/tsrm_virtual_cwd.h b/TSRM/tsrm_virtual_cwd.h
deleted file mode 100644
index bcfb9a08a7..0000000000
--- a/TSRM/tsrm_virtual_cwd.h
+++ /dev/null
@@ -1,293 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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. |
- +----------------------------------------------------------------------+
- | Authors: Andi Gutmans <andi@zend.com> |
- | Sascha Schumann <sascha@schumann.cx> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifndef VIRTUAL_CWD_H
-#define VIRTUAL_CWD_H
-
-#include "TSRM.h"
-#include "tsrm_config_common.h"
-
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <ctype.h>
-
-#ifdef HAVE_UTIME_H
-#include <utime.h>
-#endif
-
-#ifdef HAVE_STDARG_H
-#include <stdarg.h>
-#endif
-
-#ifndef TSRM_WIN32
-#include <unistd.h>
-#endif
-
-#if defined(__osf__) || defined(_AIX)
-#include <errno.h>
-#endif
-
-#ifdef TSRM_WIN32
-#include "readdir.h"
-#include <sys/utime.h>
-/* mode_t isn't defined on Windows */
-typedef unsigned short mode_t;
-
-#define DEFAULT_SLASH '\\'
-#define DEFAULT_DIR_SEPARATOR ';'
-#define IS_SLASH(c) ((c) == '/' || (c) == '\\')
-#define IS_SLASH_P(c) (*(c) == '/' || \
- (*(c) == '\\' && !IsDBCSLeadByte(*(c-1))))
-
-/* COPY_WHEN_ABSOLUTE is 2 under Win32 because by chance both regular absolute paths
- in the file system and UNC paths need copying of two characters */
-#define COPY_WHEN_ABSOLUTE(path) 2
-#define IS_UNC_PATH(path, len) \
- (len >= 2 && IS_SLASH(path[0]) && IS_SLASH(path[1]))
-#define IS_ABSOLUTE_PATH(path, len) \
- (len >= 2 && ((isalpha(path[0]) && path[1] == ':') || IS_UNC_PATH(path, len)))
-
-#elif defined(NETWARE)
-#ifdef HAVE_DIRENT_H
-#include <dirent.h>
-#endif
-
-#define DEFAULT_SLASH '/'
-#define DEFAULT_DIR_SEPARATOR ';'
-#define IS_SLASH(c) ((c) == '/' || (c) == '\\')
-#define IS_SLASH_P(c) IS_SLASH(*(c))
-#define COPY_WHEN_ABSOLUTE(path) \
- (strchr(path, ':') - path + 1) /* Take the volume name which ends with a colon */
-#define IS_ABSOLUTE_PATH(path, len) \
- (strchr(path, ':') != NULL) /* Colon indicates volume name */
-
-#else
-#ifdef HAVE_DIRENT_H
-#include <dirent.h>
-#endif
-
-#define DEFAULT_SLASH '/'
-
-#ifdef __riscos__
-#define DEFAULT_DIR_SEPARATOR ';'
-#else
-#define DEFAULT_DIR_SEPARATOR ':'
-#endif
-
-#define IS_SLASH(c) ((c) == '/')
-#define IS_SLASH_P(c) (*(c) == '/')
-
-#endif
-
-
-#ifndef COPY_WHEN_ABSOLUTE
-#define COPY_WHEN_ABSOLUTE(path) 0
-#endif
-
-#ifndef IS_ABSOLUTE_PATH
-#define IS_ABSOLUTE_PATH(path, len) \
- (IS_SLASH(path[0]))
-#endif
-
-#ifdef TSRM_EXPORTS
-#define CWD_EXPORTS
-#endif
-
-#ifdef TSRM_WIN32
-# ifdef CWD_EXPORTS
-# define CWD_API __declspec(dllexport)
-# else
-# define CWD_API __declspec(dllimport)
-# endif
-#else
-#define CWD_API
-#endif
-
-typedef struct _cwd_state {
- char *cwd;
- int cwd_length;
-} cwd_state;
-
-typedef int (*verify_path_func)(const cwd_state *);
-
-CWD_API void virtual_cwd_startup(void);
-CWD_API void virtual_cwd_shutdown(void);
-CWD_API char *virtual_getcwd_ex(size_t *length TSRMLS_DC);
-CWD_API char *virtual_getcwd(char *buf, size_t size TSRMLS_DC);
-CWD_API int virtual_chdir(const char *path TSRMLS_DC);
-CWD_API int virtual_chdir_file(const char *path, int (*p_chdir)(const char *path TSRMLS_DC) TSRMLS_DC);
-CWD_API int virtual_filepath(const char *path, char **filepath TSRMLS_DC);
-CWD_API int virtual_filepath_ex(const char *path, char **filepath, verify_path_func verify_path TSRMLS_DC);
-CWD_API char *virtual_realpath(const char *path, char *real_path TSRMLS_DC);
-CWD_API FILE *virtual_fopen(const char *path, const char *mode TSRMLS_DC);
-CWD_API int virtual_open(const char *path TSRMLS_DC, int flags, ...);
-CWD_API int virtual_creat(const char *path, mode_t mode TSRMLS_DC);
-CWD_API int virtual_rename(char *oldname, char *newname TSRMLS_DC);
-#if !(defined(NETWARE) && defined(CLIB_STAT_PATCH))
-CWD_API int virtual_stat(const char *path, struct stat *buf TSRMLS_DC);
-#else
-CWD_API int virtual_stat(const char *path, struct stat_libc *buf TSRMLS_DC);
-#endif
-#if !defined(TSRM_WIN32) && !defined(NETWARE)
-CWD_API int virtual_lstat(const char *path, struct stat *buf TSRMLS_DC);
-#endif
-CWD_API int virtual_unlink(const char *path TSRMLS_DC);
-CWD_API int virtual_mkdir(const char *pathname, mode_t mode TSRMLS_DC);
-CWD_API int virtual_rmdir(const char *pathname TSRMLS_DC);
-CWD_API DIR *virtual_opendir(const char *pathname TSRMLS_DC);
-CWD_API FILE *virtual_popen(const char *command, const char *type TSRMLS_DC);
-CWD_API int virtual_access(const char *pathname, int mode TSRMLS_DC);
-#if defined(TSRM_WIN32)
-/* these are not defined in win32 headers */
-#ifndef W_OK
-#define W_OK 0x02
-#endif
-#ifndef R_OK
-#define R_OK 0x04
-#endif
-#ifndef X_OK
-#define X_OK 0x01
-#endif
-#ifndef F_OK
-#define F_OK 0x00
-#endif
-#endif
-
-/* On AIX & Tru64 when a file does not exist realpath() returns
- * NULL, and sets errno to ENOENT. Unlike in other libc implementations
- * the destination is not filled and remains undefined. Therefor, we
- * must populate it manually using strcpy as done on systems with no
- * realpath() function.
- */
-#if defined(__osf__) || defined(_AIX)
-static char *php_realpath_hack(char *src, char *dest)
-{
- char *ret;
-
- if ((ret = realpath(src, dest)) == NULL && errno == ENOENT) {
- return strcpy(dest, src);
- } else {
- return ret;
- }
-}
-#endif
-
-#if HAVE_UTIME
-CWD_API int virtual_utime(const char *filename, struct utimbuf *buf TSRMLS_DC);
-#endif
-CWD_API int virtual_chmod(const char *filename, mode_t mode TSRMLS_DC);
-#if !defined(TSRM_WIN32) && !defined(NETWARE)
-CWD_API int virtual_chown(const char *filename, uid_t owner, gid_t group TSRMLS_DC);
-#endif
-
-CWD_API int virtual_file_ex(cwd_state *state, const char *path, verify_path_func verify_path, int use_realpath);
-
-typedef struct _virtual_cwd_globals {
- cwd_state cwd;
-} virtual_cwd_globals;
-
-#ifdef ZTS
-# define CWDG(v) TSRMG(cwd_globals_id, virtual_cwd_globals *, v)
-#else
-# define CWDG(v) (cwd_globals.v)
-#endif
-
-/* The actual macros to be used in programs using TSRM
- * If the program defines VIRTUAL_DIR it will use the
- * virtual_* functions
- */
-
-#ifdef VIRTUAL_DIR
-
-#define VCWD_GETCWD(buff, size) virtual_getcwd(buff, size TSRMLS_CC)
-#define VCWD_FOPEN(path, mode) virtual_fopen(path, mode TSRMLS_CC)
-/* Because open() has two modes, we have to macros to replace it */
-#define VCWD_OPEN(path, flags) virtual_open(path TSRMLS_CC, flags)
-#define VCWD_OPEN_MODE(path, flags, mode) virtual_open(path TSRMLS_CC, flags, mode)
-#define VCWD_CREAT(path, mode) virtual_creat(path, mode TSRMLS_CC)
-#define VCWD_CHDIR(path) virtual_chdir(path TSRMLS_CC)
-#define VCWD_CHDIR_FILE(path) virtual_chdir_file(path, virtual_chdir TSRMLS_CC)
-#define VCWD_GETWD(buf)
-#define VCWD_REALPATH(path, real_path) virtual_realpath(path, real_path TSRMLS_CC)
-#define VCWD_RENAME(oldname, newname) virtual_rename(oldname, newname TSRMLS_CC)
-#define VCWD_STAT(path, buff) virtual_stat(path, buff TSRMLS_CC)
-#if !defined(TSRM_WIN32) && !defined(NETWARE)
-#define VCWD_LSTAT(path, buff) virtual_lstat(path, buff TSRMLS_CC)
-#endif
-#define VCWD_UNLINK(path) virtual_unlink(path TSRMLS_CC)
-#define VCWD_MKDIR(pathname, mode) virtual_mkdir(pathname, mode TSRMLS_CC)
-#define VCWD_RMDIR(pathname) virtual_rmdir(pathname TSRMLS_CC)
-#define VCWD_OPENDIR(pathname) virtual_opendir(pathname TSRMLS_CC)
-#define VCWD_POPEN(command, type) virtual_popen(command, type TSRMLS_CC)
-#define VCWD_ACCESS(pathname, mode) virtual_access(pathname, mode TSRMLS_CC)
-#if HAVE_UTIME
-#define VCWD_UTIME(path, time) virtual_utime(path, time TSRMLS_CC)
-#endif
-#define VCWD_CHMOD(path, mode) virtual_chmod(path, mode TSRMLS_CC)
-#if !defined(TSRM_WIN32) && !defined(NETWARE)
-#define VCWD_CHOWN(path, owner, group) virtual_chown(path, owner, group TSRMLS_CC)
-#endif
-
-#else
-
-#define VCWD_GETCWD(buff, size) getcwd(buff, size)
-#define VCWD_FOPEN(path, mode) fopen(path, mode)
-#define VCWD_OPEN(path, flags) open(path, flags)
-#define VCWD_OPEN_MODE(path, flags, mode) open(path, flags, mode)
-#define VCWD_CREAT(path, mode) creat(path, mode)
-#define VCWD_RENAME(oldname, newname) rename(oldname, newname)
-#define VCWD_CHDIR(path) chdir(path)
-#define VCWD_CHDIR_FILE(path) virtual_chdir_file(path, chdir)
-#define VCWD_GETWD(buf) getwd(buf)
-#define VCWD_STAT(path, buff) stat(path, buff)
-#define VCWD_LSTAT(path, buff) lstat(path, buff)
-#define VCWD_UNLINK(path) unlink(path)
-#define VCWD_MKDIR(pathname, mode) mkdir(pathname, mode)
-#define VCWD_RMDIR(pathname) rmdir(pathname)
-#define VCWD_OPENDIR(pathname) opendir(pathname)
-#define VCWD_POPEN(command, type) popen(command, type)
-#if defined(TSRM_WIN32)
-#define VCWD_ACCESS(pathname, mode) tsrm_win32_access(pathname, mode)
-#else
-#define VCWD_ACCESS(pathname, mode) access(pathname, mode)
-#endif
-
-#ifdef HAVE_REALPATH
-#if defined(__osf__) || defined(_AIX)
-#define VCWD_REALPATH(path, real_path) php_realpath_hack(path, real_path)
-#else
-#define VCWD_REALPATH(path, real_path) realpath(path, real_path)
-#endif
-#else
-#define VCWD_REALPATH(path, real_path) strcpy(real_path, path)
-#endif
-
-#if HAVE_UTIME
-#define VCWD_UTIME(path, time) utime(path, time)
-#endif
-#define VCWD_CHMOD(path, mode) chmod(path, mode)
-#if !defined(TSRM_WIN32) && !defined(NETWARE)
-#define VCWD_CHOWN(path, owner, group) chown(path, owner, group)
-#endif
-
-#endif
-
-#endif /* VIRTUAL_CWD_H */
diff --git a/TSRM/tsrm_win32.c b/TSRM/tsrm_win32.c
deleted file mode 100644
index 124b91f9d4..0000000000
--- a/TSRM/tsrm_win32.c
+++ /dev/null
@@ -1,388 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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. |
- +----------------------------------------------------------------------+
- | Authors: Daniel Beulshausen <daniel@php4win.de> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#include <stdio.h>
-#include <fcntl.h>
-#include <io.h>
-#include <process.h>
-#include <time.h>
-
-#define TSRM_INCLUDE_FULL_WINDOWS_HEADERS
-
-#include "TSRM.h"
-
-#ifdef TSRM_WIN32
-
-#include "tsrm_win32.h"
-
-#ifdef ZTS
-static ts_rsrc_id win32_globals_id;
-#else
-static tsrm_win32_globals win32_globals;
-#endif
-
-static void tsrm_win32_ctor(tsrm_win32_globals *globals TSRMLS_DC)
-{
- globals->process = NULL;
- globals->shm = NULL;
- globals->process_size = 0;
- globals->shm_size = 0;
- globals->comspec = _strdup((GetVersion()<0x80000000)?"cmd.exe":"command.com");
-}
-
-static void tsrm_win32_dtor(tsrm_win32_globals *globals TSRMLS_DC)
-{
- shm_pair *ptr;
-
- if (globals->process) {
- free(globals->process);
- }
-
- if (globals->shm) {
- for (ptr = globals->shm; ptr < (globals->shm + globals->shm_size); ptr++) {
- UnmapViewOfFile(ptr->addr);
- CloseHandle(ptr->segment);
- UnmapViewOfFile(ptr->descriptor);
- CloseHandle(ptr->info);
- }
- free(globals->shm);
- }
-
- free(globals->comspec);
-}
-
-TSRM_API void tsrm_win32_startup(void)
-{
-#ifdef ZTS
- ts_allocate_id(&win32_globals_id, sizeof(tsrm_win32_globals), (ts_allocate_ctor)tsrm_win32_ctor, (ts_allocate_ctor)tsrm_win32_dtor);
-#else
- tsrm_win32_ctor(&win32_globals TSRMLS_CC);
-#endif
-}
-
-TSRM_API void tsrm_win32_shutdown(void)
-{
-#ifndef ZTS
- tsrm_win32_dtor(&win32_globals TSRMLS_CC);
-#endif
-}
-
-TSRM_API int tsrm_win32_access(const char *pathname, int mode)
-{
- SHFILEINFO sfi;
-
- if (mode == 1 /*X_OK*/) {
- return access(pathname, 0) == 0 &&
- SHGetFileInfo(pathname, 0, &sfi, sizeof(SHFILEINFO), SHGFI_EXETYPE) != 0 ? 0 : -1;
- } else {
- return access(pathname, mode);
- }
-}
-
-
-static process_pair *process_get(FILE *stream TSRMLS_DC)
-{
- process_pair *ptr;
- process_pair *newptr;
-
- for (ptr = TWG(process); ptr < (TWG(process) + TWG(process_size)); ptr++) {
- if (ptr->stream == stream) {
- break;
- }
- }
-
- if (ptr < (TWG(process) + TWG(process_size))) {
- return ptr;
- }
-
- newptr = (process_pair*)realloc((void*)TWG(process), (TWG(process_size)+1)*sizeof(process_pair));
- if (newptr == NULL) {
- return NULL;
- }
-
- TWG(process) = newptr;
- ptr = newptr + TWG(process_size);
- TWG(process_size)++;
- return ptr;
-}
-
-static shm_pair *shm_get(int key, void *addr)
-{
- shm_pair *ptr;
- shm_pair *newptr;
- TSRMLS_FETCH();
-
- for (ptr = TWG(shm); ptr < (TWG(shm) + TWG(shm_size)); ptr++) {
- if (!ptr->descriptor) {
- continue;
- }
- if (!addr && ptr->descriptor->shm_perm.key == key) {
- break;
- } else if (ptr->addr == addr) {
- break;
- }
- }
-
- if (ptr < (TWG(shm) + TWG(shm_size))) {
- return ptr;
- }
-
- newptr = (shm_pair*)realloc((void*)TWG(shm), (TWG(shm_size)+1)*sizeof(shm_pair));
- if (newptr == NULL) {
- return NULL;
- }
-
- TWG(shm) = newptr;
- ptr = newptr + TWG(shm_size);
- TWG(shm_size)++;
- return ptr;
-}
-
-static HANDLE dupHandle(HANDLE fh, BOOL inherit) {
- HANDLE copy, self = GetCurrentProcess();
- if (!DuplicateHandle(self, fh, self, &copy, 0, inherit, DUPLICATE_SAME_ACCESS|DUPLICATE_CLOSE_SOURCE)) {
- return NULL;
- }
- return copy;
-}
-
-TSRM_API FILE *popen(const char *command, const char *type)
-{
- return popen_ex(command, type, NULL, NULL);
-}
-
-TSRM_API FILE *popen_ex(const char *command, const char *type, const char *cwd, char *env)
-{
- FILE *stream = NULL;
- int fno, str_len = strlen(type), read, mode;
- STARTUPINFO startup;
- PROCESS_INFORMATION process;
- SECURITY_ATTRIBUTES security;
- HANDLE in, out;
- char *cmd;
- process_pair *proc;
- TSRMLS_FETCH();
-
- security.nLength = sizeof(SECURITY_ATTRIBUTES);
- security.bInheritHandle = TRUE;
- security.lpSecurityDescriptor = NULL;
-
- if (!str_len || !CreatePipe(&in, &out, &security, 2048L)) {
- return NULL;
- }
-
- memset(&startup, 0, sizeof(STARTUPINFO));
- memset(&process, 0, sizeof(PROCESS_INFORMATION));
-
- startup.cb = sizeof(STARTUPINFO);
- startup.dwFlags = STARTF_USESTDHANDLES;
- startup.hStdError = GetStdHandle(STD_ERROR_HANDLE);
-
- read = (type[0] == 'r') ? TRUE : FALSE;
- mode = ((str_len == 2) && (type[1] == 'b')) ? O_BINARY : O_TEXT;
-
-
- if (read) {
- in = dupHandle(in, FALSE);
- startup.hStdInput = GetStdHandle(STD_INPUT_HANDLE);
- startup.hStdOutput = out;
- } else {
- out = dupHandle(out, FALSE);
- startup.hStdInput = in;
- startup.hStdOutput = GetStdHandle(STD_OUTPUT_HANDLE);
- }
-
- cmd = (char*)malloc(strlen(command)+strlen(TWG(comspec))+sizeof(" /c "));
- sprintf(cmd, "%s /c %s", TWG(comspec), command);
- if (!CreateProcess(NULL, cmd, &security, &security, security.bInheritHandle, NORMAL_PRIORITY_CLASS, env, cwd, &startup, &process)) {
- return NULL;
- }
- free(cmd);
-
- CloseHandle(process.hThread);
- proc = process_get(NULL TSRMLS_CC);
-
- if (read) {
- fno = _open_osfhandle((long)in, _O_RDONLY | mode);
- CloseHandle(out);
- } else {
- fno = _open_osfhandle((long)out, _O_WRONLY | mode);
- CloseHandle(in);
- }
-
- stream = _fdopen(fno, type);
- proc->prochnd = process.hProcess;
- proc->stream = stream;
- return stream;
-}
-
-TSRM_API int pclose(FILE *stream)
-{
- DWORD termstat = 0;
- process_pair *process;
- TSRMLS_FETCH();
-
- if ((process = process_get(stream TSRMLS_CC)) == NULL) {
- return 0;
- }
-
- fflush(process->stream);
- fclose(process->stream);
-
- WaitForSingleObject(process->prochnd, INFINITE);
- GetExitCodeProcess(process->prochnd, &termstat);
- process->stream = NULL;
- CloseHandle(process->prochnd);
-
- return termstat;
-}
-
-TSRM_API int shmget(int key, int size, int flags)
-{
- shm_pair *shm;
- char shm_segment[26], shm_info[29];
- HANDLE shm_handle, info_handle;
- BOOL created = FALSE;
-
- if (size < 0) {
- return -1;
- }
-
- sprintf(shm_segment, "TSRM_SHM_SEGMENT:%d", key);
- sprintf(shm_info, "TSRM_SHM_DESCRIPTOR:%d", key);
-
- shm_handle = OpenFileMapping(FILE_MAP_ALL_ACCESS, FALSE, shm_segment);
- info_handle = OpenFileMapping(FILE_MAP_ALL_ACCESS, FALSE, shm_info);
-
- if ((!shm_handle && !info_handle)) {
- if (flags & IPC_EXCL) {
- return -1;
- }
- if (flags & IPC_CREAT) {
- shm_handle = CreateFileMapping(INVALID_HANDLE_VALUE, NULL, PAGE_READWRITE, 0, size, shm_segment);
- info_handle = CreateFileMapping(INVALID_HANDLE_VALUE, NULL, PAGE_READWRITE, 0, sizeof(shm->descriptor), shm_info);
- created = TRUE;
- }
- if ((!shm_handle || !info_handle)) {
- return -1;
- }
- }
-
- shm = shm_get(key, NULL);
- shm->segment = shm_handle;
- shm->info = info_handle;
- shm->descriptor = MapViewOfFileEx(shm->info, FILE_MAP_ALL_ACCESS, 0, 0, 0, NULL);
-
- if (created) {
- shm->descriptor->shm_perm.key = key;
- shm->descriptor->shm_segsz = size;
- shm->descriptor->shm_ctime = time(NULL);
- shm->descriptor->shm_cpid = getpid();
- shm->descriptor->shm_perm.mode = flags;
-
- shm->descriptor->shm_perm.cuid = shm->descriptor->shm_perm.cgid= 0;
- shm->descriptor->shm_perm.gid = shm->descriptor->shm_perm.uid = 0;
- shm->descriptor->shm_atime = shm->descriptor->shm_dtime = 0;
- shm->descriptor->shm_lpid = shm->descriptor->shm_nattch = 0;
- shm->descriptor->shm_perm.mode = shm->descriptor->shm_perm.seq = 0;
- }
-
- if (shm->descriptor->shm_perm.key != key || size > shm->descriptor->shm_segsz ) {
- CloseHandle(shm->segment);
- UnmapViewOfFile(shm->descriptor);
- CloseHandle(shm->info);
- return -1;
- }
-
- return key;
-}
-
-TSRM_API void *shmat(int key, const void *shmaddr, int flags)
-{
- shm_pair *shm = shm_get(key, NULL);
-
- if (!shm->segment) {
- return (void*)-1;
- }
-
- shm->descriptor->shm_atime = time(NULL);
- shm->descriptor->shm_lpid = getpid();
- shm->descriptor->shm_nattch++;
-
- shm->addr = MapViewOfFileEx(shm->segment, FILE_MAP_ALL_ACCESS, 0, 0, 0, NULL);
-
- return shm->addr;
-}
-
-TSRM_API int shmdt(const void *shmaddr)
-{
- shm_pair *shm = shm_get(0, (void*)shmaddr);
-
- if (!shm->segment) {
- return -1;
- }
-
- shm->descriptor->shm_dtime = time(NULL);
- shm->descriptor->shm_lpid = getpid();
- shm->descriptor->shm_nattch--;
-
- return UnmapViewOfFile(shm->addr) ? 0 : -1;
-}
-
-TSRM_API int shmctl(int key, int cmd, struct shmid_ds *buf) {
- shm_pair *shm = shm_get(key, NULL);
-
- if (!shm->segment) {
- return -1;
- }
-
- switch (cmd) {
- case IPC_STAT:
- memcpy(buf, shm->descriptor, sizeof(struct shmid_ds));
- return 0;
-
- case IPC_SET:
- shm->descriptor->shm_ctime = time(NULL);
- shm->descriptor->shm_perm.uid = buf->shm_perm.uid;
- shm->descriptor->shm_perm.gid = buf->shm_perm.gid;
- shm->descriptor->shm_perm.mode = buf->shm_perm.mode;
- return 0;
-
- case IPC_RMID:
- if (shm->descriptor->shm_nattch < 1) {
- shm->descriptor->shm_perm.key = -1;
- }
- return 0;
-
- default:
- return -1;
- }
-}
-
-TSRM_API char *realpath(char *orig_path, char *buffer)
-{
- int ret = GetFullPathName(orig_path, _MAX_PATH, buffer, NULL);
- if(!ret || ret > _MAX_PATH) {
- return NULL;
- }
- return buffer;
-}
-
-#endif
diff --git a/TSRM/tsrm_win32.h b/TSRM/tsrm_win32.h
deleted file mode 100644
index f2a8e73746..0000000000
--- a/TSRM/tsrm_win32.h
+++ /dev/null
@@ -1,106 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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. |
- +----------------------------------------------------------------------+
- | Authors: Daniel Beulshausen <daniel@php4win.de> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifndef TSRM_WIN32_H
-#define TSRM_WIN32_H
-
-#include "TSRM.h"
-#include <windows.h>
-
-struct ipc_perm {
- int key;
- unsigned short uid;
- unsigned short gid;
- unsigned short cuid;
- unsigned short cgid;
- unsigned short mode;
- unsigned short seq;
-};
-
-struct shmid_ds {
- struct ipc_perm shm_perm;
- int shm_segsz;
- time_t shm_atime;
- time_t shm_dtime;
- time_t shm_ctime;
- unsigned short shm_cpid;
- unsigned short shm_lpid;
- short shm_nattch;
-};
-
-typedef struct {
- FILE *stream;
- HANDLE prochnd;
-} process_pair;
-
-typedef struct {
- void *addr;
- HANDLE info;
- HANDLE segment;
- struct shmid_ds *descriptor;
-} shm_pair;
-
-typedef struct {
- process_pair *process;
- shm_pair *shm;
- int process_size;
- int shm_size;
- char *comspec;
-} tsrm_win32_globals;
-
-#ifdef ZTS
-# define TWG(v) TSRMG(win32_globals_id, tsrm_win32_globals *, v)
-#else
-# define TWG(v) (win32_globals.v)
-#endif
-
-#define IPC_PRIVATE 0
-#define IPC_CREAT 00001000
-#define IPC_EXCL 00002000
-#define IPC_NOWAIT 00004000
-
-#define IPC_RMID 0
-#define IPC_SET 1
-#define IPC_STAT 2
-#define IPC_INFO 3
-
-#define SHM_R PAGE_READONLY
-#define SHM_W PAGE_READWRITE
-
-#define SHM_RDONLY FILE_MAP_READ
-#define SHM_RND FILE_MAP_WRITE
-#define SHM_REMAP FILE_MAP_COPY
-
-
-TSRM_API void tsrm_win32_startup(void);
-TSRM_API void tsrm_win32_shutdown(void);
-
-TSRM_API FILE *popen_ex(const char *command, const char *type, const char *cwd, char *env);
-TSRM_API FILE *popen(const char *command, const char *type);
-TSRM_API int pclose(FILE *stream);
-TSRM_API int tsrm_win32_access(const char *pathname, int mode);
-
-TSRM_API int shmget(int key, int size, int flags);
-TSRM_API void *shmat(int key, const void *shmaddr, int flags);
-TSRM_API int shmdt(const void *shmaddr);
-TSRM_API int shmctl(int key, int cmd, struct shmid_ds *buf);
-
-TSRM_API char *realpath(char *orig_path, char *buffer);
-#endif
diff --git a/acconfig.h.in b/acconfig.h.in
deleted file mode 100644
index f87979c2fd..0000000000
--- a/acconfig.h.in
+++ /dev/null
@@ -1 +0,0 @@
-/* Leave this file alone */
diff --git a/acinclude.m4 b/acinclude.m4
deleted file mode 100644
index 22fa428728..0000000000
--- a/acinclude.m4
+++ /dev/null
@@ -1,1933 +0,0 @@
-dnl $Id$
-dnl
-dnl This file contains local autoconf functions.
-
-dnl PHP_ADD_MAKEFILE_FRAGMENT([srcfile[, ext_srcdir[, ext_builddir]]])
-dnl
-dnl Processes a file called Makefile.frag in the source directory
-dnl of the most recently added extension. $(srcdir) and $(builddir)
-dnl are substituted with the proper paths. Can be used to supply
-dnl custom rules and/or additional targets.
-dnl
-AC_DEFUN([PHP_ADD_MAKEFILE_FRAGMENT],[
- ifelse($1,,src=$ext_srcdir/Makefile.frag,src=$1)
- ifelse($2,,ac_srcdir=$ext_srcdir,ac_srcdir=$2)
- ifelse($3,,ac_builddir=$ext_builddir,ac_builddir=$3)
- sed -e "s#\$(srcdir)#$ac_srcdir#g" -e "s#\$(builddir)#$ac_builddir#g" $src >> Makefile.fragments
-])
-
-AC_DEFUN(PHP_PROG_RE2C,[
- AC_CHECK_PROG(RE2C, re2c, re2c, [exit 0;])
-])
-
-
-dnl PHP_DEFINE(WHAT[, value])
-dnl
-dnl Creates builddir/include/what.h and in there #define WHAT value
-dnl
-AC_DEFUN([PHP_DEFINE],[
- [echo "#define ]$1[]ifelse([$2],,[ 1],[ $2])[" > include/php_]translit($1,A-Z,a-z)[.h]
-])
-
-dnl PHP_INIT_BUILD_SYSTEM
-dnl
-AC_DEFUN([PHP_INIT_BUILD_SYSTEM],[
-test -d include || mkdir include
-> Makefile.objects
-> Makefile.fragments
-dnl We need to play tricks here to avoid matching the grep line itself
-pattern=define
-egrep $pattern'.*include/php' $srcdir/configure|sed 's/.*>//'|xargs touch 2>/dev/null
-])
-
-dnl PHP_GEN_GLOBAL_MAKEFILE
-dnl
-dnl Generates the global makefile.
-dnl
-AC_DEFUN([PHP_GEN_GLOBAL_MAKEFILE],[
- cat >Makefile <<EOF
-srcdir = $abs_srcdir
-builddir = $abs_builddir
-top_srcdir = $abs_srcdir
-top_builddir = $abs_builddir
-EOF
- for i in $PHP_VAR_SUBST; do
- eval echo "$i = \$$i" >> Makefile
- done
-
- cat $abs_srcdir/Makefile.global Makefile.fragments Makefile.objects >> Makefile
-])
-
-dnl PHP_ADD_SOURCES(source-path, sources[, special-flags[, type]])
-dnl
-dnl Adds sources which are located relative to source-path to the
-dnl array of type type. Sources are processed with optional
-dnl special-flags which are passed to the compiler. Sources
-dnl can be either written in C or C++ (filenames shall end in .c
-dnl or .cpp, respectively).
-dnl
-dnl Note: If source-path begins with a "/", the "/" is removed and
-dnl the path is interpreted relative to the top build-directory.
-dnl
-dnl which array to append to?
-AC_DEFUN([PHP_ADD_SOURCES],[
- PHP_ADD_SOURCES_X($1, $2, $3, ifelse($4,cli,PHP_CLI_OBJS,ifelse($4,sapi,PHP_SAPI_OBJS,PHP_GLOBAL_OBJS)))
-])
-dnl
-dnl _PHP_ASSIGN_BUILD_VARS(type)
-dnl internal, don't use
-AC_DEFUN([_PHP_ASSIGN_BUILD_VARS],[
-ifelse($1,shared,[
- b_c_pre=$shared_c_pre
- b_cxx_pre=$shared_cxx_pre
- b_c_meta=$shared_c_meta
- b_cxx_meta=$shared_cxx_meta
- b_c_post=$shared_c_post
- b_cxx_post=$shared_cxx_post
-],[
- b_c_pre=$php_c_pre
- b_cxx_pre=$php_cxx_pre
- b_c_meta=$php_c_meta
- b_cxx_meta=$php_cxx_meta
- b_c_post=$php_c_post
- b_cxx_post=$php_cxx_post
-])dnl
- b_lo=[$]$1_lo
-])
-
-dnl PHP_ADD_SOURCES_X(source-path, sources[, special-flags[, target-var[, shared[, special-post-flags]]]])
-dnl
-dnl Additional to PHP_ADD_SOURCES (see above), this lets you set the
-dnl name of the array target-var directly, as well as whether
-dnl shared objects will be built from the sources. Should not be
-dnl used directly.
-dnl
-AC_DEFUN([PHP_ADD_SOURCES_X],[
-dnl relative to source- or build-directory?
-dnl ac_srcdir/ac_bdir include trailing slash
- case $1 in
- ""[)] ac_srcdir="$abs_srcdir/"; unset ac_bdir; ac_inc="-I. -I$abs_srcdir" ;;
- /*[)] ac_srcdir=`echo "$1"|cut -c 2-`"/"; ac_bdir=$ac_srcdir; ac_inc="-I$ac_bdir -I$abs_srcdir/$ac_bdir" ;;
- *[)] ac_srcdir="$abs_srcdir/$1/"; ac_bdir="$1/"; ac_inc="-I$ac_bdir -I$ac_srcdir" ;;
- esac
-
-dnl how to build .. shared or static?
- ifelse($5,yes,_PHP_ASSIGN_BUILD_VARS(shared),_PHP_ASSIGN_BUILD_VARS(php))
-
-dnl iterate over the sources
- old_IFS=[$]IFS
- for ac_src in $2; do
-
-dnl remove the suffix
- IFS=.
- set $ac_src
- ac_obj=[$]1
- IFS=$old_IFS
-
-dnl append to the array which has been dynamically chosen at m4 time
- $4="[$]$4 [$]ac_bdir[$]ac_obj.lo"
-
-dnl choose the right compiler/flags/etc. for the source-file
- case $ac_src in
- *.c[)] ac_comp="$b_c_pre $3 $ac_inc $b_c_meta -c $ac_srcdir$ac_src -o $ac_bdir$ac_obj.$b_lo $6$b_c_post" ;;
- *.s[)] ac_comp="$b_c_pre $3 $ac_inc $b_c_meta -c $ac_srcdir$ac_src -o $ac_bdir$ac_obj.$b_lo $6$b_c_post" ;;
- *.S[)] ac_comp="$b_c_pre $3 $ac_inc $b_c_meta -c $ac_srcdir$ac_src -o $ac_bdir$ac_obj.$b_lo $6$b_c_post" ;;
- *.cpp[)] ac_comp="$b_cxx_pre $3 $ac_inc $b_cxx_meta -c $ac_srcdir$ac_src -o $ac_bdir$ac_obj.$b_lo $6$b_cxx_post" ;;
- esac
-
-dnl create a rule for the object/source combo
- cat >>Makefile.objects<<EOF
-$ac_bdir[$]ac_obj.lo: $ac_srcdir[$]ac_src
- $ac_comp
-EOF
- done
-])
-
-dnl
-dnl Separator into the configure --help display.
-dnl
-AC_DEFUN([PHP_HELP_SEPARATOR],[
-AC_ARG_ENABLE([],[
-$1
-],[])
-])
-
-dnl
-dnl PHP_TARGET_RDYNAMIC
-dnl
-dnl Checks whether -rdynamic is supported by the compiler. This
-dnl is necessary for some targets to populate the global symbol
-dnl table. Otherwise, dynamic modules would not be able to resolve
-dnl PHP-related symbols.
-dnl
-dnl If successful, adds -rdynamic to PHP_LDFLAGS.
-dnl
-AC_DEFUN([PHP_TARGET_RDYNAMIC],[
- if test -n "$GCC"; then
- dnl we should use a PHP-specific macro here
- TSRM_CHECK_GCC_ARG(-rdynamic, gcc_rdynamic=yes)
- if test "$gcc_rdynamic" = "yes"; then
- PHP_LDFLAGS="$PHP_LDFLAGS -rdynamic"
- fi
- fi
-])
-
-AC_DEFUN([PHP_REMOVE_USR_LIB],[
- unset ac_new_flags
- for i in [$]$1; do
- case [$]i in
- -L/usr/lib|-L/usr/lib/[)] ;;
- *[)] ac_new_flags="[$]ac_new_flags [$]i" ;;
- esac
- done
- $1=[$]ac_new_flags
-])
-
-dnl PHP_EVAL_LIBLINE(LINE, SHARED-LIBADD)
-dnl
-dnl Use this macro, if you need to add libraries and or library search
-dnl paths to the PHP build system which are only given in compiler
-dnl notation.
-dnl
-AC_DEFUN([PHP_EVAL_LIBLINE],[
- for ac_i in $1; do
- case $ac_i in
- -l*[)]
- ac_ii=`echo $ac_i|cut -c 3-`
- PHP_ADD_LIBRARY($ac_ii,1,$2)
- ;;
- -L*[)]
- ac_ii=`echo $ac_i|cut -c 3-`
- PHP_ADD_LIBPATH($ac_ii,$2)
- ;;
- esac
- done
-])
-
-dnl PHP_EVAL_INCLINE(LINE)
-dnl
-dnl Use this macro, if you need to add header search paths to the PHP
-dnl build system which are only given in compiler notation.
-dnl
-AC_DEFUN([PHP_EVAL_INCLINE],[
- for ac_i in $1; do
- case $ac_i in
- -I*[)]
- ac_ii=`echo $ac_i|cut -c 3-`
- PHP_ADD_INCLUDE($ac_ii)
- ;;
- esac
- done
-])
-
-AC_DEFUN([PHP_READDIR_R_TYPE],[
- dnl HAVE_READDIR_R is also defined by libmysql
- AC_CHECK_FUNC(readdir_r,ac_cv_func_readdir_r=yes,ac_cv_func_readdir=no)
- if test "$ac_cv_func_readdir_r" = "yes"; then
- AC_CACHE_CHECK(for type of readdir_r, ac_cv_what_readdir_r,[
- AC_TRY_RUN([
-#define _REENTRANT
-#include <sys/types.h>
-#include <dirent.h>
-
-#ifndef PATH_MAX
-#define PATH_MAX 1024
-#endif
-
-main() {
- DIR *dir;
- char entry[sizeof(struct dirent)+PATH_MAX];
- struct dirent *pentry = (struct dirent *) &entry;
-
- dir = opendir("/");
- if (!dir)
- exit(1);
- if (readdir_r(dir, (struct dirent *) entry, &pentry) == 0)
- exit(0);
- exit(1);
-}
- ],[
- ac_cv_what_readdir_r=POSIX
- ],[
- AC_TRY_CPP([
-#define _REENTRANT
-#include <sys/types.h>
-#include <dirent.h>
-int readdir_r(DIR *, struct dirent *);
- ],[
- ac_cv_what_readdir_r=old-style
- ],[
- ac_cv_what_readdir_r=none
- ])
- ],[
- ac_cv_what_readdir_r=none
- ])
- ])
- case $ac_cv_what_readdir_r in
- POSIX)
- AC_DEFINE(HAVE_POSIX_READDIR_R,1,[whether you have POSIX readdir_r]);;
- old-style)
- AC_DEFINE(HAVE_OLD_READDIR_R,1,[whether you have old-style readdir_r]);;
- esac
- fi
-])
-
-AC_DEFUN([PHP_SHLIB_SUFFIX_NAME],[
- PHP_SUBST(SHLIB_SUFFIX_NAME)
- SHLIB_SUFFIX_NAME=so
- case $host_alias in
- *hpux*[)]
- SHLIB_SUFFIX_NAME=sl
- ;;
- *darwin*[)]
- SHLIB_SUFFIX_NAME=dylib
- ;;
- esac
-])
-
-AC_DEFUN([PHP_DEBUG_MACRO],[
- DEBUG_LOG=$1
- cat >$1 <<X
-CONFIGURE: $CONFIGURE_COMMAND
-CC: $CC
-CFLAGS: $CFLAGS
-CPPFLAGS: $CPPFLAGS
-CXX: $CXX
-CXXFLAGS: $CXXFLAGS
-INCLUDES: $INCLUDES
-LDFLAGS: $LDFLAGS
-LIBS: $LIBS
-DLIBS: $DLIBS
-SAPI: $PHP_SAPI
-PHP_RPATHS: $PHP_RPATHS
-uname -a: `uname -a`
-
-X
- cat >conftest.$ac_ext <<X
-main()
-{
- exit(0);
-}
-X
- (eval echo \"$ac_link\"; eval $ac_link && ./conftest) >>$1 2>&1
- rm -fr conftest*
-])
-
-AC_DEFUN([PHP_DOES_PWRITE_WORK],[
- AC_TRY_RUN([
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <fcntl.h>
-#include <unistd.h>
-#include <errno.h>
-$1
- main() {
- int fd = open("conftest_in", O_WRONLY|O_CREAT, 0600);
-
- if (fd < 0) exit(1);
- if (pwrite(fd, "text", 4, 0) != 4) exit(1);
- /* Linux glibc breakage until 2.2.5 */
- if (pwrite(fd, "text", 4, -1) != -1 || errno != EINVAL) exit(1);
- exit(0);
- }
-
- ],[
- ac_cv_pwrite=yes
- ],[
- ac_cv_pwrite=no
- ],[
- ac_cv_pwrite=no
- ])
-])
-
-AC_DEFUN([PHP_DOES_PREAD_WORK],[
- echo test > conftest_in
- AC_TRY_RUN([
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <fcntl.h>
-#include <unistd.h>
-#include <errno.h>
-$1
- main() {
- char buf[3];
- int fd = open("conftest_in", O_RDONLY);
- if (fd < 0) exit(1);
- if (pread(fd, buf, 2, 0) != 2) exit(1);
- /* Linux glibc breakage until 2.2.5 */
- if (pread(fd, buf, 2, -1) != -1 || errno != EINVAL) exit(1);
- exit(0);
- }
- ],[
- ac_cv_pread=yes
- ],[
- ac_cv_pread=no
- ],[
- ac_cv_pread=no
- ])
- rm -f conftest_in
-])
-
-AC_DEFUN([PHP_PWRITE_TEST],[
- AC_CACHE_CHECK(whether pwrite works,ac_cv_pwrite,[
- PHP_DOES_PWRITE_WORK
- if test "$ac_cv_pwrite" = "no"; then
- PHP_DOES_PWRITE_WORK([ssize_t pwrite(int, void *, size_t, off64_t);])
- if test "$ac_cv_pwrite" = "yes"; then
- ac_cv_pwrite=64
- fi
- fi
- ])
-
- if test "$ac_cv_pwrite" != "no"; then
- AC_DEFINE(HAVE_PWRITE, 1, [ ])
- if test "$ac_cv_pwrite" = "64"; then
- AC_DEFINE(PHP_PWRITE_64, 1, [whether pwrite64 is default])
- fi
- fi
-])
-
-AC_DEFUN([PHP_PREAD_TEST],[
- AC_CACHE_CHECK(whether pread works,ac_cv_pread,[
- PHP_DOES_PREAD_WORK
- if test "$ac_cv_pread" = "no"; then
- PHP_DOES_PREAD_WORK([ssize_t pread(int, void *, size_t, off64_t);])
- if test "$ac_cv_pread" = "yes"; then
- ac_cv_pread=64
- fi
- fi
- ])
-
- if test "$ac_cv_pread" != "no"; then
- AC_DEFINE(HAVE_PREAD, 1, [ ])
- if test "$ac_cv_pread" = "64"; then
- AC_DEFINE(PHP_PREAD_64, 1, [whether pread64 is default])
- fi
- fi
-])
-
-AC_DEFUN([PHP_MISSING_TIME_R_DECL],[
- AC_MSG_CHECKING([for missing declarations of reentrant functions])
- AC_TRY_COMPILE([#include <time.h>],[struct tm *(*func)() = localtime_r],[
- :
- ],[
- AC_DEFINE(MISSING_LOCALTIME_R_DECL,1,[Whether localtime_r is declared])
- ])
- AC_TRY_COMPILE([#include <time.h>],[struct tm *(*func)() = gmtime_r],[
- :
- ],[
- AC_DEFINE(MISSING_GMTIME_R_DECL,1,[Whether gmtime_r is declared])
- ])
- AC_TRY_COMPILE([#include <time.h>],[char *(*func)() = asctime_r],[
- :
- ],[
- AC_DEFINE(MISSING_ASCTIME_R_DECL,1,[Whether asctime_r is declared])
- ])
- AC_TRY_COMPILE([#include <time.h>],[char *(*func)() = ctime_r],[
- :
- ],[
- AC_DEFINE(MISSING_CTIME_R_DECL,1,[Whether ctime_r is declared])
- ])
- AC_TRY_COMPILE([#include <string.h>],[char *(*func)() = strtok_r],[
- :
- ],[
- AC_DEFINE(MISSING_STRTOK_R_DECL,1,[Whether strtok_r is declared])
- ])
- AC_MSG_RESULT([done])
-])
-
-dnl
-dnl PHP_LIBGCC_LIBPATH(gcc)
-dnl Stores the location of libgcc in libgcc_libpath
-dnl
-AC_DEFUN([PHP_LIBGCC_LIBPATH],[
- changequote({,})
- libgcc_libpath=`$1 --print-libgcc-file-name|sed 's%/*[^/][^/]*$%%'`
- changequote([,])
-])
-
-AC_DEFUN([PHP_ARG_ANALYZE_EX],[
-ext_output="yes, shared"
-ext_shared=yes
-case [$]$1 in
-shared,*[)]
- $1=`echo "[$]$1"|sed 's/^shared,//'`
- ;;
-shared[)]
- $1=yes
- ;;
-no[)]
- ext_output=no
- ext_shared=no
- ;;
-*[)]
- ext_output=yes
- ext_shared=no
- ;;
-esac
-
-PHP_ALWAYS_SHARED([$1])
-])
-
-AC_DEFUN([PHP_ARG_ANALYZE],[
-ifelse([$3],yes,[PHP_ARG_ANALYZE_EX([$1])],[ext_output=ifelse([$]$1,,no,[$]$1)])
-ifelse([$2],,,[AC_MSG_RESULT([$ext_output])])
-])
-
-dnl
-dnl PHP_ARG_WITH(arg-name, check message, help text[, default-val[, extension-or-not]])
-dnl Sets PHP_ARG_NAME either to the user value or to the default value.
-dnl default-val defaults to no. This will also set the variable ext_shared,
-dnl and will overwrite any previous variable of that name.
-dnl If extension-or-not is yes (default), then do the ENABLE_ALL check and run
-dnl the PHP_ARG_ANALYZE_EX.
-dnl
-AC_DEFUN([PHP_ARG_WITH],[
-PHP_REAL_ARG_WITH([$1],[$2],[$3],[$4],PHP_[]translit($1,a-z0-9-,A-Z0-9_),[ifelse($5,,yes,$5)])
-])
-
-AC_DEFUN([PHP_REAL_ARG_WITH],[
-ifelse([$2],,,[AC_MSG_CHECKING([$2])])
-AC_ARG_WITH($1,[$3],$5=[$]withval,
-[
- $5=ifelse($4,,no,$4)
-
- if test "$PHP_ENABLE_ALL" && test "$6" = "yes"; then
- $5=$PHP_ENABLE_ALL
- fi
-])
-PHP_ARG_ANALYZE($5,[$2],$6)
-])
-
-dnl
-dnl PHP_ARG_ENABLE(arg-name, check message, help text[, default-val[, extension-or-not]])
-dnl Sets PHP_ARG_NAME either to the user value or to the default value.
-dnl default-val defaults to no. This will also set the variable ext_shared,
-dnl and will overwrite any previous variable of that name.
-dnl If extension-or-not is yes (default), then do the ENABLE_ALL check and run
-dnl the PHP_ARG_ANALYZE_EX.
-dnl
-AC_DEFUN([PHP_ARG_ENABLE],[
-PHP_REAL_ARG_ENABLE([$1],[$2],[$3],[$4],PHP_[]translit($1,a-z-,A-Z_),[ifelse($5,,yes,$5)])
-])
-
-AC_DEFUN([PHP_REAL_ARG_ENABLE],[
-ifelse([$2],,,[AC_MSG_CHECKING([$2])])
-AC_ARG_ENABLE($1,[$3],$5=[$]enableval,
-[
- $5=ifelse($4,,no,$4)
-
- if test "$PHP_ENABLE_ALL" && test "$6" = "yes"; then
- $5=$PHP_ENABLE_ALL
- fi
-])
-PHP_ARG_ANALYZE($5,[$2],$6)
-])
-
-AC_DEFUN([PHP_MODULE_PTR],[
- EXTRA_MODULE_PTRS="$EXTRA_MODULE_PTRS $1,"
-])
-
-AC_DEFUN([PHP_CONFIG_NICE],[
- test -f $1 && mv $1 $1.old
- rm -f $1.old
- cat >$1<<EOF
-#! /bin/sh
-#
-# Created by configure
-
-EOF
-
- for var in CFLAGS CXXFLAGS CPPFLAGS LDFLAGS LIBS CC CXX; do
- eval val=\$$var
- if test -n "$val"; then
- echo "$var='$val' \\" >> $1
- fi
- done
-
- for arg in [$]0 "[$]@"; do
- echo "'[$]arg' \\" >> $1
- done
- echo '"[$]@"' >> $1
- chmod +x $1
-])
-
-AC_DEFUN([PHP_TIME_R_TYPE],[
-AC_CACHE_CHECK(for type of reentrant time-related functions, ac_cv_time_r_type,[
-AC_TRY_RUN([
-#include <time.h>
-
-main() {
-char buf[27];
-struct tm t;
-time_t old = 0;
-int r, s;
-
-s = gmtime_r(&old, &t);
-r = (int) asctime_r(&t, buf, 26);
-if (r == s && s == 0) return (0);
-return (1);
-}
-],[
- ac_cv_time_r_type=hpux
-],[
- AC_TRY_RUN([
-#include <time.h>
-main() {
- struct tm t, *s;
- time_t old = 0;
- char buf[27], *p;
-
- s = gmtime_r(&old, &t);
- p = asctime_r(&t, buf, 26);
- if (p == buf && s == &t) return (0);
- return (1);
-}
- ],[
- ac_cv_time_r_type=irix
- ],[
- ac_cv_time_r_type=POSIX
- ])
-],[
- ac_cv_time_r_type=POSIX
-])
-])
- case $ac_cv_time_r_type in
- hpux[)] AC_DEFINE(PHP_HPUX_TIME_R,1,[Whether you have HP-UX 10.x]) ;;
- irix[)] AC_DEFINE(PHP_IRIX_TIME_R,1,[Whether you have IRIX-style functions]) ;;
- esac
-])
-
-AC_DEFUN([PHP_SUBST],[
- PHP_VAR_SUBST="$PHP_VAR_SUBST $1"
-])
-
-AC_DEFUN([PHP_SUBST_OLD],[
- PHP_SUBST($1)
- AC_SUBST($1)
-])
-
-AC_DEFUN([PHP_TM_GMTOFF],[
-AC_CACHE_CHECK([for tm_gmtoff in struct tm], ac_cv_struct_tm_gmtoff,
-[AC_TRY_COMPILE([#include <sys/types.h>
-#include <$ac_cv_struct_tm>], [struct tm tm; tm.tm_gmtoff;],
- ac_cv_struct_tm_gmtoff=yes, ac_cv_struct_tm_gmtoff=no)])
-
-if test "$ac_cv_struct_tm_gmtoff" = yes; then
- AC_DEFINE(HAVE_TM_GMTOFF,1,[whether you have tm_gmtoff in struct tm])
-fi
-])
-
-dnl PHP_CONFIGURE_PART(MESSAGE)
-dnl Idea borrowed from mm
-AC_DEFUN([PHP_CONFIGURE_PART],[
- AC_MSG_RESULT()
- AC_MSG_RESULT([${T_MD}$1${T_ME}])
-])
-
-AC_DEFUN([PHP_PROG_SENDMAIL],[
-PHP_ALT_PATH=/usr/bin:/usr/sbin:/usr/etc:/etc:/usr/ucblib:/usr/lib
-AC_PATH_PROG(PROG_SENDMAIL, sendmail,[], $PATH:$PHP_ALT_PATH)
-if test -n "$PROG_SENDMAIL"; then
- AC_DEFINE(HAVE_SENDMAIL,1,[whether you have sendmail])
-fi
-])
-
-AC_DEFUN([PHP_RUNPATH_SWITCH],[
-dnl check for -R, etc. switch
-AC_MSG_CHECKING([if compiler supports -R])
-AC_CACHE_VAL(php_cv_cc_dashr,[
- SAVE_LIBS=$LIBS
- LIBS="-R /usr/lib $LIBS"
- AC_TRY_LINK([], [], php_cv_cc_dashr=yes, php_cv_cc_dashr=no)
- LIBS=$SAVE_LIBS])
-AC_MSG_RESULT([$php_cv_cc_dashr])
-if test $php_cv_cc_dashr = "yes"; then
- ld_runpath_switch=-R
-else
- AC_MSG_CHECKING([if compiler supports -Wl,-rpath,])
- AC_CACHE_VAL(php_cv_cc_rpath,[
- SAVE_LIBS=$LIBS
- LIBS="-Wl,-rpath,/usr/lib $LIBS"
- AC_TRY_LINK([], [], php_cv_cc_rpath=yes, php_cv_cc_rpath=no)
- LIBS=$SAVE_LIBS])
- AC_MSG_RESULT([$php_cv_cc_rpath])
- if test $php_cv_cc_rpath = "yes"; then
- ld_runpath_switch=-Wl,-rpath,
- else
- dnl something innocuous
- ld_runpath_switch=-L
- fi
-fi
-])
-
-AC_DEFUN([PHP_STRUCT_FLOCK],[
-AC_CACHE_CHECK(for struct flock,ac_cv_struct_flock,
- AC_TRY_COMPILE([
-#include <unistd.h>
-#include <fcntl.h>
- ],
- [struct flock x;],
- [
- ac_cv_struct_flock=yes
- ],[
- ac_cv_struct_flock=no
- ])
-)
-if test "$ac_cv_struct_flock" = "yes" ; then
- AC_DEFINE(HAVE_STRUCT_FLOCK, 1,[whether you have struct flock])
-fi
-])
-
-AC_DEFUN([PHP_SOCKLEN_T],[
-AC_CACHE_CHECK(for socklen_t,ac_cv_socklen_t,
- AC_TRY_COMPILE([
-#include <sys/types.h>
-#include <sys/socket.h>
-],[
-socklen_t x;
-],[
- ac_cv_socklen_t=yes
-],[
- ac_cv_socklen_t=no
-]))
-if test "$ac_cv_socklen_t" = "yes"; then
- AC_DEFINE(HAVE_SOCKLEN_T, 1, [Whether you have socklen_t])
-fi
-])
-
-dnl
-dnl PHP_SET_SYM_FILE(path)
-dnl
-dnl set the path of the file which contains the symbol export list
-dnl
-AC_DEFUN([PHP_SET_SYM_FILE],
-[
- PHP_SYM_FILE=$1
-])
-
-dnl
-dnl PHP_BUILD_THREAD_SAFE
-dnl
-AC_DEFUN([PHP_BUILD_THREAD_SAFE],[
- enable_maintainer_zts=yes
- if test "$pthreads_working" != "yes"; then
- AC_MSG_ERROR([ZTS currently requires working POSIX threads. We were unable to verify that your system supports Pthreads.])
- fi
-])
-
-AC_DEFUN([PHP_REQUIRE_CXX],[
- if test -z "$php_cxx_done"; then
- AC_PROG_CXX
- AC_PROG_CXXCPP
- php_cxx_done=yes
- fi
-])
-
-dnl
-dnl PHP_BUILD_SHARED
-dnl
-AC_DEFUN([PHP_BUILD_SHARED],[
- PHP_BUILD_PROGRAM
- OVERALL_TARGET=libphp5.la
- php_build_target=shared
-
- php_c_pre=$shared_c_pre
- php_c_meta=$shared_c_meta
- php_c_post=$shared_c_post
- php_cxx_pre=$shared_cxx_pre
- php_cxx_meta=$shared_cxx_meta
- php_cxx_post=$shared_cxx_post
- php_lo=$shared_lo
-])
-
-dnl
-dnl PHP_BUILD_STATIC
-dnl
-AC_DEFUN([PHP_BUILD_STATIC],[
- PHP_BUILD_PROGRAM
- OVERALL_TARGET=libphp5.la
- php_build_target=static
-])
-
-dnl
-dnl PHP_BUILD_BUNDLE
-dnl
-AC_DEFUN([PHP_BUILD_BUNDLE],[
- PHP_BUILD_PROGRAM
- OVERALL_TARGET=libs/libphp5.bundle
- php_build_target=static
-])
-
-dnl
-dnl PHP_BUILD_PROGRAM
-dnl
-AC_DEFUN([PHP_BUILD_PROGRAM],[
- OVERALL_TARGET=[]ifelse($1,,php,$1)
- php_c_pre='$(CC)'
- php_c_meta='$(COMMON_FLAGS) $(CFLAGS_CLEAN) $(EXTRA_CFLAGS)'
- php_c_post=' && echo > $[@]'
- php_cxx_pre='$(CXX)'
- php_cxx_meta='$(COMMON_FLAGS) $(CXXFLAGS_CLEAN) $(EXTRA_CXXFLAGS)'
- php_cxx_post=' && echo > $[@]'
- php_lo=o
-
- shared_c_pre='$(LIBTOOL) --mode=compile $(CC)'
- shared_c_meta='$(COMMON_FLAGS) $(CFLAGS_CLEAN) $(EXTRA_CFLAGS) -prefer-pic'
- shared_c_post=
- shared_cxx_pre='$(LIBTOOL) --mode=compile $(CXX)'
- shared_cxx_meta='$(COMMON_FLAGS) $(CXXFLAGS_CLEAN) $(EXTRA_CXXFLAGS) -prefer-pic'
- shared_cxx_post=
- shared_lo=lo
-
- php_build_target=program
-])
-
-dnl
-dnl PHP_RUN_ONCE(namespace, variable, code)
-dnl
-dnl execute code, if variable is not set in namespace
-dnl
-AC_DEFUN([PHP_RUN_ONCE],[
- changequote({,})
- unique=`echo $2|sed 's/[^a-zA-Z0-9]/_/g'`
- changequote([,])
- cmd="echo $ac_n \"\$$1$unique$ac_c\""
- if test -n "$unique" && test "`eval $cmd`" = "" ; then
- eval "$1$unique=set"
- $3
- fi
-])
-
-dnl
-dnl PHP_EXPAND_PATH(path, variable)
-dnl
-dnl expands path to an absolute path and assigns it to variable
-dnl
-AC_DEFUN([PHP_EXPAND_PATH],[
- if test -z "$1" || echo "$1" | grep '^/' >/dev/null ; then
- $2=$1
- else
- changequote({,})
- ep_dir="`echo $1|sed 's%/*[^/][^/]*/*$%%'`"
- changequote([,])
- ep_realdir="`(cd \"$ep_dir\" && pwd)`"
- $2="$ep_realdir/`basename \"$1\"`"
- fi
-])
-dnl
-dnl internal, don't use
-AC_DEFUN([_PHP_ADD_LIBPATH_GLOBAL],[
- PHP_RUN_ONCE(LIBPATH, $1, [
- test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$1"
- LDFLAGS="$LDFLAGS -L$1"
- PHP_RPATHS="$PHP_RPATHS $1"
- ])
-])dnl
-dnl
-dnl
-dnl
-dnl PHP_ADD_LIBPATH(path[, shared-libadd])
-dnl
-dnl add a library to linkpath/runpath
-dnl
-AC_DEFUN([PHP_ADD_LIBPATH],[
- if test "$1" != "/usr/lib"; then
- PHP_EXPAND_PATH($1, ai_p)
- ifelse([$2],,[
- _PHP_ADD_LIBPATH_GLOBAL([$ai_p])
- ],[
- if test "$ext_shared" = "yes"; then
- $2="$ld_runpath_switch$ai_p -L$ai_p [$]$2"
- else
- _PHP_ADD_LIBPATH_GLOBAL([$ai_p])
- fi
- ])
- fi
-])
-
-dnl
-dnl PHP_UTILIZE_RPATHS()
-dnl
-dnl builds RPATHS/LDFLAGS from PHP_RPATHS
-dnl
-AC_DEFUN([PHP_UTILIZE_RPATHS],[
- OLD_RPATHS=$PHP_RPATHS
- unset PHP_RPATHS
-
- for i in $OLD_RPATHS; do
-dnl Can be passed to native cc/libtool
- PHP_LDFLAGS="$PHP_LDFLAGS -L$i"
-dnl Libtool-specific
- PHP_RPATHS="$PHP_RPATHS -R $i"
-dnl cc-specific
- NATIVE_RPATHS="$NATIVE_RPATHS $ld_runpath_switch$i"
- done
-
- if test "$PHP_RPATH" = "no"; then
- unset PHP_RPATHS
- unset NATIVE_RPATHS
- fi
-])
-
-dnl
-dnl PHP_ADD_INCLUDE(path [,before])
-dnl
-dnl add an include path.
-dnl if before is 1, add in the beginning of INCLUDES.
-dnl
-AC_DEFUN([PHP_ADD_INCLUDE],[
- if test "$1" != "/usr/include"; then
- PHP_EXPAND_PATH($1, ai_p)
- PHP_RUN_ONCE(INCLUDEPATH, $ai_p, [
- if test "$2"; then
- INCLUDES="-I$ai_p $INCLUDES"
- else
- INCLUDES="$INCLUDES -I$ai_p"
- fi
- ])
- fi
-])
-dnl
-dnl internal, don't use
-AC_DEFUN([_PHP_X_ADD_LIBRARY],[dnl
- ifelse([$2],,$3="-l$1 [$]$3", $3="[$]$3 -l$1") dnl
-])dnl
-dnl
-dnl internal, don't use
-AC_DEFUN([_PHP_ADD_LIBRARY_SKELETON],[
- case $1 in
- c|c_r|pthread*[)] ;;
- *[)] ifelse($3,,[
- _PHP_X_ADD_LIBRARY($1,$2,$5)
- ],[
- if test "$ext_shared" = "yes"; then
- _PHP_X_ADD_LIBRARY($1,$2,$3)
- else
- $4($1,$2)
- fi
- ]) ;;
- esac
-])dnl
-dnl
-dnl
-dnl
-dnl PHP_ADD_LIBRARY(library[, append[, shared-libadd]])
-dnl
-dnl add a library to the link line
-dnl
-AC_DEFUN([PHP_ADD_LIBRARY],[
- _PHP_ADD_LIBRARY_SKELETON([$1],[$2],[$3],[PHP_ADD_LIBRARY],[LIBS])
-])
-
-dnl
-dnl PHP_ADD_LIBRARY_DEFER(library[, append[, shared-libadd]])
-dnl
-dnl add a library to the link line (deferred)
-dnl
-AC_DEFUN([PHP_ADD_LIBRARY_DEFER],[
- _PHP_ADD_LIBRARY_SKELETON([$1],[$2],[$3],[PHP_ADD_LIBRARY_DEFER],[DLIBS])
-])
-
-dnl
-dnl PHP_ADD_LIBRARY_WITH_PATH(library, path[, shared-libadd])
-dnl
-dnl add a library to the link line and path to linkpath/runpath.
-dnl if shared-libadd is not empty and $ext_shared is yes,
-dnl shared-libadd will be assigned the library information
-dnl
-AC_DEFUN([PHP_ADD_LIBRARY_WITH_PATH],[
-ifelse($3,,[
- if test -n "$2"; then
- PHP_ADD_LIBPATH($2)
- fi
- PHP_ADD_LIBRARY($1)
-],[
- if test "$ext_shared" = "yes"; then
- $3="-l$1 [$]$3"
- if test -n "$2"; then
- PHP_ADD_LIBPATH($2,$3)
- fi
- else
- PHP_ADD_LIBRARY_WITH_PATH($1,$2)
- fi
-])
-])
-
-dnl
-dnl PHP_ADD_LIBRARY_DEFER_WITH_PATH(library, path[, shared-libadd])
-dnl
-dnl add a library to the link line (deferred)
-dnl and path to linkpath/runpath (not deferred)
-dnl if shared-libadd is not empty and $ext_shared is yes,
-dnl shared-libadd will be assigned the library information
-dnl
-AC_DEFUN([PHP_ADD_LIBRARY_DEFER_WITH_PATH],[
-ifelse($3,,[
- if test -n "$2"; then
- PHP_ADD_LIBPATH($2)
- fi
- PHP_ADD_LIBRARY_DEFER($1)
-],[
- if test "$ext_shared" = "yes"; then
- $3="-l$1 [$]$3"
- if test -n "$2"; then
- PHP_ADD_LIBPATH($2,$3)
- fi
- else
- PHP_ADD_LIBRARY_DEFER_WITH_PATH($1,$2)
- fi
-])
-])
-
-dnl
-dnl PHP_ADD_FRAMEWORK(framework [,before])
-dnl
-dnl add a (Darwin / Mac OS X) framework to the link
-dnl line. if before is 1, the framework is added
-dnl to the beginning of the line.
-
-AC_DEFUN([PHP_ADD_FRAMEWORK], [
- PHP_RUN_ONCE(FRAMEWORKS, $1, [
- if test "$2"; then
- PHP_FRAMEWORKS="-framework $1 $PHP_FRAMEWORKS"
- else
- PHP_FRAMEWORKS="$PHP_FRAMEWORKS -framework $1"
- fi
- ])
-])
-
-dnl
-dnl PHP_ADD_FRAMEWORKPATH(path [,before])
-dnl
-dnl add a (Darwin / Mac OS X) framework path to the link
-dnl and include lines. default paths include (but are
-dnl not limited to) /Local/Library/Frameworks and
-dnl /System/Library/Frameworks, so these don't need
-dnl to be specifically added. if before is 1, the
-dnl framework path is added to the beginning of the
-dnl relevant lines.
-
-AC_DEFUN([PHP_ADD_FRAMEWORKPATH], [
- PHP_EXPAND_PATH($1, ai_p)
- PHP_RUN_ONCE(FRAMEWORKPATH, $ai_p, [
- if test "$2"; then
- PHP_FRAMEWORKPATH="-F$ai_p $PHP_FRAMEWORKPATH"
- else
- PHP_FRAMEWORKPATH="$PHP_FRAMEWORKPATH -F$ai_p"
- fi
- ])
-])
-
-dnl
-dnl PHP_ADD_FRAMEWORK_WITH_PATH(framework, path)
-dnl
-dnl add a (Darwin / Mac OS X) framework path and the
-dnl framework itself to the link and include lines.
-AC_DEFUN([PHP_ADD_FRAMEWORK_WITH_PATH], [
- PHP_ADD_FRAMEWORKPATH($2)
- PHP_ADD_FRAMEWORK($1)
-])
-
-dnl
-dnl Set libtool variable
-dnl
-AC_DEFUN([PHP_SET_LIBTOOL_VARIABLE],[
- if test -z "$LIBTOOL"; then
- LIBTOOL='$(SHELL) $(top_builddir)/libtool $1'
- else
- LIBTOOL="$LIBTOOL $1"
- fi
-])
-
-dnl
-dnl Check for cc option
-dnl
-AC_DEFUN([PHP_CHECK_CC_OPTION],[
- echo "main(){return 0;}" > conftest.$ac_ext
- opt=$1
- changequote({,})
- var=`echo $opt|sed 's/[^a-zA-Z0-9]/_/g'`
- changequote([,])
- AC_MSG_CHECKING([if compiler supports -$1 really])
- ac_php_compile="${CC-cc} -$opt -o conftest $CFLAGS $CPPFLAGS conftest.$ac_ext 2>&1"
- if eval $ac_php_compile 2>&1 | egrep "$opt" > /dev/null 2>&1 ; then
- eval php_cc_$var=no
- AC_MSG_RESULT([no])
- else
- if eval ./conftest 2>/dev/null ; then
- eval php_cc_$var=yes
- AC_MSG_RESULT([yes])
- else
- eval php_cc_$var=no
- AC_MSG_RESULT([no])
- fi
- fi
- rm -rf conftest*
-])
-
-AC_DEFUN([PHP_REGEX],[
-
-if test "$REGEX_TYPE" = "php"; then
- AC_DEFINE(HSREGEX,1,[ ])
- AC_DEFINE(REGEX,1,[ ])
- PHP_ADD_SOURCES(regex, regcomp.c regexec.c regerror.c regfree.c)
-elif test "$REGEX_TYPE" = "system"; then
- AC_DEFINE(REGEX,0,[ ])
-fi
-
-AC_MSG_CHECKING([which regex library to use])
-AC_MSG_RESULT([$REGEX_TYPE])
-])
-
-dnl
-dnl See if we have broken header files like SunOS has.
-dnl
-AC_DEFUN([PHP_MISSING_FCLOSE_DECL],[
- AC_MSG_CHECKING([for fclose declaration])
- AC_TRY_COMPILE([#include <stdio.h>],[int (*func)() = fclose],[
- AC_DEFINE(MISSING_FCLOSE_DECL,0,[ ])
- AC_MSG_RESULT([ok])
- ],[
- AC_DEFINE(MISSING_FCLOSE_DECL,1,[ ])
- AC_MSG_RESULT([missing])
- ])
-])
-
-dnl
-dnl Check for broken sprintf(), C99 conformance
-dnl
-AC_DEFUN([PHP_AC_BROKEN_SPRINTF],[
- AC_CACHE_CHECK(whether sprintf is broken, ac_cv_broken_sprintf,[
- AC_TRY_RUN([main() {char buf[20];exit(sprintf(buf,"testing 123")!=11); }],[
- ac_cv_broken_sprintf=no
- ],[
- ac_cv_broken_sprintf=yes
- ],[
- ac_cv_broken_sprintf=no
- ])
- ])
- if test "$ac_cv_broken_sprintf" = "yes"; then
- AC_DEFINE(PHP_BROKEN_SPRINTF, 1, [Whether sprintf is C99 conform])
- else
- AC_DEFINE(PHP_BROKEN_SPRINTF, 0, [Whether sprintf is C99 conform])
- fi
-])
-
-dnl
-dnl Check for broken snprintf(), C99 conformance
-dnl
-AC_DEFUN([PHP_AC_BROKEN_SNPRINTF],[
- AC_CACHE_CHECK(whether snprintf is broken, ac_cv_broken_snprintf,[
- AC_TRY_RUN([
-#define NULL (0L)
-main() {
- char buf[20];
- int res = 0;
- res = res || (snprintf(buf, 2, "marcus") != 6);
- res = res || (buf[1] != '\0');
- /* Implementations may consider this as an encoding error */
- snprintf(buf, 0, "boerger");
- /* However, they MUST ignore the pointer */
- res = res || (buf[0] != 'm');
- res = res || (snprintf(NULL, 0, "boerger") != 7);
- res = res || (snprintf(buf, sizeof(buf), "%f", 0.12345678) != 8);
- exit(res);
-}
- ],[
- ac_cv_broken_snprintf=no
- ],[
- ac_cv_broken_snprintf=yes
- ],[
- ac_cv_broken_snprintf=no
- ])
- ])
- if test "$ac_cv_broken_snprintf" = "yes"; then
- AC_DEFINE(PHP_BROKEN_SNPRINTF, 1, [Whether snprintf is C99 conform])
- else
- AC_DEFINE(PHP_BROKEN_SNPRINTF, 0, [Whether snprintf is C99 conform])
- fi
-])
-
-dnl PHP_SHARED_MODULE(module-name, object-var, build-dir, cxx)
-dnl
-dnl Basically sets up the link-stage for building module-name
-dnl from object_var in build-dir.
-dnl
-AC_DEFUN([PHP_SHARED_MODULE],[
- install_modules="install-modules"
- PHP_MODULES="$PHP_MODULES \$(phplibdir)/$1.la"
- PHP_SUBST($2)
- cat >>Makefile.objects<<EOF
-\$(phplibdir)/$1.la: $3/$1.la
- \$(LIBTOOL) --mode=install cp $3/$1.la \$(phplibdir)
-
-$3/$1.la: \$($2) \$(translit($1,a-z_-,A-Z__)_SHARED_DEPENDENCIES)
- \$(LIBTOOL) --mode=link ifelse($4,,[\$(CC)],[\$(CXX)]) \$(COMMON_FLAGS) \$(CFLAGS_CLEAN) \$(EXTRA_CFLAGS) \$(LDFLAGS) -o \[$]@ -export-dynamic -avoid-version -prefer-pic -module -rpath \$(phplibdir) \$(EXTRA_LDFLAGS) \$($2) \$(translit($1,a-z_-,A-Z__)_SHARED_LIBADD)
-
-EOF
-])
-
-dnl
-dnl PHP_SELECT_SAPI(name, type[, sources [, extra-cflags [, build-target]]])
-dnl
-dnl Selects the SAPI name and type (static, shared, programm)
-dnl and optionally also the source-files for the SAPI-specific
-dnl objects.
-dnl
-AC_DEFUN([PHP_SELECT_SAPI],[
- PHP_SAPI=$1
-
- case "$2" in
- static[)] PHP_BUILD_STATIC;;
- shared[)] PHP_BUILD_SHARED;;
- bundle[)] PHP_BUILD_BUNDLE;;
- program[)] PHP_BUILD_PROGRAM($5);;
- esac
-
- ifelse($3,,,[PHP_ADD_SOURCES([sapi/$1],[$3],[$4],[sapi])])
-])
-
-dnl deprecated
-AC_DEFUN([PHP_EXTENSION],[
- sources=`$AWK -f $abs_srcdir/build/scan_makefile_in.awk < []PHP_EXT_SRCDIR($1)[]/Makefile.in`
-
- PHP_NEW_EXTENSION($1, $sources, $2, $3)
-
- if test -r "$ext_srcdir/Makefile.frag"; then
- PHP_ADD_MAKEFILE_FRAGMENT
- fi
-])
-
-AC_DEFUN([PHP_ADD_BUILD_DIR],[
- BUILD_DIR="$BUILD_DIR $1"
-])
-
-AC_DEFUN([PHP_GEN_BUILD_DIRS],[
- $php_shtool mkdir -p $BUILD_DIR
-])
-
-dnl
-dnl PHP_NEW_EXTENSION(extname, sources [, shared [,sapi_class[, extra-cflags[, cxx]]]])
-dnl
-dnl Includes an extension in the build.
-dnl
-dnl "extname" is the name of the ext/ subdir where the extension resides.
-dnl "sources" is a list of files relative to the subdir which are used
-dnl to build the extension.
-dnl "shared" can be set to "shared" or "yes" to build the extension as
-dnl a dynamically loadable library. Optional parameter "sapi_class" can
-dnl be set to "cli" to mark extension build only with CLI or CGI sapi's.
-dnl extra-cflags are passed to the compiler, with @ext_srcdir@ being
-dnl substituted.
-AC_DEFUN([PHP_NEW_EXTENSION],[
- ext_builddir=[]PHP_EXT_BUILDDIR($1)
- ext_srcdir=[]PHP_EXT_SRCDIR($1)
-
- ifelse($5,,ac_extra=,[ac_extra=`echo "$5"|sed s#@ext_srcdir@#$ext_srcdir#g`])
-
- if test "$3" != "shared" && test "$3" != "yes" && test "$4" != "cli"; then
-dnl ---------------------------------------------- Static module
-
- PHP_ADD_SOURCES(PHP_EXT_DIR($1),$2,$ac_extra,)
- EXT_STATIC="$EXT_STATIC $1"
- if test "$3" != "nocli"; then
- EXT_CLI_STATIC="$EXT_CLI_STATIC $1"
- fi
- else
- if test "$3" = "shared" || test "$3" = "yes"; then
-dnl ---------------------------------------------- Shared module
- PHP_ADD_SOURCES_X(PHP_EXT_DIR($1),$2,$ac_extra,shared_objects_$1,yes)
- PHP_SHARED_MODULE($1,shared_objects_$1, $ext_builddir, $6)
- AC_DEFINE_UNQUOTED([COMPILE_DL_]translit($1,a-z_-,A-Z__), 1, Whether to build $1 as dynamic module)
- fi
- fi
-
- if test "$3" != "shared" && test "$3" != "yes" && test "$4" = "cli"; then
-dnl ---------------------------------------------- CLI static module
- if test "$PHP_SAPI" = "cgi"; then
- PHP_ADD_SOURCES(PHP_EXT_DIR($1),$2,$ac_extra,)
- EXT_STATIC="$EXT_STATIC $1"
- else
- PHP_ADD_SOURCES(PHP_EXT_DIR($1),$2,$ac_extra,cli)
- fi
- EXT_CLI_STATIC="$EXT_CLI_STATIC $1"
- fi
- PHP_ADD_BUILD_DIR($ext_builddir)
-])
-
-dnl
-dnl Solaris requires main code to be position independent in order
-dnl to let shared objects find symbols. Weird. Ugly.
-dnl
-dnl Must be run after all --with-NN options that let the user
-dnl choose dynamic extensions, and after the gcc test.
-dnl
-AC_DEFUN([PHP_SOLARIS_PIC_WEIRDNESS],[
- AC_MSG_CHECKING([whether -fPIC is required])
- if test -n "$EXT_SHARED"; then
- os=`uname -sr 2>/dev/null`
- case $os in
- "SunOS 5.6"|"SunOS 5.7"[)]
- case $CC in
- gcc*|egcs*) CFLAGS="$CFLAGS -fPIC";;
- *[)] CFLAGS="$CFLAGS -fpic";;
- esac
- AC_MSG_RESULT([yes]);;
- *[)]
- AC_MSG_RESULT([no]);;
- esac
- else
- AC_MSG_RESULT([no])
- fi
-])
-
-dnl
-dnl Checks whether $withval is "shared" or starts with "shared,XXX"
-dnl and sets $shared to "yes" or "no", and removes "shared,?" stuff
-dnl from $withval.
-dnl
-AC_DEFUN([PHP_WITH_SHARED],[
- PHP_ARG_ANALYZE_EX(withval)
- shared=$ext_shared
- unset ext_shared ext_output
-])
-
-dnl The problem is that the default compilation flags in Solaris 2.6 won't
-dnl let programs access large files; you need to tell the compiler that
-dnl you actually want your programs to work on large files. For more
-dnl details about this brain damage please see:
-dnl http://www.sas.com/standards/large.file/x_open.20Mar96.html
-
-dnl Written by Paul Eggert <eggert@twinsun.com>.
-
-AC_DEFUN([PHP_SYS_LFS],
-[dnl
- # If available, prefer support for large files unless the user specified
- # one of the CPPFLAGS, LDFLAGS, or LIBS variables.
- AC_MSG_CHECKING([whether large file support needs explicit enabling])
- ac_getconfs=''
- ac_result=yes
- ac_set=''
- ac_shellvars='CPPFLAGS LDFLAGS LIBS'
- for ac_shellvar in $ac_shellvars; do
- case $ac_shellvar in
- CPPFLAGS[)] ac_lfsvar=LFS_CFLAGS ;;
- *[)] ac_lfsvar=LFS_$ac_shellvar ;;
- esac
- eval test '"${'$ac_shellvar'+set}"' = set && ac_set=$ac_shellvar
- (getconf $ac_lfsvar) >/dev/null 2>&1 || { ac_result=no; break; }
- ac_getconf=`getconf $ac_lfsvar`
- ac_getconfs=$ac_getconfs$ac_getconf
- eval ac_test_$ac_shellvar=\$ac_getconf
- done
- case "$ac_result$ac_getconfs" in
- yes[)] ac_result=no ;;
- esac
- case "$ac_result$ac_set" in
- yes?*[)] ac_result="yes, but $ac_set is already set, so use its settings"
- esac
- AC_MSG_RESULT([$ac_result])
- case $ac_result in
- yes[)]
- for ac_shellvar in $ac_shellvars; do
- eval $ac_shellvar=\$ac_test_$ac_shellvar
- done ;;
- esac
-])
-
-AC_DEFUN([PHP_SOCKADDR_SA_LEN],[
- AC_CACHE_CHECK([for field sa_len in struct sockaddr],ac_cv_sockaddr_sa_len,[
- AC_TRY_COMPILE([#include <sys/types.h>
-#include <sys/socket.h>],
- [struct sockaddr s; s.sa_len;],
- [ac_cv_sockaddr_sa_len=yes
- AC_DEFINE(HAVE_SOCKADDR_SA_LEN,1,[ ])],
- [ac_cv_sockaddr_sa_len=no])
- ])
-])
-
-
-dnl ## PHP_OUTPUT(file)
-dnl ## adds "file" to the list of files generated by AC_OUTPUT
-dnl ## This macro can be used several times.
-AC_DEFUN([PHP_OUTPUT],[
- PHP_OUTPUT_FILES="$PHP_OUTPUT_FILES $1"
-])
-
-AC_DEFUN([PHP_DECLARED_TIMEZONE],[
- AC_CACHE_CHECK(for declared timezone, ac_cv_declared_timezone,[
- AC_TRY_COMPILE([
-#include <sys/types.h>
-#include <time.h>
-#ifdef HAVE_SYS_TIME_H
-#include <sys/time.h>
-#endif
-],[
- time_t foo = (time_t) timezone;
-],[
- ac_cv_declared_timezone=yes
-],[
- ac_cv_declared_timezone=no
-])])
- if test "$ac_cv_declared_timezone" = "yes"; then
- AC_DEFINE(HAVE_DECLARED_TIMEZONE, 1, [Whether system headers declare timezone])
- fi
-])
-
-AC_DEFUN([PHP_EBCDIC],[
- AC_CACHE_CHECK([whether system uses EBCDIC],ac_cv_ebcdic,[
- AC_TRY_RUN( [
-int main(void) {
- return (unsigned char)'A' != (unsigned char)0xC1;
-}
-],[
- ac_cv_ebcdic=yes
-],[
- ac_cv_ebcdic=no
-],[
- ac_cv_ebcdic=no
-])])
- if test "$ac_cv_ebcdic" = "yes"; then
- AC_DEFINE(CHARSET_EBCDIC,1, [Define if system uses EBCDIC])
- fi
-])
-
-dnl Some systems, notably Solaris, cause getcwd() or realpath to fail if a
-dnl component of the path has execute but not read permissions
-AC_DEFUN([PHP_BROKEN_GETCWD],[
- AC_MSG_CHECKING([for broken getcwd])
- os=`uname -sr 2>/dev/null`
- case $os in
- SunOS*[)]
- AC_DEFINE(HAVE_BROKEN_GETCWD,1, [Define if system has broken getcwd])
- AC_MSG_RESULT([yes]);;
- *[)]
- AC_MSG_RESULT([no]);;
- esac
-])
-
-AC_DEFUN([PHP_BROKEN_GLIBC_FOPEN_APPEND],[
- AC_MSG_CHECKING([for broken libc stdio])
- AC_CACHE_VAL(have_broken_glibc_fopen_append,[
- AC_TRY_RUN([
-#include <stdio.h>
-int main(int argc, char *argv[])
-{
- FILE *fp;
- long position;
- char *filename = "/tmp/phpglibccheck";
-
- fp = fopen(filename, "w");
- if (fp == NULL) {
- perror("fopen");
- exit(2);
- }
- fputs("foobar", fp);
- fclose(fp);
-
- fp = fopen(filename, "a+");
- position = ftell(fp);
- fclose(fp);
- unlink(filename);
- if (position == 0)
- return 1;
- return 0;
-}
-],
-[have_broken_glibc_fopen_append=no],
-[have_broken_glibc_fopen_append=yes ],
-AC_TRY_COMPILE([
-#include <features.h>
-],[
-#if !__GLIBC_PREREQ(2,2)
-choke me
-#endif
-],
-[have_broken_glibc_fopen_append=yes],
-[have_broken_glibc_fopen_append=no ])
-)])
-
- if test "$have_broken_glibc_fopen_append" = "yes"; then
- AC_MSG_RESULT(yes)
- AC_DEFINE(HAVE_BROKEN_GLIBC_FOPEN_APPEND,1, [Define if your glibc borks on fopen with mode a+])
- else
- AC_MSG_RESULT(no)
- fi
-])
-
-
-AC_DEFUN([PHP_FOPENCOOKIE],[
- AC_CHECK_FUNC(fopencookie, [ have_glibc_fopencookie=yes ])
-
- if test "$have_glibc_fopencookie" = "yes" ; then
- dnl this comes in two flavors:
- dnl newer glibcs (since 2.1.2 ? )
- dnl have a type called cookie_io_functions_t
- AC_TRY_COMPILE([ #define _GNU_SOURCE
- #include <stdio.h>
- ],
- [ cookie_io_functions_t cookie; ],
- [ have_cookie_io_functions_t=yes ],
- [] )
-
- if test "$have_cookie_io_functions_t" = "yes" ; then
- cookie_io_functions_t=cookie_io_functions_t
- have_fopen_cookie=yes
-
- dnl even newer glibcs have a different seeker definition...
-
- AC_TRY_RUN([
-#define _GNU_SOURCE
-#include <stdio.h>
-
-struct cookiedata {
- __off64_t pos;
-};
-
-__ssize_t reader(void *cookie, char *buffer, size_t size)
-{ return size; }
-__ssize_t writer(void *cookie, const char *buffer, size_t size)
-{ return size; }
-int closer(void *cookie)
-{ return 0; }
-int seeker(void *cookie, __off64_t *position, int whence)
-{ ((struct cookiedata*)cookie)->pos = *position; return 0; }
-
-cookie_io_functions_t funcs = {reader, writer, seeker, closer};
-
-main() {
- struct cookiedata g = { 0 };
- FILE *fp = fopencookie(&g, "r", funcs);
-
- if (fp && fseek(fp, 8192, SEEK_SET) == 0 && g.pos == 8192)
- exit(0);
- exit(1);
-}
-
- ],
- [ cookie_io_functions_use_off64_t=yes ],
- [ ] )
-
- else
- dnl older glibc versions (up to 2.1.2 ?)
- dnl call it _IO_cookie_io_functions_t
- AC_TRY_COMPILE([ #define _GNU_SOURCE
- #include <stdio.h>
- ],
- [ _IO_cookie_io_functions_t cookie; ],
- [ have_IO_cookie_io_functions_t=yes ],
- [] )
- if test "$have_cookie_io_functions_t" = "yes" ; then
- cookie_io_functions_t=_IO_cookie_io_functions_t
- have_fopen_cookie=yes
- fi
- fi
-
- if test "$have_fopen_cookie" = "yes" ; then
- AC_DEFINE(HAVE_FOPENCOOKIE, 1, [ ])
- AC_DEFINE_UNQUOTED(COOKIE_IO_FUNCTIONS_T, $cookie_io_functions_t, [ ])
- if test "$cookie_io_functions_use_off64_t" = "yes" ; then
- AC_DEFINE(COOKIE_SEEKER_USES_OFF64_T, 1, [ ])
- fi
- fi
-
- fi
-])
-
-
-dnl
-dnl PHP_CHECK_LIBRARY(library, function [, action-found [, action-not-found [, extra-libs]]])
-dnl
-dnl Wrapper for AC_CHECK_LIB
-dnl
-AC_DEFUN([PHP_CHECK_LIBRARY], [
- save_old_LDFLAGS=$LDFLAGS
- ac_stuff="$5"
-
- save_ext_shared=$ext_shared
- ext_shared=yes
- PHP_EVAL_LIBLINE([$]ac_stuff, LDFLAGS)
- AC_CHECK_LIB([$1],[$2],[
- LDFLAGS=$save_old_LDFLAGS
- ext_shared=$save_ext_shared
- $3
- ],[
- LDFLAGS=$save_old_LDFLAGS
- ext_shared=$save_ext_shared
- unset ac_cv_func_$1
- $4
- ])dnl
-])
-
-dnl
-dnl PHP_CHECK_FRAMEWORK(framework, function [, action-found [, action-not-found ]])
-dnl
-dnl El cheapo wrapper for AC_CHECK_LIB
-dnl
-AC_DEFUN([PHP_CHECK_FRAMEWORK], [
- save_old_LDFLAGS=$LDFLAGS
- LDFLAGS="-framework $1 $LDFLAGS"
- dnl supplying "c" to AC_CHECK_LIB is technically cheating, but
- dnl rewriting AC_CHECK_LIB is overkill and this only affects
- dnl the "checking.." output anyway.
- AC_CHECK_LIB(c,[$2],[
- LDFLAGS=$save_old_LDFLAGS
- $3
- ],[
- LDFLAGS=$save_old_LDFLAGS
- $4
- ])
-])
-
-dnl
-dnl PHP_SETUP_OPENSSL(shared-add [, action-found [, action-not-found]])
-dnl
-dnl Common setup macro for openssl
-dnl
-AC_DEFUN([PHP_SETUP_OPENSSL],[
- found_openssl=no
- unset OPENSSL_INCDIR
- unset OPENSSL_LIBDIR
-
- dnl First try to find pkg-config
- if test -z "$PKG_CONFIG"; then
- AC_PATH_PROG(PKG_CONFIG, pkg-config, no)
- fi
-
- dnl If pkg-config is found try using it
- if test "$PHP_OPENSSL" = "yes" && test -x "$PKG_CONFIG" && $PKG_CONFIG --exists openssl; then
- if $PKG_CONFIG --atleast-version=0.9.6 openssl; then
- found_openssl=yes
- OPENSSL_LIBS=`$PKG_CONFIG --libs openssl`
- OPENSSL_INCS=`$PKG_CONFIG --cflags-only-I openssl`
- OPENSSL_INCDIR=`$PKG_CONFIG --variable=includedir openssl`
- else
- AC_MSG_ERROR([OpenSSL version 0.9.6 or greater required.])
- fi
-
- if test -n "$OPENSSL_LIBS" && test -n "$OPENSSL_INCS"; then
- PHP_EVAL_LIBLINE($OPENSSL_LIBS, $1)
- PHP_EVAL_INCLINE($OPENSSL_INCS)
- fi
-
- else
-
- dnl If pkg-config fails for some reason, revert to the old method
- if test "$PHP_OPENSSL" = "yes"; then
- PHP_OPENSSL="/usr/local/ssl /usr/local /usr /usr/local/openssl"
- fi
-
- for i in $PHP_OPENSSL; do
- if test -r $i/include/openssl/evp.h; then
- OPENSSL_INCDIR=$i/include
- fi
- if test -r $i/lib/libssl.a -o -r $i/lib/libssl.$SHLIB_SUFFIX_NAME; then
- OPENSSL_LIBDIR=$i/lib
- fi
- test -n "$OPENSSL_INCDIR" && test -n "$OPENSSL_LIBDIR" && break
- done
-
- if test -z "$OPENSSL_INCDIR"; then
- AC_MSG_ERROR([Cannot find OpenSSL's <evp.h>])
- fi
-
- if test -z "$OPENSSL_LIBDIR"; then
- AC_MSG_ERROR([Cannot find OpenSSL's libraries])
- fi
-
- old_CPPFLAGS=$CPPFLAGS
- CPPFLAGS=-I$OPENSSL_INCDIR
- AC_MSG_CHECKING([for OpenSSL version])
- AC_EGREP_CPP(yes,[
-#include <openssl/opensslv.h>
-#if OPENSSL_VERSION_NUMBER >= 0x0090600fL
- yes
-#endif
- ],[
- AC_MSG_RESULT([>= 0.9.6])
- ],[
- AC_MSG_ERROR([OpenSSL version 0.9.6 or greater required.])
- ])
- CPPFLAGS=$old_CPPFLAGS
-
- PHP_ADD_INCLUDE($OPENSSL_INCDIR)
-
- PHP_CHECK_LIBRARY(crypto, CRYPTO_free, [
- PHP_ADD_LIBRARY(crypto,,$1)
- ],[
- AC_MSG_ERROR([libcrypto not found!])
- ],[
- -L$OPENSSL_LIBDIR
- ])
-
- old_LIBS=$LIBS
- LIBS="$LIBS -lcrypto"
- PHP_CHECK_LIBRARY(ssl, SSL_CTX_set_ssl_version, [
- found_openssl=yes
- ],[
- AC_MSG_ERROR([libssl not found!])
- ],[
- -L$OPENSSL_LIBDIR
- ])
- LIBS=$old_LIBS
- PHP_ADD_LIBRARY(ssl,,$1)
-
- PHP_ADD_LIBPATH($OPENSSL_LIBDIR, $1)
- fi
-
- dnl For apache 1.3.x static build
- OPENSSL_INCDIR_OPT=-I$OPENSSL_INCDIR
- AC_SUBST(OPENSSL_INCDIR_OPT)
-
- if test "$found_openssl" = "yes"; then
-ifelse([$2],[],:,[$2])
-ifelse([$3],[],,[else $3])
- fi
-])
-
-dnl
-dnl PHP_SETUP_ICONV(shared-add [, action-found [, action-not-found]])
-dnl
-dnl Common setup macro for iconv
-dnl
-AC_DEFUN([PHP_SETUP_ICONV], [
- found_iconv=no
- unset ICONV_DIR
-
- dnl
- dnl Check libc first if no path is provided in --with-iconv
- dnl
- if test "$PHP_ICONV" = "yes"; then
- AC_CHECK_FUNC(iconv, [
- PHP_DEFINE(HAVE_ICONV)
- found_iconv=yes
- ],[
- AC_CHECK_FUNC(libiconv,[
- PHP_DEFINE(HAVE_LIBICONV)
- found_iconv=yes
- ])
- ])
- fi
-
- dnl
- dnl Check external libs for iconv funcs
- dnl
- if test "$found_iconv" = "no"; then
-
- for i in $PHP_ICONV /usr/local /usr; do
- if test -r $i/include/giconv.h; then
- AC_DEFINE(HAVE_GICONV_H, 1, [ ])
- ICONV_DIR=$i
- iconv_lib_name=giconv
- break
- elif test -r $i/include/iconv.h; then
- ICONV_DIR=$i
- iconv_lib_name=iconv
- break
- fi
- done
-
- if test -z "$ICONV_DIR"; then
- AC_MSG_ERROR([Please specify the install prefix of iconv with --with-iconv=<DIR>])
- fi
-
- if test -f $ICONV_DIR/lib/lib$iconv_lib_name.a ||
- test -f $ICONV_DIR/lib/lib$iconv_lib_name.$SHLIB_SUFFIX_NAME
- then
- PHP_CHECK_LIBRARY($iconv_lib_name, libiconv, [
- found_iconv=yes
- PHP_DEFINE(HAVE_LIBICONV)
- ], [
- PHP_CHECK_LIBRARY($iconv_lib_name, iconv, [
- found_iconv=yes
- PHP_DEFINE(HAVE_ICONV)
- ], [], [
- -L$ICONV_DIR/lib
- ])
- ], [
- -L$ICONV_DIR/lib
- ])
- fi
- fi
-
- if test "$found_iconv" = "yes"; then
- if test -n "$ICONV_DIR"; then
- AC_DEFINE(HAVE_ICONV, 1, [ ])
- PHP_ADD_LIBRARY_WITH_PATH($iconv_lib_name, $ICONV_DIR/lib, $1)
- PHP_ADD_INCLUDE($ICONV_DIR/include)
- fi
- $2
-ifelse([$3],[],,[else $3])
- fi
-])
-
-dnl
-dnl PHP_SETUP_LIBXML(shared-add [, action-found [, action-not-found]])
-dnl
-dnl Common setup macro for libxml
-dnl
-AC_DEFUN([PHP_SETUP_LIBXML], [
-
- for i in $PHP_LIBXML_DIR /usr/local /usr; do
- if test -x "$i/bin/xml2-config"; then
- XML2_CONFIG="$i/bin/xml2-config"
- break
- fi
- done
-
- if test -x "$XML2_CONFIG"; then
- libxml_full_version=`$XML2_CONFIG --version`
- ac_IFS=$IFS
- IFS="."
- set $libxml_full_version
- IFS=$ac_IFS
- LIBXML_VERSION=`expr [$]1 \* 1000000 + [$]2 \* 1000 + [$]3`
- if test "$LIBXML_VERSION" -ge "2005010"; then
- LIBXML_LIBS=`$XML2_CONFIG --libs`
- LIBXML_INCS=`$XML2_CONFIG --cflags`
- PHP_EVAL_LIBLINE($LIBXML_LIBS, $1)
- PHP_EVAL_INCLINE($LIBXML_INCS)
-
- dnl Check that build works with given libs
- AC_CACHE_CHECK(whether libxml build works, php_cv_libxml_build_works, [
- PHP_TEST_BUILD(xmlInitParser,
- [
- php_cv_libxml_build_works=yes
- ], [
- AC_MSG_RESULT(no)
- AC_MSG_ERROR([build test failed. Please check the config.log for details.])
- ], [
- [$]$1
- ])
- ])
- if test "$php_cv_libxml_build_works" = "yes"; then
- AC_DEFINE(HAVE_LIBXML, 1, [ ])
- fi
- $2
- else
- AC_MSG_ERROR([libxml2 version 2.5.10 or greater required.])
- fi
-ifelse([$3],[],,[else $3])
- fi
-])
-
-AC_DEFUN([PHP_DEF_HAVE],[AC_DEFINE([HAVE_]translit($1,a-z_-,A-Z__), 1, [ ])])
-
-dnl
-dnl PHP_CHECK_FUNC_LIB(func, libs)
-dnl This macro checks whether 'func' or '__func' exists
-dnl in the specified library.
-dnl Defines HAVE_func and HAVE_library if found and adds the library to LIBS.
-dnl This should be called in the ACTION-IF-NOT-FOUND part of PHP_CHECK_FUNC
-dnl
-
-dnl autoconf undefines the builtin "shift" :-(
-dnl If possible, we use the builtin shift anyway, otherwise we use
-dnl the ubercool definition I have tested so far with FreeBSD/GNU m4
-ifdef([builtin],[builtin(define, phpshift, [builtin(shift, $@)])],[
-define([phpshift],[ifelse(index([$@],[,]),-1,,[substr([$@],incr(index([$@],[,])))])])
-])
-
-AC_DEFUN([PHP_CHECK_FUNC_LIB],[
- ifelse($2,,:,[
- unset ac_cv_lib_$2[]_$1
- unset ac_cv_lib_$2[]___$1
- unset found
- AC_CHECK_LIB($2, $1, [found=yes], [
- AC_CHECK_LIB($2, __$1, [found=yes], [found=no])
- ])
-
- if test "$found" = "yes"; then
- ac_libs=$LIBS
- LIBS="$LIBS -l$2"
- AC_TRY_RUN([main() { return (0); }],[found=yes],[found=no],[found=no])
- LIBS=$ac_libs
- fi
-
- if test "$found" = "yes"; then
- PHP_ADD_LIBRARY($2)
- PHP_DEF_HAVE($1)
- PHP_DEF_HAVE(lib$2)
- ac_cv_func_$1=yes
- else
- PHP_CHECK_FUNC_LIB($1,phpshift(phpshift($@)))
- fi
- ])
-])
-
-dnl
-dnl PHP_CHECK_FUNC(func, ...)
-dnl This macro checks whether 'func' or '__func' exists
-dnl in the default libraries and as a fall back in the specified library.
-dnl Defines HAVE_func and HAVE_library if found and adds the library to LIBS.
-dnl
-AC_DEFUN([PHP_CHECK_FUNC],[
- unset ac_cv_func_$1
- unset ac_cv_func___$1
- unset found
-
- AC_CHECK_FUNC($1, [found=yes],[ AC_CHECK_FUNC(__$1,[found=yes],[found=no]) ])
-
- case $found in
- yes[)]
- PHP_DEF_HAVE($1)
- ac_cv_func_$1=yes
- ;;
- ifelse($#,1,,[
- *[)] PHP_CHECK_FUNC_LIB($@) ;;
- ])
- esac
-])
-
-dnl
-dnl PHP_AP_EXTRACT_VERSION(/path/httpd)
-dnl This macro is used to get a comparable
-dnl version for apache1/2.
-dnl
-AC_DEFUN([PHP_AP_EXTRACT_VERSION],[
- ac_output=`$1 -v 2>&1`
- ac_IFS=$IFS
-IFS="- /.
-"
- set $ac_output
- IFS=$ac_IFS
-
- APACHE_VERSION=`expr [$]4 \* 1000000 + [$]5 \* 1000 + [$]6`
-])
-
-dnl
-dnl PHP_TEST_BUILD(function, action-if-ok, action-if-not-ok [, extra-libs [, extra-source]])
-dnl This macro checks whether build works and given function exists.
-dnl
-AC_DEFUN(PHP_TEST_BUILD, [
- old_LIBS=$LIBS
- LIBS="$4 $LIBS"
- AC_TRY_RUN([
- $5
- char $1();
- int main() {
- $1();
- return 0;
- }
- ], [
- LIBS=$old_LIBS
- $2
- ],[
- LIBS=$old_LIBS
- $3
- ],[
- LIBS=$old_LIBS
- ])
-])
-
-dnl This macro is currently a placeholder in the config.m4 file
-dnl it is scanned by genif.sh when it builds the internal functions
-dnl list, so that modules can be init'd in the correct order
-dnl $1 = name of extension, $2 = extension upon which it depends
-dnl $3 = optional: if true, it's ok for $2 to have not been configured
-dnl default is false and should halt the build.
-dnl See ADD_EXTENSION_DEP in win32 build
-AC_DEFUN(PHP_ADD_EXTENSION_DEP, [])
-
-
diff --git a/build/build.mk b/build/build.mk
deleted file mode 100644
index 3e629bb2c5..0000000000
--- a/build/build.mk
+++ /dev/null
@@ -1,73 +0,0 @@
-# +----------------------------------------------------------------------+
-# | PHP Version 5 |
-# +----------------------------------------------------------------------+
-# | Copyright (c) 1997-2004 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: Sascha Schumann <sascha@schumann.cx> |
-# +----------------------------------------------------------------------+
-#
-# $Id$
-#
-#
-# Makefile to generate build tools
-#
-
-ZENDDIR = Zend
-
-SUBDIRS = $(ZENDDIR) TSRM
-
-STAMP = buildmk.stamp
-
-ALWAYS = generated_lists
-
-
-all: $(STAMP) $(ALWAYS)
- @$(MAKE) AMFLAGS=$(AMFLAGS) -s -f build/build2.mk
-
-generated_lists:
- @echo makefile_am_files = $(ZENDDIR)/Makefile.am \
- TSRM/Makefile.am > $@
- @echo config_h_files = $(ZENDDIR)/acconfig.h TSRM/acconfig.h >> $@
- @echo config_m4_files = $(ZENDDIR)/Zend.m4 TSRM/tsrm.m4 TSRM/threads.m4 \
- $(ZENDDIR)/acinclude.m4 ext/*/config*.m4 sapi/*/config.m4 >> $@
-
-$(STAMP): build/buildcheck.sh
- @build/buildcheck.sh $(STAMP)
-
-snapshot:
- distname='$(DISTNAME)'; \
- if test -z "$$distname"; then \
- distname='php5-snapshot'; \
- fi; \
- myname=`basename \`pwd\`` ; \
- cd .. && cp -rp $$myname $$distname; \
- cd $$distname; \
- rm -f $(SUBDIRS) 2>/dev/null || true; \
- for i in $(SUBDIRS); do \
- test -d $$i || (test -d ../$$i && cp -rp ../$$i $$i); \
- done; \
- find . -type l -exec rm {} \; ; \
- $(MAKE) AMFLAGS=--copy -f build/build.mk; \
- cd ..; \
- tar cf $$distname.tar $$distname; \
- rm -rf $$distname $$distname.tar.*; \
- bzip2 -9 $$distname.tar; \
- md5sum $$distname.tar.bz2; \
- sync; sleep 2; \
- md5sum $$distname.tar.bz2; \
- bzip2 -t $$distname.tar.bz2
-
-cvsclean-work:
- @for i in `find . -name .cvsignore`; do \
- (cd `dirname $$i` 2>/dev/null && rm -rf `cat .cvsignore | grep -v config.nice` *.o *.a .libs || true); \
- done
-
-.PHONY: $(ALWAYS) snapshot
diff --git a/build/build2.mk b/build/build2.mk
deleted file mode 100644
index 9b3d538d19..0000000000
--- a/build/build2.mk
+++ /dev/null
@@ -1,64 +0,0 @@
-# +----------------------------------------------------------------------+
-# | PHP Version 5 |
-# +----------------------------------------------------------------------+
-# | Copyright (c) 1997-2004 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: Sascha Schumann <sascha@schumann.cx> |
-# +----------------------------------------------------------------------+
-#
-# $Id$
-#
-
-include generated_lists
-
-TOUCH_FILES = mkinstalldirs install-sh missing
-
-LT_TARGETS = ltmain.sh config.guess config.sub
-
-makefile_in_files = $(makefile_am_files:.am=.in)
-makefile_files = $(makefile_am_files:e.am=e)
-
-config_h_in = main/php_config.h.in
-
-acconfig_h_SOURCES = acconfig.h.in $(config_h_files)
-
-targets = $(TOUCH_FILES) configure $(config_h_in)
-
-
-all: $(targets)
-
-acconfig.h: $(acconfig_h_SOURCES)
- @echo rebuilding $@
- cat $(acconfig_h_SOURCES) > $@
-
-SUPPRESS_WARNINGS = (egrep -v '(AC_TRY_RUN called without default to allow cross compiling|AC_PROG_CXXCPP was called before AC_PROG_CXX|defined in acinclude.m4 but never used|AC_PROG_LEX invoked multiple times)'||true)
-
-$(config_h_in): configure acconfig.h
-# explicitly remove target since autoheader does not seem to work
-# correctly otherwise (timestamps are not updated)
- @echo rebuilding $@
- @rm -f $@
- @autoheader 2>&1 | $(SUPPRESS_WARNINGS)
-
-$(TOUCH_FILES):
- touch $(TOUCH_FILES)
-
-aclocal.m4: configure.in acinclude.m4
- @echo rebuilding $@
- @libtoolize=`./build/shtool path glibtoolize libtoolize`; \
- $$libtoolize --copy --automake; \
- ltpath=`dirname $$libtoolize`; \
- ltfile=`cd $$ltpath/../share/aclocal; pwd`/libtool.m4; \
- cat acinclude.m4 $$ltfile > $@
-
-configure: aclocal.m4 configure.in $(config_m4_files)
- @echo rebuilding $@
- @autoconf 2>&1 | $(SUPPRESS_WARNINGS)
diff --git a/build/buildcheck.sh b/build/buildcheck.sh
deleted file mode 100755
index aed6126b5e..0000000000
--- a/build/buildcheck.sh
+++ /dev/null
@@ -1,93 +0,0 @@
-#! /bin/sh
-# +----------------------------------------------------------------------+
-# | PHP Version 5 |
-# +----------------------------------------------------------------------+
-# | Copyright (c) 1997-2004 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. |
-# +----------------------------------------------------------------------+
-# | Authors: Stig Bakken <ssb@php.net> |
-# | Sascha Schumann <sascha@schumann.cx> |
-# +----------------------------------------------------------------------+
-#
-# $Id: buildcheck.sh,v 1.30 2004-01-08 17:31:49 sniper Exp $
-#
-
-echo "buildconf: checking installation..."
-
-stamp=$1
-
-# autoconf 2.13 or newer
-ac_version=`autoconf --version 2>/dev/null|head -n 1|sed -e 's/^[^0-9]*//' -e 's/[a-z]* *$//'`
-if test -z "$ac_version"; then
-echo "buildconf: autoconf not found."
-echo " You need autoconf version 2.13 or newer installed"
-echo " to build PHP from CVS."
-exit 1
-fi
-IFS=.; set $ac_version; IFS=' '
-if test "$1" = "2" -a "$2" -lt "13" || test "$1" -lt "2"; then
-echo "buildconf: autoconf version $ac_version found."
-echo " You need autoconf version 2.13 or newer installed"
-echo " to build PHP from CVS."
-exit 1
-else
-echo "buildconf: autoconf version $ac_version (ok)"
-fi
-
-
-if test "$1" = "2" && test "$2" -ge "50"; then
- echo "buildconf: Your version of autoconf likely contains buggy cache code."
- echo " Running cvsclean for you."
- echo " To avoid this, install autoconf-2.13 and automake-1.5."
- ./cvsclean
- stamp=
-fi
-
-# libtoolize 1.4.3 or newer
-# Prefer glibtoolize over libtoolize for Mac OS X compatibility
-libtoolize=`./build/shtool path glibtoolize libtoolize 2> /dev/null`
-lt_pversion=`$libtoolize --version 2>/dev/null|head -n 1|sed -e 's/^[^0-9]*//'`
-if test "$lt_pversion" = ""; then
-echo "buildconf: libtool not found."
-echo " You need libtool version 1.4.3 or newer installed"
-echo " to build PHP from CVS."
-exit 1
-fi
-IFS=.; set $lt_pversion; IFS=' '
-
-if test "$3" = ""; then
- third=0
-else
- third=$3
-fi
-
-if test "$1" -gt "1" || test "$2" -ge "5" || (test "$2" -ge "4" && test "$third" -ge "3")
-then
-echo "buildconf: libtool version $lt_pversion (ok)"
-else
-echo "buildconf: libtool version $lt_pversion found."
-echo " You need libtool version 1.4.3 or newer installed"
-echo " to build PHP from CVS."
-exit 1
-fi
-
-ltpath=`echo $libtoolize | sed -e 's#/[^/]*/[^/]*$##'`
-ltfile="$ltpath/share/aclocal/libtool.m4"
-if test -r "$ltfile"; then
- :
-else
- echo "buildconf: $ltfile does not exist."
- echo " Please reinstall libtool."
- exit 1
-fi
-
-test -n "$stamp" && touch $stamp
-
-exit 0
diff --git a/build/config-stubs b/build/config-stubs
deleted file mode 100755
index 28208085a7..0000000000
--- a/build/config-stubs
+++ /dev/null
@@ -1,8 +0,0 @@
-#!/bin/sh
-#
-# $Id$
-
-dir=$1; shift
-for stubfile in $dir/*/config0.m4 $dir/*/config.m4 $dir/*/config9.m4; do
- echo "sinclude($stubfile)"
-done
diff --git a/build/genif.sh b/build/genif.sh
deleted file mode 100644
index 6fb8fc391f..0000000000
--- a/build/genif.sh
+++ /dev/null
@@ -1,41 +0,0 @@
-#! /bin/sh
-
-# $Id: genif.sh,v 1.4 2004-07-18 12:03:51 wez Exp $
-# replacement for genif.pl
-
-infile=$1
-shift
-srcdir=$1
-shift
-extra_module_ptrs=$1
-shift
-awk=$1
-shift
-
-if test -z "$infile" || test -z "$srcdir"; then
- echo "please supply infile and srcdir"
- exit 1
-fi
-
-header_list=
-olddir=`pwd`
-cd $srcdir
-
-module_ptrs="$extra_module_ptrs`echo $@ | $awk -f ./build/order_by_dep.awk`"
-
-for ext in ${1+"$@"} ; do
- header_list="$header_list ext/$ext/*.h"
-done
-
-includes=`$awk -f ./build/print_include.awk $header_list`
-
-cd $olddir
-
-cat $infile | \
- sed \
- -e "s'@EXT_INCLUDE_CODE@'$includes'" \
- -e "s'@EXT_MODULE_PTRS@'$module_ptrs'" \
- -e 's/@NEWLINE@/\
-/g'
-
-
diff --git a/build/mkdep.awk b/build/mkdep.awk
deleted file mode 100644
index a07909e9c2..0000000000
--- a/build/mkdep.awk
+++ /dev/null
@@ -1,75 +0,0 @@
-# +----------------------------------------------------------------------+
-# | PHP Version 5 |
-# +----------------------------------------------------------------------+
-# | Copyright (c) 2000-2004 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: Sascha Schumann <sascha@schumann.cx> |
-# +----------------------------------------------------------------------+
-#
-# $Id$
-#
-# Usage:
-#
-# echo top_srcdir top_builddir srcdir CPP [CPP-ARGS] filenames | \
-# awk -f mkdep.awk > dependencies
-
-
-{
- top_srcdir=$1
- top_builddir=$2
- srcdir=$3
- cmd=$4
-
- for (i = 5; i <= NF; i++) {
- if (match($i, "^-[A-Z]") == 0)
- break;
- cmd=cmd " " $i
- }
-
- dif=i-1
-
- for (; i <= NF; i++)
- filenames[i-dif]=$i
-
- no_files=NF-dif
-
- for(i = 1; i <= no_files; i++) {
- if (system("test -r " filenames[i]) != 0)
- continue
-
- target=filenames[i]
- sub(srcdir "/", "", target)
- target2=target
- sub("\.(c|cpp)$", ".lo", target);
- sub("\.(c|cpp)$", ".slo", target2);
-
- for (e in used)
- delete used[e]
-
- cmdx=cmd " " filenames[i]
- done=0
- while ((cmdx | getline) > 0) {
- if (match($0, "^# [0-9]* \".*\.h\"") != 0) {
- if (sub(top_srcdir, "$(top_srcdir)", $3) == 0)
- sub(top_builddir, "$(top_builddir)", $3)
- if (substr($3,2,1) != "/" && used[$3] != 1) {
- if (done == 0)
- printf(target " " target2 ":")
- done=1
- printf(" \\\n\t" substr($3,2,length($3)-2))
- used[$3] = 1;
- }
- }
- }
- if (done == 1)
- print "\n"
- }
-}
diff --git a/build/order_by_dep.awk b/build/order_by_dep.awk
deleted file mode 100644
index 38128b2e1b..0000000000
--- a/build/order_by_dep.awk
+++ /dev/null
@@ -1,89 +0,0 @@
-BEGIN {
- orig_rs = RS;
- orig_fs = FS;
- RS=" ";
- mod_count = 0;
- SUBSEP=":";
-}
-
-function get_deps(module_name, depline, cmd)
-{
- # this could probably be made *much* better
- RS=orig_rs;
- FS="[(,) \t]+"
- cmd = "grep PHP_ADD_EXTENSION_DEP ext/" module_name "/config*.m4"
- while (cmd | getline) {
-# printf("GOT: %s,%s,%s,%s,%s\n", $1, $2, $3, $4, $5);
- if (!length($5)) {
- $5 = 0;
- }
- mod_deps[module_name, $4] = $5;
- }
- close(cmd)
- RS=" ";
- FS=orig_fs;
-}
-
-function get_module_index(name, i)
-{
- for (i in mods) {
- if (mods[i] == name) {
- return i;
- }
- }
- return -1;
-}
-
-function do_deps(mod_idx, module_name, mod_name_len, dep, ext, val, depidx)
-{
- module_name = mods[mod_idx];
- mod_name_len = length(module_name);
-
- for (ext in mod_deps) {
- if (substr(ext, 0, mod_name_len+1) != module_name SUBSEP) {
- continue;
- }
- val = mod_deps[ext];
- ext = substr(ext, mod_name_len+2, length(ext)-mod_name_len);
-
- depidx = get_module_index(ext);
- if (depidx >= 0) {
- do_deps(depidx);
- }
- }
-
- #printf(" phpext_%s_ptr,\n", module_name);
- printf(" phpext_%s_ptr,@NEWLINE@", module_name);
- delete mods[mod_idx];
-}
-
-function count(arr, n, i)
-{
- n = 0;
- for (i in arr)
- n++;
- return n;
-}
-
-/^[a-zA-Z0-9_-]+/ {
- # mini hack for pedantic awk
- gsub("[^a-zA-Z0-9_-]", "", $1)
- # add each item to array
- mods[mod_count++] = $1
-
- # see if it has any module deps
- get_deps($1);
-}
-END {
- # order it correctly
- out_count = 0;
-
- while (count(mods)) {
- # count down, since we need to assemble it in reverse order
- for (i = mod_count-1; i >= 0; --i) {
- if (i in mods) {
- do_deps(i);
- }
- }
- }
-}
diff --git a/build/print_include.awk b/build/print_include.awk
deleted file mode 100644
index a4919fae87..0000000000
--- a/build/print_include.awk
+++ /dev/null
@@ -1,6 +0,0 @@
-/phpext_/ {
- if (old_filename != FILENAME) {
- printf "#include \"" FILENAME "\"@NEWLINE@"
- old_filename = FILENAME
- }
-}
diff --git a/build/scan_makefile_in.awk b/build/scan_makefile_in.awk
deleted file mode 100644
index 0c6d20398f..0000000000
--- a/build/scan_makefile_in.awk
+++ /dev/null
@@ -1,32 +0,0 @@
-BEGIN {
- mode=0
- sources=""
-}
-
-mode == 0 && /^LTLIBRARY_SOURCES.*\\$/ {
- if (match($0, "[^=]*$")) {
- sources=substr($0, RSTART, RLENGTH-1)
- }
- mode=1
- next
-}
-
-mode == 0 && /^LTLIBRARY_SOURCES.*/ {
- if (match($0, "[^=]*$")) {
- sources=substr($0, RSTART, RLENGTH)
- }
-}
-
-mode == 1 && /.*\\$/ {
- sources=sources substr($0, 0, length - 1)
- next
-}
-
-mode == 1 {
- sources=sources $0
- mode=0
-}
-
-END {
- print sources
-}
diff --git a/build/shtool b/build/shtool
deleted file mode 100755
index f3250796ec..0000000000
--- a/build/shtool
+++ /dev/null
@@ -1,1046 +0,0 @@
-#!/bin/sh
-##
-## GNU shtool -- The GNU Portable Shell Tool
-## Copyright (c) 1994-2002 Ralf S. Engelschall <rse@engelschall.com>
-##
-## See http://www.gnu.org/software/shtool/ for more information.
-## See ftp://ftp.gnu.org/gnu/shtool/ for latest version.
-##
-## Version: 1.6.2 (02-Nov-2002)
-## Contents: 4/19 available modules
-##
-
-##
-## This program is free software; you can redistribute it and/or modify
-## it under the terms of the GNU General Public License as published by
-## the Free Software Foundation; either version 2 of the License, or
-## (at your option) any later version.
-##
-## This program is distributed in the hope that it will be useful,
-## but WITHOUT ANY WARRANTY; without even the implied warranty of
-## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-## General Public License for more details.
-##
-## You should have received a copy of the GNU General Public License
-## along with this program; if not, write to the Free Software
-## Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
-## USA, or contact Ralf S. Engelschall <rse@engelschall.com>.
-##
-## NOTICE: Given that you include this file verbatim into your own
-## source tree, you are justified in saying that it remains separate
-## from your package, and that this way you are simply just using GNU
-## shtool. So, in this situation, there is no requirement that your
-## package itself is licensed under the GNU General Public License in
-## order to take advantage of GNU shtool.
-##
-
-##
-## Usage: shtool [<options>] [<cmd-name> [<cmd-options>] [<cmd-args>]]
-##
-## Available commands:
-## echo Print string with optional construct expansion
-## install Install a program, script or datafile
-## mkdir Make one or more directories
-## path Deal with program paths
-##
-## Not available commands (because module was not built-in):
-## mdate Pretty-print modification time of a file or dir
-## table Pretty-print a field-separated list as a table
-## prop Display progress with a running propeller
-## move Move files with simultaneous substitution
-## mkln Make link with calculation of relative paths
-## mkshadow Make a shadow tree through symbolic links
-## fixperm Fix file permissions inside a source tree
-## rotate Logfile rotation
-## tarball Roll distribution tarballs
-## subst Apply sed(1) substitution operations
-## guessos Simple operating system guesser
-## arx Extended archive command
-## slo Separate linker options by library class
-## scpp Sharing C Pre-Processor
-## version Maintain a version information file
-##
-
-if [ $# -eq 0 ]; then
- echo "$0:Error: invalid command line" 1>&2
- echo "$0:Hint: run \`$0 -h' for usage" 1>&2
- exit 1
-fi
-if [ ".$1" = ".-h" -o ".$1" = ".--help" ]; then
- echo "This is GNU shtool, version 1.6.2 (02-Nov-2002)"
- echo "Copyright (c) 1994-2002 Ralf S. Engelschall <rse@engelschall.com>"
- echo "Report bugs to <bug-shtool@gnu.org>"
- echo ''
- echo "Usage: shtool [<options>] [<cmd-name> [<cmd-options>] [<cmd-args>]]"
- echo ''
- echo 'Available global <options>:'
- echo ' -v, --version display shtool version information'
- echo ' -h, --help display shtool usage help page (this one)'
- echo ' -d, --debug display shell trace information'
- echo ' -r, --recreate recreate this shtool script via shtoolize'
- echo ''
- echo 'Available <cmd-name> [<cmd-options>] [<cmd-args>]:'
- echo ' echo [-n|--newline] [-e|--expand] [<str> ...]'
- echo ' install [-v|--verbose] [-t|--trace] [-d|--mkdir] [-c|--copy]'
- echo ' [-C|--compare-copy] [-s|--strip] [-m|--mode <mode>]'
- echo ' [-o|--owner <owner>] [-g|--group <group>] [-e|--exec'
- echo ' <sed-cmd>] <file> [<file> ...] <path>'
- echo ' mkdir [-t|--trace] [-f|--force] [-p|--parents] [-m|--mode'
- echo ' <mode>] [-o|--owner <owner>] [-g|--group <group>] <dir>'
- echo ' [<dir> ...]'
- echo ' path [-s|--suppress] [-r|--reverse] [-d|--dirname] [-b|--basename]'
- echo ' [-m|--magic] [-p|--path <path>] <str> [<str> ...]'
- echo ''
- echo 'Not available <cmd-name> (because module was not built-in):'
- echo ' mdate [-n|--newline] [-z|--zero] [-s|--shorten] [-d|--digits]'
- echo ' [-f|--field-sep <str>] [-o|--order <spec>] <path>'
- echo ' table [-F|--field-sep <sep>] [-w|--width <width>] [-c|--columns'
- echo ' <cols>] [-s|--strip <strip>] <str><sep><str>...'
- echo ' prop [-p|--prefix <str>]'
- echo ' move [-v|--verbose] [-t|--trace] [-e|--expand] [-p|--preserve]'
- echo ' <src-file> <dst-file>'
- echo ' mkln [-t|--trace] [-f|--force] [-s|--symbolic] <src-path>'
- echo ' [<src-path> ...] <dst-path>'
- echo ' mkshadow [-v|--verbose] [-t|--trace] [-a|--all] <src-dir> <dst-dir>'
- echo ' fixperm [-v|--verbose] [-t|--trace] <path> [<path> ...]'
- echo ' rotate [-v|--verbose] [-t|--trace] [-f|--force] [-n|--num-files'
- echo ' <count>] [-s|--size <size>] [-c|--copy] [-r|--remove]'
- echo ' [-a|--archive-dir <dir>] [-z|--compress [<tool>:]<level>]'
- echo ' [-b|--background] [-d|--delay] [-p|--pad <len>] [-o|--owner'
- echo ' <owner>] [-g|--group <group>] [-m|--mode <mode>] [-M|--migrate'
- echo ' <cmd>] [-P|--prolog <cmd>] [-E|--epilog <cmd>] <file> [...]'
- echo ' tarball [-t|--trace] [-v|--verbose] [-o|--output <tarball>]'
- echo ' [-c|--compress <prog>] [-d|--directory <dir>] [-u|--user'
- echo ' <user>] [-g|--group <group>] [-e|--exclude <pattern>]'
- echo ' <path> [<path> ...]'
- echo ' subst [-v|--verbose] [-t|--trace] [-n|--nop] [-s|--stealth]'
- echo ' [-i|--interactive] [-b|--backup <ext>] [-e|--exec <cmd>]'
- echo ' [-f|--file <cmd-file>] [<file>] [...]'
- echo ' guessos '
- echo ' arx [-t|--trace] [-C|--command <cmd>] <op> <archive> [<file>'
- echo ' ...]'
- echo ' slo [-p|--prefix <str>] -- -L<dir> -l<lib> [-L<dir> -l<lib>'
- echo ' ...]'
- echo ' scpp [-v|--verbose] [-p|--preserve] [-f|--filter <filter>]'
- echo ' [-o|--output <ofile>] [-t|--template <tfile>] [-M|--mark'
- echo ' <mark>] [-D|--define <dname>] [-C|--class <cname>]'
- echo ' <file> [<file> ...]'
- echo ' version [-l|--language <lang>] [-n|--name <name>] [-p|--prefix'
- echo ' <prefix>] [-s|--set <version>] [-e|--edit] [-i|--increase'
- echo ' <knob>] [-d|--display <type>] <file>'
- echo ''
- exit 0
-fi
-if [ ".$1" = ".-v" -o ".$1" = ."--version" ]; then
- echo "GNU shtool 1.6.2 (02-Nov-2002)"
- exit 0
-fi
-if [ ".$1" = ".-r" -o ".$1" = ."--recreate" ]; then
- shtoolize -oshtool echo install mkdir path
- exit 0
-fi
-if [ ".$1" = ".-d" -o ".$1" = ."--debug" ]; then
- shift
- set -x
-fi
-name=`echo "$0" | sed -e 's;.*/\([^/]*\)$;\1;' -e 's;-sh$;;' -e 's;\.sh$;;'`
-case "$name" in
- echo|install|mkdir|path )
- # implicit tool command selection
- tool="$name"
- ;;
- * )
- # explicit tool command selection
- tool="$1"
- shift
- ;;
-esac
-arg_spec=""
-opt_spec=""
-gen_tmpfile=no
-
-##
-## DISPATCH INTO SCRIPT PROLOG
-##
-
-case $tool in
- echo )
- str_tool="echo"
- str_usage="[-n|--newline] [-e|--expand] [<str> ...]"
- arg_spec="0+"
- opt_spec="n.e."
- opt_alias="n:newline,e:expand"
- opt_n=no
- opt_e=no
- ;;
- install )
- str_tool="install"
- str_usage="[-v|--verbose] [-t|--trace] [-d|--mkdir] [-c|--copy] [-C|--compare-copy] [-s|--strip] [-m|--mode <mode>] [-o|--owner <owner>] [-g|--group <group>] [-e|--exec <sed-cmd>] <file> [<file> ...] <path>"
- arg_spec="1+"
- opt_spec="v.t.d.c.C.s.m:o:g:e+"
- opt_alias="v:verbose,t:trace,d:mkdir,c:copy,C:compare-copy,s:strip,m:mode,o:owner,g:group,e:exec"
- opt_v=no
- opt_t=no
- opt_d=no
- opt_c=no
- opt_C=no
- opt_s=no
- opt_m="0755"
- opt_o=""
- opt_g=""
- opt_e=""
- ;;
- mkdir )
- str_tool="mkdir"
- str_usage="[-t|--trace] [-f|--force] [-p|--parents] [-m|--mode <mode>] [-o|--owner <owner>] [-g|--group <group>] <dir> [<dir> ...]"
- arg_spec="1+"
- opt_spec="t.f.p.m:o:g:"
- opt_alias="t:trace,f:force,p:parents,m:mode,o:owner,g:group"
- opt_t=no
- opt_f=no
- opt_p=no
- opt_m=""
- opt_o=""
- opt_g=""
- ;;
- path )
- str_tool="path"
- str_usage="[-s|--suppress] [-r|--reverse] [-d|--dirname] [-b|--basename] [-m|--magic] [-p|--path <path>] <str> [<str> ...]"
- gen_tmpfile=yes
- arg_spec="1+"
- opt_spec="s.r.d.b.m.p:"
- opt_alias="s:suppress,r:reverse,d:dirname,b:basename,m:magic,p:path"
- opt_s=no
- opt_r=no
- opt_d=no
- opt_b=no
- opt_m=no
- opt_p="$PATH"
- ;;
- -* )
- echo "$0:Error: unknown option \`$tool'" 2>&1
- echo "$0:Hint: run \`$0 -h' for usage" 2>&1
- exit 1
- ;;
- * )
- echo "$0:Error: unknown command \`$tool'" 2>&1
- echo "$0:Hint: run \`$0 -h' for usage" 2>&1
- exit 1
- ;;
-esac
-
-##
-## COMMON UTILITY CODE
-##
-
-# commonly used ASCII values
-ASC_TAB=" "
-ASC_NL="
-"
-
-# determine name of tool
-if [ ".$tool" != . ]; then
- # used inside shtool script
- toolcmd="$0 $tool"
- toolcmdhelp="shtool $tool"
- msgprefix="shtool:$tool"
-else
- # used as standalone script
- toolcmd="$0"
- toolcmdhelp="sh $0"
- msgprefix="$str_tool"
-fi
-
-# parse argument specification string
-eval `echo $arg_spec |\
- sed -e 's/^\([0-9]*\)\([+=]\)/arg_NUMS=\1; arg_MODE=\2/'`
-
-# parse option specification string
-eval `echo h.$opt_spec |\
- sed -e 's/\([a-zA-Z0-9]\)\([.:+]\)/opt_MODE_\1=\2;/g'`
-
-# parse option alias string
-eval `echo h:help,$opt_alias |\
- tr 'x-' 'x_' | sed -e 's/\([a-zA-Z0-9]\):\([^,]*\),*/opt_ALIAS_\2=\1;/g'`
-
-# interate over argument line
-opt_PREV=''
-while [ $# -gt 0 ]; do
- # special option stops processing
- if [ ".$1" = ".--" ]; then
- shift
- break
- fi
-
- # determine option and argument
- opt_ARG_OK=no
- if [ ".$opt_PREV" != . ]; then
- # merge previous seen option with argument
- opt_OPT="$opt_PREV"
- opt_ARG="$1"
- opt_ARG_OK=yes
- opt_PREV=''
- else
- # split argument into option and argument
- case "$1" in
- --[a-zA-Z0-9]*=*)
- eval `echo "x$1" |\
- sed -e 's/^x--\([a-zA-Z0-9-]*\)=\(.*\)$/opt_OPT="\1";opt_ARG="\2"/'`
- opt_STR=`echo $opt_OPT | tr 'x-' 'x_'`
- eval "opt_OPT=\${opt_ALIAS_${opt_STR}-${opt_OPT}}"
- ;;
- --[a-zA-Z0-9]*)
- opt_OPT=`echo "x$1" | cut -c4-`
- opt_STR=`echo $opt_OPT | tr 'x-' 'x_'`
- eval "opt_OPT=\${opt_ALIAS_${opt_STR}-${opt_OPT}}"
- opt_ARG=''
- ;;
- -[a-zA-Z0-9]*)
- eval `echo "x$1" |\
- sed -e 's/^x-\([a-zA-Z0-9]\)/opt_OPT="\1";/' \
- -e 's/";\(.*\)$/"; opt_ARG="\1"/'`
- ;;
- -[a-zA-Z0-9])
- opt_OPT=`echo "x$1" | cut -c3-`
- opt_ARG=''
- ;;
- *)
- break
- ;;
- esac
- fi
-
- # eat up option
- shift
-
- # determine whether option needs an argument
- eval "opt_MODE=\$opt_MODE_${opt_OPT}"
- if [ ".$opt_ARG" = . -a ".$opt_ARG_OK" != .yes ]; then
- if [ ".$opt_MODE" = ".:" -o ".$opt_MODE" = ".+" ]; then
- opt_PREV="$opt_OPT"
- continue
- fi
- fi
-
- # process option
- case $opt_MODE in
- '.' )
- # boolean option
- eval "opt_${opt_OPT}=yes"
- ;;
- ':' )
- # option with argument (multiple occurances override)
- eval "opt_${opt_OPT}=\"\$opt_ARG\""
- ;;
- '+' )
- # option with argument (multiple occurances append)
- eval "opt_${opt_OPT}=\"\$opt_${opt_OPT}\${ASC_NL}\$opt_ARG\""
- ;;
- * )
- echo "$msgprefix:Error: unknown option: \`$opt_OPT'" 1>&2
- echo "$msgprefix:Hint: run \`$toolcmdhelp -h' or \`man shtool' for details" 1>&2
- exit 1
- ;;
- esac
-done
-if [ ".$opt_PREV" != . ]; then
- echo "$msgprefix:Error: missing argument to option \`$opt_PREV'" 1>&2
- echo "$msgprefix:Hint: run \`$toolcmdhelp -h' or \`man shtool' for details" 1>&2
- exit 1
-fi
-
-# process help option
-if [ ".$opt_h" = .yes ]; then
- echo "Usage: $toolcmdhelp $str_usage"
- exit 0
-fi
-
-# complain about incorrect number of arguments
-case $arg_MODE in
- '=' )
- if [ $# -ne $arg_NUMS ]; then
- echo "$msgprefix:Error: invalid number of arguments (exactly $arg_NUMS expected)" 1>&2
- echo "$msgprefix:Hint: run \`$toolcmd -h' or \`man shtool' for details" 1>&2
- exit 1
- fi
- ;;
- '+' )
- if [ $# -lt $arg_NUMS ]; then
- echo "$msgprefix:Error: invalid number of arguments (at least $arg_NUMS expected)" 1>&2
- echo "$msgprefix:Hint: run \`$toolcmd -h' or \`man shtool' for details" 1>&2
- exit 1
- fi
- ;;
-esac
-
-# establish a temporary file on request
-if [ ".$gen_tmpfile" = .yes ]; then
- if [ ".$TMPDIR" != . ]; then
- tmpdir="$TMPDIR"
- elif [ ".$TEMPDIR" != . ]; then
- tmpdir="$TEMPDIR"
- else
- tmpdir="/tmp"
- fi
- tmpfile="$tmpdir/.shtool.$$"
- rm -f $tmpfile >/dev/null 2>&1
- touch $tmpfile
- chmod 600 $tmpfile
-fi
-
-##
-## DISPATCH INTO SCRIPT BODY
-##
-
-case $tool in
-
-echo )
- ##
- ## echo -- Print string with optional construct expansion
- ## Copyright (c) 1998-2002 Ralf S. Engelschall <rse@engelschall.com>
- ## Originally written for WML as buildinfo
- ##
-
- text="$*"
-
- # check for broken escape sequence expansion
- seo=''
- bytes=`echo '\1' | wc -c | awk '{ printf("%s", $1); }'`
- if [ ".$bytes" != .3 ]; then
- bytes=`echo -E '\1' | wc -c | awk '{ printf("%s", $1); }'`
- if [ ".$bytes" = .3 ]; then
- seo='-E'
- fi
- fi
-
- # check for existing -n option (to suppress newline)
- minusn=''
- bytes=`echo -n 123 2>/dev/null | wc -c | awk '{ printf("%s", $1); }'`
- if [ ".$bytes" = .3 ]; then
- minusn='-n'
- fi
-
- # determine terminal bold sequence
- term_bold=''
- term_norm=''
- if [ ".$opt_e" = .yes -a ".`echo $text | egrep '%[Bb]'`" != . ]; then
- case $TERM in
- # for the most important terminal types we directly know the sequences
- xterm|xterm*|vt220|vt220*)
- term_bold=`awk 'BEGIN { printf("%c%c%c%c", 27, 91, 49, 109); }' </dev/null 2>/dev/null`
- term_norm=`awk 'BEGIN { printf("%c%c%c", 27, 91, 109); }' </dev/null 2>/dev/null`
- ;;
- vt100|vt100*|cygwin)
- term_bold=`awk 'BEGIN { printf("%c%c%c%c%c%c", 27, 91, 49, 109, 0, 0); }' </dev/null 2>/dev/null`
- term_norm=`awk 'BEGIN { printf("%c%c%c%c%c", 27, 91, 109, 0, 0); }' </dev/null 2>/dev/null`
- ;;
- # for all others, we try to use a possibly existing `tput' or `tcout' utility
- * )
- paths=`echo $PATH | sed -e 's/:/ /g'`
- for tool in tput tcout; do
- for dir in $paths; do
- if [ -r "$dir/$tool" ]; then
- for seq in bold md smso; do # 'smso' is last
- bold="`$dir/$tool $seq 2>/dev/null`"
- if [ ".$bold" != . ]; then
- term_bold="$bold"
- break
- fi
- done
- if [ ".$term_bold" != . ]; then
- for seq in sgr0 me rmso init reset; do # 'reset' is last
- norm="`$dir/$tool $seq 2>/dev/null`"
- if [ ".$norm" != . ]; then
- term_norm="$norm"
- break
- fi
- done
- fi
- break
- fi
- done
- if [ ".$term_bold" != . -a ".$term_norm" != . ]; then
- break;
- fi
- done
- ;;
- esac
- if [ ".$term_bold" = . -o ".$term_norm" = . ]; then
- echo "$msgprefix:Warning: unable to determine terminal sequence for bold mode" 1>&2
- term_bold=''
- term_norm=''
- fi
- fi
-
- # determine user name
- username=''
- if [ ".$opt_e" = .yes -a ".`echo $text | egrep '%[uUgG]'`" != . ]; then
- username="$LOGNAME"
- if [ ".$username" = . ]; then
- username="$USER"
- if [ ".$username" = . ]; then
- username="`(whoami) 2>/dev/null |\
- awk '{ printf("%s", $1); }'`"
- if [ ".$username" = . ]; then
- username="`(who am i) 2>/dev/null |\
- awk '{ printf("%s", $1); }'`"
- if [ ".$username" = . ]; then
- username='unknown'
- fi
- fi
- fi
- fi
- fi
-
- # determine user id
- userid=''
- if [ ".$opt_e" = .yes -a ".`echo $text | egrep '%U'`" != . ]; then
- userid="`(id -u) 2>/dev/null`"
- if [ ".$userid" = . ]; then
- str="`(id) 2>/dev/null`"
- if [ ".`echo $str | grep '^uid[ ]*=[ ]*[0-9]*('`" != . ]; then
- userid=`echo $str | sed -e 's/^uid[ ]*=[ ]*//' -e 's/(.*//'`
- fi
- if [ ".$userid" = . ]; then
- userid=`egrep "^${username}:" /etc/passwd 2>/dev/null | \
- sed -e 's/[^:]*:[^:]*://' -e 's/:.*$//'`
- if [ ".$userid" = . ]; then
- userid=`(ypcat passwd) 2>/dev/null |
- egrep "^${username}:" | \
- sed -e 's/[^:]*:[^:]*://' -e 's/:.*$//'`
- if [ ".$userid" = . ]; then
- userid='?'
- fi
- fi
- fi
- fi
- fi
-
- # determine (primary) group id
- groupid=''
- if [ ".$opt_e" = .yes -a ".`echo $text | egrep '%[gG]'`" != . ]; then
- groupid=`egrep "^${username}:" /etc/passwd 2>/dev/null | \
- sed -e 's/[^:]*:[^:]*:[^:]*://' -e 's/:.*$//'`
- if [ ".$groupid" = . ]; then
- groupid=`(ypcat passwd) 2>/dev/null | egrep "^${username}:" | \
- sed -e 's/[^:]*:[^:]*:[^:]*://' -e 's/:.*$//'`
- if [ ".$groupid" = . ]; then
- groupid='?'
- fi
- fi
- fi
-
- # determine (primary) group name
- groupname=''
- if [ ".$opt_e" = .yes -a ".`echo $text | egrep '%g'`" != . ]; then
- groupname=`egrep "^[^:]*:[^:]*:${groupid}:" /etc/group 2>/dev/null | \
- sed -e 's/:.*$//'`
- if [ ".$groupname" = . ]; then
- groupname=`(ypcat group) 2>/dev/null | \
- egrep "^[^:]*:[^:]*:${groupid}:" | \
- sed -e 's/:.*$//'`
- if [ ".$groupname" = . ]; then
- groupname='?'
- fi
- fi
- fi
-
- # determine host and domain name
- hostname=''
- domainname=''
- if [ ".$opt_e" = .yes -a ".`echo $text | egrep '%h'`" != . ]; then
- hostname="`(uname -n) 2>/dev/null |\
- awk '{ printf("%s", $1); }'`"
- if [ ".$hostname" = . ]; then
- hostname="`(hostname) 2>/dev/null |\
- awk '{ printf("%s", $1); }'`"
- if [ ".$hostname" = . ]; then
- hostname='unknown'
- fi
- fi
- case $hostname in
- *.* )
- domainname=".`echo $hostname | cut -d. -f2-`"
- hostname="`echo $hostname | cut -d. -f1`"
- ;;
- esac
- fi
- if [ ".$opt_e" = .yes -a ".`echo $text | egrep '%d'`" != . ]; then
- if [ ".$domainname" = . ]; then
- if [ -f /etc/resolv.conf ]; then
- domainname="`egrep '^[ ]*domain' /etc/resolv.conf | sed -e 'q' |\
- sed -e 's/.*domain//' \
- -e 's/^[ ]*//' -e 's/^ *//' -e 's/^ *//' \
- -e 's/^\.//' -e 's/^/./' |\
- awk '{ printf("%s", $1); }'`"
- if [ ".$domainname" = . ]; then
- domainname="`egrep '^[ ]*search' /etc/resolv.conf | sed -e 'q' |\
- sed -e 's/.*search//' \
- -e 's/^[ ]*//' -e 's/^ *//' -e 's/^ *//' \
- -e 's/ .*//' -e 's/ .*//' \
- -e 's/^\.//' -e 's/^/./' |\
- awk '{ printf("%s", $1); }'`"
- fi
- fi
- fi
- fi
-
- # determine current time
- time_day=''
- time_month=''
- time_year=''
- time_monthname=''
- if [ ".$opt_e" = .yes -a ".`echo $text | egrep '%[DMYm]'`" != . ]; then
- time_day=`date '+%d'`
- time_month=`date '+%m'`
- time_year=`date '+%Y' 2>/dev/null`
- if [ ".$time_year" = . ]; then
- time_year=`date '+%y'`
- case $time_year in
- [5-9][0-9]) time_year="19$time_year" ;;
- [0-4][0-9]) time_year="20$time_year" ;;
- esac
- fi
- case $time_month in
- 1|01) time_monthname='Jan' ;;
- 2|02) time_monthname='Feb' ;;
- 3|03) time_monthname='Mar' ;;
- 4|04) time_monthname='Apr' ;;
- 5|05) time_monthname='May' ;;
- 6|06) time_monthname='Jun' ;;
- 7|07) time_monthname='Jul' ;;
- 8|08) time_monthname='Aug' ;;
- 9|09) time_monthname='Sep' ;;
- 10) time_monthname='Oct' ;;
- 11) time_monthname='Nov' ;;
- 12) time_monthname='Dec' ;;
- esac
- fi
-
- # expand special ``%x'' constructs
- if [ ".$opt_e" = .yes ]; then
- text=`echo $seo "$text" |\
- sed -e "s/%B/${term_bold}/g" \
- -e "s/%b/${term_norm}/g" \
- -e "s/%u/${username}/g" \
- -e "s/%U/${userid}/g" \
- -e "s/%g/${groupname}/g" \
- -e "s/%G/${groupid}/g" \
- -e "s/%h/${hostname}/g" \
- -e "s/%d/${domainname}/g" \
- -e "s/%D/${time_day}/g" \
- -e "s/%M/${time_month}/g" \
- -e "s/%Y/${time_year}/g" \
- -e "s/%m/${time_monthname}/g" 2>/dev/null`
- fi
-
- # create output
- if [ .$opt_n = .no ]; then
- echo $seo "$text"
- else
- # the harder part: echo -n is best, because
- # awk may complain about some \xx sequences.
- if [ ".$minusn" != . ]; then
- echo $seo $minusn "$text"
- else
- echo dummy | awk '{ printf("%s", TEXT); }' TEXT="$text"
- fi
- fi
- ;;
-
-install )
- ##
- ## install -- Install a program, script or datafile
- ## Copyright (c) 1997-2002 Ralf S. Engelschall <rse@engelschall.com>
- ## Originally written for shtool
- ##
-
- # special case: "shtool install -d <dir> [...]" internally
- # maps to "shtool mkdir -f -p -m 755 <dir> [...]"
- if [ "$opt_d" = yes ]; then
- cmd="$0 mkdir -f -p -m 755"
- if [ ".$opt_o" != . ]; then
- cmd="$cmd -o '$opt_o'"
- fi
- if [ ".$opt_g" != . ]; then
- cmd="$cmd -g '$opt_g'"
- fi
- if [ ".$opt_v" = .yes ]; then
- cmd="$cmd -v"
- fi
- if [ ".$opt_t" = .yes ]; then
- cmd="$cmd -t"
- fi
- for dir in "$@"; do
- eval "$cmd $dir" || exit $?
- done
- exit 0
- fi
-
- # determine source(s) and destination
- argc=$#
- srcs=""
- while [ $# -gt 1 ]; do
- srcs="$srcs $1"
- shift
- done
- dstpath="$1"
-
- # type check for destination
- dstisdir=0
- if [ -d $dstpath ]; then
- dstpath=`echo "$dstpath" | sed -e 's:/$::'`
- dstisdir=1
- fi
-
- # consistency check for destination
- if [ $argc -gt 2 -a $dstisdir = 0 ]; then
- echo "$msgprefix:Error: multiple sources require destination to be directory" 1>&2
- exit 1
- fi
-
- # iterate over all source(s)
- for src in $srcs; do
- dst=$dstpath
-
- # if destination is a directory, append the input filename
- if [ $dstisdir = 1 ]; then
- dstfile=`echo "$src" | sed -e 's;.*/\([^/]*\)$;\1;'`
- dst="$dst/$dstfile"
- fi
-
- # check for correct arguments
- if [ ".$src" = ".$dst" ]; then
- echo "$msgprefix:Warning: source and destination are the same - skipped" 1>&2
- continue
- fi
- if [ -d "$src" ]; then
- echo "$msgprefix:Warning: source \`$src' is a directory - skipped" 1>&2
- continue
- fi
-
- # make a temp file name in the destination directory
- dsttmp=`echo $dst |\
- sed -e 's;[^/]*$;;' -e 's;\(.\)/$;\1;' -e 's;^$;.;' \
- -e "s;\$;/#INST@$$#;"`
-
- # verbosity
- if [ ".$opt_v" = .yes ]; then
- echo "$src -> $dst" 1>&2
- fi
-
- # copy or move the file name to the temp name
- # (because we might be not allowed to change the source)
- if [ ".$opt_C" = .yes ]; then
- opt_c=yes
- fi
- if [ ".$opt_c" = .yes ]; then
- if [ ".$opt_t" = .yes ]; then
- echo "cp $src $dsttmp" 1>&2
- fi
- cp $src $dsttmp || exit $?
- else
- if [ ".$opt_t" = .yes ]; then
- echo "mv $src $dsttmp" 1>&2
- fi
- mv $src $dsttmp || exit $?
- fi
-
- # adjust the target file
- if [ ".$opt_e" != . ]; then
- sed='sed'
- OIFS="$IFS"; IFS="$ASC_NL"; set -- $opt_e; IFS="$OIFS"
- for e
- do
- sed="$sed -e '$e'"
- done
- cp $dsttmp $dsttmp.old
- eval "$sed <$dsttmp.old >$dsttmp" || exit $?
- rm -f $dsttmp.old
- fi
- if [ ".$opt_s" = .yes ]; then
- if [ ".$opt_t" = .yes ]; then
- echo "strip $dsttmp" 1>&2
- fi
- strip $dsttmp || exit $?
- fi
- if [ ".$opt_o" != . ]; then
- if [ ".$opt_t" = .yes ]; then
- echo "chown $opt_o $dsttmp" 1>&2
- fi
- chown $opt_o $dsttmp || exit $?
- fi
- if [ ".$opt_g" != . ]; then
- if [ ".$opt_t" = .yes ]; then
- echo "chgrp $opt_g $dsttmp" 1>&2
- fi
- chgrp $opt_g $dsttmp || exit $?
- fi
- if [ ".$opt_m" != ".-" ]; then
- if [ ".$opt_t" = .yes ]; then
- echo "chmod $opt_m $dsttmp" 1>&2
- fi
- chmod $opt_m $dsttmp || exit $?
- fi
-
- # determine whether to do a quick install
- # (has to be done _after_ the strip was already done)
- quick=no
- if [ ".$opt_C" = .yes ]; then
- if [ -r $dst ]; then
- if cmp -s $src $dst; then
- quick=yes
- fi
- fi
- fi
-
- # finally, install the file to the real destination
- if [ $quick = yes ]; then
- if [ ".$opt_t" = .yes ]; then
- echo "rm -f $dsttmp" 1>&2
- fi
- rm -f $dsttmp
- else
- if [ ".$opt_t" = .yes ]; then
- echo "rm -f $dst && mv $dsttmp $dst" 1>&2
- fi
- rm -f $dst && mv $dsttmp $dst
- fi
- done
- ;;
-
-mkdir )
- ##
- ## mkdir -- Make one or more directories
- ## Copyright (c) 1996-2002 Ralf S. Engelschall <rse@engelschall.com>
- ## Originally written for public domain by Noah Friedman <friedman@prep.ai.mit.edu>
- ## Cleaned up and enhanced for shtool
- ##
-
- errstatus=0
- for p in ${1+"$@"}; do
- # if the directory already exists...
- if [ -d "$p" ]; then
- if [ ".$opt_f" = .no -a ".$opt_p" = .no ]; then
- echo "$msgprefix:Error: directory already exists: $p" 1>&2
- errstatus=1
- break
- else
- continue
- fi
- fi
- # if the directory has to be created...
- if [ ".$opt_p" = .no ]; then
- if [ ".$opt_t" = .yes ]; then
- echo "mkdir $p" 1>&2
- fi
- mkdir $p || errstatus=$?
- if [ ".$opt_o" != . ]; then
- if [ ".$opt_t" = .yes ]; then
- echo "chown $opt_o $p" 1>&2
- fi
- chown $opt_o $p || errstatus=$?
- fi
- if [ ".$opt_g" != . ]; then
- if [ ".$opt_t" = .yes ]; then
- echo "chgrp $opt_g $p" 1>&2
- fi
- chgrp $opt_g $p || errstatus=$?
- fi
- if [ ".$opt_m" != . ]; then
- if [ ".$opt_t" = .yes ]; then
- echo "chmod $opt_m $p" 1>&2
- fi
- chmod $opt_m $p || errstatus=$?
- fi
- else
- # the smart situation
- set fnord `echo ":$p" |\
- sed -e 's/^:\//%/' \
- -e 's/^://' \
- -e 's/\// /g' \
- -e 's/^%/\//'`
- shift
- pathcomp=''
- for d in ${1+"$@"}; do
- pathcomp="$pathcomp$d"
- case "$pathcomp" in
- -* ) pathcomp="./$pathcomp" ;;
- esac
- if [ ! -d "$pathcomp" ]; then
- if [ ".$opt_t" = .yes ]; then
- echo "mkdir $pathcomp" 1>&2
- fi
- mkdir $pathcomp || errstatus=$?
- if [ ".$opt_o" != . ]; then
- if [ ".$opt_t" = .yes ]; then
- echo "chown $opt_o $pathcomp" 1>&2
- fi
- chown $opt_o $pathcomp || errstatus=$?
- fi
- if [ ".$opt_g" != . ]; then
- if [ ".$opt_t" = .yes ]; then
- echo "chgrp $opt_g $pathcomp" 1>&2
- fi
- chgrp $opt_g $pathcomp || errstatus=$?
- fi
- if [ ".$opt_m" != . ]; then
- if [ ".$opt_t" = .yes ]; then
- echo "chmod $opt_m $pathcomp" 1>&2
- fi
- chmod $opt_m $pathcomp || errstatus=$?
- fi
- fi
- pathcomp="$pathcomp/"
- done
- fi
- done
- exit $errstatus
- ;;
-
-path )
- ##
- ## path -- Deal with program paths
- ## Copyright (c) 1998-2002 Ralf S. Engelschall <rse@engelschall.com>
- ## Originally written for Apache
- ##
-
- namelist="$*"
-
- # check whether the test command supports the -x option
- if [ -x /bin/sh ] 2>/dev/null; then
- minusx="-x"
- else
- minusx="-r"
- fi
-
- # split path string
- paths="`echo $opt_p |\
- sed -e 's/^:/.:/' \
- -e 's/::/:.:/g' \
- -e 's/:$/:./' \
- -e 's/:/ /g'`"
-
- # SPECIAL REQUEST
- # translate forward to reverse path
- if [ ".$opt_r" = .yes ]; then
- if [ "x$namelist" = "x." ]; then
- rp='.'
- else
- rp=''
- for pe in `IFS="$IFS/"; echo $namelist`; do
- rp="../$rp"
- done
- fi
- echo $rp | sed -e 's:/$::'
- exit 0
- fi
-
- # SPECIAL REQUEST
- # strip out directory or base name
- if [ ".$opt_d" = .yes ]; then
- echo "$namelist" |\
- sed -e 's;[^/]*$;;' -e 's;\(.\)/$;\1;'
- exit 0
- fi
- if [ ".$opt_b" = .yes ]; then
- echo "$namelist" |\
- sed -e 's;.*/\([^/]*\)$;\1;'
- exit 0
- fi
-
- # MAGIC SITUATION
- # Perl Interpreter (perl)
- if [ ".$opt_m" = .yes -a ".$namelist" = .perl ]; then
- rm -f $tmpfile >/dev/null 2>&1
- touch $tmpfile
- found=0
- pc=99
- for dir in $paths; do
- dir=`echo $dir | sed -e 's;/*$;;'`
- nc=99
- for name in perl perl5 miniperl; do
- if [ $minusx "$dir/$name" -a ! -d "$dir/$name" ]; then
- perl="$dir/$name"
- pv=`$perl -e 'printf("%.3f", $]);'`
- echo "$pv:$pc:$nc:$perl" >>$tmpfile
- found=1
- fi
- nc=`expr $nc - 1`
- done
- pc=`expr $pc - 1`
- done
- if [ $found = 1 ]; then
- perl="`cat $tmpfile | sort -r -u | sed -e 'q' | cut -d: -f4`"
- rm -f $tmpfile >/dev/null 2>&1
- echo "$perl"
- exit 0
- fi
- rm -f $tmpfile >/dev/null 2>&1
- exit 1
- fi
-
- # MAGIC SITUATION
- # C pre-processor (cpp)
- if [ ".$opt_m" = .yes -a ".$namelist" = .cpp ]; then
- echo >$tmpfile.c "#include <assert.h>"
- echo >>$tmpfile.c "Syntax Error"
- # 1. try the standard cc -E approach
- cpp="${CC-cc} -E"
- (eval "$cpp $tmpfile.c >/dev/null") 2>$tmpfile.out
- my_error=`grep -v '^ *+' $tmpfile.out`
- if [ ".$my_error" != . ]; then
- # 2. try the cc -E approach and GCC's -traditional-ccp option
- cpp="${CC-cc} -E -traditional-cpp"
- (eval "$cpp $tmpfile.c >/dev/null") 2>$tmpfile.out
- my_error=`grep -v '^ *+' $tmpfile.out`
- if [ ".$my_error" != . ]; then
- # 3. try a standalone cpp command in path and lib dirs
- for path in $paths /lib /usr/lib /usr/local/lib; do
- path=`echo $path | sed -e 's;/*$;;'`
- if [ $minusx "$path/cpp" -a ! -d "$path/cpp" ]; then
- cpp="$path/cpp"
- break
- fi
- done
- if [ ".$cpp" != . ]; then
- (eval "$cpp $tmpfile.c >/dev/null") 2>$tmpfile.out
- my_error=`grep -v '^ *+' $tmpfile.out`
- if [ ".$my_error" != . ]; then
- # ok, we gave up...
- cpp=''
- fi
- fi
- fi
- fi
- rm -f $tmpfile >/dev/null 2>&1
- rm -f $tmpfile.c $tmpfile.out >/dev/null 2>&1
- if [ ".$cpp" != . ]; then
- echo "$cpp"
- exit 0
- fi
- exit 1
- fi
-
- # STANDARD SITUATION
- # iterate over names
- for name in $namelist; do
- # iterate over paths
- for path in $paths; do
- path=`echo $path | sed -e 's;/*$;;'`
- if [ $minusx "$path/$name" -a ! -d "$path/$name" ]; then
- if [ ".$opt_s" != .yes ]; then
- echo "$path/$name"
- fi
- exit 0
- fi
- done
- done
- exit 1
- ;;
-
-esac
-
-exit 0
-
-##EOF##
diff --git a/buildconf b/buildconf
deleted file mode 100755
index 95aa69c1ba..0000000000
--- a/buildconf
+++ /dev/null
@@ -1,64 +0,0 @@
-#!/bin/sh
-# $Id$
-
-eval `grep '^EXTRA_VERSION=' configure.in`
-case "$EXTRA_VERSION" in
- *-dev)
- dev=1
- ;;
- *)
- dev=0
- ;;
-esac
-
-devok=0
-
-while test $# -gt 0; do
- if test "$1" = "--copy"; then
- automake_flags=--copy
- fi
-
- if test "$1" = "--force"; then
- devok=1
- echo "Forcing buildconf"
- fi
-
- shift
-done
-
-if test "$dev" = "0" -a "$devok" = "0"; then
- echo "You should not run buildconf in a release package."
- echo "use buildconf --force to override this check."
- exit 1
-fi
-
-if test -z "$ZENDDIR"; then
- if grep "PHP_MAJOR_VERSION 5" main/php_version.h >/dev/null; then
- v=5
- else
- v=4
- fi
-
- if test "$v" = "5"; then
- if test -r "Zend/OBJECTS2_HOWTO"; then
- :
- else
- mv Zend ZendEngine1 2>/dev/null
- mv ZendEngine2 Zend
- fi
- else
- if test -r "Zend/zend_execute_globals.h"; then
- :
- else
- mv Zend ZendEngine2 2>/dev/null
- mv ZendEngine1 Zend
- fi
- fi
-
- ZENDDIR=Zend
- echo "using default Zend directory"
-fi
-
-rm -f generated_lists
-
-${MAKE:-make} -s -f build/build.mk AMFLAGS="$automake_flags" ZENDDIR="$ZENDDIR"
diff --git a/buildconf.bat b/buildconf.bat
deleted file mode 100644
index a21732604f..0000000000
--- a/buildconf.bat
+++ /dev/null
@@ -1,2 +0,0 @@
-@echo off
-cscript /nologo win32\build\buildconf.js
diff --git a/config.guess b/config.guess
deleted file mode 100644
index 5145e35717..0000000000
--- a/config.guess
+++ /dev/null
@@ -1,1363 +0,0 @@
-#! /bin/sh
-# Attempt to guess a canonical system name.
-# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
-# 2000, 2001, 2002 Free Software Foundation, Inc.
-
-timestamp='2002-10-21'
-
-# This file is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful, but
-# WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-#
-# As a special exception to the GNU General Public License, if you
-# distribute this file as part of a program that contains a
-# configuration script generated by Autoconf, you may include it under
-# the same distribution terms that you use for the rest of that program.
-
-# Originally written by Per Bothner <per@bothner.com>.
-# Please send patches to <config-patches@gnu.org>. Submit a context
-# diff and a properly formatted ChangeLog entry.
-#
-# This script attempts to guess a canonical system name similar to
-# config.sub. If it succeeds, it prints the system name on stdout, and
-# exits with 0. Otherwise, it exits with 1.
-#
-# The plan is that this can be called by configure scripts if you
-# don't specify an explicit build system type.
-
-me=`echo "$0" | sed -e 's,.*/,,'`
-
-usage="\
-Usage: $0 [OPTION]
-
-Output the configuration name of the system \`$me' is run on.
-
-Operation modes:
- -h, --help print this help, then exit
- -t, --time-stamp print date of last modification, then exit
- -v, --version print version number, then exit
-
-Report bugs and patches to <config-patches@gnu.org>."
-
-version="\
-GNU config.guess ($timestamp)
-
-Originally written by Per Bothner.
-Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001
-Free Software Foundation, Inc.
-
-This is free software; see the source for copying conditions. There is NO
-warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
-
-help="
-Try \`$me --help' for more information."
-
-# Parse command line
-while test $# -gt 0 ; do
- case $1 in
- --time-stamp | --time* | -t )
- echo "$timestamp" ; exit 0 ;;
- --version | -v )
- echo "$version" ; exit 0 ;;
- --help | --h* | -h )
- echo "$usage"; exit 0 ;;
- -- ) # Stop option processing
- shift; break ;;
- - ) # Use stdin as input.
- break ;;
- -* )
- echo "$me: invalid option $1$help" >&2
- exit 1 ;;
- * )
- break ;;
- esac
-done
-
-if test $# != 0; then
- echo "$me: too many arguments$help" >&2
- exit 1
-fi
-
-trap 'exit 1' 1 2 15
-
-# CC_FOR_BUILD -- compiler used by this script. Note that the use of a
-# compiler to aid in system detection is discouraged as it requires
-# temporary files to be created and, as you can see below, it is a
-# headache to deal with in a portable fashion.
-
-# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still
-# use `HOST_CC' if defined, but it is deprecated.
-
-# This shell variable is my proudest work .. or something. --bje
-
-set_cc_for_build='tmpdir=${TMPDIR-/tmp}/config-guess-$$ ;
-(old=`umask` && umask 077 && mkdir $tmpdir && umask $old && unset old)
- || (echo "$me: cannot create $tmpdir" >&2 && exit 1) ;
-dummy=$tmpdir/dummy ;
-files="$dummy.c $dummy.o $dummy.rel $dummy" ;
-trap '"'"'rm -f $files; rmdir $tmpdir; exit 1'"'"' 1 2 15 ;
-case $CC_FOR_BUILD,$HOST_CC,$CC in
- ,,) echo "int x;" > $dummy.c ;
- for c in cc gcc c89 c99 ; do
- if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then
- CC_FOR_BUILD="$c"; break ;
- fi ;
- done ;
- rm -f $files ;
- if test x"$CC_FOR_BUILD" = x ; then
- CC_FOR_BUILD=no_compiler_found ;
- fi
- ;;
- ,,*) CC_FOR_BUILD=$CC ;;
- ,*,*) CC_FOR_BUILD=$HOST_CC ;;
-esac ;
-unset files'
-
-# This is needed to find uname on a Pyramid OSx when run in the BSD universe.
-# (ghazi@noc.rutgers.edu 1994-08-24)
-if (test -f /.attbin/uname) >/dev/null 2>&1 ; then
- PATH=$PATH:/.attbin ; export PATH
-fi
-
-UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown
-UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown
-UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown
-UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown
-
-# Note: order is significant - the case branches are not exclusive.
-
-case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
- *:NetBSD:*:*)
- # NetBSD (nbsd) targets should (where applicable) match one or
- # more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*,
- # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently
- # switched to ELF, *-*-netbsd* would select the old
- # object file format. This provides both forward
- # compatibility and a consistent mechanism for selecting the
- # object file format.
- #
- # Note: NetBSD doesn't particularly care about the vendor
- # portion of the name. We always set it to "unknown".
- sysctl="sysctl -n hw.machine_arch"
- UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \
- /usr/sbin/$sysctl 2>/dev/null || echo unknown)`
- case "${UNAME_MACHINE_ARCH}" in
- armeb) machine=armeb-unknown ;;
- arm*) machine=arm-unknown ;;
- sh3el) machine=shl-unknown ;;
- sh3eb) machine=sh-unknown ;;
- *) machine=${UNAME_MACHINE_ARCH}-unknown ;;
- esac
- # The Operating System including object format, if it has switched
- # to ELF recently, or will in the future.
- case "${UNAME_MACHINE_ARCH}" in
- arm*|i386|m68k|ns32k|sh3*|sparc|vax)
- eval $set_cc_for_build
- if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \
- | grep __ELF__ >/dev/null
- then
- # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout).
- # Return netbsd for either. FIX?
- os=netbsd
- else
- os=netbsdelf
- fi
- ;;
- *)
- os=netbsd
- ;;
- esac
- # The OS release
- release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`
- # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM:
- # contains redundant information, the shorter form:
- # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used.
- echo "${machine}-${os}${release}"
- exit 0 ;;
- amiga:OpenBSD:*:*)
- echo m68k-unknown-openbsd${UNAME_RELEASE}
- exit 0 ;;
- arc:OpenBSD:*:*)
- echo mipsel-unknown-openbsd${UNAME_RELEASE}
- exit 0 ;;
- hp300:OpenBSD:*:*)
- echo m68k-unknown-openbsd${UNAME_RELEASE}
- exit 0 ;;
- mac68k:OpenBSD:*:*)
- echo m68k-unknown-openbsd${UNAME_RELEASE}
- exit 0 ;;
- macppc:OpenBSD:*:*)
- echo powerpc-unknown-openbsd${UNAME_RELEASE}
- exit 0 ;;
- mvme68k:OpenBSD:*:*)
- echo m68k-unknown-openbsd${UNAME_RELEASE}
- exit 0 ;;
- mvme88k:OpenBSD:*:*)
- echo m88k-unknown-openbsd${UNAME_RELEASE}
- exit 0 ;;
- mvmeppc:OpenBSD:*:*)
- echo powerpc-unknown-openbsd${UNAME_RELEASE}
- exit 0 ;;
- pmax:OpenBSD:*:*)
- echo mipsel-unknown-openbsd${UNAME_RELEASE}
- exit 0 ;;
- sgi:OpenBSD:*:*)
- echo mipseb-unknown-openbsd${UNAME_RELEASE}
- exit 0 ;;
- sun3:OpenBSD:*:*)
- echo m68k-unknown-openbsd${UNAME_RELEASE}
- exit 0 ;;
- wgrisc:OpenBSD:*:*)
- echo mipsel-unknown-openbsd${UNAME_RELEASE}
- exit 0 ;;
- *:OpenBSD:*:*)
- echo ${UNAME_MACHINE}-unknown-openbsd${UNAME_RELEASE}
- exit 0 ;;
- alpha:OSF1:*:*)
- if test $UNAME_RELEASE = "V4.0"; then
- UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'`
- fi
- # A Vn.n version is a released version.
- # A Tn.n version is a released field test version.
- # A Xn.n version is an unreleased experimental baselevel.
- # 1.2 uses "1.2" for uname -r.
- eval $set_cc_for_build
- cat <<EOF >$dummy.s
- .data
-\$Lformat:
- .byte 37,100,45,37,120,10,0 # "%d-%x\n"
-
- .text
- .globl main
- .align 4
- .ent main
-main:
- .frame \$30,16,\$26,0
- ldgp \$29,0(\$27)
- .prologue 1
- .long 0x47e03d80 # implver \$0
- lda \$2,-1
- .long 0x47e20c21 # amask \$2,\$1
- lda \$16,\$Lformat
- mov \$0,\$17
- not \$1,\$18
- jsr \$26,printf
- ldgp \$29,0(\$26)
- mov 0,\$16
- jsr \$26,exit
- .end main
-EOF
- $CC_FOR_BUILD -o $dummy $dummy.s 2>/dev/null
- if test "$?" = 0 ; then
- case `$dummy` in
- 0-0)
- UNAME_MACHINE="alpha"
- ;;
- 1-0)
- UNAME_MACHINE="alphaev5"
- ;;
- 1-1)
- UNAME_MACHINE="alphaev56"
- ;;
- 1-101)
- UNAME_MACHINE="alphapca56"
- ;;
- 2-303)
- UNAME_MACHINE="alphaev6"
- ;;
- 2-307)
- UNAME_MACHINE="alphaev67"
- ;;
- 2-1307)
- UNAME_MACHINE="alphaev68"
- ;;
- 3-1307)
- UNAME_MACHINE="alphaev7"
- ;;
- esac
- fi
- rm -f $dummy.s $dummy && rmdir $tmpdir
- echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[VTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
- exit 0 ;;
- Alpha\ *:Windows_NT*:*)
- # How do we know it's Interix rather than the generic POSIX subsystem?
- # Should we change UNAME_MACHINE based on the output of uname instead
- # of the specific Alpha model?
- echo alpha-pc-interix
- exit 0 ;;
- 21064:Windows_NT:50:3)
- echo alpha-dec-winnt3.5
- exit 0 ;;
- Amiga*:UNIX_System_V:4.0:*)
- echo m68k-unknown-sysv4
- exit 0;;
- *:[Aa]miga[Oo][Ss]:*:*)
- echo ${UNAME_MACHINE}-unknown-amigaos
- exit 0 ;;
- *:[Mm]orph[Oo][Ss]:*:*)
- echo ${UNAME_MACHINE}-unknown-morphos
- exit 0 ;;
- *:OS/390:*:*)
- echo i370-ibm-openedition
- exit 0 ;;
- arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*)
- echo arm-acorn-riscix${UNAME_RELEASE}
- exit 0;;
- SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*)
- echo hppa1.1-hitachi-hiuxmpp
- exit 0;;
- Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*)
- # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE.
- if test "`(/bin/universe) 2>/dev/null`" = att ; then
- echo pyramid-pyramid-sysv3
- else
- echo pyramid-pyramid-bsd
- fi
- exit 0 ;;
- NILE*:*:*:dcosx)
- echo pyramid-pyramid-svr4
- exit 0 ;;
- DRS?6000:UNIX_SV:4.2*:7*)
- case `/usr/bin/uname -p` in
- sparc) echo sparc-icl-nx7 && exit 0 ;;
- esac ;;
- sun4H:SunOS:5.*:*)
- echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
- exit 0 ;;
- sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*)
- echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
- exit 0 ;;
- i86pc:SunOS:5.*:*)
- echo i386-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
- exit 0 ;;
- sun4*:SunOS:6*:*)
- # According to config.sub, this is the proper way to canonicalize
- # SunOS6. Hard to guess exactly what SunOS6 will be like, but
- # it's likely to be more like Solaris than SunOS4.
- echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
- exit 0 ;;
- sun4*:SunOS:*:*)
- case "`/usr/bin/arch -k`" in
- Series*|S4*)
- UNAME_RELEASE=`uname -v`
- ;;
- esac
- # Japanese Language versions have a version number like `4.1.3-JL'.
- echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'`
- exit 0 ;;
- sun3*:SunOS:*:*)
- echo m68k-sun-sunos${UNAME_RELEASE}
- exit 0 ;;
- sun*:*:4.2BSD:*)
- UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null`
- test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3
- case "`/bin/arch`" in
- sun3)
- echo m68k-sun-sunos${UNAME_RELEASE}
- ;;
- sun4)
- echo sparc-sun-sunos${UNAME_RELEASE}
- ;;
- esac
- exit 0 ;;
- aushp:SunOS:*:*)
- echo sparc-auspex-sunos${UNAME_RELEASE}
- exit 0 ;;
- # The situation for MiNT is a little confusing. The machine name
- # can be virtually everything (everything which is not
- # "atarist" or "atariste" at least should have a processor
- # > m68000). The system name ranges from "MiNT" over "FreeMiNT"
- # to the lowercase version "mint" (or "freemint"). Finally
- # the system name "TOS" denotes a system which is actually not
- # MiNT. But MiNT is downward compatible to TOS, so this should
- # be no problem.
- atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*)
- echo m68k-atari-mint${UNAME_RELEASE}
- exit 0 ;;
- atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*)
- echo m68k-atari-mint${UNAME_RELEASE}
- exit 0 ;;
- *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*)
- echo m68k-atari-mint${UNAME_RELEASE}
- exit 0 ;;
- milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*)
- echo m68k-milan-mint${UNAME_RELEASE}
- exit 0 ;;
- hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*)
- echo m68k-hades-mint${UNAME_RELEASE}
- exit 0 ;;
- *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*)
- echo m68k-unknown-mint${UNAME_RELEASE}
- exit 0 ;;
- powerpc:machten:*:*)
- echo powerpc-apple-machten${UNAME_RELEASE}
- exit 0 ;;
- RISC*:Mach:*:*)
- echo mips-dec-mach_bsd4.3
- exit 0 ;;
- RISC*:ULTRIX:*:*)
- echo mips-dec-ultrix${UNAME_RELEASE}
- exit 0 ;;
- VAX*:ULTRIX*:*:*)
- echo vax-dec-ultrix${UNAME_RELEASE}
- exit 0 ;;
- 2020:CLIX:*:* | 2430:CLIX:*:*)
- echo clipper-intergraph-clix${UNAME_RELEASE}
- exit 0 ;;
- mips:*:*:UMIPS | mips:*:*:RISCos)
- eval $set_cc_for_build
- sed 's/^ //' << EOF >$dummy.c
-#ifdef __cplusplus
-#include <stdio.h> /* for printf() prototype */
- int main (int argc, char *argv[]) {
-#else
- int main (argc, argv) int argc; char *argv[]; {
-#endif
- #if defined (host_mips) && defined (MIPSEB)
- #if defined (SYSTYPE_SYSV)
- printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0);
- #endif
- #if defined (SYSTYPE_SVR4)
- printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0);
- #endif
- #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD)
- printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0);
- #endif
- #endif
- exit (-1);
- }
-EOF
- $CC_FOR_BUILD -o $dummy $dummy.c \
- && $dummy `echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` \
- && rm -f $dummy.c $dummy && rmdir $tmpdir && exit 0
- rm -f $dummy.c $dummy && rmdir $tmpdir
- echo mips-mips-riscos${UNAME_RELEASE}
- exit 0 ;;
- Motorola:PowerMAX_OS:*:*)
- echo powerpc-motorola-powermax
- exit 0 ;;
- Motorola:*:4.3:PL8-*)
- echo powerpc-harris-powermax
- exit 0 ;;
- Night_Hawk:*:*:PowerMAX_OS)
- echo powerpc-harris-powermax
- exit 0 ;;
- Night_Hawk:Power_UNIX:*:*)
- echo powerpc-harris-powerunix
- exit 0 ;;
- m88k:CX/UX:7*:*)
- echo m88k-harris-cxux7
- exit 0 ;;
- m88k:*:4*:R4*)
- echo m88k-motorola-sysv4
- exit 0 ;;
- m88k:*:3*:R3*)
- echo m88k-motorola-sysv3
- exit 0 ;;
- AViiON:dgux:*:*)
- # DG/UX returns AViiON for all architectures
- UNAME_PROCESSOR=`/usr/bin/uname -p`
- if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ]
- then
- if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \
- [ ${TARGET_BINARY_INTERFACE}x = x ]
- then
- echo m88k-dg-dgux${UNAME_RELEASE}
- else
- echo m88k-dg-dguxbcs${UNAME_RELEASE}
- fi
- else
- echo i586-dg-dgux${UNAME_RELEASE}
- fi
- exit 0 ;;
- M88*:DolphinOS:*:*) # DolphinOS (SVR3)
- echo m88k-dolphin-sysv3
- exit 0 ;;
- M88*:*:R3*:*)
- # Delta 88k system running SVR3
- echo m88k-motorola-sysv3
- exit 0 ;;
- XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3)
- echo m88k-tektronix-sysv3
- exit 0 ;;
- Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD)
- echo m68k-tektronix-bsd
- exit 0 ;;
- *:IRIX*:*:*)
- echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'`
- exit 0 ;;
- ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX.
- echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id
- exit 0 ;; # Note that: echo "'`uname -s`'" gives 'AIX '
- i*86:AIX:*:*)
- echo i386-ibm-aix
- exit 0 ;;
- ia64:AIX:*:*)
- if [ -x /usr/bin/oslevel ] ; then
- IBM_REV=`/usr/bin/oslevel`
- else
- IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
- fi
- echo ${UNAME_MACHINE}-ibm-aix${IBM_REV}
- exit 0 ;;
- *:AIX:2:3)
- if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then
- eval $set_cc_for_build
- sed 's/^ //' << EOF >$dummy.c
- #include <sys/systemcfg.h>
-
- main()
- {
- if (!__power_pc())
- exit(1);
- puts("powerpc-ibm-aix3.2.5");
- exit(0);
- }
-EOF
- $CC_FOR_BUILD -o $dummy $dummy.c && $dummy && rm -f $dummy.c $dummy && rmdir $tmpdir && exit 0
- rm -f $dummy.c $dummy && rmdir $tmpdir
- echo rs6000-ibm-aix3.2.5
- elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then
- echo rs6000-ibm-aix3.2.4
- else
- echo rs6000-ibm-aix3.2
- fi
- exit 0 ;;
- *:AIX:*:[45])
- IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'`
- if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then
- IBM_ARCH=rs6000
- else
- IBM_ARCH=powerpc
- fi
- if [ -x /usr/bin/oslevel ] ; then
- IBM_REV=`/usr/bin/oslevel`
- else
- IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
- fi
- echo ${IBM_ARCH}-ibm-aix${IBM_REV}
- exit 0 ;;
- *:AIX:*:*)
- echo rs6000-ibm-aix
- exit 0 ;;
- ibmrt:4.4BSD:*|romp-ibm:BSD:*)
- echo romp-ibm-bsd4.4
- exit 0 ;;
- ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and
- echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to
- exit 0 ;; # report: romp-ibm BSD 4.3
- *:BOSX:*:*)
- echo rs6000-bull-bosx
- exit 0 ;;
- DPX/2?00:B.O.S.:*:*)
- echo m68k-bull-sysv3
- exit 0 ;;
- 9000/[34]??:4.3bsd:1.*:*)
- echo m68k-hp-bsd
- exit 0 ;;
- hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*)
- echo m68k-hp-bsd4.4
- exit 0 ;;
- 9000/[34678]??:HP-UX:*:*)
- HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
- case "${UNAME_MACHINE}" in
- 9000/31? ) HP_ARCH=m68000 ;;
- 9000/[34]?? ) HP_ARCH=m68k ;;
- 9000/[678][0-9][0-9])
- if [ -x /usr/bin/getconf ]; then
- sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null`
- sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null`
- case "${sc_cpu_version}" in
- 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0
- 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1
- 532) # CPU_PA_RISC2_0
- case "${sc_kernel_bits}" in
- 32) HP_ARCH="hppa2.0n" ;;
- 64) HP_ARCH="hppa2.0w" ;;
- '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20
- esac ;;
- esac
- fi
- if [ "${HP_ARCH}" = "" ]; then
- eval $set_cc_for_build
- sed 's/^ //' << EOF >$dummy.c
-
- #define _HPUX_SOURCE
- #include <stdlib.h>
- #include <unistd.h>
-
- int main ()
- {
- #if defined(_SC_KERNEL_BITS)
- long bits = sysconf(_SC_KERNEL_BITS);
- #endif
- long cpu = sysconf (_SC_CPU_VERSION);
-
- switch (cpu)
- {
- case CPU_PA_RISC1_0: puts ("hppa1.0"); break;
- case CPU_PA_RISC1_1: puts ("hppa1.1"); break;
- case CPU_PA_RISC2_0:
- #if defined(_SC_KERNEL_BITS)
- switch (bits)
- {
- case 64: puts ("hppa2.0w"); break;
- case 32: puts ("hppa2.0n"); break;
- default: puts ("hppa2.0"); break;
- } break;
- #else /* !defined(_SC_KERNEL_BITS) */
- puts ("hppa2.0"); break;
- #endif
- default: puts ("hppa1.0"); break;
- }
- exit (0);
- }
-EOF
- (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy`
- if test -z "$HP_ARCH"; then HP_ARCH=hppa; fi
- rm -f $dummy.c $dummy && rmdir $tmpdir
- fi ;;
- esac
- echo ${HP_ARCH}-hp-hpux${HPUX_REV}
- exit 0 ;;
- ia64:HP-UX:*:*)
- HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
- echo ia64-hp-hpux${HPUX_REV}
- exit 0 ;;
- 3050*:HI-UX:*:*)
- eval $set_cc_for_build
- sed 's/^ //' << EOF >$dummy.c
- #include <unistd.h>
- int
- main ()
- {
- long cpu = sysconf (_SC_CPU_VERSION);
- /* The order matters, because CPU_IS_HP_MC68K erroneously returns
- true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct
- results, however. */
- if (CPU_IS_PA_RISC (cpu))
- {
- switch (cpu)
- {
- case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break;
- case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break;
- case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break;
- default: puts ("hppa-hitachi-hiuxwe2"); break;
- }
- }
- else if (CPU_IS_HP_MC68K (cpu))
- puts ("m68k-hitachi-hiuxwe2");
- else puts ("unknown-hitachi-hiuxwe2");
- exit (0);
- }
-EOF
- $CC_FOR_BUILD -o $dummy $dummy.c && $dummy && rm -f $dummy.c $dummy && rmdir $tmpdir && exit 0
- rm -f $dummy.c $dummy && rmdir $tmpdir
- echo unknown-hitachi-hiuxwe2
- exit 0 ;;
- 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* )
- echo hppa1.1-hp-bsd
- exit 0 ;;
- 9000/8??:4.3bsd:*:*)
- echo hppa1.0-hp-bsd
- exit 0 ;;
- *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*)
- echo hppa1.0-hp-mpeix
- exit 0 ;;
- hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* )
- echo hppa1.1-hp-osf
- exit 0 ;;
- hp8??:OSF1:*:*)
- echo hppa1.0-hp-osf
- exit 0 ;;
- i*86:OSF1:*:*)
- if [ -x /usr/sbin/sysversion ] ; then
- echo ${UNAME_MACHINE}-unknown-osf1mk
- else
- echo ${UNAME_MACHINE}-unknown-osf1
- fi
- exit 0 ;;
- parisc*:Lites*:*:*)
- echo hppa1.1-hp-lites
- exit 0 ;;
- C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*)
- echo c1-convex-bsd
- exit 0 ;;
- C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*)
- if getsysinfo -f scalar_acc
- then echo c32-convex-bsd
- else echo c2-convex-bsd
- fi
- exit 0 ;;
- C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*)
- echo c34-convex-bsd
- exit 0 ;;
- C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*)
- echo c38-convex-bsd
- exit 0 ;;
- C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*)
- echo c4-convex-bsd
- exit 0 ;;
- CRAY*Y-MP:*:*:*)
- echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
- exit 0 ;;
- CRAY*[A-Z]90:*:*:*)
- echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \
- | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \
- -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \
- -e 's/\.[^.]*$/.X/'
- exit 0 ;;
- CRAY*TS:*:*:*)
- echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
- exit 0 ;;
- CRAY*T3D:*:*:*)
- echo alpha-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
- exit 0 ;;
- CRAY*T3E:*:*:*)
- echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
- exit 0 ;;
- CRAY*SV1:*:*:*)
- echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
- exit 0 ;;
- F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*)
- FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
- FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
- FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'`
- echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
- exit 0 ;;
- i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*)
- echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE}
- exit 0 ;;
- sparc*:BSD/OS:*:*)
- echo sparc-unknown-bsdi${UNAME_RELEASE}
- exit 0 ;;
- *:BSD/OS:*:*)
- echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE}
- exit 0 ;;
- *:FreeBSD:*:*)
- # Determine whether the default compiler uses glibc.
- eval $set_cc_for_build
- sed 's/^ //' << EOF >$dummy.c
- #include <features.h>
- #if __GLIBC__ >= 2
- LIBC=gnu
- #else
- LIBC=
- #endif
-EOF
- eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^LIBC=`
- rm -f $dummy.c && rmdir $tmpdir
- echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`${LIBC:+-$LIBC}
- exit 0 ;;
- i*:CYGWIN*:*)
- echo ${UNAME_MACHINE}-pc-cygwin
- exit 0 ;;
- i*:MINGW*:*)
- echo ${UNAME_MACHINE}-pc-mingw32
- exit 0 ;;
- i*:PW*:*)
- echo ${UNAME_MACHINE}-pc-pw32
- exit 0 ;;
- x86:Interix*:3*)
- echo i386-pc-interix3
- exit 0 ;;
- i*:Windows_NT*:* | Pentium*:Windows_NT*:*)
- # How do we know it's Interix rather than the generic POSIX subsystem?
- # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we
- # UNAME_MACHINE based on the output of uname instead of i386?
- echo i386-pc-interix
- exit 0 ;;
- i*:UWIN*:*)
- echo ${UNAME_MACHINE}-pc-uwin
- exit 0 ;;
- p*:CYGWIN*:*)
- echo powerpcle-unknown-cygwin
- exit 0 ;;
- prep*:SunOS:5.*:*)
- echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
- exit 0 ;;
- *:GNU:*:*)
- echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'`
- exit 0 ;;
- i*86:Minix:*:*)
- echo ${UNAME_MACHINE}-pc-minix
- exit 0 ;;
- arm*:Linux:*:*)
- echo ${UNAME_MACHINE}-unknown-linux-gnu
- exit 0 ;;
- ia64:Linux:*:*)
- echo ${UNAME_MACHINE}-unknown-linux-gnu
- exit 0 ;;
- m68*:Linux:*:*)
- echo ${UNAME_MACHINE}-unknown-linux-gnu
- exit 0 ;;
- mips:Linux:*:*)
- eval $set_cc_for_build
- sed 's/^ //' << EOF >$dummy.c
- #undef CPU
- #undef mips
- #undef mipsel
- #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL)
- CPU=mipsel
- #else
- #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB)
- CPU=mips
- #else
- CPU=
- #endif
- #endif
-EOF
- eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^CPU=`
- rm -f $dummy.c && rmdir $tmpdir
- test x"${CPU}" != x && echo "${CPU}-pc-linux-gnu" && exit 0
- ;;
- ppc:Linux:*:*)
- echo powerpc-unknown-linux-gnu
- exit 0 ;;
- ppc64:Linux:*:*)
- echo powerpc64-unknown-linux-gnu
- exit 0 ;;
- alpha:Linux:*:*)
- case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in
- EV5) UNAME_MACHINE=alphaev5 ;;
- EV56) UNAME_MACHINE=alphaev56 ;;
- PCA56) UNAME_MACHINE=alphapca56 ;;
- PCA57) UNAME_MACHINE=alphapca56 ;;
- EV6) UNAME_MACHINE=alphaev6 ;;
- EV67) UNAME_MACHINE=alphaev67 ;;
- EV68*) UNAME_MACHINE=alphaev68 ;;
- esac
- objdump --private-headers /bin/sh | grep ld.so.1 >/dev/null
- if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi
- echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC}
- exit 0 ;;
- parisc:Linux:*:* | hppa:Linux:*:*)
- # Look for CPU level
- case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in
- PA7*) echo hppa1.1-unknown-linux-gnu ;;
- PA8*) echo hppa2.0-unknown-linux-gnu ;;
- *) echo hppa-unknown-linux-gnu ;;
- esac
- exit 0 ;;
- parisc64:Linux:*:* | hppa64:Linux:*:*)
- echo hppa64-unknown-linux-gnu
- exit 0 ;;
- s390:Linux:*:* | s390x:Linux:*:*)
- echo ${UNAME_MACHINE}-ibm-linux
- exit 0 ;;
- sh*:Linux:*:*)
- echo ${UNAME_MACHINE}-unknown-linux-gnu
- exit 0 ;;
- sparc:Linux:*:* | sparc64:Linux:*:*)
- echo ${UNAME_MACHINE}-unknown-linux-gnu
- exit 0 ;;
- x86_64:Linux:*:*)
- echo x86_64-unknown-linux-gnu
- exit 0 ;;
- i*86:Linux:*:*)
- # The BFD linker knows what the default object file format is, so
- # first see if it will tell us. cd to the root directory to prevent
- # problems with other programs or directories called `ld' in the path.
- # Set LC_ALL=C to ensure ld outputs messages in English.
- ld_supported_targets=`cd /; LC_ALL=C ld --help 2>&1 \
- | sed -ne '/supported targets:/!d
- s/[ ][ ]*/ /g
- s/.*supported targets: *//
- s/ .*//
- p'`
- case "$ld_supported_targets" in
- elf32-i386)
- TENTATIVE="${UNAME_MACHINE}-pc-linux-gnu"
- ;;
- a.out-i386-linux)
- echo "${UNAME_MACHINE}-pc-linux-gnuaout"
- exit 0 ;;
- coff-i386)
- echo "${UNAME_MACHINE}-pc-linux-gnucoff"
- exit 0 ;;
- "")
- # Either a pre-BFD a.out linker (linux-gnuoldld) or
- # one that does not give us useful --help.
- echo "${UNAME_MACHINE}-pc-linux-gnuoldld"
- exit 0 ;;
- esac
- # Determine whether the default compiler is a.out or elf
- eval $set_cc_for_build
- sed 's/^ //' << EOF >$dummy.c
- #include <features.h>
- #ifdef __ELF__
- # ifdef __GLIBC__
- # if __GLIBC__ >= 2
- LIBC=gnu
- # else
- LIBC=gnulibc1
- # endif
- # else
- LIBC=gnulibc1
- # endif
- #else
- #ifdef __INTEL_COMPILER
- LIBC=gnu
- #else
- LIBC=gnuaout
- #endif
- #endif
-EOF
- eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^LIBC=`
- rm -f $dummy.c && rmdir $tmpdir
- test x"${LIBC}" != x && echo "${UNAME_MACHINE}-pc-linux-${LIBC}" && exit 0
- test x"${TENTATIVE}" != x && echo "${TENTATIVE}" && exit 0
- ;;
- i*86:DYNIX/ptx:4*:*)
- # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there.
- # earlier versions are messed up and put the nodename in both
- # sysname and nodename.
- echo i386-sequent-sysv4
- exit 0 ;;
- i*86:UNIX_SV:4.2MP:2.*)
- # Unixware is an offshoot of SVR4, but it has its own version
- # number series starting with 2...
- # I am not positive that other SVR4 systems won't match this,
- # I just have to hope. -- rms.
- # Use sysv4.2uw... so that sysv4* matches it.
- echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION}
- exit 0 ;;
- i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*)
- UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'`
- if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then
- echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL}
- else
- echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL}
- fi
- exit 0 ;;
- i*86:*:5:[78]*)
- case `/bin/uname -X | grep "^Machine"` in
- *486*) UNAME_MACHINE=i486 ;;
- *Pentium) UNAME_MACHINE=i586 ;;
- *Pent*|*Celeron) UNAME_MACHINE=i686 ;;
- esac
- echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION}
- exit 0 ;;
- i*86:*:3.2:*)
- if test -f /usr/options/cb.name; then
- UNAME_REL=`sed -n 's/.*Version //p' </usr/options/cb.name`
- echo ${UNAME_MACHINE}-pc-isc$UNAME_REL
- elif /bin/uname -X 2>/dev/null >/dev/null ; then
- UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')`
- (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486
- (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \
- && UNAME_MACHINE=i586
- (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \
- && UNAME_MACHINE=i686
- (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \
- && UNAME_MACHINE=i686
- echo ${UNAME_MACHINE}-pc-sco$UNAME_REL
- else
- echo ${UNAME_MACHINE}-pc-sysv32
- fi
- exit 0 ;;
- i*86:*DOS:*:*)
- echo ${UNAME_MACHINE}-pc-msdosdjgpp
- exit 0 ;;
- pc:*:*:*)
- # Left here for compatibility:
- # uname -m prints for DJGPP always 'pc', but it prints nothing about
- # the processor, so we play safe by assuming i386.
- echo i386-pc-msdosdjgpp
- exit 0 ;;
- Intel:Mach:3*:*)
- echo i386-pc-mach3
- exit 0 ;;
- paragon:*:*:*)
- echo i860-intel-osf1
- exit 0 ;;
- i860:*:4.*:*) # i860-SVR4
- if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then
- echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4
- else # Add other i860-SVR4 vendors below as they are discovered.
- echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4
- fi
- exit 0 ;;
- mini*:CTIX:SYS*5:*)
- # "miniframe"
- echo m68010-convergent-sysv
- exit 0 ;;
- mc68k:UNIX:SYSTEM5:3.51m)
- echo m68k-convergent-sysv
- exit 0 ;;
- M68*:*:R3V[567]*:*)
- test -r /sysV68 && echo 'm68k-motorola-sysv' && exit 0 ;;
- 3[34]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0)
- OS_REL=''
- test -r /etc/.relid \
- && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid`
- /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
- && echo i486-ncr-sysv4.3${OS_REL} && exit 0
- /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \
- && echo i586-ncr-sysv4.3${OS_REL} && exit 0 ;;
- 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*)
- /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
- && echo i486-ncr-sysv4 && exit 0 ;;
- m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*)
- echo m68k-unknown-lynxos${UNAME_RELEASE}
- exit 0 ;;
- mc68030:UNIX_System_V:4.*:*)
- echo m68k-atari-sysv4
- exit 0 ;;
- i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*)
- echo i386-unknown-lynxos${UNAME_RELEASE}
- exit 0 ;;
- TSUNAMI:LynxOS:2.*:*)
- echo sparc-unknown-lynxos${UNAME_RELEASE}
- exit 0 ;;
- rs6000:LynxOS:2.*:*)
- echo rs6000-unknown-lynxos${UNAME_RELEASE}
- exit 0 ;;
- PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.0*:*)
- echo powerpc-unknown-lynxos${UNAME_RELEASE}
- exit 0 ;;
- SM[BE]S:UNIX_SV:*:*)
- echo mips-dde-sysv${UNAME_RELEASE}
- exit 0 ;;
- RM*:ReliantUNIX-*:*:*)
- echo mips-sni-sysv4
- exit 0 ;;
- RM*:SINIX-*:*:*)
- echo mips-sni-sysv4
- exit 0 ;;
- *:SINIX-*:*:*)
- if uname -p 2>/dev/null >/dev/null ; then
- UNAME_MACHINE=`(uname -p) 2>/dev/null`
- echo ${UNAME_MACHINE}-sni-sysv4
- else
- echo ns32k-sni-sysv
- fi
- exit 0 ;;
- PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort
- # says <Richard.M.Bartel@ccMail.Census.GOV>
- echo i586-unisys-sysv4
- exit 0 ;;
- *:UNIX_System_V:4*:FTX*)
- # From Gerald Hewes <hewes@openmarket.com>.
- # How about differentiating between stratus architectures? -djm
- echo hppa1.1-stratus-sysv4
- exit 0 ;;
- *:*:*:FTX*)
- # From seanf@swdc.stratus.com.
- echo i860-stratus-sysv4
- exit 0 ;;
- *:VOS:*:*)
- # From Paul.Green@stratus.com.
- echo hppa1.1-stratus-vos
- exit 0 ;;
- mc68*:A/UX:*:*)
- echo m68k-apple-aux${UNAME_RELEASE}
- exit 0 ;;
- news*:NEWS-OS:6*:*)
- echo mips-sony-newsos6
- exit 0 ;;
- R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*)
- if [ -d /usr/nec ]; then
- echo mips-nec-sysv${UNAME_RELEASE}
- else
- echo mips-unknown-sysv${UNAME_RELEASE}
- fi
- exit 0 ;;
- BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only.
- echo powerpc-be-beos
- exit 0 ;;
- BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only.
- echo powerpc-apple-beos
- exit 0 ;;
- BePC:BeOS:*:*) # BeOS running on Intel PC compatible.
- echo i586-pc-beos
- exit 0 ;;
- SX-4:SUPER-UX:*:*)
- echo sx4-nec-superux${UNAME_RELEASE}
- exit 0 ;;
- SX-5:SUPER-UX:*:*)
- echo sx5-nec-superux${UNAME_RELEASE}
- exit 0 ;;
- SX-6:SUPER-UX:*:*)
- echo sx6-nec-superux${UNAME_RELEASE}
- exit 0 ;;
- Power*:Rhapsody:*:*)
- echo powerpc-apple-rhapsody${UNAME_RELEASE}
- exit 0 ;;
- *:Rhapsody:*:*)
- echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE}
- exit 0 ;;
- *:Darwin:*:*)
- echo `uname -p`-apple-darwin${UNAME_RELEASE}
- exit 0 ;;
- *:procnto*:*:* | *:QNX:[0123456789]*:*)
- UNAME_PROCESSOR=`uname -p`
- if test "$UNAME_PROCESSOR" = "x86"; then
- UNAME_PROCESSOR=i386
- UNAME_MACHINE=pc
- fi
- echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE}
- exit 0 ;;
- *:QNX:*:4*)
- echo i386-pc-qnx
- exit 0 ;;
- NSR-[DGKLNPTVW]:NONSTOP_KERNEL:*:*)
- echo nsr-tandem-nsk${UNAME_RELEASE}
- exit 0 ;;
- *:NonStop-UX:*:*)
- echo mips-compaq-nonstopux
- exit 0 ;;
- BS2000:POSIX*:*:*)
- echo bs2000-siemens-sysv
- exit 0 ;;
- DS/*:UNIX_System_V:*:*)
- echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE}
- exit 0 ;;
- *:Plan9:*:*)
- # "uname -m" is not consistent, so use $cputype instead. 386
- # is converted to i386 for consistency with other x86
- # operating systems.
- if test "$cputype" = "386"; then
- UNAME_MACHINE=i386
- else
- UNAME_MACHINE="$cputype"
- fi
- echo ${UNAME_MACHINE}-unknown-plan9
- exit 0 ;;
- i*86:OS/2:*:*)
- # If we were able to find `uname', then EMX Unix compatibility
- # is probably installed.
- echo ${UNAME_MACHINE}-pc-os2-emx
- exit 0 ;;
- *:TOPS-10:*:*)
- echo pdp10-unknown-tops10
- exit 0 ;;
- *:TENEX:*:*)
- echo pdp10-unknown-tenex
- exit 0 ;;
- KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*)
- echo pdp10-dec-tops20
- exit 0 ;;
- XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*)
- echo pdp10-xkl-tops20
- exit 0 ;;
- *:TOPS-20:*:*)
- echo pdp10-unknown-tops20
- exit 0 ;;
- *:ITS:*:*)
- echo pdp10-unknown-its
- exit 0 ;;
- i*86:XTS-300:*:STOP)
- echo ${UNAME_MACHINE}-unknown-stop
- exit 0 ;;
- i*86:atheos:*:*)
- echo ${UNAME_MACHINE}-unknown-atheos
- exit 0 ;;
-esac
-
-#echo '(No uname command or uname output not recognized.)' 1>&2
-#echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2
-
-eval $set_cc_for_build
-cat >$dummy.c <<EOF
-#ifdef _SEQUENT_
-# include <sys/types.h>
-# include <sys/utsname.h>
-#endif
-main ()
-{
-#if defined (sony)
-#if defined (MIPSEB)
- /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed,
- I don't know.... */
- printf ("mips-sony-bsd\n"); exit (0);
-#else
-#include <sys/param.h>
- printf ("m68k-sony-newsos%s\n",
-#ifdef NEWSOS4
- "4"
-#else
- ""
-#endif
- ); exit (0);
-#endif
-#endif
-
-#if defined (__arm) && defined (__acorn) && defined (__unix)
- printf ("arm-acorn-riscix"); exit (0);
-#endif
-
-#if defined (hp300) && !defined (hpux)
- printf ("m68k-hp-bsd\n"); exit (0);
-#endif
-
-#if defined (NeXT)
-#if !defined (__ARCHITECTURE__)
-#define __ARCHITECTURE__ "m68k"
-#endif
- int version;
- version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`;
- if (version < 4)
- printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version);
- else
- printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version);
- exit (0);
-#endif
-
-#if defined (MULTIMAX) || defined (n16)
-#if defined (UMAXV)
- printf ("ns32k-encore-sysv\n"); exit (0);
-#else
-#if defined (CMU)
- printf ("ns32k-encore-mach\n"); exit (0);
-#else
- printf ("ns32k-encore-bsd\n"); exit (0);
-#endif
-#endif
-#endif
-
-#if defined (__386BSD__)
- printf ("i386-pc-bsd\n"); exit (0);
-#endif
-
-#if defined (sequent)
-#if defined (i386)
- printf ("i386-sequent-dynix\n"); exit (0);
-#endif
-#if defined (ns32000)
- printf ("ns32k-sequent-dynix\n"); exit (0);
-#endif
-#endif
-
-#if defined (_SEQUENT_)
- struct utsname un;
-
- uname(&un);
-
- if (strncmp(un.version, "V2", 2) == 0) {
- printf ("i386-sequent-ptx2\n"); exit (0);
- }
- if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */
- printf ("i386-sequent-ptx1\n"); exit (0);
- }
- printf ("i386-sequent-ptx\n"); exit (0);
-
-#endif
-
-#if defined (vax)
-# if !defined (ultrix)
-# include <sys/param.h>
-# if defined (BSD)
-# if BSD == 43
- printf ("vax-dec-bsd4.3\n"); exit (0);
-# else
-# if BSD == 199006
- printf ("vax-dec-bsd4.3reno\n"); exit (0);
-# else
- printf ("vax-dec-bsd\n"); exit (0);
-# endif
-# endif
-# else
- printf ("vax-dec-bsd\n"); exit (0);
-# endif
-# else
- printf ("vax-dec-ultrix\n"); exit (0);
-# endif
-#endif
-
-#if defined (alliant) && defined (i860)
- printf ("i860-alliant-bsd\n"); exit (0);
-#endif
-
- exit (1);
-}
-EOF
-
-$CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && $dummy && rm -f $dummy.c $dummy && rmdir $tmpdir && exit 0
-rm -f $dummy.c $dummy && rmdir $tmpdir
-
-# Apollos put the system type in the environment.
-
-test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit 0; }
-
-# Convex versions that predate uname can use getsysinfo(1)
-
-if [ -x /usr/convex/getsysinfo ]
-then
- case `getsysinfo -f cpu_type` in
- c1*)
- echo c1-convex-bsd
- exit 0 ;;
- c2*)
- if getsysinfo -f scalar_acc
- then echo c32-convex-bsd
- else echo c2-convex-bsd
- fi
- exit 0 ;;
- c34*)
- echo c34-convex-bsd
- exit 0 ;;
- c38*)
- echo c38-convex-bsd
- exit 0 ;;
- c4*)
- echo c4-convex-bsd
- exit 0 ;;
- esac
-fi
-
-cat >&2 <<EOF
-$0: unable to guess system type
-
-This script, last modified $timestamp, has failed to recognize
-the operating system you are using. It is advised that you
-download the most up to date version of the config scripts from
-
- ftp://ftp.gnu.org/pub/gnu/config/
-
-If the version you run ($0) is already up to date, please
-send the following data and any information you think might be
-pertinent to <config-patches@gnu.org> in order to provide the needed
-information to handle your system.
-
-config.guess timestamp = $timestamp
-
-uname -m = `(uname -m) 2>/dev/null || echo unknown`
-uname -r = `(uname -r) 2>/dev/null || echo unknown`
-uname -s = `(uname -s) 2>/dev/null || echo unknown`
-uname -v = `(uname -v) 2>/dev/null || echo unknown`
-
-/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null`
-/bin/uname -X = `(/bin/uname -X) 2>/dev/null`
-
-hostinfo = `(hostinfo) 2>/dev/null`
-/bin/universe = `(/bin/universe) 2>/dev/null`
-/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null`
-/bin/arch = `(/bin/arch) 2>/dev/null`
-/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null`
-/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null`
-
-UNAME_MACHINE = ${UNAME_MACHINE}
-UNAME_RELEASE = ${UNAME_RELEASE}
-UNAME_SYSTEM = ${UNAME_SYSTEM}
-UNAME_VERSION = ${UNAME_VERSION}
-EOF
-
-exit 1
-
-# Local variables:
-# eval: (add-hook 'write-file-hooks 'time-stamp)
-# time-stamp-start: "timestamp='"
-# time-stamp-format: "%:y-%02m-%02d"
-# time-stamp-end: "'"
-# End:
diff --git a/config.sub b/config.sub
deleted file mode 100644
index 1dea9b79d5..0000000000
--- a/config.sub
+++ /dev/null
@@ -1,1470 +0,0 @@
-#! /bin/sh
-# Configuration validation subroutine script.
-# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
-# 2000, 2001, 2002 Free Software Foundation, Inc.
-
-timestamp='2002-09-05'
-
-# This file is (in principle) common to ALL GNU software.
-# The presence of a machine in this file suggests that SOME GNU software
-# can handle that machine. It does not imply ALL GNU software can.
-#
-# This file is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330,
-# Boston, MA 02111-1307, USA.
-
-# As a special exception to the GNU General Public License, if you
-# distribute this file as part of a program that contains a
-# configuration script generated by Autoconf, you may include it under
-# the same distribution terms that you use for the rest of that program.
-
-# Please send patches to <config-patches@gnu.org>. Submit a context
-# diff and a properly formatted ChangeLog entry.
-#
-# Configuration subroutine to validate and canonicalize a configuration type.
-# Supply the specified configuration type as an argument.
-# If it is invalid, we print an error message on stderr and exit with code 1.
-# Otherwise, we print the canonical config type on stdout and succeed.
-
-# This file is supposed to be the same for all GNU packages
-# and recognize all the CPU types, system types and aliases
-# that are meaningful with *any* GNU software.
-# Each package is responsible for reporting which valid configurations
-# it does not support. The user should be able to distinguish
-# a failure to support a valid configuration from a meaningless
-# configuration.
-
-# The goal of this file is to map all the various variations of a given
-# machine specification into a single specification in the form:
-# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM
-# or in some cases, the newer four-part form:
-# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM
-# It is wrong to echo any other type of specification.
-
-me=`echo "$0" | sed -e 's,.*/,,'`
-
-usage="\
-Usage: $0 [OPTION] CPU-MFR-OPSYS
- $0 [OPTION] ALIAS
-
-Canonicalize a configuration name.
-
-Operation modes:
- -h, --help print this help, then exit
- -t, --time-stamp print date of last modification, then exit
- -v, --version print version number, then exit
-
-Report bugs and patches to <config-patches@gnu.org>."
-
-version="\
-GNU config.sub ($timestamp)
-
-Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001
-Free Software Foundation, Inc.
-
-This is free software; see the source for copying conditions. There is NO
-warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
-
-help="
-Try \`$me --help' for more information."
-
-# Parse command line
-while test $# -gt 0 ; do
- case $1 in
- --time-stamp | --time* | -t )
- echo "$timestamp" ; exit 0 ;;
- --version | -v )
- echo "$version" ; exit 0 ;;
- --help | --h* | -h )
- echo "$usage"; exit 0 ;;
- -- ) # Stop option processing
- shift; break ;;
- - ) # Use stdin as input.
- break ;;
- -* )
- echo "$me: invalid option $1$help"
- exit 1 ;;
-
- *local*)
- # First pass through any local machine types.
- echo $1
- exit 0;;
-
- * )
- break ;;
- esac
-done
-
-case $# in
- 0) echo "$me: missing argument$help" >&2
- exit 1;;
- 1) ;;
- *) echo "$me: too many arguments$help" >&2
- exit 1;;
-esac
-
-# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any).
-# Here we must recognize all the valid KERNEL-OS combinations.
-maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'`
-case $maybe_os in
- nto-qnx* | linux-gnu* | freebsd*-gnu* | storm-chaos* | os2-emx* | windows32-* | rtmk-nova*)
- os=-$maybe_os
- basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`
- ;;
- *)
- basic_machine=`echo $1 | sed 's/-[^-]*$//'`
- if [ $basic_machine != $1 ]
- then os=`echo $1 | sed 's/.*-/-/'`
- else os=; fi
- ;;
-esac
-
-### Let's recognize common machines as not being operating systems so
-### that things like config.sub decstation-3100 work. We also
-### recognize some manufacturers as not being operating systems, so we
-### can provide default operating systems below.
-case $os in
- -sun*os*)
- # Prevent following clause from handling this invalid input.
- ;;
- -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \
- -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \
- -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \
- -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\
- -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \
- -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \
- -apple | -axis)
- os=
- basic_machine=$1
- ;;
- -sim | -cisco | -oki | -wec | -winbond)
- os=
- basic_machine=$1
- ;;
- -scout)
- ;;
- -wrs)
- os=-vxworks
- basic_machine=$1
- ;;
- -chorusos*)
- os=-chorusos
- basic_machine=$1
- ;;
- -chorusrdb)
- os=-chorusrdb
- basic_machine=$1
- ;;
- -hiux*)
- os=-hiuxwe2
- ;;
- -sco5)
- os=-sco3.2v5
- basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
- ;;
- -sco4)
- os=-sco3.2v4
- basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
- ;;
- -sco3.2.[4-9]*)
- os=`echo $os | sed -e 's/sco3.2./sco3.2v/'`
- basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
- ;;
- -sco3.2v[4-9]*)
- # Don't forget version if it is 3.2v4 or newer.
- basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
- ;;
- -sco*)
- os=-sco3.2v2
- basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
- ;;
- -udk*)
- basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
- ;;
- -isc)
- os=-isc2.2
- basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
- ;;
- -clix*)
- basic_machine=clipper-intergraph
- ;;
- -isc*)
- basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
- ;;
- -lynx*)
- os=-lynxos
- ;;
- -ptx*)
- basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'`
- ;;
- -windowsnt*)
- os=`echo $os | sed -e 's/windowsnt/winnt/'`
- ;;
- -psos*)
- os=-psos
- ;;
- -mint | -mint[0-9]*)
- basic_machine=m68k-atari
- os=-mint
- ;;
-esac
-
-# Decode aliases for certain CPU-COMPANY combinations.
-case $basic_machine in
- # Recognize the basic CPU types without company name.
- # Some are omitted here because they have special meanings below.
- 1750a | 580 \
- | a29k \
- | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \
- | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \
- | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr \
- | clipper \
- | d10v | d30v | dlx | dsp16xx \
- | fr30 | frv \
- | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \
- | i370 | i860 | i960 | ia64 \
- | ip2k \
- | m32r | m68000 | m68k | m88k | mcore \
- | mips | mipsbe | mipseb | mipsel | mipsle \
- | mips16 \
- | mips64 | mips64el \
- | mips64vr | mips64vrel \
- | mips64orion | mips64orionel \
- | mips64vr4100 | mips64vr4100el \
- | mips64vr4300 | mips64vr4300el \
- | mips64vr5000 | mips64vr5000el \
- | mipsisa32 | mipsisa32el \
- | mipsisa64 | mipsisa64el \
- | mipsisa64sb1 | mipsisa64sb1el \
- | mipsisa64sr71k | mipsisa64sr71kel \
- | mipstx39 | mipstx39el \
- | mn10200 | mn10300 \
- | ns16k | ns32k \
- | openrisc | or32 \
- | pdp10 | pdp11 | pj | pjl \
- | powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \
- | pyramid \
- | sh | sh[1234] | sh3e | sh[34]eb | shbe | shle | sh[1234]le | sh3ele \
- | sh64 | sh64le \
- | sparc | sparc64 | sparc86x | sparclet | sparclite | sparcv9 | sparcv9b \
- | strongarm \
- | tahoe | thumb | tic80 | tron \
- | v850 | v850e \
- | we32k \
- | x86 | xscale | xstormy16 | xtensa \
- | z8k)
- basic_machine=$basic_machine-unknown
- ;;
- m6811 | m68hc11 | m6812 | m68hc12)
- # Motorola 68HC11/12.
- basic_machine=$basic_machine-unknown
- os=-none
- ;;
- m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k)
- ;;
-
- # We use `pc' rather than `unknown'
- # because (1) that's what they normally are, and
- # (2) the word "unknown" tends to confuse beginning users.
- i*86 | x86_64)
- basic_machine=$basic_machine-pc
- ;;
- # Object if more than one company name word.
- *-*-*)
- echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
- exit 1
- ;;
- # Recognize the basic CPU types with company name.
- 580-* \
- | a29k-* \
- | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \
- | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \
- | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \
- | arm-* | armbe-* | armle-* | armeb-* | armv*-* \
- | avr-* \
- | bs2000-* \
- | c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* \
- | clipper-* | cydra-* \
- | d10v-* | d30v-* | dlx-* \
- | elxsi-* \
- | f30[01]-* | f700-* | fr30-* | frv-* | fx80-* \
- | h8300-* | h8500-* \
- | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \
- | i*86-* | i860-* | i960-* | ia64-* \
- | ip2k-* \
- | m32r-* \
- | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \
- | m88110-* | m88k-* | mcore-* \
- | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \
- | mips16-* \
- | mips64-* | mips64el-* \
- | mips64vr-* | mips64vrel-* \
- | mips64orion-* | mips64orionel-* \
- | mips64vr4100-* | mips64vr4100el-* \
- | mips64vr4300-* | mips64vr4300el-* \
- | mips64vr5000-* | mips64vr5000el-* \
- | mipsisa32-* | mipsisa32el-* \
- | mipsisa64-* | mipsisa64el-* \
- | mipsisa64sb1-* | mipsisa64sb1el-* \
- | mipsisa64sr71k-* | mipsisa64sr71kel-* \
- | mipstx39 | mipstx39el \
- | none-* | np1-* | ns16k-* | ns32k-* \
- | orion-* \
- | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \
- | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \
- | pyramid-* \
- | romp-* | rs6000-* \
- | sh-* | sh[1234]-* | sh3e-* | sh[34]eb-* | shbe-* \
- | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \
- | sparc-* | sparc64-* | sparc86x-* | sparclet-* | sparclite-* \
- | sparcv9-* | sparcv9b-* | strongarm-* | sv1-* | sx?-* \
- | tahoe-* | thumb-* | tic30-* | tic4x-* | tic54x-* | tic80-* | tron-* \
- | v850-* | v850e-* | vax-* \
- | we32k-* \
- | x86-* | x86_64-* | xps100-* | xscale-* | xstormy16-* \
- | xtensa-* \
- | ymp-* \
- | z8k-*)
- ;;
- # Recognize the various machine names and aliases which stand
- # for a CPU type and a company and sometimes even an OS.
- 386bsd)
- basic_machine=i386-unknown
- os=-bsd
- ;;
- 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc)
- basic_machine=m68000-att
- ;;
- 3b*)
- basic_machine=we32k-att
- ;;
- a29khif)
- basic_machine=a29k-amd
- os=-udi
- ;;
- adobe68k)
- basic_machine=m68010-adobe
- os=-scout
- ;;
- alliant | fx80)
- basic_machine=fx80-alliant
- ;;
- altos | altos3068)
- basic_machine=m68k-altos
- ;;
- am29k)
- basic_machine=a29k-none
- os=-bsd
- ;;
- amdahl)
- basic_machine=580-amdahl
- os=-sysv
- ;;
- amiga | amiga-*)
- basic_machine=m68k-unknown
- ;;
- amigaos | amigados)
- basic_machine=m68k-unknown
- os=-amigaos
- ;;
- amigaunix | amix)
- basic_machine=m68k-unknown
- os=-sysv4
- ;;
- apollo68)
- basic_machine=m68k-apollo
- os=-sysv
- ;;
- apollo68bsd)
- basic_machine=m68k-apollo
- os=-bsd
- ;;
- aux)
- basic_machine=m68k-apple
- os=-aux
- ;;
- balance)
- basic_machine=ns32k-sequent
- os=-dynix
- ;;
- c90)
- basic_machine=c90-cray
- os=-unicos
- ;;
- convex-c1)
- basic_machine=c1-convex
- os=-bsd
- ;;
- convex-c2)
- basic_machine=c2-convex
- os=-bsd
- ;;
- convex-c32)
- basic_machine=c32-convex
- os=-bsd
- ;;
- convex-c34)
- basic_machine=c34-convex
- os=-bsd
- ;;
- convex-c38)
- basic_machine=c38-convex
- os=-bsd
- ;;
- cray | j90)
- basic_machine=j90-cray
- os=-unicos
- ;;
- crds | unos)
- basic_machine=m68k-crds
- ;;
- cris | cris-* | etrax*)
- basic_machine=cris-axis
- ;;
- da30 | da30-*)
- basic_machine=m68k-da30
- ;;
- decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn)
- basic_machine=mips-dec
- ;;
- decsystem10* | dec10*)
- basic_machine=pdp10-dec
- os=-tops10
- ;;
- decsystem20* | dec20*)
- basic_machine=pdp10-dec
- os=-tops20
- ;;
- delta | 3300 | motorola-3300 | motorola-delta \
- | 3300-motorola | delta-motorola)
- basic_machine=m68k-motorola
- ;;
- delta88)
- basic_machine=m88k-motorola
- os=-sysv3
- ;;
- dpx20 | dpx20-*)
- basic_machine=rs6000-bull
- os=-bosx
- ;;
- dpx2* | dpx2*-bull)
- basic_machine=m68k-bull
- os=-sysv3
- ;;
- ebmon29k)
- basic_machine=a29k-amd
- os=-ebmon
- ;;
- elxsi)
- basic_machine=elxsi-elxsi
- os=-bsd
- ;;
- encore | umax | mmax)
- basic_machine=ns32k-encore
- ;;
- es1800 | OSE68k | ose68k | ose | OSE)
- basic_machine=m68k-ericsson
- os=-ose
- ;;
- fx2800)
- basic_machine=i860-alliant
- ;;
- genix)
- basic_machine=ns32k-ns
- ;;
- gmicro)
- basic_machine=tron-gmicro
- os=-sysv
- ;;
- go32)
- basic_machine=i386-pc
- os=-go32
- ;;
- h3050r* | hiux*)
- basic_machine=hppa1.1-hitachi
- os=-hiuxwe2
- ;;
- h8300hms)
- basic_machine=h8300-hitachi
- os=-hms
- ;;
- h8300xray)
- basic_machine=h8300-hitachi
- os=-xray
- ;;
- h8500hms)
- basic_machine=h8500-hitachi
- os=-hms
- ;;
- harris)
- basic_machine=m88k-harris
- os=-sysv3
- ;;
- hp300-*)
- basic_machine=m68k-hp
- ;;
- hp300bsd)
- basic_machine=m68k-hp
- os=-bsd
- ;;
- hp300hpux)
- basic_machine=m68k-hp
- os=-hpux
- ;;
- hp3k9[0-9][0-9] | hp9[0-9][0-9])
- basic_machine=hppa1.0-hp
- ;;
- hp9k2[0-9][0-9] | hp9k31[0-9])
- basic_machine=m68000-hp
- ;;
- hp9k3[2-9][0-9])
- basic_machine=m68k-hp
- ;;
- hp9k6[0-9][0-9] | hp6[0-9][0-9])
- basic_machine=hppa1.0-hp
- ;;
- hp9k7[0-79][0-9] | hp7[0-79][0-9])
- basic_machine=hppa1.1-hp
- ;;
- hp9k78[0-9] | hp78[0-9])
- # FIXME: really hppa2.0-hp
- basic_machine=hppa1.1-hp
- ;;
- hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893)
- # FIXME: really hppa2.0-hp
- basic_machine=hppa1.1-hp
- ;;
- hp9k8[0-9][13679] | hp8[0-9][13679])
- basic_machine=hppa1.1-hp
- ;;
- hp9k8[0-9][0-9] | hp8[0-9][0-9])
- basic_machine=hppa1.0-hp
- ;;
- hppa-next)
- os=-nextstep3
- ;;
- hppaosf)
- basic_machine=hppa1.1-hp
- os=-osf
- ;;
- hppro)
- basic_machine=hppa1.1-hp
- os=-proelf
- ;;
- i370-ibm* | ibm*)
- basic_machine=i370-ibm
- ;;
-# I'm not sure what "Sysv32" means. Should this be sysv3.2?
- i*86v32)
- basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
- os=-sysv32
- ;;
- i*86v4*)
- basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
- os=-sysv4
- ;;
- i*86v)
- basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
- os=-sysv
- ;;
- i*86sol2)
- basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
- os=-solaris2
- ;;
- i386mach)
- basic_machine=i386-mach
- os=-mach
- ;;
- i386-vsta | vsta)
- basic_machine=i386-unknown
- os=-vsta
- ;;
- iris | iris4d)
- basic_machine=mips-sgi
- case $os in
- -irix*)
- ;;
- *)
- os=-irix4
- ;;
- esac
- ;;
- isi68 | isi)
- basic_machine=m68k-isi
- os=-sysv
- ;;
- m88k-omron*)
- basic_machine=m88k-omron
- ;;
- magnum | m3230)
- basic_machine=mips-mips
- os=-sysv
- ;;
- merlin)
- basic_machine=ns32k-utek
- os=-sysv
- ;;
- mingw32)
- basic_machine=i386-pc
- os=-mingw32
- ;;
- miniframe)
- basic_machine=m68000-convergent
- ;;
- *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*)
- basic_machine=m68k-atari
- os=-mint
- ;;
- mips3*-*)
- basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`
- ;;
- mips3*)
- basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown
- ;;
- mmix*)
- basic_machine=mmix-knuth
- os=-mmixware
- ;;
- monitor)
- basic_machine=m68k-rom68k
- os=-coff
- ;;
- morphos)
- basic_machine=powerpc-unknown
- os=-morphos
- ;;
- msdos)
- basic_machine=i386-pc
- os=-msdos
- ;;
- mvs)
- basic_machine=i370-ibm
- os=-mvs
- ;;
- ncr3000)
- basic_machine=i486-ncr
- os=-sysv4
- ;;
- netbsd386)
- basic_machine=i386-unknown
- os=-netbsd
- ;;
- netwinder)
- basic_machine=armv4l-rebel
- os=-linux
- ;;
- news | news700 | news800 | news900)
- basic_machine=m68k-sony
- os=-newsos
- ;;
- news1000)
- basic_machine=m68030-sony
- os=-newsos
- ;;
- news-3600 | risc-news)
- basic_machine=mips-sony
- os=-newsos
- ;;
- necv70)
- basic_machine=v70-nec
- os=-sysv
- ;;
- next | m*-next )
- basic_machine=m68k-next
- case $os in
- -nextstep* )
- ;;
- -ns2*)
- os=-nextstep2
- ;;
- *)
- os=-nextstep3
- ;;
- esac
- ;;
- nh3000)
- basic_machine=m68k-harris
- os=-cxux
- ;;
- nh[45]000)
- basic_machine=m88k-harris
- os=-cxux
- ;;
- nindy960)
- basic_machine=i960-intel
- os=-nindy
- ;;
- mon960)
- basic_machine=i960-intel
- os=-mon960
- ;;
- nonstopux)
- basic_machine=mips-compaq
- os=-nonstopux
- ;;
- np1)
- basic_machine=np1-gould
- ;;
- nsr-tandem)
- basic_machine=nsr-tandem
- ;;
- op50n-* | op60c-*)
- basic_machine=hppa1.1-oki
- os=-proelf
- ;;
- or32 | or32-*)
- basic_machine=or32-unknown
- os=-coff
- ;;
- OSE68000 | ose68000)
- basic_machine=m68000-ericsson
- os=-ose
- ;;
- os68k)
- basic_machine=m68k-none
- os=-os68k
- ;;
- pa-hitachi)
- basic_machine=hppa1.1-hitachi
- os=-hiuxwe2
- ;;
- paragon)
- basic_machine=i860-intel
- os=-osf
- ;;
- pbd)
- basic_machine=sparc-tti
- ;;
- pbb)
- basic_machine=m68k-tti
- ;;
- pc532 | pc532-*)
- basic_machine=ns32k-pc532
- ;;
- pentium | p5 | k5 | k6 | nexgen | viac3)
- basic_machine=i586-pc
- ;;
- pentiumpro | p6 | 6x86 | athlon | athlon_*)
- basic_machine=i686-pc
- ;;
- pentiumii | pentium2)
- basic_machine=i686-pc
- ;;
- pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*)
- basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'`
- ;;
- pentiumpro-* | p6-* | 6x86-* | athlon-*)
- basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
- ;;
- pentiumii-* | pentium2-*)
- basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
- ;;
- pn)
- basic_machine=pn-gould
- ;;
- power) basic_machine=power-ibm
- ;;
- ppc) basic_machine=powerpc-unknown
- ;;
- ppc-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'`
- ;;
- ppcle | powerpclittle | ppc-le | powerpc-little)
- basic_machine=powerpcle-unknown
- ;;
- ppcle-* | powerpclittle-*)
- basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'`
- ;;
- ppc64) basic_machine=powerpc64-unknown
- ;;
- ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'`
- ;;
- ppc64le | powerpc64little | ppc64-le | powerpc64-little)
- basic_machine=powerpc64le-unknown
- ;;
- ppc64le-* | powerpc64little-*)
- basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'`
- ;;
- ps2)
- basic_machine=i386-ibm
- ;;
- pw32)
- basic_machine=i586-unknown
- os=-pw32
- ;;
- rom68k)
- basic_machine=m68k-rom68k
- os=-coff
- ;;
- rm[46]00)
- basic_machine=mips-siemens
- ;;
- rtpc | rtpc-*)
- basic_machine=romp-ibm
- ;;
- s390 | s390-*)
- basic_machine=s390-ibm
- ;;
- s390x | s390x-*)
- basic_machine=s390x-ibm
- ;;
- sa29200)
- basic_machine=a29k-amd
- os=-udi
- ;;
- sb1)
- basic_machine=mipsisa64sb1-unknown
- ;;
- sb1el)
- basic_machine=mipsisa64sb1el-unknown
- ;;
- sequent)
- basic_machine=i386-sequent
- ;;
- sh)
- basic_machine=sh-hitachi
- os=-hms
- ;;
- sparclite-wrs | simso-wrs)
- basic_machine=sparclite-wrs
- os=-vxworks
- ;;
- sps7)
- basic_machine=m68k-bull
- os=-sysv2
- ;;
- spur)
- basic_machine=spur-unknown
- ;;
- st2000)
- basic_machine=m68k-tandem
- ;;
- stratus)
- basic_machine=i860-stratus
- os=-sysv4
- ;;
- sun2)
- basic_machine=m68000-sun
- ;;
- sun2os3)
- basic_machine=m68000-sun
- os=-sunos3
- ;;
- sun2os4)
- basic_machine=m68000-sun
- os=-sunos4
- ;;
- sun3os3)
- basic_machine=m68k-sun
- os=-sunos3
- ;;
- sun3os4)
- basic_machine=m68k-sun
- os=-sunos4
- ;;
- sun4os3)
- basic_machine=sparc-sun
- os=-sunos3
- ;;
- sun4os4)
- basic_machine=sparc-sun
- os=-sunos4
- ;;
- sun4sol2)
- basic_machine=sparc-sun
- os=-solaris2
- ;;
- sun3 | sun3-*)
- basic_machine=m68k-sun
- ;;
- sun4)
- basic_machine=sparc-sun
- ;;
- sun386 | sun386i | roadrunner)
- basic_machine=i386-sun
- ;;
- sv1)
- basic_machine=sv1-cray
- os=-unicos
- ;;
- symmetry)
- basic_machine=i386-sequent
- os=-dynix
- ;;
- t3d)
- basic_machine=alpha-cray
- os=-unicos
- ;;
- t3e)
- basic_machine=alphaev5-cray
- os=-unicos
- ;;
- t90)
- basic_machine=t90-cray
- os=-unicos
- ;;
- tic4x | c4x*)
- basic_machine=tic4x-unknown
- os=-coff
- ;;
- tic54x | c54x*)
- basic_machine=tic54x-unknown
- os=-coff
- ;;
- tx39)
- basic_machine=mipstx39-unknown
- ;;
- tx39el)
- basic_machine=mipstx39el-unknown
- ;;
- toad1)
- basic_machine=pdp10-xkl
- os=-tops20
- ;;
- tower | tower-32)
- basic_machine=m68k-ncr
- ;;
- udi29k)
- basic_machine=a29k-amd
- os=-udi
- ;;
- ultra3)
- basic_machine=a29k-nyu
- os=-sym1
- ;;
- v810 | necv810)
- basic_machine=v810-nec
- os=-none
- ;;
- vaxv)
- basic_machine=vax-dec
- os=-sysv
- ;;
- vms)
- basic_machine=vax-dec
- os=-vms
- ;;
- vpp*|vx|vx-*)
- basic_machine=f301-fujitsu
- ;;
- vxworks960)
- basic_machine=i960-wrs
- os=-vxworks
- ;;
- vxworks68)
- basic_machine=m68k-wrs
- os=-vxworks
- ;;
- vxworks29k)
- basic_machine=a29k-wrs
- os=-vxworks
- ;;
- w65*)
- basic_machine=w65-wdc
- os=-none
- ;;
- w89k-*)
- basic_machine=hppa1.1-winbond
- os=-proelf
- ;;
- windows32)
- basic_machine=i386-pc
- os=-windows32-msvcrt
- ;;
- xps | xps100)
- basic_machine=xps100-honeywell
- ;;
- ymp)
- basic_machine=ymp-cray
- os=-unicos
- ;;
- z8k-*-coff)
- basic_machine=z8k-unknown
- os=-sim
- ;;
- none)
- basic_machine=none-none
- os=-none
- ;;
-
-# Here we handle the default manufacturer of certain CPU types. It is in
-# some cases the only manufacturer, in others, it is the most popular.
- w89k)
- basic_machine=hppa1.1-winbond
- ;;
- op50n)
- basic_machine=hppa1.1-oki
- ;;
- op60c)
- basic_machine=hppa1.1-oki
- ;;
- romp)
- basic_machine=romp-ibm
- ;;
- rs6000)
- basic_machine=rs6000-ibm
- ;;
- vax)
- basic_machine=vax-dec
- ;;
- pdp10)
- # there are many clones, so DEC is not a safe bet
- basic_machine=pdp10-unknown
- ;;
- pdp11)
- basic_machine=pdp11-dec
- ;;
- we32k)
- basic_machine=we32k-att
- ;;
- sh3 | sh4 | sh3eb | sh4eb | sh[1234]le | sh3ele)
- basic_machine=sh-unknown
- ;;
- sh64)
- basic_machine=sh64-unknown
- ;;
- sparc | sparcv9 | sparcv9b)
- basic_machine=sparc-sun
- ;;
- cydra)
- basic_machine=cydra-cydrome
- ;;
- orion)
- basic_machine=orion-highlevel
- ;;
- orion105)
- basic_machine=clipper-highlevel
- ;;
- mac | mpw | mac-mpw)
- basic_machine=m68k-apple
- ;;
- pmac | pmac-mpw)
- basic_machine=powerpc-apple
- ;;
- *-unknown)
- # Make sure to match an already-canonicalized machine name.
- ;;
- *)
- echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
- exit 1
- ;;
-esac
-
-# Here we canonicalize certain aliases for manufacturers.
-case $basic_machine in
- *-digital*)
- basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'`
- ;;
- *-commodore*)
- basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'`
- ;;
- *)
- ;;
-esac
-
-# Decode manufacturer-specific aliases for certain operating systems.
-
-if [ x"$os" != x"" ]
-then
-case $os in
- # First match some system type aliases
- # that might get confused with valid system types.
- # -solaris* is a basic system type, with this one exception.
- -solaris1 | -solaris1.*)
- os=`echo $os | sed -e 's|solaris1|sunos4|'`
- ;;
- -solaris)
- os=-solaris2
- ;;
- -svr4*)
- os=-sysv4
- ;;
- -unixware*)
- os=-sysv4.2uw
- ;;
- -gnu/linux*)
- os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'`
- ;;
- # First accept the basic system types.
- # The portable systems comes first.
- # Each alternative MUST END IN A *, to match a version number.
- # -sysv* is not here because it comes later, after sysvr4.
- -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \
- | -*vms* | -sco* | -esix* | -isc* | -aix* | -sunos | -sunos[34]*\
- | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \
- | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \
- | -aos* \
- | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \
- | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \
- | -hiux* | -386bsd* | -netbsd* | -openbsd* | -freebsd* | -riscix* \
- | -lynxos* | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \
- | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \
- | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
- | -chorusos* | -chorusrdb* \
- | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
- | -mingw32* | -linux-gnu* | -uxpv* | -beos* | -mpeix* | -udk* \
- | -interix* | -uwin* | -rhapsody* | -darwin* | -opened* \
- | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \
- | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \
- | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \
- | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* | -powermax*)
- # Remember, each alternative MUST END IN *, to match a version number.
- ;;
- -qnx*)
- case $basic_machine in
- x86-* | i*86-*)
- ;;
- *)
- os=-nto$os
- ;;
- esac
- ;;
- -nto*)
- os=-nto-qnx
- ;;
- -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \
- | -windows* | -osx | -abug | -netware* | -os9* | -beos* \
- | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*)
- ;;
- -mac*)
- os=`echo $os | sed -e 's|mac|macos|'`
- ;;
- -linux*)
- os=`echo $os | sed -e 's|linux|linux-gnu|'`
- ;;
- -sunos5*)
- os=`echo $os | sed -e 's|sunos5|solaris2|'`
- ;;
- -sunos6*)
- os=`echo $os | sed -e 's|sunos6|solaris3|'`
- ;;
- -opened*)
- os=-openedition
- ;;
- -wince*)
- os=-wince
- ;;
- -osfrose*)
- os=-osfrose
- ;;
- -osf*)
- os=-osf
- ;;
- -utek*)
- os=-bsd
- ;;
- -dynix*)
- os=-bsd
- ;;
- -acis*)
- os=-aos
- ;;
- -atheos*)
- os=-atheos
- ;;
- -386bsd)
- os=-bsd
- ;;
- -ctix* | -uts*)
- os=-sysv
- ;;
- -nova*)
- os=-rtmk-nova
- ;;
- -ns2 )
- os=-nextstep2
- ;;
- -nsk*)
- os=-nsk
- ;;
- # Preserve the version number of sinix5.
- -sinix5.*)
- os=`echo $os | sed -e 's|sinix|sysv|'`
- ;;
- -sinix*)
- os=-sysv4
- ;;
- -triton*)
- os=-sysv3
- ;;
- -oss*)
- os=-sysv3
- ;;
- -svr4)
- os=-sysv4
- ;;
- -svr3)
- os=-sysv3
- ;;
- -sysvr4)
- os=-sysv4
- ;;
- # This must come after -sysvr4.
- -sysv*)
- ;;
- -ose*)
- os=-ose
- ;;
- -es1800*)
- os=-ose
- ;;
- -xenix)
- os=-xenix
- ;;
- -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
- os=-mint
- ;;
- -none)
- ;;
- *)
- # Get rid of the `-' at the beginning of $os.
- os=`echo $os | sed 's/[^-]*-//'`
- echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2
- exit 1
- ;;
-esac
-else
-
-# Here we handle the default operating systems that come with various machines.
-# The value should be what the vendor currently ships out the door with their
-# machine or put another way, the most popular os provided with the machine.
-
-# Note that if you're going to try to match "-MANUFACTURER" here (say,
-# "-sun"), then you have to tell the case statement up towards the top
-# that MANUFACTURER isn't an operating system. Otherwise, code above
-# will signal an error saying that MANUFACTURER isn't an operating
-# system, and we'll never get to this point.
-
-case $basic_machine in
- *-acorn)
- os=-riscix1.2
- ;;
- arm*-rebel)
- os=-linux
- ;;
- arm*-semi)
- os=-aout
- ;;
- # This must come before the *-dec entry.
- pdp10-*)
- os=-tops20
- ;;
- pdp11-*)
- os=-none
- ;;
- *-dec | vax-*)
- os=-ultrix4.2
- ;;
- m68*-apollo)
- os=-domain
- ;;
- i386-sun)
- os=-sunos4.0.2
- ;;
- m68000-sun)
- os=-sunos3
- # This also exists in the configure program, but was not the
- # default.
- # os=-sunos4
- ;;
- m68*-cisco)
- os=-aout
- ;;
- mips*-cisco)
- os=-elf
- ;;
- mips*-*)
- os=-elf
- ;;
- or32-*)
- os=-coff
- ;;
- *-tti) # must be before sparc entry or we get the wrong os.
- os=-sysv3
- ;;
- sparc-* | *-sun)
- os=-sunos4.1.1
- ;;
- *-be)
- os=-beos
- ;;
- *-ibm)
- os=-aix
- ;;
- *-wec)
- os=-proelf
- ;;
- *-winbond)
- os=-proelf
- ;;
- *-oki)
- os=-proelf
- ;;
- *-hp)
- os=-hpux
- ;;
- *-hitachi)
- os=-hiux
- ;;
- i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent)
- os=-sysv
- ;;
- *-cbm)
- os=-amigaos
- ;;
- *-dg)
- os=-dgux
- ;;
- *-dolphin)
- os=-sysv3
- ;;
- m68k-ccur)
- os=-rtu
- ;;
- m88k-omron*)
- os=-luna
- ;;
- *-next )
- os=-nextstep
- ;;
- *-sequent)
- os=-ptx
- ;;
- *-crds)
- os=-unos
- ;;
- *-ns)
- os=-genix
- ;;
- i370-*)
- os=-mvs
- ;;
- *-next)
- os=-nextstep3
- ;;
- *-gould)
- os=-sysv
- ;;
- *-highlevel)
- os=-bsd
- ;;
- *-encore)
- os=-bsd
- ;;
- *-sgi)
- os=-irix
- ;;
- *-siemens)
- os=-sysv4
- ;;
- *-masscomp)
- os=-rtu
- ;;
- f30[01]-fujitsu | f700-fujitsu)
- os=-uxpv
- ;;
- *-rom68k)
- os=-coff
- ;;
- *-*bug)
- os=-coff
- ;;
- *-apple)
- os=-macos
- ;;
- *-atari*)
- os=-mint
- ;;
- *)
- os=-none
- ;;
-esac
-fi
-
-# Here we handle the case where we know the os, and the CPU type, but not the
-# manufacturer. We pick the logical manufacturer.
-vendor=unknown
-case $basic_machine in
- *-unknown)
- case $os in
- -riscix*)
- vendor=acorn
- ;;
- -sunos*)
- vendor=sun
- ;;
- -aix*)
- vendor=ibm
- ;;
- -beos*)
- vendor=be
- ;;
- -hpux*)
- vendor=hp
- ;;
- -mpeix*)
- vendor=hp
- ;;
- -hiux*)
- vendor=hitachi
- ;;
- -unos*)
- vendor=crds
- ;;
- -dgux*)
- vendor=dg
- ;;
- -luna*)
- vendor=omron
- ;;
- -genix*)
- vendor=ns
- ;;
- -mvs* | -opened*)
- vendor=ibm
- ;;
- -ptx*)
- vendor=sequent
- ;;
- -vxsim* | -vxworks* | -windiss*)
- vendor=wrs
- ;;
- -aux*)
- vendor=apple
- ;;
- -hms*)
- vendor=hitachi
- ;;
- -mpw* | -macos*)
- vendor=apple
- ;;
- -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
- vendor=atari
- ;;
- -vos*)
- vendor=stratus
- ;;
- esac
- basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"`
- ;;
-esac
-
-echo $basic_machine$os
-exit 0
-
-# Local variables:
-# eval: (add-hook 'write-file-hooks 'time-stamp)
-# time-stamp-start: "timestamp='"
-# time-stamp-format: "%:y-%02m-%02d"
-# time-stamp-end: "'"
-# End:
diff --git a/configure.in b/configure.in
deleted file mode 100644
index 9271a7a115..0000000000
--- a/configure.in
+++ /dev/null
@@ -1,1436 +0,0 @@
-dnl ## $Id$ -*- sh -*-
-dnl ## Process this file with autoconf to produce a configure script.
-
-divert(1)
-
-dnl ## Diversion 1 is the autoconf + automake setup phase. We also
-dnl ## set the PHP version, deal with platform-specific compile
-dnl ## options and check for the basic compile tools.
-
-dnl ## Diversion 2 is the initial checking of OS features, programs,
-dnl ## libraries and so on.
-
-dnl ## In diversion 3 we check for compile-time options to the PHP
-dnl ## core and how to deal with different system dependencies. This
-dnl ## includes what regex library is used and whether debugging or short
-dnl ## tags are enabled, and the default behaviour of php.ini options.
-dnl ## This is also where an SAPI interface is selected (choosing between
-dnl ## Apache module, CGI etc.)
-
-dnl ## In diversion 4 we check user-configurable general settings.
-
-dnl ## In diversion 5 we check which extensions should be compiled.
-dnl ## All of these are normally in the extension directories.
-dnl ## Diversion 5 is the last one. Here we generate files and clean up.
-
-
-dnl Basic autoconf + automake initialization, generation of config.nice.
-dnl -------------------------------------------------------------------------
-
-AC_PREREQ(2.13)
-AC_INIT(README.CVS-RULES)
-
-PHP_CONFIG_NICE(config.nice)
-for arg in $0 "$@"; do
- CONFIGURE_COMMAND="$CONFIGURE_COMMAND '$arg'"
-done
-
-AC_CANONICAL_HOST
-AC_CONFIG_HEADER(main/php_config.h)
-
-MAJOR_VERSION=5
-MINOR_VERSION=1
-RELEASE_VERSION=0
-EXTRA_VERSION="-dev"
-VERSION="$MAJOR_VERSION.$MINOR_VERSION.$RELEASE_VERSION$EXTRA_VERSION"
-
-dnl Define where extension directories are located in the configure context
-AC_DEFUN(PHP_EXT_BUILDDIR,[ext/$1])dnl
-AC_DEFUN(PHP_EXT_DIR,[ext/$1])dnl
-AC_DEFUN(PHP_EXT_SRCDIR,[$abs_srcdir/ext/$1])dnl
-AC_DEFUN(PHP_ALWAYS_SHARED,[])dnl
-
-dnl Setting up the PHP version based on the information above.
-dnl -------------------------------------------------------------------------
-
-PHP_VERSION=$VERSION
-echo "/* automatically generated by configure */" > php_version.h.new
-echo "/* edit configure.in to change version number */" >> php_version.h.new
-echo "#define PHP_MAJOR_VERSION $MAJOR_VERSION" >> php_version.h.new
-echo "#define PHP_MINOR_VERSION $MINOR_VERSION" >> php_version.h.new
-echo "#define PHP_RELEASE_VERSION $RELEASE_VERSION" >> php_version.h.new
-echo "#define PHP_EXTRA_VERSION \"$EXTRA_VERSION\"" >> php_version.h.new
-echo "#define PHP_VERSION \"$PHP_VERSION\"" >> php_version.h.new
-cmp php_version.h.new $srcdir/main/php_version.h >/dev/null 2>&1
-if test $? -ne 0 ; then
- rm -f $srcdir/main/php_version.h && mv php_version.h.new $srcdir/main/php_version.h && \
- echo 'Updated main/php_version.h'
-else
- rm -f php_version.h.new
-fi
-
-
-dnl Catch common errors here to save a few seconds of our users' time
-dnl -------------------------------------------------------------------------
-
-if test "$with_shared_apache" != "no" && test -n "$with_shared_apache" ; then
- AC_MSG_ERROR([--with-shared-apache is not supported. Please refer to the documentation for using APXS])
-fi
-
-if test -n "$with_apache" && test -n "$with_apxs"; then
- AC_MSG_ERROR([--with-apache and --with-apxs cannot be used together])
-fi
-
-
-dnl Settings we want to make before the checks.
-dnl -------------------------------------------------------------------------
-
-cwd=`pwd`
-
-php_shtool=$srcdir/build/shtool
-T_MD=`$php_shtool echo -n -e %B`
-T_ME=`$php_shtool echo -n -e %b`
-
-PHP_INIT_BUILD_SYSTEM
-
-dnl We want this one before the checks, so the checks can modify CFLAGS.
-test -z "$CFLAGS" && auto_cflags=1
-
-abs_srcdir=`(cd $srcdir; pwd)`
-abs_builddir=`pwd`
-
-php_abs_top_srcdir=$abs_srcdir
-php_abs_top_builddir=$abs_builddir
-
-dnl Because ``make install'' is often performed by the superuser,
-dnl we create the libs subdirectory as the user who configures PHP.
-dnl Otherwise, the current user will not be able to delete libs
-dnl or the contents of libs.
-
-$php_shtool mkdir -p libs
-rm -f libs/*
-
-dnl Checks for programs.
-dnl -------------------------------------------------------------------------
-
-AC_PROG_CC
-AC_PROG_CC_C_O
-dnl Change to AC_PROG_CC_STDC when we start requiring a post-2.13 autoconf
-dnl AC_PROG_CC_STDC
-AC_PROG_CPP
-
-AC_AIX
-
-dnl AC_PROG_CXX
-dnl AC_PROG_CXXCPP
-
-dnl check for -R, etc. switch
-PHP_RUNPATH_SWITCH
-
-PHP_PROG_RE2C
-AC_PROG_RANLIB
-AC_PROG_LN_S
-
-dnl Some vendors force mawk before gawk; mawk is broken so we don't like that,
-dnl and check manually
-dnl AC_PROG_AWK
-AC_CHECK_PROGS(AWK, gawk nawk awk mawk, bork, /usr/xpg4/bin/:$PATH)
-case "$AWK" in
- *mawk)
- AC_MSG_WARN([mawk is known to have problems on some systems. You should install GNU awk])
- ;;
- *gawk)
- ;;
- bork)
- AC_MSG_ERROR([Could not find awk; Install GNU awk])
- ;;
- *)
- AC_MSG_CHECKING([if $AWK is broken])
- if ! $AWK 'function foo() {}' >/dev/null 2>&1 ; then
- AC_MSG_RESULT([yes])
- AC_MSG_ERROR([You should install GNU awk])
- else
- AC_MSG_RESULT([no - good!])
- fi
- ;;
-esac
-
-AC_PROG_YACC
-if test "$YACC" != "bison -y"; then
- AC_MSG_WARN([You will need bison if you want to regenerate the PHP parsers.])
-else
- AC_MSG_CHECKING([bison version])
- set `bison --version| grep 'GNU Bison' | cut -d ' ' -f 4 | sed -e 's/\./ /'|tr -d a-z`
- if test "${1}" -ne "1" -o "(" "${2}" != "28" -a "${2}" != "35" -a "${2}" != "75" -a "${2}" != "875" ")"; then
- AC_MSG_WARN([You will need bison 1.28, 1.35, 1.75 or 1.875 if you want to regenerate the Zend parser (found ${1}.${2}).])
- fi
- AC_MSG_RESULT(${1}.${2} (ok))
-fi
-AC_PROG_LEX
-if test -n "$LEX"; then
- AC_DECL_YYTEXT
- :
-fi
-dnl ## Make flex scanners use const if they can, even if __STDC__ is not
-dnl ## true, for compilers like Sun's that only set __STDC__ true in
-dnl ## "limit-to-ANSI-standard" mode, not in "ANSI-compatible" mode
-AC_C_CONST
-if test "$ac_cv_c_const" = "yes" ; then
- LEX_CFLAGS="-DYY_USE_CONST"
-fi
-
-AC_MSG_CHECKING([flex version])
-if test "$LEX" ;then
- flexvers=`echo "" | $LEX -V -v --version 2>/dev/null |
- sed -e 's/^.* //' -e 's/\./ /g'`
- if test ! -z "$flexvers"; then
- set $flexvers
- if test "${1}" != "2" -o "${2}" != "5" -o "${3}" != "4"; then
- AC_MSG_WARN(You will need flex 2.5.4 if you want to regenerate Zend/PHP lexical parsers.)
- fi
- fi
-AC_MSG_RESULT(${1}.${2}.${3} (ok))
-else
- AC_MSG_WARN(You will need flex 2.5.4 or later if you want to regenerate Zend/PHP lexical parsers.)
-fi
-
-dnl Platform-specific compile settings.
-dnl -------------------------------------------------------------------------
-
-dnl if host_alias is empty, ac_cv_host_alias may still have the info
-if test -z "$host_alias"; then
- host_alias=$ac_cv_host_alias
-fi
-
-case $host_alias in
-*solaris*)
- CPPFLAGS="$CPPFLAGS -D_POSIX_PTHREAD_SEMANTICS"
- if test "${enable_libgcc+set}" != "set" && test "$GCC" = "yes"; then
- enable_libgcc=yes
- fi
- ;;
-*dgux*)
- CPPFLAGS="$CPPFLAGS -D_BSD_TIMEOFDAY_FLAVOR";;
-*darwin*|*rhapsody*)
- CPPFLAGS="$CPPFLAGS -no-cpp-precomp"
- AC_DEFINE(BIND_8_COMPAT, 1, [Enabling BIND8 compatibility for Panther])
- php_multiple_shlib_versions_ok=yes;;
-*beos*)
- beos_threads=1
- LIBS="$LIBS -lbe -lroot";;
-*mips*)
- CPPFLAGS="$CPPFLAGS -D_XPG_IV";;
-esac
-
-
-dnl Include Zend and TSRM configurations.
-dnl -------------------------------------------------------------------------
-
-sinclude(Zend/acinclude.m4)
-sinclude(Zend/Zend.m4)
-sinclude(TSRM/tsrm.m4)
-
-
-
-divert(2)
-
-dnl ## Diversion 2 is where we set PHP-specific options and come up
-dnl ## with reasonable default values for them. We check for pthreads here
-dnl ## because the information is needed by the SAPI configuration.
-dnl ## This is also where an SAPI interface is selected (choosing between
-dnl ## Apache module, CGI etc.)
-
-dnl .
-dnl -------------------------------------------------------------------------
-
-PTHREADS_CHECK
-PHP_HELP_SEPARATOR([SAPI modules:])
-PHP_SHLIB_SUFFIX_NAME
-PHP_SAPI=default
-PHP_BUILD_PROGRAM
-
-
-
-dnl SAPI configuration.
-dnl -------------------------------------------------------------------------
-
-dnl paths to the targets are relative to the build directory
-SAPI_SHARED=libs/libphp5.$SHLIB_SUFFIX_NAME
-SAPI_STATIC=libs/libphp5.a
-SAPI_LIBTOOL=libphp5.la
-
-PHP_CONFIGURE_PART(Configuring SAPI modules)
-
-esyscmd(./build/config-stubs sapi)
-
-dnl Show which main SAPI was selected
-AC_MSG_CHECKING([for chosen SAPI module])
-AC_MSG_RESULT([$PHP_SAPI])
-
-if test "$enable_maintainer_zts" = "yes"; then
- PTHREADS_ASSIGN_VARS
- PTHREADS_FLAGS
-fi
-
-if test "$PHP_ENABLE_FASTCGI" = "yes"; then
- PHP_CONFIGURE_PART(Running FastCGI checks)
- sinclude(sapi/cgi/libfcgi/acinclude.m4)
- sinclude(sapi/cgi/libfcgi/libfcgi.m4)
-fi
-
-divert(3)
-
-dnl ## In diversion 3 we check for compile-time options to the PHP
-dnl ## core and how to deal with different system dependencies. This
-dnl ## includes what regex library is used and whether debugging or short
-dnl ## tags are enabled, and the default behaviour of php.ini options.
-
-
-
-dnl Starting system checks.
-dnl -------------------------------------------------------------------------
-
-PHP_CONFIGURE_PART(Running system checks)
-
-PHP_MISSING_TIME_R_DECL
-PHP_PROG_SENDMAIL
-dnl Check whether the system uses EBCDIC (not ASCII) as its native codeset
-PHP_EBCDIC
-dnl Check for /usr/pkg/{lib,include} which is where NetBSD puts binary
-dnl and source packages. This should be harmless on other OSs.
-if test -d /usr/pkg/include -a -d /usr/pkg/lib ; then
- CPPFLAGS="$CPPFLAGS -I/usr/pkg/include"
- LDFLAGS="$LDFLAGS -L/usr/pkg/lib"
-fi
-INCLUDES="$INCLUDES -I\$(top_builddir)/Zend"
-test -d /usr/ucblib && PHP_ADD_LIBPATH(/usr/ucblib)
-
-
-dnl First, library checks.
-dnl -------------------------------------------------------------------------
-
-dnl Some systems (OpenServer 5) dislike -lsocket -lnsl, so we try
-dnl to avoid -lnsl checks, if we already have the functions which
-dnl are usually in libnsl
-dnl Also, uClibc will bark at linking with glibc's libnsl.
-
-PHP_CHECK_FUNC(socket, socket)
-PHP_CHECK_FUNC(htonl, socket)
-PHP_CHECK_FUNC(gethostname, nsl)
-PHP_CHECK_FUNC(gethostbyaddr, nsl)
-PHP_CHECK_FUNC(yp_get_default_domain, nsl)
-
-PHP_CHECK_FUNC(dlopen, dl)
-if test "$ac_cv_func_dlopen" = "yes"; then
- AC_DEFINE(HAVE_LIBDL, 1, [ ])
-fi
-AC_CHECK_LIB(m, sin)
-
-dnl Check for resolver routines.
-dnl Need to check for both res_search and __res_search
-dnl in -lc, -lbind, -lresolv and -lsocket
-PHP_CHECK_FUNC(res_search, resolv, bind, socket)
-
-dnl Check for inet_aton and dn_skipname
-dnl in -lc, -lbind and -lresolv
-PHP_CHECK_FUNC(inet_aton, resolv, bind)
-PHP_CHECK_FUNC(dn_skipname, resolv, bind)
-
-
-dnl Then headers.
-dnl -------------------------------------------------------------------------
-
-dnl Checks for header files.
-AC_HEADER_STDC
-AC_HEADER_DIRENT
-
-PHP_MISSING_FCLOSE_DECL
-dnl QNX requires unix.h to allow functions in libunix to work properly
-AC_CHECK_HEADERS([ \
-dirent.h \
-ApplicationServices/ApplicationServices.h \
-sys/param.h \
-sys/types.h \
-sys/time.h \
-netinet/in.h \
-alloca.h \
-arpa/inet.h \
-arpa/nameser.h \
-assert.h \
-crypt.h \
-fcntl.h \
-grp.h \
-ieeefp.h \
-langinfo.h \
-limits.h \
-locale.h \
-monetary.h \
-mach-o/dyld.h \
-netdb.h \
-pwd.h \
-resolv.h \
-signal.h \
-stdarg.h \
-stdlib.h \
-string.h \
-syslog.h \
-sysexits.h \
-sys/ioctl.h \
-sys/file.h \
-sys/mman.h \
-sys/mount.h \
-sys/poll.h \
-sys/resource.h \
-sys/select.h \
-sys/socket.h \
-sys/statfs.h \
-sys/statvfs.h \
-sys/vfs.h \
-sys/sysexits.h \
-sys/varargs.h \
-sys/wait.h \
-termios.h \
-unistd.h \
-unix.h \
-utime.h \
-sys/utsname.h \
-sys/ipc.h \
-dlfcn.h \
-inttypes.h
-],[],[],[
-#ifdef HAVE_SYS_PARAM_H
-#include <sys/param.h>
-#endif
-#ifdef HAVE_SYS_TYPES_H
-#include <sys/types.h>
-#endif
-#ifdef HAVE_SYS_TIME_H
-#include <sys/time.h>
-#endif
-#ifdef HAVE_NETINET_IN_H
-#include <netinet/in.h>
-#endif
-#ifdef HAVE_ARPA_NAMESER_H
-#include <arpa/nameser.h>
-#endif
-])
-
-PHP_FOPENCOOKIE
-PHP_BROKEN_GETCWD
-PHP_BROKEN_GLIBC_FOPEN_APPEND
-
-dnl Checks for typedefs, structures, and compiler characteristics.
-dnl -------------------------------------------------------------------------
-
-AC_STRUCT_TM
-AC_STRUCT_TIMEZONE
-
-PHP_TM_GMTOFF
-PHP_STRUCT_FLOCK
-PHP_SOCKLEN_T
-
-AC_CHECK_SIZEOF(intmax_t, 0)
-AC_CHECK_SIZEOF(size_t, 8)
-AC_CHECK_SIZEOF(ssize_t, 8)
-AC_CHECK_SIZEOF(ptrdiff_t, 8)
-AC_CHECK_SIZEOF(long long, 8)
-AC_CHECK_SIZEOF(long long int, 8)
-AC_CHECK_SIZEOF(long, 8)
-AC_CHECK_SIZEOF(int, 4)
-
-dnl Check for members of the stat structure
-AC_STRUCT_ST_BLKSIZE
-dnl AC_STRUCT_ST_BLOCKS will screw QNX because fileblocks.o does not exists
-dnl The WARNING_LEVEL required because cc in QNX hates -w option without an argument
-if test "`uname -s 2>/dev/null`" != "QNX"; then
- AC_STRUCT_ST_BLOCKS
-else
- AC_MSG_WARN([warnings level for cc set to 0])
- WARNING_LEVEL=0
-fi
-AC_STRUCT_ST_RDEV
-
-dnl Checks for types
-AC_TYPE_SIZE_T
-AC_TYPE_UID_T
-
-dnl Check for struct sockaddr_storage
-AC_CACHE_CHECK([for struct sockaddr_storage], ac_cv_sockaddr_storage,
-[AC_TRY_COMPILE([ #include <sys/types.h>
-#include <sys/socket.h>], [struct sockaddr_storage s; s],
- ac_cv_sockaddr_storage=yes, ac_cv_sockaddr_storage=no)])
-if test "$ac_cv_sockaddr_storage" = yes; then
- AC_DEFINE(HAVE_SOCKADDR_STORAGE,1,[Whether you have struct sockaddr_storage])
-fi
-
-dnl Check if sockaddr data structure includes an "sa_len" member
-
-AC_TRY_COMPILE([
-#include <sys/types.h>
-#include <sys/socket.h>
-], [static struct sockaddr sa; int n = (int) sa.sa_len; return n],
-[AC_DEFINE(HAVE_SOCKADDR_LEN,1,[Whether sockaddr struct has sa_len])],
-[])
-
-dnl Check for IPv6 support
-AC_CACHE_CHECK([for IPv6 support], ac_cv_ipv6_support,
-[AC_TRY_LINK([ #include <sys/types.h>
-#include <sys/socket.h>
-#include <netinet/in.h>], [struct sockaddr_in6 s; struct in6_addr t=in6addr_any; int i=AF_INET6; s; t.s6_addr[0] = 0;],
- [ac_cv_ipv6_support=yes], [ac_cv_ipv6_support=no])])
-
-
-
-dnl Checks for library functions.
-dnl -------------------------------------------------------------------------
-
-AC_FUNC_VPRINTF
-AC_CHECK_FUNCS(
-alphasort \
-asctime_r \
-chroot \
-ctime_r \
-cuserid \
-crypt \
-flock \
-ftok \
-funopen \
-gai_strerror \
-gcvt \
-getlogin \
-getprotobyname \
-getprotobynumber \
-getservbyname \
-getservbyport \
-getrusage \
-gettimeofday \
-gmtime_r \
-grantpt \
-inet_ntoa \
-inet_ntop \
-inet_pton \
-isascii \
-link \
-localtime_r \
-lockf \
-lrand48 \
-memcpy \
-memmove \
-mkstemp \
-mmap \
-nl_langinfo \
-perror \
-poll \
-ptsname \
-putenv \
-realpath \
-random \
-rand_r \
-regcomp \
-res_search \
-scandir \
-setitimer \
-setlocale \
-localeconv \
-setpgid \
-setsockopt \
-setvbuf \
-shutdown \
-sin \
-snprintf \
-srand48 \
-srandom \
-statfs \
-statvfs \
-std_syslog \
-strcasecmp \
-strcoll \
-strdup \
-strerror \
-strftime \
-strstr \
-strtok_r \
-symlink \
-tempnam \
-tzset \
-unlockpt \
-unsetenv \
-usleep \
-nanosleep \
-utime \
-vsnprintf \
-)
-
-dnl Check for getaddrinfo, should be a better way, but...
-dnl Also check for working getaddrinfo
-AC_CACHE_CHECK([for getaddrinfo], ac_cv_func_getaddrinfo,
-[AC_TRY_LINK([#include <netdb.h>],
- [struct addrinfo *g,h;g=&h;getaddrinfo("","",g,&g);],
- AC_TRY_RUN([
-#include <netdb.h>
-#include <sys/types.h>
-int main(void) {
- struct addrinfo *ai, *pai, hints;
-
- memset(&hints, 0, sizeof(hints));
- hints.ai_flags = AI_NUMERICHOST;
-
- if (getaddrinfo("127.0.0.1", NULL, &hints, &ai) < 0) {
- exit(1);
- }
-
- if (ai == NULL) {
- exit(1);
- }
-
- pai = ai;
-
- while (pai) {
- if (pai->ai_family != AF_INET) {
- /* 127.0.0.1/NUMERICHOST should only resolve ONE way */
- exit(1);
- }
- if (pai->ai_addr->sa_family != AF_INET) {
- /* 127.0.0.1/NUMERICHOST should only resolve ONE way */
- exit(1);
- }
- pai = pai->ai_next;
- }
- freeaddrinfo(ai);
- exit(0);
-}
- ],ac_cv_func_getaddrinfo=yes, ac_cv_func_getaddrinfo=no),
-ac_cv_func_getaddrinfo=no)])
-if test "$ac_cv_func_getaddrinfo" = yes; then
- AC_DEFINE(HAVE_GETADDRINFO,1,[Define if you have the getaddrinfo function])
-fi
-
-AC_REPLACE_FUNCS(strlcat strlcpy getopt)
-AC_FUNC_UTIME_NULL
-AC_FUNC_ALLOCA
-PHP_AC_BROKEN_SPRINTF
-PHP_AC_BROKEN_SNPRINTF
-PHP_DECLARED_TIMEZONE
-PHP_TIME_R_TYPE
-PHP_READDIR_R_TYPE
-
-dnl AIX keeps in_addr_t in /usr/include/netinet/in.h
-dnl AC_MSG_CHECKING([for in_addr_t])
-AC_CACHE_VAL(ac_cv_type_$1,
-[AC_EGREP_CPP(dnl
-changequote(<<,>>)dnl
-<<in_addr_t[^a-zA-Z_0-9]>>dnl
-changequote([,]), [#include <sys/types.h>
-#if STDC_HEADERS
-#include <stdlib.h>
-#include <stddef.h>
-#endif
-#ifdef HAVE_NETINET_IN_H
-#include <netinet/in.h>
-#endif], ac_cv_type_in_addr_t=yes, ac_cv_type_in_addr_t=no)])dnl
-
-dnl AC_MSG_RESULT([$ac_cv_type_in_addr_t])
-if test $ac_cv_type_in_addr_t = no; then
- AC_DEFINE(in_addr_t, u_int, [ ])
-fi
-
-
-
-divert(4)
-
-dnl ## In diversion 4 we check user-configurable general settings.
-
-dnl General settings.
-dnl -------------------------------------------------------------------------
-PHP_CONFIGURE_PART(General settings)
-
-PHP_HELP_SEPARATOR([General settings:])
-
-PHP_ARG_ENABLE(debug, whether to include debugging symbols,
-[ --enable-debug Compile with debugging symbols.], no, no)
-
-if test "$PHP_DEBUG" = "yes"; then
- PHP_DEBUG=1
- ZEND_DEBUG=yes
-else
- PHP_DEBUG=0
- ZEND_DEBUG=no
-fi
-
-PHP_ARG_WITH(layout,[layout of installed files],
-[ --with-layout=TYPE Sets how installed files will be laid out. Type is
- one of "PHP" (default) or "GNU"], PHP, no)
-
-case $PHP_LAYOUT in
- GNU)
- oldstyleextdir=no
- ;;
- *)
- oldstyleextdir=yes
- ;;
-esac
-
-PHP_ARG_WITH(config-file-path,[path to configuration file],
-[ --with-config-file-path=PATH
- Sets the path in which to look for php.ini,
- defaults to PREFIX/lib], DEFAULT, no)
-
-if test "$PHP_CONFIG_FILE_PATH" = "DEFAULT"; then
- case $PHP_LAYOUT in
- GNU)
- PHP_CONFIG_FILE_PATH=$sysconfdir
- ;;
- *)
- PHP_CONFIG_FILE_PATH=$libdir
- ;;
- esac
-fi
-
-PHP_ARG_WITH(config-file-scan-dir,[directory to be scanned for configuration files],
-[ --with-config-file-scan-dir=PATH ], DEFAULT, no)
-if test "$PHP_CONFIG_FILE_SCAN_DIR" = "DEFAULT"; then
- PHP_CONFIG_FILE_SCAN_DIR=""
-fi
-
-test -n "$DEBUG_CFLAGS" && CFLAGS="$CFLAGS $DEBUG_CFLAGS"
-
-PHP_ARG_ENABLE(safe-mode, whether to enable safe mode by default,
-[ --enable-safe-mode Enable safe mode by default.], no, no)
-
-if test "$PHP_SAFE_MODE" = "yes"; then
- AC_DEFINE(PHP_SAFE_MODE,1,[ ])
-else
- AC_DEFINE(PHP_SAFE_MODE,0,[ ])
-fi
-
-AC_MSG_CHECKING([for safe mode exec dir])
-AC_ARG_WITH(exec-dir,
-[ --with-exec-dir[=DIR] Only allow executables in DIR when in safe mode
- defaults to /usr/local/php/bin],
-[
- if test "$withval" != "no"; then
- if test "$withval" = "yes"; then
- AC_DEFINE(PHP_SAFE_MODE_EXEC_DIR,"/usr/local/php/bin", [ ])
- AC_MSG_RESULT([/usr/local/php/bin])
- else
- AC_DEFINE_UNQUOTED(PHP_SAFE_MODE_EXEC_DIR,"$withval", [ ])
- AC_MSG_RESULT([$withval])
- fi
- else
- AC_DEFINE(PHP_SAFE_MODE_EXEC_DIR,"/usr/local/php/bin", [ ])
- AC_MSG_RESULT([/usr/local/php/bin])
- fi
-],[
- AC_DEFINE(PHP_SAFE_MODE_EXEC_DIR,"/usr/local/php/bin", [ ])
- AC_MSG_RESULT([/usr/local/php/bin])
-])
-
-PHP_ARG_ENABLE(sigchild,whether to enable PHP's own SIGCHLD handler,
-[ --enable-sigchild Enable PHP's own SIGCHLD handler.], no, no)
-
-if test "$PHP_SIGCHILD" = "yes"; then
- AC_DEFINE(PHP_SIGCHILD, 1, [ ])
-else
- AC_DEFINE(PHP_SIGCHILD, 0, [ ])
-fi
-
-PHP_ARG_ENABLE(magic-quotes,whether to enable magic quotes by default,
-[ --enable-magic-quotes Enable magic quotes by default.], no, no)
-
-if test "$PHP_MAGIC_QUOTES" = "yes"; then
- AC_DEFINE(MAGIC_QUOTES, 1, [ ])
-else
- AC_DEFINE(MAGIC_QUOTES, 0, [ ])
-fi
-
-PHP_ARG_ENABLE(rpath, whether to enable runpaths,
-[ --disable-rpath Disable passing additional runtime library
- search paths], yes, no)
-
-PHP_ARG_ENABLE(libgcc, whether to explicitly link against libgcc,
-[ --enable-libgcc Enable explicitly linking against libgcc], no, no)
-
-if test "$PHP_LIBGCC" = "yes"; then
- PHP_LIBGCC_LIBPATH(gcc)
- if test -z "$libgcc_libpath"; then
- AC_MSG_ERROR([Cannot locate libgcc. Make sure that gcc is in your path])
- fi
- PHP_ADD_LIBPATH($libgcc_libpath)
- PHP_ADD_LIBRARY(gcc, yes)
-fi
-
-PHP_ARG_ENABLE(short-tags,whether to enable short tags by default,
-[ --disable-short-tags Disable the short-form <? start tag by default.],yes, no)
-
-if test "$PHP_SHORT_TAGS" = "yes"; then
- AC_DEFINE(DEFAULT_SHORT_OPEN_TAG,"1",[ ])
-else
- AC_DEFINE(DEFAULT_SHORT_OPEN_TAG,"0",[ ])
-fi
-
-PHP_ARG_ENABLE(dmalloc,whether to enable dmalloc,
-[ --enable-dmalloc Enable dmalloc], no, no)
-
-if test "$PHP_DMALLOC" = "yes"; then
-
- AC_CHECK_LIB(dmalloc, dmalloc_error, [
- PHP_ADD_LIBRARY(dmalloc)
- AC_DEFINE(HAVE_DMALLOC,1,[Whether you have dmalloc])
- CPPFLAGS="$CPPFLAGS -DDMALLOC_FUNC_CHECK"
- ], [
- AC_MSG_ERROR([Problem with enabling dmalloc. Please check config.log for details.])
- ])
-fi
-
-PHP_ARG_ENABLE(ipv6,whether to enable IPv6 support,
-[ --disable-ipv6 Disable IPv6 support], yes, no)
-
-if test "$PHP_IPV6" != "no" && test "$ac_cv_ipv6_support" = yes; then
- AC_DEFINE(HAVE_IPV6,1,[Whether to enable IPv6 support])
-fi
-
-AC_MSG_CHECKING([whether to enable versioning])
-AC_ARG_ENABLE(versioning,
-[ --enable-versioning Export only required symbols.
- See INSTALL for more information], [
- if test "x$APXS" != "x"; then
- PHP_VERSIONING=$enableval
- else
- PHP_VERSIONING=no
- fi
-],[
- PHP_VERSIONING=no
-])
-AC_MSG_RESULT([$PHP_VERSIONING])
-
-divert(5)
-
-dnl ## In diversion 5 we check which extensions should be compiled.
-dnl ## All of these are normally in the extension directories.
-
-dnl Extension configuration.
-dnl -------------------------------------------------------------------------
-
-PHP_HELP_SEPARATOR([Extensions:
-
- --with-EXTENSION=[shared[,PATH]]
-
- NOTE: Not all extensions can be build as 'shared'.
-
- Example: --with-foobar=shared,/usr/local/foobar/
-
- o Builds the foobar extension as shared extension.
- o foobar package install prefix is /usr/local/foobar/
-])
-
-PHP_CONFIGURE_PART(Configuring extensions)
-
-dnl
-dnl Check if all enabled by default extensions should be disabled
-dnl
-
-AC_ARG_ENABLE(all,
-[ --disable-all Disable all extensions enabled by default.
-], [
- PHP_ENABLE_ALL=$enableval
-])
-
-# reading config stubs
-esyscmd(./build/config-stubs ext)
-
-dnl Extensions post-config
-dnl -------------------------------------------------------------------------
-
-if test "$PHP_VERSIONING" = "yes"; then
- test -z "$PHP_SYM_FILE" && PHP_SYM_FILE="$abs_srcdir/sapi/$PHP_SAPI/php.sym"
- if test -f "$PHP_SYM_FILE"; then
- EXTRA_LDFLAGS="-export-symbols $PHP_SYM_FILE $EXTRA_LDFLAGS"
- fi
-fi
-
-enable_shared=yes
-enable_static=yes
-unset with_pic
-
-case $php_build_target in
-program|static)
- standard_libtool_flag='-prefer-non-pic -static'
- if test -z "$PHP_MODULES"; then
- enable_shared=no
- fi
-;;
-shared)
- enable_static=no
- standard_libtool_flag=-prefer-pic
- EXTRA_LDFLAGS="$EXTRA_LDFLAGS -avoid-version -module"
-;;
-esac
-
-EXTRA_LIBS="$EXTRA_LIBS $DLIBS $LIBS"
-
-dnl this has to be here to prevent the openssl crypt() from
-dnl overriding the system provided crypt().
-if test "$ac_cv_lib_crypt_crypt" = "yes"; then
- EXTRA_LIBS="-lcrypt $EXTRA_LIBS -lcrypt"
-fi
-
-unset LIBS LDFLAGS
-
-dnl PEAR
-dnl -------------------------------------------------------------------------
-
-PHP_HELP_SEPARATOR([PEAR:])
-PHP_CONFIGURE_PART(Configuring PEAR)
-
-# compatibility
-if test -z "$with_pear" && test "$enable_pear" = "no"; then
- with_pear=no
-fi
-
-PHP_ARG_WITH(pear, [whether to install PEAR],
-[ --with-pear=DIR Install PEAR in DIR (default PREFIX/lib/php)
- --without-pear Do not install PEAR], DEFAULT, yes)
-
-if test "$PHP_PEAR" != "no"; then
-
- dnl
- dnl PEAR dependancies
- dnl
- if test "$PHP_SAPI_CLI" = "no"; then
- pear_error_msg="$pear_error_msg
- PEAR requires CLI to be enabled. Add --enable-cli to the configure line. (or --disable-pear)"
- fi
- if test "$PHP_PCRE_REGEX" = "no"; then
- pear_error_msg="$pear_error_msg
- PEAR requires PCRE to be enabled. Add --with-pcre-regex to the configure line. (or --disable-pear)"
- fi
- if test "$PHP_XML" = "no"; then
- pear_error_msg="$pear_error_msg
- PEAR requires XML to be enabled. Add --enable-xml to the configure line. (or --disable-pear)"
- fi
-
-dnl
-dnl ext/xmlrpc is not really there yet to be a requirement..
-dnl
-dnl if test "$PHP_XMLRPC" = "no"; then
-dnl pear_error_msg="$pear_error_msg
-dnl PEAR requires XML-RPC to be enabled. Add --with-xmlrpc to the configure line. (or --disable-pear)"
-dnl fi
-dnl
-
- if test "$pear_error_msg"; then
- AC_MSG_ERROR([$pear_error_msg])
- fi
-
- install_pear="install-pear"
- PEAR_INSTALLDIR=$PHP_PEAR
-
- if test "$PHP_PEAR" = "DEFAULT" || test "$PHP_PEAR" = "yes"; then
- case $PHP_LAYOUT in
- GNU) PEAR_INSTALLDIR=$datadir/pear;;
- *) PEAR_INSTALLDIR=$libdir/php;;
- esac
- fi
-fi
-
-
-dnl Configuring Zend and TSRM.
-dnl -------------------------------------------------------------------------
-
-PHP_HELP_SEPARATOR([Zend:])
-PHP_CONFIGURE_PART(Configuring Zend)
-
-LIBZEND_BASIC_CHECKS
-LIBZEND_DLSYM_CHECK
-LIBZEND_OTHER_CHECKS
-
-TSRM_LIB='TSRM/libtsrm.la'
-TSRM_DIR=TSRM
-CPPFLAGS="$CPPFLAGS -I\$(top_builddir)/TSRM"
-
-if test "$ZEND_MAINTAINER_ZTS" = "yes"; then
- AC_DEFINE(ZTS,1,[ ])
- PHP_THREAD_SAFETY=yes
-else
- PHP_THREAD_SAFETY=no
-fi
-
-if test "$abs_srcdir" != "$abs_builddir"; then
- INCLUDES="$INCLUDES -I\$(top_srcdir)/main -I\$(top_srcdir)/Zend"
- INCLUDES="$INCLUDES -I\$(top_srcdir)/TSRM"
-fi
-
-ZEND_EXTRA_LIBS="$LIBS"
-unset LIBS LDFLAGS
-
-PHP_HELP_SEPARATOR([TSRM:])
-PHP_CONFIGURE_PART(Configuring TSRM)
-TSRM_BASIC_CHECKS
-if test "$PHP_THREAD_SAFETY" = "yes"; then
- TSRM_THREADS_CHECKS
-fi
-EXTRA_LDFLAGS="$EXTRA_LDFLAGS $LDFLAGS"
-EXTRA_LDFLAGS_PROGRAM="$EXTRA_LDFLAGS_PROGRAM $LDFLAGS"
-EXTRA_LIBS="$EXTRA_LIBS $LIBS"
-unset LIBS LDFLAGS
-
-test "$prefix" = "NONE" && prefix=/usr/local
-test "$exec_prefix" = "NONE" && exec_prefix='${prefix}'
-test "$program_prefix" = "NONE" && program_prefix=
-test "$program_suffix" = "NONE" && program_suffix=
-
-case $libdir in
- '${exec_prefix}/lib')
- libdir=$libdir/php
- ;;
-esac
-case $datadir in
- '${prefix}/share')
- datadir=$datadir/php
- ;;
- *) ;;
-esac
-
-phplibdir=`pwd`/modules
-$php_shtool mkdir -p $phplibdir
-phptempdir=`pwd`/libs
-
-old_exec_prefix=$exec_prefix
-old_libdir=$libdir
-old_datadir=$datadir
-exec_prefix=`eval echo $exec_prefix`
-libdir=`eval echo $libdir`
-datadir=`eval echo $datadir`
-
-dnl Build extension directory path
-
-ZEND_MODULE_API_NO=`egrep '#define ZEND_MODULE_API_NO ' $srcdir/Zend/zend_modules.h|sed 's/#define ZEND_MODULE_API_NO //'`
-
-if test -z "$EXTENSION_DIR"; then
- extbasedir=$ZEND_MODULE_API_NO
- if test "$oldstyleextdir" = "yes"; then
- if test "$PHP_DEBUG" = "1"; then
- part1=debug
- else
- part1=no-debug
- fi
- if test "$enable_maintainer_zts" = "yes"; then
- part2=zts
- else
- part2=non-zts
- fi
- extbasedir=$part1-$part2-$extbasedir
- EXTENSION_DIR=$libdir/extensions/$extbasedir
- else
- if test "$enable_maintainer_zts" = "yes"; then
- extbasedir=$extbasedir-zts
- fi
-
- if test "$PHP_DEBUG" = "1"; then
- extbasedir=$extbasedir-debug
- fi
- EXTENSION_DIR=$libdir/$extbasedir
- fi
-fi
-
-dnl Expand all directory names for use in macros/constants
-EXPANDED_PEAR_INSTALLDIR=`eval echo $PEAR_INSTALLDIR`
-EXPANDED_EXTENSION_DIR=`eval echo $EXTENSION_DIR`
-EXPANDED_LOCALSTATEDIR=`eval echo $localstatedir`
-EXPANDED_BINDIR=`eval echo $bindir`
-EXPANDED_LIBDIR=$libdir
-EXPANDED_SYSCONFDIR=`eval echo $sysconfdir`
-EXPANDED_DATADIR=$datadir
-EXPANDED_PHP_CONFIG_FILE_PATH=`eval echo "$PHP_CONFIG_FILE_PATH"`
-EXPANDED_PHP_CONFIG_FILE_SCAN_DIR=`eval echo "$PHP_CONFIG_FILE_SCAN_DIR"`
-INCLUDE_PATH=.:$EXPANDED_PEAR_INSTALLDIR
-
-exec_prefix=$old_exec_prefix
-libdir=$old_libdir
-datadir=$old_datadir
-
-AC_SUBST(INCLUDE_PATH)
-AC_SUBST(EXPANDED_PEAR_INSTALLDIR)
-AC_SUBST(EXPANDED_EXTENSION_DIR)
-AC_SUBST(EXPANDED_BINDIR)
-AC_SUBST(EXPANDED_LIBDIR)
-AC_SUBST(EXPANDED_DATADIR)
-AC_SUBST(EXPANDED_SYSCONFDIR)
-AC_SUBST(EXPANDED_LOCALSTATEDIR)
-AC_SUBST(EXPANDED_PHP_CONFIG_FILE_PATH)
-AC_SUBST(EXPANDED_PHP_CONFIG_FILE_SCAN_DIR)
-
-if test -n "$php_ldflags_add_usr_lib"; then
- PHP_RPATHS="$PHP_RPATHS /usr/lib"
-fi
-
-PHP_UTILIZE_RPATHS
-
-if test -z "$php_ldflags_add_usr_lib"; then
- PHP_REMOVE_USR_LIB(PHP_LDFLAGS)
- PHP_REMOVE_USR_LIB(LDFLAGS)
-fi
-
-EXTRA_LDFLAGS="$EXTRA_LDFLAGS $PHP_LDFLAGS"
-EXTRA_LDFLAGS_PROGRAM="$EXTRA_LDFLAGS_PROGRAM $PHP_LDFLAGS"
-
-PHP_BUILD_DATE=`date '+%Y-%m-%d'`
-AC_DEFINE_UNQUOTED(PHP_BUILD_DATE,"$PHP_BUILD_DATE",[PHP build date])
-PHP_UNAME=`uname -a | xargs`
-AC_DEFINE_UNQUOTED(PHP_UNAME,"$PHP_UNAME",[uname -a output])
-PHP_OS=`uname | xargs`
-AC_DEFINE_UNQUOTED(PHP_OS,"$PHP_OS",[uname output])
-
-if test "$PHP_SAPI_CLI" != "no"; then
- PHP_CLI_TARGET="\$(SAPI_CLI_PATH)"
- PHP_INSTALL_CLI_TARGET="install-cli"
- PHP_ADD_SOURCES(sapi/cli, php_cli.c getopt.c,, cli)
-fi
-
-PHP_SUBST(PHP_CLI_TARGET)
-PHP_SUBST(PHP_SAPI_OBJS)
-PHP_SUBST(PHP_CLI_OBJS)
-PHP_SUBST(PHP_GLOBAL_OBJS)
-
-PHP_SUBST(PHP_MODULES)
-
-PHP_SUBST(EXT_LIBS)
-
-PHP_SUBST_OLD(abs_builddir)
-PHP_SUBST_OLD(abs_srcdir)
-PHP_SUBST_OLD(php_abs_top_builddir)
-PHP_SUBST_OLD(php_abs_top_srcdir)
-
-PHP_SUBST(bindir)
-PHP_SUBST(exec_prefix)
-PHP_SUBST(program_prefix)
-PHP_SUBST(program_suffix)
-PHP_SUBST(includedir)
-PHP_SUBST(libdir)
-PHP_SUBST(mandir)
-PHP_SUBST(phplibdir)
-PHP_SUBST(phptempdir)
-PHP_SUBST(prefix)
-PHP_SUBST(localstatedir)
-PHP_SUBST(datadir)
-PHP_SUBST(sysconfdir)
-
-PHP_SUBST(AWK)
-PHP_SUBST(CC)
-PHP_SUBST(CFLAGS)
-PHP_SUBST(CFLAGS_CLEAN)
-PHP_SUBST_OLD(CONFIGURE_COMMAND)
-PHP_SUBST(CPP)
-PHP_SUBST(CPPFLAGS)
-PHP_SUBST(CXX)
-PHP_SUBST(CXXFLAGS)
-PHP_SUBST(CXXFLAGS_CLEAN)
-PHP_SUBST(CXX_PHP_COMPILE)
-PHP_SUBST_OLD(DEBUG_CFLAGS)
-PHP_SUBST(DEFS)
-PHP_SUBST_OLD(EXTENSION_DIR)
-PHP_SUBST_OLD(EXTRA_LDFLAGS)
-PHP_SUBST_OLD(EXTRA_LDFLAGS_PROGRAM)
-PHP_SUBST_OLD(EXTRA_LIBS)
-PHP_SUBST_OLD(ZEND_EXTRA_LIBS)
-PHP_SUBST_OLD(INCLUDES)
-PHP_SUBST_OLD(EXTRA_INCLUDES)
-PHP_SUBST_OLD(INCLUDE_PATH)
-PHP_SUBST_OLD(INSTALL_IT)
-PHP_SUBST(LEX)
-PHP_SUBST(LEX_OUTPUT_ROOT)
-PHP_SUBST(LFLAGS)
-PHP_SUBST(LIBTOOL)
-PHP_SUBST(LN_S)
-PHP_SUBST_OLD(NATIVE_RPATHS)
-PHP_SUBST_OLD(PEAR_INSTALLDIR)
-PHP_SUBST(PHP_BUILD_DATE)
-PHP_SUBST(PHP_COMPILE)
-PHP_SUBST_OLD(PHP_LDFLAGS)
-PHP_SUBST_OLD(PHP_LIBS)
-PHP_SUBST(OVERALL_TARGET)
-PHP_SUBST(PHP_RPATHS)
-PHP_SUBST(PHP_SAPI)
-PHP_SUBST_OLD(PHP_VERSION)
-PHP_SUBST(PROG_SENDMAIL)
-PHP_SUBST(RE2C)
-PHP_SUBST(SHELL)
-PHP_SUBST(SHARED_LIBTOOL)
-PHP_SUBST(TSRM_DIR)
-PHP_SUBST(TSRM_LIB)
-PHP_SUBST(WARNING_LEVEL)
-PHP_SUBST(PHP_FRAMEWORKS)
-PHP_SUBST(PHP_FRAMEWORKPATH)
-PHP_SUBST_OLD(YACC)
-PHP_SUBST_OLD(SHLIB_SUFFIX_NAME)
-
-old_CC=$CC
-
-if test "$PHP_THREAD_SAFETY" = "yes" && test -n "$ac_cv_pthreads_cflags"; then
- CXXFLAGS="$CXXFLAGS $ac_cv_pthreads_cflags"
- INLINE_CFLAGS="$INLINE_CFLAGS $ac_cv_pthreads_cflags"
- cat >meta_ccld<<EOF
-#! /bin/sh
-exec $CC $ac_cv_pthreads_cflags \$@
-EOF
- CC="$abs_builddir/meta_ccld"
- chmod +x meta_ccld
-fi
-
-dnl This will go away, if we have a facility to run per-extension code
-dnl after the thread_safety decision was done
-if test "$PHP_THREAD_SAFETY" = "yes" && test "$PHP_MYSQL" = "yes"; then
- CPPFLAGS="$CPPFLAGS -DTHREAD=1"
-fi
-
-dnl
-dnl Libtool creation
-dnl
-
-PHP_HELP_SEPARATOR([Libtool:])
-PHP_CONFIGURE_PART(Configuring libtool)
-
-LDFLAGS="$LDFLAGS $PHP_AIX_LDFLAGS"
-AC_PROG_LIBTOOL
-if test "$enable_debug" != "yes"; then
- PHP_SET_LIBTOOL_VARIABLE([--silent])
-fi
-
-dnl libtool 1.4.3 needs this.
-PHP_SET_LIBTOOL_VARIABLE([--preserve-dup-deps])
-
-test -z "$PHP_COMPILE" && PHP_COMPILE='$(LIBTOOL) --mode=compile $(COMPILE) -c $<'
-test -z "$CXX_PHP_COMPILE" && CXX_PHP_COMPILE='$(LIBTOOL) --mode=compile $(CXX_COMPILE) -c $<'
-SHARED_LIBTOOL='$(LIBTOOL)'
-
-CC=$old_CC
-
-PHP_CONFIGURE_PART(Generating files)
-
-CXXFLAGS_CLEAN=$CXXFLAGS
-CFLAGS_CLEAN=$CFLAGS
-CFLAGS="\$(CFLAGS_CLEAN) $standard_libtool_flag"
-INLINE_CFLAGS="$INLINE_CFLAGS $standard_libtool_flag"
-CXXFLAGS="$CXXFLAGS $standard_libtool_flag"
-
-all_targets='$(OVERALL_TARGET) $(PHP_MODULES) $(PHP_CLI_TARGET)'
-install_targets="$install_modules $install_pear install-build install-headers install-programs"
-
-case $PHP_SAPI in
- cgi)
- install_targets="install-sapi $install_targets"
- ;;
- cli)
- install_targets="$PHP_INSTALL_CLI_TARGET $install_targets"
- ;;
- *)
- install_targets="install-sapi $PHP_INSTALL_CLI_TARGET $install_targets"
- ;;
-esac
-
-PHP_SUBST(all_targets)
-PHP_SUBST(install_targets)
-
-PHP_ADD_SOURCES(TSRM, TSRM.c tsrm_strtok_r.c tsrm_virtual_cwd.c)
-
-PHP_ADD_SOURCES(main, main.c snprintf.c spprintf.c php_sprintf.c \
- safe_mode.c fopen_wrappers.c alloca.c php_scandir.c \
- php_ini.c SAPI.c rfc1867.c php_content_types.c strlcpy.c \
- strlcat.c mergesort.c reentrancy.c php_variables.c php_ticks.c \
- network.c php_open_temporary_file.c php_logos.c \
- output.c )
-
-PHP_ADD_SOURCES(main/streams, streams.c cast.c memory.c filter.c \
- plain_wrapper.c userspace.c transports.c xp_socket.c mmap.c)
-
-PHP_ADD_SOURCES(/main, internal_functions.c,, sapi)
-PHP_ADD_SOURCES(/main, internal_functions_cli.c,, cli)
-
-PHP_ADD_SOURCES(/Zend, zend_language_parser.c zend_language_scanner.c \
- zend_ini_parser.c zend_ini_scanner.c)
-
-PHP_ADD_SOURCES(Zend, \
- zend_alloc.c zend_compile.c zend_constants.c zend_dynamic_array.c \
- zend_execute_API.c zend_highlight.c zend_llist.c \
- zend_opcode.c zend_operators.c zend_ptr_stack.c zend_stack.c \
- zend_variables.c zend.c zend_API.c zend_extensions.c zend_hash.c \
- zend_list.c zend_indent.c zend_builtin_functions.c zend_sprintf.c \
- zend_ini.c zend_qsort.c zend_multibyte.c zend_ts_hash.c zend_stream.c \
- zend_iterators.c zend_interfaces.c zend_exceptions.c)
-
-if test -r "$abs_srcdir/Zend/zend_objects.c"; then
- PHP_ADD_SOURCES(Zend, zend_objects.c zend_object_handlers.c zend_objects_API.c zend_mm.c \
- zend_default_classes.c zend_reflection_api.c)
-fi
-
-dnl Selectively disable optimization due to high RAM usage during
-dnl compiling the executor.
-if test -n "$GCC" && test "$ZEND_INLINE_OPTIMIZATION" != "yes"; then
- flag=-O0
-else
- flag=
-fi
-
-PHP_ADD_SOURCES_X(Zend, zend_execute.c,,PHP_GLOBAL_OBJS,,$flag)
-
-PHP_ADD_BUILD_DIR(main main/streams)
-PHP_ADD_BUILD_DIR(regex)
-PHP_ADD_BUILD_DIR(sapi/$PHP_SAPI sapi/cli)
-PHP_ADD_BUILD_DIR(TSRM)
-PHP_ADD_BUILD_DIR(Zend)
-
-PHP_ADD_MAKEFILE_FRAGMENT($abs_srcdir/scripts/Makefile.frag,$abs_srcdir/scripts,scripts)
-PHP_ADD_MAKEFILE_FRAGMENT($abs_srcdir/pear/Makefile.frag,$abs_srcdir/pear,pear)
-PHP_ADD_MAKEFILE_FRAGMENT($abs_srcdir/Makefile.frag,$abs_srcdir/Zend,Zend)
-
-PHP_GEN_BUILD_DIRS
-PHP_GEN_GLOBAL_MAKEFILE
-
-AC_DEFINE([HAVE_BUILD_DEFS_H], 1, [ ])
-
-$php_shtool mkdir -p pear/scripts
-$php_shtool mkdir -p scripts
-
-ALL_OUTPUT_FILES="php5.spec main/build-defs.h \
-scripts/phpize scripts/php-config \
-$PHP_OUTPUT_FILES"
-
-AC_OUTPUT($ALL_OUTPUT_FILES, [], [
-
-if test "\$CONFIG_FILES" = "$ALL_OUTPUT_FILES" || test "\$CONFIG_FILES" = " $ALL_OUTPUT_FILES" || test -z "\$CONFIG_FILES"; then
- REDO_ALL=yes
-fi
-
-################################################################
-# Create configuration headers
-#
-
-test -d TSRM || $php_shtool mkdir TSRM
-echo '#include "../main/php_config.h"' > TSRM/tsrm_config.h
-
-test -d Zend || $php_shtool mkdir Zend
-
-cat >Zend/zend_config.h <<FEO
-#include "../main/php_config.h"
-#if defined(APACHE) && defined(PHP_API_VERSION)
-#undef HAVE_DLFCN_H
-#endif
-FEO
-
-# run this only when generating all the files?
-if test -n "\$REDO_ALL"; then
- # Hacking while airborne considered harmful.
- #
- echo "creating main/internal_functions.c"
- extensions="$EXT_STATIC"
-dnl mv -f main/internal_functions.c main/internal_functions.c.old 2>/dev/null
- sh $srcdir/build/genif.sh $srcdir/main/internal_functions.c.in $srcdir "$EXTRA_MODULE_PTRS" $AWK \$extensions > main/internal_functions.c
-
- echo "creating main/internal_functions_cli.c"
- cli_extensions="$EXT_CLI_STATIC"
- sh $srcdir/build/genif.sh $srcdir/main/internal_functions.c.in $srcdir "$EXTRA_MODULE_PTRS" $AWK \$cli_extensions > main/internal_functions_cli.c
-
-dnl if cmp main/internal_functions.c.old main/internal_functions.c > /dev/null 2>&1; then
-dnl echo "main/internal_functions.c is unchanged"
-dnl mv main/internal_functions.c.old main/internal_functions.c
-dnl else
-dnl rm -f main/internal_functions.c.old
-dnl fi
-
- if test "$UNAME" = "FreeBSD" && test "$PHP_SAPI" = "apache2filter" && test "$TSRM_PTH" != "pth-config" ; then
- echo "+--------------------------------------------------------------------+"
- echo "| *** WARNING *** |"
- echo "| |"
- echo "| In order to build PHP as a Apache2 module on FreeBSD, you have to |"
- echo "| add --with-tsrm-pth to your ./configure line. Therefore you need |"
- echo "| to install gnu-pth from /usr/ports/devel/pth. |"
- fi
-
- if test -n "$PHP_APXS_BROKEN"; then
- echo "+--------------------------------------------------------------------+"
- echo "| WARNING: Your $APXS script is most likely broken."
- echo "| |"
- echo "| Please go read http://www.php.net/faq.build#faq.build.apxs |"
- echo "| and make the changes described there and try again. |"
- fi
-
- # Warn about CGI version with no extra security options.
- if test "$PHP_SAPI" = "cgi"; then
- if test "$REDIRECT" = "0"; then
- if test "$DISCARD_PATH" = "0"; then
- echo "+--------------------------------------------------------------------+"
- echo "| *** WARNING *** |"
- echo "| |"
- echo "| You will be compiling the CGI version of PHP without any |"
- echo "| redirection checking. By putting this cgi binary somewhere in |"
- echo "| your web space, users may be able to circumvent existing .htaccess |"
- echo "| security by loading files directly through the parser. See |"
- echo "| http://www.php.net/manual/security.php for more details. |"
- fi
- fi
- fi
-
-
- if test -n "$DEBUG_LOG"; then
- rm -f config.cache
-cat <<X
-+--------------------------------------------------------------------+
-| *** ATTENTION *** |
-| |
-| Something is likely to be messed up here, because the configure |
-| script was not able to detect a simple feature on your platform. |
-| This is often caused by incorrect configuration parameters. Please |
-| see the file debug.log for error messages. |
-| |
-| If you are unable to fix this, send the file debug.log to the |
-| php-install@lists.php.net mailing list and include appropiate |
-| information about your setup. |
-X
- fi
-
- # Warn about linking Apache with libpthread if oci8 extension is enabled on linux.
- if test "$PHP_OCI8" != "no" -o "$PHP_ORACLE" != "no"; then
- if test "$PHP_SAPI" = "apache"; then
- if test `uname` = "Linux"; then
-cat <<X
-+--------------------------------------------------------------------+
-| *** WARNING *** |
-| |
-| Please check that your Apache (httpd) is linked with libpthread. |
-| If not, you have to recompile Apache with pthread. For more |
-| details, see this page: http://www.php.net/manual/ref.oci8.php |
-X
- fi
- fi
-
- if test "$PHP_SIGCHILD" != "yes"; then
-cat <<X
-+--------------------------------------------------------------------+
-| Notice: |
-| If you encounter <defunc> processes when using a local Oracle-DB |
-| please recompile PHP and specify --enable-sigchild when configuring|
-| (This problem has been reported under Linux using Oracle >= 8.1.5) |
-X
- fi
- fi
-
-cat <<X
-+--------------------------------------------------------------------+
-| License: |
-| This software is subject to the PHP License, available in this |
-| distribution in the file LICENSE. By continuing this installation |
-| process, you are bound by the terms of this license agreement. |
-| If you do not agree with the terms of this license, you must abort |
-| the installation process at this point. |
-+--------------------------------------------------------------------+
-
-Thank you for using PHP.
-
-X
-
-fi
-])
-
-dnl ## Local Variables:
-dnl ## tab-width: 4
-dnl ## End:
diff --git a/cvsclean b/cvsclean
deleted file mode 100755
index 3d084df86f..0000000000
--- a/cvsclean
+++ /dev/null
@@ -1,3 +0,0 @@
-#! /bin/sh
-
-${MAKE:-make} -f build/build.mk cvsclean-work
diff --git a/cvsclean.bat b/cvsclean.bat
deleted file mode 100755
index 4c0118d671..0000000000
--- a/cvsclean.bat
+++ /dev/null
@@ -1,2 +0,0 @@
-@echo off
-cscript /nologo win32\build\cvsclean.js
diff --git a/ext/bcmath/CREDITS b/ext/bcmath/CREDITS
deleted file mode 100644
index 7b4083ea13..0000000000
--- a/ext/bcmath/CREDITS
+++ /dev/null
@@ -1,2 +0,0 @@
-BC Math
-Andi Gutmans
diff --git a/ext/bcmath/bcmath.c b/ext/bcmath/bcmath.c
deleted file mode 100644
index 94d3b90d59..0000000000
--- a/ext/bcmath/bcmath.c
+++ /dev/null
@@ -1,574 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Andi Gutmans <andi@zend.com> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "php.h"
-
-#if HAVE_BCMATH
-
-#include "php_ini.h"
-#include "ext/standard/info.h"
-#include "php_bcmath.h"
-#include "libbcmath/src/bcmath.h"
-
-ZEND_DECLARE_MODULE_GLOBALS(bcmath);
-
-function_entry bcmath_functions[] = {
- PHP_FE(bcadd, NULL)
- PHP_FE(bcsub, NULL)
- PHP_FE(bcmul, NULL)
- PHP_FE(bcdiv, NULL)
- PHP_FE(bcmod, NULL)
- PHP_FE(bcpow, NULL)
- PHP_FE(bcsqrt, NULL)
- PHP_FE(bcscale, NULL)
- PHP_FE(bccomp, NULL)
- PHP_FE(bcpowmod, NULL)
- {NULL, NULL, NULL}
-};
-
-zend_module_entry bcmath_module_entry = {
- STANDARD_MODULE_HEADER,
- "bcmath",
- bcmath_functions,
- PHP_MINIT(bcmath),
- PHP_MSHUTDOWN(bcmath),
- PHP_RINIT(bcmath),
- PHP_RSHUTDOWN(bcmath),
- PHP_MINFO(bcmath),
- NO_VERSION_YET,
- STANDARD_MODULE_PROPERTIES
-};
-
-#ifdef COMPILE_DL_BCMATH
-ZEND_GET_MODULE(bcmath)
-#endif
-
-/* {{{ PHP_INI */
-PHP_INI_BEGIN()
- STD_PHP_INI_ENTRY("bcmath.scale", "0", PHP_INI_ALL, OnUpdateLong, bc_precision, zend_bcmath_globals, bcmath_globals)
-PHP_INI_END()
-/* }}} */
-
-/* {{{ php_bcmath_init_globals
- */
-static void php_bcmath_init_globals(zend_bcmath_globals *bcmath_globals)
-{
- bcmath_globals->bc_precision = 0;
-}
-/* }}} */
-
-/* {{{ PHP_MINIT_FUNCTION
- */
-PHP_MINIT_FUNCTION(bcmath)
-{
- ZEND_INIT_MODULE_GLOBALS(bcmath, php_bcmath_init_globals, NULL);
-
- REGISTER_INI_ENTRIES();
-
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ PHP_MSHUTDOWN_FUNCTION
- */
-PHP_MSHUTDOWN_FUNCTION(bcmath)
-{
- UNREGISTER_INI_ENTRIES();
-
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ PHP_RINIT_FUNCTION
- */
-PHP_RINIT_FUNCTION(bcmath)
-{
- bc_init_numbers(TSRMLS_C);
-
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ PHP_RSHUTDOWN_FUNCTION
- */
-PHP_RSHUTDOWN_FUNCTION(bcmath)
-{
- _bc_free_num_ex(&BCG(_zero_), 1);
- _bc_free_num_ex(&BCG(_one_), 1);
- _bc_free_num_ex(&BCG(_two_), 1);
-
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ PHP_MINFO_FUNCTION
- */
-PHP_MINFO_FUNCTION(bcmath)
-{
- php_info_print_table_start();
- php_info_print_table_row(2, "BCMath support", "enabled");
- php_info_print_table_end();
-}
-/* }}} */
-
-/* {{{ php_str2num
- Convert to bc_num detecting scale */
-static void php_str2num(bc_num *num, char *str TSRMLS_DC)
-{
- char *p;
-
- if (!(p = strchr(str, '.'))) {
- bc_str2num(num, str, 0 TSRMLS_CC);
- return;
- }
-
- bc_str2num(num, str, strlen(p+1) TSRMLS_CC);
-}
-/* }}} */
-
-/* {{{ proto string bcadd(string left_operand, string right_operand [, int scale])
- Returns the sum of two arbitrary precision numbers */
-PHP_FUNCTION(bcadd)
-{
- zval **left, **right, **scale_param;
- bc_num first, second, result;
- int scale = BCG(bc_precision);
-
- switch (ZEND_NUM_ARGS()) {
- case 2:
- if (zend_get_parameters_ex(2, &left, &right) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- break;
- case 3:
- if (zend_get_parameters_ex(3, &left, &right, &scale_param) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long_ex(scale_param);
- scale = (int) (Z_LVAL_PP(scale_param) < 0) ? 0 : Z_LVAL_PP(scale_param);
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
- convert_to_string_ex(left);
- convert_to_string_ex(right);
- bc_init_num(&first TSRMLS_CC);
- bc_init_num(&second TSRMLS_CC);
- bc_init_num(&result TSRMLS_CC);
- php_str2num(&first, Z_STRVAL_PP(left) TSRMLS_CC);
- php_str2num(&second, Z_STRVAL_PP(right) TSRMLS_CC);
- bc_add (first, second, &result, scale);
- if (result->n_scale > scale) {
- result->n_scale = scale;
- }
- Z_STRVAL_P(return_value) = bc_num2str(result);
- Z_STRLEN_P(return_value) = strlen(Z_STRVAL_P(return_value));
- Z_TYPE_P(return_value) = IS_STRING;
- bc_free_num(&first);
- bc_free_num(&second);
- bc_free_num(&result);
- return;
-}
-/* }}} */
-
-/* {{{ proto string bcsub(string left_operand, string right_operand [, int scale])
- Returns the difference between two arbitrary precision numbers */
-PHP_FUNCTION(bcsub)
-{
- zval **left, **right, **scale_param;
- bc_num first, second, result;
- int scale = BCG(bc_precision);
-
- switch (ZEND_NUM_ARGS()) {
- case 2:
- if (zend_get_parameters_ex(2, &left, &right) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- break;
- case 3:
- if (zend_get_parameters_ex(3, &left, &right, &scale_param) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long_ex(scale_param);
- scale = (int) (Z_LVAL_PP(scale_param) < 0) ? 0 : Z_LVAL_PP(scale_param);
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
- convert_to_string_ex(left);
- convert_to_string_ex(right);
- bc_init_num(&first TSRMLS_CC);
- bc_init_num(&second TSRMLS_CC);
- bc_init_num(&result TSRMLS_CC);
- php_str2num(&first, Z_STRVAL_PP(left) TSRMLS_CC);
- php_str2num(&second, Z_STRVAL_PP(right) TSRMLS_CC);
- bc_sub (first, second, &result, scale);
- if (result->n_scale > scale) {
- result->n_scale = scale;
- }
- Z_STRVAL_P(return_value) = bc_num2str(result);
- Z_STRLEN_P(return_value) = strlen(Z_STRVAL_P(return_value));
- Z_TYPE_P(return_value) = IS_STRING;
- bc_free_num(&first);
- bc_free_num(&second);
- bc_free_num(&result);
- return;
-}
-/* }}} */
-
-/* {{{ proto string bcmul(string left_operand, string right_operand [, int scale])
- Returns the multiplication of two arbitrary precision numbers */
-PHP_FUNCTION(bcmul)
-{
- zval **left, **right, **scale_param;
- bc_num first, second, result;
- int scale = BCG(bc_precision);
-
- switch (ZEND_NUM_ARGS()) {
- case 2:
- if (zend_get_parameters_ex(2, &left, &right) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- break;
- case 3:
- if (zend_get_parameters_ex(3, &left, &right, &scale_param) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long_ex(scale_param);
- scale = (int) (Z_LVAL_PP(scale_param) < 0) ? 0 : Z_LVAL_PP(scale_param);
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
- convert_to_string_ex(left);
- convert_to_string_ex(right);
- bc_init_num(&first TSRMLS_CC);
- bc_init_num(&second TSRMLS_CC);
- bc_init_num(&result TSRMLS_CC);
- php_str2num(&first, Z_STRVAL_PP(left) TSRMLS_CC);
- php_str2num(&second, Z_STRVAL_PP(right) TSRMLS_CC);
- bc_multiply (first, second, &result, scale TSRMLS_CC);
- if (result->n_scale > scale) {
- result->n_scale = scale;
- }
- Z_STRVAL_P(return_value) = bc_num2str(result);
- Z_STRLEN_P(return_value) = strlen(Z_STRVAL_P(return_value));
- Z_TYPE_P(return_value) = IS_STRING;
- bc_free_num(&first);
- bc_free_num(&second);
- bc_free_num(&result);
- return;
-}
-/* }}} */
-
-/* {{{ proto string bcdiv(string left_operand, string right_operand [, int scale])
- Returns the quotient of two arbitrary precision numbers (division) */
-PHP_FUNCTION(bcdiv)
-{
- zval **left, **right, **scale_param;
- bc_num first, second, result;
- int scale = BCG(bc_precision);
-
- switch (ZEND_NUM_ARGS()) {
- case 2:
- if (zend_get_parameters_ex(2, &left, &right) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- break;
- case 3:
- if (zend_get_parameters_ex(3, &left, &right, &scale_param) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long_ex(scale_param);
- scale = (int) (Z_LVAL_PP(scale_param) < 0) ? 0 : Z_LVAL_PP(scale_param);
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
- convert_to_string_ex(left);
- convert_to_string_ex(right);
- bc_init_num(&first TSRMLS_CC);
- bc_init_num(&second TSRMLS_CC);
- bc_init_num(&result TSRMLS_CC);
- php_str2num(&first, Z_STRVAL_PP(left) TSRMLS_CC);
- php_str2num(&second, Z_STRVAL_PP(right) TSRMLS_CC);
- switch (bc_divide(first, second, &result, scale TSRMLS_CC)) {
- case 0: /* OK */
- if (result->n_scale > scale) {
- result->n_scale = scale;
- }
- Z_STRVAL_P(return_value) = bc_num2str(result);
- Z_STRLEN_P(return_value) = strlen(Z_STRVAL_P(return_value));
- Z_TYPE_P(return_value) = IS_STRING;
- break;
- case -1: /* division by zero */
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Division by zero");
- break;
- }
- bc_free_num(&first);
- bc_free_num(&second);
- bc_free_num(&result);
- return;
-}
-/* }}} */
-
-/* {{{ proto string bcmod(string left_operand, string right_operand)
- Returns the modulus of the two arbitrary precision operands */
-PHP_FUNCTION(bcmod)
-{
- zval **left, **right;
- bc_num first, second, result;
-
- switch (ZEND_NUM_ARGS()) {
- case 2:
- if (zend_get_parameters_ex(2, &left, &right) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
- convert_to_string_ex(left);
- convert_to_string_ex(right);
- bc_init_num(&first TSRMLS_CC);
- bc_init_num(&second TSRMLS_CC);
- bc_init_num(&result TSRMLS_CC);
- bc_str2num(&first, Z_STRVAL_PP(left), 0 TSRMLS_CC);
- bc_str2num(&second, Z_STRVAL_PP(right), 0 TSRMLS_CC);
- switch (bc_modulo(first, second, &result, 0 TSRMLS_CC)) {
- case 0:
- Z_STRVAL_P(return_value) = bc_num2str(result);
- Z_STRLEN_P(return_value) = strlen(Z_STRVAL_P(return_value));
- Z_TYPE_P(return_value) = IS_STRING;
- break;
- case -1:
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Division by zero");
- break;
- }
- bc_free_num(&first);
- bc_free_num(&second);
- bc_free_num(&result);
- return;
-}
-/* }}} */
-
-/* {{{ proto string bcpowmod(string x, string y, string mod [, int scale])
- Returns the value of an arbitrary precision number raised to the power of another reduced by a modulous */
-PHP_FUNCTION(bcpowmod)
-{
- char *left, *right, *modulous;
- int left_len, right_len, modulous_len;
- bc_num first, second, mod, result;
- long scale = BCG(bc_precision);
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "sss|l", &left, &left_len, &right, &right_len, &modulous, &modulous_len, &scale) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- bc_init_num(&first TSRMLS_CC);
- bc_init_num(&second TSRMLS_CC);
- bc_init_num(&mod TSRMLS_CC);
- bc_init_num(&result TSRMLS_CC);
- php_str2num(&first, left TSRMLS_CC);
- php_str2num(&second, right TSRMLS_CC);
- php_str2num(&mod, modulous TSRMLS_CC);
- bc_raisemod(first, second, mod, &result, scale TSRMLS_CC);
- if (result->n_scale > scale) {
- result->n_scale = scale;
- }
- Z_STRVAL_P(return_value) = bc_num2str(result);
- Z_STRLEN_P(return_value) = strlen(Z_STRVAL_P(return_value));
- Z_TYPE_P(return_value) = IS_STRING;
- bc_free_num(&first);
- bc_free_num(&second);
- bc_free_num(&mod);
- bc_free_num(&result);
- return;
-}
-/* }}} */
-
-/* {{{ proto string bcpow(string x, string y [, int scale])
- Returns the value of an arbitrary precision number raised to the power of another */
-PHP_FUNCTION(bcpow)
-{
- zval **left, **right, **scale_param;
- bc_num first, second, result;
- int scale = BCG(bc_precision);
-
- switch (ZEND_NUM_ARGS()) {
- case 2:
- if (zend_get_parameters_ex(2, &left, &right) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- break;
- case 3:
- if (zend_get_parameters_ex(3, &left, &right, &scale_param) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long_ex(scale_param);
- scale = (int) (Z_LVAL_PP(scale_param) < 0) ? 0 : Z_LVAL_PP(scale_param);
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
- convert_to_string_ex(left);
- convert_to_string_ex(right);
- bc_init_num(&first TSRMLS_CC);
- bc_init_num(&second TSRMLS_CC);
- bc_init_num(&result TSRMLS_CC);
- php_str2num(&first, Z_STRVAL_PP(left) TSRMLS_CC);
- php_str2num(&second, Z_STRVAL_PP(right) TSRMLS_CC);
- bc_raise (first, second, &result, scale TSRMLS_CC);
- if (result->n_scale > scale) {
- result->n_scale = scale;
- }
- Z_STRVAL_P(return_value) = bc_num2str(result);
- Z_STRLEN_P(return_value) = strlen(Z_STRVAL_P(return_value));
- Z_TYPE_P(return_value) = IS_STRING;
- bc_free_num(&first);
- bc_free_num(&second);
- bc_free_num(&result);
- return;
-}
-/* }}} */
-
-/* {{{ proto string bcsqrt(string operand [, int scale])
- Returns the square root of an arbitray precision number */
-PHP_FUNCTION(bcsqrt)
-{
- zval **left, **scale_param;
- bc_num result;
- int scale = BCG(bc_precision);
-
- switch (ZEND_NUM_ARGS()) {
- case 1:
- if (zend_get_parameters_ex(1, &left) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- break;
- case 2:
- if (zend_get_parameters_ex(2, &left, &scale_param) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long_ex(scale_param);
- scale = (int) (Z_LVAL_PP(scale_param) < 0) ? 0 : Z_LVAL_PP(scale_param);
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
- convert_to_string_ex(left);
- bc_init_num(&result TSRMLS_CC);
- php_str2num(&result, Z_STRVAL_PP(left) TSRMLS_CC);
- if (bc_sqrt (&result, scale TSRMLS_CC) != 0) {
- if (result->n_scale > scale) {
- result->n_scale = scale;
- }
- Z_STRVAL_P(return_value) = bc_num2str(result);
- Z_STRLEN_P(return_value) = strlen(Z_STRVAL_P(return_value));
- Z_TYPE_P(return_value) = IS_STRING;
- } else {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Square root of negative number");
- }
- bc_free_num(&result);
- return;
-}
-/* }}} */
-
-/* {{{ proto int bccomp(string left_operand, string right_operand [, int scale])
- Compares two arbitrary precision numbers */
-PHP_FUNCTION(bccomp)
-{
- zval **left, **right, **scale_param;
- bc_num first, second;
- int scale = BCG(bc_precision);
-
- switch (ZEND_NUM_ARGS()) {
- case 2:
- if (zend_get_parameters_ex(2, &left, &right) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- break;
- case 3:
- if (zend_get_parameters_ex(3, &left, &right, &scale_param) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long_ex(scale_param);
- scale = (int) (Z_LVAL_PP(scale_param) < 0) ? 0 : Z_LVAL_PP(scale_param);
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
-
- convert_to_string_ex(left);
- convert_to_string_ex(right);
- bc_init_num(&first TSRMLS_CC);
- bc_init_num(&second TSRMLS_CC);
-
- bc_str2num(&first, Z_STRVAL_PP(left), scale TSRMLS_CC);
- bc_str2num(&second, Z_STRVAL_PP(right), scale TSRMLS_CC);
- Z_LVAL_P(return_value) = bc_compare(first, second);
- Z_TYPE_P(return_value) = IS_LONG;
-
- bc_free_num(&first);
- bc_free_num(&second);
- return;
-}
-/* }}} */
-
-/* {{{ proto bool bcscale(int scale)
- Sets default scale parameter for all bc math functions */
-PHP_FUNCTION(bcscale)
-{
- zval **new_scale;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &new_scale) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long_ex(new_scale);
- BCG(bc_precision) = (Z_LVAL_PP(new_scale) < 0) ? 0 : Z_LVAL_PP(new_scale);
-
- RETURN_TRUE;
-}
-/* }}} */
-
-
-#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/bcmath/config.m4 b/ext/bcmath/config.m4
deleted file mode 100644
index d5e13e83ef..0000000000
--- a/ext/bcmath/config.m4
+++ /dev/null
@@ -1,17 +0,0 @@
-dnl
-dnl $Id$
-dnl
-
-PHP_ARG_ENABLE(bcmath, whether to enable bc style precision math functions,
-[ --enable-bcmath Enable bc style precision math functions.])
-
-if test "$PHP_BCMATH" != "no"; then
- PHP_NEW_EXTENSION(bcmath, bcmath.c \
-libbcmath/src/add.c libbcmath/src/div.c libbcmath/src/init.c libbcmath/src/neg.c libbcmath/src/outofmem.c libbcmath/src/raisemod.c libbcmath/src/rt.c libbcmath/src/sub.c \
-libbcmath/src/compare.c libbcmath/src/divmod.c libbcmath/src/int2num.c libbcmath/src/num2long.c libbcmath/src/output.c libbcmath/src/recmul.c \
-libbcmath/src/sqrt.c libbcmath/src/zero.c libbcmath/src/debug.c libbcmath/src/doaddsub.c libbcmath/src/nearzero.c libbcmath/src/num2str.c libbcmath/src/raise.c \
-libbcmath/src/rmzero.c libbcmath/src/str2num.c,
- $ext_shared,,-I@ext_srcdir@/libbcmath/src)
- PHP_ADD_BUILD_DIR($ext_builddir/libbcmath/src)
- AC_DEFINE(HAVE_BCMATH, 1, [Whether you have bcmath])
-fi
diff --git a/ext/bcmath/config.w32 b/ext/bcmath/config.w32
deleted file mode 100644
index 3579eadfae..0000000000
--- a/ext/bcmath/config.w32
+++ /dev/null
@@ -1,14 +0,0 @@
-// $Id$
-// vim:ft=javascript
-
-ARG_ENABLE("bcmath", "bc style precision math functions", "yes");
-
-if (PHP_BCMATH == "yes") {
- EXTENSION("bcmath", "bcmath.c", null, "-Iext/bcmath/libbcmath/src");
- ADD_SOURCES("ext/bcmath/libbcmath/src", "add.c div.c init.c neg.c \
- outofmem.c raisemod.c rt.c sub.c compare.c divmod.c int2num.c \
- num2long.c output.c recmul.c sqrt.c zero.c debug.c doaddsub.c \
- nearzero.c num2str.c raise.c rmzero.c str2num.c", "bcmath");
-
- AC_DEFINE('HAVE_BCMATH', 1, 'Have BCMATH library');
-}
diff --git a/ext/bcmath/libbcmath/AUTHORS b/ext/bcmath/libbcmath/AUTHORS
deleted file mode 100644
index 982db9dc40..0000000000
--- a/ext/bcmath/libbcmath/AUTHORS
+++ /dev/null
@@ -1,3 +0,0 @@
-Phil Nelson <philnelson@acm.org> wrote bcmath library.
-
-
diff --git a/ext/bcmath/libbcmath/COPYING.LIB b/ext/bcmath/libbcmath/COPYING.LIB
deleted file mode 100644
index c4792dd27a..0000000000
--- a/ext/bcmath/libbcmath/COPYING.LIB
+++ /dev/null
@@ -1,515 +0,0 @@
-
- GNU LESSER GENERAL PUBLIC LICENSE
- Version 2.1, February 1999
-
- Copyright (C) 1991, 1999 Free Software Foundation, Inc.
- 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-[This is the first released version of the Lesser GPL. It also counts
- as the successor of the GNU Library Public License, version 2, hence
- the version number 2.1.]
-
- Preamble
-
- The licenses for most software are designed to take away your
-freedom to share and change it. By contrast, the GNU General Public
-Licenses are intended to guarantee your freedom to share and change
-free software--to make sure the software is free for all its users.
-
- This license, the Lesser General Public License, applies to some
-specially designated software packages--typically libraries--of the
-Free Software Foundation and other authors who decide to use it. You
-can use it too, but we suggest you first think carefully about whether
-this license or the ordinary General Public License is the better
-strategy to use in any particular case, based on the explanations
-below.
-
- When we speak of free software, we are referring to freedom of use,
-not price. Our General Public Licenses are designed to make sure that
-you have the freedom to distribute copies of free software (and charge
-for this service if you wish); that you receive source code or can get
-it if you want it; that you can change the software and use pieces of
-it in new free programs; and that you are informed that you can do
-these things.
-
- To protect your rights, we need to make restrictions that forbid
-distributors to deny you these rights or to ask you to surrender these
-rights. These restrictions translate to certain responsibilities for
-you if you distribute copies of the library or if you modify it.
-
- For example, if you distribute copies of the library, whether gratis
-or for a fee, you must give the recipients all the rights that we gave
-you. You must make sure that they, too, receive or can get the source
-code. If you link other code with the library, you must provide
-complete object files to the recipients, so that they can relink them
-with the library after making changes to the library and recompiling
-it. And you must show them these terms so they know their rights.
-
- We protect your rights with a two-step method: (1) we copyright the
-library, and (2) we offer you this license, which gives you legal
-permission to copy, distribute and/or modify the library.
-
- To protect each distributor, we want to make it very clear that
-there is no warranty for the free library. Also, if the library is
-modified by someone else and passed on, the recipients should know
-that what they have is not the original version, so that the original
-author's reputation will not be affected by problems that might be
-introduced by others.
-^L
- Finally, software patents pose a constant threat to the existence of
-any free program. We wish to make sure that a company cannot
-effectively restrict the users of a free program by obtaining a
-restrictive license from a patent holder. Therefore, we insist that
-any patent license obtained for a version of the library must be
-consistent with the full freedom of use specified in this license.
-
- Most GNU software, including some libraries, is covered by the
-ordinary GNU General Public License. This license, the GNU Lesser
-General Public License, applies to certain designated libraries, and
-is quite different from the ordinary General Public License. We use
-this license for certain libraries in order to permit linking those
-libraries into non-free programs.
-
- When a program is linked with a library, whether statically or using
-a shared library, the combination of the two is legally speaking a
-combined work, a derivative of the original library. The ordinary
-General Public License therefore permits such linking only if the
-entire combination fits its criteria of freedom. The Lesser General
-Public License permits more lax criteria for linking other code with
-the library.
-
- We call this license the "Lesser" General Public License because it
-does Less to protect the user's freedom than the ordinary General
-Public License. It also provides other free software developers Less
-of an advantage over competing non-free programs. These disadvantages
-are the reason we use the ordinary General Public License for many
-libraries. However, the Lesser license provides advantages in certain
-special circumstances.
-
- For example, on rare occasions, there may be a special need to
-encourage the widest possible use of a certain library, so that it
-becomes
-a de-facto standard. To achieve this, non-free programs must be
-allowed to use the library. A more frequent case is that a free
-library does the same job as widely used non-free libraries. In this
-case, there is little to gain by limiting the free library to free
-software only, so we use the Lesser General Public License.
-
- In other cases, permission to use a particular library in non-free
-programs enables a greater number of people to use a large body of
-free software. For example, permission to use the GNU C Library in
-non-free programs enables many more people to use the whole GNU
-operating system, as well as its variant, the GNU/Linux operating
-system.
-
- Although the Lesser General Public License is Less protective of the
-users' freedom, it does ensure that the user of a program that is
-linked with the Library has the freedom and the wherewithal to run
-that program using a modified version of the Library.
-
- The precise terms and conditions for copying, distribution and
-modification follow. Pay close attention to the difference between a
-"work based on the library" and a "work that uses the library". The
-former contains code derived from the library, whereas the latter must
-be combined with the library in order to run.
-^L
- GNU LESSER GENERAL PUBLIC LICENSE
- TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
- 0. This License Agreement applies to any software library or other
-program which contains a notice placed by the copyright holder or
-other authorized party saying it may be distributed under the terms of
-this Lesser General Public License (also called "this License").
-Each licensee is addressed as "you".
-
- A "library" means a collection of software functions and/or data
-prepared so as to be conveniently linked with application programs
-(which use some of those functions and data) to form executables.
-
- The "Library", below, refers to any such software library or work
-which has been distributed under these terms. A "work based on the
-Library" means either the Library or any derivative work under
-copyright law: that is to say, a work containing the Library or a
-portion of it, either verbatim or with modifications and/or translated
-straightforwardly into another language. (Hereinafter, translation is
-included without limitation in the term "modification".)
-
- "Source code" for a work means the preferred form of the work for
-making modifications to it. For a library, complete source code means
-all the source code for all modules it contains, plus any associated
-interface definition files, plus the scripts used to control
-compilation
-and installation of the library.
-
- Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope. The act of
-running a program using the Library is not restricted, and output from
-such a program is covered only if its contents constitute a work based
-on the Library (independent of the use of the Library in a tool for
-writing it). Whether that is true depends on what the Library does
-and what the program that uses the Library does.
-
- 1. You may copy and distribute verbatim copies of the Library's
-complete source code as you receive it, in any medium, provided that
-you conspicuously and appropriately publish on each copy an
-appropriate copyright notice and disclaimer of warranty; keep intact
-all the notices that refer to this License and to the absence of any
-warranty; and distribute a copy of this License along with the
-Library.
-
- You may charge a fee for the physical act of transferring a copy,
-and you may at your option offer warranty protection in exchange for a
-fee.
-
- 2. You may modify your copy or copies of the Library or any portion
-of it, thus forming a work based on the Library, and copy and
-distribute such modifications or work under the terms of Section 1
-above, provided that you also meet all of these conditions:
-
- a) The modified work must itself be a software library.
-
- b) You must cause the files modified to carry prominent notices
- stating that you changed the files and the date of any change.
-
- c) You must cause the whole of the work to be licensed at no
- charge to all third parties under the terms of this License.
-
- d) If a facility in the modified Library refers to a function or a
- table of data to be supplied by an application program that uses
- the facility, other than as an argument passed when the facility
- is invoked, then you must make a good faith effort to ensure that,
- in the event an application does not supply such function or
- table, the facility still operates, and performs whatever part of
- its purpose remains meaningful.
-
- (For example, a function in a library to compute square roots has
- a purpose that is entirely well-defined independent of the
- application. Therefore, Subsection 2d requires that any
- application-supplied function or table used by this function must
- be optional: if the application does not supply it, the square
- root function must still compute square roots.)
-
-These requirements apply to the modified work as a whole. If
-identifiable sections of that work are not derived from the Library,
-and can be reasonably considered independent and separate works in
-themselves, then this License, and its terms, do not apply to those
-sections when you distribute them as separate works. But when you
-distribute the same sections as part of a whole which is a work based
-on the Library, the distribution of the whole must be on the terms of
-this License, whose permissions for other licensees extend to the
-entire whole, and thus to each and every part regardless of who wrote
-it.
-
-Thus, it is not the intent of this section to claim rights or contest
-your rights to work written entirely by you; rather, the intent is to
-exercise the right to control the distribution of derivative or
-collective works based on the Library.
-
-In addition, mere aggregation of another work not based on the Library
-with the Library (or with a work based on the Library) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
-
- 3. You may opt to apply the terms of the ordinary GNU General Public
-License instead of this License to a given copy of the Library. To do
-this, you must alter all the notices that refer to this License, so
-that they refer to the ordinary GNU General Public License, version 2,
-instead of to this License. (If a newer version than version 2 of the
-ordinary GNU General Public License has appeared, then you can specify
-that version instead if you wish.) Do not make any other change in
-these notices.
-^L
- Once this change is made in a given copy, it is irreversible for
-that copy, so the ordinary GNU General Public License applies to all
-subsequent copies and derivative works made from that copy.
-
- This option is useful when you wish to copy part of the code of
-the Library into a program that is not a library.
-
- 4. You may copy and distribute the Library (or a portion or
-derivative of it, under Section 2) in object code or executable form
-under the terms of Sections 1 and 2 above provided that you accompany
-it with the complete corresponding machine-readable source code, which
-must be distributed under the terms of Sections 1 and 2 above on a
-medium customarily used for software interchange.
-
- If distribution of object code is made by offering access to copy
-from a designated place, then offering equivalent access to copy the
-source code from the same place satisfies the requirement to
-distribute the source code, even though third parties are not
-compelled to copy the source along with the object code.
-
- 5. A program that contains no derivative of any portion of the
-Library, but is designed to work with the Library by being compiled or
-linked with it, is called a "work that uses the Library". Such a
-work, in isolation, is not a derivative work of the Library, and
-therefore falls outside the scope of this License.
-
- However, linking a "work that uses the Library" with the Library
-creates an executable that is a derivative of the Library (because it
-contains portions of the Library), rather than a "work that uses the
-library". The executable is therefore covered by this License.
-Section 6 states terms for distribution of such executables.
-
- When a "work that uses the Library" uses material from a header file
-that is part of the Library, the object code for the work may be a
-derivative work of the Library even though the source code is not.
-Whether this is true is especially significant if the work can be
-linked without the Library, or if the work is itself a library. The
-threshold for this to be true is not precisely defined by law.
-
- If such an object file uses only numerical parameters, data
-structure layouts and accessors, and small macros and small inline
-functions (ten lines or less in length), then the use of the object
-file is unrestricted, regardless of whether it is legally a derivative
-work. (Executables containing this object code plus portions of the
-Library will still fall under Section 6.)
-
- Otherwise, if the work is a derivative of the Library, you may
-distribute the object code for the work under the terms of Section 6.
-Any executables containing that work also fall under Section 6,
-whether or not they are linked directly with the Library itself.
-^L
- 6. As an exception to the Sections above, you may also combine or
-link a "work that uses the Library" with the Library to produce a
-work containing portions of the Library, and distribute that work
-under terms of your choice, provided that the terms permit
-modification of the work for the customer's own use and reverse
-engineering for debugging such modifications.
-
- You must give prominent notice with each copy of the work that the
-Library is used in it and that the Library and its use are covered by
-this License. You must supply a copy of this License. If the work
-during execution displays copyright notices, you must include the
-copyright notice for the Library among them, as well as a reference
-directing the user to the copy of this License. Also, you must do one
-of these things:
-
- a) Accompany the work with the complete corresponding
- machine-readable source code for the Library including whatever
- changes were used in the work (which must be distributed under
- Sections 1 and 2 above); and, if the work is an executable linked
- with the Library, with the complete machine-readable "work that
- uses the Library", as object code and/or source code, so that the
- user can modify the Library and then relink to produce a modified
- executable containing the modified Library. (It is understood
- that the user who changes the contents of definitions files in the
- Library will not necessarily be able to recompile the application
- to use the modified definitions.)
-
- b) Use a suitable shared library mechanism for linking with the
- Library. A suitable mechanism is one that (1) uses at run time a
- copy of the library already present on the user's computer system,
- rather than copying library functions into the executable, and (2)
- will operate properly with a modified version of the library, if
- the user installs one, as long as the modified version is
- interface-compatible with the version that the work was made with.
-
- c) Accompany the work with a written offer, valid for at
- least three years, to give the same user the materials
- specified in Subsection 6a, above, for a charge no more
- than the cost of performing this distribution.
-
- d) If distribution of the work is made by offering access to copy
- from a designated place, offer equivalent access to copy the above
- specified materials from the same place.
-
- e) Verify that the user has already received a copy of these
- materials or that you have already sent this user a copy.
-
- For an executable, the required form of the "work that uses the
-Library" must include any data and utility programs needed for
-reproducing the executable from it. However, as a special exception,
-the materials to be distributed need not include anything that is
-normally distributed (in either source or binary form) with the major
-components (compiler, kernel, and so on) of the operating system on
-which the executable runs, unless that component itself accompanies
-the executable.
-
- It may happen that this requirement contradicts the license
-restrictions of other proprietary libraries that do not normally
-accompany the operating system. Such a contradiction means you cannot
-use both them and the Library together in an executable that you
-distribute.
-^L
- 7. You may place library facilities that are a work based on the
-Library side-by-side in a single library together with other library
-facilities not covered by this License, and distribute such a combined
-library, provided that the separate distribution of the work based on
-the Library and of the other library facilities is otherwise
-permitted, and provided that you do these two things:
-
- a) Accompany the combined library with a copy of the same work
- based on the Library, uncombined with any other library
- facilities. This must be distributed under the terms of the
- Sections above.
-
- b) Give prominent notice with the combined library of the fact
- that part of it is a work based on the Library, and explaining
- where to find the accompanying uncombined form of the same work.
-
- 8. You may not copy, modify, sublicense, link with, or distribute
-the Library except as expressly provided under this License. Any
-attempt otherwise to copy, modify, sublicense, link with, or
-distribute the Library is void, and will automatically terminate your
-rights under this License. However, parties who have received copies,
-or rights, from you under this License will not have their licenses
-terminated so long as such parties remain in full compliance.
-
- 9. You are not required to accept this License, since you have not
-signed it. However, nothing else grants you permission to modify or
-distribute the Library or its derivative works. These actions are
-prohibited by law if you do not accept this License. Therefore, by
-modifying or distributing the Library (or any work based on the
-Library), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Library or works based on it.
-
- 10. Each time you redistribute the Library (or any work based on the
-Library), the recipient automatically receives a license from the
-original licensor to copy, distribute, link with or modify the Library
-subject to these terms and conditions. You may not impose any further
-restrictions on the recipients' exercise of the rights granted herein.
-You are not responsible for enforcing compliance by third parties with
-this License.
-^L
- 11. If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues),
-conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License. If you cannot
-distribute so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you
-may not distribute the Library at all. For example, if a patent
-license would not permit royalty-free redistribution of the Library by
-all those who receive copies directly or indirectly through you, then
-the only way you could satisfy both it and this License would be to
-refrain entirely from distribution of the Library.
-
-If any portion of this section is held invalid or unenforceable under
-any particular circumstance, the balance of the section is intended to
-apply, and the section as a whole is intended to apply in other
-circumstances.
-
-It is not the purpose of this section to induce you to infringe any
-patents or other property right claims or to contest validity of any
-such claims; this section has the sole purpose of protecting the
-integrity of the free software distribution system which is
-implemented by public license practices. Many people have made
-generous contributions to the wide range of software distributed
-through that system in reliance on consistent application of that
-system; it is up to the author/donor to decide if he or she is willing
-to distribute software through any other system and a licensee cannot
-impose that choice.
-
-This section is intended to make thoroughly clear what is believed to
-be a consequence of the rest of this License.
-
- 12. If the distribution and/or use of the Library is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Library under this License
-may add an explicit geographical distribution limitation excluding those
-countries, so that distribution is permitted only in or among
-countries not thus excluded. In such case, this License incorporates
-the limitation as if written in the body of this License.
-
- 13. The Free Software Foundation may publish revised and/or new
-versions of the Lesser General Public License from time to time.
-Such new versions will be similar in spirit to the present version,
-but may differ in detail to address new problems or concerns.
-
-Each version is given a distinguishing version number. If the Library
-specifies a version number of this License which applies to it and
-"any later version", you have the option of following the terms and
-conditions either of that version or of any later version published by
-the Free Software Foundation. If the Library does not specify a
-license version number, you may choose any version ever published by
-the Free Software Foundation.
-^L
- 14. If you wish to incorporate parts of the Library into other free
-programs whose distribution conditions are incompatible with these,
-write to the author to ask for permission. For software which is
-copyrighted by the Free Software Foundation, write to the Free
-Software Foundation; we sometimes make exceptions for this. Our
-decision will be guided by the two goals of preserving the free status
-of all derivatives of our free software and of promoting the sharing
-and reuse of software generally.
-
- NO WARRANTY
-
- 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
-WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
-EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
-OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
-KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
-LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
-THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
- 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
-WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
-AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
-FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
-CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
-LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
-RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
-FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
-SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
-DAMAGES.
-
- END OF TERMS AND CONDITIONS
-^L
- How to Apply These Terms to Your New Libraries
-
- If you develop a new library, and you want it to be of the greatest
-possible use to the public, we recommend making it free software that
-everyone can redistribute and change. You can do so by permitting
-redistribution under these terms (or, alternatively, under the terms
-of the ordinary General Public License).
-
- To apply these terms, attach the following notices to the library.
-It is safest to attach them to the start of each source file to most
-effectively convey the exclusion of warranty; and each file should
-have at least the "copyright" line and a pointer to where the full
-notice is found.
-
-
- <one line to give the library's name and a brief idea of what it
-does.>
- Copyright (C) <year> <name of author>
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2 of the License, or (at your option) any later version.
-
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with this library; if not, write to the Free Software
- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-Also add information on how to contact you by electronic and paper
-mail.
-
-You should also get your employer (if you work as a programmer) or
-your
-school, if any, to sign a "copyright disclaimer" for the library, if
-necessary. Here is a sample; alter the names:
-
- Yoyodyne, Inc., hereby disclaims all copyright interest in the
- library `Frob' (a library for tweaking knobs) written by James
-Random Hacker.
-
- <signature of Ty Coon>, 1 April 1990
- Ty Coon, President of Vice
-
-That's all there is to it!
-
-
diff --git a/ext/bcmath/libbcmath/ChangeLog b/ext/bcmath/libbcmath/ChangeLog
deleted file mode 100644
index b8d459a2bb..0000000000
--- a/ext/bcmath/libbcmath/ChangeLog
+++ /dev/null
@@ -1,10 +0,0 @@
-Wed Jun 7 09:39:02 2000 Phil Nelson <phil@cs.wwu.edu>
-
- * configure.in and many others: version number now at 0.2.
- Many other changes/additions for getting a distribution
- to work.
-
-2000-05-21 Phil Nelson <phil@cs.wwu.edu>
-
- * Initial setup of bcmath library., calling it version 0.1.
-
diff --git a/ext/bcmath/libbcmath/FAQ b/ext/bcmath/libbcmath/FAQ
deleted file mode 100644
index 6499b1cffb..0000000000
--- a/ext/bcmath/libbcmath/FAQ
+++ /dev/null
@@ -1,21 +0,0 @@
-BCMATH FAQ:
-
-1) Why BCMATH?
-
-The math routines of GNU bc become more generally useful in a
-library form. By separating the BCMATH library from GNU bc,
-GNU bc can be under the GPL and BCMATH can be under the LGPL.
-
-2) Why BCMATH when GMP exists?
-
-GMP has "integers" (no digits after a decimal), "rational numbers"
-(stored as 2 integers) and "floats". None of these will correctly
-represent a POSIX BC number. Floats are the closest, but will not
-behave correctly for many computations. For example, BC numbers have
-a "scale" that represent the number of digits to represent after the
-decimal point. The multiplying two of these numbers requires one to
-calculate an exact number of digits after the decimal point regardless
-of the number of digits in the integer part. GMP floats have a
-"fixed, but arbitrary" mantissa and so multiplying two floats will end
-up dropping digits BC must calculate.
-
diff --git a/ext/bcmath/libbcmath/INSTALL b/ext/bcmath/libbcmath/INSTALL
deleted file mode 100644
index 8893a07827..0000000000
--- a/ext/bcmath/libbcmath/INSTALL
+++ /dev/null
@@ -1,9 +0,0 @@
-Currently, only libbcmath.a is built. To build and install it, do
-
- configure
- make
- make install
-
-Typical configure parameters are available. (e.g. PREFIX)
-
-Bugs and comments to philnelson@acm.org.
diff --git a/ext/bcmath/libbcmath/Makefile.am b/ext/bcmath/libbcmath/Makefile.am
deleted file mode 100644
index e5be8201b3..0000000000
--- a/ext/bcmath/libbcmath/Makefile.am
+++ /dev/null
@@ -1,12 +0,0 @@
-## Process this file with automake to produce Makefile.in
-
-SUBDIRS= src doc
-
-MAINTAINERCLEANFILES = aclocal.m4 config.h.in configure Makefile.in \
- stamp-h.in *~
-
-dist-hook:
- cp $(srcdir)/doc/bcmath.1 $(distdir)/doc
- cp $(srcdir)/src/private.h $(distdir)/src
- cp $(srcdir)/FAQ $(distdir)
-
diff --git a/ext/bcmath/libbcmath/NEWS b/ext/bcmath/libbcmath/NEWS
deleted file mode 100644
index 431d7b315d..0000000000
--- a/ext/bcmath/libbcmath/NEWS
+++ /dev/null
@@ -1,3 +0,0 @@
-NEWS for bcmath library:
-
- May 2000: The library is created.
diff --git a/ext/bcmath/libbcmath/README b/ext/bcmath/libbcmath/README
deleted file mode 100644
index cae5e5dc43..0000000000
--- a/ext/bcmath/libbcmath/README
+++ /dev/null
@@ -1,9 +0,0 @@
-This is bcmath, a library of arbitrary precision math routines.
-These routines, in a different form, are the routines that to
-the arbitrary precision calculations for GNU bc and GNU dc.
-
-This library is provided to make these routines useful in a
-larger context with less restrictions on the use of them.
-
-These routines do not duplicate functionality of the GNU gmp
-library. gmp is similar, but the actual computation is different.
diff --git a/ext/bcmath/libbcmath/acconfig.h b/ext/bcmath/libbcmath/acconfig.h
deleted file mode 100644
index 4d301dcacf..0000000000
--- a/ext/bcmath/libbcmath/acconfig.h
+++ /dev/null
@@ -1,9 +0,0 @@
-/* PACKAGE name */
-#undef PACKAGE
-
-/* Package VERSION number */
-#undef VERSION
-
-/* Define to `size_t' if <sys/types.h> and <stddef.h> don't define. */
-#undef ptrdiff_t
-
diff --git a/ext/bcmath/libbcmath/aclocal.m4 b/ext/bcmath/libbcmath/aclocal.m4
deleted file mode 100644
index f23ba2904e..0000000000
--- a/ext/bcmath/libbcmath/aclocal.m4
+++ /dev/null
@@ -1,127 +0,0 @@
-dnl aclocal.m4 generated automatically by aclocal 1.4
-
-dnl Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc.
-dnl This file is free software; the Free Software Foundation
-dnl gives unlimited permission to copy and/or distribute it,
-dnl with or without modifications, as long as this notice is preserved.
-
-dnl This program is distributed in the hope that it will be useful,
-dnl but WITHOUT ANY WARRANTY, to the extent permitted by law; without
-dnl even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-dnl PARTICULAR PURPOSE.
-
-# Do all the work for Automake. This macro actually does too much --
-# some checks are only needed if your package does certain things.
-# But this isn't really a big deal.
-
-# serial 1
-
-dnl Usage:
-dnl AM_INIT_AUTOMAKE(package,version, [no-define])
-
-AC_DEFUN(AM_INIT_AUTOMAKE,
-[AC_REQUIRE([AC_PROG_INSTALL])
-PACKAGE=[$1]
-AC_SUBST(PACKAGE)
-VERSION=[$2]
-AC_SUBST(VERSION)
-dnl test to see if srcdir already configured
-if test "`cd $srcdir && pwd`" != "`pwd`" && test -f $srcdir/config.status; then
- AC_MSG_ERROR([source directory already configured; run "make distclean" there first])
-fi
-ifelse([$3],,
-AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package])
-AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package]))
-AC_REQUIRE([AM_SANITY_CHECK])
-AC_REQUIRE([AC_ARG_PROGRAM])
-dnl FIXME This is truly gross.
-missing_dir=`cd $ac_aux_dir && pwd`
-AM_MISSING_PROG(ACLOCAL, aclocal, $missing_dir)
-AM_MISSING_PROG(AUTOCONF, autoconf, $missing_dir)
-AM_MISSING_PROG(AUTOMAKE, automake, $missing_dir)
-AM_MISSING_PROG(AUTOHEADER, autoheader, $missing_dir)
-AM_MISSING_PROG(MAKEINFO, makeinfo, $missing_dir)
-AC_REQUIRE([AC_PROG_MAKE_SET])])
-
-#
-# Check to make sure that the build environment is sane.
-#
-
-AC_DEFUN(AM_SANITY_CHECK,
-[AC_MSG_CHECKING([whether build environment is sane])
-# Just in case
-sleep 1
-echo timestamp > conftestfile
-# Do `set' in a subshell so we don't clobber the current shell's
-# arguments. Must try -L first in case configure is actually a
-# symlink; some systems play weird games with the mod time of symlinks
-# (eg FreeBSD returns the mod time of the symlink's containing
-# directory).
-if (
- set X `ls -Lt $srcdir/configure conftestfile 2> /dev/null`
- if test "[$]*" = "X"; then
- # -L didn't work.
- set X `ls -t $srcdir/configure conftestfile`
- fi
- if test "[$]*" != "X $srcdir/configure conftestfile" \
- && test "[$]*" != "X conftestfile $srcdir/configure"; then
-
- # If neither matched, then we have a broken ls. This can happen
- # if, for instance, CONFIG_SHELL is bash and it inherits a
- # broken ls alias from the environment. This has actually
- # happened. Such a system could not be considered "sane".
- AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken
-alias in your environment])
- fi
-
- test "[$]2" = conftestfile
- )
-then
- # Ok.
- :
-else
- AC_MSG_ERROR([newly created file is older than distributed files!
-Check your system clock])
-fi
-rm -f conftest*
-AC_MSG_RESULT(yes)])
-
-dnl AM_MISSING_PROG(NAME, PROGRAM, DIRECTORY)
-dnl The program must properly implement --version.
-AC_DEFUN(AM_MISSING_PROG,
-[AC_MSG_CHECKING(for working $2)
-# Run test in a subshell; some versions of sh will print an error if
-# an executable is not found, even if stderr is redirected.
-# Redirect stdin to placate older versions of autoconf. Sigh.
-if ($2 --version) < /dev/null > /dev/null 2>&1; then
- $1=$2
- AC_MSG_RESULT(found)
-else
- $1="$3/missing $2"
- AC_MSG_RESULT(missing)
-fi
-AC_SUBST($1)])
-
-# Like AC_CONFIG_HEADER, but automatically create stamp file.
-
-AC_DEFUN(AM_CONFIG_HEADER,
-[AC_PREREQ([2.12])
-AC_CONFIG_HEADER([$1])
-dnl When config.status generates a header, we must update the stamp-h file.
-dnl This file resides in the same directory as the config header
-dnl that is generated. We must strip everything past the first ":",
-dnl and everything past the last "/".
-AC_OUTPUT_COMMANDS(changequote(<<,>>)dnl
-ifelse(patsubst(<<$1>>, <<[^ ]>>, <<>>), <<>>,
-<<test -z "<<$>>CONFIG_HEADERS" || echo timestamp > patsubst(<<$1>>, <<^\([^:]*/\)?.*>>, <<\1>>)stamp-h<<>>dnl>>,
-<<am_indx=1
-for am_file in <<$1>>; do
- case " <<$>>CONFIG_HEADERS " in
- *" <<$>>am_file "*<<)>>
- echo timestamp > `echo <<$>>am_file | sed -e 's%:.*%%' -e 's%[^/]*$%%'`stamp-h$am_indx
- ;;
- esac
- am_indx=`expr "<<$>>am_indx" + 1`
-done<<>>dnl>>)
-changequote([,]))])
-
diff --git a/ext/bcmath/libbcmath/config.h.in b/ext/bcmath/libbcmath/config.h.in
deleted file mode 100644
index 21cfb9255f..0000000000
--- a/ext/bcmath/libbcmath/config.h.in
+++ /dev/null
@@ -1,41 +0,0 @@
-/* config.h.in. Generated automatically from configure.in by autoheader. */
-
-/* Define to empty if the keyword does not work. */
-#undef const
-
-/* Define to `unsigned' if <sys/types.h> doesn't define. */
-#undef size_t
-
-/* Define if you have the ANSI C header files. */
-#undef STDC_HEADERS
-
-/* Define to `size_t' if <sys/types.h> and <stddef.h> don't define. */
-#undef ptrdiff_t
-
-/* Define if you have the <lib.h> header file. */
-#undef HAVE_LIB_H
-
-/* Define if you have the <limits.h> header file. */
-#undef HAVE_LIMITS_H
-
-/* Define if you have the <stdarg.h> header file. */
-#undef HAVE_STDARG_H
-
-/* Define if you have the <stddef.h> header file. */
-#undef HAVE_STDDEF_H
-
-/* Define if you have the <stdlib.h> header file. */
-#undef HAVE_STDLIB_H
-
-/* Define if you have the <string.h> header file. */
-#undef HAVE_STRING_H
-
-/* Define if you have the <unistd.h> header file. */
-#undef HAVE_UNISTD_H
-
-/* Name of package */
-#undef PACKAGE
-
-/* Version number of package */
-#undef VERSION
-
diff --git a/ext/bcmath/libbcmath/configure b/ext/bcmath/libbcmath/configure
deleted file mode 100644
index 026fd039c7..0000000000
--- a/ext/bcmath/libbcmath/configure
+++ /dev/null
@@ -1,1859 +0,0 @@
-#! /bin/sh
-
-# Guess values for system-dependent variables and create Makefiles.
-# Generated automatically using autoconf version 2.13
-# Copyright (C) 1992, 93, 94, 95, 96 Free Software Foundation, Inc.
-#
-# This configure script is free software; the Free Software Foundation
-# gives unlimited permission to copy, distribute and modify it.
-
-# Defaults:
-ac_help=
-ac_default_prefix=/usr/local
-# Any additions from configure.in:
-
-# Initialize some variables set by options.
-# The variables have the same names as the options, with
-# dashes changed to underlines.
-build=NONE
-cache_file=./config.cache
-exec_prefix=NONE
-host=NONE
-no_create=
-nonopt=NONE
-no_recursion=
-prefix=NONE
-program_prefix=NONE
-program_suffix=NONE
-program_transform_name=s,x,x,
-silent=
-site=
-srcdir=
-target=NONE
-verbose=
-x_includes=NONE
-x_libraries=NONE
-bindir='${exec_prefix}/bin'
-sbindir='${exec_prefix}/sbin'
-libexecdir='${exec_prefix}/libexec'
-datadir='${prefix}/share'
-sysconfdir='${prefix}/etc'
-sharedstatedir='${prefix}/com'
-localstatedir='${prefix}/var'
-libdir='${exec_prefix}/lib'
-includedir='${prefix}/include'
-oldincludedir='/usr/include'
-infodir='${prefix}/info'
-mandir='${prefix}/man'
-
-# Initialize some other variables.
-subdirs=
-MFLAGS= MAKEFLAGS=
-SHELL=${CONFIG_SHELL-/bin/sh}
-# Maximum number of lines to put in a shell here document.
-ac_max_here_lines=12
-
-ac_prev=
-for ac_option
-do
-
- # If the previous option needs an argument, assign it.
- if test -n "$ac_prev"; then
- eval "$ac_prev=\$ac_option"
- ac_prev=
- continue
- fi
-
- case "$ac_option" in
- -*=*) ac_optarg=`echo "$ac_option" | sed 's/[-_a-zA-Z0-9]*=//'` ;;
- *) ac_optarg= ;;
- esac
-
- # Accept the important Cygnus configure options, so we can diagnose typos.
-
- case "$ac_option" in
-
- -bindir | --bindir | --bindi | --bind | --bin | --bi)
- ac_prev=bindir ;;
- -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*)
- bindir="$ac_optarg" ;;
-
- -build | --build | --buil | --bui | --bu)
- ac_prev=build ;;
- -build=* | --build=* | --buil=* | --bui=* | --bu=*)
- build="$ac_optarg" ;;
-
- -cache-file | --cache-file | --cache-fil | --cache-fi \
- | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c)
- ac_prev=cache_file ;;
- -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \
- | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*)
- cache_file="$ac_optarg" ;;
-
- -datadir | --datadir | --datadi | --datad | --data | --dat | --da)
- ac_prev=datadir ;;
- -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \
- | --da=*)
- datadir="$ac_optarg" ;;
-
- -disable-* | --disable-*)
- ac_feature=`echo $ac_option|sed -e 's/-*disable-//'`
- # Reject names that are not valid shell variable names.
- if test -n "`echo $ac_feature| sed 's/[-a-zA-Z0-9_]//g'`"; then
- { echo "configure: error: $ac_feature: invalid feature name" 1>&2; exit 1; }
- fi
- ac_feature=`echo $ac_feature| sed 's/-/_/g'`
- eval "enable_${ac_feature}=no" ;;
-
- -enable-* | --enable-*)
- ac_feature=`echo $ac_option|sed -e 's/-*enable-//' -e 's/=.*//'`
- # Reject names that are not valid shell variable names.
- if test -n "`echo $ac_feature| sed 's/[-_a-zA-Z0-9]//g'`"; then
- { echo "configure: error: $ac_feature: invalid feature name" 1>&2; exit 1; }
- fi
- ac_feature=`echo $ac_feature| sed 's/-/_/g'`
- case "$ac_option" in
- *=*) ;;
- *) ac_optarg=yes ;;
- esac
- eval "enable_${ac_feature}='$ac_optarg'" ;;
-
- -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \
- | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \
- | --exec | --exe | --ex)
- ac_prev=exec_prefix ;;
- -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \
- | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \
- | --exec=* | --exe=* | --ex=*)
- exec_prefix="$ac_optarg" ;;
-
- -gas | --gas | --ga | --g)
- # Obsolete; use --with-gas.
- with_gas=yes ;;
-
- -help | --help | --hel | --he)
- # Omit some internal or obsolete options to make the list less imposing.
- # This message is too long to be a string in the A/UX 3.1 sh.
- cat << EOF
-Usage: configure [options] [host]
-Options: [defaults in brackets after descriptions]
-Configuration:
- --cache-file=FILE cache test results in FILE
- --help print this message
- --no-create do not create output files
- --quiet, --silent do not print \`checking...' messages
- --version print the version of autoconf that created configure
-Directory and file names:
- --prefix=PREFIX install architecture-independent files in PREFIX
- [$ac_default_prefix]
- --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX
- [same as prefix]
- --bindir=DIR user executables in DIR [EPREFIX/bin]
- --sbindir=DIR system admin executables in DIR [EPREFIX/sbin]
- --libexecdir=DIR program executables in DIR [EPREFIX/libexec]
- --datadir=DIR read-only architecture-independent data in DIR
- [PREFIX/share]
- --sysconfdir=DIR read-only single-machine data in DIR [PREFIX/etc]
- --sharedstatedir=DIR modifiable architecture-independent data in DIR
- [PREFIX/com]
- --localstatedir=DIR modifiable single-machine data in DIR [PREFIX/var]
- --libdir=DIR object code libraries in DIR [EPREFIX/lib]
- --includedir=DIR C header files in DIR [PREFIX/include]
- --oldincludedir=DIR C header files for non-gcc in DIR [/usr/include]
- --infodir=DIR info documentation in DIR [PREFIX/info]
- --mandir=DIR man documentation in DIR [PREFIX/man]
- --srcdir=DIR find the sources in DIR [configure dir or ..]
- --program-prefix=PREFIX prepend PREFIX to installed program names
- --program-suffix=SUFFIX append SUFFIX to installed program names
- --program-transform-name=PROGRAM
- run sed PROGRAM on installed program names
-EOF
- cat << EOF
-Host type:
- --build=BUILD configure for building on BUILD [BUILD=HOST]
- --host=HOST configure for HOST [guessed]
- --target=TARGET configure for TARGET [TARGET=HOST]
-Features and packages:
- --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no)
- --enable-FEATURE[=ARG] include FEATURE [ARG=yes]
- --with-PACKAGE[=ARG] use PACKAGE [ARG=yes]
- --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no)
- --x-includes=DIR X include files are in DIR
- --x-libraries=DIR X library files are in DIR
-EOF
- if test -n "$ac_help"; then
- echo "--enable and --with options recognized:$ac_help"
- fi
- exit 0 ;;
-
- -host | --host | --hos | --ho)
- ac_prev=host ;;
- -host=* | --host=* | --hos=* | --ho=*)
- host="$ac_optarg" ;;
-
- -includedir | --includedir | --includedi | --included | --include \
- | --includ | --inclu | --incl | --inc)
- ac_prev=includedir ;;
- -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \
- | --includ=* | --inclu=* | --incl=* | --inc=*)
- includedir="$ac_optarg" ;;
-
- -infodir | --infodir | --infodi | --infod | --info | --inf)
- ac_prev=infodir ;;
- -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*)
- infodir="$ac_optarg" ;;
-
- -libdir | --libdir | --libdi | --libd)
- ac_prev=libdir ;;
- -libdir=* | --libdir=* | --libdi=* | --libd=*)
- libdir="$ac_optarg" ;;
-
- -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \
- | --libexe | --libex | --libe)
- ac_prev=libexecdir ;;
- -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \
- | --libexe=* | --libex=* | --libe=*)
- libexecdir="$ac_optarg" ;;
-
- -localstatedir | --localstatedir | --localstatedi | --localstated \
- | --localstate | --localstat | --localsta | --localst \
- | --locals | --local | --loca | --loc | --lo)
- ac_prev=localstatedir ;;
- -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \
- | --localstate=* | --localstat=* | --localsta=* | --localst=* \
- | --locals=* | --local=* | --loca=* | --loc=* | --lo=*)
- localstatedir="$ac_optarg" ;;
-
- -mandir | --mandir | --mandi | --mand | --man | --ma | --m)
- ac_prev=mandir ;;
- -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*)
- mandir="$ac_optarg" ;;
-
- -nfp | --nfp | --nf)
- # Obsolete; use --without-fp.
- with_fp=no ;;
-
- -no-create | --no-create | --no-creat | --no-crea | --no-cre \
- | --no-cr | --no-c)
- no_create=yes ;;
-
- -no-recursion | --no-recursion | --no-recursio | --no-recursi \
- | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r)
- no_recursion=yes ;;
-
- -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \
- | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \
- | --oldin | --oldi | --old | --ol | --o)
- ac_prev=oldincludedir ;;
- -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \
- | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \
- | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*)
- oldincludedir="$ac_optarg" ;;
-
- -prefix | --prefix | --prefi | --pref | --pre | --pr | --p)
- ac_prev=prefix ;;
- -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*)
- prefix="$ac_optarg" ;;
-
- -program-prefix | --program-prefix | --program-prefi | --program-pref \
- | --program-pre | --program-pr | --program-p)
- ac_prev=program_prefix ;;
- -program-prefix=* | --program-prefix=* | --program-prefi=* \
- | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*)
- program_prefix="$ac_optarg" ;;
-
- -program-suffix | --program-suffix | --program-suffi | --program-suff \
- | --program-suf | --program-su | --program-s)
- ac_prev=program_suffix ;;
- -program-suffix=* | --program-suffix=* | --program-suffi=* \
- | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*)
- program_suffix="$ac_optarg" ;;
-
- -program-transform-name | --program-transform-name \
- | --program-transform-nam | --program-transform-na \
- | --program-transform-n | --program-transform- \
- | --program-transform | --program-transfor \
- | --program-transfo | --program-transf \
- | --program-trans | --program-tran \
- | --progr-tra | --program-tr | --program-t)
- ac_prev=program_transform_name ;;
- -program-transform-name=* | --program-transform-name=* \
- | --program-transform-nam=* | --program-transform-na=* \
- | --program-transform-n=* | --program-transform-=* \
- | --program-transform=* | --program-transfor=* \
- | --program-transfo=* | --program-transf=* \
- | --program-trans=* | --program-tran=* \
- | --progr-tra=* | --program-tr=* | --program-t=*)
- program_transform_name="$ac_optarg" ;;
-
- -q | -quiet | --quiet | --quie | --qui | --qu | --q \
- | -silent | --silent | --silen | --sile | --sil)
- silent=yes ;;
-
- -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb)
- ac_prev=sbindir ;;
- -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \
- | --sbi=* | --sb=*)
- sbindir="$ac_optarg" ;;
-
- -sharedstatedir | --sharedstatedir | --sharedstatedi \
- | --sharedstated | --sharedstate | --sharedstat | --sharedsta \
- | --sharedst | --shareds | --shared | --share | --shar \
- | --sha | --sh)
- ac_prev=sharedstatedir ;;
- -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \
- | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \
- | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \
- | --sha=* | --sh=*)
- sharedstatedir="$ac_optarg" ;;
-
- -site | --site | --sit)
- ac_prev=site ;;
- -site=* | --site=* | --sit=*)
- site="$ac_optarg" ;;
-
- -srcdir | --srcdir | --srcdi | --srcd | --src | --sr)
- ac_prev=srcdir ;;
- -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*)
- srcdir="$ac_optarg" ;;
-
- -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \
- | --syscon | --sysco | --sysc | --sys | --sy)
- ac_prev=sysconfdir ;;
- -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \
- | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*)
- sysconfdir="$ac_optarg" ;;
-
- -target | --target | --targe | --targ | --tar | --ta | --t)
- ac_prev=target ;;
- -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*)
- target="$ac_optarg" ;;
-
- -v | -verbose | --verbose | --verbos | --verbo | --verb)
- verbose=yes ;;
-
- -version | --version | --versio | --versi | --vers)
- echo "configure generated by autoconf version 2.13"
- exit 0 ;;
-
- -with-* | --with-*)
- ac_package=`echo $ac_option|sed -e 's/-*with-//' -e 's/=.*//'`
- # Reject names that are not valid shell variable names.
- if test -n "`echo $ac_package| sed 's/[-_a-zA-Z0-9]//g'`"; then
- { echo "configure: error: $ac_package: invalid package name" 1>&2; exit 1; }
- fi
- ac_package=`echo $ac_package| sed 's/-/_/g'`
- case "$ac_option" in
- *=*) ;;
- *) ac_optarg=yes ;;
- esac
- eval "with_${ac_package}='$ac_optarg'" ;;
-
- -without-* | --without-*)
- ac_package=`echo $ac_option|sed -e 's/-*without-//'`
- # Reject names that are not valid shell variable names.
- if test -n "`echo $ac_package| sed 's/[-a-zA-Z0-9_]//g'`"; then
- { echo "configure: error: $ac_package: invalid package name" 1>&2; exit 1; }
- fi
- ac_package=`echo $ac_package| sed 's/-/_/g'`
- eval "with_${ac_package}=no" ;;
-
- --x)
- # Obsolete; use --with-x.
- with_x=yes ;;
-
- -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \
- | --x-incl | --x-inc | --x-in | --x-i)
- ac_prev=x_includes ;;
- -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \
- | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*)
- x_includes="$ac_optarg" ;;
-
- -x-libraries | --x-libraries | --x-librarie | --x-librari \
- | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l)
- ac_prev=x_libraries ;;
- -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \
- | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*)
- x_libraries="$ac_optarg" ;;
-
- -*) { echo "configure: error: $ac_option: invalid option; use --help to show usage" 1>&2; exit 1; }
- ;;
-
- *)
- if test -n "`echo $ac_option| sed 's/[-a-z0-9.]//g'`"; then
- echo "configure: warning: $ac_option: invalid host type" 1>&2
- fi
- if test "x$nonopt" != xNONE; then
- { echo "configure: error: can only configure for one host and one target at a time" 1>&2; exit 1; }
- fi
- nonopt="$ac_option"
- ;;
-
- esac
-done
-
-if test -n "$ac_prev"; then
- { echo "configure: error: missing argument to --`echo $ac_prev | sed 's/_/-/g'`" 1>&2; exit 1; }
-fi
-
-trap 'rm -fr conftest* confdefs* core core.* *.core $ac_clean_files; exit 1' 1 2 15
-
-# File descriptor usage:
-# 0 standard input
-# 1 file creation
-# 2 errors and warnings
-# 3 some systems may open it to /dev/tty
-# 4 used on the Kubota Titan
-# 6 checking for... messages and results
-# 5 compiler messages saved in config.log
-if test "$silent" = yes; then
- exec 6>/dev/null
-else
- exec 6>&1
-fi
-exec 5>./config.log
-
-echo "\
-This file contains any messages produced by compilers while
-running configure, to aid debugging if configure makes a mistake.
-" 1>&5
-
-# Strip out --no-create and --no-recursion so they do not pile up.
-# Also quote any args containing shell metacharacters.
-ac_configure_args=
-for ac_arg
-do
- case "$ac_arg" in
- -no-create | --no-create | --no-creat | --no-crea | --no-cre \
- | --no-cr | --no-c) ;;
- -no-recursion | --no-recursion | --no-recursio | --no-recursi \
- | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) ;;
- *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?]*)
- ac_configure_args="$ac_configure_args '$ac_arg'" ;;
- *) ac_configure_args="$ac_configure_args $ac_arg" ;;
- esac
-done
-
-# NLS nuisances.
-# Only set these to C if already set. These must not be set unconditionally
-# because not all systems understand e.g. LANG=C (notably SCO).
-# Fixing LC_MESSAGES prevents Solaris sh from translating var values in `set'!
-# Non-C LC_CTYPE values break the ctype check.
-if test "${LANG+set}" = set; then LANG=C; export LANG; fi
-if test "${LC_ALL+set}" = set; then LC_ALL=C; export LC_ALL; fi
-if test "${LC_MESSAGES+set}" = set; then LC_MESSAGES=C; export LC_MESSAGES; fi
-if test "${LC_CTYPE+set}" = set; then LC_CTYPE=C; export LC_CTYPE; fi
-
-# confdefs.h avoids OS command line length limits that DEFS can exceed.
-rm -rf conftest* confdefs.h
-# AIX cpp loses on an empty file, so make sure it contains at least a newline.
-echo > confdefs.h
-
-# A filename unique to this package, relative to the directory that
-# configure is in, which we can look for to find out if srcdir is correct.
-ac_unique_file=doc/bcmath.1
-
-# Find the source files, if location was not specified.
-if test -z "$srcdir"; then
- ac_srcdir_defaulted=yes
- # Try the directory containing this script, then its parent.
- ac_prog=$0
- ac_confdir=`echo $ac_prog|sed 's%/[^/][^/]*$%%'`
- test "x$ac_confdir" = "x$ac_prog" && ac_confdir=.
- srcdir=$ac_confdir
- if test ! -r $srcdir/$ac_unique_file; then
- srcdir=..
- fi
-else
- ac_srcdir_defaulted=no
-fi
-if test ! -r $srcdir/$ac_unique_file; then
- if test "$ac_srcdir_defaulted" = yes; then
- { echo "configure: error: can not find sources in $ac_confdir or .." 1>&2; exit 1; }
- else
- { echo "configure: error: can not find sources in $srcdir" 1>&2; exit 1; }
- fi
-fi
-srcdir=`echo "${srcdir}" | sed 's%\([^/]\)/*$%\1%'`
-
-# Prefer explicitly selected file to automatically selected ones.
-if test -z "$CONFIG_SITE"; then
- if test "x$prefix" != xNONE; then
- CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site"
- else
- CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site"
- fi
-fi
-for ac_site_file in $CONFIG_SITE; do
- if test -r "$ac_site_file"; then
- echo "loading site script $ac_site_file"
- . "$ac_site_file"
- fi
-done
-
-if test -r "$cache_file"; then
- echo "loading cache $cache_file"
- . $cache_file
-else
- echo "creating cache $cache_file"
- > $cache_file
-fi
-
-ac_ext=c
-# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
-ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
-cross_compiling=$ac_cv_prog_cc_cross
-
-ac_exeext=
-ac_objext=o
-if (echo "testing\c"; echo 1,2,3) | grep c >/dev/null; then
- # Stardent Vistra SVR4 grep lacks -e, says ghazi@caip.rutgers.edu.
- if (echo -n testing; echo 1,2,3) | sed s/-n/xn/ | grep xn >/dev/null; then
- ac_n= ac_c='
-' ac_t=' '
- else
- ac_n=-n ac_c= ac_t=
- fi
-else
- ac_n= ac_c='\c' ac_t=
-fi
-
-
-ac_aux_dir=
-for ac_dir in $srcdir $srcdir/.. $srcdir/../..; do
- if test -f $ac_dir/install-sh; then
- ac_aux_dir=$ac_dir
- ac_install_sh="$ac_aux_dir/install-sh -c"
- break
- elif test -f $ac_dir/install.sh; then
- ac_aux_dir=$ac_dir
- ac_install_sh="$ac_aux_dir/install.sh -c"
- break
- fi
-done
-if test -z "$ac_aux_dir"; then
- { echo "configure: error: can not find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." 1>&2; exit 1; }
-fi
-ac_config_guess=$ac_aux_dir/config.guess
-ac_config_sub=$ac_aux_dir/config.sub
-ac_configure=$ac_aux_dir/configure # This should be Cygnus configure.
-
-# Find a good install program. We prefer a C program (faster),
-# so one script is as good as another. But avoid the broken or
-# incompatible versions:
-# SysV /etc/install, /usr/sbin/install
-# SunOS /usr/etc/install
-# IRIX /sbin/install
-# AIX /bin/install
-# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag
-# AFS /usr/afsws/bin/install, which mishandles nonexistent args
-# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
-# ./install, which can be erroneously created by make from ./install.sh.
-echo $ac_n "checking for a BSD compatible install""... $ac_c" 1>&6
-echo "configure:556: checking for a BSD compatible install" >&5
-if test -z "$INSTALL"; then
-if eval "test \"`echo '$''{'ac_cv_path_install'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- IFS="${IFS= }"; ac_save_IFS="$IFS"; IFS=":"
- for ac_dir in $PATH; do
- # Account for people who put trailing slashes in PATH elements.
- case "$ac_dir/" in
- /|./|.//|/etc/*|/usr/sbin/*|/usr/etc/*|/sbin/*|/usr/afsws/bin/*|/usr/ucb/*) ;;
- *)
- # OSF1 and SCO ODT 3.0 have their own names for install.
- # Don't use installbsd from OSF since it installs stuff as root
- # by default.
- for ac_prog in ginstall scoinst install; do
- if test -f $ac_dir/$ac_prog; then
- if test $ac_prog = install &&
- grep dspmsg $ac_dir/$ac_prog >/dev/null 2>&1; then
- # AIX install. It has an incompatible calling convention.
- :
- else
- ac_cv_path_install="$ac_dir/$ac_prog -c"
- break 2
- fi
- fi
- done
- ;;
- esac
- done
- IFS="$ac_save_IFS"
-
-fi
- if test "${ac_cv_path_install+set}" = set; then
- INSTALL="$ac_cv_path_install"
- else
- # As a last resort, use the slow shell script. We don't cache a
- # path for INSTALL within a source directory, because that will
- # break other packages using the cache if that directory is
- # removed, or if the path is relative.
- INSTALL="$ac_install_sh"
- fi
-fi
-echo "$ac_t""$INSTALL" 1>&6
-
-# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
-# It thinks the first close brace ends the variable substitution.
-test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
-
-test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL_PROGRAM}'
-
-test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
-
-echo $ac_n "checking whether build environment is sane""... $ac_c" 1>&6
-echo "configure:609: checking whether build environment is sane" >&5
-# Just in case
-sleep 1
-echo timestamp > conftestfile
-# Do `set' in a subshell so we don't clobber the current shell's
-# arguments. Must try -L first in case configure is actually a
-# symlink; some systems play weird games with the mod time of symlinks
-# (eg FreeBSD returns the mod time of the symlink's containing
-# directory).
-if (
- set X `ls -Lt $srcdir/configure conftestfile 2> /dev/null`
- if test "$*" = "X"; then
- # -L didn't work.
- set X `ls -t $srcdir/configure conftestfile`
- fi
- if test "$*" != "X $srcdir/configure conftestfile" \
- && test "$*" != "X conftestfile $srcdir/configure"; then
-
- # If neither matched, then we have a broken ls. This can happen
- # if, for instance, CONFIG_SHELL is bash and it inherits a
- # broken ls alias from the environment. This has actually
- # happened. Such a system could not be considered "sane".
- { echo "configure: error: ls -t appears to fail. Make sure there is not a broken
-alias in your environment" 1>&2; exit 1; }
- fi
-
- test "$2" = conftestfile
- )
-then
- # Ok.
- :
-else
- { echo "configure: error: newly created file is older than distributed files!
-Check your system clock" 1>&2; exit 1; }
-fi
-rm -f conftest*
-echo "$ac_t""yes" 1>&6
-if test "$program_transform_name" = s,x,x,; then
- program_transform_name=
-else
- # Double any \ or $. echo might interpret backslashes.
- cat <<\EOF_SED > conftestsed
-s,\\,\\\\,g; s,\$,$$,g
-EOF_SED
- program_transform_name="`echo $program_transform_name|sed -f conftestsed`"
- rm -f conftestsed
-fi
-test "$program_prefix" != NONE &&
- program_transform_name="s,^,${program_prefix},; $program_transform_name"
-# Use a double $ so make ignores it.
-test "$program_suffix" != NONE &&
- program_transform_name="s,\$\$,${program_suffix},; $program_transform_name"
-
-# sed with no file args requires a program.
-test "$program_transform_name" = "" && program_transform_name="s,x,x,"
-
-echo $ac_n "checking whether ${MAKE-make} sets \${MAKE}""... $ac_c" 1>&6
-echo "configure:666: checking whether ${MAKE-make} sets \${MAKE}" >&5
-set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y%./+-%__p_%'`
-if eval "test \"`echo '$''{'ac_cv_prog_make_${ac_make}_set'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- cat > conftestmake <<\EOF
-all:
- @echo 'ac_maketemp="${MAKE}"'
-EOF
-# GNU make sometimes prints "make[1]: Entering...", which would confuse us.
-eval `${MAKE-make} -f conftestmake 2>/dev/null | grep temp=`
-if test -n "$ac_maketemp"; then
- eval ac_cv_prog_make_${ac_make}_set=yes
-else
- eval ac_cv_prog_make_${ac_make}_set=no
-fi
-rm -f conftestmake
-fi
-if eval "test \"`echo '$ac_cv_prog_make_'${ac_make}_set`\" = yes"; then
- echo "$ac_t""yes" 1>&6
- SET_MAKE=
-else
- echo "$ac_t""no" 1>&6
- SET_MAKE="MAKE=${MAKE-make}"
-fi
-
-
-PACKAGE="bcmath"
-
-VERSION="0.2"
-
-if test "`cd $srcdir && pwd`" != "`pwd`" && test -f $srcdir/config.status; then
- { echo "configure: error: source directory already configured; run "make distclean" there first" 1>&2; exit 1; }
-fi
-cat >> confdefs.h <<EOF
-#define PACKAGE "$PACKAGE"
-EOF
-
-cat >> confdefs.h <<EOF
-#define VERSION "$VERSION"
-EOF
-
-
-
-missing_dir=`cd $ac_aux_dir && pwd`
-echo $ac_n "checking for working aclocal""... $ac_c" 1>&6
-echo "configure:712: checking for working aclocal" >&5
-# Run test in a subshell; some versions of sh will print an error if
-# an executable is not found, even if stderr is redirected.
-# Redirect stdin to placate older versions of autoconf. Sigh.
-if (aclocal --version) < /dev/null > /dev/null 2>&1; then
- ACLOCAL=aclocal
- echo "$ac_t""found" 1>&6
-else
- ACLOCAL="$missing_dir/missing aclocal"
- echo "$ac_t""missing" 1>&6
-fi
-
-echo $ac_n "checking for working autoconf""... $ac_c" 1>&6
-echo "configure:725: checking for working autoconf" >&5
-# Run test in a subshell; some versions of sh will print an error if
-# an executable is not found, even if stderr is redirected.
-# Redirect stdin to placate older versions of autoconf. Sigh.
-if (autoconf --version) < /dev/null > /dev/null 2>&1; then
- AUTOCONF=autoconf
- echo "$ac_t""found" 1>&6
-else
- AUTOCONF="$missing_dir/missing autoconf"
- echo "$ac_t""missing" 1>&6
-fi
-
-echo $ac_n "checking for working automake""... $ac_c" 1>&6
-echo "configure:738: checking for working automake" >&5
-# Run test in a subshell; some versions of sh will print an error if
-# an executable is not found, even if stderr is redirected.
-# Redirect stdin to placate older versions of autoconf. Sigh.
-if (automake --version) < /dev/null > /dev/null 2>&1; then
- AUTOMAKE=automake
- echo "$ac_t""found" 1>&6
-else
- AUTOMAKE="$missing_dir/missing automake"
- echo "$ac_t""missing" 1>&6
-fi
-
-echo $ac_n "checking for working autoheader""... $ac_c" 1>&6
-echo "configure:751: checking for working autoheader" >&5
-# Run test in a subshell; some versions of sh will print an error if
-# an executable is not found, even if stderr is redirected.
-# Redirect stdin to placate older versions of autoconf. Sigh.
-if (autoheader --version) < /dev/null > /dev/null 2>&1; then
- AUTOHEADER=autoheader
- echo "$ac_t""found" 1>&6
-else
- AUTOHEADER="$missing_dir/missing autoheader"
- echo "$ac_t""missing" 1>&6
-fi
-
-echo $ac_n "checking for working makeinfo""... $ac_c" 1>&6
-echo "configure:764: checking for working makeinfo" >&5
-# Run test in a subshell; some versions of sh will print an error if
-# an executable is not found, even if stderr is redirected.
-# Redirect stdin to placate older versions of autoconf. Sigh.
-if (makeinfo --version) < /dev/null > /dev/null 2>&1; then
- MAKEINFO=makeinfo
- echo "$ac_t""found" 1>&6
-else
- MAKEINFO="$missing_dir/missing makeinfo"
- echo "$ac_t""missing" 1>&6
-fi
-
-
-
-
-
-
-# Extract the first word of "gcc", so it can be a program name with args.
-set dummy gcc; ac_word=$2
-echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:784: checking for $ac_word" >&5
-if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- if test -n "$CC"; then
- ac_cv_prog_CC="$CC" # Let the user override the test.
-else
- IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
- ac_dummy="$PATH"
- for ac_dir in $ac_dummy; do
- test -z "$ac_dir" && ac_dir=.
- if test -f $ac_dir/$ac_word; then
- ac_cv_prog_CC="gcc"
- break
- fi
- done
- IFS="$ac_save_ifs"
-fi
-fi
-CC="$ac_cv_prog_CC"
-if test -n "$CC"; then
- echo "$ac_t""$CC" 1>&6
-else
- echo "$ac_t""no" 1>&6
-fi
-
-if test -z "$CC"; then
- # Extract the first word of "cc", so it can be a program name with args.
-set dummy cc; ac_word=$2
-echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:814: checking for $ac_word" >&5
-if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- if test -n "$CC"; then
- ac_cv_prog_CC="$CC" # Let the user override the test.
-else
- IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
- ac_prog_rejected=no
- ac_dummy="$PATH"
- for ac_dir in $ac_dummy; do
- test -z "$ac_dir" && ac_dir=.
- if test -f $ac_dir/$ac_word; then
- if test "$ac_dir/$ac_word" = "/usr/ucb/cc"; then
- ac_prog_rejected=yes
- continue
- fi
- ac_cv_prog_CC="cc"
- break
- fi
- done
- IFS="$ac_save_ifs"
-if test $ac_prog_rejected = yes; then
- # We found a bogon in the path, so make sure we never use it.
- set dummy $ac_cv_prog_CC
- shift
- if test $# -gt 0; then
- # We chose a different compiler from the bogus one.
- # However, it has the same basename, so the bogon will be chosen
- # first if we set CC to just the basename; use the full file name.
- shift
- set dummy "$ac_dir/$ac_word" "$@"
- shift
- ac_cv_prog_CC="$@"
- fi
-fi
-fi
-fi
-CC="$ac_cv_prog_CC"
-if test -n "$CC"; then
- echo "$ac_t""$CC" 1>&6
-else
- echo "$ac_t""no" 1>&6
-fi
-
- if test -z "$CC"; then
- case "`uname -s`" in
- *win32* | *WIN32*)
- # Extract the first word of "cl", so it can be a program name with args.
-set dummy cl; ac_word=$2
-echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:865: checking for $ac_word" >&5
-if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- if test -n "$CC"; then
- ac_cv_prog_CC="$CC" # Let the user override the test.
-else
- IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
- ac_dummy="$PATH"
- for ac_dir in $ac_dummy; do
- test -z "$ac_dir" && ac_dir=.
- if test -f $ac_dir/$ac_word; then
- ac_cv_prog_CC="cl"
- break
- fi
- done
- IFS="$ac_save_ifs"
-fi
-fi
-CC="$ac_cv_prog_CC"
-if test -n "$CC"; then
- echo "$ac_t""$CC" 1>&6
-else
- echo "$ac_t""no" 1>&6
-fi
- ;;
- esac
- fi
- test -z "$CC" && { echo "configure: error: no acceptable cc found in \$PATH" 1>&2; exit 1; }
-fi
-
-echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6
-echo "configure:897: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5
-
-ac_ext=c
-# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
-ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
-cross_compiling=$ac_cv_prog_cc_cross
-
-cat > conftest.$ac_ext << EOF
-
-#line 908 "configure"
-#include "confdefs.h"
-
-main(){return(0);}
-EOF
-if { (eval echo configure:913: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
- ac_cv_prog_cc_works=yes
- # If we can't run a trivial program, we are probably using a cross compiler.
- if (./conftest; exit) 2>/dev/null; then
- ac_cv_prog_cc_cross=no
- else
- ac_cv_prog_cc_cross=yes
- fi
-else
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
- ac_cv_prog_cc_works=no
-fi
-rm -fr conftest*
-ac_ext=c
-# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
-ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
-cross_compiling=$ac_cv_prog_cc_cross
-
-echo "$ac_t""$ac_cv_prog_cc_works" 1>&6
-if test $ac_cv_prog_cc_works = no; then
- { echo "configure: error: installation or configuration problem: C compiler cannot create executables." 1>&2; exit 1; }
-fi
-echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6
-echo "configure:939: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5
-echo "$ac_t""$ac_cv_prog_cc_cross" 1>&6
-cross_compiling=$ac_cv_prog_cc_cross
-
-echo $ac_n "checking whether we are using GNU C""... $ac_c" 1>&6
-echo "configure:944: checking whether we are using GNU C" >&5
-if eval "test \"`echo '$''{'ac_cv_prog_gcc'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- cat > conftest.c <<EOF
-#ifdef __GNUC__
- yes;
-#endif
-EOF
-if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:953: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
- ac_cv_prog_gcc=yes
-else
- ac_cv_prog_gcc=no
-fi
-fi
-
-echo "$ac_t""$ac_cv_prog_gcc" 1>&6
-
-if test $ac_cv_prog_gcc = yes; then
- GCC=yes
-else
- GCC=
-fi
-
-ac_test_CFLAGS="${CFLAGS+set}"
-ac_save_CFLAGS="$CFLAGS"
-CFLAGS=
-echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6
-echo "configure:972: checking whether ${CC-cc} accepts -g" >&5
-if eval "test \"`echo '$''{'ac_cv_prog_cc_g'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- echo 'void f(){}' > conftest.c
-if test -z "`${CC-cc} -g -c conftest.c 2>&1`"; then
- ac_cv_prog_cc_g=yes
-else
- ac_cv_prog_cc_g=no
-fi
-rm -f conftest*
-
-fi
-
-echo "$ac_t""$ac_cv_prog_cc_g" 1>&6
-if test "$ac_test_CFLAGS" = set; then
- CFLAGS="$ac_save_CFLAGS"
-elif test $ac_cv_prog_cc_g = yes; then
- if test "$GCC" = yes; then
- CFLAGS="-g -O2"
- else
- CFLAGS="-g"
- fi
-else
- if test "$GCC" = yes; then
- CFLAGS="-O2"
- else
- CFLAGS=
- fi
-fi
-
-
-# Find a good install program. We prefer a C program (faster),
-# so one script is as good as another. But avoid the broken or
-# incompatible versions:
-# SysV /etc/install, /usr/sbin/install
-# SunOS /usr/etc/install
-# IRIX /sbin/install
-# AIX /bin/install
-# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag
-# AFS /usr/afsws/bin/install, which mishandles nonexistent args
-# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
-# ./install, which can be erroneously created by make from ./install.sh.
-echo $ac_n "checking for a BSD compatible install""... $ac_c" 1>&6
-echo "configure:1016: checking for a BSD compatible install" >&5
-if test -z "$INSTALL"; then
-if eval "test \"`echo '$''{'ac_cv_path_install'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- IFS="${IFS= }"; ac_save_IFS="$IFS"; IFS=":"
- for ac_dir in $PATH; do
- # Account for people who put trailing slashes in PATH elements.
- case "$ac_dir/" in
- /|./|.//|/etc/*|/usr/sbin/*|/usr/etc/*|/sbin/*|/usr/afsws/bin/*|/usr/ucb/*) ;;
- *)
- # OSF1 and SCO ODT 3.0 have their own names for install.
- # Don't use installbsd from OSF since it installs stuff as root
- # by default.
- for ac_prog in ginstall scoinst install; do
- if test -f $ac_dir/$ac_prog; then
- if test $ac_prog = install &&
- grep dspmsg $ac_dir/$ac_prog >/dev/null 2>&1; then
- # AIX install. It has an incompatible calling convention.
- :
- else
- ac_cv_path_install="$ac_dir/$ac_prog -c"
- break 2
- fi
- fi
- done
- ;;
- esac
- done
- IFS="$ac_save_IFS"
-
-fi
- if test "${ac_cv_path_install+set}" = set; then
- INSTALL="$ac_cv_path_install"
- else
- # As a last resort, use the slow shell script. We don't cache a
- # path for INSTALL within a source directory, because that will
- # break other packages using the cache if that directory is
- # removed, or if the path is relative.
- INSTALL="$ac_install_sh"
- fi
-fi
-echo "$ac_t""$INSTALL" 1>&6
-
-# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
-# It thinks the first close brace ends the variable substitution.
-test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
-
-test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL_PROGRAM}'
-
-test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
-
-# Extract the first word of "ranlib", so it can be a program name with args.
-set dummy ranlib; ac_word=$2
-echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1071: checking for $ac_word" >&5
-if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- if test -n "$RANLIB"; then
- ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test.
-else
- IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
- ac_dummy="$PATH"
- for ac_dir in $ac_dummy; do
- test -z "$ac_dir" && ac_dir=.
- if test -f $ac_dir/$ac_word; then
- ac_cv_prog_RANLIB="ranlib"
- break
- fi
- done
- IFS="$ac_save_ifs"
- test -z "$ac_cv_prog_RANLIB" && ac_cv_prog_RANLIB=":"
-fi
-fi
-RANLIB="$ac_cv_prog_RANLIB"
-if test -n "$RANLIB"; then
- echo "$ac_t""$RANLIB" 1>&6
-else
- echo "$ac_t""no" 1>&6
-fi
-
-echo $ac_n "checking whether ${MAKE-make} sets \${MAKE}""... $ac_c" 1>&6
-echo "configure:1099: checking whether ${MAKE-make} sets \${MAKE}" >&5
-set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y%./+-%__p_%'`
-if eval "test \"`echo '$''{'ac_cv_prog_make_${ac_make}_set'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- cat > conftestmake <<\EOF
-all:
- @echo 'ac_maketemp="${MAKE}"'
-EOF
-# GNU make sometimes prints "make[1]: Entering...", which would confuse us.
-eval `${MAKE-make} -f conftestmake 2>/dev/null | grep temp=`
-if test -n "$ac_maketemp"; then
- eval ac_cv_prog_make_${ac_make}_set=yes
-else
- eval ac_cv_prog_make_${ac_make}_set=no
-fi
-rm -f conftestmake
-fi
-if eval "test \"`echo '$ac_cv_prog_make_'${ac_make}_set`\" = yes"; then
- echo "$ac_t""yes" 1>&6
- SET_MAKE=
-else
- echo "$ac_t""no" 1>&6
- SET_MAKE="MAKE=${MAKE-make}"
-fi
-
-
-echo $ac_n "checking how to run the C preprocessor""... $ac_c" 1>&6
-echo "configure:1127: checking how to run the C preprocessor" >&5
-# On Suns, sometimes $CPP names a directory.
-if test -n "$CPP" && test -d "$CPP"; then
- CPP=
-fi
-if test -z "$CPP"; then
-if eval "test \"`echo '$''{'ac_cv_prog_CPP'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- # This must be in double quotes, not single quotes, because CPP may get
- # substituted into the Makefile and "${CC-cc}" will confuse make.
- CPP="${CC-cc} -E"
- # On the NeXT, cc -E runs the code through the compiler's parser,
- # not just through cpp.
- cat > conftest.$ac_ext <<EOF
-#line 1142 "configure"
-#include "confdefs.h"
-#include <assert.h>
-Syntax Error
-EOF
-ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:1148: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
-ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
-if test -z "$ac_err"; then
- :
-else
- echo "$ac_err" >&5
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -rf conftest*
- CPP="${CC-cc} -E -traditional-cpp"
- cat > conftest.$ac_ext <<EOF
-#line 1159 "configure"
-#include "confdefs.h"
-#include <assert.h>
-Syntax Error
-EOF
-ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:1165: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
-ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
-if test -z "$ac_err"; then
- :
-else
- echo "$ac_err" >&5
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -rf conftest*
- CPP="${CC-cc} -nologo -E"
- cat > conftest.$ac_ext <<EOF
-#line 1176 "configure"
-#include "confdefs.h"
-#include <assert.h>
-Syntax Error
-EOF
-ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:1182: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
-ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
-if test -z "$ac_err"; then
- :
-else
- echo "$ac_err" >&5
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -rf conftest*
- CPP=/lib/cpp
-fi
-rm -f conftest*
-fi
-rm -f conftest*
-fi
-rm -f conftest*
- ac_cv_prog_CPP="$CPP"
-fi
- CPP="$ac_cv_prog_CPP"
-else
- ac_cv_prog_CPP="$CPP"
-fi
-echo "$ac_t""$CPP" 1>&6
-
-for ac_hdr in stdarg.h stddef.h stdlib.h string.h limits.h unistd.h lib.h
-do
-ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
-echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:1210: checking for $ac_hdr" >&5
-if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- cat > conftest.$ac_ext <<EOF
-#line 1215 "configure"
-#include "confdefs.h"
-#include <$ac_hdr>
-EOF
-ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:1220: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
-ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
-if test -z "$ac_err"; then
- rm -rf conftest*
- eval "ac_cv_header_$ac_safe=yes"
-else
- echo "$ac_err" >&5
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -rf conftest*
- eval "ac_cv_header_$ac_safe=no"
-fi
-rm -f conftest*
-fi
-if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
- echo "$ac_t""yes" 1>&6
- ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'`
- cat >> confdefs.h <<EOF
-#define $ac_tr_hdr 1
-EOF
-
-else
- echo "$ac_t""no" 1>&6
-fi
-done
-
-echo $ac_n "checking for working const""... $ac_c" 1>&6
-echo "configure:1247: checking for working const" >&5
-if eval "test \"`echo '$''{'ac_cv_c_const'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- cat > conftest.$ac_ext <<EOF
-#line 1252 "configure"
-#include "confdefs.h"
-
-int main() {
-
-/* Ultrix mips cc rejects this. */
-typedef int charset[2]; const charset x;
-/* SunOS 4.1.1 cc rejects this. */
-char const *const *ccp;
-char **p;
-/* NEC SVR4.0.2 mips cc rejects this. */
-struct point {int x, y;};
-static struct point const zero = {0,0};
-/* AIX XL C 1.02.0.0 rejects this.
- It does not let you subtract one const X* pointer from another in an arm
- of an if-expression whose if-part is not a constant expression */
-const char *g = "string";
-ccp = &g + (g ? g-g : 0);
-/* HPUX 7.0 cc rejects these. */
-++ccp;
-p = (char**) ccp;
-ccp = (char const *const *) p;
-{ /* SCO 3.2v4 cc rejects this. */
- char *t;
- char const *s = 0 ? (char *) 0 : (char const *) 0;
-
- *t++ = 0;
-}
-{ /* Someone thinks the Sun supposedly-ANSI compiler will reject this. */
- int x[] = {25, 17};
- const int *foo = &x[0];
- ++foo;
-}
-{ /* Sun SC1.0 ANSI compiler rejects this -- but not the above. */
- typedef const int *iptr;
- iptr p = 0;
- ++p;
-}
-{ /* AIX XL C 1.02.0.0 rejects this saying
- "k.c", line 2.27: 1506-025 (S) Operand must be a modifiable lvalue. */
- struct s { int j; const int *ap[3]; };
- struct s *b; b->j = 5;
-}
-{ /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */
- const int foo = 10;
-}
-
-; return 0; }
-EOF
-if { (eval echo configure:1301: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
- rm -rf conftest*
- ac_cv_c_const=yes
-else
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -rf conftest*
- ac_cv_c_const=no
-fi
-rm -f conftest*
-fi
-
-echo "$ac_t""$ac_cv_c_const" 1>&6
-if test $ac_cv_c_const = no; then
- cat >> confdefs.h <<\EOF
-#define const
-EOF
-
-fi
-
-echo $ac_n "checking for ANSI C header files""... $ac_c" 1>&6
-echo "configure:1322: checking for ANSI C header files" >&5
-if eval "test \"`echo '$''{'ac_cv_header_stdc'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- cat > conftest.$ac_ext <<EOF
-#line 1327 "configure"
-#include "confdefs.h"
-#include <stdlib.h>
-#include <stdarg.h>
-#include <string.h>
-#include <float.h>
-EOF
-ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:1335: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
-ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
-if test -z "$ac_err"; then
- rm -rf conftest*
- ac_cv_header_stdc=yes
-else
- echo "$ac_err" >&5
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -rf conftest*
- ac_cv_header_stdc=no
-fi
-rm -f conftest*
-
-if test $ac_cv_header_stdc = yes; then
- # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
-cat > conftest.$ac_ext <<EOF
-#line 1352 "configure"
-#include "confdefs.h"
-#include <string.h>
-EOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
- egrep "memchr" >/dev/null 2>&1; then
- :
-else
- rm -rf conftest*
- ac_cv_header_stdc=no
-fi
-rm -f conftest*
-
-fi
-
-if test $ac_cv_header_stdc = yes; then
- # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
-cat > conftest.$ac_ext <<EOF
-#line 1370 "configure"
-#include "confdefs.h"
-#include <stdlib.h>
-EOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
- egrep "free" >/dev/null 2>&1; then
- :
-else
- rm -rf conftest*
- ac_cv_header_stdc=no
-fi
-rm -f conftest*
-
-fi
-
-if test $ac_cv_header_stdc = yes; then
- # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi.
-if test "$cross_compiling" = yes; then
- :
-else
- cat > conftest.$ac_ext <<EOF
-#line 1391 "configure"
-#include "confdefs.h"
-#include <ctype.h>
-#define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
-#define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c))
-#define XOR(e, f) (((e) && !(f)) || (!(e) && (f)))
-int main () { int i; for (i = 0; i < 256; i++)
-if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) exit(2);
-exit (0); }
-
-EOF
-if { (eval echo configure:1402: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
-then
- :
-else
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -fr conftest*
- ac_cv_header_stdc=no
-fi
-rm -fr conftest*
-fi
-
-fi
-fi
-
-echo "$ac_t""$ac_cv_header_stdc" 1>&6
-if test $ac_cv_header_stdc = yes; then
- cat >> confdefs.h <<\EOF
-#define STDC_HEADERS 1
-EOF
-
-fi
-
-echo $ac_n "checking for size_t""... $ac_c" 1>&6
-echo "configure:1426: checking for size_t" >&5
-if eval "test \"`echo '$''{'ac_cv_type_size_t'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- cat > conftest.$ac_ext <<EOF
-#line 1431 "configure"
-#include "confdefs.h"
-#include <sys/types.h>
-#if STDC_HEADERS
-#include <stdlib.h>
-#include <stddef.h>
-#endif
-EOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
- egrep "(^|[^a-zA-Z_0-9])size_t[^a-zA-Z_0-9]" >/dev/null 2>&1; then
- rm -rf conftest*
- ac_cv_type_size_t=yes
-else
- rm -rf conftest*
- ac_cv_type_size_t=no
-fi
-rm -f conftest*
-
-fi
-echo "$ac_t""$ac_cv_type_size_t" 1>&6
-if test $ac_cv_type_size_t = no; then
- cat >> confdefs.h <<\EOF
-#define size_t unsigned
-EOF
-
-fi
-
-echo $ac_n "checking for ptrdiff_t""... $ac_c" 1>&6
-echo "configure:1459: checking for ptrdiff_t" >&5
-if eval "test \"`echo '$''{'ac_cv_type_ptrdiff_t'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- cat > conftest.$ac_ext <<EOF
-#line 1464 "configure"
-#include "confdefs.h"
-#include <sys/types.h>
-#if STDC_HEADERS
-#include <stdlib.h>
-#include <stddef.h>
-#endif
-EOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
- egrep "(^|[^a-zA-Z_0-9])ptrdiff_t[^a-zA-Z_0-9]" >/dev/null 2>&1; then
- rm -rf conftest*
- ac_cv_type_ptrdiff_t=yes
-else
- rm -rf conftest*
- ac_cv_type_ptrdiff_t=no
-fi
-rm -f conftest*
-
-fi
-echo "$ac_t""$ac_cv_type_ptrdiff_t" 1>&6
-if test $ac_cv_type_ptrdiff_t = no; then
- cat >> confdefs.h <<\EOF
-#define ptrdiff_t size_t
-EOF
-
-fi
-
-
-trap '' 1 2 15
-cat > confcache <<\EOF
-# This file is a shell script that caches the results of configure
-# tests run on this system so they can be shared between configure
-# scripts and configure runs. It is not useful on other systems.
-# If it contains results you don't want to keep, you may remove or edit it.
-#
-# By default, configure uses ./config.cache as the cache file,
-# creating it if it does not exist already. You can give configure
-# the --cache-file=FILE option to use a different cache file; that is
-# what configure does when it calls configure scripts in
-# subdirectories, so they share the cache.
-# Giving --cache-file=/dev/null disables caching, for debugging configure.
-# config.status only pays attention to the cache file if you give it the
-# --recheck option to rerun configure.
-#
-EOF
-# The following way of writing the cache mishandles newlines in values,
-# but we know of no workaround that is simple, portable, and efficient.
-# So, don't put newlines in cache variables' values.
-# Ultrix sh set writes to stderr and can't be redirected directly,
-# and sets the high bit in the cache file unless we assign to the vars.
-(set) 2>&1 |
- case `(ac_space=' '; set | grep ac_space) 2>&1` in
- *ac_space=\ *)
- # `set' does not quote correctly, so add quotes (double-quote substitution
- # turns \\\\ into \\, and sed turns \\ into \).
- sed -n \
- -e "s/'/'\\\\''/g" \
- -e "s/^\\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\\)=\\(.*\\)/\\1=\${\\1='\\2'}/p"
- ;;
- *)
- # `set' quotes correctly as required by POSIX, so do not add quotes.
- sed -n -e 's/^\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\)=\(.*\)/\1=${\1=\2}/p'
- ;;
- esac >> confcache
-if cmp -s $cache_file confcache; then
- :
-else
- if test -w $cache_file; then
- echo "updating cache $cache_file"
- cat confcache > $cache_file
- else
- echo "not updating unwritable cache $cache_file"
- fi
-fi
-rm -f confcache
-
-trap 'rm -fr conftest* confdefs* core core.* *.core $ac_clean_files; exit 1' 1 2 15
-
-test "x$prefix" = xNONE && prefix=$ac_default_prefix
-# Let make expand exec_prefix.
-test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
-
-# Any assignment to VPATH causes Sun make to only execute
-# the first set of double-colon rules, so remove it if not needed.
-# If there is a colon in the path, we need to keep it.
-if test "x$srcdir" = x.; then
- ac_vpsub='/^[ ]*VPATH[ ]*=[^:]*$/d'
-fi
-
-trap 'rm -f $CONFIG_STATUS conftest*; exit 1' 1 2 15
-
-DEFS=-DHAVE_CONFIG_H
-
-# Without the "./", some shells look in PATH for config.status.
-: ${CONFIG_STATUS=./config.status}
-
-echo creating $CONFIG_STATUS
-rm -f $CONFIG_STATUS
-cat > $CONFIG_STATUS <<EOF
-#! /bin/sh
-# Generated automatically by configure.
-# Run this file to recreate the current configuration.
-# This directory was configured as follows,
-# on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
-#
-# $0 $ac_configure_args
-#
-# Compiler output produced by configure, useful for debugging
-# configure, is in ./config.log if it exists.
-
-ac_cs_usage="Usage: $CONFIG_STATUS [--recheck] [--version] [--help]"
-for ac_option
-do
- case "\$ac_option" in
- -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
- echo "running \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion"
- exec \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion ;;
- -version | --version | --versio | --versi | --vers | --ver | --ve | --v)
- echo "$CONFIG_STATUS generated by autoconf version 2.13"
- exit 0 ;;
- -help | --help | --hel | --he | --h)
- echo "\$ac_cs_usage"; exit 0 ;;
- *) echo "\$ac_cs_usage"; exit 1 ;;
- esac
-done
-
-ac_given_srcdir=$srcdir
-ac_given_INSTALL="$INSTALL"
-
-trap 'rm -fr `echo "Makefile src/Makefile doc/Makefile config.h" | sed "s/:[^ ]*//g"` conftest*; exit 1' 1 2 15
-EOF
-cat >> $CONFIG_STATUS <<EOF
-
-# Protect against being on the right side of a sed subst in config.status.
-sed 's/%@/@@/; s/@%/@@/; s/%g\$/@g/; /@g\$/s/[\\\\&%]/\\\\&/g;
- s/@@/%@/; s/@@/@%/; s/@g\$/%g/' > conftest.subs <<\\CEOF
-$ac_vpsub
-$extrasub
-s%@SHELL@%$SHELL%g
-s%@CFLAGS@%$CFLAGS%g
-s%@CPPFLAGS@%$CPPFLAGS%g
-s%@CXXFLAGS@%$CXXFLAGS%g
-s%@FFLAGS@%$FFLAGS%g
-s%@DEFS@%$DEFS%g
-s%@LDFLAGS@%$LDFLAGS%g
-s%@LIBS@%$LIBS%g
-s%@exec_prefix@%$exec_prefix%g
-s%@prefix@%$prefix%g
-s%@program_transform_name@%$program_transform_name%g
-s%@bindir@%$bindir%g
-s%@sbindir@%$sbindir%g
-s%@libexecdir@%$libexecdir%g
-s%@datadir@%$datadir%g
-s%@sysconfdir@%$sysconfdir%g
-s%@sharedstatedir@%$sharedstatedir%g
-s%@localstatedir@%$localstatedir%g
-s%@libdir@%$libdir%g
-s%@includedir@%$includedir%g
-s%@oldincludedir@%$oldincludedir%g
-s%@infodir@%$infodir%g
-s%@mandir@%$mandir%g
-s%@INSTALL_PROGRAM@%$INSTALL_PROGRAM%g
-s%@INSTALL_SCRIPT@%$INSTALL_SCRIPT%g
-s%@INSTALL_DATA@%$INSTALL_DATA%g
-s%@PACKAGE@%$PACKAGE%g
-s%@VERSION@%$VERSION%g
-s%@ACLOCAL@%$ACLOCAL%g
-s%@AUTOCONF@%$AUTOCONF%g
-s%@AUTOMAKE@%$AUTOMAKE%g
-s%@AUTOHEADER@%$AUTOHEADER%g
-s%@MAKEINFO@%$MAKEINFO%g
-s%@SET_MAKE@%$SET_MAKE%g
-s%@CC@%$CC%g
-s%@RANLIB@%$RANLIB%g
-s%@CPP@%$CPP%g
-
-CEOF
-EOF
-
-cat >> $CONFIG_STATUS <<\EOF
-
-# Split the substitutions into bite-sized pieces for seds with
-# small command number limits, like on Digital OSF/1 and HP-UX.
-ac_max_sed_cmds=90 # Maximum number of lines to put in a sed script.
-ac_file=1 # Number of current file.
-ac_beg=1 # First line for current file.
-ac_end=$ac_max_sed_cmds # Line after last line for current file.
-ac_more_lines=:
-ac_sed_cmds=""
-while $ac_more_lines; do
- if test $ac_beg -gt 1; then
- sed "1,${ac_beg}d; ${ac_end}q" conftest.subs > conftest.s$ac_file
- else
- sed "${ac_end}q" conftest.subs > conftest.s$ac_file
- fi
- if test ! -s conftest.s$ac_file; then
- ac_more_lines=false
- rm -f conftest.s$ac_file
- else
- if test -z "$ac_sed_cmds"; then
- ac_sed_cmds="sed -f conftest.s$ac_file"
- else
- ac_sed_cmds="$ac_sed_cmds | sed -f conftest.s$ac_file"
- fi
- ac_file=`expr $ac_file + 1`
- ac_beg=$ac_end
- ac_end=`expr $ac_end + $ac_max_sed_cmds`
- fi
-done
-if test -z "$ac_sed_cmds"; then
- ac_sed_cmds=cat
-fi
-EOF
-
-cat >> $CONFIG_STATUS <<EOF
-
-CONFIG_FILES=\${CONFIG_FILES-"Makefile src/Makefile doc/Makefile"}
-EOF
-cat >> $CONFIG_STATUS <<\EOF
-for ac_file in .. $CONFIG_FILES; do if test "x$ac_file" != x..; then
- # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
- case "$ac_file" in
- *:*) ac_file_in=`echo "$ac_file"|sed 's%[^:]*:%%'`
- ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;;
- *) ac_file_in="${ac_file}.in" ;;
- esac
-
- # Adjust a relative srcdir, top_srcdir, and INSTALL for subdirectories.
-
- # Remove last slash and all that follows it. Not all systems have dirname.
- ac_dir=`echo $ac_file|sed 's%/[^/][^/]*$%%'`
- if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then
- # The file is in a subdirectory.
- test ! -d "$ac_dir" && mkdir "$ac_dir"
- ac_dir_suffix="/`echo $ac_dir|sed 's%^\./%%'`"
- # A "../" for each directory in $ac_dir_suffix.
- ac_dots=`echo $ac_dir_suffix|sed 's%/[^/]*%../%g'`
- else
- ac_dir_suffix= ac_dots=
- fi
-
- case "$ac_given_srcdir" in
- .) srcdir=.
- if test -z "$ac_dots"; then top_srcdir=.
- else top_srcdir=`echo $ac_dots|sed 's%/$%%'`; fi ;;
- /*) srcdir="$ac_given_srcdir$ac_dir_suffix"; top_srcdir="$ac_given_srcdir" ;;
- *) # Relative path.
- srcdir="$ac_dots$ac_given_srcdir$ac_dir_suffix"
- top_srcdir="$ac_dots$ac_given_srcdir" ;;
- esac
-
- case "$ac_given_INSTALL" in
- [/$]*) INSTALL="$ac_given_INSTALL" ;;
- *) INSTALL="$ac_dots$ac_given_INSTALL" ;;
- esac
-
- echo creating "$ac_file"
- rm -f "$ac_file"
- configure_input="Generated automatically from `echo $ac_file_in|sed 's%.*/%%'` by configure."
- case "$ac_file" in
- *Makefile*) ac_comsub="1i\\
-# $configure_input" ;;
- *) ac_comsub= ;;
- esac
-
- ac_file_inputs=`echo $ac_file_in|sed -e "s%^%$ac_given_srcdir/%" -e "s%:% $ac_given_srcdir/%g"`
- sed -e "$ac_comsub
-s%@configure_input@%$configure_input%g
-s%@srcdir@%$srcdir%g
-s%@top_srcdir@%$top_srcdir%g
-s%@INSTALL@%$INSTALL%g
-" $ac_file_inputs | (eval "$ac_sed_cmds") > $ac_file
-fi; done
-rm -f conftest.s*
-
-# These sed commands are passed to sed as "A NAME B NAME C VALUE D", where
-# NAME is the cpp macro being defined and VALUE is the value it is being given.
-#
-# ac_d sets the value in "#define NAME VALUE" lines.
-ac_dA='s%^\([ ]*\)#\([ ]*define[ ][ ]*\)'
-ac_dB='\([ ][ ]*\)[^ ]*%\1#\2'
-ac_dC='\3'
-ac_dD='%g'
-# ac_u turns "#undef NAME" with trailing blanks into "#define NAME VALUE".
-ac_uA='s%^\([ ]*\)#\([ ]*\)undef\([ ][ ]*\)'
-ac_uB='\([ ]\)%\1#\2define\3'
-ac_uC=' '
-ac_uD='\4%g'
-# ac_e turns "#undef NAME" without trailing blanks into "#define NAME VALUE".
-ac_eA='s%^\([ ]*\)#\([ ]*\)undef\([ ][ ]*\)'
-ac_eB='$%\1#\2define\3'
-ac_eC=' '
-ac_eD='%g'
-
-if test "${CONFIG_HEADERS+set}" != set; then
-EOF
-cat >> $CONFIG_STATUS <<EOF
- CONFIG_HEADERS="config.h"
-EOF
-cat >> $CONFIG_STATUS <<\EOF
-fi
-for ac_file in .. $CONFIG_HEADERS; do if test "x$ac_file" != x..; then
- # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
- case "$ac_file" in
- *:*) ac_file_in=`echo "$ac_file"|sed 's%[^:]*:%%'`
- ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;;
- *) ac_file_in="${ac_file}.in" ;;
- esac
-
- echo creating $ac_file
-
- rm -f conftest.frag conftest.in conftest.out
- ac_file_inputs=`echo $ac_file_in|sed -e "s%^%$ac_given_srcdir/%" -e "s%:% $ac_given_srcdir/%g"`
- cat $ac_file_inputs > conftest.in
-
-EOF
-
-# Transform confdefs.h into a sed script conftest.vals that substitutes
-# the proper values into config.h.in to produce config.h. And first:
-# Protect against being on the right side of a sed subst in config.status.
-# Protect against being in an unquoted here document in config.status.
-rm -f conftest.vals
-cat > conftest.hdr <<\EOF
-s/[\\&%]/\\&/g
-s%[\\$`]%\\&%g
-s%#define \([A-Za-z_][A-Za-z0-9_]*\) *\(.*\)%${ac_dA}\1${ac_dB}\1${ac_dC}\2${ac_dD}%gp
-s%ac_d%ac_u%gp
-s%ac_u%ac_e%gp
-EOF
-sed -n -f conftest.hdr confdefs.h > conftest.vals
-rm -f conftest.hdr
-
-# This sed command replaces #undef with comments. This is necessary, for
-# example, in the case of _POSIX_SOURCE, which is predefined and required
-# on some systems where configure will not decide to define it.
-cat >> conftest.vals <<\EOF
-s%^[ ]*#[ ]*undef[ ][ ]*[a-zA-Z_][a-zA-Z_0-9]*%/* & */%
-EOF
-
-# Break up conftest.vals because some shells have a limit on
-# the size of here documents, and old seds have small limits too.
-
-rm -f conftest.tail
-while :
-do
- ac_lines=`grep -c . conftest.vals`
- # grep -c gives empty output for an empty file on some AIX systems.
- if test -z "$ac_lines" || test "$ac_lines" -eq 0; then break; fi
- # Write a limited-size here document to conftest.frag.
- echo ' cat > conftest.frag <<CEOF' >> $CONFIG_STATUS
- sed ${ac_max_here_lines}q conftest.vals >> $CONFIG_STATUS
- echo 'CEOF
- sed -f conftest.frag conftest.in > conftest.out
- rm -f conftest.in
- mv conftest.out conftest.in
-' >> $CONFIG_STATUS
- sed 1,${ac_max_here_lines}d conftest.vals > conftest.tail
- rm -f conftest.vals
- mv conftest.tail conftest.vals
-done
-rm -f conftest.vals
-
-cat >> $CONFIG_STATUS <<\EOF
- rm -f conftest.frag conftest.h
- echo "/* $ac_file. Generated automatically by configure. */" > conftest.h
- cat conftest.in >> conftest.h
- rm -f conftest.in
- if cmp -s $ac_file conftest.h 2>/dev/null; then
- echo "$ac_file is unchanged"
- rm -f conftest.h
- else
- # Remove last slash and all that follows it. Not all systems have dirname.
- ac_dir=`echo $ac_file|sed 's%/[^/][^/]*$%%'`
- if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then
- # The file is in a subdirectory.
- test ! -d "$ac_dir" && mkdir "$ac_dir"
- fi
- rm -f $ac_file
- mv conftest.h $ac_file
- fi
-fi; done
-
-EOF
-cat >> $CONFIG_STATUS <<EOF
-
-
-EOF
-cat >> $CONFIG_STATUS <<\EOF
-test -z "$CONFIG_HEADERS" || echo timestamp > stamp-h
-
-exit 0
-EOF
-chmod +x $CONFIG_STATUS
-rm -fr confdefs* $ac_clean_files
-test "$no_create" = yes || ${CONFIG_SHELL-/bin/sh} $CONFIG_STATUS || exit 1
-
-
diff --git a/ext/bcmath/libbcmath/configure.in b/ext/bcmath/libbcmath/configure.in
deleted file mode 100644
index 3da89e949f..0000000000
--- a/ext/bcmath/libbcmath/configure.in
+++ /dev/null
@@ -1,18 +0,0 @@
-dnl Process this file with autoconf to produce a configure script.
-AC_INIT(doc/bcmath.1)
-AM_INIT_AUTOMAKE("bcmath", "0.2")
-AM_CONFIG_HEADER(config.h)
-
-AC_PROG_CC
-
-AC_PROG_INSTALL
-AC_PROG_RANLIB
-AC_PROG_MAKE_SET
-
-AC_CHECK_HEADERS(stdarg.h stddef.h stdlib.h string.h limits.h unistd.h lib.h)
-AC_C_CONST
-AC_TYPE_SIZE_T
-AC_CHECK_TYPE(ptrdiff_t, size_t)
-
-AC_OUTPUT(Makefile src/Makefile doc/Makefile)
-
diff --git a/ext/bcmath/libbcmath/install-sh b/ext/bcmath/libbcmath/install-sh
deleted file mode 100644
index ab74c882e9..0000000000
--- a/ext/bcmath/libbcmath/install-sh
+++ /dev/null
@@ -1,238 +0,0 @@
-#!/bin/sh
-#
-# install - install a program, script, or datafile
-# This comes from X11R5.
-#
-# Calling this script install-sh is preferred over install.sh, to prevent
-# `make' implicit rules from creating a file called install from it
-# when there is no Makefile.
-#
-# This script is compatible with the BSD install script, but was written
-# from scratch.
-#
-
-
-# set DOITPROG to echo to test this script
-
-# Don't use :- since 4.3BSD and earlier shells don't like it.
-doit="${DOITPROG-}"
-
-
-# put in absolute paths if you don't have them in your path; or use env. vars.
-
-mvprog="${MVPROG-mv}"
-cpprog="${CPPROG-cp}"
-chmodprog="${CHMODPROG-chmod}"
-chownprog="${CHOWNPROG-chown}"
-chgrpprog="${CHGRPPROG-chgrp}"
-stripprog="${STRIPPROG-strip}"
-rmprog="${RMPROG-rm}"
-mkdirprog="${MKDIRPROG-mkdir}"
-
-tranformbasename=""
-transform_arg=""
-instcmd="$mvprog"
-chmodcmd="$chmodprog 0755"
-chowncmd=""
-chgrpcmd=""
-stripcmd=""
-rmcmd="$rmprog -f"
-mvcmd="$mvprog"
-src=""
-dst=""
-dir_arg=""
-
-while [ x"$1" != x ]; do
- case $1 in
- -c) instcmd="$cpprog"
- shift
- continue;;
-
- -d) dir_arg=true
- shift
- continue;;
-
- -m) chmodcmd="$chmodprog $2"
- shift
- shift
- continue;;
-
- -o) chowncmd="$chownprog $2"
- shift
- shift
- continue;;
-
- -g) chgrpcmd="$chgrpprog $2"
- shift
- shift
- continue;;
-
- -s) stripcmd="$stripprog"
- shift
- continue;;
-
- -t=*) transformarg=`echo $1 | sed 's/-t=//'`
- shift
- continue;;
-
- -b=*) transformbasename=`echo $1 | sed 's/-b=//'`
- shift
- continue;;
-
- *) if [ x"$src" = x ]
- then
- src=$1
- else
- # this colon is to work around a 386BSD /bin/sh bug
- :
- dst=$1
- fi
- shift
- continue;;
- esac
-done
-
-if [ x"$src" = x ]
-then
- echo "install: no input file specified"
- exit 1
-else
- true
-fi
-
-if [ x"$dir_arg" != x ]; then
- dst=$src
- src=""
-
- if [ -d $dst ]; then
- instcmd=:
- else
- instcmd=mkdir
- fi
-else
-
-# Waiting for this to be detected by the "$instcmd $src $dsttmp" command
-# might cause directories to be created, which would be especially bad
-# if $src (and thus $dsttmp) contains '*'.
-
- if [ -f $src -o -d $src ]
- then
- true
- else
- echo "install: $src does not exist"
- exit 1
- fi
-
- if [ x"$dst" = x ]
- then
- echo "install: no destination specified"
- exit 1
- else
- true
- fi
-
-# If destination is a directory, append the input filename; if your system
-# does not like double slashes in filenames, you may need to add some logic
-
- if [ -d $dst ]
- then
- dst="$dst"/`basename $src`
- else
- true
- fi
-fi
-
-## this sed command emulates the dirname command
-dstdir=`echo $dst | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'`
-
-# Make sure that the destination directory exists.
-# this part is taken from Noah Friedman's mkinstalldirs script
-
-# Skip lots of stat calls in the usual case.
-if [ ! -d "$dstdir" ]; then
-defaultIFS='
-'
-IFS="${IFS-${defaultIFS}}"
-
-oIFS="${IFS}"
-# Some sh's can't handle IFS=/ for some reason.
-IFS='%'
-set - `echo ${dstdir} | sed -e 's@/@%@g' -e 's@^%@/@'`
-IFS="${oIFS}"
-
-pathcomp=''
-
-while [ $# -ne 0 ] ; do
- pathcomp="${pathcomp}${1}"
- shift
-
- if [ ! -d "${pathcomp}" ] ;
- then
- $mkdirprog "${pathcomp}"
- else
- true
- fi
-
- pathcomp="${pathcomp}/"
-done
-fi
-
-if [ x"$dir_arg" != x ]
-then
- $doit $instcmd $dst &&
-
- if [ x"$chowncmd" != x ]; then $doit $chowncmd $dst; else true ; fi &&
- if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dst; else true ; fi &&
- if [ x"$stripcmd" != x ]; then $doit $stripcmd $dst; else true ; fi &&
- if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dst; else true ; fi
-else
-
-# If we're going to rename the final executable, determine the name now.
-
- if [ x"$transformarg" = x ]
- then
- dstfile=`basename $dst`
- else
- dstfile=`basename $dst $transformbasename |
- sed $transformarg`$transformbasename
- fi
-
-# don't allow the sed command to completely eliminate the filename
-
- if [ x"$dstfile" = x ]
- then
- dstfile=`basename $dst`
- else
- true
- fi
-
-# Make a temp file name in the proper directory.
-
- dsttmp=$dstdir/#inst.$$#
-
-# Move or copy the file name to the temp name
-
- $doit $instcmd $src $dsttmp &&
-
- trap "rm -f ${dsttmp}" 0 &&
-
-# and set any options; do chmod last to preserve setuid bits
-
-# If any of these fail, we abort the whole thing. If we want to
-# ignore errors from any of these, just make sure not to ignore
-# errors from the above "$doit $instcmd $src $dsttmp" command.
-
- if [ x"$chowncmd" != x ]; then $doit $chowncmd $dsttmp; else true;fi &&
- if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dsttmp; else true;fi &&
- if [ x"$stripcmd" != x ]; then $doit $stripcmd $dsttmp; else true;fi &&
- if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dsttmp; else true;fi &&
-
-# Now rename the file to the real destination.
-
- $doit $rmcmd -f $dstdir/$dstfile &&
- $doit $mvcmd $dsttmp $dstdir/$dstfile
-
-fi &&
-
-
-exit 0
diff --git a/ext/bcmath/libbcmath/missing b/ext/bcmath/libbcmath/missing
deleted file mode 100644
index e4b838ca92..0000000000
--- a/ext/bcmath/libbcmath/missing
+++ /dev/null
@@ -1,134 +0,0 @@
-#! /bin/sh
-# Common stub for a few missing GNU programs while installing.
-# Copyright (C) 1996, 1997 Free Software Foundation, Inc.
-# Franc,ois Pinard <pinard@iro.umontreal.ca>, 1996.
-
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2, or (at your option)
-# any later version.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
-# 02111-1307, USA.
-
-if test $# -eq 0; then
- echo 1>&2 "Try \`$0 --help' for more information"
- exit 1
-fi
-
-case "$1" in
-
- -h|--h|--he|--hel|--help)
- echo "\
-$0 [OPTION]... PROGRAM [ARGUMENT]...
-
-Handle \`PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an
-error status if there is no known handling for PROGRAM.
-
-Options:
- -h, --help display this help and exit
- -v, --version output version information and exit
-
-Supported PROGRAM values:
- aclocal touch file \`aclocal.m4'
- autoconf touch file \`configure'
- autoheader touch file \`config.h.in'
- automake touch all \`Makefile.in' files
- bison touch file \`y.tab.c'
- makeinfo touch the output file
- yacc touch file \`y.tab.c'"
- ;;
-
- -v|--v|--ve|--ver|--vers|--versi|--versio|--version)
- echo "missing - GNU libit 0.0"
- ;;
-
- -*)
- echo 1>&2 "$0: Unknown \`$1' option"
- echo 1>&2 "Try \`$0 --help' for more information"
- exit 1
- ;;
-
- aclocal)
- echo 1>&2 "\
-WARNING: \`$1' is missing on your system. It should be needed only if
- you modified \`acinclude.m4' or \`configure.in'. You might want
- to install the \`Automake' and \`Perl' packages. Grab them from
- any GNU archive site."
- touch aclocal.m4
- ;;
-
- autoconf)
- echo 1>&2 "\
-WARNING: \`$1' is missing on your system. It should be needed only if
- you modified \`configure.in'. You might want to install the
- \`Autoconf' and \`GNU m4' packages. Grab them from any GNU
- archive site."
- touch configure
- ;;
-
- autoheader)
- echo 1>&2 "\
-WARNING: \`$1' is missing on your system. It should be needed only if
- you modified \`acconfig.h' or \`configure.in'. You might want
- to install the \`Autoconf' and \`GNU m4' packages. Grab them
- from any GNU archive site."
- touch config.h.in
- ;;
-
- automake)
- echo 1>&2 "\
-WARNING: \`$1' is missing on your system. It should be needed only if
- you modified \`Makefile.am', \`acinclude.m4' or \`configure.in'.
- You might want to install the \`Automake' and \`Perl' packages.
- Grab them from any GNU archive site."
- find . -type f -name Makefile.am -print \
- | sed 's/^\(.*\).am$/touch \1.in/' \
- | sh
- ;;
-
- bison|yacc)
- echo 1>&2 "\
-WARNING: \`$1' is missing on your system. It should be needed only if
- your modified any \`.y' file. For being effective, your
- modifications might require the \`Bison' package. Grab it from
- any GNU archive site."
- touch y.tab.c
- ;;
-
- makeinfo)
- echo 1>&2 "\
-WARNING: \`$1' is missing on your system. It should be needed only if
- you modified a \`.texi' or \`.texinfo' file, or any other file
- indirectly affecting the aspect of the manual. The spurious
- call might also be the consequence of using a buggy \`make' (AIX,
- DU, IRIX). You might want to install the \`Texinfo' package or
- the \`GNU make' package. Grab either from any GNU archive site."
- file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'`
- if test -z "$file"; then
- file=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'`
- file=`sed -n '/^@setfilename/ { s/.* \([^ ]*\) *$/\1/; p; q; }' $file`
- fi
- touch $file
- ;;
-
- *)
- echo 1>&2 "\
-WARNING: \`$1' is needed, and you do not seem to have it handy on your
- system. You might have modified some files without having the
- proper tools for further handling them. Check the \`README' file,
- it often tells you about the needed prerequirements for installing
- this package. You may also peek at any GNU archive site, in case
- some other package would contain this missing \`$1' program."
- exit 1
- ;;
-esac
-
-exit 0
diff --git a/ext/bcmath/libbcmath/mkinstalldirs b/ext/bcmath/libbcmath/mkinstalldirs
deleted file mode 100644
index cc8783edce..0000000000
--- a/ext/bcmath/libbcmath/mkinstalldirs
+++ /dev/null
@@ -1,36 +0,0 @@
-#! /bin/sh
-# mkinstalldirs --- make directory hierarchy
-# Author: Noah Friedman <friedman@prep.ai.mit.edu>
-# Created: 1993-05-16
-# Last modified: 1994-03-25
-# Public domain
-
-errstatus=0
-
-for file in ${1+"$@"} ; do
- set fnord `echo ":$file" | sed -ne 's/^:\//#/;s/^://;s/\// /g;s/^#/\//;p'`
- shift
-
- pathcomp=
- for d in ${1+"$@"} ; do
- pathcomp="$pathcomp$d"
- case "$pathcomp" in
- -* ) pathcomp=./$pathcomp ;;
- esac
-
- if test ! -d "$pathcomp"; then
- echo "mkdir $pathcomp" 1>&2
- mkdir "$pathcomp" > /dev/null 2>&1 || lasterr=$?
- fi
-
- if test ! -d "$pathcomp"; then
- errstatus=$lasterr
- fi
-
- pathcomp="$pathcomp/"
- done
-done
-
-exit $errstatus
-
-# mkinstalldirs ends here
diff --git a/ext/bcmath/libbcmath/src/Makefile.am b/ext/bcmath/libbcmath/src/Makefile.am
deleted file mode 100644
index fab37d785e..0000000000
--- a/ext/bcmath/libbcmath/src/Makefile.am
+++ /dev/null
@@ -1,22 +0,0 @@
-# Makefile for bcmath library
-
-lib_LIBRARIES = libbcmath.a
-
-include_HEADERS = bcmath.h
-
-libbcmath_a_SOURCES= add.c compare.c debug.c div.c divmod.c doaddsub.c \
- init.c int2num.c nearzero.c neg.c num2long.c num2str.c output.c \
- raise.c raisemod.c recmul.c rmzero.c sqrt.c str2num.c sub.c zero.c \
- outofmem.c rt.c
-
-INCLUDES = -I$(srcdir) -I..
-
-CFLAGS = @CFLAGS@
-CPPFLAGS = $(INCLUDES) -Wall
-
-MAINTAINERCLEANFILES= Makefile.in $(libbcmath_a_SOURCES) private.h bcmath.h
-
-all: $(bin_LIBRARIES)
-
-clean:
- rm -f $(OBJS) $(LIB) *~
diff --git a/ext/bcmath/libbcmath/src/add.c b/ext/bcmath/libbcmath/src/add.c
deleted file mode 100644
index 3b09af22b2..0000000000
--- a/ext/bcmath/libbcmath/src/add.c
+++ /dev/null
@@ -1,88 +0,0 @@
-/* add.c: bcmath library file. */
-/*
- Copyright (C) 1991, 1992, 1993, 1994, 1997 Free Software Foundation, Inc.
- Copyright (C) 2000 Philip A. Nelson
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2 of the License, or (at your option) any later version.
-
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details. (COPYING.LIB)
-
- You should have received a copy of the GNU Lesser General Public
- License along with this library; if not, write to:
-
- The Free Software Foundation, Inc.
- 59 Temple Place, Suite 330
- Boston, MA 02111-1307 USA.
-
- You may contact the author by:
- e-mail: philnelson@acm.org
- us-mail: Philip A. Nelson
- Computer Science Department, 9062
- Western Washington University
- Bellingham, WA 98226-9062
-
-*************************************************************************/
-
-#include <config.h>
-#include <stdio.h>
-#include <assert.h>
-#include <stdlib.h>
-#include <ctype.h>
-#include <stdarg.h>
-#include "bcmath.h"
-#include "private.h"
-
-
-/* Here is the full add routine that takes care of negative numbers.
- N1 is added to N2 and the result placed into RESULT. SCALE_MIN
- is the minimum scale for the result. */
-
-void
-bc_add (n1, n2, result, scale_min)
- bc_num n1, n2, *result;
- int scale_min;
-{
- bc_num sum = NULL;
- int cmp_res;
- int res_scale;
-
- if (n1->n_sign == n2->n_sign)
- {
- sum = _bc_do_add (n1, n2, scale_min);
- sum->n_sign = n1->n_sign;
- }
- else
- {
- /* subtraction must be done. */
- cmp_res = _bc_do_compare (n1, n2, FALSE, FALSE); /* Compare magnitudes. */
- switch (cmp_res)
- {
- case -1:
- /* n1 is less than n2, subtract n1 from n2. */
- sum = _bc_do_sub (n2, n1, scale_min);
- sum->n_sign = n2->n_sign;
- break;
- case 0:
- /* They are equal! return zero with the correct scale! */
- res_scale = MAX (scale_min, MAX(n1->n_scale, n2->n_scale));
- sum = bc_new_num (1, res_scale);
- memset (sum->n_value, 0, res_scale+1);
- break;
- case 1:
- /* n2 is less than n1, subtract n2 from n1. */
- sum = _bc_do_sub (n1, n2, scale_min);
- sum->n_sign = n1->n_sign;
- }
- }
-
- /* Clean up and return. */
- bc_free_num (result);
- *result = sum;
-}
-
diff --git a/ext/bcmath/libbcmath/src/bcmath.h b/ext/bcmath/libbcmath/src/bcmath.h
deleted file mode 100644
index ce68f0da4e..0000000000
--- a/ext/bcmath/libbcmath/src/bcmath.h
+++ /dev/null
@@ -1,162 +0,0 @@
-/* bcmath.h: bcmath library header. */
-/*
- Copyright (C) 1991, 1992, 1993, 1994, 1997 Free Software Foundation, Inc.
- Copyright (C) 2000 Philip A. Nelson
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2 of the License, or (at your option) any later version.
-
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details. (COPYING.LIB)
-
- You should have received a copy of the GNU Lesser General Public
- License along with this library; if not, write to:
-
- The Free Software Foundation, Inc.
- 59 Temple Place, Suite 330
- Boston, MA 02111-1307 USA.
-
- You may contact the author by:
- e-mail: philnelson@acm.org
- us-mail: Philip A. Nelson
- Computer Science Department, 9062
- Western Washington University
- Bellingham, WA 98226-9062
-
-*************************************************************************/
-
-#ifndef _BCMATH_H_
-#define _BCMATH_H_
-
-typedef enum {PLUS, MINUS} sign;
-
-typedef struct bc_struct *bc_num;
-
-typedef struct bc_struct
- {
- sign n_sign;
- int n_len; /* The number of digits before the decimal point. */
- int n_scale; /* The number of digits after the decimal point. */
- int n_refs; /* The number of pointers to this number. */
- bc_num n_next; /* Linked list for available list. */
- char *n_ptr; /* The pointer to the actual storage.
- If NULL, n_value points to the inside of
- another number (bc_multiply...) and should
- not be "freed." */
- char *n_value; /* The number. Not zero char terminated.
- May not point to the same place as n_ptr as
- in the case of leading zeros generated. */
- } bc_struct;
-
-#ifdef HAVE_CONFIG_H
-#include "../../config.h"
-#endif
-
-#include "php.h"
-#include "../../php_bcmath.h"
-
-/* The base used in storing the numbers in n_value above.
- Currently this MUST be 10. */
-
-#define BASE 10
-
-/* Some useful macros and constants. */
-
-#define CH_VAL(c) (c - '0')
-#define BCD_CHAR(d) (d + '0')
-
-#ifdef MIN
-#undef MIN
-#undef MAX
-#endif
-#define MAX(a, b) ((a)>(b)?(a):(b))
-#define MIN(a, b) ((a)>(b)?(b):(a))
-#define ODD(a) ((a)&1)
-
-#ifndef TRUE
-#define TRUE 1
-#define FALSE 0
-#endif
-
-#ifndef LONG_MAX
-#define LONG_MAX 0x7ffffff
-#endif
-
-
-/* Function Prototypes */
-
-/* Define the _PROTOTYPE macro if it is needed. */
-
-#ifndef _PROTOTYPE
-#ifdef __STDC__
-#define _PROTOTYPE(func, args) func args
-#else
-#define _PROTOTYPE(func, args) func()
-#endif
-#endif
-
-_PROTOTYPE(void bc_init_numbers, (TSRMLS_D));
-
-_PROTOTYPE(bc_num _bc_new_num_ex, (int length, int scale, int persistent));
-
-_PROTOTYPE(void _bc_free_num_ex, (bc_num *num, int persistent));
-
-_PROTOTYPE(bc_num bc_copy_num, (bc_num num));
-
-_PROTOTYPE(void bc_init_num, (bc_num *num TSRMLS_DC));
-
-_PROTOTYPE(void bc_str2num, (bc_num *num, char *str, int scale TSRMLS_DC));
-
-_PROTOTYPE(char *bc_num2str, (bc_num num));
-
-_PROTOTYPE(void bc_int2num, (bc_num *num, int val));
-
-_PROTOTYPE(long bc_num2long, (bc_num num));
-
-_PROTOTYPE(int bc_compare, (bc_num n1, bc_num n2));
-
-_PROTOTYPE(char bc_is_zero, (bc_num num TSRMLS_DC));
-
-_PROTOTYPE(char bc_is_near_zero, (bc_num num, int scale));
-
-_PROTOTYPE(char bc_is_neg, (bc_num num));
-
-_PROTOTYPE(void bc_add, (bc_num n1, bc_num n2, bc_num *result, int scale_min));
-
-_PROTOTYPE(void bc_sub, (bc_num n1, bc_num n2, bc_num *result, int scale_min));
-
-_PROTOTYPE(void bc_multiply, (bc_num n1, bc_num n2, bc_num *prod, int scale TSRMLS_DC));
-
-_PROTOTYPE(int bc_divide, (bc_num n1, bc_num n2, bc_num *quot, int scale TSRMLS_DC));
-
-_PROTOTYPE(int bc_modulo, (bc_num num1, bc_num num2, bc_num *result,
- int scale TSRMLS_DC));
-
-_PROTOTYPE(int bc_divmod, (bc_num num1, bc_num num2, bc_num *quot,
- bc_num *rem, int scale TSRMLS_DC));
-
-_PROTOTYPE(int bc_raisemod, (bc_num base, bc_num expo, bc_num mod,
- bc_num *result, int scale TSRMLS_DC));
-
-_PROTOTYPE(void bc_raise, (bc_num num1, bc_num num2, bc_num *result,
- int scale TSRMLS_DC));
-
-_PROTOTYPE(int bc_sqrt, (bc_num *num, int scale TSRMLS_DC));
-
-_PROTOTYPE(void bc_out_num, (bc_num num, int o_base, void (* out_char)(int),
- int leading_zero TSRMLS_DC));
-
-/* Prototypes needed for external utility routines. */
-
-_PROTOTYPE(void bc_rt_warn, (char *mesg ,...));
-_PROTOTYPE(void bc_rt_error, (char *mesg ,...));
-_PROTOTYPE(void bc_out_of_memory, (void));
-
-#define bc_new_num(length, scale) _bc_new_num_ex((length), (scale), 0)
-#define bc_free_num(num) _bc_free_num_ex((num), 0)
-
-#endif
diff --git a/ext/bcmath/libbcmath/src/compare.c b/ext/bcmath/libbcmath/src/compare.c
deleted file mode 100644
index 2f094a6917..0000000000
--- a/ext/bcmath/libbcmath/src/compare.c
+++ /dev/null
@@ -1,161 +0,0 @@
-/* compare.c: bcmath library file. */
-/*
- Copyright (C) 1991, 1992, 1993, 1994, 1997 Free Software Foundation, Inc.
- Copyright (C) 2000 Philip A. Nelson
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2 of the License, or (at your option) any later version.
-
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details. (COPYING.LIB)
-
- You should have received a copy of the GNU Lesser General Public
- License along with this library; if not, write to:
-
- The Free Software Foundation, Inc.
- 59 Temple Place, Suite 330
- Boston, MA 02111-1307 USA.
-
- You may contact the author by:
- e-mail: philnelson@acm.org
- us-mail: Philip A. Nelson
- Computer Science Department, 9062
- Western Washington University
- Bellingham, WA 98226-9062
-
-*************************************************************************/
-
-#include <config.h>
-#include <stdio.h>
-#include <assert.h>
-#include <stdlib.h>
-#include <ctype.h>
-#include <stdarg.h>
-#include "bcmath.h"
-#include "private.h"
-
-
-/* Compare two bc numbers. Return value is 0 if equal, -1 if N1 is less
- than N2 and +1 if N1 is greater than N2. If USE_SIGN is false, just
- compare the magnitudes. */
-
- int
-_bc_do_compare (n1, n2, use_sign, ignore_last)
- bc_num n1, n2;
- int use_sign;
- int ignore_last;
-{
- char *n1ptr, *n2ptr;
- int count;
-
- /* First, compare signs. */
- if (use_sign && n1->n_sign != n2->n_sign)
- {
- if (n1->n_sign == PLUS)
- return (1); /* Positive N1 > Negative N2 */
- else
- return (-1); /* Negative N1 < Positive N1 */
- }
-
- /* Now compare the magnitude. */
- if (n1->n_len != n2->n_len)
- {
- if (n1->n_len > n2->n_len)
- {
- /* Magnitude of n1 > n2. */
- if (!use_sign || n1->n_sign == PLUS)
- return (1);
- else
- return (-1);
- }
- else
- {
- /* Magnitude of n1 < n2. */
- if (!use_sign || n1->n_sign == PLUS)
- return (-1);
- else
- return (1);
- }
- }
-
- /* If we get here, they have the same number of integer digits.
- check the integer part and the equal length part of the fraction. */
- count = n1->n_len + MIN (n1->n_scale, n2->n_scale);
- n1ptr = n1->n_value;
- n2ptr = n2->n_value;
-
- while ((count > 0) && (*n1ptr == *n2ptr))
- {
- n1ptr++;
- n2ptr++;
- count--;
- }
- if (ignore_last && count == 1 && n1->n_scale == n2->n_scale)
- return (0);
- if (count != 0)
- {
- if (*n1ptr > *n2ptr)
- {
- /* Magnitude of n1 > n2. */
- if (!use_sign || n1->n_sign == PLUS)
- return (1);
- else
- return (-1);
- }
- else
- {
- /* Magnitude of n1 < n2. */
- if (!use_sign || n1->n_sign == PLUS)
- return (-1);
- else
- return (1);
- }
- }
-
- /* They are equal up to the last part of the equal part of the fraction. */
- if (n1->n_scale != n2->n_scale)
- {
- if (n1->n_scale > n2->n_scale)
- {
- for (count = n1->n_scale-n2->n_scale; count>0; count--)
- if (*n1ptr++ != 0)
- {
- /* Magnitude of n1 > n2. */
- if (!use_sign || n1->n_sign == PLUS)
- return (1);
- else
- return (-1);
- }
- }
- else
- {
- for (count = n2->n_scale-n1->n_scale; count>0; count--)
- if (*n2ptr++ != 0)
- {
- /* Magnitude of n1 < n2. */
- if (!use_sign || n1->n_sign == PLUS)
- return (-1);
- else
- return (1);
- }
- }
- }
-
- /* They must be equal! */
- return (0);
-}
-
-
-/* This is the "user callable" routine to compare numbers N1 and N2. */
-
-int
-bc_compare (n1, n2)
- bc_num n1, n2;
-{
- return _bc_do_compare (n1, n2, TRUE, FALSE);
-}
-
diff --git a/ext/bcmath/libbcmath/src/config.h b/ext/bcmath/libbcmath/src/config.h
deleted file mode 100644
index 89e3e43b69..0000000000
--- a/ext/bcmath/libbcmath/src/config.h
+++ /dev/null
@@ -1,12 +0,0 @@
-#if PHP_WIN32
-#include "../../../../main/config.w32.h"
-#elif defined(NETWARE)
-#include "config.nw.h"
-#else
-#include "php_config.h"
-#endif
-
-#include "php.h"
-#include <string.h>
-#include "zend.h"
-#include "zend_alloc.h"
diff --git a/ext/bcmath/libbcmath/src/debug.c b/ext/bcmath/libbcmath/src/debug.c
deleted file mode 100644
index 52e4e044d5..0000000000
--- a/ext/bcmath/libbcmath/src/debug.c
+++ /dev/null
@@ -1,69 +0,0 @@
-/* debug.c: bcmath library file. */
-/*
- Copyright (C) 1991, 1992, 1993, 1994, 1997 Free Software Foundation, Inc.
- Copyright (C) 2000 Philip A. Nelson
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2 of the License, or (at your option) any later version.
-
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details. (COPYING.LIB)
-
- You should have received a copy of the GNU Lesser General Public
- License along with this library; if not, write to:
-
- The Free Software Foundation, Inc.
- 59 Temple Place, Suite 330
- Boston, MA 02111-1307 USA.
-
- You may contact the author by:
- e-mail: philnelson@acm.org
- us-mail: Philip A. Nelson
- Computer Science Department, 9062
- Western Washington University
- Bellingham, WA 98226-9062
-
-*************************************************************************/
-
-#include <config.h>
-#include <stdio.h>
-#include <assert.h>
-#include <stdlib.h>
-#include <ctype.h>
-#include <stdarg.h>
-#include "bcmath.h"
-#include "private.h"
-
-/* pn prints the number NUM in base 10. */
-
-static void
-out_char (int c)
-{
- putchar(c);
-}
-
-
-void
-pn (bc_num num TSRMLS_DC)
-{
- bc_out_num (num, 10, out_char, 0 TSRMLS_CC);
- out_char ('\n');
-}
-
-
-/* pv prints a character array as if it was a string of bcd digits. */
-void
-pv (name, num, len)
- char *name;
- unsigned char *num;
- int len;
-{
- int i;
- printf ("%s=", name);
- for (i=0; i<len; i++) printf ("%c",BCD_CHAR(num[i]));
- printf ("\n");
-}
diff --git a/ext/bcmath/libbcmath/src/div.c b/ext/bcmath/libbcmath/src/div.c
deleted file mode 100644
index 1ad3710128..0000000000
--- a/ext/bcmath/libbcmath/src/div.c
+++ /dev/null
@@ -1,274 +0,0 @@
-/* div.c: bcmath library file. */
-/*
- Copyright (C) 1991, 1992, 1993, 1994, 1997 Free Software Foundation, Inc.
- Copyright (C) 2000 Philip A. Nelson
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2 of the License, or (at your option) any later version.
-
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details. (COPYING.LIB)
-
- You should have received a copy of the GNU Lesser General Public
- License along with this library; if not, write to:
-
- The Free Software Foundation, Inc.
- 59 Temple Place, Suite 330
- Boston, MA 02111-1307 USA.
-
- You may contact the author by:
- e-mail: philnelson@acm.org
- us-mail: Philip A. Nelson
- Computer Science Department, 9062
- Western Washington University
- Bellingham, WA 98226-9062
-
-*************************************************************************/
-
-#include <config.h>
-#include <stdio.h>
-#include <assert.h>
-#include <stdlib.h>
-#include <ctype.h>
-#include <stdarg.h>
-#include "bcmath.h"
-#include "private.h"
-
-
-/* Some utility routines for the divide: First a one digit multiply.
- NUM (with SIZE digits) is multiplied by DIGIT and the result is
- placed into RESULT. It is written so that NUM and RESULT can be
- the same pointers. */
-
-static void
-_one_mult (num, size, digit, result)
- unsigned char *num;
- int size, digit;
- unsigned char *result;
-{
- int carry, value;
- unsigned char *nptr, *rptr;
-
- if (digit == 0)
- memset (result, 0, size);
- else
- {
- if (digit == 1)
- memcpy (result, num, size);
- else
- {
- /* Initialize */
- nptr = (unsigned char *) (num+size-1);
- rptr = (unsigned char *) (result+size-1);
- carry = 0;
-
- while (size-- > 0)
- {
- value = *nptr-- * digit + carry;
- *rptr-- = value % BASE;
- carry = value / BASE;
- }
-
- if (carry != 0) *rptr = carry;
- }
- }
-}
-
-
-/* The full division routine. This computes N1 / N2. It returns
- 0 if the division is ok and the result is in QUOT. The number of
- digits after the decimal point is SCALE. It returns -1 if division
- by zero is tried. The algorithm is found in Knuth Vol 2. p237. */
-
-int
-bc_divide (bc_num n1, bc_num n2, bc_num *quot, int scale TSRMLS_DC)
-{
- bc_num qval;
- unsigned char *num1, *num2;
- unsigned char *ptr1, *ptr2, *n2ptr, *qptr;
- int scale1, val;
- unsigned int len1, len2, scale2, qdigits, extra, count;
- unsigned int qdig, qguess, borrow, carry;
- unsigned char *mval;
- char zero;
- unsigned int norm;
-
- /* Test for divide by zero. */
- if (bc_is_zero (n2 TSRMLS_CC)) return -1;
-
- /* Test for divide by 1. If it is we must truncate. */
- if (n2->n_scale == 0)
- {
- if (n2->n_len == 1 && *n2->n_value == 1)
- {
- qval = bc_new_num (n1->n_len, scale);
- qval->n_sign = (n1->n_sign == n2->n_sign ? PLUS : MINUS);
- memset (&qval->n_value[n1->n_len],0,scale);
- memcpy (qval->n_value, n1->n_value,
- n1->n_len + MIN(n1->n_scale,scale));
- bc_free_num (quot);
- *quot = qval;
- }
- }
-
- /* Set up the divide. Move the decimal point on n1 by n2's scale.
- Remember, zeros on the end of num2 are wasted effort for dividing. */
- scale2 = n2->n_scale;
- n2ptr = (unsigned char *) n2->n_value+n2->n_len+scale2-1;
- while ((scale2 > 0) && (*n2ptr-- == 0)) scale2--;
-
- len1 = n1->n_len + scale2;
- scale1 = n1->n_scale - scale2;
- if (scale1 < scale)
- extra = scale - scale1;
- else
- extra = 0;
- num1 = (unsigned char *) emalloc (n1->n_len+n1->n_scale+extra+2);
- if (num1 == NULL) bc_out_of_memory();
- memset (num1, 0, n1->n_len+n1->n_scale+extra+2);
- memcpy (num1+1, n1->n_value, n1->n_len+n1->n_scale);
-
- len2 = n2->n_len + scale2;
- num2 = (unsigned char *) emalloc (len2+1);
- if (num2 == NULL) bc_out_of_memory();
- memcpy (num2, n2->n_value, len2);
- *(num2+len2) = 0;
- n2ptr = num2;
- while (*n2ptr == 0)
- {
- n2ptr++;
- len2--;
- }
-
- /* Calculate the number of quotient digits. */
- if (len2 > len1+scale)
- {
- qdigits = scale+1;
- zero = TRUE;
- }
- else
- {
- zero = FALSE;
- if (len2>len1)
- qdigits = scale+1; /* One for the zero integer part. */
- else
- qdigits = len1-len2+scale+1;
- }
-
- /* Allocate and zero the storage for the quotient. */
- qval = bc_new_num (qdigits-scale,scale);
- memset (qval->n_value, 0, qdigits);
-
- /* Allocate storage for the temporary storage mval. */
- mval = (unsigned char *) emalloc (len2+1);
- if (mval == NULL) bc_out_of_memory ();
-
- /* Now for the full divide algorithm. */
- if (!zero)
- {
- /* Normalize */
- norm = 10 / ((int)*n2ptr + 1);
- if (norm != 1)
- {
- _one_mult (num1, len1+scale1+extra+1, norm, num1);
- _one_mult (n2ptr, len2, norm, n2ptr);
- }
-
- /* Initialize divide loop. */
- qdig = 0;
- if (len2 > len1)
- qptr = (unsigned char *) qval->n_value+len2-len1;
- else
- qptr = (unsigned char *) qval->n_value;
-
- /* Loop */
- while (qdig <= len1+scale-len2)
- {
- /* Calculate the quotient digit guess. */
- if (*n2ptr == num1[qdig])
- qguess = 9;
- else
- qguess = (num1[qdig]*10 + num1[qdig+1]) / *n2ptr;
-
- /* Test qguess. */
- if (n2ptr[1]*qguess >
- (num1[qdig]*10 + num1[qdig+1] - *n2ptr*qguess)*10
- + num1[qdig+2])
- {
- qguess--;
- /* And again. */
- if (n2ptr[1]*qguess >
- (num1[qdig]*10 + num1[qdig+1] - *n2ptr*qguess)*10
- + num1[qdig+2])
- qguess--;
- }
-
- /* Multiply and subtract. */
- borrow = 0;
- if (qguess != 0)
- {
- *mval = 0;
- _one_mult (n2ptr, len2, qguess, mval+1);
- ptr1 = (unsigned char *) num1+qdig+len2;
- ptr2 = (unsigned char *) mval+len2;
- for (count = 0; count < len2+1; count++)
- {
- val = (int) *ptr1 - (int) *ptr2-- - borrow;
- if (val < 0)
- {
- val += 10;
- borrow = 1;
- }
- else
- borrow = 0;
- *ptr1-- = val;
- }
- }
-
- /* Test for negative result. */
- if (borrow == 1)
- {
- qguess--;
- ptr1 = (unsigned char *) num1+qdig+len2;
- ptr2 = (unsigned char *) n2ptr+len2-1;
- carry = 0;
- for (count = 0; count < len2; count++)
- {
- val = (int) *ptr1 + (int) *ptr2-- + carry;
- if (val > 9)
- {
- val -= 10;
- carry = 1;
- }
- else
- carry = 0;
- *ptr1-- = val;
- }
- if (carry == 1) *ptr1 = (*ptr1 + 1) % 10;
- }
-
- /* We now know the quotient digit. */
- *qptr++ = qguess;
- qdig++;
- }
- }
-
- /* Clean up and return the number. */
- qval->n_sign = ( n1->n_sign == n2->n_sign ? PLUS : MINUS );
- if (bc_is_zero (qval TSRMLS_CC)) qval->n_sign = PLUS;
- _bc_rm_leading_zeros (qval);
- bc_free_num (quot);
- *quot = qval;
-
- /* Clean up temporary storage. */
- efree (mval);
- efree (num1);
- efree (num2);
-
- return 0; /* Everything is OK. */
-}
-
diff --git a/ext/bcmath/libbcmath/src/divmod.c b/ext/bcmath/libbcmath/src/divmod.c
deleted file mode 100644
index 2949bd10d4..0000000000
--- a/ext/bcmath/libbcmath/src/divmod.c
+++ /dev/null
@@ -1,87 +0,0 @@
-/* divmod.c: bcmath library file. */
-/*
- Copyright (C) 1991, 1992, 1993, 1994, 1997 Free Software Foundation, Inc.
- Copyright (C) 2000 Philip A. Nelson
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2 of the License, or (at your option) any later version.
-
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details. (COPYING.LIB)
-
- You should have received a copy of the GNU Lesser General Public
- License along with this library; if not, write to:
-
- The Free Software Foundation, Inc.
- 59 Temple Place, Suite 330
- Boston, MA 02111-1307 USA.
-
- You may contact the author by:
- e-mail: philnelson@acm.org
- us-mail: Philip A. Nelson
- Computer Science Department, 9062
- Western Washington University
- Bellingham, WA 98226-9062
-
-*************************************************************************/
-
-#include <config.h>
-#include <stdio.h>
-#include <assert.h>
-#include <stdlib.h>
-#include <ctype.h>
-#include <stdarg.h>
-#include "bcmath.h"
-#include "private.h"
-
-
-/* Division *and* modulo for numbers. This computes both NUM1 / NUM2 and
- NUM1 % NUM2 and puts the results in QUOT and REM, except that if QUOT
- is NULL then that store will be omitted.
- */
-
-int
-bc_divmod (bc_num num1, bc_num num2, bc_num *quot, bc_num *rem, int scale TSRMLS_DC)
-{
- bc_num quotient = NULL;
- bc_num temp;
- int rscale;
-
- /* Check for correct numbers. */
- if (bc_is_zero (num2 TSRMLS_CC)) return -1;
-
- /* Calculate final scale. */
- rscale = MAX (num1->n_scale, num2->n_scale+scale);
- bc_init_num(&temp TSRMLS_CC);
-
- /* Calculate it. */
- bc_divide (num1, num2, &temp, scale TSRMLS_CC);
- if (quot)
- quotient = bc_copy_num (temp);
- bc_multiply (temp, num2, &temp, rscale TSRMLS_CC);
- bc_sub (num1, temp, rem, rscale);
- bc_free_num (&temp);
-
- if (quot)
- {
- bc_free_num (quot);
- *quot = quotient;
- }
-
- return 0; /* Everything is OK. */
-}
-
-
-/* Modulo for numbers. This computes NUM1 % NUM2 and puts the
- result in RESULT. */
-
-int
-bc_modulo (bc_num num1, bc_num num2, bc_num *result, int scale TSRMLS_DC)
-{
- return bc_divmod (num1, num2, NULL, result, scale TSRMLS_CC);
-}
-
diff --git a/ext/bcmath/libbcmath/src/doaddsub.c b/ext/bcmath/libbcmath/src/doaddsub.c
deleted file mode 100644
index 5458fc5dfc..0000000000
--- a/ext/bcmath/libbcmath/src/doaddsub.c
+++ /dev/null
@@ -1,232 +0,0 @@
-/* doaddsub.c: bcmath library file. */
-/*
- Copyright (C) 1991, 1992, 1993, 1994, 1997 Free Software Foundation, Inc.
- Copyright (C) 2000 Philip A. Nelson
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2 of the License, or (at your option) any later version.
-
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details. (COPYING.LIB)
-
- You should have received a copy of the GNU Lesser General Public
- License along with this library; if not, write to:
-
- The Free Software Foundation, Inc.
- 59 Temple Place, Suite 330
- Boston, MA 02111-1307 USA.
-
- You may contact the author by:
- e-mail: philnelson@acm.org
- us-mail: Philip A. Nelson
- Computer Science Department, 9062
- Western Washington University
- Bellingham, WA 98226-9062
-
-*************************************************************************/
-
-#include <config.h>
-#include <stdio.h>
-#include <assert.h>
-#include <stdlib.h>
-#include <ctype.h>
-#include <stdarg.h>
-#include "bcmath.h"
-#include "private.h"
-
-
-/* Perform addition: N1 is added to N2 and the value is
- returned. The signs of N1 and N2 are ignored.
- SCALE_MIN is to set the minimum scale of the result. */
-
- bc_num
-_bc_do_add (n1, n2, scale_min)
- bc_num n1, n2;
- int scale_min;
-{
- bc_num sum;
- int sum_scale, sum_digits;
- char *n1ptr, *n2ptr, *sumptr;
- int carry, n1bytes, n2bytes;
- int count;
-
- /* Prepare sum. */
- sum_scale = MAX (n1->n_scale, n2->n_scale);
- sum_digits = MAX (n1->n_len, n2->n_len) + 1;
- sum = bc_new_num (sum_digits, MAX(sum_scale, scale_min));
-
- /* Zero extra digits made by scale_min. */
- if (scale_min > sum_scale)
- {
- sumptr = (char *) (sum->n_value + sum_scale + sum_digits);
- for (count = scale_min - sum_scale; count > 0; count--)
- *sumptr++ = 0;
- }
-
- /* Start with the fraction part. Initialize the pointers. */
- n1bytes = n1->n_scale;
- n2bytes = n2->n_scale;
- n1ptr = (char *) (n1->n_value + n1->n_len + n1bytes - 1);
- n2ptr = (char *) (n2->n_value + n2->n_len + n2bytes - 1);
- sumptr = (char *) (sum->n_value + sum_scale + sum_digits - 1);
-
- /* Add the fraction part. First copy the longer fraction.*/
- if (n1bytes != n2bytes)
- {
- if (n1bytes > n2bytes)
- while (n1bytes>n2bytes)
- { *sumptr-- = *n1ptr--; n1bytes--;}
- else
- while (n2bytes>n1bytes)
- { *sumptr-- = *n2ptr--; n2bytes--;}
- }
-
- /* Now add the remaining fraction part and equal size integer parts. */
- n1bytes += n1->n_len;
- n2bytes += n2->n_len;
- carry = 0;
- while ((n1bytes > 0) && (n2bytes > 0))
- {
- *sumptr = *n1ptr-- + *n2ptr-- + carry;
- if (*sumptr > (BASE-1))
- {
- carry = 1;
- *sumptr -= BASE;
- }
- else
- carry = 0;
- sumptr--;
- n1bytes--;
- n2bytes--;
- }
-
- /* Now add carry the longer integer part. */
- if (n1bytes == 0)
- { n1bytes = n2bytes; n1ptr = n2ptr; }
- while (n1bytes-- > 0)
- {
- *sumptr = *n1ptr-- + carry;
- if (*sumptr > (BASE-1))
- {
- carry = 1;
- *sumptr -= BASE;
- }
- else
- carry = 0;
- sumptr--;
- }
-
- /* Set final carry. */
- if (carry == 1)
- *sumptr += 1;
-
- /* Adjust sum and return. */
- _bc_rm_leading_zeros (sum);
- return sum;
-}
-
-
-/* Perform subtraction: N2 is subtracted from N1 and the value is
- returned. The signs of N1 and N2 are ignored. Also, N1 is
- assumed to be larger than N2. SCALE_MIN is the minimum scale
- of the result. */
-
- bc_num
-_bc_do_sub (n1, n2, scale_min)
- bc_num n1, n2;
- int scale_min;
-{
- bc_num diff;
- int diff_scale, diff_len;
- int min_scale, min_len;
- char *n1ptr, *n2ptr, *diffptr;
- int borrow, count, val;
-
- /* Allocate temporary storage. */
- diff_len = MAX (n1->n_len, n2->n_len);
- diff_scale = MAX (n1->n_scale, n2->n_scale);
- min_len = MIN (n1->n_len, n2->n_len);
- min_scale = MIN (n1->n_scale, n2->n_scale);
- diff = bc_new_num (diff_len, MAX(diff_scale, scale_min));
-
- /* Zero extra digits made by scale_min. */
- if (scale_min > diff_scale)
- {
- diffptr = (char *) (diff->n_value + diff_len + diff_scale);
- for (count = scale_min - diff_scale; count > 0; count--)
- *diffptr++ = 0;
- }
-
- /* Initialize the subtract. */
- n1ptr = (char *) (n1->n_value + n1->n_len + n1->n_scale -1);
- n2ptr = (char *) (n2->n_value + n2->n_len + n2->n_scale -1);
- diffptr = (char *) (diff->n_value + diff_len + diff_scale -1);
-
- /* Subtract the numbers. */
- borrow = 0;
-
- /* Take care of the longer scaled number. */
- if (n1->n_scale != min_scale)
- {
- /* n1 has the longer scale */
- for (count = n1->n_scale - min_scale; count > 0; count--)
- *diffptr-- = *n1ptr--;
- }
- else
- {
- /* n2 has the longer scale */
- for (count = n2->n_scale - min_scale; count > 0; count--)
- {
- val = - *n2ptr-- - borrow;
- if (val < 0)
- {
- val += BASE;
- borrow = 1;
- }
- else
- borrow = 0;
- *diffptr-- = val;
- }
- }
-
- /* Now do the equal length scale and integer parts. */
-
- for (count = 0; count < min_len + min_scale; count++)
- {
- val = *n1ptr-- - *n2ptr-- - borrow;
- if (val < 0)
- {
- val += BASE;
- borrow = 1;
- }
- else
- borrow = 0;
- *diffptr-- = val;
- }
-
- /* If n1 has more digits then n2, we now do that subtract. */
- if (diff_len != min_len)
- {
- for (count = diff_len - min_len; count > 0; count--)
- {
- val = *n1ptr-- - borrow;
- if (val < 0)
- {
- val += BASE;
- borrow = 1;
- }
- else
- borrow = 0;
- *diffptr-- = val;
- }
- }
-
- /* Clean up and return. */
- _bc_rm_leading_zeros (diff);
- return diff;
-}
-
diff --git a/ext/bcmath/libbcmath/src/init.c b/ext/bcmath/libbcmath/src/init.c
deleted file mode 100644
index cd45b9fbc1..0000000000
--- a/ext/bcmath/libbcmath/src/init.c
+++ /dev/null
@@ -1,131 +0,0 @@
-/* init.c: bcmath library file. */
-/*
- Copyright (C) 1991, 1992, 1993, 1994, 1997 Free Software Foundation, Inc.
- Copyright (C) 2000 Philip A. Nelson
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2 of the License, or (at your option) any later version.
-
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details. (COPYING.LIB)
-
- You should have received a copy of the GNU Lesser General Public
- License along with this library; if not, write to:
-
- The Free Software Foundation, Inc.
- 59 Temple Place, Suite 330
- Boston, MA 02111-1307 USA.
-
- You may contact the author by:
- e-mail: philnelson@acm.org
- us-mail: Philip A. Nelson
- Computer Science Department, 9062
- Western Washington University
- Bellingham, WA 98226-9062
-
-*************************************************************************/
-
-#include <config.h>
-#include <stdio.h>
-#include <assert.h>
-#include <stdlib.h>
-#include <ctype.h>
-#include <stdarg.h>
-#include "bcmath.h"
-#include "private.h"
-
-#if SANDER_0
- bc_num _bc_Free_list = NULL;
-#endif
-
-/* new_num allocates a number and sets fields to known values. */
-
-bc_num
-_bc_new_num_ex (length, scale, persistent)
- int length, scale, persistent;
-{
- bc_num temp;
-
- /* PHP Change: malloc() -> pemalloc(), removed free_list code */
- temp = (bc_num) pemalloc (sizeof(bc_struct)+length+scale, persistent);
-#if 0
- if (_bc_Free_list != NULL) {
- temp = _bc_Free_list;
- _bc_Free_list = temp->n_next;
- } else {
- temp = (bc_num) pemalloc (sizeof(bc_struct), persistent);
- if (temp == NULL) bc_out_of_memory ();
- }
-#endif
- temp->n_sign = PLUS;
- temp->n_len = length;
- temp->n_scale = scale;
- temp->n_refs = 1;
- /* PHP Change: malloc() -> pemalloc() */
- temp->n_ptr = (char *) pemalloc (length+scale, persistent);
- if (temp->n_ptr == NULL) bc_out_of_memory();
- temp->n_value = temp->n_ptr;
- memset (temp->n_ptr, 0, length+scale);
- return temp;
-}
-
-
-/* "Frees" a bc_num NUM. Actually decreases reference count and only
- frees the storage if reference count is zero. */
-
-void
-_bc_free_num_ex (num, persistent)
- bc_num *num;
- int persistent;
-{
- if (*num == NULL) return;
- (*num)->n_refs--;
- if ((*num)->n_refs == 0) {
- if ((*num)->n_ptr)
- /* PHP Change: free() -> pefree(), removed free_list code */
- pefree ((*num)->n_ptr, persistent);
- pefree(*num, persistent);
-#if 0
- (*num)->n_next = _bc_Free_list;
- _bc_Free_list = *num;
-#endif
- }
- *num = NULL;
-}
-
-
-/* Intitialize the number package! */
-
-void
-bc_init_numbers (TSRMLS_D)
-{
- BCG(_zero_) = _bc_new_num_ex (1,0,1);
- BCG(_one_) = _bc_new_num_ex (1,0,1);
- BCG(_one_)->n_value[0] = 1;
- BCG(_two_) = _bc_new_num_ex (1,0,1);
- BCG(_two_)->n_value[0] = 2;
-}
-
-
-/* Make a copy of a number! Just increments the reference count! */
-
-bc_num
-bc_copy_num (bc_num num)
-{
- num->n_refs++;
- return num;
-}
-
-
-/* Initialize a number NUM by making it a copy of zero. */
-
-void
-bc_init_num (bc_num *num TSRMLS_DC)
-{
- *num = bc_copy_num (BCG(_zero_));
-}
-
diff --git a/ext/bcmath/libbcmath/src/int2num.c b/ext/bcmath/libbcmath/src/int2num.c
deleted file mode 100644
index 34419c138f..0000000000
--- a/ext/bcmath/libbcmath/src/int2num.c
+++ /dev/null
@@ -1,84 +0,0 @@
-/* int2num.c: bcmath library file. */
-/*
- Copyright (C) 1991, 1992, 1993, 1994, 1997 Free Software Foundation, Inc.
- Copyright (C) 2000 Philip A. Nelson
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2 of the License, or (at your option) any later version.
-
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details. (COPYING.LIB)
-
- You should have received a copy of the GNU Lesser General Public
- License along with this library; if not, write to:
-
- The Free Software Foundation, Inc.
- 59 Temple Place, Suite 330
- Boston, MA 02111-1307 USA.
-
- You may contact the author by:
- e-mail: philnelson@acm.org
- us-mail: Philip A. Nelson
- Computer Science Department, 9062
- Western Washington University
- Bellingham, WA 98226-9062
-
-*************************************************************************/
-
-#include <config.h>
-#include <stdio.h>
-#include <assert.h>
-#include <stdlib.h>
-#include <ctype.h>
-#include <stdarg.h>
-#include "bcmath.h"
-#include "private.h"
-
-
-/* Convert an integer VAL to a bc number NUM. */
-
-void
-bc_int2num (num, val)
- bc_num *num;
- int val;
-{
- char buffer[30];
- char *bptr, *vptr;
- int ix = 1;
- char neg = 0;
-
- /* Sign. */
- if (val < 0)
- {
- neg = 1;
- val = -val;
- }
-
- /* Get things going. */
- bptr = buffer;
- *bptr++ = val % BASE;
- val = val / BASE;
-
- /* Extract remaining digits. */
- while (val != 0)
- {
- *bptr++ = val % BASE;
- val = val / BASE;
- ix++; /* Count the digits. */
- }
-
- /* Make the number. */
- bc_free_num (num);
- *num = bc_new_num (ix, 0);
- if (neg) (*num)->n_sign = MINUS;
-
- /* Assign the digits. */
- vptr = (*num)->n_value;
- while (ix-- > 0)
- *vptr++ = *--bptr;
-}
-
diff --git a/ext/bcmath/libbcmath/src/nearzero.c b/ext/bcmath/libbcmath/src/nearzero.c
deleted file mode 100644
index ae16b65d8a..0000000000
--- a/ext/bcmath/libbcmath/src/nearzero.c
+++ /dev/null
@@ -1,69 +0,0 @@
-/* nearzero.c: bcmath library file. */
-/*
- Copyright (C) 1991, 1992, 1993, 1994, 1997 Free Software Foundation, Inc.
- Copyright (C) 2000 Philip A. Nelson
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2 of the License, or (at your option) any later version.
-
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details. (COPYING.LIB)
-
- You should have received a copy of the GNU Lesser General Public
- License along with this library; if not, write to:
-
- The Free Software Foundation, Inc.
- 59 Temple Place, Suite 330
- Boston, MA 02111-1307 USA.
-
- You may contact the author by:
- e-mail: philnelson@acm.org
- us-mail: Philip A. Nelson
- Computer Science Department, 9062
- Western Washington University
- Bellingham, WA 98226-9062
-
-*************************************************************************/
-
-#include <config.h>
-#include <stdio.h>
-#include <assert.h>
-#include <stdlib.h>
-#include <ctype.h>
-#include <stdarg.h>
-#include "bcmath.h"
-#include "private.h"
-
-/* In some places we need to check if the number NUM is almost zero.
- Specifically, all but the last digit is 0 and the last digit is 1.
- Last digit is defined by scale. */
-
-char
-bc_is_near_zero (num, scale)
- bc_num num;
- int scale;
-{
- int count;
- char *nptr;
-
- /* Error checking */
- if (scale > num->n_scale)
- scale = num->n_scale;
-
- /* Initialize */
- count = num->n_len + scale;
- nptr = num->n_value;
-
- /* The check */
- while ((count > 0) && (*nptr++ == 0)) count--;
-
- if (count != 0 && (count != 1 || *--nptr != 1))
- return FALSE;
- else
- return TRUE;
-}
-
diff --git a/ext/bcmath/libbcmath/src/neg.c b/ext/bcmath/libbcmath/src/neg.c
deleted file mode 100644
index c864d77f1d..0000000000
--- a/ext/bcmath/libbcmath/src/neg.c
+++ /dev/null
@@ -1,49 +0,0 @@
-/* neg.c: bcmath library file. */
-/*
- Copyright (C) 1991, 1992, 1993, 1994, 1997 Free Software Foundation, Inc.
- Copyright (C) 2000 Philip A. Nelson
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2 of the License, or (at your option) any later version.
-
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details. (COPYING.LIB)
-
- You should have received a copy of the GNU Lesser General Public
- License along with this library; if not, write to:
-
- The Free Software Foundation, Inc.
- 59 Temple Place, Suite 330
- Boston, MA 02111-1307 USA.
-
- You may contact the author by:
- e-mail: philnelson@acm.org
- us-mail: Philip A. Nelson
- Computer Science Department, 9062
- Western Washington University
- Bellingham, WA 98226-9062
-
-*************************************************************************/
-
-#include <config.h>
-#include <stdio.h>
-#include <assert.h>
-#include <stdlib.h>
-#include <ctype.h>
-#include <stdarg.h>
-#include "bcmath.h"
-#include "private.h"
-
-/* In some places we need to check if the number is negative. */
-
-char
-bc_is_neg (num)
- bc_num num;
-{
- return num->n_sign == MINUS;
-}
-
diff --git a/ext/bcmath/libbcmath/src/num2long.c b/ext/bcmath/libbcmath/src/num2long.c
deleted file mode 100644
index 0a6e0836ad..0000000000
--- a/ext/bcmath/libbcmath/src/num2long.c
+++ /dev/null
@@ -1,70 +0,0 @@
-/* num2long.c: bcmath library file. */
-/*
- Copyright (C) 1991, 1992, 1993, 1994, 1997 Free Software Foundation, Inc.
- Copyright (C) 2000 Philip A. Nelson
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2 of the License, or (at your option) any later version.
-
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details. (COPYING.LIB)
-
- You should have received a copy of the GNU Lesser General Public
- License along with this library; if not, write to:
-
- The Free Software Foundation, Inc.
- 59 Temple Place, Suite 330
- Boston, MA 02111-1307 USA.
-
- You may contact the author by:
- e-mail: philnelson@acm.org
- us-mail: Philip A. Nelson
- Computer Science Department, 9062
- Western Washington University
- Bellingham, WA 98226-9062
-
-*************************************************************************/
-
-#include <config.h>
-#include <stdio.h>
-#include <assert.h>
-#include <stdlib.h>
-#include <ctype.h>
-#include <stdarg.h>
-#include "bcmath.h"
-#include "private.h"
-
-/* Convert a number NUM to a long. The function returns only the integer
- part of the number. For numbers that are too large to represent as
- a long, this function returns a zero. This can be detected by checking
- the NUM for zero after having a zero returned. */
-
-long
-bc_num2long (num)
- bc_num num;
-{
- long val;
- char *nptr;
- int index;
-
- /* Extract the int value, ignore the fraction. */
- val = 0;
- nptr = num->n_value;
- for (index=num->n_len; (index>0) && (val<=(LONG_MAX/BASE)); index--)
- val = val*BASE + *nptr++;
-
- /* Check for overflow. If overflow, return zero. */
- if (index>0) val = 0;
- if (val < 0) val = 0;
-
- /* Return the value. */
- if (num->n_sign == PLUS)
- return (val);
- else
- return (-val);
-}
-
diff --git a/ext/bcmath/libbcmath/src/num2str.c b/ext/bcmath/libbcmath/src/num2str.c
deleted file mode 100644
index c47ec9bbad..0000000000
--- a/ext/bcmath/libbcmath/src/num2str.c
+++ /dev/null
@@ -1,79 +0,0 @@
-/* num2str.c: bcmath library file. */
-/*
- Copyright (C) 1991, 1992, 1993, 1994, 1997 Free Software Foundation, Inc.
- Copyright (C) 2000 Philip A. Nelson
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2 of the License, or (at your option) any later version.
-
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details. (COPYING.LIB)
-
- You should have received a copy of the GNU Lesser General Public
- License along with this library; if not, write to:
-
- The Free Software Foundation, Inc.
- 59 Temple Place, Suite 330
- Boston, MA 02111-1307 USA.
-
- You may contact the author by:
- e-mail: philnelson@acm.org
- us-mail: Philip A. Nelson
- Computer Science Department, 9062
- Western Washington University
- Bellingham, WA 98226-9062
-
-*************************************************************************/
-
-#include <config.h>
-#include <stdio.h>
-#include <assert.h>
-#include <stdlib.h>
-#include <ctype.h>
-#include <stdarg.h>
-#include "bcmath.h"
-#include "private.h"
-
-/* Convert a numbers to a string. Base 10 only.*/
-
-char
-*bc_num2str (num)
- bc_num num;
-{
- char *str, *sptr;
- char *nptr;
- int index, signch;
-
- /* Allocate the string memory. */
- signch = ( num->n_sign == PLUS ? 0 : 1 ); /* Number of sign chars. */
- if (num->n_scale > 0)
- str = (char *) emalloc (num->n_len + num->n_scale + 2 + signch);
- else
- str = (char *) emalloc (num->n_len + 1 + signch);
- if (str == NULL) bc_out_of_memory();
-
- /* The negative sign if needed. */
- sptr = str;
- if (signch) *sptr++ = '-';
-
- /* Load the whole number. */
- nptr = num->n_value;
- for (index=num->n_len; index>0; index--)
- *sptr++ = BCD_CHAR(*nptr++);
-
- /* Now the fraction. */
- if (num->n_scale > 0)
- {
- *sptr++ = '.';
- for (index=0; index<num->n_scale; index++)
- *sptr++ = BCD_CHAR(*nptr++);
- }
-
- /* Terminate the string and return it! */
- *sptr = '\0';
- return (str);
-}
diff --git a/ext/bcmath/libbcmath/src/outofmem.c b/ext/bcmath/libbcmath/src/outofmem.c
deleted file mode 100644
index 799a32d2ae..0000000000
--- a/ext/bcmath/libbcmath/src/outofmem.c
+++ /dev/null
@@ -1,46 +0,0 @@
-/* outofmem.c: bcmath library file. */
-/*
- Copyright (C) 1991, 1992, 1993, 1994, 1997 Free Software Foundation, Inc.
- Copyright (C) 2000 Philip A. Nelson
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2 of the License, or (at your option) any later version.
-
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details. (COPYING.LIB)
-
- You should have received a copy of the GNU Lesser General Public
- License along with this library; if not, write to:
-
- The Free Software Foundation, Inc.
- 59 Temple Place, Suite 330
- Boston, MA 02111-1307 USA.
-
- You may contact the author by:
- e-mail: philnelson@acm.org
- us-mail: Philip A. Nelson
- Computer Science Department, 9062
- Western Washington University
- Bellingham, WA 98226-9062
-
-*************************************************************************/
-
-#include <config.h>
-#include <stdio.h>
-#include <assert.h>
-#include <stdlib.h>
-#include <ctype.h>
-#include <stdarg.h>
-#include "bcmath.h"
-#include "private.h"
-
-
-void bc_out_of_memory (void)
-{
- (void) fprintf (stderr, "bcmath: out of memory!\n");
- exit (1);
-}
diff --git a/ext/bcmath/libbcmath/src/output.c b/ext/bcmath/libbcmath/src/output.c
deleted file mode 100644
index ab49b0e366..0000000000
--- a/ext/bcmath/libbcmath/src/output.c
+++ /dev/null
@@ -1,208 +0,0 @@
-/* output.c: bcmath library file. */
-/*
- Copyright (C) 1991, 1992, 1993, 1994, 1997 Free Software Foundation, Inc.
- Copyright (C) 2000 Philip A. Nelson
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2 of the License, or (at your option) any later version.
-
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details. (COPYING.LIB)
-
- You should have received a copy of the GNU Lesser General Public
- License along with this library; if not, write to:
-
- The Free Software Foundation, Inc.
- 59 Temple Place, Suite 330
- Boston, MA 02111-1307 USA.
-
- You may contact the author by:
- e-mail: philnelson@acm.org
- us-mail: Philip A. Nelson
- Computer Science Department, 9062
- Western Washington University
- Bellingham, WA 98226-9062
-
-*************************************************************************/
-
-#include <config.h>
-#include <stdio.h>
-#include <assert.h>
-#include <stdlib.h>
-#include <ctype.h>
-#include <stdarg.h>
-#include "bcmath.h"
-#include "private.h"
-
-
-/* The following routines provide output for bcd numbers package
- using the rules of POSIX bc for output. */
-
-/* This structure is used for saving digits in the conversion process. */
-typedef struct stk_rec {
- long digit;
- struct stk_rec *next;
-} stk_rec;
-
-/* The reference string for digits. */
-static char ref_str[] = "0123456789ABCDEF";
-
-
-/* A special output routine for "multi-character digits." Exactly
- SIZE characters must be output for the value VAL. If SPACE is
- non-zero, we must output one space before the number. OUT_CHAR
- is the actual routine for writing the characters. */
-
-void
-bc_out_long (val, size, space, out_char)
- long val;
- int size, space;
-#ifdef __STDC__
- void (*out_char)(int);
-#else
- void (*out_char)();
-#endif
-{
- char digits[40];
- int len, ix;
-
- if (space) (*out_char) (' ');
- sprintf (digits, "%ld", val);
- len = strlen (digits);
- while (size > len)
- {
- (*out_char) ('0');
- size--;
- }
- for (ix=0; ix < len; ix++)
- (*out_char) (digits[ix]);
-}
-
-/* Output of a bcd number. NUM is written in base O_BASE using OUT_CHAR
- as the routine to do the actual output of the characters. */
-
-void
-#ifdef __STDC__
-bc_out_num (bc_num num, int o_base, void (*out_char)(int), int leading_zero TSRMLS_DC)
-#else
-bc_out_num (bc_num num, int o_base, void (*out_char)(), int leading_zero TSRMLS_DC)
-#endif
-{
- char *nptr;
- int index, fdigit, pre_space;
- stk_rec *digits, *temp;
- bc_num int_part, frac_part, base, cur_dig, t_num, max_o_digit;
-
- /* The negative sign if needed. */
- if (num->n_sign == MINUS) (*out_char) ('-');
-
- /* Output the number. */
- if (bc_is_zero (num TSRMLS_CC))
- (*out_char) ('0');
- else
- if (o_base == 10)
- {
- /* The number is in base 10, do it the fast way. */
- nptr = num->n_value;
- if (num->n_len > 1 || *nptr != 0)
- for (index=num->n_len; index>0; index--)
- (*out_char) (BCD_CHAR(*nptr++));
- else
- nptr++;
-
- if (leading_zero && bc_is_zero (num TSRMLS_CC))
- (*out_char) ('0');
-
- /* Now the fraction. */
- if (num->n_scale > 0)
- {
- (*out_char) ('.');
- for (index=0; index<num->n_scale; index++)
- (*out_char) (BCD_CHAR(*nptr++));
- }
- }
- else
- {
- /* special case ... */
- if (leading_zero && bc_is_zero (num TSRMLS_CC))
- (*out_char) ('0');
-
- /* The number is some other base. */
- digits = NULL;
- bc_init_num (&int_part TSRMLS_CC);
- bc_divide (num, BCG(_one_), &int_part, 0 TSRMLS_CC);
- bc_init_num (&frac_part TSRMLS_CC);
- bc_init_num (&cur_dig TSRMLS_CC);
- bc_init_num (&base TSRMLS_CC);
- bc_sub (num, int_part, &frac_part, 0);
- /* Make the INT_PART and FRAC_PART positive. */
- int_part->n_sign = PLUS;
- frac_part->n_sign = PLUS;
- bc_int2num (&base, o_base);
- bc_init_num (&max_o_digit TSRMLS_CC);
- bc_int2num (&max_o_digit, o_base-1);
-
-
- /* Get the digits of the integer part and push them on a stack. */
- while (!bc_is_zero (int_part TSRMLS_CC))
- {
- bc_modulo (int_part, base, &cur_dig, 0 TSRMLS_CC);
- /* PHP Change: malloc() -> emalloc() */
- temp = (stk_rec *) emalloc (sizeof(stk_rec));
- if (temp == NULL) bc_out_of_memory();
- temp->digit = bc_num2long (cur_dig);
- temp->next = digits;
- digits = temp;
- bc_divide (int_part, base, &int_part, 0 TSRMLS_CC);
- }
-
- /* Print the digits on the stack. */
- if (digits != NULL)
- {
- /* Output the digits. */
- while (digits != NULL)
- {
- temp = digits;
- digits = digits->next;
- if (o_base <= 16)
- (*out_char) (ref_str[ (int) temp->digit]);
- else
- bc_out_long (temp->digit, max_o_digit->n_len, 1, out_char);
- efree (temp);
- }
- }
-
- /* Get and print the digits of the fraction part. */
- if (num->n_scale > 0)
- {
- (*out_char) ('.');
- pre_space = 0;
- t_num = bc_copy_num (BCG(_one_));
- while (t_num->n_len <= num->n_scale) {
- bc_multiply (frac_part, base, &frac_part, num->n_scale TSRMLS_CC);
- fdigit = bc_num2long (frac_part);
- bc_int2num (&int_part, fdigit);
- bc_sub (frac_part, int_part, &frac_part, 0);
- if (o_base <= 16)
- (*out_char) (ref_str[fdigit]);
- else {
- bc_out_long (fdigit, max_o_digit->n_len, pre_space, out_char);
- pre_space = 1;
- }
- bc_multiply (t_num, base, &t_num, 0 TSRMLS_CC);
- }
- bc_free_num (&t_num);
- }
-
- /* Clean up. */
- bc_free_num (&int_part);
- bc_free_num (&frac_part);
- bc_free_num (&base);
- bc_free_num (&cur_dig);
- bc_free_num (&max_o_digit);
- }
-}
diff --git a/ext/bcmath/libbcmath/src/private.h b/ext/bcmath/libbcmath/src/private.h
deleted file mode 100644
index f8f1048ab7..0000000000
--- a/ext/bcmath/libbcmath/src/private.h
+++ /dev/null
@@ -1,43 +0,0 @@
-/* private.h: bcmath library header. */
-/*
- Copyright (C) 1991, 1992, 1993, 1994, 1997 Free Software Foundation, Inc.
- Copyright (C) 2000 Philip A. Nelson
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2 of the License, or (at your option) any later version.
-
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details. (COPYING.LIB)
-
- You should have received a copy of the GNU Lesser General Public
- License along with this library; if not, write to:
-
- The Free Software Foundation, Inc.
- 59 Temple Place, Suite 330
- Boston, MA 02111-1307 USA.
-
- You may contact the author by:
- e-mail: philnelson@acm.org
- us-mail: Philip A. Nelson
- Computer Science Department, 9062
- Western Washington University
- Bellingham, WA 98226-9062
-
-*************************************************************************/
-
-/* "Private" routines to bcmath. */
-
-/* variables */
-#if SANDER_0
-extern bc_num _bc_Free_list;
-#endif
-
-/* routines */
-int _bc_do_compare (bc_num n1, bc_num n2, int use_sign, int ignore_last);
-bc_num _bc_do_add (bc_num n1, bc_num n2, int scale_min);
-bc_num _bc_do_sub (bc_num n1, bc_num n2, int scale_min);
-void _bc_rm_leading_zeros (bc_num num);
diff --git a/ext/bcmath/libbcmath/src/raise.c b/ext/bcmath/libbcmath/src/raise.c
deleted file mode 100644
index f2f4f4a1d7..0000000000
--- a/ext/bcmath/libbcmath/src/raise.c
+++ /dev/null
@@ -1,124 +0,0 @@
-/* raise.c: bcmath library file. */
-/*
- Copyright (C) 1991, 1992, 1993, 1994, 1997 Free Software Foundation, Inc.
- Copyright (C) 2000 Philip A. Nelson
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2 of the License, or (at your option) any later version.
-
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details. (COPYING.LIB)
-
- You should have received a copy of the GNU Lesser General Public
- License along with this library; if not, write to:
-
- The Free Software Foundation, Inc.
- 59 Temple Place, Suite 330
- Boston, MA 02111-1307 USA.
-
- You may contact the author by:
- e-mail: philnelson@acm.org
- us-mail: Philip A. Nelson
- Computer Science Department, 9062
- Western Washington University
- Bellingham, WA 98226-9062
-
-*************************************************************************/
-
-#include <config.h>
-#include <stdio.h>
-#include <assert.h>
-#include <stdlib.h>
-#include <ctype.h>
-#include <stdarg.h>
-#include "bcmath.h"
-#include "private.h"
-
-
-/* Raise NUM1 to the NUM2 power. The result is placed in RESULT.
- Maximum exponent is LONG_MAX. If a NUM2 is not an integer,
- only the integer part is used. */
-
-void
-bc_raise (bc_num num1, bc_num num2, bc_num *result, int scale TSRMLS_DC)
-{
- bc_num temp, power;
- long exponent;
- int rscale;
- int pwrscale;
- int calcscale;
- char neg;
-
- /* Check the exponent for scale digits and convert to a long. */
- if (num2->n_scale != 0)
- bc_rt_warn ("non-zero scale in exponent");
- exponent = bc_num2long (num2);
- if (exponent == 0 && (num2->n_len > 1 || num2->n_value[0] != 0))
- bc_rt_error ("exponent too large in raise");
-
- /* Special case if exponent is a zero. */
- if (exponent == 0)
- {
- bc_free_num (result);
- *result = bc_copy_num (BCG(_one_));
- return;
- }
-
- /* Other initializations. */
- if (exponent < 0)
- {
- neg = TRUE;
- exponent = -exponent;
- rscale = scale;
- }
- else
- {
- neg = FALSE;
- rscale = MIN (num1->n_scale*exponent, MAX(scale, num1->n_scale));
- }
-
- /* Set initial value of temp. */
- power = bc_copy_num (num1);
- pwrscale = num1->n_scale;
- while ((exponent & 1) == 0)
- {
- pwrscale = 2*pwrscale;
- bc_multiply (power, power, &power, pwrscale TSRMLS_CC);
- exponent = exponent >> 1;
- }
- temp = bc_copy_num (power);
- calcscale = pwrscale;
- exponent = exponent >> 1;
-
- /* Do the calculation. */
- while (exponent > 0)
- {
- pwrscale = 2*pwrscale;
- bc_multiply (power, power, &power, pwrscale TSRMLS_CC);
- if ((exponent & 1) == 1) {
- calcscale = pwrscale + calcscale;
- bc_multiply (temp, power, &temp, calcscale TSRMLS_CC);
- }
- exponent = exponent >> 1;
- }
-
- /* Assign the value. */
- if (neg)
- {
- bc_divide (BCG(_one_), temp, result, rscale TSRMLS_CC);
- bc_free_num (&temp);
- }
- else
- {
- bc_free_num (result);
- *result = temp;
- if ((*result)->n_scale > rscale)
- (*result)->n_scale = rscale;
- }
- bc_free_num (&power);
-}
-
diff --git a/ext/bcmath/libbcmath/src/raisemod.c b/ext/bcmath/libbcmath/src/raisemod.c
deleted file mode 100644
index 3f6edcc2ac..0000000000
--- a/ext/bcmath/libbcmath/src/raisemod.c
+++ /dev/null
@@ -1,97 +0,0 @@
-/* raisemod.c: bcmath library file. */
-/*
- Copyright (C) 1991, 1992, 1993, 1994, 1997 Free Software Foundation, Inc.
- Copyright (C) 2000 Philip A. Nelson
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2 of the License, or (at your option) any later version.
-
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details. (COPYING.LIB)
-
- You should have received a copy of the GNU Lesser General Public
- License along with this library; if not, write to:
-
- The Free Software Foundation, Inc.
- 59 Temple Place, Suite 330
- Boston, MA 02111-1307 USA.
-
- You may contact the author by:
- e-mail: philnelson@acm.org
- us-mail: Philip A. Nelson
- Computer Science Department, 9062
- Western Washington University
- Bellingham, WA 98226-9062
-
-*************************************************************************/
-
-#include <config.h>
-#include <stdio.h>
-#include <assert.h>
-#include <stdlib.h>
-#include <ctype.h>
-#include <stdarg.h>
-#include "bcmath.h"
-#include "private.h"
-
-/* Raise BASE to the EXPO power, reduced modulo MOD. The result is
- placed in RESULT. If a EXPO is not an integer,
- only the integer part is used. */
-
-int
-bc_raisemod (bc_num base, bc_num expo, bc_num mod, bc_num *result, int scale TSRMLS_DC)
-{
- bc_num power, exponent, parity, temp;
- int rscale;
-
- /* Check for correct numbers. */
- if (bc_is_zero(mod TSRMLS_CC)) return -1;
- if (bc_is_neg(expo)) return -1;
-
- /* Set initial values. */
- power = bc_copy_num (base);
- exponent = bc_copy_num (expo);
- temp = bc_copy_num (BCG(_one_));
- bc_init_num(&parity TSRMLS_CC);
-
- /* Check the base for scale digits. */
- if (base->n_scale != 0)
- bc_rt_warn ("non-zero scale in base");
-
- /* Check the exponent for scale digits. */
- if (exponent->n_scale != 0)
- {
- bc_rt_warn ("non-zero scale in exponent");
- bc_divide (exponent, BCG(_one_), &exponent, 0 TSRMLS_CC); /*truncate */
- }
-
- /* Check the modulus for scale digits. */
- if (mod->n_scale != 0)
- bc_rt_warn ("non-zero scale in modulus");
-
- /* Do the calculation. */
- rscale = MAX(scale, base->n_scale);
- while ( !bc_is_zero(exponent TSRMLS_CC) )
- {
- (void) bc_divmod (exponent, BCG(_two_), &exponent, &parity, 0 TSRMLS_CC);
- if ( !bc_is_zero(parity TSRMLS_CC) )
- {
- bc_multiply (temp, power, &temp, rscale TSRMLS_CC);
- (void) bc_modulo (temp, mod, &temp, scale TSRMLS_CC);
- }
-
- bc_multiply (power, power, &power, rscale TSRMLS_CC);
- (void) bc_modulo (power, mod, &power, scale TSRMLS_CC);
- }
-
- /* Assign the value. */
- bc_free_num (&power);
- bc_free_num (&exponent);
- bc_free_num (result);
- *result = temp;
- return 0; /* Everything is OK. */
-}
diff --git a/ext/bcmath/libbcmath/src/recmul.c b/ext/bcmath/libbcmath/src/recmul.c
deleted file mode 100644
index c31d09dc72..0000000000
--- a/ext/bcmath/libbcmath/src/recmul.c
+++ /dev/null
@@ -1,306 +0,0 @@
-/* recmul.c: bcmath library file. */
-/*
- Copyright (C) 1991, 1992, 1993, 1994, 1997 Free Software Foundation, Inc.
- Copyright (C) 2000 Philip A. Nelson
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2 of the License, or (at your option) any later version.
-
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details. (COPYING.LIB)
-
- You should have received a copy of the GNU Lesser General Public
- License along with this library; if not, write to:
-
- The Free Software Foundation, Inc.
- 59 Temple Place, Suite 330
- Boston, MA 02111-1307 USA.
-
- You may contact the author by:
- e-mail: philnelson@acm.org
- us-mail: Philip A. Nelson
- Computer Science Department, 9062
- Western Washington University
- Bellingham, WA 98226-9062
-
-*************************************************************************/
-
-#include <config.h>
-#include <stdio.h>
-#include <assert.h>
-#include <stdlib.h>
-#include <ctype.h>
-#include <stdarg.h>
-#include "bcmath.h"
-#include "private.h"
-
-/* Recursive vs non-recursive multiply crossover ranges. */
-#if defined(MULDIGITS)
-#include "muldigits.h"
-#else
-#define MUL_BASE_DIGITS 80
-#endif
-
-int mul_base_digits = MUL_BASE_DIGITS;
-#define MUL_SMALL_DIGITS mul_base_digits/4
-
-/* Multiply utility routines */
-
-static bc_num
-new_sub_num (length, scale, value)
- int length, scale;
- char *value;
-{
- bc_num temp;
-
-#ifdef SANDER_0
- if (_bc_Free_list != NULL) {
- temp = _bc_Free_list;
- _bc_Free_list = temp->n_next;
- } else {
-#endif
- temp = (bc_num) emalloc (sizeof(bc_struct));
-#ifdef SANDER_0
- if (temp == NULL) bc_out_of_memory ();
- }
-#endif
- temp->n_sign = PLUS;
- temp->n_len = length;
- temp->n_scale = scale;
- temp->n_refs = 1;
- temp->n_ptr = NULL;
- temp->n_value = value;
- return temp;
-}
-
-static void
-_bc_simp_mul (bc_num n1, int n1len, bc_num n2, int n2len, bc_num *prod,
- int full_scale)
-{
- char *n1ptr, *n2ptr, *pvptr;
- char *n1end, *n2end; /* To the end of n1 and n2. */
- int indx, sum, prodlen;
-
- prodlen = n1len+n2len+1;
-
- *prod = bc_new_num (prodlen, 0);
-
- n1end = (char *) (n1->n_value + n1len - 1);
- n2end = (char *) (n2->n_value + n2len - 1);
- pvptr = (char *) ((*prod)->n_value + prodlen - 1);
- sum = 0;
-
- /* Here is the loop... */
- for (indx = 0; indx < prodlen-1; indx++)
- {
- n1ptr = (char *) (n1end - MAX(0, indx-n2len+1));
- n2ptr = (char *) (n2end - MIN(indx, n2len-1));
- while ((n1ptr >= n1->n_value) && (n2ptr <= n2end))
- sum += *n1ptr-- * *n2ptr++;
- *pvptr-- = sum % BASE;
- sum = sum / BASE;
- }
- *pvptr = sum;
-}
-
-
-/* A special adder/subtractor for the recursive divide and conquer
- multiply algorithm. Note: if sub is called, accum must
- be larger that what is being subtracted. Also, accum and val
- must have n_scale = 0. (e.g. they must look like integers. *) */
-static void
-_bc_shift_addsub (bc_num accum, bc_num val, int shift, int sub)
-{
- signed char *accp, *valp;
- int count, carry;
-
- count = val->n_len;
- if (val->n_value[0] == 0)
- count--;
- assert (accum->n_len+accum->n_scale >= shift+count);
-
- /* Set up pointers and others */
- accp = (signed char *)(accum->n_value +
- accum->n_len + accum->n_scale - shift - 1);
- valp = (signed char *)(val->n_value + val->n_len - 1);
- carry = 0;
-
- if (sub) {
- /* Subtraction, carry is really borrow. */
- while (count--) {
- *accp -= *valp-- + carry;
- if (*accp < 0) {
- carry = 1;
- *accp-- += BASE;
- } else {
- carry = 0;
- accp--;
- }
- }
- while (carry) {
- *accp -= carry;
- if (*accp < 0)
- *accp-- += BASE;
- else
- carry = 0;
- }
- } else {
- /* Addition */
- while (count--) {
- *accp += *valp-- + carry;
- if (*accp > (BASE-1)) {
- carry = 1;
- *accp-- -= BASE;
- } else {
- carry = 0;
- accp--;
- }
- }
- while (carry) {
- *accp += carry;
- if (*accp > (BASE-1))
- *accp-- -= BASE;
- else
- carry = 0;
- }
- }
-}
-
-/* Recursive divide and conquer multiply algorithm.
- Based on
- Let u = u0 + u1*(b^n)
- Let v = v0 + v1*(b^n)
- Then uv = (B^2n+B^n)*u1*v1 + B^n*(u1-u0)*(v0-v1) + (B^n+1)*u0*v0
-
- B is the base of storage, number of digits in u1,u0 close to equal.
-*/
-static void
-_bc_rec_mul (bc_num u, int ulen, bc_num v, int vlen, bc_num *prod,
- int full_scale TSRMLS_DC)
-{
- bc_num u0, u1, v0, v1;
- int u0len, v0len;
- bc_num m1, m2, m3, d1, d2;
- int n, prodlen, m1zero;
- int d1len, d2len;
-
- /* Base case? */
- if ((ulen+vlen) < mul_base_digits
- || ulen < MUL_SMALL_DIGITS
- || vlen < MUL_SMALL_DIGITS ) {
- _bc_simp_mul (u, ulen, v, vlen, prod, full_scale);
- return;
- }
-
- /* Calculate n -- the u and v split point in digits. */
- n = (MAX(ulen, vlen)+1) / 2;
-
- /* Split u and v. */
- if (ulen < n) {
- u1 = bc_copy_num (BCG(_zero_));
- u0 = new_sub_num (ulen,0, u->n_value);
- } else {
- u1 = new_sub_num (ulen-n, 0, u->n_value);
- u0 = new_sub_num (n, 0, u->n_value+ulen-n);
- }
- if (vlen < n) {
- v1 = bc_copy_num (BCG(_zero_));
- v0 = new_sub_num (vlen,0, v->n_value);
- } else {
- v1 = new_sub_num (vlen-n, 0, v->n_value);
- v0 = new_sub_num (n, 0, v->n_value+vlen-n);
- }
- _bc_rm_leading_zeros (u1);
- _bc_rm_leading_zeros (u0);
- u0len = u0->n_len;
- _bc_rm_leading_zeros (v1);
- _bc_rm_leading_zeros (v0);
- v0len = v0->n_len;
-
- m1zero = bc_is_zero(u1 TSRMLS_CC) || bc_is_zero(v1 TSRMLS_CC);
-
- /* Calculate sub results ... */
-
- bc_init_num(&d1 TSRMLS_CC);
- bc_init_num(&d2 TSRMLS_CC);
- bc_sub (u1, u0, &d1, 0);
- d1len = d1->n_len;
- bc_sub (v0, v1, &d2, 0);
- d2len = d2->n_len;
-
-
- /* Do recursive multiplies and shifted adds. */
- if (m1zero)
- m1 = bc_copy_num (BCG(_zero_));
- else
- _bc_rec_mul (u1, u1->n_len, v1, v1->n_len, &m1, 0 TSRMLS_CC);
-
- if (bc_is_zero(d1 TSRMLS_CC) || bc_is_zero(d2 TSRMLS_CC))
- m2 = bc_copy_num (BCG(_zero_));
- else
- _bc_rec_mul (d1, d1len, d2, d2len, &m2, 0 TSRMLS_CC);
-
- if (bc_is_zero(u0 TSRMLS_CC) || bc_is_zero(v0 TSRMLS_CC))
- m3 = bc_copy_num (BCG(_zero_));
- else
- _bc_rec_mul (u0, u0->n_len, v0, v0->n_len, &m3, 0 TSRMLS_CC);
-
- /* Initialize product */
- prodlen = ulen+vlen+1;
- *prod = bc_new_num(prodlen, 0);
-
- if (!m1zero) {
- _bc_shift_addsub (*prod, m1, 2*n, 0);
- _bc_shift_addsub (*prod, m1, n, 0);
- }
- _bc_shift_addsub (*prod, m3, n, 0);
- _bc_shift_addsub (*prod, m3, 0, 0);
- _bc_shift_addsub (*prod, m2, n, d1->n_sign != d2->n_sign);
-
- /* Now clean up! */
- bc_free_num (&u1);
- bc_free_num (&u0);
- bc_free_num (&v1);
- bc_free_num (&m1);
- bc_free_num (&v0);
- bc_free_num (&m2);
- bc_free_num (&m3);
- bc_free_num (&d1);
- bc_free_num (&d2);
-}
-
-/* The multiply routine. N2 times N1 is put int PROD with the scale of
- the result being MIN(N2 scale+N1 scale, MAX (SCALE, N2 scale, N1 scale)).
- */
-
-void
-bc_multiply (bc_num n1, bc_num n2, bc_num *prod, int scale TSRMLS_DC)
-{
- bc_num pval;
- int len1, len2;
- int full_scale, prod_scale;
-
- /* Initialize things. */
- len1 = n1->n_len + n1->n_scale;
- len2 = n2->n_len + n2->n_scale;
- full_scale = n1->n_scale + n2->n_scale;
- prod_scale = MIN(full_scale,MAX(scale,MAX(n1->n_scale,n2->n_scale)));
-
- /* Do the multiply */
- _bc_rec_mul (n1, len1, n2, len2, &pval, full_scale TSRMLS_CC);
-
- /* Assign to prod and clean up the number. */
- pval->n_sign = ( n1->n_sign == n2->n_sign ? PLUS : MINUS );
- pval->n_value = pval->n_ptr;
- pval->n_len = len2 + len1 + 1 - full_scale;
- pval->n_scale = prod_scale;
- _bc_rm_leading_zeros (pval);
- if (bc_is_zero (pval TSRMLS_CC))
- pval->n_sign = PLUS;
- bc_free_num (prod);
- *prod = pval;
-}
diff --git a/ext/bcmath/libbcmath/src/rmzero.c b/ext/bcmath/libbcmath/src/rmzero.c
deleted file mode 100644
index 63f7a0cb79..0000000000
--- a/ext/bcmath/libbcmath/src/rmzero.c
+++ /dev/null
@@ -1,55 +0,0 @@
-/* rmzero.c: bcmath library file. */
-/*
- Copyright (C) 1991, 1992, 1993, 1994, 1997 Free Software Foundation, Inc.
- Copyright (C) 2000 Philip A. Nelson
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2 of the License, or (at your option) any later version.
-
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details. (COPYING.LIB)
-
- You should have received a copy of the GNU Lesser General Public
- License along with this library; if not, write to:
-
- The Free Software Foundation, Inc.
- 59 Temple Place, Suite 330
- Boston, MA 02111-1307 USA.
-
- You may contact the author by:
- e-mail: philnelson@acm.org
- us-mail: Philip A. Nelson
- Computer Science Department, 9062
- Western Washington University
- Bellingham, WA 98226-9062
-
-*************************************************************************/
-
-#include <config.h>
-#include <stdio.h>
-#include <assert.h>
-#include <stdlib.h>
-#include <ctype.h>
-#include <stdarg.h>
-#include "bcmath.h"
-#include "private.h"
-
-/* For many things, we may have leading zeros in a number NUM.
- _bc_rm_leading_zeros just moves the data "value" pointer to the
- correct place and adjusts the length. */
-
- void
-_bc_rm_leading_zeros (num)
- bc_num num;
-{
- /* We can move n_value to point to the first non zero digit! */
- while (*num->n_value == 0 && num->n_len > 1) {
- num->n_value++;
- num->n_len--;
- }
-}
-
diff --git a/ext/bcmath/libbcmath/src/rt.c b/ext/bcmath/libbcmath/src/rt.c
deleted file mode 100644
index 2479104fe4..0000000000
--- a/ext/bcmath/libbcmath/src/rt.c
+++ /dev/null
@@ -1,65 +0,0 @@
-/* rt.c: bcmath library file. */
-/*
- Copyright (C) 1991, 1992, 1993, 1994, 1997 Free Software Foundation, Inc.
- Copyright (C) 2000 Philip A. Nelson
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2 of the License, or (at your option) any later version.
-
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details. (COPYING.LIB)
-
- You should have received a copy of the GNU Lesser General Public
- License along with this library; if not, write to:
-
- The Free Software Foundation, Inc.
- 59 Temple Place, Suite 330
- Boston, MA 02111-1307 USA.
-
- You may contact the author by:
- e-mail: philnelson@acm.org
- us-mail: Philip A. Nelson
- Computer Science Department, 9062
- Western Washington University
- Bellingham, WA 98226-9062
-
-*************************************************************************/
-
-#include <config.h>
-#include <stdio.h>
-#include <assert.h>
-#include <stdlib.h>
-#include <ctype.h>
-#include <stdarg.h>
-#include "bcmath.h"
-#include "private.h"
-
-
-void bc_rt_warn (char *mesg ,...)
-{
- va_list args;
- char error_mesg [255];
-
- va_start (args, mesg);
- vsprintf (error_mesg, mesg, args);
- va_end (args);
-
- fprintf (stderr, "bc math warning: %s\n", error_mesg);
-}
-
-
-void bc_rt_error (char *mesg ,...)
-{
- va_list args;
- char error_mesg [255];
-
- va_start (args, mesg);
- vsprintf (error_mesg, mesg, args);
- va_end (args);
-
- fprintf (stderr, "bc math error: %s\n", error_mesg);
-}
diff --git a/ext/bcmath/libbcmath/src/sqrt.c b/ext/bcmath/libbcmath/src/sqrt.c
deleted file mode 100644
index 5db5113eb5..0000000000
--- a/ext/bcmath/libbcmath/src/sqrt.c
+++ /dev/null
@@ -1,129 +0,0 @@
-/* sqrt.c: bcmath library file. */
-/*
- Copyright (C) 1991, 1992, 1993, 1994, 1997 Free Software Foundation, Inc.
- Copyright (C) 2000 Philip A. Nelson
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2 of the License, or (at your option) any later version.
-
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details. (COPYING.LIB)
-
- You should have received a copy of the GNU Lesser General Public
- License along with this library; if not, write to:
-
- The Free Software Foundation, Inc.
- 59 Temple Place, Suite 330
- Boston, MA 02111-1307 USA.
-
- You may contact the author by:
- e-mail: philnelson@acm.org
- us-mail: Philip A. Nelson
- Computer Science Department, 9062
- Western Washington University
- Bellingham, WA 98226-9062
-
-*************************************************************************/
-
-#include <config.h>
-#include <stdio.h>
-#include <assert.h>
-#include <stdlib.h>
-#include <ctype.h>
-#include <stdarg.h>
-#include "bcmath.h"
-#include "private.h"
-
-/* Take the square root NUM and return it in NUM with SCALE digits
- after the decimal place. */
-
-int
-bc_sqrt (bc_num *num, int scale TSRMLS_DC)
-{
- int rscale, cmp_res, done;
- int cscale;
- bc_num guess, guess1, point5, diff;
-
- /* Initial checks. */
- cmp_res = bc_compare (*num, BCG(_zero_));
- if (cmp_res < 0)
- return 0; /* error */
- else
- {
- if (cmp_res == 0)
- {
- bc_free_num (num);
- *num = bc_copy_num (BCG(_zero_));
- return 1;
- }
- }
- cmp_res = bc_compare (*num, BCG(_one_));
- if (cmp_res == 0)
- {
- bc_free_num (num);
- *num = bc_copy_num (BCG(_one_));
- return 1;
- }
-
- /* Initialize the variables. */
- rscale = MAX (scale, (*num)->n_scale);
- bc_init_num(&guess TSRMLS_CC);
- bc_init_num(&guess1 TSRMLS_CC);
- bc_init_num(&diff TSRMLS_CC);
- point5 = bc_new_num (1,1);
- point5->n_value[1] = 5;
-
-
- /* Calculate the initial guess. */
- if (cmp_res < 0)
- {
- /* The number is between 0 and 1. Guess should start at 1. */
- guess = bc_copy_num (BCG(_one_));
- cscale = (*num)->n_scale;
- }
- else
- {
- /* The number is greater than 1. Guess should start at 10^(exp/2). */
- bc_int2num (&guess,10);
-
- bc_int2num (&guess1,(*num)->n_len);
- bc_multiply (guess1, point5, &guess1, 0 TSRMLS_CC);
- guess1->n_scale = 0;
- bc_raise (guess, guess1, &guess, 0 TSRMLS_CC);
- bc_free_num (&guess1);
- cscale = 3;
- }
-
- /* Find the square root using Newton's algorithm. */
- done = FALSE;
- while (!done)
- {
- bc_free_num (&guess1);
- guess1 = bc_copy_num (guess);
- bc_divide (*num, guess, &guess, cscale TSRMLS_CC);
- bc_add (guess, guess1, &guess, 0);
- bc_multiply (guess, point5, &guess, cscale TSRMLS_CC);
- bc_sub (guess, guess1, &diff, cscale+1);
- if (bc_is_near_zero (diff, cscale))
- {
- if (cscale < rscale+1)
- cscale = MIN (cscale*3, rscale+1);
- else
- done = TRUE;
- }
- }
-
- /* Assign the number and clean up. */
- bc_free_num (num);
- bc_divide (guess,BCG(_one_),num,rscale TSRMLS_CC);
- bc_free_num (&guess);
- bc_free_num (&guess1);
- bc_free_num (&point5);
- bc_free_num (&diff);
- return 1;
-}
-
diff --git a/ext/bcmath/libbcmath/src/str2num.c b/ext/bcmath/libbcmath/src/str2num.c
deleted file mode 100644
index c484c158e5..0000000000
--- a/ext/bcmath/libbcmath/src/str2num.c
+++ /dev/null
@@ -1,109 +0,0 @@
-/* str2num.c: bcmath library file. */
-/*
- Copyright (C) 1991, 1992, 1993, 1994, 1997 Free Software Foundation, Inc.
- Copyright (C) 2000 Philip A. Nelson
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2 of the License, or (at your option) any later version.
-
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details. (COPYING.LIB)
-
- You should have received a copy of the GNU Lesser General Public
- License along with this library; if not, write to:
-
- The Free Software Foundation, Inc.
- 59 Temple Place, Suite 330
- Boston, MA 02111-1307 USA.
-
- You may contact the author by:
- e-mail: philnelson@acm.org
- us-mail: Philip A. Nelson
- Computer Science Department, 9062
- Western Washington University
- Bellingham, WA 98226-9062
-
-*************************************************************************/
-
-#include <config.h>
-#include <stdio.h>
-#include <assert.h>
-#include <stdlib.h>
-#include <ctype.h>
-#include <stdarg.h>
-#include "bcmath.h"
-#include "private.h"
-
-/* Convert strings to bc numbers. Base 10 only.*/
-
-void
-bc_str2num (bc_num *num, char *str, int scale TSRMLS_DC)
-{
- int digits, strscale;
- char *ptr, *nptr;
- char zero_int;
-
- /* Prepare num. */
- bc_free_num (num);
-
- /* Check for valid number and count digits. */
- ptr = str;
- digits = 0;
- strscale = 0;
- zero_int = FALSE;
- if ( (*ptr == '+') || (*ptr == '-')) ptr++; /* Sign */
- while (*ptr == '0') ptr++; /* Skip leading zeros. */
- while (isdigit((int)*ptr)) ptr++, digits++; /* digits */
- if (*ptr == '.') ptr++; /* decimal point */
- while (isdigit((int)*ptr)) ptr++, strscale++; /* digits */
- if ((*ptr != '\0') || (digits+strscale == 0))
- {
- *num = bc_copy_num (BCG(_zero_));
- return;
- }
-
- /* Adjust numbers and allocate storage and initialize fields. */
- strscale = MIN(strscale, scale);
- if (digits == 0)
- {
- zero_int = TRUE;
- digits = 1;
- }
- *num = bc_new_num (digits, strscale);
-
- /* Build the whole number. */
- ptr = str;
- if (*ptr == '-')
- {
- (*num)->n_sign = MINUS;
- ptr++;
- }
- else
- {
- (*num)->n_sign = PLUS;
- if (*ptr == '+') ptr++;
- }
- while (*ptr == '0') ptr++; /* Skip leading zeros. */
- nptr = (*num)->n_value;
- if (zero_int)
- {
- *nptr++ = 0;
- digits = 0;
- }
- for (;digits > 0; digits--)
- *nptr++ = CH_VAL(*ptr++);
-
-
- /* Build the fractional part. */
- if (strscale > 0)
- {
- ptr++; /* skip the decimal point! */
- for (;strscale > 0; strscale--)
- *nptr++ = CH_VAL(*ptr++);
- }
-}
-
diff --git a/ext/bcmath/libbcmath/src/sub.c b/ext/bcmath/libbcmath/src/sub.c
deleted file mode 100644
index 2dd8eb5ecc..0000000000
--- a/ext/bcmath/libbcmath/src/sub.c
+++ /dev/null
@@ -1,90 +0,0 @@
-/* sub.c: bcmath library file. */
-/*
- Copyright (C) 1991, 1992, 1993, 1994, 1997 Free Software Foundation, Inc.
- Copyright (C) 2000 Philip A. Nelson
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2 of the License, or (at your option) any later version.
-
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details. (COPYING.LIB)
-
- You should have received a copy of the GNU Lesser General Public
- License along with this library; if not, write to:
-
- The Free Software Foundation, Inc.
- 59 Temple Place, Suite 330
- Boston, MA 02111-1307 USA.
-
- You may contact the author by:
- e-mail: philnelson@acm.org
- us-mail: Philip A. Nelson
- Computer Science Department, 9062
- Western Washington University
- Bellingham, WA 98226-9062
-
-*************************************************************************/
-
-#include <config.h>
-#include <stdio.h>
-#include <assert.h>
-#include <stdlib.h>
-#include <ctype.h>
-#include <stdarg.h>
-#include "bcmath.h"
-#include "private.h"
-
-
-/* Here is the full subtract routine that takes care of negative numbers.
- N2 is subtracted from N1 and the result placed in RESULT. SCALE_MIN
- is the minimum scale for the result. */
-
-void
-bc_sub (n1, n2, result, scale_min)
- bc_num n1, n2, *result;
- int scale_min;
-{
- bc_num diff = NULL;
- int cmp_res;
- int res_scale;
-
- if (n1->n_sign != n2->n_sign)
- {
- diff = _bc_do_add (n1, n2, scale_min);
- diff->n_sign = n1->n_sign;
- }
- else
- {
- /* subtraction must be done. */
- /* Compare magnitudes. */
- cmp_res = _bc_do_compare (n1, n2, FALSE, FALSE);
- switch (cmp_res)
- {
- case -1:
- /* n1 is less than n2, subtract n1 from n2. */
- diff = _bc_do_sub (n2, n1, scale_min);
- diff->n_sign = (n2->n_sign == PLUS ? MINUS : PLUS);
- break;
- case 0:
- /* They are equal! return zero! */
- res_scale = MAX (scale_min, MAX(n1->n_scale, n2->n_scale));
- diff = bc_new_num (1, res_scale);
- memset (diff->n_value, 0, res_scale+1);
- break;
- case 1:
- /* n2 is less than n1, subtract n2 from n1. */
- diff = _bc_do_sub (n1, n2, scale_min);
- diff->n_sign = n1->n_sign;
- break;
- }
- }
-
- /* Clean up and return. */
- bc_free_num (result);
- *result = diff;
-}
-
diff --git a/ext/bcmath/libbcmath/src/zero.c b/ext/bcmath/libbcmath/src/zero.c
deleted file mode 100644
index 4ee249ee71..0000000000
--- a/ext/bcmath/libbcmath/src/zero.c
+++ /dev/null
@@ -1,64 +0,0 @@
-/* zero.c: bcmath library file. */
-/*
- Copyright (C) 1991, 1992, 1993, 1994, 1997 Free Software Foundation, Inc.
- Copyright (C) 2000 Philip A. Nelson
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2 of the License, or (at your option) any later version.
-
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details. (COPYING.LIB)
-
- You should have received a copy of the GNU Lesser General Public
- License along with this library; if not, write to:
-
- The Free Software Foundation, Inc.
- 59 Temple Place, Suite 330
- Boston, MA 02111-1307 USA.
-
- You may contact the author by:
- e-mail: philnelson@acm.org
- us-mail: Philip A. Nelson
- Computer Science Department, 9062
- Western Washington University
- Bellingham, WA 98226-9062
-
-*************************************************************************/
-
-#include <config.h>
-#include <stdio.h>
-#include <assert.h>
-#include <stdlib.h>
-#include <ctype.h>
-#include <stdarg.h>
-#include "bcmath.h"
-#include "private.h"
-
-/* In some places we need to check if the number NUM is zero. */
-
-char
-bc_is_zero (bc_num num TSRMLS_DC)
-{
- int count;
- char *nptr;
-
- /* Quick check. */
- if (num == BCG(_zero_)) return TRUE;
-
- /* Initialize */
- count = num->n_len + num->n_scale;
- nptr = num->n_value;
-
- /* The check */
- while ((count > 0) && (*nptr++ == 0)) count--;
-
- if (count != 0)
- return FALSE;
- else
- return TRUE;
-}
-
diff --git a/ext/bcmath/package.xml b/ext/bcmath/package.xml
deleted file mode 100644
index 876297e9f8..0000000000
--- a/ext/bcmath/package.xml
+++ /dev/null
@@ -1,94 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1" ?>
-<!DOCTYPE package SYSTEM "../pear/package.dtd">
-<package>
- <name>bcmath</name>
- <summary>Arbitrary Precision Mathematics Functions</summary>
- <maintainers>
- <maintainer>
- <user>andi</user>
- <name>Andi Gutmans</name>
- <email>andi@php.net</email>
- <role>lead</role>
- </maintainer>
- </maintainers>
- <description>
-For arbitrary precision mathematics PHP offers the Binary Calculator
-which supports numbers of any size and precision, represented as strings.
- </description>
- <license>PHP</license>
- <release>
- <state>beta</state>
- <version>5.0.0rc1</version>
- <date>2004-03-19</date>
- <notes>
-package.xml added to support intallation using pear installer
- </notes>
- <filelist>
- <file role="doc" name="CREDITS"/>
- <file role="src" name="config.m4"/>
- <file role="src" name="config.w32"/>
- <file role="src" name="bcmath.c"/>
- <file role="src" name="php_bcmath.h"/>
- <file role="src" name="number.c"/>
- <file role="src" name="number.h"/>
- <file role="doc" name="libbcmath/AUTHORS"/>
- <file role="doc" name="libbcmath/COPYING.LIB"/>
- <file role="doc" name="libbcmath/ChangeLog"/>
- <file role="doc" name="libbcmath/FAQ"/>
- <file role="doc" name="libbcmath/INSTALL"/>
- <file role="doc" name="libbcmath/NEWS"/>
- <file role="doc" name="libbcmath/README"/>
- <file role="src" name="libbcmath/src/Makefile.am"/>
- <file role="src" name="libbcmath/src/add.c"/>
- <file role="src" name="libbcmath/src/bcmath.h"/>
- <file role="src" name="libbcmath/src/compare.c"/>
- <file role="src" name="libbcmath/src/config.h"/>
- <file role="src" name="libbcmath/src/debug.c"/>
- <file role="src" name="libbcmath/src/div.c"/>
- <file role="src" name="libbcmath/src/divmod.c"/>
- <file role="src" name="libbcmath/src/doaddsub.c"/>
- <file role="src" name="libbcmath/src/init.c"/>
- <file role="src" name="libbcmath/src/int2num.c"/>
- <file role="src" name="libbcmath/src/nearzero.c"/>
- <file role="src" name="libbcmath/src/neg.c"/>
- <file role="src" name="libbcmath/src/num2long.c"/>
- <file role="src" name="libbcmath/src/num2str.c"/>
- <file role="src" name="libbcmath/src/outofmem.c"/>
- <file role="src" name="libbcmath/src/output.c"/>
- <file role="src" name="libbcmath/src/private.h"/>
- <file role="src" name="libbcmath/src/raise.c"/>
- <file role="src" name="libbcmath/src/raisemod.c"/>
- <file role="src" name="libbcmath/src/recmul.c"/>
- <file role="src" name="libbcmath/src/rmzero.c"/>
- <file role="src" name="libbcmath/src/rt.c"/>
- <file role="src" name="libbcmath/src/sqrt.c"/>
- <file role="src" name="libbcmath/src/str2num.c"/>
- <file role="src" name="libbcmath/src/sub.c"/>
- <file role="src" name="libbcmath/src/zero.c"/>
- <file role="src" name="libbcmath/Makefile.am"/>
- <file role="src" name="libbcmath/acconfig.h"/>
- <file role="src" name="libbcmath/aclocal.m4"/>
- <file role="src" name="libbcmath/config.h.in"/>
- <file role="src" name="libbcmath/configure"/>
- <file role="src" name="libbcmath/configure.in"/>
- <file role="src" name="libbcmath/install-sh"/>
- <file role="src" name="libbcmath/missing"/>
- <file role="src" name="libbcmath/mkinstalldirs"/>
- <file role="test" name="tests/bcadd.phpt"/>
- <file role="test" name="tests/bccomp.phpt"/>
- <file role="test" name="tests/bcdiv.phpt"/>
- <file role="test" name="tests/bcmod.phpt"/>
- <file role="test" name="tests/bcmul.phpt"/>
- <file role="test" name="tests/bcpow.phpt"/>
- <file role="test" name="tests/bcscale.phpt"/>
- <file role="test" name="tests/bcsqrt.phpt"/>
- <file role="test" name="tests/bcsub.phpt"/>
- </filelist>
- <deps>
- <dep type="php" rel="ge" version="5" />
- </deps>
- </release>
-</package>
-<!--
-vim:et:ts=1:sw=1
--->
diff --git a/ext/bcmath/php_bcmath.h b/ext/bcmath/php_bcmath.h
deleted file mode 100644
index c99fd2534c..0000000000
--- a/ext/bcmath/php_bcmath.h
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Andi Gutmans <andi@zend.com> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifndef PHP_BCMATH_H
-#define PHP_BCMATH_H
-
-#if HAVE_BCMATH
-
-#include "libbcmath/src/bcmath.h"
-
-extern zend_module_entry bcmath_module_entry;
-#define phpext_bcmath_ptr &bcmath_module_entry
-
-PHP_MINIT_FUNCTION(bcmath);
-PHP_MSHUTDOWN_FUNCTION(bcmath);
-PHP_RINIT_FUNCTION(bcmath);
-PHP_RSHUTDOWN_FUNCTION(bcmath);
-PHP_MINFO_FUNCTION(bcmath);
-
-PHP_FUNCTION(bcadd);
-PHP_FUNCTION(bcsub);
-PHP_FUNCTION(bcmul);
-PHP_FUNCTION(bcdiv);
-PHP_FUNCTION(bcmod);
-PHP_FUNCTION(bcpow);
-PHP_FUNCTION(bcsqrt);
-PHP_FUNCTION(bccomp);
-PHP_FUNCTION(bcscale);
-PHP_FUNCTION(bcpowmod);
-
-ZEND_BEGIN_MODULE_GLOBALS(bcmath)
- bc_num _zero_;
- bc_num _one_;
- bc_num _two_;
- long bc_precision;
-ZEND_END_MODULE_GLOBALS(bcmath)
-
-#if ZTS
-#define BCG(v) TSRMG(bcmath_globals_id, zend_bcmath_globals *, v)
-#else
-#define BCG(v) (bcmath_globals.v)
-#endif
-
-ZEND_EXTERN_MODULE_GLOBALS(bcmath)
-
-#else
-
-#define phpext_bcmath_ptr NULL
-
-#endif
-
-#endif /* PHP_BCMATH_H */
diff --git a/ext/bcmath/tests/bcadd.phpt b/ext/bcmath/tests/bcadd.phpt
deleted file mode 100644
index 61552eecde..0000000000
--- a/ext/bcmath/tests/bcadd.phpt
+++ /dev/null
@@ -1,16 +0,0 @@
---TEST--
-bcadd() function
---SKIPIF--
-<?php if(!extension_loaded("bcmath")) print "skip"; ?>
---INI--
-bcmath.scale=0
---FILE--
-<?php
-echo bcadd("1", "2"),"\n";
-echo bcadd("-1", "5", 4),"\n";
-echo bcadd("1928372132132819737213", "8728932001983192837219398127471", 2),"\n";
-?>
---EXPECT--
-3
-4.0000
-8728932003911564969352217864684.00
diff --git a/ext/bcmath/tests/bccomp.phpt b/ext/bcmath/tests/bccomp.phpt
deleted file mode 100644
index b2bf9f4ac2..0000000000
--- a/ext/bcmath/tests/bccomp.phpt
+++ /dev/null
@@ -1,18 +0,0 @@
---TEST--
-bccomp() function
---SKIPIF--
-<?php if(!extension_loaded("bcmath")) print "skip"; ?>
---INI--
-bcmath.scale=0
---FILE--
-<?php
-echo bccomp("-1", "5", 4),"\n";
-echo bccomp("1928372132132819737213", "8728932001983192837219398127471"),"\n";
-echo bccomp("1.00000000000000000001", "1", 2),"\n";
-echo bccomp("97321", "2321"),"\n";
-?>
---EXPECT--
--1
--1
-0
-1
diff --git a/ext/bcmath/tests/bcdiv.phpt b/ext/bcmath/tests/bcdiv.phpt
deleted file mode 100644
index cda19496d5..0000000000
--- a/ext/bcmath/tests/bcdiv.phpt
+++ /dev/null
@@ -1,18 +0,0 @@
---TEST--
-bcdiv() function
---SKIPIF--
-<?php if(!extension_loaded("bcmath")) print "skip"; ?>
---INI--
-bcmath.scale=0
---FILE--
-<?php
-echo bcdiv("1", "2"),"\n";
-echo bcdiv("1", "2", 2),"\n";
-echo bcdiv("-1", "5", 4),"\n";
-echo bcdiv("8728932001983192837219398127471", "1928372132132819737213", 2),"\n";
-?>
---EXPECT--
-0
-0.50
--0.2000
-4526580661.75
diff --git a/ext/bcmath/tests/bcmod.phpt b/ext/bcmath/tests/bcmod.phpt
deleted file mode 100644
index 1d7be48a75..0000000000
--- a/ext/bcmath/tests/bcmod.phpt
+++ /dev/null
@@ -1,16 +0,0 @@
---TEST--
-bcmod() function
---SKIPIF--
-<?php if(!extension_loaded("bcmath")) print "skip"; ?>
---INI--
-bcmath.scale=0
---FILE--
-<?php
-echo bcmod("11", "2"),"\n";
-echo bcmod("-1", "5"),"\n";
-echo bcmod("8728932001983192837219398127471", "1928372132132819737213"),"\n";
-?>
---EXPECT--
-1
--1
-1459434331351930289678
diff --git a/ext/bcmath/tests/bcmul.phpt b/ext/bcmath/tests/bcmul.phpt
deleted file mode 100644
index 0ff322fe32..0000000000
--- a/ext/bcmath/tests/bcmul.phpt
+++ /dev/null
@@ -1,18 +0,0 @@
---TEST--
-bcmul() function
---SKIPIF--
-<?php if(!extension_loaded("bcmath")) print "skip"; ?>
---INI--
-bcmath.scale=0
---FILE--
-<?php
-echo bcmul("1", "2"),"\n";
-echo bcmul("-3", "5"),"\n";
-echo bcmul("1234567890", "9876543210"),"\n";
-echo bcmul("2.5", "1.5", 2),"\n";
-?>
---EXPECT--
-2
--15
-12193263111263526900
-3.75
diff --git a/ext/bcmath/tests/bcpow.phpt b/ext/bcmath/tests/bcpow.phpt
deleted file mode 100644
index bdd4e08cab..0000000000
--- a/ext/bcmath/tests/bcpow.phpt
+++ /dev/null
@@ -1,16 +0,0 @@
---TEST--
-bcpow() function
---SKIPIF--
-<?php if(!extension_loaded("bcmath")) print "skip"; ?>
---INI--
-bcmath.scale=0
---FILE--
-<?php
-echo bcpow("1", "2"),"\n";
-echo bcpow("-2", "5", 4),"\n";
-echo bcpow("2", "64"),"\n";
-?>
---EXPECT--
-1
--32
-18446744073709551616
diff --git a/ext/bcmath/tests/bcscale.phpt b/ext/bcmath/tests/bcscale.phpt
deleted file mode 100644
index 4fc2f85eb9..0000000000
--- a/ext/bcmath/tests/bcscale.phpt
+++ /dev/null
@@ -1,21 +0,0 @@
---TEST--
-bcscale() function
---SKIPIF--
-<?php if(!extension_loaded("bcmath")) print "skip"; ?>
---INI--
-bcmath.scale=0
---FILE--
-<?php
-echo bcadd("1", "2"),"\n";
-bcscale(2);
-echo bcadd("1", "2"),"\n";
-bcscale(10);
-echo bcadd("1", "2"),"\n";
-bcscale(0);
-echo bcadd("1", "2"),"\n";
-?>
---EXPECT--
-3
-3.00
-3.0000000000
-3
diff --git a/ext/bcmath/tests/bcsqrt.phpt b/ext/bcmath/tests/bcsqrt.phpt
deleted file mode 100644
index 46d92fd5ed..0000000000
--- a/ext/bcmath/tests/bcsqrt.phpt
+++ /dev/null
@@ -1,14 +0,0 @@
---TEST--
-bcsqrt() function
---SKIPIF--
-<?php if(!extension_loaded("bcmath")) print "skip"; ?>
---INI--
-bcmath.scale=0
---FILE--
-<?php
-echo bcsqrt("9"),"\n";
-echo bcsqrt("1928372132132819737213", 5),"\n";
-?>
---EXPECT--
-3
-43913234134.28826
diff --git a/ext/bcmath/tests/bcsub.phpt b/ext/bcmath/tests/bcsub.phpt
deleted file mode 100644
index 71726492f7..0000000000
--- a/ext/bcmath/tests/bcsub.phpt
+++ /dev/null
@@ -1,16 +0,0 @@
---TEST--
-bcsub() function
---SKIPIF--
-<?php if(!extension_loaded("bcmath")) print "skip"; ?>
---INI--
-bcmath.scale=0
---FILE--
-<?php
-echo bcsub("1", "2"),"\n";
-echo bcsub("-1", "5", 4),"\n";
-echo bcsub("8728932001983192837219398127471", "1928372132132819737213", 2),"\n";
-?>
---EXPECT--
--1
--6.0000
-8728932000054820705086578390258.00
diff --git a/ext/bz2/CREDITS b/ext/bz2/CREDITS
deleted file mode 100644
index 67dff9f41d..0000000000
--- a/ext/bz2/CREDITS
+++ /dev/null
@@ -1,2 +0,0 @@
-Bzip2
-Sterling Hughes
diff --git a/ext/bz2/bz2.c b/ext/bz2/bz2.c
deleted file mode 100644
index e51c993b5a..0000000000
--- a/ext/bz2/bz2.c
+++ /dev/null
@@ -1,549 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Sterling Hughes <sterling@php.net> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "php.h"
-#include "php_bz2.h"
-
-#if HAVE_BZ2
-
-/* PHP Includes */
-#include "ext/standard/file.h"
-#include "ext/standard/info.h"
-#include "ext/standard/php_string.h"
-
-/* for fileno() */
-#include <stdio.h>
-
-/* Internal error constants */
-#define PHP_BZ_ERRNO 0
-#define PHP_BZ_ERRSTR 1
-#define PHP_BZ_ERRBOTH 2
-
-/* Blocksize of the decompression buffer */
-#define PHP_BZ_DECOMPRESS_SIZE 4096
-
-function_entry bz2_functions[] = {
- PHP_FE(bzopen, NULL)
- PHP_FE(bzread, NULL)
- PHP_FALIAS(bzwrite, fwrite, NULL)
- PHP_FALIAS(bzflush, fflush, NULL)
- PHP_FALIAS(bzclose, fclose, NULL)
- PHP_FE(bzerrno, NULL)
- PHP_FE(bzerrstr, NULL)
- PHP_FE(bzerror, NULL)
- PHP_FE(bzcompress, NULL)
- PHP_FE(bzdecompress, NULL)
- {NULL, NULL, NULL}
-};
-
-zend_module_entry bz2_module_entry = {
- STANDARD_MODULE_HEADER,
- "bz2",
- bz2_functions,
- PHP_MINIT(bz2),
- PHP_MSHUTDOWN(bz2),
- NULL,
- NULL,
- PHP_MINFO(bz2),
- NO_VERSION_YET,
- STANDARD_MODULE_PROPERTIES
-};
-
-#ifdef COMPILE_DL_BZ2
-ZEND_GET_MODULE(bz2)
-#endif
-
-struct php_bz2_stream_data_t {
- BZFILE *bz_file;
- php_stream *stream;
-};
-
-/* {{{ BZip2 stream implementation */
-
-static size_t php_bz2iop_read(php_stream *stream, char *buf, size_t count TSRMLS_DC)
-{
- struct php_bz2_stream_data_t *self = (struct php_bz2_stream_data_t *) stream->abstract;
- size_t ret;
-
- ret = BZ2_bzread(self->bz_file, buf, count);
-
- if (ret == 0) {
- stream->eof = 1;
- }
-
- return ret;
-}
-
-static size_t php_bz2iop_write(php_stream *stream, const char *buf, size_t count TSRMLS_DC)
-{
- struct php_bz2_stream_data_t *self = (struct php_bz2_stream_data_t *) stream->abstract;
-
- return BZ2_bzwrite(self->bz_file, (char*)buf, count);
-}
-
-static int php_bz2iop_close(php_stream *stream, int close_handle TSRMLS_DC)
-{
- struct php_bz2_stream_data_t *self = (struct php_bz2_stream_data_t *)stream->abstract;
- int ret = EOF;
-
- if (close_handle) {
- BZ2_bzclose(self->bz_file);
- }
-
- if (self->stream) {
- php_stream_free(self->stream, PHP_STREAM_FREE_CLOSE | (close_handle == 0 ? PHP_STREAM_FREE_PRESERVE_HANDLE : 0));
- }
-
- efree(self);
-
- return ret;
-}
-
-static int php_bz2iop_flush(php_stream *stream TSRMLS_DC)
-{
- struct php_bz2_stream_data_t *self = (struct php_bz2_stream_data_t *)stream->abstract;
- return BZ2_bzflush(self->bz_file);
-}
-/* }}} */
-
-php_stream_ops php_stream_bz2io_ops = {
- php_bz2iop_write, php_bz2iop_read,
- php_bz2iop_close, php_bz2iop_flush,
- "BZip2",
- NULL, /* seek */
- NULL, /* cast */
- NULL, /* stat */
- NULL /* set_option */
-};
-
-/* {{{ Bzip2 stream openers */
-PHP_BZ2_API php_stream *_php_stream_bz2open_from_BZFILE(BZFILE *bz,
- char *mode, php_stream *innerstream STREAMS_DC TSRMLS_DC)
-{
- struct php_bz2_stream_data_t *self;
-
- self = emalloc(sizeof(*self));
-
- self->stream = innerstream;
- self->bz_file = bz;
-
- return php_stream_alloc_rel(&php_stream_bz2io_ops, self, 0, mode);
-}
-
-PHP_BZ2_API php_stream *_php_stream_bz2open(php_stream_wrapper *wrapper,
- char *path,
- char *mode,
- int options,
- char **opened_path,
- php_stream_context *context STREAMS_DC TSRMLS_DC)
-{
- php_stream *retstream = NULL, *stream = NULL;
- char *path_copy = NULL;
- BZFILE *bz_file = NULL;
-
- if (strncasecmp("compress.bzip2://", path, 17) == 0) {
- path += 17;
- }
- if (mode[0] != 'w' && mode[0] != 'r' && mode[1] != '\0') {
- return NULL;
- }
-
-#ifdef VIRTUAL_DIR
- virtual_filepath_ex(path, &path_copy, NULL TSRMLS_CC);
-#else
- path_copy = path;
-#endif
-
- /* try and open it directly first */
- bz_file = BZ2_bzopen(path_copy, mode);
-
- if (opened_path && bz_file) {
- *opened_path = estrdup(path_copy);
- }
- path_copy = NULL;
-
- if (bz_file == NULL) {
- /* that didn't work, so try and get something from the network/wrapper */
- stream = php_stream_open_wrapper(path, mode, options, opened_path);
-
- if (stream) {
- int fd;
- if (SUCCESS == php_stream_cast(stream, PHP_STREAM_AS_FD, (void **) &fd, REPORT_ERRORS)) {
- bz_file = BZ2_bzdopen(fd, mode);
- }
- }
- /* remove the file created by php_stream_open_wrapper(), it is not needed since BZ2 functions
- * failed.
- */
- if (!bz_file && mode[0] == 'w') {
- VCWD_UNLINK(*opened_path);
- }
- }
-
- if (bz_file) {
- retstream = _php_stream_bz2open_from_BZFILE(bz_file, mode, stream STREAMS_REL_CC TSRMLS_CC);
- if (retstream) {
- return retstream;
- }
-
- BZ2_bzclose(bz_file);
- }
-
- if (stream) {
- php_stream_close(stream);
- }
-
- return NULL;
-}
-
-/* }}} */
-
-static php_stream_wrapper_ops bzip2_stream_wops = {
- _php_stream_bz2open,
- NULL, /* close */
- NULL, /* fstat */
- NULL, /* stat */
- NULL, /* opendir */
- "BZip2",
- NULL, /* unlink */
- NULL, /* rename */
- NULL, /* mkdir */
- NULL /* rmdir */
-};
-
-php_stream_wrapper php_stream_bzip2_wrapper = {
- &bzip2_stream_wops,
- NULL,
- 0 /* is_url */
-};
-
-static void php_bz2_error(INTERNAL_FUNCTION_PARAMETERS, int);
-
-PHP_MINIT_FUNCTION(bz2)
-{
- php_register_url_stream_wrapper("compress.bzip2", &php_stream_bzip2_wrapper TSRMLS_CC);
- php_stream_filter_register_factory("bzip2.*", &php_bz2_filter_factory TSRMLS_CC);
- return SUCCESS;
-}
-
-PHP_MSHUTDOWN_FUNCTION(bz2)
-{
- php_unregister_url_stream_wrapper("compress.bzip2" TSRMLS_CC);
- php_stream_filter_unregister_factory("bzip2.*" TSRMLS_CC);
-
- return SUCCESS;
-}
-
-PHP_MINFO_FUNCTION(bz2)
-{
- php_info_print_table_start();
- php_info_print_table_row(2, "BZip2 Support", "Enabled");
- php_info_print_table_row(2, "Stream Wrapper support", "compress.bz2://");
- php_info_print_table_row(2, "Stream Filter support", "bzip2.decompress, bzip2.compress");
- php_info_print_table_row(2, "BZip2 Version", (char *) BZ2_bzlibVersion());
- php_info_print_table_end();
-}
-
-/* {{{ proto string bzread(int bz[, int length])
- Reads up to length bytes from a BZip2 stream, or 1024 bytes if length is not specified */
-PHP_FUNCTION(bzread)
-{
- zval *bz;
- long len = 1024;
- php_stream *stream;
-
- if (FAILURE == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r|l", &bz, &len)) {
- RETURN_FALSE;
- }
-
- php_stream_from_zval(stream, &bz);
-
- if (len < 0) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "length may not be negative");
- RETURN_FALSE;
- }
-
- Z_STRVAL_P(return_value) = emalloc(len + 1);
- Z_STRLEN_P(return_value) = php_stream_read(stream, Z_STRVAL_P(return_value), len);
-
- if (Z_STRLEN_P(return_value) < 0) {
- efree(Z_STRVAL_P(return_value));
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "could not read valid bz2 data from stream");
- RETURN_FALSE;
- }
-
- Z_STRVAL_P(return_value)[Z_STRLEN_P(return_value)] = 0;
-
- if (PG(magic_quotes_runtime)) {
- Z_STRVAL_P(return_value) = php_addslashes( Z_STRVAL_P(return_value),
- Z_STRLEN_P(return_value),
- &Z_STRLEN_P(return_value), 1 TSRMLS_CC);
- }
-
- Z_TYPE_P(return_value) = IS_STRING;
-}
-/* }}} */
-
-/* {{{ proto resource bzopen(string|int file|fp, string mode)
- Opens a new BZip2 stream */
-PHP_FUNCTION(bzopen)
-{
- zval **file, /* The file to open */
- **mode; /* The mode to open the stream with */
- BZFILE *bz; /* The compressed file stream */
- php_stream *stream = NULL;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &file, &mode) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex(mode);
-
- if (Z_STRVAL_PP(mode)[0] != 'r' && Z_STRVAL_PP(mode)[0] != 'w' && Z_STRVAL_PP(mode)[1] != '\0') {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "'%s' is not a valid mode for bzopen(). Only 'w' and 'r' are supported.", Z_STRVAL_PP(mode));
- RETURN_FALSE;
- }
-
- /* If it's not a resource its a string containing the filename to open */
- if (Z_TYPE_PP(file) != IS_RESOURCE) {
- convert_to_string_ex(file);
- stream = php_stream_bz2open(NULL,
- Z_STRVAL_PP(file),
- Z_STRVAL_PP(mode),
- ENFORCE_SAFE_MODE | REPORT_ERRORS,
- NULL);
- } else {
- /* If it is a resource, than its a stream resource */
- int fd;
-
- php_stream_from_zval(stream, file);
-
- if (FAILURE == php_stream_cast(stream, PHP_STREAM_AS_FD, (void *) &fd, REPORT_ERRORS)) {
- RETURN_FALSE;
- }
-
- bz = BZ2_bzdopen(fd, Z_STRVAL_PP(mode));
-
- stream = php_stream_bz2open_from_BZFILE(bz, Z_STRVAL_PP(mode), stream);
- }
-
- if (stream) {
- php_stream_to_zval(stream, return_value);
- } else {
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-/* {{{ proto int bzerrno(resource bz)
- Returns the error number */
-PHP_FUNCTION(bzerrno)
-{
- php_bz2_error(INTERNAL_FUNCTION_PARAM_PASSTHRU, PHP_BZ_ERRNO);
-}
-/* }}} */
-
-/* {{{ proto string bzerrstr(resource bz)
- Returns the error string */
-PHP_FUNCTION(bzerrstr)
-{
- php_bz2_error(INTERNAL_FUNCTION_PARAM_PASSTHRU, PHP_BZ_ERRSTR);
-}
-/* }}} */
-
-/* {{{ proto array bzerror(resource bz)
- Returns the error number and error string in an associative array */
-PHP_FUNCTION(bzerror)
-{
- php_bz2_error(INTERNAL_FUNCTION_PARAM_PASSTHRU, PHP_BZ_ERRBOTH);
-}
-/* }}} */
-
-/* {{{ proto string bzcompress(string source [, int blocksize100k [, int workfactor]])
- Compresses a string into BZip2 encoded data */
-PHP_FUNCTION(bzcompress)
-{
- zval **source, /* Source data to compress */
- **zblock_size, /* Optional block size to use */
- **zwork_factor; /* Optional work factor to use */
- char *dest = NULL; /* Destination to place the compressed data into */
- int error, /* Error Container */
- block_size = 4, /* Block size for compression algorithm */
- work_factor = 0, /* Work factor for compression algorithm */
- argc; /* Argument count */
- unsigned int source_len, /* Length of the source data */
- dest_len; /* Length of the destination buffer */
-
- argc = ZEND_NUM_ARGS();
-
- if (argc < 1 || argc > 3 || zend_get_parameters_ex(argc, &source, &zblock_size, &zwork_factor) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_string_ex(source);
-
- /* Assign them to easy to use variables, dest_len is initially the length of the data
- + .01 x length of data + 600 which is the largest size the results of the compression
- could possibly be, at least that's what the libbz2 docs say (thanks to jeremy@nirvani.net
- for pointing this out). */
- source_len = Z_STRLEN_PP(source);
- dest_len = Z_STRLEN_PP(source) + (0.01 * Z_STRLEN_PP(source)) + 600;
-
- /* Allocate the destination buffer */
- dest = emalloc(dest_len + 1);
-
- /* Handle the optional arguments */
- if (argc > 1) {
- convert_to_long_ex(zblock_size);
- block_size = Z_LVAL_PP(zblock_size);
- }
-
- if (argc > 2) {
- convert_to_long_ex(zwork_factor);
- work_factor = Z_LVAL_PP(zwork_factor);
- }
-
- error = BZ2_bzBuffToBuffCompress(dest, &dest_len, Z_STRVAL_PP(source), source_len, block_size, 0, work_factor);
- if (error != BZ_OK) {
- efree(dest);
- RETURN_LONG(error);
- } else {
- /* Copy the buffer, we have perhaps allocate alot more than we need,
- so we erealloc() the buffer to the proper size */
- dest = erealloc(dest, dest_len + 1);
- dest[dest_len] = 0;
- RETURN_STRINGL(dest, dest_len, 0);
- }
-}
-/* }}} */
-
-/* {{{ proto string bzdecompress(string source [, int small])
- Decompresses BZip2 compressed data */
-PHP_FUNCTION(bzdecompress)
-{
- zval **source, /* Source data to decompress */
- **zsmall; /* (Optional) user specified small */
- char *dest; /* Destination buffer, initially allocated */
- int error, /* Error container */
- iter = 1, /* Iteration count for the compression loop */
- size, /* Current size to realloc the dest buffer to */
- dest_len = PHP_BZ_DECOMPRESS_SIZE, /* Size of the destination length */
- small = 0, /* The actual small */
- argc = ZEND_NUM_ARGS(); /* Argument count */
-
- if (argc < 1 || argc > 2 || zend_get_parameters_ex(argc, &source, &zsmall) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_string_ex(source);
-
- /* optional small argument handling */
- if (argc > 1) {
- convert_to_long_ex(zsmall);
- small = Z_LVAL_PP(zsmall);
- }
-
- /* Depending on the size of the source buffer, either allocate
- the length of the source buffer or the a default decompression
- size */
- dest = emalloc(PHP_BZ_DECOMPRESS_SIZE > Z_STRLEN_PP(source) ? PHP_BZ_DECOMPRESS_SIZE : Z_STRLEN_PP(source));
-
- /* (de)Compression Loop */
- do {
- /* Handle the (re)allocation of the buffer */
- size = dest_len * iter;
- if (iter > 1) {
- dest = erealloc(dest, size);
- }
- ++iter;
-
- /* Perform the decompression */
- error = BZ2_bzBuffToBuffDecompress(dest, &size, Z_STRVAL_PP(source), Z_STRLEN_PP(source), small, 0);
- } while (error == BZ_OUTBUFF_FULL);
-
- if (error != BZ_OK) {
- efree(dest);
- RETURN_LONG(error);
- } else {
- /* we might have allocated a little to much, so erealloc the buffer
- down to size, before returning it */
- dest = erealloc(dest, size + 1);
- dest[size] = 0;
- RETURN_STRINGL(dest, size, 0);
- }
-}
-/* }}} */
-
-/* {{{ php_bz2_error()
- The central error handling interface, does the work for bzerrno, bzerrstr and bzerror */
-static void php_bz2_error(INTERNAL_FUNCTION_PARAMETERS, int opt)
-{
- zval **bzp; /* BZip2 Resource Pointer */
- php_stream *stream;
- const char *errstr; /* Error string */
- int errnum; /* Error number */
- struct php_bz2_stream_data_t *self;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &bzp) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- php_stream_from_zval(stream, bzp);
-
- if (!php_stream_is(stream, PHP_STREAM_IS_BZIP2)) {
- RETURN_FALSE;
- }
-
- self = (struct php_bz2_stream_data_t *) stream->abstract;
-
- /* Fetch the error information */
- errstr = BZ2_bzerror(self->bz_file, &errnum);
-
- /* Determine what to return */
- switch (opt) {
- case PHP_BZ_ERRNO:
- RETURN_LONG(errnum);
- break;
- case PHP_BZ_ERRSTR:
- RETURN_STRING((char*)errstr, 1);
- break;
- case PHP_BZ_ERRBOTH:
- array_init(return_value);
-
- add_assoc_long (return_value, "errno", errnum);
- add_assoc_string(return_value, "errstr", (char*)errstr, 1);
- break;
- }
-}
-/* }}} */
-
-#endif
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- * vim600: fdm=marker
- * vim: noet sw=4 ts=4
- */
diff --git a/ext/bz2/bz2.dsp b/ext/bz2/bz2.dsp
deleted file mode 100644
index 0e78ee7845..0000000000
--- a/ext/bz2/bz2.dsp
+++ /dev/null
@@ -1,112 +0,0 @@
-# Microsoft Developer Studio Project File - Name="bz2" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=bz2 - Win32 Debug_TS
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "bz2.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "bz2.mak" CFG="bz2 - Win32 Debug_TS"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "bz2 - Win32 Release_TS" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "bz2 - Win32 Debug_TS" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "bz2 - Win32 Release_TS"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release_TS"
-# PROP BASE Intermediate_Dir "Release_TS"
-# PROP BASE Ignore_Export_Lib 0
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release_TS"
-# PROP Intermediate_Dir "Release_TS"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MD /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "BZ2_EXPORTS" /YX /FD /c
-# ADD CPP /nologo /MD /W3 /GX /O2 /I "..\.." /I "..\..\main" /I "..\..\Zend" /I "..\..\TSRM" /I "..\..\..\php_build\includes" /D ZEND_DEBUG=0 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "COMPILE_DL_BZ2" /D ZTS=1 /D "ZEND_WIN32" /D "PHP_WIN32" /D HAVE_BZ2=1 /D "PHP_BZ2_EXPORTS" /FR /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x407 /d "NDEBUG"
-# ADD RSC /l 0x407 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386
-# ADD LINK32 libbz2.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib php5ts.lib /nologo /dll /machine:I386 /out:"..\..\Release_TS/php_bz2.dll" /libpath:"..\..\Release_TS" /libpath:"..\..\Release_TS_Inline" /libpath:"..\..\..\php_build\release"
-
-!ELSEIF "$(CFG)" == "bz2 - Win32 Debug_TS"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug_TS"
-# PROP BASE Intermediate_Dir "Debug_TS"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug_TS"
-# PROP Intermediate_Dir "Debug_TS"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "BZ2_EXPORTS" /YX /FD /GZ /c
-# ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "..\.." /I "..\..\main" /I "..\..\Zend" /I "..\..\TSRM" /I "..\..\..\php_build\includes" /D ZEND_DEBUG=1 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "COMPILE_DL_BZ2" /D ZTS=1 /D "ZEND_WIN32" /D "PHP_WIN32" /D HAVE_BZ2=1 /D "PHP_BZ2_EXPORTS" /YX /FD /GZ /c
-# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x407 /d "_DEBUG"
-# ADD RSC /l 0x407 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 php5ts_debug.lib libbz2.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /out:"..\..\Debug_TS/php_bz2.dll" /pdbtype:sept /libpath:"..\..\Debug_TS" /libpath:"..\..\..\php_build\release"
-
-!ENDIF
-
-# Begin Target
-
-# Name "bz2 - Win32 Release_TS"
-# Name "bz2 - Win32 Debug_TS"
-# Begin Group "Source Files"
-
-# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
-# Begin Source File
-
-SOURCE=.\bz2.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\bz2_filter.c
-# End Source File
-# End Group
-# Begin Group "Header Files"
-
-# PROP Default_Filter "h;hpp;hxx;hm;inl"
-# Begin Source File
-
-SOURCE=.\php_bz2.h
-# End Source File
-# End Group
-# End Target
-# End Project
diff --git a/ext/bz2/bz2_filter.c b/ext/bz2/bz2_filter.c
deleted file mode 100644
index 4227cc55d9..0000000000
--- a/ext/bz2/bz2_filter.c
+++ /dev/null
@@ -1,384 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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. |
- +----------------------------------------------------------------------+
- | Authors: Sara Golemon (pollita@php.net) |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#include "php.h"
-#include "php_bz2.h"
-
-/* {{{ data structure */
-
-typedef struct _php_bz2_filter_data {
- int persistent;
- bz_stream strm;
- char *inbuf;
- size_t inbuf_len;
- char *outbuf;
- size_t outbuf_len;
-} php_bz2_filter_data;
-
-/* }}} */
-
-/* {{{ Memory management wrappers */
-
-static void *php_bz2_alloc(void *opaque, int items, int size)
-{
- return (void *)safe_pemalloc(items, size, 0, ((php_bz2_filter_data*)opaque)->persistent);
-}
-
-static void php_bz2_free(void *opaque, void *address)
-{
- pefree((void *)address, ((php_bz2_filter_data*)opaque)->persistent);
-}
-/* }}} */
-
-/* {{{ bzip2.decompress filter implementation */
-
-static php_stream_filter_status_t php_bz2_decompress_filter(
- php_stream *stream,
- php_stream_filter *thisfilter,
- php_stream_bucket_brigade *buckets_in,
- php_stream_bucket_brigade *buckets_out,
- size_t *bytes_consumed,
- int flags
- TSRMLS_DC)
-{
- php_bz2_filter_data *data;
- php_stream_bucket *bucket;
- size_t consumed = 0;
- int status;
- php_stream_filter_status_t exit_status = PSFS_FEED_ME;
- bz_stream *streamp;
-
- if (!thisfilter || !thisfilter->abstract) {
- /* Should never happen */
- return PSFS_ERR_FATAL;
- }
-
- data = (php_bz2_filter_data *)(thisfilter->abstract);
- streamp = &(data->strm);
-
- while (buckets_in->head) {
- size_t bin = 0, desired;
-
- bucket = php_stream_bucket_make_writeable(buckets_in->head TSRMLS_CC);
- while (bin < bucket->buflen) {
- desired = bucket->buflen - bin;
- if (desired > data->inbuf_len) {
- desired = data->inbuf_len;
- }
- memcpy(data->strm.next_in, bucket->buf + bin, desired);
- data->strm.avail_in = desired;
-
- status = BZ2_bzDecompress(&(data->strm));
- if (status != BZ_OK && status != BZ_STREAM_END) {
- /* Something bad happened */
- php_stream_bucket_delref(bucket TSRMLS_CC);
- return PSFS_ERR_FATAL;
- }
- desired -= data->strm.avail_in; /* desired becomes what we consumed this round through */
- data->strm.next_in = data->inbuf;
- data->strm.avail_in = 0;
- consumed += desired;
- bin += desired;
-
- if (data->strm.avail_out < data->outbuf_len) {
- php_stream_bucket *out_bucket;
- size_t bucketlen = data->outbuf_len - data->strm.avail_out;
- out_bucket = php_stream_bucket_new(stream, estrndup(data->outbuf, bucketlen), bucketlen, 1, 0 TSRMLS_CC);
- php_stream_bucket_append(buckets_out, out_bucket TSRMLS_CC);
- data->strm.avail_out = data->outbuf_len;
- data->strm.next_out = data->outbuf;
- exit_status = PSFS_PASS_ON;
- }
- }
- php_stream_bucket_delref(bucket TSRMLS_CC);
- }
-
- if (flags & PSFS_FLAG_FLUSH_CLOSE) {
- /* Spit it out! */
- status = BZ_OK;
- while (status == BZ_OK) {
- status = BZ2_bzDecompress(&(data->strm));
- if (data->strm.avail_out < data->outbuf_len) {
- size_t bucketlen = data->outbuf_len - data->strm.avail_out;
-
- bucket = php_stream_bucket_new(stream, estrndup(data->outbuf, bucketlen), bucketlen, 1, 0 TSRMLS_CC);
- php_stream_bucket_append(buckets_out, bucket TSRMLS_CC);
- data->strm.avail_out = data->outbuf_len;
- data->strm.next_out = data->outbuf;
- exit_status = PSFS_PASS_ON;
- }
- }
- }
-
- if (bytes_consumed) {
- *bytes_consumed = consumed;
- }
-
- return exit_status;
-}
-
-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));
- pefree(data->inbuf, data->persistent);
- pefree(data->outbuf, data->persistent);
- pefree(data, data->persistent);
- }
-}
-
-static php_stream_filter_ops php_bz2_decompress_ops = {
- php_bz2_decompress_filter,
- php_bz2_decompress_dtor,
- "bzip2.decompress"
-};
-/* }}} */
-
-/* {{{ bzip2.compress filter implementation */
-
-static php_stream_filter_status_t php_bz2_compress_filter(
- php_stream *stream,
- php_stream_filter *thisfilter,
- php_stream_bucket_brigade *buckets_in,
- php_stream_bucket_brigade *buckets_out,
- size_t *bytes_consumed,
- int flags
- TSRMLS_DC)
-{
- php_bz2_filter_data *data;
- php_stream_bucket *bucket;
- size_t consumed = 0;
- int status;
- php_stream_filter_status_t exit_status = PSFS_FEED_ME;
- bz_stream *streamp;
-
- if (!thisfilter || !thisfilter->abstract) {
- /* Should never happen */
- return PSFS_ERR_FATAL;
- }
-
- data = (php_bz2_filter_data *)(thisfilter->abstract);
- streamp = &(data->strm);
-
- while (buckets_in->head) {
- size_t bin = 0, desired;
-
- bucket = php_stream_bucket_make_writeable(buckets_in->head TSRMLS_CC);
-
- while (bin < bucket->buflen) {
- desired = bucket->buflen - bin;
- if (desired > data->inbuf_len) {
- desired = data->inbuf_len;
- }
- memcpy(data->strm.next_in, bucket->buf + bin, desired);
- data->strm.avail_in = desired;
-
- status = BZ2_bzCompress(&(data->strm), flags & PSFS_FLAG_FLUSH_CLOSE ? BZ_FINISH : (flags & PSFS_FLAG_FLUSH_INC ? BZ_FLUSH : BZ_RUN));
- if (status != BZ_RUN_OK && status != BZ_FLUSH_OK && status != BZ_FINISH_OK) {
- /* Something bad happened */
- php_stream_bucket_delref(bucket TSRMLS_CC);
- return PSFS_ERR_FATAL;
- }
- desired -= data->strm.avail_in; /* desired becomes what we consumed this round through */
- data->strm.next_in = data->inbuf;
- data->strm.avail_in = 0;
- consumed += desired;
- bin += desired;
-
- if (data->strm.avail_out < data->outbuf_len) {
- php_stream_bucket *out_bucket;
- size_t bucketlen = data->outbuf_len - data->strm.avail_out;
-
- out_bucket = php_stream_bucket_new(stream, estrndup(data->outbuf, bucketlen), bucketlen, 1, 0 TSRMLS_CC);
- php_stream_bucket_append(buckets_out, out_bucket TSRMLS_CC);
- data->strm.avail_out = data->outbuf_len;
- data->strm.next_out = data->outbuf;
- exit_status = PSFS_PASS_ON;
- }
- }
- php_stream_bucket_delref(bucket TSRMLS_CC);
- }
-
- if (flags & PSFS_FLAG_FLUSH_CLOSE) {
- /* Spit it out! */
- status = BZ_OUTBUFF_FULL;
- while (status == BZ_OUTBUFF_FULL) {
- status = BZ2_bzCompress(&(data->strm), BZ_FINISH);
- if (data->strm.avail_out < data->outbuf_len) {
- size_t bucketlen = data->outbuf_len - data->strm.avail_out;
-
- bucket = php_stream_bucket_new(stream, estrndup(data->outbuf, bucketlen), bucketlen, 1, 0 TSRMLS_CC);
- php_stream_bucket_append(buckets_out, bucket TSRMLS_CC);
- data->strm.avail_out = data->outbuf_len;
- data->strm.next_out = data->outbuf;
- exit_status = PSFS_PASS_ON;
- }
- }
- }
-
- if (bytes_consumed) {
- *bytes_consumed = consumed;
- }
- return exit_status;
-}
-
-static void php_bz2_compress_dtor(php_stream_filter *thisfilter TSRMLS_DC)
-{
- if (thisfilter && thisfilter->abstract) {
- php_bz2_filter_data *data = thisfilter->abstract;
- BZ2_bzCompressEnd(&(data->strm));
- pefree(data->inbuf, data->persistent);
- pefree(data->outbuf, data->persistent);
- pefree(data, data->persistent);
- }
-}
-
-static php_stream_filter_ops php_bz2_compress_ops = {
- php_bz2_compress_filter,
- php_bz2_compress_dtor,
- "bzip2.compress"
-};
-
-/* }}} */
-
-/* {{{ bzip2.* common factory */
-
-static php_stream_filter *php_bz2_filter_create(const char *filtername, zval *filterparams, int persistent TSRMLS_DC)
-{
- php_stream_filter_ops *fops = NULL;
- php_bz2_filter_data *data;
- int status;
-
- /* Create this filter */
- data = pecalloc(1, sizeof(php_bz2_filter_data), persistent);
- if (!data) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Failed allocating %d bytes.", sizeof(php_bz2_filter_data));
- return NULL;
- }
-
- /* Circular reference */
- data->strm.opaque = (void *) data;
-
- data->strm.bzalloc = php_bz2_alloc;
- data->strm.bzfree = php_bz2_free;
- data->persistent = persistent;
- data->strm.avail_out = data->outbuf_len = data->inbuf_len = 2048;
- data->strm.next_in = data->inbuf = (char *) pemalloc(data->inbuf_len, persistent);
- if (!data->inbuf) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Failed allocating %d bytes.", data->inbuf_len);
- pefree(data, persistent);
- return NULL;
- }
- data->strm.avail_in = 0;
- data->strm.next_out = data->outbuf = (char *) pemalloc(data->outbuf_len, persistent);
- if (!data->outbuf) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Failed allocating %d bytes.", data->outbuf_len);
- pefree(data->inbuf, persistent);
- pefree(data, persistent);
- return NULL;
- }
-
- if (strcasecmp(filtername, "bzip2.decompress") == 0) {
- int smallFootprint = 0;
-
- if (filterparams) {
- zval **tmpzval = NULL;
-
- if (Z_TYPE_P(filterparams) == IS_ARRAY || Z_TYPE_P(filterparams) == IS_OBJECT) {
- zend_hash_find(HASH_OF(filterparams), "small", sizeof("small"), (void **) &tmpzval);
- } else {
- tmpzval = &filterparams;
- }
-
- if (tmpzval) {
- SEPARATE_ZVAL(tmpzval);
- convert_to_boolean_ex(tmpzval);
- smallFootprint = Z_LVAL_PP(tmpzval);
- zval_ptr_dtor(tmpzval);
- }
- }
-
- status = BZ2_bzDecompressInit(&(data->strm), 0, smallFootprint);
- fops = &php_bz2_decompress_ops;
- } else if (strcasecmp(filtername, "bzip2.compress") == 0) {
- int blockSize100k = PHP_BZ2_FILTER_DEFAULT_BLOCKSIZE;
- int workFactor = PHP_BZ2_FILTER_DEFAULT_WORKFACTOR;
-
- if (filterparams) {
- zval **tmpzval;
-
- 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) {
- 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);
- }
- 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));
- } else {
- workFactor = Z_LVAL_PP(tmpzval);
- }
- zval_ptr_dtor(tmpzval);
- }
- }
- }
-
- status = BZ2_bzCompressInit(&(data->strm), blockSize100k, 0, workFactor);
- fops = &php_bz2_compress_ops;
- } else {
- status = BZ_DATA_ERROR;
- }
-
- if (status != BZ_OK) {
- /* Unspecified (probably strm) error, let stream-filter error do its own whining */
- pefree(data->strm.next_in, persistent);
- pefree(data->strm.next_out, persistent);
- pefree(data, persistent);
- return NULL;
- }
-
- return php_stream_filter_alloc(fops, data, persistent);
-}
-
-php_stream_filter_factory php_bz2_filter_factory = {
- php_bz2_filter_create
-};
-/* }}} */
-
-/*
- * 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/bz2/config.m4 b/ext/bz2/config.m4
deleted file mode 100644
index bd6e8a6ab9..0000000000
--- a/ext/bz2/config.m4
+++ /dev/null
@@ -1,40 +0,0 @@
-dnl
-dnl $Id$
-dnl
-
-PHP_ARG_WITH(bz2, for BZip2 support,
-[ --with-bz2[=DIR] Include BZip2 support])
-
-if test "$PHP_BZ2" != "no"; then
- if test -r $PHP_BZ2/include/bzlib.h; then
- BZIP_DIR=$PHP_BZ2
- else
- AC_MSG_CHECKING(for BZip2 in default path)
- for i in /usr/local /usr; do
- if test -r $i/include/bzlib.h; then
- BZIP_DIR=$i
- AC_MSG_RESULT(found in $i)
- break
- fi
- done
- fi
-
- if test -z "$BZIP_DIR"; then
- AC_MSG_RESULT(not found)
- AC_MSG_ERROR(Please reinstall the BZip2 distribution)
- fi
-
- PHP_CHECK_LIBRARY(bz2, BZ2_bzerror,
- [
- PHP_ADD_INCLUDE($BZIP_DIR/include)
- PHP_ADD_LIBRARY_WITH_PATH(bz2, $BZIP_DIR/lib, BZ2_SHARED_LIBADD)
- AC_DEFINE(HAVE_BZ2,1,[ ])
- ], [
- AC_MSG_ERROR(bz2 module requires libbz2 >= 1.0.0)
- ], [
- -L$BZIP_DIR/lib
- ])
-
- PHP_NEW_EXTENSION(bz2, bz2.c bz2_filter.c, $ext_shared)
- PHP_SUBST(BZ2_SHARED_LIBADD)
-fi
diff --git a/ext/bz2/config.w32 b/ext/bz2/config.w32
deleted file mode 100644
index af57f8bc30..0000000000
--- a/ext/bz2/config.w32
+++ /dev/null
@@ -1,18 +0,0 @@
-// $Id$
-// vim:ft=javascript
-
-ARG_WITH("bz2", "BZip2", "no");
-
-if (PHP_BZ2 != "no") {
- if (CHECK_LIB("libbz2.lib", "bz2", PHP_BZ2) &&
- CHECK_HEADER_ADD_INCLUDE("bzlib.h", "CFLAGS_BZ2")) {
- EXTENSION("bz2", "bz2.c bz2_filter.c");
- AC_DEFINE('HAVE_BZ2', 1, 'Have BZ2 library');
- // BZ2 extension does this slightly differently from others
- if (PHP_BZ2_SHARED) {
- ADD_FLAG("CFLAGS_BZ2", "/D PHP_BZ2_EXPORTS ");
- }
- } else {
- WARNING("bz2 not enabled; libraries and headers not found");
- }
-}
diff --git a/ext/bz2/package.xml b/ext/bz2/package.xml
deleted file mode 100644
index 107f218866..0000000000
--- a/ext/bz2/package.xml
+++ /dev/null
@@ -1,38 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1" ?>
-<!-- do not use the "Type" attribute here, that one is only for
- generated package.xml files -->
-<package>
- <name>bz2</name>
- <summary>A Bzip2 management extension</summary>
- <description>
-Bz2 is an extension to create and parse bzip2 compressed data.
- </description>
- <license>PHP License</license>
- <maintainers>
- <maintainer>
- <user>sterling</user>
- <name>Sterling Hughes</name>
- <email>sterling@php.net</email>
- </maintainer>
- </maintainers>
- <release>
- <version>1.0</version>
- <date>2003-05-17</date>
- <state>stable</state>
- <notes>
- Initial Release in PECL
- </notes>
- </release>
- <configureoptions>
- <configureoption name="with-bz2" default="autodetect" prompt="path to bz2 installation?"/>
- </configureoptions>
- <filelist>
- <dir role="src" name="/">
- <file role="doc">CREDITS</file>
- <file role="src">config.m4</file>
- <file role="doc">php_bz2.h</file>
- <file role="src">bz2.c</file>
- <file role="src">bz2.dsp</file>
- </dir>
- </filelist>
-</package>
diff --git a/ext/bz2/php_bz2.def b/ext/bz2/php_bz2.def
deleted file mode 100644
index 831355344a..0000000000
--- a/ext/bz2/php_bz2.def
+++ /dev/null
@@ -1,7 +0,0 @@
-EXPORTS
- BZ2_bzCompressInit
- BZ2_bzCompress
- BZ2_bzCompressEnd
- BZ2_bzDecompressInit
- BZ2_bzDecompress
- BZ2_bzDecompressEnd
diff --git a/ext/bz2/php_bz2.h b/ext/bz2/php_bz2.h
deleted file mode 100644
index 886308d3c0..0000000000
--- a/ext/bz2/php_bz2.h
+++ /dev/null
@@ -1,83 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Sterling Hughes <sterling@php.net> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifndef PHP_BZ2_H
-#define PHP_BZ2_H
-
-#if HAVE_BZ2
-
-extern zend_module_entry bz2_module_entry;
-#define phpext_bz2_ptr &bz2_module_entry
-
-/* Bzip2 includes */
-#include <bzlib.h>
-
-PHP_MINIT_FUNCTION(bz2);
-PHP_MSHUTDOWN_FUNCTION(bz2);
-PHP_MINFO_FUNCTION(bz2);
-PHP_FUNCTION(bzopen);
-PHP_FUNCTION(bzread);
-PHP_FUNCTION(bzerrno);
-PHP_FUNCTION(bzerrstr);
-PHP_FUNCTION(bzerror);
-PHP_FUNCTION(bzcompress);
-PHP_FUNCTION(bzdecompress);
-
-#else
-#define phpext_bz2_ptr NULL
-#endif
-
-#ifdef PHP_WIN32
-# ifdef PHP_BZ2_EXPORTS
-# define PHP_BZ2_API __declspec(dllexport)
-# elif defined(COMPILE_DL_BZ2)
-# define PHP_BZ2_API __declspec(dllimport)
-# else
-# define PHP_BZ2_API /* nothing special */
-# endif
-#else
-# define PHP_BZ2_API
-#endif
-
-PHP_BZ2_API php_stream *_php_stream_bz2open(php_stream_wrapper *wrapper, char *path, char *mode, int options, char **opened_path, php_stream_context *context STREAMS_DC TSRMLS_DC);
-PHP_BZ2_API php_stream *_php_stream_bz2open_from_BZFILE(BZFILE *bz, char *mode, php_stream *innerstream STREAMS_DC TSRMLS_DC);
-
-#define php_stream_bz2open_from_BZFILE(bz, mode, innerstream) _php_stream_bz2open_from_BZFILE((bz), (mode), (innerstream) STREAMS_CC TSRMLS_CC)
-#define php_stream_bz2open(wrapper, path, mode, options, opened_path) _php_stream_bz2open((wrapper), (path), (mode), (options), (opened_path), NULL STREAMS_CC TSRMLS_CC)
-
-php_stream_filter_factory php_bz2_filter_factory;
-extern php_stream_ops php_stream_bz2io_ops;
-#define PHP_STREAM_IS_BZIP2 &php_stream_bz2io_ops
-
-/* 400kb */
-#define PHP_BZ2_FILTER_DEFAULT_BLOCKSIZE 4
-
-/* BZ2 Internal Default */
-#define PHP_BZ2_FILTER_DEFAULT_WORKFACTOR 0
-
-#endif
-
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- */
diff --git a/ext/bz2/tests/bz2_filter_compress.phpt b/ext/bz2/tests/bz2_filter_compress.phpt
deleted file mode 100644
index 3de9a9d3ec..0000000000
--- a/ext/bz2/tests/bz2_filter_compress.phpt
+++ /dev/null
@@ -1,17 +0,0 @@
---TEST--
-bzip2.compress (with convert.base64-encode)
---SKIPIF--
-<?php if (!extension_loaded("bz2")) print "skip"; ?>
---FILE--
-<?php /* $Id$ */
-$text = 'I am the very model of a modern major general, I\'ve information vegetable, animal, and mineral.';
-
-$fp = fopen('php://stdout', 'w');
-stream_filter_append($fp, 'bzip2.compress', STREAM_FILTER_WRITE);
-stream_filter_append($fp, 'convert.base64-encode', STREAM_FILTER_WRITE);
-fwrite($fp, $text);
-fclose($fp);
-
-?>
---EXPECT--
-QlpoNDFBWSZTWRN6QG0AAAoVgECFACA395UgIABIintI1N6mpowIQ0E1MTTAQGYTNcRyMZm5kgW3ib7hVboE7Tmqj3ToGZ5G3q1ZauD2G58hibSck8KS95EEAbx1Cn+LuSKcKEgJvSA2gA==
diff --git a/ext/bz2/tests/bz2_filter_decompress.phpt b/ext/bz2/tests/bz2_filter_decompress.phpt
deleted file mode 100644
index 951d572cb2..0000000000
--- a/ext/bz2/tests/bz2_filter_decompress.phpt
+++ /dev/null
@@ -1,17 +0,0 @@
---TEST--
-bzip2.decompress (with convert.base64-decode)
---SKIPIF--
-<?php if (!extension_loaded("bz2")) print "skip"; ?>
---FILE--
-<?php /* $Id$ */
-$text = 'QlpoNDFBWSZTWRN6QG0AAAoVgECFACA395UgIABIintI1N6mpowIQ0E1MTTAQGYTNcRyMZm5kgW3ib7hVboE7Tmqj3ToGZ5G3q1ZauD2G58hibSck8KS95EEAbx1Cn+LuSKcKEgJvSA2gA==';
-
-$fp = fopen('php://stdout', 'w');
-stream_filter_append($fp, 'convert.base64-decode', STREAM_FILTER_WRITE);
-stream_filter_append($fp, 'bzip2.decompress', STREAM_FILTER_WRITE);
-fwrite($fp, $text);
-fclose($fp);
-
-?>
---EXPECT--
-I am the very model of a modern major general, I've information vegetable, animal, and mineral.
diff --git a/ext/bz2/tests/with_files.phpt b/ext/bz2/tests/with_files.phpt
deleted file mode 100644
index 5691445939..0000000000
--- a/ext/bz2/tests/with_files.phpt
+++ /dev/null
@@ -1,23 +0,0 @@
---TEST--
-BZ2 with files
---SKIPIF--
-<?php if (!extension_loaded("bz2")) print "skip"; ?>
---FILE--
-<?php // $Id$
-
-error_reporting(E_ALL);
-
-$filename = "testfile.bz2";
-$str = "This is a test string.\n";
-$bz = bzopen($filename, "w");
-bzwrite($bz, $str);
-bzclose($bz);
-
-$bz = bzopen($filename, "r");
-print bzread($bz, 10);
-print bzread($bz);
-bzclose($bz);
-unlink($filename);
-
---EXPECT--
-This is a test string.
diff --git a/ext/bz2/tests/with_strings.phpt b/ext/bz2/tests/with_strings.phpt
deleted file mode 100644
index adf07e16f9..0000000000
--- a/ext/bz2/tests/with_strings.phpt
+++ /dev/null
@@ -1,27 +0,0 @@
---TEST--
-BZ2 with strings
---SKIPIF--
-<?php if (!extension_loaded("bz2")) print "skip"; ?>
---FILE--
-<?php // $Id$
-
-error_reporting(E_ALL);
-
-# This FAILS
-$blaat = <<<HEREDOC
-This is some random data
-HEREDOC;
-
-# This Works: (so, is heredoc related)
-#$blaat= 'This is some random data';
-
-$blaat2 = bzdecompress(bzcompress($blaat));
-
-$tests = <<<TESTS
- \$blaat === \$blaat2
-TESTS;
-
-include(dirname(__FILE__) . '/../../../tests/quicktester.inc');
-
---EXPECT--
-OK
diff --git a/ext/calendar/CREDITS b/ext/calendar/CREDITS
deleted file mode 100644
index a2904bd8b2..0000000000
--- a/ext/calendar/CREDITS
+++ /dev/null
@@ -1,2 +0,0 @@
-Calendar
-Shane Caraveo, Colin Viebrock, Hartmut Holzgraefe, Wez Furlong
diff --git a/ext/calendar/cal_unix.c b/ext/calendar/cal_unix.c
deleted file mode 100644
index d48a2d24fe..0000000000
--- a/ext/calendar/cal_unix.c
+++ /dev/null
@@ -1,88 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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. |
- +----------------------------------------------------------------------+
- | Authors: Shane Caraveo <shane@caraveo.com> |
- | Colin Viebrock <colin@easydns.com> |
- | Hartmut Holzgraefe <hholzgra@php.net> |
- +----------------------------------------------------------------------+
- */
-/* $Id: */
-
-#include "php.h"
-#include "php_calendar.h"
-#include "sdncal.h"
-#include <time.h>
-
-/* {{{ proto int unixtojd([int timestamp])
- Convert UNIX timestamp to Julian Day */
-PHP_FUNCTION(unixtojd)
-{
- pval *timestamp;
- long jdate;
- time_t t;
- struct tm *ta, tmbuf;
- int myargc=ZEND_NUM_ARGS();
-
- if ((myargc > 1) || (zend_get_parameters(ht, myargc, &timestamp) != SUCCESS)) {
- WRONG_PARAM_COUNT;
- }
-
- if(myargc==1) {
- convert_to_long(timestamp);
- t = Z_LVAL_P(timestamp);
- } else {
- t = time(NULL);
- }
-
- if(t < 0) {
- RETURN_FALSE;
- }
-
- ta = php_localtime_r(&t, &tmbuf);
- jdate = GregorianToSdn(ta->tm_year+1900, ta->tm_mon+1, ta->tm_mday);
-
- RETURN_LONG(jdate);
-}
-/* }}} */
-
-/* {{{ proto int jdtounix(int jday)
- Convert Julian Day to UNIX timestamp */
-PHP_FUNCTION(jdtounix)
-{
- pval *jday;
- long uday;
-
- if ((ZEND_NUM_ARGS()!= 1) || (zend_get_parameters(ht, 1, &jday) != SUCCESS)) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long(jday);
-
- uday = Z_LVAL_P(jday) - 2440588 /* J.D. of 1.1.1970 */;
-
- if(uday<0) RETURN_FALSE; /* before beginning of unix epoch */
- if(uday>24755) RETURN_FALSE; /* behind end of unix epoch */
-
- RETURN_LONG(uday*24*3600);
-}
-/* }}} */
-
-/*
- * 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/calendar/calendar.c b/ext/calendar/calendar.c
deleted file mode 100644
index 16fef3dbd4..0000000000
--- a/ext/calendar/calendar.c
+++ /dev/null
@@ -1,639 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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. |
- +----------------------------------------------------------------------+
- | Authors: Shane Caraveo <shane@caraveo.com> |
- | Colin Viebrock <colin@easydns.com> |
- | Hartmut Holzgraefe <hholzgra@php.net> |
- | Wez Furlong <wez@thebrainroom.com> |
- +----------------------------------------------------------------------+
- */
-/* $Id$ */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#ifdef PHP_WIN32
-#define _WINNLS_
-#endif
-
-#include "php.h"
-#include "ext/standard/info.h"
-#include "php_calendar.h"
-#include "sdncal.h"
-
-#include <stdio.h>
-
-function_entry calendar_functions[] = {
- PHP_FE(jdtogregorian, NULL)
- PHP_FE(gregoriantojd, NULL)
- PHP_FE(jdtojulian, NULL)
- PHP_FE(juliantojd, NULL)
- PHP_FE(jdtojewish, NULL)
- PHP_FE(jewishtojd, NULL)
- PHP_FE(jdtofrench, NULL)
- PHP_FE(frenchtojd, NULL)
- PHP_FE(jddayofweek, NULL)
- PHP_FE(jdmonthname, NULL)
- PHP_FE(easter_date, NULL)
- PHP_FE(easter_days, NULL)
- PHP_FE(unixtojd, NULL)
- PHP_FE(jdtounix, NULL)
- PHP_FE(cal_to_jd, NULL)
- PHP_FE(cal_from_jd, NULL)
- PHP_FE(cal_days_in_month, NULL)
- PHP_FE(cal_info, NULL)
- {NULL, NULL, NULL}
-};
-
-
-zend_module_entry calendar_module_entry = {
- STANDARD_MODULE_HEADER,
- "calendar",
- calendar_functions,
- PHP_MINIT(calendar),
- NULL,
- NULL,
- NULL,
- PHP_MINFO(calendar),
- NO_VERSION_YET,
- STANDARD_MODULE_PROPERTIES,
-};
-
-#ifdef COMPILE_DL_CALENDAR
-ZEND_GET_MODULE(calendar)
-#endif
-
-/* this order must match the conversion table below */
-enum cal_name_type_t {
- CAL_GREGORIAN = 0,
- CAL_JULIAN,
- CAL_JEWISH,
- CAL_FRENCH,
- CAL_NUM_CALS
-};
-
-typedef long int (*cal_to_jd_func_t) (int month, int day, int year);
-typedef void (*cal_from_jd_func_t) (long int jd, int *year, int *month, int *day);
-typedef char *(*cal_as_string_func_t) (int year, int month, int day);
-
-struct cal_entry_t {
- char *name;
- char *symbol;
- cal_to_jd_func_t to_jd;
- cal_from_jd_func_t from_jd;
- int num_months;
- int max_days_in_month;
- char **month_name_short;
- char **month_name_long;
-};
-
-static struct cal_entry_t cal_conversion_table[CAL_NUM_CALS] = {
- {"Gregorian", "CAL_GREGORIAN", GregorianToSdn, SdnToGregorian, 12, 31,
- MonthNameShort, MonthNameLong},
- {"Julian", "CAL_JULIAN", JulianToSdn, SdnToJulian, 12, 31,
- MonthNameShort, MonthNameLong},
- {"Jewish", "CAL_JEWISH", JewishToSdn, SdnToJewish, 13, 30,
- JewishMonthName, JewishMonthName},
- {"French", "CAL_FRENCH", FrenchToSdn, SdnToFrench, 13, 30,
- FrenchMonthName, FrenchMonthName}
-};
-
-/* For jddayofweek */
-enum { CAL_DOW_DAYNO, CAL_DOW_SHORT, CAL_DOW_LONG };
-
-/* For jdmonthname */
-enum { CAL_MONTH_GREGORIAN_SHORT, CAL_MONTH_GREGORIAN_LONG,
- CAL_MONTH_JULIAN_SHORT, CAL_MONTH_JULIAN_LONG, CAL_MONTH_JEWISH,
- CAL_MONTH_FRENCH
-};
-
-/* for heb_number_to_chars */
-static char alef_bet[25] = "0àáâãäåæçèéëìîðñòôö÷øùú";
-
-#define CAL_JEWISH_ADD_ALAFIM_GERESH 0x2
-#define CAL_JEWISH_ADD_ALAFIM 0x4
-#define CAL_JEWISH_ADD_GERESHAYIM 0x8
-
-PHP_MINIT_FUNCTION(calendar)
-{
- REGISTER_LONG_CONSTANT("CAL_GREGORIAN", CAL_GREGORIAN, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("CAL_JULIAN", CAL_JULIAN, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("CAL_JEWISH", CAL_JEWISH, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("CAL_FRENCH", CAL_FRENCH, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("CAL_NUM_CALS", CAL_NUM_CALS, CONST_CS | CONST_PERSISTENT);
-/* constants for jddayofweek */
- REGISTER_LONG_CONSTANT("CAL_DOW_DAYNO", CAL_DOW_DAYNO, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("CAL_DOW_SHORT", CAL_DOW_SHORT, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("CAL_DOW_LONG", CAL_DOW_LONG, CONST_CS | CONST_PERSISTENT);
-/* constants for jdmonthname */
- REGISTER_LONG_CONSTANT("CAL_MONTH_GREGORIAN_SHORT", CAL_MONTH_GREGORIAN_SHORT, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("CAL_MONTH_GREGORIAN_LONG", CAL_MONTH_GREGORIAN_LONG, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("CAL_MONTH_JULIAN_SHORT", CAL_MONTH_JULIAN_SHORT, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("CAL_MONTH_JULIAN_LONG", CAL_MONTH_JULIAN_LONG, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("CAL_MONTH_JEWISH", CAL_MONTH_JEWISH, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("CAL_MONTH_FRENCH", CAL_MONTH_FRENCH, CONST_CS | CONST_PERSISTENT);
-/* constants for easter calculation */
- REGISTER_LONG_CONSTANT("CAL_EASTER_DEFAULT", CAL_EASTER_DEFAULT, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("CAL_EASTER_ROMAN", CAL_EASTER_ROMAN, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("CAL_EASTER_ALWAYS_GREGORIAN", CAL_EASTER_ALWAYS_GREGORIAN, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("CAL_EASTER_ALWAYS_JULIAN", CAL_EASTER_ALWAYS_JULIAN, CONST_CS | CONST_PERSISTENT);
-/* constants for Jewish date formatting */
- REGISTER_LONG_CONSTANT("CAL_JEWISH_ADD_ALAFIM_GERESH", CAL_JEWISH_ADD_ALAFIM_GERESH, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("CAL_JEWISH_ADD_ALAFIM", CAL_JEWISH_ADD_ALAFIM, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("CAL_JEWISH_ADD_GERESHAYIM", CAL_JEWISH_ADD_GERESHAYIM, CONST_CS | CONST_PERSISTENT);
- return SUCCESS;
-}
-
-PHP_MINFO_FUNCTION(calendar)
-{
- php_info_print_table_start();
- php_info_print_table_row(2, "Calendar support", "enabled");
- php_info_print_table_end();
-}
-
-/* {{{ proto array cal_info(int calendar)
- Returns information about a particular calendar */
-PHP_FUNCTION(cal_info)
-{
- long cal;
- zval *months, *smonths;
- int i;
- struct cal_entry_t *calendar;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &cal) == FAILURE) {
- RETURN_FALSE;
- }
-
- if (cal < 0 || cal >= CAL_NUM_CALS) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "invalid calendar ID %ld.", cal);
- RETURN_FALSE;
- }
-
- calendar = &cal_conversion_table[cal];
- array_init(return_value);
-
- MAKE_STD_ZVAL(months);
- MAKE_STD_ZVAL(smonths);
- array_init(months);
- array_init(smonths);
-
- for (i = 1; i <= calendar->num_months; i++) {
- add_index_string(months, i, calendar->month_name_long[i], 1);
- add_index_string(smonths, i, calendar->month_name_short[i], 1);
- }
- add_assoc_zval(return_value, "months", months);
- add_assoc_zval(return_value, "abbrevmonths", smonths);
- add_assoc_long(return_value, "maxdaysinmonth", calendar->max_days_in_month);
- add_assoc_string(return_value, "calname", calendar->name, 1);
- add_assoc_string(return_value, "calsymbol", calendar->symbol, 1);
-
-}
-/* }}} */
-
-/* {{{ proto int cal_days_in_month(int calendar, int month, int year)
- Returns the number of days in a month for a given year and calendar */
-PHP_FUNCTION(cal_days_in_month)
-{
- long cal, month, year;
- struct cal_entry_t *calendar;
- long sdn_start, sdn_next;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "lll", &cal, &month, &year) == FAILURE) {
- RETURN_FALSE;
- }
-
- if (cal < 0 || cal >= CAL_NUM_CALS) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "invalid calendar ID %ld.", cal);
- RETURN_FALSE;
- }
-
- calendar = &cal_conversion_table[cal];
-
- sdn_start = calendar->to_jd(year, month, 1);
-
- sdn_next = calendar->to_jd(year, 1 + month, 1);
-
- if (sdn_next == 0) {
-/* if invalid, try first month of the next year... */
- sdn_next = calendar->to_jd(year + 1, 1, 1);
- }
-
- RETURN_LONG(sdn_next - sdn_start);
-}
-/* }}} */
-
-/* {{{ proto int cal_to_jd(int calendar, int month, int day, int year)
- Converts from a supported calendar to Julian Day Count */
-PHP_FUNCTION(cal_to_jd)
-{
- long cal, month, day, year, jdate;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "llll", &cal, &month, &day, &year) != SUCCESS) {
- RETURN_FALSE;
- }
-
- if (cal < 0 || cal >= CAL_NUM_CALS) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "invalid calendar ID %ld.", cal);
- RETURN_FALSE;
- }
-
- jdate = cal_conversion_table[cal].to_jd(year, month, day);
- RETURN_LONG(jdate);
-}
-/* }}} */
-
-/* {{{ proto array cal_from_jd(int jd, int calendar)
- Converts from Julian Day Count to a supported calendar and return extended information */
-PHP_FUNCTION(cal_from_jd)
-{
- long jd, cal;
- int month, day, year, dow;
- char date[16];
- struct cal_entry_t *calendar;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS()TSRMLS_CC, "ll", &jd, &cal) == FAILURE) {
- RETURN_FALSE;
- }
-
- if (cal < 0 || cal >= CAL_NUM_CALS) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "invalid calendar ID %ld", cal);
- RETURN_FALSE;
- }
- calendar = &cal_conversion_table[cal];
-
- array_init(return_value);
-
- calendar->from_jd(jd, &year, &month, &day);
-
- sprintf(date, "%i/%i/%i", month, day, year);
- add_assoc_string(return_value, "date", date, 1);
-
- add_assoc_long(return_value, "month", month);
- add_assoc_long(return_value, "day", day);
- add_assoc_long(return_value, "year", year);
-
-/* day of week */
- dow = DayOfWeek(jd);
- add_assoc_long(return_value, "dow", dow);
- add_assoc_string(return_value, "abbrevdayname", DayNameShort[dow], 1);
- add_assoc_string(return_value, "dayname", DayNameLong[dow], 1);
-/* month name */
- add_assoc_string(return_value, "abbrevmonth", calendar->month_name_short[month], 1);
- add_assoc_string(return_value, "monthname", calendar->month_name_long[month], 1);
-}
-/* }}} */
-
-/* {{{ proto string jdtogregorian(int juliandaycount)
- Converts a julian day count to a gregorian calendar date */
-PHP_FUNCTION(jdtogregorian)
-{
- long julday;
- int year, month, day;
- char date[16];
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &julday) == FAILURE) {
- RETURN_FALSE;
- }
-
- SdnToGregorian(julday, &year, &month, &day);
- sprintf(date, "%i/%i/%i", month, day, year);
-
- RETURN_STRING(date, 1);
-}
-/* }}} */
-
-/* {{{ proto int gregoriantojd(int month, int day, int year)
- Converts a gregorian calendar date to julian day count */
-PHP_FUNCTION(gregoriantojd)
-{
- long year, month, day;
- int jdate;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "lll", &month, &day, &year) == FAILURE) {
- RETURN_FALSE;
- }
-
- jdate = GregorianToSdn(year, month, day);
-
- RETURN_LONG(jdate);
-}
-/* }}} */
-
-/* {{{ proto string jdtojulian(int juliandaycount)
- Convert a julian day count to a julian calendar date */
-PHP_FUNCTION(jdtojulian)
-{
- long julday;
- int year, month, day;
- char date[16];
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &julday) == FAILURE) {
- RETURN_FALSE;
- }
-
- SdnToJulian(julday, &year, &month, &day);
- sprintf(date, "%i/%i/%i", month, day, year);
-
- RETURN_STRING(date, 1);
-}
-/* }}} */
-
-/* {{{ proto int juliantojd(int month, int day, int year)
- Converts a julian calendar date to julian day count */
-PHP_FUNCTION(juliantojd)
-{
- long year, month, day;
- int jdate;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "lll", &month, &day, &year) == FAILURE) {
- RETURN_FALSE;
- }
-
- jdate = JulianToSdn(year, month, day);
-
- RETURN_LONG(jdate);
-}
-/* }}} */
-
-/* {{{ heb_number_to_chars*/
-/*
-caution: the Hebrew format produces non unique result.
-for example both: year '5' and year '5000' produce 'ä'.
-use the numeric one for calculations.
- */
-static char *heb_number_to_chars(int n, int fl, char **ret)
-{
- char *p, old[18], *endofalafim;
-
- p = endofalafim = old;
-/*
- prevents the option breaking the jewish beliefs, and some other
- critical resources ;)
- */
- if (n > 9999 || n < 1) {
- *ret = NULL;
- return NULL;
- }
-
-/* alafim (thousands) case */
- if (n / 1000) {
- *p = alef_bet[n / 1000];
- p++;
-
- if (CAL_JEWISH_ADD_ALAFIM_GERESH & fl) {
- *p = '\'';
- p++;
- }
- if (CAL_JEWISH_ADD_ALAFIM & fl) {
- strcpy(p, " àìôéí ");
- p += 7;
- }
-
- endofalafim = p;
- n = n % 1000;
- }
-
-/* tav-tav (tav=400) case */
- while (n >= 400) {
- *p = alef_bet[22];
- p++;
- n -= 400;
- }
-
-/* meot (hundreads) case */
- if (n >= 100) {
- *p = alef_bet[18 + n / 100];
- p++;
- n = n % 100;
- }
-
-/* tet-vav & tet-zain case (special case for 15 and 16) */
- if (n == 15 || n == 16) {
- *p = alef_bet[9];
- p++;
- *p = alef_bet[n - 9];
- p++;
- } else {
-/* asarot (tens) case */
- if (n >= 10) {
- *p = alef_bet[9 + n / 10];
- p++;
- n = n % 10;
- }
-
-/* yehidot (ones) case */
- if (n > 0) {
- *p = alef_bet[n];
- p++;
- }
- }
-
- if (CAL_JEWISH_ADD_GERESHAYIM & fl) {
- switch (p - endofalafim) {
- case 0:
- break;
- case 1:
- *p = '\'';
- p++;
- break;
- default:
- *(p) = *(p - 1);
- *(p - 1) = '"';
- p++;
- }
- }
-
- *p = '\0';
- *ret = estrndup(old, (p - old) + 1);
- p = *ret;
- return p;
-}
-/* }}} */
-
-/* {{{ proto string jdtojewish(int juliandaycount [, bool hebrew [, int fl]])
- Converts a julian day count to a jewish calendar date */
-PHP_FUNCTION(jdtojewish)
-{
- long julday, fl = 0;
- zend_bool heb = 0;
- int year, month, day;
- char date[16], hebdate[25];
- char *dayp, *yearp;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l|bl", &julday, &heb, &fl) == FAILURE) {
- RETURN_FALSE;
- }
-
- SdnToJewish(julday, &year, &month, &day);
- if (!heb) {
- sprintf(date, "%i/%i/%i", month, day, year);
- RETURN_STRING(date, 1);
- } else {
- if (year <= 0 || year > 9999) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Year out of range (0-9999).");
- RETURN_FALSE;
- }
-
- sprintf(hebdate, "%s %s %s", heb_number_to_chars(day, fl, &dayp), JewishMonthHebName[month], heb_number_to_chars(year, fl, &yearp));
-
- if (dayp) {
- efree(dayp);
- }
- if (yearp) {
- efree(yearp);
- }
-
- RETURN_STRING(hebdate, 1);
-
- }
-}
-/* }}} */
-
-/* {{{ proto int jewishtojd(int month, int day, int year)
- Converts a jewish calendar date to a julian day count */
-PHP_FUNCTION(jewishtojd)
-{
- long year, month, day;
- int jdate;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "lll", &month, &day, &year) == FAILURE) {
- RETURN_FALSE;
- }
-
- jdate = JewishToSdn(year, month, day);
-
- RETURN_LONG(jdate);
-}
-/* }}} */
-
-/* {{{ proto string jdtofrench(int juliandaycount)
- Converts a julian day count to a french republic calendar date */
-PHP_FUNCTION(jdtofrench)
-{
- long julday;
- int year, month, day;
- char date[16];
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &julday) == FAILURE) {
- RETURN_FALSE;
- }
-
- SdnToFrench(julday, &year, &month, &day);
- sprintf(date, "%i/%i/%i", month, day, year);
-
- RETURN_STRING(date, 1);
-}
-/* }}} */
-
-/* {{{ proto int frenchtojd(int month, int day, int year)
- Converts a french republic calendar date to julian day count */
-PHP_FUNCTION(frenchtojd)
-{
- long year, month, day;
- int jdate;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "lll", &month, &day, &year) == FAILURE) {
- RETURN_FALSE;
- }
-
- jdate = FrenchToSdn(year, month, day);
-
- RETURN_LONG(jdate);
-}
-/* }}} */
-
-/* {{{ proto mixed jddayofweek(int juliandaycount [, int mode])
- Returns name or number of day of week from julian day count */
-PHP_FUNCTION(jddayofweek)
-{
- long julday, mode = CAL_DOW_DAYNO;
- int day;
- char *daynamel, *daynames;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l|l", &julday, &mode) == FAILURE) {
- RETURN_FALSE;
- }
-
- day = DayOfWeek(julday);
- daynamel = DayNameLong[day];
- daynames = DayNameShort[day];
-
- switch (mode) {
- case CAL_DOW_SHORT:
- RETURN_STRING(daynamel, 1);
- break;
- case CAL_DOW_LONG:
- RETURN_STRING(daynames, 1);
- break;
- case CAL_DOW_DAYNO:
- default:
- RETURN_LONG(day);
- break;
- }
-}
-/* }}} */
-
-/* {{{ proto string jdmonthname(int juliandaycount, int mode)
- Returns name of month for julian day count */
-PHP_FUNCTION(jdmonthname)
-{
- long julday, mode;
- char *monthname = NULL;
- int month, day, year;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ll", &julday, &mode) == FAILURE) {
- RETURN_FALSE;
- }
-
- switch (mode) {
- case CAL_MONTH_GREGORIAN_LONG: /* gregorian or julian month */
- SdnToGregorian(julday, &year, &month, &day);
- monthname = MonthNameLong[month];
- break;
- case CAL_MONTH_JULIAN_SHORT: /* gregorian or julian month */
- SdnToJulian(julday, &year, &month, &day);
- monthname = MonthNameShort[month];
- break;
- case CAL_MONTH_JULIAN_LONG: /* gregorian or julian month */
- SdnToJulian(julday, &year, &month, &day);
- monthname = MonthNameLong[month];
- break;
- case CAL_MONTH_JEWISH: /* jewish month */
- SdnToJewish(julday, &year, &month, &day);
- monthname = JewishMonthName[month];
- break;
- case CAL_MONTH_FRENCH: /* french month */
- SdnToFrench(julday, &year, &month, &day);
- monthname = FrenchMonthName[month];
- break;
- default: /* default gregorian */
- case CAL_MONTH_GREGORIAN_SHORT: /* gregorian or julian month */
- SdnToGregorian(julday, &year, &month, &day);
- monthname = MonthNameShort[month];
- break;
- }
-
- RETURN_STRING(monthname, 1);
-}
-/* }}} */
-
-/*
- * 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/calendar/config.m4 b/ext/calendar/config.m4
deleted file mode 100644
index a80101adbb..0000000000
--- a/ext/calendar/config.m4
+++ /dev/null
@@ -1,11 +0,0 @@
-dnl
-dnl $Id$
-dnl
-
-PHP_ARG_ENABLE(calendar,whether to enable calendar conversion support,
-[ --enable-calendar Enable support for calendar conversion])
-
-if test "$PHP_CALENDAR" = "yes"; then
- AC_DEFINE(HAVE_CALENDAR,1,[ ])
- PHP_NEW_EXTENSION(calendar, calendar.c dow.c french.c gregor.c jewish.c julian.c easter.c cal_unix.c, $ext_shared)
-fi
diff --git a/ext/calendar/config.w32 b/ext/calendar/config.w32
deleted file mode 100644
index bd9faba46a..0000000000
--- a/ext/calendar/config.w32
+++ /dev/null
@@ -1,10 +0,0 @@
-// $Id$
-// vim:ft=javascript
-
-ARG_ENABLE("calendar", "calendar conversion support", "yes");
-
-if (PHP_CALENDAR == "yes") {
- EXTENSION("calendar", "calendar.c dow.c french.c gregor.c jewish.c \
- julian.c easter.c cal_unix.c");
- AC_DEFINE('HAVE_CALENDAR', 1, 'Have calendar');
-}
diff --git a/ext/calendar/dow.c b/ext/calendar/dow.c
deleted file mode 100644
index 64ae008f77..0000000000
--- a/ext/calendar/dow.c
+++ /dev/null
@@ -1,76 +0,0 @@
-
-/* $selId: dow.c,v 2.0 1995/10/24 01:13:06 lees Exp $
- * Copyright 1993-1995, Scott E. Lee, all rights reserved.
- * Permission granted to use, copy, modify, distribute and sell so long as
- * the above copyright and this permission statement are retained in all
- * copies. THERE IS NO WARRANTY - USE AT YOUR OWN RISK.
- */
-
-/**************************************************************************
- *
- * These are the externally visible components of this file:
- *
- * int
- * DayOfWeek(
- * long int sdn);
- *
- * Convert a SDN to a day-of-week number (0 to 6). Where 0 stands for
- * Sunday, 1 for Monday, etc. and 6 stands for Saturday.
- *
- * char *DayNameShort[7];
- *
- * Convert a day-of-week number (0 to 6), as returned from DayOfWeek(), to
- * the abbreviated (three character) name of the day.
- *
- * char *DayNameLong[7];
- *
- * Convert a day-of-week number (0 to 6), as returned from DayOfWeek(), to
- * the name of the day.
- *
- **************************************************************************/
-
-#include "sdncal.h"
-
-int DayOfWeek(
- long int sdn)
-{
- int dow;
-
- dow = (sdn + 1) % 7;
- if (dow >= 0) {
- return (dow);
- } else {
- return (dow + 7);
- }
-}
-
-char *DayNameShort[7] =
-{
- "Sun",
- "Mon",
- "Tue",
- "Wed",
- "Thu",
- "Fri",
- "Sat"
-};
-
-char *DayNameLong[7] =
-{
- "Sunday",
- "Monday",
- "Tuesday",
- "Wednesday",
- "Thursday",
- "Friday",
- "Saturday"
-};
-
-/*
- * 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/calendar/easter.c b/ext/calendar/easter.c
deleted file mode 100644
index 419b0505d2..0000000000
--- a/ext/calendar/easter.c
+++ /dev/null
@@ -1,141 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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. |
- +----------------------------------------------------------------------+
- | Authors: Shane Caraveo <shane@caraveo.com> |
- | Colin Viebrock <colin@easydns.com> |
- | Hartmut Holzgraefe <hholzgra@php.net> |
- +----------------------------------------------------------------------+
- */
-/* $Id: */
-
-#include "php.h"
-#include "php_calendar.h"
-#include "sdncal.h"
-#include <time.h>
-
-static void _cal_easter(INTERNAL_FUNCTION_PARAMETERS, int gm)
-{
-
- /* based on code by Simon Kershaw, <webmaster@ely.anglican.org> */
-
- struct tm te;
- long year, golden, solar, lunar, pfm, dom, tmp, easter;
- long method = CAL_EASTER_DEFAULT;
-
- /* Default to the current year if year parameter is not given */
- {
- time_t a;
- struct tm b;
- time(&a);
- php_localtime_r(&a, &b);
- year = 1900 + b.tm_year;
- }
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC,
- "|ll", &year, &method) == FAILURE) {
- return;
- }
-
- if (gm && (year<1970 || year>2037)) { /* out of range for timestamps */
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "This function is only valid for years between 1970 and 2037 inclusive");
- RETURN_FALSE;
- }
-
- golden = (year % 19) + 1; /* the Golden number */
-
- if ((year <= 1582 && method != CAL_EASTER_ALWAYS_GREGORIAN) ||
- (year >= 1583 && year <= 1752 && method != CAL_EASTER_ROMAN && method != CAL_EASTER_ALWAYS_GREGORIAN) ||
- method == CAL_EASTER_ALWAYS_JULIAN) { /* JULIAN CALENDAR */
-
- dom = (year + (year/4) + 5) % 7; /* the "Dominical number" - finding a Sunday */
- if (dom < 0) {
- dom += 7;
- }
-
- pfm = (3 - (11*golden) - 7) % 30; /* uncorrected date of the Paschal full moon */
- if (pfm < 0) {
- pfm += 30;
- }
- } else { /* GREGORIAN CALENDAR */
- dom = (year + (year/4) - (year/100) + (year/400)) % 7; /* the "Domincal number" */
- if (dom < 0) {
- dom += 7;
- }
-
- solar = (year-1600)/100 - (year-1600)/400; /* the solar and lunar corrections */
- lunar = (((year-1400) / 100) * 8) / 25;
-
- pfm = (3 - (11*golden) + solar - lunar) % 30; /* uncorrected date of the Paschal full moon */
- if (pfm < 0) {
- pfm += 30;
- }
- }
-
- if ((pfm == 29) || (pfm == 28 && golden > 11)) { /* corrected date of the Paschal full moon */
- pfm--; /* - days after 21st March */
- }
-
- tmp = (4-pfm-dom) % 7;
- if (tmp < 0) {
- tmp += 7;
- }
-
- easter = pfm + tmp + 1; /* Easter as the number of days after 21st March */
-
- if (gm) { /* return a timestamp */
- te.tm_isdst = -1;
- te.tm_year = year-1900;
- te.tm_sec = 0;
- te.tm_min = 0;
- te.tm_hour = 0;
-
- if (easter < 11) {
- te.tm_mon = 2; /* March */
- te.tm_mday = easter+21;
- } else {
- te.tm_mon = 3; /* April */
- te.tm_mday = easter-10;
- }
-
- Z_LVAL_P(return_value) = mktime(&te);
- } else { /* return the days after March 21 */
- Z_LVAL_P(return_value) = easter;
- }
-
- Z_TYPE_P(return_value) = IS_LONG;
-
-}
-
-/* {{{ proto int easter_date([int year])
- Return the timestamp of midnight on Easter of a given year (defaults to current year) */
-PHP_FUNCTION(easter_date)
-{
- _cal_easter(INTERNAL_FUNCTION_PARAM_PASSTHRU, 1);
-}
-/* }}} */
-
-/* {{{ proto int easter_days([int year, [int method]])
- Return the number of days after March 21 that Easter falls on for a given year (defaults to current year) */
-PHP_FUNCTION(easter_days)
-{
- _cal_easter(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0);
-}
-/* }}} */
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- */
diff --git a/ext/calendar/french.c b/ext/calendar/french.c
deleted file mode 100644
index 5b4dd53750..0000000000
--- a/ext/calendar/french.c
+++ /dev/null
@@ -1,160 +0,0 @@
-/* $selId: french.c,v 2.0 1995/10/24 01:13:06 lees Exp $
- * Copyright 1993-1995, Scott E. Lee, all rights reserved.
- * Permission granted to use, copy, modify, distribute and sell so long as
- * the above copyright and this permission statement are retained in all
- * copies. THERE IS NO WARRANTY - USE AT YOUR OWN RISK.
- */
-
-/**************************************************************************
- *
- * These are the externally visible components of this file:
- *
- * void
- * SdnToFrench(
- * long int sdn,
- * int *pYear,
- * int *pMonth,
- * int *pDay);
- *
- * Convert a SDN to a French republican calendar date. If the input SDN is
- * before the first day of year 1 or after the last day of year 14, the
- * three output values will all be set to zero, otherwise *pYear will be in
- * the range 1 to 14 inclusive; *pMonth will be in the range 1 to 13
- * inclusive; *pDay will be in the range 1 to 30 inclusive. If *pMonth is
- * 13, the SDN represents one of the holidays at the end of the year and
- * *pDay will be in the range 1 to 6 inclusive.
- *
- * long int
- * FrenchToSdn(
- * int year,
- * int month,
- * int day);
- *
- * Convert a French republican calendar date to a SDN. Zero is returned
- * when the input date is detected as invalid or out of the supported
- * range. The return value will be > 0 for all valid, supported dates, but
- * there are some invalid dates that will return a positive value. To
- * verify that a date is valid, convert it to SDN and then back and compare
- * with the original.
- *
- * char *FrenchMonthName[14];
- *
- * Convert a French republican month number (1 to 13) to the name of the
- * French republican month (null terminated). An index of 13 (for the
- * "extra" days at the end of the year) will return the string "Extra". An
- * index of zero will return a zero length string.
- *
- * VALID RANGE
- *
- * These routines only convert dates in years 1 through 14 (Gregorian
- * dates 22 September 1792 through 22 September 1806). This more than
- * covers the period when the calendar was in use.
- *
- * I would support a wider range of dates, but I have not been able to
- * find an authoritative definition of when leap years were to have
- * occurred. There are suggestions that it was to skip a leap year ever
- * 100 years like the Gregorian calendar.
- *
- * CALENDAR OVERVIEW
- *
- * The French republican calendar was adopted in October 1793 during
- * the French Revolution and was abandoned in January 1806. The intent
- * was to create a new calendar system that was based on scientific
- * principals, not religious traditions.
- *
- * The year is divided into 12 months of 30 days each. The remaining 5
- * to 6 days in the year are grouped at the end and are holidays. Each
- * month is divided into three decades (instead of weeks) of 10 days
- * each.
- *
- * The epoch (first day of the first year) is 22 September 1792 in the
- * Gregorian calendar. Leap years are every fourth year (year 3, 7,
- * 11, etc.)
- *
- * TESTING
- *
- * This algorithm has been tested from the year 1 to 14. The source
- * code of the verification program is included in this package.
- *
- * REFERENCES
- *
- * I have found no detailed, authoritative reference on this calendar.
- * The algorithms are based on a preponderance of less authoritative
- * sources.
- *
- **************************************************************************/
-
-#include "sdncal.h"
-
-#define FRENCH_SDN_OFFSET 2375474
-#define DAYS_PER_4_YEARS 1461
-#define DAYS_PER_MONTH 30
-#define FIRST_VALID 2375840
-#define LAST_VALID 2380952
-
-void SdnToFrench(
- long int sdn,
- int *pYear,
- int *pMonth,
- int *pDay)
-{
- long int temp;
- int dayOfYear;
-
- if (sdn < FIRST_VALID || sdn > LAST_VALID) {
- *pYear = 0;
- *pMonth = 0;
- *pDay = 0;
- return;
- }
- temp = (sdn - FRENCH_SDN_OFFSET) * 4 - 1;
- *pYear = temp / DAYS_PER_4_YEARS;
- dayOfYear = (temp % DAYS_PER_4_YEARS) / 4;
- *pMonth = dayOfYear / DAYS_PER_MONTH + 1;
- *pDay = dayOfYear % DAYS_PER_MONTH + 1;
-}
-
-long int FrenchToSdn(
- int year,
- int month,
- int day)
-{
- /* check for invalid dates */
- if (year < 1 || year > 14 ||
- month < 1 || month > 13 ||
- day < 1 || day > 30) {
- return (0);
- }
- return ((year * DAYS_PER_4_YEARS) / 4
- + (month - 1) * DAYS_PER_MONTH
- + day
- + FRENCH_SDN_OFFSET);
-}
-
-char *FrenchMonthName[14] =
-{
- "",
- "Vendemiaire",
- "Brumaire",
- "Frimaire",
- "Nivose",
- "Pluviose",
- "Ventose",
- "Germinal",
- "Floreal",
- "Prairial",
- "Messidor",
- "Thermidor",
- "Fructidor",
- "Extra"
-};
-
-
-/*
- * 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/calendar/gregor.c b/ext/calendar/gregor.c
deleted file mode 100644
index f48950901a..0000000000
--- a/ext/calendar/gregor.c
+++ /dev/null
@@ -1,265 +0,0 @@
-/* $selId: gregor.c,v 2.0 1995/10/24 01:13:06 lees Exp $
- * Copyright 1993-1995, Scott E. Lee, all rights reserved.
- * Permission granted to use, copy, modify, distribute and sell so long as
- * the above copyright and this permission statement are retained in all
- * copies. THERE IS NO WARRANTY - USE AT YOUR OWN RISK.
- */
-
-/**************************************************************************
- *
- * These are the externally visible components of this file:
- *
- * void
- * SdnToGregorian(
- * long int sdn,
- * int *pYear,
- * int *pMonth,
- * int *pDay);
- *
- * Convert a SDN to a Gregorian calendar date. If the input SDN is less
- * than 1, the three output values will all be set to zero, otherwise
- * *pYear will be >= -4714 and != 0; *pMonth will be in the range 1 to 12
- * inclusive; *pDay will be in the range 1 to 31 inclusive.
- *
- * long int
- * GregorianToSdn(
- * int inputYear,
- * int inputMonth,
- * int inputDay);
- *
- * Convert a Gregorian calendar date to a SDN. Zero is returned when the
- * input date is detected as invalid or out of the supported range. The
- * return value will be > 0 for all valid, supported dates, but there are
- * some invalid dates that will return a positive value. To verify that a
- * date is valid, convert it to SDN and then back and compare with the
- * original.
- *
- * char *MonthNameShort[13];
- *
- * Convert a Gregorian month number (1 to 12) to the abbreviated (three
- * character) name of the Gregorian month (null terminated). An index of
- * zero will return a zero length string.
- *
- * char *MonthNameLong[13];
- *
- * Convert a Gregorian month number (1 to 12) to the name of the Gregorian
- * month (null terminated). An index of zero will return a zero length
- * string.
- *
- * VALID RANGE
- *
- * 4714 B.C. to at least 10000 A.D.
- *
- * Although this software can handle dates all the way back to 4714
- * B.C., such use may not be meaningful. The Gregorian calendar was
- * not instituted until October 15, 1582 (or October 5, 1582 in the
- * Julian calendar). Some countries did not accept it until much
- * later. For example, Britain converted in 1752, The USSR in 1918 and
- * Greece in 1923. Most European countries used the Julian calendar
- * prior to the Gregorian.
- *
- * CALENDAR OVERVIEW
- *
- * The Gregorian calendar is a modified version of the Julian calendar.
- * The only difference being the specification of leap years. The
- * Julian calendar specifies that every year that is a multiple of 4
- * will be a leap year. This leads to a year that is 365.25 days long,
- * but the current accepted value for the tropical year is 365.242199
- * days.
- *
- * To correct this error in the length of the year and to bring the
- * vernal equinox back to March 21, Pope Gregory XIII issued a papal
- * bull declaring that Thursday October 4, 1582 would be followed by
- * Friday October 15, 1582 and that centennial years would only be a
- * leap year if they were a multiple of 400. This shortened the year
- * by 3 days per 400 years, giving a year of 365.2425 days.
- *
- * Another recently proposed change in the leap year rule is to make
- * years that are multiples of 4000 not a leap year, but this has never
- * been officially accepted and this rule is not implemented in these
- * algorithms.
- *
- * ALGORITHMS
- *
- * The calculations are based on three different cycles: a 400 year
- * cycle of leap years, a 4 year cycle of leap years and a 5 month
- * cycle of month lengths.
- *
- * The 5 month cycle is used to account for the varying lengths of
- * months. You will notice that the lengths alternate between 30
- * and 31 days, except for three anomalies: both July and August
- * have 31 days, both December and January have 31, and February
- * is less than 30. Starting with March, the lengths are in a
- * cycle of 5 months (31, 30, 31, 30, 31):
- *
- * Mar 31 days \
- * Apr 30 days |
- * May 31 days > First cycle
- * Jun 30 days |
- * Jul 31 days /
- *
- * Aug 31 days \
- * Sep 30 days |
- * Oct 31 days > Second cycle
- * Nov 30 days |
- * Dec 31 days /
- *
- * Jan 31 days \
- * Feb 28/9 days |
- * > Third cycle (incomplete)
- *
- * For this reason the calculations (internally) assume that the
- * year starts with March 1.
- *
- * TESTING
- *
- * This algorithm has been tested from the year 4714 B.C. to 10000
- * A.D. The source code of the verification program is included in
- * this package.
- *
- * REFERENCES
- *
- * Conversions Between Calendar Date and Julian Day Number by Robert J.
- * Tantzen, Communications of the Association for Computing Machinery
- * August 1963. (Also published in Collected Algorithms from CACM,
- * algorithm number 199).
- *
- **************************************************************************/
-
-#include "sdncal.h"
-
-#define GREGOR_SDN_OFFSET 32045
-#define DAYS_PER_5_MONTHS 153
-#define DAYS_PER_4_YEARS 1461
-#define DAYS_PER_400_YEARS 146097
-
-void SdnToGregorian(
- long int sdn,
- int *pYear,
- int *pMonth,
- int *pDay)
-{
- int century;
- int year;
- int month;
- int day;
- long int temp;
- int dayOfYear;
-
- if (sdn <= 0) {
- *pYear = 0;
- *pMonth = 0;
- *pDay = 0;
- return;
- }
- temp = (sdn + GREGOR_SDN_OFFSET) * 4 - 1;
-
- /* Calculate the century (year/100). */
- century = temp / DAYS_PER_400_YEARS;
-
- /* Calculate the year and day of year (1 <= dayOfYear <= 366). */
- temp = ((temp % DAYS_PER_400_YEARS) / 4) * 4 + 3;
- year = (century * 100) + (temp / DAYS_PER_4_YEARS);
- dayOfYear = (temp % DAYS_PER_4_YEARS) / 4 + 1;
-
- /* Calculate the month and day of month. */
- temp = dayOfYear * 5 - 3;
- month = temp / DAYS_PER_5_MONTHS;
- day = (temp % DAYS_PER_5_MONTHS) / 5 + 1;
-
- /* Convert to the normal beginning of the year. */
- if (month < 10) {
- month += 3;
- } else {
- year += 1;
- month -= 9;
- }
-
- /* Adjust to the B.C./A.D. type numbering. */
- year -= 4800;
- if (year <= 0)
- year--;
-
- *pYear = year;
- *pMonth = month;
- *pDay = day;
-}
-
-long int GregorianToSdn(
- int inputYear,
- int inputMonth,
- int inputDay)
-{
- int year;
- int month;
-
- /* check for invalid dates */
- if (inputYear == 0 || inputYear < -4714 ||
- inputMonth <= 0 || inputMonth > 12 ||
- inputDay <= 0 || inputDay > 31) {
- return (0);
- }
- /* check for dates before SDN 1 (Nov 25, 4714 B.C.) */
- if (inputYear == -4714) {
- if (inputMonth < 11) {
- return (0);
- }
- if (inputMonth == 11 && inputDay < 25) {
- return (0);
- }
- }
- /* Make year always a positive number. */
- if (inputYear < 0) {
- year = inputYear + 4801;
- } else {
- year = inputYear + 4800;
- }
-
- /* Adjust the start of the year. */
- if (inputMonth > 2) {
- month = inputMonth - 3;
- } else {
- month = inputMonth + 9;
- year--;
- }
-
- return (((year / 100) * DAYS_PER_400_YEARS) / 4
- + ((year % 100) * DAYS_PER_4_YEARS) / 4
- + (month * DAYS_PER_5_MONTHS + 2) / 5
- + inputDay
- - GREGOR_SDN_OFFSET);
-}
-
-char *MonthNameShort[13] =
-{
- "",
- "Jan",
- "Feb",
- "Mar",
- "Apr",
- "May",
- "Jun",
- "Jul",
- "Aug",
- "Sep",
- "Oct",
- "Nov",
- "Dec"
-};
-
-char *MonthNameLong[13] =
-{
- "",
- "January",
- "February",
- "March",
- "April",
- "May",
- "June",
- "July",
- "August",
- "September",
- "October",
- "November",
- "December"
-};
diff --git a/ext/calendar/jewish.c b/ext/calendar/jewish.c
deleted file mode 100644
index f4dc7c35ae..0000000000
--- a/ext/calendar/jewish.c
+++ /dev/null
@@ -1,763 +0,0 @@
-/* $selId: jewish.c,v 2.0 1995/10/24 01:13:06 lees Exp $
- * Copyright 1993-1995, Scott E. Lee, all rights reserved.
- * Permission granted to use, copy, modify, distribute and sell so long as
- * the above copyright and this permission statement are retained in all
- * copies. THERE IS NO WARRANTY - USE AT YOUR OWN RISK.
- */
-
-/**************************************************************************
- *
- * These are the externally visible components of this file:
- *
- * void
- * SdnToJewish(
- * long int sdn,
- * int *pYear,
- * int *pMonth,
- * int *pDay);
- *
- * Convert a SDN to a Jewish calendar date. If the input SDN is before the
- * first day of year 1, the three output values will all be set to zero,
- * otherwise *pYear will be > 0; *pMonth will be in the range 1 to 13
- * inclusive; *pDay will be in the range 1 to 30 inclusive. Note that Adar
- * II is assigned the month number 7 and Elul is always 13.
- *
- * long int
- * JewishToSdn(
- * int year,
- * int month,
- * int day);
- *
- * Convert a Jewish calendar date to a SDN. Zero is returned when the
- * input date is detected as invalid or out of the supported range. The
- * return value will be > 0 for all valid, supported dates, but there are
- * some invalid dates that will return a positive value. To verify that a
- * date is valid, convert it to SDN and then back and compare with the
- * original.
- *
- * char *JewishMonthName[14];
- *
- * Convert a Jewish month number (1 to 13) to the name of the Jewish month
- * (null terminated). An index of zero will return a zero length string.
- *
- * VALID RANGE
- *
- * Although this software can handle dates all the way back to the year
- * 1 (3761 B.C.), such use may not be meaningful.
- *
- * The Jewish calendar has been in use for several thousand years, but
- * in the early days there was no formula to determine the start of a
- * month. A new month was started when the new moon was first
- * observed.
- *
- * It is not clear when the current rule based calendar replaced the
- * observation based calendar. According to the book "Jewish Calendar
- * Mystery Dispelled" by George Zinberg, the patriarch Hillel II
- * published these rules in 358 A.D. But, according to The
- * Encyclopedia Judaica, Hillel II may have only published the 19 year
- * rule for determining the occurrence of leap years.
- *
- * I have yet to find a specific date when the current set of rules
- * were known to be in use.
- *
- * CALENDAR OVERVIEW
- *
- * The Jewish calendar is based on lunar as well as solar cycles. A
- * month always starts on or near a new moon and has either 29 or 30
- * days (a lunar cycle is about 29 1/2 days). Twelve of these
- * alternating 29-30 day months gives a year of 354 days, which is
- * about 11 1/4 days short of a solar year.
- *
- * Since a month is defined to be a lunar cycle (new moon to new moon),
- * this 11 1/4 day difference cannot be overcome by adding days to a
- * month as with the Gregorian calendar, so an entire month is
- * periodically added to the year, making some years 13 months long.
- *
- * For astronomical as well as ceremonial reasons, the start of a new
- * year may be delayed until a day or two after the new moon causing
- * years to vary in length. Leap years can be from 383 to 385 days and
- * common years can be from 353 to 355 days. These are the months of
- * the year and their possible lengths:
- *
- * COMMON YEAR LEAP YEAR
- * 1 Tishri 30 30 30 30 30 30
- * 2 Heshvan 29 29 30 29 29 30 (variable)
- * 3 Kislev 29 30 30 29 30 30 (variable)
- * 4 Tevet 29 29 29 29 29 29
- * 5 Shevat 30 30 30 30 30 30
- * 6 Adar I 29 29 29 30 30 30 (variable)
- * 7 Adar II -- -- -- 29 29 29 (optional)
- * 8 Nisan 30 30 30 30 30 30
- * 9 Iyyar 29 29 29 29 29 29
- * 10 Sivan 30 30 30 30 30 30
- * 11 Tammuz 29 29 29 29 29 29
- * 12 Av 30 30 30 30 30 30
- * 13 Elul 29 29 29 29 29 29
- * --- --- --- --- --- ---
- * 353 354 355 383 384 385
- *
- * Note that the month names and other words that appear in this file
- * have multiple possible spellings in the Roman character set. I have
- * chosen to use the spellings found in the Encyclopedia Judaica.
- *
- * Adar II, the month added for leap years, is sometimes referred to as
- * the 13th month, but I have chosen to assign it the number 7 to keep
- * the months in chronological order. This may not be consistent with
- * other numbering schemes.
- *
- * Leap years occur in a fixed pattern of 19 years called the metonic
- * cycle. The 3rd, 6th, 8th, 11th, 14th, 17th and 19th years of this
- * cycle are leap years. The first metonic cycle starts with Jewish
- * year 1, or 3761/60 B.C. This is believed to be the year of
- * creation.
- *
- * To construct the calendar for a year, you must first find the length
- * of the year by determining the first day of the year (Tishri 1, or
- * Rosh Ha-Shanah) and the first day of the following year. This
- * selects one of the six possible month length configurations listed
- * above.
- *
- * Finding the first day of the year is the most difficult part.
- * Finding the date and time of the new moon (or molad) is the first
- * step. For this purpose, the lunar cycle is assumed to be 29 days 12
- * hours and 793 halakim. A halakim is 1/1080th of an hour or 3 1/3
- * seconds. (This assumed value is only about 1/2 second less than the
- * value used by modern astronomers -- not bad for a number that was
- * determined so long ago.) The first molad of year 1 occurred on
- * Sunday at 11:20:11 P.M. This would actually be Monday, because the
- * Jewish day is considered to begin at sunset.
- *
- * Since sunset varies, the day is assumed to begin at 6:00 P.M. for
- * calendar calculation purposes. So, the first molad was 5 hours 793
- * halakim after the start of Tishri 1, 0001 (which was Monday
- * September 7, 4761 B.C. by the Gregorian calendar). All subsequent
- * molads can be calculated from this starting point by adding the
- * length of a lunar cycle.
- *
- * Once the molad that starts a year is determined the actual start of
- * the year (Tishri 1) can be determined. Tishri 1 will be the day of
- * the molad unless it is delayed by one of the following four rules
- * (called dehiyyot). Each rule can delay the start of the year by one
- * day, and since rule #1 can combine with one of the other rules, it
- * can be delayed as much as two days.
- *
- * 1. Tishri 1 must never be Sunday, Wednesday or Friday. (This
- * is largely to prevent certain holidays from occurring on the
- * day before or after the Sabbath.)
- *
- * 2. If the molad occurs on or after noon, Tishri 1 must be
- * delayed.
- *
- * 3. If it is a common (not leap) year and the molad occurs on
- * Tuesday at or after 3:11:20 A.M., Tishri 1 must be delayed.
- *
- * 4. If it is the year following a leap year and the molad occurs
- * on Monday at or after 9:32:43 and 1/3 sec, Tishri 1 must be
- * delayed.
- *
- * GLOSSARY
- *
- * dehiyyot The set of 4 rules that determine when the new year
- * starts relative to the molad.
- *
- * halakim 1/1080th of an hour or 3 1/3 seconds.
- *
- * lunar cycle The period of time between mean conjunctions of the
- * sun and moon (new moon to new moon). This is
- * assumed to be 29 days 12 hours and 793 halakim for
- * calendar purposes.
- *
- * metonic cycle A 19 year cycle which determines which years are
- * leap years and which are common years. The 3rd,
- * 6th, 8th, 11th, 14th, 17th and 19th years of this
- * cycle are leap years.
- *
- * molad The date and time of the mean conjunction of the
- * sun and moon (new moon). This is the approximate
- * beginning of a month.
- *
- * Rosh Ha-Shanah The first day of the Jewish year (Tishri 1).
- *
- * Tishri The first month of the Jewish year.
- *
- * ALGORITHMS
- *
- * SERIAL DAY NUMBER TO JEWISH DATE
- *
- * The simplest approach would be to use the rules stated above to find
- * the molad of Tishri before and after the given day number. Then use
- * the molads to find Tishri 1 of the current and following years.
- * From this the length of the year can be determined and thus the
- * length of each month. But this method is used as a last resort.
- *
- * The first 59 days of the year are the same regardless of the length
- * of the year. As a result, only the day number of the start of the
- * year is required.
- *
- * Similarly, the last 6 months do not change from year to year. And
- * since it can be determined whether the year is a leap year by simple
- * division, the lengths of Adar I and II can be easily calculated. In
- * fact, all dates after the 3rd month are consistent from year to year
- * (once it is known whether it is a leap year).
- *
- * This means that if the given day number falls in the 3rd month or on
- * the 30th day of the 2nd month the length of the year must be found,
- * but in no other case.
- *
- * So, the approach used is to take the given day number and round it
- * to the closest molad of Tishri (first new moon of the year). The
- * rounding is not really to the *closest* molad, but is such that if
- * the day number is before the middle of the 3rd month the molad at
- * the start of the year is found, otherwise the molad at the end of
- * the year is found.
- *
- * Only if the day number is actually found to be in the ambiguous
- * period of 29 to 31 days is the other molad calculated.
- *
- * JEWISH DATE TO SERIAL DAY NUMBER
- *
- * The year number is used to find which 19 year metonic cycle contains
- * the date and which year within the cycle (this is a division and
- * modulus). This also determines whether it is a leap year.
- *
- * If the month is 1 or 2, the calculation is simple addition to the
- * first of the year.
- *
- * If the month is 8 (Nisan) or greater, the calculation is simple
- * subtraction from beginning of the following year.
- *
- * If the month is 4 to 7, it is considered whether it is a leap year
- * and then simple subtraction from the beginning of the following year
- * is used.
- *
- * Only if it is the 3rd month is both the start and end of the year
- * required.
- *
- * TESTING
- *
- * This algorithm has been tested in two ways. First, 510 dates from a
- * table in "Jewish Calendar Mystery Dispelled" were calculated and
- * compared to the table. Second, the calculation algorithm described
- * in "Jewish Calendar Mystery Dispelled" was coded and used to verify
- * all dates from the year 1 (3761 B.C.) to the year 13760 (10000
- * A.D.).
- *
- * The source code of the verification program is included in this
- * package.
- *
- * REFERENCES
- *
- * The Encyclopedia Judaica, the entry for "Calendar"
- *
- * The Jewish Encyclopedia
- *
- * Jewish Calendar Mystery Dispelled by George Zinberg, Vantage Press,
- * 1963
- *
- * The Comprehensive Hebrew Calendar by Arthur Spier, Behrman House
- *
- * The Book of Calendars [note that this work contains many typos]
- *
- **************************************************************************/
-
-#if defined(PHP_WIN32) && _MSC_VER >= 1200
-#pragma setlocale("english")
-#endif
-
-#include "sdncal.h"
-
-#define HALAKIM_PER_HOUR 1080
-#define HALAKIM_PER_DAY 25920
-#define HALAKIM_PER_LUNAR_CYCLE ((29 * HALAKIM_PER_DAY) + 13753)
-#define HALAKIM_PER_METONIC_CYCLE (HALAKIM_PER_LUNAR_CYCLE * (12 * 19 + 7))
-
-#define JEWISH_SDN_OFFSET 347997
-#define NEW_MOON_OF_CREATION 31524
-
-#define SUNDAY 0
-#define MONDAY 1
-#define TUESDAY 2
-#define WEDNESDAY 3
-#define THURSDAY 4
-#define FRIDAY 5
-#define SATURDAY 6
-
-#define NOON (18 * HALAKIM_PER_HOUR)
-#define AM3_11_20 ((9 * HALAKIM_PER_HOUR) + 204)
-#define AM9_32_43 ((15 * HALAKIM_PER_HOUR) + 589)
-
-static int monthsPerYear[19] =
-{
-12, 12, 13, 12, 12, 13, 12, 13, 12, 12, 13, 12, 12, 13, 12, 12, 13, 12, 13
-};
-
-static int yearOffset[19] =
-{
- 0, 12, 24, 37, 49, 61, 74, 86, 99, 111, 123,
- 136, 148, 160, 173, 185, 197, 210, 222
-};
-
-char *JewishMonthName[14] =
-{
- "",
- "Tishri",
- "Heshvan",
- "Kislev",
- "Tevet",
- "Shevat",
- "AdarI",
- "AdarII",
- "Nisan",
- "Iyyar",
- "Sivan",
- "Tammuz",
- "Av",
- "Elul"
-};
-
-char *JewishMonthHebName[14] =
-{
- "",
- "úùøé",
- "çùåï",
- "ëñìå",
- "èáú",
- "ùáè",
- "àãø",
- "'àãø á",
- "ðéñï",
- "àééø",
- "ñéåï",
- "úîåæ",
- "àá",
- "àìåì"
-};
-
-/************************************************************************
- * Given the year within the 19 year metonic cycle and the time of a molad
- * (new moon) which starts that year, this routine will calculate what day
- * will be the actual start of the year (Tishri 1 or Rosh Ha-Shanah). This
- * first day of the year will be the day of the molad unless one of 4 rules
- * (called dehiyyot) delays it. These 4 rules can delay the start of the
- * year by as much as 2 days.
- */
-static long int Tishri1(
- int metonicYear,
- long int moladDay,
- long int moladHalakim)
-{
- long int tishri1;
- int dow;
- int leapYear;
- int lastWasLeapYear;
-
- tishri1 = moladDay;
- dow = tishri1 % 7;
- leapYear = metonicYear == 2 || metonicYear == 5 || metonicYear == 7
- || metonicYear == 10 || metonicYear == 13 || metonicYear == 16
- || metonicYear == 18;
- lastWasLeapYear = metonicYear == 3 || metonicYear == 6
- || metonicYear == 8 || metonicYear == 11 || metonicYear == 14
- || metonicYear == 17 || metonicYear == 0;
-
- /* Apply rules 2, 3 and 4. */
- if ((moladHalakim >= NOON) ||
- ((!leapYear) && dow == TUESDAY && moladHalakim >= AM3_11_20) ||
- (lastWasLeapYear && dow == MONDAY && moladHalakim >= AM9_32_43)) {
- tishri1++;
- dow++;
- if (dow == 7) {
- dow = 0;
- }
- }
- /* Apply rule 1 after the others because it can cause an additional
- * delay of one day. */
- if (dow == WEDNESDAY || dow == FRIDAY || dow == SUNDAY) {
- tishri1++;
- }
- return (tishri1);
-}
-
-/************************************************************************
- * Given a metonic cycle number, calculate the date and time of the molad
- * (new moon) that starts that cycle. Since the length of a metonic cycle
- * is a constant, this is a simple calculation, except that it requires an
- * intermediate value which is bigger that 32 bits. Because this
- * intermediate value only needs 36 to 37 bits and the other numbers are
- * constants, the process has been reduced to just a few steps.
- */
-static void MoladOfMetonicCycle(
- int metonicCycle,
- long int *pMoladDay,
- long int *pMoladHalakim)
-{
- register unsigned long int r1, r2, d1, d2;
-
- /* Start with the time of the first molad after creation. */
- r1 = NEW_MOON_OF_CREATION;
-
- /* Calculate metonicCycle * HALAKIM_PER_METONIC_CYCLE. The upper 32
- * bits of the result will be in r2 and the lower 16 bits will be
- * in r1. */
- r1 += metonicCycle * (HALAKIM_PER_METONIC_CYCLE & 0xFFFF);
- r2 = r1 >> 16;
- r2 += metonicCycle * ((HALAKIM_PER_METONIC_CYCLE >> 16) & 0xFFFF);
-
- /* Calculate r2r1 / HALAKIM_PER_DAY. The remainder will be in r1, the
- * upper 16 bits of the quotient will be in d2 and the lower 16 bits
- * will be in d1. */
- d2 = r2 / HALAKIM_PER_DAY;
- r2 -= d2 * HALAKIM_PER_DAY;
- r1 = (r2 << 16) | (r1 & 0xFFFF);
- d1 = r1 / HALAKIM_PER_DAY;
- r1 -= d1 * HALAKIM_PER_DAY;
-
- *pMoladDay = (d2 << 16) | d1;
- *pMoladHalakim = r1;
-}
-
-/************************************************************************
- * Given a day number, find the molad of Tishri (the new moon at the start
- * of a year) which is closest to that day number. It's not really the
- * *closest* molad that we want here. If the input day is in the first two
- * months, we want the molad at the start of the year. If the input day is
- * in the fourth to last months, we want the molad at the end of the year.
- * If the input day is in the third month, it doesn't matter which molad is
- * returned, because both will be required. This type of "rounding" allows
- * us to avoid calculating the length of the year in most cases.
- */
-static void FindTishriMolad(
- long int inputDay,
- int *pMetonicCycle,
- int *pMetonicYear,
- long int *pMoladDay,
- long int *pMoladHalakim)
-{
- long int moladDay;
- long int moladHalakim;
- int metonicCycle;
- int metonicYear;
-
- /* Estimate the metonic cycle number. Note that this may be an under
- * estimate because there are 6939.6896 days in a metonic cycle not
- * 6940, but it will never be an over estimate. The loop below will
- * correct for any error in this estimate. */
- metonicCycle = (inputDay + 310) / 6940;
-
- /* Calculate the time of the starting molad for this metonic cycle. */
- MoladOfMetonicCycle(metonicCycle, &moladDay, &moladHalakim);
-
- /* If the above was an under estimate, increment the cycle number until
- * the correct one is found. For modern dates this loop is about 98.6%
- * likely to not execute, even once, because the above estimate is
- * really quite close. */
- while (moladDay < inputDay - 6940 + 310) {
- metonicCycle++;
- moladHalakim += HALAKIM_PER_METONIC_CYCLE;
- moladDay += moladHalakim / HALAKIM_PER_DAY;
- moladHalakim = moladHalakim % HALAKIM_PER_DAY;
- }
-
- /* Find the molad of Tishri closest to this date. */
- for (metonicYear = 0; metonicYear < 18; metonicYear++) {
- if (moladDay > inputDay - 74) {
- break;
- }
- moladHalakim += HALAKIM_PER_LUNAR_CYCLE * monthsPerYear[metonicYear];
- moladDay += moladHalakim / HALAKIM_PER_DAY;
- moladHalakim = moladHalakim % HALAKIM_PER_DAY;
- }
-
- *pMetonicCycle = metonicCycle;
- *pMetonicYear = metonicYear;
- *pMoladDay = moladDay;
- *pMoladHalakim = moladHalakim;
-}
-
-/************************************************************************
- * Given a year, find the number of the first day of that year and the date
- * and time of the starting molad.
- */
-static void FindStartOfYear(
- int year,
- int *pMetonicCycle,
- int *pMetonicYear,
- long int *pMoladDay,
- long int *pMoladHalakim,
- int *pTishri1)
-{
- *pMetonicCycle = (year - 1) / 19;
- *pMetonicYear = (year - 1) % 19;
- MoladOfMetonicCycle(*pMetonicCycle, pMoladDay, pMoladHalakim);
-
- *pMoladHalakim += HALAKIM_PER_LUNAR_CYCLE * yearOffset[*pMetonicYear];
- *pMoladDay += *pMoladHalakim / HALAKIM_PER_DAY;
- *pMoladHalakim = *pMoladHalakim % HALAKIM_PER_DAY;
-
- *pTishri1 = Tishri1(*pMetonicYear, *pMoladDay, *pMoladHalakim);
-}
-
-/************************************************************************
- * Given a serial day number (SDN), find the corresponding year, month and
- * day in the Jewish calendar. The three output values will always be
- * modified. If the input SDN is before the first day of year 1, they will
- * all be set to zero, otherwise *pYear will be > 0; *pMonth will be in the
- * range 1 to 13 inclusive; *pDay will be in the range 1 to 30 inclusive.
- */
-void SdnToJewish(
- long int sdn,
- int *pYear,
- int *pMonth,
- int *pDay)
-{
- long int inputDay;
- long int day;
- long int halakim;
- int metonicCycle;
- int metonicYear;
- int tishri1;
- int tishri1After;
- int yearLength;
-
- if (sdn <= JEWISH_SDN_OFFSET) {
- *pYear = 0;
- *pMonth = 0;
- *pDay = 0;
- return;
- }
- inputDay = sdn - JEWISH_SDN_OFFSET;
-
- FindTishriMolad(inputDay, &metonicCycle, &metonicYear, &day, &halakim);
- tishri1 = Tishri1(metonicYear, day, halakim);
-
- if (inputDay >= tishri1) {
- /* It found Tishri 1 at the start of the year. */
- *pYear = metonicCycle * 19 + metonicYear + 1;
- if (inputDay < tishri1 + 59) {
- if (inputDay < tishri1 + 30) {
- *pMonth = 1;
- *pDay = inputDay - tishri1 + 1;
- } else {
- *pMonth = 2;
- *pDay = inputDay - tishri1 - 29;
- }
- return;
- }
- /* We need the length of the year to figure this out, so find
- * Tishri 1 of the next year. */
- halakim += HALAKIM_PER_LUNAR_CYCLE * monthsPerYear[metonicYear];
- day += halakim / HALAKIM_PER_DAY;
- halakim = halakim % HALAKIM_PER_DAY;
- tishri1After = Tishri1((metonicYear + 1) % 19, day, halakim);
- } else {
- /* It found Tishri 1 at the end of the year. */
- *pYear = metonicCycle * 19 + metonicYear;
- if (inputDay >= tishri1 - 177) {
- /* It is one of the last 6 months of the year. */
- if (inputDay > tishri1 - 30) {
- *pMonth = 13;
- *pDay = inputDay - tishri1 + 30;
- } else if (inputDay > tishri1 - 60) {
- *pMonth = 12;
- *pDay = inputDay - tishri1 + 60;
- } else if (inputDay > tishri1 - 89) {
- *pMonth = 11;
- *pDay = inputDay - tishri1 + 89;
- } else if (inputDay > tishri1 - 119) {
- *pMonth = 10;
- *pDay = inputDay - tishri1 + 119;
- } else if (inputDay > tishri1 - 148) {
- *pMonth = 9;
- *pDay = inputDay - tishri1 + 148;
- } else {
- *pMonth = 8;
- *pDay = inputDay - tishri1 + 178;
- }
- return;
- } else {
- if (monthsPerYear[(*pYear - 1) % 19] == 13) {
- *pMonth = 7;
- *pDay = inputDay - tishri1 + 207;
- if (*pDay > 0)
- return;
- (*pMonth)--;
- (*pDay) += 30;
- if (*pDay > 0)
- return;
- (*pMonth)--;
- (*pDay) += 30;
- } else {
- *pMonth = 6;
- *pDay = inputDay - tishri1 + 207;
- if (*pDay > 0)
- return;
- (*pMonth)--;
- (*pDay) += 30;
- }
- if (*pDay > 0)
- return;
- (*pMonth)--;
- (*pDay) += 29;
- if (*pDay > 0)
- return;
-
- /* We need the length of the year to figure this out, so find
- * Tishri 1 of this year. */
- tishri1After = tishri1;
- FindTishriMolad(day - 365,
- &metonicCycle, &metonicYear, &day, &halakim);
- tishri1 = Tishri1(metonicYear, day, halakim);
- }
- }
-
- yearLength = tishri1After - tishri1;
- day = inputDay - tishri1 - 29;
- if (yearLength == 355 || yearLength == 385) {
- /* Heshvan has 30 days */
- if (day <= 30) {
- *pMonth = 2;
- *pDay = day;
- return;
- }
- day -= 30;
- } else {
- /* Heshvan has 29 days */
- if (day <= 29) {
- *pMonth = 2;
- *pDay = day;
- return;
- }
- day -= 29;
- }
-
- /* It has to be Kislev. */
- *pMonth = 3;
- *pDay = day;
-}
-
-/************************************************************************
- * Given a year, month and day in the Jewish calendar, find the
- * corresponding serial day number (SDN). Zero is returned when the input
- * date is detected as invalid. The return value will be > 0 for all valid
- * dates, but there are some invalid dates that will return a positive
- * value. To verify that a date is valid, convert it to SDN and then back
- * and compare with the original.
- */
-long int JewishToSdn(
- int year,
- int month,
- int day)
-{
- long int sdn;
- int metonicCycle;
- int metonicYear;
- int tishri1;
- int tishri1After;
- long int moladDay;
- long int moladHalakim;
- int yearLength;
- int lengthOfAdarIAndII;
-
- if (year <= 0 || day <= 0 || day > 30) {
- return (0);
- }
- switch (month) {
- case 1:
- case 2:
- /* It is Tishri or Heshvan - don't need the year length. */
- FindStartOfYear(year, &metonicCycle, &metonicYear,
- &moladDay, &moladHalakim, &tishri1);
- if (month == 1) {
- sdn = tishri1 + day - 1;
- } else {
- sdn = tishri1 + day + 29;
- }
- break;
-
- case 3:
- /* It is Kislev - must find the year length. */
-
- /* Find the start of the year. */
- FindStartOfYear(year, &metonicCycle, &metonicYear,
- &moladDay, &moladHalakim, &tishri1);
-
- /* Find the end of the year. */
- moladHalakim += HALAKIM_PER_LUNAR_CYCLE * monthsPerYear[metonicYear];
- moladDay += moladHalakim / HALAKIM_PER_DAY;
- moladHalakim = moladHalakim % HALAKIM_PER_DAY;
- tishri1After = Tishri1((metonicYear + 1) % 19, moladDay, moladHalakim);
-
- yearLength = tishri1After - tishri1;
-
- if (yearLength == 355 || yearLength == 385) {
- sdn = tishri1 + day + 59;
- } else {
- sdn = tishri1 + day + 58;
- }
- break;
-
- case 4:
- case 5:
- case 6:
- /* It is Tevet, Shevat or Adar I - don't need the year length. */
-
- FindStartOfYear(year + 1, &metonicCycle, &metonicYear,
- &moladDay, &moladHalakim, &tishri1After);
-
- if (monthsPerYear[(year - 1) % 19] == 12) {
- lengthOfAdarIAndII = 29;
- } else {
- lengthOfAdarIAndII = 59;
- }
-
- if (month == 4) {
- sdn = tishri1After + day - lengthOfAdarIAndII - 237;
- } else if (month == 5) {
- sdn = tishri1After + day - lengthOfAdarIAndII - 208;
- } else {
- sdn = tishri1After + day - lengthOfAdarIAndII - 178;
- }
- break;
-
- default:
- /* It is Adar II or later - don't need the year length. */
- FindStartOfYear(year + 1, &metonicCycle, &metonicYear,
- &moladDay, &moladHalakim, &tishri1After);
-
- switch (month) {
- case 7:
- sdn = tishri1After + day - 207;
- break;
- case 8:
- sdn = tishri1After + day - 178;
- break;
- case 9:
- sdn = tishri1After + day - 148;
- break;
- case 10:
- sdn = tishri1After + day - 119;
- break;
- case 11:
- sdn = tishri1After + day - 89;
- break;
- case 12:
- sdn = tishri1After + day - 60;
- break;
- case 13:
- sdn = tishri1After + day - 30;
- break;
- default:
- return (0);
- }
- }
- return (sdn + JEWISH_SDN_OFFSET);
-}
-
-/*
- * 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/calendar/julian.c b/ext/calendar/julian.c
deleted file mode 100644
index 39bcbc7e65..0000000000
--- a/ext/calendar/julian.c
+++ /dev/null
@@ -1,249 +0,0 @@
-/* $selId: julian.c,v 2.0 1995/10/24 01:13:06 lees Exp $
- * Copyright 1993-1995, Scott E. Lee, all rights reserved.
- * Permission granted to use, copy, modify, distribute and sell so long as
- * the above copyright and this permission statement are retained in all
- * copies. THERE IS NO WARRANTY - USE AT YOUR OWN RISK.
- */
-
-/**************************************************************************
- *
- * These are the externally visible components of this file:
- *
- * void
- * SdnToJulian(
- * long int sdn,
- * int *pYear,
- * int *pMonth,
- * int *pDay);
- *
- * Convert a SDN to a Julian calendar date. If the input SDN is less than
- * 1, the three output values will all be set to zero, otherwise *pYear
- * will be >= -4713 and != 0; *pMonth will be in the range 1 to 12
- * inclusive; *pDay will be in the range 1 to 31 inclusive.
- *
- * long int
- * JulianToSdn(
- * int inputYear,
- * int inputMonth,
- * int inputDay);
- *
- * Convert a Julian calendar date to a SDN. Zero is returned when the
- * input date is detected as invalid or out of the supported range. The
- * return value will be > 0 for all valid, supported dates, but there are
- * some invalid dates that will return a positive value. To verify that a
- * date is valid, convert it to SDN and then back and compare with the
- * original.
- *
- * VALID RANGE
- *
- * 4713 B.C. to at least 10000 A.D.
- *
- * Although this software can handle dates all the way back to 4713
- * B.C., such use may not be meaningful. The calendar was created in
- * 46 B.C., but the details did not stabilize until at least 8 A.D.,
- * and perhaps as late at the 4th century. Also, the beginning of a
- * year varied from one culture to another - not all accepted January
- * as the first month.
- *
- * CALENDAR OVERVIEW
- *
- * Julias Ceasar created the calendar in 46 B.C. as a modified form of
- * the old Roman republican calendar which was based on lunar cycles.
- * The new Julian calendar set fixed lengths for the months, abandoning
- * the lunar cycle. It also specified that there would be exactly 12
- * months per year and 365.25 days per year with every 4th year being a
- * leap year.
- *
- * Note that the current accepted value for the tropical year is
- * 365.242199 days, not 365.25. This lead to an 11 day shift in the
- * calendar with respect to the seasons by the 16th century when the
- * Gregorian calendar was created to replace the Julian calendar.
- *
- * The difference between the Julian and today's Gregorian calendar is
- * that the Gregorian does not make centennial years leap years unless
- * they are a multiple of 400, which leads to a year of 365.2425 days.
- * In other words, in the Gregorian calendar, 1700, 1800 and 1900 are
- * not leap years, but 2000 is. All centennial years are leap years in
- * the Julian calendar.
- *
- * The details are unknown, but the lengths of the months were adjusted
- * until they finally stablized in 8 A.D. with their current lengths:
- *
- * January 31
- * February 28/29
- * March 31
- * April 30
- * May 31
- * June 30
- * Quintilis/July 31
- * Sextilis/August 31
- * September 30
- * October 31
- * November 30
- * December 31
- *
- * In the early days of the calendar, the days of the month were not
- * numbered as we do today. The numbers ran backwards (decreasing) and
- * were counted from the Ides (15th of the month - which in the old
- * Roman republican lunar calendar would have been the full moon) or
- * from the Nonae (9th day before the Ides) or from the beginning of
- * the next month.
- *
- * In the early years, the beginning of the year varied, sometimes
- * based on the ascension of rulers. It was not always the first of
- * January.
- *
- * Also, today's epoch, 1 A.D. or the birth of Jesus Christ, did not
- * come into use until several centuries later when Christianity became
- * a dominant religion.
- *
- * ALGORITHMS
- *
- * The calculations are based on two different cycles: a 4 year cycle
- * of leap years and a 5 month cycle of month lengths.
- *
- * The 5 month cycle is used to account for the varying lengths of
- * months. You will notice that the lengths alternate between 30 and
- * 31 days, except for three anomalies: both July and August have 31
- * days, both December and January have 31, and February is less than
- * 30. Starting with March, the lengths are in a cycle of 5 months
- * (31, 30, 31, 30, 31):
- *
- * Mar 31 days \
- * Apr 30 days |
- * May 31 days > First cycle
- * Jun 30 days |
- * Jul 31 days /
- *
- * Aug 31 days \
- * Sep 30 days |
- * Oct 31 days > Second cycle
- * Nov 30 days |
- * Dec 31 days /
- *
- * Jan 31 days \
- * Feb 28/9 days |
- * > Third cycle (incomplete)
- *
- * For this reason the calculations (internally) assume that the year
- * starts with March 1.
- *
- * TESTING
- *
- * This algorithm has been tested from the year 4713 B.C. to 10000 A.D.
- * The source code of the verification program is included in this
- * package.
- *
- * REFERENCES
- *
- * Conversions Between Calendar Date and Julian Day Number by Robert J.
- * Tantzen, Communications of the Association for Computing Machinery
- * August 1963. (Also published in Collected Algorithms from CACM,
- * algorithm number 199). [Note: the published algorithm is for the
- * Gregorian calendar, but was adjusted to use the Julian calendar's
- * simpler leap year rule.]
- *
- **************************************************************************/
-
-#include "sdncal.h"
-
-#define JULIAN_SDN_OFFSET 32083
-#define DAYS_PER_5_MONTHS 153
-#define DAYS_PER_4_YEARS 1461
-
-void SdnToJulian(
- long int sdn,
- int *pYear,
- int *pMonth,
- int *pDay)
-{
- int year;
- int month;
- int day;
- long int temp;
- int dayOfYear;
-
- if (sdn <= 0) {
- *pYear = 0;
- *pMonth = 0;
- *pDay = 0;
- return;
- }
- temp = (sdn + JULIAN_SDN_OFFSET) * 4 - 1;
-
- /* Calculate the year and day of year (1 <= dayOfYear <= 366). */
- year = temp / DAYS_PER_4_YEARS;
- dayOfYear = (temp % DAYS_PER_4_YEARS) / 4 + 1;
-
- /* Calculate the month and day of month. */
- temp = dayOfYear * 5 - 3;
- month = temp / DAYS_PER_5_MONTHS;
- day = (temp % DAYS_PER_5_MONTHS) / 5 + 1;
-
- /* Convert to the normal beginning of the year. */
- if (month < 10) {
- month += 3;
- } else {
- year += 1;
- month -= 9;
- }
-
- /* Adjust to the B.C./A.D. type numbering. */
- year -= 4800;
- if (year <= 0)
- year--;
-
- *pYear = year;
- *pMonth = month;
- *pDay = day;
-}
-
-long int JulianToSdn(
- int inputYear,
- int inputMonth,
- int inputDay)
-{
- int year;
- int month;
-
- /* check for invalid dates */
- if (inputYear == 0 || inputYear < -4713 ||
- inputMonth <= 0 || inputMonth > 12 ||
- inputDay <= 0 || inputDay > 31) {
- return (0);
- }
- /* check for dates before SDN 1 (Jan 2, 4713 B.C.) */
- if (inputYear == -4713) {
- if (inputMonth == 1 && inputDay == 1) {
- return (0);
- }
- }
- /* Make year always a positive number. */
- if (inputYear < 0) {
- year = inputYear + 4801;
- } else {
- year = inputYear + 4800;
- }
-
- /* Adjust the start of the year. */
- if (inputMonth > 2) {
- month = inputMonth - 3;
- } else {
- month = inputMonth + 9;
- year--;
- }
-
- return ((year * DAYS_PER_4_YEARS) / 4
- + (month * DAYS_PER_5_MONTHS + 2) / 5
- + inputDay
- - JULIAN_SDN_OFFSET);
-}
-
-/*
- * 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/calendar/package.xml b/ext/calendar/package.xml
deleted file mode 100644
index 877b745123..0000000000
--- a/ext/calendar/package.xml
+++ /dev/null
@@ -1,73 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1" ?>
-<!DOCTYPE package SYSTEM "../pear/package.dtd">
-<package>
- <name>calendar</name>
- <summary>Date conversion between different calendar formats</summary>
- <maintainers>
- <maintainer>
- <user>hholzgra</user>
- <name>Hartmut Holzgraefe</name>
- <email>hartmut@php.net</email>
- <role>lead</role>
- </maintainer>
- <maintainer>
- <user>shane</user>
- <name>Shane Caraveo</name>
- <role>developer</role>
- <email>shane@caraveo.com</email>
- </maintainer>
- <maintainer>
- <user>colin</user>
- <name>Colin Viebrock</name>
- <role>developer</role>
- <email>colin@easydns.com</email>
- </maintainer>
- <maintainer>
- <user>wez</user>
- <name>Wez Furlong</name>
- <role>developer</role>
- <email>wez@php.net</email>
- </maintainer>
- </maintainers>
- <description>
-The calendar extension presents a series of functions to simplify
-converting between different calendar formats. The intermediary or
-standard it is based on is the Julian Day Count. The Julian Day Count
-is a count of days starting from January 1st, 4713 B.C. To convert
-between calendar systems, you must first convert to Julian Day Count,
-then to the calendar system of your choice. Julian Day Count is very
-different from the Julian Calendar!
- </description>
- <license>PHP</license>
- <release>
- <state>beta</state>
- <version>5.0.0rc1</version>
- <date>2004-03-19</date>
- <notes>
-package.xml added to support intallation using pear installer
- </notes>
- <filelist>
- <file role="doc" name="CREDITS"/>
- <file role="src" name="config.m4"/>
- <file role="src" name="config.w32"/>
- <file role="src" name="cal_unix.c"/>
- <file role="src" name="calendar.c"/>
- <file role="src" name="dow.c"/>
- <file role="src" name="easter.c"/>
- <file role="src" name="french.c"/>
- <file role="src" name="gregor.c"/>
- <file role="src" name="jewish.c"/>
- <file role="src" name="julian.c"/>
- <file role="src" name="package.xml"/>
- <file role="src" name="php_calendar.h"/>
- <file role="src" name="sdncal.h"/>
- <file role="test" name="tests/jdtojewish.phpt"/>
- </filelist>
- <deps>
- <dep type="php" rel="ge" version="5" />
- </deps>
- </release>
-</package>
-<!--
-vim:et:ts=1:sw=1
--->
diff --git a/ext/calendar/php_calendar.h b/ext/calendar/php_calendar.h
deleted file mode 100644
index 79c9edf73c..0000000000
--- a/ext/calendar/php_calendar.h
+++ /dev/null
@@ -1,50 +0,0 @@
-#ifndef PHP_CALENDAR_H
-#define PHP_CALENDAR_H
-
-extern zend_module_entry calendar_module_entry;
-#define calendar_module_ptr &calendar_module_entry
-
-/* Functions */
-
-PHP_MINIT_FUNCTION(calendar);
-PHP_RINIT_FUNCTION(calendar);
-PHP_RSHUTDOWN_FUNCTION(calendar);
-PHP_MINFO_FUNCTION(calendar);
-
-PHP_FUNCTION(jdtogregorian);
-PHP_FUNCTION(gregoriantojd);
-PHP_FUNCTION(jdtojulian);
-PHP_FUNCTION(juliantojd);
-PHP_FUNCTION(jdtojewish);
-PHP_FUNCTION(jewishtojd);
-PHP_FUNCTION(jdtofrench);
-PHP_FUNCTION(frenchtojd);
-PHP_FUNCTION(jddayofweek);
-PHP_FUNCTION(jdmonthname);
-PHP_FUNCTION(easter_days);
-PHP_FUNCTION(easter_date);
-PHP_FUNCTION(unixtojd);
-PHP_FUNCTION(jdtounix);
-PHP_FUNCTION(cal_from_jd);
-PHP_FUNCTION(cal_to_jd);
-PHP_FUNCTION(cal_days_in_month);
-PHP_FUNCTION(cal_info);
-
-#define phpext_calendar_ptr calendar_module_ptr
-
-/*
- * Specifying the easter calculation method
- *
- * DEFAULT is Anglican, ie. use Julian calendar before 1753
- * and Gregorian after that. With ROMAN, the cutoff year is 1582.
- * ALWAYS_GREGORIAN and ALWAYS_JULIAN force the calendar
- * regardless of date.
- *
- */
-
-#define CAL_EASTER_DEFAULT 0
-#define CAL_EASTER_ROMAN 1
-#define CAL_EASTER_ALWAYS_GREGORIAN 2
-#define CAL_EASTER_ALWAYS_JULIAN 3
-
-#endif
diff --git a/ext/calendar/sdncal.h b/ext/calendar/sdncal.h
deleted file mode 100644
index 81328d1369..0000000000
--- a/ext/calendar/sdncal.h
+++ /dev/null
@@ -1,97 +0,0 @@
-#ifndef SDNCAL_H
-#define SDNCAL_H
-/*
- * This code has been modified for use with PHP
- * by Shane Caraveo shane@caraveo.com
- * see below for more details
- *
- */
-
-/* $selId: sdncal.h,v 2.0 1995/10/24 01:13:06 lees Exp $
- * Copyright 1993-1995, Scott E. Lee, all rights reserved.
- * Permission granted to use, copy, modify, distribute and sell so long as
- * the above copyright and this permission statement are retained in all
- * copies. THERE IS NO WARRANTY - USE AT YOUR OWN RISK.
- */
-
-/**************************************************************************
- *
- * This package defines a set of routines that convert calendar dates to
- * and from a serial day number (SDN). The SDN is a serial numbering of
- * days where SDN 1 is November 25, 4714 BC in the Gregorian calendar and
- * SDN 2447893 is January 1, 1990. This system of day numbering is
- * sometimes referred to as Julian days, but to avoid confusion with the
- * Julian calendar, it is referred to as serial day numbers here. The term
- * Julian days is also used to mean the number of days since the beginning
- * of the current year.
- *
- * The SDN can be used as an intermediate step in converting from one
- * calendar system to another (such as Gregorian to Jewish). It can also
- * be used for date computations such as easily comparing two dates,
- * determining the day of the week, finding the date of yesterday or
- * calculating the number of days between two dates.
- *
- * When using this software on 16 bit systems, be careful to store SDNs in
- * a long int, because it will not fit in the 16 bits that some systems
- * allocate to an int.
- *
- * For each calendar, there are two routines provided. One converts dates
- * in that calendar to SDN and the other converts SDN to calendar dates.
- * The routines are named SdnTo<CALENDAR>() and <CALENDAR>ToSdn(), where
- * <CALENDAR> is the name of the calendar system.
- *
- * SDN values less than one are not supported. If a conversion routine
- * returns an SDN of zero, this means that the date given is either invalid
- * or is outside the supported range for that calendar.
- *
- * At least some validity checks are performed on input dates. For
- * example, a negative month number will result in the return of zero for
- * the SDN. A returned SDN greater than one does not necessarily mean that
- * the input date was valid. To determine if the date is valid, convert it
- * to SDN, and if the SDN is greater than zero, convert it back to a date
- * and compare to the original. For example:
- *
- * int y1, m1, d1;
- * int y2, m2, d2;
- * long int sdn;
- * ...
- * sdn = GregorianToSdn(y1, m1, d1);
- * if (sdn > 0) {
- * SdnToGregorian(sdn, &y2, &m2, &d2);
- * if (y1 == y2 && m1 == m2 && d1 == d2) {
- * ... date is valid ...
- * }
- * }
- *
- **************************************************************************/
-
-/* Gregorian calendar conversions. */
-void SdnToGregorian(long int sdn, int *pYear, int *pMonth, int *pDay);
-long int GregorianToSdn(int year, int month, int day);
-extern char *MonthNameShort[13];
-extern char *MonthNameLong[13];
-
-/* Julian calendar conversions. */
-void SdnToJulian(long int sdn, int *pYear, int *pMonth, int *pDay);
-long int JulianToSdn(int year, int month, int day);
-
-/* Jewish calendar conversions. */
-void SdnToJewish(long int sdn, int *pYear, int *pMonth, int *pDay);
-long int JewishToSdn(int year, int month, int day);
-extern char *JewishMonthName[14];
-extern char *JewishMonthHebName[14];
-
-/* French republic calendar conversions. */
-void SdnToFrench(long int sdn, int *pYear, int *pMonth, int *pDay);
-long int FrenchToSdn(int inputYear, int inputMonth, int inputDay);
-extern char *FrenchMonthName[14];
-
-/* Islamic calendar conversions. */
-/* Not implemented yet. */
-
-/* Day of week conversion. 0=Sunday, 6=Saturday */
-int DayOfWeek(long int sdn);
-extern char *DayNameShort[7];
-extern char *DayNameLong[7];
-
-#endif /* SDNCAL_H */
diff --git a/ext/calendar/tests/jdtojewish.phpt b/ext/calendar/tests/jdtojewish.phpt
deleted file mode 100644
index c6dc1fd594..0000000000
--- a/ext/calendar/tests/jdtojewish.phpt
+++ /dev/null
@@ -1,28 +0,0 @@
---TEST--
-jdtojewish() function
---FILE--
-<?php
-
-var_dump(jdtojewish(gregoriantojd(10,28,2002))."\r\n".
- jdtojewish(gregoriantojd(10,28,2002),true)."\r\n".
- jdtojewish(gregoriantojd(10,28,2002),true, CAL_JEWISH_ADD_ALAFIM_GERESH)."\r\n".
- jdtojewish(gregoriantojd(10,28,2002),true, CAL_JEWISH_ADD_ALAFIM)."\r\n".
- jdtojewish(gregoriantojd(10,28,2002),true, CAL_JEWISH_ADD_ALAFIM_GERESH+CAL_JEWISH_ADD_ALAFIM)."\r\n".
- jdtojewish(gregoriantojd(10,28,2002),true, CAL_JEWISH_ADD_GERESHAYIM)."\r\n".
- jdtojewish(gregoriantojd(10,8,2002),true, CAL_JEWISH_ADD_GERESHAYIM)."\r\n".
- jdtojewish(gregoriantojd(10,8,2002),true, CAL_JEWISH_ADD_GERESHAYIM+CAL_JEWISH_ADD_ALAFIM_GERESH)."\r\n".
- jdtojewish(gregoriantojd(10,8,2002),true, CAL_JEWISH_ADD_GERESHAYIM+CAL_JEWISH_ADD_ALAFIM)."\r\n".
- jdtojewish(gregoriantojd(10,8,2002),true, CAL_JEWISH_ADD_GERESHAYIM+CAL_JEWISH_ADD_ALAFIM+CAL_JEWISH_ADD_ALAFIM_GERESH)."\r\n");
-?>
---EXPECT--
-string(184) "2/22/5763
-ëá çùåï äúùñâ
-ëá çùåï ä'úùñâ
-ëá çùåï ä àìôéí úùñâ
-ëá çùåï ä' àìôéí úùñâ
-ë"á çùåï äúùñ"â
-á' çùåï äúùñ"â
-á' çùåï ä'úùñ"â
-á' çùåï ä àìôéí úùñ"â
-á' çùåï ä' àìôéí úùñ"â
-"
diff --git a/ext/com_dotnet/CREDITS b/ext/com_dotnet/CREDITS
deleted file mode 100644
index 8dd06fa662..0000000000
--- a/ext/com_dotnet/CREDITS
+++ /dev/null
@@ -1,2 +0,0 @@
-COM and .Net
-Wez Furlong
diff --git a/ext/com_dotnet/README b/ext/com_dotnet/README
deleted file mode 100644
index 0d9db40d98..0000000000
--- a/ext/com_dotnet/README
+++ /dev/null
@@ -1,71 +0,0 @@
-This is the new php5 COM module.
-
-It is not 100% backwards compatible with PHP 4 ext/com, but you should not miss
-the "features" that have not been retained.
-
-This module exposes 3 classes: variant, com and dotnet(*).
-com and dotnet classes are descendants of the variant class; the only
-difference between the three are their constructors. Once instantiated, the
-module doesn't make a distinction between them.
-
-COM errrors are mapped to exceptions; you should protect your COM code using
-the try..catch construct if you want to be able to handle error conditions.
-
-Be warned that due to the way the ZE2 currently works, exceptions are only
-"armed" at the time they are detected, but do not "detonate" until the end of
-the statement. So, code like this:
-
- $obj->foo[43]->bar();
-
-Where the foo[43] access triggers an exception will continue to call the bar()
-method on a null object and cause a fatal php error.
-
-Default properties and array access:
-
-$obj = new COM("...");
-$obj[1]->foo();
-
-The code above will use the type information for the object to determine its
-default property and then access it. In PHP 4, it was hard-coded to use the
-"Items" member, which was wrong.
-
-The default property will also be used by the casting support to determine the
-value for the object.
-
-Variants:
-
-This implementation of COM takes a simpler approach than the PHP 4 version;
-we only map a few native types to COM and vice-versa, leaving the more complex
-things as variants. This allows greater consistency of data when passing
-parameters to and from COM objects (no data will be lost). In addition, a
-large number of the variant API has been mapped to PHP space so that you can
-use it for working with the special variant decimal, currency and date time
-types. This could be used as a replacement for the bcmath extension, for
-example.
-
-You can use the new object casting hook to for a php-native representation of
-a variant object:
-
-$a = new variant(4);
-$b = new variant(6);
-$c = variant_add($a, $b);
-echo $c; // outputs 10 as a string, instead of Object
-
-Sample Script:
-
-<?php
-$word = new COM("word.application");
-print "Loaded Word, version {$word->Version}\n";
-$word->Visible = 1;
-$word->Documents->Add();
-$word->Selection->TypeText("This is a test...");
-$word->Documents[1]->SaveAs("Useless test.doc");
-$word->Quit();
-?>
-
-TODO:
-
-- documentation
-
-* dotnet support requires that you have the mscoree.h header from the .net sdk
- when you build the module.
diff --git a/ext/com_dotnet/com_com.c b/ext/com_dotnet/com_com.c
deleted file mode 100644
index 39c90eae1f..0000000000
--- a/ext/com_dotnet/com_com.c
+++ /dev/null
@@ -1,837 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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@thebrainroom.com> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "php.h"
-#include "php_ini.h"
-#include "ext/standard/info.h"
-#include "php_com_dotnet.h"
-#include "php_com_dotnet_internal.h"
-#include "Zend/zend_exceptions.h"
-
-/* {{{ com_create_instance - ctor for COM class */
-PHP_FUNCTION(com_create_instance)
-{
- zval *object = getThis();
- zval *server_params = NULL;
- php_com_dotnet_object *obj;
- char *module_name, *typelib_name = NULL, *server_name = NULL;
- char *user_name = NULL, *domain_name = NULL, *password = NULL;
- int module_name_len, typelib_name_len, server_name_len,
- user_name_len, domain_name_len, password_len;
- OLECHAR *moniker;
- CLSID clsid;
- CLSCTX ctx = CLSCTX_SERVER;
- HRESULT res = E_FAIL;
- int mode = COMG(autoreg_case_sensitive) ? CONST_CS : 0;
- ITypeLib *TL = NULL;
- COSERVERINFO info;
- COAUTHIDENTITY authid = {0};
- COAUTHINFO authinfo = {
- RPC_C_AUTHN_WINNT, RPC_C_AUTHZ_NONE, NULL,
- RPC_C_AUTHN_LEVEL_DEFAULT, RPC_C_IMP_LEVEL_IMPERSONATE,
- &authid, EOAC_NONE
- };
-
- obj = CDNO_FETCH(object);
-
- if (FAILURE == zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET,
- ZEND_NUM_ARGS() TSRMLS_CC, "s|s!ls",
- &module_name, &module_name_len, &server_name, &server_name_len,
- &obj->code_page, &typelib_name, &typelib_name_len) &&
- FAILURE == zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET,
- ZEND_NUM_ARGS() TSRMLS_CC, "sa|ls",
- &module_name, &module_name_len, &server_params, &obj->code_page,
- &typelib_name, &typelib_name_len)) {
-
- php_com_throw_exception(E_INVALIDARG, "Could not create COM object - invalid arguments!" TSRMLS_CC);
- ZVAL_NULL(object);
- return;
- }
-
- if (server_name) {
- ctx = CLSCTX_REMOTE_SERVER;
- } else if (server_params) {
- zval **tmp;
-
- /* decode the data from the array */
-
- if (SUCCESS == zend_hash_find(HASH_OF(server_params),
- "Server", sizeof("Server"), (void**)&tmp)) {
- convert_to_string_ex(tmp);
- server_name = Z_STRVAL_PP(tmp);
- server_name_len = Z_STRLEN_PP(tmp);
- ctx = CLSCTX_REMOTE_SERVER;
- }
-
- if (SUCCESS == zend_hash_find(HASH_OF(server_params),
- "Username", sizeof("Username"), (void**)&tmp)) {
- convert_to_string_ex(tmp);
- user_name = Z_STRVAL_PP(tmp);
- user_name_len = Z_STRLEN_PP(tmp);
- }
-
- if (SUCCESS == zend_hash_find(HASH_OF(server_params),
- "Password", sizeof("Password"), (void**)&tmp)) {
- convert_to_string_ex(tmp);
- password = Z_STRVAL_PP(tmp);
- password_len = Z_STRLEN_PP(tmp);
- }
-
- if (SUCCESS == zend_hash_find(HASH_OF(server_params),
- "Domain", sizeof("Domain"), (void**)&tmp)) {
- convert_to_string_ex(tmp);
- domain_name = Z_STRVAL_PP(tmp);
- domain_name_len = Z_STRLEN_PP(tmp);
- }
-
- if (SUCCESS == zend_hash_find(HASH_OF(server_params),
- "Flags", sizeof("Flags"), (void**)&tmp)) {
- convert_to_long_ex(tmp);
- ctx = (CLSCTX)Z_LVAL_PP(tmp);
- }
- }
-
- if (server_name && !COMG(allow_dcom)) {
- php_com_throw_exception(E_ERROR, "DCOM has been disabled by your administrator [com.allow_dcom=0]" TSRMLS_CC);
- return;
- }
-
- moniker = php_com_string_to_olestring(module_name, module_name_len, obj->code_page TSRMLS_CC);
-
- /* if instantiating a remote object, either directly, or via
- * a moniker, fill in the relevant info */
- if (server_name) {
- info.dwReserved1 = 0;
- info.dwReserved2 = 0;
- info.pwszName = php_com_string_to_olestring(server_name, server_name_len, obj->code_page TSRMLS_CC);
-
- if (user_name) {
- authid.User = php_com_string_to_olestring(user_name, -1, obj->code_page TSRMLS_CC);
- authid.UserLength = user_name_len;
-
- if (password) {
- authid.Password = (OLECHAR*)password;
- authid.PasswordLength = password_len;
- } else {
- authid.Password = (OLECHAR*)"";
- authid.PasswordLength = 0;
- }
-
- if (domain_name) {
- authid.Domain = (OLECHAR*)domain_name;
- authid.DomainLength = domain_name_len;
- } else {
- authid.Domain = (OLECHAR*)"";
- authid.DomainLength = 0;
- }
- authid.Flags = SEC_WINNT_AUTH_IDENTITY_ANSI;
- info.pAuthInfo = &authinfo;
- } else {
- info.pAuthInfo = NULL;
- }
- }
-
- if (FAILED(CLSIDFromString(moniker, &clsid))) {
- /* try to use it as a moniker */
- IBindCtx *pBindCtx = NULL;
- IMoniker *pMoniker = NULL;
- ULONG ulEaten;
- BIND_OPTS2 bopt = {0};
-
- if (SUCCEEDED(res = CreateBindCtx(0, &pBindCtx))) {
- if (server_name) {
- /* fill in the remote server info.
- * MSDN docs indicate that this might be ignored in
- * current win32 implementations, but at least we are
- * doing the right thing in readiness for the day that
- * it does work */
- bopt.cbStruct = sizeof(bopt);
- IBindCtx_GetBindOptions(pBindCtx, (BIND_OPTS*)&bopt);
- bopt.pServerInfo = &info;
- /* apparently, GetBindOptions will only ever return
- * a regular BIND_OPTS structure. My gut feeling is
- * that it will modify the size field to reflect that
- * so lets be safe and set it to the BIND_OPTS2 size
- * again */
- bopt.cbStruct = sizeof(bopt);
- IBindCtx_SetBindOptions(pBindCtx, (BIND_OPTS*)&bopt);
- }
-
- if (SUCCEEDED(res = MkParseDisplayName(pBindCtx, moniker, &ulEaten, &pMoniker))) {
- res = IMoniker_BindToObject(pMoniker, pBindCtx,
- NULL, &IID_IDispatch, (LPVOID*)&V_DISPATCH(&obj->v));
-
- if (SUCCEEDED(res)) {
- V_VT(&obj->v) = VT_DISPATCH;
- }
-
- IMoniker_Release(pMoniker);
- }
- }
- if (pBindCtx) {
- IBindCtx_Release(pBindCtx);
- }
- } else if (server_name) {
- MULTI_QI qi;
-
- qi.pIID = &IID_IDispatch;
- qi.pItf = NULL;
- qi.hr = S_OK;
-
- res = CoCreateInstanceEx(&clsid, NULL, ctx, &info, 1, &qi);
-
- if (SUCCEEDED(res)) {
- res = qi.hr;
- V_DISPATCH(&obj->v) = (IDispatch*)qi.pItf;
- V_VT(&obj->v) = VT_DISPATCH;
- }
- } else {
- res = CoCreateInstance(&clsid, NULL, CLSCTX_SERVER, &IID_IDispatch, (LPVOID*)&V_DISPATCH(&obj->v));
- if (SUCCEEDED(res)) {
- V_VT(&obj->v) = VT_DISPATCH;
- }
- }
-
- if (server_name) {
- STR_FREE((char*)info.pwszName);
- STR_FREE((char*)authid.User);
- }
-
- efree(moniker);
-
- if (FAILED(res)) {
- char *werr, *msg;
-
- werr = php_win_err(res);
- spprintf(&msg, 0, "Failed to create COM object `%s': %s", module_name, werr);
- LocalFree(werr);
-
- php_com_throw_exception(res, msg TSRMLS_CC);
- efree(msg);
- ZVAL_NULL(object);
- return;
- }
-
- /* we got the object and it lives ! */
-
- /* see if it has TypeInfo available */
- if (FAILED(IDispatch_GetTypeInfo(V_DISPATCH(&obj->v), 0, LANG_NEUTRAL, &obj->typeinfo)) && typelib_name) {
- /* load up the library from the named file */
- int cached;
-
- TL = php_com_load_typelib_via_cache(typelib_name, obj->code_page, &cached TSRMLS_CC);
-
- if (TL) {
- if (COMG(autoreg_on) && !cached) {
- php_com_import_typelib(TL, mode, obj->code_page TSRMLS_CC);
- }
-
- /* cross your fingers... there is no guarantee that this ITypeInfo
- * instance has any relation to this IDispatch instance... */
- ITypeLib_GetTypeInfo(TL, 0, &obj->typeinfo);
- ITypeLib_Release(TL);
- }
- } else if (obj->typeinfo && COMG(autoreg_on)) {
- int idx;
-
- if (SUCCEEDED(ITypeInfo_GetContainingTypeLib(obj->typeinfo, &TL, &idx))) {
- /* check if the library is already in the cache by getting its name */
- BSTR name;
-
- if (SUCCEEDED(ITypeLib_GetDocumentation(TL, -1, &name, NULL, NULL, NULL))) {
- typelib_name = php_com_olestring_to_string(name, &typelib_name_len, obj->code_page TSRMLS_CC);
-
- if (SUCCESS == zend_ts_hash_add(&php_com_typelibraries, typelib_name, typelib_name_len+1, (void*)&TL, sizeof(ITypeLib*), NULL)) {
- php_com_import_typelib(TL, mode, obj->code_page TSRMLS_CC);
-
- /* add a reference for the hash */
- ITypeLib_AddRef(TL);
- }
-
- } else {
- /* try it anyway */
- php_com_import_typelib(TL, mode, obj->code_page TSRMLS_CC);
- }
-
- ITypeLib_Release(TL);
- }
- }
-
-}
-/* }}} */
-
-/* {{{ proto object com_get_active_object(string progid [, int code_page ])
- Returns a handle to an already running instance of a COM object */
-PHP_FUNCTION(com_get_active_object)
-{
- CLSID clsid;
- char *module_name;
- int module_name_len;
- long code_page = COMG(code_page);
- IUnknown *unk = NULL;
- IDispatch *obj = NULL;
- HRESULT res;
- OLECHAR *module = NULL;
-
- if (FAILURE == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|l",
- &module_name, &module_name_len, &code_page)) {
- php_com_throw_exception(E_INVALIDARG, "Invalid arguments!" TSRMLS_CC);
- return;
- }
-
- module = php_com_string_to_olestring(module_name, module_name_len, code_page TSRMLS_CC);
-
- res = CLSIDFromString(module, &clsid);
-
- if (FAILED(res)) {
- php_com_throw_exception(res, NULL TSRMLS_CC);
- } else {
- res = GetActiveObject(&clsid, NULL, &unk);
-
- if (FAILED(res)) {
- php_com_throw_exception(res, NULL TSRMLS_CC);
- } else {
- res = IUnknown_QueryInterface(unk, &IID_IDispatch, &obj);
-
- if (FAILED(res)) {
- php_com_throw_exception(res, NULL TSRMLS_CC);
- } else if (obj) {
- /* we got our dispatchable object */
- php_com_wrap_dispatch(return_value, obj, code_page TSRMLS_CC);
- }
- }
- }
-
- if (obj) {
- IDispatch_Release(obj);
- }
- if (unk) {
- IUnknown_Release(obj);
- }
- efree(module);
-}
-/* }}} */
-
-/* Performs an Invoke on the given com object.
- * returns a failure code and creates an exception if there was an error */
-HRESULT php_com_invoke_helper(php_com_dotnet_object *obj, DISPID id_member,
- WORD flags, DISPPARAMS *disp_params, VARIANT *v TSRMLS_DC)
-{
- HRESULT hr;
- unsigned int arg_err;
- EXCEPINFO e;
-
- hr = IDispatch_Invoke(V_DISPATCH(&obj->v), id_member,
- &IID_NULL, LOCALE_SYSTEM_DEFAULT, flags, disp_params, v, &e, &arg_err);
-
- if (FAILED(hr)) {
- char *source = NULL, *desc = NULL, *msg = NULL;
- int source_len, desc_len;
-
- switch (hr) {
- case DISP_E_EXCEPTION:
- if (e.bstrSource) {
- source = php_com_olestring_to_string(e.bstrSource, &source_len, obj->code_page TSRMLS_CC);
- SysFreeString(e.bstrSource);
- }
- if (e.bstrDescription) {
- desc = php_com_olestring_to_string(e.bstrDescription, &desc_len, obj->code_page TSRMLS_CC);
- SysFreeString(e.bstrDescription);
- }
- if (PG(html_errors)) {
- spprintf(&msg, 0, "<b>Source:</b> %s<br/><b>Description:</b> %s",
- source ? source : "Unknown",
- desc ? desc : "Unknown");
- } else {
- spprintf(&msg, 0, "Source: %s\nDescription: %s",
- source ? source : "Unknown",
- desc ? desc : "Unknown");
- }
- if (desc) {
- efree(desc);
- }
- if (source) {
- efree(source);
- }
- if (e.bstrHelpFile) {
- SysFreeString(e.bstrHelpFile);
- }
- break;
-
- case DISP_E_PARAMNOTFOUND:
- case DISP_E_TYPEMISMATCH:
- desc = php_win_err(hr);
- spprintf(&msg, 0, "Parameter %d: %s", arg_err, desc);
- LocalFree(desc);
- break;
-
- case DISP_E_BADPARAMCOUNT:
- if ((disp_params->cArgs + disp_params->cNamedArgs == 0) && (flags == DISPATCH_PROPERTYGET)) {
- /* if getting a property and they are missing all parameters,
- * we want to create a proxy object for them; so lets not create an
- * exception here */
- msg = NULL;
- break;
- }
- /* else fall through */
-
- default:
- desc = php_win_err(hr);
- spprintf(&msg, 0, "Error %s", desc);
- LocalFree(desc);
- break;
- }
-
- if (msg) {
- php_com_throw_exception(hr, msg TSRMLS_CC);
- efree(msg);
- }
- }
-
- return hr;
-}
-
-/* map an ID to a name */
-HRESULT php_com_get_id_of_name(php_com_dotnet_object *obj, char *name,
- int namelen, DISPID *dispid TSRMLS_DC)
-{
- OLECHAR *olename;
- HRESULT hr;
- DISPID *dispid_ptr;
-
- if (namelen == -1) {
- namelen = strlen(name);
- }
-
- if (obj->id_of_name_cache && SUCCESS == zend_hash_find(obj->id_of_name_cache, name, namelen, (void**)&dispid_ptr)) {
- *dispid = *dispid_ptr;
- return S_OK;
- }
-
- olename = php_com_string_to_olestring(name, namelen, obj->code_page TSRMLS_CC);
-
- if (obj->typeinfo) {
- hr = ITypeInfo_GetIDsOfNames(obj->typeinfo, &olename, 1, dispid);
- if (FAILED(hr)) {
- hr = IDispatch_GetIDsOfNames(V_DISPATCH(&obj->v), &IID_NULL, &olename, 1, LOCALE_SYSTEM_DEFAULT, dispid);
- if (SUCCEEDED(hr)) {
- /* fall back on IDispatch direct */
- ITypeInfo_Release(obj->typeinfo);
- obj->typeinfo = NULL;
- }
- }
- } else {
- hr = IDispatch_GetIDsOfNames(V_DISPATCH(&obj->v), &IID_NULL, &olename, 1, LOCALE_SYSTEM_DEFAULT, dispid);
- }
- efree(olename);
-
- if (SUCCEEDED(hr)) {
- /* cache the mapping */
- if (!obj->id_of_name_cache) {
- ALLOC_HASHTABLE(obj->id_of_name_cache);
- zend_hash_init(obj->id_of_name_cache, 2, NULL, NULL, 0);
- }
- zend_hash_update(obj->id_of_name_cache, name, namelen, dispid, sizeof(*dispid), NULL);
- }
-
- return hr;
-}
-
-/* the core of COM */
-int php_com_do_invoke_byref(php_com_dotnet_object *obj, char *name, int namelen,
- WORD flags, VARIANT *v, int nargs, zval ***args TSRMLS_DC)
-{
- DISPID dispid, altdispid;
- DISPPARAMS disp_params;
- HRESULT hr;
- VARIANT *vargs = NULL, *byref_vals = NULL;
- int i, byref_count = 0, j;
- zend_internal_function *f = (zend_internal_function*)EG(function_state_ptr)->function;
-
- /* assumption: that the active function (f) is the function we generated for the engine */
- if (!f || f->arg_info == NULL) {
- f = NULL;
- }
-
- hr = php_com_get_id_of_name(obj, name, namelen, &dispid TSRMLS_CC);
-
- if (FAILED(hr)) {
- char *winerr = NULL;
- char *msg = NULL;
- winerr = php_win_err(hr);
- spprintf(&msg, 0, "Unable to lookup `%s': %s", name, winerr);
- LocalFree(winerr);
- php_com_throw_exception(hr, msg TSRMLS_CC);
- efree(msg);
- return FAILURE;
- }
-
-
- if (nargs) {
- vargs = (VARIANT*)safe_emalloc(sizeof(VARIANT), nargs, 0);
- }
-
- if (f) {
- for (i = 0; i < nargs; i++) {
- if (f->arg_info[nargs - i - 1].pass_by_reference) {
- byref_count++;
- }
- }
- }
-
- if (byref_count) {
- byref_vals = (VARIANT*)safe_emalloc(sizeof(VARIANT), byref_count, 0);
- for (j = 0, i = 0; i < nargs; i++) {
- if (f->arg_info[nargs - i - 1].pass_by_reference) {
- /* put the value into byref_vals instead */
- php_com_variant_from_zval(&byref_vals[j], *args[nargs - i - 1], obj->code_page TSRMLS_CC);
-
- /* if it is already byref, "move" it into the vargs array, otherwise
- * make vargs a reference to this value */
- if (V_VT(&byref_vals[j]) & VT_BYREF) {
- memcpy(&vargs[i], &byref_vals[j], sizeof(vargs[i]));
- VariantInit(&byref_vals[j]); /* leave the variant slot empty to simplify cleanup */
- } else {
- VariantInit(&vargs[i]);
- V_VT(&vargs[i]) = V_VT(&byref_vals[j]) | VT_BYREF;
- /* union magic ensures that this works out */
- vargs[i].byref = &V_UINT(&byref_vals[j]);
- }
- j++;
- } else {
- php_com_variant_from_zval(&vargs[i], *args[nargs - i - 1], obj->code_page TSRMLS_CC);
- }
- }
-
- } else {
- /* Invoke'd args are in reverse order */
- for (i = 0; i < nargs; i++) {
- php_com_variant_from_zval(&vargs[i], *args[nargs - i - 1], obj->code_page TSRMLS_CC);
- }
- }
-
- disp_params.cArgs = nargs;
- disp_params.cNamedArgs = 0;
- disp_params.rgvarg = vargs;
- disp_params.rgdispidNamedArgs = NULL;
-
- if (flags & DISPATCH_PROPERTYPUT) {
- altdispid = DISPID_PROPERTYPUT;
- disp_params.rgdispidNamedArgs = &altdispid;
- disp_params.cNamedArgs = 1;
- }
-
- /* this will create an exception if needed */
- hr = php_com_invoke_helper(obj, dispid, flags, &disp_params, v TSRMLS_CC);
-
- /* release variants */
- if (vargs) {
- for (i = 0, j = 0; i < nargs; i++) {
- /* if this was byref, update the zval */
- if (f && f->arg_info[nargs - i - 1].pass_by_reference) {
- SEPARATE_ZVAL_IF_NOT_REF(args[nargs - i - 1]);
-
- /* if the variant is pointing at the byref_vals, we need to map
- * the pointee value as a zval; otherwise, the value is pointing
- * into an existing PHP variant record */
- if (V_VT(&vargs[i]) & VT_BYREF) {
- if (vargs[i].byref == &V_UINT(&byref_vals[j])) {
- /* copy that value */
- php_com_zval_from_variant(*args[nargs - i - 1], &byref_vals[j],
- obj->code_page TSRMLS_CC);
- }
- } else {
- /* not sure if this can ever happen; the variant we marked as BYREF
- * is no longer BYREF - copy its value */
- php_com_zval_from_variant(*args[nargs - i - 1], &vargs[i],
- obj->code_page TSRMLS_CC);
- }
- VariantClear(&byref_vals[j]);
- j++;
- }
- VariantClear(&vargs[i]);
- }
- efree(vargs);
- }
-
- return SUCCEEDED(hr) ? SUCCESS : FAILURE;
-}
-
-
-
-int php_com_do_invoke_by_id(php_com_dotnet_object *obj, DISPID dispid,
- WORD flags, VARIANT *v, int nargs, zval **args TSRMLS_DC)
-{
- DISPID altdispid;
- DISPPARAMS disp_params;
- HRESULT hr;
- VARIANT *vargs = NULL;
- int i;
-
- if (nargs) {
- vargs = (VARIANT*)safe_emalloc(sizeof(VARIANT), nargs, 0);
- }
-
- /* Invoke'd args are in reverse order */
- for (i = 0; i < nargs; i++) {
- php_com_variant_from_zval(&vargs[i], args[nargs - i - 1], obj->code_page TSRMLS_CC);
- }
-
- disp_params.cArgs = nargs;
- disp_params.cNamedArgs = 0;
- disp_params.rgvarg = vargs;
- disp_params.rgdispidNamedArgs = NULL;
-
- if (flags & DISPATCH_PROPERTYPUT) {
- altdispid = DISPID_PROPERTYPUT;
- disp_params.rgdispidNamedArgs = &altdispid;
- disp_params.cNamedArgs = 1;
- }
-
- /* this will create an exception if needed */
- hr = php_com_invoke_helper(obj, dispid, flags, &disp_params, v TSRMLS_CC);
-
- /* release variants */
- if (vargs) {
- for (i = 0; i < nargs; i++) {
- VariantClear(&vargs[i]);
- }
- efree(vargs);
- }
-
- /* a bit strange this, but... */
- if (hr == DISP_E_BADPARAMCOUNT)
- return hr;
-
- return SUCCEEDED(hr) ? SUCCESS : FAILURE;
-}
-
-int php_com_do_invoke(php_com_dotnet_object *obj, char *name, int namelen,
- WORD flags, VARIANT *v, int nargs, zval **args TSRMLS_DC)
-{
- DISPID dispid;
- HRESULT hr;
- char *winerr = NULL;
- char *msg = NULL;
-
- hr = php_com_get_id_of_name(obj, name, namelen, &dispid TSRMLS_CC);
-
- if (FAILED(hr)) {
- winerr = php_win_err(hr);
- spprintf(&msg, 0, "Unable to lookup `%s': %s", name, winerr);
- LocalFree(winerr);
- php_com_throw_exception(hr, msg TSRMLS_CC);
- efree(msg);
- return FAILURE;
- }
-
- return php_com_do_invoke_by_id(obj, dispid, flags, v, nargs, args TSRMLS_CC);
-}
-
-/* {{{ proto string com_create_guid()
- Generate a globally unique identifier (GUID) */
-PHP_FUNCTION(com_create_guid)
-{
- GUID retval;
- OLECHAR *guid_string;
-
- if (ZEND_NUM_ARGS() != 0) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- if (CoCreateGuid(&retval) == S_OK && StringFromCLSID(&retval, &guid_string) == S_OK) {
- Z_TYPE_P(return_value) = IS_STRING;
- Z_STRVAL_P(return_value) = php_com_olestring_to_string(guid_string, &Z_STRLEN_P(return_value), CP_ACP, 0);
-
- CoTaskMemFree(guid_string);
- } else {
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-/* {{{ proto bool com_event_sink(object comobject, object sinkobject [, mixed sinkinterface])
- Connect events from a COM object to a PHP object */
-PHP_FUNCTION(com_event_sink)
-{
- zval *object, *sinkobject, *sink=NULL;
- char *dispname = NULL, *typelibname = NULL;
- zend_bool gotguid = 0;
- php_com_dotnet_object *obj;
- ITypeInfo *typeinfo = NULL;
-
- RETVAL_FALSE;
-
- if (FAILURE == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "Oo|z/",
- &object, php_com_variant_class_entry, &sinkobject, &sink)) {
- RETURN_FALSE;
- }
-
- obj = CDNO_FETCH(object);
-
- if (sink && Z_TYPE_P(sink) == IS_ARRAY) {
- /* 0 => typelibname, 1 => dispname */
- zval **tmp;
-
- if (zend_hash_index_find(Z_ARRVAL_P(sink), 0, (void**)&tmp) == SUCCESS)
- typelibname = Z_STRVAL_PP(tmp);
- if (zend_hash_index_find(Z_ARRVAL_P(sink), 1, (void**)&tmp) == SUCCESS)
- dispname = Z_STRVAL_PP(tmp);
- } else if (sink != NULL) {
- convert_to_string(sink);
- dispname = Z_STRVAL_P(sink);
- }
-
- typeinfo = php_com_locate_typeinfo(typelibname, obj, dispname, 1 TSRMLS_CC);
-
- if (typeinfo) {
- HashTable *id_to_name;
-
- ALLOC_HASHTABLE(id_to_name);
-
- if (php_com_process_typeinfo(typeinfo, id_to_name, 0, &obj->sink_id, obj->code_page TSRMLS_CC)) {
-
- /* Create the COM wrapper for this sink */
- obj->sink_dispatch = php_com_wrapper_export_as_sink(sinkobject, &obj->sink_id, id_to_name TSRMLS_CC);
-
- /* Now hook it up to the source */
- php_com_object_enable_event_sink(obj, TRUE TSRMLS_CC);
- RETVAL_TRUE;
-
- } else {
- FREE_HASHTABLE(id_to_name);
- }
- }
-
- if (typeinfo) {
- ITypeInfo_Release(typeinfo);
- }
-
-}
-/* }}} */
-
-/* {{{ proto bool com_print_typeinfo(object comobject | string typelib, string dispinterface, bool wantsink)
- Print out a PHP class definition for a dispatchable interface */
-PHP_FUNCTION(com_print_typeinfo)
-{
- zval *arg1;
- char *ifacename = NULL;
- char *typelibname = NULL;
- int ifacelen;
- zend_bool wantsink = 0;
- php_com_dotnet_object *obj = NULL;
- ITypeInfo *typeinfo;
-
- if (FAILURE == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z/|s!b", &arg1, &ifacename,
- &ifacelen, &wantsink)) {
- RETURN_FALSE;
- }
-
- if (Z_TYPE_P(arg1) == IS_OBJECT) {
- CDNO_FETCH_VERIFY(obj, arg1);
- } else {
- convert_to_string(arg1);
- typelibname = Z_STRVAL_P(arg1);
- }
-
- typeinfo = php_com_locate_typeinfo(typelibname, obj, ifacename, wantsink ? 1 : 0 TSRMLS_CC);
- if (typeinfo) {
- php_com_process_typeinfo(typeinfo, NULL, 1, NULL, obj ? obj->code_page : COMG(code_page) TSRMLS_CC);
- ITypeInfo_Release(typeinfo);
- RETURN_TRUE;
- } else {
- zend_error(E_WARNING, "Unable to find typeinfo using the parameters supplied");
- }
- RETURN_FALSE;
-}
-/* }}} */
-
-/* {{{ proto bool com_message_pump([int timeoutms])
- Process COM messages, sleeping for up to timeoutms milliseconds */
-PHP_FUNCTION(com_message_pump)
-{
- long timeoutms = 0;
- MSG msg;
- DWORD result;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|l", &timeoutms) == FAILURE)
- RETURN_FALSE;
-
- result = MsgWaitForMultipleObjects(0, NULL, FALSE, timeoutms, QS_ALLINPUT);
-
- if (result == WAIT_OBJECT_0) {
- while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) {
- TranslateMessage(&msg);
- DispatchMessage(&msg);
- }
- /* we processed messages */
- RETVAL_TRUE;
- } else {
- /* we did not process messages (timed out) */
- RETVAL_FALSE;
- }
-}
-/* }}} */
-
-/* {{{ proto bool com_load_typelib(string typelib_name [, int case_insensitive])
- Loads a Typelibrary and registers its constants */
-PHP_FUNCTION(com_load_typelib)
-{
- char *name;
- int namelen;
- ITypeLib *pTL = NULL;
- zend_bool cs = TRUE;
- int codepage = COMG(code_page);
- int cached = 0;
-
- if (FAILURE == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|b", &name, &namelen, &cs)) {
- return;
- }
-
- RETVAL_FALSE;
-
- pTL = php_com_load_typelib_via_cache(name, codepage, &cached TSRMLS_CC);
- if (pTL) {
- if (cached) {
- RETVAL_TRUE;
- } else if (php_com_import_typelib(pTL, cs ? CONST_CS : 0, codepage TSRMLS_CC) == SUCCESS) {
- RETVAL_TRUE;
- }
-
- ITypeLib_Release(pTL);
- pTL = NULL;
- }
-}
-/* }}} */
-
-
-
-/*
- * 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/com_dotnet/com_dotnet.c b/ext/com_dotnet/com_dotnet.c
deleted file mode 100644
index 58c4255fed..0000000000
--- a/ext/com_dotnet/com_dotnet.c
+++ /dev/null
@@ -1,224 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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@thebrainroom.com> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "php.h"
-
-#if HAVE_MSCOREE_H
-# include "php_ini.h"
-# include "ext/standard/info.h"
-# include "php_com_dotnet.h"
-# include "php_com_dotnet_internal.h"
-# include "Zend/zend_exceptions.h"
-# include <mscoree.h>
-
-struct dotnet_runtime_stuff {
- ICorRuntimeHost *dotnet_host;
- IDispatch *dotnet_domain;
- DISPID create_instance;
-};
-
-/* Since there is no official public mscorlib.h header file, and since
- * generating your own version from the binary .tlb file results in a 3MB
- * header file (!), we opt for the Dispatch-able approach. This is slightly
- * slower for creating new objects, but not too bad */
-static int dotnet_init(TSRMLS_D)
-{
- HRESULT hr;
- struct dotnet_runtime_stuff *stuff;
- IUnknown *unk = NULL;
- OLECHAR *olename;
-
- stuff = malloc(sizeof(*stuff));
- memset(stuff, 0, sizeof(*stuff));
-
- if (SUCCEEDED(CoCreateInstance(&CLSID_CorRuntimeHost, NULL, CLSCTX_ALL,
- &IID_ICorRuntimeHost, (LPVOID*)&stuff->dotnet_host))) {
-
- /* fire up the host and get the domain object */
- if (SUCCEEDED(ICorRuntimeHost_Start(stuff->dotnet_host)) &&
- SUCCEEDED(ICorRuntimeHost_GetDefaultDomain(stuff->dotnet_host, &unk)) &&
- SUCCEEDED(IUnknown_QueryInterface(unk, &IID_IDispatch, (LPVOID*)&stuff->dotnet_domain))) {
-
- /* locate the create-instance member */
- olename = php_com_string_to_olestring("CreateInstance", sizeof("CreateInstance")-1, CP_ACP TSRMLS_CC);
- hr = IDispatch_GetIDsOfNames(stuff->dotnet_domain, &IID_NULL, &olename, 1, LOCALE_SYSTEM_DEFAULT, &stuff->create_instance);
- efree(olename);
-
- if (SUCCEEDED(hr)) {
- COMG(dotnet_runtime_stuff) = stuff;
- }
- }
-
- if (unk) {
- IUnknown_Release(unk);
- }
- }
-
- if (COMG(dotnet_runtime_stuff) == NULL) {
- /* clean up */
- if (stuff->dotnet_domain) {
- IDispatch_Release(stuff->dotnet_domain);
- }
- if (stuff->dotnet_host) {
- ICorRuntimeHost_Stop(stuff->dotnet_host);
- ICorRuntimeHost_Release(stuff->dotnet_host);
- }
- free(stuff);
-
- return FAILURE;
- }
-
- return SUCCESS;
-}
-
-/* {{{ com_dotnet_create_instance - ctor for DOTNET class */
-PHP_FUNCTION(com_dotnet_create_instance)
-{
- zval *object = getThis();
- php_com_dotnet_object *obj;
- char *assembly_name, *datatype_name;
- int assembly_name_len, datatype_name_len;
- struct dotnet_runtime_stuff *stuff;
- DISPPARAMS params;
- OLECHAR *olestring;
- VARIANT vargs[2];
- VARIANT retval;
- HRESULT hr;
- int ret = FAILURE;
- char *where = "";
-
- if (COMG(dotnet_runtime_stuff) == NULL) {
- if (FAILURE == dotnet_init(TSRMLS_C)) {
- php_com_throw_exception(E_ERROR, "Failed to initialize .Net runtime" TSRMLS_CC);
- ZVAL_NULL(object);
- return;
- }
- }
-
- stuff = (struct dotnet_runtime_stuff*)COMG(dotnet_runtime_stuff);
-
- obj = CDNO_FETCH(object);
-
- if (FAILURE == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ss|l",
- &assembly_name, &assembly_name_len,
- &datatype_name, &datatype_name_len,
- &obj->code_page)) {
- php_com_throw_exception(E_INVALIDARG, "Could not create .Net object - invalid arguments!" TSRMLS_CC);
- ZVAL_NULL(object);
- return;
- }
-
- params.cArgs = 2;
- params.cNamedArgs = 0;
- params.rgdispidNamedArgs = NULL;
- params.rgvarg = vargs;
-
- VariantInit(&vargs[0]);
- VariantInit(&vargs[1]);
- VariantInit(&retval);
-
- V_VT(&vargs[0]) = VT_BSTR;
- olestring = php_com_string_to_olestring(datatype_name, datatype_name_len, obj->code_page TSRMLS_CC);
- V_BSTR(&vargs[0]) = SysAllocStringByteLen((char*)olestring, datatype_name_len * sizeof(OLECHAR));
- efree(olestring);
-
- V_VT(&vargs[1]) = VT_BSTR;
- olestring = php_com_string_to_olestring(assembly_name, assembly_name_len, obj->code_page TSRMLS_CC);
- V_BSTR(&vargs[1]) = SysAllocStringByteLen((char*)olestring, assembly_name_len * sizeof(OLECHAR));
- efree(olestring);
-
- where = "IDispatch_Invoke";
- hr = IDispatch_Invoke(stuff->dotnet_domain, stuff->create_instance, &IID_NULL, LOCALE_SYSTEM_DEFAULT,
- DISPATCH_METHOD, &params, &retval, NULL, NULL);
-
- if (SUCCEEDED(hr)) {
- /* retval should now be an IUnknown/IDispatch representation of an IObjectHandle interface */
- if (V_VT(&retval) == VT_UNKNOWN || V_VT(&retval) == VT_DISPATCH) {
- VARIANT unwrapped;
- IObjectHandle *handle;
-
- where = "QI: IID_IObjectHandle";
- hr = IUnknown_QueryInterface(V_UNKNOWN(&retval), &IID_IObjectHandle, &handle);
- if (SUCCEEDED(hr)) {
- where = "IObjectHandle_Unwrap";
- hr = IObjectHandle_Unwrap(handle, &unwrapped);
- if (SUCCEEDED(hr)) {
- /* unwrapped is now the dispatch pointer we want */
- V_DISPATCH(&obj->v) = V_DISPATCH(&unwrapped);
- V_VT(&obj->v) = VT_DISPATCH;
-
- /* get its type-info */
- IDispatch_GetTypeInfo(V_DISPATCH(&obj->v), 0, LANG_NEUTRAL, &obj->typeinfo);
-
- ret = SUCCESS;
- }
- IObjectHandle_Release(handle);
- }
- }
- VariantClear(&retval);
- }
-
- VariantClear(&vargs[0]);
- VariantClear(&vargs[1]);
-
- if (ret == FAILURE) {
- char buf[1024];
- char *err = php_win_err(hr);
- snprintf(buf, sizeof(buf), "Failed to instantiate .Net object [%s] %s", where, err);
- if (err)
- LocalFree(err);
- php_com_throw_exception(hr, buf TSRMLS_CC);
- ZVAL_NULL(object);
- return;
- }
-}
-/* }}} */
-
-void php_com_dotnet_mshutdown(TSRMLS_D)
-{
- struct dotnet_runtime_stuff *stuff = COMG(dotnet_runtime_stuff);
-
- if (stuff->dotnet_domain) {
- IDispatch_Release(stuff->dotnet_domain);
- }
- if (stuff->dotnet_host) {
- ICorRuntimeHost_Stop(stuff->dotnet_host);
- ICorRuntimeHost_Release(stuff->dotnet_host);
- stuff->dotnet_host = NULL;
- }
- free(stuff);
- COMG(dotnet_runtime_stuff) = NULL;
-}
-
-void php_com_dotnet_rshutdown(TSRMLS_D)
-{
- struct dotnet_runtime_stuff *stuff = COMG(dotnet_runtime_stuff);
-
- if (stuff->dotnet_domain) {
- IDispatch_Release(stuff->dotnet_domain);
- stuff->dotnet_domain = NULL;
- }
-}
-
-#endif /* HAVE_MSCOREE_H */
diff --git a/ext/com_dotnet/com_extension.c b/ext/com_dotnet/com_extension.c
deleted file mode 100644
index c4679a82ee..0000000000
--- a/ext/com_dotnet/com_extension.c
+++ /dev/null
@@ -1,358 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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@thebrainroom.com> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "php.h"
-#include "php_ini.h"
-#include "ext/standard/info.h"
-#include "php_com_dotnet.h"
-#include "php_com_dotnet_internal.h"
-#include "Zend/zend_exceptions.h"
-
-ZEND_DECLARE_MODULE_GLOBALS(com_dotnet)
-TsHashTable php_com_typelibraries;
-
-zend_class_entry
- *php_com_variant_class_entry,
- *php_com_exception_class_entry,
- *php_com_saproxy_class_entry;
-
-function_entry com_dotnet_functions[] = {
- PHP_FE(variant_set, NULL)
- PHP_FE(variant_add, NULL)
- PHP_FE(variant_cat, NULL)
- PHP_FE(variant_sub, NULL)
- PHP_FE(variant_mul, NULL)
- PHP_FE(variant_and, NULL)
- PHP_FE(variant_div, NULL)
- PHP_FE(variant_eqv, NULL)
- PHP_FE(variant_idiv, NULL)
- PHP_FE(variant_imp, NULL)
- PHP_FE(variant_mod, NULL)
- PHP_FE(variant_or, NULL)
- PHP_FE(variant_pow, NULL)
- PHP_FE(variant_xor, NULL)
- PHP_FE(variant_abs, NULL)
- PHP_FE(variant_fix, NULL)
- PHP_FE(variant_int, NULL)
- PHP_FE(variant_neg, NULL)
- PHP_FE(variant_not, NULL)
- PHP_FE(variant_round, NULL)
- PHP_FE(variant_cmp, NULL)
- PHP_FE(variant_date_to_timestamp, NULL)
- PHP_FE(variant_date_from_timestamp, NULL)
- PHP_FE(variant_get_type, NULL)
- PHP_FE(variant_set_type, NULL)
- PHP_FE(variant_cast, NULL)
- /* com_com.c */
- PHP_FE(com_create_guid, NULL)
- PHP_FE(com_event_sink, NULL)
- PHP_FE(com_print_typeinfo, NULL)
- PHP_FE(com_message_pump, NULL)
- PHP_FE(com_load_typelib, NULL)
- PHP_FE(com_get_active_object, NULL)
- { NULL, NULL, NULL }
-};
-
-/* {{{ com_dotnet_module_entry
- */
-zend_module_entry com_dotnet_module_entry = {
- STANDARD_MODULE_HEADER,
- "com_dotnet",
- com_dotnet_functions,
- PHP_MINIT(com_dotnet),
- PHP_MSHUTDOWN(com_dotnet),
- PHP_RINIT(com_dotnet),
- PHP_RSHUTDOWN(com_dotnet),
- PHP_MINFO(com_dotnet),
- "0.1",
- STANDARD_MODULE_PROPERTIES
-};
-/* }}} */
-
-#ifdef COMPILE_DL_COM_DOTNET
-ZEND_GET_MODULE(com_dotnet)
-#endif
-
-/* {{{ PHP_INI
- */
-
-/* com.typelib_file is the path to a file containing a
- * list of typelibraries to register *persistently*.
- * lines starting with ; are comments
- * append #cis to end of typelib name to cause its constants
- * to be loaded case insensitively */
-static PHP_INI_MH(OnTypeLibFileUpdate)
-{
- FILE *typelib_file;
- char *typelib_name_buffer;
- char *strtok_buf = NULL;
- int cached;
-
- if (!new_value || (typelib_file = VCWD_FOPEN(new_value, "r"))==NULL) {
- return FAILURE;
- }
-
- typelib_name_buffer = (char *) emalloc(sizeof(char)*1024);
-
- while (fgets(typelib_name_buffer, 1024, typelib_file)) {
- ITypeLib *pTL;
- char *typelib_name;
- char *modifier, *ptr;
- int mode = CONST_CS | CONST_PERSISTENT; /* CONST_PERSISTENT is ok here */
-
- if (typelib_name_buffer[0]==';') {
- continue;
- }
- typelib_name = php_strtok_r(typelib_name_buffer, "\r\n", &strtok_buf); /* get rid of newlines */
- if (typelib_name == NULL) {
- continue;
- }
- typelib_name = php_strtok_r(typelib_name, "#", &strtok_buf);
- modifier = php_strtok_r(NULL, "#", &strtok_buf);
- if (modifier != NULL) {
- if (!strcmp(modifier, "cis") || !strcmp(modifier, "case_insensitive")) {
- mode &= ~CONST_CS;
- }
- }
-
- /* Remove leading/training white spaces on search_string */
- while (isspace(*typelib_name)) {/* Ends on '\0' in worst case */
- typelib_name ++;
- }
- ptr = typelib_name + strlen(typelib_name) - 1;
- while ((ptr != typelib_name) && isspace(*ptr)) {
- *ptr = '\0';
- ptr--;
- }
-
- if ((pTL = php_com_load_typelib_via_cache(typelib_name, COMG(code_page), &cached TSRMLS_CC)) != NULL) {
- if (!cached) {
- php_com_import_typelib(pTL, mode, COMG(code_page) TSRMLS_CC);
- }
- ITypeLib_Release(pTL);
- }
- }
-
- efree(typelib_name_buffer);
- fclose(typelib_file);
-
- return SUCCESS;
-}
-
-PHP_INI_BEGIN()
- STD_PHP_INI_ENTRY("com.allow_dcom", "0", PHP_INI_SYSTEM, OnUpdateBool, allow_dcom, zend_com_dotnet_globals, com_dotnet_globals)
- STD_PHP_INI_ENTRY("com.autoregister_verbose", "0", PHP_INI_ALL, OnUpdateBool, autoreg_verbose, zend_com_dotnet_globals, com_dotnet_globals)
- STD_PHP_INI_ENTRY("com.autoregister_typelib", "0", PHP_INI_ALL, OnUpdateBool, autoreg_on, zend_com_dotnet_globals, com_dotnet_globals)
- STD_PHP_INI_ENTRY("com.autoregister_casesensitive", "1", PHP_INI_ALL, OnUpdateBool, autoreg_case_sensitive, zend_com_dotnet_globals, com_dotnet_globals)
- STD_PHP_INI_ENTRY("com.code_page", "", PHP_INI_ALL, OnUpdateLong, code_page, zend_com_dotnet_globals, com_dotnet_globals)
- PHP_INI_ENTRY("com.typelib_file", "", PHP_INI_SYSTEM, OnTypeLibFileUpdate)
-PHP_INI_END()
-/* }}} */
-
-/* {{{ php_com_dotnet_init_globals
- */
-static void php_com_dotnet_init_globals(zend_com_dotnet_globals *com_dotnet_globals)
-{
- memset(com_dotnet_globals, 0, sizeof(*com_dotnet_globals));
- com_dotnet_globals->code_page = CP_ACP;
-}
-/* }}} */
-
-/* {{{ PHP_MINIT_FUNCTION
- */
-PHP_MINIT_FUNCTION(com_dotnet)
-{
- zend_class_entry ce, *tmp;
-
- ZEND_INIT_MODULE_GLOBALS(com_dotnet, php_com_dotnet_init_globals, NULL);
- REGISTER_INI_ENTRIES();
-
- php_com_wrapper_minit(INIT_FUNC_ARGS_PASSTHRU);
- php_com_persist_minit(INIT_FUNC_ARGS_PASSTHRU);
-
- INIT_CLASS_ENTRY(ce, "com_exception", NULL);
- php_com_exception_class_entry = zend_register_internal_class_ex(&ce, zend_exception_get_default(), NULL TSRMLS_CC);
- php_com_exception_class_entry->ce_flags |= ZEND_ACC_FINAL;
-// php_com_exception_class_entry->constructor->common.fn_flags |= ZEND_ACC_PROTECTED;
-
- INIT_CLASS_ENTRY(ce, "com_safearray_proxy", NULL);
- php_com_saproxy_class_entry = zend_register_internal_class(&ce TSRMLS_CC);
- php_com_saproxy_class_entry->ce_flags |= ZEND_ACC_FINAL;
-// php_com_saproxy_class_entry->constructor->common.fn_flags |= ZEND_ACC_PROTECTED;
- php_com_saproxy_class_entry->get_iterator = php_com_saproxy_iter_get;
-
- INIT_CLASS_ENTRY(ce, "variant", NULL);
- ce.create_object = php_com_object_new;
- php_com_variant_class_entry = zend_register_internal_class(&ce TSRMLS_CC);
- php_com_variant_class_entry->get_iterator = php_com_iter_get;
-
- INIT_CLASS_ENTRY(ce, "com", NULL);
- ce.create_object = php_com_object_new;
- tmp = zend_register_internal_class_ex(&ce, php_com_variant_class_entry, "variant" TSRMLS_CC);
- tmp->get_iterator = php_com_iter_get;
-
- zend_ts_hash_init(&php_com_typelibraries, 0, NULL, php_com_typelibrary_dtor, 1);
-
-#if HAVE_MSCOREE_H
- INIT_CLASS_ENTRY(ce, "dotnet", NULL);
- ce.create_object = php_com_object_new;
- tmp = zend_register_internal_class_ex(&ce, php_com_variant_class_entry, "variant" TSRMLS_CC);
- tmp->get_iterator = php_com_iter_get;
-#endif
-
-#define COM_CONST(x) REGISTER_LONG_CONSTANT(#x, x, CONST_CS|CONST_PERSISTENT)
-
- COM_CONST(CLSCTX_INPROC_SERVER);
- COM_CONST(CLSCTX_INPROC_HANDLER);
- COM_CONST(CLSCTX_LOCAL_SERVER);
- COM_CONST(CLSCTX_REMOTE_SERVER);
- COM_CONST(CLSCTX_SERVER);
- COM_CONST(CLSCTX_ALL);
-
-#if 0
- COM_CONST(DISPATCH_METHOD);
- COM_CONST(DISPATCH_PROPERTYGET);
- COM_CONST(DISPATCH_PROPERTYPUT);
-#endif
-
- COM_CONST(VT_NULL);
- COM_CONST(VT_EMPTY);
- COM_CONST(VT_UI1);
- COM_CONST(VT_I1);
- COM_CONST(VT_UI2);
- COM_CONST(VT_I2);
- COM_CONST(VT_UI4);
- COM_CONST(VT_I4);
- COM_CONST(VT_R4);
- COM_CONST(VT_R8);
- COM_CONST(VT_BOOL);
- COM_CONST(VT_ERROR);
- COM_CONST(VT_CY);
- COM_CONST(VT_DATE);
- COM_CONST(VT_BSTR);
- COM_CONST(VT_DECIMAL);
- COM_CONST(VT_UNKNOWN);
- COM_CONST(VT_DISPATCH);
- COM_CONST(VT_VARIANT);
- COM_CONST(VT_INT);
- COM_CONST(VT_UINT);
- COM_CONST(VT_ARRAY);
- COM_CONST(VT_BYREF);
-
- COM_CONST(CP_ACP);
- COM_CONST(CP_MACCP);
- COM_CONST(CP_OEMCP);
- COM_CONST(CP_UTF7);
- COM_CONST(CP_UTF8);
- COM_CONST(CP_SYMBOL);
- COM_CONST(CP_THREAD_ACP);
-
- COM_CONST(VARCMP_LT);
- COM_CONST(VARCMP_EQ);
- COM_CONST(VARCMP_GT);
- COM_CONST(VARCMP_NULL);
-
- COM_CONST(NORM_IGNORECASE);
- COM_CONST(NORM_IGNORENONSPACE);
- COM_CONST(NORM_IGNORESYMBOLS);
- COM_CONST(NORM_IGNOREWIDTH);
- COM_CONST(NORM_IGNOREKANATYPE);
-#ifdef NORM_IGNOREKASHIDA
- COM_CONST(NORM_IGNOREKASHIDA);
-#endif
- COM_CONST(DISP_E_DIVBYZERO);
- COM_CONST(DISP_E_OVERFLOW);
- COM_CONST(DISP_E_BADINDEX);
- COM_CONST(MK_E_UNAVAILABLE);
-
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ PHP_MSHUTDOWN_FUNCTION
- */
-PHP_MSHUTDOWN_FUNCTION(com_dotnet)
-{
- UNREGISTER_INI_ENTRIES();
-#if HAVE_MSCOREE_H
- if (COMG(dotnet_runtime_stuff)) {
- php_com_dotnet_mshutdown(TSRMLS_C);
- }
-#endif
-
- zend_ts_hash_destroy(&php_com_typelibraries);
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ PHP_RINIT_FUNCTION
- */
-PHP_RINIT_FUNCTION(com_dotnet)
-{
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ PHP_RSHUTDOWN_FUNCTION
- */
-PHP_RSHUTDOWN_FUNCTION(com_dotnet)
-{
-#if HAVE_MSCOREE_H
- if (COMG(dotnet_runtime_stuff)) {
- php_com_dotnet_rshutdown(TSRMLS_C);
- }
-#endif
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ PHP_MINFO_FUNCTION
- */
-PHP_MINFO_FUNCTION(com_dotnet)
-{
- php_info_print_table_start();
-
- php_info_print_table_header(2, "COM support", "enabled");
- php_info_print_table_header(2, "DCOM support", COMG(allow_dcom) ? "enabled" : "disabled");
-
-#if HAVE_MSCOREE_H
- php_info_print_table_header(2, ".Net support", "enabled");
-#else
- php_info_print_table_header(2, ".Net support", "not present in this build");
-#endif
-
- php_info_print_table_end();
-
- DISPLAY_INI_ENTRIES();
-}
-/* }}} */
-
-/*
- * 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/com_dotnet/com_handlers.c b/ext/com_dotnet/com_handlers.c
deleted file mode 100644
index 82713c67c7..0000000000
--- a/ext/com_dotnet/com_handlers.c
+++ /dev/null
@@ -1,709 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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@thebrainroom.com> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "php.h"
-#include "php_ini.h"
-#include "ext/standard/info.h"
-#include "php_com_dotnet.h"
-#include "php_com_dotnet_internal.h"
-#include "Zend/zend_exceptions.h"
-
-static zval *com_property_read(zval *object, zval *member, int type TSRMLS_DC)
-{
- zval *return_value;
- php_com_dotnet_object *obj;
- VARIANT v;
- HRESULT res;
-
- MAKE_STD_ZVAL(return_value);
- ZVAL_NULL(return_value);
- return_value->refcount = 0;
- return_value->is_ref = 0;
-
- obj = CDNO_FETCH(object);
-
- if (V_VT(&obj->v) == VT_DISPATCH) {
- VariantInit(&v);
-
- convert_to_string_ex(&member);
-
- res = php_com_do_invoke(obj, Z_STRVAL_P(member), Z_STRLEN_P(member),
- DISPATCH_PROPERTYGET, &v, 0, NULL TSRMLS_CC);
-
- if (res == SUCCESS) {
- php_com_zval_from_variant(return_value, &v, obj->code_page TSRMLS_CC);
- VariantClear(&v);
- } else if (res == DISP_E_BADPARAMCOUNT) {
- php_com_saproxy_create(object, return_value, member TSRMLS_CC);
- }
- } else {
- php_com_throw_exception(E_INVALIDARG, "this variant has no properties" TSRMLS_CC);
- }
-
- return return_value;
-}
-
-static void com_property_write(zval *object, zval *member, zval *value TSRMLS_DC)
-{
- php_com_dotnet_object *obj;
- VARIANT v;
-
- obj = CDNO_FETCH(object);
-
- if (V_VT(&obj->v) == VT_DISPATCH) {
- VariantInit(&v);
-
- convert_to_string_ex(&member);
- if (SUCCESS == php_com_do_invoke(obj, Z_STRVAL_P(member), Z_STRLEN_P(member),
- DISPATCH_PROPERTYPUT, &v, 1, &value TSRMLS_CC)) {
- VariantClear(&v);
- }
- } else {
- php_com_throw_exception(E_INVALIDARG, "this variant has no properties" TSRMLS_CC);
- }
-}
-
-static HRESULT com_get_default_binding(php_com_dotnet_object *obj TSRMLS_DC)
-{
- VARDESC *vardesc;
- int i;
-
- if (!obj->typeinfo) {
- return FAILURE;
- }
-
- for (i = 0; !obj->have_default_bind; i++) {
- if (FAILED(ITypeInfo_GetVarDesc(obj->typeinfo, i, &vardesc))) {
- return FAILURE;
- }
-
- if (vardesc->wVarFlags & VARFLAG_FDEFAULTBIND) {
- obj->default_bind = (DISPID)vardesc->memid;
- obj->have_default_bind = 1;
- }
-
- ITypeInfo_ReleaseVarDesc(obj->typeinfo, vardesc);
- }
- return obj->have_default_bind ? SUCCESS : FAILURE;
-}
-
-static zval *com_read_dimension(zval *object, zval *offset, int type TSRMLS_DC)
-{
- zval *return_value;
- php_com_dotnet_object *obj;
- VARIANT v;
-
- MAKE_STD_ZVAL(return_value);
- ZVAL_NULL(return_value);
- return_value->refcount = 0;
- return_value->is_ref = 0;
-
- obj = CDNO_FETCH(object);
-
- if (V_VT(&obj->v) == VT_DISPATCH) {
- if (!obj->have_default_bind && !com_get_default_binding(obj TSRMLS_CC)) {
- php_com_throw_exception(E_INVALIDARG, "this COM object has no default property" TSRMLS_CC);
- return return_value;
- }
-
- VariantInit(&v);
-
- if (SUCCESS == php_com_do_invoke_by_id(obj, obj->default_bind,
- DISPATCH_METHOD|DISPATCH_PROPERTYGET, &v, 1, &offset TSRMLS_CC)) {
- php_com_zval_from_variant(return_value, &v, obj->code_page TSRMLS_CC);
- VariantClear(&v);
- }
- } else if (V_ISARRAY(&obj->v)) {
- convert_to_long(offset);
-
- if (SafeArrayGetDim(V_ARRAY(&obj->v)) == 1) {
- if (php_com_safearray_get_elem(&obj->v, &v, Z_LVAL_P(offset) TSRMLS_CC)) {
- php_com_wrap_variant(return_value, &v, obj->code_page TSRMLS_CC);
- VariantClear(&v);
- }
- } else {
- php_com_saproxy_create(object, return_value, offset TSRMLS_CC);
- }
-
- } else {
- php_com_throw_exception(E_INVALIDARG, "this variant is not an array type" TSRMLS_CC);
- }
-
- return return_value;
-}
-
-static void com_write_dimension(zval *object, zval *offset, zval *value TSRMLS_DC)
-{
- php_com_dotnet_object *obj;
- zval *args[2];
- VARIANT v;
- HRESULT res;
-
- obj = CDNO_FETCH(object);
-
- if (V_VT(&obj->v) == VT_DISPATCH) {
- if (!obj->have_default_bind && !com_get_default_binding(obj TSRMLS_CC)) {
- php_com_throw_exception(E_INVALIDARG, "this COM object has no default property" TSRMLS_CC);
- return;
- }
-
- args[0] = offset;
- args[1] = value;
-
- VariantInit(&v);
-
- if (SUCCESS == php_com_do_invoke_by_id(obj, obj->default_bind,
- DISPATCH_METHOD|DISPATCH_PROPERTYPUT, &v, 2, args TSRMLS_CC)) {
- VariantClear(&v);
- }
- } else if (V_ISARRAY(&obj->v)) {
- LONG indices = 0;
- VARTYPE vt;
-
- if (SafeArrayGetDim(V_ARRAY(&obj->v)) == 1) {
- if (FAILED(SafeArrayGetVartype(V_ARRAY(&obj->v), &vt)) || vt == VT_EMPTY) {
- vt = V_VT(&obj->v) & ~VT_ARRAY;
- }
-
- convert_to_long(offset);
- indices = Z_LVAL_P(offset);
-
- VariantInit(&v);
- php_com_variant_from_zval(&v, value, obj->code_page TSRMLS_CC);
-
- if (V_VT(&v) != vt) {
- VariantChangeType(&v, &v, 0, vt);
- }
-
- if (vt == VT_VARIANT) {
- res = SafeArrayPutElement(V_ARRAY(&obj->v), &indices, &v);
- } else {
- res = SafeArrayPutElement(V_ARRAY(&obj->v), &indices, &v.lVal);
- }
-
- VariantClear(&v);
-
- if (FAILED(res)) {
- php_com_throw_exception(res, NULL TSRMLS_CC);
- }
-
- } else {
- php_com_throw_exception(DISP_E_BADINDEX, "this variant has multiple dimensions; you can't set a new value without specifying *all* dimensions" TSRMLS_CC);
- }
-
- } else {
- php_com_throw_exception(E_INVALIDARG, "this variant is not an array type" TSRMLS_CC);
- }
-}
-
-#if 0
-static void com_object_set(zval **property, zval *value TSRMLS_DC)
-{
- /* Not yet implemented in the engine */
-}
-
-static zval *com_object_get(zval *property TSRMLS_DC)
-{
- /* Not yet implemented in the engine */
- return NULL;
-}
-#endif
-
-static int com_property_exists(zval *object, zval *member, int check_empty TSRMLS_DC)
-{
- DISPID dispid;
- php_com_dotnet_object *obj;
-
- obj = CDNO_FETCH(object);
-
- if (V_VT(&obj->v) == VT_DISPATCH) {
- convert_to_string_ex(&member);
- if (SUCCEEDED(php_com_get_id_of_name(obj, Z_STRVAL_P(member), Z_STRLEN_P(member), &dispid TSRMLS_CC))) {
- /* TODO: distinguish between property and method! */
- return 1;
- }
- } else {
- /* TODO: check for safearray */
- }
-
- return 0;
-}
-
-static int com_dimension_exists(zval *object, zval *member, int check_empty TSRMLS_DC)
-{
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Operation not yet supported on a COM object");
- return 0;
-}
-
-static void com_property_delete(zval *object, zval *member TSRMLS_DC)
-{
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Cannot delete properties from a COM object");
-}
-
-static void com_dimension_delete(zval *object, zval *offset TSRMLS_DC)
-{
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Cannot delete properties from a COM object");
-}
-
-static HashTable *com_properties_get(zval *object TSRMLS_DC)
-{
- /* TODO: use type-info to get all the names and values ?
- * DANGER: if we do that, there is a strong possibility for
- * infinite recursion when the hash is displayed via var_dump().
- * Perhaps it is best to leave it un-implemented.
- */
- return NULL;
-}
-
-static void function_dtor(void *pDest)
-{
- zend_internal_function *f = (zend_internal_function*)pDest;
-
- efree(f->function_name);
- if (f->arg_info) {
- efree(f->arg_info);
- }
-}
-
-static PHP_FUNCTION(com_method_handler)
-{
- Z_OBJ_HANDLER_P(getThis(), call_method)(
- ((zend_internal_function*)EG(function_state_ptr)->function)->function_name,
- INTERNAL_FUNCTION_PARAM_PASSTHRU);
-}
-
-static union _zend_function *com_method_get(zval *object, char *name, int len TSRMLS_DC)
-{
- zend_internal_function f, *fptr = NULL;
- php_com_dotnet_object *obj;
- union _zend_function *func;
- DISPID dummy;
-
- obj = CDNO_FETCH(object);
-
- if (V_VT(&obj->v) != VT_DISPATCH) {
- return NULL;
- }
-
- if (FAILED(php_com_get_id_of_name(obj, name, len, &dummy TSRMLS_CC))) {
- return NULL;
- }
-
- /* check cache */
- if (obj->method_cache == NULL || FAILURE == zend_hash_find(obj->method_cache, name, len, (void**)&fptr)) {
- f.type = ZEND_OVERLOADED_FUNCTION;
- f.num_args = 0;
- f.arg_info = NULL;
- f.scope = obj->ce;
- f.fn_flags = 0;
- f.function_name = estrndup(name, len);
- f.handler = PHP_FN(com_method_handler);
-
- fptr = &f;
-
- if (obj->typeinfo) {
- /* look for byref params */
- ITypeComp *comp;
- ITypeInfo *TI = NULL;
- DESCKIND kind;
- BINDPTR bindptr;
- OLECHAR *olename;
- ULONG lhash;
- int i;
-
- if (SUCCEEDED(ITypeInfo_GetTypeComp(obj->typeinfo, &comp))) {
- olename = php_com_string_to_olestring(name, len, obj->code_page TSRMLS_CC);
- lhash = LHashValOfNameSys(SYS_WIN32, LOCALE_SYSTEM_DEFAULT, olename);
-
- if (SUCCEEDED(ITypeComp_Bind(comp, olename, lhash, INVOKE_FUNC, &TI, &kind, &bindptr))) {
- switch (kind) {
- case DESCKIND_FUNCDESC:
- f.arg_info = ecalloc(bindptr.lpfuncdesc->cParams, sizeof(zend_arg_info));
-
- for (i = 0; i < bindptr.lpfuncdesc->cParams; i++) {
- f.arg_info[i].allow_null = 1;
- if (bindptr.lpfuncdesc->lprgelemdescParam[i].paramdesc.wParamFlags & PARAMFLAG_FOUT) {
- f.arg_info[i].pass_by_reference = 1;
- }
- }
-
- f.num_args = bindptr.lpfuncdesc->cParams;
-
- ITypeInfo_ReleaseFuncDesc(TI, bindptr.lpfuncdesc);
- break;
-
- /* these should not happen, but *might* happen if the user
- * screws up; lets avoid a leak in that case */
- case DESCKIND_VARDESC:
- ITypeInfo_ReleaseVarDesc(TI, bindptr.lpvardesc);
- break;
- case DESCKIND_TYPECOMP:
- ITypeComp_Release(bindptr.lptcomp);
- break;
-
- case DESCKIND_NONE:
- break;
- }
- if (TI) {
- ITypeInfo_Release(TI);
- }
- }
- ITypeComp_Release(comp);
- efree(olename);
- }
- }
-
- if (fptr) {
- /* save this method in the cache */
- if (!obj->method_cache) {
- ALLOC_HASHTABLE(obj->method_cache);
- zend_hash_init(obj->method_cache, 2, NULL, function_dtor, 0);
- }
-
- zend_hash_update(obj->method_cache, name, len, &f, sizeof(f), (void**)&fptr);
- }
- }
-
- if (fptr) {
- /* duplicate this into a new chunk of emalloc'd memory,
- * since the engine will efree it */
- func = emalloc(sizeof(*fptr));
- memcpy(func, fptr, sizeof(*fptr));
-
- return func;
- }
-
- return NULL;
-}
-
-static int com_call_method(char *method, INTERNAL_FUNCTION_PARAMETERS)
-{
- zval ***args = NULL;
- php_com_dotnet_object *obj;
- int nargs;
- VARIANT v;
- int ret = FAILURE;
-
- obj = CDNO_FETCH(getThis());
-
- if (V_VT(&obj->v) != VT_DISPATCH) {
- return FAILURE;
- }
-
- nargs = ZEND_NUM_ARGS();
-
- if (nargs) {
- args = (zval ***)safe_emalloc(sizeof(zval *), nargs, 0);
- zend_get_parameters_array_ex(nargs, args);
- }
-
- VariantInit(&v);
-
- if (SUCCESS == php_com_do_invoke_byref(obj, method, -1, DISPATCH_METHOD|DISPATCH_PROPERTYGET, &v, nargs, args TSRMLS_CC)) {
- php_com_zval_from_variant(return_value, &v, obj->code_page TSRMLS_CC);
- ret = SUCCESS;
- VariantClear(&v);
- }
-
- if (args) {
- efree(args);
- }
-
- return ret;
-}
-
-static union _zend_function *com_constructor_get(zval *object TSRMLS_DC)
-{
- php_com_dotnet_object *obj;
- static zend_internal_function c, d, v;
-
- obj = CDNO_FETCH(object);
-
-#define POPULATE_CTOR(f, fn) \
- f.type = ZEND_INTERNAL_FUNCTION; \
- f.function_name = obj->ce->name; \
- f.scope = obj->ce; \
- f.arg_info = NULL; \
- f.num_args = 0; \
- f.fn_flags = 0; \
- f.handler = ZEND_FN(fn); \
- return (union _zend_function*)&f;
-
- switch (obj->ce->name[0]) {
-#if HAVE_MSCOREE_H
- case 'd':
- POPULATE_CTOR(d, com_dotnet_create_instance);
-#endif
-
- case 'c':
- POPULATE_CTOR(c, com_create_instance);
-
- case 'v':
- POPULATE_CTOR(v, com_variant_create_instance);
-
- default:
- return NULL;
- }
-}
-
-static zend_class_entry *com_class_entry_get(zval *object TSRMLS_DC)
-{
- php_com_dotnet_object *obj;
- obj = CDNO_FETCH(object);
-
- return obj->ce;
-}
-
-static int com_class_name_get(zval *object, char **class_name, zend_uint *class_name_len, int parent TSRMLS_DC)
-{
- php_com_dotnet_object *obj;
- obj = CDNO_FETCH(object);
-
- *class_name = estrndup(obj->ce->name, obj->ce->name_length);
- *class_name_len = obj->ce->name_length;
-
- return 0;
-}
-
-/* This compares two variants for equality */
-static int com_objects_compare(zval *object1, zval *object2 TSRMLS_DC)
-{
- php_com_dotnet_object *obja, *objb;
- int ret;
- /* strange header bug problem here... the headers define the proto without the
- * flags parameter. However, the MSDN docs state that there is a flags parameter,
- * and my VC6 won't link unless the code uses the version with 4 parameters.
- * So, we have this declaration here to fix it */
- STDAPI VarCmp(LPVARIANT pvarLeft, LPVARIANT pvarRight, LCID lcid, DWORD flags);
-
- obja = CDNO_FETCH(object1);
- objb = CDNO_FETCH(object2);
-
- switch (VarCmp(&obja->v, &objb->v, LOCALE_SYSTEM_DEFAULT, 0)) {
- case VARCMP_LT:
- ret = -1;
- break;
- case VARCMP_GT:
- ret = 1;
- break;
- case VARCMP_EQ:
- ret = 0;
- break;
- default:
- /* either or both operands are NULL...
- * not 100% sure how to handle this */
- ret = -2;
- }
-
- return ret;
-}
-
-static int com_object_cast(zval *readobj, zval *writeobj, int type, int should_free TSRMLS_DC)
-{
- php_com_dotnet_object *obj;
- VARIANT v;
- VARTYPE vt = VT_EMPTY;
-
- if (should_free) {
- zval_dtor(writeobj);
- }
-
- ZVAL_NULL(writeobj);
-
- obj = CDNO_FETCH(readobj);
- VariantInit(&v);
-
- if (V_VT(&obj->v) == VT_DISPATCH) {
- if (!obj->have_default_bind && !com_get_default_binding(obj TSRMLS_CC)) {
- return FAILURE;
- }
-
- if (FAILURE == php_com_do_invoke_by_id(obj, obj->default_bind,
- DISPATCH_METHOD|DISPATCH_PROPERTYGET, &v, 0, NULL TSRMLS_CC)) {
- return FAILURE;
- }
- } else {
- VariantCopy(&v, &obj->v);
- }
-
- switch(type) {
- case IS_LONG:
- vt = VT_INT;
- break;
- case IS_DOUBLE:
- vt = VT_R8;
- break;
- case IS_BOOL:
- vt = VT_BOOL;
- break;
- case IS_STRING:
- vt = VT_BSTR;
- break;
- default:
- ;
- }
-
- if (vt != VT_EMPTY && vt != V_VT(&v)) {
- VariantChangeType(&v, &v, 0, vt);
- }
-
- php_com_zval_from_variant(writeobj, &v, obj->code_page TSRMLS_CC);
- VariantClear(&v);
- return SUCCESS;
-}
-
-static int com_object_count(zval *object, long *count TSRMLS_DC)
-{
- php_com_dotnet_object *obj;
- LONG ubound = 0, lbound = 0;
-
- obj = CDNO_FETCH(object);
-
- if (!V_ISARRAY(&obj->v)) {
- return FAILURE;
- }
-
- SafeArrayGetLBound(V_ARRAY(&obj->v), 1, &lbound);
- SafeArrayGetUBound(V_ARRAY(&obj->v), 1, &ubound);
-
- *count = ubound - lbound + 1;
-
- return SUCCESS;
-}
-
-zend_object_handlers php_com_object_handlers = {
- ZEND_OBJECTS_STORE_HANDLERS,
- com_property_read,
- com_property_write,
- com_read_dimension,
- com_write_dimension,
- NULL,
- NULL, //com_object_get,
- NULL, //com_object_set,
- com_property_exists,
- com_property_delete,
- com_dimension_exists,
- com_dimension_delete,
- com_properties_get,
- com_method_get,
- com_call_method,
- com_constructor_get,
- com_class_entry_get,
- com_class_name_get,
- com_objects_compare,
- com_object_cast,
- com_object_count
-};
-
-void php_com_object_enable_event_sink(php_com_dotnet_object *obj, int enable TSRMLS_DC)
-{
- if (obj->sink_dispatch) {
- IConnectionPointContainer *cont;
- IConnectionPoint *point;
-
- if (SUCCEEDED(IDispatch_QueryInterface(V_DISPATCH(&obj->v),
- &IID_IConnectionPointContainer, (void**)&cont))) {
-
- if (SUCCEEDED(IConnectionPointContainer_FindConnectionPoint(cont,
- &obj->sink_id, &point))) {
-
- if (enable) {
- IConnectionPoint_Advise(point, (IUnknown*)obj->sink_dispatch, &obj->sink_cookie);
- } else {
- IConnectionPoint_Unadvise(point, obj->sink_cookie);
- }
- IConnectionPoint_Release(point);
- }
- IConnectionPointContainer_Release(cont);
- }
- }
-}
-
-void php_com_object_free_storage(void *object TSRMLS_DC)
-{
- php_com_dotnet_object *obj = (php_com_dotnet_object*)object;
-
- if (obj->typeinfo) {
- ITypeInfo_Release(obj->typeinfo);
- obj->typeinfo = NULL;
- }
-
- if (obj->sink_dispatch) {
- php_com_object_enable_event_sink(obj, FALSE TSRMLS_CC);
- IDispatch_Release(obj->sink_dispatch);
- obj->sink_dispatch = NULL;
- }
-
- VariantClear(&obj->v);
-
- if (obj->method_cache) {
- FREE_HASHTABLE(obj->method_cache);
- }
- if (obj->id_of_name_cache) {
- FREE_HASHTABLE(obj->id_of_name_cache);
- }
- efree(obj);
-}
-
-void php_com_object_clone(void *object, void **clone_ptr TSRMLS_DC)
-{
- php_com_dotnet_object *cloneobj, *origobject;
-
- origobject = (php_com_dotnet_object*)object;
- cloneobj = (php_com_dotnet_object*)emalloc(sizeof(php_com_dotnet_object));
-
- memcpy(cloneobj, origobject, sizeof(*cloneobj));
-
- /* VariantCopy will perform VariantClear; we don't want to clobber
- * the IDispatch that we memcpy'd, so we init a new variant in the
- * clone structure */
- VariantInit(&cloneobj->v);
- /* We use the Indirection-following version of the API since we
- * want to clone as much as possible */
- VariantCopyInd(&cloneobj->v, &origobject->v);
-
- if (cloneobj->typeinfo) {
- ITypeInfo_AddRef(cloneobj->typeinfo);
- }
-
- *clone_ptr = cloneobj;
-}
-
-zend_object_value php_com_object_new(zend_class_entry *ce TSRMLS_DC)
-{
- php_com_dotnet_object *obj;
- zend_object_value retval;
-
- obj = emalloc(sizeof(*obj));
- memset(obj, 0, sizeof(*obj));
-
- VariantInit(&obj->v);
- obj->code_page = CP_ACP;
- obj->ce = ce;
-
- retval.handle = zend_objects_store_put(obj, NULL, php_com_object_free_storage, php_com_object_clone TSRMLS_CC);
- retval.handlers = &php_com_object_handlers;
-
- return retval;
-}
diff --git a/ext/com_dotnet/com_iterator.c b/ext/com_dotnet/com_iterator.c
deleted file mode 100644
index 4569023221..0000000000
--- a/ext/com_dotnet/com_iterator.c
+++ /dev/null
@@ -1,239 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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@thebrainroom.com> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "php.h"
-#include "php_ini.h"
-#include "ext/standard/info.h"
-#include "php_com_dotnet.h"
-#include "php_com_dotnet_internal.h"
-#include "Zend/zend_exceptions.h"
-
-struct php_com_iterator {
- zend_object_iterator iter;
- IEnumVARIANT *ev;
- ulong key;
- VARIANT v; /* cached element */
- int code_page;
- VARIANT safe_array;
- VARTYPE sa_type;
- LONG sa_max;
-};
-
-static void com_iter_dtor(zend_object_iterator *iter TSRMLS_DC)
-{
- struct php_com_iterator *I = (struct php_com_iterator*)iter->data;
-
- if (I->ev) {
- IEnumVARIANT_Release(I->ev);
- }
- VariantClear(&I->v);
- VariantClear(&I->safe_array);
- efree(I);
-}
-
-static int com_iter_valid(zend_object_iterator *iter TSRMLS_DC)
-{
- struct php_com_iterator *I = (struct php_com_iterator*)iter->data;
-
- if (I->key == (ulong)-1) {
- return FAILURE;
- }
- return SUCCESS;
-}
-
-static void com_iter_get_data(zend_object_iterator *iter, zval ***data TSRMLS_DC)
-{
- struct php_com_iterator *I = (struct php_com_iterator*)iter->data;
- zval **ptr_ptr;
- zval *ptr;
-
- /* sanity */
- if (I->key == (ulong)-1) {
- *data = NULL;
- return;
- }
-
- MAKE_STD_ZVAL(ptr);
- php_com_zval_from_variant(ptr, &I->v, I->code_page TSRMLS_CC);
- /* php_com_wrap_variant(ptr, &I->v, I->code_page TSRMLS_CC); */
- ptr_ptr = emalloc(sizeof(*ptr_ptr));
- *ptr_ptr = ptr;
- *data = ptr_ptr;
-
- return;
-}
-
-static int com_iter_get_key(zend_object_iterator *iter, char **str_key, uint *str_key_len,
- ulong *int_key TSRMLS_DC)
-{
- struct php_com_iterator *I = (struct php_com_iterator*)iter->data;
-
- if (I->key == (ulong)-1) {
- return HASH_KEY_NON_EXISTANT;
- }
- *int_key = I->key;
- return HASH_KEY_IS_LONG;
-}
-
-static int com_iter_move_forwards(zend_object_iterator *iter TSRMLS_DC)
-{
- struct php_com_iterator *I = (struct php_com_iterator*)iter->data;
- unsigned long n_fetched;
-
- /* release current cached element */
- VariantClear(&I->v);
-
- if (I->ev) {
- /* Get the next element */
- if (SUCCEEDED(IEnumVARIANT_Next(I->ev, 1, &I->v, &n_fetched)) && n_fetched > 0) {
- I->key++;
- return SUCCESS;
- } else {
- /* indicate that there are no more items */
- I->key = (ulong)-1;
- return FAILURE;
- }
- } else {
- /* safe array */
- if (I->key >= I->sa_max) {
- I->key = (ulong)-1;
- return FAILURE;
- }
- I->key++;
- if (php_com_safearray_get_elem(&I->safe_array, &I->v, (LONG)I->key TSRMLS_CC)) {
- return SUCCESS;
- } else {
- I->key = (ulong)-1;
- return FAILURE;
- }
- }
-}
-
-
-static zend_object_iterator_funcs com_iter_funcs = {
- com_iter_dtor,
- com_iter_valid,
- com_iter_get_data,
- com_iter_get_key,
- com_iter_move_forwards,
- NULL
-};
-
-zend_object_iterator *php_com_iter_get(zend_class_entry *ce, zval *object TSRMLS_DC)
-{
- php_com_dotnet_object *obj;
- struct php_com_iterator *I;
- IEnumVARIANT *iev = NULL;
- DISPPARAMS dp;
- VARIANT v;
- unsigned long n_fetched;
-
- obj = CDNO_FETCH(object);
-
- if (V_VT(&obj->v) != VT_DISPATCH && !V_ISARRAY(&obj->v)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "variant is not an object or array VT=%d", V_VT(&obj->v));
- return NULL;
- }
-
- memset(&dp, 0, sizeof(dp));
- VariantInit(&v);
-
- I = (struct php_com_iterator*)ecalloc(1, sizeof(*I));
- I->iter.funcs = &com_iter_funcs;
- I->iter.data = I;
- I->code_page = obj->code_page;
- VariantInit(&I->safe_array);
- VariantInit(&I->v);
-
- if (V_ISARRAY(&obj->v)) {
- LONG bound;
- UINT dims;
-
- dims = SafeArrayGetDim(V_ARRAY(&obj->v));
-
- if (dims != 1) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING,
- "Can only handle single dimension variant arrays (this array has %d)", dims);
- goto fail;
- }
-
- /* same semantics as foreach on a PHP array;
- * make a copy and enumerate that copy */
- VariantCopy(&I->safe_array, &obj->v);
-
- /* determine the key value for the array */
- SafeArrayGetLBound(V_ARRAY(&I->safe_array), 1, &bound);
- SafeArrayGetUBound(V_ARRAY(&I->safe_array), 1, &I->sa_max);
-
- /* pre-fetch the element */
- if (php_com_safearray_get_elem(&I->safe_array, &I->v, bound TSRMLS_CC)) {
- I->key = bound;
- } else {
- I->key = (ulong)-1;
- }
-
- } else {
- /* can we enumerate it? */
- if (FAILED(IDispatch_Invoke(V_DISPATCH(&obj->v), DISPID_NEWENUM,
- &IID_NULL, LOCALE_SYSTEM_DEFAULT, DISPATCH_METHOD|DISPATCH_PROPERTYGET,
- &dp, &v, NULL, NULL))) {
- goto fail;
- }
-
- /* get something useful out of it */
- if (V_VT(&v) == VT_UNKNOWN) {
- IUnknown_QueryInterface(V_UNKNOWN(&v), &IID_IEnumVARIANT, (void**)&iev);
- } else if (V_VT(&v) == VT_DISPATCH) {
- IDispatch_QueryInterface(V_DISPATCH(&v), &IID_IEnumVARIANT, (void**)&iev);
- }
-
- VariantClear(&v);
-
- if (iev == NULL) {
- goto fail;
- }
-
- I->ev = iev;
-
- /* Get the first element now */
- if (SUCCEEDED(IEnumVARIANT_Next(I->ev, 1, &I->v, &n_fetched)) && n_fetched > 0) {
- /* indicate that we have element 0 */
- I->key = 0;
- } else {
- /* indicate that there are no more items */
- I->key = (ulong)-1;
- }
- }
-
- return &I->iter;
-
-fail:
- if (I) {
- VariantClear(&I->safe_array);
- VariantClear(&I->v);
- free(I);
- }
- return NULL;
-}
-
diff --git a/ext/com_dotnet/com_misc.c b/ext/com_dotnet/com_misc.c
deleted file mode 100644
index f262a3751a..0000000000
--- a/ext/com_dotnet/com_misc.c
+++ /dev/null
@@ -1,141 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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@thebrainroom.com> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "php.h"
-#include "php_ini.h"
-#include "ext/standard/info.h"
-#include "php_com_dotnet.h"
-#include "php_com_dotnet_internal.h"
-#include "Zend/zend_exceptions.h"
-
-void php_com_throw_exception(HRESULT code, char *message TSRMLS_DC)
-{
- int free_msg = 0;
- if (message == NULL) {
- message = php_win_err(code);
- free_msg = 1;
- }
- zend_throw_exception(php_com_exception_class_entry, message, (long)code TSRMLS_CC);
- if (free_msg) {
- LocalFree(message);
- }
-}
-
-PHPAPI void php_com_wrap_dispatch(zval *z, IDispatch *disp,
- int codepage TSRMLS_DC)
-{
- php_com_dotnet_object *obj;
-
- obj = emalloc(sizeof(*obj));
- memset(obj, 0, sizeof(*obj));
- obj->code_page = codepage;
- obj->ce = php_com_variant_class_entry;
-
- VariantInit(&obj->v);
- V_VT(&obj->v) = VT_DISPATCH;
- V_DISPATCH(&obj->v) = disp;
-
- IDispatch_AddRef(V_DISPATCH(&obj->v));
- IDispatch_GetTypeInfo(V_DISPATCH(&obj->v), 0, LANG_NEUTRAL, &obj->typeinfo);
-
- Z_TYPE_P(z) = IS_OBJECT;
- z->value.obj.handle = zend_objects_store_put(obj, NULL, php_com_object_free_storage, php_com_object_clone TSRMLS_CC);
- z->value.obj.handlers = &php_com_object_handlers;
-}
-
-PHPAPI void php_com_wrap_variant(zval *z, VARIANT *v,
- int codepage TSRMLS_DC)
-{
- php_com_dotnet_object *obj;
-
- obj = emalloc(sizeof(*obj));
- memset(obj, 0, sizeof(*obj));
- obj->code_page = codepage;
- obj->ce = php_com_variant_class_entry;
-
- VariantInit(&obj->v);
- VariantCopyInd(&obj->v, v);
-
- if (V_VT(&obj->v) == VT_DISPATCH) {
- IDispatch_GetTypeInfo(V_DISPATCH(&obj->v), 0, LANG_NEUTRAL, &obj->typeinfo);
- }
-
- Z_TYPE_P(z) = IS_OBJECT;
-
- z->value.obj.handle = zend_objects_store_put(obj, NULL, php_com_object_free_storage, php_com_object_clone TSRMLS_CC);
- z->value.obj.handlers = &php_com_object_handlers;
-}
-
-/* this is a convenience function for fetching a particular
- * element from a (possibly multi-dimensional) safe array */
-PHPAPI int php_com_safearray_get_elem(VARIANT *array, VARIANT *dest, LONG dim1 TSRMLS_DC)
-{
- UINT dims;
- LONG lbound, ubound;
- LONG indices[1];
- VARTYPE vt;
-
- if (!V_ISARRAY(array)) {
- return 0;
- }
-
- dims = SafeArrayGetDim(V_ARRAY(array));
-
- if (dims != 1) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING,
- "Can only handle single dimension variant arrays (this array has %d)", dims);
- return 0;
- }
-
- if (FAILED(SafeArrayGetVartype(V_ARRAY(array), &vt)) || vt == VT_EMPTY) {
- vt = V_VT(array) & ~VT_ARRAY;
- }
-
- /* determine the bounds */
- SafeArrayGetLBound(V_ARRAY(array), 1, &lbound);
- SafeArrayGetUBound(V_ARRAY(array), 1, &ubound);
-
- /* check bounds */
- if (dim1 < lbound || dim1 > ubound) {
- php_com_throw_exception(DISP_E_BADINDEX, "index out of bounds" TSRMLS_CC);
- return 0;
- }
-
- /* now fetch that element */
- VariantInit(dest);
-
- indices[0] = dim1;
-
- if (vt == VT_VARIANT) {
- SafeArrayGetElement(V_ARRAY(array), indices, dest);
- } else {
- V_VT(dest) = vt;
- /* store the value into "lVal" member of the variant.
- * This works because it is a union; since we know the variant
- * type, we end up with a working variant */
- SafeArrayGetElement(V_ARRAY(array), indices, &dest->lVal);
- }
-
- return 1;
-}
diff --git a/ext/com_dotnet/com_olechar.c b/ext/com_dotnet/com_olechar.c
deleted file mode 100644
index a85c5cdc63..0000000000
--- a/ext/com_dotnet/com_olechar.c
+++ /dev/null
@@ -1,103 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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@thebrainroom.com> |
- | Harald Radi <h.radi@nme.at> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "php.h"
-#include "php_ini.h"
-#include "ext/standard/info.h"
-#include "php_com_dotnet.h"
-#include "php_com_dotnet_internal.h"
-
-
-PHPAPI OLECHAR *php_com_string_to_olestring(char *string, uint string_len, int codepage TSRMLS_DC)
-{
- OLECHAR *olestring = NULL;
- DWORD flags = codepage == CP_UTF8 ? 0 : MB_PRECOMPOSED | MB_ERR_INVALID_CHARS;
- BOOL ok;
-
- if (string_len == -1) {
- /* determine required length for the buffer (includes NUL terminator) */
- string_len = MultiByteToWideChar(codepage, flags, string, -1, NULL, 0);
- } else {
- /* allow room for NUL terminator */
- string_len++;
- }
-
- if (strlen > 0) {
- olestring = (OLECHAR*)safe_emalloc(sizeof(OLECHAR), string_len, 0);
- ok = MultiByteToWideChar(codepage, flags, string, string_len, olestring, string_len);
- } else {
- ok = FALSE;
- olestring = (OLECHAR*)emalloc(sizeof(OLECHAR));
- *olestring = 0;
- }
-
- if (!ok) {
- char *msg = php_win_err(GetLastError());
-
- php_error_docref(NULL TSRMLS_CC, E_WARNING,
- "Could not convert string to unicode: `%s'", msg);
-
- LocalFree(msg);
- }
-
- return olestring;
-}
-
-PHPAPI char *php_com_olestring_to_string(OLECHAR *olestring, uint *string_len, int codepage TSRMLS_DC)
-{
- char *string;
- uint length = 0;
- BOOL ok;
- LONG err;
-
- length = WideCharToMultiByte(codepage, 0, olestring, -1, NULL, 0, NULL, NULL);
-
- if (length) {
- string = (char*)safe_emalloc(sizeof(char), length, 0);
- length = WideCharToMultiByte(codepage, 0, olestring, -1, string, length, NULL, NULL);
- ok = length > 0;
- } else {
- err = GetLastError();
- string = (char*)emalloc(sizeof(char));
- *string = '\0';
- ok = FALSE;
- length = 0;
- }
-
- if (!ok) {
- char *msg = php_win_err(err);
-
- php_error_docref(NULL TSRMLS_CC, E_WARNING,
- "Could not convert string from unicode: `%s'", msg);
-
- LocalFree(msg);
- }
-
- if (string_len) {
- *string_len = length-1;
- }
-
- return string;
-}
diff --git a/ext/com_dotnet/com_persist.c b/ext/com_dotnet/com_persist.c
deleted file mode 100755
index 70f3d89ad1..0000000000
--- a/ext/com_dotnet/com_persist.c
+++ /dev/null
@@ -1,787 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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@thebrainroom.com> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-/* Infrastructure for working with persistent COM objects.
- * Implements: IStream* wrapper for PHP streams.
- * TODO: Magic __wakeup and __sleep handlers for serialization
- * (can wait till 5.1) */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "php.h"
-#include "php_ini.h"
-#include "ext/standard/info.h"
-#include "php_com_dotnet.h"
-#include "php_com_dotnet_internal.h"
-#include "Zend/zend_exceptions.h"
-
-/* {{{ expose php_stream as a COM IStream */
-
-typedef struct {
- CONST_VTBL struct IStreamVtbl *lpVtbl;
- DWORD engine_thread;
- LONG refcount;
- php_stream *stream;
- int id;
-} php_istream;
-
-static int le_istream;
-static void istream_destructor(php_istream *stm);
-
-static void istream_dtor(zend_rsrc_list_entry *rsrc TSRMLS_DC)
-{
- php_istream *stm = (php_istream *)rsrc->ptr;
- istream_destructor(stm);
-}
-
-#ifdef ZTS
-# define TSRMLS_FIXED() TSRMLS_FETCH();
-#else
-# define TSRMLS_FIXED()
-#endif
-
-#define FETCH_STM() \
- TSRMLS_FIXED() \
- php_istream *stm = (php_istream*)This; \
- if (GetCurrentThreadId() != stm->engine_thread) \
- return RPC_E_WRONG_THREAD;
-
-static HRESULT STDMETHODCALLTYPE stm_queryinterface(
- IStream *This,
- /* [in] */ REFIID riid,
- /* [iid_is][out] */ void **ppvObject)
-{
- FETCH_STM();
-
- if (IsEqualGUID(&IID_IUnknown, riid) ||
- IsEqualGUID(&IID_IStream, riid)) {
- *ppvObject = This;
- InterlockedIncrement(&stm->refcount);
- return S_OK;
- }
-
- *ppvObject = NULL;
- return E_NOINTERFACE;
-}
-
-static ULONG STDMETHODCALLTYPE stm_addref(IStream *This)
-{
- FETCH_STM();
-
- return InterlockedIncrement(&stm->refcount);
-}
-
-static ULONG STDMETHODCALLTYPE stm_release(IStream *This)
-{
- ULONG ret;
- FETCH_STM();
-
- ret = InterlockedDecrement(&stm->refcount);
- if (ret == 0) {
- /* destroy it */
- if (stm->id)
- zend_list_delete(stm->id);
- }
- return ret;
-}
-
-static HRESULT STDMETHODCALLTYPE stm_read(IStream *This, void *pv, ULONG cb, ULONG *pcbRead)
-{
- int nread;
- FETCH_STM();
-
- nread = php_stream_read(stm->stream, pv, cb);
-
- if (pcbRead) {
- *pcbRead = nread > 0 ? nread : 0;
- }
- if (nread > 0) {
- return S_OK;
- }
- return S_FALSE;
-}
-
-static HRESULT STDMETHODCALLTYPE stm_write(IStream *This, void const *pv, ULONG cb, ULONG *pcbWritten)
-{
- int nwrote;
- FETCH_STM();
-
- nwrote = php_stream_write(stm->stream, pv, cb);
-
- if (pcbWritten) {
- *pcbWritten = nwrote > 0 ? nwrote : 0;
- }
- if (nwrote > 0) {
- return S_OK;
- }
- return S_FALSE;
-}
-
-static HRESULT STDMETHODCALLTYPE stm_seek(IStream *This, LARGE_INTEGER dlibMove,
- DWORD dwOrigin, ULARGE_INTEGER *plibNewPosition)
-{
- off_t offset;
- int whence;
- int ret;
- FETCH_STM();
-
- switch (dwOrigin) {
- case STREAM_SEEK_SET: whence = SEEK_SET; break;
- case STREAM_SEEK_CUR: whence = SEEK_CUR; break;
- case STREAM_SEEK_END: whence = SEEK_END; break;
- default:
- return STG_E_INVALIDFUNCTION;
- }
-
- if (dlibMove.HighPart) {
- /* we don't support 64-bit offsets */
- return STG_E_INVALIDFUNCTION;
- }
-
- offset = dlibMove.QuadPart;
-
- ret = php_stream_seek(stm->stream, offset, whence);
-
- if (plibNewPosition) {
- plibNewPosition->QuadPart = (ULONGLONG)(ret >= 0 ? ret : 0);
- }
-
- return ret >= 0 ? S_OK : STG_E_INVALIDFUNCTION;
-}
-
-static HRESULT STDMETHODCALLTYPE stm_set_size(IStream *This, ULARGE_INTEGER libNewSize)
-{
- FETCH_STM();
-
- if (libNewSize.HighPart) {
- return STG_E_INVALIDFUNCTION;
- }
-
- if (php_stream_truncate_supported(stm->stream)) {
- int ret = php_stream_truncate_set_size(stm->stream, (size_t)libNewSize.QuadPart);
-
- if (ret == 0) {
- return S_OK;
- }
- }
-
- return STG_E_INVALIDFUNCTION;
-}
-
-static HRESULT STDMETHODCALLTYPE stm_copy_to(IStream *This, IStream *pstm, ULARGE_INTEGER cb,
- ULARGE_INTEGER *pcbRead, ULARGE_INTEGER *pcbWritten)
-{
- FETCH_STM();
-
- return E_NOTIMPL;
-}
-
-static HRESULT STDMETHODCALLTYPE stm_commit(IStream *This, DWORD grfCommitFlags)
-{
- FETCH_STM();
-
- php_stream_flush(stm->stream);
-
- return S_OK;
-}
-
-static HRESULT STDMETHODCALLTYPE stm_revert(IStream *This)
-{
- /* NOP */
- return S_OK;
-}
-
-static HRESULT STDMETHODCALLTYPE stm_lock_region(IStream *This,
- ULARGE_INTEGER libOffset, ULARGE_INTEGER cb, DWORD lockType)
-{
- return STG_E_INVALIDFUNCTION;
-}
-
-static HRESULT STDMETHODCALLTYPE stm_unlock_region(IStream *This,
- ULARGE_INTEGER libOffset, ULARGE_INTEGER cb, DWORD lockType)
-{
- return STG_E_INVALIDFUNCTION;
-}
-
-static HRESULT STDMETHODCALLTYPE stm_stat(IStream *This,
- STATSTG *pstatstg, DWORD grfStatFlag)
-{
- return STG_E_INVALIDFUNCTION;
-}
-
-static HRESULT STDMETHODCALLTYPE stm_clone(IStream *This, IStream **ppstm)
-{
- return STG_E_INVALIDFUNCTION;
-}
-
-static struct IStreamVtbl php_istream_vtbl = {
- stm_queryinterface,
- stm_addref,
- stm_release,
- stm_read,
- stm_write,
- stm_seek,
- stm_set_size,
- stm_copy_to,
- stm_commit,
- stm_revert,
- stm_lock_region,
- stm_unlock_region,
- stm_stat,
- stm_clone
-};
-
-static void istream_destructor(php_istream *stm)
-{
- TSRMLS_FETCH();
-
- if (stm->id) {
- int id = stm->id;
- stm->id = 0;
- zend_list_delete(id);
- return;
- }
-
- if (stm->refcount > 0) {
- CoDisconnectObject((IUnknown*)stm, 0);
- }
-
- zend_list_delete(stm->stream->rsrc_id);
-
- CoTaskMemFree(stm);
-}
-/* }}} */
-
-PHPAPI IStream *php_com_wrapper_export_stream(php_stream *stream TSRMLS_DC)
-{
- php_istream *stm = (php_istream*)CoTaskMemAlloc(sizeof(*stm));
-
- if (stm == NULL)
- return NULL;
-
- memset(stm, 0, sizeof(*stm));
- stm->engine_thread = GetCurrentThreadId();
- stm->lpVtbl = &php_istream_vtbl;
- stm->refcount = 1;
- stm->stream = stream;
-
- zend_list_addref(stream->rsrc_id);
- stm->id = zend_list_insert(stm, le_istream);
-
- return (IStream*)stm;
-}
-
-#define CPH_ME(fname, arginfo) PHP_ME(com_persist, fname, arginfo, ZEND_ACC_PUBLIC)
-#define CPH_SME(fname, arginfo) PHP_ME(com_persist, fname, arginfo, ZEND_ACC_ALLOW_STATIC|ZEND_ACC_PUBLIC)
-#define CPH_METHOD(fname) static PHP_METHOD(com_persist, fname)
-
-#define CPH_FETCH() php_com_persist_helper *helper = (php_com_persist_helper*)zend_object_store_get_object(getThis() TSRMLS_CC);
-
-#define CPH_NO_OBJ() if (helper->unk == NULL) { php_com_throw_exception(E_INVALIDARG, "No COM object is associated with this helper instance" TSRMLS_CC); return; }
-
-typedef struct {
- zend_object std;
- long codepage;
- IUnknown *unk;
- IPersistStream *ips;
- IPersistStreamInit *ipsi;
- IPersistFile *ipf;
-} php_com_persist_helper;
-
-static zend_object_handlers helper_handlers;
-static zend_class_entry *helper_ce;
-
-static inline HRESULT get_persist_stream(php_com_persist_helper *helper)
-{
- if (!helper->ips && helper->unk) {
- return IUnknown_QueryInterface(helper->unk, &IID_IPersistStream, &helper->ips);
- }
- return helper->ips ? S_OK : E_NOTIMPL;
-}
-
-static inline HRESULT get_persist_stream_init(php_com_persist_helper *helper)
-{
- if (!helper->ipsi && helper->unk) {
- return IUnknown_QueryInterface(helper->unk, &IID_IPersistStreamInit, &helper->ipsi);
- }
- return helper->ipsi ? S_OK : E_NOTIMPL;
-}
-
-static inline HRESULT get_persist_file(php_com_persist_helper *helper)
-{
- if (!helper->ipf && helper->unk) {
- return IUnknown_QueryInterface(helper->unk, &IID_IPersistFile, &helper->ipf);
- }
- return helper->ipf ? S_OK : E_NOTIMPL;
-}
-
-
-/* {{{ proto string COMPersistHelper::GetCurFile()
- Determines the filename into which an object will be saved, or false if none is set, via IPersistFile::GetCurFile */
-CPH_METHOD(GetCurFileName)
-{
- HRESULT res;
- OLECHAR *olename = NULL;
- CPH_FETCH();
-
- CPH_NO_OBJ();
-
- res = get_persist_file(helper);
- if (helper->ipf) {
- res = IPersistFile_GetCurFile(helper->ipf, &olename);
-
- if (res == S_OK) {
- Z_TYPE_P(return_value) = IS_STRING;
- Z_STRVAL_P(return_value) = php_com_olestring_to_string(olename,
- &Z_STRLEN_P(return_value), helper->codepage TSRMLS_CC);
- CoTaskMemFree(olename);
- return;
- } else if (res == S_FALSE) {
- CoTaskMemFree(olename);
- RETURN_FALSE;
- }
- php_com_throw_exception(res, NULL TSRMLS_CC);
- } else {
- php_com_throw_exception(res, NULL TSRMLS_CC);
- }
-}
-/* }}} */
-
-
-/* {{{ proto bool COMPersistHelper::SaveToFile(string filename [, bool remember])
- Persist object data to file, via IPersistFile::Save */
-CPH_METHOD(SaveToFile)
-{
- HRESULT res;
- char *filename, *fullpath = NULL;
- int filename_len;
- zend_bool remember = TRUE;
- OLECHAR *olefilename = NULL;
- CPH_FETCH();
-
- CPH_NO_OBJ();
-
- res = get_persist_file(helper);
- if (helper->ipf) {
- if (FAILURE == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s!|b",
- &filename, &filename_len, &remember)) {
- php_com_throw_exception(E_INVALIDARG, "Invalid arguments" TSRMLS_CC);
- return;
- }
-
- if (filename) {
- fullpath = expand_filepath(filename, NULL TSRMLS_CC);
-
- if (PG(safe_mode) && (!php_checkuid(fullpath, NULL, CHECKUID_CHECK_FILE_AND_DIR))) {
- RETURN_FALSE;
- }
-
- if (php_check_open_basedir(fullpath TSRMLS_CC)) {
- RETURN_FALSE;
- }
-
- olefilename = php_com_string_to_olestring(filename, strlen(fullpath), helper->codepage TSRMLS_CC);
- efree(fullpath);
- }
- res = IPersistFile_Save(helper->ipf, olefilename, remember);
- if (SUCCEEDED(res)) {
- if (!olefilename) {
- res = IPersistFile_GetCurFile(helper->ipf, &olefilename);
- if (S_OK == res) {
- IPersistFile_SaveCompleted(helper->ipf, olefilename);
- CoTaskMemFree(olefilename);
- olefilename = NULL;
- }
- } else if (remember) {
- IPersistFile_SaveCompleted(helper->ipf, olefilename);
- }
- }
-
- if (olefilename) {
- efree(olefilename);
- }
-
- if (FAILED(res)) {
- php_com_throw_exception(res, NULL TSRMLS_CC);
- }
-
- } else {
- php_com_throw_exception(res, NULL TSRMLS_CC);
- }
-}
-/* }}} */
-
-/* {{{ proto bool COMPersistHelper::LoadFromFile(string filename [, int flags])
- Load object data from file, via IPersistFile::Load */
-CPH_METHOD(LoadFromFile)
-{
- HRESULT res;
- char *filename, *fullpath;
- int filename_len;
- long flags = 0;
- OLECHAR *olefilename;
- CPH_FETCH();
-
- CPH_NO_OBJ();
-
- res = get_persist_file(helper);
- if (helper->ipf) {
-
- if (FAILURE == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|l",
- &filename, &filename_len, &flags)) {
- php_com_throw_exception(E_INVALIDARG, "Invalid arguments" TSRMLS_CC);
- return;
- }
-
- fullpath = expand_filepath(filename, NULL TSRMLS_CC);
-
- if (PG(safe_mode) && (!php_checkuid(fullpath, NULL, CHECKUID_CHECK_FILE_AND_DIR))) {
- RETURN_FALSE;
- }
-
- if (php_check_open_basedir(fullpath TSRMLS_CC)) {
- RETURN_FALSE;
- }
-
- olefilename = php_com_string_to_olestring(fullpath, strlen(fullpath), helper->codepage TSRMLS_CC);
- efree(fullpath);
-
- res = IPersistFile_Load(helper->ipf, olefilename, flags);
- efree(olefilename);
-
- if (FAILED(res)) {
- php_com_throw_exception(res, NULL TSRMLS_CC);
- }
-
- } else {
- php_com_throw_exception(res, NULL TSRMLS_CC);
- }
-}
-/* }}} */
-
-/* {{{ proto int COMPersistHelper::GetMaxStreamSize()
- Gets maximum stream size required to store the object data, via IPersistStream::GetSizeMax (or IPersistStreamInit::GetSizeMax) */
-CPH_METHOD(GetMaxStreamSize)
-{
- HRESULT res;
- ULARGE_INTEGER size;
- CPH_FETCH();
-
- CPH_NO_OBJ();
-
- res = get_persist_stream_init(helper);
- if (helper->ipsi) {
- res = IPersistStreamInit_GetSizeMax(helper->ipsi, &size);
- } else {
- res = get_persist_stream(helper);
- if (helper->ips) {
- res = IPersistStream_GetSizeMax(helper->ips, &size);
- } else {
- php_com_throw_exception(res, NULL TSRMLS_CC);
- return;
- }
- }
-
- if (res != S_OK) {
- php_com_throw_exception(res, NULL TSRMLS_CC);
- } else {
- /* TODO: handle 64 bit properly */
- RETURN_LONG((LONG)size.QuadPart);
- }
-}
-/* }}} */
-
-/* {{{ proto int COMPersistHelper::InitNew()
- Initializes the object to a default state, via IPersistStreamInit::InitNew */
-CPH_METHOD(InitNew)
-{
- HRESULT res;
- CPH_FETCH();
-
- CPH_NO_OBJ();
-
- res = get_persist_stream_init(helper);
- if (helper->ipsi) {
- res = IPersistStreamInit_InitNew(helper->ipsi);
-
- if (res != S_OK) {
- php_com_throw_exception(res, NULL TSRMLS_CC);
- } else {
- RETURN_TRUE;
- }
- } else {
- php_com_throw_exception(res, NULL TSRMLS_CC);
- }
-}
-/* }}} */
-
-/* {{{ proto mixed COMPersistHelper::LoadFromStream(resource stream)
- Initializes an object from the stream where it was previously saved, via IPersistStream::Load or OleLoadFromStream */
-CPH_METHOD(LoadFromStream)
-{
- zval *zstm;
- php_stream *stream;
- IStream *stm = NULL;
- HRESULT res;
- CPH_FETCH();
-
- if (FAILURE == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &zstm)) {
- php_com_throw_exception(E_INVALIDARG, "invalid arguments" TSRMLS_CC);
- return;
- }
-
- php_stream_from_zval_no_verify(stream, &zstm);
-
- if (stream == NULL) {
- php_com_throw_exception(E_INVALIDARG, "expected a stream" TSRMLS_CC);
- return;
- }
-
- stm = php_com_wrapper_export_stream(stream TSRMLS_CC);
- if (stm == NULL) {
- php_com_throw_exception(E_UNEXPECTED, "failed to wrap stream" TSRMLS_CC);
- return;
- }
-
- res = S_OK;
- RETVAL_TRUE;
-
- if (helper->unk == NULL) {
- IDispatch *disp = NULL;
-
- /* we need to create an object and load using OleLoadFromStream */
- res = OleLoadFromStream(stm, &IID_IDispatch, &disp);
-
- if (SUCCEEDED(res)) {
- php_com_wrap_dispatch(return_value, disp, COMG(code_page) TSRMLS_CC);
- }
- } else {
- res = get_persist_stream_init(helper);
- if (helper->ipsi) {
- res = IPersistStreamInit_Load(helper->ipsi, stm);
- } else {
- res = get_persist_stream(helper);
- if (helper->ips) {
- res = IPersistStreamInit_Load(helper->ipsi, stm);
- }
- }
- }
- IStream_Release(stm);
-
- if (FAILED(res)) {
- php_com_throw_exception(res, NULL TSRMLS_CC);
- RETURN_NULL();
- }
-}
-/* }}} */
-
-/* {{{ proto int COMPersistHelper::SaveToStream(resource stream)
- Saves the object to a stream, via IPersistStream::Save */
-CPH_METHOD(SaveToStream)
-{
- zval *zstm;
- php_stream *stream;
- IStream *stm = NULL;
- HRESULT res;
- CPH_FETCH();
-
- CPH_NO_OBJ();
-
- if (FAILURE == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &zstm)) {
- php_com_throw_exception(E_INVALIDARG, "invalid arguments" TSRMLS_CC);
- return;
- }
-
- php_stream_from_zval_no_verify(stream, &zstm);
-
- if (stream == NULL) {
- php_com_throw_exception(E_INVALIDARG, "expected a stream" TSRMLS_CC);
- return;
- }
-
- stm = php_com_wrapper_export_stream(stream TSRMLS_CC);
- if (stm == NULL) {
- php_com_throw_exception(E_UNEXPECTED, "failed to wrap stream" TSRMLS_CC);
- return;
- }
-
- res = get_persist_stream_init(helper);
- if (helper->ipsi) {
- res = IPersistStreamInit_Save(helper->ipsi, stm, TRUE);
- } else {
- res = get_persist_stream(helper);
- if (helper->ips) {
- res = IPersistStream_Save(helper->ips, stm, TRUE);
- }
- }
-
- IStream_Release(stm);
-
- if (FAILED(res)) {
- php_com_throw_exception(res, NULL TSRMLS_CC);
- return;
- }
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto int COMPersistHelper::__construct([object com_object])
- Creates a persistence helper object, usually associated with a com_object */
-CPH_METHOD(__construct)
-{
- php_com_dotnet_object *obj = NULL;
- zval *zobj = NULL;
- CPH_FETCH();
-
- if (FAILURE == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|O!",
- &zobj, php_com_variant_class_entry)) {
- php_com_throw_exception(E_INVALIDARG, "invalid arguments" TSRMLS_CC);
- return;
- }
-
- if (!zobj) {
- return;
- }
-
- obj = CDNO_FETCH(zobj);
-
- if (V_VT(&obj->v) != VT_DISPATCH || V_DISPATCH(&obj->v) == NULL) {
- php_com_throw_exception(E_INVALIDARG, "parameter must represent an IDispatch COM object" TSRMLS_CC);
- return;
- }
-
- /* it is always safe to cast an interface to IUnknown */
- helper->unk = (IUnknown*)V_DISPATCH(&obj->v);
- IUnknown_AddRef(helper->unk);
- helper->codepage = obj->code_page;
-}
-/* }}} */
-
-
-
-
-static zend_function_entry com_persist_helper_methods[] = {
- CPH_ME(__construct, NULL)
- CPH_ME(GetCurFileName, NULL)
- CPH_ME(SaveToFile, NULL)
- CPH_ME(LoadFromFile, NULL)
- CPH_ME(GetMaxStreamSize, NULL)
- CPH_ME(InitNew, NULL)
- CPH_ME(LoadFromStream, NULL)
- CPH_ME(SaveToStream, NULL)
- {NULL, NULL, NULL}
-};
-
-static void helper_free_storage(void *obj TSRMLS_DC)
-{
- php_com_persist_helper *object = (php_com_persist_helper*)obj;
-
- if (object->ipf) {
- IPersistFile_Release(object->ipf);
- }
- if (object->ips) {
- IPersistStream_Release(object->ips);
- }
- if (object->ipsi) {
- IPersistStreamInit_Release(object->ipsi);
- }
- if (object->unk) {
- IUnknown_Release(object->unk);
- }
- zend_hash_destroy(object->std.properties);
- FREE_HASHTABLE(object->std.properties);
- efree(object);
-}
-
-
-static void helper_clone(void *obj, void **clone_ptr TSRMLS_DC)
-{
- php_com_persist_helper *clone, *object = (php_com_persist_helper*)obj;
- zval *tmp;
-
- clone = emalloc(sizeof(*object));
- memcpy(clone, object, sizeof(*object));
- *clone_ptr = clone;
-
- ALLOC_HASHTABLE(clone->std.properties);
- zend_hash_init(clone->std.properties, 0, NULL, ZVAL_PTR_DTOR, 0);
-
- if (clone->ipf) {
- IPersistFile_AddRef(clone->ipf);
- }
- if (clone->ips) {
- IPersistStream_AddRef(clone->ips);
- }
- if (clone->ipsi) {
- IPersistStreamInit_AddRef(clone->ipsi);
- }
- if (clone->unk) {
- IUnknown_AddRef(clone->unk);
- }
-}
-
-static zend_object_value helper_new(zend_class_entry *ce TSRMLS_DC)
-{
- php_com_persist_helper *helper;
- zend_object_value retval;
- zval *tmp;
-
- helper = emalloc(sizeof(*helper));
- memset(helper, 0, sizeof(*helper));
-
- ALLOC_HASHTABLE(helper->std.properties);
- zend_hash_init(helper->std.properties, 0, NULL, ZVAL_PTR_DTOR, 0);
- helper->std.ce = helper_ce;
-
- retval.handle = zend_objects_store_put(helper, NULL, helper_free_storage, helper_clone TSRMLS_CC);
- retval.handlers = &helper_handlers;
-
- return retval;
-}
-
-int php_com_persist_minit(INIT_FUNC_ARGS)
-{
- zend_class_entry ce;
-
- memcpy(&helper_handlers, zend_get_std_object_handlers(), sizeof(helper_handlers));
- helper_handlers.clone_obj = NULL;
-
- INIT_CLASS_ENTRY(ce, "COMPersistHelper", com_persist_helper_methods);
- ce.create_object = helper_new;
- helper_ce = zend_register_internal_class(&ce TSRMLS_CC);
- helper_ce->ce_flags |= ZEND_ACC_FINAL;
-
- le_istream = zend_register_list_destructors_ex(istream_dtor,
- NULL, "com_dotnet_istream_wrapper", module_number);
-
- return SUCCESS;
-}
-
-/*
- * 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/com_dotnet/com_saproxy.c b/ext/com_dotnet/com_saproxy.c
deleted file mode 100644
index e13a9cf07f..0000000000
--- a/ext/com_dotnet/com_saproxy.c
+++ /dev/null
@@ -1,584 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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@thebrainroom.com> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-/* This module implements a SafeArray proxy which is used internally
- * by the engine when resolving multi-dimensional array accesses on
- * SafeArray types.
- * In addition, the proxy is now able to handle properties of COM objects
- * that smell like PHP arrays.
- * */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "php.h"
-#include "php_ini.h"
-#include "ext/standard/info.h"
-#include "php_com_dotnet.h"
-#include "php_com_dotnet_internal.h"
-#include "Zend/zend_exceptions.h"
-
-typedef struct {
- /* the object we a proxying for; we hold a refcount to it */
- zval *zobj;
- php_com_dotnet_object *obj;
-
- /* how many dimensions we are indirecting to get into this element */
- LONG dimensions;
-
- /* this is an array whose size_is(dimensions) */
- zval **indices;
-
-} php_com_saproxy;
-
-typedef struct {
- zend_object_iterator iter;
- zval *proxy_obj;
- php_com_saproxy *proxy;
- LONG key;
- LONG imin, imax;
- LONG *indices;
-} php_com_saproxy_iter;
-
-#define SA_FETCH(zv) (php_com_saproxy*)zend_object_store_get_object(zv TSRMLS_CC)
-
-static inline void clone_indices(php_com_saproxy *dest, php_com_saproxy *src, int ndims)
-{
- int i;
-
- for (i = 0; i < ndims; i++) {
- MAKE_STD_ZVAL(dest->indices[i]);
- *dest->indices[i] = *src->indices[i];
- zval_copy_ctor(dest->indices[i]);
- }
-}
-
-static zval *saproxy_property_read(zval *object, zval *member, int type TSRMLS_DC)
-{
- zval *return_value;
-
- MAKE_STD_ZVAL(return_value);
- ZVAL_NULL(return_value);
-
- php_com_throw_exception(E_INVALIDARG, "safearray has no properties" TSRMLS_CC);
-
- return return_value;
-}
-
-static void saproxy_property_write(zval *object, zval *member, zval *value TSRMLS_DC)
-{
- php_com_throw_exception(E_INVALIDARG, "safearray has no properties" TSRMLS_CC);
-}
-
-static zval *saproxy_read_dimension(zval *object, zval *offset, int type TSRMLS_DC)
-{
- php_com_saproxy *proxy = SA_FETCH(object);
- zval *return_value;
- UINT dims;
- SAFEARRAY *sa;
- LONG ubound, lbound;
- int i;
- HRESULT res;
-
- MAKE_STD_ZVAL(return_value);
- ZVAL_NULL(return_value);
-
- if (V_VT(&proxy->obj->v) == VT_DISPATCH) {
- VARIANT v;
- zval **args;
-
- /* prop-get using first dimension as the property name,
- * all subsequent dimensions and the offset as parameters */
-
- args = safe_emalloc(proxy->dimensions + 1, sizeof(zval *), 0);
-
- for (i = 1; i < proxy->dimensions; i++) {
- args[i-1] = proxy->indices[i];
- }
- args[i-1] = offset;
-
- convert_to_string(proxy->indices[0]);
- VariantInit(&v);
-
- res = php_com_do_invoke(proxy->obj, Z_STRVAL_P(proxy->indices[0]),
- Z_STRLEN_P(proxy->indices[0]), DISPATCH_METHOD|DISPATCH_PROPERTYGET, &v,
- proxy->dimensions, args TSRMLS_CC);
-
- if (res == SUCCESS) {
- php_com_zval_from_variant(return_value, &v, proxy->obj->code_page TSRMLS_CC);
- VariantClear(&v);
- } else if (res == DISP_E_BADPARAMCOUNT) {
- /* return another proxy */
- php_com_saproxy_create(object, return_value, offset TSRMLS_CC);
- }
-
- return return_value;
-
- } else if (!V_ISARRAY(&proxy->obj->v)) {
- php_com_throw_exception(E_INVALIDARG, "invalid read from com proxy object" TSRMLS_CC);
- return return_value;
- }
-
- /* the SafeArray case */
-
- /* offset/index must be an integer */
- convert_to_long(offset);
-
- sa = V_ARRAY(&proxy->obj->v);
- dims = SafeArrayGetDim(sa);
-
- if (proxy->dimensions >= dims) {
- /* too many dimensions */
- php_com_throw_exception(E_INVALIDARG, "too many dimensions!" TSRMLS_CC);
- return return_value;
- }
-
- /* bounds check */
- SafeArrayGetLBound(sa, proxy->dimensions, &lbound);
- SafeArrayGetUBound(sa, proxy->dimensions, &ubound);
-
- if (Z_LVAL_P(offset) < lbound || Z_LVAL_P(offset) > ubound) {
- php_com_throw_exception(DISP_E_BADINDEX, "index out of bounds" TSRMLS_CC);
- return return_value;
- }
-
- if (dims - 1 == proxy->dimensions) {
- LONG *indices;
- VARTYPE vt;
- VARIANT v;
-
- VariantInit(&v);
-
- /* we can return a real value */
- indices = emalloc(dims * sizeof(LONG));
-
- /* copy indices from proxy */
- for (i = 0; i < dims; i++) {
- convert_to_long(proxy->indices[i]);
- indices[i] = Z_LVAL_P(proxy->indices[i]);
- }
-
- /* add user-supplied index */
- indices[dims-1] = Z_LVAL_P(offset);
-
- /* now fetch the value */
- if (FAILED(SafeArrayGetVartype(sa, &vt)) || vt == VT_EMPTY) {
- vt = V_VT(&proxy->obj->v) & ~VT_ARRAY;
- }
-
- if (vt == VT_VARIANT) {
- res = SafeArrayGetElement(sa, indices, &v);
- } else {
- V_VT(&v) = vt;
- res = SafeArrayGetElement(sa, indices, &v.lVal);
- }
-
- efree(indices);
-
- if (SUCCEEDED(res)) {
- php_com_wrap_variant(return_value, &v, proxy->obj->code_page TSRMLS_CC);
- } else {
- php_com_throw_exception(res, NULL TSRMLS_CC);
- }
-
- VariantClear(&v);
-
- } else {
- /* return another proxy */
- php_com_saproxy_create(object, return_value, offset TSRMLS_CC);
- }
-
- return return_value;
-}
-
-static void saproxy_write_dimension(zval *object, zval *offset, zval *value TSRMLS_DC)
-{
- php_com_saproxy *proxy = SA_FETCH(object);
- UINT dims;
- int i;
- HRESULT res;
- VARIANT v;
-
- if (V_VT(&proxy->obj->v) == VT_DISPATCH) {
- /* We do a prop-set using the first dimension as the property name,
- * all subsequent dimensions and offset as parameters, with value as
- * the final value */
- zval **args = safe_emalloc(proxy->dimensions + 2, sizeof(zval *), 0);
-
- for (i = 1; i < proxy->dimensions; i++) {
- args[i-1] = proxy->indices[i];
- }
- args[i-1] = offset;
- args[i] = value;
-
- convert_to_string(proxy->indices[0]);
- VariantInit(&v);
- if (SUCCESS == php_com_do_invoke(proxy->obj, Z_STRVAL_P(proxy->indices[0]),
- Z_STRLEN_P(proxy->indices[0]), DISPATCH_PROPERTYPUT, &v, proxy->dimensions + 1,
- args TSRMLS_CC)) {
- VariantClear(&v);
- }
-
- efree(args);
-
- } else if (V_ISARRAY(&proxy->obj->v)) {
- LONG *indices;
- VARTYPE vt;
-
- dims = SafeArrayGetDim(V_ARRAY(&proxy->obj->v));
- indices = emalloc(dims * sizeof(LONG));
- /* copy indices from proxy */
- for (i = 0; i < dims; i++) {
- convert_to_long(proxy->indices[i]);
- indices[i] = Z_LVAL_P(proxy->indices[i]);
- }
-
- /* add user-supplied index */
- convert_to_long(offset);
- indices[dims-1] = Z_LVAL_P(offset);
-
- if (FAILED(SafeArrayGetVartype(V_ARRAY(&proxy->obj->v), &vt)) || vt == VT_EMPTY) {
- vt = V_VT(&proxy->obj->v) & ~VT_ARRAY;
- }
-
- VariantInit(&v);
- php_com_variant_from_zval(&v, value, proxy->obj->code_page TSRMLS_CC);
-
- if (V_VT(&v) != vt) {
- VariantChangeType(&v, &v, 0, vt);
- }
-
- if (vt == VT_VARIANT) {
- res = SafeArrayPutElement(V_ARRAY(&proxy->obj->v), indices, &v);
- } else {
- res = SafeArrayPutElement(V_ARRAY(&proxy->obj->v), indices, &v.lVal);
- }
-
- efree(indices);
- VariantClear(&v);
-
- if (FAILED(res)) {
- php_com_throw_exception(res, NULL TSRMLS_CC);
- }
- } else {
- php_com_throw_exception(E_NOTIMPL, "invalid write to com proxy object" TSRMLS_CC);
- }
-}
-
-#if 0
-static void saproxy_object_set(zval **property, zval *value TSRMLS_DC)
-{
-}
-
-static zval *saproxy_object_get(zval *property TSRMLS_DC)
-{
- /* Not yet implemented in the engine */
- return NULL;
-}
-#endif
-
-static int saproxy_property_exists(zval *object, zval *member, int check_empty TSRMLS_DC)
-{
- /* no properties */
- return 0;
-}
-
-static int saproxy_dimension_exists(zval *object, zval *member, int check_empty TSRMLS_DC)
-{
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Operation not yet supported on a COM object");
- return 0;
-}
-
-static void saproxy_property_delete(zval *object, zval *member TSRMLS_DC)
-{
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Cannot delete properties from a COM object");
-}
-
-static void saproxy_dimension_delete(zval *object, zval *offset TSRMLS_DC)
-{
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Cannot delete properties from a COM object");
-}
-
-static HashTable *saproxy_properties_get(zval *object TSRMLS_DC)
-{
- /* no properties */
- return NULL;
-}
-
-static union _zend_function *saproxy_method_get(zval *object, char *name, int len TSRMLS_DC)
-{
- /* no methods */
- return NULL;
-}
-
-static int saproxy_call_method(char *method, INTERNAL_FUNCTION_PARAMETERS)
-{
- return FAILURE;
-}
-
-static union _zend_function *saproxy_constructor_get(zval *object TSRMLS_DC)
-{
- /* user cannot instantiate */
- return NULL;
-}
-
-static zend_class_entry *saproxy_class_entry_get(zval *object TSRMLS_DC)
-{
- return php_com_saproxy_class_entry;
-}
-
-static int saproxy_class_name_get(zval *object, char **class_name, zend_uint *class_name_len, int parent TSRMLS_DC)
-{
- *class_name = estrndup(php_com_saproxy_class_entry->name, php_com_saproxy_class_entry->name_length);
- *class_name_len = php_com_saproxy_class_entry->name_length;
- return 0;
-}
-
-static int saproxy_objects_compare(zval *object1, zval *object2 TSRMLS_DC)
-{
- return -1;
-}
-
-static int saproxy_object_cast(zval *readobj, zval *writeobj, int type, int should_free TSRMLS_DC)
-{
- return FAILURE;
-}
-
-static int saproxy_count_elements(zval *object, long *count TSRMLS_DC)
-{
- php_com_saproxy *proxy = SA_FETCH(object);
- LONG ubound, lbound;
-
- if (!V_ISARRAY(&proxy->obj->v)) {
- return FAILURE;
- }
-
- SafeArrayGetLBound(V_ARRAY(&proxy->obj->v), proxy->dimensions, &lbound);
- SafeArrayGetUBound(V_ARRAY(&proxy->obj->v), proxy->dimensions, &ubound);
-
- *count = ubound - lbound + 1;
-
- return SUCCESS;
-}
-
-zend_object_handlers php_com_saproxy_handlers = {
- ZEND_OBJECTS_STORE_HANDLERS,
- saproxy_property_read,
- saproxy_property_write,
- saproxy_read_dimension,
- saproxy_write_dimension,
- NULL,
- NULL, //saproxy_object_get,
- NULL, //saproxy_object_set,
- saproxy_property_exists,
- saproxy_property_delete,
- saproxy_dimension_exists,
- saproxy_dimension_delete,
- saproxy_properties_get,
- saproxy_method_get,
- saproxy_call_method,
- saproxy_constructor_get,
- saproxy_class_entry_get,
- saproxy_class_name_get,
- saproxy_objects_compare,
- saproxy_object_cast,
- saproxy_count_elements
-};
-
-static void saproxy_free_storage(void *object TSRMLS_DC)
-{
- php_com_saproxy *proxy = (php_com_saproxy *)object;
- int i;
-
- for (i = 0; i < proxy->dimensions; i++) {
- if (proxy->indices) {
- FREE_ZVAL(proxy->indices[i]);
- }
- }
-
- zval_ptr_dtor(&proxy->zobj);
- efree(proxy->indices);
- efree(proxy);
-}
-
-static void saproxy_clone(void *object, void **clone_ptr TSRMLS_DC)
-{
- php_com_saproxy *proxy = (php_com_saproxy *)object;
- php_com_saproxy *cloneproxy;
-
- cloneproxy = emalloc(sizeof(*cloneproxy));
- memcpy(cloneproxy, proxy, sizeof(*cloneproxy));
-
- ZVAL_ADDREF(cloneproxy->zobj);
- cloneproxy->indices = safe_emalloc(cloneproxy->dimensions, sizeof(zval *), 0);
- clone_indices(cloneproxy, proxy, proxy->dimensions);
-
- *clone_ptr = cloneproxy;
-}
-
-int php_com_saproxy_create(zval *com_object, zval *proxy_out, zval *index TSRMLS_DC)
-{
- php_com_saproxy *proxy, *rel = NULL;
-
- proxy = ecalloc(1, sizeof(*proxy));
- proxy->dimensions = 1;
-
- if (Z_OBJCE_P(com_object) == php_com_saproxy_class_entry) {
- rel = SA_FETCH(com_object);
- proxy->obj = rel->obj;
- proxy->zobj = rel->zobj;
- proxy->dimensions += rel->dimensions;
- } else {
- proxy->obj = CDNO_FETCH(com_object);
- proxy->zobj = com_object;
- }
-
- ZVAL_ADDREF(proxy->zobj);
- proxy->indices = safe_emalloc(proxy->dimensions, sizeof(zval *), 0);
-
- if (rel) {
- clone_indices(proxy, rel, rel->dimensions);
- }
-
- MAKE_STD_ZVAL(proxy->indices[proxy->dimensions-1]);
- *proxy->indices[proxy->dimensions-1] = *index;
- zval_copy_ctor(proxy->indices[proxy->dimensions-1]);
-
- Z_TYPE_P(proxy_out) = IS_OBJECT;
- Z_OBJ_HANDLE_P(proxy_out) = zend_objects_store_put(proxy, NULL, saproxy_free_storage, saproxy_clone TSRMLS_CC);
- Z_OBJ_HT_P(proxy_out) = &php_com_saproxy_handlers;
-
- return 1;
-}
-
-/* iterator */
-
-static void saproxy_iter_dtor(zend_object_iterator *iter TSRMLS_DC)
-{
- php_com_saproxy_iter *I = (php_com_saproxy_iter*)iter->data;
-
- zval_ptr_dtor(&I->proxy_obj);
-
- efree(I->indices);
- efree(I);
-}
-
-static int saproxy_iter_valid(zend_object_iterator *iter TSRMLS_DC)
-{
- php_com_saproxy_iter *I = (php_com_saproxy_iter*)iter->data;
-
- return (I->key < I->imax) ? SUCCESS : FAILURE;
-}
-
-static void saproxy_iter_get_data(zend_object_iterator *iter, zval ***data TSRMLS_DC)
-{
- php_com_saproxy_iter *I = (php_com_saproxy_iter*)iter->data;
- VARIANT v;
- VARTYPE vt;
- zval *return_value, **ptr_ptr;
- SAFEARRAY *sa;
-
- I->indices[I->proxy->dimensions-1] = I->key;
-
- sa = V_ARRAY(&I->proxy->obj->v);
-
- if (FAILED(SafeArrayGetVartype(sa, &vt)) || vt == VT_EMPTY) {
- vt = V_VT(&I->proxy->obj->v) & ~VT_ARRAY;
- }
-
- VariantInit(&v);
- if (vt == VT_VARIANT) {
- SafeArrayGetElement(sa, I->indices, &v);
- } else {
- V_VT(&v) = vt;
- SafeArrayGetElement(sa, I->indices, &v.lVal);
- }
-
- MAKE_STD_ZVAL(return_value);
- php_com_wrap_variant(return_value, &v, I->proxy->obj->code_page TSRMLS_CC);
- VariantClear(&v);
-
- ptr_ptr = emalloc(sizeof(*ptr_ptr));
- *ptr_ptr = return_value;
- *data = ptr_ptr;
-}
-
-static int saproxy_iter_get_key(zend_object_iterator *iter, char **str_key, uint *str_key_len,
- ulong *int_key TSRMLS_DC)
-{
- php_com_saproxy_iter *I = (php_com_saproxy_iter*)iter->data;
-
- if (I->key == -1) {
- return HASH_KEY_NON_EXISTANT;
- }
- *int_key = (ulong)I->key;
- return HASH_KEY_IS_LONG;
-}
-
-static int saproxy_iter_move_forwards(zend_object_iterator *iter TSRMLS_DC)
-{
- php_com_saproxy_iter *I = (php_com_saproxy_iter*)iter->data;
-
- if (++I->key >= I->imax) {
- I->key = -1;
- return FAILURE;
- }
- return SUCCESS;
-}
-
-static zend_object_iterator_funcs saproxy_iter_funcs = {
- saproxy_iter_dtor,
- saproxy_iter_valid,
- saproxy_iter_get_data,
- saproxy_iter_get_key,
- saproxy_iter_move_forwards,
- NULL
-};
-
-
-zend_object_iterator *php_com_saproxy_iter_get(zend_class_entry *ce, zval *object TSRMLS_DC)
-{
- php_com_saproxy *proxy = SA_FETCH(object);
- php_com_saproxy_iter *I;
- int i;
-
- I = ecalloc(1, sizeof(*I));
- I->iter.funcs = &saproxy_iter_funcs;
- I->iter.data = I;
-
- I->proxy = proxy;
- I->proxy_obj = object;
- ZVAL_ADDREF(I->proxy_obj);
-
- I->indices = safe_emalloc(proxy->dimensions + 1, sizeof(LONG), 0);
- for (i = 0; i < proxy->dimensions; i++) {
- convert_to_long(proxy->indices[i]);
- I->indices[i] = Z_LVAL_P(proxy->indices[i]);
- }
-
- SafeArrayGetLBound(V_ARRAY(&proxy->obj->v), proxy->dimensions, &I->imin);
- SafeArrayGetUBound(V_ARRAY(&proxy->obj->v), proxy->dimensions, &I->imax);
-
- I->key = I->imin;
-
- return &I->iter;
-}
-
diff --git a/ext/com_dotnet/com_typeinfo.c b/ext/com_dotnet/com_typeinfo.c
deleted file mode 100644
index ed521d1233..0000000000
--- a/ext/com_dotnet/com_typeinfo.c
+++ /dev/null
@@ -1,601 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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@thebrainroom.com> |
- | Harald Radi <h.radi@nme.at> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "php.h"
-#include "php_ini.h"
-#include "ext/standard/info.h"
-#include "php_com_dotnet.h"
-#include "php_com_dotnet_internal.h"
-
-
-/* The search string can be either:
- * a) a file name
- * b) a CLSID, major, minor e.g. "{00000200-0000-0010-8000-00AA006D2EA4},2,0"
- * c) a Type Library name e.g. "Microsoft OLE DB ActiveX Data Objects 1.0 Library"
- */
-PHPAPI ITypeLib *php_com_load_typelib(char *search_string, int codepage TSRMLS_DC)
-{
- ITypeLib *TL = NULL;
- char *strtok_buf, *major, *minor;
- CLSID clsid;
- OLECHAR *p;
- HRESULT hr;
-
- search_string = php_strtok_r(search_string, ",", &strtok_buf);
-
- if (search_string == NULL) {
- return NULL;
- }
-
- major = php_strtok_r(NULL, ",", &strtok_buf);
- minor = php_strtok_r(NULL, ",", &strtok_buf);
-
- p = php_com_string_to_olestring(search_string, strlen(search_string), codepage TSRMLS_CC);
-
- if (SUCCEEDED(CLSIDFromString(p, &clsid))) {
- WORD major_i = 1, minor_i = 0;
-
- /* pick up the major/minor numbers; if none specified, default to 1,0 */
- if (major && minor) {
- major_i = (WORD)atoi(major);
- minor_i = (WORD)atoi(minor);
- }
-
- /* Load the TypeLib by GUID */
- hr = LoadRegTypeLib((REFGUID)&clsid, major_i, minor_i, LANG_NEUTRAL, &TL);
-
- /* if that failed, assumed that the GUID is actually a CLSID and
- * attemp to get the library via an instance of that class */
- if (FAILED(hr) && (major == NULL || minor == NULL)) {
- IDispatch *disp = NULL;
- ITypeInfo *info = NULL;
- int idx;
-
- if (SUCCEEDED(hr = CoCreateInstance(&clsid, NULL, CLSCTX_SERVER, &IID_IDispatch, (LPVOID*)&disp)) &&
- SUCCEEDED(hr = IDispatch_GetTypeInfo(disp, 0, LANG_NEUTRAL, &info))) {
- hr = ITypeInfo_GetContainingTypeLib(info, &TL, &idx);
- }
-
- if (info) {
- ITypeInfo_Release(info);
- }
- if (disp) {
- IDispatch_Release(disp);
- }
- }
- } else {
- /* Try to load it from a file; if it fails, do a really painful search of
- * the registry */
- if (FAILED(LoadTypeLib(p, &TL))) {
- HKEY hkey, hsubkey;
- DWORD SubKeys, MaxSubKeyLength;
- char *keyname;
- unsigned int i, j;
- DWORD VersionCount;
- char version[20];
- char *libname;
- DWORD libnamelen;
-
- if (ERROR_SUCCESS == RegOpenKeyEx(HKEY_CLASSES_ROOT, "TypeLib", 0, KEY_READ, &hkey) &&
- ERROR_SUCCESS == RegQueryInfoKey(hkey, NULL, NULL, NULL, &SubKeys,
- &MaxSubKeyLength, NULL, NULL, NULL, NULL, NULL, NULL)) {
-
- MaxSubKeyLength++; /* make room for NUL */
- keyname = emalloc(MaxSubKeyLength);
- libname = emalloc(strlen(search_string) + 1);
-
- for (i = 0; i < SubKeys && TL == NULL; i++) {
- if (ERROR_SUCCESS == RegEnumKey(hkey, i, keyname, MaxSubKeyLength) &&
- ERROR_SUCCESS == RegOpenKeyEx(hkey, keyname, 0, KEY_READ, &hsubkey)) {
- if (ERROR_SUCCESS == RegQueryInfoKey(hsubkey, NULL, NULL, NULL, &VersionCount,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL)) {
- for (j = 0; j < VersionCount; j++) {
- if (ERROR_SUCCESS != RegEnumKey(hsubkey, j, version, sizeof(version))) {
- continue;
- }
- /* get the default value for this key and compare */
- libnamelen = strlen(search_string)+1;
- if (ERROR_SUCCESS == RegQueryValue(hsubkey, version, libname, &libnamelen)) {
- if (0 == stricmp(libname, search_string)) {
- char *str = NULL;
- int major, minor;
-
- /* fetch the GUID and add the version numbers */
- if (2 != sscanf(version, "%d.%d", &major, &minor)) {
- major = 1;
- minor = 0;
- }
- spprintf(&str, 0, "%s,%d,%d", keyname, major, minor);
- /* recurse */
- TL = php_com_load_typelib(str, codepage TSRMLS_CC);
-
- efree(str);
- break;
- }
- }
- }
- }
- RegCloseKey(hsubkey);
- }
- }
- RegCloseKey(hkey);
- efree(keyname);
- efree(libname);
- }
- }
- }
-
- efree(p);
-
- return TL;
-}
-
-/* Given a type-library, merge it into the current engine state */
-PHPAPI int php_com_import_typelib(ITypeLib *TL, int mode, int codepage TSRMLS_DC)
-{
- int i, j, interfaces;
- TYPEKIND pTKind;
- ITypeInfo *TypeInfo;
- VARDESC *pVarDesc;
- UINT NameCount;
- BSTR bstr_ids;
- zend_constant c;
- zval exists, results, value;
- char *const_name;
-
- if (TL == NULL) {
- return FAILURE;
- }
-
- interfaces = ITypeLib_GetTypeInfoCount(TL);
- for (i = 0; i < interfaces; i++) {
- ITypeLib_GetTypeInfoType(TL, i, &pTKind);
- if (pTKind == TKIND_ENUM) {
- ITypeLib_GetTypeInfo(TL, i, &TypeInfo);
- for (j = 0; ; j++) {
- if (FAILED(ITypeInfo_GetVarDesc(TypeInfo, j, &pVarDesc))) {
- break;
- }
- ITypeInfo_GetNames(TypeInfo, pVarDesc->memid, &bstr_ids, 1, &NameCount);
- if (NameCount != 1) {
- ITypeInfo_ReleaseVarDesc(TypeInfo, pVarDesc);
- continue;
- }
-
- const_name = php_com_olestring_to_string(bstr_ids, &c.name_len, codepage TSRMLS_CC);
- c.name = zend_strndup(const_name, c.name_len);
- efree(const_name);
- c.name_len++; /* include NUL */
- SysFreeString(bstr_ids);
-
- /* sanity check for the case where the constant is already defined */
- if (zend_get_constant(c.name, c.name_len - 1, &exists TSRMLS_CC)) {
- if (COMG(autoreg_verbose) && !compare_function(&results, &c.value, &exists TSRMLS_CC)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Type library constant %s is already defined", c.name);
- }
- free(c.name);
- ITypeInfo_ReleaseVarDesc(TypeInfo, pVarDesc);
- continue;
- }
-
- /* register the constant */
- php_com_zval_from_variant(&value, pVarDesc->lpvarValue, codepage TSRMLS_CC);
- if (Z_TYPE(value) == IS_LONG) {
- c.flags = mode;
- c.value.type = IS_LONG;
- c.value.value.lval = Z_LVAL(value);
- c.module_number = 0;
- zend_register_constant(&c TSRMLS_CC);
- }
- ITypeInfo_ReleaseVarDesc(TypeInfo, pVarDesc);
- }
- ITypeInfo_Release(TypeInfo);
- }
- }
- return SUCCESS;
-}
-
-/* Type-library stuff */
-void php_com_typelibrary_dtor(void *pDest)
-{
- ITypeLib *Lib = *(ITypeLib**)pDest;
- ITypeLib_Release(Lib);
-}
-
-PHPAPI ITypeLib *php_com_load_typelib_via_cache(char *search_string,
- int codepage, int *cached TSRMLS_DC)
-{
- ITypeLib **TL;
- char *name_dup;
- int l;
-
- l = strlen(search_string);
-
- if (zend_ts_hash_find(&php_com_typelibraries, search_string, l+1,
- (void**)&TL) == SUCCESS) {
- *cached = 1;
- /* add a reference for the caller */
- ITypeLib_AddRef(*TL);
- return *TL;
- }
-
- *cached = 0;
- name_dup = estrndup(search_string, l);
- *TL = php_com_load_typelib(name_dup, codepage TSRMLS_CC);
- efree(name_dup);
-
- if (*TL) {
- if (SUCCESS == zend_ts_hash_update(&php_com_typelibraries,
- search_string, l+1, (void*)*TL, sizeof(ITypeLib*), NULL)) {
- /* add a reference for the hash table */
- ITypeLib_AddRef(*TL);
- }
- }
-
- return *TL;
-}
-
-ITypeInfo *php_com_locate_typeinfo(char *typelibname, php_com_dotnet_object *obj, char *dispname, int sink TSRMLS_DC)
-{
- ITypeInfo *typeinfo = NULL;
- ITypeLib *typelib = NULL;
- int gotguid = 0;
- GUID iid;
-
- if (obj) {
- if (dispname == NULL && sink) {
- IProvideClassInfo2 *pci2;
- IProvideClassInfo *pci;
-
- if (SUCCEEDED(IDispatch_QueryInterface(V_DISPATCH(&obj->v), &IID_IProvideClassInfo2, (void**)&pci2))) {
- gotguid = SUCCEEDED(IProvideClassInfo2_GetGUID(pci2, GUIDKIND_DEFAULT_SOURCE_DISP_IID, &iid));
- IProvideClassInfo2_Release(pci2);
- }
- if (!gotguid && SUCCEEDED(IDispatch_QueryInterface(V_DISPATCH(&obj->v), &IID_IProvideClassInfo, (void**)&pci))) {
- /* examine the available interfaces */
- /* TODO: write some code here */
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "IProvideClassInfo: this code not yet written!");
- IProvideClassInfo_Release(pci);
- }
- } else if (dispname == NULL) {
- if (obj->typeinfo) {
- ITypeInfo_AddRef(obj->typeinfo);
- return obj->typeinfo;
- } else {
- IDispatch_GetTypeInfo(V_DISPATCH(&obj->v), 0, LANG_NEUTRAL, &typeinfo);
- if (typeinfo) {
- return typeinfo;
- }
- }
- } else if (dispname && obj->typeinfo) {
- unsigned int idx;
- /* get the library from the object; the rest will be dealt with later */
- ITypeInfo_GetContainingTypeLib(obj->typeinfo, &typelib, &idx);
- } else if (typelibname == NULL) {
- IDispatch_GetTypeInfo(V_DISPATCH(&obj->v), 0, LANG_NEUTRAL, &typeinfo);
- if (dispname) {
- unsigned int idx;
- /* get the library from the object; the rest will be dealt with later */
- ITypeInfo_GetContainingTypeLib(typeinfo, &typelib, &idx);
-
- if (typelib) {
- ITypeInfo_Release(typeinfo);
- typeinfo = NULL;
- }
- }
- }
- } else if (typelibname) {
- /* Fetch the typelibrary and use that to look things up */
- typelib = php_com_load_typelib(typelibname, obj->code_page TSRMLS_CC);
- }
-
- if (!gotguid && dispname && typelib) {
- unsigned short cfound;
- MEMBERID memid;
- OLECHAR *olename = php_com_string_to_olestring(dispname, strlen(dispname), CP_ACP TSRMLS_CC);
-
- cfound = 1;
- if (FAILED(ITypeLib_FindName(typelib, olename, 0, &typeinfo, &memid, &cfound)) || cfound == 0) {
- CLSID coclass;
- ITypeInfo *coinfo;
-
- /* assume that it might be a progid instead */
- if (SUCCEEDED(CLSIDFromProgID(olename, &coclass)) &&
- SUCCEEDED(ITypeLib_GetTypeInfoOfGuid(typelib, &coclass, &coinfo))) {
-
- /* enumerate implemented interfaces and pick the one as indicated by sink */
- TYPEATTR *attr;
- int i;
-
- ITypeInfo_GetTypeAttr(coinfo, &attr);
-
- for (i = 0; i < attr->cImplTypes; i++) {
- HREFTYPE rt;
- int tf;
-
- if (FAILED(ITypeInfo_GetImplTypeFlags(coinfo, i, &tf))) {
- continue;
- }
-
- if ((sink && tf == (IMPLTYPEFLAG_FSOURCE|IMPLTYPEFLAG_FDEFAULT)) ||
- (!sink && (tf & IMPLTYPEFLAG_FSOURCE) == 0)) {
-
- /* flags match what we are looking for */
-
- if (SUCCEEDED(ITypeInfo_GetRefTypeOfImplType(coinfo, i, &rt)))
- if (SUCCEEDED(ITypeInfo_GetRefTypeInfo(coinfo, rt, &typeinfo)))
- break;
-
- }
- }
-
- ITypeInfo_ReleaseTypeAttr(coinfo, attr);
- ITypeInfo_Release(coinfo);
- }
- }
-
-
- efree(olename);
- } else if (gotguid) {
- ITypeLib_GetTypeInfoOfGuid(typelib, &iid, &typeinfo);
- }
-
- if (typelib) {
- ITypeLib_Release(typelib);
- }
-
- return typeinfo;
-}
-
-static const struct {
- VARTYPE vt;
- const char *name;
-} vt_names[] = {
- { VT_NULL, "VT_NULL" },
- { VT_EMPTY, "VT_EMPTY" },
- { VT_UI1, "VT_UI1" },
- { VT_I2, "VT_I2" },
- { VT_I4, "VT_I4" },
- { VT_R4, "VT_R4" },
- { VT_R8, "VT_R8" },
- { VT_BOOL, "VT_BOOL" },
- { VT_ERROR, "VT_ERROR" },
- { VT_CY, "VT_CY" },
- { VT_DATE, "VT_DATE" },
- { VT_BSTR, "VT_BSTR" },
- { VT_DECIMAL, "VT_DECIMAL" },
- { VT_UNKNOWN, "VT_UNKNOWN" },
- { VT_DISPATCH, "VT_DISPATCH" },
- { VT_VARIANT, "VT_VARIANT" },
- { VT_I1, "VT_I1" },
- { VT_UI2, "VT_UI2" },
- { VT_UI4, "VT_UI4" },
- { VT_INT, "VT_INT" },
- { VT_UINT, "VT_UINT" },
- { VT_ARRAY, "VT_ARRAY" },
- { VT_BYREF, "VT_BYREF" },
- { VT_VOID, "VT_VOID" },
- { VT_PTR, "VT_PTR" },
- { VT_HRESULT, "VT_HRESULT" },
- { 0, NULL }
-};
-
-static inline const char *vt_to_string(VARTYPE vt)
-{
- int i;
- for (i = 0; vt_names[i].name != NULL; i++) {
- if (vt_names[i].vt == vt)
- return vt_names[i].name;
- }
- return "?";
-}
-
-static char *php_com_string_from_clsid(const CLSID *clsid, int codepage TSRMLS_DC)
-{
- LPOLESTR ole_clsid;
- char *clsid_str;
-
- StringFromCLSID(clsid, &ole_clsid);
- clsid_str = php_com_olestring_to_string(ole_clsid, NULL, codepage TSRMLS_CC);
- LocalFree(ole_clsid);
-
- return clsid_str;
-}
-
-
-int php_com_process_typeinfo(ITypeInfo *typeinfo, HashTable *id_to_name, int printdef, GUID *guid, int codepage TSRMLS_DC)
-{
- TYPEATTR *attr;
- FUNCDESC *func;
- int i;
- OLECHAR *olename;
- char *ansiname = NULL;
- unsigned int ansinamelen;
- int ret = 0;
-
- if (FAILED(ITypeInfo_GetTypeAttr(typeinfo, &attr))) {
- return 0;
- }
-
- /* verify that it is suitable */
- if (id_to_name == NULL || attr->typekind == TKIND_DISPATCH) {
-
- if (guid) {
- memcpy(guid, &attr->guid, sizeof(GUID));
- }
-
- if (printdef) {
- char *guidstring;
-
- ITypeInfo_GetDocumentation(typeinfo, MEMBERID_NIL, &olename, NULL, NULL, NULL);
- ansiname = php_com_olestring_to_string(olename, &ansinamelen, codepage TSRMLS_CC);
- SysFreeString(olename);
-
- guidstring = php_com_string_from_clsid(&attr->guid, codepage TSRMLS_CC);
- php_printf("class %s { /* GUID=%s */\n", ansiname, guidstring);
- efree(guidstring);
-
- efree(ansiname);
- }
-
- if (id_to_name) {
- zend_hash_init(id_to_name, 0, NULL, ZVAL_PTR_DTOR, 0);
- }
-
- /* So we've got the dispatch interface; lets list the event methods */
- for (i = 0; i < attr->cFuncs; i++) {
- zval *tmp;
- DISPID lastid = 0; /* for props */
- int isprop;
-
- if (FAILED(ITypeInfo_GetFuncDesc(typeinfo, i, &func)))
- break;
-
- isprop = (func->invkind & DISPATCH_PROPERTYGET || func->invkind & DISPATCH_PROPERTYPUT);
-
- if (!isprop || lastid != func->memid) {
-
- lastid = func->memid;
-
- ITypeInfo_GetDocumentation(typeinfo, func->memid, &olename, NULL, NULL, NULL);
- ansiname = php_com_olestring_to_string(olename, &ansinamelen, codepage TSRMLS_CC);
- SysFreeString(olename);
-
- if (printdef) {
- int j;
- char *funcdesc;
- unsigned int funcdesclen, cnames = 0;
- BSTR *names;
-
- names = (BSTR*)safe_emalloc((func->cParams + 1), sizeof(BSTR), 0);
-
- ITypeInfo_GetNames(typeinfo, func->memid, names, func->cParams + 1, &cnames);
- /* first element is the function name */
- SysFreeString(names[0]);
-
- php_printf("\t/* DISPID=%d */\n", func->memid);
-
- if (func->elemdescFunc.tdesc.vt != VT_VOID) {
- php_printf("\t/* %s [%d] */\n",
- vt_to_string(func->elemdescFunc.tdesc.vt),
- func->elemdescFunc.tdesc.vt
- );
- }
-
- if (isprop) {
-
- ITypeInfo_GetDocumentation(typeinfo, func->memid, NULL, &olename, NULL, NULL);
- if (olename) {
- funcdesc = php_com_olestring_to_string(olename, &funcdesclen, codepage TSRMLS_CC);
- SysFreeString(olename);
- php_printf("\t/* %s */\n", funcdesc);
- efree(funcdesc);
- }
-
- php_printf("\tvar $%s;\n\n", ansiname);
-
- } else {
- /* a function */
-
- php_printf("\tfunction %s(\n", ansiname);
-
- for (j = 0; j < func->cParams; j++) {
- ELEMDESC *elem = &func->lprgelemdescParam[j];
-
- php_printf("\t\t/* %s [%d] ", vt_to_string(elem->tdesc.vt), elem->tdesc.vt);
-
- if (elem->paramdesc.wParamFlags & PARAMFLAG_FIN)
- php_printf("[in]");
- if (elem->paramdesc.wParamFlags & PARAMFLAG_FOUT)
- php_printf("[out]");
-
- if (elem->tdesc.vt == VT_PTR) {
- /* what does it point to ? */
- php_printf(" --> %s [%d] ",
- vt_to_string(elem->tdesc.lptdesc->vt),
- elem->tdesc.lptdesc->vt
- );
- }
-
- /* when we handle prop put and get, this will look nicer */
- if (j+1 < (int)cnames) {
- funcdesc = php_com_olestring_to_string(names[j+1], &funcdesclen, codepage TSRMLS_CC);
- SysFreeString(names[j+1]);
- } else {
- funcdesc = "???";
- }
-
- php_printf(" */ %s%s%c\n",
- elem->tdesc.vt == VT_PTR ? "&$" : "$",
- funcdesc,
- j == func->cParams - 1 ? ' ' : ','
- );
-
- if (j+1 < (int)cnames) {
- efree(funcdesc);
- }
- }
-
- php_printf("\t\t)\n\t{\n");
-
- ITypeInfo_GetDocumentation(typeinfo, func->memid, NULL, &olename, NULL, NULL);
- if (olename) {
- funcdesc = php_com_olestring_to_string(olename, &funcdesclen, codepage TSRMLS_CC);
- SysFreeString(olename);
- php_printf("\t\t/* %s */\n", funcdesc);
- efree(funcdesc);
- }
-
- php_printf("\t}\n");
- }
-
- efree(names);
- }
-
- if (id_to_name) {
- zend_str_tolower(ansiname, ansinamelen);
- MAKE_STD_ZVAL(tmp);
- ZVAL_STRINGL(tmp, ansiname, ansinamelen, 0);
- zend_hash_index_update(id_to_name, func->memid, (void*)&tmp, sizeof(zval *), NULL);
- }
- }
- ITypeInfo_ReleaseFuncDesc(typeinfo, func);
- }
-
- if (printdef) {
- php_printf("}\n");
- }
-
- ret = 1;
- } else {
- zend_error(E_WARNING, "That's not a dispatchable interface!! type kind = %08x", attr->typekind);
- }
-
- ITypeInfo_ReleaseTypeAttr(typeinfo, attr);
-
- return ret;
-}
-
-
diff --git a/ext/com_dotnet/com_variant.c b/ext/com_dotnet/com_variant.c
deleted file mode 100644
index 345591306a..0000000000
--- a/ext/com_dotnet/com_variant.c
+++ /dev/null
@@ -1,909 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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@thebrainroom.com> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "php.h"
-#include "php_ini.h"
-#include "ext/standard/info.h"
-#include "php_com_dotnet.h"
-#include "php_com_dotnet_internal.h"
-
-/* create an automation SafeArray from a PHP array.
- * Only creates a single-dimensional array of variants.
- * The keys of the PHP hash MUST be numeric. If the array
- * is sparse, then the gaps will be filled with NULL variants */
-static void safe_array_from_zval(VARIANT *v, zval *z, int codepage TSRMLS_DC)
-{
- SAFEARRAY *sa = NULL;
- SAFEARRAYBOUND bound;
- HashPosition pos;
- int keytype;
- char *strindex;
- int strindexlen;
- long intindex;
- long max_index = 0;
- VARIANT *va;
- zval **item;
-
- /* find the largest array index, and assert that all keys are integers */
- zend_hash_internal_pointer_reset_ex(HASH_OF(z), &pos);
- for (;; zend_hash_move_forward_ex(HASH_OF(z), &pos)) {
-
- keytype = zend_hash_get_current_key_ex(HASH_OF(z), &strindex, &strindexlen, &intindex, 0, &pos);
-
- if (HASH_KEY_IS_STRING == keytype) {
- goto bogus;
- } else if (HASH_KEY_NON_EXISTANT == keytype) {
- break;
- }
- if (intindex > max_index) {
- max_index = intindex;
- }
- }
-
- /* allocate the structure */
- bound.lLbound = 0;
- bound.cElements = intindex + 1;
- sa = SafeArrayCreate(VT_VARIANT, 1, &bound);
-
- /* get a lock on the array itself */
- SafeArrayAccessData(sa, &va);
- va = (VARIANT*)sa->pvData;
-
- /* now fill it in */
- zend_hash_internal_pointer_reset_ex(HASH_OF(z), &pos);
- for (;; zend_hash_move_forward_ex(HASH_OF(z), &pos)) {
- if (FAILURE == zend_hash_get_current_data_ex(HASH_OF(z), (void**)&item, &pos)) {
- break;
- }
- zend_hash_get_current_key_ex(HASH_OF(z), &strindex, &strindexlen, &intindex, 0, &pos);
- php_com_variant_from_zval(&va[intindex], *item, codepage TSRMLS_CC);
- }
-
- /* Unlock it and stuff it into our variant */
- SafeArrayUnaccessData(sa);
- V_VT(v) = VT_ARRAY|VT_VARIANT;
- V_ARRAY(v) = sa;
-
- return;
-
-bogus:
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "COM: converting from PHP array to VARIANT array; only arrays with numeric keys are allowed");
-
- V_VT(v) = VT_NULL;
-
- if (sa) {
- SafeArrayUnlock(sa);
- SafeArrayDestroy(sa);
- }
-}
-
-PHPAPI void php_com_variant_from_zval(VARIANT *v, zval *z, int codepage TSRMLS_DC)
-{
- OLECHAR *olestring;
- php_com_dotnet_object *obj;
-
- switch (Z_TYPE_P(z)) {
- case IS_NULL:
- V_VT(v) = VT_NULL;
- break;
-
- case IS_BOOL:
- V_VT(v) = VT_BOOL;
- V_BOOL(v) = Z_BVAL_P(z) ? VARIANT_TRUE : VARIANT_FALSE;
- break;
-
- case IS_OBJECT:
- if (php_com_is_valid_object(z TSRMLS_CC)) {
- obj = CDNO_FETCH(z);
- if (V_VT(&obj->v) == VT_DISPATCH) {
- /* pass the underlying object */
- V_VT(v) = VT_DISPATCH;
- if (V_DISPATCH(&obj->v)) {
- IDispatch_AddRef(V_DISPATCH(&obj->v));
- }
- V_DISPATCH(v) = V_DISPATCH(&obj->v);
- } else {
- /* pass the variant by reference */
- V_VT(v) = VT_VARIANT | VT_BYREF;
- V_VARIANTREF(v) = &obj->v;
- }
- } else {
- /* export the PHP object using our COM wrapper */
- V_VT(v) = VT_DISPATCH;
- V_DISPATCH(v) = php_com_wrapper_export(z TSRMLS_CC);
- }
- break;
-
- case IS_ARRAY:
- /* map as safe array */
- safe_array_from_zval(v, z, codepage TSRMLS_CC);
- break;
-
- case IS_LONG:
- V_VT(v) = VT_I4;
- V_I4(v) = Z_LVAL_P(z);
- break;
-
- case IS_DOUBLE:
- V_VT(v) = VT_R8;
- V_R8(v) = Z_DVAL_P(z);
- break;
-
- case IS_STRING:
- V_VT(v) = VT_BSTR;
- olestring = php_com_string_to_olestring(Z_STRVAL_P(z), Z_STRLEN_P(z), codepage TSRMLS_CC);
- V_BSTR(v) = SysAllocStringByteLen((char*)olestring, Z_STRLEN_P(z) * sizeof(OLECHAR));
- efree(olestring);
- break;
-
- case IS_RESOURCE:
- case IS_CONSTANT:
- case IS_CONSTANT_ARRAY:
- default:
- V_VT(v) = VT_NULL;
- break;
- }
-}
-
-PHPAPI int php_com_zval_from_variant(zval *z, VARIANT *v, int codepage TSRMLS_DC)
-{
- OLECHAR *olestring = NULL;
- int ret = SUCCESS;
-
- switch (V_VT(v)) {
- case VT_EMPTY:
- case VT_NULL:
- case VT_VOID:
- ZVAL_NULL(z);
- break;
- case VT_UI1:
- ZVAL_LONG(z, (long)V_UI1(v));
- break;
- case VT_I1:
- ZVAL_LONG(z, (long)V_I1(v));
- break;
- case VT_UI2:
- ZVAL_LONG(z, (long)V_UI2(v));
- break;
- case VT_I2:
- ZVAL_LONG(z, (long)V_I2(v));
- break;
- case VT_UI4: /* TODO: promote to double if large? */
- ZVAL_LONG(z, (long)V_UI4(v));
- break;
- case VT_I4:
- ZVAL_LONG(z, (long)V_I4(v));
- break;
- case VT_INT:
- ZVAL_LONG(z, V_INT(v));
- break;
- case VT_UINT: /* TODO: promote to double if large? */
- ZVAL_LONG(z, (long)V_UINT(v));
- break;
- case VT_R4:
- ZVAL_DOUBLE(z, (double)V_R4(v));
- break;
- case VT_R8:
- ZVAL_DOUBLE(z, V_R8(v));
- break;
- case VT_BOOL:
- ZVAL_BOOL(z, V_BOOL(v) ? 1 : 0);
- break;
- case VT_BSTR:
- olestring = V_BSTR(v);
- if (olestring) {
- Z_TYPE_P(z) = IS_STRING;
- Z_STRVAL_P(z) = php_com_olestring_to_string(olestring,
- &Z_STRLEN_P(z), codepage TSRMLS_CC);
- olestring = NULL;
- }
- break;
- case VT_UNKNOWN:
- if (V_UNKNOWN(v) != NULL) {
- IDispatch *disp;
-
- if (SUCCEEDED(IUnknown_QueryInterface(V_UNKNOWN(v), &IID_IDispatch, &disp))) {
- php_com_wrap_dispatch(z, disp, codepage TSRMLS_CC);
- IDispatch_Release(disp);
- } else {
- ret = FAILURE;
- }
- }
- break;
-
- case VT_DISPATCH:
- if (V_DISPATCH(v) != NULL) {
- php_com_wrap_dispatch(z, V_DISPATCH(v), codepage TSRMLS_CC);
- }
- break;
-
- case VT_VARIANT:
- /* points to another variant */
- return php_com_zval_from_variant(z, V_VARIANTREF(v), codepage TSRMLS_CC);
-
- default:
- php_com_wrap_variant(z, v, codepage TSRMLS_CC);
- }
-
- if (olestring) {
- efree(olestring);
- }
-
- if (ret == FAILURE) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "variant->zval: conversion from 0x%x ret=%d", V_VT(v), ret);
- }
-
- return ret;
-}
-
-/* {{{ com_variant_create_instance - ctor for new VARIANT() */
-PHP_FUNCTION(com_variant_create_instance)
-{
- /* VARTYPE == unsigned short */ long vt = VT_EMPTY;
- long codepage = CP_ACP;
- zval *object = getThis();
- php_com_dotnet_object *obj;
- zval *zvalue = NULL;
- HRESULT res;
-
- if (ZEND_NUM_ARGS() == 0) {
- /* just leave things as-is - an empty variant */
- return;
- }
-
- obj = CDNO_FETCH(object);
-
- if (FAILURE == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC,
- "z!|ll", &zvalue, &vt, &codepage)) {
- php_com_throw_exception(E_INVALIDARG, "Invalid arguments" TSRMLS_CC);
- return;
- }
-
- if (ZEND_NUM_ARGS() == 3) {
- obj->code_page = codepage;
- }
-
- if (zvalue) {
- php_com_variant_from_zval(&obj->v, zvalue, obj->code_page TSRMLS_CC);
- }
-
- if (ZEND_NUM_ARGS() >= 2) {
-
- res = VariantChangeType(&obj->v, &obj->v, 0, (VARTYPE)vt);
-
- if (FAILED(res)) {
- char *werr, *msg;
-
- werr = php_win_err(res);
- spprintf(&msg, 0, "Variant type conversion failed: %s", werr);
- LocalFree(werr);
-
- php_com_throw_exception(res, msg TSRMLS_CC);
- efree(msg);
- }
- }
-
- if (V_VT(&obj->v) != VT_DISPATCH && obj->typeinfo) {
- ITypeInfo_Release(obj->typeinfo);
- obj->typeinfo = NULL;
- }
-}
-/* }}} */
-
-/* {{{ proto void variant_set(object variant, mixed value)
- Assigns a new value for a variant object */
-PHP_FUNCTION(variant_set)
-{
- zval *zobj, *zvalue = NULL;
- php_com_dotnet_object *obj;
-
- if (FAILURE == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC,
- "Oz!", &zobj, php_com_variant_class_entry, &zvalue)) {
- return;
- }
-
- obj = CDNO_FETCH(zobj);
-
- /* dtor the old value */
- if (obj->typeinfo) {
- ITypeInfo_Release(obj->typeinfo);
- obj->typeinfo = NULL;
- }
- if (obj->sink_dispatch) {
- php_com_object_enable_event_sink(obj, FALSE TSRMLS_CC);
- IDispatch_Release(obj->sink_dispatch);
- obj->sink_dispatch = NULL;
- }
-
- VariantClear(&obj->v);
-
- php_com_variant_from_zval(&obj->v, zvalue, obj->code_page TSRMLS_CC);
-}
-/* }}} */
-
-enum variant_binary_opcode {
- VOP_ADD, VOP_CAT, VOP_SUB, VOP_MUL, VOP_AND, VOP_DIV,
- VOP_EQV, VOP_IDIV, VOP_IMP, VOP_MOD, VOP_OR, VOP_POW,
- VOP_XOR
-};
-
-enum variant_unary_opcode {
- VOP_ABS, VOP_FIX, VOP_INT, VOP_NEG, VOP_NOT
-};
-
-static void variant_binary_operation(enum variant_binary_opcode op, INTERNAL_FUNCTION_PARAMETERS) /* {{{ */
-{
- VARIANT vres;
- VARIANT left_val, right_val;
- VARIANT *vleft = NULL, *vright = NULL;
- zval *zleft = NULL, *zright = NULL;
- php_com_dotnet_object *obj;
- HRESULT result;
- int codepage = CP_ACP;
-
- VariantInit(&left_val);
- VariantInit(&right_val);
- VariantInit(&vres);
-
- if (SUCCESS == zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET,
- ZEND_NUM_ARGS() TSRMLS_CC, "OO", &zleft, php_com_variant_class_entry,
- &zright, php_com_variant_class_entry)) {
- obj = CDNO_FETCH(zleft);
- vleft = &obj->v;
- obj = CDNO_FETCH(zright);
- vright = &obj->v;
- } else if (SUCCESS == zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET,
- ZEND_NUM_ARGS() TSRMLS_CC, "Oz!", &zleft, php_com_variant_class_entry,
- &zright)) {
- obj = CDNO_FETCH(zleft);
- vleft = &obj->v;
- vright = &right_val;
- php_com_variant_from_zval(vright, zright, codepage TSRMLS_CC);
- } else if (SUCCESS == zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET,
- ZEND_NUM_ARGS() TSRMLS_CC, "z!O", &zleft, &zright, php_com_variant_class_entry)) {
- obj = CDNO_FETCH(zright);
- vright = &obj->v;
- vleft = &left_val;
- php_com_variant_from_zval(vleft, zleft, codepage TSRMLS_CC);
- } else if (SUCCESS == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC,
- "z!z!", &zleft, &zright)) {
-
- vleft = &left_val;
- php_com_variant_from_zval(vleft, zleft, codepage TSRMLS_CC);
-
- vright = &right_val;
- php_com_variant_from_zval(vright, zright, codepage TSRMLS_CC);
-
- } else {
- return;
- }
-
- switch (op) {
- case VOP_ADD:
- result = VarAdd(vleft, vright, &vres);
- break;
- case VOP_CAT:
- result = VarCat(vleft, vright, &vres);
- break;
- case VOP_SUB:
- result = VarSub(vleft, vright, &vres);
- break;
- case VOP_MUL:
- result = VarMul(vleft, vright, &vres);
- break;
- case VOP_AND:
- result = VarAnd(vleft, vright, &vres);
- break;
- case VOP_DIV:
- result = VarDiv(vleft, vright, &vres);
- break;
- case VOP_EQV:
- result = VarEqv(vleft, vright, &vres);
- break;
- case VOP_IDIV:
- result = VarIdiv(vleft, vright, &vres);
- break;
- case VOP_IMP:
- result = VarImp(vleft, vright, &vres);
- break;
- case VOP_MOD:
- result = VarMod(vleft, vright, &vres);
- break;
- case VOP_OR:
- result = VarOr(vleft, vright, &vres);
- break;
- case VOP_POW:
- result = VarPow(vleft, vright, &vres);
- break;
- case VOP_XOR:
- result = VarXor(vleft, vright, &vres);
- break;
- }
-
- if (SUCCEEDED(result)) {
- php_com_wrap_variant(return_value, &vres, codepage TSRMLS_CC);
- } else {
- php_com_throw_exception(result, NULL TSRMLS_CC);
- }
-
- VariantClear(&vres);
- VariantClear(&left_val);
- VariantClear(&right_val);
-}
-/* }}} */
-
-/* {{{ proto mixed variant_add(mixed left, mixed right)
- "Adds" two variant values together and returns the result */
-PHP_FUNCTION(variant_add)
-{
- variant_binary_operation(VOP_ADD, INTERNAL_FUNCTION_PARAM_PASSTHRU);
-}
-/* }}} */
-
-/* {{{ proto mixed variant_cat(mixed left, mixed right)
- concatenates two variant values together and returns the result */
-PHP_FUNCTION(variant_cat)
-{
- variant_binary_operation(VOP_CAT, INTERNAL_FUNCTION_PARAM_PASSTHRU);
-}
-/* }}} */
-
-/* {{{ proto mixed variant_sub(mixed left, mixed right)
- subtracts the value of the right variant from the left variant value and returns the result */
-PHP_FUNCTION(variant_sub)
-{
- variant_binary_operation(VOP_SUB, INTERNAL_FUNCTION_PARAM_PASSTHRU);
-}
-/* }}} */
-
-/* {{{ proto mixed variant_mul(mixed left, mixed right)
- multiplies the values of the two variants and returns the result */
-PHP_FUNCTION(variant_mul)
-{
- variant_binary_operation(VOP_MUL, INTERNAL_FUNCTION_PARAM_PASSTHRU);
-}
-/* }}} */
-
-/* {{{ proto mixed variant_and(mixed left, mixed right)
- performs a bitwise AND operation between two variants and returns the result */
-PHP_FUNCTION(variant_and)
-{
- variant_binary_operation(VOP_AND, INTERNAL_FUNCTION_PARAM_PASSTHRU);
-}
-/* }}} */
-
-/* {{{ proto mixed variant_div(mixed left, mixed right)
- Returns the result from dividing two variants */
-PHP_FUNCTION(variant_div)
-{
- variant_binary_operation(VOP_DIV, INTERNAL_FUNCTION_PARAM_PASSTHRU);
-}
-/* }}} */
-
-/* {{{ proto mixed variant_eqv(mixed left, mixed right)
- Performs a bitwise equivalence on two variants */
-PHP_FUNCTION(variant_eqv)
-{
- variant_binary_operation(VOP_EQV, INTERNAL_FUNCTION_PARAM_PASSTHRU);
-}
-/* }}} */
-
-/* {{{ proto mixed variant_idiv(mixed left, mixed right)
- Converts variants to integers and then returns the result from dividing them */
-PHP_FUNCTION(variant_idiv)
-{
- variant_binary_operation(VOP_IDIV, INTERNAL_FUNCTION_PARAM_PASSTHRU);
-}
-/* }}} */
-
-/* {{{ proto mixed variant_imp(mixed left, mixed right)
- Performs a bitwise implication on two variants */
-PHP_FUNCTION(variant_imp)
-{
- variant_binary_operation(VOP_IMP, INTERNAL_FUNCTION_PARAM_PASSTHRU);
-}
-/* }}} */
-
-/* {{{ proto mixed variant_mod(mixed left, mixed right)
- Divides two variants and returns only the remainder */
-PHP_FUNCTION(variant_mod)
-{
- variant_binary_operation(VOP_MOD, INTERNAL_FUNCTION_PARAM_PASSTHRU);
-}
-/* }}} */
-
-/* {{{ proto mixed variant_or(mixed left, mixed right)
- Performs a logical disjunction on two variants */
-PHP_FUNCTION(variant_or)
-{
- variant_binary_operation(VOP_OR, INTERNAL_FUNCTION_PARAM_PASSTHRU);
-}
-/* }}} */
-
-/* {{{ proto mixed variant_pow(mixed left, mixed right)
- Returns the result of performing the power function with two variants */
-PHP_FUNCTION(variant_pow)
-{
- variant_binary_operation(VOP_POW, INTERNAL_FUNCTION_PARAM_PASSTHRU);
-}
-/* }}} */
-
-/* {{{ proto mixed variant_xor(mixed left, mixed right)
- Performs a logical exclusion on two variants */
-PHP_FUNCTION(variant_xor)
-{
- variant_binary_operation(VOP_XOR, INTERNAL_FUNCTION_PARAM_PASSTHRU);
-}
-/* }}} */
-
-static void variant_unary_operation(enum variant_unary_opcode op, INTERNAL_FUNCTION_PARAMETERS) /* {{{ */
-{
- VARIANT vres;
- VARIANT left_val;
- VARIANT *vleft = NULL;
- zval *zleft = NULL;
- php_com_dotnet_object *obj;
- HRESULT result;
- int codepage = CP_ACP;
-
- VariantInit(&left_val);
- VariantInit(&vres);
-
- if (SUCCESS == zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET,
- ZEND_NUM_ARGS() TSRMLS_CC, "O", &zleft, php_com_variant_class_entry)) {
- obj = CDNO_FETCH(zleft);
- vleft = &obj->v;
- } else if (SUCCESS == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC,
- "z!", &zleft)) {
- vleft = &left_val;
- php_com_variant_from_zval(vleft, zleft, codepage TSRMLS_CC);
- } else {
- return;
- }
-
- switch (op) {
- case VOP_ABS:
- result = VarAbs(vleft, &vres);
- break;
- case VOP_FIX:
- result = VarFix(vleft, &vres);
- break;
- case VOP_INT:
- result = VarInt(vleft, &vres);
- break;
- case VOP_NEG:
- result = VarNeg(vleft, &vres);
- break;
- case VOP_NOT:
- result = VarNot(vleft, &vres);
- break;
- }
-
- if (SUCCEEDED(result)) {
- php_com_wrap_variant(return_value, &vres, codepage TSRMLS_CC);
- } else {
- php_com_throw_exception(result, NULL TSRMLS_CC);
- }
-
- VariantClear(&vres);
- VariantClear(&left_val);
-}
-/* }}} */
-
-/* {{{ proto mixed variant_abs(mixed left)
- Returns the absolute value of a variant */
-PHP_FUNCTION(variant_abs)
-{
- variant_unary_operation(VOP_ABS, INTERNAL_FUNCTION_PARAM_PASSTHRU);
-}
-/* }}} */
-
-/* {{{ proto mixed variant_fix(mixed left)
- Returns the integer part ? of a variant */
-PHP_FUNCTION(variant_fix)
-{
- variant_unary_operation(VOP_FIX, INTERNAL_FUNCTION_PARAM_PASSTHRU);
-}
-/* }}} */
-
-/* {{{ proto mixed variant_int(mixed left)
- Returns the integer portion of a variant */
-PHP_FUNCTION(variant_int)
-{
- variant_unary_operation(VOP_INT, INTERNAL_FUNCTION_PARAM_PASSTHRU);
-}
-/* }}} */
-
-/* {{{ proto mixed variant_neg(mixed left)
- Performs logical negation on a variant */
-PHP_FUNCTION(variant_neg)
-{
- variant_unary_operation(VOP_NEG, INTERNAL_FUNCTION_PARAM_PASSTHRU);
-}
-/* }}} */
-
-/* {{{ proto mixed variant_not(mixed left)
- Performs bitwise not negation on a variant */
-PHP_FUNCTION(variant_not)
-{
- variant_unary_operation(VOP_NOT, INTERNAL_FUNCTION_PARAM_PASSTHRU);
-}
-/* }}} */
-
-/* {{{ proto mixed variant_round(mixed left, int decimals)
- Rounds a variant to the specified number of decimal places */
-PHP_FUNCTION(variant_round)
-{
- VARIANT vres;
- VARIANT left_val;
- VARIANT *vleft = NULL;
- zval *zleft = NULL;
- php_com_dotnet_object *obj;
- int codepage = CP_ACP;
- long decimals = 0;
-
- VariantInit(&left_val);
- VariantInit(&vres);
-
- if (SUCCESS == zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET,
- ZEND_NUM_ARGS() TSRMLS_CC, "Ol", &zleft, php_com_variant_class_entry, &decimals)) {
- obj = CDNO_FETCH(zleft);
- vleft = &obj->v;
- } else if (SUCCESS == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC,
- "z!l", &zleft, &decimals)) {
- vleft = &left_val;
- php_com_variant_from_zval(vleft, zleft, codepage TSRMLS_CC);
- } else {
- return;
- }
-
- if (SUCCEEDED(VarRound(vleft, decimals, &vres))) {
- php_com_wrap_variant(return_value, &vres, codepage TSRMLS_CC);
- }
-
- VariantClear(&vres);
- VariantClear(&left_val);
-}
-/* }}} */
-
-/* {{{ proto int variant_cmp(mixed left, mixed right [, int lcid [, int flags]])
- Compares two variants */
-PHP_FUNCTION(variant_cmp)
-{
- VARIANT left_val, right_val;
- VARIANT *vleft = NULL, *vright = NULL;
- zval *zleft = NULL, *zright = NULL;
- php_com_dotnet_object *obj;
- int codepage = CP_ACP;
- long lcid = LOCALE_SYSTEM_DEFAULT;
- long flags = 0;
- /* it is safe to ignore the warning for this line; see the comments in com_handlers.c */
- STDAPI VarCmp(LPVARIANT pvarLeft, LPVARIANT pvarRight, LCID lcid, DWORD flags);
-
- VariantInit(&left_val);
- VariantInit(&right_val);
-
- if (SUCCESS == zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET,
- ZEND_NUM_ARGS() TSRMLS_CC, "OO|ll", &zleft, php_com_variant_class_entry,
- &zright, php_com_variant_class_entry, &lcid, &flags)) {
- obj = CDNO_FETCH(zleft);
- vleft = &obj->v;
- obj = CDNO_FETCH(zright);
- vright = &obj->v;
- } else if (SUCCESS == zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET,
- ZEND_NUM_ARGS() TSRMLS_CC, "Oz!|ll", &zleft, php_com_variant_class_entry,
- &zright, &lcid, &flags)) {
- obj = CDNO_FETCH(zleft);
- vleft = &obj->v;
- vright = &right_val;
- php_com_variant_from_zval(vright, zright, codepage TSRMLS_CC);
- } else if (SUCCESS == zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET,
- ZEND_NUM_ARGS() TSRMLS_CC, "z!O|ll", &zleft, &zright, php_com_variant_class_entry,
- &lcid, &flags)) {
- obj = CDNO_FETCH(zright);
- vright = &obj->v;
- vleft = &left_val;
- php_com_variant_from_zval(vleft, zleft, codepage TSRMLS_CC);
- } else if (SUCCESS == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC,
- "z!z!|ll", &zleft, &zright, &lcid, &flags)) {
-
- vleft = &left_val;
- php_com_variant_from_zval(vleft, zleft, codepage TSRMLS_CC);
-
- vright = &right_val;
- php_com_variant_from_zval(vright, zright, codepage TSRMLS_CC);
-
- } else {
- return;
- }
-
- ZVAL_LONG(return_value, VarCmp(vleft, vright, lcid, flags));
-
- VariantClear(&left_val);
- VariantClear(&right_val);
-}
-/* }}} */
-
-/* {{{ proto int variant_date_to_timestamp(object variant)
- Converts a variant date/time value to unix timestamp */
-PHP_FUNCTION(variant_date_to_timestamp)
-{
- VARIANT vres;
- zval *zleft = NULL;
- php_com_dotnet_object *obj;
-
- VariantInit(&vres);
-
- if (FAILURE == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC,
- "O", &zleft, php_com_variant_class_entry)) {
- return;
- }
- obj = CDNO_FETCH(zleft);
-
- if (SUCCEEDED(VariantChangeType(&vres, &obj->v, 0, VT_DATE))) {
- SYSTEMTIME systime;
- struct tm tmv;
-
- VariantTimeToSystemTime(V_DATE(&vres), &systime);
-
- memset(&tmv, 0, sizeof(tmv));
- tmv.tm_year = systime.wYear - 1900;
- tmv.tm_mon = systime.wMonth - 1;
- tmv.tm_mday = systime.wDay;
- tmv.tm_hour = systime.wHour;
- tmv.tm_min = systime.wMinute;
- tmv.tm_sec = systime.wSecond;
- tmv.tm_isdst = -1;
-
- tzset();
- RETVAL_LONG(mktime(&tmv));
- }
-
- VariantClear(&vres);
-}
-/* }}} */
-
-/* {{{ proto object variant_date_from_timestamp(int timestamp)
- Returns a variant date representation of a unix timestamp */
-PHP_FUNCTION(variant_date_from_timestamp)
-{
- long timestamp;
- SYSTEMTIME systime;
- struct tm *tmv;
- VARIANT res;
-
- if (FAILURE == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l",
- &timestamp)) {
- return;
- }
-
- VariantInit(&res);
- tzset();
- tmv = localtime(&timestamp);
- memset(&systime, 0, sizeof(systime));
-
- systime.wDay = tmv->tm_mday;
- systime.wHour = tmv->tm_hour;
- systime.wMinute = tmv->tm_min;
- systime.wMonth = tmv->tm_mon + 1;
- systime.wSecond = tmv->tm_sec;
- systime.wYear = tmv->tm_year + 1900;
-
- V_VT(&res) = VT_DATE;
- SystemTimeToVariantTime(&systime, &V_DATE(&res));
-
- php_com_wrap_variant(return_value, &res, CP_ACP TSRMLS_CC);
-
- VariantClear(&res);
-}
-/* }}} */
-
-/* {{{ proto int variant_get_type(object variant)
- Returns the VT_XXX type code for a variant */
-PHP_FUNCTION(variant_get_type)
-{
- zval *zobj;
- php_com_dotnet_object *obj;
-
- if (FAILURE == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC,
- "O", &zobj, php_com_variant_class_entry)) {
- return;
- }
- obj = CDNO_FETCH(zobj);
-
- RETURN_LONG(V_VT(&obj->v));
-}
-/* }}} */
-
-/* {{{ proto void variant_set_type(object variant, int type)
- Convert a variant into another type. Variant is modified "in-place" */
-PHP_FUNCTION(variant_set_type)
-{
- zval *zobj;
- php_com_dotnet_object *obj;
- /* VARTYPE == unsigned short */ long vt;
- HRESULT res;
-
- if (FAILURE == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC,
- "Ol", &zobj, php_com_variant_class_entry, &vt)) {
- return;
- }
- obj = CDNO_FETCH(zobj);
-
- res = VariantChangeType(&obj->v, &obj->v, 0, (VARTYPE)vt);
-
- if (SUCCEEDED(res)) {
- if (vt != VT_DISPATCH && obj->typeinfo) {
- ITypeInfo_Release(obj->typeinfo);
- obj->typeinfo = NULL;
- }
- } else {
- char *werr, *msg;
-
- werr = php_win_err(res);
- spprintf(&msg, 0, "Variant type conversion failed: %s", werr);
- LocalFree(werr);
-
- php_com_throw_exception(res, msg TSRMLS_CC);
- efree(msg);
- }
-}
-/* }}} */
-
-/* {{{ proto object variant_cast(object variant, int type)
- Convert a variant into a new variant object of another type */
-PHP_FUNCTION(variant_cast)
-{
- zval *zobj;
- php_com_dotnet_object *obj;
- /* VARTYPE == unsigned short */ long vt;
- VARIANT vres;
- HRESULT res;
-
- if (FAILURE == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC,
- "Ol", &zobj, php_com_variant_class_entry, &vt)) {
- return;
- }
- obj = CDNO_FETCH(zobj);
-
- VariantInit(&vres);
- res = VariantChangeType(&vres, &obj->v, 0, (VARTYPE)vt);
-
- if (SUCCEEDED(res)) {
- php_com_wrap_variant(return_value, &vres, obj->code_page TSRMLS_CC);
- } else {
- char *werr, *msg;
-
- werr = php_win_err(res);
- spprintf(&msg, 0, "Variant type conversion failed: %s", werr);
- LocalFree(werr);
-
- php_com_throw_exception(res, msg TSRMLS_CC);
- efree(msg);
- }
-
- VariantClear(&vres);
-}
-/* }}} */
-
diff --git a/ext/com_dotnet/com_wrapper.c b/ext/com_dotnet/com_wrapper.c
deleted file mode 100644
index eb1564900b..0000000000
--- a/ext/com_dotnet/com_wrapper.c
+++ /dev/null
@@ -1,635 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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@thebrainroom.com> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-/* This module exports a PHP object as a COM object by wrapping it
- * using IDispatchEx */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "php.h"
-#include "php_ini.h"
-#include "ext/standard/info.h"
-#include "php_com_dotnet.h"
-#include "php_com_dotnet_internal.h"
-
-typedef struct {
- /* This first part MUST match the declaration
- * of interface IDispatchEx */
- CONST_VTBL struct IDispatchExVtbl *lpVtbl;
-
- /* now the PHP stuff */
-
- DWORD engine_thread; /* for sanity checking */
- zval *object; /* the object exported */
- LONG refcount; /* COM reference count */
-
- HashTable *dispid_to_name; /* keep track of dispid -> name mappings */
- HashTable *name_to_dispid; /* keep track of name -> dispid mappings */
-
- GUID sinkid; /* iid that we "implement" for event sinking */
-
- int id;
-} php_dispatchex;
-
-static int le_dispatch;
-
-static void disp_destructor(php_dispatchex *disp);
-
-static void dispatch_dtor(zend_rsrc_list_entry *rsrc TSRMLS_DC)
-{
- php_dispatchex *disp = (php_dispatchex *)rsrc->ptr;
- disp_destructor(disp);
-}
-
-int php_com_wrapper_minit(INIT_FUNC_ARGS)
-{
- le_dispatch = zend_register_list_destructors_ex(dispatch_dtor,
- NULL, "com_dotnet_dispatch_wrapper", module_number);
- return le_dispatch;
-}
-
-
-/* {{{ trace */
-static inline void trace(char *fmt, ...)
-{
- va_list ap;
- char buf[4096];
-
- sprintf(buf, "T=%08x ", GetCurrentThreadId());
- OutputDebugString(buf);
-
- va_start(ap, fmt);
- vsnprintf(buf, sizeof(buf), fmt, ap);
-
- OutputDebugString(buf);
-
- va_end(ap);
-}
-/* }}} */
-
-#ifdef ZTS
-# define TSRMLS_FIXED() TSRMLS_FETCH();
-#else
-# define TSRMLS_FIXED()
-#endif
-
-#define FETCH_DISP(methname) \
- TSRMLS_FIXED() \
- php_dispatchex *disp = (php_dispatchex*)This; \
- trace(" PHP:%s %s\n", Z_OBJCE_P(disp->object)->name, methname); \
- if (GetCurrentThreadId() != disp->engine_thread) \
- return RPC_E_WRONG_THREAD;
-
-
-static HRESULT STDMETHODCALLTYPE disp_queryinterface(
- IDispatchEx *This,
- /* [in] */ REFIID riid,
- /* [iid_is][out] */ void **ppvObject)
-{
- FETCH_DISP("QueryInterface");
-
- if (IsEqualGUID(&IID_IUnknown, riid) ||
- IsEqualGUID(&IID_IDispatch, riid) ||
- IsEqualGUID(&IID_IDispatchEx, riid) ||
- IsEqualGUID(&disp->sinkid, riid)) {
- *ppvObject = This;
- InterlockedIncrement(&disp->refcount);
- return S_OK;
- }
-
- *ppvObject = NULL;
- return E_NOINTERFACE;
-}
-
-static ULONG STDMETHODCALLTYPE disp_addref(IDispatchEx *This)
-{
- FETCH_DISP("AddRef");
-
- return InterlockedIncrement(&disp->refcount);
-}
-
-static ULONG STDMETHODCALLTYPE disp_release(IDispatchEx *This)
-{
- ULONG ret;
- FETCH_DISP("Release");
-
- ret = InterlockedDecrement(&disp->refcount);
- trace("-- refcount now %d\n", ret);
- if (ret == 0) {
- /* destroy it */
- if (disp->id)
- zend_list_delete(disp->id);
- }
- return ret;
-}
-
-static HRESULT STDMETHODCALLTYPE disp_gettypeinfocount(
- IDispatchEx *This,
- /* [out] */ UINT *pctinfo)
-{
- FETCH_DISP("GetTypeInfoCount");
-
- *pctinfo = 0;
- return S_OK;
-}
-
-static HRESULT STDMETHODCALLTYPE disp_gettypeinfo(
- IDispatchEx *This,
- /* [in] */ UINT iTInfo,
- /* [in] */ LCID lcid,
- /* [out] */ ITypeInfo **ppTInfo)
-{
- FETCH_DISP("GetTypeInfo");
-
- *ppTInfo = NULL;
- return DISP_E_BADINDEX;
-}
-
-static HRESULT STDMETHODCALLTYPE disp_getidsofnames(
- IDispatchEx *This,
- /* [in] */ REFIID riid,
- /* [size_is][in] */ LPOLESTR *rgszNames,
- /* [in] */ UINT cNames,
- /* [in] */ LCID lcid,
- /* [size_is][out] */ DISPID *rgDispId)
-{
- UINT i;
- HRESULT ret = S_OK;
- FETCH_DISP("GetIDsOfNames");
-
- for (i = 0; i < cNames; i++) {
- char *name;
- unsigned int namelen;
- zval **tmp;
-
- name = php_com_olestring_to_string(rgszNames[i], &namelen, COMG(code_page) TSRMLS_CC);
-
- /* Lookup the name in the hash */
- if (zend_hash_find(disp->name_to_dispid, name, namelen+1, (void**)&tmp) == FAILURE) {
- ret = DISP_E_UNKNOWNNAME;
- rgDispId[i] = 0;
- } else {
- rgDispId[i] = Z_LVAL_PP(tmp);
- }
-
- efree(name);
-
- }
-
- return ret;
-}
-
-static HRESULT STDMETHODCALLTYPE disp_invoke(
- IDispatchEx *This,
- /* [in] */ DISPID dispIdMember,
- /* [in] */ REFIID riid,
- /* [in] */ LCID lcid,
- /* [in] */ WORD wFlags,
- /* [out][in] */ DISPPARAMS *pDispParams,
- /* [out] */ VARIANT *pVarResult,
- /* [out] */ EXCEPINFO *pExcepInfo,
- /* [out] */ UINT *puArgErr)
-{
- return This->lpVtbl->InvokeEx(This, dispIdMember,
- lcid, wFlags, pDispParams,
- pVarResult, pExcepInfo, NULL);
-}
-
-static HRESULT STDMETHODCALLTYPE disp_getdispid(
- IDispatchEx *This,
- /* [in] */ BSTR bstrName,
- /* [in] */ DWORD grfdex,
- /* [out] */ DISPID *pid)
-{
- HRESULT ret = DISP_E_UNKNOWNNAME;
- char *name;
- unsigned int namelen;
- zval **tmp;
- FETCH_DISP("GetDispID");
-
- name = php_com_olestring_to_string(bstrName, &namelen, COMG(code_page) TSRMLS_CC);
-
- trace("Looking for %s, namelen=%d in %p\n", name, namelen, disp->name_to_dispid);
-
- /* Lookup the name in the hash */
- if (zend_hash_find(disp->name_to_dispid, name, namelen+1, (void**)&tmp) == SUCCESS) {
- trace("found it\n");
- *pid = Z_LVAL_PP(tmp);
- ret = S_OK;
- }
-
- efree(name);
-
- return ret;
-}
-
-static HRESULT STDMETHODCALLTYPE disp_invokeex(
- IDispatchEx *This,
- /* [in] */ DISPID id,
- /* [in] */ LCID lcid,
- /* [in] */ WORD wFlags,
- /* [in] */ DISPPARAMS *pdp,
- /* [out] */ VARIANT *pvarRes,
- /* [out] */ EXCEPINFO *pei,
- /* [unique][in] */ IServiceProvider *pspCaller)
-{
- zval **name;
- UINT i;
- zval *retval = NULL;
- zval ***params = NULL;
- HRESULT ret = DISP_E_MEMBERNOTFOUND;
- FETCH_DISP("InvokeEx");
-
- if (SUCCESS == zend_hash_index_find(disp->dispid_to_name, id, (void**)&name)) {
- /* TODO: add support for overloaded objects */
-
- trace("-- Invoke: %d %20s [%d] flags=%08x args=%d\n", id, Z_STRVAL_PP(name), Z_STRLEN_PP(name), wFlags, pdp->cArgs);
-
- /* convert args into zvals.
- * Args are in reverse order */
- if (pdp->cArgs) {
- params = (zval ***)safe_emalloc(sizeof(zval **), pdp->cArgs, 0);
- for (i = 0; i < pdp->cArgs; i++) {
- VARIANT *arg;
- zval *zarg;
-
- arg = &pdp->rgvarg[ pdp->cArgs - 1 - i];
-
- trace("alloc zval for arg %d VT=%08x\n", i, V_VT(arg));
-
- ALLOC_INIT_ZVAL(zarg);
- php_com_wrap_variant(zarg, arg, COMG(code_page) TSRMLS_CC);
- params[i] = (zval**)emalloc(sizeof(zval**));
- *params[i] = zarg;
- }
- }
-
- trace("arguments processed, prepare to do some work\n");
-
- /* TODO: if PHP raises an exception here, we should catch it
- * and expose it as a COM exception */
-
- if (wFlags & DISPATCH_PROPERTYGET) {
- retval = zend_read_property(Z_OBJCE_P(disp->object), disp->object, Z_STRVAL_PP(name), Z_STRLEN_PP(name)+1, 1 TSRMLS_CC);
- } else if (wFlags & DISPATCH_PROPERTYPUT) {
- zend_update_property(Z_OBJCE_P(disp->object), disp->object, Z_STRVAL_PP(name), Z_STRLEN_PP(name)+1, *params[0] TSRMLS_CC);
- } else if (wFlags & DISPATCH_METHOD) {
- zend_try {
- if (SUCCESS == call_user_function_ex(EG(function_table), &disp->object, *name,
- &retval, pdp->cArgs, params, 1, NULL TSRMLS_CC)) {
- ret = S_OK;
- trace("function called ok\n");
- } else {
- trace("failed to call func\n");
- ret = DISP_E_EXCEPTION;
- }
- } zend_catch {
- trace("something blew up\n");
- ret = DISP_E_EXCEPTION;
- } zend_end_try();
- } else {
- trace("Don't know how to handle this invocation %08x\n", wFlags);
- }
-
- /* release arguments */
- if (params) {
- for (i = 0; i < pdp->cArgs; i++) {
- zval_ptr_dtor(params[i]);
- efree(params[i]);
- }
- efree(params);
- }
-
- /* return value */
- if (retval) {
- if (pvarRes) {
- VariantInit(pvarRes);
- php_com_variant_from_zval(pvarRes, retval, COMG(code_page) TSRMLS_CC);
- }
- zval_ptr_dtor(&retval);
- } else if (pvarRes) {
- VariantInit(pvarRes);
- }
-
- } else {
- trace("InvokeEx: I don't support DISPID=%d\n", id);
- }
-
- return ret;
-}
-
-static HRESULT STDMETHODCALLTYPE disp_deletememberbyname(
- IDispatchEx *This,
- /* [in] */ BSTR bstrName,
- /* [in] */ DWORD grfdex)
-{
- FETCH_DISP("DeleteMemberByName");
-
- /* TODO: unset */
-
- return S_FALSE;
-}
-
-static HRESULT STDMETHODCALLTYPE disp_deletememberbydispid(
- IDispatchEx *This,
- /* [in] */ DISPID id)
-{
- FETCH_DISP("DeleteMemberByDispID");
-
- /* TODO: unset */
-
- return S_FALSE;
-}
-
-static HRESULT STDMETHODCALLTYPE disp_getmemberproperties(
- IDispatchEx *This,
- /* [in] */ DISPID id,
- /* [in] */ DWORD grfdexFetch,
- /* [out] */ DWORD *pgrfdex)
-{
- FETCH_DISP("GetMemberProperties");
-
- return DISP_E_UNKNOWNNAME;
-}
-
-static HRESULT STDMETHODCALLTYPE disp_getmembername(
- IDispatchEx *This,
- /* [in] */ DISPID id,
- /* [out] */ BSTR *pbstrName)
-{
- zval *name;
- FETCH_DISP("GetMemberName");
-
- if (SUCCESS == zend_hash_index_find(disp->dispid_to_name, id, (void**)&name)) {
- OLECHAR *olestr = php_com_string_to_olestring(Z_STRVAL_P(name), Z_STRLEN_P(name), COMG(code_page) TSRMLS_CC);
- *pbstrName = SysAllocString(olestr);
- efree(olestr);
- return S_OK;
- } else {
- return DISP_E_UNKNOWNNAME;
- }
-}
-
-static HRESULT STDMETHODCALLTYPE disp_getnextdispid(
- IDispatchEx *This,
- /* [in] */ DWORD grfdex,
- /* [in] */ DISPID id,
- /* [out] */ DISPID *pid)
-{
- ulong next = id+1;
- FETCH_DISP("GetNextDispID");
-
- while(!zend_hash_index_exists(disp->dispid_to_name, next))
- next++;
-
- if (zend_hash_index_exists(disp->dispid_to_name, next)) {
- *pid = next;
- return S_OK;
- }
- return S_FALSE;
-}
-
-static HRESULT STDMETHODCALLTYPE disp_getnamespaceparent(
- IDispatchEx *This,
- /* [out] */ IUnknown **ppunk)
-{
- FETCH_DISP("GetNameSpaceParent");
-
- *ppunk = NULL;
- return E_NOTIMPL;
-}
-
-static struct IDispatchExVtbl php_dispatch_vtbl = {
- disp_queryinterface,
- disp_addref,
- disp_release,
- disp_gettypeinfocount,
- disp_gettypeinfo,
- disp_getidsofnames,
- disp_invoke,
- disp_getdispid,
- disp_invokeex,
- disp_deletememberbyname,
- disp_deletememberbydispid,
- disp_getmemberproperties,
- disp_getmembername,
- disp_getnextdispid,
- disp_getnamespaceparent
-};
-
-
-/* enumerate functions and properties of the object and assign
- * dispatch ids */
-static void generate_dispids(php_dispatchex *disp TSRMLS_DC)
-{
- HashPosition pos;
- char *name = NULL;
- zval *tmp;
- int namelen;
- int keytype;
- ulong pid;
-
- if (disp->dispid_to_name == NULL) {
- ALLOC_HASHTABLE(disp->dispid_to_name);
- ALLOC_HASHTABLE(disp->name_to_dispid);
- zend_hash_init(disp->name_to_dispid, 0, NULL, ZVAL_PTR_DTOR, 0);
- zend_hash_init(disp->dispid_to_name, 0, NULL, ZVAL_PTR_DTOR, 0);
- }
-
- /* properties */
- if (Z_OBJPROP_P(disp->object)) {
- zend_hash_internal_pointer_reset_ex(Z_OBJPROP_P(disp->object), &pos);
- while (HASH_KEY_NON_EXISTANT != (keytype =
- zend_hash_get_current_key_ex(Z_OBJPROP_P(disp->object), &name,
- &namelen, &pid, 0, &pos))) {
- char namebuf[32];
- if (keytype == HASH_KEY_IS_LONG) {
- sprintf(namebuf, "%d", pid);
- name = namebuf;
- namelen = strlen(namebuf)+1;
- }
-
- zend_hash_move_forward_ex(Z_OBJPROP_P(disp->object), &pos);
-
- /* Find the existing id */
- if (zend_hash_find(disp->name_to_dispid, name, namelen, (void**)&tmp) == SUCCESS)
- continue;
-
- /* add the mappings */
- MAKE_STD_ZVAL(tmp);
- ZVAL_STRINGL(tmp, name, namelen-1, 1);
- zend_hash_index_update(disp->dispid_to_name, pid, (void*)&tmp, sizeof(zval *), NULL);
-
- MAKE_STD_ZVAL(tmp);
- ZVAL_LONG(tmp, pid);
- zend_hash_update(disp->name_to_dispid, name, namelen, (void*)&tmp, sizeof(zval *), NULL);
- }
- }
-
- /* functions */
- if (Z_OBJCE_P(disp->object)) {
- zend_hash_internal_pointer_reset_ex(&Z_OBJCE_P(disp->object)->function_table, &pos);
- while (HASH_KEY_NON_EXISTANT != (keytype =
- zend_hash_get_current_key_ex(&Z_OBJCE_P(disp->object)->function_table,
- &name, &namelen, &pid, 0, &pos))) {
-
- char namebuf[32];
- if (keytype == HASH_KEY_IS_LONG) {
- sprintf(namebuf, "%d", pid);
- name = namebuf;
- namelen = strlen(namebuf) + 1;
- }
-
- zend_hash_move_forward_ex(Z_OBJPROP_P(disp->object), &pos);
-
- /* Find the existing id */
- if (zend_hash_find(disp->name_to_dispid, name, namelen, (void**)&tmp) == SUCCESS)
- continue;
-
- /* add the mappings */
- MAKE_STD_ZVAL(tmp);
- ZVAL_STRINGL(tmp, name, namelen-1, 1);
- zend_hash_index_update(disp->dispid_to_name, pid, (void*)&tmp, sizeof(zval *), NULL);
-
- MAKE_STD_ZVAL(tmp);
- ZVAL_LONG(tmp, pid);
- zend_hash_update(disp->name_to_dispid, name, namelen, (void*)&tmp, sizeof(zval *), NULL);
- }
- }
-}
-
-static php_dispatchex *disp_constructor(zval *object TSRMLS_DC)
-{
- php_dispatchex *disp = (php_dispatchex*)CoTaskMemAlloc(sizeof(php_dispatchex));
-
- trace("constructing a COM proxy\n");
-
- if (disp == NULL)
- return NULL;
-
- memset(disp, 0, sizeof(php_dispatchex));
-
- disp->engine_thread = GetCurrentThreadId();
- disp->lpVtbl = &php_dispatch_vtbl;
- disp->refcount = 1;
-
-
- if (object)
- ZVAL_ADDREF(object);
- disp->object = object;
-
- disp->id = zend_list_insert(disp, le_dispatch);
-
- return disp;
-}
-
-static void disp_destructor(php_dispatchex *disp)
-{
- TSRMLS_FETCH();
-
- trace("destroying COM wrapper for PHP object %s\n", Z_OBJCE_P(disp->object)->name);
-
- disp->id = 0;
-
- if (disp->refcount > 0)
- CoDisconnectObject((IUnknown*)disp, 0);
-
- zend_hash_destroy(disp->dispid_to_name);
- zend_hash_destroy(disp->name_to_dispid);
- FREE_HASHTABLE(disp->dispid_to_name);
- FREE_HASHTABLE(disp->name_to_dispid);
-
- if (disp->object)
- zval_ptr_dtor(&disp->object);
-
- CoTaskMemFree(disp);
-}
-
-PHPAPI IDispatch *php_com_wrapper_export_as_sink(zval *val, GUID *sinkid,
- HashTable *id_to_name TSRMLS_DC)
-{
- php_dispatchex *disp = disp_constructor(val TSRMLS_CC);
- HashPosition pos;
- char *name = NULL;
- zval *tmp, **ntmp;
- int namelen;
- int keytype;
- ulong pid;
-
- disp->dispid_to_name = id_to_name;
-
- memcpy(&disp->sinkid, sinkid, sizeof(disp->sinkid));
-
- /* build up the reverse mapping */
- ALLOC_HASHTABLE(disp->name_to_dispid);
- zend_hash_init(disp->name_to_dispid, 0, NULL, ZVAL_PTR_DTOR, 0);
-
- zend_hash_internal_pointer_reset_ex(id_to_name, &pos);
- while (HASH_KEY_NON_EXISTANT != (keytype =
- zend_hash_get_current_key_ex(id_to_name, &name, &namelen, &pid, 0, &pos))) {
-
- if (keytype == HASH_KEY_IS_LONG) {
-
- zend_hash_get_current_data_ex(id_to_name, (void**)&ntmp, &pos);
-
- MAKE_STD_ZVAL(tmp);
- ZVAL_LONG(tmp, pid);
- zend_hash_update(disp->name_to_dispid, Z_STRVAL_PP(ntmp),
- Z_STRLEN_PP(ntmp)+1, (void*)&tmp, sizeof(zval *), NULL);
- }
-
- zend_hash_move_forward_ex(id_to_name, &pos);
- }
-
- return (IDispatch*)disp;
-}
-
-PHPAPI IDispatch *php_com_wrapper_export(zval *val TSRMLS_DC)
-{
- php_dispatchex *disp = NULL;
-
- if (Z_TYPE_P(val) != IS_OBJECT) {
- return NULL;
- }
-
- if (php_com_is_valid_object(val TSRMLS_CC)) {
- /* pass back its IDispatch directly */
- php_com_dotnet_object *obj = CDNO_FETCH(val);
-
- if (obj == NULL)
- return NULL;
-
- if (V_VT(&obj->v) == VT_DISPATCH && V_DISPATCH(&obj->v)) {
- IDispatch_AddRef(V_DISPATCH(&obj->v));
- return V_DISPATCH(&obj->v);
- }
-
- return NULL;
- }
-
- disp = disp_constructor(val TSRMLS_CC);
- generate_dispids(disp TSRMLS_CC);
-
- return (IDispatch*)disp;
-}
-
-
diff --git a/ext/com_dotnet/config.w32 b/ext/com_dotnet/config.w32
deleted file mode 100644
index 1526392c24..0000000000
--- a/ext/com_dotnet/config.w32
+++ /dev/null
@@ -1,13 +0,0 @@
-// $Id$
-// vim:ft=javascript
-
-ARG_ENABLE("com-dotnet", "COM and .Net support", "yes");
-
-if (PHP_COM_DOTNET == "yes") {
- CHECK_LIB('oleaut32.lib', 'com_dotnet');
- EXTENSION("com_dotnet", "com_com.c com_dotnet.c com_extension.c \
- com_handlers.c com_iterator.c com_misc.c com_olechar.c \
- com_typeinfo.c com_variant.c com_wrapper.c com_saproxy.c com_persist.c");
- AC_DEFINE('HAVE_COM_DOTNET', 1, 'Have COM_DOTNET support');
- CHECK_HEADER_ADD_INCLUDE('mscoree.h', 'CFLAGS_COM_DOTNET');
-}
diff --git a/ext/com_dotnet/package.xml b/ext/com_dotnet/package.xml
deleted file mode 100644
index f9976245a8..0000000000
--- a/ext/com_dotnet/package.xml
+++ /dev/null
@@ -1,52 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1" ?>
-<!DOCTYPE package SYSTEM "../pear/package.dtd">
-<package>
- <name>com_dotnet</name>
- <summary>Com and .NET support functions for Windows</summary>
- <maintainers>
- <maintainer>
- <user>wez</user>
- <name>Wez Furlong</name>
- <email>wez@php.net</email>
- <role>lead</role>
- </maintainer>
- </maintainers>
- <description>
-...
- </description>
- <license>PHP</license>
- <release>
- <state>beta</state>
- <version>5.0.0rc1</version>
- <date>2004-03-19</date>
- <notes>
-package.xml added to support intallation using pear installer
- </notes>
- <filelist>
- <file role="doc" name="CREDITS"/>
- <file role="doc" name="README"/>
- <file role="src" name="config.w32"/>
- <file role="src" name="com_com.c"/>
- <file role="src" name="com_dotnet.c"/>
- <file role="src" name="com_extension.c"/>
- <file role="src" name="com_handlers.c"/>
- <file role="src" name="com_misc.c"/>
- <file role="src" name="com_olechar.c"/>
- <file role="src" name="com_typeinfo.c"/>
- <file role="src" name="com_variant.c"/>
- <file role="src" name="com_iterator.c"/>
- <file role="src" name="com_saproxy.c"/>
- <file role="src" name="com_wrapper.c"/>
- <file role="src" name="php_com_dotnet.h"/>
- <file role="src" name="php_com_dotnet_internal.h"/>
- <file role="test" name="tests/variants.phpt"/>
- </filelist>
- <deps>
- <dep type="php" rel="ge" version="5" />
- <!-- doesn't work yet <dep type="os" rel="has" name="windows"/> -->
- </deps>
- </release>
-</package>
-<!--
-vim:et:ts=1:sw=1
--->
diff --git a/ext/com_dotnet/php_com_dotnet.h b/ext/com_dotnet/php_com_dotnet.h
deleted file mode 100644
index 42fa8f0936..0000000000
--- a/ext/com_dotnet/php_com_dotnet.h
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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@thebrainroom.com> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-#ifndef PHP_COM_DOTNET_H
-#define PHP_COM_DOTNET_H
-
-extern zend_module_entry com_dotnet_module_entry;
-#define phpext_com_dotnet_ptr &com_dotnet_module_entry
-
-#ifdef PHP_WIN32
-# define PHP_COM_DOTNET_API __declspec(dllexport)
-#else
-# define PHP_COM_DOTNET_API
-#endif
-
-#ifdef ZTS
-#include "TSRM.h"
-#endif
-
-PHP_MINIT_FUNCTION(com_dotnet);
-PHP_MSHUTDOWN_FUNCTION(com_dotnet);
-PHP_RINIT_FUNCTION(com_dotnet);
-PHP_RSHUTDOWN_FUNCTION(com_dotnet);
-PHP_MINFO_FUNCTION(com_dotnet);
-
-ZEND_BEGIN_MODULE_GLOBALS(com_dotnet)
- zend_bool allow_dcom;
- zend_bool autoreg_verbose;
- zend_bool autoreg_on;
- zend_bool autoreg_case_sensitive;
- void *dotnet_runtime_stuff; /* opaque to avoid cluttering up other modules */
- int code_page; /* default code_page if left unspecified */
-ZEND_END_MODULE_GLOBALS(com_dotnet)
-
-#ifdef ZTS
-# define COMG(v) TSRMG(com_dotnet_globals_id, zend_com_dotnet_globals *, v)
-#else
-# define COMG(v) (com_dotnet_globals.v)
-#endif
-
-extern ZEND_DECLARE_MODULE_GLOBALS(com_dotnet);
-
-#endif /* PHP_COM_DOTNET_H */
-
-/*
- * 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/com_dotnet/php_com_dotnet_internal.h b/ext/com_dotnet/php_com_dotnet_internal.h
deleted file mode 100644
index f24f7cfbfb..0000000000
--- a/ext/com_dotnet/php_com_dotnet_internal.h
+++ /dev/null
@@ -1,183 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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@thebrainroom.com> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-#ifndef PHP_COM_DOTNET_INTERNAL_H
-#define PHP_COM_DOTNET_INTERNAL_H
-
-#define _WIN32_DCOM
-#define COBJMACROS
-#include <ocidl.h>
-#include <oleauto.h>
-#include <unknwn.h>
-#include <dispex.h>
-#include "win32/winutil.h"
-
-/* brain-death in winutil.h defines the macro to hide the useful function... */
-#undef php_win_err
-
-typedef struct _php_com_dotnet_object {
- VARIANT v;
-
- ITypeInfo *typeinfo;
- long code_page;
- unsigned int have_default_bind:1;
-
- zend_class_entry *ce;
- DISPID default_bind; /* default property for array accesses */
-
- /* associated event sink */
- IDispatch *sink_dispatch;
- GUID sink_id;
- DWORD sink_cookie;
-
- /* cache for method signatures */
- HashTable *method_cache;
- /* cache for name -> DISPID */
- HashTable *id_of_name_cache;
-} php_com_dotnet_object;
-
-static inline int php_com_is_valid_object(zval *zv TSRMLS_DC)
-{
- zend_class_entry *ce = Z_OBJCE_P(zv);
- return strcmp("com", ce->name) == 0 ||
- strcmp("dotnet", ce->name) == 0 ||
- strcmp("variant", ce->name) == 0;
-}
-
-#define CDNO_FETCH(zv) (php_com_dotnet_object*)zend_object_store_get_object(zv TSRMLS_CC)
-#define CDNO_FETCH_VERIFY(obj, zv) do { \
- if (!php_com_is_valid_object(zv TSRMLS_CC)) { \
- php_com_throw_exception(E_UNEXPECTED, "expected a variant object" TSRMLS_CC); \
- return; \
- } \
- obj = (php_com_dotnet_object*)zend_object_store_get_object(zv TSRMLS_CC); \
-} while(0)
-
-/* com_extension.c */
-TsHashTable php_com_typelibraries;
-zend_class_entry *php_com_variant_class_entry, *php_com_exception_class_entry, *php_com_saproxy_class_entry;
-
-/* com_handlers.c */
-zend_object_value php_com_object_new(zend_class_entry *ce TSRMLS_DC);
-void php_com_object_clone(void *object, void **clone_ptr TSRMLS_DC);
-void php_com_object_free_storage(void *object TSRMLS_DC);
-zend_object_handlers php_com_object_handlers;
-void php_com_object_enable_event_sink(php_com_dotnet_object *obj, int enable TSRMLS_DC);
-
-/* com_saproxy.c */
-zend_object_iterator *php_com_saproxy_iter_get(zend_class_entry *ce, zval *object TSRMLS_DC);
-int php_com_saproxy_create(zval *com_object, zval *proxy_out, zval *index TSRMLS_DC);
-
-/* com_olechar.c */
-PHPAPI char *php_com_olestring_to_string(OLECHAR *olestring,
- uint *string_len, int codepage TSRMLS_DC);
-PHPAPI OLECHAR *php_com_string_to_olestring(char *string,
- uint string_len, int codepage TSRMLS_DC);
-
-
-/* com_com.c */
-PHP_FUNCTION(com_create_instance);
-PHP_FUNCTION(com_event_sink);
-PHP_FUNCTION(com_create_guid);
-PHP_FUNCTION(com_print_typeinfo);
-PHP_FUNCTION(com_message_pump);
-PHP_FUNCTION(com_load_typelib);
-PHP_FUNCTION(com_get_active_object);
-
-HRESULT php_com_invoke_helper(php_com_dotnet_object *obj, DISPID id_member,
- WORD flags, DISPPARAMS *disp_params, VARIANT *v TSRMLS_DC);
-HRESULT php_com_get_id_of_name(php_com_dotnet_object *obj, char *name,
- int namelen, DISPID *dispid TSRMLS_DC);
-int php_com_do_invoke_by_id(php_com_dotnet_object *obj, DISPID dispid,
- WORD flags, VARIANT *v, int nargs, zval **args TSRMLS_DC);
-int php_com_do_invoke(php_com_dotnet_object *obj, char *name, int namelen,
- WORD flags, VARIANT *v, int nargs, zval **args TSRMLS_DC);
-int php_com_do_invoke_byref(php_com_dotnet_object *obj, char *name, int namelen,
- WORD flags, VARIANT *v, int nargs, zval ***args TSRMLS_DC);
-
-/* com_wrapper.c */
-int php_com_wrapper_minit(INIT_FUNC_ARGS);
-PHPAPI IDispatch *php_com_wrapper_export_as_sink(zval *val, GUID *sinkid, HashTable *id_to_name TSRMLS_DC);
-PHPAPI IDispatch *php_com_wrapper_export(zval *val TSRMLS_DC);
-
-/* com_persist.c */
-int php_com_persist_minit(INIT_FUNC_ARGS);
-
-/* com_variant.c */
-PHP_FUNCTION(com_variant_create_instance);
-PHP_FUNCTION(variant_set);
-PHP_FUNCTION(variant_add);
-PHP_FUNCTION(variant_cat);
-PHP_FUNCTION(variant_sub);
-PHP_FUNCTION(variant_mul);
-PHP_FUNCTION(variant_and);
-PHP_FUNCTION(variant_div);
-PHP_FUNCTION(variant_eqv);
-PHP_FUNCTION(variant_idiv);
-PHP_FUNCTION(variant_imp);
-PHP_FUNCTION(variant_mod);
-PHP_FUNCTION(variant_or);
-PHP_FUNCTION(variant_pow);
-PHP_FUNCTION(variant_xor);
-PHP_FUNCTION(variant_abs);
-PHP_FUNCTION(variant_fix);
-PHP_FUNCTION(variant_int);
-PHP_FUNCTION(variant_neg);
-PHP_FUNCTION(variant_not);
-PHP_FUNCTION(variant_round);
-PHP_FUNCTION(variant_cmp);
-PHP_FUNCTION(variant_date_to_timestamp);
-PHP_FUNCTION(variant_date_from_timestamp);
-PHP_FUNCTION(variant_get_type);
-PHP_FUNCTION(variant_set_type);
-PHP_FUNCTION(variant_cast);
-
-PHPAPI void php_com_variant_from_zval_with_type(VARIANT *v, zval *z, VARTYPE type, int codepage TSRMLS_DC);
-PHPAPI void php_com_variant_from_zval(VARIANT *v, zval *z, int codepage TSRMLS_DC);
-PHPAPI int php_com_zval_from_variant(zval *z, VARIANT *v, int codepage TSRMLS_DC);
-
-/* com_dotnet.c */
-PHP_FUNCTION(com_dotnet_create_instance);
-void php_com_dotnet_rshutdown(TSRMLS_D);
-void php_com_dotnet_mshutdown(TSRMLS_D);
-
-/* com_misc.c */
-void php_com_throw_exception(HRESULT code, char *message TSRMLS_DC);
-PHPAPI void php_com_wrap_dispatch(zval *z, IDispatch *disp,
- int codepage TSRMLS_DC);
-PHPAPI void php_com_wrap_variant(zval *z, VARIANT *v,
- int codepage TSRMLS_DC);
-PHPAPI int php_com_safearray_get_elem(VARIANT *array, VARIANT *dest, LONG dim1 TSRMLS_DC);
-
-/* com_typeinfo.c */
-PHPAPI ITypeLib *php_com_load_typelib_via_cache(char *search_string,
- int codepage, int *cached TSRMLS_DC);
-PHPAPI ITypeLib *php_com_load_typelib(char *search_string, int codepage TSRMLS_DC);
-PHPAPI int php_com_import_typelib(ITypeLib *TL, int mode,
- int codepage TSRMLS_DC);
-void php_com_typelibrary_dtor(void *pDest);
-ITypeInfo *php_com_locate_typeinfo(char *typelibname, php_com_dotnet_object *obj, char *dispname, int sink TSRMLS_DC);
-int php_com_process_typeinfo(ITypeInfo *typeinfo, HashTable *id_to_name, int printdef, GUID *guid, int codepage TSRMLS_DC);
-
-/* com_iterator.c */
-zend_object_iterator *php_com_iter_get(zend_class_entry *ce, zval *object TSRMLS_DC);
-
-
-#endif
diff --git a/ext/com_dotnet/tests/27974.phpt b/ext/com_dotnet/tests/27974.phpt
deleted file mode 100755
index 30c42b6cf6..0000000000
--- a/ext/com_dotnet/tests/27974.phpt
+++ /dev/null
@@ -1,43 +0,0 @@
---TEST--
-COM: mapping a safearray
---SKIPIF--
-<?php # vim:ft=php
-if (!extension_loaded("com_dotnet")) print "skip COM/.Net support not present"; ?>
---FILE--
-<?php // $Id$
-error_reporting(E_ALL);
-
-try {
- $v = new VARIANT(array("123", "456", "789"));
- var_dump($v);
- print $v[0] . "\n";
- print $v[1] . "\n";
- print $v[2] . "\n";
- $v[1] = "hello";
- foreach ($v as $item) {
- var_dump($item);
- }
- try {
- $v[3] = "shouldn't work";
- } catch (com_exception $e) {
- if ($e->getCode() != DISP_E_BADINDEX) {
- throw $e;
- }
- echo "Got BADINDEX exception OK!\n";
- }
- echo "OK!";
-} catch (Exception $e) {
- print $e;
-}
-?>
---EXPECT--
-object(variant)#1 (0) {
-}
-123
-456
-789
-string(3) "123"
-string(5) "hello"
-string(3) "789"
-Got BADINDEX exception OK!
-OK!
diff --git a/ext/com_dotnet/tests/variants.phpt b/ext/com_dotnet/tests/variants.phpt
deleted file mode 100644
index 0fd27bee5e..0000000000
--- a/ext/com_dotnet/tests/variants.phpt
+++ /dev/null
@@ -1,637 +0,0 @@
---TEST--
-COM: General variant tests
---SKIPIF--
-<?php # vim:ft=php
-if (!extension_loaded("com_dotnet")) print "skip COM/.Net support not present"; ?>
---FILE--
-<?php // $Id$
-error_reporting(E_ALL);
-
-$v = new VARIANT();
-if (VT_EMPTY != variant_get_type($v)) {
- echo "VT_EMPTY: bork\n";
-}
-
-$values = array(VT_I4 => 42, VT_R8 => 3.5, VT_BSTR => "hello", VT_BOOL => false);
-$binary_ops = array('add', 'cat', 'sub', 'mul', 'and', 'div',
- 'eqv', 'idiv', 'imp', 'mod', 'or', 'pow', 'xor');
-
-foreach ($values as $t => $val) {
- $v = new VARIANT($val);
- if ($t != variant_get_type($v)) {
- printf("Bork: [%d] %d: %s\n", $t, variant_get_type($v), $val);
- print $v . "\n";
- }
- $results = array();
-
- foreach ($values as $op2) {
- echo "--\n";
- foreach ($binary_ops as $op) {
- try {
- echo "$op: " . call_user_func('variant_' . $op, $v, $op2) . "\n";
- } catch (com_exception $e) {
- echo "$op:\n";
- echo "\tvariant_$op($v, $op2)\n";
- echo "\texception " . $e->getMessage();
- printf("\tcode %08x\n\n", $e->getCode());
- }
- }
- }
-}
-
-echo "OK!";
-?>
---EXPECT--
---
-add: 84
-cat: 4242
-sub: 0
-mul: 1764
-and: 42
-div: 1
-eqv: -1
-idiv: 1
-imp: -1
-mod: 0
-or: 42
-pow: 1.50130937545297E+68
-xor: 0
---
-add: 45.5
-cat: 423.5
-sub: 38.5
-mul: 147
-and: 0
-div: 12
-eqv: -47
-idiv: 10
-imp: -43
-mod: 2
-or: 46
-pow: 480145.116863642
-xor: 46
---
-add:
- variant_add(42, hello)
- exception Type mismatch.
- code 80020005
-
-cat: 42hello
-sub:
- variant_sub(42, hello)
- exception Type mismatch.
- code 80020005
-
-mul:
- variant_mul(42, hello)
- exception Type mismatch.
- code 80020005
-
-and:
- variant_and(42, hello)
- exception Type mismatch.
- code 80020005
-
-div:
- variant_div(42, hello)
- exception Type mismatch.
- code 80020005
-
-eqv:
- variant_eqv(42, hello)
- exception Type mismatch.
- code 80020005
-
-idiv:
- variant_idiv(42, hello)
- exception Type mismatch.
- code 80020005
-
-imp:
- variant_imp(42, hello)
- exception Type mismatch.
- code 80020005
-
-mod:
- variant_mod(42, hello)
- exception Type mismatch.
- code 80020005
-
-or:
- variant_or(42, hello)
- exception Type mismatch.
- code 80020005
-
-pow:
- variant_pow(42, hello)
- exception Type mismatch.
- code 80020005
-
-xor:
- variant_xor(42, hello)
- exception Type mismatch.
- code 80020005
-
---
-add: 42
-cat: 42False
-sub: 42
-mul: 0
-and: 0
-div:
- variant_div(42, )
- exception Division by zero.
- code 80020012
-
-eqv: -43
-idiv:
- variant_idiv(42, )
- exception Division by zero.
- code 80020012
-
-imp: -43
-mod:
- variant_mod(42, )
- exception Division by zero.
- code 80020012
-
-or: 42
-pow: 1
-xor: 42
---
-add: 45.5
-cat: 3.542
-sub: -38.5
-mul: 147
-and: 0
-div: 8.33333333333333E-02
-eqv: -47
-idiv: 0
-imp: -5
-mod: 4
-or: 46
-pow: 7.09345573078604E+22
-xor: 46
---
-add: 7
-cat: 3.53.5
-sub: 0
-mul: 12.25
-and: 4
-div: 1
-eqv: -1
-idiv: 1
-imp: -1
-mod: 0
-or: 4
-pow: 80.2117802289664
-xor: 0
---
-add:
- variant_add(3.5, hello)
- exception Type mismatch.
- code 80020005
-
-cat: 3.5hello
-sub:
- variant_sub(3.5, hello)
- exception Type mismatch.
- code 80020005
-
-mul:
- variant_mul(3.5, hello)
- exception Type mismatch.
- code 80020005
-
-and:
- variant_and(3.5, hello)
- exception Type mismatch.
- code 80020005
-
-div:
- variant_div(3.5, hello)
- exception Type mismatch.
- code 80020005
-
-eqv:
- variant_eqv(3.5, hello)
- exception Type mismatch.
- code 80020005
-
-idiv:
- variant_idiv(3.5, hello)
- exception Type mismatch.
- code 80020005
-
-imp:
- variant_imp(3.5, hello)
- exception Type mismatch.
- code 80020005
-
-mod:
- variant_mod(3.5, hello)
- exception Type mismatch.
- code 80020005
-
-or:
- variant_or(3.5, hello)
- exception Type mismatch.
- code 80020005
-
-pow:
- variant_pow(3.5, hello)
- exception Type mismatch.
- code 80020005
-
-xor:
- variant_xor(3.5, hello)
- exception Type mismatch.
- code 80020005
-
---
-add: 3.5
-cat: 3.5False
-sub: 3.5
-mul: 0
-and: 0
-div:
- variant_div(3.5, )
- exception Division by zero.
- code 80020012
-
-eqv: -5
-idiv:
- variant_idiv(3.5, )
- exception Division by zero.
- code 80020012
-
-imp: -5
-mod:
- variant_mod(3.5, )
- exception Division by zero.
- code 80020012
-
-or: 4
-pow: 1
-xor: 4
---
-add:
- variant_add(hello, 42)
- exception Type mismatch.
- code 80020005
-
-cat: hello42
-sub:
- variant_sub(hello, 42)
- exception Type mismatch.
- code 80020005
-
-mul:
- variant_mul(hello, 42)
- exception Type mismatch.
- code 80020005
-
-and:
- variant_and(hello, 42)
- exception Type mismatch.
- code 80020005
-
-div:
- variant_div(hello, 42)
- exception Type mismatch.
- code 80020005
-
-eqv:
- variant_eqv(hello, 42)
- exception Type mismatch.
- code 80020005
-
-idiv:
- variant_idiv(hello, 42)
- exception Type mismatch.
- code 80020005
-
-imp:
- variant_imp(hello, 42)
- exception Type mismatch.
- code 80020005
-
-mod:
- variant_mod(hello, 42)
- exception Type mismatch.
- code 80020005
-
-or:
- variant_or(hello, 42)
- exception Type mismatch.
- code 80020005
-
-pow:
- variant_pow(hello, 42)
- exception Type mismatch.
- code 80020005
-
-xor:
- variant_xor(hello, 42)
- exception Type mismatch.
- code 80020005
-
---
-add:
- variant_add(hello, 3.5)
- exception Type mismatch.
- code 80020005
-
-cat: hello3.5
-sub:
- variant_sub(hello, 3.5)
- exception Type mismatch.
- code 80020005
-
-mul:
- variant_mul(hello, 3.5)
- exception Type mismatch.
- code 80020005
-
-and:
- variant_and(hello, 3.5)
- exception Type mismatch.
- code 80020005
-
-div:
- variant_div(hello, 3.5)
- exception Type mismatch.
- code 80020005
-
-eqv:
- variant_eqv(hello, 3.5)
- exception Type mismatch.
- code 80020005
-
-idiv:
- variant_idiv(hello, 3.5)
- exception Type mismatch.
- code 80020005
-
-imp:
- variant_imp(hello, 3.5)
- exception Type mismatch.
- code 80020005
-
-mod:
- variant_mod(hello, 3.5)
- exception Type mismatch.
- code 80020005
-
-or:
- variant_or(hello, 3.5)
- exception Type mismatch.
- code 80020005
-
-pow:
- variant_pow(hello, 3.5)
- exception Type mismatch.
- code 80020005
-
-xor:
- variant_xor(hello, 3.5)
- exception Type mismatch.
- code 80020005
-
---
-add: hellohello
-cat: hellohello
-sub:
- variant_sub(hello, hello)
- exception Type mismatch.
- code 80020005
-
-mul:
- variant_mul(hello, hello)
- exception Type mismatch.
- code 80020005
-
-and:
- variant_and(hello, hello)
- exception Type mismatch.
- code 80020005
-
-div:
- variant_div(hello, hello)
- exception Type mismatch.
- code 80020005
-
-eqv:
- variant_eqv(hello, hello)
- exception Type mismatch.
- code 80020005
-
-idiv:
- variant_idiv(hello, hello)
- exception Type mismatch.
- code 80020005
-
-imp:
- variant_imp(hello, hello)
- exception Type mismatch.
- code 80020005
-
-mod:
- variant_mod(hello, hello)
- exception Type mismatch.
- code 80020005
-
-or:
- variant_or(hello, hello)
- exception Type mismatch.
- code 80020005
-
-pow:
- variant_pow(hello, hello)
- exception Type mismatch.
- code 80020005
-
-xor:
- variant_xor(hello, hello)
- exception Type mismatch.
- code 80020005
-
---
-add:
- variant_add(hello, )
- exception Type mismatch.
- code 80020005
-
-cat: helloFalse
-sub:
- variant_sub(hello, )
- exception Type mismatch.
- code 80020005
-
-mul:
- variant_mul(hello, )
- exception Type mismatch.
- code 80020005
-
-and:
- variant_and(hello, )
- exception Type mismatch.
- code 80020005
-
-div:
- variant_div(hello, )
- exception Type mismatch.
- code 80020005
-
-eqv:
- variant_eqv(hello, )
- exception Type mismatch.
- code 80020005
-
-idiv:
- variant_idiv(hello, )
- exception Type mismatch.
- code 80020005
-
-imp:
- variant_imp(hello, )
- exception Type mismatch.
- code 80020005
-
-mod:
- variant_mod(hello, )
- exception Type mismatch.
- code 80020005
-
-or:
- variant_or(hello, )
- exception Type mismatch.
- code 80020005
-
-pow:
- variant_pow(hello, )
- exception Type mismatch.
- code 80020005
-
-xor:
- variant_xor(hello, )
- exception Type mismatch.
- code 80020005
-
---
-add: 42
-cat: False42
-sub: -42
-mul: 0
-and: 0
-div: 0
-eqv: -43
-idiv: 0
-imp: -1
-mod: 0
-or: 42
-pow: 0
-xor: 42
---
-add: 3.5
-cat: False3.5
-sub: -3.5
-mul: 0
-and: 0
-div: 0
-eqv: -5
-idiv: 0
-imp: -1
-mod: 0
-or: 4
-pow: 0
-xor: 4
---
-add:
- variant_add(0, hello)
- exception Type mismatch.
- code 80020005
-
-cat: Falsehello
-sub:
- variant_sub(0, hello)
- exception Type mismatch.
- code 80020005
-
-mul:
- variant_mul(0, hello)
- exception Type mismatch.
- code 80020005
-
-and:
- variant_and(0, hello)
- exception Type mismatch.
- code 80020005
-
-div:
- variant_div(0, hello)
- exception Type mismatch.
- code 80020005
-
-eqv:
- variant_eqv(0, hello)
- exception Type mismatch.
- code 80020005
-
-idiv:
- variant_idiv(0, hello)
- exception Type mismatch.
- code 80020005
-
-imp:
- variant_imp(0, hello)
- exception Type mismatch.
- code 80020005
-
-mod:
- variant_mod(0, hello)
- exception Type mismatch.
- code 80020005
-
-or:
- variant_or(0, hello)
- exception Type mismatch.
- code 80020005
-
-pow:
- variant_pow(0, hello)
- exception Type mismatch.
- code 80020005
-
-xor:
- variant_xor(0, hello)
- exception Type mismatch.
- code 80020005
-
---
-add: 0
-cat: FalseFalse
-sub: 0
-mul: 0
-and: 0
-div:
- variant_div(0, )
- exception Out of present range.
- code 8002000a
-
-eqv: -1
-idiv:
- variant_idiv(0, )
- exception Division by zero.
- code 80020012
-
-imp: -1
-mod:
- variant_mod(0, )
- exception Division by zero.
- code 80020012
-
-or: 0
-pow: 1
-xor: 0
-OK!
diff --git a/ext/cpdf/CREDITS b/ext/cpdf/CREDITS
deleted file mode 100644
index 94cc1de43c..0000000000
--- a/ext/cpdf/CREDITS
+++ /dev/null
@@ -1,2 +0,0 @@
-cpdf
-Uwe Steinmann
diff --git a/ext/cpdf/config.m4 b/ext/cpdf/config.m4
deleted file mode 100644
index 95627bd970..0000000000
--- a/ext/cpdf/config.m4
+++ /dev/null
@@ -1,76 +0,0 @@
-dnl $Id$
-
-AC_DEFUN(CPDF_JPEG_TEST,[
- AC_ARG_WITH(jpeg-dir,
- [ --with-jpeg-dir[=DIR] CPDF: Set the path to libjpeg install prefix.],[
- for i in $withval /usr/local /usr; do
- if test -f "$i/lib/libjpeg.$SHLIB_SUFFIX_NAME" -o -f "$i/lib/libjpeg.a"; then
- CPDF_JPEG_DIR=$i
- break;
- fi
- done
- if test -z "$CPDF_JPEG_DIR"; then
- AC_MSG_ERROR([libjpeg.(a|so) not found.])
- fi
- PHP_CHECK_LIBRARY(jpeg, jpeg_read_header, [
- PHP_ADD_LIBRARY_WITH_PATH(jpeg, $CPDF_JPEG_DIR/lib, CPDF_SHARED_LIBADD)
- ] ,[
- AC_MSG_ERROR([CPDF: Problem with libjpeg.(a|so). Please check config.log for more information.])
- ], [
- -L$CPDF_JPEG_DIR/lib
- ])
- ],)
-])
-
-AC_DEFUN(CPDF_TIFF_TEST,[
- AC_ARG_WITH(tiff-dir,
- [ --with-tiff-dir[=DIR] CPDF: Set the path to libtiff install prefix.],[
- for i in $withval /usr/local /usr; do
- if test -f "$i/lib/libtiff.$SHLIB_SUFFIX_NAME" -o -f "$i/lib/libtiff.a"; then
- CPDF_TIFF_DIR=$i
- break;
- fi
- done
- if test -z "$CPDF_TIFF_DIR"; then
- AC_MSG_ERROR([libtiff.(a|so) not found.])
- fi
- PHP_CHECK_LIBRARY(tiff, TIFFOpen, [
- PHP_ADD_LIBRARY_WITH_PATH(tiff, $CPDF_TIFF_DIR/lib, CPDF_SHARED_LIBADD)
- ] ,[
- AC_MSG_ERROR([CPDF: Problem with libtiff.(a|so). Please check config.log for more information.])
- ], [
- -L$CPDF_TIFF_DIR/lib
- ])
- ],)
-])
-
-PHP_ARG_WITH(cpdflib, for cpdflib support,
-[ --with-cpdflib[=DIR] Include cpdflib support (requires cpdflib >= 2).])
-
-if test "$PHP_CPDFLIB" != "no"; then
- PHP_NEW_EXTENSION(cpdf, cpdf.c, $ext_shared,, \\$(GDLIB_CFLAGS))
- PHP_SUBST(CPDF_SHARED_LIBADD)
- CPDF_JPEG_TEST
- CPDF_TIFF_TEST
-
- for i in $PHP_CPDFLIB /usr/local /usr; do
- if test -f "$i/include/cpdflib.h"; then
- CPDFLIB_INCLUDE=$i/include
-
- PHP_CHECK_LIBRARY(cpdf, cpdf_open, [
- PHP_ADD_INCLUDE($CPDFLIB_INCLUDE)
- PHP_ADD_LIBRARY_WITH_PATH(cpdf, $i/lib, CPDF_SHARED_LIBADD)
- AC_DEFINE(HAVE_CPDFLIB,1,[Whether you have cpdflib])
- ], [
- AC_MSG_ERROR([Cpdflib module requires cpdflib >= 2.])
- ], [
- -L$i/lib $CPDF_SHARED_LIBADD
- ])
- break
- fi
- done
-
- if test -z "$CPDFLIB_INCLUDE"; then
- AC_MSG_ERROR([cpdflib.h not found])
- fi
-fi
diff --git a/ext/cpdf/config.w32 b/ext/cpdf/config.w32
deleted file mode 100644
index 91724182b7..0000000000
--- a/ext/cpdf/config.w32
+++ /dev/null
@@ -1,14 +0,0 @@
-// $Id$
-// vim:ft=javascript
-
-ARG_WITH("cpdflib", "cpdflib >= 2", "no");
-
-if (PHP_CPDFLIB != "no") {
- if (CHECK_LIB("cpdf.lib", "cpdf", PHP_CPDFLIB) &&
- CHECK_HEADER_ADD_INCLUDE("cpdflib.h", "CFLAGS_CPDF")) {
- EXTENSION("cpdf", "cpdf.c", PHP_CPDFLIB_SHARED);
- AC_DEFINE('HAVE_CPDFLIB', 1, 'Have CPDF library');
- } else {
- WARNING("cpdf not enabled; libraries and headers not found");
- }
-}
diff --git a/ext/cpdf/cpdf.c b/ext/cpdf/cpdf.c
deleted file mode 100644
index 4c872d7cbd..0000000000
--- a/ext/cpdf/cpdf.c
+++ /dev/null
@@ -1,2263 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Uwe Steinmann <Uwe.Steinmann@fernuni-hagen.de> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-/* cpdflib.h -- C language API definitions for ClibPDF library
- * Copyright (C) 1998 FastIO Systems, All Rights Reserved.
-*/
-
-/* Note that there is no code from the cpdflib package in this file */
-
-#if defined(THREAD_SAFE)
-#undef THREAD_SAFE
-#endif
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "php.h"
-#include "php_globals.h"
-#include "zend_list.h"
-#include "ext/standard/php_standard.h"
-#include "ext/standard/head.h"
-#include <math.h>
-#if HAVE_GD_BUNDLED
-# include "../gd/libgd/gd.h"
-#else
-# if HAVE_LIBGD13
-# include <gd.h>
-# endif
-#endif
-
-#include <cpdflib.h>
-
-#ifdef HAVE_UNISTD_H
-# include <unistd.h>
-#endif
-#ifdef PHP_WIN32
-# include <io.h>
-# include <fcntl.h>
-#endif
-
-#if HAVE_CPDFLIB
-#include "php_cpdf.h"
-#include "ext/standard/info.h"
-
-#ifdef THREAD_SAFE
-DWORD CPDFlibTls;
-static int numthreads=0;
-
-typedef struct cpdflib_global_struct{
- int le_cpdf;
- int le_outline;
-#if HAVE_LIBGD13
- int le_gd;
-#endif
-} cpdflib_global_struct;
-
-# define CPDF_GLOBAL(v) TSRMG(CPDFlibTls, cpdflib_global_struct *, v)
-
-#else
-# define CPDF_GLOBAL(a) a
-static int le_cpdf;
-static int le_outline;
-#if HAVE_LIBGD13
-static int le_gd;
-#endif
-#endif
-
-#define CPDF_FETCH_CPDFDOC(pdf_zval) \
- convert_to_long_ex(pdf_zval); \
- id = Z_LVAL_PP(pdf_zval); \
- pdf = zend_list_find(id, &type); \
- if(!pdf || type != CPDF_GLOBAL(le_cpdf)) { \
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to find identifier %d", id); \
- RETURN_FALSE; \
- } \
-
-function_entry cpdf_functions[] = {
- PHP_FE(cpdf_global_set_document_limits, NULL)
- PHP_FE(cpdf_set_creator, NULL)
- PHP_FE(cpdf_set_title, NULL)
- PHP_FE(cpdf_set_subject, NULL)
- PHP_FE(cpdf_set_keywords, NULL)
- PHP_FE(cpdf_open, NULL)
- PHP_FE(cpdf_close, NULL)
- PHP_FE(cpdf_set_viewer_preferences, NULL)
- PHP_FE(cpdf_page_init, NULL)
- PHP_FE(cpdf_finalize_page, NULL)
- PHP_FE(cpdf_set_current_page, NULL)
- PHP_FE(cpdf_begin_text, NULL)
- PHP_FE(cpdf_end_text, NULL)
- PHP_FE(cpdf_show, NULL)
- PHP_FE(cpdf_show_xy, NULL)
- PHP_FE(cpdf_text, NULL)
- PHP_FE(cpdf_continue_text, NULL)
- PHP_FE(cpdf_set_font, NULL)
- PHP_FE(cpdf_set_font_directories, NULL)
- PHP_FE(cpdf_set_font_map_file, NULL)
- PHP_FE(cpdf_set_leading, NULL)
- PHP_FE(cpdf_set_text_rendering, NULL)
- PHP_FE(cpdf_set_horiz_scaling, NULL)
- PHP_FE(cpdf_set_text_rise, NULL)
- PHP_FE(cpdf_set_text_matrix, NULL)
- PHP_FE(cpdf_set_text_pos, NULL)
- PHP_FE(cpdf_rotate_text, NULL)
- PHP_FE(cpdf_set_char_spacing, NULL)
- PHP_FE(cpdf_set_word_spacing, NULL)
- PHP_FE(cpdf_stringwidth, NULL)
- PHP_FE(cpdf_save, NULL)
- PHP_FE(cpdf_restore, NULL)
- PHP_FE(cpdf_translate, NULL)
- PHP_FE(cpdf_scale, NULL)
- PHP_FE(cpdf_rotate, NULL)
- PHP_FE(cpdf_setflat, NULL)
- PHP_FE(cpdf_setlinejoin, NULL)
- PHP_FE(cpdf_setlinecap, NULL)
- PHP_FE(cpdf_setmiterlimit, NULL)
- PHP_FE(cpdf_setlinewidth, NULL)
- PHP_FE(cpdf_setdash, NULL)
- PHP_FE(cpdf_moveto, NULL)
- PHP_FE(cpdf_rmoveto, NULL)
- PHP_FE(cpdf_lineto, NULL)
- PHP_FE(cpdf_rlineto, NULL)
- PHP_FE(cpdf_curveto, NULL)
- PHP_FE(cpdf_circle, NULL)
- PHP_FE(cpdf_arc, NULL)
- PHP_FE(cpdf_rect, NULL)
- PHP_FE(cpdf_newpath, NULL)
- PHP_FE(cpdf_closepath, NULL)
- PHP_FE(cpdf_stroke, NULL)
- PHP_FE(cpdf_closepath_stroke, NULL)
- PHP_FE(cpdf_fill, NULL)
- PHP_FE(cpdf_fill_stroke, NULL)
- PHP_FE(cpdf_closepath_fill_stroke, NULL)
- PHP_FE(cpdf_clip, NULL)
- PHP_FE(cpdf_setgray_fill, NULL)
- PHP_FE(cpdf_setgray_stroke, NULL)
- PHP_FE(cpdf_setgray, NULL)
- PHP_FE(cpdf_setrgbcolor_fill, NULL)
- PHP_FE(cpdf_setrgbcolor_stroke, NULL)
- PHP_FE(cpdf_setrgbcolor, NULL)
- PHP_FE(cpdf_set_page_animation, NULL)
- PHP_FE(cpdf_finalize, NULL)
- PHP_FE(cpdf_output_buffer, NULL)
- PHP_FE(cpdf_save_to_file, NULL)
- PHP_FE(cpdf_import_jpeg, NULL)
-#if HAVE_LIBGD13
- PHP_FE(cpdf_place_inline_image, NULL)
-#endif
- PHP_FE(cpdf_add_annotation, NULL)
- PHP_FE(cpdf_add_outline, NULL)
- PHP_FE(cpdf_set_action_url, NULL)
- {NULL, NULL, NULL}
-};
-
-zend_module_entry cpdf_module_entry = {
- STANDARD_MODULE_HEADER,
- "cpdf",
- cpdf_functions,
- PHP_MINIT(cpdf),
- PHP_MSHUTDOWN(cpdf),
- PHP_RINIT(cpdf),
- NULL,
- PHP_MINFO(cpdf),
- NO_VERSION_YET,
- STANDARD_MODULE_PROPERTIES
-};
-
-#ifdef COMPILE_DL_CPDF
-ZEND_GET_MODULE(cpdf)
-#endif
-
-static void _free_outline(zend_rsrc_list_entry *rsrc TSRMLS_DC)
-{
-}
-
-static void _free_doc(zend_rsrc_list_entry *rsrc TSRMLS_DC)
-{
- CPDFdoc *pdf = (CPDFdoc *)rsrc->ptr;
-
- cpdf_close(pdf);
-}
-
-PHP_MINIT_FUNCTION(cpdf)
-{
- CPDF_GLOBAL(le_outline) = zend_register_list_destructors_ex(_free_outline, NULL, "cpdf outline", module_number);
- CPDF_GLOBAL(le_cpdf) = zend_register_list_destructors_ex(_free_doc, NULL, "cpdf", module_number);
-
- REGISTER_LONG_CONSTANT("CPDF_PM_NONE", PM_NONE, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("CPDF_PM_OUTLINES", PM_OUTLINES, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("CPDF_PM_THUMBS", PM_THUMBS, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("CPDF_PM_FULLSCREEN", PM_FULLSCREEN, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("CPDF_PL_SINGLE", PL_SINGLE, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("CPDF_PL_1COLUMN", PL_1COLUMN, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("CPDF_PL_2LCOLUMN", PL_2LCOLUMN, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("CPDF_PL_2RCOLUMN", PL_2RCOLUMN, CONST_CS | CONST_PERSISTENT);
-
-
- return SUCCESS;
-}
-
-PHP_RINIT_FUNCTION(cpdf)
-{
-/* CPDF_GLOBAL(le_outline) = NULL; */
- return SUCCESS;
-}
-
-PHP_MINFO_FUNCTION(cpdf) {
- /* need to use a PHPAPI function here because it is external module in windows */
- /* (don't knwo if that still applies (cmv) */
- php_info_print_table_start();
- php_info_print_table_row(2, "CPDF Support", "enabled");
- php_info_print_table_row(2, "Version", cpdf_version() );
- php_info_print_table_end();
-}
-
-PHP_MSHUTDOWN_FUNCTION(cpdf)
-{
- return SUCCESS;
-}
-
-/* {{{ proto bool cpdf_global_set_document_limits(int maxPages, int maxFonts, int maxImages, int maxAnnots, int maxObjects)
- Sets document settings for all documents */
-PHP_FUNCTION(cpdf_global_set_document_limits)
-{
- zval **argv[5];
-
- if (ZEND_NUM_ARGS() != 5 || (zend_get_parameters_array_ex(5, argv) == FAILURE)) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long_ex(argv[0]);
- convert_to_long_ex(argv[1]);
- convert_to_long_ex(argv[2]);
- convert_to_long_ex(argv[3]);
- convert_to_long_ex(argv[4]);
-
- cpdf_setGlobalDocumentLimits(Z_LVAL_PP(argv[0]), Z_LVAL_PP(argv[1]), Z_LVAL_PP(argv[2]), Z_LVAL_PP(argv[3]), Z_LVAL_PP(argv[4]));
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto bool cpdf_set_creator(int pdfdoc, string creator)
- Sets the creator field */
-PHP_FUNCTION(cpdf_set_creator)
-{
- zval **arg1, **arg2;
- int id, type;
- CPDFdoc *pdf;
-
- if (ZEND_NUM_ARGS() != 2 || (zend_get_parameters_ex(2, &arg1, &arg2) == FAILURE)) {
- WRONG_PARAM_COUNT;
- }
-
- CPDF_FETCH_CPDFDOC(arg1);
- convert_to_string_ex(arg2);
-
- cpdf_setCreator(pdf, Z_STRVAL_PP(arg2));
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto bool cpdf_set_title(int pdfptr, string title)
- Fills the title field of the info structure */
-PHP_FUNCTION(cpdf_set_title)
-{
- zval **arg1, **arg2;
- int id, type;
- CPDFdoc *pdf;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &arg1, &arg2) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- CPDF_FETCH_CPDFDOC(arg1);
- convert_to_string_ex(arg2);
-
- cpdf_setTitle(pdf, Z_STRVAL_PP(arg2));
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto bool cpdf_set_subject(int pdfptr, string subject)
- Fills the subject field of the info structure */
-PHP_FUNCTION(cpdf_set_subject)
-{
- zval **arg1, **arg2;
- int id, type;
- CPDFdoc *pdf;
-
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &arg1, &arg2) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- CPDF_FETCH_CPDFDOC(arg1);
- convert_to_string_ex(arg2);
-
- cpdf_setSubject(pdf, Z_STRVAL_PP(arg2));
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto bool cpdf_set_keywords(int pdfptr, string keywords)
- Fills the keywords field of the info structure */
-PHP_FUNCTION(cpdf_set_keywords)
-{
- zval **arg1, **arg2;
- int id, type;
- CPDFdoc *pdf;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &arg1, &arg2) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- CPDF_FETCH_CPDFDOC(arg1);
- convert_to_string_ex(arg2);
-
- cpdf_setKeywords(pdf, Z_STRVAL_PP(arg2));
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto bool cpdf_set_viewer_preferences(int pdfdoc, array preferences)
- How to show the document in the viewer */
-PHP_FUNCTION(cpdf_set_viewer_preferences)
-{
- zval **arg1, **arg2;
- zval **zvalue;
- int id, type;
- CPDFdoc *pdf;
- CPDFviewerPrefs vP = { 0, 0, 0, 0, 0, 0, 0, 0 };
-
- if(ZEND_NUM_ARGS() != 2 || (zend_get_parameters_ex(2, &arg1, &arg2) == FAILURE)) {
- WRONG_PARAM_COUNT;
- }
-
- CPDF_FETCH_CPDFDOC(arg1);
- convert_to_array_ex(arg2);
-
- if (zend_hash_find (Z_ARRVAL_PP(arg2), "pagemode", sizeof ("pagemode"), (void **) &zvalue) == SUCCESS) {
- convert_to_long_ex(zvalue);
- vP.pageMode = Z_LVAL_PP(zvalue);
- }
- if (zend_hash_find (Z_ARRVAL_PP(arg2), "hidetoolbar", sizeof ("hidetoolbar"), (void **) &zvalue) == SUCCESS) {
- convert_to_long_ex(zvalue);
- vP.hideToolbar = Z_LVAL_PP(zvalue);
- }
- if (zend_hash_find (Z_ARRVAL_PP(arg2), "hidemenubar", sizeof ("hidemenubar"), (void **) &zvalue) == SUCCESS) {
- convert_to_long_ex(zvalue);
- vP.hideMenubar = Z_LVAL_PP(zvalue);
- }
- if (zend_hash_find (Z_ARRVAL_PP(arg2), "hidewindowui", sizeof ("hidewindowui"), (void **) &zvalue) == SUCCESS) {
- convert_to_long_ex(zvalue);
- vP.hideWindowUI = Z_LVAL_PP(zvalue);
- }
- if (zend_hash_find (Z_ARRVAL_PP(arg2), "fitwindow", sizeof ("fitwindow"), (void **) &zvalue) == SUCCESS) {
- convert_to_long_ex(zvalue);
- vP.fitWindow = Z_LVAL_PP(zvalue);
- }
- if (zend_hash_find (Z_ARRVAL_PP(arg2), "centerwindow", sizeof ("centerwindow"), (void **) &zvalue) == SUCCESS) {
- convert_to_long_ex(zvalue);
- vP.centerWindow = Z_LVAL_PP(zvalue);
- }
- if (zend_hash_find (Z_ARRVAL_PP(arg2), "pagelayout", sizeof ("pagelayout"), (void **) &zvalue) == SUCCESS) {
- convert_to_long_ex(zvalue);
- vP.pageLayout = Z_LVAL_PP(zvalue);
- }
- if (zend_hash_find (Z_ARRVAL_PP(arg2), "nonfspagemode", sizeof ("nonfspagemode"), (void **) &zvalue) == SUCCESS) {
- convert_to_long_ex(zvalue);
- vP.nonFSPageMode = Z_LVAL_PP(zvalue);
- }
-
- cpdf_setViewerPreferences(pdf, &vP);
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto int cpdf_open(int compression [, string filename [, array doc_limits]])
- Opens a new pdf document */
-PHP_FUNCTION(cpdf_open)
-{
- zval **arg1, **arg2 = NULL, **arg3 = NULL;
- int id;
- CPDFdoc *cpdf;
-
- if (ZEND_NUM_ARGS() < 1 || ZEND_NUM_ARGS() > 3 || (zend_get_parameters_ex(ZEND_NUM_ARGS(), &arg1, &arg2, &arg3) == FAILURE)) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long_ex(arg1);
-
- cpdf = cpdf_open(0, NULL);
- if(!cpdf)
- RETURN_FALSE;
- if(Z_LVAL_PP(arg1) == 1)
- cpdf_enableCompression(cpdf, YES);
- else
- cpdf_enableCompression(cpdf, NO);
-
- if(arg2) {
- convert_to_string_ex(arg2);
-#if APACHE
- if(strcmp(Z_STRVAL_PP(arg2), "-") == 0)
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Writing to stdout as described in the ClibPDF manual is not possible if php is used as an Apache module. Write to a memory stream and use cpdf_output_buffer() instead.");
-#endif
-
- if (php_check_open_basedir(Z_STRVAL_PP(arg2) TSRMLS_CC) || (PG(safe_mode) && !php_checkuid(Z_STRVAL_PP(arg2), "rb+", CHECKUID_CHECK_MODE_PARAM))) {
- cpdf_close(cpdf);
- RETURN_FALSE;
- }
-
- cpdf_setOutputFilename(cpdf, Z_STRVAL_PP(arg2));
- }
- cpdf_init(cpdf);
-
- id = zend_list_insert(cpdf, CPDF_GLOBAL(le_cpdf));
- RETURN_LONG(id);
-}
-/* }}} */
-
-/* {{{ proto bool cpdf_close(int pdfdoc)
- Closes the pdf document */
-PHP_FUNCTION(cpdf_close)
-{
- zval **arg1;
- int id, type;
- CPDFdoc *pdf;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg1) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- CPDF_FETCH_CPDFDOC(arg1);
-
- zend_list_delete(id);
-
- RETURN_TRUE;
-}
-/* }}} */
-
-#define BUFFERLEN 40
-/* {{{ proto bool cpdf_page_init(int pdfdoc, int pagenr, int orientation, int height, int width [, float unit])
- Starts page */
-PHP_FUNCTION(cpdf_page_init)
-{
- zval **argv[6];
- int id, type, pagenr, orientation;
- int height, width;
- char buffer[BUFFERLEN];
- CPDFdoc *pdf;
- int argc = ZEND_NUM_ARGS();
-
- if(argc < 5 || argc > 6 || (zend_get_parameters_array_ex(argc, argv) == FAILURE)) {
- WRONG_PARAM_COUNT;
- }
-
- CPDF_FETCH_CPDFDOC(argv[0]);
- convert_to_long_ex(argv[1]);
- convert_to_long_ex(argv[2]);
- convert_to_long_ex(argv[3]);
- convert_to_long_ex(argv[4]);
- pagenr=Z_LVAL_PP(argv[1]);
- orientation=Z_LVAL_PP(argv[2]);
- height = Z_LVAL_PP(argv[3]);
- width = Z_LVAL_PP(argv[4]);
-
- if(argc > 5) {
- convert_to_double_ex(argv[5]);
- if(Z_DVAL_PP(argv[5]) > 0.0)
- cpdf_setDefaultDomainUnit(pdf, Z_DVAL_PP(argv[5]));
- }
- snprintf(buffer, BUFFERLEN, "0 0 %d %d", width, height);
- cpdf_pageInit(pdf, pagenr, orientation, buffer, buffer);
-
- RETURN_TRUE;
-}
-/* }}} */
-#undef BUFFERLEN
-
-/* {{{ proto bool cpdf_finalize_page(int pdfdoc, int pagenr)
- Ends the page to save memory */
-PHP_FUNCTION(cpdf_finalize_page)
-{
- zval **arg1, **arg2;
- int id, type, pagenr;
- CPDFdoc *pdf;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &arg1, &arg2) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- CPDF_FETCH_CPDFDOC(arg1);
- convert_to_long_ex(arg2);
- pagenr=Z_LVAL_PP(arg2);
-
- cpdf_finalizePage(pdf, pagenr);
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto bool cpdf_set_current_page(int pdfdoc, int pagenr)
- Sets page for output */
-PHP_FUNCTION(cpdf_set_current_page)
-{
- zval **arg1, **arg2;
- int id, type, pagenr;
- CPDFdoc *pdf;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &arg1, &arg2) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- CPDF_FETCH_CPDFDOC(arg1);
- convert_to_long_ex(arg2);
- pagenr=Z_LVAL_PP(arg2);
-
- cpdf_setCurrentPage(pdf, pagenr);
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto bool cpdf_begin_text(int pdfdoc)
- Starts text section */
-PHP_FUNCTION(cpdf_begin_text)
-{
- zval **arg1;
- int id, type;
- CPDFdoc *pdf;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg1) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- CPDF_FETCH_CPDFDOC(arg1);
-
- cpdf_beginText(pdf, 0);
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto bool cpdf_end_text(int pdfdoc)
- Ends text section */
-PHP_FUNCTION(cpdf_end_text)
-{
- zval **arg1;
- int id, type;
- CPDFdoc *pdf;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg1) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- CPDF_FETCH_CPDFDOC(arg1);
-
- cpdf_endText(pdf);
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto bool cpdf_show(int pdfdoc, string text)
- Output text at current position */
-PHP_FUNCTION(cpdf_show)
-{
- zval **arg1, **arg2;
- int id, type;
- CPDFdoc *pdf;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &arg1, &arg2) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- CPDF_FETCH_CPDFDOC(arg1);
- convert_to_string_ex(arg2);
-
- cpdf_textShow(pdf, Z_STRVAL_PP(arg2));
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto bool cpdf_show_xy(int pdfdoc, string text, float x-koor, float y-koor [, int mode])
- Output text at position */
-PHP_FUNCTION(cpdf_show_xy)
-{
- zval **argv[5];
- int id, type, mode = 0, argc = ZEND_NUM_ARGS();
- CPDFdoc *pdf;
-
- argc = ZEND_NUM_ARGS();
- if(argc < 4 || argc > 5 || (zend_get_parameters_array_ex(argc, argv) == FAILURE)) {
- WRONG_PARAM_COUNT;
- }
-
- CPDF_FETCH_CPDFDOC(argv[0]);
- convert_to_string_ex(argv[1]);
- convert_to_double_ex(argv[2]);
- convert_to_double_ex(argv[3]);
-
- if(argc == 5) {
- convert_to_long_ex(argv[4]);
- mode = Z_LVAL_PP(argv[4]);
- }
- if(mode == 1)
- cpdf_rawText(pdf, (float) Z_DVAL_PP(argv[2]), (float) Z_DVAL_PP(argv[3]), 0.0, Z_STRVAL_PP(argv[1]));
- else
- cpdf_text(pdf, (float) Z_DVAL_PP(argv[2]), (float) Z_DVAL_PP(argv[3]), 0.0, Z_STRVAL_PP(argv[1]));
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto bool cpdf_continue_text(int pdfdoc, string text)
- Outputs text in next line */
-PHP_FUNCTION(cpdf_continue_text)
-{
- zval **arg1, **arg2;
- int id, type;
- CPDFdoc *pdf;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &arg1, &arg2) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- CPDF_FETCH_CPDFDOC(arg1);
- convert_to_string_ex(arg2);
-
- cpdf_textCRLFshow(pdf, Z_STRVAL_PP(arg2));
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto bool cpdf_text(int pdfdoc, string text [, float x-koor, float y-koor [, int mode [, float orientation [, int alignmode]]]])
- Outputs text */
-PHP_FUNCTION(cpdf_text)
-{
- zval **argv[7];
- int id, type, mode = 0, argc = ZEND_NUM_ARGS();
- CPDFdoc *pdf;
-
- if(argc < 2 || argc == 3 || argc > 7 || (zend_get_parameters_array_ex(argc, argv) == FAILURE)) {
- WRONG_PARAM_COUNT;
- }
-
- CPDF_FETCH_CPDFDOC(argv[0]);
- convert_to_string_ex(argv[1]);
-
- if(argc > 4) {
- convert_to_long_ex(argv[4]);
- mode = Z_LVAL_PP(argv[2]);
- }
- switch(argc) {
- case 2:
- cpdf_textShow(pdf, Z_STRVAL_PP(argv[1]));
- break;
- case 4:
- convert_to_double_ex(argv[2]);
- convert_to_double_ex(argv[3]);
- cpdf_text(pdf, (float) Z_DVAL_PP(argv[2]), (float) Z_DVAL_PP(argv[3]), 0.0, Z_STRVAL_PP(argv[1]));
- break;
- case 5:
- convert_to_double_ex(argv[2]);
- convert_to_double_ex(argv[3]);
- if(mode == 1)
- cpdf_rawText(pdf, (float) Z_DVAL_PP(argv[2]), (float) Z_DVAL_PP(argv[3]), 0.0, Z_STRVAL_PP(argv[1]));
- else
- cpdf_text(pdf, (float) Z_DVAL_PP(argv[2]), (float) Z_DVAL_PP(argv[3]), 0.0, Z_STRVAL_PP(argv[1]));
- break;
- case 6:
- convert_to_double_ex(argv[2]);
- convert_to_double_ex(argv[3]);
- convert_to_double_ex(argv[5]);
- if(mode == 1)
- cpdf_rawText(pdf, (float) Z_DVAL_PP(argv[2]), (float) Z_DVAL_PP(argv[3]), (float) Z_DVAL_PP(argv[5]), Z_STRVAL_PP(argv[1]));
- else
- cpdf_text(pdf, (float) Z_DVAL_PP(argv[2]), (float) Z_DVAL_PP(argv[3]), (float) Z_DVAL_PP(argv[5]), Z_STRVAL_PP(argv[1]));
- break;
- case 7:
- convert_to_double_ex(argv[2]);
- convert_to_double_ex(argv[3]);
- convert_to_double_ex(argv[5]);
- convert_to_long_ex(argv[6]);
- if(mode == 1)
- cpdf_rawTextAligned(pdf, (float) Z_DVAL_PP(argv[2]), (float) Z_DVAL_PP(argv[3]), (float) Z_DVAL_PP(argv[5]), Z_LVAL_PP(argv[6]), Z_STRVAL_PP(argv[1]));
- else
- cpdf_textAligned(pdf, (float) Z_DVAL_PP(argv[2]), (float) Z_DVAL_PP(argv[3]), (float) Z_DVAL_PP(argv[5]), Z_LVAL_PP(argv[6]), Z_STRVAL_PP(argv[1]));
- break;
- }
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto bool cpdf_set_font(int pdfdoc, string font, float size, string encoding)
- Selects the current font face, size and encoding */
-PHP_FUNCTION(cpdf_set_font)
-{
- zval **arg1, **arg2, **arg3, **arg4;
- int id, type;
- CPDFdoc *pdf;
-
- if (ZEND_NUM_ARGS() != 4 || zend_get_parameters_ex(4, &arg1, &arg2, &arg3, &arg4) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- CPDF_FETCH_CPDFDOC(arg1);
- convert_to_string_ex(arg2);
- convert_to_double_ex(arg3);
- convert_to_string_ex(arg4);
-
-/* if(Z_LVAL_PP(arg4) > 6) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Font encoding set to 5");
- Z_LVAL_PP(arg4) = 5;
- }
-*/
- cpdf_setFont(pdf, Z_STRVAL_PP(arg2), Z_STRVAL_PP(arg4), (float) Z_DVAL_PP(arg3));
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto bool cpdf_set_font_directories(int pdfdoc, string pfmdir, string pfbdir)
- Sets directories to search when using external fonts */
-PHP_FUNCTION(cpdf_set_font_directories)
-{
- zval **arg1, **arg2, **arg3;
- int id, type;
- CPDFdoc *pdf;
-
- if (ZEND_NUM_ARGS() != 3 || zend_get_parameters_ex(3, &arg1, &arg2, &arg3) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- CPDF_FETCH_CPDFDOC(arg1);
- convert_to_string_ex(arg2);
- convert_to_string_ex(arg3);
-
- cpdf_setFontDirectories(pdf, Z_STRVAL_PP(arg2), Z_STRVAL_PP(arg3));
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto bool cpdf_set_font_map_file(int pdfdoc, string filename)
- Sets fontname to filename translation map when using external fonts */
-PHP_FUNCTION(cpdf_set_font_map_file)
-{
- zval **arg1, **arg2;
- int id, type;
- CPDFdoc *pdf;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &arg1, &arg2) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- CPDF_FETCH_CPDFDOC(arg1);
- convert_to_string_ex(arg2);
-
- if (php_check_open_basedir(Z_STRVAL_PP(arg2) TSRMLS_CC) || (PG(safe_mode) && !php_checkuid(Z_STRVAL_PP(arg2), "rb+", CHECKUID_CHECK_MODE_PARAM))) {
- RETURN_FALSE;
- }
-
- cpdf_setFontMapFile(pdf, Z_STRVAL_PP(arg2));
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto bool cpdf_set_leading(int pdfdoc, float distance)
- Sets distance between text lines */
-PHP_FUNCTION(cpdf_set_leading)
-{
- zval **arg1, **arg2;
- int id, type;
- CPDFdoc *pdf;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &arg1, &arg2) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- CPDF_FETCH_CPDFDOC(arg1);
- convert_to_double_ex(arg2);
-
- cpdf_setTextLeading(pdf, (float) Z_DVAL_PP(arg2));
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto bool cpdf_set_text_rendering(int pdfdoc, int rendermode)
- Determines how text is rendered */
-PHP_FUNCTION(cpdf_set_text_rendering)
-{
- zval **arg1, **arg2;
- int id, type;
- CPDFdoc *pdf;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &arg1, &arg2) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- CPDF_FETCH_CPDFDOC(arg1);
- convert_to_long_ex(arg2);
-
- cpdf_setTextRenderingMode(pdf, Z_LVAL_PP(arg2));
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto bool cpdf_set_horiz_scaling(int pdfdoc, float scale)
- Sets horizontal scaling of text */
-PHP_FUNCTION(cpdf_set_horiz_scaling)
-{
- zval **arg1, **arg2;
- int id, type;
- CPDFdoc *pdf;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &arg1, &arg2) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- CPDF_FETCH_CPDFDOC(arg1);
- convert_to_double_ex(arg2);
-
- cpdf_setHorizontalScaling(pdf, (float) Z_DVAL_PP(arg2) * 100.0);
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto bool cpdf_set_text_rise(int pdfdoc, float value)
- Sets the text rise */
-PHP_FUNCTION(cpdf_set_text_rise)
-{
- zval **arg1, **arg2;
- int id, type;
- CPDFdoc *pdf;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &arg1, &arg2) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- CPDF_FETCH_CPDFDOC(arg1);
- convert_to_double_ex(arg2);
-
- cpdf_setTextRise(pdf, (float) Z_DVAL_PP(arg2));
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto bool cpdf_set_text_matrix(int pdfdoc, arry matrix)
- Sets the text matrix */
-PHP_FUNCTION(cpdf_set_text_matrix)
-{
- zval **arg1, **arg2, *data;
- int id, type, i;
- HashTable *matrix;
- CPDFdoc *pdf;
- float *pdfmatrixptr;
- float pdfmatrix[6];
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &arg1, &arg2) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- CPDF_FETCH_CPDFDOC(arg1);
- convert_to_array_ex(arg2);
- matrix = Z_ARRVAL_PP(arg2);
-
- if(zend_hash_num_elements(matrix) != 6) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Text matrix must have 6 elements");
- RETURN_FALSE;
- }
-
- pdfmatrixptr = pdfmatrix;
- zend_hash_internal_pointer_reset(matrix);
- for(i=0; i<zend_hash_num_elements(matrix); i++) {
- zend_hash_get_current_data(matrix, (void *) &data);
- switch(Z_TYPE_P(data)) {
- case IS_DOUBLE:
- *pdfmatrixptr++ = (float) Z_DVAL_P(data);
- break;
- default:
- *pdfmatrixptr++ = 0.0;
- break;
- }
- zend_hash_move_forward(matrix);
- }
-
- cpdf_setTextMatrix(pdf, pdfmatrix[0], pdfmatrix[1],
- pdfmatrix[2], pdfmatrix[3],
- pdfmatrix[4], pdfmatrix[5]);
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto bool cpdf_set_text_pos(int pdfdoc, float x, float y [, int mode])
- Sets the position of text for the next cpdf_show call */
-PHP_FUNCTION(cpdf_set_text_pos)
-{
- zval **argv[4];
- int id, type, mode = 0, argc = ZEND_NUM_ARGS();
- CPDFdoc *pdf;
-
- if(argc < 3 || argc > 4 || (zend_get_parameters_array_ex(argc, argv) == FAILURE)) {
- WRONG_PARAM_COUNT;
- }
-
- CPDF_FETCH_CPDFDOC(argv[0]);
- convert_to_double_ex(argv[1]);
- convert_to_double_ex(argv[2]);
-
- if(argc > 3) {
- convert_to_long_ex(argv[3]);
- mode = Z_LVAL_PP(argv[3]);
- }
- if(mode == 1)
- cpdf_rawSetTextPosition(pdf, (float) Z_DVAL_PP(argv[1]), (float) Z_DVAL_PP(argv[2]));
- else
- cpdf_setTextPosition(pdf, (float) Z_DVAL_PP(argv[1]), (float) Z_DVAL_PP(argv[2]));
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto bool cpdf_rotate_text(int pdfdoc, float angle)
- Sets text rotation angle */
-PHP_FUNCTION(cpdf_rotate_text)
-{
- zval **arg1, **arg2;
- int id, type;
- CPDFdoc *pdf;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &arg1, &arg2) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- CPDF_FETCH_CPDFDOC(arg1);
- convert_to_double_ex(arg2);
-
- cpdf_rotateText(pdf, (float) Z_DVAL_PP(arg2));
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto bool cpdf_set_char_spacing(int pdfdoc, float space)
- Sets character spacing */
-PHP_FUNCTION(cpdf_set_char_spacing)
-{
- zval **arg1, **arg2;
- int id, type;
- CPDFdoc *pdf;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &arg1, &arg2) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- CPDF_FETCH_CPDFDOC(arg1);
- convert_to_double_ex(arg2);
-
- cpdf_setCharacterSpacing(pdf, (float) Z_DVAL_PP(arg2));
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto bool cpdf_set_word_spacing(int pdfdoc, float space)
- Sets spacing between words */
-PHP_FUNCTION(cpdf_set_word_spacing)
-{
- zval **arg1, **arg2;
- int id, type;
- CPDFdoc *pdf;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &arg1, &arg2) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- CPDF_FETCH_CPDFDOC(arg1);
- convert_to_double_ex(arg2);
-
- cpdf_setWordSpacing(pdf, (float) Z_DVAL_PP(arg2));
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto float cpdf_stringwidth(int pdfdoc, string text)
- Returns width of text in current font */
-PHP_FUNCTION(cpdf_stringwidth)
-{
- zval **arg1, **arg2;
- int id, type;
- double width;
- CPDFdoc *pdf;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &arg1, &arg2) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- CPDF_FETCH_CPDFDOC(arg1);
- convert_to_string_ex(arg2);
-
- width = (double) cpdf_stringWidth(pdf, Z_STRVAL_PP(arg2));
-
- RETURN_DOUBLE((double)width);
-}
-/* }}} */
-
-/* {{{ proto bool cpdf_save(int pdfdoc)
- Saves current enviroment */
-PHP_FUNCTION(cpdf_save)
-{
- zval **arg1;
- int id, type;
- CPDFdoc *pdf;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg1) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- CPDF_FETCH_CPDFDOC(arg1);
-
- cpdf_gsave(pdf);
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto bool cpdf_restore(int pdfdoc)
- Restores formerly saved enviroment */
-PHP_FUNCTION(cpdf_restore)
-{
- zval **arg1;
- int id, type;
- CPDFdoc *pdf;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg1) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- CPDF_FETCH_CPDFDOC(arg1);
-
- cpdf_grestore(pdf);
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto bool cpdf_translate(int pdfdoc, float x, float y)
- Sets origin of coordinate system */
-PHP_FUNCTION(cpdf_translate)
-{
- zval **arg1, **arg2, **arg3;
- int id, type;
- CPDFdoc *pdf;
-
- if (ZEND_NUM_ARGS() != 3 || zend_get_parameters_ex(3, &arg1, &arg2, &arg3) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- CPDF_FETCH_CPDFDOC(arg1);
- convert_to_double_ex(arg2);
- convert_to_double_ex(arg3);
-
- cpdf_rawTranslate(pdf, (float) Z_DVAL_PP(arg2), (float) Z_DVAL_PP(arg3));
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto bool cpdf_scale(int pdfdoc, float x_scale, float y_scale)
- Sets scaling */
-PHP_FUNCTION(cpdf_scale)
-{
- zval **arg1, **arg2, **arg3;
- int id, type;
- CPDFdoc *pdf;
-
- if (ZEND_NUM_ARGS() != 3 || zend_get_parameters_ex(3, &arg1, &arg2, &arg3) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- CPDF_FETCH_CPDFDOC(arg1);
- convert_to_double_ex(arg2);
- convert_to_double_ex(arg3);
-
- cpdf_scale(pdf, (float) Z_DVAL_PP(arg2), (float) Z_DVAL_PP(arg3));
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto bool cpdf_rotate(int pdfdoc, float angle)
- Sets rotation */
-PHP_FUNCTION(cpdf_rotate)
-{
- zval **arg1, **arg2;
- int id, type;
- CPDFdoc *pdf;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &arg1, &arg2) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- CPDF_FETCH_CPDFDOC(arg1);
- convert_to_double_ex(arg2);
-
- cpdf_rotate(pdf, (float) Z_DVAL_PP(arg2));
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto bool cpdf_setflat(int pdfdoc, float value)
- Sets flatness */
-PHP_FUNCTION(cpdf_setflat)
-{
- zval **arg1, **arg2;
- int id, type;
- CPDFdoc *pdf;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &arg1, &arg2) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- CPDF_FETCH_CPDFDOC(arg1);
- convert_to_double_ex(arg2);
-
- if((Z_LVAL_PP(arg2) > 100) && (Z_LVAL_PP(arg2) < 0)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Parameter has to between 0 and 100");
- RETURN_FALSE;
- }
-
- cpdf_setflat(pdf, (int) Z_DVAL_PP(arg2));
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto bool cpdf_setlinejoin(int pdfdoc, int value)
- Sets linejoin parameter */
-PHP_FUNCTION(cpdf_setlinejoin)
-{
- zval **arg1, **arg2;
- int id, type;
- CPDFdoc *pdf;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &arg1, &arg2) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- CPDF_FETCH_CPDFDOC(arg1);
- convert_to_long_ex(arg2);
-
- if((Z_LVAL_PP(arg2) > 2) && (Z_LVAL_PP(arg2) < 0)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Parameter has to between 0 and 2");
- RETURN_FALSE;
- }
-
- cpdf_setlinejoin(pdf, Z_LVAL_PP(arg2));
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto bool cpdf_setlinecap(int pdfdoc, int value)
- Sets linecap parameter */
-PHP_FUNCTION(cpdf_setlinecap)
-{
- zval **arg1, **arg2;
- int id, type;
- CPDFdoc *pdf;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &arg1, &arg2) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- CPDF_FETCH_CPDFDOC(arg1);
- convert_to_long_ex(arg2);
-
- if((Z_LVAL_PP(arg2) > 2) && (Z_LVAL_PP(arg2) < 0)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Parameter has to be > 0 and =< 2");
- RETURN_FALSE;
- }
-
- cpdf_setlinecap(pdf, Z_LVAL_PP(arg2));
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto bool cpdf_setmiterlimit(int pdfdoc, float value)
- Sets miter limit */
-PHP_FUNCTION(cpdf_setmiterlimit)
-{
- zval **arg1, **arg2;
- int id, type;
- CPDFdoc *pdf;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &arg1, &arg2) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- CPDF_FETCH_CPDFDOC(arg1);
- convert_to_double_ex(arg2);
-
- if(Z_DVAL_PP(arg2) < 1) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Parameter has to be >= 1");
- RETURN_FALSE;
- }
-
- cpdf_setmiterlimit(pdf, (float) Z_DVAL_PP(arg2));
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto bool cpdf_setlinewidth(int pdfdoc, float width)
- Sets line width */
-PHP_FUNCTION(cpdf_setlinewidth)
-{
- zval **arg1, **arg2;
- int id, type;
- CPDFdoc *pdf;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &arg1, &arg2) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- CPDF_FETCH_CPDFDOC(arg1);
- convert_to_double_ex(arg2);
-
- cpdf_setlinewidth(pdf, (float) Z_DVAL_PP(arg2));
-
- RETURN_TRUE;
-}
-/* }}} */
-
-#define BUFFERLEN 20
-/* {{{ proto bool cpdf_setdash(int pdfdoc, long white, long black)
- Sets dash pattern */
-PHP_FUNCTION(cpdf_setdash)
-{
- zval **arg1, **arg2, **arg3;
- int id, type;
- char buffer[BUFFERLEN];
- CPDFdoc *pdf;
-
- if (ZEND_NUM_ARGS() != 3 || zend_get_parameters_ex(3, &arg1, &arg2, &arg3) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- CPDF_FETCH_CPDFDOC(arg1);
- convert_to_long_ex(arg2);
- convert_to_long_ex(arg3);
-
- snprintf(buffer, BUFFERLEN, "[%d %d] 0", (int) Z_LVAL_PP(arg2), (int) Z_LVAL_PP(arg3));
- cpdf_setdash(pdf, buffer);
-
- RETURN_TRUE;
-}
-/* }}} */
-#undef BUFFERLEN
-
-/* {{{ proto bool cpdf_moveto(int pdfdoc, float x, float y [, int mode])
- Sets current point */
-PHP_FUNCTION(cpdf_moveto)
-{
- zval **argv[4];
- int id, type, mode = 0, argc = ZEND_NUM_ARGS();
- CPDFdoc *pdf;
-
- if(argc < 3 || argc > 4 || (zend_get_parameters_array_ex(argc, argv) == FAILURE)) {
- WRONG_PARAM_COUNT;
- }
-
- CPDF_FETCH_CPDFDOC(argv[0]);
- convert_to_double_ex(argv[1]);
- convert_to_double_ex(argv[2]);
-
- if(argc > 3) {
- convert_to_long_ex(argv[3]);
- mode = Z_LVAL_PP(argv[3]);
- }
- if(mode == 1)
- cpdf_rawMoveto(pdf, (float) Z_DVAL_PP(argv[1]), (float) Z_DVAL_PP(argv[2]));
- else
- cpdf_moveto(pdf, (float) Z_DVAL_PP(argv[1]), (float) Z_DVAL_PP(argv[2]));
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto bool cpdf_rmoveto(int pdfdoc, float x, float y [, int mode])
- Sets current point */
-PHP_FUNCTION(cpdf_rmoveto)
-{
- zval **argv[4];
- int id, type, mode = 0, argc = ZEND_NUM_ARGS();
- CPDFdoc *pdf;
-
- if(argc < 3 || argc > 4 || (zend_get_parameters_array_ex(argc, argv) == FAILURE)) {
- WRONG_PARAM_COUNT;
- }
-
- CPDF_FETCH_CPDFDOC(argv[0]);
- convert_to_double_ex(argv[1]);
- convert_to_double_ex(argv[2]);
-
- if(argc > 3) {
- convert_to_long_ex(argv[3]);
- mode = Z_LVAL_PP(argv[3]);
- }
- if(mode == 1)
- cpdf_rawRmoveto(pdf, (float) Z_DVAL_PP(argv[1]), (float) Z_DVAL_PP(argv[2]));
- else
- cpdf_rmoveto(pdf, (float) Z_DVAL_PP(argv[1]), (float) Z_DVAL_PP(argv[2]));
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto bool cpdf_curveto(int pdfdoc, float x1, float y1, float x2, float y2, float x3, float y3 [, int mode])
- Draws a curve */
-PHP_FUNCTION(cpdf_curveto)
-{
- zval **argv[8];
- int id, type, mode = 0, argc = ZEND_NUM_ARGS();
- CPDFdoc *pdf;
-
- if(argc < 7 || argc > 8 || (zend_get_parameters_array_ex(argc, argv) == FAILURE)) {
- WRONG_PARAM_COUNT;
- }
-
- CPDF_FETCH_CPDFDOC(argv[0]);
- convert_to_double_ex(argv[1]);
- convert_to_double_ex(argv[2]);
- convert_to_double_ex(argv[3]);
- convert_to_double_ex(argv[4]);
- convert_to_double_ex(argv[5]);
- convert_to_double_ex(argv[6]);
-
- if(argc > 7) {
- convert_to_long_ex(argv[7]);
- mode = Z_LVAL_PP(argv[7]);
- }
- if(mode == 1)
- cpdf_rawCurveto(pdf, (float) Z_DVAL_PP(argv[1]),
- (float) Z_DVAL_PP(argv[2]),
- (float) Z_DVAL_PP(argv[3]),
- (float) Z_DVAL_PP(argv[4]),
- (float) Z_DVAL_PP(argv[5]),
- (float) Z_DVAL_PP(argv[6]));
- else
- cpdf_curveto(pdf, (float) Z_DVAL_PP(argv[1]),
- (float) Z_DVAL_PP(argv[2]),
- (float) Z_DVAL_PP(argv[3]),
- (float) Z_DVAL_PP(argv[4]),
- (float) Z_DVAL_PP(argv[5]),
- (float) Z_DVAL_PP(argv[6]));
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto bool cpdf_lineto(int pdfdoc, float x, float y [, int mode])
- Draws a line */
-PHP_FUNCTION(cpdf_lineto)
-{
- zval **argv[4];
- int id, type, mode = 0, argc = ZEND_NUM_ARGS();
- CPDFdoc *pdf;
-
- if(argc < 3 || argc > 4 || (zend_get_parameters_array_ex(argc, argv) == FAILURE)) {
- WRONG_PARAM_COUNT;
- }
-
- CPDF_FETCH_CPDFDOC(argv[0]);
- convert_to_double_ex(argv[1]);
- convert_to_double_ex(argv[2]);
-
- if(argc > 3) {
- convert_to_long_ex(argv[3]);
- mode = Z_LVAL_PP(argv[3]);
- }
- if(mode == 1)
- cpdf_rawLineto(pdf, (float) Z_DVAL_PP(argv[1]), (float) Z_DVAL_PP(argv[2]));
- else
- cpdf_lineto(pdf, (float) Z_DVAL_PP(argv[1]), (float) Z_DVAL_PP(argv[2]));
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto bool cpdf_rlineto(int pdfdoc, float x, float y [, int mode])
- Draws a line relative to current point */
-PHP_FUNCTION(cpdf_rlineto)
-{
- zval **argv[4];
- int id, type, mode = 0, argc = ZEND_NUM_ARGS();
- CPDFdoc *pdf;
-
- if(argc < 3 || argc > 4 || (zend_get_parameters_array_ex(argc, argv) == FAILURE)) {
- WRONG_PARAM_COUNT;
- }
-
- CPDF_FETCH_CPDFDOC(argv[0]);
- convert_to_double_ex(argv[1]);
- convert_to_double_ex(argv[2]);
-
- if(argc > 3) {
- convert_to_long_ex(argv[3]);
- mode = Z_LVAL_PP(argv[3]);
- }
- if(mode == 1)
- cpdf_rawRlineto(pdf, (float) Z_DVAL_PP(argv[1]), (float) Z_DVAL_PP(argv[2]));
- else
- cpdf_rlineto(pdf, (float) Z_DVAL_PP(argv[1]), (float) Z_DVAL_PP(argv[2]));
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto bool cpdf_circle(int pdfdoc, float x, float y, float radius [, int mode])
- Draws a circle */
-PHP_FUNCTION(cpdf_circle)
-{
- zval **argv[5];
- int id, type, mode = 0, argc = ZEND_NUM_ARGS();
- CPDFdoc *pdf;
-
- if(argc < 4 || argc > 5 || (zend_get_parameters_array_ex(argc, argv) == FAILURE)) {
- WRONG_PARAM_COUNT;
- }
-
- CPDF_FETCH_CPDFDOC(argv[0]);
- convert_to_double_ex(argv[1]);
- convert_to_double_ex(argv[2]);
- convert_to_double_ex(argv[3]);
-
- if(argc > 4) {
- convert_to_long_ex(argv[4]);
- mode = Z_LVAL_PP(argv[4]);
- }
- if(mode == 1)
- cpdf_rawCircle(pdf, (float) Z_DVAL_PP(argv[1]), (float) Z_DVAL_PP(argv[2]), (float) Z_DVAL_PP(argv[3]));
- else
- cpdf_circle(pdf, (float) Z_DVAL_PP(argv[1]), (float) Z_DVAL_PP(argv[2]), (float) Z_DVAL_PP(argv[3]));
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto bool cpdf_arc(int pdfdoc, float x, float y, float radius, float start, float end [, int mode])
- Draws an arc */
-PHP_FUNCTION(cpdf_arc)
-{
- zval **argv[7];
- int id, type, mode = 0, argc = ZEND_NUM_ARGS();
- CPDFdoc *pdf;
-
- if(argc < 6 || argc > 7 || (zend_get_parameters_array_ex(argc, argv) == FAILURE)) {
- WRONG_PARAM_COUNT;
- }
-
- CPDF_FETCH_CPDFDOC(argv[0]);
- convert_to_double_ex(argv[1]);
- convert_to_double_ex(argv[2]);
- convert_to_double_ex(argv[3]);
- convert_to_double_ex(argv[4]);
- convert_to_double_ex(argv[5]);
-
- if(argc > 6) {
- convert_to_long_ex(argv[6]);
- mode = Z_LVAL_PP(argv[6]);
- }
- if(mode == 1)
- cpdf_rawArc(pdf, (float) Z_DVAL_PP(argv[1]), (float) Z_DVAL_PP(argv[2]), (float) Z_DVAL_PP(argv[3]), (float) Z_DVAL_PP(argv[4]), (float) Z_DVAL_PP(argv[5]), 1);
- else
- cpdf_arc(pdf, (float) Z_DVAL_PP(argv[1]), (float) Z_DVAL_PP(argv[2]), (float) Z_DVAL_PP(argv[3]), (float) Z_DVAL_PP(argv[4]), (float) Z_DVAL_PP(argv[5]), 1);
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto bool cpdf_rect(int pdfdoc, float x, float y, float width, float height [, int mode])
- Draws a rectangle */
-PHP_FUNCTION(cpdf_rect)
-{
- zval **argv[6];
- int id, type, mode = 0, argc = ZEND_NUM_ARGS();
- CPDFdoc *pdf;
-
- if(argc < 5 || argc > 6 || (zend_get_parameters_array_ex(argc, argv) == FAILURE)) {
- WRONG_PARAM_COUNT;
- }
-
- CPDF_FETCH_CPDFDOC(argv[0]);
- convert_to_double_ex(argv[1]);
- convert_to_double_ex(argv[2]);
- convert_to_double_ex(argv[3]);
- convert_to_double_ex(argv[4]);
-
- if(argc > 5) {
- convert_to_long_ex(argv[5]);
- mode = Z_LVAL_PP(argv[5]);
- }
- if(mode == 1)
- cpdf_rawRect(pdf, (float) Z_DVAL_PP(argv[1]),
- (float) Z_DVAL_PP(argv[2]),
- (float) Z_DVAL_PP(argv[3]),
- (float) Z_DVAL_PP(argv[4]));
- else
- cpdf_rect(pdf, (float) Z_DVAL_PP(argv[1]),
- (float) Z_DVAL_PP(argv[2]),
- (float) Z_DVAL_PP(argv[3]),
- (float) Z_DVAL_PP(argv[4]));
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto bool cpdf_newpath(int pdfdoc)
- Starts new path */
-PHP_FUNCTION(cpdf_newpath)
-{
- zval **arg1;
- int id, type;
- CPDFdoc *pdf;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg1) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- CPDF_FETCH_CPDFDOC(arg1);
-
- cpdf_newpath(pdf);
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto bool cpdf_closepath(int pdfdoc)
- Close path */
-PHP_FUNCTION(cpdf_closepath)
-{
- zval **arg1;
- int id, type;
- CPDFdoc *pdf;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg1) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- CPDF_FETCH_CPDFDOC(arg1);
-
- cpdf_closepath(pdf);
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto bool cpdf_closepath_stroke(int pdfdoc)
- Close path and draw line along path */
-PHP_FUNCTION(cpdf_closepath_stroke)
-{
- zval **arg1;
- int id, type;
- CPDFdoc *pdf;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg1) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- CPDF_FETCH_CPDFDOC(arg1);
-
- cpdf_closepath(pdf);
- cpdf_stroke(pdf);
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto bool cpdf_stroke(int pdfdoc)
- Draws line along path path */
-PHP_FUNCTION(cpdf_stroke)
-{
- zval **arg1;
- int id, type;
- CPDFdoc *pdf;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg1) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- CPDF_FETCH_CPDFDOC(arg1);
-
- cpdf_stroke(pdf);
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto bool cpdf_fill(int pdfdoc)
- Fills current path */
-PHP_FUNCTION(cpdf_fill)
-{
- zval **arg1;
- int id, type;
- CPDFdoc *pdf;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg1) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- CPDF_FETCH_CPDFDOC(arg1);
-
- cpdf_fill(pdf);
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto bool cpdf_fill_stroke(int pdfdoc)
- Fills and stroke current path */
-PHP_FUNCTION(cpdf_fill_stroke)
-{
- zval **arg1;
- int id, type;
- CPDFdoc *pdf;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg1) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- CPDF_FETCH_CPDFDOC(arg1);
-
- cpdf_fill(pdf);
- cpdf_stroke(pdf);
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto bool cpdf_closepath_fill_stroke(int pdfdoc)
- Close, fill and stroke current path */
-PHP_FUNCTION(cpdf_closepath_fill_stroke)
-{
- zval **arg1;
- int id, type;
- CPDFdoc *pdf;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg1) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- CPDF_FETCH_CPDFDOC(arg1);
-
- cpdf_closepath(pdf);
- cpdf_fill(pdf);
- cpdf_stroke(pdf);
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto bool cpdf_clip(int pdfdoc)
- Clips to current path */
-PHP_FUNCTION(cpdf_clip)
-{
- zval **arg1;
- int id, type;
- CPDFdoc *pdf;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg1) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- CPDF_FETCH_CPDFDOC(arg1);
-
- cpdf_clip(pdf);
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto bool cpdf_setgray_fill(int pdfdoc, float value)
- Sets filling color to gray value */
-PHP_FUNCTION(cpdf_setgray_fill)
-{
- zval **arg1, **arg2;
- int id, type;
- CPDFdoc *pdf;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &arg1, &arg2) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- CPDF_FETCH_CPDFDOC(arg1);
- convert_to_double_ex(arg2);
-
- cpdf_setgrayFill(pdf, (float) Z_DVAL_PP(arg2));
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto bool cpdf_setgray_stroke(int pdfdoc, float value)
- Sets drawing color to gray value */
-PHP_FUNCTION(cpdf_setgray_stroke)
-{
- zval **arg1, **arg2;
- int id, type;
- CPDFdoc *pdf;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &arg1, &arg2) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- CPDF_FETCH_CPDFDOC(arg1);
- convert_to_double_ex(arg2);
-
- cpdf_setgrayStroke(pdf, (float) Z_DVAL_PP(arg2));
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto bool cpdf_setgray(int pdfdoc, float value)
- Sets drawing and filling color to gray value */
-PHP_FUNCTION(cpdf_setgray)
-{
- zval **arg1, **arg2;
- int id, type;
- CPDFdoc *pdf;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &arg1, &arg2) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- CPDF_FETCH_CPDFDOC(arg1);
- convert_to_double_ex(arg2);
-
- cpdf_setgray(pdf, (float) Z_DVAL_PP(arg2));
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto bool cpdf_setrgbcolor_fill(int pdfdoc, float red, float green, float blue)
- Sets filling color to rgb color value */
-PHP_FUNCTION(cpdf_setrgbcolor_fill)
-{
- zval **arg1, **arg2, **arg3, **arg4;
- int id, type;
- CPDFdoc *pdf;
-
- if (ZEND_NUM_ARGS() != 4 || zend_get_parameters_ex(4, &arg1, &arg2, &arg3, &arg4) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- CPDF_FETCH_CPDFDOC(arg1);
- convert_to_double_ex(arg2);
- convert_to_double_ex(arg3);
- convert_to_double_ex(arg4);
-
- cpdf_setrgbcolorFill(pdf, (float) Z_DVAL_PP(arg2), (float) Z_DVAL_PP(arg3), (float) Z_DVAL_PP(arg4));
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto bool cpdf_setrgbcolor_stroke(int pdfdoc, float red, float green, float blue)
- Sets drawing color to RGB color value */
-PHP_FUNCTION(cpdf_setrgbcolor_stroke)
-{
- zval **arg1, **arg2, **arg3, **arg4;
- int id, type;
- CPDFdoc *pdf;
-
- if (ZEND_NUM_ARGS() != 4 || zend_get_parameters_ex(4, &arg1, &arg2, &arg3, &arg4) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- CPDF_FETCH_CPDFDOC(arg1);
- convert_to_double_ex(arg2);
- convert_to_double_ex(arg3);
- convert_to_double_ex(arg4);
-
- cpdf_setrgbcolorStroke(pdf, (float) Z_DVAL_PP(arg2), (float) Z_DVAL_PP(arg3), (float) Z_DVAL_PP(arg4));
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto bool cpdf_setrgbcolor(int pdfdoc, float red, float green, float blue)
- Sets drawing and filling color to RGB color value */
-PHP_FUNCTION(cpdf_setrgbcolor)
-{
- zval **arg1, **arg2, **arg3, **arg4;
- int id, type;
- CPDFdoc *pdf;
-
- if (ZEND_NUM_ARGS() != 4 || zend_get_parameters_ex(4, &arg1, &arg2, &arg3, &arg4) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- CPDF_FETCH_CPDFDOC(arg1);
- convert_to_double_ex(arg2);
- convert_to_double_ex(arg3);
- convert_to_double_ex(arg4);
-
- cpdf_setrgbcolor(pdf, (float) Z_DVAL_PP(arg2), (float) Z_DVAL_PP(arg3), (float) Z_DVAL_PP(arg4));
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto bool cpdf_set_page_animation(int pdfdoc, int transition, float duration, float direction, int orientation, int inout)
- Sets transition between pages */
-PHP_FUNCTION(cpdf_set_page_animation)
-{
- zval **arg1, **arg2, **arg3, **arg4, **arg5, **arg6;
- int id, type;
- CPDFdoc *pdf;
-
- if (ZEND_NUM_ARGS() != 6 || zend_get_parameters_ex(6, &arg1, &arg2, &arg3, &arg4, &arg5, &arg6) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- CPDF_FETCH_CPDFDOC(arg1);
- convert_to_long_ex(arg2);
- convert_to_double_ex(arg3);
- convert_to_double_ex(arg4);
- convert_to_long_ex(arg5);
- convert_to_long_ex(arg6);
-
- cpdf_setPageTransition(pdf, Z_LVAL_PP(arg2), Z_DVAL_PP(arg3), Z_DVAL_PP(arg4),
- Z_LVAL_PP(arg5), Z_LVAL_PP(arg6));
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto bool cpdf_finalize(int pdfdoc)
- Creates PDF doc in memory */
-PHP_FUNCTION(cpdf_finalize)
-{
- zval **arg1;
- int id, type;
- CPDFdoc *pdf;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg1) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- CPDF_FETCH_CPDFDOC(arg1);
-
- cpdf_finalizeAll(pdf);
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto bool cpdf_output_buffer(int pdfdoc)
- Returns the internal memory stream as string */
-PHP_FUNCTION(cpdf_output_buffer)
-{
- zval **arg1;
- int id, type, lenght;
- CPDFdoc *pdf;
- char *buffer;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg1) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- CPDF_FETCH_CPDFDOC(arg1);
-
- buffer = cpdf_getBufferForPDF(pdf, &lenght);
-
- php_write(buffer, lenght TSRMLS_CC);
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto bool cpdf_save_to_file(int pdfdoc, string filename)
- Saves the internal memory stream to a file */
-PHP_FUNCTION(cpdf_save_to_file)
-{
- zval **arg1, **arg2;
- int id, type;
- CPDFdoc *pdf;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &arg1, &arg2) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- CPDF_FETCH_CPDFDOC(arg1);
- convert_to_string_ex(arg2);
-
-#if APACHE
- if(strcmp(Z_STRVAL_PP(arg2), "-") == 0)
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Writing to stdout as described in the ClibPDF manual is not possible if php is used as an Apache module. Use cpdf_output_buffer() instead.");
-#endif
-
- if (php_check_open_basedir(Z_STRVAL_PP(arg2) TSRMLS_CC) || (PG(safe_mode) && !php_checkuid(Z_STRVAL_PP(arg2), "wb+", CHECKUID_CHECK_MODE_PARAM))) {
- RETURN_FALSE;
- }
-
- cpdf_savePDFmemoryStreamToFile(pdf, Z_STRVAL_PP(arg2));
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto bool cpdf_import_jpeg(int pdfdoc, string filename, float x, float y, float angle, float width, float height, float x_scale, float y_scale, int gsave [, int mode])
- Includes JPEG image */
-PHP_FUNCTION(cpdf_import_jpeg)
-{
- zval **argv[11];
- int id, type, mode = 0, argc = ZEND_NUM_ARGS();
- float width, height, xscale, yscale;
- CPDFdoc *pdf;
-
- if(argc < 10 || argc > 11 || (zend_get_parameters_array_ex(argc, argv) == FAILURE)) {
- WRONG_PARAM_COUNT;
- }
-
- CPDF_FETCH_CPDFDOC(argv[0]);
- convert_to_string_ex(argv[1]);
-
- if (php_check_open_basedir(Z_STRVAL_PP(argv[1]) TSRMLS_CC) || (PG(safe_mode) && !php_checkuid(Z_STRVAL_PP(argv[1]), "rb+", CHECKUID_CHECK_MODE_PARAM))) {
- RETURN_FALSE;
- }
-
- convert_to_double_ex(argv[2]);
- convert_to_double_ex(argv[3]);
- convert_to_double_ex(argv[4]);
- convert_to_double_ex(argv[5]);
- width = (float) Z_DVAL_PP(argv[5]);
- convert_to_double_ex(argv[6]);
- height = (float) Z_DVAL_PP(argv[6]);
- convert_to_double_ex(argv[7]);
- xscale = (float) Z_DVAL_PP(argv[7]);
- convert_to_double_ex(argv[8]);
- yscale = (float) Z_DVAL_PP(argv[8]);
- convert_to_long_ex(argv[9]);
-
- if(argc > 10) {
- convert_to_long_ex(argv[10]);
- mode = Z_LVAL_PP(argv[10]);
- }
- if(mode == 1)
- cpdf_rawImportImage(pdf, Z_STRVAL_PP(argv[1]),
- JPEG_IMG,
- (float) Z_DVAL_PP(argv[2]),
- (float) Z_DVAL_PP(argv[3]),
- (float) Z_DVAL_PP(argv[4]),
- &width,
- &height,
- &xscale,
- &yscale,
- Z_LVAL_PP(argv[9]));
- else
- cpdf_rawImportImage(pdf, Z_STRVAL_PP(argv[1]),
- JPEG_IMG,
- (float) Z_DVAL_PP(argv[2]),
- (float) Z_DVAL_PP(argv[3]),
- (float) Z_DVAL_PP(argv[4]),
- &width,
- &height,
- &xscale,
- &yscale,
- Z_LVAL_PP(argv[9]));
-
- RETURN_TRUE;
-}
-/* }}} */
-
-#if HAVE_LIBGD13
-/* {{{ proto bool cpdf_place_inline_image(int pdfdoc, int gdimage, float x, float y, float angle, fload width, float height, int gsave [, int mode])
- Includes image */
-PHP_FUNCTION(cpdf_place_inline_image)
-{
- zval **argv[11];
- int id, gid, type, mode = 0, argc = ZEND_NUM_ARGS();
- int count, i, j, color;
- CPDFdoc *pdf;
- unsigned char *buffer, *ptr;
- gdImagePtr im;
-
- if(argc < 8 || argc > 9 || (zend_get_parameters_array_ex(argc, argv) == FAILURE)) {
- WRONG_PARAM_COUNT;
- }
-
- CPDF_FETCH_CPDFDOC(argv[0]);
- convert_to_long_ex(argv[1]);
- convert_to_double_ex(argv[2]);
- convert_to_double_ex(argv[3]);
- convert_to_double_ex(argv[4]);
- convert_to_double_ex(argv[5]);
- convert_to_double_ex(argv[6]);
- convert_to_long_ex(argv[7]);
-
- gid=Z_LVAL_PP(argv[1]);
- im = zend_list_find(gid, &type);
-
- ZEND_GET_RESOURCE_TYPE_ID(CPDF_GLOBAL(le_gd), "gd");
- if(!CPDF_GLOBAL(le_gd))
- {
- php_error_docref(NULL TSRMLS_CC, E_ERROR, "Unable to find handle for GD image stream. Please check the GD extension is loaded.");
- }
-
- if (!im || type != CPDF_GLOBAL(le_gd)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to find image pointer");
- RETURN_FALSE;
- }
-
- if(argc > 8) {
- convert_to_long_ex(argv[8]);
- mode = Z_LVAL_PP(argv[8]);
- }
-
- count = 3 * im->sx * im->sy;
- buffer = (unsigned char *) safe_emalloc(3 * im->sx, im->sy, 0);
-
- ptr = buffer;
- for(i=0; i<im->sy; i++) {
- for(j=0; j<im->sx; j++) {
-#if HAVE_LIBGD20
- if(gdImageTrueColor(im)) {
- if (im->tpixels && gdImageBoundsSafe(im, j, i)) {
- color = gdImageTrueColorPixel(im, j, i);
- *ptr++ = (color >> 16) & 0xFF;
- *ptr++ = (color >> 8) & 0xFF;
- *ptr++ = color & 0xFF;
- }
- } else {
-#endif
- if (im->pixels && gdImageBoundsSafe(im, j, i)) {
- color = im->pixels[i][j];
- *ptr++ = im->red[color];
- *ptr++ = im->green[color];
- *ptr++ = im->blue[color];
- }
-#if HAVE_LIBGD20
- }
-#endif
- }
- }
-
- if(mode == 1)
- cpdf_placeInLineImage(pdf, buffer, count,
- (float) Z_DVAL_PP(argv[2]),
- (float) Z_DVAL_PP(argv[3]),
- (float) Z_DVAL_PP(argv[4]),
- (float) Z_DVAL_PP(argv[5]),
- (float) Z_DVAL_PP(argv[6]),
- im->sx,
- im->sy,
- 8, 2, Z_LVAL_PP(argv[7]));
- else
- cpdf_rawPlaceInLineImage(pdf, buffer, count,
- (float) Z_DVAL_PP(argv[2]),
- (float) Z_DVAL_PP(argv[3]),
- (float) Z_DVAL_PP(argv[4]),
- (float) Z_DVAL_PP(argv[5]),
- (float) Z_DVAL_PP(argv[6]),
- im->sx,
- im->sy,
- 8, 2, Z_LVAL_PP(argv[7]));
-
- efree(buffer);
- RETURN_TRUE;
-}
-/* }}} */
-#endif
-
-/* {{{ proto bool cpdf_add_annotation(int pdfdoc, float xll, float yll, float xur, float xur, string title, string text [, int mode])
- Sets annotation */
-PHP_FUNCTION(cpdf_add_annotation)
-{
- zval **argv[11];
- int id, type, mode = 0, argc = ZEND_NUM_ARGS();
- CPDFdoc *pdf;
- CPDFannotAttrib attrib;
-
- if(argc < 7 || argc > 8 || (zend_get_parameters_array_ex(argc, argv) == FAILURE)) {
- WRONG_PARAM_COUNT;
- }
-
- CPDF_FETCH_CPDFDOC(argv[0]);
- convert_to_double_ex(argv[1]);
- convert_to_double_ex(argv[2]);
- convert_to_double_ex(argv[3]);
- convert_to_double_ex(argv[4]);
- convert_to_string_ex(argv[5]);
- convert_to_string_ex(argv[6]);
-
- attrib.flags = AF_NOZOOM | AF_NOROTATE | AF_READONLY;
- attrib.border_array = "[0 0 1 [4 2]]";
- attrib.BS = NULL;
- attrib.r = 0.00;
- attrib.g = 1.00;
- attrib.b = 1.00;
- if(argc > 7) {
- convert_to_long_ex(argv[7]);
- mode = Z_LVAL_PP(argv[7]);
- }
- if(mode == 1)
- cpdf_rawSetAnnotation(pdf, (float) Z_DVAL_PP(argv[1]),
- (float) Z_DVAL_PP(argv[2]),
- (float) Z_DVAL_PP(argv[3]),
- (float) Z_DVAL_PP(argv[4]),
- Z_STRVAL_PP(argv[5]),
- Z_STRVAL_PP(argv[6]),
- &attrib);
- else
- cpdf_setAnnotation(pdf, (float) Z_DVAL_PP(argv[1]),
- (float) Z_DVAL_PP(argv[2]),
- (float) Z_DVAL_PP(argv[3]),
- (float) Z_DVAL_PP(argv[4]),
- Z_STRVAL_PP(argv[5]),
- Z_STRVAL_PP(argv[6]),
- &attrib);
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto bool cpdf_set_action_url(int pdfdoc, float xll, float yll, float xur, float xur, string url [, int mode])
- Sets hyperlink */
-PHP_FUNCTION(cpdf_set_action_url)
-{
- zval **argv[11];
- int id, type, mode = 0, argc = ZEND_NUM_ARGS();
- CPDFdoc *pdf;
- CPDFannotAttrib attrib;
-
- if(argc < 6 || argc > 7 || (zend_get_parameters_array_ex(argc, argv) == FAILURE)) {
- WRONG_PARAM_COUNT;
- }
-
- CPDF_FETCH_CPDFDOC(argv[0]);
- convert_to_double_ex(argv[1]);
- convert_to_double_ex(argv[2]);
- convert_to_double_ex(argv[3]);
- convert_to_double_ex(argv[4]);
- convert_to_string_ex(argv[5]);
-
- attrib.flags = AF_NOZOOM | AF_NOROTATE | AF_READONLY;
- attrib.border_array = "[0 0 1 [4 0]]";
- attrib.BS = NULL;
- attrib.r = 0.00;
- attrib.g = 0.00;
- attrib.b = 1.00;
- if(argc > 6) {
- convert_to_long_ex(argv[6]);
- mode = Z_LVAL_PP(argv[6]);
- }
- if(mode == 1)
- cpdf_rawSetActionURL(pdf, (float) Z_DVAL_PP(argv[1]),
- (float) Z_DVAL_PP(argv[2]),
- (float) Z_DVAL_PP(argv[3]),
- (float) Z_DVAL_PP(argv[4]),
- Z_STRVAL_PP(argv[5]),
- &attrib);
- else
- cpdf_setActionURL(pdf, (float) Z_DVAL_PP(argv[1]),
- (float) Z_DVAL_PP(argv[2]),
- (float) Z_DVAL_PP(argv[3]),
- (float) Z_DVAL_PP(argv[4]),
- Z_STRVAL_PP(argv[5]),
- &attrib);
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto int cpdf_add_outline(int pdfdoc, int lastoutline, int sublevel, int open, int pagenr, string title)
- Adds outline */
-PHP_FUNCTION(cpdf_add_outline)
-{
- zval **argv[11];
- int id, oid, type, argc = ZEND_NUM_ARGS();
- CPDFdoc *pdf;
- CPDFoutlineEntry *lastoutline;
-
- if(argc != 6 || (zend_get_parameters_array_ex(argc, argv) == FAILURE)) {
- WRONG_PARAM_COUNT;
- }
-
- CPDF_FETCH_CPDFDOC(argv[0]);
- convert_to_long_ex(argv[1]);
- convert_to_long_ex(argv[2]);
- convert_to_long_ex(argv[3]);
- convert_to_long_ex(argv[4]);
- convert_to_string_ex(argv[5]);
-
- oid=Z_LVAL_PP(argv[1]);
- lastoutline = zend_list_find(oid, &type);
- if(!lastoutline || type!=CPDF_GLOBAL(le_outline)) {
- lastoutline = NULL;
-/* php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to find last outline entry %d", id);
- RETURN_FALSE; */
- }
-
- lastoutline = cpdf_addOutlineEntry(pdf, lastoutline,
- Z_LVAL_PP(argv[2]),
- Z_LVAL_PP(argv[3]),
- Z_LVAL_PP(argv[4]),
- Z_STRVAL_PP(argv[5]),
- 1, 0.0, 0.0, 0.0, 0.0);
-
- id = zend_list_insert(lastoutline, CPDF_GLOBAL(le_outline));
- RETURN_LONG(id);
-}
-/* }}} */
-
-#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/cpdf/cpdf.dsp b/ext/cpdf/cpdf.dsp
deleted file mode 100644
index 6b952944eb..0000000000
--- a/ext/cpdf/cpdf.dsp
+++ /dev/null
@@ -1,111 +0,0 @@
-# Microsoft Developer Studio Project File - Name="cpdf" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=cpdf - Win32 Release_TS
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "cpdf.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "cpdf.mak" CFG="cpdf - Win32 Release_TS"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "cpdf - Win32 Release_TS" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "cpdf - Win32 Debug_TS" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "cpdf - Win32 Release_TS"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release_TS"
-# PROP BASE Intermediate_Dir "Release_TS"
-# PROP BASE Ignore_Export_Lib 0
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release_TS"
-# PROP Intermediate_Dir "Release_TS"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MT /W3 /GX /O2 /I "..\.." /I "..\..\..\Zend" /I "..\..\..\TSRM" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "COMPILE_DL_CPDF" /D ZTS=1 /YX /FD /c
-# ADD CPP /nologo /MD /W3 /GX /O2 /I "..\.." /I "..\..\main" /I "..\..\Zend" /I "..\..\TSRM" /I "..\..\..\bindlib_w32" /D ZEND_DEBUG=0 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "CPDF_EXPORTS" /D "COMPILE_DL_CPDF" /D ZTS=1 /D "ZEND_WIN32" /D "PHP_WIN32" /D HAVE_CPDFLIB=1 /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x406 /d "NDEBUG"
-# ADD RSC /l 0x406 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib cpdfi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib php5ts.lib /nologo /dll /machine:I386
-# ADD LINK32 php5ts.lib cpdf.lib user32.lib winspool.lib kernel32.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 /out:"..\..\Release_TS/php_cpdf.dll" /libpath:"..\..\Release_TS" /libpath:"..\..\Release_TS_Inline"
-# SUBTRACT LINK32 /pdb:none
-
-!ELSEIF "$(CFG)" == "cpdf - Win32 Debug_TS"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Debug_TS"
-# PROP BASE Intermediate_Dir "Debug_TS"
-# PROP BASE Ignore_Export_Lib 0
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Debug_TS"
-# PROP Intermediate_Dir "Debug_TS"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MT /W3 /GX /O2 /I "..\.." /I "..\..\Zend" /I "..\..\TSRM" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "COMPILE_DL_CPDF" /D ZTS=1 /D MSSQL70=1 /YX /FD /c
-# ADD CPP /nologo /MDd /W3 /GX /ZI /Od /I "..\.." /I "..\..\main" /I "..\..\Zend" /I "..\..\TSRM" /I "..\..\..\bindlib_w32" /D ZEND_DEBUG=1 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "CPDF_EXPORTS" /D "COMPILE_DL_CPDF" /D ZTS=1 /D "ZEND_WIN32" /D "PHP_WIN32" /D HAVE_CPDFLIB=1 /FR /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x406 /d "NDEBUG"
-# ADD RSC /l 0x406 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib cpdfi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib php5ts.lib /nologo /dll /machine:I386
-# ADD LINK32 cpdf.lib php5ts_debug.lib user32.lib winspool.lib kernel32.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /incremental:yes /debug /machine:I386 /out:"..\..\Debug_TS/php_cpdf.dll" /libpath:"..\..\Debug_TS"
-# SUBTRACT LINK32 /pdb:none
-
-!ENDIF
-
-# Begin Target
-
-# Name "cpdf - Win32 Release_TS"
-# Name "cpdf - Win32 Debug_TS"
-# Begin Group "Source Files"
-
-# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
-# Begin Source File
-
-SOURCE=.\cpdf.c
-# End Source File
-# End Group
-# Begin Group "Header Files"
-
-# PROP Default_Filter "h;hpp;hxx;hm;inl"
-# Begin Source File
-
-SOURCE=.\php_cpdf.h
-# End Source File
-# End Group
-# End Target
-# End Project
diff --git a/ext/cpdf/package.xml b/ext/cpdf/package.xml
deleted file mode 100644
index c3a572db82..0000000000
--- a/ext/cpdf/package.xml
+++ /dev/null
@@ -1,44 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1" ?>
-<!DOCTYPE package SYSTEM "../pear/package.dtd">
-<package>
- <name>cpdf</name>
- <summary>Clib PDF functions</summary>
- <maintainers>
- <maintainer>
- <user>steinm</user>
- <name>Uwe Steinmann</name>
- <email>steinm@php.net</email>
- <role>lead</role>
- </maintainer>
- </maintainers>
- <description>
-ClibPDF lets you create PDF documents with PHP.
-ClibPDF functionality and API are similar to PDFlib.
- </description>
- <license>PHP</license>
- <release>
- <state>beta</state>
- <version>5.0rc1</version>
- <date>2004-03-19</date>
- <notes>
-package.xml added to support intallation using pear installer
- </notes>
- <configureoptions>
- <configureoption name="with-cpdf" default="autodetect" prompt="path to cpdf installation?"/>
- </configureoptions>
- <filelist>
- <file role="doc" name="CREDITS"/>
- <file role="src" name="config.m4"/>
- <file role="src" name="config.mw32"/>
- <file role="src" name="cpdf.dsp"/>
- <file role="src" name="cpdf.c"/>
- <file role="src" name="php_cpdf.h"/>
- </filelist>
- <deps>
- <dep type="php" rel="ge" version="5" />
- </deps>
- </release>
-</package>
-<!--
-vim:et:ts=1:sw=1
--->
diff --git a/ext/cpdf/php_cpdf.h b/ext/cpdf/php_cpdf.h
deleted file mode 100644
index e0c6394fd4..0000000000
--- a/ext/cpdf/php_cpdf.h
+++ /dev/null
@@ -1,119 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Uwe Steinmann <Uwe.Steinmann@fernuni-hagen.de> |
- +----------------------------------------------------------------------+
- */
-/* $Id$ */
-
-#ifndef PHP_CPDF_H
-#define PHP_CPDF_H
-
-#if HAVE_CPDFLIB
-
-/* The macro T is defined in the IMAP headers and clashes with a function
- declaration here. Get rid of it. */
-
-#ifdef T
-#undef T
-#endif
-
-extern zend_module_entry cpdf_module_entry;
-#define cpdf_module_ptr &cpdf_module_entry
-
-PHP_MINFO_FUNCTION(cpdf);
-PHP_MINIT_FUNCTION(cpdf);
-PHP_RINIT_FUNCTION(cpdf);
-PHP_MSHUTDOWN_FUNCTION(cpdf);
-PHP_FUNCTION(cpdf_global_set_document_limits);
-PHP_FUNCTION(cpdf_set_creator);
-PHP_FUNCTION(cpdf_set_title);
-PHP_FUNCTION(cpdf_set_subject);
-PHP_FUNCTION(cpdf_set_keywords);
-PHP_FUNCTION(cpdf_set_viewer_preferences);
-PHP_FUNCTION(cpdf_open);
-PHP_FUNCTION(cpdf_close);
-PHP_FUNCTION(cpdf_page_init);
-PHP_FUNCTION(cpdf_finalize_page);
-PHP_FUNCTION(cpdf_set_current_page);
-PHP_FUNCTION(cpdf_begin_text);
-PHP_FUNCTION(cpdf_end_text);
-PHP_FUNCTION(cpdf_show);
-PHP_FUNCTION(cpdf_show_xy);
-PHP_FUNCTION(cpdf_continue_text);
-PHP_FUNCTION(cpdf_text);
-PHP_FUNCTION(cpdf_set_font);
-PHP_FUNCTION(cpdf_set_font_directories);
-PHP_FUNCTION(cpdf_set_font_map_file);
-PHP_FUNCTION(cpdf_set_leading);
-PHP_FUNCTION(cpdf_set_text_rendering);
-PHP_FUNCTION(cpdf_set_horiz_scaling);
-PHP_FUNCTION(cpdf_set_text_rise);
-PHP_FUNCTION(cpdf_set_text_matrix);
-PHP_FUNCTION(cpdf_set_text_pos);
-PHP_FUNCTION(cpdf_rotate_text);
-PHP_FUNCTION(cpdf_set_char_spacing);
-PHP_FUNCTION(cpdf_set_word_spacing);
-PHP_FUNCTION(cpdf_continue_text);
-PHP_FUNCTION(cpdf_stringwidth);
-PHP_FUNCTION(cpdf_save);
-PHP_FUNCTION(cpdf_restore);
-PHP_FUNCTION(cpdf_translate);
-PHP_FUNCTION(cpdf_scale);
-PHP_FUNCTION(cpdf_rotate);
-PHP_FUNCTION(cpdf_setflat);
-PHP_FUNCTION(cpdf_setlinejoin);
-PHP_FUNCTION(cpdf_setlinecap);
-PHP_FUNCTION(cpdf_setmiterlimit);
-PHP_FUNCTION(cpdf_setlinewidth);
-PHP_FUNCTION(cpdf_setdash);
-PHP_FUNCTION(cpdf_moveto);
-PHP_FUNCTION(cpdf_rmoveto);
-PHP_FUNCTION(cpdf_curveto);
-PHP_FUNCTION(cpdf_lineto);
-PHP_FUNCTION(cpdf_rlineto);
-PHP_FUNCTION(cpdf_circle);
-PHP_FUNCTION(cpdf_arc);
-PHP_FUNCTION(cpdf_rect);
-PHP_FUNCTION(cpdf_newpath);
-PHP_FUNCTION(cpdf_closepath);
-PHP_FUNCTION(cpdf_closepath_stroke);
-PHP_FUNCTION(cpdf_stroke);
-PHP_FUNCTION(cpdf_fill);
-PHP_FUNCTION(cpdf_fill_stroke);
-PHP_FUNCTION(cpdf_closepath_fill_stroke);
-PHP_FUNCTION(cpdf_endpath);
-PHP_FUNCTION(cpdf_clip);
-PHP_FUNCTION(cpdf_setgray_fill);
-PHP_FUNCTION(cpdf_setgray_stroke);
-PHP_FUNCTION(cpdf_setgray);
-PHP_FUNCTION(cpdf_setrgbcolor_fill);
-PHP_FUNCTION(cpdf_setrgbcolor_stroke);
-PHP_FUNCTION(cpdf_setrgbcolor);
-PHP_FUNCTION(cpdf_add_outline);
-PHP_FUNCTION(cpdf_set_page_animation);
-PHP_FUNCTION(cpdf_finalize);
-PHP_FUNCTION(cpdf_output_buffer);
-PHP_FUNCTION(cpdf_save_to_file);
-PHP_FUNCTION(cpdf_add_annotation);
-PHP_FUNCTION(cpdf_import_jpeg);
-#if HAVE_LIBGD13
-PHP_FUNCTION(cpdf_place_inline_image);
-#endif
-PHP_FUNCTION(cpdf_set_action_url);
-#else
-#define cpdf_module_ptr NULL
-#endif
-#define phpext_cpdf_ptr cpdf_module_ptr
-#endif /* _PHP_PDF_H */
diff --git a/ext/ctype/CREDITS b/ext/ctype/CREDITS
deleted file mode 100644
index 22de902709..0000000000
--- a/ext/ctype/CREDITS
+++ /dev/null
@@ -1,2 +0,0 @@
-ctype
-Hartmut Holzgraefe
diff --git a/ext/ctype/README b/ext/ctype/README
deleted file mode 100644
index 1e78a3d933..0000000000
--- a/ext/ctype/README
+++ /dev/null
@@ -1,5 +0,0 @@
-this is an experimental extension that provides the
-ctype family of function available in C
-i'm not sure about whether they should go into ext/standard
-or stay as an extension of their own and about using
-a ctype_ prefix or sticking with the C names ...
diff --git a/ext/ctype/config.m4 b/ext/ctype/config.m4
deleted file mode 100644
index 7d575a3adc..0000000000
--- a/ext/ctype/config.m4
+++ /dev/null
@@ -1,11 +0,0 @@
-dnl
-dnl $Id$
-dnl
-
-PHP_ARG_ENABLE(ctype, whether to enable ctype functions,
-[ --disable-ctype Disable ctype functions], yes)
-
-if test "$PHP_CTYPE" != "no"; then
- AC_DEFINE(HAVE_CTYPE, 1, [ ])
- PHP_NEW_EXTENSION(ctype, ctype.c, $ext_shared)
-fi
diff --git a/ext/ctype/config.w32 b/ext/ctype/config.w32
deleted file mode 100644
index 1ade89cdff..0000000000
--- a/ext/ctype/config.w32
+++ /dev/null
@@ -1,9 +0,0 @@
-// $Id$
-// vim:ft=javascript
-
-ARG_ENABLE("ctype", "ctype", "yes");
-
-if (PHP_CTYPE == "yes") {
- EXTENSION("ctype", "ctype.c");
- AC_DEFINE('HAVE_CTYPE', 1, 'Have ctype');
-}
diff --git a/ext/ctype/ctype.c b/ext/ctype/ctype.c
deleted file mode 100644
index b16324042d..0000000000
--- a/ext/ctype/ctype.c
+++ /dev/null
@@ -1,222 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Hartmut Holzgraefe <hholzgra@php.net> |
- +----------------------------------------------------------------------+
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "php.h"
-#include "php_ini.h"
-#include "php_ctype.h"
-#include "SAPI.h"
-#include "ext/standard/info.h"
-
-#include <ctype.h>
-
-/* You should tweak config.m4 so this symbol (or some else suitable)
- gets defined.
-*/
-#if HAVE_CTYPE
-
-/* If you declare any globals in php_ctype.h uncomment this:
-ZEND_DECLARE_MODULE_GLOBALS(ctype)
-*/
-
-/* True global resources - no need for thread safety here */
-/* static int le_ctype; */
-
-/* {{{ ctype_functions[]
- * Every user visible function must have an entry in ctype_functions[].
- */
-function_entry ctype_functions[] = {
- PHP_FE(ctype_alnum, NULL)
- PHP_FE(ctype_alpha, NULL)
- PHP_FE(ctype_cntrl, NULL)
- PHP_FE(ctype_digit, NULL)
- PHP_FE(ctype_lower, NULL)
- PHP_FE(ctype_graph, NULL)
- PHP_FE(ctype_print, NULL)
- PHP_FE(ctype_punct, NULL)
- PHP_FE(ctype_space, NULL)
- PHP_FE(ctype_upper, NULL)
- PHP_FE(ctype_xdigit, NULL)
- {NULL, NULL, NULL} /* Must be the last line in ctype_functions[] */
-};
-/* }}} */
-
-/* {{{ ctype_module_entry
- */
-zend_module_entry ctype_module_entry = {
- STANDARD_MODULE_HEADER,
- "ctype",
- ctype_functions,
- NULL,
- NULL,
- NULL,
- NULL,
- PHP_MINFO(ctype),
- NO_VERSION_YET,
- STANDARD_MODULE_PROPERTIES
-};
-/* }}} */
-
-#ifdef COMPILE_DL_CTYPE
-ZEND_GET_MODULE(ctype)
-#endif
-
-/* {{{ PHP_MINFO_FUNCTION
- */
-PHP_MINFO_FUNCTION(ctype)
-{
- php_info_print_table_start();
- php_info_print_table_row(2, "ctype functions", "enabled");
- php_info_print_table_end();
-}
-/* }}} */
-
-/* {{{ ctype
- */
-#define CTYPE(iswhat) \
- zval *c; \
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z", &c) == FAILURE) \
- return; \
- switch (Z_TYPE_P(c)) { \
- case IS_LONG: \
- if (Z_LVAL_P(c) <= 255 && Z_LVAL_P(c) >= 0) { \
- RETURN_BOOL(iswhat(Z_LVAL_P(c))); \
- } else if (Z_LVAL_P(c) >= -128) { \
- RETURN_BOOL(iswhat(Z_LVAL_P(c) + 256)); \
- } \
- SEPARATE_ZVAL(&c); \
- convert_to_string(c); \
- case IS_STRING: \
- { \
- char *p; \
- int n, len; \
- p=Z_STRVAL_P(c); \
- len = Z_STRLEN_P(c); \
- for(n=0;n<len;n++) { \
- if(!iswhat((int)*(unsigned char *)(p++))) RETURN_FALSE; \
- } \
- RETURN_TRUE; \
- } \
- default: \
- break; \
- } \
- RETURN_FALSE;
-
-/* }}} */
-
-/* {{{ proto bool ctype_alnum(mixed c)
- Checks for alphanumeric character(s) */
-PHP_FUNCTION(ctype_alnum)
-{
- CTYPE(isalnum);
-}
-/* }}} */
-
-/* {{{ proto bool ctype_alpha(mixed c)
- Checks for alphabetic character(s) */
-PHP_FUNCTION(ctype_alpha)
-{
- CTYPE(isalpha);
-}
-/* }}} */
-
-/* {{{ proto bool ctype_cntrl(mixed c)
- Checks for control character(s) */
-PHP_FUNCTION(ctype_cntrl)
-{
- CTYPE(iscntrl);
-}
-/* }}} */
-
-/* {{{ proto bool ctype_digit(mixed c)
- Checks for numeric character(s) */
-PHP_FUNCTION(ctype_digit)
-{
- CTYPE(isdigit);
-}
-/* }}} */
-
-/* {{{ proto bool ctype_lower(mixed c)
- Checks for lowercase character(s) */
-PHP_FUNCTION(ctype_lower)
-{
- CTYPE(islower);
-}
-/* }}} */
-
-/* {{{ proto bool ctype_graph(mixed c)
- Checks for any printable character(s) except space */
-PHP_FUNCTION(ctype_graph)
-{
- CTYPE(isgraph);
-}
-/* }}} */
-
-/* {{{ proto bool ctype_print(mixed c)
- Checks for printable character(s) */
-PHP_FUNCTION(ctype_print)
-{
- CTYPE(isprint);
-}
-/* }}} */
-
-/* {{{ proto bool ctype_punct(mixed c)
- Checks for any printable character which is not whitespace or an alphanumeric character */
-PHP_FUNCTION(ctype_punct)
-{
- CTYPE(ispunct);
-}
-/* }}} */
-
-/* {{{ proto bool ctype_space(mixed c)
- Checks for whitespace character(s)*/
-PHP_FUNCTION(ctype_space)
-{
- CTYPE(isspace);
-}
-/* }}} */
-
-/* {{{ proto bool ctype_upper(mixed c)
- Checks for uppercase character(s) */
-PHP_FUNCTION(ctype_upper)
-{
- CTYPE(isupper);
-}
-/* }}} */
-
-/* {{{ proto bool ctype_xdigit(mixed c)
- Checks for character(s) representing a hexadecimal digit */
-PHP_FUNCTION(ctype_xdigit)
-{
- CTYPE(isxdigit);
-}
-/* }}} */
-
-#endif /* HAVE_CTYPE */
-
-/*
- * 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/ctype/ctype.dsp b/ext/ctype/ctype.dsp
deleted file mode 100644
index 1305c72f6a..0000000000
--- a/ext/ctype/ctype.dsp
+++ /dev/null
@@ -1,107 +0,0 @@
-# Microsoft Developer Studio Project File - Name="ctype" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=ctype - Win32 Debug_TS
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "ctype.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "ctype.mak" CFG="ctype - Win32 Debug_TS"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "ctype - Win32 Release_TS" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "ctype - Win32 Debug_TS" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "ctype - Win32 Release_TS"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release_TS"
-# PROP BASE Intermediate_Dir "Release_TS"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release_TS"
-# PROP Intermediate_Dir "Release_TS"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "CTYPE_EXPORTS" /YX /FD /c
-# ADD CPP /nologo /MT /W3 /GX /O2 /I "..\.." /I "..\..\Zend" /I "..\..\TSRM" /I "..\..\main" /D "WIN32" /D "PHP_EXPORTS" /D "COMPILE_DL_CTYPE" /D ZTS=1 /D HAVE_CTYPE=1 /D ZEND_DEBUG=0 /D "NDEBUG" /D "_WINDOWS" /D "ZEND_WIN32" /D "PHP_WIN32" /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x407 /d "NDEBUG"
-# ADD RSC /l 0x407 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386
-# ADD LINK32 php5ts.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 /out:"..\..\Release_TS/php_ctype.dll" /libpath:"..\..\Release_TS" /libpath:"..\..\Release_TS_Inline"
-
-!ELSEIF "$(CFG)" == "ctype - Win32 Debug_TS"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug_TS"
-# PROP BASE Intermediate_Dir "Debug_TS"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug_TS"
-# PROP Intermediate_Dir "Debug_TS"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "CTYPE_EXPORTS" /YX /FD /GZ /c
-# ADD CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /I "..\.." /I "..\..\Zend" /I "..\..\TSRM" /I "..\..\main" /D ZEND_DEBUG=1 /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "PHP_EXPORTS" /D "COMPILE_DL_CTYPE" /D ZTS=1 /D "ZEND_WIN32" /D "PHP_WIN32" /D HAVE_CTYPE=1 /YX /FD /GZ /c
-# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x407 /d "_DEBUG"
-# ADD RSC /l 0x407 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 php5ts_debug.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /out:"..\..\Debug_TS/php_ctype.dll" /pdbtype:sept /libpath:"..\..\Debug_TS"
-
-!ENDIF
-
-# Begin Target
-
-# Name "ctype - Win32 Release_TS"
-# Name "ctype - Win32 Debug_TS"
-# Begin Group "Source Files"
-
-# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
-# Begin Source File
-
-SOURCE=.\ctype.c
-# End Source File
-# End Group
-# Begin Group "Header Files"
-
-# PROP Default_Filter "h;hpp;hxx;hm;inl"
-# Begin Source File
-
-SOURCE=.\php_ctype.h
-# End Source File
-# End Group
-# End Target
-# End Project
diff --git a/ext/ctype/ctype.xml b/ext/ctype/ctype.xml
deleted file mode 100644
index 5837b9b5d0..0000000000
--- a/ext/ctype/ctype.xml
+++ /dev/null
@@ -1,245 +0,0 @@
- <reference id="ref.ctype">
- <title>Character type functions</title>
- <titleabbrev>ctype</titleabbrev>
-
- <partintro>
- <para>
- These functions check whether a character or string
- falls into a certain character class according to the i
- current locale.
- </para>
- <para>
- When called with an integer argument theese functions
- behave exactly like their C counterparts.
- </para>
- <para>
- When called with a string argument they will check
- every character in the string and will only return
- true if every character in the string matches the
- requested criteria.
- </para>
- <para>
- Passing anything else but a string or integer will
- return false immediately.
- </para>
- </partintro>
-
-
- <refentry id="function.isalnum">
- <refnamediv>
- <refname>isalnum</refname>
- <refpurpose>Check for alphanumeric character(s)</refpurpose>
- </refnamediv>
- <refsect1>
- <title>Description</title>
- <funcsynopsis>
- <funcprototype>
- <funcdef>bool <function>isalnum</function></funcdef>
- <paramdef>string <parameter>c</parameter></paramdef>
- </funcprototype>
- </funcsynopsis>
- <para>
- See also <function>setlocale</function>.
- </para>
- </refsect1>
- </refentry>
-
- <refentry id="function.isalpha">
- <refnamediv>
- <refname>isalpha</refname>
- <refpurpose></refpurpose>
- </refnamediv>
- <refsect1>
- <title>Description</title>
- <funcsynopsis>
- <funcprototype>
- <funcdef>bool <function>isalpha</function></funcdef>
- <paramdef>string <parameter>c</parameter></paramdef>
- </funcprototype>
- </funcsynopsis>
- <para>
- </para>
- </refsect1>
- </refentry>
-
- <refentry id="function.iscntrl">
- <refnamediv>
- <refname>iscntrl</refname>
- <refpurpose></refpurpose>
- </refnamediv>
- <refsect1>
- <title>Description</title>
- <funcsynopsis>
- <funcprototype>
- <funcdef>bool <function>iscntrl</function></funcdef>
- <paramdef>string <parameter>c</parameter></paramdef>
- </funcprototype>
- </funcsynopsis>
- <para>
- </para>
- </refsect1>
- </refentry>
-
- <refentry id="function.isdigit">
- <refnamediv>
- <refname>isdigit</refname>
- <refpurpose></refpurpose>
- </refnamediv>
- <refsect1>
- <title>Description</title>
- <funcsynopsis>
- <funcprototype>
- <funcdef>bool <function>isdigit</function></funcdef>
- <paramdef>string <parameter>c</parameter></paramdef>
- </funcprototype>
- </funcsynopsis>
- <para>
- </para>
- </refsect1>
- </refentry>
-
- <refentry id="function.islower">
- <refnamediv>
- <refname>islower</refname>
- <refpurpose></refpurpose>
- </refnamediv>
- <refsect1>
- <title>Description</title>
- <funcsynopsis>
- <funcprototype>
- <funcdef>bool <function>islower</function></funcdef>
- <paramdef>string <parameter>c</parameter></paramdef>
- </funcprototype>
- </funcsynopsis>
- <para>
- </para>
- </refsect1>
- </refentry>
-
- <refentry id="function.isgraph">
- <refnamediv>
- <refname>isgraph</refname>
- <refpurpose></refpurpose>
- </refnamediv>
- <refsect1>
- <title>Description</title>
- <funcsynopsis>
- <funcprototype>
- <funcdef>bool <function>isgraph</function></funcdef>
- <paramdef>string <parameter>c</parameter></paramdef>
- </funcprototype>
- </funcsynopsis>
- <para>
- </para>
- </refsect1>
- </refentry>
-
- <refentry id="function.isprint">
- <refnamediv>
- <refname>isprint</refname>
- <refpurpose></refpurpose>
- </refnamediv>
- <refsect1>
- <title>Description</title>
- <funcsynopsis>
- <funcprototype>
- <funcdef>bool <function>isprint</function></funcdef>
- <paramdef>string <parameter>c</parameter></paramdef>
- </funcprototype>
- </funcsynopsis>
- <para>
- </para>
- </refsect1>
- </refentry>
-
- <refentry id="function.ispunct">
- <refnamediv>
- <refname>ispunct</refname>
- <refpurpose></refpurpose>
- </refnamediv>
- <refsect1>
- <title>Description</title>
- <funcsynopsis>
- <funcprototype>
- <funcdef>bool <function>ispunct</function></funcdef>
- <paramdef>string <parameter>c</parameter></paramdef>
- </funcprototype>
- </funcsynopsis>
- <para>
- </para>
- </refsect1>
- </refentry>
-
- <refentry id="function.isspace">
- <refnamediv>
- <refname>isspace</refname>
- <refpurpose></refpurpose>
- </refnamediv>
- <refsect1>
- <title>Description</title>
- <funcsynopsis>
- <funcprototype>
- <funcdef>bool <function>isspace</function></funcdef>
- <paramdef>string <parameter>c</parameter></paramdef>
- </funcprototype>
- </funcsynopsis>
- <para>
- </para>
- </refsect1>
- </refentry>
-
- <refentry id="function.isupper">
- <refnamediv>
- <refname>isupper</refname>
- <refpurpose></refpurpose>
- </refnamediv>
- <refsect1>
- <title>Description</title>
- <funcsynopsis>
- <funcprototype>
- <funcdef>bool <function>isupper</function></funcdef>
- <paramdef>string <parameter>c</parameter></paramdef>
- </funcprototype>
- </funcsynopsis>
- <para>
- </para>
- </refsect1>
- </refentry>
-
- <refentry id="function.isxdigit">
- <refnamediv>
- <refname>isxdigit</refname>
- <refpurpose></refpurpose>
- </refnamediv>
- <refsect1>
- <title>Description</title>
- <funcsynopsis>
- <funcprototype>
- <funcdef>bool <function>isxdigit</function></funcdef>
- <paramdef>string <parameter>c</parameter></paramdef>
- </funcprototype>
- </funcsynopsis>
- <para>
- </para>
- </refsect1>
- </refentry>
-
- </reference>
-
-<!-- Keep this comment at the end of the file
-Local variables:
-mode: sgml
-sgml-omittag:t
-sgml-shorttag:t
-sgml-minimize-attributes:nil
-sgml-always-quote-attributes:t
-sgml-indent-step:1
-sgml-indent-data:t
-sgml-parent-document:nil
-sgml-default-dtd-file:"../../manual.ced"
-sgml-exposed-tags:nil
-sgml-local-catalogs:nil
-sgml-local-ecat-files:nil
-End:
--->
-
diff --git a/ext/ctype/package.xml b/ext/ctype/package.xml
deleted file mode 100644
index 6cdd630c20..0000000000
--- a/ext/ctype/package.xml
+++ /dev/null
@@ -1,46 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1" ?>
-<!DOCTYPE package SYSTEM "../pear/package.dtd">
-<package>
- <name>ctype</name>
- <summary>Character type detection</summary>
- <maintainers>
- <maintainer>
- <user>hholzgra</user>
- <name>Hartmut Holzgraefe</name>
- <email>hartmut@php.net</email>
- <role>lead</role>
- </maintainer>
- </maintainers>
- <description>
-The functions provided by this extension check whether a
-character or string falls into a certain character class
-according to the current locale.
- </description>
- <license>PHP</license>
- <release>
- <state>beta</state>
- <version>5.0.0rc1</version>
- <date>2004-03-19</date>
- <notes>
-package.xml added to support intallation using pear installer
- </notes>
- <filelist>
- <file role="doc" name="CREDITS"/>
- <file role="doc" name="README"/>
- <file role="src" name="config.m4"/>
- <file role="src" name="config.w32"/>
- <file role="src" name="ctype.dsp"/>
- <file role="src" name="ctype.c"/>
- <file role="src" name="php_ctype.h"/>
- <file role="test" name="tests/001.phpt"/>
- <file role="test" name="tests/002.phpt"/>
- <file role="test" name="tests/bug25745.phpt"/>
- </filelist>
- <deps>
- <dep type="php" rel="ge" version="5" />
- </deps>
- </release>
-</package>
-<!--
-vim:et:ts=1:sw=1
--->
diff --git a/ext/ctype/php_ctype.h b/ext/ctype/php_ctype.h
deleted file mode 100644
index 12b5e90082..0000000000
--- a/ext/ctype/php_ctype.h
+++ /dev/null
@@ -1,83 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Hartmut Holzgraefe <hholzgra@php.net> |
- +----------------------------------------------------------------------+
- */
-
-#ifndef PHP_CTYPE_H
-#define PHP_CTYPE_H
-
-/* You should tweak config.m4 so this symbol (or some else suitable)
- gets defined.
-*/
-#if HAVE_CTYPE
-
-extern zend_module_entry ctype_module_entry;
-#define phpext_ctype_ptr &ctype_module_entry
-
-#ifdef PHP_WIN32
-#define PHP_CTYPE_API __declspec(dllexport)
-#else
-#define PHP_CTYPE_API
-#endif
-
-PHP_MINIT_FUNCTION(ctype);
-PHP_MSHUTDOWN_FUNCTION(ctype);
-PHP_RINIT_FUNCTION(ctype);
-PHP_RSHUTDOWN_FUNCTION(ctype);
-PHP_MINFO_FUNCTION(ctype);
-
-PHP_FUNCTION(ctype_alnum);
-PHP_FUNCTION(ctype_alpha);
-PHP_FUNCTION(ctype_cntrl);
-PHP_FUNCTION(ctype_digit);
-PHP_FUNCTION(ctype_lower);
-PHP_FUNCTION(ctype_graph);
-PHP_FUNCTION(ctype_print);
-PHP_FUNCTION(ctype_punct);
-PHP_FUNCTION(ctype_space);
-PHP_FUNCTION(ctype_upper);
-PHP_FUNCTION(ctype_xdigit);
-
-/*
- Declare any global variables you may need between the BEGIN
- and END macros here:
-
-ZEND_BEGIN_MODULE_GLOBALS(ctype)
- int global_variable;
-ZEND_END_MODULE_GLOBALS(ctype)
-*/
-
-#ifdef ZTS
-#define CTYPEG(v) TSRMG(ctype_globals_id, php_ctype_globals *, v)
-#else
-#define CTYPEG(v) (ctype_globals.v)
-#endif
-
-#else
-
-#define phpext_ctype_ptr NULL
-
-#endif
-
-#endif /* PHP_CTYPE_H */
-
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- */
diff --git a/ext/ctype/tests/001.phpt b/ext/ctype/tests/001.phpt
deleted file mode 100644
index b7beea7861..0000000000
--- a/ext/ctype/tests/001.phpt
+++ /dev/null
@@ -1,39 +0,0 @@
---TEST--
-ctype on integers
---SKIPIF--
-<?php if (!extension_loaded("ctype")) print "skip"; ?>
---FILE--
-<?php
- setlocale(LC_ALL,"C");
-
- function ctype_test_001($function) {
- $n=0;
- for($a=0;$a<256;$a++) {
- if($function($a)) $n++;
- }
- echo "$function $n\n";
- }
-ctype_test_001("ctype_lower");
-ctype_test_001("ctype_upper");
-ctype_test_001("ctype_alpha");
-ctype_test_001("ctype_digit");
-ctype_test_001("ctype_alnum");
-ctype_test_001("ctype_cntrl");
-ctype_test_001("ctype_graph");
-ctype_test_001("ctype_print");
-ctype_test_001("ctype_punct");
-ctype_test_001("ctype_space");
-ctype_test_001("ctype_xdigit");
-?>
---EXPECT--
-ctype_lower 26
-ctype_upper 26
-ctype_alpha 52
-ctype_digit 10
-ctype_alnum 62
-ctype_cntrl 33
-ctype_graph 94
-ctype_print 95
-ctype_punct 32
-ctype_space 6
-ctype_xdigit 22
diff --git a/ext/ctype/tests/002.phpt b/ext/ctype/tests/002.phpt
deleted file mode 100644
index 598ff9be96..0000000000
--- a/ext/ctype/tests/002.phpt
+++ /dev/null
@@ -1,48 +0,0 @@
---TEST--
-ctype on strings
---SKIPIF--
-<?php if (!extension_loaded("ctype")) print "skip"; ?>
---FILE--
-<?php
-
-setlocale(LC_ALL,"C");
-print "LOCALE is '" . setlocale(LC_ALL,0) . "'\n";
-
-function ctype_test_002($function) {
- $n1 = $n2 = $n3 = 0;
- // test portable POSIX characters 0..127
- for ($a=0;$a<128;$a++) {
- $c = chr($a);
- if($function($a)) $n1++;
- if($function("$c$c$c")) $n2++;
- if($function("1-$c$c$c-x")) $n3++;
- }
- print "$function $n1 $n2 $n3\n";
-}
-
-ctype_test_002("ctype_lower");
-ctype_test_002("ctype_upper");
-ctype_test_002("ctype_alpha");
-ctype_test_002("ctype_digit");
-ctype_test_002("ctype_alnum");
-ctype_test_002("ctype_cntrl");
-ctype_test_002("ctype_graph");
-ctype_test_002("ctype_print");
-ctype_test_002("ctype_punct");
-ctype_test_002("ctype_space");
-ctype_test_002("ctype_xdigit");
-
-?>
---EXPECTF--
-LOCALE is '%s'
-ctype_lower 26 26 0
-ctype_upper 26 26 0
-ctype_alpha 52 52 0
-ctype_digit 10 10 0
-ctype_alnum 62 62 0
-ctype_cntrl 33 33 0
-ctype_graph 94 94 94
-ctype_print 95 95 95
-ctype_punct 32 32 0
-ctype_space 6 6 0
-ctype_xdigit 22 22 0
diff --git a/ext/ctype/tests/bug25745.phpt b/ext/ctype/tests/bug25745.phpt
deleted file mode 100644
index 1d0ae0da7e..0000000000
--- a/ext/ctype/tests/bug25745.phpt
+++ /dev/null
@@ -1,24 +0,0 @@
---TEST--
-Bug #25745 (ctype functions fail with non-ascii characters)
---FILE--
-<?php
-$funcs = array(
- "ctype_alnum", "ctype_alpha", "ctype_cntrl", "ctype_digit",
- "ctype_graph", "ctype_lower", "ctype_print", "ctype_punct",
- "ctype_space", "ctype_upper", "ctype_xdigit"
-);
-
-foreach ($funcs as $ctype_func) {
- for ($i = 0; $i < 256; $i++) {
- $a = $ctype_func($i);
- $b = $ctype_func(chr($i));
- if ($a != $b) {
- echo "broken... $ctype_func($i) = $a, $ctype_func(chr($i)) = $b\n";
- exit;
- }
- }
-}
-echo "ok\n";
-?>
---EXPECT--
-ok
diff --git a/ext/curl/CREDITS b/ext/curl/CREDITS
deleted file mode 100644
index 610e036787..0000000000
--- a/ext/curl/CREDITS
+++ /dev/null
@@ -1,2 +0,0 @@
-cURL
-Sterling Hughes
diff --git a/ext/curl/config.m4 b/ext/curl/config.m4
deleted file mode 100644
index 1e683072c5..0000000000
--- a/ext/curl/config.m4
+++ /dev/null
@@ -1,78 +0,0 @@
-dnl
-dnl $Id$
-dnl
-
-PHP_ARG_WITH(curl, for CURL support,
-[ --with-curl[=DIR] Include CURL support])
-
-dnl Temporary option while we develop this aspect of the extension
-PHP_ARG_WITH(curlwrappers, if we should use CURL for url streams,
-[ --with-curlwrappers Use CURL for url streams], no, no)
-
-if test "$PHP_CURL" != "no"; then
- if test -r $PHP_CURL/include/curl/easy.h; then
- CURL_DIR=$PHP_CURL
- else
- AC_MSG_CHECKING(for CURL in default path)
- for i in /usr/local /usr; do
- if test -r $i/include/curl/easy.h; then
- CURL_DIR=$i
- AC_MSG_RESULT(found in $i)
- break
- fi
- done
- fi
-
- if test -z "$CURL_DIR"; then
- AC_MSG_RESULT(not found)
- AC_MSG_ERROR(Please reinstall the libcurl distribution -
- easy.h should be in <curl-dir>/include/curl/)
- fi
-
- CURL_CONFIG="curl-config"
- AC_MSG_CHECKING(for cURL 7.10.5 or greater)
-
- if ${CURL_DIR}/bin/curl-config --libs print > /dev/null 2>&1; then
- CURL_CONFIG=${CURL_DIR}/bin/curl-config
- else
- if ${CURL_DIR}/curl-config --libs print > /dev/null 2>&1; then
- CURL_CONFIG=${CURL_DIR}/curl-config
- fi
- fi
-
- curl_version_full=`$CURL_CONFIG --version`
- curl_version=`echo ${curl_version_full} | sed -e 's/libcurl //' | awk 'BEGIN { FS = "."; } { printf "%d", ($1 * 1000 + $2) * 1000 + $3;}'`
- if test "$curl_version" -ge 7010005; then
- AC_MSG_RESULT($curl_version_full)
- CURL_LIBS=`$CURL_CONFIG --libs`
- else
- AC_MSG_ERROR(cURL version 7.10.5 or later is required to compile php with cURL support)
- fi
-
- PHP_ADD_INCLUDE($CURL_DIR/include)
- PHP_EVAL_LIBLINE($CURL_LIBS, CURL_SHARED_LIBADD)
- PHP_ADD_LIBRARY_WITH_PATH(curl, $CURL_DIR/lib, CURL_SHARED_LIBADD)
-
- PHP_CHECK_LIBRARY(curl,curl_easy_perform,
- [
- AC_DEFINE(HAVE_CURL,1,[ ])
- ],[
- AC_MSG_ERROR(There is something wrong. Please check config.log for more information.)
- ],[
- $CURL_LIBS -L$CURL_DIR/lib
- ])
-
- PHP_CHECK_LIBRARY(curl,curl_version_info,
- [
- AC_DEFINE(HAVE_CURL_VERSION_INFO,1,[ ])
- ],[],[
- $CURL_LIBS -L$CURL_DIR/lib
- ])
-
- if test "$PHP_CURLWRAPPERS" != "no" ; then
- AC_DEFINE(PHP_CURL_URL_WRAPPERS,1,[ ])
- fi
-
- PHP_NEW_EXTENSION(curl, interface.c multi.c streams.c, $ext_shared)
- PHP_SUBST(CURL_SHARED_LIBADD)
-fi
diff --git a/ext/curl/config.w32 b/ext/curl/config.w32
deleted file mode 100644
index c2e41ba9c7..0000000000
--- a/ext/curl/config.w32
+++ /dev/null
@@ -1,20 +0,0 @@
-// $Id$
-// vim:ft=javascript
-
-ARG_WITH("curl", "CURL support", "no");
-
-if (PHP_CURL != "no") {
- if (CHECK_LIB("libcurl.lib", "curl", PHP_CURL) &&
- CHECK_HEADER_ADD_INCLUDE("curl/easy.h", "CFLAGS_CURL") &&
- CHECK_LIB("ssleay32.lib", "curl", PHP_CURL) &&
- CHECK_LIB("libeay32.lib", "curl", PHP_CURL) &&
- CHECK_LIB("zlib.lib", "curl", PHP_CURL) &&
- CHECK_LIB("winmm.lib", "curl", PHP_CURL)) {
- EXTENSION("curl", "interface.c multi.c streams.c");
- AC_DEFINE('HAVE_CURL', 1, 'Have CURL library');
- // TODO: check for curl_version_info
- // AC_DEFINE('PHP_CURL_URL_WRAPPERS', 0, 'Use curl for URL wrappers [experimental]');
- } else {
- WARNING("curl not enabled; libraries and headers not found");
- }
-}
diff --git a/ext/curl/curl.dsp b/ext/curl/curl.dsp
deleted file mode 100644
index 81d823183d..0000000000
--- a/ext/curl/curl.dsp
+++ /dev/null
@@ -1,186 +0,0 @@
-# Microsoft Developer Studio Project File - Name="curl" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=curl - Win32 Release_TS
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "curl.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "curl.mak" CFG="curl - Win32 Release_TS"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "curl - Win32 Release_TS" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "curl - Win32 Debug_TS" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "curl - Win32 Debug_TS_SSL" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "curl - Win32 Release_TS_SSL" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "curl - Win32 Release_TS"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release_TS"
-# PROP BASE Intermediate_Dir "Release_TS"
-# PROP BASE Ignore_Export_Lib 0
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release_TS"
-# PROP Intermediate_Dir "Release_TS"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MT /W3 /GX /O2 /I "..\.." /I "..\..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\..\TSRM" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "COMPILE_DL_CURL" /D ZTS=1 /YX /FD /c
-# ADD CPP /nologo /MD /W3 /GX /O2 /I "..\.." /I "..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\TSRM" /I "..\..\main" /I "..\..\..\php_build\curl\include" /D "WIN32" /D "CURL_EXPORTS" /D "COMPILE_DL_CURL" /D ZTS=1 /D HAVE_CURL=1 /D ZEND_DEBUG=0 /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "ZEND_WIN32" /D "PHP_WIN32" /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x406 /d "NDEBUG"
-# ADD RSC /l 0x406 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib php5ts.lib /nologo /dll /machine:I386
-# ADD LINK32 php5ts.lib libcurl.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib wsock32.lib /nologo /dll /machine:I386 /nodefaultlib:"MSVCRT" /out:"..\..\Release_TS/php_curl.dll" /libpath:"..\..\Release_TS" /libpath:"..\..\Release_TS_Inline" /libpath:"..\..\..\php_build\curl\lib"
-# SUBTRACT LINK32 /pdb:none
-
-!ELSEIF "$(CFG)" == "curl - Win32 Debug_TS"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Debug_TS"
-# PROP BASE Intermediate_Dir "Debug_TS"
-# PROP BASE Ignore_Export_Lib 0
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Debug_TS"
-# PROP Intermediate_Dir "Debug_TS"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MT /W3 /GX /O2 /I "..\.." /I "..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\TSRM" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "COMPILE_DL_CURL" /D ZTS=1 /YX /FD /c
-# ADD CPP /nologo /MDd /W3 /GX /ZI /Od /I "..\.." /I "..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\TSRM" /I "..\..\main" /I "..\..\..\php_build\curl\include" /D ZEND_DEBUG=1 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "CURL_EXPORTS" /D "COMPILE_DL_CURL" /D ZTS=1 /D "ZEND_WIN32" /D "PHP_WIN32" /D HAVE_CURL=1 /FR /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x406 /d "NDEBUG"
-# ADD RSC /l 0x406 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib php5ts.lib /nologo /dll /machine:I386
-# ADD LINK32 php5ts_debug.lib libcurl.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib wsock32.lib wsock32.lib /nologo /dll /incremental:yes /debug /machine:I386 /nodefaultlib:"MSVCRTD" /out:"..\..\Debug_TS/php_curl.dll" /libpath:"..\..\Debug_TS" /libpath:"..\..\..\php_build\curl\lib"
-# SUBTRACT LINK32 /pdb:none
-
-!ELSEIF "$(CFG)" == "curl - Win32 Debug_TS_SSL"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "curl___Win32_Debug_TS_SSL"
-# PROP BASE Intermediate_Dir "curl___Win32_Debug_TS_SSL"
-# PROP BASE Ignore_Export_Lib 0
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Debug_TS_SSL"
-# PROP Intermediate_Dir "Debug_TS_SSL"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MDd /W3 /GX /ZI /Od /I "..\.." /I "..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\TSRM" /I "..\..\main" /D ZEND_DEBUG=1 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "CURL_EXPORTS" /D "COMPILE_DL_CURL" /D ZTS=1 /D "ZEND_WIN32" /D "PHP_WIN32" /D HAVE_CURL=1 /FR /YX /FD /c
-# ADD CPP /nologo /MDd /W3 /GX /ZI /Od /I "..\.." /I "..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\TSRM" /I "..\..\main" /I "..\..\..\php_build\curl\include" /D ZEND_DEBUG=1 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "CURL_EXPORTS" /D "COMPILE_DL_CURL" /D ZTS=1 /D "ZEND_WIN32" /D "PHP_WIN32" /D HAVE_CURL=1 /FR /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x406 /d "NDEBUG"
-# ADD RSC /l 0x406 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 php5ts_debug.lib libcurl.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /incremental:yes /debug /machine:I386 /nodefaultlib:"msvcrtd.lib" /out:"..\..\Debug_TS/php_curl.dll" /libpath:"..\..\Debug_TS"
-# SUBTRACT BASE LINK32 /pdb:none
-# ADD LINK32 php5ts_debug.lib libcurl.lib ssleay32.lib libeay32.lib msvcrt.lib ws2_32.lib winmm.lib zlib.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib wsock32.lib /nologo /dll /incremental:yes /debug /machine:I386 /nodefaultlib:"MSVCRTD" /out:"..\..\Debug_TS/php_curl.dll" /libpath:"..\..\Debug_TS" /libpath:"..\..\..\php_build\curl\lib"
-# SUBTRACT LINK32 /pdb:none /nodefaultlib
-
-!ELSEIF "$(CFG)" == "curl - Win32 Release_TS_SSL"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "curl___Win32_Release_TS_SSL"
-# PROP BASE Intermediate_Dir "curl___Win32_Release_TS_SSL"
-# PROP BASE Ignore_Export_Lib 0
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release_TS_SSL"
-# PROP Intermediate_Dir "Release_TS_SSL"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MD /W3 /GX /O2 /I "..\.." /I "..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\TSRM" /I "..\..\main" /D "WIN32" /D "CURL_EXPORTS" /D "COMPILE_DL_CURL" /D ZTS=1 /D HAVE_CURL=1 /D ZEND_DEBUG=0 /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "ZEND_WIN32" /D "PHP_WIN32" /YX /FD /c
-# ADD CPP /nologo /MD /W3 /GX /O2 /I "..\.." /I "..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\TSRM" /I "..\..\main" /I "..\..\..\php_build\curl\include" /D "WIN32" /D "CURL_EXPORTS" /D "COMPILE_DL_CURL" /D ZTS=1 /D HAVE_CURL=1 /D ZEND_DEBUG=0 /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "ZEND_WIN32" /D "PHP_WIN32" /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x406 /d "NDEBUG"
-# ADD RSC /l 0x406 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 php5ts.lib libcurl.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 /nodefaultlib:"msvcrt.lib" /out:"..\..\Release_TS/php_curl.dll" /libpath:"..\..\Release_TS" /libpath:"..\..\Release_TS_Inline"
-# SUBTRACT BASE LINK32 /pdb:none
-# ADD LINK32 php5ts.lib libcurl.lib ssleay32.lib libeay32.lib msvcrt.lib ws2_32.lib winmm.lib zlib.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib wsock32.lib /nologo /dll /machine:I386 /nodefaultlib:"MSVCRT" /out:"..\..\Release_TS/php_curl.dll" /libpath:"..\..\Release_TS" /libpath:"..\..\Release_TS_Inline" /libpath:"..\..\..\php_build\curl\lib"
-# SUBTRACT LINK32 /pdb:none
-
-!ENDIF
-
-# Begin Target
-
-# Name "curl - Win32 Release_TS"
-# Name "curl - Win32 Debug_TS"
-# Name "curl - Win32 Debug_TS_SSL"
-# Name "curl - Win32 Release_TS_SSL"
-# Begin Group "Source Files"
-
-# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
-# Begin Source File
-
-SOURCE=.\interface.c
-# End Source File
-
-# Begin Source File
-SOURCE=.\multi.c
-# End Source File
-
-# Begin Source File
-SOURCE=.\streams.c
-# End Source File
-
-# End Group
-# Begin Group "Header Files"
-
-# PROP Default_Filter "h;hpp;hxx;hm;inl"
-# Begin Source File
-
-SOURCE=.\php_curl.h
-# End Source File
-# End Group
-# Begin Group "Resource Files"
-
-# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
-# End Group
-# End Target
-# End Project
diff --git a/ext/curl/interface.c b/ext/curl/interface.c
deleted file mode 100644
index 46021ef4b9..0000000000
--- a/ext/curl/interface.c
+++ /dev/null
@@ -1,1479 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Sterling Hughes <sterling@php.net> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#define ZEND_INCLUDE_FULL_WINDOWS_HEADERS
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "php.h"
-
-#if HAVE_CURL
-
-#include <stdio.h>
-#include <string.h>
-
-#ifdef PHP_WIN32
-#include <winsock2.h>
-#include <sys/types.h>
-#endif
-
-#include <curl/curl.h>
-#include <curl/easy.h>
-
-/* As of curl 7.11.1 this is no longer defined inside curl.h */
-#ifndef HttpPost
-#define HttpPost curl_httppost
-#endif
-
-#define SMART_STR_PREALLOC 4096
-
-#include "ext/standard/php_smart_str.h"
-#include "ext/standard/info.h"
-#include "ext/standard/file.h"
-#include "php_curl.h"
-
-static void _php_curl_close(zend_rsrc_list_entry *rsrc TSRMLS_DC);
-
-#define SAVE_CURL_ERROR(__handle, __err) (__handle)->err.no = (int) __err;
-
-#define CAAL(s, v) add_assoc_long_ex(return_value, s, sizeof(s), (long) v);
-#define CAAD(s, v) add_assoc_double_ex(return_value, s, sizeof(s), (double) v);
-#define CAAS(s, v) add_assoc_string_ex(return_value, s, sizeof(s), (char *) v, 1);
-#define CAAZ(s, v) add_assoc_zval_ex(return_value, s, sizeof(s), (zval *) v);
-
-/* {{{ curl_functions[]
- */
-function_entry curl_functions[] = {
- PHP_FE(curl_init, NULL)
- PHP_FE(curl_copy_handle, NULL)
- PHP_FE(curl_version, NULL)
- PHP_FE(curl_setopt, NULL)
- PHP_FE(curl_exec, NULL)
- PHP_FE(curl_getinfo, NULL)
- PHP_FE(curl_error, NULL)
- PHP_FE(curl_errno, NULL)
- PHP_FE(curl_close, NULL)
- PHP_FE(curl_multi_init, NULL)
- PHP_FE(curl_multi_add_handle, NULL)
- PHP_FE(curl_multi_remove_handle, NULL)
- PHP_FE(curl_multi_select, NULL)
- PHP_FE(curl_multi_exec, second_arg_force_ref)
- PHP_FE(curl_multi_getcontent, NULL)
- PHP_FE(curl_multi_info_read, NULL)
- PHP_FE(curl_multi_close, NULL)
- {NULL, NULL, NULL}
-};
-/* }}} */
-
-/* {{{ curl_module_entry
- */
-zend_module_entry curl_module_entry = {
- STANDARD_MODULE_HEADER,
- "curl",
- curl_functions,
- PHP_MINIT(curl),
- PHP_MSHUTDOWN(curl),
- NULL,
- NULL,
- PHP_MINFO(curl),
- NO_VERSION_YET,
- STANDARD_MODULE_PROPERTIES
-};
-/* }}} */
-
-#ifdef COMPILE_DL_CURL
-ZEND_GET_MODULE (curl)
-# ifdef PHP_WIN32
-# include "zend_arg_defs.c"
-# endif
-#endif
-
-/* {{{ PHP_MINFO_FUNCTION
- */
-PHP_MINFO_FUNCTION(curl)
-{
- php_info_print_table_start();
- php_info_print_table_row(2, "CURL support", "enabled");
- php_info_print_table_row(2, "CURL Information", curl_version());
- php_info_print_table_end();
-}
-/* }}} */
-
-#define REGISTER_CURL_CONSTANT(__c) REGISTER_LONG_CONSTANT(#__c, __c, CONST_CS | CONST_PERSISTENT)
-
-/* {{{ PHP_MINIT_FUNCTION
- */
-PHP_MINIT_FUNCTION(curl)
-{
- le_curl = zend_register_list_destructors_ex(_php_curl_close, NULL, "curl", module_number);
- le_curl_multi_handle = zend_register_list_destructors_ex(_php_curl_multi_close, NULL, "curl", module_number);
-
- /* Constants for curl_setopt() */
- REGISTER_CURL_CONSTANT(CURLOPT_DNS_USE_GLOBAL_CACHE);
- REGISTER_CURL_CONSTANT(CURLOPT_DNS_CACHE_TIMEOUT);
- REGISTER_CURL_CONSTANT(CURLOPT_PORT);
- REGISTER_CURL_CONSTANT(CURLOPT_FILE);
- REGISTER_CURL_CONSTANT(CURLOPT_READDATA);
- REGISTER_CURL_CONSTANT(CURLOPT_INFILE);
- REGISTER_CURL_CONSTANT(CURLOPT_INFILESIZE);
- REGISTER_CURL_CONSTANT(CURLOPT_URL);
- REGISTER_CURL_CONSTANT(CURLOPT_PROXY);
- REGISTER_CURL_CONSTANT(CURLOPT_VERBOSE);
- REGISTER_CURL_CONSTANT(CURLOPT_HEADER);
- REGISTER_CURL_CONSTANT(CURLOPT_HTTPHEADER);
- REGISTER_CURL_CONSTANT(CURLOPT_NOPROGRESS);
- REGISTER_CURL_CONSTANT(CURLOPT_NOBODY);
- REGISTER_CURL_CONSTANT(CURLOPT_FAILONERROR);
- REGISTER_CURL_CONSTANT(CURLOPT_UPLOAD);
- REGISTER_CURL_CONSTANT(CURLOPT_POST);
- REGISTER_CURL_CONSTANT(CURLOPT_FTPLISTONLY);
- REGISTER_CURL_CONSTANT(CURLOPT_FTPAPPEND);
- REGISTER_CURL_CONSTANT(CURLOPT_NETRC);
- REGISTER_CURL_CONSTANT(CURLOPT_FOLLOWLOCATION);
- REGISTER_CURL_CONSTANT(CURLOPT_FTPASCII);
- REGISTER_CURL_CONSTANT(CURLOPT_PUT);
-#if CURLOPT_MUTE != 0
- REGISTER_CURL_CONSTANT(CURLOPT_MUTE);
-#endif
- REGISTER_CURL_CONSTANT(CURLOPT_USERPWD);
- REGISTER_CURL_CONSTANT(CURLOPT_PROXYUSERPWD);
- REGISTER_CURL_CONSTANT(CURLOPT_RANGE);
- REGISTER_CURL_CONSTANT(CURLOPT_TIMEOUT);
- REGISTER_CURL_CONSTANT(CURLOPT_POSTFIELDS);
- REGISTER_CURL_CONSTANT(CURLOPT_REFERER);
- REGISTER_CURL_CONSTANT(CURLOPT_USERAGENT);
- REGISTER_CURL_CONSTANT(CURLOPT_FTPPORT);
- REGISTER_CURL_CONSTANT(CURLOPT_FTP_USE_EPSV);
- REGISTER_CURL_CONSTANT(CURLOPT_LOW_SPEED_LIMIT);
- REGISTER_CURL_CONSTANT(CURLOPT_LOW_SPEED_TIME);
- REGISTER_CURL_CONSTANT(CURLOPT_RESUME_FROM);
- REGISTER_CURL_CONSTANT(CURLOPT_COOKIE);
- REGISTER_CURL_CONSTANT(CURLOPT_SSLCERT);
- REGISTER_CURL_CONSTANT(CURLOPT_SSLCERTPASSWD);
- REGISTER_CURL_CONSTANT(CURLOPT_WRITEHEADER);
- REGISTER_CURL_CONSTANT(CURLOPT_SSL_VERIFYHOST);
- REGISTER_CURL_CONSTANT(CURLOPT_COOKIEFILE);
- REGISTER_CURL_CONSTANT(CURLOPT_SSLVERSION);
- REGISTER_CURL_CONSTANT(CURLOPT_TIMECONDITION);
- REGISTER_CURL_CONSTANT(CURLOPT_TIMEVALUE);
- REGISTER_CURL_CONSTANT(CURLOPT_CUSTOMREQUEST);
- REGISTER_CURL_CONSTANT(CURLOPT_STDERR);
- REGISTER_CURL_CONSTANT(CURLOPT_TRANSFERTEXT);
- REGISTER_CURL_CONSTANT(CURLOPT_RETURNTRANSFER);
- REGISTER_CURL_CONSTANT(CURLOPT_QUOTE);
- REGISTER_CURL_CONSTANT(CURLOPT_POSTQUOTE);
- REGISTER_CURL_CONSTANT(CURLOPT_INTERFACE);
- REGISTER_CURL_CONSTANT(CURLOPT_KRB4LEVEL);
- REGISTER_CURL_CONSTANT(CURLOPT_HTTPPROXYTUNNEL);
- REGISTER_CURL_CONSTANT(CURLOPT_FILETIME);
- REGISTER_CURL_CONSTANT(CURLOPT_WRITEFUNCTION);
- REGISTER_CURL_CONSTANT(CURLOPT_READFUNCTION);
- REGISTER_CURL_CONSTANT(CURLOPT_PASSWDFUNCTION);
- REGISTER_CURL_CONSTANT(CURLOPT_HEADERFUNCTION);
- REGISTER_CURL_CONSTANT(CURLOPT_MAXREDIRS);
- REGISTER_CURL_CONSTANT(CURLOPT_MAXCONNECTS);
- REGISTER_CURL_CONSTANT(CURLOPT_CLOSEPOLICY);
- REGISTER_CURL_CONSTANT(CURLOPT_FRESH_CONNECT);
- REGISTER_CURL_CONSTANT(CURLOPT_FORBID_REUSE);
- REGISTER_CURL_CONSTANT(CURLOPT_RANDOM_FILE);
- REGISTER_CURL_CONSTANT(CURLOPT_EGDSOCKET);
- REGISTER_CURL_CONSTANT(CURLOPT_CONNECTTIMEOUT);
- REGISTER_CURL_CONSTANT(CURLOPT_SSL_VERIFYPEER);
- REGISTER_CURL_CONSTANT(CURLOPT_CAINFO);
- REGISTER_CURL_CONSTANT(CURLOPT_CAPATH);
- REGISTER_CURL_CONSTANT(CURLOPT_COOKIEJAR);
- REGISTER_CURL_CONSTANT(CURLOPT_SSL_CIPHER_LIST);
- REGISTER_CURL_CONSTANT(CURLOPT_BINARYTRANSFER);
- REGISTER_CURL_CONSTANT(CURLOPT_NOSIGNAL);
- REGISTER_CURL_CONSTANT(CURLOPT_PROXYTYPE);
- REGISTER_CURL_CONSTANT(CURLOPT_BUFFERSIZE);
- REGISTER_CURL_CONSTANT(CURLOPT_HTTPGET);
- REGISTER_CURL_CONSTANT(CURLOPT_HTTP_VERSION);
- REGISTER_CURL_CONSTANT(CURLOPT_SSLKEY);
- REGISTER_CURL_CONSTANT(CURLOPT_SSLKEYTYPE);
- REGISTER_CURL_CONSTANT(CURLOPT_SSLKEYPASSWD);
- REGISTER_CURL_CONSTANT(CURLOPT_SSLENGINE);
- REGISTER_CURL_CONSTANT(CURLOPT_SSLENGINE_DEFAULT);
- REGISTER_CURL_CONSTANT(CURLOPT_SSLCERTTYPE);
- REGISTER_CURL_CONSTANT(CURLOPT_CRLF);
- REGISTER_CURL_CONSTANT(CURLOPT_ENCODING);
- REGISTER_CURL_CONSTANT(CURLOPT_PROXYPORT);
- REGISTER_CURL_CONSTANT(CURLOPT_UNRESTRICTED_AUTH);
- REGISTER_CURL_CONSTANT(CURLOPT_FTP_USE_EPRT);
- REGISTER_CURL_CONSTANT(CURLOPT_HTTP200ALIASES);
- REGISTER_CURL_CONSTANT(CURL_TIMECOND_IFMODSINCE);
- REGISTER_CURL_CONSTANT(CURL_TIMECOND_IFUNMODSINCE);
- REGISTER_CURL_CONSTANT(CURL_TIMECOND_LASTMOD);
-
-#if LIBCURL_VERSION_NUM > 0x070a05 /* CURLOPT_HTTPAUTH is available since curl 7.10.6 */
- REGISTER_CURL_CONSTANT(CURLOPT_HTTPAUTH);
- /* http authentication options */
- REGISTER_CURL_CONSTANT(CURLAUTH_BASIC);
- REGISTER_CURL_CONSTANT(CURLAUTH_DIGEST);
- REGISTER_CURL_CONSTANT(CURLAUTH_GSSNEGOTIATE);
- REGISTER_CURL_CONSTANT(CURLAUTH_NTLM);
- REGISTER_CURL_CONSTANT(CURLAUTH_ANY);
- REGISTER_CURL_CONSTANT(CURLAUTH_ANYSAFE);
-#endif
-
-#if LIBCURL_VERSION_NUM > 0x070a06 /* CURLOPT_PROXYAUTH is available since curl 7.10.7 */
- REGISTER_CURL_CONSTANT(CURLOPT_PROXYAUTH);
-#endif
-
- /* Constants effecting the way CURLOPT_CLOSEPOLICY works */
- REGISTER_CURL_CONSTANT(CURLCLOSEPOLICY_LEAST_RECENTLY_USED);
- REGISTER_CURL_CONSTANT(CURLCLOSEPOLICY_LEAST_TRAFFIC);
- REGISTER_CURL_CONSTANT(CURLCLOSEPOLICY_SLOWEST);
- REGISTER_CURL_CONSTANT(CURLCLOSEPOLICY_CALLBACK);
- REGISTER_CURL_CONSTANT(CURLCLOSEPOLICY_OLDEST);
-
- /* Info constants */
- REGISTER_CURL_CONSTANT(CURLINFO_EFFECTIVE_URL);
- REGISTER_CURL_CONSTANT(CURLINFO_HTTP_CODE);
- REGISTER_CURL_CONSTANT(CURLINFO_HEADER_SIZE);
- REGISTER_CURL_CONSTANT(CURLINFO_REQUEST_SIZE);
- REGISTER_CURL_CONSTANT(CURLINFO_TOTAL_TIME);
- REGISTER_CURL_CONSTANT(CURLINFO_NAMELOOKUP_TIME);
- REGISTER_CURL_CONSTANT(CURLINFO_CONNECT_TIME);
- REGISTER_CURL_CONSTANT(CURLINFO_PRETRANSFER_TIME);
- REGISTER_CURL_CONSTANT(CURLINFO_SIZE_UPLOAD);
- REGISTER_CURL_CONSTANT(CURLINFO_SIZE_DOWNLOAD);
- REGISTER_CURL_CONSTANT(CURLINFO_SPEED_DOWNLOAD);
- REGISTER_CURL_CONSTANT(CURLINFO_SPEED_UPLOAD);
- REGISTER_CURL_CONSTANT(CURLINFO_FILETIME);
- REGISTER_CURL_CONSTANT(CURLINFO_SSL_VERIFYRESULT);
- REGISTER_CURL_CONSTANT(CURLINFO_CONTENT_LENGTH_DOWNLOAD);
- REGISTER_CURL_CONSTANT(CURLINFO_CONTENT_LENGTH_UPLOAD);
- REGISTER_CURL_CONSTANT(CURLINFO_STARTTRANSFER_TIME);
- REGISTER_CURL_CONSTANT(CURLINFO_CONTENT_TYPE);
- REGISTER_CURL_CONSTANT(CURLINFO_REDIRECT_TIME);
- REGISTER_CURL_CONSTANT(CURLINFO_REDIRECT_COUNT);
-
- /* cURL protocol constants (curl_version) */
- REGISTER_CURL_CONSTANT(CURL_VERSION_IPV6);
- REGISTER_CURL_CONSTANT(CURL_VERSION_KERBEROS4);
- REGISTER_CURL_CONSTANT(CURL_VERSION_SSL);
- REGISTER_CURL_CONSTANT(CURL_VERSION_LIBZ);
-
- /* version constants */
- REGISTER_CURL_CONSTANT(CURLVERSION_NOW);
-
- /* Error Constants */
- REGISTER_CURL_CONSTANT(CURLE_OK);
- REGISTER_CURL_CONSTANT(CURLE_UNSUPPORTED_PROTOCOL);
- REGISTER_CURL_CONSTANT(CURLE_FAILED_INIT);
- REGISTER_CURL_CONSTANT(CURLE_URL_MALFORMAT);
- REGISTER_CURL_CONSTANT(CURLE_URL_MALFORMAT_USER);
- REGISTER_CURL_CONSTANT(CURLE_COULDNT_RESOLVE_PROXY);
- REGISTER_CURL_CONSTANT(CURLE_COULDNT_RESOLVE_HOST);
- REGISTER_CURL_CONSTANT(CURLE_COULDNT_CONNECT);
- REGISTER_CURL_CONSTANT(CURLE_FTP_WEIRD_SERVER_REPLY);
- REGISTER_CURL_CONSTANT(CURLE_FTP_ACCESS_DENIED);
- REGISTER_CURL_CONSTANT(CURLE_FTP_USER_PASSWORD_INCORRECT);
- REGISTER_CURL_CONSTANT(CURLE_FTP_WEIRD_PASS_REPLY);
- REGISTER_CURL_CONSTANT(CURLE_FTP_WEIRD_USER_REPLY);
- REGISTER_CURL_CONSTANT(CURLE_FTP_WEIRD_PASV_REPLY);
- REGISTER_CURL_CONSTANT(CURLE_FTP_WEIRD_227_FORMAT);
- REGISTER_CURL_CONSTANT(CURLE_FTP_CANT_GET_HOST);
- REGISTER_CURL_CONSTANT(CURLE_FTP_CANT_RECONNECT);
- REGISTER_CURL_CONSTANT(CURLE_FTP_COULDNT_SET_BINARY);
- REGISTER_CURL_CONSTANT(CURLE_PARTIAL_FILE);
- REGISTER_CURL_CONSTANT(CURLE_FTP_COULDNT_RETR_FILE);
- REGISTER_CURL_CONSTANT(CURLE_FTP_WRITE_ERROR);
- REGISTER_CURL_CONSTANT(CURLE_FTP_QUOTE_ERROR);
- REGISTER_CURL_CONSTANT(CURLE_HTTP_NOT_FOUND);
- REGISTER_CURL_CONSTANT(CURLE_WRITE_ERROR);
- REGISTER_CURL_CONSTANT(CURLE_MALFORMAT_USER);
- REGISTER_CURL_CONSTANT(CURLE_FTP_COULDNT_STOR_FILE);
- REGISTER_CURL_CONSTANT(CURLE_READ_ERROR);
- REGISTER_CURL_CONSTANT(CURLE_OUT_OF_MEMORY);
- REGISTER_CURL_CONSTANT(CURLE_OPERATION_TIMEOUTED);
- REGISTER_CURL_CONSTANT(CURLE_FTP_COULDNT_SET_ASCII);
- REGISTER_CURL_CONSTANT(CURLE_FTP_PORT_FAILED);
- REGISTER_CURL_CONSTANT(CURLE_FTP_COULDNT_USE_REST);
- REGISTER_CURL_CONSTANT(CURLE_FTP_COULDNT_GET_SIZE);
- REGISTER_CURL_CONSTANT(CURLE_HTTP_RANGE_ERROR);
- REGISTER_CURL_CONSTANT(CURLE_HTTP_POST_ERROR);
- REGISTER_CURL_CONSTANT(CURLE_SSL_CONNECT_ERROR);
- REGISTER_CURL_CONSTANT(CURLE_FTP_BAD_DOWNLOAD_RESUME);
- REGISTER_CURL_CONSTANT(CURLE_FILE_COULDNT_READ_FILE);
- REGISTER_CURL_CONSTANT(CURLE_LDAP_CANNOT_BIND);
- REGISTER_CURL_CONSTANT(CURLE_LDAP_SEARCH_FAILED);
- REGISTER_CURL_CONSTANT(CURLE_LIBRARY_NOT_FOUND);
- REGISTER_CURL_CONSTANT(CURLE_FUNCTION_NOT_FOUND);
- REGISTER_CURL_CONSTANT(CURLE_ABORTED_BY_CALLBACK);
- REGISTER_CURL_CONSTANT(CURLE_BAD_FUNCTION_ARGUMENT);
- REGISTER_CURL_CONSTANT(CURLE_BAD_CALLING_ORDER);
- REGISTER_CURL_CONSTANT(CURLE_HTTP_PORT_FAILED);
- REGISTER_CURL_CONSTANT(CURLE_BAD_PASSWORD_ENTERED);
- REGISTER_CURL_CONSTANT(CURLE_TOO_MANY_REDIRECTS);
- REGISTER_CURL_CONSTANT(CURLE_UNKNOWN_TELNET_OPTION);
- REGISTER_CURL_CONSTANT(CURLE_TELNET_OPTION_SYNTAX);
- REGISTER_CURL_CONSTANT(CURLE_OBSOLETE);
- REGISTER_CURL_CONSTANT(CURLE_SSL_PEER_CERTIFICATE);
- REGISTER_CURL_CONSTANT(CURLE_GOT_NOTHING);
- REGISTER_CURL_CONSTANT(CURLE_SSL_ENGINE_NOTFOUND);
- REGISTER_CURL_CONSTANT(CURLE_SSL_ENGINE_SETFAILED);
- REGISTER_CURL_CONSTANT(CURLE_SEND_ERROR);
- REGISTER_CURL_CONSTANT(CURLE_RECV_ERROR);
- REGISTER_CURL_CONSTANT(CURLE_SHARE_IN_USE);
- REGISTER_CURL_CONSTANT(CURLE_SSL_CERTPROBLEM);
- REGISTER_CURL_CONSTANT(CURLE_SSL_CIPHER);
- REGISTER_CURL_CONSTANT(CURLE_SSL_CACERT);
- REGISTER_CURL_CONSTANT(CURLE_BAD_CONTENT_ENCODING);
-#ifdef CURLE_LDAP_INVALID_URL
- REGISTER_CURL_CONSTANT(CURLE_LDAP_INVALID_URL);
-#endif
-#ifdef CURLE_FILESIZE_EXCEEDED
- REGISTER_CURL_CONSTANT(CURLE_FILESIZE_EXCEEDED);
-#endif
-#ifdef CURLE_FTP_SSL_FAILED
- REGISTER_CURL_CONSTANT(CURLE_FTP_SSL_FAILED);
-#endif
-
- REGISTER_CURL_CONSTANT(CURLPROXY_HTTP);
- REGISTER_CURL_CONSTANT(CURLPROXY_SOCKS5);
-
- REGISTER_CURL_CONSTANT(CURL_NETRC_OPTIONAL);
- REGISTER_CURL_CONSTANT(CURL_NETRC_IGNORED);
- REGISTER_CURL_CONSTANT(CURL_NETRC_REQUIRED);
-
- REGISTER_CURL_CONSTANT(CURL_HTTP_VERSION_NONE);
- REGISTER_CURL_CONSTANT(CURL_HTTP_VERSION_1_0);
- REGISTER_CURL_CONSTANT(CURL_HTTP_VERSION_1_1);
-
- REGISTER_CURL_CONSTANT(CURLM_CALL_MULTI_PERFORM);
- REGISTER_CURL_CONSTANT(CURLM_OK);
- REGISTER_CURL_CONSTANT(CURLM_BAD_HANDLE);
- REGISTER_CURL_CONSTANT(CURLM_BAD_EASY_HANDLE);
- REGISTER_CURL_CONSTANT(CURLM_OUT_OF_MEMORY);
- REGISTER_CURL_CONSTANT(CURLM_INTERNAL_ERROR);
-
- REGISTER_CURL_CONSTANT(CURLMSG_DONE);
-
- if (curl_global_init(CURL_GLOBAL_SSL) != CURLE_OK) {
- return FAILURE;
- }
-
-#ifdef PHP_CURL_URL_WRAPPERS
-# if HAVE_CURL_VERSION_INFO
- {
- curl_version_info_data *info = curl_version_info(CURLVERSION_NOW);
- char **p = (char **)info->protocols;
-
- while (*p != NULL) {
- php_register_url_stream_wrapper(*p++, &php_curl_wrapper TSRMLS_CC);
- }
- }
-# else
- php_register_url_stream_wrapper("http", &php_curl_wrapper TSRMLS_CC);
- php_register_url_stream_wrapper("https", &php_curl_wrapper TSRMLS_CC);
- php_register_url_stream_wrapper("ftp", &php_curl_wrapper TSRMLS_CC);
- php_register_url_stream_wrapper("ldap", &php_curl_wrapper TSRMLS_CC);
-# endif
-#endif
-
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ PHP_MSHUTDOWN_FUNCTION
- */
-PHP_MSHUTDOWN_FUNCTION(curl)
-{
-#ifdef PHP_CURL_URL_WRAPPERS
- php_unregister_url_stream_wrapper("http" TSRMLS_CC);
- php_unregister_url_stream_wrapper("https" TSRMLS_CC);
- php_unregister_url_stream_wrapper("ftp" TSRMLS_CC);
- php_unregister_url_stream_wrapper("ldap" TSRMLS_CC);
-#endif
- curl_global_cleanup();
-
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ curl_write
- */
-static size_t curl_write(char *data, size_t size, size_t nmemb, void *ctx)
-{
- php_curl *ch = (php_curl *) ctx;
- php_curl_write *t = ch->handlers->write;
- size_t length = size * nmemb;
- TSRMLS_FETCH_FROM_CTX(ch->thread_ctx);
-
-#if PHP_CURL_DEBUG
- fprintf(stderr, "curl_write() called\n");
- fprintf(stderr, "data = %s, size = %d, nmemb = %d, ctx = %x\n", data, size, nmemb, ctx);
-#endif
-
- switch (t->method) {
- case PHP_CURL_STDOUT:
- PHPWRITE(data, length);
- break;
- case PHP_CURL_FILE:
- return fwrite(data, size, nmemb, t->fp);
- case PHP_CURL_RETURN:
- smart_str_appendl(&t->buf, data, (int) length);
- break;
- case PHP_CURL_USER: {
- zval **argv[2];
- zval *retval_ptr = NULL;
- zval *handle = NULL;
- zval *zdata = NULL;
- int error;
- zend_fcall_info fci;
-
- MAKE_STD_ZVAL(handle);
- ZVAL_RESOURCE(handle, ch->id);
- zend_list_addref(ch->id);
- argv[0] = &handle;
-
- MAKE_STD_ZVAL(zdata);
- ZVAL_STRINGL(zdata, data, length, 1);
- argv[1] = &zdata;
-
- fci.size = sizeof(fci);
- fci.function_table = EG(function_table);
- fci.object_pp = NULL;
- fci.function_name = t->func_name;
- fci.retval_ptr_ptr = &retval_ptr;
- fci.param_count = 2;
- fci.params = argv;
- fci.no_separation = 0;
- fci.symbol_table = NULL;
-
- error = zend_call_function(&fci, &t->fci_cache TSRMLS_CC);
- if (error == FAILURE) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Could not call the CURLOPT_WRITEFUNCTION");
- length = -1;
- } else {
- if (Z_TYPE_P(retval_ptr) != IS_LONG) {
- convert_to_long_ex(&retval_ptr);
- }
- length = Z_LVAL_P(retval_ptr);
- }
-
- zval_ptr_dtor(argv[0]);
- zval_ptr_dtor(argv[1]);
- zval_ptr_dtor(&retval_ptr);
- break;
- }
- }
-
- return length;
-}
-/* }}} */
-
-/* {{{ curl_read
- */
-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;
-
- switch (t->method) {
- case PHP_CURL_DIRECT:
- if (t->fp) {
- length = fread(data, size, nmemb, t->fp);
- }
- break;
- case PHP_CURL_USER: {
- zval **argv[3];
- zval *handle = NULL;
- zval *zfd = NULL;
- zval *zlength = NULL;
- zval *retval_ptr;
- int error;
- zend_fcall_info fci;
- TSRMLS_FETCH_FROM_CTX(ch->thread_ctx);
-
- MAKE_STD_ZVAL(handle);
- MAKE_STD_ZVAL(zfd);
- MAKE_STD_ZVAL(zlength);
-
- ZVAL_RESOURCE(handle, ch->id);
- zend_list_addref(ch->id);
- ZVAL_RESOURCE(zfd, t->fd);
- zend_list_addref(t->fd);
- ZVAL_LONG(zlength, (int) size * nmemb);
-
- argv[0] = &handle;
- argv[1] = &zfd;
- argv[2] = &zlength;
-
- fci.size = sizeof(fci);
- fci.function_table = EG(function_table);
- fci.function_name = t->func_name;
- fci.object_pp = NULL;
- fci.retval_ptr_ptr = &retval_ptr;
- fci.param_count = 3;
- fci.params = argv;
- fci.no_separation = 0;
- fci.symbol_table = NULL;
-
- error = zend_call_function(&fci, &t->fci_cache TSRMLS_CC);
- if (error == FAILURE) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Cannot call the CURLOPT_READFUNCTION");
- } else {
- if (Z_TYPE_P(retval_ptr) == IS_STRING) {
- length = MIN(size * nmemb, Z_STRLEN_P(retval_ptr));
- memcpy(data, Z_STRVAL_P(retval_ptr), length);
- }
- }
-
- zval_ptr_dtor(argv[0]);
- zval_ptr_dtor(argv[1]);
- zval_ptr_dtor(argv[2]);
- zval_ptr_dtor(&retval_ptr);
- break;
- }
- }
-
- return length;
-}
-/* }}} */
-
-/* {{{ curl_write_header
- */
-static size_t curl_write_header(char *data, size_t size, size_t nmemb, void *ctx)
-{
- php_curl *ch = (php_curl *) ctx;
- php_curl_write *t = ch->handlers->write_header;
- size_t length = size * nmemb;
- TSRMLS_FETCH_FROM_CTX(ch->thread_ctx);
-
- switch (t->method) {
- case PHP_CURL_STDOUT:
- /* Handle special case write when we're returning the entire transfer
- */
- if (ch->handlers->write->method == PHP_CURL_RETURN) {
- smart_str_appendl(&ch->handlers->write->buf, data, (int) length);
- } else {
- PHPWRITE(data, length);
- }
- break;
- case PHP_CURL_FILE:
- return fwrite(data, size, nmemb, t->fp);
- case PHP_CURL_USER: {
- zval **argv[2];
- zval *handle = NULL;
- zval *zdata = NULL;
- zval *retval_ptr;
- int error;
- zend_fcall_info fci;
-
- MAKE_STD_ZVAL(handle);
- MAKE_STD_ZVAL(zdata);
-
- ZVAL_RESOURCE(handle, ch->id);
- zend_list_addref(ch->id);
- ZVAL_STRINGL(zdata, data, length, 1);
-
- argv[0] = &handle;
- argv[1] = &zdata;
-
- fci.size = sizeof(fci);
- fci.function_table = EG(function_table);
- fci.function_name = t->func_name;
- fci.symbol_table = NULL;
- fci.object_pp = NULL;
- fci.retval_ptr_ptr = &retval_ptr;
- fci.param_count = 2;
- fci.params = argv;
- fci.no_separation = 0;
-
- error = zend_call_function(&fci, &t->fci_cache TSRMLS_CC);
- if (error == FAILURE) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Could not call the CURLOPT_HEADERFUNCTION");
- length = -1;
- } else {
- if (Z_TYPE_P(retval_ptr) != IS_LONG) {
- convert_to_long_ex(&retval_ptr);
- }
- length = Z_LVAL_P(retval_ptr);
- }
- zval_ptr_dtor(argv[0]);
- zval_ptr_dtor(argv[1]);
- zval_ptr_dtor(&retval_ptr);
- break;
- }
-
- case PHP_CURL_IGNORE:
- return length;
-
- default:
- return -1;
- }
-
- return length;
-}
-/* }}} */
-
-#if CURLOPT_PASSWDFUNCTION != 0
-/* {{{ curl_passwd
- */
-static size_t curl_passwd(void *ctx, char *prompt, char *buf, int buflen)
-{
- php_curl *ch = (php_curl *) ctx;
- zval *func = ch->handlers->passwd;
- zval *argv[3];
- zval *retval = NULL;
- int error;
- int ret = -1;
- TSRMLS_FETCH_FROM_CTX(ch->thread_ctx);
-
- MAKE_STD_ZVAL(argv[0]);
- MAKE_STD_ZVAL(argv[1]);
- MAKE_STD_ZVAL(argv[2]);
-
- ZVAL_RESOURCE(argv[0], ch->id);
- zend_list_addref(ch->id);
- ZVAL_STRING(argv[1], prompt, 1);
- ZVAL_LONG(argv[2], buflen);
-
- error = call_user_function(EG(function_table), NULL, func, retval, 2, argv TSRMLS_CC);
- if (error == FAILURE) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Could not call the CURLOPT_PASSWDFUNCTION");
- } else if (Z_TYPE_P(retval) == IS_STRING) {
- if (Z_STRLEN_P(retval) > buflen) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Returned password is too long for libcurl to handle");
- } else {
- strlcpy(buf, Z_STRVAL_P(retval), Z_STRLEN_P(retval));
- }
- } else {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "User handler '%s' did not return a string.", Z_STRVAL_P(func));
- }
-
- zval_ptr_dtor(&argv[0]);
- zval_ptr_dtor(&argv[1]);
- zval_ptr_dtor(&argv[2]);
- zval_ptr_dtor(&retval);
-
- return ret;
-}
-/* }}} */
-#endif
-
-/* {{{ curl_free_string
- */
-static void curl_free_string(void **string)
-{
- efree(*string);
-}
-/* }}} */
-
-/* {{{ curl_free_post
- */
-static void curl_free_post(void **post)
-{
- curl_formfree((struct HttpPost *) *post);
-}
-/* }}} */
-
-/* {{{ curl_free_slist
- */
-static void curl_free_slist(void **slist)
-{
- curl_slist_free_all((struct curl_slist *) *slist);
-}
-/* }}} */
-
-/* {{{ proto array curl_version([int version])
- Return cURL version information. */
-PHP_FUNCTION(curl_version)
-{
- curl_version_info_data *d;
- long uversion = CURLVERSION_NOW;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|l", &uversion) == FAILURE) {
- return;
- }
-
- d = curl_version_info(uversion);
- if (d == NULL) {
- RETURN_FALSE;
- }
-
- array_init(return_value);
-
- CAAL("version_number", d->version_num);
- CAAL("age", d->age);
- CAAL("features", d->features);
- CAAL("ssl_version_number", d->ssl_version_num);
- CAAS("version", d->version);
- CAAS("host", d->host);
- CAAS("ssl_version", d->ssl_version);
- CAAS("libz_version", d->libz_version);
- /* Add an array of protocols */
- {
- char **p = (char **) d->protocols;
- zval *protocol_list = NULL;
-
- MAKE_STD_ZVAL(protocol_list);
- array_init(protocol_list);
-
- while (*p != NULL) {
- add_next_index_string(protocol_list, *p++, 1);
- }
- CAAZ("protocols", protocol_list);
- }
-}
-/* }}} */
-
-/* {{{ alloc_curl_handle
- */
-static void alloc_curl_handle(php_curl **ch)
-{
- *ch = emalloc(sizeof(php_curl));
- (*ch)->handlers = ecalloc(1, sizeof(php_curl_handlers));
- (*ch)->handlers->write = ecalloc(1, sizeof(php_curl_write));
- (*ch)->handlers->write_header = ecalloc(1, sizeof(php_curl_write));
- (*ch)->handlers->read = ecalloc(1, sizeof(php_curl_read));
-
- memset(&(*ch)->err, 0, sizeof((*ch)->err));
-
- zend_llist_init(&(*ch)->to_free.str, sizeof(char *), (void(*)(void *)) curl_free_string, 0);
- zend_llist_init(&(*ch)->to_free.slist, sizeof(struct curl_slist), (void(*)(void *)) curl_free_slist, 0);
- zend_llist_init(&(*ch)->to_free.post, sizeof(struct HttpPost), (void(*)(void *)) curl_free_post, 0);
-}
-/* }}} */
-
-/* {{{ proto resource curl_init([string url])
- Initialize a CURL session */
-PHP_FUNCTION(curl_init)
-{
- zval **url;
- php_curl *ch;
- CURL *cp;
- int argc = ZEND_NUM_ARGS();
-
- if (argc < 0 || argc > 1 || zend_get_parameters_ex(argc, &url) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- cp = curl_easy_init();
- if (!cp) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Could not initialize a new cURL handle");
- RETURN_FALSE;
- }
-
- alloc_curl_handle(&ch);
- TSRMLS_SET_CTX(ch->thread_ctx);
-
- ch->cp = cp;
-
- ch->handlers->write->method = PHP_CURL_STDOUT;
- ch->handlers->write->type = PHP_CURL_ASCII;
- ch->handlers->read->method = PHP_CURL_DIRECT;
- ch->handlers->write_header->method = PHP_CURL_IGNORE;
-
- ch->uses = 0;
-
- curl_easy_setopt(ch->cp, CURLOPT_NOPROGRESS, 1);
- curl_easy_setopt(ch->cp, CURLOPT_VERBOSE, 0);
- curl_easy_setopt(ch->cp, CURLOPT_ERRORBUFFER, ch->err.str);
- curl_easy_setopt(ch->cp, CURLOPT_WRITEFUNCTION, curl_write);
- curl_easy_setopt(ch->cp, CURLOPT_FILE, (void *) ch);
- curl_easy_setopt(ch->cp, CURLOPT_READFUNCTION, curl_read);
- curl_easy_setopt(ch->cp, CURLOPT_INFILE, (void *) ch);
- curl_easy_setopt(ch->cp, CURLOPT_HEADERFUNCTION, curl_write_header);
- curl_easy_setopt(ch->cp, CURLOPT_WRITEHEADER, (void *) ch);
- curl_easy_setopt(ch->cp, CURLOPT_DNS_USE_GLOBAL_CACHE, 1);
- curl_easy_setopt(ch->cp, CURLOPT_DNS_CACHE_TIMEOUT, 120);
-#if defined(ZTS)
- curl_easy_setopt(ch->cp, CURLOPT_NOSIGNAL, 1);
-#endif
-
- if (argc > 0) {
- char *urlcopy;
- convert_to_string_ex(url);
-
- 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);
- }
-
- ZEND_REGISTER_RESOURCE(return_value, ch, le_curl);
- ch->id = Z_LVAL_P(return_value);
-}
-/* }}} */
-
-/* {{{ proto resource curl_copy_handle(resource ch)
- Copy a cURL handle along with all of it's preferences */
-PHP_FUNCTION(curl_copy_handle)
-{
- zval **zid;
- CURL *cp;
- php_curl *ch;
- php_curl *dupch;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &zid) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- ZEND_FETCH_RESOURCE(ch, php_curl *, zid, -1, le_curl_name, le_curl);
-
- cp = curl_easy_duphandle(ch->cp);
- if (!cp) {
- php_error(E_WARNING, "Cannot duplicate cURL handle");
- RETURN_FALSE;
- }
-
- alloc_curl_handle(&dupch);
- TSRMLS_SET_CTX(ch->thread_ctx);
-
- dupch->cp = cp;
- dupch->handlers->write->method = ch->handlers->write->method;
- dupch->handlers->write->type = ch->handlers->write->type;
- dupch->handlers->read->method = ch->handlers->read->method;
- dupch->handlers->write_header->method = ch->handlers->write_header->method;
-
- ZEND_REGISTER_RESOURCE(return_value, dupch, le_curl);
- dupch->id = Z_LVAL_P(return_value);
-}
-/* }}} */
-
-/* {{{ proto bool curl_setopt(resource ch, string option, mixed value)
- Set an option for a CURL transfer */
-PHP_FUNCTION(curl_setopt)
-{
- zval **zid, **zoption, **zvalue;
- php_curl *ch;
- CURLcode error=CURLE_OK;
- int option;
-
- if (ZEND_NUM_ARGS() != 3 || zend_get_parameters_ex(3, &zid, &zoption, &zvalue) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(ch, php_curl *, zid, -1, le_curl_name, le_curl);
-
- convert_to_long_ex(zoption);
-
- option = Z_LVAL_PP(zoption);
- switch (option) {
- case CURLOPT_INFILESIZE:
- case CURLOPT_VERBOSE:
- case CURLOPT_HEADER:
- case CURLOPT_NOPROGRESS:
- case CURLOPT_NOBODY:
- case CURLOPT_FAILONERROR:
- case CURLOPT_UPLOAD:
- case CURLOPT_POST:
- case CURLOPT_FTPLISTONLY:
- case CURLOPT_FTPAPPEND:
- case CURLOPT_NETRC:
- case CURLOPT_FOLLOWLOCATION:
- case CURLOPT_PUT:
-#if CURLOPT_MUTE != 0
- case CURLOPT_MUTE:
-#endif
- case CURLOPT_TIMEOUT:
- case CURLOPT_FTP_USE_EPSV:
- case CURLOPT_LOW_SPEED_LIMIT:
- case CURLOPT_SSLVERSION:
- case CURLOPT_LOW_SPEED_TIME:
- case CURLOPT_RESUME_FROM:
- case CURLOPT_TIMEVALUE:
- case CURLOPT_TIMECONDITION:
- case CURLOPT_TRANSFERTEXT:
- case CURLOPT_HTTPPROXYTUNNEL:
- case CURLOPT_FILETIME:
- case CURLOPT_MAXREDIRS:
- case CURLOPT_MAXCONNECTS:
- case CURLOPT_CLOSEPOLICY:
- case CURLOPT_FRESH_CONNECT:
- case CURLOPT_FORBID_REUSE:
- case CURLOPT_CONNECTTIMEOUT:
- case CURLOPT_SSL_VERIFYHOST:
- case CURLOPT_SSL_VERIFYPEER:
- case CURLOPT_DNS_USE_GLOBAL_CACHE:
- case CURLOPT_NOSIGNAL:
- case CURLOPT_PROXYTYPE:
- case CURLOPT_BUFFERSIZE:
- case CURLOPT_HTTPGET:
- case CURLOPT_HTTP_VERSION:
- case CURLOPT_CRLF:
- case CURLOPT_DNS_CACHE_TIMEOUT:
- case CURLOPT_PROXYPORT:
- case CURLOPT_FTP_USE_EPRT:
-#if LIBCURL_VERSION_NUM > 0x070a05 /* CURLOPT_HTTPAUTH is available since curl 7.10.6 */
- case CURLOPT_HTTPAUTH:
-#endif
-#if LIBCURL_VERSION_NUM > 0x070a06 /* CURLOPT_PROXYAUTH is available since curl 7.10.7 */
- case CURLOPT_PROXYAUTH:
-#endif
- case CURLOPT_UNRESTRICTED_AUTH:
- case CURLOPT_PORT:
- convert_to_long_ex(zvalue);
- error = curl_easy_setopt(ch->cp, option, Z_LVAL_PP(zvalue));
- break;
- case CURLOPT_URL:
- case CURLOPT_PROXY:
- case CURLOPT_USERPWD:
- case CURLOPT_PROXYUSERPWD:
- case CURLOPT_RANGE:
- case CURLOPT_CUSTOMREQUEST:
- case CURLOPT_USERAGENT:
- case CURLOPT_FTPPORT:
- case CURLOPT_COOKIE:
- case CURLOPT_REFERER:
- case CURLOPT_INTERFACE:
- case CURLOPT_KRB4LEVEL:
- case CURLOPT_EGDSOCKET:
- case CURLOPT_CAINFO:
- case CURLOPT_CAPATH:
- case CURLOPT_SSL_CIPHER_LIST:
- case CURLOPT_SSLKEY:
- case CURLOPT_SSLKEYTYPE:
- case CURLOPT_SSLKEYPASSWD:
- case CURLOPT_SSLENGINE:
- case CURLOPT_SSLENGINE_DEFAULT:
- case CURLOPT_SSLCERTTYPE:
- case CURLOPT_ENCODING: {
- char *copystr = NULL;
-
- convert_to_string_ex(zvalue);
- 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);
-
- break;
- }
- case CURLOPT_FILE:
- case CURLOPT_INFILE:
- case CURLOPT_WRITEHEADER:
- case CURLOPT_STDERR: {
- FILE *fp = NULL;
- int type;
- void * what;
-
- what = zend_fetch_resource(zvalue TSRMLS_CC, -1, "File-Handle", &type, 1, php_file_le_stream());
- ZEND_VERIFY_RESOURCE(what);
-
- if (FAILURE == php_stream_cast((php_stream *) what, PHP_STREAM_AS_STDIO, (void *) &fp, REPORT_ERRORS)) {
- RETURN_FALSE;
- }
-
- if (!fp) {
- RETURN_FALSE;
- }
-
- error = CURLE_OK;
- switch (option) {
- case CURLOPT_FILE:
- ch->handlers->write->fp = fp;
- ch->handlers->write->method = PHP_CURL_FILE;
- break;
- case CURLOPT_WRITEHEADER:
- ch->handlers->write_header->fp = fp;
- ch->handlers->write_header->method = PHP_CURL_FILE;
- break;
- case CURLOPT_INFILE:
- zend_list_addref(Z_LVAL_PP(zvalue));
- ch->handlers->read->fp = fp;
- ch->handlers->read->fd = Z_LVAL_PP(zvalue);
- break;
- default:
- error = curl_easy_setopt(ch->cp, option, fp);
- break;
- }
-
- break;
- }
- case CURLOPT_RETURNTRANSFER:
- convert_to_long_ex(zvalue);
-
- if (Z_LVAL_PP(zvalue)) {
- ch->handlers->write->method = PHP_CURL_RETURN;
- } else {
- ch->handlers->write->method = PHP_CURL_STDOUT;
- }
- break;
- case CURLOPT_BINARYTRANSFER:
- convert_to_long_ex(zvalue);
-
- if (Z_LVAL_PP(zvalue)) {
- ch->handlers->write->type = PHP_CURL_BINARY;
- }
- break;
- case CURLOPT_WRITEFUNCTION:
- if (ch->handlers->write->func_name) {
- zval_ptr_dtor(&ch->handlers->write->func_name);
- ch->handlers->write->fci_cache = empty_fcall_info_cache;
- }
- zval_add_ref(zvalue);
- ch->handlers->write->func_name = *zvalue;
- ch->handlers->write->method = PHP_CURL_USER;
- break;
- 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;
- }
- zval_add_ref(zvalue);
- ch->handlers->read->func_name = *zvalue;
- ch->handlers->read->method = PHP_CURL_USER;
- break;
- 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;
- }
- zval_add_ref(zvalue);
- ch->handlers->write_header->func_name = *zvalue;
- ch->handlers->write_header->method = PHP_CURL_USER;
- break;
-#if CURLOPT_PASSWDFUNCTION != 0
- case CURLOPT_PASSWDFUNCTION:
- if (ch->handlers->passwd) {
- zval_ptr_dtor(&ch->handlers->passwd);
- }
- zval_add_ref(zvalue);
- ch->handlers->passwd = *zvalue;
- error = curl_easy_setopt(ch->cp, CURLOPT_PASSWDFUNCTION, curl_passwd);
- error = curl_easy_setopt(ch->cp, CURLOPT_PASSWDDATA, (void *) ch);
- break;
-#endif
- case CURLOPT_POSTFIELDS:
- if (Z_TYPE_PP(zvalue) == IS_ARRAY || Z_TYPE_PP(zvalue) == IS_OBJECT) {
- zval **current;
- HashTable *postfields;
- struct HttpPost *first = NULL;
- struct HttpPost *last = NULL;
- char *postval;
- char *string_key = NULL;
- ulong num_key;
- uint string_key_len;
-
- postfields = HASH_OF(*zvalue);
- if (! postfields) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Couldn't get HashTable in CURLOPT_POSTFIELDS");
- RETURN_FALSE;
- }
-
- for (zend_hash_internal_pointer_reset(postfields);
- zend_hash_get_current_data(postfields, (void **) &current) == SUCCESS;
- zend_hash_move_forward(postfields)
- ) {
-
- SEPARATE_ZVAL(current);
- convert_to_string_ex(current);
-
- zend_hash_get_current_key_ex(postfields, &string_key, &string_key_len, &num_key, 0, NULL);
-
- postval = Z_STRVAL_PP(current);
- if (*postval == '@') {
- error = curl_formadd(&first, &last,
- CURLFORM_COPYNAME, string_key,
- CURLFORM_NAMELENGTH, string_key_len - 1,
- CURLFORM_FILE, ++postval,
- CURLFORM_END);
- } else {
- error = curl_formadd(&first, &last,
- CURLFORM_COPYNAME, string_key,
- CURLFORM_NAMELENGTH, string_key_len - 1,
- CURLFORM_COPYCONTENTS, postval,
- CURLFORM_CONTENTSLENGTH, Z_STRLEN_PP(current),
- CURLFORM_END);
- }
- }
-
- SAVE_CURL_ERROR(ch, error);
- if (error != CURLE_OK) {
- RETURN_FALSE;
- }
-
- zend_llist_add_element(&ch->to_free.post, &first);
- error = curl_easy_setopt(ch->cp, CURLOPT_HTTPPOST, first);
-
- } else {
- char *post = NULL;
-
- convert_to_string_ex(zvalue);
- post = estrndup(Z_STRVAL_PP(zvalue), Z_STRLEN_PP(zvalue));
- zend_llist_add_element(&ch->to_free.str, &post);
-
- error = curl_easy_setopt(ch->cp, CURLOPT_POSTFIELDS, post);
- error = curl_easy_setopt(ch->cp, CURLOPT_POSTFIELDSIZE, Z_STRLEN_PP(zvalue));
- }
- break;
- case CURLOPT_HTTPHEADER:
- case CURLOPT_QUOTE:
- case CURLOPT_HTTP200ALIASES:
- case CURLOPT_POSTQUOTE: {
- zval **current;
- HashTable *ph;
- struct curl_slist *slist = NULL;
-
- ph = HASH_OF(*zvalue);
- if (!ph) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "You must pass either an object or an array with the CURLOPT_HTTPHEADER, CURLOPT_QUOTE, CURLOPT_HTTP200ALIASES and CURLOPT_POSTQUOTE arguments");
- RETURN_FALSE;
- }
-
- for (zend_hash_internal_pointer_reset(ph);
- 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);
- if (!slist) {
- efree(indiv);
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Could not build curl_slist");
- RETURN_FALSE;
- }
- zend_llist_add_element(&ch->to_free.str, &indiv);
- }
- zend_llist_add_element(&ch->to_free.slist, &slist);
-
- error = curl_easy_setopt(ch->cp, option, slist);
-
- break;
- }
- /* the following options deal with files, therefor safe_mode & open_basedir checks
- * are required.
- */
- case CURLOPT_COOKIEJAR:
- case CURLOPT_SSLCERT:
- case CURLOPT_RANDOM_FILE:
- case CURLOPT_COOKIEFILE: {
- char *copystr = NULL;
-
- convert_to_string_ex(zvalue);
-
- if (php_check_open_basedir(Z_STRVAL_PP(zvalue) TSRMLS_CC) || (PG(safe_mode) && !php_checkuid(Z_STRVAL_PP(zvalue), "rb+", CHECKUID_CHECK_MODE_PARAM))) {
- RETURN_FALSE;
- }
-
- 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);
-
- break;
- }
- }
-
- SAVE_CURL_ERROR(ch, error);
- if (error != CURLE_OK) {
- RETURN_FALSE;
- } else {
- RETURN_TRUE;
- }
-}
-/* }}} */
-
-/* {{{ _php_curl_cleanup_handle(ch)
- Cleanup an execution phase */
-void _php_curl_cleanup_handle(php_curl *ch)
-{
- if (ch->uses < 1) {
- return;
- }
-
- if (ch->handlers->write->buf.len) {
- memset(&ch->handlers->write->buf, 0, sizeof(smart_str));
- }
-
- memset(ch->err.str, 0, CURL_ERROR_SIZE + 1);
- ch->err.no = 0;
-}
-/* }}} */
-
-/* {{{ proto bool curl_exec(resource ch)
- Perform a CURL session */
-PHP_FUNCTION(curl_exec)
-{
- zval **zid;
- php_curl *ch;
- CURLcode error;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &zid) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(ch, php_curl *, zid, -1, le_curl_name, le_curl);
-
- _php_curl_cleanup_handle(ch);
-
- error = curl_easy_perform(ch->cp);
- SAVE_CURL_ERROR(ch, error);
- /* CURLE_PARTIAL_FILE is returned by HEAD requests */
- if (error != CURLE_OK && error != CURLE_PARTIAL_FILE) {
- if (ch->handlers->write->buf.len > 0) {
- smart_str_free(&ch->handlers->write->buf);
- }
-
- RETURN_FALSE;
- }
-
- ch->uses++;
-
- if (ch->handlers->write->method == PHP_CURL_RETURN && ch->handlers->write->buf.len > 0) {
- if (ch->handlers->write->type != PHP_CURL_BINARY) {
- smart_str_0(&ch->handlers->write->buf);
- }
- RETURN_STRINGL(ch->handlers->write->buf.c, ch->handlers->write->buf.len, 0);
- }
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto mixed curl_getinfo(resource ch, int opt)
- Get information regarding a specific transfer */
-PHP_FUNCTION(curl_getinfo)
-{
- zval **zid,
- **zoption;
- php_curl *ch;
- int option, argc = ZEND_NUM_ARGS();
-
- if (argc < 1 || argc > 2 || zend_get_parameters_ex(argc, &zid, &zoption) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(ch, php_curl *, zid, -1, le_curl_name, le_curl);
-
- if (argc < 2) {
- char *s_code;
- long l_code;
- double d_code;
-
- array_init(return_value);
-
- if (curl_easy_getinfo(ch->cp, CURLINFO_EFFECTIVE_URL, &s_code) == CURLE_OK) {
- CAAS("url", s_code);
- }
- if (curl_easy_getinfo(ch->cp, CURLINFO_CONTENT_TYPE, &s_code) == CURLE_OK) {
- if (s_code != NULL) {
- CAAS("content_type", s_code);
- }
- }
- if (curl_easy_getinfo(ch->cp, CURLINFO_HTTP_CODE, &l_code) == CURLE_OK) {
- CAAL("http_code", l_code);
- }
- if (curl_easy_getinfo(ch->cp, CURLINFO_HEADER_SIZE, &l_code) == CURLE_OK) {
- CAAL("header_size", l_code);
- }
- if (curl_easy_getinfo(ch->cp, CURLINFO_REQUEST_SIZE, &l_code) == CURLE_OK) {
- CAAL("request_size", l_code);
- }
- if (curl_easy_getinfo(ch->cp, CURLINFO_FILETIME, &l_code) == CURLE_OK) {
- CAAL("filetime", l_code);
- }
- if (curl_easy_getinfo(ch->cp, CURLINFO_SSL_VERIFYRESULT, &l_code) == CURLE_OK) {
- CAAL("ssl_verify_result", l_code);
- }
- if (curl_easy_getinfo(ch->cp, CURLINFO_REDIRECT_COUNT, &l_code) == CURLE_OK) {
- CAAL("redirect_count", l_code);
- }
- if (curl_easy_getinfo(ch->cp, CURLINFO_TOTAL_TIME, &d_code) == CURLE_OK) {
- CAAD("total_time", d_code);
- }
- if (curl_easy_getinfo(ch->cp, CURLINFO_NAMELOOKUP_TIME, &d_code) == CURLE_OK) {
- CAAD("namelookup_time", d_code);
- }
- if (curl_easy_getinfo(ch->cp, CURLINFO_CONNECT_TIME, &d_code) == CURLE_OK) {
- CAAD("connect_time", d_code);
- }
- if (curl_easy_getinfo(ch->cp, CURLINFO_PRETRANSFER_TIME, &d_code) == CURLE_OK) {
- CAAD("pretransfer_time", d_code);
- }
- if (curl_easy_getinfo(ch->cp, CURLINFO_SIZE_UPLOAD, &d_code) == CURLE_OK) {
- CAAD("size_upload", d_code);
- }
- if (curl_easy_getinfo(ch->cp, CURLINFO_SIZE_DOWNLOAD, &d_code) == CURLE_OK) {
- CAAD("size_download", d_code);
- }
- if (curl_easy_getinfo(ch->cp, CURLINFO_SPEED_DOWNLOAD, &d_code) == CURLE_OK) {
- CAAD("speed_download", d_code);
- }
- if (curl_easy_getinfo(ch->cp, CURLINFO_SPEED_UPLOAD, &d_code) == CURLE_OK) {
- CAAD("speed_upload", d_code);
- }
- if (curl_easy_getinfo(ch->cp, CURLINFO_CONTENT_LENGTH_DOWNLOAD, &d_code) == CURLE_OK) {
- CAAD("download_content_length", d_code);
- }
- if (curl_easy_getinfo(ch->cp, CURLINFO_CONTENT_LENGTH_UPLOAD, &d_code) == CURLE_OK) {
- CAAD("upload_content_length", d_code);
- }
- if (curl_easy_getinfo(ch->cp, CURLINFO_STARTTRANSFER_TIME, &d_code) == CURLE_OK) {
- CAAD("starttransfer_time", d_code);
- }
- if (curl_easy_getinfo(ch->cp, CURLINFO_REDIRECT_TIME, &d_code) == CURLE_OK) {
- CAAD("redirect_time", d_code);
- }
- } else {
- option = Z_LVAL_PP(zoption);
- switch (option) {
- case CURLINFO_EFFECTIVE_URL:
- case CURLINFO_CONTENT_TYPE: {
- char *s_code;
-
- curl_easy_getinfo(ch->cp, option, &s_code);
- RETURN_STRING(s_code, 1);
- break;
- }
- case CURLINFO_HTTP_CODE:
- case CURLINFO_HEADER_SIZE:
- case CURLINFO_REQUEST_SIZE:
- case CURLINFO_FILETIME:
- case CURLINFO_SSL_VERIFYRESULT:
- case CURLINFO_REDIRECT_COUNT: {
- long code;
-
- curl_easy_getinfo(ch->cp, option, &code);
- RETURN_LONG(code);
- break;
- }
- case CURLINFO_TOTAL_TIME:
- case CURLINFO_NAMELOOKUP_TIME:
- case CURLINFO_CONNECT_TIME:
- case CURLINFO_PRETRANSFER_TIME:
- case CURLINFO_SIZE_UPLOAD:
- case CURLINFO_SIZE_DOWNLOAD:
- case CURLINFO_SPEED_DOWNLOAD:
- case CURLINFO_SPEED_UPLOAD:
- case CURLINFO_CONTENT_LENGTH_DOWNLOAD:
- case CURLINFO_CONTENT_LENGTH_UPLOAD:
- case CURLINFO_STARTTRANSFER_TIME:
- case CURLINFO_REDIRECT_TIME: {
- double code;
-
- curl_easy_getinfo(ch->cp, option, &code);
- RETURN_DOUBLE(code);
- break;
- }
- }
- }
-}
-/* }}} */
-
-/* {{{ proto string curl_error(resource ch)
- Return a string contain the last error for the current session */
-PHP_FUNCTION(curl_error)
-{
- zval **zid;
- php_curl *ch;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &zid) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(ch, php_curl *, zid, -1, le_curl_name, le_curl);
-
- ch->err.str[CURL_ERROR_SIZE] = 0;
- RETURN_STRING(ch->err.str, 1);
-}
-/* }}} */
-
-/* {{{ proto int curl_errno(resource ch)
- Return an integer containing the last error number */
-PHP_FUNCTION(curl_errno)
-{
- zval **zid;
- php_curl *ch;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &zid) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(ch, php_curl *, zid, -1, le_curl_name, le_curl);
-
- RETURN_LONG(ch->err.no);
-}
-/* }}} */
-
-/* {{{ proto void curl_close(resource ch)
- Close a CURL session */
-PHP_FUNCTION(curl_close)
-{
- zval **zid;
- php_curl *ch;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &zid) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(ch, php_curl *, zid, -1, le_curl_name, le_curl);
- if (ch->uses) {
- ch->uses--;
- } else {
- zend_list_delete(Z_LVAL_PP(zid));
- }
-}
-/* }}} */
-
-/* {{{ _php_curl_close()
- List destructor for curl handles */
-static void _php_curl_close(zend_rsrc_list_entry *rsrc TSRMLS_DC)
-{
- php_curl *ch = (php_curl *) rsrc->ptr;
-
-#if PHP_CURL_DEBUG
- fprintf(stderr, "DTOR CALLED, ch = %x\n", ch);
-#endif
-
- curl_easy_cleanup(ch->cp);
- zend_llist_clean(&ch->to_free.str);
- zend_llist_clean(&ch->to_free.slist);
- zend_llist_clean(&ch->to_free.post);
-
- if (ch->handlers->write->func_name) {
- zval_ptr_dtor(&ch->handlers->write->func_name);
- }
- if (ch->handlers->read->func_name) {
- zval_ptr_dtor(&ch->handlers->read->func_name);
- }
- if (ch->handlers->write_header->func_name) {
- zval_ptr_dtor(&ch->handlers->write_header->func_name);
- }
- if (ch->handlers->passwd) {
- zval_ptr_dtor(&ch->handlers->passwd);
- }
- efree(ch->handlers->write);
- efree(ch->handlers->write_header);
- efree(ch->handlers->read);
- efree(ch->handlers);
- efree(ch);
-}
-/* }}} */
-
-#endif
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- * vim600: fdm=marker
- * vim: noet sw=4 ts=4
- */
diff --git a/ext/curl/multi.c b/ext/curl/multi.c
deleted file mode 100644
index d22540be89..0000000000
--- a/ext/curl/multi.c
+++ /dev/null
@@ -1,274 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Sterling Hughes <sterling@php.net> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#define ZEND_INCLUDE_FULL_WINDOWS_HEADERS
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "php.h"
-
-#if HAVE_CURL
-
-#include "php_curl.h"
-
-#include <curl/curl.h>
-#include <curl/multi.h>
-
-#ifdef HAVE_SYS_SELECT_H
-#include <sys/select.h>
-#endif
-
-#ifdef HAVE_SYS_TIME_H
-#include <sys/time.h>
-#endif
-
-#ifdef HAVE_SYS_TYPES_H
-#include <sys/types.h>
-#endif
-
-#ifdef HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-
-/* {{{ proto resource curl_multi_init(void)
- Returns a new cURL multi handle */
-PHP_FUNCTION(curl_multi_init)
-{
- php_curlm *mh;
-
- if (ZEND_NUM_ARGS() != 0) {
- WRONG_PARAM_COUNT;
- }
-
- mh = ecalloc(1, sizeof(php_curlm));
- mh->multi = curl_multi_init();
-
- zend_llist_init(&mh->easyh, sizeof(zval *), (llist_dtor_func_t) ZVAL_PTR_DTOR, 0);
-
- ZEND_REGISTER_RESOURCE(return_value, mh, le_curl_multi_handle);
-}
-/* }}} */
-
-/* {{{ proto int curl_multi_add_handle(resource multi, resource ch)
- Add a normal cURL handle to a cURL multi handle */
-PHP_FUNCTION(curl_multi_add_handle)
-{
- zval *z_mh;
- zval *z_ch;
- php_curlm *mh;
- php_curl *ch;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rr", &z_mh, &z_ch) == FAILURE) {
- return;
- }
-
- ZEND_FETCH_RESOURCE(mh, php_curlm *, &z_mh, -1, le_curl_multi_handle_name, le_curl_multi_handle);
- ZEND_FETCH_RESOURCE(ch, php_curl *, &z_ch, -1, le_curl_name, le_curl);
-
- zval_add_ref(&z_ch);
-
- _php_curl_cleanup_handle(ch);
- ch->uses++;
-
- zend_llist_add_element(&mh->easyh, &z_ch);
-
- RETURN_LONG((long) curl_multi_add_handle(mh->multi, ch->cp));
-}
-/* }}} */
-
-/* {{{ proto int curl_multi_remove_handle(resource mh, resource ch)
- Remove a multi handle from a set of cURL handles */
-PHP_FUNCTION(curl_multi_remove_handle)
-{
- zval *z_mh;
- zval *z_ch;
- php_curlm *mh;
- php_curl *ch;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rr", &z_mh, &z_ch) == FAILURE) {
- return;
- }
-
- ZEND_FETCH_RESOURCE(mh, php_curlm *, &z_mh, -1, le_curl_multi_handle_name, le_curl_multi_handle);
- ZEND_FETCH_RESOURCE(ch, php_curl *, &z_ch, -1, le_curl_name, le_curl);
-
- zval_ptr_dtor(&z_ch);
-
- RETURN_LONG((long) curl_multi_remove_handle(mh->multi, ch->cp));
-}
-/* }}} */
-
-static void _make_timeval_struct(struct timeval *to, double timeout)
-{
- unsigned long conv;
-
- conv = (unsigned long) (timeout * 1000000.0);
- to->tv_sec = conv / 1000000;
- to->tv_usec = conv % 1000000;
-}
-
-/* {{{ proto int curl_multi_select(resource mh[, double timeout])
- Get all the sockets associated with the cURL extension, which can then be "selected" */
-PHP_FUNCTION(curl_multi_select)
-{
- zval *z_mh;
- php_curlm *mh;
- fd_set readfds;
- fd_set writefds;
- fd_set exceptfds;
- int maxfd;
- double timeout = 1.0;
- struct timeval to;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r|d", &z_mh, &timeout) == FAILURE) {
- return;
- }
-
- ZEND_FETCH_RESOURCE(mh, php_curlm *, &z_mh, -1, le_curl_multi_handle_name, le_curl_multi_handle);
-
- _make_timeval_struct(&to, timeout);
-
- FD_ZERO(&readfds);
- FD_ZERO(&writefds);
- FD_ZERO(&exceptfds);
-
- curl_multi_fdset(mh->multi, &readfds, &writefds, &exceptfds, &maxfd);
- RETURN_LONG(select(maxfd + 1, &readfds, &writefds, &exceptfds, &to));
-}
-/* }}} */
-
-/* {{{ proto int curl_multi_exec(resource mh, int &still_running)
- Run the sub-connections of the current cURL handle */
-PHP_FUNCTION(curl_multi_exec)
-{
- zval *z_mh;
- zval *z_still_running;
- php_curlm *mh;
- int still_running;
- int result;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rz", &z_mh, &z_still_running) == FAILURE) {
- return;
- }
-
- ZEND_FETCH_RESOURCE(mh, php_curlm *, &z_mh, -1, le_curl_multi_handle_name, le_curl_multi_handle);
-
- convert_to_long_ex(&z_still_running);
- still_running = Z_LVAL_P(z_still_running);
- result = curl_multi_perform(mh->multi, &still_running);
- ZVAL_LONG(z_still_running, still_running);
-
- RETURN_LONG(result);
-}
-/* }}} */
-
-/* {{{ proto string curl_multi_getcontent(resource ch)
- Return the content of a cURL handle if CURLOPT_RETURNTRANSFER is set */
-PHP_FUNCTION(curl_multi_getcontent)
-{
- zval *z_ch;
- php_curl *ch;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &z_ch) == FAILURE) {
- return;
- }
-
- ZEND_FETCH_RESOURCE(ch, php_curl *, &z_ch, -1, le_curl_name, le_curl);
-
- if (ch->handlers->write->method == PHP_CURL_RETURN && ch->handlers->write->buf.len > 0) {
- if (ch->handlers->write->type == PHP_CURL_BINARY) {
- smart_str_0(&ch->handlers->write->buf);
- }
-
- RETURN_STRINGL(ch->handlers->write->buf.c, ch->handlers->write->buf.len, 0);
- }
-}
-
-/* {{{ proto array curl_multi_info_read(resource mh)
- Get information about the current transfers */
-PHP_FUNCTION(curl_multi_info_read)
-{
- zval *z_mh;
- php_curlm *mh;
- CURLMsg *tmp_msg;
- int queued_msgs;
-
- /* XXX: Not Implemented */
- return;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &z_mh) == FAILURE) {
- return;
- }
-
- ZEND_FETCH_RESOURCE(mh, php_curlm *, &z_mh, -1, le_curl_multi_handle_name, le_curl_multi_handle);
-
- tmp_msg = curl_multi_info_read(mh->multi, &queued_msgs);
- if (tmp_msg == NULL) {
- RETURN_FALSE;
- }
-
- array_init(return_value);
- add_assoc_long(return_value, "msg", tmp_msg->msg);
- add_assoc_long(return_value, "result", tmp_msg->data.result);
- /* add_assoc_resource(return_value, "handle", zend_list_id_by_pointer(tmp_msg->easy_handle, le_curl TSRMLS_CC)); */
- add_assoc_string(return_value, "whatever", (char *) tmp_msg->data.whatever, 1);
-}
-/* }}} */
-
-/* {{{ proto void curl_multi_close(resource mh)
- Close a set of cURL handles */
-PHP_FUNCTION(curl_multi_close)
-{
- zval *z_mh;
- php_curlm *mh;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &z_mh) == FAILURE) {
- return;
- }
-
- ZEND_FETCH_RESOURCE(mh, php_curlm *, &z_mh, -1, le_curl_multi_handle_name, le_curl_multi_handle);
-
- zend_list_delete(Z_LVAL_P(z_mh));
-}
-/* }}} */
-
-void _php_curl_multi_close(zend_rsrc_list_entry *rsrc TSRMLS_DC)
-{
- php_curlm *mh = (php_curlm *) rsrc->ptr;
- if (mh) {
- curl_multi_cleanup(mh->multi);
- zend_llist_clean(&mh->easyh);
- efree(mh);
- rsrc->ptr = NULL;
- }
-}
-
-#endif
-
-/*
- * 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/curl/package.xml b/ext/curl/package.xml
deleted file mode 100644
index 5e837a4074..0000000000
--- a/ext/curl/package.xml
+++ /dev/null
@@ -1,52 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1" ?>
-<!DOCTYPE package SYSTEM "../pear/package.dtd">
-<package>
- <name>curl</name>
- <summary>Clib PDF functions</summary>
- <maintainers>
- <maintainer>
- <user>sterling</user>
- <name>Sterling Hughes</name>
- <email>sterling@php.net</email>
- <role>lead</role>
- </maintainer>
- </maintainers>
- <description>
-PHP supports libcurl, a library created by Daniel Stenberg,
-that allows you to connect and communicate to many different
-types of servers with many different types of protocols.
-libcurl currently supports the http, https, ftp, gopher,
-telnet, dict, file, and ldap protocols. libcurl also supports
-HTTPS certificates, HTTP POST, HTTP PUT, FTP uploading (this
-can also be done with PHP's ftp extension), HTTP form based
-upload, proxies, cookies, and user+password authentication.
- </description>
- <license>PHP</license>
- <release>
- <state>beta</state>
- <version>5.0rc1</version>
- <date>2004-03-19</date>
- <notes>
-package.xml added to support intallation using pear installer
- </notes>
- <configureoptions>
- <configureoption name="with-curl" default="autodetect" prompt="path to curl installation?"/>
- </configureoptions>
- <filelist>
- <file role="doc" name="CREDITS"/>
- <file role="src" name="config.m4"/>
- <file role="src" name="config.mw32"/>
- <file role="src" name="curl.dsp"/>
- <file role="src" name="interface.c"/>
- <file role="src" name="multi.c"/>
- <file role="src" name="streams.c"/>
- <file role="src" name="php_curl.h"/>
- </filelist>
- <deps>
- <dep type="php" rel="ge" version="5" />
- </deps>
- </release>
-</package>
-<!--
-vim:et:ts=1:sw=1
--->
diff --git a/ext/curl/php_curl.h b/ext/curl/php_curl.h
deleted file mode 100644
index d2a14c43b7..0000000000
--- a/ext/curl/php_curl.h
+++ /dev/null
@@ -1,170 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Sterling Hughes <sterling@php.net> |
- | Wez Furlong <wez@thebrainroom.com> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifndef _PHP_CURL_H
-#define _PHP_CURL_H
-
-#include "php.h"
-#include "ext/standard/php_smart_str.h"
-
-#ifdef COMPILE_DL_CURL
-#undef HAVE_CURL
-#define HAVE_CURL 1
-#endif
-
-#if HAVE_CURL
-
-#define PHP_CURL_DEBUG 0
-
-#include <curl/curl.h>
-#include <curl/multi.h>
-
-extern zend_module_entry curl_module_entry;
-#define curl_module_ptr &curl_module_entry
-
-#define CURLOPT_RETURNTRANSFER 19913
-#define CURLOPT_BINARYTRANSFER 19914
-#define PHP_CURL_STDOUT 0
-#define PHP_CURL_FILE 1
-#define PHP_CURL_USER 2
-#define PHP_CURL_DIRECT 3
-#define PHP_CURL_RETURN 4
-#define PHP_CURL_ASCII 5
-#define PHP_CURL_BINARY 6
-#define PHP_CURL_IGNORE 7
-
-int le_curl;
-#define le_curl_name "cURL handle"
-int le_curl_multi_handle;
-#define le_curl_multi_handle_name "cURL Multi Handle"
-
-PHP_MINIT_FUNCTION(curl);
-PHP_MSHUTDOWN_FUNCTION(curl);
-PHP_MINFO_FUNCTION(curl);
-PHP_FUNCTION(curl_version);
-PHP_FUNCTION(curl_init);
-PHP_FUNCTION(curl_copy_handle);
-PHP_FUNCTION(curl_setopt);
-PHP_FUNCTION(curl_exec);
-PHP_FUNCTION(curl_getinfo);
-PHP_FUNCTION(curl_error);
-PHP_FUNCTION(curl_errno);
-PHP_FUNCTION(curl_close);
-PHP_FUNCTION(curl_multi_init);
-PHP_FUNCTION(curl_multi_add_handle);
-PHP_FUNCTION(curl_multi_remove_handle);
-PHP_FUNCTION(curl_multi_select);
-PHP_FUNCTION(curl_multi_exec);
-PHP_FUNCTION(curl_multi_getcontent);
-PHP_FUNCTION(curl_multi_info_read);
-PHP_FUNCTION(curl_multi_close);
-void _php_curl_multi_close(zend_rsrc_list_entry * TSRMLS_DC);
-
-typedef struct {
- zval *func_name;
- zend_fcall_info_cache fci_cache;
- FILE *fp;
- smart_str buf;
- int method;
- int type;
-} php_curl_write;
-
-typedef struct {
- zval *func_name;
- zend_fcall_info_cache fci_cache;
- FILE *fp;
- long fd;
- int method;
-} php_curl_read;
-
-typedef struct {
- php_curl_write *write;
- php_curl_write *write_header;
- php_curl_read *read;
- zval *passwd;
-} php_curl_handlers;
-
-struct _php_curl_error {
- char str[CURL_ERROR_SIZE + 1];
- int no;
-};
-
-struct _php_curl_free {
- zend_llist str;
- zend_llist post;
- zend_llist slist;
-};
-
-typedef struct {
- struct _php_curl_error err;
- struct _php_curl_free to_free;
- void ***thread_ctx;
- CURL *cp;
- php_curl_handlers *handlers;
- long id;
- unsigned int uses;
-} php_curl;
-
-typedef struct {
- int still_running;
- CURLM *multi;
- zend_llist easyh;
-} php_curlm;
-
-void _php_curl_cleanup_handle(php_curl *);
-
-/* streams support */
-
-extern php_stream_ops php_curl_stream_ops;
-#define PHP_STREAM_IS_CURL &php_curl_stream_ops
-
-php_stream *php_curl_stream_opener(php_stream_wrapper *wrapper, char *filename, char *mode,
- int options, char **opened_path, php_stream_context *context STREAMS_DC TSRMLS_DC);
-
-extern php_stream_wrapper php_curl_wrapper;
-
-struct php_curl_buffer {
- off_t readpos, writepos;
- php_stream *buf;
-};
-
-typedef struct {
- CURL *curl;
- CURLM *multi;
- char *url;
- struct php_curl_buffer readbuffer; /* holds downloaded data */
- struct php_curl_buffer writebuffer; /* holds data to upload */
-
- fd_set readfds, writefds, excfds;
- int maxfd;
-
- char errstr[CURL_ERROR_SIZE + 1];
- CURLMcode mcode;
- int pending;
- zval *headers;
-} php_curl_stream;
-
-
-#else
-#define curl_module_ptr NULL
-#endif /* HAVE_CURL */
-#define phpext_curl_ptr curl_module_ptr
-#endif /* _PHP_CURL_H */
diff --git a/ext/curl/streams.c b/ext/curl/streams.c
deleted file mode 100644
index 2c127e3fdb..0000000000
--- a/ext/curl/streams.c
+++ /dev/null
@@ -1,386 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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@thebrainroom.com> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-/* This file implements cURL based wrappers.
- * NOTE: If you are implementing your own streams that are intended to
- * work independently of wrappers, this is not a good example to follow!
- **/
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "php.h"
-#include "php_memory_streams.h"
-
-#if HAVE_CURL
-
-#include <stdio.h>
-#include <string.h>
-
-#ifdef PHP_WIN32
-#include <winsock2.h>
-#include <sys/types.h>
-#endif
-
-#include <curl/curl.h>
-#include <curl/easy.h>
-
-#define SMART_STR_PREALLOC 4096
-
-#include "ext/standard/php_smart_str.h"
-#include "ext/standard/info.h"
-#include "ext/standard/file.h"
-#include "php_curl.h"
-
-static size_t on_data_available(char *data, size_t size, size_t nmemb, void *ctx)
-{
- php_stream *stream = (php_stream *) ctx;
- php_curl_stream *curlstream = (php_curl_stream *) stream->abstract;
- size_t wrote;
- TSRMLS_FETCH();
-
- /* TODO: I'd like to deprecate this.
- * This code is here because until we start getting real data, we don't know
- * if we have had all of the headers
- * */
- if (curlstream->readbuffer.writepos == 0) {
- zval *sym;
-
- MAKE_STD_ZVAL(sym);
- *sym = *curlstream->headers;
- zval_copy_ctor(sym);
- ZEND_SET_SYMBOL(EG(active_symbol_table), "http_response_header", sym);
- }
-
- php_stream_seek(curlstream->readbuffer.buf, curlstream->readbuffer.writepos, SEEK_SET);
- wrote = php_stream_write(curlstream->readbuffer.buf, data, size * nmemb);
- curlstream->readbuffer.writepos = php_stream_tell(curlstream->readbuffer.buf);
-
- return wrote;
-}
-
-/* cURL guarantees that headers are written as complete lines, with this function
- * called once for each header */
-static size_t on_header_available(char *data, size_t size, size_t nmemb, void *ctx)
-{
- size_t length = size * nmemb;
- zval *header;
- php_stream *stream = (php_stream *) ctx;
- php_curl_stream *curlstream = (php_curl_stream *) stream->abstract;
- TSRMLS_FETCH();
-
- MAKE_STD_ZVAL(header);
- Z_STRLEN_P(header) = length;
- Z_STRVAL_P(header) = estrndup(data, length);
- if (Z_STRVAL_P(header)[length-1] == '\n') {
- Z_STRVAL_P(header)[length-1] = '\0';
- Z_STRLEN_P(header)--;
-
- if (Z_STRVAL_P(header)[length-2] == '\r') {
- Z_STRVAL_P(header)[length-2] = '\0';
- Z_STRLEN_P(header)--;
- }
- }
- Z_TYPE_P(header) = IS_STRING;
- zend_hash_next_index_insert(Z_ARRVAL_P(curlstream->headers), &header, sizeof(zval *), NULL);
-
- /* based on the header, we might need to trigger a notification */
- if (!strncasecmp(data, "Location: ", 10)) {
- php_stream_notify_info(stream->context, PHP_STREAM_NOTIFY_REDIRECTED, data + 10, 0);
- } else if (!strncasecmp(data, "Content-Type: ", 14)) {
- php_stream_notify_info(stream->context, PHP_STREAM_NOTIFY_MIME_TYPE_IS, data + 14, 0);
- } else if (!strncasecmp(data, "Context-Length: ", 16)) {
- php_stream_notify_file_size(stream->context, atoi(data + 16), data, 0);
- php_stream_notify_progress_init(stream->context, 0, 0);
- }
-
- return length;
-
-}
-
-static int on_progress_avail(php_stream *stream, double dltotal, double dlnow, double ultotal, double ulnow)
-{
- TSRMLS_FETCH();
-
- /* our notification system only works in a single direction; we should detect which
- * direction is important and use the correct values in this call */
- php_stream_notify_progress(stream->context, dlnow, dltotal);
- return 0;
-}
-
-static size_t php_curl_stream_write(php_stream *stream, const char *buf, size_t count TSRMLS_DC)
-{
- php_curl_stream *curlstream = (php_curl_stream *) stream->abstract;
-
- if (curlstream->writebuffer.buf) {
- return php_stream_write(curlstream->writebuffer.buf, buf, count);
- }
-
- return 0;
-}
-
-static size_t php_curl_stream_read(php_stream *stream, char *buf, size_t count TSRMLS_DC)
-{
- php_curl_stream *curlstream = (php_curl_stream *) stream->abstract;
- size_t didread = 0;
-
- if (curlstream->readbuffer.readpos >= curlstream->readbuffer.writepos && curlstream->pending) {
- /* we need to read some more data */
- struct timeval tv;
-
- /* fire up the connection */
- if (curlstream->readbuffer.writepos == 0) {
- while (CURLM_CALL_MULTI_PERFORM == curl_multi_perform(curlstream->multi, &curlstream->pending));
- }
-
- do {
- /* get the descriptors from curl */
- curl_multi_fdset(curlstream->multi, &curlstream->readfds, &curlstream->writefds, &curlstream->excfds, &curlstream->maxfd);
-
- /* if we are in blocking mode, set a timeout */
- tv.tv_usec = 0;
- tv.tv_sec = 15; /* TODO: allow this to be configured from the script */
-
- /* wait for data */
- switch (select(curlstream->maxfd + 1, &curlstream->readfds, &curlstream->writefds, &curlstream->excfds, &tv)) {
- case -1:
- /* error */
- return 0;
- case 0:
- /* no data yet: timed-out */
- return 0;
- default:
- /* fetch the data */
- do {
- curlstream->mcode = curl_multi_perform(curlstream->multi, &curlstream->pending);
- } while (curlstream->mcode == CURLM_CALL_MULTI_PERFORM);
- }
- } while (curlstream->readbuffer.readpos >= curlstream->readbuffer.writepos && curlstream->pending > 0);
-
- }
-
- /* if there is data in the buffer, try and read it */
- if (curlstream->readbuffer.writepos > 0 && curlstream->readbuffer.readpos < curlstream->readbuffer.writepos) {
- php_stream_seek(curlstream->readbuffer.buf, curlstream->readbuffer.readpos, SEEK_SET);
- didread = php_stream_read(curlstream->readbuffer.buf, buf, count);
- curlstream->readbuffer.readpos = php_stream_tell(curlstream->readbuffer.buf);
- }
-
- if (didread == 0) {
- stream->eof = 1;
- }
-
- return didread;
-}
-
-static int php_curl_stream_close(php_stream *stream, int close_handle TSRMLS_DC)
-{
- php_curl_stream *curlstream = (php_curl_stream *) stream->abstract;
-
- /* TODO: respect the close_handle flag here, so that casting to a FILE* on
- * systems without fopencookie will work properly */
-
- curl_multi_remove_handle(curlstream->multi, curlstream->curl);
- curl_easy_cleanup(curlstream->curl);
- curl_multi_cleanup(curlstream->multi);
-
- /* we are not closing curlstream->readbuf here, because we export
- * it as a zval with the wrapperdata - the engine will garbage collect it */
-
- efree(curlstream->url);
- efree(curlstream);
-
- return 0;
-}
-
-static int php_curl_stream_flush(php_stream *stream TSRMLS_DC)
-{
-#ifdef ilia_0
- php_curl_stream *curlstream = (php_curl_stream *) stream->abstract;
-#endif
- return 0;
-}
-
-static int php_curl_stream_stat(php_stream *stream, php_stream_statbuf *ssb TSRMLS_DC)
-{
- /* TODO: fill in details based on Data: and Content-Length: headers, and/or data
- * from curl_easy_getinfo().
- * For now, return -1 to indicate that it doesn't make sense to stat this stream */
- return -1;
-}
-
-static int php_curl_stream_cast(php_stream *stream, int castas, void **ret TSRMLS_DC)
-{
- php_curl_stream *curlstream = (php_curl_stream *) stream->abstract;
- /* delegate to the readbuffer stream */
- return php_stream_cast(curlstream->readbuffer.buf, castas, ret, 0);
-}
-
-php_stream_ops php_curl_stream_ops = {
- php_curl_stream_write,
- php_curl_stream_read,
- php_curl_stream_close,
- php_curl_stream_flush,
- "cURL",
- NULL, /* seek */
- php_curl_stream_cast, /* cast */
- php_curl_stream_stat /* stat */
-};
-
-
-php_stream *php_curl_stream_opener(php_stream_wrapper *wrapper, char *filename, char *mode,
- int options, char **opened_path, php_stream_context *context STREAMS_DC TSRMLS_DC)
-{
- php_stream *stream;
- php_curl_stream *curlstream;
- zval *tmp;
-
- curlstream = emalloc(sizeof(php_curl_stream));
- memset(curlstream, 0, sizeof(php_curl_stream));
-
- stream = php_stream_alloc(&php_curl_stream_ops, curlstream, 0, mode);
- php_stream_context_set(stream, context);
-
- curlstream->curl = curl_easy_init();
- curlstream->multi = curl_multi_init();
- curlstream->pending = 1;
-
- /* if opening for an include statement, ensure that the local storage will
- * have a FILE* associated with it.
- * Otherwise, use the "smart" memory stream that will turn itself into a file
- * when it gets large */
-#if !HAVE_FOPENCOOKIE
- if (options & STREAM_WILL_CAST) {
- curlstream->readbuffer.buf = php_stream_fopen_tmpfile();
- } else
-#endif
- {
- curlstream->readbuffer.buf = php_stream_temp_new();
- }
-
- /* curl requires the URL to be valid throughout it's operation, so dup it */
- curlstream->url = estrdup(filename);
- curl_easy_setopt(curlstream->curl, CURLOPT_URL, curlstream->url);
-
- /* feed curl data into our read buffer */
- curl_easy_setopt(curlstream->curl, CURLOPT_WRITEFUNCTION, on_data_available);
- curl_easy_setopt(curlstream->curl, CURLOPT_FILE, stream);
-
- /* feed headers */
- curl_easy_setopt(curlstream->curl, CURLOPT_HEADERFUNCTION, on_header_available);
- curl_easy_setopt(curlstream->curl, CURLOPT_WRITEHEADER, stream);
-
- /* currently buggy (bug is in curl) */
- curl_easy_setopt(curlstream->curl, CURLOPT_FOLLOWLOCATION, 1);
-
- curl_easy_setopt(curlstream->curl, CURLOPT_ERRORBUFFER, curlstream->errstr);
- curl_easy_setopt(curlstream->curl, CURLOPT_VERBOSE, 0);
-
- /* enable progress notification */
- curl_easy_setopt(curlstream->curl, CURLOPT_PROGRESSFUNCTION, on_progress_avail);
- curl_easy_setopt(curlstream->curl, CURLOPT_PROGRESSDATA, stream);
- curl_easy_setopt(curlstream->curl, CURLOPT_NOPROGRESS, 0);
-
- curl_easy_setopt(curlstream->curl, CURLOPT_USERAGENT, FG(user_agent) ? FG(user_agent) : "PHP/" PHP_VERSION);
-
- /* TODO: read cookies and options from context */
-
- /* prepare for "pull" mode */
- curl_multi_add_handle(curlstream->multi, curlstream->curl);
-
- /* Prepare stuff for file_get_wrapper_data: the data is an array:
- *
- * data = array(
- * "headers" => array("Content-Type: text/html", "Xxx: Yyy"),
- * "readbuf" => resource (equivalent to curlstream->readbuffer)
- * );
- * */
- MAKE_STD_ZVAL(stream->wrapperdata);
- array_init(stream->wrapperdata);
-
- MAKE_STD_ZVAL(curlstream->headers);
- array_init(curlstream->headers);
-
- add_assoc_zval(stream->wrapperdata, "headers", curlstream->headers);
-
- MAKE_STD_ZVAL(tmp);
- php_stream_to_zval(curlstream->readbuffer.buf, tmp);
- add_assoc_zval(stream->wrapperdata, "readbuf", tmp);
-
-#if !HAVE_FOPENCOOKIE
- if (options & STREAM_WILL_CAST) {
- /* we will need to download the whole resource now,
- * since we cannot get the actual FD for the download,
- * so we won't be able to drive curl via stdio. */
-
-/* TODO: this needs finishing */
-
- curl_easy_perform(curlstream->curl);
- }
- else
-#endif
- {
- /* fire up the connection; we need to detect a connection error here,
- * otherwise the curlstream we return ends up doing nothing useful. */
- CURLMcode m;
-
- while (CURLM_CALL_MULTI_PERFORM == (m = curl_multi_perform(curlstream->multi, &curlstream->pending))) {
- ; /* spin */
- }
-
- if (m != CURLM_OK) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "There was an error mcode=%d", m);
- }
-
- }
-
- return stream;
-}
-
-static php_stream_wrapper_ops php_curl_wrapper_ops = {
- php_curl_stream_opener,
- NULL, /* stream_close: curl streams know how to clean themselves up */
- NULL, /* stream_stat: curl streams know how to stat themselves */
- NULL, /* stat url */
- NULL, /* opendir */
- NULL, /* label */
- NULL, /* unlink */
- NULL, /* rename */
- NULL, /* mkdir */
- NULL /* rmdir */
-};
-
-php_stream_wrapper php_curl_wrapper = {
- &php_curl_wrapper_ops,
- NULL,
- 1 /* is_url */
-};
-
-#endif
-
-/*
- * 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/dba/CREDITS b/ext/dba/CREDITS
deleted file mode 100644
index 370b3ea271..0000000000
--- a/ext/dba/CREDITS
+++ /dev/null
@@ -1,2 +0,0 @@
-DBA
-Sascha Schumann, Marcus Boerger \ No newline at end of file
diff --git a/ext/dba/README b/ext/dba/README
deleted file mode 100755
index 0c22830e54..0000000000
--- a/ext/dba/README
+++ /dev/null
@@ -1,54 +0,0 @@
-These functions build the foundation for accessing Berkeley DB style
-databases.
-
-This is a general abstraction layer for several file-based databases. As
-such, functionality is limited to a common subset of features supported
-by modern databases such as Sleepycat Software's DB2. (This is not to be
-confused with IBM's DB2 software, which is supported through the ODBC
-functions.)
-
-This extensions allows to work with the following databases:
-dbm DBM is the oldest (original) type of Berkeley DB style databases.
- You should avoid it, if possible. We do not support the
- compatibility functions built into DB2 and gdbm, because they are
- only compatible on the source code level, but cannot handle the
- original dbm format.
-ndbm NDBM is a newer type and more flexible than dbm. It still has
- most of the arbitrary limits of dbm (therefore it is deprecated).
-gdbm GDBM is the GNU database manager.
-db2 DB2 is Sleepycat Software's DB2. It's described as "a programmatic
- toolkit that provides high-performance built-in database support
- for both standalone and client/server applications.
-db3 DB3 is Sleepycat Software's DB3.
-db4 DB4 is Sleepycat Software's DB4. This is available since PHP 5.0.
-cdb CDB is "a fast, reliable, lightweight package for creating and
- reading constant databases." It is from the author of qmail and
- can be found at http://cr.yp.to/cdb.html. Since it is constant,
- we support only reading operations. And since PHP 4.3.0 we support
- writing (not updating) through the internal cdb library.
-cdb_make Since PHP 4.3.0 we support creation (not updating) of cdb files
- when the bundled cdb library is used.
-flatfile This is available since PHP 4.3.0 for compatibility with the
- deprecated dbm extension only and should be avoided. However you
- may use this where files were created in this format. That happens
- when configure could not find any external library.
-inifile This is available since PHP 4.3.3 to be able to modify php.ini
- files from within PHP scripts. When working with ini files you
- can pass arrays of the form array(0=>group,1=>value_name) or
- strings of the form "[group]value_name" where group is optional.
- As the functions dba_firstkey() and dba_nextkey() return string
- representations of the key there is a new function dba_key_split()
- available since PHP 5 which allows to convert the string keys into
- array keys without loosing FALSE.
-qdbm This is available since PHP 5.0.0. The qdbm library can be loaded
- from http://qdbm.sourceforge.net.
-
-
-After configuring and compiling PHP you must execute the following test
-from commandline:
- php run-tests.php ext/dba.
-This shows whether your combination of handlers works. Most problematic
-are dbm and ndbm which conflict with many installations. The reason for
-this is that on several systems these libraries are part of more than one
-other library. The configuration test only prevents you from configuring
-malfaunctioning single handlers but not combinations. \ No newline at end of file
diff --git a/ext/dba/config.m4 b/ext/dba/config.m4
deleted file mode 100644
index a0a248c7dd..0000000000
--- a/ext/dba/config.m4
+++ /dev/null
@@ -1,477 +0,0 @@
-dnl
-dnl $Id$
-dnl
-
-dnl Suppose we need FlatFile if no support or only CDB is used.
-
-AC_DEFUN(PHP_DBA_STD_BEGIN,[
- unset THIS_INCLUDE THIS_LIBS THIS_LFLAGS THIS_PREFIX THIS_RESULT
-])
-
-AC_DEFUN(PHP_TEMP_LDFLAGS,[
- old_LDFLAGS=$LDFLAGS
- LDFLAGS="$1 $LDFLAGS"
- $2
- LDFLAGS=$old_LDFLAGS
-])
-
-dnl Assign INCLUDE/LFLAGS from PREFIX
-AC_DEFUN(PHP_DBA_STD_ASSIGN,[
- if test -n "$THIS_PREFIX" && test "$THIS_PREFIX" != "/usr"; then
- THIS_LFLAGS=$THIS_PREFIX/lib
- fi
-])
-
-dnl Standard check
-AC_DEFUN(PHP_DBA_STD_CHECK,[
- THIS_RESULT="yes"
- if test -z "$THIS_INCLUDE"; then
- AC_MSG_ERROR([DBA: Could not find necessary header file(s).])
- fi
- if test -z "$THIS_LIBS"; then
- AC_MSG_ERROR([DBA: Could not find necessary library.])
- fi
-])
-
-dnl Attach THIS_x to DBA_x
-AC_DEFUN(PHP_DBA_STD_ATTACH,[
- PHP_ADD_LIBRARY_WITH_PATH($THIS_LIBS, $THIS_LFLAGS, DBA_SHARED_LIBADD)
- unset THIS_INCLUDE THIS_LIBS THIS_LFLAGS THIS_PREFIX
-])
-
-dnl Print the result message
-dnl parameters(name [, full name [, empty or error message]])
-AC_DEFUN(AC_DBA_STD_RESULT,[
- THIS_NAME=[]translit($1,a-z0-9-,A-Z0-9_)
- if test -n "$2"; then
- THIS_FULL_NAME="$2"
- else
- THIS_FULL_NAME="$THIS_NAME"
- fi
- AC_MSG_CHECKING(for $THIS_FULL_NAME support)
- if test -n "$3"; then
- AC_MSG_ERROR($3)
- fi
- if test "$THIS_RESULT" = "yes" -o "$THIS_RESULT" = "builtin"; then
- HAVE_DBA=1
- eval HAVE_$THIS_NAME=1
- AC_MSG_RESULT($THIS_RESULT)
- else
- AC_MSG_RESULT(no)
- fi
- unset THIS_RESULT THIS_NAME THIS_FULL_NAME
-])
-
-PHP_ARG_ENABLE(dba,whether to enable DBA,
-[ --enable-dba Build DBA with builtin modules])
-
-AC_ARG_WITH(qdbm,
-[ --with-qdbm[=DIR] DBA: Include QDBM support],[
- if test "$withval" != "no"; then
- PHP_DBA_STD_BEGIN
- for i in $withval /usr/local /usr; do
- if test -f "$i/include/depot.h"; then
- THIS_PREFIX=$i
- THIS_INCLUDE=$i/include/depot.h
- break
- fi
- done
-
- if test -n "$THIS_INCLUDE"; then
- for LIB in qdbm; do
- PHP_CHECK_LIBRARY($LIB, dpopen, [
- AC_DEFINE_UNQUOTED(QDBM_INCLUDE_FILE, "$THIS_INCLUDE", [ ])
- AC_DEFINE(DBA_QDBM, 1, [ ])
- THIS_LIBS=$LIB
- ], [], [-L$THIS_PREFIX/lib])
- if test -n "$THIS_LIBS"; then
- break
- fi
- done
- fi
-
- PHP_DBA_STD_ASSIGN
- PHP_DBA_STD_CHECK
- PHP_DBA_STD_ATTACH
- fi
-])
-AC_DBA_STD_RESULT(qdbm)
-
-AC_ARG_WITH(gdbm,
-[ --with-gdbm[=DIR] DBA: Include GDBM support],[
- if test "$withval" != "no"; then
- PHP_DBA_STD_BEGIN
- if test "$HAVE_QDBM" = "1"; then
- AC_DBA_STD_RESULT(gdbm,gdbm,You cannot combine --with-gdbm with --with-qdbm)
- fi
- for i in $withval /usr/local /usr; do
- if test -f "$i/include/gdbm.h"; then
- THIS_PREFIX=$i
- THIS_INCLUDE=$i/include/gdbm.h
- break
- fi
- done
-
- if test -n "$THIS_INCLUDE"; then
- unset ac_cv_lib_gdbm_gdbm_open
- PHP_CHECK_LIBRARY(gdbm, gdbm_open, [
- AC_DEFINE_UNQUOTED(GDBM_INCLUDE_FILE, "$THIS_INCLUDE", [ ])
- AC_DEFINE(DBA_GDBM, 1, [ ])
- THIS_LIBS=gdbm
- ], [], [-L$THIS_PREFIX/lib])
- fi
-
- PHP_DBA_STD_ASSIGN
- PHP_DBA_STD_CHECK
- PHP_DBA_STD_ATTACH
- fi
-])
-AC_DBA_STD_RESULT(gdbm)
-
-AC_ARG_WITH(ndbm,
-[ --with-ndbm[=DIR] DBA: Include NDBM support],[
- if test "$withval" != "no"; then
- PHP_DBA_STD_BEGIN
- for i in $withval /usr/local /usr; do
- if test -f "$i/include/ndbm.h"; then
- THIS_PREFIX=$i
- THIS_INCLUDE=$i/include/ndbm.h
- break
- elif test -f "$i/include/db1/ndbm.h"; then
- THIS_PREFIX=$i
- THIS_INCLUDE=$i/include/db1/ndbm.h
- break
- fi
- done
-
- if test -n "$THIS_INCLUDE"; then
- for LIB in ndbm db1 c; do
- PHP_CHECK_LIBRARY($LIB, dbm_open, [
- AC_DEFINE_UNQUOTED(NDBM_INCLUDE_FILE, "$THIS_INCLUDE", [ ])
- AC_DEFINE(DBA_NDBM, 1, [ ])
- THIS_LIBS=$LIB
- ], [], [-L$THIS_PREFIX/lib])
- if test -n "$THIS_LIBS"; then
- break
- fi
- done
- fi
-
- PHP_DBA_STD_ASSIGN
- PHP_DBA_STD_CHECK
- PHP_DBA_STD_ATTACH
- fi
-])
-AC_DBA_STD_RESULT(ndbm)
-
-dnl Berkeley specific (library and version test)
-dnl parameters(version, library list, function)
-AC_DEFUN(PHP_DBA_DB_CHECK,[
- for LIB in $2; do
- if test -f $THIS_PREFIX/lib/lib$LIB.a -o -f $THIS_PREFIX/lib/lib$LIB.$SHLIB_SUFFIX_NAME; then
- PHP_TEMP_LDFLAGS(-L$THIS_PREFIX/lib -l$LIB,[
- AC_TRY_LINK([
-#include "$THIS_INCLUDE"
- ],[
- $3;
- ],[
- AC_EGREP_CPP(yes,[
-#include "$THIS_INCLUDE"
-#if DB_VERSION_MAJOR == $1
- yes
-#endif
- ],[
- THIS_LIBS=$LIB
- break
- ])
- ])
- ])
- fi
- done
- if test -z "$THIS_LIBS"; then
- AC_MSG_CHECKING(for db$1 major version)
- AC_MSG_ERROR(Header contains different version)
- fi
- if test "$1" = "4"; then
- AC_MSG_CHECKING(for db4 minor version and patch level)
- AC_EGREP_CPP(yes,[
-#include "$THIS_INCLUDE"
-#if DB_VERSION_MINOR != 1 || DB_VERSION_PATCH >= 25
- yes
-#endif
- ],[
- AC_MSG_RESULT(ok)
- ],[
- AC_MSG_ERROR(Version 4.1 requires patch level 25)
- ])
- fi
- if test "$ext_shared" = "yes"; then
- AC_MSG_CHECKING(if dba can be used as shared extension)
- AC_EGREP_CPP(yes,[
-#include "$THIS_INCLUDE"
-#if DB_VERSION_MAJOR > 3 || (DB_VERSION_MAJOR == 3 && DB_VERSION_MINOR > 2)
- yes
-#endif
- ],[
- AC_MSG_RESULT(yes)
- ],[
- AC_MSG_ERROR(At least version 3.3 is required)
- ])
- fi
- if test -n "$THIS_LIBS"; then
- AC_DEFINE(DBA_DB$1, 1, [ ])
- if test -n "$THIS_INCLUDE"; then
- AC_DEFINE_UNQUOTED(DB$1_INCLUDE_FILE, "$THIS_INCLUDE", [ ])
- fi
- fi
- PHP_DBA_STD_ASSIGN
- PHP_DBA_STD_CHECK
- PHP_DBA_STD_ATTACH
-])
-
-AC_ARG_WITH(db4,
-[ --with-db4[=DIR] DBA: Include Berkeley DB4 support],[
- if test "$withval" != "no"; then
- PHP_DBA_STD_BEGIN
- for i in $withval /usr/local/BerkeleyDB.4.2 /usr/local/BerkeleyDB.4.1 /usr/local/BerkeleyDB.4.0 /usr/local /usr; do
- if test -f "$i/db4/db.h"; then
- THIS_PREFIX=$i
- THIS_INCLUDE=$i/db4/db.h
- break
- elif test -f "$i/include/db4/db.h"; then
- THIS_PREFIX=$i
- THIS_INCLUDE=$i/include/db4/db.h
- break
- elif test -f "$i/include/db/db4.h"; then
- THIS_PREFIX=$i
- THIS_INCLUDE=$i/include/db/db4.h
- break
- elif test -f "$i/include/db4.h"; then
- THIS_PREFIX=$i
- THIS_INCLUDE=$i/include/db4.h
- break
- elif test -f "$i/include/db.h"; then
- THIS_PREFIX=$i
- THIS_INCLUDE=$i/include/db.h
- break
- fi
- done
- PHP_DBA_DB_CHECK(4, db-4.2 db-4.1 db-4.0 db-4 db4 db, [(void)db_create((DB**)0, (DB_ENV*)0, 0)])
- fi
-])
-AC_DBA_STD_RESULT(db4,Berkeley DB4)
-
-AC_ARG_WITH(db3,
-[ --with-db3[=DIR] DBA: Include Berkeley DB3 support],[
- if test "$withval" != "no"; then
- PHP_DBA_STD_BEGIN
- if test "$HAVE_DB4" = "1"; then
- AC_DBA_STD_RESULT(db3,Berkeley DB3,You cannot combine --with-db3 with --with-db4)
- fi
- for i in $withval /usr/local/BerkeleyDB.3.3 /usr/local/BerkeleyDB.3.2 /usr/local/BerkeleyDB.3.1 /usr/local/BerkeleyDB.3.0 /usr/local /usr; do
- if test -f "$i/db3/db.h"; then
- THIS_PREFIX=$i
- THIS_INCLUDE=$i/include/db3/db.h
- break
- elif test -f "$i/include/db3/db.h"; then
- THIS_PREFIX=$i
- THIS_INCLUDE=$i/include/db3/db.h
- break
- elif test -f "$i/include/db/db3.h"; then
- THIS_PREFIX=$i
- THIS_INCLUDE=$i/include/db/db3.h
- break
- elif test -f "$i/include/db3.h"; then
- THIS_PREFIX=$i
- THIS_INCLUDE=$i/include/db3.h
- break
- elif test -f "$i/include/db.h"; then
- THIS_PREFIX=$i
- THIS_INCLUDE=$i/include/db.h
- break
- fi
- done
- PHP_DBA_DB_CHECK(3, db-3.3 db-3.2 db-3.1 db-3.0 db-3 db3 db, [(void)db_create((DB**)0, (DB_ENV*)0, 0)])
- fi
-])
-AC_DBA_STD_RESULT(db3,Berkeley DB3)
-
-AC_ARG_WITH(db2,
-[ --with-db2[=DIR] DBA: Include Berkeley DB2 support],[
- if test "$withval" != "no"; then
- PHP_DBA_STD_BEGIN
- if test "$HAVE_DB3" = "1" -o "$HAVE_DB4" = "1"; then
- AC_DBA_STD_RESULT(db2,Berkeley DB2,You cannot combine --with-db2 with --with-db3 or --with-db4)
- fi
- for i in $withval $withval/BerkeleyDB /usr/BerkeleyDB /usr/local /usr; do
- if test -f "$i/db2/db.h"; then
- THIS_PREFIX=$i
- THIS_INCLUDE=$i/db2/db.h
- break
- elif test -f "$i/include/db2/db.h"; then
- THIS_PREFIX=$i
- THIS_INCLUDE=$i/include/db2/db.h
- break
- elif test -f "$i/include/db/db2.h"; then
- THIS_PREFIX=$i
- THIS_INCLUDE=$i/include/db/db2.h
- break
- elif test -f "$i/include/db2.h"; then
- THIS_PREFIX=$i
- THIS_INCLUDE=$i/include/db2.h
- break
- elif test -f "$i/include/db.h"; then
- THIS_PREFIX=$i
- THIS_INCLUDE=$i/include/db.h
- break
- fi
- done
- PHP_DBA_DB_CHECK(2, db-2 db2 db, [(void)db_appinit("", NULL, (DB_ENV*)0, 0)])
- fi
-])
-AC_DBA_STD_RESULT(db2,Berkeley DB2)
-
-AC_ARG_WITH(dbm,
-[ --with-dbm[=DIR] DBA: Include DBM support],[
- if test "$withval" != "no"; then
- PHP_DBA_STD_BEGIN
- if test "$HAVE_QDBM" = "1"; then
- AC_DBA_STD_RESULT(dbm,dbm,You cannot combine --with-dbm with --with-qdbm)
- fi
- for i in $withval /usr/local /usr; do
- if test -f "$i/include/dbm.h"; then
- THIS_PREFIX=$i
- THIS_INCLUDE=$i/include/dbm.h
- break
- elif test -f "$i/include/gdbm/dbm.h"; then
- THIS_PREFIX=$i
- THIS_INCLUDE=$i/include/gdbm/dbm.h
- break
- fi
- done
-
- if test -n "$THIS_INCLUDE"; then
- for LIB in dbm c gdbm; do
- PHP_CHECK_LIBRARY($LIB, dbminit, [
- AC_MSG_CHECKING(for DBM using GDBM)
- AC_DEFINE_UNQUOTED(DBM_INCLUDE_FILE, "$THIS_INCLUDE", [ ])
- if test "$LIB" = "gdbm"; then
- AC_DEFINE_UNQUOTED(DBM_VERSION, "GDBM", [ ])
- AC_MSG_RESULT(yes)
- else
- AC_DEFINE_UNQUOTED(DBM_VERSION, "DBM", [ ])
- AC_MSG_RESULT(no)
- fi
- AC_DEFINE(DBA_DBM, 1, [ ])
- THIS_LIBS=$LIB
- ], [], [-L$THIS_PREFIX/lib])
- if test -n "$THIS_LIBS"; then
- break
- fi
- done
- fi
-
- PHP_DBA_STD_ASSIGN
- PHP_DBA_STD_CHECK
- PHP_DBA_STD_ATTACH
- fi
-])
-AC_DBA_STD_RESULT(dbm)
-
-AC_DEFUN(PHP_DBA_BUILTIN_CDB,[
- AC_DEFINE(DBA_CDB_BUILTIN, 1, [ ])
- AC_DEFINE(DBA_CDB_MAKE, 1, [ ])
- AC_DEFINE(DBA_CDB, 1, [ ])
- cdb_sources="libcdb/cdb.c libcdb/cdb_make.c libcdb/uint32.c"
- THIS_RESULT="builtin"
-])
-
-AC_ARG_WITH(cdb,
-[ --with-cdb[=DIR] DBA: Include CDB support],[
- if test "$withval" = "yes" -o "$HAVE_DBA" = "1"; then
- PHP_DBA_BUILTIN_CDB
- elif test "$withval" != "no"; then
- PHP_DBA_STD_BEGIN
- for i in $withval /usr/local /usr; do
- if test -f "$i/include/cdb.h"; then
- THIS_PREFIX=$i
- THIS_INCLUDE=$i/include/cdb.h
- break
- fi
- done
-
- if test -n "$THIS_INCLUDE"; then
- for LIB in cdb c; do
- PHP_CHECK_LIBRARY($LIB, cdb_read, [
- AC_DEFINE_UNQUOTED(CDB_INCLUDE_FILE, "$THIS_INCLUDE", [ ])
- AC_DEFINE(DBA_CDB, 1, [ ])
- THIS_LIBS=$LIB
- ], [], [-L$THIS_PREFIX/lib])
- if test -n "$THIS_LIBS"; then
- break
- fi
- done
- fi
-
- PHP_DBA_STD_ASSIGN
- PHP_DBA_STD_CHECK
- PHP_DBA_STD_ATTACH
- fi
-],[
- if test "$PHP_DBA" != "no" -o "$HAVE_DBA" = "1"; then
- PHP_DBA_BUILTIN_CDB
- fi
-])
-AC_DBA_STD_RESULT(cdb)
-
-AC_DEFUN(PHP_DBA_BUILTIN_INI,[
- AC_DEFINE(DBA_INIFILE, 1, [ ])
- ini_sources="libinifile/inifile.c"
- THIS_RESULT="builtin"
-])
-
-AC_ARG_WITH(inifile,
-[ --with-inifile DBA: Include INI support],[
- if test "$withval" != "no"; then
- PHP_DBA_BUILTIN_INI
- fi
-],[
- if test "$PHP_DBA" != "no" -o "$HAVE_DBA" = "1"; then
- PHP_DBA_BUILTIN_INI
- fi
-])
-AC_DBA_STD_RESULT(inifile,INI File)
-
-AC_DEFUN(PHP_DBA_BUILTIN_FLATFILE,[
- AC_DEFINE(DBA_FLATFILE, 1, [ ])
- flat_sources="libflatfile/flatfile.c"
- THIS_RESULT="builtin"
-])
-
-dnl
-dnl FlatFile check must be the last one.
-dnl
-AC_ARG_WITH(flatfile,
-[ --with-flatfile DBA: Include FlatFile support],[
- if test "$withval" != "no"; then
- PHP_DBA_BUILTIN_FLATFILE
- fi
-],[
- if test "$PHP_DBA" != "no" -o "$HAVE_DBA" = "1"; then
- PHP_DBA_BUILTIN_FLATFILE
- fi
-])
-AC_DBA_STD_RESULT(FlatFile,FlatFile)
-
-AC_MSG_CHECKING(whether to enable DBA interface)
-if test "$HAVE_DBA" = "1"; then
- AC_MSG_RESULT(yes)
- AC_DEFINE(HAVE_DBA, 1, [ ])
- PHP_NEW_EXTENSION(dba, dba.c dba_cdb.c dba_db2.c dba_dbm.c dba_gdbm.c dba_ndbm.c dba_db3.c dba_db4.c dba_flatfile.c dba_inifile.c dba_qdbm.c $cdb_sources $flat_sources $ini_sources, $ext_shared)
- PHP_ADD_BUILD_DIR($ext_builddir/libinifile)
- PHP_ADD_BUILD_DIR($ext_builddir/libcdb)
- PHP_ADD_BUILD_DIR($ext_builddir/libflatfile)
- PHP_SUBST(DBA_SHARED_LIBADD)
-else
- AC_MSG_RESULT(no)
-fi
diff --git a/ext/dba/config.w32 b/ext/dba/config.w32
deleted file mode 100644
index 7ed74955ec..0000000000
--- a/ext/dba/config.w32
+++ /dev/null
@@ -1,18 +0,0 @@
-// $Id$
-// vim:ft=javascript
-
-ARG_WITH("dba", "DBA support", "no");
-
-if (PHP_DBA != "no") {
- if (CHECK_LIB("libdb31s.lib", "dba", PHP_DBA) &&
- CHECK_HEADER_ADD_INCLUDE("db.h", "CFLAGS_DBA")) {
- EXTENSION("dba", "dba.c dba_cdb.c dba_db2.c dba_db3.c dba_dbm.c dba_flatfile.c dba_gdbm.c dba_ndbm.c dba_inifile.c");
- ADD_SOURCES("ext/dba/libcdb", "cdb.c cdb_make.c uint32.c", "dba");
- ADD_SOURCES("ext/dba/libflatfile", "flatfile.c", "dba");
- ADD_SOURCES("ext/dba/libinifile", "inifile.c", "dba");
- AC_DEFINE('HAVE_DBA', 1, 'DBA support');
- ADD_FLAG("CFLAGS_DBA", "/D DBA_DB3=1 /D DB3_INCLUDE_FILE=\"\\\"db.h\\\"\" /D DBA_FLATFILE=1 /D DBA_CDB=1 /D DBA_CDB_MAKE=1 /D DBA_CDB_BUILTIN=1 /D DBA_INIFILE=1");
- } else {
- WARNING("dba not enabled; libraries and headers not found");
- }
-}
diff --git a/ext/dba/dba.c b/ext/dba/dba.c
deleted file mode 100644
index d5a8c6e1fc..0000000000
--- a/ext/dba/dba.c
+++ /dev/null
@@ -1,1130 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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. |
- +----------------------------------------------------------------------+
- | Authors: Sascha Schumann <sascha@schumann.cx> |
- | Marcus Boerger <helly@php.net> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "php.h"
-
-#if HAVE_DBA
-
-#include "php_ini.h"
-#include <stdio.h>
-#include <fcntl.h>
-#ifdef HAVE_SYS_FILE_H
-#include <sys/file.h>
-#endif
-
-#include "php_dba.h"
-#include "ext/standard/info.h"
-#include "ext/standard/php_string.h"
-#include "ext/standard/flock_compat.h"
-
-#include "php_gdbm.h"
-#include "php_ndbm.h"
-#include "php_dbm.h"
-#include "php_cdb.h"
-#include "php_db2.h"
-#include "php_db3.h"
-#include "php_db4.h"
-#include "php_flatfile.h"
-#include "php_inifile.h"
-#include "php_qdbm.h"
-
-/* {{{ dba_functions[]
- */
-function_entry dba_functions[] = {
- PHP_FE(dba_open, NULL)
- PHP_FE(dba_popen, NULL)
- PHP_FE(dba_close, NULL)
- PHP_FE(dba_delete, NULL)
- PHP_FE(dba_exists, NULL)
- PHP_FE(dba_fetch, NULL)
- PHP_FE(dba_insert, NULL)
- PHP_FE(dba_replace, NULL)
- PHP_FE(dba_firstkey, NULL)
- PHP_FE(dba_nextkey, NULL)
- PHP_FE(dba_optimize, NULL)
- PHP_FE(dba_sync, NULL)
- PHP_FE(dba_handlers, NULL)
- PHP_FE(dba_list, NULL)
- PHP_FE(dba_key_split, NULL)
- {NULL, NULL, NULL}
-};
-/* }}} */
-
-PHP_MINIT_FUNCTION(dba);
-PHP_MSHUTDOWN_FUNCTION(dba);
-PHP_MINFO_FUNCTION(dba);
-
-zend_module_entry dba_module_entry = {
- STANDARD_MODULE_HEADER,
- "dba",
- dba_functions,
- PHP_MINIT(dba),
- PHP_MSHUTDOWN(dba),
- NULL,
- NULL,
- PHP_MINFO(dba),
- NO_VERSION_YET,
- STANDARD_MODULE_PROPERTIES
-};
-
-#ifdef COMPILE_DL_DBA
-ZEND_GET_MODULE(dba)
-#endif
-
-/* {{{ macromania */
-
-#define DBA_ID_PARS \
- zval **id; \
- dba_info *info = NULL; \
- int ac = ZEND_NUM_ARGS()
-
-/* these are used to get the standard arguments */
-
-#define DBA_GET1 \
- if(ac != 1 || zend_get_parameters_ex(ac, &id) != SUCCESS) { \
- WRONG_PARAM_COUNT; \
- }
-
-/* {{{ php_dba_myke_key */
-static size_t php_dba_make_key(zval **key, char **key_str, char **key_free TSRMLS_DC)
-{
- if (Z_TYPE_PP(key) == IS_ARRAY) {
- zval **group, **name;
- HashPosition pos;
- size_t len;
-
- if (zend_hash_num_elements(Z_ARRVAL_PP(key)) != 2) {
- php_error_docref(NULL TSRMLS_CC, E_ERROR, "Key does not have exactly two elements: (key, name)");
- return -1;
- }
- zend_hash_internal_pointer_reset_ex(Z_ARRVAL_PP(key), &pos);
- zend_hash_get_current_data_ex(Z_ARRVAL_PP(key), (void **) &group, &pos);
- zend_hash_move_forward_ex(Z_ARRVAL_PP(key), &pos);
- zend_hash_get_current_data_ex(Z_ARRVAL_PP(key), (void **) &name, &pos);
- convert_to_string_ex(group);
- convert_to_string_ex(name);
- if (Z_STRLEN_PP(group) == 0) {
- *key_str = Z_STRVAL_PP(name);
- *key_free = NULL;
- return Z_STRLEN_PP(name);
- }
- len = spprintf(key_str, 0, "[%s]%s", Z_STRVAL_PP(group), Z_STRVAL_PP(name));
- *key_free = *key_str;
- return len;
- } else {
- convert_to_string_ex(key);
- *key_str = Z_STRVAL_PP(key);
- *key_free = NULL;
- return Z_STRLEN_PP(key);
- }
-}
-/* }}} */
-
-#define DBA_GET2 \
- zval **key; \
- char *key_str, *key_free; \
- size_t key_len; \
- if(ac != 2 || zend_get_parameters_ex(ac, &key, &id) != SUCCESS) { \
- WRONG_PARAM_COUNT; \
- } \
- if ((key_len = php_dba_make_key(key, &key_str, &key_free TSRMLS_CC)) == 0) {\
- RETURN_FALSE; \
- }
-
-#define DBA_GET2_3 \
- zval **key; \
- char *key_str, *key_free; \
- size_t key_len; \
- zval **tmp; \
- int skip = 0; \
- switch(ac) { \
- case 2: \
- if (zend_get_parameters_ex(ac, &key, &id) != SUCCESS) { \
- WRONG_PARAM_COUNT; \
- } \
- break; \
- case 3: \
- if (zend_get_parameters_ex(ac, &key, &tmp, &id) != SUCCESS) { \
- WRONG_PARAM_COUNT; \
- } \
- convert_to_long_ex(tmp); \
- skip = Z_LVAL_PP(tmp); \
- break; \
- default: \
- WRONG_PARAM_COUNT; \
- } \
- if ((key_len = php_dba_make_key(key, &key_str, &key_free TSRMLS_CC)) == 0) {\
- RETURN_FALSE; \
- }
-
-#define DBA_GET3 \
- zval **key, **val; \
- char *key_str, *key_free; \
- size_t key_len; \
- if(ac != 3 || zend_get_parameters_ex(ac, &key, &val, &id) != SUCCESS) { \
- WRONG_PARAM_COUNT; \
- } \
- convert_to_string_ex(val); \
- if ((key_len = php_dba_make_key(key, &key_str, &key_free TSRMLS_CC)) == 0) {\
- RETURN_FALSE; \
- }
-
-#define DBA_ID_GET \
- ZEND_FETCH_RESOURCE2(info, dba_info *, id, -1, "DBA identifier", le_db, le_pdb);
-
-#define DBA_ID_GET1 DBA_ID_PARS; DBA_GET1; DBA_ID_GET
-#define DBA_ID_GET2 DBA_ID_PARS; DBA_GET2; DBA_ID_GET
-#define DBA_ID_GET2_3 DBA_ID_PARS; DBA_GET2_3; DBA_ID_GET
-#define DBA_ID_GET3 DBA_ID_PARS; DBA_GET3; DBA_ID_GET
-
-#define DBA_ID_DONE \
- if (key_free) efree(key_free)
-/* a DBA handler must have specific routines */
-
-#define DBA_NAMED_HND(alias, name, flags) \
-{\
- #alias, flags, dba_open_##name, dba_close_##name, dba_fetch_##name, dba_update_##name, \
- dba_exists_##name, dba_delete_##name, dba_firstkey_##name, dba_nextkey_##name, \
- dba_optimize_##name, dba_sync_##name, dba_info_##name \
-},
-
-#define DBA_HND(name, flags) DBA_NAMED_HND(name, name, flags)
-
-/* check whether the user has write access */
-#define DBA_WRITE_CHECK \
- if(info->mode != DBA_WRITER && info->mode != DBA_TRUNC && info->mode != DBA_CREAT) { \
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "You cannot perform a modification to a database without proper access"); \
- RETURN_FALSE; \
- }
-
-/* }}} */
-
-/* {{{ globals */
-
-static dba_handler handler[] = {
-#if DBA_GDBM
- DBA_HND(gdbm, DBA_LOCK_EXT) /* Locking done in library if set */
-#endif
-#if DBA_DBM
- DBA_HND(dbm, DBA_LOCK_ALL) /* No lock in lib */
-#endif
-#if DBA_NDBM
- DBA_HND(ndbm, DBA_LOCK_ALL) /* Could be done in library: filemode = 0644 + S_ENFMT */
-#endif
-#if DBA_CDB
- DBA_HND(cdb, DBA_STREAM_OPEN|DBA_LOCK_ALL) /* No lock in lib */
-#endif
-#if DBA_CDB_BUILTIN
- DBA_NAMED_HND(cdb_make, cdb, DBA_STREAM_OPEN|DBA_LOCK_ALL) /* No lock in lib */
-#endif
-#if DBA_DB2
- DBA_HND(db2, DBA_LOCK_ALL) /* No lock in lib */
-#endif
-#if DBA_DB3
- DBA_HND(db3, DBA_LOCK_ALL) /* No lock in lib */
-#endif
-#if DBA_DB4
- 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 */
-#endif
-#if DBA_FLATFILE
- DBA_HND(flatfile, DBA_STREAM_OPEN|DBA_LOCK_ALL|DBA_NO_APPEND) /* No lock in lib */
-#endif
-#if DBA_QDBM
- DBA_HND(qdbm, DBA_LOCK_EXT)
-#endif
- { NULL, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL }
-};
-
-#if DBA_FLATFILE
-#define DBA_DEFAULT "flatfile"
-#elif DBA_DB4
-#define DBA_DEFAULT "db4"
-#elif DBA_DB3
-#define DBA_DEFAULT "db3"
-#elif DBA_DB2
-#define DBA_DEFAULT "db2"
-#elif DBA_GDBM
-#define DBA_DEFAULT "gdbm"
-#elif DBA_NBBM
-#define DBA_DEFAULT "ndbm"
-#elif DBA_DBM
-#define DBA_DEFAULT "dbm"
-#elif DBA_QDBM
-#define DBA_DEFAULT "qdbm"
-#else
-#define DBA_DEFAULT ""
-#endif
-/* cdb/cdb_make and ini are no option here */
-
-ZEND_BEGIN_MODULE_GLOBALS(dba)
- char *default_handler;
- dba_handler *default_hptr;
-ZEND_END_MODULE_GLOBALS(dba)
-
-ZEND_DECLARE_MODULE_GLOBALS(dba)
-
-#ifdef ZTS
-#define DBA_G(v) TSRMG(dba_globals_id, zend_dba_globals *, v)
-#else
-#define DBA_G(v) (dba_globals.v)
-#endif
-
-static int le_db;
-static int le_pdb;
-
-/* {{{ dba_fetch_resource
-PHPAPI void dba_fetch_resource(dba_info **pinfo, zval **id TSRMLS_DC)
-{
- dba_info *info;
- DBA_ID_FETCH
- *pinfo = info;
-}
-*/
-/* }}} */
-
-/* {{{ dba_get_handler
-PHPAPI dba_handler *dba_get_handler(const char* handler_name)
-{
- dba_handler *hptr;
- for (hptr = handler; hptr->name && strcasecmp(hptr->name, handler_name); hptr++);
- return hptr;
-}
-*/
-/* }}} */
-
-/* {{{ dba_close
- */
-static void dba_close(dba_info *info TSRMLS_DC)
-{
- if (info->hnd) {
- info->hnd->close(info TSRMLS_CC);
- }
- if (info->path) {
- pefree(info->path, info->flags&DBA_PERSISTENT);
- }
- if (info->fp && info->fp!=info->lock.fp) {
- if(info->flags&DBA_PERSISTENT) {
- php_stream_pclose(info->fp);
- } else {
- php_stream_close(info->fp);
- }
- }
- if (info->lock.fp) {
- if(info->flags&DBA_PERSISTENT) {
- php_stream_pclose(info->lock.fp);
- } else {
- php_stream_close(info->lock.fp);
- }
- }
- if (info->lock.name) {
- pefree(info->lock.name, info->flags&DBA_PERSISTENT);
- }
- pefree(info, info->flags&DBA_PERSISTENT);
-}
-/* }}} */
-
-/* {{{ dba_close_rsrc
- */
-static void dba_close_rsrc(zend_rsrc_list_entry *rsrc TSRMLS_DC)
-{
- dba_info *info = (dba_info *)rsrc->ptr;
-
- dba_close(info TSRMLS_CC);
-}
-/* }}} */
-
-/* {{{ dba_close_pe_rsrc_deleter */
-int dba_close_pe_rsrc_deleter(list_entry *le, void *pDba TSRMLS_DC)
-{
- return le->ptr == pDba;
-}
-/* }}} */
-
-/* {{{ dba_close_pe_rsrc */
-static void dba_close_pe_rsrc(zend_rsrc_list_entry *rsrc TSRMLS_DC)
-{
- dba_info *info = (dba_info *)rsrc->ptr;
-
- /* closes the resource by calling dba_close_rsrc() */
- zend_hash_apply_with_argument(&EG(persistent_list), (apply_func_arg_t) dba_close_pe_rsrc_deleter, info TSRMLS_CC);
-}
-/* }}} */
-
-/* {{{ PHP_INI
- */
-ZEND_INI_MH(OnUpdateDefaultHandler)
-{
- dba_handler *hptr;
-
- if (!strlen(new_value)) {
- DBA_G(default_hptr) = NULL;
- return OnUpdateString(entry, new_value, new_value_length, mh_arg1, mh_arg2, mh_arg3, stage TSRMLS_CC);
- }
-
- for (hptr = handler; hptr->name && strcasecmp(hptr->name, new_value); hptr++);
-
- if (!hptr->name) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "No such handler: %s", new_value);
- return FAILURE;
- }
- DBA_G(default_hptr) = hptr;
- return OnUpdateString(entry, new_value, new_value_length, mh_arg1, mh_arg2, mh_arg3, stage TSRMLS_CC);
-}
-
-PHP_INI_BEGIN()
- STD_PHP_INI_ENTRY("dba.default_handler", DBA_DEFAULT, PHP_INI_ALL, OnUpdateDefaultHandler, default_handler, zend_dba_globals, dba_globals)
-PHP_INI_END()
-/* }}} */
-
-/* {{{ php_dba_init_globals
- */
-static void php_dba_init_globals(zend_dba_globals *dba_globals)
-{
- dba_globals->default_handler = "";
- dba_globals->default_hptr = NULL;
-}
-/* }}} */
-
-/* {{{ PHP_MINIT_FUNCTION
- */
-PHP_MINIT_FUNCTION(dba)
-{
- ZEND_INIT_MODULE_GLOBALS(dba, php_dba_init_globals, NULL);
- REGISTER_INI_ENTRIES();
- le_db = zend_register_list_destructors_ex(dba_close_rsrc, NULL, "dba", module_number);
- le_pdb = zend_register_list_destructors_ex(dba_close_pe_rsrc, dba_close_rsrc, "dba persistent", module_number);
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ PHP_MSHUTDOWN_FUNCTION
- */
-PHP_MSHUTDOWN_FUNCTION(dba)
-{
- UNREGISTER_INI_ENTRIES();
- return SUCCESS;
-}
-/* }}} */
-
-#include "ext/standard/php_smart_str.h"
-
-/* {{{ PHP_MINFO_FUNCTION
- */
-PHP_MINFO_FUNCTION(dba)
-{
- dba_handler *hptr;
- smart_str handlers = {0};
-
- for(hptr = handler; hptr->name; hptr++) {
- smart_str_appends(&handlers, hptr->name);
- smart_str_appendc(&handlers, ' ');
- }
-
- php_info_print_table_start();
- php_info_print_table_row(2, "DBA support", "enabled");
- if (handlers.c) {
- smart_str_0(&handlers);
- php_info_print_table_row(2, "Supported handlers", handlers.c);
- smart_str_free(&handlers);
- } else {
- php_info_print_table_row(2, "Supported handlers", "none");
- }
- php_info_print_table_end();
-}
-/* }}} */
-
-/* {{{ php_dba_update
- */
-static void php_dba_update(INTERNAL_FUNCTION_PARAMETERS, int mode)
-{
- char *v;
- int len;
- DBA_ID_GET3;
-
- DBA_WRITE_CHECK;
-
- if (PG(magic_quotes_runtime)) {
- len = Z_STRLEN_PP(val);
- v = estrndup(Z_STRVAL_PP(val), len);
- php_stripslashes(v, &len TSRMLS_CC);
- if(info->hnd->update(info, key_str, key_len, v, len, mode TSRMLS_CC) == SUCCESS) {
- efree(v);
- DBA_ID_DONE;
- RETURN_TRUE;
- }
- efree(v);
- } else {
- if(info->hnd->update(info, key_str, key_len, VALLEN(val), mode TSRMLS_CC) == SUCCESS)
- {
- DBA_ID_DONE;
- RETURN_TRUE;
- }
- }
- DBA_ID_DONE;
- RETURN_FALSE;
-}
-/* }}} */
-
-#define FREENOW if(args) efree(args); if(key) efree(key)
-
-/* {{{ php_find_dbm
- */
-dba_info *php_dba_find(const char* path TSRMLS_DC)
-{
- list_entry *le;
- dba_info *info;
- int numitems, i;
-
- numitems = zend_hash_next_free_element(&EG(regular_list));
- for (i=1; i<numitems; i++) {
- if (zend_hash_index_find(&EG(regular_list), i, (void **) &le)==FAILURE) {
- continue;
- }
- if (Z_TYPE_P(le) == le_db || Z_TYPE_P(le) == le_pdb) {
- info = (dba_info *)(le->ptr);
- if (!strcmp(info->path, path)) {
- return (dba_info *)(le->ptr);
- }
- }
- }
-
- return NULL;
-}
-/* }}} */
-
-/* {{{ php_dba_open
- */
-static void php_dba_open(INTERNAL_FUNCTION_PARAMETERS, int persistent)
-{
- zval ***args = (zval ***) NULL;
- int ac = ZEND_NUM_ARGS();
- dba_mode_t modenr;
- dba_info *info, *other;
- dba_handler *hptr;
- char *key = NULL, *error = NULL;
- int keylen = 0;
- int i;
- int lock_mode, lock_flag, lock_dbf = 0;
- char *file_mode;
- char mode[4], *pmode, *lock_file_mode = NULL;
- int persistent_flag = persistent ? STREAM_OPEN_PERSISTENT : 0;
- char *opened_path, *lock_name;
-
- if(ac < 2) {
- WRONG_PARAM_COUNT;
- }
-
- /* we pass additional args to the respective handler */
- args = safe_emalloc(ac, sizeof(zval *), 0);
- if (zend_get_parameters_array_ex(ac, args) != SUCCESS) {
- FREENOW;
- WRONG_PARAM_COUNT;
- }
-
- /* we only take string arguments */
- for (i = 0; i < ac; i++) {
- convert_to_string_ex(args[i]);
- keylen += Z_STRLEN_PP(args[i]);
- }
-
- if (persistent) {
- list_entry *le;
-
- /* calculate hash */
- key = safe_emalloc(keylen, 1, 1);
- key[keylen] = '\0';
- keylen = 0;
-
- for(i = 0; i < ac; i++) {
- memcpy(key+keylen, Z_STRVAL_PP(args[i]), Z_STRLEN_PP(args[i]));
- keylen += Z_STRLEN_PP(args[i]);
- }
-
- /* try to find if we already have this link in our persistent list */
- if (zend_hash_find(&EG(persistent_list), key, keylen+1, (void **) &le) == SUCCESS) {
- FREENOW;
-
- if (Z_TYPE_P(le) != le_pdb) {
- RETURN_FALSE;
- }
-
- info = (dba_info *)le->ptr;
-
- ZEND_REGISTER_RESOURCE(return_value, info, le_pdb);
- return;
- }
- }
-
- if (ac==2) {
- hptr = DBA_G(default_hptr);
- if (!hptr) {
- php_error_docref2(NULL TSRMLS_CC, Z_STRVAL_PP(args[0]), Z_STRVAL_PP(args[1]), E_WARNING, "No default handler selected");
- FREENOW;
- RETURN_FALSE;
- }
- } else {
- for (hptr = handler; hptr->name && strcasecmp(hptr->name, Z_STRVAL_PP(args[2])); hptr++);
- }
-
- if (!hptr->name) {
- php_error_docref2(NULL TSRMLS_CC, Z_STRVAL_PP(args[0]), Z_STRVAL_PP(args[1]), E_WARNING, "No such handler: %s", Z_STRVAL_PP(args[2]));
- FREENOW;
- RETURN_FALSE;
- }
-
- /* Check mode: [rwnc][fl]?t?
- * r: Read
- * w: Write
- * n: Create/Truncate
- * c: Create
- *
- * d: force lock on database file
- * l: force lock on lck file
- * -: ignore locking
- *
- * t: test open database, warning if locked
- */
- strlcpy(mode, Z_STRVAL_PP(args[1]), sizeof(mode));
- pmode = &mode[0];
- if (pmode[0] && (pmode[1]=='d' || pmode[1]=='l' || pmode[1]=='-')) { /* force lock on db file or lck file or disable locking */
- switch (pmode[1]) {
- case 'd':
- lock_dbf = 1;
- if ((hptr->flags & DBA_LOCK_ALL) == 0) {
- lock_flag = (hptr->flags & DBA_LOCK_ALL);
- break;
- }
- /* no break */
- case 'l':
- lock_flag = DBA_LOCK_ALL;
- if ((hptr->flags & DBA_LOCK_ALL) == 0) {
- php_error_docref2(NULL TSRMLS_CC, Z_STRVAL_PP(args[0]), Z_STRVAL_PP(args[1]), E_NOTICE, "Handler %s does locking internally", hptr->name);
- }
- break;
- default:
- case '-':
- if ((hptr->flags & DBA_LOCK_ALL) == 0) {
- php_error_docref2(NULL TSRMLS_CC, Z_STRVAL_PP(args[0]), Z_STRVAL_PP(args[1]), E_WARNING, "Locking cannot be disabled for handler %s", hptr->name);
- FREENOW;
- RETURN_FALSE;
- }
- lock_flag = 0;
- break;
- }
- } else {
- lock_flag = (hptr->flags&DBA_LOCK_ALL);
- lock_dbf = 1;
- }
- switch (*pmode++) {
- case 'r':
- modenr = DBA_READER;
- lock_mode = (lock_flag & DBA_LOCK_READER) ? LOCK_SH : 0;
- file_mode = "r";
- break;
- case 'w':
- modenr = DBA_WRITER;
- lock_mode = (lock_flag & DBA_LOCK_WRITER) ? LOCK_EX : 0;
- file_mode = "r+b";
- break;
- case 'c':
- modenr = DBA_CREAT;
- lock_mode = (lock_flag & DBA_LOCK_CREAT) ? LOCK_EX : 0;
- if (lock_mode) {
- if (lock_dbf) {
- /* the create/append check will be done on the lock
- * when the lib opens the file it is already created
- */
- file_mode = "r+b"; /* read & write, seek 0 */
- lock_file_mode = "a+b"; /* append */
- } else {
- file_mode = "a+b"; /* append */
- lock_file_mode = "w+b"; /* create/truncate */
- }
- } else {
- file_mode = "a+b";
- }
- /* In case of the 'a+b' append mode, the handler is responsible
- * to handle any rewind problems (see flatfile handler).
- */
- break;
- case 'n':
- modenr = DBA_TRUNC;
- lock_mode = (lock_flag & DBA_LOCK_TRUNC) ? LOCK_EX : 0;
- file_mode = "w+b";
- break;
- default:
- php_error_docref2(NULL TSRMLS_CC, Z_STRVAL_PP(args[0]), Z_STRVAL_PP(args[1]), E_WARNING, "Illegal DBA mode");
- FREENOW;
- RETURN_FALSE;
- }
- if (!lock_file_mode) {
- lock_file_mode = file_mode;
- }
- if (*pmode=='d' || *pmode=='l' || *pmode=='-') {
- pmode++; /* done already - skip here */
- }
- if (*pmode=='t') {
- pmode++;
- if (!lock_flag) {
- php_error_docref2(NULL TSRMLS_CC, Z_STRVAL_PP(args[0]), Z_STRVAL_PP(args[1]), E_WARNING, "You cannot combine modifiers - (no lock) and t (test lock)");
- FREENOW;
- RETURN_FALSE;
- }
- if (!lock_mode) {
- if ((hptr->flags & DBA_LOCK_ALL) == 0) {
- php_error_docref2(NULL TSRMLS_CC, Z_STRVAL_PP(args[0]), Z_STRVAL_PP(args[1]), E_WARNING, "Handler %s uses its own locking which doesn't support mode modifier t (test lock)", hptr->name);
- FREENOW;
- RETURN_FALSE;
- } else {
- php_error_docref2(NULL TSRMLS_CC, Z_STRVAL_PP(args[0]), Z_STRVAL_PP(args[1]), E_WARNING, "Handler %s doesn't uses locking for this mode which makes modifier t (test lock) obsolete", hptr->name);
- FREENOW;
- RETURN_FALSE;
- }
- } else {
- lock_mode |= LOCK_NB; /* test =: non blocking */
- }
- }
- if (*pmode) {
- php_error_docref2(NULL TSRMLS_CC, Z_STRVAL_PP(args[0]), Z_STRVAL_PP(args[1]), E_WARNING, "Illegal DBA mode");
- FREENOW;
- RETURN_FALSE;
- }
-
- info = pemalloc(sizeof(dba_info), persistent);
- memset(info, 0, sizeof(dba_info));
- info->path = pestrdup(Z_STRVAL_PP(args[0]), persistent);
- info->mode = modenr;
- info->argc = ac - 3;
- info->argv = args + 3;
- info->flags = (hptr->flags & ~DBA_LOCK_ALL) | (lock_flag & DBA_LOCK_ALL) | (persistent ? DBA_PERSISTENT : 0);
- info->lock.mode = lock_mode;
-
- /* if any open call is a locking call:
- * check if we already habe a locking call open that should block this call
- * the problem is some systems would allow read during write
- */
- if (hptr->flags & DBA_LOCK_ALL) {
- if ((other = php_dba_find(info->path TSRMLS_CC)) != NULL) {
- if ( ( (lock_mode&LOCK_EX) && (other->lock.mode&(LOCK_EX|LOCK_SH)) )
- || ( (other->lock.mode&LOCK_EX) && (lock_mode&(LOCK_EX|LOCK_SH)) )
- ) {
- error = "Unable to establish lock (database file already open)"; /* force failure exit */
- }
- }
- }
-
- if (!error && lock_mode) {
- if (lock_dbf) {
- lock_name = Z_STRVAL_PP(args[0]);
- } else {
- spprintf(&lock_name, 0, "%s.lck", info->path);
- if (!strcmp(file_mode, "r")) {
- /* when in read only mode try to use existing .lck file first */
- /* do not log errors for .lck file while in read ony mode on .lck file */
- lock_file_mode = "rb";
- info->lock.fp = php_stream_open_wrapper(lock_name, lock_file_mode, STREAM_MUST_SEEK|IGNORE_PATH|ENFORCE_SAFE_MODE|persistent_flag, &opened_path);
- }
- if (!info->lock.fp) {
- /* when not in read mode or failed to open .lck file read only. now try again in create(write) mode and log errors */
- lock_file_mode = "a+b";
- } else {
- if (!persistent) {
- info->lock.name = opened_path;
- } else {
- info->lock.name = pestrdup(opened_path, persistent);
- efree(opened_path);
- }
- }
- }
- if (!info->lock.fp) {
- info->lock.fp = php_stream_open_wrapper(lock_name, lock_file_mode, STREAM_MUST_SEEK|REPORT_ERRORS|IGNORE_PATH|ENFORCE_SAFE_MODE|persistent_flag, &opened_path);
- if (info->lock.fp) {
- if (lock_dbf) {
- /* replace the path info with the real path of the opened file */
- pefree(info->path, persistent);
- info->path = pestrdup(opened_path, persistent);
- }
- /* now store the name of the lock */
- if (!persistent) {
- info->lock.name = opened_path;
- } else {
- info->lock.name = pestrdup(opened_path, persistent);
- efree(opened_path);
- }
- }
- }
- if (!lock_dbf) {
- efree(lock_name);
- }
- if (!info->lock.fp) {
- dba_close(info TSRMLS_CC);
- /* stream operation already wrote an error message */
- FREENOW;
- RETURN_FALSE;
- }
- if (!php_stream_supports_lock(info->lock.fp)) {
- error = "Stream does not support locking";
- }
- if (php_stream_lock(info->lock.fp, lock_mode)) {
- error = "Unable to establish lock"; /* force failure exit */
- }
- }
-
- /* centralised open stream for builtin */
- if (!error && (hptr->flags&DBA_STREAM_OPEN)==DBA_STREAM_OPEN) {
- if (info->lock.fp && lock_dbf) {
- info->fp = info->lock.fp; /* use the same stream for locking and database access */
- } else {
- info->fp = php_stream_open_wrapper(info->path, file_mode, STREAM_MUST_SEEK|REPORT_ERRORS|IGNORE_PATH|ENFORCE_SAFE_MODE|persistent_flag, NULL);
- }
- if (!info->fp) {
- dba_close(info TSRMLS_CC);
- /* stream operation already wrote an error message */
- FREENOW;
- RETURN_FALSE;
- }
- if (hptr->flags & (DBA_NO_APPEND|DBA_CAST_AS_FD)) {
- /* Needed becasue some systems do not allow to write to the original
- * file contents with O_APPEND being set.
- */
- if (SUCCESS != php_stream_cast(info->fp, PHP_STREAM_AS_FD, (void*)&info->fd, 1)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Could not cast stream");
- dba_close(info TSRMLS_CC);
- FREENOW;
- RETURN_FALSE;
-#ifdef F_SETFL
- } else if (modenr == DBA_CREAT) {
- int flags = fcntl(info->fd, F_SETFL);
- fcntl(info->fd, F_SETFL, flags & ~O_APPEND);
-#endif
- }
-
- }
- }
-
- if (error || hptr->open(info, &error TSRMLS_CC) != SUCCESS) {
- dba_close(info TSRMLS_CC);
- php_error_docref2(NULL TSRMLS_CC, Z_STRVAL_PP(args[0]), Z_STRVAL_PP(args[1]), E_WARNING, "Driver initialization failed for handler: %s%s%s", hptr->name, error?": ":"", error?error:"");
- FREENOW;
- RETURN_FALSE;
- }
-
- info->hnd = hptr;
- info->argc = 0;
- info->argv = NULL;
-
- if (persistent) {
- list_entry new_le;
-
- Z_TYPE(new_le) = le_pdb;
- new_le.ptr = info;
- if (zend_hash_update(&EG(persistent_list), key, keylen+1, &new_le, sizeof(list_entry), NULL) == FAILURE) {
- dba_close(info TSRMLS_CC);
- php_error_docref2(NULL TSRMLS_CC, Z_STRVAL_PP(args[0]), Z_STRVAL_PP(args[1]), E_WARNING, "Could not register persistent resource");
- FREENOW;
- RETURN_FALSE;
- }
- }
-
- ZEND_REGISTER_RESOURCE(return_value, info, (persistent ? le_pdb : le_db));
- FREENOW;
-}
-/* }}} */
-#undef FREENOW
-
-/* {{{ proto resource dba_popen(string path, string mode [, string handlername, string ...])
- Opens path using the specified handler in mode persistently */
-PHP_FUNCTION(dba_popen)
-{
- php_dba_open(INTERNAL_FUNCTION_PARAM_PASSTHRU, 1);
-}
-/* }}} */
-
-/* {{{ proto resource dba_open(string path, string mode [, string handlername, string ...])
- Opens path using the specified handler in mode*/
-PHP_FUNCTION(dba_open)
-{
- php_dba_open(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0);
-}
-/* }}} */
-
-/* {{{ proto void dba_close(resource handle)
- Closes database */
-PHP_FUNCTION(dba_close)
-{
- DBA_ID_GET1;
-
- zend_list_delete(Z_RESVAL_PP(id));
-}
-/* }}} */
-
-/* {{{ proto bool dba_exists(string key, resource handle)
- Checks, if the specified key exists */
-PHP_FUNCTION(dba_exists)
-{
- DBA_ID_GET2;
-
- if(info->hnd->exists(info, key_str, key_len TSRMLS_CC) == SUCCESS) {
- DBA_ID_DONE;
- RETURN_TRUE;
- }
- DBA_ID_DONE;
- RETURN_FALSE;
-}
-/* }}} */
-
-/* {{{ proto string dba_fetch(string key, [int skip ,] resource handle)
- Fetches the data associated with key */
-PHP_FUNCTION(dba_fetch)
-{
- char *val;
- int len = 0;
- DBA_ID_GET2_3;
-
- if (ac==3) {
- if (!strcmp(info->hnd->name, "cdb")) {
- if (skip < 0) {
- php_error_docref(NULL TSRMLS_CC, E_NOTICE, "Handler %s accepts only skip values greater than or equal to zero, using skip=0", info->hnd->name);
- skip = 0;
- }
- } else if (!strcmp(info->hnd->name, "inifile")) {
- /* "-1" is compareable to 0 but allows a non restrictive
- * access which is fater. For example 'inifile' uses this
- * to allow faster access when the key was already found
- * using firstkey/nextkey. However explicitly setting the
- * value to 0 ensures the first value.
- */
- if (skip < -1) {
- php_error_docref(NULL TSRMLS_CC, E_NOTICE, "Handler %s accepts only skip value -1 and greater, using skip=0", info->hnd->name);
- skip = 0;
- }
- } else {
- php_error_docref(NULL TSRMLS_CC, E_NOTICE, "Handler %s does not support optional skip parameter, the value will be ignored", info->hnd->name);
- skip = 0;
- }
- } else {
- skip = 0;
- }
- if((val = info->hnd->fetch(info, key_str, key_len, skip, &len TSRMLS_CC)) != NULL) {
- if (val && PG(magic_quotes_runtime)) {
- val = php_addslashes(val, len, &len, 1 TSRMLS_CC);
- }
- DBA_ID_DONE;
- RETURN_STRINGL(val, len, 0);
- }
- DBA_ID_DONE;
- RETURN_FALSE;
-}
-/* }}} */
-
-/* {{{ proto array|false dba_key_split(string key)
- Splits an inifile key into an array of the form array(0=>group,1=>value_name) but returns false if input is false or null */
-PHP_FUNCTION(dba_key_split)
-{
- zval *zkey;
- char *key, *name;
- int key_len;
-
- if (ZEND_NUM_ARGS() != 1) {
- WRONG_PARAM_COUNT;
- }
- if (zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, ZEND_NUM_ARGS() TSRMLS_CC, "z", &zkey) == SUCCESS) {
- if (Z_TYPE_P(zkey) == IS_NULL || (Z_TYPE_P(zkey) == IS_BOOL && !Z_LVAL_P(zkey))) {
- RETURN_BOOL(0);
- }
- }
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &key, &key_len) == FAILURE) {
- RETURN_BOOL(0);
- }
- array_init(return_value);
- if (key[0] == '[' && (name = strchr(key, ']')) != NULL) {
- add_next_index_stringl(return_value, key+1, name - (key + 1), 1);
- add_next_index_stringl(return_value, name+1, key_len - (name - key + 1), 1);
- } else {
- add_next_index_stringl(return_value, "", 0, 1);
- add_next_index_stringl(return_value, key, key_len, 1);
- }
-}
-/* }}} */
-
-/* {{{ proto string dba_firstkey(resource handle)
- Resets the internal key pointer and returns the first key */
-PHP_FUNCTION(dba_firstkey)
-{
- char *fkey;
- int len;
- DBA_ID_GET1;
-
- fkey = info->hnd->firstkey(info, &len TSRMLS_CC);
- if(fkey)
- RETURN_STRINGL(fkey, len, 0);
- RETURN_FALSE;
-}
-/* }}} */
-
-/* {{{ proto string dba_nextkey(resource handle)
- Returns the next key */
-PHP_FUNCTION(dba_nextkey)
-{
- char *nkey;
- int len;
- DBA_ID_GET1;
-
- nkey = info->hnd->nextkey(info, &len TSRMLS_CC);
- if(nkey)
- RETURN_STRINGL(nkey, len, 0);
- RETURN_FALSE;
-}
-/* }}} */
-
-/* {{{ proto bool dba_delete(string key, resource handle)
- Deletes the entry associated with key
- If inifile: remove all other key lines */
-PHP_FUNCTION(dba_delete)
-{
- DBA_ID_GET2;
-
- DBA_WRITE_CHECK;
-
- if(info->hnd->delete(info, key_str, key_len TSRMLS_CC) == SUCCESS)
- {
- DBA_ID_DONE;
- RETURN_TRUE;
- }
- DBA_ID_DONE;
- RETURN_FALSE;
-}
-/* }}} */
-
-/* {{{ proto bool dba_insert(string key, string value, resource handle)
- If not inifile: Insert value as key, return false, if key exists already
- If inifile: Add vakue as key (next instance of key) */
-PHP_FUNCTION(dba_insert)
-{
- php_dba_update(INTERNAL_FUNCTION_PARAM_PASSTHRU, 1);
-}
-/* }}} */
-
-/* {{{ proto bool dba_replace(string key, string value, resource handle)
- Inserts value as key, replaces key, if key exists already
- If inifile: remove all other key lines */
-PHP_FUNCTION(dba_replace)
-{
- php_dba_update(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0);
-}
-/* }}} */
-
-/* {{{ proto bool dba_optimize(resource handle)
- Optimizes (e.g. clean up, vacuum) database */
-PHP_FUNCTION(dba_optimize)
-{
- DBA_ID_GET1;
-
- DBA_WRITE_CHECK;
- if(info->hnd->optimize(info TSRMLS_CC) == SUCCESS) {
- RETURN_TRUE;
- }
- RETURN_FALSE;
-}
-/* }}} */
-
-/* {{{ proto bool dba_sync(resource handle)
- Synchronizes database */
-PHP_FUNCTION(dba_sync)
-{
- DBA_ID_GET1;
-
- if(info->hnd->sync(info TSRMLS_CC) == SUCCESS) {
- RETURN_TRUE;
- }
- RETURN_FALSE;
-}
-/* }}} */
-
-/* {{{ proto array dba_handlers([bool full_info])
- List configured database handlers */
-PHP_FUNCTION(dba_handlers)
-{
- dba_handler *hptr;
- zend_bool full_info = 0;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|b", &full_info) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- RETURN_FALSE;
- }
-
- array_init(return_value);
-
- for(hptr = handler; hptr->name; hptr++) {
- if (full_info) {
- add_assoc_string(return_value, hptr->name, hptr->info(hptr, NULL TSRMLS_CC), 0);
- } else {
- add_next_index_string(return_value, hptr->name, 1);
- }
- }
-}
-/* }}} */
-
-/* {{{ proto array dba_list()
- List opened databases */
-PHP_FUNCTION(dba_list)
-{
- ulong numitems, i;
- zend_rsrc_list_entry *le;
- dba_info *info;
-
- if (ZEND_NUM_ARGS()!=0) {
- ZEND_WRONG_PARAM_COUNT();
- RETURN_FALSE;
- }
-
- array_init(return_value);
-
- numitems = zend_hash_next_free_element(&EG(regular_list));
- for (i=1; i<numitems; i++) {
- if (zend_hash_index_find(&EG(regular_list), i, (void **) &le)==FAILURE) {
- continue;
- }
- if (Z_TYPE_P(le) == le_db || Z_TYPE_P(le) == le_pdb) {
- info = (dba_info *)(le->ptr);
- add_index_string(return_value, i, info->path, 1);
- }
- }
-}
-/* }}} */
-
-#endif /* HAVE_DBA */
-
-/*
- * 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.dsp b/ext/dba/dba.dsp
deleted file mode 100644
index ddfd1485a9..0000000000
--- a/ext/dba/dba.dsp
+++ /dev/null
@@ -1,213 +0,0 @@
-# Microsoft Developer Studio Project File - Name="dba" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=dba - Win32 Debug_TS Berkeley DB3
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "dba.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "dba.mak" CFG="dba - Win32 Debug_TS Berkeley DB3"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "dba - Win32 Release_TS Berkeley DB3" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "dba - Win32 Debug_TS Berkeley DB3" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "dba - Win32 Release_TS Berkeley DB3"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release_TS"
-# PROP BASE Intermediate_Dir "Release_TS"
-# PROP BASE Ignore_Export_Lib 0
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release_TS"
-# PROP Intermediate_Dir "Release_TS"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MD /W3 /GX /O2 /I "..\.." /I "..\..\Zend" /I "..\..\TSRM" /I "..\..\main" /D ZEND_DEBUG=0 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "COMPILE_DL_DBA" /D ZTS=1 /D "ZEND_WIN32" /D "PHP_WIN32" /D HAVE_DBA=1 /D DBA_DB3=1 /D DB3_INCLUDE_FILE="db.h" /YX /FD /c
-# ADD CPP /nologo /MD /W3 /GX /O2 /I "..\.." /I "..\..\Zend" /I "..\..\TSRM" /I "..\..\main" /D ZEND_DEBUG=0 /D DBA_DB3=1 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "COMPILE_DL_DBA" /D ZTS=1 /D "ZEND_WIN32" /D "PHP_WIN32" /D HAVE_DBA=1 /D DBA_FLATFILE=1 /D DBA_CDB=1 /D DBA_CDB_MAKE=1 /D DBA_CDB_BUILTIN=1 /D DBA_INIFILE=1 /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x407 /d "NDEBUG"
-# ADD RSC /l 0x407 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 php5ts.lib libdb31s.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 /out:"..\..\Release_TS/php_dba.dll" /libpath:"..\..\Release_TS" /libpath:"..\..\Release_TS_Inline"
-# ADD LINK32 php5ts.lib libdb31s.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 /out:"..\..\Release_TS/php_dba.dll" /libpath:"..\..\Release_TS" /libpath:"..\..\Release_TS_Inline"
-
-!ELSEIF "$(CFG)" == "dba - Win32 Debug_TS Berkeley DB3"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug_TS"
-# PROP BASE Intermediate_Dir "Debug_TS"
-# PROP BASE Ignore_Export_Lib 0
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug_TS"
-# PROP Intermediate_Dir "Debug_TS"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "..\.." /I "..\..\Zend" /I "..\..\TSRM" /I "..\..\main" /D ZEND_DEBUG=1 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "COMPILE_DL_DBA" /D ZTS=1 /D "ZEND_WIN32" /D "PHP_WIN32" /D HAVE_DBA=1 /D "DBA_DB3" /D DB3_INCLUDE_FILE="db.h" /YX /FD /GZ /c
-# ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "..\.." /I "..\..\Zend" /I "..\..\TSRM" /I "..\..\main" /D ZEND_DEBUG=1 /D "DBA_DB3" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "COMPILE_DL_DBA" /D ZTS=1 /D "ZEND_WIN32" /D "PHP_WIN32" /D HAVE_DBA=1 /D DBA_FLATFILE=1 /D DBA_CDB=1 /D DBA_CDB_MAKE=1 /D DBA_CDB_BUILTIN=1 /D DBA_INIFILE=1 /YX /FD /GZ /c
-# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x407 /d "_DEBUG"
-# ADD RSC /l 0x407 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 php5ts_debug.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /out:"..\..\Debug_TS/php_dba.dll" /pdbtype:sept /libpath:"..\..\Debug_TS"
-# ADD LINK32 php5ts_debug.lib libdb31s.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /out:"..\..\Debug_TS/php_dba.dll" /pdbtype:sept /libpath:"..\..\Debug_TS"
-
-!ENDIF
-
-# Begin Target
-
-# Name "dba - Win32 Release_TS Berkeley DB3"
-# Name "dba - Win32 Debug_TS Berkeley DB3"
-# Begin Group "Source Files"
-
-# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
-# Begin Source File
-
-SOURCE=.\libcdb\cdb.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\libcdb\cdb_make.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\dba.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\dba_cdb.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\dba_db2.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\dba_db3.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\dba_dbm.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\dba_flatfile.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\dba_gdbm.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\dba_inifile.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\dba_ndbm.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\libflatfile\flatfile.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\libinifile\inifile.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\libcdb\uint32.c
-# End Source File
-# End Group
-# Begin Group "Header Files"
-
-# PROP Default_Filter "h;hpp;hxx;hm;inl"
-# Begin Source File
-
-SOURCE=.\libcdb\cdb.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\libcdb\cdb_make.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\libflatfile\flatfile.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\php_cdb.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\php_db2.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\php_db3.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\php_dba.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\php_dbm.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\php_flatfile.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\php_gdbm.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\php_inifile.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\php_ndbm.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\libcdb\uint32.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\libinifile\inifile.h
-# End Source File
-# End Group
-# End Target
-# End Project
diff --git a/ext/dba/dba_cdb.c b/ext/dba/dba_cdb.c
deleted file mode 100644
index 9d7d2861d6..0000000000
--- a/ext/dba/dba_cdb.c
+++ /dev/null
@@ -1,350 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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. |
- +----------------------------------------------------------------------+
- | Authors: Sascha Schumann <sascha@schumann.cx> |
- | Marcus Boerger <helly@php.net> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "php.h"
-
-#if DBA_CDB
-#include "php_cdb.h"
-
-#include <sys/types.h>
-#ifdef HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-#include <fcntl.h>
-
-#if DBA_CDB_BUILTIN
-# include "libcdb/cdb.h"
-# include "libcdb/cdb_make.h"
-# include "libcdb/uint32.h"
-#else
-# ifdef CDB_INCLUDE_FILE
-# include CDB_INCLUDE_FILE
-# endif
-#endif
-
-#define CDB_INFO \
- dba_cdb *cdb = (dba_cdb *) info->dbf
-
-typedef struct {
- struct cdb c;
-#if DBA_CDB_BUILTIN
- struct cdb_make m;
- php_stream *file;
- int make;
-#else
- int file;
-#endif
- uint32 eod; /* size of constant database */
- uint32 pos; /* current position for traversing */
-} dba_cdb;
-
-DBA_OPEN_FUNC(cdb)
-{
-#if DBA_CDB_BUILTIN
- php_stream* file = 0;
- int make;
-#else
- int file = 0;
-#endif
- dba_cdb *cdb;
- dba_info *pinfo = (dba_info *) info;
-
- switch (info->mode) {
- case DBA_READER:
-#if DBA_CDB_BUILTIN
- make = 0;
- file = info->fp;
-#else
- file = VCWD_OPEN(info->path, O_RDONLY);
- if (file < 0) {
- *error = "Unable to open file";
- return FAILURE;
- }
-#endif
- break;
-#if DBA_CDB_BUILTIN
- case DBA_TRUNC:
- make = 1;
- file = info->fp;
- break;
- case DBA_CREAT:
- case DBA_WRITER:
- *error = "Update operations are not supported";
- return FAILURE; /* not supported */
-#endif
- default:
- *error = "Currently not supported";
- return FAILURE;
- }
-
- cdb = pemalloc(sizeof(dba_cdb), info->flags&DBA_PERSISTENT);
- memset(cdb, 0, sizeof(dba_cdb));
-
-#if DBA_CDB_BUILTIN
- if (make) {
- cdb_make_start(&cdb->m, file TSRMLS_CC);
- } else {
- cdb_init(&cdb->c, file TSRMLS_CC);
- }
- cdb->make = make;
-#else
- cdb_init(&cdb->c, file);
-#endif
- cdb->file = file;
-
- pinfo->dbf = cdb;
- return SUCCESS;
-}
-
-DBA_CLOSE_FUNC(cdb)
-{
- CDB_INFO;
-
- /* cdb_free does not close associated file */
-#if DBA_CDB_BUILTIN
- if (cdb->make) {
- cdb_make_finish(&cdb->m TSRMLS_CC);
- } else {
- cdb_free(&cdb->c TSRMLS_CC);
- }
-#else
- cdb_free(&cdb->c);
- close(cdb->file);
-#endif
- pefree(cdb, info->flags&DBA_PERSISTENT);
-}
-
-#if DBA_CDB_BUILTIN
-# define php_cdb_read(cdb, buf, len, pos) cdb_read(cdb, buf, len, pos TSRMLS_CC)
-# define php_cdb_findnext(cdb, key, len) cdb_findnext(cdb, key, len TSRMLS_CC)
-# define php_cdb_find(cdb, key, len) cdb_find(cdb, key, len TSRMLS_CC)
-#else
-# define php_cdb_read(cdb, buf, len, pos) cdb_read(cdb, buf, len, pos)
-# define php_cdb_findnext(cdb, key, len) cdb_findnext(cdb, key, len)
-# define php_cdb_find(cdb, key, len) cdb_find(cdb, key, len)
-#endif
-
-DBA_FETCH_FUNC(cdb)
-{
- CDB_INFO;
- unsigned int len;
- char *new_entry = NULL;
-
-#if DBA_CDB_BUILTIN
- if (cdb->make)
- return NULL; /* database was opened writeonly */
-#endif
- if (php_cdb_find(&cdb->c, key, keylen) == 1) {
- while(skip--) {
- if (php_cdb_findnext(&cdb->c, key, keylen) != 1) {
- return NULL;
- }
- }
- len = cdb_datalen(&cdb->c);
- new_entry = safe_emalloc(len, 1, 1);
-
- if (php_cdb_read(&cdb->c, new_entry, len, cdb_datapos(&cdb->c)) == -1) {
- efree(new_entry);
- return NULL;
- }
- new_entry[len] = 0;
- if (newlen)
- *newlen = len;
- }
-
- return new_entry;
-}
-
-DBA_UPDATE_FUNC(cdb)
-{
-#if DBA_CDB_BUILTIN
- CDB_INFO;
-
- if (!cdb->make)
- return FAILURE; /* database was opened readonly */
- if (!mode)
- return FAILURE; /* cdb_make dosn't know replace */
- if (cdb_make_add(&cdb->m, key, keylen, val, vallen TSRMLS_CC) != -1)
- return SUCCESS;
-#endif
- return FAILURE;
-}
-
-DBA_EXISTS_FUNC(cdb)
-{
- CDB_INFO;
-
-#if DBA_CDB_BUILTIN
- if (cdb->make)
- return FAILURE; /* database was opened writeonly */
-#endif
- if (php_cdb_find(&cdb->c, key, keylen) == 1)
- return SUCCESS;
- return FAILURE;
-}
-
-DBA_DELETE_FUNC(cdb)
-{
- return FAILURE; /* cdb doesn't support delete */
-}
-
-/* {{{ cdb_file_read */
-#if DBA_CDB_BUILTIN
-# define cdb_file_read(fildes, buf, size) php_stream_read(fildes, buf, size)
-#else
-# define cdb_file_read(fildes, buf, size) read(fildes, buf, size)
-#endif
-/* }}} */
-
-#define CREAD(n) do { \
- if (cdb_file_read(cdb->file, buf, n) < n) return NULL; \
-} while (0)
-
-/* {{{ cdb_file_lseek
- php_stream_seek does not return actual position */
-#if DBA_CDB_BUILTIN
-int cdb_file_lseek(php_stream *fp, off_t offset, int whence TSRMLS_DC) {
- php_stream_seek(fp, offset, whence);
- return php_stream_tell(fp);
-}
-#else
-int cdb_file_lseek(int fd, off_t offset, int whence TSRMLS_DC) {
- return lseek(fd, offset, whence);
-}
-#endif
-/* }}} */
-
-#define CSEEK(n) do { \
- if (n >= cdb->eod) return NULL; \
- if (cdb_file_lseek(cdb->file, (off_t)n, SEEK_SET TSRMLS_CC) != (off_t) n) return NULL; \
-} while (0)
-
-
-DBA_FIRSTKEY_FUNC(cdb)
-{
- CDB_INFO;
- uint32 klen, dlen;
- char buf[8];
- char *key;
-
-#if DBA_CDB_BUILTIN
- if (cdb->make)
- return NULL; /* database was opened writeonly */
-#endif
-
- cdb->eod = -1;
- CSEEK(0);
- CREAD(4);
-
- /* Total length of file in bytes */
- uint32_unpack(buf, &cdb->eod);
-
- CSEEK(2048);
- CREAD(8);
-
- /* The first four bytes contain the length of the key */
- uint32_unpack(buf, &klen);
- uint32_unpack(buf + 4, &dlen);
-
- key = safe_emalloc(klen, 1, 1);
- if (cdb_file_read(cdb->file, key, klen) < klen) {
- efree(key);
- key = NULL;
- } else {
- key[klen] = '\0';
- if (newlen) *newlen = klen;
- }
-
- /* header + klenlen + dlenlen + klen + dlen */
- cdb->pos = 2048 + 4 + 4 + klen + dlen;
-
- return key;
-}
-
-DBA_NEXTKEY_FUNC(cdb)
-{
- CDB_INFO;
- uint32 klen, dlen;
- char buf[8];
- char *key;
-
-#if DBA_CDB_BUILTIN
- if (cdb->make)
- return NULL; /* database was opened writeonly */
-#endif
-
- CSEEK(cdb->pos);
- CREAD(8);
- uint32_unpack(buf, &klen);
- uint32_unpack(buf + 4, &dlen);
-
- key = safe_emalloc(klen, 1, 1);
- if (cdb_file_read(cdb->file, key, klen) < klen) {
- efree(key);
- key = NULL;
- } else {
- key[klen] = '\0';
- if (newlen) *newlen = klen;
- }
-
- cdb->pos += 8 + klen + dlen;
-
- return key;
-}
-
-DBA_OPTIMIZE_FUNC(cdb)
-{
- return SUCCESS;
-}
-
-DBA_SYNC_FUNC(cdb)
-{
- /* this is read-only */
- return SUCCESS;
-}
-
-DBA_INFO_FUNC(cdb)
-{
-#if DBA_CDB_BUILTIN
- if (!strcmp(hnd->name, "cdb")) {
- return estrdup(cdb_version());
- } else {
- return estrdup(cdb_make_version());
- }
-#else
- return estrdup("External");
-#endif
-}
-
-#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
deleted file mode 100644
index a8760eeb86..0000000000
--- a/ext/dba/dba_db2.c
+++ /dev/null
@@ -1,209 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Sascha Schumann <sascha@schumann.cx> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "php.h"
-
-#if DBA_DB2
-#include "php_db2.h"
-#include <sys/stat.h>
-
-#include <string.h>
-#ifdef DB2_INCLUDE_FILE
-#include DB2_INCLUDE_FILE
-#endif
-
-#define DB2_DATA dba_db2_data *dba = info->dbf
-#define DB2_GKEY \
- DBT gkey = {0}; \
- gkey.data = (char *) key; \
- gkey.size = keylen
-
-typedef struct {
- DB *dbp;
- DBC *cursor;
-} dba_db2_data;
-
-DBA_OPEN_FUNC(db2)
-{
- DB *dbp;
- DBTYPE type;
- int gmode = 0;
- int filemode = 0644;
- struct stat check_stat;
- int s = VCWD_STAT(info->path, &check_stat);
-
- if (!s && !check_stat.st_size) {
- info->mode = DBA_TRUNC; /* force truncate */
- }
-
- type = info->mode == DBA_READER ? DB_UNKNOWN :
- info->mode == DBA_TRUNC ? DB_BTREE :
- s ? DB_BTREE : DB_UNKNOWN;
-
- gmode = info->mode == DBA_READER ? DB_RDONLY :
- (info->mode == DBA_CREAT && s) ? DB_CREATE :
- (info->mode == DBA_CREAT && !s) ? 0 :
- info->mode == DBA_WRITER ? 0 :
- info->mode == DBA_TRUNC ? DB_CREATE | DB_TRUNCATE : -1;
-
- if (gmode == -1) {
- return FAILURE;/* not possible */
- }
-
- if (info->argc > 0) {
- convert_to_long_ex(info->argv[0]);
- filemode = Z_LVAL_PP(info->argv[0]);
- }
-
- if (db_open(info->path, type, gmode, filemode, NULL, NULL, &dbp)) {
- return FAILURE;
- }
-
- info->dbf = pemalloc(sizeof(dba_db2_data), info->flags&DBA_PERSISTENT);
- memset(info->dbf, 0, sizeof(dba_db2_data));
- ((dba_db2_data *) info->dbf)->dbp = dbp;
- return SUCCESS;
-}
-
-DBA_CLOSE_FUNC(db2)
-{
- DB2_DATA;
-
- if (dba->cursor)
- dba->cursor->c_close(dba->cursor);
- dba->dbp->close(dba->dbp, 0);
- pefree(dba, info->flags&DBA_PERSISTENT);
-}
-
-DBA_FETCH_FUNC(db2)
-{
- DBT gval = {0};
- DB2_DATA;
- DB2_GKEY;
-
- if (dba->dbp->get(dba->dbp, NULL, &gkey, &gval, 0)) {
- return NULL;
- }
-
- if (newlen) *newlen = gval.size;
- return estrndup(gval.data, gval.size);
-}
-
-DBA_UPDATE_FUNC(db2)
-{
- DBT gval = {0};
- DB2_DATA;
- DB2_GKEY;
-
- gval.data = (char *) val;
- gval.size = vallen;
-
- if (dba->dbp->put(dba->dbp, NULL, &gkey, &gval,
- mode == 1 ? DB_NOOVERWRITE : 0)) {
- return FAILURE;
- }
- return SUCCESS;
-}
-
-DBA_EXISTS_FUNC(db2)
-{
- DBT gval = {0};
- DB2_DATA;
- DB2_GKEY;
-
- if (dba->dbp->get(dba->dbp, NULL, &gkey, &gval, 0)) {
- return FAILURE;
- }
- return SUCCESS;
-}
-
-DBA_DELETE_FUNC(db2)
-{
- DB2_DATA;
- DB2_GKEY;
-
- return dba->dbp->del(dba->dbp, NULL, &gkey, 0) ? FAILURE : SUCCESS;
-}
-
-DBA_FIRSTKEY_FUNC(db2)
-{
- DB2_DATA;
-
- if (dba->cursor) {
- dba->cursor->c_close(dba->cursor);
- dba->cursor = NULL;
- }
-
-#if (DB_VERSION_MAJOR > 2) || (DB_VERSION_MAJOR == 2 && DB_VERSION_MINOR > 6) || (DB_VERSION_MAJOR == 2 && DB_VERSION_MINOR == 6 && DB_VERSION_PATCH >= 4)
- if (dba->dbp->cursor(dba->dbp, NULL, &dba->cursor, 0)) {
-#else
- if (dba->dbp->cursor(dba->dbp, NULL, &dba->cursor)) {
-#endif
- return NULL;
- }
-
- /* we should introduce something like PARAM_PASSTHRU... */
- return dba_nextkey_db2(info, newlen TSRMLS_CC);
-}
-
-DBA_NEXTKEY_FUNC(db2)
-{
- DB2_DATA;
- DBT gkey = {0}, gval = {0};
-
- if (dba->cursor->c_get(dba->cursor, &gkey, &gval, DB_NEXT)
- || !gkey.data)
- return NULL;
-
- if (newlen) *newlen = gkey.size;
- return estrndup(gkey.data, gkey.size);
-}
-
-DBA_OPTIMIZE_FUNC(db2)
-{
- return SUCCESS;
-}
-
-DBA_SYNC_FUNC(db2)
-{
- DB2_DATA;
-
- return dba->dbp->sync(dba->dbp, 0) ? FAILURE : SUCCESS;
-}
-
-DBA_INFO_FUNC(db2)
-{
- return estrdup(DB_VERSION_STRING);
-}
-
-#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_db3.c b/ext/dba/dba_db3.c
deleted file mode 100644
index 8d039d4819..0000000000
--- a/ext/dba/dba_db3.c
+++ /dev/null
@@ -1,238 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Sascha Schumann <sascha@schumann.cx> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "php.h"
-
-#if DBA_DB3
-#include "php_db3.h"
-#include <sys/stat.h>
-
-#include <string.h>
-#ifdef DB3_INCLUDE_FILE
-#include DB3_INCLUDE_FILE
-#else
-#include <db.h>
-#endif
-
-static void php_dba_db3_errcall_fcn(const char *errpfx, char *msg)
-{
- TSRMLS_FETCH();
-
- php_error_docref(NULL TSRMLS_CC, E_NOTICE, "%s%s", errpfx?errpfx:"", msg);
-}
-
-#define DB3_DATA dba_db3_data *dba = info->dbf
-#define DB3_GKEY \
- DBT gkey; \
- memset(&gkey, 0, sizeof(gkey)); \
- gkey.data = (char *) key; gkey.size = keylen
-
-typedef struct {
- DB *dbp;
- DBC *cursor;
-} dba_db3_data;
-
-DBA_OPEN_FUNC(db3)
-{
- DB *dbp = NULL;
- DBTYPE type;
- int gmode = 0, err;
- int filemode = 0644;
- struct stat check_stat;
- int s = VCWD_STAT(info->path, &check_stat);
-
- if (!s && !check_stat.st_size) {
- info->mode = DBA_TRUNC; /* force truncate */
- }
-
- type = info->mode == DBA_READER ? DB_UNKNOWN :
- info->mode == DBA_TRUNC ? DB_BTREE :
- s ? DB_BTREE : DB_UNKNOWN;
-
- gmode = info->mode == DBA_READER ? DB_RDONLY :
- (info->mode == DBA_CREAT && s) ? DB_CREATE :
- (info->mode == DBA_CREAT && !s) ? 0 :
- info->mode == DBA_WRITER ? 0 :
- info->mode == DBA_TRUNC ? DB_CREATE | DB_TRUNCATE : -1;
-
- if (gmode == -1) {
- return FAILURE; /* not possible */
- }
-
- if (info->argc > 0) {
- convert_to_long_ex(info->argv[0]);
- 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_db3_errcall_fcn);
- if ((err=dbp->open(dbp, info->path, NULL, type, gmode, filemode)) == 0) {
- dba_db3_data *data;
-
- data = pemalloc(sizeof(*data), info->flags&DBA_PERSISTENT);
- data->dbp = dbp;
- data->cursor = NULL;
- info->dbf = data;
-
- return SUCCESS;
- } else {
- dbp->close(dbp, 0);
- *error = db_strerror(err);
- }
- } else {
- *error = db_strerror(err);
- }
-
- return FAILURE;
-}
-
-DBA_CLOSE_FUNC(db3)
-{
- DB3_DATA;
-
- if (dba->cursor) dba->cursor->c_close(dba->cursor);
- dba->dbp->close(dba->dbp, 0);
- pefree(dba, info->flags&DBA_PERSISTENT);
-}
-
-DBA_FETCH_FUNC(db3)
-{
- DBT gval;
- char *new = NULL;
- DB3_DATA;
- DB3_GKEY;
-
- memset(&gval, 0, sizeof(gval));
- if (!dba->dbp->get(dba->dbp, NULL, &gkey, &gval, 0)) {
- if (newlen) *newlen = gval.size;
- new = estrndup(gval.data, gval.size);
- }
- return new;
-}
-
-DBA_UPDATE_FUNC(db3)
-{
- DBT gval;
- DB3_DATA;
- DB3_GKEY;
-
- memset(&gval, 0, sizeof(gval));
- gval.data = (char *) val;
- gval.size = vallen;
-
- if (!dba->dbp->put(dba->dbp, NULL, &gkey, &gval,
- mode == 1 ? DB_NOOVERWRITE : 0)) {
- return SUCCESS;
- }
- return FAILURE;
-}
-
-DBA_EXISTS_FUNC(db3)
-{
- DBT gval;
- DB3_DATA;
- DB3_GKEY;
-
- memset(&gval, 0, sizeof(gval));
- if (!dba->dbp->get(dba->dbp, NULL, &gkey, &gval, 0)) {
- return SUCCESS;
- }
- return FAILURE;
-}
-
-DBA_DELETE_FUNC(db3)
-{
- DB3_DATA;
- DB3_GKEY;
-
- return dba->dbp->del(dba->dbp, NULL, &gkey, 0) ? FAILURE : SUCCESS;
-}
-
-DBA_FIRSTKEY_FUNC(db3)
-{
- DB3_DATA;
-
- if (dba->cursor) {
- dba->cursor->c_close(dba->cursor);
- }
-
- dba->cursor = NULL;
- if (dba->dbp->cursor(dba->dbp, NULL, &dba->cursor, 0) != 0) {
- return NULL;
- }
-
- /* we should introduce something like PARAM_PASSTHRU... */
- return dba_nextkey_db3(info, newlen TSRMLS_CC);
-}
-
-DBA_NEXTKEY_FUNC(db3)
-{
- DB3_DATA;
- DBT gkey, gval;
- char *nkey = NULL;
-
- memset(&gkey, 0, sizeof(gkey));
- memset(&gval, 0, sizeof(gval));
-
- if (dba->cursor->c_get(dba->cursor, &gkey, &gval, DB_NEXT) == 0) {
- if (gkey.data) {
- nkey = estrndup(gkey.data, gkey.size);
- if (newlen) *newlen = gkey.size;
- }
- }
-
- return nkey;
-}
-
-DBA_OPTIMIZE_FUNC(db3)
-{
- return SUCCESS;
-}
-
-DBA_SYNC_FUNC(db3)
-{
- DB3_DATA;
-
- return dba->dbp->sync(dba->dbp, 0) ? FAILURE : SUCCESS;
-}
-
-DBA_INFO_FUNC(db3)
-{
- return estrdup(DB_VERSION_STRING);
-}
-
-#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_db4.c b/ext/dba/dba_db4.c
deleted file mode 100644
index 34e2af1a1f..0000000000
--- a/ext/dba/dba_db4.c
+++ /dev/null
@@ -1,248 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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. |
- +----------------------------------------------------------------------+
- | Authors: Marcus Boerger <helly@php.net> |
- | Sascha Schumann <sascha@schumann.cx> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "php.h"
-
-#if DBA_DB4
-#include "php_db4.h"
-#include <sys/stat.h>
-
-#include <string.h>
-#ifdef DB4_INCLUDE_FILE
-#include DB4_INCLUDE_FILE
-#else
-#include <db.h>
-#endif
-
-static void php_dba_db4_errcall_fcn(const char *errpfx, char *msg)
-{
- TSRMLS_FETCH();
-
- php_error_docref(NULL TSRMLS_CC, E_NOTICE, "%s%s", errpfx?errpfx:"", msg);
-}
-
-#define DB4_DATA dba_db4_data *dba = info->dbf
-#define DB4_GKEY \
- DBT gkey; \
- memset(&gkey, 0, sizeof(gkey)); \
- gkey.data = (char *) key; gkey.size = keylen
-
-typedef struct {
- DB *dbp;
- DBC *cursor;
-} dba_db4_data;
-
-DBA_OPEN_FUNC(db4)
-{
- DB *dbp = NULL;
- DBTYPE type;
- int gmode = 0, err;
- int filemode = 0644;
- struct stat check_stat;
- int s = VCWD_STAT(info->path, &check_stat);
-
- if (!s && !check_stat.st_size) {
- info->mode = DBA_TRUNC; /* force truncate */
- }
-
- type = info->mode == DBA_READER ? DB_UNKNOWN :
- info->mode == DBA_TRUNC ? DB_BTREE :
- s ? DB_BTREE : DB_UNKNOWN;
-
- gmode = info->mode == DBA_READER ? DB_RDONLY :
- (info->mode == DBA_CREAT && s) ? DB_CREATE :
- (info->mode == DBA_CREAT && !s) ? 0 :
- info->mode == DBA_WRITER ? 0 :
- info->mode == DBA_TRUNC ? DB_CREATE | DB_TRUNCATE : -1;
-
- if (info->flags & DBA_PERSISTENT) {
- gmode |= DB_THREAD;
- }
-
- if (gmode == -1) {
- return FAILURE; /* not possible */
- }
-
- if (info->argc > 0) {
- convert_to_long_ex(info->argv[0]);
- 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 (
-#if (DB_VERSION_MAJOR == 4 && DB_VERSION_MINOR >= 1)
- (err=dbp->open(dbp, 0, info->path, NULL, type, gmode, filemode)) == 0) {
-#else
- (err=dbp->open(dbp, info->path, NULL, type, gmode, filemode)) == 0) {
-#endif
- dba_db4_data *data;
-
- data = pemalloc(sizeof(*data), info->flags&DBA_PERSISTENT);
- data->dbp = dbp;
- data->cursor = NULL;
- info->dbf = data;
-
- return SUCCESS;
- } else {
- dbp->close(dbp, 0);
- *error = db_strerror(err);
- }
- } else {
- *error = db_strerror(err);
- }
-
- return FAILURE;
-}
-
-DBA_CLOSE_FUNC(db4)
-{
- DB4_DATA;
-
- if (dba->cursor) dba->cursor->c_close(dba->cursor);
- dba->dbp->close(dba->dbp, 0);
- pefree(dba, info->flags&DBA_PERSISTENT);
-}
-
-DBA_FETCH_FUNC(db4)
-{
- DBT gval;
- char *new = NULL;
- DB4_DATA;
- DB4_GKEY;
-
- memset(&gval, 0, sizeof(gval));
- if (!dba->dbp->get(dba->dbp, NULL, &gkey, &gval, 0)) {
- if (newlen) *newlen = gval.size;
- new = estrndup(gval.data, gval.size);
- }
- return new;
-}
-
-DBA_UPDATE_FUNC(db4)
-{
- DBT gval;
- DB4_DATA;
- DB4_GKEY;
-
- memset(&gval, 0, sizeof(gval));
- gval.data = (char *) val;
- gval.size = vallen;
-
- if (!dba->dbp->put(dba->dbp, NULL, &gkey, &gval,
- mode == 1 ? DB_NOOVERWRITE : 0)) {
- return SUCCESS;
- }
- return FAILURE;
-}
-
-DBA_EXISTS_FUNC(db4)
-{
- DBT gval;
- DB4_DATA;
- DB4_GKEY;
-
- memset(&gval, 0, sizeof(gval));
- if (!dba->dbp->get(dba->dbp, NULL, &gkey, &gval, 0)) {
- return SUCCESS;
- }
- return FAILURE;
-}
-
-DBA_DELETE_FUNC(db4)
-{
- DB4_DATA;
- DB4_GKEY;
-
- return dba->dbp->del(dba->dbp, NULL, &gkey, 0) ? FAILURE : SUCCESS;
-}
-
-DBA_FIRSTKEY_FUNC(db4)
-{
- DB4_DATA;
-
- if (dba->cursor) {
- dba->cursor->c_close(dba->cursor);
- }
-
- dba->cursor = NULL;
- if (dba->dbp->cursor(dba->dbp, NULL, &dba->cursor, 0) != 0) {
- return NULL;
- }
-
- /* we should introduce something like PARAM_PASSTHRU... */
- return dba_nextkey_db4(info, newlen TSRMLS_CC);
-}
-
-DBA_NEXTKEY_FUNC(db4)
-{
- DB4_DATA;
- DBT gkey, gval;
- char *nkey = NULL;
-
- memset(&gkey, 0, sizeof(gkey));
- memset(&gval, 0, sizeof(gval));
-
- if (dba->cursor->c_get(dba->cursor, &gkey, &gval, DB_NEXT) == 0) {
- if (gkey.data) {
- nkey = estrndup(gkey.data, gkey.size);
- if (newlen) *newlen = gkey.size;
- }
- }
-
- return nkey;
-}
-
-DBA_OPTIMIZE_FUNC(db4)
-{
- return SUCCESS;
-}
-
-DBA_SYNC_FUNC(db4)
-{
- DB4_DATA;
-
- return dba->dbp->sync(dba->dbp, 0) ? FAILURE : SUCCESS;
-}
-
-DBA_INFO_FUNC(db4)
-{
- return estrdup(DB_VERSION_STRING);
-}
-
-#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_dbm.c b/ext/dba/dba_dbm.c
deleted file mode 100644
index 23de0cd2d2..0000000000
--- a/ext/dba/dba_dbm.c
+++ /dev/null
@@ -1,213 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Sascha Schumann <sascha@schumann.cx> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "php.h"
-
-#if DBA_DBM
-#include "php_dbm.h"
-
-#ifdef DBM_INCLUDE_FILE
-#include DBM_INCLUDE_FILE
-#endif
-#if DBA_GDBM
-#include "php_gdbm.h"
-#endif
-
-#include <unistd.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <fcntl.h>
-
-#define DBM_DATA dba_dbm_data *dba = info->dbf
-#define DBM_GKEY datum gkey; gkey.dptr = (char *) key; gkey.dsize = keylen
-
-#define TRUNC_IT(extension, mode) \
- snprintf(buf, MAXPATHLEN, "%s" extension, info->path); \
- buf[MAXPATHLEN-1] = '\0'; \
- if((fd = VCWD_OPEN_MODE(buf, O_CREAT | mode | O_WRONLY, filemode)) == -1) \
- return FAILURE; \
- close(fd);
-
-
-typedef struct {
- datum nextkey;
-} dba_dbm_data;
-
-DBA_OPEN_FUNC(dbm)
-{
- int fd;
- int filemode = 0644;
-
- if(info->argc > 0) {
- convert_to_long_ex(info->argv[0]);
- filemode = Z_LVAL_PP(info->argv[0]);
- }
-
- if(info->mode == DBA_TRUNC) {
- char buf[MAXPATHLEN];
-
- /* dbm/ndbm original */
- TRUNC_IT(".pag", O_TRUNC);
- TRUNC_IT(".dir", O_TRUNC);
- }
-
- if(info->mode == DBA_CREAT) {
- char buf[MAXPATHLEN];
-
- TRUNC_IT(".pag", 0);
- TRUNC_IT(".dir", 0);
- }
-
- if(dbminit((char *) info->path) == -1) {
- return FAILURE;
- }
-
- info->dbf = pemalloc(sizeof(dba_dbm_data), info->flags&DBA_PERSISTENT);
- memset(info->dbf, 0, sizeof(dba_dbm_data));
- return SUCCESS;
-}
-
-DBA_CLOSE_FUNC(dbm)
-{
- pefree(info->dbf, info->flags&DBA_PERSISTENT);
- dbmclose();
-}
-
-DBA_FETCH_FUNC(dbm)
-{
- datum gval;
- char *new = NULL;
-
- DBM_GKEY;
- gval = fetch(gkey);
- if(gval.dptr) {
- if(newlen) *newlen = gval.dsize;
- new = estrndup(gval.dptr, gval.dsize);
- }
- return new;
-}
-
-DBA_UPDATE_FUNC(dbm)
-{
- datum gval;
-
- DBM_GKEY;
-
- if (mode == 1) { /* insert */
- gval = fetch(gkey);
- if(gval.dptr) {
- return FAILURE;
- }
- }
-
- gval.dptr = (char *) val;
- gval.dsize = vallen;
-
- return (store(gkey, gval) == -1 ? FAILURE : SUCCESS);
-}
-
-DBA_EXISTS_FUNC(dbm)
-{
- datum gval;
- DBM_GKEY;
-
- gval = fetch(gkey);
- if(gval.dptr) {
- return SUCCESS;
- }
- return FAILURE;
-}
-
-DBA_DELETE_FUNC(dbm)
-{
- DBM_GKEY;
- return(delete(gkey) == -1 ? FAILURE : SUCCESS);
-}
-
-DBA_FIRSTKEY_FUNC(dbm)
-{
- DBM_DATA;
- datum gkey;
- char *key = NULL;
-
- gkey = firstkey();
- if(gkey.dptr) {
- if(newlen) *newlen = gkey.dsize;
- key = estrndup(gkey.dptr, gkey.dsize);
- dba->nextkey = gkey;
- } else
- dba->nextkey.dptr = NULL;
- return key;
-}
-
-DBA_NEXTKEY_FUNC(dbm)
-{
- DBM_DATA;
- datum gkey;
- char *nkey = NULL;
-
- if(!dba->nextkey.dptr) return NULL;
-
- gkey = nextkey(dba->nextkey);
- if(gkey.dptr) {
- if(newlen) *newlen = gkey.dsize;
- nkey = estrndup(gkey.dptr, gkey.dsize);
- dba->nextkey = gkey;
- } else
- dba->nextkey.dptr = NULL;
- return nkey;
-}
-
-DBA_OPTIMIZE_FUNC(dbm)
-{
- /* dummy */
- return SUCCESS;
-}
-
-DBA_SYNC_FUNC(dbm)
-{
- return SUCCESS;
-}
-
-DBA_INFO_FUNC(dbm)
-{
-#if DBA_GDBM
- if (!strcmp(DBM_VERSION, "GDBM"))
- {
- return dba_info_gdbm(hnd, info TSRMLS_CC);
- }
-#endif
- return estrdup(DBM_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_flatfile.c b/ext/dba/dba_flatfile.c
deleted file mode 100644
index 33e23e1e27..0000000000
--- a/ext/dba/dba_flatfile.c
+++ /dev/null
@@ -1,188 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Marcus Boerger <helly@php.net> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "php.h"
-
-#if DBA_FLATFILE
-#include "php_flatfile.h"
-
-#include "libflatfile/flatfile.h"
-
-#ifdef HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <fcntl.h>
-
-#define FLATFILE_DATA flatfile *dba = info->dbf
-#define FLATFILE_GKEY datum gkey; gkey.dptr = (char *) key; gkey.dsize = keylen
-
-DBA_OPEN_FUNC(flatfile)
-{
- info->dbf = pemalloc(sizeof(flatfile), info->flags&DBA_PERSISTENT);
- memset(info->dbf, 0, sizeof(flatfile));
-
- ((flatfile*)info->dbf)->fp = info->fp;
-
- return SUCCESS;
-}
-
-DBA_CLOSE_FUNC(flatfile)
-{
- FLATFILE_DATA;
-
- if (dba->nextkey.dptr) {
- efree(dba->nextkey.dptr);
- }
- pefree(dba, info->flags&DBA_PERSISTENT);
-}
-
-DBA_FETCH_FUNC(flatfile)
-{
- datum gval;
- char *new = NULL;
-
- FLATFILE_DATA;
- FLATFILE_GKEY;
-
- gval = flatfile_fetch(dba, gkey TSRMLS_CC);
- if (gval.dptr) {
- if (newlen) {
- *newlen = gval.dsize;
- }
- new = estrndup(gval.dptr, gval.dsize);
- efree(gval.dptr);
- }
- return new;
-}
-
-DBA_UPDATE_FUNC(flatfile)
-{
- datum gval;
-
- FLATFILE_DATA;
- FLATFILE_GKEY;
- gval.dptr = (char *) val;
- gval.dsize = vallen;
-
- switch(flatfile_store(dba, gkey, gval, mode==1 ? FLATFILE_INSERT : FLATFILE_REPLACE TSRMLS_CC)) {
- case -1:
- php_error_docref1(NULL TSRMLS_CC, key, E_WARNING, "Operation not possible");
- return FAILURE;
- default:
- case 0:
- return SUCCESS;
- case 1:
- php_error_docref1(NULL TSRMLS_CC, key, E_WARNING, "Key already exists");
- return SUCCESS;
- }
-}
-
-DBA_EXISTS_FUNC(flatfile)
-{
- datum gval;
- FLATFILE_DATA;
- FLATFILE_GKEY;
-
- gval = flatfile_fetch(dba, gkey TSRMLS_CC);
- if (gval.dptr) {
- efree(gval.dptr);
- return SUCCESS;
- }
- return FAILURE;
-}
-
-DBA_DELETE_FUNC(flatfile)
-{
- FLATFILE_DATA;
- FLATFILE_GKEY;
- return(flatfile_delete(dba, gkey TSRMLS_CC) == -1 ? FAILURE : SUCCESS);
-}
-
-DBA_FIRSTKEY_FUNC(flatfile)
-{
- FLATFILE_DATA;
-
- if (dba->nextkey.dptr) {
- efree(dba->nextkey.dptr);
- }
- dba->nextkey = flatfile_firstkey(dba TSRMLS_CC);
- if (dba->nextkey.dptr) {
- if (newlen) {
- *newlen = dba->nextkey.dsize;
- }
- return estrndup(dba->nextkey.dptr, dba->nextkey.dsize);
- }
- return NULL;
-}
-
-DBA_NEXTKEY_FUNC(flatfile)
-{
- FLATFILE_DATA;
-
- if (!dba->nextkey.dptr) {
- return NULL;
- }
-
- if (dba->nextkey.dptr) {
- efree(dba->nextkey.dptr);
- }
- dba->nextkey = flatfile_nextkey(dba TSRMLS_CC);
- if (dba->nextkey.dptr) {
- if (newlen) {
- *newlen = dba->nextkey.dsize;
- }
- return estrndup(dba->nextkey.dptr, dba->nextkey.dsize);
- }
- return NULL;
-}
-
-DBA_OPTIMIZE_FUNC(flatfile)
-{
- /* dummy */
- return SUCCESS;
-}
-
-DBA_SYNC_FUNC(flatfile)
-{
- /* dummy */
- return SUCCESS;
-}
-
-DBA_INFO_FUNC(flatfile)
-{
- return estrdup(flatfile_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_gdbm.c b/ext/dba/dba_gdbm.c
deleted file mode 100644
index f570f868da..0000000000
--- a/ext/dba/dba_gdbm.c
+++ /dev/null
@@ -1,200 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Sascha Schumann <sascha@schumann.cx> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "php.h"
-
-#if DBA_GDBM
-#include "php_gdbm.h"
-
-#ifdef GDBM_INCLUDE_FILE
-#include GDBM_INCLUDE_FILE
-#endif
-
-#define GDBM_DATA dba_gdbm_data *dba = info->dbf
-#define GDBM_GKEY datum gkey; gkey.dptr = (char *) key; gkey.dsize = keylen
-
-typedef struct {
- GDBM_FILE dbf;
- datum nextkey;
-} dba_gdbm_data;
-
-DBA_OPEN_FUNC(gdbm)
-{
- GDBM_FILE dbf;
- int gmode = 0;
- int filemode = 0644;
-
- gmode = info->mode == DBA_READER ? GDBM_READER :
- info->mode == DBA_WRITER ? GDBM_WRITER :
- info->mode == DBA_CREAT ? GDBM_WRCREAT :
- info->mode == DBA_TRUNC ? GDBM_NEWDB : -1;
-
- if(gmode == -1)
- return FAILURE; /* not possible */
-
- if(info->argc > 0) {
- convert_to_long_ex(info->argv[0]);
- filemode = Z_LVAL_PP(info->argv[0]);
- }
-
- dbf = gdbm_open(info->path, 0, gmode, filemode, NULL);
-
- if(dbf) {
- info->dbf = pemalloc(sizeof(dba_gdbm_data), info->flags&DBA_PERSISTENT);
- memset(info->dbf, 0, sizeof(dba_gdbm_data));
- ((dba_gdbm_data *) info->dbf)->dbf = dbf;
- return SUCCESS;
- }
- *error = gdbm_strerror(gdbm_errno);
- return FAILURE;
-}
-
-DBA_CLOSE_FUNC(gdbm)
-{
- GDBM_DATA;
-
- if(dba->nextkey.dptr) free(dba->nextkey.dptr);
- gdbm_close(dba->dbf);
- pefree(dba, info->flags&DBA_PERSISTENT);
-}
-
-DBA_FETCH_FUNC(gdbm)
-{
- GDBM_DATA;
- datum gval;
- char *new = NULL;
-
- GDBM_GKEY;
- gval = gdbm_fetch(dba->dbf, gkey);
- if(gval.dptr) {
- if(newlen) *newlen = gval.dsize;
- new = estrndup(gval.dptr, gval.dsize);
- free(gval.dptr);
- }
- return new;
-}
-
-DBA_UPDATE_FUNC(gdbm)
-{
- datum gval;
- GDBM_DATA;
-
- GDBM_GKEY;
- gval.dptr = (char *) val;
- gval.dsize = vallen;
-
- if(gdbm_store(dba->dbf, gkey, gval,
- mode == 1 ? GDBM_INSERT : GDBM_REPLACE) == 0)
- return SUCCESS;
- php_error_docref2(NULL TSRMLS_CC, key, val, E_WARNING, "%s", gdbm_strerror(gdbm_errno));
- return FAILURE;
-}
-
-DBA_EXISTS_FUNC(gdbm)
-{
- GDBM_DATA;
- GDBM_GKEY;
-
- return gdbm_exists(dba->dbf, gkey) ? SUCCESS : FAILURE;
-}
-
-DBA_DELETE_FUNC(gdbm)
-{
- GDBM_DATA;
- GDBM_GKEY;
-
- return gdbm_delete(dba->dbf, gkey) == -1 ? FAILURE : SUCCESS;
-}
-
-DBA_FIRSTKEY_FUNC(gdbm)
-{
- GDBM_DATA;
- datum gkey;
- char *key = NULL;
-
- if(dba->nextkey.dptr) {
- free(dba->nextkey.dptr);
- }
-
- gkey = gdbm_firstkey(dba->dbf);
- if(gkey.dptr) {
- key = estrndup(gkey.dptr, gkey.dsize);
- if(newlen) *newlen = gkey.dsize;
- dba->nextkey = gkey;
- } else {
- dba->nextkey.dptr = NULL;
- }
- return key;
-}
-
-DBA_NEXTKEY_FUNC(gdbm)
-{
- GDBM_DATA;
- char *nkey = NULL;
- datum gkey;
-
- if(!dba->nextkey.dptr) return NULL;
-
- gkey = gdbm_nextkey(dba->dbf, dba->nextkey);
- free(dba->nextkey.dptr);
- if(gkey.dptr) {
- nkey = estrndup(gkey.dptr, gkey.dsize);
- if(newlen) *newlen = gkey.dsize;
- dba->nextkey = gkey;
- } else {
- dba->nextkey.dptr = NULL;
- }
- return nkey;
-}
-
-DBA_OPTIMIZE_FUNC(gdbm)
-{
- GDBM_DATA;
- gdbm_reorganize(dba->dbf);
- return SUCCESS;
-}
-
-DBA_SYNC_FUNC(gdbm)
-{
- GDBM_DATA;
-
- gdbm_sync(dba->dbf);
- return SUCCESS;
-}
-
-DBA_INFO_FUNC(gdbm)
-{
- return estrdup(gdbm_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_inifile.c b/ext/dba/dba_inifile.c
deleted file mode 100644
index 0640785e05..0000000000
--- a/ext/dba/dba_inifile.c
+++ /dev/null
@@ -1,194 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Marcus Boerger <helly@php.net> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "php.h"
-
-#if DBA_INIFILE
-#include "php_inifile.h"
-
-#include "libinifile/inifile.h"
-
-#ifdef HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <fcntl.h>
-
-#define INIFILE_DATA \
- inifile *dba = info->dbf
-
-#define INIFILE_GKEY \
- key_type ini_key; \
- if (!key) { \
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "No key specified"); \
- return 0; \
- } \
- ini_key = inifile_key_split((char*)key) /* keylen not needed here */
-
-#define INIFILE_DONE \
- inifile_key_free(&ini_key)
-
-DBA_OPEN_FUNC(inifile)
-{
- info->dbf = inifile_alloc(info->fp, info->mode == DBA_READER, info->flags&DBA_PERSISTENT TSRMLS_CC);
-
- return info->dbf ? SUCCESS : FAILURE;
-}
-
-DBA_CLOSE_FUNC(inifile)
-{
- INIFILE_DATA;
-
- inifile_free(dba, info->flags&DBA_PERSISTENT);
-}
-
-DBA_FETCH_FUNC(inifile)
-{
- val_type ini_val;
-
- INIFILE_DATA;
- INIFILE_GKEY;
-
- ini_val = inifile_fetch(dba, &ini_key, skip TSRMLS_CC);
- *newlen = ini_val.value ? strlen(ini_val.value) : 0;
- INIFILE_DONE;
- return ini_val.value;
-}
-
-DBA_UPDATE_FUNC(inifile)
-{
- val_type ini_val;
- int res;
-
- INIFILE_DATA;
- INIFILE_GKEY;
-
- ini_val.value = val;
-
- if (mode == 1) {
- res = inifile_append(dba, &ini_key, &ini_val TSRMLS_CC);
- } else {
- res = inifile_replace(dba, &ini_key, &ini_val TSRMLS_CC);
- }
- INIFILE_DONE;
- switch(res) {
- case -1:
- php_error_docref1(NULL TSRMLS_CC, key, E_WARNING, "Operation not possible");
- return FAILURE;
- default:
- case 0:
- return SUCCESS;
- case 1:
- php_error_docref1(NULL TSRMLS_CC, key, E_WARNING, "Key already exists");
- return SUCCESS;
- }
-}
-
-DBA_EXISTS_FUNC(inifile)
-{
- val_type ini_val;
-
- INIFILE_DATA;
- INIFILE_GKEY;
-
- ini_val = inifile_fetch(dba, &ini_key, 0 TSRMLS_CC);
- INIFILE_DONE;
- if (ini_val.value) {
- inifile_val_free(&ini_val);
- return SUCCESS;
- }
- return FAILURE;
-}
-
-DBA_DELETE_FUNC(inifile)
-{
- int res;
-
- INIFILE_DATA;
- INIFILE_GKEY;
-
- res = inifile_delete(dba, &ini_key TSRMLS_CC);
-
- INIFILE_DONE;
- return (res == -1 ? FAILURE : SUCCESS);
-}
-
-DBA_FIRSTKEY_FUNC(inifile)
-{
- INIFILE_DATA;
-
- if (inifile_firstkey(dba TSRMLS_CC)) {
- char *result = inifile_key_string(&dba->curr.key);
- *newlen = strlen(result);
- return result;
- } else {
- return NULL;
- }
-}
-
-DBA_NEXTKEY_FUNC(inifile)
-{
- INIFILE_DATA;
-
- if (!dba->curr.key.group && !dba->curr.key.name) {
- return NULL;
- }
-
- if (inifile_nextkey(dba TSRMLS_CC)) {
- char *result = inifile_key_string(&dba->curr.key);
- *newlen = strlen(result);
- return result;
- } else {
- return NULL;
- }
-}
-
-DBA_OPTIMIZE_FUNC(inifile)
-{
- /* dummy */
- return SUCCESS;
-}
-
-DBA_SYNC_FUNC(inifile)
-{
- /* dummy */
- return SUCCESS;
-}
-
-DBA_INFO_FUNC(inifile)
-{
- return estrdup(inifile_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_ndbm.c b/ext/dba/dba_ndbm.c
deleted file mode 100644
index 1cab15afbe..0000000000
--- a/ext/dba/dba_ndbm.c
+++ /dev/null
@@ -1,171 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Sascha Schumann <sascha@schumann.cx> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "php.h"
-
-#if DBA_NDBM
-#include "php_ndbm.h"
-
-#include <fcntl.h>
-#ifdef NDBM_INCLUDE_FILE
-#include NDBM_INCLUDE_FILE
-#endif
-
-#define NDBM_GKEY datum gkey; gkey.dptr = (char *) key; gkey.dsize = keylen
-
-DBA_OPEN_FUNC(ndbm)
-{
- DBM *dbf;
- int gmode = 0;
- int filemode = 0644;
- dba_info *pinfo = (dba_info *) info;
-
- 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 */
- }
-
- if(info->argc > 0) {
- convert_to_long_ex(info->argv[0]);
- filemode = Z_LVAL_PP(info->argv[0]);
- }
-
- dbf = dbm_open(info->path, gmode, filemode);
-
- pinfo->dbf = dbf;
- return SUCCESS;
-}
-
-DBA_CLOSE_FUNC(ndbm)
-{
- dbm_close(info->dbf);
-}
-
-DBA_FETCH_FUNC(ndbm)
-{
- datum gval;
- char *new = NULL;
-
- NDBM_GKEY;
- gval = dbm_fetch(info->dbf, gkey);
- if(gval.dptr) {
- if(newlen) *newlen = gval.dsize;
- new = estrndup(gval.dptr, gval.dsize);
- }
- return new;
-}
-
-DBA_UPDATE_FUNC(ndbm)
-{
- datum gval;
-
- NDBM_GKEY;
- gval.dptr = (char *) val;
- gval.dsize = vallen;
-
- if(!dbm_store(info->dbf, gkey, gval, mode == 1 ? DBM_INSERT : DBM_REPLACE))
- return SUCCESS;
- return FAILURE;
-}
-
-DBA_EXISTS_FUNC(ndbm)
-{
- datum gval;
- NDBM_GKEY;
- gval = dbm_fetch(info->dbf, gkey);
- if(gval.dptr) {
- return SUCCESS;
- }
- return FAILURE;
-}
-
-DBA_DELETE_FUNC(ndbm)
-{
- NDBM_GKEY;
- return(dbm_delete(info->dbf, gkey) == -1 ? FAILURE : SUCCESS);
-}
-
-DBA_FIRSTKEY_FUNC(ndbm)
-{
- datum gkey;
- char *key = NULL;
-
- gkey = dbm_firstkey(info->dbf);
- if(gkey.dptr) {
- if(newlen) *newlen = gkey.dsize;
- key = estrndup(gkey.dptr, gkey.dsize);
- }
- return key;
-}
-
-DBA_NEXTKEY_FUNC(ndbm)
-{
- datum gkey;
- char *nkey = NULL;
-
- gkey = dbm_nextkey(info->dbf);
- if(gkey.dptr) {
- if(newlen) *newlen = gkey.dsize;
- nkey = estrndup(gkey.dptr, gkey.dsize);
- }
- return nkey;
-}
-
-DBA_OPTIMIZE_FUNC(ndbm)
-{
- return SUCCESS;
-}
-
-DBA_SYNC_FUNC(ndbm)
-{
- return SUCCESS;
-}
-
-DBA_INFO_FUNC(ndbm)
-{
- return estrdup("NDBM");
-}
-
-#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_qdbm.c b/ext/dba/dba_qdbm.c
deleted file mode 100755
index 60b0740fc7..0000000000
--- a/ext/dba/dba_qdbm.c
+++ /dev/null
@@ -1,194 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Marcin Gibula <mg@iceni.pl> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "php.h"
-
-#if DBA_QDBM
-#include "php_qdbm.h"
-
-#ifdef QDBM_INCLUDE_FILE
-#include QDBM_INCLUDE_FILE
-#endif
-
-#define QDBM_DATA dba_qdbm_data *dba = info->dbf
-
-typedef struct {
- DEPOT *dbf;
-} dba_qdbm_data;
-
-DBA_OPEN_FUNC(qdbm)
-{
- DEPOT *dbf;
-
- switch(info->mode) {
- case DBA_READER:
- dbf = dpopen(info->path, DP_OREADER, 0);
- break;
- case DBA_WRITER:
- dbf = dpopen(info->path, DP_OWRITER, 0);
- break;
- case DBA_CREAT:
- dbf = dpopen(info->path, DP_OWRITER | DP_OCREAT, 0);
- break;
- case DBA_TRUNC:
- dbf = dpopen(info->path, DP_OWRITER | DP_OCREAT | DP_OTRUNC, 0);
- break;
- default:
- return FAILURE;
- }
-
- if (dbf) {
- info->dbf = pemalloc(sizeof(dba_qdbm_data), info->flags & DBA_PERSISTENT);
- memset(info->dbf, 0, sizeof(dba_qdbm_data));
- ((dba_qdbm_data *) info->dbf)->dbf = dbf;
- return SUCCESS;
- }
-
- *error = (char *) dperrmsg(dpecode);
- return FAILURE;
-}
-
-DBA_CLOSE_FUNC(qdbm)
-{
- QDBM_DATA;
-
- dpclose(dba->dbf);
- pefree(dba, info->flags & DBA_PERSISTENT);
-}
-
-DBA_FETCH_FUNC(qdbm)
-{
- QDBM_DATA;
- char *value, *new = NULL;
- int value_size;
-
- value = dpget(dba->dbf, key, keylen, 0, -1, &value_size);
- if (value) {
- if (newlen) *newlen = value_size;
- new = estrndup(value, value_size);
- free(value);
- }
-
- return new;
-}
-
-DBA_UPDATE_FUNC(qdbm)
-{
- QDBM_DATA;
- int result;
-
- result = dpput(dba->dbf, key, keylen, val, vallen, mode == 1 ? DP_DKEEP : DP_DOVER);
- if (result)
- return SUCCESS;
-
- php_error_docref2(NULL TSRMLS_CC, key, val, E_WARNING, "%s", dperrmsg(dpecode));
- return FAILURE;
-}
-
-DBA_EXISTS_FUNC(qdbm)
-{
- QDBM_DATA;
- char *value;
-
- value = dpget(dba->dbf, key, keylen, 0, -1, NULL);
- if (value) {
- free(value);
- return SUCCESS;
- }
-
- return FAILURE;
-}
-
-DBA_DELETE_FUNC(qdbm)
-{
- QDBM_DATA;
-
- return dpout(dba->dbf, key, keylen) ? SUCCESS : FAILURE;
-}
-
-DBA_FIRSTKEY_FUNC(qdbm)
-{
- QDBM_DATA;
- int value_size;
- char *value, *new = NULL;
-
- dpiterinit(dba->dbf);
-
- value = dpiternext(dba->dbf, &value_size);
- if (value) {
- if (newlen) *newlen = value_size;
- new = estrndup(value, value_size);
- free(value);
- }
-
- return new;
-}
-
-DBA_NEXTKEY_FUNC(qdbm)
-{
- QDBM_DATA;
- int value_size;
- char *value, *new = NULL;
-
- value = dpiternext(dba->dbf, &value_size);
- if (value) {
- if (newlen) *newlen = value_size;
- new = estrndup(value, value_size);
- free(value);
- }
-
- return new;
-}
-
-DBA_OPTIMIZE_FUNC(qdbm)
-{
- QDBM_DATA;
-
- dpoptimize(dba->dbf, 0);
- return SUCCESS;
-}
-
-DBA_SYNC_FUNC(qdbm)
-{
- QDBM_DATA;
-
- dpsync(dba->dbf);
- return SUCCESS;
-}
-
-DBA_INFO_FUNC(qdbm)
-{
- return estrdup(dpversion);
-}
-
-#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/install_cdb.sh b/ext/dba/install_cdb.sh
deleted file mode 100755
index ce5f3cc856..0000000000
--- a/ext/dba/install_cdb.sh
+++ /dev/null
@@ -1,53 +0,0 @@
-#! /bin/sh
-
-# You can use this script if you want to use an external cdb lib. If you
-# compile php using --with-cdb the internal functions will be used and no
-# external library is used so that this script is not necessary.
-#
-# cdb-0.75 lacks support for installing header files and creating a
-# library which programs can link against. This shell script fills
-# the gap.
-#
-# $Id: install_cdb.sh,v 1.2 2002-11-04 17:53:04 helly Exp $
-
-if test -r "cdb.a" && test -r "auto-str.c" && test -r "byte.a"; then
- :
-else
- echo "Please execute this script in the cdb-0.75 source directory after 'make'"
- exit 1
-fi
-
-prefix=$1
-
-if test -z "$prefix"; then
- prefix=/usr/local
-fi
-
-echo "Using prefix $prefix"
-
-if mkdir -p "$prefix/include" "$prefix/lib"; then
- :
-else
- echo "Creating directories failed. Please become superuser."
- exit 1
-fi
-
-mkdir -p tmp || exit 1
-cd tmp
-ar x ../cdb.a
-ar x ../byte.a
-ar x ../unix.a
-ar x ../byte.a
-ar x ../buffer.a
-cp ../error.o .
-
-# not really portable
-ar r "$prefix/lib/libcdb.a" *
-ranlib "$prefix/lib/libcdb.a"
-cd ..
-
-rm -rf tmp
-
-cp cdb.h uint32.h "$prefix/include"
-
-echo "done"
diff --git a/ext/dba/libcdb/cdb.c b/ext/dba/libcdb/cdb.c
deleted file mode 100644
index d9b14200d5..0000000000
--- a/ext/dba/libcdb/cdb.c
+++ /dev/null
@@ -1,193 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Marcus Boerger <helly@php.net> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-/* incorporated from D.J.Bernstein's cdb-0.75 (http://cr.yp.to/cdb.html)*/
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "php.h"
-
-#include <sys/types.h>
-#include <sys/stat.h>
-#ifndef PHP_WIN32
-#include <sys/mman.h>
-#endif
-#ifdef HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-#include <string.h>
-#include <errno.h>
-#include "cdb.h"
-
-#ifndef EPROTO
-# define EPROTO -15 /* cdb 0.75's default for PROTOless systems */
-#endif
-
-/* {{{ cdb_match */
-static int cdb_match(struct cdb *c, char *key, unsigned int len, uint32 pos TSRMLS_DC)
-{
- char buf[32];
- unsigned int n;
-
- while (len > 0) {
- n = sizeof(buf);
- if (n > len)
- n = len;
- if (cdb_read(c, buf, n, pos TSRMLS_CC) == -1)
- return -1;
- if (memcmp(buf, key, n))
- return 0;
- pos += n;
- key += n;
- len -= n;
- }
- return 1;
-}
-/* }}} */
-
-/* {{{ cdb_hash */
-uint32 cdb_hash(char *buf, unsigned int len)
-{
- uint32 h;
-
- h = CDB_HASHSTART;
- while (len--) {
- h = ( h + (h << 5)) ^ (*buf++);
- }
- return h;
-}
-/* }}} */
-
-/* {{{ cdb_free */
-void cdb_free(struct cdb *c TSRMLS_DC)
-{
-}
-/* }}} */
-
-/* {{{ cdb_findstart */
-void cdb_findstart(struct cdb *c TSRMLS_DC)
-{
- c->loop = 0;
-}
-/* }}} */
-
-/* {{{ cdb_init */
-void cdb_init(struct cdb *c, php_stream *fp TSRMLS_DC)
-{
- cdb_free(c TSRMLS_CC);
- cdb_findstart(c TSRMLS_CC);
- c->fp = fp;
-}
-/* }}} */
-
-/* {{{ cdb_read */
-int cdb_read(struct cdb *c, char *buf, unsigned int len, uint32 pos TSRMLS_DC)
-{
- if (php_stream_seek(c->fp, pos, SEEK_SET) == -1) {
- errno = EPROTO;
- return -1;
- }
- while (len > 0) {
- int r;
- do {
- r = php_stream_read(c->fp, buf, len);
- } while ((r == -1) && (errno == EINTR));
- if (r == -1)
- return -1;
- if (r == 0) {
- errno = EPROTO;
- return -1;
- }
- buf += r;
- len -= r;
- }
- return 0;
-}
-/* }}} */
-
-/* {{{ cdb_findnext */
-int cdb_findnext(struct cdb *c, char *key, unsigned int len TSRMLS_DC)
-{
- char buf[8];
- uint32 pos;
- uint32 u;
-
- if (!c->loop) {
- u = cdb_hash(key, len);
- if (cdb_read(c, buf, 8, (u << 3) & 2047 TSRMLS_CC) == -1)
- return -1;
- uint32_unpack(buf + 4,&c->hslots);
- if (!c->hslots)
- return 0;
- uint32_unpack(buf, &c->hpos);
- c->khash = u;
- u >>= 8;
- u %= c->hslots;
- u <<= 3;
- c->kpos = c->hpos + u;
- }
-
- while (c->loop < c->hslots) {
- if (cdb_read(c, buf, 8, c->kpos TSRMLS_CC) == -1)
- return -1;
- uint32_unpack(buf + 4, &pos);
- if (!pos)
- return 0;
- c->loop += 1;
- c->kpos += 8;
- if (c->kpos == c->hpos + (c->hslots << 3))
- c->kpos = c->hpos;
- uint32_unpack(buf, &u);
- if (u == c->khash) {
- if (cdb_read(c, buf, 8, pos TSRMLS_CC) == -1)
- return -1;
- uint32_unpack(buf, &u);
- if (u == len)
- switch(cdb_match(c, key, len, pos + 8 TSRMLS_CC)) {
- case -1:
- return -1;
- case 1:
- uint32_unpack(buf + 4, &c->dlen);
- c->dpos = pos + 8 + len;
- return 1;
- }
- }
- }
-
- return 0;
-}
-/* }}} */
-
-/* {{{ cdb_find */
-int cdb_find(struct cdb *c, char *key, unsigned int len TSRMLS_DC)
-{
- cdb_findstart(c TSRMLS_CC);
- return cdb_findnext(c, key, len TSRMLS_CC);
-}
-/* }}} */
-
-/* {{{ cdb_version */
-char *cdb_version()
-{
- return "0.75, $Revision$";
-}
-/* }}} */
diff --git a/ext/dba/libcdb/cdb.h b/ext/dba/libcdb/cdb.h
deleted file mode 100644
index 2799d7126a..0000000000
--- a/ext/dba/libcdb/cdb.h
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Marcus Boerger <helly@php.net> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-/* incorporated from D.J.Bernstein's cdb-0.75 (http://cr.yp.to/cdb.html)*/
-
-#ifndef CDB_H
-#define CDB_H
-
-#include "uint32.h"
-
-#define CDB_HASHSTART 5381
-
-struct cdb {
- php_stream *fp;
- uint32 loop; /* number of hash slots searched under this key */
- uint32 khash; /* initialized if loop is nonzero */
- uint32 kpos; /* initialized if loop is nonzero */
- uint32 hpos; /* initialized if loop is nonzero */
- uint32 hslots; /* initialized if loop is nonzero */
- uint32 dpos; /* initialized if cdb_findnext() returns 1 */
- uint32 dlen; /* initialized if cdb_findnext() returns 1 */
-};
-
-uint32 cdb_hash(char *, unsigned int);
-
-void cdb_free(struct cdb * TSRMLS_DC);
-void cdb_init(struct cdb *, php_stream *fp TSRMLS_DC);
-
-int cdb_read(struct cdb *, char *, unsigned int, uint32 TSRMLS_DC);
-
-void cdb_findstart(struct cdb * TSRMLS_DC);
-int cdb_findnext(struct cdb *, char *, unsigned int TSRMLS_DC);
-int cdb_find(struct cdb *, char *, unsigned int TSRMLS_DC);
-
-#define cdb_datapos(c) ((c)->dpos)
-#define cdb_datalen(c) ((c)->dlen)
-
-char *cdb_version();
-
-#endif
diff --git a/ext/dba/libcdb/cdb_make.c b/ext/dba/libcdb/cdb_make.c
deleted file mode 100644
index a97053e8d6..0000000000
--- a/ext/dba/libcdb/cdb_make.c
+++ /dev/null
@@ -1,244 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Marcus Boerger <helly@php.net> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-/* incorporated from D.J.Bernstein's cdb-0.75 (http://cr.yp.to/cdb.html)*/
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "php.h"
-
-#include <sys/types.h>
-#ifdef HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-#include <stdlib.h>
-#include <stdio.h>
-#include <errno.h>
-#include "cdb.h"
-#include "cdb_make.h"
-#include "uint32.h"
-
-/* {{{ cdb_make_write */
-static int cdb_make_write(struct cdb_make *c, char *buf, uint32 sz TSRMLS_DC) {
- return php_stream_write(c->fp, buf, sz) == sz ? 0 : -1;
-}
-
-/* {{{ cdb_posplus */
-static int cdb_posplus(struct cdb_make *c, uint32 len)
-{
- uint32 newpos = c->pos + len;
- if (newpos < len) {
- errno = ENOMEM;
- return -1;
- }
- c->pos = newpos;
- return 0;
-}
-/* }}} */
-
-/* {{{ cdb_make_start */
-int cdb_make_start(struct cdb_make *c, php_stream * f TSRMLS_DC)
-{
- c->head = 0;
- c->split = 0;
- c->hash = 0;
- c->numentries = 0;
- c->fp = f;
- c->pos = sizeof(c->final);
- if (php_stream_seek(f, c->pos, SEEK_SET) == -1) {
- php_error_docref(NULL TSRMLS_CC, E_NOTICE, "Fseek failed");
- return -1;
- }
- return php_stream_tell(c->fp);
-}
-/* }}} */
-
-/* {{{ cdb_make_addend */
-int cdb_make_addend(struct cdb_make *c, unsigned int keylen, unsigned int datalen, uint32 h TSRMLS_DC)
-{
- struct cdb_hplist *head;
-
- head = c->head;
- if (!head || (head->num >= CDB_HPLIST)) {
- head = (struct cdb_hplist *) emalloc(sizeof(struct cdb_hplist));
- if (!head)
- return -1;
- head->num = 0;
- head->next = c->head;
- c->head = head;
- }
- head->hp[head->num].h = h;
- head->hp[head->num].p = c->pos;
- ++head->num;
- ++c->numentries;
- if (cdb_posplus(c,8) == -1)
- return -1;
- if (cdb_posplus(c, keylen) == -1)
- return -1;
- if (cdb_posplus(c, datalen) == -1)
- return -1;
- return 0;
-}
-/* }}} */
-
-/* {{{ cdb_make_addbegin */
-int cdb_make_addbegin(struct cdb_make *c, unsigned int keylen, unsigned int datalen TSRMLS_DC)
-{
- char buf[8];
-
- if (keylen > 0xffffffff) {
- errno = ENOMEM;
- return -1;
- }
- if (datalen > 0xffffffff) {
- errno = ENOMEM;
- return -1;
- }
-
- uint32_pack(buf, keylen);
- uint32_pack(buf + 4, datalen);
- if (cdb_make_write(c, buf, 8 TSRMLS_CC) != 0)
- return -1;
- return 0;
-}
-
-/* {{{ cdb_make_add */
-int cdb_make_add(struct cdb_make *c,char *key,unsigned int keylen,char *data,unsigned int datalen TSRMLS_DC)
-{
- if (cdb_make_addbegin(c, keylen, datalen TSRMLS_CC) == -1)
- return -1;
- if (cdb_make_write(c, key, keylen TSRMLS_CC) != 0)
- return -1;
- if (cdb_make_write(c, data, datalen TSRMLS_CC) != 0)
- return -1;
- return cdb_make_addend(c, keylen, datalen, cdb_hash(key, keylen) TSRMLS_CC);
-}
-/* }}} */
-
-/* {{{ cdb_make_finish */
-int cdb_make_finish(struct cdb_make *c TSRMLS_DC)
-{
- char buf[8];
- int i;
- uint32 len;
- uint32 u;
- uint32 memsize;
- uint32 count;
- uint32 where;
- struct cdb_hplist *x;
- struct cdb_hp *hp;
-
- for (i = 0;i < 256;++i)
- c->count[i] = 0;
-
- for (x = c->head; x; x = x->next) {
- i = x->num;
- while (i--)
- ++c->count[255 & x->hp[i].h];
- }
-
- memsize = 1;
- for (i = 0;i < 256;++i) {
- u = c->count[i] * 2;
- if (u > memsize)
- memsize = u;
- }
-
- memsize += c->numentries; /* no overflow possible up to now */
- u = (uint32) 0 - (uint32) 1;
- u /= sizeof(struct cdb_hp);
- if (memsize > u) {
- errno = ENOMEM;
- return -1;
- }
-
- c->split = (struct cdb_hp *) safe_emalloc(memsize, sizeof(struct cdb_hp), 0);
- if (!c->split)
- return -1;
-
- c->hash = c->split + c->numentries;
-
- u = 0;
- for (i = 0;i < 256;++i) {
- u += c->count[i]; /* bounded by numentries, so no overflow */
- c->start[i] = u;
- }
-
- for (x = c->head; x; x = x->next) {
- i = x->num;
- while (i--)
- c->split[--c->start[255 & x->hp[i].h]] = x->hp[i];
- }
-
- for (i = 0;i < 256;++i) {
- count = c->count[i];
-
- len = count + count; /* no overflow possible */
- uint32_pack(c->final + 8 * i,c->pos);
- uint32_pack(c->final + 8 * i + 4,len);
-
- for (u = 0;u < len;++u)
- c->hash[u].h = c->hash[u].p = 0;
-
- hp = c->split + c->start[i];
- for (u = 0;u < count;++u) {
- where = (hp->h >> 8) % len;
- while (c->hash[where].p)
- if (++where == len)
- where = 0;
- c->hash[where] = *hp++;
- }
-
- for (u = 0;u < len;++u) {
- uint32_pack(buf, c->hash[u].h);
- uint32_pack(buf + 4, c->hash[u].p);
- if (cdb_make_write(c, buf, 8 TSRMLS_CC) != 0)
- return -1;
- if (cdb_posplus(c, 8) == -1)
- return -1;
- }
- }
-
- if (c->split)
- efree(c->split);
-
- for (x = c->head; x; c->head = x) {
- x = x->next;
- efree(c->head);
- }
-
- if (php_stream_flush(c->fp) != 0)
- return -1;
- php_stream_rewind(c->fp);
- if (php_stream_tell(c->fp) != 0)
- return -1;
- if (cdb_make_write(c, c->final, sizeof(c->final) TSRMLS_CC) != 0)
- return -1;
- return php_stream_flush(c->fp);
-}
-/* }}} */
-
-/* {{{ cdb_make_version */
-char *cdb_make_version()
-{
- return "0.75, $Revision$";
-}
diff --git a/ext/dba/libcdb/cdb_make.h b/ext/dba/libcdb/cdb_make.h
deleted file mode 100644
index 5d432b5703..0000000000
--- a/ext/dba/libcdb/cdb_make.h
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Marcus Boerger <helly@php.net> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-/* incorporated from D.J.Bernstein's cdb-0.75 (http://cr.yp.to/cdb.html)*/
-
-#ifndef CDB_MAKE_H
-#define CDB_MAKE_H
-
-#include <stdio.h>
-#include "uint32.h"
-
-#define CDB_HPLIST 1000
-
-struct cdb_hp {
- uint32 h;
- uint32 p;
-};
-
-struct cdb_hplist {
- struct cdb_hp hp[CDB_HPLIST];
- struct cdb_hplist *next;
- int num;
-} ;
-
-struct cdb_make {
- /* char bspace[8192]; */
- char final[2048];
- uint32 count[256];
- uint32 start[256];
- struct cdb_hplist *head;
- struct cdb_hp *split; /* includes space for hash */
- struct cdb_hp *hash;
- uint32 numentries;
- /* buffer b; */
- uint32 pos;
- /* int fd; */
- php_stream * fp;
-};
-
-int cdb_make_start(struct cdb_make *, php_stream * TSRMLS_DC);
-int cdb_make_addbegin(struct cdb_make *, unsigned int, unsigned int TSRMLS_DC);
-int cdb_make_addend(struct cdb_make *, unsigned int, unsigned int, uint32 TSRMLS_DC);
-int cdb_make_add(struct cdb_make *, char *, unsigned int, char *, unsigned int TSRMLS_DC);
-int cdb_make_finish(struct cdb_make * TSRMLS_DC);
-char *cdb_make_version();
-
-#endif
diff --git a/ext/dba/libcdb/uint32.c b/ext/dba/libcdb/uint32.c
deleted file mode 100644
index 84f2cdb929..0000000000
--- a/ext/dba/libcdb/uint32.c
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Marcus Boerger <helly@php.net> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-/* incorporated from D.J.Bernstein's cdb-0.75 (http://cr.yp.to/cdb.html)*/
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "php.h"
-
-#include "uint32.h"
-
-/* {{{ uint32_pack */
-void uint32_pack(char *out, uint32 in)
-{
- out[0] = in&0xff; in>>=8;
- out[1] = in&0xff; in>>=8;
- out[2] = in&0xff; in>>=8;
- out[3] = in&0xff;
-}
-/* }}} */
-
-/* {{{ uint32_unpack */
-void uint32_unpack(const char *in, uint32 *out)
-{
- *out = (((uint32)(unsigned char)in[3])<<24) |
- (((uint32)(unsigned char)in[2])<<16) |
- (((uint32)(unsigned char)in[1])<<8) |
- (((uint32)(unsigned char)in[0]));
-}
-/* }}} */
diff --git a/ext/dba/libcdb/uint32.h b/ext/dba/libcdb/uint32.h
deleted file mode 100644
index c6ac9b13dc..0000000000
--- a/ext/dba/libcdb/uint32.h
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Marcus Boerger <helly@php.net> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-/* incorporated from D.J.Bernstein's cdb-0.75 (http://cr.yp.to/cdb.html)*/
-
-#ifndef UINT32_H
-#define UINT32_H
-
-#if SIZEOF_INT == 4
-/* Most 32-bit and 64-bit systems have 32-bit ints */
-typedef unsigned int uint32;
-#elif SIZEOF_LONG == 4
-/* 16-bit systems? */
-typedef unsigned long uint32;
-#else
-#error Need type which holds 32 bits
-#endif
-
-void uint32_pack(char *out, uint32 in);
-void uint32_unpack(const char *in, uint32 *out);
-
-#endif
diff --git a/ext/dba/libflatfile/flatfile.c b/ext/dba/libflatfile/flatfile.c
deleted file mode 100644
index e6e253b663..0000000000
--- a/ext/dba/libflatfile/flatfile.c
+++ /dev/null
@@ -1,321 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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. |
- +----------------------------------------------------------------------+
- | Authors: Marcus Boerger <helly@php.net> |
- | based on ext/db/db.c by: |
- | Rasmus Lerdorf <rasmus@php.net> |
- | Jim Winstead <jimw@php.net> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "php.h"
-#include "php_globals.h"
-#include "safe_mode.h"
-
-#include <stdlib.h>
-#include <string.h>
-#include <errno.h>
-#if HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-
-#include "flatfile.h"
-
-#define FLATFILE_BLOCK_SIZE 1024
-
-/*
- * ret = -1 means that database was opened for read-only
- * ret = 0 success
- * ret = 1 key already exists - nothing done
- */
-
-/* {{{ flatfile_store
- */
-int flatfile_store(flatfile *dba, datum key_datum, datum value_datum, int mode TSRMLS_DC) {
- if (mode == FLATFILE_INSERT) {
- if (flatfile_findkey(dba, key_datum TSRMLS_CC)) {
- return 1;
- }
- php_stream_seek(dba->fp, 0L, SEEK_END);
- php_stream_printf(dba->fp TSRMLS_CC, "%d\n", key_datum.dsize);
- php_stream_flush(dba->fp);
- if (php_stream_write(dba->fp, key_datum.dptr, key_datum.dsize) < key_datum.dsize) {
- return -1;
- }
- php_stream_printf(dba->fp TSRMLS_CC, "%d\n", value_datum.dsize);
- php_stream_flush(dba->fp);
- if (php_stream_write(dba->fp, value_datum.dptr, value_datum.dsize) < value_datum.dsize) {
- return -1;
- }
- } else { /* FLATFILE_REPLACE */
- flatfile_delete(dba, key_datum TSRMLS_CC);
- php_stream_printf(dba->fp TSRMLS_CC, "%d\n", key_datum.dsize);
- php_stream_flush(dba->fp);
- if (php_stream_write(dba->fp, key_datum.dptr, key_datum.dsize) < key_datum.dsize) {
- return -1;
- }
- php_stream_printf(dba->fp TSRMLS_CC, "%d\n", value_datum.dsize);
- if (php_stream_write(dba->fp, value_datum.dptr, value_datum.dsize) < value_datum.dsize) {
- return -1;
- }
- }
-
- php_stream_flush(dba->fp);
- return 0;
-}
-/* }}} */
-
-/* {{{ flatfile_fetch
- */
-datum flatfile_fetch(flatfile *dba, datum key_datum TSRMLS_DC) {
- datum value_datum = {NULL, 0};
- char buf[16];
-
- if (flatfile_findkey(dba, key_datum TSRMLS_CC)) {
- if (php_stream_gets(dba->fp, buf, sizeof(buf))) {
- value_datum.dsize = atoi(buf);
- value_datum.dptr = safe_emalloc(value_datum.dsize, 1, 1);
- value_datum.dsize = php_stream_read(dba->fp, value_datum.dptr, value_datum.dsize);
- } else {
- value_datum.dptr = NULL;
- value_datum.dsize = 0;
- }
- }
- return value_datum;
-}
-/* }}} */
-
-/* {{{ flatfile_delete
- */
-int flatfile_delete(flatfile *dba, datum key_datum TSRMLS_DC) {
- char *key = key_datum.dptr;
- size_t size = key_datum.dsize;
- size_t buf_size = FLATFILE_BLOCK_SIZE;
- char *buf = emalloc(buf_size);
- size_t num;
- size_t pos;
-
- php_stream_rewind(dba->fp);
- while(!php_stream_eof(dba->fp)) {
- /* read in the length of the key name */
- if (!php_stream_gets(dba->fp, buf, 15)) {
- break;
- }
- num = atoi(buf);
- if (num >= buf_size) {
- buf_size = num + FLATFILE_BLOCK_SIZE;
- buf = erealloc(buf, buf_size);
- }
- pos = php_stream_tell(dba->fp);
-
- /* read in the key name */
- num = php_stream_read(dba->fp, buf, num);
- if (num < 0) {
- break;
- }
-
- if (size == num && !memcmp(buf, key, size)) {
- php_stream_seek(dba->fp, pos, SEEK_SET);
- php_stream_putc(dba->fp, 0);
- php_stream_flush(dba->fp);
- php_stream_seek(dba->fp, 0L, SEEK_END);
- efree(buf);
- return SUCCESS;
- }
-
- /* read in the length of the value */
- if (!php_stream_gets(dba->fp, buf, 15)) {
- break;
- }
- num = atoi(buf);
- if (num >= buf_size) {
- buf_size = num + FLATFILE_BLOCK_SIZE;
- buf = erealloc(buf, buf_size);
- }
- /* read in the value */
- num = php_stream_read(dba->fp, buf, num);
- if (num < 0) {
- break;
- }
- }
- efree(buf);
- return FAILURE;
-}
-/* }}} */
-
-/* {{{ flatfile_findkey
- */
-int flatfile_findkey(flatfile *dba, datum key_datum TSRMLS_DC) {
- size_t buf_size = FLATFILE_BLOCK_SIZE;
- char *buf = emalloc(buf_size);
- size_t num;
- int ret=0;
- void *key = key_datum.dptr;
- size_t size = key_datum.dsize;
-
- php_stream_rewind(dba->fp);
- while (!php_stream_eof(dba->fp)) {
- if (!php_stream_gets(dba->fp, buf, 15)) {
- break;
- }
- num = atoi(buf);
- if (num >= buf_size) {
- buf_size = num + FLATFILE_BLOCK_SIZE;
- buf = erealloc(buf, buf_size);
- }
- num = php_stream_read(dba->fp, buf, num);
- if (num < 0) {
- break;
- }
- if (size == num) {
- if (!memcmp(buf, key, size)) {
- ret = 1;
- break;
- }
- }
- if (!php_stream_gets(dba->fp, buf, 15)) {
- break;
- }
- num = atoi(buf);
- if (num >= buf_size) {
- buf_size = num + FLATFILE_BLOCK_SIZE;
- buf = erealloc(buf, buf_size);
- }
- num = php_stream_read(dba->fp, buf, num);
- if (num < 0) {
- break;
- }
- }
- efree(buf);
- return ret;
-}
-/* }}} */
-
-/* {{{ flatfile_firstkey
- */
-datum flatfile_firstkey(flatfile *dba TSRMLS_DC) {
- datum res;
- size_t num;
- size_t buf_size = FLATFILE_BLOCK_SIZE;
- char *buf = emalloc(buf_size);
-
- php_stream_rewind(dba->fp);
- while(!php_stream_eof(dba->fp)) {
- if (!php_stream_gets(dba->fp, buf, 15)) {
- break;
- }
- num = atoi(buf);
- if (num >= buf_size) {
- buf_size = num + FLATFILE_BLOCK_SIZE;
- buf = erealloc(buf, buf_size);
- }
- num = php_stream_read(dba->fp, buf, num);
- if (num < 0) {
- break;
- }
- if (*(buf) != 0) {
- dba->CurrentFlatFilePos = php_stream_tell(dba->fp);
- res.dptr = buf;
- res.dsize = num;
- return res;
- }
- if (!php_stream_gets(dba->fp, buf, 15)) {
- break;
- }
- num = atoi(buf);
- if (num >= buf_size) {
- buf_size = num + FLATFILE_BLOCK_SIZE;
- buf = erealloc(buf, buf_size);
- }
- num = php_stream_read(dba->fp, buf, num);
- if (num < 0) {
- break;
- }
- }
- efree(buf);
- res.dptr = NULL;
- res.dsize = 0;
- return res;
-}
-/* }}} */
-
-/* {{{ flatfile_nextkey
- */
-datum flatfile_nextkey(flatfile *dba TSRMLS_DC) {
- datum res;
- size_t num;
- size_t buf_size = FLATFILE_BLOCK_SIZE;
- char *buf = emalloc(buf_size);
-
- php_stream_seek(dba->fp, dba->CurrentFlatFilePos, SEEK_SET);
- while(!php_stream_eof(dba->fp)) {
- if (!php_stream_gets(dba->fp, buf, 15)) {
- break;
- }
- num = atoi(buf);
- if (num >= buf_size) {
- buf_size = num + FLATFILE_BLOCK_SIZE;
- buf = erealloc(buf, buf_size);
- }
- num = php_stream_read(dba->fp, buf, num);
- if (num < 0) {
- break;
- }
- if (!php_stream_gets(dba->fp, buf, 15)) {
- break;
- }
- num = atoi(buf);
- if (num >= buf_size) {
- buf_size = num + FLATFILE_BLOCK_SIZE;
- buf = erealloc(buf, buf_size);
- }
- num = php_stream_read(dba->fp, buf, num);
- if (num < 0) {
- break;
- }
- if (*(buf)!=0) {
- dba->CurrentFlatFilePos = php_stream_tell(dba->fp);
- res.dptr = buf;
- res.dsize = num;
- return res;
- }
- }
- efree(buf);
- res.dptr = NULL;
- res.dsize = 0;
- return res;
-}
-/* }}} */
-
-/* {{{ flatfile_version */
-char *flatfile_version()
-{
- return "1.0, $Revision$";
-}
-/* }}} */
-
-/*
- * 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/libflatfile/flatfile.h b/ext/dba/libflatfile/flatfile.h
deleted file mode 100644
index 7c79667b37..0000000000
--- a/ext/dba/libflatfile/flatfile.h
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Marcus Boerger <helly@php.net> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-#ifndef PHP_LIB_FLATFILE_H
-#define PHP_LIB_FLATFILE_H
-
-typedef struct {
- char *dptr;
- size_t dsize;
-} datum;
-
-typedef struct {
- char *lockfn;
- int lockfd;
- php_stream *fp;
- size_t CurrentFlatFilePos;
- datum nextkey;
-} flatfile;
-
-#define FLATFILE_INSERT 1
-#define FLATFILE_REPLACE 0
-
-int flatfile_store(flatfile *dba, datum key_datum, datum value_datum, int mode TSRMLS_DC);
-datum flatfile_fetch(flatfile *dba, datum key_datum TSRMLS_DC);
-int flatfile_delete(flatfile *dba, datum key_datum TSRMLS_DC);
-int flatfile_findkey(flatfile *dba, datum key_datum TSRMLS_DC);
-datum flatfile_firstkey(flatfile *dba TSRMLS_DC);
-datum flatfile_nextkey(flatfile *dba TSRMLS_DC);
-char *flatfile_version();
-
-#endif
diff --git a/ext/dba/libinifile/inifile.c b/ext/dba/libinifile/inifile.c
deleted file mode 100644
index ba233cf109..0000000000
--- a/ext/dba/libinifile/inifile.c
+++ /dev/null
@@ -1,592 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Marcus Boerger <helly@php.net> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "php.h"
-#include "php_globals.h"
-#include "safe_mode.h"
-
-#include <stdlib.h>
-#include <string.h>
-#include <errno.h>
-#if HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-
-#include "inifile.h"
-
-/* ret = -1 means that database was opened for read-only
- * ret = 0 success
- * ret = 1 key already exists - nothing done
- */
-
-/* {{{ inifile_version */
-char *inifile_version()
-{
- return "1.0, $Revision$";
-}
-/* }}} */
-
-/* {{{ inifile_free_key */
-void inifile_key_free(key_type *key)
-{
- if (key->group) {
- efree(key->group);
- }
- if (key->name) {
- efree(key->name);
- }
- memset(key, 0, sizeof(key_type));
-}
-/* }}} */
-
-/* {{{ inifile_free_val */
-void inifile_val_free(val_type *val)
-{
- if (val->value) {
- efree(val->value);
- }
- memset(val, 0, sizeof(val_type));
-}
-/* }}} */
-
-/* {{{ inifile_free_val */
-void inifile_line_free(line_type *ln)
-{
- inifile_key_free(&ln->key);
- inifile_val_free(&ln->val);
- ln->pos = 0;
-}
-/* }}} */
-
-/* {{{ inifile_alloc */
-inifile * inifile_alloc(php_stream *fp, int readonly, int persistent TSRMLS_DC)
-{
- inifile *dba;
-
- if (!readonly) {
- if (!php_stream_truncate_supported(fp)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Can't truncate this stream");
- return NULL;
- }
- }
-
- dba = pemalloc(sizeof(inifile), persistent);
- memset(dba, 0, sizeof(inifile));
- dba->fp = fp;
- dba->readonly = readonly;
- return dba;
-}
-/* }}} */
-
-/* {{{ inifile_free */
-void inifile_free(inifile *dba, int persistent)
-{
- if (dba) {
- inifile_line_free(&dba->curr);
- inifile_line_free(&dba->next);
- pefree(dba, persistent);
- }
-}
-/* }}} */
-
-/* {{{ inifile_key_split */
-key_type inifile_key_split(const char *group_name)
-{
- key_type key;
- char *name;
-
- if (group_name[0] == '[' && (name = strchr(group_name, ']')) != NULL) {
- key.group = estrndup(group_name+1, name - (group_name + 1));
- key.name = estrdup(name+1);
- } else {
- key.group = estrdup("");
- key.name = estrdup(group_name);
- }
- return key;
-}
-/* }}} */
-
-/* {{{ inifile_key_string */
-char * inifile_key_string(const key_type *key)
-{
- if (key->group && *key->group) {
- char *result;
- spprintf(&result, 0, "[%s]%s", key->group, key->name ? key->name : "");
- return result;
- } else if (key->name) {
- return estrdup(key->name);
- } else {
- return NULL;
- }
-}
-/* }}} */
-
-/* {{{ etrim */
-static char *etrim(const char *str)
-{
- char *val;
- size_t l;
-
- if (!str) {
- return NULL;
- }
- val = (char*)str;
- while (*val && strchr(" \t\r\n", *val)) {
- val++;
- }
- l = strlen(val);
- while (l && (strchr(" \t\r\n", val[l-1]))) {
- l--;
- }
- return estrndup(val, l);
-}
-/* }}} */
-
-/* {{{ inifile_findkey
- */
-static int inifile_read(inifile *dba, line_type *ln TSRMLS_DC) {
- char *fline;
- char *pos;
-
- inifile_val_free(&ln->val);
- while ((fline = php_stream_gets(dba->fp, NULL, 0)) != NULL) {
- if (fline) {
- if (fline[0] == '[') {
- /* A value name cannot start with '['
- * So either we find a ']' or we found an error
- */
- pos = strchr(fline+1, ']');
- if (pos) {
- *pos = '\0';
- inifile_key_free(&ln->key);
- ln->key.group = etrim(fline+1);
- ln->key.name = estrdup("");
- ln->pos = php_stream_tell(dba->fp);
- efree(fline);
- return 1;
- } else {
- efree(fline);
- continue;
- }
- } else {
- pos = strchr(fline, '=');
- if (pos) {
- *pos = '\0';
- /* keep group or make empty if not existent */
- if (!ln->key.group) {
- ln->key.group = estrdup("");
- }
- if (ln->key.name) {
- efree(ln->key.name);
- }
- ln->key.name = etrim(fline);
- ln->val.value = etrim(pos+1);
- ln->pos = php_stream_tell(dba->fp);
- efree(fline);
- return 1;
- } else {
- /* simply ignore lines without '='
- * those should be comments
- */
- efree(fline);
- continue;
- }
- }
- }
- }
- inifile_line_free(ln);
- return 0;
-}
-/* }}} */
-
-/* {{{ inifile_key_cmp */
-/* 0 = EQUAL
- * 1 = GROUP-EQUAL,NAME-DIFFERENT
- * 2 = DIFFERENT
- */
-static int inifile_key_cmp(const key_type *k1, const key_type *k2 TSRMLS_DC)
-{
- assert(k1->group && k1->name && k2->group && k2->name);
-
- if (!strcasecmp(k1->group, k2->group)) {
- if (!strcasecmp(k1->name, k2->name)) {
- return 0;
- } else {
- return 1;
- }
- } else {
- return 2;
- }
-}
-/* }}} */
-
-/* {{{ inifile_fetch
- */
-val_type inifile_fetch(inifile *dba, const key_type *key, int skip TSRMLS_DC) {
- line_type ln = {{NULL,NULL},{NULL}};
- val_type val;
- int res, grp_eq = 0;
-
- if (skip == -1 && dba->next.key.group && dba->next.key.name && !inifile_key_cmp(&dba->next.key, key TSRMLS_CC)) {
- /* we got position already from last fetch */
- php_stream_seek(dba->fp, dba->next.pos, SEEK_SET);
- } else {
- /* specific instance or not same key -> restart search */
- /* the slow way: restart and seacrch */
- php_stream_rewind(dba->fp);
- inifile_line_free(&dba->next);
- }
- if (skip == -1) {
- skip = 0;
- }
- while(inifile_read(dba, &ln TSRMLS_CC)) {
- if (!(res=inifile_key_cmp(&ln.key, key TSRMLS_CC))) {
- if (!skip) {
- val.value = estrdup(ln.val.value ? ln.val.value : "");
- /* allow faster access by updating key read into next */
- inifile_line_free(&dba->next);
- dba->next = ln;
- dba->next.pos = php_stream_tell(dba->fp);
- return val;
- }
- skip--;
- } else if (res == 1) {
- grp_eq = 1;
- } else if (grp_eq) {
- /* we are leaving group now: that means we cannot find the key */
- break;
- }
- }
- inifile_line_free(&ln);
- dba->next.pos = php_stream_tell(dba->fp);
- return ln.val;
-}
-/* }}} */
-
-/* {{{ inifile_firstkey
- */
-int inifile_firstkey(inifile *dba TSRMLS_DC) {
- inifile_line_free(&dba->curr);
- dba->curr.pos = 0;
- return inifile_nextkey(dba TSRMLS_CC);
-}
-/* }}} */
-
-/* {{{ inifile_nextkey
- */
-int inifile_nextkey(inifile *dba TSRMLS_DC) {
- line_type ln = {{NULL,NULL},{NULL}};
-
- /*inifile_line_free(&dba->next); ??? */
- php_stream_seek(dba->fp, dba->curr.pos, SEEK_SET);
- ln.key.group = estrdup(dba->curr.key.group ? dba->curr.key.group : "");
- inifile_read(dba, &ln TSRMLS_CC);
- inifile_line_free(&dba->curr);
- dba->curr = ln;
- return ln.key.group || ln.key.name;
-}
-/* }}} */
-
-/* {{{ inifile_truncate
- */
-static int inifile_truncate(inifile *dba, size_t size TSRMLS_DC)
-{
- int res;
-
- if ((res=php_stream_truncate_set_size(dba->fp, size)) != 0) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Error in ftruncate: %d", res);
- return FAILURE;
- }
- php_stream_seek(dba->fp, size, SEEK_SET);
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ inifile_find_group
- * if found pos_grp_start points to "[group_name]"
- */
-static int inifile_find_group(inifile *dba, const key_type *key, size_t *pos_grp_start TSRMLS_DC)
-{
- int ret = FAILURE;
-
- php_stream_flush(dba->fp);
- php_stream_seek(dba->fp, 0, SEEK_SET);
- inifile_line_free(&dba->curr);
- inifile_line_free(&dba->next);
-
- if (key->group && strlen(key->group)) {
- int res;
- line_type ln = {{NULL,NULL},{NULL}};
-
- res = 1;
- while(inifile_read(dba, &ln TSRMLS_CC)) {
- if ((res=inifile_key_cmp(&ln.key, key TSRMLS_CC)) < 2) {
- ret = SUCCESS;
- break;
- }
- *pos_grp_start = php_stream_tell(dba->fp);
- }
- inifile_line_free(&ln);
- } else {
- *pos_grp_start = 0;
- ret = SUCCESS;
- }
- if (ret == FAILURE) {
- *pos_grp_start = php_stream_tell(dba->fp);
- }
- return ret;
-}
-/* }}} */
-
-/* {{{ inifile_next_group
- * only valid after a call to inifile_find_group
- * if any next group is found pos_grp_start points to "[group_name]" or whitespace before that
- */
-static int inifile_next_group(inifile *dba, const key_type *key, size_t *pos_grp_start TSRMLS_DC)
-{
- int ret = FAILURE;
- line_type ln = {{NULL,NULL},{NULL}};
-
- *pos_grp_start = php_stream_tell(dba->fp);
- ln.key.group = estrdup(key->group);
- while(inifile_read(dba, &ln TSRMLS_CC)) {
- if (inifile_key_cmp(&ln.key, key TSRMLS_CC) == 2) {
- ret = SUCCESS;
- break;
- }
- *pos_grp_start = php_stream_tell(dba->fp);
- }
- inifile_line_free(&ln);
- return ret;
-}
-/* }}} */
-
-/* {{{ inifile_copy_to
- */
-static int inifile_copy_to(inifile *dba, size_t pos_start, size_t pos_end, inifile **ini_copy TSRMLS_DC)
-{
- php_stream *fp;
-
- if (pos_start == pos_end) {
- *ini_copy = NULL;
- return SUCCESS;
- }
- if ((fp = php_stream_temp_create(0, 64 * 1024)) == NULL) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Could not create temporary stream");
- *ini_copy = NULL;
- return FAILURE;
- }
-
- if ((*ini_copy = inifile_alloc(fp, 1, 0 TSRMLS_CC)) == NULL) {
- /* writes error */
- return FAILURE;
- }
- php_stream_seek(dba->fp, pos_start, SEEK_SET);
- if (!php_stream_copy_to_stream(dba->fp, fp, pos_end - pos_start)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Could not copy group [%d - %d] to temporary stream", pos_start, pos_end);
- return FAILURE;
- }
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ inifile_filter
- * copy from to dba while ignoring key name (group must equal)
- */
-static int inifile_filter(inifile *dba, inifile *from, const key_type *key TSRMLS_DC)
-{
- size_t pos_start = 0, pos_next = 0, pos_curr;
- int ret = SUCCESS;
- line_type ln = {{NULL,NULL},{NULL}};
-
- php_stream_seek(from->fp, 0, SEEK_SET);
- php_stream_seek(dba->fp, 0, SEEK_END);
- while(inifile_read(from, &ln TSRMLS_CC)) {
- switch(inifile_key_cmp(&ln.key, key TSRMLS_CC)) {
- case 0:
- pos_curr = php_stream_tell(from->fp);
- if (pos_start != pos_next) {
- php_stream_seek(from->fp, pos_start, SEEK_SET);
- if (!php_stream_copy_to_stream(from->fp, dba->fp, pos_next - pos_start)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Could not copy [%d - %d] from temporary stream", pos_next, pos_start);
- ret = FAILURE;
- }
- php_stream_seek(from->fp, pos_curr, SEEK_SET);
- }
- pos_next = pos_start = pos_curr;
- break;
- case 1:
- pos_next = php_stream_tell(from->fp);
- break;
- case 2:
- /* the function is meant to process only entries from same group */
- assert(0);
- break;
- }
- }
- if (pos_start != pos_next) {
- php_stream_seek(from->fp, pos_start, SEEK_SET);
- if (!php_stream_copy_to_stream(from->fp, dba->fp, pos_next - pos_start)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Could not copy [%d - %d] from temporary stream", pos_next, pos_start);
- ret = FAILURE;
- }
- }
- inifile_line_free(&ln);
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ inifile_delete_replace_append
- */
-static int inifile_delete_replace_append(inifile *dba, const key_type *key, const val_type *value, int append TSRMLS_DC)
-{
- size_t pos_grp_start, pos_grp_next;
- inifile *ini_tmp = NULL;
- php_stream *fp_tmp = NULL;
- int ret;
-
- /* 1) Search group start
- * 2) Search next group
- * 3) If not append: Copy group to ini_tmp
- * 4) Open temp_stream and copy remainder
- * 5) Truncate stream
- * 6) If not append AND key.name given: Filtered copy back from ini_tmp
- * to stream. Otherwise the user wanted to delete the group.
- * 7) Append value if given
- * 8) Append temporary stream
- */
-
- assert(!append || (key->name && value)); /* missuse */
-
- /* 1 - 3 */
- inifile_find_group(dba, key, &pos_grp_start TSRMLS_CC);
- inifile_next_group(dba, key, &pos_grp_next TSRMLS_CC);
- if (append) {
- ret = SUCCESS;
- } else {
- ret = inifile_copy_to(dba, pos_grp_start, pos_grp_next, &ini_tmp TSRMLS_CC);
- }
-
- /* 4 */
- if (ret == SUCCESS) {
- fp_tmp = php_stream_temp_create(0, 64 * 1024);
- if (!fp_tmp) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Could not create temporary stream");
- ret = FAILURE;
- } else {
- php_stream_seek(dba->fp, 0, SEEK_END);
- if (pos_grp_next != (size_t)php_stream_tell(dba->fp)) {
- php_stream_seek(dba->fp, pos_grp_next, SEEK_SET);
- if (!php_stream_copy_to_stream(dba->fp, fp_tmp, PHP_STREAM_COPY_ALL)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Could not copy remainder to temporary stream");
- ret = FAILURE;
- }
- }
- }
- }
-
- /* 5 */
- if (ret == SUCCESS) {
- ret = inifile_truncate(dba, append ? pos_grp_next : pos_grp_start TSRMLS_CC); /* writes error on fail */
- }
-
- if (ret == SUCCESS) {
- if (key->name && strlen(key->name)) {
- /* 6 */
- if (!append && ini_tmp) {
- ret = inifile_filter(dba, ini_tmp, key TSRMLS_CC);
- }
-
- /* 7 */
- /* important: do not query ret==SUCCESS again: inifile_filter might fail but
- * however next operation must be done.
- */
- if (value) {
- if (pos_grp_start == pos_grp_next && key->group && strlen(key->group)) {
- php_stream_printf(dba->fp TSRMLS_CC, "[%s]\n", key->group);
- }
- php_stream_printf(dba->fp TSRMLS_CC, "%s=%s\n", key->name, value->value ? value->value : "");
- }
- }
-
- /* 8 */
- /* important: do not query ret==SUCCESS again: inifile_filter might fail but
- * however next operation must be done.
- */
- if (fp_tmp && php_stream_tell(fp_tmp)) {
- php_stream_seek(fp_tmp, 0, SEEK_SET);
- php_stream_seek(dba->fp, 0, SEEK_END);
- if (!php_stream_copy_to_stream(fp_tmp, dba->fp, PHP_STREAM_COPY_ALL)) {
- php_error_docref(NULL TSRMLS_CC, E_ERROR, "Could not copy from temporary stream - ini file truncated");
- ret = FAILURE;
- }
- }
- }
-
- if (ini_tmp) {
- php_stream_close(ini_tmp->fp);
- inifile_free(ini_tmp, 0);
- }
- if (fp_tmp) {
- php_stream_close(fp_tmp);
- }
- php_stream_flush(dba->fp);
- php_stream_seek(dba->fp, 0, SEEK_SET);
-
- return ret;
-}
-/* }}} */
-
-/* {{{ inifile_delete
- */
-int inifile_delete(inifile *dba, const key_type *key TSRMLS_DC)
-{
- return inifile_delete_replace_append(dba, key, NULL, 0 TSRMLS_CC);
-}
-/* }}} */
-
-/* {{{ inifile_relace
- */
-int inifile_replace(inifile *dba, const key_type *key, const val_type *value TSRMLS_DC)
-{
- return inifile_delete_replace_append(dba, key, value, 0 TSRMLS_CC);
-}
-/* }}} */
-
-/* {{{ inifile_append
- */
-int inifile_append(inifile *dba, const key_type *key, const val_type *value TSRMLS_DC)
-{
- return inifile_delete_replace_append(dba, key, value, 1 TSRMLS_CC);
-}
-/* }}} */
-
-/*
- * 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/libinifile/inifile.h b/ext/dba/libinifile/inifile.h
deleted file mode 100644
index d5e4d74be8..0000000000
--- a/ext/dba/libinifile/inifile.h
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Marcus Boerger <helly@php.net> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-#ifndef PHP_LIB_INIFILE_H
-#define PHP_LIB_INIFILE_H
-
-typedef struct {
- char *group;
- char *name;
-} key_type;
-
-typedef struct {
- char *value;
-} val_type;
-
-typedef struct {
- key_type key;
- val_type val;
- size_t pos;
-} line_type;
-
-typedef struct {
- char *lockfn;
- int lockfd;
- php_stream *fp;
- int readonly;
- line_type curr;
- line_type next;
-} inifile;
-
-val_type inifile_fetch(inifile *dba, const key_type *key, int skip TSRMLS_DC);
-int inifile_firstkey(inifile *dba TSRMLS_DC);
-int inifile_nextkey(inifile *dba TSRMLS_DC);
-int inifile_delete(inifile *dba, const key_type *key TSRMLS_DC);
-int inifile_replace(inifile *dba, const key_type *key, const val_type *val TSRMLS_DC);
-int inifile_append(inifile *dba, const key_type *key, const val_type *val TSRMLS_DC);
-char *inifile_version();
-
-key_type inifile_key_split(const char *group_name);
-char * inifile_key_string(const key_type *key);
-
-void inifile_key_free(key_type *key);
-void inifile_val_free(val_type *val);
-void inifile_line_free(line_type *ln);
-
-inifile * inifile_alloc(php_stream *fp, int readonly, int persistent TSRMLS_DC);
-void inifile_free(inifile *dba, int persistent);
-
-#endif
diff --git a/ext/dba/php_cdb.h b/ext/dba/php_cdb.h
deleted file mode 100644
index a046f0796b..0000000000
--- a/ext/dba/php_cdb.h
+++ /dev/null
@@ -1,12 +0,0 @@
-#ifndef PHP_CDB_H
-#define PHP_CDB_H
-
-#if DBA_CDB
-
-#include "php_dba.h"
-
-DBA_FUNCS(cdb);
-
-#endif
-
-#endif
diff --git a/ext/dba/php_db2.h b/ext/dba/php_db2.h
deleted file mode 100644
index 2a95223a85..0000000000
--- a/ext/dba/php_db2.h
+++ /dev/null
@@ -1,12 +0,0 @@
-#ifndef PHP_DB2_H
-#define PHP_DB2_H
-
-#if DBA_DB2
-
-#include "php_dba.h"
-
-DBA_FUNCS(db2);
-
-#endif
-
-#endif
diff --git a/ext/dba/php_db3.h b/ext/dba/php_db3.h
deleted file mode 100644
index 58bb0b62a0..0000000000
--- a/ext/dba/php_db3.h
+++ /dev/null
@@ -1,12 +0,0 @@
-#ifndef PHP_DB3_H
-#define PHP_DB3_H
-
-#if DBA_DB3
-
-#include "php_dba.h"
-
-DBA_FUNCS(db3);
-
-#endif
-
-#endif
diff --git a/ext/dba/php_db4.h b/ext/dba/php_db4.h
deleted file mode 100644
index fa814c3f5e..0000000000
--- a/ext/dba/php_db4.h
+++ /dev/null
@@ -1,12 +0,0 @@
-#ifndef PHP_DB4_H
-#define PHP_DB4_H
-
-#if DBA_DB4
-
-#include "php_dba.h"
-
-DBA_FUNCS(db4);
-
-#endif
-
-#endif
diff --git a/ext/dba/php_dba.h b/ext/dba/php_dba.h
deleted file mode 100644
index fb8b6faa01..0000000000
--- a/ext/dba/php_dba.h
+++ /dev/null
@@ -1,153 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Sascha Schumann <sascha@schumann.cx> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-#ifndef PHP_DBA_H
-#define PHP_DBA_H
-
-#if HAVE_DBA
-
-typedef enum {
- /* do not allow 0 here */
- DBA_READER = 1,
- DBA_WRITER,
- DBA_TRUNC,
- DBA_CREAT
-} dba_mode_t;
-
-typedef struct dba_lock {
- php_stream *fp;
- char *name;
- int mode; /* LOCK_EX,LOCK_SH */
-} dba_lock;
-
-typedef struct dba_info {
- /* public */
- void *dbf; /* ptr to private data or whatever */
- char *path;
- dba_mode_t mode;
- php_stream *fp; /* this is the database stream for builtin handlers */
- int fd;
- /* arg[cv] are only available when the dba_open handler is called! */
- int argc;
- zval ***argv;
- /* private */
- int flags; /* whether and how dba did locking and other flags*/
- struct dba_handler *hnd;
- dba_lock lock;
-} dba_info;
-
-#define DBA_LOCK_READER (0x0001)
-#define DBA_LOCK_WRITER (0x0002)
-#define DBA_LOCK_CREAT (0x0004)
-#define DBA_LOCK_TRUNC (0x0008)
-
-#define DBA_LOCK_EXT (0)
-#define DBA_LOCK_ALL (DBA_LOCK_READER|DBA_LOCK_WRITER|DBA_LOCK_CREAT|DBA_LOCK_TRUNC)
-#define DBA_LOCK_WCT (DBA_LOCK_WRITER|DBA_LOCK_CREAT|DBA_LOCK_TRUNC)
-
-#define DBA_STREAM_OPEN (0x0010)
-#define DBA_PERSISTENT (0x0020)
-
-#define DBA_CAST_AS_FD (0x0050)
-#define DBA_NO_APPEND (0x00D0)
-
-extern zend_module_entry dba_module_entry;
-#define dba_module_ptr &dba_module_entry
-
-typedef struct dba_handler {
- char *name; /* handler name */
- int flags; /* whether and how dba does locking and other flags*/
- int (*open)(dba_info *, char **error TSRMLS_DC);
- void (*close)(dba_info * TSRMLS_DC);
- char* (*fetch)(dba_info *, char *, int, int, int * TSRMLS_DC);
- int (*update)(dba_info *, char *, int, char *, int, int TSRMLS_DC);
- int (*exists)(dba_info *, char *, int TSRMLS_DC);
- int (*delete)(dba_info *, char *, int TSRMLS_DC);
- char* (*firstkey)(dba_info *, int * TSRMLS_DC);
- char* (*nextkey)(dba_info *, int * TSRMLS_DC);
- int (*optimize)(dba_info * TSRMLS_DC);
- int (*sync)(dba_info * TSRMLS_DC);
- char* (*info)(struct dba_handler *hnd, dba_info * TSRMLS_DC);
- /* dba_info==NULL: Handler info, dba_info!=NULL: Database info */
-} dba_handler;
-
-/* common prototypes which must be supplied by modules */
-
-#define DBA_OPEN_FUNC(x) \
- int dba_open_##x(dba_info *info, char **error TSRMLS_DC)
-#define DBA_CLOSE_FUNC(x) \
- void dba_close_##x(dba_info *info TSRMLS_DC)
-#define DBA_FETCH_FUNC(x) \
- char *dba_fetch_##x(dba_info *info, char *key, int keylen, int skip, int *newlen TSRMLS_DC)
-#define DBA_UPDATE_FUNC(x) \
- int dba_update_##x(dba_info *info, char *key, int keylen, char *val, int vallen, int mode TSRMLS_DC)
-#define DBA_EXISTS_FUNC(x) \
- int dba_exists_##x(dba_info *info, char *key, int keylen TSRMLS_DC)
-#define DBA_DELETE_FUNC(x) \
- int dba_delete_##x(dba_info *info, char *key, int keylen TSRMLS_DC)
-#define DBA_FIRSTKEY_FUNC(x) \
- char *dba_firstkey_##x(dba_info *info, int *newlen TSRMLS_DC)
-#define DBA_NEXTKEY_FUNC(x) \
- char *dba_nextkey_##x(dba_info *info, int *newlen TSRMLS_DC)
-#define DBA_OPTIMIZE_FUNC(x) \
- int dba_optimize_##x(dba_info *info TSRMLS_DC)
-#define DBA_SYNC_FUNC(x) \
- int dba_sync_##x(dba_info *info TSRMLS_DC)
-#define DBA_INFO_FUNC(x) \
- char *dba_info_##x(dba_handler *hnd, dba_info *info TSRMLS_DC)
-
-#define DBA_FUNCS(x) \
- DBA_OPEN_FUNC(x); \
- DBA_CLOSE_FUNC(x); \
- DBA_FETCH_FUNC(x); \
- DBA_UPDATE_FUNC(x); \
- DBA_DELETE_FUNC(x); \
- DBA_EXISTS_FUNC(x); \
- DBA_FIRSTKEY_FUNC(x); \
- DBA_NEXTKEY_FUNC(x); \
- DBA_OPTIMIZE_FUNC(x); \
- DBA_SYNC_FUNC(x); \
- DBA_INFO_FUNC(x)
-
-#define VALLEN(p) Z_STRVAL_PP(p), Z_STRLEN_PP(p)
-
-PHP_FUNCTION(dba_open);
-PHP_FUNCTION(dba_popen);
-PHP_FUNCTION(dba_close);
-PHP_FUNCTION(dba_firstkey);
-PHP_FUNCTION(dba_nextkey);
-PHP_FUNCTION(dba_replace);
-PHP_FUNCTION(dba_insert);
-PHP_FUNCTION(dba_delete);
-PHP_FUNCTION(dba_exists);
-PHP_FUNCTION(dba_fetch);
-PHP_FUNCTION(dba_optimize);
-PHP_FUNCTION(dba_sync);
-PHP_FUNCTION(dba_handlers);
-PHP_FUNCTION(dba_list);
-PHP_FUNCTION(dba_key_split);
-
-#else
-#define dba_module_ptr NULL
-#endif
-
-#define phpext_dba_ptr dba_module_ptr
-
-#endif
diff --git a/ext/dba/php_dbm.h b/ext/dba/php_dbm.h
deleted file mode 100644
index 4c963d18ed..0000000000
--- a/ext/dba/php_dbm.h
+++ /dev/null
@@ -1,12 +0,0 @@
-#ifndef PHP_DBM_H
-#define PHP_DBM_H
-
-#if DBA_DBM
-
-#include "php_dba.h"
-
-DBA_FUNCS(dbm);
-
-#endif
-
-#endif
diff --git a/ext/dba/php_flatfile.h b/ext/dba/php_flatfile.h
deleted file mode 100644
index afa9f6d5d3..0000000000
--- a/ext/dba/php_flatfile.h
+++ /dev/null
@@ -1,12 +0,0 @@
-#ifndef PHP_FLATFILE_H
-#define PHP_FLATFILE_H
-
-#if DBA_FLATFILE
-
-#include "php_dba.h"
-
-DBA_FUNCS(flatfile);
-
-#endif
-
-#endif
diff --git a/ext/dba/php_gdbm.h b/ext/dba/php_gdbm.h
deleted file mode 100644
index 3068404cfe..0000000000
--- a/ext/dba/php_gdbm.h
+++ /dev/null
@@ -1,12 +0,0 @@
-#ifndef PHP_GDBM_H
-#define PHP_GDBM_H
-
-#if DBA_GDBM
-
-#include "php_dba.h"
-
-DBA_FUNCS(gdbm);
-
-#endif
-
-#endif
diff --git a/ext/dba/php_inifile.h b/ext/dba/php_inifile.h
deleted file mode 100644
index 69444df3c6..0000000000
--- a/ext/dba/php_inifile.h
+++ /dev/null
@@ -1,12 +0,0 @@
-#ifndef PHP_INIFILE_H
-#define PHP_INIFILE_H
-
-#if DBA_INIFILE
-
-#include "php_dba.h"
-
-DBA_FUNCS(inifile);
-
-#endif
-
-#endif
diff --git a/ext/dba/php_ndbm.h b/ext/dba/php_ndbm.h
deleted file mode 100644
index b1ebf15af3..0000000000
--- a/ext/dba/php_ndbm.h
+++ /dev/null
@@ -1,12 +0,0 @@
-#ifndef PHP_NDBM_H
-#define PHP_NDBM_H
-
-#if DBA_NDBM
-
-#include "php_dba.h"
-
-DBA_FUNCS(ndbm);
-
-#endif
-
-#endif
diff --git a/ext/dba/php_qdbm.h b/ext/dba/php_qdbm.h
deleted file mode 100644
index c88efcff4c..0000000000
--- a/ext/dba/php_qdbm.h
+++ /dev/null
@@ -1,12 +0,0 @@
-#ifndef PHP_QDBM_H
-#define PHP_QDBM_H
-
-#if DBA_QDBM
-
-#include "php_dba.h"
-
-DBA_FUNCS(qdbm);
-
-#endif
-
-#endif
diff --git a/ext/dba/tests/dba001.phpt b/ext/dba/tests/dba001.phpt
deleted file mode 100644
index 3d617fb2c2..0000000000
--- a/ext/dba/tests/dba001.phpt
+++ /dev/null
@@ -1,21 +0,0 @@
---TEST--
-DBA File Creation Test
---SKIPIF--
-<?php
- require_once('skipif.inc');
- die("info $HND handler used");
-?>
---FILE--
-<?php
- require_once('test.inc');
- echo "database handler: $handler\n";
- if (($db_file=dba_open($db_file, "n", $handler))!==FALSE) {
- echo "database file created\n";
- dba_close($db_file);
- } else {
- echo "$db_file does not exist\n";
- }
-?>
---EXPECTF--
-database handler: %s
-database file created \ No newline at end of file
diff --git a/ext/dba/tests/dba002.phpt b/ext/dba/tests/dba002.phpt
deleted file mode 100644
index 3f862e38c5..0000000000
--- a/ext/dba/tests/dba002.phpt
+++ /dev/null
@@ -1,22 +0,0 @@
---TEST--
-DBA Insert/Fetch Test
---SKIPIF--
-<?php
- require_once('skipif.inc');
- die("info $HND handler used");
-?>
---FILE--
-<?php
- require_once('test.inc');
- echo "database handler: $handler\n";
- if (($db_file=dba_open($db_file, "n", $handler))!==FALSE) {
- dba_insert("key1", "This is a test insert", $db_file);
- echo dba_fetch("key1", $db_file);
- dba_close($db_file);
- } else {
- echo "Error creating database\n";
- }
-?>
---EXPECTF--
-database handler: %s
-This is a test insert
diff --git a/ext/dba/tests/dba003.phpt b/ext/dba/tests/dba003.phpt
deleted file mode 100644
index 617ae91891..0000000000
--- a/ext/dba/tests/dba003.phpt
+++ /dev/null
@@ -1,24 +0,0 @@
---TEST--
-DBA Insert/Replace/Fetch Test
---SKIPIF--
-<?php
- require_once('skipif.inc');
- die("info $HND handler used");
-?>
---FILE--
-<?php
- require_once('test.inc');
- echo "database handler: $handler\n";
- if (($db_file=dba_open($db_file, "n", $handler))!==FALSE) {
- dba_insert("key1", "This is a test insert", $db_file);
- dba_replace("key1", "This is the replacement text", $db_file);
- $a = dba_fetch("key1", $db_file);
- dba_close($db_file);
- echo $a;
- } else {
- echo "Error creating database\n";
- }
-?>
---EXPECTF--
-database handler: %s
-This is the replacement text
diff --git a/ext/dba/tests/dba004.phpt b/ext/dba/tests/dba004.phpt
deleted file mode 100644
index 3b1f29c7dd..0000000000
--- a/ext/dba/tests/dba004.phpt
+++ /dev/null
@@ -1,28 +0,0 @@
---TEST--
-DBA Multiple Insert/Fetch Test
---SKIPIF--
-<?php
- require_once('skipif.inc');
- die("info $HND handler used");
-?>
---FILE--
-<?php
- require_once('test.inc');
- echo "database handler: $handler\n";
- if (($db_file=dba_open($db_file, "n", $handler))!==FALSE) {
- dba_insert("key1", "Content String 1", $db_file);
- dba_insert("key2", "Content String 2", $db_file);
- dba_insert("key3", "Third Content String", $db_file);
- dba_insert("key4", "Another Content String", $db_file);
- dba_insert("key5", "The last content string", $db_file);
- $a = dba_fetch("key4", $db_file);
- $b = dba_fetch("key2", $db_file);
- dba_close($db_file);
- echo "$a $b";
- } else {
- echo "Error creating database\n";
- }
-?>
---EXPECTF--
-database handler: %s
-Another Content String Content String 2
diff --git a/ext/dba/tests/dba005.phpt b/ext/dba/tests/dba005.phpt
deleted file mode 100644
index 5a933c48f9..0000000000
--- a/ext/dba/tests/dba005.phpt
+++ /dev/null
@@ -1,35 +0,0 @@
---TEST--
-DBA FirstKey/NextKey Loop Test With 5 Items
---SKIPIF--
-<?php
- require_once('skipif.inc');
- die("info $HND handler used");
-?>
---FILE--
-<?php
- require_once('test.inc');
- echo "database handler: $handler\n";
- if (($db_file=dba_open($db_file, "n", $handler))!==FALSE) {
- dba_insert("key1", "Content String 1", $db_file);
- dba_insert("key2", "Content String 2", $db_file);
- dba_insert("key3", "Third Content String", $db_file);
- dba_insert("key4", "Another Content String", $db_file);
- dba_insert("key5", "The last content string", $db_file);
- $a = dba_firstkey($db_file);
- $i=0;
- while($a) {
- $a = dba_nextkey($db_file);
- $i++;
- }
- echo $i;
- for ($i=1; $i<6; $i++) {
- echo dba_exists("key$i", $db_file) ? "Y" : "N";
- }
- dba_close($db_file);
- } else {
- echo "Error creating database\n";
- }
-?>
---EXPECTF--
-database handler: %s
-5YYYYY
diff --git a/ext/dba/tests/dba006.phpt b/ext/dba/tests/dba006.phpt
deleted file mode 100644
index efa36a5d07..0000000000
--- a/ext/dba/tests/dba006.phpt
+++ /dev/null
@@ -1,37 +0,0 @@
---TEST--
-DBA FirstKey/NextKey with 2 deletes
---SKIPIF--
-<?php
- require_once('skipif.inc');
- die("info $HND handler used");
-?>
---FILE--
-<?php
- require_once('test.inc');
- echo "database handler: $handler\n";
- if (($db_file=dba_open($db_file, "n", $handler))!==FALSE) {
- dba_insert("key1", "Content String 1", $db_file);
- dba_insert("key2", "Content String 2", $db_file);
- dba_insert("key3", "Third Content String", $db_file);
- dba_insert("key4", "Another Content String", $db_file);
- dba_insert("key5", "The last content string", $db_file);
- dba_delete("key3", $db_file);
- dba_delete("key1", $db_file);
- $a = dba_firstkey($db_file);
- $i=0;
- while($a) {
- $a = dba_nextkey($db_file);
- $i++;
- }
- echo $i;
- for ($i=1; $i<6; $i++) {
- echo dba_exists("key$i", $db_file) ? "Y" : "N";
- }
- dba_close($db_file);
- } else {
- echo "Error creating database\n";
- }
-?>
---EXPECTF--
-database handler: %s
-3NYNYY \ No newline at end of file
diff --git a/ext/dba/tests/dba007.phpt b/ext/dba/tests/dba007.phpt
deleted file mode 100644
index 577dacc68c..0000000000
--- a/ext/dba/tests/dba007.phpt
+++ /dev/null
@@ -1,45 +0,0 @@
---TEST--
-DBA Multiple File Creation Test
---SKIPIF--
-<?php
- require_once('skipif.inc');
- if (!function_exists('dba_list')) die('skip dba_list() not available');
- die("info $HND handler used");
-?>
---FILE--
-<?php
- require_once('test.inc');
- echo "database handler: $handler\n";
- $db_file1 = dirname(__FILE__).'/test1.dbm';
- $db_file2 = dirname(__FILE__).'/test2.dbm';
- if (($db_file=dba_open($db_file, "n", $handler))!==FALSE) {
- echo "database file created\n";
- } else {
- echo "$db_file does not exist\n";
- }
- if (($db_file1=dba_open($db_file1, "n", $handler))!==FALSE) {
- echo "database file created\n";
- } else {
- echo "$db_file does not exist\n";
- }
- if (($db_file2=dba_open($db_file2, "n", $handler))!==FALSE) {
- echo "database file created\n";
- } else {
- echo "$db_file does not exist\n";
- }
- var_dump(dba_list());
- dba_close($db_file);
-?>
---EXPECTF--
-database handler: %s
-database file created
-database file created
-database file created
-array(3) {
- [%d]=>
- string(%d) "%s/dba/tests/test0.dbm"
- [%d]=>
- string(%d) "%s/dba/tests/test1.dbm"
- [%d]=>
- string(%d) "%s/dba/tests/test2.dbm"
-} \ No newline at end of file
diff --git a/ext/dba/tests/dba008.phpt b/ext/dba/tests/dba008.phpt
deleted file mode 100644
index 84a47ba083..0000000000
--- a/ext/dba/tests/dba008.phpt
+++ /dev/null
@@ -1,32 +0,0 @@
---TEST--
-DBA magic_quotes_runtime Test
---SKIPIF--
-<?php
- require_once('skipif.inc');
- die("info $HND handler used");
-?>
---FILE--
-<?php
- require_once('test.inc');
- echo "database handler: $handler\n";
- if (($db_file=dba_open($db_file, "n", $handler))!==FALSE) {
- ini_set('magic_quotes_runtime', 0);
- dba_insert("key1", '"', $db_file);
- var_dump(dba_fetch("key1", $db_file));
- ini_set('magic_quotes_runtime', 1);
- var_dump(dba_fetch("key1", $db_file));
- dba_replace("key1", '\"', $db_file);
- var_dump(dba_fetch("key1", $db_file));
- ini_set('magic_quotes_runtime', 0);
- var_dump(dba_fetch("key1", $db_file));
- dba_close($db_file);
- } else {
- echo "Error creating database\n";
- }
-?>
---EXPECTF--
-database handler: %s
-string(1) """
-string(2) "\""
-string(2) "\""
-string(1) """
diff --git a/ext/dba/tests/dba009.phpt b/ext/dba/tests/dba009.phpt
deleted file mode 100755
index 50a50c6bd5..0000000000
--- a/ext/dba/tests/dba009.phpt
+++ /dev/null
@@ -1,33 +0,0 @@
---TEST--
-DBA dba_popen Test
---SKIPIF--
-<?php
- require_once('skipif.inc');
- print("info $HND handler used");
-?>
---FILE--
-<?php
- require_once('test.inc');
- echo "database handler: $handler\n";
- if (($db=dba_popen($db_file, "n", $handler))!==FALSE) {
- echo "Opened\n";
- dba_insert("a", "Inserted", $db);
- echo dba_fetch("a", $db)."\n";
- dba_close($db);
- echo "Closed\n";
- } else {
- echo "Error creating database\n";
- }
- if (($db=dba_popen($db_file, "n", $handler))!==FALSE) {
- echo "Opened\n";
- dba_insert("a", "Inserted", $db);
- echo dba_fetch("a", $db)."\n";
- }
-?>
---EXPECTF--
-database handler: %s
-Opened
-Inserted
-Closed
-Opened
-Inserted
diff --git a/ext/dba/tests/dba_cdb.phpt b/ext/dba/tests/dba_cdb.phpt
deleted file mode 100644
index f3bf7975ea..0000000000
--- a/ext/dba/tests/dba_cdb.phpt
+++ /dev/null
@@ -1,47 +0,0 @@
---TEST--
-DBA CDB handler test
---SKIPIF--
-<?php
- $handler = 'cdb';
- require_once('skipif.inc');
- die('info CDB does not support replace or delete');
-?>
---FILE--
-<?php
- $handler = 'cdb';
- require_once('test.inc');
- require_once('dba_handler.inc');
-?>
-===DONE===
---EXPECT--
-database handler: cdb
-5YYYYY
-Content String 2
-array(5) {
- ["key1"]=>
- string(16) "Content String 1"
- ["key2"]=>
- string(16) "Content String 2"
- ["key3"]=>
- string(20) "Third Content String"
- ["key4"]=>
- string(22) "Another Content String"
- ["key5"]=>
- string(23) "The last content string"
-}
---NO-LOCK--
-5YYYYY
-Content String 2
-array(5) {
- ["key1"]=>
- string(16) "Content String 1"
- ["key2"]=>
- string(16) "Content String 2"
- ["key3"]=>
- string(20) "Third Content String"
- ["key4"]=>
- string(22) "Another Content String"
- ["key5"]=>
- string(23) "The last content string"
-}
-===DONE===
diff --git a/ext/dba/tests/dba_cdb_make.phpt b/ext/dba/tests/dba_cdb_make.phpt
deleted file mode 100644
index 04df9252d8..0000000000
--- a/ext/dba/tests/dba_cdb_make.phpt
+++ /dev/null
@@ -1,38 +0,0 @@
---TEST--
-DBA CDB_MAKE handler test
---INI--
-magic_quotes_runtime=1
---SKIPIF--
-<?php
- $handler = 'cdb_make';
- require_once('skipif.inc');
- die('info CDB_MAKE does not support reading');
-?>
---FILE--
-<?php
- $handler = 'cdb_make';
- require_once('test.inc');
- echo "database handler: $handler\n";
- // print md5 checksum of test.cdb which is generated by cdb_make program
- var_dump(md5_file(dirname(__FILE__).'/test.cdb'));
- if (($db_make=dba_open($db_file, "n", $handler))!==FALSE) {
- dba_insert("1", "1", $db_make);
- dba_insert("2", "2", $db_make);
- dba_insert("1", "3", $db_make);
- dba_insert("2", "1", $db_make);
- dba_insert("3", "3", $db_make);
- dba_insert("1", "2", $db_make);
- dba_insert("4", "4", $db_make);
-// dba_replace cdb_make doesn't know replace
- dba_close($db_make);
- // write md5 checksum of generated database file
- var_dump(md5_file($db_file));
- // no need to test created database: this is done by dba_cdb_read.phpt
- } else {
- echo "Error creating database\n";
- }
-?>
---EXPECT--
-database handler: cdb_make
-string(32) "12fc5ba2b9dcfef2480e5324eeb5f3e5"
-string(32) "12fc5ba2b9dcfef2480e5324eeb5f3e5" \ No newline at end of file
diff --git a/ext/dba/tests/dba_cdb_read.phpt b/ext/dba/tests/dba_cdb_read.phpt
deleted file mode 100644
index a0fbe7bcca..0000000000
--- a/ext/dba/tests/dba_cdb_read.phpt
+++ /dev/null
@@ -1,65 +0,0 @@
---TEST--
-DBA CDB handler test (read only)
---SKIPIF--
-<?php
- $handler = 'cdb_make';
- require_once('skipif.inc');
-?>
---FILE--
-<?php
- echo "database handler: cdb\n";
- $handler = 'cdb';
- $db_file = dirname(__FILE__).'/test.cdb';
- if (($db_file=dba_open($db_file, "r", $handler))!==FALSE) {
- // read key sequence
- $a = dba_firstkey($db_file);
- $count= 0;
- $keys = $a;
- while($a) {
- $a = dba_nextkey($db_file);
- $keys .= $a;
- $count++;
- }
- // display number of entries and key existance
- echo $count;
- for ($i=1; $i<8; $i++) {
- echo dba_exists($i, $db_file) ? "Y" : "N";
- }
- echo "\n=";
- echo dba_fetch(1, $db_file);
- echo dba_fetch(2, $db_file);
- echo dba_fetch(3, $db_file);
- echo dba_fetch(4, $db_file);
- echo "\n#";
- echo dba_fetch(1, $db_file);
- echo dba_fetch(1, $db_file);
- echo dba_fetch(2, $db_file);
- echo dba_fetch(2, $db_file);
- echo "\n?".$keys;
- // with skip = 0 dba_fetch must fetch the first result
- echo "\n#";
- $skip = array();
- for ($i=0; $i < strlen($keys); $i++) {
- $key = substr($keys, $i, 1);
- $skip[$key] = 0;
- echo dba_fetch($key, $db_file);
- }
- echo "\n=";
- for ($i=0; $i < strlen($keys); $i++) {
- $key = substr($keys, $i, 1);
- echo dba_fetch($key, $skip[$key], $db_file);
- $skip[$key]++;
- }
- dba_close($db_file);
- } else {
- echo "Error creating database\n";
- }
-?>
---EXPECT--
-database handler: cdb
-7YYYYNNN
-=1234
-#1122
-?1212314
-#1212314
-=1231324 \ No newline at end of file
diff --git a/ext/dba/tests/dba_db2.phpt b/ext/dba/tests/dba_db2.phpt
deleted file mode 100644
index bcc5a94793..0000000000
--- a/ext/dba/tests/dba_db2.phpt
+++ /dev/null
@@ -1,46 +0,0 @@
---TEST--
-DBA DB2 handler test
---SKIPIF--
-<?php
- $handler = 'db2';
- require_once('skipif.inc');
-?>
---FILE--
-<?php
- $handler = 'db2';
- require_once('test.inc');
- require_once('dba_handler.inc');
-?>
-===DONE===
---EXPECT--
-database handler: db2
-3NYNYY
-Content String 2
-Content 2 replaced
-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) {
- ["key number 6"]=>
- string(13) "The 6th value"
- ["key2"]=>
- string(27) "Content 2 replaced 2nd time"
- ["key5"]=>
- string(23) "The last content string"
-}
-===DONE===
diff --git a/ext/dba/tests/dba_db3.phpt b/ext/dba/tests/dba_db3.phpt
deleted file mode 100644
index c6d04cf02d..0000000000
--- a/ext/dba/tests/dba_db3.phpt
+++ /dev/null
@@ -1,46 +0,0 @@
---TEST--
-DBA DB3 handler test
---SKIPIF--
-<?php
- $handler = 'db3';
- require_once('skipif.inc');
-?>
---FILE--
-<?php
- $handler = 'db3';
- require_once('test.inc');
- require_once('dba_handler.inc');
-?>
-===DONE===
---EXPECT--
-database handler: db3
-3NYNYY
-Content String 2
-Content 2 replaced
-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) {
- ["key number 6"]=>
- string(13) "The 6th value"
- ["key2"]=>
- string(27) "Content 2 replaced 2nd time"
- ["key5"]=>
- string(23) "The last content string"
-}
-===DONE===
diff --git a/ext/dba/tests/dba_db4.phpt b/ext/dba/tests/dba_db4.phpt
deleted file mode 100644
index fcf089a1e9..0000000000
--- a/ext/dba/tests/dba_db4.phpt
+++ /dev/null
@@ -1,46 +0,0 @@
---TEST--
-DBA DB4 handler test
---SKIPIF--
-<?php
- $handler = 'db4';
- require_once('skipif.inc');
-?>
---FILE--
-<?php
- $handler = 'db4';
- require_once('test.inc');
- require_once('dba_handler.inc');
-?>
-===DONE===
---EXPECT--
-database handler: db4
-3NYNYY
-Content String 2
-Content 2 replaced
-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) {
- ["key number 6"]=>
- string(13) "The 6th value"
- ["key2"]=>
- string(27) "Content 2 replaced 2nd time"
- ["key5"]=>
- string(23) "The last content string"
-}
-===DONE===
diff --git a/ext/dba/tests/dba_dbm.phpt b/ext/dba/tests/dba_dbm.phpt
deleted file mode 100644
index fdd7b375f4..0000000000
--- a/ext/dba/tests/dba_dbm.phpt
+++ /dev/null
@@ -1,46 +0,0 @@
---TEST--
-DBA DBM handler test
---SKIPIF--
-<?php
- $handler = 'dbm';
- require_once('skipif.inc');
-?>
---FILE--
-<?php
- $handler = 'dbm';
- require_once('test.inc');
- require_once('dba_handler.inc');
-?>
-===DONE===
---EXPECT--
-database handler: dbm
-3NYNYY
-Content String 2
-Content 2 replaced
-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) {
- ["key number 6"]=>
- string(13) "The 6th value"
- ["key2"]=>
- string(27) "Content 2 replaced 2nd time"
- ["key5"]=>
- string(23) "The last content string"
-}
-===DONE===
diff --git a/ext/dba/tests/dba_flatfile.phpt b/ext/dba/tests/dba_flatfile.phpt
deleted file mode 100644
index 2e32b8a327..0000000000
--- a/ext/dba/tests/dba_flatfile.phpt
+++ /dev/null
@@ -1,46 +0,0 @@
---TEST--
-DBA FlatFile handler test
---SKIPIF--
-<?php
- $handler = 'flatfile';
- require_once('skipif.inc');
-?>
---FILE--
-<?php
- $handler = 'flatfile';
- require_once('test.inc');
- require_once('dba_handler.inc');
-?>
-===DONE===
---EXPECT--
-database handler: flatfile
-3NYNYY
-Content String 2
-Content 2 replaced
-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) {
- ["key number 6"]=>
- string(13) "The 6th value"
- ["key2"]=>
- string(27) "Content 2 replaced 2nd time"
- ["key5"]=>
- string(23) "The last content string"
-}
-===DONE===
diff --git a/ext/dba/tests/dba_gdbm.phpt b/ext/dba/tests/dba_gdbm.phpt
deleted file mode 100644
index f9b3e3c606..0000000000
--- a/ext/dba/tests/dba_gdbm.phpt
+++ /dev/null
@@ -1,34 +0,0 @@
---TEST--
-DBA GDBM handler test
---SKIPIF--
-<?php
- $handler = 'gdbm';
- require_once('skipif.inc');
-?>
---FILE--
-<?php
- $handler = 'gdbm';
- require_once('test.inc');
- $lock_flag = ''; // lock in library
- require_once('dba_handler.inc');
-
- // Read during write is system dependant. Important is that there is no deadlock
-?>
-===DONE===
---EXPECTF--
-database handler: gdbm
-3NYNYY
-Content String 2
-Content 2 replaced
-Read during write:%sallowed
-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"
-}
-===DONE===
diff --git a/ext/dba/tests/dba_handler.inc b/ext/dba/tests/dba_handler.inc
deleted file mode 100644
index c1e3c49c70..0000000000
--- a/ext/dba/tests/dba_handler.inc
+++ /dev/null
@@ -1,90 +0,0 @@
-<?php
-
-echo "database handler: $handler\n";
-
-do {
- if (($db_file = dba_open($db_filename, 'n'.$lock_flag, $handler))!==FALSE) {
- dba_insert("key1", "Content String 1", $db_file);
- dba_insert("key2", "Content String 2", $db_file);
- dba_insert("key3", "Third Content String", $db_file);
- dba_insert("key4", "Another Content String", $db_file);
- dba_insert("key5", "The last content string", $db_file);
- if ($handler != 'cdb') {
- dba_delete("key3", $db_file);
- dba_delete("key1", $db_file);
- } else {
- dba_close($db_file);
- if (($db_file = dba_open($db_filename, 'r'.$lock_flag, $handler))===FALSE) {
- echo "Error reopening database\n";
- }
- }
- $a = dba_firstkey($db_file);
- $i=0;
- while($a) {
- $a = dba_nextkey($db_file);
- $i++;
- }
- echo $i;
- for ($i=1; $i<6; $i++) {
- echo dba_exists("key$i", $db_file) ? "Y" : "N";
- }
- echo "\n";
- echo dba_fetch("key2", $db_file)."\n";
- if ($handler != 'cdb') {
- dba_replace("key2", "Content 2 replaced", $db_file);
- echo dba_fetch("key2", $db_file)."\n";
- }
- dba_close($db_file);
- } else {
- echo "Error creating database\n";
- }
- if ($handler != 'cdb') {
- $db_writer = dba_open($db_filename, 'c'.$lock_flag, $handler);
- if (($dba_reader = @dba_open($db_filename, 'r'.$lock_flag.($lock_flag ? 't' : ''), $handler))===false) {
- echo "Read during write: not allowed\n";
- } else {
- echo "Read during write: allowed\n";
- }
- if ($db_writer!==FALSE) {
- dba_insert("key number 6", "The 6th value", $db_writer);
- @dba_insert("key number 6", "The 6th value inserted again would be an error", $db_writer);
- dba_replace("key2", "Content 2 replaced 2nd time", $db_writer);
- dba_delete("key4", $db_writer);
- echo dba_fetch("key2", $db_writer)."\n";
- echo dba_fetch("key number 6", $db_writer)."\n";
- dba_close($db_writer); // when the writer is open at least db3 would fail because of buffered io.
- } else {
- die("Error reopening database\n");
- }
- }
- if (($db_file = dba_open($db_filename, 'r'.$lock_flag, $handler))!==FALSE) {
- $key = dba_firstkey($db_file);
- $res = array();
- while($key) {
- $res[$key] = dba_fetch($key, $db_file);
- $key = dba_nextkey($db_file);
- }
- ksort($res);
- var_dump($res);
- dba_close($db_file);
- } else {
- echo "Error reading database\n";
- }
- if (!empty($dba_reader)) {
- dba_close($dba_reader);
- }
- if (($db_file = dba_popen($db_filename, 'r'.($handler!='gdbm'?'-':''), $handler))!==FALSE) {
- if ($handler == 'dbm') {
- dba_close($db_file);
- }
- }
-
- if ($lock_flag == '') {
- break;
- } else {
- echo "--NO-LOCK--\n";
- $lock_flag = '';
- }
-} while(1);
-
-?> \ No newline at end of file
diff --git a/ext/dba/tests/dba_inifile.phpt b/ext/dba/tests/dba_inifile.phpt
deleted file mode 100644
index 9511a8bb49..0000000000
--- a/ext/dba/tests/dba_inifile.phpt
+++ /dev/null
@@ -1,46 +0,0 @@
---TEST--
-DBA INIFILE handler test
---SKIPIF--
-<?php
- $handler = 'inifile';
- require_once('skipif.inc');
-?>
---FILE--
-<?php
- $handler = 'inifile';
- require_once('test.inc');
- require_once('dba_handler.inc');
-?>
-===DONE===
---EXPECT--
-database handler: inifile
-3NYNYY
-Content String 2
-Content 2 replaced
-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) {
- ["key number 6"]=>
- string(13) "The 6th value"
- ["key2"]=>
- string(27) "Content 2 replaced 2nd time"
- ["key5"]=>
- string(23) "The last content string"
-}
-===DONE===
diff --git a/ext/dba/tests/dba_ndbm.phpt b/ext/dba/tests/dba_ndbm.phpt
deleted file mode 100644
index f7955c5813..0000000000
--- a/ext/dba/tests/dba_ndbm.phpt
+++ /dev/null
@@ -1,46 +0,0 @@
---TEST--
-DBA NDBM handler test
---SKIPIF--
-<?php
- $handler = 'ndbm';
- require_once('skipif.inc');
-?>
---FILE--
-<?php
- $handler = 'ndbm';
- require_once('test.inc');
- require_once('dba_handler.inc');
-?>
-===DONE===
---EXPECT--
-database handler: ndbm
-3NYNYY
-Content String 2
-Content 2 replaced
-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) {
- ["key number 6"]=>
- string(13) "The 6th value"
- ["key2"]=>
- string(27) "Content 2 replaced 2nd time"
- ["key5"]=>
- string(23) "The last content string"
-}
-===DONE===
diff --git a/ext/dba/tests/dba_qdbm.phpt b/ext/dba/tests/dba_qdbm.phpt
deleted file mode 100755
index a7c9ab69e1..0000000000
--- a/ext/dba/tests/dba_qdbm.phpt
+++ /dev/null
@@ -1,34 +0,0 @@
---TEST--
-DBA QDBM handler test
---SKIPIF--
-<?php
- $handler = 'qdbm';
- require_once('skipif.inc');
-?>
---FILE--
-<?php
- $handler = 'qdbm';
- require_once('test.inc');
- $lock_flag = ''; // lock in library
- require_once('dba_handler.inc');
-?>
-===DONE===
---EXPECTF--
-database handler: qdbm
-3NYNYY
-Content String 2
-Content 2 replaced
-Read during write:%sallowed
-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"
-}
-
-Warning: dba_popen(%stest0.dbm,r-): Locking cannot be disabled for handler qdbm in %sdba_handler.inc on line %d
-===DONE===
diff --git a/ext/dba/tests/skipif.inc b/ext/dba/tests/skipif.inc
deleted file mode 100644
index e75000fafd..0000000000
--- a/ext/dba/tests/skipif.inc
+++ /dev/null
@@ -1,23 +0,0 @@
-<?php
- if (!extension_loaded('dba')) die('skip dba extension not available');
- if (!function_exists('dba_handlers')) die ('skip dba_handlers() not available');
- if (!sizeof(dba_handlers())) die('skip no handlers installed');
- if (!isset($handler)) {
- $handlers = dba_handlers();
- if (in_array('flatfile', $handlers)) {
- $handler = 'flatfile';
- } else {
- $handlers = array_diff($handlers, array('cdb', 'cdb_make')); /* these can only read OR write */
- if (count($handlers)==0) {
- die('skip no handler available that can be used for the test');
- }
- $handler = array_shift($handlers);
- }
- } else {
- if (!in_array($handler, dba_handlers())) {
- $HND = strtoupper($handler);
- die("skip $HND handler not available");
- }
- }
- $HND = strtoupper($handler);
-?>
diff --git a/ext/dba/tests/test.cdb b/ext/dba/tests/test.cdb
deleted file mode 100644
index 21529c6280..0000000000
--- a/ext/dba/tests/test.cdb
+++ /dev/null
Binary files differ
diff --git a/ext/dba/tests/test.inc b/ext/dba/tests/test.inc
deleted file mode 100644
index 04f954541c..0000000000
--- a/ext/dba/tests/test.inc
+++ /dev/null
@@ -1,7 +0,0 @@
-<?php
- require_once('skipif.inc');
- $lock_flag = 'l';
- $db_filename = $db_file = dirname(__FILE__).'/test0.dbm';
- @unlink($db_filename);
- @unlink($db_filename.'.lck');
-?>
diff --git a/ext/dbase/CREDITS b/ext/dbase/CREDITS
deleted file mode 100644
index ea6adcaf41..0000000000
--- a/ext/dbase/CREDITS
+++ /dev/null
@@ -1,2 +0,0 @@
-dBase
-Jim Winstead
diff --git a/ext/dbase/config.m4 b/ext/dbase/config.m4
deleted file mode 100644
index d19c24c779..0000000000
--- a/ext/dbase/config.m4
+++ /dev/null
@@ -1,13 +0,0 @@
-dnl
-dnl $Id$
-dnl
-
-AC_ARG_WITH(dbase,[],[enable_dbase=$withval])
-
-PHP_ARG_ENABLE(dbase,whether to enable dbase support,
-[ --enable-dbase Enable the bundled dbase library])
-
-if test "$PHP_DBASE" = "yes"; then
- AC_DEFINE(DBASE,1,[ ])
- PHP_NEW_EXTENSION(dbase, dbf_head.c dbf_rec.c dbf_misc.c dbf_ndx.c dbase.c, $ext_shared)
-fi
diff --git a/ext/dbase/config.w32 b/ext/dbase/config.w32
deleted file mode 100644
index 4a424a9926..0000000000
--- a/ext/dbase/config.w32
+++ /dev/null
@@ -1,10 +0,0 @@
-// $Id$
-// vim:ft=javascript
-
-ARG_ENABLE("dbase", "Enable the bundled dbase library", "no");
-
-if (PHP_DBASE != "no") {
- EXTENSION("dbase", "dbase.c dbf_head.c dbf_misc.c dbf_ndx.c dbf_rec.c");
- AC_DEFINE('HAVE_DBASE', 1, 'dbase support');
- ADD_FLAG("CFLAGS_DBASE", "/D DBASE=1");
-}
diff --git a/ext/dbase/dbase.c b/ext/dbase/dbase.c
deleted file mode 100644
index 5bb109de84..0000000000
--- a/ext/dbase/dbase.c
+++ /dev/null
@@ -1,843 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Jim Winstead <jimw@php.net> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "php.h"
-#include "safe_mode.h"
-#include "fopen_wrappers.h"
-#include "php_globals.h"
-
-#include <stdlib.h>
-
-#ifdef HAVE_SYS_TYPES_H
-#include <sys/types.h>
-#endif
-
-#if DBASE
-#include "php_dbase.h"
-#include "dbf.h"
-#if defined(THREAD_SAFE)
-DWORD DbaseTls;
-static int numthreads=0;
-void *dbase_mutex;
-
-typedef struct dbase_global_struct{
- int le_dbhead;
-}dbase_global_struct;
-
-#define DBase_GLOBAL(a) dbase_globals->a
-
-#define DBase_TLS_VARS \
- dbase_global_struct *dbase_globals; \
- dbase_globals=TlsGetValue(DbaseTls);
-
-#else
-static int le_dbhead;
-#define DBase_GLOBAL(a) a
-#define DBase_TLS_VARS
-#endif
-
-#include <fcntl.h>
-#include <errno.h>
-
-
-static void _close_dbase(zend_rsrc_list_entry *rsrc TSRMLS_DC)
-{
- dbhead_t *dbhead = (dbhead_t *)rsrc->ptr;
-
- close(dbhead->db_fd);
- free_dbf_head(dbhead);
-}
-
-
-PHP_MINIT_FUNCTION(dbase)
-{
-#if defined(THREAD_SAFE)
- dbase_global_struct *dbase_globals;
-#ifdef COMPILE_DL_DBASE
- CREATE_MUTEX(dbase_mutex, "DBase_TLS");
- SET_MUTEX(dbase_mutex);
- numthreads++;
- if (numthreads==1){
- if ((DbaseTls=TlsAlloc())==0xFFFFFFFF){
- FREE_MUTEX(dbase_mutex);
- return 0;
- }}
- FREE_MUTEX(dbase_mutex);
-#endif
- dbase_globals = (dbase_global_struct *) LocalAlloc(LPTR, sizeof(dbase_global_struct));
- TlsSetValue(DbaseTls, (void *) dbase_globals);
-#endif
- DBase_GLOBAL(le_dbhead) =
- zend_register_list_destructors_ex(_close_dbase, NULL, "dbase", module_number);
- return SUCCESS;
-}
-
-static PHP_MSHUTDOWN_FUNCTION(dbase)
-{
-#if defined(THREAD_SAFE)
- dbase_global_struct *dbase_globals;
- dbase_globals = TlsGetValue(DbaseTls);
- if (dbase_globals != 0)
- LocalFree((HLOCAL) dbase_globals);
-#ifdef COMPILE_DL_DBASE
- SET_MUTEX(dbase_mutex);
- numthreads--;
- if (!numthreads){
- if (!TlsFree(DbaseTls)){
- FREE_MUTEX(dbase_mutex);
- return 0;
- }}
- FREE_MUTEX(dbase_mutex);
-#endif
-#endif
- return SUCCESS;
-}
-
-/* {{{ proto int dbase_open(string name, int mode)
- Opens a dBase-format database file */
-PHP_FUNCTION(dbase_open)
-{
- zval **dbf_name, **options;
- dbhead_t *dbh;
- int handle;
- DBase_TLS_VARS;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &dbf_name, &options) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex(dbf_name);
- convert_to_long_ex(options);
-
- if (PG(safe_mode) && (!php_checkuid(Z_STRVAL_PP(dbf_name), NULL, CHECKUID_CHECK_FILE_AND_DIR))) {
- RETURN_FALSE;
- }
-
- if (php_check_open_basedir(Z_STRVAL_PP(dbf_name) TSRMLS_CC)) {
- RETURN_FALSE;
- }
-
- dbh = dbf_open(Z_STRVAL_PP(dbf_name), Z_LVAL_PP(options) TSRMLS_CC);
- if (dbh == NULL) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "unable to open database %s", Z_STRVAL_PP(dbf_name));
- RETURN_FALSE;
- }
-
- handle = zend_list_insert(dbh, DBase_GLOBAL(le_dbhead));
- RETURN_LONG(handle);
-}
-/* }}} */
-
-/* {{{ proto bool dbase_close(int identifier)
- Closes an open dBase-format database file */
-PHP_FUNCTION(dbase_close)
-{
- zval **dbh_id;
- dbhead_t *dbh;
- int dbh_type;
- DBase_TLS_VARS;
-
- if (ZEND_NUM_ARGS() != 1 || (zend_get_parameters_ex(1, &dbh_id) == FAILURE)) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long_ex(dbh_id);
- dbh = zend_list_find(Z_LVAL_PP(dbh_id), &dbh_type);
- if (!dbh || dbh_type != DBase_GLOBAL(le_dbhead)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to find database for identifier %ld", Z_LVAL_PP(dbh_id));
- RETURN_FALSE;
- }
-
- zend_list_delete(Z_LVAL_PP(dbh_id));
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto int dbase_numrecords(int identifier)
- Returns the number of records in the database */
-PHP_FUNCTION(dbase_numrecords)
-{
- zval **dbh_id;
- dbhead_t *dbh;
- int dbh_type;
- DBase_TLS_VARS;
-
- if (ZEND_NUM_ARGS() != 1 || (zend_get_parameters_ex(1, &dbh_id) == FAILURE)) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long_ex(dbh_id);
- dbh = zend_list_find(Z_LVAL_PP(dbh_id), &dbh_type);
- if (!dbh || dbh_type != DBase_GLOBAL(le_dbhead)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to find database for identifier %ld", Z_LVAL_PP(dbh_id));
- RETURN_FALSE;
- }
-
- RETURN_LONG(dbh->db_records);
-}
-/* }}} */
-
-/* {{{ proto int dbase_numfields(int identifier)
- Returns the number of fields (columns) in the database */
-PHP_FUNCTION(dbase_numfields)
-{
- zval **dbh_id;
- dbhead_t *dbh;
- int dbh_type;
- DBase_TLS_VARS;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &dbh_id) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long_ex(dbh_id);
- dbh = zend_list_find(Z_LVAL_PP(dbh_id), &dbh_type);
- if (!dbh || dbh_type != DBase_GLOBAL(le_dbhead)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to find database for identifier %ld", Z_LVAL_PP(dbh_id));
- RETURN_FALSE;
- }
-
- RETURN_LONG(dbh->db_nfields);
-}
-/* }}} */
-
-/* {{{ proto bool dbase_pack(int identifier)
- Packs the database (deletes records marked for deletion) */
-PHP_FUNCTION(dbase_pack)
-{
- zval **dbh_id;
- dbhead_t *dbh;
- int dbh_type;
- DBase_TLS_VARS;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &dbh_id) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long_ex(dbh_id);
- dbh = zend_list_find(Z_LVAL_PP(dbh_id), &dbh_type);
- if (!dbh || dbh_type != DBase_GLOBAL(le_dbhead)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to find database for identifier %ld", Z_LVAL_PP(dbh_id));
- RETURN_FALSE;
- }
-
- pack_dbf(dbh);
- put_dbf_info(dbh);
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto bool dbase_add_record(int identifier, array data)
- Adds a record to the database */
-PHP_FUNCTION(dbase_add_record)
-{
- zval **dbh_id, **fields, **field;
- dbhead_t *dbh;
- int dbh_type;
-
- int num_fields;
- dbfield_t *dbf, *cur_f;
- char *cp, *t_cp;
- int i;
- DBase_TLS_VARS;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &dbh_id, &fields) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long_ex(dbh_id);
- if (Z_TYPE_PP(fields) != IS_ARRAY) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Expected array as second parameter");
- RETURN_FALSE;
- }
-
- dbh = zend_list_find(Z_LVAL_PP(dbh_id), &dbh_type);
- if (!dbh || dbh_type != DBase_GLOBAL(le_dbhead)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to find database for identifier %ld", Z_LVAL_PP(dbh_id));
- RETURN_FALSE;
- }
-
- num_fields = zend_hash_num_elements(Z_ARRVAL_PP(fields));
-
- if (num_fields != dbh->db_nfields) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Wrong number of fields specified");
- RETURN_FALSE;
- }
-
- cp = t_cp = (char *)emalloc(dbh->db_rlen + 1);
- *t_cp++ = VALID_RECORD;
-
- dbf = dbh->db_fields;
- for (i = 0, cur_f = dbf; cur_f < &dbf[num_fields]; i++, cur_f++) {
- zval tmp;
- if (zend_hash_index_find(Z_ARRVAL_PP(fields), i, (void **)&field) == FAILURE) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "unexpected error");
- efree(cp);
- RETURN_FALSE;
- }
-
- tmp = **field;
- zval_copy_ctor(&tmp);
- convert_to_string(&tmp);
- snprintf(t_cp, cur_f->db_flen+1, cur_f->db_format, Z_STRVAL(tmp));
- zval_dtor(&tmp);
- t_cp += cur_f->db_flen;
- }
-
- dbh->db_records++;
- if (put_dbf_record(dbh, dbh->db_records, cp) < 0) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "unable to put record at %ld", dbh->db_records);
- efree(cp);
- RETURN_FALSE;
- }
-
- put_dbf_info(dbh);
- efree(cp);
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto bool dbase_replace_record(int identifier, array data, int recnum)
- Replaces a record to the database */
-PHP_FUNCTION(dbase_replace_record)
-{
- zval **dbh_id, **fields, **field, **recnum;
- dbhead_t *dbh;
- int dbh_type;
-
- int num_fields;
- dbfield_t *dbf, *cur_f;
- char *cp, *t_cp;
- int i;
- DBase_TLS_VARS;
-
- if (ZEND_NUM_ARGS() != 3 || zend_get_parameters_ex(3, &dbh_id, &fields, &recnum) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long_ex(dbh_id);
- convert_to_long_ex(recnum);
- if (Z_TYPE_PP(fields) != IS_ARRAY) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Expected array as second parameter");
- RETURN_FALSE;
- }
-
- dbh = zend_list_find(Z_LVAL_PP(dbh_id), &dbh_type);
- if (!dbh || dbh_type != DBase_GLOBAL(le_dbhead)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to find database for identifier %ld", Z_LVAL_PP(dbh_id));
- RETURN_FALSE;
- }
-
- num_fields = zend_hash_num_elements(Z_ARRVAL_PP(fields));
-
- if (num_fields != dbh->db_nfields) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Wrong number of fields specified");
- RETURN_FALSE;
- }
-
- cp = t_cp = (char *)emalloc(dbh->db_rlen + 1);
- *t_cp++ = VALID_RECORD;
-
- dbf = dbh->db_fields;
- for (i = 0, cur_f = dbf; cur_f < &dbf[num_fields]; i++, cur_f++) {
- if (zend_hash_index_find(Z_ARRVAL_PP(fields), i, (void **)&field) == FAILURE) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "unexpected error");
- efree(cp);
- RETURN_FALSE;
- }
- convert_to_string_ex(field);
- snprintf(t_cp, cur_f->db_flen+1, cur_f->db_format, Z_STRVAL_PP(field));
- t_cp += cur_f->db_flen;
- }
-
- if (put_dbf_record(dbh, Z_LVAL_PP(recnum), cp) < 0) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "unable to put record at %ld", dbh->db_records);
- efree(cp);
- RETURN_FALSE;
- }
-
- put_dbf_info(dbh);
- efree(cp);
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto bool dbase_delete_record(int identifier, int record)
- Marks a record to be deleted */
-PHP_FUNCTION(dbase_delete_record)
-{
- zval **dbh_id, **record;
- dbhead_t *dbh;
- int dbh_type;
- DBase_TLS_VARS;
-
- if (ZEND_NUM_ARGS() != 2 || (zend_get_parameters_ex(2, &dbh_id, &record) == FAILURE)) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long_ex(dbh_id);
- convert_to_long_ex(record);
-
- dbh = zend_list_find(Z_LVAL_PP(dbh_id), &dbh_type);
- if (!dbh || dbh_type != DBase_GLOBAL(le_dbhead)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to find database for identifier %ld", Z_LVAL_PP(dbh_id));
- RETURN_FALSE;
- }
-
- if (del_dbf_record(dbh, Z_LVAL_PP(record)) < 0) {
- if (Z_LVAL_PP(record) > dbh->db_records) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "record %ld out of bounds", Z_LVAL_PP(record));
- } else {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "unable to delete record %ld", Z_LVAL_PP(record));
- }
- RETURN_FALSE;
- }
-
- put_dbf_info(dbh);
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ php_dbase_get_record
- */
-static void php_dbase_get_record(INTERNAL_FUNCTION_PARAMETERS, int assoc)
-{
- zval **dbh_id, **record;
- dbhead_t *dbh;
- int dbh_type;
- dbfield_t *dbf, *cur_f;
- char *data, *fnp, *str_value;
- size_t cursize = 0;
- long overflow_test;
- int errno_save;
- DBase_TLS_VARS;
-
- if (ZEND_NUM_ARGS() != 2 || (zend_get_parameters_ex(2, &dbh_id, &record) == FAILURE)) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long_ex(dbh_id);
- convert_to_long_ex(record);
-
- dbh = zend_list_find(Z_LVAL_PP(dbh_id), &dbh_type);
- if (!dbh || dbh_type != DBase_GLOBAL(le_dbhead)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to find database for identifier %ld", Z_LVAL_PP(dbh_id));
- RETURN_FALSE;
- }
-
- if ((data = get_dbf_record(dbh, Z_LVAL_PP(record))) == NULL) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Tried to read bad record %ld", Z_LVAL_PP(record));
- RETURN_FALSE;
- }
-
- dbf = dbh->db_fields;
-
- array_init(return_value);
-
- fnp = NULL;
- for (cur_f = dbf; cur_f < &dbf[dbh->db_nfields]; cur_f++) {
- /* get the value */
- str_value = (char *)emalloc(cur_f->db_flen + 1);
-
- if(cursize <= (unsigned)cur_f->db_flen) {
- cursize = cur_f->db_flen + 1;
- fnp = erealloc(fnp, cursize);
- }
- snprintf(str_value, cursize, cur_f->db_format, get_field_val(data, cur_f, fnp));
-
- /* now convert it to the right php internal type */
- switch (cur_f->db_type) {
- case 'C':
- case 'D':
- if (!assoc) {
- add_next_index_string(return_value, str_value, 1);
- } else {
- add_assoc_string(return_value, cur_f->db_fname, str_value, 1);
- }
- break;
- case 'I': /* FALLS THROUGH */
- case 'N':
- if (cur_f->db_fdc == 0) {
- /* Large integers in dbase can be larger than long */
- errno_save = errno;
- overflow_test = strtol(str_value, NULL, 10);
- if (errno == ERANGE) {
- /* If the integer is too large, keep it as string */
- if (!assoc) {
- add_next_index_string(return_value, str_value, 1);
- } else {
- add_assoc_string(return_value, cur_f->db_fname, str_value, 1);
- }
- } else {
- if (!assoc) {
- add_next_index_long(return_value, overflow_test);
- } else {
- add_assoc_long(return_value, cur_f->db_fname, overflow_test);
- }
- }
- errno = errno_save;
- } else {
- if (!assoc) {
- add_next_index_double(return_value, atof(str_value));
- } else {
- add_assoc_double(return_value, cur_f->db_fname, atof(str_value));
- }
- }
- break;
- case 'L': /* we used to FALL THROUGH, but now we check for T/Y and F/N
- and insert 1 or 0, respectively. db_fdc is the number of
- decimals, which we don't care about. 3/14/2001 LEW */
- if ((*str_value == 'T') || (*str_value == 'Y')) {
- if (!assoc) {
- add_next_index_long(return_value, strtol("1", NULL, 10));
- } else {
- add_assoc_long(return_value, cur_f->db_fname,strtol("1", NULL, 10));
- }
- } else {
- if ((*str_value == 'F') || (*str_value == 'N')) {
- if (!assoc) {
- add_next_index_long(return_value, strtol("0", NULL, 10));
- } else {
- add_assoc_long(return_value, cur_f->db_fname,strtol("0", NULL, 10));
- }
- } else {
- if (!assoc) {
- add_next_index_long(return_value, strtol(" ", NULL, 10));
- } else {
- add_assoc_long(return_value, cur_f->db_fname,strtol(" ", NULL, 10));
- }
- }
- }
- break;
- case 'M':
- /* this is a memo field. don't know how to deal with this yet */
- break;
- default:
- /* should deal with this in some way */
- break;
- }
- efree(str_value);
- }
-
- efree(fnp);
-
- /* mark whether this record was deleted */
- if (data[0] == '*') {
- add_assoc_long(return_value, "deleted", 1);
- } else {
- add_assoc_long(return_value, "deleted", 0);
- }
-
- free(data);
-}
-/* }}} */
-
-/* {{{ proto array dbase_get_record(int identifier, int record)
- Returns an array representing a record from the database */
-PHP_FUNCTION(dbase_get_record)
-{
- php_dbase_get_record(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0);
-}
-/* }}} */
-
-/* From Martin Kuba <makub@aida.inet.cz> */
-/* {{{ proto array dbase_get_record_with_names(int identifier, int record)
- Returns an associative array representing a record from the database */
-PHP_FUNCTION(dbase_get_record_with_names)
-{
- php_dbase_get_record(INTERNAL_FUNCTION_PARAM_PASSTHRU, 1);
-}
-/* }}} */
-
-/* {{{ proto bool dbase_create(string filename, array fields)
- Creates a new dBase-format database file */
-PHP_FUNCTION(dbase_create)
-{
- zval **filename, **fields, **field, **value;
- int fd;
- dbhead_t *dbh;
-
- int num_fields;
- dbfield_t *dbf, *cur_f;
- int i, rlen, handle;
- DBase_TLS_VARS;
-
- if (ZEND_NUM_ARGS() != 2 || (zend_get_parameters_ex(2, &filename, &fields) == FAILURE)) {
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex(filename);
-
- if (Z_TYPE_PP(fields) != IS_ARRAY) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Expected array as second parameter");
- RETURN_FALSE;
- }
-
- if (PG(safe_mode) && (!php_checkuid(Z_STRVAL_PP(filename), NULL, CHECKUID_CHECK_FILE_AND_DIR))) {
- RETURN_FALSE;
- }
-
- if (php_check_open_basedir(Z_STRVAL_PP(filename) TSRMLS_CC)) {
- RETURN_FALSE;
- }
-
- if ((fd = VCWD_OPEN_MODE(Z_STRVAL_PP(filename), O_BINARY|O_RDWR|O_CREAT, 0644)) < 0) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to create database (%d): %s", errno, strerror(errno));
- RETURN_FALSE;
- }
-
- num_fields = zend_hash_num_elements(Z_ARRVAL_PP(fields));
-
- /* have to use regular malloc() because this gets free()d by
- code in the dbase library */
- dbh = (dbhead_t *)malloc(sizeof(dbhead_t));
- dbf = (dbfield_t *)malloc(sizeof(dbfield_t) * num_fields);
- if (!dbh || !dbf) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to allocate memory for header info");
- RETURN_FALSE;
- }
-
- /* initialize the header structure */
- dbh->db_fields = dbf;
- dbh->db_fd = fd;
- dbh->db_dbt = DBH_TYPE_NORMAL;
- strcpy(dbh->db_date, "19930818");
- dbh->db_records = 0;
- dbh->db_nfields = num_fields;
- dbh->db_hlen = sizeof(struct dbf_dhead) + 1 + num_fields * sizeof(struct dbf_dfield);
-
- rlen = 1;
- /**
- * Patch by greg@darkphoton.com
- **/
- /* make sure that the db_format entries for all fields are set to NULL to ensure we
- don't seg fault if there's an error and we need to call free_dbf_head() before all
- fields have been defined. */
- for (i = 0, cur_f = dbf; i < num_fields; i++, cur_f++) {
- cur_f->db_format = NULL;
- }
- /**
- * end patch
- */
-
-
- for (i = 0, cur_f = dbf; i < num_fields; i++, cur_f++) {
- /* look up the first field */
- if (zend_hash_index_find(Z_ARRVAL_PP(fields), i, (void **)&field) == FAILURE) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "unable to find field %d", i);
- free_dbf_head(dbh);
- RETURN_FALSE;
- }
-
- if (Z_TYPE_PP (field) != IS_ARRAY) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "second parameter must be array of arrays");
- free_dbf_head(dbh);
- RETURN_FALSE;
- }
-
- /* field name */
- if (zend_hash_index_find(Z_ARRVAL_PP(field), 0, (void **)&value) == FAILURE) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "expected field name as first element of list in field %d", i);
- free_dbf_head(dbh);
- RETURN_FALSE;
- }
- convert_to_string_ex(value);
- if (Z_STRLEN_PP(value) > 10 || Z_STRLEN_PP(value) == 0) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "invalid field name '%s' (must be non-empty and less than or equal to 10 characters)", Z_STRVAL_PP(value));
- free_dbf_head(dbh);
- RETURN_FALSE;
- }
- copy_crimp(cur_f->db_fname, Z_STRVAL_PP(value), Z_STRLEN_PP(value));
-
- /* field type */
- if (zend_hash_index_find(Z_ARRVAL_PP (field), 1, (void **)&value) == FAILURE) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "expected field type as second element of list in field %d", i);
- RETURN_FALSE;
- }
- convert_to_string_ex(value);
- cur_f->db_type = toupper(*Z_STRVAL_PP(value));
-
- cur_f->db_fdc = 0;
-
- /* verify the field length */
- switch (cur_f->db_type) {
- case 'L':
- cur_f->db_flen = 1;
- break;
- case 'M':
- cur_f->db_flen = 10;
- dbh->db_dbt = DBH_TYPE_MEMO;
- /* should create the memo file here, probably */
- break;
- case 'D':
- cur_f->db_flen = 8;
- break;
- case 'N':
- case 'C':
- /* field length */
- if (zend_hash_index_find(Z_ARRVAL_PP (field), 2, (void **)&value) == FAILURE) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "expected field length as third element of list in field %d", i);
- free_dbf_head(dbh);
- RETURN_FALSE;
- }
- convert_to_long_ex(value);
- cur_f->db_flen = Z_LVAL_PP(value);
-
- if (cur_f->db_type == 'N') {
- if (zend_hash_index_find(Z_ARRVAL_PP (field), 3, (void **)&value) == FAILURE) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "expected field precision as fourth element of list in field %d", i);
- free_dbf_head(dbh);
- RETURN_FALSE;
- }
- convert_to_long_ex(value);
- cur_f->db_fdc = Z_LVAL_PP(value);
- }
- break;
- default:
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "unknown field type '%c'", cur_f->db_type);
- }
- cur_f->db_foffset = rlen;
- rlen += cur_f->db_flen;
-
- cur_f->db_format = get_dbf_f_fmt(cur_f);
- }
-
- dbh->db_rlen = rlen;
- put_dbf_info(dbh);
-
- handle = zend_list_insert(dbh, DBase_GLOBAL(le_dbhead));
- RETURN_LONG(handle);
-}
-/* }}} */
-
-/* {{{ dbase_functions[]
- */
-function_entry dbase_functions[] = {
- PHP_FE(dbase_open, NULL)
- PHP_FE(dbase_create, NULL)
- PHP_FE(dbase_close, NULL)
- PHP_FE(dbase_numrecords, NULL)
- PHP_FE(dbase_numfields, NULL)
- PHP_FE(dbase_add_record, NULL)
- PHP_FE(dbase_replace_record, NULL)
- PHP_FE(dbase_get_record, NULL)
- PHP_FE(dbase_get_record_with_names, NULL)
- PHP_FE(dbase_delete_record, NULL)
- PHP_FE(dbase_pack, NULL)
- PHP_FE(dbase_get_header_info, NULL)
- {NULL, NULL, NULL}
-};
-/* }}} */
-
-/* Added by Zak Greant <zak@php.net> */
-/* {{{ proto array dbase_get_header_info(int database_handle)
- */
-PHP_FUNCTION(dbase_get_header_info)
-{
- zval **dbh_id, *row;
- dbfield_t *dbf, *cur_f;
- dbhead_t *dbh;
- int dbh_type;
- DBase_TLS_VARS;
-
- if (ZEND_NUM_ARGS() != 1 || (zend_get_parameters_ex(1, &dbh_id) == FAILURE)) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long_ex(dbh_id);
-
- dbh = zend_list_find(Z_LVAL_PP(dbh_id), &dbh_type);
- if (!dbh || dbh_type != DBase_GLOBAL(le_dbhead)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to find database for identifier %ld", Z_LVAL_PP(dbh_id));
- RETURN_FALSE;
- }
-
- array_init(return_value);
-
- dbf = dbh->db_fields;
- for (cur_f = dbf; cur_f < &dbh->db_fields[dbh->db_nfields]; ++cur_f) {
- MAKE_STD_ZVAL(row);
- array_init(row);
-
- add_next_index_zval(return_value, row);
-
- /* field name */
- add_assoc_string(row, "name", cur_f->db_fname, 1);
-
- /* field type */
- switch (cur_f->db_type) {
- case 'C': add_assoc_string(row, "type", "character", 1); break;
- case 'D': add_assoc_string(row, "type", "date", 1); break;
- case 'I': add_assoc_string(row, "type", "integer", 1); break;
- case 'N': add_assoc_string(row, "type", "number", 1); break;
- case 'L': add_assoc_string(row, "type", "boolean", 1); break;
- case 'M': add_assoc_string(row, "type", "memo", 1); break;
- default: add_assoc_string(row, "type", "unknown", 1); break;
- }
-
- /* length of field */
- add_assoc_long(row, "length", cur_f->db_flen);
-
- /* number of decimals in field */
- switch (cur_f->db_type) {
- case 'N':
- case 'I':
- add_assoc_long(row, "precision", cur_f->db_fdc);
- break;
- default:
- add_assoc_long(row, "precision", 0);
- }
-
- /* format for printing %s etc */
- add_assoc_string(row, "format", cur_f->db_format, 1);
-
- /* offset within record */
- add_assoc_long(row, "offset", cur_f->db_foffset);
- }
-}
-/* }}} */
-
-zend_module_entry dbase_module_entry = {
- STANDARD_MODULE_HEADER,
- "dbase", dbase_functions, PHP_MINIT(dbase), PHP_MSHUTDOWN(dbase), NULL, NULL, NULL, NO_VERSION_YET, STANDARD_MODULE_PROPERTIES
-};
-
-
-#ifdef COMPILE_DL_DBASE
-ZEND_GET_MODULE(dbase)
-
-#if defined(PHP_WIN32) && defined(THREAD_SAFE)
-
-/*NOTE: You should have an odbc.def file where you
-export DllMain*/
-BOOL WINAPI DllMain(HANDLE hModule,
- DWORD ul_reason_for_call,
- LPVOID lpReserved)
-{
- return 1;
-}
-#endif
-#endif
-
-#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/dbase/dbase.dsp b/ext/dbase/dbase.dsp
deleted file mode 100644
index 7c75304983..0000000000
--- a/ext/dbase/dbase.dsp
+++ /dev/null
@@ -1,151 +0,0 @@
-# Microsoft Developer Studio Project File - Name="dbase" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=dbase - Win32 Release_TS
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "dbase.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "dbase.mak" CFG="dbase - Win32 Release_TS"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "dbase - Win32 Release_TS" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "dbase - Win32 Debug_TS" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "dbase - Win32 Release_TS"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release_TS"
-# PROP BASE Intermediate_Dir "Release_TS"
-# PROP BASE Ignore_Export_Lib 0
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release_TS"
-# PROP Intermediate_Dir "Release_TS"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MT /W3 /GX /O2 /I "..\.." /I "..\..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\..\TSRM" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "COMPILE_DL_DBASE" /D ZTS=1 /YX /FD /c
-# ADD CPP /nologo /MD /W3 /GX /O2 /I "..\.." /I "..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\TSRM" /I "..\..\main" /D "WIN32" /D "DBASE_EXPORTS" /D "COMPILE_DL_DBASE" /D ZTS=1 /D HAVE_DBASE=1 /D ZEND_DEBUG=0 /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "ZEND_WIN32" /D "PHP_WIN32" /D DBASE=1 /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x406 /d "NDEBUG"
-# ADD RSC /l 0x406 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib php5ts.lib /nologo /dll /machine:I386
-# ADD LINK32 php5ts.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 /out:"..\..\Release_TS/php_dbase.dll" /libpath:"..\..\Release_TS" /libpath:"..\..\Release_TS_Inline"
-# SUBTRACT LINK32 /pdb:none
-
-!ELSEIF "$(CFG)" == "dbase - Win32 Debug_TS"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Debug_TS"
-# PROP BASE Intermediate_Dir "Debug_TS"
-# PROP BASE Ignore_Export_Lib 0
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Debug_TS"
-# PROP Intermediate_Dir "Debug_TS"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MT /W3 /GX /O2 /I "..\.." /I "..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\TSRM" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "COMPILE_DL_DBASE" /D ZTS=1 /YX /FD /c
-# ADD CPP /nologo /MDd /W3 /GX /ZI /Od /I "..\.." /I "..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\TSRM" /I "..\..\main" /D ZEND_DEBUG=1 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "DBASE_EXPORTS" /D "COMPILE_DL_DBASE" /D ZTS=1 /D "ZEND_WIN32" /D "PHP_WIN32" /D HAVE_DBASE=1 /D DBASE=1 /FR /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x406 /d "NDEBUG"
-# ADD RSC /l 0x406 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib php5ts.lib /nologo /dll /machine:I386
-# ADD LINK32 php5ts_debug.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /incremental:yes /debug /machine:I386 /out:"..\..\Debug_TS/php_dbase.dll" /libpath:"..\..\Debug_TS"
-# SUBTRACT LINK32 /pdb:none
-
-!ENDIF
-
-# Begin Target
-
-# Name "dbase - Win32 Release_TS"
-# Name "dbase - Win32 Debug_TS"
-# Begin Group "Source Files"
-
-# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
-# Begin Source File
-
-SOURCE=.\dbase.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\dbf_head.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\dbf_misc.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\dbf_ndx.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\dbf_rec.c
-# End Source File
-# End Group
-# Begin Group "Header Files"
-
-# PROP Default_Filter "h;hpp;hxx;hm;inl"
-# Begin Source File
-
-SOURCE=.\dbf.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\dbf_head.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\dbf_misc.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\dbf_ndx.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\dbf_rec.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\php_dbase.h
-# End Source File
-# End Group
-# Begin Group "Resource Files"
-
-# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
-# End Group
-# End Target
-# End Project
diff --git a/ext/dbase/dbf.h b/ext/dbase/dbf.h
deleted file mode 100644
index c7ee8fde71..0000000000
--- a/ext/dbase/dbf.h
+++ /dev/null
@@ -1,94 +0,0 @@
-/*
- * Copyright (c) 1991, 1992, 1993 Brad Eacker,
- * (Music, Intuition, Software, and Computers)
- * All Rights Reserved
- */
-
-/*
- * dbf header structure on disk (pc dbase III)
- *
- * Basic info taken from:
- * "File Formats for Popular PC Software"
- * Jeff Walden
- * (c) 1986 John Wiley & Sons, Inc.
- */
-
-#ifndef DBF_H_
-#define DBF_H_
-
-#include <stdlib.h>
-#include <string.h>
-#ifdef WIN32
-#include <io.h>
-#else
-#include <unistd.h>
-#endif
-
-/* So we can use O_BINARY on non-Win32 systems. */
-#if !defined(O_BINARY) && !defined(WIN32)
-#define O_BINARY (0)
-#endif
-
-struct dbf_dhead {
- char dbh_dbt; /* memo (dbt) file present */
- char dbh_date[3]; /* last update YY, MM, DD */
- char dbh_records[4]; /* number of records LE */
- char dbh_hlen[2]; /* header length LE */
- char dbh_rlen[2]; /* record length LE */
- char dbh_res[20]; /* padding */
-};
-#define DBH_DATE_YEAR 0 /* byte offset for year in dbh_date */
-#define DBH_DATE_MONTH 1
-#define DBH_DATE_DAY 2
-
-/*
- * field description on disk
- */
-
-#define DBF_NAMELEN 11
-
-struct dbf_dfield {
- char dbf_name[DBF_NAMELEN]; /* name of field */
- char dbf_type; /* type of field */
- char dbf_fda[4]; /* something for dbase III */
- char dbf_flen[2]; /* field length [and decimal if N] */
- char dbf_res[14]; /* padding */
-};
-
-struct db_field {
- char db_fname[DBF_NAMELEN+1]; /* 0 terminated */
- char db_type; /* type of field */
- int db_flen; /* length of field */
- int db_fdc; /* number of decimals in field */
-
- char *db_format; /* format for printing %s etc */
- int db_foffset; /* offset within record */
-};
-typedef struct db_field dbfield_t;
-
-struct db_head {
- int db_fd;
- unsigned char db_dbt; /* dbt present */
- char db_date[9]; /* date of last update in db format */
- long db_records; /* number of records */
- int db_hlen; /* header length */
- int db_rlen; /* record length */
-
- int db_nfields; /* number of fields */
- dbfield_t *db_fields; /* field info */
- char *db_name; /* name of dbf file */
- int db_cur_rec; /* current record */
-};
-typedef struct db_head dbhead_t;
-
-#define DBH_TYPE_NORMAL 0x03
-#define DBH_TYPE_MEMO 0x83
-
-#define VALID_RECORD ' '
-#define DELETED_RECORD '*'
-
-#include "dbf_head.h"
-#include "dbf_misc.h"
-#include "dbf_rec.h"
-
-#endif /* DBF_H_ */
diff --git a/ext/dbase/dbf_head.c b/ext/dbase/dbf_head.c
deleted file mode 100644
index 9ec1f40d6c..0000000000
--- a/ext/dbase/dbf_head.c
+++ /dev/null
@@ -1,291 +0,0 @@
-/*
- * Copyright (c) 1991, 1992, 1993 Brad Eacker,
- * (Music, Intuition, Software, and Computers)
- * All Rights Reserved
- */
-
-#include <stdio.h>
-#include <fcntl.h>
-
-#include "php.h"
-#include "dbf.h"
-
-void free_dbf_head(dbhead_t *dbh);
-int get_dbf_field(dbhead_t *dbh, dbfield_t *dbf);
-
-/*
- * get the header info from the file
- * basic header info & field descriptions
- */
-dbhead_t *get_dbf_head(int fd)
-{
- dbhead_t *dbh;
- struct dbf_dhead dbhead;
- dbfield_t *dbf, *cur_f, *tdbf;
- int ret, nfields, offset, gf_retval;
-
- if ((dbh = (dbhead_t *)malloc(sizeof(dbhead_t))) == NULL)
- return NULL;
- if (lseek(fd, 0, 0) < 0)
- return NULL;
- if ((ret = read(fd, &dbhead, sizeof(dbhead))) < 0)
- return NULL;
-
- /* build in core info */
- dbh->db_fd = fd;
- dbh->db_dbt = dbhead.dbh_dbt;
- dbh->db_records = get_long(dbhead.dbh_records);
- dbh->db_hlen = get_short(dbhead.dbh_hlen);
- dbh->db_rlen = get_short(dbhead.dbh_rlen);
-
- db_set_date(dbh->db_date, dbhead.dbh_date[DBH_DATE_YEAR] + 1900,
- dbhead.dbh_date[DBH_DATE_MONTH],
- dbhead.dbh_date[DBH_DATE_DAY]);
-
- /* malloc enough memory for the maximum number of fields:
- 32 * 1024 = 32K dBase5 (for Win) seems to allow that many */
- tdbf = (dbfield_t *)malloc(sizeof(dbfield_t)*1024);
-
- offset = 1;
- nfields = 0;
- gf_retval = 0;
- for (cur_f = tdbf; gf_retval < 2 && nfields < 1024; cur_f++) {
- gf_retval = get_dbf_field(dbh, cur_f);
-
- if (gf_retval < 0) {
- free_dbf_head(dbh);
- return NULL;
- }
- if (gf_retval != 2 ) {
- cur_f->db_foffset = offset;
- offset += cur_f->db_flen;
- nfields++;
- }
- }
- dbh->db_nfields = nfields;
-
- /* malloc the right amount of space for records, copy and destroy old */
- dbf = (dbfield_t *)malloc(sizeof(dbfield_t)*nfields);
- memcpy(dbf, tdbf, sizeof(dbfield_t)*nfields);
- free(tdbf);
-
- dbh->db_fields = dbf;
-
- return dbh;
-}
-
-/*
- * free up the header info built above
- */
-void free_dbf_head(dbhead_t *dbh)
-{
- dbfield_t *dbf, *cur_f;
- int nfields;
-
- dbf = dbh->db_fields;
- nfields = dbh->db_nfields;
- for (cur_f = dbf; cur_f < &dbf[nfields]; cur_f++) {
- if (cur_f->db_format) {
- free(cur_f->db_format);
- }
- }
-
- free(dbf);
- free(dbh);
-}
-
-/*
- * put out the header info
- */
-int put_dbf_head(dbhead_t *dbh)
-{
- int fd = dbh->db_fd;
- struct dbf_dhead dbhead;
- int ret;
-
- memset (&dbhead, 0, sizeof(dbhead));
-
- /* build on disk info */
- dbhead.dbh_dbt = dbh->db_dbt;
- put_long(dbhead.dbh_records, dbh->db_records);
- put_short(dbhead.dbh_hlen, dbh->db_hlen);
- put_short(dbhead.dbh_rlen, dbh->db_rlen);
-
- /* put the date spec'd into the on disk header */
- dbhead.dbh_date[DBH_DATE_YEAR] =(char)(db_date_year(dbh->db_date) -
- 1900);
- dbhead.dbh_date[DBH_DATE_MONTH]=(char)(db_date_month(dbh->db_date));
- dbhead.dbh_date[DBH_DATE_DAY] =(char)(db_date_day(dbh->db_date));
-
- if (lseek(fd, 0, 0) < 0)
- return -1;
- if ((ret = write(fd, &dbhead, sizeof(dbhead))) < 0)
- return -1;
- return ret;
-}
-
-/*
- * get a field off the disk from the current file offset
- */
-int get_dbf_field(dbhead_t *dbh, dbfield_t *dbf)
-{
- struct dbf_dfield dbfield;
- int ret;
-
- if ((ret = read(dbh->db_fd, &dbfield, sizeof(dbfield))) < 0) {
- return ret;
- }
-
- /* Check for the '0Dh' field terminator , if found return '2'
- which will tell the loop we are at the end of fields */
- if (dbfield.dbf_name[0]==0x0d) {
- return 2;
- }
-
- /* build the field name */
- copy_crimp(dbf->db_fname, dbfield.dbf_name, DBF_NAMELEN);
-
- dbf->db_type = dbfield.dbf_type;
- switch (dbf->db_type) {
- case 'N':
- dbf->db_flen = dbfield.dbf_flen[0];
- dbf->db_fdc = dbfield.dbf_flen[1];
- break;
- default:
- dbf->db_flen = get_short(dbfield.dbf_flen);
- break;
- }
-
- if ((dbf->db_format = get_dbf_f_fmt(dbf)) == NULL) {
- return 1;
- }
-
- return 0;
-}
-
-/*
- * put a field out on the disk at the current file offset
- */
-int put_dbf_field(dbhead_t *dbh, dbfield_t *dbf)
-{
- struct dbf_dfield dbfield;
- char *scp, *dcp;
- int ret;
-
- memset (&dbfield, 0, sizeof(dbfield));
-
- /* build the on disk field info */
- scp = dbf->db_fname; dcp = dbfield.dbf_name;
-
- strncpy(dbfield.dbf_name, dbf->db_fname, DBF_NAMELEN);
-
- dbfield.dbf_type = dbf->db_type;
- switch (dbf->db_type) {
- case 'N':
- dbfield.dbf_flen[0] = dbf->db_flen;
- dbfield.dbf_flen[1] = dbf->db_fdc;
- break;
- default:
- put_short(dbfield.dbf_flen, dbf->db_flen);
- }
-
- /* now write it out to disk */
- if ((ret = write(dbh->db_fd, &dbfield, sizeof(dbfield))) < 0) {
- return ret;
- }
- return 1;
-}
-
-/*
- * put out all the info at the top of the file...
- */
-static char end_stuff[2] = {0x0d, 0};
-
-void put_dbf_info(dbhead_t *dbh)
-{
- dbfield_t *dbf;
- char *cp;
- int fcnt;
-
- if ((cp = db_cur_date(NULL))) {
- strncpy(dbh->db_date, cp, 8);
- free(cp);
- }
- put_dbf_head(dbh);
- dbf = dbh->db_fields;
- for (fcnt = dbh->db_nfields; fcnt > 0; fcnt--, dbf++)
- put_dbf_field(dbh, dbf);
- write(dbh->db_fd, end_stuff, 1);
-}
-
-char *get_dbf_f_fmt(dbfield_t *dbf)
-{
- char format[100];
-
- /* build the field format for printf */
- switch (dbf->db_type) {
- case 'C':
- sprintf(format, "%%-%ds", dbf->db_flen);
- break;
- case 'N':
- case 'L':
- case 'D':
- sprintf(format, "%%%ds", dbf->db_flen);
- break;
- case 'M':
- strcpy(format, "%s");
- break;
- }
- return (char *)strdup(format);
-}
-
-dbhead_t *dbf_open(char *dp, int o_flags TSRMLS_DC)
-{
- int fd;
- char *cp;
- dbhead_t *dbh;
-
- cp = dp;
- if ((fd = VCWD_OPEN(cp, o_flags|O_BINARY)) < 0) {
- cp = (char *)malloc(MAXPATHLEN); /* So where does this get free()'d? -RL */
- strncpy(cp, dp, MAXPATHLEN-5); strcat(cp, ".dbf");
- if ((fd = VCWD_OPEN(cp, o_flags)) < 0) {
- free(cp);
- perror("open");
- return NULL;
- }
- }
-
- if ((dbh = get_dbf_head(fd)) == 0) {
- fprintf(stderr, "Unable to get header\n");
- return NULL;
- }
- dbh->db_name = cp;
- dbh->db_cur_rec = 0;
-
- return dbh;
-}
-
-void dbf_head_info(dbhead_t *dbh)
-{
- int nfields;
- dbfield_t *dbf, *cur_f;
-
- nfields = dbh->db_nfields;
- printf("# fields: %d, record len: %d, total records %ld\n",
- nfields, dbh->db_rlen, dbh->db_records);
- dbf = dbh->db_fields;
- for (cur_f = dbf; cur_f < &dbf[nfields] ; cur_f++) {
- printf("# %s, %c, %d, %d\n", cur_f->db_fname,
- cur_f->db_type, cur_f->db_flen, cur_f->db_fdc);
- }
-}
-
-/*
- * 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/dbase/dbf_head.h b/ext/dbase/dbf_head.h
deleted file mode 100644
index 9a17a3a91f..0000000000
--- a/ext/dbase/dbf_head.h
+++ /dev/null
@@ -1,11 +0,0 @@
-#include "php.h"
-
-extern dbhead_t *get_dbf_head(int fd);
-void free_dbf_head(dbhead_t *dbh);
-extern int put_dbf_head(dbhead_t *dbh);
-extern int get_dbf_field(dbhead_t *dbh, dbfield_t *dbf);
-extern int put_dbf_field(dbhead_t *dbh, dbfield_t *dbf);
-void put_dbf_info(dbhead_t *dbh);
-extern char *get_dbf_f_fmt(dbfield_t *dbf);
-extern dbhead_t *dbf_open(char *dp, int o_flags TSRMLS_DC);
-void dbf_head_info(dbhead_t *dbh);
diff --git a/ext/dbase/dbf_misc.c b/ext/dbase/dbf_misc.c
deleted file mode 100644
index ad17bd4e3f..0000000000
--- a/ext/dbase/dbf_misc.c
+++ /dev/null
@@ -1,179 +0,0 @@
-/*
- * Copyright (c) 1991, 1992, 1993 Brad Eacker,
- * (Music, Intuition, Software, and Computers)
- * All Rights Reserved
- */
-#include <stdlib.h>
-#include <stdio.h>
-#include <sys/types.h>
-
-#include "dbf_misc.h"
-
-#include "php_reentrancy.h"
-
-/*
- * routine to change little endian long to host long
- */
-long get_long(char *cp)
-{
- int ret;
- unsigned char *source = (unsigned char *)cp;
-
- ret = *source++;
- ret += ((*source++)<<8);
- ret += ((*source++)<<16);
- ret += ((*source++)<<24);
-
- return ret;
-}
-
-void put_long(char *cp, long lval)
-{
- *cp++ = lval & 0xff;
- *cp++ = (lval >> 8) & 0xff;
- *cp++ = (lval >> 16) & 0xff;
- *cp++ = (lval >> 24) & 0xff;
-}
-
-/*
- * routine to change little endian short to host short
- */
-int get_short(char *cp)
-{
- int ret;
- unsigned char *source = (unsigned char *)cp;
-
- ret = *source++;
- ret += ((*source++)<<8);
-
- return ret;
-}
-
-void put_short(char *cp, int sval)
-{
- *cp++ = sval & 0xff;
- *cp++ = (sval >> 8) & 0xff;
-}
-
-double get_double(char *cp)
-{
- double ret;
- unsigned char *dp = (unsigned char *)&ret;
-
- dp[7] = *cp++;
- dp[6] = *cp++;
- dp[5] = *cp++;
- dp[4] = *cp++;
- dp[3] = *cp++;
- dp[2] = *cp++;
- dp[1] = *cp++;
- dp[0] = *cp++;
-
- return ret;
-}
-
-void put_double(char *cp, double fval)
-{
- unsigned char *dp = (unsigned char *)&fval;
-
- cp[7] = *dp++;
- cp[6] = *dp++;
- cp[5] = *dp++;
- cp[4] = *dp++;
- cp[3] = *dp++;
- cp[2] = *dp++;
- cp[1] = *dp++;
- cp[0] = *dp++;
-}
-
-void copy_fill(char *dp, char *sp, int len)
-{
- while (*sp && len > 0) {
- *dp++ = *sp++;
- len--;
- }
- while (len-- > 0)
- *dp++ = ' ';
-}
-
-void copy_crimp(char *dp, char *sp, int len)
-{
- while (len-- > 0) {
- *dp++ = *sp++;
- }
- *dp = 0;
- for (dp-- ; *dp == ' '; dp--) {
- *dp = 0;
- }
-
-}
-
-void db_set_date(char *cp, int year, int month, int day)
-{
- if (month > 12)
- month = 0;
- if (day > 31)
- day = 0;
- sprintf(cp, "%d", year);
- cp[4] = month / 10 + '0';
- cp[5] = month % 10 + '0';
- cp[6] = day / 10 + '0';
- cp[7] = day % 10 + '0';
- cp[8] = 0;
-}
-
-int db_date_year(char *cp)
-{
- int year, i;
-
- for (year = 0, i = 0; i < 4; i++)
- year = year * 10 + (cp[i] - '0');
- return year;
-}
-
-int db_date_month(char *cp)
-{
- int month, i;
-
- for (month = 0, i = 4; i < 6; i++)
- month = month * 10 + (cp[i] - '0');
- return month;
-}
-
-int db_date_day(char *cp)
-{
- int day, i;
-
- for (day = 0, i = 6; i < 8; i++)
- day = day * 10 + (cp[i] - '0');
- return day;
-}
-
-#include <time.h>
-
-char *db_cur_date(char *cp)
-{
- struct tm *ctm, tmbuf;
- time_t c_time;
-
- c_time = time((time_t *)NULL);
- ctm = php_localtime_r(&c_time, &tmbuf);
- if (cp == NULL)
- cp = (char *)malloc(9);
-
- if (ctm == NULL || cp == NULL)
- return NULL;
-
- db_set_date(cp, ctm->tm_year + 1900, ctm->tm_mon + 1, ctm->tm_mday);
-
- return cp;
-}
-
-/*
- * 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/dbase/dbf_misc.h b/ext/dbase/dbf_misc.h
deleted file mode 100644
index 37fe8b0ea9..0000000000
--- a/ext/dbase/dbf_misc.h
+++ /dev/null
@@ -1,13 +0,0 @@
-void put_long(char *cp, long lval);
-extern long get_long(char *cp);
-extern int get_short(char *cp);
-void put_short(char *cp, int sval);
-void put_double(char *cp, double fval);
-extern double get_double(char *cp);
-void copy_fill(char *dp, char *sp, int len);
-void copy_crimp(char *dp, char *sp, int len);
-void db_set_date(char *cp, int year, int month, int day);
-extern int db_date_year(char *cp);
-extern int db_date_month(char *cp);
-extern int db_date_day(char *cp);
-extern char *db_cur_date(char *cp);
diff --git a/ext/dbase/dbf_ndx.c b/ext/dbase/dbf_ndx.c
deleted file mode 100644
index 121a0e81e2..0000000000
--- a/ext/dbase/dbf_ndx.c
+++ /dev/null
@@ -1,191 +0,0 @@
-/*
- * Copyright (c) 1991, 1992, 1993 Brad Eacker,
- * (Music, Intuition, Software, and Computers)
- * All Rights Reserved
- */
-
-#include <stdio.h>
-#include <fcntl.h>
-
-#include "dbf.h"
-#include "dbf_ndx.h"
-
-/*
- * get the ndx header for this file
- */
-ndx_header_t *ndx_get_header(int fd)
-{
- dndx_header_t *dp;
- ndx_header_t *np;
-
- if ((dp = (dndx_header_t *)malloc(NDX_PAGE_SZ)) == NULL)
- return NULL;
- if ((np = (ndx_header_t *)malloc(sizeof(ndx_header_t))) == NULL) {
- free(dp);
- return NULL;
- }
- if ((lseek(fd, 0, 0) < 0) || (read(fd, dp, NDX_PAGE_SZ) < 0)) {
- free(dp); free(np);
- return NULL;
- }
- np->ndx_hpage = dp;
- np->ndx_fd = fd;
- np->ndx_start_pg = get_long(dp->dndx_st_pg);
- np->ndx_total_pgs = get_long(dp->dndx_tot_pg);
- np->ndx_key_len = get_short(dp->dndx_key_len);
- np->ndx_keys_ppg = get_short(dp->dndx_keys_ppg);
- np->ndx_key_type = get_short(dp->dndx_key_type);
- np->ndx_key_size = get_long(dp->dndx_size_key);
- np->ndx_key_name = dp->dndx_key_name;
- np->ndx_unique = dp->dndx_unique;
-
- np->ndx_fp = NULL;
-
- return np;
-}
-
-static ndx_page_t *ndx_get_page(ndx_header_t *hp, int pageno)
-{
- ndx_page_t *fp;
- dndx_page_t *dp;
- ndx_record_t *rp;
-
-#if PHP_DEBUG
- printf("getting page %d", pageno);
-#endif
- if ((fp = (ndx_page_t *)malloc(sizeof(ndx_page_t))) == NULL)
- return NULL;
- if ((dp = (dndx_page_t *)malloc(NDX_PAGE_SZ)) == NULL) {
- free(fp);
- return NULL;
- }
- if ((rp = (ndx_record_t *)malloc(sizeof(ndx_record_t) * hp->ndx_keys_ppg)) == NULL) {
- free(dp); free(fp);
- return NULL;
- }
- fp->ndxp_page_data = dp;
- if ((lseek(hp->ndx_fd, pageno * NDX_PAGE_SZ, 0) < 0) ||
- (read(hp->ndx_fd, dp, NDX_PAGE_SZ) < 0)) {
- free(fp); free(dp);
- return NULL;
- }
- fp->ndxp_parent = NULL;
- fp->ndxp_page_no = pageno;
- fp->ndxp_num_keys = get_long(dp->dndxp_num_keys);
- memset(rp, 0, sizeof(ndx_record_t) * hp->ndx_keys_ppg);
- fp->ndxp_records = rp;
- fp->ndxp_header_p = hp;
-#if PHP_DEBUG
- printf(", n_keys %ld\n", fp->ndxp_num_keys);
-#endif
- return fp;
-}
-
-/*
- * get the first entry for this ndx
- */
-static ndx_page_t *ndx_get_first_pg(ndx_header_t *hp)
-{
- ndx_page_t *fp;
-
- if (hp->ndx_fp)
- return hp->ndx_fp;
- if ((fp = ndx_get_page(hp, hp->ndx_start_pg))) {
- hp->ndx_fp = fp;
- }
- return fp;
-}
-
-static ndx_record_t *ndx_get_record(ndx_page_t *fp, int rec_no)
-{
- ndx_record_t *rp;
- ndx_header_t *hp = fp->ndxp_header_p;
- struct dndx_record *drp;
-
-#if PHP_DEBUG
- printf("page %ld, rec %d: ", fp->ndxp_page_no, rec_no);
-#endif
- if (rec_no >= fp->ndxp_num_keys)
- return NULL;
- rp = &(fp->ndxp_records[rec_no]);
- if (!rp->ndxr_page) {
- rp->ndxr_page = fp;
- drp = (dndx_record_t *)((char *)&fp->ndxp_page_data->dndx_rp
- + rec_no * hp->ndx_key_size);
- rp->ndxr_left = get_long(drp->dndx_left_pg);
- rp->ndxr_rec = get_long(drp->dndx_dbf_rec);
- rp->ndxr_key_data = &drp->dndx_key_data;
- rp->ndxr_p_nrec = rec_no;
- }
-#if PHP_DEBUG
- printf("left %ld, dbf_rec %ld, data '%s'\n", rp->ndxr_left,
- rp->ndxr_rec, rp->ndxr_key_data);
-#endif
- return rp;
-}
-
-static ndx_record_t *ndx_scan_down(ndx_header_t *hp, ndx_page_t *fp, int recno)
-{
- ndx_page_t *np;
- ndx_record_t *rp;
-
- while ((rp = ndx_get_record(fp, recno)) && (rp->ndxr_rec == 0)) {
- np = ndx_get_page(hp, rp->ndxr_left);
- np->ndxp_parent = fp;
- np->ndxp_par_rno = recno;
- fp = np;
- recno = 0;
- }
- return rp;
-}
-
-static ndx_record_t *ndx_scan_up(ndx_header_t *hp, ndx_page_t *fp, int recno)
-{
- ndx_record_t *rp;
-
- if (fp == NULL)
- rp = NULL;
- else if (recno < fp->ndxp_num_keys) {
- rp = ndx_scan_down(hp, fp, recno);
- } else {
- rp = ndx_scan_up(hp, fp->ndxp_parent, fp->ndxp_par_rno + 1);
- }
- return rp;
-}
-
-ndx_record_t *ndx_get_first_rec(ndx_header_t *hp)
-{
- ndx_page_t *fp;
- ndx_record_t *rp = NULL;
-
- if ((fp = ndx_get_first_pg(hp))) {
- fp->ndxp_last_key = 0;
- rp = ndx_scan_down(hp, fp, 0);
- }
- hp->ndx_cur_rec = rp;
- return rp;
-}
-
-ndx_record_t *ndx_get_next_rec(ndx_header_t *hp, ndx_record_t *rp)
-{
- ndx_page_t *fp;
- int rec_no;
-
- fp = rp->ndxr_page;
- rec_no = rp->ndxr_p_nrec + 1;
- if (rec_no < fp->ndxp_num_keys) {
- rp = ndx_scan_down(hp, fp, rec_no);
- } else {
- rp = ndx_scan_up(hp, fp->ndxp_parent, fp->ndxp_par_rno + 1);
- }
- return rp;
-}
-
-/*
- * 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/dbase/dbf_ndx.h b/ext/dbase/dbf_ndx.h
deleted file mode 100644
index 4bc3d29641..0000000000
--- a/ext/dbase/dbf_ndx.h
+++ /dev/null
@@ -1,98 +0,0 @@
-/*
- * Copyright (c) 1993 Brad Eacker,
- * (Music, Intuition, Software, and Computers)
- * All Rights Reserved
- */
-
-/*
- * dbf .ndx header structure on disk and in memory
- *
- * Basic info taken from:
- * "Clipper Programming Guide, 3rd Edition, Version 5.01"
- * by Rick Spence
- */
-
-#ifndef DBF_NDX_H_
-#define DBF_NDX_H_
-
-#include "dbf.h"
-
-#define NDX_PAGE_SZ 512
-
-/* on disk ndx header */
-struct dndx_header {
- char dndx_st_pg[4]; /* starting page number */
- char dndx_tot_pg[4]; /* total number of pages */
- char dndx_filler1[4]; /* space */
- char dndx_key_len[2]; /* key length */
- char dndx_keys_ppg[2]; /* number of keys per page */
- char dndx_key_type[2]; /* key type */
- char dndx_size_key[4]; /* size of the key record */
- char dndx_filler2; /* space */
- char dndx_unique; /* whether or not done with unique */
- char dndx_key_name[488]; /* string defining the key */
-};
-typedef struct dndx_header dndx_header_t;
-
-/* in memory ndx header */
-struct ndx_header {
- long ndx_start_pg;
- long ndx_total_pgs;
- unsigned short ndx_key_len;
- unsigned short ndx_keys_ppg;
- unsigned short ndx_key_type;
- char ndx_unique;
- long ndx_key_size;
- char *ndx_key_name;
- int ndx_fd;
- struct ndx_page *ndx_fp;
- dndx_header_t *ndx_hpage;
- struct ndx_record *ndx_cur_rec;
-};
-typedef struct ndx_header ndx_header_t;
-
-/* these are the possible values in the key type field */
-#define NDX_CHAR_TYPE 00
-#define NDX_NUM_TYPE 01
-
-/* on disk key record */
-struct dndx_record {
- char dndx_left_pg[4]; /* number of left page */
- char dndx_dbf_rec[4]; /* dbf record number */
- char dndx_key_data; /* key data */
-};
-typedef struct dndx_record dndx_record_t;
-
-struct ndx_record {
- long ndxr_left;
- long ndxr_rec;
- char *ndxr_key_data;
- struct ndx_page *ndxr_page; /* page pointer to where we are from*/
- int ndxr_p_nrec; /* number of the record within page */
-};
-typedef struct ndx_record ndx_record_t;
-
-struct dndx_page {
- char dndxp_num_keys[4]; /* number of keys on this page */
- struct dndx_record dndx_rp;
-};
-typedef struct dndx_page dndx_page_t;
-
-struct ndx_page {
- long ndxp_page_no;
- long ndxp_num_keys;
- dndx_page_t *ndxp_page_data;
- ndx_header_t *ndxp_header_p;
- long ndxp_last_key;
- struct ndx_page *ndxp_parent; /* parent page */
- int ndxp_par_rno; /* record number within parent */
- struct ndx_record *ndxp_records;
-};
-typedef struct ndx_page ndx_page_t;
-
-extern ndx_header_t *ndx_get_header(int);
-
-extern ndx_record_t *ndx_get_first_rec(ndx_header_t *);
-extern ndx_record_t *ndx_get_next_rec(ndx_header_t *, ndx_record_t *);
-
-#endif /* DBF_NDX_H_ */
diff --git a/ext/dbase/dbf_rec.c b/ext/dbase/dbf_rec.c
deleted file mode 100644
index 6e872d3fb7..0000000000
--- a/ext/dbase/dbf_rec.c
+++ /dev/null
@@ -1,206 +0,0 @@
-/*
- * Copyright (c) 1993 Brad Eacker,
- * (Music, Intuition, Software, and Computers)
- * All Rights Reserved
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "php.h"
-
-#include "ext/standard/flock_compat.h"
-
-#include <stdio.h>
-#include <fcntl.h>
-
-#include "dbf.h"
-
-int get_piece(dbhead_t *dbh, long offset, char *cp, int len);
-int put_piece(dbhead_t *dbh, long offset, char *cp, int len);
-
-/*
- * get a record off the database
- */
-char *get_dbf_record(dbhead_t *dbh, long rec_num)
-{
- long offset;
- char *cp;
-
- if (rec_num > dbh->db_records) {
- return NULL;
- }
- if ((cp = (char *)malloc(dbh->db_rlen)) == NULL) {
- return NULL;
- }
-
- /* go to the correct spot on the file */
- offset = dbh->db_hlen + (rec_num - 1) * dbh->db_rlen;
- if (get_piece(dbh, offset, cp, dbh->db_rlen) != dbh->db_rlen) {
- free(cp);
- cp = NULL;
- }
- if (cp)
- dbh->db_cur_rec = rec_num;
- return cp;
-}
-
-int
-get_piece(dbhead_t *dbh, long offset, char *cp, int len)
-{
- /* go to the correct spot on the file */
- if ( lseek(dbh->db_fd, offset, 0) < 0 ) {
- return -1;
- }
-
- /* read the record into the allocated space */
- return read(dbh->db_fd, cp, len);
-}
-
-/*
- * put a record to the database
- */
-long put_dbf_record(dbhead_t *dbh, long rec_num, char *cp)
-{
- long offset;
-
- if (rec_num == 0) {
- rec_num = dbh->db_records;
- }
- if (rec_num > dbh->db_records) {
- return 0L;
- }
- /* go to the correct spot on the file */
- offset = dbh->db_hlen + (rec_num - 1) * dbh->db_rlen;
- if (put_piece(dbh, offset, cp, dbh->db_rlen) != dbh->db_rlen) {
- rec_num = -1;
- }
- return rec_num;
-}
-
-int put_piece(dbhead_t *dbh, long offset, char *cp, int len)
-{
- /* go to the correct spot on the file */
- if ( lseek(dbh->db_fd, offset, 0) < 0 ) {
- return -1;
- }
-
- /* write the record into the file */
- return write(dbh->db_fd, cp, len);
-}
-
-int del_dbf_record(dbhead_t *dbh, long rec_num)
-{
- int ret = 0;
- char *cp;
-
- if (rec_num > dbh->db_records)
- return -1;
- if ((cp = get_dbf_record(dbh, rec_num))) {
- *cp = DELETED_RECORD;
- ret = put_dbf_record(dbh, rec_num, cp);
- free(cp);
- }
- return ret;
-}
-
-void pack_dbf(dbhead_t *dbh)
-{
- long out_off, in_off;
- int rec_cnt, new_cnt;
- char *cp;
-
- if ((cp = (char *)malloc(dbh->db_rlen)) == NULL) {
- return;
- }
- in_off = out_off = dbh->db_hlen;
-
- new_cnt = 0;
- rec_cnt = dbh->db_records;
- while (rec_cnt > 0) {
- if (get_piece(dbh, in_off, cp, dbh->db_rlen) < 0)
- break;
-
- if (*cp != DELETED_RECORD) {
- /* write the record into the file */
- if (put_piece(dbh, out_off, cp, dbh->db_rlen) < 0)
- break;
- out_off += dbh->db_rlen;
- new_cnt++;
- }
- in_off += dbh->db_rlen;
- rec_cnt--;
- }
- free(cp);
-
- /* Try to truncate the file to the right size. */
- if (ftruncate(dbh->db_fd, out_off) != 0) {
- TSRMLS_FETCH();
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "dbase_pack() couldn't truncate the file to the right size. Some deleted records may still be left in there.");
- }
-
- if (rec_cnt == 0)
- dbh->db_records = new_cnt;
-}
-
-/* routine to get a field from a record */
-char *get_field_val(char *rp, dbfield_t *fldp, char *cp)
-{
- int flen = fldp->db_flen;
-
- if ( !cp )
- cp = (char *)malloc(flen + 1);
- if ( cp ) {
- strncpy(cp, &rp[fldp->db_foffset], flen);
- cp[flen] = 0;
- }
- return cp;
-}
-
-void put_field_val(char *rp, dbfield_t *fldp, char *cp)
-{
- strncpy(&rp[fldp->db_foffset], cp, fldp->db_flen);
-}
-
-/*
- * output a record
- */
-void out_rec(dbhead_t *dbh, dbfield_t *dbf, char *cp)
-{
- dbfield_t *cur_f;
- int nfields = dbh->db_nfields;
- char *fnp = (char *)malloc(dbh->db_rlen);
-
- printf("%c", *cp);
- for (cur_f = dbf; cur_f < &dbf[nfields] ; cur_f++) {
- printf(" ");
- printf(cur_f->db_format, get_field_val(cp, cur_f, fnp));
- }
- printf("\n");
- free(fnp);
-}
-
-/* check for record validity */
-int is_valid_rec(char *cp)
-{
- if (cp && (*cp == VALID_RECORD))
- return 1;
- else
- return 0;
-}
-
-/* get the next record */
-char *dbf_get_next(dbhead_t *dbh)
-{
- return get_dbf_record(dbh, dbh->db_cur_rec + 1);
-}
-
-/*
- * 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/dbase/dbf_rec.h b/ext/dbase/dbf_rec.h
deleted file mode 100644
index 6407c702f6..0000000000
--- a/ext/dbase/dbf_rec.h
+++ /dev/null
@@ -1,10 +0,0 @@
-extern char *get_dbf_record(dbhead_t *dbh, long rec_num);
-extern long put_dbf_record(dbhead_t *dbh, long rec_num, char *cp);
-extern int put_piece(dbhead_t *dbh, long offset, char *cp, int len);
-extern int del_dbf_record(dbhead_t *dbh, long rec_num);
-void pack_dbf(dbhead_t *dbh);
-extern char *get_field_val(char *rp, dbfield_t *fldp, char *cp);
-void put_field_val(char *rp, dbfield_t *fldp, char *cp);
-void out_rec(dbhead_t *dbh, dbfield_t *dbf, char *cp);
-extern int is_valid_rec(char *cp);
-extern char *dbf_get_next(dbhead_t *dbh);
diff --git a/ext/dbase/package.xml b/ext/dbase/package.xml
deleted file mode 100644
index f0a30a5a20..0000000000
--- a/ext/dbase/package.xml
+++ /dev/null
@@ -1,57 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1" ?>
-<!DOCTYPE package SYSTEM "../pear/package.dtd">
-<package>
- <name>dbase</name>
- <summary>dBase database file access functions</summary>
- <maintainers>
- <maintainer>
- <user>jimw</user>
- <name>Jim Winstead</name>
- <email>jimw@php.net</email>
- <role>lead</role>
- </maintainer>
- </maintainers>
- <description>
-These functions allow you to access records stored
-in dBase-format (dbf) databases.
-
-There is no support for indexes or memo fields.
-There is no support for locking, too.
-Two concurrent webserver processes modifying the
-same dBase file will very likely ruin your database.
-
-dBase files are simple sequential files of fixed length records.
-Records are appended to the end of the file and delete records
-are kept until you call dbase_pack().
-</description>
- <license>PHP</license>
- <release>
- <state>beta</state>
- <version>5.0rc1</version>
- <date>2004-03-19</date>
- <notes>
-package.xml added to support intallation using pear installer
- </notes>
- <filelist>
- <file role="doc" name="CREDITS"/>
- <file role="src" name="config.m4"/>
- <file role="src" name="dbase.c"/>
- <file role="src" name="dbf.h"/>
- <file role="src" name="dbf_head.c"/>
- <file role="src" name="dbf_head.h"/>
- <file role="src" name="dbf_misc.c"/>
- <file role="src" name="dbf_misc.h"/>
- <file role="src" name="dbf_ndx.c"/>
- <file role="src" name="dbf_ndx.h"/>
- <file role="src" name="dbf_rec.c"/>
- <file role="src" name="dbf_rec.h"/>
- <file role="src" name="php_dbase.h"/>
- </filelist>
- <deps>
- <dep type="php" rel="ge" version="5" />
- </deps>
- </release>
-</package>
-<!--
-vim:et:ts=1:sw=1
--->
diff --git a/ext/dbase/php_dbase.h b/ext/dbase/php_dbase.h
deleted file mode 100644
index 2e86afee4e..0000000000
--- a/ext/dbase/php_dbase.h
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Jim Winstead <jimw@php.net> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifndef PHP_DBASE_H
-#define PHP_DBASE_H
-#if DBASE
-extern zend_module_entry dbase_module_entry;
-#define dbase_module_ptr &dbase_module_entry
-
-PHP_MINIT_FUNCTION(dbase);
-PHP_FUNCTION(dbase_open);
-PHP_FUNCTION(dbase_create);
-PHP_FUNCTION(dbase_close);
-PHP_FUNCTION(dbase_numrecords);
-PHP_FUNCTION(dbase_numfields);
-PHP_FUNCTION(dbase_add_record);
-PHP_FUNCTION(dbase_get_record);
-PHP_FUNCTION(dbase_delete_record);
-PHP_FUNCTION(dbase_pack);
-PHP_FUNCTION(dbase_get_record_with_names);
-PHP_FUNCTION(dbase_get_header_info);
-#else
-#define dbase_module_ptr NULL
-#endif
-
-#define phpext_dbase_ptr dbase_module_ptr
-
-#endif /* PHP_DBASE_H */
diff --git a/ext/dbx/CREDITS b/ext/dbx/CREDITS
deleted file mode 100644
index efc04660a4..0000000000
--- a/ext/dbx/CREDITS
+++ /dev/null
@@ -1,2 +0,0 @@
-dbx (database abstraction)
-Marc Boeren, Rui Hirokawa, Frank M. Kromann
diff --git a/ext/dbx/INSTALL b/ext/dbx/INSTALL
deleted file mode 100644
index d98e33a42d..0000000000
--- a/ext/dbx/INSTALL
+++ /dev/null
@@ -1,25 +0,0 @@
-
-If you downloaded this separately, you can place the dbx folder
-in the php-source-folders under the ext/ folder. Be sure to
-use buildconf to rebuild the configure script.
-
-Linux:
-
-Compile php with the --enable-dbx switch
-
-Windows:
-
-This should set all includepaths to the right
-relative folders. Open the .dsp and compile. You could also
-add this project to the php_modules project.
-It generates a php_dbx.dll in your extensions folder, and you
-must enable it in your php.ini file.
-
-
-When you run phpinfo(), dbx-support should be visible in the
-resulting table.
-
-Good luck and enjoy!
-
-Marc Boeren
-march 16th, 2001
diff --git a/ext/dbx/config.m4 b/ext/dbx/config.m4
deleted file mode 100644
index de6e857249..0000000000
--- a/ext/dbx/config.m4
+++ /dev/null
@@ -1,10 +0,0 @@
-dnl
-dnl $Id$
-dnl
-
-PHP_ARG_ENABLE(dbx,whether to enable dbx support,
-[ --enable-dbx Enable dbx])
-
-if test "$PHP_DBX" != "no"; then
- PHP_NEW_EXTENSION(dbx, dbx.c dbx_mysql.c dbx_odbc.c dbx_pgsql.c dbx_mssql.c dbx_fbsql.c dbx_oci8.c dbx_sybasect.c dbx_sqlite.c, $ext_shared)
-fi
diff --git a/ext/dbx/config.w32 b/ext/dbx/config.w32
deleted file mode 100644
index 77980548e4..0000000000
--- a/ext/dbx/config.w32
+++ /dev/null
@@ -1,10 +0,0 @@
-// $Id$
-// vim:ft=javascript
-
-ARG_ENABLE("dbx", "Enable the bundled dbx library", "no");
-
-if (PHP_DBX != "no") {
- EXTENSION("dbx", "dbx.c dbx_fbsql.c dbx_mssql.c dbx_mysql.c dbx_oci8.c dbx_odbc.c dbx_pgsql.c dbx_sqlite.c dbx_sybasect.c");
- AC_DEFINE('HAVE_DBX', 1, 'dbx support');
- ADD_FLAG("CFLAGS_DBX", "/D HAVE_LIBINTL=1");
-}
diff --git a/ext/dbx/dbx.c b/ext/dbx/dbx.c
deleted file mode 100644
index 1e15e7491d..0000000000
--- a/ext/dbx/dbx.c
+++ /dev/null
@@ -1,995 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 The PHP Group |
- +----------------------------------------------------------------------+
- | dbx module version 1.0 |
- +----------------------------------------------------------------------+
- | Copyright (c) 2001-2003 Guidance Rotterdam BV |
- +----------------------------------------------------------------------+
- | 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 : Marc Boeren <marc@guidance.nl> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "php.h"
-#include "php_ini.h"
-#include "php_dbx.h"
-#include "ext/standard/info.h"
-
-/* defines for supported databases */
-#define DBX_UNKNOWN 0
-#define DBX_MYSQL 1
-#define DBX_ODBC 2
-#define DBX_PGSQL 3
-#define DBX_MSSQL 4
-#define DBX_FBSQL 5
-#define DBX_OCI8 6
-#define DBX_SYBASECT 7
-#define DBX_SQLITE 8
-/* includes for supported databases */
-#include "dbx.h"
-#include "dbx_mysql.h"
-#include "dbx_odbc.h"
-#include "dbx_pgsql.h"
-#include "dbx_mssql.h"
-#include "dbx_fbsql.h"
-#include "dbx_oci8.h"
-#include "dbx_sybasect.h"
-#include "dbx_sqlite.h"
-
-/* support routines */
-int module_exists(char *module_name)
-{
- zend_module_entry *zme;
- int r;
- r = zend_hash_find(&module_registry, module_name, strlen(module_name)+1, (void **) &zme);
- return r==0?1:0;
-}
-
-int module_identifier_exists(long module_identifier)
-{
- switch (module_identifier) {
- case DBX_MYSQL: return module_exists("mysql");
- case DBX_ODBC: return module_exists("odbc");
- case DBX_PGSQL: return module_exists("pgsql");
- case DBX_MSSQL: return module_exists("mssql");
- case DBX_FBSQL: return module_exists("fbsql");
- case DBX_OCI8: return module_exists("oci8");
- case DBX_SYBASECT: return module_exists("sybase_ct");
- case DBX_SQLITE: return module_exists("sqlite");
- }
- return 0;
-}
-
-int get_module_identifier(char *module_name)
-{
- if (!strcmp("mysql", module_name)) return DBX_MYSQL;
- if (!strcmp("odbc", module_name)) return DBX_ODBC;
- if (!strcmp("pgsql", module_name)) return DBX_PGSQL;
- if (!strcmp("mssql", module_name)) return DBX_MSSQL;
- if (!strcmp("fbsql", module_name)) return DBX_FBSQL;
- if (!strcmp("oci8", module_name)) return DBX_OCI8;
- if (!strcmp("sybase_ct", module_name)) return DBX_SYBASECT;
- if (!strcmp("sqlite", module_name)) return DBX_SQLITE;
- return DBX_UNKNOWN;
-}
-
-int split_dbx_handle_object(zval **dbx_object, zval ***pdbx_handle, zval ***pdbx_module, zval ***pdbx_database TSRMLS_DC)
-{
- convert_to_object_ex(dbx_object);
- if (zend_hash_find(Z_OBJPROP_PP(dbx_object), "handle", 7, (void **) pdbx_handle)==FAILURE
- || zend_hash_find(Z_OBJPROP_PP(dbx_object), "module", 7, (void **) pdbx_module)==FAILURE
- || zend_hash_find(Z_OBJPROP_PP(dbx_object), "database", 9, (void **) pdbx_database)==FAILURE) {
- return 0;
- }
- return 1;
-}
-
-int split_dbx_result_object(zval **dbx_result, zval ***pdbx_link, zval ***pdbx_handle, zval ***pdbx_flags, zval ***pdbx_info, zval ***pdbx_cols , zval ***pdbx_rows TSRMLS_DC)
-{
- convert_to_object_ex(dbx_result);
- if (zend_hash_find(Z_OBJPROP_PP(dbx_result), "link", 5, (void **) pdbx_link)==FAILURE
- || zend_hash_find(Z_OBJPROP_PP(dbx_result), "handle", 7, (void **) pdbx_handle)==FAILURE
- || zend_hash_find(Z_OBJPROP_PP(dbx_result), "flags", 6, (void **) pdbx_flags)==FAILURE
- || zend_hash_find(Z_OBJPROP_PP(dbx_result), "info", 5, (void **) pdbx_info)==FAILURE
- || zend_hash_find(Z_OBJPROP_PP(dbx_result), "cols", 5, (void **) pdbx_cols)==FAILURE
- || zend_hash_find(Z_OBJPROP_PP(dbx_result), "rows", 5, (void **) pdbx_rows)==FAILURE) {
- return 0;
- }
- return 1;
-}
-
-/* from dbx.h, to be used in support-files (dbx_mysql.c etc...) */
-void dbx_call_any_function(INTERNAL_FUNCTION_PARAMETERS, char *function_name, zval **returnvalue, int number_of_arguments, zval ***params)
-{
- zval *zval_function_name;
-
- MAKE_STD_ZVAL(zval_function_name);
- ZVAL_STRING(zval_function_name, function_name, 1);
- if (call_user_function_ex(EG(function_table), NULL, zval_function_name, returnvalue, number_of_arguments, params, 0, NULL TSRMLS_CC) == FAILURE) {
- php_error_docref(NULL TSRMLS_CC, E_ERROR, "function '%s' not found", Z_STRVAL_P(zval_function_name));
- }
- zval_dtor(zval_function_name); /* to free stringvalue memory */
- FREE_ZVAL(zval_function_name);
-}
-
-/* switch_dbx functions declarations
- * each must be supported in the dbx_module files as dbx_module_function,
- * e.g. switch_dbx_connect expects a dbx_mysql_connect in de dbx_mysql files
- * all params except the dbx_module param are passed on
- * each must return the expected zval *'s in the rv parameter, which are passed on unmodified
- * do NOT use the return_value parameter from INTERNAL_FUNCTION_PARAMETERS
- * you can additionally return 0 or 1 for failure or success which will also be returned by the switches
- */
-int switch_dbx_connect(zval **rv, zval **host, zval **db, zval **username, zval **password, INTERNAL_FUNCTION_PARAMETERS, zval **dbx_module);
- /* returns connection handle as resource on success or 0 as long on failure */
-int switch_dbx_pconnect(zval **rv, zval **host, zval **db, zval **username, zval **password, INTERNAL_FUNCTION_PARAMETERS, zval **dbx_module);
- /* returns persistent connection handle as resource on success or 0 as long on failure */
-int switch_dbx_close(zval **rv, zval **dbx_handle, INTERNAL_FUNCTION_PARAMETERS, zval **dbx_module);
- /* returns 1 as long on success or 0 as long on failure */
-int switch_dbx_query(zval **rv, zval **dbx_handle, zval **db_name, zval **sql_statement, INTERNAL_FUNCTION_PARAMETERS, zval **dbx_module);
- /* returns 1 as long or result identifier as resource on success or 0 as long on failure */
-int switch_dbx_getcolumncount(zval **rv, zval **result_handle, INTERNAL_FUNCTION_PARAMETERS, zval **dbx_module);
- /* returns column-count as long on success or 0 as long on failure */
-int switch_dbx_getcolumnname(zval **rv, zval **result_handle, long column_index, INTERNAL_FUNCTION_PARAMETERS, zval **dbx_module);
- /* returns column-name as string on success or 0 as long on failure */
-int switch_dbx_getcolumntype(zval **rv, zval **result_handle, long column_index, INTERNAL_FUNCTION_PARAMETERS, zval **dbx_module);
- /* returns column-type as string on success or 0 as long on failure */
-int switch_dbx_getrow(zval **rv, zval **result_handle, long row_number, INTERNAL_FUNCTION_PARAMETERS, zval **dbx_module);
- /* returns array[0..columncount-1] as strings on success or 0 as long on failure */
-int switch_dbx_error(zval **rv, zval **dbx_handle, INTERNAL_FUNCTION_PARAMETERS, zval **dbx_module);
- /* returns string */
-int switch_dbx_esc(zval **rv, zval **dbx_handle, zval **string, INTERNAL_FUNCTION_PARAMETERS, zval **dbx_module);
- /* returns escaped string */
-
-/* Every user visible function must have an entry in dbx_functions[].
-*/
-function_entry dbx_functions[] = {
- ZEND_FE(dbx_connect, NULL)
- ZEND_FE(dbx_close, NULL)
- ZEND_FE(dbx_query, NULL)
- ZEND_FE(dbx_fetch_row, NULL)
- ZEND_FE(dbx_error, NULL)
- ZEND_FE(dbx_escape_string, NULL)
-
- ZEND_FE(dbx_sort, NULL)
- ZEND_FE(dbx_compare, NULL)
-
- {NULL, NULL, NULL} /* Must be the last line in dbx_functions[] */
-};
-
-zend_module_entry dbx_module_entry = {
- STANDARD_MODULE_HEADER,
- "dbx",
- dbx_functions,
- ZEND_MINIT(dbx),
- ZEND_MSHUTDOWN(dbx),
- NULL, /*ZEND_RINIT(dbx), Replace with NULL if there's nothing to do at request start */
- NULL, /*ZEND_RSHUTDOWN(dbx), Replace with NULL if there's nothing to do at request end */
- ZEND_MINFO(dbx),
- NO_VERSION_YET,
- STANDARD_MODULE_PROPERTIES
-};
-
-#ifdef COMPILE_DL_DBX
-ZEND_GET_MODULE(dbx)
-#endif
-
-ZEND_INI_BEGIN()
- ZEND_INI_ENTRY("dbx.colnames_case", "unchanged", ZEND_INI_SYSTEM, NULL)
-ZEND_INI_END()
-
-ZEND_MINIT_FUNCTION(dbx)
-{
- REGISTER_INI_ENTRIES();
-
- REGISTER_LONG_CONSTANT("DBX_MYSQL", DBX_MYSQL, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("DBX_ODBC", DBX_ODBC, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("DBX_PGSQL", DBX_PGSQL, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("DBX_MSSQL", DBX_MSSQL, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("DBX_FBSQL", DBX_FBSQL, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("DBX_OCI8", DBX_OCI8, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("DBX_SYBASECT", DBX_SYBASECT, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("DBX_SQLITE", DBX_SQLITE, CONST_CS | CONST_PERSISTENT);
-
- REGISTER_LONG_CONSTANT("DBX_PERSISTENT", DBX_PERSISTENT, CONST_CS | CONST_PERSISTENT);
-
- REGISTER_LONG_CONSTANT("DBX_RESULT_INFO", DBX_RESULT_INFO, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("DBX_RESULT_INDEX", DBX_RESULT_INDEX, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("DBX_RESULT_ASSOC", DBX_RESULT_ASSOC, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("DBX_RESULT_UNBUFFERED", DBX_RESULT_UNBUFFERED, CONST_CS | CONST_PERSISTENT);
-
- REGISTER_LONG_CONSTANT("DBX_COLNAMES_UNCHANGED", DBX_COLNAMES_UNCHANGED, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("DBX_COLNAMES_UPPERCASE", DBX_COLNAMES_UPPERCASE, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("DBX_COLNAMES_LOWERCASE", DBX_COLNAMES_LOWERCASE, CONST_CS | CONST_PERSISTENT);
-
- REGISTER_LONG_CONSTANT("DBX_CMP_NATIVE", DBX_CMP_NATIVE, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("DBX_CMP_TEXT", DBX_CMP_TEXT, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("DBX_CMP_NUMBER", DBX_CMP_NUMBER, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("DBX_CMP_ASC", DBX_CMP_ASC, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("DBX_CMP_DESC", DBX_CMP_DESC, CONST_CS | CONST_PERSISTENT);
-
- return SUCCESS;
-}
-
-ZEND_MSHUTDOWN_FUNCTION(dbx)
-{
- UNREGISTER_INI_ENTRIES();
- return SUCCESS;
-}
-
-/* Remove if there's nothing to do at request start */
-/*ZEND_RINIT_FUNCTION(dbx)
-{ return SUCCESS;
-}*/
-
-/* Remove if there's nothing to do at request end */
-/*ZEND_RSHUTDOWN_FUNCTION(dbx)
-{ return SUCCESS;
-}*/
-
-ZEND_MINFO_FUNCTION(dbx)
-{
- php_info_print_table_start();
- php_info_print_table_row(2, "dbx support", "enabled");
- php_info_print_table_row(2, "dbx version", "1.1.0");
- php_info_print_table_row(2, "supported databases", "MySQL\nODBC\nPostgreSQL\nMicrosoft SQL Server\nFrontBase\nOracle 8 (oci8)\nSybase-CT\nSQLite");
- php_info_print_table_end();
- DISPLAY_INI_ENTRIES();
-}
-
-/*
-
- actual implementation of the dbx functions
-
-*/
-
-/* {{{ proto dbx_link_object dbx_connect(string module_name, string host, string db, string username, string password [, bool persistent])
- Returns a dbx_link_object on success and returns 0 on failure */
-ZEND_FUNCTION(dbx_connect)
-{
- int number_of_arguments=5;
- zval **arguments[6];
-
- int result;
- long module_identifier;
- zval *dbx_module;
- zval *db_name;
- zval *rv_dbx_handle;
- int persistent=0;
-
- if ( !(ZEND_NUM_ARGS()==number_of_arguments+1 || ZEND_NUM_ARGS()==number_of_arguments) || zend_get_parameters_array_ex(ZEND_NUM_ARGS(), arguments) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- if (ZEND_NUM_ARGS()==number_of_arguments+1) {
- convert_to_long_ex(arguments[5]);
- if (Z_LVAL_PP(arguments[5])!=0) persistent=1;
- }
-
- if (Z_TYPE_PP(arguments[0]) == IS_LONG) {
- if (!module_identifier_exists(Z_LVAL_PP(arguments[0]))) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "dbx: module '%ld' not loaded or not supported.", Z_LVAL_PP(arguments[0]));
- return;
- }
- module_identifier = Z_LVAL_PP(arguments[0]);
- } else {
- convert_to_string_ex(arguments[0]);
- if (!module_exists(Z_STRVAL_PP(arguments[0]))) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "dbx: module '%s' not loaded.", Z_STRVAL_PP(arguments[0]));
- return;
- }
- module_identifier=get_module_identifier(Z_STRVAL_PP(arguments[0]));
- if (!module_identifier) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "dbx: unsupported module '%s'.", Z_STRVAL_PP(arguments[0]));
- return;
- }
- }
-
- MAKE_STD_ZVAL(dbx_module);
- ZVAL_LONG(dbx_module, module_identifier);
- MAKE_STD_ZVAL(rv_dbx_handle);
- ZVAL_LONG(rv_dbx_handle, 0);
- convert_to_string_ex(arguments[1]);
- convert_to_string_ex(arguments[2]);
- convert_to_string_ex(arguments[3]);
- convert_to_string_ex(arguments[4]);
- MAKE_STD_ZVAL(db_name);
- ZVAL_STRING(db_name, Z_STRVAL_PP(arguments[2]), 1);
- if (persistent) {
- result = switch_dbx_pconnect(&rv_dbx_handle, arguments[1], arguments[2], arguments[3], arguments[4], INTERNAL_FUNCTION_PARAM_PASSTHRU, &dbx_module);
- } else {
- result = switch_dbx_connect(&rv_dbx_handle, arguments[1], arguments[2], arguments[3], arguments[4], INTERNAL_FUNCTION_PARAM_PASSTHRU, &dbx_module);
- }
- if (!result) {
- FREE_ZVAL(dbx_module);
- zval_dtor(db_name); /* to free stringvalue memory */
- FREE_ZVAL(db_name);
- FREE_ZVAL(rv_dbx_handle);
- RETURN_LONG(0);
- }
-
- object_init(return_value);
-
- zend_hash_update(Z_OBJPROP_P(return_value), "handle", 7, (void *)&(rv_dbx_handle), sizeof(zval *), NULL);
- zend_hash_update(Z_OBJPROP_P(return_value), "module", 7, (void *)&(dbx_module), sizeof(zval *), NULL);
- zend_hash_update(Z_OBJPROP_P(return_value), "database", 9, (void *)&(db_name), sizeof(zval *), NULL);
-}
-/* }}} */
-
-/* {{{ proto int dbx_close(dbx_link_object dbx_link)
- Returns success or failure
-*/
-ZEND_FUNCTION(dbx_close)
-{
- int number_of_arguments=1;
- zval **arguments[1];
-
- int result;
- zval **dbx_handle;
- zval **dbx_module;
- zval **dbx_database;
- zval *rv_success;
-
- if (ZEND_NUM_ARGS() !=number_of_arguments || zend_get_parameters_array_ex(number_of_arguments, arguments) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- if (!split_dbx_handle_object(arguments[0], &dbx_handle, &dbx_module, &dbx_database TSRMLS_CC)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "not a valid dbx_handle-object...");
- RETURN_LONG(0);
- }
-
- MAKE_STD_ZVAL(rv_success);
- ZVAL_LONG(rv_success, 0);
-
- result = switch_dbx_close(&rv_success, dbx_handle, INTERNAL_FUNCTION_PARAM_PASSTHRU, dbx_module);
-
- result = (result && Z_LVAL_P(rv_success))?1:0;
- FREE_ZVAL(rv_success);
-
- RETURN_LONG(result?1:0);
-}
-/* }}} */
-
-/* {{{ proto dbx_result_object dbx_query(dbx_link_object dbx_link, string sql_statement [, int flags])
- Returns a dbx_link_object on success and returns 0 on failure */
-ZEND_FUNCTION(dbx_query)
-{
- int min_number_of_arguments=2;
- int number_of_arguments=3;
- zval **arguments[3];
-
- int result;
- zval **dbx_handle;
- zval **dbx_module;
- zval **dbx_database;
- zval *rv_result_handle;
- zval *rv_column_count;
- long col_index;
- long row_count;
- zval *info;
- long query_flags;
- long result_flags;
- zval *data;
- zval **row_ptr;
- zval **inforow_ptr;
- /* default values for colname-case */
- char * colnames_case = INI_STR("dbx.colnames_case");
- long colcase = DBX_COLNAMES_UNCHANGED;
- if (!strcmp(colnames_case, "uppercase")) {
- colcase = DBX_COLNAMES_UPPERCASE;
- }
- if (!strcmp(colnames_case, "lowercase")) {
- colcase = DBX_COLNAMES_LOWERCASE;
- }
-
- if (ZEND_NUM_ARGS()<min_number_of_arguments || ZEND_NUM_ARGS()>number_of_arguments || zend_get_parameters_array_ex(ZEND_NUM_ARGS(), arguments) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- if (!split_dbx_handle_object(arguments[0], &dbx_handle, &dbx_module, &dbx_database TSRMLS_CC)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "not a valid dbx_handle-object...");
- RETURN_LONG(0);
- }
- /* default values */
- result_flags = DBX_RESULT_INFO | DBX_RESULT_INDEX | DBX_RESULT_ASSOC;
- /* parameter overrides */
- if (ZEND_NUM_ARGS()>2) {
- convert_to_long_ex(arguments[2]);
- query_flags = Z_LVAL_PP(arguments[2]);
- /* fieldnames are needed for association! */
- result_flags = (query_flags & DBX_RESULT_INFO) | (query_flags & DBX_RESULT_INDEX) | (query_flags & DBX_RESULT_ASSOC) | (query_flags & DBX_RESULT_UNBUFFERED);
- if (result_flags & DBX_RESULT_ASSOC) {
- result_flags |= DBX_RESULT_INFO;
- }
- if (!result_flags) result_flags = DBX_RESULT_INFO | DBX_RESULT_INDEX | DBX_RESULT_ASSOC;
- if (result_flags == DBX_RESULT_UNBUFFERED) result_flags |= DBX_RESULT_INFO | DBX_RESULT_INDEX | DBX_RESULT_ASSOC;
- /* override ini-setting for colcase */
- if (query_flags & DBX_COLNAMES_UNCHANGED) {
- colcase = DBX_COLNAMES_UNCHANGED;
- }
- if (query_flags & DBX_COLNAMES_UPPERCASE) {
- colcase = DBX_COLNAMES_UPPERCASE;
- }
- if (query_flags & DBX_COLNAMES_LOWERCASE) {
- colcase = DBX_COLNAMES_LOWERCASE;
- }
- }
- MAKE_STD_ZVAL(rv_result_handle);
- ZVAL_LONG(rv_result_handle, 0);
- convert_to_string_ex(arguments[1]);
- result = switch_dbx_query(&rv_result_handle, dbx_handle, dbx_database, arguments[1], INTERNAL_FUNCTION_PARAM_PASSTHRU, dbx_module);
- /* boolean return value means either failure for any query or success for queries that don't return anything */
- if (!result || (rv_result_handle && Z_TYPE_P(rv_result_handle)==IS_BOOL)) {
- result = (result && Z_LVAL_P(rv_result_handle))?1:0;
- FREE_ZVAL(rv_result_handle);
- RETURN_LONG(result?1:0);
- }
- /* if you get here, the query succeeded and returned results, so we'll return them
- * rv_result_handle holds a resource
- */
- /* init return_value as object (of rows) */
- object_init(return_value);
-
- zend_hash_update(Z_OBJPROP_P(return_value), "link", 5, (void *)(arguments[0]), sizeof(zval *), NULL);
- /* need extra refcount here otherwise the link object is destroyed when the
- * query resultobject is destroyed (or not assigned!)
- */
- zval_add_ref(arguments[0]);
- /* add result_handle property to return_value */
- zend_hash_update(Z_OBJPROP_P(return_value), "handle", 7, (void *)&(rv_result_handle), sizeof(zval *), NULL);
- /* add flags property to return_value */
- add_property_long(return_value, "flags", result_flags | colcase);
- /* init info property as array and add to return_value as a property */
- if (result_flags & DBX_RESULT_INFO) {
- MAKE_STD_ZVAL(info);
- array_init(info);
- zend_hash_update(Z_OBJPROP_P(return_value), "info", 5, (void *)&(info), sizeof(zval *), NULL);
- }
- /* init data property as array and add to return_value as a property */
- if (!(result_flags & DBX_RESULT_UNBUFFERED)) {
- MAKE_STD_ZVAL(data);
- array_init(data);
- zend_hash_update(Z_OBJPROP_P(return_value), "data", 5, (void *)&(data), sizeof(zval *), NULL);
- }
- /* get columncount and add to returnvalue as property */
- MAKE_STD_ZVAL(rv_column_count);
- ZVAL_LONG(rv_column_count, 0);
- result = switch_dbx_getcolumncount(&rv_column_count, &rv_result_handle, INTERNAL_FUNCTION_PARAM_PASSTHRU, dbx_module);
- if (!result) {
- php_error_docref(NULL TSRMLS_CC, E_ERROR, "get column_count failed...");
- FREE_ZVAL(rv_column_count);
- RETURN_LONG(0);
- }
- zend_hash_update(Z_OBJPROP_P(return_value), "cols", 5, (void *)&(rv_column_count), sizeof(zval *), NULL);
- /* fill the info array with columnnames and types (indexed and assoc) */
- if (result_flags & DBX_RESULT_INFO) {
- zval *info_row_name;
- zval *info_row_type;
- MAKE_STD_ZVAL(info_row_name);
- MAKE_STD_ZVAL(info_row_type);
- array_init(info_row_name);
- array_init(info_row_type);
- for (col_index=0; col_index<Z_LVAL_P(rv_column_count); ++col_index) {
- zval *rv_column_name;
- zval *rv_column_type;
- /* get name */
- MAKE_STD_ZVAL(rv_column_name);
- ZVAL_LONG(rv_column_name, 0);
- result = switch_dbx_getcolumnname(&rv_column_name, &rv_result_handle, col_index, INTERNAL_FUNCTION_PARAM_PASSTHRU, dbx_module);
- /* modify case if requested */
- if (colcase==DBX_COLNAMES_UPPERCASE) {
- php_strtoupper(Z_STRVAL_P(rv_column_name), Z_STRLEN_P(rv_column_name));
- }
- if (colcase==DBX_COLNAMES_LOWERCASE) {
- php_strtolower(Z_STRVAL_P(rv_column_name), Z_STRLEN_P(rv_column_name));
- }
- if (result) {
- zend_hash_index_update(Z_ARRVAL_P(info_row_name), col_index, (void *)&(rv_column_name), sizeof(zval *), NULL);
- } else {
- FREE_ZVAL(rv_column_name);
- }
- /* get type */
- MAKE_STD_ZVAL(rv_column_type);
- ZVAL_LONG(rv_column_type, 0);
- result = switch_dbx_getcolumntype(&rv_column_type, &rv_result_handle, col_index, INTERNAL_FUNCTION_PARAM_PASSTHRU, dbx_module);
- if (result) {
- zend_hash_index_update(Z_ARRVAL_P(info_row_type), col_index, (void *)&(rv_column_type), sizeof(zval *), NULL);
- } else {
- FREE_ZVAL(rv_column_type);
- }
- }
- zend_hash_update(Z_ARRVAL_P(info), "name", 5, (void *) &info_row_name, sizeof(zval *), (void **) &inforow_ptr);
- zend_hash_update(Z_ARRVAL_P(info), "type", 5, (void *) &info_row_type, sizeof(zval *), NULL);
- }
- /* fill each row array with fieldvalues (indexed (and assoc)) */
- if (!(result_flags & DBX_RESULT_UNBUFFERED)) {
- row_count=0;
- result=1;
- while (result) {
- zval *rv_row;
- MAKE_STD_ZVAL(rv_row);
- ZVAL_LONG(rv_row, 0);
- result = switch_dbx_getrow(&rv_row, &rv_result_handle, row_count, INTERNAL_FUNCTION_PARAM_PASSTHRU, dbx_module);
- if (result) {
- zend_hash_index_update(Z_ARRVAL_P(data), row_count, (void *)&(rv_row), sizeof(zval *), (void **) &row_ptr);
- /* associate results with fieldnames */
- if (result_flags & DBX_RESULT_ASSOC) {
- zval **columnname_ptr, **actual_ptr;
- for (col_index=0; col_index<Z_LVAL_P(rv_column_count); ++col_index) {
- zend_hash_index_find(Z_ARRVAL_PP(inforow_ptr), col_index, (void **) &columnname_ptr);
- zend_hash_index_find(Z_ARRVAL_PP(row_ptr), col_index, (void **) &actual_ptr);
- (*actual_ptr)->refcount+=1;
- (*actual_ptr)->is_ref=1;
- zend_hash_update(Z_ARRVAL_PP(row_ptr), Z_STRVAL_PP(columnname_ptr), Z_STRLEN_PP(columnname_ptr) + 1, actual_ptr, sizeof(zval *), NULL);
- }
- }
- ++row_count;
- } else {
- FREE_ZVAL(rv_row);
- }
- }
- /* add row_count property */
- add_property_long(return_value, "rows", row_count);
- }
- else {
- add_property_long(return_value, "rows", 0);
- }
-}
-/* }}} */
-
-/* {{{ proto dbx_row dbx_fetch_row(dbx_query_object dbx_q)
- Returns a row (index and assoc based on query) on success and returns 0 on failure or no more rows */
-ZEND_FUNCTION(dbx_fetch_row)
-{
- int number_of_arguments=1;
- zval **arguments[1];
-
- zval **dbx_result_link;
- zval **dbx_result_handle;
- zval **dbx_result_flags;
- zval **dbx_result_info;
- zval **dbx_result_cols;
- zval **dbx_result_rows;
-
- zval **dbx_handle;
- zval **dbx_module;
- zval **dbx_database;
-
- int result;
- long col_index;
- long col_count;
- long row_count;
- long result_flags;
- zval **inforow_ptr;
-
- if (ZEND_NUM_ARGS()!=number_of_arguments || zend_get_parameters_array_ex(ZEND_NUM_ARGS(), arguments) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- if (!split_dbx_result_object(arguments[0], &dbx_result_link, &dbx_result_handle, &dbx_result_flags, &dbx_result_info, &dbx_result_cols, &dbx_result_rows TSRMLS_CC)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "not a valid dbx_result-object...");
- RETURN_LONG(0);
- }
- if (!split_dbx_handle_object(dbx_result_link, &dbx_handle, &dbx_module, &dbx_database TSRMLS_CC)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "not a valid dbx_handle-object...");
- RETURN_LONG(0);
- }
-
- /* default values */
- result_flags = Z_LVAL_PP(dbx_result_flags);
- col_count = Z_LVAL_PP(dbx_result_cols);
- row_count = Z_LVAL_PP(dbx_result_rows);
-
- /* find fieldnames (for assoc) */
- if (result_flags & DBX_RESULT_ASSOC) {
- zend_hash_find(Z_ARRVAL_PP(dbx_result_info), "name", 5, (void **) &inforow_ptr);
- }
-
- result = switch_dbx_getrow(&return_value, dbx_result_handle, row_count, INTERNAL_FUNCTION_PARAM_PASSTHRU, dbx_module);
- if (result) {
- /* associate results with fieldnames */
- if (result_flags & DBX_RESULT_ASSOC) {
- zval **columnname_ptr, **actual_ptr;
- for (col_index=0; col_index<col_count; ++col_index) {
- zend_hash_index_find(Z_ARRVAL_PP(inforow_ptr), col_index, (void **) &columnname_ptr);
- zend_hash_index_find(Z_ARRVAL_P(return_value), col_index, (void **) &actual_ptr);
- (*actual_ptr)->refcount+=1;
- (*actual_ptr)->is_ref=1;
- zend_hash_update(Z_ARRVAL_P(return_value), Z_STRVAL_PP(columnname_ptr), Z_STRLEN_PP(columnname_ptr) + 1, actual_ptr, sizeof(zval *), NULL);
- }
- }
- ++row_count;
- add_property_long(*arguments[0], "rows", row_count);
- }
-}
-/* }}} */
-
-
-/* {{{ proto string dbx_error(dbx_link_object dbx_link)
- Returns success or failure
-*/
-ZEND_FUNCTION(dbx_error)
-{
- int number_of_arguments=1;
- zval **arguments[1];
-
- int result;
- zval **dbx_handle;
- zval **dbx_module;
- zval **dbx_database;
- zval *rv_errormsg;
-
- if (ZEND_NUM_ARGS() !=number_of_arguments || zend_get_parameters_array_ex(number_of_arguments, arguments) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- if (!split_dbx_handle_object(arguments[0], &dbx_handle, &dbx_module, &dbx_database TSRMLS_CC)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "not a valid dbx_handle-object...");
- RETURN_LONG(0);
- }
-
- MAKE_STD_ZVAL(rv_errormsg);
- ZVAL_LONG(rv_errormsg, 0);
- result = switch_dbx_error(&rv_errormsg, dbx_handle, INTERNAL_FUNCTION_PARAM_PASSTHRU, dbx_module);
- if (!result) {
- FREE_ZVAL(rv_errormsg);
- RETURN_STRING("", 1);
- }
- MOVE_RETURNED_TO_RV(&return_value, rv_errormsg);
-}
-/* }}} */
-
-/* {{{ proto string dbx_escape_string(dbx_link_object dbx_link, string sz)
- Returns escaped string or NULL on error
-*/
-ZEND_FUNCTION(dbx_escape_string)
-{
- int number_of_arguments=2;
- zval **arguments[2];
-
- int result;
- zval **dbx_handle;
- zval **dbx_module;
- zval **dbx_database;
- zval *rv;
-
- if (ZEND_NUM_ARGS() !=number_of_arguments || zend_get_parameters_array_ex(number_of_arguments, arguments) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- if (!split_dbx_handle_object(arguments[0], &dbx_handle, &dbx_module, &dbx_database TSRMLS_CC)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "not a valid dbx_handle-object...");
- RETURN_NULL();
- }
- convert_to_string_ex(arguments[1]);
-
- MAKE_STD_ZVAL(rv);
- ZVAL_LONG(rv, 0);
- result = switch_dbx_esc(&rv, dbx_handle, arguments[1], INTERNAL_FUNCTION_PARAM_PASSTHRU, dbx_module);
- if (!result) { /* this will probably never happen */
- FREE_ZVAL(rv);
- RETURN_NULL();
- }
- MOVE_RETURNED_TO_RV(&return_value, rv);
-}
-/* }}} */
-
-/*
- * dbx functions that are database independent... like sorting result_objects!
- */
-
-/* {{{ proto int dbx_compare(array row_x, array row_y, string columnname [, int flags])
- Returns row_y[columnname] - row_x[columnname], converted to -1, 0 or 1 */
-ZEND_FUNCTION(dbx_compare)
-{
- int min_number_of_arguments=3;
- int max_number_of_arguments=4;
- int number_of_arguments=-1;
- long comparison_direction=DBX_CMP_ASC;
- long comparison_type=DBX_CMP_NATIVE;
- double dtemp;
- long ltemp;
- zval **arguments[4];
- zval **zv_a;
- zval **zv_b;
- int result=0;
- number_of_arguments=ZEND_NUM_ARGS();
- if (number_of_arguments<min_number_of_arguments || number_of_arguments>max_number_of_arguments || zend_get_parameters_array_ex(number_of_arguments, arguments) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- if (Z_TYPE_PP(arguments[0]) != IS_ARRAY
- || Z_TYPE_PP(arguments[1]) != IS_ARRAY) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Wrong argument type for compare");
- RETURN_LONG(0);
- }
- convert_to_string_ex(arguments[2]); /* field name */
- comparison_type = DBX_CMP_NATIVE;
- comparison_direction = DBX_CMP_ASC;
- if (number_of_arguments>3) {
- convert_to_long_ex(arguments[3]); /* comparison type and direction*/
- /* direction */
- if (Z_LVAL_PP(arguments[3]) & DBX_CMP_DESC) {
- comparison_direction=DBX_CMP_DESC;
- }
- if (Z_LVAL_PP(arguments[3]) & DBX_CMP_ASC) {
- comparison_direction=DBX_CMP_ASC;
- }
- /* type */
- if (Z_LVAL_PP(arguments[3]) & DBX_CMP_NUMBER) {
- comparison_type=DBX_CMP_NUMBER;
- }
- if (Z_LVAL_PP(arguments[3]) & DBX_CMP_TEXT) {
- comparison_type=DBX_CMP_TEXT;
- }
- if (Z_LVAL_PP(arguments[3]) & DBX_CMP_NATIVE) {
- comparison_type=DBX_CMP_NATIVE;
- }
- }
-
- if (zend_hash_find(Z_ARRVAL_PP(arguments[0]), Z_STRVAL_PP(arguments[2]), Z_STRLEN_PP(arguments[2])+1, (void **) &zv_a)==FAILURE
- || zend_hash_find(Z_ARRVAL_PP(arguments[1]), Z_STRVAL_PP(arguments[2]), Z_STRLEN_PP(arguments[2])+1, (void **) &zv_b)==FAILURE) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Field '%s' not available in result-object", Z_STRVAL_PP(arguments[2]));
- RETURN_LONG(0);
- }
-
- switch (comparison_type) {
- case DBX_CMP_TEXT:
- convert_to_string_ex(zv_a);
- convert_to_string_ex(zv_b);
- break;
- case DBX_CMP_NUMBER:
- convert_to_double_ex(zv_a);
- convert_to_double_ex(zv_b);
- break;
- }
- switch (Z_TYPE_PP(zv_a)) {
- case IS_NULL:
- result=0;
- break;
- case IS_BOOL:
- case IS_LONG:
- case IS_CONSTANT:
- ltemp = Z_LVAL_PP(zv_a) - Z_LVAL_PP(zv_b);
- result = (ltemp==0?0: (ltemp>0?1:-1));
- break;
- case IS_DOUBLE:
- dtemp = (Z_DVAL_PP(zv_a) - Z_DVAL_PP(zv_b));
- result = (dtemp==0?0: (dtemp>0?1:-1));
- break;
- case IS_STRING:
- ltemp = strcmp(Z_STRVAL_PP(zv_a), Z_STRVAL_PP(zv_b));
- result = (ltemp==0?0: (ltemp>0?1:-1));
- break;
- default: result=0;
- }
-
- if (comparison_direction==DBX_CMP_DESC) RETURN_LONG(-result);
- RETURN_LONG(result);
-}
-/* }}} */
-
-/* {{{ proto int dbx_sort(object dbx_result, string compare_function_name)
- Returns 0 on failure, 1 on success */
-ZEND_FUNCTION(dbx_sort)
-{
- int number_of_arguments=2;
- zval **arguments[2];
- zval **zval_data;
- zval *returned_zval;
- if (ZEND_NUM_ARGS() !=number_of_arguments || zend_get_parameters_array_ex(number_of_arguments, arguments) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- if (Z_TYPE_PP(arguments[0]) != IS_OBJECT
- || Z_TYPE_PP(arguments[1]) != IS_STRING) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Wrong argument type for sort");
- RETURN_LONG(0);
- }
-
- if (zend_hash_find(Z_OBJPROP_PP(arguments[0]), "data", 5, (void **) &zval_data)==FAILURE
- || Z_TYPE_PP(zval_data) != IS_ARRAY) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Wrong argument type for sort");
- RETURN_LONG(0);
- }
-
- arguments[0] = zval_data;
- dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "usort", &returned_zval, number_of_arguments, arguments);
- zval_ptr_dtor(&returned_zval);
-
- RETURN_LONG(1);
-}
-/* }}} */
-
-/***********************************/
-
-/*
- * switch_dbx functions
- */
-int switch_dbx_connect(zval **rv, zval **host, zval **db, zval **username, zval **password, INTERNAL_FUNCTION_PARAMETERS, zval **dbx_module)
-{
- /* returns connection handle as resource on success or 0 as long on failure */
- switch (Z_LVAL_PP(dbx_module)) {
- case DBX_MYSQL: return dbx_mysql_connect(rv, host, db, username, password, INTERNAL_FUNCTION_PARAM_PASSTHRU);
- case DBX_ODBC: return dbx_odbc_connect(rv, host, db, username, password, INTERNAL_FUNCTION_PARAM_PASSTHRU);
- case DBX_PGSQL: return dbx_pgsql_connect(rv, host, db, username, password, INTERNAL_FUNCTION_PARAM_PASSTHRU);
- case DBX_MSSQL: return dbx_mssql_connect(rv, host, db, username, password, INTERNAL_FUNCTION_PARAM_PASSTHRU);
- case DBX_FBSQL: return dbx_fbsql_connect(rv, host, db, username, password, INTERNAL_FUNCTION_PARAM_PASSTHRU);
- case DBX_OCI8: return dbx_oci8_connect(rv, host, db, username, password, INTERNAL_FUNCTION_PARAM_PASSTHRU);
- case DBX_SYBASECT: return dbx_sybasect_connect(rv, host, db, username, password, INTERNAL_FUNCTION_PARAM_PASSTHRU);
- case DBX_SQLITE: return dbx_sqlite_connect(rv, host, db, username, password, INTERNAL_FUNCTION_PARAM_PASSTHRU);
- }
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "not supported in this module");
- return 0;
-}
-
-int switch_dbx_pconnect(zval **rv, zval **host, zval **db, zval **username, zval **password, INTERNAL_FUNCTION_PARAMETERS, zval **dbx_module)
-{
- /* returns persistent connection handle as resource on success or 0 as long on failure */
- switch (Z_LVAL_PP(dbx_module)) {
- case DBX_MYSQL: return dbx_mysql_pconnect(rv, host, db, username, password, INTERNAL_FUNCTION_PARAM_PASSTHRU);
- case DBX_ODBC: return dbx_odbc_pconnect(rv, host, db, username, password, INTERNAL_FUNCTION_PARAM_PASSTHRU);
- case DBX_PGSQL: return dbx_pgsql_pconnect(rv, host, db, username, password, INTERNAL_FUNCTION_PARAM_PASSTHRU);
- case DBX_MSSQL: return dbx_mssql_pconnect(rv, host, db, username, password, INTERNAL_FUNCTION_PARAM_PASSTHRU);
- case DBX_FBSQL: return dbx_fbsql_pconnect(rv, host, db, username, password, INTERNAL_FUNCTION_PARAM_PASSTHRU);
- case DBX_OCI8: return dbx_oci8_pconnect(rv, host, db, username, password, INTERNAL_FUNCTION_PARAM_PASSTHRU);
- case DBX_SYBASECT: return dbx_sybasect_pconnect(rv, host, db, username, password, INTERNAL_FUNCTION_PARAM_PASSTHRU);
- case DBX_SQLITE: return dbx_sqlite_pconnect(rv, host, db, username, password, INTERNAL_FUNCTION_PARAM_PASSTHRU);
- }
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "not supported in this module");
- return 0;
-}
-
-int switch_dbx_close(zval **rv, zval **dbx_handle, INTERNAL_FUNCTION_PARAMETERS, zval **dbx_module)
-{
- /* returns 1 as long on success or 0 as long on failure */
- switch (Z_LVAL_PP(dbx_module)) {
- case DBX_MYSQL: return dbx_mysql_close(rv, dbx_handle, INTERNAL_FUNCTION_PARAM_PASSTHRU);
- case DBX_ODBC: return dbx_odbc_close(rv, dbx_handle, INTERNAL_FUNCTION_PARAM_PASSTHRU);
- case DBX_PGSQL: return dbx_pgsql_close(rv, dbx_handle, INTERNAL_FUNCTION_PARAM_PASSTHRU);
- case DBX_MSSQL: return dbx_mssql_close(rv, dbx_handle, INTERNAL_FUNCTION_PARAM_PASSTHRU);
- case DBX_FBSQL: return dbx_fbsql_close(rv, dbx_handle, INTERNAL_FUNCTION_PARAM_PASSTHRU);
- case DBX_OCI8: return dbx_oci8_close(rv, dbx_handle, INTERNAL_FUNCTION_PARAM_PASSTHRU);
- case DBX_SYBASECT: return dbx_sybasect_close(rv, dbx_handle, INTERNAL_FUNCTION_PARAM_PASSTHRU);
- case DBX_SQLITE: return dbx_sqlite_close(rv, dbx_handle, INTERNAL_FUNCTION_PARAM_PASSTHRU);
- }
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "not supported in this module");
- return 0;
-}
-
-int switch_dbx_query(zval **rv, zval **dbx_handle, zval **db_name, zval **sql_statement, INTERNAL_FUNCTION_PARAMETERS, zval **dbx_module)
-{
- /* returns 1 as long or result identifier as resource on success or 0 as long on failure */
- switch (Z_LVAL_PP(dbx_module)) {
- case DBX_MYSQL: return dbx_mysql_query(rv, dbx_handle, db_name, sql_statement, INTERNAL_FUNCTION_PARAM_PASSTHRU);
- case DBX_ODBC: return dbx_odbc_query(rv, dbx_handle, db_name, sql_statement, INTERNAL_FUNCTION_PARAM_PASSTHRU);
- case DBX_PGSQL: return dbx_pgsql_query(rv, dbx_handle, db_name, sql_statement, INTERNAL_FUNCTION_PARAM_PASSTHRU);
- case DBX_MSSQL: return dbx_mssql_query(rv, dbx_handle, db_name, sql_statement, INTERNAL_FUNCTION_PARAM_PASSTHRU);
- case DBX_FBSQL: return dbx_fbsql_query(rv, dbx_handle, db_name, sql_statement, INTERNAL_FUNCTION_PARAM_PASSTHRU);
- case DBX_OCI8: return dbx_oci8_query(rv, dbx_handle, db_name, sql_statement, INTERNAL_FUNCTION_PARAM_PASSTHRU);
- case DBX_SYBASECT: return dbx_sybasect_query(rv, dbx_handle, db_name, sql_statement, INTERNAL_FUNCTION_PARAM_PASSTHRU);
- case DBX_SQLITE: return dbx_sqlite_query(rv, dbx_handle, db_name, sql_statement, INTERNAL_FUNCTION_PARAM_PASSTHRU);
- }
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "not supported in this module");
- return 0;
-}
-
-int switch_dbx_getcolumncount(zval **rv, zval **result_handle, INTERNAL_FUNCTION_PARAMETERS, zval **dbx_module)
-{
- /* returns column-count as long on success or 0 as long on failure */
- switch (Z_LVAL_PP(dbx_module)) {
- case DBX_MYSQL: return dbx_mysql_getcolumncount(rv, result_handle, INTERNAL_FUNCTION_PARAM_PASSTHRU);
- case DBX_ODBC: return dbx_odbc_getcolumncount(rv, result_handle, INTERNAL_FUNCTION_PARAM_PASSTHRU);
- case DBX_PGSQL: return dbx_pgsql_getcolumncount(rv, result_handle, INTERNAL_FUNCTION_PARAM_PASSTHRU);
- case DBX_MSSQL: return dbx_mssql_getcolumncount(rv, result_handle, INTERNAL_FUNCTION_PARAM_PASSTHRU);
- case DBX_FBSQL: return dbx_fbsql_getcolumncount(rv, result_handle, INTERNAL_FUNCTION_PARAM_PASSTHRU);
- case DBX_OCI8: return dbx_oci8_getcolumncount(rv, result_handle, INTERNAL_FUNCTION_PARAM_PASSTHRU);
- case DBX_SYBASECT: return dbx_sybasect_getcolumncount(rv, result_handle, INTERNAL_FUNCTION_PARAM_PASSTHRU);
- case DBX_SQLITE: return dbx_sqlite_getcolumncount(rv, result_handle, INTERNAL_FUNCTION_PARAM_PASSTHRU);
- }
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "not supported in this module");
- return 0;
-}
-
-int switch_dbx_getcolumnname(zval **rv, zval **result_handle, long column_index, INTERNAL_FUNCTION_PARAMETERS, zval **dbx_module)
-{
- /* returns column-name as string on success or 0 as long on failure */
- switch (Z_LVAL_PP(dbx_module)) {
- case DBX_MYSQL: return dbx_mysql_getcolumnname(rv, result_handle, column_index, INTERNAL_FUNCTION_PARAM_PASSTHRU);
- case DBX_ODBC: return dbx_odbc_getcolumnname(rv, result_handle, column_index, INTERNAL_FUNCTION_PARAM_PASSTHRU);
- case DBX_PGSQL: return dbx_pgsql_getcolumnname(rv, result_handle, column_index, INTERNAL_FUNCTION_PARAM_PASSTHRU);
- case DBX_MSSQL: return dbx_mssql_getcolumnname(rv, result_handle, column_index, INTERNAL_FUNCTION_PARAM_PASSTHRU);
- case DBX_FBSQL: return dbx_fbsql_getcolumnname(rv, result_handle, column_index, INTERNAL_FUNCTION_PARAM_PASSTHRU);
- case DBX_OCI8: return dbx_oci8_getcolumnname(rv, result_handle, column_index, INTERNAL_FUNCTION_PARAM_PASSTHRU);
- case DBX_SYBASECT: return dbx_sybasect_getcolumnname(rv, result_handle, column_index, INTERNAL_FUNCTION_PARAM_PASSTHRU);
- case DBX_SQLITE: return dbx_sqlite_getcolumnname(rv, result_handle, column_index, INTERNAL_FUNCTION_PARAM_PASSTHRU);
- }
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "not supported in this module");
- return 0;
-}
-
-int switch_dbx_getcolumntype(zval **rv, zval **result_handle, long column_index, INTERNAL_FUNCTION_PARAMETERS, zval **dbx_module)
-{
- /* returns column-type as string on success or 0 as long on failure */
- switch (Z_LVAL_PP(dbx_module)) {
- case DBX_MYSQL: return dbx_mysql_getcolumntype(rv, result_handle, column_index, INTERNAL_FUNCTION_PARAM_PASSTHRU);
- case DBX_ODBC: return dbx_odbc_getcolumntype(rv, result_handle, column_index, INTERNAL_FUNCTION_PARAM_PASSTHRU);
- case DBX_PGSQL: return dbx_pgsql_getcolumntype(rv, result_handle, column_index, INTERNAL_FUNCTION_PARAM_PASSTHRU);
- case DBX_MSSQL: return dbx_mssql_getcolumntype(rv, result_handle, column_index, INTERNAL_FUNCTION_PARAM_PASSTHRU);
- case DBX_FBSQL: return dbx_fbsql_getcolumntype(rv, result_handle, column_index, INTERNAL_FUNCTION_PARAM_PASSTHRU);
- case DBX_OCI8: return dbx_oci8_getcolumntype(rv, result_handle, column_index, INTERNAL_FUNCTION_PARAM_PASSTHRU);
- case DBX_SYBASECT: return dbx_sybasect_getcolumntype(rv, result_handle, column_index, INTERNAL_FUNCTION_PARAM_PASSTHRU);
- case DBX_SQLITE: return dbx_sqlite_getcolumntype(rv, result_handle, column_index, INTERNAL_FUNCTION_PARAM_PASSTHRU);
- }
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "not supported in this module");
- return 0;
-}
-
-int switch_dbx_getrow(zval **rv, zval **result_handle, long row_number, INTERNAL_FUNCTION_PARAMETERS, zval **dbx_module)
-{
- /* returns array[0..columncount-1] as strings on success or 0 as long on failure */
- switch (Z_LVAL_PP(dbx_module)) {
- case DBX_MYSQL: return dbx_mysql_getrow(rv, result_handle, row_number, INTERNAL_FUNCTION_PARAM_PASSTHRU);
- case DBX_ODBC: return dbx_odbc_getrow(rv, result_handle, row_number, INTERNAL_FUNCTION_PARAM_PASSTHRU);
- case DBX_PGSQL: return dbx_pgsql_getrow(rv, result_handle, row_number, INTERNAL_FUNCTION_PARAM_PASSTHRU);
- case DBX_MSSQL: return dbx_mssql_getrow(rv, result_handle, row_number, INTERNAL_FUNCTION_PARAM_PASSTHRU);
- case DBX_FBSQL: return dbx_fbsql_getrow(rv, result_handle, row_number, INTERNAL_FUNCTION_PARAM_PASSTHRU);
- case DBX_OCI8: return dbx_oci8_getrow(rv, result_handle, row_number, INTERNAL_FUNCTION_PARAM_PASSTHRU);
- case DBX_SYBASECT: return dbx_sybasect_getrow(rv, result_handle, row_number, INTERNAL_FUNCTION_PARAM_PASSTHRU);
- case DBX_SQLITE: return dbx_sqlite_getrow(rv, result_handle, row_number, INTERNAL_FUNCTION_PARAM_PASSTHRU);
- }
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "not supported in this module");
- return 0;
-}
-
-int switch_dbx_error(zval **rv, zval **dbx_handle, INTERNAL_FUNCTION_PARAMETERS, zval **dbx_module)
-{
- /* returns string */
- switch (Z_LVAL_PP(dbx_module)) {
- case DBX_MYSQL: return dbx_mysql_error(rv, dbx_handle, INTERNAL_FUNCTION_PARAM_PASSTHRU);
- case DBX_ODBC: return dbx_odbc_error(rv, dbx_handle, INTERNAL_FUNCTION_PARAM_PASSTHRU);
- case DBX_PGSQL: return dbx_pgsql_error(rv, dbx_handle, INTERNAL_FUNCTION_PARAM_PASSTHRU);
- case DBX_MSSQL: return dbx_mssql_error(rv, dbx_handle, INTERNAL_FUNCTION_PARAM_PASSTHRU);
- case DBX_FBSQL: return dbx_fbsql_error(rv, dbx_handle, INTERNAL_FUNCTION_PARAM_PASSTHRU);
- /* case DBX_OCI8: return dbx_oci8_error(rv, dbx_handle, INTERNAL_FUNCTION_PARAM_PASSTHRU); */
- case DBX_SYBASECT: return dbx_sybasect_error(rv, dbx_handle, INTERNAL_FUNCTION_PARAM_PASSTHRU);
- case DBX_SQLITE: return dbx_sqlite_error(rv, dbx_handle, INTERNAL_FUNCTION_PARAM_PASSTHRU);
- }
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "not supported in this module");
- return 0;
-}
-
-int switch_dbx_esc(zval **rv, zval **dbx_handle, zval **string, INTERNAL_FUNCTION_PARAMETERS, zval **dbx_module)
-{
- /* returns escaped string */
- switch (Z_LVAL_PP(dbx_module)) {
- case DBX_MYSQL: return dbx_mysql_esc(rv, dbx_handle, string, INTERNAL_FUNCTION_PARAM_PASSTHRU);
- case DBX_ODBC: return dbx_odbc_esc(rv, dbx_handle, string, INTERNAL_FUNCTION_PARAM_PASSTHRU);
- case DBX_PGSQL: return dbx_pgsql_esc(rv, dbx_handle, string, INTERNAL_FUNCTION_PARAM_PASSTHRU);
- case DBX_MSSQL: return dbx_mssql_esc(rv, dbx_handle, string, INTERNAL_FUNCTION_PARAM_PASSTHRU);
- case DBX_FBSQL: return dbx_fbsql_esc(rv, dbx_handle, string, INTERNAL_FUNCTION_PARAM_PASSTHRU);
- case DBX_OCI8: return dbx_oci8_esc(rv, dbx_handle, string, INTERNAL_FUNCTION_PARAM_PASSTHRU);
- case DBX_SYBASECT: return dbx_sybasect_esc(rv, dbx_handle, string, INTERNAL_FUNCTION_PARAM_PASSTHRU);
- case DBX_SQLITE: return dbx_sqlite_esc(rv, dbx_handle, string, INTERNAL_FUNCTION_PARAM_PASSTHRU);
- }
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "not supported in this module");
- return 0;
-}
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- */
diff --git a/ext/dbx/dbx.dsp b/ext/dbx/dbx.dsp
deleted file mode 100644
index 9cc264a250..0000000000
--- a/ext/dbx/dbx.dsp
+++ /dev/null
@@ -1,181 +0,0 @@
-# Microsoft Developer Studio Project File - Name="dbx" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=dbx - Win32 Release_TS
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "dbx.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "dbx.mak" CFG="dbx - Win32 Release_TS"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "dbx - Win32 Release_TS" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "dbx - Win32 Debug_TS" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "dbx - Win32 Release_TS"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release_TS"
-# PROP BASE Intermediate_Dir "Release_TS"
-# PROP BASE Ignore_Export_Lib 0
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release_TS"
-# PROP Intermediate_Dir "Release_TS"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MT /W3 /GX /O2 /I "..\.." /I "..\..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\..\TSRM" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "COMPILE_DL_dbx" /D ZTS=1 /YX /FD /c
-# ADD CPP /nologo /MD /W3 /GX /O2 /I "..\.." /I "..\..\main" /I "..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\TSRM" /D "WIN32" /D "DBX_EXPORTS" /D "COMPILE_DL_DBX" /D ZTS=1 /D HAVE_LIBINTL=1 /D ZEND_DEBUG=0 /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "ZEND_WIN32" /D "PHP_WIN32" /FR /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x406 /d "NDEBUG"
-# ADD RSC /l 0x406 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib php5ts.lib /nologo /dll /machine:I386 /out:"..\..\Release_TS/php_dbx.dll" /libpath:"..\..\Release_TS" /libpath:"..\..\Release_TS_Inline"
-# ADD LINK32 php5ts.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 /out:"..\..\Release_TS/php_dbx.dll" /libpath:"..\..\Release_TS" /libpath:"..\..\Release_TS_Inline"
-
-!ELSEIF "$(CFG)" == "dbx - Win32 Debug_TS"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Debug_TS"
-# PROP BASE Intermediate_Dir "Debug_TS"
-# PROP BASE Ignore_Export_Lib 0
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Debug_TS"
-# PROP Intermediate_Dir "Debug_TS"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MT /W3 /GX /O2 /I "..\.." /I "..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\TSRM" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "MSSQL_EXPORTS" /D "COMPILE_DL_dbx" /D ZTS=1 /YX /FD /c
-# ADD CPP /nologo /MDd /W3 /GX /ZI /Od /I "..\.." /I "..\..\main" /I "..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\TSRM" /D ZEND_DEBUG=1 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "DBX_EXPORTS" /D "COMPILE_DL_DBX" /D ZTS=1 /D "ZEND_WIN32" /D "PHP_WIN32" /D HAVE_LIBINTL=1 /FR /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x406 /d "NDEBUG"
-# ADD RSC /l 0x406 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib php5ts.lib /nologo /dll /machine:I386 /out:"../../Debug_TS/php_dbx.dll" /libpath:"..\..\Debug_TS"
-# ADD LINK32 php5ts_debug.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /incremental:yes /debug /machine:I386 /out:"../../Debug_TS/php_dbx.dll" /libpath:"..\..\Debug_TS"
-
-!ENDIF
-
-# Begin Target
-
-# Name "dbx - Win32 Release_TS"
-# Name "dbx - Win32 Debug_TS"
-# Begin Group "Source Files"
-
-# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
-# Begin Source File
-
-SOURCE=.\dbx.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\dbx_fbsql.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\dbx_mssql.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\dbx_mysql.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\dbx_oci8.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\dbx_odbc.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\dbx_pgsql.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\dbx_sqlite.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\dbx_sybasect.c
-# End Source File
-# End Group
-# Begin Group "Header Files"
-
-# PROP Default_Filter "h;hpp;hxx;hm;inl"
-# Begin Source File
-
-SOURCE=.\dbx.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\dbx_fbsql.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\dbx_mssql.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\dbx_mysql.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\dbx_oci8.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\dbx_odbc.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\dbx_pgsql.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\dbx_sqlite.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\dbx_sybasect.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\php_dbx.h
-# End Source File
-# End Group
-# Begin Group "Resource Files"
-
-# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
-# End Group
-# End Target
-# End Project
diff --git a/ext/dbx/dbx.h b/ext/dbx/dbx.h
deleted file mode 100644
index 31960686be..0000000000
--- a/ext/dbx/dbx.h
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 The PHP Group |
- +----------------------------------------------------------------------+
- | dbx module version 1.0 |
- +----------------------------------------------------------------------+
- | Copyright (c) 2001-2003 Guidance Rotterdam BV |
- +----------------------------------------------------------------------+
- | 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 : Marc Boeren <marc@guidance.nl> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifndef ZEND_DBX_H
-#define ZEND_DBX_H
-
-#ifndef INIT_FUNC_ARGS
-#include "zend_modules.h"
-#endif
-
-#include "php.h"
-#include "ext/standard/php_string.h"
-
-#define DBX_PERSISTENT (1<<0)
-
-#define DBX_RESULT_INFO (1<<0)
-#define DBX_RESULT_INDEX (1<<1)
-#define DBX_RESULT_ASSOC (1<<2)
-#define DBX_COLNAMES_UNCHANGED (1<<3)
-#define DBX_COLNAMES_UPPERCASE (1<<4)
-#define DBX_COLNAMES_LOWERCASE (1<<5)
-#define DBX_RESULT_UNBUFFERED (1<<6)
-
-#define DBX_CMP_NATIVE (1<<0)
-#define DBX_CMP_TEXT (1<<1)
-#define DBX_CMP_NUMBER (1<<2)
-#define DBX_CMP_ASC (1<<3)
-#define DBX_CMP_DESC (1<<4)
-
-#define MOVE_RETURNED_TO_RV(rv, returned_zval) { **rv = *returned_zval; zval_copy_ctor(*rv); zval_ptr_dtor(&returned_zval); }
-
-void dbx_call_any_function(INTERNAL_FUNCTION_PARAMETERS, char *function_name, zval **returnvalue, int number_of_arguments, zval ***params);
-
-#endif /* ZEND_DBX_H */
-
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- */
diff --git a/ext/dbx/dbx_fbsql.c b/ext/dbx/dbx_fbsql.c
deleted file mode 100644
index e188a04962..0000000000
--- a/ext/dbx/dbx_fbsql.c
+++ /dev/null
@@ -1,283 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 The PHP Group |
- +----------------------------------------------------------------------+
- | dbx module version 1.0 |
- +----------------------------------------------------------------------+
- | Copyright (c) 2001-2003 Guidance Rotterdam BV |
- +----------------------------------------------------------------------+
- | 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 : Marc Boeren <marc@guidance.nl> |
- | Frank M. Kromann <frank@kromann.info> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#include "dbx.h"
-#include "dbx_fbsql.h"
-
-#define FBSQL_ASSOC 1<<0
-#define FBSQL_NUM 1<<1
-
-int dbx_fbsql_connect(zval **rv, zval **host, zval **db, zval **username, zval **password, INTERNAL_FUNCTION_PARAMETERS)
-{
- /* returns connection handle as resource on success or 0 as long on failure */
- int number_of_arguments=3;
- zval **arguments[3];
- zval *returned_zval=NULL;
- zval *select_db_zval=NULL;
-
- arguments[0]=host;
- arguments[1]=username;
- arguments[2]=password;
- dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "fbsql_connect", &returned_zval, number_of_arguments, arguments);
- if (!returned_zval || Z_TYPE_P(returned_zval)!=IS_RESOURCE) {
- if (returned_zval) zval_ptr_dtor(&returned_zval);
- return 0;
- }
-
- number_of_arguments=2;
- arguments[0]=db;
- arguments[1]=&returned_zval;
- dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "fbsql_select_db", &select_db_zval, number_of_arguments, arguments);
- if (!select_db_zval || (Z_TYPE_P(select_db_zval)==IS_BOOL && Z_LVAL_P(select_db_zval)==0) ) {
- if (select_db_zval) zval_ptr_dtor(&select_db_zval);
- /* also close connection */
- number_of_arguments=1;
- arguments[0]=&returned_zval;
- zend_list_addref(Z_LVAL_P(returned_zval));
- dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "fbsql_close", &select_db_zval, number_of_arguments, arguments);
- if (select_db_zval) zval_ptr_dtor(&select_db_zval);
- zval_ptr_dtor(&returned_zval);
- return 0;
- }
- zval_ptr_dtor(&select_db_zval);
-
- MOVE_RETURNED_TO_RV(rv, returned_zval);
- return 1;
-}
-
-int dbx_fbsql_pconnect(zval **rv, zval **host, zval **db, zval **username, zval **password, INTERNAL_FUNCTION_PARAMETERS)
-{
- /* returns persistent connection handle as resource on success or 0 as long on failure */
- int number_of_arguments=3;
- zval **arguments[3];
- zval *returned_zval=NULL;
- zval *select_db_zval=NULL;
-
- arguments[0]=host;
- arguments[1]=username;
- arguments[2]=password;
- dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "fbsql_pconnect", &returned_zval, number_of_arguments, arguments);
- if (!returned_zval || Z_TYPE_P(returned_zval)!=IS_RESOURCE) {
- if (returned_zval) zval_ptr_dtor(&returned_zval);
- return 0;
- }
-
- number_of_arguments=2;
- arguments[0]=db;
- arguments[1]=&returned_zval;
- dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "fbsql_select_db", &select_db_zval, number_of_arguments, arguments);
- if (!select_db_zval || (Z_TYPE_P(select_db_zval)==IS_BOOL && Z_LVAL_P(select_db_zval)==0) ) {
- if (select_db_zval) zval_ptr_dtor(&select_db_zval);
- /* also close connection */
- number_of_arguments=1;
- arguments[0]=&returned_zval;
- zend_list_addref(Z_LVAL_P(returned_zval));
- dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "fbsql_close", &select_db_zval, number_of_arguments, arguments);
- if (select_db_zval) zval_ptr_dtor(&select_db_zval);
- zval_ptr_dtor(&returned_zval);
- return 0;
- }
- zval_ptr_dtor(&select_db_zval);
-
- MOVE_RETURNED_TO_RV(rv, returned_zval);
- return 1;
-}
-
-int dbx_fbsql_close(zval **rv, zval **dbx_handle, INTERNAL_FUNCTION_PARAMETERS)
-{
- /* returns 1 as long on success or 0 as long on failure */
- int number_of_arguments=1;
- zval **arguments[1];
- zval *returned_zval=NULL;
-
- arguments[0]=dbx_handle;
- dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "fbsql_close", &returned_zval, number_of_arguments, arguments);
- if (!returned_zval || Z_TYPE_P(returned_zval)!=IS_BOOL) {
- if (returned_zval) zval_ptr_dtor(&returned_zval);
- return 0;
- }
- MOVE_RETURNED_TO_RV(rv, returned_zval);
- return 1;
-}
-
-int dbx_fbsql_query(zval **rv, zval **dbx_handle, zval **db_name, zval **sql_statement, INTERNAL_FUNCTION_PARAMETERS)
-{
- /* returns 1 as long or a result identifier as resource on success or 0 as long on failure */
- int number_of_arguments=3;
- zval **arguments[3];
- zval *returned_zval=NULL;
-
- arguments[0]=db_name;
- arguments[1]=sql_statement;
- arguments[2]=dbx_handle;
- dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "fbsql_db_query", &returned_zval, number_of_arguments, arguments);
- /* fbsql_query returns a bool for success or failure, or a result_identifier for select statements */
- if (!returned_zval || (Z_TYPE_P(returned_zval)!=IS_BOOL && Z_TYPE_P(returned_zval)!=IS_RESOURCE)) {
- if (returned_zval) zval_ptr_dtor(&returned_zval);
- return 0;
- }
- MOVE_RETURNED_TO_RV(rv, returned_zval);
- return 1;
-}
-
-int dbx_fbsql_getcolumncount(zval **rv, zval **result_handle, INTERNAL_FUNCTION_PARAMETERS)
-{
- /* returns column-count as long on success or 0 as long on failure */
- int number_of_arguments=1;
- zval **arguments[1];
- zval *returned_zval=NULL;
-
- arguments[0]=result_handle;
- dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "fbsql_num_fields", &returned_zval, number_of_arguments, arguments);
- if (!returned_zval || Z_TYPE_P(returned_zval)!=IS_LONG) {
- if (returned_zval) zval_ptr_dtor(&returned_zval);
- return 0;
- }
- MOVE_RETURNED_TO_RV(rv, returned_zval);
- return 1;
-}
-
-int dbx_fbsql_getcolumnname(zval **rv, zval **result_handle, long column_index, INTERNAL_FUNCTION_PARAMETERS)
-{
- /* returns column-name as string on success or 0 as long on failure */
- int number_of_arguments=2;
- zval **arguments[2];
- zval *zval_column_index;
- zval *returned_zval=NULL;
-
- MAKE_STD_ZVAL(zval_column_index);
- ZVAL_LONG(zval_column_index, column_index);
- arguments[0]=result_handle;
- arguments[1]=&zval_column_index;
- dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "fbsql_field_name", &returned_zval, number_of_arguments, arguments);
- /* fbsql_field_name returns a string */
- if (!returned_zval || Z_TYPE_P(returned_zval)!=IS_STRING) {
- if (returned_zval) zval_ptr_dtor(&returned_zval);
- FREE_ZVAL(zval_column_index);
- return 0;
- }
- FREE_ZVAL(zval_column_index);
- MOVE_RETURNED_TO_RV(rv, returned_zval);
- return 1;
-}
-
-int dbx_fbsql_getcolumntype(zval **rv, zval **result_handle, long column_index, INTERNAL_FUNCTION_PARAMETERS)
-{
- /* returns column-type as string on success or 0 as long on failure */
- int number_of_arguments=2;
- zval **arguments[2];
- zval *zval_column_index;
- zval *returned_zval=NULL;
-
- MAKE_STD_ZVAL(zval_column_index);
- ZVAL_LONG(zval_column_index, column_index);
- arguments[0]=result_handle;
- arguments[1]=&zval_column_index;
- dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "fbsql_field_type", &returned_zval, number_of_arguments, arguments);
- /* fbsql_field_name returns a string */
- if (!returned_zval || Z_TYPE_P(returned_zval)!=IS_STRING) {
- if (returned_zval) zval_ptr_dtor(&returned_zval);
- FREE_ZVAL(zval_column_index);
- return 0;
- }
- FREE_ZVAL(zval_column_index);
-
- MOVE_RETURNED_TO_RV(rv, returned_zval);
- return 1;
-}
-
-int dbx_fbsql_getrow(zval **rv, zval **result_handle, long row_number, INTERNAL_FUNCTION_PARAMETERS)
-{
- /* returns array[0..columncount-1] as strings on success or 0 as long on failure */
- int number_of_arguments=2;
- zval **arguments[2];
- zval *zval_resulttype=NULL;
- zval *returned_zval=NULL;
-
- MAKE_STD_ZVAL(zval_resulttype);
- ZVAL_LONG(zval_resulttype, FBSQL_NUM);
- arguments[0]=result_handle;
- arguments[1]=&zval_resulttype;
- dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "fbsql_fetch_array", &returned_zval, number_of_arguments, arguments);
- if (!returned_zval || Z_TYPE_P(returned_zval)!=IS_ARRAY) {
- if (returned_zval) zval_ptr_dtor(&returned_zval);
- FREE_ZVAL(zval_resulttype);
- return 0;
- }
- FREE_ZVAL(zval_resulttype);
- MOVE_RETURNED_TO_RV(rv, returned_zval);
- return 1;
-}
-
-int dbx_fbsql_error(zval **rv, zval **dbx_handle, INTERNAL_FUNCTION_PARAMETERS)
-{
- /* returns string */
- int number_of_arguments=1;
- zval **arguments[1];
- zval *returned_zval=NULL;
-
- arguments[0]=dbx_handle;
- if (!dbx_handle) number_of_arguments=0;
- dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "fbsql_error", &returned_zval, number_of_arguments, arguments);
- if (!returned_zval || Z_TYPE_P(returned_zval)!=IS_STRING) {
- if (returned_zval) zval_ptr_dtor(&returned_zval);
- return 0;
- }
- MOVE_RETURNED_TO_RV(rv, returned_zval);
- return 1;
-}
-
-int dbx_fbsql_esc(zval **rv, zval **dbx_handle, zval **string, INTERNAL_FUNCTION_PARAMETERS)
-{
- /* returns escaped string */
- /* replace \ with \\ */
- /* ' with '' */
- char * str;
- int len;
- char * tmpstr;
- int tmplen;
-
- if (Z_STRLEN_PP(string) == 0) {
- ZVAL_EMPTY_STRING(*rv);
- return 1;
- }
- tmpstr = estrdup(Z_STRVAL_PP(string));
- tmplen = Z_STRLEN_PP(string);
- /* php_str_to_str uses a smart_str that allocates memory */
- /* this memory must be freed or passed on to rv */
- str = php_str_to_str(tmpstr, tmplen, "'", 1, "''", 2, &len);
- efree(tmpstr);
-
- ZVAL_STRINGL(*rv, str, len, 0);
-
- return 1;
-}
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- */
diff --git a/ext/dbx/dbx_fbsql.h b/ext/dbx/dbx_fbsql.h
deleted file mode 100644
index e17a92b44a..0000000000
--- a/ext/dbx/dbx_fbsql.h
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 The PHP Group |
- +----------------------------------------------------------------------+
- | dbx module version 1.0 |
- +----------------------------------------------------------------------+
- | Copyright (c) 2001-2003 Guidance Rotterdam BV |
- +----------------------------------------------------------------------+
- | 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 : Marc Boeren <marc@guidance.nl> |
- | Frank M. Kromann <frank@kromann.info> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifndef ZEND_DBX_FBSQL_H
-#define ZEND_DBX_FBSQL_H
-
-#ifndef INIT_FUNC_ARGS
-#include "zend_modules.h"
-#endif
-
-#include "php.h"
-
-int dbx_fbsql_connect(zval **rv, zval **host, zval **db, zval **username, zval **password, INTERNAL_FUNCTION_PARAMETERS);
- /* returns connection handle as resource on success or 0 as long on failure */
-int dbx_fbsql_pconnect(zval **rv, zval **host, zval **db, zval **username, zval **password, INTERNAL_FUNCTION_PARAMETERS);
- /* returns persistent connection handle as resource on success or 0 as long on failure */
-int dbx_fbsql_close(zval **rv, zval **dbx_handle, INTERNAL_FUNCTION_PARAMETERS);
- /* returns 1 as long on success or 0 as long on failure */
-int dbx_fbsql_query(zval **rv, zval **dbx_handle, zval **db_name, zval **sql_statement, INTERNAL_FUNCTION_PARAMETERS);
- /* returns 1 as long or a result identifier as resource on success or 0 as long on failure */
-int dbx_fbsql_getcolumncount(zval **rv, zval **result_handle, INTERNAL_FUNCTION_PARAMETERS);
- /* returns column-count as long on success or 0 as long on failure */
-int dbx_fbsql_getcolumnname(zval **rv, zval **result_handle, long column_index, INTERNAL_FUNCTION_PARAMETERS);
- /* returns column-name as string on success or 0 as long on failure */
-int dbx_fbsql_getcolumntype(zval **rv, zval **result_handle, long column_index, INTERNAL_FUNCTION_PARAMETERS);
- /* returns column-type as string on success or 0 as long on failure */
-int dbx_fbsql_getrow(zval **rv, zval **result_handle, long row_number, INTERNAL_FUNCTION_PARAMETERS);
- /* returns array[0..columncount-1] as strings on success or 0 as long on failure */
-int dbx_fbsql_error(zval **rv, zval **dbx_handle, INTERNAL_FUNCTION_PARAMETERS);
- /* returns string */
-int dbx_fbsql_esc(zval **rv, zval **dbx_handle, zval **string, INTERNAL_FUNCTION_PARAMETERS);
- /* returns escaped string */
-
-#endif /* ZEND_DBX_FBSQL_H */
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- */
diff --git a/ext/dbx/dbx_mssql.c b/ext/dbx/dbx_mssql.c
deleted file mode 100644
index ed5c66dfa3..0000000000
--- a/ext/dbx/dbx_mssql.c
+++ /dev/null
@@ -1,282 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 The PHP Group |
- +----------------------------------------------------------------------+
- | dbx module version 1.0 |
- +----------------------------------------------------------------------+
- | Copyright (c) 2001-2003 Guidance Rotterdam BV |
- +----------------------------------------------------------------------+
- | 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 : Marc Boeren <marc@guidance.nl> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#include "dbx.h"
-#include "dbx_mssql.h"
-
-#define MSSQL_ASSOC 1<<0
-#define MSSQL_NUM 1<<1
-
-int dbx_mssql_connect(zval **rv, zval **host, zval **db, zval **username, zval **password, INTERNAL_FUNCTION_PARAMETERS)
-{
- /* returns connection handle as resource on success or 0 as long on failure */
- int number_of_arguments=3;
- zval **arguments[3];
- zval *returned_zval=NULL;
- zval *select_db_zval=NULL;
-
- arguments[0]=host;
- arguments[1]=username;
- arguments[2]=password;
- dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "mssql_connect", &returned_zval, number_of_arguments, arguments);
- if (!returned_zval || Z_TYPE_P(returned_zval)!=IS_RESOURCE) {
- if (returned_zval) zval_ptr_dtor(&returned_zval);
- return 0;
- }
-
- number_of_arguments=2;
- arguments[0]=db;
- arguments[1]=&returned_zval;
- dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "mssql_select_db", &select_db_zval, number_of_arguments, arguments);
- if (!select_db_zval || (Z_TYPE_P(select_db_zval)==IS_BOOL && Z_LVAL_P(select_db_zval)==0) ) {
- if (select_db_zval) zval_ptr_dtor(&select_db_zval);
- /* also close connection */
- number_of_arguments=1;
- arguments[0]=&returned_zval;
- zend_list_addref(Z_LVAL_P(returned_zval));
- dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "mssql_close", &select_db_zval, number_of_arguments, arguments);
- if (select_db_zval) zval_ptr_dtor(&select_db_zval);
- zval_ptr_dtor(&returned_zval);
- return 0;
- }
- zval_ptr_dtor(&select_db_zval);
-
- MOVE_RETURNED_TO_RV(rv, returned_zval);
- return 1;
-}
-
-int dbx_mssql_pconnect(zval **rv, zval **host, zval **db, zval **username, zval **password, INTERNAL_FUNCTION_PARAMETERS)
-{
- /* returns persistent connection handle as resource on success or 0 as long on failure */
- int number_of_arguments=3;
- zval **arguments[3];
- zval *returned_zval=NULL;
- zval *select_db_zval=NULL;
-
- arguments[0]=host;
- arguments[1]=username;
- arguments[2]=password;
- dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "mssql_pconnect", &returned_zval, number_of_arguments, arguments);
- if (!returned_zval || Z_TYPE_P(returned_zval)!=IS_RESOURCE) {
- if (returned_zval) zval_ptr_dtor(&returned_zval);
- return 0;
- }
-
- number_of_arguments=2;
- arguments[0]=db;
- arguments[1]=&returned_zval;
- dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "mssql_select_db", &select_db_zval, number_of_arguments, arguments);
- if (!select_db_zval || (Z_TYPE_P(select_db_zval)==IS_BOOL && Z_LVAL_P(select_db_zval)==0) ) {
- if (select_db_zval) zval_ptr_dtor(&select_db_zval);
- /* also close connection */
- number_of_arguments=1;
- arguments[0]=&returned_zval;
- zend_list_addref(Z_LVAL_P(returned_zval));
- dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "mssql_close", &select_db_zval, number_of_arguments, arguments);
- if (select_db_zval) zval_ptr_dtor(&select_db_zval);
- zval_ptr_dtor(&returned_zval);
- return 0;
- }
- zval_ptr_dtor(&select_db_zval);
-
- MOVE_RETURNED_TO_RV(rv, returned_zval);
- return 1;
-}
-
-int dbx_mssql_close(zval **rv, zval **dbx_handle, INTERNAL_FUNCTION_PARAMETERS)
-{
- /* returns 1 as long on success or 0 as long on failure */
- int number_of_arguments=1;
- zval **arguments[1];
- zval *returned_zval=NULL;
-
- arguments[0]=dbx_handle;
- dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "mssql_close", &returned_zval, number_of_arguments, arguments);
- if (!returned_zval || Z_TYPE_P(returned_zval)!=IS_BOOL) {
- if (returned_zval) zval_ptr_dtor(&returned_zval);
- return 0;
- }
- MOVE_RETURNED_TO_RV(rv, returned_zval);
- return 1;
-}
-
-int dbx_mssql_query(zval **rv, zval **dbx_handle, zval **db_name, zval **sql_statement, INTERNAL_FUNCTION_PARAMETERS)
-{
- /* returns 1 as long or a result identifier as resource on success or 0 as long on failure */
- int number_of_arguments=2;
- zval **arguments[2];
- zval *returned_zval=NULL;
- zval *select_db_zval=NULL;
-
- number_of_arguments=2;
- arguments[0]=db_name;
- arguments[1]=dbx_handle;
- dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "mssql_select_db", &select_db_zval, number_of_arguments, arguments);
- zval_ptr_dtor(&select_db_zval);
-
- number_of_arguments=2;
- arguments[0]=sql_statement;
- arguments[1]=dbx_handle;
- dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "mssql_query", &returned_zval, number_of_arguments, arguments);
- /* mssql_query returns a bool for success or failure, or a result_identifier for select statements */
- if (!returned_zval || (Z_TYPE_P(returned_zval)!=IS_BOOL && Z_TYPE_P(returned_zval)!=IS_RESOURCE)) {
- if (returned_zval) zval_ptr_dtor(&returned_zval);
- return 0;
- }
- MOVE_RETURNED_TO_RV(rv, returned_zval);
- return 1;
-}
-
-int dbx_mssql_getcolumncount(zval **rv, zval **result_handle, INTERNAL_FUNCTION_PARAMETERS)
-{
- /* returns column-count as long on success or 0 as long on failure */
- int number_of_arguments=1;
- zval **arguments[1];
- zval *returned_zval=NULL;
-
- arguments[0]=result_handle;
- dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "mssql_num_fields", &returned_zval, number_of_arguments, arguments);
- if (!returned_zval || Z_TYPE_P(returned_zval)!=IS_LONG) {
- if (returned_zval) zval_ptr_dtor(&returned_zval);
- return 0;
- }
- MOVE_RETURNED_TO_RV(rv, returned_zval);
- return 1;
-}
-
-int dbx_mssql_getcolumnname(zval **rv, zval **result_handle, long column_index, INTERNAL_FUNCTION_PARAMETERS)
-{
- /* returns column-name as string on success or 0 as long on failure */
- int number_of_arguments=2;
- zval **arguments[2];
- zval *zval_column_index;
- zval *returned_zval=NULL;
-
- MAKE_STD_ZVAL(zval_column_index);
- ZVAL_LONG(zval_column_index, column_index);
- arguments[0]=result_handle;
- arguments[1]=&zval_column_index;
- dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "mssql_field_name", &returned_zval, number_of_arguments, arguments);
- /* mssql_field_name returns a string */
- if (!returned_zval || Z_TYPE_P(returned_zval)!=IS_STRING) {
- if (returned_zval) zval_ptr_dtor(&returned_zval);
- FREE_ZVAL(zval_column_index);
- return 0;
- }
- FREE_ZVAL(zval_column_index);
- MOVE_RETURNED_TO_RV(rv, returned_zval);
- return 1;
-}
-
-int dbx_mssql_getcolumntype(zval **rv, zval **result_handle, long column_index, INTERNAL_FUNCTION_PARAMETERS)
-{
- /* returns column-type as string on success or 0 as long on failure */
- int number_of_arguments=2;
- zval **arguments[2];
- zval *zval_column_index;
- zval *returned_zval=NULL;
-
- MAKE_STD_ZVAL(zval_column_index);
- ZVAL_LONG(zval_column_index, column_index);
- arguments[0]=result_handle;
- arguments[1]=&zval_column_index;
- dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "mssql_field_type", &returned_zval, number_of_arguments, arguments);
- /* mssql_field_name returns a string */
- if (!returned_zval || Z_TYPE_P(returned_zval)!=IS_STRING) {
- if (returned_zval) zval_ptr_dtor(&returned_zval);
- FREE_ZVAL(zval_column_index);
- return 0;
- }
- FREE_ZVAL(zval_column_index);
-
- MOVE_RETURNED_TO_RV(rv, returned_zval);
- return 1;
-}
-
-int dbx_mssql_getrow(zval **rv, zval **result_handle, long row_number, INTERNAL_FUNCTION_PARAMETERS)
-{
- /* returns array[0..columncount-1] as strings on success or 0 as long on failure */
- int number_of_arguments=1;
- zval **arguments[1];
- zval *returned_zval=NULL;
-
- arguments[0]=result_handle;
- dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "mssql_fetch_row", &returned_zval, number_of_arguments, arguments);
- if (!returned_zval || Z_TYPE_P(returned_zval)!=IS_ARRAY) {
- if (returned_zval) zval_ptr_dtor(&returned_zval);
- return 0;
- }
- MOVE_RETURNED_TO_RV(rv, returned_zval);
- return 1;
-}
-
-int dbx_mssql_error(zval **rv, zval **dbx_handle, INTERNAL_FUNCTION_PARAMETERS)
-{
- /* returns string */
- int number_of_arguments=1;
- zval **arguments[1];
- zval *returned_zval=NULL;
-
- arguments[0]=dbx_handle;
- if (!dbx_handle) number_of_arguments=0;
- dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "mssql_get_last_message", &returned_zval, number_of_arguments, arguments);
- if (!returned_zval || Z_TYPE_P(returned_zval)!=IS_STRING) {
- if (returned_zval) zval_ptr_dtor(&returned_zval);
- return 0;
- }
- MOVE_RETURNED_TO_RV(rv, returned_zval);
- return 1;
-}
-
-int dbx_mssql_esc(zval **rv, zval **dbx_handle, zval **string, INTERNAL_FUNCTION_PARAMETERS)
-{
- /* returns escaped string */
- /* replace ' with '' */
- char * str;
- int len;
- char * tmpstr;
- int tmplen;
-
- if (Z_STRLEN_PP(string) == 0) {
- ZVAL_EMPTY_STRING(*rv);
- return 1;
- }
- tmpstr = estrdup(Z_STRVAL_PP(string));
- tmplen = Z_STRLEN_PP(string);
- /* php_str_to_str uses a smart_str that allocates memory */
- /* this memory must be freed or passed on to rv */
- str = php_str_to_str(tmpstr, tmplen, "'", 1, "''", 2, &len);
- efree(tmpstr);
-
- ZVAL_STRINGL(*rv, str, len, 0);
-
- return 1;
-}
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- */
diff --git a/ext/dbx/dbx_mssql.h b/ext/dbx/dbx_mssql.h
deleted file mode 100644
index 725cba2e53..0000000000
--- a/ext/dbx/dbx_mssql.h
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 The PHP Group |
- +----------------------------------------------------------------------+
- | dbx module version 1.0 |
- +----------------------------------------------------------------------+
- | Copyright (c) 2001-2003 Guidance Rotterdam BV |
- +----------------------------------------------------------------------+
- | 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 : Marc Boeren <marc@guidance.nl> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifndef ZEND_DBX_MSSQL_H
-#define ZEND_DBX_MSSQL_H
-
-#ifndef INIT_FUNC_ARGS
-#include "zend_modules.h"
-#endif
-
-#include "php.h"
-
-int dbx_mssql_connect(zval **rv, zval **host, zval **db, zval **username, zval **password, INTERNAL_FUNCTION_PARAMETERS);
- /* returns connection handle as resource on success or 0 as long on failure */
-int dbx_mssql_pconnect(zval **rv, zval **host, zval **db, zval **username, zval **password, INTERNAL_FUNCTION_PARAMETERS);
- /* returns persistent connection handle as resource on success or 0 as long on failure */
-int dbx_mssql_close(zval **rv, zval **dbx_handle, INTERNAL_FUNCTION_PARAMETERS);
- /* returns 1 as long on success or 0 as long on failure */
-int dbx_mssql_query(zval **rv, zval **dbx_handle, zval **db_name, zval **sql_statement, INTERNAL_FUNCTION_PARAMETERS);
- /* returns 1 as long or a result identifier as resource on success or 0 as long on failure */
-int dbx_mssql_getcolumncount(zval **rv, zval **result_handle, INTERNAL_FUNCTION_PARAMETERS);
- /* returns column-count as long on success or 0 as long on failure */
-int dbx_mssql_getcolumnname(zval **rv, zval **result_handle, long column_index, INTERNAL_FUNCTION_PARAMETERS);
- /* returns column-name as string on success or 0 as long on failure */
-int dbx_mssql_getcolumntype(zval **rv, zval **result_handle, long column_index, INTERNAL_FUNCTION_PARAMETERS);
- /* returns column-type as string on success or 0 as long on failure */
-int dbx_mssql_getrow(zval **rv, zval **result_handle, long row_number, INTERNAL_FUNCTION_PARAMETERS);
- /* returns array[0..columncount-1] as strings on success or 0 as long on failure */
-int dbx_mssql_error(zval **rv, zval **dbx_handle, INTERNAL_FUNCTION_PARAMETERS);
- /* returns string */
-int dbx_mssql_esc(zval **rv, zval **dbx_handle, zval **string, INTERNAL_FUNCTION_PARAMETERS);
- /* returns escaped string */
-
-#endif /* ZEND_DBX_MSSQL_H */
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- */
diff --git a/ext/dbx/dbx_mysql.c b/ext/dbx/dbx_mysql.c
deleted file mode 100644
index 59f1321ffc..0000000000
--- a/ext/dbx/dbx_mysql.c
+++ /dev/null
@@ -1,304 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 The PHP Group |
- +----------------------------------------------------------------------+
- | dbx module version 1.0 |
- +----------------------------------------------------------------------+
- | Copyright (c) 2001-2003 Guidance Rotterdam BV |
- +----------------------------------------------------------------------+
- | 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 : Marc Boeren <marc@guidance.nl> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#include "dbx.h"
-#include "dbx_mysql.h"
-
-#define MYSQL_ASSOC 1<<0
-#define MYSQL_NUM 1<<1
-
-int dbx_mysql_connect(zval **rv, zval **host, zval **db, zval **username, zval **password, INTERNAL_FUNCTION_PARAMETERS)
-{
- /* returns connection handle as resource on success or 0 as long on failure */
- int number_of_arguments=3;
- zval **arguments[3];
- zval *returned_zval=NULL;
- zval *select_db_zval=NULL;
-
- arguments[0]=host;
- arguments[1]=username;
- arguments[2]=password;
- dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "mysql_connect", &returned_zval, number_of_arguments, arguments);
- if (!returned_zval || Z_TYPE_P(returned_zval)!=IS_RESOURCE) {
- if (returned_zval) zval_ptr_dtor(&returned_zval);
- return 0;
- }
-
- number_of_arguments=2;
- arguments[0]=db;
- arguments[1]=&returned_zval;
- dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "mysql_select_db", &select_db_zval, number_of_arguments, arguments);
- if (!select_db_zval || (Z_TYPE_P(select_db_zval)==IS_BOOL && Z_LVAL_P(select_db_zval)==0) ) {
- if (select_db_zval) zval_ptr_dtor(&select_db_zval);
- /* also close connection */
- number_of_arguments=1;
- arguments[0]=&returned_zval;
- zend_list_addref(Z_LVAL_P(returned_zval));
- dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "mysql_close", &select_db_zval, number_of_arguments, arguments);
- if (select_db_zval) zval_ptr_dtor(&select_db_zval);
- zval_ptr_dtor(&returned_zval);
- return 0;
- }
- zval_ptr_dtor(&select_db_zval);
-
- MOVE_RETURNED_TO_RV(rv, returned_zval);
- return 1;
-}
-
-int dbx_mysql_pconnect(zval **rv, zval **host, zval **db, zval **username, zval **password, INTERNAL_FUNCTION_PARAMETERS)
-{
- /* returns persistent connection handle as resource on success or 0 as long on failure */
- int number_of_arguments=3;
- zval **arguments[3];
- zval *returned_zval=NULL;
- zval *select_db_zval=NULL;
-
- arguments[0]=host;
- arguments[1]=username;
- arguments[2]=password;
- dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "mysql_pconnect", &returned_zval, number_of_arguments, arguments);
- if (!returned_zval || Z_TYPE_P(returned_zval)!=IS_RESOURCE) {
- if (returned_zval) zval_ptr_dtor(&returned_zval);
- return 0;
- }
-
- number_of_arguments=2;
- arguments[0]=db;
- arguments[1]=&returned_zval;
- dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "mysql_select_db", &select_db_zval, number_of_arguments, arguments);
- if (!select_db_zval || (Z_TYPE_P(select_db_zval)==IS_BOOL && Z_LVAL_P(select_db_zval)==0) ) {
- if (select_db_zval) zval_ptr_dtor(&select_db_zval);
- /* also close connection */
- number_of_arguments=1;
- arguments[0]=&returned_zval;
- zend_list_addref(Z_LVAL_P(returned_zval));
- dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "mysql_close", &select_db_zval, number_of_arguments, arguments);
- if (select_db_zval) zval_ptr_dtor(&select_db_zval);
- zval_ptr_dtor(&returned_zval);
- return 0;
- }
- zval_ptr_dtor(&select_db_zval);
-
- MOVE_RETURNED_TO_RV(rv, returned_zval);
- return 1;
-}
-
-int dbx_mysql_close(zval **rv, zval **dbx_handle, INTERNAL_FUNCTION_PARAMETERS)
-{
- /* returns 1 as long on success or 0 as long on failure */
- int number_of_arguments=1;
- zval **arguments[1];
- zval *returned_zval=NULL;
-
- arguments[0]=dbx_handle;
- dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "mysql_close", &returned_zval, number_of_arguments, arguments);
- if (!returned_zval || Z_TYPE_P(returned_zval)!=IS_BOOL) {
- if (returned_zval) zval_ptr_dtor(&returned_zval);
- return 0;
- }
- MOVE_RETURNED_TO_RV(rv, returned_zval);
- return 1;
-}
-
-int dbx_mysql_query(zval **rv, zval **dbx_handle, zval **db_name, zval **sql_statement, INTERNAL_FUNCTION_PARAMETERS)
-{
- /* returns 1 as long or a result identifier as resource on success or 0 as long on failure */
- int number_of_arguments=2;
- zval **arguments[2];
- zval *returned_zval=NULL;
- zval *select_db_zval=NULL;
-
- number_of_arguments=2;
- arguments[0]=db_name;
- arguments[1]=dbx_handle;
- dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "mysql_select_db", &select_db_zval, number_of_arguments, arguments);
- zval_ptr_dtor(&select_db_zval);
-
- number_of_arguments=2;
- arguments[0]=sql_statement;
- arguments[1]=dbx_handle;
- dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "mysql_query", &returned_zval, number_of_arguments, arguments);
- /* mysql_query returns a bool for success or failure, or a result_identifier for select statements */
- if (!returned_zval || (Z_TYPE_P(returned_zval)!=IS_BOOL && Z_TYPE_P(returned_zval)!=IS_RESOURCE)) {
- if (returned_zval) zval_ptr_dtor(&returned_zval);
- return 0;
- }
- MOVE_RETURNED_TO_RV(rv, returned_zval);
- return 1;
-}
-
-int dbx_mysql_getcolumncount(zval **rv, zval **result_handle, INTERNAL_FUNCTION_PARAMETERS)
-{
- /* returns column-count as long on success or 0 as long on failure */
- int number_of_arguments=1;
- zval **arguments[1];
- zval *returned_zval=NULL;
-
- arguments[0]=result_handle;
- dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "mysql_num_fields", &returned_zval, number_of_arguments, arguments);
- if (!returned_zval || Z_TYPE_P(returned_zval)!=IS_LONG) {
- if (returned_zval) zval_ptr_dtor(&returned_zval);
- return 0;
- }
- MOVE_RETURNED_TO_RV(rv, returned_zval);
- return 1;
-}
-
-int dbx_mysql_getcolumnname(zval **rv, zval **result_handle, long column_index, INTERNAL_FUNCTION_PARAMETERS)
-{
- /* returns column-name as string on success or 0 as long on failure */
- int number_of_arguments=2;
- zval **arguments[2];
- zval *zval_column_index;
- zval *returned_zval=NULL;
-
- MAKE_STD_ZVAL(zval_column_index);
- ZVAL_LONG(zval_column_index, column_index);
- arguments[0]=result_handle;
- arguments[1]=&zval_column_index;
- dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "mysql_field_name", &returned_zval, number_of_arguments, arguments);
- /* mysql_field_name returns a string */
- if (!returned_zval || Z_TYPE_P(returned_zval)!=IS_STRING) {
- if (returned_zval) zval_ptr_dtor(&returned_zval);
- FREE_ZVAL(zval_column_index);
- return 0;
- }
- FREE_ZVAL(zval_column_index);
- MOVE_RETURNED_TO_RV(rv, returned_zval);
- return 1;
-}
-
-int dbx_mysql_getcolumntype(zval **rv, zval **result_handle, long column_index, INTERNAL_FUNCTION_PARAMETERS)
-{
- /* returns column-type as string on success or 0 as long on failure */
- int number_of_arguments=2;
- zval **arguments[2];
- zval *zval_column_index;
- zval *returned_zval=NULL;
-
- MAKE_STD_ZVAL(zval_column_index);
- ZVAL_LONG(zval_column_index, column_index);
- arguments[0]=result_handle;
- arguments[1]=&zval_column_index;
- dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "mysql_field_type", &returned_zval, number_of_arguments, arguments);
- /* mysql_field_name returns a string */
- if (!returned_zval || Z_TYPE_P(returned_zval)!=IS_STRING) {
- if (returned_zval) zval_ptr_dtor(&returned_zval);
- FREE_ZVAL(zval_column_index);
- return 0;
- }
- FREE_ZVAL(zval_column_index);
-
- MOVE_RETURNED_TO_RV(rv, returned_zval);
- return 1;
-}
-
-int dbx_mysql_getrow(zval **rv, zval **result_handle, long row_number, INTERNAL_FUNCTION_PARAMETERS)
-{
- /* returns array[0..columncount-1] as strings on success or 0 as long on failure */
- int number_of_arguments=2;
- zval **arguments[2];
- zval *zval_resulttype=NULL;
- zval *returned_zval=NULL;
-
- MAKE_STD_ZVAL(zval_resulttype);
- ZVAL_LONG(zval_resulttype, MYSQL_NUM);
- arguments[0]=result_handle;
- arguments[1]=&zval_resulttype;
- dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "mysql_fetch_array", &returned_zval, number_of_arguments, arguments);
- if (!returned_zval || Z_TYPE_P(returned_zval)!=IS_ARRAY) {
- if (returned_zval) zval_ptr_dtor(&returned_zval);
- FREE_ZVAL(zval_resulttype);
- return 0;
- }
- FREE_ZVAL(zval_resulttype);
- MOVE_RETURNED_TO_RV(rv, returned_zval);
- return 1;
-}
-
-int dbx_mysql_error(zval **rv, zval **dbx_handle, INTERNAL_FUNCTION_PARAMETERS)
-{
- /* returns string */
- int number_of_arguments=1;
- zval **arguments[1];
- zval *returned_zval=NULL;
-
- arguments[0]=dbx_handle;
- if (!dbx_handle) number_of_arguments=0;
- dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "mysql_error", &returned_zval, number_of_arguments, arguments);
- if (!returned_zval || Z_TYPE_P(returned_zval)!=IS_STRING) {
- if (returned_zval) zval_ptr_dtor(&returned_zval);
- return 0;
- }
- MOVE_RETURNED_TO_RV(rv, returned_zval);
- return 1;
-}
-
-int dbx_mysql_esc(zval **rv, zval **dbx_handle, zval **string, INTERNAL_FUNCTION_PARAMETERS)
-{
- /* returns escaped string */
- int number_of_arguments=2;
- zval **arguments[2];
- zval *returned_zval=NULL;
- char * str;
- int len;
- char * tmpstr;
- int tmplen;
-
- if (Z_STRLEN_PP(string) == 0) {
- ZVAL_EMPTY_STRING(*rv);
- return 1;
- }
- arguments[0]=string;
- arguments[1]=dbx_handle;
- dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "mysql_real_escape_string", &returned_zval, number_of_arguments, arguments);
- if (!returned_zval || Z_TYPE_P(returned_zval)!=IS_STRING) {
- if (returned_zval) zval_ptr_dtor(&returned_zval);
- /* mysql_real_escape_string failed, just do my own escaping then */
- /* replace \ with \\ */
- /* ' with '' */
-
- tmpstr = estrdup(Z_STRVAL_PP(string));
- tmplen = Z_STRLEN_PP(string);
- /* php_str_to_str uses a smart_str that allocates memory */
- /* this memory must be freed or passed on to rv */
- str = php_str_to_str(tmpstr, tmplen, "\\", 1, "\\\\", 2, &len);
- efree(tmpstr);
- tmpstr=str; tmplen=len;
- str = php_str_to_str(tmpstr, tmplen, "'", 1, "''", 2, &len);
- efree(tmpstr);
-
- ZVAL_STRINGL(*rv, str, len, 0);
- return 1;
- }
- MOVE_RETURNED_TO_RV(rv, returned_zval);
- return 1;
-}
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- */
diff --git a/ext/dbx/dbx_mysql.h b/ext/dbx/dbx_mysql.h
deleted file mode 100644
index 12c789d101..0000000000
--- a/ext/dbx/dbx_mysql.h
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 The PHP Group |
- +----------------------------------------------------------------------+
- | dbx module version 1.0 |
- +----------------------------------------------------------------------+
- | Copyright (c) 2001-2003 Guidance Rotterdam BV |
- +----------------------------------------------------------------------+
- | 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 : Marc Boeren <marc@guidance.nl> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifndef ZEND_DBX_MYSQL_H
-#define ZEND_DBX_MYSQL_H
-
-#ifndef INIT_FUNC_ARGS
-#include "zend_modules.h"
-#endif
-
-#include "php.h"
-
-int dbx_mysql_connect(zval **rv, zval **host, zval **db, zval **username, zval **password, INTERNAL_FUNCTION_PARAMETERS);
- /* returns connection handle as resource on success or 0 as long on failure */
-int dbx_mysql_pconnect(zval **rv, zval **host, zval **db, zval **username, zval **password, INTERNAL_FUNCTION_PARAMETERS);
- /* returns persistent connection handle as resource on success or 0 as long on failure */
-int dbx_mysql_close(zval **rv, zval **dbx_handle, INTERNAL_FUNCTION_PARAMETERS);
- /* returns 1 as long on success or 0 as long on failure */
-int dbx_mysql_query(zval **rv, zval **dbx_handle, zval **db_name, zval **sql_statement, INTERNAL_FUNCTION_PARAMETERS);
- /* returns 1 as long or a result identifier as resource on success or 0 as long on failure */
-int dbx_mysql_getcolumncount(zval **rv, zval **result_handle, INTERNAL_FUNCTION_PARAMETERS);
- /* returns column-count as long on success or 0 as long on failure */
-int dbx_mysql_getcolumnname(zval **rv, zval **result_handle, long column_index, INTERNAL_FUNCTION_PARAMETERS);
- /* returns column-name as string on success or 0 as long on failure */
-int dbx_mysql_getcolumntype(zval **rv, zval **result_handle, long column_index, INTERNAL_FUNCTION_PARAMETERS);
- /* returns column-type as string on success or 0 as long on failure */
-int dbx_mysql_getrow(zval **rv, zval **result_handle, long row_number, INTERNAL_FUNCTION_PARAMETERS);
- /* returns array[0..columncount-1] as strings on success or 0 as long on failure */
-int dbx_mysql_error(zval **rv, zval **dbx_handle, INTERNAL_FUNCTION_PARAMETERS);
- /* returns string */
-int dbx_mysql_esc(zval **rv, zval **dbx_handle, zval **string, INTERNAL_FUNCTION_PARAMETERS);
- /* returns escaped string */
-
-#endif /* ZEND_DBX_MYSQL_H */
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- */
diff --git a/ext/dbx/dbx_oci8.c b/ext/dbx/dbx_oci8.c
deleted file mode 100644
index fd3d4b6384..0000000000
--- a/ext/dbx/dbx_oci8.c
+++ /dev/null
@@ -1,293 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 The PHP Group |
- +----------------------------------------------------------------------+
- | dbx module version 1.0 |
- +----------------------------------------------------------------------+
- | Copyright (c) 2001-2003 Guidance Rotterdam BV |
- +----------------------------------------------------------------------+
- | 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 : Marc Boeren <marc@guidance.nl> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#include "dbx.h"
-#include "dbx_oci8.h"
-
-#define OCI_ASSOC 1<<0
-#define OCI_NUM 1<<1
-#define OCI_RETURN_NULLS 1<<2
-#define OCI_RETURN_LOBS 1<<3
-
-int dbx_oci8_connect(zval **rv, zval **host, zval **db, zval **username, zval **password, INTERNAL_FUNCTION_PARAMETERS)
-{
- /* returns connection handle as resource on success or 0 as long on failure */
- int number_of_arguments=3;
- zval **arguments[3];
- zval *returned_zval=NULL;
-
- arguments[0]=username;
- arguments[1]=password;
- arguments[2]=db;
- dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "oci_connect", &returned_zval, number_of_arguments, arguments);
- if (!returned_zval || Z_TYPE_P(returned_zval)!=IS_RESOURCE) {
- if (returned_zval) zval_ptr_dtor(&returned_zval);
- return 0;
- }
- MOVE_RETURNED_TO_RV(rv, returned_zval);
- return 1;
-}
-
-int dbx_oci8_pconnect(zval **rv, zval **host, zval **db, zval **username, zval **password, INTERNAL_FUNCTION_PARAMETERS)
-{
- /* returns connection handle as resource on success or 0 as long on failure */
- int number_of_arguments=3;
- zval **arguments[3];
- zval *returned_zval=NULL;
-
- arguments[0]=username;
- arguments[1]=password;
- arguments[2]=db;
- dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "oci_pconnect", &returned_zval, number_of_arguments, arguments);
- if (!returned_zval || Z_TYPE_P(returned_zval)!=IS_RESOURCE) {
- if (returned_zval) zval_ptr_dtor(&returned_zval);
- return 0;
- }
- MOVE_RETURNED_TO_RV(rv, returned_zval);
- return 1;
-}
-
-int dbx_oci8_close(zval **rv, zval **dbx_handle, INTERNAL_FUNCTION_PARAMETERS)
-{
- /* returns 1 as long on success or 0 as long on failure */
- /* actually, oci_close officially does nothing, so what should I return? */
- /* I will just return NULL right now and change the test accordingly */
- int number_of_arguments=1;
- zval **arguments[1];
- zval *returned_zval=NULL;
-
- arguments[0]=dbx_handle;
- dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "oci_close", &returned_zval, number_of_arguments, arguments);
- if (!returned_zval || Z_TYPE_P(returned_zval)!=IS_BOOL) {
- if (returned_zval) zval_ptr_dtor(&returned_zval);
- return 0;
- }
- MOVE_RETURNED_TO_RV(rv, returned_zval);
- return 1;
-}
-
-int dbx_oci8_query(zval **rv, zval **dbx_handle, zval **db_name, zval **sql_statement, INTERNAL_FUNCTION_PARAMETERS)
-{
- /* returns 1 as long or a result identifier as resource on success or 0 as long on failure */
- int number_of_arguments=2;
- zval **arguments[2];
- zval *returned_zval=NULL;
- zval *execute_zval=NULL;
- zval *statementtype_zval=NULL;
-
- arguments[0]=dbx_handle;
- arguments[1]=sql_statement;
- dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "oci_parse", &returned_zval, number_of_arguments, arguments);
- /* oci_parse returns a bool for failure, or a statement_identifier for valid sql_statements */
- if (!returned_zval || (Z_TYPE_P(returned_zval)!=IS_BOOL && Z_TYPE_P(returned_zval)!=IS_RESOURCE)) {
- if (returned_zval) zval_ptr_dtor(&returned_zval);
- return 0;
- }
- number_of_arguments=1;
- arguments[0]=&returned_zval;
- dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "oci_execute", &execute_zval, number_of_arguments, arguments);
- /* oci_execute returns a bool for success or failure */
- if (!execute_zval || Z_TYPE_P(execute_zval)!=IS_BOOL || Z_BVAL_P(execute_zval)==0) {
- if (execute_zval) zval_ptr_dtor(&execute_zval);
- zval_ptr_dtor(&returned_zval);
- return 0;
- }
- number_of_arguments=1;
- arguments[0]=&returned_zval;
- dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "oci_statement_type", &statementtype_zval, number_of_arguments, arguments);
- /* oci_statement_type returns a string. 'SELECT' means there are results */
- if (!statementtype_zval || Z_TYPE_P(statementtype_zval)!=IS_STRING) {
- if (statementtype_zval) zval_ptr_dtor(&statementtype_zval);
- if (execute_zval) zval_ptr_dtor(&execute_zval);
- zval_ptr_dtor(&returned_zval);
- return 0;
- }
-
- if (!zend_binary_strcmp(Z_STRVAL_P(statementtype_zval), Z_STRLEN_P(statementtype_zval), "SELECT", sizeof("SELECT")-sizeof(""))) {
- /* it is a select, so results are returned */
- MOVE_RETURNED_TO_RV(rv, returned_zval);
- } else {
- /* it is not a select, so just return success */
- zval_ptr_dtor(&returned_zval);
- MAKE_STD_ZVAL(returned_zval);
- ZVAL_BOOL(returned_zval, 1);
- MOVE_RETURNED_TO_RV(rv, returned_zval);
- }
- if (statementtype_zval) zval_ptr_dtor(&statementtype_zval);
- if (execute_zval) zval_ptr_dtor(&execute_zval);
-
- return 1;
-}
-
-int dbx_oci8_getcolumncount(zval **rv, zval **result_handle, INTERNAL_FUNCTION_PARAMETERS)
-{
- /* returns column-count as long on success or 0 as long on failure */
- int number_of_arguments=1;
- zval **arguments[1];
- zval *returned_zval=NULL;
-
- arguments[0]=result_handle;
- dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "oci_num_fields", &returned_zval, number_of_arguments, arguments);
- if (!returned_zval || Z_TYPE_P(returned_zval)!=IS_LONG) {
- if (returned_zval) zval_ptr_dtor(&returned_zval);
- return 0;
- }
- MOVE_RETURNED_TO_RV(rv, returned_zval);
- return 1;
-}
-
-int dbx_oci8_getcolumnname(zval **rv, zval **result_handle, long column_index, INTERNAL_FUNCTION_PARAMETERS)
-{
- /* returns column-name as string on success or 0 as long on failure */
- int number_of_arguments=2;
- zval **arguments[2];
- zval *zval_column_index;
- zval *returned_zval=NULL;
-
- MAKE_STD_ZVAL(zval_column_index);
- /* dbx uses 0-based column-indices, oci8 uses 1-based indices... */
- ZVAL_LONG(zval_column_index, column_index+1);
- arguments[0]=result_handle;
- arguments[1]=&zval_column_index;
- dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "oci_field_name", &returned_zval, number_of_arguments, arguments);
- /* oci_field_name returns a string */
- if (!returned_zval || Z_TYPE_P(returned_zval)!=IS_STRING) {
- if (returned_zval) zval_ptr_dtor(&returned_zval);
- FREE_ZVAL(zval_column_index);
- return 0;
- }
- FREE_ZVAL(zval_column_index);
- MOVE_RETURNED_TO_RV(rv, returned_zval);
- return 1;
-}
-
-int dbx_oci8_getcolumntype(zval **rv, zval **result_handle, long column_index, INTERNAL_FUNCTION_PARAMETERS)
-{
- /* returns column-type as string on success or 0 as long on failure */
- int number_of_arguments=2;
- zval **arguments[2];
- zval *zval_column_index;
- zval *returned_zval=NULL;
-
- MAKE_STD_ZVAL(zval_column_index);
- /* dbx uses 0-based column-indices, oci8 uses 1-based indices... */
- ZVAL_LONG(zval_column_index, column_index+1);
- arguments[0]=result_handle;
- arguments[1]=&zval_column_index;
- dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "oci_field_type", &returned_zval, number_of_arguments, arguments);
- /* oci_field_type returns a string??? */
- if (!returned_zval || Z_TYPE_P(returned_zval)!=IS_STRING) {
- if (returned_zval) zval_ptr_dtor(&returned_zval);
- FREE_ZVAL(zval_column_index);
- return 0;
- }
- FREE_ZVAL(zval_column_index);
-
- MOVE_RETURNED_TO_RV(rv, returned_zval);
- return 1;
-}
-
-int dbx_oci8_getrow(zval **rv, zval **result_handle, long row_number, INTERNAL_FUNCTION_PARAMETERS)
-{
- /* returns array[0..columncount-1] as strings on success or 0 as long on failure */
- int number_of_arguments=2;
- zval **arguments[2];
- zval *zval_resulttype=NULL;
- zval *returned_zval=NULL;
-
- MAKE_STD_ZVAL(zval_resulttype);
- ZVAL_LONG(zval_resulttype, OCI_NUM | OCI_RETURN_NULLS | OCI_RETURN_LOBS); /* no ASSOC, dbx handles that part */
- arguments[0]=result_handle;
- arguments[1]=&zval_resulttype;
- dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "oci_fetch_array", &returned_zval, number_of_arguments, arguments);
- if (!returned_zval || Z_TYPE_P(returned_zval)!=IS_ARRAY) {
- if (returned_zval) zval_ptr_dtor(&returned_zval);
- FREE_ZVAL(zval_resulttype);
- return 0;
- }
- FREE_ZVAL(zval_resulttype);
- MOVE_RETURNED_TO_RV(rv, returned_zval);
- return 1;
-}
-
-int dbx_oci8_error(zval **rv, zval **dbx_handle, INTERNAL_FUNCTION_PARAMETERS)
-{
- /* returns string */
- /* OCIError needs a statement handle most of the times, and I can only provide */
- /* a db-handle which is only needed some of the time. For now, I have disabled */
- /* the dbx_error for the oci8 extension */
- int number_of_arguments=1;
- zval **arguments[1];
- zval *returned_zval=NULL;
- zval *returned_message_zval=NULL;
- arguments[0]=dbx_handle;
- if (!dbx_handle) number_of_arguments=0;
- dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "oci_error", &returned_zval, number_of_arguments, arguments);
- /* oci_error should returns an assoc array containing code & message, dbx needs the message */
- if (!returned_zval || Z_TYPE_P(returned_zval)!=IS_ARRAY) {
- if (returned_zval) zval_ptr_dtor(&returned_zval);
- return 0;
- }
- /* get the messagestring here */
- if (zend_hash_find(Z_ARRVAL_P(returned_zval), "message", strlen("message")+1, (void **) &returned_message_zval)==FAILURE) {
- /* oops! no msg? */
- zval_ptr_dtor(&returned_zval);
- return 0;
- }
- MOVE_RETURNED_TO_RV(rv, returned_message_zval);
- zval_ptr_dtor(&returned_zval);
- return 1;
-}
-
-int dbx_oci8_esc(zval **rv, zval **dbx_handle, zval **string, INTERNAL_FUNCTION_PARAMETERS)
-{
- /* returns escaped string */
- /* replace ' with '' */
- char * str;
- int len;
- char * tmpstr;
- int tmplen;
-
- if (Z_STRLEN_PP(string) == 0) {
- ZVAL_EMPTY_STRING(*rv);
- return 1;
- }
- tmpstr = estrdup(Z_STRVAL_PP(string));
- tmplen = Z_STRLEN_PP(string);
- /* php_str_to_str uses a smart_str that allocates memory */
- /* this memory must be freed or passed on to rv */
- str = php_str_to_str(tmpstr, tmplen, "'", 1, "''", 2, &len);
- efree(tmpstr);
-
- ZVAL_STRINGL(*rv, str, len, 0);
-
- return 1;
-}
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- */
diff --git a/ext/dbx/dbx_oci8.h b/ext/dbx/dbx_oci8.h
deleted file mode 100644
index 2aaeb807af..0000000000
--- a/ext/dbx/dbx_oci8.h
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 The PHP Group |
- +----------------------------------------------------------------------+
- | dbx module version 1.0 |
- +----------------------------------------------------------------------+
- | Copyright (c) 2001-2003 Guidance Rotterdam BV |
- +----------------------------------------------------------------------+
- | 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 : Marc Boeren <marc@guidance.nl> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifndef ZEND_DBX_OCI8_H
-#define ZEND_DBX_OCI8_H
-
-#ifndef INIT_FUNC_ARGS
-#include "zend_modules.h"
-#endif
-
-#include "php.h"
-
-int dbx_oci8_connect(zval **rv, zval **host, zval **db, zval **username, zval **password, INTERNAL_FUNCTION_PARAMETERS);
- /* returns connection handle as resource on success or 0 as long on failure */
-int dbx_oci8_pconnect(zval **rv, zval **host, zval **db, zval **username, zval **password, INTERNAL_FUNCTION_PARAMETERS);
- /* returns persistent connection handle as resource on success or 0 as long on failure */
-int dbx_oci8_close(zval **rv, zval **dbx_handle, INTERNAL_FUNCTION_PARAMETERS);
- /* returns 1 as long on success or 0 as long on failure */
-int dbx_oci8_query(zval **rv, zval **dbx_handle, zval **db_name, zval **sql_statement, INTERNAL_FUNCTION_PARAMETERS);
- /* returns 1 as long or a result identifier as resource on success or 0 as long on failure */
-int dbx_oci8_getcolumncount(zval **rv, zval **result_handle, INTERNAL_FUNCTION_PARAMETERS);
- /* returns column-count as long on success or 0 as long on failure */
-int dbx_oci8_getcolumnname(zval **rv, zval **result_handle, long column_index, INTERNAL_FUNCTION_PARAMETERS);
- /* returns column-name as string on success or 0 as long on failure */
-int dbx_oci8_getcolumntype(zval **rv, zval **result_handle, long column_index, INTERNAL_FUNCTION_PARAMETERS);
- /* returns column-type as string on success or 0 as long on failure */
-int dbx_oci8_getrow(zval **rv, zval **result_handle, long row_number, INTERNAL_FUNCTION_PARAMETERS);
- /* returns array[0..columncount-1] as strings on success or 0 as long on failure */
-int dbx_oci8_error(zval **rv, zval **dbx_handle, INTERNAL_FUNCTION_PARAMETERS);
- /* returns string */
-int dbx_oci8_esc(zval **rv, zval **dbx_handle, zval **string, INTERNAL_FUNCTION_PARAMETERS);
- /* returns escaped string */
-
-#endif /* ZEND_DBX_OCI8_H */
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- */
diff --git a/ext/dbx/dbx_odbc.c b/ext/dbx/dbx_odbc.c
deleted file mode 100644
index ee5ffa2971..0000000000
--- a/ext/dbx/dbx_odbc.c
+++ /dev/null
@@ -1,301 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 The PHP Group |
- +----------------------------------------------------------------------+
- | dbx module version 1.0 |
- +----------------------------------------------------------------------+
- | Copyright (c) 2001-2003 Guidance Rotterdam BV |
- +----------------------------------------------------------------------+
- | 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 : Marc Boeren <marc@guidance.nl> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#include "dbx.h"
-#include "dbx_odbc.h"
-
-#define ODBC_ASSOC 1
-#define ODBC_NUM 2
-
-int dbx_odbc_connect(zval **rv, zval **host, zval **db, zval **username, zval **password, INTERNAL_FUNCTION_PARAMETERS)
-{
- /* returns connection handle as resource on success or 0 as long on failure */
- int number_of_arguments=3;
- zval **arguments[3];
- zval *returned_zval=NULL;
-
- arguments[0]=db;
- arguments[1]=username;
- arguments[2]=password;
- dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "odbc_connect", &returned_zval, number_of_arguments, arguments);
- if (!returned_zval || Z_TYPE_P(returned_zval)!=IS_RESOURCE) {
- if (returned_zval) zval_ptr_dtor(&returned_zval);
- return 0;
- }
- MOVE_RETURNED_TO_RV(rv, returned_zval);
- return 1;
-}
-
-int dbx_odbc_pconnect(zval **rv, zval **host, zval **db, zval **username, zval **password, INTERNAL_FUNCTION_PARAMETERS)
-{
- /* returns connection handle as resource on success or 0 as long on failure */
- int number_of_arguments=3;
- zval **arguments[3];
- zval *returned_zval=NULL;
-
- arguments[0]=db;
- arguments[1]=username;
- arguments[2]=password;
- dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "odbc_pconnect", &returned_zval, number_of_arguments, arguments);
- if (!returned_zval || Z_TYPE_P(returned_zval)!=IS_RESOURCE) {
- if (returned_zval) zval_ptr_dtor(&returned_zval);
- return 0;
- }
- MOVE_RETURNED_TO_RV(rv, returned_zval);
- return 1;
-}
-
-int dbx_odbc_close(zval **rv, zval **dbx_handle, INTERNAL_FUNCTION_PARAMETERS)
-{
- /* returns 1 as long on success or 0 as long on failure */
- int number_of_arguments=1;
- zval **arguments[1];
- zval *returned_zval=NULL;
-
- int actual_resource_type;
- void *resource;
- resource = zend_list_find(Z_LVAL_PP(dbx_handle), &actual_resource_type);
- if (!resource) {
- return 0;
- }
-
- arguments[0]=dbx_handle;
- dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "odbc_close", &returned_zval, number_of_arguments, arguments);
-
- if (!returned_zval || Z_TYPE_P(returned_zval)!=IS_NULL) {
- if (returned_zval) zval_ptr_dtor(&returned_zval);
- return 0;
- }
- convert_to_long_ex(&returned_zval);
- Z_LVAL_P(returned_zval)=1;
- MOVE_RETURNED_TO_RV(rv, returned_zval);
- return 1;
-}
-
-int dbx_odbc_query(zval **rv, zval **dbx_handle, zval **db_name, zval **sql_statement, INTERNAL_FUNCTION_PARAMETERS)
-{
- /* returns 1 as long or a result identifier as resource on success or 0 as long on failure */
- int number_of_arguments=2;
- zval **arguments[2];
- zval *queryresult_zval=NULL;
- zval *num_fields_zval=NULL;
-
- /* db_name is not used in this function */
- arguments[0]=dbx_handle;
- arguments[1]=sql_statement;
- dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "odbc_exec", &queryresult_zval, number_of_arguments, arguments);
- /* odbc_query returns a bool for failure, or a result_identifier for success */
- if (!queryresult_zval || Z_TYPE_P(queryresult_zval)!=IS_RESOURCE) {
- if (queryresult_zval) zval_ptr_dtor(&queryresult_zval);
- return 0;
- }
- MAKE_STD_ZVAL(num_fields_zval);
- ZVAL_LONG(num_fields_zval, 0);
- if (!dbx_odbc_getcolumncount(&num_fields_zval, &queryresult_zval, INTERNAL_FUNCTION_PARAM_PASSTHRU)) {
- FREE_ZVAL(num_fields_zval);
- if (queryresult_zval) zval_ptr_dtor(&queryresult_zval);
- return 0;
- }
- if (Z_LVAL_P(num_fields_zval)==0) {
- Z_TYPE_PP(rv)=IS_BOOL;
- Z_LVAL_PP(rv)=1; /* success, but no data */
- FREE_ZVAL(num_fields_zval);
- if (queryresult_zval) zval_ptr_dtor(&queryresult_zval);
- return 1;
- }
- FREE_ZVAL(num_fields_zval);
- MOVE_RETURNED_TO_RV(rv, queryresult_zval);
- return 1;
-}
-
-int dbx_odbc_getcolumncount(zval **rv, zval **result_handle, INTERNAL_FUNCTION_PARAMETERS)
-{
- /* returns column-count as long on success or 0 as long on failure */
- int number_of_arguments=1;
- zval **arguments[1];
- zval *returned_zval=NULL;
-
- arguments[0]=result_handle;
- dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "odbc_num_fields", &returned_zval, number_of_arguments, arguments);
- if (!returned_zval || Z_TYPE_P(returned_zval)!=IS_LONG || Z_LVAL_P(returned_zval)<0) {
- if (returned_zval) zval_ptr_dtor(&returned_zval);
- return 0;
- }
- MOVE_RETURNED_TO_RV(rv, returned_zval);
- return 1;
-}
-
-int dbx_odbc_getcolumnname(zval **rv, zval **result_handle, long column_index, INTERNAL_FUNCTION_PARAMETERS)
-{
- /* returns column-name as string on success or 0 as long on failure */
- int number_of_arguments=2;
- zval **arguments[2];
- zval *zval_column_index;
- zval *returned_zval=NULL;
-
- MAKE_STD_ZVAL(zval_column_index);
- ZVAL_LONG(zval_column_index, column_index+1);
- arguments[0]=result_handle;
- arguments[1]=&zval_column_index;
- dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "odbc_field_name", &returned_zval, number_of_arguments, arguments);
- /* odbc_field_name returns a string */
- if (!returned_zval || Z_TYPE_P(returned_zval)!=IS_STRING) {
- if (returned_zval) zval_ptr_dtor(&returned_zval);
- FREE_ZVAL(zval_column_index);
- return 0;
- }
- FREE_ZVAL(zval_column_index);
- MOVE_RETURNED_TO_RV(rv, returned_zval);
- return 1;
-}
-
-int dbx_odbc_getcolumntype(zval **rv, zval **result_handle, long column_index, INTERNAL_FUNCTION_PARAMETERS)
-{
- /* returns column-type as string on success or 0 as long on failure */
- int number_of_arguments=2;
- zval **arguments[2];
- zval *zval_column_index;
- zval *returned_zval=NULL;
-
- MAKE_STD_ZVAL(zval_column_index);
- ZVAL_LONG(zval_column_index, column_index+1);
- arguments[0]=result_handle;
- arguments[1]=&zval_column_index;
- dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "odbc_field_type", &returned_zval, number_of_arguments, arguments);
- /* odbc_field_name returns a string */
- if (!returned_zval || Z_TYPE_P(returned_zval)!=IS_STRING) {
- if (returned_zval) zval_ptr_dtor(&returned_zval);
- FREE_ZVAL(zval_column_index);
- return 0;
- }
- FREE_ZVAL(zval_column_index);
-
- MOVE_RETURNED_TO_RV(rv, returned_zval);
- return 1;
-}
-
-int dbx_odbc_getrow(zval **rv, zval **result_handle, long row_number, INTERNAL_FUNCTION_PARAMETERS)
-{
- /* returns array[0..columncount-1] as strings on success or 0 as long on failure */
- int number_of_arguments;
- zval **arguments[2];
- zval *num_fields_zval=NULL;
- zval *fetch_row_result_zval=NULL;
- zval *field_result_zval=NULL;
- zval *field_index_zval;
- zval *returned_zval=NULL;
- long field_index;
- long field_count=-1;
-
- /* get # fields */
- MAKE_STD_ZVAL(num_fields_zval);
- ZVAL_LONG(num_fields_zval, 0);
- if (!dbx_odbc_getcolumncount(&num_fields_zval, result_handle, INTERNAL_FUNCTION_PARAM_PASSTHRU)) {
- return 0;
- }
- field_count=Z_LVAL_P(num_fields_zval);
- FREE_ZVAL(num_fields_zval);
- /* fetch row */
- number_of_arguments=1;
- arguments[0]=result_handle;
- dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "odbc_fetch_row", &fetch_row_result_zval, number_of_arguments, arguments);
- if (!fetch_row_result_zval || Z_TYPE_P(fetch_row_result_zval)!=IS_BOOL) {
- if (fetch_row_result_zval) zval_ptr_dtor(&fetch_row_result_zval);
- return 0;
- }
- if (Z_LVAL_P(fetch_row_result_zval)==0) {
- Z_TYPE_PP(rv)=IS_LONG;
- Z_LVAL_PP(rv)=0; /* ok, no more rows */
- zval_ptr_dtor(&fetch_row_result_zval);
- return 0;
- }
- zval_ptr_dtor(&fetch_row_result_zval);
- /* fill array with field results... */
- MAKE_STD_ZVAL(returned_zval);
- array_init(returned_zval);
- MAKE_STD_ZVAL(field_index_zval);
- ZVAL_LONG(field_index_zval, 0);
- number_of_arguments=2;
- for (field_index=0; field_index<field_count; ++field_index) {
- ZVAL_LONG(field_index_zval, field_index+1);
- arguments[0]=result_handle;
- arguments[1]=&field_index_zval;
- dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "odbc_result", &field_result_zval, number_of_arguments, arguments);
- zend_hash_index_update(Z_ARRVAL_P(returned_zval), field_index, (void *)&(field_result_zval), sizeof(zval *), NULL);
- }
- FREE_ZVAL(field_index_zval);
-
- MOVE_RETURNED_TO_RV(rv, returned_zval);
- return 1;
-}
-
-int dbx_odbc_error(zval **rv, zval **dbx_handle, INTERNAL_FUNCTION_PARAMETERS)
-{
- /* returns string */
- int number_of_arguments=1;
- zval **arguments[1];
- zval *returned_zval=NULL;
-
- arguments[0]=dbx_handle;
- if (!dbx_handle) number_of_arguments=0;
- dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "odbc_errormsg", &returned_zval, number_of_arguments, arguments);
- if (!returned_zval || Z_TYPE_P(returned_zval)!=IS_STRING) {
- if (returned_zval) zval_ptr_dtor(&returned_zval);
- return 0;
- }
- MOVE_RETURNED_TO_RV(rv, returned_zval);
- return 1;
-}
-
-int dbx_odbc_esc(zval **rv, zval **dbx_handle, zval **string, INTERNAL_FUNCTION_PARAMETERS)
-{
- /* returns escaped string */
- /* replace ' with '' */
- char * str;
- int len;
- char * tmpstr;
- int tmplen;
-
- if (Z_STRLEN_PP(string) == 0) {
- ZVAL_EMPTY_STRING(*rv);
- return 1;
- }
- tmpstr = estrdup(Z_STRVAL_PP(string));
- tmplen = Z_STRLEN_PP(string);
- /* php_str_to_str uses a smart_str that allocates memory */
- /* this memory must be freed or passed on to rv */
- str = php_str_to_str(tmpstr, tmplen, "'", 1, "''", 2, &len);
- efree(tmpstr);
-
- ZVAL_STRINGL(*rv, str, len, 0);
-
- return 1;
-}
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- */
diff --git a/ext/dbx/dbx_odbc.h b/ext/dbx/dbx_odbc.h
deleted file mode 100644
index 05cbabdcde..0000000000
--- a/ext/dbx/dbx_odbc.h
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 The PHP Group |
- +----------------------------------------------------------------------+
- | dbx module version 1.0 |
- +----------------------------------------------------------------------+
- | Copyright (c) 2001-2003 Guidance Rotterdam BV |
- +----------------------------------------------------------------------+
- | 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 : Marc Boeren <marc@guidance.nl> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifndef ZEND_DBX_ODBC_H
-#define ZEND_DBX_ODBC_H
-
-#ifndef INIT_FUNC_ARGS
-#include "zend_modules.h"
-#endif
-
-#include "php.h"
-
-int dbx_odbc_connect(zval **rv, zval **host, zval **db, zval **username, zval **password, INTERNAL_FUNCTION_PARAMETERS);
- /* returns connection handle as resource on success or 0 as long on failure */
-int dbx_odbc_pconnect(zval **rv, zval **host, zval **db, zval **username, zval **password, INTERNAL_FUNCTION_PARAMETERS);
- /* returns persisten connection handle as resource on success or 0 as long on failure */
-int dbx_odbc_close(zval **rv, zval **dbx_handle, INTERNAL_FUNCTION_PARAMETERS);
- /* returns 1 as long on success or 0 as long on failure */
-int dbx_odbc_query(zval **rv, zval **dbx_handle, zval **db_name, zval **sql_statement, INTERNAL_FUNCTION_PARAMETERS);
- /* returns 1 as long or a result identifier as resource on success or 0 as long on failure */
-int dbx_odbc_getcolumncount(zval **rv, zval **result_handle, INTERNAL_FUNCTION_PARAMETERS);
- /* returns column-count as long on success or 0 as long on failure */
-int dbx_odbc_getcolumnname(zval **rv, zval **result_handle, long column_index, INTERNAL_FUNCTION_PARAMETERS);
- /* returns column-name as string on success or 0 as long on failure */
-int dbx_odbc_getcolumntype(zval **rv, zval **result_handle, long column_index, INTERNAL_FUNCTION_PARAMETERS);
- /* returns column-type as string on success or 0 as long on failure */
-int dbx_odbc_getrow(zval **rv, zval **result_handle, long row_number, INTERNAL_FUNCTION_PARAMETERS);
- /* returns array[0..columncount-1] as strings on success or 0 as long on failure */
-int dbx_odbc_error(zval **rv, zval **dbx_handle, INTERNAL_FUNCTION_PARAMETERS);
- /* returns string */
-int dbx_odbc_esc(zval **rv, zval **dbx_handle, zval **string, INTERNAL_FUNCTION_PARAMETERS);
- /* returns escaped string */
-
-#endif /* ZEND_DBX_ODBC_H */
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- */
diff --git a/ext/dbx/dbx_pgsql.c b/ext/dbx/dbx_pgsql.c
deleted file mode 100644
index 18973804de..0000000000
--- a/ext/dbx/dbx_pgsql.c
+++ /dev/null
@@ -1,297 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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 : Rui Hirokawa <hirokawa@php.net> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-#include "dbx.h"
-#include "php_dbx.h"
-#include "dbx_pgsql.h"
-#include <string.h>
-
-#define PGSQL_ASSOC 1<<0
-#define PGSQL_NUM 1<<1
-
-int dbx_pgsql_connect(zval **rv, zval **host, zval **db, zval **username, zval **password, INTERNAL_FUNCTION_PARAMETERS)
-{
- /* returns connection handle as resource on success or 0 as long on failure */
- int nargs=5;
- char *port="5432", *connstring=NULL;
- zval **args[5], *rarg = NULL;
- zval *conn_zval = NULL;
- zval *returned_zval=NULL;
-
- MAKE_STD_ZVAL(conn_zval);
- ZVAL_LONG(conn_zval, 0);
-
- if (Z_STRLEN_PP(username)>0) {
- int len;
-
- len = Z_STRLEN_PP(host)+Z_STRLEN_PP(db)+strlen(port);
- len += Z_STRLEN_PP(username)+Z_STRLEN_PP(password)+45;
- connstring = (char *)emalloc(len+1);
- sprintf(connstring, "host='%s' port='%s' dbname='%s' user='%s' password='%s'",
- Z_STRVAL_PP(host), port, Z_STRVAL_PP(db),
- Z_STRVAL_PP(username), Z_STRVAL_PP(password));
- ZVAL_STRING(conn_zval, connstring, 0);
- args[0] = &conn_zval;
- nargs = 1;
- } else {
- int k;
-
- args[0] = host;
- for (k=1;k<4;k++){
- MAKE_STD_ZVAL(rarg);
- ZVAL_EMPTY_STRING(rarg);
- args[k] = &rarg;
- }
- args[4] = db;
- }
- dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "pg_connect", &returned_zval, nargs, args);
- zval_dtor(conn_zval);
- FREE_ZVAL(conn_zval);
-
- if (!returned_zval || Z_TYPE_P(returned_zval)!=IS_RESOURCE) {
- if (returned_zval) zval_ptr_dtor(&returned_zval);
- return 0;
- }
- MOVE_RETURNED_TO_RV(rv, returned_zval);
- return 1;
-}
-
-int dbx_pgsql_pconnect(zval **rv, zval **host, zval **db, zval **username, zval **password, INTERNAL_FUNCTION_PARAMETERS)
-{
- /* returns persistent connection handle as resource on success or 0 as long on failure */
- int nargs=5;
- char *port="5432", *connstring=NULL;
- zval **args[5], *rarg = NULL;
- zval *conn_zval = NULL;
- zval *returned_zval=NULL;
-
- MAKE_STD_ZVAL(conn_zval);
- ZVAL_LONG(conn_zval, 0);
-
- if (Z_STRLEN_PP(username)>0) {
- int len;
-
- len = Z_STRLEN_PP(host)+Z_STRLEN_PP(db)+strlen(port);
- len += Z_STRLEN_PP(username)+Z_STRLEN_PP(password)+45;
- connstring = (char *)emalloc(len+1);
- sprintf(connstring, "host='%s' port='%s' dbname='%s' user='%s' password='%s'",
- Z_STRVAL_PP(host), port, Z_STRVAL_PP(db),
- Z_STRVAL_PP(username), Z_STRVAL_PP(password));
- ZVAL_STRING(conn_zval, connstring, 0);
- args[0] = &conn_zval;
- nargs = 1;
- } else {
- int k;
-
- args[0] = host;
- for (k=1;k<4;k++){
- MAKE_STD_ZVAL(rarg);
- ZVAL_EMPTY_STRING(rarg);
- args[k] = &rarg;
- }
- args[4] = db;
- }
- dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "pg_pconnect", &returned_zval, nargs, args);
- zval_dtor(conn_zval);
- FREE_ZVAL(conn_zval);
-
- if (!returned_zval || Z_TYPE_P(returned_zval)!=IS_RESOURCE) {
- if (returned_zval) zval_ptr_dtor(&returned_zval);
- return 0;
- }
- MOVE_RETURNED_TO_RV(rv, returned_zval);
- return 1;
-}
-
-int dbx_pgsql_close(zval **rv, zval **dbx_handle, INTERNAL_FUNCTION_PARAMETERS)
-{
- /* returns 1 as long on success or 0 as long on failure */
- int number_of_arguments=1;
- zval **arguments[1];
- zval *returned_zval=NULL;
-
- arguments[0]=dbx_handle;
- dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "pg_close", &returned_zval, number_of_arguments, arguments);
- if (!returned_zval || Z_TYPE_P(returned_zval)!=IS_BOOL) {
- if (returned_zval) zval_ptr_dtor(&returned_zval);
- return 0;
- }
- MOVE_RETURNED_TO_RV(rv, returned_zval);
- return 1;
-}
-
-int dbx_pgsql_query(zval **rv, zval **dbx_handle, zval **db_name, zval **sql_statement, INTERNAL_FUNCTION_PARAMETERS)
-{
- /* returns 1 as long or a result identifier as resource on success
- or 0 as long on failure */
- int nargs=2;
- zval **args[2];
- zval *returned_zval=NULL;
-
- /* db_name is not used in this function */
- args[0]=dbx_handle;
- args[1]=sql_statement;
- dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "pg_query", &returned_zval, nargs, args);
- /* pg_query returns a bool for success or failure,
- or a result_identifier for select statements */
- if (!returned_zval || (Z_TYPE_P(returned_zval)!=IS_BOOL && Z_TYPE_P(returned_zval)!=IS_RESOURCE)) {
- if (returned_zval) zval_ptr_dtor(&returned_zval);
- return 0;
- }
- MOVE_RETURNED_TO_RV(rv, returned_zval);
- return 1;
-}
-
-int dbx_pgsql_getcolumncount(zval **rv, zval **result_handle, INTERNAL_FUNCTION_PARAMETERS)
-{
- /* returns column-count as long on success or 0 as long on failure */
- int number_of_arguments=1;
- zval **arguments[1];
- zval *returned_zval=NULL;
-
- arguments[0]=result_handle;
- dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "pg_num_fields", &returned_zval, number_of_arguments, arguments);
- if (!returned_zval || Z_TYPE_P(returned_zval)!=IS_LONG) {
- if (returned_zval) zval_ptr_dtor(&returned_zval);
- return 0;
- }
- MOVE_RETURNED_TO_RV(rv, returned_zval);
- return 1;
-}
-
-int dbx_pgsql_getcolumnname(zval **rv, zval **result_handle, long column_index, INTERNAL_FUNCTION_PARAMETERS)
-{
- /* returns column-name as string on success or 0 as long on failure */
- int number_of_arguments=2;
- zval **arguments[2];
- zval *zval_column_index;
- zval *returned_zval=NULL;
-
- MAKE_STD_ZVAL(zval_column_index);
- ZVAL_LONG(zval_column_index, column_index);
- arguments[0]=result_handle;
- arguments[1]=&zval_column_index;
- dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "pg_field_name", &returned_zval, number_of_arguments, arguments);
- /* pg_fieldname returns a string */
- if (!returned_zval || Z_TYPE_P(returned_zval)!=IS_STRING) {
- if (returned_zval) zval_ptr_dtor(&returned_zval);
- FREE_ZVAL(zval_column_index);
- return 0;
- }
- FREE_ZVAL(zval_column_index);
- MOVE_RETURNED_TO_RV(rv, returned_zval);
- return 1;
-}
-
-int dbx_pgsql_getcolumntype(zval **rv, zval **result_handle, long column_index, INTERNAL_FUNCTION_PARAMETERS)
-{
- /* returns column-type as string on success or 0 as long on failure */
- int number_of_arguments=2;
- zval **arguments[2];
- zval *zval_column_index;
- zval *returned_zval=NULL;
-
- MAKE_STD_ZVAL(zval_column_index);
- ZVAL_LONG(zval_column_index, column_index);
- arguments[0]=result_handle;
- arguments[1]=&zval_column_index;
- dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "pg_field_type", &returned_zval, number_of_arguments, arguments);
- /* pg_fieldtype returns a string */
- if (!returned_zval || Z_TYPE_P(returned_zval)!=IS_STRING) {
- if (returned_zval) zval_ptr_dtor(&returned_zval);
- FREE_ZVAL(zval_column_index);
- return 0;
- }
- FREE_ZVAL(zval_column_index);
-
- MOVE_RETURNED_TO_RV(rv, returned_zval);
- return 1;
-}
-
-int dbx_pgsql_getrow(zval **rv, zval **result_handle, long row_number, INTERNAL_FUNCTION_PARAMETERS)
-{
- /* returns array[0..columncount-1] as strings on success or 0 as long on failure */
- int number_of_arguments=1;
- zval **arguments[1];
- zval *returned_zval=NULL;
-
- arguments[0]=result_handle;
-
- dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "pg_fetch_array", &returned_zval, number_of_arguments, arguments);
- if (!returned_zval || Z_TYPE_P(returned_zval)!=IS_ARRAY) {
- if (returned_zval) zval_ptr_dtor(&returned_zval);
- return 0;
- }
- MOVE_RETURNED_TO_RV(rv, returned_zval);
- return 1;
-}
-
-int dbx_pgsql_error(zval **rv, zval **dbx_handle, INTERNAL_FUNCTION_PARAMETERS)
-{
- /* returns string */
- int number_of_arguments=1;
- zval **arguments[1];
- zval *returned_zval=NULL;
-
- arguments[0]=dbx_handle;
- if (!dbx_handle) number_of_arguments=0;
- dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "pg_last_error", &returned_zval, number_of_arguments, arguments);
- if (!returned_zval || Z_TYPE_P(returned_zval)!=IS_STRING) {
- if (returned_zval) zval_ptr_dtor(&returned_zval);
- return 0;
- }
- MOVE_RETURNED_TO_RV(rv, returned_zval);
- return 1;
-}
-
-int dbx_pgsql_esc(zval **rv, zval **dbx_handle, zval **string, INTERNAL_FUNCTION_PARAMETERS)
-{
- /* returns escaped string */
- /* replace \ with \\ */
- /* ' with '' */
- char * str;
- int len;
- char * tmpstr;
- int tmplen;
-
- if (Z_STRLEN_PP(string) == 0) {
- ZVAL_EMPTY_STRING(*rv);
- return 1;
- }
- tmpstr = estrdup(Z_STRVAL_PP(string));
- tmplen = Z_STRLEN_PP(string);
- /* php_str_to_str uses a smart_str that allocates memory */
- /* this memory must be freed or passed on to rv */
- str = php_str_to_str(tmpstr, tmplen, "\\", 1, "\\\\", 2, &len);
- efree(tmpstr);
- tmpstr=str; tmplen=len;
- str = php_str_to_str(tmpstr, tmplen, "'", 1, "''", 2, &len);
- efree(tmpstr);
-
- ZVAL_STRINGL(*rv, str, len, 0);
- return 1;
-}
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- */
diff --git a/ext/dbx/dbx_pgsql.h b/ext/dbx/dbx_pgsql.h
deleted file mode 100644
index 11bfa9a7a8..0000000000
--- a/ext/dbx/dbx_pgsql.h
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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 : Rui Hirokawa <hirokawa@php.net> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-#ifndef ZEND_DBX_PGSQL_H
-#define ZEND_DBX_PGSQL_H
-
-#ifndef INIT_FUNC_ARGS
-#include "zend_modules.h"
-#endif
-
-#include "php.h"
-
-int dbx_pgsql_connect(zval **rv, zval **host, zval **db, zval **username, zval **password, INTERNAL_FUNCTION_PARAMETERS);
- /* returns connection handle as resource on success or 0 as long on failure */
-int dbx_pgsql_pconnect(zval **rv, zval **host, zval **db, zval **username, zval **password, INTERNAL_FUNCTION_PARAMETERS);
- /* returns persistent connection handle as resource on success or 0 as long on failure */
-int dbx_pgsql_close(zval **rv, zval **dbx_handle, INTERNAL_FUNCTION_PARAMETERS);
- /* returns 1 as long on success or 0 as long on failure */
-int dbx_pgsql_query(zval **rv, zval **dbx_handle, zval **db_name, zval **sql_statement, INTERNAL_FUNCTION_PARAMETERS);
- /* returns 1 as long or a result identifier as resource on success or 0 as long on failure */
-int dbx_pgsql_getcolumncount(zval **rv, zval **result_handle, INTERNAL_FUNCTION_PARAMETERS);
- /* returns column-count as long on success or 0 as long on failure */
-int dbx_pgsql_getcolumnname(zval **rv, zval **result_handle, long column_index, INTERNAL_FUNCTION_PARAMETERS);
- /* returns column-name as string on success or 0 as long on failure */
-int dbx_pgsql_getcolumntype(zval **rv, zval **result_handle, long column_index, INTERNAL_FUNCTION_PARAMETERS);
- /* returns column-type as string on success or 0 as long on failure */
-int dbx_pgsql_getrow(zval **rv, zval **result_handle, long row_number, INTERNAL_FUNCTION_PARAMETERS);
- /* returns array[0..columncount-1] as strings on success or 0 as long on failure */
-int dbx_pgsql_error(zval **rv, zval **dbx_handle, INTERNAL_FUNCTION_PARAMETERS);
- /* returns string */
-int dbx_pgsql_esc(zval **rv, zval **dbx_handle, zval **string, INTERNAL_FUNCTION_PARAMETERS);
- /* returns escaped string */
-
-#endif /* ZEND_DBX_PGSQL_H */
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- */
diff --git a/ext/dbx/dbx_sqlite.c b/ext/dbx/dbx_sqlite.c
deleted file mode 100644
index 105156cfba..0000000000
--- a/ext/dbx/dbx_sqlite.c
+++ /dev/null
@@ -1,273 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 The PHP Group |
- +----------------------------------------------------------------------+
- | dbx module version 1.0 |
- +----------------------------------------------------------------------+
- | Copyright (c) 2001-2003 Guidance Rotterdam BV |
- +----------------------------------------------------------------------+
- | 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 : Marc Boeren <marc@guidance.nl> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#include "dbx.h"
-#include "dbx_sqlite.h"
-
-#define SQLITE_ASSOC 1
-#define SQLITE_NUM 2
-#define SQLITE_BOTH 3
-
-int dbx_sqlite_connect(zval **rv, zval **host, zval **db, zval **username, zval **password, INTERNAL_FUNCTION_PARAMETERS)
-{
- /* returns connection handle as resource on success or 0 as long on failure */
- int number_of_arguments=1;
- zval **arguments[1];
- zval *returned_zval=NULL;
-
- arguments[0]=db;
- dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "sqlite_open", &returned_zval, number_of_arguments, arguments);
- if (!returned_zval || Z_TYPE_P(returned_zval)!=IS_RESOURCE) {
- if (returned_zval) zval_ptr_dtor(&returned_zval);
- return 0;
- }
-
- MOVE_RETURNED_TO_RV(rv, returned_zval);
- return 1;
-}
-
-int dbx_sqlite_pconnect(zval **rv, zval **host, zval **db, zval **username, zval **password, INTERNAL_FUNCTION_PARAMETERS)
-{
- /* returns persistent connection handle as resource on success or 0 as long on failure */
- int number_of_arguments=1;
- zval **arguments[1];
- zval *returned_zval=NULL;
-
- arguments[0]=db;
- dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "sqlite_popen", &returned_zval, number_of_arguments, arguments);
- if (!returned_zval || Z_TYPE_P(returned_zval)!=IS_RESOURCE) {
- if (returned_zval) zval_ptr_dtor(&returned_zval);
- return 0;
- }
- MOVE_RETURNED_TO_RV(rv, returned_zval);
- return 1;
-}
-
-int dbx_sqlite_close(zval **rv, zval **dbx_handle, INTERNAL_FUNCTION_PARAMETERS)
-{
- /* returns 1 as long on success or 0 as long on failure */
- int number_of_arguments=1;
- zval **arguments[1];
- zval *returned_zval=NULL;
-
- arguments[0]=dbx_handle;
- dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "sqlite_close", &returned_zval, number_of_arguments, arguments);
- if (!returned_zval || Z_TYPE_P(returned_zval)!=IS_BOOL) {
- if (returned_zval) zval_ptr_dtor(&returned_zval);
- return 0;
- }
- MOVE_RETURNED_TO_RV(rv, returned_zval);
- return 1;
-}
-
-int dbx_sqlite_query(zval **rv, zval **dbx_handle, zval **db_name, zval **sql_statement, INTERNAL_FUNCTION_PARAMETERS)
-{
- /* returns 1 as long or a result identifier as resource on success or 0 as long on failure */
- int number_of_arguments=2;
- zval **arguments[2];
- zval *returned_zval=NULL;
-
- number_of_arguments=2;
- arguments[0]=dbx_handle;
- arguments[1]=sql_statement;
- dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "sqlite_query", &returned_zval, number_of_arguments, arguments);
- /* sqlite_query returns a bool for success or failure, or a result_identifier for select statements */
- if (!returned_zval || (Z_TYPE_P(returned_zval)!=IS_BOOL && Z_TYPE_P(returned_zval)!=IS_RESOURCE)) {
- if (returned_zval) zval_ptr_dtor(&returned_zval);
- return 0;
- }
- MOVE_RETURNED_TO_RV(rv, returned_zval);
- return 1;
-}
-
-int dbx_sqlite_getcolumncount(zval **rv, zval **result_handle, INTERNAL_FUNCTION_PARAMETERS)
-{
- /* returns column-count as long on success or 0 as long on failure */
- int number_of_arguments=1;
- zval **arguments[1];
- zval *returned_zval=NULL;
-
- arguments[0]=result_handle;
- dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "sqlite_num_fields", &returned_zval, number_of_arguments, arguments);
- if (!returned_zval || Z_TYPE_P(returned_zval)!=IS_LONG) {
- if (returned_zval) zval_ptr_dtor(&returned_zval);
- return 0;
- }
- MOVE_RETURNED_TO_RV(rv, returned_zval);
- return 1;
-}
-
-int dbx_sqlite_getcolumnname(zval **rv, zval **result_handle, long column_index, INTERNAL_FUNCTION_PARAMETERS)
-{
- /* returns column-name as string on success or 0 as long on failure */
- int number_of_arguments=2;
- zval **arguments[2];
- zval *zval_column_index;
- zval *returned_zval=NULL;
-
- MAKE_STD_ZVAL(zval_column_index);
- ZVAL_LONG(zval_column_index, column_index);
- arguments[0]=result_handle;
- arguments[1]=&zval_column_index;
- dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "sqlite_field_name", &returned_zval, number_of_arguments, arguments);
- /* sqlite_field_name returns a string */
- if (!returned_zval || Z_TYPE_P(returned_zval)!=IS_STRING) {
- if (returned_zval) zval_ptr_dtor(&returned_zval);
- FREE_ZVAL(zval_column_index);
- return 0;
- }
- FREE_ZVAL(zval_column_index);
- MOVE_RETURNED_TO_RV(rv, returned_zval);
- return 1;
-}
-
-int dbx_sqlite_getcolumntype(zval **rv, zval **result_handle, long column_index, INTERNAL_FUNCTION_PARAMETERS)
-{
- /* returns column-type as string on success or 0 as long on failure */
- /*int number_of_arguments=2;
- zval **arguments[2];
- zval *zval_column_index;
- */
- zval *returned_zval=NULL;
-
- /*
- MAKE_STD_ZVAL(zval_column_index);
- ZVAL_LONG(zval_column_index, column_index);
- arguments[0]=result_handle;
- arguments[1]=&zval_column_index;
- dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "sqlite_field_type", &returned_zval, number_of_arguments, arguments);
- */
- /* sqlite_field_type returns a string */
- /*
- if (!returned_zval || Z_TYPE_P(returned_zval)!=IS_STRING) {
- if (returned_zval) zval_ptr_dtor(&returned_zval);
- FREE_ZVAL(zval_column_index);
- return 0;
- }
- FREE_ZVAL(zval_column_index);
- */
- MAKE_STD_ZVAL(returned_zval);
- ZVAL_STRING(returned_zval, "string", 1); /* fake field type */
-
- MOVE_RETURNED_TO_RV(rv, returned_zval);
- return 1;
-}
-
-int dbx_sqlite_getrow(zval **rv, zval **result_handle, long row_number, INTERNAL_FUNCTION_PARAMETERS)
-{
- /* returns array[0..columncount-1] as strings on success or 0 as long on failure */
- int number_of_arguments=2;
- zval **arguments[2];
- zval *zval_resulttype=NULL;
- zval *returned_zval=NULL;
-
- MAKE_STD_ZVAL(zval_resulttype);
- ZVAL_LONG(zval_resulttype, SQLITE_NUM);
- arguments[0]=result_handle;
- arguments[1]=&zval_resulttype;
- /* optional boolean third parameter 'decode_binary' skipped */
- dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "sqlite_fetch_array", &returned_zval, number_of_arguments, arguments);
- if (!returned_zval || Z_TYPE_P(returned_zval)!=IS_ARRAY) {
- if (returned_zval) zval_ptr_dtor(&returned_zval);
- FREE_ZVAL(zval_resulttype);
- return 0;
- }
- FREE_ZVAL(zval_resulttype);
- MOVE_RETURNED_TO_RV(rv, returned_zval);
- return 1;
-}
-
-int dbx_sqlite_error(zval **rv, zval **dbx_handle, INTERNAL_FUNCTION_PARAMETERS)
-{
- /* returns string */
- int number_of_arguments=1;
- zval **arguments[1];
- zval *returned_zval_errcode=NULL;
- zval *returned_zval=NULL;
-
- arguments[0]=dbx_handle;
- if (!dbx_handle) number_of_arguments=0;
- dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "sqlite_last_error", &returned_zval_errcode, number_of_arguments, arguments);
- if (!returned_zval_errcode || Z_TYPE_P(returned_zval_errcode)!=IS_LONG) {
- if (returned_zval_errcode) zval_ptr_dtor(&returned_zval_errcode);
- return 0;
- }
- if (Z_LVAL_P(returned_zval_errcode) == 0) {
- zval_ptr_dtor(&returned_zval_errcode);
- ZVAL_EMPTY_STRING(*rv);
- return 1;
- }
- arguments[0]=&returned_zval_errcode;
- dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "sqlite_error_string", &returned_zval, number_of_arguments, arguments);
- zval_ptr_dtor(&returned_zval_errcode);
- if (!returned_zval || Z_TYPE_P(returned_zval)!=IS_STRING) {
- if (returned_zval) zval_ptr_dtor(&returned_zval);
- return 0;
- }
-
- MOVE_RETURNED_TO_RV(rv, returned_zval);
- return 1;
-}
-
-int dbx_sqlite_esc(zval **rv, zval **dbx_handle, zval **string, INTERNAL_FUNCTION_PARAMETERS)
-{
- /* returns escaped string */
- int number_of_arguments=1;
- zval **arguments[1];
- zval *returned_zval=NULL;
- char * str;
- int len;
- char * tmpstr;
- int tmplen;
-
- if (Z_STRLEN_PP(string) == 0) {
- ZVAL_EMPTY_STRING(*rv);
- return 1;
- }
- arguments[0]=string;
- dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "sqlite_escape_string", &returned_zval, number_of_arguments, arguments);
- if (!returned_zval || Z_TYPE_P(returned_zval)!=IS_STRING) {
- if (returned_zval) zval_ptr_dtor(&returned_zval);
- /* sqlite_escape_string failed, just do my own escaping then */
- /* replace ' with '' */
- tmpstr = estrdup(Z_STRVAL_PP(string));
- tmplen = Z_STRLEN_PP(string);
- /* php_str_to_str uses a smart_str that allocates memory */
- /* this memory must be freed or passed on to rv */
- str = php_str_to_str(tmpstr, tmplen, "'", 1, "''", 2, &len);
- efree(tmpstr);
-
- ZVAL_STRINGL(*rv, str, len, 0);
- return 1;
- }
- MOVE_RETURNED_TO_RV(rv, returned_zval);
- return 1;
-}
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- */
diff --git a/ext/dbx/dbx_sqlite.h b/ext/dbx/dbx_sqlite.h
deleted file mode 100644
index e3b8ccedeb..0000000000
--- a/ext/dbx/dbx_sqlite.h
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 The PHP Group |
- +----------------------------------------------------------------------+
- | dbx module version 1.0 |
- +----------------------------------------------------------------------+
- | Copyright (c) 2001-2003 Guidance Rotterdam BV |
- +----------------------------------------------------------------------+
- | 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 : Marc Boeren <marc@guidance.nl> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifndef ZEND_DBX_SQLITE_H
-#define ZEND_DBX_SQLITE_H
-
-#ifndef INIT_FUNC_ARGS
-#include "zend_modules.h"
-#endif
-
-#include "php.h"
-
-int dbx_sqlite_connect(zval **rv, zval **host, zval **db, zval **username, zval **password, INTERNAL_FUNCTION_PARAMETERS);
- /* returns connection handle as resource on success or 0 as long on failure */
-int dbx_sqlite_pconnect(zval **rv, zval **host, zval **db, zval **username, zval **password, INTERNAL_FUNCTION_PARAMETERS);
- /* returns persistent connection handle as resource on success or 0 as long on failure */
-int dbx_sqlite_close(zval **rv, zval **dbx_handle, INTERNAL_FUNCTION_PARAMETERS);
- /* returns 1 as long on success or 0 as long on failure */
-int dbx_sqlite_query(zval **rv, zval **dbx_handle, zval **db_name, zval **sql_statement, INTERNAL_FUNCTION_PARAMETERS);
- /* returns 1 as long or a result identifier as resource on success or 0 as long on failure */
-int dbx_sqlite_getcolumncount(zval **rv, zval **result_handle, INTERNAL_FUNCTION_PARAMETERS);
- /* returns column-count as long on success or 0 as long on failure */
-int dbx_sqlite_getcolumnname(zval **rv, zval **result_handle, long column_index, INTERNAL_FUNCTION_PARAMETERS);
- /* returns column-name as string on success or 0 as long on failure */
-int dbx_sqlite_getcolumntype(zval **rv, zval **result_handle, long column_index, INTERNAL_FUNCTION_PARAMETERS);
- /* returns column-type as string on success or 0 as long on failure */
-int dbx_sqlite_getrow(zval **rv, zval **result_handle, long row_number, INTERNAL_FUNCTION_PARAMETERS);
- /* returns array[0..columncount-1] as strings on success or 0 as long on failure */
-int dbx_sqlite_error(zval **rv, zval **dbx_handle, INTERNAL_FUNCTION_PARAMETERS);
- /* returns string */
-int dbx_sqlite_esc(zval **rv, zval **dbx_handle, zval **string, INTERNAL_FUNCTION_PARAMETERS);
- /* returns escaped string */
-
-#endif /* ZEND_DBX_SQLITE_H */
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- */
diff --git a/ext/dbx/dbx_sybasect.c b/ext/dbx/dbx_sybasect.c
deleted file mode 100644
index 9f5994392b..0000000000
--- a/ext/dbx/dbx_sybasect.c
+++ /dev/null
@@ -1,307 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 The PHP Group |
- +----------------------------------------------------------------------+
- | dbx module version 1.0 |
- +----------------------------------------------------------------------+
- | Copyright (c) 2001-2003 Guidance Rotterdam BV |
- +----------------------------------------------------------------------+
- | 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 : Marc Boeren <marc@guidance.nl> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#include "dbx.h"
-#include "dbx_sybasect.h"
-
-#define MYSQL_ASSOC 1<<0
-#define MYSQL_NUM 1<<1
-
-int dbx_sybasect_connect(zval **rv, zval **host, zval **db, zval **username, zval **password, INTERNAL_FUNCTION_PARAMETERS)
-{
- /* returns connection handle as resource on success or 0 as long on failure */
- int number_of_arguments=3;
- zval **arguments[3];
- zval *returned_zval=NULL;
- zval *select_db_zval=NULL;
-
- arguments[0]=host;
- arguments[1]=username;
- arguments[2]=password;
- dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "sybase_connect", &returned_zval, number_of_arguments, arguments);
- if (!returned_zval || Z_TYPE_P(returned_zval)!=IS_RESOURCE) {
- if (returned_zval) zval_ptr_dtor(&returned_zval);
- return 0;
- }
-
- number_of_arguments=2;
- arguments[0]=db;
- arguments[1]=&returned_zval;
- dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "sybase_select_db", &select_db_zval, number_of_arguments, arguments);
- if (!select_db_zval || (Z_TYPE_P(select_db_zval)==IS_BOOL && Z_LVAL_P(select_db_zval)==0) ) {
- if (select_db_zval) zval_ptr_dtor(&select_db_zval);
- /* also close connection */
- number_of_arguments=1;
- arguments[0]=&returned_zval;
- zend_list_addref(Z_LVAL_P(returned_zval));
- dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "sybase_close", &select_db_zval, number_of_arguments, arguments);
- if (select_db_zval) zval_ptr_dtor(&select_db_zval);
- zval_ptr_dtor(&returned_zval);
- return 0;
- }
- zval_ptr_dtor(&select_db_zval);
-
- MOVE_RETURNED_TO_RV(rv, returned_zval);
- return 1;
-}
-
-int dbx_sybasect_pconnect(zval **rv, zval **host, zval **db, zval **username, zval **password, INTERNAL_FUNCTION_PARAMETERS)
-{
- /* returns persistent connection handle as resource on success or 0 as long on failure */
- int number_of_arguments=3;
- zval **arguments[3];
- zval *returned_zval=NULL;
- zval *select_db_zval=NULL;
-
- arguments[0]=host;
- arguments[1]=username;
- arguments[2]=password;
- dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "sybase_pconnect", &returned_zval, number_of_arguments, arguments);
- if (!returned_zval || Z_TYPE_P(returned_zval)!=IS_RESOURCE) {
- if (returned_zval) zval_ptr_dtor(&returned_zval);
- return 0;
- }
-
- number_of_arguments=2;
- arguments[0]=db;
- arguments[1]=&returned_zval;
- dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "sybase_select_db", &select_db_zval, number_of_arguments, arguments);
- if (!select_db_zval || (Z_TYPE_P(select_db_zval)==IS_BOOL && Z_LVAL_P(select_db_zval)==0) ) {
- if (select_db_zval) zval_ptr_dtor(&select_db_zval);
- /* also close connection */
- number_of_arguments=1;
- arguments[0]=&returned_zval;
- zend_list_addref(Z_LVAL_P(returned_zval));
- dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "sybase_close", &select_db_zval, number_of_arguments, arguments);
- if (select_db_zval) zval_ptr_dtor(&select_db_zval);
- zval_ptr_dtor(&returned_zval);
- return 0;
- }
- zval_ptr_dtor(&select_db_zval);
-
- MOVE_RETURNED_TO_RV(rv, returned_zval);
- return 1;
-}
-
-int dbx_sybasect_close(zval **rv, zval **dbx_handle, INTERNAL_FUNCTION_PARAMETERS)
-{
- /* returns 1 as long on success or 0 as long on failure */
- int number_of_arguments=1;
- zval **arguments[1];
- zval *returned_zval=NULL;
-
- arguments[0]=dbx_handle;
- dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "sybase_close", &returned_zval, number_of_arguments, arguments);
- if (!returned_zval || Z_TYPE_P(returned_zval)!=IS_BOOL) {
- if (returned_zval) zval_ptr_dtor(&returned_zval);
- return 0;
- }
- MOVE_RETURNED_TO_RV(rv, returned_zval);
- return 1;
-}
-
-int dbx_sybasect_query(zval **rv, zval **dbx_handle, zval **db_name, zval **sql_statement, INTERNAL_FUNCTION_PARAMETERS)
-{
- /* returns 1 as long or a result identifier as resource on success or 0 as long on failure */
- int number_of_arguments=2;
- zval **arguments[2];
- zval *returned_zval=NULL;
- zval *select_db_zval=NULL;
-
- number_of_arguments=2;
- arguments[0]=db_name;
- arguments[1]=dbx_handle;
- dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "sybase_select_db", &select_db_zval, number_of_arguments, arguments);
- zval_ptr_dtor(&select_db_zval);
-
- number_of_arguments=2;
- arguments[0]=sql_statement;
- arguments[1]=dbx_handle;
- dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "sybase_query", &returned_zval, number_of_arguments, arguments);
- /* sybase_query returns a bool for success or failure, or a result_identifier for select statements */
- if (!returned_zval || (Z_TYPE_P(returned_zval)!=IS_BOOL && Z_TYPE_P(returned_zval)!=IS_RESOURCE)) {
- if (returned_zval) zval_ptr_dtor(&returned_zval);
- return 0;
- }
- MOVE_RETURNED_TO_RV(rv, returned_zval);
- return 1;
-}
-
-int dbx_sybasect_getcolumncount(zval **rv, zval **result_handle, INTERNAL_FUNCTION_PARAMETERS)
-{
- /* returns column-count as long on success or 0 as long on failure */
- int number_of_arguments=1;
- zval **arguments[1];
- zval *returned_zval=NULL;
-
- arguments[0]=result_handle;
- dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "sybase_num_fields", &returned_zval, number_of_arguments, arguments);
- if (!returned_zval || Z_TYPE_P(returned_zval)!=IS_LONG) {
- if (returned_zval) zval_ptr_dtor(&returned_zval);
- return 0;
- }
- MOVE_RETURNED_TO_RV(rv, returned_zval);
- return 1;
-}
-
-int dbx_sybasect_getcolumnname(zval **rv, zval **result_handle, long column_index, INTERNAL_FUNCTION_PARAMETERS)
-{
- /* returns column-name as string on success or 0 as long on failure */
- int number_of_arguments=2;
- zval **arguments[2];
- zval *zval_column_index;
- zval *returned_zval=NULL;
- zval **zv_name=NULL;
-
- MAKE_STD_ZVAL(zval_column_index);
- ZVAL_LONG(zval_column_index, column_index);
- arguments[0]=result_handle;
- arguments[1]=&zval_column_index;
- dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "sybase_fetch_field", &returned_zval, number_of_arguments, arguments);
- /* sybase_fetch_field returns an object */
- /* we need only the 'name' member here */
- if (!returned_zval || Z_TYPE_P(returned_zval)!=IS_OBJECT) {
- if (returned_zval) zval_ptr_dtor(&returned_zval);
- FREE_ZVAL(zval_column_index);
- return 0;
- }
- if (zend_hash_find(Z_OBJPROP_P(returned_zval), "name", 5, (void **) &zv_name)==FAILURE) {
- zval_ptr_dtor(&returned_zval);
- FREE_ZVAL(zval_column_index);
- return 0;
- }
-
- **rv = **zv_name;
- zval_copy_ctor(*rv);
- zval_ptr_dtor(&returned_zval);
- zval_ptr_dtor(zv_name);
-
- FREE_ZVAL(zval_column_index);
-/* MOVE_RETURNED_TO_RV(rv, returned_zval); */
- return 1;
-}
-
-int dbx_sybasect_getcolumntype(zval **rv, zval **result_handle, long column_index, INTERNAL_FUNCTION_PARAMETERS)
-{
- /* returns column-type as string on success or 0 as long on failure */
- int number_of_arguments=2;
- zval **arguments[2];
- zval *zval_column_index;
- zval *returned_zval=NULL;
- zval **zv_type=NULL;
-
- MAKE_STD_ZVAL(zval_column_index);
- ZVAL_LONG(zval_column_index, column_index);
- arguments[0]=result_handle;
- arguments[1]=&zval_column_index;
- dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "sybase_fetch_field", &returned_zval, number_of_arguments, arguments);
- /* sybase_fetch_field returns an object */
- /* we need only the 'type' member here */
- if (!returned_zval || Z_TYPE_P(returned_zval)!=IS_OBJECT) {
- if (returned_zval) zval_ptr_dtor(&returned_zval);
- FREE_ZVAL(zval_column_index);
- return 0;
- }
- if (zend_hash_find(Z_OBJPROP_P(returned_zval), "type", 5, (void **) &zv_type)==FAILURE) {
- zval_ptr_dtor(&returned_zval);
- FREE_ZVAL(zval_column_index);
- return 0;
- }
-
- **rv = **zv_type;
- zval_copy_ctor(*rv);
- zval_ptr_dtor(&returned_zval);
- zval_ptr_dtor(zv_type);
-
- FREE_ZVAL(zval_column_index);
-/* MOVE_RETURNED_TO_RV(rv, returned_zval); */
- return 1;
-}
-
-int dbx_sybasect_getrow(zval **rv, zval **result_handle, long row_number, INTERNAL_FUNCTION_PARAMETERS)
-{
- /* returns array[0..columncount-1] as strings on success or 0 as long on failure */
- int number_of_arguments=1;
- zval **arguments[1];
- zval *returned_zval=NULL;
-
- arguments[0]=result_handle;
- dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "sybase_fetch_row", &returned_zval, number_of_arguments, arguments);
- if (!returned_zval || Z_TYPE_P(returned_zval)!=IS_ARRAY) {
- if (returned_zval) zval_ptr_dtor(&returned_zval);
- return 0;
- }
- MOVE_RETURNED_TO_RV(rv, returned_zval);
- return 1;
-}
-
-int dbx_sybasect_error(zval **rv, zval **dbx_handle, INTERNAL_FUNCTION_PARAMETERS)
-{
- /* returns string */
- int number_of_arguments=1;
- zval **arguments[1];
- zval *returned_zval=NULL;
-
- arguments[0]=dbx_handle;
- if (!dbx_handle) number_of_arguments=0;
- dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "sybase_get_last_message", &returned_zval, number_of_arguments, arguments);
- if (!returned_zval || Z_TYPE_P(returned_zval)!=IS_STRING) {
- if (returned_zval) zval_ptr_dtor(&returned_zval);
- return 0;
- }
- MOVE_RETURNED_TO_RV(rv, returned_zval);
- return 1;
-}
-
-int dbx_sybasect_esc(zval **rv, zval **dbx_handle, zval **string, INTERNAL_FUNCTION_PARAMETERS)
-{
- /* returns escaped string */
- /* replace ' with '' */
- char * str;
- int len;
- char * tmpstr;
- int tmplen;
-
- if (Z_STRLEN_PP(string) == 0) {
- ZVAL_EMPTY_STRING(*rv);
- return 1;
- }
- tmpstr = estrdup(Z_STRVAL_PP(string));
- tmplen = Z_STRLEN_PP(string);
- /* php_str_to_str uses a smart_str that allocates memory */
- /* this memory must be freed or passed on to rv */
- str = php_str_to_str(tmpstr, tmplen, "'", 1, "''", 2, &len);
- efree(tmpstr);
-
- ZVAL_STRINGL(*rv, str, len, 0);
-
- return 1;
-}
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- */
diff --git a/ext/dbx/dbx_sybasect.h b/ext/dbx/dbx_sybasect.h
deleted file mode 100644
index 8a416e924a..0000000000
--- a/ext/dbx/dbx_sybasect.h
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 The PHP Group |
- +----------------------------------------------------------------------+
- | dbx module version 1.0 |
- +----------------------------------------------------------------------+
- | Copyright (c) 2001-2003 Guidance Rotterdam BV |
- +----------------------------------------------------------------------+
- | 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 : Marc Boeren <marc@guidance.nl> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifndef ZEND_DBX_SYBASECT_H
-#define ZEND_DBX_SYBASECT_H
-
-#ifndef INIT_FUNC_ARGS
-#include "zend_modules.h"
-#endif
-
-#include "php.h"
-
-int dbx_sybasect_connect(zval **rv, zval **host, zval **db, zval **username, zval **password, INTERNAL_FUNCTION_PARAMETERS);
- /* returns connection handle as resource on success or 0 as long on failure */
-int dbx_sybasect_pconnect(zval **rv, zval **host, zval **db, zval **username, zval **password, INTERNAL_FUNCTION_PARAMETERS);
- /* returns persistent connection handle as resource on success or 0 as long on failure */
-int dbx_sybasect_close(zval **rv, zval **dbx_handle, INTERNAL_FUNCTION_PARAMETERS);
- /* returns 1 as long on success or 0 as long on failure */
-int dbx_sybasect_query(zval **rv, zval **dbx_handle, zval **db_name, zval **sql_statement, INTERNAL_FUNCTION_PARAMETERS);
- /* returns 1 as long or a result identifier as resource on success or 0 as long on failure */
-int dbx_sybasect_getcolumncount(zval **rv, zval **result_handle, INTERNAL_FUNCTION_PARAMETERS);
- /* returns column-count as long on success or 0 as long on failure */
-int dbx_sybasect_getcolumnname(zval **rv, zval **result_handle, long column_index, INTERNAL_FUNCTION_PARAMETERS);
- /* returns column-name as string on success or 0 as long on failure */
-int dbx_sybasect_getcolumntype(zval **rv, zval **result_handle, long column_index, INTERNAL_FUNCTION_PARAMETERS);
- /* returns column-type as string on success or 0 as long on failure */
-int dbx_sybasect_getrow(zval **rv, zval **result_handle, long row_number, INTERNAL_FUNCTION_PARAMETERS);
- /* returns array[0..columncount-1] as strings on success or 0 as long on failure */
-int dbx_sybasect_error(zval **rv, zval **dbx_handle, INTERNAL_FUNCTION_PARAMETERS);
- /* returns string */
-int dbx_sybasect_esc(zval **rv, zval **dbx_handle, zval **string, INTERNAL_FUNCTION_PARAMETERS);
- /* returns escaped string */
-
-#endif /* ZEND_DBX_SYBASECT_H */
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- */
diff --git a/ext/dbx/howto_extend_dbx.html b/ext/dbx/howto_extend_dbx.html
deleted file mode 100644
index 12f9570602..0000000000
--- a/ext/dbx/howto_extend_dbx.html
+++ /dev/null
@@ -1,316 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN">
-<html>
-<head>
-<title>HOWTO extend dbx</title>
-
-</head>
-
-<body marginwidth="0" marginheight="0">
-<style type="text/css">
-<!--
-
-body, p, td, input, select, a, h1, h2, h3, h4, h5, h6, marquee, blink
- { font-family: Verdana,sans-serif; font-size: 10pt; color: #000000; }
-h1 { font-size: 16pt; font-weight: bold; }
-h2 { font-size: 14pt; font-weight: bold; }
-h3 { font-size: 12pt; font-weight: bold; }
-h4 { font-size: 10pt; font-weight: bold; }
-h5 { font-size: 8pt;}
-h6 { font-size: 6pt;}
-
-body { background-color: #F0F0F0; }
-a { color: #000088; }
-
-.title { font-size: 14pt; font-weight: bold; }
-.fn-title { font-size: 12pt; font-weight: bold; }
-.fn-phpversion { font-size: 10pt; font-weight: normal; }
-.fn-def { margin-top: 8px; margin-bottom: 8px; background-color: #99BBDD; }
-.fn-defname { font-weight: bold; }
-.fn-name { font-size: 12pt; font-weight: bold; }
-.fn-param { font-weight: bold; }
-.example { margin-top: 12px; font-weight: bold; }
-.text { margin: 8px; }
-.code { margin: 16px; font-family: Courier; background-color: #CCCCCC; }
-.bold { font-weight: bold; }
-
-.indent { margin-left: 16px; }
-.newpage { border-top: 2px solid #000088; margin-bottom: 8px; }
-.tab { margin-left: 16px; }
-
-
--->
-</style>
-
-
-
-
-
-<a name="top"></a>
-<div class="title">
-How-to code support for another database<br>
-</div>
-<div class="text">
-Every supported database module must be loaded by PHP before it can be used. Every supported database module must be added to the dbx-module before it can be used. Currently there is support for MySQL, PostgreSQL, Microsoft SQL Server, Frontbase, Sybase-CT, Oracle (oci8) and ODBC. It is not difficult to add support for more databases.<br>
-<br>
-The dbx module is found in de PHP ext/dbx folder. The support-code is found in the same folder <br>
-<br>
-To add support for module 'blabla' the following steps must be taken: <br>
-1. the dbx.c source file must be extended to recognize module 'blabla' and switch to the 'blabla' functions.<br>
-2. the files dbx_blabla.h and dbx_blabla.c must be created and edited to produce the required response.<br>
-3. add the files from step 2 to the project.<br>
-4. compile.<br>
-5. enjoy.<br>
-<br>
-You may need a bit of help for step 1 and 2. If you need help for step 3 or 4, you shouldn't try to attempt this probably :-). If you need help with step 5 you're in big trouble ;o)<br>
-Help for step 1 and 2 is given below, bold text in code indicate the important bits.<br>
-</div>
-<p>
-<a href="index.html">home</a><br>
-<div class="newpage"></div>
-
-<div class="fn-title"><a name="step1"></a>
-1. the dbx.c source file must be extended<br>
-</div>
-<div class="text">
-Define a module identifier and assign it a unique number. Include your header file here as well.<br>
-<pre class="code">
-// defines for supported databases
-#define DBX_UNKNOWN 0
-#define DBX_MYSQL 1
-#define DBX_ODBC 2
-<span class="bold">#define DBX_BLABLA 3</span>
-// includes for supported databases
-#include "dbx.h"
-#include "dbx_mysql.h"
-#include "dbx_odbc.h"
-<span class="bold">#include "dbx_blabla.h"</span>
-</pre>
-Add code to the module_identifier_exists function so DBX_BLABLA will be recognized:<br>
-<pre class="code">
-int module_identifier_exists(long module_identifier) {
- switch (module_identifier) {
- case DBX_MYSQL: return module_exists("mysql");
- case DBX_ODBC: return module_exists("odbc");
- <span class="bold">case DBX_BLABLA: return module_exists("blabla");</span>
- }
- return 0;
- }
-</pre>
-Add code to the get_module_identifier function so your extension will be recognized:<br>
-<pre class="code">
-int get_module_identifier(char * module_name) {
- if (!strcmp("mysql", module_name)) return DBX_MYSQL;
- if (!strcmp("odbc", module_name)) return DBX_ODBC;
- <span class="bold">if (!strcmp("blabla", module_name)) return DBX_BLABLA;</span>
- return DBX_UNKNOWN;
- }
-</pre>
-Add code for exposing the DBX_BLABLA constant to the world:<br>
-<pre class="code">
-ZEND_MINIT_FUNCTION(dbx)
-{
-/*/ REGISTER_INI_ENTRIES(); /*/
-
- REGISTER_LONG_CONSTANT("DBX_MYSQL", DBX_MYSQL, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("DBX_ODBC", DBX_ODBC, CONST_CS | CONST_PERSISTENT);
- <span class="bold">REGISTER_LONG_CONSTANT("DBX_BLABLA", DBX_BLABLA CONST_CS | CONST_PERSISTENT);</span>
-
- [...]
-
- return SUCCESS;
- }
-</pre>
-Add code for inclusion in the phpinfo() function (optional, but recommended):<br>
-<pre class="code">
-ZEND_MINFO_FUNCTION(dbx)
-{
- php_info_print_table_start();
- php_info_print_table_row(2, "dbx support", "enabled");
- php_info_print_table_row(2, "dbx support for MySQL", "enabled");
- php_info_print_table_row(2, "dbx support for ODBC", "enabled");
- <span class="bold">php_info_print_table_row(2, "dbx support for BlaBla", "enabled");</span>
- php_info_print_table_end();
- DISPLAY_INI_ENTRIES();
-}
-</pre>
-Finally, for the implementation of all switch_dbx_XXXXX functions, copy a 'case'-line for every function that you support (should be all functions!). Here is an example for only the switch_dbx_connect function:<br>
-<pre class="code">
-int switch_dbx_connect(zval **rv, zval **host, zval **db, zval **username, zval **password, INTERNAL_FUNCTION_PARAMETERS, zval **dbx_module) {
- // returns connection handle as resource on success or 0 as long on failure
- switch ((*dbx_module)-&gt;value.lval) {
- case DBX_MYSQL: return dbx_mysql_connect(rv, host, db, username, password, INTERNAL_FUNCTION_PARAM_PASSTHRU);
- case DBX_ODBC: return dbx_odbc_connect(rv, host, db, username, password, INTERNAL_FUNCTION_PARAM_PASSTHRU);
- <span class="bold">case DBX_BLABLA: return dbx_blabla_connect(rv, host, db, username, password, INTERNAL_FUNCTION_PARAM_PASSTHRU);</span>
- }
- zend_error(E_WARNING, "dbx_connect: not supported in this module");
- return 0;
- }
-</pre>
-This should be done for all switch_dbx_XXXXX functions. They are listed below:<br>
-<pre class="code">
-int <a href="#connect">switch_dbx_connect(...)</a>;
-int <a href="#pconnect">switch_dbx_pconnect(...)</a>;
-int <a href="#close">switch_dbx_close(...)</a>;
-int <a href="#query">switch_dbx_query(...)</a>;
-int <a href="#getcolumncount">switch_dbx_getcolumncount(...)</a>;
-int <a href="#getcolumnname">switch_dbx_getcolumnname(...)</a>;
-int <a href="#getcolumntype">switch_dbx_getcolumntype(...)</a>;
-int <a href="#getrow">switch_dbx_getrow(...)</a>;
-int <a href="#error">switch_dbx_error(...)</a>;
-</pre>
-This concludes the changes for the dbx.c file. All that is needed now is to actually code the dbx_blabla_connect and other functions, which we will see in the following step.<br>
-</div>
-<p>
-<a href="#top">top</a><br>
-<div class="newpage"></div>
-
-<div class="fn-title"><a name="step1"></a>
-2. the files dbx_blabla.h and dbx_blabla.c<br>
-</div>
-<div class="text">
-The dbx_blabla.h and dbx_blabla.c file are created in the folder /ext/dbx.<br>
-The easiest method is to just copy dbx_mysql.h en dbx_mysql.c, open both files, and do a search and replace ('blabla' for 'mysql' and 'BLABLA' for 'MYSQL'). Yes, case-sensitive.<br>
-For the .h file, that's all. <br>
-For the .c file, the fun has just started :-)<br>
-In the .c is the actual realization of the database abstraction, where a call to a standard function is translated into one or more database-specific calls. For mysql, a dbx_connect translates to a mysql_connect followed by a mysql_select_db. Refer to the dbx_mysql.c and dbx_odbc.c files regularly for examples!<br>
-In dbx.h one macro and one function are defined to make the calling of external module functions and returning of the results easier: dbx_call_any_function and MOVE_RETURNED_TO_RV.<br>
-<p>
- The details of what each of the functions do, what parameters they get, and what parameters they should return are discussed below. But first, the dbx_mysql_connect function is presented and explained, so you get an idea of how things work.<br>
-<pre class="code">
-int dbx_mysql_connect(zval **rv, zval **host, zval **db, zval **username, zval **password, INTERNAL_FUNCTION_PARAMETERS) {
- // returns connection handle as resource on success or 0 as long on
- // failure
- int number_of_arguments;
- zval **arguments[3];
- zval * returned_zval=NULL;
- zval * select_db_zval=NULL;
-
- number_of_arguments=3;
- arguments[0]=host;
- arguments[1]=username;
- arguments[2]=password;
- dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, <span class="bold">"mysql_connect"</span>, &returned_zval, number_of_arguments, arguments);
- if (!returned_zval || returned_zval-&gt;type!=IS_RESOURCE) {
- if (returned_zval) zval_ptr_dtor(&returned_zval);
- return 0;
- }
- MOVE_RETURNED_TO_RV(rv, returned_zval);
-
- number_of_arguments=2;
- arguments[0]=db;
- arguments[1]=rv;
- dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, <span class="bold">"mysql_select_db"</span>, &select_db_zval, number_of_arguments, arguments);
- zval_ptr_dtor(&select_db_zval);
-
- return 1;
- }
-</pre>
-First of all, all functions return 0 on failure and 1 on success. These values are used in the dbx-routines, they are never actually given back to the PHP-script writer that calls the dbx_connect function.<br>
-The actual value that is of interest to the caller is returned in the <span class="bold">rv</span> parameter. In this case it is a connection handle (or link identifier, in mysql-speak), that is also returned if the database selection doesn't succeed. <br>
-The parameters that are of interest to the function are located between the <span class="bold">rv</span> and <span class="bold">INTERNAL_FUNCTION_PARAMETERS</span> parameters, in this case it is a <span class="bold">host</span> name, a <span class="bold">db</span> name, a <span class="bold">username</span> and a <span class="bold">password</span>. These are the values that the user specifies if he calls dbx_connect(); These parameters are used in the calls to the mysql-database functions. The user actually also specifies a module-name, that decides which connect-function should be called. Here, he specified 'mysql'.<br>
-To actually call a mysql module function, you can use <span class="bold">dbx_call_any_function</span> where you specify the function name (it is used twice in dbx_mysql_connect, see <span class="bold">'mysql_connect'</span> and <span class="bold">'mysql_select_db'</span>, they are printed bold in the code). The value that is returned from the function will be stored in the next argument, a zval * (e.g. <span class="bold">returned_zval</span>) parameter that you must declare locally. To actually return such a parameter, use the <span class="bold">MOVE_RETURNED_TO_RV(rv, returned_zval)</span> macro, which copies the values to <span class="bold">rv</span> and frees anything that may be left in <span class="bold">returned_zval</span>. Parameters that must be passed to the mysql-function are stored in the <span class="bold">arguments</span> array, which must be large enough to hold all parameters to the function-call that requires the most parameters (in this case, mysql_connect expects 3 parameters, mysql_select_db expects two parameters, so the <span class="bold">arguments</span> array is defined 'zval **arguments[<span class="bold">3</span>]'). The <span class="bold">number_of_arguments</span> parameter is set to the actual number of arguments that the function-call requires. As you can see it is initialized to 3, for the first call to mysql_connect. Then it is set to 2, for the call to mysql_select_db. If you call a function that retrieves a value, and you don't return it with MOVE_RETURNED_TO_RV, then you must free the value using <span class="bold">zval_ptr_dtor</span>, as can be seen right after the call to mysql_select_db. This can also be seen directly after the call to mysql_connect, if somehow this function failed or didn't return a resource (on a successful connect mysql_connect returns a resource) the returned value is freed as well (and 0 is returned because the connection failed).<br>
-<p>
-OK, now the description of all functions that you should implement, and what is expected of them...<br>
-<a name="connect"></a><pre class="code">
-int <span class="fn-name">dbx_blabla_connect</span>(zval **rv, zval **<span class="fn-param">host</span>, zval **<span class="fn-param">db</span>, zval **<span class="fn-param">username</span>, zval **<span class="fn-param">password</span>, INTERNAL_FUNCTION_PARAMETERS);
-// int: returns 0 on connect-failure and 1 on success
-// rv: connection handle as resource on success or nothing on failure
-</pre>
-dbx_blabla_connect creates a connection to a database on a specified host, using username and password for authentication. This may be done by connecting to a server and selecting a database (as mysql does), or connecting to a specific database directly (as in ODBC). <br>
-What must be returned (in <span class="bold">rv</span>) is the link identifier that is returned from the blabla_connect function, in it's native form so the end-user can use $db-&gt;handle to call other blabla_* functions that expect this parameter.<br>
-What must be returned from the function is a 1 on success and a 0 on failure. Remember that a failed database selection can still return a 1 because the connection succeeded!<br>
-The host (string) is the name of the machine the server is run on, but it may be empty if a database name is enough to establish a connection.<br>
-The db (string) is the name of the database to select, or, for e.g. ODBC, the identifier that is needed to actually select the database.<br>
-The username (string) and password (string) are used for authentication.<br>
-<a name="pconnect"></a><pre class="code">
-int <span class="fn-name">dbx_blabla_pconnect</span>(zval **rv, zval **<span class="fn-param">host</span>, zval **<span class="fn-param">db</span>, zval **<span class="fn-param">username</span>, zval **<span class="fn-param">password</span>, INTERNAL_FUNCTION_PARAMETERS);
-// int: returns 0 on pconnect-failure and 1 on success
-// rv: persistent connection handle as resource on success or nothing
-// on failure
-</pre>
-dbx_blabla_pconnect is identical to dbx_blabla_connect except that it will create a persistent connection.<br>
-<a name="close"></a><pre class="code">
-int <span class="fn-name">dbx_blabla_close</span>(zval **rv, zval **<span class="fn-param">dbx_handle</span>, INTERNAL_FUNCTION_PARAMETERS);
-// int: returns 0 on close-failure and 1 on success
-// rv: 1 as bool on success or nothing on failure
-</pre>
-dbx_blabla_close closes an open connection, whether it was created persistently or not.<br>
-What must be returned (in <span class="bold">rv</span>) is a boolean true that indicates when the connection was closed successfully. If it wasn't, no value is returned in <span class="bold">rv</span>.<br>
-What must be returned from the function is a 1 on success and a 0 on failure. Note that an unsuccessful close is still a succeeded function call.<br>
-The dbx_handle is the same value that you returned from dbx_blabla_connect or dbx_blabla_pconnect.<br>
-<a name="query"></a><pre class="code">
-int <span class="fn-name">dbx_blabla_query</span>(zval **rv, zval **<span class="fn-param">dbx_handle</span>, zval **<span class="fn-param">sql_statement</span>, INTERNAL_FUNCTION_PARAMETERS);
-// int: returns 0 on query-failure and 1 on success
-// rv: 1 as bool or a result identifier as resource on success
-// or nothing on failure
-</pre>
-dbx_blabla_query executes an SQL statement over the connection.<br>
-What must be returned (in <span class="bold">rv</span>) is a nothing on failure, on success it must return either a boolean 1 for queries that don't return data (like INSERT INTO) or a native result-handle for queries that do return data (SELECT). The native result handle ($q-&gt;handle) can be used by the end-user to call other blabla_* functions that expect this parameter.<br>
-What must be returned from the function is a 1 on success and a 0 on failure. Note that a failed query execution can still return a 1 because the query function succeeded!<br>
-The dbx_handle is the same value that you returned from dbx_blabla_connect or dbx_blabla_pconnect.<br>
-The sql_statement (string) can have any value.<br>
-<a name="getcolumncount"></a><pre class="code">
-int <span class="fn-name">dbx_blabla_getcolumncount</span>(zval **rv, zval **<span class="fn-param">result_handle</span>, INTERNAL_FUNCTION_PARAMETERS);
-// int: returns 0 on query-failure and 1 on success
-// returns column-count as long on success or nothing on failure
-</pre>
-dbx_blabla_getcolumncount gets the number of fields that the query-result contains.<br>
-What must be returned (in <span class="bold">rv</span>) is the number of fields as long from the query result specified by the result_handle.<br>
-What must be returned from the function is a 1 on success and a 0 on failure. <br>
-The result_handle is the same value that you returned from dbx_query.<br>
-<a name="getcolumnname"></a><pre class="code">
-int <span class="fn-name">dbx_blabla_getcolumnname</span>(zval **rv, zval **<span class="fn-param">result_handle</span>, long <span class="fn-param">column_index</span>, INTERNAL_FUNCTION_PARAMETERS);
-// int: returns 0 on failure and 1 on success
-// returns column-name as string on success or nothing on failure
-</pre>
-dbx_blabla_getcolumnname gets the fieldname of the specified column.<br>
-What must be returned (in <span class="bold">rv</span>) is the fieldname as string of the given column.<br>
-What must be returned from the function is a 1 on success and a 0 on failure. <br>
-The result_handle is the same value that you returned from dbx_query.<br>
-The column_index is a long that ranges from 0 to the value you returned from dbx_blabla_getcolumncount minus 1 [0..columncount-1].<br>
-<a name="getcolumntype"></a><pre class="code">
-int <span class="fn-name">dbx_blabla_getcolumntype</span>(zval **rv, zval **<span class="fn-param">result_handle</span>, long <span class="fn-param">column_index</span>, INTERNAL_FUNCTION_PARAMETERS);
-// int: returns 0 on failure and 1 on success
-// returns column-type as string on success or nothing on failure
-</pre>
-dbx_blabla_getcolumnname gets the field type of the specified column.<br>
-What must be returned (in <span class="bold">rv</span>) is the field type as string of the given column.<br>
-What must be returned from the function is a 1 on success and a 0 on failure. <br>
-The result_handle is the same value that you returned from dbx_query.<br>
-The column_index is a long that ranges from 0 to the value you returned from dbx_blabla_getcolumncount minus 1 [0..columncount-1].<br>
-<a name="getrow"></a><pre class="code">
-int <span class="fn-name">dbx_blabla_getrow</span>(zval **rv, zval **<span class="fn-param">result_handle</span>, long <span class="fn-param">row_number</span>, INTERNAL_FUNCTION_PARAMETERS);
-// int: returns 0 on failure and 1 on success
-// returns array[0..columncount-1] as strings on success or 0 as long
-// on failure
-</pre>
-dbx_blabla_getrow gets the next row from the query-results.<br>
-In some cases (PostgreSQL) the rownumber is needed to actually fetch the row. This will be provided (it will be indexed starting at 0) by the dbx_query function. In other cases it is not needed and thus not used.<br>
-What must be returned (in <span class="bold">rv</span>) is an indexed array[0..columncount-1] of strings, containing the data from the row (for mysql this is easy since it already performs this way, for ODBC the array has to be constructed inside this function from a loop that fetches the data for each column).<br>
-What must be returned from the function is a 1 on success and a 0 on failure (function failed or there are no more rows available). <br>
-The result_handle is the same value that you returned from dbx_query.<br>
-<a name="error"></a><pre class="code">
-int <span class="fn-name">dbx_blabla_error</span>(zval **rv, zval **<span class="fn-param">dbx_handle</span>, INTERNAL_FUNCTION_PARAMETERS);
-// int: returns 0 on failure and 1 on success
-// returns error message as string
-</pre>
-dbx_blabla_error gets the error message from the last database call.<br>
-What must be returned (in <span class="bold">rv</span>) is the error message as a string.<br>
-What must be returned from the function is a 1 on success and a 0 on failure. <br>
-The dbx_handle is the same value that you returned from dbx_blabla_connect or dbx_blabla_pconnect.<br>
-</div>
-<p>
-<a href="#top">top</a><br>
-<div class="newpage"></div>
-<p>
-<div class="text">
-For specifics or the finer details you can always refer to dbx_mysql.c and dbx_odbc.c to see everything in action. <br>
-More Zend API documentation can be found at <a href="http://www.zend.com/apidoc">http://www.zend.com/apidoc</a>.<br>
-This document can be found at <a href="http://www.guidance.nl/php/dbx">http://www.guidance.nl/php/dbx</a>.<br>
-</div>
-<p>
-<a href="#top">top</a><br>
-<div class="newpage"></div>
-
-</body>
-</html>
diff --git a/ext/dbx/package.xml b/ext/dbx/package.xml
deleted file mode 100644
index 6bed9181a1..0000000000
--- a/ext/dbx/package.xml
+++ /dev/null
@@ -1,89 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1" ?>
-<!DOCTYPE package SYSTEM "../pear/package.dtd">
-<package>
- <name>dbx</name>
- <summary>Database abstraction functions</summary>
- <maintainers>
- <maintainer>
- <user>mboeren</user>
- <name>Marc Boeren</name>
- <email>marc@guidance.nl</email>
- <role>lead</role>
- </maintainer>
- <maintainer>
- <user>hirokawa</user>
- <name>Rui Hirokawa</name>
- <email>hirokawa@php.net</email>
- <role>lead</role>
- </maintainer>
- <maintainer>
- <user>???</user>
- <name>Frank M. Kromann</name>
- <email>frank@kromann.info</email>
- <role>lead</role>
- </maintainer>
- </maintainers>
- <description>
-The dbx module is a database abstraction layer (db 'X', where 'X'
-is a supported database). The dbx functions allow you to access all
-supported databases using a single calling convention. The
-dbx-functions themselves do not interface directly to the databases,
-but interface to the modules that are used to support these databases.
-</description>
- <license>PHP</license>
- <release>
- <state>beta</state>
- <version>5.0.0rc1</version>
- <date>2004-03-19</date>
- <notes>
-package.xml added to support intallation using pear installer
- </notes>
- <filelist>
- <file role="doc" name="CREDITS"/>
- <file role="doc" name="INSTALL"/>
- <file role="doc" name="howto_extend_dbx.html"/>
- <file role="src" name="config.m4"/>
- <file role="src" name="config.w32"/>
- <file role="src" name="dbx.dsp"/>
- <file role="src" name="dbx.c"/>
- <file role="src" name="dbx.h"/>
- <file role="src" name="dbx_fbsql.c"/>
- <file role="src" name="dbx_fbsql.h"/>
- <file role="src" name="dbx_mssql.c"/>
- <file role="src" name="dbx_mssql.h"/>
- <file role="src" name="dbx_mysql.c"/>
- <file role="src" name="dbx_mysql.h"/>
- <file role="src" name="dbx_oci8.c"/>
- <file role="src" name="dbx_oci8.h"/>
- <file role="src" name="dbx_odbc.c"/>
- <file role="src" name="dbx_odbc.h"/>
- <file role="src" name="dbx_pgsql.c"/>
- <file role="src" name="dbx_pgsql.h"/>
- <file role="src" name="dbx_sybasect.c"/>
- <file role="src" name="dbx_sybasect.h"/>
- <file role="src" name="php_dbx.h"/>
- <file role="src" name="dbx_sqlite.c"/>
- <file role="src" name="dbx_sqlite.h"/>
- <file role="test" name="tests/001.phpt"/>
- <file role="test" name="tests/002.phpt"/>
- <file role="test" name="tests/003.phpt"/>
- <file role="test" name="tests/004.phpt"/>
- <file role="test" name="tests/005.phpt"/>
- <file role="test" name="tests/006.phpt"/>
- <file role="test" name="tests/007.phpt"/>
- <file role="test" name="tests/008.phpt"/>
- <file role="test" name="tests/009.phpt"/>
- <file role="test" name="tests/dbx_test.p"/>
- <file role="test" name="tests/dbx_test.pgsql.script"/>
- <file role="test" name="tests/dbx_test.script"/>
- <file role="test" name="tests/skipif.inc"/>
- <file role="test" name="tests/010.phpt"/>
- </filelist>
- <deps>
- <dep type="php" rel="ge" version="5" />
- </deps>
- </release>
-</package>
-<!--
-vim:et:ts=1:sw=1
--->
diff --git a/ext/dbx/php_dbx.h b/ext/dbx/php_dbx.h
deleted file mode 100644
index 9db0b0e59c..0000000000
--- a/ext/dbx/php_dbx.h
+++ /dev/null
@@ -1,89 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 The PHP Group |
- +----------------------------------------------------------------------+
- | dbx module version 1.0 |
- +----------------------------------------------------------------------+
- | Copyright (c) 2001-2003 Guidance Rotterdam BV |
- +----------------------------------------------------------------------+
- | 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 : Marc Boeren <marc@guidance.nl> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifndef ZEND_PHP_DBX_H
-#define ZEND_PHP_DBX_H
-
-#ifndef INIT_FUNC_ARGS
-#include "zend_modules.h"
-#endif
-
-extern zend_module_entry dbx_module_entry;
-#define phpext_dbx_ptr &dbx_module_entry
-
-#ifdef ZEND_WIN32
-#define ZEND_DBX_API __declspec(dllexport)
-#else
-#define ZEND_DBX_API
-#endif
-
-ZEND_MINIT_FUNCTION(dbx);
-ZEND_MSHUTDOWN_FUNCTION(dbx);
-/* ZEND_RINIT_FUNCTION(dbx); */
-/* ZEND_RSHUTDOWN_FUNCTION(dbx); */
-
-ZEND_MINFO_FUNCTION(dbx);
-
-ZEND_FUNCTION(dbx_connect);
-ZEND_FUNCTION(dbx_close);
-ZEND_FUNCTION(dbx_query);
-ZEND_FUNCTION(dbx_fetch_row);
-ZEND_FUNCTION(dbx_error);
-ZEND_FUNCTION(dbx_escape_string);
-
-ZEND_FUNCTION(dbx_sort);
-ZEND_FUNCTION(dbx_compare);
-
-/*
- Declare any global variables you may need between the BEGIN
- and END macros here:
-*/
-
-/*
-ZEND_BEGIN_MODULE_GLOBALS(dbx)
-ZEND_END_MODULE_GLOBALS(dbx)
-*/
-
-/* In every function that needs to use variables in php_dbx_globals,
- do call dbxLS_FETCH(); after declaring other variables used by
- that function, and always refer to them as dbxG(variable).
- You are encouraged to rename these macros something shorter, see
- examples in any other php module directory.
-*/
-
-#ifdef ZTS
-#define DBXG(v) TSRMG(dbx_globals_id, zend_dbx_globals *, v)
-#else
-#define DBXG(v) (dbx_globals.v)
-#endif
-
-#endif /* ZEND_PHP_DBX_H */
-
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- */
diff --git a/ext/dbx/tests/001.phpt b/ext/dbx/tests/001.phpt
deleted file mode 100644
index e8f30f7c1a..0000000000
--- a/ext/dbx/tests/001.phpt
+++ /dev/null
@@ -1,10 +0,0 @@
---TEST--
-Check for dbx presence
---SKIPIF--
-<?php if (!extension_loaded("dbx")) print("skip"); ?>
---FILE--
-<?php
-print("dbx extension is available");
-?>
---EXPECT--
-dbx extension is available \ No newline at end of file
diff --git a/ext/dbx/tests/002.phpt b/ext/dbx/tests/002.phpt
deleted file mode 100644
index b708b66aca..0000000000
--- a/ext/dbx/tests/002.phpt
+++ /dev/null
@@ -1,31 +0,0 @@
---TEST--
-DBX_CONSTANTS
---SKIPIF--
-<?php if (!extension_loaded("dbx")) print("skip"); ?>
---FILE--
-<?php
-if (DBX_MYSQL=="DBX_MYSQL") print('!DBX_MYSQL');
-if (DBX_ODBC=="DBX_ODBC") print('!DBX_ODBC');
-if (DBX_PGSQL=="DBX_PGSQL") print('!DBX_PGSQL');
-if (DBX_MSSQL=="DBX_MSSQL") print('!DBX_MSSQL');
-if (DBX_FBSQL=="DBX_FBSQL") print('!DBX_FBSQL');
-if (DBX_OCI8=="DBX_OCI8") print('!DBX_OCI8');
-if (DBX_SYBASECT=="DBX_SYBASECT") print('!DBX_SYBASECT');
-if (DBX_SQLITE=="DBX_SQLITE") print('!DBX_SQLITE');
-if (DBX_PERSISTENT=="DBX_PERSISTENT") print('!DBX_PERSISTENT');
-if (DBX_RESULT_INFO=="DBX_RESULT_INFO") print('!DBX_RESULT_INFO');
-if (DBX_RESULT_INDEX=="DBX_RESULT_INDEX") print('!DBX_RESULT_INDEX');
-if (DBX_RESULT_ASSOC=="DBX_RESULT_ASSOC") print('!DBX_RESULT_ASSOC');
-if (DBX_RESULT_UNBUFFERED=="DBX_RESULT_UNBUFFERED") print('!DBX_RESULT_UNBUFFERED');
-if (DBX_COLNAMES_UNCHANGED=="DBX_COLNAMES_UNCHANGED") print('!DBX_COLNAMES_UNCHANGED');
-if (DBX_COLNAMES_UPPERCASE=="DBX_COLNAMES_UPPERCASE") print('!DBX_COLNAMES_UPPERCASE');
-if (DBX_COLNAMES_LOWERCASE=="DBX_COLNAMES_LOWERCASE") print('!DBX_COLNAMES_LOWERCASE');
-if (DBX_CMP_NATIVE=="DBX_CMP_NATIVE") print('!DBX_CMP_NATIVE');
-if (DBX_CMP_TEXT=="DBX_CMP_TEXT") print('!DBX_CMP_TEXT');
-if (DBX_CMP_NUMBER=="DBX_CMP_NUMBER") print('!DBX_CMP_NUMBER');
-if (DBX_CMP_ASC=="DBX_CMP_ASC") print('!DBX_CMP_ASC');
-if (DBX_CMP_DESC=="DBX_CMP_DESC") print('!DBX_CMP_DESC');
-print('ok');
-?>
---EXPECT--
-ok \ No newline at end of file
diff --git a/ext/dbx/tests/003.phpt b/ext/dbx/tests/003.phpt
deleted file mode 100644
index 9c0c3b0e86..0000000000
--- a/ext/dbx/tests/003.phpt
+++ /dev/null
@@ -1,139 +0,0 @@
---TEST--
-dbx_connect
---SKIPIF--
-<?php
-include_once("skipif.inc");
-?>
---FILE--
-<?php
-include_once("dbx_test.p");
-$nonexisting_database="nonexisting_database";
-$nonexisting_username="nonexisting_username";
-$nonexisting_password="nonexisting_password";
-$dlo = dbx_connect($module_name, $host, $database, $username, $password);
-if ($dlo!=0) {
- print('connect using string ok'."\n");
- dbx_close($dlo);
- }
-$dlo = dbx_connect($module, $host, $database, $username, $password);
-if ($dlo!=0) {
- print('connect using constant ok'."\n");
- dbx_close($dlo);
- }
-// sqlite is a special case as it will just create a db if it isn't found
-if ($module == DBX_SQLITE) {
- print('connect to non-existing database failed, so it\'s ok'."\n");
- }
-else {
- $dlo = @dbx_connect($module, $host, $nonexisting_database, $username, $password);
- if ($dlo==0) {
- print('connect to non-existing database failed, so it\'s ok'."\n");
- }
- else {
- print_r($dlo);
- dbx_close($dlo);
- }
- }
-// sqlite is a special case as it doesn't use user/password restrictions
-if ($module == DBX_SQLITE) {
- print('connect with false username/password combi failed, so it\'s ok'."\n");
- }
-else {
- $dlo = @dbx_connect($module, $host, $database, $nonexisting_username, $nonexisting_password);
- if ($dlo==0) {
- print('connect with false username/password combi failed, so it\'s ok'."\n");
- }
- else {
- print_r($dlo);
- dbx_close($dlo);
- }
- }
-
-$dlo = dbx_connect($module_name, $host, $database, $username, $password, DBX_PERSISTENT);
-if ($dlo!=0) {
- print('persistent connect using string ok'."\n");
- dbx_close($dlo);
- }
-$dlo = dbx_connect($module, $host, $database, $username, $password, DBX_PERSISTENT);
-if ($dlo!=0) {
- print('persistent connect using constant ok'."\n");
- dbx_close($dlo);
- }
-// sqlite is a special case as it will just create a db if it isn't found
-if ($module == DBX_SQLITE) {
- print('persistent connect to non-existing database failed, so it\'s ok'."\n");
- }
-else {
- $dlo = @dbx_connect($module, $host, $nonexisting_database, $username, $password, DBX_PERSISTENT);
- if ($dlo==0) {
- print('persistent connect to non-existing database failed, so it\'s ok'."\n");
- }
- else {
- print_r($dlo);
- dbx_close($dlo);
- }
- }
-// sqlite is a special case as it doesn't use user/password restrictions
-if ($module == DBX_SQLITE) {
- print('persistent connect with false username/password combi failed, so it\'s ok'."\n");
- }
-else {
- $dlo = @dbx_connect($module, $host, $database, $nonexisting_username, $nonexisting_password, DBX_PERSISTENT);
- if ($dlo==0) {
- print('persistent connect with false username/password combi failed, so it\'s ok'."\n");
- }
- else {
- print_r($dlo);
- dbx_close($dlo);
- }
- }
-
-$dlo = @dbx_connect($module, $host, $database, $username, $password, DBX_PERSISTENT, "12many");
-if ($dlo==0) {
- print('too many parameters: connect failure works ok'."\n");
- }
-else {
- print_r($dlo);
- dbx_close($dlo);
- }
-$dlo = @dbx_connect($module, $host, $database, $username);
-if ($dlo==0) {
- print('too few parameters: connect failure works ok'."\n");
- }
-else {
- print_r($dlo);
- dbx_close($dlo);
- }
-$dlo1 = dbx_connect($module, $host, $database, $username, $password);
-$dlo2 = dbx_connect($module, $host, $database, $username, $password);
-if ($dlo1!=0 && $dlo2!=0) {
- print('multiple connects ok'."\n");
- dbx_close($dlo1);
- dbx_close($dlo2);
- }
-// sqlite is a special case as it will just create a db if it isn't found
-if ($module == DBX_SQLITE) {
- print('multiple connects (2nd fails on database-name) ok'."\n");
- }
-else {
- $dlo1 = dbx_connect($module, $host, $database, $username, $password);
- $dlo2 = @dbx_connect($module, $host, $nonexisting_database, $username, $password);
- if ($dlo1!=0 && $dlo2==0) {
- print('multiple connects (2nd fails on database-name) ok'."\n");
- dbx_close($dlo1);
- }
- }
-?>
---EXPECT--
-connect using string ok
-connect using constant ok
-connect to non-existing database failed, so it's ok
-connect with false username/password combi failed, so it's ok
-persistent connect using string ok
-persistent connect using constant ok
-persistent connect to non-existing database failed, so it's ok
-persistent connect with false username/password combi failed, so it's ok
-too many parameters: connect failure works ok
-too few parameters: connect failure works ok
-multiple connects ok
-multiple connects (2nd fails on database-name) ok \ No newline at end of file
diff --git a/ext/dbx/tests/004.phpt b/ext/dbx/tests/004.phpt
deleted file mode 100644
index 233bf49be1..0000000000
--- a/ext/dbx/tests/004.phpt
+++ /dev/null
@@ -1,35 +0,0 @@
---TEST--
-dbx_close
---SKIPIF--
-<?php
-include_once("skipif.inc");
-?>
---FILE--
-<?php
-include_once("dbx_test.p");
-$dlo = dbx_connect($module, $host, $database, $username, $password);
-if ($module===DBX_OCI8 || $module===DBX_SQLITE) { // close for oci8 and sqlite always return NULL since it doesn't do anything
- print('close works ok'."\n");
- }
-else {
- if ($dlo!=0) {
- if (dbx_close($dlo)) {
- print('close works ok'."\n");
- }
- }
- }
-if (!@dbx_close($dlo)) {
- print('close failure works ok'."\n");
- }
-if (!@dbx_close($dlo, "12many")) {
- print('too many parameters: close failure works ok'."\n");
- }
-if (!@dbx_close()) {
- print('too few parameters: close failure works ok'."\n");
- }
-?>
---EXPECT--
-close works ok
-close failure works ok
-too many parameters: close failure works ok
-too few parameters: close failure works ok \ No newline at end of file
diff --git a/ext/dbx/tests/005.phpt b/ext/dbx/tests/005.phpt
deleted file mode 100644
index 354d7ec564..0000000000
--- a/ext/dbx/tests/005.phpt
+++ /dev/null
@@ -1,113 +0,0 @@
---TEST--
-dbx_query
---SKIPIF--
-<?php
-include_once("skipif.inc");
-?>
---INI--
-magic_quotes_runtime=0
---FILE--
-<?php
-include_once("dbx_test.p");
-$sql_statement = "select * from tbl order by id";
-$invalid_sql_statement = "invalid select * from tbl";
-$sql_select_statement = "select * from tbl where id=999999 and parentid=999999";
-$sql_insert_statement = "insert into tbl (id, parentid, description) values (999999, 999999, 'temporary_record')";
-$sql_update_statement = "update tbl set field2 = 'bla''bla\"bla' where id=999999 and parentid=999999";
-$sql_delete_statement = "delete from tbl where id=999999 and parentid=999999";
-$dlo = dbx_connect($module, $host, $database, $username, $password);
-if (!$dlo) {
- print('this won\'t work'."\n");
- }
-else {
- // especially for sybase I need to set the textsize to >64 k, as one of the test-fields
- // requires this (shouldn't this be a php.ini-entry??)
- if ($connection === DBX_SYBASECT) @dbx_query($dlo, "set textsize 100000");
- // select query
- if ($dro=dbx_query($dlo, $sql_statement)) {
- for ($i=0; $i<$dro->rows; ++$i) {
- print($dro->data[$i]['id'].".".$dro->data[$i]['description'].".".$dro->data[$i]['field1'].".".strlen($dro->data[$i]['field2'])."\n");
- }
- $dro->data[0]['id']='changed_value';
- print($dro->data[0][0]."\n");
- }
- // insert query
- if (dbx_query($dlo, $sql_insert_statement)) {
- print('insert-query: dbx_query works ok'."\n");
- if ($dro=dbx_query($dlo, $sql_select_statement)) {
- for ($i=0; $i<$dro->rows; ++$i) {
- print($dro->data[$i]['id'].".".$dro->data[$i]['description'].".".strlen($dro->data[$i]['field2'])."\n");
- }
- }
- }
- // update query
- if (dbx_query($dlo, $sql_update_statement)) {
- print('update-query: dbx_query works ok'."\n");
- if ($dro=dbx_query($dlo, $sql_select_statement)) {
- for ($i=0; $i<$dro->rows; ++$i) {
- print($dro->data[$i]['id'].".".$dro->data[$i]['description'].".".strlen($dro->data[$i]['field2'])."\n");
- }
- }
- }
- // delete query
- if (dbx_query($dlo, $sql_delete_statement)) {
- print('delete-query: dbx_query works ok'."\n");
- if ($dro=dbx_query($dlo, $sql_select_statement)) {
- for ($i=0; $i<$dro->rows; ++$i) {
- print($dro->data[$i]['id'].".".$dro->data[$i]['description'].".".strlen($dro->data[$i]['field2'])."\n");
- }
- }
- }
- // DBX_RESULT_UNBUFFERED
- if ($dro=dbx_query($dlo, $sql_statement, DBX_RESULT_UNBUFFERED)) {
- $properties = get_object_vars($dro);
- if (array_key_exists('data', $properties)) {
- print("data property not expected with DBX_RESULT_UNBUFFERED flag.");
- }
- }
- // colnames_case flags
- if ($dro=dbx_query($dlo, $sql_statement, DBX_COLNAMES_LOWERCASE)) {
- print('column name lowercased: ');
- print($dro->info["name"][0].".".$dro->data[0]['id'].".".$dro->data[0]['description']."\n");
- }
- if ($dro=dbx_query($dlo, $sql_statement, DBX_COLNAMES_UPPERCASE)) {
- print('column name uppercased: ');
- print($dro->info["name"][0].".".$dro->data[0]['ID'].".".$dro->data[0]['DESCRIPTION']."\n");
- }
-
- // generate errors
- if (!@dbx_query(0, $sql_statement)) {
- print('wrong dbx_link_object: query failure works ok'."\n");
- }
- if (!@dbx_query($dlo, $invalid_sql_statement)) {
- print('wrong sql-statement: query failure works ok'."\n");
- }
- if (!@dbx_query($dlo, $sql_statement, DBX_RESULT_INDEX, "12many")) {
- print('too many parameters: query failure works ok'."\n");
- }
- if (!@dbx_query($dlo)) {
- print('too few parameters: query failure works ok'."\n");
- }
- dbx_close($dlo);
- }
-?>
---EXPECT--
-1.root.empty fields.0
-10.abc.field2 contains single quote.3
-20.cba.field2 contains double quote.3
-30.bac.field2 contains >4k text.4591
-40.100.field2 contains >64k text.70051
-50.20.empty fields.0
-60.20.empty fields.0
-changed_value
-insert-query: dbx_query works ok
-999999.temporary_record.0
-update-query: dbx_query works ok
-999999.temporary_record.11
-delete-query: dbx_query works ok
-column name lowercased: id.1.root
-column name uppercased: ID.1.root
-wrong dbx_link_object: query failure works ok
-wrong sql-statement: query failure works ok
-too many parameters: query failure works ok
-too few parameters: query failure works ok
diff --git a/ext/dbx/tests/006.phpt b/ext/dbx/tests/006.phpt
deleted file mode 100644
index e5aa925a97..0000000000
--- a/ext/dbx/tests/006.phpt
+++ /dev/null
@@ -1,57 +0,0 @@
---TEST--
-dbx_error
---SKIPIF--
-<?php
-include_once("skipif.inc");
-?>
---FILE--
-<?php
-include_once("dbx_test.p");
-if ($module==DBX_ODBC || $module==DBX_OCI8) {
- // ODBC module doesn't have an error-message-function (yet?)
- // OCI8 module needs the query-handle instead of the db-handle (now what?)
- print('query generated an error: dbx_error works ok'."\n");
- print('query is valid: dbx_error works ok'."\n");
- print('wrong dbx_link_object: dbx_error failure works ok'."\n");
- print('too many parameters: dbx_error failure works ok'."\n");
- print('too few parameters: dbx_error failure works ok'."\n");
- }
-else {
-
-$sql_statement = "select * from tbl";
-$invalid_sql_statement = "invalid select * from tbl";
-$dlo = dbx_connect($module, $host, $database, $username, $password);
-if (!$dlo) {
- print('this won\'t work'."\n");
- }
-else {
- @dbx_query($dlo, "select nonexistingfield from tbl");
- if ((($module==DBX_MSSQL || $module==DBX_SYBASECT) && dbx_error($dlo)!="Changed database context to '".$database."'.".($module==DBX_SYBASECT?"\n":""))
- || strlen(dbx_error($dlo))) {
- print('query generated an error: dbx_error works ok'."\n");
- }
- dbx_query($dlo, "select description from tbl");
- if (!strlen(dbx_error($dlo)) || (($module==DBX_MSSQL || $module==DBX_SYBASECT) && dbx_error($dlo)=="Changed database context to '".$database."'.".($module==DBX_SYBASECT?"\n":""))) {
- print('query is valid: dbx_error works ok'."\n");
- }
- else print(dbx_error($dlo));
- if (!@dbx_error(0)) {
- print('wrong dbx_link_object: dbx_error failure works ok'."\n");
- }
- if (!@dbx_error($dlo, "12many")) {
- print('too many parameters: dbx_error failure works ok'."\n");
- }
- if (!@dbx_error()) {
- print('too few parameters: dbx_error failure works ok'."\n");
- }
- dbx_close($dlo);
- }
-
- }
-?>
---EXPECT--
-query generated an error: dbx_error works ok
-query is valid: dbx_error works ok
-wrong dbx_link_object: dbx_error failure works ok
-too many parameters: dbx_error failure works ok
-too few parameters: dbx_error failure works ok
diff --git a/ext/dbx/tests/007.phpt b/ext/dbx/tests/007.phpt
deleted file mode 100644
index cc049782f7..0000000000
--- a/ext/dbx/tests/007.phpt
+++ /dev/null
@@ -1,74 +0,0 @@
---TEST--
-dbx_sort
---SKIPIF--
-<?php
-include_once("skipif.inc");
-?>
---FILE--
-<?php
-include_once("dbx_test.p");
-$sql_statement = "select id, description from tbl where parentid=1 order by id";
-$compare_function = "cmp";
-$invalid_compare_function = "invalid_cmp";
-$nonexisting_compare_function = "nonexisting_cmp";
-$dlo = dbx_connect($module, $host, $database, $username, $password);
-function invalid_cmp() {
- return "blabla";
- }
-function cmp($a, $b) {
- $rv = dbx_compare($a, $b, "description");
- if (!$rv) $rv = dbx_compare($a, $b, "id");
- return $rv;
- }
-if (!$dlo) {
- print('this won\'t work'."\n");
- }
-else {
- $dro = dbx_query($dlo, $sql_statement);
- if (!$dro) {
- print('this won\'t work'."\n");
- }
- for ($i=0; $i<$dro->rows; ++$i) {
- print($dro->data[$i]['id'].".".$dro->data[$i]['description']."\n");
- }
- if (dbx_sort($dro, $compare_function)) {
- for ($i=0; $i<$dro->rows; ++$i) {
- print($dro->data[$i]['id'].".".$dro->data[$i]['description']."\n");
- }
- }
- if (!@dbx_sort(0, $compare_function)) {
- print('wrong dbx_result_object: dbx_sort failure works ok'."\n");
- }
- if (dbx_sort($dro, $nonexisting_compare_function)) {
- print('nonexisting compare function: dbx_sort will NOT complain'."\n");
- }
- if (dbx_sort($dro, $invalid_compare_function)) {
- print('invalid compare function: dbx_sort will NOT complain'."\n");
- }
- if (!@dbx_sort($dro, $compare_function, "12many")) {
- print('too many parameters: dbx_sort failure works ok'."\n");
- }
- if (!@dbx_sort($dro)) {
- print('too few parameters: dbx_sort failure works ok'."\n");
- }
- dbx_close($dlo);
- }
-?>
---EXPECT--
-10.abc
-20.cba
-30.bac
-40.100
-50.20
-60.20
-40.100
-50.20
-60.20
-10.abc
-30.bac
-20.cba
-wrong dbx_result_object: dbx_sort failure works ok
-nonexisting compare function: dbx_sort will NOT complain
-invalid compare function: dbx_sort will NOT complain
-too many parameters: dbx_sort failure works ok
-too few parameters: dbx_sort failure works ok \ No newline at end of file
diff --git a/ext/dbx/tests/008.phpt b/ext/dbx/tests/008.phpt
deleted file mode 100644
index 92533bba52..0000000000
--- a/ext/dbx/tests/008.phpt
+++ /dev/null
@@ -1,146 +0,0 @@
---TEST--
-dbx_compare
---SKIPIF--
-<?php
-include_once("skipif.inc");
-?>
---FILE--
-<?php
-include_once("dbx_test.p");
-$sql_statement = "select id, description from tbl where parentid=1 order by id";
-$compare_function_1 = "cmp_description_id";
-$compare_function_2 = "cmp_description_desc_id";
-$compare_function_3 = "cmp_description_id_desc";
-$compare_function_4 = "cmp_description_desc_id_desc";
-$compare_function_5 = "cmp_description_txt_id";
-$compare_function_6 = "cmp_description_number_id";
-$dlo = dbx_connect($module, $host, $database, $username, $password);
-function cmp_description_id($a, $b) {
- $rv = dbx_compare($a, $b, "description");
- if (!$rv) $rv = dbx_compare($a, $b, "id");
- return $rv;
- }
-function cmp_description_desc_id($a, $b) {
- $rv = dbx_compare($a, $b, "description", DBX_CMP_DESC);
- if (!$rv) $rv = dbx_compare($a, $b, "id");
- return $rv;
- }
-function cmp_description_id_desc($a, $b) {
- $rv = dbx_compare($a, $b, "description");
- if (!$rv) $rv = dbx_compare($a, $b, "id", DBX_CMP_DESC);
- return $rv;
- }
-function cmp_description_desc_id_desc($a, $b) {
- $rv = dbx_compare($a, $b, "description", DBX_CMP_DESC);
- if (!$rv) $rv = dbx_compare($a, $b, "id", DBX_CMP_DESC);
- return $rv;
- }
-function cmp_description_txt_id($a, $b) {
- $rv = dbx_compare($a, $b, "description", DBX_CMP_TEXT);
- if (!$rv) $rv = dbx_compare($a, $b, "id");
- return $rv;
- }
-function cmp_description_number_id($a, $b) {
- $rv = dbx_compare($a, $b, "description", DBX_CMP_NUMBER);
- if (!$rv) $rv = dbx_compare($a, $b, "id");
- return $rv;
- }
-if (!$dlo) {
- print('this won\'t work'."\n");
- }
-else {
- $dro = dbx_query($dlo, $sql_statement);
- if (!$dro) {
- print('this won\'t work'."\n");
- }
- for ($i=0; $i<$dro->rows; ++$i) {
- print($dro->data[$i]['id'].".".$dro->data[$i]['description']."\n");
- }
- if (dbx_sort($dro, $compare_function_1)) {
- for ($i=0; $i<$dro->rows; ++$i) {
- print($dro->data[$i]['id'].".".$dro->data[$i]['description']."\n");
- }
- }
- if (dbx_sort($dro, $compare_function_2)) {
- for ($i=0; $i<$dro->rows; ++$i) {
- print($dro->data[$i]['id'].".".$dro->data[$i]['description']."\n");
- }
- }
- if (dbx_sort($dro, $compare_function_3)) {
- for ($i=0; $i<$dro->rows; ++$i) {
- print($dro->data[$i]['id'].".".$dro->data[$i]['description']."\n");
- }
- }
- if (dbx_sort($dro, $compare_function_4)) {
- for ($i=0; $i<$dro->rows; ++$i) {
- print($dro->data[$i]['id'].".".$dro->data[$i]['description']."\n");
- }
- }
- if (dbx_sort($dro, $compare_function_5)) {
- for ($i=0; $i<$dro->rows; ++$i) {
- print($dro->data[$i]['id'].".".$dro->data[$i]['description']."\n");
- }
- }
- if (dbx_sort($dro, $compare_function_6)) {
- for ($i=0; $i<$dro->rows; ++$i) {
- print($dro->data[$i]['id'].".".$dro->data[$i]['description']."\n");
- }
- }
- if (!@dbx_compare($a, $b, "fieldname")) {
- print('wrong parameters: dbx_compare failure works ok'."\n");
- }
- if (!@dbx_compare($a, $b, "fieldname", DBX_CMP_NATIVE, "12many")) {
- print('too many parameters: dbx_compare failure works ok'."\n");
- }
- if (!@dbx_compare($a, $b)) {
- print('too few parameters: dbx_compare failure works ok'."\n");
- }
- dbx_close($dlo);
- }
-?>
---EXPECT--
-10.abc
-20.cba
-30.bac
-40.100
-50.20
-60.20
-40.100
-50.20
-60.20
-10.abc
-30.bac
-20.cba
-20.cba
-30.bac
-10.abc
-50.20
-60.20
-40.100
-40.100
-60.20
-50.20
-10.abc
-30.bac
-20.cba
-20.cba
-30.bac
-10.abc
-60.20
-50.20
-40.100
-40.100
-50.20
-60.20
-10.abc
-30.bac
-20.cba
-10.0
-20.0
-30.0
-50.20
-60.20
-40.100
-wrong parameters: dbx_compare failure works ok
-too many parameters: dbx_compare failure works ok
-too few parameters: dbx_compare failure works ok \ No newline at end of file
diff --git a/ext/dbx/tests/009.phpt b/ext/dbx/tests/009.phpt
deleted file mode 100644
index f363de46b1..0000000000
--- a/ext/dbx/tests/009.phpt
+++ /dev/null
@@ -1,65 +0,0 @@
---TEST--
-dbx_escape_string
---SKIPIF--
-<?php
-include_once("skipif.inc");
-?>
---INI--
-magic_quotes_runtime=0
---FILE--
-<?php
-include_once("dbx_test.p");
-$sql_select_statement = "select * from tbl where id=999999 and parentid=999999";
-$sql_insert_statement = "insert into tbl (id, parentid, description) values (999999, 999999, 'temporary_record')";
-$sql_update_statement = "update tbl set field2 = '%s' where id=999999 and parentid=999999";
-$sql_delete_statement = "delete from tbl where id=999999 and parentid=999999";
-$dlo = dbx_connect($module, $host, $database, $username, $password);
-if (!$dlo) {
- print('this won\'t work'."\n");
- }
-else {
- // insert query
- dbx_query($dlo, $sql_insert_statement);
- // dbx_escape_string should make sure that an escaped string
- // is neatly passed through to the database, and on readout
- // it should be returned exactly the same as it went in
- function test_dbx_escape_string($txt)
- {
- $sql = sprintf($GLOBALS['sql_update_statement'], dbx_escape_string($GLOBALS['dlo'], $txt));
- if (dbx_query($GLOBALS['dlo'], $sql)) {
- if ($dro=dbx_query($GLOBALS['dlo'], $GLOBALS['sql_select_statement'])) {
- print(($dro->data[0]['field2']===$txt?'ok':'fail ('.$dro->data[0]['field2'].')').': '.$txt."\n");
- }
- }
- }
- test_dbx_escape_string('no special characters');
- test_dbx_escape_string('quote \' string');
- test_dbx_escape_string('doublequote " string');
- test_dbx_escape_string('backslash \\ string');
- test_dbx_escape_string('backslash and quote \\ \' string');
- test_dbx_escape_string('ampersand & string');
- // delete query
- dbx_query($dlo, $sql_delete_statement);
- // generate errors
- if (!@dbx_escape_string(0, "any_text")) {
- print('wrong dbx_link_object: escape_string failure works ok'."\n");
- }
- if (!@dbx_escape_string($dlo, "any_text", "12many")) {
- print('too many parameters: escape_string failure works ok'."\n");
- }
- if (!@dbx_escape_string($dlo)) {
- print('too few parameters: escape_string failure works ok'."\n");
- }
- dbx_close($dlo);
- }
-?>
---EXPECT--
-ok: no special characters
-ok: quote ' string
-ok: doublequote " string
-ok: backslash \ string
-ok: backslash and quote \ ' string
-ok: ampersand & string
-wrong dbx_link_object: escape_string failure works ok
-too many parameters: escape_string failure works ok
-too few parameters: escape_string failure works ok
diff --git a/ext/dbx/tests/010.phpt b/ext/dbx/tests/010.phpt
deleted file mode 100644
index 66f423de2c..0000000000
--- a/ext/dbx/tests/010.phpt
+++ /dev/null
@@ -1,52 +0,0 @@
---TEST--
-dbx_fetch_row
---SKIPIF--
-<?php
-include_once("skipif.inc");
-?>
---INI--
-magic_quotes_runtime=0
---FILE--
-<?php
-include_once("dbx_test.p");
-$sql_statement = "select * from tbl order by id";
-
-$dlo = dbx_connect($module, $host, $database, $username, $password);
-if (!$dlo) {
- print('this won\'t work'."\n");
- }
-else {
- // especially for sybase I need to set the textsize to >64 k, as one of the test-fields
- // requires this (shouldn't this be a php.ini-entry??)
- if ($connection === DBX_SYBASECT) @dbx_query($dlo, "set textsize 100000");
- // select query
- if ($dro=dbx_query($dlo, $sql_statement, DBX_RESULT_UNBUFFERED)) {
- while ($row = dbx_fetch_row($dro)) {
- print($dro->rows.".".$row['id'].".".$row['description'].".".$row['field1'].".".strlen($row['field2'])."\n");
- }
- }
- // generate errors
- $invalid_result_object = 'invalid';
- if (!@dbx_fetch_row($invalid_result_object)) {
- print('wrong dbx_result_object: fetch_row failure works ok'."\n");
- }
- if (!@dbx_fetch_row($dro, "12many")) {
- print('too many parameters: fetch_row failure works ok'."\n");
- }
- if (!@dbx_fetch_row()) {
- print('too few parameters: fetch_row failure works ok'."\n");
- }
- dbx_close($dlo);
- }
-?>
---EXPECT--
-1.1.root.empty fields.0
-2.10.abc.field2 contains single quote.3
-3.20.cba.field2 contains double quote.3
-4.30.bac.field2 contains >4k text.4591
-5.40.100.field2 contains >64k text.70051
-6.50.20.empty fields.0
-7.60.20.empty fields.0
-wrong dbx_result_object: fetch_row failure works ok
-too many parameters: fetch_row failure works ok
-too few parameters: fetch_row failure works ok
diff --git a/ext/dbx/tests/dbx_test.p b/ext/dbx/tests/dbx_test.p
deleted file mode 100644
index 5c98ca6dd0..0000000000
--- a/ext/dbx/tests/dbx_test.p
+++ /dev/null
@@ -1,73 +0,0 @@
-<?php
-// set the $connection to match your test-database setup
-// (possibly change the rest of the settings too)
-// e.g. $connection = DBX_MYSQL;
-$connection = NULL;
-switch ($connection) {
- case DBX_MYSQL:
- $module=DBX_MYSQL;
- $host="";
- $database="dbx_test";
- $username="dbx_testuser";
- $password="dbx_testpassword";
- $module_name="mysql";
- break;
- case DBX_MSSQL:
- $module=DBX_MSSQL;
- $host="HOLLY";
- $database="dbx_test";
- $username="";
- $password="";
- $module_name="mssql";
- break;
- case DBX_ODBC:
- $module=DBX_ODBC;
- $host="localhost";
- $database="dbx_test_mysql"; // "dbx_test_access";
- $username="dbx_testuser";
- $password="dbx_testpassword";
- $module_name="odbc";
- break;
- case DBX_PGSQL:
- $module=DBX_PGSQL;
- $host="";
- $database="dbx_test";
- $username="dbx_testuser";
- $password="dbx_testpassword";
- $module_name="pgsql";
- break;
- case DBX_FBSQL:
- $module=DBX_FBSQL;
- $host="";
- $database="dbx_test";
- $username="dbx_testuser";
- $password="dbx_testpassword";
- $module_name="fbsql";
- break;
- case DBX_OCI8:
- $module=DBX_OCI8;
- $host="";
- $database="dbx_test";
- $username="dbx_testuser";
- $password="dbx_testpassword";
- $module_name="oci8";
- break;
- case DBX_SYBASECT:
- $module=DBX_SYBASECT;
- $host="threesyb";
- $database="dbx_test";
- $username="dbx_testuser";
- $password="dbx_testpassword";
- $module_name="sybase_ct";
- break;
- case DBX_SQLITE:
- $module=DBX_SQLITE;
- $host="";
- $database="dbx_test.sqlite.db";
- $username="";
- $password="";
- $module_name="sqlite";
- break;
- }
-
-?> \ No newline at end of file
diff --git a/ext/dbx/tests/dbx_test.pgsql.script b/ext/dbx/tests/dbx_test.pgsql.script
deleted file mode 100644
index 316349df92..0000000000
--- a/ext/dbx/tests/dbx_test.pgsql.script
+++ /dev/null
@@ -1,37 +0,0 @@
-create database dbx_test;
-\cdbx_test
-
-create table tbl (
- id int NOT NULL default 0,
- parentid int NOT NULL default 0,
- description varchar(255) NULL,
- field1 text NULL,
- field2 text NULL,
- field3 text NULL,
- field4 text NULL,
- field5 text NULL,
- creation_date int8 NULL,
- PRIMARY KEY (id)
-);
-
-create index parentid on tbl (parentid);
-create index description on tbl (description);
-create index creation_date on tbl (creation_date);
-
-insert into tbl (id, parentid, description, field1, field2, field3, field4, field5, creation_date) values
- (1, 0, 'root', 'empty fields', '', '', '', '', 20010605110724 );
-insert into tbl (id, parentid, description, field1, field2, field3, field4, field5, creation_date) values
- (10, 1, 'abc', 'field2 contains single quote', 'x''x', '', '', '', 20010605110724);
-insert into tbl (id, parentid, description, field1, field2, field3, field4, field5, creation_date) values
- (20, 1, 'cba', 'field2 contains double quote', 'x"x', '', '', '', 20010605110724);
-insert into tbl (id, parentid, description, field1, field2, field3, field4, field5, creation_date) values
- (30, 1, 'bac', 'field2 contains >4k text', 'asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl mnv m,xztsie5i4wj5k34ntmnial4jl234k kjtk34j5hfu uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl mnv m,xztsie5i4wj5k34ntmnial4jl234k kjtk34j5hfu 8uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5kuiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl', '', '', '', 20010605110724);
-insert into tbl (id, parentid, description, field1, field2, field3, field4, field5, creation_date) values
- (40, 1, '100', 'field2 contains >64k text', 'asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl mnv m,xztsie5i4wj5k34ntmnial4jl234k kjtk34j5hfu uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl mnv m,xztsie5i4wj5k34ntmnial4jl234k kjtk34j5hfu 8uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5kuiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl mnv m,xztsie5i4wj5k34ntmnial4jl234k kjtk34j5hfu uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl mnv m,xztsie5i4wj5k34ntmnial4jl234k kjtk34j5hfu 8uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5kuiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl mnv m,xztsie5i4wj5k34ntmnial4jl234k kjtk34j5hfu uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl mnv m,xztsie5i4wj5k34ntmnial4jl234k kjtk34j5hfu 8uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5kuiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl mnv m,xztsie5i4wj5k34ntmnial4jl234k kjtk34j5hfu uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl mnv m,xztsie5i4wj5k34ntmnial4jl234k kjtk34j5hfu 8uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5kuiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl mnv m,xztsie5i4wj5k34ntmnial4jl234k kjtk34j5hfu uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl mnv m,xztsie5i4wj5k34ntmnial4jl234k kjtk34j5hfu 8uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5kuiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl mnv m,xztsie5i4wj5k34ntmnial4jl234k kjtk34j5hfu uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl mnv m,xztsie5i4wj5k34ntmnial4jl234k kjtk34j5hfu 8uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5kuiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl mnv m,xztsie5i4wj5k34ntmnial4jl234k kjtk34j5hfu uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl mnv m,xztsie5i4wj5k34ntmnial4jl234k kjtk34j5hfu 8uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5kuiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl mnv m,xztsie5i4wj5k34ntmnial4jl234k kjtk34j5hfu uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl mnv m,xztsie5i4wj5k34ntmnial4jl234k kjtk34j5hfu 8uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5kuiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl mnv m,xztsie5i4wj5k34ntmnial4jl234k kjtk34j5hfu uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl mnv m,xztsie5i4wj5k34ntmnial4jl234k kjtk34j5hfu 8uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5kuiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl mnv m,xztsie5i4wj5k34ntmnial4jl234k kjtk34j5hfu uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl mnv m,xztsie5i4wj5k34ntmnial4jl234k kjtk34j5hfu 8uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5kuiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl mnv m,xztsie5i4wj5k34ntmnial4jl234k kjtk34j5hfu uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl mnv m,xztsie5i4wj5k34ntmnial4jl234k kjtk34j5hfu 8uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5kuiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl mnv m,xztsie5i4wj5k34ntmnial4jl234k kjtk34j5hfu uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl mnv m,xztsie5i4wj5k34ntmnial4jl234k kjtk34j5hfu 8uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5kuiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl mnv m,xztsie5i4wj5k34ntmnial4jl234k kjtk34j5hfu uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl mnv m,xztsie5i4wj5k34ntmnial4jl234k kjtk34j5hfu 8uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5kuiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl mnv m,xztsie5i4wj5k34ntmnial4jl234k kjtk34j5hfu uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl mnv m,xztsie5i4wj5k34ntmnial4jl234k kjtk34j5hfu 8uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5kuiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl mnv m,xztsie5i4wj5k34ntmnial4jl234k kjtk34j5hfu uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl mnv m,xztsie5i4wj5k34ntmnial4jl234k kjtk34j5hfu 8uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5kuiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl mnv m,xztsie5i4wj5k34ntmnial4jl234k kjtk34j5hfu uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl mnv m,xztsie5i4wj5k34ntmnial4jl234k kjtk34j5hfu 8uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5kuiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl', '', '', '', 20010605110724);
-insert into tbl (id, parentid, description, field1, field2, field3, field4, field5, creation_date) values
- (50, 1, '20', 'empty fields', '', '', '', '', 20010605110724);
-insert into tbl (id, parentid, description, field1, field2, field3, field4, field5, creation_date) values
- (60, 1, '20', 'empty fields', '', '', '', '', 20010605110724);
-
-create user dbx_testuser with password 'dbx_testpassword';
-grant SELECT,INSERT,UPDATE,DELETE on tbl to dbx_testuser;
diff --git a/ext/dbx/tests/dbx_test.script b/ext/dbx/tests/dbx_test.script
deleted file mode 100644
index 1bad104fba..0000000000
--- a/ext/dbx/tests/dbx_test.script
+++ /dev/null
@@ -1,38 +0,0 @@
-
-create database if not exists dbx_test;
-use dbx_test;
-
-grant SELECT,INSERT,UPDATE,DELETE on dbx_test.* to dbx_testuser@localhost identified by 'dbx_testpassword';
-
-# info tables
-
-drop table if exists tbl;
-create table tbl (
- id int(10) NOT NULL default 0,
- parentid int(10) NOT NULL default 0,
- description varchar(255) NULL,
- field1 mediumtext NULL,
- field2 mediumtext NULL,
- field3 mediumtext NULL,
- field4 mediumtext NULL,
- field5 mediumtext NULL,
- creation_date timestamp NULL,
- PRIMARY KEY (id),
- KEY parentid (parentid),
- KEY description (description),
- KEY creation_date (creation_date)
- );
-
-insert into tbl (id, parentid, description, field1, field2, field3, field4, field5, creation_date) values
- (1, 0, 'root', 'empty fields', '', '', '', '', 20010605110724),
- (10, 1, 'abc', 'field2 contains single quote', 'x''x', '', '', '', 20010605110724),
- (20, 1, 'cba', 'field2 contains double quote', 'x"x', '', '', '', 20010605110724),
- (30, 1, 'bac', 'field2 contains >4k text',
- 'asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl mnv m,xztsie5i4wj5k34ntmnial4jl234k kjtk34j5hfu uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl mnv m,xztsie5i4wj5k34ntmnial4jl234k kjtk34j5hfu 8uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5kuiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl',
- '', '', '', 20010605110724),
- (40, 1, '100', 'field2 contains >64k text',
- 'asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl mnv m,xztsie5i4wj5k34ntmnial4jl234k kjtk34j5hfu uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl mnv m,xztsie5i4wj5k34ntmnial4jl234k kjtk34j5hfu 8uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5kuiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl mnv m,xztsie5i4wj5k34ntmnial4jl234k kjtk34j5hfu uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl mnv m,xztsie5i4wj5k34ntmnial4jl234k kjtk34j5hfu 8uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5kuiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl mnv m,xztsie5i4wj5k34ntmnial4jl234k kjtk34j5hfu uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl mnv m,xztsie5i4wj5k34ntmnial4jl234k kjtk34j5hfu 8uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5kuiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl mnv m,xztsie5i4wj5k34ntmnial4jl234k kjtk34j5hfu uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl mnv m,xztsie5i4wj5k34ntmnial4jl234k kjtk34j5hfu 8uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5kuiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl mnv m,xztsie5i4wj5k34ntmnial4jl234k kjtk34j5hfu uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl mnv m,xztsie5i4wj5k34ntmnial4jl234k kjtk34j5hfu 8uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5kuiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl mnv m,xztsie5i4wj5k34ntmnial4jl234k kjtk34j5hfu uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl mnv m,xztsie5i4wj5k34ntmnial4jl234k kjtk34j5hfu 8uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5kuiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl mnv m,xztsie5i4wj5k34ntmnial4jl234k kjtk34j5hfu uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl mnv m,xztsie5i4wj5k34ntmnial4jl234k kjtk34j5hfu 8uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5kuiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl mnv m,xztsie5i4wj5k34ntmnial4jl234k kjtk34j5hfu uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl mnv m,xztsie5i4wj5k34ntmnial4jl234k kjtk34j5hfu 8uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5kuiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl mnv m,xztsie5i4wj5k34ntmnial4jl234k kjtk34j5hfu uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl mnv m,xztsie5i4wj5k34ntmnial4jl234k kjtk34j5hfu 8uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5kuiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl mnv m,xztsie5i4wj5k34ntmnial4jl234k kjtk34j5hfu uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl mnv m,xztsie5i4wj5k34ntmnial4jl234k kjtk34j5hfu 8uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5kuiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl mnv m,xztsie5i4wj5k34ntmnial4jl234k kjtk34j5hfu uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl mnv m,xztsie5i4wj5k34ntmnial4jl234k kjtk34j5hfu 8uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5kuiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl mnv m,xztsie5i4wj5k34ntmnial4jl234k kjtk34j5hfu uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl mnv m,xztsie5i4wj5k34ntmnial4jl234k kjtk34j5hfu 8uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5kuiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl mnv m,xztsie5i4wj5k34ntmnial4jl234k kjtk34j5hfu uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl mnv m,xztsie5i4wj5k34ntmnial4jl234k kjtk34j5hfu 8uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5kuiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl mnv m,xztsie5i4wj5k34ntmnial4jl234k kjtk34j5hfu uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl mnv m,xztsie5i4wj5k34ntmnial4jl234k kjtk34j5hfu 8uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5kuiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl mnv m,xztsie5i4wj5k34ntmnial4jl234k kjtk34j5hfu uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl mnv m,xztsie5i4wj5k34ntmnial4jl234k kjtk34j5hfu 8uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5kuiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl mnv m,xztsie5i4wj5k34ntmnial4jl234k kjtk34j5hfu uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl mnv m,xztsie5i4wj5k34ntmnial4jl234k kjtk34j5hfu 8uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5kuiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl uiod5w4 vkjlkarj ql32j5k4j3kj vkjkf jaktjk43j5k asjdhjsaeqw WJK213128Y2`Y12H WJHREJH4HWQEJHJHJSHFDWA4NBNs fjsdhr3wrbsndfbndsfbndsrbjwehrjkeh rfjdhfjdshfgnbgs aljdshgjfdsa jsdhfjdhgjs sdhfjsd kjejshrjewhrjewhrj hrj hjrhjfh jdhfjhsfjhgjjdrhehrj4whe jrhjhrjwe jhwr jhr jhejcrhwejrh 3kjwq4324ri f,mcvmn3qn m,wnrmwnf mn mndrweihr nfmgnrjkrakrfah fja kjfkdsjkrj43wkjrk34rf kncvnmn jew5 r4rjkwej4k23j kjrkewj lk34j 4kjkljklaje kj4kj5k43jklakrjklej4kj k4j5k4wjksckk4jkl43j5k 4j5kfcsc ksd rk43wj 5kjk ejrkjkwjrk32j4 kjkj4kj4rkje kjewk jk45j432k5j wkjrk23j4k k324j598dfkl',
- '', '', '', 20010605110724),
- (50, 1, '20', 'empty fields', '', '', '', '', 20010605110724),
- (60, 1, '20', 'empty fields', '', '', '', '', 20010605110724)
- ; \ No newline at end of file
diff --git a/ext/dbx/tests/skipif.inc b/ext/dbx/tests/skipif.inc
deleted file mode 100644
index 1dffdc6d22..0000000000
--- a/ext/dbx/tests/skipif.inc
+++ /dev/null
@@ -1,6 +0,0 @@
-<?php
- if (!extension_loaded("dbx")) die("skip");
- include_once("dbx_test.p");
- if ($connection===NULL) die("skip connection not specified");
- die("info using $module_name");
-?> \ No newline at end of file
diff --git a/ext/dio/EXPERIMENTAL b/ext/dio/EXPERIMENTAL
deleted file mode 100644
index e69de29bb2..0000000000
--- a/ext/dio/EXPERIMENTAL
+++ /dev/null
diff --git a/ext/dio/config.m4 b/ext/dio/config.m4
deleted file mode 100644
index 59d24229e1..0000000000
--- a/ext/dio/config.m4
+++ /dev/null
@@ -1,10 +0,0 @@
-dnl
-dnl $Id$
-dnl
-
-PHP_ARG_ENABLE(dio, whether to enable direct I/O support,
-[ --enable-dio Enable direct I/O support])
-
-if test "$PHP_DIO" != "no"; then
- PHP_NEW_EXTENSION(dio, dio.c, $ext_shared)
-fi
diff --git a/ext/dio/config.w32 b/ext/dio/config.w32
deleted file mode 100644
index 74f0871fb1..0000000000
--- a/ext/dio/config.w32
+++ /dev/null
@@ -1,9 +0,0 @@
-// $Id$
-// vim:ft=javascript
-
-ARG_ENABLE("dio", "Enable the direct I/O support", "no");
-
-if (PHP_DIO != "no") {
- EXTENSION("dio", "dio.c");
- AC_DEFINE('HAVE_DIO', 1, 'dio support');
-}
diff --git a/ext/dio/dio.c b/ext/dio/dio.c
deleted file mode 100644
index 6f89bd61fb..0000000000
--- a/ext/dio/dio.c
+++ /dev/null
@@ -1,642 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Sterling Hughes <sterling@php.net> |
- +----------------------------------------------------------------------+
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "php.h"
-#include "php_ini.h"
-#include "ext/standard/info.h"
-#include "php_dio.h"
-
-#include <sys/stat.h>
-#include <sys/types.h>
-
-#ifdef HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-
-#include <fcntl.h>
-#ifndef PHP_WIN32
-#include <termios.h>
-#endif
-
-/* e.g. IRIX does not have CRTSCTS */
-#ifndef CRTSCTS
-# ifdef CNEW_RTSCTS
-# define CRTSCTS CNEW_RTSCTS
-# else
-# define CRTSCTS 0
-# endif /* CNEW_RTSCTS */
-#endif /* !CRTSCTS */
-
-#define le_fd_name "Direct I/O File Descriptor"
-static int le_fd;
-
-function_entry dio_functions[] = {
- PHP_FE(dio_open, NULL)
-#ifndef PHP_WIN32
- PHP_FE(dio_truncate, NULL)
-#endif
- PHP_FE(dio_stat, NULL)
- PHP_FE(dio_seek, NULL)
-#ifndef PHP_WIN32
- PHP_FE(dio_fcntl, NULL)
-#endif
- PHP_FE(dio_read, NULL)
- PHP_FE(dio_write, NULL)
- PHP_FE(dio_close, NULL)
-#ifndef PHP_WIN32
- PHP_FE(dio_tcsetattr, NULL)
-#endif
- {NULL, NULL, NULL}
-};
-
-zend_module_entry dio_module_entry = {
- STANDARD_MODULE_HEADER,
- "dio",
- dio_functions,
- PHP_MINIT(dio),
- NULL,
- NULL,
- NULL,
- PHP_MINFO(dio),
- "0.1",
- STANDARD_MODULE_PROPERTIES
-};
-
-#ifdef COMPILE_DL_DIO
-ZEND_GET_MODULE(dio)
-#endif
-
-static void _dio_close_fd(zend_rsrc_list_entry *rsrc TSRMLS_DC)
-{
- php_fd_t *f = (php_fd_t *) rsrc->ptr;
- close(f->fd);
- free(f);
-}
-
-#define RDIOC(c) REGISTER_LONG_CONSTANT(#c, c, CONST_CS | CONST_PERSISTENT)
-#define DIO_UNDEF_CONST -1
-
-PHP_MINIT_FUNCTION(dio)
-{
- le_fd = zend_register_list_destructors_ex(_dio_close_fd, NULL, le_fd_name, module_number);
-
- RDIOC(O_RDONLY);
- RDIOC(O_WRONLY);
- RDIOC(O_RDWR);
- RDIOC(O_CREAT);
- RDIOC(O_EXCL);
- RDIOC(O_TRUNC);
- RDIOC(O_APPEND);
-#ifdef O_NONBLOCK
- RDIOC(O_NONBLOCK);
-#endif
-#ifdef O_NDELAY
- RDIOC(O_NDELAY);
-#endif
-#ifdef O_SYNC
- RDIOC(O_SYNC);
-#endif
-#ifdef O_ASYNC
- RDIOC(O_ASYNC);
-#endif
-#ifdef O_NOCTTY
- RDIOC(O_NOCTTY);
-#endif
-#ifndef PHP_WIN32
- RDIOC(S_IRWXU);
- RDIOC(S_IRUSR);
- RDIOC(S_IWUSR);
- RDIOC(S_IXUSR);
- RDIOC(S_IRWXG);
- RDIOC(S_IRGRP);
- RDIOC(S_IWGRP);
- RDIOC(S_IXGRP);
- RDIOC(S_IRWXO);
- RDIOC(S_IROTH);
- RDIOC(S_IWOTH);
- RDIOC(S_IXOTH);
- RDIOC(F_DUPFD);
- RDIOC(F_GETFD);
- RDIOC(F_GETFL);
- RDIOC(F_SETFL);
- RDIOC(F_GETLK);
- RDIOC(F_SETLK);
- RDIOC(F_SETLKW);
- RDIOC(F_SETOWN);
- RDIOC(F_GETOWN);
- RDIOC(F_UNLCK);
- RDIOC(F_RDLCK);
- RDIOC(F_WRLCK);
-#endif
-
- return SUCCESS;
-}
-
-PHP_MINFO_FUNCTION(dio)
-{
- php_info_print_table_start();
- php_info_print_table_row(2, "dio support", "enabled");
- php_info_print_table_end();
-}
-
-static void new_php_fd(php_fd_t **f, int fd)
-{
- *f = malloc(sizeof(php_fd_t));
- (*f)->fd = fd;
-}
-
-/* {{{ proto resource dio_open(string filename, int flags[, int mode])
- Open a new filename with specified permissions of flags and creation permissions of mode */
-PHP_FUNCTION(dio_open)
-{
- php_fd_t *f;
- char *file_name;
- int file_name_length;
- long flags;
- long mode = 0;
- int fd;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "sl|l", &file_name, &file_name_length, &flags, &mode) == FAILURE) {
- return;
- }
-
- if (php_check_open_basedir(file_name TSRMLS_CC) || (PG(safe_mode) && !php_checkuid(file_name, "wb+", CHECKUID_CHECK_MODE_PARAM))) {
- RETURN_FALSE;
- }
-
- if (ZEND_NUM_ARGS() == 3) {
- fd = open(file_name, flags, mode);
- } else {
- fd = open(file_name, flags);
- }
-
- if (fd == -1) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "cannot open file %s with flags %ld and permissions %ld: %s", file_name, flags, mode, strerror(errno));
- RETURN_FALSE;
- }
-
- new_php_fd(&f, fd);
- ZEND_REGISTER_RESOURCE(return_value, f, le_fd);
-}
-/* }}} */
-
-/* {{{ proto string dio_read(resource fd[, int n])
- Read n bytes from fd and return them, if n is not specified, read 1k */
-PHP_FUNCTION(dio_read)
-{
- zval *r_fd;
- php_fd_t *f;
- char *data;
- long bytes = 1024;
- ssize_t res;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r|l", &r_fd, &bytes) == FAILURE) {
- return;
- }
-
- ZEND_FETCH_RESOURCE(f, php_fd_t *, &r_fd, -1, le_fd_name, le_fd);
-
- if (bytes <= 0) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Length parameter must be greater than 0.");
- RETURN_FALSE;
- }
-
- data = emalloc(bytes + 1);
- res = read(f->fd, data, bytes);
- if (res <= 0) {
- efree(data);
- RETURN_NULL();
- }
-
- data = erealloc(data, res + 1);
- data[res] = 0;
-
- RETURN_STRINGL(data, res, 0);
-}
-/* }}} */
-
-/* {{{ proto int dio_write(resource fd, string data[, int len])
- Write data to fd with optional truncation at length */
-PHP_FUNCTION(dio_write)
-{
- zval *r_fd;
- php_fd_t *f;
- char *data;
- int data_len;
- long trunc_len = 0;
- ssize_t res;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rs|l", &r_fd, &data, &data_len, &trunc_len) == FAILURE) {
- return;
- }
-
- if (trunc_len < 0 || trunc_len > data_len) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "length must be greater or equal to zero and less then the length of the specified string.");
- RETURN_FALSE;
- }
-
- ZEND_FETCH_RESOURCE(f, php_fd_t *, &r_fd, -1, le_fd_name, le_fd);
-
- res = write(f->fd, data, trunc_len ? trunc_len : data_len);
- if (res == -1) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "cannot write data to file descriptor %d, %s", f->fd, strerror(errno));
- }
-
- RETURN_LONG(res);
-}
-/* }}} */
-
-#ifndef PHP_WIN32
-/* {{{ proto bool dio_truncate(resource fd, int offset)
- Truncate file descriptor fd to offset bytes */
-PHP_FUNCTION(dio_truncate)
-{
- zval *r_fd;
- php_fd_t *f;
- long offset;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rl", &r_fd, &offset) == FAILURE) {
- return;
- }
-
- ZEND_FETCH_RESOURCE(f, php_fd_t *, &r_fd, -1, le_fd_name, le_fd);
-
- if (ftruncate(f->fd, offset) == -1) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "couldn't truncate %d to %ld bytes: %s", f->fd, offset, strerror(errno));
- RETURN_FALSE;
- }
-
- RETURN_TRUE;
-}
-/* }}} */
-#endif
-
-#define ADD_FIELD(f, v) add_assoc_long_ex(return_value, (f), sizeof(f), v);
-
-/* {{{ proto array dio_stat(resource fd)
- Get stat information about the file descriptor fd */
-PHP_FUNCTION(dio_stat)
-{
- zval *r_fd;
- php_fd_t *f;
- struct stat s;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &r_fd) == FAILURE) {
- return;
- }
-
- ZEND_FETCH_RESOURCE(f, php_fd_t *, &r_fd, -1, le_fd_name, le_fd);
-
- if (fstat(f->fd, &s) == -1) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "cannot stat %d: %s", f->fd, strerror(errno));
- RETURN_FALSE;
- }
-
- array_init(return_value);
- ADD_FIELD("device", s.st_dev);
- ADD_FIELD("inode", s.st_ino);
- ADD_FIELD("mode", s.st_mode);
- ADD_FIELD("nlink", s.st_nlink);
- ADD_FIELD("uid", s.st_uid);
- ADD_FIELD("gid", s.st_gid);
- ADD_FIELD("device_type", s.st_rdev);
- ADD_FIELD("size", s.st_size);
-#ifndef PHP_WIN32
- ADD_FIELD("block_size", s.st_blksize);
- ADD_FIELD("blocks", s.st_blocks);
-#endif
- ADD_FIELD("atime", s.st_atime);
- ADD_FIELD("mtime", s.st_mtime);
- ADD_FIELD("ctime", s.st_ctime);
-}
-/* }}} */
-
-/* {{{ proto int dio_seek(resource fd, int pos, int whence)
- Seek to pos on fd from whence */
-PHP_FUNCTION(dio_seek)
-{
- zval *r_fd;
- php_fd_t *f;
- long offset;
- long whence = SEEK_SET;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rl|l", &r_fd, &offset, &whence) == FAILURE) {
- return;
- }
-
- ZEND_FETCH_RESOURCE(f, php_fd_t *, &r_fd, -1, le_fd_name, le_fd);
-
- RETURN_LONG(lseek(f->fd, offset, whence));
-}
-/* }}} */
-
-#ifndef PHP_WIN32
-/* {{{ proto mixed dio_fcntl(resource fd, int cmd[, mixed arg])
- Perform a c library fcntl on fd */
-PHP_FUNCTION(dio_fcntl)
-{
- zval *r_fd;
- zval *arg = NULL;
- php_fd_t *f;
- long cmd;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rl|z", &r_fd, &cmd, &arg) == FAILURE) {
- return;
- }
-
- ZEND_FETCH_RESOURCE(f, php_fd_t *, &r_fd, -1, le_fd_name, le_fd);
-
- switch (cmd) {
- case F_SETLK:
- case F_SETLKW: {
- zval **element;
- struct flock lk = {0};
- HashTable *fh;
-
- if (!arg) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "expects argument 3 to be array or int, none given");
- RETURN_FALSE;
- }
- if (Z_TYPE_P(arg) == IS_ARRAY) {
- fh = HASH_OF(arg);
- if (zend_hash_find(fh, "start", sizeof("start"), (void **) &element) == FAILURE) {
- lk.l_start = 0;
- } else {
- lk.l_start = Z_LVAL_PP(element);
- }
-
- if (zend_hash_find(fh, "length", sizeof("length"), (void **) &element) == FAILURE) {
- lk.l_len = 0;
- } else {
- lk.l_len = Z_LVAL_PP(element);
- }
-
- if (zend_hash_find(fh, "whence", sizeof("whence"), (void **) &element) == FAILURE) {
- lk.l_whence = 0;
- } else {
- lk.l_whence = Z_LVAL_PP(element);
- }
-
- if (zend_hash_find(fh, "type", sizeof("type"), (void **) &element) == FAILURE) {
- lk.l_type = 0;
- } else {
- lk.l_type = Z_LVAL_PP(element);
- }
- } else if (Z_TYPE_P(arg) == IS_LONG) {
- lk.l_start = 0;
- lk.l_len = 0;
- lk.l_whence = SEEK_SET;
- lk.l_type = Z_LVAL_P(arg);
- } else {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "expects argument 3 to be array or int, %s given", zend_zval_type_name(arg));
- RETURN_FALSE;
- }
-
- RETURN_LONG(fcntl(f->fd, cmd, &lk));
- break;
- }
- case F_GETLK: {
- struct flock lk = {0};
-
- fcntl(f->fd, cmd, &lk);
-
- array_init(return_value);
- add_assoc_long(return_value, "type", lk.l_type);
- add_assoc_long(return_value, "whence", lk.l_whence);
- add_assoc_long(return_value, "start", lk.l_start);
- add_assoc_long(return_value, "length", lk.l_len);
- add_assoc_long(return_value, "pid", lk.l_pid);
-
- break;
- }
- case F_DUPFD: {
- php_fd_t *new_f;
-
- if (!arg || Z_TYPE_P(arg) != IS_LONG) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "expects argument 3 to be int");
- RETURN_FALSE;
- }
-
- new_php_fd(&new_f, fcntl(f->fd, cmd, Z_LVAL_P(arg)));
- ZEND_REGISTER_RESOURCE(return_value, new_f, le_fd);
- break;
- }
- default:
- if (!arg || Z_TYPE_P(arg) != IS_LONG) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "expects argument 3 to be int");
- RETURN_FALSE;
- }
-
- RETURN_LONG(fcntl(f->fd, cmd, Z_LVAL_P(arg)));
- }
-}
-/* }}} */
-#endif
-
-#ifndef PHP_WIN32
-/* {{{ proto mixed dio_tcsetattr(resource fd, array args )
- Perform a c library tcsetattr on fd */
-PHP_FUNCTION(dio_tcsetattr)
-{
- zval *r_fd;
- zval *arg = NULL;
- php_fd_t *f;
- struct termios newtio;
- int Baud_Rate, Data_Bits=8, Stop_Bits=1, Parity=0;
- long BAUD,DATABITS,STOPBITS,PARITYON,PARITY;
- HashTable *fh;
- zval **element;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rz", &r_fd, &arg) == FAILURE) {
- return;
- }
-
- ZEND_FETCH_RESOURCE(f, php_fd_t *, &r_fd, -1, le_fd_name, le_fd);
-
- if (Z_TYPE_P(arg) != IS_ARRAY) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING,"tcsetattr, third argument should be an associative array");
- return;
- }
-
- fh = HASH_OF(arg);
-
- if (zend_hash_find(fh, "baud", sizeof("baud"), (void **) &element) == FAILURE) {
- Baud_Rate = 9600;
- } else {
- Baud_Rate = Z_LVAL_PP(element);
- }
-
- if (zend_hash_find(fh, "bits", sizeof("bits"), (void **) &element) == FAILURE) {
- Data_Bits = 8;
- } else {
- Data_Bits = Z_LVAL_PP(element);
- }
-
- if (zend_hash_find(fh, "stop", sizeof("stop"), (void **) &element) == FAILURE) {
- Stop_Bits = 1;
- } else {
- Stop_Bits = Z_LVAL_PP(element);
- }
-
- if (zend_hash_find(fh, "parity", sizeof("parity"), (void **) &element) == FAILURE) {
- Parity = 0;
- } else {
- Parity = Z_LVAL_PP(element);
- }
-
- /* assign to correct values... */
- switch (Baud_Rate) {
- case 38400:
- BAUD = B38400;
- break;
- case 19200:
- BAUD = B19200;
- break;
- case 9600:
- BAUD = B9600;
- break;
- case 4800:
- BAUD = B4800;
- break;
- case 2400:
- BAUD = B2400;
- break;
- case 1800:
- BAUD = B1800;
- break;
- case 1200:
- BAUD = B1200;
- break;
- case 600:
- BAUD = B600;
- break;
- case 300:
- BAUD = B300;
- break;
- case 200:
- BAUD = B200;
- break;
- case 150:
- BAUD = B150;
- break;
- case 134:
- BAUD = B134;
- break;
- case 110:
- BAUD = B110;
- break;
- case 75:
- BAUD = B75;
- break;
- case 50:
- BAUD = B50;
- break;
- default:
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "invalid baud rate %d", Baud_Rate);
- RETURN_FALSE;
- }
- switch (Data_Bits) {
- case 8:
- DATABITS = CS8;
- break;
- case 7:
- DATABITS = CS7;
- break;
- case 6:
- DATABITS = CS6;
- break;
- case 5:
- DATABITS = CS5;
- break;
- default:
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "invalid data bits %d", Data_Bits);
- RETURN_FALSE;
- }
- switch (Stop_Bits) {
- case 1:
- STOPBITS = 0;
- break;
- case 2:
- STOPBITS = CSTOPB;
- break;
- default:
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "invalid stop bits %d", Stop_Bits);
- RETURN_FALSE;
- }
-
- switch (Parity) {
- case 0:
- PARITYON = 0;
- PARITY = 0;
- break;
- case 1:
- PARITYON = PARENB;
- PARITY = PARODD;
- break;
- case 2:
- PARITYON = PARENB;
- PARITY = 0;
- break;
- default:
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "invalid parity %d", Parity);
- RETURN_FALSE;
- }
-
- newtio.c_cflag = BAUD | CRTSCTS | DATABITS | STOPBITS | PARITYON | PARITY | CLOCAL | CREAD;
- newtio.c_iflag = IGNPAR;
- newtio.c_oflag = 0;
- newtio.c_lflag = 0; /* ICANON; */
- newtio.c_cc[VMIN] = 1;
- newtio.c_cc[VTIME] = 0;
- tcflush(f->fd, TCIFLUSH);
- tcsetattr(f->fd,TCSANOW,&newtio);
-
- RETURN_TRUE;
-}
-/* }}} */
-#endif
-
-/* {{{ proto void dio_close(resource fd)
- Close the file descriptor given by fd */
-PHP_FUNCTION(dio_close)
-{
- zval *r_fd;
- php_fd_t *f;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &r_fd) == FAILURE) {
- return;
- }
-
- ZEND_FETCH_RESOURCE(f, php_fd_t *, &r_fd, -1, le_fd_name, le_fd);
-
- zend_list_delete(Z_LVAL_P(r_fd));
-}
-/* }}} */
-
-/*
- * Local variables:
- * c-basic-offset: 4
- * tab-width: 4
- * End:
- * vim600: fdm=marker
- * vim: sw=4 ts=4 noet
- */
diff --git a/ext/dio/package.xml b/ext/dio/package.xml
deleted file mode 100644
index 90a18fd79d..0000000000
--- a/ext/dio/package.xml
+++ /dev/null
@@ -1,46 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1" ?>
-<!DOCTYPE package SYSTEM "../pear/package.dtd">
-<package>
- <name>dio</name>
- <summary>Direct I/O functions</summary>
- <maintainers>
- <maintainer>
- <user>sterling</user>
- <name>Sterling Hughes</name>
- <email>sterling@php.net</email>
- <role>lead</role>
- </maintainer>
- </maintainers>
- <description>
-PHP supports the direct io functions as described in the
-Posix Standard (Section 6) for performing I/O functions at
-a lower level than the C-Language stream I/O functions
-(fopen(), fread(),..). The use of the DIO functions should
-be considered only when direct control of a device is needed.
-In all other cases, the standard filesystem functions are
-more than adequate.
- </description>
- <license>PHP</license>
- <release>
- <state>beta</state>
- <version>5.0rc1</version>
- <date>2004-03-19</date>
- <notes>
-package.xml added to support intallation using pear installer
- </notes>
- <filelist>
- <file role="doc" name="CREDITS"/>
- <file role="src" name="config.m4"/>
- <file role="src" name="dio.c"/>
- <file role="src" name="php_dio.h"/>
- <file role="test" name="tests/001.phpt"/>
- </filelist>
- <deps>
- <dep type="php" rel="ge" version="5" />
- <!-- doesn't work yet <dep type="os" rel="has" name="unix" /> -->
- </deps>
- </release>
-</package>
-<!--
-vim:et:ts=1:sw=1
--->
diff --git a/ext/dio/php_dio.h b/ext/dio/php_dio.h
deleted file mode 100644
index 25a47149ea..0000000000
--- a/ext/dio/php_dio.h
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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. |
- +----------------------------------------------------------------------+
- */
-
-#ifndef PHP_DIO_H
-#define PHP_DIO_H
-
-extern zend_module_entry dio_module_entry;
-#define phpext_dio_ptr &dio_module_entry
-
-#ifdef PHP_WIN32
-#define PHP_DIO_API __declspec(dllexport)
-#else
-#define PHP_DIO_API
-#endif
-
-#ifdef ZTS
-#include "TSRM.h"
-#endif
-
-PHP_MINIT_FUNCTION(dio);
-PHP_MSHUTDOWN_FUNCTION(dio);
-PHP_RINIT_FUNCTION(dio);
-PHP_RSHUTDOWN_FUNCTION(dio);
-PHP_MINFO_FUNCTION(dio);
-
-PHP_FUNCTION(dio_open);
-PHP_FUNCTION(dio_truncate);
-PHP_FUNCTION(dio_stat);
-PHP_FUNCTION(dio_seek);
-PHP_FUNCTION(dio_read);
-PHP_FUNCTION(dio_write);
-PHP_FUNCTION(dio_fcntl);
-PHP_FUNCTION(dio_close);
-PHP_FUNCTION(dio_tcsetattr);
-
-typedef struct {
- int fd;
-} php_fd_t;
-
-#endif
-
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * indent-tabs-mode: t
- * End:
- */
diff --git a/ext/dio/tests/001.phpt b/ext/dio/tests/001.phpt
deleted file mode 100644
index 0d8a660ba3..0000000000
--- a/ext/dio/tests/001.phpt
+++ /dev/null
@@ -1,21 +0,0 @@
---TEST--
-Check for dio presence
---SKIPIF--
-<?php if (!extension_loaded("dio")) print "skip"; ?>
---FILE--
-<?php
-echo "dio extension is available";
-/*
- you can add regression tests for your extension here
-
- the output of your test code has to be equal to the
- text in the --EXPECT-- section below for the tests
- to pass, differences between the output and the
- expected text are interpreted as failure
-
- see php5/tests/README for further information on
- writing regression tests
-*/
-?>
---EXPECT--
-dio extension is available \ No newline at end of file
diff --git a/ext/dom/CREDITS b/ext/dom/CREDITS
deleted file mode 100644
index b78e376d6e..0000000000
--- a/ext/dom/CREDITS
+++ /dev/null
@@ -1,2 +0,0 @@
-DOM
-Christian Stocker, Rob Richards, Marcus Boerger
diff --git a/ext/dom/TODO b/ext/dom/TODO
deleted file mode 100644
index 52afb18216..0000000000
--- a/ext/dom/TODO
+++ /dev/null
@@ -1,4 +0,0 @@
-For 5.1
-1) enhance XPath functionality
-2) look at auto encoding support for in/output
-3) What DOM object types are really needed (i.e. not currently using DOMString)
diff --git a/ext/dom/attr.c b/ext/dom/attr.c
deleted file mode 100644
index ceb97b5940..0000000000
--- a/ext/dom/attr.c
+++ /dev/null
@@ -1,283 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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. |
- +----------------------------------------------------------------------+
- | Authors: Christian Stocker <chregu@php.net> |
- | Rob Richards <rrichards@php.net> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "php.h"
-
-#if HAVE_LIBXML && HAVE_DOM
-
-#include "php_dom.h"
-
-
-/*
-* class DOMAttr extends DOMNode
-*
-* URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#ID-637646024
-* Since:
-*/
-
-zend_function_entry php_dom_attr_class_functions[] = {
- PHP_FALIAS(isId, dom_attr_is_id, NULL)
- PHP_ME(domattr, __construct, NULL, ZEND_ACC_PUBLIC)
- {NULL, NULL, NULL}
-};
-
-/* {{{ proto void DOMAttr::__construct(string name, [string value]); */
-PHP_METHOD(domattr, __construct)
-{
-
- zval *id;
- xmlAttrPtr nodep = NULL;
- xmlNodePtr oldnode = NULL;
- dom_object *intern;
- char *name, *value = NULL;
- int name_len, value_len, name_valid;
-
- php_set_error_handling(EH_THROW, dom_domexception_class_entry TSRMLS_CC);
- if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Os|s", &id, dom_attr_class_entry, &name, &name_len, &value, &value_len) == FAILURE) {
- php_std_error_handling();
- return;
- }
-
- php_std_error_handling();
- intern = (dom_object *)zend_object_store_get_object(id TSRMLS_CC);
-
- name_valid = xmlValidateName((xmlChar *) name, 0);
- if (name_valid != 0) {
- php_dom_throw_error(INVALID_CHARACTER_ERR, 1 TSRMLS_CC);
- RETURN_FALSE;
- }
-
- nodep = xmlNewProp(NULL, (xmlChar *) name, value);
-
- if (!nodep) {
- php_dom_throw_error(INVALID_STATE_ERR, 1 TSRMLS_CC);
- RETURN_FALSE;
- }
-
- if (intern != NULL) {
- oldnode = (xmlNodePtr)intern->ptr;
- if (oldnode != NULL) {
- php_libxml_node_free_resource(oldnode TSRMLS_CC);
- }
- php_libxml_increment_node_ptr((php_libxml_node_object *)intern, (xmlNodePtr)nodep, (void *)intern TSRMLS_CC);
- }
-}
-
-/* }}} end DOMAttr::__construct */
-
-
-/* {{{ proto name string
-readonly=yes
-URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#ID-1112119403
-Since:
-*/
-int dom_attr_name_read(dom_object *obj, zval **retval TSRMLS_DC)
-{
- xmlAttrPtr attrp;
-
- attrp = (xmlAttrPtr) dom_object_get_node(obj);
-
- if (attrp == NULL) {
- php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC);
- return FAILURE;
- }
-
- ALLOC_ZVAL(*retval);
- ZVAL_STRING(*retval, (char *) (attrp->name), 1);
-
- return SUCCESS;
-}
-
-/* }}} */
-
-
-
-/* {{{ proto specified boolean
-readonly=yes
-URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#ID-862529273
-Since:
-*/
-int dom_attr_specified_read(dom_object *obj, zval **retval TSRMLS_DC)
-{
- /* TODO */
- ALLOC_ZVAL(*retval);
- ZVAL_TRUE(*retval);
- return SUCCESS;
-}
-
-/* }}} */
-
-
-
-/* {{{ proto value string
-readonly=no
-URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#ID-221662474
-Since:
-*/
-int dom_attr_value_read(dom_object *obj, zval **retval TSRMLS_DC)
-{
- xmlAttrPtr attrp;
- xmlChar *content;
-
- attrp = (xmlAttrPtr) dom_object_get_node(obj);
-
- if (attrp == NULL) {
- php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC);
- return FAILURE;
- }
-
- ALLOC_ZVAL(*retval);
-
-
- if ((content = xmlNodeGetContent((xmlNodePtr) attrp)) != NULL) {
- ZVAL_STRING(*retval, content, 1);
- xmlFree(content);
- } else {
- ZVAL_EMPTY_STRING(*retval);
- }
-
- return SUCCESS;
-
-}
-
-int dom_attr_value_write(dom_object *obj, zval *newval TSRMLS_DC)
-{
- zval value_copy;
- xmlAttrPtr attrp;
-
- attrp = (xmlAttrPtr) dom_object_get_node(obj);
-
- if (attrp == NULL) {
- php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC);
- return FAILURE;
- }
-
- if (attrp->children) {
- node_list_unlink(attrp->children TSRMLS_CC);
- }
-
- if (newval->type != IS_STRING) {
- if(newval->refcount > 1) {
- value_copy = *newval;
- zval_copy_ctor(&value_copy);
- newval = &value_copy;
- }
- convert_to_string(newval);
- }
-
- xmlNodeSetContentLen((xmlNodePtr) attrp, Z_STRVAL_P(newval), Z_STRLEN_P(newval) + 1);
-
- if (newval == &value_copy) {
- zval_dtor(newval);
- }
-
- return SUCCESS;
-}
-
-/* }}} */
-
-
-
-/* {{{ proto ownerElement DOMElement
-readonly=yes
-URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#Attr-ownerElement
-Since: DOM Level 2
-*/
-int dom_attr_owner_element_read(dom_object *obj, zval **retval TSRMLS_DC)
-{
- xmlNodePtr nodep, nodeparent;
- int ret;
-
- nodep = dom_object_get_node(obj);
-
- if (nodep == NULL) {
- php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC);
- return FAILURE;
- }
-
- nodeparent = nodep->parent;
- if (!nodeparent) {
- return FAILURE;
- }
-
- ALLOC_ZVAL(*retval);
-
- if (NULL == (*retval = php_dom_create_object(nodeparent, &ret, NULL, *retval, obj TSRMLS_CC))) {
- php_error(E_WARNING, "Cannot create required DOM object");
- return FAILURE;
- }
- return SUCCESS;
-
-}
-
-/* }}} */
-
-
-
-/* {{{ proto schemaTypeInfo DOMTypeInfo
-readonly=yes
-URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#Attr-schemaTypeInfo
-Since: DOM Level 3
-*/
-int dom_attr_schema_type_info_read(dom_object *obj, zval **retval TSRMLS_DC)
-{
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Not yet implemented");
- ALLOC_ZVAL(*retval);
- ZVAL_NULL(*retval);
- return SUCCESS;
-}
-
-/* }}} */
-
-
-
-/* {{{ proto boolean dom_attr_is_id();
-URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#Attr-isId
-Since: DOM Level 3
-*/
-PHP_FUNCTION(dom_attr_is_id)
-{
- zval *id;
- dom_object *intern;
- xmlAttrPtr attrp;
- xmlNodePtr nodep;
-
- if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &id, dom_attr_class_entry) == FAILURE) {
- return;
- }
-
- DOM_GET_OBJ(attrp, id, xmlAttrPtr, intern);
-
- nodep = attrp->parent;
-
- if (xmlIsID(attrp->doc, nodep, attrp)) {
- RETURN_TRUE;
- } else {
- RETURN_FALSE;
- }
-}
-/* }}} end dom_attr_is_id */
-
-#endif
diff --git a/ext/dom/cdatasection.c b/ext/dom/cdatasection.c
deleted file mode 100644
index b5b15fe9fe..0000000000
--- a/ext/dom/cdatasection.c
+++ /dev/null
@@ -1,78 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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. |
- +----------------------------------------------------------------------+
- | Authors: Christian Stocker <chregu@php.net> |
- | Rob Richards <rrichards@php.net> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "php.h"
-#if HAVE_LIBXML && HAVE_DOM
-#include "php_dom.h"
-
-
-/*
-* class DOMCdataSection extends DOMText
-*
-* URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#ID-667469212
-* Since:
-*/
-
-zend_function_entry php_dom_cdatasection_class_functions[] = {
- PHP_ME(domcdatasection, __construct, NULL, ZEND_ACC_PUBLIC)
- {NULL, NULL, NULL}
-};
-
-/* {{{ proto void DOMCdataSection::__construct(string value); */
-PHP_METHOD(domcdatasection, __construct)
-{
-
- zval *id;
- xmlNodePtr nodep = NULL, oldnode = NULL;
- dom_object *intern;
- char *value = NULL;
- int value_len;
-
- php_set_error_handling(EH_THROW, dom_domexception_class_entry TSRMLS_CC);
- if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Os", &id, dom_cdatasection_class_entry, &value, &value_len) == FAILURE) {
- php_std_error_handling();
- return;
- }
-
- php_std_error_handling();
- nodep = xmlNewCDataBlock(NULL, (xmlChar *) value, value_len);
-
- if (!nodep) {
- php_dom_throw_error(INVALID_STATE_ERR, 1 TSRMLS_CC);
- RETURN_FALSE;
- }
-
- intern = (dom_object *)zend_object_store_get_object(id TSRMLS_CC);
- if (intern != NULL) {
- oldnode = (xmlNodePtr)intern->ptr;
- if (oldnode != NULL) {
- php_libxml_node_free_resource(oldnode TSRMLS_CC);
- }
- php_libxml_increment_node_ptr((php_libxml_node_object *)intern, nodep, (void *)intern TSRMLS_CC);
- }
-}
-/* }}} end DOMCdataSection::__construct */
-
-#endif
diff --git a/ext/dom/characterdata.c b/ext/dom/characterdata.c
deleted file mode 100644
index 7eba640c08..0000000000
--- a/ext/dom/characterdata.c
+++ /dev/null
@@ -1,384 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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. |
- +----------------------------------------------------------------------+
- | Authors: Christian Stocker <chregu@php.net> |
- | Rob Richards <rrichards@php.net> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "php.h"
-#if HAVE_LIBXML && HAVE_DOM
-#include "php_dom.h"
-
-
-/*
-* class DOMCharacterData extends DOMNode
-*
-* URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-FF21A306
-* Since:
-*/
-
-zend_function_entry php_dom_characterdata_class_functions[] = {
- PHP_FALIAS(substringData, dom_characterdata_substring_data, NULL)
- PHP_FALIAS(appendData, dom_characterdata_append_data, NULL)
- PHP_FALIAS(insertData, dom_characterdata_insert_data, NULL)
- PHP_FALIAS(deleteData, dom_characterdata_delete_data, NULL)
- PHP_FALIAS(replaceData, dom_characterdata_replace_data, NULL)
- {NULL, NULL, NULL}
-};
-
-/* {{{ proto data string
-readonly=no
-URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-72AB8359
-Since:
-*/
-int dom_characterdata_data_read(dom_object *obj, zval **retval TSRMLS_DC)
-{
- xmlNodePtr nodep;
- xmlChar *content;
-
- nodep = dom_object_get_node(obj);
-
- if (nodep == NULL) {
- php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC);
- return FAILURE;
- }
-
- ALLOC_ZVAL(*retval);
-
- if ((content = xmlNodeGetContent(nodep)) != NULL) {
- ZVAL_STRING(*retval, content, 1);
- xmlFree(content);
- } else {
- ZVAL_EMPTY_STRING(*retval);
- }
-
- return SUCCESS;
-}
-
-int dom_characterdata_data_write(dom_object *obj, zval *newval TSRMLS_DC)
-{
- zval value_copy;
- xmlNode *nodep;
-
- nodep = dom_object_get_node(obj);
-
- if (nodep == NULL) {
- php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC);
- return FAILURE;
- }
-
- if (newval->type != IS_STRING) {
- if(newval->refcount > 1) {
- value_copy = *newval;
- zval_copy_ctor(&value_copy);
- newval = &value_copy;
- }
- convert_to_string(newval);
- }
-
- xmlNodeSetContentLen(nodep, Z_STRVAL_P(newval), Z_STRLEN_P(newval) + 1);
-
- if (newval == &value_copy) {
- zval_dtor(newval);
- }
-
- return SUCCESS;
-}
-
-/* }}} */
-
-/* {{{ proto length long
-readonly=yes
-URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-7D61178C
-Since:
-*/
-int dom_characterdata_length_read(dom_object *obj, zval **retval TSRMLS_DC)
-{
- xmlNodePtr nodep;
- xmlChar *content;
- long length = 0;
-
- nodep = dom_object_get_node(obj);
-
- if (nodep == NULL) {
- php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC);
- return FAILURE;
- }
-
- ALLOC_ZVAL(*retval);
-
- content = xmlNodeGetContent(nodep);
-
- if (content) {
- length = xmlUTF8Strlen(content);
- xmlFree(content);
- }
-
- ZVAL_LONG(*retval, length);
-
- return SUCCESS;
-}
-
-/* }}} */
-
-
-/* {{{ proto string dom_characterdata_substring_data(long offset, long count);
-URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-6531BCCF
-Since:
-*/
-PHP_FUNCTION(dom_characterdata_substring_data)
-{
- zval *id;
- xmlChar *cur;
- xmlChar *substring;
- xmlNodePtr node;
- long offset, count;
- int length;
- dom_object *intern;
-
- if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Oll", &id, dom_characterdata_class_entry, &offset, &count) == FAILURE) {
- return;
- }
-
- DOM_GET_OBJ(node, id, xmlNodePtr, intern);
-
- cur = xmlNodeGetContent(node);
- if (cur == NULL) {
- RETURN_FALSE;
- }
-
- length = xmlUTF8Strlen(cur);
-
- if (offset < 0 || count < 0 || offset > length) {
- xmlFree(cur);
- php_dom_throw_error(INDEX_SIZE_ERR, dom_get_strict_error(intern->document) TSRMLS_CC);
- RETURN_FALSE;
- }
-
- if ((offset + count) > length) {
- count = length - offset;
- }
-
- substring = xmlUTF8Strsub(cur, offset, count);
- xmlFree(cur);
-
- if (substring) {
- RETVAL_STRING(substring, 1);
- xmlFree(substring);
- } else {
- RETVAL_EMPTY_STRING();
- }
-}
-/* }}} end dom_characterdata_substring_data */
-
-
-/* {{{ proto void dom_characterdata_append_data(string arg);
-URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-32791A2F
-Since:
-*/
-PHP_FUNCTION(dom_characterdata_append_data)
-{
- zval *id;
- xmlNode *nodep;
- dom_object *intern;
- char *arg;
- int arg_len;
-
- if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Os", &id, dom_characterdata_class_entry, &arg, &arg_len) == FAILURE) {
- return;
- }
-
- DOM_GET_OBJ(nodep, id, xmlNodePtr, intern);
-
- xmlTextConcat(nodep, arg, arg_len);
-
- RETURN_TRUE;
-}
-/* }}} end dom_characterdata_append_data */
-
-
-/* {{{ proto void dom_characterdata_insert_data(long offset, string arg);
-URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-3EDB695F
-Since:
-*/
-PHP_FUNCTION(dom_characterdata_insert_data)
-{
- zval *id;
- xmlChar *cur, *first, *second;
- xmlNodePtr node;
- char *arg;
- long offset;
- int length, arg_len;
- dom_object *intern;
-
- if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Ols", &id, dom_characterdata_class_entry, &offset, &arg, &arg_len) == FAILURE) {
- return;
- }
-
- DOM_GET_OBJ(node, id, xmlNodePtr, intern);
-
- cur = xmlNodeGetContent(node);
- if (cur == NULL) {
- RETURN_FALSE;
- }
-
- length = xmlUTF8Strlen(cur);
-
- if (offset < 0 || offset > length) {
- xmlFree(cur);
- php_dom_throw_error(INDEX_SIZE_ERR, dom_get_strict_error(intern->document) TSRMLS_CC);
- RETURN_FALSE;
- }
-
- first = xmlUTF8Strndup(cur, offset);
- second = xmlUTF8Strsub(cur, offset, length - offset);
- xmlFree(cur);
-
- xmlNodeSetContent(node, first);
- xmlNodeAddContent(node, arg);
- xmlNodeAddContent(node, second);
-
- xmlFree(first);
- xmlFree(second);
-
- RETURN_TRUE;
-}
-/* }}} end dom_characterdata_insert_data */
-
-
-/* {{{ proto void dom_characterdata_delete_data(long offset, long count);
-URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-7C603781
-Since:
-*/
-PHP_FUNCTION(dom_characterdata_delete_data)
-{
- zval *id;
- xmlChar *cur, *substring, *second;
- xmlNodePtr node;
- long offset, count;
- int length;
- dom_object *intern;
-
- if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Oll", &id, dom_characterdata_class_entry, &offset, &count) == FAILURE) {
- return;
- }
-
- DOM_GET_OBJ(node, id, xmlNodePtr, intern);
-
- cur = xmlNodeGetContent(node);
- if (cur == NULL) {
- RETURN_FALSE;
- }
-
- length = xmlUTF8Strlen(cur);
-
- if (offset < 0 || count < 0 || offset > length) {
- xmlFree(cur);
- php_dom_throw_error(INDEX_SIZE_ERR, dom_get_strict_error(intern->document) TSRMLS_CC);
- RETURN_FALSE;
- }
-
- if (offset > 0) {
- substring = xmlUTF8Strsub(cur, 0, offset);
- } else {
- substring = NULL;
- }
-
- if ((offset + count) > length) {
- count = length - offset;
- }
-
- second = xmlUTF8Strsub(cur, offset + count, length - offset);
- substring = xmlStrcat(substring, second);
-
- xmlNodeSetContent(node, substring);
-
- xmlFree(cur);
- xmlFree(second);
- xmlFree(substring);
-
- RETURN_TRUE;
-}
-/* }}} end dom_characterdata_delete_data */
-
-
-/* {{{ proto void dom_characterdata_replace_data(long offset, long count, string arg);
-URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-E5CBA7FB
-Since:
-*/
-PHP_FUNCTION(dom_characterdata_replace_data)
-{
- zval *id;
- xmlChar *cur, *substring, *second = NULL;
- xmlNodePtr node;
- char *arg;
- long offset, count;
- int length, arg_len;
- dom_object *intern;
-
- if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Olls", &id, dom_characterdata_class_entry, &offset, &count, &arg, &arg_len) == FAILURE) {
- return;
- }
-
- DOM_GET_OBJ(node, id, xmlNodePtr, intern);
-
- cur = xmlNodeGetContent(node);
- if (cur == NULL) {
- RETURN_FALSE;
- }
-
- length = xmlUTF8Strlen(cur);
-
- if (offset < 0 || count < 0 || offset > length) {
- xmlFree(cur);
- php_dom_throw_error(INDEX_SIZE_ERR, dom_get_strict_error(intern->document) TSRMLS_CC);
- RETURN_FALSE;
- }
-
- if (offset > 0) {
- substring = xmlUTF8Strsub(cur, 0, offset);
- } else {
- substring = NULL;
- }
-
- if ((offset + count) > length) {
- count = length - offset;
- }
-
- if (offset < length) {
- second = xmlUTF8Strsub(cur, offset + count, length - offset);
- }
-
- substring = xmlStrcat(substring, arg);
- substring = xmlStrcat(substring, second);
-
- xmlNodeSetContent(node, substring);
-
- xmlFree(cur);
- if (second) {
- xmlFree(second);
- }
- xmlFree(substring);
-
- RETURN_TRUE;
-}
-/* }}} end dom_characterdata_replace_data */
-#endif
diff --git a/ext/dom/comment.c b/ext/dom/comment.c
deleted file mode 100644
index 5b231cb098..0000000000
--- a/ext/dom/comment.c
+++ /dev/null
@@ -1,77 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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. |
- +----------------------------------------------------------------------+
- | Authors: Christian Stocker <chregu@php.net> |
- | Rob Richards <rrichards@php.net> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "php.h"
-#if HAVE_LIBXML && HAVE_DOM
-#include "php_dom.h"
-
-
-/*
-* class DOMComment extends DOMCharacterData
-*
-* URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#ID-1728279322
-* Since:
-*/
-
-zend_function_entry php_dom_comment_class_functions[] = {
- PHP_ME(domcomment, __construct, NULL, ZEND_ACC_PUBLIC)
- {NULL, NULL, NULL}
-};
-
-/* {{{ proto void DOMComment::__construct([string value]); */
-PHP_METHOD(domcomment, __construct)
-{
-
- zval *id;
- xmlNodePtr nodep = NULL, oldnode = NULL;
- dom_object *intern;
- char *value = NULL;
- int value_len;
-
- php_set_error_handling(EH_THROW, dom_domexception_class_entry TSRMLS_CC);
- if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O|s", &id, dom_comment_class_entry, &value, &value_len) == FAILURE) {
- php_std_error_handling();
- return;
- }
-
- php_std_error_handling();
- nodep = xmlNewComment((xmlChar *) value);
-
- if (!nodep) {
- php_dom_throw_error(INVALID_STATE_ERR, 1 TSRMLS_CC);
- RETURN_FALSE;
- }
-
- intern = (dom_object *)zend_object_store_get_object(id TSRMLS_CC);
- if (intern != NULL) {
- oldnode = (xmlNodePtr)intern->ptr;
- if (oldnode != NULL) {
- php_libxml_node_free_resource(oldnode TSRMLS_CC);
- }
- php_libxml_increment_node_ptr((php_libxml_node_object *)intern, (xmlNodePtr)nodep, (void *)intern TSRMLS_CC);
- }
-}
-/* }}} end DOMComment::__construct */
-#endif
diff --git a/ext/dom/config.m4 b/ext/dom/config.m4
deleted file mode 100644
index d4eea28109..0000000000
--- a/ext/dom/config.m4
+++ /dev/null
@@ -1,33 +0,0 @@
-dnl
-dnl $Id$
-dnl
-
-PHP_ARG_ENABLE(dom, whether to enable DOM support,
-[ --disable-dom Disable new DOM support.], yes)
-
-if test -z "$PHP_LIBXML_DIR"; then
- PHP_ARG_WITH(libxml-dir, libxml2 install dir,
- [ --with-libxml-dir[=DIR] DOM: libxml2 install prefix.], no, no)
-fi
-
-if test "$PHP_DOM" != "no" && test "$PHP_LIBXML" != "no"; then
-
- PHP_SETUP_LIBXML(DOM_SHARED_LIBADD, [
- AC_DEFINE(HAVE_DOM,1,[ ])
- PHP_NEW_EXTENSION(dom, [php_dom.c attr.c document.c domerrorhandler.c \
- domstringlist.c domexception.c namelist.c \
- processinginstruction.c cdatasection.c \
- documentfragment.c domimplementation.c \
- element.c node.c string_extend.c characterdata.c \
- documenttype.c domimplementationlist.c entity.c \
- nodelist.c text.c comment.c domconfiguration.c \
- domimplementationsource.c entityreference.c \
- notation.c xpath.c dom_iterators.c \
- typeinfo.c domerror.c domlocator.c namednodemap.c userdatahandler.c],
- $ext_shared)
- PHP_SUBST(DOM_SHARED_LIBADD)
- PHP_ADD_EXTENSION_DEP(dom, libxml)
- ], [
- AC_MSG_ERROR([xml2-config not found. Please check your libxml2 installation.])
- ])
-fi
diff --git a/ext/dom/config.w32 b/ext/dom/config.w32
deleted file mode 100644
index 382587ff6e..0000000000
--- a/ext/dom/config.w32
+++ /dev/null
@@ -1,22 +0,0 @@
-// $Id$
-// vim:ft=javascript
-
-ARG_WITH("dom", "DOM support", "yes");
-
-if (PHP_DOM == "yes" && PHP_LIBXML == "yes") {
- EXTENSION("dom", "php_dom.c attr.c document.c domerrorhandler.c \
- domstringlist.c domexception.c namelist.c processinginstruction.c \
- cdatasection.c documentfragment.c domimplementation.c element.c \
- node.c string_extend.c characterdata.c documenttype.c \
- domimplementationlist.c entity.c nodelist.c text.c comment.c \
- domconfiguration.c domimplementationsource.c entityreference.c \
- notation.c xpath.c dom_iterators.c typeinfo.c domerror.c \
- domlocator.c namednodemap.c userdatahandler.c");
- AC_DEFINE("HAVE_DOM", 1, "DOM support");
- if (!PHP_DOM_SHARED) {
- ADD_FLAG("CFLAGS_DOM", "/D LIBXML_STATIC ");
- }
- ADD_EXTENSION_DEP('dom', 'libxml');
-}
-
-
diff --git a/ext/dom/document.c b/ext/dom/document.c
deleted file mode 100644
index a22fdbc6d9..0000000000
--- a/ext/dom/document.c
+++ /dev/null
@@ -1,2159 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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. |
- +----------------------------------------------------------------------+
- | Authors: Christian Stocker <chregu@php.net> |
- | Rob Richards <rrichards@php.net> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "php.h"
-#if HAVE_LIBXML && HAVE_DOM
-#include "php_dom.h"
-#include <libxml/SAX.h>
-#ifdef LIBXML_SCHEMAS_ENABLED
-#include <libxml/relaxng.h>
-#include <libxml/xmlschemas.h>
-#endif
-
-typedef struct _idsIterator idsIterator;
-struct _idsIterator {
- xmlChar *elementId;
- xmlNode *element;
-};
-
-#define DOM_LOAD_STRING 0
-#define DOM_LOAD_FILE 1
-
-/*
-* class DOMDocument extends DOMNode
-*
-* URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-i-Document
-* Since:
-*/
-
-zend_function_entry php_dom_document_class_functions[] = {
- PHP_FALIAS(createElement, dom_document_create_element, NULL)
- PHP_FALIAS(createDocumentFragment, dom_document_create_document_fragment, NULL)
- PHP_FALIAS(createTextNode, dom_document_create_text_node, NULL)
- PHP_FALIAS(createComment, dom_document_create_comment, NULL)
- PHP_FALIAS(createCDATASection, dom_document_create_cdatasection, NULL)
- PHP_FALIAS(createProcessingInstruction, dom_document_create_processing_instruction, NULL)
- PHP_FALIAS(createAttribute, dom_document_create_attribute, NULL)
- PHP_FALIAS(createEntityReference, dom_document_create_entity_reference, NULL)
- PHP_FALIAS(getElementsByTagName, dom_document_get_elements_by_tag_name, NULL)
- PHP_FALIAS(importNode, dom_document_import_node, NULL)
- PHP_FALIAS(createElementNS, dom_document_create_element_ns, NULL)
- PHP_FALIAS(createAttributeNS, dom_document_create_attribute_ns, NULL)
- PHP_FALIAS(getElementsByTagNameNS, dom_document_get_elements_by_tag_name_ns, NULL)
- PHP_FALIAS(getElementById, dom_document_get_element_by_id, NULL)
- PHP_FALIAS(adoptNode, dom_document_adopt_node, NULL)
- PHP_FALIAS(normalizeDocument, dom_document_normalize_document, NULL)
- PHP_FALIAS(renameNode, dom_document_rename_node, NULL)
- PHP_ME(domdocument, load, NULL, ZEND_ACC_PUBLIC|ZEND_ACC_ALLOW_STATIC)
- PHP_FALIAS(save, dom_document_save, NULL)
- PHP_ME(domdocument, loadXML, NULL, ZEND_ACC_PUBLIC|ZEND_ACC_ALLOW_STATIC)
- PHP_FALIAS(saveXML, dom_document_savexml, NULL)
- PHP_ME(domdocument, __construct, NULL, ZEND_ACC_PUBLIC)
- PHP_FALIAS(validate, dom_document_validate, NULL)
- PHP_FALIAS(xinclude, dom_document_xinclude, NULL)
-#if defined(LIBXML_HTML_ENABLED)
- PHP_ME(domdocument, loadHTML, NULL, ZEND_ACC_PUBLIC|ZEND_ACC_ALLOW_STATIC)
- PHP_ME(domdocument, loadHTMLFile, NULL, ZEND_ACC_PUBLIC|ZEND_ACC_ALLOW_STATIC)
- PHP_FALIAS(saveHTML, dom_document_save_html, NULL)
- PHP_FALIAS(saveHTMLFile, dom_document_save_html_file, NULL)
-#endif /* defined(LIBXML_HTML_ENABLED) */
-#if defined(LIBXML_SCHEMAS_ENABLED)
- PHP_FALIAS(schemaValidate, dom_document_schema_validate_file, NULL)
- PHP_FALIAS(schemaValidateSource, dom_document_schema_validate_xml, NULL)
- PHP_FALIAS(relaxNGValidate, dom_document_relaxNG_validate_file, NULL)
- PHP_FALIAS(relaxNGValidateSource, dom_document_relaxNG_validate_xml, NULL)
-#endif
- {NULL, NULL, NULL}
-};
-
-/* {{{ proto docType DOMDocumentType
-readonly=yes
-URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-B63ED1A31
-Since:
-*/
-int dom_document_doctype_read(dom_object *obj, zval **retval TSRMLS_DC)
-{
- xmlDoc *docp;
- xmlDtdPtr dtdptr;
- int ret;
-
- docp = (xmlDocPtr) dom_object_get_node(obj);
-
- if (docp == NULL) {
- php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC);
- return FAILURE;
- }
-
- dtdptr = xmlGetIntSubset(docp);
- if (!dtdptr) {
- return FAILURE;
- }
-
- ALLOC_ZVAL(*retval);
- if (NULL == (*retval = php_dom_create_object((xmlNodePtr) dtdptr, &ret, NULL, *retval, obj TSRMLS_CC))) {
- php_error(E_WARNING, "Cannot create required DOM object");
- return FAILURE;
- }
- return SUCCESS;
-
-}
-
-/* }}} */
-
-
-
-/* {{{ proto implementation DOMImplementation
-readonly=yes
-URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-1B793EBA
-Since:
-*/
-int dom_document_implementation_read(dom_object *obj, zval **retval TSRMLS_DC)
-{
- ALLOC_ZVAL(*retval);
- php_dom_create_implementation(retval TSRMLS_CC);
- return SUCCESS;
-}
-
-/* }}} */
-
-
-
-/* {{{ proto documentElement DOMElement
-readonly=yes
-URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-87CD092
-Since:
-*/
-int dom_document_document_element_read(dom_object *obj, zval **retval TSRMLS_DC)
-{
- xmlDoc *docp;
- xmlNode *root;
- int ret;
-
- docp = (xmlDocPtr) dom_object_get_node(obj);
-
- if (docp == NULL) {
- php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC);
- return FAILURE;
- }
-
- root = xmlDocGetRootElement(docp);
- if (!root) {
- return FAILURE;
- }
-
- ALLOC_ZVAL(*retval);
- if (NULL == (*retval = php_dom_create_object(root, &ret, NULL, *retval, obj TSRMLS_CC))) {
- php_error(E_WARNING, "Cannot create required DOM object");
- return FAILURE;
- }
- return SUCCESS;
-}
-
-/* }}} */
-
-
-/* {{{ proto actualEncoding string
-readonly=no
-URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-Document3-actualEncoding
-Since: DOM Level 3
-*/
-/* READ ONLY FOR NOW USING ENCODING PROPERTY
-int dom_document_actual_encoding_read(dom_object *obj, zval **retval TSRMLS_DC)
-{
- ALLOC_ZVAL(*retval);
- ZVAL_NULL(*retval);
- return SUCCESS;
-}
-
-int dom_document_actual_encoding_write(dom_object *obj, zval *newval TSRMLS_DC)
-{
- return SUCCESS;
-}
-*/
-
-/* }}} */
-
-/* {{{ proto encoding string
-URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-Document3-encoding
-Since: DOM Level 3
-*/
-int dom_document_encoding_read(dom_object *obj, zval **retval TSRMLS_DC)
-{
- xmlDoc *docp;
- char *encoding;
-
- docp = (xmlDocPtr) dom_object_get_node(obj);
-
- if (docp == NULL) {
- php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC);
- return FAILURE;
- }
-
- encoding = (char *) docp->encoding;
- ALLOC_ZVAL(*retval);
-
- if (encoding != NULL) {
- ZVAL_STRING(*retval, encoding, 1);
- } else {
- ZVAL_NULL(*retval);
- }
-
- return SUCCESS;
-}
-
-int dom_document_encoding_write(dom_object *obj, zval *newval TSRMLS_DC)
-{
- zval value_copy;
- xmlDoc *docp;
- xmlCharEncodingHandlerPtr handler;
-
- docp = (xmlDocPtr) dom_object_get_node(obj);
-
- if (docp == NULL) {
- php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC);
- return FAILURE;
- }
-
- if (newval->type != IS_STRING) {
- if(newval->refcount > 1) {
- value_copy = *newval;
- zval_copy_ctor(&value_copy);
- newval = &value_copy;
- }
- convert_to_string(newval);
- }
-
- handler = xmlFindCharEncodingHandler(Z_STRVAL_P(newval));
-
- if (handler != NULL) {
- xmlCharEncCloseFunc(handler);
- if (docp->encoding != NULL) {
- xmlFree((xmlChar *)docp->encoding);
- }
- docp->encoding = xmlStrdup((const xmlChar *) Z_STRVAL_P(newval));
- } else {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid Document Encoding");
- }
-
- if (newval == &value_copy) {
- zval_dtor(newval);
- }
-
- return SUCCESS;
-}
-
-/* }}} */
-
-
-
-/* {{{ proto standalone boolean
-readonly=no
-URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-Document3-standalone
-Since: DOM Level 3
-*/
-int dom_document_standalone_read(dom_object *obj, zval **retval TSRMLS_DC)
-{
- xmlDoc *docp;
- int standalone;
-
- docp = (xmlDocPtr) dom_object_get_node(obj);
-
- if (docp == NULL) {
- php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC);
- return FAILURE;
- }
-
- ALLOC_ZVAL(*retval);
- standalone = docp->standalone;
- ZVAL_BOOL(*retval, standalone);
-
- return SUCCESS;
-}
-
-int dom_document_standalone_write(dom_object *obj, zval *newval TSRMLS_DC)
-{
- zval value_copy;
- xmlDoc *docp;
- int standalone;
-
- docp = (xmlDocPtr) dom_object_get_node(obj);
-
- if (docp == NULL) {
- php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC);
- return FAILURE;
- }
-
- if(newval->refcount > 1) {
- value_copy = *newval;
- zval_copy_ctor(&value_copy);
- newval = &value_copy;
- }
- convert_to_long(newval);
-
- standalone = Z_LVAL_P(newval);
- if (standalone > 0) {
- docp->standalone = 1;
- }
- else if (standalone < 0) {
- docp->standalone = -1;
- }
- else {
- docp->standalone = 0;
- }
-
- if (newval == &value_copy) {
- zval_dtor(newval);
- }
-
- return SUCCESS;
-}
-
-/* }}} */
-
-
-
-/* {{{ proto version string
-readonly=no
-URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-Document3-version
-Since: DOM Level 3
-*/
-int dom_document_version_read(dom_object *obj, zval **retval TSRMLS_DC)
-{
- xmlDoc *docp;
- char *version;
-
- docp = (xmlDocPtr) dom_object_get_node(obj);
-
- if (docp == NULL) {
- php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC);
- return FAILURE;
- }
-
- version = (char *) docp->version;
- ALLOC_ZVAL(*retval);
-
- if (version != NULL) {
- ZVAL_STRING(*retval, version, 1);
- } else {
- ZVAL_NULL(*retval);
- }
-
- return SUCCESS;
-}
-
-int dom_document_version_write(dom_object *obj, zval *newval TSRMLS_DC)
-{
- zval value_copy;
- xmlDoc *docp;
-
- docp = (xmlDocPtr) dom_object_get_node(obj);
-
- if (docp == NULL) {
- php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC);
- return FAILURE;
- }
-
- if (docp->version != NULL) {
- xmlFree((xmlChar *) docp->version );
- }
-
- if (newval->type != IS_STRING) {
- if(newval->refcount > 1) {
- value_copy = *newval;
- zval_copy_ctor(&value_copy);
- newval = &value_copy;
- }
- convert_to_string(newval);
- }
-
- docp->version = xmlStrdup((const xmlChar *) Z_STRVAL_P(newval));
-
- if (newval == &value_copy) {
- zval_dtor(newval);
- }
-
- return SUCCESS;
-}
-
-/* }}} */
-
-/* {{{ proto strictErrorChecking boolean
-readonly=no
-URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-Document3-strictErrorChecking
-Since: DOM Level 3
-*/
-int dom_document_strict_error_checking_read(dom_object *obj, zval **retval TSRMLS_DC)
-{
- dom_doc_props *doc_prop;
-
- ALLOC_ZVAL(*retval);
- if (obj->document) {
- doc_prop = dom_get_doc_props(obj->document);
- ZVAL_BOOL(*retval, doc_prop->stricterror);
- } else {
- ZVAL_FALSE(*retval);
- }
- return SUCCESS;
-}
-
-int dom_document_strict_error_checking_write(dom_object *obj, zval *newval TSRMLS_DC)
-{
- zval value_copy;
- dom_doc_props *doc_prop;
-
- if(newval->refcount > 1) {
- value_copy = *newval;
- zval_copy_ctor(&value_copy);
- newval = &value_copy;
- }
- convert_to_boolean(newval);
-
- if (obj->document) {
- doc_prop = dom_get_doc_props(obj->document);
- doc_prop->stricterror = Z_LVAL_P(newval);
- }
-
- if (newval == &value_copy) {
- zval_dtor(newval);
- }
-
- return SUCCESS;
-}
-
-/* }}} */
-
-/* {{{ proto formatOutput boolean
-readonly=no
-*/
-int dom_document_format_output_read(dom_object *obj, zval **retval TSRMLS_DC)
-{
- dom_doc_props *doc_prop;
-
- ALLOC_ZVAL(*retval);
- if (obj->document) {
- doc_prop = dom_get_doc_props(obj->document);
- ZVAL_BOOL(*retval, doc_prop->formatoutput);
- } else {
- ZVAL_FALSE(*retval);
- }
- return SUCCESS;
-}
-
-int dom_document_format_output_write(dom_object *obj, zval *newval TSRMLS_DC)
-{
- zval value_copy;
- dom_doc_props *doc_prop;
-
- if(newval->refcount > 1) {
- value_copy = *newval;
- zval_copy_ctor(&value_copy);
- newval = &value_copy;
- }
- convert_to_boolean(newval);
-
- if (obj->document) {
- doc_prop = dom_get_doc_props(obj->document);
- doc_prop->formatoutput = Z_LVAL_P(newval);
- }
-
- if (newval == &value_copy) {
- zval_dtor(newval);
- }
-
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ proto validateOnParse boolean
-readonly=no
-*/
-int dom_document_validate_on_parse_read(dom_object *obj, zval **retval TSRMLS_DC)
-{
- dom_doc_props *doc_prop;
-
- ALLOC_ZVAL(*retval);
- if (obj->document) {
- doc_prop = dom_get_doc_props(obj->document);
- ZVAL_BOOL(*retval, doc_prop->validateonparse);
- } else {
- ZVAL_FALSE(*retval);
- }
- return SUCCESS;
-}
-
-int dom_document_validate_on_parse_write(dom_object *obj, zval *newval TSRMLS_DC)
-{
- zval value_copy;
- dom_doc_props *doc_prop;
-
- if(newval->refcount > 1) {
- value_copy = *newval;
- zval_copy_ctor(&value_copy);
- newval = &value_copy;
- }
- convert_to_boolean(newval);
-
- if (obj->document) {
- doc_prop = dom_get_doc_props(obj->document);
- doc_prop->validateonparse = Z_LVAL_P(newval);
- }
-
- if (newval == &value_copy) {
- zval_dtor(newval);
- }
-
- return SUCCESS;
-}
-/* }}} */
-
-
-/* {{{ proto resolveExternals boolean
-readonly=no
-*/
-int dom_document_resolve_externals_read(dom_object *obj, zval **retval TSRMLS_DC)
-{
- dom_doc_props *doc_prop;
-
- ALLOC_ZVAL(*retval);
- if (obj->document) {
- doc_prop = dom_get_doc_props(obj->document);
- ZVAL_BOOL(*retval, doc_prop->resolveexternals);
- } else {
- ZVAL_FALSE(*retval);
- }
- return SUCCESS;
-}
-
-int dom_document_resolve_externals_write(dom_object *obj, zval *newval TSRMLS_DC)
-{
- zval value_copy;
- dom_doc_props *doc_prop;
-
- if(newval->refcount > 1) {
- value_copy = *newval;
- zval_copy_ctor(&value_copy);
- newval = &value_copy;
- }
- convert_to_boolean(newval);
-
- if (obj->document) {
- doc_prop = dom_get_doc_props(obj->document);
- doc_prop->resolveexternals = Z_LVAL_P(newval);
- }
-
- if (newval == &value_copy) {
- zval_dtor(newval);
- }
-
- return SUCCESS;
-}
-/* }}} */
-
-
-/* {{{ proto preserveWhiteSpace boolean
-readonly=no
-*/
-int dom_document_preserve_whitespace_read(dom_object *obj, zval **retval TSRMLS_DC)
-{
- dom_doc_props *doc_prop;
-
- ALLOC_ZVAL(*retval);
- if (obj->document) {
- doc_prop = dom_get_doc_props(obj->document);
- ZVAL_BOOL(*retval, doc_prop->preservewhitespace);
- } else {
- ZVAL_FALSE(*retval);
- }
- return SUCCESS;
-}
-
-int dom_document_preserve_whitespace_write(dom_object *obj, zval *newval TSRMLS_DC)
-{
- zval value_copy;
- dom_doc_props *doc_prop;
-
- if(newval->refcount > 1) {
- value_copy = *newval;
- zval_copy_ctor(&value_copy);
- newval = &value_copy;
- }
- convert_to_boolean(newval);
-
- if (obj->document) {
- doc_prop = dom_get_doc_props(obj->document);
- doc_prop->preservewhitespace = Z_LVAL_P(newval);
- }
-
- if (newval == &value_copy) {
- zval_dtor(newval);
- }
-
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ proto recover boolean
-readonly=no
-*/
-int dom_document_recover_read(dom_object *obj, zval **retval TSRMLS_DC)
-{
- dom_doc_props *doc_prop;
-
- ALLOC_ZVAL(*retval);
- if (obj->document) {
- doc_prop = dom_get_doc_props(obj->document);
- ZVAL_BOOL(*retval, doc_prop->recover);
- } else {
- ZVAL_FALSE(*retval);
- }
- return SUCCESS;
-}
-
-int dom_document_recover_write(dom_object *obj, zval *newval TSRMLS_DC)
-{
- zval value_copy;
- dom_doc_props *doc_prop;
-
- if(newval->refcount > 1) {
- value_copy = *newval;
- zval_copy_ctor(&value_copy);
- newval = &value_copy;
- }
- convert_to_boolean(newval);
-
- if (obj->document) {
- doc_prop = dom_get_doc_props(obj->document);
- doc_prop->recover = Z_LVAL_P(newval);
- }
-
- if (newval == &value_copy) {
- zval_dtor(newval);
- }
-
- return SUCCESS;
-}
-/* }}} */
-
-
-/* {{{ proto substituteEntities boolean
-readonly=no
-*/
-int dom_document_substitue_entities_read(dom_object *obj, zval **retval TSRMLS_DC)
-{
- dom_doc_props *doc_prop;
-
- ALLOC_ZVAL(*retval);
- if (obj->document) {
- doc_prop = dom_get_doc_props(obj->document);
- ZVAL_BOOL(*retval, doc_prop->substituteentities);
- } else {
- ZVAL_FALSE(*retval);
- }
- return SUCCESS;
-}
-
-int dom_document_substitue_entities_write(dom_object *obj, zval *newval TSRMLS_DC)
-{
- zval value_copy;
- dom_doc_props *doc_prop;
-
- if(newval->refcount > 1) {
- value_copy = *newval;
- zval_copy_ctor(&value_copy);
- newval = &value_copy;
- }
- convert_to_boolean(newval);
-
- if (obj->document) {
- doc_prop = dom_get_doc_props(obj->document);
- doc_prop->substituteentities = Z_LVAL_P(newval);
- }
-
- if (newval == &value_copy) {
- zval_dtor(newval);
- }
-
- return SUCCESS;
-}
-/* }}} */
-
-
-/* {{{ proto documentURI string
-readonly=no
-URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-Document3-documentURI
-Since: DOM Level 3
-*/
-int dom_document_document_uri_read(dom_object *obj, zval **retval TSRMLS_DC)
-{
- xmlDoc *docp;
- char *url;
-
- docp = (xmlDocPtr) dom_object_get_node(obj);
-
- if (docp == NULL) {
- php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC);
- return FAILURE;
- }
-
- ALLOC_ZVAL(*retval);
- url = (char *) docp->URL;
- if (url != NULL) {
- ZVAL_STRING(*retval, url, 1);
- } else {
- ZVAL_NULL(*retval);
- }
-
- return SUCCESS;
-}
-
-int dom_document_document_uri_write(dom_object *obj, zval *newval TSRMLS_DC)
-{
- zval value_copy;
- xmlDoc *docp;
-
- docp = (xmlDocPtr) dom_object_get_node(obj);
-
- if (docp == NULL) {
- php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC);
- return FAILURE;
- }
-
- if (docp->URL != NULL) {
- xmlFree((xmlChar *) docp->URL);
- }
-
- if (newval->type != IS_STRING) {
- if(newval->refcount > 1) {
- value_copy = *newval;
- zval_copy_ctor(&value_copy);
- newval = &value_copy;
- }
- convert_to_string(newval);
- }
-
- docp->URL = xmlStrdup((const xmlChar *) Z_STRVAL_P(newval));
-
- if (newval == &value_copy) {
- zval_dtor(newval);
- }
-
- return SUCCESS;
-}
-
-/* }}} */
-
-
-
-/* {{{ proto config DOMConfiguration
-readonly=yes
-URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-Document3-config
-Since: DOM Level 3
-*/
-int dom_document_config_read(dom_object *obj, zval **retval TSRMLS_DC)
-{
- ALLOC_ZVAL(*retval);
- ZVAL_NULL(*retval);
- return SUCCESS;
-}
-
-/* }}} */
-
-
-
-/* {{{ proto DOMElement dom_document_create_element(string tagName [, string value]);
-URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-2141741547
-Since:
-*/
-PHP_FUNCTION(dom_document_create_element)
-{
- zval *id, *rv = NULL;
- xmlNode *node;
- xmlDocPtr docp;
- dom_object *intern;
- int ret, name_len, value_len;
- char *name, *value = NULL;
-
- if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Os|s", &id, dom_document_class_entry, &name, &name_len, &value, &value_len) == FAILURE) {
- return;
- }
-
- DOM_GET_OBJ(docp, id, xmlDocPtr, intern);
-
- if (xmlValidateName((xmlChar *) name, 0) != 0) {
- php_dom_throw_error(INVALID_CHARACTER_ERR, dom_get_strict_error(intern->document) TSRMLS_CC);
- RETURN_FALSE;
- }
-
- node = xmlNewDocNode(docp, NULL, name, value);
- if (!node) {
- RETURN_FALSE;
- }
-
- DOM_RET_OBJ(rv, node, &ret, intern);
-}
-/* }}} end dom_document_create_element */
-
-
-/* {{{ proto DOMDocumentFragment dom_document_create_document_fragment();
-URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-35CB04B5
-Since:
-*/
-PHP_FUNCTION(dom_document_create_document_fragment)
-{
- zval *id, *rv = NULL;
- xmlNode *node;
- xmlDocPtr docp;
- dom_object *intern;
- int ret;
-
- if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &id, dom_document_class_entry) == FAILURE) {
- return;
- }
-
- DOM_GET_OBJ(docp, id, xmlDocPtr, intern);
-
- node = xmlNewDocFragment(docp);
- if (!node) {
- RETURN_FALSE;
- }
-
- DOM_RET_OBJ(rv, node, &ret, intern);
-}
-/* }}} end dom_document_create_document_fragment */
-
-
-/* {{{ proto DOMText dom_document_create_text_node(string data);
-URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-1975348127
-Since:
-*/
-PHP_FUNCTION(dom_document_create_text_node)
-{
- zval *id, *rv = NULL;
- xmlNode *node;
- xmlDocPtr docp;
- int ret, value_len;
- dom_object *intern;
- char *value;
-
- if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Os", &id, dom_document_class_entry, &value, &value_len) == FAILURE) {
- return;
- }
-
- DOM_GET_OBJ(docp, id, xmlDocPtr, intern);
-
- node = xmlNewDocText(docp, (xmlChar *) value);
- if (!node) {
- RETURN_FALSE;
- }
-
- DOM_RET_OBJ(rv, node, &ret, intern);
-}
-/* }}} end dom_document_create_text_node */
-
-
-/* {{{ proto DOMComment dom_document_create_comment(string data);
-URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-1334481328
-Since:
-*/
-PHP_FUNCTION(dom_document_create_comment)
-{
- zval *id, *rv = NULL;
- xmlNode *node;
- xmlDocPtr docp;
- int ret, value_len;
- dom_object *intern;
- char *value;
-
- if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Os", &id, dom_document_class_entry, &value, &value_len) == FAILURE) {
- return;
- }
-
- DOM_GET_OBJ(docp, id, xmlDocPtr, intern);
-
- node = xmlNewDocComment(docp, (xmlChar *) value);
- if (!node) {
- RETURN_FALSE;
- }
-
- DOM_RET_OBJ(rv, node, &ret, intern);
-}
-/* }}} end dom_document_create_comment */
-
-
-/* {{{ proto DOMCdataSection dom_document_create_cdatasection(string data);
-URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-D26C0AF8
-Since:
-*/
-PHP_FUNCTION(dom_document_create_cdatasection)
-{
- zval *id, *rv = NULL;
- xmlNode *node;
- xmlDocPtr docp;
- int ret, value_len;
- dom_object *intern;
- char *value;
-
- if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Os", &id, dom_document_class_entry, &value, &value_len) == FAILURE) {
- return;
- }
-
- DOM_GET_OBJ(docp, id, xmlDocPtr, intern);
-
- node = xmlNewCDataBlock(docp, (xmlChar *) value, value_len);
- if (!node) {
- RETURN_FALSE;
- }
-
- DOM_RET_OBJ(rv, node, &ret, intern);
-}
-/* }}} end dom_document_create_cdatasection */
-
-
-/* {{{ proto DOMProcessingInstruction dom_document_create_processing_instruction(string target, string data);
-URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-135944439
-Since:
-*/
-PHP_FUNCTION(dom_document_create_processing_instruction)
-{
- zval *id, *rv = NULL;
- xmlNode *node;
- xmlDocPtr docp;
- int ret, value_len, name_len = 0;
- dom_object *intern;
- char *name, *value = NULL;
-
- if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Os|s", &id, dom_document_class_entry, &name, &name_len, &value, &value_len) == FAILURE) {
- return;
- }
-
- DOM_GET_OBJ(docp, id, xmlDocPtr, intern);
-
- if (xmlValidateName((xmlChar *) name, 0) != 0) {
- php_dom_throw_error(INVALID_CHARACTER_ERR, dom_get_strict_error(intern->document) TSRMLS_CC);
- RETURN_FALSE;
- }
-
- node = xmlNewPI((xmlChar *) name, (xmlChar *) value);
- if (!node) {
- RETURN_FALSE;
- }
-
- node->doc = docp;
-
- DOM_RET_OBJ(rv, node, &ret, intern);
-}
-/* }}} end dom_document_create_processing_instruction */
-
-
-/* {{{ proto DOMAttr dom_document_create_attribute(string name);
-URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-1084891198
-Since:
-*/
-PHP_FUNCTION(dom_document_create_attribute)
-{
- zval *id, *rv = NULL;
- xmlAttrPtr node;
- xmlDocPtr docp;
- int ret, name_len;
- dom_object *intern;
- char *name;
-
- if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Os", &id, dom_document_class_entry, &name, &name_len) == FAILURE) {
- return;
- }
-
- DOM_GET_OBJ(docp, id, xmlDocPtr, intern);
-
- if (xmlValidateName((xmlChar *) name, 0) != 0) {
- php_dom_throw_error(INVALID_CHARACTER_ERR, dom_get_strict_error(intern->document) TSRMLS_CC);
- RETURN_FALSE;
- }
-
- node = xmlNewDocProp(docp, (xmlChar *) name, NULL);
- if (!node) {
- RETURN_FALSE;
- }
-
- DOM_RET_OBJ(rv, (xmlNodePtr) node, &ret, intern);
-
-}
-/* }}} end dom_document_create_attribute */
-
-
-/* {{{ proto DOMEntityReference dom_document_create_entity_reference(string name);
-URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-392B75AE
-Since:
-*/
-PHP_FUNCTION(dom_document_create_entity_reference)
-{
- zval *id, *rv = NULL;
- xmlNode *node;
- xmlDocPtr docp = NULL;
- dom_object *intern;
- int ret, name_len;
- char *name;
-
- if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Os", &id, dom_document_class_entry, &name, &name_len) == FAILURE) {
- return;
- }
-
- DOM_GET_OBJ(docp, id, xmlDocPtr, intern);
-
- if (xmlValidateName((xmlChar *) name, 0) != 0) {
- php_dom_throw_error(INVALID_CHARACTER_ERR, dom_get_strict_error(intern->document) TSRMLS_CC);
- RETURN_FALSE;
- }
-
- node = xmlNewReference(docp, name);
- if (!node) {
- RETURN_FALSE;
- }
-
- DOM_RET_OBJ(rv, (xmlNodePtr) node, &ret, intern);
-}
-/* }}} end dom_document_create_entity_reference */
-
-
-/* {{{ proto DOMNodeList dom_document_get_elements_by_tag_name(string tagname);
-URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-A6C9094
-Since:
-*/
-PHP_FUNCTION(dom_document_get_elements_by_tag_name)
-{
- zval *id;
- xmlDocPtr docp;
- int name_len;
- dom_object *intern, *namednode;
- char *name;
- xmlChar *local;
-
- if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Os", &id, dom_document_class_entry, &name, &name_len) == FAILURE) {
- return;
- }
-
- DOM_GET_OBJ(docp, id, xmlDocPtr, intern);
-
- php_dom_create_interator(return_value, DOM_NODELIST TSRMLS_CC);
- namednode = (dom_object *)zend_objects_get_address(return_value TSRMLS_CC);
- local = xmlCharStrndup(name, name_len);
- dom_namednode_iter(intern, 0, namednode, NULL, local, NULL TSRMLS_CC);
-}
-/* }}} end dom_document_get_elements_by_tag_name */
-
-
-/* {{{ proto DOMNode dom_document_import_node(DOMNode importedNode, boolean deep);
-URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#Core-Document-importNode
-Since: DOM Level 2
-*/
-PHP_FUNCTION(dom_document_import_node)
-{
- zval *rv = NULL;
- zval *id, *node;
- xmlDocPtr docp;
- xmlNodePtr nodep, retnodep;
- dom_object *intern, *nodeobj;
- int ret;
- long recursive = 0;
-
- if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "OO|l", &id, dom_document_class_entry, &node, dom_node_class_entry, &recursive) == FAILURE) {
- return;
- }
-
- DOM_GET_OBJ(docp, id, xmlDocPtr, intern);
-
- DOM_GET_OBJ(nodep, node, xmlNodePtr, nodeobj);
-
- if (nodep->type == XML_HTML_DOCUMENT_NODE || nodep->type == XML_DOCUMENT_NODE
- || nodep->type == XML_DOCUMENT_TYPE_NODE) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Cannot import: Node Type Not Supported");
- RETURN_FALSE;
- }
-
- if (nodep->doc == docp) {
- retnodep = nodep;
- } else {
- retnodep = xmlDocCopyNode(nodep, docp, recursive);
- if (!retnodep) {
- RETURN_FALSE;
- }
- }
-
- DOM_RET_OBJ(rv, (xmlNodePtr) retnodep, &ret, intern);
-}
-/* }}} end dom_document_import_node */
-
-
-/* {{{ proto DOMElement dom_document_create_element_ns(string namespaceURI, string qualifiedName [,string value]);
-URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-DocCrElNS
-Since: DOM Level 2
-*/
-PHP_FUNCTION(dom_document_create_element_ns)
-{
- zval *id, *rv = NULL;
- xmlDocPtr docp;
- xmlNodePtr nodep = NULL;
- xmlNsPtr nsptr = NULL;
- int ret, uri_len = 0, name_len = 0, value_len = 0;
- char *uri, *name, *value = NULL;
- char *localname = NULL, *prefix = NULL;
- int errorcode;
- dom_object *intern;
-
- if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Os!s|s", &id, dom_document_class_entry, &uri, &uri_len, &name, &name_len, &value, &value_len) == FAILURE) {
- return;
- }
-
- DOM_GET_OBJ(docp, id, xmlDocPtr, intern);
-
- errorcode = dom_check_qname(name, &localname, &prefix, uri_len, name_len);
-
- if (errorcode == 0) {
- if (xmlValidateName((xmlChar *) localname, 0) == 0) {
- nodep = xmlNewDocNode (docp, NULL, localname, value);
- if (nodep != NULL && uri != NULL) {
- nsptr = xmlSearchNsByHref (nodep->doc, nodep, uri);
- if (nsptr == NULL) {
- nsptr = dom_get_ns(nodep, uri, &errorcode, prefix);
- }
- xmlSetNs(nodep, nsptr);
- }
- } else {
- errorcode = INVALID_CHARACTER_ERR;
- }
- }
-
- xmlFree(localname);
- if (prefix != NULL) {
- xmlFree(prefix);
- }
-
- if (errorcode != 0) {
- if (nodep != NULL) {
- xmlFreeNode(nodep);
- }
- php_dom_throw_error(errorcode, dom_get_strict_error(intern->document) TSRMLS_CC);
- RETURN_FALSE;
- }
-
- if (nodep == NULL) {
- RETURN_FALSE;
- }
-
-
- nodep->ns = nsptr;
-
- DOM_RET_OBJ(rv, nodep, &ret, intern);
-}
-/* }}} end dom_document_create_element_ns */
-
-
-/* {{{ proto DOMAttr dom_document_create_attribute_ns(string namespaceURI, string qualifiedName);
-URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-DocCrAttrNS
-Since: DOM Level 2
-*/
-PHP_FUNCTION(dom_document_create_attribute_ns)
-{
- zval *id, *rv = NULL;
- xmlDocPtr docp;
- xmlNodePtr nodep = NULL, root;
- xmlNsPtr nsptr;
- int ret, uri_len = 0, name_len = 0;
- char *uri, *name;
- char *localname = NULL, *prefix = NULL;
- dom_object *intern;
- int errorcode;
-
- if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Os!s", &id, dom_document_class_entry, &uri, &uri_len, &name, &name_len) == FAILURE) {
- return;
- }
-
- DOM_GET_OBJ(docp, id, xmlDocPtr, intern);
-
- root = xmlDocGetRootElement(docp);
- if (root != NULL) {
- errorcode = dom_check_qname(name, &localname, &prefix, uri_len, name_len);
- if (errorcode == 0) {
- if (xmlValidateName((xmlChar *) localname, 0) == 0) {
- nodep = (xmlNodePtr) xmlNewDocProp(docp, localname, NULL);
- if (nodep != NULL && uri_len > 0) {
- nsptr = xmlSearchNsByHref (nodep->doc, root, uri);
- if (nsptr == NULL) {
- nsptr = dom_get_ns(root, uri, &errorcode, prefix);
- }
- xmlSetNs(nodep, nsptr);
- }
- } else {
- errorcode = INVALID_CHARACTER_ERR;
- }
- }
- } else {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Document Missing Root Element");
- RETURN_FALSE;
- }
-
- xmlFree(localname);
- if (prefix != NULL) {
- xmlFree(prefix);
- }
-
- if (errorcode != 0) {
- if (nodep != NULL) {
- xmlFreeProp((xmlAttrPtr) nodep);
- }
- php_dom_throw_error(errorcode, dom_get_strict_error(intern->document) TSRMLS_CC);
- RETURN_FALSE;
- }
-
- if (nodep == NULL) {
- RETURN_FALSE;
- }
-
- DOM_RET_OBJ(rv, nodep, &ret, intern);
-}
-/* }}} end dom_document_create_attribute_ns */
-
-
-/* {{{ proto DOMNodeList dom_document_get_elements_by_tag_name_ns(string namespaceURI, string localName);
-URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-getElBTNNS
-Since: DOM Level 2
-*/
-PHP_FUNCTION(dom_document_get_elements_by_tag_name_ns)
-{
- zval *id;
- xmlDocPtr docp;
- int uri_len, name_len;
- dom_object *intern, *namednode;
- char *uri, *name;
- xmlChar *local, *nsuri;
-
- if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Oss", &id, dom_document_class_entry, &uri, &uri_len, &name, &name_len) == FAILURE) {
- return;
- }
-
- DOM_GET_OBJ(docp, id, xmlDocPtr, intern);
-
- php_dom_create_interator(return_value, DOM_NODELIST TSRMLS_CC);
- namednode = (dom_object *)zend_objects_get_address(return_value TSRMLS_CC);
- local = xmlCharStrndup(name, name_len);
- nsuri = xmlCharStrndup(uri, uri_len);
- dom_namednode_iter(intern, 0, namednode, NULL, local, nsuri TSRMLS_CC);
-}
-/* }}} end dom_document_get_elements_by_tag_name_ns */
-
-
-/* {{{ proto DOMElement dom_document_get_element_by_id(string elementId);
-URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-getElBId
-Since: DOM Level 2
-*/
-PHP_FUNCTION(dom_document_get_element_by_id)
-{
- zval *id, *rv = NULL;
- xmlDocPtr docp;
- xmlAttrPtr attrp;
- int ret, idname_len;
- dom_object *intern;
- char *idname;
-
- if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Os", &id, dom_document_class_entry, &idname, &idname_len) == FAILURE) {
- return;
- }
-
- DOM_GET_OBJ(docp, id, xmlDocPtr, intern);
-
- attrp = xmlGetID(docp, (xmlChar *) idname);
-
- if (attrp && attrp->parent) {
- DOM_RET_OBJ(rv, (xmlNodePtr) attrp->parent, &ret, intern);
- } else {
- RETVAL_NULL();
- }
-
-}
-/* }}} end dom_document_get_element_by_id */
-
-
-/* {{{ proto DOMNode dom_document_adopt_node(DOMNode source);
-URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-Document3-adoptNode
-Since: DOM Level 3
-*/
-PHP_FUNCTION(dom_document_adopt_node)
-{
- DOM_NOT_IMPLEMENTED();
-}
-/* }}} end dom_document_adopt_node */
-
-
-/* {{{ proto void dom_document_normalize_document();
-URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-Document3-normalizeDocument
-Since: DOM Level 3
-*/
-PHP_FUNCTION(dom_document_normalize_document)
-{
- zval *id;
- xmlDocPtr docp;
- dom_object *intern;
-
- if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &id, dom_document_class_entry) == FAILURE) {
- return;
- }
-
- DOM_GET_OBJ(docp, id, xmlDocPtr, intern);
-
- dom_normalize((xmlNodePtr) docp TSRMLS_CC);
-}
-/* }}} end dom_document_normalize_document */
-
-
-/* {{{ proto DOMNode dom_document_rename_node(node n, string namespaceURI, string qualifiedName);
-URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-Document3-renameNode
-Since: DOM Level 3
-*/
-PHP_FUNCTION(dom_document_rename_node)
-{
- DOM_NOT_IMPLEMENTED();
-}
-/* }}} end dom_document_rename_node */
-
-/* {{{ proto void DOMDocument::__construct([string version], [string encoding]); */
-PHP_METHOD(domdocument, __construct)
-{
-
- zval *id;
- xmlDoc *docp = NULL, *olddoc;
- dom_object *intern;
- char *encoding, *version = NULL;
- int encoding_len = 0, version_len = 0, refcount;
-
- php_set_error_handling(EH_THROW, dom_domexception_class_entry TSRMLS_CC);
- if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O|ss", &id, dom_document_class_entry, &version, &version_len, &encoding, &encoding_len) == FAILURE) {
- php_std_error_handling();
- return;
- }
-
- php_std_error_handling();
- docp = xmlNewDoc(version);
-
- if (!docp) {
- php_dom_throw_error(INVALID_STATE_ERR, 1 TSRMLS_CC);
- RETURN_FALSE;
- }
-
- if (encoding_len > 0) {
- docp->encoding = (const xmlChar*)xmlStrdup(encoding);
- }
-
- intern = (dom_object *)zend_object_store_get_object(id TSRMLS_CC);
- if (intern != NULL) {
- olddoc = (xmlDocPtr) dom_object_get_node(intern);
- if (olddoc != NULL) {
- php_libxml_decrement_node_ptr((php_libxml_node_object *) intern TSRMLS_CC);
- refcount = php_libxml_decrement_doc_ref((php_libxml_node_object *)intern TSRMLS_CC);
- if (refcount != 0) {
- olddoc->_private = NULL;
- }
- }
- intern->document = NULL;
- php_libxml_increment_doc_ref((php_libxml_node_object *)intern, docp TSRMLS_CC);
- php_libxml_increment_node_ptr((php_libxml_node_object *)intern, (xmlNodePtr)docp, (void *)intern TSRMLS_CC);
- }
-}
-/* }}} end DOMDocument::__construct */
-
-char *_dom_get_valid_file_path(char *source, char *resolved_path, int resolved_path_len TSRMLS_DC) {
- xmlURI *uri;
- xmlChar *escsource;
- char *file_dest;
- int isFileUri = 0;
-
- uri = xmlCreateURI();
- escsource = xmlURIEscapeStr(source, ":");
- xmlParseURIReference(uri, escsource);
- xmlFree(escsource);
-
- if (uri->scheme != NULL) {
- /* absolute file uris - libxml only supports localhost or empty host */
- if (strncasecmp(source, "file:///",8) == 0) {
- isFileUri = 1;
-#ifdef PHP_WIN32
- source += 8;
-#else
- source += 7;
-#endif
- } else if (strncasecmp(source, "file://localhost/",17) == 0) {
- isFileUri = 1;
-#ifdef PHP_WIN32
- source += 17;
-#else
- source += 16;
-#endif
- }
- }
-
- file_dest = source;
-
- if ((uri->scheme == NULL || isFileUri)) {
- /* XXX possible buffer overflow if VCWD_REALPATH does not know size of resolved_path */
- if (! VCWD_REALPATH(source, resolved_path)) {
- expand_filepath(source, resolved_path TSRMLS_CC);
- }
- file_dest = resolved_path;
- }
-
- xmlFreeURI(uri);
-
- return file_dest;
-}
-
-
-/* {{{ */
-static xmlDocPtr dom_document_parser(zval *id, int mode, char *source TSRMLS_DC) {
- xmlDocPtr ret;
- xmlParserCtxtPtr ctxt = NULL;
- dom_doc_props *doc_props;
- dom_object *intern;
- php_libxml_ref_obj *document = NULL;
- int validate, recover, resolve_externals, keep_blanks, substitute_ent;
- int resolved_path_len;
- int old_error_reporting;
- char *directory=NULL, resolved_path[MAXPATHLEN];
-
- if (id != NULL) {
- intern = (dom_object *)zend_object_store_get_object(id TSRMLS_CC);
- document = intern->document;
- }
-
- doc_props = dom_get_doc_props(document);
- validate = doc_props->validateonparse;
- resolve_externals = doc_props->resolveexternals;
- keep_blanks = doc_props->preservewhitespace;
- substitute_ent = doc_props->substituteentities;
- recover = doc_props->recover;
-
- if (document == NULL) {
- efree(doc_props);
- }
-
- xmlInitParser();
-
- keep_blanks = xmlKeepBlanksDefault(keep_blanks);
-
- if (mode == DOM_LOAD_FILE) {
- char *file_dest = _dom_get_valid_file_path(source, resolved_path, MAXPATHLEN TSRMLS_CC);
- if (file_dest) {
- ctxt = xmlCreateFileParserCtxt(file_dest);
- }
-
- } else {
- ctxt = xmlCreateDocParserCtxt(source);
- }
-
- xmlKeepBlanksDefault(keep_blanks);
- /* xmlIndentTreeOutput default is changed in xmlKeepBlanksDefault
- reset back to 1 which is default value */
-
- xmlIndentTreeOutput = 1;
-
- if (ctxt == NULL) {
- return(NULL);
- }
-
- /* If loading from memory, we need to set the base directory for the document */
- if (mode != DOM_LOAD_FILE) {
-#if HAVE_GETCWD
- directory = VCWD_GETCWD(resolved_path, MAXPATHLEN);
-#elif HAVE_GETWD
- directory = VCWD_GETWD(resolved_path);
-#endif
- if (directory) {
- if(ctxt->directory != NULL) {
- xmlFree((char *) ctxt->directory);
- }
- resolved_path_len = strlen(resolved_path);
- if (resolved_path[resolved_path_len - 1] != DEFAULT_SLASH) {
- resolved_path[resolved_path_len] = DEFAULT_SLASH;
- resolved_path[++resolved_path_len] = '\0';
- }
- ctxt->directory = (char *) xmlCanonicPath((const xmlChar *) resolved_path);
- }
- }
-
- ctxt->recovery = recover;
- ctxt->validate = validate;
- ctxt->loadsubset = (resolve_externals * XML_COMPLETE_ATTRS);
- ctxt->replaceEntities = substitute_ent;
-
- ctxt->vctxt.error = php_libxml_ctx_error;
- ctxt->vctxt.warning = php_libxml_ctx_warning;
-
- if (ctxt->sax != NULL) {
- ctxt->sax->error = php_libxml_ctx_error;
- ctxt->sax->warning = php_libxml_ctx_warning;
- }
- if (recover) {
- old_error_reporting = EG(error_reporting);
- EG(error_reporting) = old_error_reporting | E_WARNING;
- }
- xmlParseDocument(ctxt);
-
- if (ctxt->wellFormed || recover) {
- ret = ctxt->myDoc;
- if (recover) {
- 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) {
- ret->URL = xmlStrdup(ctxt->directory);
- }
- } else {
- ret = NULL;
- xmlFreeDoc(ctxt->myDoc);
- ctxt->myDoc = NULL;
- }
-
- xmlFreeParserCtxt(ctxt);
-
- return(ret);
-}
-/* }}} */
-
-/* {{{ static void dom_parse_document(INTERNAL_FUNCTION_PARAMETERS, int mode) */
-static void dom_parse_document(INTERNAL_FUNCTION_PARAMETERS, int mode) {
- zval *id, *rv = NULL;
- xmlDoc *docp = NULL, *newdoc;
- dom_doc_props *doc_prop;
- dom_object *intern;
- char *source;
- int source_len, refcount, ret;
-
- id = getThis();
- if (id != NULL && ! instanceof_function(Z_OBJCE_P(id), dom_document_class_entry TSRMLS_CC)) {
- id = NULL;
- }
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &source, &source_len) == FAILURE) {
- return;
- }
-
- if (!source_len) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Empty string supplied as input");
- RETURN_FALSE;
- }
-
- newdoc = dom_document_parser(id, mode, source TSRMLS_CC);
-
- if (!newdoc)
- RETURN_FALSE;
-
- if (id != NULL) {
- intern = (dom_object *)zend_object_store_get_object(id TSRMLS_CC);
- if (intern != NULL) {
- docp = (xmlDocPtr) dom_object_get_node(intern);
- doc_prop = NULL;
- if (docp != NULL) {
- php_libxml_decrement_node_ptr((php_libxml_node_object *) intern TSRMLS_CC);
- doc_prop = intern->document->doc_props;
- intern->document->doc_props = NULL;
- refcount = php_libxml_decrement_doc_ref((php_libxml_node_object *)intern TSRMLS_CC);
- if (refcount != 0) {
- docp->_private = NULL;
- }
- }
- intern->document = NULL;
- php_libxml_increment_doc_ref((php_libxml_node_object *)intern, newdoc TSRMLS_CC);
- intern->document->doc_props = doc_prop;
- }
-
- php_libxml_increment_node_ptr((php_libxml_node_object *)intern, (xmlNodePtr)newdoc, (void *)intern TSRMLS_CC);
-
- RETURN_TRUE;
- } else {
- DOM_RET_OBJ(rv, (xmlNodePtr) newdoc, &ret, NULL);
- }
-}
-/* }}} end dom_parser_document */
-
-/* {{{ proto boolean|DOMNode dom_document_load(string source);
-URL: http://www.w3.org/TR/DOM-Level-3-LS/load-save.html#LS-DocumentLS-load
-Since: DOM Level 3
-*/
-PHP_METHOD(domdocument, load)
-{
- dom_parse_document(INTERNAL_FUNCTION_PARAM_PASSTHRU, DOM_LOAD_FILE);
-}
-/* }}} end dom_document_load */
-
-/* {{{ proto boolean|DOMNode dom_document_loadxml(string source);
-URL: http://www.w3.org/TR/DOM-Level-3-LS/load-save.html#LS-DocumentLS-loadXML
-Since: DOM Level 3
-*/
-PHP_METHOD(domdocument, loadXML)
-{
- dom_parse_document(INTERNAL_FUNCTION_PARAM_PASSTHRU, DOM_LOAD_STRING);
-}
-/* }}} end dom_document_loadxml */
-
-/* {{{ proto long dom_document_save(string file);
-Convenience method to save to file
-*/
-PHP_FUNCTION(dom_document_save)
-{
- zval *id;
- xmlDoc *docp;
- int file_len = 0, bytes, format;
- dom_object *intern;
- dom_doc_props *doc_props;
- char *file;
-
- if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Os", &id, dom_document_class_entry, &file, &file_len) == FAILURE) {
- return;
- }
-
- if (file_len == 0) {
- php_error(E_WARNING, "Invalid Filename");
- RETURN_FALSE;
- }
-
- DOM_GET_OBJ(docp, id, xmlDocPtr, intern);
-
- /* encoding handled by property on doc */
-
- doc_props = dom_get_doc_props(intern->document);
- format = doc_props->formatoutput;
- bytes = xmlSaveFormatFileEnc(file, docp, NULL, format);
-
- if (bytes == -1) {
- RETURN_FALSE;
- }
- RETURN_LONG(bytes);
-}
-/* }}} end dom_document_save */
-
-/* {{{ proto string dom_document_savexml([node n]);
-URL: http://www.w3.org/TR/DOM-Level-3-LS/load-save.html#LS-DocumentLS-saveXML
-Since: DOM Level 3
-*/
-PHP_FUNCTION(dom_document_savexml)
-{
- zval *id, *nodep = NULL;
- xmlDoc *docp;
- xmlNode *node;
- xmlBufferPtr buf;
- xmlChar *mem;
- dom_object *intern, *nodeobj;
- dom_doc_props *doc_props;
- int size, format;
-
- if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O|O", &id, dom_document_class_entry, &nodep, dom_node_class_entry) == FAILURE) {
- return;
- }
-
- DOM_GET_OBJ(docp, id, xmlDocPtr, intern);
-
- doc_props = dom_get_doc_props(intern->document);
- format = doc_props->formatoutput;
-
- if (nodep != NULL) {
- /* Dump contents of Node */
- DOM_GET_OBJ(node, nodep, xmlNodePtr, nodeobj);
- if (node->doc != docp) {
- php_dom_throw_error(WRONG_DOCUMENT_ERR, dom_get_strict_error(intern->document) TSRMLS_CC);
- RETURN_FALSE;
- }
- buf = xmlBufferCreate();
- if (!buf) {
- php_error(E_WARNING, "Could not fetch buffer");
- RETURN_FALSE;
- }
-
- xmlNodeDump(buf, docp, node, 0, format);
- mem = (xmlChar*) xmlBufferContent(buf);
- if (!mem) {
- xmlBufferFree(buf);
- RETURN_FALSE;
- }
- RETVAL_STRING(mem, 1);
- xmlBufferFree(buf);
- } else {
- /* Encoding is handled from the encoding property set on the document */
- xmlDocDumpFormatMemory(docp, &mem, &size, format);
- if (!size) {
- RETURN_FALSE;
- }
- RETVAL_STRINGL(mem, size, 1);
- xmlFree(mem);
- }
-}
-/* }}} end dom_document_savexml */
-
-static xmlNodePtr php_dom_free_xinclude_node(xmlNodePtr cur TSRMLS_DC) {
- xmlNodePtr xincnode;
-
- xincnode = cur;
- cur = cur->next;
- xmlUnlinkNode(xincnode);
- php_libxml_node_free_resource(xincnode TSRMLS_CC);
-
- return cur;
-}
-
-static void php_dom_remove_xinclude_nodes(xmlNodePtr cur TSRMLS_DC) {
- while(cur) {
- if (cur->type == XML_XINCLUDE_START) {
- cur = php_dom_free_xinclude_node(cur TSRMLS_CC);
-
- /* XML_XINCLUDE_END node will be a sibling of XML_XINCLUDE_START */
- while(cur && cur->type != XML_XINCLUDE_END) {
- cur = cur->next;
- }
-
- if (cur && cur->type == XML_XINCLUDE_END) {
- cur = php_dom_free_xinclude_node(cur TSRMLS_CC);
- }
- } else {
- if (cur->type == XML_ELEMENT_NODE) {
- php_dom_remove_xinclude_nodes(cur->children TSRMLS_CC);
- }
- cur = cur->next;
- }
- }
-}
-
-/* {{{ proto int dom_document_xinclude()
- Substitutues xincludes in a DomDocument */
-PHP_FUNCTION(dom_document_xinclude)
-{
- zval *id;
- xmlDoc *docp;
- xmlNodePtr root;
- int err;
- dom_object *intern;
-
- if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &id, dom_document_class_entry) == FAILURE) {
- return;
- }
-
- DOM_GET_OBJ(docp, id, xmlDocPtr, intern);
-
- err = xmlXIncludeProcess (docp);
-
- /* XML_XINCLUDE_START and XML_XINCLUDE_END nodes need to be removed as these
- are added via xmlXIncludeProcess to mark beginning and ending of xincluded document
- but are not wanted in resulting document - must be done even if err as it could fail after
- having processed some xincludes */
- root = (xmlNodePtr) docp->children;
- while(root && root->type != XML_ELEMENT_NODE && root->type != XML_XINCLUDE_START) {
- root = root->next;
- }
- if (root) {
- php_dom_remove_xinclude_nodes(root TSRMLS_CC);
- }
-
- if (err) {
- RETVAL_LONG(err);
- } else {
- RETVAL_FALSE;
- }
-
-}
-
-
-/* {{{ proto boolean dom_document_validate();
-Since: DOM extended
-*/
-PHP_FUNCTION(dom_document_validate)
-{
- zval *id;
- xmlDoc *docp;
- dom_object *intern;
- xmlValidCtxt *cvp;
-
- if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &id, dom_document_class_entry) == FAILURE) {
- return;
- }
-
- DOM_GET_OBJ(docp, id, xmlDocPtr, intern);
-
- if (docp->intSubset == NULL) {
- php_error_docref(NULL TSRMLS_CC, E_NOTICE, "No DTD given in XML-Document");
- }
-
- cvp = xmlNewValidCtxt();
-
- cvp->userData = NULL;
- cvp->error = (xmlValidityErrorFunc) php_libxml_error_handler;
- cvp->warning = (xmlValidityErrorFunc) php_libxml_error_handler;
-
- if (xmlValidateDocument(cvp, docp)) {
- RETVAL_TRUE;
- } else {
- RETVAL_FALSE;
- }
-
- xmlFreeValidCtxt(cvp);
-
-}
-
-
-#if defined(LIBXML_SCHEMAS_ENABLED)
-static void
-_dom_document_schema_validate(INTERNAL_FUNCTION_PARAMETERS, int type)
-{
- zval *id;
- xmlDoc *docp;
- dom_object *intern;
- char *source = NULL, *valid_file = NULL;
- int source_len = 0;
- xmlSchemaParserCtxtPtr parser;
- xmlSchemaPtr sptr;
- xmlSchemaValidCtxtPtr vptr;
- int is_valid;
- char resolved_path[MAXPATHLEN + 1];
-
- if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Os", &id, dom_document_class_entry, &source, &source_len) == FAILURE) {
- return;
- }
-
- if (source_len == 0) {
- php_error(E_WARNING, "Invalid Schema source");
- RETURN_FALSE;
- }
-
- DOM_GET_OBJ(docp, id, xmlDocPtr, intern);
-
- switch (type) {
- case DOM_LOAD_FILE:
- valid_file = _dom_get_valid_file_path(source, resolved_path, MAXPATHLEN TSRMLS_CC);
- if (!valid_file) {
- php_error(E_WARNING, "Invalid Schema file source");
- RETURN_FALSE;
- }
- parser = xmlSchemaNewParserCtxt(valid_file);
- break;
- case DOM_LOAD_STRING:
- parser = xmlSchemaNewMemParserCtxt(source, source_len);
- /* If loading from memory, we need to set the base directory for the document
- but it is not apparent how to do that for schema's */
- break;
- default:
- return;
- }
-
- xmlSchemaSetParserErrors(parser,
- (xmlSchemaValidityErrorFunc) php_libxml_error_handler,
- (xmlSchemaValidityWarningFunc) php_libxml_error_handler,
- parser);
- sptr = xmlSchemaParse(parser);
- xmlSchemaFreeParserCtxt(parser);
- if (!sptr) {
- php_error(E_WARNING, "Invalid Schema");
- RETURN_FALSE;
- }
-
- docp = (xmlDocPtr) dom_object_get_node(intern);
-
- vptr = xmlSchemaNewValidCtxt(sptr);
- if (!vptr) {
- xmlSchemaFree(sptr);
- php_error(E_ERROR, "Invalid Schema Validation Context");
- RETURN_FALSE;
- }
-
- xmlSchemaSetValidErrors(vptr, php_libxml_error_handler, php_libxml_error_handler, vptr);
- is_valid = xmlSchemaValidateDoc(vptr, docp);
- xmlSchemaFree(sptr);
- xmlSchemaFreeValidCtxt(vptr);
-
- if (is_valid == 0) {
- RETURN_TRUE;
- } else {
- RETURN_FALSE;
- }
-}
-
-/* {{{ proto boolean dom_document_schema_validate_file(string filename); */
-PHP_FUNCTION(dom_document_schema_validate_file)
-{
- _dom_document_schema_validate(INTERNAL_FUNCTION_PARAM_PASSTHRU, DOM_LOAD_FILE);
-}
-/* }}} end dom_document_schema_validate_file */
-
-/* {{{ proto boolean dom_document_schema_validate(string source); */
-PHP_FUNCTION(dom_document_schema_validate_xml)
-{
- _dom_document_schema_validate(INTERNAL_FUNCTION_PARAM_PASSTHRU, DOM_LOAD_STRING);
-}
-/* }}} end dom_document_schema_validate */
-
-
-static void
-_dom_document_relaxNG_validate(INTERNAL_FUNCTION_PARAMETERS, int type)
-{
- zval *id;
- xmlDoc *docp;
- dom_object *intern;
- char *source = NULL, *valid_file = NULL;
- int source_len = 0;
- xmlRelaxNGParserCtxtPtr parser;
- xmlRelaxNGPtr sptr;
- xmlRelaxNGValidCtxtPtr vptr;
- int is_valid;
- char resolved_path[MAXPATHLEN + 1];
-
- if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Os", &id, dom_document_class_entry, &source, &source_len) == FAILURE) {
- return;
- }
-
- if (source_len == 0) {
- php_error(E_WARNING, "Invalid Schema source");
- RETURN_FALSE;
- }
-
- DOM_GET_OBJ(docp, id, xmlDocPtr, intern);
-
- switch (type) {
- case DOM_LOAD_FILE:
- valid_file = _dom_get_valid_file_path(source, resolved_path, MAXPATHLEN TSRMLS_CC);
- if (!valid_file) {
- php_error(E_WARNING, "Invalid RelaxNG file source");
- RETURN_FALSE;
- }
- parser = xmlRelaxNGNewParserCtxt(valid_file);
- break;
- case DOM_LOAD_STRING:
- parser = xmlRelaxNGNewMemParserCtxt(source, source_len);
- /* If loading from memory, we need to set the base directory for the document
- but it is not apparent how to do that for schema's */
- break;
- default:
- return;
- }
-
- xmlRelaxNGSetParserErrors(parser,
- (xmlRelaxNGValidityErrorFunc) php_libxml_error_handler,
- (xmlRelaxNGValidityWarningFunc) php_libxml_error_handler,
- parser);
- sptr = xmlRelaxNGParse(parser);
- xmlRelaxNGFreeParserCtxt(parser);
- if (!sptr) {
- php_error(E_WARNING, "Invalid RelaxNG");
- RETURN_FALSE;
- }
-
- docp = (xmlDocPtr) dom_object_get_node(intern);
-
- vptr = xmlRelaxNGNewValidCtxt(sptr);
- if (!vptr) {
- xmlRelaxNGFree(sptr);
- php_error(E_ERROR, "Invalid RelaxNG Validation Context");
- RETURN_FALSE;
- }
-
- xmlRelaxNGSetValidErrors(vptr, php_libxml_error_handler, php_libxml_error_handler, vptr);
- is_valid = xmlRelaxNGValidateDoc(vptr, docp);
- xmlRelaxNGFree(sptr);
- xmlRelaxNGFreeValidCtxt(vptr);
-
- if (is_valid == 0) {
- RETURN_TRUE;
- } else {
- RETURN_FALSE;
- }
-}
-
-/* {{{ proto boolean dom_document_relaxNG_validate_file(string filename); */
-PHP_FUNCTION(dom_document_relaxNG_validate_file)
-{
- _dom_document_relaxNG_validate(INTERNAL_FUNCTION_PARAM_PASSTHRU, DOM_LOAD_FILE);
-}
-/* }}} end dom_document_relaxNG_validate_file */
-
-/* {{{ proto boolean dom_document_relaxNG_validate_xml(string source); */
-PHP_FUNCTION(dom_document_relaxNG_validate_xml)
-{
- _dom_document_relaxNG_validate(INTERNAL_FUNCTION_PARAM_PASSTHRU, DOM_LOAD_STRING);
-}
-/* }}} end dom_document_relaxNG_validate_xml */
-
-#endif
-
-#if defined(LIBXML_HTML_ENABLED)
-
-static void dom_load_html(INTERNAL_FUNCTION_PARAMETERS, int mode)
-{
- zval *id, *rv = NULL;
- xmlDoc *docp = NULL, *newdoc;
- dom_object *intern;
- dom_doc_props *doc_prop;
- char *source;
- int source_len, refcount, ret;
- htmlParserCtxtPtr ctxt;
-
- id = getThis();
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &source, &source_len) == FAILURE) {
- return;
- }
-
- if (!source_len) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Empty string supplied as input");
- RETURN_FALSE;
- }
-
- if (mode == DOM_LOAD_FILE) {
- ctxt = htmlCreateFileParserCtxt(source, NULL);
- } else {
- source_len = xmlStrlen(source);
- ctxt = htmlCreateMemoryParserCtxt(source, source_len);
- }
-
- if (!ctxt) {
- RETURN_FALSE;
- }
-
- ctxt->vctxt.error = php_libxml_ctx_error;
- ctxt->vctxt.warning = php_libxml_ctx_warning;
- if (ctxt->sax != NULL) {
- ctxt->sax->error = php_libxml_ctx_error;
- ctxt->sax->warning = php_libxml_ctx_warning;
- }
- htmlParseDocument(ctxt);
- newdoc = ctxt->myDoc;
- htmlFreeParserCtxt(ctxt);
-
- if (!newdoc)
- RETURN_FALSE;
-
- if (id != NULL && instanceof_function(Z_OBJCE_P(id), dom_document_class_entry TSRMLS_CC)) {
- intern = (dom_object *)zend_object_store_get_object(id TSRMLS_CC);
- if (intern != NULL) {
- docp = (xmlDocPtr) dom_object_get_node(intern);
- doc_prop = NULL;
- if (docp != NULL) {
- php_libxml_decrement_node_ptr((php_libxml_node_object *) intern TSRMLS_CC);
- doc_prop = intern->document->doc_props;
- intern->document->doc_props = NULL;
- refcount = php_libxml_decrement_doc_ref((php_libxml_node_object *)intern TSRMLS_CC);
- if (refcount != 0) {
- docp->_private = NULL;
- }
- }
- intern->document = NULL;
- php_libxml_increment_doc_ref((php_libxml_node_object *)intern, newdoc TSRMLS_CC);
- intern->document->doc_props = doc_prop;
- }
-
- php_libxml_increment_node_ptr((php_libxml_node_object *)intern, (xmlNodePtr)newdoc, (void *)intern TSRMLS_CC);
-
- RETURN_TRUE;
- } else {
- DOM_RET_OBJ(rv, (xmlNodePtr) newdoc, &ret, NULL);
- }
-}
-
-/* {{{ proto boolean|DOMNode dom_document_load_html_file(string source);
-Since: DOM extended
-*/
-PHP_METHOD(domdocument, loadHTMLFile)
-{
- dom_load_html(INTERNAL_FUNCTION_PARAM_PASSTHRU, DOM_LOAD_FILE);
-}
-/* }}} end dom_document_load_html_file */
-
-/* {{{ proto boolean|DOMNode dom_document_load_html(string source);
-Since: DOM extended
-*/
-PHP_METHOD(domdocument, loadHTML)
-{
- dom_load_html(INTERNAL_FUNCTION_PARAM_PASSTHRU, DOM_LOAD_STRING);
-}
-/* }}} end dom_document_load_html */
-
-/* {{{ proto long dom_document_save_html_file(string file);
-Convenience method to save to file as html
-*/
-PHP_FUNCTION(dom_document_save_html_file)
-{
- zval *id;
- xmlDoc *docp;
- int file_len, bytes, format;
- dom_object *intern;
- dom_doc_props *doc_props;
- char *file;
-
- if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Os", &id, dom_document_class_entry, &file, &file_len) == FAILURE) {
- return;
- }
-
- if (file_len == 0) {
- php_error(E_WARNING, "Invalid Filename");
- RETURN_FALSE;
- }
-
- DOM_GET_OBJ(docp, id, xmlDocPtr, intern);
-
- /* encoding handled by property on doc */
-
- doc_props = dom_get_doc_props(intern->document);
- format = doc_props->formatoutput;
- bytes = htmlSaveFileFormat(file, docp, NULL, format);
-
- if (bytes == -1) {
- RETURN_FALSE;
- }
- RETURN_LONG(bytes);
-}
-/* }}} end dom_document_save_html_file */
-
-/* {{{ proto string dom_document_save_html();
-Convenience method to output as html
-*/
-PHP_FUNCTION(dom_document_save_html)
-{
- zval *id;
- xmlDoc *docp;
- dom_object *intern;
- xmlChar *mem;
- int size;
-
- if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &id, dom_document_class_entry) == FAILURE) {
- return;
- }
-
- DOM_GET_OBJ(docp, id, xmlDocPtr, intern);
-
- htmlDocDumpMemory(docp, &mem, &size);
- if (!size) {
- if (mem)
- xmlFree(mem);
- RETURN_FALSE;
- }
- RETVAL_STRINGL(mem, size, 1);
- xmlFree(mem);
-}
-/* }}} end dom_document_save_html */
-
-#endif /* defined(LIBXML_HTML_ENABLED) */
-
-#endif /* HAVE_LIBXML && HAVE_DOM */
diff --git a/ext/dom/documentfragment.c b/ext/dom/documentfragment.c
deleted file mode 100644
index 0fed1a81d4..0000000000
--- a/ext/dom/documentfragment.c
+++ /dev/null
@@ -1,105 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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. |
- +----------------------------------------------------------------------+
- | Authors: Christian Stocker <chregu@php.net> |
- | Rob Richards <rrichards@php.net> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "php.h"
-#if HAVE_LIBXML && HAVE_DOM
-#include "php_dom.h"
-
-
-/*
-* class DOMDocumentFragment extends DOMNode
-*
-* URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#ID-B63ED1A3
-* Since:
-*/
-
-zend_function_entry php_dom_documentfragment_class_functions[] = {
- PHP_ME(domdocumentfragment, __construct, NULL, ZEND_ACC_PUBLIC)
- PHP_ME(domdocumentfragment, appendXML, NULL, ZEND_ACC_PUBLIC)
- {NULL, NULL, NULL}
-};
-
-/* {{{ proto void DOMDocumentFragment::__construct(); */
-PHP_METHOD(domdocumentfragment, __construct)
-{
-
- zval *id;
- xmlNodePtr nodep = NULL, oldnode = NULL;
- dom_object *intern;
-
- php_set_error_handling(EH_THROW, dom_domexception_class_entry TSRMLS_CC);
- if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &id, dom_documentfragment_class_entry) == FAILURE) {
- php_std_error_handling();
- return;
- }
-
- php_std_error_handling();
- nodep = xmlNewDocFragment(NULL);
-
- if (!nodep) {
- php_dom_throw_error(INVALID_STATE_ERR, 1 TSRMLS_CC);
- RETURN_FALSE;
- }
-
- intern = (dom_object *)zend_object_store_get_object(id TSRMLS_CC);
- if (intern != NULL) {
- oldnode = (xmlNodePtr)intern->ptr;
- if (oldnode != NULL) {
- php_libxml_node_free_resource(oldnode TSRMLS_CC);
- }
- /* php_dom_set_object(intern, nodep TSRMLS_CC); */
- php_libxml_increment_node_ptr((php_libxml_node_object *)intern, nodep, (void *)intern TSRMLS_CC);
- }
-}
-/* }}} end DOMDocumentFragment::__construct */
-
-/* {{{ proto void DOMDocumentFragment::appendXML(string data); */
-PHP_METHOD(domdocumentfragment, appendXML) {
- zval *id;
- xmlNode *nodep;
- dom_object *intern;
- char *data = NULL;
- int data_len = 0;
- int err;
- xmlNodePtr lst;
-
- if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Os", &id, dom_documentfragment_class_entry, &data, &data_len) == FAILURE) {
- return;
- }
-
- DOM_GET_OBJ(nodep, id, xmlNodePtr, intern);
-
- if (data) {
- err = xmlParseBalancedChunkMemory(nodep->doc, NULL, NULL, 0, data, &lst);
- if (err != 0) {
- RETURN_FALSE;
- }
- xmlAddChildList(nodep,lst);
- }
-
- RETURN_TRUE;
-}
-
-#endif
diff --git a/ext/dom/documenttype.c b/ext/dom/documenttype.c
deleted file mode 100644
index 9d030801d9..0000000000
--- a/ext/dom/documenttype.c
+++ /dev/null
@@ -1,234 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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. |
- +----------------------------------------------------------------------+
- | Authors: Christian Stocker <chregu@php.net> |
- | Rob Richards <rrichards@php.net> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "php.h"
-#if HAVE_LIBXML && HAVE_DOM
-#include "php_dom.h"
-
-/*
-* class DOMDocumentType extends DOMNode
-*
-* URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-412266927
-* Since:
-*/
-
-zend_function_entry php_dom_documenttype_class_functions[] = {
- {NULL, NULL, NULL}
-};
-
-/* {{{ proto name string
-readonly=yes
-URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-1844763134
-Since:
-*/
-int dom_documenttype_name_read(dom_object *obj, zval **retval TSRMLS_DC)
-{
- xmlDtdPtr dtdptr;
-
- dtdptr = (xmlDtdPtr) dom_object_get_node(obj);
-
- if (dtdptr == NULL) {
- php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC);
- return FAILURE;
- }
-
- ALLOC_ZVAL(*retval);
- ZVAL_STRING(*retval, (char *) (dtdptr->name), 1);
-
- return SUCCESS;
-}
-
-/* }}} */
-
-
-
-/* {{{ proto entities DOMNamedNodeMap
-readonly=yes
-URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-1788794630
-Since:
-*/
-int dom_documenttype_entities_read(dom_object *obj, zval **retval TSRMLS_DC)
-{
- xmlDtdPtr doctypep;
- xmlHashTable *entityht;
- dom_object *intern;
-
- doctypep = (xmlDtdPtr) dom_object_get_node(obj);
-
- if (doctypep == NULL) {
- php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC);
- return FAILURE;
- }
-
- MAKE_STD_ZVAL(*retval);
- php_dom_create_interator(*retval, DOM_NAMEDNODEMAP TSRMLS_CC);
-
- entityht = (xmlHashTable *) doctypep->entities;
-
- intern = (dom_object *)zend_objects_get_address(*retval TSRMLS_CC);
- dom_namednode_iter(obj, XML_ENTITY_NODE, intern, entityht, NULL, NULL TSRMLS_CC);
-
- return SUCCESS;
-}
-
-/* }}} */
-
-
-
-/* {{{ proto notations DOMNamedNodeMap
-readonly=yes
-URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-D46829EF
-Since:
-*/
-int dom_documenttype_notations_read(dom_object *obj, zval **retval TSRMLS_DC)
-{
- xmlDtdPtr doctypep;
- xmlHashTable *notationht;
- dom_object *intern;
-
- doctypep = (xmlDtdPtr) dom_object_get_node(obj);
-
- if (doctypep == NULL) {
- php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC);
- return FAILURE;
- }
-
- MAKE_STD_ZVAL(*retval);
- php_dom_create_interator(*retval, DOM_NAMEDNODEMAP TSRMLS_CC);
-
- notationht = (xmlHashTable *) doctypep->notations;
-
- intern = (dom_object *)zend_objects_get_address(*retval TSRMLS_CC);
- dom_namednode_iter(obj, XML_NOTATION_NODE, intern, notationht, NULL, NULL TSRMLS_CC);
-
- return SUCCESS;
-}
-
-/* }}} */
-
-
-
-/* {{{ proto publicId string
-readonly=yes
-URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-Core-DocType-publicId
-Since: DOM Level 2
-*/
-int dom_documenttype_public_id_read(dom_object *obj, zval **retval TSRMLS_DC)
-{
- xmlDtdPtr dtdptr;
-
- dtdptr = (xmlDtdPtr) dom_object_get_node(obj);
-
- if (dtdptr == NULL) {
- php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC);
- return FAILURE;
- }
-
- ALLOC_ZVAL(*retval);
- if (dtdptr->ExternalID) {
- ZVAL_STRING(*retval, (char *) (dtdptr->ExternalID), 1);
- } else {
- ZVAL_EMPTY_STRING(*retval);
- }
- return SUCCESS;
-
-}
-
-/* }}} */
-
-
-
-/* {{{ proto systemId string
-readonly=yes
-URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-Core-DocType-systemId
-Since: DOM Level 2
-*/
-int dom_documenttype_system_id_read(dom_object *obj, zval **retval TSRMLS_DC)
-{
- xmlDtdPtr dtdptr;
-
- dtdptr = (xmlDtdPtr) dom_object_get_node(obj);
-
- if (dtdptr == NULL) {
- php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC);
- return FAILURE;
- }
-
- ALLOC_ZVAL(*retval);
- if (dtdptr->SystemID) {
- ZVAL_STRING(*retval, (char *) (dtdptr->SystemID), 1);
- } else {
- ZVAL_EMPTY_STRING(*retval);
- }
- return SUCCESS;
-}
-
-/* }}} */
-
-
-
-/* {{{ proto internalSubset string
-readonly=yes
-URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-Core-DocType-internalSubset
-Since: DOM Level 2
-*/
-int dom_documenttype_internal_subset_read(dom_object *obj, zval **retval TSRMLS_DC)
-{
-
- xmlDtdPtr dtdptr;
- xmlDtd *intsubset;
- xmlOutputBuffer *buff = NULL;
- xmlChar *strintsubset;
-
- dtdptr = (xmlDtdPtr) dom_object_get_node(obj);
-
- if (dtdptr == NULL) {
- php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC);
- return FAILURE;
- }
-
- ALLOC_ZVAL(*retval);
-
- if (dtdptr->doc != NULL && ((intsubset = dtdptr->doc->intSubset) != NULL)) {
- buff = xmlAllocOutputBuffer(NULL);
- if (buff != NULL) {
- xmlNodeDumpOutput (buff, NULL, (xmlNodePtr) intsubset, 0, 0, NULL);
- xmlOutputBufferFlush(buff);
- strintsubset = xmlStrndup(buff->buffer->content, buff->buffer->use);
- (void)xmlOutputBufferClose(buff);
- ZVAL_STRING(*retval, (char *) strintsubset, 1);
- return SUCCESS;
- }
- }
-
- ZVAL_EMPTY_STRING(*retval);
-
- return SUCCESS;
-
-}
-
-/* }}} */
-
-#endif
diff --git a/ext/dom/dom.dsp b/ext/dom/dom.dsp
deleted file mode 100644
index f2ae5b1a76..0000000000
--- a/ext/dom/dom.dsp
+++ /dev/null
@@ -1,250 +0,0 @@
-# Microsoft Developer Studio Project File - Name="dom" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=dom - Win32 Release_TS
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "dom.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "dom.mak" CFG="dom - Win32 Release_TS"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "dom - Win32 Release_TS" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "dom - Win32 Debug_TS" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "dom - Win32 Release_TS"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release_TS"
-# PROP BASE Intermediate_Dir "Release_TS"
-# PROP BASE Ignore_Export_Lib 0
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release_TS"
-# PROP Intermediate_Dir "Release_TS"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MT /W3 /GX /O2 /I "..\.." /I "..\..\..\Zend" /I "..\..\..\TSRM" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "COMPILE_DL_DOM" /D ZTS=1 /YX /FD /c
-# ADD CPP /nologo /MD /W3 /GX /O2 /I "..\.." /I "..\..\Zend" /I "..\..\TSRM" /I "..\..\main" /D ZEND_DEBUG=0 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "DOM_EXPORTS" /D "COMPILE_DL_DOM" /D ZTS=1 /D "ZEND_WIN32" /D "PHP_WIN32" /D HAVE_DOM=1 /D "LIBXML_THREAD_ENABLED" /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x406 /d "NDEBUG"
-# ADD RSC /l 0x406 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib php5ts.lib /nologo /dll /machine:I386
-# ADD LINK32 wsock32.lib php5ts.lib resolv.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /incremental:yes /machine:I386 /out:"..\..\Release_TS/php_dom.dll" /implib:"..\..\Release_TS/php_dom.lib" /libpath:"..\..\Release_TS" /libpath:"..\..\Release_TS_Inline" /libpath:"..\..\..\bindlib_w32\Release"
-# SUBTRACT LINK32 /pdb:none
-
-!ELSEIF "$(CFG)" == "dom - Win32 Debug_TS"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Debug_TS"
-# PROP BASE Intermediate_Dir "Debug_TS"
-# PROP BASE Ignore_Export_Lib 0
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Debug_TS"
-# PROP Intermediate_Dir "Debug_TS"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MT /W3 /GX /O2 /I "..\.." /I "..\..\Zend" /I "..\..\TSRM" /I "mssql-70" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "COMPILE_DL_DOM" /D ZTS=1 /YX /FD /c
-# ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "..\.." /I "..\..\Zend" /I "..\..\TSRM" /I "..\..\main" /D ZEND_DEBUG=1 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "DOM_EXPORTS" /D "COMPILE_DL_DOM" /D ZTS=1 /D "ZEND_WIN32" /D "PHP_WIN32" /D HAVE_DOM=1 /D LIBXML_THREAD_ENABLED=1 /FR /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x406 /d "NDEBUG"
-# ADD RSC /l 0x406 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib php5ts.lib /nologo /dll /machine:I386
-# ADD LINK32 php5ts_debug.lib ws2_32.lib resolv.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /incremental:yes /debug /machine:I386 /nodefaultlib:"msvcrt" /out:"..\..\Debug_TS\php_dom.dll" /implib:"..\..\Debug_TS/php_dom.lib" /libpath:"..\..\Debug_TS" /libpath:"..\..\..\bindlib_w32\Release"
-
-!ENDIF
-
-# Begin Target
-
-# Name "dom - Win32 Release_TS"
-# Name "dom - Win32 Debug_TS"
-# Begin Group "Source Files"
-
-# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
-# Begin Source File
-
-SOURCE=.\attr.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\cdatasection.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\characterdata.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\comment.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\document.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\documentfragment.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\documenttype.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\domconfiguration.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\domerror.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\domerrorhandler.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\domexception.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\domimplementation.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\domimplementationlist.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\domimplementationsource.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\domlocator.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\domstringlist.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\element.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\entity.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\entityreference.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\namednodemap.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\namelist.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\node.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\nodelist.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\notation.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\php_dom.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\processinginstruction.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\string_extend.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\text.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\typeinfo.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\userdatahandler.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\xpath.c
-# End Source File
-# End Group
-# Begin Group "Header Files"
-
-# PROP Default_Filter "h;hpp;hxx;hm;inl"
-# Begin Source File
-
-SOURCE=.\dom_ce.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\dom_fe.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\dom_properties.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\php_dom.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\xml_common.h
-# End Source File
-# End Group
-# Begin Group "Resource Files"
-
-# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
-# End Group
-# End Target
-# End Project
diff --git a/ext/dom/dom_ce.h b/ext/dom/dom_ce.h
deleted file mode 100644
index ba6d05f721..0000000000
--- a/ext/dom/dom_ce.h
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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. |
- +----------------------------------------------------------------------+
- | Authors: Christian Stocker <chregu@php.net> |
- | Rob Richards <rrichards@php.net> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-#ifndef DOM_CE_H
-#define DOM_CE_H
-
-zend_class_entry *dom_domexception_class_entry;
-zend_class_entry *dom_domstringlist_class_entry;
-zend_class_entry *dom_namelist_class_entry;
-zend_class_entry *dom_domimplementationlist_class_entry;
-zend_class_entry *dom_domimplementationsource_class_entry;
-zend_class_entry *dom_domimplementation_class_entry;
-zend_class_entry *dom_documentfragment_class_entry;
-zend_class_entry *dom_document_class_entry;
-zend_class_entry *dom_nodelist_class_entry;
-zend_class_entry *dom_namednodemap_class_entry;
-zend_class_entry *dom_characterdata_class_entry;
-zend_class_entry *dom_attr_class_entry;
-zend_class_entry *dom_element_class_entry;
-zend_class_entry *dom_text_class_entry;
-zend_class_entry *dom_comment_class_entry;
-zend_class_entry *dom_typeinfo_class_entry;
-zend_class_entry *dom_userdatahandler_class_entry;
-zend_class_entry *dom_domerror_class_entry;
-zend_class_entry *dom_domerrorhandler_class_entry;
-zend_class_entry *dom_domlocator_class_entry;
-zend_class_entry *dom_domconfiguration_class_entry;
-zend_class_entry *dom_cdatasection_class_entry;
-zend_class_entry *dom_documenttype_class_entry;
-zend_class_entry *dom_notation_class_entry;
-zend_class_entry *dom_entity_class_entry;
-zend_class_entry *dom_entityreference_class_entry;
-zend_class_entry *dom_processinginstruction_class_entry;
-zend_class_entry *dom_string_extend_class_entry;
-#if defined(LIBXML_XPATH_ENABLED)
-zend_class_entry *dom_xpath_class_entry;
-#endif
-zend_class_entry *dom_namespace_node_class_entry;
-
-#endif /* DOM_CE_H */
diff --git a/ext/dom/dom_fe.h b/ext/dom/dom_fe.h
deleted file mode 100644
index 913c5dded7..0000000000
--- a/ext/dom/dom_fe.h
+++ /dev/null
@@ -1,264 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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. |
- +----------------------------------------------------------------------+
- | Authors: Christian Stocker <chregu@php.net> |
- | Rob Richards <rrichards@php.net> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-#ifndef DOM_FE_H
-#define DOM_FE_H
-
-extern zend_function_entry php_dom_domexception_class_functions[];
-extern zend_function_entry php_dom_domstringlist_class_functions[];
-extern zend_function_entry php_dom_namelist_class_functions[];
-extern zend_function_entry php_dom_domimplementationlist_class_functions[];
-extern zend_function_entry php_dom_domimplementationsource_class_functions[];
-extern zend_function_entry php_dom_domimplementation_class_functions[];
-extern zend_function_entry php_dom_documentfragment_class_functions[];
-extern zend_function_entry php_dom_document_class_functions[];
-extern zend_function_entry php_dom_node_class_functions[];
-extern zend_function_entry php_dom_nodelist_class_functions[];
-extern zend_function_entry php_dom_namednodemap_class_functions[];
-extern zend_function_entry php_dom_characterdata_class_functions[];
-extern zend_function_entry php_dom_attr_class_functions[];
-extern zend_function_entry php_dom_element_class_functions[];
-extern zend_function_entry php_dom_text_class_functions[];
-extern zend_function_entry php_dom_comment_class_functions[];
-extern zend_function_entry php_dom_typeinfo_class_functions[];
-extern zend_function_entry php_dom_userdatahandler_class_functions[];
-extern zend_function_entry php_dom_domerror_class_functions[];
-extern zend_function_entry php_dom_domerrorhandler_class_functions[];
-extern zend_function_entry php_dom_domlocator_class_functions[];
-extern zend_function_entry php_dom_domconfiguration_class_functions[];
-extern zend_function_entry php_dom_cdatasection_class_functions[];
-extern zend_function_entry php_dom_documenttype_class_functions[];
-extern zend_function_entry php_dom_notation_class_functions[];
-extern zend_function_entry php_dom_entity_class_functions[];
-extern zend_function_entry php_dom_entityreference_class_functions[];
-extern zend_function_entry php_dom_processinginstruction_class_functions[];
-extern zend_function_entry php_dom_string_extend_class_functions[];
-extern zend_function_entry php_dom_xpath_class_functions[];
-
-/* domexception errors */
-typedef enum {
-/* PHP_ERR is non-spec code for PHP errors: */
- PHP_ERR = 0,
- INDEX_SIZE_ERR = 1,
- DOMSTRING_SIZE_ERR = 2,
- HIERARCHY_REQUEST_ERR = 3,
- WRONG_DOCUMENT_ERR = 4,
- INVALID_CHARACTER_ERR = 5,
- NO_DATA_ALLOWED_ERR = 6,
- NO_MODIFICATION_ALLOWED_ERR = 7,
- NOT_FOUND_ERR = 8,
- NOT_SUPPORTED_ERR = 9,
- INUSE_ATTRIBUTE_ERR = 10,
-/* Introduced in DOM Level 2: */
- INVALID_STATE_ERR = 11,
-/* Introduced in DOM Level 2: */
- SYNTAX_ERR = 12,
-/* Introduced in DOM Level 2: */
- INVALID_MODIFICATION_ERR = 13,
-/* Introduced in DOM Level 2: */
- NAMESPACE_ERR = 14,
-/* Introduced in DOM Level 2: */
- INVALID_ACCESS_ERR = 15,
-/* Introduced in DOM Level 3: */
- VALIDATION_ERR = 16
-} dom_exception_code;
-
-/* domstringlist methods */
-PHP_FUNCTION(dom_domstringlist_item);
-
-/* domnamelist methods */
-PHP_FUNCTION(dom_namelist_get_name);
-PHP_FUNCTION(dom_namelist_get_namespace_uri);
-
-/* domimplementationlist methods */
-PHP_FUNCTION(dom_domimplementationlist_item);
-
-/* domimplementationsource methods */
-PHP_FUNCTION(dom_domimplementationsource_get_domimplementation);
-PHP_FUNCTION(dom_domimplementationsource_get_domimplementations);
-
-/* domimplementation methods */
-PHP_METHOD(domimplementation, hasFeature);
-PHP_METHOD(domimplementation, createDocumentType);
-PHP_METHOD(domimplementation, createDocument);
-PHP_METHOD(domimplementation, getFeature);
-
-/* domdocumentfragment methods */
-PHP_METHOD(domdocumentfragment, __construct);
-PHP_METHOD(domdocumentfragment, appendXML);
-
-/* domdocument methods */
-PHP_FUNCTION(dom_document_create_element);
-PHP_FUNCTION(dom_document_create_document_fragment);
-PHP_FUNCTION(dom_document_create_text_node);
-PHP_FUNCTION(dom_document_create_comment);
-PHP_FUNCTION(dom_document_create_cdatasection);
-PHP_FUNCTION(dom_document_create_processing_instruction);
-PHP_FUNCTION(dom_document_create_attribute);
-PHP_FUNCTION(dom_document_create_entity_reference);
-PHP_FUNCTION(dom_document_get_elements_by_tag_name);
-PHP_FUNCTION(dom_document_import_node);
-PHP_FUNCTION(dom_document_create_element_ns);
-PHP_FUNCTION(dom_document_create_attribute_ns);
-PHP_FUNCTION(dom_document_get_elements_by_tag_name_ns);
-PHP_FUNCTION(dom_document_get_element_by_id);
-PHP_FUNCTION(dom_document_adopt_node);
-PHP_FUNCTION(dom_document_normalize_document);
-PHP_FUNCTION(dom_document_rename_node);
-PHP_METHOD(domdocument, __construct);
- /* convienience methods */
-PHP_METHOD(domdocument, load);
-PHP_FUNCTION(dom_document_save);
-PHP_METHOD(domdocument, loadXML);
-PHP_FUNCTION(dom_document_savexml);
-PHP_FUNCTION(dom_document_validate);
-PHP_FUNCTION(dom_document_xinclude);
-
-#if defined(LIBXML_HTML_ENABLED)
-PHP_METHOD(domdocument, loadHTML);
-PHP_METHOD(domdocument, loadHTMLFile);
-PHP_FUNCTION(dom_document_save_html);
-PHP_FUNCTION(dom_document_save_html_file);
-#endif /* defined(LIBXML_HTML_ENABLED) */
-
-#if defined(LIBXML_SCHEMAS_ENABLED)
-PHP_FUNCTION(dom_document_schema_validate_file);
-PHP_FUNCTION(dom_document_schema_validate_xml);
-PHP_FUNCTION(dom_document_relaxNG_validate_file);
-PHP_FUNCTION(dom_document_relaxNG_validate_xml);
-#endif
-
-/* domnode methods */
-PHP_FUNCTION(dom_node_insert_before);
-PHP_FUNCTION(dom_node_replace_child);
-PHP_FUNCTION(dom_node_remove_child);
-PHP_FUNCTION(dom_node_append_child);
-PHP_FUNCTION(dom_node_has_child_nodes);
-PHP_FUNCTION(dom_node_clone_node);
-PHP_FUNCTION(dom_node_normalize);
-PHP_FUNCTION(dom_node_is_supported);
-PHP_FUNCTION(dom_node_has_attributes);
-PHP_FUNCTION(dom_node_compare_document_position);
-PHP_FUNCTION(dom_node_is_same_node);
-PHP_FUNCTION(dom_node_lookup_prefix);
-PHP_FUNCTION(dom_node_is_default_namespace);
-PHP_FUNCTION(dom_node_lookup_namespace_uri);
-PHP_FUNCTION(dom_node_is_equal_node);
-PHP_FUNCTION(dom_node_get_feature);
-PHP_FUNCTION(dom_node_set_user_data);
-PHP_FUNCTION(dom_node_get_user_data);
-
-/* domnodelist methods */
-PHP_FUNCTION(dom_nodelist_item);
-
-/* domnamednodemap methods */
-PHP_FUNCTION(dom_namednodemap_get_named_item);
-PHP_FUNCTION(dom_namednodemap_set_named_item);
-PHP_FUNCTION(dom_namednodemap_remove_named_item);
-PHP_FUNCTION(dom_namednodemap_item);
-PHP_FUNCTION(dom_namednodemap_get_named_item_ns);
-PHP_FUNCTION(dom_namednodemap_set_named_item_ns);
-PHP_FUNCTION(dom_namednodemap_remove_named_item_ns);
-
-/* domcharacterdata methods */
-PHP_FUNCTION(dom_characterdata_substring_data);
-PHP_FUNCTION(dom_characterdata_append_data);
-PHP_FUNCTION(dom_characterdata_insert_data);
-PHP_FUNCTION(dom_characterdata_delete_data);
-PHP_FUNCTION(dom_characterdata_replace_data);
-
-/* domattr methods */
-PHP_FUNCTION(dom_attr_is_id);
-PHP_METHOD(domattr, __construct);
-
-/* domelement methods */
-PHP_FUNCTION(dom_element_get_attribute);
-PHP_FUNCTION(dom_element_set_attribute);
-PHP_FUNCTION(dom_element_remove_attribute);
-PHP_FUNCTION(dom_element_get_attribute_node);
-PHP_FUNCTION(dom_element_set_attribute_node);
-PHP_FUNCTION(dom_element_remove_attribute_node);
-PHP_FUNCTION(dom_element_get_elements_by_tag_name);
-PHP_FUNCTION(dom_element_get_attribute_ns);
-PHP_FUNCTION(dom_element_set_attribute_ns);
-PHP_FUNCTION(dom_element_remove_attribute_ns);
-PHP_FUNCTION(dom_element_get_attribute_node_ns);
-PHP_FUNCTION(dom_element_set_attribute_node_ns);
-PHP_FUNCTION(dom_element_get_elements_by_tag_name_ns);
-PHP_FUNCTION(dom_element_has_attribute);
-PHP_FUNCTION(dom_element_has_attribute_ns);
-PHP_FUNCTION(dom_element_set_id_attribute);
-PHP_FUNCTION(dom_element_set_id_attribute_ns);
-PHP_FUNCTION(dom_element_set_id_attribute_node);
-PHP_METHOD(domelement, __construct);
-
-/* domtext methods */
-PHP_FUNCTION(dom_text_split_text);
-PHP_FUNCTION(dom_text_is_whitespace_in_element_content);
-PHP_FUNCTION(dom_text_replace_whole_text);
-PHP_METHOD(domtext, __construct);
-
-/* domcomment methods */
-PHP_METHOD(domcomment, __construct);
-
-/* domtypeinfo methods */
-
-/* domuserdatahandler methods */
-PHP_FUNCTION(dom_userdatahandler_handle);
-
-/* domdomerror methods */
-
-/* domerrorhandler methods */
-PHP_FUNCTION(dom_domerrorhandler_handle_error);
-
-/* domlocator methods */
-
-/* domconfiguration methods */
-PHP_FUNCTION(dom_domconfiguration_set_parameter);
-PHP_FUNCTION(dom_domconfiguration_get_parameter);
-PHP_FUNCTION(dom_domconfiguration_can_set_parameter);
-
-/* domcdatasection methods */
-PHP_METHOD(domcdatasection, __construct);
-
-/* domdocumenttype methods */
-
-/* domnotation methods */
-
-/* domentity methods */
-
-/* domentityreference methods */
-PHP_METHOD(domentityreference, __construct);
-
-/* domprocessinginstruction methods */
-PHP_METHOD(domprocessinginstruction, __construct);
-
-/* string_extend methods */
-PHP_FUNCTION(dom_string_extend_find_offset16);
-PHP_FUNCTION(dom_string_extend_find_offset32);
-
-#if defined(LIBXML_XPATH_ENABLED)
-/* xpath methods */
-PHP_METHOD(domxpath, __construct);
-PHP_FUNCTION(dom_xpath_register_ns);
-PHP_FUNCTION(dom_xpath_query);
-#endif
-
-#endif /* DOM_FE_H */
diff --git a/ext/dom/dom_iterators.c b/ext/dom/dom_iterators.c
deleted file mode 100644
index 3c75c2fcc5..0000000000
--- a/ext/dom/dom_iterators.c
+++ /dev/null
@@ -1,312 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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. |
- +----------------------------------------------------------------------+
- | Authors: Christian Stocker <chregu@php.net> |
- | Rob Richards <rrichards@php.net> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "php.h"
-#if HAVE_LIBXML && HAVE_DOM
-#include "php_dom.h"
-#include "dom_ce.h"
-
-typedef struct _nodeIterator nodeIterator;
-struct _nodeIterator {
- int cur;
- int index;
- xmlNode *node;
-};
-
-typedef struct _notationIterator notationIterator;
-struct _notationIterator {
- int cur;
- int index;
- xmlNotation *notation;
-};
-
-static void itemHashScanner (void *payload, void *data, xmlChar *name) {
- nodeIterator *priv = (nodeIterator *)data;
-
- if(priv->cur < priv->index) {
- priv->cur++;
- } else {
- if(priv->node == NULL) {
- priv->node = (xmlNode *)payload;
- }
- }
-}
-
-xmlNodePtr create_notation(const xmlChar *name,
- const xmlChar *ExternalID, const xmlChar *SystemID) {
- xmlEntityPtr ret;
-
- ret = (xmlEntityPtr) xmlMalloc(sizeof(xmlEntity));
- memset(ret, 0, sizeof(xmlEntity));
- ret->type = XML_NOTATION_NODE;
- ret->name = xmlStrdup(name);
- ret->ExternalID = xmlStrdup(ExternalID);
- ret->SystemID = xmlStrdup(SystemID);
- ret->length = 0;
- ret->content = NULL;
- ret->URI = NULL;
- ret->orig = NULL;
- ret->children = NULL;
- ret->parent = NULL;
- ret->doc = NULL;
- ret->_private = NULL;
- ret->last = NULL;
- ret->prev = NULL;
- return((xmlNodePtr) ret);
-}
-
-xmlNode *php_dom_libxml_hash_iter(xmlHashTable *ht, int index)
-{
- xmlNode *nodep = NULL;
- nodeIterator *iter;
- int htsize;
-
- if ((htsize = xmlHashSize(ht)) > 0 && index < htsize) {
- iter = emalloc(sizeof(nodeIterator));
- iter->cur = 0;
- iter->index = index;
- iter->node = NULL;
- xmlHashScan(ht, itemHashScanner, iter);
- nodep = iter->node;
- efree(iter);
- return nodep;
- } else {
- return NULL;
- }
-}
-
-xmlNode *php_dom_libxml_notation_iter(xmlHashTable *ht, int index)
-{
- notationIterator *iter;
- xmlNotation *notep = NULL;
- int htsize;
-
- if ((htsize = xmlHashSize(ht)) > 0 && index < htsize) {
- iter = emalloc(sizeof(notationIterator));
- iter->cur = 0;
- iter->index = index;
- iter->notation = NULL;
- xmlHashScan(ht, itemHashScanner, iter);
- notep = iter->notation;
- efree(iter);
- return create_notation(notep->name, notep->PublicID, notep->SystemID);
- } else {
- return NULL;
- }
-}
-
-static void php_dom_iterator_dtor(zend_object_iterator *iter TSRMLS_DC)
-{
- php_dom_iterator *iterator = (php_dom_iterator *)iter;
-
- zval_ptr_dtor((zval**)&iterator->intern.data);
-
- if (iterator->curobj) {
- zval_ptr_dtor((zval**)&iterator->curobj);
- }
-
- efree(iterator);
-}
-
-static int php_dom_iterator_valid(zend_object_iterator *iter TSRMLS_DC)
-{
-
- php_dom_iterator *iterator = (php_dom_iterator *)iter;
-
- if (iterator->curobj) {
- return SUCCESS;
- } else {
- return FAILURE;
- }
-}
-
-static void php_dom_iterator_current_data(zend_object_iterator *iter, zval ***data TSRMLS_DC)
-{
- php_dom_iterator *iterator = (php_dom_iterator *)iter;
-
- *data = &iterator->curobj;
-}
-
-static int php_dom_iterator_current_key(zend_object_iterator *iter, char **str_key, uint *str_key_len, ulong *int_key TSRMLS_DC)
-{
- zval *curobj;
- xmlNodePtr curnode = NULL;
- dom_object *intern;
- zval *object;
- int namelen;
-
- php_dom_iterator *iterator = (php_dom_iterator *)iter;
-
- object = (zval *)iterator->intern.data;
-
- if (instanceof_function(Z_OBJCE_P(object), dom_nodelist_class_entry TSRMLS_CC)) {
- *int_key = iter->index - 1;
- return HASH_KEY_IS_LONG;
- } else {
- curobj = iterator->curobj;
-
- intern = (dom_object *)zend_object_store_get_object(curobj TSRMLS_CC);
- if (intern != NULL && intern->ptr != NULL) {
- curnode = (xmlNodePtr)((php_libxml_node_ptr *)intern->ptr)->node;
- }
-
- namelen = xmlStrlen(curnode->name);
- *str_key = estrndup(curnode->name, namelen);
- *str_key_len = namelen + 1;
- return HASH_KEY_IS_STRING;
- }
-}
-
-static void php_dom_iterator_move_forward(zend_object_iterator *iter TSRMLS_DC)
-{
- zval *curobj, *curattr = NULL;
- zval *object;
- xmlNodePtr curnode = NULL, basenode;
- dom_object *intern;
- dom_object *nnmap;
- dom_nnodemap_object *objmap;
- int ret, previndex=1;
- HashTable *nodeht;
- pval **entry;
-
- php_dom_iterator *iterator = (php_dom_iterator *)iter;
-
- object = (zval *)iterator->intern.data;
- nnmap = (dom_object *)zend_object_store_get_object(object TSRMLS_CC);
- objmap = (dom_nnodemap_object *)nnmap->ptr;
-
- curobj = iterator->curobj;
- intern = (dom_object *)zend_object_store_get_object(curobj TSRMLS_CC);
- if (intern != NULL && intern->ptr != NULL) {
- if (objmap->ht == NULL) {
- if (objmap->nodetype == DOM_NODESET) {
- nodeht = HASH_OF(objmap->baseobjptr);
- zend_hash_move_forward(nodeht);
- if (zend_hash_get_current_data(nodeht, (void **) &entry)==SUCCESS) {
- curattr = *entry;
- curattr->refcount++;
- }
- } else {
- curnode = (xmlNodePtr)((php_libxml_node_ptr *)intern->ptr)->node;
- if (objmap->nodetype == XML_ATTRIBUTE_NODE || objmap->nodetype == XML_ELEMENT_NODE) {
- curnode = curnode->next;
- } else {
- /* Nav the tree evey time as this is LIVE */
- basenode = dom_object_get_node(objmap->baseobj);
- if (basenode && (basenode->type == XML_DOCUMENT_NODE || basenode->type == XML_HTML_DOCUMENT_NODE)) {
- basenode = xmlDocGetRootElement((xmlDoc *) basenode);
- } else {
- basenode = basenode->children;
- }
- curnode = dom_get_elements_by_tag_name_ns_raw(basenode, objmap->ns, objmap->local, &previndex, iter->index);
- }
- }
- } else {
- if (objmap->nodetype == XML_ENTITY_NODE) {
- curnode = php_dom_libxml_hash_iter(objmap->ht, iter->index);
- } else {
- curnode = php_dom_libxml_notation_iter(objmap->ht, iter->index);
- }
- }
- }
-
- zval_ptr_dtor((zval**)&curobj);
- if (curnode) {
- MAKE_STD_ZVAL(curattr);
- curattr = php_dom_create_object(curnode, &ret, NULL, curattr, objmap->baseobj TSRMLS_CC);
- }
-
- iterator->curobj = curattr;
-}
-
-zend_object_iterator_funcs php_dom_iterator_funcs = {
- php_dom_iterator_dtor,
- php_dom_iterator_valid,
- php_dom_iterator_current_data,
- php_dom_iterator_current_key,
- php_dom_iterator_move_forward,
- NULL
-};
-
-zend_object_iterator *php_dom_get_iterator(zend_class_entry *ce, zval *object TSRMLS_DC)
-{
- dom_object *intern;
- dom_nnodemap_object *objmap;
- xmlNodePtr nodep, curnode=NULL;
- zval *curattr = NULL;
- int ret, curindex = 0;
- HashTable *nodeht;
- pval **entry;
-
- php_dom_iterator *iterator = emalloc(sizeof(php_dom_iterator));
-
- object->refcount++;
- iterator->intern.data = (void*)object;
- iterator->intern.funcs = &php_dom_iterator_funcs;
-
- intern = (dom_object *)zend_object_store_get_object(object TSRMLS_CC);
- objmap = (dom_nnodemap_object *)intern->ptr;
- if (objmap != NULL) {
- if (objmap->ht == NULL) {
- if (objmap->nodetype == DOM_NODESET) {
- nodeht = HASH_OF(objmap->baseobjptr);
- zend_hash_internal_pointer_reset(nodeht);
- if (zend_hash_get_current_data(nodeht, (void **) &entry)==SUCCESS) {
- curattr = *entry;
- curattr->refcount++;
- }
- } else {
- nodep = (xmlNode *)dom_object_get_node(objmap->baseobj);
- if (objmap->nodetype == XML_ATTRIBUTE_NODE || objmap->nodetype == XML_ELEMENT_NODE) {
- if (objmap->nodetype == XML_ATTRIBUTE_NODE) {
- curnode = (xmlNodePtr) nodep->properties;
- } else {
- curnode = (xmlNodePtr) nodep->children;
- }
- } else {
- if (nodep->type == XML_DOCUMENT_NODE || nodep->type == XML_HTML_DOCUMENT_NODE) {
- nodep = xmlDocGetRootElement((xmlDoc *) nodep);
- } else {
- nodep = nodep->children;
- }
- curnode = dom_get_elements_by_tag_name_ns_raw(nodep, objmap->ns, objmap->local, &curindex, 0);
- }
- }
- } else {
- curnode = php_dom_libxml_hash_iter(objmap->ht, 0);
- }
- }
-
- if (curnode) {
- MAKE_STD_ZVAL(curattr);
- curattr = php_dom_create_object(curnode, &ret, NULL, curattr, objmap->baseobj TSRMLS_CC);
- }
-
- iterator->curobj = curattr;
-
- return (zend_object_iterator*)iterator;
-}
-
-#endif
diff --git a/ext/dom/dom_properties.h b/ext/dom/dom_properties.h
deleted file mode 100644
index 431b1b774b..0000000000
--- a/ext/dom/dom_properties.h
+++ /dev/null
@@ -1,162 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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. |
- +----------------------------------------------------------------------+
- | Authors: Christian Stocker <chregu@php.net> |
- | Rob Richards <rrichards@php.net> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-#ifndef DOM_PROPERTIES_H
-#define DOM_PROPERTIES_H
-
-/* attr properties */
-int dom_attr_name_read(dom_object *obj, zval **retval TSRMLS_DC);
-int dom_attr_specified_read(dom_object *obj, zval **retval TSRMLS_DC);
-int dom_attr_value_read(dom_object *obj, zval **retval TSRMLS_DC);
-int dom_attr_value_write(dom_object *obj, zval *newval TSRMLS_DC);
-int dom_attr_owner_element_read(dom_object *obj, zval **retval TSRMLS_DC);
-int dom_attr_schema_type_info_read(dom_object *obj, zval **retval TSRMLS_DC);
-
-/* characterdata properties */
-int dom_characterdata_data_read(dom_object *obj, zval **retval TSRMLS_DC);
-int dom_characterdata_data_write(dom_object *obj, zval *newval TSRMLS_DC);
-int dom_characterdata_length_read(dom_object *obj, zval **retval TSRMLS_DC);
-
-/* document properties */
-int dom_document_doctype_read(dom_object *obj, zval **retval TSRMLS_DC);
-int dom_document_implementation_read(dom_object *obj, zval **retval TSRMLS_DC);
-int dom_document_document_element_read(dom_object *obj, zval **retval TSRMLS_DC);
-int dom_document_actual_encoding_read(dom_object *obj, zval **retval TSRMLS_DC);
-int dom_document_actual_encoding_write(dom_object *obj, zval *newval TSRMLS_DC);
-int dom_document_encoding_read(dom_object *obj, zval **retval TSRMLS_DC);
-int dom_document_encoding_write(dom_object *obj, zval *newval TSRMLS_DC);
-int dom_document_standalone_read(dom_object *obj, zval **retval TSRMLS_DC);
-int dom_document_standalone_write(dom_object *obj, zval *newval TSRMLS_DC);
-int dom_document_version_read(dom_object *obj, zval **retval TSRMLS_DC);
-int dom_document_version_write(dom_object *obj, zval *newval TSRMLS_DC);
-int dom_document_strict_error_checking_read(dom_object *obj, zval **retval TSRMLS_DC);
-int dom_document_strict_error_checking_write(dom_object *obj, zval *newval TSRMLS_DC);
-int dom_document_document_uri_read(dom_object *obj, zval **retval TSRMLS_DC);
-int dom_document_document_uri_write(dom_object *obj, zval *newval TSRMLS_DC);
-int dom_document_config_read(dom_object *obj, zval **retval TSRMLS_DC);
-int dom_document_format_output_read(dom_object *obj, zval **retval TSRMLS_DC);
-int dom_document_format_output_write(dom_object *obj, zval *newval TSRMLS_DC);
-int dom_document_validate_on_parse_read(dom_object *obj, zval **retval TSRMLS_DC);
-int dom_document_validate_on_parse_write(dom_object *obj, zval *newval TSRMLS_DC);
-int dom_document_resolve_externals_read(dom_object *obj, zval **retval TSRMLS_DC);
-int dom_document_resolve_externals_write(dom_object *obj, zval *newval TSRMLS_DC);
-int dom_document_preserve_whitespace_read(dom_object *obj, zval **retval TSRMLS_DC);
-int dom_document_preserve_whitespace_write(dom_object *obj, zval *newval TSRMLS_DC);
-int dom_document_recover_read(dom_object *obj, zval **retval TSRMLS_DC);
-int dom_document_recover_write(dom_object *obj, zval *newval TSRMLS_DC);
-int dom_document_substitue_entities_read(dom_object *obj, zval **retval TSRMLS_DC);
-int dom_document_substitue_entities_write(dom_object *obj, zval *newval TSRMLS_DC);
-
-/* documenttype properties */
-int dom_documenttype_name_read(dom_object *obj, zval **retval TSRMLS_DC);
-int dom_documenttype_entities_read(dom_object *obj, zval **retval TSRMLS_DC);
-int dom_documenttype_notations_read(dom_object *obj, zval **retval TSRMLS_DC);
-int dom_documenttype_public_id_read(dom_object *obj, zval **retval TSRMLS_DC);
-int dom_documenttype_system_id_read(dom_object *obj, zval **retval TSRMLS_DC);
-int dom_documenttype_internal_subset_read(dom_object *obj, zval **retval TSRMLS_DC);
-
-/* domerror properties */
-int dom_domerror_severity_read(dom_object *obj, zval **retval TSRMLS_DC);
-int dom_domerror_message_read(dom_object *obj, zval **retval TSRMLS_DC);
-int dom_domerror_type_read(dom_object *obj, zval **retval TSRMLS_DC);
-int dom_domerror_related_exception_read(dom_object *obj, zval **retval TSRMLS_DC);
-int dom_domerror_related_data_read(dom_object *obj, zval **retval TSRMLS_DC);
-int dom_domerror_location_read(dom_object *obj, zval **retval TSRMLS_DC);
-
-/* domimplementationlist properties */
-int dom_domimplementationlist_length_read(dom_object *obj, zval **retval TSRMLS_DC);
-
-/* domlocator properties */
-int dom_domlocator_line_number_read(dom_object *obj, zval **retval TSRMLS_DC);
-int dom_domlocator_column_number_read(dom_object *obj, zval **retval TSRMLS_DC);
-int dom_domlocator_offset_read(dom_object *obj, zval **retval TSRMLS_DC);
-int dom_domlocator_related_node_read(dom_object *obj, zval **retval TSRMLS_DC);
-int dom_domlocator_uri_read(dom_object *obj, zval **retval TSRMLS_DC);
-
-/* domstringlist properties */
-int dom_domstringlist_length_read(dom_object *obj, zval **retval TSRMLS_DC);
-
-/* element properties */
-int dom_element_tag_name_read(dom_object *obj, zval **retval TSRMLS_DC);
-int dom_element_schema_type_info_read(dom_object *obj, zval **retval TSRMLS_DC);
-
-/* entity properties */
-int dom_entity_public_id_read(dom_object *obj, zval **retval TSRMLS_DC);
-int dom_entity_system_id_read(dom_object *obj, zval **retval TSRMLS_DC);
-int dom_entity_notation_name_read(dom_object *obj, zval **retval TSRMLS_DC);
-int dom_entity_actual_encoding_read(dom_object *obj, zval **retval TSRMLS_DC);
-int dom_entity_actual_encoding_write(dom_object *obj, zval *newval TSRMLS_DC);
-int dom_entity_encoding_read(dom_object *obj, zval **retval TSRMLS_DC);
-int dom_entity_encoding_write(dom_object *obj, zval *newval TSRMLS_DC);
-int dom_entity_version_read(dom_object *obj, zval **retval TSRMLS_DC);
-int dom_entity_version_write(dom_object *obj, zval *newval TSRMLS_DC);
-
-/* namednodemap properties */
-int dom_namednodemap_length_read(dom_object *obj, zval **retval TSRMLS_DC);
-
-/* namelist properties */
-int dom_namelist_length_read(dom_object *obj, zval **retval TSRMLS_DC);
-
-/* node properties */
-int dom_node_node_name_read(dom_object *obj, zval **retval TSRMLS_DC);
-int dom_node_node_value_read(dom_object *obj, zval **retval TSRMLS_DC);
-int dom_node_node_value_write(dom_object *obj, zval *newval TSRMLS_DC);
-int dom_node_node_type_read(dom_object *obj, zval **retval TSRMLS_DC);
-int dom_node_parent_node_read(dom_object *obj, zval **retval TSRMLS_DC);
-int dom_node_child_nodes_read(dom_object *obj, zval **retval TSRMLS_DC);
-int dom_node_first_child_read(dom_object *obj, zval **retval TSRMLS_DC);
-int dom_node_last_child_read(dom_object *obj, zval **retval TSRMLS_DC);
-int dom_node_previous_sibling_read(dom_object *obj, zval **retval TSRMLS_DC);
-int dom_node_next_sibling_read(dom_object *obj, zval **retval TSRMLS_DC);
-int dom_node_attributes_read(dom_object *obj, zval **retval TSRMLS_DC);
-int dom_node_owner_document_read(dom_object *obj, zval **retval TSRMLS_DC);
-int dom_node_namespace_uri_read(dom_object *obj, zval **retval TSRMLS_DC);
-int dom_node_prefix_read(dom_object *obj, zval **retval TSRMLS_DC);
-int dom_node_prefix_write(dom_object *obj, zval *newval TSRMLS_DC);
-int dom_node_local_name_read(dom_object *obj, zval **retval TSRMLS_DC);
-int dom_node_base_uri_read(dom_object *obj, zval **retval TSRMLS_DC);
-int dom_node_text_content_read(dom_object *obj, zval **retval TSRMLS_DC);
-int dom_node_text_content_write(dom_object *obj, zval *newval TSRMLS_DC);
-
-/* nodelist properties */
-int dom_nodelist_length_read(dom_object *obj, zval **retval TSRMLS_DC);
-
-/* notation properties */
-int dom_notation_public_id_read(dom_object *obj, zval **retval TSRMLS_DC);
-int dom_notation_system_id_read(dom_object *obj, zval **retval TSRMLS_DC);
-
-/* processinginstruction properties */
-int dom_processinginstruction_target_read(dom_object *obj, zval **retval TSRMLS_DC);
-int dom_processinginstruction_data_read(dom_object *obj, zval **retval TSRMLS_DC);
-int dom_processinginstruction_data_write(dom_object *obj, zval *newval TSRMLS_DC);
-
-/* text properties */
-int dom_text_whole_text_read(dom_object *obj, zval **retval TSRMLS_DC);
-
-/* typeinfo properties */
-int dom_typeinfo_type_name_read(dom_object *obj, zval **retval TSRMLS_DC);
-int dom_typeinfo_type_namespace_read(dom_object *obj, zval **retval TSRMLS_DC);
-
-#if defined(LIBXML_XPATH_ENABLED)
-/* xpath properties */
-int dom_xpath_document_read(dom_object *obj, zval **retval TSRMLS_DC);
-#endif
-
-#endif /* DOM_PROPERTIERS_H */
diff --git a/ext/dom/domconfiguration.c b/ext/dom/domconfiguration.c
deleted file mode 100644
index c82bcae1c6..0000000000
--- a/ext/dom/domconfiguration.c
+++ /dev/null
@@ -1,79 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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. |
- +----------------------------------------------------------------------+
- | Authors: Christian Stocker <chregu@php.net> |
- | Rob Richards <rrichards@php.net> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "php.h"
-#if HAVE_LIBXML && HAVE_DOM
-#include "php_dom.h"
-
-
-/*
-* class domdomconfiguration
-*
-* URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#DOMConfiguration
-* Since: DOM Level 3
-*/
-
-zend_function_entry php_dom_domconfiguration_class_functions[] = {
- PHP_FALIAS(setParameter, dom_domconfiguration_set_parameter, NULL)
- PHP_FALIAS(getParameter, dom_domconfiguration_get_parameter, NULL)
- PHP_FALIAS(canSetParameter, dom_domconfiguration_can_set_parameter, NULL)
- {NULL, NULL, NULL}
-};
-
-/* {{{ attribute protos, not implemented yet */
-
-
-/* {{{ proto dom_void dom_domconfiguration_set_parameter(string name, domuserdata value);
-URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#DOMConfiguration-property
-Since:
-*/
-PHP_FUNCTION(dom_domconfiguration_set_parameter)
-{
- DOM_NOT_IMPLEMENTED();
-}
-/* }}} end dom_domconfiguration_set_parameter */
-
-
-/* {{{ proto domdomuserdata dom_domconfiguration_get_parameter(string name);
-URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#DOMConfiguration-getParameter
-Since:
-*/
-PHP_FUNCTION(dom_domconfiguration_get_parameter)
-{
- DOM_NOT_IMPLEMENTED();
-}
-/* }}} end dom_domconfiguration_get_parameter */
-
-
-/* {{{ proto boolean dom_domconfiguration_can_set_parameter(string name, domuserdata value);
-URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#DOMConfiguration-canSetParameter
-Since:
-*/
-PHP_FUNCTION(dom_domconfiguration_can_set_parameter)
-{
- DOM_NOT_IMPLEMENTED();
-}
-/* }}} end dom_domconfiguration_can_set_parameter */
-#endif
diff --git a/ext/dom/domerror.c b/ext/dom/domerror.c
deleted file mode 100644
index 002632e863..0000000000
--- a/ext/dom/domerror.c
+++ /dev/null
@@ -1,138 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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. |
- +----------------------------------------------------------------------+
- | Authors: Christian Stocker <chregu@php.net> |
- | Rob Richards <rrichards@php.net> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "php.h"
-#if HAVE_LIBXML && HAVE_DOM
-#include "php_dom.h"
-
-
-/*
-* class domerror
-*
-* URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#ERROR-Interfaces-DOMError
-* Since: DOM Level 3
-*/
-
-zend_function_entry php_dom_domerror_class_functions[] = {
- {NULL, NULL, NULL}
-};
-
-/* {{{ attribute protos, not implemented yet */
-
-/* {{{ proto severity unsigned short
-readonly=yes
-URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#ERROR-DOMError-severity
-Since:
-*/
-int dom_domerror_severity_read(dom_object *obj, zval **retval TSRMLS_DC)
-{
- ALLOC_ZVAL(*retval);
- ZVAL_STRING(*retval, "TEST", 1);
- return SUCCESS;
-}
-
-/* }}} */
-
-
-
-/* {{{ proto message string
-readonly=yes
-URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#ERROR-DOMError-message
-Since:
-*/
-int dom_domerror_message_read(dom_object *obj, zval **retval TSRMLS_DC)
-{
- ALLOC_ZVAL(*retval);
- ZVAL_STRING(*retval, "TEST", 1);
- return SUCCESS;
-}
-
-/* }}} */
-
-
-
-/* {{{ proto type string
-readonly=yes
-URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#ERROR-DOMError-type
-Since:
-*/
-int dom_domerror_type_read(dom_object *obj, zval **retval TSRMLS_DC)
-{
- ALLOC_ZVAL(*retval);
- ZVAL_STRING(*retval, "TEST", 1);
- return SUCCESS;
-}
-
-/* }}} */
-
-
-
-/* {{{ proto relatedException object
-readonly=yes
-URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#ERROR-DOMError-relatedException
-Since:
-*/
-int dom_domerror_related_exception_read(dom_object *obj, zval **retval TSRMLS_DC)
-{
- ALLOC_ZVAL(*retval);
- ZVAL_STRING(*retval, "TEST", 1);
- return SUCCESS;
-}
-
-/* }}} */
-
-
-
-/* {{{ proto relatedData domobject
-readonly=yes
-URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#ERROR-DOMError-relatedData
-Since:
-*/
-int dom_domerror_related_data_read(dom_object *obj, zval **retval TSRMLS_DC)
-{
- ALLOC_ZVAL(*retval);
- ZVAL_STRING(*retval, "TEST", 1);
- return SUCCESS;
-}
-
-/* }}} */
-
-
-
-/* {{{ proto location domlocator
-readonly=yes
-URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#ERROR-DOMError-location
-Since:
-*/
-int dom_domerror_location_read(dom_object *obj, zval **retval TSRMLS_DC)
-{
- ALLOC_ZVAL(*retval);
- ZVAL_STRING(*retval, "TEST", 1);
- return SUCCESS;
-}
-
-/* }}} */
-
-#endif
diff --git a/ext/dom/domerrorhandler.c b/ext/dom/domerrorhandler.c
deleted file mode 100644
index e052d483eb..0000000000
--- a/ext/dom/domerrorhandler.c
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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. |
- +----------------------------------------------------------------------+
- | Authors: Christian Stocker <chregu@php.net> |
- | Rob Richards <rrichards@php.net> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "php.h"
-#if HAVE_LIBXML && HAVE_DOM
-#include "php_dom.h"
-
-
-/*
-* class domerrorhandler
-*
-* URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#ERROR-Interfaces-DOMErrorHandler
-* Since: DOM Level 3
-*/
-
-zend_function_entry php_dom_domerrorhandler_class_functions[] = {
- PHP_FALIAS(handleError, dom_domerrorhandler_handle_error, NULL)
- {NULL, NULL, NULL}
-};
-
-/* {{{ attribute protos, not implemented yet */
-
-
-/* {{{ proto dom_boolean dom_domerrorhandler_handle_error(domerror error);
-URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#ID-ERRORS-DOMErrorHandler-handleError
-Since:
-*/
-PHP_FUNCTION(dom_domerrorhandler_handle_error)
-{
- DOM_NOT_IMPLEMENTED();
-}
-/* }}} end dom_domerrorhandler_handle_error */
-#endif
diff --git a/ext/dom/domexception.c b/ext/dom/domexception.c
deleted file mode 100644
index 538bc682b6..0000000000
--- a/ext/dom/domexception.c
+++ /dev/null
@@ -1,111 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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. |
- +----------------------------------------------------------------------+
- | Authors: Christian Stocker <chregu@php.net> |
- | Rob Richards <rrichards@php.net> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "php.h"
-#if HAVE_LIBXML && HAVE_DOM
-#include "php_dom.h"
-
-
-/*
-* class DOMException
-*
-* URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-17189187
-* Since:
-*/
-
-extern zend_class_entry *dom_domexception_class_entry;
-
-zend_function_entry php_dom_domexception_class_functions[] = {
- {NULL, NULL, NULL}
-};
-
-/* {{{ php_dom_throw_error */
-void php_dom_throw_error(int error_code, int strict_error TSRMLS_DC)
-{
- char *error_message;
-
- switch (error_code)
- {
- case INDEX_SIZE_ERR:
- error_message = "Index Size Error";
- break;
- case DOMSTRING_SIZE_ERR:
- error_message = "DOM String Size Error";
- break;
- case HIERARCHY_REQUEST_ERR:
- error_message = "Hierarchy Request Error";
- break;
- case WRONG_DOCUMENT_ERR:
- error_message = "Wrong Document Error";
- break;
- case INVALID_CHARACTER_ERR:
- error_message = "Invalid Character Error";
- break;
- case NO_DATA_ALLOWED_ERR:
- error_message = "No Data Allowed Error";
- break;
- case NO_MODIFICATION_ALLOWED_ERR:
- error_message = "No Modification Allowed Error";
- break;
- case NOT_FOUND_ERR:
- error_message = "Not Found Error";
- break;
- case NOT_SUPPORTED_ERR:
- error_message = "Not Supported Error";
- break;
- case INUSE_ATTRIBUTE_ERR:
- error_message = "Inuse Attribute Error";
- break;
- case INVALID_STATE_ERR:
- error_message = "Invalid State Error";
- break;
- case SYNTAX_ERR:
- error_message = "Syntax Error";
- break;
- case INVALID_MODIFICATION_ERR:
- error_message = "Invalid Modification Error";
- break;
- case NAMESPACE_ERR:
- error_message = "Namespace Error";
- break;
- case INVALID_ACCESS_ERR:
- error_message = "Invalid Access Error";
- break;
- case VALIDATION_ERR:
- error_message = "Validation Error";
- break;
- default:
- error_message = "Unhandled Error";
- }
-
- if (strict_error == 1) {
- zend_throw_exception(dom_domexception_class_entry, error_message, error_code TSRMLS_CC);
- } else {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", error_message);
- }
-}
-/* }}} end php_dom_throw_error */
-
-#endif /* HAVE_LIBXML && HAVE_DOM */
diff --git a/ext/dom/domimplementation.c b/ext/dom/domimplementation.c
deleted file mode 100644
index 5669bca3d4..0000000000
--- a/ext/dom/domimplementation.c
+++ /dev/null
@@ -1,233 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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. |
- +----------------------------------------------------------------------+
- | Authors: Christian Stocker <chregu@php.net> |
- | Rob Richards <rrichards@php.net> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "php.h"
-#if HAVE_LIBXML && HAVE_DOM
-#include "php_dom.h"
-
-/*
-* class DOMImplementation
-*
-* URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#ID-102161490
-* Since:
-*/
-
-zend_function_entry php_dom_domimplementation_class_functions[] = {
- PHP_ME(domimplementation, getFeature, NULL, ZEND_ACC_PUBLIC|ZEND_ACC_ALLOW_STATIC)
- PHP_ME(domimplementation, hasFeature, NULL, ZEND_ACC_PUBLIC|ZEND_ACC_ALLOW_STATIC)
- PHP_ME(domimplementation, createDocumentType, NULL, ZEND_ACC_PUBLIC|ZEND_ACC_ALLOW_STATIC)
- PHP_ME(domimplementation, createDocument, NULL, ZEND_ACC_PUBLIC|ZEND_ACC_ALLOW_STATIC)
- {NULL, NULL, NULL}
-};
-
-/* {{{ proto boolean dom_domimplementation_has_feature(string feature, string version);
-URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#ID-5CED94D7
-Since:
-*/
-PHP_METHOD(domimplementation, hasFeature)
-{
- int feature_len, version_len;
- char *feature, *version;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ss", &feature, &feature_len, &version, &version_len) == FAILURE) {
- return;
- }
-
- if (dom_has_feature(feature, version)) {
- RETURN_TRUE;
- } else {
- RETURN_FALSE;
- }
-}
-/* }}} end dom_domimplementation_has_feature */
-
-
-/* {{{ proto DOMDocumentType dom_domimplementation_create_document_type(string qualifiedName, string publicId, string systemId);
-URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#Level-2-Core-DOM-createDocType
-Since: DOM Level 2
-*/
-PHP_METHOD(domimplementation, createDocumentType)
-{
- zval *rv = NULL;
- xmlDtd *doctype;
- int ret, name_len = 0, publicid_len = 0, systemid_len = 0;
- char *name, *publicid, *systemid;
- xmlChar *pch1 = NULL, *pch2 = NULL, *localname = NULL;
- xmlURIPtr uri;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|sss", &name, &name_len, &publicid, &publicid_len, &systemid, &systemid_len) == FAILURE) {
- return;
- }
-
- if (name_len == 0) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "qualifiedName is required");
- RETURN_FALSE;
- }
-
- if (publicid_len > 0)
- pch1 = publicid;
- if (systemid_len > 0)
- pch2 = systemid;
-
- uri = xmlParseURI(name);
- if (uri->opaque != NULL) {
- localname = xmlStrdup(uri->opaque);
- if (xmlStrchr(localname, (xmlChar) ':') != NULL) {
- php_dom_throw_error(NAMESPACE_ERR, 1 TSRMLS_CC);
- xmlFreeURI(uri);
- xmlFree(localname);
- RETURN_FALSE;
- }
- } else {
- localname = xmlStrdup(name);
- }
-
- /* TODO: Test that localname has no invalid chars
- php_dom_throw_error(INVALID_CHARACTER_ERR, TSRMLS_CC);
- */
-
- xmlFreeURI(uri);
-
- doctype = xmlCreateIntSubset(NULL, localname, pch1, pch2);
- xmlFree(localname);
-
- DOM_RET_OBJ(rv, (xmlNodePtr) doctype, &ret, NULL);
-}
-/* }}} end dom_domimplementation_create_document_type */
-
-
-/* {{{ proto DOMDocument dom_domimplementation_create_document(string namespaceURI, string qualifiedName, DOMDocumentType doctype);
-URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#Level-2-Core-DOM-createDocument
-Since: DOM Level 2
-*/
-PHP_METHOD(domimplementation, createDocument)
-{
- zval *node = NULL, *rv = NULL;
- xmlDoc *docp;
- xmlNode *nodep;
- xmlDtdPtr doctype = NULL;
- xmlNsPtr nsptr = NULL;
- int ret, uri_len = 0, name_len = 0, errorcode = 0;
- char *uri, *name;
- char *prefix = NULL, *localname = NULL;
- dom_object *doctobj;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|ssO", &uri, &uri_len, &name, &name_len, &node, dom_documenttype_class_entry) == FAILURE) {
- return;
- }
-
- if (node != NULL) {
- DOM_GET_OBJ(doctype, node, xmlDtdPtr, doctobj);
- if (doctype->type == XML_DOCUMENT_TYPE_NODE) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid DocumentType object");
- RETURN_FALSE;
- }
- if (doctype->doc != NULL) {
- php_dom_throw_error(WRONG_DOCUMENT_ERR, 1 TSRMLS_CC);
- RETURN_FALSE;
- }
- } else {
- doctobj = NULL;
- }
-
- if (name_len > 0) {
- errorcode = dom_check_qname(name, &localname, &prefix, 1, name_len);
- if (errorcode == 0 && uri_len > 0 && ((nsptr = xmlNewNs(NULL, uri, prefix)) == NULL)) {
- errorcode = NAMESPACE_ERR;
- }
- }
-
- if (prefix != NULL) {
- xmlFree(prefix);
- }
-
- if (errorcode != 0) {
- if (localname != NULL) {
- xmlFree(localname);
- }
- php_dom_throw_error(errorcode, 1 TSRMLS_CC);
- RETURN_FALSE;
- }
-
- /* currently letting libxml2 set the version string */
- docp = xmlNewDoc(NULL);
- if (!docp) {
- if (localname != NULL) {
- xmlFree(localname);
- }
- RETURN_FALSE;
- }
-
- if (doctype != NULL) {
- docp->intSubset = doctype;
- doctype->parent = docp;
- doctype->doc = docp;
- docp->children = (xmlNodePtr) doctype;
- docp->last = (xmlNodePtr) doctype;
- }
-
- if (localname != NULL) {
- nodep = xmlNewDocNode (docp, nsptr, localname, NULL);
- if (!nodep) {
- if (doctype != NULL) {
- docp->intSubset = NULL;
- doctype->parent = NULL;
- doctype->doc = NULL;
- docp->children = NULL;
- docp->last = NULL;
- }
- xmlFreeDoc(docp);
- xmlFree(localname);
- /* Need some type of error here */
- php_error(E_WARNING, "Unexpected Error");
- RETURN_FALSE;
- }
-
- nodep->nsDef = nsptr;
-
- xmlDocSetRootElement(docp, nodep);
- xmlFree(localname);
- }
-
- DOM_RET_OBJ(rv, (xmlNodePtr) docp, &ret, NULL);
-
- if (doctobj != NULL) {
- doctobj->document = ((dom_object *)((php_libxml_node_ptr *)docp->_private)->_private)->document;
- php_libxml_increment_doc_ref((php_libxml_node_object *)doctobj, docp TSRMLS_CC);
- }
-}
-/* }}} end dom_domimplementation_create_document */
-
-
-/* {{{ proto DOMNode dom_domimplementation_get_feature(string feature, string version);
-URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#DOMImplementation3-getFeature
-Since: DOM Level 3
-*/
-PHP_METHOD(domimplementation, getFeature)
-{
- DOM_NOT_IMPLEMENTED();
-}
-/* }}} end dom_domimplementation_get_feature */
-#endif
diff --git a/ext/dom/domimplementationlist.c b/ext/dom/domimplementationlist.c
deleted file mode 100644
index 7a71e46c4b..0000000000
--- a/ext/dom/domimplementationlist.c
+++ /dev/null
@@ -1,71 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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. |
- +----------------------------------------------------------------------+
- | Authors: Christian Stocker <chregu@php.net> |
- | Rob Richards <rrichards@php.net> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "php.h"
-#if HAVE_LIBXML && HAVE_DOM
-#include "php_dom.h"
-
-
-/*
-* class domimplementationlist
-*
-* URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#DOMImplementationList
-* Since: DOM Level 3
-*/
-
-zend_function_entry php_dom_domimplementationlist_class_functions[] = {
- PHP_FALIAS(item, dom_domimplementationlist_item, NULL)
- {NULL, NULL, NULL}
-};
-
-/* {{{ attribute protos, not implemented yet */
-
-/* {{{ proto length unsigned long
-readonly=yes
-URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#DOMImplementationList-length
-Since:
-*/
-int dom_domimplementationlist_length_read(dom_object *obj, zval **retval TSRMLS_DC)
-{
- ALLOC_ZVAL(*retval);
- ZVAL_STRING(*retval, "TEST", 1);
- return SUCCESS;
-}
-
-/* }}} */
-
-
-
-
-/* {{{ proto domdomimplementation dom_domimplementationlist_item(unsigned long index);
-URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#DOMImplementationList-item
-Since:
-*/
-PHP_FUNCTION(dom_domimplementationlist_item)
-{
- DOM_NOT_IMPLEMENTED();
-}
-/* }}} end dom_domimplementationlist_item */
-#endif
diff --git a/ext/dom/domimplementationsource.c b/ext/dom/domimplementationsource.c
deleted file mode 100644
index 92cad20750..0000000000
--- a/ext/dom/domimplementationsource.c
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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. |
- +----------------------------------------------------------------------+
- | Authors: Christian Stocker <chregu@php.net> |
- | Rob Richards <rrichards@php.net> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "php.h"
-#if HAVE_LIBXML && HAVE_DOM
-#include "php_dom.h"
-
-
-/*
-* class domimplementationsource
-*
-* URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#DOMImplementationSource
-* Since: DOM Level 3
-*/
-
-zend_function_entry php_dom_domimplementationsource_class_functions[] = {
- PHP_FALIAS(getDomimplementation, dom_domimplementationsource_get_domimplementation, NULL)
- PHP_FALIAS(getDomimplementations, dom_domimplementationsource_get_domimplementations, NULL)
- {NULL, NULL, NULL}
-};
-
-/* {{{ attribute protos, not implemented yet */
-
-
-/* {{{ proto domdomimplementation dom_domimplementationsource_get_domimplementation(string features);
-URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#ID-getDOMImpl
-Since:
-*/
-PHP_FUNCTION(dom_domimplementationsource_get_domimplementation)
-{
- DOM_NOT_IMPLEMENTED();
-}
-/* }}} end dom_domimplementationsource_get_domimplementation */
-
-
-/* {{{ proto domimplementationlist dom_domimplementationsource_get_domimplementations(string features);
-URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#ID-getDOMImpls
-Since:
-*/
-PHP_FUNCTION(dom_domimplementationsource_get_domimplementations)
-{
- DOM_NOT_IMPLEMENTED();
-}
-/* }}} end dom_domimplementationsource_get_domimplementations */
-#endif
diff --git a/ext/dom/domlocator.c b/ext/dom/domlocator.c
deleted file mode 100644
index eae848f94e..0000000000
--- a/ext/dom/domlocator.c
+++ /dev/null
@@ -1,123 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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. |
- +----------------------------------------------------------------------+
- | Authors: Christian Stocker <chregu@php.net> |
- | Rob Richards <rrichards@php.net> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "php.h"
-#if HAVE_LIBXML && HAVE_DOM
-#include "php_dom.h"
-
-
-/*
-* class domlocator
-*
-* URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#Interfaces-DOMLocator
-* Since: DOM Level 3
-*/
-
-zend_function_entry php_dom_domlocator_class_functions[] = {
- {NULL, NULL, NULL}
-};
-
-/* {{{ attribute protos, not implemented yet */
-
-/* {{{ proto line_number long
-readonly=yes
-URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#DOMLocator-line-number
-Since:
-*/
-int dom_domlocator_line_number_read(dom_object *obj, zval **retval TSRMLS_DC)
-{
- ALLOC_ZVAL(*retval);
- ZVAL_STRING(*retval, "TEST", 1);
- return SUCCESS;
-}
-
-/* }}} */
-
-
-
-/* {{{ proto column_number long
-readonly=yes
-URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#DOMLocator-column-number
-Since:
-*/
-int dom_domlocator_column_number_read(dom_object *obj, zval **retval TSRMLS_DC)
-{
- ALLOC_ZVAL(*retval);
- ZVAL_STRING(*retval, "TEST", 1);
- return SUCCESS;
-}
-
-/* }}} */
-
-
-
-/* {{{ proto offset long
-readonly=yes
-URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#DOMLocator-offset
-Since:
-*/
-int dom_domlocator_offset_read(dom_object *obj, zval **retval TSRMLS_DC)
-{
- ALLOC_ZVAL(*retval);
- ZVAL_STRING(*retval, "TEST", 1);
- return SUCCESS;
-}
-
-/* }}} */
-
-
-
-/* {{{ proto related_node node
-readonly=yes
-URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#DOMLocator-node
-Since:
-*/
-int dom_domlocator_related_node_read(dom_object *obj, zval **retval TSRMLS_DC)
-{
- ALLOC_ZVAL(*retval);
- ZVAL_STRING(*retval, "TEST", 1);
- return SUCCESS;
-}
-
-/* }}} */
-
-
-
-/* {{{ proto uri string
-readonly=yes
-URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#DOMLocator-uri
-Since:
-*/
-int dom_domlocator_uri_read(dom_object *obj, zval **retval TSRMLS_DC)
-{
- ALLOC_ZVAL(*retval);
- ZVAL_STRING(*retval, "TEST", 1);
- return SUCCESS;
-}
-
-/* }}} */
-
-
-#endif
diff --git a/ext/dom/domstringlist.c b/ext/dom/domstringlist.c
deleted file mode 100644
index b75a7cc63c..0000000000
--- a/ext/dom/domstringlist.c
+++ /dev/null
@@ -1,71 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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. |
- +----------------------------------------------------------------------+
- | Authors: Christian Stocker <chregu@php.net> |
- | Rob Richards <rrichards@php.net> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "php.h"
-#if HAVE_LIBXML && HAVE_DOM
-#include "php_dom.h"
-
-
-/*
-* class domstringlist
-*
-* URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#DOMStringList
-* Since: DOM Level 3
-*/
-
-zend_function_entry php_dom_domstringlist_class_functions[] = {
- PHP_FALIAS(item, dom_domstringlist_item, NULL)
- {NULL, NULL, NULL}
-};
-
-/* {{{ attribute protos, not implemented yet */
-
-/* {{{ proto length unsigned long
-readonly=yes
-URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#DOMStringList-length
-Since:
-*/
-int dom_domstringlist_length_read(dom_object *obj, zval **retval TSRMLS_DC)
-{
- ALLOC_ZVAL(*retval);
- ZVAL_STRING(*retval, "TEST", 1);
- return SUCCESS;
-}
-
-/* }}} */
-
-
-
-
-/* {{{ proto domstring dom_domstringlist_item(unsigned long index);
-URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#DOMStringList-item
-Since:
-*/
-PHP_FUNCTION(dom_domstringlist_item)
-{
- DOM_NOT_IMPLEMENTED();
-}
-/* }}} end dom_domstringlist_item */
-#endif
diff --git a/ext/dom/element.c b/ext/dom/element.c
deleted file mode 100644
index c0aceed234..0000000000
--- a/ext/dom/element.c
+++ /dev/null
@@ -1,885 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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. |
- +----------------------------------------------------------------------+
- | Authors: Christian Stocker <chregu@php.net> |
- | Rob Richards <rrichards@php.net> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "php.h"
-#if HAVE_LIBXML && HAVE_DOM
-#include "php_dom.h"
-
-
-/*
-* class DOMElement extends DOMNode
-*
-* URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-745549614
-* Since:
-*/
-
-zend_function_entry php_dom_element_class_functions[] = {
- PHP_FALIAS(getAttribute, dom_element_get_attribute, NULL)
- PHP_FALIAS(setAttribute, dom_element_set_attribute, NULL)
- PHP_FALIAS(removeAttribute, dom_element_remove_attribute, NULL)
- PHP_FALIAS(getAttributeNode, dom_element_get_attribute_node, NULL)
- PHP_FALIAS(setAttributeNode, dom_element_set_attribute_node, NULL)
- PHP_FALIAS(removeAttributeNode, dom_element_remove_attribute_node, NULL)
- PHP_FALIAS(getElementsByTagName, dom_element_get_elements_by_tag_name, NULL)
- PHP_FALIAS(getAttributeNS, dom_element_get_attribute_ns, NULL)
- PHP_FALIAS(setAttributeNS, dom_element_set_attribute_ns, NULL)
- PHP_FALIAS(removeAttributeNS, dom_element_remove_attribute_ns, NULL)
- PHP_FALIAS(getAttributeNodeNS, dom_element_get_attribute_node_ns, NULL)
- PHP_FALIAS(setAttributeNodeNS, dom_element_set_attribute_node_ns, NULL)
- PHP_FALIAS(getElementsByTagNameNS, dom_element_get_elements_by_tag_name_ns, NULL)
- PHP_FALIAS(hasAttribute, dom_element_has_attribute, NULL)
- PHP_FALIAS(hasAttributeNS, dom_element_has_attribute_ns, NULL)
- PHP_FALIAS(setIdAttribute, dom_element_set_id_attribute, NULL)
- PHP_FALIAS(setIdAttributeNS, dom_element_set_id_attribute_ns, NULL)
- PHP_FALIAS(setIdAttributeNode, dom_element_set_id_attribute_node, NULL)
- PHP_ME(domelement, __construct, NULL, ZEND_ACC_PUBLIC)
- {NULL, NULL, NULL}
-};
-
-/* {{{ proto void DOMElement::__construct(string name, [string value], [string uri]); */
-PHP_METHOD(domelement, __construct)
-{
-
- zval *id;
- xmlNodePtr nodep = NULL, oldnode = NULL;
- dom_object *intern;
- char *name, *value = NULL, *uri = NULL;
- char *localname = NULL, *prefix = NULL;
- int errorcode = 0, uri_len = 0;
- int name_len, value_len = 0, name_valid;
- xmlNsPtr nsptr = NULL;
-
- php_set_error_handling(EH_THROW, dom_domexception_class_entry TSRMLS_CC);
- if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Os|s!s", &id, dom_element_class_entry, &name, &name_len, &value, &value_len, &uri, &uri_len) == FAILURE) {
- php_std_error_handling();
- return;
- }
-
- php_std_error_handling();
- name_valid = xmlValidateName((xmlChar *) name, 0);
- if (name_valid != 0) {
- php_dom_throw_error(INVALID_CHARACTER_ERR, 1 TSRMLS_CC);
- RETURN_FALSE;
- }
-
- /* Namespace logic is seperate and only when uri passed in to insure no BC breakage */
- if (uri_len > 0) {
- errorcode = dom_check_qname(name, &localname, &prefix, uri_len, name_len);
- if (errorcode == 0) {
- nodep = xmlNewNode (NULL, localname);
- if (nodep != NULL && uri != NULL) {
- nsptr = dom_get_ns(nodep, uri, &errorcode, prefix);
- xmlSetNs(nodep, nsptr);
- }
- }
- xmlFree(localname);
- if (prefix != NULL) {
- xmlFree(prefix);
- }
- if (errorcode != 0) {
- if (nodep != NULL) {
- xmlFree(nodep);
- }
- php_dom_throw_error(errorcode, 1 TSRMLS_CC);
- RETURN_FALSE;
- }
- } else {
- /* If you don't pass a namespace uri, then you can't set a prefix */
- localname = xmlSplitQName2(name, (xmlChar **) &prefix);
- if (prefix != NULL) {
- xmlFree(localname);
- xmlFree(prefix);
- php_dom_throw_error(NAMESPACE_ERR, 1 TSRMLS_CC);
- RETURN_FALSE;
- }
- nodep = xmlNewNode(NULL, (xmlChar *) name);
- }
-
- if (!nodep) {
- php_dom_throw_error(INVALID_STATE_ERR, 1 TSRMLS_CC);
- RETURN_FALSE;
- }
-
- if (value_len > 0) {
- xmlNodeSetContentLen(nodep, value, value_len);
- }
-
- intern = (dom_object *)zend_object_store_get_object(id TSRMLS_CC);
- if (intern != NULL) {
- oldnode = (xmlNodePtr)intern->ptr;
- if (oldnode != NULL) {
- php_libxml_node_free_resource(oldnode TSRMLS_CC);
- }
- php_libxml_increment_node_ptr((php_libxml_node_object *)intern, nodep, (void *)intern TSRMLS_CC);
- }
-}
-/* }}} end DOMElement::__construct */
-
-/* {{{ proto tagName string
-readonly=yes
-URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-104682815
-Since:
-*/
-int dom_element_tag_name_read(dom_object *obj, zval **retval TSRMLS_DC)
-{
- xmlNodePtr nodep;
- xmlNsPtr ns;
- xmlChar *qname;
-
- nodep = dom_object_get_node(obj);
-
- if (nodep == NULL) {
- php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC);
- return FAILURE;
- }
-
- ALLOC_ZVAL(*retval);
- ns = nodep->ns;
- if (ns != NULL && ns->prefix) {
- qname = xmlStrdup(ns->prefix);
- qname = xmlStrcat(qname, ":");
- qname = xmlStrcat(qname, nodep->name);
- ZVAL_STRING(*retval, qname, 1);
- xmlFree(qname);
- } else {
- ZVAL_STRING(*retval, (char *) nodep->name, 1);
- }
-
- return SUCCESS;
-}
-
-/* }}} */
-
-
-
-/* {{{ proto schemaTypeInfo typeinfo
-readonly=yes
-URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#Element-schemaTypeInfo
-Since: DOM Level 3
-*/
-int dom_element_schema_type_info_read(dom_object *obj, zval **retval TSRMLS_DC)
-{
- ALLOC_ZVAL(*retval);
- ZVAL_NULL(*retval);
- return SUCCESS;
-}
-
-/* }}} */
-
-
-
-/* {{{ proto string dom_element_get_attribute(string name);
-URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-666EE0F9
-Since:
-*/
-PHP_FUNCTION(dom_element_get_attribute)
-{
- zval *id;
- xmlNode *nodep;
- char *name, *value;
- dom_object *intern;
- int name_len;
-
- if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Os", &id, dom_element_class_entry, &name, &name_len) == FAILURE) {
- return;
- }
-
- DOM_GET_OBJ(nodep, id, xmlNodePtr, intern);
-
- value = xmlGetProp(nodep, name);
- if (value == NULL) {
- RETURN_EMPTY_STRING();
- } else {
- RETVAL_STRING(value, 1);
- xmlFree(value);
- }
-}
-/* }}} end dom_element_get_attribute */
-
-
-/* {{{ proto void dom_element_set_attribute(string name, string value);
-URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-F68F082
-Since:
-*/
-PHP_FUNCTION(dom_element_set_attribute)
-{
- zval *id, *rv = NULL;
- xmlNode *nodep;
- xmlAttr *attr;
- int ret, name_len, value_len;
- dom_object *intern;
- char *name, *value;
-
-
- if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Oss", &id, dom_element_class_entry, &name, &name_len, &value, &value_len) == FAILURE) {
- return;
- }
-
- if (name_len == 0) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Attribute Name is required");
- RETURN_FALSE;
- }
-
- DOM_GET_OBJ(nodep, id, xmlNodePtr, intern);
-
- if (dom_node_is_read_only(nodep) == SUCCESS) {
- php_dom_throw_error(NO_MODIFICATION_ALLOWED_ERR, dom_get_strict_error(intern->document) TSRMLS_CC);
- RETURN_FALSE;
- }
-
- attr = xmlHasProp(nodep,name);
- if (attr != NULL) {
- node_list_unlink(attr->children TSRMLS_CC);
- }
- attr = xmlSetProp(nodep, name, value);
- if (!attr) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "No such attribute '%s'", name);
- RETURN_FALSE;
- }
-
- DOM_RET_OBJ(rv, (xmlNodePtr) attr, &ret, intern);
-
-}
-/* }}} end dom_element_set_attribute */
-
-
-/* {{{ proto void dom_element_remove_attribute(string name);
-URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-6D6AC0F9
-Since:
-*/
-PHP_FUNCTION(dom_element_remove_attribute)
-{
- zval *id;
- xmlNode *nodep;
- xmlAttr *attrp;
- dom_object *intern;
- int name_len;
- char *name;
-
- if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Os", &id, dom_element_class_entry, &name, &name_len) == FAILURE) {
- return;
- }
-
- DOM_GET_OBJ(nodep, id, xmlNodePtr, intern);
-
- if (dom_node_is_read_only(nodep) == SUCCESS) {
- php_dom_throw_error(NO_MODIFICATION_ALLOWED_ERR, dom_get_strict_error(intern->document) TSRMLS_CC);
- RETURN_FALSE;
- }
-
- attrp = xmlHasProp(nodep,name);
- if (attrp == NULL) {
- RETURN_FALSE;
- }
-
- /* TODO: DTD defined attributes are handled special */
- if (php_dom_object_get_data((xmlNodePtr) attrp) == NULL) {
- node_list_unlink(attrp->children TSRMLS_CC);
- xmlUnlinkNode((xmlNodePtr) attrp);
- xmlFreeProp(attrp);
- } else {
- xmlUnlinkNode((xmlNodePtr) attrp);
- }
-
- RETURN_TRUE;
-}
-/* }}} end dom_element_remove_attribute */
-
-
-/* {{{ proto DOMAttr dom_element_get_attribute_node(string name);
-URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-217A91B8
-Since:
-*/
-PHP_FUNCTION(dom_element_get_attribute_node)
-{
- zval *id, *rv = NULL;
- xmlNode *nodep;
- xmlAttr *attrp;
- int name_len, ret;
- dom_object *intern;
- char *name;
-
- if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Os", &id, dom_element_class_entry, &name, &name_len) == FAILURE) {
- return;
- }
-
- DOM_GET_OBJ(nodep, id, xmlNodePtr, intern);
-
- attrp = xmlHasProp(nodep,name);
- if (attrp == NULL) {
- RETURN_FALSE;
- }
-
- DOM_RET_OBJ(rv, (xmlNodePtr) attrp, &ret, intern);
-}
-/* }}} end dom_element_get_attribute_node */
-
-
-/* {{{ proto DOMAttr dom_element_set_attribute_node(DOMAttr newAttr);
-URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-887236154
-Since:
-*/
-PHP_FUNCTION(dom_element_set_attribute_node)
-{
- zval *id, *node, *rv = NULL;
- xmlNode *nodep;
- xmlAttr *attrp, *existattrp = NULL;
- dom_object *intern, *attrobj, *oldobj;
- int ret;
-
- if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "OO", &id, dom_element_class_entry, &node, dom_attr_class_entry) == FAILURE) {
- return;
- }
-
- DOM_GET_OBJ(nodep, id, xmlNodePtr, intern);
-
- if (dom_node_is_read_only(nodep) == SUCCESS) {
- php_dom_throw_error(NO_MODIFICATION_ALLOWED_ERR, dom_get_strict_error(intern->document) TSRMLS_CC);
- RETURN_FALSE;
- }
-
- DOM_GET_OBJ(attrp, node, xmlAttrPtr, attrobj);
-
- if (attrp->type != XML_ATTRIBUTE_NODE) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Attribute node is required");
- RETURN_FALSE;
- }
-
- existattrp = xmlHasProp(nodep, attrp->name);
- if (existattrp != NULL) {
- if ((oldobj = php_dom_object_get_data((xmlNodePtr) existattrp)) != NULL &&
- ((php_libxml_node_ptr *)oldobj->ptr)->node == (xmlNodePtr) attrp)
- {
- RETURN_NULL();
- }
- xmlUnlinkNode((xmlNodePtr) existattrp);
- }
-
- if (attrp->doc == NULL && nodep->doc != NULL) {
- attrobj->document = intern->document;
- php_libxml_increment_doc_ref((php_libxml_node_object *)attrobj, NULL TSRMLS_CC);
- }
-
- xmlAddChild(nodep, (xmlNodePtr) attrp);
-
- /* Returns old property if removed otherwise NULL */
- if (existattrp != NULL) {
- DOM_RET_OBJ(rv, (xmlNodePtr) existattrp, &ret, intern);
- } else {
- RETVAL_NULL();
- }
-
-}
-/* }}} end dom_element_set_attribute_node */
-
-
-/* {{{ proto DOMAttr dom_element_remove_attribute_node(DOMAttr oldAttr);
-URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-D589198
-Since:
-*/
-PHP_FUNCTION(dom_element_remove_attribute_node)
-{
- zval *id, *node, *rv = NULL;
- xmlNode *nodep;
- xmlAttr *attrp;
- dom_object *intern, *attrobj;
- int ret;
-
- if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "OO", &id, dom_element_class_entry, &node, dom_attr_class_entry) == FAILURE) {
- return;
- }
-
- DOM_GET_OBJ(nodep, id, xmlNodePtr, intern);
-
- if (dom_node_is_read_only(nodep) == SUCCESS) {
- php_dom_throw_error(NO_MODIFICATION_ALLOWED_ERR, dom_get_strict_error(intern->document) TSRMLS_CC);
- RETURN_FALSE;
- }
-
- DOM_GET_OBJ(attrp, node, xmlAttrPtr, attrobj);
-
- if (attrp->type != XML_ATTRIBUTE_NODE || attrp->parent != nodep) {
- php_dom_throw_error(NOT_FOUND_ERR, dom_get_strict_error(intern->document) TSRMLS_CC);
- RETURN_FALSE;
- }
-
- xmlUnlinkNode((xmlNodePtr) attrp);
-
- DOM_RET_OBJ(rv, (xmlNodePtr) attrp, &ret, intern);
-
-}
-/* }}} end dom_element_remove_attribute_node */
-
-
-/* {{{ proto DOMNodeList dom_element_get_elements_by_tag_name(string name);
-URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-1938918D
-Since:
-*/
-PHP_FUNCTION(dom_element_get_elements_by_tag_name)
-{
- zval *id;
- xmlNodePtr elemp;
- int name_len;
- dom_object *intern, *namednode;
- char *name;
- xmlChar *local;
-
- if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Os", &id, dom_element_class_entry, &name, &name_len) == FAILURE) {
- return;
- }
-
- DOM_GET_OBJ(elemp, id, xmlNodePtr, intern);
-
- php_dom_create_interator(return_value, DOM_NODELIST TSRMLS_CC);
- namednode = (dom_object *)zend_objects_get_address(return_value TSRMLS_CC);
- local = xmlCharStrndup(name, name_len);
- dom_namednode_iter(intern, 0, namednode, NULL, local, NULL TSRMLS_CC);
-}
-/* }}} end dom_element_get_elements_by_tag_name */
-
-
-/* {{{ proto string dom_element_get_attribute_ns(string namespaceURI, string localName);
-URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-ElGetAttrNS
-Since: DOM Level 2
-*/
-PHP_FUNCTION(dom_element_get_attribute_ns)
-{
- zval *id;
- xmlNodePtr elemp;
- xmlNsPtr nsptr;
- dom_object *intern;
- int uri_len = 0, name_len = 0;
- char *uri, *name, *strattr;
-
- if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Os!s", &id, dom_element_class_entry, &uri, &uri_len, &name, &name_len) == FAILURE) {
- return;
- }
-
- DOM_GET_OBJ(elemp, id, xmlNodePtr, intern);
-
- strattr = xmlGetNsProp(elemp, name, uri);
-
- if (strattr != NULL) {
- RETVAL_STRING(strattr, 1);
- xmlFree(strattr);
- } else {
- if (xmlStrEqual(uri, DOM_XMLNS_NAMESPACE)) {
- nsptr = dom_get_nsdecl(elemp, name);
- if (nsptr != NULL) {
- RETVAL_STRING((char *) nsptr->href, 1);
- } else {
- RETVAL_EMPTY_STRING();
- }
- } else {
- RETVAL_EMPTY_STRING();
- }
- }
-
-}
-/* }}} end dom_element_get_attribute_ns */
-
-
-/* {{{ proto void dom_element_set_attribute_ns(string namespaceURI, string qualifiedName, string value);
-URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-ElSetAttrNS
-Since: DOM Level 2
-*/
-PHP_FUNCTION(dom_element_set_attribute_ns)
-{
- zval *id;
- xmlNodePtr elemp, nodep = NULL;
- xmlNsPtr nsptr;
- xmlAttr *attr;
- int uri_len = 0, name_len = 0, value_len = 0;
- char *uri, *name, *value;
- char *localname = NULL, *prefix = NULL;
- dom_object *intern;
- int errorcode = 0, stricterror, is_xmlns = 0;
-
- if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Os!ss", &id, dom_element_class_entry, &uri, &uri_len, &name, &name_len, &value, &value_len) == FAILURE) {
- return;
- }
-
- if (name_len == 0) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Attribute Name is required");
- RETURN_FALSE;
- }
-
- DOM_GET_OBJ(elemp, id, xmlNodePtr, intern);
-
- stricterror = dom_get_strict_error(intern->document);
-
- if (dom_node_is_read_only(elemp) == SUCCESS) {
- php_dom_throw_error(NO_MODIFICATION_ALLOWED_ERR, stricterror TSRMLS_CC);
- RETURN_NULL();
- }
-
- errorcode = dom_check_qname(name, &localname, &prefix, uri_len, name_len);
-
- if (errorcode == 0) {
- if (uri_len > 0) {
- nodep = (xmlNodePtr) xmlHasNsProp(elemp, localname, uri);
- if (nodep != NULL) {
- node_list_unlink(nodep->children TSRMLS_CC);
- }
-
- if (xmlStrEqual(prefix,"xmlns") && xmlStrEqual(uri, DOM_XMLNS_NAMESPACE)) {
- is_xmlns = 1;
- nsptr = dom_get_nsdecl(elemp, localname);
- } else {
- nsptr = xmlSearchNsByHref(elemp->doc, elemp, uri);
- while (nsptr && nsptr->prefix == NULL) {
- nsptr = nsptr->next;
- }
- }
-
- if (nsptr == NULL) {
- if (prefix == NULL) {
- errorcode = NAMESPACE_ERR;
- } else {
- if (is_xmlns == 1) {
- xmlNewNs(elemp, value, localname);
- } else {
- nsptr = dom_get_ns(elemp, uri, &errorcode, prefix);
- }
- }
- } else {
- if (is_xmlns == 1) {
- if (nsptr->href) {
- xmlFree((xmlChar *) nsptr->href);
- }
- nsptr->href = xmlStrdup(value);
- }
- }
-
- if (errorcode == 0 && is_xmlns == 0) {
- attr = xmlSetNsProp(elemp, nsptr, localname, value);
- }
- } else {
- attr = xmlHasProp(elemp, localname);
- if (attr != NULL) {
- node_list_unlink(attr->children TSRMLS_CC);
- }
- attr = xmlSetProp(elemp, localname, value);
- }
- }
-
- xmlFree(localname);
- if (prefix != NULL) {
- xmlFree(prefix);
- }
-
- if (errorcode != 0) {
- php_dom_throw_error(errorcode, stricterror TSRMLS_CC);
- }
-
- RETURN_NULL();
-}
-/* }}} end dom_element_set_attribute_ns */
-
-
-/* {{{ proto void dom_element_remove_attribute_ns(string namespaceURI, string localName);
-URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-ElRemAtNS
-Since: DOM Level 2
-*/
-PHP_FUNCTION(dom_element_remove_attribute_ns)
-{
- zval *id;
- xmlNode *nodep;
- xmlAttr *attrp;
- xmlNsPtr nsptr;
- dom_object *intern;
- int name_len, uri_len;
- char *name, *uri;
-
- if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Os!s", &id, dom_element_class_entry, &uri, &uri_len, &name, &name_len) == FAILURE) {
- return;
- }
-
- DOM_GET_OBJ(nodep, id, xmlNodePtr, intern);
-
- if (dom_node_is_read_only(nodep) == SUCCESS) {
- php_dom_throw_error(NO_MODIFICATION_ALLOWED_ERR, dom_get_strict_error(intern->document) TSRMLS_CC);
- RETURN_NULL();
- }
-
- attrp = xmlHasNsProp(nodep, name, uri);
-
- nsptr = dom_get_nsdecl(nodep, name);
- if (nsptr != NULL) {
- if (xmlStrEqual(uri, nsptr->href)) {
- if (nsptr->href != NULL) {
- xmlFree((char *) nsptr->href);
- nsptr->href = NULL;
- }
- if (nsptr->prefix != NULL) {
- xmlFree((char *) nsptr->prefix);
- nsptr->prefix = NULL;
- }
- } else {
- RETURN_NULL();
- }
- }
-
- if (attrp) {
- if (php_dom_object_get_data((xmlNodePtr) attrp) == NULL) {
- node_list_unlink(attrp->children TSRMLS_CC);
- xmlUnlinkNode((xmlNodePtr) attrp);
- xmlFreeProp(attrp);
- } else {
- xmlUnlinkNode((xmlNodePtr) attrp);
- }
- }
-
- RETURN_NULL();
-}
-/* }}} end dom_element_remove_attribute_ns */
-
-
-/* {{{ proto DOMAttr dom_element_get_attribute_node_ns(string namespaceURI, string localName);
-URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-ElGetAtNodeNS
-Since: DOM Level 2
-*/
-PHP_FUNCTION(dom_element_get_attribute_node_ns)
-{
- zval *id, *rv = NULL;
- xmlNodePtr elemp;
- xmlAttrPtr attrp;
- dom_object *intern;
- int uri_len, name_len, ret;
- char *uri, *name;
-
- if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Oss", &id, dom_element_class_entry, &uri, &uri_len, &name, &name_len) == FAILURE) {
- return;
- }
-
- DOM_GET_OBJ(elemp, id, xmlNodePtr, intern);
-
- attrp = xmlHasNsProp(elemp, name, uri);
-
- if (attrp == NULL) {
- RETURN_NULL();
- }
-
- DOM_RET_OBJ(rv, (xmlNodePtr) attrp, &ret, intern);
-
-}
-/* }}} end dom_element_get_attribute_node_ns */
-
-
-/* {{{ proto DOMAttr dom_element_set_attribute_node_ns(DOMAttr newAttr);
-URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-ElSetAtNodeNS
-Since: DOM Level 2
-*/
-PHP_FUNCTION(dom_element_set_attribute_node_ns)
-{
- zval *id, *node, *rv = NULL;
- xmlNode *nodep;
- xmlNs *nsp;
- xmlAttr *attrp, *existattrp = NULL;
- dom_object *intern, *attrobj, *oldobj;
- int ret;
-
- if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "OO", &id, dom_element_class_entry, &node, dom_attr_class_entry) == FAILURE) {
- return;
- }
-
- DOM_GET_OBJ(nodep, id, xmlNodePtr, intern);
-
- if (dom_node_is_read_only(nodep) == SUCCESS) {
- php_dom_throw_error(NO_MODIFICATION_ALLOWED_ERR, dom_get_strict_error(intern->document) TSRMLS_CC);
- RETURN_FALSE;
- }
-
- DOM_GET_OBJ(attrp, node, xmlAttrPtr, attrobj);
-
- if (attrp->type != XML_ATTRIBUTE_NODE) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Attribute node is required");
- RETURN_FALSE;
- }
-
- nsp = attrp->ns;
- if (nsp != NULL) {
- existattrp = xmlHasNsProp(nodep, nsp->href, attrp->name);
- } else {
- existattrp = xmlHasProp(nodep, attrp->name);
- }
-
- if (existattrp != NULL) {
- if ((oldobj = php_dom_object_get_data((xmlNodePtr) existattrp)) != NULL &&
- ((php_libxml_node_ptr *)oldobj->ptr)->node == (xmlNodePtr) attrp)
- {
- RETURN_NULL();
- }
- xmlUnlinkNode((xmlNodePtr) existattrp);
- }
-
- if (attrp->doc == NULL && nodep->doc != NULL) {
- attrobj->document = intern->document;
- php_libxml_increment_doc_ref((php_libxml_node_object *)attrobj, NULL TSRMLS_CC);
- }
-
- xmlAddChild(nodep, (xmlNodePtr) attrp);
-
- /* Returns old property if removed otherwise NULL */
- if (existattrp != NULL) {
- DOM_RET_OBJ(rv, (xmlNodePtr) existattrp, &ret, intern);
- } else {
- RETVAL_NULL();
- }
-
-}
-/* }}} end dom_element_set_attribute_node_ns */
-
-
-
-/* {{{ proto DOMNodeList dom_element_get_elements_by_tag_name_ns(string namespaceURI, string localName);
-URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-A6C90942
-Since: DOM Level 2
-*/
-PHP_FUNCTION(dom_element_get_elements_by_tag_name_ns)
-{
- zval *id;
- xmlNodePtr elemp;
- int uri_len, name_len;
- dom_object *intern, *namednode;
- char *uri, *name;
- xmlChar *local, *nsuri;
-
- if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Oss", &id, dom_element_class_entry, &uri, &uri_len, &name, &name_len) == FAILURE) {
- return;
- }
-
- DOM_GET_OBJ(elemp, id, xmlNodePtr, intern);
-
- php_dom_create_interator(return_value, DOM_NODELIST TSRMLS_CC);
- namednode = (dom_object *)zend_objects_get_address(return_value TSRMLS_CC);
- local = xmlCharStrndup(name, name_len);
- nsuri = xmlCharStrndup(uri, uri_len);
- dom_namednode_iter(intern, 0, namednode, NULL, local, nsuri TSRMLS_CC);
-
-}
-/* }}} end dom_element_get_elements_by_tag_name_ns */
-
-
-/* {{{ proto boolean dom_element_has_attribute(string name);
-URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-ElHasAttr
-Since: DOM Level 2
-*/
-PHP_FUNCTION(dom_element_has_attribute)
-{
- zval *id;
- xmlNode *nodep;
- dom_object *intern;
- char *name, *value;
- int name_len;
-
- if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Os", &id, dom_element_class_entry, &name, &name_len) == FAILURE) {
- return;
- }
-
- DOM_GET_OBJ(nodep, id, xmlNodePtr, intern);
-
- value = xmlGetProp(nodep, name);
- if (value == NULL) {
- RETURN_FALSE;
- } else {
- xmlFree(value);
- RETURN_TRUE;
- }
-}
-/* }}} end dom_element_has_attribute */
-
-
-/* {{{ proto boolean dom_element_has_attribute_ns(string namespaceURI, string localName);
-URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-ElHasAttrNS
-Since: DOM Level 2
-*/
-PHP_FUNCTION(dom_element_has_attribute_ns)
-{
- zval *id;
- xmlNodePtr elemp;
- xmlNs *nsp;
- dom_object *intern;
- int uri_len, name_len;
- char *uri, *name, *value;
-
- if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Os!s", &id, dom_element_class_entry, &uri, &uri_len, &name, &name_len) == FAILURE) {
- return;
- }
-
- DOM_GET_OBJ(elemp, id, xmlNodePtr, intern);
-
- value = xmlGetNsProp(elemp, name, uri);
-
- if (value != NULL) {
- xmlFree(value);
- RETURN_TRUE;
- } else {
- if (xmlStrEqual(uri, DOM_XMLNS_NAMESPACE)) {
- nsp = dom_get_nsdecl(elemp, name);
- if (nsp != NULL) {
- RETURN_TRUE;
- }
- }
- }
-
- RETURN_FALSE;
-}
-/* }}} end dom_element_has_attribute_ns */
-
-
-/* {{{ proto void dom_element_set_id_attribute(string name, boolean isId);
-URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-ElSetIdAttr
-Since: DOM Level 3
-*/
-PHP_FUNCTION(dom_element_set_id_attribute)
-{
- DOM_NOT_IMPLEMENTED();
-}
-/* }}} end dom_element_set_id_attribute */
-
-
-/* {{{ proto void dom_element_set_id_attribute_ns(string namespaceURI, string localName, boolean isId);
-URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-ElSetIdAttrNS
-Since: DOM Level 3
-*/
-PHP_FUNCTION(dom_element_set_id_attribute_ns)
-{
- DOM_NOT_IMPLEMENTED();
-}
-/* }}} end dom_element_set_id_attribute_ns */
-
-
-/* {{{ proto void dom_element_set_id_attribute_node(attr idAttr, boolean isId);
-URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-ElSetIdAttrNode
-Since: DOM Level 3
-*/
-PHP_FUNCTION(dom_element_set_id_attribute_node)
-{
- DOM_NOT_IMPLEMENTED();
-}
-/* }}} end dom_element_set_id_attribute_node */
-
-#endif
diff --git a/ext/dom/entity.c b/ext/dom/entity.c
deleted file mode 100644
index 6da6b4e959..0000000000
--- a/ext/dom/entity.c
+++ /dev/null
@@ -1,196 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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. |
- +----------------------------------------------------------------------+
- | Authors: Christian Stocker <chregu@php.net> |
- | Rob Richards <rrichards@php.net> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "php.h"
-#if HAVE_LIBXML && HAVE_DOM
-#include "php_dom.h"
-
-
-/*
-* class DOMEntity extends DOMNode
-*
-* URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#ID-527DCFF2
-* Since:
-*/
-
-zend_function_entry php_dom_entity_class_functions[] = {
- {NULL, NULL, NULL}
-};
-
-/* {{{ proto publicId string
-readonly=yes
-URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#ID-D7303025
-Since:
-*/
-int dom_entity_public_id_read(dom_object *obj, zval **retval TSRMLS_DC)
-{
- xmlEntity *nodep;
-
- nodep = (xmlEntity *) dom_object_get_node(obj);
-
- if (nodep == NULL) {
- php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC);
- return FAILURE;
- }
-
- ALLOC_ZVAL(*retval);
- if (nodep->etype != XML_EXTERNAL_GENERAL_UNPARSED_ENTITY) {
- ZVAL_NULL(*retval);
- } else {
- ZVAL_STRING(*retval, (char *) (nodep->ExternalID), 1);
- }
-
- return SUCCESS;
-}
-
-/* }}} */
-
-
-
-/* {{{ proto systemId string
-readonly=yes
-URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#ID-D7C29F3E
-Since:
-*/
-int dom_entity_system_id_read(dom_object *obj, zval **retval TSRMLS_DC)
-{
- xmlEntity *nodep;
-
- nodep = (xmlEntity *) dom_object_get_node(obj);
-
- if (nodep == NULL) {
- php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC);
- return FAILURE;
- }
-
- ALLOC_ZVAL(*retval);
- if (nodep->etype != XML_EXTERNAL_GENERAL_UNPARSED_ENTITY) {
- ZVAL_NULL(*retval);
- } else {
- ZVAL_STRING(*retval, (char *) (nodep->SystemID), 1);
- }
-
- return SUCCESS;
-}
-
-/* }}} */
-
-
-
-/* {{{ proto notationName string
-readonly=yes
-URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#ID-6ABAEB38
-Since:
-*/
-int dom_entity_notation_name_read(dom_object *obj, zval **retval TSRMLS_DC)
-{
- xmlEntity *nodep;
- char *content;
-
- nodep = (xmlEntity *) dom_object_get_node(obj);
-
- if (nodep == NULL) {
- php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC);
- return FAILURE;
- }
-
- ALLOC_ZVAL(*retval);
- if (nodep->etype != XML_EXTERNAL_GENERAL_UNPARSED_ENTITY) {
- ZVAL_NULL(*retval);
- } else {
- content = xmlNodeGetContent((xmlNodePtr) nodep);
- ZVAL_STRING(*retval, content, 1);
- xmlFree(content);
- }
-
- return SUCCESS;
-}
-
-/* }}} */
-
-
-
-/* {{{ proto actualEncoding string
-readonly=no
-URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#Entity3-actualEncoding
-Since: DOM Level 3
-*/
-int dom_entity_actual_encoding_read(dom_object *obj, zval **retval TSRMLS_DC)
-{
- ALLOC_ZVAL(*retval);
- ZVAL_NULL(*retval);
- return SUCCESS;
-}
-
-int dom_entity_actual_encoding_write(dom_object *obj, zval *newval TSRMLS_DC)
-{
- return SUCCESS;
-}
-
-/* }}} */
-
-
-
-/* {{{ proto encoding string
-readonly=no
-URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#Entity3-encoding
-Since: DOM Level 3
-*/
-int dom_entity_encoding_read(dom_object *obj, zval **retval TSRMLS_DC)
-{
- ALLOC_ZVAL(*retval);
- ZVAL_NULL(*retval);
- return SUCCESS;
-}
-
-int dom_entity_encoding_write(dom_object *obj, zval *newval TSRMLS_DC)
-{
- return SUCCESS;
-}
-
-/* }}} */
-
-
-
-/* {{{ proto version string
-readonly=no
-URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#Entity3-version
-Since: DOM Level 3
-*/
-int dom_entity_version_read(dom_object *obj, zval **retval TSRMLS_DC)
-{
- ALLOC_ZVAL(*retval);
- ZVAL_NULL(*retval);
- return SUCCESS;
-}
-
-int dom_entity_version_write(dom_object *obj, zval *newval TSRMLS_DC)
-{
- return SUCCESS;
-}
-
-/* }}} */
-
-#endif
diff --git a/ext/dom/entityreference.c b/ext/dom/entityreference.c
deleted file mode 100644
index 9ba69d7404..0000000000
--- a/ext/dom/entityreference.c
+++ /dev/null
@@ -1,85 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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. |
- +----------------------------------------------------------------------+
- | Authors: Christian Stocker <chregu@php.net> |
- | Rob Richards <rrichards@php.net> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "php.h"
-#if HAVE_LIBXML && HAVE_DOM
-#include "php_dom.h"
-
-
-/*
-* class DOMEntityReference extends DOMNode
-*
-* URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#ID-11C98490
-* Since:
-*/
-
-zend_function_entry php_dom_entityreference_class_functions[] = {
- PHP_ME(domentityreference, __construct, NULL, ZEND_ACC_PUBLIC)
- {NULL, NULL, NULL}
-};
-
-/* {{{ proto void DOMEntityReference::__construct(string name); */
-PHP_METHOD(domentityreference, __construct)
-{
- zval *id;
- xmlNode *node;
- xmlNodePtr oldnode = NULL;
- dom_object *intern;
- char *name;
- int name_len, name_valid;
-
- php_set_error_handling(EH_THROW, dom_domexception_class_entry TSRMLS_CC);
- if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Os", &id, dom_entityreference_class_entry, &name, &name_len) == FAILURE) {
- php_std_error_handling();
- return;
- }
-
- php_std_error_handling();
-
- name_valid = xmlValidateName((xmlChar *) name, 0);
- if (name_valid != 0) {
- php_dom_throw_error(INVALID_CHARACTER_ERR, 1 TSRMLS_CC);
- RETURN_FALSE;
- }
-
- node = xmlNewReference(NULL, name);
-
- if (!node) {
- php_dom_throw_error(INVALID_STATE_ERR, 1 TSRMLS_CC);
- RETURN_FALSE;
- }
-
- intern = (dom_object *)zend_object_store_get_object(id TSRMLS_CC);
- if (intern != NULL) {
- oldnode = (xmlNodePtr)intern->ptr;
- if (oldnode != NULL) {
- php_libxml_node_free_resource(oldnode TSRMLS_CC);
- }
- php_libxml_increment_node_ptr((php_libxml_node_object *)intern, node, (void *)intern TSRMLS_CC);
- }
-}
-
-/* }}} end DOMEntityReference::__construct */
-#endif
diff --git a/ext/dom/examples/dom1.inc b/ext/dom/examples/dom1.inc
deleted file mode 100644
index 792d6f2dbc..0000000000
--- a/ext/dom/examples/dom1.inc
+++ /dev/null
@@ -1,43 +0,0 @@
-<?PHP
-$xmlstr = "<?xml version='1.0' standalone='yes'?>
-<!DOCTYPE chapter SYSTEM '/share/sgml/Norman_Walsh/db3xml10/db3xml10.dtd'
-[ <!ENTITY sp \"spanish\">
-]>
-<!-- lsfj -->
-<chapter language='en'><title language='en'>Title</title>
-<para language='ge'>
-&sp;
-<!-- comment -->
-<informaltable language='&sp;kkk'>
-<tgroup cols='3'>
-<tbody>
-<row><entry>a1</entry><entry morerows='1'>b1</entry><entry>c1</entry></row>
-<row><entry>a2</entry><entry>c2</entry></row>
-<row><entry>a3</entry><entry>b3</entry><entry>c3</entry></row>
-</tbody>
-</tgroup>
-</informaltable>
-</para>
-</chapter> ";
-
-function print_node($node)
-{
- print "Node Name: " . $node->nodeName;
- print "\nNode Type: " . $node->nodeType;
- $child_count = $node->childNodes->length;
- print "\nNum Children: " . $child_count;
- if($child_count <= 1){
- print "\nNode Content: " . $node->nodeValue;
- }
- print "\n\n";
-}
-
-function print_node_list($nodelist)
-{
- foreach($nodelist as $node)
- {
- print_node($node);
- }
-}
-
-?>
diff --git a/ext/dom/examples/dom1.php b/ext/dom/examples/dom1.php
deleted file mode 100644
index 8ea367458d..0000000000
--- a/ext/dom/examples/dom1.php
+++ /dev/null
@@ -1,94 +0,0 @@
-<?php
-require_once("dom1.inc");
-
-echo "Test 1: accessing single nodes from php\n";
-$dom = new domDocument;
-$dom->loadxml($xmlstr);
-if(!$dom) {
- echo "Error while parsing the document\n";
- exit;
-}
-
-// children() of of document would result in a memleak
-//$children = $dom->children();
-//print_node_list($children);
-
-echo "--------- root\n";
-$rootnode = $dom->documentElement;
-print_node($rootnode);
-
-echo "--------- children of root\n";
-$children = $rootnode->childNodes;
-print_node_list($children);
-
-// The last node should be identical with the last entry in the children array
-echo "--------- last\n";
-$last = $rootnode->lastChild;
-print_node($last);
-
-// The parent of this last node is the root again
-echo "--------- parent\n";
-$parent = $last->parentNode;
-print_node($parent);
-
-// The children of this parent are the same children as one above
-echo "--------- children of parent\n";
-$children = $parent->childNodes;
-print_node_list($children);
-
-echo "--------- creating a new attribute\n";
-//This is worthless
-//$attr = $dom->createAttribute("src", "picture.gif");
-//print_r($attr);
-
-//$rootnode->set_attributeNode($attr);
-$attr = $rootnode->setAttribute("src", "picture.gif");
-$attr = $rootnode->getAttribute("src");
-print_r($attr);
-print "\n";
-
-echo "--------- Get Attribute Node\n";
-$attr = $rootnode->getAttributeNode("src");
-print_node($attr);
-
-echo "--------- Remove Attribute Node\n";
-$attr = $rootnode->removeAttribute("src");
-print "Removed " . $attr . " attributes.\n";
-
-echo "--------- attributes of rootnode\n";
-$attrs = $rootnode->attributes;
-print_node_list($attrs);
-
-echo "--------- children of an attribute\n";
-$children = $attrs->item(0)->childNodes;
-print_node_list($children);
-
-echo "--------- Add child to root\n";
-$myelement = new domElement("Silly", "Symphony");
-$newchild = $rootnode->appendChild($myelement);
-print_node($newchild);
-print $dom->saveXML();
-print "\n";
-
-echo "--------- Find element by tagname\n";
-echo " Using dom\n";
-$children = $dom->getElementsByTagname("Silly");
-print_node_list($children);
-
-echo " Using elem\n";
-$children = $rootnode->getElementsByTagName("Silly");
-print_node_list($children);
-
-echo "--------- Unlink Node\n";
-print_node($children->item(0));
-$rootnode->removeChild($children->item(0));
-print_node_list($rootnode->childNodes);
-print $dom->savexml();
-
-echo "--------- Find element by id\n";
-print ("Not implemented\n");
-
-echo "--------- Check various node_name return values\n";
-print ("Not needed\n");
-
-?>
diff --git a/ext/dom/examples/note-invalid.xml b/ext/dom/examples/note-invalid.xml
deleted file mode 100644
index 58d4e65044..0000000000
--- a/ext/dom/examples/note-invalid.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE note SYSTEM "note.dtd">
-<note>
-<to>PHP User Group</to>
-<from>Shane</from>
-<heading>Reminder</heading>
-<body>Don't forget the meeting tonight!</body>
-<footer>Or I'll clobber you!</footer>
-</note>
diff --git a/ext/dom/examples/note.dtd b/ext/dom/examples/note.dtd
deleted file mode 100644
index 4016eb5811..0000000000
--- a/ext/dom/examples/note.dtd
+++ /dev/null
@@ -1,6 +0,0 @@
-<?xml version="1.0" ?>
-<!ELEMENT note (to,from,heading,body)>
-<!ELEMENT to (#PCDATA)>
-<!ELEMENT from (#PCDATA)>
-<!ELEMENT heading (#PCDATA)>
-<!ELEMENT body (#PCDATA)> \ No newline at end of file
diff --git a/ext/dom/examples/note.php b/ext/dom/examples/note.php
deleted file mode 100644
index a8695f3664..0000000000
--- a/ext/dom/examples/note.php
+++ /dev/null
@@ -1,19 +0,0 @@
-<?php
-
-$dom = new domDocument;
-$dom->load('note.xml');
-if (!$dom->validate('note.dtd')) {
- print "Document note.dtd is not valid\n";
-} else {
- print "Document note.dtd is valid\n";
-}
-
-$dom = new domDocument;
-$dom->load('note-invalid.xml');
-if (!$dom->validate('note.dtd')) {
- print "Document note-invalid.xml is not valid\n";
-} else {
- print "Document note-invalid.xml is valid\n";
-}
-
-?>
diff --git a/ext/dom/examples/note.xml b/ext/dom/examples/note.xml
deleted file mode 100644
index 49614a1b52..0000000000
--- a/ext/dom/examples/note.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE note SYSTEM "note.dtd">
-<note>
-<to>PHP User Group</to>
-<from>Shane</from>
-<heading>Reminder</heading>
-<body>Don't forget the meeting tonight!</body>
-</note>
diff --git a/ext/dom/examples/relaxNG.php b/ext/dom/examples/relaxNG.php
deleted file mode 100644
index d265fd988e..0000000000
--- a/ext/dom/examples/relaxNG.php
+++ /dev/null
@@ -1,11 +0,0 @@
-<?php
-
-$dom = new domDocument;
-$dom->load('relaxNG.xml');
-if (!$dom->relaxNGValidate('relaxNG.rng')) {
- print "Document is not valid";
-} else {
- print "Document is valid";
-}
-
-?> \ No newline at end of file
diff --git a/ext/dom/examples/relaxNG.rng b/ext/dom/examples/relaxNG.rng
deleted file mode 100644
index f4357e04ef..0000000000
--- a/ext/dom/examples/relaxNG.rng
+++ /dev/null
@@ -1,11 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-<grammar xmlns="http://relaxng.org/ns/structure/1.0"
- datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
-
-<include href="relaxNG2.rng">
-<define name="TEI.prose"><ref name="INCLUDE"/></define>
-</include>
-</grammar>
-
-
-
diff --git a/ext/dom/examples/relaxNG.xml b/ext/dom/examples/relaxNG.xml
deleted file mode 100644
index 6b0cac1225..0000000000
--- a/ext/dom/examples/relaxNG.xml
+++ /dev/null
@@ -1 +0,0 @@
-<TEI.2>hello</TEI.2> \ No newline at end of file
diff --git a/ext/dom/examples/relaxNG2.rng b/ext/dom/examples/relaxNG2.rng
deleted file mode 100644
index 4adae7b151..0000000000
--- a/ext/dom/examples/relaxNG2.rng
+++ /dev/null
@@ -1,23 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<grammar xmlns="http://relaxng.org/ns/structure/1.0" xmlns:t="http://www.thaiopensource.com/ns/annotations" xmlns:a="http://relaxng.org/ns/compatibility/annotations/1.0" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
-
- <start>
- <ref name="TEI.2"/>
- </start>
- <define name="IGNORE">
- <notAllowed/>
- </define>
- <define name="INCLUDE">
- <empty/>
- </define>
-
-
- <include href="relaxNG3.rng"/>
-
- <define name="TEI.2">
- <element name="TEI.2">
- <text/>
- </element>
- </define>
-
-</grammar> \ No newline at end of file
diff --git a/ext/dom/examples/relaxNG3.rng b/ext/dom/examples/relaxNG3.rng
deleted file mode 100644
index 73e1eb6165..0000000000
--- a/ext/dom/examples/relaxNG3.rng
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<grammar xmlns="http://relaxng.org/ns/structure/1.0" xmlns:t="http://www.thaiopensource.com/ns/annotations" xmlns:a="http://relaxng.org/ns/compatibility/annotations/1.0" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
-
- <define name="TEI.prose" combine="interleave">
- <ref name="IGNORE"/>
- </define>
-
-</grammar> \ No newline at end of file
diff --git a/ext/dom/examples/shipping.php b/ext/dom/examples/shipping.php
deleted file mode 100644
index 5205fd2014..0000000000
--- a/ext/dom/examples/shipping.php
+++ /dev/null
@@ -1,11 +0,0 @@
-<?php
-
-$dom = new domDocument;
-$dom->load('shipping.xml');
-if (!$dom->schemaValidate('shipping.xsd')) {
- print "Document is not valid";
-} else {
- print "Document is valid";
-}
-
-?> \ No newline at end of file
diff --git a/ext/dom/examples/shipping.xml b/ext/dom/examples/shipping.xml
deleted file mode 100644
index dc8a09e301..0000000000
--- a/ext/dom/examples/shipping.xml
+++ /dev/null
@@ -1,21 +0,0 @@
-<?xml version="1.0"?>
-<shipOrder>
- <shipTo>
- <name>Tove Svendson</name>
- <street>Ragnhildvei 2</street>
- <address>4000 Stavanger</address>
- <country>Norway</country>
- </shipTo>
- <items>
- <item>
- <title>Empire Burlesque</title>
- <quantity>1</quantity>
- <price>10.90</price>
- </item>
- <item>
- <title>Hide your heart</title>
- <quantity>1</quantity>
- <price>9.90</price>
- </item>
- </items>
-</shipOrder> \ No newline at end of file
diff --git a/ext/dom/examples/shipping.xsd b/ext/dom/examples/shipping.xsd
deleted file mode 100644
index 8b16b7c03a..0000000000
--- a/ext/dom/examples/shipping.xsd
+++ /dev/null
@@ -1,36 +0,0 @@
-<?xml version="1.0"?>
-<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
-
- <xsd:element name="shipOrder" type="order"/>
-
- <xsd:complexType name="order">
- <xsd:all>
- <xsd:element name="shipTo" type="shipAddress"/>
- <xsd:element name="items" type="cdItems"/>
- </xsd:all>
- </xsd:complexType>
-
- <xsd:complexType name="shipAddress">
- <xsd:all>
- <xsd:element name="name" type="xsd:string"/>
- <xsd:element name="street" type="xsd:string"/>
- <xsd:element name="address" type="xsd:string"/>
- <xsd:element name="country" type="xsd:string"/>
- </xsd:all>
- </xsd:complexType>
-
- <xsd:complexType name="cdItems">
- <xsd:sequence>
- <xsd:element name="item" type="cdItem" maxOccurs="unbounded" minOccurs="1"/>
- </xsd:sequence>
- </xsd:complexType>
-
- <xsd:complexType name="cdItem">
- <xsd:all>
- <xsd:element name="title" type="xsd:string"/>
- <xsd:element name="quantity" type="xsd:positiveInteger"/>
- <xsd:element name="price" type="xsd:decimal"/>
- </xsd:all>
- </xsd:complexType>
-
-</xsd:schema> \ No newline at end of file
diff --git a/ext/dom/namednodemap.c b/ext/dom/namednodemap.c
deleted file mode 100644
index 2bc585f018..0000000000
--- a/ext/dom/namednodemap.c
+++ /dev/null
@@ -1,288 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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. |
- +----------------------------------------------------------------------+
- | Authors: Christian Stocker <chregu@php.net> |
- | Rob Richards <rrichards@php.net> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "php.h"
-#if HAVE_LIBXML && HAVE_DOM
-#include "php_dom.h"
-
-
-/*
-* class DOMNamedNodeMap
-*
-* URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-1780488922
-* Since:
-*/
-
-zend_function_entry php_dom_namednodemap_class_functions[] = {
- PHP_FALIAS(getNamedItem, dom_namednodemap_get_named_item, NULL)
- PHP_FALIAS(setNamedItem, dom_namednodemap_set_named_item, NULL)
- PHP_FALIAS(removeNamedItem, dom_namednodemap_remove_named_item, NULL)
- PHP_FALIAS(item, dom_namednodemap_item, NULL)
- PHP_FALIAS(getNamedItemNS, dom_namednodemap_get_named_item_ns, NULL)
- PHP_FALIAS(setNamedItemNS, dom_namednodemap_set_named_item_ns, NULL)
- PHP_FALIAS(removeNamedItemNS, dom_namednodemap_remove_named_item_ns, NULL)
- {NULL, NULL, NULL}
-};
-
-/* {{{ proto length int
-readonly=yes
-URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-6D0FB19E
-Since:
-*/
-int dom_namednodemap_length_read(dom_object *obj, zval **retval TSRMLS_DC)
-{
- dom_nnodemap_object *objmap;
- xmlAttrPtr curnode;
- xmlNodePtr nodep;
- int count = 0;
-
- objmap = (dom_nnodemap_object *)obj->ptr;
-
- if (objmap != NULL) {
- if (objmap->ht) {
- count = xmlHashSize(objmap->ht);
- } else {
- nodep = dom_object_get_node(objmap->baseobj);
- if (nodep) {
- curnode = nodep->properties;
- if (curnode) {
- count++;
- while (curnode->next != NULL) {
- count++;
- curnode = curnode->next;
- }
- }
- }
- }
- }
-
- MAKE_STD_ZVAL(*retval);
- ZVAL_LONG(*retval, count);
- return SUCCESS;
-}
-
-/* }}} */
-
-
-
-
-/* {{{ proto DOMNode dom_namednodemap_get_named_item(string name);
-URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-1074577549
-Since:
-*/
-PHP_FUNCTION(dom_namednodemap_get_named_item)
-{
- zval *id, *rv = NULL;
- int ret, namedlen=0;
- dom_object *intern;
- xmlNodePtr itemnode = NULL;
- char *named;
-
- dom_nnodemap_object *objmap;
- xmlNodePtr nodep;
- xmlNotation *notep = NULL;
-
- if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Os", &id, dom_namednodemap_class_entry, &named, &namedlen) == FAILURE) {
- return;
- }
-
- intern = (dom_object *)zend_object_store_get_object(id TSRMLS_CC);
-
- objmap = (dom_nnodemap_object *)intern->ptr;
-
- if (objmap != NULL) {
- if (objmap->ht) {
- if (objmap->nodetype == XML_ENTITY_NODE) {
- itemnode = (xmlNodePtr)xmlHashLookup(objmap->ht, named);
- } else {
- notep = (xmlNotation *)xmlHashLookup(objmap->ht, named);
- itemnode = create_notation(notep->name, notep->PublicID, notep->SystemID);
- }
- } else {
- nodep = dom_object_get_node(objmap->baseobj);
- if (nodep) {
- itemnode = (xmlNodePtr)xmlHasProp(nodep, named);
- }
- }
- }
-
- if (itemnode) {
- DOM_RET_OBJ(rv, itemnode, &ret, objmap->baseobj);
- return;
- } else {
- RETVAL_NULL();
- }
-}
-/* }}} end dom_namednodemap_get_named_item */
-
-
-/* {{{ proto DOMNode dom_namednodemap_set_named_item(DOMNode arg);
-URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-1025163788
-Since:
-*/
-PHP_FUNCTION(dom_namednodemap_set_named_item)
-{
- DOM_NOT_IMPLEMENTED();
-}
-/* }}} end dom_namednodemap_set_named_item */
-
-
-/* {{{ proto DOMNode dom_namednodemap_remove_named_item(string name);
-URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-D58B193
-Since:
-*/
-PHP_FUNCTION(dom_namednodemap_remove_named_item)
-{
- DOM_NOT_IMPLEMENTED();
-}
-/* }}} end dom_namednodemap_remove_named_item */
-
-
-/* {{{ proto DOMNode dom_namednodemap_item(int index);
-URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-349467F9
-Since:
-*/
-PHP_FUNCTION(dom_namednodemap_item)
-{
- zval *id, *rv = NULL;
- int index, ret;
- dom_object *intern;
- xmlNodePtr itemnode = NULL;
-
- dom_nnodemap_object *objmap;
- xmlNodePtr nodep, curnode;
- int count;
-
- if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Ol", &id, dom_namednodemap_class_entry, &index) == FAILURE) {
- return;
- }
- if (index >= 0) {
- intern = (dom_object *)zend_object_store_get_object(id TSRMLS_CC);
-
- objmap = (dom_nnodemap_object *)intern->ptr;
-
- if (objmap != NULL) {
- if (objmap->ht) {
- if (objmap->nodetype == XML_ENTITY_NODE) {
- itemnode = php_dom_libxml_hash_iter(objmap->ht, index);
- } else {
- itemnode = php_dom_libxml_notation_iter(objmap->ht, index);
- }
- } else {
- nodep = dom_object_get_node(objmap->baseobj);
- if (nodep) {
- curnode = (xmlNodePtr)nodep->properties;
- count = 0;
- while (count < index && curnode != NULL) {
- count++;
- curnode = (xmlNodePtr)curnode->next;
- }
- itemnode = curnode;
- }
- }
- }
-
- if (itemnode) {
- DOM_RET_OBJ(rv, itemnode, &ret, objmap->baseobj);
- return;
- }
- }
-
- RETVAL_NULL();
-}
-/* }}} end dom_namednodemap_item */
-
-
-/* {{{ proto DOMNode dom_namednodemap_get_named_item_ns(string namespaceURI, string localName);
-URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-getNamedItemNS
-Since: DOM Level 2
-*/
-PHP_FUNCTION(dom_namednodemap_get_named_item_ns)
-{
- zval *id, *rv = NULL;
- int ret, namedlen=0, urilen=0;
- dom_object *intern;
- xmlNodePtr itemnode = NULL;
- char *uri, *named;
-
- dom_nnodemap_object *objmap;
- xmlNodePtr nodep;
- xmlNotation *notep = NULL;
-
- if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Os!s", &id, dom_namednodemap_class_entry, &uri, &urilen, &named, &namedlen) == FAILURE) {
- return;
- }
-
- intern = (dom_object *)zend_object_store_get_object(id TSRMLS_CC);
-
- objmap = (dom_nnodemap_object *)intern->ptr;
-
- if (objmap != NULL) {
- if (objmap->ht) {
- if (objmap->nodetype == XML_ENTITY_NODE) {
- itemnode = (xmlNodePtr)xmlHashLookup(objmap->ht, named);
- } else {
- notep = (xmlNotation *)xmlHashLookup(objmap->ht, named);
- itemnode = create_notation(notep->name, notep->PublicID, notep->SystemID);
- }
- } else {
- nodep = dom_object_get_node(objmap->baseobj);
- if (nodep) {
- itemnode = (xmlNodePtr)xmlHasNsProp(nodep, named, uri);
- }
- }
- }
-
- if (itemnode) {
- DOM_RET_OBJ(rv, itemnode, &ret, objmap->baseobj);
- return;
- } else {
- RETVAL_NULL();
- }
-}
-/* }}} end dom_namednodemap_get_named_item_ns */
-
-
-/* {{{ proto DOMNode dom_namednodemap_set_named_item_ns(DOMNode arg);
-URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-setNamedItemNS
-Since: DOM Level 2
-*/
-PHP_FUNCTION(dom_namednodemap_set_named_item_ns)
-{
- DOM_NOT_IMPLEMENTED();
-}
-/* }}} end dom_namednodemap_set_named_item_ns */
-
-
-/* {{{ proto DOMNode dom_namednodemap_remove_named_item_ns(string namespaceURI, string localName);
-URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-removeNamedItemNS
-Since: DOM Level 2
-*/
-PHP_FUNCTION(dom_namednodemap_remove_named_item_ns)
-{
- DOM_NOT_IMPLEMENTED();
-}
-/* }}} end dom_namednodemap_remove_named_item_ns */
-#endif
diff --git a/ext/dom/namelist.c b/ext/dom/namelist.c
deleted file mode 100644
index c4462ef31b..0000000000
--- a/ext/dom/namelist.c
+++ /dev/null
@@ -1,81 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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. |
- +----------------------------------------------------------------------+
- | Authors: Christian Stocker <chregu@php.net> |
- | Rob Richards <rrichards@php.net> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "php.h"
-#if HAVE_LIBXML && HAVE_DOM
-#include "php_dom.h"
-
-
-/*
-* class DOMNameList
-*
-* URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#NameList
-* Since: DOM Level 3
-*/
-
-zend_function_entry php_dom_namelist_class_functions[] = {
- PHP_FALIAS(getName, dom_namelist_get_name, NULL)
- PHP_FALIAS(getNamespaceURI, dom_namelist_get_namespace_uri, NULL)
- {NULL, NULL, NULL}
-};
-
-/* {{{ proto length int
-readonly=yes
-URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#NameList-length
-Since:
-*/
-int dom_namelist_length_read(dom_object *obj, zval **retval TSRMLS_DC)
-{
- ALLOC_ZVAL(*retval);
- ZVAL_STRING(*retval, "TEST", 1);
- return SUCCESS;
-}
-
-/* }}} */
-
-
-
-
-/* {{{ proto string dom_namelist_get_name(int index);
-URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#NameList-getName
-Since:
-*/
-PHP_FUNCTION(dom_namelist_get_name)
-{
- DOM_NOT_IMPLEMENTED();
-}
-/* }}} end dom_namelist_get_name */
-
-
-/* {{{ proto string dom_namelist_get_namespace_uri(int index);
-URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#NameList-getNamespaceURI
-Since:
-*/
-PHP_FUNCTION(dom_namelist_get_namespace_uri)
-{
- DOM_NOT_IMPLEMENTED();
-}
-/* }}} end dom_namelist_get_namespace_uri */
-#endif
diff --git a/ext/dom/node.c b/ext/dom/node.c
deleted file mode 100644
index 26c860ffc0..0000000000
--- a/ext/dom/node.c
+++ /dev/null
@@ -1,1691 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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. |
- +----------------------------------------------------------------------+
- | Authors: Christian Stocker <chregu@php.net> |
- | Rob Richards <rrichards@php.net> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "php.h"
-#if HAVE_LIBXML && HAVE_DOM
-#include "php_dom.h"
-
-/*
-* class DOMNode
-*
-* URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-1950641247
-* Since:
-*/
-
-zend_function_entry php_dom_node_class_functions[] = {
- PHP_FALIAS(insertBefore, dom_node_insert_before, NULL)
- PHP_FALIAS(replaceChild, dom_node_replace_child, NULL)
- PHP_FALIAS(removeChild, dom_node_remove_child, NULL)
- PHP_FALIAS(appendChild, dom_node_append_child, NULL)
- PHP_FALIAS(hasChildNodes, dom_node_has_child_nodes, NULL)
- PHP_FALIAS(cloneNode, dom_node_clone_node, NULL)
- PHP_FALIAS(normalize, dom_node_normalize, NULL)
- PHP_FALIAS(isSupported, dom_node_is_supported, NULL)
- PHP_FALIAS(hasAttributes, dom_node_has_attributes, NULL)
- PHP_FALIAS(compareDocumentPosition, dom_node_compare_document_position, NULL)
- PHP_FALIAS(isSameNode, dom_node_is_same_node, NULL)
- PHP_FALIAS(lookupPrefix, dom_node_lookup_prefix, NULL)
- PHP_FALIAS(isDefaultNamespace, dom_node_is_default_namespace, NULL)
- PHP_FALIAS(lookupNamespaceUri, dom_node_lookup_namespace_uri, NULL)
- PHP_FALIAS(isEqualNode, dom_node_is_equal_node, NULL)
- PHP_FALIAS(getFeature, dom_node_get_feature, NULL)
- PHP_FALIAS(setUserData, dom_node_set_user_data, NULL)
- PHP_FALIAS(getUserData, dom_node_get_user_data, NULL)
- {NULL, NULL, NULL}
-};
-
-static void dom_reconcile_ns(xmlDocPtr doc, xmlNodePtr nodep) {
- xmlNsPtr nsptr;
-
- if (nodep->type == XML_ELEMENT_NODE) {
- /* Following if block primarily used for inserting nodes created via createElementNS */
- if (nodep->nsDef != NULL && nodep->nsDef->href != NULL) {
- if((nsptr = xmlSearchNsByHref(doc, nodep->parent, nodep->nsDef->href)) &&
- (nodep->nsDef->prefix == NULL || xmlStrEqual(nsptr->prefix, nodep->nsDef->prefix))) {
- dom_set_old_ns(doc, nodep->nsDef);
- nodep->nsDef = NULL;
- }
- }
- xmlReconciliateNs(doc, nodep);
- }
-}
-
-/* {{{ proto nodeName string
-readonly=yes
-URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-F68D095
-Since:
-*/
-int dom_node_node_name_read(dom_object *obj, zval **retval TSRMLS_DC)
-{
- xmlNode *nodep;
- xmlNsPtr ns;
- char *str = NULL;
- xmlChar *qname = NULL;
-
- nodep = dom_object_get_node(obj);
-
- if (nodep == NULL) {
- php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC);
- return FAILURE;
- }
-
- switch (nodep->type) {
- case XML_ATTRIBUTE_NODE:
- case XML_ELEMENT_NODE:
- ns = nodep->ns;
- if (ns != NULL && ns->prefix) {
- qname = xmlStrdup(ns->prefix);
- qname = xmlStrcat(qname, ":");
- qname = xmlStrcat(qname, nodep->name);
- str = qname;
- } else {
- str = (char *) nodep->name;
- }
- break;
- case XML_NAMESPACE_DECL:
- ns = nodep->ns;
- if (ns != NULL && ns->prefix) {
- qname = xmlStrdup("xmlns");
- qname = xmlStrcat(qname, ":");
- qname = xmlStrcat(qname, nodep->name);
- str = qname;
- } else {
- str = (char *) nodep->name;
- }
- break;
- case XML_DOCUMENT_TYPE_NODE:
- case XML_DTD_NODE:
- case XML_PI_NODE:
- case XML_ENTITY_DECL:
- case XML_ENTITY_REF_NODE:
- case XML_NOTATION_NODE:
- str = (char *) nodep->name;
- break;
- case XML_CDATA_SECTION_NODE:
- str = "#cdata-section";
- break;
- case XML_COMMENT_NODE:
- str = "#comment";
- break;
- case XML_HTML_DOCUMENT_NODE:
- case XML_DOCUMENT_NODE:
- str = "#document";
- break;
- case XML_DOCUMENT_FRAG_NODE:
- str = "#document-fragment";
- break;
- case XML_TEXT_NODE:
- str = "#text";
- break;
- default:
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid Node Type");
- return FAILURE;
- }
-
- ALLOC_ZVAL(*retval);
-
- if(str != NULL) {
- ZVAL_STRING(*retval, str, 1);
- } else {
- ZVAL_EMPTY_STRING(*retval);
- }
-
- if (qname != NULL) {
- xmlFree(qname);
- }
-
- return SUCCESS;
-
-}
-
-/* }}} */
-
-
-
-/* {{{ proto nodeValue string
-readonly=no
-URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-F68D080
-Since:
-*/
-int dom_node_node_value_read(dom_object *obj, zval **retval TSRMLS_DC)
-{
- xmlNode *nodep;
- char *str = NULL;
-
- nodep = dom_object_get_node(obj);
-
- if (nodep == NULL) {
- php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC);
- return FAILURE;
- }
-
- /* Access to Element node is implemented as a convience method */
- switch (nodep->type) {
- case XML_ATTRIBUTE_NODE:
- case XML_TEXT_NODE:
- case XML_ELEMENT_NODE:
- case XML_COMMENT_NODE:
- case XML_CDATA_SECTION_NODE:
- case XML_PI_NODE:
- str = xmlNodeGetContent(nodep);
- break;
- case XML_NAMESPACE_DECL:
- str = xmlNodeGetContent(nodep->children);
- break;
- default:
- str = NULL;
- break;
- }
-
- ALLOC_ZVAL(*retval);
-
- if(str != NULL) {
- ZVAL_STRING(*retval, str, 1);
- xmlFree(str);
- } else {
- ZVAL_NULL(*retval);
- }
-
-
- return SUCCESS;
-
-}
-
-int dom_node_node_value_write(dom_object *obj, zval *newval TSRMLS_DC)
-{
- xmlNode *nodep;
- zval value_copy;
-
- nodep = dom_object_get_node(obj);
-
- if (nodep == NULL) {
- php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC);
- return FAILURE;
- }
-
- /* Access to Element node is implemented as a convience method */
- switch (nodep->type) {
- case XML_ELEMENT_NODE:
- case XML_ATTRIBUTE_NODE:
- if (nodep->children) {
- node_list_unlink(nodep->children TSRMLS_CC);
- }
- case XML_TEXT_NODE:
- case XML_COMMENT_NODE:
- case XML_CDATA_SECTION_NODE:
- case XML_PI_NODE:
- if (newval->type != IS_STRING) {
- if(newval->refcount > 1) {
- value_copy = *newval;
- zval_copy_ctor(&value_copy);
- newval = &value_copy;
- }
- convert_to_string(newval);
- }
- xmlNodeSetContentLen(nodep, Z_STRVAL_P(newval), Z_STRLEN_P(newval) + 1);
- if (newval == &value_copy) {
- zval_dtor(newval);
- }
- break;
- default:
- break;
- }
-
- return SUCCESS;
-}
-
-/* }}} */
-
-
-
-/* {{{ proto nodeType int
-readonly=yes
-URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-111237558
-Since:
-*/
-int dom_node_node_type_read(dom_object *obj, zval **retval TSRMLS_DC)
-{
- xmlNode *nodep;
-
- nodep = dom_object_get_node(obj);
-
- if (nodep == NULL) {
- php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC);
- return FAILURE;
- }
-
- ALLOC_ZVAL(*retval);
-
- /* Specs dictate that they are both type XML_DOCUMENT_TYPE_NODE */
- if (nodep->type == XML_DTD_NODE) {
- ZVAL_LONG(*retval, XML_DOCUMENT_TYPE_NODE);
- } else {
- ZVAL_LONG(*retval, nodep->type);
- }
-
- return SUCCESS;
-}
-
-/* }}} */
-
-
-
-/* {{{ proto parentNode DomNode
-readonly=yes
-URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-1060184317
-Since:
-*/
-int dom_node_parent_node_read(dom_object *obj, zval **retval TSRMLS_DC)
-{
- xmlNode *nodep, *nodeparent;
- int ret;
-
- nodep = dom_object_get_node(obj);
-
- if (nodep == NULL) {
- php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC);
- return FAILURE;
- }
-
- nodeparent = nodep->parent;
- if (!nodeparent) {
- return FAILURE;
- }
-
- ALLOC_ZVAL(*retval);
-
- if (NULL == (*retval = php_dom_create_object(nodeparent, &ret, NULL, *retval, obj TSRMLS_CC))) {
- php_error(E_WARNING, "Cannot create required DOM object");
- return FAILURE;
- }
- return SUCCESS;
-}
-
-/* }}} */
-
-
-
-/* {{{ proto childNodes DomNodeList
-readonly=yes
-URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-1451460987
-Since:
-*/
-int dom_node_child_nodes_read(dom_object *obj, zval **retval TSRMLS_DC)
-{
- xmlNode *nodep;
- dom_object *intern;
-
- nodep = dom_object_get_node(obj);
-
- if (nodep == NULL) {
- php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC);
- return FAILURE;
- }
-
- ALLOC_ZVAL(*retval);
-
- if (dom_node_children_valid(nodep) == FAILURE) {
- ZVAL_NULL(*retval);
- } else {
- php_dom_create_interator(*retval, DOM_NODELIST TSRMLS_CC);
- intern = (dom_object *)zend_objects_get_address(*retval TSRMLS_CC);
- dom_namednode_iter(obj, XML_ELEMENT_NODE, intern, NULL, NULL, NULL TSRMLS_CC);
- }
-
- return SUCCESS;
-}
-
-/* }}} */
-
-
-
-/* {{{ proto firstChild DomNode
-readonly=yes
-URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-169727388
-Since:
-*/
-int dom_node_first_child_read(dom_object *obj, zval **retval TSRMLS_DC)
-{
- xmlNode *nodep, *first = NULL;
- int ret;
-
- nodep = dom_object_get_node(obj);
-
- if (nodep == NULL) {
- php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC);
- return FAILURE;
- }
-
- if (dom_node_children_valid(nodep) == SUCCESS) {
- first = nodep->children;
- }
-
- if (!first) {
- return FAILURE;
- }
-
- ALLOC_ZVAL(*retval);
-
- if (NULL == (*retval = php_dom_create_object(first, &ret, NULL, *retval, obj TSRMLS_CC))) {
- php_error(E_WARNING, "Cannot create required DOM object");
- return FAILURE;
- }
- return SUCCESS;
-}
-
-/* }}} */
-
-
-
-/* {{{ proto lastChild DomNode
-readonly=yes
-URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-61AD09FB
-Since:
-*/
-int dom_node_last_child_read(dom_object *obj, zval **retval TSRMLS_DC)
-{
- xmlNode *nodep, *last = NULL;
- int ret;
-
- nodep = dom_object_get_node(obj);
-
- if (nodep == NULL) {
- php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC);
- return FAILURE;
- }
-
- if (dom_node_children_valid(nodep) == SUCCESS) {
- last = nodep->last;
- }
-
- if (!last) {
- return FAILURE;
- }
-
- ALLOC_ZVAL(*retval);
-
- if (NULL == (*retval = php_dom_create_object(last, &ret, NULL, *retval, obj TSRMLS_CC))) {
- php_error(E_WARNING, "Cannot create required DOM object");
- return FAILURE;
- }
- return SUCCESS;
-}
-
-/* }}} */
-
-
-
-/* {{{ proto previousSibling DomNode
-readonly=yes
-URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-640FB3C8
-Since:
-*/
-int dom_node_previous_sibling_read(dom_object *obj, zval **retval TSRMLS_DC)
-{
- xmlNode *nodep, *prevsib;
- int ret;
-
- nodep = dom_object_get_node(obj);
-
- if (nodep == NULL) {
- php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC);
- return FAILURE;
- }
-
- prevsib = nodep->prev;
- if (!prevsib) {
- return FAILURE;
- }
-
- ALLOC_ZVAL(*retval);
-
- if (NULL == (*retval = php_dom_create_object(prevsib, &ret, NULL, *retval, obj TSRMLS_CC))) {
- php_error(E_WARNING, "Cannot create required DOM object");
- return FAILURE;
- }
- return SUCCESS;
-}
-
-/* }}} */
-
-
-
-/* {{{ proto nextSibling DomNode
-readonly=yes
-URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-6AC54C2F
-Since:
-*/
-int dom_node_next_sibling_read(dom_object *obj, zval **retval TSRMLS_DC)
-{
- xmlNode *nodep, *nextsib;
- int ret;
-
- nodep = dom_object_get_node(obj);
-
- if (nodep == NULL) {
- php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC);
- return FAILURE;
- }
-
- nextsib = nodep->next;
- if (!nextsib) {
- return FAILURE;
- }
-
- ALLOC_ZVAL(*retval);
-
- if (NULL == (*retval = php_dom_create_object(nextsib, &ret, NULL, *retval, obj TSRMLS_CC))) {
- php_error(E_WARNING, "Cannot create required DOM object");
- return FAILURE;
- }
- return SUCCESS;
-}
-
-/* }}} */
-
-
-
-/* {{{ proto attributes DomNamedNodeMap
-readonly=yes
-URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-84CF096
-Since:
-*/
-int dom_node_attributes_read(dom_object *obj, zval **retval TSRMLS_DC)
-{
- xmlNode *nodep;
- dom_object *intern;
-
- nodep = dom_object_get_node(obj);
-
- if (nodep == NULL) {
- php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC);
- return FAILURE;
- }
-
- ALLOC_ZVAL(*retval);
-
- if (nodep->type == XML_ELEMENT_NODE) {
- php_dom_create_interator(*retval, DOM_NAMEDNODEMAP TSRMLS_CC);
- intern = (dom_object *)zend_objects_get_address(*retval TSRMLS_CC);
- dom_namednode_iter(obj, XML_ATTRIBUTE_NODE, intern, NULL, NULL, NULL TSRMLS_CC);
- } else {
- ZVAL_NULL(*retval);
- }
-
- return SUCCESS;
-}
-
-/* }}} */
-
-
-
-/* {{{ proto ownerDocument DomDocument
-readonly=yes
-URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-node-ownerDoc
-Since:
-*/
-int dom_node_owner_document_read(dom_object *obj, zval **retval TSRMLS_DC)
-{
- xmlNode *nodep;
- xmlDocPtr docp;
- int ret;
-
- nodep = dom_object_get_node(obj);
-
- if (nodep == NULL) {
- php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC);
- return FAILURE;
- }
-
- if (nodep->type == XML_DOCUMENT_NODE || nodep->type == XML_HTML_DOCUMENT_NODE) {
- ALLOC_ZVAL(*retval);
- ZVAL_NULL(*retval);
- return SUCCESS;
- }
-
- docp = nodep->doc;
- if (!docp) {
- return FAILURE;
- }
-
- ALLOC_ZVAL(*retval);
-
- if (NULL == (*retval = php_dom_create_object((xmlNodePtr) docp, &ret, NULL, *retval, obj TSRMLS_CC))) {
- php_error(E_WARNING, "Cannot create required DOM object");
- return FAILURE;
- }
- return SUCCESS;
-}
-
-/* }}} */
-
-
-
-/* {{{ proto namespaceUri string
-readonly=yes
-URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-NodeNSname
-Since: DOM Level 2
-*/
-int dom_node_namespace_uri_read(dom_object *obj, zval **retval TSRMLS_DC)
-{
- xmlNode *nodep;
- char *str = NULL;
-
- nodep = dom_object_get_node(obj);
-
- if (nodep == NULL) {
- php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC);
- return FAILURE;
- }
-
- switch (nodep->type) {
- case XML_ELEMENT_NODE:
- case XML_ATTRIBUTE_NODE:
- case XML_NAMESPACE_DECL:
- if (nodep->ns != NULL) {
- str = (char *) nodep->ns->href;
- }
- break;
- default:
- str = NULL;
- break;
- }
-
- ALLOC_ZVAL(*retval);
-
- if(str != NULL) {
- ZVAL_STRING(*retval, str, 1);
- } else {
- ZVAL_NULL(*retval);
- }
-
- return SUCCESS;
-}
-
-/* }}} */
-
-
-
-/* {{{ proto prefix string
-readonly=no
-URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-NodeNSPrefix
-Since: DOM Level 2
-*/
-int dom_node_prefix_read(dom_object *obj, zval **retval TSRMLS_DC)
-{
- xmlNode *nodep;
- xmlNsPtr ns;
- char *str = NULL;
-
- nodep = dom_object_get_node(obj);
-
- if (nodep == NULL) {
- php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC);
- return FAILURE;
- }
-
- switch (nodep->type) {
- case XML_ELEMENT_NODE:
- case XML_ATTRIBUTE_NODE:
- case XML_NAMESPACE_DECL:
- ns = nodep->ns;
- if (ns != NULL && ns->prefix) {
- str = (char *) ns->prefix;
- }
- break;
- default:
- str = NULL;
- break;
- }
-
- ALLOC_ZVAL(*retval);
-
- if (str == NULL) {
- ZVAL_EMPTY_STRING(*retval);
- } else {
- ZVAL_STRING(*retval, str, 1);
- }
- return SUCCESS;
-
-}
-
-int dom_node_prefix_write(dom_object *obj, zval *newval TSRMLS_DC)
-{
- zval value_copy;
- xmlNode *nodep, *nsnode = NULL;
- xmlNsPtr ns = NULL, curns;
- char *strURI;
- char *prefix;
-
- nodep = dom_object_get_node(obj);
-
- if (nodep == NULL) {
- php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC);
- return FAILURE;
- }
-
- switch (nodep->type) {
- case XML_ELEMENT_NODE:
- nsnode = nodep;
- case XML_ATTRIBUTE_NODE:
- if (nsnode == NULL) {
- nsnode = nodep->parent;
- if (nsnode == NULL) {
- nsnode = xmlDocGetRootElement(nodep->doc);
- }
- }
- if (newval->type != IS_STRING) {
- if(newval->refcount > 1) {
- value_copy = *newval;
- zval_copy_ctor(&value_copy);
- newval = &value_copy;
- }
- convert_to_string(newval);
- }
- prefix = Z_STRVAL_P(newval);
- if (nsnode && nodep->ns != NULL && !xmlStrEqual(nodep->ns->prefix, (xmlChar *)prefix)) {
- strURI = (char *) nodep->ns->href;
- if (strURI == NULL ||
- (!strcmp (prefix, "xml") && strcmp(strURI, XML_XML_NAMESPACE)) ||
- (nodep->type == XML_ATTRIBUTE_NODE && !strcmp (prefix, "xmlns") &&
- strcmp (strURI, DOM_XMLNS_NAMESPACE)) ||
- (nodep->type == XML_ATTRIBUTE_NODE && !strcmp (nodep->name, "xmlns"))) {
- ns = NULL;
- } else {
- curns = nsnode->nsDef;
- while (curns != NULL) {
- if (xmlStrEqual((xmlChar *)prefix, curns->prefix) && xmlStrEqual(nodep->ns->href, curns->href)) {
- ns = curns;
- break;
- }
- curns = curns->next;
- }
- if (ns == NULL) {
- ns = xmlNewNs(nsnode, nodep->ns->href, (xmlChar *)prefix);
- }
- }
-
- if (ns == NULL) {
- if (newval == &value_copy) {
- zval_dtor(newval);
- }
- php_dom_throw_error(NAMESPACE_ERR, dom_get_strict_error(obj->document) TSRMLS_CC);
- return FAILURE;
- }
-
- xmlSetNs(nodep, ns);
- }
- if (newval == &value_copy) {
- zval_dtor(newval);
- }
- break;
- default:
- break;
- }
-
- return SUCCESS;
-}
-
-/* }}} */
-
-
-
-/* {{{ proto localName string
-readonly=yes
-URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-NodeNSLocalN
-Since: DOM Level 2
-*/
-int dom_node_local_name_read(dom_object *obj, zval **retval TSRMLS_DC)
-{
- xmlNode *nodep;
-
- nodep = dom_object_get_node(obj);
-
- if (nodep == NULL) {
- php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC);
- return FAILURE;
- }
-
- ALLOC_ZVAL(*retval);
-
- if (nodep->type == XML_ELEMENT_NODE || nodep->type == XML_ATTRIBUTE_NODE || nodep->type == XML_NAMESPACE_DECL) {
- ZVAL_STRING(*retval, (char *) (nodep->name), 1);
- } else {
- ZVAL_NULL(*retval);
- }
-
- return SUCCESS;
-}
-
-/* }}} */
-
-
-
-/* {{{ proto baseURI string
-readonly=yes
-URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#Node3-baseURI
-Since: DOM Level 3
-*/
-int dom_node_base_uri_read(dom_object *obj, zval **retval TSRMLS_DC)
-{
- xmlNode *nodep;
- xmlChar *baseuri;
-
- nodep = dom_object_get_node(obj);
-
- if (nodep == NULL) {
- php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC);
- return FAILURE;
- }
-
- ALLOC_ZVAL(*retval);
-
- baseuri = xmlNodeGetBase(nodep->doc, nodep);
- if (baseuri) {
- ZVAL_STRING(*retval, (char *) (baseuri), 1);
- xmlFree(baseuri);
- } else {
- ZVAL_NULL(*retval);
- }
-
- return SUCCESS;
-}
-
-/* }}} */
-
-
-
-/* {{{ proto textContent string
-readonly=no
-URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#Node3-textContent
-Since: DOM Level 3
-*/
-int dom_node_text_content_read(dom_object *obj, zval **retval TSRMLS_DC)
-{
- xmlNode *nodep;
- char *str = NULL;
-
- nodep = dom_object_get_node(obj);
-
- if (nodep == NULL) {
- php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC);
- return FAILURE;
- }
-
- str = xmlNodeGetContent(nodep);
-
- ALLOC_ZVAL(*retval);
-
- if(str != NULL) {
- ZVAL_STRING(*retval, str, 1);
- } else {
- ZVAL_EMPTY_STRING(*retval);
- }
- xmlFree(str);
-
- return SUCCESS;
-}
-
-int dom_node_text_content_write(dom_object *obj, zval *newval TSRMLS_DC)
-{
- return SUCCESS;
-}
-
-/* }}} */
-
-
-
-
-/* {{{ proto domnode dom_node_insert_before(DomNode newChild, DomNode refChild);
-URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-952280727
-Since:
-*/
-PHP_FUNCTION(dom_node_insert_before)
-{
- zval *id, *node, *ref = NULL, *rv = NULL;
- xmlNodePtr child, new_child, parentp, refp;
- dom_object *intern, *childobj, *refpobj;
- int ret, stricterror;
-
- if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "OO|O!", &id, dom_node_class_entry, &node, dom_node_class_entry, &ref, dom_node_class_entry) == FAILURE) {
- return;
- }
-
- DOM_GET_OBJ(parentp, id, xmlNodePtr, intern);
-
- if (dom_node_children_valid(parentp) == FAILURE) {
- RETURN_FALSE;
- }
-
- DOM_GET_OBJ(child, node, xmlNodePtr, childobj);
-
- new_child = NULL;
-
- stricterror = dom_get_strict_error(intern->document);
-
- if (dom_node_is_read_only(parentp) == SUCCESS ||
- (child->parent != NULL && dom_node_is_read_only(child->parent) == SUCCESS)) {
- php_dom_throw_error(NO_MODIFICATION_ALLOWED_ERR, stricterror TSRMLS_CC);
- RETURN_FALSE;
- }
-
- if (dom_hierarchy(parentp, child) == FAILURE) {
- php_dom_throw_error(HIERARCHY_REQUEST_ERR, stricterror TSRMLS_CC);
- RETURN_FALSE;
- }
-
- if (child->doc != parentp->doc && child->doc != NULL) {
- php_dom_throw_error(WRONG_DOCUMENT_ERR, stricterror TSRMLS_CC);
- RETURN_FALSE;
- }
-
- if (child->type == XML_DOCUMENT_FRAG_NODE && child->children == NULL) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Document Fragment is empty");
- RETURN_FALSE;
- }
-
- if (child->doc == NULL && parentp->doc != NULL) {
- childobj->document = intern->document;
- php_libxml_increment_doc_ref((php_libxml_node_object *)childobj, NULL TSRMLS_CC);
- }
-
- if (ref != NULL) {
- DOM_GET_OBJ(refp, ref, xmlNodePtr, refpobj);
- if (refp->parent != parentp) {
- php_dom_throw_error(NOT_FOUND_ERR, stricterror TSRMLS_CC);
- RETURN_FALSE;
- }
-
- if (child->parent != NULL) {
- xmlUnlinkNode(child);
- }
-
- if (child->type == XML_TEXT_NODE && (refp->type == XML_TEXT_NODE ||
- (refp->prev != NULL && refp->prev->type == XML_TEXT_NODE))) {
- if (child->doc == NULL) {
- xmlSetTreeDoc(child, parentp->doc);
- }
- new_child = child;
- new_child->parent = refp->parent;
- new_child->next = refp;
- new_child->prev = refp->prev;
- refp->prev = new_child;
- if (new_child->prev != NULL) {
- new_child->prev->next = new_child;
- }
- if (new_child->parent != NULL) {
- if (new_child->parent->children == refp) {
- new_child->parent->children = new_child;
- }
- }
-
- } else if (child->type == XML_ATTRIBUTE_NODE) {
- xmlAttrPtr lastattr;
-
- if (child->ns == NULL)
- lastattr = xmlHasProp(refp->parent, child->name);
- else
- lastattr = xmlHasNsProp(refp->parent, child->name, child->ns->href);
- if (lastattr != NULL) {
- if (lastattr != (xmlAttrPtr) child) {
- xmlUnlinkNode((xmlNodePtr) lastattr);
- php_libxml_node_free_resource((xmlNodePtr) lastattr TSRMLS_CC);
- } else {
- DOM_RET_OBJ(rv, child, &ret, intern);
- return;
- }
- }
- } else if (child->type == XML_DOCUMENT_FRAG_NODE) {
- xmlNodePtr fragment;
-
- fragment = child;
- new_child = child->children;
- child = new_child;
- while (child->next != NULL) {
- child->parent = parentp;
- if (child->doc != parentp->doc) {
- xmlSetTreeDoc(child, parentp->doc);
- }
- child = child->next;
- }
- child->parent = parentp;
- if (child->doc != parentp->doc) {
- xmlSetTreeDoc(child, parentp->doc);
- }
-
- if (refp->prev != NULL) {
- refp->prev->next = new_child;
- } else {
- parentp->children = new_child;
- }
- new_child->prev = refp->prev;
- refp->prev = child;
- child->next = refp;
- fragment->children = NULL;
- }
-
- if (new_child == NULL) {
- new_child = xmlAddPrevSibling(refp, child);
- }
- } else {
- if (child->parent == parentp){
- xmlUnlinkNode(child);
- }
- if (child->type == XML_TEXT_NODE && parentp->last != NULL && parentp->last->type == XML_TEXT_NODE) {
- child->parent = parentp;
- if (child->doc == NULL) {
- xmlSetTreeDoc(child, parentp->doc);
- }
- new_child = child;
- if (parentp->children == NULL) {
- parentp->children = child;
- parentp->last = child;
- } else {
- child = parentp->last;
- child->next = new_child;
- new_child->prev = child;
- parentp->last = new_child;
- }
- } else if (child->type == XML_ATTRIBUTE_NODE) {
- xmlAttrPtr lastattr;
-
- if (child->ns == NULL)
- lastattr = xmlHasProp(parentp, child->name);
- else
- lastattr = xmlHasNsProp(parentp, child->name, child->ns->href);
- if (lastattr != NULL) {
- if (lastattr != (xmlAttrPtr) child) {
- xmlUnlinkNode((xmlNodePtr) lastattr);
- php_libxml_node_free_resource((xmlNodePtr) lastattr TSRMLS_CC);
- } else {
- DOM_RET_OBJ(rv, child, &ret, intern);
- return;
- }
- }
- } else if (child->type == XML_DOCUMENT_FRAG_NODE) {
- xmlNodePtr fragment;
-
- fragment = child;
-
- new_child = child->children;
- if (parentp->children == NULL) {
- parentp->children = new_child;
- } else {
- child = parentp->last;
- child->next = new_child;
- new_child->prev = child;
- }
- child = new_child;
- while (child->next != NULL) {
- child->parent = parentp;
- if (child->doc != parentp->doc) {
- xmlSetTreeDoc(child, parentp->doc);
- }
- child = child->next;
- }
- child->parent = parentp;
- if (child->doc != parentp->doc) {
- xmlSetTreeDoc(child, parentp->doc);
- }
- parentp->last = child;
- fragment->children = NULL;
- }
- if (new_child == NULL) {
- new_child = xmlAddChild(parentp, child);
- }
- }
-
- if (NULL == new_child) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Couldn't add newnode as the previous sibling of refnode");
- RETURN_FALSE;
- }
-
- dom_reconcile_ns(parentp->doc, new_child);
-
- DOM_RET_OBJ(rv, new_child, &ret, intern);
-
-}
-/* }}} end dom_node_insert_before */
-
-
-/* {{{ proto DomNode dom_node_replace_child(DomNode newChild, DomNode oldChild);
-URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-785887307
-Since:
-*/
-PHP_FUNCTION(dom_node_replace_child)
-{
- zval *id, *newnode, *oldnode;
- xmlNodePtr children, newchild, oldchild, nodep;
- dom_object *intern, *newchildobj, *oldchildobj;
- int foundoldchild = 0, stricterror;
-
- int ret;
-
- if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "OOO", &id, dom_node_class_entry, &newnode, dom_node_class_entry, &oldnode, dom_node_class_entry) == FAILURE) {
- return;
- }
-
- DOM_GET_OBJ(nodep, id, xmlNodePtr, intern);
-
- if (dom_node_children_valid(nodep) == FAILURE) {
- RETURN_FALSE;
- }
-
- DOM_GET_OBJ(newchild, newnode, xmlNodePtr, newchildobj);
- DOM_GET_OBJ(oldchild, oldnode, xmlNodePtr, oldchildobj);
-
- children = nodep->children;
- if (!children) {
- RETURN_FALSE;
- }
-
- stricterror = dom_get_strict_error(intern->document);
-
- if (dom_node_is_read_only(nodep) == SUCCESS ||
- (newchild->parent != NULL && dom_node_is_read_only(newchild->parent) == SUCCESS)) {
- php_dom_throw_error(NO_MODIFICATION_ALLOWED_ERR, stricterror TSRMLS_CC);
- RETURN_FALSE;
- }
-
- if (newchild->doc != nodep->doc && newchild->doc != NULL) {
- php_dom_throw_error(WRONG_DOCUMENT_ERR, stricterror TSRMLS_CC);
- RETURN_FALSE;
- }
-
- if (dom_hierarchy(nodep, newchild) == FAILURE) {
- php_dom_throw_error(HIERARCHY_REQUEST_ERR, stricterror TSRMLS_CC);
- RETURN_FALSE;
- }
-
- /* check for the old child and wether the new child is already a child */
- while (children) {
- if (children == oldchild) {
- foundoldchild = 1;
- break;
- }
- children = children->next;
- }
-
- if (foundoldchild) {
- zval *rv = NULL;
- if (oldchild != newchild) {
- xmlNodePtr node;
- if (newchild->doc == NULL && nodep->doc != NULL) {
- xmlSetTreeDoc(newchild, nodep->doc);
- newchildobj->document = intern->document;
- php_libxml_increment_doc_ref((php_libxml_node_object *)newchildobj, NULL TSRMLS_CC);
- }
- node = xmlReplaceNode(oldchild, newchild);
- dom_reconcile_ns(nodep->doc, newchild);
- }
- DOM_RET_OBJ(rv, oldchild, &ret, intern);
- return;
- } else {
- php_dom_throw_error(NOT_FOUND_ERR, dom_get_strict_error(intern->document) TSRMLS_CC);
- RETURN_FALSE;
- }
-
-}
-/* }}} end dom_node_replace_child */
-
-
-/* {{{ proto DomNode dom_node_remove_child(DomNode oldChild);
-URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-1734834066
-Since:
-*/
-PHP_FUNCTION(dom_node_remove_child)
-{
- zval *id, *node;
- xmlNodePtr children, child, nodep;
- dom_object *intern, *childobj;
- int ret, stricterror;
-
- if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "OO", &id, dom_node_class_entry, &node, dom_node_class_entry) == FAILURE) {
- return;
- }
-
- DOM_GET_OBJ(nodep, id, xmlNodePtr, intern);
-
- if (dom_node_children_valid(nodep) == FAILURE) {
- RETURN_FALSE;
- }
-
- DOM_GET_OBJ(child, node, xmlNodePtr, childobj);
-
- stricterror = dom_get_strict_error(intern->document);
-
- if (dom_node_is_read_only(nodep) == SUCCESS ||
- (child->parent != NULL && dom_node_is_read_only(child->parent) == SUCCESS)) {
- php_dom_throw_error(NO_MODIFICATION_ALLOWED_ERR, stricterror TSRMLS_CC);
- RETURN_FALSE;
- }
-
- children = nodep->children;
- if (!children) {
- php_dom_throw_error(NOT_FOUND_ERR, stricterror TSRMLS_CC);
- RETURN_FALSE;
- }
-
- while (children) {
- if (children == child) {
- zval *rv = NULL;
- xmlUnlinkNode(child);
- DOM_RET_OBJ(rv, child, &ret, intern);
- return;
- }
- children = children->next;
- }
-
- php_dom_throw_error(NOT_FOUND_ERR, stricterror TSRMLS_CC);
- RETURN_FALSE
-}
-/* }}} end dom_node_remove_child */
-
-
-/* {{{ proto DomNode dom_node_append_child(DomNode newChild);
-URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-184E7107
-Since:
-*/
-PHP_FUNCTION(dom_node_append_child)
-{
- zval *id, *node, *rv = NULL;
- xmlNodePtr child, nodep, new_child = NULL;
- dom_object *intern, *childobj;
- int ret, stricterror;
-
- if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "OO", &id, dom_node_class_entry, &node, dom_node_class_entry) == FAILURE) {
- return;
- }
-
- DOM_GET_OBJ(nodep, id, xmlNodePtr, intern);
-
- if (dom_node_children_valid(nodep) == FAILURE) {
- RETURN_FALSE;
- }
-
- DOM_GET_OBJ(child, node, xmlNodePtr, childobj);
-
- stricterror = dom_get_strict_error(intern->document);
-
- if (dom_node_is_read_only(nodep) == SUCCESS ||
- (child->parent != NULL && dom_node_is_read_only(child->parent) == SUCCESS)) {
- php_dom_throw_error(NO_MODIFICATION_ALLOWED_ERR, stricterror TSRMLS_CC);
- RETURN_FALSE;
- }
-
- if (dom_hierarchy(nodep, child) == FAILURE) {
- php_dom_throw_error(HIERARCHY_REQUEST_ERR, stricterror TSRMLS_CC);
- RETURN_FALSE;
- }
-
- if (!(child->doc == NULL || child->doc == nodep->doc)) {
- php_dom_throw_error(WRONG_DOCUMENT_ERR, stricterror TSRMLS_CC);
- RETURN_FALSE;
- }
-
- if (child->type == XML_DOCUMENT_FRAG_NODE && child->children == NULL) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Document Fragment is empty");
- RETURN_FALSE;
- }
-
- if (child->doc == NULL && nodep->doc != NULL) {
- childobj->document = intern->document;
- php_libxml_increment_doc_ref((php_libxml_node_object *)childobj, NULL TSRMLS_CC);
- }
-
- if (child->parent != NULL){
- xmlUnlinkNode(child);
- }
-
- if (child->type == XML_TEXT_NODE && nodep->last != NULL && nodep->last->type == XML_TEXT_NODE) {
- child->parent = nodep;
- if (child->doc == NULL) {
- xmlSetTreeDoc(child, nodep->doc);
- }
- new_child = child;
- if (nodep->children == NULL) {
- nodep->children = child;
- nodep->last = child;
- } else {
- child = nodep->last;
- child->next = new_child;
- new_child->prev = child;
- nodep->last = new_child;
- }
- } else if (child->type == XML_ATTRIBUTE_NODE) {
- xmlAttrPtr lastattr;
-
- if (child->ns == NULL)
- lastattr = xmlHasProp(nodep, child->name);
- else
- lastattr = xmlHasNsProp(nodep, child->name, child->ns->href);
- if (lastattr != NULL) {
- if (lastattr != (xmlAttrPtr) child) {
- xmlUnlinkNode((xmlNodePtr) lastattr);
- php_libxml_node_free_resource((xmlNodePtr) lastattr TSRMLS_CC);
- }
- }
- } else if (child->type == XML_DOCUMENT_FRAG_NODE) {
- xmlNodePtr fragment;
-
- fragment = child;
- new_child = child->children;
- if (nodep->children == NULL) {
- nodep->children = new_child;
- } else {
- child = nodep->last;
- child->next = new_child;
- new_child->prev = child;
- }
- child = new_child;
- while (child->next != NULL) {
- child->parent = nodep;
- if (child->doc != nodep->doc) {
- xmlSetTreeDoc(child, nodep->doc);
- }
- child = child->next;
- }
- child->parent = nodep;
- if (child->doc != nodep->doc) {
- xmlSetTreeDoc(child, nodep->doc);
- }
- nodep->last = child;
- fragment->children = NULL;
- }
-
- if (new_child == NULL) {
- new_child = xmlAddChild(nodep, child);
- if (new_child == NULL) {
- php_error(E_WARNING, "Couldn't append node");
- RETURN_FALSE;
- }
- }
-
- dom_reconcile_ns(nodep->doc, new_child);
-
- DOM_RET_OBJ(rv, new_child, &ret, intern);
-}
-/* }}} end dom_node_append_child */
-
-
-/* {{{ proto boolean dom_node_has_child_nodes();
-URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-810594187
-Since:
-*/
-PHP_FUNCTION(dom_node_has_child_nodes)
-{
- zval *id;
- xmlNode *nodep;
- dom_object *intern;
-
- if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &id, dom_node_class_entry) == FAILURE) {
- return;
- }
-
- DOM_GET_OBJ(nodep, id, xmlNodePtr, intern);
-
- if (dom_node_children_valid(nodep) == FAILURE) {
- RETURN_FALSE;
- }
-
- if (nodep->children) {
- RETURN_TRUE;
- } else {
- RETURN_FALSE;
- }
-}
-/* }}} end dom_node_has_child_nodes */
-
-
-/* {{{ proto DomNode dom_node_clone_node(boolean deep);
-URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-3A0ED0A4
-Since:
-*/
-PHP_FUNCTION(dom_node_clone_node)
-{
- zval *rv = NULL;
- zval *id;
- xmlNode *n, *node;
- int ret;
- dom_object *intern;
- long recursive = 0;
-
- if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O|l", &id, dom_node_class_entry, &recursive) == FAILURE) {
- return;
- }
-
- DOM_GET_OBJ(n, id, xmlNodePtr, intern);
-
- node = xmlDocCopyNode(n, n->doc, recursive);
-
- if (!node) {
- RETURN_FALSE;
- }
-
- /* When deep is false Element nodes still require the attributes
- Following taken from libxml as xmlDocCopyNode doesnt do this */
- if (n->type == XML_ELEMENT_NODE && recursive == 0) {
- if (n->nsDef != NULL) {
- node->nsDef = xmlCopyNamespaceList(n->nsDef);
- }
- if (n->ns != NULL) {
- xmlNsPtr ns;
- ns = xmlSearchNs(n->doc, node, n->ns->prefix);
- if (ns == NULL) {
- ns = xmlSearchNs(n->doc, n, n->ns->prefix);
- if (ns != NULL) {
- xmlNodePtr root = node;
-
- while (root->parent != NULL) {
- root = root->parent;
- }
- node->ns = xmlNewNs(root, ns->href, ns->prefix);
- }
- } else {
- node->ns = ns;
- }
- }
- if (n->properties != NULL) {
- node->properties = xmlCopyPropList(node, n->properties);
- }
- }
-
- /* If document cloned we want a new document proxy */
- if (node->doc != n->doc) {
- intern = NULL;
- }
-
- DOM_RET_OBJ(rv, node, &ret, intern);
-}
-/* }}} end dom_node_clone_node */
-
-
-
-/* {{{ proto void dom_node_normalize();
-URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-normalize
-Since:
-*/
-PHP_FUNCTION(dom_node_normalize)
-{
- zval *id;
- xmlNode *nodep;
- dom_object *intern;
-
- if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &id, dom_node_class_entry) == FAILURE) {
- return;
- }
-
- DOM_GET_OBJ(nodep, id, xmlNodePtr, intern);
-
- dom_normalize(nodep TSRMLS_CC);
-
-}
-/* }}} end dom_node_normalize */
-
-
-/* {{{ proto boolean dom_node_is_supported(string feature, string version);
-URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-Level-2-Core-Node-supports
-Since: DOM Level 2
-*/
-PHP_FUNCTION(dom_node_is_supported)
-{
- zval *id;
- int feature_len, version_len;
- char *feature, *version;
-
- if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Oss", &id, dom_node_class_entry, &feature, &feature_len, &version, &version_len) == FAILURE) {
- return;
- }
-
- if (dom_has_feature(feature, version)) {
- RETURN_TRUE;
- } else {
- RETURN_FALSE;
- }
-}
-/* }}} end dom_node_is_supported */
-
-
-/* {{{ proto boolean dom_node_has_attributes();
-URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-NodeHasAttrs
-Since: DOM Level 2
-*/
-PHP_FUNCTION(dom_node_has_attributes)
-{
- zval *id;
- xmlNode *nodep;
- dom_object *intern;
-
- if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &id, dom_node_class_entry) == FAILURE) {
- return;
- }
-
- DOM_GET_OBJ(nodep, id, xmlNodePtr, intern);
-
- if (nodep->type != XML_ELEMENT_NODE)
- RETURN_FALSE;
-
- if (nodep->properties) {
- RETURN_TRUE;
- } else {
- RETURN_FALSE;
- }
-}
-/* }}} end dom_node_has_attributes */
-
-/* {{{ proto short dom_node_compare_document_position(DomNode other);
-URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#Node3-compareDocumentPosition
-Since: DOM Level 3
-*/
-PHP_FUNCTION(dom_node_compare_document_position)
-{
- DOM_NOT_IMPLEMENTED();
-}
-/* }}} end dom_node_compare_document_position */
-
-
-/* {{{ proto boolean dom_node_is_same_node(DomNode other);
-URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#Node3-isSameNode
-Since: DOM Level 3
-*/
-PHP_FUNCTION(dom_node_is_same_node)
-{
- zval *id, *node;
- xmlNodePtr nodeotherp, nodep;
- dom_object *intern, *nodeotherobj;
-
- if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "OO", &id, dom_node_class_entry, &node, dom_node_class_entry) == FAILURE) {
- return;
- }
-
- DOM_GET_OBJ(nodep, id, xmlNodePtr, intern);
-
- DOM_GET_OBJ(nodeotherp, node, xmlNodePtr, nodeotherobj);
-
- if (nodep == nodeotherp) {
- RETURN_TRUE;
- } else {
- RETURN_FALSE;
- }
-}
-/* }}} end dom_node_is_same_node */
-
-
-/* {{{ proto string dom_node_lookup_prefix(string namespaceURI);
-URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#Node3-lookupNamespacePrefix
-Since: DOM Level 3
-*/
-PHP_FUNCTION(dom_node_lookup_prefix)
-{
- zval *id;
- xmlNodePtr nodep, lookupp = NULL;
- dom_object *intern;
- xmlNsPtr nsptr;
- int uri_len = 0;
- char *uri;
-
- if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Os", &id, dom_node_class_entry, &uri, &uri_len) == FAILURE) {
- return;
- }
-
- DOM_GET_OBJ(nodep, id, xmlNodePtr, intern);
-
- if (uri_len > 0) {
- switch (nodep->type) {
- case XML_ELEMENT_NODE:
- lookupp = nodep;
- break;
- case XML_DOCUMENT_NODE:
- case XML_HTML_DOCUMENT_NODE:
- lookupp = xmlDocGetRootElement((xmlDocPtr) nodep);
- break;
- case XML_ENTITY_NODE :
- case XML_NOTATION_NODE:
- case XML_DOCUMENT_FRAG_NODE:
- case XML_DOCUMENT_TYPE_NODE:
- case XML_DTD_NODE:
- RETURN_NULL();
- break;
- default:
- lookupp = nodep->parent;
- }
-
- if (lookupp != NULL && (nsptr = xmlSearchNsByHref(lookupp->doc, lookupp, uri))) {
- if (nsptr->prefix != NULL) {
- RETURN_STRING((char *) nsptr->prefix, 1);
- }
- }
- }
-
- RETURN_NULL();
-}
-/* }}} end dom_node_lookup_prefix */
-
-
-/* {{{ proto boolean dom_node_is_default_namespace(string namespaceURI);
-URL: http://www.w3.org/TR/DOM-Level-3-Core/core.html#Node3-isDefaultNamespace
-Since: DOM Level 3
-*/
-PHP_FUNCTION(dom_node_is_default_namespace)
-{
- zval *id;
- xmlNodePtr nodep;
- dom_object *intern;
- xmlNsPtr nsptr;
- int uri_len = 0;
- char *uri;
-
- if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Os", &id, dom_node_class_entry, &uri, &uri_len) == FAILURE) {
- return;
- }
-
- DOM_GET_OBJ(nodep, id, xmlNodePtr, intern);
-
- if (uri_len > 0) {
- nsptr = xmlSearchNs(nodep->doc, nodep, NULL);
- if (nsptr && xmlStrEqual(nsptr->href, uri)) {
- RETURN_TRUE;
- }
- }
-
- RETURN_FALSE;
-}
-/* }}} end dom_node_is_default_namespace */
-
-
-/* {{{ proto string dom_node_lookup_namespace_uri(string prefix);
-URL: http://www.w3.org/TR/DOM-Level-3-Core/core.html#Node3-lookupNamespaceURI
-Since: DOM Level 3
-*/
-PHP_FUNCTION(dom_node_lookup_namespace_uri)
-{
- zval *id;
- xmlNodePtr nodep;
- dom_object *intern;
- xmlNsPtr nsptr;
- int prefix_len = 0;
- char *prefix;
-
- if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Os", &id, dom_node_class_entry, &prefix, &prefix_len) == FAILURE) {
- return;
- }
-
- DOM_GET_OBJ(nodep, id, xmlNodePtr, intern);
-
- if (prefix_len > 0) {
- nsptr = xmlSearchNs(nodep->doc, nodep, prefix);
- if (nsptr && nsptr->href != NULL) {
- RETURN_STRING((char *) nsptr->href, 1);
- }
- }
-
- RETURN_NULL();
-}
-/* }}} end dom_node_lookup_namespace_uri */
-
-
-/* {{{ proto boolean dom_node_is_equal_node(DomNode arg);
-URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#Node3-isEqualNode
-Since: DOM Level 3
-*/
-PHP_FUNCTION(dom_node_is_equal_node)
-{
- DOM_NOT_IMPLEMENTED();
-}
-/* }}} end dom_node_is_equal_node */
-
-
-/* {{{ proto DomNode dom_node_get_feature(string feature, string version);
-URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#Node3-getFeature
-Since: DOM Level 3
-*/
-PHP_FUNCTION(dom_node_get_feature)
-{
- DOM_NOT_IMPLEMENTED();
-}
-/* }}} end dom_node_get_feature */
-
-
-/* {{{ proto DomUserData dom_node_set_user_data(string key, DomUserData data, userdatahandler handler);
-URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#Node3-setUserData
-Since: DOM Level 3
-*/
-PHP_FUNCTION(dom_node_set_user_data)
-{
- DOM_NOT_IMPLEMENTED();
-}
-/* }}} end dom_node_set_user_data */
-
-
-/* {{{ proto DomUserData dom_node_get_user_data(string key);
-URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#Node3-getUserData
-Since: DOM Level 3
-*/
-PHP_FUNCTION(dom_node_get_user_data)
-{
- DOM_NOT_IMPLEMENTED();
-}
-/* }}} end dom_node_get_user_data */
-#endif
diff --git a/ext/dom/nodelist.c b/ext/dom/nodelist.c
deleted file mode 100644
index 72c388fc01..0000000000
--- a/ext/dom/nodelist.c
+++ /dev/null
@@ -1,168 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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. |
- +----------------------------------------------------------------------+
- | Authors: Christian Stocker <chregu@php.net> |
- | Rob Richards <rrichards@php.net> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "php.h"
-#if HAVE_LIBXML && HAVE_DOM
-#include "php_dom.h"
-
-
-/*
-* class DOMNodeList
-*
-* URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#ID-536297177
-* Since:
-*/
-
-zend_function_entry php_dom_nodelist_class_functions[] = {
- PHP_FALIAS(item, dom_nodelist_item, NULL)
- {NULL, NULL, NULL}
-};
-
-/* {{{ proto length int
-readonly=yes
-URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#ID-203510337
-Since:
-*/
-int dom_nodelist_length_read(dom_object *obj, zval **retval TSRMLS_DC)
-{
- dom_nnodemap_object *objmap;
- xmlNodePtr nodep, curnode;
- int count = 0;
- HashTable *nodeht;
-
- objmap = (dom_nnodemap_object *)obj->ptr;
- if (objmap != NULL) {
- if (objmap->ht) {
- count = xmlHashSize(objmap->ht);
- } else {
- if (objmap->nodetype == DOM_NODESET) {
- nodeht = HASH_OF(objmap->baseobjptr);
- count = zend_hash_num_elements(nodeht);
- } else {
- nodep = dom_object_get_node(objmap->baseobj);
- if (nodep) {
- if (objmap->nodetype == XML_ATTRIBUTE_NODE || objmap->nodetype == XML_ELEMENT_NODE) {
- curnode = nodep->children;
- if (curnode) {
- count++;
- while (curnode->next != NULL) {
- count++;
- curnode = curnode->next;
- }
- }
- } else {
- if (nodep->type == XML_DOCUMENT_NODE || nodep->type == XML_HTML_DOCUMENT_NODE) {
- nodep = xmlDocGetRootElement((xmlDoc *) nodep);
- } else {
- nodep = nodep->children;
- }
- curnode = dom_get_elements_by_tag_name_ns_raw(nodep, objmap->ns, objmap->local, &count, -1);
- }
- }
- }
- }
- }
-
- MAKE_STD_ZVAL(*retval);
- ZVAL_LONG(*retval, count);
- return SUCCESS;
-}
-
-/* }}} */
-
-
-/* {{{ proto DOMNode dom_nodelist_item(int index);
-URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#ID-844377136
-Since:
-*/
-PHP_FUNCTION(dom_nodelist_item)
-{
- zval *id, *rv = NULL;
- int index, ret;
- dom_object *intern;
- xmlNodePtr itemnode = NULL;
-
- dom_nnodemap_object *objmap;
- xmlNodePtr nodep, curnode;
- int count = 0;
- HashTable *nodeht;
- pval **entry;
-
- if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Ol", &id, dom_nodelist_class_entry, &index) == FAILURE) {
- return;
- }
-
- if (index >= 0) {
- intern = (dom_object *)zend_object_store_get_object(id TSRMLS_CC);
-
- objmap = (dom_nnodemap_object *)intern->ptr;
- if (objmap != NULL) {
- if (objmap->ht) {
- if (objmap->nodetype == XML_ENTITY_NODE) {
- itemnode = php_dom_libxml_hash_iter(objmap->ht, index);
- } else {
- itemnode = php_dom_libxml_notation_iter(objmap->ht, index);
- }
- } else {
- if (objmap->nodetype == DOM_NODESET) {
- nodeht = HASH_OF(objmap->baseobjptr);
- if (zend_hash_index_find(nodeht, index, (void **) &entry)==SUCCESS) {
- *return_value = **entry;
- zval_copy_ctor(return_value);
- return;
- }
- } else {
- nodep = dom_object_get_node(objmap->baseobj);
- if (nodep) {
- if (objmap->nodetype == XML_ATTRIBUTE_NODE || objmap->nodetype == XML_ELEMENT_NODE) {
- curnode = nodep->children;
- while (count < index && curnode != NULL) {
- count++;
- curnode = curnode->next;
- }
- itemnode = curnode;
- } else {
- if (nodep->type == XML_DOCUMENT_NODE || nodep->type == XML_HTML_DOCUMENT_NODE) {
- nodep = xmlDocGetRootElement((xmlDoc *) nodep);
- } else {
- nodep = nodep->children;
- }
- itemnode = dom_get_elements_by_tag_name_ns_raw(nodep, objmap->ns, objmap->local, &count, index);
- }
- }
- }
- }
- }
-
- if (itemnode) {
- DOM_RET_OBJ(rv, itemnode, &ret, objmap->baseobj);
- return;
- }
- }
-
- RETVAL_NULL();
-}
-/* }}} end dom_nodelist_item */
-#endif
diff --git a/ext/dom/notation.c b/ext/dom/notation.c
deleted file mode 100644
index 6dfbfcb22f..0000000000
--- a/ext/dom/notation.c
+++ /dev/null
@@ -1,102 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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. |
- +----------------------------------------------------------------------+
- | Authors: Christian Stocker <chregu@php.net> |
- | Rob Richards <rrichards@php.net> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "php.h"
-#if HAVE_LIBXML && HAVE_DOM
-#include "php_dom.h"
-
-
-/*
-* class DOMNotation extends DOMNode
-*
-* URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#ID-5431D1B9
-* Since:
-*/
-
-zend_function_entry php_dom_notation_class_functions[] = {
- {NULL, NULL, NULL}
-};
-
-/* {{{ attribute protos, not implemented yet */
-
-/* {{{ proto publicId string
-readonly=yes
-URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#ID-54F2B4D0
-Since:
-*/
-int dom_notation_public_id_read(dom_object *obj, zval **retval TSRMLS_DC)
-{
- xmlNotationPtr nodep;
-
- nodep = (xmlNotationPtr) dom_object_get_node(obj);
-
- if (nodep == NULL) {
- php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC);
- return FAILURE;
- }
-
- ALLOC_ZVAL(*retval);
- if (nodep->PublicID) {
- ZVAL_STRING(*retval, (char *) (nodep->PublicID), 1);
- } else {
- ZVAL_EMPTY_STRING(*retval);
- }
-
- return SUCCESS;
-}
-
-/* }}} */
-
-
-
-/* {{{ proto systemId string
-readonly=yes
-URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#ID-E8AAB1D0
-Since:
-*/
-int dom_notation_system_id_read(dom_object *obj, zval **retval TSRMLS_DC)
-{
- xmlNotationPtr nodep;
-
- nodep = (xmlNotationPtr) dom_object_get_node(obj);
-
- if (nodep == NULL) {
- php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC);
- return FAILURE;
- }
-
- ALLOC_ZVAL(*retval);
- if (nodep->SystemID) {
- ZVAL_STRING(*retval, (char *) (nodep->PublicID), 1);
- } else {
- ZVAL_EMPTY_STRING(*retval);
- }
-
- return SUCCESS;
-}
-
-/* }}} */
-
-#endif
diff --git a/ext/dom/php_dom.c b/ext/dom/php_dom.c
deleted file mode 100644
index f7761becb3..0000000000
--- a/ext/dom/php_dom.c
+++ /dev/null
@@ -1,1386 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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. |
- +----------------------------------------------------------------------+
- | Authors: Christian Stocker <chregu@php.net> |
- | Rob Richards <rrichards@php.net> |
- | Marcus Borger <helly@php.net> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "php.h"
-#if HAVE_LIBXML && HAVE_DOM
-#include "ext/standard/php_rand.h"
-#include "php_dom.h"
-#include "dom_properties.h"
-
-#include "ext/standard/info.h"
-#define PHP_XPATH 1
-#define PHP_XPTR 2
-
-zend_object_handlers dom_object_handlers;
-zend_object_handlers dom_ze1_object_handlers;
-
-static HashTable classes;
-
-static HashTable dom_domstringlist_prop_handlers;
-static HashTable dom_namelist_prop_handlers;
-static HashTable dom_domimplementationlist_prop_handlers;
-static HashTable dom_document_prop_handlers;
-static HashTable dom_node_prop_handlers;
-static HashTable dom_nodelist_prop_handlers;
-static HashTable dom_namednodemap_prop_handlers;
-static HashTable dom_characterdata_prop_handlers;
-static HashTable dom_attr_prop_handlers;
-static HashTable dom_element_prop_handlers;
-static HashTable dom_text_prop_handlers;
-static HashTable dom_typeinfo_prop_handlers;
-static HashTable dom_domerror_prop_handlers;
-static HashTable dom_domlocator_prop_handlers;
-static HashTable dom_documenttype_prop_handlers;
-static HashTable dom_notation_prop_handlers;
-static HashTable dom_entity_prop_handlers;
-static HashTable dom_processinginstruction_prop_handlers;
-static HashTable dom_namespace_node_prop_handlers;
-#if defined(LIBXML_XPATH_ENABLED)
-static HashTable dom_xpath_prop_handlers;
-#endif
-
-typedef int (*dom_read_t)(dom_object *obj, zval **retval TSRMLS_DC);
-typedef int (*dom_write_t)(dom_object *obj, zval *newval TSRMLS_DC);
-
-typedef struct _dom_prop_handler {
- dom_read_t read_func;
- dom_write_t write_func;
-} dom_prop_handler;
-
-/* {{{ int dom_node_is_read_only(xmlNodePtr node) */
-int dom_node_is_read_only(xmlNodePtr node) {
- switch (node->type) {
- case XML_ENTITY_REF_NODE:
- case XML_ENTITY_NODE:
- case XML_DOCUMENT_TYPE_NODE:
- case XML_NOTATION_NODE:
- case XML_DTD_NODE:
- case XML_ELEMENT_DECL:
- case XML_ATTRIBUTE_DECL:
- case XML_ENTITY_DECL:
- case XML_NAMESPACE_DECL:
- return SUCCESS;
- break;
- default:
- if (node->doc == NULL) {
- return SUCCESS;
- } else {
- return FAILURE;
- }
- }
-}
-/* }}} end dom_node_is_read_only */
-
-/* {{{ int dom_node_children_valid(xmlNodePtr node) */
-int dom_node_children_valid(xmlNodePtr node) {
- switch (node->type) {
- case XML_DOCUMENT_TYPE_NODE:
- case XML_DTD_NODE:
- case XML_PI_NODE:
- case XML_COMMENT_NODE:
- case XML_TEXT_NODE:
- case XML_CDATA_SECTION_NODE:
- case XML_NOTATION_NODE:
- return FAILURE;
- break;
- default:
- return SUCCESS;
- }
-}
-/* }}} end dom_node_children_valid */
-
-/* {{{ dom_get_doc_props() */
-dom_doc_propsptr dom_get_doc_props(php_libxml_ref_obj *document)
-{
- dom_doc_props *doc_props;
-
- if (document && document->doc_props) {
- return document->doc_props;
- } else {
- doc_props = emalloc(sizeof(dom_doc_props));
- doc_props->formatoutput = 0;
- doc_props->validateonparse = 0;
- doc_props->resolveexternals = 0;
- doc_props->preservewhitespace = 1;
- doc_props->substituteentities = 0;
- doc_props->stricterror = 1;
- doc_props->recover = 0;
- if (document) {
- document->doc_props = doc_props;
- }
- return doc_props;
- }
-}
-/* }}} */
-
-/* {{{ dom_get_strict_error() */
-int dom_get_strict_error(php_libxml_ref_obj *document) {
- int stricterror;
- dom_doc_props *doc_props;
-
- doc_props = dom_get_doc_props(document);
- stricterror = doc_props->stricterror;
- if (document == NULL) {
- efree(doc_props);
- }
-
- return stricterror;
-}
-/* }}} */
-
-/* {{{ xmlNodePtr dom_object_get_node(dom_object *obj) */
-xmlNodePtr dom_object_get_node(dom_object *obj)
-{
- if (obj->ptr != NULL) {
- return ((php_libxml_node_ptr *)obj->ptr)->node;
- } else {
- return NULL;
- }
-}
-/* }}} end dom_object_get_node */
-
-/* {{{ dom_object *php_dom_object_get_data(xmlNodePtr obj) */
-dom_object *php_dom_object_get_data(xmlNodePtr obj)
-{
- if (obj->_private != NULL) {
- return (dom_object *) ((php_libxml_node_ptr *) obj->_private)->_private;
- } else {
- return NULL;
- }
-}
-/* }}} end php_dom_object_get_data */
-
-/* {{{ dom_read_na */
-static int dom_read_na(dom_object *obj, zval **retval TSRMLS_DC)
-{
- *retval = NULL;
- php_error_docref(NULL TSRMLS_CC, E_ERROR, "Cannot read property");
- return FAILURE;
-}
-/* }}} */
-
-/* {{{ dom_write_na */
-static int dom_write_na(dom_object *obj, zval *newval TSRMLS_DC)
-{
- php_error_docref(NULL TSRMLS_CC, E_ERROR, "Cannot write property");
- return FAILURE;
-}
-/* }}} */
-
-/* {{{ dom_register_prop_handler */
-static void dom_register_prop_handler(HashTable *prop_handler, char *name, dom_read_t read_func, dom_write_t write_func TSRMLS_DC)
-{
- dom_prop_handler hnd;
-
- hnd.read_func = read_func ? read_func : dom_read_na;
- hnd.write_func = write_func ? write_func : dom_write_na;
- zend_hash_add(prop_handler, name, strlen(name)+1, &hnd, sizeof(dom_prop_handler), NULL);
-}
-/* }}} */
-
-/* {{{ dom_read_property */
-zval *dom_read_property(zval *object, zval *member, int type TSRMLS_DC)
-{
- dom_object *obj;
- zval tmp_member;
- zval *retval;
- dom_prop_handler *hnd;
- zend_object_handlers *std_hnd;
- int ret;
-
- if (member->type != IS_STRING) {
- tmp_member = *member;
- zval_copy_ctor(&tmp_member);
- convert_to_string(&tmp_member);
- member = &tmp_member;
- }
-
- ret = FAILURE;
- obj = (dom_object *)zend_objects_get_address(object TSRMLS_CC);
-
- if (obj->prop_handler != NULL) {
- ret = zend_hash_find(obj->prop_handler, Z_STRVAL_P(member), Z_STRLEN_P(member)+1, (void **) &hnd);
- }
- if (ret == SUCCESS) {
- ret = hnd->read_func(obj, &retval TSRMLS_CC);
- if (ret == SUCCESS) {
- /* ensure we're creating a temporary variable */
- retval->refcount = 0;
- } else {
- retval = EG(uninitialized_zval_ptr);
- }
- } else {
- std_hnd = zend_get_std_object_handlers();
- retval = std_hnd->read_property(object, member, type TSRMLS_CC);
- }
-
- if (member == &tmp_member) {
- zval_dtor(member);
- }
- return retval;
-}
-/* }}} */
-
-/* {{{ dom_write_property */
-void dom_write_property(zval *object, zval *member, zval *value TSRMLS_DC)
-{
- dom_object *obj;
- zval tmp_member;
- dom_prop_handler *hnd;
- zend_object_handlers *std_hnd;
- int ret;
-
- if (member->type != IS_STRING) {
- tmp_member = *member;
- zval_copy_ctor(&tmp_member);
- convert_to_string(&tmp_member);
- member = &tmp_member;
- }
-
- ret = FAILURE;
- obj = (dom_object *)zend_objects_get_address(object TSRMLS_CC);
-
- if (obj->prop_handler != NULL) {
- ret = zend_hash_find((HashTable *)obj->prop_handler, Z_STRVAL_P(member), Z_STRLEN_P(member)+1, (void **) &hnd);
- }
- if (ret == SUCCESS) {
- hnd->write_func(obj, value TSRMLS_CC);
- } else {
- std_hnd = zend_get_std_object_handlers();
- std_hnd->write_property(object, member, value TSRMLS_CC);
- }
-
- if (member == &tmp_member) {
- zval_dtor(member);
- }
-}
-/* }}} */
-
-
-void *php_dom_export_node(zval *object TSRMLS_DC)
-{
- php_libxml_node_object *intern;
- xmlNodePtr nodep = NULL;
-
- intern = (php_libxml_node_object *)zend_object_store_get_object(object TSRMLS_CC);
- if (intern && intern->node) {
- nodep = intern->node->node;
- }
-
- return nodep;
-}
-
-/* {{{ proto somNode dom_import_simplexml(sxeobject node)
- Get a simplexml_element object from dom to allow for processing */
-PHP_FUNCTION(dom_import_simplexml)
-{
-#ifdef HAVE_SIMPLEXML
- zval *rv = NULL;
- zval *node;
- xmlNodePtr nodep = NULL;
- php_libxml_node_object *nodeobj;
- int ret;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "o", &node) == FAILURE) {
- return;
- }
-
- nodeobj = (php_libxml_node_object *)zend_object_store_get_object(node TSRMLS_CC);
- nodep = php_libxml_import_node(node TSRMLS_CC);
-
- if (nodep && nodeobj && (nodep->type == XML_ELEMENT_NODE || nodep->type == XML_ATTRIBUTE_NODE)) {
- DOM_RET_OBJ(rv, (xmlNodePtr) nodep, &ret, (dom_object *)nodeobj);
- } else {
- php_error(E_WARNING, "Invalid Nodetype to import");
- RETURN_NULL();
- }
-#else
- php_error(E_WARNING, "SimpleXML support is not enabled");
- return;
-#endif
-}
-/* }}} */
-
-zend_object_value dom_objects_store_clone_obj(zval *zobject TSRMLS_DC)
-{
- zend_object_value retval;
- void *new_object;
- dom_object *intern;
- struct _store_object *obj;
- zend_object_handle handle = Z_OBJ_HANDLE_P(zobject);
-
- obj = &EG(objects_store).object_buckets[handle].bucket.obj;
-
- if (obj->clone == NULL) {
- php_error(E_ERROR, "Trying to clone an uncloneable object of class %s", Z_OBJCE_P(zobject)->name);
- }
-
- obj->clone(obj->object, &new_object TSRMLS_CC);
-
- retval.handle = zend_objects_store_put(new_object, obj->dtor, obj->free_storage, obj->clone TSRMLS_CC);
- intern = (dom_object *) new_object;
- intern->handle = retval.handle;
- retval.handlers = Z_OBJ_HT_P(zobject);
-
- return retval;
-}
-
-zend_object_value dom_objects_ze1_clone_obj(zval *zobject TSRMLS_DC)
-{
- php_error(E_ERROR, "Cannot clone object of class %s due to 'zend.ze1_compatibility_mode'", Z_OBJCE_P(zobject)->name);
- /* Return zobject->value.obj just to satisfy compiler */
- return zobject->value.obj;
-}
-
-static zend_function_entry dom_functions[] = {
- PHP_FE(dom_import_simplexml, NULL)
- {NULL, NULL, NULL}
-};
-
-static zend_object_handlers* dom_get_obj_handlers(TSRMLS_D) {
- if (EG(ze1_compatibility_mode)) {
- return &dom_ze1_object_handlers;
- } else {
- return &dom_object_handlers;
- }
-}
-
-zend_module_entry dom_module_entry = {
- STANDARD_MODULE_HEADER,
- "dom",
- dom_functions,
- PHP_MINIT(dom),
- PHP_MSHUTDOWN(dom),
- NULL,
- NULL,
- PHP_MINFO(dom),
- DOM_API_VERSION, /* Extension versionnumber */
- STANDARD_MODULE_PROPERTIES
-};
-
-#ifdef COMPILE_DL_DOM
-ZEND_GET_MODULE(dom)
-#endif
-
-/* {{{ PHP_MINIT_FUNCTION(dom) */
-PHP_MINIT_FUNCTION(dom)
-{
- zend_class_entry ce;
-
- memcpy(&dom_object_handlers, zend_get_std_object_handlers(), sizeof(zend_object_handlers));
- dom_object_handlers.read_property = dom_read_property;
- dom_object_handlers.write_property = dom_write_property;
- dom_object_handlers.get_property_ptr_ptr = NULL;
- dom_object_handlers.clone_obj = dom_objects_store_clone_obj;
-
- memcpy(&dom_ze1_object_handlers, zend_get_std_object_handlers(), sizeof(zend_object_handlers));
- dom_ze1_object_handlers.read_property = dom_read_property;
- dom_ze1_object_handlers.write_property = dom_write_property;
- dom_ze1_object_handlers.get_property_ptr_ptr = NULL;
- dom_ze1_object_handlers.clone_obj = dom_objects_ze1_clone_obj;
-
- zend_hash_init(&classes, 0, NULL, NULL, 1);
-
- INIT_CLASS_ENTRY(ce, "DOMException", php_dom_domexception_class_functions);
- dom_domexception_class_entry = zend_register_internal_class_ex(&ce, zend_exception_get_default(), NULL TSRMLS_CC);
- dom_domexception_class_entry->ce_flags |= ZEND_ACC_FINAL;
- zend_declare_property_long(dom_domexception_class_entry, "code", sizeof("code")-1, 0, ZEND_ACC_PUBLIC TSRMLS_CC);
-
- REGISTER_DOM_CLASS(ce, "DOMStringList", NULL, php_dom_domstringlist_class_functions, dom_domstringlist_class_entry);
-
- zend_hash_init(&dom_domstringlist_prop_handlers, 0, NULL, NULL, 1);
- dom_register_prop_handler(&dom_domstringlist_prop_handlers, "length", dom_domstringlist_length_read, NULL TSRMLS_CC);
- zend_hash_add(&classes, ce.name, ce.name_length + 1, &dom_domstringlist_prop_handlers, sizeof(dom_domstringlist_prop_handlers), NULL);
-
- REGISTER_DOM_CLASS(ce, "DOMNameList", NULL, php_dom_namelist_class_functions, dom_namelist_class_entry);
-
- zend_hash_init(&dom_namelist_prop_handlers, 0, NULL, NULL, 1);
- dom_register_prop_handler(&dom_namelist_prop_handlers, "length", dom_namelist_length_read, NULL TSRMLS_CC);
- zend_hash_add(&classes, ce.name, ce.name_length + 1, &dom_namelist_prop_handlers, sizeof(dom_namelist_prop_handlers), NULL);
-
- REGISTER_DOM_CLASS(ce, "DOMImplementationList", NULL, php_dom_domimplementationlist_class_functions, dom_domimplementationlist_class_entry);
-
- zend_hash_init(&dom_domimplementationlist_prop_handlers, 0, NULL, NULL, 1);
- dom_register_prop_handler(&dom_domimplementationlist_prop_handlers, "length", dom_domimplementationlist_length_read, NULL TSRMLS_CC);
- zend_hash_add(&classes, ce.name, ce.name_length + 1, &dom_domimplementationlist_prop_handlers, sizeof(dom_domimplementationlist_prop_handlers), NULL);
-
- REGISTER_DOM_CLASS(ce, "DOMImplementationSource", NULL, php_dom_domimplementationsource_class_functions, dom_domimplementationsource_class_entry);
- REGISTER_DOM_CLASS(ce, "DOMImplementation", NULL, php_dom_domimplementation_class_functions, dom_domimplementation_class_entry);
-
- REGISTER_DOM_CLASS(ce, "DOMNode", NULL, php_dom_node_class_functions, dom_node_class_entry);
-
- zend_hash_init(&dom_node_prop_handlers, 0, NULL, NULL, 1);
- dom_register_prop_handler(&dom_node_prop_handlers, "nodeName", dom_node_node_name_read, NULL TSRMLS_CC);
- dom_register_prop_handler(&dom_node_prop_handlers, "nodeValue", dom_node_node_value_read, dom_node_node_value_write TSRMLS_CC);
- dom_register_prop_handler(&dom_node_prop_handlers, "nodeType", dom_node_node_type_read, NULL TSRMLS_CC);
- dom_register_prop_handler(&dom_node_prop_handlers, "parentNode", dom_node_parent_node_read, NULL TSRMLS_CC);
- dom_register_prop_handler(&dom_node_prop_handlers, "childNodes", dom_node_child_nodes_read, NULL TSRMLS_CC);
- dom_register_prop_handler(&dom_node_prop_handlers, "firstChild", dom_node_first_child_read, NULL TSRMLS_CC);
- dom_register_prop_handler(&dom_node_prop_handlers, "lastChild", dom_node_last_child_read, NULL TSRMLS_CC);
- dom_register_prop_handler(&dom_node_prop_handlers, "previousSibling", dom_node_previous_sibling_read, NULL TSRMLS_CC);
- dom_register_prop_handler(&dom_node_prop_handlers, "nextSibling", dom_node_next_sibling_read, NULL TSRMLS_CC);
- dom_register_prop_handler(&dom_node_prop_handlers, "attributes", dom_node_attributes_read, NULL TSRMLS_CC);
- dom_register_prop_handler(&dom_node_prop_handlers, "ownerDocument", dom_node_owner_document_read, NULL TSRMLS_CC);
- dom_register_prop_handler(&dom_node_prop_handlers, "namespaceURI", dom_node_namespace_uri_read, NULL TSRMLS_CC);
- dom_register_prop_handler(&dom_node_prop_handlers, "prefix", dom_node_prefix_read, dom_node_prefix_write TSRMLS_CC);
- dom_register_prop_handler(&dom_node_prop_handlers, "localName", dom_node_local_name_read, NULL TSRMLS_CC);
- dom_register_prop_handler(&dom_node_prop_handlers, "baseURI", dom_node_base_uri_read, NULL TSRMLS_CC);
- dom_register_prop_handler(&dom_node_prop_handlers, "textContent", dom_node_text_content_read, dom_node_text_content_write TSRMLS_CC);
- zend_hash_add(&classes, ce.name, ce.name_length + 1, &dom_node_prop_handlers, sizeof(dom_node_prop_handlers), NULL);
-
- REGISTER_DOM_CLASS(ce, "DOMNameSpaceNode", NULL, NULL, dom_namespace_node_class_entry);
-
- zend_hash_init(&dom_namespace_node_prop_handlers, 0, NULL, NULL, 1);
- dom_register_prop_handler(&dom_namespace_node_prop_handlers, "nodeName", dom_node_node_name_read, NULL TSRMLS_CC);
- dom_register_prop_handler(&dom_namespace_node_prop_handlers, "nodeValue", dom_node_node_value_read, NULL TSRMLS_CC);
- dom_register_prop_handler(&dom_namespace_node_prop_handlers, "nodeType", dom_node_node_type_read, NULL TSRMLS_CC);
- dom_register_prop_handler(&dom_namespace_node_prop_handlers, "prefix", dom_node_prefix_read, NULL TSRMLS_CC);
- dom_register_prop_handler(&dom_namespace_node_prop_handlers, "localName", dom_node_local_name_read, NULL TSRMLS_CC);
- dom_register_prop_handler(&dom_namespace_node_prop_handlers, "namespaceURI", dom_node_namespace_uri_read, NULL TSRMLS_CC);
- dom_register_prop_handler(&dom_namespace_node_prop_handlers, "ownerDocument", dom_node_owner_document_read, NULL TSRMLS_CC);
- dom_register_prop_handler(&dom_namespace_node_prop_handlers, "parentNode", dom_node_parent_node_read, NULL TSRMLS_CC);
- zend_hash_add(&classes, ce.name, ce.name_length + 1, &dom_namespace_node_prop_handlers, sizeof(dom_namespace_node_prop_handlers), NULL);
-
- REGISTER_DOM_CLASS(ce, "DOMDocumentFragment", dom_node_class_entry, php_dom_documentfragment_class_functions, dom_documentfragment_class_entry);
- zend_hash_add(&classes, ce.name, ce.name_length + 1, &dom_node_prop_handlers, sizeof(dom_node_prop_handlers), NULL);
-
- REGISTER_DOM_CLASS(ce, "DOMDocument", dom_node_class_entry, php_dom_document_class_functions, dom_document_class_entry);
- zend_hash_init(&dom_document_prop_handlers, 0, NULL, NULL, 1);
- dom_register_prop_handler(&dom_document_prop_handlers, "doctype", dom_document_doctype_read, NULL TSRMLS_CC);
- dom_register_prop_handler(&dom_document_prop_handlers, "implementation", dom_document_implementation_read, NULL TSRMLS_CC);
- dom_register_prop_handler(&dom_document_prop_handlers, "documentElement", dom_document_document_element_read, NULL TSRMLS_CC);
-/* actualEncoding currently set as read only alias to encoding
- dom_register_prop_handler(&dom_document_prop_handlers, "actualEncoding", dom_document_actual_encoding_read, dom_document_actual_encoding_write TSRMLS_CC); */
- dom_register_prop_handler(&dom_document_prop_handlers, "actualEncoding", dom_document_encoding_read, NULL TSRMLS_CC);
- dom_register_prop_handler(&dom_document_prop_handlers, "encoding", dom_document_encoding_read, dom_document_encoding_write TSRMLS_CC);
- dom_register_prop_handler(&dom_document_prop_handlers, "standalone", dom_document_standalone_read, dom_document_standalone_write TSRMLS_CC);
- dom_register_prop_handler(&dom_document_prop_handlers, "version", dom_document_version_read, dom_document_version_write TSRMLS_CC);
- dom_register_prop_handler(&dom_document_prop_handlers, "strictErrorChecking", dom_document_strict_error_checking_read, dom_document_strict_error_checking_write TSRMLS_CC);
- dom_register_prop_handler(&dom_document_prop_handlers, "documentURI", dom_document_document_uri_read, dom_document_document_uri_write TSRMLS_CC);
- dom_register_prop_handler(&dom_document_prop_handlers, "config", dom_document_config_read, NULL TSRMLS_CC);
- dom_register_prop_handler(&dom_document_prop_handlers, "formatOutput", dom_document_format_output_read, dom_document_format_output_write TSRMLS_CC);
- dom_register_prop_handler(&dom_document_prop_handlers, "validateOnParse", dom_document_validate_on_parse_read, dom_document_validate_on_parse_write TSRMLS_CC);
- dom_register_prop_handler(&dom_document_prop_handlers, "resolveExternals", dom_document_resolve_externals_read, dom_document_resolve_externals_write TSRMLS_CC);
- dom_register_prop_handler(&dom_document_prop_handlers, "preserveWhiteSpace", dom_document_preserve_whitespace_read, dom_document_preserve_whitespace_write TSRMLS_CC);
- dom_register_prop_handler(&dom_document_prop_handlers, "recover", dom_document_recover_read, dom_document_recover_write TSRMLS_CC);
- dom_register_prop_handler(&dom_document_prop_handlers, "substituteEntities", dom_document_substitue_entities_read, dom_document_substitue_entities_write TSRMLS_CC);
-
- zend_hash_merge(&dom_document_prop_handlers, &dom_node_prop_handlers, NULL, NULL, sizeof(dom_prop_handler), 0);
- zend_hash_add(&classes, ce.name, ce.name_length + 1, &dom_document_prop_handlers, sizeof(dom_document_prop_handlers), NULL);
-
- INIT_CLASS_ENTRY(ce, "DOMNodeList", php_dom_nodelist_class_functions);
- ce.create_object = dom_nnodemap_objects_new;
- dom_nodelist_class_entry = zend_register_internal_class_ex(&ce, NULL, NULL TSRMLS_CC);
- dom_nodelist_class_entry->get_iterator = php_dom_get_iterator;
-
- zend_hash_init(&dom_nodelist_prop_handlers, 0, NULL, NULL, 1);
- dom_register_prop_handler(&dom_nodelist_prop_handlers, "length", dom_nodelist_length_read, NULL TSRMLS_CC);
- zend_hash_add(&classes, ce.name, ce.name_length + 1, &dom_nodelist_prop_handlers, sizeof(dom_nodelist_prop_handlers), NULL);
-
- INIT_CLASS_ENTRY(ce, "DOMNamedNodeMap", php_dom_namednodemap_class_functions);
- ce.create_object = dom_nnodemap_objects_new;
- dom_namednodemap_class_entry = zend_register_internal_class_ex(&ce, NULL, NULL TSRMLS_CC);
- dom_namednodemap_class_entry->get_iterator = php_dom_get_iterator;
-
- zend_hash_init(&dom_namednodemap_prop_handlers, 0, NULL, NULL, 1);
- dom_register_prop_handler(&dom_namednodemap_prop_handlers, "length", dom_namednodemap_length_read, NULL TSRMLS_CC);
- zend_hash_add(&classes, ce.name, ce.name_length + 1, &dom_namednodemap_prop_handlers, sizeof(dom_namednodemap_prop_handlers), NULL);
-
- REGISTER_DOM_CLASS(ce, "DOMCharacterData", dom_node_class_entry, php_dom_characterdata_class_functions, dom_characterdata_class_entry);
-
- zend_hash_init(&dom_characterdata_prop_handlers, 0, NULL, NULL, 1);
- dom_register_prop_handler(&dom_characterdata_prop_handlers, "data", dom_characterdata_data_read, dom_characterdata_data_write TSRMLS_CC);
- dom_register_prop_handler(&dom_characterdata_prop_handlers, "length", dom_characterdata_length_read, NULL TSRMLS_CC);
- zend_hash_merge(&dom_characterdata_prop_handlers, &dom_node_prop_handlers, NULL, NULL, sizeof(dom_prop_handler), 0);
- zend_hash_add(&classes, ce.name, ce.name_length + 1, &dom_characterdata_prop_handlers, sizeof(dom_characterdata_prop_handlers), NULL);
-
- REGISTER_DOM_CLASS(ce, "DOMAttr", dom_node_class_entry, php_dom_attr_class_functions, dom_attr_class_entry);
-
- zend_hash_init(&dom_attr_prop_handlers, 0, NULL, NULL, 1);
- dom_register_prop_handler(&dom_attr_prop_handlers, "name", dom_attr_name_read, NULL TSRMLS_CC);
- dom_register_prop_handler(&dom_attr_prop_handlers, "specified", dom_attr_specified_read, NULL TSRMLS_CC);
- dom_register_prop_handler(&dom_attr_prop_handlers, "value", dom_attr_value_read, dom_attr_value_write TSRMLS_CC);
- dom_register_prop_handler(&dom_attr_prop_handlers, "ownerElement", dom_attr_owner_element_read, NULL TSRMLS_CC);
- dom_register_prop_handler(&dom_attr_prop_handlers, "schemaTypeInfo", dom_attr_schema_type_info_read, NULL TSRMLS_CC);
- zend_hash_merge(&dom_attr_prop_handlers, &dom_node_prop_handlers, NULL, NULL, sizeof(dom_prop_handler), 0);
- zend_hash_add(&classes, ce.name, ce.name_length + 1, &dom_attr_prop_handlers, sizeof(dom_attr_prop_handlers), NULL);
-
- REGISTER_DOM_CLASS(ce, "DOMElement", dom_node_class_entry, php_dom_element_class_functions, dom_element_class_entry);
-
- zend_hash_init(&dom_element_prop_handlers, 0, NULL, NULL, 1);
- dom_register_prop_handler(&dom_element_prop_handlers, "tagName", dom_element_tag_name_read, NULL TSRMLS_CC);
- dom_register_prop_handler(&dom_element_prop_handlers, "schemaTypeInfo", dom_element_schema_type_info_read, NULL TSRMLS_CC);
- zend_hash_merge(&dom_element_prop_handlers, &dom_node_prop_handlers, NULL, NULL, sizeof(dom_prop_handler), 0);
- zend_hash_add(&classes, ce.name, ce.name_length + 1, &dom_element_prop_handlers, sizeof(dom_element_prop_handlers), NULL);
-
- REGISTER_DOM_CLASS(ce, "DOMText", dom_characterdata_class_entry, php_dom_text_class_functions, dom_text_class_entry);
-
- zend_hash_init(&dom_text_prop_handlers, 0, NULL, NULL, 1);
- dom_register_prop_handler(&dom_text_prop_handlers, "wholeText", dom_text_whole_text_read, NULL TSRMLS_CC);
- zend_hash_merge(&dom_text_prop_handlers, &dom_characterdata_prop_handlers, NULL, NULL, sizeof(dom_prop_handler), 0);
- zend_hash_add(&classes, ce.name, ce.name_length + 1, &dom_text_prop_handlers, sizeof(dom_text_prop_handlers), NULL);
-
- REGISTER_DOM_CLASS(ce, "DOMComment", dom_characterdata_class_entry, php_dom_comment_class_functions, dom_comment_class_entry);
- zend_hash_add(&classes, ce.name, ce.name_length + 1, &dom_characterdata_prop_handlers, sizeof(dom_typeinfo_prop_handlers), NULL);
-
- REGISTER_DOM_CLASS(ce, "DOMTypeinfo", NULL, php_dom_typeinfo_class_functions, dom_typeinfo_class_entry);
-
- zend_hash_init(&dom_typeinfo_prop_handlers, 0, NULL, NULL, 1);
- dom_register_prop_handler(&dom_typeinfo_prop_handlers, "typeName", dom_typeinfo_type_name_read, NULL TSRMLS_CC);
- dom_register_prop_handler(&dom_typeinfo_prop_handlers, "typeNamespace", dom_typeinfo_type_namespace_read, NULL TSRMLS_CC);
- zend_hash_add(&classes, ce.name, ce.name_length + 1, &dom_typeinfo_prop_handlers, sizeof(dom_typeinfo_prop_handlers), NULL);
-
- REGISTER_DOM_CLASS(ce, "DOMUserDataHandler", NULL, php_dom_userdatahandler_class_functions, dom_userdatahandler_class_entry);
- REGISTER_DOM_CLASS(ce, "DOMDomError", NULL, php_dom_domerror_class_functions, dom_domerror_class_entry);
-
- zend_hash_init(&dom_domerror_prop_handlers, 0, NULL, NULL, 1);
- dom_register_prop_handler(&dom_domerror_prop_handlers, "severity", dom_domerror_severity_read, NULL TSRMLS_CC);
- dom_register_prop_handler(&dom_domerror_prop_handlers, "message", dom_domerror_message_read, NULL TSRMLS_CC);
- dom_register_prop_handler(&dom_domerror_prop_handlers, "type", dom_domerror_type_read, NULL TSRMLS_CC);
- dom_register_prop_handler(&dom_domerror_prop_handlers, "relatedException", dom_domerror_related_exception_read, NULL TSRMLS_CC);
- dom_register_prop_handler(&dom_domerror_prop_handlers, "related_data", dom_domerror_related_data_read, NULL TSRMLS_CC);
- dom_register_prop_handler(&dom_domerror_prop_handlers, "location", dom_domerror_location_read, NULL TSRMLS_CC);
- zend_hash_add(&classes, ce.name, ce.name_length + 1, &dom_domerror_prop_handlers, sizeof(dom_domerror_prop_handlers), NULL);
-
- REGISTER_DOM_CLASS(ce, "DOMErrorHandler", NULL, php_dom_domerrorhandler_class_functions, dom_domerrorhandler_class_entry);
- REGISTER_DOM_CLASS(ce, "DOMLocator", NULL, php_dom_domlocator_class_functions, dom_domlocator_class_entry);
-
- zend_hash_init(&dom_domlocator_prop_handlers, 0, NULL, NULL, 1);
- dom_register_prop_handler(&dom_domlocator_prop_handlers, "lineNumber", dom_domlocator_line_number_read, NULL TSRMLS_CC);
- dom_register_prop_handler(&dom_domlocator_prop_handlers, "columnNumber", dom_domlocator_column_number_read, NULL TSRMLS_CC);
- dom_register_prop_handler(&dom_domlocator_prop_handlers, "offset", dom_domlocator_offset_read, NULL TSRMLS_CC);
- dom_register_prop_handler(&dom_domlocator_prop_handlers, "relatedNode", dom_domlocator_related_node_read, NULL TSRMLS_CC);
- dom_register_prop_handler(&dom_domlocator_prop_handlers, "uri", dom_domlocator_uri_read, NULL TSRMLS_CC);
- zend_hash_add(&classes, ce.name, ce.name_length + 1, &dom_domlocator_prop_handlers, sizeof(dom_domlocator_prop_handlers), NULL);
-
- REGISTER_DOM_CLASS(ce, "DOMConfiguration", NULL, php_dom_domconfiguration_class_functions, dom_domconfiguration_class_entry);
- REGISTER_DOM_CLASS(ce, "DOMCdataSection", dom_text_class_entry, php_dom_cdatasection_class_functions, dom_cdatasection_class_entry);
- zend_hash_add(&classes, ce.name, ce.name_length + 1, &dom_text_prop_handlers, sizeof(dom_documenttype_prop_handlers), NULL);
-
- REGISTER_DOM_CLASS(ce, "DOMDocumentType", dom_node_class_entry, php_dom_documenttype_class_functions, dom_documenttype_class_entry);
-
- zend_hash_init(&dom_documenttype_prop_handlers, 0, NULL, NULL, 1);
- dom_register_prop_handler(&dom_documenttype_prop_handlers, "name", dom_documenttype_name_read, NULL TSRMLS_CC);
- dom_register_prop_handler(&dom_documenttype_prop_handlers, "entities", dom_documenttype_entities_read, NULL TSRMLS_CC);
- dom_register_prop_handler(&dom_documenttype_prop_handlers, "notations", dom_documenttype_notations_read, NULL TSRMLS_CC);
- dom_register_prop_handler(&dom_documenttype_prop_handlers, "publicId", dom_documenttype_public_id_read, NULL TSRMLS_CC);
- dom_register_prop_handler(&dom_documenttype_prop_handlers, "systemId", dom_documenttype_system_id_read, NULL TSRMLS_CC);
- dom_register_prop_handler(&dom_documenttype_prop_handlers, "internalSubset", dom_documenttype_internal_subset_read, NULL TSRMLS_CC);
- zend_hash_merge(&dom_documenttype_prop_handlers, &dom_node_prop_handlers, NULL, NULL, sizeof(dom_prop_handler), 0);
- zend_hash_add(&classes, ce.name, ce.name_length + 1, &dom_documenttype_prop_handlers, sizeof(dom_documenttype_prop_handlers), NULL);
-
- REGISTER_DOM_CLASS(ce, "DOMNotation", NULL, php_dom_notation_class_functions, dom_notation_class_entry);
-
- zend_hash_init(&dom_notation_prop_handlers, 0, NULL, NULL, 1);
- dom_register_prop_handler(&dom_notation_prop_handlers, "publicId", dom_notation_public_id_read, NULL TSRMLS_CC);
- dom_register_prop_handler(&dom_notation_prop_handlers, "systemId", dom_notation_system_id_read, NULL TSRMLS_CC);
- /* Notation nodes are special */
- dom_register_prop_handler(&dom_notation_prop_handlers, "nodeName", dom_node_node_name_read, NULL TSRMLS_CC);
- dom_register_prop_handler(&dom_notation_prop_handlers, "nodeValue", dom_node_node_value_read, dom_node_node_value_write TSRMLS_CC);
- dom_register_prop_handler(&dom_notation_prop_handlers, "attributes", dom_node_attributes_read, NULL TSRMLS_CC);
- zend_hash_add(&classes, ce.name, ce.name_length + 1, &dom_notation_prop_handlers, sizeof(dom_notation_prop_handlers), NULL);
-
- REGISTER_DOM_CLASS(ce, "DOMEntity", dom_node_class_entry, php_dom_entity_class_functions, dom_entity_class_entry);
-
- zend_hash_init(&dom_entity_prop_handlers, 0, NULL, NULL, 1);
- dom_register_prop_handler(&dom_entity_prop_handlers, "publicId", dom_entity_public_id_read, NULL TSRMLS_CC);
- dom_register_prop_handler(&dom_entity_prop_handlers, "systemId", dom_entity_system_id_read, NULL TSRMLS_CC);
- dom_register_prop_handler(&dom_entity_prop_handlers, "notationName", dom_entity_notation_name_read, NULL TSRMLS_CC);
- dom_register_prop_handler(&dom_entity_prop_handlers, "actualEncoding", dom_entity_actual_encoding_read, dom_entity_actual_encoding_write TSRMLS_CC);
- dom_register_prop_handler(&dom_entity_prop_handlers, "encoding", dom_entity_encoding_read, dom_entity_encoding_write TSRMLS_CC);
- dom_register_prop_handler(&dom_entity_prop_handlers, "version", dom_entity_version_read, dom_entity_version_write TSRMLS_CC);
- zend_hash_merge(&dom_entity_prop_handlers, &dom_node_prop_handlers, NULL, NULL, sizeof(dom_prop_handler), 0);
-
- zend_hash_add(&classes, ce.name, ce.name_length + 1, &dom_entity_prop_handlers, sizeof(dom_entity_prop_handlers), NULL);
-
- REGISTER_DOM_CLASS(ce, "DOMEntityReference", dom_node_class_entry, php_dom_entityreference_class_functions, dom_entityreference_class_entry);
- zend_hash_add(&classes, ce.name, ce.name_length + 1, &dom_node_prop_handlers, sizeof(dom_entity_prop_handlers), NULL);
-
- REGISTER_DOM_CLASS(ce, "DOMProcessingInstruction", dom_node_class_entry, php_dom_processinginstruction_class_functions, dom_processinginstruction_class_entry);
-
- zend_hash_init(&dom_processinginstruction_prop_handlers, 0, NULL, NULL, 1);
- dom_register_prop_handler(&dom_processinginstruction_prop_handlers, "target", dom_processinginstruction_target_read, NULL TSRMLS_CC);
- dom_register_prop_handler(&dom_processinginstruction_prop_handlers, "data", dom_processinginstruction_data_read, dom_processinginstruction_data_write TSRMLS_CC);
- zend_hash_merge(&dom_processinginstruction_prop_handlers, &dom_node_prop_handlers, NULL, NULL, sizeof(dom_prop_handler), 0);
- zend_hash_add(&classes, ce.name, ce.name_length + 1, &dom_processinginstruction_prop_handlers, sizeof(dom_processinginstruction_prop_handlers), NULL);
-
- REGISTER_DOM_CLASS(ce, "DOMStringExtend", NULL, php_dom_string_extend_class_functions, dom_string_extend_class_entry);
-
-#if defined(LIBXML_XPATH_ENABLED)
- INIT_CLASS_ENTRY(ce, "DOMXPath", php_dom_xpath_class_functions);
- ce.create_object = dom_xpath_objects_new;
- dom_xpath_class_entry = zend_register_internal_class_ex(&ce, NULL, NULL TSRMLS_CC);
-
- zend_hash_init(&dom_xpath_prop_handlers, 0, NULL, NULL, 1);
- dom_register_prop_handler(&dom_xpath_prop_handlers, "document", dom_xpath_document_read, NULL TSRMLS_CC);
- zend_hash_add(&classes, ce.name, ce.name_length + 1, &dom_xpath_prop_handlers, sizeof(dom_xpath_prop_handlers), NULL);
-#endif
-
- REGISTER_LONG_CONSTANT("XML_ELEMENT_NODE", XML_ELEMENT_NODE, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("XML_ATTRIBUTE_NODE", XML_ATTRIBUTE_NODE, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("XML_TEXT_NODE", XML_TEXT_NODE, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("XML_CDATA_SECTION_NODE", XML_CDATA_SECTION_NODE, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("XML_ENTITY_REF_NODE", XML_ENTITY_REF_NODE, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("XML_ENTITY_NODE", XML_ENTITY_NODE, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("XML_PI_NODE", XML_PI_NODE, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("XML_COMMENT_NODE", XML_COMMENT_NODE, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("XML_DOCUMENT_NODE", XML_DOCUMENT_NODE, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("XML_DOCUMENT_TYPE_NODE", XML_DOCUMENT_TYPE_NODE, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("XML_DOCUMENT_FRAG_NODE", XML_DOCUMENT_FRAG_NODE, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("XML_NOTATION_NODE", XML_NOTATION_NODE, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("XML_HTML_DOCUMENT_NODE", XML_HTML_DOCUMENT_NODE, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("XML_DTD_NODE", XML_DTD_NODE, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("XML_ELEMENT_DECL_NODE", XML_ELEMENT_DECL, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("XML_ATTRIBUTE_DECL_NODE", XML_ATTRIBUTE_DECL, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("XML_ENTITY_DECL_NODE", XML_ENTITY_DECL, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("XML_NAMESPACE_DECL_NODE", XML_NAMESPACE_DECL, CONST_CS | CONST_PERSISTENT);
-#ifdef XML_GLOBAL_NAMESPACE
- REGISTER_LONG_CONSTANT("XML_GLOBAL_NAMESPACE", XML_GLOBAL_NAMESPACE, CONST_CS | CONST_PERSISTENT);
-#endif
- REGISTER_LONG_CONSTANT("XML_LOCAL_NAMESPACE", XML_LOCAL_NAMESPACE, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("XML_ATTRIBUTE_CDATA", XML_ATTRIBUTE_CDATA, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("XML_ATTRIBUTE_ID", XML_ATTRIBUTE_ID, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("XML_ATTRIBUTE_IDREF", XML_ATTRIBUTE_IDREF, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("XML_ATTRIBUTE_IDREFS", XML_ATTRIBUTE_IDREFS, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("XML_ATTRIBUTE_ENTITY", XML_ATTRIBUTE_ENTITIES, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("XML_ATTRIBUTE_NMTOKEN", XML_ATTRIBUTE_NMTOKEN, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("XML_ATTRIBUTE_NMTOKENS", XML_ATTRIBUTE_NMTOKENS, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("XML_ATTRIBUTE_ENUMERATION", XML_ATTRIBUTE_ENUMERATION, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("XML_ATTRIBUTE_NOTATION", XML_ATTRIBUTE_NOTATION, CONST_CS | CONST_PERSISTENT);
-
- /* DOMException Codes */
- REGISTER_LONG_CONSTANT("DOM_PHP_ERR", PHP_ERR, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("DOM_INDEX_SIZE_ERR", INDEX_SIZE_ERR, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("DOMSTRING_SIZE_ERR", DOMSTRING_SIZE_ERR, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("DOM_HIERARCHY_REQUEST_ERR", HIERARCHY_REQUEST_ERR, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("DOM_WRONG_DOCUMENT_ERR", WRONG_DOCUMENT_ERR, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("DOM_INVALID_CHARACTER_ERR", INVALID_CHARACTER_ERR, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("DOM_NO_DATA_ALLOWED_ERR", NO_DATA_ALLOWED_ERR, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("DOM_NO_MODIFICATION_ALLOWED_ERR", NO_MODIFICATION_ALLOWED_ERR, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("DOM_NOT_FOUND_ERR", NOT_FOUND_ERR, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("DOM_NOT_SUPPORTED_ERR", NOT_SUPPORTED_ERR, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("DOM_INUSE_ATTRIBUTE_ERR", INUSE_ATTRIBUTE_ERR, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("DOM_INVALID_STATE_ERR", INVALID_STATE_ERR, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("DOM_SYNTAX_ERR", SYNTAX_ERR, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("DOM_INVALID_MODIFICATION_ERR", INVALID_MODIFICATION_ERR, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("DOM_NAMESPACE_ERR", NAMESPACE_ERR, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("DOM_INVALID_ACCESS_ERR", INVALID_ACCESS_ERR, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("DOM_VALIDATION_ERR", VALIDATION_ERR, CONST_CS | CONST_PERSISTENT);
-
- php_libxml_register_export(dom_node_class_entry, php_dom_export_node);
-
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ */
-PHP_MINFO_FUNCTION(dom)
-{
- php_info_print_table_start();
- php_info_print_table_row(2, "DOM/XML", "enabled");
- php_info_print_table_row(2, "DOM/XML API Version", DOM_API_VERSION);
- php_info_print_table_row(2, "libxml Version", LIBXML_DOTTED_VERSION);
-#if defined(LIBXML_HTML_ENABLED)
- php_info_print_table_row(2, "HTML Support", "enabled");
-#endif
-#if defined(LIBXML_XPATH_ENABLED)
- php_info_print_table_row(2, "XPath Support", "enabled");
-#endif
-#if defined(LIBXML_XPTR_ENABLED)
- php_info_print_table_row(2, "XPointer Support", "enabled");
-#endif
-#ifdef LIBXML_SCHEMAS_ENABLED
- php_info_print_table_row(2, "Schema Support", "enabled");
- php_info_print_table_row(2, "RelaxNG Support", "enabled");
-#endif
- php_info_print_table_end();
-}
-/* }}} */
-
-PHP_MSHUTDOWN_FUNCTION(dom)
-{
- zend_hash_destroy(&dom_domstringlist_prop_handlers);
- zend_hash_destroy(&dom_namelist_prop_handlers);
- zend_hash_destroy(&dom_domimplementationlist_prop_handlers);
- zend_hash_destroy(&dom_document_prop_handlers);
- zend_hash_destroy(&dom_node_prop_handlers);
- zend_hash_destroy(&dom_namespace_node_prop_handlers);
- zend_hash_destroy(&dom_nodelist_prop_handlers);
- zend_hash_destroy(&dom_namednodemap_prop_handlers);
- zend_hash_destroy(&dom_characterdata_prop_handlers);
- zend_hash_destroy(&dom_attr_prop_handlers);
- zend_hash_destroy(&dom_element_prop_handlers);
- zend_hash_destroy(&dom_text_prop_handlers);
- zend_hash_destroy(&dom_typeinfo_prop_handlers);
- zend_hash_destroy(&dom_domerror_prop_handlers);
- zend_hash_destroy(&dom_domlocator_prop_handlers);
- zend_hash_destroy(&dom_documenttype_prop_handlers);
- zend_hash_destroy(&dom_notation_prop_handlers);
- zend_hash_destroy(&dom_entity_prop_handlers);
- zend_hash_destroy(&dom_processinginstruction_prop_handlers);
-#if defined(LIBXML_XPATH_ENABLED)
- zend_hash_destroy(&dom_xpath_prop_handlers);
-#endif
- zend_hash_destroy(&classes);
-
-/* If you want do find memleaks in this module, compile libxml2 with --with-mem-debug and
- uncomment the following line, this will tell you the amount of not freed memory
- and the total used memory into apaches error_log */
-/* xmlMemoryDump();*/
-
- return SUCCESS;
-}
-
-/* {{{ node_list_unlink */
-void node_list_unlink(xmlNodePtr node TSRMLS_DC)
-{
- dom_object *wrapper;
-
- while (node != NULL) {
-
- wrapper = php_dom_object_get_data(node);
-
- if (wrapper != NULL ) {
- xmlUnlinkNode(node);
- } else {
- node_list_unlink(node->children TSRMLS_CC);
-
- switch (node->type) {
- case XML_ATTRIBUTE_DECL:
- case XML_DTD_NODE:
- case XML_DOCUMENT_TYPE_NODE:
- case XML_ENTITY_DECL:
- case XML_ATTRIBUTE_NODE:
- break;
- default:
- node_list_unlink((xmlNodePtr) node->properties TSRMLS_CC);
- }
-
- }
-
- node = node->next;
- }
-}
-/* }}} end node_list_unlink */
-
-#if defined(LIBXML_XPATH_ENABLED)
-/* {{{ dom_xpath_objects_free_storage */
-void dom_xpath_objects_free_storage(void *object TSRMLS_DC)
-{
- dom_object *intern = (dom_object *)object;
-
- zend_hash_destroy(intern->std.properties);
- FREE_HASHTABLE(intern->std.properties);
-
- if (intern->ptr != NULL) {
- xmlXPathFreeContext((xmlXPathContextPtr) intern->ptr);
- php_libxml_decrement_doc_ref((php_libxml_node_object *) intern TSRMLS_CC);
- intern->ptr = NULL;
- }
-
- efree(object);
-}
-/* }}} */
-#endif
-
-/* {{{ dom_objects_free_storage */
-void dom_objects_free_storage(void *object TSRMLS_DC)
-{
- dom_object *intern = (dom_object *)object;
- int retcount;
-
- zend_hash_destroy(intern->std.properties);
- FREE_HASHTABLE(intern->std.properties);
-
- if (intern->ptr != NULL && ((php_libxml_node_ptr *)intern->ptr)->node != NULL) {
- if (((xmlNodePtr) ((php_libxml_node_ptr *)intern->ptr)->node)->type != XML_DOCUMENT_NODE && ((xmlNodePtr) ((php_libxml_node_ptr *)intern->ptr)->node)->type != XML_HTML_DOCUMENT_NODE) {
- php_libxml_node_decrement_resource((php_libxml_node_object *) intern TSRMLS_CC);
- } else {
- php_libxml_decrement_node_ptr((php_libxml_node_object *) intern TSRMLS_CC);
- retcount = php_libxml_decrement_doc_ref((php_libxml_node_object *)intern TSRMLS_CC);
- }
- intern->ptr = NULL;
- }
-
- efree(object);
-}
-/* }}} */
-
-void dom_namednode_iter(dom_object *basenode, int ntype, dom_object *intern, xmlHashTablePtr ht, xmlChar *local, xmlChar *ns TSRMLS_DC)
-{
- dom_nnodemap_object *mapptr;
- zval *baseobj = NULL;
-
- mapptr = (dom_nnodemap_object *)intern->ptr;
- if (basenode) {
- MAKE_STD_ZVAL(baseobj);
- baseobj->type = IS_OBJECT;
- baseobj->is_ref = 1;
- baseobj->value.obj.handle = basenode->handle;
- baseobj->value.obj.handlers = dom_get_obj_handlers(TSRMLS_C);
- zval_copy_ctor(baseobj);
- }
- mapptr->baseobjptr = baseobj;
- mapptr->baseobj = basenode;
- mapptr->nodetype = ntype;
- mapptr->ht = ht;
- mapptr->local = local;
- mapptr->ns = ns;
-
-}
-
-static dom_object* dom_objects_set_class(zend_class_entry *class_type TSRMLS_DC)
-{
- zend_class_entry *base_class;
- zval *tmp;
- dom_object *intern;
-
- intern = emalloc(sizeof(dom_object));
- intern->std.ce = class_type;
- intern->std.in_get = 0;
- intern->std.in_set = 0;
- intern->ptr = NULL;
- intern->prop_handler = NULL;
- intern->document = NULL;
-
- base_class = class_type;
- while(base_class->type != ZEND_INTERNAL_CLASS && base_class->parent != NULL) {
- base_class = base_class->parent;
- }
-
- zend_hash_find(&classes, base_class->name, base_class->name_length + 1, (void **) &intern->prop_handler);
-
- ALLOC_HASHTABLE(intern->std.properties);
- zend_hash_init(intern->std.properties, 0, NULL, ZVAL_PTR_DTOR, 0);
- zend_hash_copy(intern->std.properties, &class_type->default_properties, (copy_ctor_func_t) zval_add_ref, (void *) &tmp, sizeof(zval *));
-
- return intern;
-}
-
-/* {{{ dom_objects_clone */
-void dom_objects_clone(void *object, void **object_clone TSRMLS_DC)
-{
- dom_object *intern = (dom_object *) object;
- dom_object *clone;
- xmlNodePtr node;
- xmlNodePtr cloned_node;
-
- clone = dom_objects_set_class(intern->std.ce TSRMLS_CC);
-
- if (instanceof_function(intern->std.ce, dom_node_class_entry TSRMLS_CC)) {
- node = (xmlNodePtr)dom_object_get_node((dom_object *) object);
- if (node != NULL) {
- cloned_node = xmlDocCopyNode(node, node->doc, 1);
- if (cloned_node != NULL) {
- /* If we cloned a document then we must create new doc proxy */
- if (cloned_node->doc == node->doc) {
- clone->document = intern->document;
- }
- php_libxml_increment_doc_ref((php_libxml_node_object *)clone, cloned_node->doc TSRMLS_CC);
- php_libxml_increment_node_ptr((php_libxml_node_object *)clone, cloned_node, NULL TSRMLS_CC);
- }
-
- }
- }
-
- *object_clone = (void *) clone;
-}
-/* }}} */
-
-/* {{{ dom_objects_new */
-zend_object_value dom_objects_new(zend_class_entry *class_type TSRMLS_DC)
-{
- zend_object_value retval;
- dom_object *intern;
-
- intern = dom_objects_set_class(class_type TSRMLS_CC);
-
- retval.handle = zend_objects_store_put(intern, NULL, (zend_objects_free_object_storage_t)dom_objects_free_storage, dom_objects_clone TSRMLS_CC);
- intern->handle = retval.handle;
- retval.handlers = dom_get_obj_handlers(TSRMLS_C);
-
- return retval;
-}
-/* }}} */
-
-#if defined(LIBXML_XPATH_ENABLED)
-/* {{{ zend_object_value dom_xpath_objects_new(zend_class_entry *class_type TSRMLS_DC) */
-zend_object_value dom_xpath_objects_new(zend_class_entry *class_type TSRMLS_DC)
-{
- zend_object_value retval;
- dom_object *intern;
-
- intern = dom_objects_set_class(class_type TSRMLS_CC);
-
- retval.handle = zend_objects_store_put(intern, NULL, (zend_objects_free_object_storage_t)dom_xpath_objects_free_storage, dom_objects_clone TSRMLS_CC);
- intern->handle = retval.handle;
- retval.handlers = dom_get_obj_handlers(TSRMLS_C);
-
- return retval;
-}
-/* }}} */
-#endif
-
-static void dom_nnodemap_object_dtor(void *object, zend_object_handle handle TSRMLS_DC)
-{
- zval *baseobj;
- dom_object *intern;
- dom_nnodemap_object *objmap;
-
- intern = (dom_object *)object;
- objmap = (dom_nnodemap_object *)intern->ptr;
-
- if (objmap) {
- if (objmap->local) {
- xmlFree(objmap->local);
- }
- if (objmap->ns) {
- xmlFree(objmap->ns);
- }
- if (objmap->baseobjptr) {
- baseobj = objmap->baseobjptr;
- zval_ptr_dtor((zval **)&baseobj);
- }
- efree(objmap);
- intern->ptr = NULL;
- }
-
-
-}
-
-void dom_nnodemap_objects_free_storage(void *object TSRMLS_DC)
-{
- dom_object *intern = (dom_object *)object;
-
- php_libxml_decrement_doc_ref((php_libxml_node_object *)intern TSRMLS_CC);
-
- zend_hash_destroy(intern->std.properties);
- FREE_HASHTABLE(intern->std.properties);
-
- efree(object);
-}
-
-zend_object_value dom_nnodemap_objects_new(zend_class_entry *class_type TSRMLS_DC)
-{
- zend_object_value retval;
- dom_object *intern;
- dom_nnodemap_object *objmap;
-
- intern = dom_objects_set_class(class_type TSRMLS_CC);
- intern->ptr = emalloc(sizeof(dom_nnodemap_object));
- objmap = (dom_nnodemap_object *)intern->ptr;
- objmap->baseobj = NULL;
- objmap->baseobjptr = NULL;
- objmap->nodetype = 0;
- objmap->ht = NULL;
- objmap->local = NULL;
- objmap->ns = NULL;
-
- retval.handle = zend_objects_store_put(intern, dom_nnodemap_object_dtor, (zend_objects_free_object_storage_t)dom_nnodemap_objects_free_storage, dom_objects_clone TSRMLS_CC);
- intern->handle = retval.handle;
- retval.handlers = dom_get_obj_handlers(TSRMLS_C);
-
- return retval;
-}
-
-void php_dom_create_interator(zval *return_value, int ce_type TSRMLS_DC)
-{
- zend_class_entry *ce;
-
- if (ce_type == DOM_NAMEDNODEMAP) {
- ce = dom_namednodemap_class_entry;
- } else {
- ce = dom_nodelist_class_entry;
- }
-
- object_init_ex(return_value, ce);
-}
-
-/* {{{ php_dom_create_object */
-zval *php_dom_create_object(xmlNodePtr obj, int *found, zval *wrapper_in, zval *return_value, dom_object *domobj TSRMLS_DC)
-{
- zval *wrapper;
- zend_class_entry *ce;
- dom_object *intern;
-
- *found = 0;
-
- if (!obj) {
- ALLOC_ZVAL(wrapper);
- ZVAL_NULL(wrapper);
- return wrapper;
- }
-
- if ((intern = (dom_object *) php_dom_object_get_data((void *) obj))) {
- return_value->type = IS_OBJECT;
- return_value->is_ref = 1;
- return_value->value.obj.handle = intern->handle;
- return_value->value.obj.handlers = dom_get_obj_handlers(TSRMLS_C);
- zval_copy_ctor(return_value);
- *found = 1;
- return return_value;
- }
-
- wrapper = return_value;
-
- switch (obj->type) {
- case XML_DOCUMENT_NODE:
- case XML_HTML_DOCUMENT_NODE:
- {
- ce = dom_document_class_entry;
- break;
- }
- case XML_DTD_NODE:
- case XML_DOCUMENT_TYPE_NODE:
- {
- ce = dom_documenttype_class_entry;
- break;
- }
- case XML_ELEMENT_NODE:
- {
- ce = dom_element_class_entry;
- break;
- }
- case XML_ATTRIBUTE_NODE:
- {
- ce = dom_attr_class_entry;
- break;
- }
- case XML_TEXT_NODE:
- {
- ce = dom_text_class_entry;
- break;
- }
- case XML_COMMENT_NODE:
- {
- ce = dom_comment_class_entry;
- break;
- }
- case XML_PI_NODE:
- {
- ce = dom_processinginstruction_class_entry;
- break;
- }
- case XML_ENTITY_REF_NODE:
- {
- ce = dom_entityreference_class_entry;
- break;
- }
- case XML_ENTITY_DECL:
- case XML_ELEMENT_DECL:
- {
- ce = dom_entity_class_entry;
- break;
- }
- case XML_CDATA_SECTION_NODE:
- {
- ce = dom_cdatasection_class_entry;
- break;
- }
- case XML_DOCUMENT_FRAG_NODE:
- {
- ce = dom_documentfragment_class_entry;
- break;
- }
- case XML_NOTATION_NODE:
- {
- ce = dom_notation_class_entry;
- break;
- }
- case XML_NAMESPACE_DECL:
- {
- ce = dom_namespace_node_class_entry;
- break;
- }
- default:
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unsupported node type: %d\n", Z_TYPE_P(obj));
- ZVAL_NULL(wrapper);
- return wrapper;
- }
-
- object_init_ex(wrapper, ce);
-
- intern = (dom_object *)zend_objects_get_address(wrapper TSRMLS_CC);
- if (obj->doc != NULL) {
- if (domobj != NULL) {
- intern->document = domobj->document;
- }
- php_libxml_increment_doc_ref((php_libxml_node_object *)intern, obj->doc TSRMLS_CC);
- }
-
- php_libxml_increment_node_ptr((php_libxml_node_object *)intern, obj, (void *)intern TSRMLS_CC);
- return (wrapper);
-}
-/* }}} end php_domobject_new */
-
-
-void php_dom_create_implementation(zval **retval TSRMLS_DC) {
- object_init_ex(*retval, dom_domimplementation_class_entry);
-}
-
-/* {{{ int dom_hierarchy(xmlNodePtr parent, xmlNodePtr child) */
-int dom_hierarchy(xmlNodePtr parent, xmlNodePtr child)
-{
- xmlNodePtr nodep;
-
- if (parent == NULL || child == NULL || child->doc != parent->doc) {
- return SUCCESS;
- }
-
- nodep = parent;
-
- while (nodep) {
- if (nodep == child) {
- return FAILURE;
- }
- nodep = nodep->parent;
- }
-
- return SUCCESS;
-}
-/* }}} end dom_hierarchy */
-
-/* {{{ dom_has_feature(char *feature, char *version) */
-int dom_has_feature(char *feature, char *version)
-{
- int retval = 0;
-
- if (!(strcmp (version, "1.0") && strcmp (version,"2.0") && strcmp(version, ""))) {
- if ((!strcasecmp(feature, "Core") && !strcmp (version, "1.0")) || !strcasecmp(feature, "XML"))
- retval = 1;
- }
-
- return retval;
-}
-/* }}} end dom_has_feature */
-
-xmlNode *dom_get_elements_by_tag_name_ns_raw(xmlNodePtr nodep, char *ns, char *local, int *cur, int index)
-{
- xmlNodePtr ret = NULL;
-
- while (nodep != NULL && (*cur <= index || index == -1)) {
- if (nodep->type == XML_ELEMENT_NODE) {
- if (xmlStrEqual(nodep->name, local) || xmlStrEqual("*", local)) {
- if (ns == NULL || (nodep->ns != NULL && (xmlStrEqual(nodep->ns->href, ns) || xmlStrEqual("*", ns)))) {
- if (*cur == index) {
- ret = nodep;
- break;
- }
- (*cur)++;
- }
- }
- ret = dom_get_elements_by_tag_name_ns_raw(nodep->children, ns, local, cur, index);
- if (ret != NULL) {
- break;
- }
- }
- nodep = nodep->next;
- }
- return ret;
-}
-/* }}} end dom_element_get_elements_by_tag_name_ns_raw */
-
-
-/* {{{ void dom_normalize (xmlNodePtr nodep TSRMLS_DC) */
-void dom_normalize (xmlNodePtr nodep TSRMLS_DC)
-{
- xmlNodePtr child, nextp, newnextp;
- xmlAttrPtr attr;
- xmlChar *strContent;
-
- child = nodep->children;
- while(child != NULL) {
- switch (child->type) {
- case XML_TEXT_NODE:
- nextp = child->next;
- while (nextp != NULL) {
- if (nextp->type == XML_TEXT_NODE) {
- newnextp = nextp->next;
- strContent = xmlNodeGetContent(nextp);
- xmlNodeAddContent(child, strContent);
- xmlFree(strContent);
- xmlUnlinkNode(nextp);
- php_libxml_node_free_resource(nextp TSRMLS_CC);
- nextp = newnextp;
- } else {
- break;
- }
- }
- break;
- case XML_ELEMENT_NODE:
- dom_normalize (child TSRMLS_CC);
- attr = child->properties;
- while (attr != NULL) {
- dom_normalize((xmlNodePtr) attr TSRMLS_CC);
- attr = attr->next;
- }
- break;
- case XML_ATTRIBUTE_NODE:
- dom_normalize (child TSRMLS_CC);
- break;
- default:
- break;
- }
- child = child->next;
- }
-}
-/* }}} end dom_normalize */
-
-
-/* {{{ void dom_set_old_ns(xmlDoc *doc, xmlNs *ns) */
-void dom_set_old_ns(xmlDoc *doc, xmlNs *ns) {
- xmlNs *cur;
-
- if (doc == NULL)
- return;
-
- if (doc->oldNs == NULL) {
- doc->oldNs = (xmlNsPtr) xmlMalloc(sizeof(xmlNs));
- if (doc->oldNs == NULL) {
- return;
- }
- memset(doc->oldNs, 0, sizeof(xmlNs));
- doc->oldNs->type = XML_LOCAL_NAMESPACE;
- doc->oldNs->href = xmlStrdup(XML_XML_NAMESPACE);
- doc->oldNs->prefix = xmlStrdup((const xmlChar *)"xml");
- }
-
- cur = doc->oldNs;
- while (cur->next != NULL) {
- cur = cur->next;
- }
- cur->next = ns;
-}
-/* }}} end dom_set_old_ns */
-
-/*
-http://www.w3.org/TR/2004/REC-DOM-Level-3-Core-20040407/core.html#ID-DocCrElNS
-
-NAMESPACE_ERR: Raised if
-
-1. the qualifiedName is a malformed qualified name
-2. the qualifiedName has a prefix and the namespaceURI is null
-*/
-
-/* {{{ int dom_check_qname(char *qname, char **localname, char **prefix, int uri_len, int name_len) */
-int dom_check_qname(char *qname, char **localname, char **prefix, int uri_len, int name_len) {
- if (name_len == 0) {
- return NAMESPACE_ERR;
- }
-
- *localname = xmlSplitQName2(qname, (xmlChar **) prefix);
- if (*localname == NULL) {
- *localname = xmlStrdup(qname);
- if (*prefix == NULL && uri_len == 0) {
- return 0;
- }
- }
-
- /* 1 */
- if (xmlValidateQName((xmlChar *) qname, 0) != 0) {
- return NAMESPACE_ERR;
- }
-
- /* 2 */
- if (*prefix != NULL && uri_len == 0) {
- return NAMESPACE_ERR;
- }
-
- return 0;
-}
-
-
-/*
-http://www.w3.org/TR/2004/REC-DOM-Level-3-Core-20040407/core.html#ID-DocCrElNS
-
-NAMESPACE_ERR: Raised if
-
-3. the qualifiedName has a prefix that is "xml" and the namespaceURI is different from "http://www.w3.org/XML/1998/namespace" [XML Namespaces]
-4. the qualifiedName or its prefix is "xmlns" and the namespaceURI is different from "http://www.w3.org/2000/xmlns/"
-5. the namespaceURI is "http://www.w3.org/2000/xmlns/" and neither the qualifiedName nor its prefix is "xmlns".
-*/
-
-/* {{{ xmlNsPtr dom_get_ns(xmlNodePtr nodep, char *uri, int *errorcode, char *prefix) */
-xmlNsPtr dom_get_ns(xmlNodePtr nodep, char *uri, int *errorcode, char *prefix) {
- xmlNsPtr nsptr = NULL;
-
- *errorcode = 0;
-
- if (! ((prefix && !strcmp (prefix, "xml" ) && strcmp(uri, XML_XML_NAMESPACE)) ||
- (prefix && !strcmp (prefix, "xmlns") && strcmp(uri, DOM_XMLNS_NAMESPACE)) ||
- (prefix && !strcmp(uri, DOM_XMLNS_NAMESPACE) && strcmp (prefix, "xmlns")))) {
- nsptr = xmlNewNs(nodep, uri, prefix);
- }
-
- if (nsptr == NULL) {
- *errorcode = NAMESPACE_ERR;
- }
-
- return nsptr;
-
-}
-/* }}} end dom_get_ns */
-
-/* {{{ xmlNsPtr dom_get_nsdecl(xmlNode *node, xmlChar *localName) */
-xmlNsPtr dom_get_nsdecl(xmlNode *node, xmlChar *localName) {
- xmlNsPtr cur;
- xmlNs *ret = NULL;
- if (node == NULL)
- return NULL;
-
- if (localName == NULL || xmlStrEqual(localName, "")) {
- cur = node->nsDef;
- while (cur != NULL) {
- if (cur->prefix == NULL && cur->href != NULL) {
- ret = cur;
- break;
- }
- cur = cur->next;
- }
- } else {
- cur = node->nsDef;
- while (cur != NULL) {
- if (cur->prefix != NULL && xmlStrEqual(localName, cur->prefix)) {
- ret = cur;
- break;
- }
- cur = cur->next;
- }
- }
- return ret;
-}
-/* }}} end dom_get_nsdecl */
-
-#endif /* HAVE_DOM */
-
-/*
- * 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/dom/php_dom.h b/ext/dom/php_dom.h
deleted file mode 100644
index a8ee2b95aa..0000000000
--- a/ext/dom/php_dom.h
+++ /dev/null
@@ -1,143 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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. |
- +----------------------------------------------------------------------+
- | Authors: Christian Stocker <chregu@php.net> |
- | Rob Richards <rrichards@php.net> |
- | Marcus Borger <helly@php.net> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifndef PHP_DOM_H
-#define PHP_DOM_H
-
-extern zend_module_entry dom_module_entry;
-#define phpext_dom_ptr &dom_module_entry
-
-#ifdef ZTS
-#include "TSRM.h"
-#endif
-
-#include <libxml/parser.h>
-#include <libxml/parserInternals.h>
-#include <libxml/tree.h>
-#include <libxml/uri.h>
-#include <libxml/xmlerror.h>
-#include <libxml/xinclude.h>
-#include <libxml/hash.h>
-#if defined(LIBXML_HTML_ENABLED)
-#include <libxml/HTMLparser.h>
-#include <libxml/HTMLtree.h>
-#endif
-#if defined(LIBXML_XPATH_ENABLED)
-#include <libxml/xpath.h>
-#include <libxml/xpathInternals.h>
-#endif
-#if defined(LIBXML_XPTR_ENABLED)
-#include <libxml/xpointer.h>
-#endif
-#ifdef PHP_WIN32
-#ifndef DOM_EXPORTS
-#define DOM_EXPORTS
-#endif
-#endif
-
-#include "xml_common.h"
-#include "ext/libxml/php_libxml.h"
-#include "zend_exceptions.h"
-#include "dom_ce.h"
-/* DOM API_VERSION, please bump it up, if you change anything in the API
- therefore it's easier for the script-programmers to check, what's working how
- Can be checked with phpversion("dom");
-*/
-#define DOM_API_VERSION "20031129"
-/* Define a custom type for iterating using an unused nodetype */
-#define DOM_NODESET XML_XINCLUDE_START
-
-typedef struct _dom_nnodemap_object {
- dom_object *baseobj;
- int nodetype;
- xmlHashTable *ht;
- xmlChar *local;
- xmlChar *ns;
- zval *baseobjptr;
-} dom_nnodemap_object;
-
-typedef struct {
- zend_object_iterator intern;
- zval *curobj;
-} php_dom_iterator;
-
-#include "dom_fe.h"
-
-dom_object *dom_object_get_data(xmlNodePtr obj);
-dom_doc_propsptr dom_get_doc_props(php_libxml_ref_obj *document);
-zend_object_value dom_objects_new(zend_class_entry *class_type TSRMLS_DC);
-zend_object_value dom_nnodemap_objects_new(zend_class_entry *class_type TSRMLS_DC);
-#if defined(LIBXML_XPATH_ENABLED)
-zend_object_value dom_xpath_objects_new(zend_class_entry *class_type TSRMLS_DC);
-#endif
-int dom_get_strict_error(php_libxml_ref_obj *document);
-void php_dom_throw_error(int error_code, int strict_error TSRMLS_DC);
-void node_list_unlink(xmlNodePtr node TSRMLS_DC);
-int dom_check_qname(char *qname, char **localname, char **prefix, int uri_len, int name_len);
-xmlNsPtr dom_get_ns(xmlNodePtr node, char *uri, int *errorcode, char *prefix);
-void dom_set_old_ns(xmlDoc *doc, xmlNs *ns);
-xmlNsPtr dom_get_nsdecl(xmlNode *node, xmlChar *localName);
-void dom_normalize (xmlNodePtr nodep TSRMLS_DC);
-xmlNode *dom_get_elements_by_tag_name_ns_raw(xmlNodePtr nodep, char *ns, char *local, int *cur, int index);
-void php_dom_create_implementation(zval **retval TSRMLS_DC);
-int dom_hierarchy(xmlNodePtr parent, xmlNodePtr child);
-int dom_has_feature(char *feature, char *version);
-int dom_node_is_read_only(xmlNodePtr node);
-int dom_node_children_valid(xmlNodePtr node);
-void php_dom_create_interator(zval *return_value, int ce_type TSRMLS_DC);
-void dom_namednode_iter(dom_object *basenode, int ntype, dom_object *intern, xmlHashTablePtr ht, xmlChar *local, xmlChar *ns TSRMLS_DC);
-xmlNodePtr create_notation(const xmlChar *name, const xmlChar *ExternalID, const xmlChar *SystemID);
-xmlNode *php_dom_libxml_hash_iter(xmlHashTable *ht, int index);
-xmlNode *php_dom_libxml_notation_iter(xmlHashTable *ht, int index);
-zend_object_iterator *php_dom_get_iterator(zend_class_entry *ce, zval *object TSRMLS_DC);
-
-#define REGISTER_DOM_CLASS(ce, name, parent_ce, funcs, entry) \
-INIT_CLASS_ENTRY(ce, name, funcs); \
-ce.create_object = dom_objects_new; \
-entry = zend_register_internal_class_ex(&ce, parent_ce, NULL TSRMLS_CC);
-
-#define DOM_GET_OBJ(__ptr, __id, __prtype, __intern) { \
- __intern = (dom_object *)zend_object_store_get_object(__id TSRMLS_CC); \
- if (__intern->ptr == NULL || !(__ptr = (__prtype)((php_libxml_node_ptr *)__intern->ptr)->node)) { \
- php_error(E_WARNING, "Couldn't fetch %s", __intern->std.ce->name);\
- RETURN_NULL();\
- } \
-}
-
-#define DOM_NO_ARGS() \
- if (ZEND_NUM_ARGS() != 0) { \
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Expects exactly 0 parameters, %d given", ZEND_NUM_ARGS()); \
- return; \
- }
-
-#define DOM_NOT_IMPLEMENTED() \
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Not yet implemented"); \
- return;
-
-#define DOM_NODELIST 0
-#define DOM_NAMEDNODEMAP 1
-
-PHP_MINIT_FUNCTION(dom);
-PHP_MSHUTDOWN_FUNCTION(dom);
-PHP_MINFO_FUNCTION(dom);
-
-#endif /* PHP_DOM_H */
diff --git a/ext/dom/processinginstruction.c b/ext/dom/processinginstruction.c
deleted file mode 100644
index 23a3fe2900..0000000000
--- a/ext/dom/processinginstruction.c
+++ /dev/null
@@ -1,173 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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. |
- +----------------------------------------------------------------------+
- | Authors: Christian Stocker <chregu@php.net> |
- | Rob Richards <rrichards@php.net> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "php.h"
-#if HAVE_LIBXML && HAVE_DOM
-#include "php_dom.h"
-
-
-/*
-* class DOMProcessingInstruction extends DOMNode
-*
-* URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#ID-1004215813
-* Since:
-*/
-
-zend_function_entry php_dom_processinginstruction_class_functions[] = {
- PHP_ME(domprocessinginstruction, __construct, NULL, ZEND_ACC_PUBLIC)
- {NULL, NULL, NULL}
-};
-
-/* {{{ proto void DOMProcessingInstruction::__construct(string name, [string value]); */
-PHP_METHOD(domprocessinginstruction, __construct)
-{
-
- zval *id;
- xmlNodePtr nodep = NULL, oldnode = NULL;
- dom_object *intern;
- char *name, *value = NULL;
- int name_len, value_len, name_valid;
-
- php_set_error_handling(EH_THROW, dom_domexception_class_entry TSRMLS_CC);
- if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Os|s", &id, dom_processinginstruction_class_entry, &name, &name_len, &value, &value_len) == FAILURE) {
- php_std_error_handling();
- return;
- }
-
- php_std_error_handling();
-
- name_valid = xmlValidateName((xmlChar *) name, 0);
- if (name_valid != 0) {
- php_dom_throw_error(INVALID_CHARACTER_ERR, 1 TSRMLS_CC);
- RETURN_FALSE;
- }
-
- nodep = xmlNewPI((xmlChar *) name, (xmlChar *) value);
-
- if (!nodep) {
- php_dom_throw_error(INVALID_STATE_ERR, 1 TSRMLS_CC);
- RETURN_FALSE;
- }
-
- intern = (dom_object *)zend_object_store_get_object(id TSRMLS_CC);
- if (intern != NULL) {
- oldnode = (xmlNodePtr)intern->ptr;
- if (oldnode != NULL) {
- php_libxml_node_free_resource(oldnode TSRMLS_CC);
- }
- php_libxml_increment_node_ptr((php_libxml_node_object *)intern, nodep, (void *)intern TSRMLS_CC);
- }
-}
-/* }}} end DOMProcessingInstruction::__construct */
-
-/* {{{ proto target string
-readonly=yes
-URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#ID-1478689192
-Since:
-*/
-int dom_processinginstruction_target_read(dom_object *obj, zval **retval TSRMLS_DC)
-{
- xmlNodePtr nodep;
-
- nodep = dom_object_get_node(obj);
-
- if (nodep == NULL) {
- php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC);
- return FAILURE;
- }
-
- ALLOC_ZVAL(*retval);
- ZVAL_STRING(*retval, (char *) (nodep->name), 1);
-
- return SUCCESS;
-}
-
-/* }}} */
-
-
-
-/* {{{ proto data string
-readonly=no
-URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#ID-837822393
-Since:
-*/
-int dom_processinginstruction_data_read(dom_object *obj, zval **retval TSRMLS_DC)
-{
- xmlNodePtr nodep;
- xmlChar *content;
-
- nodep = dom_object_get_node(obj);
-
- if (nodep == NULL) {
- php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC);
- return FAILURE;
- }
-
- ALLOC_ZVAL(*retval);
-
-
- if ((content = xmlNodeGetContent(nodep)) != NULL) {
- ZVAL_STRING(*retval, content, 1);
- xmlFree(content);
- } else {
- ZVAL_EMPTY_STRING(*retval);
- }
-
- return SUCCESS;
-}
-
-int dom_processinginstruction_data_write(dom_object *obj, zval *newval TSRMLS_DC)
-{
- zval value_copy;
- xmlNode *nodep;
-
- nodep = dom_object_get_node(obj);
-
- if (nodep == NULL) {
- php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC);
- return FAILURE;
- }
-
- if (newval->type != IS_STRING) {
- if(newval->refcount > 1) {
- value_copy = *newval;
- zval_copy_ctor(&value_copy);
- newval = &value_copy;
- }
- convert_to_string(newval);
- }
-
- xmlNodeSetContentLen(nodep, Z_STRVAL_P(newval), Z_STRLEN_P(newval) + 1);
-
- if (newval == &value_copy) {
- zval_dtor(newval);
- }
-
- return SUCCESS;
-}
-
-/* }}} */
-
-#endif
diff --git a/ext/dom/string_extend.c b/ext/dom/string_extend.c
deleted file mode 100644
index 0e827284c4..0000000000
--- a/ext/dom/string_extend.c
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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. |
- +----------------------------------------------------------------------+
- | Authors: Christian Stocker <chregu@php.net> |
- | Rob Richards <rrichards@php.net> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "php.h"
-#if HAVE_LIBXML && HAVE_DOM
-#include "php_dom.h"
-
-
-/*
-* class domstringextend
-*
-* URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#i18n-methods-StringExtend
-* Since:
-*/
-
-zend_function_entry php_dom_string_extend_class_functions[] = {
- PHP_FALIAS(findOffset16, dom_string_extend_find_offset16, NULL)
- PHP_FALIAS(findOffset32, dom_string_extend_find_offset32, NULL)
- {NULL, NULL, NULL}
-};
-
-/* {{{ attribute protos, not implemented yet */
-
-
-/* {{{ proto int dom_string_extend_find_offset16(int offset32);
-URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#i18n-methods-StringExtend-findOffset16
-Since:
-*/
-PHP_FUNCTION(dom_string_extend_find_offset16)
-{
- DOM_NOT_IMPLEMENTED();
-}
-/* }}} end dom_string_extend_find_offset16 */
-
-
-/* {{{ proto int dom_string_extend_find_offset32(int offset16);
-URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#i18n-methods-StringExtend-findOffset32
-Since:
-*/
-PHP_FUNCTION(dom_string_extend_find_offset32)
-{
- DOM_NOT_IMPLEMENTED();
-}
-/* }}} end dom_string_extend_find_offset32 */
-#endif
diff --git a/ext/dom/tests/book.xml b/ext/dom/tests/book.xml
deleted file mode 100644
index 95de0da866..0000000000
--- a/ext/dom/tests/book.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<?xml version="1.0" ?>
-<books>
- <book>
- <title>The Grapes of Wrath</title>
- <author>John Steinbeck</author>
- </book>
- <book>
- <title>The Pearl</title>
- <author>John Steinbeck</author>
- </book>
-</books>
diff --git a/ext/dom/tests/book.xml.gz b/ext/dom/tests/book.xml.gz
deleted file mode 100644
index 2c97807a59..0000000000
--- a/ext/dom/tests/book.xml.gz
+++ /dev/null
Binary files differ
diff --git a/ext/dom/tests/bug28721.phpt b/ext/dom/tests/bug28721.phpt
deleted file mode 100644
index a9aef3863f..0000000000
--- a/ext/dom/tests/bug28721.phpt
+++ /dev/null
@@ -1,485 +0,0 @@
---TEST--
-Bug # 28721: (appendChild() and insertBefore() unset DOMText)
---SKIPIF--
-<?php require_once('skipif.php'); ?>
---FILE--
-<?php
-function print_node(DomNode $node) {
- echo "name (value): " . $node->nodeName . " (" . $node->nodeValue . ")\n";
-}
-
-function print_node_r(DomNode $node) {
- static $indent = "";
- echo "\n" . $indent;
- print_node($node);
-
- echo $indent . "parent: ";
- if ( $node->parentNode )
- print_node($node->parentNode);
- else
- echo "NULL\n";
-
- echo $indent . "previousSibling: ";
- if ( $node->previousSibling )
- print_node($node->previousSibling);
- else
- echo "NULL\n";
-
- echo $indent . "nextSibling: ";
- if ( $node->nextSibling )
- print_node($node->nextSibling);
- else
- echo "NULL\n";
-
- if ( !$node->hasChildNodes() )
- return;
-
- foreach ($node->childNodes as $child) {
-
- $old_indent = $indent;
- $indent .= " ";
- print_node_r($child);
- $indent = $old_indent;
- }
-}
-
-function err_handler($errno, $errstr, $errfile, $errline) {
- echo "Error ($errno) on line $errline: $errstr\n";
-}
-
-// Record 'DocumentFragment is empty' warnings
-set_error_handler("err_handler", E_WARNING);
-
-$xml = new DomDocument();
-
-$p = $xml->createElement("p");
-
-$p->appendChild($t1 = $xml->createTextNode(" t1 "));
-$p->appendChild($b = $xml->createElement("b"));
-$b->appendChild($xml->createTextNode("X"));
-$p->appendChild($t2 = $xml->createTextNode(" t2 "));
-$p->appendChild($xml->createTextNode(" xxx "));
-
-print_node_r($p);
-
-echo "\nAppend t1 to p:\n";
-$ret = $p->appendChild($t1);
-
-print_node_r($p);
-echo "\n";
-
-echo "t1 == ret: ";
-var_dump( $t1 === $ret );
-
-
-$d = $xml->createElement("div");
-$d->appendChild($t3 = $xml->createTextNode(" t3 "));
-$d->appendChild($b = $xml->createElement("b"));
-$b->appendChild($xml->createElement("X"));
-$d->appendChild($t4 = $xml->createTextNode(" t4 "));
-$d->appendChild($xml->createTextNode(" xxx "));
-
-echo "\ndiv:\n";
-print_node_r($d);
-
-echo "\nInsert t4 before t3:\n";
-
-$ret = $d->insertBefore($t4, $t3);
-
-print_node_r($d);
-echo "\n";
-
-$frag = $xml->createDocumentFragment();
-
-$t5 = $frag->appendChild($xml->createTextNode(" t5 "));
-$frag->appendChild($i = $xml->createElement("i"));
-$i->appendChild($xml->createTextNode(" frob "));
-$frag->appendChild($xml->createTextNOde(" t6 "));
-
-echo "\np:\n";
-print_node_r($p);
-echo "\nFragment:\n";
-print_node_r($frag);
-
-echo "\nAppending fragment to p:\n";
-$p->appendChild($frag);
-
-print_node_r($p);
-echo "\nFragment:\n";
-print_node_r($frag);
-
-echo "\ndiv:\n";
-print_node_r($d);
-echo "\nInserting fragment before t4\n";
-$d->insertBefore($frag, $t4);
-print_node_r($d);
-
-echo "\np:\n";
-print_node_r($p);
-
-?>
---EXPECT--
-
-name (value): p ( t1 X t2 xxx )
-parent: NULL
-previousSibling: NULL
-nextSibling: NULL
-
- name (value): #text ( t1 )
- parent: name (value): p ( t1 X t2 xxx )
- previousSibling: NULL
- nextSibling: name (value): b (X)
-
- name (value): b (X)
- parent: name (value): p ( t1 X t2 xxx )
- previousSibling: name (value): #text ( t1 )
- nextSibling: name (value): #text ( t2 )
-
- name (value): #text (X)
- parent: name (value): b (X)
- previousSibling: NULL
- nextSibling: NULL
-
- name (value): #text ( t2 )
- parent: name (value): p ( t1 X t2 xxx )
- previousSibling: name (value): b (X)
- nextSibling: name (value): #text ( xxx )
-
- name (value): #text ( xxx )
- parent: name (value): p ( t1 X t2 xxx )
- previousSibling: name (value): #text ( t2 )
- nextSibling: NULL
-
-Append t1 to p:
-
-name (value): p (X t2 xxx t1 )
-parent: NULL
-previousSibling: NULL
-nextSibling: NULL
-
- name (value): b (X)
- parent: name (value): p (X t2 xxx t1 )
- previousSibling: NULL
- nextSibling: name (value): #text ( t2 )
-
- name (value): #text (X)
- parent: name (value): b (X)
- previousSibling: NULL
- nextSibling: NULL
-
- name (value): #text ( t2 )
- parent: name (value): p (X t2 xxx t1 )
- previousSibling: name (value): b (X)
- nextSibling: name (value): #text ( xxx )
-
- name (value): #text ( xxx )
- parent: name (value): p (X t2 xxx t1 )
- previousSibling: name (value): #text ( t2 )
- nextSibling: name (value): #text ( t1 )
-
- name (value): #text ( t1 )
- parent: name (value): p (X t2 xxx t1 )
- previousSibling: name (value): #text ( xxx )
- nextSibling: NULL
-
-t1 == ret: bool(true)
-
-div:
-
-name (value): div ( t3 t4 xxx )
-parent: NULL
-previousSibling: NULL
-nextSibling: NULL
-
- name (value): #text ( t3 )
- parent: name (value): div ( t3 t4 xxx )
- previousSibling: NULL
- nextSibling: name (value): b ()
-
- name (value): b ()
- parent: name (value): div ( t3 t4 xxx )
- previousSibling: name (value): #text ( t3 )
- nextSibling: name (value): #text ( t4 )
-
- name (value): X ()
- parent: name (value): b ()
- previousSibling: NULL
- nextSibling: NULL
-
- name (value): #text ( t4 )
- parent: name (value): div ( t3 t4 xxx )
- previousSibling: name (value): b ()
- nextSibling: name (value): #text ( xxx )
-
- name (value): #text ( xxx )
- parent: name (value): div ( t3 t4 xxx )
- previousSibling: name (value): #text ( t4 )
- nextSibling: NULL
-
-Insert t4 before t3:
-
-name (value): div ( t4 t3 xxx )
-parent: NULL
-previousSibling: NULL
-nextSibling: NULL
-
- name (value): #text ( t4 )
- parent: name (value): div ( t4 t3 xxx )
- previousSibling: NULL
- nextSibling: name (value): #text ( t3 )
-
- name (value): #text ( t3 )
- parent: name (value): div ( t4 t3 xxx )
- previousSibling: name (value): #text ( t4 )
- nextSibling: name (value): b ()
-
- name (value): b ()
- parent: name (value): div ( t4 t3 xxx )
- previousSibling: name (value): #text ( t3 )
- nextSibling: name (value): #text ( xxx )
-
- name (value): X ()
- parent: name (value): b ()
- previousSibling: NULL
- nextSibling: NULL
-
- name (value): #text ( xxx )
- parent: name (value): div ( t4 t3 xxx )
- previousSibling: name (value): b ()
- nextSibling: NULL
-
-
-p:
-
-name (value): p (X t2 xxx t1 )
-parent: NULL
-previousSibling: NULL
-nextSibling: NULL
-
- name (value): b (X)
- parent: name (value): p (X t2 xxx t1 )
- previousSibling: NULL
- nextSibling: name (value): #text ( t2 )
-
- name (value): #text (X)
- parent: name (value): b (X)
- previousSibling: NULL
- nextSibling: NULL
-
- name (value): #text ( t2 )
- parent: name (value): p (X t2 xxx t1 )
- previousSibling: name (value): b (X)
- nextSibling: name (value): #text ( xxx )
-
- name (value): #text ( xxx )
- parent: name (value): p (X t2 xxx t1 )
- previousSibling: name (value): #text ( t2 )
- nextSibling: name (value): #text ( t1 )
-
- name (value): #text ( t1 )
- parent: name (value): p (X t2 xxx t1 )
- previousSibling: name (value): #text ( xxx )
- nextSibling: NULL
-
-Fragment:
-
-name (value): #document-fragment ()
-parent: NULL
-previousSibling: NULL
-nextSibling: NULL
-
- name (value): #text ( t5 )
- parent: name (value): #document-fragment ()
- previousSibling: NULL
- nextSibling: name (value): i ( frob )
-
- name (value): i ( frob )
- parent: name (value): #document-fragment ()
- previousSibling: name (value): #text ( t5 )
- nextSibling: name (value): #text ( t6 )
-
- name (value): #text ( frob )
- parent: name (value): i ( frob )
- previousSibling: NULL
- nextSibling: NULL
-
- name (value): #text ( t6 )
- parent: name (value): #document-fragment ()
- previousSibling: name (value): i ( frob )
- nextSibling: NULL
-
-Appending fragment to p:
-
-name (value): p (X t2 xxx t1 t5 frob t6 )
-parent: NULL
-previousSibling: NULL
-nextSibling: NULL
-
- name (value): b (X)
- parent: name (value): p (X t2 xxx t1 t5 frob t6 )
- previousSibling: NULL
- nextSibling: name (value): #text ( t2 )
-
- name (value): #text (X)
- parent: name (value): b (X)
- previousSibling: NULL
- nextSibling: NULL
-
- name (value): #text ( t2 )
- parent: name (value): p (X t2 xxx t1 t5 frob t6 )
- previousSibling: name (value): b (X)
- nextSibling: name (value): #text ( xxx )
-
- name (value): #text ( xxx )
- parent: name (value): p (X t2 xxx t1 t5 frob t6 )
- previousSibling: name (value): #text ( t2 )
- nextSibling: name (value): #text ( t1 )
-
- name (value): #text ( t1 )
- parent: name (value): p (X t2 xxx t1 t5 frob t6 )
- previousSibling: name (value): #text ( xxx )
- nextSibling: name (value): #text ( t5 )
-
- name (value): #text ( t5 )
- parent: name (value): p (X t2 xxx t1 t5 frob t6 )
- previousSibling: name (value): #text ( t1 )
- nextSibling: name (value): i ( frob )
-
- name (value): i ( frob )
- parent: name (value): p (X t2 xxx t1 t5 frob t6 )
- previousSibling: name (value): #text ( t5 )
- nextSibling: name (value): #text ( t6 )
-
- name (value): #text ( frob )
- parent: name (value): i ( frob )
- previousSibling: NULL
- nextSibling: NULL
-
- name (value): #text ( t6 )
- parent: name (value): p (X t2 xxx t1 t5 frob t6 )
- previousSibling: name (value): i ( frob )
- nextSibling: NULL
-
-Fragment:
-
-name (value): #document-fragment ()
-parent: NULL
-previousSibling: NULL
-nextSibling: NULL
-
-div:
-
-name (value): div ( t4 t3 xxx )
-parent: NULL
-previousSibling: NULL
-nextSibling: NULL
-
- name (value): #text ( t4 )
- parent: name (value): div ( t4 t3 xxx )
- previousSibling: NULL
- nextSibling: name (value): #text ( t3 )
-
- name (value): #text ( t3 )
- parent: name (value): div ( t4 t3 xxx )
- previousSibling: name (value): #text ( t4 )
- nextSibling: name (value): b ()
-
- name (value): b ()
- parent: name (value): div ( t4 t3 xxx )
- previousSibling: name (value): #text ( t3 )
- nextSibling: name (value): #text ( xxx )
-
- name (value): X ()
- parent: name (value): b ()
- previousSibling: NULL
- nextSibling: NULL
-
- name (value): #text ( xxx )
- parent: name (value): div ( t4 t3 xxx )
- previousSibling: name (value): b ()
- nextSibling: NULL
-
-Inserting fragment before t4
-Error (2) on line 109: DOMNode::insertBefore(): Document Fragment is empty
-
-name (value): div ( t4 t3 xxx )
-parent: NULL
-previousSibling: NULL
-nextSibling: NULL
-
- name (value): #text ( t4 )
- parent: name (value): div ( t4 t3 xxx )
- previousSibling: NULL
- nextSibling: name (value): #text ( t3 )
-
- name (value): #text ( t3 )
- parent: name (value): div ( t4 t3 xxx )
- previousSibling: name (value): #text ( t4 )
- nextSibling: name (value): b ()
-
- name (value): b ()
- parent: name (value): div ( t4 t3 xxx )
- previousSibling: name (value): #text ( t3 )
- nextSibling: name (value): #text ( xxx )
-
- name (value): X ()
- parent: name (value): b ()
- previousSibling: NULL
- nextSibling: NULL
-
- name (value): #text ( xxx )
- parent: name (value): div ( t4 t3 xxx )
- previousSibling: name (value): b ()
- nextSibling: NULL
-
-p:
-
-name (value): p (X t2 xxx t1 t5 frob t6 )
-parent: NULL
-previousSibling: NULL
-nextSibling: NULL
-
- name (value): b (X)
- parent: name (value): p (X t2 xxx t1 t5 frob t6 )
- previousSibling: NULL
- nextSibling: name (value): #text ( t2 )
-
- name (value): #text (X)
- parent: name (value): b (X)
- previousSibling: NULL
- nextSibling: NULL
-
- name (value): #text ( t2 )
- parent: name (value): p (X t2 xxx t1 t5 frob t6 )
- previousSibling: name (value): b (X)
- nextSibling: name (value): #text ( xxx )
-
- name (value): #text ( xxx )
- parent: name (value): p (X t2 xxx t1 t5 frob t6 )
- previousSibling: name (value): #text ( t2 )
- nextSibling: name (value): #text ( t1 )
-
- name (value): #text ( t1 )
- parent: name (value): p (X t2 xxx t1 t5 frob t6 )
- previousSibling: name (value): #text ( xxx )
- nextSibling: name (value): #text ( t5 )
-
- name (value): #text ( t5 )
- parent: name (value): p (X t2 xxx t1 t5 frob t6 )
- previousSibling: name (value): #text ( t1 )
- nextSibling: name (value): i ( frob )
-
- name (value): i ( frob )
- parent: name (value): p (X t2 xxx t1 t5 frob t6 )
- previousSibling: name (value): #text ( t5 )
- nextSibling: name (value): #text ( t6 )
-
- name (value): #text ( frob )
- parent: name (value): i ( frob )
- previousSibling: NULL
- nextSibling: NULL
-
- name (value): #text ( t6 )
- parent: name (value): p (X t2 xxx t1 t5 frob t6 )
- previousSibling: name (value): i ( frob )
- nextSibling: NULL
diff --git a/ext/dom/tests/dom001.phpt b/ext/dom/tests/dom001.phpt
deleted file mode 100644
index a0c78fbb0a..0000000000
--- a/ext/dom/tests/dom001.phpt
+++ /dev/null
@@ -1,275 +0,0 @@
---TEST--
-Test 1: Accessing single node
---SKIPIF--
-<?php require_once('skipif.inc'); ?>
---FILE--
-<?php
-require_once("dom_test.inc");
-
-echo "Test 1: accessing single nodes from php\n";
-$dom = new domDocument;
-$dom->loadxml($xmlstr);
-if(!$dom) {
- echo "Error while parsing the document\n";
- exit;
-}
-
-// children() of of document would result in a memleak
-//$children = $dom->children();
-//print_node_list($children);
-
-echo "--------- root\n";
-$rootnode = $dom->documentElement;
-print_node($rootnode);
-
-echo "--------- children of root\n";
-$children = $rootnode->childNodes;
-print_node_list($children);
-
-// The last node should be identical with the last entry in the children array
-echo "--------- last\n";
-$last = $rootnode->lastChild;
-print_node($last);
-
-// The parent of this last node is the root again
-echo "--------- parent\n";
-$parent = $last->parentNode;
-print_node($parent);
-
-// The children of this parent are the same children as one above
-echo "--------- children of parent\n";
-$children = $parent->childNodes;
-print_node_list($children);
-
-echo "--------- creating a new attribute\n";
-//This is worthless
-//$attr = $dom->createAttribute("src", "picture.gif");
-//print_r($attr);
-
-//$rootnode->set_attributeNode($attr);
-$attr = $rootnode->setAttribute("src", "picture.gif");
-$attr = $rootnode->getAttribute("src");
-print_r($attr);
-print "\n";
-
-echo "--------- Get Attribute Node\n";
-$attr = $rootnode->getAttributeNode("src");
-print_node($attr);
-
-echo "--------- Remove Attribute Node\n";
-$attr = $rootnode->removeAttribute("src");
-print "Removed " . $attr . " attributes.\n";
-
-echo "--------- attributes of rootnode\n";
-$attrs = $rootnode->attributes;
-print_node_list($attrs);
-
-echo "--------- children of an attribute\n";
-$children = $attrs->item(0)->childNodes;
-print_node_list($children);
-
-echo "--------- Add child to root\n";
-$myelement = new domElement("Silly", "Symphony");
-$newchild = $rootnode->appendChild($myelement);
-print_node($newchild);
-print $dom->saveXML();
-print "\n";
-
-echo "--------- Find element by tagname\n";
-echo " Using dom\n";
-$children = $dom->getElementsByTagname("Silly");
-print_node_list($children);
-
-echo " Using elem\n";
-$children = $rootnode->getElementsByTagName("Silly");
-print_node_list($children);
-
-echo "--------- Unlink Node\n";
-print_node($children->item(0));
-$rootnode->removeChild($children->item(0));
-print_node_list($rootnode->childNodes);
-print $dom->savexml();
-
-echo "--------- Find element by id\n";
-print ("Not implemented\n");
-
-echo "--------- Check various node_name return values\n";
-print ("Not needed\n");
-
-?>
---EXPECT--
-Test 1: accessing single nodes from php
---------- root
-Node Name: chapter
-Node Type: 1
-Num Children: 4
-
---------- children of root
-Node Name: title
-Node Type: 1
-Num Children: 1
-Node Content: Title
-
-Node Name: #text
-Node Type: 3
-Num Children: 0
-Node Content:
-
-
-Node Name: para
-Node Type: 1
-Num Children: 7
-
-Node Name: #text
-Node Type: 3
-Num Children: 0
-Node Content:
-
-
---------- last
-Node Name: #text
-Node Type: 3
-Num Children: 0
-Node Content:
-
-
---------- parent
-Node Name: chapter
-Node Type: 1
-Num Children: 4
-
---------- children of parent
-Node Name: title
-Node Type: 1
-Num Children: 1
-Node Content: Title
-
-Node Name: #text
-Node Type: 3
-Num Children: 0
-Node Content:
-
-
-Node Name: para
-Node Type: 1
-Num Children: 7
-
-Node Name: #text
-Node Type: 3
-Num Children: 0
-Node Content:
-
-
---------- creating a new attribute
-picture.gif
---------- Get Attribute Node
-Node Name: src
-Node Type: 2
-Num Children: 1
-Node Content: picture.gif
-
---------- Remove Attribute Node
-Removed 1 attributes.
---------- attributes of rootnode
-Node Name: language
-Node Type: 2
-Num Children: 1
-Node Content: en
-
---------- children of an attribute
-Node Name: #text
-Node Type: 3
-Num Children: 0
-Node Content: en
-
---------- Add child to root
-Node Name: Silly
-Node Type: 1
-Num Children: 1
-Node Content: Symphony
-
-<?xml version="1.0" standalone="yes"?>
-<!DOCTYPE chapter SYSTEM "/share/sgml/Norman_Walsh/db3xml10/db3xml10.dtd" [
-<!ENTITY sp "spanish">
-]>
-<!-- lsfj -->
-<chapter language="en"><title language="en">Title</title>
-<para language="ge">
-&sp;
-<!-- comment -->
-<informaltable language="&sp;kkk">
-<tgroup cols="3">
-<tbody>
-<row><entry>a1</entry><entry morerows="1">b1</entry><entry>c1</entry></row>
-<row><entry>a2</entry><entry>c2</entry></row>
-<row><entry>a3</entry><entry>b3</entry><entry>c3</entry></row>
-</tbody>
-</tgroup>
-</informaltable>
-</para>
-<Silly>Symphony</Silly></chapter>
-
---------- Find element by tagname
- Using dom
-Node Name: Silly
-Node Type: 1
-Num Children: 1
-Node Content: Symphony
-
- Using elem
-Node Name: Silly
-Node Type: 1
-Num Children: 1
-Node Content: Symphony
-
---------- Unlink Node
-Node Name: Silly
-Node Type: 1
-Num Children: 1
-Node Content: Symphony
-
-Node Name: title
-Node Type: 1
-Num Children: 1
-Node Content: Title
-
-Node Name: #text
-Node Type: 3
-Num Children: 0
-Node Content:
-
-
-Node Name: para
-Node Type: 1
-Num Children: 7
-
-Node Name: #text
-Node Type: 3
-Num Children: 0
-Node Content:
-
-
-<?xml version="1.0" standalone="yes"?>
-<!DOCTYPE chapter SYSTEM "/share/sgml/Norman_Walsh/db3xml10/db3xml10.dtd" [
-<!ENTITY sp "spanish">
-]>
-<!-- lsfj -->
-<chapter language="en"><title language="en">Title</title>
-<para language="ge">
-&sp;
-<!-- comment -->
-<informaltable language="&sp;kkk">
-<tgroup cols="3">
-<tbody>
-<row><entry>a1</entry><entry morerows="1">b1</entry><entry>c1</entry></row>
-<row><entry>a2</entry><entry>c2</entry></row>
-<row><entry>a3</entry><entry>b3</entry><entry>c3</entry></row>
-</tbody>
-</tgroup>
-</informaltable>
-</para>
-</chapter>
---------- Find element by id
-Not implemented
---------- Check various node_name return values
-Not needed
diff --git a/ext/dom/tests/dom002.phpt b/ext/dom/tests/dom002.phpt
deleted file mode 100644
index 2bc0717d64..0000000000
--- a/ext/dom/tests/dom002.phpt
+++ /dev/null
@@ -1,57 +0,0 @@
---TEST--
-Test 2: getElementsByTagName() / getElementsByTagNameNS()
---SKIPIF--
-<?php require_once('skipif.php'); ?>
---FILE--
-<?php
-$xml = <<<HERE
-<?xml version="1.0" encoding="ISO-8859-1" ?>
-<foo xmlns="http://www.example.com/ns/foo"
- xmlns:fubar="http://www.example.com/ns/fubar">
- <bar><test1 /></bar>
- <bar><test2 /></bar>
- <fubar:bar><test3 /></fubar:bar>
- <fubar:bar><test4 /></fubar:bar>
-</foo>
-HERE;
-
-function dump($elems) {
- foreach ($elems as $elem) {
- var_dump($elem->nodeName);
- dump($elem->childNodes);
- }
-}
-
-$dom = new DOMDocument();
-$dom->loadXML($xml);
-$doc = $dom->documentElement;
-dump($dom->getElementsByTagName('bar'));
-dump($doc->getElementsByTagName('bar'));
-dump($dom->getElementsByTagNameNS('http://www.example.com/ns/fubar', 'bar'));
-dump($doc->getElementsByTagNameNS('http://www.example.com/ns/fubar', 'bar'));
-?>
---EXPECT--
-string(3) "bar"
-string(5) "test1"
-string(3) "bar"
-string(5) "test2"
-string(9) "fubar:bar"
-string(5) "test3"
-string(9) "fubar:bar"
-string(5) "test4"
-string(3) "bar"
-string(5) "test1"
-string(3) "bar"
-string(5) "test2"
-string(9) "fubar:bar"
-string(5) "test3"
-string(9) "fubar:bar"
-string(5) "test4"
-string(9) "fubar:bar"
-string(5) "test3"
-string(9) "fubar:bar"
-string(5) "test4"
-string(9) "fubar:bar"
-string(5) "test3"
-string(9) "fubar:bar"
-string(5) "test4"
diff --git a/ext/dom/tests/dom003.phpt b/ext/dom/tests/dom003.phpt
deleted file mode 100644
index e8c1db2ce9..0000000000
--- a/ext/dom/tests/dom003.phpt
+++ /dev/null
@@ -1,44 +0,0 @@
---TEST--
-Test 3: Exception Test
---SKIPIF--
-<?php require_once('skipif.inc'); ?>
---FILE--
-<?php
-
-$dom = new domdocument;
-$dom->load(dirname(__FILE__)."/book.xml");
-$rootNode = $dom->documentElement;
-print "--- Catch exception with try/catch\n";
-try {
- $rootNode->appendChild($rootNode);
-} catch (domexception $e) {
- var_dump($e);
-}
-print "--- Don't catch exception with try/catch\n";
-$rootNode->appendChild($rootNode);
-
-
-?>
---EXPECTF--
---- Catch exception with try/catch
-object(DOMException)#%d (6) {
- ["message:protected"]=>
- string(23) "Hierarchy Request Error"
- ["string:private"]=>
- string(0) ""
- ["file:protected"]=>
- string(%d) "%s/ext/dom/tests/dom003.php"
- ["line:protected"]=>
- int(8)
- ["trace:private"]=>
- array(0) {
- }
- ["code"]=>
- int(3)
-}
---- Don't catch exception with try/catch
-
-Fatal error: Uncaught exception 'DOMException' with message 'Hierarchy Request Error' in %sdom003.php:%d
-Stack trace:
-#0 {main}
- thrown in %sdom003.php on line %d
diff --git a/ext/dom/tests/dom004.phpt b/ext/dom/tests/dom004.phpt
deleted file mode 100644
index 7f36eb3692..0000000000
--- a/ext/dom/tests/dom004.phpt
+++ /dev/null
@@ -1,25 +0,0 @@
---TEST--
-Test 4: Streams Test
---SKIPIF--
-<?php
-require_once('skipif.inc');
-array_search('compress.zlib', stream_get_wrappers()) || die('skip compress.zlib wrapper is not available');
-?>
---FILE--
-<?php
-$dom = new domdocument;
-$dom->load("compress.zlib://".dirname(__FILE__)."/book.xml.gz");
-print $dom->saveXML();
-
---EXPECT--
-<?xml version="1.0"?>
-<books>
- <book>
- <title>The Grapes of Wrath</title>
- <author>John Steinbeck</author>
- </book>
- <book>
- <title>The Pearl</title>
- <author>John Steinbeck</author>
- </book>
-</books>
diff --git a/ext/dom/tests/dom005.phpt b/ext/dom/tests/dom005.phpt
deleted file mode 100644
index c0f4bb714d..0000000000
--- a/ext/dom/tests/dom005.phpt
+++ /dev/null
@@ -1,36 +0,0 @@
---TEST--
-Test 5: HTML Test
---SKIPIF--
-<?php require_once('skipif.inc'); ?>
---FILE--
-<?php
-$dom = new domdocument;
-$dom->loadHTMLFile(dirname(__FILE__)."/test.html");
-print "--- save as XML\n";
-
-print adjustDoctype($dom->saveXML());
-print "--- save as HTML\n";
-
-print adjustDoctype($dom->saveHTML());
-
-function adjustDoctype($xml) {
- return str_replace("DOCTYPE HTML","DOCTYPE html",$xml);
-}
-
---EXPECT--
---- save as XML
-<?xml version="1.0" standalone="yes"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
-<html><head><title>Hello world</title></head><body><p>
-This is a not well-formed<br/>
-html files with undeclared entities&#xA0;
-</p></body></html>
---- save as HTML
-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
-<html>
-<head><title>Hello world</title></head>
-<body><p>
-This is a not well-formed<br>
-html files with undeclared entities&nbsp;
-</p></body>
-</html>
diff --git a/ext/dom/tests/dom006.phpt b/ext/dom/tests/dom006.phpt
deleted file mode 100644
index b8e8ed1724..0000000000
--- a/ext/dom/tests/dom006.phpt
+++ /dev/null
@@ -1,40 +0,0 @@
---TEST--
-Test 6: Extends Test
---SKIPIF--
-<?php require_once('skipif.inc'); ?>
---FILE--
-<?php
-
-Class books extends domDocument {
- function addBook($title, $author) {
- $titleElement = $this->createElement("title");
- $titleElement->appendChild($this->createTextNode($title));
- $authorElement = $this->createElement("author");
- $authorElement->appendChild($this->createTextNode($author));
-
- $bookElement = $this->createElement("book");
-
- $bookElement->appendChild($titleElement);
- $bookElement->appendChild($authorElement);
- $this->documentElement->appendChild($bookElement);
- }
-
-}
-
-$dom = new books;
-
-$dom->load(dirname(__FILE__)."/book.xml");
-$dom->addBook("PHP de Luxe", "Richard Samar, Christian Stocker");
-print $dom->saveXML();
---EXPECT--
-<?xml version="1.0"?>
-<books>
- <book>
- <title>The Grapes of Wrath</title>
- <author>John Steinbeck</author>
- </book>
- <book>
- <title>The Pearl</title>
- <author>John Steinbeck</author>
- </book>
-<book><title>PHP de Luxe</title><author>Richard Samar, Christian Stocker</author></book></books>
diff --git a/ext/dom/tests/dom_create_element.phpt b/ext/dom/tests/dom_create_element.phpt
deleted file mode 100644
index 3f307099bb..0000000000
--- a/ext/dom/tests/dom_create_element.phpt
+++ /dev/null
@@ -1,394 +0,0 @@
---TEST--
-Test 1: Creating Elements with and without Namespaces
---SKIPIF--
-<?php require_once('skipif.inc'); ?>
---FILE--
-<?php
-
-print " 1 DOMDocument::createElement('valid')\n";
-try {
- $dom = new domDocument;
- $dom->createElement('valid');
- print "valid\n";
-} catch (Exception $e) {
- print $e->getMessage() . "\n";
-}
-
-print " 2 DOMDocument::createElement('-invalid')\n";
-try {
- $dom = new domDocument;
- $dom->createElement('-invalid');
- print "valid\n";
-} catch (Exception $e) {
- print $e->getMessage() . "\n";
-}
-
-print " 3 DOMDocument::createElement(' ')\n";
-try {
- $dom = new domDocument;
- $dom->createElement(' ');
- print "valid\n";
-} catch (Exception $e) {
- print $e->getMessage() . "\n";
-}
-
-print " 4 DOMDocument::createElement('prefix:valid')\n";
-try {
- $dom = new domDocument;
- $dom->createElement('prefix:valid');
- print "valid\n";
-} catch (Exception $e) {
- print $e->getMessage() . "\n";
-}
-
-print " 5 DOMDocument::createElementNS('http://valid.com', 'valid')\n";
-try {
- $dom = new domDocument;
- $dom->createElementNS('http://valid.com', 'valid');
- print "valid\n";
-} catch (Exception $e) {
- print $e->getMessage() . "\n";
-}
-
-print " 6 DOMDocument::createElementNS('http://valid.com', 'prefix:valid')\n";
-try {
- $dom = new domDocument;
- $dom->createElementNS('http://valid.com', 'prefix:valid');
- print "valid\n";
-} catch (Exception $e) {
- print $e->getMessage() . "\n";
-}
-
-print " 7 DOMDocument::createElementNS('http://valid.com', '-invalid')\n";
-try {
- $dom = new domDocument;
- $dom->createElementNS('http://valid.com', '-invalid');
- print "valid\n";
-} catch (Exception $e) {
- print $e->getMessage() . "\n";
-}
-
-print " 8 DOMDocument::createElementNS('http://valid.com', 'prefix:-invalid')\n";
-try {
- $dom = new domDocument;
- $dom->createElementNS('http://valid.com', 'prefix:-invalid');
- print "valid\n";
-} catch (Exception $e) {
- print $e->getMessage() . "\n";
-}
-
-print " 9 DOMDocument::createElementNS('', 'prefix:invalid')\n";
-try {
- $dom = new domDocument;
- $dom->createElementNS('', 'prefix:invalid');
- print "valid\n";
-} catch (Exception $e) {
- print $e->getMessage() . "\n";
-}
-
-print "10 DOMDocument::createElementNS('http://valid.com', 'prefix:valid:invalid')\n";
-try {
- $dom = new domDocument;
- $dom->createElementNS('http://valid.com', 'prefix:valid:invalid');
- print "valid\n";
-} catch (Exception $e) {
- print $e->getMessage() . "\n";
-}
-
-print "11 DOMDocument::createElementNS('http://valid.com', '-prefix:valid')\n";
-try {
- $dom = new domDocument;
- $dom->createElementNS('http://valid.com', '-prefix:valid');
- print "valid\n";
-} catch (Exception $e) {
- print $e->getMessage() . "\n";
-}
-
-print "12 DOMDocument::createElementNS('-', 'prefix:valid')\n";
-try {
- $dom = new domDocument;
- $dom->createElementNS('-', 'prefix:valid');
- print "valid\n";
-} catch (Exception $e) {
- print $e->getMessage() . "\n";
-}
-
-
-print "13 DOMElement::__construct('valid')\n";
-try {
- $element = new DomElement('valid');
- print "valid\n";
-} catch (Exception $e) {
- print $e->getMessage() . "\n";
-}
-
-print "14 DOMElement::__construct('-invalid')\n";
-try {
- $element = new DomElement('-invalid');
- print "valid\n";
-} catch (Exception $e) {
- print $e->getMessage() . "\n";
-}
-
-print "15 DOMElement::__construct(' ')\n";
-try {
- $element = new DomElement(' ');
- print "valid\n";
-} catch (Exception $e) {
- print $e->getMessage() . "\n";
-}
-
-print "16 DOMElement::__construct('prefix:valid')\n";
-try {
- $element = new DomElement('prefix:valid');
- print "valid\n";
-} catch (Exception $e) {
- print $e->getMessage() . "\n";
-}
-
-print "17 DOMElement::__construct('valid', '', 'http://valid.com')\n";
-try {
- $element = new DomElement('valid', '', 'http://valid.com');
- print "valid\n";
-} catch (Exception $e) {
- print $e->getMessage() . "\n";
-}
-
-print "18 DOMElement::__construct('prefix:valid', '', 'http://valid.com')\n";
-try {
- $element = new DomElement('prefix:valid', '', 'http://valid.com');
- print "valid\n";
-} catch (Exception $e) {
- print $e->getMessage() . "\n";
-}
-
-print "19 DOMElement::__construct('-invalid', '', 'http://valid.com')\n";
-try {
- $element = new DomElement('-invalid', '', 'http://valid.com');
- print "valid\n";
-} catch (Exception $e) {
- print $e->getMessage() . "\n";
-}
-
-print "20 DOMElement::__construct('prefix:-invalid', '', 'http://valid.com')\n";
-try {
- $element = new DomElement('prefix:-invalid', '', 'http://valid.com');
- print "valid\n";
-} catch (Exception $e) {
- print $e->getMessage() . "\n";
-}
-
-print "21 DOMElement::__construct('prefix:invalid', '', '')\n";
-try {
- $element = new DomElement('prefix:invalid', '', '');
- print "valid\n";
-} catch (Exception $e) {
- print $e->getMessage() . "\n";
-}
-
-print "22 DOMElement::__construct('prefix:valid:invalid', '', 'http://valid.com')\n";
-try {
- $element = new DomElement('prefix:valid:invalid', '', 'http://valid.com');
- print "valid\n";
-} catch (Exception $e) {
- print $e->getMessage() . "\n";
-}
-
-print "23 DOMElement::__construct('-prefix:valid', '', 'http://valid.com')\n";
-try {
- $element = new DomElement('-prefix:valid', '', 'http://valid.com');
- print "valid\n";
-} catch (Exception $e) {
- print $e->getMessage() . "\n";
-}
-
-print "24 DOMElement::__construct('prefix:valid', '', '-')\n";
-try {
- $element = new DomElement('prefix:valid', '', '-');
- print "valid\n";
-} catch (Exception $e) {
- print $e->getMessage() . "\n";
-}
-
-/* the qualifiedName has a prefix and the namespaceURI is null */
-
-print "25 DOMDocument::createElementNS('', 'prefix:valid')\n";
-try {
- $dom = new domDocument;
- $dom->createElementNS('', 'prefix:valid');
- print "valid\n";
-} catch (Exception $e) {
- print $e->getMessage() . "\n";
-}
-
-/* the qualifiedName has a prefix that is "xml" and the namespaceURI
- is different from "http://www.w3.org/XML/1998/namespace" [XML Namespaces] */
-
-print "26 DOMDocument::createElementNS('http://wrong.namespaceURI.com', 'xml:valid')\n";
-try {
- $dom = new domDocument;
- $dom->createElementNS('http://wrong.namespaceURI.com', 'xml:valid');
- print "valid\n";
-} catch (Exception $e) {
- print $e->getMessage() . "\n";
-}
-
-print "27 DOMElement::__construct('xml:valid', '', 'http://wrong.namespaceURI.com')\n";
-try {
- $element = new DomElement('xml:valid', '', 'http://wrong.namespaceURI.com');
- print "valid\n";
-} catch (Exception $e) {
- print $e->getMessage() . "\n";
-}
-
-/* This is okay because we reuse the xml namespace from the document */
-print "28 DOMDocument::createElementNS('http://www.w3.org/XML/1998/namespace', 'xml:valid')\n";
-try {
- $dom = new domDocument;
- $dom->createElementNS('http://www.w3.org/XML/1998/namespace', 'xml:valid');
- print "valid\n";
-} catch (Exception $e) {
- print $e->getMessage() . "\n";
-}
-
-/* This isn't because the xml namespace isn't there and we can't create it */
-print "29 DOMElement::__construct('xml:valid', '', 'http://www.w3.org/XML/1998/namespace')\n";
-try {
- $element = new DomElement('xml:valid', '', 'http://www.w3.org/XML/1998/namespace');
- print "valid\n";
-} catch (Exception $e) {
- print $e->getMessage() . "\n";
-}
-
-
-/* the qualifiedName or its prefix is "xmlns" and the namespaceURI is
- different from "http://www.w3.org/2000/xmlns/" */
-
-print "30 DOMDocument::createElementNS('http://wrong.namespaceURI.com', 'xmlns:valid')\n";
-try {
- $dom = new domDocument;
- $dom->createElementNS('http://wrong.namespaceURI.com', 'xmlns:valid');
- print "valid\n";
-} catch (Exception $e) {
- print $e->getMessage() . "\n";
-}
-
-print "31 DOMElement::__construct('xmlns:valid', '', 'http://wrong.namespaceURI.com')\n";
-try {
- $element = new DomElement('xmlns:valid', '', 'http://wrong.namespaceURI.com');
- print "valid\n";
-} catch (Exception $e) {
- print $e->getMessage() . "\n";
-}
-
-print "32 DOMDocument::createElementNS('http://www.w3.org/2000/xmlns/', 'xmlns:valid')\n";
-try {
- $dom = new domDocument;
- $dom->createElementNS('http://www.w3.org/2000/xmlns/', 'xmlns:valid');
- print "valid\n";
-} catch (Exception $e) {
- print $e->getMessage() . "\n";
-}
-
-print "33 DOMElement::__construct('xmlns:valid', '', 'http://www.w3.org/2000/xmlns/')\n";
-try {
- $element = new DomElement('xmlns:valid', '', 'http://www.w3.org/2000/xmlns/');
- print "valid\n";
-} catch (Exception $e) {
- print $e->getMessage() . "\n";
-}
-
-/* the namespaceURI is "http://www.w3.org/2000/xmlns/" and neither the
- qualifiedName nor its prefix is "xmlns". */
-
-print "34 DOMDocument::createElementNS('http://www.w3.org/2000/xmlns/', 'wrongprefix:valid')\n";
-try {
- $dom = new domDocument;
- $dom->createElementNS('http://www.w3.org/2000/xmlns/', 'wrongprefix:valid');
- print "valid\n";
-} catch (Exception $e) {
- print $e->getMessage() . "\n";
-}
-
-print "35 DOMElement::__construct('wrongprefix:valid', '', 'http://www.w3.org/2000/xmlns/')\n";
-try {
- $element = new DomElement('wrongprefix:valid', '', 'http://www.w3.org/2000/xmlns/');
- print "valid\n";
-} catch (Exception $e) {
- print $e->getMessage() . "\n";
-}
-
-
-
-?>
---EXPECT--
- 1 DOMDocument::createElement('valid')
-valid
- 2 DOMDocument::createElement('-invalid')
-Invalid Character Error
- 3 DOMDocument::createElement(' ')
-Invalid Character Error
- 4 DOMDocument::createElement('prefix:valid')
-valid
- 5 DOMDocument::createElementNS('http://valid.com', 'valid')
-valid
- 6 DOMDocument::createElementNS('http://valid.com', 'prefix:valid')
-valid
- 7 DOMDocument::createElementNS('http://valid.com', '-invalid')
-Namespace Error
- 8 DOMDocument::createElementNS('http://valid.com', 'prefix:-invalid')
-Namespace Error
- 9 DOMDocument::createElementNS('', 'prefix:invalid')
-Namespace Error
-10 DOMDocument::createElementNS('http://valid.com', 'prefix:valid:invalid')
-Namespace Error
-11 DOMDocument::createElementNS('http://valid.com', '-prefix:valid')
-Namespace Error
-12 DOMDocument::createElementNS('-', 'prefix:valid')
-valid
-13 DOMElement::__construct('valid')
-valid
-14 DOMElement::__construct('-invalid')
-Invalid Character Error
-15 DOMElement::__construct(' ')
-Invalid Character Error
-16 DOMElement::__construct('prefix:valid')
-Namespace Error
-17 DOMElement::__construct('valid', '', 'http://valid.com')
-valid
-18 DOMElement::__construct('prefix:valid', '', 'http://valid.com')
-valid
-19 DOMElement::__construct('-invalid', '', 'http://valid.com')
-Invalid Character Error
-20 DOMElement::__construct('prefix:-invalid', '', 'http://valid.com')
-Namespace Error
-21 DOMElement::__construct('prefix:invalid', '', '')
-Namespace Error
-22 DOMElement::__construct('prefix:valid:invalid', '', 'http://valid.com')
-Namespace Error
-23 DOMElement::__construct('-prefix:valid', '', 'http://valid.com')
-Invalid Character Error
-24 DOMElement::__construct('prefix:valid', '', '-')
-valid
-25 DOMDocument::createElementNS('', 'prefix:valid')
-Namespace Error
-26 DOMDocument::createElementNS('http://wrong.namespaceURI.com', 'xml:valid')
-Namespace Error
-27 DOMElement::__construct('xml:valid', '', 'http://wrong.namespaceURI.com')
-Namespace Error
-28 DOMDocument::createElementNS('http://www.w3.org/XML/1998/namespace', 'xml:valid')
-valid
-29 DOMElement::__construct('xml:valid', '', 'http://www.w3.org/XML/1998/namespace')
-Namespace Error
-30 DOMDocument::createElementNS('http://wrong.namespaceURI.com', 'xmlns:valid')
-Namespace Error
-31 DOMElement::__construct('xmlns:valid', '', 'http://wrong.namespaceURI.com')
-Namespace Error
-32 DOMDocument::createElementNS('http://www.w3.org/2000/xmlns/', 'xmlns:valid')
-valid
-33 DOMElement::__construct('xmlns:valid', '', 'http://www.w3.org/2000/xmlns/')
-valid
-34 DOMDocument::createElementNS('http://www.w3.org/2000/xmlns/', 'wrongprefix:valid')
-Namespace Error
-35 DOMElement::__construct('wrongprefix:valid', '', 'http://www.w3.org/2000/xmlns/')
-Namespace Error
diff --git a/ext/dom/tests/dom_import_simplexml.phpt b/ext/dom/tests/dom_import_simplexml.phpt
deleted file mode 100644
index 81744aa260..0000000000
--- a/ext/dom/tests/dom_import_simplexml.phpt
+++ /dev/null
@@ -1,27 +0,0 @@
---TEST--
-Interop Test: Import from SimpleXML
---SKIPIF--
-<?php require_once('skipif.inc'); ?>
-<?php if (!extension_loaded('simplexml')) die('skip simplexml extension not available');?>
---FILE--
-<?php
-$s = simplexml_load_file(dirname(__FILE__)."/book.xml");
-if(!$s) {
- echo "Error while loading the document\n";
- exit;
-}
-$dom = dom_import_simplexml($s);
-print $dom->ownerDocument->saveXML();
-?>
---EXPECT--
-<?xml version="1.0"?>
-<books>
- <book>
- <title>The Grapes of Wrath</title>
- <author>John Steinbeck</author>
- </book>
- <book>
- <title>The Pearl</title>
- <author>John Steinbeck</author>
- </book>
-</books>
diff --git a/ext/dom/tests/dom_test.inc b/ext/dom/tests/dom_test.inc
deleted file mode 100644
index 86b426f8f3..0000000000
--- a/ext/dom/tests/dom_test.inc
+++ /dev/null
@@ -1,47 +0,0 @@
-<?PHP
-$xmlstr = "<?xml version='1.0' standalone='yes'?>
-<!DOCTYPE chapter SYSTEM '/share/sgml/Norman_Walsh/db3xml10/db3xml10.dtd'
-[ <!ENTITY sp \"spanish\">
-]>
-<!-- lsfj -->
-<chapter language='en'><title language='en'>Title</title>
-<para language='ge'>
-&sp;
-<!-- comment -->
-<informaltable language='&sp;kkk'>
-<tgroup cols='3'>
-<tbody>
-<row><entry>a1</entry><entry morerows='1'>b1</entry><entry>c1</entry></row>
-<row><entry>a2</entry><entry>c2</entry></row>
-<row><entry>a3</entry><entry>b3</entry><entry>c3</entry></row>
-</tbody>
-</tgroup>
-</informaltable>
-</para>
-</chapter> ";
-
-function print_node($node)
-{
- print "Node Name: " . $node->nodeName;
- print "\nNode Type: " . $node->nodeType;
- if ($node->nodeType != 3) {
- $child_count = $node->childNodes->length;
- } else {
- $child_count = 0;
- }
- print "\nNum Children: " . $child_count;
- if($child_count <= 1){
- print "\nNode Content: " . $node->nodeValue;
- }
- print "\n\n";
-}
-
-function print_node_list($nodelist)
-{
- foreach($nodelist as $node)
- {
- print_node($node);
- }
-}
-
-?>
diff --git a/ext/dom/tests/dom_xinclude.phpt b/ext/dom/tests/dom_xinclude.phpt
deleted file mode 100644
index 859dd54583..0000000000
--- a/ext/dom/tests/dom_xinclude.phpt
+++ /dev/null
@@ -1,33 +0,0 @@
---TEST--
-Test: Xinclude and Streams
---SKIPIF--
-<?php
-require_once('skipif.inc');
-array_search('compress.zlib', stream_get_wrappers()) || die('skip compress.zlib wrapper is not available');
-?>
---FILE--
-<?php
-$dom = new domdocument;
-$dom->load(dirname(__FILE__)."/xinclude.xml");
-$dom->xinclude();
-print $dom->saveXML()."\n";
-foreach ($dom->documentElement->childNodes as $node) {
- print $node->nodeName."\n";
-}
-
---EXPECT--
-<?xml version="1.0"?>
-<foo xmlns:xi="http://www.w3.org/2001/XInclude">
- <book xml:base="compress.zlib://ext/dom/tests/book.xml">
- <title>The Grapes of Wrath</title>
- <author>John Steinbeck</author>
- </book><book xml:base="compress.zlib://ext/dom/tests/book.xml">
- <title>The Pearl</title>
- <author>John Steinbeck</author>
- </book>
- </foo>
-
-#text
-book
-book
-#text
diff --git a/ext/dom/tests/skipif.inc b/ext/dom/tests/skipif.inc
deleted file mode 100644
index 08fd695d97..0000000000
--- a/ext/dom/tests/skipif.inc
+++ /dev/null
@@ -1 +0,0 @@
-<?php if (!extension_loaded('dom')) die('skip dom extension not available');?> \ No newline at end of file
diff --git a/ext/dom/tests/test.html b/ext/dom/tests/test.html
deleted file mode 100644
index fe6d0d3dbc..0000000000
--- a/ext/dom/tests/test.html
+++ /dev/null
@@ -1,9 +0,0 @@
-<html>
-<head>
-<title>Hello world</title>
-</head>
-<body>
-This is a not well-formed<br>
-html files with undeclared entities&nbsp;
-</body>
-</html>
diff --git a/ext/dom/tests/xinclude.xml b/ext/dom/tests/xinclude.xml
deleted file mode 100644
index 27efa91aee..0000000000
--- a/ext/dom/tests/xinclude.xml
+++ /dev/null
@@ -1,4 +0,0 @@
-<?xml version="1.0"?>
-<foo xmlns:xi="http://www.w3.org/2001/XInclude">
- <xi:include href="compress.zlib://ext/dom/tests/book.xml#xpointer(/books/book)"/>
- </foo>
diff --git a/ext/dom/text.c b/ext/dom/text.c
deleted file mode 100644
index ab89177065..0000000000
--- a/ext/dom/text.c
+++ /dev/null
@@ -1,202 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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. |
- +----------------------------------------------------------------------+
- | Authors: Christian Stocker <chregu@php.net> |
- | Rob Richards <rrichards@php.net> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "php.h"
-#if HAVE_LIBXML && HAVE_DOM
-#include "php_dom.h"
-#include "dom_ce.h"
-
-/*
-* class DOMText extends DOMCharacterData
-*
-* URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#ID-1312295772
-* Since:
-*/
-
-zend_function_entry php_dom_text_class_functions[] = {
- PHP_FALIAS(splitText, dom_text_split_text, NULL)
- PHP_FALIAS(isWhitespaceInElementContent, dom_text_is_whitespace_in_element_content, NULL)
- PHP_FALIAS(replaceWholeText, dom_text_replace_whole_text, NULL)
- PHP_ME(domtext, __construct, NULL, ZEND_ACC_PUBLIC)
- {NULL, NULL, NULL}
-};
-
-/* {{{ proto void DOMText::__construct([string value]); */
-PHP_METHOD(domtext, __construct)
-{
-
- zval *id;
- xmlNodePtr nodep = NULL, oldnode = NULL;
- dom_object *intern;
- char *value = NULL;
- int value_len;
-
- php_set_error_handling(EH_THROW, dom_domexception_class_entry TSRMLS_CC);
- if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O|s", &id, dom_text_class_entry, &value, &value_len) == FAILURE) {
- php_std_error_handling();
- return;
- }
-
- php_std_error_handling();
- nodep = xmlNewText((xmlChar *) value);
-
- if (!nodep) {
- php_dom_throw_error(INVALID_STATE_ERR, 1 TSRMLS_CC);
- RETURN_FALSE;
- }
-
- intern = (dom_object *)zend_object_store_get_object(id TSRMLS_CC);
- if (intern != NULL) {
- oldnode = (xmlNodePtr)intern->ptr;
- if (oldnode != NULL) {
- php_libxml_node_free_resource(oldnode TSRMLS_CC);
- }
- php_libxml_increment_node_ptr((php_libxml_node_object *)intern, nodep, (void *)intern TSRMLS_CC);
- }
-}
-/* }}} end DOMText::__construct */
-
-/* {{{ proto wholeText string
-readonly=yes
-URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-Text3-wholeText
-Since: DOM Level 3
-*/
-int dom_text_whole_text_read(dom_object *obj, zval **retval TSRMLS_DC)
-{
- xmlNodePtr node;
- xmlChar *wholetext;
-
- node = dom_object_get_node(obj);
-
- if (node == NULL) {
- php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC);
- return FAILURE;
- }
-
- ALLOC_ZVAL(*retval);
- wholetext = xmlNodeListGetString(node->doc, node, 1);
- ZVAL_STRING(*retval, wholetext, 1);
-
- xmlFree(wholetext);
-
- return SUCCESS;
-}
-
-/* }}} */
-
-
-/* {{{ proto DOMText dom_text_split_text(int offset);
-URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-38853C1D
-Since:
-*/
-PHP_FUNCTION(dom_text_split_text)
-{
- zval *id;
- xmlChar *cur;
- xmlChar *first;
- xmlChar *second;
- xmlNodePtr node;
- xmlNodePtr nnode;
- long offset;
- int ret;
- int length;
- dom_object *intern;
-
- if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Ol", &id, dom_text_class_entry, &offset) == FAILURE) {
- return;
- }
- DOM_GET_OBJ(node, id, xmlNodePtr, intern);
-
- if (node->type != XML_TEXT_NODE) {
- RETURN_FALSE;
- }
-
- cur = xmlNodeGetContent(node);
- if (cur == NULL) {
- RETURN_FALSE;
- }
- length = xmlStrlen(cur);
-
- if (offset > length || offset < 0) {
- xmlFree(cur);
- RETURN_FALSE;
- }
-
- first = xmlStrndup(cur, offset);
- second = xmlStrdup(cur + offset);
-
- xmlFree(cur);
-
- xmlNodeSetContentLen(node, first, offset);
- nnode = xmlNewDocText(node->doc, second);
-
- xmlFree(first);
- xmlFree(second);
-
- if (node->parent != NULL) {
- nnode->type = XML_ELEMENT_NODE;
- xmlAddNextSibling(node, nnode);
- nnode->type = XML_TEXT_NODE;
- }
-
- return_value = php_dom_create_object(nnode, &ret, NULL, return_value, intern TSRMLS_CC);
-}
-/* }}} end dom_text_split_text */
-
-
-/* {{{ proto boolean dom_text_is_whitespace_in_element_content();
-URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-Text3-isWhitespaceInElementContent
-Since: DOM Level 3
-*/
-PHP_FUNCTION(dom_text_is_whitespace_in_element_content)
-{
- zval *id;
- xmlNodePtr node;
- dom_object *intern;
-
- if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &id, dom_text_class_entry) == FAILURE) {
- return;
- }
- DOM_GET_OBJ(node, id, xmlNodePtr, intern);
-
- if (xmlIsBlankNode(node)) {
- RETURN_TRUE;
- } else {
- RETURN_FALSE;
- }
-}
-/* }}} end dom_text_is_whitespace_in_element_content */
-
-
-/* {{{ proto DOMText dom_text_replace_whole_text(string content);
-URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-Text3-replaceWholeText
-Since: DOM Level 3
-*/
-PHP_FUNCTION(dom_text_replace_whole_text)
-{
- DOM_NOT_IMPLEMENTED();
-}
-/* }}} end dom_text_replace_whole_text */
-#endif
diff --git a/ext/dom/typeinfo.c b/ext/dom/typeinfo.c
deleted file mode 100644
index da50ce6366..0000000000
--- a/ext/dom/typeinfo.c
+++ /dev/null
@@ -1,74 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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. |
- +----------------------------------------------------------------------+
- | Authors: Christian Stocker <chregu@php.net> |
- | Rob Richards <rrichards@php.net> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "php.h"
-#if HAVE_LIBXML && HAVE_DOM
-#include "php_dom.h"
-
-
-/*
-* class domtypeinfo
-*
-* URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#TypeInfo
-* Since: DOM Level 3
-*/
-
-zend_function_entry php_dom_typeinfo_class_functions[] = {
- {NULL, NULL, NULL}
-};
-
-/* {{{ attribute protos, not implemented yet */
-
-/* {{{ proto type_name string
-readonly=yes
-URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#TypeInfo-typeName
-Since:
-*/
-int dom_typeinfo_type_name_read(dom_object *obj, zval **retval TSRMLS_DC)
-{
- ALLOC_ZVAL(*retval);
- ZVAL_NULL(*retval);
- return SUCCESS;
-}
-
-/* }}} */
-
-
-
-/* {{{ proto type_namespace string
-readonly=yes
-URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#TypeInfo-typeNamespace
-Since:
-*/
-int dom_typeinfo_type_namespace_read(dom_object *obj, zval **retval TSRMLS_DC)
-{
- ALLOC_ZVAL(*retval);
- ZVAL_NULL(*retval);
- return SUCCESS;
-}
-
-/* }}} */
-
-#endif
diff --git a/ext/dom/userdatahandler.c b/ext/dom/userdatahandler.c
deleted file mode 100644
index 7ed1cee203..0000000000
--- a/ext/dom/userdatahandler.c
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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. |
- +----------------------------------------------------------------------+
- | Authors: Christian Stocker <chregu@php.net> |
- | Rob Richards <rrichards@php.net> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "php.h"
-#if HAVE_LIBXML && HAVE_DOM
-#include "php_dom.h"
-
-
-/*
-* class domuserdatahandler
-*
-* URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#UserDataHandler
-* Since: DOM Level 3
-*/
-
-zend_function_entry php_dom_userdatahandler_class_functions[] = {
- PHP_FALIAS(handle, dom_userdatahandler_handle, NULL)
- {NULL, NULL, NULL}
-};
-
-/* {{{ attribute protos, not implemented yet */
-
-
-/* {{{ proto dom_void dom_userdatahandler_handle(unsigned short operation, string key, domobject data, node src, node dst);
-URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#ID-handleUserDataEvent
-Since:
-*/
-PHP_FUNCTION(dom_userdatahandler_handle)
-{
- DOM_NOT_IMPLEMENTED();
-}
-/* }}} end dom_userdatahandler_handle */
-#endif
diff --git a/ext/dom/xml_common.h b/ext/dom/xml_common.h
deleted file mode 100644
index 72f5442578..0000000000
--- a/ext/dom/xml_common.h
+++ /dev/null
@@ -1,102 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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. |
- +----------------------------------------------------------------------+
- | Authors: Christian Stocker <chregu@php.net> |
- | Rob Richards <rrichards@php.net> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifndef PHP_XML_COMMON_H
-#define PHP_XML_COMMON_H
-
-#include "ext/libxml/php_libxml.h"
-
-typedef struct _dom_doc_props {
- int formatoutput;
- int validateonparse;
- int resolveexternals;
- int preservewhitespace;
- int substituteentities;
- int stricterror;
- int recover;
-} dom_doc_props;
-
-typedef dom_doc_props *dom_doc_propsptr;
-
-typedef struct _dom_object {
- zend_object std;
- void *ptr;
- php_libxml_ref_obj *document;
- HashTable *prop_handler;
- zend_object_handle handle;
-} dom_object;
-
-#ifdef PHP_WIN32
-#ifdef PHPAPI
-#undef PHPAPI
-#endif
-#ifdef DOM_EXPORTS
-#define PHPAPI __declspec(dllexport)
-#else
-#define PHPAPI __declspec(dllimport)
-#endif /* DOM_EXPORTS */
-#endif /* PHP_WIN32 */
-
-#define PHP_DOM_EXPORT(__type) PHPAPI __type
-
-PHP_DOM_EXPORT(zend_class_entry *) dom_node_class_entry;
-PHP_DOM_EXPORT(dom_object *) php_dom_object_get_data(xmlNodePtr obj);
-PHP_DOM_EXPORT(zval *) php_dom_create_object(xmlNodePtr obj, int *found, zval *in, zval* return_value, dom_object *domobj TSRMLS_DC);
-PHP_DOM_EXPORT(xmlNodePtr) dom_object_get_node(dom_object *obj);
-
-#define DOM_XMLNS_NAMESPACE \
- (const xmlChar *) "http://www.w3.org/2000/xmlns/"
-
-#define NODE_GET_OBJ(__ptr, __id, __prtype, __intern) { \
- __intern = (php_libxml_node_object *)zend_object_store_get_object(__id TSRMLS_CC); \
- if (__intern->node == NULL || !(__ptr = (__prtype)__intern->node->node)) { \
- php_error(E_WARNING, "Couldn't fetch %s", __intern->std.ce->name);\
- RETURN_NULL();\
- } \
-}
-
-#define DOC_GET_OBJ(__ptr, __id, __prtype, __intern) { \
- __intern = (php_libxml_node_object *)zend_object_store_get_object(__id TSRMLS_CC); \
- if (__intern->document != NULL) { \
- if (!(__ptr = (__prtype)__intern->document->ptr)) { \
- php_error(E_WARNING, "Couldn't fetch %s", __intern->std.ce->name);\
- RETURN_NULL();\
- } \
- } \
-}
-
-#define DOM_RET_OBJ(zval, obj, ret, domobject) \
- if (NULL == (zval = php_dom_create_object(obj, ret, zval, return_value, domobject TSRMLS_CC))) { \
- php_error(E_WARNING, "Cannot create required DOM object"); \
- RETURN_FALSE; \
- }
-
-#define DOM_GET_THIS(zval) \
- if (NULL == (zval = getThis())) { \
- php_error(E_WARNING, "Underlying object missing"); \
- RETURN_FALSE; \
- }
-
-#define DOM_GET_THIS_OBJ(__ptr, __id, __prtype, __intern) \
- DOM_GET_THIS(__id); \
- DOM_GET_OBJ(__ptr, __id, __prtype, __intern);
-
-#endif
diff --git a/ext/dom/xpath.c b/ext/dom/xpath.c
deleted file mode 100644
index 6a43d75f18..0000000000
--- a/ext/dom/xpath.c
+++ /dev/null
@@ -1,262 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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. |
- +----------------------------------------------------------------------+
- | Authors: Christian Stocker <chregu@php.net> |
- | Rob Richards <rrichards@php.net> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "php.h"
-#if HAVE_LIBXML && HAVE_DOM
-#include "php_dom.h"
-
-
-/*
-* class DOMXPath
-*/
-
-#if defined(LIBXML_XPATH_ENABLED)
-
-zend_function_entry php_dom_xpath_class_functions[] = {
- PHP_ME(domxpath, __construct, NULL, ZEND_ACC_PUBLIC)
- PHP_FALIAS(registerNamespace, dom_xpath_register_ns, NULL)
- PHP_FALIAS(query, dom_xpath_query, NULL)
- {NULL, NULL, NULL}
-};
-
-/* {{{ proto void DOMXPath::__construct(DOMDocument doc); */
-PHP_METHOD(domxpath, __construct)
-{
- zval *id, *doc;
- xmlDocPtr docp = NULL;
- dom_object *docobj, *intern;
- xmlXPathContextPtr ctx, oldctx;
-
- php_set_error_handling(EH_THROW, dom_domexception_class_entry TSRMLS_CC);
- if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "OO", &id, dom_xpath_class_entry, &doc, dom_document_class_entry) == FAILURE) {
- php_std_error_handling();
- return;
- }
-
- php_std_error_handling();
- DOM_GET_OBJ(docp, doc, xmlDocPtr, docobj);
-
- ctx = xmlXPathNewContext(docp);
- if (ctx == NULL) {
- php_dom_throw_error(INVALID_STATE_ERR, 1 TSRMLS_CC);
- RETURN_FALSE;
- }
-
- intern = (dom_object *)zend_object_store_get_object(id TSRMLS_CC);
- if (intern != NULL) {
- oldctx = (xmlXPathContextPtr)intern->ptr;
- if (oldctx != NULL) {
- php_libxml_decrement_doc_ref((php_libxml_node_object *)intern TSRMLS_CC);
- xmlXPathFreeContext(oldctx);
- }
- intern->ptr = ctx;
- intern->document = docobj->document;
- php_libxml_increment_doc_ref((php_libxml_node_object *)intern, docp TSRMLS_CC);
- }
-}
-/* }}} end DOMXPath::__construct */
-
-/* {{{ proto document DOMDocument*/
-int dom_xpath_document_read(dom_object *obj, zval **retval TSRMLS_DC)
-{
- xmlDoc *docp = NULL;
- xmlXPathContextPtr ctx;
- int ret;
-
- ctx = (xmlXPathContextPtr) obj->ptr;
-
- if (ctx) {
- docp = (xmlDocPtr) ctx->doc;
- }
-
- ALLOC_ZVAL(*retval);
- if (NULL == (*retval = php_dom_create_object((xmlNodePtr) docp, &ret, NULL, *retval, obj TSRMLS_CC))) {
- php_error(E_WARNING, "Cannot create required DOM object");
- return FAILURE;
- }
- return SUCCESS;
-}
-
-/* {{{ proto boolean dom_xpath_register_ns(string prefix, string uri); */
-PHP_FUNCTION(dom_xpath_register_ns)
-{
- zval *id;
- xmlXPathContextPtr ctxp;
- int prefix_len, ns_uri_len;
- dom_object *intern;
- unsigned char *prefix, *ns_uri;
-
- if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Oss", &id, dom_xpath_class_entry, &prefix, &prefix_len, &ns_uri, &ns_uri_len) == FAILURE) {
- return;
- }
-
- intern = (dom_object *)zend_object_store_get_object(id TSRMLS_CC);
-
- ctxp = (xmlXPathContextPtr) intern->ptr;
- if (ctxp == NULL) {
- php_error(E_WARNING, "Invalid XPath Context");
- RETURN_FALSE;
- }
-
- if (xmlXPathRegisterNs(ctxp, prefix, ns_uri) != 0) {
- RETURN_FALSE
- }
- RETURN_TRUE;
-}
-
-static void dom_xpath_iter(zval *baseobj, dom_object *intern)
-{
- dom_nnodemap_object *mapptr;
-
- mapptr = (dom_nnodemap_object *)intern->ptr;
- mapptr->baseobjptr = baseobj;
- mapptr->nodetype = DOM_NODESET;
-
-}
-
-/* {{{ proto DOMNodeList dom_xpath_query(string expr [,DOMNode context]); */
-PHP_FUNCTION(dom_xpath_query)
-{
- zval *id, *retval, *context = NULL;
- xmlXPathContextPtr ctxp;
- xmlNodePtr nodep = NULL;
- xmlXPathObjectPtr xpathobjp;
- int expr_len, ret, nsnbr = 0;
- dom_object *intern, *nodeobj;
- char *expr;
- xmlDoc *docp = NULL;
- xmlNsPtr *ns;
-
-
- if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Os|O", &id, dom_xpath_class_entry, &expr, &expr_len, &context, dom_node_class_entry) == FAILURE) {
- return;
- }
-
- intern = (dom_object *)zend_object_store_get_object(id TSRMLS_CC);
-
- ctxp = (xmlXPathContextPtr) intern->ptr;
- if (ctxp == NULL) {
- php_error(E_WARNING, "Invalid XPath Context");
- RETURN_FALSE;
- }
-
- docp = (xmlDocPtr) ctxp->doc;
- if (docp == NULL) {
- php_error(E_WARNING, "Invalid XPath Document Pointer");
- RETURN_FALSE;
- }
-
- if (context != NULL) {
- DOM_GET_OBJ(nodep, context, xmlNodePtr, nodeobj);
- }
-
- if (!nodep) {
- nodep = xmlDocGetRootElement(docp);
- }
-
- if (nodep && docp != nodep->doc) {
- php_error(E_WARNING, "Node From Wrong Document");
- RETURN_FALSE;
- }
-
- ctxp->node = nodep;
-
- /* Register namespaces in the node */
- ns = xmlGetNsList(docp, nodep);
-
- if (ns != NULL) {
- while (ns[nsnbr] != NULL)
- nsnbr++;
- }
-
-
- ctxp->namespaces = ns;
- ctxp->nsNr = nsnbr;
-
- xpathobjp = xmlXPathEvalExpression(expr, ctxp);
- ctxp->node = NULL;
-
- if (ns != NULL) {
- xmlFree(ns);
- ctxp->namespaces = NULL;
- ctxp->nsNr = 0;
- }
-
- if (! xpathobjp) {
- RETURN_FALSE;
- }
-
-
- MAKE_STD_ZVAL(retval);
- array_init(retval);
-
- if (xpathobjp->type == XPATH_NODESET) {
- int i;
- xmlNodeSetPtr nodesetp;
-
- if (NULL != (nodesetp = xpathobjp->nodesetval)) {
-
- for (i = 0; i < nodesetp->nodeNr; i++) {
- xmlNodePtr node = nodesetp->nodeTab[i];
- zval *child;
-
- MAKE_STD_ZVAL(child);
-
- if (node->type == XML_NAMESPACE_DECL) {
- xmlNsPtr curns;
- xmlNodePtr nsparent;
-
- nsparent = node->_private;
- curns = xmlNewNs(NULL, node->name, NULL);
- if (node->children) {
- curns->prefix = xmlStrdup((char *) node->children);
- }
- if (node->children) {
- node = xmlNewDocNode(docp, NULL, (char *) node->children, node->name);
- } else {
- node = xmlNewDocNode(docp, NULL, "xmlns", node->name);
- }
- node->type = XML_NAMESPACE_DECL;
- node->parent = nsparent;
- node->ns = curns;
- }
- child = php_dom_create_object(node, &ret, NULL, child, intern TSRMLS_CC);
- add_next_index_zval(retval, child);
- }
- }
- }
-
- php_dom_create_interator(return_value, DOM_NODELIST TSRMLS_CC);
- intern = (dom_object *)zend_objects_get_address(return_value TSRMLS_CC);
- dom_xpath_iter(retval, intern);
-
- xmlXPathFreeObject(xpathobjp);
-}
-/* }}} end dom_xpath_query */
-
-#endif /* LIBXML_XPATH_ENABLED */
-
-/* }}} */
-#endif
diff --git a/ext/enchant/CREDITS b/ext/enchant/CREDITS
deleted file mode 100644
index 481febbfc2..0000000000
--- a/ext/enchant/CREDITS
+++ /dev/null
@@ -1,2 +0,0 @@
-enchant
-Pierre-Alain Joye, Ilia Alshanetsky
diff --git a/ext/enchant/config.m4 b/ext/enchant/config.m4
deleted file mode 100755
index b59cd8fb3c..0000000000
--- a/ext/enchant/config.m4
+++ /dev/null
@@ -1,36 +0,0 @@
-dnl
-dnl $Id$
-dnl
-
-PHP_ARG_WITH(enchant,for ENCHANT support,
-[ --with-enchant[=DIR] Include enchant support.
- GNU Aspell version 1.1.3 or higher required.])
-
-if test "$PHP_ENCHANT" != "no"; then
- PHP_NEW_EXTENSION(enchant, enchant.c, $ext_shared)
- if test "$PHP_ENCHANT" != "yes"; then
- ENCHANT_SEARCH_DIRS=$PHP_ENCHANT
- else
- ENCHANT_SEARCH_DIRS="/usr/local /usr"
- fi
- for i in $ENCHANT_SEARCH_DIRS; do
- if test -f $i/include/enchant/enchant.h; then
- ENCHANT_DIR=$i
- ENCHANT_INCDIR=$i/include/enchant
- elif test -f $i/include/enchant.h; then
- ENCHANT_DIR=$i
- ENCHANT_INCDIR=$i/include
- fi
- done
-
- if test -z "$ENCHANT_DIR"; then
- AC_MSG_ERROR(Cannot find enchant)
- fi
-
- ENCHANT_LIBDIR=$ENCHANT_DIR/lib
-
- AC_DEFINE(HAVE_ENCHANT,1,[ ])
- PHP_SUBST(ENCHANT_SHARED_LIBADD)
- PHP_ADD_LIBRARY_WITH_PATH(enchant, $ENCHANT_LIBDIR, ENCHANT_SHARED_LIBADD)
- PHP_ADD_INCLUDE($ENCHANT_INCDIR)
-fi
diff --git a/ext/enchant/config.w32 b/ext/enchant/config.w32
deleted file mode 100644
index f9ba6beafc..0000000000
--- a/ext/enchant/config.w32
+++ /dev/null
@@ -1,13 +0,0 @@
-// $Id$
-// vim:ft=javascript
-
-ARG_ENABLE("enchant", "Enchant Support", "no");
-
-if (PHP_ENCHANT == "yes") {
- if (CHECK_HEADER_ADD_INCLUDE("enchant.h", "CFLAGS_ENCHANT", PHP_ENCHANT)) {
- EXTENSION("enchant", "enchant.c");
- AC_DEFINE('HAVE_ENCHANT', 1, 'Have Enchant support', false);
- } else {
- WARNING('Could not find enchant.h; skipping');
- }
-}
diff --git a/ext/enchant/docs/examples/example1.php b/ext/enchant/docs/examples/example1.php
deleted file mode 100644
index 9d503f74e6..0000000000
--- a/ext/enchant/docs/examples/example1.php
+++ /dev/null
@@ -1,25 +0,0 @@
-<?php
-$tag = 'en_US';
-$r = enchant_broker_init();
-$bprovides = enchant_broker_describe($r);
-echo "Current broker provides the following backend(s):\n";
-print_r($bprovides);
-
-
-if (enchant_broker_dict_exists($r,$tag)) {
- $d = enchant_broker_request_dict($r, $tag);
- $dprovides = enchant_dict_describe($d);
- echo "dictionary $tag provides:\n";
- $spellerrors = enchant_dict_check($d, "soong");
- print_r($dprovides);
- echo "found $spellerrors spell errors\n";
- if ($spellerrors) {
- $suggs = enchant_dict_suggest($d, "soong");
- echo "Suggestions for 'soong':";
- print_r($suggs);
- }
- enchant_broker_free_dict($d);
-} else {
-}
-enchant_broker_free($r);
-?>
diff --git a/ext/enchant/enchant.c b/ext/enchant/enchant.c
deleted file mode 100755
index b92fa9d468..0000000000
--- a/ext/enchant/enchant.c
+++ /dev/null
@@ -1,731 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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 at through the world-wide-web at |
- | 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: Pierre-Alain Joye <paj@pearfr.org> |
- | Ilia Alshanetsky <ilia@prohost.org> |
- +----------------------------------------------------------------------+
-
- $Id$
-*/
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-#include "enchant.h"
-#include "php.h"
-#include "php_ini.h"
-#include "ext/standard/info.h"
-#include "php_enchant.h"
-
-
-typedef EnchantBroker * EnchantBrokerPtr;
-typedef struct _broker_struct enchant_broker;
-typedef struct _dict_struct enchant_dict;
-
-typedef enchant_broker * enchant_brokerPtr;
-typedef enchant_dict * enchant_dictPtr;
-
-typedef struct _broker_struct {
- EnchantBroker *pbroker;
- enchant_dict **dict;
- unsigned int dictcnt;
- zval *rsrc_id;
-} _enchant_broker;
-
-typedef struct _dict_struct {
- unsigned int id;
- EnchantDict *pdict;
- enchant_broker *pbroker;
- zval *rsrc_id;
- enchant_dict *next;
- enchant_dict *prev;
-} _enchant_dict;
-
-
-/* True global resources - no need for thread safety here */
-static int le_enchant_broker;
-static int le_enchant_dict;
-
-/* If you declare any globals in php_enchant.h uncomment this:*/
-/*ZEND_DECLARE_MODULE_GLOBALS(enchant)*/
-
-/* {{{ enchant_functions[]
- *
- * Every user visible function must have an entry in enchant_functions[].
- */
-function_entry enchant_functions[] = {
- PHP_FE(enchant_broker_init, NULL)
- PHP_FE(enchant_broker_free, NULL)
- PHP_FE(enchant_broker_get_error, NULL)
- PHP_FE(enchant_broker_request_dict, NULL)
- PHP_FE(enchant_broker_request_pwl_dict, NULL)
- PHP_FE(enchant_broker_free_dict, NULL)
- PHP_FE(enchant_broker_dict_exists, NULL)
- PHP_FE(enchant_broker_set_ordering, NULL)
- PHP_FE(enchant_broker_describe, NULL)
- PHP_FE(enchant_dict_check, NULL)
- PHP_FE(enchant_dict_suggest, NULL)
- PHP_FE(enchant_dict_add_to_personal, NULL)
- PHP_FE(enchant_dict_add_to_session, NULL)
- PHP_FE(enchant_dict_is_in_session, NULL)
- PHP_FE(enchant_dict_store_replacement, NULL)
- PHP_FE(enchant_dict_get_error, NULL)
- PHP_FE(enchant_dict_describe, NULL)
- PHP_FE(enchant_dict_quick_check, third_arg_force_ref)
-
- {NULL, NULL, NULL} /* Must be the last line in enchant_functions[] */
-};
-/* }}} */
-
-/* {{{ enchant_module_entry
- */
-zend_module_entry enchant_module_entry = {
-#if ZEND_MODULE_API_NO >= 20010901
- STANDARD_MODULE_HEADER,
-#endif
- "enchant",
- enchant_functions,
- PHP_MINIT(enchant),
- PHP_MSHUTDOWN(enchant),
- NULL, /* Replace with NULL if there's nothing to do at request start */
- NULL, /* Replace with NULL if there's nothing to do at request end */
- PHP_MINFO(enchant),
-#if ZEND_MODULE_API_NO >= 20010901
- "0.1", /* Replace with version number for your extension */
-#endif
- STANDARD_MODULE_PROPERTIES
-};
-/* }}} */
-
-#ifdef COMPILE_DL_ENCHANT
-ZEND_GET_MODULE(enchant)
-#endif
-
-static void
-enumerate_providers_fn (const char * const name,
- const char * const desc,
- const char * const file,
- void * ud)
-{
- zval *zdesc = (zval *) ud;
- zval *tmp_array;
-
- MAKE_STD_ZVAL(tmp_array);
- array_init(tmp_array);
-
- add_assoc_string(tmp_array, "name", (char *)name, 1);
- add_assoc_string(tmp_array, "desc", (char *)desc, 1);
- add_assoc_string(tmp_array, "file", (char *)file, 1);
-
- if (Z_TYPE_P(zdesc)!=IS_ARRAY) {
- array_init(zdesc);
- }
-
- add_next_index_zval(zdesc, tmp_array);
-}
-
-static void
-describe_dict_fn (const char * const lang,
- const char * const name,
- const char * const desc,
- const char * const file,
- void * ud)
-{
- zval *zdesc = (zval *) ud;
- array_init(zdesc);
- add_assoc_string(zdesc, "lang", (char *)lang, 1);
- add_assoc_string(zdesc, "name", (char *)name, 1);
- add_assoc_string(zdesc, "desc", (char *)desc, 1);
- add_assoc_string(zdesc, "file", (char *)file, 1);
-}
-
-static void php_enchant_broker_free(zend_rsrc_list_entry *rsrc TSRMLS_DC)
-{
- if (rsrc->ptr) {
- enchant_broker *broker = (enchant_broker *)rsrc->ptr;
- if (broker) {
- if (broker->pbroker) {
- if (broker->dictcnt && broker->dict) {
- if (broker->dict) {
- int total, tofree;
- tofree = total = broker->dictcnt-1;
- do {
- zend_list_delete(Z_RESVAL_P(broker->dict[total]->rsrc_id));
- efree(broker->dict[total]);
- total--;
- } while (total>=0);
- }
- efree(broker->dict);
- broker->dict = NULL;
- }
- enchant_broker_free(broker->pbroker);
- }
- efree(broker);
- }
- }
-}
-
-static void php_enchant_dict_free(zend_rsrc_list_entry *rsrc TSRMLS_DC)
-{
- if (rsrc->ptr) {
- enchant_dict *pdict = (enchant_dict *)rsrc->ptr;
- if (pdict) {
- if (pdict->pdict && pdict->pbroker) {
- enchant_broker_free_dict(pdict->pbroker->pbroker, pdict->pdict);
- }
- if (pdict->id) {
- pdict->pbroker->dict[pdict->id-1]->next = NULL;
- }
- }
- }
-}
-
-/* {{{ PHP_MINIT_FUNCTION
- */
-PHP_MINIT_FUNCTION(enchant)
-{
- le_enchant_broker = zend_register_list_destructors_ex(php_enchant_broker_free, NULL, "enchant broker", module_number);
- le_enchant_dict = zend_register_list_destructors_ex(php_enchant_dict_free, NULL, "enchant dict", module_number);
-
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ PHP_MSHUTDOWN_FUNCTION
- */
-PHP_MSHUTDOWN_FUNCTION(enchant)
-{
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ PHP_MINFO_FUNCTION
- */
-static void __enumerate_providers_fn (const char * const name,
- const char * const desc,
- const char * const file,
- void * ud)
-{
- php_info_print_table_row(3, name, desc, file);
-}
-/* }}} */
-
-/* {{{ PHP_MINFO_FUNCTION
- */
-PHP_MINFO_FUNCTION(enchant)
-{
- EnchantBroker *pbroker;
-
- pbroker = enchant_broker_init();
- php_info_print_table_start();
- php_info_print_table_header(2, "enchant support", "enabled");
- php_info_print_table_row(2, "Version", "@version@");
- php_info_print_table_row(2, "Revision", "$Revision$");
- php_info_print_table_end();
-
- php_info_print_table_start();
- enchant_broker_describe(pbroker, __enumerate_providers_fn, NULL);
- php_info_print_table_end();
- enchant_broker_free(pbroker);
-}
-/* }}} */
-
-#define PHP_ENCHANT_GET_BROKER \
- ZEND_FETCH_RESOURCE(pbroker, enchant_broker *, &broker, -1, "enchant_broker", le_enchant_broker); \
- if (!pbroker || !pbroker->pbroker) { \
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", "Resource broker invalid"); \
- RETURN_FALSE; \
- }
-
-#define PHP_ENCHANT_GET_DICT \
- ZEND_FETCH_RESOURCE(pdict, enchant_dict *, &dict, -1, "enchant dict", le_enchant_dict); \
- if (!pdict || !pdict->pdict) { \
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", "Invalid dictionary resource."); \
- RETURN_FALSE; \
- }
-
-/* {{{ proto resource enchant_broker_init()
- create a new broker object capable of requesting */
-PHP_FUNCTION(enchant_broker_init)
-{
- enchant_broker *broker;
- EnchantBroker *pbroker;
-
- if (ZEND_NUM_ARGS()) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- pbroker = enchant_broker_init();
-
- if (pbroker) {
- broker = (enchant_broker *) emalloc(sizeof(enchant_broker));
- broker->pbroker = pbroker;
- broker->dict = NULL;
- broker->dictcnt = 0;
- ZEND_REGISTER_RESOURCE(return_value, broker, le_enchant_broker);
- broker->rsrc_id = return_value;
- } else {
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-/* {{{ proto boolean enchant_free(resource broker)
- Destroys the broker object and its dictionnaries */
-PHP_FUNCTION(enchant_broker_free)
-{
- zval *broker;
- enchant_broker *pbroker;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &broker) == FAILURE) {
- RETURN_FALSE;
- }
- PHP_ENCHANT_GET_BROKER;
-
- zend_list_delete(Z_RESVAL_P(broker));
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto string enchant_broker_get_error(resource broker)
- Returns the last error of the broker */
-PHP_FUNCTION(enchant_broker_get_error)
-{
- zval *broker;
- enchant_broker *pbroker;
- char *msg;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &broker) == FAILURE) {
- RETURN_FALSE;
- }
-
- PHP_ENCHANT_GET_BROKER;
-
- msg = enchant_broker_get_error(pbroker->pbroker);
- if (msg) {
- RETURN_STRING((char *)msg, 1);
- }
- RETURN_FALSE;
-}
-/* }}} */
-
-/* {{{ proto resource enchant_broker_request_dict(resource broker, string tag)
- create a new dictionary using tag, the non-empty language tag you wish to request
- a dictionary for ("en_US", "de_DE", ...) */
-PHP_FUNCTION(enchant_broker_request_dict)
-{
- zval *broker;
- enchant_broker *pbroker;
- enchant_dict *dict;
- EnchantDict *d;
- char *tag;
- int taglen;
- int pos;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rs", &broker, &tag, &taglen) == FAILURE) {
- RETURN_FALSE;
- }
-
- PHP_ENCHANT_GET_BROKER;
-
- d = enchant_broker_request_dict(pbroker->pbroker, (const char *)tag);
- if (d) {
- if (pbroker->dictcnt) {
- pbroker->dict = (enchant_dict **)erealloc(pbroker->dict, sizeof(enchant_dict *) * pbroker->dictcnt);
- pos = pbroker->dictcnt++;
- } else {
- pbroker->dict = (enchant_dict **)emalloc(sizeof(enchant_dict *));
- pos = 0;
- pbroker->dictcnt++;
- }
-
- dict = pbroker->dict[pos] = (enchant_dict *)emalloc(sizeof(enchant_dict));
- dict->id = pos;
- dict->pbroker = pbroker;
- dict->pdict = d;
- dict->rsrc_id = return_value;
- dict->prev = pos ? pbroker->dict[pos-1] : NULL;
- dict->next = NULL;
- pbroker->dict[pos] = dict;
-
- if (pos) {
- pbroker->dict[pos-1]->next = dict;
- }
-
- ZEND_REGISTER_RESOURCE(return_value, dict, le_enchant_dict);
- } else {
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-/* {{{ proto resource enchant_broker_request_pwl_dict(resource dict, string filename)
- creates a dictionary using a PWL file. A PWL file is personal word file one word per line.
- It must exist before the call.*/
-PHP_FUNCTION(enchant_broker_request_pwl_dict)
-{
- zval *broker;
- enchant_broker *pbroker;
- enchant_dict *dict;
- EnchantDict *d;
- char *pwl;
- int pwllen;
- int pos;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rs", &broker, &pwl, &pwllen) == FAILURE) {
- RETURN_FALSE;
- }
-
- if ((PG(safe_mode) && (!php_checkuid(pwl, NULL, CHECKUID_CHECK_FILE_AND_DIR))) || php_check_open_basedir(pwl TSRMLS_CC)) {
- RETURN_FALSE;
- }
-
- PHP_ENCHANT_GET_BROKER;
-
- d = enchant_broker_request_pwl_dict(pbroker->pbroker, (const char *)pwl);
- if (d) {
- if (pbroker->dictcnt) {
- pos = pbroker->dictcnt++;
- pbroker->dict = (enchant_dict **)erealloc(pbroker->dict, sizeof(enchant_dict *) * pbroker->dictcnt);
- } else {
- pbroker->dict = (enchant_dict **)emalloc(sizeof(enchant_dict *));
- pos = 0;
- pbroker->dictcnt++;
- }
- dict = pbroker->dict[pos] = (enchant_dict *)emalloc(sizeof(enchant_dict));
- dict->id = pos;
- dict->pbroker = pbroker;
- dict->pdict = d;
- dict->rsrc_id = return_value;
- dict->prev = pos?pbroker->dict[pos-1]:NULL;
- dict->next = NULL;
- pbroker->dict[pos] = dict;
- if (pos) {
- pbroker->dict[pos-1]->next = dict;
- }
- ZEND_REGISTER_RESOURCE(return_value, dict, le_enchant_dict);
- } else {
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-/* {{{ proto resource enchant_broker_free_dict(resource dict)
- Free the dictionary resource */
-PHP_FUNCTION(enchant_broker_free_dict)
-{
- zval *dict;
- enchant_dict *pdict;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &dict) == FAILURE) {
- RETURN_FALSE;
- }
-
- PHP_ENCHANT_GET_DICT;
-
- zend_list_delete(Z_RESVAL_P(dict));
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto bool enchant_broker_dict_exists(resource broker, string tag)
- Wether a dictionary exists or not. Using non-empty tag */
-PHP_FUNCTION(enchant_broker_dict_exists)
-{
- zval *broker;
- char *tag;
- int taglen;
- enchant_broker * pbroker;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rs", &broker, &tag, &taglen) == FAILURE) {
- RETURN_FALSE;
- }
-
- PHP_ENCHANT_GET_BROKER;
-
- RETURN_BOOL(enchant_broker_dict_exists(pbroker->pbroker, tag));
-}
-/* }}} */
-
-
-/* {{{ proto bool enchant_broker_set_ordering(resource broker, string tag, string ordering)
- Declares a preference of dictionaries to use for the language
- described/referred to by 'tag'. The ordering is a comma delimited
- list of provider names. As a special exception, the "*" tag can
- be used as a language tag to declare a default ordering for any
- language that does not explictly declare an ordering. */
-
-PHP_FUNCTION(enchant_broker_set_ordering)
-{
- zval *broker;
- char *pordering;
- int porderinglen;
- char *ptag;
- int ptaglen;
- enchant_broker * pbroker;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rss", &broker, &ptag, &ptaglen, &pordering, &porderinglen) == FAILURE) {
- RETURN_FALSE;
- }
-
- PHP_ENCHANT_GET_BROKER;
-
- enchant_broker_set_ordering(pbroker->pbroker, ptag, pordering);
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto array enchant_broker_describe(resource broker)
- Enumerates the Enchant providers and tells
- you some rudimentary information about them. The same info is provided through phpinfo() */
-PHP_FUNCTION(enchant_broker_describe)
-{
- EnchantBrokerDescribeFn describetozval = enumerate_providers_fn;
- zval *broker;
- enchant_broker * pbroker;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &broker) == FAILURE) {
- RETURN_FALSE;
- }
-
- PHP_ENCHANT_GET_BROKER;
-
- enchant_broker_describe(pbroker->pbroker, describetozval, (void *)return_value);
-}
-/* }}} */
-
-/* {{{ proto bool enchant_dict_quick_check(resource dict, string word [, array &suggestions])
- If the word is correctly spelled return true, otherwise return false, if suggestions variable
- is provided, fill it with spelling alternatives. */
-PHP_FUNCTION(enchant_dict_quick_check)
-{
- zval *dict, *sugg = NULL;
- char *word;
- int wordlen;
- enchant_dict *pdict;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rs|z/", &dict, &word, &wordlen, &sugg) == FAILURE) {
- RETURN_FALSE;
- }
-
- if (sugg) {
- zval_dtor(sugg);
- }
-
- PHP_ENCHANT_GET_DICT;
-
- if (enchant_dict_check(pdict->pdict, word, wordlen) > 0) {
- if (!sugg && ZEND_NUM_ARGS() == 2) {
- RETURN_FALSE;
- }
-
- int n_sugg;
- char **suggs;
-
- array_init(sugg);
-
- suggs = enchant_dict_suggest(pdict->pdict, word, wordlen, &n_sugg);
- if (suggs && n_sugg) {
- int i;
- for (i = 0; i < n_sugg; i++) {
- add_next_index_string(sugg, suggs[i], 1);
- }
- enchant_dict_free_suggestions(pdict->pdict, suggs);
- }
-
-
- RETURN_FALSE;
- }
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto bool enchant_dict_check(resource dict, string word)
- If the word is correctly spelled return true, otherwise return false */
-PHP_FUNCTION(enchant_dict_check)
-{
- zval *dict;
- char *word;
- int wordlen;
- enchant_dict *pdict;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rs", &dict, &word, &wordlen) == FAILURE) {
- RETURN_FALSE;
- }
-
- PHP_ENCHANT_GET_DICT;
-
- RETURN_BOOL(!enchant_dict_check(pdict->pdict, word, wordlen));
-}
-/* }}} */
-
-/* {{{ proto array enchant_dict_suggest(resource dict, string word)
- Will return a list of values if any of those pre-conditions are not met.*/
-PHP_FUNCTION(enchant_dict_suggest)
-{
- zval *dict;
- char *word;
- int wordlen;
- char **suggs;
- enchant_dict *pdict;
- int n_sugg;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rs", &dict, &word, &wordlen) == FAILURE) {
- RETURN_FALSE;
- }
-
- PHP_ENCHANT_GET_DICT;
-
- suggs = enchant_dict_suggest(pdict->pdict, word, wordlen, &n_sugg);
- if (suggs && n_sugg) {
- int i;
-
- array_init(return_value);
- for (i = 0; i < n_sugg; i++) {
- add_next_index_string(return_value, suggs[i], 1);
- }
-
- enchant_dict_free_suggestions(pdict->pdict, suggs);
- }
-}
-/* }}} */
-
-/* {{{ proto void enchant_dict_add_to_personal(resource dict, string word)
- add 'word' to personal word list */
-PHP_FUNCTION(enchant_dict_add_to_personal)
-{
- zval *dict;
- char *word;
- int wordlen;
- enchant_dict *pdict;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rs", &dict, &word, &wordlen) == FAILURE) {
- RETURN_FALSE;
- }
-
- PHP_ENCHANT_GET_DICT;
-
- enchant_dict_add_to_personal(pdict->pdict, word, wordlen);
-}
-/* }}} */
-
-/* {{{ proto void enchant_dict_add_to_session(resource dict, string word)
- add 'word' to this spell-checking session */
-PHP_FUNCTION(enchant_dict_add_to_session)
-{
- zval *dict;
- char *word;
- int wordlen;
- enchant_dict *pdict;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rs", &dict, &word, &wordlen) == FAILURE) {
- RETURN_FALSE;
- }
-
- PHP_ENCHANT_GET_DICT;
-
- enchant_dict_add_to_session(pdict->pdict, word, wordlen);
-}
-/* }}} */
-
-/* {{{ proto bool enchant_dict_is_in_session(resource dict, string word)
- whether or not 'word' exists in this spelling-session */
-PHP_FUNCTION(enchant_dict_is_in_session)
-{
- zval *dict;
- char *word;
- int wordlen;
- enchant_dict *pdict;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rs", &dict, &word, &wordlen) == FAILURE) {
- RETURN_FALSE;
- }
-
- PHP_ENCHANT_GET_DICT;
-
- RETURN_BOOL(enchant_dict_is_in_session(pdict->pdict, word, wordlen));
-}
-/* }}} */
-
-/* {{{ proto void enchant_dict_store_replacement(resource dict, string mis, string cor)
- add a correction for 'mis' using 'cor'.
- Notes that you replaced @mis with @cor, so it's possibly more likely
- that future occurrences of @mis will be replaced with @cor. So it might
- bump @cor up in the suggestion list.*/
-PHP_FUNCTION(enchant_dict_store_replacement)
-{
- zval *dict;
- char *mis, *cor;
- int mislen, corlen;
-
- enchant_dict *pdict;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rss", &dict, &mis, &mislen, &cor, &corlen) == FAILURE) {
- RETURN_FALSE;
- }
-
- PHP_ENCHANT_GET_DICT;
-
- enchant_dict_store_replacement(pdict->pdict, mis, mislen, cor, corlen);
-}
-/* }}} */
-
-/* {{{ proto string enchant_dict_get_error(resource dict)
- Returns the last error of the current spelling-session */
-PHP_FUNCTION(enchant_dict_get_error)
-{
- zval *dict;
- enchant_dict *pdict;
- char *msg;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &dict) == FAILURE) {
- RETURN_FALSE;
- }
-
- PHP_ENCHANT_GET_DICT;
-
- msg = enchant_dict_get_error(pdict->pdict);
- if (msg) {
- RETURN_STRING((char *)msg, 1);
- }
-
- RETURN_FALSE;
-}
-/* }}} */
-
-/* {{{ proto array enchant_dict_describe(resource dict)
- Describes an individual dictionary 'dict' */
-PHP_FUNCTION(enchant_dict_describe)
-{
- zval *dict;
- enchant_dict *pdict;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &dict) == FAILURE) {
- RETURN_FALSE;
- }
-
- PHP_ENCHANT_GET_DICT;
-
- enchant_dict_describe(pdict->pdict, describe_dict_fn, (void *)return_value);
-}
-/* }}} */
-
-/*
- * 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/enchant/package.xml b/ext/enchant/package.xml
deleted file mode 100755
index 6bc17c7a9b..0000000000
--- a/ext/enchant/package.xml
+++ /dev/null
@@ -1,83 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1" ?>
-<!DOCTYPE package SYSTEM "../pear/package.dtd">
-<package>
- <name>enchant</name>
- <summary>libenchant binder, support near all spelling tools</summary>
- <maintainers>
- <maintainer>
- <user>pajoye</user>
- <name>Pierre-Alain Joye</name>
- <email>paj@pearfr.org</email>
- <role>lead</role>
- </maintainer>
- <maintainer>
- <user>iliaa</user>
- <name>Ilia Alshanetsky</name>
- <email>ilia@php.net</email>
- <role>lead</role>
- </maintainer>
- </maintainers>
- <description>Enchant is a binder for libenchant. Libenchant provides a common
-API for many spell libraries:
-- aspell/pspell (intended to replace ispell)
-- hspell (hebrew)
-- ispell
-- myspell (OpenOffice project, mozilla)
-- uspell (primarily Yiddish, Hebrew, and Eastern European languages)
-A plugin system allows to add custom spell support.
-see www.abisource.com/enchant/</description>
- <license>PHP</license>
- <release>
- <state>stable</state>
- <version>1.0</version>
- <date>2004-08-11</date>
- <notes>- Fixed leak inside MINFO function.
-- Fixed crash inside enchant_dict_suggest() when there are no suggestions.
-- Added missing safe_mode/open_basedir check inside enchant_broker_request_pwl_dict().
-- Fixed various function prototypes.
-- Fixed possible leak in suggestions result.</notes>
- <filelist>
- <file role="src" name="config.m4"/>
- <file role="src" name="config.w32"/>
- <file role="src" name="enchant.c"/>
- <file role="src" name="php_enchant.h"/>
- <file role="doc" name="CREDITS"/>
- <dir name="docs" role="doc">
- <dir name="examples">
- <file name="example1.php"/>
- </dir>
- </dir>
- </filelist>
- <configureoptions>
- <configureoption name="with-enchant" default="shared" prompt="libenchant prefix?"/>
- </configureoptions>
- <deps>
- <dep type="php" rel="ge" version="5" />
- </deps>
- </release>
- <changelog>
- <release>
- <state>beta</state>
- <version>0.2.1</version>
- <date>2004-03-11</date>
- <notes>- Fix possible leak in suggestions result
-- Move to beta status</notes>
- </release>
- <release>
- <state>alpha</state>
- <version>0.2.0</version>
- <notes>- Add Ilia Alshanetsky as maintainer
-- Cleanup sources codes (ilia)
-- Add enchant_dict_quick_check (ilia)</notes>
- </release>
- <release>
- <version>0.1</version>
- <state>alpha</state>
- <date>2003-03-08</date>
- <notes>Initial release</notes>
- </release>
- </changelog>
-</package>
-<!--
-vim:et:ts=1:sw=1
--->
diff --git a/ext/enchant/php_enchant.h b/ext/enchant/php_enchant.h
deleted file mode 100644
index e0d98730ca..0000000000
--- a/ext/enchant/php_enchant.h
+++ /dev/null
@@ -1,80 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2003 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 at through the world-wide-web at |
- | 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: Pierre-Alain Joye <paj@pearfr.org> |
- +----------------------------------------------------------------------+
-
- $Id$
-*/
-
-#ifndef PHP_ENCHANT_H
-#define PHP_ENCHANT_H
-
-extern zend_module_entry enchant_module_entry;
-#define phpext_enchant_ptr &enchant_module_entry
-
-#ifdef PHP_WIN32
-#define PHP_ENCHANT_API __declspec(dllexport)
-#else
-#define PHP_ENCHANT_API
-#endif
-
-#ifdef ZTS
-#include "TSRM.h"
-#endif
-
-static void php_enchant_broker_free(zend_rsrc_list_entry *rsrc TSRMLS_DC);
-static void php_enchant_dict_free(zend_rsrc_list_entry *rsrc TSRMLS_DC);
-
-PHP_MINIT_FUNCTION(enchant);
-PHP_MSHUTDOWN_FUNCTION(enchant);
-PHP_MINFO_FUNCTION(enchant);
-
-PHP_FUNCTION(enchant_broker_init);
-PHP_FUNCTION(enchant_broker_free);
-PHP_FUNCTION(enchant_broker_get_error);
-PHP_FUNCTION(enchant_broker_request_dict);
-PHP_FUNCTION(enchant_broker_request_pwl_dict);
-PHP_FUNCTION(enchant_broker_free_dict);
-PHP_FUNCTION(enchant_broker_dict_exists);
-PHP_FUNCTION(enchant_broker_set_ordering);
-PHP_FUNCTION(enchant_broker_describe);
-
-PHP_FUNCTION(enchant_dict_check);
-PHP_FUNCTION(enchant_dict_suggest);
-PHP_FUNCTION(enchant_dict_add_to_personal);
-PHP_FUNCTION(enchant_dict_add_to_session);
-PHP_FUNCTION(enchant_dict_is_in_session);
-PHP_FUNCTION(enchant_dict_store_replacement);
-PHP_FUNCTION(enchant_dict_get_error);
-PHP_FUNCTION(enchant_dict_describe);
-PHP_FUNCTION(enchant_dict_quick_check);
-
-#ifdef ZTS
-#define ENCHANT_G(v) TSRMG(enchant_globals_id, zend_enchant_globals *, v)
-#else
-#define ENCHANT_G(v) (enchant_globals.v)
-#endif
-
-#endif /* PHP_ENCHANT_H */
-
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * indent-tabs-mode: t
- * End:
- */
-
diff --git a/ext/ereg/ereg.c b/ext/ereg/ereg.c
deleted file mode 100644
index 02d1903539..0000000000
--- a/ext/ereg/ereg.c
+++ /dev/null
@@ -1,637 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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. |
- +----------------------------------------------------------------------+
- | Authors: Rasmus Lerdorf <rasmus@php.net> |
- | Jim Winstead <jimw@php.net> |
- | Jaakko Hyvätti <jaakko@hyvatti.iki.fi> |
- +----------------------------------------------------------------------+
- */
-/* $Id$ */
-
-#include <stdio.h>
-#include <ctype.h>
-#include "php.h"
-#include "php_string.h"
-#include "reg.h"
-#include "ext/standard/info.h"
-
-ZEND_DECLARE_MODULE_GLOBALS(reg)
-
-typedef struct {
- regex_t preg;
- int cflags;
-} reg_cache;
-
-/* {{{ _php_regcomp
- */
-static int _php_regcomp(regex_t *preg, const char *pattern, int cflags)
-{
- int r = 0;
- int patlen = strlen(pattern);
- reg_cache *rc = NULL;
- TSRMLS_FETCH();
-
- if(zend_hash_find(&REG(ht_rc), (char *) pattern, patlen+1, (void **) &rc) == FAILURE ||
- rc->cflags != cflags) {
- r = regcomp(preg, pattern, cflags);
- if(!r) {
- reg_cache rcp;
-
- rcp.cflags = cflags;
- memcpy(&rcp.preg, preg, sizeof(*preg));
- zend_hash_update(&REG(ht_rc), (char *) pattern, patlen+1,
- (void *) &rcp, sizeof(rcp), NULL);
- }
- } else {
- memcpy(preg, &rc->preg, sizeof(*preg));
- }
-
- return r;
-}
-/* }}} */
-
-static void _free_reg_cache(reg_cache *rc)
-{
- regfree(&rc->preg);
-}
-
-#undef regfree
-#define regfree(a);
-#undef regcomp
-#define regcomp(a, b, c) _php_regcomp(a, b, c)
-
-static void php_reg_init_globals(zend_reg_globals *reg_globals TSRMLS_DC)
-{
- zend_hash_init(&reg_globals->ht_rc, 0, NULL, (void (*)(void *)) _free_reg_cache, 1);
-}
-
-static void php_reg_destroy_globals(zend_reg_globals *reg_globals TSRMLS_DC)
-{
- zend_hash_destroy(&reg_globals->ht_rc);
-}
-
-PHP_MINIT_FUNCTION(regex)
-{
- ZEND_INIT_MODULE_GLOBALS(reg, php_reg_init_globals, php_reg_destroy_globals);
- return SUCCESS;
-}
-
-PHP_MSHUTDOWN_FUNCTION(regex)
-{
-#ifndef ZTS
- php_reg_destroy_globals(&reg_globals TSRMLS_CC);
-#endif
-
- return SUCCESS;
-}
-
-PHP_MINFO_FUNCTION(regex)
-{
-#if HSREGEX
- php_info_print_table_row(2, "Regex Library", "Bundled library enabled");
-#else
- php_info_print_table_row(2, "Regex Library", "System library enabled");
-#endif
-}
-
-
-/* {{{ php_reg_eprint
- * php_reg_eprint - convert error number to name
- */
-static void php_reg_eprint(int err, regex_t *re) {
- char *buf = NULL, *message = NULL;
- size_t len;
- size_t buf_len;
-
-#ifdef REG_ITOA
- /* get the length of the message */
- buf_len = regerror(REG_ITOA | err, re, NULL, 0);
- if (buf_len) {
- buf = (char *)safe_emalloc(buf_len, sizeof(char), 0);
- if (!buf) return; /* fail silently */
- /* finally, get the error message */
- regerror(REG_ITOA | err, re, buf, buf_len);
- }
-#else
- buf_len = 0;
-#endif
- len = regerror(err, re, NULL, 0);
- if (len) {
- TSRMLS_FETCH();
-
- message = (char *)safe_emalloc((buf_len + len + 2), sizeof(char), 0);
- if (!message) {
- return; /* fail silently */
- }
- if (buf_len) {
- snprintf(message, buf_len, "%s: ", buf);
- buf_len += 1; /* so pointer math below works */
- }
- /* drop the message into place */
- regerror(err, re, message + buf_len, len);
-
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", message);
- }
-
- STR_FREE(buf);
- STR_FREE(message);
-}
-/* }}} */
-
-/* {{{ php_ereg
- */
-static void php_ereg(INTERNAL_FUNCTION_PARAMETERS, int icase)
-{
- pval **regex, /* Regular expression */
- **findin, /* String to apply expression to */
- **array = NULL; /* Optional register array */
- regex_t re;
- regmatch_t *subs;
- int err, match_len, string_len;
- uint i;
- int copts = 0;
- off_t start, end;
- char *buf = NULL;
- char *string = NULL;
- int argc = ZEND_NUM_ARGS();
-
- if (argc < 2 || argc > 3 ||
- zend_get_parameters_ex(argc, &regex, &findin, &array) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- if (icase)
- copts |= REG_ICASE;
-
- if (argc == 2)
- copts |= REG_NOSUB;
-
- /* compile the regular expression from the supplied regex */
- if (Z_TYPE_PP(regex) == IS_STRING) {
- err = regcomp(&re, Z_STRVAL_PP(regex), REG_EXTENDED | copts);
- } else {
- /* we convert numbers to integers and treat them as a string */
- if (Z_TYPE_PP(regex) == IS_DOUBLE)
- convert_to_long_ex(regex); /* get rid of decimal places */
- convert_to_string_ex(regex);
- /* don't bother doing an extended regex with just a number */
- err = regcomp(&re, Z_STRVAL_PP(regex), copts);
- }
-
- if (err) {
- php_reg_eprint(err, &re);
- RETURN_FALSE;
- }
-
- /* make a copy of the string we're looking in */
- convert_to_string_ex(findin);
- string = estrndup(Z_STRVAL_PP(findin), Z_STRLEN_PP(findin));
-
- /* allocate storage for (sub-)expression-matches */
- subs = (regmatch_t *)ecalloc(sizeof(regmatch_t),re.re_nsub+1);
-
- /* actually execute the regular expression */
- err = regexec(&re, string, re.re_nsub+1, subs, 0);
- if (err && err != REG_NOMATCH) {
- php_reg_eprint(err, &re);
- regfree(&re);
- efree(subs);
- RETURN_FALSE;
- }
- match_len = 1;
-
- if (array && err != REG_NOMATCH) {
- match_len = (int) (subs[0].rm_eo - subs[0].rm_so);
- string_len = Z_STRLEN_PP(findin) + 1;
-
- buf = emalloc(string_len);
-
- zval_dtor(*array); /* start with clean array */
- array_init(*array);
-
- for (i = 0; i <= re.re_nsub; i++) {
- start = subs[i].rm_so;
- end = subs[i].rm_eo;
- if (start != -1 && end > 0 && start < string_len && end < string_len && start < end) {
- add_index_stringl(*array, i, string+start, end-start, 1);
- } else {
- add_index_bool(*array, i, 0);
- }
- }
- efree(buf);
- }
-
- efree(subs);
- efree(string);
- if (err == REG_NOMATCH) {
- RETVAL_FALSE;
- } else {
- if (match_len == 0)
- match_len = 1;
- RETVAL_LONG(match_len);
- }
- regfree(&re);
-}
-/* }}} */
-
-/* {{{ proto int ereg(string pattern, string string [, array registers])
- Regular expression match */
-PHP_FUNCTION(ereg)
-{
- php_ereg(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0);
-}
-/* }}} */
-
-/* {{{ proto int eregi(string pattern, string string [, array registers])
- Case-insensitive regular expression match */
-PHP_FUNCTION(eregi)
-{
- php_ereg(INTERNAL_FUNCTION_PARAM_PASSTHRU, 1);
-}
-/* }}} */
-
-/* {{{ php_reg_replace
- * this is the meat and potatoes of regex replacement! */
-PHPAPI char *php_reg_replace(const char *pattern, const char *replace, const char *string, int icase, int extended)
-{
- regex_t re;
- regmatch_t *subs;
-
- char *buf, /* buf is where we build the replaced string */
- *nbuf, /* nbuf is used when we grow the buffer */
- *walkbuf; /* used to walk buf when replacing backrefs */
- const char *walk; /* used to walk replacement string for backrefs */
- int buf_len;
- int pos, tmp, string_len, new_l;
- int err, copts = 0;
-
- string_len = strlen(string);
-
- if (icase) {
- copts = REG_ICASE;
- }
- if (extended) {
- copts |= REG_EXTENDED;
- }
-
- err = regcomp(&re, pattern, copts);
- if (err) {
- php_reg_eprint(err, &re);
- return ((char *) -1);
- }
-
-
- /* allocate storage for (sub-)expression-matches */
- subs = (regmatch_t *)ecalloc(sizeof(regmatch_t),re.re_nsub+1);
-
- /* start with a buffer that is twice the size of the stringo
- we're doing replacements in */
- buf_len = 2 * string_len + 1;
- buf = safe_emalloc(buf_len, sizeof(char), 0);
-
- err = pos = 0;
- buf[0] = '\0';
- while (!err) {
- err = regexec(&re, &string[pos], re.re_nsub+1, subs, (pos ? REG_NOTBOL : 0));
-
- if (err && err != REG_NOMATCH) {
- php_reg_eprint(err, &re);
- efree(subs);
- efree(buf);
- regfree(&re);
- return ((char *) -1);
- }
-
- if (!err) {
- /* backref replacement is done in two passes:
- 1) find out how long the string will be, and allocate buf
- 2) copy the part before match, replacement and backrefs to buf
-
- Jaakko Hyvätti <Jaakko.Hyvatti@iki.fi>
- */
-
- new_l = strlen(buf) + subs[0].rm_so; /* part before the match */
- walk = replace;
- while (*walk) {
- if ('\\' == *walk && isdigit((unsigned char)walk[1]) && ((unsigned char)walk[1]) - '0' <= re.re_nsub) {
- if (subs[walk[1] - '0'].rm_so > -1 && subs[walk[1] - '0'].rm_eo > -1) {
- new_l += subs[walk[1] - '0'].rm_eo - subs[walk[1] - '0'].rm_so;
- }
- walk += 2;
- } else {
- new_l++;
- walk++;
- }
- }
- if (new_l + 1 > buf_len) {
- buf_len = 1 + buf_len + 2 * new_l;
- nbuf = emalloc(buf_len);
- strcpy(nbuf, buf);
- efree(buf);
- buf = nbuf;
- }
- tmp = strlen(buf);
- /* copy the part of the string before the match */
- strncat(buf, &string[pos], subs[0].rm_so);
-
- /* copy replacement and backrefs */
- walkbuf = &buf[tmp + subs[0].rm_so];
- walk = replace;
- while (*walk) {
- if ('\\' == *walk && isdigit(walk[1]) && walk[1] - '0' <= (int)re.re_nsub) {
- if (subs[walk[1] - '0'].rm_so > -1 && subs[walk[1] - '0'].rm_eo > -1
- /* this next case shouldn't happen. it does. */
- && subs[walk[1] - '0'].rm_so <= subs[walk[1] - '0'].rm_eo) {
-
- tmp = subs[walk[1] - '0'].rm_eo - subs[walk[1] - '0'].rm_so;
- memcpy (walkbuf, &string[pos + subs[walk[1] - '0'].rm_so], tmp);
- walkbuf += tmp;
- }
- walk += 2;
- } else {
- *walkbuf++ = *walk++;
- }
- }
- *walkbuf = '\0';
-
- /* and get ready to keep looking for replacements */
- if (subs[0].rm_so == subs[0].rm_eo) {
- if (subs[0].rm_so + pos >= string_len) {
- break;
- }
- new_l = strlen (buf) + 1;
- if (new_l + 1 > buf_len) {
- buf_len = 1 + buf_len + 2 * new_l;
- nbuf = safe_emalloc(buf_len, sizeof(char), 0);
- strcpy(nbuf, buf);
- efree(buf);
- buf = nbuf;
- }
- pos += subs[0].rm_eo + 1;
- buf [new_l-1] = string [pos-1];
- buf [new_l] = '\0';
- } else {
- pos += subs[0].rm_eo;
- }
- } else { /* REG_NOMATCH */
- new_l = strlen(buf) + strlen(&string[pos]);
- if (new_l + 1 > buf_len) {
- buf_len = new_l + 1; /* now we know exactly how long it is */
- nbuf = safe_emalloc(buf_len, sizeof(char), 0);
- strcpy(nbuf, buf);
- efree(buf);
- buf = nbuf;
- }
- /* stick that last bit of string on our output */
- strcat(buf, &string[pos]);
- }
- }
-
- /* don't want to leak memory .. */
- efree(subs);
- regfree(&re);
-
- /* whew. */
- return (buf);
-}
-/* }}} */
-
-/* {{{ php_ereg_replace
- */
-static void php_ereg_replace(INTERNAL_FUNCTION_PARAMETERS, int icase)
-{
- pval **arg_pattern,
- **arg_replace,
- **arg_string;
- char *pattern;
- char *string;
- char *replace;
- char *ret;
-
- if (ZEND_NUM_ARGS() != 3 ||
- zend_get_parameters_ex(3, &arg_pattern, &arg_replace, &arg_string) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- if (Z_TYPE_PP(arg_pattern) == IS_STRING) {
- if (Z_STRVAL_PP(arg_pattern) && Z_STRLEN_PP(arg_pattern))
- pattern = estrndup(Z_STRVAL_PP(arg_pattern), Z_STRLEN_PP(arg_pattern));
- else
- pattern = STR_EMPTY_ALLOC();
- } else {
- convert_to_long_ex(arg_pattern);
- pattern = emalloc(2);
- pattern[0] = (char) Z_LVAL_PP(arg_pattern);
- pattern[1] = '\0';
- }
-
- if (Z_TYPE_PP(arg_replace) == IS_STRING) {
- if (Z_STRVAL_PP(arg_replace) && Z_STRLEN_PP(arg_replace))
- replace = estrndup(Z_STRVAL_PP(arg_replace), Z_STRLEN_PP(arg_replace));
- else
- replace = STR_EMPTY_ALLOC();
- } else {
- convert_to_long_ex(arg_replace);
- replace = emalloc(2);
- replace[0] = (char) Z_LVAL_PP(arg_replace);
- replace[1] = '\0';
- }
-
- convert_to_string_ex(arg_string);
- if (Z_STRVAL_PP(arg_string) && Z_STRLEN_PP(arg_string))
- string = estrndup(Z_STRVAL_PP(arg_string), Z_STRLEN_PP(arg_string));
- else
- string = STR_EMPTY_ALLOC();
-
- /* do the actual work */
- ret = php_reg_replace(pattern, replace, string, icase, 1);
- if (ret == (char *) -1) {
- RETVAL_FALSE;
- } else {
- RETVAL_STRING(ret, 1);
- STR_FREE(ret);
- }
-
- STR_FREE(string);
- STR_FREE(replace);
- STR_FREE(pattern);
-}
-/* }}} */
-
-/* {{{ proto string ereg_replace(string pattern, string replacement, string string)
- Replace regular expression */
-PHP_FUNCTION(ereg_replace)
-{
- php_ereg_replace(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0);
-}
-/* }}} */
-
-/* {{{ proto string eregi_replace(string pattern, string replacement, string string)
- Case insensitive replace regular expression */
-PHP_FUNCTION(eregi_replace)
-{
- php_ereg_replace(INTERNAL_FUNCTION_PARAM_PASSTHRU, 1);
-}
-/* }}} */
-
-/* {{{ php_split
- */
-static void php_split(INTERNAL_FUNCTION_PARAMETERS, int icase)
-{
- zval **spliton, **str, **arg_count = NULL;
- regex_t re;
- regmatch_t subs[1];
- char *strp, *endp;
- int err, size, count = -1, copts = 0;
- int argc = ZEND_NUM_ARGS();
-
- if (argc < 2 || argc > 3 ||
- zend_get_parameters_ex(argc, &spliton, &str, &arg_count) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- if (argc > 2) {
- convert_to_long_ex(arg_count);
- count = Z_LVAL_PP(arg_count);
- }
-
- if (icase)
- copts = REG_ICASE;
-
- convert_to_string_ex(spliton);
- convert_to_string_ex(str);
-
- strp = Z_STRVAL_PP(str);
- endp = strp + Z_STRLEN_PP(str);
-
- err = regcomp(&re, Z_STRVAL_PP(spliton), REG_EXTENDED | copts);
- if (err) {
- php_reg_eprint(err, &re);
- RETURN_FALSE;
- }
-
- array_init(return_value);
-
- /* churn through str, generating array entries as we go */
- while ((count == -1 || count > 1) && !(err = regexec(&re, strp, 1, subs, 0))) {
- if (subs[0].rm_so == 0 && subs[0].rm_eo) {
- /* match is at start of string, return empty string */
- add_next_index_stringl(return_value, "", 0, 1);
- /* skip ahead the length of the regex match */
- strp += subs[0].rm_eo;
- } else if (subs[0].rm_so == 0 && subs[0].rm_eo == 0) {
- /* No more matches */
- regfree(&re);
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid Regular Expression to split()");
- zend_hash_destroy(Z_ARRVAL_P(return_value));
- efree(Z_ARRVAL_P(return_value));
- RETURN_FALSE;
- } else {
- /* On a real match */
-
- /* make a copy of the substring */
- size = subs[0].rm_so;
-
- /* add it to the array */
- add_next_index_stringl(return_value, strp, size, 1);
-
- /* point at our new starting point */
- strp = strp + subs[0].rm_eo;
- }
-
- /* if we're only looking for a certain number of points,
- stop looking once we hit it */
- if (count != -1) {
- count--;
- }
- }
-
- /* see if we encountered an error */
- if (err && err != REG_NOMATCH) {
- php_reg_eprint(err, &re);
- regfree(&re);
- zend_hash_destroy(Z_ARRVAL_P(return_value));
- efree(Z_ARRVAL_P(return_value));
- RETURN_FALSE;
- }
-
- /* otherwise we just have one last element to add to the array */
- size = endp - strp;
-
- add_next_index_stringl(return_value, strp, size, 1);
-
- regfree(&re);
-}
-/* }}} */
-
-/* {{{ proto array split(string pattern, string string [, int limit])
- Split string into array by regular expression */
-PHP_FUNCTION(split)
-{
- php_split(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0);
-}
-/* }}} */
-
-/* {{{ proto array spliti(string pattern, string string [, int limit])
- Split string into array by regular expression case-insensitive */
-
-PHP_FUNCTION(spliti)
-{
- php_split(INTERNAL_FUNCTION_PARAM_PASSTHRU, 1);
-}
-
-/* }}} */
-
-/* {{{ proto string sql_regcase(string string)
- Make regular expression for case insensitive match */
-PHPAPI PHP_FUNCTION(sql_regcase)
-{
- zval **string;
- char *tmp;
- unsigned char c;
- register int i, j;
-
- if (ZEND_NUM_ARGS()!=1 || zend_get_parameters_ex(1, &string)==FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex(string);
-
- tmp = safe_emalloc(Z_STRLEN_PP(string), 4, 1);
-
- for (i = j = 0; i < Z_STRLEN_PP(string); i++) {
- c = (unsigned char) Z_STRVAL_PP(string)[i];
- if(isalpha(c)) {
- tmp[j++] = '[';
- tmp[j++] = toupper(c);
- tmp[j++] = tolower(c);
- tmp[j++] = ']';
- } else {
- tmp[j++] = c;
- }
- }
- tmp[j] = 0;
-
- RETVAL_STRINGL(tmp, j, 1);
- efree(tmp);
-}
-/* }}} */
-
-/*
- * 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/ereg/php_ereg.h b/ext/ereg/php_ereg.h
deleted file mode 100644
index 4d63884da6..0000000000
--- a/ext/ereg/php_ereg.h
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Rasmus Lerdorf <rasmus@lerdorf.on.ca> |
- +----------------------------------------------------------------------+
-*/
-
-
-/* $Id$ */
-
-#ifndef REG_H
-#define REG_H
-
-PHPAPI char *php_reg_replace(const char *pattern, const char *replace, const char *string, int icase, int extended);
-
-PHP_FUNCTION(ereg);
-PHP_FUNCTION(eregi);
-PHP_FUNCTION(eregi_replace);
-PHP_FUNCTION(ereg_replace);
-PHP_FUNCTION(split);
-PHP_FUNCTION(spliti);
-PHPAPI PHP_FUNCTION(sql_regcase);
-
-ZEND_BEGIN_MODULE_GLOBALS(reg)
- HashTable ht_rc;
-ZEND_END_MODULE_GLOBALS(reg)
-
-PHP_MINIT_FUNCTION(regex);
-PHP_MSHUTDOWN_FUNCTION(regex);
-PHP_MINFO_FUNCTION(regex);
-
-
-#ifdef ZTS
-#define REG(v) TSRMG(reg_globals_id, zend_reg_globals *, v)
-#else
-#define REG(v) (reg_globals.v)
-#endif
-
-#endif /* REG_H */
diff --git a/ext/ereg/php_regex.h b/ext/ereg/php_regex.h
deleted file mode 100644
index 56fdcfd4bf..0000000000
--- a/ext/ereg/php_regex.h
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifndef PHP_REGEX_H
-#define PHP_REGEX_H
-
-/*
- * REGEX means:
- * 0.. system regex
- * 1.. bundled regex
- */
-
-#if REGEX
-/* get aliases */
-#include "regex/regex_extra.h"
-#include "regex/regex.h"
-
-/* get rid of aliases */
-#define PHP_NO_ALIASES
-#include "regex/regex_extra.h"
-#undef PHP_NO_ALIASES
-
-#undef _PCREPOSIX_H
-#define _PCREPOSIX_H 1
-
-#ifndef _REGEX_H
-#define _REGEX_H 1 /* this should stop Apache from loading the system version of regex.h */
-#endif
-#ifndef _REGEX_H_
-#define _REGEX_H_ 1
-#endif
-#ifndef _RX_H
-#define _RX_H 1 /* Try defining these for Linux to */
-#endif
-#ifndef __REGEXP_LIBRARY_H__
-#define __REGEXP_LIBRARY_H__ 1 /* avoid Apache including regex.h */
-#endif
-#ifndef _H_REGEX
-#define _H_REGEX 1 /* This one is for AIX */
-#endif
-#elif REGEX == 0
-#include <regex.h>
-#ifndef _REGEX_H_
-#define _REGEX_H_ 1
-#endif
-#endif
-
-#endif /* PHP_REGEX_H */
diff --git a/ext/ereg/regex/COPYRIGHT b/ext/ereg/regex/COPYRIGHT
deleted file mode 100644
index d43362fbfc..0000000000
--- a/ext/ereg/regex/COPYRIGHT
+++ /dev/null
@@ -1,20 +0,0 @@
-Copyright 1992, 1993, 1994 Henry Spencer. All rights reserved.
-This software is not subject to any license of the American Telephone
-and Telegraph Company or of the Regents of the University of California.
-
-Permission is granted to anyone to use this software for any purpose on
-any computer system, and to alter it and redistribute it, subject
-to the following restrictions:
-
-1. The author is not responsible for the consequences of use of this
- software, no matter how awful, even if they arise from flaws in it.
-
-2. The origin of this software must not be misrepresented, either by
- explicit claim or by omission. Since few users ever read sources,
- credits must appear in the documentation.
-
-3. Altered versions must be plainly marked as such, and must not be
- misrepresented as being the original software. Since few users
- ever read sources, credits must appear in the documentation.
-
-4. This notice may not be removed or altered.
diff --git a/ext/ereg/regex/README b/ext/ereg/regex/README
deleted file mode 100644
index cea9b67b66..0000000000
--- a/ext/ereg/regex/README
+++ /dev/null
@@ -1,32 +0,0 @@
-alpha3.4 release.
-Thu Mar 17 23:17:18 EST 1994
-henry@zoo.toronto.edu
-
-See WHATSNEW for change listing.
-
-installation notes:
---------
-Read the comments at the beginning of Makefile before running.
-
-Utils.h contains some things that just might have to be modified on
-some systems, as well as a nested include (ugh) of <assert.h>.
-
-The "fake" directory contains quick-and-dirty fakes for some header
-files and routines that old systems may not have. Note also that
--DUSEBCOPY will make utils.h substitute bcopy() for memmove().
-
-After that, "make r" will build regcomp.o, regexec.o, regfree.o,
-and regerror.o (the actual routines), bundle them together into a test
-program, and run regression tests on them. No output is good output.
-
-"make lib" builds just the .o files for the actual routines (when
-you're happy with testing and have adjusted CFLAGS for production),
-and puts them together into libregex.a. You can pick up either the
-library or *.o ("make lib" makes sure there are no other .o files left
-around to confuse things).
-
-Main.c, debug.c, split.c are used for regression testing but are not part
-of the RE routines themselves.
-
-Regex.h goes in /usr/include. All other .h files are internal only.
---------
diff --git a/ext/ereg/regex/WHATSNEW b/ext/ereg/regex/WHATSNEW
deleted file mode 100644
index 6e82e1dae0..0000000000
--- a/ext/ereg/regex/WHATSNEW
+++ /dev/null
@@ -1,92 +0,0 @@
-New in alpha3.4: The complex bug alluded to below has been fixed (in a
-slightly kludgey temporary way that may hurt efficiency a bit; this is
-another "get it out the door for 4.4" release). The tests at the end of
-the tests file have accordingly been uncommented. The primary sign of
-the bug was that something like a?b matching ab matched b rather than ab.
-(The bug was essentially specific to this exact situation, else it would
-have shown up earlier.)
-
-New in alpha3.3: The definition of word boundaries has been altered
-slightly, to more closely match the usual programming notion that "_"
-is an alphabetic. Stuff used for pre-ANSI systems is now in a subdir,
-and the makefile no longer alludes to it in mysterious ways. The
-makefile has generally been cleaned up some. Fixes have been made
-(again!) so that the regression test will run without -DREDEBUG, at
-the cost of weaker checking. A workaround for a bug in some folks'
-<assert.h> has been added. And some more things have been added to
-tests, including a couple right at the end which are commented out
-because the code currently flunks them (complex bug; fix coming).
-Plus the usual minor cleanup.
-
-New in alpha3.2: Assorted bits of cleanup and portability improvement
-(the development base is now a BSDI system using GCC instead of an ancient
-Sun system, and the newer compiler exposed some glitches). Fix for a
-serious bug that affected REs using many [] (including REG_ICASE REs
-because of the way they are implemented), *sometimes*, depending on
-memory-allocation patterns. The header-file prototypes no longer name
-the parameters, avoiding possible name conflicts. The possibility that
-some clot has defined CHAR_MIN as (say) `-128' instead of `(-128)' is
-now handled gracefully. "uchar" is no longer used as an internal type
-name (too many people have the same idea). Still the same old lousy
-performance, alas.
-
-New in alpha3.1: Basically nothing, this release is just a bookkeeping
-convenience. Stay tuned.
-
-New in alpha3.0: Performance is no better, alas, but some fixes have been
-made and some functionality has been added. (This is basically the "get
-it out the door in time for 4.4" release.) One bug fix: regfree() didn't
-free the main internal structure (how embarrassing). It is now possible
-to put NULs in either the RE or the target string, using (resp.) a new
-REG_PEND flag and the old REG_STARTEND flag. The REG_NOSPEC flag to
-regcomp() makes all characters ordinary, so you can match a literal
-string easily (this will become more useful when performance improves!).
-There are now primitives to match beginnings and ends of words, although
-the syntax is disgusting and so is the implementation. The REG_ATOI
-debugging interface has changed a bit. And there has been considerable
-internal cleanup of various kinds.
-
-New in alpha2.3: Split change list out of README, and moved flags notes
-into Makefile. Macro-ized the name of regex(7) in regex(3), since it has
-to change for 4.4BSD. Cleanup work in engine.c, and some new regression
-tests to catch tricky cases thereof.
-
-New in alpha2.2: Out-of-date manpages updated. Regerror() acquires two
-small extensions -- REG_ITOA and REG_ATOI -- which avoid debugging kludges
-in my own test program and might be useful to others for similar purposes.
-The regression test will now compile (and run) without REDEBUG. The
-BRE \$ bug is fixed. Most uses of "uchar" are gone; it's all chars now.
-Char/uchar parameters are now written int/unsigned, to avoid possible
-portability problems with unpromoted parameters. Some unsigned casts have
-been introduced to minimize portability problems with shifting into sign
-bits.
-
-New in alpha2.1: Lots of little stuff, cleanup and fixes. The one big
-thing is that regex.h is now generated, using mkh, rather than being
-supplied in the distribution; due to circularities in dependencies,
-you have to build regex.h explicitly by "make h". The two known bugs
-have been fixed (and the regression test now checks for them), as has a
-problem with assertions not being suppressed in the absence of REDEBUG.
-No performance work yet.
-
-New in alpha2: Backslash-anything is an ordinary character, not an
-error (except, of course, for the handful of backslashed metacharacters
-in BREs), which should reduce script breakage. The regression test
-checks *where* null strings are supposed to match, and has generally
-been tightened up somewhat. Small bug fixes in parameter passing (not
-harmful, but technically errors) and some other areas. Debugging
-invoked by defining REDEBUG rather than not defining NDEBUG.
-
-New in alpha+3: full prototyping for internal routines, using a little
-helper program, mkh, which extracts prototypes given in stylized comments.
-More minor cleanup. Buglet fix: it's CHAR_BIT, not CHAR_BITS. Simple
-pre-screening of input when a literal string is known to be part of the
-RE; this does wonders for performance.
-
-New in alpha+2: minor bits of cleanup. Notably, the number "32" for the
-word width isn't hardwired into regexec.c any more, the public header
-file prototypes the functions if __STDC__ is defined, and some small typos
-in the manpages have been fixed.
-
-New in alpha+1: improvements to the manual pages, and an important
-extension, the REG_STARTEND option to regexec().
diff --git a/ext/ereg/regex/cclass.h b/ext/ereg/regex/cclass.h
deleted file mode 100644
index df41694b04..0000000000
--- a/ext/ereg/regex/cclass.h
+++ /dev/null
@@ -1,30 +0,0 @@
-/* character-class table */
-static struct cclass {
- unsigned char *name;
- unsigned char *chars;
- unsigned char *multis;
-} cclasses[] = {
- {"alnum", "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789", ""},
- {"alpha", "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz",
- ""},
- {"blank", " \t", ""},
- {"cntrl", "\007\b\t\n\v\f\r\1\2\3\4\5\6\16\17\20\21\22\23\24\
-\25\26\27\30\31\32\33\34\35\36\37\177", ""},
- {"digit", "0123456789", ""},
- {"graph", "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz\
-0123456789!\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~",
- ""},
- {"lower", "abcdefghijklmnopqrstuvwxyz",
- ""},
- {"print", "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz\
-0123456789!\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~ ",
- ""},
- {"punct", "!\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~",
- ""},
- {"space", "\t\n\v\f\r ", ""},
- {"upper", "ABCDEFGHIJKLMNOPQRSTUVWXYZ",
- ""},
- {"xdigit", "0123456789ABCDEFabcdef",
- ""},
- {NULL, 0, ""}
-};
diff --git a/ext/ereg/regex/cname.h b/ext/ereg/regex/cname.h
deleted file mode 100644
index 670b273882..0000000000
--- a/ext/ereg/regex/cname.h
+++ /dev/null
@@ -1,102 +0,0 @@
-/* character-name table */
-static struct cname {
- char *name;
- char code;
-} cnames[] = {
- {"NUL", '\0'},
- {"SOH", '\001'},
- {"STX", '\002'},
- {"ETX", '\003'},
- {"EOT", '\004'},
- {"ENQ", '\005'},
- {"ACK", '\006'},
- {"BEL", '\007'},
- {"alert", '\007'},
- {"BS", '\010'},
- {"backspace", '\b'},
- {"HT", '\011'},
- {"tab", '\t'},
- {"LF", '\012'},
- {"newline", '\n'},
- {"VT", '\013'},
- {"vertical-tab", '\v'},
- {"FF", '\014'},
- {"form-feed", '\f'},
- {"CR", '\015'},
- {"carriage-return", '\r'},
- {"SO", '\016'},
- {"SI", '\017'},
- {"DLE", '\020'},
- {"DC1", '\021'},
- {"DC2", '\022'},
- {"DC3", '\023'},
- {"DC4", '\024'},
- {"NAK", '\025'},
- {"SYN", '\026'},
- {"ETB", '\027'},
- {"CAN", '\030'},
- {"EM", '\031'},
- {"SUB", '\032'},
- {"ESC", '\033'},
- {"IS4", '\034'},
- {"FS", '\034'},
- {"IS3", '\035'},
- {"GS", '\035'},
- {"IS2", '\036'},
- {"RS", '\036'},
- {"IS1", '\037'},
- {"US", '\037'},
- {"space", ' '},
- {"exclamation-mark", '!'},
- {"quotation-mark", '"'},
- {"number-sign", '#'},
- {"dollar-sign", '$'},
- {"percent-sign", '%'},
- {"ampersand", '&'},
- {"apostrophe", '\''},
- {"left-parenthesis", '('},
- {"right-parenthesis", ')'},
- {"asterisk", '*'},
- {"plus-sign", '+'},
- {"comma", ','},
- {"hyphen", '-'},
- {"hyphen-minus", '-'},
- {"period", '.'},
- {"full-stop", '.'},
- {"slash", '/'},
- {"solidus", '/'},
- {"zero", '0'},
- {"one", '1'},
- {"two", '2'},
- {"three", '3'},
- {"four", '4'},
- {"five", '5'},
- {"six", '6'},
- {"seven", '7'},
- {"eight", '8'},
- {"nine", '9'},
- {"colon", ':'},
- {"semicolon", ';'},
- {"less-than-sign", '<'},
- {"equals-sign", '='},
- {"greater-than-sign", '>'},
- {"question-mark", '?'},
- {"commercial-at", '@'},
- {"left-square-bracket", '['},
- {"backslash", '\\'},
- {"reverse-solidus", '\\'},
- {"right-square-bracket", ']'},
- {"circumflex", '^'},
- {"circumflex-accent", '^'},
- {"underscore", '_'},
- {"low-line", '_'},
- {"grave-accent", '`'},
- {"left-brace", '{'},
- {"left-curly-bracket", '{'},
- {"vertical-line", '|'},
- {"right-brace", '}'},
- {"right-curly-bracket", '}'},
- {"tilde", '~'},
- {"DEL", '\177'},
- {NULL, 0},
-};
diff --git a/ext/ereg/regex/debug.c b/ext/ereg/regex/debug.c
deleted file mode 100644
index 3db93ef293..0000000000
--- a/ext/ereg/regex/debug.c
+++ /dev/null
@@ -1,242 +0,0 @@
-#include <stdio.h>
-#include <string.h>
-#include <ctype.h>
-#include <limits.h>
-#include <stdlib.h>
-#include <sys/types.h>
-#include <regex.h>
-
-#include "utils.h"
-#include "regex2.h"
-#include "debug.ih"
-
-/*
- - regprint - print a regexp for debugging
- == void regprint(regex_t *r, FILE *d);
- */
-void
-regprint(r, d)
-regex_t *r;
-FILE *d;
-{
- register struct re_guts *g = r->re_g;
- register int i;
- register int c;
- register int last;
- int nincat[NC];
-
- fprintf(d, "%ld states, %d categories", (long)g->nstates,
- g->ncategories);
- fprintf(d, ", first %ld last %ld", (long)g->firststate,
- (long)g->laststate);
- if (g->iflags&USEBOL)
- fprintf(d, ", USEBOL");
- if (g->iflags&USEEOL)
- fprintf(d, ", USEEOL");
- if (g->iflags&BAD)
- fprintf(d, ", BAD");
- if (g->nsub > 0)
- fprintf(d, ", nsub=%ld", (long)g->nsub);
- if (g->must != NULL)
- fprintf(d, ", must(%ld) `%*s'", (long)g->mlen, (int)g->mlen,
- g->must);
- if (g->backrefs)
- fprintf(d, ", backrefs");
- if (g->nplus > 0)
- fprintf(d, ", nplus %ld", (long)g->nplus);
- fprintf(d, "\n");
- s_print(g, d);
- for (i = 0; i < g->ncategories; i++) {
- nincat[i] = 0;
- for (c = CHAR_MIN; c <= CHAR_MAX; c++)
- if (g->categories[c] == i)
- nincat[i]++;
- }
- fprintf(d, "cc0#%d", nincat[0]);
- for (i = 1; i < g->ncategories; i++)
- if (nincat[i] == 1) {
- for (c = CHAR_MIN; c <= CHAR_MAX; c++)
- if (g->categories[c] == i)
- break;
- fprintf(d, ", %d=%s", i, regchar(c));
- }
- fprintf(d, "\n");
- for (i = 1; i < g->ncategories; i++)
- if (nincat[i] != 1) {
- fprintf(d, "cc%d\t", i);
- last = -1;
- for (c = CHAR_MIN; c <= CHAR_MAX+1; c++) /* +1 does flush */
- if (c <= CHAR_MAX && g->categories[c] == i) {
- if (last < 0) {
- fprintf(d, "%s", regchar(c));
- last = c;
- }
- } else {
- if (last >= 0) {
- if (last != c-1)
- fprintf(d, "-%s",
- regchar(c-1));
- last = -1;
- }
- }
- fprintf(d, "\n");
- }
-}
-
-/*
- - s_print - print the strip for debugging
- == static void s_print(register struct re_guts *g, FILE *d);
- */
-static void
-s_print(g, d)
-register struct re_guts *g;
-FILE *d;
-{
- register sop *s;
- register cset *cs;
- register int i;
- register int done = 0;
- register sop opnd;
- register int col = 0;
- register int last;
- register sopno offset = 2;
-# define GAP() { if (offset % 5 == 0) { \
- if (col > 40) { \
- fprintf(d, "\n\t"); \
- col = 0; \
- } else { \
- fprintf(d, " "); \
- col++; \
- } \
- } else \
- col++; \
- offset++; \
- }
-
- if (OP(g->strip[0]) != OEND)
- fprintf(d, "missing initial OEND!\n");
- for (s = &g->strip[1]; !done; s++) {
- opnd = OPND(*s);
- switch (OP(*s)) {
- case OEND:
- fprintf(d, "\n");
- done = 1;
- break;
- case OCHAR:
- if (strchr("\\|()^$.[+*?{}!<> ", (char)opnd) != NULL)
- fprintf(d, "\\%c", (unsigned char)opnd);
- else
- fprintf(d, "%s", regchar((unsigned char)opnd));
- break;
- case OBOL:
- fprintf(d, "^");
- break;
- case OEOL:
- fprintf(d, "$");
- break;
- case OBOW:
- fprintf(d, "\\{");
- break;
- case OEOW:
- fprintf(d, "\\}");
- break;
- case OANY:
- fprintf(d, ".");
- break;
- case OANYOF:
- fprintf(d, "[(%ld)", (long)opnd);
- cs = &g->sets[opnd];
- last = -1;
- for (i = 0; i < g->csetsize+1; i++) /* +1 flushes */
- if (CHIN(cs, i) && i < g->csetsize) {
- if (last < 0) {
- fprintf(d, "%s", regchar(i));
- last = i;
- }
- } else {
- if (last >= 0) {
- if (last != i-1)
- fprintf(d, "-%s",
- regchar(i-1));
- last = -1;
- }
- }
- fprintf(d, "]");
- break;
- case OBACK_:
- fprintf(d, "(\\<%ld>", (long)opnd);
- break;
- case O_BACK:
- fprintf(d, "<%ld>\\)", (long)opnd);
- break;
- case OPLUS_:
- fprintf(d, "(+");
- if (OP(*(s+opnd)) != O_PLUS)
- fprintf(d, "<%ld>", (long)opnd);
- break;
- case O_PLUS:
- if (OP(*(s-opnd)) != OPLUS_)
- fprintf(d, "<%ld>", (long)opnd);
- fprintf(d, "+)");
- break;
- case OQUEST_:
- fprintf(d, "(?");
- if (OP(*(s+opnd)) != O_QUEST)
- fprintf(d, "<%ld>", (long)opnd);
- break;
- case O_QUEST:
- if (OP(*(s-opnd)) != OQUEST_)
- fprintf(d, "<%ld>", (long)opnd);
- fprintf(d, "?)");
- break;
- case OLPAREN:
- fprintf(d, "((<%ld>", (long)opnd);
- break;
- case ORPAREN:
- fprintf(d, "<%ld>))", (long)opnd);
- break;
- case OCH_:
- fprintf(d, "<");
- if (OP(*(s+opnd)) != OOR2)
- fprintf(d, "<%ld>", (long)opnd);
- break;
- case OOR1:
- if (OP(*(s-opnd)) != OOR1 && OP(*(s-opnd)) != OCH_)
- fprintf(d, "<%ld>", (long)opnd);
- fprintf(d, "|");
- break;
- case OOR2:
- fprintf(d, "|");
- if (OP(*(s+opnd)) != OOR2 && OP(*(s+opnd)) != O_CH)
- fprintf(d, "<%ld>", (long)opnd);
- break;
- case O_CH:
- if (OP(*(s-opnd)) != OOR1)
- fprintf(d, "<%ld>", (long)opnd);
- fprintf(d, ">");
- break;
- default:
- fprintf(d, "!%ld(%ld)!", OP(*s), opnd);
- break;
- }
- if (!done)
- GAP();
- }
-}
-
-/*
- - regchar - make a character printable
- == static char *regchar(int ch);
- */
-static unsigned char * /* -> representation */
-regchar(ch)
-int ch;
-{
- static unsigned char buf[10];
-
- if (isprint(ch) || ch == ' ')
- sprintf(buf, "%c", ch);
- else
- sprintf(buf, "\\%o", ch);
- return(buf);
-}
diff --git a/ext/ereg/regex/debug.ih b/ext/ereg/regex/debug.ih
deleted file mode 100644
index 5f40ff7917..0000000000
--- a/ext/ereg/regex/debug.ih
+++ /dev/null
@@ -1,14 +0,0 @@
-/* ========= begin header generated by ./mkh ========= */
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/* === debug.c === */
-void regprint(regex_t *r, FILE *d);
-static void s_print(register struct re_guts *g, FILE *d);
-static char *regchar(int ch);
-
-#ifdef __cplusplus
-}
-#endif
-/* ========= end header generated by ./mkh ========= */
diff --git a/ext/ereg/regex/engine.c b/ext/ereg/regex/engine.c
deleted file mode 100644
index 0682267f61..0000000000
--- a/ext/ereg/regex/engine.c
+++ /dev/null
@@ -1,1019 +0,0 @@
-/*
- * The matching engine and friends. This file is #included by regexec.c
- * after suitable #defines of a variety of macros used herein, so that
- * different state representations can be used without duplicating masses
- * of code.
- */
-
-#ifdef SNAMES
-#define matcher smatcher
-#define fast sfast
-#define slow sslow
-#define dissect sdissect
-#define backref sbackref
-#define step sstep
-#define print sprint
-#define at sat
-#define match smat
-#endif
-#ifdef LNAMES
-#define matcher lmatcher
-#define fast lfast
-#define slow lslow
-#define dissect ldissect
-#define backref lbackref
-#define step lstep
-#define print lprint
-#define at lat
-#define match lmat
-#endif
-
-/* another structure passed up and down to avoid zillions of parameters */
-struct match {
- struct re_guts *g;
- int eflags;
- regmatch_t *pmatch; /* [nsub+1] (0 element unused) */
- unsigned char *offp; /* offsets work from here */
- unsigned char *beginp; /* start of string -- virtual NUL precedes */
- unsigned char *endp; /* end of string -- virtual NUL here */
- unsigned char *coldp; /* can be no match starting before here */
- unsigned char **lastpos; /* [nplus+1] */
- STATEVARS;
- states st; /* current states */
- states fresh; /* states for a fresh start */
- states tmp; /* temporary */
- states empty; /* empty set of states */
-};
-
-#include "engine.ih"
-
-#ifdef REDEBUG
-#define SP(t, s, c) print(m, t, s, c, stdout)
-#define AT(t, p1, p2, s1, s2) at(m, t, p1, p2, s1, s2)
-#define NOTE(str) { if (m->eflags&REG_TRACE) printf("=%s\n", (str)); }
-#else
-#define SP(t, s, c) /* nothing */
-#define AT(t, p1, p2, s1, s2) /* nothing */
-#define NOTE(s) /* nothing */
-#endif
-
-/*
- - matcher - the actual matching engine
- == static int matcher(register struct re_guts *g, char *string, \
- == size_t nmatch, regmatch_t pmatch[], int eflags);
- */
-static int /* 0 success, REG_NOMATCH failure */
-matcher(g, string, nmatch, pmatch, eflags)
-register struct re_guts *g;
-unsigned char *string;
-size_t nmatch;
-regmatch_t pmatch[];
-int eflags;
-{
- register unsigned char *endp;
- register size_t i;
- struct match mv;
- register struct match *m = &mv;
- register unsigned char *dp;
- const register sopno gf = g->firststate+1; /* +1 for OEND */
- const register sopno gl = g->laststate;
- unsigned char *start;
- unsigned char *stop;
-
- /* simplify the situation where possible */
- if (g->cflags&REG_NOSUB)
- nmatch = 0;
- if (eflags&REG_STARTEND) {
- start = string + pmatch[0].rm_so;
- stop = string + pmatch[0].rm_eo;
- } else {
- start = string;
- stop = start + strlen(start);
- }
- if (stop < start)
- return(REG_INVARG);
-
- /* prescreening; this does wonders for this rather slow code */
- if (g->must != NULL) {
- for (dp = start; dp < stop; dp++)
- if (*dp == g->must[0] && stop - dp >= g->mlen &&
- memcmp(dp, g->must, (size_t)g->mlen) == 0)
- break;
- if (dp == stop) /* we didn't find g->must */
- return(REG_NOMATCH);
- }
-
- /* match struct setup */
- m->g = g;
- m->eflags = eflags;
- m->pmatch = NULL;
- m->lastpos = NULL;
- m->offp = string;
- m->beginp = start;
- m->endp = stop;
- STATESETUP(m, 4);
- SETUP(m->st);
- SETUP(m->fresh);
- SETUP(m->tmp);
- SETUP(m->empty);
- CLEAR(m->empty);
-
- /* this loop does only one repetition except for backrefs */
- for (;;) {
- endp = fast(m, start, stop, gf, gl);
- if (endp == NULL) { /* a miss */
- STATETEARDOWN(m);
- return(REG_NOMATCH);
- }
- if (nmatch == 0 && !g->backrefs)
- break; /* no further info needed */
-
- /* where? */
- assert(m->coldp != NULL);
- for (;;) {
- NOTE("finding start");
- endp = slow(m, m->coldp, stop, gf, gl);
- if (endp != NULL)
- break;
- assert(m->coldp < m->endp);
- m->coldp++;
- }
- if (nmatch == 1 && !g->backrefs)
- break; /* no further info needed */
-
- /* oh my, he wants the subexpressions... */
- if (m->pmatch == NULL)
- m->pmatch = (regmatch_t *)malloc((m->g->nsub + 1) *
- sizeof(regmatch_t));
- if (m->pmatch == NULL) {
- STATETEARDOWN(m);
- return(REG_ESPACE);
- }
- for (i = 1; i <= m->g->nsub; i++)
- m->pmatch[i].rm_so = m->pmatch[i].rm_eo = -1;
- if (!g->backrefs && !(m->eflags&REG_BACKR)) {
- NOTE("dissecting");
- dp = dissect(m, m->coldp, endp, gf, gl);
- } else {
- if (g->nplus > 0 && m->lastpos == NULL)
- m->lastpos = (unsigned char **)malloc((g->nplus+1) *
- sizeof(unsigned char *));
- if (g->nplus > 0 && m->lastpos == NULL) {
- free((char *)m->pmatch);
- STATETEARDOWN(m);
- return(REG_ESPACE);
- }
- NOTE("backref dissect");
- dp = backref(m, m->coldp, endp, gf, gl, (sopno)0);
- }
- if (dp != NULL)
- break;
-
- /* uh-oh... we couldn't find a subexpression-level match */
- assert(g->backrefs); /* must be back references doing it */
- assert(g->nplus == 0 || m->lastpos != NULL);
- for (;;) {
- if (dp != NULL || endp <= m->coldp)
- break; /* defeat */
- NOTE("backoff");
- endp = slow(m, m->coldp, endp-1, gf, gl);
- if (endp == NULL)
- break; /* defeat */
- /* try it on a shorter possibility */
-#ifndef NDEBUG
- for (i = 1; i <= m->g->nsub; i++) {
- assert(m->pmatch[i].rm_so == -1);
- assert(m->pmatch[i].rm_eo == -1);
- }
-#endif
- NOTE("backoff dissect");
- dp = backref(m, m->coldp, endp, gf, gl, (sopno)0);
- }
- assert(dp == NULL || dp == endp);
- if (dp != NULL) /* found a shorter one */
- break;
-
- /* despite initial appearances, there is no match here */
- NOTE("false alarm");
- start = m->coldp + 1; /* recycle starting later */
- assert(start <= stop);
- }
-
- /* fill in the details if requested */
- if (nmatch > 0) {
- pmatch[0].rm_so = m->coldp - m->offp;
- pmatch[0].rm_eo = endp - m->offp;
- }
- if (nmatch > 1) {
- assert(m->pmatch != NULL);
- for (i = 1; i < nmatch; i++)
- if (i <= m->g->nsub)
- pmatch[i] = m->pmatch[i];
- else {
- pmatch[i].rm_so = -1;
- pmatch[i].rm_eo = -1;
- }
- }
-
- if (m->pmatch != NULL)
- free((char *)m->pmatch);
- if (m->lastpos != NULL)
- free((char *)m->lastpos);
- STATETEARDOWN(m);
- return(0);
-}
-
-/*
- - dissect - figure out what matched what, no back references
- == static unsigned char *dissect(register struct match *m, unsigned char *start, \
- == unsigned char *stop, sopno startst, sopno stopst);
- */
-static unsigned char * /* == stop (success) always */
-dissect(m, start, stop, startst, stopst)
-register struct match *m;
-unsigned char *start;
-unsigned char *stop;
-sopno startst;
-sopno stopst;
-{
- register int i;
- register sopno ss; /* start sop of current subRE */
- register sopno es; /* end sop of current subRE */
- register unsigned char *sp; /* start of string matched by it */
- register unsigned char *stp; /* string matched by it cannot pass here */
- register unsigned char *rest; /* start of rest of string */
- register unsigned char *tail; /* string unmatched by rest of RE */
- register sopno ssub; /* start sop of subsubRE */
- register sopno esub; /* end sop of subsubRE */
- register unsigned char *ssp; /* start of string matched by subsubRE */
- register unsigned char *sep; /* end of string matched by subsubRE */
- register unsigned char *oldssp; /* previous ssp */
- register unsigned char *dp;
-
- AT("diss", start, stop, startst, stopst);
- sp = start;
- for (ss = startst; ss < stopst; ss = es) {
- /* identify end of subRE */
- es = ss;
- switch (OP(m->g->strip[es])) {
- case OPLUS_:
- case OQUEST_:
- es += OPND(m->g->strip[es]);
- break;
- case OCH_:
- while (OP(m->g->strip[es]) != O_CH)
- es += OPND(m->g->strip[es]);
- break;
- }
- es++;
-
- /* figure out what it matched */
- switch (OP(m->g->strip[ss])) {
- case OEND:
- assert(PHP_REGEX_NOPE);
- break;
- case OCHAR:
- sp++;
- break;
- case OBOL:
- case OEOL:
- case OBOW:
- case OEOW:
- break;
- case OANY:
- case OANYOF:
- sp++;
- break;
- case OBACK_:
- case O_BACK:
- assert(PHP_REGEX_NOPE);
- break;
- /* cases where length of match is hard to find */
- case OQUEST_:
- stp = stop;
- for (;;) {
- /* how long could this one be? */
- rest = slow(m, sp, stp, ss, es);
- assert(rest != NULL); /* it did match */
- /* could the rest match the rest? */
- tail = slow(m, rest, stop, es, stopst);
- if (tail == stop)
- break; /* yes! */
- /* no -- try a shorter match for this one */
- stp = rest - 1;
- assert(stp >= sp); /* it did work */
- }
- ssub = ss + 1;
- esub = es - 1;
- /* did innards match? */
- if (slow(m, sp, rest, ssub, esub) != NULL) {
- dp = dissect(m, sp, rest, ssub, esub);
- assert(dp == rest);
- } else /* no */
- assert(sp == rest);
- sp = rest;
- break;
- case OPLUS_:
- stp = stop;
- for (;;) {
- /* how long could this one be? */
- rest = slow(m, sp, stp, ss, es);
- assert(rest != NULL); /* it did match */
- /* could the rest match the rest? */
- tail = slow(m, rest, stop, es, stopst);
- if (tail == stop)
- break; /* yes! */
- /* no -- try a shorter match for this one */
- stp = rest - 1;
- assert(stp >= sp); /* it did work */
- }
- ssub = ss + 1;
- esub = es - 1;
- ssp = sp;
- oldssp = ssp;
- for (;;) { /* find last match of innards */
- sep = slow(m, ssp, rest, ssub, esub);
- if (sep == NULL || sep == ssp)
- break; /* failed or matched null */
- oldssp = ssp; /* on to next try */
- ssp = sep;
- }
- if (sep == NULL) {
- /* last successful match */
- sep = ssp;
- ssp = oldssp;
- }
- assert(sep == rest); /* must exhaust substring */
- assert(slow(m, ssp, sep, ssub, esub) == rest);
- dp = dissect(m, ssp, sep, ssub, esub);
- assert(dp == sep);
- sp = rest;
- break;
- case OCH_:
- stp = stop;
- for (;;) {
- /* how long could this one be? */
- rest = slow(m, sp, stp, ss, es);
- assert(rest != NULL); /* it did match */
- /* could the rest match the rest? */
- tail = slow(m, rest, stop, es, stopst);
- if (tail == stop)
- break; /* yes! */
- /* no -- try a shorter match for this one */
- stp = rest - 1;
- assert(stp >= sp); /* it did work */
- }
- ssub = ss + 1;
- esub = ss + OPND(m->g->strip[ss]) - 1;
- assert(OP(m->g->strip[esub]) == OOR1);
- for (;;) { /* find first matching branch */
- if (slow(m, sp, rest, ssub, esub) == rest)
- break; /* it matched all of it */
- /* that one missed, try next one */
- assert(OP(m->g->strip[esub]) == OOR1);
- esub++;
- assert(OP(m->g->strip[esub]) == OOR2);
- ssub = esub + 1;
- esub += OPND(m->g->strip[esub]);
- if (OP(m->g->strip[esub]) == OOR2)
- esub--;
- else
- assert(OP(m->g->strip[esub]) == O_CH);
- }
- dp = dissect(m, sp, rest, ssub, esub);
- assert(dp == rest);
- sp = rest;
- break;
- case O_PLUS:
- case O_QUEST:
- case OOR1:
- case OOR2:
- case O_CH:
- assert(PHP_REGEX_NOPE);
- break;
- case OLPAREN:
- i = OPND(m->g->strip[ss]);
- assert(0 < i && i <= m->g->nsub);
- m->pmatch[i].rm_so = sp - m->offp;
- break;
- case ORPAREN:
- i = OPND(m->g->strip[ss]);
- assert(0 < i && i <= m->g->nsub);
- m->pmatch[i].rm_eo = sp - m->offp;
- break;
- default: /* uh oh */
- assert(PHP_REGEX_NOPE);
- break;
- }
- }
-
- assert(sp == stop);
- return(sp);
-}
-
-/*
- - backref - figure out what matched what, figuring in back references
- == static unsigned char *backref(register struct match *m, unsigned char *start, \
- == unsigned char *stop, sopno startst, sopno stopst, sopno lev);
- */
-static unsigned char * /* == stop (success) or NULL (failure) */
-backref(m, start, stop, startst, stopst, lev)
-register struct match *m;
-unsigned char *start;
-unsigned char *stop;
-sopno startst;
-sopno stopst;
-sopno lev; /* PLUS nesting level */
-{
- register int i;
- register sopno ss; /* start sop of current subRE */
- register unsigned char *sp; /* start of string matched by it */
- register sopno ssub; /* start sop of subsubRE */
- register sopno esub; /* end sop of subsubRE */
- register unsigned char *ssp; /* start of string matched by subsubRE */
- register unsigned char *dp;
- register size_t len;
- register int hard;
- register sop s;
- register regoff_t offsave;
- register cset *cs;
-
- AT("back", start, stop, startst, stopst);
- sp = start;
-
- /* get as far as we can with easy stuff */
- hard = 0;
- for (ss = startst; !hard && ss < stopst; ss++)
- switch (OP(s = m->g->strip[ss])) {
- case OCHAR:
- if (sp == stop || *sp++ != (unsigned char)OPND(s))
- return(NULL);
- break;
- case OANY:
- if (sp == stop)
- return(NULL);
- sp++;
- break;
- case OANYOF:
- cs = &m->g->sets[OPND(s)];
- if (sp == stop || !CHIN(cs, *sp++))
- return(NULL);
- break;
- case OBOL:
- if ( (sp == m->beginp && !(m->eflags&REG_NOTBOL)) ||
- (sp < m->endp && *(sp-1) == '\n' &&
- (m->g->cflags&REG_NEWLINE)) )
- { /* yes */ }
- else
- return(NULL);
- break;
- case OEOL:
- if ( (sp == m->endp && !(m->eflags&REG_NOTEOL)) ||
- (sp < m->endp && *sp == '\n' &&
- (m->g->cflags&REG_NEWLINE)) )
- { /* yes */ }
- else
- return(NULL);
- break;
- case OBOW:
- if (( (sp == m->beginp && !(m->eflags&REG_NOTBOL)) ||
- (sp < m->endp && *(sp-1) == '\n' &&
- (m->g->cflags&REG_NEWLINE)) ||
- (sp > m->beginp &&
- !ISWORD(*(sp-1))) ) &&
- (sp < m->endp && ISWORD(*sp)) )
- { /* yes */ }
- else
- return(NULL);
- break;
- case OEOW:
- if (( (sp == m->endp && !(m->eflags&REG_NOTEOL)) ||
- (sp < m->endp && *sp == '\n' &&
- (m->g->cflags&REG_NEWLINE)) ||
- (sp < m->endp && !ISWORD(*sp)) ) &&
- (sp > m->beginp && ISWORD(*(sp-1))) )
- { /* yes */ }
- else
- return(NULL);
- break;
- case O_QUEST:
- break;
- case OOR1: /* matches null but needs to skip */
- ss++;
- s = m->g->strip[ss];
- do {
- assert(OP(s) == OOR2);
- ss += OPND(s);
- } while (OP(s = m->g->strip[ss]) != O_CH);
- /* note that the ss++ gets us past the O_CH */
- break;
- default: /* have to make a choice */
- hard = 1;
- break;
- }
- if (!hard) { /* that was it! */
- if (sp != stop)
- return(NULL);
- return(sp);
- }
- ss--; /* adjust for the for's final increment */
-
- /* the hard stuff */
- AT("hard", sp, stop, ss, stopst);
- s = m->g->strip[ss];
- switch (OP(s)) {
- case OBACK_: /* the vilest depths */
- i = OPND(s);
- assert(0 < i && i <= m->g->nsub);
- if (m->pmatch[i].rm_eo == -1)
- return(NULL);
- assert(m->pmatch[i].rm_so != -1);
- len = m->pmatch[i].rm_eo - m->pmatch[i].rm_so;
- assert(stop - m->beginp >= len);
- if (sp > stop - len)
- return(NULL); /* not enough left to match */
- ssp = m->offp + m->pmatch[i].rm_so;
- if (memcmp(sp, ssp, len) != 0)
- return(NULL);
- while (m->g->strip[ss] != SOP(O_BACK, i))
- ss++;
- return(backref(m, sp+len, stop, ss+1, stopst, lev));
- break;
- case OQUEST_: /* to null or not */
- dp = backref(m, sp, stop, ss+1, stopst, lev);
- if (dp != NULL)
- return(dp); /* not */
- return(backref(m, sp, stop, ss+OPND(s)+1, stopst, lev));
- break;
- case OPLUS_:
- assert(m->lastpos != NULL);
- assert(lev+1 <= m->g->nplus);
- m->lastpos[lev+1] = sp;
- return(backref(m, sp, stop, ss+1, stopst, lev+1));
- break;
- case O_PLUS:
- if (sp == m->lastpos[lev]) /* last pass matched null */
- return(backref(m, sp, stop, ss+1, stopst, lev-1));
- /* try another pass */
- m->lastpos[lev] = sp;
- dp = backref(m, sp, stop, ss-OPND(s)+1, stopst, lev);
- if (dp == NULL)
- return(backref(m, sp, stop, ss+1, stopst, lev-1));
- else
- return(dp);
- break;
- case OCH_: /* find the right one, if any */
- ssub = ss + 1;
- esub = ss + OPND(s) - 1;
- assert(OP(m->g->strip[esub]) == OOR1);
- for (;;) { /* find first matching branch */
- dp = backref(m, sp, stop, ssub, esub, lev);
- if (dp != NULL)
- return(dp);
- /* that one missed, try next one */
- if (OP(m->g->strip[esub]) == O_CH)
- return(NULL); /* there is none */
- esub++;
- assert(OP(m->g->strip[esub]) == OOR2);
- ssub = esub + 1;
- esub += OPND(m->g->strip[esub]);
- if (OP(m->g->strip[esub]) == OOR2)
- esub--;
- else
- assert(OP(m->g->strip[esub]) == O_CH);
- }
- break;
- case OLPAREN: /* must undo assignment if rest fails */
- i = OPND(s);
- assert(0 < i && i <= m->g->nsub);
- offsave = m->pmatch[i].rm_so;
- m->pmatch[i].rm_so = sp - m->offp;
- dp = backref(m, sp, stop, ss+1, stopst, lev);
- if (dp != NULL)
- return(dp);
- m->pmatch[i].rm_so = offsave;
- return(NULL);
- break;
- case ORPAREN: /* must undo assignment if rest fails */
- i = OPND(s);
- assert(0 < i && i <= m->g->nsub);
- offsave = m->pmatch[i].rm_eo;
- m->pmatch[i].rm_eo = sp - m->offp;
- dp = backref(m, sp, stop, ss+1, stopst, lev);
- if (dp != NULL)
- return(dp);
- m->pmatch[i].rm_eo = offsave;
- return(NULL);
- break;
- default: /* uh oh */
- assert(PHP_REGEX_NOPE);
- break;
- }
-
- /* "can't happen" */
- assert(PHP_REGEX_NOPE);
- /* NOTREACHED */
- return((unsigned char *)NULL); /* dummy */
-}
-
-/*
- - fast - step through the string at top speed
- == static unsigned char *fast(register struct match *m, unsigned char *start, \
- == unsigned char *stop, sopno startst, sopno stopst);
- */
-static unsigned char * /* where tentative match ended, or NULL */
-fast(m, start, stop, startst, stopst)
-register struct match *m;
-unsigned char *start;
-unsigned char *stop;
-sopno startst;
-sopno stopst;
-{
- register states st = m->st;
- register states fresh = m->fresh;
- register states tmp = m->tmp;
- register unsigned char *p = start;
- register int c = (start == m->beginp) ? OUT : *(start-1);
- register int lastc; /* previous c */
- register int flagch;
- register int i;
- register unsigned char *coldp; /* last p after which no match was underway */
-
- CLEAR(st);
- SET1(st, startst);
- st = step(m->g, startst, stopst, st, NOTHING, st);
- ASSIGN(fresh, st);
- SP("start", st, *p);
- coldp = NULL;
- for (;;) {
- /* next character */
- lastc = c;
- c = (p == m->endp) ? OUT : *p;
- if (EQ(st, fresh))
- coldp = p;
-
- /* is there an EOL and/or BOL between lastc and c? */
- flagch = '\0';
- i = 0;
- if ( (lastc == '\n' && m->g->cflags&REG_NEWLINE) ||
- (lastc == OUT && !(m->eflags&REG_NOTBOL)) ) {
- flagch = BOL;
- i = m->g->nbol;
- }
- if ( (c == '\n' && m->g->cflags&REG_NEWLINE) ||
- (c == OUT && !(m->eflags&REG_NOTEOL)) ) {
- flagch = (flagch == BOL) ? BOLEOL : EOL;
- i += m->g->neol;
- }
- if (i != 0) {
- for (; i > 0; i--)
- st = step(m->g, startst, stopst, st, flagch, st);
- SP("boleol", st, c);
- }
-
- /* how about a word boundary? */
- if ( (flagch == BOL || (lastc != OUT && !ISWORD(lastc))) &&
- (c != OUT && ISWORD(c)) ) {
- flagch = BOW;
- }
- if ( (lastc != OUT && ISWORD(lastc)) &&
- (flagch == EOL || (c != OUT && !ISWORD(c))) ) {
- flagch = EOW;
- }
- if (flagch == BOW || flagch == EOW) {
- st = step(m->g, startst, stopst, st, flagch, st);
- SP("boweow", st, c);
- }
-
- /* are we done? */
- if (ISSET(st, stopst) || p == stop)
- break; /* NOTE BREAK OUT */
-
- /* no, we must deal with this character */
- ASSIGN(tmp, st);
- ASSIGN(st, fresh);
- assert(c != OUT);
- st = step(m->g, startst, stopst, tmp, c, st);
- SP("aft", st, c);
- assert(EQ(step(m->g, startst, stopst, st, NOTHING, st), st));
- p++;
- }
-
- assert(coldp != NULL);
- m->coldp = coldp;
- if (ISSET(st, stopst))
- return(p+1);
- else
- return(NULL);
-}
-
-/*
- - slow - step through the string more deliberately
- == static unsigned char *slow(register struct match *m, unsigned char *start, \
- == unsigned char *stop, sopno startst, sopno stopst);
- */
-static unsigned char * /* where it ended */
-slow(m, start, stop, startst, stopst)
-register struct match *m;
-unsigned char *start;
-unsigned char *stop;
-sopno startst;
-sopno stopst;
-{
- register states st = m->st;
- register states empty = m->empty;
- register states tmp = m->tmp;
- register unsigned char *p = start;
- register int c = (start == m->beginp) ? OUT : *(start-1);
- register int lastc; /* previous c */
- register int flagch;
- register int i;
- register unsigned char *matchp; /* last p at which a match ended */
-
- AT("slow", start, stop, startst, stopst);
- CLEAR(st);
- SET1(st, startst);
- SP("sstart", st, *p);
- st = step(m->g, startst, stopst, st, NOTHING, st);
- matchp = NULL;
- for (;;) {
- /* next character */
- lastc = c;
- c = (p == m->endp) ? OUT : *p;
-
- /* is there an EOL and/or BOL between lastc and c? */
- flagch = '\0';
- i = 0;
- if ( (lastc == '\n' && m->g->cflags&REG_NEWLINE) ||
- (lastc == OUT && !(m->eflags&REG_NOTBOL)) ) {
- flagch = BOL;
- i = m->g->nbol;
- }
- if ( (c == '\n' && m->g->cflags&REG_NEWLINE) ||
- (c == OUT && !(m->eflags&REG_NOTEOL)) ) {
- flagch = (flagch == BOL) ? BOLEOL : EOL;
- i += m->g->neol;
- }
- if (i != 0) {
- for (; i > 0; i--)
- st = step(m->g, startst, stopst, st, flagch, st);
- SP("sboleol", st, c);
- }
-
- /* how about a word boundary? */
- if ( (flagch == BOL || (lastc != OUT && !ISWORD(lastc))) &&
- (c != OUT && ISWORD(c)) ) {
- flagch = BOW;
- }
- if ( (lastc != OUT && ISWORD(lastc)) &&
- (flagch == EOL || (c != OUT && !ISWORD(c))) ) {
- flagch = EOW;
- }
- if (flagch == BOW || flagch == EOW) {
- st = step(m->g, startst, stopst, st, flagch, st);
- SP("sboweow", st, c);
- }
-
- /* are we done? */
- if (ISSET(st, stopst))
- matchp = p;
- if (EQ(st, empty) || p == stop)
- break; /* NOTE BREAK OUT */
-
- /* no, we must deal with this character */
- ASSIGN(tmp, st);
- ASSIGN(st, empty);
- assert(c != OUT);
- st = step(m->g, startst, stopst, tmp, c, st);
- SP("saft", st, c);
- assert(EQ(step(m->g, startst, stopst, st, NOTHING, st), st));
- p++;
- }
-
- return(matchp);
-}
-
-
-/*
- - step - map set of states reachable before char to set reachable after
- == static states step(register struct re_guts *g, sopno start, sopno stop, \
- == register states bef, int ch, register states aft);
- == #define BOL (OUT+1)
- == #define EOL (BOL+1)
- == #define BOLEOL (BOL+2)
- == #define NOTHING (BOL+3)
- == #define BOW (BOL+4)
- == #define EOW (BOL+5)
- == #define CODEMAX (BOL+5) // highest code used
- == #define NONCHAR(c) ((c) > UCHAR_MAX)
- == #define NNONCHAR (CODEMAX-UCHAR_MAX)
- */
-static states
-step(g, start, stop, bef, ch, aft)
-register struct re_guts *g;
-sopno start; /* start state within strip */
-sopno stop; /* state after stop state within strip */
-register states bef; /* states reachable before */
-int ch; /* character or NONCHAR code */
-register states aft; /* states already known reachable after */
-{
- register cset *cs;
- register sop s;
- register sopno pc;
- register onestate here; /* note, macros know this name */
- register sopno look;
- register long i;
-
- for (pc = start, INIT(here, pc); pc != stop; pc++, INC(here)) {
- s = g->strip[pc];
- switch (OP(s)) {
- case OEND:
- assert(pc == stop-1);
- break;
- case OCHAR:
- /* only characters can match */
- assert(!NONCHAR(ch) || ch != (unsigned char)OPND(s));
- if (ch == (unsigned char)OPND(s))
- FWD(aft, bef, 1);
- break;
- case OBOL:
- if (ch == BOL || ch == BOLEOL)
- FWD(aft, bef, 1);
- break;
- case OEOL:
- if (ch == EOL || ch == BOLEOL)
- FWD(aft, bef, 1);
- break;
- case OBOW:
- if (ch == BOW)
- FWD(aft, bef, 1);
- break;
- case OEOW:
- if (ch == EOW)
- FWD(aft, bef, 1);
- break;
- case OANY:
- if (!NONCHAR(ch))
- FWD(aft, bef, 1);
- break;
- case OANYOF:
- cs = &g->sets[OPND(s)];
- if (!NONCHAR(ch) && CHIN(cs, ch))
- FWD(aft, bef, 1);
- break;
- case OBACK_: /* ignored here */
- case O_BACK:
- FWD(aft, aft, 1);
- break;
- case OPLUS_: /* forward, this is just an empty */
- FWD(aft, aft, 1);
- break;
- case O_PLUS: /* both forward and back */
- FWD(aft, aft, 1);
- i = ISSETBACK(aft, OPND(s));
- BACK(aft, aft, OPND(s));
- if (!i && ISSETBACK(aft, OPND(s))) {
- /* oho, must reconsider loop body */
- pc -= OPND(s) + 1;
- INIT(here, pc);
- }
- break;
- case OQUEST_: /* two branches, both forward */
- FWD(aft, aft, 1);
- FWD(aft, aft, OPND(s));
- break;
- case O_QUEST: /* just an empty */
- FWD(aft, aft, 1);
- break;
- case OLPAREN: /* not significant here */
- case ORPAREN:
- FWD(aft, aft, 1);
- break;
- case OCH_: /* mark the first two branches */
- FWD(aft, aft, 1);
- assert(OP(g->strip[pc+OPND(s)]) == OOR2);
- FWD(aft, aft, OPND(s));
- break;
- case OOR1: /* done a branch, find the O_CH */
- if (ISSTATEIN(aft, here)) {
- for (look = 1;
- OP(s = g->strip[pc+look]) != O_CH;
- look += OPND(s))
- assert(OP(s) == OOR2);
- FWD(aft, aft, look);
- }
- break;
- case OOR2: /* propagate OCH_'s marking */
- FWD(aft, aft, 1);
- if (OP(g->strip[pc+OPND(s)]) != O_CH) {
- assert(OP(g->strip[pc+OPND(s)]) == OOR2);
- FWD(aft, aft, OPND(s));
- }
- break;
- case O_CH: /* just empty */
- FWD(aft, aft, 1);
- break;
- default: /* ooooops... */
- assert(PHP_REGEX_NOPE);
- break;
- }
- }
-
- return(aft);
-}
-
-#ifdef REDEBUG
-/*
- - print - print a set of states
- == #ifdef REDEBUG
- == static void print(struct match *m, unsigned char *caption, states st, \
- == int ch, FILE *d);
- == #endif
- */
-static void
-print(m, caption, st, ch, d)
-struct match *m;
-unsigned char *caption;
-states st;
-int ch;
-FILE *d;
-{
- register struct re_guts *g = m->g;
- register int i;
- register int first = 1;
-
- if (!(m->eflags&REG_TRACE))
- return;
-
- fprintf(d, "%s", caption);
- if (ch != '\0')
- fprintf(d, " %s", pchar(ch));
- for (i = 0; i < g->nstates; i++)
- if (ISSET(st, i)) {
- fprintf(d, "%s%d", (first) ? "\t" : ", ", i);
- first = 0;
- }
- fprintf(d, "\n");
-}
-
-/*
- - at - print current situation
- == #ifdef REDEBUG
- == static void at(struct match *m, unsigned char *title, unsigned char *start, unsigned char *stop, \
- == sopno startst, sopno stopst);
- == #endif
- */
-static void
-at(m, title, start, stop, startst, stopst)
-struct match *m;
-unsigned char *title;
-unsigned char *start;
-unsigned char *stop;
-sopno startst;
-sopno stopst;
-{
- if (!(m->eflags&REG_TRACE))
- return;
-
- printf("%s %s-", title, pchar(*start));
- printf("%s ", pchar(*stop));
- printf("%ld-%ld\n", (long)startst, (long)stopst);
-}
-
-#ifndef PCHARDONE
-#define PCHARDONE /* never again */
-/*
- - pchar - make a character printable
- == #ifdef REDEBUG
- == static unsigned char *pchar(int ch);
- == #endif
- *
- * Is this identical to regchar() over in debug.c? Well, yes. But a
- * duplicate here avoids having a debugging-capable regexec.o tied to
- * a matching debug.o, and this is convenient. It all disappears in
- * the non-debug compilation anyway, so it doesn't matter much.
- */
-static unsigned char * /* -> representation */
-pchar(ch)
-int ch;
-{
- static unsigned char pbuf[10];
-
- if (isprint(ch) || ch == ' ')
- sprintf(pbuf, "%c", ch);
- else
- sprintf(pbuf, "\\%o", ch);
- return(pbuf);
-}
-#endif
-#endif
-
-#undef matcher
-#undef fast
-#undef slow
-#undef dissect
-#undef backref
-#undef step
-#undef print
-#undef at
-#undef match
diff --git a/ext/ereg/regex/engine.ih b/ext/ereg/regex/engine.ih
deleted file mode 100644
index 9a301838bc..0000000000
--- a/ext/ereg/regex/engine.ih
+++ /dev/null
@@ -1,35 +0,0 @@
-/* ========= begin header generated by ./mkh ========= */
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/* === engine.c === */
-static int matcher(register struct re_guts *g, unsigned char *string, size_t nmatch, regmatch_t pmatch[], int eflags);
-static unsigned char *dissect(register struct match *m, unsigned char *start, unsigned char *stop, sopno startst, sopno stopst);
-static unsigned char *backref(register struct match *m, unsigned char *start, unsigned char *stop, sopno startst, sopno stopst, sopno lev);
-static unsigned char *fast(register struct match *m, unsigned char *start, unsigned char *stop, sopno startst, sopno stopst);
-static unsigned char *slow(register struct match *m, unsigned char *start, unsigned char *stop, sopno startst, sopno stopst);
-static states step(register struct re_guts *g, sopno start, sopno stop, register states bef, int ch, register states aft);
-#define BOL (OUT+1)
-#define EOL (BOL+1)
-#define BOLEOL (BOL+2)
-#define NOTHING (BOL+3)
-#define BOW (BOL+4)
-#define EOW (BOL+5)
-#define CODEMAX (BOL+5) /* highest code used */
-#define NONCHAR(c) ((c) > UCHAR_MAX)
-#define NNONCHAR (CODEMAX-UCHAR_MAX)
-#ifdef REDEBUG
-static void print(struct match *m, unsigned char *caption, states st, int ch, FILE *d);
-#endif
-#ifdef REDEBUG
-static void at(struct match *m, unsigned char *title, unsigned char *start, unsigned char *stop, sopno startst, sopno stopst);
-#endif
-#ifdef REDEBUG
-static unsigned char *pchar(int ch);
-#endif
-
-#ifdef __cplusplus
-}
-#endif
-/* ========= end header generated by ./mkh ========= */
diff --git a/ext/ereg/regex/main.c b/ext/ereg/regex/main.c
deleted file mode 100644
index 657338a2c1..0000000000
--- a/ext/ereg/regex/main.c
+++ /dev/null
@@ -1,510 +0,0 @@
-#include <stdio.h>
-#include <string.h>
-#include <sys/types.h>
-#include <regex.h>
-#include <assert.h>
-#include <stdlib.h>
-
-#include "main.ih"
-
-char *progname;
-int debug = 0;
-int line = 0;
-int status = 0;
-
-int copts = REG_EXTENDED;
-int eopts = 0;
-regoff_t startoff = 0;
-regoff_t endoff = 0;
-
-
-extern int split();
-extern void regprint();
-
-/*
- - main - do the simple case, hand off to regress() for regression
- */
-int main(argc, argv)
-int argc;
-char *argv[];
-{
- regex_t re;
-# define NS 10
- regmatch_t subs[NS];
- char erbuf[100];
- int err;
- size_t len;
- int c;
- int errflg = 0;
- register int i;
- extern int optind;
- extern char *optarg;
-
- progname = argv[0];
-
- while ((c = getopt(argc, argv, "c:e:S:E:x")) != EOF)
- switch (c) {
- case 'c': /* compile options */
- copts = options('c', optarg);
- break;
- case 'e': /* execute options */
- eopts = options('e', optarg);
- break;
- case 'S': /* start offset */
- startoff = (regoff_t)atoi(optarg);
- break;
- case 'E': /* end offset */
- endoff = (regoff_t)atoi(optarg);
- break;
- case 'x': /* Debugging. */
- debug++;
- break;
- case '?':
- default:
- errflg++;
- break;
- }
- if (errflg) {
- fprintf(stderr, "usage: %s ", progname);
- fprintf(stderr, "[-c copt][-C][-d] [re]\n");
- exit(2);
- }
-
- if (optind >= argc) {
- regress(stdin);
- exit(status);
- }
-
- err = regcomp(&re, argv[optind++], copts);
- if (err) {
- len = regerror(err, &re, erbuf, sizeof(erbuf));
- fprintf(stderr, "error %s, %d/%d `%s'\n",
- eprint(err), len, sizeof(erbuf), erbuf);
- exit(status);
- }
- regprint(&re, stdout);
-
- if (optind >= argc) {
- regfree(&re);
- exit(status);
- }
-
- if (eopts&REG_STARTEND) {
- subs[0].rm_so = startoff;
- subs[0].rm_eo = strlen(argv[optind]) - endoff;
- }
- err = regexec(&re, argv[optind], (size_t)NS, subs, eopts);
- if (err) {
- len = regerror(err, &re, erbuf, sizeof(erbuf));
- fprintf(stderr, "error %s, %d/%d `%s'\n",
- eprint(err), len, sizeof(erbuf), erbuf);
- exit(status);
- }
- if (!(copts&REG_NOSUB)) {
- len = (int)(subs[0].rm_eo - subs[0].rm_so);
- if (subs[0].rm_so != -1) {
- if (len != 0)
- printf("match `%.*s'\n", (int)len,
- argv[optind] + subs[0].rm_so);
- else
- printf("match `'@%.1s\n",
- argv[optind] + subs[0].rm_so);
- }
- for (i = 1; i < NS; i++)
- if (subs[i].rm_so != -1)
- printf("(%d) `%.*s'\n", i,
- (int)(subs[i].rm_eo - subs[i].rm_so),
- argv[optind] + subs[i].rm_so);
- }
- exit(status);
-}
-
-/*
- - regress - main loop of regression test
- == void regress(FILE *in);
- */
-void
-regress(in)
-FILE *in;
-{
- char inbuf[1000];
-# define MAXF 10
- char *f[MAXF];
- int nf;
- int i;
- char erbuf[100];
- size_t ne;
- char *badpat = "invalid regular expression";
-# define SHORT 10
- char *bpname = "REG_BADPAT";
- regex_t re;
-
- while (fgets(inbuf, sizeof(inbuf), in) != NULL) {
- line++;
- if (inbuf[0] == '#' || inbuf[0] == '\n')
- continue; /* NOTE CONTINUE */
- inbuf[strlen(inbuf)-1] = '\0'; /* get rid of stupid \n */
- if (debug)
- fprintf(stdout, "%d:\n", line);
- nf = split(inbuf, f, MAXF, "\t\t");
- if (nf < 3) {
- fprintf(stderr, "bad input, line %d\n", line);
- exit(1);
- }
- for (i = 0; i < nf; i++)
- if (strcmp(f[i], "\"\"") == 0)
- f[i] = "";
- if (nf <= 3)
- f[3] = NULL;
- if (nf <= 4)
- f[4] = NULL;
- try(f[0], f[1], f[2], f[3], f[4], options('c', f[1]));
- if (opt('&', f[1])) /* try with either type of RE */
- try(f[0], f[1], f[2], f[3], f[4],
- options('c', f[1]) &~ REG_EXTENDED);
- }
-
- ne = regerror(REG_BADPAT, (regex_t *)NULL, erbuf, sizeof(erbuf));
- if (strcmp(erbuf, badpat) != 0 || ne != strlen(badpat)+1) {
- fprintf(stderr, "end: regerror() test gave `%s' not `%s'\n",
- erbuf, badpat);
- status = 1;
- }
- ne = regerror(REG_BADPAT, (regex_t *)NULL, erbuf, (size_t)SHORT);
- if (strncmp(erbuf, badpat, SHORT-1) != 0 || erbuf[SHORT-1] != '\0' ||
- ne != strlen(badpat)+1) {
- fprintf(stderr, "end: regerror() short test gave `%s' not `%.*s'\n",
- erbuf, SHORT-1, badpat);
- status = 1;
- }
- ne = regerror(REG_ITOA|REG_BADPAT, (regex_t *)NULL, erbuf, sizeof(erbuf));
- if (strcmp(erbuf, bpname) != 0 || ne != strlen(bpname)+1) {
- fprintf(stderr, "end: regerror() ITOA test gave `%s' not `%s'\n",
- erbuf, bpname);
- status = 1;
- }
- re.re_endp = bpname;
- ne = regerror(REG_ATOI, &re, erbuf, sizeof(erbuf));
- if (atoi(erbuf) != (int)REG_BADPAT) {
- fprintf(stderr, "end: regerror() ATOI test gave `%s' not `%ld'\n",
- erbuf, (long)REG_BADPAT);
- status = 1;
- } else if (ne != strlen(erbuf)+1) {
- fprintf(stderr, "end: regerror() ATOI test len(`%s') = %ld\n",
- erbuf, (long)REG_BADPAT);
- status = 1;
- }
-}
-
-/*
- - try - try it, and report on problems
- == void try(char *f0, char *f1, char *f2, char *f3, char *f4, int opts);
- */
-void
-try(f0, f1, f2, f3, f4, opts)
-char *f0;
-char *f1;
-char *f2;
-char *f3;
-char *f4;
-int opts; /* may not match f1 */
-{
- regex_t re;
-# define NSUBS 10
- regmatch_t subs[NSUBS];
-# define NSHOULD 15
- char *should[NSHOULD];
- int nshould;
- char erbuf[100];
- int err;
- int len;
- char *type = (opts & REG_EXTENDED) ? "ERE" : "BRE";
- register int i;
- char *grump;
- char f0copy[1000];
- char f2copy[1000];
-
- strcpy(f0copy, f0);
- re.re_endp = (opts&REG_PEND) ? f0copy + strlen(f0copy) : NULL;
- fixstr(f0copy);
- err = regcomp(&re, f0copy, opts);
- if (err != 0 && (!opt('C', f1) || err != efind(f2))) {
- /* unexpected error or wrong error */
- len = regerror(err, &re, erbuf, sizeof(erbuf));
- fprintf(stderr, "%d: %s error %s, %d/%d `%s'\n",
- line, type, eprint(err), len,
- sizeof(erbuf), erbuf);
- status = 1;
- } else if (err == 0 && opt('C', f1)) {
- /* unexpected success */
- fprintf(stderr, "%d: %s should have given REG_%s\n",
- line, type, f2);
- status = 1;
- err = 1; /* so we won't try regexec */
- }
-
- if (err != 0) {
- regfree(&re);
- return;
- }
-
- strcpy(f2copy, f2);
- fixstr(f2copy);
-
- if (options('e', f1)&REG_STARTEND) {
- if (strchr(f2, '(') == NULL || strchr(f2, ')') == NULL)
- fprintf(stderr, "%d: bad STARTEND syntax\n", line);
- subs[0].rm_so = strchr(f2, '(') - f2 + 1;
- subs[0].rm_eo = strchr(f2, ')') - f2;
- }
- err = regexec(&re, f2copy, NSUBS, subs, options('e', f1));
-
- if (err != 0 && (f3 != NULL || err != REG_NOMATCH)) {
- /* unexpected error or wrong error */
- len = regerror(err, &re, erbuf, sizeof(erbuf));
- fprintf(stderr, "%d: %s exec error %s, %d/%d `%s'\n",
- line, type, eprint(err), len,
- sizeof(erbuf), erbuf);
- status = 1;
- } else if (err != 0) {
- /* nothing more to check */
- } else if (f3 == NULL) {
- /* unexpected success */
- fprintf(stderr, "%d: %s exec should have failed\n",
- line, type);
- status = 1;
- err = 1; /* just on principle */
- } else if (opts&REG_NOSUB) {
- /* nothing more to check */
- } else if ((grump = check(f2, subs[0], f3)) != NULL) {
- fprintf(stderr, "%d: %s %s\n", line, type, grump);
- status = 1;
- err = 1;
- }
-
- if (err != 0 || f4 == NULL) {
- regfree(&re);
- return;
- }
-
- for (i = 1; i < NSHOULD; i++)
- should[i] = NULL;
- nshould = split(f4, should+1, NSHOULD-1, ",");
- if (nshould == 0) {
- nshould = 1;
- should[1] = "";
- }
- for (i = 1; i < NSUBS; i++) {
- grump = check(f2, subs[i], should[i]);
- if (grump != NULL) {
- fprintf(stderr, "%d: %s $%d %s\n", line,
- type, i, grump);
- status = 1;
- err = 1;
- }
- }
-
- regfree(&re);
-}
-
-/*
- - options - pick options out of a regression-test string
- == int options(int type, char *s);
- */
-int
-options(type, s)
-int type; /* 'c' compile, 'e' exec */
-char *s;
-{
- register char *p;
- register int o = (type == 'c') ? copts : eopts;
- register char *legal = (type == 'c') ? "bisnmp" : "^$#tl";
-
- for (p = s; *p != '\0'; p++)
- if (strchr(legal, *p) != NULL)
- switch (*p) {
- case 'b':
- o &= ~REG_EXTENDED;
- break;
- case 'i':
- o |= REG_ICASE;
- break;
- case 's':
- o |= REG_NOSUB;
- break;
- case 'n':
- o |= REG_NEWLINE;
- break;
- case 'm':
- o &= ~REG_EXTENDED;
- o |= REG_NOSPEC;
- break;
- case 'p':
- o |= REG_PEND;
- break;
- case '^':
- o |= REG_NOTBOL;
- break;
- case '$':
- o |= REG_NOTEOL;
- break;
- case '#':
- o |= REG_STARTEND;
- break;
- case 't': /* trace */
- o |= REG_TRACE;
- break;
- case 'l': /* force long representation */
- o |= REG_LARGE;
- break;
- case 'r': /* force backref use */
- o |= REG_BACKR;
- break;
- }
- return(o);
-}
-
-/*
- - opt - is a particular option in a regression string?
- == int opt(int c, char *s);
- */
-int /* predicate */
-opt(c, s)
-int c;
-char *s;
-{
- return(strchr(s, c) != NULL);
-}
-
-/*
- - fixstr - transform magic characters in strings
- == void fixstr(register char *p);
- */
-void
-fixstr(p)
-register char *p;
-{
- if (p == NULL)
- return;
-
- for (; *p != '\0'; p++)
- if (*p == 'N')
- *p = '\n';
- else if (*p == 'T')
- *p = '\t';
- else if (*p == 'S')
- *p = ' ';
- else if (*p == 'Z')
- *p = '\0';
-}
-
-/*
- - check - check a substring match
- == char *check(char *str, regmatch_t sub, char *should);
- */
-char * /* NULL or complaint */
-check(str, sub, should)
-char *str;
-regmatch_t sub;
-char *should;
-{
- register int len;
- register int shlen;
- register char *p;
- static char grump[500];
- register char *at = NULL;
-
- if (should != NULL && strcmp(should, "-") == 0)
- should = NULL;
- if (should != NULL && should[0] == '@') {
- at = should + 1;
- should = "";
- }
-
- /* check rm_so and rm_eo for consistency */
- if (sub.rm_so > sub.rm_eo || (sub.rm_so == -1 && sub.rm_eo != -1) ||
- (sub.rm_so != -1 && sub.rm_eo == -1) ||
- (sub.rm_so != -1 && sub.rm_so < 0) ||
- (sub.rm_eo != -1 && sub.rm_eo < 0) ) {
- sprintf(grump, "start %ld end %ld", (long)sub.rm_so,
- (long)sub.rm_eo);
- return(grump);
- }
-
- /* check for no match */
- if (sub.rm_so == -1 && should == NULL)
- return(NULL);
- if (sub.rm_so == -1)
- return("did not match");
-
- /* check for in range */
- if (sub.rm_eo > strlen(str)) {
- sprintf(grump, "start %ld end %ld, past end of string",
- (long)sub.rm_so, (long)sub.rm_eo);
- return(grump);
- }
-
- len = (int)(sub.rm_eo - sub.rm_so);
- shlen = (int)strlen(should);
- p = str + sub.rm_so;
-
- /* check for not supposed to match */
- if (should == NULL) {
- sprintf(grump, "matched `%.*s'", len, p);
- return(grump);
- }
-
- /* check for wrong match */
- if (len != shlen || strncmp(p, should, (size_t)shlen) != 0) {
- sprintf(grump, "matched `%.*s' instead", len, p);
- return(grump);
- }
- if (shlen > 0)
- return(NULL);
-
- /* check null match in right place */
- if (at == NULL)
- return(NULL);
- shlen = strlen(at);
- if (shlen == 0)
- shlen = 1; /* force check for end-of-string */
- if (strncmp(p, at, shlen) != 0) {
- sprintf(grump, "matched null at `%.20s'", p);
- return(grump);
- }
- return(NULL);
-}
-
-/*
- - eprint - convert error number to name
- == static char *eprint(int err);
- */
-static char *
-eprint(err)
-int err;
-{
- static char epbuf[100];
- size_t len;
-
- len = regerror(REG_ITOA|err, (regex_t *)NULL, epbuf, sizeof(epbuf));
- assert(len <= sizeof(epbuf));
- return(epbuf);
-}
-
-/*
- - efind - convert error name to number
- == static int efind(char *name);
- */
-static int
-efind(name)
-char *name;
-{
- static char efbuf[100];
- regex_t re;
-
- sprintf(efbuf, "REG_%s", name);
- assert(strlen(efbuf) < sizeof(efbuf));
- re.re_endp = efbuf;
- (void) regerror(REG_ATOI, &re, efbuf, sizeof(efbuf));
- return(atoi(efbuf));
-}
diff --git a/ext/ereg/regex/main.ih b/ext/ereg/regex/main.ih
deleted file mode 100644
index 5a0118ac44..0000000000
--- a/ext/ereg/regex/main.ih
+++ /dev/null
@@ -1,19 +0,0 @@
-/* ========= begin header generated by ./mkh ========= */
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/* === main.c === */
-void regress(FILE *in);
-void try(char *f0, char *f1, char *f2, char *f3, char *f4, int opts);
-int options(int type, char *s);
-int opt(int c, char *s);
-void fixstr(register char *p);
-char *check(char *str, regmatch_t sub, char *should);
-static char *eprint(int err);
-static int efind(char *name);
-
-#ifdef __cplusplus
-}
-#endif
-/* ========= end header generated by ./mkh ========= */
diff --git a/ext/ereg/regex/mkh b/ext/ereg/regex/mkh
deleted file mode 100644
index 252b246c7b..0000000000
--- a/ext/ereg/regex/mkh
+++ /dev/null
@@ -1,76 +0,0 @@
-#! /bin/sh
-# mkh - pull headers out of C source
-PATH=/bin:/usr/bin ; export PATH
-
-# egrep pattern to pick out marked lines
-egrep='^ =([ ]|$)'
-
-# Sed program to process marked lines into lines for the header file.
-# The markers have already been removed. Two things are done here: removal
-# of backslashed newlines, and some fudging of comments. The first is done
-# because -o needs to have prototypes on one line to strip them down.
-# Getting comments into the output is tricky; we turn C++-style // comments
-# into /* */ comments, after altering any existing */'s to avoid trouble.
-peel=' /\\$/N
- /\\\n[ ]*/s///g
- /\/\//s;\*/;* /;g
- /\/\//s;//\(.*\);/*\1 */;'
-
-for a
-do
- case "$a" in
- -o) # old (pre-function-prototype) compiler
- # add code to comment out argument lists
- peel="$peel
- "'/^\([^#\/][^\/]*[a-zA-Z0-9_)]\)(\(.*\))/s;;\1(/*\2*/);'
- shift
- ;;
- -b) # funny Berkeley __P macro
- peel="$peel
- "'/^\([^#\/][^\/]*[a-zA-Z0-9_)]\)(\(.*\))/s;;\1 __P((\2));'
- shift
- ;;
- -s) # compiler doesn't like `static foo();'
- # add code to get rid of the `static'
- peel="$peel
- "'/^static[ ][^\/]*[a-zA-Z0-9_)](.*)/s;static.;;'
- shift
- ;;
- -p) # private declarations
- egrep='^ ==([ ]|$)'
- shift
- ;;
- -i) # wrap in #ifndef, argument is name
- ifndef="$2"
- shift ; shift
- ;;
- *) break
- ;;
- esac
-done
-
-if test " $ifndef" != " "
-then
- echo "#ifndef $ifndef"
- echo "#define $ifndef /* never again */"
-fi
-echo "/* ========= begin header generated by $0 ========= */"
-echo '#ifdef __cplusplus'
-echo 'extern "C" {'
-echo '#endif'
-for f
-do
- echo
- echo "/* === $f === */"
- egrep "$egrep" $f | sed 's/^ ==*[ ]//;s/^ ==*$//' | sed "$peel"
- echo
-done
-echo '#ifdef __cplusplus'
-echo '}'
-echo '#endif'
-echo "/* ========= end header generated by $0 ========= */"
-if test " $ifndef" != " "
-then
- echo "#endif"
-fi
-exit 0
diff --git a/ext/ereg/regex/regcomp.c b/ext/ereg/regex/regcomp.c
deleted file mode 100644
index ec034d4c4c..0000000000
--- a/ext/ereg/regex/regcomp.c
+++ /dev/null
@@ -1,1608 +0,0 @@
-#include <sys/types.h>
-#include <stdio.h>
-#include <string.h>
-#include <ctype.h>
-#include <limits.h>
-#include <stdlib.h>
-
-#define POSIX_MISTAKE
-
-#include "utils.h"
-#include "regex.h"
-#include "regex2.h"
-
-#include "cclass.h"
-#include "cname.h"
-
-/*
- * parse structure, passed up and down to avoid global variables and
- * other clumsinesses
- */
-struct parse {
- unsigned char *next; /* next character in RE */
- unsigned char *end; /* end of string (-> NUL normally) */
- int error; /* has an error been seen? */
- sop *strip; /* malloced strip */
- sopno ssize; /* malloced strip size (allocated) */
- sopno slen; /* malloced strip length (used) */
- int ncsalloc; /* number of csets allocated */
- struct re_guts *g;
-# define NPAREN 10 /* we need to remember () 1-9 for back refs */
- sopno pbegin[NPAREN]; /* -> ( ([0] unused) */
- sopno pend[NPAREN]; /* -> ) ([0] unused) */
-};
-
-#include "regcomp.ih"
-
-static unsigned char nuls[10]; /* place to point scanner in event of error */
-
-/*
- * macros for use with parse structure
- * BEWARE: these know that the parse structure is named `p' !!!
- */
-#define PEEK() (*p->next)
-#define PEEK2() (*(p->next+1))
-#define MORE() (p->next < p->end)
-#define MORE2() (p->next+1 < p->end)
-#define SEE(c) (MORE() && PEEK() == (c))
-#define SEETWO(a, b) (MORE() && MORE2() && PEEK() == (a) && PEEK2() == (b))
-#define EAT(c) ((SEE(c)) ? (NEXT(), 1) : 0)
-#define EATTWO(a, b) ((SEETWO(a, b)) ? (NEXT2(), 1) : 0)
-#define NEXT() (p->next++)
-#define NEXT2() (p->next += 2)
-#define NEXTn(n) (p->next += (n))
-#define GETNEXT() (*p->next++)
-#define SETERROR(e) seterr(p, (e))
-#define REQUIRE(co, e) (void) ((co) || SETERROR(e))
-#define MUSTSEE(c, e) (REQUIRE(MORE() && PEEK() == (c), e))
-#define MUSTEAT(c, e) (REQUIRE(MORE() && GETNEXT() == (c), e))
-#define MUSTNOTSEE(c, e) (REQUIRE(!MORE() || PEEK() != (c), e))
-#define EMIT(op, sopnd) doemit(p, (sop)(op), (size_t)(sopnd))
-#define INSERT(op, pos) doinsert(p, (sop)(op), HERE()-(pos)+1, pos)
-#define AHEAD(pos) dofwd(p, pos, HERE()-(pos))
-#define ASTERN(sop, pos) EMIT(sop, HERE()-pos)
-#define HERE() (p->slen)
-#define THERE() (p->slen - 1)
-#define THERETHERE() (p->slen - 2)
-#define DROP(n) (p->slen -= (n))
-
-#ifndef NDEBUG
-static int never = 0; /* for use in asserts; shuts lint up */
-#else
-#define never 0 /* some <assert.h>s have bugs too */
-#endif
-
-/*
- - regcomp - interface for parser and compilation
- = API_EXPORT(int) regcomp(regex_t *, const char *, int);
- = #define REG_BASIC 0000
- = #define REG_EXTENDED 0001
- = #define REG_ICASE 0002
- = #define REG_NOSUB 0004
- = #define REG_NEWLINE 0010
- = #define REG_NOSPEC 0020
- = #define REG_PEND 0040
- = #define REG_DUMP 0200
- */
-API_EXPORT(int) /* 0 success, otherwise REG_something */
-regcomp(preg, pattern, cflags)
-regex_t *preg;
-const char *pattern;
-int cflags;
-{
- struct parse pa;
- register struct re_guts *g;
- register struct parse *p = &pa;
- register int i;
- register size_t len;
-#ifdef REDEBUG
-# define GOODFLAGS(f) (f)
-#else
-# define GOODFLAGS(f) ((f)&~REG_DUMP)
-#endif
-
- cflags = GOODFLAGS(cflags);
- if ((cflags&REG_EXTENDED) && (cflags&REG_NOSPEC))
- return(REG_INVARG);
-
- if (cflags&REG_PEND) {
- if (preg->re_endp < pattern)
- return(REG_INVARG);
- len = preg->re_endp - pattern;
- } else
- len = strlen((char *)pattern);
-
- /* do the mallocs early so failure handling is easy */
- g = (struct re_guts *)malloc(sizeof(struct re_guts) +
- (NC-1)*sizeof(cat_t));
- if (g == NULL)
- return(REG_ESPACE);
- p->ssize = len/(size_t)2*(size_t)3 + (size_t)1; /* ugh */
- p->strip = (sop *)malloc(p->ssize * sizeof(sop));
- p->slen = 0;
- if (p->strip == NULL) {
- free((char *)g);
- return(REG_ESPACE);
- }
-
- /* set things up */
- p->g = g;
- p->next = (unsigned char *)pattern; /* convenience; we do not modify it */
- p->end = p->next + len;
- p->error = 0;
- p->ncsalloc = 0;
- for (i = 0; i < NPAREN; i++) {
- p->pbegin[i] = 0;
- p->pend[i] = 0;
- }
- g->csetsize = NC;
- g->sets = NULL;
- g->setbits = NULL;
- g->ncsets = 0;
- g->cflags = cflags;
- g->iflags = 0;
- g->nbol = 0;
- g->neol = 0;
- g->must = NULL;
- g->mlen = 0;
- g->nsub = 0;
- g->ncategories = 1; /* category 0 is "everything else" */
- g->categories = &g->catspace[0];
- (void) memset((char *)g->catspace, 0, NC*sizeof(cat_t));
- g->backrefs = 0;
-
- /* do it */
- EMIT(OEND, 0);
- g->firststate = THERE();
- if (cflags&REG_EXTENDED)
- p_ere(p, OUT);
- else if (cflags&REG_NOSPEC)
- p_str(p);
- else
- p_bre(p, OUT, OUT);
- EMIT(OEND, 0);
- g->laststate = THERE();
-
- /* tidy up loose ends and fill things in */
- categorize(p, g);
- stripsnug(p, g);
- findmust(p, g);
- g->nplus = pluscount(p, g);
- g->magic = MAGIC2;
- preg->re_nsub = g->nsub;
- preg->re_g = g;
- preg->re_magic = MAGIC1;
-#ifndef REDEBUG
- /* not debugging, so can't rely on the assert() in regexec() */
- if (g->iflags&BAD)
- SETERROR(REG_ASSERT);
-#endif
-
- /* win or lose, we're done */
- if (p->error != 0) /* lose */
- regfree(preg);
- return(p->error);
-}
-
-/*
- - p_ere - ERE parser top level, concatenation and alternation
- == static void p_ere(register struct parse *p, int stop);
- */
-static void
-p_ere(p, stop)
-register struct parse *p;
-int stop; /* character this ERE should end at */
-{
- register unsigned char c;
- register sopno prevback = 0;
- register sopno prevfwd = 0;
- register sopno conc;
- register int first = 1; /* is this the first alternative? */
-
- for (;;) {
- /* do a bunch of concatenated expressions */
- conc = HERE();
- while (MORE() && (c = PEEK()) != '|' && c != stop)
- p_ere_exp(p);
- (void) REQUIRE(HERE() != conc, REG_EMPTY); /* require nonempty */
-
- if (!EAT('|'))
- break; /* NOTE BREAK OUT */
-
- if (first) {
- INSERT(OCH_, conc); /* offset is wrong */
- prevfwd = conc;
- prevback = conc;
- first = 0;
- }
- ASTERN(OOR1, prevback);
- prevback = THERE();
- AHEAD(prevfwd); /* fix previous offset */
- prevfwd = HERE();
- EMIT(OOR2, 0); /* offset is very wrong */
- }
-
- if (!first) { /* tail-end fixups */
- AHEAD(prevfwd);
- ASTERN(O_CH, prevback);
- }
-
- assert(!MORE() || SEE(stop));
-}
-
-/*
- - p_ere_exp - parse one subERE, an atom possibly followed by a repetition op
- == static void p_ere_exp(register struct parse *p);
- */
-static void
-p_ere_exp(p)
-register struct parse *p;
-{
- register unsigned char c;
- register sopno pos;
- register int count;
- register int count2;
- register sopno subno;
- int wascaret = 0;
-
- assert(MORE()); /* caller should have ensured this */
- c = GETNEXT();
-
- pos = HERE();
- switch (c) {
- case '(':
- REQUIRE(MORE(), REG_EPAREN);
- p->g->nsub++;
- subno = p->g->nsub;
- if (subno < NPAREN)
- p->pbegin[subno] = HERE();
- EMIT(OLPAREN, subno);
- if (!SEE(')'))
- p_ere(p, ')');
- if (subno < NPAREN) {
- p->pend[subno] = HERE();
- assert(p->pend[subno] != 0);
- }
- EMIT(ORPAREN, subno);
- MUSTEAT(')', REG_EPAREN);
- break;
-#ifndef POSIX_MISTAKE
- case ')': /* happens only if no current unmatched ( */
- /*
- * You may ask, why the ifndef? Because I didn't notice
- * this until slightly too late for 1003.2, and none of the
- * other 1003.2 regular-expression reviewers noticed it at
- * all. So an unmatched ) is legal POSIX, at least until
- * we can get it fixed.
- */
- SETERROR(REG_EPAREN);
- break;
-#endif
- case '^':
- EMIT(OBOL, 0);
- p->g->iflags |= USEBOL;
- p->g->nbol++;
- wascaret = 1;
- break;
- case '$':
- EMIT(OEOL, 0);
- p->g->iflags |= USEEOL;
- p->g->neol++;
- break;
- case '|':
- SETERROR(REG_EMPTY);
- break;
- case '*':
- case '+':
- case '?':
- SETERROR(REG_BADRPT);
- break;
- case '.':
- if (p->g->cflags&REG_NEWLINE)
- nonnewline(p);
- else
- EMIT(OANY, 0);
- break;
- case '[':
- p_bracket(p);
- break;
- case '\\':
- REQUIRE(MORE(), REG_EESCAPE);
- c = GETNEXT();
- ordinary(p, c);
- break;
- case '{': /* okay as ordinary except if digit follows */
- REQUIRE(!MORE() || !isdigit(PEEK()), REG_BADRPT);
- /* FALLTHROUGH */
- default:
- ordinary(p, c);
- break;
- }
-
- if (!MORE())
- return;
- c = PEEK();
- /* we call { a repetition if followed by a digit */
- if (!( c == '*' || c == '+' || c == '?' ||
- (c == '{' && MORE2() && isdigit(PEEK2())) ))
- return; /* no repetition, we're done */
- NEXT();
-
- REQUIRE(!wascaret, REG_BADRPT);
- switch (c) {
- case '*': /* implemented as +? */
- /* this case does not require the (y|) trick, noKLUDGE */
- INSERT(OPLUS_, pos);
- ASTERN(O_PLUS, pos);
- INSERT(OQUEST_, pos);
- ASTERN(O_QUEST, pos);
- break;
- case '+':
- INSERT(OPLUS_, pos);
- ASTERN(O_PLUS, pos);
- break;
- case '?':
- /* KLUDGE: emit y? as (y|) until subtle bug gets fixed */
- INSERT(OCH_, pos); /* offset slightly wrong */
- ASTERN(OOR1, pos); /* this one's right */
- AHEAD(pos); /* fix the OCH_ */
- EMIT(OOR2, 0); /* offset very wrong... */
- AHEAD(THERE()); /* ...so fix it */
- ASTERN(O_CH, THERETHERE());
- break;
- case '{':
- count = p_count(p);
- if (EAT(',')) {
- if (isdigit(PEEK())) {
- count2 = p_count(p);
- REQUIRE(count <= count2, REG_BADBR);
- } else /* single number with comma */
- count2 = INFINITY;
- } else /* just a single number */
- count2 = count;
- repeat(p, pos, count, count2);
- if (!EAT('}')) { /* error heuristics */
- while (MORE() && PEEK() != '}')
- NEXT();
- REQUIRE(MORE(), REG_EBRACE);
- SETERROR(REG_BADBR);
- }
- break;
- }
-
- if (!MORE())
- return;
- c = PEEK();
- if (!( c == '*' || c == '+' || c == '?' ||
- (c == '{' && MORE2() && isdigit(PEEK2())) ) )
- return;
- SETERROR(REG_BADRPT);
-}
-
-/*
- - p_str - string (no metacharacters) "parser"
- == static void p_str(register struct parse *p);
- */
-static void
-p_str(p)
-register struct parse *p;
-{
- REQUIRE(MORE(), REG_EMPTY);
- while (MORE())
- ordinary(p, GETNEXT());
-}
-
-/*
- - p_bre - BRE parser top level, anchoring and concatenation
- == static void p_bre(register struct parse *p, register int end1, \
- == register int end2);
- * Giving end1 as OUT essentially eliminates the end1/end2 check.
- *
- * This implementation is a bit of a kludge, in that a trailing $ is first
- * taken as an ordinary character and then revised to be an anchor. The
- * only undesirable side effect is that '$' gets included as a character
- * category in such cases. This is fairly harmless; not worth fixing.
- * The amount of lookahead needed to avoid this kludge is excessive.
- */
-static void
-p_bre(p, end1, end2)
-register struct parse *p;
-register int end1; /* first terminating character */
-register int end2; /* second terminating character */
-{
- register sopno start = HERE();
- register int first = 1; /* first subexpression? */
- register int wasdollar = 0;
-
- if (EAT('^')) {
- EMIT(OBOL, 0);
- p->g->iflags |= USEBOL;
- p->g->nbol++;
- }
- while (MORE() && !SEETWO(end1, end2)) {
- wasdollar = p_simp_re(p, first);
- first = 0;
- }
- if (wasdollar) { /* oops, that was a trailing anchor */
- DROP(1);
- EMIT(OEOL, 0);
- p->g->iflags |= USEEOL;
- p->g->neol++;
- }
-
- REQUIRE(HERE() != start, REG_EMPTY); /* require nonempty */
-}
-
-/*
- - p_simp_re - parse a simple RE, an atom possibly followed by a repetition
- == static int p_simp_re(register struct parse *p, int starordinary);
- */
-static int /* was the simple RE an unbackslashed $? */
-p_simp_re(p, starordinary)
-register struct parse *p;
-int starordinary; /* is a leading * an ordinary character? */
-{
- register int c;
- register int count;
- register int count2;
- register sopno pos;
- register int i;
- register sopno subno;
-# define BACKSL (1<<CHAR_BIT)
-
- pos = HERE(); /* repetion op, if any, covers from here */
-
- assert(MORE()); /* caller should have ensured this */
- c = GETNEXT();
- if (c == '\\') {
- REQUIRE(MORE(), REG_EESCAPE);
- c = BACKSL | (unsigned char)GETNEXT();
- }
- switch (c) {
- case '.':
- if (p->g->cflags&REG_NEWLINE)
- nonnewline(p);
- else
- EMIT(OANY, 0);
- break;
- case '[':
- p_bracket(p);
- break;
- case BACKSL|'{':
- SETERROR(REG_BADRPT);
- break;
- case BACKSL|'(':
- p->g->nsub++;
- subno = p->g->nsub;
- if (subno < NPAREN)
- p->pbegin[subno] = HERE();
- EMIT(OLPAREN, subno);
- /* the MORE here is an error heuristic */
- if (MORE() && !SEETWO('\\', ')'))
- p_bre(p, '\\', ')');
- if (subno < NPAREN) {
- p->pend[subno] = HERE();
- assert(p->pend[subno] != 0);
- }
- EMIT(ORPAREN, subno);
- REQUIRE(EATTWO('\\', ')'), REG_EPAREN);
- break;
- case BACKSL|')': /* should not get here -- must be user */
- case BACKSL|'}':
- SETERROR(REG_EPAREN);
- break;
- case BACKSL|'1':
- case BACKSL|'2':
- case BACKSL|'3':
- case BACKSL|'4':
- case BACKSL|'5':
- case BACKSL|'6':
- case BACKSL|'7':
- case BACKSL|'8':
- case BACKSL|'9':
- i = (c&~BACKSL) - '0';
- assert(i < NPAREN);
- if (p->pend[i] != 0) {
- assert(i <= p->g->nsub);
- EMIT(OBACK_, i);
- assert(p->pbegin[i] != 0);
- assert(OP(p->strip[p->pbegin[i]]) == OLPAREN);
- assert(OP(p->strip[p->pend[i]]) == ORPAREN);
- (void) dupl(p, p->pbegin[i]+1, p->pend[i]);
- EMIT(O_BACK, i);
- } else
- SETERROR(REG_ESUBREG);
- p->g->backrefs = 1;
- break;
- case '*':
- REQUIRE(starordinary, REG_BADRPT);
- /* FALLTHROUGH */
- default:
- ordinary(p, (unsigned char)c); /* takes off BACKSL, if any */
- break;
- }
-
- if (EAT('*')) { /* implemented as +? */
- /* this case does not require the (y|) trick, noKLUDGE */
- INSERT(OPLUS_, pos);
- ASTERN(O_PLUS, pos);
- INSERT(OQUEST_, pos);
- ASTERN(O_QUEST, pos);
- } else if (EATTWO('\\', '{')) {
- count = p_count(p);
- if (EAT(',')) {
- if (MORE() && isdigit(PEEK())) {
- count2 = p_count(p);
- REQUIRE(count <= count2, REG_BADBR);
- } else /* single number with comma */
- count2 = INFINITY;
- } else /* just a single number */
- count2 = count;
- repeat(p, pos, count, count2);
- if (!EATTWO('\\', '}')) { /* error heuristics */
- while (MORE() && !SEETWO('\\', '}'))
- NEXT();
- REQUIRE(MORE(), REG_EBRACE);
- SETERROR(REG_BADBR);
- }
- } else if (c == (unsigned char)'$') /* $ (but not \$) ends it */
- return(1);
-
- return(0);
-}
-
-/*
- - p_count - parse a repetition count
- == static int p_count(register struct parse *p);
- */
-static int /* the value */
-p_count(p)
-register struct parse *p;
-{
- register int count = 0;
- register int ndigits = 0;
-
- while (MORE() && isdigit(PEEK()) && count <= DUPMAX) {
- count = count*10 + (GETNEXT() - '0');
- ndigits++;
- }
-
- REQUIRE(ndigits > 0 && count <= DUPMAX, REG_BADBR);
- return(count);
-}
-
-/*
- - p_bracket - parse a bracketed character list
- == static void p_bracket(register struct parse *p);
- *
- * Note a significant property of this code: if the allocset() did SETERROR,
- * no set operations are done.
- */
-static void
-p_bracket(p)
-register struct parse *p;
-{
- register cset *cs = allocset(p);
- register int invert = 0;
-
- /* Dept of Truly Sickening Special-Case Kludges */
- if (p->next + 5 < p->end && strncmp(p->next, "[:<:]]", 6) == 0) {
- EMIT(OBOW, 0);
- NEXTn(6);
- return;
- }
- if (p->next + 5 < p->end && strncmp(p->next, "[:>:]]", 6) == 0) {
- EMIT(OEOW, 0);
- NEXTn(6);
- return;
- }
-
- if (EAT('^'))
- invert++; /* make note to invert set at end */
- if (EAT(']'))
- CHadd(cs, ']');
- else if (EAT('-'))
- CHadd(cs, '-');
- while (MORE() && PEEK() != ']' && !SEETWO('-', ']'))
- p_b_term(p, cs);
- if (EAT('-'))
- CHadd(cs, '-');
- MUSTEAT(']', REG_EBRACK);
-
- if (p->error != 0) /* don't mess things up further */
- return;
-
- if (p->g->cflags&REG_ICASE) {
- register int i;
- register int ci;
-
- for (i = p->g->csetsize - 1; i >= 0; i--)
- if (CHIN(cs, i) && isalpha(i)) {
- ci = othercase(i);
- if (ci != i)
- CHadd(cs, ci);
- }
- if (cs->multis != NULL)
- mccase(p, cs);
- }
- if (invert) {
- register int i;
-
- for (i = p->g->csetsize - 1; i >= 0; i--)
- if (CHIN(cs, i))
- CHsub(cs, i);
- else
- CHadd(cs, i);
- if (p->g->cflags&REG_NEWLINE)
- CHsub(cs, '\n');
- if (cs->multis != NULL)
- mcinvert(p, cs);
- }
-
- assert(cs->multis == NULL); /* xxx */
-
- if (nch(p, cs) == 1) { /* optimize singleton sets */
- ordinary(p, firstch(p, cs));
- freeset(p, cs);
- } else
- EMIT(OANYOF, freezeset(p, cs));
-}
-
-/*
- - p_b_term - parse one term of a bracketed character list
- == static void p_b_term(register struct parse *p, register cset *cs);
- */
-static void
-p_b_term(p, cs)
-register struct parse *p;
-register cset *cs;
-{
- register unsigned char c;
- register unsigned char start, finish;
- register int i;
-
- /* classify what we've got */
- switch ((MORE()) ? PEEK() : '\0') {
- case '[':
- c = (MORE2()) ? PEEK2() : '\0';
- break;
- case '-':
- SETERROR(REG_ERANGE);
- return; /* NOTE RETURN */
- break;
- default:
- c = '\0';
- break;
- }
-
- switch (c) {
- case ':': /* character class */
- NEXT2();
- REQUIRE(MORE(), REG_EBRACK);
- c = PEEK();
- REQUIRE(c != '-' && c != ']', REG_ECTYPE);
- p_b_cclass(p, cs);
- REQUIRE(MORE(), REG_EBRACK);
- REQUIRE(EATTWO(':', ']'), REG_ECTYPE);
- break;
- case '=': /* equivalence class */
- NEXT2();
- REQUIRE(MORE(), REG_EBRACK);
- c = PEEK();
- REQUIRE(c != '-' && c != ']', REG_ECOLLATE);
- p_b_eclass(p, cs);
- REQUIRE(MORE(), REG_EBRACK);
- REQUIRE(EATTWO('=', ']'), REG_ECOLLATE);
- break;
- default: /* symbol, ordinary character, or range */
-/* xxx revision needed for multichar stuff */
- start = p_b_symbol(p);
- if (SEE('-') && MORE2() && PEEK2() != ']') {
- /* range */
- NEXT();
- if (EAT('-'))
- finish = '-';
- else
- finish = p_b_symbol(p);
- } else
- finish = start;
-/* xxx what about signed chars here... */
- REQUIRE(start <= finish, REG_ERANGE);
- for (i = start; i <= finish; i++)
- CHadd(cs, i);
- break;
- }
-}
-
-/*
- - p_b_cclass - parse a character-class name and deal with it
- == static void p_b_cclass(register struct parse *p, register cset *cs);
- */
-static void
-p_b_cclass(p, cs)
-register struct parse *p;
-register cset *cs;
-{
- register unsigned char *sp = p->next;
- register struct cclass *cp;
- register size_t len;
- register unsigned char *u;
- register unsigned char c;
-
- while (MORE() && isalpha(PEEK()))
- NEXT();
- len = p->next - sp;
- for (cp = cclasses; cp->name != NULL; cp++)
- if (strncmp(cp->name, sp, len) == 0 && cp->name[len] == '\0')
- break;
- if (cp->name == NULL) {
- /* oops, didn't find it */
- SETERROR(REG_ECTYPE);
- return;
- }
-
- u = cp->chars;
- while ((c = *u++) != '\0')
- CHadd(cs, c);
- for (u = cp->multis; *u != '\0'; u += strlen(u) + 1)
- MCadd(p, cs, u);
-}
-
-/*
- - p_b_eclass - parse an equivalence-class name and deal with it
- == static void p_b_eclass(register struct parse *p, register cset *cs);
- *
- * This implementation is incomplete. xxx
- */
-static void
-p_b_eclass(p, cs)
-register struct parse *p;
-register cset *cs;
-{
- register unsigned char c;
-
- c = p_b_coll_elem(p, '=');
- CHadd(cs, c);
-}
-
-/*
- - p_b_symbol - parse a character or [..]ed multicharacter collating symbol
- == static char p_b_symbol(register struct parse *p);
- */
-static unsigned char /* value of symbol */
-p_b_symbol(p)
-register struct parse *p;
-{
- register unsigned char value;
-
- REQUIRE(MORE(), REG_EBRACK);
- if (!EATTWO('[', '.'))
- return(GETNEXT());
-
- /* collating symbol */
- value = p_b_coll_elem(p, '.');
- REQUIRE(EATTWO('.', ']'), REG_ECOLLATE);
- return(value);
-}
-
-/*
- - p_b_coll_elem - parse a collating-element name and look it up
- == static char p_b_coll_elem(register struct parse *p, int endc);
- */
-static unsigned char /* value of collating element */
-p_b_coll_elem(p, endc)
-register struct parse *p;
-int endc; /* name ended by endc,']' */
-{
- register unsigned char *sp = p->next;
- register struct cname *cp;
- register int len;
-
- while (MORE() && !SEETWO(endc, ']'))
- NEXT();
- if (!MORE()) {
- SETERROR(REG_EBRACK);
- return(0);
- }
- len = p->next - sp;
- for (cp = cnames; cp->name != NULL; cp++)
- if (strncmp(cp->name, sp, len) == 0 && cp->name[len] == '\0')
- return(cp->code); /* known name */
- if (len == 1)
- return(*sp); /* single character */
- SETERROR(REG_ECOLLATE); /* neither */
- return(0);
-}
-
-/*
- - othercase - return the case counterpart of an alphabetic
- == static char othercase(int ch);
- */
-static unsigned char /* if no counterpart, return ch */
-othercase(ch)
-int ch;
-{
- assert(isalpha(ch));
- if (isupper(ch))
- return(tolower(ch));
- else if (islower(ch))
- return(toupper(ch));
- else /* peculiar, but could happen */
- return(ch);
-}
-
-/*
- - bothcases - emit a dualcase version of a two-case character
- == static void bothcases(register struct parse *p, int ch);
- *
- * Boy, is this implementation ever a kludge...
- */
-static void
-bothcases(p, ch)
-register struct parse *p;
-int ch;
-{
- register unsigned char *oldnext = p->next;
- register unsigned char *oldend = p->end;
- unsigned char bracket[3];
-
- assert(othercase(ch) != ch); /* p_bracket() would recurse */
- p->next = bracket;
- p->end = bracket+2;
- bracket[0] = ch;
- bracket[1] = ']';
- bracket[2] = '\0';
- p_bracket(p);
- assert(p->next == bracket+2);
- p->next = oldnext;
- p->end = oldend;
-}
-
-/*
- - ordinary - emit an ordinary character
- == static void ordinary(register struct parse *p, register int ch);
- */
-static void
-ordinary(p, ch)
-register struct parse *p;
-register int ch;
-{
- register cat_t *cap = p->g->categories;
-
- if ((p->g->cflags&REG_ICASE) && isalpha(ch) && othercase(ch) != ch)
- bothcases(p, ch);
- else {
- EMIT(OCHAR, (unsigned char)ch);
- if (cap[ch] == 0)
- cap[ch] = p->g->ncategories++;
- }
-}
-
-/*
- - nonnewline - emit REG_NEWLINE version of OANY
- == static void nonnewline(register struct parse *p);
- *
- * Boy, is this implementation ever a kludge...
- */
-static void
-nonnewline(p)
-register struct parse *p;
-{
- register unsigned char *oldnext = p->next;
- register unsigned char *oldend = p->end;
- unsigned char bracket[4];
-
- p->next = bracket;
- p->end = bracket+3;
- bracket[0] = '^';
- bracket[1] = '\n';
- bracket[2] = ']';
- bracket[3] = '\0';
- p_bracket(p);
- assert(p->next == bracket+3);
- p->next = oldnext;
- p->end = oldend;
-}
-
-/*
- - repeat - generate code for a bounded repetition, recursively if needed
- == static void repeat(register struct parse *p, sopno start, int from, int to);
- */
-static void
-repeat(p, start, from, to)
-register struct parse *p;
-sopno start; /* operand from here to end of strip */
-int from; /* repeated from this number */
-int to; /* to this number of times (maybe INFINITY) */
-{
- register sopno finish = HERE();
-# define N 2
-# define INF 3
-# define REP(f, t) ((f)*8 + (t))
-# define MAP(n) (((n) <= 1) ? (n) : ((n) == INFINITY) ? INF : N)
- register sopno copy;
-
- if (p->error != 0) /* head off possible runaway recursion */
- return;
-
- assert(from <= to);
-
- switch (REP(MAP(from), MAP(to))) {
- case REP(0, 0): /* must be user doing this */
- DROP(finish-start); /* drop the operand */
- break;
- case REP(0, 1): /* as x{1,1}? */
- case REP(0, N): /* as x{1,n}? */
- case REP(0, INF): /* as x{1,}? */
- /* KLUDGE: emit y? as (y|) until subtle bug gets fixed */
- INSERT(OCH_, start); /* offset is wrong... */
- repeat(p, start+1, 1, to);
- ASTERN(OOR1, start);
- AHEAD(start); /* ... fix it */
- EMIT(OOR2, 0);
- AHEAD(THERE());
- ASTERN(O_CH, THERETHERE());
- break;
- case REP(1, 1): /* trivial case */
- /* done */
- break;
- case REP(1, N): /* as x?x{1,n-1} */
- /* KLUDGE: emit y? as (y|) until subtle bug gets fixed */
- INSERT(OCH_, start);
- ASTERN(OOR1, start);
- AHEAD(start);
- EMIT(OOR2, 0); /* offset very wrong... */
- AHEAD(THERE()); /* ...so fix it */
- ASTERN(O_CH, THERETHERE());
- copy = dupl(p, start+1, finish+1);
- assert(copy == finish+4);
- repeat(p, copy, 1, to-1);
- break;
- case REP(1, INF): /* as x+ */
- INSERT(OPLUS_, start);
- ASTERN(O_PLUS, start);
- break;
- case REP(N, N): /* as xx{m-1,n-1} */
- copy = dupl(p, start, finish);
- repeat(p, copy, from-1, to-1);
- break;
- case REP(N, INF): /* as xx{n-1,INF} */
- copy = dupl(p, start, finish);
- repeat(p, copy, from-1, to);
- break;
- default: /* "can't happen" */
- SETERROR(REG_ASSERT); /* just in case */
- break;
- }
-}
-
-/*
- - seterr - set an error condition
- == static int seterr(register struct parse *p, int e);
- */
-static int /* useless but makes type checking happy */
-seterr(p, e)
-register struct parse *p;
-int e;
-{
- if (p->error == 0) /* keep earliest error condition */
- p->error = e;
- p->next = nuls; /* try to bring things to a halt */
- p->end = nuls;
- return(0); /* make the return value well-defined */
-}
-
-/*
- - allocset - allocate a set of characters for []
- == static cset *allocset(register struct parse *p);
- */
-static cset *
-allocset(p)
-register struct parse *p;
-{
- register int no = p->g->ncsets++;
- register size_t nc;
- register size_t nbytes;
- register cset *cs;
- register size_t css = (size_t)p->g->csetsize;
- register int i;
-
- if (no >= p->ncsalloc) { /* need another column of space */
- p->ncsalloc += CHAR_BIT;
- nc = p->ncsalloc;
- assert(nc % CHAR_BIT == 0);
- nbytes = nc / CHAR_BIT * css;
- if (p->g->sets == NULL)
- p->g->sets = (cset *)malloc(nc * sizeof(cset));
- else
- p->g->sets = (cset *)realloc((unsigned char *)p->g->sets,
- nc * sizeof(cset));
- if (p->g->setbits == NULL)
- p->g->setbits = (uch *)malloc(nbytes);
- else {
- p->g->setbits = (uch *)realloc((unsigned char *)p->g->setbits,
- nbytes);
- /* xxx this isn't right if setbits is now NULL */
- for (i = 0; i < no; i++)
- p->g->sets[i].ptr = p->g->setbits + css*(i/CHAR_BIT);
- }
- if (p->g->sets != NULL && p->g->setbits != NULL)
- (void) memset((unsigned char *)p->g->setbits + (nbytes - css),
- 0, css);
- else {
- no = 0;
- SETERROR(REG_ESPACE);
- /* caller's responsibility not to do set ops */
- }
- }
-
- assert(p->g->sets != NULL); /* xxx */
- cs = &p->g->sets[no];
- cs->ptr = p->g->setbits + css*((no)/CHAR_BIT);
- cs->mask = 1 << ((no) % CHAR_BIT);
- cs->hash = 0;
- cs->smultis = 0;
- cs->multis = NULL;
-
- return(cs);
-}
-
-/*
- - freeset - free a now-unused set
- == static void freeset(register struct parse *p, register cset *cs);
- */
-static void
-freeset(p, cs)
-register struct parse *p;
-register cset *cs;
-{
- register size_t i;
- register cset *top = &p->g->sets[p->g->ncsets];
- register size_t css = (size_t)p->g->csetsize;
-
- for (i = 0; i < css; i++)
- CHsub(cs, i);
- if (cs == top-1) /* recover only the easy case */
- p->g->ncsets--;
-}
-
-/*
- - freezeset - final processing on a set of characters
- == static int freezeset(register struct parse *p, register cset *cs);
- *
- * The main task here is merging identical sets. This is usually a waste
- * of time (although the hash code minimizes the overhead), but can win
- * big if REG_ICASE is being used. REG_ICASE, by the way, is why the hash
- * is done using addition rather than xor -- all ASCII [aA] sets xor to
- * the same value!
- */
-static int /* set number */
-freezeset(p, cs)
-register struct parse *p;
-register cset *cs;
-{
- register uch h = cs->hash;
- register size_t i;
- register cset *top = &p->g->sets[p->g->ncsets];
- register cset *cs2;
- register size_t css = (size_t)p->g->csetsize;
-
- /* look for an earlier one which is the same */
- for (cs2 = &p->g->sets[0]; cs2 < top; cs2++)
- if (cs2->hash == h && cs2 != cs) {
- /* maybe */
- for (i = 0; i < css; i++)
- if (!!CHIN(cs2, i) != !!CHIN(cs, i))
- break; /* no */
- if (i == css)
- break; /* yes */
- }
-
- if (cs2 < top) { /* found one */
- freeset(p, cs);
- cs = cs2;
- }
-
- return((int)(cs - p->g->sets));
-}
-
-/*
- - firstch - return first character in a set (which must have at least one)
- == static int firstch(register struct parse *p, register cset *cs);
- */
-static int /* character; there is no "none" value */
-firstch(p, cs)
-register struct parse *p;
-register cset *cs;
-{
- register size_t i;
- register size_t css = (size_t)p->g->csetsize;
-
- for (i = 0; i < css; i++)
- if (CHIN(cs, i))
- return((unsigned char)i);
- assert(never);
- return(0); /* arbitrary */
-}
-
-/*
- - nch - number of characters in a set
- == static int nch(register struct parse *p, register cset *cs);
- */
-static int
-nch(p, cs)
-register struct parse *p;
-register cset *cs;
-{
- register size_t i;
- register size_t css = (size_t)p->g->csetsize;
- register int n = 0;
-
- for (i = 0; i < css; i++)
- if (CHIN(cs, i))
- n++;
- return(n);
-}
-
-/*
- - mcadd - add a collating element to a cset
- == static void mcadd(register struct parse *p, register cset *cs, \
- == register char *cp);
- */
-static void
-mcadd(p, cs, cp)
-register struct parse *p;
-register cset *cs;
-register unsigned char *cp;
-{
- register size_t oldend = cs->smultis;
-
- cs->smultis += strlen(cp) + 1;
- if (cs->multis == NULL)
- cs->multis = malloc(cs->smultis);
- else
- cs->multis = realloc(cs->multis, cs->smultis);
- if (cs->multis == NULL) {
- SETERROR(REG_ESPACE);
- return;
- }
-
- (void) strcpy(cs->multis + oldend - 1, cp);
- cs->multis[cs->smultis - 1] = '\0';
-}
-
-#if 0
-/*
- - mcsub - subtract a collating element from a cset
- == static void mcsub(register cset *cs, register unsigned char *cp);
- */
-static void
-mcsub(cs, cp)
-register unsigned cset *cs;
-register unsigned char *cp;
-{
- register unsigned char *fp = mcfind(cs, cp);
- register size_t len = strlen(fp);
-
- assert(fp != NULL);
- (void) memmove(fp, fp + len + 1,
- cs->smultis - (fp + len + 1 - cs->multis));
- cs->smultis -= len;
-
- if (cs->smultis == 0) {
- free(cs->multis);
- cs->multis = NULL;
- return;
- }
-
- cs->multis = realloc(cs->multis, cs->smultis);
- assert(cs->multis != NULL);
-}
-
-/*
- - mcin - is a collating element in a cset?
- == static int mcin(register cset *cs, register unsigned char *cp);
- */
-static int
-mcin(cs, cp)
-register cset *cs;
-register unsigned char *cp;
-{
- return(mcfind(cs, cp) != NULL);
-}
-
-
-/*
- - mcfind - find a collating element in a cset
- == static unsigned char *mcfind(register cset *cs, register unsigned char *cp);
- */
-static unsigned char *
-mcfind(cs, cp)
-register cset *cs;
-register unsigned char *cp;
-{
- register unsigned char *p;
-
- if (cs->multis == NULL)
- return(NULL);
- for (p = cs->multis; *p != '\0'; p += strlen(p) + 1)
- if (strcmp(cp, p) == 0)
- return(p);
- return(NULL);
-}
-#endif
-
-/*
- - mcinvert - invert the list of collating elements in a cset
- == static void mcinvert(register struct parse *p, register cset *cs);
- *
- * This would have to know the set of possibilities. Implementation
- * is deferred.
- */
-static void
-mcinvert(p, cs)
-register struct parse *p;
-register cset *cs;
-{
- assert(cs->multis == NULL); /* xxx */
-}
-
-/*
- - mccase - add case counterparts of the list of collating elements in a cset
- == static void mccase(register struct parse *p, register cset *cs);
- *
- * This would have to know the set of possibilities. Implementation
- * is deferred.
- */
-static void
-mccase(p, cs)
-register struct parse *p;
-register cset *cs;
-{
- assert(cs->multis == NULL); /* xxx */
-}
-
-/*
- - isinsets - is this character in any sets?
- == static int isinsets(register struct re_guts *g, int c);
- */
-static int /* predicate */
-isinsets(g, c)
-register struct re_guts *g;
-int c;
-{
- register uch *col;
- register int i;
- register int ncols = (g->ncsets+(CHAR_BIT-1)) / CHAR_BIT;
- register unsigned uc = (unsigned char)c;
-
- for (i = 0, col = g->setbits; i < ncols; i++, col += g->csetsize)
- if (col[uc] != 0)
- return(1);
- return(0);
-}
-
-/*
- - samesets - are these two characters in exactly the same sets?
- == static int samesets(register struct re_guts *g, int c1, int c2);
- */
-static int /* predicate */
-samesets(g, c1, c2)
-register struct re_guts *g;
-int c1;
-int c2;
-{
- register uch *col;
- register int i;
- register int ncols = (g->ncsets+(CHAR_BIT-1)) / CHAR_BIT;
- register unsigned uc1 = (unsigned char)c1;
- register unsigned uc2 = (unsigned char)c2;
-
- for (i = 0, col = g->setbits; i < ncols; i++, col += g->csetsize)
- if (col[uc1] != col[uc2])
- return(0);
- return(1);
-}
-
-/*
- - categorize - sort out character categories
- == static void categorize(struct parse *p, register struct re_guts *g);
- */
-static void
-categorize(p, g)
-struct parse *p;
-register struct re_guts *g;
-{
- register cat_t *cats = g->categories;
- register int c;
- register int c2;
- register cat_t cat;
-
- /* avoid making error situations worse */
- if (p->error != 0)
- return;
-
- for (c = 0; c <= UCHAR_MAX; c++)
- if (cats[c] == 0 && isinsets(g, c)) {
- cat = g->ncategories++;
- cats[c] = cat;
- for (c2 = c+1; c2 <= UCHAR_MAX; c2++)
- if (cats[c2] == 0 && samesets(g, c, c2))
- cats[c2] = cat;
- }
-}
-
-/*
- - dupl - emit a duplicate of a bunch of sops
- == static sopno dupl(register struct parse *p, sopno start, sopno finish);
- */
-static sopno /* start of duplicate */
-dupl(p, start, finish)
-register struct parse *p;
-sopno start; /* from here */
-sopno finish; /* to this less one */
-{
- register sopno ret = HERE();
- register sopno len = finish - start;
-
- assert(finish >= start);
- if (len == 0)
- return(ret);
- enlarge(p, p->ssize + len); /* this many unexpected additions */
- assert(p->ssize >= p->slen + len);
- (void) memcpy((char *)(p->strip + p->slen),
- (char *)(p->strip + start), (size_t)len*sizeof(sop));
- p->slen += len;
- return(ret);
-}
-
-/*
- - doemit - emit a strip operator
- == static void doemit(register struct parse *p, sop op, size_t opnd);
- *
- * It might seem better to implement this as a macro with a function as
- * hard-case backup, but it's just too big and messy unless there are
- * some changes to the data structures. Maybe later.
- */
-static void
-doemit(p, op, opnd)
-register struct parse *p;
-sop op;
-size_t opnd;
-{
- /* avoid making error situations worse */
- if (p->error != 0)
- return;
-
- /* deal with oversize operands ("can't happen", more or less) */
- assert(opnd < 1<<OPSHIFT);
-
- /* deal with undersized strip */
- if (p->slen >= p->ssize)
- enlarge(p, (p->ssize+1) / 2 * 3); /* +50% */
- assert(p->slen < p->ssize);
-
- /* finally, it's all reduced to the easy case */
- p->strip[p->slen++] = SOP(op, opnd);
-}
-
-/*
- - doinsert - insert a sop into the strip
- == static void doinsert(register struct parse *p, sop op, size_t opnd, sopno pos);
- */
-static void
-doinsert(p, op, opnd, pos)
-register struct parse *p;
-sop op;
-size_t opnd;
-sopno pos;
-{
- register sopno sn;
- register sop s;
- register int i;
-
- /* avoid making error situations worse */
- if (p->error != 0)
- return;
-
- sn = HERE();
- EMIT(op, opnd); /* do checks, ensure space */
- assert(HERE() == sn+1);
- s = p->strip[sn];
-
- /* adjust paren pointers */
- assert(pos > 0);
- for (i = 1; i < NPAREN; i++) {
- if (p->pbegin[i] >= pos) {
- p->pbegin[i]++;
- }
- if (p->pend[i] >= pos) {
- p->pend[i]++;
- }
- }
-
- memmove((char *)&p->strip[pos+1], (char *)&p->strip[pos],
- (HERE()-pos-1)*sizeof(sop));
- p->strip[pos] = s;
-}
-
-/*
- - dofwd - complete a forward reference
- == static void dofwd(register struct parse *p, sopno pos, sop value);
- */
-static void
-dofwd(p, pos, value)
-register struct parse *p;
-register sopno pos;
-sop value;
-{
- /* avoid making error situations worse */
- if (p->error != 0)
- return;
-
- assert(value < 1<<OPSHIFT);
- p->strip[pos] = OP(p->strip[pos]) | value;
-}
-
-/*
- - enlarge - enlarge the strip
- == static void enlarge(register struct parse *p, sopno size);
- */
-static void
-enlarge(p, size)
-register struct parse *p;
-register sopno size;
-{
- register sop *sp;
-
- if (p->ssize >= size)
- return;
-
- sp = (sop *)realloc(p->strip, size*sizeof(sop));
- if (sp == NULL) {
- SETERROR(REG_ESPACE);
- return;
- }
- p->strip = sp;
- p->ssize = size;
-}
-
-/*
- - stripsnug - compact the strip
- == static void stripsnug(register struct parse *p, register struct re_guts *g);
- */
-static void
-stripsnug(p, g)
-register struct parse *p;
-register struct re_guts *g;
-{
- g->nstates = p->slen;
- g->strip = (sop *)realloc((unsigned char *)p->strip, p->slen * sizeof(sop));
- if (g->strip == NULL) {
- SETERROR(REG_ESPACE);
- g->strip = p->strip;
- }
-}
-
-/*
- - findmust - fill in must and mlen with longest mandatory literal string
- == static void findmust(register struct parse *p, register struct re_guts *g);
- *
- * This algorithm could do fancy things like analyzing the operands of |
- * for common subsequences. Someday. This code is simple and finds most
- * of the interesting cases.
- *
- * Note that must and mlen got initialized during setup.
- */
-static void
-findmust(p, g)
-struct parse *p;
-register struct re_guts *g;
-{
- register sop *scan;
- sop *start = NULL;
- register sop *newstart = NULL;
- register sopno newlen;
- register sop s;
- register unsigned char *cp;
- register sopno i;
-
- /* avoid making error situations worse */
- if (p->error != 0)
- return;
-
- /* find the longest OCHAR sequence in strip */
- newlen = 0;
- scan = g->strip + 1;
- do {
- s = *scan++;
- switch (OP(s)) {
- case OCHAR: /* sequence member */
- if (newlen == 0) /* new sequence */
- newstart = scan - 1;
- newlen++;
- break;
- case OPLUS_: /* things that don't break one */
- case OLPAREN:
- case ORPAREN:
- break;
- case OQUEST_: /* things that must be skipped */
- case OCH_:
- scan--;
- do {
- scan += OPND(s);
- s = *scan;
- /* assert() interferes w debug printouts */
- if (OP(s) != O_QUEST && OP(s) != O_CH &&
- OP(s) != OOR2) {
- g->iflags |= BAD;
- return;
- }
- } while (OP(s) != O_QUEST && OP(s) != O_CH);
- /* fallthrough */
- default: /* things that break a sequence */
- if (newlen > g->mlen) { /* ends one */
- start = newstart;
- g->mlen = newlen;
- }
- newlen = 0;
- break;
- }
- } while (OP(s) != OEND);
-
- if (g->mlen == 0) /* there isn't one */
- return;
-
- /* turn it into a character string */
- g->must = malloc((size_t)g->mlen + 1);
- if (g->must == NULL) { /* argh; just forget it */
- g->mlen = 0;
- return;
- }
- cp = g->must;
- scan = start;
- for (i = g->mlen; i > 0; i--) {
- while (OP(s = *scan++) != OCHAR)
- continue;
- assert(cp < g->must + g->mlen);
- *cp++ = (unsigned char)OPND(s);
- }
- assert(cp == g->must + g->mlen);
- *cp++ = '\0'; /* just on general principles */
-}
-
-/*
- - pluscount - count + nesting
- == static sopno pluscount(register struct parse *p, register struct re_guts *g);
- */
-static sopno /* nesting depth */
-pluscount(p, g)
-struct parse *p;
-register struct re_guts *g;
-{
- register sop *scan;
- register sop s;
- register sopno plusnest = 0;
- register sopno maxnest = 0;
-
- if (p->error != 0)
- return(0); /* there may not be an OEND */
-
- scan = g->strip + 1;
- do {
- s = *scan++;
- switch (OP(s)) {
- case OPLUS_:
- plusnest++;
- break;
- case O_PLUS:
- if (plusnest > maxnest)
- maxnest = plusnest;
- plusnest--;
- break;
- }
- } while (OP(s) != OEND);
- if (plusnest != 0)
- g->iflags |= BAD;
- return(maxnest);
-}
diff --git a/ext/ereg/regex/regcomp.ih b/ext/ereg/regex/regcomp.ih
deleted file mode 100644
index c93d32e51d..0000000000
--- a/ext/ereg/regex/regcomp.ih
+++ /dev/null
@@ -1,53 +0,0 @@
-/* ========= begin header generated by ./mkh ========= */
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/* === regcomp.c === */
-static void p_ere(register struct parse *p, int stop);
-static void p_ere_exp(register struct parse *p);
-static void p_str(register struct parse *p);
-static void p_bre(register struct parse *p, register int end1, register int end2);
-static int p_simp_re(register struct parse *p, int starordinary);
-static int p_count(register struct parse *p);
-static void p_bracket(register struct parse *p);
-static void p_b_term(register struct parse *p, register cset *cs);
-static void p_b_cclass(register struct parse *p, register cset *cs);
-static void p_b_eclass(register struct parse *p, register cset *cs);
-static unsigned char p_b_symbol(register struct parse *p);
-static unsigned char p_b_coll_elem(register struct parse *p, int endc);
-static unsigned char othercase(int ch);
-static void bothcases(register struct parse *p, int ch);
-static void ordinary(register struct parse *p, register int ch);
-static void nonnewline(register struct parse *p);
-static void repeat(register struct parse *p, sopno start, int from, int to);
-static int seterr(register struct parse *p, int e);
-static cset *allocset(register struct parse *p);
-static void freeset(register struct parse *p, register cset *cs);
-static int freezeset(register struct parse *p, register cset *cs);
-static int firstch(register struct parse *p, register cset *cs);
-static int nch(register struct parse *p, register cset *cs);
-static void mcadd(register struct parse *p, register cset *cs, register unsigned char *cp);
-#if 0
-static void mcsub(register cset *cs, register unsigned char *cp);
-static int mcin(register cset *cs, register unsigned char *cp);
-static unsigned char *mcfind(register cset *cs, register unsigned char *cp);
-#endif
-static void mcinvert(register struct parse *p, register cset *cs);
-static void mccase(register struct parse *p, register cset *cs);
-static int isinsets(register struct re_guts *g, int c);
-static int samesets(register struct re_guts *g, int c1, int c2);
-static void categorize(struct parse *p, register struct re_guts *g);
-static sopno dupl(register struct parse *p, sopno start, sopno finish);
-static void doemit(register struct parse *p, sop op, size_t opnd);
-static void doinsert(register struct parse *p, sop op, size_t opnd, sopno pos);
-static void dofwd(register struct parse *p, sopno pos, sop value);
-static void enlarge(register struct parse *p, sopno size);
-static void stripsnug(register struct parse *p, register struct re_guts *g);
-static void findmust(register struct parse *p, register struct re_guts *g);
-static sopno pluscount(register struct parse *p, register struct re_guts *g);
-
-#ifdef __cplusplus
-}
-#endif
-/* ========= end header generated by ./mkh ========= */
diff --git a/ext/ereg/regex/regerror.c b/ext/ereg/regex/regerror.c
deleted file mode 100644
index bf71e3a814..0000000000
--- a/ext/ereg/regex/regerror.c
+++ /dev/null
@@ -1,126 +0,0 @@
-#include <sys/types.h>
-#include <stdio.h>
-#include <string.h>
-#include <ctype.h>
-#include <limits.h>
-#include <stdlib.h>
-#include <regex.h>
-
-#include "utils.h"
-#include "regerror.ih"
-
-/*
- = #define REG_OKAY 0
- = #define REG_NOMATCH 1
- = #define REG_BADPAT 2
- = #define REG_ECOLLATE 3
- = #define REG_ECTYPE 4
- = #define REG_EESCAPE 5
- = #define REG_ESUBREG 6
- = #define REG_EBRACK 7
- = #define REG_EPAREN 8
- = #define REG_EBRACE 9
- = #define REG_BADBR 10
- = #define REG_ERANGE 11
- = #define REG_ESPACE 12
- = #define REG_BADRPT 13
- = #define REG_EMPTY 14
- = #define REG_ASSERT 15
- = #define REG_INVARG 16
- = #define REG_ATOI 255 // convert name to number (!)
- = #define REG_ITOA 0400 // convert number to name (!)
- */
-static struct rerr {
- int code;
- char *name;
- char *explain;
-} rerrs[] = {
- {REG_OKAY, "REG_OKAY", "no errors detected"},
- {REG_NOMATCH, "REG_NOMATCH", "regexec() failed to match"},
- {REG_BADPAT, "REG_BADPAT", "invalid regular expression"},
- {REG_ECOLLATE, "REG_ECOLLATE", "invalid collating element"},
- {REG_ECTYPE, "REG_ECTYPE", "invalid character class"},
- {REG_EESCAPE, "REG_EESCAPE", "trailing backslash (\\)"},
- {REG_ESUBREG, "REG_ESUBREG", "invalid backreference number"},
- {REG_EBRACK, "REG_EBRACK", "brackets ([ ]) not balanced"},
- {REG_EPAREN, "REG_EPAREN", "parentheses not balanced"},
- {REG_EBRACE, "REG_EBRACE", "braces not balanced"},
- {REG_BADBR, "REG_BADBR", "invalid repetition count(s)"},
- {REG_ERANGE, "REG_ERANGE", "invalid character range"},
- {REG_ESPACE, "REG_ESPACE", "out of memory"},
- {REG_BADRPT, "REG_BADRPT", "repetition-operator operand invalid"},
- {REG_EMPTY, "REG_EMPTY", "empty (sub)expression"},
- {REG_ASSERT, "REG_ASSERT", "\"can't happen\" -- you found a bug"},
- {REG_INVARG, "REG_INVARG", "invalid argument to regex routine"},
- {-1, "", "*** unknown regexp error code ***"},
-};
-
-/*
- - regerror - the interface to error numbers
- = API_EXPORT(size_t) regerror(int, const regex_t *, char *, size_t);
- */
-/* ARGSUSED */
-API_EXPORT(size_t)
-regerror(errcode, preg, errbuf, errbuf_size)
-int errcode;
-const regex_t *preg;
-char *errbuf;
-size_t errbuf_size;
-{
- register struct rerr *r;
- register size_t len;
- register int target = errcode &~ REG_ITOA;
- register char *s;
- char convbuf[50];
-
- if (errcode == REG_ATOI)
- s = regatoi(preg, convbuf);
- else {
- for (r = rerrs; r->code >= 0; r++)
- if (r->code == target)
- break;
-
- if (errcode&REG_ITOA) {
- if (r->code >= 0)
- (void) strcpy(convbuf, r->name);
- else
- sprintf(convbuf, "REG_0x%x", target);
- assert(strlen(convbuf) < sizeof(convbuf));
- s = convbuf;
- } else
- s = r->explain;
- }
-
- len = strlen(s) + 1;
- if (errbuf_size > 0) {
- if (errbuf_size > len)
- (void) strcpy(errbuf, s);
- else {
- (void) strncpy(errbuf, s, errbuf_size-1);
- errbuf[errbuf_size-1] = '\0';
- }
- }
-
- return(len);
-}
-
-/*
- - regatoi - internal routine to implement REG_ATOI
- == static char *regatoi(const regex_t *preg, char *localbuf);
- */
-static char *
-regatoi(preg, localbuf)
-const regex_t *preg;
-char *localbuf;
-{
- register struct rerr *r;
-
- for (r = rerrs; r->code >= 0; r++)
- if (strcmp(r->name, preg->re_endp) == 0)
- break;
- if (r->code < 0)
- return("0");
-
- sprintf(localbuf, "%d", r->code);
- return(localbuf);
-}
diff --git a/ext/ereg/regex/regerror.ih b/ext/ereg/regex/regerror.ih
deleted file mode 100644
index 2cb668c24f..0000000000
--- a/ext/ereg/regex/regerror.ih
+++ /dev/null
@@ -1,12 +0,0 @@
-/* ========= begin header generated by ./mkh ========= */
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/* === regerror.c === */
-static char *regatoi(const regex_t *preg, char *localbuf);
-
-#ifdef __cplusplus
-}
-#endif
-/* ========= end header generated by ./mkh ========= */
diff --git a/ext/ereg/regex/regex.3 b/ext/ereg/regex/regex.3
deleted file mode 100644
index 100c8a7f71..0000000000
--- a/ext/ereg/regex/regex.3
+++ /dev/null
@@ -1,502 +0,0 @@
-.TH REGEX 3 "17 May 1993"
-.BY "Henry Spencer"
-.de ZR
-.\" one other place knows this name: the SEE ALSO section
-.IR regex (7) \\$1
-..
-.SH NAME
-regcomp, regexec, regerror, regfree \- regular-expression library
-.SH SYNOPSIS
-.ft B
-.\".na
-#include <sys/types.h>
-.br
-#include <regex.h>
-.HP 10
-int regcomp(regex_t\ *preg, const\ char\ *pattern, int\ cflags);
-.HP
-int\ regexec(const\ regex_t\ *preg, const\ char\ *string,
-size_t\ nmatch, regmatch_t\ pmatch[], int\ eflags);
-.HP
-size_t\ regerror(int\ errcode, const\ regex_t\ *preg,
-char\ *errbuf, size_t\ errbuf_size);
-.HP
-void\ regfree(regex_t\ *preg);
-.\".ad
-.ft
-.SH DESCRIPTION
-These routines implement POSIX 1003.2 regular expressions (``RE''s);
-see
-.ZR .
-.I Regcomp
-compiles an RE written as a string into an internal form,
-.I regexec
-matches that internal form against a string and reports results,
-.I regerror
-transforms error codes from either into human-readable messages,
-and
-.I regfree
-frees any dynamically-allocated storage used by the internal form
-of an RE.
-.PP
-The header
-.I <regex.h>
-declares two structure types,
-.I regex_t
-and
-.IR regmatch_t ,
-the former for compiled internal forms and the latter for match reporting.
-It also declares the four functions,
-a type
-.IR regoff_t ,
-and a number of constants with names starting with ``REG_''.
-.PP
-.I Regcomp
-compiles the regular expression contained in the
-.I pattern
-string,
-subject to the flags in
-.IR cflags ,
-and places the results in the
-.I regex_t
-structure pointed to by
-.IR preg .
-.I Cflags
-is the bitwise OR of zero or more of the following flags:
-.IP REG_EXTENDED \w'REG_EXTENDED'u+2n
-Compile modern (``extended'') REs,
-rather than the obsolete (``basic'') REs that
-are the default.
-.IP REG_BASIC
-This is a synonym for 0,
-provided as a counterpart to REG_EXTENDED to improve readability.
-.IP REG_NOSPEC
-Compile with recognition of all special characters turned off.
-All characters are thus considered ordinary,
-so the ``RE'' is a literal string.
-This is an extension,
-compatible with but not specified by POSIX 1003.2,
-and should be used with
-caution in software intended to be portable to other systems.
-REG_EXTENDED and REG_NOSPEC may not be used
-in the same call to
-.IR regcomp .
-.IP REG_ICASE
-Compile for matching that ignores upper/lower case distinctions.
-See
-.ZR .
-.IP REG_NOSUB
-Compile for matching that need only report success or failure,
-not what was matched.
-.IP REG_NEWLINE
-Compile for newline-sensitive matching.
-By default, newline is a completely ordinary character with no special
-meaning in either REs or strings.
-With this flag,
-`[^' bracket expressions and `.' never match newline,
-a `^' anchor matches the null string after any newline in the string
-in addition to its normal function,
-and the `$' anchor matches the null string before any newline in the
-string in addition to its normal function.
-.IP REG_PEND
-The regular expression ends,
-not at the first NUL,
-but just before the character pointed to by the
-.I re_endp
-member of the structure pointed to by
-.IR preg .
-The
-.I re_endp
-member is of type
-.IR const\ char\ * .
-This flag permits inclusion of NULs in the RE;
-they are considered ordinary characters.
-This is an extension,
-compatible with but not specified by POSIX 1003.2,
-and should be used with
-caution in software intended to be portable to other systems.
-.PP
-When successful,
-.I regcomp
-returns 0 and fills in the structure pointed to by
-.IR preg .
-One member of that structure
-(other than
-.IR re_endp )
-is publicized:
-.IR re_nsub ,
-of type
-.IR size_t ,
-contains the number of parenthesized subexpressions within the RE
-(except that the value of this member is undefined if the
-REG_NOSUB flag was used).
-If
-.I regcomp
-fails, it returns a non-zero error code;
-see DIAGNOSTICS.
-.PP
-.I Regexec
-matches the compiled RE pointed to by
-.I preg
-against the
-.IR string ,
-subject to the flags in
-.IR eflags ,
-and reports results using
-.IR nmatch ,
-.IR pmatch ,
-and the returned value.
-The RE must have been compiled by a previous invocation of
-.IR regcomp .
-The compiled form is not altered during execution of
-.IR regexec ,
-so a single compiled RE can be used simultaneously by multiple threads.
-.PP
-By default,
-the NUL-terminated string pointed to by
-.I string
-is considered to be the text of an entire line, minus any terminating
-newline.
-The
-.I eflags
-argument is the bitwise OR of zero or more of the following flags:
-.IP REG_NOTBOL \w'REG_STARTEND'u+2n
-The first character of
-the string
-is not the beginning of a line, so the `^' anchor should not match before it.
-This does not affect the behavior of newlines under REG_NEWLINE.
-.IP REG_NOTEOL
-The NUL terminating
-the string
-does not end a line, so the `$' anchor should not match before it.
-This does not affect the behavior of newlines under REG_NEWLINE.
-.IP REG_STARTEND
-The string is considered to start at
-\fIstring\fR\ + \fIpmatch\fR[0].\fIrm_so\fR
-and to have a terminating NUL located at
-\fIstring\fR\ + \fIpmatch\fR[0].\fIrm_eo\fR
-(there need not actually be a NUL at that location),
-regardless of the value of
-.IR nmatch .
-See below for the definition of
-.IR pmatch
-and
-.IR nmatch .
-This is an extension,
-compatible with but not specified by POSIX 1003.2,
-and should be used with
-caution in software intended to be portable to other systems.
-Note that a non-zero \fIrm_so\fR does not imply REG_NOTBOL;
-REG_STARTEND affects only the location of the string,
-not how it is matched.
-.PP
-See
-.ZR
-for a discussion of what is matched in situations where an RE or a
-portion thereof could match any of several substrings of
-.IR string .
-.PP
-Normally,
-.I regexec
-returns 0 for success and the non-zero code REG_NOMATCH for failure.
-Other non-zero error codes may be returned in exceptional situations;
-see DIAGNOSTICS.
-.PP
-If REG_NOSUB was specified in the compilation of the RE,
-or if
-.I nmatch
-is 0,
-.I regexec
-ignores the
-.I pmatch
-argument (but see below for the case where REG_STARTEND is specified).
-Otherwise,
-.I pmatch
-points to an array of
-.I nmatch
-structures of type
-.IR regmatch_t .
-Such a structure has at least the members
-.I rm_so
-and
-.IR rm_eo ,
-both of type
-.I regoff_t
-(a signed arithmetic type at least as large as an
-.I off_t
-and a
-.IR ssize_t ),
-containing respectively the offset of the first character of a substring
-and the offset of the first character after the end of the substring.
-Offsets are measured from the beginning of the
-.I string
-argument given to
-.IR regexec .
-An empty substring is denoted by equal offsets,
-both indicating the character following the empty substring.
-.PP
-The 0th member of the
-.I pmatch
-array is filled in to indicate what substring of
-.I string
-was matched by the entire RE.
-Remaining members report what substring was matched by parenthesized
-subexpressions within the RE;
-member
-.I i
-reports subexpression
-.IR i ,
-with subexpressions counted (starting at 1) by the order of their opening
-parentheses in the RE, left to right.
-Unused entries in the array\(emcorresponding either to subexpressions that
-did not participate in the match at all, or to subexpressions that do not
-exist in the RE (that is, \fIi\fR\ > \fIpreg\fR\->\fIre_nsub\fR)\(emhave both
-.I rm_so
-and
-.I rm_eo
-set to \-1.
-If a subexpression participated in the match several times,
-the reported substring is the last one it matched.
-(Note, as an example in particular, that when the RE `(b*)+' matches `bbb',
-the parenthesized subexpression matches each of the three `b's and then
-an infinite number of empty strings following the last `b',
-so the reported substring is one of the empties.)
-.PP
-If REG_STARTEND is specified,
-.I pmatch
-must point to at least one
-.I regmatch_t
-(even if
-.I nmatch
-is 0 or REG_NOSUB was specified),
-to hold the input offsets for REG_STARTEND.
-Use for output is still entirely controlled by
-.IR nmatch ;
-if
-.I nmatch
-is 0 or REG_NOSUB was specified,
-the value of
-.IR pmatch [0]
-will not be changed by a successful
-.IR regexec .
-.PP
-.I Regerror
-maps a non-zero
-.I errcode
-from either
-.I regcomp
-or
-.I regexec
-to a human-readable, printable message.
-If
-.I preg
-is non-NULL,
-the error code should have arisen from use of
-the
-.I regex_t
-pointed to by
-.IR preg ,
-and if the error code came from
-.IR regcomp ,
-it should have been the result from the most recent
-.I regcomp
-using that
-.IR regex_t .
-.RI ( Regerror
-may be able to supply a more detailed message using information
-from the
-.IR regex_t .)
-.I Regerror
-places the NUL-terminated message into the buffer pointed to by
-.IR errbuf ,
-limiting the length (including the NUL) to at most
-.I errbuf_size
-bytes.
-If the whole message won't fit,
-as much of it as will fit before the terminating NUL is supplied.
-In any case,
-the returned value is the size of buffer needed to hold the whole
-message (including terminating NUL).
-If
-.I errbuf_size
-is 0,
-.I errbuf
-is ignored but the return value is still correct.
-.PP
-If the
-.I errcode
-given to
-.I regerror
-is first ORed with REG_ITOA,
-the ``message'' that results is the printable name of the error code,
-e.g. ``REG_NOMATCH'',
-rather than an explanation thereof.
-If
-.I errcode
-is REG_ATOI,
-then
-.I preg
-shall be non-NULL and the
-.I re_endp
-member of the structure it points to
-must point to the printable name of an error code;
-in this case, the result in
-.I errbuf
-is the decimal digits of
-the numeric value of the error code
-(0 if the name is not recognized).
-REG_ITOA and REG_ATOI are intended primarily as debugging facilities;
-they are extensions,
-compatible with but not specified by POSIX 1003.2,
-and should be used with
-caution in software intended to be portable to other systems.
-Be warned also that they are considered experimental and changes are possible.
-.PP
-.I Regfree
-frees any dynamically-allocated storage associated with the compiled RE
-pointed to by
-.IR preg .
-The remaining
-.I regex_t
-is no longer a valid compiled RE
-and the effect of supplying it to
-.I regexec
-or
-.I regerror
-is undefined.
-.PP
-None of these functions references global variables except for tables
-of constants;
-all are safe for use from multiple threads if the arguments are safe.
-.SH IMPLEMENTATION CHOICES
-There are a number of decisions that 1003.2 leaves up to the implementor,
-either by explicitly saying ``undefined'' or by virtue of them being
-forbidden by the RE grammar.
-This implementation treats them as follows.
-.PP
-See
-.ZR
-for a discussion of the definition of case-independent matching.
-.PP
-There is no particular limit on the length of REs,
-except insofar as memory is limited.
-Memory usage is approximately linear in RE size, and largely insensitive
-to RE complexity, except for bounded repetitions.
-See BUGS for one short RE using them
-that will run almost any system out of memory.
-.PP
-A backslashed character other than one specifically given a magic meaning
-by 1003.2 (such magic meanings occur only in obsolete [``basic''] REs)
-is taken as an ordinary character.
-.PP
-Any unmatched [ is a REG_EBRACK error.
-.PP
-Equivalence classes cannot begin or end bracket-expression ranges.
-The endpoint of one range cannot begin another.
-.PP
-RE_DUP_MAX, the limit on repetition counts in bounded repetitions, is 255.
-.PP
-A repetition operator (?, *, +, or bounds) cannot follow another
-repetition operator.
-A repetition operator cannot begin an expression or subexpression
-or follow `^' or `|'.
-.PP
-`|' cannot appear first or last in a (sub)expression or after another `|',
-i.e. an operand of `|' cannot be an empty subexpression.
-An empty parenthesized subexpression, `()', is legal and matches an
-empty (sub)string.
-An empty string is not a legal RE.
-.PP
-A `{' followed by a digit is considered the beginning of bounds for a
-bounded repetition, which must then follow the syntax for bounds.
-A `{' \fInot\fR followed by a digit is considered an ordinary character.
-.PP
-`^' and `$' beginning and ending subexpressions in obsolete (``basic'')
-REs are anchors, not ordinary characters.
-.SH SEE ALSO
-grep(1), regex(7)
-.PP
-POSIX 1003.2, sections 2.8 (Regular Expression Notation)
-and
-B.5 (C Binding for Regular Expression Matching).
-.SH DIAGNOSTICS
-Non-zero error codes from
-.I regcomp
-and
-.I regexec
-include the following:
-.PP
-.nf
-.ta \w'REG_ECOLLATE'u+3n
-REG_NOMATCH regexec() failed to match
-REG_BADPAT invalid regular expression
-REG_ECOLLATE invalid collating element
-REG_ECTYPE invalid character class
-REG_EESCAPE \e applied to unescapable character
-REG_ESUBREG invalid backreference number
-REG_EBRACK brackets [ ] not balanced
-REG_EPAREN parentheses ( ) not balanced
-REG_EBRACE braces { } not balanced
-REG_BADBR invalid repetition count(s) in { }
-REG_ERANGE invalid character range in [ ]
-REG_ESPACE ran out of memory
-REG_BADRPT ?, *, or + operand invalid
-REG_EMPTY empty (sub)expression
-REG_ASSERT ``can't happen''\(emyou found a bug
-REG_INVARG invalid argument, e.g. negative-length string
-.fi
-.SH HISTORY
-Written by Henry Spencer at University of Toronto,
-henry@zoo.toronto.edu.
-.SH BUGS
-This is an alpha release with known defects.
-Please report problems.
-.PP
-There is one known functionality bug.
-The implementation of internationalization is incomplete:
-the locale is always assumed to be the default one of 1003.2,
-and only the collating elements etc. of that locale are available.
-.PP
-The back-reference code is subtle and doubts linger about its correctness
-in complex cases.
-.PP
-.I Regexec
-performance is poor.
-This will improve with later releases.
-.I Nmatch
-exceeding 0 is expensive;
-.I nmatch
-exceeding 1 is worse.
-.I Regexec
-is largely insensitive to RE complexity \fIexcept\fR that back
-references are massively expensive.
-RE length does matter; in particular, there is a strong speed bonus
-for keeping RE length under about 30 characters,
-with most special characters counting roughly double.
-.PP
-.I Regcomp
-implements bounded repetitions by macro expansion,
-which is costly in time and space if counts are large
-or bounded repetitions are nested.
-An RE like, say,
-`((((a{1,100}){1,100}){1,100}){1,100}){1,100}'
-will (eventually) run almost any existing machine out of swap space.
-.PP
-There are suspected problems with response to obscure error conditions.
-Notably,
-certain kinds of internal overflow,
-produced only by truly enormous REs or by multiply nested bounded repetitions,
-are probably not handled well.
-.PP
-Due to a mistake in 1003.2, things like `a)b' are legal REs because `)' is
-a special character only in the presence of a previous unmatched `('.
-This can't be fixed until the spec is fixed.
-.PP
-The standard's definition of back references is vague.
-For example, does
-`a\e(\e(b\e)*\e2\e)*d' match `abbbd'?
-Until the standard is clarified,
-behavior in such cases should not be relied on.
-.PP
-The implementation of word-boundary matching is a bit of a kludge,
-and bugs may lurk in combinations of word-boundary matching and anchoring.
diff --git a/ext/ereg/regex/regex.7 b/ext/ereg/regex/regex.7
deleted file mode 100644
index d89012bda1..0000000000
--- a/ext/ereg/regex/regex.7
+++ /dev/null
@@ -1,233 +0,0 @@
-.TH REGEX 7 "7 Feb 1994"
-.BY "Henry Spencer"
-.SH NAME
-regex \- POSIX 1003.2 regular expressions
-.SH DESCRIPTION
-Regular expressions (``RE''s),
-as defined in POSIX 1003.2, come in two forms:
-modern REs (roughly those of
-.IR egrep ;
-1003.2 calls these ``extended'' REs)
-and obsolete REs (roughly those of
-.IR ed ;
-1003.2 ``basic'' REs).
-Obsolete REs mostly exist for backward compatibility in some old programs;
-they will be discussed at the end.
-1003.2 leaves some aspects of RE syntax and semantics open;
-`\(dg' marks decisions on these aspects that
-may not be fully portable to other 1003.2 implementations.
-.PP
-A (modern) RE is one\(dg or more non-empty\(dg \fIbranches\fR,
-separated by `|'.
-It matches anything that matches one of the branches.
-.PP
-A branch is one\(dg or more \fIpieces\fR, concatenated.
-It matches a match for the first, followed by a match for the second, etc.
-.PP
-A piece is an \fIatom\fR possibly followed
-by a single\(dg `*', `+', `?', or \fIbound\fR.
-An atom followed by `*' matches a sequence of 0 or more matches of the atom.
-An atom followed by `+' matches a sequence of 1 or more matches of the atom.
-An atom followed by `?' matches a sequence of 0 or 1 matches of the atom.
-.PP
-A \fIbound\fR is `{' followed by an unsigned decimal integer,
-possibly followed by `,'
-possibly followed by another unsigned decimal integer,
-always followed by `}'.
-The integers must lie between 0 and RE_DUP_MAX (255\(dg) inclusive,
-and if there are two of them, the first may not exceed the second.
-An atom followed by a bound containing one integer \fIi\fR
-and no comma matches
-a sequence of exactly \fIi\fR matches of the atom.
-An atom followed by a bound
-containing one integer \fIi\fR and a comma matches
-a sequence of \fIi\fR or more matches of the atom.
-An atom followed by a bound
-containing two integers \fIi\fR and \fIj\fR matches
-a sequence of \fIi\fR through \fIj\fR (inclusive) matches of the atom.
-.PP
-An atom is a regular expression enclosed in `()' (matching a match for the
-regular expression),
-an empty set of `()' (matching the null string)\(dg,
-a \fIbracket expression\fR (see below), `.'
-(matching any single character), `^' (matching the null string at the
-beginning of a line), `$' (matching the null string at the
-end of a line), a `\e' followed by one of the characters
-`^.[$()|*+?{\e'
-(matching that character taken as an ordinary character),
-a `\e' followed by any other character\(dg
-(matching that character taken as an ordinary character,
-as if the `\e' had not been present\(dg),
-or a single character with no other significance (matching that character).
-A `{' followed by a character other than a digit is an ordinary
-character, not the beginning of a bound\(dg.
-It is illegal to end an RE with `\e'.
-.PP
-A \fIbracket expression\fR is a list of characters enclosed in `[]'.
-It normally matches any single character from the list (but see below).
-If the list begins with `^',
-it matches any single character
-(but see below) \fInot\fR from the rest of the list.
-If two characters in the list are separated by `\-', this is shorthand
-for the full \fIrange\fR of characters between those two (inclusive) in the
-collating sequence,
-e.g. `[0-9]' in ASCII matches any decimal digit.
-It is illegal\(dg for two ranges to share an
-endpoint, e.g. `a-c-e'.
-Ranges are very collating-sequence-dependent,
-and portable programs should avoid relying on them.
-.PP
-To include a literal `]' in the list, make it the first character
-(following a possible `^').
-To include a literal `\-', make it the first or last character,
-or the second endpoint of a range.
-To use a literal `\-' as the first endpoint of a range,
-enclose it in `[.' and `.]' to make it a collating element (see below).
-With the exception of these and some combinations using `[' (see next
-paragraphs), all other special characters, including `\e', lose their
-special significance within a bracket expression.
-.PP
-Within a bracket expression, a collating element (a character,
-a multi-character sequence that collates as if it were a single character,
-or a collating-sequence name for either)
-enclosed in `[.' and `.]' stands for the
-sequence of characters of that collating element.
-The sequence is a single element of the bracket expression's list.
-A bracket expression containing a multi-character collating element
-can thus match more than one character,
-e.g. if the collating sequence includes a `ch' collating element,
-then the RE `[[.ch.]]*c' matches the first five characters
-of `chchcc'.
-.PP
-Within a bracket expression, a collating element enclosed in `[=' and
-`=]' is an equivalence class, standing for the sequences of characters
-of all collating elements equivalent to that one, including itself.
-(If there are no other equivalent collating elements,
-the treatment is as if the enclosing delimiters were `[.' and `.]'.)
-For example, if o and \o'o^' are the members of an equivalence class,
-then `[[=o=]]', `[[=\o'o^'=]]', and `[o\o'o^']' are all synonymous.
-An equivalence class may not\(dg be an endpoint
-of a range.
-.PP
-Within a bracket expression, the name of a \fIcharacter class\fR enclosed
-in `[:' and `:]' stands for the list of all characters belonging to that
-class.
-Standard character class names are:
-.PP
-.RS
-.nf
-.ta 3c 6c 9c
-alnum digit punct
-alpha graph space
-blank lower upper
-cntrl print xdigit
-.fi
-.RE
-.PP
-These stand for the character classes defined in
-.IR ctype (3).
-A locale may provide others.
-A character class may not be used as an endpoint of a range.
-.PP
-There are two special cases\(dg of bracket expressions:
-the bracket expressions `[[:<:]]' and `[[:>:]]' match the null string at
-the beginning and end of a word respectively.
-A word is defined as a sequence of
-word characters
-which is neither preceded nor followed by
-word characters.
-A word character is an
-.I alnum
-character (as defined by
-.IR ctype (3))
-or an underscore.
-This is an extension,
-compatible with but not specified by POSIX 1003.2,
-and should be used with
-caution in software intended to be portable to other systems.
-.PP
-In the event that an RE could match more than one substring of a given
-string,
-the RE matches the one starting earliest in the string.
-If the RE could match more than one substring starting at that point,
-it matches the longest.
-Subexpressions also match the longest possible substrings, subject to
-the constraint that the whole match be as long as possible,
-with subexpressions starting earlier in the RE taking priority over
-ones starting later.
-Note that higher-level subexpressions thus take priority over
-their lower-level component subexpressions.
-.PP
-Match lengths are measured in characters, not collating elements.
-A null string is considered longer than no match at all.
-For example,
-`bb*' matches the three middle characters of `abbbc',
-`(wee|week)(knights|nights)' matches all ten characters of `weeknights',
-when `(.*).*' is matched against `abc' the parenthesized subexpression
-matches all three characters, and
-when `(a*)*' is matched against `bc' both the whole RE and the parenthesized
-subexpression match the null string.
-.PP
-If case-independent matching is specified,
-the effect is much as if all case distinctions had vanished from the
-alphabet.
-When an alphabetic that exists in multiple cases appears as an
-ordinary character outside a bracket expression, it is effectively
-transformed into a bracket expression containing both cases,
-e.g. `x' becomes `[xX]'.
-When it appears inside a bracket expression, all case counterparts
-of it are added to the bracket expression, so that (e.g.) `[x]'
-becomes `[xX]' and `[^x]' becomes `[^xX]'.
-.PP
-No particular limit is imposed on the length of REs\(dg.
-Programs intended to be portable should not employ REs longer
-than 256 bytes,
-as an implementation can refuse to accept such REs and remain
-POSIX-compliant.
-.PP
-Obsolete (``basic'') regular expressions differ in several respects.
-`|', `+', and `?' are ordinary characters and there is no equivalent
-for their functionality.
-The delimiters for bounds are `\e{' and `\e}',
-with `{' and `}' by themselves ordinary characters.
-The parentheses for nested subexpressions are `\e(' and `\e)',
-with `(' and `)' by themselves ordinary characters.
-`^' is an ordinary character except at the beginning of the
-RE or\(dg the beginning of a parenthesized subexpression,
-`$' is an ordinary character except at the end of the
-RE or\(dg the end of a parenthesized subexpression,
-and `*' is an ordinary character if it appears at the beginning of the
-RE or the beginning of a parenthesized subexpression
-(after a possible leading `^').
-Finally, there is one new type of atom, a \fIback reference\fR:
-`\e' followed by a non-zero decimal digit \fId\fR
-matches the same sequence of characters
-matched by the \fId\fRth parenthesized subexpression
-(numbering subexpressions by the positions of their opening parentheses,
-left to right),
-so that (e.g.) `\e([bc]\e)\e1' matches `bb' or `cc' but not `bc'.
-.SH SEE ALSO
-regex(3)
-.PP
-POSIX 1003.2, section 2.8 (Regular Expression Notation).
-.SH BUGS
-Having two kinds of REs is a botch.
-.PP
-The current 1003.2 spec says that `)' is an ordinary character in
-the absence of an unmatched `(';
-this was an unintentional result of a wording error,
-and change is likely.
-Avoid relying on it.
-.PP
-Back references are a dreadful botch,
-posing major problems for efficient implementations.
-They are also somewhat vaguely defined
-(does
-`a\e(\e(b\e)*\e2\e)*d' match `abbbd'?).
-Avoid using them.
-.PP
-1003.2's specification of case-independent matching is vague.
-The ``one case implies all cases'' definition given above
-is current consensus among implementors as to the right interpretation.
-.PP
-The syntax for word boundaries is incredibly ugly.
diff --git a/ext/ereg/regex/regex.dsp b/ext/ereg/regex/regex.dsp
deleted file mode 100644
index e8f1ad4299..0000000000
--- a/ext/ereg/regex/regex.dsp
+++ /dev/null
@@ -1,106 +0,0 @@
-# Microsoft Developer Studio Project File - Name="regex" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 5.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=regex - Win32 Debug
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "regex.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "regex.mak" CFG="regex - Win32 Debug"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "regex - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "regex - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE
-
-# Begin Project
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "regex - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release"
-# PROP Intermediate_Dir "Release"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c
-# ADD CPP /nologo /MT /W3 /GX /O2 /I "." /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o NUL /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o NUL /win32
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /machine:I386
-# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /machine:I386
-
-!ELSEIF "$(CFG)" == "regex - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug"
-# PROP Intermediate_Dir "Debug"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c
-# ADD CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /I "." /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c
-# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o NUL /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o NUL /win32
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /debug /machine:I386 /pdbtype:sept
-
-!ENDIF
-
-# Begin Target
-
-# Name "regex - Win32 Release"
-# Name "regex - Win32 Debug"
-# Begin Source File
-
-SOURCE=.\regcomp.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\regerror.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\regexec.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\regfree.c
-# End Source File
-# End Target
-# End Project
diff --git a/ext/ereg/regex/regex.dsw b/ext/ereg/regex/regex.dsw
deleted file mode 100644
index 7b7df8126c..0000000000
--- a/ext/ereg/regex/regex.dsw
+++ /dev/null
@@ -1,29 +0,0 @@
-Microsoft Developer Studio Workspace File, Format Version 5.00
-# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE!
-
-###############################################################################
-
-Project: "regex"=.\regex.dsp - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-}}}
-
-###############################################################################
-
-Global:
-
-Package=<5>
-{{{
-}}}
-
-Package=<3>
-{{{
-}}}
-
-###############################################################################
-
diff --git a/ext/ereg/regex/regex.h b/ext/ereg/regex/regex.h
deleted file mode 100644
index b39c5e178c..0000000000
--- a/ext/ereg/regex/regex.h
+++ /dev/null
@@ -1,83 +0,0 @@
-#ifndef _HSREGEX_H_
-#define _HSREGEX_H_
-#ifndef _HSREGEX_H
-#define _HSREGEX_H /* never again */
-/* ========= begin header generated by ././mkh ========= */
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/* === regex2.h === */
-#ifdef WIN32
-#define API_EXPORT(type) __declspec(dllexport) type __stdcall
-#else
-#define API_EXPORT(type) type
-#endif
-
-typedef off_t regoff_t;
-typedef struct {
- int re_magic;
- size_t re_nsub; /* number of parenthesized subexpressions */
- const char *re_endp; /* end pointer for REG_PEND */
- struct re_guts *re_g; /* none of your business :-) */
-} regex_t;
-typedef struct {
- regoff_t rm_so; /* start of match */
- regoff_t rm_eo; /* end of match */
-} regmatch_t;
-
-
-/* === regcomp.c === */
-API_EXPORT(int) regcomp(regex_t *, const char *, int);
-#define REG_BASIC 0000
-#define REG_EXTENDED 0001
-#define REG_ICASE 0002
-#define REG_NOSUB 0004
-#define REG_NEWLINE 0010
-#define REG_NOSPEC 0020
-#define REG_PEND 0040
-#define REG_DUMP 0200
-
-
-/* === regerror.c === */
-#define REG_OKAY 0
-#define REG_NOMATCH 1
-#define REG_BADPAT 2
-#define REG_ECOLLATE 3
-#define REG_ECTYPE 4
-#define REG_EESCAPE 5
-#define REG_ESUBREG 6
-#define REG_EBRACK 7
-#define REG_EPAREN 8
-#define REG_EBRACE 9
-#define REG_BADBR 10
-#define REG_ERANGE 11
-#define REG_ESPACE 12
-#define REG_BADRPT 13
-#define REG_EMPTY 14
-#define REG_ASSERT 15
-#define REG_INVARG 16
-#define REG_ATOI 255 /* convert name to number (!) */
-#define REG_ITOA 0400 /* convert number to name (!) */
-API_EXPORT(size_t) regerror(int, const regex_t *, char *, size_t);
-
-
-/* === regexec.c === */
-API_EXPORT(int) regexec(const regex_t *, const char *, size_t, regmatch_t [], int);
-#define REG_NOTBOL 00001
-#define REG_NOTEOL 00002
-#define REG_STARTEND 00004
-#define REG_TRACE 00400 /* tracing of execution */
-#define REG_LARGE 01000 /* force large representation */
-#define REG_BACKR 02000 /* force use of backref code */
-
-
-/* === regfree.c === */
-API_EXPORT(void) regfree(regex_t *);
-
-#ifdef __cplusplus
-}
-#endif
-/* ========= end header generated by ././mkh ========= */
-#endif
-#endif
diff --git a/ext/ereg/regex/regex.mak b/ext/ereg/regex/regex.mak
deleted file mode 100644
index b87ded340b..0000000000
--- a/ext/ereg/regex/regex.mak
+++ /dev/null
@@ -1,304 +0,0 @@
-# Microsoft Developer Studio Generated NMAKE File, Based on regex.dsp
-!IF "$(CFG)" == ""
-CFG=regex - Win32 Release
-!MESSAGE No configuration specified. Defaulting to regex - Win32 Release.
-!ENDIF
-
-!IF "$(CFG)" != "regex - Win32 Release" && "$(CFG)" != "regex - Win32 Debug"
-!MESSAGE Invalid configuration "$(CFG)" specified.
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "regex.mak" CFG="regex - Win32 Release"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "regex - Win32 Release" (based on "Win32 (x86) Static Library")
-!MESSAGE "regex - Win32 Debug" (based on "Win32 (x86) Static Library")
-!MESSAGE
-!ERROR An invalid configuration is specified.
-!ENDIF
-
-!IF "$(OS)" == "Windows_NT"
-NULL=
-!ELSE
-NULL=nul
-!ENDIF
-
-CPP=cl.exe
-
-!IF "$(CFG)" == "regex - Win32 Release"
-
-OUTDIR=.\Release
-INTDIR=.\Release
-# Begin Custom Macros
-OutDir=.\.\Release
-# End Custom Macros
-
-!IF "$(RECURSE)" == "0"
-
-ALL : "$(OUTDIR)\regex.lib"
-
-!ELSE
-
-ALL : "$(OUTDIR)\regex.lib"
-
-!ENDIF
-
-CLEAN :
- -@erase "$(INTDIR)\regcomp.obj"
- -@erase "$(INTDIR)\regerror.obj"
- -@erase "$(INTDIR)\regexec.obj"
- -@erase "$(INTDIR)\regfree.obj"
- -@erase "$(INTDIR)\vc50.idb"
- -@erase "$(OUTDIR)\regex.lib"
-
-"$(OUTDIR)" :
- if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
-
-CPP_PROJ=/nologo /MD /W3 /GX /O2 /I "." /D "WIN32" /D "NDEBUG" /D "_WINDOWS"\
- /Fp"$(INTDIR)\regex.pch" /YX /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /c
-CPP_OBJS=.\Release/
-CPP_SBRS=.
-BSC32=bscmake.exe
-BSC32_FLAGS=/nologo /o"$(OUTDIR)\regex.bsc"
-BSC32_SBRS= \
-
-LIB32=link.exe -lib
-LIB32_FLAGS=/nologo /out:"$(OUTDIR)\regex.lib"
-LIB32_OBJS= \
- "$(INTDIR)\regcomp.obj" \
- "$(INTDIR)\regerror.obj" \
- "$(INTDIR)\regexec.obj" \
- "$(INTDIR)\regfree.obj"
-
-"$(OUTDIR)\regex.lib" : "$(OUTDIR)" $(DEF_FILE) $(LIB32_OBJS)
- $(LIB32) @<<
- $(LIB32_FLAGS) $(DEF_FLAGS) $(LIB32_OBJS)
-<<
-
-!ELSEIF "$(CFG)" == "regex - Win32 Debug"
-
-OUTDIR=.\Debug
-INTDIR=.\Debug
-# Begin Custom Macros
-OutDir=.\.\Debug
-# End Custom Macros
-
-!IF "$(RECURSE)" == "0"
-
-ALL : "$(OUTDIR)\regex.lib" "$(OUTDIR)\regex.bsc"
-
-!ELSE
-
-ALL : "$(OUTDIR)\regex.lib" "$(OUTDIR)\regex.bsc"
-
-!ENDIF
-
-CLEAN :
- -@erase "$(INTDIR)\regcomp.obj"
- -@erase "$(INTDIR)\regcomp.sbr"
- -@erase "$(INTDIR)\regerror.obj"
- -@erase "$(INTDIR)\regerror.sbr"
- -@erase "$(INTDIR)\regexec.obj"
- -@erase "$(INTDIR)\regexec.sbr"
- -@erase "$(INTDIR)\regfree.obj"
- -@erase "$(INTDIR)\regfree.sbr"
- -@erase "$(INTDIR)\vc50.idb"
- -@erase "$(OUTDIR)\regex.bsc"
- -@erase "$(OUTDIR)\regex.lib"
-
-"$(OUTDIR)" :
- if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
-
-CPP_PROJ=/nologo /MDd /W3 /GX /Z7 /Od /I "." /D "WIN32" /D "_DEBUG" /D\
- "_WINDOWS" /FR"$(INTDIR)\\" /Fp"$(INTDIR)\regex.pch" /YX /Fo"$(INTDIR)\\"\
- /Fd"$(INTDIR)\\" /FD /c
-CPP_OBJS=.\Debug/
-CPP_SBRS=.\Debug/
-BSC32=bscmake.exe
-BSC32_FLAGS=/nologo /o"$(OUTDIR)\regex.bsc"
-BSC32_SBRS= \
- "$(INTDIR)\regcomp.sbr" \
- "$(INTDIR)\regerror.sbr" \
- "$(INTDIR)\regexec.sbr" \
- "$(INTDIR)\regfree.sbr"
-
-"$(OUTDIR)\regex.bsc" : "$(OUTDIR)" $(BSC32_SBRS)
- $(BSC32) @<<
- $(BSC32_FLAGS) $(BSC32_SBRS)
-<<
-
-LIB32=link.exe -lib
-LIB32_FLAGS=/nologo /out:"$(OUTDIR)\regex.lib"
-LIB32_OBJS= \
- "$(INTDIR)\regcomp.obj" \
- "$(INTDIR)\regerror.obj" \
- "$(INTDIR)\regexec.obj" \
- "$(INTDIR)\regfree.obj"
-
-"$(OUTDIR)\regex.lib" : "$(OUTDIR)" $(DEF_FILE) $(LIB32_OBJS)
- $(LIB32) @<<
- $(LIB32_FLAGS) $(DEF_FLAGS) $(LIB32_OBJS)
-<<
-
-!ENDIF
-
-.c{$(CPP_OBJS)}.obj::
- $(CPP) @<<
- $(CPP_PROJ) $<
-<<
-
-.cpp{$(CPP_OBJS)}.obj::
- $(CPP) @<<
- $(CPP_PROJ) $<
-<<
-
-.cxx{$(CPP_OBJS)}.obj::
- $(CPP) @<<
- $(CPP_PROJ) $<
-<<
-
-.c{$(CPP_SBRS)}.sbr::
- $(CPP) @<<
- $(CPP_PROJ) $<
-<<
-
-.cpp{$(CPP_SBRS)}.sbr::
- $(CPP) @<<
- $(CPP_PROJ) $<
-<<
-
-.cxx{$(CPP_SBRS)}.sbr::
- $(CPP) @<<
- $(CPP_PROJ) $<
-<<
-
-
-!IF "$(CFG)" == "regex - Win32 Release" || "$(CFG)" == "regex - Win32 Debug"
-SOURCE=.\regcomp.c
-
-!IF "$(CFG)" == "regex - Win32 Release"
-
-DEP_CPP_REGCO=\
- ".\cclass.h"\
- ".\cname.h"\
- ".\regcomp.ih"\
- ".\regex.h"\
- ".\regex2.h"\
- ".\utils.h"\
-
-
-"$(INTDIR)\regcomp.obj" : $(SOURCE) $(DEP_CPP_REGCO) "$(INTDIR)"
-
-
-!ELSEIF "$(CFG)" == "regex - Win32 Debug"
-
-DEP_CPP_REGCO=\
- ".\cclass.h"\
- ".\cname.h"\
- ".\regcomp.ih"\
- ".\regex.h"\
- ".\regex2.h"\
- ".\utils.h"\
- {$(INCLUDE)}"sys\types.h"\
-
-
-"$(INTDIR)\regcomp.obj" "$(INTDIR)\regcomp.sbr" : $(SOURCE) $(DEP_CPP_REGCO)\
- "$(INTDIR)"
-
-
-!ENDIF
-
-SOURCE=.\regerror.c
-
-!IF "$(CFG)" == "regex - Win32 Release"
-
-DEP_CPP_REGER=\
- ".\regerror.ih"\
- ".\regex.h"\
- ".\utils.h"\
-
-
-"$(INTDIR)\regerror.obj" : $(SOURCE) $(DEP_CPP_REGER) "$(INTDIR)"
-
-
-!ELSEIF "$(CFG)" == "regex - Win32 Debug"
-
-DEP_CPP_REGER=\
- ".\regerror.ih"\
- ".\regex.h"\
- ".\utils.h"\
- {$(INCLUDE)}"sys\types.h"\
-
-
-"$(INTDIR)\regerror.obj" "$(INTDIR)\regerror.sbr" : $(SOURCE) $(DEP_CPP_REGER)\
- "$(INTDIR)"
-
-
-!ENDIF
-
-SOURCE=.\regexec.c
-
-!IF "$(CFG)" == "regex - Win32 Release"
-
-DEP_CPP_REGEX=\
- ".\engine.c"\
- ".\engine.ih"\
- ".\regex.h"\
- ".\regex2.h"\
- ".\utils.h"\
-
-
-"$(INTDIR)\regexec.obj" : $(SOURCE) $(DEP_CPP_REGEX) "$(INTDIR)"
-
-
-!ELSEIF "$(CFG)" == "regex - Win32 Debug"
-
-DEP_CPP_REGEX=\
- ".\engine.c"\
- ".\engine.ih"\
- ".\regex.h"\
- ".\regex2.h"\
- ".\utils.h"\
- {$(INCLUDE)}"sys\types.h"\
-
-
-"$(INTDIR)\regexec.obj" "$(INTDIR)\regexec.sbr" : $(SOURCE) $(DEP_CPP_REGEX)\
- "$(INTDIR)"
-
-
-!ENDIF
-
-SOURCE=.\regfree.c
-
-!IF "$(CFG)" == "regex - Win32 Release"
-
-DEP_CPP_REGFR=\
- ".\regex.h"\
- ".\regex2.h"\
- ".\utils.h"\
-
-
-"$(INTDIR)\regfree.obj" : $(SOURCE) $(DEP_CPP_REGFR) "$(INTDIR)"
-
-
-!ELSEIF "$(CFG)" == "regex - Win32 Debug"
-
-DEP_CPP_REGFR=\
- ".\regex.h"\
- ".\regex2.h"\
- ".\utils.h"\
- {$(INCLUDE)}"sys\types.h"\
-
-
-"$(INTDIR)\regfree.obj" "$(INTDIR)\regfree.sbr" : $(SOURCE) $(DEP_CPP_REGFR)\
- "$(INTDIR)"
-
-
-!ENDIF
-
-SOURCE=.\engine.c
-
-!ENDIF
-
diff --git a/ext/ereg/regex/regex2.h b/ext/ereg/regex/regex2.h
deleted file mode 100644
index 4996f96ecd..0000000000
--- a/ext/ereg/regex/regex2.h
+++ /dev/null
@@ -1,140 +0,0 @@
-/*
- * First, the stuff that ends up in the outside-world include file
- = #ifdef WIN32
- = #define API_EXPORT(type) __declspec(dllexport) type __stdcall
- = #else
- = #define API_EXPORT(type) type
- = #endif
- =
- = typedef off_t regoff_t;
- = typedef struct {
- = int re_magic;
- = size_t re_nsub; // number of parenthesized subexpressions
- = const unsigned char *re_endp; // end pointer for REG_PEND
- = struct re_guts *re_g; // none of your business :-)
- = } regex_t;
- = typedef struct {
- = regoff_t rm_so; // start of match
- = regoff_t rm_eo; // end of match
- = } regmatch_t;
- */
-/*
- * internals of regex_t
- */
-#define MAGIC1 ((('r'^0200)<<8) | 'e')
-
-/*
- * The internal representation is a *strip*, a sequence of
- * operators ending with an endmarker. (Some terminology etc. is a
- * historical relic of earlier versions which used multiple strips.)
- * Certain oddities in the representation are there to permit running
- * the machinery backwards; in particular, any deviation from sequential
- * flow must be marked at both its source and its destination. Some
- * fine points:
- *
- * - OPLUS_ and O_PLUS are *inside* the loop they create.
- * - OQUEST_ and O_QUEST are *outside* the bypass they create.
- * - OCH_ and O_CH are *outside* the multi-way branch they create, while
- * OOR1 and OOR2 are respectively the end and the beginning of one of
- * the branches. Note that there is an implicit OOR2 following OCH_
- * and an implicit OOR1 preceding O_CH.
- *
- * In state representations, an operator's bit is on to signify a state
- * immediately *preceding* "execution" of that operator.
- */
-typedef long sop; /* strip operator */
-typedef long sopno;
-#define OPRMASK 0x7c000000
-#define OPDMASK 0x03ffffff
-#define OPSHIFT (26)
-#define OP(n) ((n)&OPRMASK)
-#define OPND(n) ((n)&OPDMASK)
-#define SOP(op, opnd) ((op)|(opnd))
-/* operators meaning operand */
-/* (back, fwd are offsets) */
-#define OEND (1<<OPSHIFT) /* endmarker - */
-#define OCHAR (2<<OPSHIFT) /* character unsigned char */
-#define OBOL (3<<OPSHIFT) /* left anchor - */
-#define OEOL (4<<OPSHIFT) /* right anchor - */
-#define OANY (5<<OPSHIFT) /* . - */
-#define OANYOF (6<<OPSHIFT) /* [...] set number */
-#define OBACK_ (7<<OPSHIFT) /* begin \d paren number */
-#define O_BACK (8<<OPSHIFT) /* end \d paren number */
-#define OPLUS_ (9<<OPSHIFT) /* + prefix fwd to suffix */
-#define O_PLUS (10<<OPSHIFT) /* + suffix back to prefix */
-#define OQUEST_ (11<<OPSHIFT) /* ? prefix fwd to suffix */
-#define O_QUEST (12<<OPSHIFT) /* ? suffix back to prefix */
-#define OLPAREN (13<<OPSHIFT) /* ( fwd to ) */
-#define ORPAREN (14<<OPSHIFT) /* ) back to ( */
-#define OCH_ (15<<OPSHIFT) /* begin choice fwd to OOR2 */
-#define OOR1 (16<<OPSHIFT) /* | pt. 1 back to OOR1 or OCH_ */
-#define OOR2 (17<<OPSHIFT) /* | pt. 2 fwd to OOR2 or O_CH */
-#define O_CH (18<<OPSHIFT) /* end choice back to OOR1 */
-#define OBOW (19<<OPSHIFT) /* begin word - */
-#define OEOW (20<<OPSHIFT) /* end word - */
-
-/*
- * Structure for [] character-set representation. Character sets are
- * done as bit vectors, grouped 8 to a byte vector for compactness.
- * The individual set therefore has both a pointer to the byte vector
- * and a mask to pick out the relevant bit of each byte. A hash code
- * simplifies testing whether two sets could be identical.
- *
- * This will get trickier for multicharacter collating elements. As
- * preliminary hooks for dealing with such things, we also carry along
- * a string of multi-character elements, and decide the size of the
- * vectors at run time.
- */
-typedef struct {
- uch *ptr; /* -> uch [csetsize] */
- uch mask; /* bit within array */
- uch hash; /* hash code */
- size_t smultis;
- unsigned char *multis; /* -> char[smulti] ab\0cd\0ef\0\0 */
-} cset;
-/* note that CHadd and CHsub are unsafe, and CHIN doesn't yield 0/1 */
-#define CHadd(cs, c) ((cs)->ptr[(uch)(c)] |= (cs)->mask, (cs)->hash += (c))
-#define CHsub(cs, c) ((cs)->ptr[(uch)(c)] &= ~(cs)->mask, (cs)->hash -= (c))
-#define CHIN(cs, c) ((cs)->ptr[(uch)(c)] & (cs)->mask)
-#define MCadd(p, cs, cp) mcadd(p, cs, cp) /* regcomp() internal fns */
-#define MCsub(p, cs, cp) mcsub(p, cs, cp)
-#define MCin(p, cs, cp) mcin(p, cs, cp)
-
-/* stuff for character categories */
-typedef unsigned char cat_t;
-
-/*
- * main compiled-expression structure
- */
-struct re_guts {
- int magic;
-# define MAGIC2 ((('R'^0200)<<8)|'E')
- sop *strip; /* malloced area for strip */
- int csetsize; /* number of bits in a cset vector */
- int ncsets; /* number of csets in use */
- cset *sets; /* -> cset [ncsets] */
- uch *setbits; /* -> uch[csetsize][ncsets/CHAR_BIT] */
- int cflags; /* copy of regcomp() cflags argument */
- sopno nstates; /* = number of sops */
- sopno firststate; /* the initial OEND (normally 0) */
- sopno laststate; /* the final OEND */
- int iflags; /* internal flags */
-# define USEBOL 01 /* used ^ */
-# define USEEOL 02 /* used $ */
-# define BAD 04 /* something wrong */
- int nbol; /* number of ^ used */
- int neol; /* number of $ used */
- int ncategories; /* how many character categories */
- cat_t *categories; /* ->catspace[-UCHAR_MIN] */
- unsigned char *must; /* match must contain this string */
- int mlen; /* length of must */
- size_t nsub; /* copy of re_nsub */
- int backrefs; /* does it use back references? */
- sopno nplus; /* how deep does it nest +s? */
- /* catspace must be last */
- cat_t catspace[1]; /* actually [NC] */
-};
-
-/* misc utilities */
-#define OUT (UCHAR_MAX+1) /* a non-character value */
-#define ISWORD(c) (isalnum(c) || (c) == '_')
diff --git a/ext/ereg/regex/regex_extra.h b/ext/ereg/regex/regex_extra.h
deleted file mode 100644
index d668f7613f..0000000000
--- a/ext/ereg/regex/regex_extra.h
+++ /dev/null
@@ -1,23 +0,0 @@
-/* do not frame this - we must be able to include this file multiple times */
-
-#undef regexec
-#undef regerror
-#undef regfree
-#undef regcomp
-
-#if (defined(REGEX) && REGEX == 1) || (!defined(REGEX))
-
-#ifndef PHP_WIN32
-
-#ifndef PHP_NO_ALIASES
-
-#define regexec php_regexec
-#define regerror php_regerror
-#define regfree php_regfree
-#define regcomp php_regcomp
-
-#endif
-
-#endif
-
-#endif
diff --git a/ext/ereg/regex/regexec.c b/ext/ereg/regex/regexec.c
deleted file mode 100644
index bbfe094c96..0000000000
--- a/ext/ereg/regex/regexec.c
+++ /dev/null
@@ -1,138 +0,0 @@
-/*
- * the outer shell of regexec()
- *
- * This file includes engine.c *twice*, after muchos fiddling with the
- * macros that code uses. This lets the same code operate on two different
- * representations for state sets.
- */
-#include <sys/types.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <limits.h>
-#include <ctype.h>
-#include <regex.h>
-
-#include "utils.h"
-#include "regex2.h"
-
-#define PHP_REGEX_NOPE 0; /* for use in asserts; shuts lint up */
-
-/* macros for manipulating states, small version */
-#define states unsigned
-#define states1 unsigned /* for later use in regexec() decision */
-#define CLEAR(v) ((v) = 0)
-#define SET0(v, n) ((v) &= ~((unsigned)1 << (n)))
-#define SET1(v, n) ((v) |= (unsigned)1 << (n))
-#define ISSET(v, n) ((v) & ((unsigned)1 << (n)))
-#define ASSIGN(d, s) ((d) = (s))
-#define EQ(a, b) ((a) == (b))
-#define STATEVARS int dummy /* dummy version */
-#define STATESETUP(m, n) /* nothing */
-#define STATETEARDOWN(m) /* nothing */
-#define SETUP(v) ((v) = 0)
-#define onestate unsigned
-#define INIT(o, n) ((o) = (unsigned)1 << (n))
-#define INC(o) ((o) <<= 1)
-#define ISSTATEIN(v, o) ((v) & (o))
-/* some abbreviations; note that some of these know variable names! */
-/* do "if I'm here, I can also be there" etc without branches */
-#define FWD(dst, src, n) ((dst) |= ((unsigned)(src)&(here)) << (n))
-#define BACK(dst, src, n) ((dst) |= ((unsigned)(src)&(here)) >> (n))
-#define ISSETBACK(v, n) ((v) & ((unsigned)here >> (n)))
-/* function names */
-#define SNAMES /* engine.c looks after details */
-
-#include "engine.c"
-
-/* now undo things */
-#undef states
-#undef CLEAR
-#undef SET0
-#undef SET1
-#undef ISSET
-#undef ASSIGN
-#undef EQ
-#undef STATEVARS
-#undef STATESETUP
-#undef STATETEARDOWN
-#undef SETUP
-#undef onestate
-#undef INIT
-#undef INC
-#undef ISSTATEIN
-#undef FWD
-#undef BACK
-#undef ISSETBACK
-#undef SNAMES
-
-/* macros for manipulating states, large version */
-#define states unsigned char *
-#define CLEAR(v) memset(v, 0, m->g->nstates)
-#define SET0(v, n) ((v)[n] = 0)
-#define SET1(v, n) ((v)[n] = 1)
-#define ISSET(v, n) ((v)[n])
-#define ASSIGN(d, s) memcpy(d, s, m->g->nstates)
-#define EQ(a, b) (memcmp(a, b, m->g->nstates) == 0)
-#define STATEVARS int vn; unsigned char *space
-#define STATESETUP(m, nv) { (m)->space = malloc((nv)*(m)->g->nstates); \
- if ((m)->space == NULL) return(REG_ESPACE); \
- (m)->vn = 0; }
-#define STATETEARDOWN(m) { free((m)->space); }
-#define SETUP(v) ((v) = &m->space[m->vn++ * m->g->nstates])
-#define onestate int
-#define INIT(o, n) ((o) = (n))
-#define INC(o) ((o)++)
-#define ISSTATEIN(v, o) ((v)[o])
-/* some abbreviations; note that some of these know variable names! */
-/* do "if I'm here, I can also be there" etc without branches */
-#define FWD(dst, src, n) ((dst)[here+(n)] |= (src)[here])
-#define BACK(dst, src, n) ((dst)[here-(n)] |= (src)[here])
-#define ISSETBACK(v, n) ((v)[here - (n)])
-/* function names */
-#define LNAMES /* flag */
-
-#include "engine.c"
-
-/*
- - regexec - interface for matching
- = API_EXPORT(int) regexec(const regex_t *, const char *, size_t, \
- = regmatch_t [], int);
- = #define REG_NOTBOL 00001
- = #define REG_NOTEOL 00002
- = #define REG_STARTEND 00004
- = #define REG_TRACE 00400 // tracing of execution
- = #define REG_LARGE 01000 // force large representation
- = #define REG_BACKR 02000 // force use of backref code
- *
- * We put this here so we can exploit knowledge of the state representation
- * when choosing which matcher to call. Also, by this point the matchers
- * have been prototyped.
- */
-API_EXPORT(int) /* 0 success, REG_NOMATCH failure */
-regexec(preg, string, nmatch, pmatch, eflags)
-const regex_t *preg;
-const char *string;
-size_t nmatch;
-regmatch_t pmatch[];
-int eflags;
-{
- register struct re_guts *g = preg->re_g;
-#ifdef REDEBUG
-# define GOODFLAGS(f) (f)
-#else
-# define GOODFLAGS(f) ((f)&(REG_NOTBOL|REG_NOTEOL|REG_STARTEND))
-#endif
-
- if (preg->re_magic != MAGIC1 || g->magic != MAGIC2)
- return(REG_BADPAT);
- assert(!(g->iflags&BAD));
- if (g->iflags&BAD) /* backstop for no-debug case */
- return(REG_BADPAT);
- eflags = GOODFLAGS(eflags);
-
- if (g->nstates <= CHAR_BIT*sizeof(states1) && !(eflags&REG_LARGE))
- return(smatcher(g, (unsigned char *)string, nmatch, pmatch, eflags));
- else
- return(lmatcher(g, (unsigned char *)string, nmatch, pmatch, eflags));
-}
diff --git a/ext/ereg/regex/regfree.c b/ext/ereg/regex/regfree.c
deleted file mode 100644
index 9fd618a13b..0000000000
--- a/ext/ereg/regex/regfree.c
+++ /dev/null
@@ -1,37 +0,0 @@
-#include <sys/types.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <regex.h>
-
-#include "utils.h"
-#include "regex2.h"
-
-/*
- - regfree - free everything
- = API_EXPORT(void) regfree(regex_t *);
- */
-API_EXPORT(void)
-regfree(preg)
-regex_t *preg;
-{
- register struct re_guts *g;
-
- if (preg->re_magic != MAGIC1) /* oops */
- return; /* nice to complain, but hard */
-
- g = preg->re_g;
- if (g == NULL || g->magic != MAGIC2) /* oops again */
- return;
- preg->re_magic = 0; /* mark it invalid */
- g->magic = 0; /* mark it invalid */
-
- if (g->strip != NULL)
- free((char *)g->strip);
- if (g->sets != NULL)
- free((char *)g->sets);
- if (g->setbits != NULL)
- free((char *)g->setbits);
- if (g->must != NULL)
- free(g->must);
- free((char *)g);
-}
diff --git a/ext/ereg/regex/split.c b/ext/ereg/regex/split.c
deleted file mode 100644
index 188bdb775b..0000000000
--- a/ext/ereg/regex/split.c
+++ /dev/null
@@ -1,316 +0,0 @@
-#include <stdio.h>
-#include <string.h>
-
-/*
- - split - divide a string into fields, like awk split()
- = int split(char *string, char *fields[], int nfields, char *sep);
- */
-int /* number of fields, including overflow */
-split(string, fields, nfields, sep)
-char *string;
-char *fields[]; /* list is not NULL-terminated */
-int nfields; /* number of entries available in fields[] */
-char *sep; /* "" white, "c" single char, "ab" [ab]+ */
-{
- register char *p = string;
- register char c; /* latest character */
- register char sepc = sep[0];
- register char sepc2;
- register int fn;
- register char **fp = fields;
- register char *sepp;
- register int trimtrail;
-
- /* white space */
- if (sepc == '\0') {
- while ((c = *p++) == ' ' || c == '\t')
- continue;
- p--;
- trimtrail = 1;
- sep = " \t"; /* note, code below knows this is 2 long */
- sepc = ' ';
- } else
- trimtrail = 0;
- sepc2 = sep[1]; /* now we can safely pick this up */
-
- /* catch empties */
- if (*p == '\0')
- return(0);
-
- /* single separator */
- if (sepc2 == '\0') {
- fn = nfields;
- for (;;) {
- *fp++ = p;
- fn--;
- if (fn == 0)
- break;
- while ((c = *p++) != sepc)
- if (c == '\0')
- return(nfields - fn);
- *(p-1) = '\0';
- }
- /* we have overflowed the fields vector -- just count them */
- fn = nfields;
- for (;;) {
- while ((c = *p++) != sepc)
- if (c == '\0')
- return(fn);
- fn++;
- }
- /* not reached */
- }
-
- /* two separators */
- if (sep[2] == '\0') {
- fn = nfields;
- for (;;) {
- *fp++ = p;
- fn--;
- while ((c = *p++) != sepc && c != sepc2)
- if (c == '\0') {
- if (trimtrail && **(fp-1) == '\0')
- fn++;
- return(nfields - fn);
- }
- if (fn == 0)
- break;
- *(p-1) = '\0';
- while ((c = *p++) == sepc || c == sepc2)
- continue;
- p--;
- }
- /* we have overflowed the fields vector -- just count them */
- fn = nfields;
- while (c != '\0') {
- while ((c = *p++) == sepc || c == sepc2)
- continue;
- p--;
- fn++;
- while ((c = *p++) != '\0' && c != sepc && c != sepc2)
- continue;
- }
- /* might have to trim trailing white space */
- if (trimtrail) {
- p--;
- while ((c = *--p) == sepc || c == sepc2)
- continue;
- p++;
- if (*p != '\0') {
- if (fn == nfields+1)
- *p = '\0';
- fn--;
- }
- }
- return(fn);
- }
-
- /* n separators */
- fn = 0;
- for (;;) {
- if (fn < nfields)
- *fp++ = p;
- fn++;
- for (;;) {
- c = *p++;
- if (c == '\0')
- return(fn);
- sepp = sep;
- while ((sepc = *sepp++) != '\0' && sepc != c)
- continue;
- if (sepc != '\0') /* it was a separator */
- break;
- }
- if (fn < nfields)
- *(p-1) = '\0';
- for (;;) {
- c = *p++;
- sepp = sep;
- while ((sepc = *sepp++) != '\0' && sepc != c)
- continue;
- if (sepc == '\0') /* it wasn't a separator */
- break;
- }
- p--;
- }
-
- /* not reached */
-}
-
-#ifdef TEST_SPLIT
-
-
-/*
- * test program
- * pgm runs regression
- * pgm sep splits stdin lines by sep
- * pgm str sep splits str by sep
- * pgm str sep n splits str by sep n times
- */
-int
-main(argc, argv)
-int argc;
-char *argv[];
-{
- char buf[512];
- register int n;
-# define MNF 10
- char *fields[MNF];
-
- if (argc > 4)
- for (n = atoi(argv[3]); n > 0; n--) {
- (void) strcpy(buf, argv[1]);
- }
- else if (argc > 3)
- for (n = atoi(argv[3]); n > 0; n--) {
- (void) strcpy(buf, argv[1]);
- (void) split(buf, fields, MNF, argv[2]);
- }
- else if (argc > 2)
- dosplit(argv[1], argv[2]);
- else if (argc > 1)
- while (fgets(buf, sizeof(buf), stdin) != NULL) {
- buf[strlen(buf)-1] = '\0'; /* stomp newline */
- dosplit(buf, argv[1]);
- }
- else
- regress();
-
- exit(0);
-}
-
-dosplit(string, seps)
-char *string;
-char *seps;
-{
-# define NF 5
- char *fields[NF];
- register int nf;
-
- nf = split(string, fields, NF, seps);
- print(nf, NF, fields);
-}
-
-print(nf, nfp, fields)
-int nf;
-int nfp;
-char *fields[];
-{
- register int fn;
- register int bound;
-
- bound = (nf > nfp) ? nfp : nf;
- printf("%d:\t", nf);
- for (fn = 0; fn < bound; fn++)
- printf("\"%s\"%s", fields[fn], (fn+1 < nf) ? ", " : "\n");
-}
-
-#define RNF 5 /* some table entries know this */
-struct {
- char *str;
- char *seps;
- int nf;
- char *fi[RNF];
-} tests[] = {
- "", " ", 0, { "" },
- " ", " ", 2, { "", "" },
- "x", " ", 1, { "x" },
- "xy", " ", 1, { "xy" },
- "x y", " ", 2, { "x", "y" },
- "abc def g ", " ", 5, { "abc", "def", "", "g", "" },
- " a bcd", " ", 4, { "", "", "a", "bcd" },
- "a b c d e f", " ", 6, { "a", "b", "c", "d", "e f" },
- " a b c d ", " ", 6, { "", "a", "b", "c", "d " },
-
- "", " _", 0, { "" },
- " ", " _", 2, { "", "" },
- "x", " _", 1, { "x" },
- "x y", " _", 2, { "x", "y" },
- "ab _ cd", " _", 2, { "ab", "cd" },
- " a_b c ", " _", 5, { "", "a", "b", "c", "" },
- "a b c_d e f", " _", 6, { "a", "b", "c", "d", "e f" },
- " a b c d ", " _", 6, { "", "a", "b", "c", "d " },
-
- "", " _~", 0, { "" },
- " ", " _~", 2, { "", "" },
- "x", " _~", 1, { "x" },
- "x y", " _~", 2, { "x", "y" },
- "ab _~ cd", " _~", 2, { "ab", "cd" },
- " a_b c~", " _~", 5, { "", "a", "b", "c", "" },
- "a b_c d~e f", " _~", 6, { "a", "b", "c", "d", "e f" },
- "~a b c d ", " _~", 6, { "", "a", "b", "c", "d " },
-
- "", " _~-", 0, { "" },
- " ", " _~-", 2, { "", "" },
- "x", " _~-", 1, { "x" },
- "x y", " _~-", 2, { "x", "y" },
- "ab _~- cd", " _~-", 2, { "ab", "cd" },
- " a_b c~", " _~-", 5, { "", "a", "b", "c", "" },
- "a b_c-d~e f", " _~-", 6, { "a", "b", "c", "d", "e f" },
- "~a-b c d ", " _~-", 6, { "", "a", "b", "c", "d " },
-
- "", " ", 0, { "" },
- " ", " ", 2, { "", "" },
- "x", " ", 1, { "x" },
- "xy", " ", 1, { "xy" },
- "x y", " ", 2, { "x", "y" },
- "abc def g ", " ", 4, { "abc", "def", "g", "" },
- " a bcd", " ", 3, { "", "a", "bcd" },
- "a b c d e f", " ", 6, { "a", "b", "c", "d", "e f" },
- " a b c d ", " ", 6, { "", "a", "b", "c", "d " },
-
- "", "", 0, { "" },
- " ", "", 0, { "" },
- "x", "", 1, { "x" },
- "xy", "", 1, { "xy" },
- "x y", "", 2, { "x", "y" },
- "abc def g ", "", 3, { "abc", "def", "g" },
- "\t a bcd", "", 2, { "a", "bcd" },
- " a \tb\t c ", "", 3, { "a", "b", "c" },
- "a b c d e ", "", 5, { "a", "b", "c", "d", "e" },
- "a b\tc d e f", "", 6, { "a", "b", "c", "d", "e f" },
- " a b c d e f ", "", 6, { "a", "b", "c", "d", "e f " },
-
- NULL, NULL, 0, { NULL },
-};
-
-regress()
-{
- char buf[512];
- register int n;
- char *fields[RNF+1];
- register int nf;
- register int i;
- register int printit;
- register char *f;
-
- for (n = 0; tests[n].str != NULL; n++) {
- (void) strcpy(buf, tests[n].str);
- fields[RNF] = NULL;
- nf = split(buf, fields, RNF, tests[n].seps);
- printit = 0;
- if (nf != tests[n].nf) {
- printf("split `%s' by `%s' gave %d fields, not %d\n",
- tests[n].str, tests[n].seps, nf, tests[n].nf);
- printit = 1;
- } else if (fields[RNF] != NULL) {
- printf("split() went beyond array end\n");
- printit = 1;
- } else {
- for (i = 0; i < nf && i < RNF; i++) {
- f = fields[i];
- if (f == NULL)
- f = "(NULL)";
- if (strcmp(f, tests[n].fi[i]) != 0) {
- printf("split `%s' by `%s', field %d is `%s', not `%s'\n",
- tests[n].str, tests[n].seps,
- i, fields[i], tests[n].fi[i]);
- printit = 1;
- }
- }
- }
- if (printit)
- print(nf, RNF, fields);
- }
-}
-#endif
diff --git a/ext/ereg/regex/tests b/ext/ereg/regex/tests
deleted file mode 100644
index c05846177f..0000000000
--- a/ext/ereg/regex/tests
+++ /dev/null
@@ -1,475 +0,0 @@
-# regular expression test set
-# Lines are at least three fields, separated by one or more tabs. "" stands
-# for an empty field. First field is an RE. Second field is flags. If
-# C flag given, regcomp() is expected to fail, and the third field is the
-# error name (minus the leading REG_).
-#
-# Otherwise it is expected to succeed, and the third field is the string to
-# try matching it against. If there is no fourth field, the match is
-# expected to fail. If there is a fourth field, it is the substring that
-# the RE is expected to match. If there is a fifth field, it is a comma-
-# separated list of what the subexpressions should match, with - indicating
-# no match for that one. In both the fourth and fifth fields, a (sub)field
-# starting with @ indicates that the (sub)expression is expected to match
-# a null string followed by the stuff after the @; this provides a way to
-# test where null strings match. The character `N' in REs and strings
-# is newline, `S' is space, `T' is tab, `Z' is NUL.
-#
-# The full list of flags:
-# - placeholder, does nothing
-# b RE is a BRE, not an ERE
-# & try it as both an ERE and a BRE
-# C regcomp() error expected, third field is error name
-# i REG_ICASE
-# m ("mundane") REG_NOSPEC
-# s REG_NOSUB (not really testable)
-# n REG_NEWLINE
-# ^ REG_NOTBOL
-# $ REG_NOTEOL
-# # REG_STARTEND (see below)
-# p REG_PEND
-#
-# For REG_STARTEND, the start/end offsets are those of the substring
-# enclosed in ().
-
-# basics
-a & a a
-abc & abc abc
-abc|de - abc abc
-a|b|c - abc a
-
-# parentheses and perversions thereof
-a(b)c - abc abc
-a\(b\)c b abc abc
-a( C EPAREN
-a( b a( a(
-a\( - a( a(
-a\( bC EPAREN
-a\(b bC EPAREN
-a(b C EPAREN
-a(b b a(b a(b
-# gag me with a right parenthesis -- 1003.2 goofed here (my fault, partly)
-a) - a) a)
-) - ) )
-# end gagging (in a just world, those *should* give EPAREN)
-a) b a) a)
-a\) bC EPAREN
-\) bC EPAREN
-a()b - ab ab
-a\(\)b b ab ab
-
-# anchoring and REG_NEWLINE
-^abc$ & abc abc
-a^b - a^b
-a^b b a^b a^b
-a$b - a$b
-a$b b a$b a$b
-^ & abc @abc
-$ & abc @
-^$ & "" @
-$^ - "" @
-\($\)\(^\) b "" @
-# stop retching, those are legitimate (although disgusting)
-^^ - "" @
-$$ - "" @
-b$ & abNc
-b$ &n abNc b
-^b$ & aNbNc
-^b$ &n aNbNc b
-^$ &n aNNb @Nb
-^$ n abc
-^$ n abcN @
-$^ n aNNb @Nb
-\($\)\(^\) bn aNNb @Nb
-^^ n^ aNNb @Nb
-$$ n aNNb @NN
-^a ^ a
-a$ $ a
-^a ^n aNb
-^b ^n aNb b
-a$ $n bNa
-b$ $n bNa b
-a*(^b$)c* - b b
-a*\(^b$\)c* b b b
-
-# certain syntax errors and non-errors
-| C EMPTY
-| b | |
-* C BADRPT
-* b * *
-+ C BADRPT
-? C BADRPT
-"" &C EMPTY
-() - abc @abc
-\(\) b abc @abc
-a||b C EMPTY
-|ab C EMPTY
-ab| C EMPTY
-(|a)b C EMPTY
-(a|)b C EMPTY
-(*a) C BADRPT
-(+a) C BADRPT
-(?a) C BADRPT
-({1}a) C BADRPT
-\(\{1\}a\) bC BADRPT
-(a|*b) C BADRPT
-(a|+b) C BADRPT
-(a|?b) C BADRPT
-(a|{1}b) C BADRPT
-^* C BADRPT
-^* b * *
-^+ C BADRPT
-^? C BADRPT
-^{1} C BADRPT
-^\{1\} bC BADRPT
-
-# metacharacters, backslashes
-a.c & abc abc
-a[bc]d & abd abd
-a\*c & a*c a*c
-a\\b & a\b a\b
-a\\\*b & a\*b a\*b
-a\bc & abc abc
-a\ &C EESCAPE
-a\\bc & a\bc a\bc
-\{ bC BADRPT
-a\[b & a[b a[b
-a[b &C EBRACK
-# trailing $ is a peculiar special case for the BRE code
-a$ & a a
-a$ & a$
-a\$ & a
-a\$ & a$ a$
-a\\$ & a
-a\\$ & a$
-a\\$ & a\$
-a\\$ & a\ a\
-
-# back references, ugh
-a\(b\)\2c bC ESUBREG
-a\(b\1\)c bC ESUBREG
-a\(b*\)c\1d b abbcbbd abbcbbd bb
-a\(b*\)c\1d b abbcbd
-a\(b*\)c\1d b abbcbbbd
-^\(.\)\1 b abc
-a\([bc]\)\1d b abcdabbd abbd b
-a\(\([bc]\)\2\)*d b abbccd abbccd
-a\(\([bc]\)\2\)*d b abbcbd
-# actually, this next one probably ought to fail, but the spec is unclear
-a\(\(b\)*\2\)*d b abbbd abbbd
-# here is a case that no NFA implementation does right
-\(ab*\)[ab]*\1 b ababaaa ababaaa a
-# check out normal matching in the presence of back refs
-\(a\)\1bcd b aabcd aabcd
-\(a\)\1bc*d b aabcd aabcd
-\(a\)\1bc*d b aabd aabd
-\(a\)\1bc*d b aabcccd aabcccd
-\(a\)\1bc*[ce]d b aabcccd aabcccd
-^\(a\)\1b\(c\)*cd$ b aabcccd aabcccd
-
-# ordinary repetitions
-ab*c & abc abc
-ab+c - abc abc
-ab?c - abc abc
-a\(*\)b b a*b a*b
-a\(**\)b b ab ab
-a\(***\)b bC BADRPT
-*a b *a *a
-**a b a a
-***a bC BADRPT
-
-# the dreaded bounded repetitions
-{ & { {
-{abc & {abc {abc
-{1 C BADRPT
-{1} C BADRPT
-a{b & a{b a{b
-a{1}b - ab ab
-a\{1\}b b ab ab
-a{1,}b - ab ab
-a\{1,\}b b ab ab
-a{1,2}b - aab aab
-a\{1,2\}b b aab aab
-a{1 C EBRACE
-a\{1 bC EBRACE
-a{1a C EBRACE
-a\{1a bC EBRACE
-a{1a} C BADBR
-a\{1a\} bC BADBR
-a{,2} - a{,2} a{,2}
-a\{,2\} bC BADBR
-a{,} - a{,} a{,}
-a\{,\} bC BADBR
-a{1,x} C BADBR
-a\{1,x\} bC BADBR
-a{1,x C EBRACE
-a\{1,x bC EBRACE
-a{300} C BADBR
-a\{300\} bC BADBR
-a{1,0} C BADBR
-a\{1,0\} bC BADBR
-ab{0,0}c - abcac ac
-ab\{0,0\}c b abcac ac
-ab{0,1}c - abcac abc
-ab\{0,1\}c b abcac abc
-ab{0,3}c - abbcac abbc
-ab\{0,3\}c b abbcac abbc
-ab{1,1}c - acabc abc
-ab\{1,1\}c b acabc abc
-ab{1,3}c - acabc abc
-ab\{1,3\}c b acabc abc
-ab{2,2}c - abcabbc abbc
-ab\{2,2\}c b abcabbc abbc
-ab{2,4}c - abcabbc abbc
-ab\{2,4\}c b abcabbc abbc
-((a{1,10}){1,10}){1,10} - a a a,a
-
-# multiple repetitions
-a** &C BADRPT
-a++ C BADRPT
-a?? C BADRPT
-a*+ C BADRPT
-a*? C BADRPT
-a+* C BADRPT
-a+? C BADRPT
-a?* C BADRPT
-a?+ C BADRPT
-a{1}{1} C BADRPT
-a*{1} C BADRPT
-a+{1} C BADRPT
-a?{1} C BADRPT
-a{1}* C BADRPT
-a{1}+ C BADRPT
-a{1}? C BADRPT
-a*{b} - a{b} a{b}
-a\{1\}\{1\} bC BADRPT
-a*\{1\} bC BADRPT
-a\{1\}* bC BADRPT
-
-# brackets, and numerous perversions thereof
-a[b]c & abc abc
-a[ab]c & abc abc
-a[^ab]c & adc adc
-a[]b]c & a]c a]c
-a[[b]c & a[c a[c
-a[-b]c & a-c a-c
-a[^]b]c & adc adc
-a[^-b]c & adc adc
-a[b-]c & a-c a-c
-a[b &C EBRACK
-a[] &C EBRACK
-a[1-3]c & a2c a2c
-a[3-1]c &C ERANGE
-a[1-3-5]c &C ERANGE
-a[[.-.]--]c & a-c a-c
-a[1- &C ERANGE
-a[[. &C EBRACK
-a[[.x &C EBRACK
-a[[.x. &C EBRACK
-a[[.x.] &C EBRACK
-a[[.x.]] & ax ax
-a[[.x,.]] &C ECOLLATE
-a[[.one.]]b & a1b a1b
-a[[.notdef.]]b &C ECOLLATE
-a[[.].]]b & a]b a]b
-a[[:alpha:]]c & abc abc
-a[[:notdef:]]c &C ECTYPE
-a[[: &C EBRACK
-a[[:alpha &C EBRACK
-a[[:alpha:] &C EBRACK
-a[[:alpha,:] &C ECTYPE
-a[[:]:]]b &C ECTYPE
-a[[:-:]]b &C ECTYPE
-a[[:alph:]] &C ECTYPE
-a[[:alphabet:]] &C ECTYPE
-[[:alnum:]]+ - -%@a0X- a0X
-[[:alpha:]]+ - -%@aX0- aX
-[[:blank:]]+ - aSSTb SST
-[[:cntrl:]]+ - aNTb NT
-[[:digit:]]+ - a019b 019
-[[:graph:]]+ - Sa%bS a%b
-[[:lower:]]+ - AabC ab
-[[:print:]]+ - NaSbN aSb
-[[:punct:]]+ - S%-&T %-&
-[[:space:]]+ - aSNTb SNT
-[[:upper:]]+ - aBCd BC
-[[:xdigit:]]+ - p0f3Cq 0f3C
-a[[=b=]]c & abc abc
-a[[= &C EBRACK
-a[[=b &C EBRACK
-a[[=b= &C EBRACK
-a[[=b=] &C EBRACK
-a[[=b,=]] &C ECOLLATE
-a[[=one=]]b & a1b a1b
-
-# complexities
-a(((b)))c - abc abc
-a(b|(c))d - abd abd
-a(b*|c)d - abbd abbd
-# just gotta have one DFA-buster, of course
-a[ab]{20} - aaaaabaaaabaaaabaaaab aaaaabaaaabaaaabaaaab
-# and an inline expansion in case somebody gets tricky
-a[ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab] - aaaaabaaaabaaaabaaaab aaaaabaaaabaaaabaaaab
-# and in case somebody just slips in an NFA...
-a[ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab](wee|week)(knights|night) - aaaaabaaaabaaaabaaaabweeknights aaaaabaaaabaaaabaaaabweeknights
-# fish for anomalies as the number of states passes 32
-12345678901234567890123456789 - a12345678901234567890123456789b 12345678901234567890123456789
-123456789012345678901234567890 - a123456789012345678901234567890b 123456789012345678901234567890
-1234567890123456789012345678901 - a1234567890123456789012345678901b 1234567890123456789012345678901
-12345678901234567890123456789012 - a12345678901234567890123456789012b 12345678901234567890123456789012
-123456789012345678901234567890123 - a123456789012345678901234567890123b 123456789012345678901234567890123
-# and one really big one, beyond any plausible word width
-1234567890123456789012345678901234567890123456789012345678901234567890 - a1234567890123456789012345678901234567890123456789012345678901234567890b 1234567890123456789012345678901234567890123456789012345678901234567890
-# fish for problems as brackets go past 8
-[ab][cd][ef][gh][ij][kl][mn] - xacegikmoq acegikm
-[ab][cd][ef][gh][ij][kl][mn][op] - xacegikmoq acegikmo
-[ab][cd][ef][gh][ij][kl][mn][op][qr] - xacegikmoqy acegikmoq
-[ab][cd][ef][gh][ij][kl][mn][op][q] - xacegikmoqy acegikmoq
-
-# subtleties of matching
-abc & xabcy abc
-a\(b\)?c\1d b acd
-aBc i Abc Abc
-a[Bc]*d i abBCcd abBCcd
-0[[:upper:]]1 &i 0a1 0a1
-0[[:lower:]]1 &i 0A1 0A1
-a[^b]c &i abc
-a[^b]c &i aBc
-a[^b]c &i adc adc
-[a]b[c] - abc abc
-[a]b[a] - aba aba
-[abc]b[abc] - abc abc
-[abc]b[abd] - abd abd
-a(b?c)+d - accd accd
-(wee|week)(knights|night) - weeknights weeknights
-(we|wee|week|frob)(knights|night|day) - weeknights weeknights
-a[bc]d - xyzaaabcaababdacd abd
-a[ab]c - aaabc abc
-abc s abc abc
-a* & b @b
-
-# Let's have some fun -- try to match a C comment.
-# first the obvious, which looks okay at first glance...
-/\*.*\*/ - /*x*/ /*x*/
-# but...
-/\*.*\*/ - /*x*/y/*z*/ /*x*/y/*z*/
-# okay, we must not match */ inside; try to do that...
-/\*([^*]|\*[^/])*\*/ - /*x*/ /*x*/
-/\*([^*]|\*[^/])*\*/ - /*x*/y/*z*/ /*x*/
-# but...
-/\*([^*]|\*[^/])*\*/ - /*x**/y/*z*/ /*x**/y/*z*/
-# and a still fancier version, which does it right (I think)...
-/\*([^*]|\*+[^*/])*\*+/ - /*x*/ /*x*/
-/\*([^*]|\*+[^*/])*\*+/ - /*x*/y/*z*/ /*x*/
-/\*([^*]|\*+[^*/])*\*+/ - /*x**/y/*z*/ /*x**/
-/\*([^*]|\*+[^*/])*\*+/ - /*x****/y/*z*/ /*x****/
-/\*([^*]|\*+[^*/])*\*+/ - /*x**x*/y/*z*/ /*x**x*/
-/\*([^*]|\*+[^*/])*\*+/ - /*x***x/y/*z*/ /*x***x/y/*z*/
-
-# subexpressions
-a(b)(c)d - abcd abcd b,c
-a(((b)))c - abc abc b,b,b
-a(b|(c))d - abd abd b,-
-a(b*|c|e)d - abbd abbd bb
-a(b*|c|e)d - acd acd c
-a(b*|c|e)d - ad ad @d
-a(b?)c - abc abc b
-a(b?)c - ac ac @c
-a(b+)c - abc abc b
-a(b+)c - abbbc abbbc bbb
-a(b*)c - ac ac @c
-(a|ab)(bc([de]+)f|cde) - abcdef abcdef a,bcdef,de
-# the regression tester only asks for 9 subexpressions
-a(b)(c)(d)(e)(f)(g)(h)(i)(j)k - abcdefghijk abcdefghijk b,c,d,e,f,g,h,i,j
-a(b)(c)(d)(e)(f)(g)(h)(i)(j)(k)l - abcdefghijkl abcdefghijkl b,c,d,e,f,g,h,i,j,k
-a([bc]?)c - abc abc b
-a([bc]?)c - ac ac @c
-a([bc]+)c - abc abc b
-a([bc]+)c - abcc abcc bc
-a([bc]+)bc - abcbc abcbc bc
-a(bb+|b)b - abb abb b
-a(bbb+|bb+|b)b - abb abb b
-a(bbb+|bb+|b)b - abbb abbb bb
-a(bbb+|bb+|b)bb - abbb abbb b
-(.*).* - abcdef abcdef abcdef
-(a*)* - bc @b @b
-
-# do we get the right subexpression when it is used more than once?
-a(b|c)*d - ad ad -
-a(b|c)*d - abcd abcd c
-a(b|c)+d - abd abd b
-a(b|c)+d - abcd abcd c
-a(b|c?)+d - ad ad @d
-a(b|c?)+d - abcd abcd @d
-a(b|c){0,0}d - ad ad -
-a(b|c){0,1}d - ad ad -
-a(b|c){0,1}d - abd abd b
-a(b|c){0,2}d - ad ad -
-a(b|c){0,2}d - abcd abcd c
-a(b|c){0,}d - ad ad -
-a(b|c){0,}d - abcd abcd c
-a(b|c){1,1}d - abd abd b
-a(b|c){1,1}d - acd acd c
-a(b|c){1,2}d - abd abd b
-a(b|c){1,2}d - abcd abcd c
-a(b|c){1,}d - abd abd b
-a(b|c){1,}d - abcd abcd c
-a(b|c){2,2}d - acbd acbd b
-a(b|c){2,2}d - abcd abcd c
-a(b|c){2,4}d - abcd abcd c
-a(b|c){2,4}d - abcbd abcbd b
-a(b|c){2,4}d - abcbcd abcbcd c
-a(b|c){2,}d - abcd abcd c
-a(b|c){2,}d - abcbd abcbd b
-a(b+|((c)*))+d - abd abd @d,@d,-
-a(b+|((c)*))+d - abcd abcd @d,@d,-
-
-# check out the STARTEND option
-[abc] &# a(b)c b
-[abc] &# a(d)c
-[abc] &# a(bc)d b
-[abc] &# a(dc)d c
-. &# a()c
-b.*c &# b(bc)c bc
-b.* &# b(bc)c bc
-.*c &# b(bc)c bc
-
-# plain strings, with the NOSPEC flag
-abc m abc abc
-abc m xabcy abc
-abc m xyz
-a*b m aba*b a*b
-a*b m ab
-"" mC EMPTY
-
-# cases involving NULs
-aZb & a a
-aZb &p a
-aZb &p# (aZb) aZb
-aZ*b &p# (ab) ab
-a.b &# (aZb) aZb
-a.* &# (aZb)c aZb
-
-# word boundaries (ick)
-[[:<:]]a & a a
-[[:<:]]a & ba
-[[:<:]]a & -a a
-a[[:>:]] & a a
-a[[:>:]] & ab
-a[[:>:]] & a- a
-[[:<:]]a.c[[:>:]] & axcd-dayc-dazce-abc abc
-[[:<:]]a.c[[:>:]] & axcd-dayc-dazce-abc-q abc
-[[:<:]]a.c[[:>:]] & axc-dayc-dazce-abc axc
-[[:<:]]b.c[[:>:]] & a_bxc-byc_d-bzc-q bzc
-[[:<:]].x..[[:>:]] & y_xa_-_xb_y-_xc_-axdc _xc_
-[[:<:]]a_b[[:>:]] & x_a_b
-
-# past problems, and suspected problems
-(A[1])|(A[2])|(A[3])|(A[4])|(A[5])|(A[6])|(A[7])|(A[8])|(A[9])|(A[A]) - A1 A1
-abcdefghijklmnop i abcdefghijklmnop abcdefghijklmnop
-abcdefghijklmnopqrstuv i abcdefghijklmnopqrstuv abcdefghijklmnopqrstuv
-(ALAK)|(ALT[AB])|(CC[123]1)|(CM[123]1)|(GAMC)|(LC[23][EO ])|(SEM[1234])|(SL[ES][12])|(SLWW)|(SLF )|(SLDT)|(VWH[12])|(WH[34][EW])|(WP1[ESN]) - CC11 CC11
-CC[13]1|a{21}[23][EO][123][Es][12]a{15}aa[34][EW]aaaaaaa[X]a - CC11 CC11
-Char \([a-z0-9_]*\)\[.* b Char xyz[k Char xyz[k xyz
-a?b - ab ab
--\{0,1\}[0-9]*$ b -5 -5
diff --git a/ext/ereg/regex/utils.h b/ext/ereg/regex/utils.h
deleted file mode 100644
index cd4a96025f..0000000000
--- a/ext/ereg/regex/utils.h
+++ /dev/null
@@ -1,25 +0,0 @@
-/* utility definitions */
-
-#include "regex_extra.h"
-
-#ifdef _POSIX2_RE_DUP_MAX
-#define DUPMAX _POSIX2_RE_DUP_MAX
-#else
-#define DUPMAX 255
-#endif
-#define INFINITY (DUPMAX + 1)
-#define NC (CHAR_MAX - CHAR_MIN + 1)
-typedef unsigned char uch;
-
-/* switch off assertions (if not already off) if no REDEBUG */
-#ifndef REDEBUG
-#ifndef NDEBUG
-#define NDEBUG /* no assertions please */
-#endif
-#endif
-#include <assert.h>
-
-/* for old systems with bcopy() but no memmove() */
-#ifdef USEBCOPY
-#define memmove(d, s, c) bcopy(s, d, c)
-#endif
diff --git a/ext/ereg/tests/001.phpt b/ext/ereg/tests/001.phpt
deleted file mode 100644
index 13c50d0d1e..0000000000
--- a/ext/ereg/tests/001.phpt
+++ /dev/null
@@ -1,7 +0,0 @@
---TEST--
-RegReplace test 1
---FILE--
-<?php $a="abc123";
- echo ereg_replace("123","def",$a)?>
---EXPECT--
-abcdef
diff --git a/ext/ereg/tests/002.phpt b/ext/ereg/tests/002.phpt
deleted file mode 100644
index abe9e063d8..0000000000
--- a/ext/ereg/tests/002.phpt
+++ /dev/null
@@ -1,7 +0,0 @@
---TEST--
-RegReplace test 2
---FILE--
-<?php $a="abc123";
- echo ereg_replace("123","",$a)?>
---EXPECT--
-abc
diff --git a/ext/ereg/tests/003.phpt b/ext/ereg/tests/003.phpt
deleted file mode 100644
index 4257f0d27e..0000000000
--- a/ext/ereg/tests/003.phpt
+++ /dev/null
@@ -1,8 +0,0 @@
---TEST--
-ereg_replace single-quote test
---FILE--
-<?php $a="\\'test";
- echo ereg_replace("\\\\'","'",$a)
-?>
---EXPECT--
-'test
diff --git a/ext/ereg/tests/004.phpt b/ext/ereg/tests/004.phpt
deleted file mode 100644
index 3e535c6a9d..0000000000
--- a/ext/ereg/tests/004.phpt
+++ /dev/null
@@ -1,14 +0,0 @@
---TEST--
-simple ereg test
---FILE--
-<?php $a="This is a nice and simple string";
- if (ereg(".*nice and simple.*",$a)) {
- echo "ok\n";
- }
- if (!ereg(".*doesn't exist.*",$a)) {
- echo "ok\n";
- }
-?>
---EXPECT--
-ok
-ok
diff --git a/ext/ereg/tests/005.phpt b/ext/ereg/tests/005.phpt
deleted file mode 100644
index ee9ccc6da4..0000000000
--- a/ext/ereg/tests/005.phpt
+++ /dev/null
@@ -1,18 +0,0 @@
---TEST--
-Test Regular expression register support in ereg
---FILE--
-<?php $a="This is a nice and simple string";
- echo ereg(".*(is).*(is).*",$a,$registers);
- echo "\n";
- echo $registers[0];
- echo "\n";
- echo $registers[1];
- echo "\n";
- echo $registers[2];
- echo "\n";
-?>
---EXPECT--
-32
-This is a nice and simple string
-is
-is
diff --git a/ext/ereg/tests/006.phpt b/ext/ereg/tests/006.phpt
deleted file mode 100644
index cae349672e..0000000000
--- a/ext/ereg/tests/006.phpt
+++ /dev/null
@@ -1,8 +0,0 @@
---TEST--
-Test ereg_replace of start-of-line
---FILE--
-<?php $a="This is a nice and simple string";
- echo ereg_replace("^This","That",$a);
-?>
---EXPECT--
-That is a nice and simple string
diff --git a/ext/ereg/tests/007.phpt b/ext/ereg/tests/007.phpt
deleted file mode 100644
index beb3cdc159..0000000000
--- a/ext/ereg/tests/007.phpt
+++ /dev/null
@@ -1,10 +0,0 @@
---TEST--
-Test empty result buffer in reg_replace
---FILE--
-<?php
- $a="abcd";
- $b=ereg_replace("abcd","",$a);
- echo "strlen(\$b)=".strlen($b);
-?>
---EXPECT--
-strlen($b)=0
diff --git a/ext/ereg/tests/008.phpt b/ext/ereg/tests/008.phpt
deleted file mode 100644
index 9a0cedabc5..0000000000
--- a/ext/ereg/tests/008.phpt
+++ /dev/null
@@ -1,8 +0,0 @@
---TEST--
-Test back-references in regular expressions
---FILE--
-<?php
- echo ereg_replace("([a-z]*)([-=+|]*)([0-9]+)","\\3 \\1 \\2\n","abc+-|=123");
-?>
---EXPECT--
-123 abc +-|=
diff --git a/ext/ereg/tests/009.phpt b/ext/ereg/tests/009.phpt
deleted file mode 100644
index 528606f3c8..0000000000
--- a/ext/ereg/tests/009.phpt
+++ /dev/null
@@ -1,17 +0,0 @@
---TEST--
-Test split()
---FILE--
-<?php
- $a=split("[[:space:]]","this is a
-test");
- echo count($a) . "\n";
- for ($i = 0; $i < count($a); $i++) {
- echo $a[$i] . "\n";
- }
-?>
---EXPECT--
-4
-this
-is
-a
-test
diff --git a/ext/ereg/tests/010.phpt b/ext/ereg/tests/010.phpt
deleted file mode 100644
index f6f8909f73..0000000000
--- a/ext/ereg/tests/010.phpt
+++ /dev/null
@@ -1,7 +0,0 @@
---TEST--
-Long back references
---FILE--
-<?php $a="abc122222222223";
- echo ereg_replace("1(2*)3","\\1def\\1",$a)?>
---EXPECT--
-abc2222222222def2222222222
diff --git a/ext/ereg/tests/011.phpt b/ext/ereg/tests/011.phpt
deleted file mode 100644
index 65554b302f..0000000000
--- a/ext/ereg/tests/011.phpt
+++ /dev/null
@@ -1,7 +0,0 @@
---TEST--
-\0 back reference
---FILE--
-<?php $a="abc123";
- echo ereg_replace("123","def\\0ghi",$a)?>
---EXPECT--
-abcdef123ghi
diff --git a/ext/ereg/tests/012.phpt b/ext/ereg/tests/012.phpt
deleted file mode 100644
index 88ad5992ad..0000000000
--- a/ext/ereg/tests/012.phpt
+++ /dev/null
@@ -1,7 +0,0 @@
---TEST--
-nonexisting back reference
---FILE--
-<?php $a="abc123";
- echo ereg_replace("123",'def\1ghi',$a)?>
---EXPECT--
-abcdef\1ghi
diff --git a/ext/ereg/tests/013.phpt b/ext/ereg/tests/013.phpt
deleted file mode 100644
index a2d9ee0099..0000000000
--- a/ext/ereg/tests/013.phpt
+++ /dev/null
@@ -1,7 +0,0 @@
---TEST--
-escapes in replace string
---FILE--
-<?php $a="abc123";
- echo ereg_replace("123","def\\g\\\\hi\\",$a)?>
---EXPECT--
-abcdef\g\\hi\
diff --git a/ext/ereg/tests/014.phpt b/ext/ereg/tests/014.phpt
deleted file mode 100644
index d2a32451a9..0000000000
--- a/ext/ereg/tests/014.phpt
+++ /dev/null
@@ -1,7 +0,0 @@
---TEST--
-backreferences not replaced recursively
---FILE--
-<?php $a="a\\2bxc";
- echo ereg_replace("a(.*)b(.*)c","\\1",$a)?>
---EXPECT--
-\2
diff --git a/ext/ereg/tests/015.phpt b/ext/ereg/tests/015.phpt
deleted file mode 100644
index c255ddf05b..0000000000
--- a/ext/ereg/tests/015.phpt
+++ /dev/null
@@ -1,6 +0,0 @@
---TEST--
-replace empty matches
---FILE--
-<?php echo ereg_replace("^","z","abc123")?>
---EXPECT--
-zabc123
diff --git a/ext/ereg/tests/016.phpt b/ext/ereg/tests/016.phpt
deleted file mode 100644
index c354ab26fc..0000000000
--- a/ext/ereg/tests/016.phpt
+++ /dev/null
@@ -1,6 +0,0 @@
---TEST--
-test backslash handling in regular expressions
---FILE--
-<?php echo ereg_replace('\?',"abc","?123?")?>
---EXPECT--
-abc123abc
diff --git a/ext/exif/CREDITS b/ext/exif/CREDITS
deleted file mode 100644
index 94de97e5b0..0000000000
--- a/ext/exif/CREDITS
+++ /dev/null
@@ -1,2 +0,0 @@
-EXIF
-Rasmus Lerdorf, Marcus Boerger
diff --git a/ext/exif/config.m4 b/ext/exif/config.m4
deleted file mode 100644
index a3ba9240df..0000000000
--- a/ext/exif/config.m4
+++ /dev/null
@@ -1,11 +0,0 @@
-dnl
-dnl $Id$
-dnl
-
-PHP_ARG_ENABLE(exif, whether to enable EXIF (metadata from images) support,
-[ --enable-exif Enable EXIF (metadata from images) support])
-
-if test "$PHP_EXIF" != "no"; then
- AC_DEFINE(HAVE_EXIF, 1, [Whether you want EXIF (metadata from images) support])
- PHP_NEW_EXTENSION(exif, exif.c, $ext_shared)
-fi
diff --git a/ext/exif/config.w32 b/ext/exif/config.w32
deleted file mode 100644
index 930bbad424..0000000000
--- a/ext/exif/config.w32
+++ /dev/null
@@ -1,10 +0,0 @@
-// $Id$
-// vim:ft=javascript
-
-ARG_WITH("exif", "exif", "no");
-
-if (PHP_EXIF == "yes") {
- EXTENSION("exif", "exif.c");
- AC_DEFINE('HAVE_EXIF', 1, 'Have exif');
- ADD_EXTENSION_DEP('exif', 'mbstring');
-}
diff --git a/ext/exif/example.php b/ext/exif/example.php
deleted file mode 100644
index e34dc05f6d..0000000000
--- a/ext/exif/example.php
+++ /dev/null
@@ -1,23 +0,0 @@
-<?php
-// (c) M.Boerger
-//
-// $Id$
-//
-?><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional">
-<html>
-<head>
-<title>exif_read_data example</title>
-</head>
-<body>
-<?php
-$exif = exif_read_data ('tests/test1.jpg','IFD0');
-echo $exif===false ? "No header data found.<br>\n" : "Image contains headers<br>";
-$exif = exif_read_data ('tests/test2.jpg',0,true);
-foreach($exif as $key=>$section) {
- foreach($section as $name=>$val) {
- echo "$key.$name: $val<br>\n";
- }
-}
-?>
-</body>
-</html> \ No newline at end of file
diff --git a/ext/exif/exif.c b/ext/exif/exif.c
deleted file mode 100644
index 80e5ec2fda..0000000000
--- a/ext/exif/exif.c
+++ /dev/null
@@ -1,4048 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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. |
- +----------------------------------------------------------------------+
- | Authors: Rasmus Lerdorf <rasmus@php.net> |
- | Marcus Boerger <helly@php.net> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-/* ToDos
- *
- * See if example images from http://www.exif.org have illegal
- * thumbnail sizes or if code is corrupt.
- * Create/Update exif headers.
- * Create/Remove/Update image thumbnails.
- */
-
-/* Security
- *
- * At current time i do not see any security problems but a potential
- * attacker could generate an image with recursive ifd pointers...(Marcus)
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "php.h"
-#include "ext/standard/file.h"
-
-#if HAVE_EXIF
-
-/* When EXIF_DEBUG is defined the module generates a lot of debug messages
- * that help understanding what is going on. This can and should be used
- * while extending the module as it shows if you are at the right position.
- * You are always considered to have a copy of TIFF6.0 and EXIF2.10 standard.
- */
-#undef EXIF_DEBUG
-
-#ifdef EXIF_DEBUG
-#define EXIFERR_DC , const char *_file, size_t _line TSRMLS_DC
-#define EXIFERR_CC , __FILE__, __LINE__ TSRMLS_CC
-#else
-#define EXIFERR_DC TSRMLS_DC
-#define EXIFERR_CC TSRMLS_CC
-#endif
-
-#undef EXIF_JPEG2000
-
-#include "php_exif.h"
-#include <math.h>
-#include "php_ini.h"
-#include "ext/standard/php_string.h"
-#include "ext/standard/php_image.h"
-#include "ext/standard/info.h"
-
-#if HAVE_MBSTRING && !defined(COMPILE_DL_MBSTRING)
-#define EXIF_USE_MBSTRING 1
-#else
-#define EXIF_USE_MBSTRING 0
-#endif
-
-#if EXIF_USE_MBSTRING
-#include "ext/mbstring/mbstring.h"
-#endif
-
-typedef unsigned char uchar;
-
-#ifndef safe_emalloc
-# define safe_emalloc(a,b,c) emalloc((a)*(b)+(c))
-#endif
-
-#ifndef TRUE
-# define TRUE 1
-# define FALSE 0
-#endif
-
-#ifndef max
-# define max(a,b) ((a)>(b) ? (a) : (b))
-#endif
-
-#define EFREE_IF(ptr) if (ptr) efree(ptr)
-
-static
-ZEND_BEGIN_ARG_INFO(exif_thumbnail_force_ref, 1)
- ZEND_ARG_PASS_INFO(0)
-ZEND_END_ARG_INFO();
-
-
-/* {{{ exif_functions[]
- */
-function_entry exif_functions[] = {
- PHP_FE(exif_read_data, NULL)
- PHP_FALIAS(read_exif_data, exif_read_data, NULL)
- PHP_FE(exif_tagname, NULL)
- PHP_FE(exif_thumbnail, exif_thumbnail_force_ref)
- PHP_FE(exif_imagetype, NULL)
- {NULL, NULL, NULL}
-};
-/* }}} */
-
-#define EXIF_VERSION "1.4 $Id$"
-
-/* {{{ PHP_MINFO_FUNCTION
- */
-PHP_MINFO_FUNCTION(exif)
-{
- php_info_print_table_start();
- php_info_print_table_row(2, "EXIF Support", "enabled");
- php_info_print_table_row(2, "EXIF Version", EXIF_VERSION);
- php_info_print_table_row(2, "Supported EXIF Version", "0220");
- php_info_print_table_row(2, "Supported filetypes", "JPEG,TIFF");
- php_info_print_table_end();
-}
-/* }}} */
-
-ZEND_BEGIN_MODULE_GLOBALS(exif)
- char * encode_unicode;
- char * decode_unicode_be;
- char * decode_unicode_le;
- char * encode_jis;
- char * decode_jis_be;
- char * decode_jis_le;
-ZEND_END_MODULE_GLOBALS(exif)
-
-ZEND_DECLARE_MODULE_GLOBALS(exif)
-
-#ifdef ZTS
-#define EXIF_G(v) TSRMG(exif_globals_id, zend_exif_globals *, v)
-#else
-#define EXIF_G(v) (exif_globals.v)
-#endif
-
-/* {{{ PHP_INI
- */
-
-ZEND_INI_MH(OnUpdateEncode)
-{
-#if EXIF_USE_MBSTRING
- if (new_value && strlen(new_value) && !php_mb_check_encoding_list(new_value TSRMLS_CC)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Illegal encoding ignored: '%s'", new_value);
- return FAILURE;
- }
-#endif
- return OnUpdateString(entry, new_value, new_value_length, mh_arg1, mh_arg2, mh_arg3, stage TSRMLS_CC);
-}
-
-ZEND_INI_MH(OnUpdateDecode)
-{
-#if EXIF_USE_MBSTRING
- if (!php_mb_check_encoding_list(new_value TSRMLS_CC)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Illegal encoding ignored: '%s'", new_value);
- return FAILURE;
- }
-#endif
- return OnUpdateString(entry, new_value, new_value_length, mh_arg1, mh_arg2, mh_arg3, stage TSRMLS_CC);
-}
-
-PHP_INI_BEGIN()
- STD_PHP_INI_ENTRY("exif.encode_unicode", "ISO-8859-15", PHP_INI_ALL, OnUpdateEncode, encode_unicode, zend_exif_globals, exif_globals)
- STD_PHP_INI_ENTRY("exif.decode_unicode_motorola", "UCS-2BE", PHP_INI_ALL, OnUpdateDecode, decode_unicode_be, zend_exif_globals, exif_globals)
- STD_PHP_INI_ENTRY("exif.decode_unicode_intel", "UCS-2LE", PHP_INI_ALL, OnUpdateDecode, decode_unicode_le, zend_exif_globals, exif_globals)
- STD_PHP_INI_ENTRY("exif.encode_jis", "", PHP_INI_ALL, OnUpdateEncode, encode_jis, zend_exif_globals, exif_globals)
- STD_PHP_INI_ENTRY("exif.decode_jis_motorola", "JIS", PHP_INI_ALL, OnUpdateDecode, decode_jis_be, zend_exif_globals, exif_globals)
- STD_PHP_INI_ENTRY("exif.decode_jis_intel", "JIS", PHP_INI_ALL, OnUpdateDecode, decode_jis_le, zend_exif_globals, exif_globals)
-PHP_INI_END()
-/* }}} */
-
-/* {{{ php_extname_init_globals
- */
-static void php_exif_init_globals(zend_exif_globals *exif_globals)
-{
- exif_globals->encode_unicode = NULL;
- exif_globals->decode_unicode_be = NULL;
- exif_globals->decode_unicode_le = NULL;
- exif_globals->encode_jis = NULL;
- exif_globals->decode_jis_be = NULL;
- exif_globals->decode_jis_le = NULL;
-}
-/* }}} */
-
-/* {{{ PHP_MINIT_FUNCTION(exif)
- Get the size of an image as 4-element array */
-PHP_MINIT_FUNCTION(exif)
-{
- ZEND_INIT_MODULE_GLOBALS(exif, php_exif_init_globals, NULL);
- REGISTER_INI_ENTRIES();
- REGISTER_LONG_CONSTANT("EXIF_USE_MBSTRING", EXIF_USE_MBSTRING, CONST_CS | CONST_PERSISTENT);
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ PHP_MSHUTDOWN_FUNCTION
- */
-PHP_MSHUTDOWN_FUNCTION(exif)
-{
- UNREGISTER_INI_ENTRIES();
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ exif_module_entry
- */
-zend_module_entry exif_module_entry = {
-#if ZEND_MODULE_API_NO >= 20010901
- STANDARD_MODULE_HEADER,
-#endif
- "exif",
- exif_functions,
- PHP_MINIT(exif),
- PHP_MSHUTDOWN(exif),
- NULL, NULL,
- PHP_MINFO(exif),
-#if ZEND_MODULE_API_NO >= 20010901
- EXIF_VERSION,
-#endif
- STANDARD_MODULE_PROPERTIES
-};
-/* }}} */
-
-#ifdef COMPILE_DL_EXIF
-ZEND_GET_MODULE(exif)
-#endif
-
-/* {{{ php_strnlen
- * get length of string if buffer if less than buffer size or buffer size */
-static size_t php_strnlen(char* str, size_t maxlen) {
- size_t len = 0;
-
- if (str && maxlen && *str) {
- do {
- len++;
- } while (--maxlen && *(++str));
- }
- return len;
-}
-/* }}} */
-
-/* {{{ error messages
-*/
-static const char * EXIF_ERROR_FILEEOF = "Unexpected end of file reached";
-static const char * EXIF_ERROR_CORRUPT = "File structure corrupted";
-static const char * EXIF_ERROR_THUMBEOF = "Thumbnail goes IFD boundary or end of file reached";
-static const char * EXIF_ERROR_FSREALLOC = "Illegal reallocating of undefined file section";
-
-#define EXIF_ERRLOG_FILEEOF(ImageInfo) exif_error_docref(NULL EXIFERR_CC, ImageInfo, E_WARNING, "%s", EXIF_ERROR_FILEEOF);
-#define EXIF_ERRLOG_CORRUPT(ImageInfo) exif_error_docref(NULL EXIFERR_CC, ImageInfo, E_WARNING, "%s", EXIF_ERROR_CORRUPT);
-#define EXIF_ERRLOG_THUMBEOF(ImageInfo) exif_error_docref(NULL EXIFERR_CC, ImageInfo, E_WARNING, "%s", EXIF_ERROR_THUMBEOF);
-#define EXIF_ERRLOG_FSREALLOC(ImageInfo) exif_error_docref(NULL EXIFERR_CC, ImageInfo, E_WARNING, "%s", EXIF_ERROR_FSREALLOC);
-/* }}} */
-
-/* {{{ format description defines
- Describes format descriptor
-*/
-static int php_tiff_bytes_per_format[] = {0, 1, 1, 2, 4, 8, 1, 1, 2, 4, 8, 4, 8, 1};
-#define NUM_FORMATS 13
-
-#define TAG_FMT_BYTE 1
-#define TAG_FMT_STRING 2
-#define TAG_FMT_USHORT 3
-#define TAG_FMT_ULONG 4
-#define TAG_FMT_URATIONAL 5
-#define TAG_FMT_SBYTE 6
-#define TAG_FMT_UNDEFINED 7
-#define TAG_FMT_SSHORT 8
-#define TAG_FMT_SLONG 9
-#define TAG_FMT_SRATIONAL 10
-#define TAG_FMT_SINGLE 11
-#define TAG_FMT_DOUBLE 12
-#define TAG_FMT_IFD 13
-
-#ifdef EXIF_DEBUG
-static char *exif_get_tagformat(int format)
-{
- switch(format) {
- case TAG_FMT_BYTE: return "BYTE";
- case TAG_FMT_STRING: return "STRING";
- case TAG_FMT_USHORT: return "USHORT";
- case TAG_FMT_ULONG: return "ULONG";
- case TAG_FMT_URATIONAL: return "URATIONAL";
- case TAG_FMT_SBYTE: return "SBYTE";
- case TAG_FMT_UNDEFINED: return "UNDEFINED";
- case TAG_FMT_SSHORT: return "SSHORT";
- case TAG_FMT_SLONG: return "SLONG";
- case TAG_FMT_SRATIONAL: return "SRATIONAL";
- case TAG_FMT_SINGLE: return "SINGLE";
- case TAG_FMT_DOUBLE: return "DOUBLE";
- case TAG_FMT_IFD: return "IFD";
- }
- return "*Illegal";
-}
-#endif
-
-/* Describes tag values */
-#define TAG_GPS_VERSION_ID 0x0000
-#define TAG_GPS_LATITUDE_REF 0x0001
-#define TAG_GPS_LATITUDE 0x0002
-#define TAG_GPS_LONGITUDE_REF 0x0003
-#define TAG_GPS_LONGITUDE 0x0004
-#define TAG_GPS_ALTITUDE_REF 0x0005
-#define TAG_GPS_ALTITUDE 0x0006
-#define TAG_GPS_TIME_STAMP 0x0007
-#define TAG_GPS_SATELLITES 0x0008
-#define TAG_GPS_STATUS 0x0009
-#define TAG_GPS_MEASURE_MODE 0x000A
-#define TAG_GPS_DOP 0x000B
-#define TAG_GPS_SPEED_REF 0x000C
-#define TAG_GPS_SPEED 0x000D
-#define TAG_GPS_TRACK_REF 0x000E
-#define TAG_GPS_TRACK 0x000F
-#define TAG_GPS_IMG_DIRECTION_REF 0x0010
-#define TAG_GPS_IMG_DIRECTION 0x0011
-#define TAG_GPS_MAP_DATUM 0x0012
-#define TAG_GPS_DEST_LATITUDE_REF 0x0013
-#define TAG_GPS_DEST_LATITUDE 0x0014
-#define TAG_GPS_DEST_LONGITUDE_REF 0x0015
-#define TAG_GPS_DEST_LONGITUDE 0x0016
-#define TAG_GPS_DEST_BEARING_REF 0x0017
-#define TAG_GPS_DEST_BEARING 0x0018
-#define TAG_GPS_DEST_DISTANCE_REF 0x0019
-#define TAG_GPS_DEST_DISTANCE 0x001A
-#define TAG_GPS_PROCESSING_METHOD 0x001B
-#define TAG_GPS_AREA_INFORMATION 0x001C
-#define TAG_GPS_DATE_STAMP 0x001D
-#define TAG_GPS_DIFFERENTIAL 0x001E
-#define TAG_TIFF_COMMENT 0x00FE /* SHOUDLNT HAPPEN */
-#define TAG_NEW_SUBFILE 0x00FE /* New version of subfile tag */
-#define TAG_SUBFILE_TYPE 0x00FF /* Old version of subfile tag */
-#define TAG_IMAGEWIDTH 0x0100
-#define TAG_IMAGEHEIGHT 0x0101
-#define TAG_BITS_PER_SAMPLE 0x0102
-#define TAG_COMPRESSION 0x0103
-#define TAG_PHOTOMETRIC_INTERPRETATION 0x0106
-#define TAG_TRESHHOLDING 0x0107
-#define TAG_CELL_WIDTH 0x0108
-#define TAG_CELL_HEIGHT 0x0109
-#define TAG_FILL_ORDER 0x010A
-#define TAG_DOCUMENT_NAME 0x010D
-#define TAG_IMAGE_DESCRIPTION 0x010E
-#define TAG_MAKE 0x010F
-#define TAG_MODEL 0x0110
-#define TAG_STRIP_OFFSETS 0x0111
-#define TAG_ORIENTATION 0x0112
-#define TAG_SAMPLES_PER_PIXEL 0x0115
-#define TAG_ROWS_PER_STRIP 0x0116
-#define TAG_STRIP_BYTE_COUNTS 0x0117
-#define TAG_MIN_SAMPPLE_VALUE 0x0118
-#define TAG_MAX_SAMPLE_VALUE 0x0119
-#define TAG_X_RESOLUTION 0x011A
-#define TAG_Y_RESOLUTION 0x011B
-#define TAG_PLANAR_CONFIGURATION 0x011C
-#define TAG_PAGE_NAME 0x011D
-#define TAG_X_POSITION 0x011E
-#define TAG_Y_POSITION 0x011F
-#define TAG_FREE_OFFSETS 0x0120
-#define TAG_FREE_BYTE_COUNTS 0x0121
-#define TAG_GRAY_RESPONSE_UNIT 0x0122
-#define TAG_GRAY_RESPONSE_CURVE 0x0123
-#define TAG_RESOLUTION_UNIT 0x0128
-#define TAG_PAGE_NUMBER 0x0129
-#define TAG_TRANSFER_FUNCTION 0x012D
-#define TAG_SOFTWARE 0x0131
-#define TAG_DATETIME 0x0132
-#define TAG_ARTIST 0x013B
-#define TAG_HOST_COMPUTER 0x013C
-#define TAG_PREDICTOR 0x013D
-#define TAG_WHITE_POINT 0x013E
-#define TAG_PRIMARY_CHROMATICITIES 0x013F
-#define TAG_COLOR_MAP 0x0140
-#define TAG_HALFTONE_HINTS 0x0141
-#define TAG_TILE_WIDTH 0x0142
-#define TAG_TILE_LENGTH 0x0143
-#define TAG_TILE_OFFSETS 0x0144
-#define TAG_TILE_BYTE_COUNTS 0x0145
-#define TAG_SUB_IFD 0x014A
-#define TAG_INK_SETMPUTER 0x014C
-#define TAG_INK_NAMES 0x014D
-#define TAG_NUMBER_OF_INKS 0x014E
-#define TAG_DOT_RANGE 0x0150
-#define TAG_TARGET_PRINTER 0x0151
-#define TAG_EXTRA_SAMPLE 0x0152
-#define TAG_SAMPLE_FORMAT 0x0153
-#define TAG_S_MIN_SAMPLE_VALUE 0x0154
-#define TAG_S_MAX_SAMPLE_VALUE 0x0155
-#define TAG_TRANSFER_RANGE 0x0156
-#define TAG_JPEG_TABLES 0x015B
-#define TAG_JPEG_PROC 0x0200
-#define TAG_JPEG_INTERCHANGE_FORMAT 0x0201
-#define TAG_JPEG_INTERCHANGE_FORMAT_LEN 0x0202
-#define TAG_JPEG_RESTART_INTERVAL 0x0203
-#define TAG_JPEG_LOSSLESS_PREDICTOR 0x0205
-#define TAG_JPEG_POINT_TRANSFORMS 0x0206
-#define TAG_JPEG_Q_TABLES 0x0207
-#define TAG_JPEG_DC_TABLES 0x0208
-#define TAG_JPEG_AC_TABLES 0x0209
-#define TAG_YCC_COEFFICIENTS 0x0211
-#define TAG_YCC_SUB_SAMPLING 0x0212
-#define TAG_YCC_POSITIONING 0x0213
-#define TAG_REFERENCE_BLACK_WHITE 0x0214
-/* 0x0301 - 0x0302 */
-/* 0x0320 */
-/* 0x0343 */
-/* 0x5001 - 0x501B */
-/* 0x5021 - 0x503B */
-/* 0x5090 - 0x5091 */
-/* 0x5100 - 0x5101 */
-/* 0x5110 - 0x5113 */
-/* 0x80E3 - 0x80E6 */
-/* 0x828d - 0x828F */
-#define TAG_COPYRIGHT 0x8298
-#define TAG_EXPOSURETIME 0x829A
-#define TAG_FNUMBER 0x829D
-#define TAG_EXIF_IFD_POINTER 0x8769
-#define TAG_ICC_PROFILE 0x8773
-#define TAG_EXPOSURE_PROGRAM 0x8822
-#define TAG_SPECTRAL_SENSITY 0x8824
-#define TAG_GPS_IFD_POINTER 0x8825
-#define TAG_ISOSPEED 0x8827
-#define TAG_OPTOELECTRIC_CONVERSION_F 0x8828
-/* 0x8829 - 0x882b */
-#define TAG_EXIFVERSION 0x9000
-#define TAG_DATE_TIME_ORIGINAL 0x9003
-#define TAG_DATE_TIME_DIGITIZED 0x9004
-#define TAG_COMPONENT_CONFIG 0x9101
-#define TAG_COMPRESSED_BITS_PER_PIXEL 0x9102
-#define TAG_SHUTTERSPEED 0x9201
-#define TAG_APERTURE 0x9202
-#define TAG_BRIGHTNESS_VALUE 0x9203
-#define TAG_EXPOSURE_BIAS_VALUE 0x9204
-#define TAG_MAX_APERTURE 0x9205
-#define TAG_SUBJECT_DISTANCE 0x9206
-#define TAG_METRIC_MODULE 0x9207
-#define TAG_LIGHT_SOURCE 0x9208
-#define TAG_FLASH 0x9209
-#define TAG_FOCAL_LENGTH 0x920A
-/* 0x920B - 0x920D */
-/* 0x9211 - 0x9216 */
-#define TAG_SUBJECT_AREA 0x9214
-#define TAG_MAKER_NOTE 0x927C
-#define TAG_USERCOMMENT 0x9286
-#define TAG_SUB_SEC_TIME 0x9290
-#define TAG_SUB_SEC_TIME_ORIGINAL 0x9291
-#define TAG_SUB_SEC_TIME_DIGITIZED 0x9292
-/* 0x923F */
-/* 0x935C */
-#define TAG_XP_TITLE 0x9C9B
-#define TAG_XP_COMMENTS 0x9C9C
-#define TAG_XP_AUTHOR 0x9C9D
-#define TAG_XP_KEYWORDS 0x9C9E
-#define TAG_XP_SUBJECT 0x9C9F
-#define TAG_FLASH_PIX_VERSION 0xA000
-#define TAG_COLOR_SPACE 0xA001
-#define TAG_COMP_IMAGE_WIDTH 0xA002 /* compressed images only */
-#define TAG_COMP_IMAGE_HEIGHT 0xA003
-#define TAG_RELATED_SOUND_FILE 0xA004
-#define TAG_INTEROP_IFD_POINTER 0xA005 /* IFD pointer */
-#define TAG_FLASH_ENERGY 0xA20B
-#define TAG_SPATIAL_FREQUENCY_RESPONSE 0xA20C
-#define TAG_FOCALPLANE_X_RES 0xA20E
-#define TAG_FOCALPLANE_Y_RES 0xA20F
-#define TAG_FOCALPLANE_RESOLUTION_UNIT 0xA210
-#define TAG_SUBJECT_LOCATION 0xA214
-#define TAG_EXPOSURE_INDEX 0xA215
-#define TAG_SENSING_METHOD 0xA217
-#define TAG_FILE_SOURCE 0xA300
-#define TAG_SCENE_TYPE 0xA301
-#define TAG_CFA_PATTERN 0xA302
-#define TAG_CUSTOM_RENDERED 0xA401
-#define TAG_EXPOSURE_MODE 0xA402
-#define TAG_WHITE_BALANCE 0xA403
-#define TAG_DIGITAL_ZOOM_RATIO 0xA404
-#define TAG_FOCAL_LENGTH_IN_35_MM_FILM 0xA405
-#define TAG_SCENE_CAPTURE_TYPE 0xA406
-#define TAG_GAIN_CONTROL 0xA407
-#define TAG_CONTRAST 0xA408
-#define TAG_SATURATION 0xA409
-#define TAG_SHARPNESS 0xA40A
-#define TAG_DEVICE_SETTING_DESCRIPTION 0xA40B
-#define TAG_SUBJECT_DISTANCE_RANGE 0xA40C
-#define TAG_IMAGE_UNIQUE_ID 0xA420
-
-/* Olympus specific tags */
-#define TAG_OLYMPUS_SPECIALMODE 0x0200
-#define TAG_OLYMPUS_JPEGQUAL 0x0201
-#define TAG_OLYMPUS_MACRO 0x0202
-#define TAG_OLYMPUS_DIGIZOOM 0x0204
-#define TAG_OLYMPUS_SOFTWARERELEASE 0x0207
-#define TAG_OLYMPUS_PICTINFO 0x0208
-#define TAG_OLYMPUS_CAMERAID 0x0209
-/* end Olympus specific tags */
-
-/* Internal */
-#define TAG_NONE -1 /* note that -1 <> 0xFFFF */
-#define TAG_COMPUTED_VALUE -2
-#define TAG_END_OF_LIST 0xFFFD
-
-/* Values for TAG_PHOTOMETRIC_INTERPRETATION */
-#define PMI_BLACK_IS_ZERO 0
-#define PMI_WHITE_IS_ZERO 1
-#define PMI_RGB 2
-#define PMI_PALETTE_COLOR 3
-#define PMI_TRANSPARENCY_MASK 4
-#define PMI_SEPARATED 5
-#define PMI_YCBCR 6
-#define PMI_CIELAB 8
-
-/* }}} */
-
-/* {{{ TabTable[]
- */
-typedef const struct {
- unsigned short Tag;
- char *Desc;
-} tag_info_type;
-
-typedef tag_info_type tag_info_array[];
-typedef tag_info_type *tag_table_type;
-
-#define TAG_TABLE_END \
- {TAG_NONE, "No tag value"},\
- {TAG_COMPUTED_VALUE, "Computed value"},\
- {TAG_END_OF_LIST, ""} /* Important for exif_get_tagname() IF value != "" functionresult is != false */
-
-static tag_info_array tag_table_IFD = {
- { 0x000B, "ACDComment"},
- { 0x00FE, "NewSubFile"}, /* better name it 'ImageType' ? */
- { 0x00FF, "SubFile"},
- { 0x0100, "ImageWidth"},
- { 0x0101, "ImageLength"},
- { 0x0102, "BitsPerSample"},
- { 0x0103, "Compression"},
- { 0x0106, "PhotometricInterpretation"},
- { 0x010A, "FillOrder"},
- { 0x010D, "DocumentName"},
- { 0x010E, "ImageDescription"},
- { 0x010F, "Make"},
- { 0x0110, "Model"},
- { 0x0111, "StripOffsets"},
- { 0x0112, "Orientation"},
- { 0x0115, "SamplesPerPixel"},
- { 0x0116, "RowsPerStrip"},
- { 0x0117, "StripByteCounts"},
- { 0x0118, "MinSampleValue"},
- { 0x0119, "MaxSampleValue"},
- { 0x011A, "XResolution"},
- { 0x011B, "YResolution"},
- { 0x011C, "PlanarConfiguration"},
- { 0x011D, "PageName"},
- { 0x011E, "XPosition"},
- { 0x011F, "YPosition"},
- { 0x0120, "FreeOffsets"},
- { 0x0121, "FreeByteCounts"},
- { 0x0122, "GrayResponseUnit"},
- { 0x0123, "GrayResponseCurve"},
- { 0x0124, "T4Options"},
- { 0x0125, "T6Options"},
- { 0x0128, "ResolutionUnit"},
- { 0x0129, "PageNumber"},
- { 0x012D, "TransferFunction"},
- { 0x0131, "Software"},
- { 0x0132, "DateTime"},
- { 0x013B, "Artist"},
- { 0x013C, "HostComputer"},
- { 0x013D, "Predictor"},
- { 0x013E, "WhitePoint"},
- { 0x013F, "PrimaryChromaticities"},
- { 0x0140, "ColorMap"},
- { 0x0141, "HalfToneHints"},
- { 0x0142, "TileWidth"},
- { 0x0143, "TileLength"},
- { 0x0144, "TileOffsets"},
- { 0x0145, "TileByteCounts"},
- { 0x014A, "SubIFD"},
- { 0x014C, "InkSet"},
- { 0x014D, "InkNames"},
- { 0x014E, "NumberOfInks"},
- { 0x0150, "DotRange"},
- { 0x0151, "TargetPrinter"},
- { 0x0152, "ExtraSample"},
- { 0x0153, "SampleFormat"},
- { 0x0154, "SMinSampleValue"},
- { 0x0155, "SMaxSampleValue"},
- { 0x0156, "TransferRange"},
- { 0x0157, "ClipPath"},
- { 0x0158, "XClipPathUnits"},
- { 0x0159, "YClipPathUnits"},
- { 0x015A, "Indexed"},
- { 0x015B, "JPEGTables"},
- { 0x015F, "OPIProxy"},
- { 0x0200, "JPEGProc"},
- { 0x0201, "JPEGInterchangeFormat"},
- { 0x0202, "JPEGInterchangeFormatLength"},
- { 0x0203, "JPEGRestartInterval"},
- { 0x0205, "JPEGLosslessPredictors"},
- { 0x0206, "JPEGPointTransforms"},
- { 0x0207, "JPEGQTables"},
- { 0x0208, "JPEGDCTables"},
- { 0x0209, "JPEGACTables"},
- { 0x0211, "YCbCrCoefficients"},
- { 0x0212, "YCbCrSubSampling"},
- { 0x0213, "YCbCrPositioning"},
- { 0x0214, "ReferenceBlackWhite"},
- { 0x02BC, "ExtensibleMetadataPlatform"}, /* XAP: Extensible Authoring Publishing, obsoleted by XMP: Extensible Metadata Platform */
- { 0x0301, "Gamma"},
- { 0x0302, "ICCProfileDescriptor"},
- { 0x0303, "SRGBRenderingIntent"},
- { 0x0320, "ImageTitle"},
- { 0x5001, "ResolutionXUnit"},
- { 0x5002, "ResolutionYUnit"},
- { 0x5003, "ResolutionXLengthUnit"},
- { 0x5004, "ResolutionYLengthUnit"},
- { 0x5005, "PrintFlags"},
- { 0x5006, "PrintFlagsVersion"},
- { 0x5007, "PrintFlagsCrop"},
- { 0x5008, "PrintFlagsBleedWidth"},
- { 0x5009, "PrintFlagsBleedWidthScale"},
- { 0x500A, "HalftoneLPI"},
- { 0x500B, "HalftoneLPIUnit"},
- { 0x500C, "HalftoneDegree"},
- { 0x500D, "HalftoneShape"},
- { 0x500E, "HalftoneMisc"},
- { 0x500F, "HalftoneScreen"},
- { 0x5010, "JPEGQuality"},
- { 0x5011, "GridSize"},
- { 0x5012, "ThumbnailFormat"},
- { 0x5013, "ThumbnailWidth"},
- { 0x5014, "ThumbnailHeight"},
- { 0x5015, "ThumbnailColorDepth"},
- { 0x5016, "ThumbnailPlanes"},
- { 0x5017, "ThumbnailRawBytes"},
- { 0x5018, "ThumbnailSize"},
- { 0x5019, "ThumbnailCompressedSize"},
- { 0x501A, "ColorTransferFunction"},
- { 0x501B, "ThumbnailData"},
- { 0x5020, "ThumbnailImageWidth"},
- { 0x5021, "ThumbnailImageHeight"},
- { 0x5022, "ThumbnailBitsPerSample"},
- { 0x5023, "ThumbnailCompression"},
- { 0x5024, "ThumbnailPhotometricInterp"},
- { 0x5025, "ThumbnailImageDescription"},
- { 0x5026, "ThumbnailEquipMake"},
- { 0x5027, "ThumbnailEquipModel"},
- { 0x5028, "ThumbnailStripOffsets"},
- { 0x5029, "ThumbnailOrientation"},
- { 0x502A, "ThumbnailSamplesPerPixel"},
- { 0x502B, "ThumbnailRowsPerStrip"},
- { 0x502C, "ThumbnailStripBytesCount"},
- { 0x502D, "ThumbnailResolutionX"},
- { 0x502E, "ThumbnailResolutionY"},
- { 0x502F, "ThumbnailPlanarConfig"},
- { 0x5030, "ThumbnailResolutionUnit"},
- { 0x5031, "ThumbnailTransferFunction"},
- { 0x5032, "ThumbnailSoftwareUsed"},
- { 0x5033, "ThumbnailDateTime"},
- { 0x5034, "ThumbnailArtist"},
- { 0x5035, "ThumbnailWhitePoint"},
- { 0x5036, "ThumbnailPrimaryChromaticities"},
- { 0x5037, "ThumbnailYCbCrCoefficients"},
- { 0x5038, "ThumbnailYCbCrSubsampling"},
- { 0x5039, "ThumbnailYCbCrPositioning"},
- { 0x503A, "ThumbnailRefBlackWhite"},
- { 0x503B, "ThumbnailCopyRight"},
- { 0x5090, "LuminanceTable"},
- { 0x5091, "ChrominanceTable"},
- { 0x5100, "FrameDelay"},
- { 0x5101, "LoopCount"},
- { 0x5110, "PixelUnit"},
- { 0x5111, "PixelPerUnitX"},
- { 0x5112, "PixelPerUnitY"},
- { 0x5113, "PaletteHistogram"},
- { 0x1000, "RelatedImageFileFormat"},
- { 0x800D, "ImageID"},
- { 0x80E3, "Matteing"}, /* obsoleted by ExtraSamples */
- { 0x80E4, "DataType"}, /* obsoleted by SampleFormat */
- { 0x80E5, "ImageDepth"},
- { 0x80E6, "TileDepth"},
- { 0x828D, "CFARepeatPatternDim"},
- { 0x828E, "CFAPattern"},
- { 0x828F, "BatteryLevel"},
- { 0x8298, "Copyright"},
- { 0x829A, "ExposureTime"},
- { 0x829D, "FNumber"},
- { 0x83BB, "IPTC/NAA"},
- { 0x84E3, "IT8RasterPadding"},
- { 0x84E5, "IT8ColorTable"},
- { 0x8649, "ImageResourceInformation"}, /* PhotoShop */
- { 0x8769, "Exif_IFD_Pointer"},
- { 0x8773, "ICC_Profile"},
- { 0x8822, "ExposureProgram"},
- { 0x8824, "SpectralSensity"},
- { 0x8828, "OECF"},
- { 0x8825, "GPS_IFD_Pointer"},
- { 0x8827, "ISOSpeedRatings"},
- { 0x8828, "OECF"},
- { 0x9000, "ExifVersion"},
- { 0x9003, "DateTimeOriginal"},
- { 0x9004, "DateTimeDigitized"},
- { 0x9101, "ComponentsConfiguration"},
- { 0x9102, "CompressedBitsPerPixel"},
- { 0x9201, "ShutterSpeedValue"},
- { 0x9202, "ApertureValue"},
- { 0x9203, "BrightnessValue"},
- { 0x9204, "ExposureBiasValue"},
- { 0x9205, "MaxApertureValue"},
- { 0x9206, "SubjectDistance"},
- { 0x9207, "MeteringMode"},
- { 0x9208, "LightSource"},
- { 0x9209, "Flash"},
- { 0x920A, "FocalLength"},
- { 0x920B, "FlashEnergy"}, /* 0xA20B in JPEG */
- { 0x920C, "SpatialFrequencyResponse"}, /* 0xA20C - - */
- { 0x920D, "Noise"},
- { 0x920E, "FocalPlaneXResolution"}, /* 0xA20E - - */
- { 0x920F, "FocalPlaneYResolution"}, /* 0xA20F - - */
- { 0x9210, "FocalPlaneResolutionUnit"}, /* 0xA210 - - */
- { 0x9211, "ImageNumber"},
- { 0x9212, "SecurityClassification"},
- { 0x9213, "ImageHistory"},
- { 0x9214, "SubjectLocation"}, /* 0xA214 - - */
- { 0x9215, "ExposureIndex"}, /* 0xA215 - - */
- { 0x9216, "TIFF/EPStandardID"},
- { 0x9217, "SensingMethod"}, /* 0xA217 - - */
- { 0x923F, "StoNits"},
- { 0x927C, "MakerNote"},
- { 0x9286, "UserComment"},
- { 0x9290, "SubSecTime"},
- { 0x9291, "SubSecTimeOriginal"},
- { 0x9292, "SubSecTimeDigitized"},
- { 0x935C, "ImageSourceData"}, /* "Adobe Photoshop Document Data Block": 8BIM... */
- { 0x9c9b, "Title" }, /* Win XP specific, Unicode */
- { 0x9c9c, "Comments" }, /* Win XP specific, Unicode */
- { 0x9c9d, "Author" }, /* Win XP specific, Unicode */
- { 0x9c9e, "Keywords" }, /* Win XP specific, Unicode */
- { 0x9c9f, "Subject" }, /* Win XP specific, Unicode, not to be confused with SubjectDistance and SubjectLocation */
- { 0xA000, "FlashPixVersion"},
- { 0xA001, "ColorSpace"},
- { 0xA002, "ExifImageWidth"},
- { 0xA003, "ExifImageLength"},
- { 0xA004, "RelatedSoundFile"},
- { 0xA005, "InteroperabilityOffset"},
- { 0xA20B, "FlashEnergy"}, /* 0x920B in TIFF/EP */
- { 0xA20C, "SpatialFrequencyResponse"}, /* 0x920C - - */
- { 0xA20D, "Noise"},
- { 0xA20E, "FocalPlaneXResolution"}, /* 0x920E - - */
- { 0xA20F, "FocalPlaneYResolution"}, /* 0x920F - - */
- { 0xA210, "FocalPlaneResolutionUnit"}, /* 0x9210 - - */
- { 0xA211, "ImageNumber"},
- { 0xA212, "SecurityClassification"},
- { 0xA213, "ImageHistory"},
- { 0xA214, "SubjectLocation"}, /* 0x9214 - - */
- { 0xA215, "ExposureIndex"}, /* 0x9215 - - */
- { 0xA216, "TIFF/EPStandardID"},
- { 0xA217, "SensingMethod"}, /* 0x9217 - - */
- { 0xA300, "FileSource"},
- { 0xA301, "SceneType"},
- { 0xA302, "CFAPattern"},
- { 0xA401, "CustomRendered"},
- { 0xA402, "ExposureMode"},
- { 0xA403, "WhiteBalance"},
- { 0xA404, "DigitalZoomRatio"},
- { 0xA405, "FocalLengthIn35mmFilm"},
- { 0xA406, "SceneCaptureType"},
- { 0xA407, "GainControl"},
- { 0xA408, "Contrast"},
- { 0xA409, "Saturation"},
- { 0xA40A, "Sharpness"},
- { 0xA40B, "DeviceSettingDescription"},
- { 0xA40C, "SubjectDistanceRange"},
- { 0xA420, "ImageUniqueID"},
- TAG_TABLE_END
-} ;
-
-static tag_info_array tag_table_GPS = {
- { 0x0000, "GPSVersion"},
- { 0x0001, "GPSLatitudeRef"},
- { 0x0002, "GPSLatitude"},
- { 0x0003, "GPSLongitudeRef"},
- { 0x0004, "GPSLongitude"},
- { 0x0005, "GPSAltitudeRef"},
- { 0x0006, "GPSAltitude"},
- { 0x0007, "GPSTimeStamp"},
- { 0x0008, "GPSSatellites"},
- { 0x0009, "GPSStatus"},
- { 0x000A, "GPSMeasureMode"},
- { 0x000B, "GPSDOP"},
- { 0x000C, "GPSSpeedRef"},
- { 0x000D, "GPSSpeed"},
- { 0x000E, "GPSTrackRef"},
- { 0x000F, "GPSTrack"},
- { 0x0010, "GPSImgDirectionRef"},
- { 0x0011, "GPSImgDirection"},
- { 0x0012, "GPSMapDatum"},
- { 0x0013, "GPSDestLatitudeRef"},
- { 0x0014, "GPSDestLatitude"},
- { 0x0015, "GPSDestLongitudeRef"},
- { 0x0016, "GPSDestLongitude"},
- { 0x0017, "GPSDestBearingRef"},
- { 0x0018, "GPSDestBearing"},
- { 0x0019, "GPSDestDistanceRef"},
- { 0x001A, "GPSDestDistance"},
- { 0x001B, "GPSProcessingMode"},
- { 0x001C, "GPSAreaInformation"},
- { 0x001D, "GPSDateStamp"},
- { 0x001E, "GPSDifferential"},
- TAG_TABLE_END
-};
-
-static tag_info_array tag_table_IOP = {
- { 0x0001, "InterOperabilityIndex"}, /* should be 'R98' or 'THM' */
- { 0x0002, "InterOperabilityVersion"},
- { 0x1000, "RelatedFileFormat"},
- { 0x1001, "RelatedImageWidth"},
- { 0x1002, "RelatedImageHeight"},
- TAG_TABLE_END
-};
-
-static tag_info_array tag_table_VND_CANON = {
- { 0x0001, "ModeArray"}, /* guess */
- { 0x0004, "ImageInfo"}, /* guess */
- { 0x0006, "ImageType"},
- { 0x0007, "FirmwareVersion"},
- { 0x0008, "ImageNumber"},
- { 0x0009, "OwnerName"},
- { 0x000C, "Camera"},
- { 0x000F, "CustomFunctions"},
- TAG_TABLE_END
-};
-
-static tag_info_array tag_table_VND_CASIO = {
- { 0x0001, "RecordingMode"},
- { 0x0002, "Quality"},
- { 0x0003, "FocusingMode"},
- { 0x0004, "FlashMode"},
- { 0x0005, "FlashIntensity"},
- { 0x0006, "ObjectDistance"},
- { 0x0007, "WhiteBalance"},
- { 0x000A, "DigitalZoom"},
- { 0x000B, "Sharpness"},
- { 0x000C, "Contrast"},
- { 0x000D, "Saturation"},
- { 0x0014, "CCDSensitivity"},
- TAG_TABLE_END
-};
-
-static tag_info_array tag_table_VND_FUJI = {
- { 0x0000, "Version"},
- { 0x1000, "Quality"},
- { 0x1001, "Sharpness"},
- { 0x1002, "WhiteBalance"},
- { 0x1003, "Color"},
- { 0x1004, "Tone"},
- { 0x1010, "FlashMode"},
- { 0x1011, "FlashStrength"},
- { 0x1020, "Macro"},
- { 0x1021, "FocusMode"},
- { 0x1030, "SlowSync"},
- { 0x1031, "PictureMode"},
- { 0x1100, "ContTake"},
- { 0x1300, "BlurWarning"},
- { 0x1301, "FocusWarning"},
- { 0x1302, "AEWarning "},
- TAG_TABLE_END
-};
-
-static tag_info_array tag_table_VND_NIKON = {
- { 0x0003, "Quality"},
- { 0x0004, "ColorMode"},
- { 0x0005, "ImageAdjustment"},
- { 0x0006, "CCDSensitivity"},
- { 0x0007, "WhiteBalance"},
- { 0x0008, "Focus"},
- { 0x000a, "DigitalZoom"},
- { 0x000b, "Converter"},
- TAG_TABLE_END
-};
-
-static tag_info_array tag_table_VND_NIKON_990 = {
- { 0x0001, "Version"},
- { 0x0002, "ISOSetting"},
- { 0x0003, "ColorMode"},
- { 0x0004, "Quality"},
- { 0x0005, "WhiteBalance"},
- { 0x0006, "ImageSharpening"},
- { 0x0007, "FocusMode"},
- { 0x0008, "FlashSetting"},
- { 0x000F, "ISOSelection"},
- { 0x0080, "ImageAdjustment"},
- { 0x0082, "AuxiliaryLens"},
- { 0x0085, "ManualFocusDistance"},
- { 0x0086, "DigitalZoom"},
- { 0x0088, "AFFocusPosition"},
- { 0x0010, "DataDump"},
- TAG_TABLE_END
-};
-
-static tag_info_array tag_table_VND_OLYMPUS = {
- { 0x0200, "SpecialMode"},
- { 0x0201, "JPEGQuality"},
- { 0x0202, "Macro"},
- { 0x0204, "DigitalZoom"},
- { 0x0207, "SoftwareRelease"},
- { 0x0208, "PictureInfo"},
- { 0x0209, "CameraId"},
- { 0x0F00, "DataDump"},
- TAG_TABLE_END
-};
-
-typedef enum mn_byte_order_t {
- MN_ORDER_INTEL = 0,
- MN_ORDER_MOTOROLA = 1,
- MN_ORDER_NORMAL
-} mn_byte_order_t;
-
-typedef enum mn_offset_mode_t {
- MN_OFFSET_NORMAL,
- MN_OFFSET_MAKER,
- MN_OFFSET_GUESS
-} mn_offset_mode_t;
-
-typedef struct {
- tag_table_type tag_table;
- char * make;
- char * model;
- char * id_string;
- int id_string_len;
- int offset;
- mn_byte_order_t byte_order;
- mn_offset_mode_t offset_mode;
-} maker_note_type;
-
-static const maker_note_type maker_note_array[] = {
- { tag_table_VND_CANON, "Canon", NULL, NULL, 0, 0, MN_ORDER_INTEL, MN_OFFSET_GUESS},
-/* { tag_table_VND_CANON, "Canon", NULL, NULL, 0, 0, MN_ORDER_NORMAL, MN_OFFSET_NORMAL},*/
- { tag_table_VND_CASIO, "CASIO", NULL, NULL, 0, 0, MN_ORDER_MOTOROLA, MN_OFFSET_NORMAL},
- { tag_table_VND_FUJI, "FUJIFILM", NULL, "FUJIFILM\x0C\x00\x00\x00", 12, 12, MN_ORDER_INTEL, MN_OFFSET_MAKER},
- { tag_table_VND_NIKON, "NIKON", NULL, "Nikon\x00\x01\x00", 8, 8, MN_ORDER_NORMAL, MN_OFFSET_NORMAL},
- { tag_table_VND_NIKON_990, "NIKON", NULL, NULL, 0, 0, MN_ORDER_NORMAL, MN_OFFSET_NORMAL},
- { tag_table_VND_OLYMPUS, "OLYMPUS OPTICAL CO.,LTD", NULL, "OLYMP\x00\x01\x00", 8, 8, MN_ORDER_NORMAL, MN_OFFSET_NORMAL},
-};
-/* }}} */
-
-/* {{{ exif_get_tagname
- Get headername for tag_num or NULL if not defined */
-static char * exif_get_tagname(int tag_num, char *ret, int len, tag_table_type tag_table TSRMLS_DC)
-{
- int i, t;
- char tmp[32];
-
- for (i=0;;i++) {
- if ((t=tag_table[i].Tag) == tag_num || t==TAG_END_OF_LIST) {
- if (t==TAG_END_OF_LIST) {
- break;
- }
- if (ret && len) {
- strncpy(ret, tag_table[i].Desc, abs(len));
- if (len<0) {
- len = -len;
- ret[len-1]='\0';
- for(i=strlen(ret);i<len;i++)ret[i]=' ';
- }
- ret[len-1]='\0';
- return ret;
- }
- return tag_table[i].Desc;
- }
- }
- if (ret && len) {
- snprintf(tmp, sizeof(tmp), "UndefinedTag:0x%04X", tag_num);
- strncpy(ret, tmp, abs(len));
- if (len<0) {
- len = -len;
- ret[len-1]='\0';
- for(i=strlen(ret);i<len;i++)ret[i]=' ';
- }
- ret[len-1]='\0';
- return ret;
- }
- return "";
-}
-/* }}} */
-
-/* {{{ exif_char_dump
- * Do not use! This is a debug function... */
-#ifdef EXIF_DEBUG
-static unsigned char* exif_char_dump(unsigned char * addr, int len, int offset)
-{
- static unsigned char buf[4096+1];
- static unsigned char tmp[20];
- int c, i, p=0, n = 5+31;
-
- p += sprintf(buf+p, "\nDump Len: %08X (%d)", len, len);
- if (len) {
- for(i=0; i<len+15 && p+n<=sizeof(buf); i++) {
- if (i%16==0) {
- p += sprintf(buf+p, "\n%08X: ", i+offset);
- }
- if (i<len) {
- c = *addr++;
- p += sprintf(buf+p, "%02X ", c);
- tmp[i%16] = c>=32 ? c : '.';
- tmp[(i%16)+1] = '\0';
- } else {
- p += sprintf(buf+p, " ");
- }
- if (i%16==15) {
- p += sprintf(buf+p, " %s", tmp);
- if (i>=len) {
- break;
- }
- }
- }
- }
- buf[sizeof(buf)-1] = '\0';
- return buf;
-}
-#endif
-/* }}} */
-
-/* {{{ php_jpg_get16
- Get 16 bits motorola order (always) for jpeg header stuff.
-*/
-static int php_jpg_get16(void *value)
-{
- return (((uchar *)value)[0] << 8) | ((uchar *)value)[1];
-}
-/* }}} */
-
-/* {{{ php_ifd_get16u
- * Convert a 16 bit unsigned value from file's native byte order */
-static int php_ifd_get16u(void *value, int motorola_intel)
-{
- if (motorola_intel) {
- return (((uchar *)value)[0] << 8) | ((uchar *)value)[1];
- } else {
- return (((uchar *)value)[1] << 8) | ((uchar *)value)[0];
- }
-}
-/* }}} */
-
-/* {{{ php_ifd_get16s
- * Convert a 16 bit signed value from file's native byte order */
-static signed short php_ifd_get16s(void *value, int motorola_intel)
-{
- return (signed short)php_ifd_get16u(value, motorola_intel);
-}
-/* }}} */
-
-/* {{{ php_ifd_get32s
- * Convert a 32 bit signed value from file's native byte order */
-static int php_ifd_get32s(void *value, int motorola_intel)
-{
- if (motorola_intel) {
- return (((char *)value)[0] << 24)
- | (((uchar *)value)[1] << 16)
- | (((uchar *)value)[2] << 8 )
- | (((uchar *)value)[3] );
- } else {
- return (((char *)value)[3] << 24)
- | (((uchar *)value)[2] << 16)
- | (((uchar *)value)[1] << 8 )
- | (((uchar *)value)[0] );
- }
-}
-/* }}} */
-
-/* {{{ php_ifd_get32u
- * Write 32 bit unsigned value to data */
-static unsigned php_ifd_get32u(void *value, int motorola_intel)
-{
- return (unsigned)php_ifd_get32s(value, motorola_intel) & 0xffffffff;
-}
-/* }}} */
-
-/* {{{ php_ifd_set16u
- * Write 16 bit unsigned value to data */
-static void php_ifd_set16u(char *data, unsigned int value, int motorola_intel)
-{
- if (motorola_intel) {
- data[0] = (value & 0xFF00) >> 8;
- data[1] = (value & 0x00FF);
- } else {
- data[1] = (value & 0xFF00) >> 8;
- data[0] = (value & 0x00FF);
- }
-}
-/* }}} */
-
-/* {{{ php_ifd_set32u
- * Convert a 32 bit unsigned value from file's native byte order */
-static void php_ifd_set32u(char *data, size_t value, int motorola_intel)
-{
- if (motorola_intel) {
- data[0] = (value & 0xFF000000) >> 24;
- data[1] = (value & 0x00FF0000) >> 16;
- data[2] = (value & 0x0000FF00) >> 8;
- data[3] = (value & 0x000000FF);
- } else {
- data[3] = (value & 0xFF000000) >> 24;
- data[2] = (value & 0x00FF0000) >> 16;
- data[1] = (value & 0x0000FF00) >> 8;
- data[0] = (value & 0x000000FF);
- }
-}
-/* }}} */
-
-/* {{{ exif_convert_any_format
- * Evaluate number, be it int, rational, or float from directory. */
-static double exif_convert_any_format(void *value, int format, int motorola_intel TSRMLS_DC)
-{
- int s_den;
- unsigned u_den;
-
- switch(format) {
- case TAG_FMT_SBYTE: return *(signed char *)value;
- case TAG_FMT_BYTE: return *(uchar *)value;
-
- case TAG_FMT_USHORT: return php_ifd_get16u(value, motorola_intel);
- case TAG_FMT_ULONG: return php_ifd_get32u(value, motorola_intel);
-
- case TAG_FMT_URATIONAL:
- u_den = php_ifd_get32u(4+(char *)value, motorola_intel);
- if (u_den == 0) {
- return 0;
- } else {
- return (double)php_ifd_get32u(value, motorola_intel) / u_den;
- }
-
- case TAG_FMT_SRATIONAL:
- s_den = php_ifd_get32s(4+(char *)value, motorola_intel);
- if (s_den == 0) {
- return 0;
- } else {
- return (double)php_ifd_get32s(value, motorola_intel) / s_den;
- }
-
- case TAG_FMT_SSHORT: return (signed short)php_ifd_get16u(value, motorola_intel);
- case TAG_FMT_SLONG: return php_ifd_get32s(value, motorola_intel);
-
- /* Not sure if this is correct (never seen float used in Exif format) */
- case TAG_FMT_SINGLE:
-#ifdef EXIF_DEBUG
- php_error_docref(NULL TSRMLS_CC, E_NOTICE, "Found value of type single");
-#endif
- return (double)*(float *)value;
- case TAG_FMT_DOUBLE:
-#ifdef EXIF_DEBUG
- php_error_docref(NULL TSRMLS_CC, E_NOTICE, "Found value of type double");
-#endif
- return *(double *)value;
- }
- return 0;
-}
-/* }}} */
-
-/* {{{ exif_convert_any_to_int
- * Evaluate number, be it int, rational, or float from directory. */
-static size_t exif_convert_any_to_int(void *value, int format, int motorola_intel TSRMLS_DC)
-{
- int s_den;
- unsigned u_den;
-
- switch(format) {
- case TAG_FMT_SBYTE: return *(signed char *)value;
- case TAG_FMT_BYTE: return *(uchar *)value;
-
- case TAG_FMT_USHORT: return php_ifd_get16u(value, motorola_intel);
- case TAG_FMT_ULONG: return php_ifd_get32u(value, motorola_intel);
-
- case TAG_FMT_URATIONAL:
- u_den = php_ifd_get32u(4+(char *)value, motorola_intel);
- if (u_den == 0) {
- return 0;
- } else {
- return php_ifd_get32u(value, motorola_intel) / u_den;
- }
-
- case TAG_FMT_SRATIONAL:
- s_den = php_ifd_get32s(4+(char *)value, motorola_intel);
- if (s_den == 0) {
- return 0;
- } else {
- return php_ifd_get32s(value, motorola_intel) / s_den;
- }
-
- case TAG_FMT_SSHORT: return php_ifd_get16u(value, motorola_intel);
- case TAG_FMT_SLONG: return php_ifd_get32s(value, motorola_intel);
-
- /* Not sure if this is correct (never seen float used in Exif format) */
- case TAG_FMT_SINGLE:
-#ifdef EXIF_DEBUG
- php_error_docref(NULL TSRMLS_CC, E_NOTICE, "Found value of type single");
-#endif
- return (size_t)*(float *)value;
- case TAG_FMT_DOUBLE:
-#ifdef EXIF_DEBUG
- php_error_docref(NULL TSRMLS_CC, E_NOTICE, "Found value of type double");
-#endif
- return (size_t)*(double *)value;
- }
- return 0;
-}
-/* }}} */
-
-/* {{{ struct image_info_value, image_info_list
-*/
-#ifndef WORD
-#define WORD unsigned short
-#endif
-#ifndef DWORD
-#define DWORD unsigned int
-#endif
-
-typedef struct {
- int num;
- int den;
-} signed_rational;
-
-typedef struct {
- unsigned int num;
- unsigned int den;
-} unsigned_rational;
-
-typedef union _image_info_value {
- char *s;
- unsigned u;
- int i;
- float f;
- double d;
- signed_rational sr;
- unsigned_rational ur;
- union _image_info_value *list;
-} image_info_value;
-
-typedef struct {
- WORD tag;
- WORD format;
- DWORD length;
- DWORD dummy; /* value ptr of tiff directory entry */
- char *name;
- image_info_value value;
-} image_info_data;
-
-typedef struct {
- int count;
- image_info_data *list;
-} image_info_list;
-/* }}} */
-
-/* {{{ exif_get_sectionname
- Returns the name of a section
-*/
-#define SECTION_FILE 0
-#define SECTION_COMPUTED 1
-#define SECTION_ANY_TAG 2
-#define SECTION_IFD0 3
-#define SECTION_THUMBNAIL 4
-#define SECTION_COMMENT 5
-#define SECTION_APP0 6
-#define SECTION_EXIF 7
-#define SECTION_FPIX 8
-#define SECTION_GPS 9
-#define SECTION_INTEROP 10
-#define SECTION_APP12 11
-#define SECTION_WINXP 12
-#define SECTION_MAKERNOTE 13
-#define SECTION_COUNT 14
-
-#define FOUND_FILE (1<<SECTION_FILE)
-#define FOUND_COMPUTED (1<<SECTION_COMPUTED)
-#define FOUND_ANY_TAG (1<<SECTION_ANY_TAG)
-#define FOUND_IFD0 (1<<SECTION_IFD0)
-#define FOUND_THUMBNAIL (1<<SECTION_THUMBNAIL)
-#define FOUND_COMMENT (1<<SECTION_COMMENT)
-#define FOUND_APP0 (1<<SECTION_APP0)
-#define FOUND_EXIF (1<<SECTION_EXIF)
-#define FOUND_FPIX (1<<SECTION_FPIX)
-#define FOUND_GPS (1<<SECTION_GPS)
-#define FOUND_INTEROP (1<<SECTION_INTEROP)
-#define FOUND_APP12 (1<<SECTION_APP12)
-#define FOUND_WINXP (1<<SECTION_WINXP)
-#define FOUND_MAKERNOTE (1<<SECTION_MAKERNOTE)
-
-static char *exif_get_sectionname(int section)
-{
- switch(section) {
- case SECTION_FILE: return "FILE";
- case SECTION_COMPUTED: return "COMPUTED";
- case SECTION_ANY_TAG: return "ANY_TAG";
- case SECTION_IFD0: return "IFD0";
- case SECTION_THUMBNAIL: return "THUMBNAIL";
- case SECTION_COMMENT: return "COMMENT";
- case SECTION_APP0: return "APP0";
- case SECTION_EXIF: return "EXIF";
- case SECTION_FPIX: return "FPIX";
- case SECTION_GPS: return "GPS";
- case SECTION_INTEROP: return "INTEROP";
- case SECTION_APP12: return "APP12";
- case SECTION_WINXP: return "WINXP";
- case SECTION_MAKERNOTE: return "MAKERNOTE";
- }
- return "";
-}
-
-static tag_table_type exif_get_tag_table(int section)
-{
- switch(section) {
- case SECTION_FILE: return &tag_table_IFD[0];
- case SECTION_COMPUTED: return &tag_table_IFD[0];
- case SECTION_ANY_TAG: return &tag_table_IFD[0];
- case SECTION_IFD0: return &tag_table_IFD[0];
- case SECTION_THUMBNAIL: return &tag_table_IFD[0];
- case SECTION_COMMENT: return &tag_table_IFD[0];
- case SECTION_APP0: return &tag_table_IFD[0];
- case SECTION_EXIF: return &tag_table_IFD[0];
- case SECTION_FPIX: return &tag_table_IFD[0];
- case SECTION_GPS: return &tag_table_GPS[0];
- case SECTION_INTEROP: return &tag_table_IOP[0];
- case SECTION_APP12: return &tag_table_IFD[0];
- case SECTION_WINXP: return &tag_table_IFD[0];
- }
- return &tag_table_IFD[0];
-}
-/* }}} */
-
-/* {{{ exif_get_sectionlist
- Return list of sectionnames specified by sectionlist. Return value must be freed
-*/
-static char *exif_get_sectionlist(int sectionlist TSRMLS_DC)
-{
- int i, len=0;
- char *sections;
-
- for(i=0; i<SECTION_COUNT; i++) {
- len += strlen(exif_get_sectionname(i))+2;
- }
- sections = safe_emalloc(len, 1, 1);
- sections[0] = '\0';
- len = 0;
- for(i=0; i<SECTION_COUNT; i++) {
- if (sectionlist&(1<<i)) {
- sprintf(sections+len, "%s, ", exif_get_sectionname(i));
- len = strlen(sections);
- }
- }
- if (len>2)
- sections[len-2] = '\0';
- return sections;
-}
-/* }}} */
-
-/* {{{ struct image_info_type
- This structure stores Exif header image elements in a simple manner
- Used to store camera data as extracted from the various ways that it can be
- stored in a nexif header
-*/
-
-typedef struct {
- int type;
- size_t size;
- uchar *data;
-} file_section;
-
-typedef struct {
- int count;
- file_section *list;
-} file_section_list;
-
-typedef struct {
- image_filetype filetype;
- size_t width, height;
- size_t size;
- size_t offset;
- char *data;
-} thumbnail_data;
-
-typedef struct {
- char *value;
- size_t size;
- int tag;
-} xp_field_type;
-
-typedef struct {
- int count;
- xp_field_type *list;
-} xp_field_list;
-
-/* This structure is used to store a section of a Jpeg file. */
-typedef struct {
- php_stream *infile;
- char *FileName;
- time_t FileDateTime;
- size_t FileSize;
- image_filetype FileType;
- int Height, Width;
- int IsColor;
-
- char *make;
- char *model;
-
- float ApertureFNumber;
- float ExposureTime;
- double FocalplaneUnits;
- float CCDWidth;
- double FocalplaneXRes;
- size_t ExifImageWidth;
- float FocalLength;
- float Distance;
-
- int motorola_intel; /* 1 Motorola; 0 Intel */
-
- char *UserComment;
- int UserCommentLength;
- char *UserCommentEncoding;
- char *encode_unicode;
- char *decode_unicode_be;
- char *decode_unicode_le;
- char *encode_jis;
- char *decode_jis_be;
- char *decode_jis_le;
- char *Copyright;/* EXIF standard defines Copyright as "<Photographer> [ '\0' <Editor> ] ['\0']" */
- char *CopyrightPhotographer;
- char *CopyrightEditor;
-
- xp_field_list xp_fields;
-
- thumbnail_data Thumbnail;
- /* other */
- int sections_found; /* FOUND_<marker> */
- image_info_list info_list[SECTION_COUNT];
- /* for parsing */
- int read_thumbnail;
- int read_all;
- /* internal */
- file_section_list file;
-} image_info_type;
-/* }}} */
-
-/* {{{ exif_error_docref */
-static void exif_error_docref(const char *docref EXIFERR_DC, const image_info_type *ImageInfo, int type, const char *format, ...)
-{
- va_list args;
-
- va_start(args, format);
-#ifdef EXIF_DEBUG
- {
- char *buf;
-
- spprintf(&buf, 0, "%s(%d): %s", _file, _line, format);
- php_verror(docref, ImageInfo->FileName?ImageInfo->FileName:"", type, buf, args TSRMLS_CC);
- efree(buf);
- }
-#else
- php_verror(docref, ImageInfo->FileName?ImageInfo->FileName:"", type, format, args TSRMLS_CC);
-#endif
- va_end(args);
-}
-/* }}} */
-
-/* {{{ jpeg_sof_info
- */
-typedef struct {
- int bits_per_sample;
- size_t width;
- size_t height;
- int num_components;
-} jpeg_sof_info;
-/* }}} */
-
-/* {{{ exif_file_sections_add
- Add a file_section to image_info
- returns the used block or -1. if size>0 and data == NULL buffer of size is allocated
-*/
-static int exif_file_sections_add(image_info_type *ImageInfo, int type, size_t size, uchar *data)
-{
- file_section *tmp;
- int count = ImageInfo->file.count;
-
- tmp = erealloc(ImageInfo->file.list, (count+1)*sizeof(file_section));
- ImageInfo->file.list = tmp;
- ImageInfo->file.list[count].type = 0xFFFF;
- ImageInfo->file.list[count].data = NULL;
- ImageInfo->file.list[count].size = 0;
- ImageInfo->file.count = count+1;
- if (!size) {
- data = NULL;
- } else if (data == NULL) {
- data = emalloc(size);
- }
- ImageInfo->file.list[count].type = type;
- ImageInfo->file.list[count].data = data;
- ImageInfo->file.list[count].size = size;
- return count;
-}
-/* }}} */
-
-/* {{{ exif_file_sections_realloc
- Reallocate a file section returns 0 on success and -1 on failure
-*/
-static int exif_file_sections_realloc(image_info_type *ImageInfo, int section_index, size_t size TSRMLS_DC)
-{
- void *tmp;
-
- /* This is not a malloc/realloc check. It is a plausibility check for the
- * function parameters (requirements engineering).
- */
- if (section_index >= ImageInfo->file.count) {
- EXIF_ERRLOG_FSREALLOC(ImageInfo)
- return -1;
- }
- tmp = erealloc(ImageInfo->file.list[section_index].data, size);
- ImageInfo->file.list[section_index].data = tmp;
- ImageInfo->file.list[section_index].size = size;
- return 0;
-}
-/* }}} */
-
-/* {{{ exif_file_section_free
- Discard all file_sections in ImageInfo
-*/
-static int exif_file_sections_free(image_info_type *ImageInfo)
-{
- int i;
-
- if (ImageInfo->file.count) {
- for (i=0; i<ImageInfo->file.count; i++) {
- EFREE_IF(ImageInfo->file.list[i].data);
- }
- }
- EFREE_IF(ImageInfo->file.list);
- ImageInfo->file.count = 0;
- return TRUE;
-}
-/* }}} */
-
-/* {{{ exif_iif_add_value
- Add a value to image_info
-*/
-static void exif_iif_add_value(image_info_type *image_info, int section_index, char *name, int tag, int format, int length, void* value, int motorola_intel TSRMLS_DC)
-{
- size_t idex;
- void *vptr;
- image_info_value *info_value;
- image_info_data *info_data;
- image_info_data *list;
-
- if (length >= LONG_MAX) {
- return;
- }
-
- list = erealloc(image_info->info_list[section_index].list, (image_info->info_list[section_index].count+1)*sizeof(image_info_data));
- image_info->info_list[section_index].list = list;
-
- info_data = &image_info->info_list[section_index].list[image_info->info_list[section_index].count];
- info_data->tag = tag;
- info_data->format = format;
- info_data->length = length;
- info_data->name = estrdup(name);
- info_value = &info_data->value;
-
- switch (format) {
- case TAG_FMT_STRING:
- if (value) {
- length = php_strnlen(value, length);
- if (PG(magic_quotes_runtime)) {
- info_value->s = php_addslashes(value, length, &length, 0 TSRMLS_CC);
- } else {
- info_value->s = estrndup(value, length);
- }
- info_data->length = length;
- } else {
- info_data->length = 0;
- info_value->s = estrdup("");
- }
- break;
-
- default:
- /* Standard says more types possible but skip them...
- * but allow users to handle data if they know how to
- * So not return but use type UNDEFINED
- * return;
- */
- info_data->tag = TAG_FMT_UNDEFINED;/* otherwise not freed from memory */
- case TAG_FMT_SBYTE:
- case TAG_FMT_BYTE:
- /* in contrast to strings bytes do not need to allocate buffer for NULL if length==0 */
- if (!length)
- break;
- case TAG_FMT_UNDEFINED:
- if (value) {
- /* do not recompute length here */
- if (PG(magic_quotes_runtime)) {
- info_value->s = php_addslashes(value, length, &length, 0 TSRMLS_CC);
- } else {
- info_value->s = estrndup(value, length);
- }
- info_data->length = length;
- } else {
- info_data->length = 0;
- info_value->s = estrdup("");
- }
- break;
-
- case TAG_FMT_USHORT:
- case TAG_FMT_ULONG:
- case TAG_FMT_URATIONAL:
- case TAG_FMT_SSHORT:
- case TAG_FMT_SLONG:
- case TAG_FMT_SRATIONAL:
- case TAG_FMT_SINGLE:
- case TAG_FMT_DOUBLE:
- if (length==0) {
- break;
- } else
- if (length>1) {
- info_value->list = safe_emalloc(length, sizeof(image_info_value), 0);
- } else {
- info_value = &info_data->value;
- }
- for (idex=0,vptr=value; idex<(size_t)length; idex++,vptr=(char *) vptr + php_tiff_bytes_per_format[format]) {
- if (length>1) {
- info_value = &info_data->value.list[idex];
- }
- switch (format) {
- case TAG_FMT_USHORT:
- info_value->u = php_ifd_get16u(vptr, motorola_intel);
- break;
-
- case TAG_FMT_ULONG:
- info_value->u = php_ifd_get32u(vptr, motorola_intel);
- break;
-
- case TAG_FMT_URATIONAL:
- info_value->ur.num = php_ifd_get32u(vptr, motorola_intel);
- info_value->ur.den = php_ifd_get32u(4+(char *)vptr, motorola_intel);
- break;
-
- case TAG_FMT_SSHORT:
- info_value->i = php_ifd_get16s(vptr, motorola_intel);
- break;
-
- case TAG_FMT_SLONG:
- info_value->i = php_ifd_get32s(vptr, motorola_intel);
- break;
-
- case TAG_FMT_SRATIONAL:
- info_value->sr.num = php_ifd_get32u(vptr, motorola_intel);
- info_value->sr.den = php_ifd_get32u(4+(char *)vptr, motorola_intel);
- break;
-
- case TAG_FMT_SINGLE:
-#ifdef EXIF_DEBUG
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Found value of type single");
-#endif
- info_value->f = *(float *)value;
-
- case TAG_FMT_DOUBLE:
-#ifdef EXIF_DEBUG
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Found value of type double");
-#endif
- info_value->d = *(double *)value;
- break;
- }
- }
- }
- image_info->sections_found |= 1<<section_index;
- image_info->info_list[section_index].count++;
-}
-/* }}} */
-
-/* {{{ exif_iif_add_tag
- Add a tag from IFD to image_info
-*/
-static void exif_iif_add_tag(image_info_type *image_info, int section_index, char *name, int tag, int format, size_t length, void* value TSRMLS_DC)
-{
- exif_iif_add_value(image_info, section_index, name, tag, format, (int)length, value, image_info->motorola_intel TSRMLS_CC);
-}
-/* }}} */
-
-/* {{{ exif_iif_add_int
- Add an int value to image_info
-*/
-static void exif_iif_add_int(image_info_type *image_info, int section_index, char *name, int value TSRMLS_DC)
-{
- image_info_data *info_data;
- image_info_data *list;
-
- list = erealloc(image_info->info_list[section_index].list, (image_info->info_list[section_index].count+1)*sizeof(image_info_data));
- image_info->info_list[section_index].list = list;
-
- info_data = &image_info->info_list[section_index].list[image_info->info_list[section_index].count];
- info_data->tag = TAG_NONE;
- info_data->format = TAG_FMT_SLONG;
- info_data->length = 1;
- info_data->name = estrdup(name);
- info_data->value.i = value;
- image_info->sections_found |= 1<<section_index;
- image_info->info_list[section_index].count++;
-}
-/* }}} */
-
-/* {{{ exif_iif_add_str
- Add a string value to image_info MUST BE NUL TERMINATED
-*/
-static void exif_iif_add_str(image_info_type *image_info, int section_index, char *name, char *value TSRMLS_DC)
-{
- image_info_data *info_data;
- image_info_data *list;
-
- if (value) {
- list = erealloc(image_info->info_list[section_index].list, (image_info->info_list[section_index].count+1)*sizeof(image_info_data));
- image_info->info_list[section_index].list = list;
- info_data = &image_info->info_list[section_index].list[image_info->info_list[section_index].count];
- info_data->tag = TAG_NONE;
- info_data->format = TAG_FMT_STRING;
- info_data->length = 1;
- info_data->name = estrdup(name);
- if (PG(magic_quotes_runtime)) {
- info_data->value.s = php_addslashes(value, strlen(value), NULL, 0 TSRMLS_CC);
- } else {
- info_data->value.s = estrdup(value);
- }
- image_info->sections_found |= 1<<section_index;
- image_info->info_list[section_index].count++;
- }
-}
-/* }}} */
-
-/* {{{ exif_iif_add_fmt
- Add a format string value to image_info MUST BE NUL TERMINATED
-*/
-static void exif_iif_add_fmt(image_info_type *image_info, int section_index, char *name TSRMLS_DC, char *value, ...)
-{
- char *tmp;
- va_list arglist;
-
- va_start(arglist, value);
- if (value) {
- vspprintf(&tmp, 0, value, arglist);
- exif_iif_add_str(image_info, section_index, name, tmp TSRMLS_CC);
- efree(tmp);
- }
- va_end(arglist);
-}
-/* }}} */
-
-/* {{{ exif_iif_add_str
- Add a string value to image_info MUST BE NUL TERMINATED
-*/
-static void exif_iif_add_buffer(image_info_type *image_info, int section_index, char *name, int length, char *value TSRMLS_DC)
-{
- image_info_data *info_data;
- image_info_data *list;
-
- if (value) {
- list = erealloc(image_info->info_list[section_index].list, (image_info->info_list[section_index].count+1)*sizeof(image_info_data));
- image_info->info_list[section_index].list = list;
- info_data = &image_info->info_list[section_index].list[image_info->info_list[section_index].count];
- info_data->tag = TAG_NONE;
- info_data->format = TAG_FMT_UNDEFINED;
- info_data->length = length;
- info_data->name = estrdup(name);
- if (PG(magic_quotes_runtime)) {
-#ifdef EXIF_DEBUG
- exif_error_docref(NULL EXIFERR_CC, image_info, E_NOTICE, "Adding %s as buffer%s", name, exif_char_dump(value, length, 0));
-#endif
- info_data->value.s = php_addslashes(value, length, &length, 0 TSRMLS_CC);
- info_data->length = length;
- } else {
- info_data->value.s = safe_emalloc(length, 1, 1);
- memcpy(info_data->value.s, value, length);
- info_data->value.s[length] = 0;
- }
- image_info->sections_found |= 1<<section_index;
- image_info->info_list[section_index].count++;
- }
-}
-/* }}} */
-
-/* {{{ exif_iif_free
- Free memory allocated for image_info
-*/
-static void exif_iif_free(image_info_type *image_info, int section_index) {
- int i;
- void *f; /* faster */
-
- if (image_info->info_list[section_index].count) {
- for (i=0; i < image_info->info_list[section_index].count; i++) {
- if ((f=image_info->info_list[section_index].list[i].name) != NULL) {
- efree(f);
- }
- switch(image_info->info_list[section_index].list[i].format) {
- case TAG_FMT_SBYTE:
- case TAG_FMT_BYTE:
- /* in contrast to strings bytes do not need to allocate buffer for NULL if length==0 */
- if (image_info->info_list[section_index].list[i].length<1)
- break;
- default:
- case TAG_FMT_UNDEFINED:
- case TAG_FMT_STRING:
- if ((f=image_info->info_list[section_index].list[i].value.s) != NULL) {
- efree(f);
- }
- break;
-
- case TAG_FMT_USHORT:
- case TAG_FMT_ULONG:
- case TAG_FMT_URATIONAL:
- case TAG_FMT_SSHORT:
- case TAG_FMT_SLONG:
- case TAG_FMT_SRATIONAL:
- case TAG_FMT_SINGLE:
- case TAG_FMT_DOUBLE:
- /* nothing to do here */
- if (image_info->info_list[section_index].list[i].length > 1) {
- if ((f=image_info->info_list[section_index].list[i].value.list) != NULL) {
- efree(f);
- }
- }
- break;
- }
- }
- }
- EFREE_IF(image_info->info_list[section_index].list);
-}
-/* }}} */
-
-/* {{{ add_assoc_image_info
- * Add image_info to associative array value. */
-static void add_assoc_image_info(pval *value, int sub_array, image_info_type *image_info, int section_index TSRMLS_DC)
-{
- char buffer[64], *val, *name, uname[64];
- int i, ap, l, b, idx=0, unknown=0;
-#ifdef EXIF_DEBUG
- int info_tag;
-#endif
- image_info_value *info_value;
- image_info_data *info_data;
- pval *tmpi, *array = NULL;
-
-#ifdef EXIF_DEBUG
-/* php_error_docref(NULL TSRMLS_CC, E_NOTICE, "Adding %d infos from section %s", image_info->info_list[section_index].count, exif_get_sectionname(section_index));*/
-#endif
- if (image_info->info_list[section_index].count) {
- if (sub_array) {
- MAKE_STD_ZVAL(tmpi);
- array_init(tmpi);
- } else {
- tmpi = value;
- }
-
- for(i=0; i<image_info->info_list[section_index].count; i++) {
- info_data = &image_info->info_list[section_index].list[i];
-#ifdef EXIF_DEBUG
- info_tag = info_data->tag; /* conversion */
-#endif
- info_value = &info_data->value;
- if (!(name = info_data->name)) {
- snprintf(uname, sizeof(uname), "%d", unknown++);
- name = uname;
- }
-#ifdef EXIF_DEBUG
-/* php_error_docref(NULL TSRMLS_CC, E_NOTICE, "Adding infos: tag(0x%04X,%12s,L=0x%04X): %s", info_tag, exif_get_tagname(info_tag, buffer, -12, exif_get_tag_table(section_index) TSRMLS_CC), info_data->length, info_data->format==TAG_FMT_STRING?(info_value&&info_value->s?info_value->s:"<no data>"):exif_get_tagformat(info_data->format));*/
-#endif
- if (info_data->length==0) {
- add_assoc_null(tmpi, name);
- } else {
- switch (info_data->format) {
- default:
- /* Standard says more types possible but skip them...
- * but allow users to handle data if they know how to
- * So not return but use type UNDEFINED
- * return;
- */
- case TAG_FMT_BYTE:
- case TAG_FMT_SBYTE:
- case TAG_FMT_UNDEFINED:
- if (!info_value->s) {
- add_assoc_stringl(tmpi, name, "", 0, 1);
- } else {
- add_assoc_stringl(tmpi, name, info_value->s, info_data->length, 1);
- }
- break;
-
- case TAG_FMT_STRING:
- if (!(val = info_value->s)) {
- val = "";
- }
- if (section_index==SECTION_COMMENT) {
- add_index_string(tmpi, idx++, val, 1);
- } else {
- add_assoc_string(tmpi, name, val, 1);
- }
- break;
-
- case TAG_FMT_URATIONAL:
- case TAG_FMT_SRATIONAL:
- /*case TAG_FMT_BYTE:
- case TAG_FMT_SBYTE:*/
- case TAG_FMT_USHORT:
- case TAG_FMT_SSHORT:
- case TAG_FMT_SINGLE:
- case TAG_FMT_DOUBLE:
- case TAG_FMT_ULONG:
- case TAG_FMT_SLONG:
- /* now the rest, first see if it becomes an array */
- if ((l = info_data->length) > 1) {
- array = NULL;
- MAKE_STD_ZVAL(array);
- array_init(array);
- }
- for(ap=0; ap<l; ap++) {
- if (l>1) {
- info_value = &info_data->value.list[ap];
- }
- switch (info_data->format) {
- case TAG_FMT_BYTE:
- if (l>1) {
- info_value = &info_data->value;
- for (b=0;b<l;b++) {
- add_index_long(array, b, (int)(info_value->s[b]));
- }
- break;
- }
- case TAG_FMT_USHORT:
- case TAG_FMT_ULONG:
- if (l==1) {
- add_assoc_long(tmpi, name, (int)info_value->u);
- } else {
- add_index_long(array, ap, (int)info_value->u);
- }
- break;
-
- case TAG_FMT_URATIONAL:
- snprintf(buffer, sizeof(buffer), "%i/%i", info_value->ur.num, info_value->ur.den);
- if (l==1) {
- add_assoc_string(tmpi, name, buffer, 1);
- } else {
- add_index_string(array, ap, buffer, 1);
- }
- break;
-
- case TAG_FMT_SBYTE:
- if (l>1) {
- info_value = &info_data->value;
- for (b=0;b<l;b++) {
- add_index_long(array, ap, (int)info_value->s[b]);
- }
- break;
- }
- case TAG_FMT_SSHORT:
- case TAG_FMT_SLONG:
- if (l==1) {
- add_assoc_long(tmpi, name, info_value->i);
- } else {
- add_index_long(array, ap, info_value->i);
- }
- break;
-
- case TAG_FMT_SRATIONAL:
- snprintf(buffer, sizeof(buffer), "%i/%i", info_value->sr.num, info_value->sr.den);
- if (l==1) {
- add_assoc_string(tmpi, name, buffer, 1);
- } else {
- add_index_string(array, ap, buffer, 1);
- }
- break;
-
- case TAG_FMT_SINGLE:
- if (l==1) {
- add_assoc_double(tmpi, name, info_value->f);
- } else {
- add_index_double(array, ap, info_value->f);
- }
- break;
-
- case TAG_FMT_DOUBLE:
- if (l==1) {
- add_assoc_double(tmpi, name, info_value->d);
- } else {
- add_index_double(array, ap, info_value->d);
- }
- break;
- }
- info_value = &info_data->value.list[ap];
- }
- if (l>1) {
- add_assoc_zval(tmpi, name, array);
- }
- break;
- }
- }
- }
- if (sub_array) {
- add_assoc_zval(value, exif_get_sectionname(section_index), tmpi);
- }
- }
-}
-/* }}} */
-
-/* {{{ Markers
- JPEG markers consist of one or more 0xFF bytes, followed by a marker
- code byte (which is not an FF). Here are the marker codes of interest
- in this program. (See jdmarker.c for a more complete list.)
-*/
-
-#define M_TEM 0x01 /* temp for arithmetic coding */
-#define M_RES 0x02 /* reserved */
-#define M_SOF0 0xC0 /* Start Of Frame N */
-#define M_SOF1 0xC1 /* N indicates which compression process */
-#define M_SOF2 0xC2 /* Only SOF0-SOF2 are now in common use */
-#define M_SOF3 0xC3
-#define M_DHT 0xC4
-#define M_SOF5 0xC5 /* NB: codes C4 and CC are NOT SOF markers */
-#define M_SOF6 0xC6
-#define M_SOF7 0xC7
-#define M_JPEG 0x08 /* reserved for extensions */
-#define M_SOF9 0xC9
-#define M_SOF10 0xCA
-#define M_SOF11 0xCB
-#define M_DAC 0xCC /* arithmetic table */
-#define M_SOF13 0xCD
-#define M_SOF14 0xCE
-#define M_SOF15 0xCF
-#define M_RST0 0xD0 /* restart segment */
-#define M_RST1 0xD1
-#define M_RST2 0xD2
-#define M_RST3 0xD3
-#define M_RST4 0xD4
-#define M_RST5 0xD5
-#define M_RST6 0xD6
-#define M_RST7 0xD7
-#define M_SOI 0xD8 /* Start Of Image (beginning of datastream) */
-#define M_EOI 0xD9 /* End Of Image (end of datastream) */
-#define M_SOS 0xDA /* Start Of Scan (begins compressed data) */
-#define M_DQT 0xDB
-#define M_DNL 0xDC
-#define M_DRI 0xDD
-#define M_DHP 0xDE
-#define M_EXP 0xDF
-#define M_APP0 0xE0 /* JPEG: 'JFIFF' AND (additional 'JFXX') */
-#define M_EXIF 0xE1 /* Exif Attribute Information */
-#define M_APP2 0xE2 /* Flash Pix Extension Data? */
-#define M_APP3 0xE3
-#define M_APP4 0xE4
-#define M_APP5 0xE5
-#define M_APP6 0xE6
-#define M_APP7 0xE7
-#define M_APP8 0xE8
-#define M_APP9 0xE9
-#define M_APP10 0xEA
-#define M_APP11 0xEB
-#define M_APP12 0xEC
-#define M_APP13 0xED /* IPTC International Press Telecommunications Council */
-#define M_APP14 0xEE /* Software, Copyright? */
-#define M_APP15 0xEF
-#define M_JPG0 0xF0
-#define M_JPG1 0xF1
-#define M_JPG2 0xF2
-#define M_JPG3 0xF3
-#define M_JPG4 0xF4
-#define M_JPG5 0xF5
-#define M_JPG6 0xF6
-#define M_JPG7 0xF7
-#define M_JPG8 0xF8
-#define M_JPG9 0xF9
-#define M_JPG10 0xFA
-#define M_JPG11 0xFB
-#define M_JPG12 0xFC
-#define M_JPG13 0xFD
-#define M_COM 0xFE /* COMment */
-
-#define M_PSEUDO 0x123 /* Extra value. */
-
-/* }}} */
-
-/* {{{ jpeg2000 markers
- */
-/* Markers x30 - x3F do not have a segment */
-/* Markers x00, x01, xFE, xC0 - xDF ISO/IEC 10918-1 -> M_<xx> */
-/* Markers xF0 - xF7 ISO/IEC 10918-3 */
-/* Markers xF7 - xF8 ISO/IEC 14495-1 */
-/* XY=Main/Tile-header:(R:required, N:not_allowed, O:optional, L:last_marker) */
-#define JC_SOC 0x4F /* NN, Start of codestream */
-#define JC_SIZ 0x51 /* RN, Image and tile size */
-#define JC_COD 0x52 /* RO, Codeing style defaulte */
-#define JC_COC 0x53 /* OO, Coding style component */
-#define JC_TLM 0x55 /* ON, Tile part length main header */
-#define JC_PLM 0x57 /* ON, Packet length main header */
-#define JC_PLT 0x58 /* NO, Packet length tile part header */
-#define JC_QCD 0x5C /* RO, Quantization default */
-#define JC_QCC 0x5D /* OO, Quantization component */
-#define JC_RGN 0x5E /* OO, Region of interest */
-#define JC_POD 0x5F /* OO, Progression order default */
-#define JC_PPM 0x60 /* ON, Packed packet headers main header */
-#define JC_PPT 0x61 /* NO, Packet packet headers tile part header */
-#define JC_CME 0x64 /* OO, Comment: "LL E <text>" E=0:binary, E=1:ascii */
-#define JC_SOT 0x90 /* NR, Start of tile */
-#define JC_SOP 0x91 /* NO, Start of packeter default */
-#define JC_EPH 0x92 /* NO, End of packet header */
-#define JC_SOD 0x93 /* NL, Start of data */
-#define JC_EOC 0xD9 /* NN, End of codestream */
-/* }}} */
-
-/* {{{ exif_process_COM
- Process a COM marker.
- We want to print out the marker contents as legible text;
- we must guard against random junk and varying newline representations.
-*/
-static void exif_process_COM (image_info_type *image_info, char *value, size_t length TSRMLS_DC)
-{
- exif_iif_add_tag(image_info, SECTION_COMMENT, "Comment", TAG_COMPUTED_VALUE, TAG_FMT_STRING, length-2, value+2 TSRMLS_CC);
-}
-/* }}} */
-
-/* {{{ exif_process_CME
- Process a CME marker.
- We want to print out the marker contents as legible text;
- we must guard against random junk and varying newline representations.
-*/
-#ifdef EXIF_JPEG2000
-static void exif_process_CME (image_info_type *image_info, char *value, size_t length TSRMLS_DC)
-{
- if (length>3) {
- switch(value[2]) {
- case 0:
- exif_iif_add_tag(image_info, SECTION_COMMENT, "Comment", TAG_COMPUTED_VALUE, TAG_FMT_UNDEFINED, length, value TSRMLS_CC);
- break;
- case 1:
- exif_iif_add_tag(image_info, SECTION_COMMENT, "Comment", TAG_COMPUTED_VALUE, TAG_FMT_STRING, length, value);
- break;
- default:
- php_error_docref(NULL TSRMLS_CC, E_NOTICE, "Undefined JPEG2000 comment encoding");
- break;
- }
- } else {
- exif_iif_add_tag(image_info, SECTION_COMMENT, "Comment", TAG_COMPUTED_VALUE, TAG_FMT_UNDEFINED, 0, NULL);
- php_error_docref(NULL TSRMLS_CC, E_NOTICE, "JPEG2000 comment section to small");
- }
-}
-#endif
-/* }}} */
-
-/* {{{ exif_process_SOFn
- * Process a SOFn marker. This is useful for the image dimensions */
-static void exif_process_SOFn (uchar *Data, int marker, jpeg_sof_info *result)
-{
-/* 0xFF SOSn SectLen(2) Bits(1) Height(2) Width(2) Channels(1) 3*Channels (1) */
- result->bits_per_sample = Data[2];
- result->height = php_jpg_get16(Data+3);
- result->width = php_jpg_get16(Data+5);
- result->num_components = Data[7];
-
-/* switch (marker) {
- case M_SOF0: process = "Baseline"; break;
- case M_SOF1: process = "Extended sequential"; break;
- case M_SOF2: process = "Progressive"; break;
- case M_SOF3: process = "Lossless"; break;
- case M_SOF5: process = "Differential sequential"; break;
- case M_SOF6: process = "Differential progressive"; break;
- case M_SOF7: process = "Differential lossless"; break;
- case M_SOF9: process = "Extended sequential, arithmetic coding"; break;
- case M_SOF10: process = "Progressive, arithmetic coding"; break;
- case M_SOF11: process = "Lossless, arithmetic coding"; break;
- case M_SOF13: process = "Differential sequential, arithmetic coding"; break;
- case M_SOF14: process = "Differential progressive, arithmetic coding"; break;
- case M_SOF15: process = "Differential lossless, arithmetic coding"; break;
- default: process = "Unknown"; break;
- }*/
-}
-/* }}} */
-
-/* forward declarations */
-static int exif_process_IFD_in_JPEG(image_info_type *ImageInfo, char *dir_start, char *offset_base, size_t IFDlength, size_t displacement, int section_index TSRMLS_DC);
-static int exif_process_IFD_TAG( image_info_type *ImageInfo, char *dir_entry, char *offset_base, size_t IFDlength, size_t displacement, int section_index, int ReadNextIFD, tag_table_type tag_table TSRMLS_DC);
-
-/* {{{ exif_get_markername
- Get name of marker */
-#ifdef EXIF_DEBUG
-static char * exif_get_markername(int marker)
-{
- switch(marker) {
- case 0xC0: return "SOF0";
- case 0xC1: return "SOF1";
- case 0xC2: return "SOF2";
- case 0xC3: return "SOF3";
- case 0xC4: return "DHT";
- case 0xC5: return "SOF5";
- case 0xC6: return "SOF6";
- case 0xC7: return "SOF7";
- case 0xC9: return "SOF9";
- case 0xCA: return "SOF10";
- case 0xCB: return "SOF11";
- case 0xCD: return "SOF13";
- case 0xCE: return "SOF14";
- case 0xCF: return "SOF15";
- case 0xD8: return "SOI";
- case 0xD9: return "EOI";
- case 0xDA: return "SOS";
- case 0xDB: return "DQT";
- case 0xDC: return "DNL";
- case 0xDD: return "DRI";
- case 0xDE: return "DHP";
- case 0xDF: return "EXP";
- case 0xE0: return "APP0";
- case 0xE1: return "EXIF";
- case 0xE2: return "FPIX";
- case 0xE3: return "APP3";
- case 0xE4: return "APP4";
- case 0xE5: return "APP5";
- case 0xE6: return "APP6";
- case 0xE7: return "APP7";
- case 0xE8: return "APP8";
- case 0xE9: return "APP9";
- case 0xEA: return "APP10";
- case 0xEB: return "APP11";
- case 0xEC: return "APP12";
- case 0xED: return "APP13";
- case 0xEE: return "APP14";
- case 0xEF: return "APP15";
- case 0xF0: return "JPG0";
- case 0xFD: return "JPG13";
- case 0xFE: return "COM";
- case 0x01: return "TEM";
- }
- return "Unknown";
-}
-#endif
-/* }}} */
-
-/* {{{ proto string exif_tagname(index)
- Get headername for index or false if not defined */
-PHP_FUNCTION(exif_tagname)
-{
- pval **p_num;
- int tag, ac = ZEND_NUM_ARGS();
- char *szTemp;
-
- if ((ac < 1 || ac > 1) || zend_get_parameters_ex(ac, &p_num) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long_ex(p_num);
- tag = Z_LVAL_PP(p_num);
- szTemp = exif_get_tagname(tag, NULL, 0, tag_table_IFD TSRMLS_CC);
- if (tag<0 || !szTemp || !szTemp[0]) {
- RETURN_BOOL(FALSE);
- } else {
- RETURN_STRING(szTemp, 1)
- }
-}
-/* }}} */
-
-/* {{{ exif_ifd_make_value
- * Create a value for an ifd from an info_data pointer */
-static void* exif_ifd_make_value(image_info_data *info_data, int motorola_intel TSRMLS_DC) {
- size_t byte_count;
- char *value_ptr, *data_ptr;
- size_t i;
-
- image_info_value *info_value;
-
- byte_count = php_tiff_bytes_per_format[info_data->format] * info_data->length;
- value_ptr = emalloc(max(byte_count, 4));
- memset(value_ptr, 0, 4);
- if (!info_data->length) {
- return value_ptr;
- }
- if (info_data->format == TAG_FMT_UNDEFINED || info_data->format == TAG_FMT_STRING
- || (byte_count>1 && (info_data->format == TAG_FMT_BYTE || info_data->format == TAG_FMT_SBYTE))
- ) {
- memmove(value_ptr, info_data->value.s, byte_count);
- return value_ptr;
- } else if (info_data->format == TAG_FMT_BYTE) {
- *value_ptr = info_data->value.u;
- return value_ptr;
- } else if (info_data->format == TAG_FMT_SBYTE) {
- *value_ptr = info_data->value.i;
- return value_ptr;
- } else {
- data_ptr = value_ptr;
- for(i=0; i<info_data->length; i++) {
- if (info_data->length==1) {
- info_value = &info_data->value;
- } else {
- info_value = &info_data->value.list[i];
- }
- switch(info_data->format) {
- case TAG_FMT_USHORT:
- php_ifd_set16u(data_ptr, info_value->u, motorola_intel);
- data_ptr += 2;
- break;
- case TAG_FMT_ULONG:
- php_ifd_set32u(data_ptr, info_value->u, motorola_intel);
- data_ptr += 4;
- break;
- case TAG_FMT_SSHORT:
- php_ifd_set16u(data_ptr, info_value->i, motorola_intel);
- data_ptr += 2;
- break;
- case TAG_FMT_SLONG:
- php_ifd_set32u(data_ptr, info_value->i, motorola_intel);
- data_ptr += 4;
- break;
- case TAG_FMT_URATIONAL:
- php_ifd_set32u(data_ptr, info_value->sr.num, motorola_intel);
- php_ifd_set32u(data_ptr+4, info_value->sr.den, motorola_intel);
- data_ptr += 8;
- break;
- case TAG_FMT_SRATIONAL:
- php_ifd_set32u(data_ptr, info_value->ur.num, motorola_intel);
- php_ifd_set32u(data_ptr+4, info_value->ur.den, motorola_intel);
- data_ptr += 8;
- break;
- case TAG_FMT_SINGLE:
- memmove(data_ptr, &info_data->value.f, byte_count);
- data_ptr += 4;
- break;
- case TAG_FMT_DOUBLE:
- memmove(data_ptr, &info_data->value.d, byte_count);
- data_ptr += 8;
- break;
- }
- }
- }
- return value_ptr;
-}
-/* }}} */
-
-/* {{{ exif_thumbnail_build
- * Check and build thumbnail */
-static void exif_thumbnail_build(image_info_type *ImageInfo TSRMLS_DC) {
- size_t new_size, new_move, new_value;
- char *new_data;
- void *value_ptr;
- int i, byte_count;
- image_info_list *info_list;
- image_info_data *info_data;
-#ifdef EXIF_DEBUG
- char tagname[64];
-#endif
-
- if (!ImageInfo->read_thumbnail || !ImageInfo->Thumbnail.offset || !ImageInfo->Thumbnail.size) {
- return; /* ignore this call */
- }
-#ifdef EXIF_DEBUG
- exif_error_docref(NULL EXIFERR_CC, ImageInfo, E_NOTICE, "Thumbnail: filetype = %d", ImageInfo->Thumbnail.filetype);
-#endif
- switch(ImageInfo->Thumbnail.filetype) {
- default:
- case IMAGE_FILETYPE_JPEG:
- /* done */
- break;
- case IMAGE_FILETYPE_TIFF_II:
- case IMAGE_FILETYPE_TIFF_MM:
- info_list = &ImageInfo->info_list[SECTION_THUMBNAIL];
- new_size = 8 + 2 + info_list->count * 12 + 4;
-#ifdef EXIF_DEBUG
- exif_error_docref(NULL EXIFERR_CC, ImageInfo, E_NOTICE, "Thumbnail: size of signature + directory(%d): 0x%02X", info_list->count, new_size);
-#endif
- new_value= new_size; /* offset for ifd values outside ifd directory */
- for (i=0; i<info_list->count; i++) {
- info_data = &info_list->list[i];
- byte_count = php_tiff_bytes_per_format[info_data->format] * info_data->length;
- if (byte_count > 4) {
- new_size += byte_count;
- }
- }
- new_move = new_size;
- new_data = erealloc(ImageInfo->Thumbnail.data, ImageInfo->Thumbnail.size+new_size);
- ImageInfo->Thumbnail.data = new_data;
- memmove(ImageInfo->Thumbnail.data + new_move, ImageInfo->Thumbnail.data, ImageInfo->Thumbnail.size);
- ImageInfo->Thumbnail.size += new_size;
- /* fill in data */
- if (ImageInfo->motorola_intel) {
- memmove(new_data, "MM\x00\x2a\x00\x00\x00\x08", 8);
- } else {
- memmove(new_data, "II\x2a\x00\x08\x00\x00\x00", 8);
- }
- new_data += 8;
- php_ifd_set16u(new_data, info_list->count, ImageInfo->motorola_intel);
- new_data += 2;
- for (i=0; i<info_list->count; i++) {
- info_data = &info_list->list[i];
- byte_count = php_tiff_bytes_per_format[info_data->format] * info_data->length;
-#ifdef EXIF_DEBUG
- exif_error_docref(NULL EXIFERR_CC, ImageInfo, E_NOTICE, "Thumbnail: process tag(x%04X=%s): %s%s (%d bytes)", info_data->tag, exif_get_tagname(info_data->tag, tagname, -12, tag_table_IFD TSRMLS_CC), (info_data->length>1)&&info_data->format!=TAG_FMT_UNDEFINED&&info_data->format!=TAG_FMT_STRING?"ARRAY OF ":"", exif_get_tagformat(info_data->format), byte_count);
-#endif
- if (info_data->tag==TAG_STRIP_OFFSETS || info_data->tag==TAG_JPEG_INTERCHANGE_FORMAT) {
- php_ifd_set16u(new_data + 0, info_data->tag, ImageInfo->motorola_intel);
- php_ifd_set16u(new_data + 2, TAG_FMT_ULONG, ImageInfo->motorola_intel);
- php_ifd_set32u(new_data + 4, 1, ImageInfo->motorola_intel);
- php_ifd_set32u(new_data + 8, new_move, ImageInfo->motorola_intel);
- } else {
- php_ifd_set16u(new_data + 0, info_data->tag, ImageInfo->motorola_intel);
- php_ifd_set16u(new_data + 2, info_data->format, ImageInfo->motorola_intel);
- php_ifd_set32u(new_data + 4, info_data->length, ImageInfo->motorola_intel);
- value_ptr = exif_ifd_make_value(info_data, ImageInfo->motorola_intel TSRMLS_CC);
- if (byte_count <= 4) {
- memmove(new_data+8, value_ptr, 4);
- } else {
- php_ifd_set32u(new_data+8, new_value, ImageInfo->motorola_intel);
-#ifdef EXIF_DEBUG
- exif_error_docref(NULL EXIFERR_CC, ImageInfo, E_NOTICE, "Thumbnail: writing with value offset: 0x%04X + 0x%02X", new_value, byte_count);
-#endif
- memmove(ImageInfo->Thumbnail.data+new_value, value_ptr, byte_count);
- new_value += byte_count;
- }
- efree(value_ptr);
- }
- new_data += 12;
- }
- memset(new_data, 0, 4); /* next ifd pointer */
-#ifdef EXIF_DEBUG
- exif_error_docref(NULL EXIFERR_CC, ImageInfo, E_NOTICE, "Thumbnail: created");
-#endif
- break;
- }
-}
-/* }}} */
-
-/* {{{ exif_thumbnail_extract
- * Grab the thumbnail, corrected */
-static void exif_thumbnail_extract(image_info_type *ImageInfo, char *offset, size_t length TSRMLS_DC) {
- if (ImageInfo->Thumbnail.data) {
- exif_error_docref("exif_read_data#error_mult_thumb" EXIFERR_CC, ImageInfo, E_WARNING, "Multiple possible thumbnails");
- return; /* Should not happen */
- }
- if (!ImageInfo->read_thumbnail) {
- return; /* ignore this call */
- }
- /* according to exif2.1, the thumbnail is not supposed to be greater than 64K */
- if (ImageInfo->Thumbnail.size >= 65536
- || ImageInfo->Thumbnail.size <= 0
- || ImageInfo->Thumbnail.offset <= 0
- ) {
- exif_error_docref(NULL EXIFERR_CC, ImageInfo, E_WARNING, "Illegal thumbnail size/offset");
- return;
- }
- /* Check to make sure we are not going to go past the ExifLength */
- if ((ImageInfo->Thumbnail.offset + ImageInfo->Thumbnail.size) > length) {
- EXIF_ERRLOG_THUMBEOF(ImageInfo)
- return;
- }
- ImageInfo->Thumbnail.data = estrndup(offset + ImageInfo->Thumbnail.offset, ImageInfo->Thumbnail.size);
- exif_thumbnail_build(ImageInfo TSRMLS_CC);
-}
-/* }}} */
-
-/* {{{ exif_process_undefined
- * Copy a string/buffer in Exif header to a character string and return length of allocated buffer if any. */
-static int exif_process_undefined(char **result, char *value, size_t byte_count TSRMLS_DC) {
- /* we cannot use strlcpy - here the problem is that we have to copy NUL
- * chars up to byte_count, we also have to add a single NUL character to
- * force end of string.
- * estrndup does not return length
- */
- if (byte_count) {
- (*result) = estrndup(value, byte_count); /* NULL @ byte_count!!! */
- return byte_count+1;
- }
- return 0;
-}
-/* }}} */
-
-/* {{{ exif_process_string_raw
- * Copy a string in Exif header to a character string returns length of allocated buffer if any. */
-#if !EXIF_USE_MBSTRING
-static int exif_process_string_raw(char **result, char *value, size_t byte_count) {
- /* we cannot use strlcpy - here the problem is that we have to copy NUL
- * chars up to byte_count, we also have to add a single NUL character to
- * force end of string.
- */
- if (byte_count) {
- (*result) = safe_emalloc(byte_count, 1, 1);
- memcpy(*result, value, byte_count);
- (*result)[byte_count] = '\0';
- return byte_count+1;
- }
- return 0;
-}
-#endif
-/* }}} */
-
-/* {{{ exif_process_string
- * Copy a string in Exif header to a character string and return length of allocated buffer if any.
- * In contrast to exif_process_string this function does allways return a string buffer */
-static int exif_process_string(char **result, char *value, size_t byte_count TSRMLS_DC) {
- /* we cannot use strlcpy - here the problem is that we cannot use strlen to
- * determin length of string and we cannot use strlcpy with len=byte_count+1
- * because then we might get into an EXCEPTION if we exceed an allocated
- * memory page...so we use php_strnlen in conjunction with memcpy and add the NUL
- * char.
- * estrdup would sometimes allocate more memory and does not return length
- */
- if ((byte_count=php_strnlen(value, byte_count)) > 0) {
- return exif_process_undefined(result, value, byte_count TSRMLS_CC);
- }
- (*result) = estrndup("", 1); /* force empty string */
- return byte_count+1;
-}
-/* }}} */
-
-/* {{{ exif_process_user_comment
- * Process UserComment in IFD. */
-static int exif_process_user_comment(image_info_type *ImageInfo, char **pszInfoPtr, char **pszEncoding, char *szValuePtr, int ByteCount TSRMLS_DC)
-{
- int a;
-
-#if EXIF_USE_MBSTRING
- char *decode;
- size_t len;;
-#endif
-
- *pszEncoding = NULL;
- /* Copy the comment */
- if (ByteCount>=8) {
- if (!memcmp(szValuePtr, "UNICODE\0", 8)) {
- *pszEncoding = estrdup((const char*)szValuePtr);
- szValuePtr = szValuePtr+8;
- ByteCount -= 8;
-#if EXIF_USE_MBSTRING
- /* First try to detect BOM: ZERO WIDTH NOBREAK SPACE (FEFF 16)
- * since we have no encoding support for the BOM yet we skip that.
- */
- if (!memcmp(szValuePtr, "\xFE\xFF", 2)) {
- decode = "UCS-2BE";
- szValuePtr = szValuePtr+2;
- ByteCount -= 2;
- } else if (!memcmp(szValuePtr, "\xFF\xFE", 2)) {
- decode = "UCS-2LE";
- szValuePtr = szValuePtr+2;
- ByteCount -= 2;
- } else if (ImageInfo->motorola_intel) {
- decode = ImageInfo->decode_unicode_be;
- } else {
- decode = ImageInfo->decode_unicode_le;
- }
- *pszInfoPtr = php_mb_convert_encoding(szValuePtr, ByteCount, ImageInfo->encode_unicode, decode, &len TSRMLS_CC);
- return len;
-#else
- return exif_process_string_raw(pszInfoPtr, szValuePtr, ByteCount);
-#endif
- } else
- if (!memcmp(szValuePtr, "ASCII\0\0\0", 8)) {
- *pszEncoding = estrdup((const char*)szValuePtr);
- szValuePtr = szValuePtr+8;
- ByteCount -= 8;
- } else
- if (!memcmp(szValuePtr, "JIS\0\0\0\0\0", 8)) {
- /* JIS should be tanslated to MB or we leave it to the user - leave it to the user */
- *pszEncoding = estrdup((const char*)szValuePtr);
- szValuePtr = szValuePtr+8;
- ByteCount -= 8;
-#if EXIF_USE_MBSTRING
- if (ImageInfo->motorola_intel) {
- *pszInfoPtr = php_mb_convert_encoding(szValuePtr, ByteCount, ImageInfo->encode_jis, ImageInfo->decode_jis_be, &len TSRMLS_CC);
- } else {
- *pszInfoPtr = php_mb_convert_encoding(szValuePtr, ByteCount, ImageInfo->encode_jis, ImageInfo->decode_jis_le, &len TSRMLS_CC);
- }
- return len;
-#else
- return exif_process_string_raw(pszInfoPtr, szValuePtr, ByteCount);
-#endif
- } else
- if (!memcmp(szValuePtr, "\0\0\0\0\0\0\0\0", 8)) {
- /* 8 NULL means undefined and should be ASCII... */
- *pszEncoding = estrdup("UNDEFINED");
- szValuePtr = szValuePtr+8;
- ByteCount -= 8;
- }
- }
-
- /* Olympus has this padded with trailing spaces. Remove these first. */
- if (ByteCount>0) {
- for (a=ByteCount-1;a && szValuePtr[a]==' ';a--) {
- (szValuePtr)[a] = '\0';
- }
- }
-
- /* normal text without encoding */
- exif_process_string(pszInfoPtr, szValuePtr, ByteCount TSRMLS_CC);
- return strlen(*pszInfoPtr);
-}
-/* }}} */
-
-/* {{{ exif_process_unicode
- * Process unicode field in IFD. */
-static int exif_process_unicode(image_info_type *ImageInfo, xp_field_type *xp_field, int tag, char *szValuePtr, int ByteCount TSRMLS_DC)
-{
- xp_field->tag = tag;
-
- /* Copy the comment */
-#if EXIF_USE_MBSTRING
-/* What if MS supports big-endian with XP? */
-/* if (ImageInfo->motorola_intel) {
- xp_field->value = php_mb_convert_encoding(szValuePtr, ByteCount, ImageInfo->encode_unicode, ImageInfo->decode_unicode_be, &xp_field->size TSRMLS_CC);
- } else {
- xp_field->value = php_mb_convert_encoding(szValuePtr, ByteCount, ImageInfo->encode_unicode, ImageInfo->decode_unicode_le, &xp_field->size TSRMLS_CC);
- }*/
- xp_field->value = php_mb_convert_encoding(szValuePtr, ByteCount, ImageInfo->encode_unicode, ImageInfo->decode_unicode_le, &xp_field->size TSRMLS_CC);
- return xp_field->size;
-#else
- xp_field->size = exif_process_string_raw(&xp_field->value, szValuePtr, ByteCount);
- return xp_field->size;
-#endif
-}
-/* }}} */
-
-/* {{{ exif_process_IFD_in_MAKERNOTE
- * Process nested IFDs directories in Maker Note. */
-static int exif_process_IFD_in_MAKERNOTE(image_info_type *ImageInfo, char * value_ptr, int value_len, char *offset_base, size_t IFDlength, size_t displacement TSRMLS_DC)
-{
- int de, i=0, section_index = SECTION_MAKERNOTE;
- int NumDirEntries, old_motorola_intel, offset_diff;
- const maker_note_type *maker_note;
- char *dir_start;
-
- for (i=0; i<=sizeof(maker_note_array)/sizeof(maker_note_type); i++) {
- if (i==sizeof(maker_note_array)/sizeof(maker_note_type))
- return FALSE;
- maker_note = maker_note_array+i;
-
- /*exif_error_docref(NULL EXIFERR_CC, ImageInfo, E_NOTICE, "check (%s,%s)", maker_note->make?maker_note->make:"", maker_note->model?maker_note->model:"");*/
- if (maker_note->make && (!ImageInfo->make || strcmp(maker_note->make, ImageInfo->make)))
- continue;
- if (maker_note->model && (!ImageInfo->model || strcmp(maker_note->model, ImageInfo->model)))
- continue;
- if (maker_note->id_string && strncmp(maker_note->id_string, value_ptr, maker_note->id_string_len))
- continue;
- break;
- }
-
- dir_start = value_ptr + maker_note->offset;
-
-#ifdef EXIF_DEBUG
- exif_error_docref(NULL EXIFERR_CC, ImageInfo, E_NOTICE, "Process %s @x%04X + 0x%04X=%d: %s", exif_get_sectionname(section_index), (int)dir_start-(int)offset_base+maker_note->offset+displacement, value_len, value_len, exif_char_dump(value_ptr, value_len, (int)dir_start-(int)offset_base+maker_note->offset+displacement));
-#endif
-
- ImageInfo->sections_found |= FOUND_MAKERNOTE;
-
- old_motorola_intel = ImageInfo->motorola_intel;
- switch (maker_note->byte_order) {
- case MN_ORDER_INTEL:
- ImageInfo->motorola_intel = 0;
- break;
- case MN_ORDER_MOTOROLA:
- ImageInfo->motorola_intel = 1;
- break;
- default:
- case MN_ORDER_NORMAL:
- break;
- }
-
- NumDirEntries = php_ifd_get16u(dir_start, ImageInfo->motorola_intel);
-
- switch (maker_note->offset_mode) {
- case MN_OFFSET_MAKER:
- offset_base = value_ptr;
- break;
- case MN_OFFSET_GUESS:
- offset_diff = 2 + NumDirEntries*12 + 4 - php_ifd_get32u(dir_start+10, ImageInfo->motorola_intel);
-#ifdef EXIF_DEBUG
- exif_error_docref(NULL EXIFERR_CC, ImageInfo, E_NOTICE, "Using automatic offset correction: 0x%04X", ((int)dir_start-(int)offset_base+maker_note->offset+displacement) + offset_diff);
-#endif
- offset_base = value_ptr + offset_diff;
- break;
- default:
- case MN_OFFSET_NORMAL:
- break;
- }
-
- if ((2+NumDirEntries*12) > value_len) {
- exif_error_docref("exif_read_data#error_ifd" EXIFERR_CC, ImageInfo, E_WARNING, "Illegal IFD size: 2 + x%04X*12 = x%04X > x%04X", NumDirEntries, 2+NumDirEntries*12, value_len);
- return FALSE;
- }
-
- for (de=0;de<NumDirEntries;de++) {
- if (!exif_process_IFD_TAG(ImageInfo, dir_start + 2 + 12 * de,
- offset_base, IFDlength, displacement, section_index, 0, maker_note->tag_table TSRMLS_CC)) {
- return FALSE;
- }
- }
- ImageInfo->motorola_intel = old_motorola_intel;
-/* NextDirOffset (must be NULL) = php_ifd_get32u(dir_start+2+12*de, ImageInfo->motorola_intel);*/
-#ifdef EXIF_DEBUG
- exif_error_docref(NULL EXIFERR_CC, ImageInfo, E_NOTICE, "Subsection %s done", exif_get_sectionname(SECTION_MAKERNOTE));
-#endif
- return TRUE;
-}
-/* }}} */
-
-/* {{{ exif_process_IFD_TAG
- * Process one of the nested IFDs directories. */
-static int exif_process_IFD_TAG(image_info_type *ImageInfo, char *dir_entry, char *offset_base, size_t IFDlength, size_t displacement, int section_index, int ReadNextIFD, tag_table_type tag_table TSRMLS_DC)
-{
- size_t length;
- int tag, format, components;
- char *value_ptr, tagname[64], cbuf[32], *outside=NULL;
- size_t byte_count, offset_val, fpos, fgot;
- xp_field_type *tmp_xp;
-
- tag = php_ifd_get16u(dir_entry, ImageInfo->motorola_intel);
- format = php_ifd_get16u(dir_entry+2, ImageInfo->motorola_intel);
- components = php_ifd_get32u(dir_entry+4, ImageInfo->motorola_intel);
-
- if (!format || format > NUM_FORMATS) {
- /* (-1) catches illegal zero case as unsigned underflows to positive large. */
- exif_error_docref("exif_read_data#error_ifd" EXIFERR_CC, ImageInfo, E_WARNING, "Process tag(x%04X=%s): Illegal format code 0x%04X, suppose BYTE", tag, exif_get_tagname(tag, tagname, -12, tag_table TSRMLS_CC), format);
- format = TAG_FMT_BYTE;
- /*return TRUE;*/
- }
-
- byte_count = components * php_tiff_bytes_per_format[format];
-
- if (byte_count > 4) {
- offset_val = php_ifd_get32u(dir_entry+8, ImageInfo->motorola_intel);
- /* 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.
- */
- if (offset_val+byte_count>ImageInfo->FileSize || (ImageInfo->FileType!=IMAGE_FILETYPE_TIFF_II && ImageInfo->FileType!=IMAGE_FILETYPE_TIFF_MM)) {
- if (value_ptr < dir_entry) {
- /* we can read this if offset_val > 0 */
- /* some files have their values in other parts of the file */
- exif_error_docref("exif_read_data#error_ifd" EXIFERR_CC, ImageInfo, E_WARNING, "Process tag(x%04X=%s): Illegal pointer offset(x%04X < x%04X)", tag, exif_get_tagname(tag, tagname, -12, tag_table TSRMLS_CC), offset_val, dir_entry);
- } else {
- /* this is for sure not allowed */
- /* exception are IFD pointers */
- exif_error_docref("exif_read_data#error_ifd" EXIFERR_CC, ImageInfo, E_WARNING, "Process tag(x%04X=%s): Illegal pointer offset(x%04X + x%04X = x%04X > x%04X)", tag, exif_get_tagname(tag, tagname, -12, tag_table TSRMLS_CC), offset_val, byte_count, offset_val+byte_count, IFDlength);
- }
- return TRUE;
- }
- if (byte_count>sizeof(cbuf)) {
- /* mark as outside range and get buffer */
- value_ptr = emalloc(byte_count);
- 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.
- */
- value_ptr = cbuf;
- }
-
- fpos = php_stream_tell(ImageInfo->infile);
- php_stream_seek(ImageInfo->infile, offset_val, SEEK_SET);
- fgot = php_stream_tell(ImageInfo->infile);
- if (fgot!=offset_val) {
- EFREE_IF(outside);
- exif_error_docref(NULL EXIFERR_CC, ImageInfo, E_WARNING, "Wrong file pointer: 0x%08X != 0x08X", fgot, offset_val);
- return FALSE;
- }
- fgot = php_stream_read(ImageInfo->infile, value_ptr, byte_count);
- php_stream_seek(ImageInfo->infile, fpos, SEEK_SET);
- if (fgot<byte_count) {
- EFREE_IF(outside);
- EXIF_ERRLOG_FILEEOF(ImageInfo)
- return FALSE;
- }
- }
- } else {
- /* 4 bytes or less and value is in the dir entry itself */
- value_ptr = dir_entry+8;
- offset_val= value_ptr-offset_base;
- }
-
- ImageInfo->sections_found |= FOUND_ANY_TAG;
-#ifdef EXIF_DEBUG
- exif_error_docref(NULL EXIFERR_CC, ImageInfo, E_NOTICE, "Process tag(x%04X=%s,@x%04X + x%04X(=%d)): %s%s", tag, exif_get_tagname(tag, tagname, -12, tag_table TSRMLS_CC), offset_val+displacement, byte_count, byte_count, (components>1)&&format!=TAG_FMT_UNDEFINED&&format!=TAG_FMT_STRING?"ARRAY OF ":"", format==TAG_FMT_STRING?(value_ptr?value_ptr:"<no data>"):exif_get_tagformat(format));
-#endif
- if (section_index==SECTION_THUMBNAIL) {
- if (!ImageInfo->Thumbnail.data) {
- switch(tag) {
- case TAG_IMAGEWIDTH:
- case TAG_COMP_IMAGE_WIDTH:
- ImageInfo->Thumbnail.width = exif_convert_any_to_int(value_ptr, format, ImageInfo->motorola_intel TSRMLS_CC);
- break;
-
- case TAG_IMAGEHEIGHT:
- case TAG_COMP_IMAGE_HEIGHT:
- ImageInfo->Thumbnail.height = exif_convert_any_to_int(value_ptr, format, ImageInfo->motorola_intel TSRMLS_CC);
- break;
-
- case TAG_STRIP_OFFSETS:
- case TAG_JPEG_INTERCHANGE_FORMAT:
- /* accept both formats */
- ImageInfo->Thumbnail.offset = exif_convert_any_to_int(value_ptr, format, ImageInfo->motorola_intel TSRMLS_CC);
- break;
-
- case TAG_STRIP_BYTE_COUNTS:
- if (ImageInfo->FileType == IMAGE_FILETYPE_TIFF_II || ImageInfo->FileType == IMAGE_FILETYPE_TIFF_MM) {
- ImageInfo->Thumbnail.filetype = ImageInfo->FileType;
- } else {
- /* motorola is easier to read */
- ImageInfo->Thumbnail.filetype = IMAGE_FILETYPE_TIFF_MM;
- }
- ImageInfo->Thumbnail.size = exif_convert_any_to_int(value_ptr, format, ImageInfo->motorola_intel TSRMLS_CC);
- break;
-
- case TAG_JPEG_INTERCHANGE_FORMAT_LEN:
- if (ImageInfo->Thumbnail.filetype == IMAGE_FILETYPE_UNKNOWN) {
- ImageInfo->Thumbnail.filetype = IMAGE_FILETYPE_JPEG;
- ImageInfo->Thumbnail.size = exif_convert_any_to_int(value_ptr, format, ImageInfo->motorola_intel TSRMLS_CC);
- }
- break;
- }
- }
- } else {
- if (section_index==SECTION_IFD0 || section_index==SECTION_EXIF)
- switch(tag) {
- case TAG_COPYRIGHT:
- /* check for "<photographer> NUL <editor> NUL" */
- if (byte_count>1 && (length=php_strnlen(value_ptr, byte_count)) > 0) {
- if (length<byte_count-1) {
- /* When there are any characters after the first NUL */
- ImageInfo->CopyrightPhotographer = estrdup(value_ptr);
- ImageInfo->CopyrightEditor = estrdup(value_ptr+length+1);
- spprintf(&ImageInfo->Copyright, 0, "%s, %s", value_ptr, value_ptr+length+1);
- /* format = TAG_FMT_UNDEFINED; this musn't be ASCII */
- /* but we are not supposed to change this */
- /* keep in mind that image_info does not store editor value */
- } else {
- ImageInfo->Copyright = estrdup(value_ptr);
- }
- }
- break;
-
- case TAG_USERCOMMENT:
- ImageInfo->UserCommentLength = exif_process_user_comment(ImageInfo, &(ImageInfo->UserComment), &(ImageInfo->UserCommentEncoding), value_ptr, byte_count TSRMLS_CC);
- break;
-
- case TAG_XP_TITLE:
- case TAG_XP_COMMENTS:
- case TAG_XP_AUTHOR:
- case TAG_XP_KEYWORDS:
- case TAG_XP_SUBJECT:
- tmp_xp = (xp_field_type*)erealloc(ImageInfo->xp_fields.list, sizeof(xp_field_type)*(ImageInfo->xp_fields.count+1));
- ImageInfo->sections_found |= FOUND_WINXP;
- ImageInfo->xp_fields.list = tmp_xp;
- ImageInfo->xp_fields.count++;
- exif_process_unicode(ImageInfo, &(ImageInfo->xp_fields.list[ImageInfo->xp_fields.count-1]), tag, value_ptr, byte_count TSRMLS_CC);
- break;
-
- case TAG_FNUMBER:
- /* Simplest way of expressing aperture, so I trust it the most.
- (overwrite previously computed value if there is one) */
- ImageInfo->ApertureFNumber = (float)exif_convert_any_format(value_ptr, format, ImageInfo->motorola_intel TSRMLS_CC);
- break;
-
- case TAG_APERTURE:
- case TAG_MAX_APERTURE:
- /* More relevant info always comes earlier, so only use this field if we don't
- have appropriate aperture information yet. */
- if (ImageInfo->ApertureFNumber == 0) {
- ImageInfo->ApertureFNumber
- = (float)exp(exif_convert_any_format(value_ptr, format, ImageInfo->motorola_intel TSRMLS_CC)*log(2)*0.5);
- }
- break;
-
- case TAG_SHUTTERSPEED:
- /* More complicated way of expressing exposure time, so only use
- this value if we don't already have it from somewhere else.
- SHUTTERSPEED comes after EXPOSURE TIME
- */
- if (ImageInfo->ExposureTime == 0) {
- ImageInfo->ExposureTime
- = (float)(1/exp(exif_convert_any_format(value_ptr, format, ImageInfo->motorola_intel TSRMLS_CC)*log(2)));
- }
- break;
- case TAG_EXPOSURETIME:
- ImageInfo->ExposureTime = -1;
- break;
-
- case TAG_COMP_IMAGE_WIDTH:
- ImageInfo->ExifImageWidth = exif_convert_any_to_int(value_ptr, format, ImageInfo->motorola_intel TSRMLS_CC);
- break;
-
- case TAG_FOCALPLANE_X_RES:
- ImageInfo->FocalplaneXRes = exif_convert_any_format(value_ptr, format, ImageInfo->motorola_intel TSRMLS_CC);
- break;
-
- case TAG_SUBJECT_DISTANCE:
- /* Inidcates the distacne the autofocus camera is focused to.
- Tends to be less accurate as distance increases. */
- ImageInfo->Distance = (float)exif_convert_any_format(value_ptr, format, ImageInfo->motorola_intel TSRMLS_CC);
- break;
-
- case TAG_FOCALPLANE_RESOLUTION_UNIT:
- switch((int)exif_convert_any_format(value_ptr, format, ImageInfo->motorola_intel TSRMLS_CC)) {
- case 1: ImageInfo->FocalplaneUnits = 25.4; break; /* inch */
- case 2:
- /* According to the information I was using, 2 measn meters.
- But looking at the Cannon powershot's files, inches is the only
- sensible value. */
- ImageInfo->FocalplaneUnits = 25.4;
- break;
-
- case 3: ImageInfo->FocalplaneUnits = 10; break; /* centimeter */
- case 4: ImageInfo->FocalplaneUnits = 1; break; /* milimeter */
- case 5: ImageInfo->FocalplaneUnits = .001; break; /* micrometer */
- }
- break;
-
- case TAG_SUB_IFD:
- if (format==TAG_FMT_IFD) {
- /* If this is called we are either in a TIFFs thumbnail or a JPEG where we cannot handle it */
- /* TIFF thumbnail: our data structure cannot store a thumbnail of a thumbnail */
- /* JPEG do we have the data area and what to do with it */
- exif_error_docref(NULL EXIFERR_CC, ImageInfo, E_NOTICE, "Skip SUB IFD");
- }
- break;
-
- case TAG_MAKE:
- ImageInfo->make = estrdup(value_ptr);
- break;
- case TAG_MODEL:
- ImageInfo->model = estrdup(value_ptr);
- break;
-
- case TAG_MAKER_NOTE:
- exif_process_IFD_in_MAKERNOTE(ImageInfo, value_ptr, byte_count, offset_base, IFDlength, displacement TSRMLS_CC);
- break;
-
- case TAG_EXIF_IFD_POINTER:
- case TAG_GPS_IFD_POINTER:
- case TAG_INTEROP_IFD_POINTER:
- if (ReadNextIFD) {
- char *Subdir_start;
- int sub_section_index = 0;
- switch(tag) {
- case TAG_EXIF_IFD_POINTER:
-#ifdef EXIF_DEBUG
- exif_error_docref(NULL EXIFERR_CC, ImageInfo, E_NOTICE, "Found EXIF");
-#endif
- ImageInfo->sections_found |= FOUND_EXIF;
- sub_section_index = SECTION_EXIF;
- break;
- case TAG_GPS_IFD_POINTER:
-#ifdef EXIF_DEBUG
- exif_error_docref(NULL EXIFERR_CC, ImageInfo, E_NOTICE, "Found GPS");
-#endif
- ImageInfo->sections_found |= FOUND_GPS;
- sub_section_index = SECTION_GPS;
- break;
- case TAG_INTEROP_IFD_POINTER:
-#ifdef EXIF_DEBUG
- exif_error_docref(NULL EXIFERR_CC, ImageInfo, E_NOTICE, "Found INTEROPERABILITY");
-#endif
- ImageInfo->sections_found |= FOUND_INTEROP;
- sub_section_index = SECTION_INTEROP;
- break;
- }
- Subdir_start = offset_base + php_ifd_get32u(value_ptr, ImageInfo->motorola_intel);
- if (Subdir_start < offset_base || Subdir_start > offset_base+IFDlength) {
- exif_error_docref("exif_read_data#error_ifd" EXIFERR_CC, ImageInfo, E_WARNING, "Illegal IFD Pointer");
- return FALSE;
- }
- exif_process_IFD_in_JPEG(ImageInfo, Subdir_start, offset_base, IFDlength, displacement, sub_section_index TSRMLS_CC);
-#ifdef EXIF_DEBUG
- exif_error_docref(NULL EXIFERR_CC, ImageInfo, E_NOTICE, "Subsection %s done", exif_get_sectionname(sub_section_index));
-#endif
- }
- }
- }
- exif_iif_add_tag(ImageInfo, section_index, exif_get_tagname(tag, tagname, sizeof(tagname), tag_table TSRMLS_CC), tag, format, components, value_ptr TSRMLS_CC);
- EFREE_IF(outside);
- return TRUE;
-}
-/* }}} */
-
-/* {{{ exif_process_IFD_in_JPEG
- * Process one of the nested IFDs directories. */
-static int exif_process_IFD_in_JPEG(image_info_type *ImageInfo, char *dir_start, char *offset_base, size_t IFDlength, size_t displacement, int section_index TSRMLS_DC)
-{
- int de;
- int NumDirEntries;
- int NextDirOffset;
-
-#ifdef EXIF_DEBUG
- exif_error_docref(NULL EXIFERR_CC, ImageInfo, E_NOTICE, "Process %s (x%04X(=%d))", exif_get_sectionname(section_index), IFDlength, IFDlength);
-#endif
-
- ImageInfo->sections_found |= FOUND_IFD0;
-
- NumDirEntries = php_ifd_get16u(dir_start, ImageInfo->motorola_intel);
-
- if ((dir_start+2+NumDirEntries*12) > (offset_base+IFDlength)) {
- exif_error_docref("exif_read_data#error_ifd" EXIFERR_CC, ImageInfo, E_WARNING, "Illegal IFD size: x%04X + 2 + x%04X*12 = x%04X > x%04X", (int)((size_t)dir_start+2-(size_t)offset_base), NumDirEntries, (int)((size_t)dir_start+2+NumDirEntries*12-(size_t)offset_base), IFDlength);
- return FALSE;
- }
-
- for (de=0;de<NumDirEntries;de++) {
- if (!exif_process_IFD_TAG(ImageInfo, dir_start + 2 + 12 * de,
- offset_base, IFDlength, displacement, section_index, 1, exif_get_tag_table(section_index) TSRMLS_CC)) {
- return FALSE;
- }
- }
- /*
- * Hack to make it process IDF1 I hope
- * There are 2 IDFs, the second one holds the keys (0x0201 and 0x0202) to the thumbnail
- */
- NextDirOffset = php_ifd_get32u(dir_start+2+12*de, ImageInfo->motorola_intel);
- if (NextDirOffset) {
- /* the next line seems false but here IFDlength means length of all IFDs */
- if (offset_base + NextDirOffset < offset_base || offset_base + NextDirOffset > offset_base+IFDlength) {
- exif_error_docref("exif_read_data#error_ifd" EXIFERR_CC, ImageInfo, E_WARNING, "Illegal IFD offset");
- return FALSE;
- }
- /* That is the IFD for the first thumbnail */
-#ifdef EXIF_DEBUG
- exif_error_docref(NULL EXIFERR_CC, ImageInfo, E_NOTICE, "Expect next IFD to be thumbnail");
-#endif
- if (exif_process_IFD_in_JPEG(ImageInfo, offset_base + NextDirOffset, offset_base, IFDlength, displacement, SECTION_THUMBNAIL TSRMLS_CC)) {
-#ifdef EXIF_DEBUG
- exif_error_docref(NULL EXIFERR_CC, ImageInfo, E_NOTICE, "Thumbnail size: 0x%04X", ImageInfo->Thumbnail.size);
-#endif
- if (ImageInfo->Thumbnail.filetype != IMAGE_FILETYPE_UNKNOWN
- && ImageInfo->Thumbnail.size
- && ImageInfo->Thumbnail.offset
- && ImageInfo->read_thumbnail
- ) {
- exif_thumbnail_extract(ImageInfo, offset_base, IFDlength TSRMLS_CC);
- }
- return TRUE;
- } else {
- return FALSE;
- }
- }
- return TRUE;
-}
-/* }}} */
-
-/* {{{ exif_process_TIFF_in_JPEG
- Process a TIFF header in a JPEG file
-*/
-static void exif_process_TIFF_in_JPEG(image_info_type *ImageInfo, char *CharBuf, size_t length, size_t displacement TSRMLS_DC)
-{
- unsigned exif_value_2a, offset_of_ifd;
-
- /* set the thumbnail stuff to nothing so we can test to see if they get set up */
- if (memcmp(CharBuf, "II", 2) == 0) {
- ImageInfo->motorola_intel = 0;
- } else if (memcmp(CharBuf, "MM", 2) == 0) {
- ImageInfo->motorola_intel = 1;
- } else {
- exif_error_docref(NULL EXIFERR_CC, ImageInfo, E_WARNING, "Invalid TIFF alignment marker");
- return;
- }
-
- /* Check the next two values for correctness. */
- exif_value_2a = php_ifd_get16u(CharBuf+2, ImageInfo->motorola_intel);
- offset_of_ifd = php_ifd_get32u(CharBuf+4, ImageInfo->motorola_intel);
- if ( exif_value_2a != 0x2a || offset_of_ifd < 0x08) {
- exif_error_docref(NULL EXIFERR_CC, ImageInfo, E_WARNING, "Invalid TIFF start (1)");
- return;
- }
-
- ImageInfo->sections_found |= FOUND_IFD0;
- /* First directory starts at offset 8. Offsets starts at 0. */
- exif_process_IFD_in_JPEG(ImageInfo, CharBuf+offset_of_ifd, CharBuf, length/*-14*/, displacement, SECTION_IFD0 TSRMLS_CC);
-
-#ifdef EXIF_DEBUG
- exif_error_docref(NULL EXIFERR_CC, ImageInfo, E_NOTICE, "Process TIFF in JPEG done");
-#endif
-
- /* Compute the CCD width, in milimeters. */
- if (ImageInfo->FocalplaneXRes != 0) {
- ImageInfo->CCDWidth = (float)(ImageInfo->ExifImageWidth * ImageInfo->FocalplaneUnits / ImageInfo->FocalplaneXRes);
- }
-}
-/* }}} */
-
-/* {{{ exif_process_APP1
- Process an JPEG APP1 block marker
- Describes all the drivel that most digital cameras include...
-*/
-static void exif_process_APP1(image_info_type *ImageInfo, char *CharBuf, size_t length, size_t displacement TSRMLS_DC)
-{
- /* Check the APP1 for Exif Identifier Code */
- static const uchar ExifHeader[] = {0x45, 0x78, 0x69, 0x66, 0x00, 0x00};
- if (memcmp(CharBuf+2, ExifHeader, 6)) {
- exif_error_docref(NULL EXIFERR_CC, ImageInfo, E_WARNING, "Incorrect APP1 Exif Identifier Code");
- return;
- }
- exif_process_TIFF_in_JPEG(ImageInfo, CharBuf + 8, length - 8, displacement+8 TSRMLS_CC);
-#ifdef EXIF_DEBUG
- exif_error_docref(NULL EXIFERR_CC, ImageInfo, E_NOTICE, "Process APP1/EXIF done");
-#endif
-}
-/* }}} */
-
-/* {{{ exif_process_APP12
- Process an JPEG APP12 block marker used by OLYMPUS
-*/
-static void exif_process_APP12(image_info_type *ImageInfo, char *buffer, size_t length TSRMLS_DC)
-{
- size_t l1, l2=0;
-
- if ((l1 = php_strnlen(buffer+2, length-2)) > 0) {
- exif_iif_add_tag(ImageInfo, SECTION_APP12, "Company", TAG_NONE, TAG_FMT_STRING, l1, buffer+2 TSRMLS_CC);
- if (length > 2+l1+1) {
- l2 = php_strnlen(buffer+2+l1+1, length-2-l1+1);
- exif_iif_add_tag(ImageInfo, SECTION_APP12, "Info", TAG_NONE, TAG_FMT_STRING, l2, buffer+2+l1+1 TSRMLS_CC);
- }
- }
-#ifdef EXIF_DEBUG
- exif_error_docref(NULL EXIFERR_CC, ImageInfo, E_NOTICE, "Process section APP12 with l1=%d, l2=%d done", l1, l2);
-#endif
-}
-/* }}} */
-
-/* {{{ exif_scan_JPEG_header
- * Parse the marker stream until SOS or EOI is seen; */
-static int exif_scan_JPEG_header(image_info_type *ImageInfo TSRMLS_DC)
-{
- int section, sn;
- int marker = 0, last_marker = M_PSEUDO, comment_correction=1;
- unsigned int ll, lh;
- uchar *Data;
- size_t fpos, size, got, itemlen;
- jpeg_sof_info sof_info;
-
- for(section=0;;section++) {
-#ifdef EXIF_DEBUG
- fpos = php_stream_tell(ImageInfo->infile);
- exif_error_docref(NULL EXIFERR_CC, ImageInfo, E_NOTICE, "Needing section %d @ 0x%08X", ImageInfo->file.count, fpos);
-#endif
-
- /* get marker byte, swallowing possible padding */
- /* some software does not count the length bytes of COM section */
- /* one company doing so is very much envolved in JPEG... so we accept too */
- if (last_marker==M_COM && comment_correction) {
- comment_correction = 2;
- }
- do {
- if ((marker = php_stream_getc(ImageInfo->infile)) == EOF) {
- EXIF_ERRLOG_CORRUPT(ImageInfo)
- return FALSE;
- }
- if (last_marker==M_COM && comment_correction>0) {
- if (marker!=0xFF) {
- marker = 0xff;
- comment_correction--;
- } else {
- last_marker = M_PSEUDO; /* stop skipping 0 for M_COM */
- }
- }
- } while (marker == 0xff);
- if (last_marker==M_COM && !comment_correction) {
- exif_error_docref("exif_read_data#error_mcom" EXIFERR_CC, ImageInfo, E_NOTICE, "Image has corrupt COM section: some software set wrong length information");
- }
- if (last_marker==M_COM && comment_correction)
- return M_EOI; /* ah illegal: char after COM section not 0xFF */
-
- fpos = php_stream_tell(ImageInfo->infile);
-
- if (marker == 0xff) {
- /* 0xff is legal padding, but if we get that many, something's wrong. */
- exif_error_docref(NULL EXIFERR_CC, ImageInfo, E_WARNING, "To many padding bytes");
- return FALSE;
- }
-
- /* Read the length of the section. */
- lh = php_stream_getc(ImageInfo->infile);
- ll = php_stream_getc(ImageInfo->infile);
-
- itemlen = (lh << 8) | ll;
-
- if (itemlen < 2) {
-#ifdef EXIF_DEBUG
- exif_error_docref(NULL EXIFERR_CC, ImageInfo, E_WARNING, "%s, Section length: 0x%02X%02X", EXIF_ERROR_CORRUPT, lh, ll);
-#else
- EXIF_ERRLOG_CORRUPT(ImageInfo)
-#endif
- return FALSE;
- }
-
- sn = exif_file_sections_add(ImageInfo, marker, itemlen+1, NULL);
- Data = ImageInfo->file.list[sn].data;
-
- /* Store first two pre-read bytes. */
- Data[0] = (uchar)lh;
- Data[1] = (uchar)ll;
-
- got = php_stream_read(ImageInfo->infile, (char*)(Data+2), itemlen-2); /* Read the whole section. */
- if (got != itemlen-2) {
- exif_error_docref(NULL EXIFERR_CC, ImageInfo, E_WARNING, "Error reading from file: got=x%04X(=%d) != itemlen-2=x%04X(=%d)", got, got, itemlen-2, itemlen-2);
- return FALSE;
- }
-
-#ifdef EXIF_DEBUG
- exif_error_docref(NULL EXIFERR_CC, ImageInfo, E_NOTICE, "Process section(x%02X=%s) @ x%04X + x%04X(=%d)", marker, exif_get_markername(marker), fpos, itemlen, itemlen);
-#endif
- switch(marker) {
- case M_SOS: /* stop before hitting compressed data */
- /* If reading entire image is requested, read the rest of the data. */
- if (ImageInfo->read_all) {
- /* Determine how much file is left. */
- fpos = php_stream_tell(ImageInfo->infile);
- size = ImageInfo->FileSize - fpos;
- sn = exif_file_sections_add(ImageInfo, M_PSEUDO, size, NULL);
- Data = ImageInfo->file.list[sn].data;
- got = php_stream_read(ImageInfo->infile, (char*)Data, size);
- if (got != size) {
- EXIF_ERRLOG_FILEEOF(ImageInfo)
- return FALSE;
- }
- }
- return TRUE;
-
- case M_EOI: /* in case it's a tables-only JPEG stream */
- exif_error_docref(NULL EXIFERR_CC, ImageInfo, E_WARNING, "No image in jpeg!");
- return (ImageInfo->sections_found&(~FOUND_COMPUTED)) ? TRUE : FALSE;
-
- case M_COM: /* Comment section */
- exif_process_COM(ImageInfo, (char *)Data, itemlen TSRMLS_CC);
- break;
-
- case M_EXIF:
- if (!(ImageInfo->sections_found&FOUND_IFD0)) {
- /*ImageInfo->sections_found |= FOUND_EXIF;*/
- /* Seen files from some 'U-lead' software with Vivitar scanner
- that uses marker 31 later in the file (no clue what for!) */
- exif_process_APP1(ImageInfo, (char *)Data, itemlen, fpos TSRMLS_CC);
- }
- break;
-
- case M_APP12:
- exif_process_APP12(ImageInfo, (char *)Data, itemlen TSRMLS_CC);
- break;
-
-
- case M_SOF0:
- case M_SOF1:
- case M_SOF2:
- case M_SOF3:
- case M_SOF5:
- case M_SOF6:
- case M_SOF7:
- case M_SOF9:
- case M_SOF10:
- case M_SOF11:
- case M_SOF13:
- case M_SOF14:
- case M_SOF15:
- exif_process_SOFn(Data, marker, &sof_info);
- ImageInfo->Width = sof_info.width;
- ImageInfo->Height = sof_info.height;
- if (sof_info.num_components == 3) {
- ImageInfo->IsColor = 1;
- } else {
- ImageInfo->IsColor = 0;
- }
- break;
- default:
- /* skip any other marker silently. */
- break;
- }
-
- /* keep track of last marker */
- last_marker = marker;
- }
-#ifdef EXIF_DEBUG
- exif_error_docref(NULL EXIFERR_CC, ImageInfo, E_NOTICE, "Done");
-#endif
- return TRUE;
-}
-/* }}} */
-
-/* {{{ exif_scan_thumbnail
- * scan JPEG in thumbnail (memory) */
-static int exif_scan_thumbnail(image_info_type *ImageInfo TSRMLS_DC)
-{
- uchar c, *data = (uchar*)ImageInfo->Thumbnail.data;
- int n, marker;
- size_t length=2, pos=0;
- jpeg_sof_info sof_info;
-
- if (!data) {
- return FALSE; /* nothing to do here */
- }
- if (memcmp(data, "\xFF\xD8\xFF", 3)) {
- if (!ImageInfo->Thumbnail.width && !ImageInfo->Thumbnail.height) {
- exif_error_docref(NULL EXIFERR_CC, ImageInfo, E_WARNING, "Thumbnail is not a JPEG image");
- }
- return FALSE;
- }
- for (;;) {
- pos += length;
- if (pos>=ImageInfo->Thumbnail.size)
- return FALSE;
- c = data[pos++];
- if (pos>=ImageInfo->Thumbnail.size)
- return FALSE;
- if (c != 0xFF) {
- return FALSE;
- }
- n = 8;
- while ((c = data[pos++]) == 0xFF && n--) {
- if (pos+3>=ImageInfo->Thumbnail.size)
- return FALSE;
- /* +3 = pos++ of next check when reaching marker + 2 bytes for length */
- }
- if (c == 0xFF)
- return FALSE;
- marker = c;
- length = php_jpg_get16(data+pos);
- if (pos+length>=ImageInfo->Thumbnail.size) {
- return FALSE;
- }
-#ifdef EXIF_DEBUG
- exif_error_docref(NULL EXIFERR_CC, ImageInfo, E_NOTICE, "Thumbnail: process section(x%02X=%s) @ x%04X + x%04X", marker, exif_get_markername(marker), pos, length);
-#endif
- switch (marker) {
- case M_SOF0:
- case M_SOF1:
- case M_SOF2:
- case M_SOF3:
- case M_SOF5:
- case M_SOF6:
- case M_SOF7:
- case M_SOF9:
- case M_SOF10:
- case M_SOF11:
- case M_SOF13:
- case M_SOF14:
- case M_SOF15:
- /* handle SOFn block */
- exif_process_SOFn(data+pos, marker, &sof_info);
- ImageInfo->Thumbnail.height = sof_info.height;
- ImageInfo->Thumbnail.width = sof_info.width;
-#ifdef EXIF_DEBUG
- exif_error_docref(NULL EXIFERR_CC, ImageInfo, E_NOTICE, "Thumbnail: size: %d * %d", sof_info.width, sof_info.height);
-#endif
- return TRUE;
-
- case M_SOS:
- case M_EOI:
- exif_error_docref(NULL EXIFERR_CC, ImageInfo, E_WARNING, "Could not compute size of thumbnail");
- return FALSE;
- break;
-
- default:
- /* just skip */
- break;
- }
- }
-
- exif_error_docref(NULL EXIFERR_CC, ImageInfo, E_WARNING, "Could not compute size of thumbnail");
- return FALSE;
-}
-/* }}} */
-
-/* {{{ exif_process_IFD_in_TIFF
- * Parse the TIFF header; */
-static int exif_process_IFD_in_TIFF(image_info_type *ImageInfo, size_t dir_offset, int section_index TSRMLS_DC)
-{
- int i, sn, num_entries, sub_section_index = 0;
- unsigned char *dir_entry;
- char tagname[64];
- size_t ifd_size, dir_size, entry_offset, next_offset, entry_length, entry_value=0, fgot;
- int entry_tag , entry_type;
- tag_table_type tag_table = exif_get_tag_table(section_index);
-
- if (ImageInfo->FileSize >= dir_offset+2) {
- sn = exif_file_sections_add(ImageInfo, M_PSEUDO, 2, NULL);
-#ifdef EXIF_DEBUG
- exif_error_docref(NULL EXIFERR_CC, ImageInfo, E_NOTICE, "Read from TIFF: filesize(x%04X), IFD dir(x%04X + x%04X)", ImageInfo->FileSize, dir_offset, 2);
-#endif
- php_stream_seek(ImageInfo->infile, dir_offset, SEEK_SET); /* we do not know the order of sections */
- php_stream_read(ImageInfo->infile, (char*)ImageInfo->file.list[sn].data, 2);
- num_entries = php_ifd_get16u(ImageInfo->file.list[sn].data, ImageInfo->motorola_intel);
- dir_size = 2/*num dir entries*/ +12/*length of entry*/*num_entries +4/* offset to next ifd (points to thumbnail or NULL)*/;
- if (ImageInfo->FileSize >= dir_offset+dir_size) {
-#ifdef EXIF_DEBUG
- exif_error_docref(NULL EXIFERR_CC, ImageInfo, E_NOTICE, "Read from TIFF: filesize(x%04X), IFD dir(x%04X + x%04X), IFD entries(%d)", ImageInfo->FileSize, dir_offset+2, dir_size-2, num_entries);
-#endif
- if (exif_file_sections_realloc(ImageInfo, sn, dir_size TSRMLS_CC)) {
- return FALSE;
- }
- php_stream_read(ImageInfo->infile, (char*)(ImageInfo->file.list[sn].data+2), dir_size-2);
- /*exif_error_docref(NULL EXIFERR_CC, ImageInfo, E_NOTICE, "Dump: %s", exif_char_dump(ImageInfo->file.list[sn].data, dir_size, 0));*/
- next_offset = php_ifd_get32u(ImageInfo->file.list[sn].data + dir_size - 4, ImageInfo->motorola_intel);
-#ifdef EXIF_DEBUG
- exif_error_docref(NULL EXIFERR_CC, ImageInfo, E_NOTICE, "Read from TIFF done, next offset x%04X", next_offset);
-#endif
- /* now we have the directory we can look how long it should be */
- ifd_size = dir_size;
- for(i=0;i<num_entries;i++) {
- dir_entry = ImageInfo->file.list[sn].data+2+i*12;
- entry_tag = php_ifd_get16u(dir_entry+0, ImageInfo->motorola_intel);
- entry_type = php_ifd_get16u(dir_entry+2, ImageInfo->motorola_intel);
- if (entry_type > NUM_FORMATS) {
- exif_error_docref(NULL EXIFERR_CC, ImageInfo, E_NOTICE, "Read from TIFF: tag(0x%04X,%12s): Illegal format code 0x%04X, switching to BYTE", entry_tag, exif_get_tagname(entry_tag, tagname, -12, tag_table TSRMLS_CC), entry_type);
- /* Since this is repeated in exif_process_IFD_TAG make it a notice here */
- /* and make it a warning in the exif_process_IFD_TAG which is called */
- /* elsewhere. */
- entry_type = TAG_FMT_BYTE;
- /*The next line would break the image on writeback: */
- /* php_ifd_set16u(dir_entry+2, entry_type, ImageInfo->motorola_intel);*/
- }
- entry_length = php_ifd_get32u(dir_entry+4, ImageInfo->motorola_intel) * php_tiff_bytes_per_format[entry_type];
- if (entry_length <= 4) {
- switch(entry_type) {
- case TAG_FMT_USHORT:
- entry_value = php_ifd_get16u(dir_entry+8, ImageInfo->motorola_intel);
- break;
- case TAG_FMT_SSHORT:
- entry_value = php_ifd_get16s(dir_entry+8, ImageInfo->motorola_intel);
- break;
- case TAG_FMT_ULONG:
- entry_value = php_ifd_get32u(dir_entry+8, ImageInfo->motorola_intel);
- break;
- case TAG_FMT_SLONG:
- entry_value = php_ifd_get32s(dir_entry+8, ImageInfo->motorola_intel);
- break;
- }
- switch(entry_tag) {
- case TAG_IMAGEWIDTH:
- case TAG_COMP_IMAGE_WIDTH:
- ImageInfo->Width = entry_value;
- break;
- case TAG_IMAGEHEIGHT:
- case TAG_COMP_IMAGE_HEIGHT:
- ImageInfo->Height = entry_value;
- break;
- case TAG_PHOTOMETRIC_INTERPRETATION:
- switch (entry_value) {
- case PMI_BLACK_IS_ZERO:
- case PMI_WHITE_IS_ZERO:
- case PMI_TRANSPARENCY_MASK:
- ImageInfo->IsColor = 0;
- break;
- case PMI_RGB:
- case PMI_PALETTE_COLOR:
- case PMI_SEPARATED:
- case PMI_YCBCR:
- case PMI_CIELAB:
- ImageInfo->IsColor = 1;
- break;
- }
- break;
- }
- } else {
- entry_offset = php_ifd_get32u(dir_entry+8, ImageInfo->motorola_intel);
- /* if entry needs expading ifd cache and entry is at end of current ifd cache. */
- /* otherwise there may be huge holes between two entries */
- if (entry_offset + entry_length > dir_offset + ifd_size
- && entry_offset == dir_offset + ifd_size) {
- ifd_size = entry_offset + entry_length - dir_offset;
-#ifdef EXIF_DEBUG
- exif_error_docref(NULL EXIFERR_CC, ImageInfo, E_NOTICE, "Resize struct: x%04X + x%04X - x%04X = x%04X", entry_offset, entry_length, dir_offset, ifd_size);
-#endif
- }
- }
- }
- if (ImageInfo->FileSize >= dir_offset + ImageInfo->file.list[sn].size) {
- if (ifd_size > dir_size) {
- if (dir_offset + ifd_size > ImageInfo->FileSize) {
- exif_error_docref(NULL EXIFERR_CC, ImageInfo, E_WARNING, "Error in TIFF: filesize(x%04X) less than size of IFD(x%04X + x%04X)", ImageInfo->FileSize, dir_offset, ifd_size);
- return FALSE;
- }
- if (exif_file_sections_realloc(ImageInfo, sn, ifd_size TSRMLS_CC)) {
- return FALSE;
- }
- /* read values not stored in directory itself */
-#ifdef EXIF_DEBUG
- exif_error_docref(NULL EXIFERR_CC, ImageInfo, E_NOTICE, "Read from TIFF: filesize(x%04X), IFD(x%04X + x%04X)", ImageInfo->FileSize, dir_offset, ifd_size);
-#endif
- php_stream_read(ImageInfo->infile, (char*)(ImageInfo->file.list[sn].data+dir_size), ifd_size-dir_size);
-#ifdef EXIF_DEBUG
- exif_error_docref(NULL EXIFERR_CC, ImageInfo, E_NOTICE, "Read from TIFF, done");
-#endif
- }
- /* now process the tags */
- for(i=0;i<num_entries;i++) {
- dir_entry = ImageInfo->file.list[sn].data+2+i*12;
- entry_tag = php_ifd_get16u(dir_entry+0, ImageInfo->motorola_intel);
- entry_type = php_ifd_get16u(dir_entry+2, ImageInfo->motorola_intel);
- /*entry_length = php_ifd_get32u(dir_entry+4, ImageInfo->motorola_intel);*/
- if (entry_tag == TAG_EXIF_IFD_POINTER ||
- entry_tag == TAG_INTEROP_IFD_POINTER ||
- entry_tag == TAG_GPS_IFD_POINTER ||
- entry_tag == TAG_SUB_IFD
- ) {
- switch(entry_tag) {
- case TAG_EXIF_IFD_POINTER:
- ImageInfo->sections_found |= FOUND_EXIF;
- sub_section_index = SECTION_EXIF;
- break;
- case TAG_GPS_IFD_POINTER:
- ImageInfo->sections_found |= FOUND_GPS;
- sub_section_index = SECTION_GPS;
- break;
- case TAG_INTEROP_IFD_POINTER:
- ImageInfo->sections_found |= FOUND_INTEROP;
- sub_section_index = SECTION_INTEROP;
- break;
- case TAG_SUB_IFD:
- ImageInfo->sections_found |= FOUND_THUMBNAIL;
- sub_section_index = SECTION_THUMBNAIL;
- break;
- }
- entry_offset = php_ifd_get32u(dir_entry+8, ImageInfo->motorola_intel);
-#ifdef EXIF_DEBUG
- exif_error_docref(NULL EXIFERR_CC, ImageInfo, E_NOTICE, "Next IFD: %s @x%04X", exif_get_sectionname(sub_section_index), entry_offset);
-#endif
- exif_process_IFD_in_TIFF(ImageInfo, entry_offset, sub_section_index TSRMLS_CC);
- if (section_index!=SECTION_THUMBNAIL && entry_tag==TAG_SUB_IFD) {
- if (ImageInfo->Thumbnail.filetype != IMAGE_FILETYPE_UNKNOWN
- && ImageInfo->Thumbnail.size
- && ImageInfo->Thumbnail.offset
- && ImageInfo->read_thumbnail
- ) {
-#ifdef EXIF_DEBUG
- exif_error_docref(NULL EXIFERR_CC, ImageInfo, E_NOTICE, "%s THUMBNAIL @0x%04X + 0x%04X", ImageInfo->Thumbnail.data ? "Ignore" : "Read", ImageInfo->Thumbnail.offset, ImageInfo->Thumbnail.size);
-#endif
- if (!ImageInfo->Thumbnail.data) {
- ImageInfo->Thumbnail.data = emalloc(ImageInfo->Thumbnail.size);
- php_stream_seek(ImageInfo->infile, ImageInfo->Thumbnail.offset, SEEK_SET);
- fgot = php_stream_read(ImageInfo->infile, ImageInfo->Thumbnail.data, ImageInfo->Thumbnail.size);
- if (fgot < ImageInfo->Thumbnail.size) {
- EXIF_ERRLOG_THUMBEOF(ImageInfo)
- }
- exif_thumbnail_build(ImageInfo TSRMLS_CC);
- }
- }
- }
-#ifdef EXIF_DEBUG
- exif_error_docref(NULL EXIFERR_CC, ImageInfo, E_NOTICE, "Next IFD: %s done", exif_get_sectionname(sub_section_index));
-#endif
- } else {
- if (!exif_process_IFD_TAG(ImageInfo, (char*)dir_entry,
- (char*)(ImageInfo->file.list[sn].data-dir_offset),
- ifd_size, 0, section_index, 0, tag_table TSRMLS_CC)) {
- return FALSE;
- }
- }
- }
- /* If we had a thumbnail in a SUB_IFD we have ANOTHER image in NEXT IFD */
- if (next_offset && section_index != SECTION_THUMBNAIL) {
- /* this should be a thumbnail IFD */
- /* the thumbnail itself is stored at Tag=StripOffsets */
-#ifdef EXIF_DEBUG
- exif_error_docref(NULL EXIFERR_CC, ImageInfo, E_NOTICE, "Read next IFD (THUMBNAIL) at x%04X", next_offset);
-#endif
- exif_process_IFD_in_TIFF(ImageInfo, next_offset, SECTION_THUMBNAIL TSRMLS_CC);
-#ifdef EXIF_DEBUG
- exif_error_docref(NULL EXIFERR_CC, ImageInfo, E_NOTICE, "%s THUMBNAIL @0x%04X + 0x%04X", ImageInfo->Thumbnail.data ? "Ignore" : "Read", ImageInfo->Thumbnail.offset, ImageInfo->Thumbnail.size);
-#endif
- if (!ImageInfo->Thumbnail.data && ImageInfo->Thumbnail.offset && ImageInfo->Thumbnail.size && ImageInfo->read_thumbnail) {
- ImageInfo->Thumbnail.data = emalloc(ImageInfo->Thumbnail.size);
- php_stream_seek(ImageInfo->infile, ImageInfo->Thumbnail.offset, SEEK_SET);
- fgot = php_stream_read(ImageInfo->infile, ImageInfo->Thumbnail.data, ImageInfo->Thumbnail.size);
- if (fgot < ImageInfo->Thumbnail.size) {
- EXIF_ERRLOG_THUMBEOF(ImageInfo)
- }
- exif_thumbnail_build(ImageInfo TSRMLS_CC);
- }
-#ifdef EXIF_DEBUG
- exif_error_docref(NULL EXIFERR_CC, ImageInfo, E_NOTICE, "Read next IFD (THUMBNAIL) done");
-#endif
- }
- return TRUE;
- } else {
- exif_error_docref(NULL EXIFERR_CC, ImageInfo, E_WARNING, "Error in TIFF: filesize(x%04X) less than size of IFD(x%04X)", ImageInfo->FileSize, dir_offset+ImageInfo->file.list[sn].size);
- return FALSE;
- }
- } else {
- exif_error_docref(NULL EXIFERR_CC, ImageInfo, E_WARNING, "Error in TIFF: filesize(x%04X) less than size of IFD dir(x%04X)", ImageInfo->FileSize, dir_offset+dir_size);
- return FALSE;
- }
- } else {
- exif_error_docref(NULL EXIFERR_CC, ImageInfo, E_WARNING, "Error in TIFF: filesize(x%04X) less than start of IFD dir(x%04X)", ImageInfo->FileSize, dir_offset+2);
- return FALSE;
- }
-}
-/* }}} */
-
-/* {{{ exif_scan_FILE_header
- * Parse the marker stream until SOS or EOI is seen; */
-static int exif_scan_FILE_header(image_info_type *ImageInfo TSRMLS_DC)
-{
- unsigned char file_header[8];
- int ret = FALSE;
-
- ImageInfo->FileType = IMAGE_FILETYPE_UNKNOWN;
-
- if (ImageInfo->FileSize >= 2) {
- php_stream_seek(ImageInfo->infile, 0, SEEK_SET);
- php_stream_read(ImageInfo->infile, (char*)file_header, 2);
- if ((file_header[0]==0xff) && (file_header[1]==M_SOI)) {
- ImageInfo->FileType = IMAGE_FILETYPE_JPEG;
- if (exif_scan_JPEG_header(ImageInfo TSRMLS_CC)) {
- ret = TRUE;
- } else {
- exif_error_docref(NULL EXIFERR_CC, ImageInfo, E_WARNING, "Invalid JPEG file");
- }
- } else if (ImageInfo->FileSize >= 8) {
- php_stream_read(ImageInfo->infile, (char*)(file_header+2), 6);
- if (!memcmp(file_header, "II\x2A\x00", 4)) {
- ImageInfo->FileType = IMAGE_FILETYPE_TIFF_II;
- ImageInfo->motorola_intel = 0;
-#ifdef EXIF_DEBUG
- exif_error_docref(NULL EXIFERR_CC, ImageInfo, E_NOTICE, "File has TIFF/II format");
-#endif
- ImageInfo->sections_found |= FOUND_IFD0;
- if (exif_process_IFD_in_TIFF(ImageInfo,
- php_ifd_get32u(file_header + 4, ImageInfo->motorola_intel),
- SECTION_IFD0 TSRMLS_CC)) {
- ret = TRUE;
- } else {
- exif_error_docref(NULL EXIFERR_CC, ImageInfo, E_WARNING, "Invalid TIFF file");
- }
- }
- else
- if (!memcmp(file_header, "MM\x00\x2a", 4)) {
- ImageInfo->FileType = IMAGE_FILETYPE_TIFF_MM;
- ImageInfo->motorola_intel = 1;
-#ifdef EXIF_DEBUG
- exif_error_docref(NULL EXIFERR_CC, ImageInfo, E_NOTICE, "File has TIFF/MM format");
-#endif
- ImageInfo->sections_found |= FOUND_IFD0;
- if (exif_process_IFD_in_TIFF(ImageInfo,
- php_ifd_get32u(file_header + 4, ImageInfo->motorola_intel),
- SECTION_IFD0 TSRMLS_CC)) {
- ret = TRUE;
- } else {
- exif_error_docref(NULL EXIFERR_CC, ImageInfo, E_WARNING, "Invalid TIFF file");
- }
- } else {
- exif_error_docref(NULL EXIFERR_CC, ImageInfo, E_WARNING, "File not supported");
- return FALSE;
- }
- }
- } else {
- exif_error_docref(NULL EXIFERR_CC, ImageInfo, E_WARNING, "File to small (%d)", ImageInfo->FileSize);
- }
- return ret;
-}
-/* }}} */
-
-/* {{{ exif_discard_imageinfo
- Discard data scanned by exif_read_file.
-*/
-static int exif_discard_imageinfo(image_info_type *ImageInfo)
-{
- int i;
-
- EFREE_IF(ImageInfo->FileName);
- EFREE_IF(ImageInfo->UserComment);
- EFREE_IF(ImageInfo->UserCommentEncoding);
- EFREE_IF(ImageInfo->Copyright);
- EFREE_IF(ImageInfo->CopyrightPhotographer);
- EFREE_IF(ImageInfo->CopyrightEditor);
- EFREE_IF(ImageInfo->Thumbnail.data);
- EFREE_IF(ImageInfo->encode_unicode);
- EFREE_IF(ImageInfo->decode_unicode_be);
- EFREE_IF(ImageInfo->decode_unicode_le);
- EFREE_IF(ImageInfo->encode_jis);
- EFREE_IF(ImageInfo->decode_jis_be);
- EFREE_IF(ImageInfo->decode_jis_le);
- EFREE_IF(ImageInfo->make);
- EFREE_IF(ImageInfo->model);
- for (i=0; i<ImageInfo->xp_fields.count; i++) {
- EFREE_IF(ImageInfo->xp_fields.list[i].value);
- }
- EFREE_IF(ImageInfo->xp_fields.list);
- for (i=0; i<SECTION_COUNT; i++) {
- exif_iif_free(ImageInfo, i);
- }
- exif_file_sections_free(ImageInfo);
- memset(ImageInfo, 0, sizeof(*ImageInfo));
- return TRUE;
-}
-/* }}} */
-
-/* {{{ exif_read_file
- */
-static int exif_read_file(image_info_type *ImageInfo, char *FileName, int read_thumbnail, int read_all TSRMLS_DC)
-{
- int ret;
- struct stat st;
-
- /* Start with an empty image information structure. */
- memset(ImageInfo, 0, sizeof(*ImageInfo));
-
- ImageInfo->motorola_intel = -1; /* flag as unknown */
-
- ImageInfo->infile = php_stream_open_wrapper(FileName, "rb", STREAM_MUST_SEEK|IGNORE_PATH|ENFORCE_SAFE_MODE, NULL);
- if (!ImageInfo->infile) {
- exif_error_docref(NULL EXIFERR_CC, ImageInfo, E_WARNING, "Unable to open file");
- return FALSE;
- }
-
- php_basename(FileName, strlen(FileName), NULL, 0, &(ImageInfo->FileName), NULL TSRMLS_CC);
- ImageInfo->read_thumbnail = read_thumbnail;
- ImageInfo->read_all = read_all;
- ImageInfo->Thumbnail.filetype = IMAGE_FILETYPE_UNKNOWN;
-
- ImageInfo->encode_unicode = safe_estrdup(EXIF_G(encode_unicode));
- ImageInfo->decode_unicode_be = safe_estrdup(EXIF_G(decode_unicode_be));
- ImageInfo->decode_unicode_le = safe_estrdup(EXIF_G(decode_unicode_le));
- ImageInfo->encode_jis = safe_estrdup(EXIF_G(encode_jis));
- ImageInfo->decode_jis_be = safe_estrdup(EXIF_G(decode_jis_be));
- ImageInfo->decode_jis_le = safe_estrdup(EXIF_G(decode_jis_le));
-
- if (php_stream_is(ImageInfo->infile, PHP_STREAM_IS_STDIO)) {
- if (VCWD_STAT(FileName, &st) >= 0) {
- /* Store file date/time. */
- ImageInfo->FileDateTime = st.st_mtime;
- ImageInfo->FileSize = st.st_size;
- /*exif_error_docref(NULL EXIFERR_CC, ImageInfo, E_NOTICE, "Opened stream is file: %d", ImageInfo->FileSize);*/
- }
- } else {
- if (!ImageInfo->FileSize) {
- php_stream_seek(ImageInfo->infile, 0, SEEK_END);
- ImageInfo->FileSize = php_stream_tell(ImageInfo->infile);
- php_stream_seek(ImageInfo->infile, 0, SEEK_SET);
- }
- }
-
- /* Scan the JPEG headers. */
- ret = exif_scan_FILE_header(ImageInfo TSRMLS_CC);
-
- php_stream_close(ImageInfo->infile);
- return ret;
-}
-/* }}} */
-
-/* {{{ proto array exif_read_data(string filename [, sections_needed [, sub_arrays[, read_thumbnail]]])
- Reads header data from the JPEG/TIFF image filename and optionally reads the internal thumbnails */
-PHP_FUNCTION(exif_read_data)
-{
- pval **p_name, **p_sections_needed, **p_sub_arrays, **p_read_thumbnail, **p_read_all;
- int i, ac = ZEND_NUM_ARGS(), ret, sections_needed=0, sub_arrays=0, read_thumbnail=0, read_all=0;
- image_info_type ImageInfo;
- char tmp[64], *sections_str, *s;
-
- memset(&ImageInfo, 0, sizeof(ImageInfo));
-
- if ((ac < 1 || ac > 4) || zend_get_parameters_ex(ac, &p_name, &p_sections_needed, &p_sub_arrays, &p_read_thumbnail, &p_read_all) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_string_ex(p_name);
-
- if(ac >= 2) {
- convert_to_string_ex(p_sections_needed);
- sections_str = safe_emalloc(strlen(Z_STRVAL_PP(p_sections_needed)), 1, 3);
- sprintf(sections_str, ",%s,", Z_STRVAL_PP(p_sections_needed));
- /* sections_str DOES start with , and SPACES are NOT allowed in names */
- s = sections_str;
- while(*++s) {
- if(*s==' ') {
- *s = ',';
- }
- }
- for (i=0; i<SECTION_COUNT; i++) {
- sprintf(tmp, ",%s,", exif_get_sectionname(i));
- if (strstr(sections_str, tmp)) {
- sections_needed |= 1<<i;
- }
- }
- EFREE_IF(sections_str);
- /* now see what we need */
-#ifdef EXIF_DEBUG
- sections_str = exif_get_sectionlist(sections_needed TSRMLS_CC);
- if (!sections_str) {
- RETURN_FALSE;
- }
- exif_error_docref(NULL EXIFERR_CC, &ImageInfo, E_NOTICE, "Sections needed: %s", sections_str[0] ? sections_str : "None");
- EFREE_IF(sections_str);
-#endif
- }
- if(ac >= 3) {
- convert_to_long_ex(p_sub_arrays);
- sub_arrays = Z_LVAL_PP(p_sub_arrays);
- }
- if(ac >= 4) {
- convert_to_long_ex(p_read_thumbnail);
- read_thumbnail = Z_LVAL_PP(p_read_thumbnail);
- }
- if(ac >= 5) {
- convert_to_long_ex(p_read_all);
- read_all = Z_LVAL_PP(p_read_all);
- }
- /* parameters 3,4 will be working in later versions.... */
- read_all = 0; /* just to make function work for 4.2 tree */
-
- ret = exif_read_file(&ImageInfo, Z_STRVAL_PP(p_name), read_thumbnail, read_all TSRMLS_CC);
-
- sections_str = exif_get_sectionlist(ImageInfo.sections_found TSRMLS_CC);
-
-#ifdef EXIF_DEBUG
- if (sections_str)
- exif_error_docref(NULL EXIFERR_CC, &ImageInfo, E_NOTICE, "Sections found: %s", sections_str[0] ? sections_str : "None");
-#endif
-
- ImageInfo.sections_found |= FOUND_COMPUTED|FOUND_FILE;/* do not inform about in debug*/
-
- if (ret==FALSE || (sections_needed && !(sections_needed&ImageInfo.sections_found))) {
- /* array_init must be checked at last! otherwise the array must be freed if a later test fails. */
- exif_discard_imageinfo(&ImageInfo);
- EFREE_IF(sections_str);
- RETURN_FALSE;
- }
-
- array_init(return_value);
-
-#ifdef EXIF_DEBUG
- exif_error_docref(NULL EXIFERR_CC, &ImageInfo, E_NOTICE, "Generate section FILE");
-#endif
-
- /* now we can add our information */
- exif_iif_add_str(&ImageInfo, SECTION_FILE, "FileName", ImageInfo.FileName TSRMLS_CC);
- exif_iif_add_int(&ImageInfo, SECTION_FILE, "FileDateTime", ImageInfo.FileDateTime TSRMLS_CC);
- exif_iif_add_int(&ImageInfo, SECTION_FILE, "FileSize", ImageInfo.FileSize TSRMLS_CC);
- exif_iif_add_int(&ImageInfo, SECTION_FILE, "FileType", ImageInfo.FileType TSRMLS_CC);
- exif_iif_add_str(&ImageInfo, SECTION_FILE, "MimeType", (char*)php_image_type_to_mime_type(ImageInfo.FileType) TSRMLS_CC);
- exif_iif_add_str(&ImageInfo, SECTION_FILE, "SectionsFound", sections_str ? sections_str : "NONE" TSRMLS_CC);
-
-#ifdef EXIF_DEBUG
- exif_error_docref(NULL EXIFERR_CC, &ImageInfo, E_NOTICE, "Generate section COMPUTED");
-#endif
-
- if (ImageInfo.Width>0 && ImageInfo.Height>0) {
- exif_iif_add_fmt(&ImageInfo, SECTION_COMPUTED, "html" TSRMLS_CC, "width=\"%d\" height=\"%d\"", ImageInfo.Width, ImageInfo.Height);
- exif_iif_add_int(&ImageInfo, SECTION_COMPUTED, "Height", ImageInfo.Height TSRMLS_CC);
- exif_iif_add_int(&ImageInfo, SECTION_COMPUTED, "Width", ImageInfo.Width TSRMLS_CC);
- }
- exif_iif_add_int(&ImageInfo, SECTION_COMPUTED, "IsColor", ImageInfo.IsColor TSRMLS_CC);
- if (ImageInfo.motorola_intel != -1) {
- exif_iif_add_int(&ImageInfo, SECTION_COMPUTED, "ByteOrderMotorola", ImageInfo.motorola_intel TSRMLS_CC);
- }
- if (ImageInfo.FocalLength) {
- exif_iif_add_fmt(&ImageInfo, SECTION_COMPUTED, "FocalLength" TSRMLS_CC, "%4.1fmm", ImageInfo.FocalLength);
- if(ImageInfo.CCDWidth) {
- exif_iif_add_fmt(&ImageInfo, SECTION_COMPUTED, "35mmFocalLength" TSRMLS_CC, "%dmm", (int)(ImageInfo.FocalLength/ImageInfo.CCDWidth*35+0.5));
- }
- }
- if(ImageInfo.CCDWidth) {
- exif_iif_add_fmt(&ImageInfo, SECTION_COMPUTED, "CCDWidth" TSRMLS_CC, "%dmm", (int)ImageInfo.CCDWidth);
- }
- if(ImageInfo.ExposureTime>0) {
- if(ImageInfo.ExposureTime <= 0.5) {
- exif_iif_add_fmt(&ImageInfo, SECTION_COMPUTED, "ExposureTime" TSRMLS_CC, "%0.3f s (1/%d)", ImageInfo.ExposureTime, (int)(0.5 + 1/ImageInfo.ExposureTime));
- } else {
- exif_iif_add_fmt(&ImageInfo, SECTION_COMPUTED, "ExposureTime" TSRMLS_CC, "%0.3f s", ImageInfo.ExposureTime);
- }
- }
- if(ImageInfo.ApertureFNumber) {
- exif_iif_add_fmt(&ImageInfo, SECTION_COMPUTED, "ApertureFNumber" TSRMLS_CC, "f/%.1f", ImageInfo.ApertureFNumber);
- }
- if(ImageInfo.Distance) {
- if(ImageInfo.Distance<0) {
- exif_iif_add_str(&ImageInfo, SECTION_COMPUTED, "FocusDistance", "Infinite" TSRMLS_CC);
- } else {
- exif_iif_add_fmt(&ImageInfo, SECTION_COMPUTED, "FocusDistance" TSRMLS_CC, "%0.2fm", ImageInfo.Distance);
- }
- }
- if (ImageInfo.UserComment) {
- exif_iif_add_buffer(&ImageInfo, SECTION_COMPUTED, "UserComment", ImageInfo.UserCommentLength, ImageInfo.UserComment TSRMLS_CC);
- if (ImageInfo.UserCommentEncoding && strlen(ImageInfo.UserCommentEncoding)) {
- exif_iif_add_str(&ImageInfo, SECTION_COMPUTED, "UserCommentEncoding", ImageInfo.UserCommentEncoding TSRMLS_CC);
- }
- }
-
- exif_iif_add_str(&ImageInfo, SECTION_COMPUTED, "Copyright", ImageInfo.Copyright TSRMLS_CC);
- exif_iif_add_str(&ImageInfo, SECTION_COMPUTED, "Copyright.Photographer", ImageInfo.CopyrightPhotographer TSRMLS_CC);
- exif_iif_add_str(&ImageInfo, SECTION_COMPUTED, "Copyright.Editor", ImageInfo.CopyrightEditor TSRMLS_CC);
-
- for (i=0; i<ImageInfo.xp_fields.count; i++) {
- exif_iif_add_str(&ImageInfo, SECTION_WINXP, exif_get_tagname(ImageInfo.xp_fields.list[i].tag, NULL, 0, exif_get_tag_table(SECTION_WINXP) TSRMLS_CC), ImageInfo.xp_fields.list[i].value TSRMLS_CC);
- }
- if (ImageInfo.Thumbnail.size) {
- if (read_thumbnail) {
- /* not exif_iif_add_str : this is a buffer */
- exif_iif_add_tag(&ImageInfo, SECTION_THUMBNAIL, "THUMBNAIL", TAG_NONE, TAG_FMT_UNDEFINED, ImageInfo.Thumbnail.size, ImageInfo.Thumbnail.data TSRMLS_CC);
- }
- if (!ImageInfo.Thumbnail.width || !ImageInfo.Thumbnail.height) {
- /* try to evaluate if thumbnail data is present */
- exif_scan_thumbnail(&ImageInfo TSRMLS_CC);
- }
- exif_iif_add_int(&ImageInfo, SECTION_COMPUTED, "Thumbnail.FileType", ImageInfo.Thumbnail.filetype TSRMLS_CC);
- exif_iif_add_str(&ImageInfo, SECTION_COMPUTED, "Thumbnail.MimeType", (char*)php_image_type_to_mime_type(ImageInfo.Thumbnail.filetype) TSRMLS_CC);
- }
- if (ImageInfo.Thumbnail.width && ImageInfo.Thumbnail.height) {
- exif_iif_add_int(&ImageInfo, SECTION_COMPUTED, "Thumbnail.Height", ImageInfo.Thumbnail.height TSRMLS_CC);
- exif_iif_add_int(&ImageInfo, SECTION_COMPUTED, "Thumbnail.Width", ImageInfo.Thumbnail.width TSRMLS_CC);
- }
- EFREE_IF(sections_str);
-
-#ifdef EXIF_DEBUG
- exif_error_docref(NULL EXIFERR_CC, &ImageInfo, E_NOTICE, "Adding image infos");
-#endif
-
- add_assoc_image_info(return_value, sub_arrays, &ImageInfo, SECTION_FILE TSRMLS_CC);
- add_assoc_image_info(return_value, 1, &ImageInfo, SECTION_COMPUTED TSRMLS_CC);
- add_assoc_image_info(return_value, sub_arrays, &ImageInfo, SECTION_ANY_TAG TSRMLS_CC);
- add_assoc_image_info(return_value, sub_arrays, &ImageInfo, SECTION_IFD0 TSRMLS_CC);
- add_assoc_image_info(return_value, 1, &ImageInfo, SECTION_THUMBNAIL TSRMLS_CC);
- add_assoc_image_info(return_value, 1, &ImageInfo, SECTION_COMMENT TSRMLS_CC);
- add_assoc_image_info(return_value, sub_arrays, &ImageInfo, SECTION_EXIF TSRMLS_CC);
- add_assoc_image_info(return_value, sub_arrays, &ImageInfo, SECTION_GPS TSRMLS_CC);
- add_assoc_image_info(return_value, sub_arrays, &ImageInfo, SECTION_INTEROP TSRMLS_CC);
- add_assoc_image_info(return_value, sub_arrays, &ImageInfo, SECTION_FPIX TSRMLS_CC);
- add_assoc_image_info(return_value, sub_arrays, &ImageInfo, SECTION_APP12 TSRMLS_CC);
- add_assoc_image_info(return_value, sub_arrays, &ImageInfo, SECTION_WINXP TSRMLS_CC);
- add_assoc_image_info(return_value, sub_arrays, &ImageInfo, SECTION_MAKERNOTE TSRMLS_CC);
-
-#ifdef EXIF_DEBUG
- exif_error_docref(NULL EXIFERR_CC, &ImageInfo, E_NOTICE, "Discarding info");
-#endif
-
- exif_discard_imageinfo(&ImageInfo);
-
-#ifdef EXIF_DEBUG
- php_error_docref1(NULL TSRMLS_CC, Z_STRVAL_PP(p_name), E_NOTICE, "done");
-#endif
-}
-/* }}} */
-
-/* {{{ proto string exif_thumbnail(string filename [, &width, &height [, &imagetype]])
- Reads the embedded thumbnail */
-PHP_FUNCTION(exif_thumbnail)
-{
- zval *p_width, *p_height, *p_imagetype;
- char *p_name;
- int p_name_len, ret, arg_c = ZEND_NUM_ARGS();
- image_info_type ImageInfo;
-
- memset(&ImageInfo, 0, sizeof(ImageInfo));
-
- if (arg_c!=1 && arg_c!=3 && arg_c!=4) {
- WRONG_PARAM_COUNT;
- }
-
- if (zend_parse_parameters(arg_c TSRMLS_CC, "s|z/z/z/", &p_name, &p_name_len, &p_width, &p_height, &p_imagetype) == FAILURE) {
- return;
- }
-
- ret = exif_read_file(&ImageInfo, p_name, 1, 0 TSRMLS_CC);
- if (ret==FALSE) {
- RETURN_FALSE;
- }
-
-#ifdef EXIF_DEBUG
- exif_error_docref(NULL EXIFERR_CC, &ImageInfo, E_NOTICE, "Thumbnail data %d %d %d, %d x %d", ImageInfo.Thumbnail.data, ImageInfo.Thumbnail.size, ImageInfo.Thumbnail.filetype, ImageInfo.Thumbnail.width, ImageInfo.Thumbnail.height);
-#endif
- if (!ImageInfo.Thumbnail.data || !ImageInfo.Thumbnail.size) {
- exif_discard_imageinfo(&ImageInfo);
- RETURN_FALSE;
- }
-
-#ifdef EXIF_DEBUG
- exif_error_docref(NULL EXIFERR_CC, &ImageInfo, E_NOTICE, "Returning thumbnail(%d)", ImageInfo.Thumbnail.size);
-#endif
-
- ZVAL_STRINGL(return_value, ImageInfo.Thumbnail.data, ImageInfo.Thumbnail.size, 1);
- if (arg_c >= 3) {
- if (!ImageInfo.Thumbnail.width || !ImageInfo.Thumbnail.height) {
- exif_scan_thumbnail(&ImageInfo TSRMLS_CC);
- }
- zval_dtor(p_width);
- zval_dtor(p_height);
- ZVAL_LONG(p_width, ImageInfo.Thumbnail.width);
- ZVAL_LONG(p_height, ImageInfo.Thumbnail.height);
- }
- if (arg_c >= 4) {
- zval_dtor(p_imagetype);
- ZVAL_LONG(p_imagetype, ImageInfo.Thumbnail.filetype);
- }
-
-#ifdef EXIF_DEBUG
- exif_error_docref(NULL EXIFERR_CC, &ImageInfo, E_NOTICE, "Discarding info");
-#endif
-
- exif_discard_imageinfo(&ImageInfo);
-
-#ifdef EXIF_DEBUG
- php_error_docref1(NULL TSRMLS_CC, p_name, E_NOTICE, "Done");
-#endif
-}
-/* }}} */
-
-/* {{{ proto int exif_imagetype(string imagefile)
- Get the type of an image */
-PHP_FUNCTION(exif_imagetype)
-{
- zval **arg1;
- php_stream * stream;
- int itype = 0;
-
- if (ZEND_NUM_ARGS() != 1)
- WRONG_PARAM_COUNT;
-
- if (zend_get_parameters_ex(1, &arg1) == FAILURE)
- WRONG_PARAM_COUNT;
-
- convert_to_string_ex(arg1);
- stream = php_stream_open_wrapper(Z_STRVAL_PP(arg1), "rb", IGNORE_PATH|ENFORCE_SAFE_MODE|REPORT_ERRORS, NULL);
-
- if (stream == NULL) {
- RETURN_FALSE;
- }
-
- itype = php_getimagetype(stream, NULL TSRMLS_CC);
-
- php_stream_close(stream);
-
- if (itype == IMAGE_FILETYPE_UNKNOWN) {
- RETURN_FALSE;
- } else {
- ZVAL_LONG(return_value, itype);
- }
-}
-/* }}} */
-
-#endif
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- * vim600: sw=4 ts=4 tw=78 fdm=marker
- * vim<600: sw=4 ts=4 tw=78
- */
diff --git a/ext/exif/exif.dsp b/ext/exif/exif.dsp
deleted file mode 100644
index 4a827338b2..0000000000
--- a/ext/exif/exif.dsp
+++ /dev/null
@@ -1,113 +0,0 @@
-# Microsoft Developer Studio Project File - Name="exif" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=exif - Win32 Release_TS
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "exif.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "exif.mak" CFG="exif - Win32 Release_TS"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "exif - Win32 Release_TS" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "exif - Win32 Debug_TS" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "exif - Win32 Release_TS"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release_TS"
-# PROP BASE Intermediate_Dir "Release_TS"
-# PROP BASE Ignore_Export_Lib 0
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release_TS"
-# PROP Intermediate_Dir "Release_TS"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MT /W3 /GX /O2 /I "..\.." /I "..\..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\..\TSRM" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "COMPILE_DL_EXIF" /D ZTS=1 /YX /FD /c
-# ADD CPP /nologo /MD /W3 /GX /O2 /I "..\.." /I "..\..\main" /I "..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\TSRM" /D ZEND_DEBUG=0 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "EXIF_EXPORTS" /D "COMPILE_DL_EXIF" /D ZTS=1 /D "ZEND_WIN32" /D "PHP_WIN32" /D HAVE_EXIF=1 /FR /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x406 /d "NDEBUG"
-# ADD RSC /l 0x406 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib php5ts.lib /nologo /dll /machine:I386
-# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib php5ts.lib /nologo /dll /machine:I386 /out:"..\..\Release_TS/php_exif.dll" /libpath:"..\..\Release_TS" /libpath:"..\..\Release_TS_Inline"
-
-!ELSEIF "$(CFG)" == "exif - Win32 Debug_TS"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Debug_TS"
-# PROP BASE Intermediate_Dir "Debug_TS"
-# PROP BASE Ignore_Export_Lib 0
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Debug_TS"
-# PROP Intermediate_Dir "Debug_TS"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MT /W3 /GX /O2 /I "..\.." /I "..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\TSRM" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "COMPILE_DL_EXIF" /D ZTS=1 /YX /FD /c
-# ADD CPP /nologo /MDd /W3 /GX /O2 /I "..\.." /I "..\..\main" /I "..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\TSRM" /D ZEND_DEBUG=1 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "EXIF_EXPORTS" /D "COMPILE_DL_EXIF" /D ZTS=1 /D "ZEND_WIN32" /D "PHP_WIN32" /D HAVE_EXIF=1 /D "LIBZEND_EXPORTS" /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x406 /d "NDEBUG"
-# ADD RSC /l 0x406 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib php5ts.lib /nologo /dll /machine:I386
-# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib php5ts_debug.lib /nologo /dll /machine:I386 /out:"..\..\Debug_TS/php_exif.dll" /libpath:"..\..\Debug_TS"
-
-!ENDIF
-
-# Begin Target
-
-# Name "exif - Win32 Release_TS"
-# Name "exif - Win32 Debug_TS"
-# Begin Group "Source Files"
-
-# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
-# Begin Source File
-
-SOURCE=.\exif.c
-# End Source File
-# End Group
-# Begin Group "Header Files"
-
-# PROP Default_Filter "h;hpp;hxx;hm;inl"
-# Begin Source File
-
-SOURCE=.\php_exif.h
-# End Source File
-# End Group
-# Begin Group "Resource Files"
-
-# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
-# End Group
-# End Target
-# End Project
diff --git a/ext/exif/package.xml b/ext/exif/package.xml
deleted file mode 100644
index 76ef22c933..0000000000
--- a/ext/exif/package.xml
+++ /dev/null
@@ -1,62 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1" ?>
-<!DOCTYPE package SYSTEM "../pear/package.dtd">
-<package>
- <name>exif</name>
- <summary>Read header information from JPEG and DIFF headers</summary>
- <maintainers>
- <maintainer>
- <user>rasmus</user>
- <name>Rasmus Lerdorf</name>
- <email>helly@php.net</email>
- <role>lead</role>
- </maintainer>
- <maintainer>
- <user>helly</user>
- <name>Markus Boerger</name>
- <email>helly@php.net</email>
- <role>lead</role>
- </maintainer>
- </maintainers>
- <description>
-The EXIF functions provide access to information stored in headers
-of JPEG and TIFF images. This way you can read meta data generated
-by digital cameras and certain image processing applications.
- </description>
- <license>PHP</license>
- <release>
- <state>beta</state>
- <version>5.0.0rc1</version>
- <date>2004-03-19</date>
- <notes>
-package.xml added to support intallation using pear installer
- </notes>
- <filelist>
- <file role="doc" name="CREDITS"/>
- <file role="doc" name="example.php"/>
- <file role="src" name="config.m4"/>
- <file role="src" name="config.w32"/>
- <file role="src" name="exif.dsp"/>
- <file role="src" name="exif.c"/>
- <file role="src" name="php_exif.h"/>
- <file role="test" name="tests/exif000.phpt"/>
- <file role="test" name="tests/exif001.phpt"/>
- <file role="test" name="tests/test1.jpg"/>
- <file role="test" name="tests/exif002.phpt"/>
- <file role="test" name="tests/test2.jpg"/>
- <file role="test" name="tests/exif003.phpt"/>
- <file role="test" name="tests/test3.jpg"/>
- <file role="test" name="tests/exif004.phpt"/>
- <file role="test" name="tests/test4.jpg"/>
- <file role="test" name="tests/exif005.phpt"/>
- <file role="test" name="tests/test5.jpg"/>
- <file role="test" name="tests/exif006.phpt"/>
- <file role="test" name="tests/test6.jpg"/>
- </filelist>
- <deps>
- <dep type="php" rel="ge" version="5" />
- </deps>
- </release>
-</package>
-<!--
-vim:et:ts=1:sw=1
--->
diff --git a/ext/exif/php_exif.h b/ext/exif/php_exif.h
deleted file mode 100644
index 24592befdb..0000000000
--- a/ext/exif/php_exif.h
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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. |
- +----------------------------------------------------------------------+
- | Authors: Rasmus Lerdorf <rasmus@php.net> |
- | Marcus Boerger <helly@php.net> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-#if HAVE_EXIF
-extern zend_module_entry exif_module_entry;
-#define phpext_exif_ptr &exif_module_entry
-
-PHP_FUNCTION(exif_read_data);
-PHP_FUNCTION(exif_tagname);
-PHP_FUNCTION(exif_thumbnail);
-PHP_FUNCTION(exif_imagetype);
-#endif
diff --git a/ext/exif/test.php b/ext/exif/test.php
deleted file mode 100644
index 907b9ea080..0000000000
--- a/ext/exif/test.php
+++ /dev/null
@@ -1,3 +0,0 @@
-<?php
- include 'test.txt';
-?> \ No newline at end of file
diff --git a/ext/exif/test.txt b/ext/exif/test.txt
deleted file mode 100644
index 1c12b509e6..0000000000
--- a/ext/exif/test.txt
+++ /dev/null
@@ -1,365 +0,0 @@
-<?php
-
-/* Test script for PHP module ext/exif
- *
- * (c) Marcus Boerger, 2002
- *
- * $Id$
- *
- * Rename the file to test.php and read the instructions. If the
- * script cannot be executed or does not generate any output check
- * you error log. In most cases this would mean you found an error
- * if the rest of your php environment works fine.
- *
- * The original version of module exif has many errors and mostly
- * fails on executing this script.
- */
-
-$file = array_key_exists('thumbnail',$_REQUEST) ? $_REQUEST['thumbnail'] : '';
-//$file = '/t/temp/kodak-dc4800.tif';
-//$file = '/t/temp/canon-ixus.jpg';
-//$file = '/t/temp/test2.jpg';
-if ( $file) {
- $image = exif_thumbnail($file);
- if ( $image!==false) {
- @Header("content-type: image/jpeg");
- echo $image;
- } else {
- echo "<html><body><table>\n";
- echo "Thumbnail could not be extracted.\n";
- echo "</table></body></html>";
- }
- die();
-}
-
-if ( !defined('IMAGETYPE_GIF')) define('IMAGETYPE_GIF',1);
-if ( !defined('IMAGETYPE_JPEG')) define('IMAGETYPE_JPEG',2);
-if ( !defined('IMAGETYPE_TIFF_II')) define('IMAGETYPE_TIFF_II',7);
-if ( !defined('IMAGETYPE_TIFF_MM')) define('IMAGETYPE_TIFF_MM',8);
-
-$possible = array();
-
-/****************************************************************************/
-// message function is used for debugging purpose: just to se what happens
-function message($msg) {
- error_log($msg,0);
- echo "$msg\n";
-}
-
-function error_msg() {
- $ret = '<b style="color:green">O.K.</b>';
- if (array_key_exists('php_errormsg',$GLOBALS) && strlen($GLOBALS['php_errormsg'])) {
- $ret = '<b style="color:red">'.$GLOBALS['php_errormsg'].'</b>';
- $GLOBALS['php_errormsg'] = '';
- }
- return $ret;
-}
-
-/****************************************************************************/
-// private to function search_file()
-function _search_file($root,&$possible,$path='') {
- $sub = array();
- $cnt = 0;
- $type= false;
-
- //error_log("search_file($root,$path)",0);
- if ($dir = @opendir($root.$path.'/')) {
- while (($found = @readdir($dir)) !== false) {
- $type = @filetype($root.$path.'/'.$found);
- //error_log("search_file($root$path):$type=$found",0);
- switch( $type) {
- case 'file':
- $pos = strrpos($found,'.');
- if ( function_exists('exif_imagetype')) {
- $type = exif_imagetype($root.$path.'/'.$found);
- } else {
- if ( $pos!==false) {
- $type = GetImageSize($root.$path.'/'.$found);
- if ( is_array($type)) {
- $type = $type[2];
- } else {
- $type = false;
- }
- } else $type = false;
- }
- if ( $type!==false)
- {
- $possible[] = array('file'=>$root.$path.'/'.$found, 'type'=>$type);
- //error_log("search_file($root$path) add:$path/$found",0);
- if ( ($cnt=count($possible)) % 100 == 0) {
- error_log("exif test page - counting files: $cnt",0);
- }
- }
- break;
- case 'dir':
- if ( $found!='.' && $found!='..') {
- $sub[count($sub)] = $found;
- }
- break;
- }
- }
- @closedir($dir);
- foreach( $sub as $idx => $found) {
- _search_file($root,$possible,$path.'/'.$found);
- }
- }
-}
-
-/****************************************************************************/
-// function: search_file($file,$ext)
-//
-// Searches for $file in document tree. The path is ignored.
-//
-function search_file() {
- global $argc, $argv;
- $possible = array();
-
- if ( $argc > 1) {
- $path = $argv[1];
- } else if ( array_key_exists('SCRIPT_FILENAME',$_SERVER)) {
- $path = $_SERVER['SCRIPT_FILENAME'];
- //error_log("SCRIPT_FILENAME($path)",0);
- } else {
- $path = $argv[0];
- //error_log("argv($path)",0);
- }
- if ( ($p=strpos($path,'?')) !== false) $path = substr($path,0,$p);
- if ( ($p=strrpos($path,'/')) /*< strlen($path)-1*/) $path = substr($path,0,$p);
- error_log("exif test page - counting files in $path");
- _search_file($path,$possible);
- error_log("exif test page - counting files: ".count($possible)." done.",0);
- return $possible;
-}
-
-/****************************************************************************/
-// function: search_file($file,$ext)
-//
-// Searches for $file in document tree. The path is ignored.
-//
-function AddInfo($Name,$Value,$highlight=0) {
- if (is_array($Value)) $Value = 'Array: ('.join(',',$Value).')';
- $Value = nl2br($Value);
- if ( $highlight) {
- $Name = "<th>$Name</th>";
- } else {
- $Name = "<td>$Name</td>";
- }
- return "<tr>$Name<td>$Value&nbsp;</td></tr>\n";
-}
-
-$possible = search_file();
-
-$title = "PHP module exif test page";
-
-?><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional">
-<html>
-<head>
-<title><?=$title ?></title>
-<style type="text/css">
-body {
- font-size: 12pt;
-}
-h1 {
- font-size: 20pt;
- font-weight:bold;
-}
-h2 {
- font-size: 16pt;
- font-weight:bold;
-}
-th {
- text-align: left;
-}
-ul {
- margin-bottom: 6pt;
-}
-</style>
-</head>
-<body>
-<h1><?=$title ?></h1>
-<h2>(c) Marcus B&ouml;rger, 2002</h2>
-</p>
-<p>
-Images taken from <a href="http://www.exif.org">www.exif.org</a>,
-<a href="http://marcus-boerger.de">marcus-boerger.de</a>
-all rights reserved by their authors and artists, see exif headers.
-The files can be downloaded <a href="http://marcus-boerger.de/php/ext/exif/test/">here</a>.
-To start the test you simple have to put all images into the same directory as this script.
-The test will work with all files in that directory and all subdirectories. To test private
-images just put them into that directory.
-</p>
-<p>
-Youmay take a look at the test <a href="http://marcus-boerger.de/php/ext/exif/test.txt">source here</a>.
-</p>
-<p>
-This test just prooves that some exif headers can be scanned.
-If all files produce a header in output the module might be o.k.
-</p>
-<p>
-What to look for in detail:
-</p>
-<ul>
-<li>kodak-dc4800-plus-acdsee.jpg
- <ul>
- <li>should provide a <b>long</b> comment 'by marcus b&ouml;rger&lt;%04i&gt;'*n</li>
- <li>this file returns an array but it also produces an errormessage because ACDSee destroys
- the integrity of IFD directory (size of directory and offsets of entries following any
- edited entry maybe wrong).
- </li>
- </ul>
-</li>
-<li>hp-photosmart.jpg
- <ul>
- <li>should provide a <b>two line</b> copyright notice</li>
- </ul>
-</li>
-<li>olympus-d320l
- <ul>
- <li>should provide an <b>APP12</b> infoset</li>
- </ul>
-</li>
-<li>unknown.jpg
- <ul>
- <li>should provide an <b>empty</b> comment, this is a comment section and not an IFD0, EXIF or GPS section</li>
- </ul>
-</li>
-<li>some images
- <ul>
- <li>have empty fields, that is the tag is present but no data is stored</li>
- </ul>
-</li>
-</ul>
-<h2>function exif_tagname</h2>
-<table border='1' cellspacing='0' cellpadding='3' summary="EXIF headernames">
-<?php
-if (function_exists('exif_tagname')) {
-?>
-<tr><td>ImageWidth</td><td><?=@exif_tagname(0x0100)?></td><td><?=error_msg()?></td></tr>
-<tr><td>JPEGProc</td><td><?=@exif_tagname(0x0200)?></td><td><?=error_msg()?></td></tr>
-<tr><td>SceneType</td><td><?=@exif_tagname(0xA301)?></td><td><?=error_msg()?></td></tr>
-<tr><td>false</td><td><?=@exif_tagname(0x0000)===false?'false':'value'?></td><td><?=error_msg()?></td></tr>
-<?php
-} else {
- echo "<tr><td>function exif_tagname is not supported</td></tr>\n";
-}
-?>
-</table>
-<br clear="all">
-<h2>function exif_read_data for <?=count($possible)?> images</h2>
-
-<?php
-$check_getimagesize = false;
-$check_exif_thumbnail = true;
-$check_exif_read_data = false;
-$fast_output = false;
-if (function_exists('exif_read_data')) {
- $num = 0;
- echo "<table border='1' cellspacing='0' cellpadding='3' summary='function results'>\n";
- $tab2 = "";//"<table border='1' cellspacing='0' cellpadding='3' summary='EXIF information'>\n";
- $types = array('','GIF','JPEG','PNG','SWF','PSD','BMP','TIFF_II','TIFF_MM','JPC','JP2','JPX','JB2');
- foreach($possible as $idx => $file) {
- $type = $file['type'];
- $file = $file['file'];
- if ( !((++$num)%100)) error_log("exif test page - checking files: $num",0);
- $error = '';
- $len = 2;
- $rows = 1
- + ($check_getimagesize ? 1 : 0)
- + ($check_exif_thumbnail ? 1 : 0)
- + ($check_exif_read_data ? 1 : 0);
- if ( !$fast_output) echo "<tr><td rowspan='$rows' valign='top'>$num</td><th colspan='2'>$file</th></tr>\n";
- if ($check_getimagesize) {
- $len++;
- $size = GetImageSize($file);
- $error = error_msg();// clear message
- if ( $size === false) {
- $error = '<b style="color:red">GetImageSize returned false</b><br>'.$error;
- $res_getimagesize = $error;
- } else {
- $res_getimagesize = '('.join($size,',').')';
- }
- if ( !$fast_output) echo AddInfo("GetImageSize",$error,1);
- }
- if ( $check_exif_thumbnail) {
- $len++;
- if ($type!=IMAGETYPE_JPEG) {// && $type!=IMAGETYPE_TIFF_II && $type!=IMAGETYPE_TIFF_MM) {
- $error = "<b style='color: green'>filetype not supported: $types[$type]</b>";
- $res_exif_thumbnail = $error;
- } else {
- $t_width = 0;
- $t_height = 0;
- $result = exif_thumbnail($file, $t_width, $t_height);
- $error = error_msg();// clear message
- if ( $result === false) {
- $error = '<b style="color:red">exif_thumbnail returned false</b><br>'.$error;
- if ( $t_width && $t_height) {
- $error = "<b style='color:green'>$t_width x $t_height</b><br>$error";
- }
- $res_exif_thumbnail = $error;
- } else {
- $res_exif_thumbnail = $t_width . " x " . $t_height;
- }
- }
- if ( !$fast_output) echo AddInfo("exif_thumbnail",$error,1);
- }
- if ($check_exif_read_data) {
- $len++;
- if ($type!=IMAGETYPE_JPEG && $type!=IMAGETYPE_TIFF_II && $type!=IMAGETYPE_TIFF_MM) {
- $res_exif_read_data = "<b style='color: green'>filetype not supported: $types[$type]</b>";
- if ( !$fast_output) echo AddInfo("exif_read_data",$res_exif_read_data);
- $res = '';
- } else {
- $image = exif_read_data($file,'COMMENT,IFD0,EXIF,APP12',true);
- $error = error_msg();// clear message
- if ( !$fast_output) echo AddInfo("exif_read_data",$error,1);
- $res = '';
- if ( $image === false) {
- $res_exif_read_data = "<b style='color:red'>exif_read_data returned false</b><br>$error";
- } else {
- $res_exif_read_data = $error;
- // ah no!$error = error_msg(); // force o.k.
- foreach($image as $Name => $Value) {
- if ( $Name!='Thumbnail') {
- if ( is_array($Value)) {
- $len++;
- $res .= AddInfo($Name,'Array('.count($Value).')');
- foreach( $Value as $idx => $Entry) {
- if ($idx==='Thumbnail') $Entry = '&lt;data&gt;';
- $len++;
- $res .= AddInfo($Name.':'.$idx,$Entry);
- }
- } else {
- $len++;
- $res .= AddInfo($Name,$Value);
- }
- }
- }
- }
- }
- }
- $tab2 .= "<tr><td rowspan='$len' valign='top'>$num</td></tr>\n";
- $tab2 .= "<tr><th colspan='2'>$file</th></tr>\n";
- if ($check_getimagesize) {
- $tab2 .= "<tr><th>GetImageSize</th><td>$res_getimagesize</td></tr>\n";
- }
- if ($check_exif_thumbnail) {
- $tab2 .= "<tr><th>exif_thumbnail</th><td>$res_exif_thumbnail</td></tr>\n";
- }
- if ($check_exif_read_data) {
- $tab2 .= "<tr><th>exif_read_data</th><td>$res_exif_read_data</td></tr>\n";
- $tab2 .= $res;
- }
- if ( $fast_output) {
- echo $tab2;
- $tab2 = '';
- }
- }
- error_log("exif test page - checking files: ".count($possible)." done.",0);
- echo $tab2;
- echo "</table>\n";
-} else {
- echo "<h1 style='color:red'>function exif_read_data is not supported</h1>\n";
-}
-?>
-</body>
-</html> \ No newline at end of file
diff --git a/ext/exif/tests/exif000.phpt b/ext/exif/tests/exif000.phpt
deleted file mode 100644
index eea16438cf..0000000000
--- a/ext/exif/tests/exif000.phpt
+++ /dev/null
@@ -1,57 +0,0 @@
---TEST--
-Check for exif_read_data default behaviour
---SKIPIF--
-<?php if (!extension_loaded('exif')) print 'skip exif extension not available';?>
---INI--
-output_handler=
-zlib.output_compression=0
---FILE--
-<?php
-/*
- test1.jpg is a 1*1 image that does not contain any Exif/Comment information
- test2.jpg is the same image but contains Exif/Comment information and a
- copy of test1.jpg as a thumbnail.
-*/
-print_r(exif_read_data(dirname(__FILE__).'/test2.jpg'));
-?>
---EXPECTF--
-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
- )
-
-)
diff --git a/ext/exif/tests/exif001.phpt b/ext/exif/tests/exif001.phpt
deleted file mode 100644
index 8fac4286ca..0000000000
--- a/ext/exif/tests/exif001.phpt
+++ /dev/null
@@ -1,84 +0,0 @@
---TEST--
-Check for exif_read_data
---SKIPIF--
-<?php if (!extension_loaded('exif')) print 'skip exif extension not available';?>
---INI--
-output_handler=
-zlib.output_compression=0
---FILE--
-<?php
-/*
- test1.jpg is a 1*1 image that does not contain any Exif/Comment information
- test2.jpg is the same image but contains Exif/Comment information and a
- copy of test1.jpg as a thumbnail.
-*/
-var_dump(exif_read_data(dirname(__FILE__).'/test2.jpg','',true,false));
-?>
---EXPECTF--
-array(5) {
- ["FILE"]=>
- array(6) {
- ["FileName"]=>
- string(9) "test2.jpg"
- ["FileDateTime"]=>
- int(%d)
- ["FileSize"]=>
- int(1240)
- ["FileType"]=>
- int(2)
- ["MimeType"]=>
- string(10) "image/jpeg"
- ["SectionsFound"]=>
- string(33) "ANY_TAG, IFD0, THUMBNAIL, COMMENT"
- }
- ["COMPUTED"]=>
- array(12) {
- ["html"]=>
- string(20) "width="1" height="1""
- ["Height"]=>
- int(1)
- ["Width"]=>
- int(1)
- ["IsColor"]=>
- int(1)
- ["ByteOrderMotorola"]=>
- int(1)
- ["UserComment"]=>
- string(16) "Exif test image."
- ["UserCommentEncoding"]=>
- string(5) "ASCII"
- ["Copyright"]=>
- string(41) "Photo (c) M.Boerger, Edited by M.Boerger."
- ["Copyright.Photographer"]=>
- string(19) "Photo (c) M.Boerger"
- ["Copyright.Editor"]=>
- string(20) "Edited by M.Boerger."
- ["Thumbnail.FileType"]=>
- int(2)
- ["Thumbnail.MimeType"]=>
- string(10) "image/jpeg"
- }
- ["IFD0"]=>
- array(2) {
- ["Copyright"]=>
- string(19) "Photo (c) M.Boerger"
- ["UserComment"]=>
- string(5) "ASCII"
- }
- ["THUMBNAIL"]=>
- array(2) {
- ["JPEGInterchangeFormat"]=>
- int(134)
- ["JPEGInterchangeFormatLength"]=>
- int(523)
- }
- ["COMMENT"]=>
- array(3) {
- [0]=>
- string(11) "Comment #1."
- [1]=>
- string(11) "Comment #2."
- [2]=>
- string(13) "Comment #3end"
- }
-} \ No newline at end of file
diff --git a/ext/exif/tests/exif002.phpt b/ext/exif/tests/exif002.phpt
deleted file mode 100644
index 1b1220c600..0000000000
--- a/ext/exif/tests/exif002.phpt
+++ /dev/null
@@ -1,24 +0,0 @@
---TEST--
-Check for exif_thumbnail
---SKIPIF--
-<?php if (!extension_loaded('exif')) print 'skip exif extension not available';?>
---INI--
-magic_quotes_runtime=0
-output_handler=
-zlib.output_compression=0
---FILE--
-<?php
-/*
- test1.jpg is a 1*1 image that does not contain any Exif/Comment information
- test2.jpg is the same image but contains Exif/Comment information and a
- copy of test1.jpg as a thumbnail.
-*/
-$infile = dirname(__FILE__).'/test1.jpg';
-echo md5_file($infile).'_'.filesize($infile);
-$thumb = exif_thumbnail(dirname(__FILE__).'/test2.jpg');
-echo " == ";
-echo md5($thumb).'_'.strlen($thumb);
-echo "\n";
-?>
---EXPECT--
-27bbfd9fc10e1e663d749f5225447905_523 == 27bbfd9fc10e1e663d749f5225447905_523
diff --git a/ext/exif/tests/exif003.phpt b/ext/exif/tests/exif003.phpt
deleted file mode 100644
index 20cb61ee17..0000000000
--- a/ext/exif/tests/exif003.phpt
+++ /dev/null
@@ -1,91 +0,0 @@
---TEST--
-Check for exif_read_data, Unicode user comment
---SKIPIF--
-<?php
- if (!extension_loaded('exif')) die('skip exif extension not available');
- if (!extension_loaded('mbstring')) die('skip mbstring extension not available');
- if (!defined("EXIF_USE_MBSTRING") || !EXIF_USE_MBSTRING) die ('skip mbstring loaded by dl');
-?>
---INI--
-output_handler=
-zlib.output_compression=0
-exif.decode_unicode_motorola=UCS-2BE
-exif.encode_unicode=ISO-8859-15
---FILE--
-<?php
-/*
- test1.jpg is a 1*1 image that does not contain any Exif/Comment information
- test2.jpg is the same image but contains Exif/Comment information and a
- copy of test1.jpg as a thumbnail.
- test3.jpg is the same as test2.jpg but with a UNICODE UserComment: &Auml;&Ouml;&&Uuml;&szlig;&auml;&ouml;&uuml;
-*/
-var_dump(exif_read_data(dirname(__FILE__).'/test3.jpg','',true,false));
-?>
---EXPECTF--
-array(5) {
- ["FILE"]=>
- array(6) {
- ["FileName"]=>
- string(9) "test3.jpg"
- ["FileDateTime"]=>
- int(%s)
- ["FileSize"]=>
- int(1240)
- ["FileType"]=>
- int(2)
- ["MimeType"]=>
- string(10) "image/jpeg"
- ["SectionsFound"]=>
- string(33) "ANY_TAG, IFD0, THUMBNAIL, COMMENT"
- }
- ["COMPUTED"]=>
- array(12) {
- ["html"]=>
- string(20) "width="1" height="1""
- ["Height"]=>
- int(1)
- ["Width"]=>
- int(1)
- ["IsColor"]=>
- int(1)
- ["ByteOrderMotorola"]=>
- int(1)
- ["UserComment"]=>
- string(7) "ÄÖÜßäöü"
- ["UserCommentEncoding"]=>
- string(7) "UNICODE"
- ["Copyright"]=>
- string(41) "Photo (c) M.Boerger, Edited by M.Boerger."
- ["Copyright.Photographer"]=>
- string(19) "Photo (c) M.Boerger"
- ["Copyright.Editor"]=>
- string(20) "Edited by M.Boerger."
- ["Thumbnail.FileType"]=>
- int(2)
- ["Thumbnail.MimeType"]=>
- string(10) "image/jpeg"
- }
- ["IFD0"]=>
- array(2) {
- ["Copyright"]=>
- string(19) "Photo (c) M.Boerger"
- ["UserComment"]=>
- string(7) "UNICODE"
- }
- ["THUMBNAIL"]=>
- array(2) {
- ["JPEGInterchangeFormat"]=>
- int(134)
- ["JPEGInterchangeFormatLength"]=>
- int(523)
- }
- ["COMMENT"]=>
- array(3) {
- [0]=>
- string(11) "Comment #1."
- [1]=>
- string(11) "Comment #2."
- [2]=>
- string(13) "Comment #3end"
- }
-} \ No newline at end of file
diff --git a/ext/exif/tests/exif004.phpt b/ext/exif/tests/exif004.phpt
deleted file mode 100644
index 229f49e145..0000000000
--- a/ext/exif/tests/exif004.phpt
+++ /dev/null
@@ -1,38 +0,0 @@
---TEST--
-Check for exif_read_data, Unicode WinXP tags
---SKIPIF--
-<?php
- if (!extension_loaded('exif')) die('skip exif extension not available');
- if (!extension_loaded('mbstring')) die('skip mbstring extension not available');
- if (!defined("EXIF_USE_MBSTRING") || !EXIF_USE_MBSTRING) die ('skip mbstring loaded by dl');
-?>
---INI--
-output_handler=
-zlib.output_compression=0
-exif.decode_unicode_intel=UCS-2LE
-exif.decode_unicode_motorola=UCS-2BE
-exif.encode_unicode=ISO-8859-1
---FILE--
-<?php
-/*
- test4.jpg is a 1*1 image that contains Exif tags written by WindowsXP
-*/
-$image = exif_read_data(dirname(__FILE__).'/test4.jpg','',true,false);
-echo var_dump($image['WINXP']);
-?>
---EXPECT--
-array(5) {
- ["Subject"]=>
- string(10) "Subject..."
- ["Keywords"]=>
- string(11) "Keywords..."
- ["Author"]=>
- string(9) "Rui Carmo"
- ["Comments"]=>
- string(29) "Comments
-Line2
-Line3
-Line4"
- ["Title"]=>
- string(8) "Title..."
-}
diff --git a/ext/exif/tests/exif005.phpt b/ext/exif/tests/exif005.phpt
deleted file mode 100644
index e34e3a0421..0000000000
--- a/ext/exif/tests/exif005.phpt
+++ /dev/null
@@ -1,22 +0,0 @@
---TEST--
-Check for exif_read_data, unusual IFD start
---SKIPIF--
-<?php if (!extension_loaded('exif')) print 'skip exif extension not available';?>
---INI--
-output_handler=
-zlib.output_compression=0
---FILE--
-<?php
-/* Do not change this test it is a README.TESTING example.
- * test5.jpg is a 1*1 image that contains an Exif section with ifd = 00000009h
- */
-$image = exif_read_data(dirname(__FILE__).'/test5.jpg','',true,false);
-var_dump($image['IFD0']);
-?>
---EXPECT--
-array(2) {
- ["ImageDescription"]=>
- string(11) "Ifd00000009"
- ["DateTime"]=>
- string(19) "2002:10:18 20:06:00"
-} \ No newline at end of file
diff --git a/ext/exif/tests/exif006.phpt b/ext/exif/tests/exif006.phpt
deleted file mode 100644
index bad74ee4fa..0000000000
--- a/ext/exif/tests/exif006.phpt
+++ /dev/null
@@ -1,89 +0,0 @@
---TEST--
-Check for exif_read_data, magic_quotes_runtime
---SKIPIF--
-<?php
- if (!extension_loaded('exif')) die('skip exif extension not available');
- if (version_compare(PHP_VERSION, "4.4.0-dev", "<")) die('skip PHP 4.4 required');
-?>
---INI--
-output_handler=
-zlib.output_compression=0
-magic_quotes_runtime=1
---FILE--
-<?php
-/*
- test1.jpg is a 1*1 image that does not contain any Exif/Comment information
- test2.jpg is the same image but contains Exif/Comment information and a
- copy of test1.jpg as a thumbnail.
- test6.jpg is the same as test2.jpg but with a UNICODE UserComment: &Auml;&Ouml;&&Uuml;&szlig;&auml;&ouml;&uuml;
-*/
-var_dump(exif_read_data(dirname(__FILE__).'/test6.jpg','',true,false));
-?>
---EXPECTF--
-array(5) {
- ["FILE"]=>
- array(6) {
- ["FileName"]=>
- string(9) "test6.jpg"
- ["FileDateTime"]=>
- int(%d)
- ["FileSize"]=>
- int(1240)
- ["FileType"]=>
- int(2)
- ["MimeType"]=>
- string(10) "image/jpeg"
- ["SectionsFound"]=>
- string(33) "ANY_TAG, IFD0, THUMBNAIL, COMMENT"
- }
- ["COMPUTED"]=>
- array(12) {
- ["html"]=>
- string(24) "width=\"1\" height=\"1\""
- ["Height"]=>
- int(1)
- ["Width"]=>
- int(1)
- ["IsColor"]=>
- int(1)
- ["ByteOrderMotorola"]=>
- int(1)
- ["UserComment"]=>
- string(16) "Hallo \'Du\'+da!"
- ["UserCommentEncoding"]=>
- string(5) "ASCII"
- ["Copyright"]=>
- string(45) "Photo \"M. Boerger\"., Edited \'M. Boerger\'."
- ["Copyright.Photographer"]=>
- string(21) "Photo \"M. Boerger\"."
- ["Copyright.Editor"]=>
- string(22) "Edited \'M. Boerger\'."
- ["Thumbnail.FileType"]=>
- int(2)
- ["Thumbnail.MimeType"]=>
- string(10) "image/jpeg"
- }
- ["IFD0"]=>
- array(2) {
- ["Copyright"]=>
- string(21) "Photo \"M. Boerger\"."
- ["UserComment"]=>
- string(5) "ASCII"
- }
- ["THUMBNAIL"]=>
- array(2) {
- ["JPEGInterchangeFormat"]=>
- int(134)
- ["JPEGInterchangeFormatLength"]=>
- int(523)
- }
- ["COMMENT"]=>
- array(3) {
- [0]=>
- string(13) "Comment \"1\""
- [1]=>
- string(13) "Comment \'2\'"
- [2]=>
- string(13) "Comment #3end"
- }
-}
diff --git a/ext/exif/tests/test1.jpg b/ext/exif/tests/test1.jpg
deleted file mode 100644
index 121decb65a..0000000000
--- a/ext/exif/tests/test1.jpg
+++ /dev/null
Binary files differ
diff --git a/ext/exif/tests/test2.jpg b/ext/exif/tests/test2.jpg
deleted file mode 100644
index f60ecded6f..0000000000
--- a/ext/exif/tests/test2.jpg
+++ /dev/null
Binary files differ
diff --git a/ext/exif/tests/test3.jpg b/ext/exif/tests/test3.jpg
deleted file mode 100644
index 7547a16630..0000000000
--- a/ext/exif/tests/test3.jpg
+++ /dev/null
Binary files differ
diff --git a/ext/exif/tests/test4.jpg b/ext/exif/tests/test4.jpg
deleted file mode 100644
index 8a23a7b658..0000000000
--- a/ext/exif/tests/test4.jpg
+++ /dev/null
Binary files differ
diff --git a/ext/exif/tests/test5.jpg b/ext/exif/tests/test5.jpg
deleted file mode 100644
index d03cac18a3..0000000000
--- a/ext/exif/tests/test5.jpg
+++ /dev/null
Binary files differ
diff --git a/ext/exif/tests/test6.jpg b/ext/exif/tests/test6.jpg
deleted file mode 100644
index 073cefdfe0..0000000000
--- a/ext/exif/tests/test6.jpg
+++ /dev/null
Binary files differ
diff --git a/ext/ext_skel b/ext/ext_skel
deleted file mode 100755
index 58cc89f80f..0000000000
--- a/ext/ext_skel
+++ /dev/null
@@ -1,300 +0,0 @@
-#!/bin/sh
-
-givup() {
- echo $*
- exit 1
-}
-
-usage() {
-echo "$0 --extname=module [--proto=file] [--stubs=file] [--xml[=file]]"
-echo " [--skel=dir] [--full-xml] [--no-help]"
-echo ""
-echo " --extname=module module is the name of your extension"
-echo " --proto=file file contains prototypes of functions to create"
-echo " --stubs=file generate only function stubs in file"
-echo " --xml generate xml documentation to be added to phpdoc-cvs"
-echo " --skel=dir path to the skeleton directory"
-echo " --full-xml generate xml documentation for a self-contained extension"
-echo " (not yet implemented)"
-echo " --no-help don't try to be nice and create comments in the code"
-echo " and helper functions to test if the module compiled"
-exit 1
-}
-
-if test $# = 0; then
- usage
-fi
-
-while test $# -gt 0; do
- case "$1" in
- -*=*) optarg=`echo "$1" | sed 's/[-_a-zA-Z0-9]*=//'` ;;
- *) optarg= ;;
- esac
-
- case $1 in
- --extname=?*)
- extname=$optarg
- EXTNAME=`echo $extname | tr "[:lower:]" "[:upper:]"`
- ;;
- --proto=?*)
- proto=$optarg
- ;;
- --stubs=*)
- stubs=yes
- stubfile=$optarg
- ;;
- --xml)
- xml="yes"
- ;;
- --xml=?*)
- xml=$optarg
- ;;
- --full-xml)
- full_xml="yes"
- ;;
- --no-help)
- no_help="yes"
- ;;
- --skel=?*)
- skel_dir=$optarg
- ;;
- *)
- usage
- ;;
- esac
- shift
-done
-
-if test -d "$extname" ; then
- givup "Directory $extname already exists."
-fi
-
-if test -z "$skel_dir"; then
- skel_dir="skeleton"
-fi
-
-## convert skel_dir to full path
-skel_dir=`cd $skel_dir && pwd`
-
-test -d $skel_dir || givup "directory $skel_dir does not exist or is not directory"
-
-if echo '\c' | grep -s c >/dev/null 2>&1
-then
- ECHO_N="echo -n"
- ECHO_C=""
-else
- ECHO_N="echo"
- ECHO_C='\c'
-fi
-
-if test -z "$stubs"; then
- echo "Creating directory $extname"
- stubfile=$extname"/function_stubs"
- mkdir $extname || givup "Cannot create directory $extname"
-fi
-
-if test -n "$proto"; then
- cat $proto | awk -v extname=$extname -v stubs=$stubs -v stubfile=$stubfile -v xml=$xml -v full_xml=$full_xml -v i_know_what_to_do_shut_up_i_dont_need_your_help_mode=$no_help -f $skel_dir/create_stubs
-fi
-
-if test -z "$stubs"; then
- cd $extname
- chmod 755 .
-
-$ECHO_N "Creating basic files:$ECHO_C"
-
-$ECHO_N " config.m4$ECHO_C"
-cat >config.m4 <<eof
-dnl \$Id\$
-dnl config.m4 for extension $extname
-
-dnl Comments in this file start with the string 'dnl'.
-dnl Remove where necessary. This file will not work
-dnl without editing.
-
-dnl If your extension references something external, use with:
-
-dnl PHP_ARG_WITH($extname, for $extname support,
-dnl Make sure that the comment is aligned:
-dnl [ --with-$extname Include $extname support])
-
-dnl Otherwise use enable:
-
-dnl PHP_ARG_ENABLE($extname, whether to enable $extname support,
-dnl Make sure that the comment is aligned:
-dnl [ --enable-$extname Enable $extname support])
-
-if test "\$PHP_$EXTNAME" != "no"; then
- dnl Write more examples of tests here...
-
- dnl # --with-$extname -> check with-path
- dnl SEARCH_PATH="/usr/local /usr" # you might want to change this
- dnl SEARCH_FOR="/include/$extname.h" # you most likely want to change this
- dnl if test -r \$PHP_$EXTNAME/\$SEARCH_FOR; then # path given as parameter
- dnl ${EXTNAME}_DIR=\$PHP_$EXTNAME
- dnl else # search default path list
- dnl AC_MSG_CHECKING([for $extname files in default path])
- dnl for i in \$SEARCH_PATH ; do
- dnl if test -r \$i/\$SEARCH_FOR; then
- dnl ${EXTNAME}_DIR=\$i
- dnl AC_MSG_RESULT(found in \$i)
- dnl fi
- dnl done
- dnl fi
- dnl
- dnl if test -z "\$${EXTNAME}_DIR"; then
- dnl AC_MSG_RESULT([not found])
- dnl AC_MSG_ERROR([Please reinstall the $extname distribution])
- dnl fi
-
- dnl # --with-$extname -> add include path
- dnl PHP_ADD_INCLUDE(\$${EXTNAME}_DIR/include)
-
- dnl # --with-$extname -> check for lib and symbol presence
- dnl LIBNAME=$extname # you may want to change this
- dnl LIBSYMBOL=$extname # you most likely want to change this
-
- dnl PHP_CHECK_LIBRARY(\$LIBNAME,\$LIBSYMBOL,
- dnl [
- dnl PHP_ADD_LIBRARY_WITH_PATH(\$LIBNAME, \$${EXTNAME}_DIR/lib, ${EXTNAME}_SHARED_LIBADD)
- dnl AC_DEFINE(HAVE_${EXTNAME}LIB,1,[ ])
- dnl ],[
- dnl AC_MSG_ERROR([wrong $extname lib version or lib not found])
- dnl ],[
- dnl -L\$${EXTNAME}_DIR/lib -lm -ldl
- dnl ])
- dnl
- dnl PHP_SUBST(${EXTNAME}_SHARED_LIBADD)
-
- PHP_NEW_EXTENSION($extname, $extname.c, \$ext_shared)
-fi
-eof
-
-$ECHO_N " config.w32$ECHO_C"
-cat >config.w32 <<eof
-// \$Id\$
-// vim:ft=javascript
-
-// If your extension references something external, use ARG_WITH
-// ARG_WITH("$extname", "for $extname support", "no");
-
-// Otherwise, use ARG_ENABLE
-// ARG_ENABLE("$extname", "enable $extname support", "no");
-
-if (PHP_$EXTNAME != "no") {
- EXTENSION("$extname", "$extname.c");
-}
-
-eof
-
-$ECHO_N " .cvsignore$ECHO_C"
-cat >.cvsignore <<eof
-.deps
-*.lo
-*.la
-eof
-
-$ECHO_N " $extname.c$ECHO_C"
-echo "s/extname/$extname/g" > sedscript
-echo "s/EXTNAME/$EXTNAME/g" >> sedscript
-echo '/__function_entries_here__/r function_entries' >> sedscript
-echo '/__function_stubs_here__/r function_stubs' >> sedscript
-echo '/__header_here__/r ../../header' >> sedscript
-echo '/__footer_here__/r ../../footer' >> sedscript
-echo '/__function_entries_here__/D' >> sedscript
-echo '/__function_stubs_here__/D' >> sedscript
-echo '/__header_here__/D' >> sedscript
-echo '/__footer_here__/D' >> sedscript
-if [ ! -z "$no_help" ]; then
- echo "/confirm_$extname_compiled/D" >> sedscript
- echo '/Remove the following/,/^\*\//D' >> sedscript
- echo 's/[[:space:]]\/\*.\+\*\///' >> sedscript
- echo 's/^\/\*.*\*\/$//' >> sedscript
- echo '/^[[:space:]]*\/\*/,/^[[:space:]]*\*\//D' >> sedscript
-fi
-
-sed -f sedscript < $skel_dir/skeleton.c > $extname.c
-
-
-$ECHO_N " php_$extname.h$ECHO_C"
-echo "s/extname/$extname/g" > sedscript
-echo "s/EXTNAME/$EXTNAME/g" >> sedscript
-echo '/__function_declarations_here__/r function_declarations' >> sedscript
-echo '/__header_here__/r ../../header' >> sedscript
-echo '/__footer_here__/r ../../footer' >> sedscript
-echo '/__function_declarations_here__/D' >> sedscript
-echo '/__header_here__/D' >> sedscript
-echo '/__footer_here__/D' >> sedscript
-if [ ! -z "$no_help" ]; then
- echo "/confirm_$extname_compiled/D" >> sedscript
- echo 's/[[:space:]]\/\*.\+\*\///' >> sedscript
- echo 's/^\/\*.*\*\/$//' >> sedscript
- echo '/^[[:space:]]*\/\*/,/^[[:space:]]*\*\//D' >> sedscript
-fi
-sed -f sedscript <$skel_dir/php_skeleton.h > php_$extname.h
-
-$ECHO_N " CREDITS$ECHO_C"
-echo "s/extname/$extname/g" > sedscript
-sed -f sedscript <$skel_dir/CREDITS > CREDITS
-
-$ECHO_N " EXPERIMENTAL$ECHO_C"
-echo "s/extname/$extname/g" > sedscript
-sed -f sedscript <$skel_dir/EXPERIMENTAL > EXPERIMENTAL
-
-$ECHO_N " tests/001.phpt$ECHO_C"
-mkdir tests || givup "Cannot create tests directory"
-chmod 755 tests
-sed -f sedscript <$skel_dir/tests/001.phpt > tests/001.phpt
-
-if test -z "$stubs" && test -z "$no_help"; then
- $ECHO_N " $extname.php$ECHO_C"
- sed \
- -e "s/extname/$extname/g" \
- <$skel_dir/skeleton.php \
- > $extname.php
-fi
-
-rm sedscript
-
-if test -n "$proto"; then
- if test -z "$stubs"; then
- rm function_entries
- rm function_declarations
- rm function_stubs
- fi
- if test -f function_warning; then
- rm function_warning
- warning="
-NOTE! Because some arguments to functions were resources, the code generated
-cannot yet be compiled without editing. Please consider this to be step 4.5
-in the instructions above.
-"
- fi
-fi
-
-find . -type f | xargs chmod 644
-find . -type d | xargs chmod 755
-fi
-
-echo " [done]."
-
-if test -z "$no_help" && test -z "$stubs"; then
- cat <<eof
-
-To use your new extension, you will have to execute the following steps:
-
-1. $ cd ..
-2. $ vi ext/$extname/config.m4
-3. $ ./buildconf
-4. $ ./configure --[with|enable]-$extname
-5. $ make
-6. $ ./php -f ext/$extname/$extname.php
-7. $ vi ext/$extname/$extname.c
-8. $ make
-
-Repeat steps 3-6 until you are satisfied with ext/$extname/config.m4 and
-step 6 confirms that your module is compiled into PHP. Then, start writing
-code and repeat the last two steps as often as necessary.
-$warning
-eof
-fi
diff --git a/ext/ext_skel_win32.php b/ext/ext_skel_win32.php
deleted file mode 100644
index c04f037657..0000000000
--- a/ext/ext_skel_win32.php
+++ /dev/null
@@ -1,65 +0,0 @@
-<?php
-/* $Id$ */
-
-if (php_sapi_name() != "cli") {
- echo "Please run this script using the CLI version of PHP\n";
- exit;
-}
-/*
- This script can be used on Win32 systems
-
- 1) Make sure you have CygWin installed
- 2) Adjust the $cygwin_path to match your installation
- 3) Change the environment cariable PATHEXT to include .PHP
- 4) run ext_skel --extname=...
- the first time you run this script you will be asked to
- associate it with a program. chooses the CLI version of php.
-*/
-
-$cygwin_path = 'c:\cygwin\bin';
-
-$path = getenv("PATH");
-putenv("PATH=$cygwin_path;$path");
-
-array_shift($argv);
-system("sh ext_skel " . implode(" ", $argv));
-
-$extname = "";
-$skel = "skeleton";
-foreach($argv as $arg) {
- if (strtolower(substr($arg, 0, 9)) == "--extname") {
- $extname = substr($arg, 10);
- }
- if (strtolower(substr($arg, 0, 6)) == "--skel") {
- $skel = substr($arg, 7);
- }
-}
-
-$fp = fopen("$skel/skeleton.dsp", "rb");
-if ($fp) {
- $dsp_file = fread($fp, filesize("$skel/skeleton.dsp"));
- fclose($fp);
-
- $dsp_file = str_replace("extname", $extname, $dsp_file);
- $dsp_file = str_replace("EXTNAME", strtoupper($extname), $dsp_file);
- $fp = fopen("$extname/$extname.dsp", "wb");
- if ($fp) {
- fwrite($fp, $dsp_file);
- fclose($fp);
- }
-}
-
-$fp = fopen("$extname/$extname.php", "rb");
-if ($fp) {
- $php_file = fread($fp, filesize("$extname/$extname.php"));
- fclose($fp);
-
- $php_file = str_replace("dl('", "dl('php_", $php_file);
- $fp = fopen("$extname/$extname.php", "wb");
- if ($fp) {
- fwrite($fp, $php_file);
- fclose($fp);
- }
-}
-
-?> \ No newline at end of file
diff --git a/ext/fam/CREDITS b/ext/fam/CREDITS
deleted file mode 100644
index 60e3234a4c..0000000000
--- a/ext/fam/CREDITS
+++ /dev/null
@@ -1,2 +0,0 @@
-fam
-Sascha Schumann
diff --git a/ext/fam/config.m4 b/ext/fam/config.m4
deleted file mode 100644
index ebbd0e4db1..0000000000
--- a/ext/fam/config.m4
+++ /dev/null
@@ -1,56 +0,0 @@
-dnl $Id$
-dnl config.m4 for extension fam
-
-dnl Comments in this file start with the string 'dnl'.
-dnl Remove where necessary. This file will not work
-dnl without editing.
-
-dnl If your extension references something external, use with:
-
-PHP_ARG_WITH(fam, for fam support,
-[ --with-fam Include fam support])
-
-if test "$PHP_FAM" != "no"; then
- dnl Write more examples of tests here...
-
- dnl # --with-fam -> check with-path
-SEARCH_PATH="/usr/local /usr" # you might want to change this
-SEARCH_FOR="/include/fam.h" # you most likely want to change this
-if test -r $PHP_FAM/$SEARCH_FOR; then # path given as parameter
- FAM_DIR=$PHP_FAM
-else # search default path list
- AC_MSG_CHECKING([for fam files in default path])
- for i in $SEARCH_PATH ; do
- if test -r $i/$SEARCH_FOR; then
- FAM_DIR=$i
- AC_MSG_RESULT(found in $i)
- fi
- done
-fi
-
-if test -z "$FAM_DIR"; then
- AC_MSG_RESULT([not found])
- AC_MSG_ERROR([Please reinstall the fam distribution])
-fi
-
-# --with-fam -> add include path
-PHP_ADD_INCLUDE($FAM_DIR/include)
-
-# --with-fam -> chech for lib and symbol presence
-LIBNAME=fam # you may want to change this
-LIBSYMBOL=FAMOpen # you most likely want to change this
-
-PHP_CHECK_LIBRARY($LIBNAME,$LIBSYMBOL,
-[
- PHP_ADD_LIBRARY_WITH_PATH($LIBNAME, $FAM_DIR/lib, FAM_SHARED_LIBADD)
- AC_DEFINE(HAVE_FAMLIB,1,[ ])
-],[
- AC_MSG_ERROR([wrong fam lib version or lib not found])
-],[
- -L$FAM_DIR/lib -lm -ldl
-])
-
-PHP_SUBST(FAM_SHARED_LIBADD)
-
- PHP_NEW_EXTENSION(fam, fam.c, $ext_shared)
-fi
diff --git a/ext/fam/fam.c b/ext/fam/fam.c
deleted file mode 100644
index d83ad77cef..0000000000
--- a/ext/fam/fam.c
+++ /dev/null
@@ -1,432 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Sascha Schumann <sascha@schumann.cx> |
- +----------------------------------------------------------------------+
-
- $Id$
-*/
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "php.h"
-#include "php_ini.h"
-#include "ext/standard/info.h"
-#include "php_fam.h"
-
-#include <fam.h>
-
-/* If you declare any globals in php_fam.h uncomment this:
-ZEND_DECLARE_MODULE_GLOBALS(fam)
-*/
-
-/* True global resources - no need for thread safety here */
-static int le_fam, le_fam_r;
-
-/* {{{ fam_functions[]
- *
- * Every user visible function must have an entry in fam_functions[].
- */
-function_entry fam_functions[] = {
- PHP_FE(fam_open, NULL)
- PHP_FE(fam_close, NULL)
- PHP_FE(fam_monitor_directory, NULL)
- PHP_FE(fam_monitor_file, NULL)
- PHP_FE(fam_monitor_collection, NULL)
- PHP_FE(fam_suspend_monitor, NULL)
- PHP_FE(fam_resume_monitor, NULL)
- PHP_FE(fam_cancel_monitor, NULL)
- PHP_FE(fam_pending, NULL)
- PHP_FE(fam_next_event, NULL)
- {NULL, NULL, NULL} /* Must be the last line in fam_functions[] */
-};
-/* }}} */
-
-/* {{{ fam_module_entry
- */
-zend_module_entry fam_module_entry = {
-#if ZEND_MODULE_API_NO >= 20010901
- STANDARD_MODULE_HEADER,
-#endif
- "fam",
- fam_functions,
- PHP_MINIT(fam),
- PHP_MSHUTDOWN(fam),
- PHP_RINIT(fam), /* Replace with NULL if there's nothing to do at request start */
- PHP_RSHUTDOWN(fam), /* Replace with NULL if there's nothing to do at request end */
- PHP_MINFO(fam),
-#if ZEND_MODULE_API_NO >= 20010901
- "0.1", /* Replace with version number for your extension */
-#endif
- STANDARD_MODULE_PROPERTIES
-};
-/* }}} */
-
-#ifdef COMPILE_DL_FAM
-ZEND_GET_MODULE(fam)
-#endif
-
-/* {{{ php_fam_init_globals
- */
-/* Uncomment this function if you have INI entries
-static void php_fam_init_globals(zend_fam_globals *fam_globals)
-{
- fam_globals->global_value = 0;
- fam_globals->global_string = NULL;
-}
-*/
-/* }}} */
-
-static void rsrc_close_fam(zend_rsrc_list_entry *rsrc TSRMLS_DC)
-{
- FAMConnection *fc = (FAMConnection *) rsrc->ptr;
- FAMClose(fc);
- efree(fc);
-}
-
-static void rsrc_close_fam_r(zend_rsrc_list_entry *rsrc TSRMLS_DC)
-{
- /* No need to close */
- efree(rsrc->ptr);
-}
-
-/* {{{ PHP_MINIT_FUNCTION
- */
-PHP_MINIT_FUNCTION(fam)
-{
- le_fam = zend_register_list_destructors_ex(rsrc_close_fam, NULL, "fam connections", module_number);
- le_fam_r = zend_register_list_destructors_ex(rsrc_close_fam_r, NULL, "fam requests", module_number);
- /* If you have INI entries, uncomment these lines
- ZEND_INIT_MODULE_GLOBALS(fam, php_fam_init_globals, NULL);
- REGISTER_INI_ENTRIES();
- */
-
-
- REGISTER_LONG_CONSTANT("FAMChanged", FAMChanged, CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("FAMDeleted", FAMDeleted, CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("FAMStartExecuting", FAMStartExecuting, CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("FAMStopExecuting", FAMStopExecuting, CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("FAMCreated", FAMCreated, CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("FAMMoved", FAMMoved, CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("FAMAcknowledge", FAMAcknowledge, CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("FAMExists", FAMExists, CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("FAMEndExist", FAMEndExist, CONST_PERSISTENT);
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ PHP_MSHUTDOWN_FUNCTION
- */
-PHP_MSHUTDOWN_FUNCTION(fam)
-{
- /* uncomment this line if you have INI entries
- UNREGISTER_INI_ENTRIES();
- */
- return SUCCESS;
-}
-/* }}} */
-
-/* Remove if there's nothing to do at request start */
-/* {{{ PHP_RINIT_FUNCTION
- */
-PHP_RINIT_FUNCTION(fam)
-{
- return SUCCESS;
-}
-/* }}} */
-
-/* Remove if there's nothing to do at request end */
-/* {{{ PHP_RSHUTDOWN_FUNCTION
- */
-PHP_RSHUTDOWN_FUNCTION(fam)
-{
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ PHP_MINFO_FUNCTION
- */
-PHP_MINFO_FUNCTION(fam)
-{
- php_info_print_table_start();
- php_info_print_table_header(2, "fam support", "enabled");
- php_info_print_table_end();
-
- /* Remove comments if you have entries in php.ini
- DISPLAY_INI_ENTRIES();
- */
-}
-/* }}} */
-
-
-/* {{{ proto resource fam_open([string appname])
- Open FAM connection */
-PHP_FUNCTION(fam_open)
-{
- char *appname = NULL;
- int argc = ZEND_NUM_ARGS();
- int appname_len;
- FAMConnection *fc;
- int r;
-
- if (zend_parse_parameters(argc TSRMLS_CC, "|s", &appname, &appname_len) == FAILURE)
- return;
-
- fc = emalloc(sizeof *fc);
- r = FAMOpen2(fc, appname);
-
- if (r < 0) {
- efree(fc);
- RETURN_FALSE;
- }
-
- ZEND_REGISTER_RESOURCE(return_value, fc, le_fam);
-}
-/* }}} */
-
-/* {{{ proto void fam_close(resource id)
- Close FAM connection */
-PHP_FUNCTION(fam_close)
-{
- int argc = ZEND_NUM_ARGS();
- zval *id;
-
- if (zend_parse_parameters(argc TSRMLS_CC, "r", &id) == FAILURE)
- return;
-
- zend_list_delete(Z_RESVAL_P(id));
-}
-/* }}} */
-
-/* {{{ proto resource fam_monitor_directory(resource id, string dirname)
- Monitor a directory for changes */
-PHP_FUNCTION(fam_monitor_directory)
-{
- char *dirname = NULL;
- int argc = ZEND_NUM_ARGS();
- int dirname_len;
- zval *id;
- FAMRequest *fr;
- FAMConnection *fc;
-
- if (zend_parse_parameters(argc TSRMLS_CC, "rs", &id, &dirname, &dirname_len) == FAILURE)
- return;
-
- ZEND_FETCH_RESOURCE(fc, FAMConnection *, &id, -1, "fam", le_fam);
- ZEND_VERIFY_RESOURCE(fc);
-
- fr = emalloc(sizeof *fr);
-
- if (FAMMonitorDirectory(fc, dirname, fr, NULL) < 0) {
- efree(fr);
- RETURN_FALSE;
- }
-
- ZEND_REGISTER_RESOURCE(return_value, fr, le_fam_r);
-}
-/* }}} */
-
-/* {{{ proto resource fam_monitor_file(resource id, string filename)
- Monitor a regular file for changes */
-PHP_FUNCTION(fam_monitor_file)
-{
- char *filename = NULL;
- int argc = ZEND_NUM_ARGS();
- int filename_len;
- zval *id;
- FAMRequest *fr;
- FAMConnection *fc;
-
- if (zend_parse_parameters(argc TSRMLS_CC, "rs", &id, &filename, &filename_len) == FAILURE)
- return;
-
- ZEND_FETCH_RESOURCE(fc, FAMConnection *, &id, -1, "fam", le_fam);
- ZEND_VERIFY_RESOURCE(fc);
-
- fr = emalloc(sizeof *fr);
-
- if (FAMMonitorFile(fc, filename, fr, NULL) < 0) {
- efree(fr);
- RETURN_FALSE;
- }
-
- ZEND_REGISTER_RESOURCE(return_value, fr, le_fam_r);
-}
-/* }}} */
-
-/* {{{ proto resource fam_monitor_collection(resource id, string dirname, int depth, string mask)
- Monitor a collection of files in a directory for changes */
-PHP_FUNCTION(fam_monitor_collection)
-{
- char *dirname = NULL;
- char *mask = NULL;
- int argc = ZEND_NUM_ARGS();
- int dirname_len;
- int mask_len;
- zval *id;
- long depth;
- FAMRequest *fr;
- FAMConnection *fc;
-
- if (zend_parse_parameters(argc TSRMLS_CC, "rsls", &id, &dirname, &dirname_len, &depth, &mask, &mask_len) == FAILURE)
- return;
-
- ZEND_FETCH_RESOURCE(fc, FAMConnection *, &id, -1, "fam", le_fam);
- ZEND_VERIFY_RESOURCE(fc);
-
- fr = emalloc(sizeof *fr);
-
- if (FAMMonitorCollection(fc, dirname, fr, NULL, depth, mask) < 0) {
- efree(fr);
- RETURN_FALSE;
- }
-
- ZEND_REGISTER_RESOURCE(return_value, fr, le_fam_r);
-
-}
-/* }}} */
-
-/* {{{ proto bool fam_suspend_monitor(resource id, resource monitor_id)
- Temporary suspend monitoring */
-PHP_FUNCTION(fam_suspend_monitor)
-{
- int argc = ZEND_NUM_ARGS();
- zval *id;
- zval *monitor_id;
- FAMRequest *fr;
- FAMConnection *fc;
-
- if (zend_parse_parameters(argc TSRMLS_CC, "rr", &id, &monitor_id) == FAILURE)
- return;
-
- ZEND_FETCH_RESOURCE(fc, FAMConnection *, &id, -1, "fam", le_fam);
- ZEND_VERIFY_RESOURCE(fc);
- ZEND_FETCH_RESOURCE(fr, FAMRequest *, &monitor_id, -1, "fam", le_fam_r);
- ZEND_VERIFY_RESOURCE(fr);
-
- if (FAMSuspendMonitor(fc, fr) < 0)
- RETURN_FALSE;
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto bool fam_resume_monitor(resource id, resource monitor_id)
- Resume suspended monitoring */
-PHP_FUNCTION(fam_resume_monitor)
-{
- int argc = ZEND_NUM_ARGS();
- zval *id;
- zval *monitor_id;
- FAMRequest *fr;
- FAMConnection *fc;
-
- if (zend_parse_parameters(argc TSRMLS_CC, "rr", &id, &monitor_id) == FAILURE)
- return;
-
- ZEND_FETCH_RESOURCE(fc, FAMConnection *, &id, -1, "fam", le_fam);
- ZEND_VERIFY_RESOURCE(fc);
- ZEND_FETCH_RESOURCE(fr, FAMRequest *, &monitor_id, -1, "fam", le_fam_r);
- ZEND_VERIFY_RESOURCE(fr);
-
- if (FAMResumeMonitor(fc, fr) < 0)
- RETURN_FALSE;
- RETURN_TRUE;
-
-}
-/* }}} */
-
-/* {{{ proto bool fam_cancel_monitor(resource id, resource monitor_id)
- Terminate monitoring */
-PHP_FUNCTION(fam_cancel_monitor)
-{
- int argc = ZEND_NUM_ARGS();
- zval *id;
- zval *monitor_id;
- FAMRequest *fr;
- FAMConnection *fc;
- int r;
-
- if (zend_parse_parameters(argc TSRMLS_CC, "rr", &id, &monitor_id) == FAILURE)
- return;
-
- ZEND_FETCH_RESOURCE(fc, FAMConnection *, &id, -1, "fam", le_fam);
- ZEND_VERIFY_RESOURCE(fc);
- ZEND_FETCH_RESOURCE(fr, FAMRequest *, &monitor_id, -1, "fam", le_fam_r);
- ZEND_VERIFY_RESOURCE(fr);
-
- r = FAMCancelMonitor(fc, fr);
-
- zend_list_delete(Z_RESVAL_P(monitor_id));
-
- if (r < 0)
- RETURN_FALSE;
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto int fam_pending(resource id)
- Check for pending FAM events */
-PHP_FUNCTION(fam_pending)
-{
- int argc = ZEND_NUM_ARGS();
- zval *id;
- FAMConnection *fc;
-
- if (zend_parse_parameters(argc TSRMLS_CC, "r", &id) == FAILURE)
- return;
-
- ZEND_FETCH_RESOURCE(fc, FAMConnection *, &id, -1, "fam", le_fam);
- ZEND_VERIFY_RESOURCE(fc);
-
- RETVAL_LONG(FAMPending(fc));
-}
-/* }}} */
-
-/* {{{ proto array fam_next_event(resource id)
- Get next pending FAM event */
-PHP_FUNCTION(fam_next_event)
-{
- int argc = ZEND_NUM_ARGS();
- zval *id;
- FAMConnection *fc;
- FAMEvent fe;
-
- if (zend_parse_parameters(argc TSRMLS_CC, "r", &id) == FAILURE)
- return;
-
- ZEND_FETCH_RESOURCE(fc, FAMConnection *, &id, -1, "fam", le_fam);
- ZEND_VERIFY_RESOURCE(fc);
-
- if (FAMNextEvent(fc, &fe) < 0)
- RETURN_FALSE;
-
- array_init(return_value);
- if (fe.hostname)
- add_assoc_string(return_value, "hostname", fe.hostname, 1);
- add_assoc_string(return_value, "filename", fe.filename, 1);
- add_assoc_long(return_value, "code", fe.code);
-}
-/* }}} */
-
-
-/*
- * 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/fam/package.xml b/ext/fam/package.xml
deleted file mode 100644
index 41f46b8a65..0000000000
--- a/ext/fam/package.xml
+++ /dev/null
@@ -1,48 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1" ?>
-<!DOCTYPE package SYSTEM "../pear/package.dtd">
-<package>
- <name>fam</name>
- <summary>File Alteration Monitor Functions</summary>
- <maintainers>
- <maintainer>
- <user>sas</user>
- <name>Sascha Schumann</name>
- <email>sascha@schumann.cx</email>
- <role>lead</role>
- </maintainer>
- </maintainers>
- <description>
-FAM monitors files and directories, notifying interested
-applications of changes.
-A PHP script may specify a list of files for FAM to monitor
-using the functions provided by this extension.
-The FAM process is started when the first connection from
-any application to it is opened. It exits after all
-connections to it have been closed.
- </description>
- <license>PHP</license>
- <release>
- <state>beta</state>
- <version>5.0.0rc1</version>
- <date>2004-03-19</date>
- <notes>
-package.xml added to support intallation using pear installer
- </notes>
- <filelist>
- <file role="doc" name="CREDITS"/>
- <file role="src" name="config.m4"/>
- <file role="src" name="fam.c"/>
- <file role="src" name="php_fam.h"/>
- </filelist>
- <configureoptions>
- <configureoption name="with-fam" default="autodetect" prompt="path to fam installation?"/>
- </configureoptions>
- <deps>
- <dep type="php" rel="ge" version="5" />
- <!-- doesn't work yet <dep type="os" rel="has" name="unix"/> -->
- </deps>
- </release>
-</package>
-<!--
-vim:et:ts=1:sw=1
--->
diff --git a/ext/fam/php_fam.h b/ext/fam/php_fam.h
deleted file mode 100644
index d234ea92a7..0000000000
--- a/ext/fam/php_fam.h
+++ /dev/null
@@ -1,89 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: |
- +----------------------------------------------------------------------+
-
- $Id$
-*/
-
-#ifndef PHP_FAM_H
-#define PHP_FAM_H
-
-extern zend_module_entry fam_module_entry;
-#define phpext_fam_ptr &fam_module_entry
-
-#ifdef PHP_WIN32
-#define PHP_FAM_API __declspec(dllexport)
-#else
-#define PHP_FAM_API
-#endif
-
-#ifdef ZTS
-#include "TSRM.h"
-#endif
-
-PHP_MINIT_FUNCTION(fam);
-PHP_MSHUTDOWN_FUNCTION(fam);
-PHP_RINIT_FUNCTION(fam);
-PHP_RSHUTDOWN_FUNCTION(fam);
-PHP_MINFO_FUNCTION(fam);
-
-PHP_FUNCTION(fam_open);
-PHP_FUNCTION(fam_close);
-PHP_FUNCTION(fam_monitor_directory);
-PHP_FUNCTION(fam_monitor_file);
-PHP_FUNCTION(fam_monitor_collection);
-PHP_FUNCTION(fam_suspend_monitor);
-PHP_FUNCTION(fam_resume_monitor);
-PHP_FUNCTION(fam_cancel_monitor);
-PHP_FUNCTION(fam_pending);
-PHP_FUNCTION(fam_next_event);
-
-/*
- Declare any global variables you may need between the BEGIN
- and END macros here:
-
-ZEND_BEGIN_MODULE_GLOBALS(fam)
- int global_value;
- char *global_string;
-ZEND_END_MODULE_GLOBALS(fam)
-*/
-
-/* In every utility function you add that needs to use variables
- in php_fam_globals, call TSRM_FETCH(); after declaring other
- variables used by that function, or better yet, pass in TSRMLS_CC
- after the last function argument and declare your utility function
- with TSRMLS_DC after the last declared argument. Always refer to
- the globals in your function as FAM_G(variable). You are
- encouraged to rename these macros something shorter, see
- examples in any other php module directory.
-*/
-
-#ifdef ZTS
-#define FAM_G(v) TSRMG(fam_globals_id, zend_fam_globals *, v)
-#else
-#define FAM_G(v) (fam_globals.v)
-#endif
-
-#endif /* PHP_FAM_H */
-
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * indent-tabs-mode: t
- * End:
- */
diff --git a/ext/fbsql/CREDITS b/ext/fbsql/CREDITS
deleted file mode 100644
index 3500fdc89e..0000000000
--- a/ext/fbsql/CREDITS
+++ /dev/null
@@ -1,2 +0,0 @@
-FBSQL
-Frank M. Kromann
diff --git a/ext/fbsql/Readme_w32.txt b/ext/fbsql/Readme_w32.txt
deleted file mode 100644
index af8bfdc1e9..0000000000
--- a/ext/fbsql/Readme_w32.txt
+++ /dev/null
@@ -1,22 +0,0 @@
-Rules for building FBSQL
-------------------------
-
-The fbsql project contains 2 configurations.
-
-To build this extension you must first download and
-install FrontBase. The default instalation path would
-be c:\usr\FrontBase. If you install it in another location
-you need to change the include path in the project before
-compiling.
-
-Start Visual Studio, load php_modules.dsw, select the fbsql projects,
-configuration and build it.
-
-Finaly copy php_fbsql.dll to your extension directory and enable it
-by adding the following line tp php.ini
-
-extension=php_fbsql.dll
-
-or by calling dl() in each script
-
-dl("php_fbsql.dll"); \ No newline at end of file
diff --git a/ext/fbsql/config.m4 b/ext/fbsql/config.m4
deleted file mode 100644
index 60707d3269..0000000000
--- a/ext/fbsql/config.m4
+++ /dev/null
@@ -1,43 +0,0 @@
-dnl
-dnl $Id$
-dnl
-
-PHP_ARG_WITH(fbsql, for FrontBase SQL92 (fbsql) support,
-[ --with-fbsql[=DIR] Include FrontBase support. DIR is the FrontBase base directory.])
-
-if test "$PHP_FBSQL" != "no"; then
-
- AC_DEFINE(HAVE_FBSQL, 1, [Whether you have FrontBase])
- PHP_NEW_EXTENSION(fbsql, php_fbsql.c, $ext_shared)
-
- FBSQL_INSTALLATION_DIR=""
- if test "$PHP_FBSQL" = "yes"; then
-
- for i in /Local/Library /usr/local /usr /opt /Library /usr/lib; do
- if test -f $i/FrontBase/include/FBCAccess/FBCAccess.h; then
- FBSQL_INSTALLATION_DIR=$i/FrontBase
- break
- fi
- done
-
- if test -z "$FBSQL_INSTALLATION_DIR"; then
- AC_MSG_ERROR(Cannot find FrontBase in known installation directories)
- fi
-
- elif test "$PHP_FBSQL" != "no"; then
-
- if test -f $PHP_FBSQL/include/FBCAccess/FBCAccess.h; then
- FBSQL_INSTALLATION_DIR=$PHP_FBSQL
- else
- AC_MSG_ERROR(Directory $PHP_FBSQL is not a FrontBase installation directory)
- fi
- fi
-
- if test ! -r "$FBSQL_INSTALLATION_DIR/lib/libFBCAccess.a"; then
- AC_MSG_ERROR(Could not find $FBSQL_INSTALLATION_DIR/lib/libFBCAccess.a)
- fi
-
- PHP_ADD_LIBRARY_WITH_PATH(FBCAccess, $FBSQL_INSTALLATION_DIR/lib, FBSQL_SHARED_LIBADD)
- PHP_ADD_INCLUDE($FBSQL_INSTALLATION_DIR/include)
- PHP_SUBST(FBSQL_SHARED_LIBADD)
-fi
diff --git a/ext/fbsql/config.w32 b/ext/fbsql/config.w32
deleted file mode 100644
index 0c6909ab52..0000000000
--- a/ext/fbsql/config.w32
+++ /dev/null
@@ -1,19 +0,0 @@
-// $Id$
-// vim:ft=javascript
-
-ARG_WITH("fbsql", "FrontBase support", "no");
-
-if (PHP_FBSQL == "yes") {
- if (CHECK_LIB("FBCAccess.lib", "fbsql",
- "\\usr\\FrontBase\\lib;" + PHP_PHP_BUILD + "\\FrontBase\\lib;"
- + PHP_FBSQL + "\\lib;" + PHP_FBSQL) &&
- CHECK_HEADER_ADD_INCLUDE("FBCAccess\\FBCAccess.h", "CFLAGS_FBSQL",
- "\\usr\\FrontBase\\include;" + PHP_PHP_BUILD + "\\FrontBase\\include;"
- + PHP_FBSQL + "\\include;" + PHP_FBSQL)) {
- EXTENSION("fbsql", "php_fbsql.c");
- ADD_FLAG('CFLAGS_FBSQL', '/DWinNT=1');
- AC_DEFINE('HAVE_FBSQL', 1, 'Have FrontBase support');
- } else {
- WARNING("fbsql not enabled; libraries and headers not found");
- }
-}
diff --git a/ext/fbsql/fbsql.dsp b/ext/fbsql/fbsql.dsp
deleted file mode 100644
index a711863616..0000000000
--- a/ext/fbsql/fbsql.dsp
+++ /dev/null
@@ -1,171 +0,0 @@
-# Microsoft Developer Studio Project File - Name="fbsql" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=fbsql - Win32 Debug_TS
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "fbsql.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "fbsql.mak" CFG="fbsql - Win32 Debug_TS"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "fbsql - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "fbsql - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "fbsql - Win32 Debug_TS" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "fbsql - Win32 Release_TS" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "fbsql - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release"
-# PROP Intermediate_Dir "Release"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "FBSQL_EXPORTS" /YX /FD /c
-# ADD CPP /nologo /MT /W3 /GX /O2 /I "..\.." /I "..\..\main" /I "..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\TSRM" /I "\usr\FrontBase\Include" /D "NDEBUG" /D "FBSQL_EXPORTS" /D "COMPILE_DL_FBSQL_FBSQL" /D HAVE_FBSQL=1 /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "ZEND_WIN32" /D "PHP_WIN32" /D "WinNT" /D ZEND_DEBUG=0 /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x40d /d "NDEBUG"
-# ADD RSC /l 0x40d /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386
-# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib php5nts.lib /nologo /dll /machine:I386 /out:"Release/php_fbsql.dll" /libpath:"..\..\Release"
-
-!ELSEIF "$(CFG)" == "fbsql - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug"
-# PROP Intermediate_Dir "Debug"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "FBSQL_EXPORTS" /YX /FD /GZ /c
-# ADD CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /I "..\.." /I "..\..\main" /I "..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\TSRM" /I "\usr\FrontBase\Include" /D "_DEBUG" /D ZEND_DEBUG=1 /D "FBSQL_EXPORTS" /D "COMPILE_DL_FBSQL_FBSQL" /D HAVE_FBSQL=1 /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "ZEND_WIN32" /D "PHP_WIN32" /D "WinNT" /FR /YX /FD /GZ /c
-# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x40d /d "_DEBUG"
-# ADD RSC /l 0x40d /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib php5nts_debug.lib /nologo /dll /debug /machine:I386 /out:"Debug/php_fbsql.dll" /pdbtype:sept /libpath:"..\..\Debug"
-
-!ELSEIF "$(CFG)" == "fbsql - Win32 Debug_TS"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug_TS"
-# PROP BASE Intermediate_Dir "Debug_TS"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug_TS"
-# PROP Intermediate_Dir "Debug_TS"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /I "..\.." /I "..\..\..\Zend" /I "..\..\..\bindlib_w32" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "FBSQL_EXPORTS" /D "COMPILE_DL_FBSQL" /D HAVE_FBSQL=1 /FR /YX /FD /GZ /c
-# ADD CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /I "..\.." /I "..\..\main" /I "..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\TSRM" /I "\usr\FrontBase\Include" /D "_DEBUG" /D ZEND_DEBUG=1 /D "ZTS" /D "FBSQL_EXPORTS" /D "COMPILE_DL_FBSQL" /D HAVE_FBSQL=1 /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "ZEND_WIN32" /D "PHP_WIN32" /D "WinNT" /FR /YX /FD /GZ /c
-# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x40d /d "_DEBUG"
-# ADD RSC /l 0x40d /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ws2_32.lib php5ts_debug.lib FBCAccess.lib /nologo /dll /debug /machine:I386 /nodefaultlib:"LIBC" /out:"..\..\Debug_TS/php_fbsql.dll" /pdbtype:sept /libpath:"..\..\Debug_TS" /libpath:"\usr\FrontBase\lib"
-
-!ELSEIF "$(CFG)" == "fbsql - Win32 Release_TS"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release_TS"
-# PROP BASE Intermediate_Dir "Release_TS"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release_TS"
-# PROP Intermediate_Dir "Release_TS"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MT /W3 /GX /O2 /I "..\.." /I "..\..\..\Zend" /I "..\..\..\bindlib_w32" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "FBSQL_EXPORTS" /D "COMPILE_DL_FBSQL" /D HAVE_FBSQL=1 /YX /FD /c
-# ADD CPP /nologo /MD /W3 /GX /O2 /I "..\.." /I "..\..\main" /I "..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\TSRM" /I "\usr\FrontBase\Include" /D "NDEBUG" /D ZTS=1 /D ZEND_DEBUG=0 /D "FBSQL_EXPORTS" /D "COMPILE_DL_FBSQL" /D HAVE_FBSQL=1 /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "ZEND_WIN32" /D "PHP_WIN32" /D "WinNT" /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x40d /d "NDEBUG"
-# ADD RSC /l 0x40d /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386
-# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib php5ts.lib FBCAccess.lib ws2_32.lib /nologo /dll /machine:I386 /nodefaultlib:"LIBC" /out:"..\..\Release_TS/php_fbsql.dll" /libpath:"..\..\Release_TS" /libpath:"\usr\FrontBase\lib" /libpath:"..\..\Release_TS_inline"
-
-!ENDIF
-
-# Begin Target
-
-# Name "fbsql - Win32 Release"
-# Name "fbsql - Win32 Debug"
-# Name "fbsql - Win32 Debug_TS"
-# Name "fbsql - Win32 Release_TS"
-# Begin Group "Source Files"
-
-# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
-# Begin Source File
-
-SOURCE=.\php_fbsql.c
-# End Source File
-# End Group
-# Begin Group "Header Files"
-
-# PROP Default_Filter "h;hpp;hxx;hm;inl"
-# Begin Source File
-
-SOURCE=.\php_fbsql.h
-# End Source File
-# End Group
-# Begin Group "Resource Files"
-
-# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
-# End Group
-# Begin Source File
-
-SOURCE=.\Readme_w32.txt
-# End Source File
-# End Target
-# End Project
diff --git a/ext/fbsql/php_fbsql.c b/ext/fbsql/php_fbsql.c
deleted file mode 100644
index 59a69beaf7..0000000000
--- a/ext/fbsql/php_fbsql.c
+++ /dev/null
@@ -1,3653 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Frank M. Kromann <frank@kromann.info> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-/* TODO:
- *
- * ? Safe mode implementation
- */
-
-/* SB's list:
- - API for a more natural FB connect semantic
- - Connect & set session
- - Autoreconnect when disconnected
- - Comments and cleanup
-
- BUGS
- - Select db with no arguments
- - Query with everything defaulted
-*/
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "php.h"
-#include "php_globals.h"
-#include "ext/standard/info.h"
-#include "ext/standard/php_string.h"
-
-#ifdef PHP_WIN32
-#include <winsock2.h>
-#else
-#include <php_config.h>
-
-#if HAVE_SYS_TYPES_H
-#include <sys/types.h>
-#endif
-#include <netdb.h>
-#include <netinet/in.h>
-#endif
-
-#include "php_ini.h"
-
-#define HAVE_FBSQL 1
-
-#if HAVE_FBSQL
-#include "php_fbsql.h"
-#include <signal.h>
-
-static int le_result, le_link, le_plink;
-
-struct PHPFBResult;
-typedef struct PHPFBResult PHPFBResult;
-
-struct PHPFBLink;
-typedef struct PHPFBLink PHPFBLink;
-
-/* The PHPFBLink structure represents a fbsql link. The lion is used for
- a connection to a machine, it may be persistent and is reference counted.
- The reason for refcounting is mostly to avoid to think, it work independent of
- any wierd and unforseen allocation deallocation order.
-
- The PHPFBDatabse structure implements to actual connection to a FrontBase server
- ot may be persistent is the link it is connected to is persistent, and refcounted
- for the same reasons as above.
-
- The PHPFBResult structure implements a result from the FrontBase server, and does all
- required buffereing from of results.
-
- In the PHP code the 3 above a data structures are referenced by means of integers in the
- range from 1 to som configurable maximum. You can put a limit to the number of links, databases
- and results. The integer identifications is implemented by insertion in the list, which is passed
- as an argument to all the functions, please note the list is polymorph.
-
- Database objects and link objects are all reused, base on the host name user name, host name database name
- user name. So connecting twice to the same database as the same user will return the same database id.
- We use the same coding for that as fbsql does, explioiting the underlying implementation of the lists.
-
- Persistent objects are put in the persistent list as well, but only by name, if you connect to a persistent object
- and it is not in the list it is simply added and get a new index, and refcounted. Tricky, tricky ...
-*/
-
-/* Some functions which should be exported from FBCAccess */
-
-void* fbaObjectAtIndex();
-void fbaRelease();
-unsigned int fbaCount();
-
-struct FBCAutoStartInfo {
- FBArray* infoLines;
-};
-
-struct PHPFBResult
-{
- PHPFBLink* link; /* The link for the result, may be NULL if no link */
- char* fetchHandle; /* The fetch handle, the id used by the server. */
- FBCMetaData* metaData; /* The metadata describing the result */
- FBCMetaData* ResultmetaData; /* The metadata describing the result */
- FBCRowHandler* rowHandler; /* The row handler, the Frontbase structure used for accessing rows in the result */
- unsigned int batchSize; /* The number of row to fetch when expanding the number of rows in the row handler */
- unsigned int rowCount; /* The number of rows in the results set. The number of row is not in */
- /* general known when the select is done, one typically needs to fetch all the row
- to figure out how many row you got. When the rowCount is unknown the value is
- 0x7ffffffff */
- int columnCount; /* Number of columns in the row set. */
- unsigned int rowIndex; /* The current row index. */
- int columnIndex; /* The current column index */
- void** row; /* The last row accessed */
- FBArray* array; /* The link may return a result set, the database list, we implement that by the */
- /* FBArray, just a list of strings. */
- FBCPList* list; /* The same special kind result just for property list from extract, schema info. */
- unsigned int selectResults; /* number of results in select */
- unsigned int currentResult; /* current result number */
- int lobMode; /* 0=Fetch data (default); 1=Fetch handle */
-};
-
-struct PHPFBLink
-{
- int persistent; /* persistent ? */
- char* hostName; /* Host name */
- char* userName; /* User name */
- char* userPassword; /* User password */
- char* databasePassword; /* Database password */
- char* databaseName; /* The name of the database */
- FBCExecHandler* execHandler; /* The exechandler, can be used for database operations */
- FBCDatabaseConnection* connection; /* The connection to the database */
- unsigned int affectedRows; /* Number of rows affected by the last SQL statement */
- long autoCommit; /* Enable or disable autoCommit */
- unsigned int errorNo; /* The latest error on the connection, 0 is ok. */
- char* errorText; /* The error text */
- unsigned int insert_id; /* The row index of the latest row inserted into the database */
-};
-
-#define FBSQL_ASSOC 1<<0
-#define FBSQL_NUM 1<<1
-#define FBSQL_BOTH (FBSQL_ASSOC|FBSQL_NUM)
-
-#define FBSQL_LOCK_DEFERRED 0
-#define FBSQL_LOCK_OPTIMISTIC 1
-#define FBSQL_LOCK_PESSIMISTIC 2 /* default */
-
-#define FBSQL_ISO_READ_UNCOMMITTED 0
-#define FBSQL_ISO_READ_COMMITTED 1
-#define FBSQL_ISO_REPEATABLE_READ 2
-#define FBSQL_ISO_SERIALIZABLE 3 /* default */
-#define FBSQL_ISO_VERSIONED 4
-
-#define FBSQL_LOB_DIRECT 0 /* default */
-#define FBSQL_LOB_HANDLE 1 /* default */
-
-#define DIGEST_BUFFER_SIZE 17 /* fbcDigestPassword() expects a preallocated buffer for 16 bytes plus termination */
-
-int mdOk(PHPFBLink* link, FBCMetaData* md, char* sql);
-char *DigestPassword(char *user, char *password)
-{
- char *digest = NULL;
-
- if (user && strlen(user) && password && strlen(password)) {
- char *user_upper = estrdup(user);
- digest = emalloc(DIGEST_BUFFER_SIZE);
- digest[0] = '\0';
- (void)fbcDigestPassword(php_strtoupper(user_upper, strlen(user_upper)), password, digest);
- efree(user_upper);
- }
-
- return digest;
-}
-
-/* {{{ fbsql_functions[]
- */
-function_entry fbsql_functions[] = {
- PHP_FE(fbsql_connect, NULL)
- PHP_FE(fbsql_pconnect, NULL)
- PHP_FE(fbsql_close, NULL)
- PHP_FE(fbsql_select_db, NULL)
- PHP_FE(fbsql_create_db, NULL)
- PHP_FE(fbsql_drop_db, NULL)
- PHP_FE(fbsql_start_db, NULL)
- PHP_FE(fbsql_stop_db, NULL)
- PHP_FE(fbsql_db_status, NULL)
- PHP_FE(fbsql_query, NULL)
- PHP_FE(fbsql_db_query, NULL)
- PHP_FE(fbsql_list_dbs, NULL)
- PHP_FE(fbsql_list_tables, NULL)
- PHP_FE(fbsql_list_fields, NULL)
- PHP_FE(fbsql_error, NULL)
- PHP_FE(fbsql_errno, NULL)
- PHP_FE(fbsql_affected_rows, NULL)
- PHP_FE(fbsql_rows_fetched, NULL)
- PHP_FE(fbsql_insert_id, NULL)
- PHP_FE(fbsql_result, NULL)
- PHP_FE(fbsql_next_result, NULL)
- PHP_FE(fbsql_num_rows, NULL)
- PHP_FE(fbsql_num_fields, NULL)
- PHP_FE(fbsql_fetch_row, NULL)
- PHP_FE(fbsql_fetch_array, NULL)
- PHP_FE(fbsql_fetch_assoc, NULL)
- PHP_FE(fbsql_fetch_object, NULL)
- PHP_FE(fbsql_data_seek, NULL)
- PHP_FE(fbsql_fetch_lengths, NULL)
- PHP_FE(fbsql_fetch_field, NULL)
- PHP_FE(fbsql_field_seek, NULL)
- PHP_FE(fbsql_free_result, NULL)
- PHP_FE(fbsql_field_name, NULL)
- PHP_FE(fbsql_field_table, NULL)
- PHP_FE(fbsql_field_len, NULL)
- PHP_FE(fbsql_field_type, NULL)
- PHP_FE(fbsql_field_flags, NULL)
- PHP_FE(fbsql_table_name, NULL)
-
-/* Fontbase additions: */
- PHP_FE(fbsql_set_transaction, NULL)
- PHP_FE(fbsql_autocommit, NULL)
- PHP_FE(fbsql_commit, NULL)
- PHP_FE(fbsql_rollback, NULL)
-
- PHP_FE(fbsql_create_blob, NULL)
- PHP_FE(fbsql_create_clob, NULL)
- PHP_FE(fbsql_set_lob_mode, NULL)
- PHP_FE(fbsql_read_blob, NULL)
- PHP_FE(fbsql_read_clob, NULL)
- PHP_FE(fbsql_blob_size, NULL)
- PHP_FE(fbsql_clob_size, NULL)
-
- PHP_FE(fbsql_hostname, NULL)
- PHP_FE(fbsql_database, NULL)
- PHP_FE(fbsql_database_password, NULL)
- PHP_FE(fbsql_username, NULL)
- PHP_FE(fbsql_password, NULL)
- PHP_FE(fbsql_warnings, NULL)
- PHP_FE(fbsql_set_password, NULL)
-
- PHP_FE(fbsql_get_autostart_info, NULL)
-/* PHP_FE(fbsql_set_autostart_info, NULL) */
-
-/* Aliases: */
- PHP_FALIAS(fbsql, fbsql_db_query, NULL)
- PHP_FALIAS(fbsql_tablename, fbsql_table_name, NULL)
-
- {NULL, NULL, NULL}
-};
-/* }}} */
-
-zend_module_entry fbsql_module_entry = {
- STANDARD_MODULE_HEADER,
- "fbsql",
- fbsql_functions,
- PHP_MINIT(fbsql),
- PHP_MSHUTDOWN(fbsql),
- PHP_RINIT(fbsql),
- PHP_RSHUTDOWN(fbsql),
- PHP_MINFO(fbsql),
- NO_VERSION_YET,
- STANDARD_MODULE_PROPERTIES
-};
-
-ZEND_DECLARE_MODULE_GLOBALS(fbsql)
-
-#ifdef COMPILE_DL_FBSQL
-ZEND_GET_MODULE(fbsql)
-#endif
-
-#define CHECK_LINK(link) { \
- if (link==-1) { \
- if (FB_SQL_G(generateWarnings)) \
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "A link to the server could not be established"); \
- RETURN_FALSE; \
- } \
-}
-
-static void phpfbReleaseResult(zend_rsrc_list_entry *rsrc TSRMLS_DC);
-static void phpfbReleaseLink(zend_rsrc_list_entry *rsrc TSRMLS_DC);
-static void phpfbReleasePLink(zend_rsrc_list_entry *rsrc TSRMLS_DC);
-
-static void phpfbReleaseResult(zend_rsrc_list_entry *rsrc TSRMLS_DC)
-{
- PHPFBResult* result = (PHPFBResult *)rsrc->ptr;
-
- if (result)
- {
- if (result->fetchHandle) {
- FBCMetaData *md = fbcdcCancelFetch(result->link->connection, result->fetchHandle);
- fbcmdRelease(md);
- }
- if (result->rowHandler) fbcrhRelease(result->rowHandler);
- if (result->list) fbcplRelease(result->list);
- if (result->array) fbaRelease(result->array);
- if (result->ResultmetaData) fbcmdRelease(result->ResultmetaData);
- efree(result);
- }
-}
-
-
-static void phpfbReleaseLink(zend_rsrc_list_entry *rsrc TSRMLS_DC)
-{
- PHPFBLink* link = (PHPFBLink *)rsrc->ptr;
-
- if (link)
- {
- if (link->hostName) free(link->hostName);
- if (link->userName) free(link->userName);
- if (link->userPassword) free(link->userPassword);
- if (link->databasePassword) free(link->databasePassword);
- if (link->databaseName) free(link->databaseName);
- if (link->errorText) free(link->errorText);
- if (link->connection) {
- fbcdcClose(link->connection);
- fbcdcRelease(link->connection);
- }
- if (link->execHandler) fbcehRelease(link->execHandler);
- efree(link);
- FB_SQL_G(linkCount)--;
- }
-}
-
-static void phpfbReleasePLink(zend_rsrc_list_entry *rsrc TSRMLS_DC)
-{
- PHPFBLink* link = (PHPFBLink *)rsrc->ptr;
-
- if (link)
- {
- if (link->hostName) free(link->hostName);
- if (link->userName) free(link->userName);
- if (link->userPassword) free(link->userPassword);
- if (link->databasePassword) free(link->databasePassword);
- if (link->databaseName) free(link->databaseName);
- if (link->errorText) free(link->errorText);
- if (link->connection) {
- fbcdcClose(link->connection);
- fbcdcRelease(link->connection);
- }
- if (link->execHandler) fbcehRelease(link->execHandler);
- free(link);
- FB_SQL_G(linkCount)--;
- FB_SQL_G(persistentCount)--;
- }
-}
-
-static void php_fbsql_set_default_link(int id TSRMLS_DC)
-{
- if (FB_SQL_G(linkIndex)!=-1) {
- zend_list_delete(FB_SQL_G(linkIndex));
- }
- FB_SQL_G(linkIndex) = id;
- zend_list_addref(id);
-}
-
-static int php_fbsql_get_default_link(INTERNAL_FUNCTION_PARAMETERS)
-{
- if (FB_SQL_G(linkIndex)==-1) { /* no link opened yet, implicitly open one */
- ht = 0;
- php_fbsql_do_connect(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0);
- }
- return FB_SQL_G(linkIndex);
-}
-
-
-static void phpfbQuery(INTERNAL_FUNCTION_PARAMETERS, char* sql, PHPFBLink* link, long batch_size);
-
-/* {{{ PHP_INI
- */
-PHP_INI_BEGIN()
- STD_PHP_INI_BOOLEAN ("fbsql.allow_persistent", "1", PHP_INI_SYSTEM, OnUpdateBool, allowPersistent, zend_fbsql_globals, fbsql_globals)
- STD_PHP_INI_BOOLEAN ("fbsql.generate_warnings", "0", PHP_INI_SYSTEM, OnUpdateBool, generateWarnings, zend_fbsql_globals, fbsql_globals)
- STD_PHP_INI_BOOLEAN ("fbsql.autocommit", "1", PHP_INI_SYSTEM, OnUpdateBool, autoCommit, zend_fbsql_globals, fbsql_globals)
- STD_PHP_INI_ENTRY_EX ("fbsql.max_persistent", "-1", PHP_INI_SYSTEM, OnUpdateLong, maxPersistent, zend_fbsql_globals, fbsql_globals, display_link_numbers)
- STD_PHP_INI_ENTRY_EX ("fbsql.max_links", "128", PHP_INI_SYSTEM, OnUpdateLong, maxLinks, zend_fbsql_globals, fbsql_globals, display_link_numbers)
- STD_PHP_INI_ENTRY_EX ("fbsql.max_connections", "128", PHP_INI_SYSTEM, OnUpdateLong, maxConnections, zend_fbsql_globals, fbsql_globals, display_link_numbers)
- STD_PHP_INI_ENTRY_EX ("fbsql.max_results", "128", PHP_INI_SYSTEM, OnUpdateLong, maxResults, zend_fbsql_globals, fbsql_globals, display_link_numbers)
- STD_PHP_INI_ENTRY_EX ("fbsql.batchsize", "1000", PHP_INI_USER, OnUpdateLong, batchSize, zend_fbsql_globals, fbsql_globals, display_link_numbers)
- STD_PHP_INI_ENTRY ("fbsql.default_host", NULL, PHP_INI_SYSTEM, OnUpdateString, hostName, zend_fbsql_globals, fbsql_globals)
- STD_PHP_INI_ENTRY ("fbsql.default_user", "_SYSTEM", PHP_INI_SYSTEM, OnUpdateString, userName, zend_fbsql_globals, fbsql_globals)
- STD_PHP_INI_ENTRY ("fbsql.default_password", "", PHP_INI_SYSTEM, OnUpdateString, userPassword, zend_fbsql_globals, fbsql_globals)
- STD_PHP_INI_ENTRY ("fbsql.default_database", "", PHP_INI_SYSTEM, OnUpdateString, databaseName, zend_fbsql_globals, fbsql_globals)
- STD_PHP_INI_ENTRY ("fbsql.default_database_password", "", PHP_INI_SYSTEM, OnUpdateString, databasePassword, zend_fbsql_globals, fbsql_globals)
-PHP_INI_END()
-/* }}} */
-
-static void php_fbsql_init_globals(zend_fbsql_globals *fbsql_globals)
-{
- fbsql_globals->persistentCount = 0;
-
- if (fbsql_globals->hostName==NULL)
- {
- char name[256];
- gethostname(name, sizeof(name));
- name[sizeof(name)-1] = 0;
- fbsql_globals->hostName = strdup(name);
- }
-
- fbsql_globals->persistentCount = 0;
- fbsql_globals->linkCount = 0;
-}
-
-PHP_MINIT_FUNCTION(fbsql)
-{
- ZEND_INIT_MODULE_GLOBALS(fbsql, php_fbsql_init_globals, NULL);
-
- REGISTER_INI_ENTRIES();
-
- fbcInitialize();
- fbcehSetMultiThreaded(True);
- le_result = zend_register_list_destructors_ex(phpfbReleaseResult, NULL, "fbsql result", module_number);
- le_link = zend_register_list_destructors_ex(phpfbReleaseLink, NULL, "fbsql link", module_number);
- le_plink = zend_register_list_destructors_ex(NULL, phpfbReleasePLink, "fbsql plink", module_number);
- Z_TYPE(fbsql_module_entry) = type;
-
- REGISTER_LONG_CONSTANT("FBSQL_ASSOC", FBSQL_ASSOC, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("FBSQL_NUM", FBSQL_NUM, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("FBSQL_BOTH", FBSQL_BOTH, CONST_CS | CONST_PERSISTENT);
-
- /* Register Transaction constants */
- REGISTER_LONG_CONSTANT("FBSQL_LOCK_DEFERRED", FBSQL_LOCK_DEFERRED, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("FBSQL_LOCK_OPTIMISTIC", FBSQL_LOCK_OPTIMISTIC, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("FBSQL_LOCK_PESSIMISTIC", FBSQL_LOCK_PESSIMISTIC, CONST_CS | CONST_PERSISTENT);
-
- REGISTER_LONG_CONSTANT("FBSQL_ISO_READ_UNCOMMITTED", FBSQL_ISO_READ_UNCOMMITTED, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("FBSQL_ISO_READ_COMMITTED", FBSQL_ISO_READ_COMMITTED, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("FBSQL_ISO_REPEATABLE_READ", FBSQL_ISO_REPEATABLE_READ, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("FBSQL_ISO_SERIALIZABLE", FBSQL_ISO_SERIALIZABLE, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("FBSQL_ISO_VERSIONED", FBSQL_ISO_VERSIONED, CONST_CS | CONST_PERSISTENT);
-
- /* Register Status constants */
- REGISTER_LONG_CONSTANT("FBSQL_UNKNOWN", FBUnknownStatus, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("FBSQL_STOPPED", FBStopped, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("FBSQL_STARTING", FBStarting, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("FBSQL_RUNNING", FBRunning, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("FBSQL_STOPPING", FBStopping, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("FBSQL_NOEXEC", FBNoExec, CONST_CS | CONST_PERSISTENT);
-
- REGISTER_LONG_CONSTANT("FBSQL_LOB_DIRECT", FBSQL_LOB_DIRECT, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("FBSQL_LOB_HANDLE", FBSQL_LOB_HANDLE, CONST_CS | CONST_PERSISTENT);
-
- return SUCCESS;
-}
-
-PHP_MSHUTDOWN_FUNCTION(fbsql)
-{
- UNREGISTER_INI_ENTRIES();
- return SUCCESS;
-}
-
-PHP_RINIT_FUNCTION(fbsql)
-{
- FB_SQL_G(linkIndex) = -1;
- FB_SQL_G(linkCount) = FB_SQL_G(persistentCount);
- return SUCCESS;
-}
-
-PHP_RSHUTDOWN_FUNCTION(fbsql)
-{
- return SUCCESS;
-}
-
-PHP_MINFO_FUNCTION(fbsql)
-{
- char buf[32];
-
- php_info_print_table_start();
- php_info_print_table_header(2, "FrontBase support", "enabled");
-
- php_info_print_table_row(2, "Client API version", "2.24");
-
- if (FB_SQL_G(allowPersistent))
- {
- sprintf(buf, "%ld", FB_SQL_G(persistentCount));
- php_info_print_table_row(2, "Active Persistent Links", buf);
- }
-
- sprintf(buf, "%ld", FB_SQL_G(linkCount));
- php_info_print_table_row(2, "Active Links", buf);
-
-/*
- sprintf(buf, "%ld", FB_SQL_G(resultCount));
- php_info_print_table_row(2, "Active Results", buf);
-*/
-
- php_info_print_table_end();
-
- DISPLAY_INI_ENTRIES();
-}
-
-static void php_fbsql_do_connect(INTERNAL_FUNCTION_PARAMETERS, int persistent)
-{
- PHPFBLink* phpLink;
- list_entry *lep;
- char name[1024];
- char *hostName = NULL, *userName = NULL, *userPassword = NULL;
- int argc = ZEND_NUM_ARGS(), create_new = 0;
- zval **argv[3];
-
- if ((argc < 0) || (argc > 3)) WRONG_PARAM_COUNT;
- if (zend_get_parameters_ex(argc, &argv[0], &argv[1], &argv[2])==FAILURE) RETURN_FALSE;
- if (argc >= 1)
- {
- convert_to_string_ex(argv[0]);
- hostName = Z_STRVAL_PP(argv[0]);
- }
- if (argc >= 2)
- {
- convert_to_string_ex(argv[1]);
- userName = Z_STRVAL_PP(argv[1]);
- }
- if (argc == 3)
- {
- convert_to_string_ex(argv[2]);
- userPassword = Z_STRVAL_PP(argv[2]);
- }
-
- if (hostName == NULL) hostName = FB_SQL_G(hostName);
- if (userName == NULL) userName = FB_SQL_G(userName);
- if (userPassword == NULL) userPassword = FB_SQL_G(userPassword);
-
- sprintf(name, "fbsql_%s_%s_%s", hostName, userName, userPassword);
-
- if (!FB_SQL_G(allowPersistent)) {
- persistent=0;
- }
- if (persistent) {
- if (zend_hash_find(&EG(persistent_list), name, strlen(name) + 1, (void **)&lep) == SUCCESS)
- {
- phpLink = (PHPFBLink*)lep->ptr;
- }
- else {
- list_entry le;
-
- if ((FB_SQL_G(maxLinks) != -1 && FB_SQL_G(linkCount) == FB_SQL_G(maxLinks)))
- {
- if (FB_SQL_G(generateWarnings))
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "FrontBase link limit %d exceeded", FB_SQL_G(maxLinks));
- RETURN_FALSE;
- }
-
- if ((FB_SQL_G(maxPersistent) != -1 && FB_SQL_G(persistentCount) == FB_SQL_G(maxPersistent)))
- {
- if (FB_SQL_G(generateWarnings))
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "FrontBase persistent link limit %d exceeded", FB_SQL_G(maxPersistent));
- RETURN_FALSE;
- }
-
- phpLink = malloc(sizeof(PHPFBLink));
- phpLink->persistent = persistent;
- phpLink->hostName = strdup(hostName);
- phpLink->userName = strdup(userName);
- phpLink->userPassword = strdup(userPassword);
- phpLink->databasePassword = strdup(FB_SQL_G(databasePassword));
- phpLink->databaseName = NULL;
- phpLink->execHandler = NULL;
- phpLink->affectedRows = 0;
- phpLink->autoCommit = FB_SQL_G(autoCommit);
- phpLink->errorNo = 0;
- phpLink->errorText = NULL;
- phpLink->connection = NULL;
-
-
- le.ptr = phpLink;
- Z_TYPE(le) = le_plink;
- if (zend_hash_update(&EG(persistent_list), name, strlen(name) + 1, &le, sizeof(le), NULL)==FAILURE)
- {
- free(phpLink->hostName);
- free(phpLink->userName);
- free(phpLink->userPassword);
- free(phpLink->databasePassword);
- free(phpLink);
- RETURN_FALSE;
- }
- FB_SQL_G(linkCount)++;
- FB_SQL_G(persistentCount)++;
- }
- ZEND_REGISTER_RESOURCE(return_value, phpLink, le_plink);
- }
- else
- {
- list_entry le;
-
- if ((FB_SQL_G(maxLinks) != -1 && FB_SQL_G(linkCount) == FB_SQL_G(maxLinks)))
- {
- if (FB_SQL_G(generateWarnings))
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "FrontBase link limit %d exceeded", FB_SQL_G(maxLinks));
- RETURN_FALSE;
- }
-
- if (zend_hash_find(&EG(regular_list), name, strlen(name) + 1, (void **)&lep) == SUCCESS)
- {
- int type, link;
- void *ptr;
-
- link = (int) lep->ptr;
- ptr = zend_list_find(link, &type); /* check if the link is still there */
- if (ptr && (type==le_link || type==le_plink)) {
- zend_list_addref(link);
- Z_LVAL_P(return_value) = link;
- php_fbsql_set_default_link(link TSRMLS_CC);
- Z_TYPE_P(return_value) = IS_RESOURCE;
- return;
- } else {
- zend_hash_del(&EG(regular_list), name, strlen(name) + 1);
- }
- phpLink = (PHPFBLink*)lep->ptr;
- }
-
- phpLink = emalloc(sizeof(PHPFBLink));
- phpLink->persistent = persistent;
- phpLink->hostName = strdup(hostName);
- phpLink->userName = strdup(userName);
- phpLink->userPassword = strdup(userPassword);
- phpLink->databasePassword = strdup(FB_SQL_G(databasePassword));
- phpLink->databaseName = NULL;
- phpLink->execHandler = NULL;
- phpLink->affectedRows = 0;
- phpLink->autoCommit = FB_SQL_G(autoCommit);
- phpLink->errorNo = 0;
- phpLink->errorText = NULL;
- phpLink->connection = NULL;
-
- ZEND_REGISTER_RESOURCE(return_value, phpLink, le_link);
-
- le.ptr = (void *)Z_LVAL_P(return_value);
- Z_TYPE(le) = le_index_ptr;
- if (zend_hash_update(&EG(regular_list), name, strlen(name) + 1, &le, sizeof(le), NULL)==FAILURE)
- {
- free(phpLink->hostName);
- free(phpLink->userName);
- free(phpLink->userPassword);
- free(phpLink->databasePassword);
- efree(phpLink);
- RETURN_FALSE;
- }
- FB_SQL_G(linkCount)++;
- }
- php_fbsql_set_default_link(Z_LVAL_P(return_value) TSRMLS_CC);
-}
-
-int phpfbFetchRow(PHPFBResult* result, unsigned int row)
-{
- if (result->rowHandler == NULL)
- {
- void *rawData = fbcdcFetch(result->link->connection, result->batchSize, result->fetchHandle);
- if (rawData == NULL) {
- result->rowCount = 0;
- }
- else
- result->rowHandler = fbcrhInitWith(rawData, result->metaData);
- }
- for (;;)
- {
- void *rawData;
- if (row >= result->rowCount && result->rowCount != 0x7fffffff) return 0;
- if (fbcrhRowCount(result->rowHandler) > (unsigned int)row) return 1;
- rawData = fbcdcFetch(result->link->connection, result->batchSize, result->fetchHandle);
- if (!fbcrhAddBatch(result->rowHandler, rawData)) result->rowCount = fbcrhRowCount(result->rowHandler);
- }
-}
-
-
-/* {{{ proto resource fbsql_connect([string hostname [, string username [, string password]]])
- Create a connection to a database server */
-PHP_FUNCTION(fbsql_connect)
-{
- php_fbsql_do_connect(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0);
-}
-/* }}} */
-
-/* {{{ proto resource fbsql_pconnect([string hostname [, string username [, string password]]])
- Create a persistant connection to a database server */
-PHP_FUNCTION(fbsql_pconnect)
-{
- php_fbsql_do_connect(INTERNAL_FUNCTION_PARAM_PASSTHRU, 1);
-}
-/* }}} */
-
-/* {{{ proto bool fbsql_close([resource link_identifier])
- Close a connection to a database server */
-PHP_FUNCTION(fbsql_close)
-{
- PHPFBLink* phpLink = NULL;
- zval **fbsql_link_index = NULL;
- int id, i, nument, type;
- void *ptr;
-
- switch (ZEND_NUM_ARGS()) {
- case 0:
- id = php_fbsql_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU);
- CHECK_LINK(id);
- break;
- case 1:
- if (zend_get_parameters_ex(1, &fbsql_link_index)==FAILURE) {
- RETURN_FALSE;
- }
- id = -1;
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
- ZEND_FETCH_RESOURCE2(phpLink, PHPFBLink *, fbsql_link_index, id, "FrontBase-Link", le_link, le_plink);
-
- nument = zend_hash_next_free_element(&EG(regular_list));
- for (i = 1; i < nument; i++) {
- ptr = zend_list_find(i, &type);
- if (ptr && (type == le_result)) {
- PHPFBResult *result;
-
- result = (PHPFBResult *)ptr;
- if (result->link == phpLink) {
- zend_list_delete(i);
- }
- }
- }
-
- if (id==-1) { /* explicit resource number */
- zend_list_delete(Z_RESVAL_PP(fbsql_link_index));
- }
-
- if (id!=-1
- || (fbsql_link_index && Z_RESVAL_PP(fbsql_link_index)==FB_SQL_G(linkIndex))) {
- zend_list_delete(FB_SQL_G(linkIndex));
- FB_SQL_G(linkIndex) = -1;
- }
-
- RETURN_TRUE;
-}
-/* }}} */
-
-static int php_fbsql_select_db(char *databaseName, PHPFBLink *link TSRMLS_DC)
-{
- unsigned port;
- FBCDatabaseConnection* c;
- FBCMetaData* md;
-
- if (!link->databaseName || strcmp(link->databaseName, databaseName))
- {
- port = atoi(databaseName);
- if (port>0 && port<65535)
- c = fbcdcConnectToDatabaseUsingPort(link->hostName, port, link->databasePassword);
- else
- c = fbcdcConnectToDatabase(databaseName, link->hostName, link->databasePassword);
- if (c == NULL)
- {
- if (FB_SQL_G(generateWarnings))
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", fbcdcClassErrorMessage());
- return 0;
- }
- md = fbcdcCreateSession(c, "PHP", link->userName, link->userPassword, link->userName);
- if (fbcmdErrorsFound(md))
- {
- FBCErrorMetaData* emd = fbcdcErrorMetaData(c, md);
- char* emg = fbcemdAllErrorMessages(emd);
- if (FB_SQL_G(generateWarnings))
- {
- if (emg)
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", emg);
- else
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "No message");
- }
- link->errorText = strdup(emg);
- link->errorNo = fbcemdErrorCodeAtIndex(emd, 0);
- free(emg);
- fbcemdRelease(emd);
- fbcmdRelease(md);
- fbcdcClose(c);
- fbcdcRelease(c);
- return 0;
- }
- fbcmdRelease(md);
-
- if (c)
- {
- if (link->autoCommit)
- md = fbcdcExecuteDirectSQL(c, "SET COMMIT TRUE;");
- else
- md = fbcdcExecuteDirectSQL(c, "SET COMMIT FALSE;");
- fbcmdRelease(md);
- }
- fbcdcSetOutputCharacterSet(c, FBC_ISO8859_1);
- fbcdcSetInputCharacterSet(c, FBC_ISO8859_1);
-
- if (link->connection)
- {
- fbcdcClose(link->connection);
- fbcdcRelease(link->connection);
- }
- link->connection = c;
- if (link->databaseName) free(link->databaseName);
- link->databaseName = strdup(databaseName);
- }
- return 1;
-}
-
-void phpfbestrdup(const char * s, int* length, char** value)
-{
- int l = s?strlen(s):0;
- if (value)
- {
- char* r = emalloc(l+1);
- if (s)
- strcpy(r, s);
- else
- r[0] = 0;
- *value = r;
- }
- *length = l;
-}
-
-/* {{{ proto void fbsql_set_transaction(resource link_identifier, int locking, int isolation)
- Sets the transaction locking and isolation */
-PHP_FUNCTION(fbsql_set_transaction)
-{
- PHPFBLink* phpLink = NULL;
- FBCMetaData* md;
- zval **fbsql_link_index = NULL, **Locking = NULL, **Isolation = NULL;
- char strSQL[1024];
- char *strLocking[] = {"DEFERRED", "OPTIMISTIC", "PESSIMISTIC"};
- char *strIsolation[] = {"READ UNCOMMITTED", "READ NCOMMITTED", "REPEATABLE READ", "SERIALIZABLE", "VERSIONED"};
-
- switch (ZEND_NUM_ARGS()) {
- case 3:
- if (zend_get_parameters_ex(3, &fbsql_link_index, &Locking, &Isolation)==FAILURE) {
- RETURN_FALSE;
- }
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
- ZEND_FETCH_RESOURCE2(phpLink, PHPFBLink *, fbsql_link_index, -1, "FrontBase-Link", le_link, le_plink);
-
- sprintf(strSQL, "SET TRANSACTION LOCKING %s, ISOLATION %s;", strLocking[Z_LVAL_PP(Locking)], strIsolation[Z_LVAL_PP(Isolation)]);
-
- md = fbcdcExecuteDirectSQL(phpLink->connection, strSQL);
- fbcmdRelease(md);
-}
-/* }}} */
-
-/* {{{ proto bool fbsql_autocommit(resource link_identifier [, bool OnOff])
- Turns on auto-commit */
-PHP_FUNCTION(fbsql_autocommit)
-{
- PHPFBLink* phpLink = NULL;
- FBCMetaData* md;
- zval **fbsql_link_index = NULL, **onoff = NULL;
- zend_bool OnOff;
-
- switch (ZEND_NUM_ARGS()) {
- case 1:
- if (zend_get_parameters_ex(1, &fbsql_link_index)==FAILURE) {
- RETURN_FALSE;
- }
- break;
- case 2:
- if (zend_get_parameters_ex(2, &fbsql_link_index, &onoff)==FAILURE) {
- RETURN_FALSE;
- }
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
- ZEND_FETCH_RESOURCE2(phpLink, PHPFBLink *, fbsql_link_index, -1, "FrontBase-Link", le_link, le_plink);
-
- if (onoff)
- {
- convert_to_boolean_ex(onoff);
- OnOff = Z_BVAL_PP(onoff);
- phpLink->autoCommit = OnOff;
- if (OnOff)
- md = fbcdcExecuteDirectSQL(phpLink->connection, "SET COMMIT TRUE;");
- else
- md = fbcdcExecuteDirectSQL(phpLink->connection, "SET COMMIT FALSE;");
- fbcmdRelease(md);
- }
- RETURN_BOOL(phpLink->autoCommit);
-}
-/* }}} */
-
-/* {{{ proto bool fbsql_commit([resource link_identifier])
- Commit the transaction */
-PHP_FUNCTION(fbsql_commit)
-{
- PHPFBLink* phpLink = NULL;
- FBCMetaData* md;
- zval **fbsql_link_index = NULL;
- int id;
-
- switch (ZEND_NUM_ARGS()) {
- case 0:
- id = php_fbsql_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU);
- CHECK_LINK(id);
- break;
- case 1:
- if (zend_get_parameters_ex(1, &fbsql_link_index)==FAILURE) {
- RETURN_FALSE;
- }
- id = -1;
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
- ZEND_FETCH_RESOURCE2(phpLink, PHPFBLink *, fbsql_link_index, id, "FrontBase-Link", le_link, le_plink);
-
- md = fbcdcCommit(phpLink->connection);
-
- if (md) {
- fbcmdRelease(md);
- RETURN_TRUE;
- }
- else
- RETURN_FALSE;
-}
-/* }}} */
-
-/* {{{ proto bool fbsql_rollback([resource link_identifier])
- Rollback all statments since last commit */
-PHP_FUNCTION(fbsql_rollback)
-{
- PHPFBLink* phpLink = NULL;
- FBCMetaData* md;
- zval **fbsql_link_index = NULL;
- int id;
-
- switch (ZEND_NUM_ARGS()) {
- case 0:
- id = php_fbsql_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU);
- CHECK_LINK(id);
- break;
- case 1:
- if (zend_get_parameters_ex(1, &fbsql_link_index)==FAILURE) {
- RETURN_FALSE;
- }
- id = -1;
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
- ZEND_FETCH_RESOURCE2(phpLink, PHPFBLink *, fbsql_link_index, id, "FrontBase-Link", le_link, le_plink);
-
- md = fbcdcRollback(phpLink->connection);
-
- if (md) {
- fbcmdRelease(md);
- RETURN_TRUE;
- }
- else
- RETURN_FALSE;
-}
-/* }}} */
-
-
-static void php_fbsql_create_lob(INTERNAL_FUNCTION_PARAMETERS, int lob_type)
-{
- PHPFBLink* phpLink = NULL;
- FBCBlobHandle *lobHandle;
- zval **lob_data, **fbsql_link_index = NULL;
- int id;
-
- switch (ZEND_NUM_ARGS()) {
- case 1:
- if (zend_get_parameters_ex(1, &lob_data)==FAILURE) {
- RETURN_FALSE;
- }
- id = php_fbsql_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU);
- CHECK_LINK(id);
- break;
- case 2:
- if (zend_get_parameters_ex(2, &lob_data, &fbsql_link_index)==FAILURE) {
- RETURN_FALSE;
- }
- id = -1;
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
- ZEND_FETCH_RESOURCE2(phpLink, PHPFBLink *, fbsql_link_index, id, "FrontBase-Link", le_link, le_plink);
-
- convert_to_string_ex(lob_data);
- switch (lob_type) {
- case 0 : /* BLOB */
- lobHandle = fbcdcWriteBLOB(phpLink->connection, Z_STRVAL_PP(lob_data), Z_STRLEN_PP(lob_data));
- break;
- case 1 : /* CLOB */
- lobHandle = fbcdcWriteCLOB(phpLink->connection, Z_STRVAL_PP(lob_data));
- break;
- }
- if (lobHandle) {
- RETURN_STRING(fbcbhDescription(lobHandle), 1);
- fbcbhRelease(lobHandle);
- }
- else
- RETURN_FALSE;
-}
-
-/* {{{ proto string fbsql_create_blob(string blob_data [, resource link_identifier])
- Create a BLOB in the database for use with an insert or update statement */
-PHP_FUNCTION(fbsql_create_blob)
-{
- php_fbsql_create_lob(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0);
-}
-/* }}} */
-
-/* {{{ proto string fbsql_create_clob(string clob_data [, resource link_identifier])
- Create a CLOB in the database for use with an insert or update statement */
-PHP_FUNCTION(fbsql_create_clob)
-{
- php_fbsql_create_lob(INTERNAL_FUNCTION_PARAM_PASSTHRU, 1);
-}
-/* }}} */
-
-/* {{{ proto bool fbsql_set_lob_mode(resource result, int lob_mode)
- Sets the mode for how LOB data re retreived (actual data or a handle) */
-PHP_FUNCTION(fbsql_set_lob_mode)
-{
-
- PHPFBResult* result = NULL;
- zval **fbsql_result_index = NULL, **lob_mode = NULL;
-
- switch (ZEND_NUM_ARGS()) {
- case 2:
- if (zend_get_parameters_ex(2, &fbsql_result_index, &lob_mode)==FAILURE) {
- RETURN_FALSE;
- }
- convert_to_long_ex(lob_mode);
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
- ZEND_FETCH_RESOURCE(result, PHPFBResult *, fbsql_result_index, -1, "FrontBase-Result", le_result);
-
- result->lobMode = Z_LVAL_PP(lob_mode);
-
- RETURN_TRUE;
-}
-/* }}} */
-
-static void php_fbsql_read_lob(INTERNAL_FUNCTION_PARAMETERS, int lob_type)
-{
- PHPFBLink* phpLink = NULL;
- zval **lob_handle, **fbsql_link_index = NULL;
- int id;
- long length = 0;
- char* value = NULL;
-
- switch (ZEND_NUM_ARGS()) {
- case 1:
- if (zend_get_parameters_ex(1, &lob_handle)==FAILURE) {
- RETURN_FALSE;
- }
- id = php_fbsql_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU);
- CHECK_LINK(id);
- break;
- case 2:
- if (zend_get_parameters_ex(2, &lob_handle, &fbsql_link_index)==FAILURE) {
- RETURN_FALSE;
- }
- id = -1;
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
- ZEND_FETCH_RESOURCE2(phpLink, PHPFBLink *, fbsql_link_index, id, "FrontBase-Link", le_link, le_plink);
-
- convert_to_string_ex(lob_handle);
-
- if (Z_STRLEN_PP(lob_handle) != 27 || Z_STRVAL_PP(lob_handle)[0] != '@') {
- if (FB_SQL_G(generateWarnings))
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "The handle is invalid");
- RETURN_FALSE;
- }
-
- length = fbcbhBlobSize((FBCBlobHandle *)Z_STRVAL_PP(lob_handle));
- if (lob_type == 0)
- value = estrndup((char *)fbcdcReadBLOB(phpLink->connection, (FBCBlobHandle *)Z_STRVAL_PP(lob_handle)), length);
- else
- value = estrndup((char *)fbcdcReadCLOB(phpLink->connection, (FBCBlobHandle *)Z_STRVAL_PP(lob_handle)), length);
- if (value) {
- RETURN_STRINGL(value, length, 0);
- }
- else {
- RETURN_FALSE;
- }
-}
-
-/* {{{ proto string fbsql_read_blob(string blob_handle [, resource link_identifier])
- Read the BLOB data identified by blob_handle */
-PHP_FUNCTION(fbsql_read_blob)
-{
- php_fbsql_read_lob(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0);
-}
-/* }}} */
-
-/* {{{ proto string fbsql_read_clob(string clob_handle [, resource link_identifier])
- Read the CLOB data identified by clob_handle */
-PHP_FUNCTION(fbsql_read_clob)
-{
- php_fbsql_read_lob(INTERNAL_FUNCTION_PARAM_PASSTHRU, 1);
-}
-/* }}} */
-
-static void php_fbsql_lob_size(INTERNAL_FUNCTION_PARAMETERS, int lob_type)
-{
- PHPFBLink* phpLink = NULL;
- zval **lob_handle, **fbsql_link_index = NULL;
- int id;
- char* value = NULL;
-
- switch (ZEND_NUM_ARGS()) {
- case 1:
- if (zend_get_parameters_ex(1, &lob_handle)==FAILURE) {
- RETURN_FALSE;
- }
- id = php_fbsql_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU);
- CHECK_LINK(id);
- break;
- case 2:
- if (zend_get_parameters_ex(2, &lob_handle, &fbsql_link_index)==FAILURE) {
- RETURN_FALSE;
- }
- id = -1;
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
- ZEND_FETCH_RESOURCE2(phpLink, PHPFBLink *, fbsql_link_index, id, "FrontBase-Link", le_link, le_plink);
-
- convert_to_string_ex(lob_handle);
-
- if (Z_STRLEN_PP(lob_handle) != 27 || Z_STRVAL_PP(lob_handle)[0] != '@') {
- if (FB_SQL_G(generateWarnings))
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "The handle is invalid");
- RETURN_FALSE;
- }
-
- RETURN_LONG(fbcbhBlobSize((FBCBlobHandle *)Z_STRVAL_PP(lob_handle)));
-}
-
-/* {{{ proto int fbsql_blob_size(string blob_handle [, resource link_identifier])
- Get the size of a BLOB identified by blob_handle */
-PHP_FUNCTION(fbsql_blob_size)
-{
- php_fbsql_lob_size(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0);
-}
-/* }}} */
-
-/* {{{ proto int fbsql_clob_size(string clob_handle [, resource link_identifier])
- Get the size of a CLOB identified by clob_handle */
-PHP_FUNCTION(fbsql_clob_size)
-{
- php_fbsql_lob_size(INTERNAL_FUNCTION_PARAM_PASSTHRU, 1);
-}
-/* }}} */
-
-/* {{{ proto string fbsql_hostname(resource link_identifier [, string host_name])
- Get or set the host name used with a connection */
-PHP_FUNCTION(fbsql_hostname)
-{
- PHPFBLink* phpLink = NULL;
- zval **fbsql_link_index = NULL, **host_name = NULL;
-
- switch (ZEND_NUM_ARGS()) {
- case 1:
- if (zend_get_parameters_ex(1, &fbsql_link_index)==FAILURE) {
- RETURN_FALSE;
- }
- break;
- case 2:
- if (zend_get_parameters_ex(2, &fbsql_link_index, &host_name)==FAILURE) {
- RETURN_FALSE;
- }
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
- ZEND_FETCH_RESOURCE2(phpLink, PHPFBLink *, fbsql_link_index, -1, "FrontBase-Link", le_link, le_plink);
-
- if (host_name)
- {
- convert_to_string_ex(host_name);
- if (phpLink->hostName) free(phpLink->hostName);
- phpLink->hostName = strdup(Z_STRVAL_PP(host_name));
- }
- RETURN_STRING(phpLink->hostName, 1);
-}
-/* }}} */
-
-/* {{{ proto string fbsql_database(resource link_identifier [, string database])
- Get or set the database name used with a connection */
-PHP_FUNCTION(fbsql_database)
-{
- PHPFBLink* phpLink = NULL;
- zval **fbsql_link_index = NULL, **dbname = NULL;
-
- switch (ZEND_NUM_ARGS()) {
- case 1:
- if (zend_get_parameters_ex(1, &fbsql_link_index)==FAILURE) {
- RETURN_FALSE;
- }
- break;
- case 2:
- if (zend_get_parameters_ex(2, &fbsql_link_index, &dbname)==FAILURE) {
- RETURN_FALSE;
- }
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
- ZEND_FETCH_RESOURCE2(phpLink, PHPFBLink *, fbsql_link_index, -1, "FrontBase-Link", le_link, le_plink);
-
- if (dbname)
- {
- convert_to_string_ex(dbname);
- if (phpLink->databaseName) free(phpLink->databaseName);
- phpLink->databaseName = strdup(Z_STRVAL_PP(dbname));
- }
- if (phpLink->databaseName) {
- RETURN_STRING(phpLink->databaseName, 1);
- }
- else {
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-/* {{{ proto string fbsql_database_password(resource link_identifier [, string database_password])
- Get or set the databsae password used with a connection */
-PHP_FUNCTION(fbsql_database_password)
-{
- PHPFBLink* phpLink = NULL;
- zval **fbsql_link_index = NULL, **db_password = NULL;
-
- switch (ZEND_NUM_ARGS()) {
- case 1:
- if (zend_get_parameters_ex(1, &fbsql_link_index)==FAILURE) {
- RETURN_FALSE;
- }
- break;
- case 2:
- if (zend_get_parameters_ex(2, &fbsql_link_index, &db_password)==FAILURE) {
- RETURN_FALSE;
- }
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
- ZEND_FETCH_RESOURCE2(phpLink, PHPFBLink *, fbsql_link_index, -1, "FrontBase-Link", le_link, le_plink);
-
- if (db_password)
- {
- convert_to_string_ex(db_password);
- if (phpLink->databasePassword) free(phpLink->databasePassword);
- phpLink->databasePassword = strdup(Z_STRVAL_PP(db_password));
- }
- RETURN_STRING(phpLink->databasePassword, 1);
-}
-/* }}} */
-
-/* {{{ proto string fbsql_username(resource link_identifier [, string username])
- Get or set the host user used with a connection */
-PHP_FUNCTION(fbsql_username)
-{
- PHPFBLink* phpLink = NULL;
- zval **fbsql_link_index = NULL, **username = NULL;
-
- switch (ZEND_NUM_ARGS()) {
- case 1:
- if (zend_get_parameters_ex(1, &fbsql_link_index)==FAILURE) {
- RETURN_FALSE;
- }
- break;
- case 2:
- if (zend_get_parameters_ex(2, &fbsql_link_index, &username)==FAILURE) {
- RETURN_FALSE;
- }
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
- ZEND_FETCH_RESOURCE2(phpLink, PHPFBLink *, fbsql_link_index, -1, "FrontBase-Link", le_link, le_plink);
-
- if (username)
- {
- convert_to_string_ex(username);
- if (phpLink->userName) free(phpLink->userName);
- phpLink->userName = strdup(Z_STRVAL_PP(username));
- }
- RETURN_STRING(phpLink->userName, 1);
-}
-/* }}} */
-
-/* {{{ proto string fbsql_password(resource link_identifier [, string password])
- Get or set the user password used with a connection */
-PHP_FUNCTION(fbsql_password)
-{
- PHPFBLink* phpLink = NULL;
- zval **fbsql_link_index = NULL, **password = NULL;
-
- switch (ZEND_NUM_ARGS()) {
- case 1:
- if (zend_get_parameters_ex(1, &fbsql_link_index)==FAILURE) {
- RETURN_FALSE;
- }
- break;
- case 2:
- if (zend_get_parameters_ex(2, &fbsql_link_index, &password)==FAILURE) {
- RETURN_FALSE;
- }
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
- ZEND_FETCH_RESOURCE2(phpLink, PHPFBLink *, fbsql_link_index, -1, "FrontBase-Link", le_link, le_plink);
-
- if (password)
- {
- convert_to_string_ex(password);
- if (phpLink->userPassword) free(phpLink->userPassword);
- phpLink->userPassword = strdup(Z_STRVAL_PP(password));
- }
- RETURN_STRING(phpLink->userPassword, 1);
-}
-/* }}} */
-
-/* {{{ proto bool fbsql_set_password(resource link_identifier, string user, string password, string old_password)
- Change the password for a given user */
-PHP_FUNCTION(fbsql_set_password)
-{
- PHPFBLink* phpLink = NULL;
- zval **fbsql_link_index = NULL, **user, **password, **old_password;
- char *digest_password, *digest_old_password;
- FBCMetaData *md;
-
- switch (ZEND_NUM_ARGS()) {
- case 4:
- if (zend_get_parameters_ex(4, &fbsql_link_index, &user, &password, &old_password)==FAILURE) {
- RETURN_FALSE;
- }
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
- ZEND_FETCH_RESOURCE2(phpLink, PHPFBLink *, fbsql_link_index, -1, "FrontBase-Link", le_link, le_plink);
-
- convert_to_string_ex(user);
- convert_to_string_ex(password);
- convert_to_string_ex(old_password);
-
- digest_password = DigestPassword(Z_STRVAL_PP(user), Z_STRVAL_PP(password));
- digest_old_password = DigestPassword(Z_STRVAL_PP(user), Z_STRVAL_PP(old_password));
-
- md = fbcdcSetPasswordForUser(phpLink->connection, Z_STRVAL_PP(user), digest_password, digest_old_password);
- if (mdOk(phpLink, md, "Change password")) {
- ZVAL_BOOL(return_value, 1);
- }
- else {
- ZVAL_BOOL(return_value, 0);
- }
- fbcmdRelease(md);
- if (digest_old_password) efree(digest_old_password);
- if (digest_password) efree(digest_password);
-}
-/* }}} */
-
-
-/* {{{ proto bool fbsql_select_db([string database_name [, resource link_identifier]])
- Select the database to open */
-PHP_FUNCTION(fbsql_select_db)
-{
- PHPFBLink* phpLink = NULL;
- zval **fbsql_link_index = NULL, **dbname;
- int id;
- char* name = NULL;
-
- switch (ZEND_NUM_ARGS()) {
- case 0:
- name = FB_SQL_G(databaseName);
- id = php_fbsql_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU);
- CHECK_LINK(id);
- break;
- case 1:
- id = php_fbsql_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU);
- CHECK_LINK(id);
- if (zend_get_parameters_ex(1, &dbname)==FAILURE) {
- RETURN_FALSE;
- }
- convert_to_string_ex(dbname);
- name = Z_STRVAL_PP(dbname);
- break;
- case 2:
- if (zend_get_parameters_ex(2, &dbname, &fbsql_link_index)==FAILURE) {
- RETURN_FALSE;
- }
- convert_to_string_ex(dbname);
- name = Z_STRVAL_PP(dbname);
- id = -1;
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
- ZEND_FETCH_RESOURCE2(phpLink, PHPFBLink *, fbsql_link_index, id, "FrontBase-Link", le_link, le_plink);
-
- if (!php_fbsql_select_db(name, phpLink TSRMLS_CC)) {
- RETURN_FALSE;
- }
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto int fbsql_change_user(string user, string password [, string database [, resource link_identifier]])
- Change the user for a session */
-PHP_FUNCTION(fbsql_change_user)
-{
- PHPFBLink* phpLink = NULL;
- zval **fbsql_link_index = NULL, **user, **password, **database;
- int id;
- char *name = NULL, *userName, *userPassword;
- char buffer[1024];
-
- switch (ZEND_NUM_ARGS()) {
- case 2:
- name = FB_SQL_G(databaseName);
- id = php_fbsql_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU);
- CHECK_LINK(id);
- if (zend_get_parameters_ex(2, &user, &password)==FAILURE) {
- RETURN_FALSE;
- }
- break;
- case 3:
- id = php_fbsql_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU);
- CHECK_LINK(id);
- if (zend_get_parameters_ex(3, &user, &password, &database)==FAILURE) {
- RETURN_FALSE;
- }
- convert_to_string_ex(database);
- name = Z_STRVAL_PP(database);
- break;
- case 4:
- if (zend_get_parameters_ex(4, &user, &password, &database, &fbsql_link_index)==FAILURE) {
- RETURN_FALSE;
- }
- convert_to_string_ex(database);
- name = Z_STRVAL_PP(database);
- id = -1;
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
- ZEND_FETCH_RESOURCE2(phpLink, PHPFBLink *, fbsql_link_index, id, "FrontBase-Link", le_link, le_plink);
-
- convert_to_string_ex(user);
- userName = Z_STRVAL_PP(user);
-
- convert_to_string_ex(password);
- userPassword = Z_STRVAL_PP(password);
-
- sprintf(buffer, "SET AUTHORIZATION %s;", userName);
-
- phpfbQuery(INTERNAL_FUNCTION_PARAM_PASSTHRU, buffer, phpLink, 0);
- if (Z_LVAL_P(return_value))
- {
- free(phpLink->userName);
- phpLink->userName = strdup(userName);
- }
-}
-/* }}} */
-
-/* {{{ proto bool fbsql_create_db(string database_name [, resource link_identifier])
- Create a new database on the server */
-PHP_FUNCTION(fbsql_create_db)
-{
- PHPFBLink* phpLink = NULL;
- zval **fbsql_link_index = NULL, **database_name, **database_options = NULL;
- int id;
- int i, status;
- char *databaseName, *databaseOptions;
-
- switch (ZEND_NUM_ARGS()) {
- case 1:
- id = php_fbsql_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU);
- CHECK_LINK(id);
- if (zend_get_parameters_ex(1, &database_name)==FAILURE) {
- RETURN_FALSE;
- }
- break;
- case 2:
- if (zend_get_parameters_ex(2, &database_name, &fbsql_link_index)==FAILURE) {
- RETURN_FALSE;
- }
- id = -1;
- break;
- case 3:
- if (zend_get_parameters_ex(3, &database_name, &fbsql_link_index, &database_options)==FAILURE) {
- RETURN_FALSE;
- }
- id = -1;
- convert_to_string_ex(database_options);
- databaseOptions = Z_STRVAL_PP(database_options);
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
- ZEND_FETCH_RESOURCE2(phpLink, PHPFBLink *, fbsql_link_index, id, "FrontBase-Link", le_link, le_plink);
-
- convert_to_string_ex(database_name);
- databaseName = Z_STRVAL_PP(database_name);
-
- if (phpLink->execHandler == NULL) phpLink->execHandler = fbcehHandlerForHost(phpLink->hostName, 128);
- status = fbcehStatusForDatabaseNamed(phpLink->execHandler, databaseName);
- if (status != FBUnknownStatus)
- {
- char* txt = "Unknown status";
- if (status == FBStopped ) txt = "stopped";
- else if (status == FBStarting) txt = "starting";
- else if (status == FBRunning ) txt = "running";
- else if (status == FBStopping) txt = "stopping";
- else if (status == FBNoExec ) txt = "no exec";
- if (FB_SQL_G(generateWarnings))
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Could not create %s@%s, database is %s", databaseName, phpLink->hostName, txt);
- RETURN_FALSE;
- }
- if (!fbcehCreateDatabaseNamedWithOptions(phpLink->execHandler, databaseName, databaseOptions))
- {
- char* error = fbechErrorMessage(phpLink->execHandler);
- if (FB_SQL_G(generateWarnings))
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Could not create %s@%s. %s", databaseName, phpLink->hostName, error);
- RETURN_FALSE;
- }
- for (i=0; i < 20; i++)
- {
-#ifdef PHP_WIN32
- Sleep(1000);
-#else
- sleep(1);
-#endif
- status = fbcehStatusForDatabaseNamed(phpLink->execHandler, databaseName);
- if (status == FBRunning) break;
- }
- if (status != FBRunning)
- {
- if (FB_SQL_G(generateWarnings))
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Database %s@%s created -- status unknown", databaseName, phpLink->hostName);
- RETURN_FALSE;
- }
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto int fbsql_drop_db(string database_name [, resource link_identifier])
- Drop a database on the server */
-PHP_FUNCTION(fbsql_drop_db)
-{
- PHPFBLink* phpLink = NULL;
- zval **fbsql_link_index = NULL, **database_name;
- int id;
- int i, status;
- char *databaseName;
-
- switch (ZEND_NUM_ARGS()) {
- case 1:
- id = php_fbsql_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU);
- CHECK_LINK(id);
- if (zend_get_parameters_ex(1, &database_name)==FAILURE) {
- RETURN_FALSE;
- }
- break;
- case 2:
- if (zend_get_parameters_ex(2, &database_name, &fbsql_link_index)==FAILURE) {
- RETURN_FALSE;
- }
- id = -1;
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
- ZEND_FETCH_RESOURCE2(phpLink, PHPFBLink *, fbsql_link_index, id, "FrontBase-Link", le_link, le_plink);
-
- convert_to_string_ex(database_name);
- databaseName = Z_STRVAL_PP(database_name);
-
- if (phpLink->execHandler == NULL) phpLink->execHandler = fbcehHandlerForHost(phpLink->hostName, 128);
- status = fbcehStatusForDatabaseNamed(phpLink->execHandler, databaseName);
- if (status != FBStopped)
- {
- char* txt = "Unknown status";
- if (status == FBStopped ) txt = "stopped";
- else if (status == FBUnknownStatus) txt = "nonexisting";
- else if (status == FBStarting ) txt = "starting";
- else if (status == FBRunning ) txt = "running";
- else if (status == FBStopping ) txt = "stopping";
- else if (status == FBNoExec ) txt = "no exec";
- if (FB_SQL_G(generateWarnings))
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Could not drop %s@%s, database is %s", databaseName, phpLink->hostName, txt);
- RETURN_FALSE;
- }
-
- if (!fbcehDeleteDatabaseNamed(phpLink->execHandler, databaseName))
- {
- char* error = fbechErrorMessage(phpLink->execHandler);
- if (FB_SQL_G(generateWarnings))
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Could not drop %s@%s. %s", databaseName, phpLink->hostName, error);
- RETURN_FALSE;
- }
- for (i=0; i < 20; i++)
- {
-#ifdef PHP_WIN32
- Sleep(1000);
-#else
- sleep(1);
-#endif
- status = fbcehStatusForDatabaseNamed(phpLink->execHandler, databaseName);
- if (status == FBUnknownStatus) break;
- }
- if (status != FBUnknownStatus)
- {
- if (FB_SQL_G(generateWarnings))
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Database %s@%s dropped -- status unknown", databaseName, phpLink->hostName);
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-/* {{{ proto bool fbsql_start_db(string database_name [, resource link_identifier [, string database_options]])
- Start a database on the server */
-PHP_FUNCTION(fbsql_start_db)
-{
- PHPFBLink* phpLink = NULL;
- zval **fbsql_link_index = NULL, **database_name, **database_options;
- int id;
- int i, status;
- char *databaseName, *databaseOptions = NULL;
-
- switch (ZEND_NUM_ARGS()) {
- case 1:
- id = php_fbsql_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU);
- CHECK_LINK(id);
- if (zend_get_parameters_ex(1, &database_name)==FAILURE) {
- RETURN_FALSE;
- }
- break;
- case 2:
- if (zend_get_parameters_ex(2, &database_name, &fbsql_link_index)==FAILURE) {
- RETURN_FALSE;
- }
- id = -1;
- break;
- case 3:
- if (zend_get_parameters_ex(3, &database_name, &fbsql_link_index, &database_options)==FAILURE) {
- RETURN_FALSE;
- }
- id = -1;
- convert_to_string_ex(database_options);
- databaseOptions = Z_STRVAL_PP(database_options);
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
- ZEND_FETCH_RESOURCE2(phpLink, PHPFBLink *, fbsql_link_index, id, "FrontBase-Link", le_link, le_plink);
-
- convert_to_string_ex(database_name);
- databaseName = Z_STRVAL_PP(database_name);
-
- if (phpLink->execHandler == NULL) phpLink->execHandler = fbcehHandlerForHost(phpLink->hostName, 128);
- status = fbcehStatusForDatabaseNamed(phpLink->execHandler, databaseName);
- if ((status != FBStopped) && (status != FBRunning) && (status != FBStarting))
- {
- char* txt = "Unknown status";
- if (status == FBStopped ) txt = "stopped";
- else if (status == FBStarting) txt = "starting";
- else if (status == FBRunning ) txt = "running";
- else if (status == FBStopping) txt = "stopping";
- else if (status == FBNoExec ) txt = "no exec";
- if (FB_SQL_G(generateWarnings))
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Could not start %s@%s, as database is %s", databaseName, phpLink->hostName, txt);
- RETURN_FALSE;
- }
-
- if (status == FBStopped)
- {
- if (!fbcehStartDatabaseNamedWithOptions(phpLink->execHandler, databaseName, databaseOptions))
- {
- char* error = fbechErrorMessage(phpLink->execHandler);
- if (FB_SQL_G(generateWarnings))
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Could not start %s@%s. %s", databaseName, phpLink->hostName, error);
- RETURN_FALSE;
- }
- }
-
- for (i=0; i < 20; i++)
- {
-#ifdef PHP_WIN32
- Sleep(1000);
-#else
- sleep(1);
-#endif
- status = fbcehStatusForDatabaseNamed(phpLink->execHandler, databaseName);
- if (status == FBRunning) break;
- }
- if (status != FBRunning)
- {
- if (FB_SQL_G(generateWarnings))
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Database %s@%s started -- status unknown", databaseName, phpLink->hostName);
- RETURN_FALSE;
- }
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto bool fbsql_stop_db(string database_name [, resource link_identifier])
- Stop a database on the server */
-PHP_FUNCTION(fbsql_stop_db)
-{
- PHPFBLink* phpLink = NULL;
- zval **fbsql_link_index = NULL, **database_name;
- int id;
- int i, status;
- char *databaseName;
-
- switch (ZEND_NUM_ARGS()) {
- case 1:
- id = php_fbsql_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU);
- CHECK_LINK(id);
- if (zend_get_parameters_ex(1, &database_name)==FAILURE) {
- RETURN_FALSE;
- }
- break;
- case 2:
- if (zend_get_parameters_ex(2, &database_name, &fbsql_link_index)==FAILURE) {
- RETURN_FALSE;
- }
- id = -1;
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
- ZEND_FETCH_RESOURCE2(phpLink, PHPFBLink *, fbsql_link_index, id, "FrontBase-Link", le_link, le_plink);
-
- convert_to_string_ex(database_name);
- databaseName = Z_STRVAL_PP(database_name);
-
- if (!php_fbsql_select_db(databaseName, phpLink TSRMLS_CC)) {
- RETURN_FALSE;
- }
-
-/* printf("Stop db %x\n", phpDatabase->connection); */
- if (!fbcdcStopDatabase(phpLink->connection))
- {
- if (FB_SQL_G(generateWarnings))
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Cannot stop database %s@%s", databaseName, phpLink->hostName);
- RETURN_FALSE;
- }
-
- for (i=0; i < 20; i++)
- {
- status = fbcehStatusForDatabaseNamed(phpLink->execHandler, databaseName);
- if (status == FBStopped) break;
-#ifdef PHP_WIN32
- Sleep(1000);
-#else
- sleep(1);
-#endif
- }
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto int fbsql_db_status(string database_name [, resource link_identifier])
- Gets the status (Stopped, Starting, Running, Stopping) for a given database */
-PHP_FUNCTION(fbsql_db_status)
-{
- PHPFBLink* phpLink = NULL;
- zval **fbsql_link_index = NULL, **database_name;
- int id;
- char *databaseName;
-
- switch (ZEND_NUM_ARGS()) {
- case 1:
- id = php_fbsql_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU);
- CHECK_LINK(id);
- if (zend_get_parameters_ex(1, &database_name)==FAILURE) {
- RETURN_FALSE;
- }
- break;
- case 2:
- if (zend_get_parameters_ex(2, &database_name, &fbsql_link_index)==FAILURE) {
- RETURN_FALSE;
- }
- id = -1;
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
- ZEND_FETCH_RESOURCE2(phpLink, PHPFBLink *, fbsql_link_index, id, "FrontBase-Link", le_link, le_plink);
-
- convert_to_string_ex(database_name);
- databaseName = Z_STRVAL_PP(database_name);
-
- if (phpLink->execHandler == NULL) phpLink->execHandler = fbcehHandlerForHost(phpLink->hostName, 128);
- if (phpLink->execHandler) {
- RETURN_LONG(fbcehStatusForDatabaseNamed(phpLink->execHandler, databaseName));
- }
- else {
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-/* {{{ mdOk
- */
-int mdOk(PHPFBLink* link, FBCMetaData* md, char* sql)
-{
- FBCDatabaseConnection* c = link->connection;
- int result = 1;
- TSRMLS_FETCH();
-
- link->errorNo = 0;
- if (link->errorText)
- {
- free(link->errorText);
- link->errorText = NULL;
- }
- if (md == NULL)
- {
- link->errorNo = 1;
- link->errorText = strdup("Connection to database server was lost");
- if (FB_SQL_G(generateWarnings))
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", link->errorText);
- result = 0;
- }
- else if (fbcmdErrorsFound(md))
- {
- FBCErrorMetaData* emd = fbcdcErrorMetaData(c, md);
- char* emg = fbcemdAllErrorMessages(emd);
- if (FB_SQL_G(generateWarnings))
- {
- if (emg)
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Error in statement: '%s' %s", sql, emg);
- else
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "No message");
- }
- link->errorText = strdup(emg);
- link->errorNo = fbcemdErrorCodeAtIndex(emd, 0);;
- free(emg);
- fbcemdRelease(emd);
- result = 0;
- }
- return result;
-}
-/* }}} */
-
-static void phpfbQuery(INTERNAL_FUNCTION_PARAMETERS, char* sql, PHPFBLink* link, long batch_size)
-{
- PHPFBResult* result = NULL;
- FBCMetaData* md, *meta;
- char* tp;
- char* fh = NULL;
- unsigned int sR = 1, cR = 0;
-
- meta = fbcdcExecuteDirectSQL(link->connection, sql);
-
- if (!mdOk(link, meta, sql))
- {
- fbcmdRelease(meta);
- ZVAL_BOOL(return_value, 0)
- }
- else {
- if (fbcmdHasMetaDataArray(meta)) {
- sR = fbcmdMetaDataArrayCount(meta);
- md = (FBCMetaData*)fbcmdMetaDataAtIndex(meta, cR);
- }
- else
- md = meta;
-
- tp = fbcmdStatementType(md);
-
- if ((tp[0] == 'C') || (tp[0] == 'R'))
- {
- if (sR == 1 && md) fbcmdRelease(md);
- ZVAL_BOOL(return_value, 1)
- }
- else if ((fh = fbcmdFetchHandle(md)) || tp[0] == 'E' || (tp[0] == 'U' && fh))
- {
- result = (PHPFBResult *)emalloc(sizeof(PHPFBResult));
- result->link = link;
- result->rowHandler = NULL;
- result->fetchHandle = NULL;
- result->ResultmetaData = meta;
- result->metaData = md;
- result->batchSize = batch_size > 0 ? batch_size : FB_SQL_G(batchSize);
- result->rowCount = 0x7fffffff;
- result->columnCount = 0;
- result->rowIndex = 0;
- result->columnIndex = 0;
- result->row = NULL;
- result->array = NULL;
- result->list = NULL;
- result->selectResults = sR;
- result->currentResult = cR;
- result->lobMode = FBSQL_LOB_DIRECT;
-
- if (tp[0] != 'E')
- {
- result->columnCount = fbcmdColumnCount(md);
- result->fetchHandle = fh;
- }
- else
- {
- char* r = fbcmdMessage(result->metaData);
- fbcrhConvertToOutputCharSet(fbcdcOutputCharacterSet(link->connection), (unsigned char *)r);
- if ((result->list = fbcplParse(r)))
- {
- result->rowCount = fbcplCount(result->list);
- result->columnCount = 7;
- }
- }
- ZEND_REGISTER_RESOURCE(return_value, result, le_result);
- }
- else if (tp[0] == 'I' || tp[0] == 'U')
- {
- if (tp[0] == 'I') link->insert_id = fbcmdRowIndex(md);
- if (sR == 1 && md) fbcmdRelease(md);
- ZVAL_BOOL(return_value, 1)
- }
- else if(tp[0] == 'A' || tp[0] == 'D')
- {
- if (sR == 1 && md) fbcmdRelease(md);
- ZVAL_BOOL(return_value, 1)
- }
- if (link) link->affectedRows = fbcmdRowCount(md);
- }
-}
-
-/* {{{ proto resource fbsql_query(string query [, resource link_identifier [, long batch_size]])
- Send one or more SQL statements to the server and execute them */
-PHP_FUNCTION(fbsql_query)
-{
- PHPFBLink* phpLink = NULL;
- zval **fbsql_link_index = NULL, **query, **batch_size;
- int id, bs = 0;
-
- switch (ZEND_NUM_ARGS()) {
- case 1:
- id = php_fbsql_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU);
- CHECK_LINK(id);
- if (zend_get_parameters_ex(1, &query)==FAILURE) {
- RETURN_FALSE;
- }
- break;
- case 2:
- if (zend_get_parameters_ex(2, &query, &fbsql_link_index)==FAILURE) {
- RETURN_FALSE;
- }
- id = -1;
- break;
- case 3:
- if (zend_get_parameters_ex(3, &query, &fbsql_link_index, &batch_size)==FAILURE) {
- RETURN_FALSE;
- }
- id = -1;
- convert_to_long_ex(batch_size);
- bs = Z_LVAL_PP(batch_size);
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
- ZEND_FETCH_RESOURCE2(phpLink, PHPFBLink *, fbsql_link_index, id, "FrontBase-Link", le_link, le_plink);
-
- convert_to_string_ex(query);
-
- phpfbQuery(INTERNAL_FUNCTION_PARAM_PASSTHRU, Z_STRVAL_PP(query), phpLink, bs);
-}
-/* }}} */
-
-/* {{{ proto resource fbsql_db_query(string database_name, string query [, resource link_identifier])
- Send one or more SQL statements to a specified database on the server */
-PHP_FUNCTION(fbsql_db_query)
-{
- PHPFBLink* phpLink = NULL;
- zval **fbsql_link_index = NULL, **dbname, **query;
- int id;
-
- switch (ZEND_NUM_ARGS()) {
- case 2:
- id = php_fbsql_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU);
- CHECK_LINK(id);
- if (zend_get_parameters_ex(2, &dbname, &query)==FAILURE) {
- RETURN_FALSE;
- }
- break;
- case 3:
- if (zend_get_parameters_ex(3, &dbname, &query, &fbsql_link_index)==FAILURE) {
- RETURN_FALSE;
- }
- id = -1;
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
- ZEND_FETCH_RESOURCE2(phpLink, PHPFBLink *, fbsql_link_index, id, "FrontBase-Link", le_link, le_plink);
-
- convert_to_string_ex(query);
- convert_to_string_ex(dbname);
-
- if (php_fbsql_select_db(Z_STRVAL_PP(dbname), phpLink TSRMLS_CC)) {
- phpfbQuery(INTERNAL_FUNCTION_PARAM_PASSTHRU, Z_STRVAL_PP(query), phpLink, 0);
- } else {
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-/* {{{ proto resource fbsql_list_dbs([resource link_identifier])
- Retreive a list of all databases on the server */
-PHP_FUNCTION(fbsql_list_dbs)
-{
- PHPFBResult* phpResult;
- PHPFBLink* phpLink = NULL;
- zval **fbsql_link_index = NULL;
- int id;
-
- switch (ZEND_NUM_ARGS()) {
- case 0:
- id = php_fbsql_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU);
- CHECK_LINK(id);
- break;
- case 1:
- if (zend_get_parameters_ex(1, &fbsql_link_index)==FAILURE) {
- RETURN_FALSE;
- }
- id = -1;
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
- ZEND_FETCH_RESOURCE2(phpLink, PHPFBLink *, fbsql_link_index, id, "FrontBase-Link", le_link, le_plink);
-
- if (phpLink->execHandler == NULL) phpLink->execHandler = fbcehHandlerForHost(phpLink->hostName, 128);
- phpResult = emalloc(sizeof(PHPFBResult));
- phpResult->link = phpLink;
- phpResult->fetchHandle = NULL;
- phpResult->rowHandler = NULL;
- phpResult->ResultmetaData = NULL;
- phpResult->metaData = NULL;
- phpResult->batchSize = FB_SQL_G(batchSize);
- phpResult->columnCount = 1;
- phpResult->rowIndex = 0;
- phpResult->columnIndex = 0;
- phpResult->row = NULL;
- phpResult->array = fbcehAvailableDatabases(phpLink->execHandler);
- phpResult->rowCount = fbaCount(phpResult->array);
- phpResult->list = NULL;
-
- ZEND_REGISTER_RESOURCE(return_value, phpResult, le_result);
-}
-/* }}} */
-
-/* {{{ proto resource fbsql_list_tables(string database [, int link_identifier])
- Retreive a list of all tables from the specifoied database */
-PHP_FUNCTION(fbsql_list_tables)
-{
- char* sql = "select t0.\"table_name\"from information_schema.tables t0, information_schema.SCHEMATA t1 where t0.schema_pk = t1.schema_pk and t1.\"schema_name\" = current_schema order by \"table_name\";";
- PHPFBLink* phpLink = NULL;
- zval **fbsql_link_index = NULL, **database_name;
- int id;
- char *databaseName;
-
- switch (ZEND_NUM_ARGS()) {
- case 1:
- id = php_fbsql_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU);
- CHECK_LINK(id);
- if (zend_get_parameters_ex(1, &database_name)==FAILURE) {
- RETURN_FALSE;
- }
- break;
- case 2:
- if (zend_get_parameters_ex(2, &database_name, &fbsql_link_index)==FAILURE) {
- RETURN_FALSE;
- }
- id = -1;
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
- ZEND_FETCH_RESOURCE2(phpLink, PHPFBLink *, fbsql_link_index, id, "FrontBase-Link", le_link, le_plink);
-
- convert_to_string_ex(database_name);
- databaseName = Z_STRVAL_PP(database_name);
-
- if (databaseName == NULL) {
- php_fbsql_select_db(FB_SQL_G(databaseName), phpLink TSRMLS_CC);
- } else {
- php_fbsql_select_db(databaseName, phpLink TSRMLS_CC);
- }
-
- phpfbQuery(INTERNAL_FUNCTION_PARAM_PASSTHRU, sql, phpLink, 0);
-}
-/* }}} */
-
-/* {{{ proto resource fbsql_list_fields(string database_name, string table_name [, resource link_identifier])
- Retrieve a list of all fields for the specified database.table */
-PHP_FUNCTION(fbsql_list_fields)
-{
- PHPFBLink* phpLink = NULL;
- zval **fbsql_link_index = NULL, **database_name, **table_name;
- int id;
- char *databaseName, *tableName;
- char sql[1024];
-
- switch (ZEND_NUM_ARGS()) {
- case 2:
- id = php_fbsql_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU);
- CHECK_LINK(id);
- if (zend_get_parameters_ex(2, &database_name, &table_name)==FAILURE) {
- RETURN_FALSE;
- }
- break;
- case 3:
- if (zend_get_parameters_ex(3, &database_name, &table_name, &fbsql_link_index)==FAILURE) {
- RETURN_FALSE;
- }
- id = -1;
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
- ZEND_FETCH_RESOURCE2(phpLink, PHPFBLink *, fbsql_link_index, id, "FrontBase-Link", le_link, le_plink);
-
- convert_to_string_ex(database_name);
- databaseName = Z_STRVAL_PP(database_name);
- convert_to_string_ex(table_name);
- tableName = Z_STRVAL_PP(table_name);
-
- if (!php_fbsql_select_db(databaseName, phpLink TSRMLS_CC)) {
- RETURN_FALSE;
- }
-
- sprintf(sql, "SELECT * FROM %s WHERE 1=0;", tableName);
-
- phpfbQuery(INTERNAL_FUNCTION_PARAM_PASSTHRU, sql, phpLink, 0);
-}
-/* }}} */
-
-/* {{{ proto string fbsql_error([resource link_identifier])
- Returns the last error string */
-PHP_FUNCTION(fbsql_error)
-{
- PHPFBLink* phpLink = NULL;
- zval **fbsql_link_index = NULL;
- int id;
-
- switch (ZEND_NUM_ARGS()) {
- case 0:
- id = php_fbsql_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU);
- CHECK_LINK(id);
- break;
- case 1:
- if (zend_get_parameters_ex(1, &fbsql_link_index)==FAILURE) {
- RETURN_FALSE;
- }
- id = -1;
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
- ZEND_FETCH_RESOURCE2(phpLink, PHPFBLink *, fbsql_link_index, id, "FrontBase-Link", le_link, le_plink);
-
- if (phpLink->errorText == NULL) {
- RETURN_FALSE;
- }
- else {
- RETURN_STRING(phpLink->errorText, 1);
- }
-}
-/* }}} */
-
-/* {{{ proto int fbsql_errno([resource link_identifier])
- Returns the last error code */
-PHP_FUNCTION(fbsql_errno)
-{
- PHPFBLink* phpLink = NULL;
- zval **fbsql_link_index = NULL;
- int id;
-
- switch (ZEND_NUM_ARGS()) {
- case 0:
- id = php_fbsql_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU);
- CHECK_LINK(id);
- break;
- case 1:
- if (zend_get_parameters_ex(1, &fbsql_link_index)==FAILURE) {
- RETURN_FALSE;
- }
- id = -1;
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
- ZEND_FETCH_RESOURCE2(phpLink, PHPFBLink *, fbsql_link_index, id, "FrontBase-Link", le_link, le_plink);
-
- RETURN_LONG(phpLink->errorNo);
-}
-/* }}} */
-
-/* {{{ proto bool fbsql_warnings([int flag])
- Enable or disable FrontBase warnings */
-PHP_FUNCTION(fbsql_warnings)
-{
- int argc = ZEND_NUM_ARGS();
- zval **argv[1];
-
- if ((argc < 0) || (argc > 1)) WRONG_PARAM_COUNT;
- if (zend_get_parameters_ex(argc, &argv[0])==FAILURE) RETURN_FALSE;
- if (argc >= 1)
- {
- convert_to_long_ex(argv[0]);
- FB_SQL_G(generateWarnings) = Z_LVAL_PP(argv[0]) != 0;
- }
- RETURN_BOOL(FB_SQL_G(generateWarnings));
-}
-/* }}} */
-
-/* {{{ proto int fbsql_affected_rows([resource link_identifier])
- Get the number of rows affected by the last statement */
-PHP_FUNCTION(fbsql_affected_rows)
-{
- PHPFBLink* phpLink = NULL;
- zval **fbsql_link_index = NULL;
- int id;
-
- switch (ZEND_NUM_ARGS()) {
- case 0:
- id = php_fbsql_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU);
- CHECK_LINK(id);
- break;
- case 1:
- if (zend_get_parameters_ex(1, &fbsql_link_index)==FAILURE) {
- RETURN_FALSE;
- }
- id = -1;
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
- ZEND_FETCH_RESOURCE2(phpLink, PHPFBLink *, fbsql_link_index, id, "FrontBase-Link", le_link, le_plink);
-
- RETURN_LONG(phpLink->affectedRows);
-}
-/* }}} */
-
-/* {{{ proto int fbsql_affected_rows([resource link_identifier])
- Get the number of rows affected by the last statement */
-PHP_FUNCTION(fbsql_rows_fetched)
-{
- PHPFBResult* phpResult = NULL;
- zval **result = NULL;
- int id;
-
- switch (ZEND_NUM_ARGS()) {
- case 1:
- if (zend_get_parameters_ex(1, &result)==FAILURE) {
- RETURN_FALSE;
- }
- id = -1;
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
- ZEND_FETCH_RESOURCE(phpResult, PHPFBResult *, result, id, "FrontBase-Result", le_result);
-
- if (!phpResult->rowHandler) {
- RETURN_FALSE;
- }
- else {
- RETURN_LONG(fbcrhRowCount(phpResult->rowHandler));
- }
-}
-/* }}} */
-
-/* {{{ proto int fbsql_insert_id([resource link_identifier])
- Get the internal index for the last insert statement */
-PHP_FUNCTION(fbsql_insert_id)
-{
- PHPFBLink* phpLink = NULL;
- zval **fbsql_link_index = NULL;
- int id;
-
- switch (ZEND_NUM_ARGS()) {
- case 0:
- id = php_fbsql_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU);
- CHECK_LINK(id);
- break;
- case 1:
- if (zend_get_parameters_ex(1, &fbsql_link_index)==FAILURE) {
- RETURN_FALSE;
- }
- id = -1;
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
- ZEND_FETCH_RESOURCE2(phpLink, PHPFBLink *, fbsql_link_index, id, "FrontBase-Link", le_link, le_plink);
-
- RETURN_LONG(phpLink->insert_id);
-}
-/* }}} */
-
-/* {{{ phpSizeOfInt
- */
-int phpSizeOfInt (int i)
-{
- int s = 1;
- if (i < 0)
- {
- s++;
- i = -i;
- }
- while ((i = i / 10)) s++;
- return s;
-}
-/* }}} */
-
-void phpfbColumnAsString(PHPFBResult* result, int column, void* data , int* length, char** value TSRMLS_DC)
-{
- FBCMetaData* md = result->metaData;
- const FBCDatatypeMetaData* dtmd = fbcmdDatatypeMetaDataAtIndex(md, column);
- unsigned dtc = fbcdmdDatatypeCode(dtmd);
- switch (dtc)
- {
- case FB_Boolean:
- {
- unsigned char v = *((unsigned char*)(data));
- if (v == 255)
- phpfbestrdup("Unknown", length, value);
- else if (v == 0)
- phpfbestrdup("False", length, value);
- else
- phpfbestrdup("True", length, value);
- }
- break;
-
- case FB_PrimaryKey:
- case FB_Integer:
- {
- int v = *((int*)data);
- char b[128];
- sprintf(b, "%d", v);
- phpfbestrdup(b, length, value);
- }
- break;
-#ifdef FB_TinyInteger
- case FB_TinyInteger:
- {
- short int v = *((FBTinyInteger*)data);
- char b[128];
- sprintf(b, "%d", v);
- phpfbestrdup(b, length, value);
- }
- break;
-#endif
-#ifdef FB_LongInteger
- case FB_LongInteger:
- {
- FBLongInteger v = *((FBLongInteger*)data);
- char b[128];
-#ifdef PHP_WIN32
- sprintf(b, "%I64i", v);
-#else
- sprintf(b, "%ll", v);
-#endif
- phpfbestrdup(b, length, value);
- }
- break;
-#endif
- case FB_SmallInteger:
- {
- short v = *((short*)data);
- char b[128];
- sprintf(b, "%d", v);
- phpfbestrdup(b, length, value);
- }
- break;
-
- case FB_Float:
- case FB_Real:
- case FB_Double:
- case FB_Numeric:
- case FB_Decimal:
- {
- double v = *((double*)data);
- char b[128];
- sprintf(b, "%f", v);
- phpfbestrdup(b, length, value);
- }
- break;
-
- case FB_Character:
- case FB_VCharacter:
- {
- char* v = (char*)data;
- phpfbestrdup(v, length, value);
- }
- break;
-
- case FB_Bit:
- case FB_VBit:
- {
- const FBCColumnMetaData* clmd = fbcmdColumnMetaDataAtIndex(md, column);
- struct bitValue
- {
- unsigned int nBytes;
- unsigned char* bytes;
- };
- struct bitValue* ptr = data;
- unsigned nBits = ptr->nBytes * 8;
-
- if (dtc == FB_Bit) nBits = fbcdmdLength(fbccmdDatatype(clmd));
- if (nBits %8 == 0)
- {
- unsigned i;
- unsigned int l = nBits / 8;
- *length = l*2+3+1;
- if (value)
- {
- char* r = safe_emalloc(l, 2, 4);
- r[0] = 'X';
- r[1] = '\'';
- for (i = 0; i < nBits / 8; i++)
- {
- char c[4];
- sprintf(c, "%02x", ptr->bytes[i]);
- r[i*2+2] = c[0];
- r[i*2+3] = c[1];
- }
- r[i*2+2] = '\'';
- r[i*2+3] = 0;
- *value = r;
- }
- }
- else
- {
- unsigned i;
- unsigned int l = nBits;
- *length = l*2+3+1;
- if (value)
- {
- char* r = safe_emalloc(l, 2, 1);
- r[0] = 'B';
- r[1] = '\'';
- for (i = 0; i < nBits; i++)
- {
- int bit = 0;
- if (i/8 < ptr->nBytes) bit = ptr->bytes[i/8] & (1<<(7-(i%8)));
- r[i*2+2] = bit?'1':'0';
- }
- r[i*2+2] = '\'';
- r[i*2+3] = 0;
- *value = r;
- }
- }
- }
- break;
-
- case FB_Date:
- case FB_Time:
- case FB_TimeTZ:
- case FB_Timestamp:
- case FB_TimestampTZ:
- {
- char* v = (char*)data;
- phpfbestrdup(v, length, value);
- }
- break;
-
- case FB_YearMonth:
- {
- char b[128];
- int v = *((unsigned int*)data);
- sprintf(b, "%d", v);
- phpfbestrdup(b, length, value);
- }
- break;
-
- case FB_DayTime:
- {
- char b[128];
- double seconds = *((double*)data);
- sprintf(b, "%f", seconds);
- phpfbestrdup(b, length, value);
- }
- break;
-
- case FB_CLOB:
- case FB_BLOB:
- {
- if (*((unsigned char*) data) == '\1')
- { /* Direct */
- *length = ((FBCBlobDirect *)data)->blobSize;
- *value = estrndup((char *)((FBCBlobDirect *)data)->blobData, *length);
- }
- else
- {
- FBCBlobHandle *lobHandle;
- unsigned char *bytes = (unsigned char *)data;
- char *handle = (char *)(&bytes[1]);
- lobHandle = fbcbhInitWithHandle(handle);
- *length = fbcbhBlobSize(lobHandle);
-
- if (result->lobMode == FBSQL_LOB_HANDLE) {
- phpfbestrdup(fbcbhDescription(lobHandle), length, value);
- }
- else {
- if (dtc == FB_BLOB)
- *value = estrndup((char *)fbcdcReadBLOB(result->link->connection, lobHandle), *length);
- else
- *value = estrndup((char *)fbcdcReadCLOB(result->link->connection, lobHandle), *length);
- }
- fbcbhRelease(lobHandle);
- }
- }
- break;
-
- default:
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unimplemented type (%d)", dtc);
- break;
- }
-}
-
-/* {{{ phpfbSqlResult
- */
-void phpfbSqlResult(INTERNAL_FUNCTION_PARAMETERS, PHPFBResult* result, int rowIndex, int columnIndex)
-{
- void** row;
- if (result->list)
- {
- FBCPList* columns = (FBCPList*)fbcplValueForKey(result->list, "COLUMNS");
- FBCPList* column = (FBCPList*)fbcplValueAtIndex(columns, result->rowIndex);
- if (columnIndex == 0)
- { /* Name */
- FBCPList* name = (FBCPList*)fbcplValueForKey(column, "NAME");
- RETURN_STRING((char *)fbcplString((FBCPList*)name), 1);
- }
- else if (columnIndex == 2)
- { /* Length */
- FBCPList* name = (FBCPList*)fbcplValueForKey(column, "WIDTH");
- RETURN_STRING((char *)fbcplString((FBCPList*)name), 1);
- }
- else if (columnIndex == 1)
- { /* Type */
- FBCPList* name = (FBCPList*)fbcplValueForKey(column, "DATATYPE");
- RETURN_STRING((char *)fbcplString((FBCPList*)name), 1);
- }
- else if (columnIndex == 3)
- { /* Flags */
- RETURN_STRING("", 1);
- }
- else
- {
- RETURN_STRING("", 1);
- }
- }
- else if (result->array)
- { /* Special case for get dbs */
- RETURN_STRING(fbaObjectAtIndex(result->array, rowIndex), 1);
- }
- else if (!phpfbFetchRow(result, rowIndex))
- {
- if (FB_SQL_G(generateWarnings))
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "No such row %d in result set %d", rowIndex, rowIndex);
- RETURN_FALSE;
- }
- else if (columnIndex >= result->columnCount)
- {
- if (FB_SQL_G(generateWarnings))
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "No such column %d in result set %d", columnIndex, rowIndex);
- RETURN_FALSE;
- }
- else
- {
- row = fbcrhRowAtIndex(result->rowHandler, rowIndex);
- if (row == NULL)
- {
- RETURN_FALSE;
- }
- else if (row[columnIndex])
- {
- phpfbColumnAsString(result, columnIndex, row[columnIndex], &Z_STRLEN_P(return_value), &Z_STRVAL_P(return_value) TSRMLS_CC);
- Z_TYPE_P(return_value) = IS_STRING;
- }
- else
- {
- RETURN_NULL();
- }
- }
-}
-/* }}} */
-
-/* {{{ proto mixed fbsql_result(int result [, int row [, mixed field]])
- ??? */
-PHP_FUNCTION(fbsql_result)
-{
- PHPFBResult* result = NULL;
- zval **fbsql_result_index = NULL, **row = NULL, **field = NULL;
- int rowIndex;
- int columnIndex;
-
- switch (ZEND_NUM_ARGS()) {
- case 1:
- if (zend_get_parameters_ex(1, &fbsql_result_index)==FAILURE) {
- RETURN_FALSE;
- }
- break;
- case 2:
- if (zend_get_parameters_ex(2, &fbsql_result_index, &row)==FAILURE) {
- RETURN_FALSE;
- }
- break;
- case 3:
- if (zend_get_parameters_ex(3, &fbsql_result_index, &row, &field)==FAILURE) {
- RETURN_FALSE;
- }
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
- ZEND_FETCH_RESOURCE(result, PHPFBResult *, fbsql_result_index, -1, "FrontBase-Result", le_result);
-
- rowIndex = result->rowIndex;
- if (row)
- {
- convert_to_long_ex(row);
- rowIndex = Z_LVAL_PP(row);
- }
-
- columnIndex = result->columnIndex;
- if (field)
- {
- if ((Z_TYPE_PP(field) == IS_STRING) && (result->metaData))
- {
- for (columnIndex =0; columnIndex < result->columnCount; columnIndex ++)
- {
- const FBCColumnMetaData* cmd = fbcmdColumnMetaDataAtIndex(result->metaData, columnIndex);
- const char* lbl = fbccmdLabelName(cmd);
- if (strcmp((char*)lbl, Z_STRVAL_PP(field)) == 0) break;
- }
- if (columnIndex == result->columnCount) RETURN_FALSE;
- }
- else
- {
- convert_to_long_ex(field);
- columnIndex = Z_LVAL_PP(field);
- if (columnIndex < 0)
- {
- if (FB_SQL_G(generateWarnings))
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Illegal column index - %d", columnIndex);
- RETURN_FALSE;
- }
- }
- }
-
- phpfbSqlResult(INTERNAL_FUNCTION_PARAM_PASSTHRU, result, rowIndex, columnIndex);
-
- result->columnIndex++;
- if (result->columnIndex == result->columnCount)
- {
- result->rowIndex++;
- result->columnIndex = 0;
- }
-}
-/* }}} */
-
-/* {{{ proto bool fbsql_next_result(int result)
- Switch to the next result if multiple results are available */
-PHP_FUNCTION(fbsql_next_result)
-{
- PHPFBResult* result = NULL;
- zval **fbsql_result_index = NULL;
-
- switch (ZEND_NUM_ARGS()) {
- case 1:
- if (zend_get_parameters_ex(1, &fbsql_result_index)==FAILURE) {
- RETURN_FALSE;
- }
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
- ZEND_FETCH_RESOURCE(result, PHPFBResult *, fbsql_result_index, -1, "FrontBase-Result", le_result);
-
- result->currentResult++;
- if (result->currentResult < result->selectResults) {
- if (result->fetchHandle) {
- FBCMetaData *md = fbcdcCancelFetch(result->link->connection, result->fetchHandle);
- fbcmdRelease(md);
- }
- if (result->rowHandler) fbcrhRelease(result->rowHandler);
- result->metaData = (FBCMetaData*)fbcmdMetaDataAtIndex(result->ResultmetaData, result->currentResult);
- result->fetchHandle = fbcmdFetchHandle(result->metaData);
- result->rowHandler = NULL;
- result->batchSize = FB_SQL_G(batchSize);
- result->rowCount = 0x7fffffff;
- result->columnCount = fbcmdColumnCount(result->metaData);;
- result->rowIndex = 0;
- result->columnIndex = 0;
- result->row = NULL;
- result->array = NULL;
- result->list = NULL;
- if (result->link)
- result->link->affectedRows = fbcmdRowCount(result->metaData);
-
- RETURN_TRUE;
- }
- else {
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-/* {{{ proto int fbsql_num_rows(int result)
- Get number of rows */
-PHP_FUNCTION(fbsql_num_rows)
-{
- PHPFBResult* result = NULL;
- zval **fbsql_result_index = NULL;
- int rowCount;
-
- switch (ZEND_NUM_ARGS()) {
- case 1:
- if (zend_get_parameters_ex(1, &fbsql_result_index)==FAILURE) {
- RETURN_FALSE;
- }
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
- ZEND_FETCH_RESOURCE(result, PHPFBResult *, fbsql_result_index, -1, "FrontBase-Result", le_result);
-
- if (result->array)
- rowCount = result->rowCount;
- else {
- rowCount = fbcmdRowCount(result->metaData);
- if (rowCount == -1)
- {
- phpfbFetchRow(result, 0x7fffffff);
- rowCount = result->rowCount;
- }
- }
- RETURN_LONG(rowCount);
-}
-/* }}} */
-
-/* {{{ proto int fbsql_num_fields(int result)
- Get number of fields in the result set */
-PHP_FUNCTION(fbsql_num_fields)
-{
- PHPFBResult* result = NULL;
- zval **fbsql_result_index = NULL;
-
- switch (ZEND_NUM_ARGS()) {
- case 1:
- if (zend_get_parameters_ex(1, &fbsql_result_index)==FAILURE) {
- RETURN_FALSE;
- }
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
- ZEND_FETCH_RESOURCE(result, PHPFBResult *, fbsql_result_index, -1, "FrontBase-Result", le_result);
-
- RETURN_LONG(result->columnCount);
-}
-/* }}} */
-
-/* {{{ proto array fbsql_fetch_row(resource result)
- Fetch a row of data. Returns an indexed array */
-PHP_FUNCTION(fbsql_fetch_row)
-{
- php_fbsql_fetch_hash(INTERNAL_FUNCTION_PARAM_PASSTHRU, FBSQL_NUM, 1);
-}
-/* }}} */
-
-/* {{{ proto object fbsql_fetch_assoc(resource result)
- Detch a row of data. Returns an assoc array */
-PHP_FUNCTION(fbsql_fetch_assoc)
-{
- php_fbsql_fetch_hash(INTERNAL_FUNCTION_PARAM_PASSTHRU, FBSQL_ASSOC, 1);
-}
-/* }}} */
-
-/* {{{ proto object fbsql_fetch_object(resource result [, int result_type])
- Fetch a row of data. Returns an object */
-PHP_FUNCTION(fbsql_fetch_object)
-{
- php_fbsql_fetch_hash(INTERNAL_FUNCTION_PARAM_PASSTHRU, FBSQL_ASSOC, 2);
- if (Z_TYPE_P(return_value)==IS_ARRAY) {
- object_and_properties_init(return_value, ZEND_STANDARD_CLASS_DEF_PTR, Z_ARRVAL_P(return_value));
- }
-}
-/* }}} */
-
-/* {{{ proto array fbsql_fetch_array(resource result [, int result_type])
- Fetches a result row as an array (associative, numeric or both)*/
-PHP_FUNCTION(fbsql_fetch_array)
-{
- php_fbsql_fetch_hash(INTERNAL_FUNCTION_PARAM_PASSTHRU, FBSQL_BOTH, 2);
-}
-/* }}} */
-
-static void _parse_list(zval** return_value, FBCPList* list)
-{
- int count = fbcplCount(list);
- int i,j;
-
- for (i=0; i<count; i++)
- {
- char* key = (char*)fbcplKeyAtIndex(list, i);
- FBCPList* value = (FBCPList*)fbcplValueForKey(list, key);
- if (fbcplIsDictionary(value))
- {
- zval *value_array;
-
- MAKE_STD_ZVAL(value_array);
- array_init(value_array);
-
- _parse_list(&value_array, value);
- add_assoc_zval(*return_value, key, value_array);
- }
- else if (fbcplIsArray(value))
- {
- zval *value_array;
- int valcount = fbcplCount(value);
-
- MAKE_STD_ZVAL(value_array);
- array_init(value_array);
-
- for (j=0; j<valcount; j++)
- {
- FBCPList* arrayValue = (FBCPList*)fbcplValueAtIndex(value, j);
- if (fbcplIsString(arrayValue))
- add_index_string(value_array, j, (char*)fbcplString(arrayValue), 1);
- else {
- _parse_list(&value_array, arrayValue);
- }
- }
- add_assoc_zval(*return_value, key, value_array);
- }
- else if (fbcplIsString(value)) {
- add_assoc_string(*return_value, key, (char*)fbcplString(value), 1);
- }
- }
-}
-
-static void php_fbsql_fetch_hash(INTERNAL_FUNCTION_PARAMETERS, int result_type, int expected_args)
-{
-
- PHPFBResult* result = NULL;
- zval **fbsql_result_index = NULL, **zresult_type = NULL;
- int rowIndex;
- int i;
- void **row;
-
- if (ZEND_NUM_ARGS() > expected_args) {
- WRONG_PARAM_COUNT;
- }
-
- switch (ZEND_NUM_ARGS()) {
- case 1:
- if (zend_get_parameters_ex(1, &fbsql_result_index)==FAILURE) {
- RETURN_FALSE;
- }
- break;
- case 2:
- if (zend_get_parameters_ex(2, &fbsql_result_index, &zresult_type)==FAILURE) {
- RETURN_FALSE;
- }
- convert_to_long_ex(zresult_type);
- result_type = Z_LVAL_PP(zresult_type);
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
- ZEND_FETCH_RESOURCE(result, PHPFBResult *, fbsql_result_index, -1, "FrontBase-Result", le_result);
-
- rowIndex = result->rowIndex;
- if (((result_type & FBSQL_NUM) != FBSQL_NUM) && ((result_type & FBSQL_ASSOC) != FBSQL_ASSOC))
- {
- if (FB_SQL_G(generateWarnings))
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Illegal result type use FBSQL_NUM, FBSQL_ASSOC, or FBSQL_BOTH");
- RETURN_FALSE;
- }
- array_init(return_value);
- if (result->fetchHandle == NULL)
- {
- if (result->array == NULL && result->list == NULL)
- {
- RETURN_FALSE;
- }
- if (result->rowIndex >= result->rowCount)
- {
- RETURN_FALSE;
- }
- if (result->list) {
- char* key;
- FBCPList* value;
-
- value = (FBCPList*)fbcplValueAtIndex(result->list, result->rowIndex);
- key = (char*)fbcplKeyAtIndex(result->list, result->rowIndex);
-
- if (key && key[0] == 2)
- key = NULL;
-
- if (fbcplIsDictionary(value)) {
- zval *value_array;
-
- MAKE_STD_ZVAL(value_array);
- array_init(value_array);
-
- _parse_list(&value_array, value);
- if (result_type & FBSQL_NUM || key == NULL)
- {
- add_index_zval(return_value, 0, value_array);
- }
- if (result_type & FBSQL_ASSOC && key != NULL)
- {
- add_assoc_zval(return_value, key, value_array);
- }
- }
- else if (fbcplIsArray(value)) {
- zval *value_array;
- int valcount = fbcplCount(value);
- int j;
-
- MAKE_STD_ZVAL(value_array);
- array_init(value_array);
-
- for (j=0; j<valcount; j++)
- {
- FBCPList* arrayValue = (FBCPList*)fbcplValueAtIndex(value, j);
- if (fbcplIsString(arrayValue))
- add_index_string(value_array, j, (char*)fbcplString(arrayValue), 1);
- else {
- _parse_list(&value_array, arrayValue);
- }
- }
- if (result_type & FBSQL_NUM || key == NULL)
- {
- add_index_zval(return_value, 0, value_array);
- }
- if (result_type & FBSQL_ASSOC && key != NULL)
- {
- add_assoc_zval(return_value, key, value_array);
- }
- }
- else if (fbcplIsString(value)) {
- if (result_type & FBSQL_NUM)
- {
- add_index_string(return_value, 0, (char*)fbcplString(value), 1);
- }
- if (result_type & FBSQL_ASSOC)
- {
- add_assoc_string(return_value, key, (char*)fbcplString(value), 1);
- }
- }
- }
- else {
- if (result_type & FBSQL_NUM)
- {
- add_index_string(return_value, 0, estrdup(fbaObjectAtIndex(result->array, result->rowIndex)), 0);
- }
- if (result_type & FBSQL_ASSOC)
- {
- add_assoc_string(return_value, "Database", estrdup(fbaObjectAtIndex(result->array, result->rowIndex)), 0);
- }
- }
- }
- else {
- if (result->rowCount == 0) {
- RETURN_FALSE;
- }
- if (result->rowCount == 0x7fffffff)
- {
- if (!phpfbFetchRow(result, result->rowIndex)) {
- RETURN_FALSE;
- }
- }
- row = fbcrhRowAtIndex(result->rowHandler, rowIndex);
- if (row == NULL)
- {
- RETURN_FALSE;
- }
- for (i=0; i < result->columnCount; i++)
- {
- if (row[i])
- {
- char* value;
- unsigned int length;
- unsigned int c = 0;
- phpfbColumnAsString(result, i, row[i], &length, &value TSRMLS_CC);
- if (result_type & FBSQL_NUM)
- {
- add_index_stringl(return_value, i, value, length, c);
- c = 1;
- }
- if (result_type & FBSQL_ASSOC)
- {
- char* key = (char*)fbccmdLabelName(fbcmdColumnMetaDataAtIndex(result->metaData, i));
- add_assoc_stringl(return_value, key, value, length, c);
- }
- }
- else
- {
- if (result_type & FBSQL_NUM)
- {
- add_index_unset(return_value, i);
- }
- if (result_type & FBSQL_ASSOC)
- {
- char* key = (char*)fbccmdLabelName(fbcmdColumnMetaDataAtIndex(result->metaData, i));
- add_assoc_unset(return_value, key);
- }
- }
- }
- }
- result->rowIndex++;
- result->columnIndex = 0;
-}
-
-/* {{{ proto bool fbsql_data_seek(int result, int row_number)
- Move the internal row counter to the specified row_number */
-PHP_FUNCTION(fbsql_data_seek)
-{
- PHPFBResult* result = NULL;
- zval **fbsql_result_index = NULL, **row_number = NULL;
- unsigned int rowIndex;
-
- switch (ZEND_NUM_ARGS()) {
- case 2:
- if (zend_get_parameters_ex(2, &fbsql_result_index, &row_number)==FAILURE) {
- RETURN_FALSE;
- }
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
- ZEND_FETCH_RESOURCE(result, PHPFBResult *, fbsql_result_index, -1, "FrontBase-Result", le_result);
-
- convert_to_long_ex(row_number);
- rowIndex = Z_LVAL_PP(row_number);
-
- if (rowIndex < 0)
- {
- if (FB_SQL_G(generateWarnings))
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Illegal row_index (%d)", rowIndex);
- RETURN_FALSE;
- }
-
- if (result->rowCount == 0x7fffffff) phpfbFetchRow(result, rowIndex);
- if (rowIndex > result->rowCount) RETURN_FALSE;
- result->rowIndex = rowIndex;
- result->columnIndex = 0;
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto array fbsql_fetch_lengths(int result)
- Returns an array of the lengths of each column in the result set */
-PHP_FUNCTION(fbsql_fetch_lengths)
-{
- PHPFBResult* result = NULL;
- zval **fbsql_result_index = NULL;
- int i;
-
- switch (ZEND_NUM_ARGS()) {
- case 1:
- if (zend_get_parameters_ex(1, &fbsql_result_index)==FAILURE) {
- RETURN_FALSE;
- }
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
- ZEND_FETCH_RESOURCE(result, PHPFBResult *, fbsql_result_index, -1, "FrontBase-Result", le_result);
-
- if (result->row == NULL) RETURN_FALSE;
- array_init(return_value);
- for (i=0; i < result->columnCount; i++)
- {
- unsigned length = 0;
- if (result->row[i]) phpfbColumnAsString(result, i, result->row[i], &length, NULL TSRMLS_CC);
- add_index_long(return_value, i, length);
- }
-}
-/* }}} */
-
-/* {{{ proto object fbsql_fetch_field(int result [, int field_index])
- Get the field properties for a specified field_index */
-PHP_FUNCTION(fbsql_fetch_field)
-{
- PHPFBResult* result = NULL;
- zval **fbsql_result_index = NULL, **field_index = NULL;
- int column = -1;
-
- switch (ZEND_NUM_ARGS()) {
- case 1:
- if (zend_get_parameters_ex(1, &fbsql_result_index)==FAILURE) {
- RETURN_FALSE;
- }
- break;
- case 2:
- if (zend_get_parameters_ex(2, &fbsql_result_index, &field_index)==FAILURE) {
- RETURN_FALSE;
- }
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
- ZEND_FETCH_RESOURCE(result, PHPFBResult *, fbsql_result_index, -1, "FrontBase-Result", le_result);
-
- column = result->columnIndex;
- if (field_index)
- {
- convert_to_long_ex(field_index);
- column = Z_LVAL_PP(field_index);
- if (column < 0 || column >= result->columnCount)
- {
- if (FB_SQL_G(generateWarnings))
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "%d no such column in result", column);
- RETURN_FALSE;
- }
- }
- object_init(return_value);
-
- add_property_string(return_value, "name", (char*)fbccmdLabelName(fbcmdColumnMetaDataAtIndex(result->metaData, column)), 1);
- add_property_string(return_value, "table", (char*)fbccmdTableName(fbcmdColumnMetaDataAtIndex(result->metaData, column)), 1);
- add_property_long(return_value, "max_length", fbcdmdLength(fbccmdDatatype(fbcmdColumnMetaDataAtIndex(result->metaData, column))));
- add_property_string(return_value, "type", (char*)fbcdmdDatatypeString(fbcmdDatatypeMetaDataAtIndex(result->metaData, column)), 1);
- add_property_long(return_value, "not_null", !fbccmdIsNullable(fbcmdColumnMetaDataAtIndex(result->metaData, column)));
-/* Remember to add the rest */
-/* add_property_long(return_value, "primary_key", IS_PRI_KEY(fbsql_field->flags)?1:0); */
-/* add_property_long(return_value, "multiple_key", (fbsql_field->flags&MULTIPLE_KEY_FLAG?1:0)); */
-/* add_property_long(return_value, "unique_key", (fbsql_field->flags&UNIQUE_KEY_FLAG?1:0)); */
-/* add_property_long(return_value, "numeric", IS_NUM(Z_TYPE_P(fbsql_field))?1:0); */
-/* add_property_long(return_value, "blob", IS_BLOB(fbsql_field->flags)?1:0); */
-/* add_property_long(return_value, "unsigned", (fbsql_field->flags&UNSIGNED_FLAG?1:0)); */
-/* add_property_long(return_value, "zerofill", (fbsql_field->flags&ZEROFILL_FLAG?1:0)); */
-}
-/* }}} */
-
-/* {{{ proto bool fbsql_field_seek(int result [, int field_index])
- ??? */
-PHP_FUNCTION(fbsql_field_seek)
-{
- PHPFBResult* result = NULL;
- zval **fbsql_result_index = NULL, **field_index = NULL;
- int column = -1;
-
- switch (ZEND_NUM_ARGS()) {
- case 1:
- if (zend_get_parameters_ex(1, &fbsql_result_index)==FAILURE) {
- RETURN_FALSE;
- }
- break;
- case 2:
- if (zend_get_parameters_ex(2, &fbsql_result_index, &field_index)==FAILURE) {
- RETURN_FALSE;
- }
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
- ZEND_FETCH_RESOURCE(result, PHPFBResult *, fbsql_result_index, -1, "FrontBase-Result", le_result);
-
- column = result->columnIndex;
- if (field_index)
- {
- convert_to_long_ex(field_index);
- column = Z_LVAL_PP(field_index);
- if (column < 0 || column >= result->columnCount)
- {
- if (FB_SQL_G(generateWarnings))
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "%d no such column in result", column);
- RETURN_FALSE;
- }
- }
-
- result->columnIndex = column;
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto string fbsql_field_name(int result [, int field_index])
- Get the column name for a specified field_index */
-PHP_FUNCTION(fbsql_field_name)
-{
- PHPFBResult* result = NULL;
- zval **fbsql_result_index = NULL, **field_index = NULL;
- int column = -1;
-
- switch (ZEND_NUM_ARGS()) {
- case 1:
- if (zend_get_parameters_ex(1, &fbsql_result_index)==FAILURE) {
- RETURN_FALSE;
- }
- break;
- case 2:
- if (zend_get_parameters_ex(2, &fbsql_result_index, &field_index)==FAILURE) {
- RETURN_FALSE;
- }
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
- ZEND_FETCH_RESOURCE(result, PHPFBResult *, fbsql_result_index, -1, "FrontBase-Result", le_result);
-
- column = result->columnIndex;
- if (field_index)
- {
- convert_to_long_ex(field_index);
- column = Z_LVAL_PP(field_index);
- if (column < 0 || column >= result->columnCount)
- {
- if (FB_SQL_G(generateWarnings))
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "%d no such column in result", column);
- RETURN_FALSE;
- }
- }
- if (result->list)
- {
- phpfbSqlResult(INTERNAL_FUNCTION_PARAM_PASSTHRU, result, result->rowIndex, 0);
- }
- else if (result->metaData)
- {
- RETURN_STRING((char *)fbccmdLabelName(fbcmdColumnMetaDataAtIndex(result->metaData, column)), 1);
- result->columnIndex = column;
- }
-}
-/* }}} */
-
-/* {{{ proto string fbsql_field_table(int result [, int field_index])
- Get the table name for a specified field_index */
-PHP_FUNCTION(fbsql_field_table)
-{
- PHPFBResult* result = NULL;
- zval **fbsql_result_index = NULL, **field_index = NULL;
- int column = -1;
-
- switch (ZEND_NUM_ARGS()) {
- case 1:
- if (zend_get_parameters_ex(1, &fbsql_result_index)==FAILURE) {
- RETURN_FALSE;
- }
- break;
- case 2:
- if (zend_get_parameters_ex(2, &fbsql_result_index, &field_index)==FAILURE) {
- RETURN_FALSE;
- }
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
- ZEND_FETCH_RESOURCE(result, PHPFBResult *, fbsql_result_index, -1, "FrontBase-Result", le_result);
-
- column = result->columnIndex;
- if (field_index)
- {
- convert_to_long_ex(field_index);
- column = Z_LVAL_PP(field_index);
- if (column < 0 || column >= result->columnCount)
- {
- if (FB_SQL_G(generateWarnings))
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "%d no such column in result", column);
- RETURN_FALSE;
- }
- }
- RETURN_STRING((char *)fbccmdTableName(fbcmdColumnMetaDataAtIndex(result->metaData, column)), 1);
-}
-/* }}} */
-
-/* {{{ proto mixed fbsql_field_len(int result [, int field_index])
- Get the column length for a specified field_index */
-PHP_FUNCTION(fbsql_field_len)
-{
- PHPFBResult* result = NULL;
- zval **fbsql_result_index = NULL, **field_index = NULL;
- int column = -1;
-
- switch (ZEND_NUM_ARGS()) {
- case 1:
- if (zend_get_parameters_ex(1, &fbsql_result_index)==FAILURE) {
- RETURN_FALSE;
- }
- break;
- case 2:
- if (zend_get_parameters_ex(2, &fbsql_result_index, &field_index)==FAILURE) {
- RETURN_FALSE;
- }
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
- ZEND_FETCH_RESOURCE(result, PHPFBResult *, fbsql_result_index, -1, "FrontBase-Result", le_result);
-
- column = result->columnIndex;
- if (field_index)
- {
- convert_to_long_ex(field_index);
- column = Z_LVAL_PP(field_index);
- if (column < 0 || column >= result->columnCount)
- {
- if (FB_SQL_G(generateWarnings))
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "%d no such column in result", column);
- RETURN_FALSE;
- }
- }
- if (result->list)
- {
- phpfbSqlResult(INTERNAL_FUNCTION_PARAM_PASSTHRU, result, result->rowIndex, 2);
- }
- else if (result->metaData)
- {
- RETURN_LONG(fbcdmdLength(fbccmdDatatype(fbcmdColumnMetaDataAtIndex(result->metaData, column))));
- }
- else
- {
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-/* {{{ proto string fbsql_field_type(int result [, int field_index])
- Get the field type for a specified field_index */
-PHP_FUNCTION(fbsql_field_type)
-{
- PHPFBResult* result = NULL;
- zval **fbsql_result_index = NULL, **field_index = NULL;
- int column = -1;
-
- switch (ZEND_NUM_ARGS()) {
- case 1:
- if (zend_get_parameters_ex(1, &fbsql_result_index)==FAILURE) {
- RETURN_FALSE;
- }
- break;
- case 2:
- if (zend_get_parameters_ex(2, &fbsql_result_index, &field_index)==FAILURE) {
- RETURN_FALSE;
- }
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
- ZEND_FETCH_RESOURCE(result, PHPFBResult *, fbsql_result_index, -1, "FrontBase-Result", le_result);
-
- column = result->columnIndex;
- if (field_index)
- {
- convert_to_long_ex(field_index);
- column = Z_LVAL_PP(field_index);
- if (column < 0 || column >= result->columnCount)
- {
- if (FB_SQL_G(generateWarnings))
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "%d no such column in result", column);
- RETURN_FALSE;
- }
- }
- if (result->list)
- {
- phpfbSqlResult(INTERNAL_FUNCTION_PARAM_PASSTHRU, result, result->rowIndex, 1);
- }
- else if (result->metaData)
- {
- RETURN_STRING((char *)fbcdmdDatatypeString (fbcmdDatatypeMetaDataAtIndex(result->metaData, column)), 1);
- }
- else
- {
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-/* {{{ proto string fbsql_field_flags(int result [, int field_index])
- ??? */
-PHP_FUNCTION(fbsql_field_flags)
-{
- PHPFBResult* result = NULL;
- zval **fbsql_result_index = NULL, **field_index = NULL;
- int column = -1;
- char buf[512];
- int len;
-
- switch (ZEND_NUM_ARGS()) {
- case 1:
- if (zend_get_parameters_ex(1, &fbsql_result_index)==FAILURE) {
- RETURN_FALSE;
- }
- break;
- case 2:
- if (zend_get_parameters_ex(2, &fbsql_result_index, &field_index)==FAILURE) {
- RETURN_FALSE;
- }
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
- ZEND_FETCH_RESOURCE(result, PHPFBResult *, fbsql_result_index, -1, "FrontBase-Result", le_result);
-
- column = result->columnIndex;
- if (field_index)
- {
- convert_to_long_ex(field_index);
- column = Z_LVAL_PP(field_index);
- if (column < 0 || column >= result->columnCount)
- {
- if (FB_SQL_G(generateWarnings))
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "%d no such column in result", column);
- RETURN_FALSE;
- }
- }
- strcpy(buf, "");
- if (!fbccmdIsNullable(fbcmdColumnMetaDataAtIndex(result->metaData, column))) {
- strcat(buf, "not_null ");
- }
-#if 0
- if (IS_PRI_KEY(fbsql_field->flags)) {
- strcat(buf, "primary_key ");
- }
- if (fbsql_field->flags&UNIQUE_KEY_FLAG) {
- strcat(buf, "unique_key ");
- }
- if (fbsql_field->flags&MULTIPLE_KEY_FLAG) {
- strcat(buf, "multiple_key ");
- }
- if (IS_BLOB(fbsql_field->flags)) {
- strcat(buf, "blob ");
- }
- if (fbsql_field->flags&UNSIGNED_FLAG) {
- strcat(buf, "unsigned ");
- }
- if (fbsql_field->flags&ZEROFILL_FLAG) {
- strcat(buf, "zerofill ");
- }
- if (fbsql_field->flags&BINARY_FLAG) {
- strcat(buf, "binary ");
- }
- if (fbsql_field->flags&ENUM_FLAG) {
- strcat(buf, "enum ");
- }
- if (fbsql_field->flags&AUTO_INCREMENT_FLAG) {
- strcat(buf, "auto_increment ");
- }
- if (fbsql_field->flags&TIMESTAMP_FLAG) {
- strcat(buf, "timestamp ");
- }
-#endif
- len = strlen(buf);
- /* remove trailing space, if present */
- if (len && buf[len-1] == ' ') {
- buf[len-1] = 0;
- len--;
- }
- RETURN_STRING(buf, 1);
-}
-/* }}} */
-
-/* {{{ proto string fbsql_table_name(resource result, int index)
- Retreive the table name for index after a call to fbsql_list_tables() */
-PHP_FUNCTION(fbsql_table_name)
-{
- PHPFBResult* result = NULL;
- zval **fbsql_result_index = NULL, **table_index;
- unsigned index;
- char* value;
- unsigned int length;
- void** row;
-
- switch (ZEND_NUM_ARGS()) {
- case 2:
- if (zend_get_parameters_ex(2, &fbsql_result_index, &table_index)==FAILURE) {
- RETURN_FALSE;
- }
- convert_to_long_ex(table_index);
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
- ZEND_FETCH_RESOURCE(result, PHPFBResult *, fbsql_result_index, -1, "FrontBase-Result", le_result);
-
- index = Z_LVAL_PP(table_index);
- if (index < 0)
- {
- if (FB_SQL_G(generateWarnings))
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Illegal index (%i)", index);
- RETURN_FALSE;
- }
-
- if (result->rowCount == 0x7fffffff) phpfbFetchRow(result, index);
- if (index > result->rowCount) RETURN_FALSE;
- result->rowIndex = index;
- result->columnIndex = 0;
-
- row = fbcrhRowAtIndex(result->rowHandler, index);
- phpfbColumnAsString(result, 0, row[0], &length, &value TSRMLS_CC);
- RETURN_STRINGL(value, length, 1);
-}
-/* }}} */
-
-/* {{{ proto bool fbsql_free_result(resource result)
- free the memory used to store a result */
-PHP_FUNCTION(fbsql_free_result)
-{
- PHPFBResult* result = NULL;
- zval **fbsql_result_index = NULL;
-
- switch (ZEND_NUM_ARGS()) {
- case 1:
- if (zend_get_parameters_ex(1, &fbsql_result_index)==FAILURE) {
- RETURN_FALSE;
- }
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
- ZEND_FETCH_RESOURCE(result, PHPFBResult *, fbsql_result_index, -1, "FrontBase-Result", le_result);
-
- zend_list_delete(Z_LVAL_PP(fbsql_result_index));
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto array fbsql_get_autostart_info([resource link_identifier])
- ??? */
-PHP_FUNCTION(fbsql_get_autostart_info)
-{
- PHPFBLink* phpLink = NULL;
- zval **fbsql_link_index = NULL;
- int id;
- FBCAutoStartInfo* asInfo;
-
- switch (ZEND_NUM_ARGS()) {
- case 0:
- id = php_fbsql_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU);
- CHECK_LINK(id);
- break;
- case 1:
- if (zend_get_parameters_ex(1, &fbsql_link_index)==FAILURE) {
- RETURN_FALSE;
- }
- id = -1;
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
- ZEND_FETCH_RESOURCE2(phpLink, PHPFBLink *, fbsql_link_index, id, "FrontBase-Link", le_link, le_plink);
-
- if (phpLink->execHandler == NULL) phpLink->execHandler = fbcehHandlerForHost(phpLink->hostName, 128);
- if (phpLink->execHandler == NULL) {
- if (FB_SQL_G(generateWarnings))
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "No valid Exec handler available for this connection");
- RETURN_FALSE;
- }
- else {
- array_init(return_value);
- asInfo = fbcehGetAutoStartInfo(phpLink->execHandler);
- if (asInfo != NULL) {
- unsigned i;
-
- for (i=0; i<fbaCount(asInfo->infoLines); i++) {
- FBArray* infoLine = fbaObjectAtIndex(asInfo->infoLines, i);
-/*
- if (fbaCount(infoLine) == 2) {
- fbaObjectAtIndex(infoLine, 0);
- fbaObjectAtIndex(infoLine, 1);
- }
- else {
-*/
- add_index_string(return_value, i, fbaObjectAtIndex(infoLine, 0), 1);
-/* }
- */
-
- }
- }
- }
-}
-/* }}} */
-
-
-#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/fbsql/php_fbsql.h b/ext/fbsql/php_fbsql.h
deleted file mode 100644
index 7c23727c5b..0000000000
--- a/ext/fbsql/php_fbsql.h
+++ /dev/null
@@ -1,147 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Frank M. Kromann <frank@kromann.info> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-#define HAVE_FBSQL 1
-
-#ifndef _PHP_FBSQL_H
-#define _PHP_FBSQL_H
-
-#if COMPILE_DL_FBSQL
-#undef HAVE_FBSQL
-#define HAVE_FBSQL 1
-#endif
-#if HAVE_FBSQL
-
-extern zend_module_entry fbsql_module_entry;
-#define fbsql_module_ptr &fbsql_module_entry
-
-#include <FBCAccess/FBCAccess.h>
-
-PHP_MINIT_FUNCTION(fbsql);
-PHP_MSHUTDOWN_FUNCTION(fbsql);
-PHP_RINIT_FUNCTION(fbsql);
-PHP_RSHUTDOWN_FUNCTION(fbsql);
-PHP_MINFO_FUNCTION(fbsql);
-PHP_FUNCTION(fbsql_connect);
-PHP_FUNCTION(fbsql_pconnect);
-PHP_FUNCTION(fbsql_close);
-PHP_FUNCTION(fbsql_select_db);
-PHP_FUNCTION(fbsql_change_user);
-PHP_FUNCTION(fbsql_create_db);
-PHP_FUNCTION(fbsql_drop_db);
-PHP_FUNCTION(fbsql_start_db);
-PHP_FUNCTION(fbsql_stop_db);
-PHP_FUNCTION(fbsql_db_status);
-PHP_FUNCTION(fbsql_query);
-PHP_FUNCTION(fbsql_db_query);
-PHP_FUNCTION(fbsql_list_dbs);
-PHP_FUNCTION(fbsql_list_tables);
-PHP_FUNCTION(fbsql_list_fields);
-PHP_FUNCTION(fbsql_error);
-PHP_FUNCTION(fbsql_errno);
-PHP_FUNCTION(fbsql_affected_rows);
-PHP_FUNCTION(fbsql_rows_fetched);
-PHP_FUNCTION(fbsql_insert_id);
-PHP_FUNCTION(fbsql_result);
-PHP_FUNCTION(fbsql_next_result);
-PHP_FUNCTION(fbsql_num_rows);
-PHP_FUNCTION(fbsql_num_fields);
-PHP_FUNCTION(fbsql_fetch_row);
-PHP_FUNCTION(fbsql_fetch_array);
-PHP_FUNCTION(fbsql_fetch_assoc);
-PHP_FUNCTION(fbsql_fetch_object);
-PHP_FUNCTION(fbsql_data_seek);
-PHP_FUNCTION(fbsql_fetch_lengths);
-PHP_FUNCTION(fbsql_fetch_field);
-PHP_FUNCTION(fbsql_field_seek);
-PHP_FUNCTION(fbsql_free_result);
-PHP_FUNCTION(fbsql_field_name);
-PHP_FUNCTION(fbsql_field_table);
-PHP_FUNCTION(fbsql_field_len);
-PHP_FUNCTION(fbsql_field_type);
-PHP_FUNCTION(fbsql_field_flags);
-PHP_FUNCTION(fbsql_table_name);
-
-PHP_FUNCTION(fbsql_set_transaction);
-PHP_FUNCTION(fbsql_autocommit);
-PHP_FUNCTION(fbsql_commit);
-PHP_FUNCTION(fbsql_rollback);
-
-PHP_FUNCTION(fbsql_create_blob);
-PHP_FUNCTION(fbsql_create_clob);
-PHP_FUNCTION(fbsql_set_lob_mode);
-PHP_FUNCTION(fbsql_read_blob);
-PHP_FUNCTION(fbsql_read_clob);
-PHP_FUNCTION(fbsql_blob_size);
-PHP_FUNCTION(fbsql_clob_size);
-
-PHP_FUNCTION(fbsql_hostname);
-PHP_FUNCTION(fbsql_database);
-PHP_FUNCTION(fbsql_database_password);
-PHP_FUNCTION(fbsql_username);
-PHP_FUNCTION(fbsql_password);
-PHP_FUNCTION(fbsql_warnings);
-PHP_FUNCTION(fbsql_set_password);
-
-PHP_FUNCTION(fbsql_get_autostart_info);
-/* PHP_FUNCTION(fbsql_set_autostart_info); */
-
-static void php_fbsql_fetch_hash(INTERNAL_FUNCTION_PARAMETERS, int result_type, int expected_args);
-static void php_fbsql_do_connect(INTERNAL_FUNCTION_PARAMETERS, int persistent);
-
-ZEND_BEGIN_MODULE_GLOBALS(fbsql)
- zend_bool allowPersistent;
- zend_bool generateWarnings;
- zend_bool autoCommit;
- long maxPersistent;
- long maxLinks;
- long maxConnections;
- long maxResults;
- long batchSize;
- char *hostName;
- char *databaseName;
- char *databasePassword;
- char *userName;
- char *userPassword;
- long persistentCount;
- long linkCount;
- long linkIndex;
-
-ZEND_END_MODULE_GLOBALS(fbsql)
-
-#ifdef ZTS
-# define FB_SQL_G(v) TSRMG(fbsql_globals_id, zend_fbsql_globals *, v)
-#else
-# define FB_SQL_G(v) (fbsql_globals.v)
-#endif
-
-/*#ifndef ZTS /* No need for external definitions */
-/*extern fbsql_module* phpfbModule; */
-/*#endif */
-
-#else /* HAVE_FBSQL */
-
-#define fbsql_module_ptr NULL
-#error not ok
-#endif /* HAVE_FBSQL */
-
-#define phpext_fbsql_ptr fbsql_module_ptr
-
-#endif /* _PHP_FBSQL_H */
diff --git a/ext/fdf/CREDITS b/ext/fdf/CREDITS
deleted file mode 100644
index 57c33cc4b3..0000000000
--- a/ext/fdf/CREDITS
+++ /dev/null
@@ -1,2 +0,0 @@
-FDF
-Uwe Steinmann
diff --git a/ext/fdf/config.m4 b/ext/fdf/config.m4
deleted file mode 100644
index ada0f80e95..0000000000
--- a/ext/fdf/config.m4
+++ /dev/null
@@ -1,73 +0,0 @@
-dnl
-dnl $Id$
-dnl
-
-PHP_ARG_WITH(fdftk, for FDF support,
-[ --with-fdftk[=DIR] Include FDF support.])
-
-if test "$PHP_FDFTK" != "no"; then
-
- case $host_os in
- aix*[)]
- libtype=aix
- ;;
- solaris*[)]
- libtype=solaris
- ;;
- linux*[)]
- libtype=linux
- ;;
- *[)]
- AC_MSG_ERROR([The fdf toolkit is not available for $host_os.])
- ;;
- esac
-
- if test "$PHP_FDFTK" = "yes"; then
- PHP_FDFTK="/usr/local /usr ../FDFToolkitForUNIX ext/fdf/FDFToolkitForUNIX ../fdftk ext/fdf/fdftk"
- fi
-
- for dir in $PHP_FDFTK; do
- for subdir in include HeadersAndLibraries/headers; do
- if test -r $dir/$subdir/FdfTk.h; then
- FDFTK_DIR=$dir
- FDFTK_H_DIR=$dir/$subdir
- break 2
- elif test -r $dir/$subdir/fdftk.h; then
- AC_DEFINE(HAVE_FDFTK_H_LOWER,1,[ ])
- FDFTK_DIR=$dir
- FDFTK_H_DIR=$dir/$subdir
- break 2
- fi
- done
- done
-
- if test -z "$FDFTK_DIR"; then
- AC_MSG_ERROR([FdfTk.h or fdftk.h not found. Please reinstall the fdf toolkit.])
- fi
-
- PHP_ADD_INCLUDE($FDFTK_H_DIR)
-
- FDFLIBRARY=""
- for file in fdftk FdfTk; do
- for dir in $FDFTK_DIR/lib $FDFTK_DIR/HeadersAndLibraries/$libtype/C; do
- if test -r $dir/lib$file.so; then
- PHP_CHECK_LIBRARY($file, FDFOpen, [FDFLIBRARY=$file], [], [-L$dir -lm])
- if test "$FDFLIBRARY"; then
- PHP_CHECK_LIBRARY($file, FDFGetFDFVersion, [AC_DEFINE(HAVE_FDFTK_5,1,[ ])], [], [-L$dir -lm])
- FDFTK_LIB_DIR=$dir
- break 2
- fi
- fi
- done
- done
-
- if test -z "$FDFLIBRARY"; then
- AC_MSG_ERROR(no usable fdf library found)
- fi
-
- PHP_ADD_LIBRARY_WITH_PATH($FDFLIBRARY, $FDFTK_LIB_DIR, FDF_SHARED_LIBADD)
-
- PHP_NEW_EXTENSION(fdf, fdf.c, $ext_shared)
- PHP_SUBST(FDF_SHARED_LIBADD)
- AC_DEFINE(HAVE_FDFLIB,1,[ ])
-fi
diff --git a/ext/fdf/config.w32 b/ext/fdf/config.w32
deleted file mode 100644
index befad2b816..0000000000
--- a/ext/fdf/config.w32
+++ /dev/null
@@ -1,15 +0,0 @@
-// $Id$
-// vim:ft=javascript
-
-ARG_WITH("fdf", "Include FDF support.", "no");
-
-if (PHP_FDF != "no") {
- if (CHECK_LIB("fdftk.lib", "fdf", PHP_FDF) &&
- CHECK_HEADER_ADD_INCLUDE("FdfTk.h", "CFLAGS_FDF")) {
- EXTENSION("fdf", "fdf.c");
- AC_DEFINE('HAVE_FDFLIB', 1, 'FDF support');
- ADD_FLAG("CFLAGS_FDF", "/D HAVE_FDFTK_5");
- } else {
- WARNING("fdf not enabled; libraries and headers not found");
- }
-}
diff --git a/ext/fdf/fdf.c b/ext/fdf/fdf.c
deleted file mode 100644
index e3568b199a..0000000000
--- a/ext/fdf/fdf.c
+++ /dev/null
@@ -1,1628 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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. |
- +----------------------------------------------------------------------+
- | Authors: Uwe Steinmann <Uwe.Steinmann@fernuni-hagen.de> |
- | Hartmut Holzgraefe <hholzgra@php.net> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-/* FdfTk lib 2.0 is a Complete C/C++ FDF Toolkit available from
- http://beta1.adobe.com/ada/acrosdk/forms.html. */
-
-/* Note that there is no code from the FdfTk lib in this file */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "php.h"
-#include "php_open_temporary_file.h"
-
-#if HAVE_FDFLIB
-
-#include "SAPI.h"
-#include "ext/standard/info.h"
-#include "php_open_temporary_file.h"
-#include "php_variables.h"
-#include "php_fdf.h"
-
-#ifndef S_ISDIR
-#define S_ISDIR(m) (((m) & _S_IFDIR) == _S_IFDIR)
-#endif
-
-static int le_fdf;
-
-SAPI_POST_HANDLER_FUNC(fdf_post_handler);
-
-/* {{{ fdf_functions[]
- */
-function_entry fdf_functions[] = {
- PHP_FE(fdf_add_template, NULL)
- PHP_FE(fdf_close, NULL)
- PHP_FE(fdf_create, NULL)
- PHP_FE(fdf_enum_values, NULL)
- PHP_FE(fdf_errno, NULL)
- PHP_FE(fdf_error, NULL)
- PHP_FE(fdf_get_ap, NULL)
- PHP_FE(fdf_get_encoding, NULL)
- PHP_FE(fdf_get_file, NULL)
- PHP_FE(fdf_get_flags, NULL)
- PHP_FE(fdf_get_opt, NULL)
- PHP_FE(fdf_get_status, NULL)
- PHP_FE(fdf_get_value, NULL)
- PHP_FE(fdf_get_version, NULL)
- PHP_FE(fdf_next_field_name, NULL)
- PHP_FE(fdf_open, NULL)
- PHP_FE(fdf_open_string, NULL)
- PHP_FE(fdf_remove_item, NULL)
- PHP_FE(fdf_save, NULL)
- PHP_FE(fdf_save_string, NULL)
- PHP_FE(fdf_set_ap, NULL)
- PHP_FE(fdf_set_encoding, NULL)
- PHP_FE(fdf_set_file, NULL)
- PHP_FE(fdf_set_flags, NULL)
- PHP_FE(fdf_set_javascript_action, NULL)
- PHP_FE(fdf_set_opt, NULL)
- PHP_FE(fdf_set_status, NULL)
- PHP_FE(fdf_set_submit_form_action, NULL)
- PHP_FE(fdf_set_value, NULL)
- PHP_FE(fdf_header, NULL)
-#ifdef HAVE_FDFTK_5
- PHP_FE(fdf_add_doc_javascript, NULL)
- PHP_FE(fdf_get_attachment, NULL)
- PHP_FE(fdf_set_on_import_javascript, NULL)
- PHP_FE(fdf_set_target_frame, NULL)
- PHP_FE(fdf_set_version, NULL)
-#endif
- {NULL, NULL, NULL}
-};
-/* }}} */
-
-zend_module_entry fdf_module_entry = {
- STANDARD_MODULE_HEADER,
- "fdf",
- fdf_functions,
- PHP_MINIT(fdf),
- PHP_MSHUTDOWN(fdf),
- PHP_RINIT(fdf),
- NULL,
- PHP_MINFO(fdf),
- NO_VERSION_YET,
- STANDARD_MODULE_PROPERTIES
-};
-
-#ifdef COMPILE_DL_FDF
-ZEND_GET_MODULE(fdf)
-#endif
-
-ZEND_DECLARE_MODULE_GLOBALS(fdf)
-
-#define FDF_SUCCESS do { FDF_G(error)=FDFErcOK; RETURN_TRUE;} while(0)
-#define FDF_FAILURE(err) do { FDF_G(error)=err; RETURN_FALSE;} while(0)
-
-static void phpi_FDFClose(zend_rsrc_list_entry *rsrc TSRMLS_DC)
-{
- FDFDoc fdf = (FDFDoc)rsrc->ptr;
-
- (void) FDFClose(fdf);
-}
-
-#define FDF_POST_CONTENT_TYPE "application/vnd.fdf"
-
-static sapi_post_entry php_fdf_post_entry = {
- FDF_POST_CONTENT_TYPE,
- sizeof(FDF_POST_CONTENT_TYPE)-1,
- sapi_read_standard_form_data,
- fdf_post_handler
-};
-
-static void php_fdf_init_globals(zend_fdf_globals *fdf_globals)
-{
- memset(fdf_globals, 0, sizeof(*fdf_globals));
-}
-
-
-
-/* {{{ PHP_MINIT_FUNCTION
- */
-PHP_MINIT_FUNCTION(fdf)
-{
- ZEND_INIT_MODULE_GLOBALS(fdf, php_fdf_init_globals, NULL);
-
- le_fdf = zend_register_list_destructors_ex(phpi_FDFClose, NULL, "fdf", module_number);
-
- /* add handler for Acrobat FDF form post requests */
- sapi_register_post_entry(&php_fdf_post_entry);
-
-
- /* Constants used by fdf_set_opt() */
- REGISTER_LONG_CONSTANT("FDFValue", FDFValue, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("FDFStatus", FDFStatus, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("FDFFile", FDFFile, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("FDFID", FDFID, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("FDFFf", FDFFf, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("FDFSetFf", FDFSetFf, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("FDFClearFf", FDFClearFf, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("FDFFlags", FDFFlags, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("FDFSetF", FDFSetF, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("FDFClrF", FDFClrF, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("FDFAP", FDFAP, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("FDFAS", FDFAS, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("FDFAction", FDFAction, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("FDFAA", FDFAA, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("FDFAPRef", FDFAPRef, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("FDFIF", FDFIF, CONST_CS | CONST_PERSISTENT);
-
- /* Constants used by fdf_set_javascript_action() */
- REGISTER_LONG_CONSTANT("FDFEnter", FDFEnter, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("FDFExit", FDFExit, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("FDFDown", FDFDown, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("FDFUp", FDFUp, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("FDFFormat", FDFFormat, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("FDFValidate", FDFValidate, CONST_CS | CONST_PERSISTENT);
-
- REGISTER_LONG_CONSTANT("FDFKeystroke", FDFKeystroke, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("FDFCalculate", FDFCalculate, CONST_CS | CONST_PERSISTENT);
-
- /* Constants used by fdf_(set|get)_ap */
- REGISTER_LONG_CONSTANT("FDFNormalAP", 1, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("FDFRolloverAP", 2, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("FDFDownAP", 3, CONST_CS | CONST_PERSISTENT);
-
-#ifdef PHP_WIN32
- return SUCCESS;
-#else
- return (FDFInitialize() == FDFErcOK) ? SUCCESS : FAILURE;
-#endif
-}
-/* }}} */
-
-/* {{{ RINIT */
-PHP_RINIT_FUNCTION(fdf)
-{
- FDF_G(error) = FDFErcOK;
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ PHP_MINFO_FUNCTION
- */
-PHP_MINFO_FUNCTION(fdf)
-{
- /* need to use a PHPAPI function here because it is external module in windows */
- php_info_print_table_start();
- php_info_print_table_row(2, "FDF Support", "enabled");
- php_info_print_table_row(2, "FdfTk Version", FDFGetVersion() );
- php_info_print_table_end();
-}
-/* }}} */
-
-/* {{{ PHP_MSHUTDOWN_FUNCTION
- */
-PHP_MSHUTDOWN_FUNCTION(fdf)
-{
- /* remove handler for Acrobat FDF form post requests */
- sapi_unregister_post_entry(&php_fdf_post_entry);
-
-#ifdef PHP_WIN32
- return SUCCESS;
-#else
- return (FDFFinalize() == FDFErcOK) ? SUCCESS : FAILURE;
-#endif
-}
-/* }}} */
-
-/* {{{ proto resource fdf_open(string filename)
- Opens a new FDF document */
-PHP_FUNCTION(fdf_open)
-{
- zval **file;
- FDFDoc fdf;
- FDFErc err;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &file) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_string_ex(file);
-
- if (php_check_open_basedir(Z_STRVAL_PP(file) TSRMLS_CC) || (PG(safe_mode) && !php_checkuid(Z_STRVAL_PP(file), "wb+", CHECKUID_CHECK_MODE_PARAM))) {
- RETURN_FALSE;
- }
-
- err = FDFOpen(Z_STRVAL_PP(file), 0, &fdf);
-
- if(err != FDFErcOK || !fdf) {
- if(err == FDFErcOK) err= FDFErcInternalError;
- FDF_FAILURE(err);
- }
-
- ZEND_REGISTER_RESOURCE(return_value, fdf, le_fdf);
-}
-/* }}} */
-
-/* {{{ proto resource fdf_open_string(string fdf_data)
- Opens a new FDF document from string */
-PHP_FUNCTION(fdf_open_string)
-{
- char *fdf_data;
- int fdf_data_len;
- FDFDoc fdf;
- FDFErc err;
- char *temp_filename;
- FILE *fp;
-
- if(zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s",
- &fdf_data, &fdf_data_len)
- == FAILURE) {
- return;
- }
-
- fp = php_open_temporary_file(PG(upload_tmp_dir), "php", &temp_filename TSRMLS_CC);
- if(!fp) {
- RETURN_FALSE;
- }
- fwrite(fdf_data, fdf_data_len, 1, fp);
- fclose(fp);
-
- err = FDFOpen(temp_filename, 0, &fdf);
- unlink(temp_filename);
- efree(temp_filename);
-
- if(err != FDFErcOK || !fdf) {
- if(err == FDFErcOK) err= FDFErcInternalError;
- FDF_FAILURE(err);
- }
-
- ZEND_REGISTER_RESOURCE(return_value, fdf, le_fdf);
-}
-/* }}} */
-
-/* {{{ proto resource fdf_create(void)
- Creates a new FDF document */
-PHP_FUNCTION(fdf_create)
-{
- FDFDoc fdf;
- FDFErc err;
-
- if (ZEND_NUM_ARGS() != 0) {
- WRONG_PARAM_COUNT;
- }
-
- err = FDFCreate(&fdf);
-
- if(err != FDFErcOK || !fdf) {
- if(err == FDFErcOK) err= FDFErcInternalError;
- FDF_FAILURE(err);
- }
-
- ZEND_REGISTER_RESOURCE(return_value, fdf, le_fdf);
-}
-/* }}} */
-
-/* {{{ proto void fdf_close(resource fdfdoc)
- Closes the FDF document */
-PHP_FUNCTION(fdf_close)
-{
- zval **fdfp;
- FDFDoc fdf;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &fdfp) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(fdf, FDFDoc *, fdfp, -1, "fdf", le_fdf);
- zend_list_delete(Z_RESVAL_PP(fdfp));
-}
-/* }}} */
-
-/* {{{ proto string fdf_get_value(resource fdfdoc, string fieldname [, int which])
- Gets the value of a field as string */
-PHP_FUNCTION(fdf_get_value)
-{
- zval *r_fdf;
- char *fieldname;
- int fieldname_len;
- long which = -1;
- FDFDoc fdf;
- FDFErc err;
- ASInt32 nr, size = 256;
- char *buffer;
-
- if(zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rs|l",
- &r_fdf, &fieldname, &fieldname_len,
- &which)
- == FAILURE) {
- return;
- }
-
- ZEND_FETCH_RESOURCE(fdf, FDFDoc *, &r_fdf, -1, "fdf", le_fdf);
-
- buffer = emalloc(size);
- if(which >= 0) {
-#if HAVE_FDFTK_5
- err = FDFGetNthValue(fdf, fieldname, which, buffer, size-2, &nr);
-#else
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "the optional 'which' parameter requires FDF toolkit 5.0 or above, it will be ignored for now");
- which = -1;
-#endif
- } else {
- err = FDFGetValue(fdf, fieldname, buffer, size-2, &nr);
- }
- if(err == FDFErcBufTooShort && nr > 0 ) {
- buffer = erealloc(buffer, nr+2);
- if(which >= 0) {
-#if HAVE_FDFTK_5
- err = FDFGetNthValue(fdf, fieldname, which, buffer, nr, &nr);
-#endif
- } else {
- err = FDFGetValue(fdf, fieldname, buffer, nr, &nr);
- }
-#if HAVE_FDFTK_5
- } else if((err == FDFErcValueIsArray) && (which == -1)) {
- array_init(return_value);
- which = 0;
- do {
- err = FDFGetNthValue(fdf, fieldname, which, buffer, size-2, &nr);
- if(err == FDFErcBufTooShort && nr > 0 ) {
- buffer = erealloc(buffer, nr+2);
- err = FDFGetNthValue(fdf, fieldname, which, buffer, nr, &nr);
- }
- if (err == FDFErcOK) {
- add_next_index_string(return_value, buffer, 1);
- }
- which++;
- } while (err == FDFErcOK);
- efree(buffer);
- buffer = NULL;
-#endif
- }
-
- if((err != FDFErcOK) && (err != FDFErcNoValue)) {
- if(buffer) efree(buffer);
- FDF_FAILURE(err);
- }
-
- if(buffer) {
- RETVAL_STRING(buffer, 1);
- efree(buffer);
- }
-
- return;
-}
-/* }}} */
-
-/* {{{ proto bool fdf_set_value(resource fdfdoc, string fieldname, mixed value [, int isname])
- Sets the value of a field */
-PHP_FUNCTION(fdf_set_value)
-{
- zval **fdfp, **fieldname, **value, **dummy;
- FDFDoc fdf;
- FDFErc err;
-
- switch(ZEND_NUM_ARGS()) {
- case 3:
- if (zend_get_parameters_ex(3, &fdfp, &fieldname, &value) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- break;
- case 4:
- if (zend_get_parameters_ex(4, &fdfp, &fieldname, &value, &dummy) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- break;
- default:
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(fdf, FDFDoc *, fdfp, -1, "fdf", le_fdf);
-
- convert_to_string_ex(fieldname);
-
- if (Z_TYPE_PP(value) == IS_ARRAY) {
-#ifdef HAVE_FDFTK_5
- ASInt32 nValues = zend_hash_num_elements(Z_ARRVAL_PP(value));
- char **newValues = ecalloc(nValues, sizeof(char *)), **next;
- HashPosition pos;
- zval **tmp;
-
- next = newValues;
- zend_hash_internal_pointer_reset_ex(Z_ARRVAL_PP(value), &pos);
- while (zend_hash_get_current_data_ex(Z_ARRVAL_PP(value),
- (void **) &tmp,
- &pos) == SUCCESS) {
- convert_to_string_ex(tmp);
- *next++ = estrdup(Z_STRVAL_PP(tmp));
- zend_hash_move_forward_ex(Z_ARRVAL_PP(value), &pos);
- }
-
- err = FDFSetValues(fdf, Z_STRVAL_PP(fieldname), nValues, (const char **)newValues);
-
- for(next = newValues; nValues; nValues--) {
- efree(*next++);
- }
- efree(newValues);
-#else
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "setting array values is only possible with FDF toolkit 5.0 and above");
- RETURN_FALSE;
-#endif
- } else {
- convert_to_string_ex(value);
-
- err = FDFSetValue(fdf, Z_STRVAL_PP(fieldname), Z_STRVAL_PP(value), (ASBool)0 /*dummy*/);
- }
- if(err != FDFErcOK) {
- FDF_FAILURE(err);
- }
- FDF_SUCCESS;
-}
-/* }}} */
-
-/* {{{ proto string fdf_next_field_name(resource fdfdoc [, string fieldname])
- Gets the name of the next field name or the first field name */
-PHP_FUNCTION(fdf_next_field_name)
-{
- zval **fdfp, **field;
- int argc=ZEND_NUM_ARGS();
- ASInt32 length=256, nr;
- char *buffer=NULL, *fieldname=NULL;
- FDFDoc fdf;
- FDFErc err;
-
- if (argc > 2 || argc < 1 || zend_get_parameters_ex(argc, &fdfp, &field) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(fdf, FDFDoc *, fdfp, -1, "fdf", le_fdf);
-
- if(argc == 2) {
- convert_to_string_ex(field);
- fieldname = Z_STRVAL_PP(field);
- }
-
- buffer = emalloc(length);
- err = FDFNextFieldName(fdf, fieldname, buffer, length-1, &nr);
-
- if(err == FDFErcBufTooShort && nr > 0 ) {
- buffer = erealloc(buffer, nr+1);
- err = FDFNextFieldName(fdf, fieldname, buffer, length-1, &nr);
- }
-
- if(err != FDFErcOK) {
- efree(buffer);
- FDF_FAILURE(err);
- }
-
- RETVAL_STRING(buffer, 1);
- efree(buffer);
-}
-/* }}} */
-
-/* {{{ proto bool fdf_set_ap(resource fdfdoc, string fieldname, int face, string filename, int pagenr)
- Sets the appearence of a field */
-PHP_FUNCTION(fdf_set_ap)
-{
- zval **fdfp, **fieldname, **face, **filename, **pagenr;
- FDFDoc fdf;
- FDFErc err;
- FDFAppFace facenr;
-
- if (ZEND_NUM_ARGS() != 5 || zend_get_parameters_ex(5, &fdfp, &fieldname, &face, &filename, &pagenr) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(fdf, FDFDoc *, fdfp, -1, "fdf", le_fdf);
-
- convert_to_string_ex(fieldname);
- convert_to_long_ex(face);
- convert_to_string_ex(filename);
-
- if (php_check_open_basedir(Z_STRVAL_PP(filename) TSRMLS_CC) || (PG(safe_mode) && !php_checkuid(Z_STRVAL_PP(filename), "wb+", CHECKUID_CHECK_MODE_PARAM))) {
- RETURN_FALSE;
- }
-
- convert_to_long_ex(pagenr);
-
- switch(Z_LVAL_PP(face)) {
- case 1:
- facenr = FDFNormalAP;
- break;
- case 2:
- facenr = FDFRolloverAP;
- break;
- case 3:
- facenr = FDFDownAP;
- break;
- default:
- facenr = FDFNormalAP;
- break;
- }
-
- err = FDFSetAP(fdf, Z_STRVAL_PP(fieldname), facenr, NULL, Z_STRVAL_PP(filename), (ASInt32) Z_LVAL_PP(pagenr));
-
- /* This should be made more intelligent, ie. use switch() with the
- possible errors this function can return. Or create global error handler function.
- */
- if(err != FDFErcOK) {
- FDF_FAILURE(err);
- }
-
- FDF_SUCCESS;
-
-}
-/* }}} */
-
-/* {{{ proto bool fdf_get_ap(resource fdfdoc, string fieldname, int face, string filename)
- Gets the appearance of a field and creates a PDF document out of it. */
-PHP_FUNCTION(fdf_get_ap) {
- zval *r_fdf;
- char *fieldname, *filename;
- int fieldname_len, filename_len;
- long face;
- FDFDoc fdf;
- FDFErc err;
- FDFAppFace facenr;
-
- if(zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rsls",
- &r_fdf, &fieldname, &fieldname_len,
- &face, &filename, &filename_len)
- == FAILURE) {
- return;
- }
-
- ZEND_FETCH_RESOURCE(fdf, FDFDoc *, &r_fdf, -1, "fdf", le_fdf);
-
- if (php_check_open_basedir(filename TSRMLS_CC) || (PG(safe_mode) && !php_checkuid(filename, "wb+", CHECKUID_CHECK_MODE_PARAM))) {
- RETURN_FALSE;
- }
-
- switch(face) {
- case 1:
- facenr = FDFNormalAP;
- break;
- case 2:
- facenr = FDFRolloverAP;
- break;
- case 3:
- facenr = FDFDownAP;
- break;
- default:
- facenr = FDFNormalAP;
- break;
- }
-
- err = FDFGetAP(fdf, fieldname, facenr, filename);
-
- /* This should be made more intelligent, ie. use switch() with the
- possible errors this function can return. Or create global error handler function.
- */
- if(err != FDFErcOK) {
- FDF_FAILURE(err);
- }
-
- FDF_SUCCESS;
-
-
-}
-/* }}} */
-
-/* {{{ proto string fdf_get_encoding(resource fdf)
- Gets FDF file encoding scheme */
-PHP_FUNCTION(fdf_get_encoding) {
- zval *r_fdf;
- FDFDoc fdf;
- FDFErc err;
- char buffer[32];
- ASInt32 len;
-
- if(zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r",
- &r_fdf) == FAILURE) {
- return;
- }
-
- ZEND_FETCH_RESOURCE(fdf, FDFDoc *, &r_fdf, -1, "fdf", le_fdf);
-
- err = FDFGetEncoding(fdf, buffer, 32, &len);
-
- /* This should be made more intelligent, ie. use switch() with the
- possible errors this function can return. Or create global error handler function.
- */
- if(err != FDFErcOK) {
- FDF_FAILURE(err);
- }
-
- FDF_G(error) = FDFErcOK;
- RETURN_STRINGL(buffer, (size_t)len, 1);
-}
-/* }}} */
-
-/* {{{ proto bool fdf_set_status(resource fdfdoc, string status)
- Sets the value of /Status key */
-PHP_FUNCTION(fdf_set_status)
-{
- zval **fdfp, **status;
- FDFDoc fdf;
- FDFErc err;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &fdfp, &status) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(fdf, FDFDoc *, fdfp, -1, "fdf", le_fdf);
-
- convert_to_string_ex(status);
-
- err = FDFSetStatus(fdf, Z_STRVAL_PP(status));
- if(err != FDFErcOK) {
- FDF_FAILURE(err);
- }
-
- FDF_SUCCESS;
-}
-/* }}} */
-
-/* {{{ proto string fdf_get_status(resource fdfdoc)
- Gets the value of /Status key */
-PHP_FUNCTION(fdf_get_status)
-{
- zval **fdfp;
- ASInt32 nr, size = 256;
- char *buf;
- FDFDoc fdf;
- FDFErc err;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &fdfp) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(fdf, FDFDoc *, fdfp, -1, "fdf", le_fdf);
-
- buf = emalloc(size);
- err = FDFGetStatus(fdf, buf, size-1, &nr);
-
- if(err == FDFErcBufTooShort && nr > 0 ) {
- buf = erealloc(buf, nr+1);
- err = FDFGetStatus(fdf, buf, size-1, &nr);
- }
-
- if(err != FDFErcOK) {
- efree(buf);
- FDF_FAILURE(err);
- }
-
- RETVAL_STRING(buf, 1);
- efree(buf);
-}
-/* }}} */
-
-/* {{{ proto bool fdf_set_file(resource fdfdoc, string filename [, string target_frame])
- Sets the value of /F key */
-PHP_FUNCTION(fdf_set_file)
-{
- zval *r_fdf;
- char *filename, *target_frame= NULL;
- int filename_len, target_frame_len;
- FDFDoc fdf;
- FDFErc err;
-
- if(zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rs|s", &r_fdf,
- &filename, &filename_len,
- &target_frame, &target_frame_len)
- == FAILURE) {
- return;
- }
-
- if (php_check_open_basedir(filename TSRMLS_CC) || (PG(safe_mode) && !php_checkuid(filename, "wb+", CHECKUID_CHECK_MODE_PARAM))) {
- RETURN_FALSE;
- }
-
- ZEND_FETCH_RESOURCE(fdf, FDFDoc *, &r_fdf, -1, "fdf", le_fdf);
-
- err = FDFSetFile(fdf, filename);
- if(err != FDFErcOK) {
- FDF_FAILURE(err);
- }
- if(target_frame) {
-#ifdef HAVE_FDFTK_5
- err = FDFSetTargetFrame(fdf, target_frame);
- if(err != FDFErcOK) {
- FDF_FAILURE(err);
- }
-#else
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "setting the target frame is only possible with FDF toolkit 5.0 and above, ignoring it for now");
-#endif
- }
-
- FDF_SUCCESS;
-}
-/* }}} */
-
-/* {{{ proto string fdf_get_file(resource fdfdoc)
- Gets the value of /F key */
-PHP_FUNCTION(fdf_get_file)
-{
- zval **fdfp;
- ASInt32 nr, size = 256;
- char *buf;
- FDFDoc fdf;
- FDFErc err;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &fdfp) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(fdf, FDFDoc *, fdfp, -1, "fdf", le_fdf);
-
- buf = emalloc(size);
- err = FDFGetFile(fdf, buf, size-1, &nr);
-
- if(err == FDFErcBufTooShort && nr > 0 ) {
- buf = erealloc(buf, nr+1);
- err = FDFGetFile(fdf, buf, size-1, &nr);
- }
-
- if(err != FDFErcOK) {
- efree(buf);
- FDF_FAILURE(err);
- }
-
- RETVAL_STRING(buf, 1);
- efree(buf);
-}
-/* }}} */
-
-/* {{{ proto bool fdf_save(resource fdfdoc [, string filename])
- Writes out the FDF file */
-PHP_FUNCTION(fdf_save)
-{
- zval *r_fdf;
- char *filename = NULL;
- int filename_len;
- FDFDoc fdf;
- FDFErc err;
-
- if(zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r|s", &r_fdf, &filename, &filename_len)
- == FAILURE) {
- return;
- }
-
- ZEND_FETCH_RESOURCE(fdf, FDFDoc *, &r_fdf, -1, "fdf", le_fdf);
-
- if(filename) {
- if (php_check_open_basedir(filename TSRMLS_CC) || (PG(safe_mode) && !php_checkuid(filename, "wb+", CHECKUID_CHECK_MODE_PARAM))) {
- RETURN_FALSE;
- }
- err = FDFSave(fdf, filename);
- } else {
- FILE *fp;
- char *temp_filename;
-
- fp = php_open_temporary_file(PG(upload_tmp_dir), "php", &temp_filename TSRMLS_CC);
- if(!fp) {
- err = FDFErcFileSysErr;
- } else {
- fclose(fp);
- err = FDFSave(fdf, temp_filename);
-
- if(err == FDFErcOK) {
- php_stream *stream = php_stream_open_wrapper(temp_filename, "rb", 0, NULL);
- if (stream) {
- php_stream_passthru(stream);
- php_stream_close(stream);
- } else {
- err = FDFErcFileSysErr;
- }
- }
- }
- if(temp_filename) {
- unlink(temp_filename);
- efree(temp_filename);
- }
- }
-
- if(err != FDFErcOK) {
- FDF_FAILURE(err);
- }
-
- FDF_SUCCESS;
-}
-/* }}} */
-
-/* {{{ proto string fdf_save_string(resource fdfdoc)
- Returns the FDF file as a string */
-PHP_FUNCTION(fdf_save_string)
-{
- zval *r_fdf;
- FDFDoc fdf;
- FDFErc err;
- FILE *fp;
- char *temp_filename = NULL;
-
- if(zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &r_fdf)
- == FAILURE) {
- return;
- }
-
- ZEND_FETCH_RESOURCE(fdf, FDFDoc *, &r_fdf, -1, "fdf", le_fdf);
-
- fp = php_open_temporary_file(PG(upload_tmp_dir), "php", &temp_filename TSRMLS_CC);
- if(!fp) {
- err = FDFErcFileSysErr;
- } else {
- fclose(fp);
- err = FDFSave(fdf, temp_filename);
-
- if(err == FDFErcOK) {
- fp = fopen(temp_filename, "rb");
- if (fp) {
- struct stat stat;
- char *buf;
-
- fstat(fileno(fp), &stat);
- buf = emalloc(stat.st_size +1);
- fread(buf, stat.st_size, 1, fp);
- buf[stat.st_size] = '\0';
- fclose(fp);
-
- unlink(temp_filename);
- efree(temp_filename);
- RETURN_STRINGL(buf, stat.st_size, 0);
- } else {
- err = FDFErcFileSysErr;
- }
- }
- }
-
- if(err != FDFErcOK) {
- FDF_FAILURE(err);
- }
-
- if(temp_filename) {
- unlink(temp_filename);
- efree(temp_filename);
- }
-
- return;
-}
-/* }}} */
-
-/* {{{ proto bool fdf_add_template(resource fdfdoc, int newpage, string filename, string template, int rename)
- Adds a template into the FDF document */
-PHP_FUNCTION(fdf_add_template)
-{
- zval **fdfp, **newpage, **filename, **template, **rename;
- FDFDoc fdf;
- FDFErc err;
- pdfFileSpecRec filespec;
-
- if (ZEND_NUM_ARGS() != 5 || zend_get_parameters_ex(5, &fdfp, &newpage, &filename, &template, &rename) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(fdf, FDFDoc *, fdfp, -1, "fdf", le_fdf);
-
- convert_to_long_ex(newpage);
- convert_to_string_ex(filename);
- convert_to_string_ex(template);
- convert_to_long_ex(rename);
-
- if (php_check_open_basedir(Z_STRVAL_PP(filename) TSRMLS_CC) || (PG(safe_mode) && !php_checkuid(Z_STRVAL_PP(filename), "wb+", CHECKUID_CHECK_MODE_PARAM))) {
- RETURN_FALSE;
- }
-
- filespec.FS = NULL;
- filespec.F = Z_STRVAL_PP(filename);
- filespec.Mac = NULL;
- filespec.DOS = NULL;
- filespec.Unix = NULL;
- filespec.ID[0] = NULL;
- filespec.ID[1] = NULL;
- filespec.bVolatile = false;
-
- err = FDFAddTemplate(fdf, (unsigned short)(Z_LVAL_PP(newpage)), &filespec, Z_STRVAL_PP(template), (unsigned short)(Z_LVAL_PP(rename)));
- if(err != FDFErcOK) {
- FDF_FAILURE(err);
- }
-
- FDF_SUCCESS;
-}
-/* }}} */
-
-/* {{{ proto bool fdf_set_flags(resource fdfdoc, string fieldname, int whichflags, int newflags)
- Sets flags for a field in the FDF document */
-PHP_FUNCTION(fdf_set_flags)
-{
- zval **fdfp, **fieldname, **flags, **newflags;
- FDFDoc fdf;
- FDFErc err;
-
- if (ZEND_NUM_ARGS() != 4 || zend_get_parameters_ex(4, &fdfp, &fieldname, &flags, &newflags) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(fdf, FDFDoc *, fdfp, -1, "fdf", le_fdf);
-
- convert_to_string_ex(fieldname);
- convert_to_long_ex(flags);
- convert_to_long_ex(newflags);
-
- err=FDFSetFlags(fdf, Z_STRVAL_PP(fieldname), Z_LVAL_PP(flags), Z_LVAL_PP(newflags));
- if(err != FDFErcOK) {
- FDF_FAILURE(err);
- }
-
- FDF_SUCCESS;
-}
-/* }}} */
-
-/* {{{ proto int fdf_get_flags(resorce fdfdoc, string fieldname, int whichflags)
- Gets the flags of a field */
-PHP_FUNCTION(fdf_get_flags) {
- zval *r_fdf;
- char *fieldname;
- int fieldname_len;
- long whichflags;
- FDFDoc fdf;
- FDFErc err;
- ASUns32 flags;
-
- if(zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rsl",
- &r_fdf, &fieldname, &fieldname_len,
- &whichflags)
- == FAILURE) {
- return;
- }
-
- ZEND_FETCH_RESOURCE(fdf, FDFDoc *, &r_fdf, -1, "fdf", le_fdf);
-
- err = FDFGetFlags(fdf, fieldname, (FDFItem)whichflags, &flags);
-
- if(err != FDFErcOK) {
- FDF_FAILURE(err);
- }
-
- RETURN_LONG((long)flags);
-}
-/* }}} */
-
-/* {{{ proto bool fdf_set_opt(resource fdfdoc, string fieldname, int element, string value, string name)
- Sets a value in the opt array for a field */
-PHP_FUNCTION(fdf_set_opt)
-{
- zval **fdfp, **fieldname, **element, **value, **name;
- FDFDoc fdf;
- FDFErc err;
-
- if (ZEND_NUM_ARGS() != 5 || zend_get_parameters_ex(5, &fdfp, &fieldname, &element, &value, &name) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(fdf, FDFDoc *, fdfp, -1, "fdf", le_fdf);
-
- convert_to_string_ex(fieldname);
- convert_to_long_ex(element);
- convert_to_string_ex(value);
- convert_to_string_ex(name);
-
- err = FDFSetOpt(fdf, Z_STRVAL_PP(fieldname), Z_LVAL_PP(element), Z_STRVAL_PP(value), Z_STRVAL_PP(name));
- if(err != FDFErcOK) {
- FDF_FAILURE(err);
- }
- FDF_SUCCESS;
-}
-/* }}} */
-
-/* {{{ proto mixed fdf_get_opt(resource fdfdof, string fieldname [, int element])
- Gets a value from the opt array of a field */
-PHP_FUNCTION(fdf_get_opt) {
- zval *r_fdf;
- char *fieldname;
- int fieldname_len;
- long element = -1;
- FDFDoc fdf;
- FDFErc err;
-
- if(zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rs|l",
- &r_fdf, &fieldname, &fieldname_len,
- &element)
- == FAILURE) {
- return;
- }
-
- ZEND_FETCH_RESOURCE(fdf, FDFDoc *, &r_fdf, -1, "fdf", le_fdf);
-
- if(element == -1) {
- ASInt32 elements;
- err = FDFGetOpt(fdf, fieldname, (ASInt32)-1, NULL, NULL, 0, &elements);
- if(err != FDFErcOK) {
- FDF_FAILURE(err);
- }
- RETURN_LONG((long)elements);
- } else {
- ASInt32 bufSize, nRet;
- char *buf1, *buf2;
-
- bufSize = 1024;
- buf1 = emalloc(bufSize);
- buf2 = emalloc(bufSize);
-
- err = FDFGetOpt(fdf, fieldname, (ASInt32)element, buf1, buf2, bufSize, &nRet);
- if(err == FDFErcBufTooShort) {
- efree(buf1);
- efree(buf2);
- buf1 = emalloc(nRet);
- buf2 = emalloc(nRet);
- bufSize = nRet;
- err = FDFGetOpt(fdf, fieldname, (ASInt32)element, buf1, buf2, bufSize, &nRet);
- }
- if(err != FDFErcOK) {
- FDF_FAILURE(err);
- }
- array_init(return_value);
- add_next_index_stringl(return_value, buf1, strlen(buf1), 1);
- add_next_index_stringl(return_value, buf2, strlen(buf2), 1);
- efree(buf1);
- efree(buf2);
- }
-}
-/* }}} */
-
-/* {{{ proto bool fdf_set_submit_form_action(resource fdfdoc, string fieldname, int whichtrigger, string url, int flags)
- Sets the submit form action for a field */
-PHP_FUNCTION(fdf_set_submit_form_action)
-{
- zval **fdfp, **fieldname, **trigger, **url, **flags;
- FDFDoc fdf;
- FDFErc err;
-
- if (ZEND_NUM_ARGS() != 5 || zend_get_parameters_ex(5, &fdfp, &fieldname, &trigger, &url, &flags) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(fdf, FDFDoc *, fdfp, -1, "fdf", le_fdf);
-
- convert_to_string_ex(fieldname);
- convert_to_long_ex(trigger);
- convert_to_string_ex(url);
- convert_to_long_ex(flags);
-
- err = FDFSetSubmitFormAction(fdf, Z_STRVAL_PP(fieldname), Z_LVAL_PP(trigger), Z_STRVAL_PP(url), Z_LVAL_PP(flags));
- if(err != FDFErcOK) {
- FDF_FAILURE(err);
- }
- FDF_SUCCESS;
-}
-/* }}} */
-
-/* {{{ proto bool fdf_set_javascript_action(resource fdfdoc, string fieldname, int whichtrigger, string script)
- Sets the javascript action for a field */
-PHP_FUNCTION(fdf_set_javascript_action)
-{
- zval **fdfp, **fieldname, **trigger, **script;
- FDFDoc fdf;
- FDFErc err;
-
- if (ZEND_NUM_ARGS() != 4 || zend_get_parameters_ex(4, &fdfp, &fieldname, &trigger, &script) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(fdf, FDFDoc *, fdfp, -1, "fdf", le_fdf);
-
- convert_to_string_ex(fieldname);
- convert_to_long_ex(trigger);
- convert_to_string_ex(script);
-
- err = FDFSetJavaScriptAction(fdf, Z_STRVAL_PP(fieldname), Z_LVAL_PP(trigger), Z_STRVAL_PP(script));
- if(err != FDFErcOK) {
- FDF_FAILURE(err);
- }
- FDF_SUCCESS;
-}
-/* }}} */
-
-/* {{{ proto bool fdf_set_encoding(resource fdf_document, string encoding)
- Sets FDF encoding (either "Shift-JIS" or "Unicode") */
-PHP_FUNCTION(fdf_set_encoding)
-{
- zval **fdfp, **enc;
- FDFDoc fdf;
- FDFErc err;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &fdfp, &enc) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(fdf, FDFDoc *, fdfp, -1, "fdf", le_fdf);
-
- convert_to_string_ex(enc);
-
- err = FDFSetEncoding(fdf, Z_STRVAL_PP(enc));
-
- if(err != FDFErcOK) {
- FDF_FAILURE(err);
- }
- FDF_SUCCESS;
-}
-/* }}} */
-
-/* {{{ SAPI_POST_HANDLER_FUNC
- * SAPI post handler for FDF forms */
-SAPI_POST_HANDLER_FUNC(fdf_post_handler)
-{
- FILE *fp;
- FDFDoc theFDF;
- char *name=NULL, *value=NULL, *p, *data;
- int name_len=0, value_len=0;
- char *lastfieldname =NULL;
- char *filename = NULL;
- FDFErc err;
- ASInt32 nBytes;
- zval *array_ptr = (zval *) arg;
-
- fp=php_open_temporary_file(NULL, "fdfdata.", &filename TSRMLS_CC);
- if(!fp) {
- if(filename) efree(filename);
- return;
- }
- fwrite(SG(request_info).post_data, SG(request_info).post_data_length, 1, fp);
- fclose(fp);
-
- /* Set HTTP_FDF_DATA variable */
- data = estrndup(SG(request_info).post_data, SG(request_info).post_data_length);
- SET_VAR_STRINGL("HTTP_FDF_DATA", data, SG(request_info).post_data_length);
-
- err = FDFOpen(filename, 0, &theFDF);
-
- if(err==FDFErcOK){
- name = emalloc(name_len=256);
- value= emalloc(value_len=256);
- while (1) {
- err = FDFNextFieldName(theFDF, lastfieldname, name, name_len-1, &nBytes);
- if(err == FDFErcBufTooShort && nBytes >0 ) {
- name = erealloc(name, name_len=(nBytes+1));
- err = FDFNextFieldName(theFDF, lastfieldname, name, name_len-1, &nBytes);
- }
-
- if(err != FDFErcOK || nBytes == 0) break;
-
- if(lastfieldname) efree(lastfieldname);
- lastfieldname = estrdup(name);
-
- err = FDFGetValue(theFDF, name, NULL, 0, &nBytes);
- if(err != FDFErcOK && err != FDFErcNoValue ) break;
-
- if(value_len<nBytes+1) value = erealloc(value, value_len=(nBytes+1));
-
- if(nBytes>0) {
- err = FDFGetValue(theFDF, name, value, value_len-1, &nBytes);
- if(err == FDFErcOK && nBytes != 0) {
- for(p=value;*p;p++) if(*p=='\r') *p='\n';
- if(lastfieldname) efree(lastfieldname);
- lastfieldname = estrdup(name);
- php_register_variable(name, value, array_ptr TSRMLS_CC);
- }
- }
- }
-
- FDFClose(theFDF);
- VCWD_UNLINK((const char *)filename);
- efree(filename);
-
- if(name) efree(name);
- if(value) efree(value);
- if(lastfieldname) efree(lastfieldname);
- }
-}
-/* }}} */
-
-/* {{{ proto int fdf_errno(void)
- Gets error code for last operation */
-PHP_FUNCTION(fdf_errno) {
- RETURN_LONG((long)FDF_G(error));
-}
-/* }}} */
-
-/* {{{ proto string fdf_error([int errno])
- Gets error description for error code */
-PHP_FUNCTION(fdf_error) {
- FDFErc err;
- long p_err = -1;
-
- if(zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|l", &p_err)
- == FAILURE) {
- return;
- }
-
- err = (p_err >= 0) ? (FDFErc)p_err : FDF_G(error);
-
- switch(err) {
- case FDFErcOK:
- RETURN_STRING("no error", 1);
- case FDFErcInternalError:
- RETURN_STRING("An internal FDF Library error occurred", 1);
- case FDFErcBadParameter:
- RETURN_STRING("One or more of the parameters passed were invalid. ", 1);
- case FDFErcFileSysErr:
- RETURN_STRING("A file system error occurred or the file was not found", 1);
- case FDFErcBadFDF:
- RETURN_STRING("The FDF file being opened or parsed was invalid", 1);
- case FDFErcFieldNotFound:
- RETURN_STRING("The field whose name was passed in the parameter fieldName does not exist in the FDF file", 1);
- case FDFErcNoValue:
- RETURN_STRING("The field whose value was requested has no value", 1);
- case FDFErcEnumStopped:
- RETURN_STRING("Enumeration was stopped by FDFEnumValues by returning FALSE", 1);
- case FDFErcCantInsertField:
- RETURN_STRING("The field whose name was passed in the parameter fieldName cannot be inserted into the FDF file", 1);
- case FDFErcNoOption:
- RETURN_STRING("The requested element in a fields /Opt key does not exist, or the field has no /Opt key. ", 1);
- case FDFErcNoFlags:
- RETURN_STRING("The field has no /F or /Ff keys", 1);
- case FDFErcBadPDF:
- RETURN_STRING("The PDF file passed as the parameter to FDFSetAP was invalid, or did not contain the requested page ", 1);
- case FDFErcBufTooShort:
- RETURN_STRING("The buffer passed as a parameter was too short", 1);
- case FDFErcNoAP:
- RETURN_STRING("The field has no /AP key", 1);
- case FDFErcIncompatibleFDF:
- RETURN_STRING("An attempt to mix classic and template-based FDF files was made", 1);
-#ifdef HAVE_FDFTK_5
- case FDFErcNoAppendSaves:
- RETURN_STRING("The FDF does not include a /Difference key", 1);
- case FDFErcValueIsArray:
- RETURN_STRING("The value of this field is an array. Use FDFGetNthValue. ", 1);
- case FDFErcEmbeddedFDFs:
- RETURN_STRING("The FDF you passed as a parameter is a container for one or more FDFs embedded within it. Use FDFOpenFromEmbedded to gain access to each embedded FDF", 1);
- case FDFErcNoMoreFDFs:
- RETURN_STRING("Returned by FDFOpenFromEmbedded when parameter iWhich >= the number of embedded FDFs (including the case when the passed FDF does not contain any embedded FDFs)", 1);
- case FDFErcInvalidPassword:
- RETURN_STRING("Returned by FDFOpenFromEmbedded when the embedded FDF is encrypted, and you did not provide the correct password", 1);
-#endif
- case FDFErcLast:
- RETURN_STRING("Reserved for future use", 1);
- default:
- RETURN_STRING("unknown error", 1);
- }
-}
-/* }}} */
-
-/* {{{ proto string fdf_get_version([resource fdfdoc])
- Gets version number for FDF api or file */
-PHP_FUNCTION(fdf_get_version) {
- zval *r_fdf = NULL;
-
- if(zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|r", &r_fdf)
- == FAILURE) {
- return;
- }
-
- if(r_fdf) {
-#if HAVE_FDFTK_5
- const char *fdf_version;
- FDFDoc fdf;
-
- ZEND_FETCH_RESOURCE(fdf, FDFDoc *, &r_fdf, -1, "fdf", le_fdf);
- fdf_version = FDFGetFDFVersion(fdf);
- RETURN_STRING((char *)fdf_version, 1);
-#else
- RETURN_STRING("1.2",1);
-#endif
- } else {
- const char *api_version = FDFGetVersion();
- RETURN_STRING((char *)api_version, 1);
- }
-}
-/* }}} */
-
-#ifdef HAVE_FDFTK_5
-/* {{{ proto bool fdf_set_version(resourece fdfdoc, string version)
- Sets FDF version for a file*/
-PHP_FUNCTION(fdf_set_version) {
- zval *r_fdf;
- char *version;
- int version_len;
- FDFDoc fdf;
- FDFErc err;
-
- if(zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rs", &r_fdf, &version, &version_len)
- == FAILURE) {
- return;
- }
-
- ZEND_FETCH_RESOURCE(fdf, FDFDoc *, &r_fdf, -1, "fdf", le_fdf);
-
- err = FDFSetFDFVersion(fdf, version);
-
- if(err != FDFErcOK) {
- FDF_FAILURE(err);
- }
- FDF_SUCCESS;
-}
-/* }}} */
-
-/* {{{ proto bool fdf_add_doc_javascript(resource fdfdoc, string scriptname, string script)
- Add javascript code to the fdf file */
-PHP_FUNCTION(fdf_add_doc_javascript) {
- zval *r_fdf;
- char *name, *script;
- int name_len, script_len;
- FDFDoc fdf;
- FDFErc err;
-
- if(zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rss", &r_fdf,
- &name, &name_len,
- &script, &script_len
- )
- == FAILURE) {
- return;
- }
-
- ZEND_FETCH_RESOURCE(fdf, FDFDoc *, &r_fdf, -1, "fdf", le_fdf);
-
- err = FDFAddDocJavaScript(fdf, name, script);
-
- if(err != FDFErcOK) {
- FDF_FAILURE(err);
- }
- FDF_SUCCESS;
-}
-/* }}} */
-
-/* {{{ proto bool fdf_set_on_import_javascript(resource fdfdoc, string script [, bool before_data_import])
- Adds javascript code to be executed when Acrobat opens the FDF */
-PHP_FUNCTION(fdf_set_on_import_javascript) {
- zval *r_fdf;
- char *script;
- int script_len;
- zend_bool before;
- FDFDoc fdf;
- FDFErc err;
-
- if(zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rsb", &r_fdf,
- &script, &script_len, &before
- )
- == FAILURE) {
- return;
- }
-
- ZEND_FETCH_RESOURCE(fdf, FDFDoc *, &r_fdf, -1, "fdf", le_fdf);
-
- err = FDFSetOnImportJavaScript(fdf, script, before);
-
- if(err != FDFErcOK) {
- FDF_FAILURE(err);
- }
- FDF_SUCCESS;
-}
-/* }}} */
-
-/* {{{ proto bool fdf_set_target_frame(resource fdfdoc, string target)
- Sets target frame for form */
-PHP_FUNCTION(fdf_set_target_frame) {
- zval *r_fdf;
- char *target;
- int target_len;
- FDFDoc fdf;
- FDFErc err;
-
- if(zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rs", &r_fdf,
- &target, &target_len
- )
- == FAILURE) {
- return;
- }
-
- ZEND_FETCH_RESOURCE(fdf, FDFDoc *, &r_fdf, -1, "fdf", le_fdf);
-
- err = FDFSetTargetFrame(fdf, target);
-
- if(err != FDFErcOK) {
- FDF_FAILURE(err);
- }
- FDF_SUCCESS;
-}
-/* }}} */
-#endif
-
-/* {{{ proto bool fdf_remove_item(resource fdfdoc, string fieldname, int item)
- Sets target frame for form */
-PHP_FUNCTION(fdf_remove_item) {
- zval *r_fdf;
- char *fieldname;
- int fieldname_len;
- long item;
- FDFDoc fdf;
- FDFErc err;
-
- if(zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rsl", &r_fdf,
- &fieldname, &fieldname_len,
- &item
- )
- == FAILURE) {
- return;
- }
-
- ZEND_FETCH_RESOURCE(fdf, FDFDoc *, &r_fdf, -1, "fdf", le_fdf);
-
- err = FDFRemoveItem(fdf, *fieldname ? fieldname : NULL, item);
-
- if(err != FDFErcOK) {
- FDF_FAILURE(err);
- }
- FDF_SUCCESS;
-}
-/* }}} */
-
-#ifdef HAVE_FDFTK_5
-/* {{{ proto array fdf_get_attachment(resource fdfdoc, string fieldname, string savepath)
- Get attached uploaded file */
-PHP_FUNCTION(fdf_get_attachment) {
- zval *r_fdf;
- char *fieldname, *savepath;
- int fieldname_len, savepath_len;
- int is_dir=0;
- FDFDoc fdf;
- FDFErc err;
- char pathbuf[MAXPATHLEN], mimebuf[1024];
- struct stat statBuf;
-
- if(zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rss", &r_fdf,
- &fieldname, &fieldname_len,
- &savepath, &savepath_len
- )
- == FAILURE) {
- return;
- }
-
- ZEND_FETCH_RESOURCE(fdf, FDFDoc *, &r_fdf, -1, "fdf", le_fdf);
-
- if (php_check_open_basedir(savepath TSRMLS_CC) || (PG(safe_mode) && !php_checkuid(savepath, "wb+", CHECKUID_CHECK_MODE_PARAM))) {
- RETURN_FALSE;
- }
-
- strncpy(pathbuf , savepath, MAXPATHLEN-1);
- pathbuf[MAXPATHLEN-1] = '\0';
-
- if(0 == stat(pathbuf, &statBuf)) {
- is_dir = S_ISDIR(statBuf.st_mode);
- }
-
- err = FDFExtractAttachment(fdf, fieldname, pathbuf, sizeof(pathbuf), is_dir, mimebuf, sizeof(mimebuf));
-
- if(err != FDFErcOK) {
- FDF_FAILURE(err);
- }
-
- array_init(return_value);
- add_assoc_string(return_value, "path", pathbuf, 1);
- add_assoc_string(return_value, "type", mimebuf, 1);
- stat(pathbuf, &statBuf);
- add_assoc_long(return_value, "size", statBuf.st_size);
-}
-/* }}} */
-#endif
-
-/* {{{ enum_values_callback */
-static ASBool enum_values_callback(char *name, char *value, void *userdata)
-{
- zval *retval_ptr, *z_name, *z_value, **args[3];
- long retval = 0;
- int numargs = 2;
- TSRMLS_FETCH();
-
- MAKE_STD_ZVAL(z_name);
- ZVAL_STRING(z_name, name, 1);
- args[0] = &z_name;
-
- if (*value) { /* simple value */
- MAKE_STD_ZVAL(z_value);
- ZVAL_STRING(z_value, value, 1);
- args[1] = &z_value;
- } else { /* empty value *might* be an array */
- /* TODO: do it like fdf_get_value (or re-implement yourself?) */
- }
-
- if (userdata) {
- args[2] = (zval **) userdata;
- numargs++;
- }
-
- if (call_user_function_ex(EG(function_table),
- NULL,
- FDF_G(enum_callback),
- &retval_ptr,
- numargs, args,
- 0, NULL TSRMLS_CC) == SUCCESS
- && retval_ptr) {
-
- convert_to_long_ex(&retval_ptr);
- retval = Z_LVAL_P(retval_ptr);
- zval_ptr_dtor(&retval_ptr);
- } else {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "callback failed");
- }
-
- zval_ptr_dtor(&z_name);
- zval_ptr_dtor(&z_value);
-
- return (ASBool)retval;
-}
-/* }}} */
-
-/* {{{ proto bool fdf_enum_values(resource fdfdoc, callback function [, mixed userdata])
- Call a user defined function for each document value */
-PHP_FUNCTION(fdf_enum_values) {
- zval *r_fdf;
- zval *callback;
- zval *userdata = NULL;
- FDFDoc fdf;
- FDFErc err;
- char *name;
- char namebuf[1024], valbuf[1024];
-
- if(zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rz|z", &r_fdf,
- &callback, &userdata
- )
- == FAILURE) {
- return;
- }
-
- ZEND_FETCH_RESOURCE(fdf, FDFDoc *, &r_fdf, -1, "fdf", le_fdf);
-
- if (!zend_is_callable(callback, 0, &name)) {
- php_error_docref1(NULL TSRMLS_CC, name, E_WARNING, "Second argument is expected to be a valid callback");
- efree(name);
- RETURN_FALSE;
- }
- efree(name);
- FDF_G(enum_callback) = callback;
- FDF_G(enum_fdf) = fdf;
-
- err = FDFEnumValues(fdf, enum_values_callback,
- namebuf, sizeof(namebuf),
- valbuf, sizeof(valbuf),
- userdata ? &userdata : NULL, 0);
-
- if(err != FDFErcOK) {
- FDF_FAILURE(err);
- }
- FDF_SUCCESS;
-}
-/* }}} */
-
-/* {{{ proto void fdf_header(void)
- Set FDF specific HTTP headers */
-PHP_FUNCTION(fdf_header) {
- sapi_header_line ctr = {0};
-
- ctr.line = "Content-type: application/vnd.fdf";
- ctr.line_len = strlen(ctr.line);
- ctr.response_code = 200;
-
- sapi_header_op(SAPI_HEADER_REPLACE, &ctr TSRMLS_CC);
-}
-/* }}} */
-
-#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/fdf/fdf.dsp b/ext/fdf/fdf.dsp
deleted file mode 100644
index 85b91ceac9..0000000000
--- a/ext/fdf/fdf.dsp
+++ /dev/null
@@ -1,114 +0,0 @@
-# Microsoft Developer Studio Project File - Name="fdf" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=fdf - Win32 Release_TS
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "fdf.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "fdf.mak" CFG="fdf - Win32 Release_TS"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "fdf - Win32 Release_TS" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "fdf - Win32 Debug_TS" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "fdf - Win32 Release_TS"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release_TS"
-# PROP BASE Intermediate_Dir "Release_TS"
-# PROP BASE Ignore_Export_Lib 0
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release_TS"
-# PROP Intermediate_Dir "Release_TS"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MT /W3 /GX /O2 /I "..\.." /I "..\..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\..\TSRM" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "COMPILE_DL_FDF" /D ZTS=1 /YX /FD /c
-# ADD CPP /nologo /MD /W3 /GX /O2 /I "..\.." /I "..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\TSRM" /I "..\..\main" /D ZEND_DEBUG=0 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "COMPILE_DL_FDF" /D ZTS=1 /D "ZEND_WIN32" /D "PHP_WIN32" /D HAVE_FDFLIB=1 /D "HAVE_FDFTK_5" /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x406 /d "NDEBUG"
-# ADD RSC /l 0x406 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib php5ts.lib /nologo /dll /machine:I386
-# ADD LINK32 php5ts.lib fdftk.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 /out:"..\..\Release_TS/php_fdf.dll" /libpath:"..\..\Release_TS" /libpath:"..\..\Release_TS_Inline"
-# SUBTRACT LINK32 /pdb:none
-
-!ELSEIF "$(CFG)" == "fdf - Win32 Debug_TS"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Debug_TS"
-# PROP BASE Intermediate_Dir "Debug_TS"
-# PROP BASE Ignore_Export_Lib 0
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Debug_TS"
-# PROP Intermediate_Dir "Debug_TS"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MT /W3 /GX /O2 /I "..\.." /I "..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\TSRM" /I "mssql-70" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "COMPILE_DL_FDF" /D ZTS=1 /YX /FD /c
-# ADD CPP /nologo /MDd /W3 /GX /ZI /Od /I "..\.." /I "..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\TSRM" /I "..\..\main" /D ZEND_DEBUG=1 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "COMPILE_DL_FDF" /D ZTS=1 /D "ZEND_WIN32" /D "PHP_WIN32" /D HAVE_FDFLIB=1 /D "HAVE_FDFTK_5" /FR /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x406 /d "NDEBUG"
-# ADD RSC /l 0x406 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib php5ts_debug.lib /nologo /dll /machine:I386
-# ADD LINK32 php5ts_debug.lib fdftk.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /incremental:yes /debug /machine:I386 /out:"..\..\Debug_TS/php_fdf.dll" /libpath:"..\..\Debug_TS"
-
-!ENDIF
-
-# Begin Target
-
-# Name "fdf - Win32 Release_TS"
-# Name "fdf - Win32 Debug_TS"
-# Begin Group "Source Files"
-
-# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
-# Begin Source File
-
-SOURCE=.\fdf.c
-# End Source File
-# End Group
-# Begin Group "Header Files"
-
-# PROP Default_Filter "h;hpp;hxx;hm;inl"
-# Begin Source File
-
-SOURCE=.\php_fdf.h
-# End Source File
-# End Group
-# Begin Group "Resource Files"
-
-# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
-# End Group
-# End Target
-# End Project
diff --git a/ext/fdf/package.xml b/ext/fdf/package.xml
deleted file mode 100644
index 9558286828..0000000000
--- a/ext/fdf/package.xml
+++ /dev/null
@@ -1,58 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1" ?>
-<!DOCTYPE package SYSTEM "../pear/package.dtd">
-<package>
- <name>fdf</name>
- <summary>PDF Form Data Format functions</summary>
- <maintainers>
- <maintainer>
- <user>steinm</user>
- <name>Uwe Steinmann</name>
- <email>steinm@php.net</email>
- <role>lead</role>
- </maintainer>
- <maintainer>
- <user>hholzgra</user>
- <name>Hartmut Holzgraefe</name>
- <email>hartmut@php.net</email>
- <role>developer</role>
- </maintainer>
- </maintainers>
- <description>
-Forms Data Format (FDF) is a format for handling forms
-within PDF documents. You should read the documentation
-at http://partners.adobe.com/asn/acrobat/forms.jsp for
-more information on what FDF is and how it is used in
-general.
- </description>
- <license>PHP</license>
- <release>
- <state>beta</state>
- <version>5.0rc1</version>
- <date>2004-03-19</date>
- <notes>
-package.xml added to support intallation using pear installer
- </notes>
- <configureoptions>
- <configureoption name="with-fdf" default="autodetect" prompt="path to fdf installation?"/>
- </configureoptions>
- <filelist>
- <file role="doc" name="CREDITS"/>
- <file role="src" name="config.m4"/>
- <file role="src" name="config.mw32"/>
- <file role="src" name="fdf.dsp"/>
- <file role="src" name="fdf.c"/>
- <file role="src" name="php_fdf.h"/>
- <flie role="test" name="tests/01-general.phpt"/>
- <flie role="test" name="tests/02-values.phpt"/>
- <flie role="test" name="tests/03-read-file.phpt"/>
- <flie role="test" name="tests/04-POST.phpt"/>
- <flie role="test" name="tests/simple.fdf"/>
- </filelist>
- <deps>
- <dep type="php" rel="ge" version="5" />
- </deps>
- </release>
-</package>
-<!--
-vim:et:ts=1:sw=1
--->
diff --git a/ext/fdf/php_fdf.h b/ext/fdf/php_fdf.h
deleted file mode 100644
index 41b99bce78..0000000000
--- a/ext/fdf/php_fdf.h
+++ /dev/null
@@ -1,96 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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. |
- +----------------------------------------------------------------------+
- | Authors: Uwe Steinmann <Uwe.Steinmann@fernuni-hagen.de> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifndef PHP_FDF_H
-#define PHP_FDF_H
-
-#if HAVE_FDFLIB
-#ifdef PHP_WIN32
-#else
-#define UNIX_DEV
-#endif
-
-#if HAVE_FDFTK_H_LOWER
-# include <fdftk.h>
-#else
-# include <FdfTk.h>
-#endif
-
-ZEND_BEGIN_MODULE_GLOBALS(fdf)
- FDFErc error;
- zval *enum_callback;
- FDFDoc enum_fdf;
-ZEND_END_MODULE_GLOBALS(fdf)
-
-#ifdef ZTS
-#define FDF_G(v) TSRMG(fdf_globals_id, zend_fdf_globals *, v)
-#else
-#define FDF_G(v) (fdf_globals.v)
-#endif
-
-
-extern zend_module_entry fdf_module_entry;
-#define fdf_module_ptr &fdf_module_entry
-
-PHP_MINIT_FUNCTION(fdf);
-PHP_MSHUTDOWN_FUNCTION(fdf);
-PHP_RINIT_FUNCTION(fdf);
-PHP_MINFO_FUNCTION(fdf);
-
-PHP_FUNCTION(fdf_open);
-PHP_FUNCTION(fdf_open_string);
-PHP_FUNCTION(fdf_close);
-PHP_FUNCTION(fdf_create);
-PHP_FUNCTION(fdf_save);
-PHP_FUNCTION(fdf_save_string);
-PHP_FUNCTION(fdf_get_value);
-PHP_FUNCTION(fdf_set_value);
-PHP_FUNCTION(fdf_next_field_name);
-PHP_FUNCTION(fdf_set_ap);
-PHP_FUNCTION(fdf_get_ap);
-PHP_FUNCTION(fdf_get_status);
-PHP_FUNCTION(fdf_set_status);
-PHP_FUNCTION(fdf_set_file);
-PHP_FUNCTION(fdf_get_file);
-PHP_FUNCTION(fdf_add_template);
-PHP_FUNCTION(fdf_set_flags);
-PHP_FUNCTION(fdf_get_flags);
-PHP_FUNCTION(fdf_set_opt);
-PHP_FUNCTION(fdf_get_opt);
-PHP_FUNCTION(fdf_set_submit_form_action);
-PHP_FUNCTION(fdf_set_javascript_action);
-PHP_FUNCTION(fdf_add_doc_javascript);
-PHP_FUNCTION(fdf_set_on_import_javascript);
-PHP_FUNCTION(fdf_set_encoding);
-PHP_FUNCTION(fdf_get_encoding);
-PHP_FUNCTION(fdf_set_version);
-PHP_FUNCTION(fdf_get_version);
-PHP_FUNCTION(fdf_set_target_frame);
-PHP_FUNCTION(fdf_errno);
-PHP_FUNCTION(fdf_error);
-PHP_FUNCTION(fdf_remove_item);
-PHP_FUNCTION(fdf_get_attachment);
-PHP_FUNCTION(fdf_enum_values);
-PHP_FUNCTION(fdf_header);
-#else
-#define fdf_module_ptr NULL
-#endif
-#define phpext_fdf_ptr fdf_module_ptr
-#endif /* PHP_FDF_H */
diff --git a/ext/fdf/tests/01-general.phpt b/ext/fdf/tests/01-general.phpt
deleted file mode 100644
index 998da3d729..0000000000
--- a/ext/fdf/tests/01-general.phpt
+++ /dev/null
@@ -1,10 +0,0 @@
---TEST--
-Adobe Form Data Format functions
---SKIPIF--
-<?php if (!extension_loaded("fdf")) print "skip"; ?>
---FILE--
-<?php
-echo is_resource(fdf_create()) ? "OK" : "FAILURE";
-?>
---EXPECT--
-OK \ No newline at end of file
diff --git a/ext/fdf/tests/02-values.phpt b/ext/fdf/tests/02-values.phpt
deleted file mode 100644
index 40c7df4a0e..0000000000
--- a/ext/fdf/tests/02-values.phpt
+++ /dev/null
@@ -1,19 +0,0 @@
---TEST--
-FDF open/save and set/get values
---SKIPIF--
-<?php if (!extension_loaded("fdf")) print "skip"; ?>
---FILE--
-<?php
-$f1 = fdf_create();
-fdf_set_value($f1, "foo", "bar");
-fdf_set_value($f1, "bar", "foo");
-$f2 = fdf_open_string(fdf_save_string($f1));
-fdf_close($f1);
-for ($field = fdf_next_field_name($f2); $field; $field = fdf_next_field_name($f2, $field)) {
- echo "$field: ". fdf_get_value($f2, $field) . "\n";
-}
-fdf_close($f2);
-?>
---EXPECT--
-foo: bar
-bar: foo
diff --git a/ext/fdf/tests/03-read-file.phpt b/ext/fdf/tests/03-read-file.phpt
deleted file mode 100644
index a611142b3f..0000000000
--- a/ext/fdf/tests/03-read-file.phpt
+++ /dev/null
@@ -1,15 +0,0 @@
---TEST--
-FDF read file
---SKIPIF--
-<?php if (!extension_loaded("fdf")) print "skip"; ?>
---FILE--
-<?php
-$fdf = fdf_open("ext/fdf/tests/simple.fdf");
-for ($field = fdf_next_field_name($fdf); $field; $field = fdf_next_field_name($fdf, $field)) {
- echo "$field: ". fdf_get_value($fdf, $field) . "\n";
-}
-fdf_close($fdf);
-?>
---EXPECT--
-foo: bar
-bar: foo
diff --git a/ext/fdf/tests/04-POST.phpt b/ext/fdf/tests/04-POST.phpt
deleted file mode 100644
index 1d8c9de48f..0000000000
--- a/ext/fdf/tests/04-POST.phpt
+++ /dev/null
@@ -1,40 +0,0 @@
---TEST--
-FDF POST data parsing
---SKIPIF--
-<?php if (php_sapi_name()=='cli' || !extension_loaded("fdf")) print "skip"; ?>
---HEADERS--
-return <<<END
-Content-Type=application/vnd.fdf
-Content-Length=209
-END;
---ENV--
-return <<<END
-Content-Type=application/vnd.fdf
-Content-Length=209
-END;
---POST--
-%FDF-1.2
-%âãÏÓ
-
-1 0 obj
-<<
-/FDF << /Fields [ << /V (Thanks George)/T (status)>> ] /ID [ <3c0e51bf6427b09f7faa482297af6957><5f9787a1646a3bfe44b7725c9c1284df>
-] >>
->>
-endobj
-trailer
-<<
-/Root 1 0 R
-
->>
-%%EOF
---FILE--
-<?php
-echo strlen($HTTP_FDF_DATA)."\n";
-foreach ($_POST as $key => $value) {
- echo "$key => $value\n";
-}
-?>
---EXPECT--
-209
-status: Thanks George \ No newline at end of file
diff --git a/ext/fdf/tests/simple.fdf b/ext/fdf/tests/simple.fdf
deleted file mode 100644
index 21d3fbd55a..0000000000
--- a/ext/fdf/tests/simple.fdf
+++ /dev/null
@@ -1,18 +0,0 @@
-%FDF-1.2
-%âãÏÓ
-1 0 obj
-<<
-/FDF << /Fields 2 0 R >>
->>
-endobj
-2 0 obj
-[
-<< /T (foo)/V (bar)>> << /T (bar)/V (foo)>>
-]
-endobj
-trailer
-<<
-/Root 1 0 R
-
->>
-%%EOF
diff --git a/ext/fileinfo/CREDITS b/ext/fileinfo/CREDITS
deleted file mode 100644
index 6251d1b110..0000000000
--- a/ext/fileinfo/CREDITS
+++ /dev/null
@@ -1,2 +0,0 @@
-fileinfo
-Ilia Alshanetsky
diff --git a/ext/fileinfo/EXPERIMENTAL b/ext/fileinfo/EXPERIMENTAL
deleted file mode 100644
index e69de29bb2..0000000000
--- a/ext/fileinfo/EXPERIMENTAL
+++ /dev/null
diff --git a/ext/fileinfo/config.m4 b/ext/fileinfo/config.m4
deleted file mode 100644
index 06f758f3e6..0000000000
--- a/ext/fileinfo/config.m4
+++ /dev/null
@@ -1,54 +0,0 @@
-dnl $Id$
-dnl config.m4 for extension fileinfo
-
-PHP_ARG_WITH(fileinfo, for fileinfo support,
-[ --with-fileinfo=DIR Include fileinfo support])
-
-if test "$PHP_FILEINFO" != "no"; then
- SEARCH_PATH="/usr/local /usr"
- SEARCH_FOR="/include/magic.h"
- if test -r $PHP_FILEINFO/$SEARCH_FOR; then
- FILEINFO_DIR=$PHP_FILEINFO
- else
- AC_MSG_CHECKING([for magic files in default path])
- for i in $SEARCH_PATH ; do
- if test -r $i/$SEARCH_FOR; then
- FILEINFO_DIR=$i
- AC_MSG_RESULT(found in $i)
- fi
- done
- fi
-
- if test -z "$FILEINFO_DIR"; then
- AC_MSG_RESULT([not found])
- AC_MSG_ERROR([Please reinstall the libmagic distribution])
- fi
-
- PHP_ADD_INCLUDE($FILEINFO_DIR/include)
-
- LIBNAME=magic
- LIBSYMBOL=magic_open
-
- PHP_CHECK_LIBRARY($LIBNAME,$LIBSYMBOL,
- [
- PHP_ADD_LIBRARY_WITH_PATH($LIBNAME, $FILEINFO_DIR/lib, FILEINFO_SHARED_LIBADD)
- AC_DEFINE(HAVE_FILEINFOLIB,1,[ ])
- ],[
- AC_MSG_ERROR([wrong magic lib version or lib not found])
- ],[
- -L$FILEINFO_DIR/lib -lm -ldl
- ])
-
- MAGIC_MIME_LOCATIONS="/usr/local/share/file/magic /usr/share/file/magic /usr/share/misc/file/magic /etc/magic"
- for i in $MAGIC_MIME_LOCATIONS; do
- if test -f $i; then
- PHP_DEFAULT_MAGIC_FILE=$i
- break
- fi
- done
- AC_DEFINE_UNQUOTED(PHP_DEFAULT_MAGIC_FILE,"$PHP_DEFAULT_MAGIC_FILE",[magic file path])
-
- PHP_SUBST(FILEINFO_SHARED_LIBADD)
-
- PHP_NEW_EXTENSION(fileinfo, fileinfo.c, $ext_shared)
-fi
diff --git a/ext/fileinfo/fileinfo.c b/ext/fileinfo/fileinfo.c
deleted file mode 100644
index 627e740533..0000000000
--- a/ext/fileinfo/fileinfo.c
+++ /dev/null
@@ -1,433 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Ilia Alshanetsky <ilia@php.net> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <magic.h>
-/*
- * HOWMANY specifies the maximum offset libmagic will look at
- * this is currently hardcoded in the libmagic source but not exported
- */
-#ifndef HOWMANY
-#define HOWMANY 65536
-#endif
-
-
-#include "php.h"
-#include "php_ini.h"
-#include "ext/standard/info.h"
-#include "ext/standard/file.h" /* needed for context stuff */
-#include "php_fileinfo.h"
-#include "fopen_wrappers.h" /* needed for is_url */
-
-struct php_fileinfo {
- long options;
- struct magic_set *magic;
-};
-
-#ifndef PHP_DEFAULT_MAGIC_FILE
-#define PHP_DEFAULT_MAGIC_FILE NULL
-#endif
-
-#ifdef ZEND_ENGINE_2
-
-static zend_object_handlers finfo_object_handlers;
-zend_class_entry *finfo_class_entry;
-
-struct finfo_object {
- zend_object zo;
- struct php_fileinfo *ptr;
-};
-
-#define FILEINFO_DECLARE_INIT_OBJECT(object) \
- zval *object = getThis();
-
-#define FILEINFO_REGISTER_OBJECT(_object, _ptr) \
-{ \
- struct finfo_object *obj; \
- obj = (struct finfo_object*)zend_object_store_get_object(_object TSRMLS_CC); \
- obj->ptr = _ptr; \
-}
-
-#define FILEINFO_FROM_OBJECT(finfo, object) \
-{ \
- struct finfo_object *obj = zend_object_store_get_object(object TSRMLS_CC); \
- finfo = obj->ptr; \
- if (!finfo) { \
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "The invalid fileinfo object."); \
- RETURN_FALSE; \
- } \
-}
-
-/* {{{ finfo_objects_dtor
- */
-static void finfo_objects_dtor(void *object, zend_object_handle handle TSRMLS_DC)
-{
- struct finfo_object *intern = (struct finfo_object *) object;
-
- if (intern->ptr) {
- magic_close(intern->ptr->magic);
- efree(intern->ptr);
- }
-
- efree(intern);
-}
-/* }}} */
-
-/* {{{ finfo_objects_new
- */
-PHP_FILEINFO_API zend_object_value finfo_objects_new(zend_class_entry *class_type TSRMLS_DC)
-{
- zend_object_value retval;
- struct finfo_object *intern;
-
- intern = emalloc(sizeof(struct finfo_object));
- intern->zo.ce = class_type;
- intern->zo.in_get = 0;
- intern->zo.in_set = 0;
- intern->zo.properties = NULL;
- intern->ptr = NULL;
-
- retval.handle = zend_objects_store_put(intern, finfo_objects_dtor, NULL, NULL TSRMLS_CC);
- retval.handlers = (zend_object_handlers *) &finfo_object_handlers;
-
- return retval;
-}
-/* }}} */
-
-/* {{{ finfo_class_functions
- */
-function_entry finfo_class_functions[] = {
- ZEND_ME_MAPPING(finfo, finfo_open, NULL)
- ZEND_ME_MAPPING(set_flags, finfo_set_flags,NULL)
- ZEND_ME_MAPPING(file, finfo_file, NULL)
- ZEND_ME_MAPPING(buffer, finfo_buffer, NULL)
- {NULL, NULL, NULL}
-};
-/* }}} */
-
-#else
-
-#define FILEINFO_REGISTER_OBJECT(_object, _ptr) {}
-#define FILEINFO_FROM_OBJECT(socket_id, object) {}
-
-#define FILEINFO_DECLARE_INIT_OBJECT(object)
-#define object 0
-
-#endif
-
-#define FINFO_SET_OPTION(magic, options) \
- if (magic_setflags(magic, options) == -1) { \
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Failed to set option '%ld' %d:%s", \
- options, magic_errno(magic), magic_error(magic)); \
- RETURN_FALSE; \
- }
-
-/* True global resources - no need for thread safety here */
-static int le_fileinfo;
-
-void finfo_resource_destructor(zend_rsrc_list_entry *rsrc TSRMLS_DC)
-{
- if (rsrc->ptr) {
- struct php_fileinfo *finfo = (struct php_fileinfo *) rsrc->ptr;
- magic_close(finfo->magic);
- efree(rsrc->ptr);
- rsrc->ptr = NULL;
- }
-}
-
-/* {{{ fileinfo_functions[]
- */
-function_entry fileinfo_functions[] = {
- PHP_FE(finfo_open, NULL)
- PHP_FE(finfo_close, NULL)
- PHP_FE(finfo_set_flags, NULL)
- PHP_FE(finfo_file, NULL)
- PHP_FE(finfo_buffer, NULL)
- {NULL, NULL, NULL}
-};
-/* }}} */
-
-/* {{{ PHP_MINIT_FUNCTION
- */
-PHP_MINIT_FUNCTION(finfo)
-{
-#ifdef ZEND_ENGINE_2
- zend_class_entry _finfo_class_entry;
- INIT_CLASS_ENTRY(_finfo_class_entry, "finfo", finfo_class_functions);
- _finfo_class_entry.create_object = finfo_objects_new;
- finfo_class_entry = zend_register_internal_class(&_finfo_class_entry TSRMLS_CC);
-
- /* copy the standard object handlers to you handler table */
- memcpy(&finfo_object_handlers, zend_get_std_object_handlers(), sizeof(zend_object_handlers));
-#endif /* ZEND_ENGINE_2 */
-
- le_fileinfo = zend_register_list_destructors_ex(finfo_resource_destructor, NULL, "file_info", module_number);
-
- REGISTER_LONG_CONSTANT("FILEINFO_NONE", MAGIC_NONE, CONST_CS|CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("FILEINFO_SYMLINK", MAGIC_SYMLINK, CONST_CS|CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("FILEINFO_MIME", MAGIC_MIME, CONST_CS|CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("FILEINFO_COMPRESS", MAGIC_COMPRESS, CONST_CS|CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("FILEINFO_DEVICES", MAGIC_DEVICES, CONST_CS|CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("FILEINFO_CONTINUE", MAGIC_CONTINUE, CONST_CS|CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("FILEINFO_PRESERVE_ATIME", MAGIC_PRESERVE_ATIME, CONST_CS|CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("FILEINFO_RAW", MAGIC_RAW, CONST_CS|CONST_PERSISTENT);
-
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ fileinfo_module_entry
- */
-zend_module_entry fileinfo_module_entry = {
-#if ZEND_MODULE_API_NO >= 20010901
- STANDARD_MODULE_HEADER,
-#endif
- "fileinfo",
- fileinfo_functions,
- PHP_MINIT(finfo),
- NULL,
- NULL,
- NULL,
- PHP_MINFO(fileinfo),
-#if ZEND_MODULE_API_NO >= 20010901
- "0.1", /* Replace with version number for your extension */
-#endif
- STANDARD_MODULE_PROPERTIES
-};
-/* }}} */
-
-#ifdef COMPILE_DL_FILEINFO
-ZEND_GET_MODULE(fileinfo)
-#endif
-
-/* {{{ PHP_MINFO_FUNCTION
- */
-PHP_MINFO_FUNCTION(fileinfo)
-{
- php_info_print_table_start();
- php_info_print_table_header(2, "fileinfo support", "enabled");
- php_info_print_table_end();
-}
-/* }}} */
-
-/* {{{ proto resource finfo_open([int options [, string arg]])
- Create a new fileinfo resource. */
-PHP_FUNCTION(finfo_open)
-{
- long options = MAGIC_NONE;
- char *file = PHP_DEFAULT_MAGIC_FILE;
- int file_len = 0;
- struct php_fileinfo *finfo;
- FILEINFO_DECLARE_INIT_OBJECT(object)
- char resolved_path[MAXPATHLEN];
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|ls", &options, &file, &file_len) == FAILURE) {
- RETURN_FALSE;
- }
-
- if (file_len) { /* user specified filed, perform open_basedir checks */
- if (!VCWD_REALPATH(file, resolved_path)) {
- RETURN_FALSE;
- }
- file = resolved_path;
-
- if ((PG(safe_mode) && (!php_checkuid(file, NULL, CHECKUID_CHECK_FILE_AND_DIR))) || php_check_open_basedir(file TSRMLS_CC)) {
- RETURN_FALSE;
- }
- }
-
- finfo = emalloc(sizeof(struct php_fileinfo));
-
- finfo->options = options;
- finfo->magic = magic_open(options);
-
- if (finfo->magic == NULL) {
- efree(finfo);
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid mode '%ld'.", options);
- RETURN_FALSE;
- }
-
- if (magic_load(finfo->magic, file) == -1) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Failed to load magic database at '%s'.", file);
- efree(finfo);
- magic_close(finfo->magic);
- RETURN_FALSE;
- }
-
- if (object) {
- FILEINFO_REGISTER_OBJECT(object, finfo);
- } else {
- ZEND_REGISTER_RESOURCE(return_value, finfo, le_fileinfo);
- }
-}
-/* }}} */
-
-/* {{{ proto resource finfo_close(resource finfo)
- Close fileinfo resource. */
-PHP_FUNCTION(finfo_close)
-{
- struct php_fileinfo *finfo;
- zval *zfinfo;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z", &zfinfo) == FAILURE) {
- RETURN_FALSE;
- }
- ZEND_FETCH_RESOURCE(finfo, struct php_fileinfo *, &zfinfo, -1, "file_info", le_fileinfo);
-
- zend_list_delete(Z_RESVAL_P(zfinfo));
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto bool finfo_set_flags(resource finfo, int options)
- Set libmagic configuration options. */
-PHP_FUNCTION(finfo_set_flags)
-{
- long options;
- struct php_fileinfo *finfo;
- zval *zfinfo;
- FILEINFO_DECLARE_INIT_OBJECT(object)
-
- if (object) {
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &options) == FAILURE) {
- RETURN_FALSE;
- }
- FILEINFO_FROM_OBJECT(finfo, object);
- } else {
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "zl", &zfinfo, &options) == FAILURE) {
- RETURN_FALSE;
- }
- ZEND_FETCH_RESOURCE(finfo, struct php_fileinfo *, &zfinfo, -1, "file_info", le_fileinfo);
- }
-
- FINFO_SET_OPTION(finfo->magic, options)
- finfo->options = options;
-
- RETURN_TRUE;
-}
-/* }}} */
-
-static void _php_finfo_get_type(INTERNAL_FUNCTION_PARAMETERS, int mode)
-{
- long options = 0;
- char *buffer, *tmp, *ret_val;
- int buffer_len;
- struct php_fileinfo *finfo;
- zval *zfinfo, *zcontext = NULL;
- FILEINFO_DECLARE_INIT_OBJECT(object)
-
- if (object) {
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|lbz", &buffer, &buffer_len, &options, &zcontext) == FAILURE) {
- RETURN_FALSE;
- }
- FILEINFO_FROM_OBJECT(finfo, object);
- } else {
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "zs|lbz", &zfinfo, &buffer, &buffer_len, &options, &zcontext) == FAILURE) {
- RETURN_FALSE;
- }
- ZEND_FETCH_RESOURCE(finfo, struct php_fileinfo *, &zfinfo, -1, "file_info", le_fileinfo);
- }
-
- /* Set options for the current file/buffer. */
- if (options) {
- FINFO_SET_OPTION(finfo->magic, options)
- }
-
- if (mode) { /* file */
- /* determine if the file is a local file or remote URL */
- char *tmp2;
- php_stream_wrapper *wrap = php_stream_locate_url_wrapper(buffer, &tmp2, 0 TSRMLS_DC);
- if (wrap && wrap->is_url) {
-#ifdef ZEND_ENGINE_2
- php_stream_context *context = php_stream_context_from_zval(zcontext, 0);
-#else
- php_stream_context *context = NULL;
-#endif
- php_stream *stream = php_stream_open_wrapper_ex(buffer, "rb",
- ENFORCE_SAFE_MODE | REPORT_ERRORS, NULL, context);
- if (!stream) {
- RETURN_FALSE;
- }
- buffer_len = php_stream_copy_to_mem(stream, &tmp, HOWMANY, 0);
- php_stream_close(stream);
-
- if (buffer_len == 0) {
- RETURN_FALSE;
- }
- } else { /* local file */
- char resolved_path[MAXPATHLEN];
- if (!VCWD_REALPATH(buffer, resolved_path)) {
- RETURN_FALSE;
- }
-
- ret_val = (char *) magic_file(finfo->magic, buffer);
- goto common;
- }
- } else { /* buffer */
- tmp = buffer;
- }
-
- ret_val = (char *) magic_buffer(finfo->magic, tmp, buffer_len);
- if (mode) {
- efree(tmp);
- }
-common:
- /* Restore options */
- if (options) {
- FINFO_SET_OPTION(finfo->magic, finfo->options)
- }
-
- if (!ret_val) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Failed identify data %d:%s",
- magic_errno(finfo->magic), magic_error(finfo->magic));
- RETURN_FALSE;
- } else {
- RETURN_STRING(ret_val, 1);
- }
-}
-
-/* {{{ proto string finfo_file(resource finfo, char *file_name [, int options [, resource context]])
- Return information about a file. */
-PHP_FUNCTION(finfo_file)
-{
- _php_finfo_get_type(INTERNAL_FUNCTION_PARAM_PASSTHRU, 1);
-}
-/* }}} */
-
-/* {{{ proto string finfo_buffer(resource finfo, char *string [, int options])
- Return infromation about a string buffer. */
-PHP_FUNCTION(finfo_buffer)
-{
- _php_finfo_get_type(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0);
-}
-/* }}} */
-
-/*
- * 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/fileinfo/fileinfo.php b/ext/fileinfo/fileinfo.php
deleted file mode 100644
index 1ee9efbeb8..0000000000
--- a/ext/fileinfo/fileinfo.php
+++ /dev/null
@@ -1,29 +0,0 @@
-<?php
-if(!extension_loaded('fileinfo')) {
- dl('fileinfo.' . PHP_SHLIB_SUFFIX);
-}
-if(!extension_loaded('fileinfo')) {
- die("fileinfo extension is not avaliable, please compile it.\n");
-}
-
-// normal operation
-$res = finfo_open(FILEINFO_MIME); /* return mime type ala mimetype extension */
-$files = glob("*");
-foreach ($files as $file) {
- echo finfo_file($res, $file) . "\n";
-}
-finfo_close($res);
-
-// OO mode
-/*
- * FILEINFO_PRESERVE_ATIME - if possible preserve the original access time
- * FILEINFO_SYMLINK - follow symlinks
- * FILEINFO_DEVICES - look at the contents of blocks or character special devices
- * FILEINFO_COMPRESS - decompress compressed files
- */
-$fi = new finfo(FILEINFO_PRESERVE_ATIME|FILEINFO_SYMLINK|FILEINFO_DEVICES|FILEINFO_COMPRESS);
-$files = glob("*");
-foreach ($files as $file) {
- echo $fi->buffer(file_get_contents($file)) . "\n";
-}
-?>
diff --git a/ext/fileinfo/package.xml b/ext/fileinfo/package.xml
deleted file mode 100644
index 4b4b085c10..0000000000
--- a/ext/fileinfo/package.xml
+++ /dev/null
@@ -1,43 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1" ?>
-<!DOCTYPE package SYSTEM "../pear/package.dtd">
-<package>
- <name>Fileinfo</name>
- <summary>libmagic bindings</summary>
- <maintainers>
- <maintainer>
- <user>iliaa</user>
- <name>Ilia Alshanetsky</name>
- <email>ilia@php.net</email>
- <role>lead</role>
- </maintainer>
- </maintainers>
- <description>
-This extension allows retrieval of information regarding vast majority of file.
-This information may include dimensions, quality, length etc...
-
-Additionally it can also be used to retrieve the mime type for a particular
-file and for text files proper language encoding.
- </description>
- <license>PHP</license>
- <release>
- <state>beta</state>
- <version>0.2</version>
- <date>2004-05-26</date>
- <notes>
- Fixed bug that caused PHP to refuse to recognize fileinfo.so.
- </notes>
- <filelist>
- <file role="src" name="config.m4"/>
- <file role="src" name="fileinfo.c"/>
- <file role="src" name="php_fileinfo.h"/>
- <file role="doc" name="CREDITS"/>
- <file role="doc" name="EXPERIMENTAL"/>
- <file role="doc" name="fileinfo.php"/>
- </filelist>
- <deps>
- </deps>
- </release>
-</package>
-<!--
-vim:et:ts=1:sw=1
--->
diff --git a/ext/fileinfo/php_fileinfo.h b/ext/fileinfo/php_fileinfo.h
deleted file mode 100644
index 66c562172d..0000000000
--- a/ext/fileinfo/php_fileinfo.h
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Ilia Alshanetsky <ilia@php.net> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifndef PHP_FILEINFO_H
-#define PHP_FILEINFO_H
-
-extern zend_module_entry fileinfo_module_entry;
-#define phpext_fileinfo_ptr &fileinfo_module_entry
-
-#ifdef PHP_WIN32
-#define PHP_FILEINFO_API __declspec(dllexport)
-#else
-#define PHP_FILEINFO_API
-#endif
-
-#ifdef ZTS
-#include "TSRM.h"
-#endif
-
-PHP_MINFO_FUNCTION(fileinfo);
-
-PHP_FUNCTION(finfo_open);
-PHP_FUNCTION(finfo_close);
-PHP_FUNCTION(finfo_set_flags);
-PHP_FUNCTION(finfo_file);
-PHP_FUNCTION(finfo_buffer);
-
-#ifdef ZTS
-#define FILEINFO_G(v) TSRMG(fileinfo_globals_id, zend_fileinfo_globals *, v)
-#else
-#define FILEINFO_G(v) (fileinfo_globals.v)
-#endif
-
-#endif /* PHP_FILEINFO_H */
-
-
-/*
- * 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/filepro/CREDITS b/ext/filepro/CREDITS
deleted file mode 100644
index c272432c04..0000000000
--- a/ext/filepro/CREDITS
+++ /dev/null
@@ -1,2 +0,0 @@
-FilePro
-Chad Robinson
diff --git a/ext/filepro/config.m4 b/ext/filepro/config.m4
deleted file mode 100644
index 6222bfba2f..0000000000
--- a/ext/filepro/config.m4
+++ /dev/null
@@ -1,11 +0,0 @@
-dnl
-dnl $Id$
-dnl
-
-PHP_ARG_ENABLE(filepro,whether to enable the bundled filePro support,
-[ --enable-filepro Enable the bundled read-only filePro support.])
-
-if test "$PHP_FILEPRO" = "yes"; then
- AC_DEFINE(HAVE_FILEPRO, 1, [ ])
- PHP_NEW_EXTENSION(filepro, filepro.c, $ext_shared)
-fi
diff --git a/ext/filepro/config.w32 b/ext/filepro/config.w32
deleted file mode 100644
index 06848c7767..0000000000
--- a/ext/filepro/config.w32
+++ /dev/null
@@ -1,9 +0,0 @@
-// $Id$
-// vim:ft=javascript
-
-ARG_ENABLE("filepro", "Enable the bundled read-only filePro support.", "no");
-
-if (PHP_FILEPRO != "no") {
- EXTENSION("filepro", "filepro.c");
- AC_DEFINE('HAVE_FILEPRO', 1, 'filepro support');
-}
diff --git a/ext/filepro/filepro.c b/ext/filepro/filepro.c
deleted file mode 100644
index 2821c9aa16..0000000000
--- a/ext/filepro/filepro.c
+++ /dev/null
@@ -1,572 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Chad Robinson <chadr@brttech.com> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-/*
- filePro 4.x support developed by Chad Robinson, chadr@brttech.com
- Contact Chad Robinson at BRT Technical Services Corp. for details.
- filePro is a registered trademark by Fiserv, Inc. This file contains
- no code or information that is not freely available from the filePro
- web site at http://www.fileproplus.com/
-*/
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "php.h"
-#include "safe_mode.h"
-#include "fopen_wrappers.h"
-#include <string.h>
-#if HAVE_SYS_PARAM_H
-#include <sys/param.h>
-#endif
-#include <errno.h>
-#include "php_globals.h"
-
-#include "php_filepro.h"
-#if HAVE_FILEPRO
-
-typedef struct fp_field {
- char *name;
- char *format;
- int width;
- struct fp_field *next;
-} FP_FIELD;
-
-#ifdef THREAD_SAFE
-DWORD FPTls;
-static int numthreads=0;
-
-typedef struct fp_global_struct{
- char *fp_database;
- signed int fp_fcount;
- signed int fp_keysize;
- FP_FIELD *fp_fieldlist;
-}fp_global_struct;
-
-#define FP_GLOBAL(a) fp_globals->a
-
-#define FP_TLS_VARS \
- fp_global_struct *fp_globals; \
- fp_globals=TlsGetValue(FPTls);
-
-#else
-#define FP_GLOBAL(a) a
-#define FP_TLS_VARS
-static char *fp_database = NULL; /* Database directory */
-static signed int fp_fcount = -1; /* Column count */
-static signed int fp_keysize = -1; /* Size of key records */
-static FP_FIELD *fp_fieldlist = NULL; /* List of fields */
-#endif
-
-/* {{{ PHP_MINIT_FUNCTION
- */
-PHP_MINIT_FUNCTION(filepro)
-{
-#ifdef THREAD_SAFE
- fp_global_struct *fp_globals;
-#ifdef COMPILE_DL_FILEPRO
- CREATE_MUTEX(fp_mutex,"FP_TLS");
- SET_MUTEX(fp_mutex);
- numthreads++;
- if (numthreads==1){
- if ((FPTls=TlsAlloc())==0xFFFFFFFF){
- FREE_MUTEX(fp_mutex);
- return 0;
- }}
- FREE_MUTEX(fp_mutex);
-#endif
- fp_globals = (fp_global_struct *) LocalAlloc(LPTR, sizeof(fp_global_struct));
- TlsSetValue(FPTls, (void *) fp_globals);
-#endif
- FP_GLOBAL(fp_database)=NULL;
- FP_GLOBAL(fp_fcount)=-1;
- FP_GLOBAL(fp_keysize)=-1;
- FP_GLOBAL(fp_fieldlist)=NULL;
-
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ PHP_MSHUTDOWN_FUNCTION
- */
-PHP_MSHUTDOWN_FUNCTION(filepro)
-{
-#ifdef THREAD_SAFE
- fp_global_struct *fp_globals;
- fp_globals = TlsGetValue(FPTls);
- if (fp_globals != 0)
- LocalFree((HLOCAL) fp_globals);
-#ifdef COMPILE_DL_FILEPRO
- SET_MUTEX(fp_mutex);
- numthreads--;
- if (!numthreads){
- if (!TlsFree(FPTls)){
- FREE_MUTEX(fp_mutex);
- return 0;
- }
- }
- FREE_MUTEX(fp_mutex);
-#endif
-#endif
- return SUCCESS;
-}
-/* }}} */
-
-function_entry filepro_functions[] = {
- PHP_FE(filepro, NULL)
- PHP_FE(filepro_rowcount, NULL)
- PHP_FE(filepro_fieldname, NULL)
- PHP_FE(filepro_fieldtype, NULL)
- PHP_FE(filepro_fieldwidth, NULL)
- PHP_FE(filepro_fieldcount, NULL)
- PHP_FE(filepro_retrieve, NULL)
- {NULL, NULL, NULL}
-};
-
-zend_module_entry filepro_module_entry = {
- STANDARD_MODULE_HEADER,
- "filepro", filepro_functions, PHP_MINIT(filepro), PHP_MSHUTDOWN(filepro), NULL, NULL, NULL, NO_VERSION_YET, STANDARD_MODULE_PROPERTIES
-};
-
-
-#ifdef COMPILE_DL_FILEPRO
-ZEND_GET_MODULE(filepro)
-#if defined(PHP_WIN32) && defined(THREAD_SAFE)
-
-/*NOTE: You should have an odbc.def file where you
-export DllMain*/
-BOOL WINAPI DllMain(HANDLE hModule,
- DWORD ul_reason_for_call,
- LPVOID lpReserved)
-{
- switch( ul_reason_for_call ) {
- case DLL_PROCESS_ATTACH:
- if ((FPTls=TlsAlloc())==0xFFFFFFFF) {
- return 0;
- }
- break;
- case DLL_THREAD_ATTACH:
- break;
- case DLL_THREAD_DETACH:
- break;
- case DLL_PROCESS_DETACH:
- if (!TlsFree(FPTls)) {
- return 0;
- }
- break;
- }
- return 1;
-}
-#endif
-#endif
-
-/*
- * LONG filePro(STRING directory)
- *
- * Read and verify the map file. We store the field count and field info
- * internally, which means we become unstable if you modify the table while
- * a user is using it! We cannot lock anything since Web connections don't
- * provide the ability to later unlock what we locked. Be smart, be safe.
- */
-/* {{{ proto bool filepro(string directory)
- Read and verify the map file */
-PHP_FUNCTION(filepro)
-{
- zval **dir;
- FILE *fp;
- char workbuf[MAXPATHLEN];
- char readbuf[256];
- char *strtok_buf = NULL;
- int i;
- FP_FIELD *new_field, *tmp, *next;
- FP_TLS_VARS;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &dir) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_string_ex(dir);
-
- /* free memory */
- if (FP_GLOBAL(fp_database) != NULL) {
- efree (FP_GLOBAL(fp_database));
- }
-
- /* free linked list of fields */
- tmp = FP_GLOBAL(fp_fieldlist);
- while (tmp != NULL) {
- next = tmp->next;
- efree(tmp);
- tmp = next;
- }
-
- /* init the global vars */
- FP_GLOBAL(fp_database) = NULL;
- FP_GLOBAL(fp_fieldlist) = NULL;
- FP_GLOBAL(fp_fcount) = -1;
- FP_GLOBAL(fp_keysize) = -1;
-
- snprintf(workbuf, sizeof(workbuf), "%s/map", Z_STRVAL_PP(dir));
-
- if (PG(safe_mode) && (!php_checkuid(workbuf, NULL, CHECKUID_CHECK_FILE_AND_DIR))) {
- RETURN_FALSE;
- }
-
- if (php_check_open_basedir(workbuf TSRMLS_CC)) {
- RETURN_FALSE;
- }
-
- if (!(fp = VCWD_FOPEN(workbuf, "r"))) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Cannot open map: [%d] %s", errno, strerror(errno));
- RETURN_FALSE;
- }
- if (!fgets(readbuf, sizeof(readbuf), fp)) {
- fclose(fp);
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Cannot read map: [%d] %s", errno, strerror(errno));
- RETURN_FALSE;
- }
-
- /* Get the field count, assume the file is readable! */
- if (strcmp(php_strtok_r(readbuf, ":", &strtok_buf), "map")) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Map file corrupt or encrypted");
- RETURN_FALSE;
- }
- FP_GLOBAL(fp_keysize) = atoi(php_strtok_r(NULL, ":", &strtok_buf));
- php_strtok_r(NULL, ":", &strtok_buf);
- FP_GLOBAL(fp_fcount) = atoi(php_strtok_r(NULL, ":", &strtok_buf));
-
- /* Read in the fields themselves */
- for (i = 0; i < FP_GLOBAL(fp_fcount); i++) {
- if (!fgets(readbuf, sizeof(readbuf), fp)) {
- fclose(fp);
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Cannot read map: [%d] %s", errno, strerror(errno));
- RETURN_FALSE;
- }
- new_field = emalloc(sizeof(FP_FIELD));
- new_field->next = NULL;
- new_field->name = estrdup(php_strtok_r(readbuf, ":", &strtok_buf));
- new_field->width = atoi(php_strtok_r(NULL, ":", &strtok_buf));
- new_field->format = estrdup(php_strtok_r(NULL, ":", &strtok_buf));
-
- /* Store in forward-order to save time later */
- if (!FP_GLOBAL(fp_fieldlist)) {
- FP_GLOBAL(fp_fieldlist) = new_field;
- } else {
- for (tmp = FP_GLOBAL(fp_fieldlist); tmp; tmp = tmp->next) {
- if (!tmp->next) {
- tmp->next = new_field;
- tmp = new_field;
- }
- }
- }
- }
- fclose(fp);
-
- FP_GLOBAL(fp_database) = estrndup(Z_STRVAL_PP(dir), Z_STRLEN_PP(dir));
-
- RETVAL_TRUE;
-}
-/* }}} */
-
-
-/*
- * LONG filePro_rowcount(void)
- *
- * Count the used rows in the database. filePro just marks deleted records
- * as deleted; they are not removed. Since no counts are maintained we need
- * to go in and count records ourselves. <sigh>
- *
- * Errors return false, success returns the row count.
- */
-/* {{{ proto int filepro_rowcount(void)
- Find out how many rows are in a filePro database */
-PHP_FUNCTION(filepro_rowcount)
-{
- FILE *fp;
- char workbuf[MAXPATHLEN];
- char readbuf[256];
- int recsize = 0, records = 0;
- FP_TLS_VARS;
-
- if (ZEND_NUM_ARGS() != 0) {
- WRONG_PARAM_COUNT;
- }
-
- if (!FP_GLOBAL(fp_database)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Must set database directory first!");
- RETURN_FALSE;
- }
-
- recsize = FP_GLOBAL(fp_keysize) + 19; /* 20 bytes system info -1 to save time later */
-
- /* Now read the records in, moving forward recsize-1 bytes each time */
- snprintf(workbuf, sizeof(workbuf), "%s/key", FP_GLOBAL(fp_database));
-
- if (PG(safe_mode) && (!php_checkuid(workbuf, NULL, CHECKUID_CHECK_FILE_AND_DIR))) {
- RETURN_FALSE;
- }
-
- if (php_check_open_basedir(workbuf TSRMLS_CC)) {
- RETURN_FALSE;
- }
-
- if (!(fp = VCWD_FOPEN(workbuf, "r"))) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Cannot open key: [%d] %s", errno, strerror(errno));
- RETURN_FALSE;
- }
- while (!feof(fp)) {
- if (fread(readbuf, 1, 1, fp) == 1) {
- if (readbuf[0])
- records++;
- fseek(fp, recsize, SEEK_CUR);
- }
- }
- fclose(fp);
-
- RETVAL_LONG(records);
-}
-/* }}} */
-
-
-/*
- * STRING filePro_fieldname(LONG field_number)
- *
- * Errors return false, success returns the name of the field.
- */
-/* {{{ proto string filepro_fieldname(int fieldnumber)
- Gets the name of a field */
-PHP_FUNCTION(filepro_fieldname)
-{
- zval **fno;
- FP_FIELD *lp;
- int i;
- FP_TLS_VARS;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &fno) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long_ex(fno);
-
- if (!FP_GLOBAL(fp_database)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Must set database directory first!");
- RETURN_FALSE;
- }
-
- for (i = 0, lp = FP_GLOBAL(fp_fieldlist); lp; lp = lp->next, i++) {
- if (i == Z_LVAL_PP(fno)) {
- RETURN_STRING(lp->name, 1);
- }
- }
-
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to locate field number %ld.", Z_LVAL_PP(fno));
-
- RETVAL_FALSE;
-}
-/* }}} */
-
-
-/*
- * STRING filePro_fieldtype(LONG field_number)
- *
- * Errors return false, success returns the type (edit) of the field
- */
-/* {{{ proto string filepro_fieldtype(int field_number)
- Gets the type of a field */
-PHP_FUNCTION(filepro_fieldtype)
-{
- zval **fno;
- FP_FIELD *lp;
- int i;
- FP_TLS_VARS;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &fno) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long_ex(fno);
-
- if (!FP_GLOBAL(fp_database)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Must set database directory first!");
- RETURN_FALSE;
- }
-
- for (i = 0, lp = FP_GLOBAL(fp_fieldlist); lp; lp = lp->next, i++) {
- if (i == Z_LVAL_PP(fno)) {
- RETURN_STRING(lp->format, 1);
- }
- }
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to locate field number %ld.", Z_LVAL_PP(fno));
- RETVAL_FALSE;
-}
-/* }}} */
-
-
-/*
- * STRING filePro_fieldwidth(int field_number)
- *
- * Errors return false, success returns the character width of the field.
- */
-/* {{{ proto int filepro_fieldwidth(int field_number)
- Gets the width of a field */
-PHP_FUNCTION(filepro_fieldwidth)
-{
- zval **fno;
- FP_FIELD *lp;
- int i;
- FP_TLS_VARS;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &fno) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long_ex(fno);
-
- if (!FP_GLOBAL(fp_database)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Must set database directory first!");
- RETURN_FALSE;
- }
-
- for (i = 0, lp = FP_GLOBAL(fp_fieldlist); lp; lp = lp->next, i++) {
- if (i == Z_LVAL_PP(fno)) {
- RETURN_LONG(lp->width);
- }
- }
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to locate field number %ld.", Z_LVAL_PP(fno));
- RETVAL_FALSE;
-}
-/* }}} */
-
-
-/*
- * LONG filePro_fieldcount(void)
- *
- * Errors return false, success returns the field count.
- */
-/* {{{ proto int filepro_fieldcount(void)
- Find out how many fields are in a filePro database */
-PHP_FUNCTION(filepro_fieldcount)
-{
- FP_TLS_VARS;
-
- if (ZEND_NUM_ARGS() != 0) {
- WRONG_PARAM_COUNT;
- }
-
- if (!FP_GLOBAL(fp_database)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Must set database directory first!");
- RETURN_FALSE;
- }
-
- /* Read in the first line from the map file */
- RETVAL_LONG(FP_GLOBAL(fp_fcount));
-}
-/* }}} */
-
-
-/*
- * STRING filePro_retrieve(int row_number, int field_number)
- *
- * Errors return false, success returns the datum.
- */
-/* {{{ proto string filepro_retrieve(int row_number, int field_number)
- Retrieves data from a filePro database */
-PHP_FUNCTION(filepro_retrieve)
-{
- zval **rno, **fno;
- FP_FIELD *lp;
- FILE *fp;
- char workbuf[MAXPATHLEN];
- char *readbuf;
- int i, fnum, rnum;
- long offset;
- FP_TLS_VARS;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &rno, &fno) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- if (!FP_GLOBAL(fp_database)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Must set database directory first!");
- RETURN_FALSE;
- }
-
- convert_to_long_ex(rno);
- convert_to_long_ex(fno);
-
- fnum = Z_LVAL_PP(fno);
- rnum = Z_LVAL_PP(rno);
-
- if (rnum < 0 || fnum < 0 || fnum >= FP_GLOBAL(fp_fcount)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Parameters out of range");
- RETURN_FALSE;
- }
-
- offset = (rnum + 1) * (FP_GLOBAL(fp_keysize) + 20) + 20; /* Record location */
- for (i = 0, lp = FP_GLOBAL(fp_fieldlist); lp && i < fnum; lp = lp->next, i++) {
- offset += lp->width;
- }
- if (!lp) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Cannot locate field");
- RETURN_FALSE;
- }
-
- /* Now read the record in */
- snprintf(workbuf, sizeof(workbuf), "%s/key", FP_GLOBAL(fp_database));
-
- if (PG(safe_mode) && (!php_checkuid(workbuf, NULL, CHECKUID_CHECK_FILE_AND_DIR))) {
- RETURN_FALSE;
- }
-
- if (php_check_open_basedir(workbuf TSRMLS_CC)) {
- RETURN_FALSE;
- }
-
- if (!(fp = VCWD_FOPEN(workbuf, "r"))) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Cannot open key: [%d] %s", errno, strerror(errno));
- fclose(fp);
- RETURN_FALSE;
- }
- fseek(fp, offset, SEEK_SET);
-
- readbuf = emalloc (lp->width+1);
- if (fread(readbuf, lp->width, 1, fp) != 1) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Cannot read data: [%d] %s", errno, strerror(errno));
- efree(readbuf);
- fclose(fp);
- RETURN_FALSE;
- }
- readbuf[lp->width] = '\0';
- fclose(fp);
- RETURN_STRING(readbuf, 0);
-}
-/* }}} */
-
-#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/filepro/filepro.dsp b/ext/filepro/filepro.dsp
deleted file mode 100644
index af9d7f2c15..0000000000
--- a/ext/filepro/filepro.dsp
+++ /dev/null
@@ -1,109 +0,0 @@
-# Microsoft Developer Studio Project File - Name="filepro" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=filepro - Win32 Release_TS
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "filepro.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "filepro.mak" CFG="filepro - Win32 Release_TS"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "filepro - Win32 Release_TS" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "filepro - Win32 Debug_TS" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "filepro - Win32 Release_TS"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release_TS"
-# PROP BASE Intermediate_Dir "Release_TS"
-# PROP BASE Ignore_Export_Lib 0
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release_TS"
-# PROP Intermediate_Dir "Release_TS"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MT /W3 /GX /O2 /I "..\.." /I "..\..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\..\TSRM" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "COMPILE_DL_FILEPRO" /D ZTS=1 /YX /FD /c
-# ADD CPP /nologo /MD /W3 /GX /O2 /I "..\.." /I "..\..\main" /I "..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\TSRM" /D ZEND_DEBUG=0 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "FILEPRO_EXPORTS" /D "COMPILE_DL_FILEPRO" /D ZTS=1 /D "ZEND_WIN32" /D "PHP_WIN32" /D HAVE_FILEPRO=1 /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x406 /d "NDEBUG"
-# ADD RSC /l 0x406 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib php5ts.lib /nologo /dll /machine:I386
-# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib php5ts.lib /nologo /dll /machine:I386 /out:"..\..\Release_TS/php_filepro.dll" /libpath:"..\..\Release_TS" /libpath:"..\..\Release_TS_Inline"
-
-!ELSEIF "$(CFG)" == "filepro - Win32 Debug_TS"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Debug_TS"
-# PROP BASE Intermediate_Dir "Debug_TS"
-# PROP BASE Ignore_Export_Lib 0
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Debug_TS"
-# PROP Intermediate_Dir "Debug_TS"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MT /W3 /GX /O2 /I "..\.." /I "..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\TSRM" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "COMPILE_DL_FILEPRO" /D ZTS=1 /YX /FD /c
-# ADD CPP /nologo /MDd /W3 /GX /O2 /I "..\.." /I "..\..\main" /I "..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\TSRM" /D ZEND_DEBUG=1 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "FILEPRO_EXPORTS" /D "COMPILE_DL_FILEPRO" /D ZTS=1 /D "ZEND_WIN32" /D "PHP_WIN32" /D HAVE_FILEPRO=1 /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x406 /d "NDEBUG"
-# ADD RSC /l 0x406 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib php5ts.lib /nologo /dll /machine:I386
-# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib php5ts_debug.lib /nologo /dll /machine:I386 /out:"..\..\Debug_TS/php_filepro.dll" /libpath:"..\..\Debug_TS"
-
-!ENDIF
-
-# Begin Target
-
-# Name "filepro - Win32 Release_TS"
-# Name "filepro - Win32 Debug_TS"
-# Begin Group "Source Files"
-
-# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
-# Begin Source File
-
-SOURCE=.\filepro.c
-# End Source File
-# End Group
-# Begin Group "Header Files"
-
-# PROP Default_Filter "h;hpp;hxx;hm;inl"
-# Begin Source File
-
-SOURCE=.\php_filepro.h
-# End Source File
-# End Group
-# End Target
-# End Project
diff --git a/ext/filepro/package.xml b/ext/filepro/package.xml
deleted file mode 100644
index b1d342fc94..0000000000
--- a/ext/filepro/package.xml
+++ /dev/null
@@ -1,40 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1" ?>
-<!DOCTYPE package SYSTEM "../pear/package.dtd">
-<package>
- <name>filepro</name>
- <summary>filePor database access functions/summary>
- <maintainers>
- <maintainer>
- <user>???</user>
- <name> Chad Robinson</name>
- <email>chadr@brttech.com</email>
- <role>lead</role>
- </maintainer>
- </maintainers>
- <description>
-These functions allow read-only access to data stored in filePro databases.
- </description>
- <license>PHP</license>
- <release>
- <state>beta</state>
- <version>5.0.0rc1</version>
- <date>2004-03-19</date>
- <notes>
-package.xml added to support intallation using pear installer
- </notes>
- <filelist>
- <file role="doc" name="CREDITS"/>
- <file role="src" name="config.m4"/>
- <file role="src" name="config.w32"/>
- <file role="src" name="filepro.dsp"/>
- <file role="src" name="filepro.c"/>
- <file role="src" name="php_filepro.h"/>
- </filelist>
- <deps>
- <dep type="php" rel="ge" version="5" />
- </deps>
- </release>
-</package>
-<!--
-vim:et:ts=1:sw=1
--->
diff --git a/ext/filepro/php_filepro.h b/ext/filepro/php_filepro.h
deleted file mode 100644
index 31a72c4641..0000000000
--- a/ext/filepro/php_filepro.h
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Chad Robinson <chadr@brttech.com> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-/*
- filePro 4.x support developed by Chad Robinson, chadr@brttech.com
- Contact Chad Robinson at BRT Technical Services Corp. for details.
- filePro is a registered trademark by Fiserv, Inc. This file contains
- no code or information that is not freely available from the filePro
- web site at http://www.fileproplus.com/
-*/
-
-#ifndef PHP_FILEPRO_H
-#define PHP_FILEPRO_H
-#if HAVE_FILEPRO
-extern zend_module_entry filepro_module_entry;
-#define phpext_filepro_ptr &filepro_module_entry
-
-PHP_FUNCTION(filepro);
-PHP_FUNCTION(filepro_rowcount);
-PHP_FUNCTION(filepro_fieldname);
-PHP_FUNCTION(filepro_fieldtype);
-PHP_FUNCTION(filepro_fieldwidth);
-PHP_FUNCTION(filepro_fieldcount);
-PHP_FUNCTION(filepro_retrieve);
-
-PHP_MINIT_FUNCTION(filepro);
-PHP_MSHUTDOWN_FUNCTION(filepro);
-#else
-#define phpext_filepro_ptr NULL
-#endif
-#endif /* PHP_FILEPRO_H */
diff --git a/ext/ftp/CREDITS b/ext/ftp/CREDITS
deleted file mode 100644
index bf0920ad80..0000000000
--- a/ext/ftp/CREDITS
+++ /dev/null
@@ -1,2 +0,0 @@
-FTP
-Stefan Esser, Andrew Skalski
diff --git a/ext/ftp/config.m4 b/ext/ftp/config.m4
deleted file mode 100644
index 3b5f3fd641..0000000000
--- a/ext/ftp/config.m4
+++ /dev/null
@@ -1,11 +0,0 @@
-dnl
-dnl $Id$
-dnl
-
-PHP_ARG_ENABLE(ftp,whether to enable FTP support,
-[ --enable-ftp Enable FTP support])
-
-if test "$PHP_FTP" = "yes"; then
- AC_DEFINE(HAVE_FTP,1,[Whether you want FTP support])
- PHP_NEW_EXTENSION(ftp, php_ftp.c ftp.c, $ext_shared)
-fi
diff --git a/ext/ftp/config.w32 b/ext/ftp/config.w32
deleted file mode 100644
index c91e350a86..0000000000
--- a/ext/ftp/config.w32
+++ /dev/null
@@ -1,9 +0,0 @@
-// $Id$
-// vim:ft=javascript
-
-ARG_ENABLE("ftp", "ftp support", "yes");
-
-if (PHP_FTP == "yes") {
- EXTENSION("ftp", "php_ftp.c ftp.c");
- AC_DEFINE('HAVE_FTP', 1, 'Have FTP support');
-}
diff --git a/ext/ftp/ftp.c b/ext/ftp/ftp.c
deleted file mode 100644
index 687dd19f0c..0000000000
--- a/ext/ftp/ftp.c
+++ /dev/null
@@ -1,1969 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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. |
- +----------------------------------------------------------------------+
- | Authors: Andrew Skalski <askalski@chek.com> |
- | Stefan Esser <sesser@php.net> (resume functions) |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "php.h"
-
-#if HAVE_FTP
-
-#include <stdio.h>
-#include <ctype.h>
-#include <stdlib.h>
-#ifdef HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-#include <fcntl.h>
-#include <string.h>
-#include <time.h>
-#ifdef PHP_WIN32
-#include <winsock2.h>
-#elif defined(NETWARE)
-#ifdef USE_WINSOCK /* Modified to use Winsock (NOVSOCK2.H), atleast for now */
-#include <novsock2.h>
-#else
-#ifdef NEW_LIBC
-#include <sys/socket.h>
-#include <netinet/in.h>
-#include <netdb.h>
-#else
-#include <sys/socket.h>
-#endif
-#endif
-#else
-#ifdef HAVE_SYS_TYPES_H
-#include <sys/types.h>
-#endif
-#include <sys/socket.h>
-#include <netinet/in.h>
-#include <arpa/inet.h>
-#include <netdb.h>
-#endif
-#include <errno.h>
-
-#if HAVE_SYS_TIME_H
-#include <sys/time.h>
-#endif
-
-#ifdef HAVE_SYS_SELECT_H
-#include <sys/select.h>
-#endif
-
-#if HAVE_OPENSSL_EXT
-#include <openssl/ssl.h>
-#endif
-
-#include "ftp.h"
-#include "ext/standard/fsock.h"
-
-/* Additional headers for NetWare */
-#if defined(NETWARE) && defined(NEW_LIBC) && !defined(USE_WINSOCK)
-#include <sys/select.h>
-#endif
-
-/* sends an ftp command, returns true on success, false on error.
- * it sends the string "cmd args\r\n" if args is non-null, or
- * "cmd\r\n" if args is null
- */
-static int ftp_putcmd( ftpbuf_t *ftp,
- const char *cmd,
- const char *args);
-
-/* wrapper around send/recv to handle timeouts */
-static int my_send(ftpbuf_t *ftp, php_socket_t s, void *buf, size_t len);
-static int my_recv(ftpbuf_t *ftp, php_socket_t s, void *buf, size_t len);
-static int my_accept(ftpbuf_t *ftp, php_socket_t s, struct sockaddr *addr, socklen_t *addrlen);
-
-/* reads a line the socket , returns true on success, false on error */
-static int ftp_readline(ftpbuf_t *ftp);
-
-/* reads an ftp response, returns true on success, false on error */
-static int ftp_getresp(ftpbuf_t *ftp);
-
-/* sets the ftp transfer type */
-static int ftp_type(ftpbuf_t *ftp, ftptype_t type);
-
-/* opens up a data stream */
-static databuf_t* ftp_getdata(ftpbuf_t *ftp TSRMLS_DC);
-
-/* accepts the data connection, returns updated data buffer */
-static databuf_t* data_accept(databuf_t *data, ftpbuf_t *ftp TSRMLS_DC);
-
-/* closes the data connection, returns NULL */
-static databuf_t* data_close(ftpbuf_t *ftp, databuf_t *data);
-
-/* generic file lister */
-static char** ftp_genlist(ftpbuf_t *ftp, const char *cmd, const char *path TSRMLS_DC);
-
-/* IP and port conversion box */
-union ipbox {
- struct in_addr ia[2];
- unsigned short s[4];
- unsigned char c[8];
-};
-
-/* {{{ ftp_open
- */
-ftpbuf_t*
-ftp_open(const char *host, short port, long timeout_sec TSRMLS_DC)
-{
- ftpbuf_t *ftp;
- socklen_t size;
- struct timeval tv;
-
-
- /* alloc the ftp structure */
- ftp = ecalloc(1, sizeof(*ftp));
-
- tv.tv_sec = timeout_sec;
- tv.tv_usec = 0;
-
- ftp->fd = php_network_connect_socket_to_host(host,
- (unsigned short) (port ? port : 21), SOCK_STREAM,
- 0, &tv, NULL, NULL TSRMLS_CC);
- if (ftp->fd == -1) {
- goto bail;
- }
-
- /* Default Settings */
- ftp->timeout_sec = timeout_sec;
- ftp->nb = 0;
-
- size = sizeof(ftp->localaddr);
- memset(&ftp->localaddr, 0, size);
- if (getsockname(ftp->fd, (struct sockaddr*) &ftp->localaddr, &size) == -1) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "getsockname failed: %s (%d)\n", strerror(errno), errno);
- goto bail;
- }
-
- if (!ftp_getresp(ftp) || ftp->resp != 220) {
- goto bail;
- }
-
- return ftp;
-
-bail:
- if (ftp->fd != -1) {
- closesocket(ftp->fd);
- }
- efree(ftp);
- return NULL;
-}
-/* }}} */
-
-/* {{{ ftp_close
- */
-ftpbuf_t*
-ftp_close(ftpbuf_t *ftp)
-{
- if (ftp == NULL) {
- return NULL;
- }
- if (ftp->data) {
- data_close(ftp, ftp->data);
- }
- if (ftp->fd != -1) {
-#if HAVE_OPENSSL_EXT
- if (ftp->ssl_active) {
- SSL_shutdown(ftp->ssl_handle);
- }
-#endif
- closesocket(ftp->fd);
- }
- ftp_gc(ftp);
- efree(ftp);
- return NULL;
-}
-/* }}} */
-
-/* {{{ ftp_gc
- */
-void
-ftp_gc(ftpbuf_t *ftp)
-{
- if (ftp == NULL) {
- return;
- }
- if (ftp->pwd) {
- efree(ftp->pwd);
- ftp->pwd = NULL;
- }
- if (ftp->syst) {
- efree(ftp->syst);
- ftp->syst = NULL;
- }
-}
-/* }}} */
-
-/* {{{ ftp_quit
- */
-int
-ftp_quit(ftpbuf_t *ftp)
-{
- if (ftp == NULL) {
- return 0;
- }
-
- if (!ftp_putcmd(ftp, "QUIT", NULL)) {
- return 0;
- }
- if (!ftp_getresp(ftp) || ftp->resp != 221) {
- return 0;
- }
-
- if (ftp->pwd) {
- efree(ftp->pwd);
- ftp->pwd = NULL;
- }
-
- return 1;
-}
-/* }}} */
-
-/* {{{ ftp_login
- */
-int
-ftp_login(ftpbuf_t *ftp, const char *user, const char *pass TSRMLS_DC)
-{
-#if HAVE_OPENSSL_EXT
- SSL_CTX *ctx = NULL;
-#endif
- if (ftp == NULL) {
- return 0;
- }
-
-#if HAVE_OPENSSL_EXT
- if (ftp->use_ssl && !ftp->ssl_active) {
- if (!ftp_putcmd(ftp, "AUTH", "TLS")) {
- return 0;
- }
- if (!ftp_getresp(ftp)) {
- return 0;
- }
-
- if (ftp->resp != 234) {
- if (!ftp_putcmd(ftp, "AUTH", "SSL")) {
- return 0;
- }
- if (!ftp_getresp(ftp)) {
- return 0;
- }
-
- if (ftp->resp != 334) {
- ftp->use_ssl = 0;
- } else {
- ftp->old_ssl = 1;
- ftp->use_ssl_for_data = 1;
- }
- }
-
- /* now enable ssl if we still need to */
- if (ftp->use_ssl) {
- ctx = SSL_CTX_new(SSLv23_client_method());
- if (ctx == NULL) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "failed to create the SSL context");
- return 0;
- }
-
- ftp->ssl_handle = SSL_new(ctx);
- if (ftp->ssl_handle == NULL) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "failed to create the SSL handle");
- SSL_CTX_free(ctx);
- return 0;
- }
-
- SSL_set_fd(ftp->ssl_handle, ftp->fd);
-
- if (SSL_connect(ftp->ssl_handle) <= 0) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "SSL/TLS handshake failed");
- SSL_shutdown(ftp->ssl_handle);
- return 0;
- }
-
- ftp->ssl_active = 1;
-
- if (!ftp->old_ssl) {
-
- /* set protection buffersize to zero */
- if (!ftp_putcmd(ftp, "PBSZ", "0")) {
- return 0;
- }
- if (!ftp_getresp(ftp)) {
- return 0;
- }
-
- /* enable data conn encryption */
- if (!ftp_putcmd(ftp, "PROT", "P")) {
- return 0;
- }
- if (!ftp_getresp(ftp)) {
- return 0;
- }
-
- ftp->use_ssl_for_data = (ftp->resp >= 200 && ftp->resp <=299);
- }
- }
- }
-#endif
-
- if (!ftp_putcmd(ftp, "USER", user)) {
- return 0;
- }
- if (!ftp_getresp(ftp)) {
- return 0;
- }
- if (ftp->resp == 230) {
- return 1;
- }
- if (ftp->resp != 331) {
- return 0;
- }
- if (!ftp_putcmd(ftp, "PASS", pass)) {
- return 0;
- }
- if (!ftp_getresp(ftp)) {
- return 0;
- }
- return (ftp->resp == 230);
-}
-/* }}} */
-
-/* {{{ ftp_reinit
- */
-int
-ftp_reinit(ftpbuf_t *ftp)
-{
- if (ftp == NULL) {
- return 0;
- }
-
- ftp_gc(ftp);
-
- ftp->nb = 0;
-
- if (!ftp_putcmd(ftp, "REIN", NULL)) {
- return 0;
- }
- if (!ftp_getresp(ftp) || ftp->resp != 220) {
- return 0;
- }
-
- return 1;
-}
-/* }}} */
-
-/* {{{ ftp_syst
- */
-const char*
-ftp_syst(ftpbuf_t *ftp)
-{
- char *syst, *end;
-
- if (ftp == NULL) {
- return NULL;
- }
-
- /* default to cached value */
- if (ftp->syst) {
- return ftp->syst;
- }
- if (!ftp_putcmd(ftp, "SYST", NULL)) {
- return NULL;
- }
- if (!ftp_getresp(ftp) || ftp->resp != 215) {
- return NULL;
- }
- syst = ftp->inbuf;
- while (*syst == ' ') {
- syst++;
- }
- if ((end = strchr(syst, ' '))) {
- *end = 0;
- }
- ftp->syst = estrdup(syst);
- if (end) {
- *end = ' ';
- }
- return ftp->syst;
-}
-/* }}} */
-
-/* {{{ ftp_pwd
- */
-const char*
-ftp_pwd(ftpbuf_t *ftp)
-{
- char *pwd, *end;
-
- if (ftp == NULL) {
- return NULL;
- }
-
- /* default to cached value */
- if (ftp->pwd) {
- return ftp->pwd;
- }
- if (!ftp_putcmd(ftp, "PWD", NULL)) {
- return NULL;
- }
- if (!ftp_getresp(ftp) || ftp->resp != 257) {
- return NULL;
- }
- /* copy out the pwd from response */
- if ((pwd = strchr(ftp->inbuf, '"')) == NULL) {
- return NULL;
- }
- if ((end = strrchr(++pwd, '"')) == NULL) {
- return NULL;
- }
- ftp->pwd = estrndup(pwd, end - pwd);
-
- return ftp->pwd;
-}
-/* }}} */
-
-/* {{{ ftp_exec
- */
-int
-ftp_exec(ftpbuf_t *ftp, const char *cmd)
-{
- if (ftp == NULL) {
- return 0;
- }
- if (!ftp_putcmd(ftp, "SITE EXEC", cmd)) {
- return 0;
- }
- if (!ftp_getresp(ftp) || ftp->resp != 200) {
- return 0;
- }
-
- return 1;
-}
-/* }}} */
-
-/* {{{ ftp_raw
- */
-void
-ftp_raw(ftpbuf_t *ftp, const char *cmd, zval *return_value)
-{
- if (ftp == NULL || cmd == NULL) {
- RETURN_NULL();
- }
- if (!ftp_putcmd(ftp, cmd, NULL)) {
- RETURN_NULL();
- }
- array_init(return_value);
- while (ftp_readline(ftp)) {
- add_next_index_string(return_value, ftp->inbuf, 1);
- if (isdigit(ftp->inbuf[0]) && isdigit(ftp->inbuf[1]) && isdigit(ftp->inbuf[2]) && ftp->inbuf[3] == ' ') {
- return;
- }
- }
-}
-/* }}} */
-
-/* {{{ ftp_chdir
- */
-int
-ftp_chdir(ftpbuf_t *ftp, const char *dir)
-{
- if (ftp == NULL) {
- return 0;
- }
-
- if (ftp->pwd) {
- efree(ftp->pwd);
- ftp->pwd = NULL;
- }
-
- if (!ftp_putcmd(ftp, "CWD", dir)) {
- return 0;
- }
- if (!ftp_getresp(ftp) || ftp->resp != 250) {
- return 0;
- }
- return 1;
-}
-/* }}} */
-
-/* {{{ ftp_cdup
- */
-int
-ftp_cdup(ftpbuf_t *ftp)
-{
- if (ftp == NULL) {
- return 0;
- }
-
- if (ftp->pwd) {
- efree(ftp->pwd);
- ftp->pwd = NULL;
- }
-
- if (!ftp_putcmd(ftp, "CDUP", NULL)) {
- return 0;
- }
- if (!ftp_getresp(ftp) || ftp->resp != 250) {
- return 0;
- }
- return 1;
-}
-/* }}} */
-
-/* {{{ ftp_mkdir
- */
-char*
-ftp_mkdir(ftpbuf_t *ftp, const char *dir)
-{
- char *mkd, *end;
-
- if (ftp == NULL) {
- return NULL;
- }
- if (!ftp_putcmd(ftp, "MKD", dir)) {
- return NULL;
- }
- if (!ftp_getresp(ftp) || ftp->resp != 257) {
- return NULL;
- }
- /* copy out the dir from response */
- if ((mkd = strchr(ftp->inbuf, '"')) == NULL) {
- mkd = estrdup(dir);
- return mkd;
- }
- if ((end = strrchr(++mkd, '"')) == NULL) {
- return NULL;
- }
- *end = 0;
- mkd = estrdup(mkd);
- *end = '"';
-
- return mkd;
-}
-/* }}} */
-
-/* {{{ ftp_rmdir
- */
-int
-ftp_rmdir(ftpbuf_t *ftp, const char *dir)
-{
- if (ftp == NULL) {
- return 0;
- }
- if (!ftp_putcmd(ftp, "RMD", dir)) {
- return 0;
- }
- if (!ftp_getresp(ftp) || ftp->resp != 250) {
- return 0;
- }
- return 1;
-}
-/* }}} */
-
-/* {{{ ftp_chmod
- */
-int
-ftp_chmod(ftpbuf_t *ftp, const int mode, const char *filename, const int filename_len)
-{
- char *buffer;
-
- if (ftp == NULL || filename_len <= 0) {
- return 0;
- }
-
- if (!(buffer = emalloc(32 + filename_len + 1))) {
- return 0;
- }
-
- sprintf(buffer, "CHMOD %o %s", mode, filename);
-
- if (!ftp_putcmd(ftp, "SITE", buffer)) {
- efree(buffer);
- return 0;
- }
-
- efree(buffer);
-
- if (!ftp_getresp(ftp) || ftp->resp != 200) {
- return 0;
- }
-
- return 1;
-}
-/* }}} */
-
-/* {{{ ftp_alloc
- */
-int
-ftp_alloc(ftpbuf_t *ftp, const int size, char **response)
-{
- char buffer[64];
-
- if (ftp == NULL || size <= 0) {
- return 0;
- }
-
- snprintf(buffer, sizeof(buffer) - 1, "%d", size);
-
- if (!ftp_putcmd(ftp, "ALLO", buffer)) {
- return 0;
- }
-
- if (!ftp_getresp(ftp)) {
- return 0;
- }
-
- if (response && ftp->inbuf) {
- *response = estrdup(ftp->inbuf);
- }
-
- if (ftp->resp < 200 || ftp->resp >= 300) {
- return 0;
- }
-
- return 1;
-}
-/* }}} */
-
-/* {{{ ftp_nlist
- */
-char**
-ftp_nlist(ftpbuf_t *ftp, const char *path TSRMLS_DC)
-{
- return ftp_genlist(ftp, "NLST", path TSRMLS_CC);
-}
-/* }}} */
-
-/* {{{ ftp_list
- */
-char**
-ftp_list(ftpbuf_t *ftp, const char *path, int recursive TSRMLS_DC)
-{
- return ftp_genlist(ftp, ((recursive) ? "LIST -R" : "LIST"), path TSRMLS_CC);
-}
-/* }}} */
-
-/* {{{ ftp_type
- */
-int
-ftp_type(ftpbuf_t *ftp, ftptype_t type)
-{
- char typechar[2] = "?";
-
- if (ftp == NULL) {
- return 0;
- }
- if (type == ftp->type) {
- return 1;
- }
- if (type == FTPTYPE_ASCII) {
- typechar[0] = 'A';
- } else if (type == FTPTYPE_IMAGE) {
- typechar[0] = 'I';
- } else {
- return 0;
- }
- if (!ftp_putcmd(ftp, "TYPE", typechar)) {
- return 0;
- }
- if (!ftp_getresp(ftp) || ftp->resp != 200) {
- return 0;
- }
- ftp->type = type;
-
- return 1;
-}
-/* }}} */
-
-/* {{{ ftp_pasv
- */
-int
-ftp_pasv(ftpbuf_t *ftp, int pasv)
-{
- char *ptr;
- union ipbox ipbox;
- unsigned long b[6];
- socklen_t n;
- struct sockaddr *sa;
- struct sockaddr_in *sin;
-
- if (ftp == NULL) {
- return 0;
- }
- if (pasv && ftp->pasv == 2) {
- return 1;
- }
- ftp->pasv = 0;
- if (!pasv) {
- return 1;
- }
- n = sizeof(ftp->pasvaddr);
- memset(&ftp->pasvaddr, 0, n);
- sa = (struct sockaddr *) &ftp->pasvaddr;
-
-#if HAVE_IPV6
- if (getpeername(ftp->fd, sa, &n) < 0) {
- return 0;
- }
- if (sa->sa_family == AF_INET6) {
- struct sockaddr_in6 *sin6 = (struct sockaddr_in6 *) sa;
- char *endptr, delimiter;
-
- /* try EPSV first */
- if (!ftp_putcmd(ftp, "EPSV", NULL)) {
- return 0;
- }
- if (!ftp_getresp(ftp)) {
- return 0;
- }
- if (ftp->resp == 229) {
- /* parse out the port */
- for (ptr = ftp->inbuf; *ptr && *ptr != '('; ptr++);
- if (!*ptr) {
- return 0;
- }
- delimiter = *++ptr;
- for (n = 0; *ptr && n < 3; ptr++) {
- if (*ptr == delimiter) {
- n++;
- }
- }
-
- sin6->sin6_port = htons((unsigned short) strtoul(ptr, &endptr, 10));
- if (ptr == endptr || *endptr != delimiter) {
- return 0;
- }
- ftp->pasv = 2;
- return 1;
- }
- }
-
- /* fall back to PASV */
-#endif
-
- if (!ftp_putcmd(ftp, "PASV", NULL)) {
- return 0;
- }
- if (!ftp_getresp(ftp) || ftp->resp != 227) {
- return 0;
- }
- /* parse out the IP and port */
- for (ptr = ftp->inbuf; *ptr && !isdigit(*ptr); ptr++);
- n = sscanf(ptr, "%lu,%lu,%lu,%lu,%lu,%lu", &b[0], &b[1], &b[2], &b[3], &b[4], &b[5]);
- if (n != 6) {
- return 0;
- }
- for (n = 0; n < 6; n++) {
- ipbox.c[n] = (unsigned char) b[n];
- }
- sin = (struct sockaddr_in *) sa;
- sin->sin_family = AF_INET;
- sin->sin_addr = ipbox.ia[0];
- sin->sin_port = ipbox.s[2];
-
- ftp->pasv = 2;
-
- return 1;
-}
-/* }}} */
-
-/* {{{ ftp_get
- */
-int
-ftp_get(ftpbuf_t *ftp, php_stream *outstream, const char *path, ftptype_t type, int resumepos TSRMLS_DC)
-{
- databuf_t *data = NULL;
- int lastch;
- size_t rcvd;
- char arg[11];
-
- if (ftp == NULL) {
- return 0;
- }
- if (!ftp_type(ftp, type)) {
- goto bail;
- }
-
- if ((data = ftp_getdata(ftp TSRMLS_CC)) == NULL) {
- goto bail;
- }
-
- ftp->data = data;
-
- if (resumepos > 0) {
- if (resumepos > 2147483647) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "PHP cannot handle files greater then 2147483647 bytes.\n");
- goto bail;
- }
- sprintf(arg, "%u", resumepos);
- if (!ftp_putcmd(ftp, "REST", arg)) {
- goto bail;
- }
- if (!ftp_getresp(ftp) || (ftp->resp != 350)) {
- goto bail;
- }
- }
-
- if (!ftp_putcmd(ftp, "RETR", path)) {
- goto bail;
- }
- if (!ftp_getresp(ftp) || (ftp->resp != 150 && ftp->resp != 125)) {
- goto bail;
- }
-
- if ((data = data_accept(data, ftp TSRMLS_CC)) == NULL) {
- goto bail;
- }
-
- lastch = 0;
- while ((rcvd = my_recv(ftp, data->fd, data->buf, FTP_BUFSIZE))) {
- if (rcvd == -1) {
- goto bail;
- }
-
- if (type == FTPTYPE_ASCII) {
- char *s;
- char *ptr = data->buf;
- char *e = ptr + rcvd;
- /* logic depends on the OS EOL
- * Win32 -> \r\n
- * Everything Else \n
- */
-#ifdef PHP_WIN32
- while ((s = strpbrk(ptr, "\r\n"))) {
- if (*s == '\n') {
- php_stream_putc(outstream, '\r');
- } else if (*s == '\r' && *(s + 1) == '\n') {
- s++;
- }
- s++;
- php_stream_write(outstream, ptr, (s - ptr));
- if (*(s - 1) == '\r') {
- php_stream_putc(outstream, '\n');
- }
- ptr = s;
- }
-#else
- while ((s = memchr(ptr, '\r', (e - ptr)))) {
- php_stream_write(outstream, ptr, (s - ptr));
- if (*(s + 1) == '\n') {
- s++;
- }
- php_stream_putc(outstream, '\n');
- ptr = s + 1;
- }
-#endif
- if (ptr < e) {
- php_stream_write(outstream, ptr, (e - ptr));
- }
- } else if (rcvd != php_stream_write(outstream, data->buf, rcvd)) {
- goto bail;
- }
- }
-
- ftp->data = data = data_close(ftp, data);
-
- if (!ftp_getresp(ftp) || (ftp->resp != 226 && ftp->resp != 250)) {
- goto bail;
- }
-
- return 1;
-bail:
- ftp->data = data_close(ftp, data);
- return 0;
-}
-/* }}} */
-
-/* {{{ ftp_put
- */
-int
-ftp_put(ftpbuf_t *ftp, const char *path, php_stream *instream, ftptype_t type, int startpos TSRMLS_DC)
-{
- databuf_t *data = NULL;
- int size;
- char *ptr;
- int ch;
- char arg[11];
-
- if (ftp == NULL) {
- return 0;
- }
- if (!ftp_type(ftp, type)) {
- goto bail;
- }
- if ((data = ftp_getdata(ftp TSRMLS_CC)) == NULL) {
- goto bail;
- }
- ftp->data = data;
-
- if (startpos > 0) {
- if (startpos > 2147483647) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "PHP cannot handle files with a size greater then 2147483647 bytes.\n");
- goto bail;
- }
- sprintf(arg, "%u", startpos);
- if (!ftp_putcmd(ftp, "REST", arg)) {
- goto bail;
- }
- if (!ftp_getresp(ftp) || (ftp->resp != 350)) {
- goto bail;
- }
- }
-
- if (!ftp_putcmd(ftp, "STOR", path)) {
- goto bail;
- }
- if (!ftp_getresp(ftp) || (ftp->resp != 150 && ftp->resp != 125)) {
- goto bail;
- }
- if ((data = data_accept(data, ftp TSRMLS_CC)) == NULL) {
- goto bail;
- }
-
- size = 0;
- ptr = data->buf;
- while (!php_stream_eof(instream) && (ch = php_stream_getc(instream))!=EOF) {
- /* flush if necessary */
- if (FTP_BUFSIZE - size < 2) {
- if (my_send(ftp, data->fd, data->buf, size) != size) {
- goto bail;
- }
- ptr = data->buf;
- size = 0;
- }
-
- if (ch == '\n' && type == FTPTYPE_ASCII) {
- *ptr++ = '\r';
- size++;
- }
-
- *ptr++ = ch;
- size++;
- }
-
- if (size && my_send(ftp, data->fd, data->buf, size) != size) {
- goto bail;
- }
- ftp->data = data = data_close(ftp, data);
-
- if (!ftp_getresp(ftp) || (ftp->resp != 226 && ftp->resp != 250)) {
- goto bail;
- }
- return 1;
-bail:
- ftp->data = data_close(ftp, data);
- return 0;
-}
-/* }}} */
-
-/* {{{ ftp_size
- */
-int
-ftp_size(ftpbuf_t *ftp, const char *path)
-{
- if (ftp == NULL) {
- return -1;
- }
- if (!ftp_type(ftp, FTPTYPE_IMAGE)) {
- return -1;
- }
- if (!ftp_putcmd(ftp, "SIZE", path)) {
- return -1;
- }
- if (!ftp_getresp(ftp) || ftp->resp != 213) {
- return -1;
- }
- return atoi(ftp->inbuf);
-}
-/* }}} */
-
-/* {{{ ftp_mdtm
- */
-time_t
-ftp_mdtm(ftpbuf_t *ftp, const char *path)
-{
- time_t stamp;
- struct tm *gmt, tmbuf;
- struct tm tm;
- char *ptr;
- int n;
-
- if (ftp == NULL) {
- return -1;
- }
- if (!ftp_putcmd(ftp, "MDTM", path)) {
- return -1;
- }
- if (!ftp_getresp(ftp) || ftp->resp != 213) {
- return -1;
- }
- /* parse out the timestamp */
- for (ptr = ftp->inbuf; *ptr && !isdigit(*ptr); ptr++);
- n = sscanf(ptr, "%4u%2u%2u%2u%2u%2u", &tm.tm_year, &tm.tm_mon, &tm.tm_mday, &tm.tm_hour, &tm.tm_min, &tm.tm_sec);
- if (n != 6) {
- return -1;
- }
- tm.tm_year -= 1900;
- tm.tm_mon--;
- tm.tm_isdst = -1;
-
- /* figure out the GMT offset */
- stamp = time(NULL);
- gmt = php_gmtime_r(&stamp, &tmbuf);
- gmt->tm_isdst = -1;
-
- /* apply the GMT offset */
- tm.tm_sec += stamp - mktime(gmt);
- tm.tm_isdst = gmt->tm_isdst;
-
- stamp = mktime(&tm);
-
- return stamp;
-}
-/* }}} */
-
-/* {{{ ftp_delete
- */
-int
-ftp_delete(ftpbuf_t *ftp, const char *path)
-{
- if (ftp == NULL) {
- return 0;
- }
- if (!ftp_putcmd(ftp, "DELE", path)) {
- return 0;
- }
- if (!ftp_getresp(ftp) || ftp->resp != 250) {
- return 0;
- }
-
- return 1;
-}
-/* }}} */
-
-/* {{{ ftp_rename
- */
-int
-ftp_rename(ftpbuf_t *ftp, const char *src, const char *dest)
-{
- if (ftp == NULL) {
- return 0;
- }
- if (!ftp_putcmd(ftp, "RNFR", src)) {
- return 0;
- }
- if (!ftp_getresp(ftp) || ftp->resp != 350) {
- return 0;
- }
- if (!ftp_putcmd(ftp, "RNTO", dest)) {
- return 0;
- }
- if (!ftp_getresp(ftp) || ftp->resp != 250) {
- return 0;
- }
- return 1;
-}
-/* }}} */
-
-/* {{{ ftp_site
- */
-int
-ftp_site(ftpbuf_t *ftp, const char *cmd)
-{
- if (ftp == NULL) {
- return 0;
- }
- if (!ftp_putcmd(ftp, "SITE", cmd)) {
- return 0;
- }
- if (!ftp_getresp(ftp) || ftp->resp < 200 || ftp->resp >= 300) {
- return 0;
- }
-
- return 1;
-}
-/* }}} */
-
-/* static functions */
-
-/* {{{ ftp_putcmd
- */
-int
-ftp_putcmd(ftpbuf_t *ftp, const char *cmd, const char *args)
-{
- int size;
- char *data;
-
- /* build the output buffer */
- if (args && args[0]) {
- /* "cmd args\r\n\0" */
- if (strlen(cmd) + strlen(args) + 4 > FTP_BUFSIZE) {
- return 0;
- }
- size = sprintf(ftp->outbuf, "%s %s\r\n", cmd, args);
- } else {
- /* "cmd\r\n\0" */
- if (strlen(cmd) + 3 > FTP_BUFSIZE) {
- return 0;
- }
- size = sprintf(ftp->outbuf, "%s\r\n", cmd);
- }
-
- data = ftp->outbuf;
-
- if (my_send(ftp, ftp->fd, data, size) != size) {
- return 0;
- }
- return 1;
-}
-/* }}} */
-
-/* {{{ ftp_readline
- */
-int
-ftp_readline(ftpbuf_t *ftp)
-{
- int size, rcvd;
- char *data, *eol;
-
- /* shift the extra to the front */
- size = FTP_BUFSIZE;
- rcvd = 0;
- if (ftp->extra) {
- memmove(ftp->inbuf, ftp->extra, ftp->extralen);
- rcvd = ftp->extralen;
- }
-
- data = ftp->inbuf;
-
- do {
- size -= rcvd;
- for (eol = data; rcvd; rcvd--, eol++) {
- if (*eol == '\r') {
- *eol = 0;
- ftp->extra = eol + 1;
- if (rcvd > 1 && *(eol + 1) == '\n') {
- ftp->extra++;
- rcvd--;
- }
- if ((ftp->extralen = --rcvd) == 0) {
- ftp->extra = NULL;
- }
- return 1;
- } else if (*eol == '\n') {
- *eol = 0;
- ftp->extra = eol + 1;
- if ((ftp->extralen = --rcvd) == 0) {
- ftp->extra = NULL;
- }
- return 1;
- }
- }
-
- data = eol;
- if ((rcvd = my_recv(ftp, ftp->fd, data, size)) < 1) {
- return 0;
- }
- } while (size);
-
- return 0;
-}
-/* }}} */
-
-/* {{{ ftp_getresp
- */
-int
-ftp_getresp(ftpbuf_t *ftp)
-{
- char *buf;
-
- if (ftp == NULL) {
- return 0;
- }
- buf = ftp->inbuf;
- ftp->resp = 0;
-
- while (1) {
-
- if (!ftp_readline(ftp)) {
- return 0;
- }
-
- /* Break out when the end-tag is found */
- if (isdigit(ftp->inbuf[0]) && isdigit(ftp->inbuf[1]) && isdigit(ftp->inbuf[2]) && ftp->inbuf[3] == ' ') {
- break;
- }
- }
-
- /* translate the tag */
- if (!isdigit(ftp->inbuf[0]) || !isdigit(ftp->inbuf[1]) || !isdigit(ftp->inbuf[2])) {
- return 0;
- }
-
- ftp->resp = 100 * (ftp->inbuf[0] - '0') + 10 * (ftp->inbuf[1] - '0') + (ftp->inbuf[2] - '0');
-
- memmove(ftp->inbuf, ftp->inbuf + 4, FTP_BUFSIZE - 4);
-
- if (ftp->extra) {
- ftp->extra -= 4;
- }
- return 1;
-}
-/* }}} */
-
-/* {{{ my_send
- */
-int
-my_send(ftpbuf_t *ftp, php_socket_t s, void *buf, size_t len)
-{
- fd_set write_set;
- struct timeval tv;
- int n, size, sent;
-
- size = len;
- while (size) {
- tv.tv_sec = ftp->timeout_sec;
- tv.tv_usec = 0;
-
- FD_ZERO(&write_set);
- FD_SET(s, &write_set);
-
- n = select(s + 1, NULL, &write_set, NULL, &tv);
-
- if (n < 1) {
-
-#if !defined(PHP_WIN32) && !(defined(NETWARE) && defined(USE_WINSOCK))
- if (n == 0) {
- errno = ETIMEDOUT;
- }
-#endif
- return -1;
- }
-
-#if HAVE_OPENSSL_EXT
- if (ftp->use_ssl && ftp->fd == s && ftp->ssl_active) {
- sent = SSL_write(ftp->ssl_handle, buf, size);
- } else if (ftp->use_ssl && ftp->fd != s && ftp->use_ssl_for_data && ftp->data->ssl_active) {
- sent = SSL_write(ftp->data->ssl_handle, buf, size);
- } else {
-#endif
- sent = send(s, buf, size, 0);
-#if HAVE_OPENSSL_EXT
- }
-#endif
- if (sent == -1) {
- return -1;
- }
-
- buf = (char*) buf + sent;
- size -= sent;
- }
-
- return len;
-}
-/* }}} */
-
-/* {{{ my_recv
- */
-int
-my_recv(ftpbuf_t *ftp, php_socket_t s, void *buf, size_t len)
-{
- fd_set read_set;
- struct timeval tv;
- int n, nr_bytes;
-
- tv.tv_sec = ftp->timeout_sec;
- tv.tv_usec = 0;
-
- FD_ZERO(&read_set);
- FD_SET(s, &read_set);
-
- n = select(s + 1, &read_set, NULL, NULL, &tv);
- if (n < 1) {
-#if !defined(PHP_WIN32) && !(defined(NETWARE) && defined(USE_WINSOCK))
- if (n == 0) {
- errno = ETIMEDOUT;
- }
-#endif
- return -1;
- }
-
-#if HAVE_OPENSSL_EXT
- if (ftp->use_ssl && ftp->fd == s && ftp->ssl_active) {
- nr_bytes = SSL_read(ftp->ssl_handle, buf, len);
- } else if (ftp->use_ssl && ftp->fd != s && ftp->use_ssl_for_data && ftp->data->ssl_active) {
- nr_bytes = SSL_read(ftp->data->ssl_handle, buf, len);
- } else {
-#endif
- nr_bytes = recv(s, buf, len, 0);
-#if HAVE_OPENSSL_EXT
- }
-#endif
- return (nr_bytes);
-}
-/* }}} */
-
-/* {{{ data_available
- */
-int
-data_available(ftpbuf_t *ftp, php_socket_t s)
-{
- fd_set read_set;
- struct timeval tv;
- int n;
-
- tv.tv_sec = 0;
- tv.tv_usec = 1;
-
- FD_ZERO(&read_set);
- FD_SET(s, &read_set);
- n = select(s + 1, &read_set, NULL, NULL, &tv);
- if (n < 1) {
-#if !defined(PHP_WIN32) && !(defined(NETWARE) && defined(USE_WINSOCK))
- if (n == 0) {
- errno = ETIMEDOUT;
- }
-#endif
- return 0;
- }
-
- return 1;
-}
-/* }}} */
-/* {{{ data_writeable
- */
-int
-data_writeable(ftpbuf_t *ftp, php_socket_t s)
-{
- fd_set write_set;
- struct timeval tv;
- int n;
-
- tv.tv_sec = 0;
- tv.tv_usec = 1;
-
- FD_ZERO(&write_set);
- FD_SET(s, &write_set);
- n = select(s + 1, NULL, &write_set, NULL, &tv);
- if (n < 1) {
-#ifndef PHP_WIN32
- if (n == 0) {
- errno = ETIMEDOUT;
- }
-#endif
- return 0;
- }
-
- return 1;
-}
-/* }}} */
-
-/* {{{ my_accept
- */
-int
-my_accept(ftpbuf_t *ftp, php_socket_t s, struct sockaddr *addr, socklen_t *addrlen)
-{
- fd_set accept_set;
- struct timeval tv;
- int n;
-
- tv.tv_sec = ftp->timeout_sec;
- tv.tv_usec = 0;
- FD_ZERO(&accept_set);
- FD_SET(s, &accept_set);
-
- n = select(s + 1, &accept_set, NULL, NULL, &tv);
- if (n < 1) {
-#if !defined(PHP_WIN32) && !(defined(NETWARE) && defined(USE_WINSOCK))
- if (n == 0) {
- errno = ETIMEDOUT;
- }
-#endif
- return -1;
- }
-
- return accept(s, addr, addrlen);
-}
-/* }}} */
-
-/* {{{ ftp_getdata
- */
-databuf_t*
-ftp_getdata(ftpbuf_t *ftp TSRMLS_DC)
-{
- int fd = -1;
- databuf_t *data;
- php_sockaddr_storage addr;
- struct sockaddr *sa;
- socklen_t size;
- union ipbox ipbox;
- char arg[sizeof("255, 255, 255, 255, 255, 255")];
- struct timeval tv;
-
-
- /* ask for a passive connection if we need one */
- if (ftp->pasv && !ftp_pasv(ftp, 1)) {
- return NULL;
- }
- /* alloc the data structure */
- data = ecalloc(1, sizeof(*data));
- data->listener = -1;
- data->fd = -1;
- data->type = ftp->type;
-
- sa = (struct sockaddr *) &ftp->localaddr;
- /* bind/listen */
- if ((fd = socket(sa->sa_family, SOCK_STREAM, 0)) == -1) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "socket() failed: %s (%d)\n", strerror(errno), errno);
- goto bail;
- }
-
- /* passive connection handler */
- if (ftp->pasv) {
- /* clear the ready status */
- ftp->pasv = 1;
-
- /* connect */
- /* Win 95/98 seems not to like size > sizeof(sockaddr_in) */
- size = php_sockaddr_size(&ftp->pasvaddr);
- tv.tv_sec = ftp->timeout_sec;
- tv.tv_usec = 0;
- if (php_connect_nonb(fd, (struct sockaddr*) &ftp->pasvaddr, size, &tv) == -1) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "php_connect_nonb() failed: %s (%d)\n", strerror(errno), errno);
- goto bail;
- }
-
- data->fd = fd;
-
- ftp->data = data;
- return data;
- }
-
-
- /* active (normal) connection */
-
- /* bind to a local address */
- php_any_addr(sa->sa_family, &addr, 0);
- size = php_sockaddr_size(&addr);
-
- if (bind(fd, (struct sockaddr*) &addr, size) == -1) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "bind() failed: %s (%d)\n", strerror(errno), errno);
- goto bail;
- }
-
- if (getsockname(fd, (struct sockaddr*) &addr, &size) == -1) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "getsockname() failed: %s (%d)\n", strerror(errno), errno);
- goto bail;
- }
-
- if (listen(fd, 5) == -1) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "listen() failed: %s (%d)\n", strerror(errno), errno);
- goto bail;
- }
-
- data->listener = fd;
-
-#if HAVE_IPV6
- if (sa->sa_family == AF_INET6) {
- /* need to use EPRT */
- char eprtarg[INET6_ADDRSTRLEN + sizeof("|x||xxxxx|")];
- char out[INET6_ADDRSTRLEN];
- inet_ntop(AF_INET6, &((struct sockaddr_in6*) sa)->sin6_addr, out, sizeof(out));
- sprintf(eprtarg, "|2|%s|%hu|", out, ntohs(((struct sockaddr_in6 *) &addr)->sin6_port));
-
- if (!ftp_putcmd(ftp, "EPRT", eprtarg)) {
- goto bail;
- }
-
- if (!ftp_getresp(ftp) || ftp->resp != 200) {
- goto bail;
- }
-
- ftp->data = data;
- return data;
- }
-#endif
-
- /* send the PORT */
- ipbox.ia[0] = ((struct sockaddr_in*) sa)->sin_addr;
- ipbox.s[2] = ((struct sockaddr_in*) &addr)->sin_port;
- sprintf(arg, "%u,%u,%u,%u,%u,%u", ipbox.c[0], ipbox.c[1], ipbox.c[2], ipbox.c[3], ipbox.c[4], ipbox.c[5]);
-
- if (!ftp_putcmd(ftp, "PORT", arg)) {
- goto bail;
- }
- if (!ftp_getresp(ftp) || ftp->resp != 200) {
- goto bail;
- }
-
- ftp->data = data;
- return data;
-
-bail:
- if (fd != -1) {
- closesocket(fd);
- }
- efree(data);
- return NULL;
-}
-/* }}} */
-
-/* {{{ data_accept
- */
-databuf_t*
-data_accept(databuf_t *data, ftpbuf_t *ftp TSRMLS_DC)
-{
- php_sockaddr_storage addr;
- socklen_t size;
-
-#if HAVE_OPENSSL_EXT
- SSL_CTX *ctx;
-#endif
-
- if (data->fd != -1) {
- goto data_accepted;
- }
- size = sizeof(addr);
- data->fd = my_accept(ftp, data->listener, (struct sockaddr*) &addr, &size);
- closesocket(data->listener);
- data->listener = -1;
-
- if (data->fd == -1) {
- efree(data);
- return NULL;
- }
-
-data_accepted:
-#if HAVE_OPENSSL_EXT
-
- /* now enable ssl if we need to */
- if (ftp->use_ssl && ftp->use_ssl_for_data) {
- ctx = SSL_CTX_new(SSLv23_client_method());
- if (ctx == NULL) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "data_accept: failed to create the SSL context");
- return 0;
- }
-
- data->ssl_handle = SSL_new(ctx);
- if (data->ssl_handle == NULL) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "data_accept: failed to create the SSL handle");
- SSL_CTX_free(ctx);
- return 0;
- }
-
-
- SSL_set_fd(data->ssl_handle, data->fd);
-
- if (ftp->old_ssl) {
- SSL_copy_session_id(data->ssl_handle, ftp->ssl_handle);
- }
-
- if (SSL_connect(data->ssl_handle) <= 0) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "data_accept: SSL/TLS handshake failed");
- SSL_shutdown(data->ssl_handle);
- return 0;
- }
-
- data->ssl_active = 1;
- }
-
-#endif
-
- return data;
-}
-/* }}} */
-
-/* {{{ data_close
- */
-databuf_t*
-data_close(ftpbuf_t *ftp, databuf_t *data)
-{
- if (data == NULL) {
- return NULL;
- }
- if (data->listener != -1) {
-#if HAVE_OPENSSL_EXT
- if (data->ssl_active) {
- SSL_shutdown(data->ssl_handle);
- data->ssl_active = 0;
- }
-#endif
- closesocket(data->listener);
- }
- if (data->fd != -1) {
-#if HAVE_OPENSSL_EXT
- if (data->ssl_active) {
- SSL_shutdown(data->ssl_handle);
- data->ssl_active = 0;
- }
-#endif
- closesocket(data->fd);
- }
- if (ftp) {
- ftp->data = NULL;
- }
- efree(data);
- return NULL;
-}
-/* }}} */
-
-/* {{{ ftp_genlist
- */
-char**
-ftp_genlist(ftpbuf_t *ftp, const char *cmd, const char *path TSRMLS_DC)
-{
- php_stream *tmpstream = NULL;
- databuf_t *data = NULL;
- char *ptr;
- int ch, lastch;
- int size, rcvd;
- int lines;
- char **ret = NULL;
- char **entry;
- char *text;
-
-
- if ((tmpstream = php_stream_fopen_tmpfile()) == NULL) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to create temporary file. Check permissions in temporary files directory.");
- return NULL;
- }
-
- if (!ftp_type(ftp, FTPTYPE_ASCII)) {
- goto bail;
- }
-
- if ((data = ftp_getdata(ftp TSRMLS_CC)) == NULL) {
- goto bail;
- }
- ftp->data = data;
-
- if (!ftp_putcmd(ftp, cmd, path)) {
- goto bail;
- }
- if (!ftp_getresp(ftp) || (ftp->resp != 150 && ftp->resp != 125)) {
- goto bail;
- }
-
- /* pull data buffer into tmpfile */
- if ((data = data_accept(data, ftp TSRMLS_CC)) == NULL) {
- goto bail;
- }
- size = 0;
- lines = 0;
- lastch = 0;
- while ((rcvd = my_recv(ftp, data->fd, data->buf, FTP_BUFSIZE))) {
- if (rcvd == -1) {
- goto bail;
- }
-
- php_stream_write(tmpstream, data->buf, rcvd);
-
- size += rcvd;
- for (ptr = data->buf; rcvd; rcvd--, ptr++) {
- if (*ptr == '\n' && lastch == '\r') {
- lines++;
- } else {
- size++;
- }
- lastch = *ptr;
- }
- }
-
- ftp->data = data = data_close(ftp, data);
-
- php_stream_rewind(tmpstream);
-
- ret = safe_emalloc((lines + 1), sizeof(char**), size * sizeof(char*));
-
- entry = ret;
- text = (char*) (ret + lines + 1);
- *entry = text;
- lastch = 0;
- while ((ch = php_stream_getc(tmpstream)) != EOF) {
- if (ch == '\n' && lastch == '\r') {
- *(text - 1) = 0;
- *++entry = text;
- } else {
- *text++ = ch;
- }
- lastch = ch;
- }
- *entry = NULL;
-
- php_stream_close(tmpstream);
-
- if (!ftp_getresp(ftp) || (ftp->resp != 226 && ftp->resp != 250)) {
- efree(ret);
- return NULL;
- }
-
- return ret;
-bail:
- ftp->data = data_close(ftp, data);
- php_stream_close(tmpstream);
- if (ret)
- efree(ret);
- return NULL;
-}
-/* }}} */
-
-/* {{{ ftp_nb_get
- */
-int
-ftp_nb_get(ftpbuf_t *ftp, php_stream *outstream, const char *path, ftptype_t type, int resumepos TSRMLS_DC)
-{
- databuf_t *data = NULL;
- char arg[11];
-
- if (ftp == NULL) {
- goto bail;
- }
-
- if (!ftp_type(ftp, type)) {
- goto bail;
- }
-
- if ((data = ftp_getdata(ftp TSRMLS_CC)) == NULL) {
- goto bail;
- }
-
- if (resumepos>0) {
- /* We are working on an architecture that supports 64-bit integers
- * since php is 32 bit by design, we bail out with warning
- */
- if (resumepos > 2147483647) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "PHP cannot handle files greater then 2147483648 bytes.\n");
- goto bail;
- }
- sprintf(arg, "%u", resumepos);
- if (!ftp_putcmd(ftp, "REST", arg)) {
- goto bail;
- }
- if (!ftp_getresp(ftp) || (ftp->resp != 350)) {
- goto bail;
- }
- }
-
- if (!ftp_putcmd(ftp, "RETR", path)) {
- goto bail;
- }
- if (!ftp_getresp(ftp) || (ftp->resp != 150 && ftp->resp != 125)) {
- goto bail;
- }
-
- if ((data = data_accept(data, ftp TSRMLS_CC)) == NULL) {
- goto bail;
- }
-
- ftp->data = data;
- ftp->stream = outstream;
- ftp->lastch = 0;
- ftp->nb = 1;
-
- return (ftp_nb_continue_read(ftp TSRMLS_CC));
-
-bail:
- ftp->data = data_close(ftp, data);
- return PHP_FTP_FAILED;
-}
-/* }}} */
-
-/* {{{ ftp_nb_continue_read
- */
-int
-ftp_nb_continue_read(ftpbuf_t *ftp TSRMLS_DC)
-{
- databuf_t *data = NULL;
- char *ptr;
- int lastch;
- size_t rcvd;
- ftptype_t type;
-
- data = ftp->data;
-
- /* check if there is already more data */
- if (!data_available(ftp, data->fd)) {
- return PHP_FTP_MOREDATA;
- }
-
- type = ftp->type;
-
- lastch = ftp->lastch;
- if ((rcvd = my_recv(ftp, data->fd, data->buf, FTP_BUFSIZE))) {
- if (rcvd == -1) {
- goto bail;
- }
-
- if (type == FTPTYPE_ASCII) {
- for (ptr = data->buf; rcvd; rcvd--, ptr++) {
- if (lastch == '\r' && *ptr != '\n') {
- php_stream_putc(ftp->stream, '\r');
- }
- if (*ptr != '\r') {
- php_stream_putc(ftp->stream, *ptr);
- }
- lastch = *ptr;
- }
- } else if (rcvd != php_stream_write(ftp->stream, data->buf, rcvd)) {
- goto bail;
- }
-
- ftp->lastch = lastch;
- return PHP_FTP_MOREDATA;
- }
-
- if (type == FTPTYPE_ASCII && lastch == '\r') {
- php_stream_putc(ftp->stream, '\r');
- }
-
- ftp->data = data = data_close(ftp, data);
-
- if (!ftp_getresp(ftp) || (ftp->resp != 226 && ftp->resp != 250)) {
- goto bail;
- }
-
- ftp->nb = 0;
- return PHP_FTP_FINISHED;
-bail:
- ftp->nb = 0;
- ftp->data = data_close(ftp, data);
- return PHP_FTP_FAILED;
-}
-/* }}} */
-
-/* {{{ ftp_nb_put
- */
-int
-ftp_nb_put(ftpbuf_t *ftp, const char *path, php_stream *instream, ftptype_t type, int startpos TSRMLS_DC)
-{
- databuf_t *data = NULL;
- char arg[11];
-
- if (ftp == NULL) {
- return 0;
- }
- if (!ftp_type(ftp, type)) {
- goto bail;
- }
- if ((data = ftp_getdata(ftp TSRMLS_CC)) == NULL) {
- goto bail;
- }
- if (startpos > 0) {
- if (startpos > 2147483647) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "PHP cannot handle files with a size greater then 2147483647 bytes.\n");
- goto bail;
- }
- sprintf(arg, "%u", startpos);
- if (!ftp_putcmd(ftp, "REST", arg)) {
- goto bail;
- }
- if (!ftp_getresp(ftp) || (ftp->resp != 350)) {
- goto bail;
- }
- }
-
- if (!ftp_putcmd(ftp, "STOR", path)) {
- goto bail;
- }
- if (!ftp_getresp(ftp) || (ftp->resp != 150 && ftp->resp != 125)) {
- goto bail;
- }
- if ((data = data_accept(data, ftp TSRMLS_CC)) == NULL) {
- goto bail;
- }
- ftp->data = data;
- ftp->stream = instream;
- ftp->lastch = 0;
- ftp->nb = 1;
-
- return (ftp_nb_continue_write(ftp TSRMLS_CC));
-
-bail:
- ftp->data = data_close(ftp, data);
- return PHP_FTP_FAILED;
-}
-/* }}} */
-
-
-/* {{{ ftp_nb_continue_write
- */
-int
-ftp_nb_continue_write(ftpbuf_t *ftp TSRMLS_DC)
-{
- int size;
- char *ptr;
- int ch;
-
- /* check if we can write more data */
- if (!data_writeable(ftp, ftp->data->fd)) {
- return PHP_FTP_MOREDATA;
- }
-
- size = 0;
- ptr = ftp->data->buf;
- while (!php_stream_eof(ftp->stream) && (ch = php_stream_getc(ftp->stream)) != EOF) {
-
- if (ch == '\n' && ftp->type == FTPTYPE_ASCII) {
- *ptr++ = '\r';
- size++;
- }
-
- *ptr++ = ch;
- size++;
-
- /* flush if necessary */
- if (FTP_BUFSIZE - size < 2) {
- if (my_send(ftp, ftp->data->fd, ftp->data->buf, size) != size) {
- goto bail;
- }
- return PHP_FTP_MOREDATA;
- }
- }
-
- if (size && my_send(ftp, ftp->data->fd, ftp->data->buf, size) != size) {
- goto bail;
- }
- ftp->data = data_close(ftp, ftp->data);
-
- if (!ftp_getresp(ftp) || (ftp->resp != 226 && ftp->resp != 250)) {
- goto bail;
- }
- ftp->nb = 0;
- return PHP_FTP_FINISHED;
-bail:
- ftp->data = data_close(ftp, ftp->data);
- ftp->nb = 0;
- return PHP_FTP_FAILED;
-}
-/* }}} */
-
-#endif /* HAVE_FTP */
-
-/*
- * 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/ftp/ftp.h b/ext/ftp/ftp.h
deleted file mode 100644
index 8edeacb4cb..0000000000
--- a/ext/ftp/ftp.h
+++ /dev/null
@@ -1,213 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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. |
- +----------------------------------------------------------------------+
- | Authors: Andrew Skalski <askalski@chek.com> |
- | Stefan Esser <sesser@php.net> (resume functions) |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-#ifndef FTP_H
-#define FTP_H
-
-#include "php_network.h"
-
-#include <stdio.h>
-#ifdef HAVE_NETINET_IN_H
-#include <netinet/in.h>
-#endif
-
-#define FTP_DEFAULT_TIMEOUT 90
-#define FTP_DEFAULT_AUTOSEEK 1
-#define PHP_FTP_FAILED 0
-#define PHP_FTP_FINISHED 1
-#define PHP_FTP_MOREDATA 2
-
-/* XXX this should be configurable at runtime XXX */
-#define FTP_BUFSIZE 4096
-
-typedef enum ftptype {
- FTPTYPE_ASCII,
- FTPTYPE_IMAGE
-} ftptype_t;
-
-typedef struct databuf
-{
- int listener; /* listener socket */
- php_socket_t fd; /* data connection */
- ftptype_t type; /* transfer type */
- char buf[FTP_BUFSIZE]; /* data buffer */
-#if HAVE_OPENSSL_EXT
- SSL *ssl_handle; /* ssl handle */
- int ssl_active; /* flag if ssl is active or not */
-#endif
-} databuf_t;
-
-typedef struct ftpbuf
-{
- php_socket_t fd; /* control connection */
- php_sockaddr_storage localaddr; /* local address */
- int resp; /* last response code */
- char inbuf[FTP_BUFSIZE]; /* last response text */
- char *extra; /* extra characters */
- int extralen; /* number of extra chars */
- char outbuf[FTP_BUFSIZE]; /* command output buffer */
- char *pwd; /* cached pwd */
- char *syst; /* cached system type */
- ftptype_t type; /* current transfer type */
- int pasv; /* 0=off; 1=pasv; 2=ready */
- php_sockaddr_storage pasvaddr; /* passive mode address */
- long timeout_sec; /* User configureable timeout (seconds) */
- int autoseek; /* User configureable autoseek flag */
-
- int nb; /* "nonblocking" transfer in progress */
- databuf_t *data; /* Data connection for "nonblocking" transfers */
- php_stream *stream; /* output stream for "nonblocking" transfers */
- int lastch; /* last char of previous call */
- int direction; /* recv = 0 / send = 1 */
- int closestream;/* close or not close stream */
-#if HAVE_OPENSSL_EXT
- int use_ssl; /* enable(1) or disable(0) ssl */
- int use_ssl_for_data; /* en/disable ssl for the dataconnection */
- int old_ssl; /* old mode = forced data encryption */
- SSL *ssl_handle; /* handle for control connection */
- int ssl_active; /* ssl active on control conn */
-#endif
-
-} ftpbuf_t;
-
-
-
-/* open a FTP connection, returns ftpbuf (NULL on error)
- * port is the ftp port in network byte order, or 0 for the default
- */
-ftpbuf_t* ftp_open(const char *host, short port, long timeout_sec TSRMLS_DC);
-
-/* quits from the ftp session (it still needs to be closed)
- * return true on success, false on error
- */
-int ftp_quit(ftpbuf_t *ftp);
-
-/* frees up any cached data held in the ftp buffer */
-void ftp_gc(ftpbuf_t *ftp);
-
-/* close the FTP connection and return NULL */
-ftpbuf_t* ftp_close(ftpbuf_t *ftp);
-
-/* logs into the FTP server, returns true on success, false on error */
-int ftp_login(ftpbuf_t *ftp, const char *user, const char *pass TSRMLS_DC);
-
-/* reinitializes the connection, returns true on success, false on error */
-int ftp_reinit(ftpbuf_t *ftp);
-
-/* returns the remote system type (NULL on error) */
-const char* ftp_syst(ftpbuf_t *ftp);
-
-/* returns the present working directory (NULL on error) */
-const char* ftp_pwd(ftpbuf_t *ftp);
-
-/* exec a command [special features], return true on success, false on error */
-int ftp_exec(ftpbuf_t *ftp, const char *cmd);
-
-/* send a raw ftp command, return response as a hashtable, NULL on error */
-void ftp_raw(ftpbuf_t *ftp, const char *cmd, zval *return_value);
-
-/* changes directories, return true on success, false on error */
-int ftp_chdir(ftpbuf_t *ftp, const char *dir);
-
-/* changes to parent directory, return true on success, false on error */
-int ftp_cdup(ftpbuf_t *ftp);
-
-/* creates a directory, return the directory name on success, NULL on error.
- * the return value must be freed
- */
-char* ftp_mkdir(ftpbuf_t *ftp, const char *dir);
-
-/* removes a directory, return true on success, false on error */
-int ftp_rmdir(ftpbuf_t *ftp, const char *dir);
-
-/* Set permissions on a file */
-int ftp_chmod(ftpbuf_t *ftp, const int mode, const char *filename, const int filename_len);
-
-/* Allocate space on remote server with ALLO command
- * Many servers will respond with 202 Allocation not necessary,
- * however some servers will not accept STOR or APPE until ALLO is confirmed.
- * If response is passed, it is estrdup()ed from ftp->inbuf and must be freed
- * or assigned to a zval returned to the user */
-int ftp_alloc(ftpbuf_t *ftp, const int size, char **response);
-
-/* returns a NULL-terminated array of filenames in the given path
- * or NULL on error. the return array must be freed (but don't
- * free the array elements)
- */
-char** ftp_nlist(ftpbuf_t *ftp, const char *path TSRMLS_DC);
-
-/* returns a NULL-terminated array of lines returned by the ftp
- * LIST command for the given path or NULL on error. the return
- * array must be freed (but don't
- * free the array elements)
- */
-char** ftp_list(ftpbuf_t *ftp, const char *path, int recursive TSRMLS_DC);
-
-/* switches passive mode on or off
- * returns true on success, false on error
- */
-int ftp_pasv(ftpbuf_t *ftp, int pasv);
-
-/* retrieves a file and saves its contents to outfp
- * returns true on success, false on error
- */
-int ftp_get(ftpbuf_t *ftp, php_stream *outstream, const char *path, ftptype_t type, int resumepos TSRMLS_DC);
-
-/* stores the data from a file, socket, or process as a file on the remote server
- * returns true on success, false on error
- */
-int ftp_put(ftpbuf_t *ftp, const char *path, php_stream *instream, ftptype_t type, int startpos TSRMLS_DC);
-
-/* returns the size of the given file, or -1 on error */
-int ftp_size(ftpbuf_t *ftp, const char *path);
-
-/* returns the last modified time of the given file, or -1 on error */
-time_t ftp_mdtm(ftpbuf_t *ftp, const char *path);
-
-/* renames a file on the server */
-int ftp_rename(ftpbuf_t *ftp, const char *src, const char *dest);
-
-/* deletes the file from the server */
-int ftp_delete(ftpbuf_t *ftp, const char *path);
-
-/* sends a SITE command to the server */
-int ftp_site(ftpbuf_t *ftp, const char *cmd);
-
-/* retrieves part of a file and saves its contents to outfp
- * returns true on success, false on error
- */
-int ftp_nb_get(ftpbuf_t *ftp, php_stream *outstream, const char *path, ftptype_t type, int resumepos TSRMLS_DC);
-
-/* stores the data from a file, socket, or process as a file on the remote server
- * returns true on success, false on error
- */
-int ftp_nb_put(ftpbuf_t *ftp, const char *path, php_stream *instream, ftptype_t type, int startpos TSRMLS_DC);
-
-/* continues a previous nb_(f)get command
- */
-int ftp_nb_continue_read(ftpbuf_t *ftp TSRMLS_DC);
-
-/* continues a previous nb_(f)put command
- */
-int ftp_nb_continue_write(ftpbuf_t *ftp TSRMLS_DC);
-
-
-#endif
diff --git a/ext/ftp/package.xml b/ext/ftp/package.xml
deleted file mode 100644
index c1152cb3e8..0000000000
--- a/ext/ftp/package.xml
+++ /dev/null
@@ -1,56 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1" ?>
-<!DOCTYPE package SYSTEM "../pear/package.dtd">
-<package>
- <name>ftp</name>
- <summary>File Transfer Protocol functions</summary>
- <maintainers>
- <maintainer>
- <user>???</user>
- <name>Andrew Skalski</name>
- <email>askalski@chek.com</email>
- <role>lead</role>
- </maintainer>
- <maintainer>
- <user>sesser</user>
- <name>Stefan Esser</name>
- <email>sesser@php.net</email>
- <role>lead</role>
- </maintainer>
- </maintainers>
- <description>
-The functions in this extension implement client access to file
-servers speaking the File Transfer Protocol (FTP) as defined in
-http://www.faqs.org/rfcs/rfc959. This extension is meant for
-detailed access to an FTP server providing a wide range of
-control to the executing script. If you only wish to read from
-or write to a file on an FTP server, consider using the ftp://
-wrapper with the filesystem functions which provide a simpler
-and more intuitive interface.
- </description>
- <license>PHP</license>
- <release>
- <state>beta</state>
- <version>5.0.0rc1</version>
- <date>2004-03-19</date>
- <notes>
-package.xml added to support intallation using pear installer
- </notes>
- <filelist>
- <file role="doc" name="CREDITS"/>
- <file role="doc" name="README"/>
- <file role="src" name="config.m4"/>
- <file role="src" name="config.w32"/>
- <file role="src" name="ctype.dsp"/>
- <file role="src" name="ftp.c"/>
- <file role="src" name="ftp.h"/>
- <file role="src" name="php_ftp.c"/>
- <file role="src" name="php_ftp.h"/>
- </filelist>
- <deps>
- <dep type="php" rel="ge" version="5" />
- </deps>
- </release>
-</package>
-<!--
-vim:et:ts=1:sw=1
--->
diff --git a/ext/ftp/php_ftp.c b/ext/ftp/php_ftp.c
deleted file mode 100644
index 0466ed99aa..0000000000
--- a/ext/ftp/php_ftp.c
+++ /dev/null
@@ -1,1253 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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. |
- +----------------------------------------------------------------------+
- | Authors: Andrew Skalski <askalski@chek.com> |
- | Stefan Esser <sesser@php.net> (resume functions) |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "php.h"
-
-#ifdef NETWARE
-#ifdef USE_WINSOCK
-#include <novsock2.h>
-#else
-#ifndef NEW_LIBC
-#include <sys/socket.h>
-#endif
-#endif
-#endif
-
-#if HAVE_OPENSSL_EXT
-# include <openssl/ssl.h>
-#endif
-
-#if HAVE_FTP
-
-#include "ext/standard/info.h"
-#include "ext/standard/file.h"
-
-#include "php_ftp.h"
-#include "ftp.h"
-
-static int le_ftpbuf;
-#define le_ftpbuf_name "FTP Buffer"
-
-static
- ZEND_BEGIN_ARG_INFO(third_and_rest_force_ref, 1)
- ZEND_ARG_PASS_INFO(0)
- ZEND_ARG_PASS_INFO(0)
- ZEND_ARG_PASS_INFO(1)
- ZEND_END_ARG_INFO()
-
-function_entry php_ftp_functions[] = {
- PHP_FE(ftp_connect, NULL)
-#if HAVE_OPENSSL_EXT
- PHP_FE(ftp_ssl_connect, NULL)
-#endif
- PHP_FE(ftp_login, NULL)
- PHP_FE(ftp_pwd, NULL)
- PHP_FE(ftp_cdup, NULL)
- PHP_FE(ftp_chdir, NULL)
- PHP_FE(ftp_exec, NULL)
- PHP_FE(ftp_raw, NULL)
- PHP_FE(ftp_mkdir, NULL)
- PHP_FE(ftp_rmdir, NULL)
- PHP_FE(ftp_chmod, NULL)
- PHP_FE(ftp_alloc, third_and_rest_force_ref)
- PHP_FE(ftp_nlist, NULL)
- PHP_FE(ftp_rawlist, NULL)
- PHP_FE(ftp_systype, NULL)
- PHP_FE(ftp_pasv, NULL)
- PHP_FE(ftp_get, NULL)
- PHP_FE(ftp_fget, NULL)
- PHP_FE(ftp_put, NULL)
- PHP_FE(ftp_fput, NULL)
- PHP_FE(ftp_size, NULL)
- PHP_FE(ftp_mdtm, NULL)
- PHP_FE(ftp_rename, NULL)
- PHP_FE(ftp_delete, NULL)
- PHP_FE(ftp_site, NULL)
- PHP_FE(ftp_close, NULL)
- PHP_FE(ftp_set_option, NULL)
- PHP_FE(ftp_get_option, NULL)
- PHP_FE(ftp_nb_fget, NULL)
- PHP_FE(ftp_nb_get, NULL)
- PHP_FE(ftp_nb_continue, NULL)
- PHP_FE(ftp_nb_put, NULL)
- PHP_FE(ftp_nb_fput, NULL)
- PHP_FALIAS(ftp_quit, ftp_close, NULL)
- {NULL, NULL, NULL}
-};
-
-zend_module_entry php_ftp_module_entry = {
- STANDARD_MODULE_HEADER,
- "ftp",
- php_ftp_functions,
- PHP_MINIT(ftp),
- NULL,
- NULL,
- NULL,
- PHP_MINFO(ftp),
- NO_VERSION_YET,
- STANDARD_MODULE_PROPERTIES
-};
-
-#if COMPILE_DL_FTP
-ZEND_GET_MODULE(php_ftp)
-#endif
-
-static void ftp_destructor_ftpbuf(zend_rsrc_list_entry *rsrc TSRMLS_DC)
-{
- ftpbuf_t *ftp = (ftpbuf_t *)rsrc->ptr;
-
- ftp_close(ftp);
-}
-
-PHP_MINIT_FUNCTION(ftp)
-{
- le_ftpbuf = zend_register_list_destructors_ex(ftp_destructor_ftpbuf, NULL, le_ftpbuf_name, module_number);
- REGISTER_LONG_CONSTANT("FTP_ASCII", FTPTYPE_ASCII, CONST_PERSISTENT | CONST_CS);
- REGISTER_LONG_CONSTANT("FTP_TEXT", FTPTYPE_ASCII, CONST_PERSISTENT | CONST_CS);
- REGISTER_LONG_CONSTANT("FTP_BINARY", FTPTYPE_IMAGE, CONST_PERSISTENT | CONST_CS);
- REGISTER_LONG_CONSTANT("FTP_IMAGE", FTPTYPE_IMAGE, CONST_PERSISTENT | CONST_CS);
- REGISTER_LONG_CONSTANT("FTP_AUTORESUME", PHP_FTP_AUTORESUME, CONST_PERSISTENT | CONST_CS);
- REGISTER_LONG_CONSTANT("FTP_TIMEOUT_SEC", PHP_FTP_OPT_TIMEOUT_SEC, CONST_PERSISTENT | CONST_CS);
- REGISTER_LONG_CONSTANT("FTP_AUTOSEEK", PHP_FTP_OPT_AUTOSEEK, CONST_PERSISTENT | CONST_CS);
- REGISTER_LONG_CONSTANT("FTP_FAILED", PHP_FTP_FAILED, CONST_PERSISTENT | CONST_CS);
- REGISTER_LONG_CONSTANT("FTP_FINISHED", PHP_FTP_FINISHED, CONST_PERSISTENT | CONST_CS);
- REGISTER_LONG_CONSTANT("FTP_MOREDATA", PHP_FTP_MOREDATA, CONST_PERSISTENT | CONST_CS);
- return SUCCESS;
-}
-
-PHP_MINFO_FUNCTION(ftp)
-{
- php_info_print_table_start();
- php_info_print_table_row(2, "FTP support", "enabled");
- php_info_print_table_end();
-}
-
-#define XTYPE(xtype, mode) { \
- if (mode != FTPTYPE_ASCII && mode != FTPTYPE_IMAGE) { \
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Mode must be FTP_ASCII or FTP_BINARY"); \
- RETURN_FALSE; \
- } \
- xtype = mode; \
- }
-
-
-/* {{{ proto resource ftp_connect(string host [, int port [, int timeout]])
- Opens a FTP stream */
-PHP_FUNCTION(ftp_connect)
-{
- ftpbuf_t *ftp;
- char *host;
- int host_len;
- long port = 0;
- long timeout_sec = FTP_DEFAULT_TIMEOUT;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|ll", &host, &host_len, &port, &timeout_sec) == FAILURE) {
- return;
- }
-
- if (timeout_sec <= 0) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Timeout has to be greater than 0");
- RETURN_FALSE;
- }
-
- /* connect */
- if (!(ftp = ftp_open(host, (short)port, timeout_sec TSRMLS_CC))) {
- RETURN_FALSE;
- }
-
- /* autoseek for resuming */
- ftp->autoseek = FTP_DEFAULT_AUTOSEEK;
-#if HAVE_OPENSSL_EXT
- /* disable ssl */
- ftp->use_ssl = 0;
-#endif
-
- ZEND_REGISTER_RESOURCE(return_value, ftp, le_ftpbuf);
-}
-/* }}} */
-
-#if HAVE_OPENSSL_EXT
-/* {{{ proto resource ftp_ssl_connect(string host [, int port [, int timeout]])
- Opens a FTP-SSL stream */
-PHP_FUNCTION(ftp_ssl_connect)
-{
- ftpbuf_t *ftp;
- char *host;
- int host_len;
- long port = 0;
- long timeout_sec = FTP_DEFAULT_TIMEOUT;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|ll", &host, &host_len, &port, &timeout_sec) == FAILURE) {
- return;
- }
-
- if (timeout_sec <= 0) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Timeout has to be greater than 0");
- RETURN_FALSE;
- }
-
- /* connect */
- if (!(ftp = ftp_open(host, (short)port, timeout_sec TSRMLS_CC))) {
- RETURN_FALSE;
- }
-
- /* autoseek for resuming */
- ftp->autoseek = FTP_DEFAULT_AUTOSEEK;
- /* enable ssl */
- ftp->use_ssl = 1;
-
- ZEND_REGISTER_RESOURCE(return_value, ftp, le_ftpbuf);
-}
-/* }}} */
-#endif
-
-/* {{{ proto bool ftp_login(resource stream, string username, string password)
- Logs into the FTP server */
-PHP_FUNCTION(ftp_login)
-{
- zval *z_ftp;
- ftpbuf_t *ftp;
- char *user, *pass;
- int user_len, pass_len;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rss", &z_ftp, &user, &user_len, &pass, &pass_len) == FAILURE) {
- return;
- }
-
- ZEND_FETCH_RESOURCE(ftp, ftpbuf_t*, &z_ftp, -1, le_ftpbuf_name, le_ftpbuf);
-
- /* log in */
- if (!ftp_login(ftp, user, pass TSRMLS_CC)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", ftp->inbuf);
- RETURN_FALSE;
- }
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto string ftp_pwd(resource stream)
- Returns the present working directory */
-PHP_FUNCTION(ftp_pwd)
-{
- zval *z_ftp;
- ftpbuf_t *ftp;
- const char *pwd;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &z_ftp) == FAILURE) {
- return;
- }
-
- ZEND_FETCH_RESOURCE(ftp, ftpbuf_t*, &z_ftp, -1, le_ftpbuf_name, le_ftpbuf);
-
- if (!(pwd = ftp_pwd(ftp))) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", ftp->inbuf);
- RETURN_FALSE;
- }
-
- RETURN_STRING((char*) pwd, 1);
-}
-/* }}} */
-
-/* {{{ proto bool ftp_cdup(resource stream)
- Changes to the parent directory */
-PHP_FUNCTION(ftp_cdup)
-{
- zval *z_ftp;
- ftpbuf_t *ftp;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &z_ftp) == FAILURE) {
- return;
- }
-
- ZEND_FETCH_RESOURCE(ftp, ftpbuf_t*, &z_ftp, -1, le_ftpbuf_name, le_ftpbuf);
-
- if (!ftp_cdup(ftp)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", ftp->inbuf);
- RETURN_FALSE;
- }
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto bool ftp_chdir(resource stream, string directory)
- Changes directories */
-PHP_FUNCTION(ftp_chdir)
-{
- zval *z_ftp;
- ftpbuf_t *ftp;
- char *dir;
- int dir_len;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rs", &z_ftp, &dir, &dir_len) == FAILURE) {
- return;
- }
-
- ZEND_FETCH_RESOURCE(ftp, ftpbuf_t*, &z_ftp, -1, le_ftpbuf_name, le_ftpbuf);
-
- /* change directories */
- if (!ftp_chdir(ftp, dir)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", ftp->inbuf);
- RETURN_FALSE;
- }
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto bool ftp_exec(resource stream, string command)
- Requests execution of a program on the FTP server */
-PHP_FUNCTION(ftp_exec)
-{
- pval *z_ftp;
- ftpbuf_t *ftp;
- char *cmd;
- int cmd_len;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rs", &z_ftp, &cmd, &cmd_len) == FAILURE) {
- return;
- }
-
- ZEND_FETCH_RESOURCE(ftp, ftpbuf_t*, &z_ftp, -1, le_ftpbuf_name, le_ftpbuf);
-
- /* execute serverside command */
- if (!ftp_exec(ftp, cmd)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", ftp->inbuf);
- RETURN_FALSE;
- }
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto array ftp_raw(resource stream, string command)
- Sends a literal command to the FTP server */
-PHP_FUNCTION(ftp_raw)
-{
- zval *z_ftp;
- ftpbuf_t *ftp;
- char *cmd;
- int cmd_len;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rs", &z_ftp, &cmd, &cmd_len) == FAILURE) {
- return;
- }
-
- ZEND_FETCH_RESOURCE(ftp, ftpbuf_t*, &z_ftp, -1, le_ftpbuf_name, le_ftpbuf);
-
- /* execute arbitrary ftp command */
- ftp_raw(ftp, cmd, return_value);
-}
-/* }}} */
-
-/* {{{ proto string ftp_mkdir(resource stream, string directory)
- Creates a directory and returns the absolute path for the new directory or false on error */
-PHP_FUNCTION(ftp_mkdir)
-{
- zval *z_ftp;
- ftpbuf_t *ftp;
- char *dir, *tmp;
- int dir_len;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rs", &z_ftp, &dir, &dir_len) == FAILURE) {
- return;
- }
-
- ZEND_FETCH_RESOURCE(ftp, ftpbuf_t*, &z_ftp, -1, le_ftpbuf_name, le_ftpbuf);
-
- /* create directorie */
- if (NULL == (tmp = ftp_mkdir(ftp, dir))) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", ftp->inbuf);
- RETURN_FALSE;
- }
-
- RETURN_STRING(tmp, 0);
-}
-/* }}} */
-
-/* {{{ proto bool ftp_rmdir(resource stream, string directory)
- Removes a directory */
-PHP_FUNCTION(ftp_rmdir)
-{
- zval *z_ftp;
- ftpbuf_t *ftp;
- char *dir;
- int dir_len;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rs", &z_ftp, &dir, &dir_len) == FAILURE) {
- return;
- }
-
- ZEND_FETCH_RESOURCE(ftp, ftpbuf_t*, &z_ftp, -1, le_ftpbuf_name, le_ftpbuf);
-
- /* remove directorie */
- if (!ftp_rmdir(ftp, dir)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", ftp->inbuf);
- RETURN_FALSE;
- }
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto int ftp_chmod(resource stream, int mode, string filename)
- Sets permissions on a file */
-PHP_FUNCTION(ftp_chmod)
-{
- zval *z_ftp;
- ftpbuf_t *ftp;
- char *filename;
- int filename_len;
- long mode;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rls", &z_ftp, &mode, &filename, &filename_len) == FAILURE) {
- RETURN_FALSE;
- }
-
- ZEND_FETCH_RESOURCE(ftp, ftpbuf_t*, &z_ftp, -1, le_ftpbuf_name, le_ftpbuf);
-
- if (!ftp_chmod(ftp, mode, filename, filename_len)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", ftp->inbuf);
- RETURN_FALSE;
- }
-
- RETURN_LONG(mode);
-}
-/* }}} */
-
-/* {{{ proto bool ftp_alloc(resource stream, int size[, &response])
- Attempt to allocate space on the remote FTP server */
-PHP_FUNCTION(ftp_alloc)
-{
- zval *z_ftp, *zresponse = NULL;
- ftpbuf_t *ftp;
- long size, ret;
- char *response = NULL;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rl|z", &z_ftp, &size, &zresponse) == FAILURE) {
- RETURN_FALSE;
- }
-
- ZEND_FETCH_RESOURCE(ftp, ftpbuf_t*, &z_ftp, -1, le_ftpbuf_name, le_ftpbuf);
-
- ret = ftp_alloc(ftp, size, zresponse ? &response : NULL);
- if (response) {
- zval_dtor(zresponse);
- ZVAL_STRING(zresponse, response, 0);
- }
-
- if (!ret) {
- RETURN_FALSE;
- }
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto array ftp_nlist(resource stream, string directory)
- Returns an array of filenames in the given directory */
-PHP_FUNCTION(ftp_nlist)
-{
- zval *z_ftp;
- ftpbuf_t *ftp;
- char **nlist, **ptr, *dir;
- int dir_len;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rs", &z_ftp, &dir, &dir_len) == FAILURE) {
- return;
- }
-
- ZEND_FETCH_RESOURCE(ftp, ftpbuf_t*, &z_ftp, -1, le_ftpbuf_name, le_ftpbuf);
-
- /* get list of files */
- if (NULL == (nlist = ftp_nlist(ftp, dir TSRMLS_CC))) {
- RETURN_FALSE;
- }
-
- array_init(return_value);
- for (ptr = nlist; *ptr; ptr++) {
- add_next_index_string(return_value, *ptr, 1);
- }
- efree(nlist);
-}
-/* }}} */
-
-/* {{{ proto array ftp_rawlist(resource stream, string directory [, bool recursive])
- Returns a detailed listing of a directory as an array of output lines */
-PHP_FUNCTION(ftp_rawlist)
-{
- zval *z_ftp;
- ftpbuf_t *ftp;
- char **llist, **ptr, *dir;
- int dir_len;
- zend_bool recursive = 0;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rs|b", &z_ftp, &dir, &dir_len, &recursive) == FAILURE) {
- return;
- }
-
- ZEND_FETCH_RESOURCE(ftp, ftpbuf_t*, &z_ftp, -1, le_ftpbuf_name, le_ftpbuf);
-
- /* get raw directory listing */
- if (NULL == (llist = ftp_list(ftp, dir, recursive TSRMLS_CC))) {
- RETURN_FALSE;
- }
-
- array_init(return_value);
- for (ptr = llist; *ptr; ptr++) {
- add_next_index_string(return_value, *ptr, 1);
- }
- efree(llist);
-}
-/* }}} */
-
-/* {{{ proto string ftp_systype(resource stream)
- Returns the system type identifier */
-PHP_FUNCTION(ftp_systype)
-{
- zval *z_ftp;
- ftpbuf_t *ftp;
- const char *syst;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &z_ftp) == FAILURE) {
- return;
- }
-
- ZEND_FETCH_RESOURCE(ftp, ftpbuf_t*, &z_ftp, -1, le_ftpbuf_name, le_ftpbuf);
-
- if (NULL == (syst = ftp_syst(ftp))) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", ftp->inbuf);
- RETURN_FALSE;
- }
-
- RETURN_STRING((char*) syst, 1);
-}
-/* }}} */
-
-/* {{{ proto bool ftp_fget(resource stream, resource fp, string remote_file, int mode[, int resumepos])
- Retrieves a file from the FTP server and writes it to an open file */
-PHP_FUNCTION(ftp_fget)
-{
- zval *z_ftp, *z_file;
- ftpbuf_t *ftp;
- ftptype_t xtype;
- php_stream *stream;
- char *file;
- int file_len;
- long mode, resumepos=0;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rrsl|l", &z_ftp, &z_file, &file, &file_len, &mode, &resumepos) == FAILURE) {
- return;
- }
-
- ZEND_FETCH_RESOURCE(ftp, ftpbuf_t*, &z_ftp, -1, le_ftpbuf_name, le_ftpbuf);
- php_stream_from_zval(stream, &z_file);
- XTYPE(xtype, mode);
-
- /* ignore autoresume if autoseek is switched off */
- if (!ftp->autoseek && resumepos == PHP_FTP_AUTORESUME) {
- resumepos = 0;
- }
-
- if (ftp->autoseek && resumepos) {
- /* if autoresume is wanted seek to end */
- if (resumepos == PHP_FTP_AUTORESUME) {
- php_stream_seek(stream, 0, SEEK_END);
- resumepos = php_stream_tell(stream);
- } else {
- php_stream_seek(stream, resumepos, SEEK_SET);
- }
- }
-
- if (!ftp_get(ftp, stream, file, xtype, resumepos TSRMLS_CC)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", ftp->inbuf);
- RETURN_FALSE;
- }
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto int ftp_nb_fget(resource stream, resource fp, string remote_file, int mode[, int resumepos])
- Retrieves a file from the FTP server asynchronly and writes it to an open file */
-PHP_FUNCTION(ftp_nb_fget)
-{
- zval *z_ftp, *z_file;
- ftpbuf_t *ftp;
- ftptype_t xtype;
- php_stream *stream;
- char *file;
- int file_len, ret;
- long mode, resumepos=0;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rrsl|l", &z_ftp, &z_file, &file, &file_len, &mode, &resumepos) == FAILURE) {
- return;
- }
-
- ZEND_FETCH_RESOURCE(ftp, ftpbuf_t*, &z_ftp, -1, le_ftpbuf_name, le_ftpbuf);
- php_stream_from_zval(stream, &z_file);
- XTYPE(xtype, mode);
-
- /* ignore autoresume if autoseek is switched off */
- if (!ftp->autoseek && resumepos == PHP_FTP_AUTORESUME) {
- resumepos = 0;
- }
-
- if (ftp->autoseek && resumepos) {
- /* if autoresume is wanted seek to end */
- if (resumepos == PHP_FTP_AUTORESUME) {
- php_stream_seek(stream, 0, SEEK_END);
- resumepos = php_stream_tell(stream);
- } else {
- php_stream_seek(stream, resumepos, SEEK_SET);
- }
- }
-
- /* configuration */
- ftp->direction = 0; /* recv */
- ftp->closestream = 0; /* do not close */
-
- if ((ret = ftp_nb_get(ftp, stream, file, xtype, resumepos TSRMLS_CC)) == PHP_FTP_FAILED) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", ftp->inbuf);
- RETURN_LONG(ret);
- }
-
- RETURN_LONG(ret);
-}
-/* }}} */
-
-/* {{{ proto bool ftp_pasv(resource stream, bool pasv)
- Turns passive mode on or off */
-PHP_FUNCTION(ftp_pasv)
-{
- zval *z_ftp;
- ftpbuf_t *ftp;
- zend_bool pasv;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rb", &z_ftp, &pasv) == FAILURE) {
- return;
- }
-
- ZEND_FETCH_RESOURCE(ftp, ftpbuf_t*, &z_ftp, -1, le_ftpbuf_name, le_ftpbuf);
-
- if (!ftp_pasv(ftp, pasv ? 1 : 0)) {
- RETURN_FALSE;
- }
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto bool ftp_get(resource stream, string local_file, string remote_file, int mode[, int resume_pos])
- Retrieves a file from the FTP server and writes it to a local file */
-PHP_FUNCTION(ftp_get)
-{
- zval *z_ftp;
- ftpbuf_t *ftp;
- ftptype_t xtype;
- php_stream *outstream;
- char *local, *remote;
- int local_len, remote_len;
- long mode, resumepos=0;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rssl|l", &z_ftp, &local, &local_len, &remote, &remote_len, &mode, &resumepos) == FAILURE) {
- return;
- }
-
- ZEND_FETCH_RESOURCE(ftp, ftpbuf_t*, &z_ftp, -1, le_ftpbuf_name, le_ftpbuf);
- XTYPE(xtype, mode);
-
- /* ignore autoresume if autoseek is switched off */
- if (!ftp->autoseek && resumepos == PHP_FTP_AUTORESUME) {
- resumepos = 0;
- }
-
- if (ftp->autoseek && resumepos) {
- outstream = php_stream_open_wrapper(local, mode == FTPTYPE_ASCII ? "rt+" : "rb+", ENFORCE_SAFE_MODE | REPORT_ERRORS, NULL);
- if (outstream == NULL) {
- outstream = php_stream_open_wrapper(local, mode == FTPTYPE_ASCII ? "wt" : "wb", ENFORCE_SAFE_MODE | REPORT_ERRORS, NULL);
- }
- if (outstream != NULL) {
- /* if autoresume is wanted seek to end */
- if (resumepos == PHP_FTP_AUTORESUME) {
- php_stream_seek(outstream, 0, SEEK_END);
- resumepos = php_stream_tell(outstream);
- } else {
- php_stream_seek(outstream, resumepos, SEEK_SET);
- }
- }
- } else {
- outstream = php_stream_open_wrapper(local, mode == FTPTYPE_ASCII ? "wt" : "wb", ENFORCE_SAFE_MODE | REPORT_ERRORS, NULL);
- }
-
- if (outstream == NULL) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Error opening %s", local);
- RETURN_FALSE;
- }
-
- if (!ftp_get(ftp, outstream, remote, xtype, resumepos TSRMLS_CC)) {
- php_stream_close(outstream);
- VCWD_UNLINK(local);
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", ftp->inbuf);
- RETURN_FALSE;
- }
-
- php_stream_close(outstream);
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto int ftp_nb_get(resource stream, string local_file, string remote_file, int mode[, int resume_pos])
- Retrieves a file from the FTP server nbhronly and writes it to a local file */
-PHP_FUNCTION(ftp_nb_get)
-{
- zval *z_ftp;
- ftpbuf_t *ftp;
- ftptype_t xtype;
- php_stream *outstream;
- char *local, *remote;
- int local_len, remote_len, ret;
- long mode, resumepos=0;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rssl|l", &z_ftp, &local, &local_len, &remote, &remote_len, &mode, &resumepos) == FAILURE) {
- return;
- }
-
- ZEND_FETCH_RESOURCE(ftp, ftpbuf_t*, &z_ftp, -1, le_ftpbuf_name, le_ftpbuf);
- XTYPE(xtype, mode);
-
- /* ignore autoresume if autoseek is switched off */
- if (!ftp->autoseek && resumepos == PHP_FTP_AUTORESUME) {
- resumepos = 0;
- }
-
- if (ftp->autoseek && resumepos) {
- outstream = php_stream_open_wrapper(local, mode == FTPTYPE_ASCII ? "rt+" : "rb+", ENFORCE_SAFE_MODE | REPORT_ERRORS, NULL);
- if (outstream == NULL) {
- outstream = php_stream_open_wrapper(local, mode == FTPTYPE_ASCII ? "wt" : "wb", ENFORCE_SAFE_MODE | REPORT_ERRORS, NULL);
- }
- if (outstream != NULL) {
- /* if autoresume is wanted seek to end */
- if (resumepos == PHP_FTP_AUTORESUME) {
- php_stream_seek(outstream, 0, SEEK_END);
- resumepos = php_stream_tell(outstream);
- } else {
- php_stream_seek(outstream, resumepos, SEEK_SET);
- }
- }
- } else {
- outstream = php_stream_open_wrapper(local, mode == FTPTYPE_ASCII ? "wt" : "wb", ENFORCE_SAFE_MODE | REPORT_ERRORS, NULL);
- }
-
- if (outstream == NULL) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Error opening %s", local);
- RETURN_FALSE;
- }
-
- /* configuration */
- ftp->direction = 0; /* recv */
- ftp->closestream = 1; /* do close */
-
- if ((ret = ftp_nb_get(ftp, outstream, remote, xtype, resumepos TSRMLS_CC)) == PHP_FTP_FAILED) {
- php_stream_close(outstream);
- VCWD_UNLINK(local);
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", ftp->inbuf);
- RETURN_LONG(PHP_FTP_FAILED);
- }
-
- if (ret == PHP_FTP_FINISHED) {
- php_stream_close(outstream);
- }
-
- RETURN_LONG(ret);
-}
-/* }}} */
-
-/* {{{ proto int ftp_nb_continue(resource stream)
- Continues retrieving/sending a file nbronously */
-PHP_FUNCTION(ftp_nb_continue)
-{
- zval *z_ftp;
- ftpbuf_t *ftp;
- int ret;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &z_ftp) == FAILURE) {
- return;
- }
-
- ZEND_FETCH_RESOURCE(ftp, ftpbuf_t*, &z_ftp, -1, le_ftpbuf_name, le_ftpbuf);
-
- if (!ftp->nb) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "no nbronous transfer to continue.");
- RETURN_LONG(PHP_FTP_FAILED);
- }
-
- if (ftp->direction) {
- ret=ftp_nb_continue_write(ftp TSRMLS_CC);
- } else {
- ret=ftp_nb_continue_read(ftp TSRMLS_CC);
- }
-
- if (ret != PHP_FTP_MOREDATA && ftp->closestream) {
- php_stream_close(ftp->stream);
- }
-
- if (ret == PHP_FTP_FAILED) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", ftp->inbuf);
- }
-
- RETURN_LONG(ret);
-}
-/* }}} */
-
-/* {{{ proto bool ftp_fput(resource stream, string remote_file, resource fp, int mode[, int startpos])
- Stores a file from an open file to the FTP server */
-PHP_FUNCTION(ftp_fput)
-{
- zval *z_ftp, *z_file;
- ftpbuf_t *ftp;
- ftptype_t xtype;
- int remote_len;
- long mode, startpos=0;
- php_stream *stream;
- char *remote;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rsrl|l", &z_ftp, &remote, &remote_len, &z_file, &mode, &startpos) == FAILURE) {
- return;
- }
-
- ZEND_FETCH_RESOURCE(ftp, ftpbuf_t*, &z_ftp, -1, le_ftpbuf_name, le_ftpbuf);
- php_stream_from_zval(stream, &z_file);
- XTYPE(xtype, mode);
-
- /* ignore autoresume if autoseek is switched off */
- if (!ftp->autoseek && startpos == PHP_FTP_AUTORESUME) {
- startpos = 0;
- }
-
- if (ftp->autoseek && startpos) {
- /* if autoresume is wanted ask for remote size */
- if (startpos == PHP_FTP_AUTORESUME) {
- startpos = ftp_size(ftp, remote);
- if (startpos < 0) {
- startpos = 0;
- }
- }
- if (startpos) {
- php_stream_seek(stream, startpos, SEEK_SET);
- }
- }
-
- if (!ftp_put(ftp, remote, stream, xtype, startpos TSRMLS_CC)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", ftp->inbuf);
- RETURN_FALSE;
- }
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto int ftp_nb_fput(resource stream, string remote_file, resource fp, int mode[, int startpos])
- Stores a file from an open file to the FTP server nbronly */
-PHP_FUNCTION(ftp_nb_fput)
-{
- zval *z_ftp, *z_file;
- ftpbuf_t *ftp;
- ftptype_t xtype;
- int remote_len, ret;
- long mode, startpos=0;
- php_stream *stream;
- char *remote;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rsrl|l", &z_ftp, &remote, &remote_len, &z_file, &mode, &startpos) == FAILURE) {
- return;
- }
-
- ZEND_FETCH_RESOURCE(ftp, ftpbuf_t*, &z_ftp, -1, le_ftpbuf_name, le_ftpbuf);
- php_stream_from_zval(stream, &z_file);
- XTYPE(xtype, mode);
-
- /* ignore autoresume if autoseek is switched off */
- if (!ftp->autoseek && startpos == PHP_FTP_AUTORESUME) {
- startpos = 0;
- }
-
- if (ftp->autoseek && startpos) {
- /* if autoresume is wanted ask for remote size */
- if (startpos == PHP_FTP_AUTORESUME) {
- startpos = ftp_size(ftp, remote);
- if (startpos < 0) {
- startpos = 0;
- }
- }
- if (startpos) {
- php_stream_seek(stream, startpos, SEEK_SET);
- }
- }
-
- /* configuration */
- ftp->direction = 1; /* send */
- ftp->closestream = 0; /* do not close */
-
- if (((ret = ftp_nb_put(ftp, remote, stream, xtype, startpos TSRMLS_CC)) == PHP_FTP_FAILED)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", ftp->inbuf);
- RETURN_LONG(ret);
- }
-
- RETURN_LONG(ret);
-}
-/* }}} */
-
-
-/* {{{ proto bool ftp_put(resource stream, string remote_file, string local_file, int mode[, int startpos])
- Stores a file on the FTP server */
-PHP_FUNCTION(ftp_put)
-{
- zval *z_ftp;
- ftpbuf_t *ftp;
- ftptype_t xtype;
- char *remote, *local;
- int remote_len, local_len;
- long mode, startpos=0;
- php_stream *instream;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rssl|l", &z_ftp, &remote, &remote_len, &local, &local_len, &mode, &startpos) == FAILURE) {
- return;
- }
-
- ZEND_FETCH_RESOURCE(ftp, ftpbuf_t*, &z_ftp, -1, le_ftpbuf_name, le_ftpbuf);
- XTYPE(xtype, mode);
-
- if (!(instream = php_stream_open_wrapper(local, mode == FTPTYPE_ASCII ? "rt" : "rb", ENFORCE_SAFE_MODE | REPORT_ERRORS, NULL))) {
- RETURN_FALSE;
- }
-
- /* ignore autoresume if autoseek is switched off */
- if (!ftp->autoseek && startpos == PHP_FTP_AUTORESUME) {
- startpos = 0;
- }
-
- if (ftp->autoseek && startpos) {
- /* if autoresume is wanted ask for remote size */
- if (startpos == PHP_FTP_AUTORESUME) {
- startpos = ftp_size(ftp, remote);
- if (startpos < 0) {
- startpos = 0;
- }
- }
- if (startpos) {
- php_stream_seek(instream, startpos, SEEK_SET);
- }
- }
-
- if (!ftp_put(ftp, remote, instream, xtype, startpos TSRMLS_CC)) {
- php_stream_close(instream);
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", ftp->inbuf);
- RETURN_FALSE;
- }
- php_stream_close(instream);
-
- RETURN_TRUE;
-}
-/* }}} */
-
-
-/* {{{ proto int ftp_nb_put(resource stream, string remote_file, string local_file, int mode[, int startpos])
- Stores a file on the FTP server */
-PHP_FUNCTION(ftp_nb_put)
-{
- zval *z_ftp;
- ftpbuf_t *ftp;
- ftptype_t xtype;
- char *remote, *local;
- int remote_len, local_len, ret;
- long mode, startpos=0;
- php_stream *instream;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rssl|l", &z_ftp, &remote, &remote_len, &local, &local_len, &mode, &startpos) == FAILURE) {
- return;
- }
-
- ZEND_FETCH_RESOURCE(ftp, ftpbuf_t*, &z_ftp, -1, le_ftpbuf_name, le_ftpbuf);
- XTYPE(xtype, mode);
-
- if (!(instream = php_stream_open_wrapper(local, mode == FTPTYPE_ASCII ? "rt" : "rb", ENFORCE_SAFE_MODE | REPORT_ERRORS, NULL))) {
- RETURN_FALSE;
- }
-
- /* ignore autoresume if autoseek is switched off */
- if (!ftp->autoseek && startpos == PHP_FTP_AUTORESUME) {
- startpos = 0;
- }
-
- if (ftp->autoseek && startpos) {
- /* if autoresume is wanted ask for remote size */
- if (startpos == PHP_FTP_AUTORESUME) {
- startpos = ftp_size(ftp, remote);
- if (startpos < 0) {
- startpos = 0;
- }
- }
- if (startpos) {
- php_stream_seek(instream, startpos, SEEK_SET);
- }
- }
-
- /* configuration */
- ftp->direction = 1; /* send */
- ftp->closestream = 1; /* do close */
-
- ret = ftp_nb_put(ftp, remote, instream, xtype, startpos TSRMLS_CC);
-
- if (ret != PHP_FTP_MOREDATA) {
- php_stream_close(instream);
- }
-
- if (ret == PHP_FTP_FAILED) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", ftp->inbuf);
- }
-
- RETURN_LONG(ret);
-}
-/* }}} */
-
-/* {{{ proto int ftp_size(resource stream, string filename)
- Returns the size of the file, or -1 on error */
-PHP_FUNCTION(ftp_size)
-{
- zval *z_ftp;
- ftpbuf_t *ftp;
- char *file;
- int file_len;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rs", &z_ftp, &file, &file_len) == FAILURE) {
- return;
- }
-
- ZEND_FETCH_RESOURCE(ftp, ftpbuf_t*, &z_ftp, -1, le_ftpbuf_name, le_ftpbuf);
-
- /* get file size */
- RETURN_LONG(ftp_size(ftp, file));
-}
-/* }}} */
-
-/* {{{ proto int ftp_mdtm(resource stream, string filename)
- Returns the last modification time of the file, or -1 on error */
-PHP_FUNCTION(ftp_mdtm)
-{
- zval *z_ftp;
- ftpbuf_t *ftp;
- char *file;
- int file_len;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rs", &z_ftp, &file, &file_len) == FAILURE) {
- return;
- }
-
- ZEND_FETCH_RESOURCE(ftp, ftpbuf_t*, &z_ftp, -1, le_ftpbuf_name, le_ftpbuf);
-
- /* get file mod time */
- RETURN_LONG(ftp_mdtm(ftp, file));
-}
-/* }}} */
-
-/* {{{ proto bool ftp_rename(resource stream, string src, string dest)
- Renames the given file to a new path */
-PHP_FUNCTION(ftp_rename)
-{
- zval *z_ftp;
- ftpbuf_t *ftp;
- char *src, *dest;
- int src_len, dest_len;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rss", &z_ftp, &src, &src_len, &dest, &dest_len) == FAILURE) {
- return;
- }
-
- ZEND_FETCH_RESOURCE(ftp, ftpbuf_t*, &z_ftp, -1, le_ftpbuf_name, le_ftpbuf);
-
- /* rename the file */
- if (!ftp_rename(ftp, src, dest)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", ftp->inbuf);
- RETURN_FALSE;
- }
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto bool ftp_delete(resource stream, string file)
- Deletes a file */
-PHP_FUNCTION(ftp_delete)
-{
- zval *z_ftp;
- ftpbuf_t *ftp;
- char *file;
- int file_len;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rs", &z_ftp, &file, &file_len) == FAILURE) {
- return;
- }
-
- ZEND_FETCH_RESOURCE(ftp, ftpbuf_t*, &z_ftp, -1, le_ftpbuf_name, le_ftpbuf);
-
- /* delete the file */
- if (!ftp_delete(ftp, file)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", ftp->inbuf);
- RETURN_FALSE;
- }
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto bool ftp_site(resource stream, string cmd)
- Sends a SITE command to the server */
-PHP_FUNCTION(ftp_site)
-{
- zval *z_ftp;
- ftpbuf_t *ftp;
- char *cmd;
- int cmd_len;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rs", &z_ftp, &cmd, &cmd_len) == FAILURE) {
- return;
- }
-
- ZEND_FETCH_RESOURCE(ftp, ftpbuf_t*, &z_ftp, -1, le_ftpbuf_name, le_ftpbuf);
-
- /* send the site command */
- if (!ftp_site(ftp, cmd)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", ftp->inbuf);
- RETURN_FALSE;
- }
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto bool ftp_close(resource stream)
- Closes the FTP stream */
-PHP_FUNCTION(ftp_close)
-{
- zval *z_ftp;
- ftpbuf_t *ftp;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &z_ftp) == FAILURE) {
- return;
- }
-
- ZEND_FETCH_RESOURCE(ftp, ftpbuf_t*, &z_ftp, -1, le_ftpbuf_name, le_ftpbuf);
-
- ftp_quit(ftp);
-
- RETURN_BOOL(zend_list_delete(Z_LVAL_P(z_ftp)) == SUCCESS);
-}
-/* }}} */
-
-/* {{{ proto bool ftp_set_option(resource stream, int option, mixed value)
- Sets an FTP option */
-PHP_FUNCTION(ftp_set_option)
-{
- zval *z_ftp, *z_value;
- long option;
- ftpbuf_t *ftp;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rlz", &z_ftp, &option, &z_value) == FAILURE) {
- return;
- }
-
- ZEND_FETCH_RESOURCE(ftp, ftpbuf_t*, &z_ftp, -1, le_ftpbuf_name, le_ftpbuf);
-
- switch (option) {
- case PHP_FTP_OPT_TIMEOUT_SEC:
- if (Z_TYPE_P(z_value) != IS_LONG) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Option TIMEOUT_SEC expects value of type long, %s given",
- zend_zval_type_name(z_value));
- RETURN_FALSE;
- }
- if (Z_LVAL_P(z_value) <= 0) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Timeout has to be greater than 0");
- RETURN_FALSE;
- }
- ftp->timeout_sec = Z_LVAL_P(z_value);
- RETURN_TRUE;
- break;
- case PHP_FTP_OPT_AUTOSEEK:
- if (Z_TYPE_P(z_value) != IS_BOOL) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Option AUTOSEEK expects value of type boolean, %s given",
- zend_zval_type_name(z_value));
- RETURN_FALSE;
- }
- ftp->autoseek = Z_LVAL_P(z_value);
- RETURN_TRUE;
- break;
- default:
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unknown option '%ld'", option);
- RETURN_FALSE;
- break;
- }
-}
-/* }}} */
-
-/* {{{ proto mixed ftp_get_option(resource stream, int option)
- Gets an FTP option */
-PHP_FUNCTION(ftp_get_option)
-{
- zval *z_ftp;
- long option;
- ftpbuf_t *ftp;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rl", &z_ftp, &option) == FAILURE) {
- return;
- }
-
- ZEND_FETCH_RESOURCE(ftp, ftpbuf_t*, &z_ftp, -1, le_ftpbuf_name, le_ftpbuf);
-
- switch (option) {
- case PHP_FTP_OPT_TIMEOUT_SEC:
- RETURN_LONG(ftp->timeout_sec);
- break;
- case PHP_FTP_OPT_AUTOSEEK:
- RETURN_BOOL(ftp->autoseek);
- break;
- default:
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unknown option '%ld'", option);
- RETURN_FALSE;
- break;
- }
-}
-/* }}} */
-
-#endif /* HAVE_FTP */
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * indent-tabs-mode: t
- * End:
- */
diff --git a/ext/ftp/php_ftp.h b/ext/ftp/php_ftp.h
deleted file mode 100644
index 96df7464af..0000000000
--- a/ext/ftp/php_ftp.h
+++ /dev/null
@@ -1,79 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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. |
- +----------------------------------------------------------------------+
- | Authors: Andrew Skalski <askalski@chek.com> |
- | Stefan Esser <sesser@php.net> (resume functions) |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-#ifndef _INCLUDED_FTP_H
-#define _INCLUDED_FTP_H
-
-#if HAVE_FTP
-
-extern zend_module_entry php_ftp_module_entry;
-#define php_ftp_module_ptr &php_ftp_module_entry
-
-#define PHP_FTP_OPT_TIMEOUT_SEC 0
-#define PHP_FTP_OPT_AUTOSEEK 1
-#define PHP_FTP_AUTORESUME -1
-
-PHP_MINIT_FUNCTION(ftp);
-PHP_MINFO_FUNCTION(ftp);
-
-PHP_FUNCTION(ftp_connect);
-#ifdef HAVE_OPENSSL_EXT
-PHP_FUNCTION(ftp_ssl_connect);
-#endif
-PHP_FUNCTION(ftp_login);
-PHP_FUNCTION(ftp_pwd);
-PHP_FUNCTION(ftp_cdup);
-PHP_FUNCTION(ftp_chdir);
-PHP_FUNCTION(ftp_exec);
-PHP_FUNCTION(ftp_raw);
-PHP_FUNCTION(ftp_mkdir);
-PHP_FUNCTION(ftp_rmdir);
-PHP_FUNCTION(ftp_chmod);
-PHP_FUNCTION(ftp_alloc);
-PHP_FUNCTION(ftp_nlist);
-PHP_FUNCTION(ftp_rawlist);
-PHP_FUNCTION(ftp_systype);
-PHP_FUNCTION(ftp_pasv);
-PHP_FUNCTION(ftp_get);
-PHP_FUNCTION(ftp_fget);
-PHP_FUNCTION(ftp_put);
-PHP_FUNCTION(ftp_fput);
-PHP_FUNCTION(ftp_size);
-PHP_FUNCTION(ftp_mdtm);
-PHP_FUNCTION(ftp_rename);
-PHP_FUNCTION(ftp_delete);
-PHP_FUNCTION(ftp_site);
-PHP_FUNCTION(ftp_close);
-PHP_FUNCTION(ftp_set_option);
-PHP_FUNCTION(ftp_get_option);
-PHP_FUNCTION(ftp_nb_get);
-PHP_FUNCTION(ftp_nb_fget);
-PHP_FUNCTION(ftp_nb_put);
-PHP_FUNCTION(ftp_nb_fput);
-PHP_FUNCTION(ftp_nb_continue);
-
-#define phpext_ftp_ptr php_ftp_module_ptr
-
-#else
-#define php_ftp_module_ptr NULL
-#endif /* HAVE_FTP */
-
-#endif
diff --git a/ext/gd/CREDITS b/ext/gd/CREDITS
deleted file mode 100644
index 2393a9f8fc..0000000000
--- a/ext/gd/CREDITS
+++ /dev/null
@@ -1,2 +0,0 @@
-GD imaging
-Rasmus Lerdorf, Stig Bakken, Jim Winstead, Jouni Ahto, Ilia Alshanetsky, Pierre-Alain Joye, Marcus Boerger
diff --git a/ext/gd/config.m4 b/ext/gd/config.m4
deleted file mode 100644
index fba27659a9..0000000000
--- a/ext/gd/config.m4
+++ /dev/null
@@ -1,422 +0,0 @@
-dnl
-dnl $Id$
-dnl
-
-dnl
-dnl Configure options
-dnl
-
-PHP_ARG_WITH(gd, for GD support,
-[ --with-gd[=DIR] Include GD support where DIR is GD install prefix.
- If DIR is not set, the bundled GD library will be used.])
-
-if test -z "$PHP_JPEG_DIR"; then
- PHP_ARG_WITH(jpeg-dir, for the location of libjpeg,
- [ --with-jpeg-dir[=DIR] GD: Set the path to libjpeg install prefix.], no, no)
-fi
-
-if test -z "$PHP_PNG_DIR"; then
- PHP_ARG_WITH(png-dir, for the location of libpng,
- [ --with-png-dir[=DIR] GD: Set the path to libpng install prefix.], no, no)
-fi
-
-if test -z "$PHP_ZLIB_DIR"; then
- PHP_ARG_WITH(zlib-dir, for the location of libz,
- [ --with-zlib-dir[=DIR] GD: Set the path to libz install prefix.], no, no)
-fi
-
-PHP_ARG_WITH(xpm-dir, for the location of libXpm,
-[ --with-xpm-dir[=DIR] GD: Set the path to libXpm install prefix.], no, no)
-
-PHP_ARG_WITH(ttf, for FreeType 1.x support,
-[ --with-ttf[=DIR] GD: Include FreeType 1.x support], no, no)
-
-PHP_ARG_WITH(freetype-dir, for FreeType 2,
-[ --with-freetype-dir[=DIR] GD: Set the path to FreeType 2 install prefix.], no, no)
-
-PHP_ARG_WITH(t1lib, for T1lib support,
-[ --with-t1lib[=DIR] GD: Include T1lib support. T1lib version >= 5.0.0 required], no, no)
-
-PHP_ARG_ENABLE(gd-native-ttf, whether to enable truetype string function in GD,
-[ --enable-gd-native-ttf GD: Enable TrueType string function.], no, no)
-
-PHP_ARG_ENABLE(gd-jis-conv, whether to enable JIS-mapped Japanese font support in GD,
-[ --enable-gd-jis-conv GD: Enable JIS-mapped Japanese font support.], no, no)
-
-dnl
-dnl Checks for the configure options
-dnl
-
-AC_DEFUN(PHP_GD_JPEG,[
- if test "$PHP_JPEG_DIR" != "no"; then
-
- for i in $PHP_JPEG_DIR /usr/local /usr; do
- test -f $i/lib/libjpeg.$SHLIB_SUFFIX_NAME -o -f $i/lib/libjpeg.a && GD_JPEG_DIR=$i && break
- done
-
- if test -z "$GD_JPEG_DIR"; then
- AC_MSG_ERROR([libjpeg.(a|so) not found.])
- fi
-
- PHP_CHECK_LIBRARY(jpeg,jpeg_read_header,
- [
- PHP_ADD_INCLUDE($GD_JPEG_DIR/include)
- PHP_ADD_LIBRARY_WITH_PATH(jpeg, $GD_JPEG_DIR/lib, GD_SHARED_LIBADD)
- ],[
- AC_MSG_ERROR([Problem with libjpeg.(a|so). Please check config.log for more information.])
- ],[
- -L$GD_JPEG_DIR/lib
- ])
- else
- AC_MSG_RESULT([If configure fails try --with-jpeg-dir=<DIR>])
- fi
-])
-
-AC_DEFUN(PHP_GD_PNG,[
- if test "$PHP_PNG_DIR" != "no"; then
-
- for i in $PHP_PNG_DIR /usr/local /usr; do
- test -f $i/lib/libpng.$SHLIB_SUFFIX_NAME -o -f $i/lib/libpng.a && GD_PNG_DIR=$i && break
- done
-
- if test -z "$GD_PNG_DIR"; then
- AC_MSG_ERROR([libpng.(a|so) not found.])
- fi
-
- if test "$PHP_ZLIB_DIR" = "no"; then
- AC_MSG_ERROR([PNG support requires ZLIB. Use --with-zlib-dir=<DIR>])
- fi
-
- if test ! -f $GD_PNG_DIR/include/png.h; then
- AC_MSG_ERROR([png.h not found.])
- fi
-
- PHP_CHECK_LIBRARY(png,png_write_image,
- [
- PHP_ADD_INCLUDE($GD_PNG_DIR/include)
- PHP_ADD_LIBRARY_WITH_PATH(z, $PHP_ZLIB_DIR/lib, GD_SHARED_LIBADD)
- PHP_ADD_LIBRARY_WITH_PATH(png, $GD_PNG_DIR/lib, GD_SHARED_LIBADD)
- ],[
- AC_MSG_ERROR([Problem with libpng.(a|so) or libz.(a|so). Please check config.log for more information.])
- ],[
- -L$PHP_ZLIB_DIR/lib -lz -L$GD_PNG_DIR/lib
- ])
-
- else
- AC_MSG_RESULT([If configure fails try --with-png-dir=<DIR> and --with-zlib-dir=<DIR>])
- fi
-])
-
-AC_DEFUN(PHP_GD_XPM,[
- if test "$PHP_XPM_DIR" != "no"; then
-
- for i in $PHP_XPM_DIR /usr/local /usr/X11R6 /usr; do
- test -f $i/lib/libXpm.$SHLIB_SUFFIX_NAME -o -f $i/lib/libXpm.a && GD_XPM_DIR=$i && break
- done
-
- if test -z "$GD_XPM_DIR"; then
- AC_MSG_ERROR([libXpm.(a|so) not found.])
- fi
-
- for i in include include/X11; do
- test -f $GD_XPM_DIR/$i/xpm.h && GD_XPM_INC=$GD_XPM_DIR/include
- done
-
- if test -z "$GD_XPM_INC"; then
- AC_MSG_ERROR([xpm.h not found.])
- fi
-
- PHP_CHECK_LIBRARY(Xpm,XpmFreeXpmImage,
- [
- PHP_ADD_INCLUDE($GD_XPM_INC)
- PHP_ADD_LIBRARY_WITH_PATH(Xpm, $GD_XPM_DIR/lib, GD_SHARED_LIBADD)
- PHP_ADD_LIBRARY_WITH_PATH(X11, $GD_XPM_DIR/lib, GD_SHARED_LIBADD)
- ],[
- AC_MSG_ERROR([Problem with libXpm.(a|so) or libX11.(a|so). Please check config.log for more information.])
- ],[
- -L$GD_XPM_DIR/lib -lX11
- ])
- else
- AC_MSG_RESULT(If configure fails try --with-xpm-dir=<DIR>)
- fi
-])
-
-AC_DEFUN(PHP_GD_FREETYPE1,[
- if test "$PHP_TTF" != "no"; then
- if test "$PHP_FREETYPE_DIR" = "no" -o "$PHP_FREETYPE_DIR" = ""; then
- if test -n "$PHP_TTF"; then
- for i in $PHP_TTF /usr/local /usr; do
- if test -f "$i/include/freetype.h"; then
- TTF_DIR=$i
- unset TTF_INC_DIR
- fi
- if test -f "$i/include/freetype/freetype.h"; then
- TTF_DIR=$i
- TTF_INC_DIR=$i/include/freetype
- fi
- if test -f "$i/include/freetype1/freetype/freetype.h"; then
- TTF_DIR=$i
- TTF_INC_DIR=$i/include/freetype1/freetype
- fi
- test -n "$TTF_DIR" && break
- done
- fi
- if test -n "$TTF_DIR" ; then
- AC_DEFINE(HAVE_LIBTTF,1,[ ])
- PHP_ADD_LIBRARY_WITH_PATH(ttf, $TTF_DIR/lib, GD_SHARED_LIBADD)
- fi
- if test -z "$TTF_INC_DIR"; then
- TTF_INC_DIR=$TTF_DIR/include
- fi
- PHP_ADD_INCLUDE($TTF_INC_DIR)
- else
- AC_MSG_CHECKING(for FreeType 1 support)
- AC_MSG_RESULT([no - FreeType 2.x is to be used instead])
- fi
- fi
-])
-
-AC_DEFUN(PHP_GD_FREETYPE2,[
- if test "$PHP_FREETYPE_DIR" != "no"; then
-
- for i in $PHP_FREETYPE_DIR /usr/local /usr; do
- if test -f "$i/include/freetype2/freetype/freetype.h"; then
- FREETYPE2_DIR=$i
- FREETYPE2_INC_DIR=$i/include/freetype2
- break
- fi
- done
-
- if test -n "$FREETYPE2_DIR" ; then
- PHP_ADD_LIBRARY_WITH_PATH(freetype, $FREETYPE2_DIR/lib, GD_SHARED_LIBADD)
- PHP_ADD_INCLUDE($FREETYPE2_DIR/include)
- PHP_ADD_INCLUDE($FREETYPE2_INC_DIR)
- AC_DEFINE(USE_GD_IMGSTRTTF, 1, [ ])
- AC_DEFINE(HAVE_LIBFREETYPE,1,[ ])
- else
- AC_MSG_ERROR([freetype2 not found!])
- fi
- else
- AC_MSG_RESULT([If configure fails try --with-freetype-dir=<DIR>])
- fi
-])
-
-AC_DEFUN(PHP_GD_T1LIB,[
- if test "$PHP_T1LIB" != "no"; then
-
- for i in $PHP_T1LIB /usr/local /usr; do
- test -f "$i/include/t1lib.h" && GD_T1_DIR=$i && break
- done
-
- if test -z "$GD_T1_DIR"; then
- AC_MSG_ERROR([Your t1lib distribution is not installed correctly. Please reinstall it.])
- fi
-
- PHP_CHECK_LIBRARY(t1, T1_StrError,
- [
- AC_DEFINE(HAVE_LIBT1,1,[ ])
- PHP_ADD_INCLUDE($GD_T1_DIR/include)
- PHP_ADD_LIBRARY_WITH_PATH(t1, $GD_T1_DIR/lib, GD_SHARED_LIBADD)
- ],[
- AC_MSG_ERROR([Problem with libt1.(a|so). Please check config.log for more information.])
- ],[
- -L$GD_T1_DIR/lib
- ])
- fi
-])
-
-AC_DEFUN(PHP_GD_TTSTR,[
- if test "$PHP_GD_NATIVE_TTF" = "yes"; then
- AC_DEFINE(USE_GD_IMGSTRTTF, 1, [ ])
- fi
-])
-
-AC_DEFUN(PHP_GD_JISX0208,[
- if test "$PHP_GD_JIS_CONV" = "yes"; then
- USE_GD_JIS_CONV=1
- fi
-])
-
-AC_DEFUN(PHP_GD_CHECK_VERSION,[
- PHP_CHECK_LIBRARY(gd, gdImageString16, [AC_DEFINE(HAVE_LIBGD13, 1, [ ])], [], [ -L$GD_LIB $GD_SHARED_LIBADD ])
- PHP_CHECK_LIBRARY(gd, gdImagePaletteCopy, [AC_DEFINE(HAVE_LIBGD15, 1, [ ])], [], [ -L$GD_LIB $GD_SHARED_LIBADD ])
- PHP_CHECK_LIBRARY(gd, gdImageCreateFromPng, [AC_DEFINE(HAVE_GD_PNG, 1, [ ])], [], [ -L$GD_LIB $GD_SHARED_LIBADD ])
- PHP_CHECK_LIBRARY(gd, gdImageCreateFromGif, [AC_DEFINE(HAVE_GD_GIF_READ, 1, [ ])], [], [ -L$GD_LIB $GD_SHARED_LIBADD ])
- PHP_CHECK_LIBRARY(gd, gdImageGif, [AC_DEFINE(HAVE_GD_GIF_CREATE, 1, [ ])], [], [ -L$GD_LIB $GD_SHARED_LIBADD ])
- PHP_CHECK_LIBRARY(gd, gdImageWBMP, [AC_DEFINE(HAVE_GD_WBMP, 1, [ ])], [], [ -L$GD_LIB $GD_SHARED_LIBADD ])
- PHP_CHECK_LIBRARY(gd, gdImageCreateFromJpeg, [AC_DEFINE(HAVE_GD_JPG, 1, [ ])], [], [ -L$GD_LIB $GD_SHARED_LIBADD ])
- PHP_CHECK_LIBRARY(gd, gdImageCreateFromXpm, [AC_DEFINE(HAVE_GD_XPM, 1, [ ])], [], [ -L$GD_LIB $GD_SHARED_LIBADD ])
- PHP_CHECK_LIBRARY(gd, gdImageCreateFromGd2, [AC_DEFINE(HAVE_GD_GD2, 1, [ ])], [], [ -L$GD_LIB $GD_SHARED_LIBADD ])
- PHP_CHECK_LIBRARY(gd, gdImageCreateTrueColor, [AC_DEFINE(HAVE_LIBGD20, 1, [ ])], [], [ -L$GD_LIB $GD_SHARED_LIBADD ])
- PHP_CHECK_LIBRARY(gd, gdImageSetTile, [AC_DEFINE(HAVE_GD_IMAGESETTILE, 1, [ ])], [], [ -L$GD_LIB $GD_SHARED_LIBADD ])
- PHP_CHECK_LIBRARY(gd, gdImageEllipse, [AC_DEFINE(HAVE_GD_IMAGEELLIPSE, 1, [ ])], [], [ -L$GD_LIB $GD_SHARED_LIBADD ])
- PHP_CHECK_LIBRARY(gd, gdImageSetBrush, [AC_DEFINE(HAVE_GD_IMAGESETBRUSH, 1, [ ])], [], [ -L$GD_LIB $GD_SHARED_LIBADD ])
- PHP_CHECK_LIBRARY(gd, gdImageStringTTF, [AC_DEFINE(HAVE_GD_STRINGTTF, 1, [ ])], [], [ -L$GD_LIB $GD_SHARED_LIBADD ])
- PHP_CHECK_LIBRARY(gd, gdImageStringFT, [AC_DEFINE(HAVE_GD_STRINGFT, 1, [ ])], [], [ -L$GD_LIB $GD_SHARED_LIBADD ])
- PHP_CHECK_LIBRARY(gd, gdImageStringFTEx, [AC_DEFINE(HAVE_GD_STRINGFTEX, 1, [ ])], [], [ -L$GD_LIB $GD_SHARED_LIBADD ])
- PHP_CHECK_LIBRARY(gd, gdImageColorClosestHWB, [AC_DEFINE(HAVE_COLORCLOSESTHWB, 1, [ ])], [], [ -L$GD_LIB $GD_SHARED_LIBADD ])
- PHP_CHECK_LIBRARY(gd, gdImageColorResolve, [AC_DEFINE(HAVE_GDIMAGECOLORRESOLVE, 1, [ ])], [], [ -L$GD_LIB $GD_SHARED_LIBADD ])
- PHP_CHECK_LIBRARY(gd, gdImageGifCtx, [AC_DEFINE(HAVE_GD_GIF_CTX, 1, [ ])], [], [ -L$GD_LIB $GD_SHARED_LIBADD ])
- PHP_CHECK_LIBRARY(gd, gdCacheCreate, [AC_DEFINE(HAVE_GD_CACHE_CREATE, 1, [ ])], [], [ -L$GD_LIB $GD_SHARED_LIBADD ])
- PHP_CHECK_LIBRARY(gd, gdFontCacheShutdown, [AC_DEFINE(HAVE_GD_THREAD_SAFE, 1, [ ])], [], [ -L$GD_LIB $GD_SHARED_LIBADD ])
- PHP_CHECK_LIBRARY(gd, gdNewDynamicCtxEx, [AC_DEFINE(HAVE_GD_DYNAMIC_CTX_EX, 1, [ ])], [], [ -L$GD_LIB $GD_SHARED_LIBADD ])
-])
-
-dnl
-dnl Main GD configure
-dnl
-
-if test "$PHP_GD" = "yes"; then
- GD_MODULE_TYPE=builtin
- extra_sources="libgd/gd.c libgd/gd_gd.c libgd/gd_gd2.c libgd/gd_io.c libgd/gd_io_dp.c \
- libgd/gd_io_file.c libgd/gd_ss.c libgd/gd_io_ss.c libgd/gd_png.c libgd/gd_jpeg.c \
- libgd/gdxpm.c libgd/gdfontt.c libgd/gdfonts.c libgd/gdfontmb.c libgd/gdfontl.c \
- libgd/gdfontg.c libgd/gdtables.c libgd/gdft.c libgd/gdcache.c libgd/gdkanji.c \
- libgd/wbmp.c libgd/gd_wbmp.c libgd/gdhelpers.c libgd/gd_topal.c libgd/gd_gif_in.c \
- libgd/xbm.c libgd/gd_gif_out.c "
-
-dnl check for fabsf and floorf which are available since C99
- AC_CHECK_FUNCS(fabsf floorf)
-
-dnl PNG is required by GD library
- test "$PHP_PNG_DIR" = "no" && PHP_PNG_DIR=yes
-
-dnl Various checks for GD features
- PHP_GD_TTSTR
- PHP_GD_JISX0208
- PHP_GD_JPEG
- PHP_GD_PNG
- PHP_GD_XPM
- PHP_GD_FREETYPE2
- PHP_GD_FREETYPE1
- PHP_GD_T1LIB
-
-dnl These are always available with bundled library
- AC_DEFINE(HAVE_LIBGD, 1, [ ])
- AC_DEFINE(HAVE_LIBGD13, 1, [ ])
- AC_DEFINE(HAVE_LIBGD15, 1, [ ])
- AC_DEFINE(HAVE_LIBGD20, 1, [ ])
- AC_DEFINE(HAVE_LIBGD204, 1, [ ])
- AC_DEFINE(HAVE_GD_IMAGESETTILE, 1, [ ])
- AC_DEFINE(HAVE_GD_IMAGESETBRUSH, 1, [ ])
- AC_DEFINE(HAVE_GDIMAGECOLORRESOLVE, 1, [ ])
- AC_DEFINE(HAVE_COLORCLOSESTHWB, 1, [ ])
- AC_DEFINE(HAVE_GD_WBMP, 1, [ ])
- AC_DEFINE(HAVE_GD_GD2, 1, [ ])
- AC_DEFINE(HAVE_GD_PNG, 1, [ ])
- AC_DEFINE(HAVE_GD_XBM, 1, [ ])
- AC_DEFINE(HAVE_GD_BUNDLED, 1, [ ])
- AC_DEFINE(HAVE_GD_GIF_READ, 1, [ ])
- AC_DEFINE(HAVE_GD_GIF_CREATE, 1, [ ])
- AC_DEFINE(HAVE_GD_IMAGEELLIPSE, 1, [ ])
- AC_DEFINE(HAVE_GD_DYNAMIC_CTX_EX, 1, [ ])
-
-dnl Make sure the libgd/ is first in the include path
- GDLIB_CFLAGS="-DHAVE_LIBPNG"
-
-dnl Depending which libraries were included to PHP configure,
-dnl enable the support in bundled GD library
-
- if test -n "$GD_JPEG_DIR"; then
- AC_DEFINE(HAVE_GD_JPG, 1, [ ])
- GDLIB_CFLAGS="$GDLIB_CFLAGS -DHAVE_LIBJPEG"
- fi
-
- if test -n "$GD_XPM_DIR"; then
- AC_DEFINE(HAVE_GD_XPM, 1, [ ])
- GDLIB_CFLAGS="$GDLIB_CFLAGS -DHAVE_XPM"
- fi
-
- if test -n "$FREETYPE2_DIR"; then
- AC_DEFINE(HAVE_GD_STRINGFT, 1, [ ])
- AC_DEFINE(HAVE_GD_STRINGFTEX, 1, [ ])
- GDLIB_CFLAGS="$GDLIB_CFLAGS -DHAVE_LIBFREETYPE"
- fi
-
- if test -n "$TTF_DIR"; then
- GDLIB_CFLAGS="$GDLIB_CFLAGS -DHAVE_LIBTTF"
- fi
-
- if test -n "$USE_GD_JIS_CONV"; then
- AC_DEFINE(USE_GD_JISX0208, 1, [ ])
- GDLIB_CFLAGS="$GDLIB_CFLAGS -DJISX0208"
- fi
-
-else
-
- if test "$PHP_GD" != "no"; then
- GD_MODULE_TYPE=external
- extra_sources="gdcache.c"
-
-dnl Various checks for GD features
- PHP_GD_TTSTR
- PHP_GD_JPEG
- PHP_GD_PNG
- PHP_GD_XPM
- PHP_GD_FREETYPE2
- PHP_GD_FREETYPE1
- PHP_GD_T1LIB
-
-dnl Header path
- for i in include/gd1.3 include/gd include gd1.3 gd ""; do
- test -f "$PHP_GD/$i/gd.h" && GD_INCLUDE="$PHP_GD/$i"
- done
-
-dnl Library path
- for i in lib/gd1.3 lib/gd lib gd1.3 gd ""; do
- test -f "$PHP_GD/$i/libgd.$SHLIB_SUFFIX_NAME" -o -f "$PHP_GD/$i/libgd.a" && GD_LIB="$PHP_GD/$i"
- done
-
- if test -n "$GD_INCLUDE" && test -n "$GD_LIB"; then
- PHP_ADD_LIBRARY_WITH_PATH(gd, $GD_LIB, GD_SHARED_LIBADD)
- AC_DEFINE(HAVE_LIBGD,1,[ ])
- PHP_GD_CHECK_VERSION
- elif test -z "$GD_INCLUDE"; then
- AC_MSG_ERROR([Unable to find gd.h anywhere under $PHP_GD])
- else
- AC_MSG_ERROR([Unable to find libgd.(a|so) anywhere under $PHP_GD])
- fi
-
- PHP_EXPAND_PATH($GD_INCLUDE, GD_INCLUDE)
-
- dnl
- dnl Check for gd 2.0.4 greater availability
- dnl
- old_CPPFLAGS=$CPPFLAGS
- CPPFLAGS=-I$GD_INCLUDE
- AC_TRY_COMPILE([
-#include <gd.h>
-#include <stdlib.h>
- ], [
-gdIOCtx *ctx;
-ctx = malloc(sizeof(gdIOCtx));
-ctx->gd_free = 1;
- ], [
- AC_DEFINE(HAVE_LIBGD204, 1, [ ])
- ])
- CPPFLAGS=$old_CPPFLAGS
-
- fi
-fi
-
-dnl
-dnl Common for both builtin and external GD
-dnl
-if test "$PHP_GD" != "no"; then
- PHP_NEW_EXTENSION(gd, gd.c gdttf.c $extra_sources, $ext_shared,, \\$(GDLIB_CFLAGS))
-
- if test "$GD_MODULE_TYPE" = "builtin"; then
- GDLIB_CFLAGS="-I$ext_srcdir/libgd $GDLIB_CFLAGS"
- PHP_ADD_BUILD_DIR($ext_builddir/libgd)
- else
- GDLIB_CFLAGS="-I$GD_INCLUDE $GDLIB_CFLAGS"
- PHP_ADD_INCLUDE($GD_INCLUDE)
-
- PHP_CHECK_LIBRARY(gd, gdImageCreate, [], [
- AC_MSG_ERROR([GD build test failed. Please check the config.log for details.])
- ], [ -L$GD_LIB $GD_SHARED_LIBADD ])
- fi
-
- PHP_SUBST(GDLIB_CFLAGS)
- PHP_SUBST(GD_SHARED_LIBADD)
-fi
diff --git a/ext/gd/config.w32 b/ext/gd/config.w32
deleted file mode 100644
index 0a0c9f6e50..0000000000
--- a/ext/gd/config.w32
+++ /dev/null
@@ -1,48 +0,0 @@
-// $Id$
-// vim:ft=javascript
-
-ARG_WITH("gd", "Bundled GD support", "yes,shared");
-
-if (PHP_GD != "no") {
- if (CHECK_LIB("libjpeg.lib", "gd", PHP_GD) &&
- CHECK_LIB("freetype2.lib", "gd", PHP_GD) &&
- CHECK_LIB("libpng.lib", "gd", PHP_GD) &&
- CHECK_LIB("zlib.lib", "gd", PHP_GD + ";..\\zlib;" + php_usual_lib_suspects) &&
- CHECK_HEADER_ADD_INCLUDE("gd.h", "CFLAGS_GD", PHP_GD + ";ext\\gd\\libgd")) {
-
- EXTENSION("gd", "gd.c gdttf.c", null, "-Iext/gd/libgd", "php_gd2.dll");
- ADD_SOURCES("ext/gd/libgd", "gd2copypal.c gd_arc_f_buggy.c gd.c \
- gdcache.c gdfontg.c gdfontl.c gdfontmb.c gdfonts.c gdfontt.c \
- gdft.c gd_gd2.c gd_gd.c gd_gif_in.c gd_gif_out.c gdhelpers.c gd_io.c gd_io_dp.c \
- gd_io_file.c gd_io_ss.c gd_jpeg.c gdkanji.c gd_png.c gd_ss.c \
- gdtables.c gd_topal.c gd_wbmp.c gdxpm.c wbmp.c xbm.c", "gd");
- AC_DEFINE('HAVE_LIBGD', 1, 'GD support');
- ADD_FLAG("CFLAGS_GD", " \
-/D HAVE_GD_BUNDLED=1 \
-/D HAVE_GD_GD2 \
-/D HAVE_GD_GIF_READ=1 \
-/D HAVE_GD_GIF_CREATE=1 \
-/D HAVE_GDIMAGECOLORRESOLVE=1 \
-/D HAVE_GD_IMAGESETBRUSH=1 \
-/D HAVE_GD_IMAGESETTILE=1 \
-/D HAVE_GD_JPG \
-/D HAVE_GD_PNG \
-/D HAVE_GD_STRINGFTEX=1 \
-/D HAVE_GD_STRINGTTF=1 \
-/D HAVE_GD_WBMP \
-/D HAVE_GD_XBM \
-/D HAVE_LIBFREETYPE=1 \
-/D HAVE_LIBGD13=1 \
-/D HAVE_LIBGD15=1 \
-/D HAVE_LIBGD20=1 \
-/D HAVE_LIBGD204=1 \
-/D HAVE_LIBJPEG \
-/D HAVE_LIBPNG \
-/D USE_GD_IMGSTRTTF \
-/D USE_GD_IOCTX \
-/D MSWIN32 \
- ");
- } else {
- WARNING("gd not enabled; libraries and headers not found");
- }
-}
diff --git a/ext/gd/gd.c b/ext/gd/gd.c
deleted file mode 100644
index e716f9079a..0000000000
--- a/ext/gd/gd.c
+++ /dev/null
@@ -1,4230 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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. |
- +----------------------------------------------------------------------+
- | Authors: Rasmus Lerdorf <rasmus@php.net> |
- | Stig Bakken <ssb@php.net> |
- | Jim Winstead <jimw@php.net> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-/* gd 1.2 is copyright 1994, 1995, Quest Protein Database Center,
- Cold Spring Harbor Labs. */
-
-/* Note that there is no code from the gd package in this file */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "php.h"
-#include "ext/standard/head.h"
-#include <math.h>
-#include "SAPI.h"
-#include "php_gd.h"
-#include "ext/standard/info.h"
-#include "php_open_temporary_file.h"
-
-#if HAVE_SYS_WAIT_H
-# include <sys/wait.h>
-#endif
-#if HAVE_UNISTD_H
-# include <unistd.h>
-#endif
-#ifdef PHP_WIN32
-# include <io.h>
-# include <fcntl.h>
-#endif
-
-#if HAVE_LIBGD
-
-static int le_gd, le_gd_font;
-#if HAVE_LIBT1
-#include <t1lib.h>
-static int le_ps_font, le_ps_enc;
-static void php_free_ps_font(zend_rsrc_list_entry *rsrc TSRMLS_DC);
-static void php_free_ps_enc(zend_rsrc_list_entry *rsrc TSRMLS_DC);
-#endif
-
-#include <gd.h>
-#include <gdfontt.h> /* 1 Tiny font */
-#include <gdfonts.h> /* 2 Small font */
-#include <gdfontmb.h> /* 3 Medium bold font */
-#include <gdfontl.h> /* 4 Large font */
-#include <gdfontg.h> /* 5 Giant font */
-#ifdef HAVE_GD_WBMP
-#include "libgd/wbmp.h"
-#endif
-#ifdef ENABLE_GD_TTF
-# ifdef HAVE_LIBFREETYPE
-# include <ft2build.h>
-# include FT_FREETYPE_H
-# else
-# ifdef HAVE_LIBTTF
-# include <freetype.h>
-# endif
-# endif
-# include "gdttf.h"
-#endif
-
-#ifndef M_PI
-#define M_PI 3.14159265358979323846
-#endif
-
-#ifdef ENABLE_GD_TTF
-static void php_imagettftext_common(INTERNAL_FUNCTION_PARAMETERS, int, int);
-#endif
-
-#if HAVE_LIBGD15
-/* it's >= 1.5, i.e. has IOCtx */
-#define USE_GD_IOCTX 1
-#else
-#undef USE_GD_IOCTX
-#endif
-
-#ifdef USE_GD_IOCTX
-#include "gd_ctx.c"
-#else
-#define gdImageCreateFromGdCtx NULL
-#define gdImageCreateFromGd2Ctx NULL
-#define gdImageCreateFromGd2partCtx NULL
-#define gdImageCreateFromGifCtx NULL
-#define gdImageCreateFromJpegCtx NULL
-#define gdImageCreateFromPngCtx NULL
-#define gdImageCreateFromWBMPCtx NULL
-typedef FILE gdIOCtx;
-#define CTX_PUTC(c, fp) fputc(c, fp)
-#endif
-
-#ifndef HAVE_GDIMAGECOLORRESOLVE
-extern int gdImageColorResolve(gdImagePtr, int, int, int);
-#endif
-
-#if HAVE_COLORCLOSESTHWB
-int gdImageColorClosestHWB(gdImagePtr im, int r, int g, int b);
-#endif
-
-#ifndef HAVE_GD_DYNAMIC_CTX_EX
-#define gdNewDynamicCtxEx(len, data, val) gdNewDynamicCtx(len, data)
-#endif
-
-/* Section Filters Declarations */
-/* IMPORTANT NOTE FOR NEW FILTER
- * Do not forget to update:
- * IMAGE_FILTER_MAX: define the last filter index
- * IMAGE_FILTER_MAX_ARGS: define the biggest amout of arguments
- * image_filter array in PHP_FUNCTION(imagefilter)
- * */
-#if HAVE_GD_BUNDLED
-#define IMAGE_FILTER_NEGATE 0
-#define IMAGE_FILTER_GRAYSCALE 1
-#define IMAGE_FILTER_BRIGHTNESS 2
-#define IMAGE_FILTER_CONTRAST 3
-#define IMAGE_FILTER_COLORIZE 4
-#define IMAGE_FILTER_EDGEDETECT 5
-#define IMAGE_FILTER_EMBOSS 6
-#define IMAGE_FILTER_GAUSSIAN_BLUR 7
-#define IMAGE_FILTER_SELECTIVE_BLUR 8
-#define IMAGE_FILTER_MEAN_REMOVAL 9
-#define IMAGE_FILTER_SMOOTH 10
-#define IMAGE_FILTER_MAX 10
-#define IMAGE_FILTER_MAX_ARGS 5
-static void php_image_filter_negate(INTERNAL_FUNCTION_PARAMETERS);
-static void php_image_filter_grayscale(INTERNAL_FUNCTION_PARAMETERS);
-static void php_image_filter_brightness(INTERNAL_FUNCTION_PARAMETERS);
-static void php_image_filter_contrast(INTERNAL_FUNCTION_PARAMETERS);
-static void php_image_filter_colorize(INTERNAL_FUNCTION_PARAMETERS);
-static void php_image_filter_edgedetect(INTERNAL_FUNCTION_PARAMETERS);
-static void php_image_filter_emboss(INTERNAL_FUNCTION_PARAMETERS);
-static void php_image_filter_gaussian_blur(INTERNAL_FUNCTION_PARAMETERS);
-static void php_image_filter_selective_blur(INTERNAL_FUNCTION_PARAMETERS);
-static void php_image_filter_mean_removal(INTERNAL_FUNCTION_PARAMETERS);
-static void php_image_filter_smooth(INTERNAL_FUNCTION_PARAMETERS);
-#endif
-/* End Section filters declarations */
-static gdImagePtr _php_image_create_from_string (zval **Data, char *tn, gdImagePtr (*ioctx_func_p)() TSRMLS_DC);
-static void _php_image_create_from(INTERNAL_FUNCTION_PARAMETERS, int image_type, char *tn, gdImagePtr (*func_p)(), gdImagePtr (*ioctx_func_p)());
-static void _php_image_output(INTERNAL_FUNCTION_PARAMETERS, int image_type, char *tn, void (*func_p)());
-static int _php_image_type(char data[8]);
-static void _php_image_convert(INTERNAL_FUNCTION_PARAMETERS, int image_type);
-static void _php_image_bw_convert(gdImagePtr im_org, gdIOCtx *out, int threshold);
-
-/* {{{ gd_functions[]
- */
-function_entry gd_functions[] = {
- PHP_FE(gd_info, NULL)
- PHP_FE(imagearc, NULL)
- PHP_FE(imageellipse, NULL)
- PHP_FE(imagechar, NULL)
- PHP_FE(imagecharup, NULL)
- PHP_FE(imagecolorat, NULL)
- PHP_FE(imagecolorallocate, NULL)
-#if HAVE_LIBGD15
- PHP_FE(imagepalettecopy, NULL)
- PHP_FE(imagecreatefromstring, NULL)
-#endif
- PHP_FE(imagecolorclosest, NULL)
-#if HAVE_COLORCLOSESTHWB
- PHP_FE(imagecolorclosesthwb, NULL)
-#endif
- PHP_FE(imagecolordeallocate, NULL)
- PHP_FE(imagecolorresolve, NULL)
- PHP_FE(imagecolorexact, NULL)
- PHP_FE(imagecolorset, NULL)
- PHP_FE(imagecolortransparent, NULL)
- PHP_FE(imagecolorstotal, NULL)
- PHP_FE(imagecolorsforindex, NULL)
- PHP_FE(imagecopy, NULL)
-#if HAVE_LIBGD15
- PHP_FE(imagecopymerge, NULL)
- PHP_FE(imagecopymergegray, NULL)
-#endif
- PHP_FE(imagecopyresized, NULL)
- PHP_FE(imagecreate, NULL)
-#if HAVE_LIBGD20
- PHP_FE(imagecreatetruecolor, NULL)
- PHP_FE(imageistruecolor, NULL)
- PHP_FE(imagetruecolortopalette, NULL)
- PHP_FE(imagesetthickness, NULL)
- PHP_FE(imagefilledarc, NULL)
- PHP_FE(imagefilledellipse, NULL)
- PHP_FE(imagealphablending, NULL)
- PHP_FE(imagesavealpha, NULL)
- PHP_FE(imagecolorallocatealpha, NULL)
- PHP_FE(imagecolorresolvealpha, NULL)
- PHP_FE(imagecolorclosestalpha, NULL)
- PHP_FE(imagecolorexactalpha, NULL)
- PHP_FE(imagecopyresampled, NULL)
-#endif
-
-#ifdef HAVE_GD_BUNDLED
- PHP_FE(imagerotate, NULL)
- PHP_FE(imageantialias, NULL)
-#endif
-
-#if HAVE_GD_IMAGESETTILE
- PHP_FE(imagesettile, NULL)
-#endif
-
-#if HAVE_GD_IMAGESETBRUSH
- PHP_FE(imagesetbrush, NULL)
-#endif
-
- PHP_FE(imagesetstyle, NULL)
-
-#ifdef HAVE_GD_PNG
- PHP_FE(imagecreatefrompng, NULL)
-#endif
-#ifdef HAVE_GD_GIF_READ
- PHP_FE(imagecreatefromgif, NULL)
-#endif
-#ifdef HAVE_GD_JPG
- PHP_FE(imagecreatefromjpeg, NULL)
-#endif
-#ifdef HAVE_GD_WBMP
- PHP_FE(imagecreatefromwbmp, NULL)
-#endif
-#ifdef HAVE_GD_XBM
- PHP_FE(imagecreatefromxbm, NULL)
-#endif
-#if defined(HAVE_GD_XPM) && defined(HAVE_GD_BUNDLED)
- PHP_FE(imagecreatefromxpm, NULL)
-#endif
- PHP_FE(imagecreatefromgd, NULL)
-#ifdef HAVE_GD_GD2
- PHP_FE(imagecreatefromgd2, NULL)
- PHP_FE(imagecreatefromgd2part, NULL)
-#endif
-#ifdef HAVE_GD_PNG
- PHP_FE(imagepng, NULL)
-#endif
-#ifdef HAVE_GD_GIF_CREATE
- PHP_FE(imagegif, NULL)
-#endif
-#ifdef HAVE_GD_JPG
- PHP_FE(imagejpeg, NULL)
-#endif
-#ifdef HAVE_GD_WBMP
- PHP_FE(imagewbmp, NULL)
-#endif
- PHP_FE(imagegd, NULL)
-#ifdef HAVE_GD_GD2
- PHP_FE(imagegd2, NULL)
-#endif
-
- PHP_FE(imagedestroy, NULL)
- PHP_FE(imagegammacorrect, NULL)
- PHP_FE(imagefill, NULL)
- PHP_FE(imagefilledpolygon, NULL)
- PHP_FE(imagefilledrectangle, NULL)
- PHP_FE(imagefilltoborder, NULL)
- PHP_FE(imagefontwidth, NULL)
- PHP_FE(imagefontheight, NULL)
- PHP_FE(imageinterlace, NULL)
- PHP_FE(imageline, NULL)
- PHP_FE(imageloadfont, NULL)
- PHP_FE(imagepolygon, NULL)
- PHP_FE(imagerectangle, NULL)
- PHP_FE(imagesetpixel, NULL)
- PHP_FE(imagestring, NULL)
- PHP_FE(imagestringup, NULL)
- PHP_FE(imagesx, NULL)
- PHP_FE(imagesy, NULL)
- PHP_FE(imagedashedline, NULL)
-
-#ifdef ENABLE_GD_TTF
- PHP_FE(imagettfbbox, NULL)
- PHP_FE(imagettftext, NULL)
-#if HAVE_LIBGD20 && HAVE_LIBFREETYPE && HAVE_GD_STRINGFTEX
- PHP_FE(imageftbbox, NULL)
- PHP_FE(imagefttext, NULL)
-#endif
-#endif
-
-#ifdef HAVE_LIBT1
- PHP_FE(imagepsloadfont, NULL)
- /*
- PHP_FE(imagepscopyfont, NULL)
- */
- PHP_FE(imagepsfreefont, NULL)
- PHP_FE(imagepsencodefont, NULL)
- PHP_FE(imagepsextendfont, NULL)
- PHP_FE(imagepsslantfont, NULL)
- PHP_FE(imagepstext, NULL)
- PHP_FE(imagepsbbox, NULL)
-#endif
- PHP_FE(imagetypes, NULL)
-
-#if defined(HAVE_GD_JPG) && defined(HAVE_GD_WBMP)
- PHP_FE(jpeg2wbmp, NULL)
-#endif
-#if defined(HAVE_GD_PNG) && defined(HAVE_GD_WBMP)
- PHP_FE(png2wbmp, NULL)
-#endif
-#ifdef HAVE_GD_WBMP
- PHP_FE(image2wbmp, NULL)
-#endif
-#if HAVE_GD_BUNDLED
- PHP_FE(imagelayereffect, NULL)
- PHP_FE(imagecolormatch, NULL)
- PHP_FE(imagexbm, NULL)
-#endif
-/* gd filters */
-#ifdef HAVE_GD_BUNDLED
- PHP_FE(imagefilter, NULL)
-#endif
-
- {NULL, NULL, NULL}
-};
-/* }}} */
-
-zend_module_entry gd_module_entry = {
- STANDARD_MODULE_HEADER,
- "gd",
- gd_functions,
- PHP_MINIT(gd),
- NULL,
- NULL,
-#if HAVE_LIBGD20 && HAVE_GD_STRINGFT
- PHP_RSHUTDOWN(gd),
-#else
- NULL,
-#endif
- PHP_MINFO(gd),
- NO_VERSION_YET,
- STANDARD_MODULE_PROPERTIES
-};
-
-#ifdef COMPILE_DL_GD
-ZEND_GET_MODULE(gd)
-#endif
-
-/* {{{ php_free_gd_image
- */
-static void php_free_gd_image(zend_rsrc_list_entry *rsrc TSRMLS_DC)
-{
- gdImageDestroy((gdImagePtr) rsrc->ptr);
-}
-/* }}} */
-
-/* {{{ php_free_gd_font
- */
-static void php_free_gd_font(zend_rsrc_list_entry *rsrc TSRMLS_DC)
-{
- gdFontPtr fp = (gdFontPtr) rsrc->ptr;
-
- if (fp->data) {
- efree(fp->data);
- }
-
- efree(fp);
-}
-/* }}} */
-
-/* {{{ PHP_MINIT_FUNCTION
- */
-PHP_MINIT_FUNCTION(gd)
-{
- le_gd = zend_register_list_destructors_ex(php_free_gd_image, NULL, "gd", module_number);
- le_gd_font = zend_register_list_destructors_ex(php_free_gd_font, NULL, "gd font", module_number);
-#if HAVE_LIBT1
- T1_SetBitmapPad(8);
- T1_InitLib(NO_LOGFILE | IGNORE_CONFIGFILE | IGNORE_FONTDATABASE);
- T1_SetLogLevel(T1LOG_DEBUG);
- le_ps_font = zend_register_list_destructors_ex(php_free_ps_font, NULL, "gd PS font", module_number);
- le_ps_enc = zend_register_list_destructors_ex(php_free_ps_enc, NULL, "gd PS encoding", module_number);
-#endif
-
- REGISTER_LONG_CONSTANT("IMG_GIF", 1, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("IMG_JPG", 2, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("IMG_JPEG", 2, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("IMG_PNG", 4, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("IMG_WBMP", 8, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("IMG_XPM", 16, CONST_CS | CONST_PERSISTENT);
-#ifdef gdTiled
- /* special colours for gd */
- REGISTER_LONG_CONSTANT("IMG_COLOR_TILED", gdTiled, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("IMG_COLOR_STYLED", gdStyled, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("IMG_COLOR_BRUSHED", gdBrushed, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("IMG_COLOR_STYLEDBRUSHED", gdStyledBrushed, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("IMG_COLOR_TRANSPARENT", gdTransparent, CONST_CS | CONST_PERSISTENT);
-#endif
-#if HAVE_LIBGD20
- /* for imagefilledarc */
- REGISTER_LONG_CONSTANT("IMG_ARC_ROUNDED", gdArc, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("IMG_ARC_PIE", gdPie, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("IMG_ARC_CHORD", gdChord, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("IMG_ARC_NOFILL", gdNoFill, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("IMG_ARC_EDGED", gdEdged, CONST_CS | CONST_PERSISTENT);
-#endif
-/* GD2 image format types */
-#ifdef GD2_FMT_RAW
- REGISTER_LONG_CONSTANT("IMG_GD2_RAW", GD2_FMT_RAW, CONST_CS | CONST_PERSISTENT);
-#endif
-#ifdef GD2_FMT_COMPRESSED
- REGISTER_LONG_CONSTANT("IMG_GD2_COMPRESSED", GD2_FMT_COMPRESSED, CONST_CS | CONST_PERSISTENT);
-#endif
-#if HAVE_GD_BUNDLED
- REGISTER_LONG_CONSTANT("IMG_EFFECT_REPLACE", gdEffectReplace, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("IMG_EFFECT_ALPHABLEND", gdEffectAlphaBlend, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("IMG_EFFECT_NORMAL", gdEffectNormal, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("IMG_EFFECT_OVERLAY", gdEffectOverlay, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("GD_BUNDLED", 1, CONST_CS | CONST_PERSISTENT);
- /* Section Filters */
- REGISTER_LONG_CONSTANT("IMG_FILTER_NEGATE", IMAGE_FILTER_NEGATE, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("IMG_FILTER_GRAYSCALE", IMAGE_FILTER_GRAYSCALE, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("IMG_FILTER_BRIGHTNESS", IMAGE_FILTER_BRIGHTNESS, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("IMG_FILTER_CONTRAST", IMAGE_FILTER_CONTRAST, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("IMG_FILTER_COLORIZE", IMAGE_FILTER_COLORIZE, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("IMG_FILTER_EDGEDETECT", IMAGE_FILTER_EDGEDETECT, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("IMG_FILTER_GAUSSIAN_BLUR", IMAGE_FILTER_GAUSSIAN_BLUR, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("IMG_FILTER_SELECTIVE_BLUR", IMAGE_FILTER_SELECTIVE_BLUR, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("IMG_FILTER_EMBOSS", IMAGE_FILTER_EMBOSS, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("IMG_FILTER_MEAN_REMOVAL", IMAGE_FILTER_MEAN_REMOVAL, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("IMG_FILTER_SMOOTH", IMAGE_FILTER_SMOOTH, CONST_CS | CONST_PERSISTENT);
- /* End Section Filters */
-#else
- REGISTER_LONG_CONSTANT("GD_BUNDLED", 0, CONST_CS | CONST_PERSISTENT);
-#endif
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ PHP_RSHUTDOWN_FUNCTION
- */
-#if HAVE_LIBGD20 && HAVE_GD_STRINGFT
-PHP_RSHUTDOWN_FUNCTION(gd)
-{
-#if defined(HAVE_GD_THREAD_SAFE) || defined(HAVE_GD_BUNDLED)
- gdFontCacheShutdown();
-#else
- gdFreeFontCache();
-#endif
- return SUCCESS;
-}
-#endif
-/* }}} */
-
-#if HAVE_GD_BUNDLED
-#define PHP_GD_VERSION_STRING "bundled (2.0.28 compatible)"
-#elif HAVE_LIBGD20
-#define PHP_GD_VERSION_STRING "2.0 or higher"
-#elif HAVE_GDIMAGECOLORRESOLVE
-#define PHP_GD_VERSION_STRING "1.6.2 or higher"
-#elif HAVE_LIBGD13
-#define PHP_GD_VERSION_STRING "between 1.3 and 1.6.1"
-#else
-#define PHP_GD_VERSION_STRING "1.2"
-#endif
-
-/* {{{ PHP_MINFO_FUNCTION
- */
-PHP_MINFO_FUNCTION(gd)
-{
- php_info_print_table_start();
- php_info_print_table_row(2, "GD Support", "enabled");
-
- /* need to use a PHPAPI function here because it is external module in windows */
-
- php_info_print_table_row(2, "GD Version", PHP_GD_VERSION_STRING);
-
-#ifdef ENABLE_GD_TTF
- php_info_print_table_row(2, "FreeType Support", "enabled");
-#if HAVE_LIBFREETYPE
- php_info_print_table_row(2, "FreeType Linkage", "with freetype");
- {
- char tmp[256];
-#ifdef FREETYPE_PATCH
- snprintf(tmp, sizeof(tmp), "%d.%d.%d", FREETYPE_MAJOR, FREETYPE_MINOR, FREETYPE_PATCH);
-#else
- snprintf(tmp, sizeof(tmp), "%d.%d", FREETYPE_MAJOR, FREETYPE_MINOR);
-#endif
- php_info_print_table_row(2, "FreeType Version", tmp);
- }
-#elif HAVE_LIBTTF
- php_info_print_table_row(2, "FreeType Linkage", "with TTF library");
- {
- char tmp[256];
- snprintf(tmp, sizeof(tmp), "%d.%d", TT_FREETYPE_MAJOR, TT_FREETYPE_MINOR);
- php_info_print_table_row(2, "FreeType Version", tmp);
- }
-#else
- php_info_print_table_row(2, "FreeType Linkage", "with unknown library");
-#endif
-#endif
-
-#ifdef HAVE_LIBT1
- php_info_print_table_row(2, "T1Lib Support", "enabled");
-#endif
-
-/* this next part is stupid ... if I knew better, I'd put them all on one row (cmv) */
-
-#ifdef HAVE_GD_GIF_READ
- php_info_print_table_row(2, "GIF Read Support", "enabled");
-#endif
-#ifdef HAVE_GD_GIF_CREATE
- php_info_print_table_row(2, "GIF Create Support", "enabled");
-#endif
-#ifdef HAVE_GD_JPG
- php_info_print_table_row(2, "JPG Support", "enabled");
-#endif
-#ifdef HAVE_GD_PNG
- php_info_print_table_row(2, "PNG Support", "enabled");
-#endif
-#ifdef HAVE_GD_WBMP
- php_info_print_table_row(2, "WBMP Support", "enabled");
-#endif
-#if defined(HAVE_GD_XPM) && defined(HAVE_GD_BUNDLED)
- php_info_print_table_row(2, "XPM Support", "enabled");
-#endif
-#ifdef HAVE_GD_XBM
- php_info_print_table_row(2, "XBM Support", "enabled");
-#endif
-#if defined(USE_GD_JISX0208) && defined(HAVE_GD_BUNDLED)
- php_info_print_table_row(2, "JIS-mapped Japanese Font Support", "enabled");
-#endif
- php_info_print_table_end();
-}
-/* }}} */
-
-/* {{{ proto array gd_info()
- */
-PHP_FUNCTION(gd_info)
-{
- if (ZEND_NUM_ARGS() != 0) {
- ZEND_WRONG_PARAM_COUNT();
- RETURN_FALSE;
- }
-
- array_init(return_value);
-
- add_assoc_string(return_value, "GD Version", PHP_GD_VERSION_STRING, 1);
-
-#ifdef ENABLE_GD_TTF
- add_assoc_bool(return_value, "FreeType Support", 1);
-#if HAVE_LIBFREETYPE
- add_assoc_string(return_value, "FreeType Linkage", "with freetype", 1);
-#elif HAVE_LIBTTF
- add_assoc_string(return_value, "FreeType Linkage", "with TTF library", 1);
-#else
- add_assoc_string(return_value, "FreeType Linkage", "with unknown library", 1);
-#endif
-#else
- add_assoc_bool(return_value, "FreeType Support", 0);
-#endif
-
-#ifdef HAVE_LIBT1
- add_assoc_bool(return_value, "T1Lib Support", 1);
-#else
- add_assoc_bool(return_value, "T1Lib Support", 0);
-#endif
-#ifdef HAVE_GD_GIF_READ
- add_assoc_bool(return_value, "GIF Read Support", 1);
-#else
- add_assoc_bool(return_value, "GIF Read Support", 0);
-#endif
-#ifdef HAVE_GD_GIF_CREATE
- add_assoc_bool(return_value, "GIF Create Support", 1);
-#else
- add_assoc_bool(return_value, "GIF Create Support", 0);
-#endif
-#ifdef HAVE_GD_JPG
- add_assoc_bool(return_value, "JPG Support", 1);
-#else
- add_assoc_bool(return_value, "JPG Support", 0);
-#endif
-#ifdef HAVE_GD_PNG
- add_assoc_bool(return_value, "PNG Support", 1);
-#else
- add_assoc_bool(return_value, "PNG Support", 0);
-#endif
-#ifdef HAVE_GD_WBMP
- add_assoc_bool(return_value, "WBMP Support", 1);
-#else
- add_assoc_bool(return_value, "WBMP Support", 0);
-#endif
-#if defined(HAVE_GD_XPM) && defined(HAVE_GD_BUNDLED)
- add_assoc_bool(return_value, "XPM Support", 1);
-#else
- add_assoc_bool(return_value, "XPM Support", 0);
-#endif
-#ifdef HAVE_GD_XBM
- add_assoc_bool(return_value, "XBM Support", 1);
-#else
- add_assoc_bool(return_value, "XBM Support", 0);
-#endif
-#if defined(USE_GD_JISX0208) && defined(HAVE_GD_BUNDLED)
- add_assoc_bool(return_value, "JIS-mapped Japanese Font Support", 1);
-#else
- add_assoc_bool(return_value, "JIS-mapped Japanese Font Support", 0);
-#endif
-}
-/* }}} */
-
-/* Need this for cpdf. See also comment in file.c php3i_get_le_fp() */
-PHP_GD_API int phpi_get_le_gd(void)
-{
- return le_gd;
-}
-
-#ifndef HAVE_GDIMAGECOLORRESOLVE
-
-/* {{{ gdImageColorResolve
- */
-/********************************************************************/
-/* gdImageColorResolve is a replacement for the old fragment: */
-/* */
-/* if ((color=gdImageColorExact(im,R,G,B)) < 0) */
-/* if ((color=gdImageColorAllocate(im,R,G,B)) < 0) */
-/* color=gdImageColorClosest(im,R,G,B); */
-/* */
-/* in a single function */
-
-int gdImageColorResolve(gdImagePtr im, int r, int g, int b)
-{
- int c;
- int ct = -1;
- int op = -1;
- long rd, gd, bd, dist;
- long mindist = 3*255*255; /* init to max poss dist */
-
- for (c = 0; c < im->colorsTotal; c++) {
- if (im->open[c]) {
- op = c; /* Save open slot */
- continue; /* Color not in use */
- }
- rd = (long) (im->red [c] - r);
- gd = (long) (im->green[c] - g);
- bd = (long) (im->blue [c] - b);
- dist = rd * rd + gd * gd + bd * bd;
- if (dist < mindist) {
- if (dist == 0) {
- return c; /* Return exact match color */
- }
- mindist = dist;
- ct = c;
- }
- }
- /* no exact match. We now know closest, but first try to allocate exact */
- if (op == -1) {
- op = im->colorsTotal;
- if (op == gdMaxColors) { /* No room for more colors */
- return ct; /* Return closest available color */
- }
- im->colorsTotal++;
- }
- im->red [op] = r;
- im->green[op] = g;
- im->blue [op] = b;
- im->open [op] = 0;
- return op; /* Return newly allocated color */
-}
-/* }}} */
-
-#endif
-
-#define FLIPWORD(a) (((a & 0xff000000) >> 24) | ((a & 0x00ff0000) >> 8) | ((a & 0x0000ff00) << 8) | ((a & 0x000000ff) << 24))
-
-/* {{{ proto int imageloadfont(string filename)
- Load a new font */
-PHP_FUNCTION(imageloadfont)
-{
- zval **file;
- int hdr_size = sizeof(gdFont) - sizeof(char *);
- int ind, body_size, n = 0, b, i, body_size_check;
- gdFontPtr font;
- php_stream *stream;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &file) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- convert_to_string_ex(file);
-
- stream = php_stream_open_wrapper(Z_STRVAL_PP(file), "rb", IGNORE_PATH | IGNORE_URL_WIN | REPORT_ERRORS, NULL);
- if (stream == NULL) {
- RETURN_FALSE;
- }
-
- /* Only supports a architecture-dependent binary dump format
- * at the moment.
- * The file format is like this on machines with 32-byte integers:
- *
- * byte 0-3: (int) number of characters in the font
- * byte 4-7: (int) value of first character in the font (often 32, space)
- * byte 8-11: (int) pixel width of each character
- * byte 12-15: (int) pixel height of each character
- * bytes 16-: (char) array with character data, one byte per pixel
- * in each character, for a total of
- * (nchars*width*height) bytes.
- */
- font = (gdFontPtr) emalloc(sizeof(gdFont));
- b = 0;
- while (b < hdr_size && (n = php_stream_read(stream, (char*)&font[b], hdr_size - b))) {
- b += n;
- }
-
- if (!n) {
- efree(font);
- if (php_stream_eof(stream)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "End of file while reading header");
- } else {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Error while reading header");
- }
- php_stream_close(stream);
- RETURN_FALSE;
- }
- i = php_stream_tell(stream);
- php_stream_seek(stream, 0, SEEK_END);
- body_size_check = php_stream_tell(stream) - hdr_size;
- php_stream_seek(stream, i, SEEK_SET);
-
- body_size = font->w * font->h * font->nchars;
- if (body_size != body_size_check) {
- font->w = FLIPWORD(font->w);
- font->h = FLIPWORD(font->h);
- font->nchars = FLIPWORD(font->nchars);
- body_size = font->w * font->h * font->nchars;
- }
-
- if (body_size != body_size_check) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Error reading font");
- efree(font);
- php_stream_close(stream);
- RETURN_FALSE;
- }
-
- font->data = emalloc(body_size);
- b = 0;
- while (b < body_size && (n = php_stream_read(stream, &font->data[b], body_size - b))) {
- b += n;
- }
-
- if (!n) {
- efree(font->data);
- efree(font);
- if (php_stream_eof(stream)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "End of file while reading body");
- } else {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Error while reading body");
- }
- php_stream_close(stream);
- RETURN_FALSE;
- }
- php_stream_close(stream);
-
- /* Adding 5 to the font index so we will never have font indices
- * that overlap with the old fonts (with indices 1-5). The first
- * list index given out is always 1.
- */
- ind = 5 + zend_list_insert(font, le_gd_font);
-
- RETURN_LONG(ind);
-}
-/* }}} */
-
-/* {{{ proto bool imagesetstyle(resource im, array styles)
- Set the line drawing styles for use with imageline and IMG_COLOR_STYLED. */
-PHP_FUNCTION(imagesetstyle)
-{
- zval **IM, **styles;
- gdImagePtr im;
- int * stylearr;
- int index;
- HashPosition pos;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &IM, &styles) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- ZEND_FETCH_RESOURCE(im, gdImagePtr, IM, -1, "Image", le_gd);
-
- convert_to_array_ex(styles);
-
- /* copy the style values in the stylearr */
- stylearr = safe_emalloc(sizeof(int), zend_hash_num_elements(HASH_OF(*styles)), 0);
-
- zend_hash_internal_pointer_reset_ex(HASH_OF(*styles), &pos);
-
- for (index = 0;; zend_hash_move_forward_ex(HASH_OF(*styles), &pos)) {
- zval ** item;
-
- if (zend_hash_get_current_data_ex(HASH_OF(*styles), (void **) &item, &pos) == FAILURE) {
- break;
- }
-
- convert_to_long_ex(item);
-
- stylearr[index++] = Z_LVAL_PP(item);
- }
-
- gdImageSetStyle(im, stylearr, index);
-
- efree(stylearr);
-
- RETURN_TRUE;
-}
-/* }}} */
-
-#if HAVE_LIBGD20
-/* {{{ proto resource imagecreatetruecolor(int x_size, int y_size)
- Create a new true color image */
-PHP_FUNCTION(imagecreatetruecolor)
-{
- zval **x_size, **y_size;
- gdImagePtr im;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &x_size, &y_size) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- convert_to_long_ex(x_size);
- convert_to_long_ex(y_size);
-
- if (Z_LVAL_PP(x_size) <= 0 || Z_LVAL_PP(y_size) <= 0) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid image dimensions");
- RETURN_FALSE;
- }
-
- im = gdImageCreateTrueColor(Z_LVAL_PP(x_size), Z_LVAL_PP(y_size));
-
- ZEND_REGISTER_RESOURCE(return_value, im, le_gd);
-}
-/* }}} */
-
-/* {{{ proto bool imageistruecolor(resource im)
- return true if the image uses truecolor */
-PHP_FUNCTION(imageistruecolor)
-{
- zval **IM;
- gdImagePtr im;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &IM) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- ZEND_FETCH_RESOURCE(im, gdImagePtr, IM, -1, "Image", le_gd);
-
- RETURN_BOOL(im->trueColor);
-}
-/* }}} */
-
-/* {{{ proto void imagetruecolortopalette(resource im, bool ditherFlag, int colorsWanted)
- Convert a true colour image to a palette based image with a number of colours, optionally using dithering. */
-PHP_FUNCTION(imagetruecolortopalette)
-{
- zval **IM, **dither, **ncolors;
- gdImagePtr im;
-
- if (ZEND_NUM_ARGS() != 3 || zend_get_parameters_ex(3, &IM, &dither, &ncolors) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- ZEND_FETCH_RESOURCE(im, gdImagePtr, IM, -1, "Image", le_gd);
-
- convert_to_boolean_ex(dither);
- convert_to_long_ex(ncolors);
-
- gdImageTrueColorToPalette(im, Z_LVAL_PP(dither), Z_LVAL_PP(ncolors));
-
- RETURN_TRUE;
-}
-/* }}} */
-
-#if HAVE_GD_BUNDLED
-/* {{{ proto bool imagecolormatch(resource im1, resource im2)
- Makes the colors of the palette version of an image more closely match the true color version */
-PHP_FUNCTION(imagecolormatch)
-{
- zval **IM1, **IM2;
- gdImagePtr im1, im2;
- int result;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &IM1, &IM2 ) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- ZEND_FETCH_RESOURCE(im1, gdImagePtr, IM1, -1, "Image", le_gd);
- ZEND_FETCH_RESOURCE(im2, gdImagePtr, IM2, -1, "Image", le_gd);
-
- result = gdImageColorMatch(im1, im2);
- switch (result) {
- case -1:
- php_error_docref(NULL TSRMLS_CC, E_ERROR, "Image1 must be TrueColor" );
- RETURN_FALSE;
- break;
- case -2:
- php_error_docref(NULL TSRMLS_CC, E_ERROR, "Image2 must be Palette" );
- RETURN_FALSE;
- break;
- case -3:
- php_error_docref(NULL TSRMLS_CC, E_ERROR, "Image1 and Image2 must be the same size" );
- RETURN_FALSE;
- break;
- }
-
- RETURN_TRUE;
-}
-/* }}} */
-#endif
-
-/* {{{ proto bool imagesetthickness(resource im, int thickness)
- Set line thickness for drawing lines, ellipses, rectangles, polygons etc. */
-PHP_FUNCTION(imagesetthickness)
-{
- zval **IM, **thick;
- gdImagePtr im;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &IM, &thick) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- ZEND_FETCH_RESOURCE(im, gdImagePtr, IM, -1, "Image", le_gd);
- convert_to_long_ex(thick);
-
- gdImageSetThickness(im, Z_LVAL_PP(thick));
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto bool imagefilledellipse(resource im, int cx, int cy, int w, int h, int color)
- Draw an ellipse */
-PHP_FUNCTION(imagefilledellipse)
-{
- zval **IM, **cx, **cy, **w, **h, **color;
- gdImagePtr im;
-
- if (ZEND_NUM_ARGS() != 6 || zend_get_parameters_ex(6, &IM, &cx, &cy, &w, &h, &color) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- ZEND_FETCH_RESOURCE(im, gdImagePtr, IM, -1, "Image", le_gd);
-
- convert_to_long_ex(cx);
- convert_to_long_ex(cy);
- convert_to_long_ex(w);
- convert_to_long_ex(h);
- convert_to_long_ex(color);
-
- gdImageFilledEllipse(im, Z_LVAL_PP(cx), Z_LVAL_PP(cy), Z_LVAL_PP(w), Z_LVAL_PP(h), Z_LVAL_PP(color));
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto bool imagefilledarc(resource im, int cx, int cy, int w, int h, int s, int e, int col, int style)
- Draw a filled partial ellipse */
-PHP_FUNCTION(imagefilledarc)
-{
- zval **IM, **cx, **cy, **w, **h, **ST, **E, **col, **style;
- gdImagePtr im;
- int e, st;
-
- if (ZEND_NUM_ARGS() != 9 || zend_get_parameters_ex(9, &IM, &cx, &cy, &w, &h, &ST, &E, &col, &style) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- ZEND_FETCH_RESOURCE(im, gdImagePtr, IM, -1, "Image", le_gd);
-
- convert_to_long_ex(cx);
- convert_to_long_ex(cy);
- convert_to_long_ex(w);
- convert_to_long_ex(h);
- convert_to_long_ex(ST);
- convert_to_long_ex(E);
- convert_to_long_ex(col);
- convert_to_long_ex(style);
-
- e = Z_LVAL_PP(E);
- if (e < 0) {
- e %= 360;
- }
-
- st = Z_LVAL_PP(ST);
- if (st < 0) {
- st %= 360;
- }
-
- gdImageFilledArc(im, Z_LVAL_PP(cx), Z_LVAL_PP(cy), Z_LVAL_PP(w), Z_LVAL_PP(h), st, e, Z_LVAL_PP(col), Z_LVAL_PP(style));
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto bool imagealphablending(resource im, bool on)
- Turn alpha blending mode on or off for the given image */
-PHP_FUNCTION(imagealphablending)
-{
- zval **IM, **blend;
- gdImagePtr im;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &IM, &blend) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- ZEND_FETCH_RESOURCE(im, gdImagePtr, IM, -1, "Image", le_gd);
- convert_to_boolean_ex(blend);
-
- gdImageAlphaBlending(im, Z_LVAL_PP(blend));
-
- RETURN_TRUE;
-}
-/* }}} */
-
-#if HAVE_LIBGD20
-/* {{{ proto bool imagesavealpha(resource im, bool on)
- Include alpha channel to a saved image */
-PHP_FUNCTION(imagesavealpha)
-{
- zval **IM, **save;
- gdImagePtr im;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &IM, &save) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- ZEND_FETCH_RESOURCE(im, gdImagePtr, IM, -1, "Image", le_gd);
- convert_to_boolean_ex(save);
-
- gdImageSaveAlpha(im, Z_LVAL_PP(save));
-
- RETURN_TRUE;
-}
-#endif
-
-#if HAVE_GD_BUNDLED
-/* {{{ proto bool imagelayereffect(resource im, int effect)
- Set the alpha blending flag to use the bundled libgd layering effects */
-PHP_FUNCTION(imagelayereffect)
-{
- zval **IM, **effect;
- gdImagePtr im;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &IM, &effect) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- ZEND_FETCH_RESOURCE(im, gdImagePtr, IM, -1, "Image", le_gd);
- convert_to_long_ex(effect);
-
- gdImageAlphaBlending(im, Z_LVAL_PP(effect) );
-
- RETURN_TRUE;
-}
-/* }}} */
-#endif
-
-/* {{{ proto int imagecolorallocatealpha(resource im, int red, int green, int blue, int alpha)
- Allocate a color with an alpha level. Works for true color and palette based images */
-PHP_FUNCTION(imagecolorallocatealpha)
-{
- zval *IM;
- long red, green, blue, alpha;
- gdImagePtr im;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "zllll", &IM, &red, &green, &blue, &alpha) == FAILURE) {
- RETURN_FALSE;
- }
-
- ZEND_FETCH_RESOURCE(im, gdImagePtr, &IM, -1, "Image", le_gd);
-
- RETURN_LONG(gdImageColorAllocateAlpha(im, red, green, blue, alpha));
-}
-/* }}} */
-
-/* {{{ proto int imagecolorresolvealpha(resource im, int red, int green, int blue, int alpha)
- Resolve/Allocate a colour with an alpha level. Works for true colour and palette based images */
-PHP_FUNCTION(imagecolorresolvealpha)
-{
- zval **IM, ** red, **green, **blue, **alpha;
- gdImagePtr im;
-
- if (ZEND_NUM_ARGS() != 5 || zend_get_parameters_ex(5, &IM, &red, &green, &blue, &alpha) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- ZEND_FETCH_RESOURCE(im, gdImagePtr, IM, -1, "Image", le_gd);
-
- convert_to_long_ex(red);
- convert_to_long_ex(green);
- convert_to_long_ex(blue);
- convert_to_long_ex(alpha);
-
- RETURN_LONG(gdImageColorResolveAlpha(im, Z_LVAL_PP(red), Z_LVAL_PP(green), Z_LVAL_PP(blue), Z_LVAL_PP(alpha)));
-}
-/* }}} */
-
-/* {{{ proto int imagecolorclosestalpha(resource im, int red, int green, int blue, int alpha)
- Find the closest matching colour with alpha transparency */
-PHP_FUNCTION(imagecolorclosestalpha)
-{
- zval **IM, ** red, **green, **blue, **alpha;
- gdImagePtr im;
-
- if (ZEND_NUM_ARGS() != 5 || zend_get_parameters_ex(5, &IM, &red, &green, &blue, &alpha) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- ZEND_FETCH_RESOURCE(im, gdImagePtr, IM, -1, "Image", le_gd);
-
- convert_to_long_ex(red);
- convert_to_long_ex(green);
- convert_to_long_ex(blue);
- convert_to_long_ex(alpha);
-
- RETURN_LONG(gdImageColorClosestAlpha(im, Z_LVAL_PP(red), Z_LVAL_PP(green), Z_LVAL_PP(blue), Z_LVAL_PP(alpha)));
-}
-/* }}} */
-
-/* {{{ proto int imagecolorexactalpha(resource im, int red, int green, int blue, int alpha)
- Find exact match for colour with transparency */
-PHP_FUNCTION(imagecolorexactalpha)
-{
- zval **IM, **red, **green, **blue, **alpha;
- gdImagePtr im;
-
- if (ZEND_NUM_ARGS() != 5 || zend_get_parameters_ex(5, &IM, &red, &green, &blue, &alpha) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- ZEND_FETCH_RESOURCE(im, gdImagePtr, IM, -1, "Image", le_gd);
-
- convert_to_long_ex(red);
- convert_to_long_ex(green);
- convert_to_long_ex(blue);
- convert_to_long_ex(alpha);
-
- RETURN_LONG(gdImageColorExactAlpha(im, Z_LVAL_PP(red), Z_LVAL_PP(green), Z_LVAL_PP(blue), Z_LVAL_PP(alpha)));
-}
-/* }}} */
-
-/* {{{ proto bool imagecopyresampled(resource dst_im, resource src_im, int dst_x, int dst_y, int src_x, int src_y, int dst_w, int dst_h, int src_w, int src_h)
- Copy and resize part of an image using resampling to help ensure clarity */
-PHP_FUNCTION(imagecopyresampled)
-{
- zval **SIM, **DIM, **SX, **SY, **SW, **SH, **DX, **DY, **DW, **DH;
- gdImagePtr im_dst, im_src;
- int srcH, srcW, dstH, dstW, srcY, srcX, dstY, dstX;
-
- if (ZEND_NUM_ARGS() != 10 || zend_get_parameters_ex(10, &DIM, &SIM, &DX, &DY, &SX, &SY, &DW, &DH, &SW, &SH) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- ZEND_FETCH_RESOURCE(im_dst, gdImagePtr, DIM, -1, "Image", le_gd);
- ZEND_FETCH_RESOURCE(im_src, gdImagePtr, SIM, -1, "Image", le_gd);
-
- convert_to_long_ex(SX);
- convert_to_long_ex(SY);
- convert_to_long_ex(SW);
- convert_to_long_ex(SH);
- convert_to_long_ex(DX);
- convert_to_long_ex(DY);
- convert_to_long_ex(DW);
- convert_to_long_ex(DH);
-
- srcX = Z_LVAL_PP(SX);
- srcY = Z_LVAL_PP(SY);
- srcH = Z_LVAL_PP(SH);
- srcW = Z_LVAL_PP(SW);
- dstX = Z_LVAL_PP(DX);
- dstY = Z_LVAL_PP(DY);
- dstH = Z_LVAL_PP(DH);
- dstW = Z_LVAL_PP(DW);
-
- gdImageCopyResampled(im_dst, im_src, dstX, dstY, srcX, srcY, dstW, dstH, srcW, srcH);
-
- RETURN_TRUE;
-}
-/* }}} */
-#endif
-
-#ifdef HAVE_GD_BUNDLED
-/* {{{ proto resource imagerotate(resource src_im, float angle, int bgdcolor)
- Rotate an image using a custom angle */
-PHP_FUNCTION(imagerotate)
-{
- zval **SIM, **ANGLE, **BGDCOLOR;
- gdImagePtr im_dst, im_src;
- double degrees;
- long color;
-
- if (ZEND_NUM_ARGS() != 3 || zend_get_parameters_ex(3, &SIM, &ANGLE, &BGDCOLOR) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- ZEND_FETCH_RESOURCE(im_src, gdImagePtr, SIM, -1, "Image", le_gd);
-
- convert_to_long_ex(BGDCOLOR);
- color = Z_LVAL_PP(BGDCOLOR);
-
- convert_to_double_ex(ANGLE);
- degrees = Z_DVAL_PP(ANGLE);
- im_dst = gdImageRotate(im_src, degrees, color);
-
- if (im_dst != NULL) {
- ZEND_REGISTER_RESOURCE(return_value, im_dst, le_gd);
- } else {
- RETURN_FALSE;
- }
-}
-/* }}} */
-#endif
-
-#if HAVE_GD_IMAGESETTILE
-/* {{{ proto bool imagesettile(resource image, resource tile)
- Set the tile image to $tile when filling $image with the "IMG_COLOR_TILED" color */
-PHP_FUNCTION(imagesettile)
-{
- zval **IM, **TILE;
- gdImagePtr im, tile;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &IM, &TILE) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- ZEND_FETCH_RESOURCE(im, gdImagePtr, IM, -1, "Image", le_gd);
- ZEND_FETCH_RESOURCE(tile, gdImagePtr, TILE, -1, "Image", le_gd);
-
- gdImageSetTile(im, tile);
-
- RETURN_TRUE;
-}
-/* }}} */
-#endif
-
-#if HAVE_GD_IMAGESETBRUSH
-/* {{{ proto bool imagesetbrush(resource image, resource brush)
- Set the brush image to $brush when filling $image with the "IMG_COLOR_BRUSHED" color */
-PHP_FUNCTION(imagesetbrush)
-{
- zval **IM, **TILE;
- gdImagePtr im, tile;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &IM, &TILE) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- ZEND_FETCH_RESOURCE(im, gdImagePtr, IM, -1, "Image", le_gd);
- ZEND_FETCH_RESOURCE(tile, gdImagePtr, TILE, -1, "Image", le_gd);
-
- gdImageSetBrush(im, tile);
-
- RETURN_TRUE;
-}
-/* }}} */
-#endif
-
-/* {{{ proto resource imagecreate(int x_size, int y_size)
- Create a new image */
-PHP_FUNCTION(imagecreate)
-{
- zval **x_size, **y_size;
- gdImagePtr im;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &x_size, &y_size) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- convert_to_long_ex(x_size);
- convert_to_long_ex(y_size);
-
- if (Z_LVAL_PP(x_size) <= 0 || Z_LVAL_PP(y_size) <= 0) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid image dimensions");
- RETURN_FALSE;
- }
-
- im = gdImageCreate(Z_LVAL_PP(x_size), Z_LVAL_PP(y_size));
-
- ZEND_REGISTER_RESOURCE(return_value, im, le_gd);
-}
-/* }}} */
-
-/* {{{ proto int imagetypes(void)
- Return the types of images supported in a bitfield - 1=GIF, 2=JPEG, 4=PNG, 8=WBMP, 16=XPM */
-PHP_FUNCTION(imagetypes)
-{
- int ret=0;
-#ifdef HAVE_GD_GIF_CREATE
- ret = 1;
-#endif
-#ifdef HAVE_GD_JPG
- ret |= 2;
-#endif
-#ifdef HAVE_GD_PNG
- ret |= 4;
-#endif
-#ifdef HAVE_GD_WBMP
- ret |= 8;
-#endif
-#if defined(HAVE_GD_XPM) && defined(HAVE_GD_BUNDLED)
- ret |= 16;
-#endif
-
- if (ZEND_NUM_ARGS() != 0) {
- WRONG_PARAM_COUNT;
- }
-
- RETURN_LONG(ret);
-}
-/* }}} */
-
-/* {{{ _php_image_type
- */
-static const char php_sig_gd2[3] = {'g', 'd', '2'};
-
-static int _php_image_type (char data[8])
-{
-#ifdef HAVE_LIBGD15
- /* Based on ext/standard/image.c */
-
- if (data == NULL) {
- return -1;
- }
-
- if (!memcmp(data, php_sig_gd2, 3)) {
- return PHP_GDIMG_TYPE_GD2;
- } else if (!memcmp(data, php_sig_jpg, 3)) {
- return PHP_GDIMG_TYPE_JPG;
- } else if (!memcmp(data, php_sig_png, 3)) {
- if (!memcmp(data, php_sig_png, 8)) {
- return PHP_GDIMG_TYPE_PNG;
- }
- } else if (!memcmp(data, php_sig_gif, 3)) {
- return PHP_GDIMG_TYPE_GIF;
- }
-#ifdef HAVE_GD_WBMP
- else {
- gdIOCtx *io_ctx;
- io_ctx = gdNewDynamicCtxEx(8, data, 0);
- if (io_ctx) {
- if (getmbi((int(*)(void *)) gdGetC, io_ctx) == 0 && skipheader((int(*)(void *)) gdGetC, io_ctx) == 0 ) {
-#if HAVE_LIBGD204
- io_ctx->gd_free(io_ctx);
-#else
- io_ctx->free(io_ctx);
-#endif
- return PHP_GDIMG_TYPE_WBM;
- } else {
-#if HAVE_LIBGD204
- io_ctx->gd_free(io_ctx);
-#else
- io_ctx->free(io_ctx);
-#endif
- }
- }
- }
-#endif
- return -1;
-#endif
-}
-/* }}} */
-
-#ifdef HAVE_LIBGD15
-/* {{{ _php_image_create_from_string
- */
-gdImagePtr _php_image_create_from_string(zval **data, char *tn, gdImagePtr (*ioctx_func_p)() TSRMLS_DC)
-{
- gdImagePtr im;
- gdIOCtx *io_ctx;
-
- io_ctx = gdNewDynamicCtxEx(Z_STRLEN_PP(data), Z_STRVAL_PP(data), 0);
-
- if (!io_ctx) {
- return NULL;
- }
-
- im = (*ioctx_func_p)(io_ctx);
- if (!im) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Passed data is not in '%s' format", tn);
- return NULL;
- }
-
-#if HAVE_LIBGD204
- io_ctx->gd_free(io_ctx);
-#else
- io_ctx->free(io_ctx);
-#endif
-
- return im;
-}
-/* }}} */
-
-/* {{{ proto resource imagecreatefromstring(string image)
- Create a new image from the image stream in the string */
-PHP_FUNCTION(imagecreatefromstring)
-{
- zval **data;
- gdImagePtr im;
- int imtype;
- char sig[8];
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &data) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- convert_to_string_ex(data);
- memcpy(sig, Z_STRVAL_PP(data), 8);
-
- imtype = _php_image_type(sig);
-
- switch (imtype) {
- case PHP_GDIMG_TYPE_JPG:
-#ifdef HAVE_GD_JPG
- im = _php_image_create_from_string(data, "JPEG", gdImageCreateFromJpegCtx TSRMLS_CC);
-#else
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "No JPEG support in this PHP build");
- RETURN_FALSE;
-#endif
- break;
-
- case PHP_GDIMG_TYPE_PNG:
-#ifdef HAVE_GD_PNG
- im = _php_image_create_from_string(data, "PNG", gdImageCreateFromPngCtx TSRMLS_CC);
-#else
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "No PNG support in this PHP build");
- RETURN_FALSE;
-#endif
- break;
-
- case PHP_GDIMG_TYPE_GIF:
-#ifdef HAVE_GD_GIF_READ
- im = _php_image_create_from_string(data, "GIF", gdImageCreateFromGifCtx TSRMLS_CC);
-#else
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "No GIF support in this PHP build");
- RETURN_FALSE;
-#endif
- break;
-
- case PHP_GDIMG_TYPE_WBM:
-#ifdef HAVE_GD_WBMP
- im = _php_image_create_from_string(data, "WBMP", gdImageCreateFromWBMPCtx TSRMLS_CC);
-#else
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "No WBMP support in this PHP build");
- RETURN_FALSE;
-#endif
- break;
-
- case PHP_GDIMG_TYPE_GD2:
-#ifdef HAVE_GD_GD2
- im = _php_image_create_from_string(data, "GD2", gdImageCreateFromGd2Ctx TSRMLS_CC);
-#else
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "No GD2 support in this PHP build");
- RETURN_FALSE;
-#endif
- break;
-
- default:
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Data is not in a recognized format.");
- RETURN_FALSE;
- }
-
- if (!im) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Couldn't create GD Image Stream out of Data");
- RETURN_FALSE;
- }
-
- ZEND_REGISTER_RESOURCE(return_value, im, le_gd);
-}
-/* }}} */
-#endif
-
-/* {{{ _php_image_create_from
- */
-static void _php_image_create_from(INTERNAL_FUNCTION_PARAMETERS, int image_type, char *tn, gdImagePtr (*func_p)(), gdImagePtr (*ioctx_func_p)())
-{
- zval **file, **srcx, **srcy, **width, **height;
- gdImagePtr im = NULL;
- char *fn=NULL;
- php_stream *stream;
- FILE * fp = NULL;
- int argc=ZEND_NUM_ARGS();
-
- if ((image_type == PHP_GDIMG_TYPE_GD2PART && argc != 5) ||
- (image_type != PHP_GDIMG_TYPE_GD2PART && argc != 1) ||
- zend_get_parameters_ex(argc, &file, &srcx, &srcy, &width, &height) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- convert_to_string_ex(file);
-
- if (argc == 5 && image_type == PHP_GDIMG_TYPE_GD2PART) {
- multi_convert_to_long_ex(4, srcx, srcy, width, height);
- }
-
- fn = Z_STRVAL_PP(file);
-
- stream = php_stream_open_wrapper(fn, "rb", REPORT_ERRORS|IGNORE_PATH|IGNORE_URL_WIN, NULL);
- if (stream == NULL) {
- RETURN_FALSE;
- }
-
-#ifndef USE_GD_IOCTX
- ioctx_func_p = NULL; /* don't allow sockets without IOCtx */
-#endif
-
- /* try and avoid allocating a FILE* if the stream is not naturally a FILE* */
- if (php_stream_is(stream, PHP_STREAM_IS_STDIO)) {
- if (FAILURE == php_stream_cast(stream, PHP_STREAM_AS_STDIO, (void**)&fp, REPORT_ERRORS)) {
- goto out_err;
- }
- } else if (ioctx_func_p) {
-#ifdef USE_GD_IOCTX
- /* we can create an io context */
- gdIOCtx* io_ctx;
- size_t buff_size;
- char *buff;
-
- /* needs to be malloc (persistent) - GD will free() it later */
- buff_size = php_stream_copy_to_mem(stream, &buff, PHP_STREAM_COPY_ALL, 1);
-
- if (!buff_size) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING,"Cannot read image data");
- goto out_err;
- }
-
- io_ctx = gdNewDynamicCtxEx(buff_size, buff, 0);
- if (!io_ctx) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING,"Cannot allocate GD IO context");
- goto out_err;
- }
-
- if (image_type == PHP_GDIMG_TYPE_GD2PART) {
- im = (*ioctx_func_p)(io_ctx, Z_LVAL_PP(srcx), Z_LVAL_PP(srcy), Z_LVAL_PP(width), Z_LVAL_PP(height));
- } else {
- im = (*ioctx_func_p)(io_ctx);
- }
-#if HAVE_LIBGD204
- io_ctx->gd_free(io_ctx);
-#else
- io_ctx->free(io_ctx);
-#endif
-
-#endif
- }
- else {
- /* try and force the stream to be FILE* */
- if (FAILURE == php_stream_cast(stream, PHP_STREAM_AS_STDIO | PHP_STREAM_CAST_TRY_HARD, (void **) &fp, REPORT_ERRORS)) {
- goto out_err;
- }
- }
-
- if (!im && fp) {
- switch (image_type) {
- case PHP_GDIMG_TYPE_GD2PART:
- im = (*func_p)(fp, Z_LVAL_PP(srcx), Z_LVAL_PP(srcy), Z_LVAL_PP(width), Z_LVAL_PP(height));
- break;
-#if defined(HAVE_GD_XPM) && defined(HAVE_GD_BUNDLED)
- case PHP_GDIMG_TYPE_XPM:
- im = gdImageCreateFromXpm(fn);
- break;
-#endif
- default:
- im = (*func_p)(fp);
- break;
- }
-
- fflush(fp);
- }
-
- if (im) {
- ZEND_REGISTER_RESOURCE(return_value, im, le_gd);
- php_stream_close(stream);
- return;
- }
-
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "'%s' is not a valid %s file", fn, tn);
-out_err:
- php_stream_close(stream);
- RETURN_FALSE;
-
-}
-/* }}} */
-
-#ifdef HAVE_GD_GIF_READ
-/* {{{ proto resource imagecreatefromgif(string filename)
- Create a new image from GIF file or URL */
-PHP_FUNCTION(imagecreatefromgif)
-{
- _php_image_create_from(INTERNAL_FUNCTION_PARAM_PASSTHRU, PHP_GDIMG_TYPE_GIF, "GIF", gdImageCreateFromGif, gdImageCreateFromGifCtx);
-}
-/* }}} */
-#endif /* HAVE_GD_GIF_READ */
-
-#ifdef HAVE_GD_JPG
-/* {{{ proto resource imagecreatefromjpeg(string filename)
- Create a new image from JPEG file or URL */
-PHP_FUNCTION(imagecreatefromjpeg)
-{
- _php_image_create_from(INTERNAL_FUNCTION_PARAM_PASSTHRU, PHP_GDIMG_TYPE_JPG, "JPEG", gdImageCreateFromJpeg, gdImageCreateFromJpegCtx);
-}
-/* }}} */
-#endif /* HAVE_GD_JPG */
-
-#ifdef HAVE_GD_PNG
-/* {{{ proto resource imagecreatefrompng(string filename)
- Create a new image from PNG file or URL */
-PHP_FUNCTION(imagecreatefrompng)
-{
- _php_image_create_from(INTERNAL_FUNCTION_PARAM_PASSTHRU, PHP_GDIMG_TYPE_PNG, "PNG", gdImageCreateFromPng, gdImageCreateFromPngCtx);
-}
-/* }}} */
-#endif /* HAVE_GD_PNG */
-
-#ifdef HAVE_GD_XBM
-/* {{{ proto resource imagecreatefromxbm(string filename)
- Create a new image from XBM file or URL */
-PHP_FUNCTION(imagecreatefromxbm)
-{
- _php_image_create_from(INTERNAL_FUNCTION_PARAM_PASSTHRU, PHP_GDIMG_TYPE_XBM, "XBM", gdImageCreateFromXbm, NULL);
-}
-/* }}} */
-#endif /* HAVE_GD_XBM */
-
-#if defined(HAVE_GD_XPM) && defined(HAVE_GD_BUNDLED)
-/* {{{ proto resource imagecreatefromxpm(string filename)
- Create a new image from XPM file or URL */
-PHP_FUNCTION(imagecreatefromxpm)
-{
- _php_image_create_from(INTERNAL_FUNCTION_PARAM_PASSTHRU, PHP_GDIMG_TYPE_XPM, "XPM", gdImageCreateFromXpm, NULL);
-}
-/* }}} */
-#endif
-
-#ifdef HAVE_GD_WBMP
-/* {{{ proto resource imagecreatefromwbmp(string filename)
- Create a new image from WBMP file or URL */
-PHP_FUNCTION(imagecreatefromwbmp)
-{
- _php_image_create_from(INTERNAL_FUNCTION_PARAM_PASSTHRU, PHP_GDIMG_TYPE_WBM, "WBMP", gdImageCreateFromWBMP, gdImageCreateFromWBMPCtx);
-}
-/* }}} */
-#endif /* HAVE_GD_WBMP */
-
-/* {{{ proto resource imagecreatefromgd(string filename)
- Create a new image from GD file or URL */
-PHP_FUNCTION(imagecreatefromgd)
-{
- _php_image_create_from(INTERNAL_FUNCTION_PARAM_PASSTHRU, PHP_GDIMG_TYPE_GD, "GD", gdImageCreateFromGd, gdImageCreateFromGdCtx);
-}
-/* }}} */
-
-#ifdef HAVE_GD_GD2
-/* {{{ proto resource imagecreatefromgd2(string filename)
- Create a new image from GD2 file or URL */
-PHP_FUNCTION(imagecreatefromgd2)
-{
- _php_image_create_from(INTERNAL_FUNCTION_PARAM_PASSTHRU, PHP_GDIMG_TYPE_GD2, "GD2", gdImageCreateFromGd2, gdImageCreateFromGd2Ctx);
-}
-/* }}} */
-
-/* {{{ proto resource imagecreatefromgd2part(string filename, int srcX, int srcY, int width, int height)
- Create a new image from a given part of GD2 file or URL */
-PHP_FUNCTION(imagecreatefromgd2part)
-{
- _php_image_create_from(INTERNAL_FUNCTION_PARAM_PASSTHRU, PHP_GDIMG_TYPE_GD2PART, "GD2", gdImageCreateFromGd2Part, gdImageCreateFromGd2PartCtx);
-}
-/* }}} */
-#endif /* HAVE_GD_GD2 */
-
-/* {{{ _php_image_output
- */
-static void _php_image_output(INTERNAL_FUNCTION_PARAMETERS, int image_type, char *tn, void (*func_p)())
-{
- zval **imgind, **file, **quality, **type;
- gdImagePtr im;
- char *fn = NULL;
- FILE *fp;
- int argc = ZEND_NUM_ARGS();
- int q = -1, i, t = 1;
-
- /* The quality parameter for Wbmp stands for the threshold when called from image2wbmp() */
- /* When called from imagewbmp() the quality parameter stands for the foreground color. Default: black. */
- /* The quality parameter for gd2 stands for chunk size */
-
- if (argc < 1 || argc > 4 || zend_get_parameters_ex(argc, &imgind, &file, &quality, &type) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- ZEND_FETCH_RESOURCE(im, gdImagePtr, imgind, -1, "Image", le_gd);
-
- if (argc > 1) {
- convert_to_string_ex(file);
- fn = Z_STRVAL_PP(file);
- if (argc == 3) {
- convert_to_long_ex(quality);
- q = Z_LVAL_PP(quality);
- }
- if (argc == 4) {
- convert_to_long_ex(type);
- t = Z_LVAL_PP(type);
- }
- }
-
- if ((argc == 2) || (argc > 2 && Z_STRLEN_PP(file))) {
- if (!fn || php_check_open_basedir(fn TSRMLS_CC)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid filename '%s'", fn);
- RETURN_FALSE;
- }
-
- fp = VCWD_FOPEN(fn, "wb");
- if (!fp) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to open '%s' for writing", fn);
- RETURN_FALSE;
- }
-
- switch (image_type) {
-#ifdef HAVE_GD_WBMP
- case PHP_GDIMG_CONVERT_WBM:
- if (q == -1) {
- q = 0;
- } else if (q < 0 || q > 255) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid threshold value '%d'. It must be between 0 and 255", q);
- q = 0;
- }
- gdImageWBMP(im, q, fp);
- break;
-#endif
- case PHP_GDIMG_TYPE_JPG:
- (*func_p)(im, fp, q);
- break;
- case PHP_GDIMG_TYPE_WBM:
- for (i = 0; i < gdImageColorsTotal(im); i++) {
- if (gdImageRed(im, i) == 0) break;
- }
- (*func_p)(im, i, fp);
- break;
-#if HAVE_LIBGD20
- case PHP_GDIMG_TYPE_GD:
- if (im->trueColor){
- gdImageTrueColorToPalette(im,1,256);
- }
- (*func_p)(im, fp);
- break;
-#endif
- default:
- if (q == -1) {
- q = 128;
- }
- (*func_p)(im, fp, q, t);
- break;
- }
- fflush(fp);
- fclose(fp);
- } else {
- int b;
- FILE *tmp;
- char buf[4096];
-
- tmp = php_open_temporary_file("", "", NULL TSRMLS_CC);
- if (tmp == NULL) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to open temporary file");
- RETURN_FALSE;
- }
-
- switch (image_type) {
-#ifdef HAVE_GD_WBMP
- case PHP_GDIMG_CONVERT_WBM:
- if (q == -1) {
- q = 0;
- } else if (q < 0 || q > 255) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid threshold value '%d'. It must be between 0 and 255", q);
- q = 0;
- }
- gdImageWBMP(im, q, tmp);
- break;
-#endif
- case PHP_GDIMG_TYPE_JPG:
- (*func_p)(im, tmp, q);
- break;
- case PHP_GDIMG_TYPE_WBM:
- for (i = 0; i < gdImageColorsTotal(im); i++) {
- if (gdImageRed(im, i) == 0) {
- break;
- }
- }
- (*func_p)(im, q, tmp);
- break;
-#if HAVE_LIBGD20
- case PHP_GDIMG_TYPE_GD:
- if (im->trueColor) {
- gdImageTrueColorToPalette(im,1,256);
- }
- (*func_p)(im, tmp);
- break;
-#endif
- default:
- (*func_p)(im, tmp);
- break;
- }
-
- fseek(tmp, 0, SEEK_SET);
-
-#if APACHE && defined(CHARSET_EBCDIC)
- /* XXX this is unlikely to work any more thies@thieso.net */
-
- /* This is a binary file already: avoid EBCDIC->ASCII conversion */
- ap_bsetflag(php3_rqst->connection->client, B_EBCDIC2ASCII, 0);
-#endif
- while ((b = fread(buf, 1, sizeof(buf), tmp)) > 0) {
- php_write(buf, b TSRMLS_CC);
- }
-
- fclose(tmp);
- /* the temporary file is automatically deleted */
- }
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto int imagexbm(int im, string filename [, int foreground])
- Output XBM image to browser or file */
-#if HAVE_GD_BUNDLED
-PHP_FUNCTION(imagexbm)
-{
- _php_image_output_ctx(INTERNAL_FUNCTION_PARAM_PASSTHRU, PHP_GDIMG_TYPE_XBM, "XBM", gdImageXbmCtx);
-}
-#endif
-/* }}} */
-
-#ifdef HAVE_GD_GIF_CREATE
-/* {{{ proto bool imagegif(resource im [, string filename])
- Output GIF image to browser or file */
-PHP_FUNCTION(imagegif)
-{
-#ifdef HAVE_GD_GIF_CTX
- _php_image_output_ctx(INTERNAL_FUNCTION_PARAM_PASSTHRU, PHP_GDIMG_TYPE_GIF, "GIF", gdImageGifCtx);
-#else
- _php_image_output(INTERNAL_FUNCTION_PARAM_PASSTHRU, PHP_GDIMG_TYPE_GIF, "GIF", gdImageGif);
-#endif
-}
-/* }}} */
-#endif /* HAVE_GD_GIF_CREATE */
-
-#ifdef HAVE_GD_PNG
-/* {{{ proto bool imagepng(resource im [, string filename])
- Output PNG image to browser or file */
-PHP_FUNCTION(imagepng)
-{
-#ifdef USE_GD_IOCTX
- _php_image_output_ctx(INTERNAL_FUNCTION_PARAM_PASSTHRU, PHP_GDIMG_TYPE_PNG, "PNG", gdImagePngCtx);
-#else
- _php_image_output(INTERNAL_FUNCTION_PARAM_PASSTHRU, PHP_GDIMG_TYPE_PNG, "PNG", gdImagePng);
-#endif
-}
-/* }}} */
-#endif /* HAVE_GD_PNG */
-
-#ifdef HAVE_GD_JPG
-/* {{{ proto bool imagejpeg(resource im [, string filename [, int quality]])
- Output JPEG image to browser or file */
-PHP_FUNCTION(imagejpeg)
-{
-#ifdef USE_GD_IOCTX
- _php_image_output_ctx(INTERNAL_FUNCTION_PARAM_PASSTHRU, PHP_GDIMG_TYPE_JPG, "JPEG", gdImageJpegCtx);
-#else
- _php_image_output(INTERNAL_FUNCTION_PARAM_PASSTHRU, PHP_GDIMG_TYPE_JPG, "JPEG", gdImageJpeg);
-#endif
-}
-/* }}} */
-#endif /* HAVE_GD_JPG */
-
-#ifdef HAVE_GD_WBMP
-/* {{{ proto bool imagewbmp(resource im [, string filename, [, int foreground]])
- Output WBMP image to browser or file */
-PHP_FUNCTION(imagewbmp)
-{
-#ifdef USE_GD_IOCTX
- _php_image_output_ctx(INTERNAL_FUNCTION_PARAM_PASSTHRU, PHP_GDIMG_TYPE_WBM, "WBMP", gdImageWBMPCtx);
-#else
- _php_image_output(INTERNAL_FUNCTION_PARAM_PASSTHRU, PHP_GDIMG_TYPE_WBM, "WBMP", gdImageWBMP);
-#endif
-}
-/* }}} */
-#endif /* HAVE_GD_WBMP */
-
-/* {{{ proto bool imagegd(resource im [, string filename])
- Output GD image to browser or file */
-PHP_FUNCTION(imagegd)
-{
- _php_image_output(INTERNAL_FUNCTION_PARAM_PASSTHRU, PHP_GDIMG_TYPE_GD, "GD", gdImageGd);
-}
-/* }}} */
-
-#ifdef HAVE_GD_GD2
-/* {{{ proto bool imagegd2(resource im [, string filename, [, int chunk_size, [, int type]]])
- Output GD2 image to browser or file */
-PHP_FUNCTION(imagegd2)
-{
- _php_image_output(INTERNAL_FUNCTION_PARAM_PASSTHRU, PHP_GDIMG_TYPE_GD2, "GD2", gdImageGd2);
-}
-/* }}} */
-#endif /* HAVE_GD_GD2 */
-
-/* {{{ proto bool imagedestroy(resource im)
- Destroy an image */
-PHP_FUNCTION(imagedestroy)
-{
- zval **IM;
- gdImagePtr im;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &IM) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- ZEND_FETCH_RESOURCE(im, gdImagePtr, IM, -1, "Image", le_gd);
-
- zend_list_delete(Z_LVAL_PP(IM));
-
- RETURN_TRUE;
-}
-/* }}} */
-
-
-/* {{{ proto int imagecolorallocate(resource im, int red, int green, int blue)
- Allocate a color for an image */
-PHP_FUNCTION(imagecolorallocate)
-{
- zval **IM, **red, **green, **blue;
- gdImagePtr im;
-
- if (ZEND_NUM_ARGS() != 4 || zend_get_parameters_ex(4, &IM, &red, &green, &blue) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- ZEND_FETCH_RESOURCE(im, gdImagePtr, IM, -1, "Image", le_gd);
-
- convert_to_long_ex(red);
- convert_to_long_ex(green);
- convert_to_long_ex(blue);
-
- RETURN_LONG(gdImageColorAllocate(im, Z_LVAL_PP(red), Z_LVAL_PP(green), Z_LVAL_PP(blue)));
-}
-/* }}} */
-
-#if HAVE_LIBGD15
-/* {{{ proto void imagepalettecopy(resource dst, resource src)
- Copy the palette from the src image onto the dst image */
-PHP_FUNCTION(imagepalettecopy)
-{
- zval **dstim, **srcim;
- gdImagePtr dst, src;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &dstim, &srcim) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- ZEND_FETCH_RESOURCE(dst, gdImagePtr, dstim, -1, "Image", le_gd);
- ZEND_FETCH_RESOURCE(src, gdImagePtr, srcim, -1, "Image", le_gd);
-
- gdImagePaletteCopy(dst, src);
-}
-/* }}} */
-#endif
-
-/* {{{ proto int imagecolorat(resource im, int x, int y)
- Get the index of the color of a pixel */
-PHP_FUNCTION(imagecolorat)
-{
- zval **IM, **x, **y;
- gdImagePtr im;
-
- if (ZEND_NUM_ARGS() != 3 || zend_get_parameters_ex(3, &IM, &x, &y) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- ZEND_FETCH_RESOURCE(im, gdImagePtr, IM, -1, "Image", le_gd);
-
- convert_to_long_ex(x);
- convert_to_long_ex(y);
-
-#if HAVE_LIBGD20
- if (gdImageTrueColor(im)) {
- if (im->tpixels && gdImageBoundsSafe(im, Z_LVAL_PP(x), Z_LVAL_PP(y))) {
- RETURN_LONG(gdImageTrueColorPixel(im, Z_LVAL_PP(x), Z_LVAL_PP(y)));
- } else {
- php_error_docref(NULL TSRMLS_CC, E_NOTICE, "%ld,%ld is out of bounds", Z_LVAL_PP(x), Z_LVAL_PP(y));
- RETURN_FALSE;
- }
- } else {
-#endif
- if (im->pixels && gdImageBoundsSafe(im, Z_LVAL_PP(x), Z_LVAL_PP(y))) {
-#if HAVE_LIBGD13
- RETURN_LONG(im->pixels[Z_LVAL_PP(y)][Z_LVAL_PP(x)]);
-#else
- RETURN_LONG(im->pixels[Z_LVAL_PP(x)][Z_LVAL_PP(y)]);
-#endif
- } else {
- php_error_docref(NULL TSRMLS_CC, E_NOTICE, "%ld,%ld is out of bounds", Z_LVAL_PP(x), Z_LVAL_PP(y));
- RETURN_FALSE;
- }
-#if HAVE_LIBGD20
- }
-#endif
-}
-/* }}} */
-
-/* {{{ proto int imagecolorclosest(resource im, int red, int green, int blue)
- Get the index of the closest color to the specified color */
-PHP_FUNCTION(imagecolorclosest)
-{
- zval **IM, **red, **green, **blue;
- gdImagePtr im;
-
- if (ZEND_NUM_ARGS() != 4 || zend_get_parameters_ex(4, &IM, &red, &green, &blue) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- ZEND_FETCH_RESOURCE(im, gdImagePtr, IM, -1, "Image", le_gd);
-
- convert_to_long_ex(red);
- convert_to_long_ex(green);
- convert_to_long_ex(blue);
-
- RETURN_LONG(gdImageColorClosest(im, Z_LVAL_PP(red), Z_LVAL_PP(green), Z_LVAL_PP(blue)));
-}
-/* }}} */
-
-#if HAVE_COLORCLOSESTHWB
-/* {{{ proto int imagecolorclosesthwb(resource im, int red, int green, int blue)
- Get the index of the color which has the hue, white and blackness nearest to the given color */
-PHP_FUNCTION(imagecolorclosesthwb)
-{
- zval **IM, **red, **green, **blue;
- gdImagePtr im;
-
- if (ZEND_NUM_ARGS() != 4 || zend_get_parameters_ex(4, &IM, &red, &green, &blue) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- ZEND_FETCH_RESOURCE(im, gdImagePtr, IM, -1, "Image", le_gd);
-
- convert_to_long_ex(red);
- convert_to_long_ex(green);
- convert_to_long_ex(blue);
-
- RETURN_LONG(gdImageColorClosestHWB(im, Z_LVAL_PP(red), Z_LVAL_PP(green), Z_LVAL_PP(blue)));
-}
-/* }}} */
-#endif
-
-/* {{{ proto bool imagecolordeallocate(resource im, int index)
- De-allocate a color for an image */
-PHP_FUNCTION(imagecolordeallocate)
-{
- zval **IM, **index;
- int col;
- gdImagePtr im;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &IM, &index) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- ZEND_FETCH_RESOURCE(im, gdImagePtr, IM, -1, "Image", le_gd);
-
-#if HAVE_LIBGD20
- /* We can return right away for a truecolor image as deallocating colours is meaningless here */
- if (gdImageTrueColor(im)) {
- RETURN_TRUE;
- }
-#endif
-
- convert_to_long_ex(index);
- col = Z_LVAL_PP(index);
-
- if (col >= 0 && col < gdImageColorsTotal(im)) {
- gdImageColorDeallocate(im, col);
- RETURN_TRUE;
- } else {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Color index %d out of range", col);
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-/* {{{ proto int imagecolorresolve(resource im, int red, int green, int blue)
- Get the index of the specified color or its closest possible alternative */
-PHP_FUNCTION(imagecolorresolve)
-{
- zval **IM, **red, **green, **blue;
- gdImagePtr im;
-
- if (ZEND_NUM_ARGS() != 4 || zend_get_parameters_ex(4, &IM, &red, &green, &blue) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- ZEND_FETCH_RESOURCE(im, gdImagePtr, IM, -1, "Image", le_gd);
-
- convert_to_long_ex(red);
- convert_to_long_ex(green);
- convert_to_long_ex(blue);
-
- RETURN_LONG(gdImageColorResolve(im, Z_LVAL_PP(red), Z_LVAL_PP(green), Z_LVAL_PP(blue)));
-}
-/* }}} */
-
-/* {{{ proto int imagecolorexact(resource im, int red, int green, int blue)
- Get the index of the specified color */
-PHP_FUNCTION(imagecolorexact)
-{
- zval **IM, **red, **green, **blue;
- gdImagePtr im;
-
- if (ZEND_NUM_ARGS() != 4 || zend_get_parameters_ex(4, &IM, &red, &green, &blue) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- ZEND_FETCH_RESOURCE(im, gdImagePtr, IM, -1, "Image", le_gd);
-
- convert_to_long_ex(red);
- convert_to_long_ex(green);
- convert_to_long_ex(blue);
-
- RETURN_LONG(gdImageColorExact(im, Z_LVAL_PP(red), Z_LVAL_PP(green), Z_LVAL_PP(blue)));
-}
-/* }}} */
-
-/* {{{ proto void imagecolorset(resource im, int col, int red, int green, int blue)
- Set the color for the specified palette index */
-PHP_FUNCTION(imagecolorset)
-{
- zval **IM, **color, **red, **green, **blue;
- int col;
- gdImagePtr im;
-
- if (ZEND_NUM_ARGS() != 5 || zend_get_parameters_ex(5, &IM, &color, &red, &green, &blue) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- ZEND_FETCH_RESOURCE(im, gdImagePtr, IM, -1, "Image", le_gd);
-
- convert_to_long_ex(color);
- convert_to_long_ex(red);
- convert_to_long_ex(green);
- convert_to_long_ex(blue);
-
- col = Z_LVAL_PP(color);
-
- if (col >= 0 && col < gdImageColorsTotal(im)) {
- im->red[col] = Z_LVAL_PP(red);
- im->green[col] = Z_LVAL_PP(green);
- im->blue[col] = Z_LVAL_PP(blue);
- } else {
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-/* {{{ proto array imagecolorsforindex(resource im, int col)
- Get the colors for an index */
-PHP_FUNCTION(imagecolorsforindex)
-{
- zval **IM, **index;
- int col;
- gdImagePtr im;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &IM, &index) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- ZEND_FETCH_RESOURCE(im, gdImagePtr, IM, -1, "Image", le_gd);
-
- convert_to_long_ex(index);
- col = Z_LVAL_PP(index);
-#if HAVE_LIBGD20
- if ((col >= 0 && gdImageTrueColor(im)) || (!gdImageTrueColor(im) && col >= 0 && col < gdImageColorsTotal(im))) {
- array_init(return_value);
-
- add_assoc_long(return_value,"red", gdImageRed(im,col));
- add_assoc_long(return_value,"green", gdImageGreen(im,col));
- add_assoc_long(return_value,"blue", gdImageBlue(im,col));
- add_assoc_long(return_value,"alpha", gdImageAlpha(im,col));
- }
-#else
- if (col >= 0 && col < gdImageColorsTotal(im)) {
- array_init(return_value);
-
- add_assoc_long(return_value,"red", im->red[col]);
- add_assoc_long(return_value,"green", im->green[col]);
- add_assoc_long(return_value,"blue", im->blue[col]);
- }
-#endif
- else {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Color index %d out of range", col);
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-/* {{{ proto bool imagegammacorrect(resource im, float inputgamma, float outputgamma)
- Apply a gamma correction to a GD image */
-PHP_FUNCTION(imagegammacorrect)
-{
- zval **IM, **inputgamma, **outputgamma;
- gdImagePtr im;
- int i;
- double input, output;
-
- if (ZEND_NUM_ARGS() != 3 || zend_get_parameters_ex(3, &IM, &inputgamma, &outputgamma) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- convert_to_double_ex(inputgamma);
- convert_to_double_ex(outputgamma);
-
- input = Z_DVAL_PP(inputgamma);
- output = Z_DVAL_PP(outputgamma);
-
- ZEND_FETCH_RESOURCE(im, gdImagePtr, IM, -1, "Image", le_gd);
-
-#if HAVE_LIBGD20
- if (gdImageTrueColor(im)) {
- int x, y, c;
-
- for (y = 0; y < gdImageSY(im); y++) {
- for (x = 0; x < gdImageSX(im); x++) {
- c = gdImageGetPixel(im, x, y);
- gdImageSetPixel(im, x, y,
- gdTrueColor(
- (int) ((pow((pow((gdTrueColorGetRed(c) / 255.0), input)), 1.0 / output) * 255) + .5),
- (int) ((pow((pow((gdTrueColorGetGreen(c) / 255.0), input)), 1.0 / output) * 255) + .5),
- (int) ((pow((pow((gdTrueColorGetBlue(c) / 255.0), input)), 1.0 / output) * 255) + .5)
- )
- );
- }
- }
- RETURN_TRUE;
- }
-#endif
- for (i = 0; i < gdImageColorsTotal(im); i++) {
- im->red[i] = (int)((pow((pow((im->red[i] / 255.0), input)), 1.0 / output) * 255) + .5);
- im->green[i] = (int)((pow((pow((im->green[i] / 255.0), input)), 1.0 / output) * 255) + .5);
- im->blue[i] = (int)((pow((pow((im->blue[i] / 255.0), input)), 1.0 / output) * 255) + .5);
- }
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto bool imagesetpixel(resource im, int x, int y, int col)
- Set a single pixel */
-PHP_FUNCTION(imagesetpixel)
-{
- zval **IM, **x, **y, **col;
- gdImagePtr im;
-
- if (ZEND_NUM_ARGS() != 4 || zend_get_parameters_ex(4, &IM, &x, &y, &col) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- ZEND_FETCH_RESOURCE(im, gdImagePtr, IM, -1, "Image", le_gd);
-
- convert_to_long_ex(x);
- convert_to_long_ex(y);
- convert_to_long_ex(col);
-
- gdImageSetPixel(im, Z_LVAL_PP(x), Z_LVAL_PP(y), Z_LVAL_PP(col));
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto bool imageline(resource im, int x1, int y1, int x2, int y2, int col)
- Draw a line */
-PHP_FUNCTION(imageline)
-{
- zval **IM, **x1, **y1, **x2, **y2, **col;
- gdImagePtr im;
-
- if (ZEND_NUM_ARGS() != 6 || zend_get_parameters_ex(6, &IM, &x1, &y1, &x2, &y2, &col) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- ZEND_FETCH_RESOURCE(im, gdImagePtr, IM, -1, "Image", le_gd);
-
- convert_to_long_ex(x1);
- convert_to_long_ex(y1);
- convert_to_long_ex(x2);
- convert_to_long_ex(y2);
- convert_to_long_ex(col);
-
-#ifdef HAVE_GD_BUNDLED
- if (im->antialias) {
- gdImageAALine(im, Z_LVAL_PP(x1), Z_LVAL_PP(y1), Z_LVAL_PP(x2), Z_LVAL_PP(y2), Z_LVAL_PP(col));
- } else
-#endif
- {
- gdImageLine(im, Z_LVAL_PP(x1), Z_LVAL_PP(y1), Z_LVAL_PP(x2), Z_LVAL_PP(y2), Z_LVAL_PP(col));
- }
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto bool imagedashedline(resource im, int x1, int y1, int x2, int y2, int col)
- Draw a dashed line */
-PHP_FUNCTION(imagedashedline)
-{
- zval **IM, **x1, **y1, **x2, **y2, **col;
- gdImagePtr im;
-
- if (ZEND_NUM_ARGS() != 6 || zend_get_parameters_ex(6, &IM, &x1, &y1, &x2, &y2, &col) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- ZEND_FETCH_RESOURCE(im, gdImagePtr, IM, -1, "Image", le_gd);
-
- convert_to_long_ex(x1);
- convert_to_long_ex(y1);
- convert_to_long_ex(x2);
- convert_to_long_ex(y2);
- convert_to_long_ex(col);
-
- gdImageDashedLine(im, Z_LVAL_PP(x1), Z_LVAL_PP(y1), Z_LVAL_PP(x2), Z_LVAL_PP(y2), Z_LVAL_PP(col));
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto bool imagerectangle(resource im, int x1, int y1, int x2, int y2, int col)
- Draw a rectangle */
-PHP_FUNCTION(imagerectangle)
-{
- zval **IM, **x1, **y1, **x2, **y2, **col;
- gdImagePtr im;
-
- if (ZEND_NUM_ARGS() != 6 || zend_get_parameters_ex(6, &IM, &x1, &y1, &x2, &y2, &col) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- ZEND_FETCH_RESOURCE(im, gdImagePtr, IM, -1, "Image", le_gd);
-
- convert_to_long_ex(x1);
- convert_to_long_ex(y1);
- convert_to_long_ex(x2);
- convert_to_long_ex(y2);
- convert_to_long_ex(col);
-
- gdImageRectangle(im, Z_LVAL_PP(x1), Z_LVAL_PP(y1), Z_LVAL_PP(x2), Z_LVAL_PP(y2), Z_LVAL_PP(col));
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto bool imagefilledrectangle(resource im, int x1, int y1, int x2, int y2, int col)
- Draw a filled rectangle */
-PHP_FUNCTION(imagefilledrectangle)
-{
- zval **IM, **x1, **y1, **x2, **y2, **col;
- gdImagePtr im;
-
- if (ZEND_NUM_ARGS() != 6 || zend_get_parameters_ex(6, &IM, &x1, &y1, &x2, &y2, &col) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- ZEND_FETCH_RESOURCE(im, gdImagePtr, IM, -1, "Image", le_gd);
-
- convert_to_long_ex(x1);
- convert_to_long_ex(y1);
- convert_to_long_ex(x2);
- convert_to_long_ex(y2);
- convert_to_long_ex(col);
-
- gdImageFilledRectangle(im, Z_LVAL_PP(x1), Z_LVAL_PP(y1), Z_LVAL_PP(x2), Z_LVAL_PP(y2), Z_LVAL_PP(col));
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto bool imagearc(resource im, int cx, int cy, int w, int h, int s, int e, int col)
- Draw a partial ellipse */
-PHP_FUNCTION(imagearc)
-{
- zval **IM, **cx, **cy, **w, **h, **ST, **E, **col;
- gdImagePtr im;
- int e, st;
-
- if (ZEND_NUM_ARGS() != 8 || zend_get_parameters_ex(8, &IM, &cx, &cy, &w, &h, &ST, &E, &col) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- ZEND_FETCH_RESOURCE(im, gdImagePtr, IM, -1, "Image", le_gd);
-
- convert_to_long_ex(cx);
- convert_to_long_ex(cy);
- convert_to_long_ex(w);
- convert_to_long_ex(h);
- convert_to_long_ex(ST);
- convert_to_long_ex(E);
- convert_to_long_ex(col);
-
- e = Z_LVAL_PP(E);
- if (e < 0) {
- e %= 360;
- }
-
- st = Z_LVAL_PP(ST);
- if (st < 0) {
- st %= 360;
- }
-
- gdImageArc(im, Z_LVAL_PP(cx), Z_LVAL_PP(cy), Z_LVAL_PP(w), Z_LVAL_PP(h), st, e, Z_LVAL_PP(col));
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto bool imageellipse(resource im, int cx, int cy, int w, int h, int color)
- Draw an ellipse */
-PHP_FUNCTION(imageellipse)
-{
- zval **IM, **cx, **cy, **w, **h, **color;
- gdImagePtr im;
-
- if (ZEND_NUM_ARGS() != 6 || zend_get_parameters_ex(6, &IM, &cx, &cy, &w, &h, &color) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- ZEND_FETCH_RESOURCE(im, gdImagePtr, IM, -1, "Image", le_gd);
-
- convert_to_long_ex(cx);
- convert_to_long_ex(cy);
- convert_to_long_ex(w);
- convert_to_long_ex(h);
- convert_to_long_ex(color);
-
-#ifdef HAVE_GD_IMAGEELLIPSE /* this function is missing from GD 2.0.1 */
- gdImageEllipse(im, Z_LVAL_PP(cx), Z_LVAL_PP(cy), Z_LVAL_PP(w), Z_LVAL_PP(h), Z_LVAL_PP(color));
-#else
- gdImageArc(im, Z_LVAL_PP(cx), Z_LVAL_PP(cy), Z_LVAL_PP(w), Z_LVAL_PP(h), 0, 360, Z_LVAL_PP(color));
-#endif
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto bool imagefilltoborder(resource im, int x, int y, int border, int col)
- Flood fill to specific color */
-PHP_FUNCTION(imagefilltoborder)
-{
- zval **IM, **x, **y, **border, **col;
- gdImagePtr im;
-
- if (ZEND_NUM_ARGS() != 5 || zend_get_parameters_ex(5, &IM, &x, &y, &border, &col) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- ZEND_FETCH_RESOURCE(im, gdImagePtr, IM, -1, "Image", le_gd);
-
- convert_to_long_ex(x);
- convert_to_long_ex(y);
- convert_to_long_ex(border);
- convert_to_long_ex(col);
-
- gdImageFillToBorder(im, Z_LVAL_PP(x), Z_LVAL_PP(y), Z_LVAL_PP(border), Z_LVAL_PP(col));
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto bool imagefill(resource im, int x, int y, int col)
- Flood fill */
-PHP_FUNCTION(imagefill)
-{
- zval **IM, **x, **y, **col;
- gdImagePtr im;
-
- if (ZEND_NUM_ARGS() != 4 || zend_get_parameters_ex(4, &IM, &x, &y, &col) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- ZEND_FETCH_RESOURCE(im, gdImagePtr, IM, -1, "Image", le_gd);
-
- convert_to_long_ex(x);
- convert_to_long_ex(y);
- convert_to_long_ex(col);
-
- gdImageFill(im, Z_LVAL_PP(x), Z_LVAL_PP(y), Z_LVAL_PP(col));
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto int imagecolorstotal(resource im)
- Find out the number of colors in an image's palette */
-PHP_FUNCTION(imagecolorstotal)
-{
- zval **IM;
- gdImagePtr im;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &IM) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- ZEND_FETCH_RESOURCE(im, gdImagePtr, IM, -1, "Image", le_gd);
-
- RETURN_LONG(gdImageColorsTotal(im));
-}
-/* }}} */
-
-/* {{{ proto int imagecolortransparent(resource im [, int col])
- Define a color as transparent */
-PHP_FUNCTION(imagecolortransparent)
-{
- zval **IM, **COL;
- gdImagePtr im;
-
- switch (ZEND_NUM_ARGS()) {
- case 1:
- if (zend_get_parameters_ex(1, &IM) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
- break;
- case 2:
- if (zend_get_parameters_ex(2, &IM, &COL) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
- convert_to_long_ex(COL);
- break;
- default:
- ZEND_WRONG_PARAM_COUNT();
- }
-
- ZEND_FETCH_RESOURCE(im, gdImagePtr, IM, -1, "Image", le_gd);
-
- if (ZEND_NUM_ARGS() > 1) {
- gdImageColorTransparent(im, Z_LVAL_PP(COL));
- }
-
- RETURN_LONG(gdImageGetTransparent(im));
-}
-/* }}} */
-
-/* {{{ proto int imageinterlace(resource im [, int interlace])
- Enable or disable interlace */
-PHP_FUNCTION(imageinterlace)
-{
- zval **IM, **INT;
- gdImagePtr im;
-
- switch (ZEND_NUM_ARGS()) {
- case 1:
- if (zend_get_parameters_ex(1, &IM) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
- break;
- case 2:
- if (zend_get_parameters_ex(2, &IM, &INT) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
- convert_to_long_ex(INT);
- break;
- default:
- ZEND_WRONG_PARAM_COUNT();
- }
-
- ZEND_FETCH_RESOURCE(im, gdImagePtr, IM, -1, "Image", le_gd);
-
- if (ZEND_NUM_ARGS() > 1) {
- gdImageInterlace(im, Z_LVAL_PP(INT));
- }
-
- RETURN_LONG(gdImageGetInterlaced(im));
-}
-/* }}} */
-
-/* {{{ php_imagepolygon
- arg = 0 normal polygon
- arg = 1 filled polygon */
-/* im, points, num_points, col */
-static void php_imagepolygon(INTERNAL_FUNCTION_PARAMETERS, int filled)
-{
- zval **IM, **POINTS, **NPOINTS, **COL;
- pval **var = NULL;
- gdImagePtr im;
- gdPointPtr points;
- int npoints, col, nelem, i;
-
- if (ZEND_NUM_ARGS() != 4 || zend_get_parameters_ex(4, &IM, &POINTS, &NPOINTS, &COL) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- ZEND_FETCH_RESOURCE(im, gdImagePtr, IM, -1, "Image", le_gd);
-
- convert_to_long_ex(NPOINTS);
- convert_to_long_ex(COL);
-
- npoints = Z_LVAL_PP(NPOINTS);
- col = Z_LVAL_PP(COL);
-
- if (Z_TYPE_PP(POINTS) != IS_ARRAY) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "2nd argument to imagepolygon not an array");
- RETURN_FALSE;
- }
-
- nelem = zend_hash_num_elements(Z_ARRVAL_PP(POINTS));
- if (nelem < 6) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "You must have at least 3 points in your array");
- RETURN_FALSE;
- }
-
- if (nelem < npoints * 2) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Trying to use %d points in array with only %d points", npoints, nelem/2);
- RETURN_FALSE;
- }
-
- points = (gdPointPtr) safe_emalloc(npoints, sizeof(gdPoint), 0);
-
- for (i = 0; i < npoints; i++) {
- if (zend_hash_index_find(Z_ARRVAL_PP(POINTS), (i * 2), (void **) &var) == SUCCESS) {
- SEPARATE_ZVAL((var));
- convert_to_long(*var);
- points[i].x = Z_LVAL_PP(var);
- }
- if (zend_hash_index_find(Z_ARRVAL_PP(POINTS), (i * 2) + 1, (void **) &var) == SUCCESS) {
- SEPARATE_ZVAL(var);
- convert_to_long(*var);
- points[i].y = Z_LVAL_PP(var);
- }
- }
-
- if (filled) {
- gdImageFilledPolygon(im, points, npoints, col);
- } else {
- gdImagePolygon(im, points, npoints, col);
- }
-
- efree(points);
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto bool imagepolygon(resource im, array point, int num_points, int col)
- Draw a polygon */
-PHP_FUNCTION(imagepolygon)
-{
- php_imagepolygon(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0);
-}
-/* }}} */
-
-/* {{{ proto bool imagefilledpolygon(resource im, array point, int num_points, int col)
- Draw a filled polygon */
-PHP_FUNCTION(imagefilledpolygon)
-{
- php_imagepolygon(INTERNAL_FUNCTION_PARAM_PASSTHRU, 1);
-}
-/* }}} */
-
-/* {{{ php_find_gd_font
- */
-static gdFontPtr php_find_gd_font(int size TSRMLS_DC)
-{
- gdFontPtr font;
- int ind_type;
-
- switch (size) {
- case 1:
- font = gdFontTiny;
- break;
- case 2:
- font = gdFontSmall;
- break;
- case 3:
- font = gdFontMediumBold;
- break;
- case 4:
- font = gdFontLarge;
- break;
- case 5:
- font = gdFontGiant;
- break;
- default:
- font = zend_list_find(size - 5, &ind_type);
- if (!font || ind_type != le_gd_font) {
- if (size < 1) {
- font = gdFontTiny;
- } else {
- font = gdFontGiant;
- }
- }
- break;
- }
-
- return font;
-}
-/* }}} */
-
-/* {{{ php_imagefontsize
- * arg = 0 ImageFontWidth
- * arg = 1 ImageFontHeight
- */
-static void php_imagefontsize(INTERNAL_FUNCTION_PARAMETERS, int arg)
-{
- zval **SIZE;
- gdFontPtr font;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &SIZE) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- convert_to_long_ex(SIZE);
-
- font = php_find_gd_font(Z_LVAL_PP(SIZE) TSRMLS_CC);
- RETURN_LONG(arg ? font->h : font->w);
-}
-/* }}} */
-
-/* {{{ proto int imagefontwidth(int font)
- Get font width */
-PHP_FUNCTION(imagefontwidth)
-{
- php_imagefontsize(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0);
-}
-/* }}} */
-
-/* {{{ proto int imagefontheight(int font)
- Get font height */
-PHP_FUNCTION(imagefontheight)
-{
- php_imagefontsize(INTERNAL_FUNCTION_PARAM_PASSTHRU, 1);
-}
-/* }}} */
-
-/* {{{ php_gdimagecharup
- * workaround for a bug in gd 1.2 */
-static void php_gdimagecharup(gdImagePtr im, gdFontPtr f, int x, int y, int c, int color)
-{
- int cx, cy, px, py, fline;
- cx = 0;
- cy = 0;
-
- if ((c < f->offset) || (c >= (f->offset + f->nchars))) {
- return;
- }
-
- fline = (c - f->offset) * f->h * f->w;
- for (py = y; (py > (y - f->w)); py--) {
- for (px = x; (px < (x + f->h)); px++) {
- if (f->data[fline + cy * f->w + cx]) {
- gdImageSetPixel(im, px, py, color);
- }
- cy++;
- }
- cy = 0;
- cx++;
- }
-}
-/* }}} */
-
-/* {{{ php_imagechar
- * arg = 0 ImageChar
- * arg = 1 ImageCharUp
- * arg = 2 ImageString
- * arg = 3 ImageStringUp
- */
-static void php_imagechar(INTERNAL_FUNCTION_PARAMETERS, int mode)
-{
- zval **IM, **SIZE, **X, **Y, **C, **COL;
- gdImagePtr im;
- int ch = 0, col, x, y, size, i, l = 0;
- unsigned char *str = NULL;
- gdFontPtr font;
-
- if (ZEND_NUM_ARGS() != 6 || zend_get_parameters_ex(6, &IM, &SIZE, &X, &Y, &C, &COL) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- ZEND_FETCH_RESOURCE(im, gdImagePtr, IM, -1, "Image", le_gd);
-
- convert_to_long_ex(SIZE);
- convert_to_long_ex(X);
- convert_to_long_ex(Y);
- convert_to_string_ex(C);
- convert_to_long_ex(COL);
-
- col = Z_LVAL_PP(COL);
-
- if (mode < 2) {
- ch = (int)((unsigned char)*(Z_STRVAL_PP(C)));
- } else {
- str = (unsigned char *) estrndup(Z_STRVAL_PP(C), Z_STRLEN_PP(C));
- l = strlen(str);
- }
-
- y = Z_LVAL_PP(Y);
- x = Z_LVAL_PP(X);
- size = Z_LVAL_PP(SIZE);
-
- font = php_find_gd_font(size TSRMLS_CC);
-
- switch (mode) {
- case 0:
- gdImageChar(im, font, x, y, ch, col);
- break;
- case 1:
- php_gdimagecharup(im, font, x, y, ch, col);
- break;
- case 2:
- for (i = 0; (i < l); i++) {
- gdImageChar(im, font, x, y, (int) ((unsigned char) str[i]), col);
- x += font->w;
- }
- break;
- case 3: {
- for (i = 0; (i < l); i++) {
- /* php_gdimagecharup(im, font, x, y, (int) str[i], col); */
- gdImageCharUp(im, font, x, y, (int) str[i], col);
- y -= font->w;
- }
- break;
- }
- }
- if (str) {
- efree(str);
- }
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto bool imagechar(resource im, int font, int x, int y, string c, int col)
- Draw a character */
-PHP_FUNCTION(imagechar)
-{
- php_imagechar(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0);
-}
-/* }}} */
-
-/* {{{ proto bool imagecharup(resource im, int font, int x, int y, string c, int col)
- Draw a character rotated 90 degrees counter-clockwise */
-PHP_FUNCTION(imagecharup)
-{
- php_imagechar(INTERNAL_FUNCTION_PARAM_PASSTHRU, 1);
-}
-/* }}} */
-
-/* {{{ proto bool imagestring(resource im, int font, int x, int y, string str, int col)
- Draw a string horizontally */
-PHP_FUNCTION(imagestring)
-{
- php_imagechar(INTERNAL_FUNCTION_PARAM_PASSTHRU, 2);
-}
-/* }}} */
-
-/* {{{ proto bool imagestringup(resource im, int font, int x, int y, string str, int col)
- Draw a string vertically - rotated 90 degrees counter-clockwise */
-PHP_FUNCTION(imagestringup)
-{
- php_imagechar(INTERNAL_FUNCTION_PARAM_PASSTHRU, 3);
-}
-/* }}} */
-
-/* {{{ proto bool imagecopy(resource dst_im, resource src_im, int dst_x, int dst_y, int src_x, int src_y, int src_w, int src_h)
- Copy part of an image */
-PHP_FUNCTION(imagecopy)
-{
- zval **SIM, **DIM, **SX, **SY, **SW, **SH, **DX, **DY;
- gdImagePtr im_dst, im_src;
- int srcH, srcW, srcY, srcX, dstY, dstX;
-
- if (ZEND_NUM_ARGS() != 8 || zend_get_parameters_ex(8, &DIM, &SIM, &DX, &DY, &SX, &SY, &SW, &SH) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- ZEND_FETCH_RESOURCE(im_src, gdImagePtr, SIM, -1, "Image", le_gd);
- ZEND_FETCH_RESOURCE(im_dst, gdImagePtr, DIM, -1, "Image", le_gd);
-
- convert_to_long_ex(SX);
- convert_to_long_ex(SY);
- convert_to_long_ex(SW);
- convert_to_long_ex(SH);
- convert_to_long_ex(DX);
- convert_to_long_ex(DY);
-
- srcX = Z_LVAL_PP(SX);
- srcY = Z_LVAL_PP(SY);
- srcH = Z_LVAL_PP(SH);
- srcW = Z_LVAL_PP(SW);
- dstX = Z_LVAL_PP(DX);
- dstY = Z_LVAL_PP(DY);
-
- gdImageCopy(im_dst, im_src, dstX, dstY, srcX, srcY, srcW, srcH);
- RETURN_TRUE;
-}
-/* }}} */
-
-#if HAVE_LIBGD15
-/* {{{ proto bool imagecopymerge(resource src_im, resource dst_im, int dst_x, int dst_y, int src_x, int src_y, int src_w, int src_h, int pct)
- Merge one part of an image with another */
-PHP_FUNCTION(imagecopymerge)
-{
- zval **SIM, **DIM, **SX, **SY, **SW, **SH, **DX, **DY, **PCT;
- gdImagePtr im_dst, im_src;
- int srcH, srcW, srcY, srcX, dstY, dstX, pct;
-
- if (ZEND_NUM_ARGS() != 9 || zend_get_parameters_ex(9, &DIM, &SIM, &DX, &DY, &SX, &SY, &SW, &SH, &PCT) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- ZEND_FETCH_RESOURCE(im_src, gdImagePtr, SIM, -1, "Image", le_gd);
- ZEND_FETCH_RESOURCE(im_dst, gdImagePtr, DIM, -1, "Image", le_gd);
-
- convert_to_long_ex(SX);
- convert_to_long_ex(SY);
- convert_to_long_ex(SW);
- convert_to_long_ex(SH);
- convert_to_long_ex(DX);
- convert_to_long_ex(DY);
- convert_to_long_ex(PCT);
-
- srcX = Z_LVAL_PP(SX);
- srcY = Z_LVAL_PP(SY);
- srcH = Z_LVAL_PP(SH);
- srcW = Z_LVAL_PP(SW);
- dstX = Z_LVAL_PP(DX);
- dstY = Z_LVAL_PP(DY);
- pct = Z_LVAL_PP(PCT);
-
- gdImageCopyMerge(im_dst, im_src, dstX, dstY, srcX, srcY, srcW, srcH, pct);
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto bool imagecopymergegray(resource src_im, resource dst_im, int dst_x, int dst_y, int src_x, int src_y, int src_w, int src_h, int pct)
- Merge one part of an image with another */
-PHP_FUNCTION(imagecopymergegray)
-{
- zval **SIM, **DIM, **SX, **SY, **SW, **SH, **DX, **DY, **PCT;
- gdImagePtr im_dst, im_src;
- int srcH, srcW, srcY, srcX, dstY, dstX, pct;
-
- if (ZEND_NUM_ARGS() != 9 || zend_get_parameters_ex(9, &DIM, &SIM, &DX, &DY, &SX, &SY, &SW, &SH, &PCT) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- ZEND_FETCH_RESOURCE(im_src, gdImagePtr, SIM, -1, "Image", le_gd);
- ZEND_FETCH_RESOURCE(im_dst, gdImagePtr, DIM, -1, "Image", le_gd);
-
- convert_to_long_ex(SX);
- convert_to_long_ex(SY);
- convert_to_long_ex(SW);
- convert_to_long_ex(SH);
- convert_to_long_ex(DX);
- convert_to_long_ex(DY);
- convert_to_long_ex(PCT);
-
- srcX = Z_LVAL_PP(SX);
- srcY = Z_LVAL_PP(SY);
- srcH = Z_LVAL_PP(SH);
- srcW = Z_LVAL_PP(SW);
- dstX = Z_LVAL_PP(DX);
- dstY = Z_LVAL_PP(DY);
- pct = Z_LVAL_PP(PCT);
-
- gdImageCopyMergeGray(im_dst, im_src, dstX, dstY, srcX, srcY, srcW, srcH, pct);
- RETURN_TRUE;
-}
-/* }}} */
-#endif
-
-/* {{{ proto bool imagecopyresized(resource dst_im, resource src_im, int dst_x, int dst_y, int src_x, int src_y, int dst_w, int dst_h, int src_w, int src_h)
- Copy and resize part of an image */
-PHP_FUNCTION(imagecopyresized)
-{
- zval **SIM, **DIM, **SX, **SY, **SW, **SH, **DX, **DY, **DW, **DH;
- gdImagePtr im_dst, im_src;
- int srcH, srcW, dstH, dstW, srcY, srcX, dstY, dstX;
-
- if (ZEND_NUM_ARGS() != 10 || zend_get_parameters_ex(10, &DIM, &SIM, &DX, &DY, &SX, &SY, &DW, &DH, &SW, &SH) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- ZEND_FETCH_RESOURCE(im_dst, gdImagePtr, DIM, -1, "Image", le_gd);
- ZEND_FETCH_RESOURCE(im_src, gdImagePtr, SIM, -1, "Image", le_gd);
-
- convert_to_long_ex(SX);
- convert_to_long_ex(SY);
- convert_to_long_ex(SW);
- convert_to_long_ex(SH);
- convert_to_long_ex(DX);
- convert_to_long_ex(DY);
- convert_to_long_ex(DW);
- convert_to_long_ex(DH);
-
- srcX = Z_LVAL_PP(SX);
- srcY = Z_LVAL_PP(SY);
- srcH = Z_LVAL_PP(SH);
- srcW = Z_LVAL_PP(SW);
- dstX = Z_LVAL_PP(DX);
- dstY = Z_LVAL_PP(DY);
- dstH = Z_LVAL_PP(DH);
- dstW = Z_LVAL_PP(DW);
-
- if (dstW <= 0 || dstH <= 0 || srcW <= 0 || srcH <= 0) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid image dimensions");
- RETURN_FALSE;
- }
-
- gdImageCopyResized(im_dst, im_src, dstX, dstY, srcX, srcY, dstW, dstH, srcW, srcH);
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto int imagesx(resource im)
- Get image width */
-PHP_FUNCTION(imagesx)
-{
- zval **IM;
- gdImagePtr im;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &IM) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- ZEND_FETCH_RESOURCE(im, gdImagePtr, IM, -1, "Image", le_gd);
-
- RETURN_LONG(gdImageSX(im));
-}
-/* }}} */
-
-/* {{{ proto int imagesy(resource im)
- Get image height */
-PHP_FUNCTION(imagesy)
-{
- zval **IM;
- gdImagePtr im;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &IM) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- ZEND_FETCH_RESOURCE(im, gdImagePtr, IM, -1, "Image", le_gd);
-
- RETURN_LONG(gdImageSY(im));
-}
-/* }}} */
-
-#ifdef ENABLE_GD_TTF
-#define TTFTEXT_DRAW 0
-#define TTFTEXT_BBOX 1
-#endif
-
-#ifdef ENABLE_GD_TTF
-
-#if HAVE_LIBGD20 && HAVE_LIBFREETYPE && HAVE_GD_STRINGFTEX
-/* {{{ proto array imageftbbox(int size, int angle, string font_file, string text[, array extrainfo])
- Give the bounding box of a text using fonts via freetype2 */
-PHP_FUNCTION(imageftbbox)
-{
- php_imagettftext_common(INTERNAL_FUNCTION_PARAM_PASSTHRU, TTFTEXT_BBOX, 1);
-}
-/* }}} */
-
-/* {{{ proto array imagefttext(resource im, int size, int angle, int x, int y, int col, string font_file, string text, [array extrainfo])
- Write text to the image using fonts via freetype2 */
-PHP_FUNCTION(imagefttext)
-{
- php_imagettftext_common(INTERNAL_FUNCTION_PARAM_PASSTHRU, TTFTEXT_DRAW, 1);
-}
-/* }}} */
-#endif
-
-/* {{{ proto array imagettfbbox(int size, int angle, string font_file, string text)
- Give the bounding box of a text using TrueType fonts */
-PHP_FUNCTION(imagettfbbox)
-{
- php_imagettftext_common(INTERNAL_FUNCTION_PARAM_PASSTHRU, TTFTEXT_BBOX, 0);
-}
-/* }}} */
-
-/* {{{ proto array imagettftext(resource im, int size, int angle, int x, int y, int col, string font_file, string text)
- Write text to the image using a TrueType font */
-PHP_FUNCTION(imagettftext)
-{
- php_imagettftext_common(INTERNAL_FUNCTION_PARAM_PASSTHRU, TTFTEXT_DRAW, 0);
-}
-/* }}} */
-
-/* {{{ php_imagettftext_common
- */
-static void php_imagettftext_common(INTERNAL_FUNCTION_PARAMETERS, int mode, int extended)
-{
- zval **IM, **PTSIZE, **ANGLE, **X, **Y, **C, **FONTNAME, **COL, **EXT = NULL;
- gdImagePtr im=NULL;
- int col, x, y, l=0, i, brect[8];
- double ptsize, angle;
- unsigned char *str = NULL, *fontname = NULL;
- char *error = NULL;
- int argc;
-#if HAVE_GD_STRINGFTEX
- gdFTStringExtra strex = {0};
-#endif
-
-#if !HAVE_GD_STRINGFTEX
- assert(!extended);
-#endif
-
- argc = ZEND_NUM_ARGS();
-
- if (mode == TTFTEXT_BBOX) {
- if (argc < 4 || argc > 5 || zend_get_parameters_ex(argc, &PTSIZE, &ANGLE, &FONTNAME, &C, &EXT) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
- } else {
- if (argc < 8 || argc > 9 || zend_get_parameters_ex(argc, &IM, &PTSIZE, &ANGLE, &X, &Y, &COL, &FONTNAME, &C, &EXT) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
- ZEND_FETCH_RESOURCE(im, gdImagePtr, IM, -1, "Image", le_gd);
- }
-
- convert_to_double_ex(PTSIZE);
- convert_to_double_ex(ANGLE);
- convert_to_string_ex(FONTNAME);
- convert_to_string_ex(C);
-
- if (mode == TTFTEXT_BBOX) {
- im = NULL;
- col = x = y = -1;
- } else {
- convert_to_long_ex(X);
- convert_to_long_ex(Y);
- convert_to_long_ex(COL);
- col = Z_LVAL_PP(COL);
- y = Z_LVAL_PP(Y);
- x = Z_LVAL_PP(X);
-
-#if HAVE_GD_STRINGFTEX
- if (EXT) {
- /* parse extended info */
-
- HashPosition pos;
-
- convert_to_array_ex(EXT);
-
- /* walk the assoc array */
- zend_hash_internal_pointer_reset_ex(HASH_OF(*EXT), &pos);
- do {
- zval ** item;
- char * key;
- ulong num_key;
-
- if (zend_hash_get_current_key_ex(HASH_OF(*EXT), &key, NULL, &num_key, 0, &pos) != HASH_KEY_IS_STRING) {
- continue;
- }
-
- if (zend_hash_get_current_data_ex(HASH_OF(*EXT), (void **) &item, &pos) == FAILURE) {
- continue;
- }
-
- if (strcmp("linespacing", key) == 0) {
- convert_to_double_ex(item);
- strex.flags |= gdFTEX_LINESPACE;
- strex.linespacing = Z_DVAL_PP(item);
- }
-
- } while (zend_hash_move_forward_ex(HASH_OF(*EXT), &pos) == SUCCESS);
- }
-#endif
-
- }
-
- ptsize = Z_DVAL_PP(PTSIZE);
- angle = Z_DVAL_PP(ANGLE) * (M_PI / 180); /* convert to radians */
-
- str = (unsigned char *) Z_STRVAL_PP(C);
- l = strlen(str);
-
-#ifdef VIRTUAL_DIR
- {
- char tmp_font_path[MAXPATHLEN];
- if (VCWD_REALPATH(Z_STRVAL_PP(FONTNAME), tmp_font_path)) {
- fontname = (unsigned char *) Z_STRVAL_PP(FONTNAME);
- }
- }
-#else
- fontname = (unsigned char *) Z_STRVAL_PP(FONTNAME);
-#endif
-
-#ifdef USE_GD_IMGSTRTTF
-# if HAVE_GD_STRINGFTEX
- if (extended) {
- error = gdImageStringFTEx(im, brect, col, fontname, ptsize, angle, x, y, str, &strex);
- }
- else
-# endif
-
-# if HAVE_GD_STRINGFT
- error = gdImageStringFT(im, brect, col, fontname, ptsize, angle, x, y, str);
-# elif HAVE_GD_STRINGTTF
- error = gdImageStringTTF(im, brect, col, fontname, ptsize, angle, x, y, str);
-# endif
-
-#else /* !USE_GD_IMGSTRTTF */
- error = gdttf(im, brect, col, fontname, ptsize, angle, x, y, str);
-#endif
-
- if (error) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", error);
- RETURN_FALSE;
- }
-
- array_init(return_value);
-
- /* return array with the text's bounding box */
- for (i = 0; i < 8; i++) {
- add_next_index_long(return_value, brect[i]);
- }
-}
-/* }}} */
-#endif /* ENABLE_GD_TTF */
-
-#if HAVE_LIBT1
-
-/* {{{ php_free_ps_font
- */
-static void php_free_ps_font(zend_rsrc_list_entry *rsrc TSRMLS_DC)
-{
- int *font = (int *) rsrc->ptr;
-
- T1_DeleteFont(*font);
- efree(font);
-}
-/* }}} */
-
-/* {{{ php_free_ps_enc
- */
-static void php_free_ps_enc(zend_rsrc_list_entry *rsrc TSRMLS_DC)
-{
- char **enc = (char **) rsrc->ptr;
-
- T1_DeleteEncoding(enc);
-}
-/* }}} */
-
-/* {{{ proto resource imagepsloadfont(string pathname)
- Load a new font from specified file */
-PHP_FUNCTION(imagepsloadfont)
-{
- zval **file;
- int f_ind, *font;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &file) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- convert_to_string_ex(file);
-
- f_ind = T1_AddFont(Z_STRVAL_PP(file));
-
- if (f_ind < 0) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "T1Lib Error: %s", T1_StrError(f_ind));
- }
-
- if (T1_LoadFont(f_ind)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Couldn't load the font");
- RETURN_FALSE;
- }
-
- font = (int *) emalloc(sizeof(int));
- *font = f_ind;
- ZEND_REGISTER_RESOURCE(return_value, font, le_ps_font);
-}
-/* }}} */
-
-/* {{{ proto int imagepscopyfont(int font_index)
- Make a copy of a font for purposes like extending or reenconding */
-/* The function in t1lib which this function uses seem to be buggy...
-PHP_FUNCTION(imagepscopyfont)
-{
- zval **fnt;
- int l_ind, type;
- gd_ps_font *nf_ind, *of_ind;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &fnt) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- convert_to_long_ex(fnt);
-
- of_ind = zend_list_find(Z_LVAL_PP(fnt), &type);
-
- if (type != le_ps_font) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "%ld is not a Type 1 font index", Z_LVAL_PP(fnt));
- RETURN_FALSE;
- }
-
- nf_ind = emalloc(sizeof(gd_ps_font));
- nf_ind->font_id = T1_CopyFont(of_ind->font_id);
-
- if (nf_ind->font_id < 0) {
- l_ind = nf_ind->font_id;
- efree(nf_ind);
- switch (l_ind) {
- case -1:
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "FontID %d is not loaded in memory", l_ind);
- RETURN_FALSE;
- break;
- case -2:
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Tried to copy a logical font");
- RETURN_FALSE;
- break;
- case -3:
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Memory allocation fault in t1lib");
- RETURN_FALSE;
- break;
- default:
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "An unknown error occurred in t1lib");
- RETURN_FALSE;
- break;
- }
- }
-
- nf_ind->extend = 1;
- l_ind = zend_list_insert(nf_ind, le_ps_font);
- RETURN_LONG(l_ind);
-}
-*/
-/* }}} */
-
-/* {{{ proto bool imagepsfreefont(resource font_index)
- Free memory used by a font */
-PHP_FUNCTION(imagepsfreefont)
-{
- zval **fnt;
- int *f_ind;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &fnt) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- ZEND_FETCH_RESOURCE(f_ind, int *, fnt, -1, "Type 1 font", le_ps_font);
-
- zend_list_delete(Z_LVAL_PP(fnt));
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto bool imagepsencodefont(resource font_index, string filename)
- To change a fonts character encoding vector */
-PHP_FUNCTION(imagepsencodefont)
-{
- zval **fnt, **enc;
- char **enc_vector;
- int *f_ind;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &fnt, &enc) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- convert_to_string_ex(enc);
-
- ZEND_FETCH_RESOURCE(f_ind, int *, fnt, -1, "Type 1 font", le_ps_font);
-
- if ((enc_vector = T1_LoadEncoding(Z_STRVAL_PP(enc))) == NULL) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Couldn't load encoding vector from %s", Z_STRVAL_PP(enc));
- RETURN_FALSE;
- }
-
- T1_DeleteAllSizes(*f_ind);
- if (T1_ReencodeFont(*f_ind, enc_vector)) {
- T1_DeleteEncoding(enc_vector);
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Couldn't reencode font");
- RETURN_FALSE;
- }
-
- zend_list_insert(enc_vector, le_ps_enc);
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto bool imagepsextendfont(resource font_index, float extend)
- Extend or or condense (if extend < 1) a font */
-PHP_FUNCTION(imagepsextendfont)
-{
- zval **fnt, **ext;
- int *f_ind;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &fnt, &ext) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- convert_to_double_ex(ext);
-
- ZEND_FETCH_RESOURCE(f_ind, int *, fnt, -1, "Type 1 font", le_ps_font);
-
- T1_DeleteAllSizes(*f_ind);
-
- if (Z_DVAL_PP(ext) <= 0) {
- php_error_docref(NULL TSRMLS_CC, E_ERROR, "Second parameter %f out of range (must be > 0)", Z_DVAL_PP(ext));
- RETURN_FALSE;
- }
-
- if (T1_ExtendFont(*f_ind, Z_DVAL_PP(ext)) != 0) {
- RETURN_FALSE;
- }
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto bool imagepsslantfont(resource font_index, float slant)
- Slant a font */
-PHP_FUNCTION(imagepsslantfont)
-{
- zval **fnt, **slt;
- int *f_ind;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &fnt, &slt) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- convert_to_double_ex(slt);
-
- ZEND_FETCH_RESOURCE(f_ind, int *, fnt, -1, "Type 1 font", le_ps_font);
-
- if (T1_SlantFont(*f_ind, Z_DVAL_PP(slt)) != 0) {
- RETURN_FALSE;
- }
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto array imagepstext(resource image, string text, resource font, int size, int xcoord, int ycoord [, int space, int tightness, float angle, int antialias])
- Rasterize a string over an image */
-PHP_FUNCTION(imagepstext)
-{
- zval *img, *fnt;
- int i, j;
- long _fg, _bg, x, y, size, space = 0, aa_steps = 4, width = 0;
- int *f_ind;
- int h_lines, v_lines, c_ind;
- int rd, gr, bl, fg_rd, fg_gr, fg_bl, bg_rd, bg_gr, bg_bl;
-#if HAVE_LIBGD20
- int fg_al, bg_al, al;
-#endif
- int aa[16];
- int amount_kern, add_width;
- double angle = 0.0, extend;
- unsigned long aa_greys[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
- gdImagePtr bg_img;
- GLYPH *str_img;
- T1_OUTLINE *char_path, *str_path;
- T1_TMATRIX *transform = NULL;
- char *str;
- int str_len;
- int argc = ZEND_NUM_ARGS();
-
- if (argc != 8 && argc != 12) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rsrlllll|lldl", &img, &str, &str_len, &fnt, &size, &_fg, &_bg, &x, &y, &space, &width, &angle, &aa_steps) == FAILURE) {
- return;
- }
-
- ZEND_FETCH_RESOURCE(bg_img, gdImagePtr, &img, -1, "Image", le_gd);
- ZEND_FETCH_RESOURCE(f_ind, int *, &fnt, -1, "Type 1 font", le_ps_font);
-
- /* Ensure that the provided colors are valid */
-#if HAVE_LIBGD20
- if (_fg < 0 || (!gdImageTrueColor(bg_img) && _fg > gdImageColorsTotal(bg_img))) {
-#else
- if (_fg < 0 || _fg > gdImageColorsTotal(bg_img)) {
-#endif
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Foreground color index %d out of range", _fg);
- RETURN_FALSE;
- }
-
-#if HAVE_LIBGD20
- if (_bg < 0 || (!gdImageTrueColor(bg_img) && _fg > gdImageColorsTotal(bg_img))) {
-#else
- if (_bg < 0 || _bg > gdImageColorsTotal(bg_img)) {
-#endif
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Background color index %d out of range", _bg);
- RETURN_FALSE;
- }
-
- fg_rd = gdImageRed (bg_img, _fg);
- fg_gr = gdImageGreen(bg_img, _fg);
- fg_bl = gdImageBlue (bg_img, _fg);
-#if HAVE_LIBGD20
- fg_al = gdImageAlpha(bg_img, _fg);
-#endif
-
- bg_rd = gdImageRed (bg_img, _bg);
- bg_gr = gdImageGreen(bg_img, _bg);
- bg_bl = gdImageBlue (bg_img, _bg);
-#if HAVE_LIBGD20
- bg_al = gdImageAlpha(bg_img, _bg);
-#endif
-
- for (i = 0; i < aa_steps; i++) {
- rd = bg_rd + (double) (fg_rd - bg_rd) / aa_steps * (i + 1);
- gr = bg_gr + (double) (fg_gr - bg_gr) / aa_steps * (i + 1);
- bl = bg_bl + (double) (fg_bl - bg_bl) / aa_steps * (i + 1);
-#if HAVE_LIBGD20
- al = bg_al + (double) (fg_al - bg_al) / aa_steps * (i + 1);
- aa[i] = gdImageColorResolveAlpha(bg_img, rd, gr, bl, al);
-#else
- aa[i] = gdImageColorResolve(bg_img, rd, gr, bl);
-#endif
- }
-
- T1_AASetBitsPerPixel(8);
-
- switch (aa_steps) {
- case 4:
- T1_AASetGrayValues(0, 1, 2, 3, 4);
- T1_AASetLevel(T1_AA_LOW);
- break;
- case 16:
- T1_AAHSetGrayValues(aa_greys);
- T1_AASetLevel(T1_AA_HIGH);
- break;
- default:
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid value %d as number of steps for antialiasing", aa_steps);
- RETURN_FALSE;
- }
-
- if (angle) {
- transform = T1_RotateMatrix(NULL, angle);
- }
-
- if (width) {
- extend = T1_GetExtend(*f_ind);
- str_path = T1_GetCharOutline(*f_ind, str[0], size, transform);
-
- if (!str_path) {
- if (T1_errno) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "T1Lib Error: %s", T1_StrError(T1_errno));
- }
- RETURN_FALSE;
- }
-
- for (i = 1; i < str_len; i++) {
- amount_kern = (int) T1_GetKerning(*f_ind, str[i - 1], str[i]);
- amount_kern += str[i - 1] == ' ' ? space : 0;
- add_width = (int) (amount_kern + width) / extend;
-
- char_path = T1_GetMoveOutline(*f_ind, add_width, 0, 0, size, transform);
- str_path = T1_ConcatOutlines(str_path, char_path);
-
- char_path = T1_GetCharOutline(*f_ind, str[i], size, transform);
- str_path = T1_ConcatOutlines(str_path, char_path);
- }
- str_img = T1_AAFillOutline(str_path, 0);
- } else {
- str_img = T1_AASetString(*f_ind, str, str_len, space, T1_KERNING, size, transform);
- }
- if (T1_errno) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "T1Lib Error: %s", T1_StrError(T1_errno));
- RETURN_FALSE;
- }
-
- h_lines = str_img->metrics.ascent - str_img->metrics.descent;
- v_lines = str_img->metrics.rightSideBearing - str_img->metrics.leftSideBearing;
-
- for (i = 0; i < v_lines; i++) {
- for (j = 0; j < h_lines; j++) {
- switch (str_img->bits[j * v_lines + i]) {
- case 0:
- break;
- default:
- c_ind = aa[str_img->bits[j * v_lines + i] - 1];
- gdImageSetPixel(bg_img, x + str_img->metrics.leftSideBearing + i, y - str_img->metrics.ascent + j, c_ind);
- break;
- }
- }
- }
-
- array_init(return_value);
-
- add_next_index_long(return_value, str_img->metrics.leftSideBearing);
- add_next_index_long(return_value, str_img->metrics.descent);
- add_next_index_long(return_value, str_img->metrics.rightSideBearing);
- add_next_index_long(return_value, str_img->metrics.ascent);
-}
-/* }}} */
-
-/* {{{ proto array imagepsbbox(string text, resource font, int size [, int space, int tightness, int angle])
- Return the bounding box needed by a string if rasterized */
-PHP_FUNCTION(imagepsbbox)
-{
- zval **str, **fnt, **sz, **sp, **wd, **ang;
- int i, space, add_width = 0, char_width, amount_kern;
- int cur_x, cur_y, dx, dy;
- int x1, y1, x2, y2, x3, y3, x4, y4;
- int *f_ind;
- int per_char = 0;
- double angle, sin_a = 0, cos_a = 0;
- BBox char_bbox, str_bbox = {0, 0, 0, 0};
-
- switch (ZEND_NUM_ARGS()) {
- case 3:
- if (zend_get_parameters_ex(3, &str, &fnt, &sz) == FAILURE) {
- RETURN_FALSE;
- }
- space = 0;
- break;
- case 6:
- if (zend_get_parameters_ex(6, &str, &fnt, &sz, &sp, &wd, &ang) == FAILURE) {
- RETURN_FALSE;
- }
- convert_to_long_ex(sp);
- convert_to_long_ex(wd);
- convert_to_double_ex(ang);
- space = Z_LVAL_PP(sp);
- add_width = Z_LVAL_PP(wd);
- angle = Z_DVAL_PP(ang) * M_PI / 180;
- sin_a = sin(angle);
- cos_a = cos(angle);
- per_char = add_width || angle ? 1 : 0;
- break;
- default:
- ZEND_WRONG_PARAM_COUNT();
- }
-
- ZEND_FETCH_RESOURCE(f_ind, int *, fnt, -1, "Type 1 font", le_ps_font);
-
- convert_to_string_ex(str);
- convert_to_long_ex(sz);
-
-#define max(a, b) (a > b ? a : b)
-#define min(a, b) (a < b ? a : b)
-#define new_x(a, b) (int) ((a) * cos_a - (b) * sin_a)
-#define new_y(a, b) (int) ((a) * sin_a + (b) * cos_a)
-
- if (per_char) {
- space += T1_GetCharWidth(*f_ind, ' ');
- cur_x = cur_y = 0;
-
- for (i = 0; i < Z_STRLEN_PP(str); i++) {
- if (Z_STRVAL_PP(str)[i] == ' ') {
- char_bbox.llx = char_bbox.lly = char_bbox.ury = 0;
- char_bbox.urx = char_width = space;
- } else {
- char_bbox = T1_GetCharBBox(*f_ind, Z_STRVAL_PP(str)[i]);
- char_width = T1_GetCharWidth(*f_ind, Z_STRVAL_PP(str)[i]);
- }
- amount_kern = i ? T1_GetKerning(*f_ind, Z_STRVAL_PP(str)[i - 1], Z_STRVAL_PP(str)[i]) : 0;
-
- /* Transfer character bounding box to right place */
- x1 = new_x(char_bbox.llx, char_bbox.lly) + cur_x;
- y1 = new_y(char_bbox.llx, char_bbox.lly) + cur_y;
- x2 = new_x(char_bbox.llx, char_bbox.ury) + cur_x;
- y2 = new_y(char_bbox.llx, char_bbox.ury) + cur_y;
- x3 = new_x(char_bbox.urx, char_bbox.ury) + cur_x;
- y3 = new_y(char_bbox.urx, char_bbox.ury) + cur_y;
- x4 = new_x(char_bbox.urx, char_bbox.lly) + cur_x;
- y4 = new_y(char_bbox.urx, char_bbox.lly) + cur_y;
-
- /* Find min & max values and compare them with current bounding box */
- str_bbox.llx = min(str_bbox.llx, min(x1, min(x2, min(x3, x4))));
- str_bbox.lly = min(str_bbox.lly, min(y1, min(y2, min(y3, y4))));
- str_bbox.urx = max(str_bbox.urx, max(x1, max(x2, max(x3, x4))));
- str_bbox.ury = max(str_bbox.ury, max(y1, max(y2, max(y3, y4))));
-
- /* Move to the next base point */
- dx = new_x(char_width + add_width + amount_kern, 0);
- dy = new_y(char_width + add_width + amount_kern, 0);
- cur_x += dx;
- cur_y += dy;
- /*
- printf("%d\t%d\t%d\t%d\t%d\t%d\t%d\t%d\t%d\t%d\t%d\t%d\t%d\t%d\t%d\t%d\t%d\t%d\n", x1, y1, x2, y2, x3, y3, x4, y4, char_bbox.llx, char_bbox.lly, char_bbox.urx, char_bbox.ury, char_width, amount_kern, cur_x, cur_y, dx, dy);
- */
- }
-
- } else {
- str_bbox = T1_GetStringBBox(*f_ind, Z_STRVAL_PP(str), Z_STRLEN_PP(str), space, T1_KERNING);
- }
-
- if (T1_errno) {
- RETURN_FALSE;
- }
-
- array_init(return_value);
- /*
- printf("%d %d %d %d\n", str_bbox.llx, str_bbox.lly, str_bbox.urx, str_bbox.ury);
- */
- add_next_index_long(return_value, (int) ceil(((double) str_bbox.llx)*Z_LVAL_PP(sz)/1000));
- add_next_index_long(return_value, (int) ceil(((double) str_bbox.lly)*Z_LVAL_PP(sz)/1000));
- add_next_index_long(return_value, (int) ceil(((double) str_bbox.urx)*Z_LVAL_PP(sz)/1000));
- add_next_index_long(return_value, (int) ceil(((double) str_bbox.ury)*Z_LVAL_PP(sz)/1000));
-}
-/* }}} */
-#endif
-
-#ifdef HAVE_GD_WBMP
-/* {{{ proto bool image2wbmp(resource im [, string filename [, int threshold]])
- Output WBMP image to browser or file */
-PHP_FUNCTION(image2wbmp)
-{
- _php_image_output(INTERNAL_FUNCTION_PARAM_PASSTHRU, PHP_GDIMG_CONVERT_WBM, "WBMP", _php_image_bw_convert);
-}
-/* }}} */
-#endif /* HAVE_GD_WBMP */
-
-#if defined(HAVE_GD_JPG) && defined(HAVE_GD_WBMP)
-/* {{{ proto bool jpeg2wbmp (string f_org, string f_dest, int d_height, int d_width, int threshold)
- Convert JPEG image to WBMP image */
-PHP_FUNCTION(jpeg2wbmp)
-{
- _php_image_convert(INTERNAL_FUNCTION_PARAM_PASSTHRU, PHP_GDIMG_TYPE_JPG);
-}
-/* }}} */
-#endif
-
-#if defined(HAVE_GD_PNG) && defined(HAVE_GD_WBMP)
-/* {{{ proto bool png2wbmp (string f_org, string f_dest, int d_height, int d_width, int threshold)
- Convert PNG image to WBMP image */
-PHP_FUNCTION(png2wbmp)
-{
- _php_image_convert(INTERNAL_FUNCTION_PARAM_PASSTHRU, PHP_GDIMG_TYPE_PNG);
-}
-/* }}} */
-#endif
-
-#ifdef HAVE_GD_WBMP
-/* {{{ _php_image_bw_convert
- * It converts a gd Image to bw using a threshold value */
-static void _php_image_bw_convert(gdImagePtr im_org, gdIOCtx *out, int threshold)
-{
- gdImagePtr im_dest;
- int white, black;
- int color, color_org, median;
- int dest_height = gdImageSY(im_org);
- int dest_width = gdImageSX(im_org);
- int x, y;
- TSRMLS_FETCH();
-
- im_dest = gdImageCreate(dest_width, dest_height);
- if (im_dest == NULL) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to allocate temporary buffer");
- return;
- }
-
- white = gdImageColorAllocate(im_dest, 255, 255, 255);
- if (white == -1) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to allocate the colors for the destination buffer");
- return;
- }
-
- black = gdImageColorAllocate(im_dest, 0, 0, 0);
- if (black == -1) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to allocate the colors for the destination buffer");
- return;
- }
-
-#if HAVE_LIBGD20
- if (im_org->trueColor) {
- gdImageTrueColorToPalette(im_org, 1, 256);
- }
-#endif
-
- for (y = 0; y < dest_height; y++) {
- for (x = 0; x < dest_width; x++) {
- color_org = gdImageGetPixel(im_org, x, y);
- median = (im_org->red[color_org] + im_org->green[color_org] + im_org->blue[color_org]) / 3;
- if (median < threshold) {
- color = black;
- } else {
- color = white;
- }
- gdImageSetPixel (im_dest, x, y, color);
- }
- }
-#ifdef USE_GD_IOCTX
- gdImageWBMPCtx (im_dest, black, out);
-#else
- gdImageWBMP (im_dest, black, out);
-#endif
-
-}
-/* }}} */
-
-/* {{{ _php_image_convert
- * _php_image_convert converts jpeg/png images to wbmp and resizes them as needed */
-static void _php_image_convert(INTERNAL_FUNCTION_PARAMETERS, int image_type )
-{
- zval **f_org, **f_dest, **height, **width, **threshold;
- gdImagePtr im_org, im_dest, im_tmp;
- char *fn_org = NULL;
- char *fn_dest = NULL;
- FILE *org, *dest;
- int argc = ZEND_NUM_ARGS();
- int dest_height = -1;
- int dest_width = -1;
- int org_height, org_width;
- int white, black;
- int color, color_org, median;
- int int_threshold;
- int x, y;
- float x_ratio, y_ratio;
-
- if (argc != 5 || zend_get_parameters_ex(argc, &f_org, &f_dest, &height, &width, &threshold) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- convert_to_string_ex(f_org);
- convert_to_string_ex(f_dest);
- convert_to_long_ex(height);
- convert_to_long_ex(width);
- convert_to_long_ex(threshold);
-
- fn_org = Z_STRVAL_PP(f_org);
- fn_dest = Z_STRVAL_PP(f_dest);
- dest_height = Z_LVAL_PP(height);
- dest_width = Z_LVAL_PP(width);
- int_threshold = Z_LVAL_PP(threshold);
-
- /* Check threshold value */
- if (int_threshold < 0 || int_threshold > 8) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid threshold value '%d'", int_threshold);
- RETURN_FALSE;
- }
-
- /* Check origin file */
- if (!fn_org || php_check_open_basedir(fn_org TSRMLS_CC)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid origin filename '%s'", fn_org);
- RETURN_FALSE;
- }
-
- /* Check destination file */
- if (!fn_dest || php_check_open_basedir(fn_dest TSRMLS_CC)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid destination filename '%s'", fn_dest);
- RETURN_FALSE;
- }
-
- /* Open origin file */
- org = VCWD_FOPEN(fn_org, "rb");
- if (!org) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to open '%s' for reading", fn_org);
- RETURN_FALSE;
- }
-
- /* Open destination file */
- dest = VCWD_FOPEN(fn_dest, "wb");
- if (!dest) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to open '%s' for writing", fn_dest);
- RETURN_FALSE;
- }
-
- switch (image_type) {
-#ifdef HAVE_GD_GIF_READ
- case PHP_GDIMG_TYPE_GIF:
- im_org = gdImageCreateFromGif(org);
- if (im_org == NULL) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to open '%s' Not a valid GIF file", fn_dest);
- RETURN_FALSE;
- }
- break;
-#endif /* HAVE_GD_GIF_READ */
-
-#ifdef HAVE_GD_JPG
- case PHP_GDIMG_TYPE_JPG:
- im_org = gdImageCreateFromJpeg(org);
- if (im_org == NULL) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to open '%s' Not a valid JPEG file", fn_dest);
- RETURN_FALSE;
- }
- break;
-#endif /* HAVE_GD_JPG */
-
-
-#ifdef HAVE_GD_PNG
- case PHP_GDIMG_TYPE_PNG:
- im_org = gdImageCreateFromPng(org);
- if (im_org == NULL) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to open '%s' Not a valid PNG file", fn_dest);
- RETURN_FALSE;
- }
- break;
-#endif /* HAVE_GD_PNG */
-
- default:
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Format not supported");
- RETURN_FALSE;
- break;
- }
-
- org_width = gdImageSX (im_org);
- org_height = gdImageSY (im_org);
-
- x_ratio = (float) org_width / (float) dest_width;
- y_ratio = (float) org_height / (float) dest_height;
-
- if (x_ratio > 1 && y_ratio > 1) {
- if (y_ratio > x_ratio) {
- x_ratio = y_ratio;
- } else {
- y_ratio = x_ratio;
- }
- dest_width = (int) (org_width / x_ratio);
- dest_height = (int) (org_height / y_ratio);
- } else {
- x_ratio = (float) dest_width / (float) org_width;
- y_ratio = (float) dest_height / (float) org_height;
-
- if (y_ratio < x_ratio) {
- x_ratio = y_ratio;
- } else {
- y_ratio = x_ratio;
- }
- dest_width = (int) (org_width * x_ratio);
- dest_height = (int) (org_height * y_ratio);
- }
-
- im_tmp = gdImageCreate (dest_width, dest_height);
- if (im_tmp == NULL ) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to allocate temporary buffer");
- RETURN_FALSE;
- }
-
- gdImageCopyResized (im_tmp, im_org, 0, 0, 0, 0, dest_width, dest_height, org_width, org_height);
-
- gdImageDestroy(im_org);
-
- fclose(org);
-
- im_dest = gdImageCreate(dest_width, dest_height);
- if (im_dest == NULL) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to allocate destination buffer");
- RETURN_FALSE;
- }
-
- white = gdImageColorAllocate(im_dest, 255, 255, 255);
- if (white == -1) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to allocate the colors for the destination buffer");
- RETURN_FALSE;
- }
-
- black = gdImageColorAllocate(im_dest, 0, 0, 0);
- if (black == -1) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to allocate the colors for the destination buffer");
- RETURN_FALSE;
- }
-
- int_threshold = int_threshold * 32;
-
- for (y = 0; y < dest_height; y++) {
- for (x = 0; x < dest_width; x++) {
- color_org = gdImageGetPixel (im_tmp, x, y);
- median = (im_tmp->red[color_org] + im_tmp->green[color_org] + im_tmp->blue[color_org]) / 3;
- if (median < int_threshold) {
- color = black;
- } else {
- color = white;
- }
- gdImageSetPixel (im_dest, x, y, color);
- }
- }
-
- gdImageDestroy (im_tmp );
-
- gdImageWBMP(im_dest, black , dest);
-
- fflush(dest);
- fclose(dest);
-
- gdImageDestroy(im_dest);
-
- RETURN_TRUE;
-}
-/* }}} */
-#endif /* HAVE_GD_WBMP */
-
-#endif /* HAVE_LIBGD */
-
-/* Section Filters */
-#ifdef HAVE_GD_BUNDLED
-
-#define PHP_GD_SINGLE_RES \
- zval **SIM; \
- gdImagePtr im_src; \
- if (zend_get_parameters_ex(1, &SIM) == FAILURE) { \
- RETURN_FALSE; \
- } \
- ZEND_FETCH_RESOURCE(im_src, gdImagePtr, SIM, -1, "Image", le_gd); \
- if (im_src == NULL) { \
- RETURN_FALSE; \
- }
-
-static void php_image_filter_negate(INTERNAL_FUNCTION_PARAMETERS)
-{
- PHP_GD_SINGLE_RES
-
- if (gdImageNegate(im_src) == 1) {
- RETURN_TRUE;
- }
-
- RETURN_FALSE;
-}
-
-static void php_image_filter_grayscale(INTERNAL_FUNCTION_PARAMETERS)
-{
- PHP_GD_SINGLE_RES
-
- if (gdImageGrayScale(im_src) == 1) {
- RETURN_TRUE;
- }
-
- RETURN_FALSE;
-}
-
-static void php_image_filter_brightness(INTERNAL_FUNCTION_PARAMETERS)
-{
- zval *SIM;
- gdImagePtr im_src;
- long brightness, tmp;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "zll", &SIM, &tmp, &brightness) == FAILURE) {
- RETURN_FALSE;
- }
-
- ZEND_FETCH_RESOURCE(im_src, gdImagePtr, &SIM, -1, "Image", le_gd);
-
- if (im_src == NULL) {
- RETURN_FALSE;
- }
-
- if (gdImageBrightness(im_src, (int)brightness) == 1) {
- RETURN_TRUE;
- }
-
- RETURN_FALSE;
-}
-
-static void php_image_filter_contrast(INTERNAL_FUNCTION_PARAMETERS)
-{
- zval *SIM;
- gdImagePtr im_src;
- long contrast, tmp;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rll", &SIM, &tmp, &contrast) == FAILURE) {
- RETURN_FALSE;
- }
-
- ZEND_FETCH_RESOURCE(im_src, gdImagePtr, &SIM, -1, "Image", le_gd);
-
- if (im_src == NULL) {
- RETURN_FALSE;
- }
-
- if (gdImageContrast(im_src, (int)contrast) == 1) {
- RETURN_TRUE;
- }
-
- RETURN_FALSE;
-}
-
-static void php_image_filter_colorize(INTERNAL_FUNCTION_PARAMETERS)
-{
- zval *SIM;
- gdImagePtr im_src;
- long r,g,b,tmp;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rllll", &SIM, &tmp, &r, &g, &b) == FAILURE) {
- RETURN_FALSE;
- }
-
- ZEND_FETCH_RESOURCE(im_src, gdImagePtr, &SIM, -1, "Image", le_gd);
-
- if (im_src == NULL) {
- RETURN_FALSE;
- }
-
- if (gdImageColor(im_src, (int) r, (int) g, (int) b) == 1) {
- RETURN_TRUE;
- }
-
- RETURN_FALSE;
-}
-
-static void php_image_filter_edgedetect(INTERNAL_FUNCTION_PARAMETERS)
-{
- PHP_GD_SINGLE_RES
-
- if (gdImageEdgeDetectQuick(im_src) == 1) {
- RETURN_TRUE;
- }
-
- RETURN_FALSE;
-}
-
-static void php_image_filter_emboss(INTERNAL_FUNCTION_PARAMETERS)
-{
- PHP_GD_SINGLE_RES
-
- if (gdImageEmboss(im_src) == 1) {
- RETURN_TRUE;
- }
-
- RETURN_FALSE;
-}
-
-static void php_image_filter_gaussian_blur(INTERNAL_FUNCTION_PARAMETERS)
-{
- PHP_GD_SINGLE_RES
-
- if (gdImageGaussianBlur(im_src) == 1) {
- RETURN_TRUE;
- }
-
- RETURN_FALSE;
-}
-
-static void php_image_filter_selective_blur(INTERNAL_FUNCTION_PARAMETERS)
-{
- PHP_GD_SINGLE_RES
-
- if (gdImageSelectiveBlur(im_src) == 1) {
- RETURN_TRUE;
- }
-
- RETURN_FALSE;
-}
-
-static void php_image_filter_mean_removal(INTERNAL_FUNCTION_PARAMETERS)
-{
- PHP_GD_SINGLE_RES
-
- if (gdImageMeanRemoval(im_src) == 1) {
- RETURN_TRUE;
- }
-
- RETURN_FALSE;
-}
-
-static void php_image_filter_smooth(INTERNAL_FUNCTION_PARAMETERS)
-{
- zval *SIM;
- long tmp;
- gdImagePtr im_src;
- double weight;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rld", &SIM, &tmp, &weight) == FAILURE) {
- RETURN_FALSE;
- }
-
- ZEND_FETCH_RESOURCE(im_src, gdImagePtr, &SIM, -1, "Image", le_gd);
-
- if (im_src == NULL) {
- RETURN_FALSE;
- }
-
- if (gdImageSmooth(im_src, (float)weight)==1) {
- RETURN_TRUE;
- }
-
- RETURN_FALSE;
-}
-
-/* {{{ proto bool imagefilter(resource src_im, int filtertype, [args] )
- Applies Filter an image using a custom angle */
-PHP_FUNCTION(imagefilter)
-{
- zval *tmp;
-
- typedef void (*image_filter)(INTERNAL_FUNCTION_PARAMETERS);
- long filtertype;
- image_filter filters[] =
- {
- php_image_filter_negate ,
- php_image_filter_grayscale,
- php_image_filter_brightness,
- php_image_filter_contrast,
- php_image_filter_colorize,
- php_image_filter_edgedetect,
- php_image_filter_emboss,
- php_image_filter_gaussian_blur,
- php_image_filter_selective_blur,
- php_image_filter_mean_removal,
- php_image_filter_smooth
- };
-
- if (ZEND_NUM_ARGS() < 2 || ZEND_NUM_ARGS() > 5 || zend_parse_parameters(2 TSRMLS_CC, "rl", &tmp, &filtertype) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- if (filtertype >= 0 && filtertype <= IMAGE_FILTER_MAX) {
- filters[filtertype](INTERNAL_FUNCTION_PARAM_PASSTHRU);
- }
-}
-/* }}} */
-/* End section: Filters */
-
-/* {{{ proto bool imageantialias(resource im, bool on)
- Should antialiased functions used or not*/
-PHP_FUNCTION(imageantialias)
-{
- zval **IM, **alias;
- gdImagePtr im;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &IM, &alias) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- ZEND_FETCH_RESOURCE(im, gdImagePtr, IM, -1, "Image", le_gd);
-
- convert_to_boolean_ex(alias);
- gdImageAntialias(im, Z_LVAL_PP(alias));
-
- RETURN_TRUE;
-}
-/* }}} */
-#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/gd/gd.dsp b/ext/gd/gd.dsp
deleted file mode 100644
index 6a998e19a9..0000000000
--- a/ext/gd/gd.dsp
+++ /dev/null
@@ -1,600 +0,0 @@
-# Microsoft Developer Studio Project File - Name="gd" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=gd - Win32 Release_TS GD2
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "gd.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "gd.mak" CFG="gd - Win32 Release_TS GD2"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "gd - Win32 Release_TS GD2" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "gd - Win32 Debug_TS GD2" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "gd - Win32 Release_TS GD2"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "gd___Win32_Release_TS_GD2_bundled"
-# PROP BASE Intermediate_Dir "gd___Win32_Release_TS_GD2_bundled"
-# PROP BASE Ignore_Export_Lib 0
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release_TS"
-# PROP Intermediate_Dir "Release_TS"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MD /W3 /GX /O2 /I "..\.." /I "..\..\main" /I "..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\..\zlib" /I "..\..\TSRM" /D ZEND_DEBUG=0 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "COMPILE_DL_GD" /D ZTS=1 /D "ZEND_WIN32" /D "PHP_WIN32" /D HAVE_GD_GIF_READ=1 /D HAVE_GD_GIF_CREATE=1 /D HAVE_GDIMAGECOLORRESOLVE=1 /D "HAVE_GD_PNG" /D "HAVE_GD_JPG" /D "HAVE_GD_WBMP" /D "HAVE_GD_XBM" /D HAVE_LIBGD13=1 /D HAVE_LIBGD=1 /D HAVE_LIBGD15=1 /D HAVE_LIBGD204=1 /FR /YX /FD /c
-# ADD CPP /nologo /MD /W3 /GX /O2 /I "..\.." /I "..\..\main" /I "..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\..\zlib" /I "..\..\TSRM" /I "libgd" /D ZEND_DEBUG=0 /D HAVE_LIBGD15=1 /D HAVE_LIBGD204=1 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "COMPILE_DL_GD" /D ZTS=1 /D "ZEND_WIN32" /D "PHP_WIN32" /D HAVE_GD_GIF_READ=1 /D HAVE_GD_GIF_CREATE=1 /D HAVE_GDIMAGECOLORRESOLVE=1 /D "HAVE_GD_PNG" /D "HAVE_GD_JPG" /D "HAVE_GD_WBMP" /D "HAVE_GD_XBM" /D HAVE_LIBGD=1 /D HAVE_LIBGD13=1 /D HAVE_LIBGD20=1 /D "USE_GD_IOCTX" /D HAVE_LIBFREETYPE=1 /D "USE_GD_IMGSTRTTF" /D HAVE_GD_STRINGTTF=1 /D HAVE_GD_BUNDLED=1 /D "MSWIN32" /D "HAVE_LIBPNG" /D "HAVE_LIBJPEG" /D "HAVE_GD_GD2" /D HAVE_GD_STRINGFTEX=1 /D HAVE_GD_IMAGESETBRUSH=1 /D HAVE_GD_IMAGESETTILE=1 /FR /FD /c
-# SUBTRACT CPP /YX
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x406 /d "NDEBUG"
-# ADD RSC /l 0x406 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 php5ts.lib libjpeg.lib libpng.lib zlib.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 /out:"..\..\Release_TS/php_gd2.dll" /libpath:"..\..\Release_TS" /libpath:"..\..\Release_TS_Inline"
-# SUBTRACT BASE LINK32 /pdb:none
-# ADD LINK32 php5ts.lib freetype2.lib libjpeg.lib libpng.lib zlib.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 /out:"..\..\Release_TS/php_gd2.dll" /libpath:"..\..\Release_TS" /libpath:"..\..\Release_TS_Inline" /libpath:"..\..\..\zlib\Release"
-# SUBTRACT LINK32 /pdb:none
-
-!ELSEIF "$(CFG)" == "gd - Win32 Debug_TS GD2"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "gd___Win32_Debug_TS_GD2_bundled"
-# PROP BASE Intermediate_Dir "gd___Win32_Debug_TS_GD2_bundled"
-# PROP BASE Ignore_Export_Lib 0
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Debug_TS"
-# PROP Intermediate_Dir "Debug_TS"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MDd /W3 /GX /ZI /Od /I "..\.." /I "..\..\main" /I "..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\..\zlib" /I "..\..\TSRM" /D ZEND_DEBUG=1 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "COMPILE_DL_GD" /D ZTS=1 /D "ZEND_WIN32" /D "PHP_WIN32" /D HAVE_GD_GIF_READ=1 /D HAVE_GD_GIF_CREATE=1 /D HAVE_GDIMAGECOLORRESOLVE=1 /D "HAVE_GD_PNG" /D "HAVE_GD_JPG" /D "HAVE_GD_WBMP" /D HAVE_LIBGD13=1 /D HAVE_LIBGD=1 /D HAVE_LIBGD15=1 /D HAVE_LIBGD204=1 /FR /YX /FD /c
-# ADD CPP /nologo /MDd /W3 /GX /ZI /Od /I "..\.." /I "..\..\main" /I "..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\..\zlib" /I "..\..\TSRM" /I "libgd" /D ZEND_DEBUG=1 /D "HAVE_LIBGD15" /D HAVE_LIBGD204=1 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "COMPILE_DL_GD" /D ZTS=1 /D "ZEND_WIN32" /D "PHP_WIN32" /D HAVE_GD_GIF_READ=1 /D HAVE_GD_GIF_CREATE=1 /D HAVE_GDIMAGECOLORRESOLVE=1 /D "HAVE_GD_PNG" /D "HAVE_GD_JPG" /D "HAVE_GD_WBMP" /D HAVE_LIBGD=1 /D HAVE_LIBGD13=1 /D HAVE_LIBGD20=1 /D "USE_GD_IOCTX" /D HAVE_LIBFREETYPE=1 /D "USE_GD_IMGSTRTTF" /D HAVE_GD_STRINGTTF=1 /D HAVE_GD_BUNDLED=1 /D "MSWIN32" /D "HAVE_LIBPNG" /D "HAVE_LIBJPEG" /D "HAVE_GD_GD2" /D HAVE_GD_STRINGFTEX=1 /D HAVE_GD_IMAGESETBRUSH=1 /D HAVE_GD_IMAGESETTILE=1 /FR /FD /c
-# SUBTRACT CPP /YX
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x406 /d "NDEBUG"
-# ADD RSC /l 0x406 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 php5ts_debug.lib libjpeg.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /incremental:yes /debug /machine:I386 /out:"..\..\Debug_TS/php_gd2.dll" /libpath:"..\..\Debug_TS"
-# SUBTRACT BASE LINK32 /pdb:none
-# ADD LINK32 php5ts_debug.lib libpng.lib zlib.lib libjpeg.lib freetype2.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /incremental:yes /debug /machine:I386 /out:"..\..\Debug_TS/php_gd2.dll" /libpath:"..\..\Debug_TS" /libpath:"..\..\..\zlib\Debug"
-# SUBTRACT LINK32 /pdb:none
-
-!ENDIF
-
-# Begin Target
-
-# Name "gd - Win32 Release_TS GD2"
-# Name "gd - Win32 Debug_TS GD2"
-# Begin Group "Source Files"
-
-# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
-# Begin Source File
-
-SOURCE=.\gd.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\gdttf.c
-# End Source File
-# End Group
-# Begin Group "Header Files"
-
-# PROP Default_Filter "h;hpp;hxx;hm;inl"
-# Begin Source File
-
-SOURCE=.\gdcache.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\gdttf.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\php_gd.h
-# End Source File
-# End Group
-# Begin Group "Resource Files"
-
-# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
-# End Group
-# Begin Group "libgd"
-
-# PROP Default_Filter ""
-# Begin Group "Source Files No. 1"
-
-# PROP Default_Filter "*.c"
-# Begin Source File
-
-SOURCE=.\libgd\gd.c
-
-!IF "$(CFG)" == "gd - Win32 Release_TS GD2"
-
-# PROP Intermediate_Dir "Release_TS_bundled"
-
-!ELSEIF "$(CFG)" == "gd - Win32 Debug_TS GD2"
-
-# PROP Intermediate_Dir "Debug_TS_bundled"
-
-!ENDIF
-
-# End Source File
-# Begin Source File
-
-SOURCE=.\libgd\gd2copypal.c
-
-!IF "$(CFG)" == "gd - Win32 Release_TS GD2"
-
-# PROP Intermediate_Dir "Release_TS_bundled"
-
-!ELSEIF "$(CFG)" == "gd - Win32 Debug_TS GD2"
-
-# PROP Intermediate_Dir "Debug_TS_bundled"
-
-!ENDIF
-
-# End Source File
-# Begin Source File
-
-SOURCE=.\libgd\gd_arc_f_buggy.c
-
-!IF "$(CFG)" == "gd - Win32 Release_TS GD2"
-
-# PROP Intermediate_Dir "Release_TS_bundled"
-
-!ELSEIF "$(CFG)" == "gd - Win32 Debug_TS GD2"
-
-# PROP Intermediate_Dir "Debug_TS_bundled"
-
-!ENDIF
-
-# End Source File
-# Begin Source File
-
-SOURCE=.\libgd\gd_gd.c
-
-!IF "$(CFG)" == "gd - Win32 Release_TS GD2"
-
-# PROP Intermediate_Dir "Release_TS_bundled"
-
-!ELSEIF "$(CFG)" == "gd - Win32 Debug_TS GD2"
-
-# PROP Intermediate_Dir "Debug_TS_bundled"
-
-!ENDIF
-
-# End Source File
-# Begin Source File
-
-SOURCE=.\libgd\gd_gd2.c
-
-!IF "$(CFG)" == "gd - Win32 Release_TS GD2"
-
-# PROP Intermediate_Dir "Release_TS_bundled"
-
-!ELSEIF "$(CFG)" == "gd - Win32 Debug_TS GD2"
-
-# PROP Intermediate_Dir "Debug_TS_bundled"
-
-!ENDIF
-
-# End Source File
-# Begin Source File
-
-SOURCE=.\libgd\gd_gif_in.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\libgd\gd_gif_out.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\libgd\gd_io.c
-
-!IF "$(CFG)" == "gd - Win32 Release_TS GD2"
-
-# PROP Intermediate_Dir "Release_TS_bundled"
-
-!ELSEIF "$(CFG)" == "gd - Win32 Debug_TS GD2"
-
-# PROP Intermediate_Dir "Debug_TS_bundled"
-
-!ENDIF
-
-# End Source File
-# Begin Source File
-
-SOURCE=.\libgd\gd_io_dp.c
-
-!IF "$(CFG)" == "gd - Win32 Release_TS GD2"
-
-# PROP Intermediate_Dir "Release_TS_bundled"
-
-!ELSEIF "$(CFG)" == "gd - Win32 Debug_TS GD2"
-
-# PROP Intermediate_Dir "Debug_TS_bundled"
-
-!ENDIF
-
-# End Source File
-# Begin Source File
-
-SOURCE=.\libgd\gd_io_file.c
-
-!IF "$(CFG)" == "gd - Win32 Release_TS GD2"
-
-# PROP Intermediate_Dir "Release_TS_bundled"
-
-!ELSEIF "$(CFG)" == "gd - Win32 Debug_TS GD2"
-
-# PROP Intermediate_Dir "Debug_TS_bundled"
-
-!ENDIF
-
-# End Source File
-# Begin Source File
-
-SOURCE=.\libgd\gd_io_ss.c
-
-!IF "$(CFG)" == "gd - Win32 Release_TS GD2"
-
-# PROP Intermediate_Dir "Release_TS_bundled"
-
-!ELSEIF "$(CFG)" == "gd - Win32 Debug_TS GD2"
-
-# PROP Intermediate_Dir "Debug_TS_bundled"
-
-!ENDIF
-
-# End Source File
-# Begin Source File
-
-SOURCE=.\libgd\gd_jpeg.c
-
-!IF "$(CFG)" == "gd - Win32 Release_TS GD2"
-
-# PROP Intermediate_Dir "Release_TS_bundled"
-
-!ELSEIF "$(CFG)" == "gd - Win32 Debug_TS GD2"
-
-# PROP Intermediate_Dir "Debug_TS_bundled"
-
-!ENDIF
-
-# End Source File
-# Begin Source File
-
-SOURCE=.\libgd\gd_png.c
-
-!IF "$(CFG)" == "gd - Win32 Release_TS GD2"
-
-# PROP Intermediate_Dir "Release_TS_bundled"
-
-!ELSEIF "$(CFG)" == "gd - Win32 Debug_TS GD2"
-
-# PROP Intermediate_Dir "Debug_TS_bundled"
-
-!ENDIF
-
-# End Source File
-# Begin Source File
-
-SOURCE=.\libgd\gd_ss.c
-
-!IF "$(CFG)" == "gd - Win32 Release_TS GD2"
-
-# PROP Intermediate_Dir "Release_TS_bundled"
-
-!ELSEIF "$(CFG)" == "gd - Win32 Debug_TS GD2"
-
-# PROP Intermediate_Dir "Debug_TS_bundled"
-
-!ENDIF
-
-# End Source File
-# Begin Source File
-
-SOURCE=.\libgd\gd_topal.c
-
-!IF "$(CFG)" == "gd - Win32 Release_TS GD2"
-
-# PROP Intermediate_Dir "Release_TS_bundled"
-
-!ELSEIF "$(CFG)" == "gd - Win32 Debug_TS GD2"
-
-# PROP Intermediate_Dir "Debug_TS_bundled"
-
-!ENDIF
-
-# End Source File
-# Begin Source File
-
-SOURCE=.\libgd\gd_wbmp.c
-
-!IF "$(CFG)" == "gd - Win32 Release_TS GD2"
-
-# PROP Intermediate_Dir "Release_TS_bundled"
-
-!ELSEIF "$(CFG)" == "gd - Win32 Debug_TS GD2"
-
-# PROP Intermediate_Dir "Debug_TS_bundled"
-
-!ENDIF
-
-# End Source File
-# Begin Source File
-
-SOURCE=.\libgd\gdcache.c
-
-!IF "$(CFG)" == "gd - Win32 Release_TS GD2"
-
-# PROP Intermediate_Dir "Release_TS_bundled"
-
-!ELSEIF "$(CFG)" == "gd - Win32 Debug_TS GD2"
-
-# PROP Intermediate_Dir "Debug_TS_bundled"
-
-!ENDIF
-
-# End Source File
-# Begin Source File
-
-SOURCE=.\libgd\gdfontg.c
-
-!IF "$(CFG)" == "gd - Win32 Release_TS GD2"
-
-# PROP Intermediate_Dir "Release_TS_bundled"
-
-!ELSEIF "$(CFG)" == "gd - Win32 Debug_TS GD2"
-
-# PROP Intermediate_Dir "Debug_TS_bundled"
-
-!ENDIF
-
-# End Source File
-# Begin Source File
-
-SOURCE=.\libgd\gdfontl.c
-
-!IF "$(CFG)" == "gd - Win32 Release_TS GD2"
-
-# PROP Intermediate_Dir "Release_TS_bundled"
-
-!ELSEIF "$(CFG)" == "gd - Win32 Debug_TS GD2"
-
-# PROP Intermediate_Dir "Debug_TS_bundled"
-
-!ENDIF
-
-# End Source File
-# Begin Source File
-
-SOURCE=.\libgd\gdfontmb.c
-
-!IF "$(CFG)" == "gd - Win32 Release_TS GD2"
-
-# PROP Intermediate_Dir "Release_TS_bundled"
-
-!ELSEIF "$(CFG)" == "gd - Win32 Debug_TS GD2"
-
-# PROP Intermediate_Dir "Debug_TS_bundled"
-
-!ENDIF
-
-# End Source File
-# Begin Source File
-
-SOURCE=.\libgd\gdfonts.c
-
-!IF "$(CFG)" == "gd - Win32 Release_TS GD2"
-
-# PROP Intermediate_Dir "Release_TS_bundled"
-
-!ELSEIF "$(CFG)" == "gd - Win32 Debug_TS GD2"
-
-# PROP Intermediate_Dir "Debug_TS_bundled"
-
-!ENDIF
-
-# End Source File
-# Begin Source File
-
-SOURCE=.\libgd\gdfontt.c
-
-!IF "$(CFG)" == "gd - Win32 Release_TS GD2"
-
-# PROP Intermediate_Dir "Release_TS_bundled"
-
-!ELSEIF "$(CFG)" == "gd - Win32 Debug_TS GD2"
-
-# PROP Intermediate_Dir "Debug_TS_bundled"
-
-!ENDIF
-
-# End Source File
-# Begin Source File
-
-SOURCE=.\libgd\gdft.c
-
-!IF "$(CFG)" == "gd - Win32 Release_TS GD2"
-
-# PROP Intermediate_Dir "Release_TS_bundled"
-
-!ELSEIF "$(CFG)" == "gd - Win32 Debug_TS GD2"
-
-# PROP Intermediate_Dir "Debug_TS_bundled"
-
-!ENDIF
-
-# End Source File
-# Begin Source File
-
-SOURCE=.\libgd\gdhelpers.c
-
-!IF "$(CFG)" == "gd - Win32 Release_TS GD2"
-
-# PROP Intermediate_Dir "Release_TS_bundled"
-
-!ELSEIF "$(CFG)" == "gd - Win32 Debug_TS GD2"
-
-# PROP Intermediate_Dir "Debug_TS_bundled"
-
-!ENDIF
-
-# End Source File
-# Begin Source File
-
-SOURCE=.\libgd\gdkanji.c
-
-!IF "$(CFG)" == "gd - Win32 Release_TS GD2"
-
-# PROP Intermediate_Dir "Release_TS_bundled"
-
-!ELSEIF "$(CFG)" == "gd - Win32 Debug_TS GD2"
-
-# PROP Intermediate_Dir "Debug_TS_bundled"
-
-!ENDIF
-
-# End Source File
-# Begin Source File
-
-SOURCE=.\libgd\gdtables.c
-
-!IF "$(CFG)" == "gd - Win32 Release_TS GD2"
-
-# PROP Intermediate_Dir "Release_TS_bundled"
-
-!ELSEIF "$(CFG)" == "gd - Win32 Debug_TS GD2"
-
-# PROP Intermediate_Dir "Debug_TS_bundled"
-
-!ENDIF
-
-# End Source File
-# Begin Source File
-
-SOURCE=.\libgd\gdxpm.c
-
-!IF "$(CFG)" == "gd - Win32 Release_TS GD2"
-
-# PROP Intermediate_Dir "Release_TS_bundled"
-
-!ELSEIF "$(CFG)" == "gd - Win32 Debug_TS GD2"
-
-# PROP Intermediate_Dir "Debug_TS_bundled"
-
-!ENDIF
-
-# End Source File
-# Begin Source File
-
-SOURCE=.\libgd\wbmp.c
-
-!IF "$(CFG)" == "gd - Win32 Release_TS GD2"
-
-# PROP Intermediate_Dir "Release_TS_bundled"
-
-!ELSEIF "$(CFG)" == "gd - Win32 Debug_TS GD2"
-
-# PROP Intermediate_Dir "Debug_TS_bundled"
-
-!ENDIF
-
-# End Source File
-# Begin Source File
-
-SOURCE=.\libgd\xbm.c
-
-!IF "$(CFG)" == "gd - Win32 Release_TS GD2"
-
-# PROP Intermediate_Dir "Release_TS_bundled"
-
-!ELSEIF "$(CFG)" == "gd - Win32 Debug_TS GD2"
-
-# PROP Intermediate_Dir "Debug_TS_bundled"
-
-!ENDIF
-
-# End Source File
-# End Group
-# Begin Group "Header Files No. 1"
-
-# PROP Default_Filter "*.h"
-# Begin Source File
-
-SOURCE=.\libgd\gd.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\libgd\gd_io.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\libgd\gdcache.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\libgd\gdfontg.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\libgd\gdfontl.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\libgd\gdfontmb.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\libgd\gdfonts.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\libgd\gdfontt.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\libgd\gdhelpers.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\libgd\jisx0208.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\libgd\wbmp.h
-# End Source File
-# End Group
-# End Group
-# End Target
-# End Project
diff --git a/ext/gd/gd_ctx.c b/ext/gd/gd_ctx.c
deleted file mode 100644
index b27ee45856..0000000000
--- a/ext/gd/gd_ctx.c
+++ /dev/null
@@ -1,163 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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. |
- +----------------------------------------------------------------------+
- | Authors: Stanislav Malyshev <stas@php.net> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-#include "php_gd.h"
-
-#define CTX_PUTC(c,ctx) ctx->putC(ctx, c)
-
-static void _php_image_output_putc(struct gdIOCtx *ctx, int c)
-{
- /* without the following downcast, the write will fail
- * (i.e., will write a zero byte) for all
- * big endian architectures:
- */
- unsigned char ch = (unsigned char) c;
- TSRMLS_FETCH();
- php_write(&ch, 1 TSRMLS_CC);
-}
-
-static int _php_image_output_putbuf(struct gdIOCtx *ctx, const void* buf, int l)
-{
- TSRMLS_FETCH();
- return php_write((void *)buf, l TSRMLS_CC);
-}
-
-static void _php_image_output_ctxfree(struct gdIOCtx *ctx)
-{
- if(ctx) {
- efree(ctx);
- }
-}
-
-/* {{{ _php_image_output_ctx */
-static void _php_image_output_ctx(INTERNAL_FUNCTION_PARAMETERS, int image_type, char *tn, void (*func_p)())
-{
- zval **imgind, **file, **quality;
- gdImagePtr im;
- char *fn = NULL;
- FILE *fp = NULL;
- int argc = ZEND_NUM_ARGS();
- int q = -1, i;
- gdIOCtx *ctx;
-
- /* The third (quality) parameter for Wbmp stands for the threshold when called from image2wbmp().
- * The third (quality) parameter for Wbmp and Xbm stands for the foreground color index when called
- * from imagey<type>().
- */
-
- if (argc < 2 && image_type == PHP_GDIMG_TYPE_XBM) {
- WRONG_PARAM_COUNT;
- }
- if (argc < 1 || argc > 3 || zend_get_parameters_ex(argc, &imgind, &file, &quality) == FAILURE)
- {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(im, gdImagePtr, imgind, -1, "Image", phpi_get_le_gd());
-
- if (argc > 1) {
- convert_to_string_ex(file);
- fn = Z_STRVAL_PP(file);
- if (argc == 3) {
- convert_to_long_ex(quality);
- q = Z_LVAL_PP(quality);/* or colorindex for foreground of BW images (defaults to black) */
- }
- }
-
- if ((argc == 2) || (argc > 2 && Z_STRLEN_PP(file))) {
- if (!fn || php_check_open_basedir(fn TSRMLS_CC)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid filename '%s'", fn);
- RETURN_FALSE;
- }
-
- fp = VCWD_FOPEN(fn, "wb");
- if (!fp) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to open '%s' for writing", fn);
- RETURN_FALSE;
- }
-
- ctx = gdNewFileCtx(fp);
- } else {
- ctx = emalloc(sizeof(gdIOCtx));
- ctx->putC = _php_image_output_putc;
- ctx->putBuf = _php_image_output_putbuf;
-#if HAVE_LIBGD204
- ctx->gd_free = _php_image_output_ctxfree;
-#else
- ctx->free = _php_image_output_ctxfree;
-#endif
-
-#if APACHE && defined(CHARSET_EBCDIC)
- /* XXX this is unlikely to work any more thies@thieso.net */
- /* This is a binary file already: avoid EBCDIC->ASCII conversion */
- ap_bsetflag(php3_rqst->connection->client, B_EBCDIC2ASCII, 0);
-#endif
- }
-
- switch(image_type) {
- case PHP_GDIMG_CONVERT_WBM:
- if(q<0||q>255) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid threshold value '%d'. It must be between 0 and 255", q);
- }
- case PHP_GDIMG_TYPE_JPG:
- (*func_p)(im, ctx, q);
- break;
- case PHP_GDIMG_TYPE_XBM:
- case PHP_GDIMG_TYPE_WBM:
- if (argc < 3) {
- for(i=0; i < gdImageColorsTotal(im); i++) {
- if(!gdImageRed(im, i) && !gdImageGreen(im, i) && !gdImageBlue(im, i)) break;
- }
- q = i;
- }
- if (image_type == PHP_GDIMG_TYPE_XBM) {
- (*func_p)(im, fn, q, ctx);
- } else {
- (*func_p)(im, q, ctx);
- }
- break;
- default:
- (*func_p)(im, ctx);
- break;
- }
-
-#if HAVE_LIBGD204
- ctx->gd_free(ctx);
-#else
- ctx->free(ctx);
-#endif
-
- if(fp) {
- fflush(fp);
- fclose(fp);
- }
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/*
- * 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/gd/gdcache.c b/ext/gd/gdcache.c
deleted file mode 100644
index fa82de5f40..0000000000
--- a/ext/gd/gdcache.c
+++ /dev/null
@@ -1,203 +0,0 @@
-/*
- * $Id$
- *
- * Caches of pointers to user structs in which the least-recently-used
- * element is replaced in the event of a cache miss after the cache has
- * reached a given size.
- *
- * John Ellson (ellson@lucent.com) Oct 31, 1997
- *
- * Test this with:
- * gcc -o gdcache -g -Wall -DTEST gdcache.c
- *
- * The cache is implemented by a singly-linked list of elements
- * each containing a pointer to a user struct that is being managed by
- * the cache.
- *
- * The head structure has a pointer to the most-recently-used
- * element, and elements are moved to this position in the list each
- * time they are used. The head also contains pointers to three
- * user defined functions:
- * - a function to test if a cached userdata matches some keydata
- * - a function to provide a new userdata struct to the cache
- * if there has been a cache miss.
- * - a function to release a userdata struct when it is
- * no longer being managed by the cache
- *
- * In the event of a cache miss the cache is allowed to grow up to
- * a specified maximum size. After the maximum size is reached then
- * the least-recently-used element is discarded to make room for the
- * new. The most-recently-returned value is always left at the
- * beginning of the list after retrieval.
- *
- * In the current implementation the cache is traversed by a linear
- * search from most-recent to least-recent. This linear search
- * probably limits the usefulness of this implementation to cache
- * sizes of a few tens of elements.
- */
-
-#include "php.h"
-
-/* This just seems unessacary */
-#if PHP_WIN32
-#define ENABLE_GD_TTF
-#else
-#include "php_config.h"
-#endif
-#if (HAVE_LIBTTF | HAVE_LIBFREETYPE) && !defined(HAVE_GD_CACHE_CREATE)
-
-#include "gdcache.h"
-
-/*********************************************************/
-/* implementation */
-/*********************************************************/
-
-
-/* create a new cache */
-gdCache_head_t *
-gdCacheCreate(
- int size,
- gdCacheTestFn_t gdCacheTest,
- gdCacheFetchFn_t gdCacheFetch,
- gdCacheReleaseFn_t gdCacheRelease )
-{
- gdCache_head_t *head;
-
- head = (gdCache_head_t *)pemalloc(sizeof(gdCache_head_t), 1);
- head->mru = NULL;
- head->size = size;
- head->gdCacheTest = gdCacheTest;
- head->gdCacheFetch = gdCacheFetch;
- head->gdCacheRelease = gdCacheRelease;
- return head;
-}
-
-void
-gdCacheDelete( gdCache_head_t *head )
-{
- gdCache_element_t *elem, *prev;
-
- elem = head->mru;
- while(elem) {
- (*(head->gdCacheRelease))(elem->userdata);
- prev = elem;
- elem = elem->next;
- pefree((char *)prev, 1);
- }
- pefree((char *)head, 1);
-}
-
-void *
-gdCacheGet( gdCache_head_t *head, void *keydata )
-{
- int i=0;
- gdCache_element_t *elem, *prev = NULL, *prevprev = NULL;
- void *userdata;
-
- elem = head->mru;
- while(elem) {
- if ((*(head->gdCacheTest))(elem->userdata, keydata)) {
- if (i) { /* if not already most-recently-used */
- /* relink to top of list */
- prev->next = elem->next;
- elem->next = head->mru;
- head->mru = elem;
- }
- return elem->userdata;
- }
- prevprev = prev;
- prev = elem;
- elem = elem->next;
- i++;
- }
- userdata = (*(head->gdCacheFetch))(&(head->error), keydata);
- if (! userdata) {
- /* if there was an error in the fetch then don't cache */
- return NULL;
- }
- if (i < head->size) { /* cache still growing - add new elem */
- elem = (gdCache_element_t *)pemalloc(sizeof(gdCache_element_t), 1);
- }
- else { /* cache full - replace least-recently-used */
- /* preveprev becomes new end of list */
- prevprev->next = NULL;
- elem = prev;
- (*(head->gdCacheRelease))(elem->userdata);
- }
- /* relink to top of list */
- elem->next = head->mru;
- head->mru = elem;
- elem->userdata = userdata;
- return userdata;
-}
-
-
-
-/*********************************************************/
-/* test stub */
-/*********************************************************/
-
-
-#ifdef GDCACHE_TEST
-
-#include <stdio.h>
-
-typedef struct {
- int key;
- int value;
-} key_value_t;
-
-static int
-cacheTest( void *map, void *key )
-{
- return (((key_value_t *)map)->key == *(int *)key);
-}
-
-static void *
-cacheFetch( char **error, void *key )
-{
- key_value_t *map;
-
- map = (key_value_t *)malloc(sizeof(key_value_t));
- map->key = *(int *)key;
- map->value = 3;
-
- *error = NULL;
- return (void *)map;
-}
-
-static void
-cacheRelease( void *map)
-{
- free( (char *)map );
-}
-
-int
-main(char *argv[], int argc)
-{
- gdCache_head_t *cacheTable;
- int elem, key;
-
- cacheTable = gdCacheCreate(3, cacheTest, cacheFetch, cacheRelease);
-
- key = 20;
- elem = *(int *)gdCacheGet(cacheTable, &key);
- key = 30;
- elem = *(int *)gdCacheGet(cacheTable, &key);
- key = 40;
- elem = *(int *)gdCacheGet(cacheTable, &key);
- key = 50;
- elem = *(int *)gdCacheGet(cacheTable, &key);
- key = 30;
- elem = *(int *)gdCacheGet(cacheTable, &key);
- key = 30;
- elem = *(int *)gdCacheGet(cacheTable, &key);
-
- gdCacheDelete(cacheTable);
-
- return 0;
-}
-
-#endif
-
-#endif /* ENABLE_GD_TTF */
diff --git a/ext/gd/gdcache.h b/ext/gd/gdcache.h
deleted file mode 100644
index 657eb18435..0000000000
--- a/ext/gd/gdcache.h
+++ /dev/null
@@ -1,87 +0,0 @@
-/*
- * $Id$
- *
- * Caches of pointers to user structs in which the least-recently-used
- * element is replaced in the event of a cache miss after the cache has
- * reached a given size.
- *
- * John Ellson (ellson@lucent.com) Oct 31, 1997
- *
- * Test this with:
- * gcc -o gdcache -g -Wall -DTEST gdcache.c
- *
- * The cache is implemented by a singly-linked list of elements
- * each containing a pointer to a user struct that is being managed by
- * the cache.
- *
- * The head structure has a pointer to the most-recently-used
- * element, and elements are moved to this position in the list each
- * time they are used. The head also contains pointers to three
- * user defined functions:
- * - a function to test if a cached userdata matches some keydata
- * - a function to provide a new userdata struct to the cache
- * if there has been a cache miss.
- * - a function to release a userdata struct when it is
- * no longer being managed by the cache
- *
- * In the event of a cache miss the cache is allowed to grow up to
- * a specified maximum size. After the maximum size is reached then
- * the least-recently-used element is discarded to make room for the
- * new. The most-recently-returned value is always left at the
- * beginning of the list after retrieval.
- *
- * In the current implementation the cache is traversed by a linear
- * search from most-recent to least-recent. This linear search
- * probably limits the usefulness of this implementation to cache
- * sizes of a few tens of elements.
- */
-
-/*********************************************************/
-/* header */
-/*********************************************************/
-
-#if (!defined(_OSD_POSIX) && !defined(__FreeBSD__)) && HAVE_MALLOC_H
-#include <malloc.h>
-#else
-#include <stdlib.h> /* BS2000/OSD defines malloc() & friends in stdlib.h */
-#endif
-#ifndef NULL
-#define NULL (void *)0
-#endif
-
-/* user defined function templates */
-typedef int (*gdCacheTestFn_t)(void *userdata, void *keydata);
-typedef void *(*gdCacheFetchFn_t)(char **error, void *keydata);
-typedef void (*gdCacheReleaseFn_t)(void *userdata);
-
-/* element structure */
-typedef struct gdCache_element_s gdCache_element_t;
-struct gdCache_element_s {
- gdCache_element_t *next;
- void *userdata;
-};
-
-/* head structure */
-typedef struct gdCache_head_s gdCache_head_t;
-struct gdCache_head_s {
- gdCache_element_t *mru;
- int size;
- char *error;
- gdCacheTestFn_t gdCacheTest;
- gdCacheFetchFn_t gdCacheFetch;
- gdCacheReleaseFn_t gdCacheRelease;
-};
-
-/* function templates */
-gdCache_head_t *
-gdCacheCreate(
- int size,
- gdCacheTestFn_t gdCacheTest,
- gdCacheFetchFn_t gdCacheFetch,
- gdCacheReleaseFn_t gdCacheRelease );
-
-void
-gdCacheDelete( gdCache_head_t *head );
-
-void *
-gdCacheGet( gdCache_head_t *head, void *keydata );
diff --git a/ext/gd/gdttf.c b/ext/gd/gdttf.c
deleted file mode 100644
index b38b182317..0000000000
--- a/ext/gd/gdttf.c
+++ /dev/null
@@ -1,845 +0,0 @@
-/* gd interface to freetype library */
-/* */
-/* John Ellson ellson@lucent.com */
-
-/* $Id$ */
-
-#include "php.h"
-
-#if PHP_WIN32
-#include "config.w32.h"
-#else
-#include "php_config.h"
-#endif
-#if HAVE_LIBTTF && !defined(USE_GD_IMGSTRTTF)
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <math.h>
-#include <gd.h>
-#include "gdttf.h"
-#include "gdcache.h"
-#include <freetype.h>
-
-#ifndef HAVE_GDIMAGECOLORRESOLVE
-extern int gdImageColorResolve(gdImagePtr, int, int, int);
-#endif
-
-/* number of fonts cached before least recently used is replaced */
-#define FONTCACHESIZE 6
-
-/* number of character glyphs cached per font before
- least-recently-used is replaced */
-#define GLYPHCACHESIZE 120
-
-/* number of bitmaps cached per glyph before
- least-recently-used is replaced */
-#define BITMAPCACHESIZE 8
-
-/* number of antialias color lookups cached */
-#define TWEENCOLORCACHESIZE 32
-
-/* ptsize below which anti-aliasing is ineffective */
-#define MINANTIALIASPTSIZE 0
-
-/* display resolution - (Not really. This has to be 72 or hinting is wrong) */
-#define RESOLUTION 72
-
-/* Number of colors used for anti-aliasing */
-#undef NUMCOLORS
-#define NUMCOLORS 4
-
-/* Line separation as a factor of font height.
- No space between if LINESPACE = 1.00
- Line separation will be rounded up to next pixel row*/
-#define LINESPACE 1.05
-
-#ifndef TRUE
-#define FALSE 0
-#define TRUE !FALSE
-#endif
-
-#ifndef MAX
-#define MAX(a, b) ((a)>(b)?(a):(b))
-#endif
-#ifndef MIN
-#define MIN(a, b) ((a)<(b)?(a):(b))
-#endif
-
-typedef struct {
- char *fontname; /* key */
- double ptsize; /* key */
- double angle; /* key */
- double sin_a, cos_a;
- TT_Engine *engine;
- TT_Face face;
- TT_Face_Properties properties;
- TT_Instance instance;
- TT_CharMap char_map_Unicode;
- TT_CharMap char_map_Big5;
- TT_CharMap char_map_Roman;
- int have_char_map_Unicode;
- int have_char_map_Big5;
- int have_char_map_Roman;
- TT_Matrix matrix;
- TT_Instance_Metrics imetrics;
- gdCache_head_t *glyphCache;
-} font_t;
-
-typedef struct {
- char *fontname; /* key */
- double ptsize; /* key */
- double angle; /* key */
- TT_Engine *engine;
-} fontkey_t;
-
-typedef struct {
- int character; /* key */
- int hinting; /* key */
- TT_Glyph glyph;
- TT_Glyph_Metrics metrics;
- TT_Outline outline;
- TT_Pos oldx, oldy;
- TT_Raster_Map Bit;
- int gray_render;
- int xmin, xmax, ymin, ymax;
- gdCache_head_t *bitmapCache;
-} glyph_t;
-
-typedef struct {
- int character; /* key */
- int hinting; /* key */
- int gray_render;
- font_t *font;
-} glyphkey_t;
-
-typedef struct {
- int xoffset; /* key */
- int yoffset; /* key */
- char *bitmap;
-} bitmap_t;
-
-typedef struct {
- int xoffset; /* key */
- int yoffset; /* key */
- glyph_t *glyph;
-} bitmapkey_t;
-
-typedef struct {
- unsigned char pixel; /* key */
- unsigned char bgcolor; /* key */
- int fgcolor; /* key */ /* -ve means no antialias */
- gdImagePtr im; /* key */
- unsigned char tweencolor;
-} tweencolor_t;
-
-typedef struct {
- unsigned char pixel; /* key */
- unsigned char bgcolor; /* key */
- int fgcolor; /* key */ /* -ve means no antialias */
- gdImagePtr im; /* key */
-} tweencolorkey_t;
-
-/* forward declarations so that glyphCache can be initialized by font code */
-static int glyphTest ( void *element, void *key );
-static void *glyphFetch ( char **error, void *key );
-static void glyphRelease( void *element );
-
-/* forward declarations so that bitmapCache can be initialized by glyph code */
-static int bitmapTest ( void *element, void *key );
-static void *bitmapFetch ( char **error, void *key );
-static void bitmapRelease( void *element );
-
-/* local prototype */
-char *gdttfchar(gdImage *im, int fg, font_t *font, int x, int y, TT_F26Dot6 x1, TT_F26Dot6 y1, TT_F26Dot6 *advance, TT_BBox **bbox, char **next);
-
-
-
-/********************************************************************
- * gdTcl_UtfToUniChar is borrowed from ...
- */
-/*
- * tclUtf.c --
- *
- * Routines for manipulating UTF-8 strings.
- *
- * Copyright (c) 1997-1998 Sun Microsystems, Inc.
- *
- * See the file "license.terms" for information on usage and redistribution
- * of this file, and for a DISCLAIMER OF ALL WARRANTIES.
- *
- * SCCS: @(#) tclUtf.c 1.25 98/01/28 18:02:43
- */
-
-/*
- *---------------------------------------------------------------------------
- *
- * gdTcl_UtfToUniChar --
- *
- * Extract the Tcl_UniChar represented by the UTF-8 string. Bad
- * UTF-8 sequences are converted to valid Tcl_UniChars and processing
- * continues. Equivalent to Plan 9 chartorune().
- *
- * The caller must ensure that the source buffer is long enough that
- * this routine does not run off the end and dereference non-existent
- * memory looking for trail bytes. If the source buffer is known to
- * be '\0' terminated, this cannot happen. Otherwise, the caller
- * should call Tcl_UtfCharComplete() before calling this routine to
- * ensure that enough bytes remain in the string.
- *
- * Results:
- * *chPtr is filled with the Tcl_UniChar, and the return value is the
- * number of bytes from the UTF-8 string that were consumed.
- *
- * Side effects:
- * None.
- *
- *---------------------------------------------------------------------------
- */
-
-#ifndef CHARSET_EBCDIC
-#define ASC(ch) (ch)
-#else /*CHARSET_EBCDIC*/
-#define ASC(ch) os_toascii[(unsigned char) (ch)]
-#endif /*CHARSET_EBCDIC*/
-
-#define Tcl_UniChar int
-#define TCL_UTF_MAX 3
-static int gdTcl_UtfToUniChar(char *str, Tcl_UniChar *chPtr)
-/* str is the UTF8 next character pointer */
-/* chPtr is the int for the result */
-{
- int byte;
-
- /* HTML4.0 entities in decimal form, e.g. &#197; */
- byte = *((unsigned char *) str);
- if (byte == '&') {
- int i, n = 0;
-
- byte = *((unsigned char *) (str+1));
- if (byte == '#') {
- for (i = 2; i < 8; i++) {
- byte = *((unsigned char *) (str+i));
- if (byte >= '0' && byte <= '9') {
- n = (n * 10) + (byte - '0');
- } else {
- break;
- }
- }
- if (byte == ';') {
- *chPtr = (Tcl_UniChar) n;
- return ++i;
- }
- }
- }
-
- /* Unroll 1 to 3 byte UTF-8 sequences, use loop to handle longer ones. */
-
- byte = ASC(*((unsigned char *) str));
- if (byte < 0xC0) {
- /*
- * Handles properly formed UTF-8 characters between 0x01 and 0x7F.
- * Also treats \0 and naked trail bytes 0x80 to 0xBF as valid
- * characters representing themselves.
- */
-
- *chPtr = (Tcl_UniChar) byte;
- return 1;
- } else if (byte < 0xE0) {
- if ((ASC(str[1]) & 0xC0) == 0x80) {
- /* Two-byte-character lead-byte followed by a trail-byte. */
-
- *chPtr = (Tcl_UniChar) (((byte & 0x1F) << 6) | (ASC(str[1]) & 0x3F));
- return 2;
- }
- /*
- * A two-byte-character lead-byte not followed by trail-byte
- * represents itself.
- */
-
- *chPtr = (Tcl_UniChar) byte;
- return 1;
- } else if (byte < 0xF0) {
- if (((ASC(str[1]) & 0xC0) == 0x80) && ((ASC(str[2]) & 0xC0) == 0x80)) {
- /* Three-byte-character lead byte followed by two trail bytes. */
-
- *chPtr = (Tcl_UniChar) (((byte & 0x0F) << 12) | ((ASC(str[1]) & 0x3F) << 6) | (ASC(str[2]) & 0x3F));
- return 3;
- }
- /* A three-byte-character lead-byte not followed by two trail-bytes represents itself. */
-
- *chPtr = (Tcl_UniChar) byte;
- return 1;
- }
-#if TCL_UTF_MAX > 3
- else {
- int ch, total, trail;
-
- total = totalBytes[byte];
- trail = total - 1;
- if (trail > 0) {
- ch = byte & (0x3F >> trail);
- do {
- str++;
- if ((ASC(*str) & 0xC0) != 0x80) {
- *chPtr = byte;
- return 1;
- }
- ch <<= 6;
- ch |= (ASC(*str) & 0x3F);
- trail--;
- } while (trail > 0);
- *chPtr = ch;
- return total;
- }
- }
-#endif
-
- *chPtr = (Tcl_UniChar) byte;
- return 1;
-}
-
-/********************************************************************/
-/* font cache functions */
-
-static int fontTest ( void *element, void *key )
-{
- font_t *a = (font_t *)element;
- fontkey_t *b = (fontkey_t *)key;
-
- return (strcmp(a->fontname, b->fontname) == 0 && a->ptsize == b->ptsize && a->angle == b->angle);
-}
-
-static void * fontFetch ( char **error, void *key )
-{
- TT_Error err;
- font_t *a;
- fontkey_t *b = (fontkey_t *)key;
- int i, n, map_found;
- short platform, encoding;
- TSRMLS_FETCH();
-
- a = (font_t *)pemalloc(sizeof(font_t), 1);
-#ifdef VIRTUAL_DIR
- /* a->fontname will be freed in fontRelease() later on */
- if (virtual_filepath(b->fontname, &a->fontname TSRMLS_CC)) {
- *error = "Could not find/open font";
- pefree(a, 1);
- return NULL;
- }
-#else
- a->fontname = (char *)pemalloc(strlen(b->fontname) + 1, 1);
- strcpy(a->fontname, b->fontname);
-#endif
- a->ptsize = b->ptsize;
- a->angle = b->angle;
- a->sin_a = sin(a->angle);
- a->cos_a = cos(a->angle);
- a->engine = b->engine;
- if ((err = TT_Open_Face(*b->engine, a->fontname, &a->face))) {
- if (err == TT_Err_Could_Not_Open_File) {
- *error = "Could not find/open font";
- } else {
- *error = "Could not read font";
- }
- pefree(a, 1);
- return NULL;
- }
- /* get face properties and allocate preload arrays */
- TT_Get_Face_Properties(a->face, &a->properties);
-
- /* create instance */
- if (TT_New_Instance(a->face, &a->instance)) {
- *error = "Could not create face instance";
- pefree(a, 1);
- return NULL;
- }
-
- if (TT_Set_Instance_Resolutions(a->instance, RESOLUTION, RESOLUTION)) {
- *error = "Could not set device resolutions";
- pefree(a, 1);
- return NULL;
- }
-
- if (TT_Set_Instance_CharSize(a->instance, (TT_F26Dot6)(a->ptsize*64))) {
- *error = "Could not set character size";
- pefree(a, 1);
- return NULL;
- }
-
- TT_Get_Instance_Metrics(a->instance, &a->imetrics);
-
- /* First, look for a Unicode charmap */
- n = TT_Get_CharMap_Count(a->face);
-
- for (i = 0; i < n; i++) {
- TT_Get_CharMap_ID(a->face, i, &platform, &encoding);
- if ((platform == 3 && encoding == 1) /* Windows Unicode */
- || (platform == 2 && encoding == 1)
- || (platform == 0)) { /* ?? Unicode */
- TT_Get_CharMap(a->face, i, &a->char_map_Unicode);
- a->have_char_map_Unicode = 1;
- map_found++;
- } else if (platform == 3 && encoding == 4) { /* Windows Big5 */
- TT_Get_CharMap(a->face, i, &a->char_map_Big5);
- a->have_char_map_Big5 = 1;
- map_found++;
- } else if (platform == 1 && encoding == 0) { /* Apple Roman */
- TT_Get_CharMap(a->face, i, &a->char_map_Roman);
- a->have_char_map_Roman = 1;
- map_found++;
- }
- }
-
- if (!map_found) {
- *error = "Unable to find a CharMap that I can handle";
- pefree(a, 1);
- return NULL;
- }
-
- a->matrix.xx = (TT_Fixed) (a->cos_a * (1<<16));
- a->matrix.yx = (TT_Fixed) (a->sin_a * (1<<16));
- a->matrix.xy = - a->matrix.yx;
- a->matrix.yy = a->matrix.xx;
-
- a->glyphCache = gdCacheCreate(GLYPHCACHESIZE, glyphTest, glyphFetch, glyphRelease);
-
- return (void *)a;
-}
-
-static void fontRelease( void *element )
-{
- font_t *a = (font_t *)element;
-
- gdCacheDelete(a->glyphCache);
- TT_Done_Instance(a->instance);
- TT_Close_Face(a->face);
- pefree(a->fontname, 1);
- pefree((char *)element, 1);
-}
-
-/********************************************************************/
-/* glyph cache functions */
-
-static int glyphTest ( void *element, void *key )
-{
- glyph_t *a = (glyph_t *)element;
- glyphkey_t *b = (glyphkey_t *)key;
-
- return (a->character == b->character && a->hinting == b->hinting && a->gray_render == b->gray_render);
-}
-
-static void * glyphFetch ( char **error, void *key )
-{
- glyph_t *a;
- glyphkey_t *b = (glyphkey_t *)key;
- short glyph_code;
- int flags, err;
- int crect[8], xmin, xmax, ymin, ymax;
- double cos_a, sin_a;
-
- a = (glyph_t *)pemalloc(sizeof(glyph_t), 1);
- a->character = b->character;
- a->hinting = b->hinting;
- a->gray_render = b->gray_render;
- a->oldx = a->oldy = 0;
-
- /* create glyph container */
- if ((TT_New_Glyph(b->font->face, &a->glyph))) {
- *error = "Could not create glyph container";
- pefree(a, 1);
- return NULL;
- }
-
- flags = TTLOAD_SCALE_GLYPH;
- if (a->hinting && b->font->angle == 0.0) {
- flags |= TTLOAD_HINT_GLYPH;
- }
- if (b->font->have_char_map_Unicode) {
- glyph_code = TT_Char_Index(b->font->char_map_Unicode, a->character);
- } else if (a->character < 161 && b->font->have_char_map_Roman) {
- glyph_code = TT_Char_Index(b->font->char_map_Roman, a->character);
- } else if ( b->font->have_char_map_Big5) {
- glyph_code = TT_Char_Index(b->font->char_map_Big5, a->character);
- }
- if ((err=TT_Load_Glyph(b->font->instance, a->glyph, glyph_code, flags))) {
- *error = "TT_Load_Glyph problem";
- pefree(a, 1);
- return NULL;
- }
-
- TT_Get_Glyph_Metrics(a->glyph, &a->metrics);
- if (b->font->angle != 0.0) {
- TT_Get_Glyph_Outline(a->glyph, &a->outline);
- TT_Transform_Outline(&a->outline, &b->font->matrix);
- }
-
- /* calculate bitmap size */
- xmin = a->metrics.bbox.xMin -64;
- ymin = a->metrics.bbox.yMin -64;
- xmax = a->metrics.bbox.xMax +64;
- ymax = a->metrics.bbox.yMax +64;
-
- cos_a = b->font->cos_a;
- sin_a = b->font->sin_a;
- crect[0] = (int)(xmin * cos_a - ymin * sin_a);
- crect[1] = (int)(xmin * sin_a + ymin * cos_a);
- crect[2] = (int)(xmax * cos_a - ymin * sin_a);
- crect[3] = (int)(xmax * sin_a + ymin * cos_a);
- crect[4] = (int)(xmax * cos_a - ymax * sin_a);
- crect[5] = (int)(xmax * sin_a + ymax * cos_a);
- crect[6] = (int)(xmin * cos_a - ymax * sin_a);
- crect[7] = (int)(xmin * sin_a + ymax * cos_a);
- a->xmin = MIN(MIN(crect[0], crect[2]), MIN(crect[4], crect[6]));
- a->xmax = MAX(MAX(crect[0], crect[2]), MAX(crect[4], crect[6]));
- a->ymin = MIN(MIN(crect[1], crect[3]), MIN(crect[5], crect[7]));
- a->ymax = MAX(MAX(crect[1], crect[3]), MAX(crect[5], crect[7]));
-
- /* allocate bitmap large enough for character */
- a->Bit.rows = (a->ymax - a->ymin + 32 + 64) / 64;
- a->Bit.width = (a->xmax - a->xmin + 32 + 64) / 64;
- a->Bit.flow = TT_Flow_Up;
- if (a->gray_render) {
- a->Bit.cols = a->Bit.width; /* 1 byte per pixel */
- } else {
- a->Bit.cols = (a->Bit.width + 7) / 8; /* 1 bit per pixel */
- }
- a->Bit.cols = (a->Bit.cols + 3) & ~3; /* pad to 32 bits */
- a->Bit.size = a->Bit.rows * a->Bit.cols; /* # of bytes in buffer */
- a->Bit.bitmap = NULL;
-
- a->bitmapCache = gdCacheCreate(BITMAPCACHESIZE, bitmapTest, bitmapFetch, bitmapRelease);
-
- return (void *)a;
-}
-
-static void glyphRelease( void *element )
-{
- glyph_t *a = (glyph_t *)element;
-
- gdCacheDelete(a->bitmapCache);
- TT_Done_Glyph(a->glyph);
- pefree((char *)element, 1);
-}
-
-/********************************************************************/
-/* bitmap cache functions */
-
-static int bitmapTest ( void *element, void *key )
-{
- bitmap_t *a = (bitmap_t *)element;
- bitmapkey_t *b = (bitmapkey_t *)key;
-
- if (a->xoffset == b->xoffset && a->yoffset == b->yoffset) {
- b->glyph->Bit.bitmap = a->bitmap;
- return TRUE;
- }
- return FALSE;
-}
-
-static void * bitmapFetch ( char **error, void *key )
-{
- bitmap_t *a;
- bitmapkey_t *b = (bitmapkey_t *)key;
-
- a = (bitmap_t *)pemalloc(sizeof(bitmap_t), 1);
- a->xoffset = b->xoffset;
- a->yoffset = b->yoffset;
-
- b->glyph->Bit.bitmap = a->bitmap = (char *)pemalloc(b->glyph->Bit.size, 1);
- memset(a->bitmap, 0, b->glyph->Bit.size);
- /* render glyph */
- if (b->glyph->gray_render) {
- TT_Get_Glyph_Pixmap(b->glyph->glyph, &b->glyph->Bit, a->xoffset, a->yoffset);
- } else {
- TT_Get_Glyph_Bitmap(b->glyph->glyph, &b->glyph->Bit, a->xoffset, a->yoffset);
- }
- return (void *)a;
-}
-
-static void bitmapRelease( void *element )
-{
- bitmap_t *a = (bitmap_t *)element;
-
- pefree(a->bitmap, 1);
- pefree((char *)element, 1);
-}
-
-/********************************************************************/
-/* tweencolor cache functions */
-
-static int tweenColorTest (void *element, void *key)
-{
- tweencolor_t *a = (tweencolor_t *)element;
- tweencolorkey_t *b = (tweencolorkey_t *)key;
-
- return (a->pixel == b->pixel && a->bgcolor == b->bgcolor && a->fgcolor == b->fgcolor && a->im == b->im);
-}
-
-static void * tweenColorFetch (char **error, void *key)
-{
- tweencolor_t *a;
- tweencolorkey_t *b = (tweencolorkey_t *)key;
- int pixel, npixel, bg, fg;
- gdImagePtr im;
-
- a = (tweencolor_t *)pemalloc(sizeof(tweencolor_t), 1);
- pixel = a->pixel = b->pixel;
- bg = a->bgcolor = b->bgcolor;
- fg = a->fgcolor = b->fgcolor;
- im = b->im;
-
- /* if fg is specified by a negative color idx, then don't antialias */
- if (fg < 0) {
- a->tweencolor = -fg;
- } else {
- npixel = NUMCOLORS - pixel;
- a->tweencolor = gdImageColorResolve(im,
- (pixel * im->red [fg] + npixel * im->red [bg]) / NUMCOLORS,
- (pixel * im->green[fg] + npixel * im->green[bg]) / NUMCOLORS,
- (pixel * im->blue [fg] + npixel * im->blue [bg]) / NUMCOLORS);
- }
- *error = NULL;
- return (void *)a;
-}
-
-static void tweenColorRelease(void *element)
-{
- pefree((char *)element, 1);
-}
-
-/********************************************************************/
-/* gdttfchar - render one character onto a gd image */
-
-static int OneTime = 0;
-static gdCache_head_t *tweenColorCache;
-
-char *
-gdttfchar(gdImage *im, int fg, font_t *font,
- int x, int y, /* string start pos in pixels */
- TT_F26Dot6 x1, TT_F26Dot6 y1, /* char start offset (*64) from x,y */
- TT_F26Dot6 *advance,
- TT_BBox **bbox,
- char **next)
-{
- int pc, ch, len;
- int row, col;
- int x2, y2; /* char start pos in pixels */
- int x3, y3; /* current pixel pos */
- unsigned char *pixel;
-
- glyph_t *glyph;
- glyphkey_t glyphkey;
- bitmapkey_t bitmapkey;
- tweencolor_t *tweencolor;
- tweencolorkey_t tweencolorkey;
-
- /****** set up tweenColorCache on first call ************/
- if (!OneTime) {
- tweenColorCache = gdCacheCreate(TWEENCOLORCACHESIZE, tweenColorTest, tweenColorFetch, tweenColorRelease);
- OneTime++;
- }
- /**************/
-
- if (font->have_char_map_Unicode) { /* use UTF-8 mapping from ASCII */
- len = gdTcl_UtfToUniChar(*next, &ch);
- *next += len;
- } else {
- /*
- * Big 5 mapping:
- * use "JIS-8 half-width katakana" coding from 8-bit characters. Ref:
- * ftp://ftp.ora.com/pub/examples/nutshell/ujip/doc/japan.inf-032092.sjs
- */
- ch = (**next) & 255; /* don't extend sign */
- (*next)++;
- if (ch >= 161 /* first code of JIS-8 pair */
- && **next) { /* don't advance past '\0' */
- ch = (ch * 256) + **next;
- (*next)++;
- }
- }
-
- glyphkey.character = ch;
- glyphkey.hinting = 1;
- /* if fg is specified by a negative color idx, then don't antialias */
- glyphkey.gray_render = ((font->ptsize < MINANTIALIASPTSIZE) || (fg < 0)) ? FALSE : TRUE;
- glyphkey.font = font;
- glyph = (glyph_t *)gdCacheGet(font->glyphCache, &glyphkey);
- if (!glyph) {
- return font->glyphCache->error;
- }
-
- *bbox = &glyph->metrics.bbox;
- *advance = glyph->metrics.advance;
-
- /* if null *im, or invalid color, then assume user just wants brect */
- if (!im || fg > 255 || fg < -255) {
- return (char *)NULL;
- }
-
- /* render (via cache) a bitmap for the current fractional offset */
- bitmapkey.xoffset = ((x1+32) & 63) - 32 - ((glyph->xmin+32) & -64);
- bitmapkey.yoffset = ((y1+32) & 63) - 32 - ((glyph->ymin+32) & -64);
- bitmapkey.glyph = glyph;
- gdCacheGet(glyph->bitmapCache, &bitmapkey);
-
- /* copy to gif, mapping colors */
- x2 = x + (((glyph->xmin+32) & -64) + ((x1+32) & -64)) / 64;
- y2 = y - (((glyph->ymin+32) & -64) + ((y1+32) & -64)) / 64;
- tweencolorkey.fgcolor = fg;
- tweencolorkey.im = im;
- for (row = 0; row < glyph->Bit.rows; row++) {
- if (glyph->gray_render) {
- pc = row * glyph->Bit.cols;
- } else {
- pc = row * glyph->Bit.cols * 8;
- }
- y3 = y2 - row;
- if (y3 >= im->sy || y3 < 0) {
- continue;
- }
- for (col = 0; col < glyph->Bit.width; col++, pc++) {
- if (glyph->gray_render) {
- tweencolorkey.pixel = *((unsigned char *)(glyph->Bit.bitmap) + pc);
- } else {
- tweencolorkey.pixel = (((*((unsigned char *)(glyph->Bit.bitmap) + pc/8)) << (pc%8))&128)?4:0;
- }
- /* if not background */
- if (tweencolorkey.pixel > 0) {
- x3 = x2 + col;
- if (x3 >= im->sx || x3 < 0) {
- continue;
- }
-#if HAVE_LIBGD20
- if (im->trueColor) {
- pixel = &im->tpixels[y3][x3];
- } else
-#endif
- {
-#if HAVE_LIBGD13
- pixel = &im->pixels[y3][x3];
-#else
- pixel = &im->pixels[x3][y3];
-#endif
- }
- tweencolorkey.bgcolor = *pixel;
- tweencolor = (tweencolor_t *)gdCacheGet(tweenColorCache, &tweencolorkey);
- *pixel = tweencolor->tweencolor;
- }
- }
- }
- return (char *)NULL;
-}
-
-/********************************************************************/
-/* gdttf - render a utf8 string onto a gd image */
-
-char * gdttf(gdImage *im, int *brect, int fg, char *fontname, double ptsize, double angle, int x, int y, char *str)
-{
- TT_F26Dot6 ur_x = 0, ur_y = 0, ll_x = 0, ll_y = 0;
- TT_F26Dot6 advance_x, advance_y, advance, x1, y1;
- TT_BBox *bbox;
- double sin_a, cos_a;
- int i=0, ch;
- font_t *font;
- fontkey_t fontkey;
- char *error, *next;
-
- /****** initialize font engine on first call ************/
- static gdCache_head_t *fontCache;
- static TT_Engine engine;
-
- if (!fontCache) {
- if (TT_Init_FreeType(&engine)) {
- return "Failure to initialize font engine";
- }
- fontCache = gdCacheCreate(FONTCACHESIZE, fontTest, fontFetch, fontRelease);
- }
- /**************/
-
- /* get the font (via font cache) */
- fontkey.fontname = fontname;
- fontkey.ptsize = ptsize;
- fontkey.angle = angle;
- fontkey.engine = &engine;
- font = (font_t *)gdCacheGet(fontCache, &fontkey);
- if (!font) {
- return fontCache->error;
- }
- sin_a = font->sin_a;
- cos_a = font->cos_a;
- advance_x = advance_y = 0;
-
- next = str;
- while (*next) {
- ch = *next;
-
- /* carriage returns */
- if (ch == '\r') {
- advance_x = 0;
- next++;
- continue;
- }
- /* newlines */
- if (ch == '\n') {
- advance_y -= (TT_F26Dot6)(font->imetrics.y_ppem * LINESPACE * 64);
- advance_y = (advance_y-32) & -64; /* round to next pixel row */
- next++;
- continue;
- }
-
- x1 = (TT_F26Dot6)(advance_x * cos_a - advance_y * sin_a);
- y1 = (TT_F26Dot6)(advance_x * sin_a + advance_y * cos_a);
-
- if ((error = gdttfchar(im, fg, font, x, y, x1, y1, &advance, &bbox, &next))) {
- return error;
- }
-
- if (!i++) { /* if first character, init BB corner values */
- ll_x = bbox->xMin;
- ll_y = bbox->yMin;
- ur_x = bbox->xMax;
- ur_y = bbox->yMax;
- } else {
- if (!advance_x) {
- ll_x = MIN(bbox->xMin, ll_x);
- }
- ll_y = MIN(advance_y + bbox->yMin, ll_y);
- ur_x = MAX(advance_x + bbox->xMax, ur_x);
- if (!advance_y) {
- ur_y = MAX(bbox->yMax, ur_y);
- }
- }
- advance_x += advance;
- }
-
- /* rotate bounding rectangle */
- brect[0] = (int)(ll_x * cos_a - ll_y * sin_a);
- brect[1] = (int)(ll_x * sin_a + ll_y * cos_a);
- brect[2] = (int)(ur_x * cos_a - ll_y * sin_a);
- brect[3] = (int)(ur_x * sin_a + ll_y * cos_a);
- brect[4] = (int)(ur_x * cos_a - ur_y * sin_a);
- brect[5] = (int)(ur_x * sin_a + ur_y * cos_a);
- brect[6] = (int)(ll_x * cos_a - ur_y * sin_a);
- brect[7] = (int)(ll_x * sin_a + ur_y * cos_a);
-
- /* scale, round and offset brect */
- i = 0;
- while (i < 8) {
- brect[i] = x + (brect[i] + 32) / 64;
- i++;
- brect[i] = y - (brect[i] + 32) / 64;
- i++;
- }
-
- return (char *)NULL;
-}
-
-#endif /* HAVE_LIBTTF */
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- */
diff --git a/ext/gd/gdttf.h b/ext/gd/gdttf.h
deleted file mode 100644
index 4f32129702..0000000000
--- a/ext/gd/gdttf.h
+++ /dev/null
@@ -1,16 +0,0 @@
-/* $Id$ */
-
-#ifdef _OSD_POSIX
-#ifndef APACHE
-#error On this EBCDIC platform, PHP is only supported as an Apache module.
-#else /*APACHE*/
-#ifndef CHARSET_EBCDIC
-#define CHARSET_EBCDIC /* this machine uses EBCDIC, not ASCII! */
-#endif
-#include "ebcdic.h"
-#endif /*APACHE*/
-#endif /*_OSD_POSIX*/
-
-char * gdttf(gdImage *im, int *brect, int fg, char *fontname,
- double ptsize, double angle, int x, int y, char *str);
-
diff --git a/ext/gd/libgd/README b/ext/gd/libgd/README
deleted file mode 100644
index c0333ef5c2..0000000000
--- a/ext/gd/libgd/README
+++ /dev/null
@@ -1,72 +0,0 @@
-This directory contains the GD library available from
-http://www.boutell.com/gd/
-
-The inclusion of this library with PHP is in response to the
-popularity of the GD extension and the GD library itself. We felt
-it would be worthwhile to make sure everyone had access to the
-features of GD and by bundling GD with PHP we have a known target to
-work against.
-
-In addition to the above, a number of motivated PHP hackers have
-expressed an interest in extending the functionality of the PHP-GD
-combination. By putting a version of GD into PHP CVS we have provided
-a sandbox for them to throw sand at each other in. Any and all
-improvements we make to the GD library will be contributed back to the
-original maintainers of this library at boutell.com.
-
-The following statement is from the original GD package:
-
- Credits and license terms
-
- In order to resolve any possible confusion regarding the authorship of
- gd, the following copyright statement covers all of the authors who
- have required such a statement. _If you are aware of any oversights in
- this copyright notice, please contact Thomas Boutell who will be
- pleased to correct them._
-
-COPYRIGHT STATEMENT FOLLOWS THIS LINE
-
- Portions copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001
- by Cold Spring Harbor Laboratory. Funded under Grant P41-RR02188 by
- the National Institutes of Health.
-
- Portions copyright 1996, 1997, 1998, 1999, 2000, 2001 by
- Boutell.Com, Inc.
-
- Portions relating to GD2 format copyright 1999, 2000 Philip Warner.
-
- Portions relating to PNG copyright 1999, 2000 Greg Roelofs.
-
- Portions relating to libttf copyright 1999, 2000 John Ellson
- (ellson@lucent.com).
-
- Portions relating to JPEG and to color quantization copyright 2000,
- Doug Becker and copyright (C) 1994-1998, Thomas G. Lane. This
- software is based in part on the work of the Independent JPEG
- Group. See the file README-JPEG.TXT for more information.
-
- Portions relating to WBMP copyright 2000 Maurice Szmurlo and Johan
- Van den Brande.
-
- _Permission has been granted to copy, distribute and modify gd in
- any context without fee, including a commercial application,
- provided that this notice is present in user-accessible supporting
- documentation._
-
- This does not affect your ownership of the derived work itself, and
- the intent is to assure proper credit for the authors of gd, not to
- interfere with your productive use of gd. If you have questions,
- ask. "Derived works" includes all programs that utilize the
- library. Credit must be given in user-accessible documentation.
-
- _This software is provided "AS IS."_ The copyright holders disclaim
- all warranties, either express or implied, including but not
- limited to implied warranties of merchantability and fitness for a
- particular purpose, with respect to this code and accompanying
- documentation.
-
- Although their code does not appear in gd 2.0.1, the authors wish
- to thank David Koblas, David Rowley, and Hutchison Avenue Software
- Corporation for their prior contributions.
-
-END OF COPYRIGHT STATEMENT
diff --git a/ext/gd/libgd/gd.c b/ext/gd/libgd/gd.c
deleted file mode 100644
index c127928cba..0000000000
--- a/ext/gd/libgd/gd.c
+++ /dev/null
@@ -1,3813 +0,0 @@
-#include <stdio.h>
-#include <math.h>
-#include <string.h>
-#include <stdlib.h>
-#include "gd.h"
-#include "gdhelpers.h"
-
-#include "php.h"
-
-#ifdef _MSC_VER
-# if _MSC_VER >= 1300
-/* in MSVC.NET these are available but only for __cplusplus and not _MSC_EXTENSIONS */
-# if !defined(_MSC_EXTENSIONS) && defined(__cplusplus)
-# define HAVE_FABSF 1
-extern float fabsf(float x);
-# define HAVE_FLOORF 1
-extern float floorf(float x);
-# endif /*MSVC.NET */
-# endif /* MSC */
-#endif
-#ifndef HAVE_FABSF
-# define HAVE_FABSF 0
-#endif
-#ifndef HAVE_FLOORF
-# define HAVE_FLOORF 0
-#endif
-#if HAVE_FABSF == 0
-/* float fabsf(float x); */
-# define fabsf(x) ((float)(fabs(x)))
-#endif
-#if HAVE_FLOORF == 0
-/* float floorf(float x);*/
-#define floorf(x) ((float)(floor(x)))
-#endif
-
-#ifdef _OSD_POSIX /* BS2000 uses the EBCDIC char set instead of ASCII */
-#define CHARSET_EBCDIC
-#define __attribute__(any) /*nothing */
-#endif
-/*_OSD_POSIX*/
-
-#ifndef CHARSET_EBCDIC
-#define ASC(ch) ch
-#else /*CHARSET_EBCDIC */
-#define ASC(ch) gd_toascii[(unsigned char)ch]
-static const unsigned char gd_toascii[256] =
-{
-/*00 */ 0x00, 0x01, 0x02, 0x03, 0x85, 0x09, 0x86, 0x7f,
- 0x87, 0x8d, 0x8e, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /*................ */
-/*10 */ 0x10, 0x11, 0x12, 0x13, 0x8f, 0x0a, 0x08, 0x97,
- 0x18, 0x19, 0x9c, 0x9d, 0x1c, 0x1d, 0x1e, 0x1f, /*................ */
-/*20 */ 0x80, 0x81, 0x82, 0x83, 0x84, 0x92, 0x17, 0x1b,
- 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x05, 0x06, 0x07, /*................ */
-/*30 */ 0x90, 0x91, 0x16, 0x93, 0x94, 0x95, 0x96, 0x04,
- 0x98, 0x99, 0x9a, 0x9b, 0x14, 0x15, 0x9e, 0x1a, /*................ */
-/*40 */ 0x20, 0xa0, 0xe2, 0xe4, 0xe0, 0xe1, 0xe3, 0xe5,
- 0xe7, 0xf1, 0x60, 0x2e, 0x3c, 0x28, 0x2b, 0x7c, /* .........`.<(+| */
-/*50 */ 0x26, 0xe9, 0xea, 0xeb, 0xe8, 0xed, 0xee, 0xef,
- 0xec, 0xdf, 0x21, 0x24, 0x2a, 0x29, 0x3b, 0x9f, /*&.........!$*);. */
-/*60 */ 0x2d, 0x2f, 0xc2, 0xc4, 0xc0, 0xc1, 0xc3, 0xc5,
- 0xc7, 0xd1, 0x5e, 0x2c, 0x25, 0x5f, 0x3e, 0x3f,
-/*-/........^,%_>?*/
-/*70 */ 0xf8, 0xc9, 0xca, 0xcb, 0xc8, 0xcd, 0xce, 0xcf,
- 0xcc, 0xa8, 0x3a, 0x23, 0x40, 0x27, 0x3d, 0x22, /*..........:#@'=" */
-/*80 */ 0xd8, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67,
- 0x68, 0x69, 0xab, 0xbb, 0xf0, 0xfd, 0xfe, 0xb1, /*.abcdefghi...... */
-/*90 */ 0xb0, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, 0x70,
- 0x71, 0x72, 0xaa, 0xba, 0xe6, 0xb8, 0xc6, 0xa4, /*.jklmnopqr...... */
-/*a0 */ 0xb5, 0xaf, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78,
- 0x79, 0x7a, 0xa1, 0xbf, 0xd0, 0xdd, 0xde, 0xae, /*..stuvwxyz...... */
-/*b0 */ 0xa2, 0xa3, 0xa5, 0xb7, 0xa9, 0xa7, 0xb6, 0xbc,
- 0xbd, 0xbe, 0xac, 0x5b, 0x5c, 0x5d, 0xb4, 0xd7, /*...........[\].. */
-/*c0 */ 0xf9, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47,
- 0x48, 0x49, 0xad, 0xf4, 0xf6, 0xf2, 0xf3, 0xf5, /*.ABCDEFGHI...... */
-/*d0 */ 0xa6, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, 0x50,
- 0x51, 0x52, 0xb9, 0xfb, 0xfc, 0xdb, 0xfa, 0xff, /*.JKLMNOPQR...... */
-/*e0 */ 0xd9, 0xf7, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58,
- 0x59, 0x5a, 0xb2, 0xd4, 0xd6, 0xd2, 0xd3, 0xd5, /*..STUVWXYZ...... */
-/*f0 */ 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,
- 0x38, 0x39, 0xb3, 0x7b, 0xdc, 0x7d, 0xda, 0x7e /*0123456789.{.}.~ */
-};
-#endif /*CHARSET_EBCDIC */
-
-/* 2.0.10: cast instead of floor() yields 35% performance improvement. Thanks to John Buckman. */
-#define floor_cast(exp) ((long) exp)
-
-extern int gdCosT[];
-extern int gdSinT[];
-
-static void gdImageBrushApply(gdImagePtr im, int x, int y);
-static void gdImageTileApply(gdImagePtr im, int x, int y);
-static void gdImageAntiAliasedApply(gdImagePtr im, int x, int y);
-static int gdLayerOverlay(int dst, int src);
-static int gdAlphaOverlayColor(int src, int dst, int max);
-int gdImageGetTrueColorPixel(gdImagePtr im, int x, int y);
-
-void php_gd_error_ex(int type, const char *format, ...)
-{
- va_list args;
-
- TSRMLS_FETCH();
-
- va_start(args, format);
- php_verror(NULL, "", type, format, args TSRMLS_CC);
- va_end(args);
-}
-
-void php_gd_error(const char *format, ...)
-{
- va_list args;
-
- TSRMLS_FETCH();
-
- va_start(args, format);
- php_verror(NULL, "", E_WARNING, format, args TSRMLS_CC);
- va_end(args);
-}
-
-gdImagePtr gdImageCreate (int sx, int sy)
-{
- int i;
- gdImagePtr im;
- im = (gdImage *) gdMalloc(sizeof(gdImage));
- memset(im, 0, sizeof(gdImage));
- /* Row-major ever since gd 1.3 */
- im->pixels = (unsigned char **) gdMalloc(sizeof(unsigned char *) * sy);
- im->AA_opacity = (unsigned char **) gdMalloc(sizeof(unsigned char *) * sy);
- im->polyInts = 0;
- im->polyAllocated = 0;
- im->brush = 0;
- im->tile = 0;
- im->style = 0;
- for (i = 0; i < sy; i++) {
- /* Row-major ever since gd 1.3 */
- im->pixels[i] = (unsigned char *) gdCalloc(sx, sizeof(unsigned char));
- im->AA_opacity[i] = (unsigned char *) gdCalloc(sx, sizeof(unsigned char));
- }
- im->sx = sx;
- im->sy = sy;
- im->colorsTotal = 0;
- im->transparent = (-1);
- im->interlace = 0;
- im->thick = 1;
- im->AA = 0;
- im->AA_polygon = 0;
- for (i = 0; i < gdMaxColors; i++) {
- im->open[i] = 1;
- im->red[i] = 0;
- im->green[i] = 0;
- im->blue[i] = 0;
- }
- im->trueColor = 0;
- im->tpixels = 0;
- im->cx1 = 0;
- im->cy1 = 0;
- im->cx2 = im->sx - 1;
- im->cy2 = im->sy - 1;
- return im;
-}
-
-gdImagePtr gdImageCreateTrueColor (int sx, int sy)
-{
- int i;
- gdImagePtr im;
- im = (gdImage *) gdMalloc(sizeof(gdImage));
- memset(im, 0, sizeof(gdImage));
- im->tpixels = (int **) gdMalloc(sizeof(int *) * sy);
- im->AA_opacity = (unsigned char **) gdMalloc(sizeof(unsigned char *) * sy);
- im->polyInts = 0;
- im->polyAllocated = 0;
- im->brush = 0;
- im->tile = 0;
- im->style = 0;
- for (i = 0; i < sy; i++) {
- im->tpixels[i] = (int *) gdCalloc(sx, sizeof(int));
- im->AA_opacity[i] = (unsigned char *) gdCalloc(sx, sizeof(unsigned char));
- }
- im->sx = sx;
- im->sy = sy;
- im->transparent = (-1);
- im->interlace = 0;
- im->trueColor = 1;
- /* 2.0.2: alpha blending is now on by default, and saving of alpha is
- * off by default. This allows font antialiasing to work as expected
- * on the first try in JPEGs -- quite important -- and also allows
- * for smaller PNGs when saving of alpha channel is not really
- * desired, which it usually isn't!
- */
- im->saveAlphaFlag = 0;
- im->alphaBlendingFlag = 1;
- im->thick = 1;
- im->AA = 0;
- im->AA_polygon = 0;
- im->cx1 = 0;
- im->cy1 = 0;
- im->cx2 = im->sx - 1;
- im->cy2 = im->sy - 1;
- return im;
-}
-
-void gdImageDestroy (gdImagePtr im)
-{
- int i;
- if (im->pixels) {
- for (i = 0; i < im->sy; i++) {
- gdFree(im->pixels[i]);
- }
- gdFree(im->pixels);
- }
- if (im->tpixels) {
- for (i = 0; i < im->sy; i++) {
- gdFree(im->tpixels[i]);
- }
- gdFree(im->tpixels);
- }
- if (im->AA_opacity) {
- for (i = 0; i < im->sy; i++) {
- gdFree(im->AA_opacity[i]);
- }
- gdFree(im->AA_opacity);
- }
- if (im->polyInts) {
- gdFree(im->polyInts);
- }
- if (im->style) {
- gdFree(im->style);
- }
- gdFree(im);
-}
-
-int gdImageColorClosest (gdImagePtr im, int r, int g, int b)
-{
- return gdImageColorClosestAlpha (im, r, g, b, gdAlphaOpaque);
-}
-
-int gdImageColorClosestAlpha (gdImagePtr im, int r, int g, int b, int a)
-{
- int i;
- long rd, gd, bd, ad;
- int ct = (-1);
- int first = 1;
- long mindist = 0;
-
- if (im->trueColor) {
- return gdTrueColorAlpha(r, g, b, a);
- }
- for (i = 0; i < im->colorsTotal; i++) {
- long dist;
- if (im->open[i]) {
- continue;
- }
- rd = im->red[i] - r;
- gd = im->green[i] - g;
- bd = im->blue[i] - b;
- /* gd 2.02: whoops, was - b (thanks to David Marwood) */
- ad = im->alpha[i] - a;
- dist = rd * rd + gd * gd + bd * bd + ad * ad;
- if (first || (dist < mindist)) {
- mindist = dist;
- ct = i;
- first = 0;
- }
- }
- return ct;
-}
-
-/* This code is taken from http://www.acm.org/jgt/papers/SmithLyons96/hwb_rgb.html, an article
- * on colour conversion to/from RBG and HWB colour systems.
- * It has been modified to return the converted value as a * parameter.
- */
-
-#define RETURN_HWB(h, w, b) {HWB->H = h; HWB->W = w; HWB->B = b; return HWB;}
-#define RETURN_RGB(r, g, b) {RGB->R = r; RGB->G = g; RGB->B = b; return RGB;}
-#define HWB_UNDEFINED -1
-#define SETUP_RGB(s, r, g, b) {s.R = r/255.0f; s.G = g/255.0f; s.B = b/255.0f;}
-
-#ifndef MIN
-#define MIN(a,b) ((a)<(b)?(a):(b))
-#endif
-#define MIN3(a,b,c) ((a)<(b)?(MIN(a,c)):(MIN(b,c)))
-#ifndef MAX
-#define MAX(a,b) ((a)<(b)?(b):(a))
-#endif
-#define MAX3(a,b,c) ((a)<(b)?(MAX(b,c)):(MAX(a,c)))
-
-
-/*
- * Theoretically, hue 0 (pure red) is identical to hue 6 in these transforms. Pure
- * red always maps to 6 in this implementation. Therefore UNDEFINED can be
- * defined as 0 in situations where only unsigned numbers are desired.
- */
-typedef struct
-{
- float R, G, B;
-}
-RGBType;
-typedef struct
-{
- float H, W, B;
-}
-HWBType;
-
-static HWBType * RGB_to_HWB (RGBType RGB, HWBType * HWB)
-{
- /*
- * RGB are each on [0, 1]. W and B are returned on [0, 1] and H is
- * returned on [0, 6]. Exception: H is returned UNDEFINED if W == 1 - B.
- */
-
- float R = RGB.R, G = RGB.G, B = RGB.B, w, v, b, f;
- int i;
-
- w = MIN3 (R, G, B);
- v = MAX3 (R, G, B);
- b = 1 - v;
- if (v == w) {
- RETURN_HWB(HWB_UNDEFINED, w, b);
- }
- f = (R == w) ? G - B : ((G == w) ? B - R : R - G);
- i = (R == w) ? 3 : ((G == w) ? 5 : 1);
-
- RETURN_HWB(i - f / (v - w), w, b);
-}
-
-static float HWB_Diff (int r1, int g1, int b1, int r2, int g2, int b2)
-{
- RGBType RGB1, RGB2;
- HWBType HWB1, HWB2;
- float diff;
-
- SETUP_RGB(RGB1, r1, g1, b1);
- SETUP_RGB(RGB2, r2, g2, b2);
-
- RGB_to_HWB(RGB1, &HWB1);
- RGB_to_HWB(RGB2, &HWB2);
-
- /*
- * I made this bit up; it seems to produce OK results, and it is certainly
- * more visually correct than the current RGB metric. (PJW)
- */
-
- if ((HWB1.H == HWB_UNDEFINED) || (HWB2.H == HWB_UNDEFINED)) {
- diff = 0.0f; /* Undefined hues always match... */
- } else {
- diff = fabsf(HWB1.H - HWB2.H);
- if (diff > 3.0f) {
- diff = 6.0f - diff; /* Remember, it's a colour circle */
- }
- }
-
- diff = diff * diff + (HWB1.W - HWB2.W) * (HWB1.W - HWB2.W) + (HWB1.B - HWB2.B) * (HWB1.B - HWB2.B);
-
- return diff;
-}
-
-
-#if 0
-/*
- * This is not actually used, but is here for completeness, in case someone wants to
- * use the HWB stuff for anything else...
- */
-static RGBType * HWB_to_RGB (HWBType HWB, RGBType * RGB)
-{
- /*
- * H is given on [0, 6] or UNDEFINED. W and B are given on [0, 1].
- * RGB are each returned on [0, 1].
- */
-
- float h = HWB.H, w = HWB.W, b = HWB.B, v, n, f;
- int i;
-
- v = 1 - b;
- if (h == HWB_UNDEFINED) {
- RETURN_RGB(v, v, v);
- }
- i = floor(h);
- f = h - i;
- if (i & 1) {
- f = 1 - f; /* if i is odd */
- }
- n = w + f * (v - w); /* linear interpolation between w and v */
- switch (i) {
- case 6:
- case 0:
- RETURN_RGB(v, n, w);
- case 1:
- RETURN_RGB(n, v, w);
- case 2:
- RETURN_RGB(w, v, n);
- case 3:
- RETURN_RGB(w, n, v);
- case 4:
- RETURN_RGB(n, w, v);
- case 5:
- RETURN_RGB(v, w, n);
- }
-
- return RGB;
-}
-#endif
-
-int gdImageColorClosestHWB (gdImagePtr im, int r, int g, int b)
-{
- int i;
- /* long rd, gd, bd; */
- int ct = (-1);
- int first = 1;
- float mindist = 0;
- if (im->trueColor) {
- return gdTrueColor(r, g, b);
- }
- for (i = 0; i < im->colorsTotal; i++) {
- float dist;
- if (im->open[i]) {
- continue;
- }
- dist = HWB_Diff(im->red[i], im->green[i], im->blue[i], r, g, b);
- if (first || (dist < mindist)) {
- mindist = dist;
- ct = i;
- first = 0;
- }
- }
- return ct;
-}
-
-int gdImageColorExact (gdImagePtr im, int r, int g, int b)
-{
- return gdImageColorExactAlpha (im, r, g, b, gdAlphaOpaque);
-}
-
-int gdImageColorExactAlpha (gdImagePtr im, int r, int g, int b, int a)
-{
- int i;
- if (im->trueColor) {
- return gdTrueColorAlpha(r, g, b, a);
- }
- for (i = 0; i < im->colorsTotal; i++) {
- if (im->open[i]) {
- continue;
- }
- if ((im->red[i] == r) && (im->green[i] == g) && (im->blue[i] == b) && (im->alpha[i] == a)) {
- return i;
- }
- }
- return -1;
-}
-
-int gdImageColorAllocate (gdImagePtr im, int r, int g, int b)
-{
- return gdImageColorAllocateAlpha (im, r, g, b, gdAlphaOpaque);
-}
-
-int gdImageColorAllocateAlpha (gdImagePtr im, int r, int g, int b, int a)
-{
- int i;
- int ct = (-1);
- if (im->trueColor) {
- return gdTrueColorAlpha(r, g, b, a);
- }
- for (i = 0; i < im->colorsTotal; i++) {
- if (im->open[i]) {
- ct = i;
- break;
- }
- }
- if (ct == (-1)) {
- ct = im->colorsTotal;
- if (ct == gdMaxColors) {
- return -1;
- }
- im->colorsTotal++;
- }
- im->red[ct] = r;
- im->green[ct] = g;
- im->blue[ct] = b;
- im->alpha[ct] = a;
- im->open[ct] = 0;
-
- return ct;
-}
-
-/*
- * gdImageColorResolve is an alternative for the code fragment:
- *
- * if ((color=gdImageColorExact(im,R,G,B)) < 0)
- * if ((color=gdImageColorAllocate(im,R,G,B)) < 0)
- * color=gdImageColorClosest(im,R,G,B);
- *
- * in a single function. Its advantage is that it is guaranteed to
- * return a color index in one search over the color table.
- */
-
-int gdImageColorResolve (gdImagePtr im, int r, int g, int b)
-{
- return gdImageColorResolveAlpha(im, r, g, b, gdAlphaOpaque);
-}
-
-int gdImageColorResolveAlpha (gdImagePtr im, int r, int g, int b, int a)
-{
- int c;
- int ct = -1;
- int op = -1;
- long rd, gd, bd, ad, dist;
- long mindist = 4 * 255 * 255; /* init to max poss dist */
- if (im->trueColor)
- {
- return gdTrueColorAlpha (r, g, b, a);
- }
-
- for (c = 0; c < im->colorsTotal; c++)
- {
- if (im->open[c])
- {
- op = c; /* Save open slot */
- continue; /* Color not in use */
- }
- if (c == im->transparent)
- {
- /* don't ever resolve to the color that has
- * been designated as the transparent color */
- continue;
- }
- rd = (long) (im->red[c] - r);
- gd = (long) (im->green[c] - g);
- bd = (long) (im->blue[c] - b);
- ad = (long) (im->alpha[c] - a);
- dist = rd * rd + gd * gd + bd * bd + ad * ad;
- if (dist < mindist)
- {
- if (dist == 0)
- {
- return c; /* Return exact match color */
- }
- mindist = dist;
- ct = c;
- }
- }
- /* no exact match. We now know closest, but first try to allocate exact */
- if (op == -1)
- {
- op = im->colorsTotal;
- if (op == gdMaxColors)
- { /* No room for more colors */
- return ct; /* Return closest available color */
- }
- im->colorsTotal++;
- }
- im->red[op] = r;
- im->green[op] = g;
- im->blue[op] = b;
- im->alpha[op] = a;
- im->open[op] = 0;
- return op; /* Return newly allocated color */
-}
-
-void gdImageColorDeallocate (gdImagePtr im, int color)
-{
- if (im->trueColor) {
- return;
- }
- /* Mark it open. */
- im->open[color] = 1;
-}
-
-void gdImageColorTransparent (gdImagePtr im, int color)
-{
- if (!im->trueColor) {
- if (im->transparent != -1) {
- im->alpha[im->transparent] = gdAlphaOpaque;
- }
- if (color > -1 && color<im->colorsTotal && color<=gdMaxColors) {
- im->alpha[color] = gdAlphaTransparent;
- } else {
- return;
- }
- }
- im->transparent = color;
-}
-
-void gdImagePaletteCopy (gdImagePtr to, gdImagePtr from)
-{
- int i;
- int x, y, p;
- int xlate[256];
- if (to->trueColor || from->trueColor) {
- return;
- }
-
- for (i = 0; i < 256; i++) {
- xlate[i] = -1;
- }
-
- for (x = 0; x < to->sx; x++) {
- for (y = 0; y < to->sy; y++) {
- p = gdImageGetPixel(to, x, y);
- if (xlate[p] == -1) {
- /* This ought to use HWB, but we don't have an alpha-aware version of that yet. */
- xlate[p] = gdImageColorClosestAlpha (from, to->red[p], to->green[p], to->blue[p], to->alpha[p]);
- }
- gdImageSetPixel(to, x, y, xlate[p]);
- }
- }
-
- for (i = 0; i < from->colorsTotal; i++) {
- to->red[i] = from->red[i];
- to->blue[i] = from->blue[i];
- to->green[i] = from->green[i];
- to->alpha[i] = from->alpha[i];
- to->open[i] = 0;
- }
-
- for (i = from->colorsTotal; i < to->colorsTotal; i++) {
- to->open[i] = 1;
- }
-
- to->colorsTotal = from->colorsTotal;
-}
-
-/* 2.0.10: before the drawing routines, some code to clip points that are
- * outside the drawing window. Nick Atty (nick@canalplan.org.uk)
- *
- * This is the Sutherland Hodgman Algorithm, as implemented by
- * Duvanenko, Robbins and Gyurcsik - SH(DRG) for short. See Dr Dobb's
- * Journal, January 1996, pp107-110 and 116-117
- *
- * Given the end points of a line, and a bounding rectangle (which we
- * know to be from (0,0) to (SX,SY)), adjust the endpoints to be on
- * the edges of the rectangle if the line should be drawn at all,
- * otherwise return a failure code
- */
-
-/* this does "one-dimensional" clipping: note that the second time it
- * is called, all the x parameters refer to height and the y to width
- * - the comments ignore this (if you can understand it when it's
- * looking at the X parameters, it should become clear what happens on
- * the second call!) The code is simplified from that in the article,
- * as we know that gd images always start at (0,0)
- */
-
-static int clip_1d(int *x0, int *y0, int *x1, int *y1, int maxdim) {
- double m; /* gradient of line */
-
- if (*x0 < 0) { /* start of line is left of window */
- if(*x1 < 0) { /* as is the end, so the line never cuts the window */
- return 0;
- }
- m = (*y1 - *y0)/(double)(*x1 - *x0); /* calculate the slope of the line */
- /* adjust x0 to be on the left boundary (ie to be zero), and y0 to match */
- *y0 -= (int)(m * *x0);
- *x0 = 0;
- /* now, perhaps, adjust the far end of the line as well */
- if (*x1 > maxdim) {
- *y1 += (int)(m * (maxdim - *x1));
- *x1 = maxdim;
- }
- return 1;
- }
- if (*x0 > maxdim) { /* start of line is right of window - complement of above */
- if (*x1 > maxdim) { /* as is the end, so the line misses the window */
- return 0;
- }
- m = (*y1 - *y0)/(double)(*x1 - *x0); /* calculate the slope of the line */
- *y0 += (int)(m * (maxdim - *x0)); /* adjust so point is on the right boundary */
- *x0 = maxdim;
- /* now, perhaps, adjust the end of the line */
- if (*x1 < 0) {
- *y1 -= (int)(m * *x1);
- *x1 = 0;
- }
- return 1;
- }
- /* the final case - the start of the line is inside the window */
- if (*x1 > maxdim) { /* other end is outside to the right */
- m = (*y1 - *y0)/(double)(*x1 - *x0); /* calculate the slope of the line */
- *y1 += (int)(m * (maxdim - *x1));
- *x1 = maxdim;
- return 1;
- }
- if (*x1 < 0) { /* other end is outside to the left */
- m = (*y1 - *y0)/(double)(*x1 - *x0); /* calculate the slope of the line */
- *y1 -= (int)(m * *x1);
- *x1 = 0;
- return 1;
- }
- /* only get here if both points are inside the window */
- return 1;
-}
-
-void gdImageSetPixel (gdImagePtr im, int x, int y, int color)
-{
- int p;
- switch (color) {
- case gdStyled:
- if (!im->style) {
- /* Refuse to draw if no style is set. */
- return;
- } else {
- p = im->style[im->stylePos++];
- }
- if (p != gdTransparent) {
- gdImageSetPixel(im, x, y, p);
- }
- im->stylePos = im->stylePos % im->styleLength;
- break;
- case gdStyledBrushed:
- if (!im->style) {
- /* Refuse to draw if no style is set. */
- return;
- }
- p = im->style[im->stylePos++];
- if (p != gdTransparent && p != 0) {
- gdImageSetPixel(im, x, y, gdBrushed);
- }
- im->stylePos = im->stylePos % im->styleLength;
- break;
- case gdBrushed:
- gdImageBrushApply(im, x, y);
- break;
- case gdTiled:
- gdImageTileApply(im, x, y);
- break;
- case gdAntiAliased:
- gdImageAntiAliasedApply(im, x, y);
- break;
- default:
- if (gdImageBoundsSafe(im, x, y)) {
- if (im->trueColor) {
- switch (im->alphaBlendingFlag) {
- default:
- case gdEffectReplace:
- im->tpixels[y][x] = color;
- break;
- case gdEffectAlphaBlend:
- im->tpixels[y][x] = gdAlphaBlend(im->tpixels[y][x], color);
- break;
- case gdEffectNormal:
- im->tpixels[y][x] = gdAlphaBlend(im->tpixels[y][x], color);
- break;
- case gdEffectOverlay :
- im->tpixels[y][x] = gdLayerOverlay(im->tpixels[y][x], color);
- break;
- }
- } else {
- im->pixels[y][x] = color;
- }
- }
- break;
- }
-}
-
-int gdImageGetTrueColorPixel (gdImagePtr im, int x, int y)
-{
- int p = gdImageGetPixel(im, x, y);
-
- if (!im->trueColor) {
- return gdTrueColorAlpha(im->red[p], im->green[p], im->blue[p], (im->transparent == p) ? gdAlphaTransparent : gdAlphaOpaque);
- } else {
- return p;
- }
-}
-
-static void gdImageBrushApply (gdImagePtr im, int x, int y)
-{
- int lx, ly;
- int hy, hx;
- int x1, y1, x2, y2;
- int srcx, srcy;
-
- if (!im->brush) {
- return;
- }
-
- hy = gdImageSY(im->brush) / 2;
- y1 = y - hy;
- y2 = y1 + gdImageSY(im->brush);
- hx = gdImageSX(im->brush) / 2;
- x1 = x - hx;
- x2 = x1 + gdImageSX(im->brush);
- srcy = 0;
-
- if (im->trueColor) {
- if (im->brush->trueColor) {
- for (ly = y1; ly < y2; ly++) {
- srcx = 0;
- for (lx = x1; (lx < x2); lx++) {
- int p;
- p = gdImageGetTrueColorPixel(im->brush, srcx, srcy);
- /* 2.0.9, Thomas Winzig: apply simple full transparency */
- if (p != gdImageGetTransparent(im->brush)) {
- gdImageSetPixel(im, lx, ly, p);
- }
- srcx++;
- }
- srcy++;
- }
- } else {
- /* 2.0.12: Brush palette, image truecolor (thanks to Thorben Kundinger for pointing out the issue) */
- for (ly = y1; ly < y2; ly++) {
- srcx = 0;
- for (lx = x1; lx < x2; lx++) {
- int p, tc;
- p = gdImageGetPixel(im->brush, srcx, srcy);
- tc = gdImageGetTrueColorPixel(im->brush, srcx, srcy);
- /* 2.0.9, Thomas Winzig: apply simple full transparency */
- if (p != gdImageGetTransparent(im->brush)) {
- gdImageSetPixel(im, lx, ly, tc);
- }
- srcx++;
- }
- srcy++;
- }
- }
- } else {
- for (ly = y1; ly < y2; ly++) {
- srcx = 0;
- for (lx = x1; lx < x2; lx++) {
- int p;
- p = gdImageGetPixel(im->brush, srcx, srcy);
- /* Allow for non-square brushes! */
- if (p != gdImageGetTransparent(im->brush)) {
- /* Truecolor brush. Very slow on a palette destination. */
- if (im->brush->trueColor) {
- gdImageSetPixel(im, lx, ly, gdImageColorResolveAlpha(im, gdTrueColorGetRed(p),
- gdTrueColorGetGreen(p),
- gdTrueColorGetBlue(p),
- gdTrueColorGetAlpha(p)));
- } else {
- gdImageSetPixel(im, lx, ly, im->brushColorMap[p]);
- }
- }
- srcx++;
- }
- srcy++;
- }
- }
-}
-
-static void gdImageTileApply (gdImagePtr im, int x, int y)
-{
- int srcx, srcy;
- int p;
- if (!im->tile) {
- return;
- }
- srcx = x % gdImageSX(im->tile);
- srcy = y % gdImageSY(im->tile);
- if (im->trueColor) {
- p = gdImageGetTrueColorPixel(im->tile, srcx, srcy);
- gdImageSetPixel(im, x, y, p);
- } else {
- p = gdImageGetPixel(im->tile, srcx, srcy);
- /* Allow for transparency */
- if (p != gdImageGetTransparent(im->tile)) {
- if (im->tile->trueColor) {
- /* Truecolor tile. Very slow on a palette destination. */
- gdImageSetPixel(im, x, y, gdImageColorResolveAlpha(im,
- gdTrueColorGetRed(p),
- gdTrueColorGetGreen(p),
- gdTrueColorGetBlue(p),
- gdTrueColorGetAlpha(p)));
- } else {
- gdImageSetPixel(im, x, y, im->tileColorMap[p]);
- }
- }
- }
-}
-
-
-static int gdImageTileGet (gdImagePtr im, int x, int y)
-{
- int srcx, srcy;
- int tileColor,p;
- if (!im->tile) {
- return -1;
- }
- srcx = x % gdImageSX(im->tile);
- srcy = y % gdImageSY(im->tile);
- p = gdImageGetPixel(im->tile, srcx, srcy);
-
- if (im->trueColor) {
- if (im->tile->trueColor) {
- tileColor = p;
- } else {
- tileColor = gdTrueColorAlpha( gdImageRed(im->tile,p), gdImageGreen(im->tile,p), gdImageBlue (im->tile,p), gdImageAlpha (im->tile,p));
- }
- } else {
- if (im->tile->trueColor) {
- tileColor = gdImageColorResolveAlpha(im, gdTrueColorGetRed (p), gdTrueColorGetGreen (p), gdTrueColorGetBlue (p), gdTrueColorGetAlpha (p));
- } else {
- tileColor = p;
- tileColor = gdImageColorResolveAlpha(im, gdImageRed (im->tile,p), gdImageGreen (im->tile,p), gdImageBlue (im->tile,p), gdImageAlpha (im->tile,p));
- }
- }
- return tileColor;
-}
-
-
-static void gdImageAntiAliasedApply (gdImagePtr im, int px, int py)
-{
- float p_dist, p_alpha;
- unsigned char opacity;
-
- /*
- * Find the perpendicular distance from point C (px, py) to the line
- * segment AB that is being drawn. (Adapted from an algorithm from the
- * comp.graphics.algorithms FAQ.)
- */
-
- int LAC_2, LBC_2;
-
- int Ax_Cx = im->AAL_x1 - px;
- int Ay_Cy = im->AAL_y1 - py;
-
- int Bx_Cx = im->AAL_x2 - px;
- int By_Cy = im->AAL_y2 - py;
-
- /* 2.0.13: bounds check! AA_opacity is just as capable of
- * overflowing as the main pixel array. Arne Jorgensen.
- * 2.0.14: typo fixed. 2.0.15: moved down below declarations
- * to satisfy non-C++ compilers.
- */
- if (!gdImageBoundsSafe(im, px, py)) {
- return;
- }
-
- /* Get the squares of the lengths of the segemnts AC and BC. */
- LAC_2 = (Ax_Cx * Ax_Cx) + (Ay_Cy * Ay_Cy);
- LBC_2 = (Bx_Cx * Bx_Cx) + (By_Cy * By_Cy);
-
- if (((im->AAL_LAB_2 + LAC_2) >= LBC_2) && ((im->AAL_LAB_2 + LBC_2) >= LAC_2)) {
- /* The two angles are acute. The point lies inside the portion of the
- * plane spanned by the line segment.
- */
- p_dist = fabs ((float) ((Ay_Cy * im->AAL_Bx_Ax) - (Ax_Cx * im->AAL_By_Ay)) / im->AAL_LAB);
- } else {
- /* The point is past an end of the line segment. It's length from the
- * segment is the shorter of the lengths from the endpoints, but call
- * the distance -1, so as not to compute the alpha nor draw the pixel.
- */
- p_dist = -1;
- }
-
- if ((p_dist >= 0) && (p_dist <= (float) (im->thick))) {
- p_alpha = pow (1.0 - (p_dist / 1.5), 2);
-
- if (p_alpha > 0) {
- if (p_alpha >= 1) {
- opacity = 255;
- } else {
- opacity = (unsigned char) (p_alpha * 255.0);
- }
- if (!im->AA_polygon || (im->AA_opacity[py][px] < opacity)) {
- im->AA_opacity[py][px] = opacity;
- }
- }
- }
-}
-
-
-int gdImageGetPixel (gdImagePtr im, int x, int y)
-{
- if (gdImageBoundsSafe(im, x, y)) {
- if (im->trueColor) {
- return im->tpixels[y][x];
- } else {
- return im->pixels[y][x];
- }
- } else {
- return 0;
- }
-}
-
-void gdImageAABlend (gdImagePtr im)
-{
- float p_alpha, old_alpha;
- int color = im->AA_color, color_red, color_green, color_blue;
- int old_color, old_red, old_green, old_blue;
- int p_color, p_red, p_green, p_blue;
- int px, py;
-
- color_red = gdImageRed(im, color);
- color_green = gdImageGreen(im, color);
- color_blue = gdImageBlue(im, color);
-
- /* Impose the anti-aliased drawing on the image. */
- for (py = 0; py < im->sy; py++) {
- for (px = 0; px < im->sx; px++) {
- if (im->AA_opacity[py][px] != 0) {
- old_color = gdImageGetPixel(im, px, py);
-
- if ((old_color != color) && ((old_color != im->AA_dont_blend) || (im->AA_opacity[py][px] == 255))) {
- /* Only blend with different colors that aren't the dont_blend color. */
- p_alpha = (float) (im->AA_opacity[py][px]) / 255.0;
- old_alpha = 1.0 - p_alpha;
-
- if (p_alpha >= 1.0) {
- p_color = color;
- } else {
- old_red = gdImageRed(im, old_color);
- old_green = gdImageGreen(im, old_color);
- old_blue = gdImageBlue(im, old_color);
-
- p_red = (int) (((float) color_red * p_alpha) + ((float) old_red * old_alpha));
- p_green = (int) (((float) color_green * p_alpha) + ((float) old_green * old_alpha));
- p_blue = (int) (((float) color_blue * p_alpha) + ((float) old_blue * old_alpha));
- p_color = gdImageColorResolve(im, p_red, p_green, p_blue);
- }
- gdImageSetPixel(im, px, py, p_color);
- }
- }
- }
- /* Clear the AA_opacity array behind us. */
- memset(im->AA_opacity[py], 0, im->sx);
- }
-}
-
-
-/* Bresenham as presented in Foley & Van Dam */
-void gdImageLine (gdImagePtr im, int x1, int y1, int x2, int y2, int color)
-{
- int dx, dy, incr1, incr2, d, x, y, xend, yend, xdirflag, ydirflag;
- int wid;
- int w, wstart;
- int thick = im->thick;
-
- /* 2.0.10: Nick Atty: clip to edges of drawing rectangle, return if no points need to be drawn */
- if (!clip_1d(&x1,&y1,&x2,&y2,gdImageSX(im)) || !clip_1d(&y1,&x1,&y2,&x2,gdImageSY(im))) {
- return;
- }
-
- /* gdAntiAliased passed as color: set anti-aliased line (AAL) global vars. */
- if (color == gdAntiAliased) {
- im->AAL_x1 = x1;
- im->AAL_y1 = y1;
- im->AAL_x2 = x2;
- im->AAL_y2 = y2;
-
- /* Compute what we can for point-to-line distance calculation later. */
- im->AAL_Bx_Ax = x2 - x1;
- im->AAL_By_Ay = y2 - y1;
- im->AAL_LAB_2 = (im->AAL_Bx_Ax * im->AAL_Bx_Ax) + (im->AAL_By_Ay * im->AAL_By_Ay);
- im->AAL_LAB = sqrt (im->AAL_LAB_2);
-
- /* For AA, we must draw pixels outside the width of the line. Keep in
- * mind that this will be curtailed by cos/sin of theta later.
- */
- thick += 4;
- }
-
- dx = abs(x2 - x1);
- dy = abs(y2 - y1);
- if (dy <= dx) {
- /* More-or-less horizontal. use wid for vertical stroke */
- /* Doug Claar: watch out for NaN in atan2 (2.0.5) */
- if ((dx == 0) && (dy == 0)) {
- wid = 1;
- } else {
- wid = (int)(thick * cos (atan2 (dy, dx)));
- if (wid == 0) {
- wid = 1;
- }
- }
- d = 2 * dy - dx;
- incr1 = 2 * dy;
- incr2 = 2 * (dy - dx);
- if (x1 > x2) {
- x = x2;
- y = y2;
- ydirflag = (-1);
- xend = x1;
- } else {
- x = x1;
- y = y1;
- ydirflag = 1;
- xend = x2;
- }
-
- /* Set up line thickness */
- wstart = y - wid / 2;
- for (w = wstart; w < wstart + wid; w++) {
- gdImageSetPixel(im, x, w, color);
- }
-
- if (((y2 - y1) * ydirflag) > 0) {
- while (x < xend) {
- x++;
- if (d < 0) {
- d += incr1;
- } else {
- y++;
- d += incr2;
- }
- wstart = y - wid / 2;
- for (w = wstart; w < wstart + wid; w++) {
- gdImageSetPixel (im, x, w, color);
- }
- }
- } else {
- while (x < xend) {
- x++;
- if (d < 0) {
- d += incr1;
- } else {
- y--;
- d += incr2;
- }
- wstart = y - wid / 2;
- for (w = wstart; w < wstart + wid; w++) {
- gdImageSetPixel (im, x, w, color);
- }
- }
- }
- } else {
- /* More-or-less vertical. use wid for horizontal stroke */
- /* 2.0.12: Michael Schwartz: divide rather than multiply;
- TBB: but watch out for /0! */
- double as = sin(atan2(dy, dx));
- if (as != 0) {
- if (!(wid = thick / as)) {
- wid = 1;
- }
- } else {
- wid = 1;
- }
-
- d = 2 * dx - dy;
- incr1 = 2 * dx;
- incr2 = 2 * (dx - dy);
- if (y1 > y2) {
- y = y2;
- x = x2;
- yend = y1;
- xdirflag = (-1);
- } else {
- y = y1;
- x = x1;
- yend = y2;
- xdirflag = 1;
- }
-
- /* Set up line thickness */
- wstart = x - wid / 2;
- for (w = wstart; w < wstart + wid; w++) {
- gdImageSetPixel (im, w, y, color);
- }
-
- if (((x2 - x1) * xdirflag) > 0) {
- while (y < yend) {
- y++;
- if (d < 0) {
- d += incr1;
- } else {
- x++;
- d += incr2;
- }
- wstart = x - wid / 2;
- for (w = wstart; w < wstart + wid; w++) {
- gdImageSetPixel (im, w, y, color);
- }
- }
- } else {
- while (y < yend) {
- y++;
- if (d < 0) {
- d += incr1;
- } else {
- x--;
- d += incr2;
- }
- wstart = x - wid / 2;
- for (w = wstart; w < wstart + wid; w++) {
- gdImageSetPixel (im, w, y, color);
- }
- }
- }
- }
-
- /* If this is the only line we are drawing, go ahead and blend. */
- if (color == gdAntiAliased && !im->AA_polygon) {
- gdImageAABlend(im);
- }
-}
-
-
-/*
- * Added on 2003/12 by Pierre-Alain Joye (pajoye@pearfr.org)
- * */
-#define BLEND_COLOR(a, nc, c, cc) \
-nc = (cc) + (((((c) - (cc)) * (a)) + ((((c) - (cc)) * (a)) >> 8) + 0x80) >> 8);
-
-inline static void gdImageSetAAPixelColor(gdImagePtr im, int x, int y, int color, int t)
-{
- int dr,dg,db,p,r,g,b;
- dr = gdTrueColorGetRed(color);
- dg = gdTrueColorGetGreen(color);
- db = gdTrueColorGetBlue(color);
-
- p = gdImageGetPixel(im,x,y);
- r = gdTrueColorGetRed(p);
- g = gdTrueColorGetGreen(p);
- b = gdTrueColorGetBlue(p);
-
- BLEND_COLOR(t, dr, r, dr);
- BLEND_COLOR(t, dg, g, dg);
- BLEND_COLOR(t, db, b, db);
- im->tpixels[y][x]=gdTrueColorAlpha(dr, dg, db, gdAlphaOpaque);
-}
-
-/*
- * Added on 2003/12 by Pierre-Alain Joye (pajoye@pearfr.org)
- **/
-void gdImageAALine (gdImagePtr im, int x1, int y1, int x2, int y2, int col)
-{
- /* keep them as 32bits */
- long x, y, inc;
- long dx, dy,tmp;
-
- if (y1 < 0 && y2 < 0) {
- return;
- }
- if (y1 < 0) {
- x1 += (y1 * (x1 - x2)) / (y2 - y1);
- y1 = 0;
- }
- if (y2 < 0) {
- x2 += (y2 * (x1 - x2)) / (y2 - y1);
- y2 = 0;
- }
-
- /* bottom edge */
- if (y1 >= im->sy && y2 >= im->sy) {
- return;
- }
- if (y1 >= im->sy) {
- x1 -= ((im->sy - y1) * (x1 - x2)) / (y2 - y1);
- y1 = im->sy - 1;
- }
- if (y2 >= im->sy) {
- x2 -= ((im->sy - y2) * (x1 - x2)) / (y2 - y1);
- y2 = im->sy - 1;
- }
-
- /* left edge */
- if (x1 < 0 && x2 < 0) {
- return;
- }
- if (x1 < 0) {
- y1 += (x1 * (y1 - y2)) / (x2 - x1);
- x1 = 0;
- }
- if (x2 < 0) {
- y2 += (x2 * (y1 - y2)) / (x2 - x1);
- x2 = 0;
- }
- /* right edge */
- if (x1 >= im->sx && x2 >= im->sx) {
- return;
- }
- if (x1 >= im->sx) {
- y1 -= ((im->sx - x1) * (y1 - y2)) / (x2 - x1);
- x1 = im->sx - 1;
- }
- if (x2 >= im->sx) {
- y2 -= ((im->sx - x2) * (y1 - y2)) / (x2 - x1);
- x2 = im->sx - 1;
- }
-
- dx = x2 - x1;
- dy = y2 - y1;
-
- if (dx == 0 && dy == 0) {
- return;
- }
- if (abs(dx) > abs(dy)) {
- if (dx < 0) {
- tmp = x1;
- x1 = x2;
- x2 = tmp;
- tmp = y1;
- y1 = y2;
- y2 = tmp;
- dx = x2 - x1;
- dy = y2 - y1;
- }
- x = x1 << 16;
- y = y1 << 16;
- inc = (dy * 65536) / dx;
- while ((x >> 16) < x2) {
- gdImageSetAAPixelColor(im, x >> 16, y >> 16, col, (y >> 8) & 0xFF);
- if ((y >> 16) + 1 < im->sy) {
- gdImageSetAAPixelColor(im, x >> 16, (y >> 16) + 1,col, (~y >> 8) & 0xFF);
- }
- x += (1 << 16);
- y += inc;
- }
- } else {
- if (dy < 0) {
- tmp = x1;
- x1 = x2;
- x2 = tmp;
- tmp = y1;
- y1 = y2;
- y2 = tmp;
- dx = x2 - x1;
- dy = y2 - y1;
- }
- x = x1 << 16;
- y = y1 << 16;
- inc = (dx * 65536) / dy;
- while ((y>>16) < y2) {
- gdImageSetAAPixelColor(im, x >> 16, y >> 16, col, (x >> 8) & 0xFF);
- if ((x >> 16) + 1 < im->sx) {
- gdImageSetAAPixelColor(im, (x >> 16) + 1, (y >> 16),col, (~x >> 8) & 0xFF);
- }
- x += inc;
- y += (1<<16);
- }
- }
-}
-
-static void dashedSet (gdImagePtr im, int x, int y, int color, int *onP, int *dashStepP, int wid, int vert);
-
-void gdImageDashedLine (gdImagePtr im, int x1, int y1, int x2, int y2, int color)
-{
- int dx, dy, incr1, incr2, d, x, y, xend, yend, xdirflag, ydirflag;
- int dashStep = 0;
- int on = 1;
- int wid;
- int vert;
- int thick = im->thick;
-
- dx = abs(x2 - x1);
- dy = abs(y2 - y1);
- if (dy <= dx) {
- /* More-or-less horizontal. use wid for vertical stroke */
- /* 2.0.12: Michael Schwartz: divide rather than multiply;
- TBB: but watch out for /0! */
- double as = sin(atan2(dy, dx));
- if (as != 0) {
- wid = thick / as;
- } else {
- wid = 1;
- }
- wid = (int)(thick * sin(atan2(dy, dx)));
- vert = 1;
-
- d = 2 * dy - dx;
- incr1 = 2 * dy;
- incr2 = 2 * (dy - dx);
- if (x1 > x2) {
- x = x2;
- y = y2;
- ydirflag = (-1);
- xend = x1;
- } else {
- x = x1;
- y = y1;
- ydirflag = 1;
- xend = x2;
- }
- dashedSet(im, x, y, color, &on, &dashStep, wid, vert);
- if (((y2 - y1) * ydirflag) > 0) {
- while (x < xend) {
- x++;
- if (d < 0) {
- d += incr1;
- } else {
- y++;
- d += incr2;
- }
- dashedSet(im, x, y, color, &on, &dashStep, wid, vert);
- }
- } else {
- while (x < xend) {
- x++;
- if (d < 0) {
- d += incr1;
- } else {
- y--;
- d += incr2;
- }
- dashedSet(im, x, y, color, &on, &dashStep, wid, vert);
- }
- }
- } else {
- /* 2.0.12: Michael Schwartz: divide rather than multiply;
- TBB: but watch out for /0! */
- double as = sin (atan2 (dy, dx));
- if (as != 0) {
- wid = thick / as;
- } else {
- wid = 1;
- }
- vert = 0;
-
- d = 2 * dx - dy;
- incr1 = 2 * dx;
- incr2 = 2 * (dx - dy);
- if (y1 > y2) {
- y = y2;
- x = x2;
- yend = y1;
- xdirflag = (-1);
- } else {
- y = y1;
- x = x1;
- yend = y2;
- xdirflag = 1;
- }
- dashedSet(im, x, y, color, &on, &dashStep, wid, vert);
- if (((x2 - x1) * xdirflag) > 0) {
- while (y < yend) {
- y++;
- if (d < 0) {
- d += incr1;
- } else {
- x++;
- d += incr2;
- }
- dashedSet(im, x, y, color, &on, &dashStep, wid, vert);
- }
- } else {
- while (y < yend) {
- y++;
- if (d < 0) {
- d += incr1;
- } else {
- x--;
- d += incr2;
- }
- dashedSet(im, x, y, color, &on, &dashStep, wid, vert);
- }
- }
- }
-}
-
-static void dashedSet (gdImagePtr im, int x, int y, int color, int *onP, int *dashStepP, int wid, int vert)
-{
- int dashStep = *dashStepP;
- int on = *onP;
- int w, wstart;
-
- dashStep++;
- if (dashStep == gdDashSize) {
- dashStep = 0;
- on = !on;
- }
- if (on) {
- if (vert) {
- wstart = y - wid / 2;
- for (w = wstart; w < wstart + wid; w++) {
- gdImageSetPixel(im, x, w, color);
- }
- } else {
- wstart = x - wid / 2;
- for (w = wstart; w < wstart + wid; w++) {
- gdImageSetPixel(im, w, y, color);
- }
- }
- }
- *dashStepP = dashStep;
- *onP = on;
-}
-
-void gdImageChar (gdImagePtr im, gdFontPtr f, int x, int y, int c, int color)
-{
- int cx, cy;
- int px, py;
- int fline;
- cx = 0;
- cy = 0;
-#ifdef CHARSET_EBCDIC
- c = ASC (c);
-#endif /*CHARSET_EBCDIC */
- if ((c < f->offset) || (c >= (f->offset + f->nchars))) {
- return;
- }
- fline = (c - f->offset) * f->h * f->w;
- for (py = y; (py < (y + f->h)); py++) {
- for (px = x; (px < (x + f->w)); px++) {
- if (f->data[fline + cy * f->w + cx]) {
- gdImageSetPixel(im, px, py, color);
- }
- cx++;
- }
- cx = 0;
- cy++;
- }
-}
-
-void gdImageCharUp (gdImagePtr im, gdFontPtr f, int x, int y, int c, int color)
-{
- int cx, cy;
- int px, py;
- int fline;
- cx = 0;
- cy = 0;
-#ifdef CHARSET_EBCDIC
- c = ASC (c);
-#endif /*CHARSET_EBCDIC */
- if ((c < f->offset) || (c >= (f->offset + f->nchars))) {
- return;
- }
- fline = (c - f->offset) * f->h * f->w;
- for (py = y; py > (y - f->w); py--) {
- for (px = x; px < (x + f->h); px++) {
- if (f->data[fline + cy * f->w + cx]) {
- gdImageSetPixel(im, px, py, color);
- }
- cy++;
- }
- cy = 0;
- cx++;
- }
-}
-
-void gdImageString (gdImagePtr im, gdFontPtr f, int x, int y, unsigned char *s, int color)
-{
- int i;
- int l;
- l = strlen ((char *) s);
- for (i = 0; (i < l); i++) {
- gdImageChar(im, f, x, y, s[i], color);
- x += f->w;
- }
-}
-
-void gdImageStringUp (gdImagePtr im, gdFontPtr f, int x, int y, unsigned char *s, int color)
-{
- int i;
- int l;
- l = strlen ((char *) s);
- for (i = 0; (i < l); i++) {
- gdImageCharUp(im, f, x, y, s[i], color);
- y -= f->w;
- }
-}
-
-static int strlen16 (unsigned short *s);
-
-void gdImageString16 (gdImagePtr im, gdFontPtr f, int x, int y, unsigned short *s, int color)
-{
- int i;
- int l;
- l = strlen16(s);
- for (i = 0; (i < l); i++) {
- gdImageChar(im, f, x, y, s[i], color);
- x += f->w;
- }
-}
-
-void gdImageStringUp16 (gdImagePtr im, gdFontPtr f, int x, int y, unsigned short *s, int color)
-{
- int i;
- int l;
- l = strlen16(s);
- for (i = 0; i < l; i++) {
- gdImageCharUp(im, f, x, y, s[i], color);
- y -= f->w;
- }
-}
-
-static int strlen16 (unsigned short *s)
-{
- int len = 0;
- while (*s) {
- s++;
- len++;
- }
- return len;
-}
-
-#ifndef HAVE_LSQRT
-/* If you don't have a nice square root function for longs, you can use
- ** this hack
- */
-long lsqrt (long n)
-{
- long result = (long) sqrt ((double) n);
- return result;
-}
-#endif
-
-/* s and e are integers modulo 360 (degrees), with 0 degrees
- being the rightmost extreme and degrees changing clockwise.
- cx and cy are the center in pixels; w and h are the horizontal
- and vertical diameter in pixels. Nice interface, but slow.
- See gd_arc_f_buggy.c for a better version that doesn't
- seem to be bug-free yet. */
-
-void gdImageArc (gdImagePtr im, int cx, int cy, int w, int h, int s, int e, int color)
-{
- if ((s % 360) == (e % 360)) {
- gdImageEllipse(im, cx, cy, w, h, color);
- } else {
- gdImageFilledArc(im, cx, cy, w, h, s, e, color, gdNoFill);
- }
-}
-
-void gdImageFilledArc (gdImagePtr im, int cx, int cy, int w, int h, int s, int e, int color, int style)
-{
- gdPoint pts[3];
- int i;
- int lx = 0, ly = 0;
- int fx = 0, fy = 0;
-
- while (s<0) {
- s += 360;
- }
-
- while (e < s) {
- e += 360;
- }
-
- for (i = s; i <= e; i++) {
- int x, y;
- x = ((long) gdCosT[i % 360] * (long) w / (2 * 1024)) + cx;
- y = ((long) gdSinT[i % 360] * (long) h / (2 * 1024)) + cy;
- if (i != s) {
- if (!(style & gdChord)) {
- if (style & gdNoFill) {
- gdImageLine(im, lx, ly, x, y, color);
- } else {
- /* This is expensive! */
- pts[0].x = lx;
- pts[0].y = ly;
- pts[1].x = x;
- pts[1].y = y;
- pts[2].x = cx;
- pts[2].y = cy;
- gdImageFilledPolygon(im, pts, 3, color);
- }
- }
- } else {
- fx = x;
- fy = y;
- }
- lx = x;
- ly = y;
- }
- if (style & gdChord) {
- if (style & gdNoFill) {
- if (style & gdEdged) {
- gdImageLine(im, cx, cy, lx, ly, color);
- gdImageLine(im, cx, cy, fx, fy, color);
- }
- gdImageLine(im, fx, fy, lx, ly, color);
- } else {
- pts[0].x = fx;
- pts[0].y = fy;
- pts[1].x = lx;
- pts[1].y = ly;
- pts[2].x = cx;
- pts[2].y = cy;
- gdImageFilledPolygon(im, pts, 3, color);
- }
- } else {
- if (style & gdNoFill) {
- if (style & gdEdged) {
- gdImageLine(im, cx, cy, lx, ly, color);
- gdImageLine(im, cx, cy, fx, fy, color);
- }
- }
- }
-}
-
-
-/**
- * Integer Ellipse functions (gdImageEllipse and gdImageFilledEllipse)
- * Function added by Pierre-Alain Joye 02/08/2003 (paj@pearfr.org)
- * See the ellipse function simplification for the equation
- * as well as the midpoint algorithm.
- */
-
-void gdImageEllipse(gdImagePtr im, int mx, int my, int w, int h, int c)
-{
- int x=0,mx1=0,mx2=0,my1=0,my2=0;
- long aq,bq,dx,dy,r,rx,ry,a,b;
-
- a=w>>1;
- b=h>>1;
- gdImageSetPixel(im,mx+a, my, c);
- gdImageSetPixel(im,mx-a, my, c);
- mx1 = mx-a;my1 = my;
- mx2 = mx+a;my2 = my;
-
- aq = a * a;
- bq = b * b;
- dx = aq << 1;
- dy = bq << 1;
- r = a * bq;
- rx = r << 1;
- ry = 0;
- x = a;
- while (x > 0){
- if (r > 0) {
- my1++;my2--;
- ry +=dx;
- r -=ry;
- }
- if (r <= 0){
- x--;
- mx1++;mx2--;
- rx -=dy;
- r +=rx;
- }
- gdImageSetPixel(im,mx1, my1, c);
- gdImageSetPixel(im,mx1, my2, c);
- gdImageSetPixel(im,mx2, my1, c);
- gdImageSetPixel(im,mx2, my2, c);
- }
-}
-
-void gdImageFilledEllipse (gdImagePtr im, int mx, int my, int w, int h, int c)
-{
- int x=0,mx1=0,mx2=0,my1=0,my2=0;
- long aq,bq,dx,dy,r,rx,ry,a,b;
- int i;
- int old_y1,old_y2;
-
- a=w>>1;
- b=h>>1;
-
- gdImageLine(im, mx-a, my, mx+a, my, c);
-
- mx1 = mx-a;my1 = my;
- mx2 = mx+a;my2 = my;
-
- aq = a * a;
- bq = b * b;
- dx = aq << 1;
- dy = bq << 1;
- r = a * bq;
- rx = r << 1;
- ry = 0;
- x = a;
- old_y2=-1;
- old_y1=-1;
- while (x > 0){
- if (r > 0) {
- my1++;my2--;
- ry +=dx;
- r -=ry;
- }
- if (r <= 0){
- x--;
- mx1++;mx2--;
- rx -=dy;
- r +=rx;
- }
- if(old_y2!=my2){
- for(i=mx1;i<=mx2;i++){
- gdImageSetPixel(im,i,my1,c);
- }
- }
- if(old_y2!=my2){
- for(i=mx1;i<=mx2;i++){
- gdImageSetPixel(im,i,my2,c);
- }
- }
- old_y2 = my2;
- old_y1 = my1;
- }
-}
-
-void gdImageFillToBorder (gdImagePtr im, int x, int y, int border, int color)
-{
- int lastBorder;
- /* Seek left */
- int leftLimit = -1, rightLimit;
- int i, restoreAlphaBleding=0;
-
- if (border < 0) {
- /* Refuse to fill to a non-solid border */
- return;
- }
-
- if (im->alphaBlendingFlag) {
- restoreAlphaBleding = 1;
- im->alphaBlendingFlag = 0;
- }
-
- if (x >= im->sx) {
- x = im->sx - 1;
- }
- if (y >= im->sy) {
- y = im->sy - 1;
- }
-
- for (i = x; i >= 0; i--) {
- if (gdImageGetPixel(im, i, y) == border) {
- break;
- }
- gdImageSetPixel(im, i, y, color);
- leftLimit = i;
- }
- if (leftLimit == -1) {
- if (restoreAlphaBleding) {
- im->alphaBlendingFlag = 1;
- }
- return;
- }
- /* Seek right */
- rightLimit = x;
- for (i = (x + 1); i < im->sx; i++) {
- if (gdImageGetPixel(im, i, y) == border) {
- break;
- }
- gdImageSetPixel(im, i, y, color);
- rightLimit = i;
- }
- /* Look at lines above and below and start paints */
- /* Above */
- if (y > 0) {
- lastBorder = 1;
- for (i = leftLimit; i <= rightLimit; i++) {
- int c = gdImageGetPixel(im, i, y - 1);
- if (lastBorder) {
- if ((c != border) && (c != color)) {
- gdImageFillToBorder(im, i, y - 1, border, color);
- lastBorder = 0;
- }
- } else if ((c == border) || (c == color)) {
- lastBorder = 1;
- }
- }
- }
-
- /* Below */
- if (y < ((im->sy) - 1)) {
- lastBorder = 1;
- for (i = leftLimit; i <= rightLimit; i++) {
- int c = gdImageGetPixel(im, i, y + 1);
-
- if (lastBorder) {
- if ((c != border) && (c != color)) {
- gdImageFillToBorder(im, i, y + 1, border, color);
- lastBorder = 0;
- }
- } else if ((c == border) || (c == color)) {
- lastBorder = 1;
- }
- }
- }
- if (restoreAlphaBleding) {
- im->alphaBlendingFlag = 1;
- }
-}
-
-/*
- * set the pixel at (x,y) and its 4-connected neighbors
- * with the same pixel value to the new pixel value nc (new color).
- * A 4-connected neighbor: pixel above, below, left, or right of a pixel.
- * ideas from comp.graphics discussions.
- * For tiled fill, the use of a flag buffer is mandatory. As the tile image can
- * contain the same color as the color to fill. To do not bloat normal filling
- * code I added a 2nd private function.
- */
-
-/* horizontal segment of scan line y */
-struct seg {int y, xl, xr, dy;};
-
-/* max depth of stack */
-#define FILL_MAX 1200000
-#define FILL_PUSH(Y, XL, XR, DY) \
- if (sp<stack+FILL_MAX*10 && Y+(DY)>=0 && Y+(DY)<wy2) \
- {sp->y = Y; sp->xl = XL; sp->xr = XR; sp->dy = DY; sp++;}
-
-#define FILL_POP(Y, XL, XR, DY) \
- {sp--; Y = sp->y+(DY = sp->dy); XL = sp->xl; XR = sp->xr;}
-
-void _gdImageFillTiled(gdImagePtr im, int x, int y, int nc);
-
-void gdImageFill(gdImagePtr im, int x, int y, int nc)
-{
- int l, x1, x2, dy;
- int oc; /* old pixel value */
- int wx2,wy2;
- /* stack of filled segments */
- /* struct seg stack[FILL_MAX],*sp = stack;; */
- struct seg *stack;
- struct seg *sp;
-
- if (nc==gdTiled){
- _gdImageFillTiled(im,x,y,nc);
- return;
- }
-
- wx2=im->sx;wy2=im->sy;
- oc = gdImageGetPixel(im, x, y);
- if (oc==nc || x<0 || x>wx2 || y<0 || y>wy2) return;
-
- stack = (struct seg *)safe_emalloc(sizeof(struct seg), ((int)(im->sy*im->sx)/4), 1);
- sp = stack;
-
- /* required! */
- FILL_PUSH(y,x,x,1);
- /* seed segment (popped 1st) */
- FILL_PUSH(y+1, x, x, -1);
- while (sp>stack) {
- FILL_POP(y, x1, x2, dy);
-
- for (x=x1; x>=0 && gdImageGetPixel(im,x, y)==oc; x--) {
- gdImageSetPixel(im,x, y, nc);
- }
- if (x>=x1) {
- goto skip;
- }
- l = x+1;
-
- /* leak on left? */
- if (l<x1) {
- FILL_PUSH(y, l, x1-1, -dy);
- }
- x = x1+1;
- do {
- for (; x<=wx2 && gdImageGetPixel(im,x, y)==oc; x++) {
- gdImageSetPixel(im, x, y, nc);
- }
- FILL_PUSH(y, l, x-1, dy);
- /* leak on right? */
- if (x>x2+1) {
- FILL_PUSH(y, x2+1, x-1, -dy);
- }
-skip: for (x++; x<=x2 && (gdImageGetPixel(im, x, y)!=oc); x++);
-
- l = x;
- } while (x<=x2);
- }
- efree(stack);
-}
-
-void _gdImageFillTiled(gdImagePtr im, int x, int y, int nc)
-{
- int i,l, x1, x2, dy;
- int oc; /* old pixel value */
- int tiled;
- int wx2,wy2;
- /* stack of filled segments */
- struct seg *stack;
- struct seg *sp;
-
- int **pts;
- if(!im->tile){
- return;
- }
-
- wx2=im->sx;wy2=im->sy;
- tiled = nc==gdTiled;
-
- nc = gdImageTileGet(im,x,y);
- pts = (int **) ecalloc(sizeof(int *) * im->sy, sizeof(int));
-
- for (i=0; i<im->sy;i++) {
- pts[i] = (int *) ecalloc(im->sx, sizeof(int));
- }
-
- stack = (struct seg *)safe_emalloc(sizeof(struct seg), ((int)(im->sy*im->sx)/4), 1);
- sp = stack;
-
- oc = gdImageGetPixel(im, x, y);
-
- /* required! */
- FILL_PUSH(y,x,x,1);
- /* seed segment (popped 1st) */
- FILL_PUSH(y+1, x, x, -1);
- while (sp>stack) {
- FILL_POP(y, x1, x2, dy);
- for (x=x1; x>=0 && (!pts[y][x] && gdImageGetPixel(im,x,y)==oc); x--) {
- if (pts[y][x]){
- /* we should never be here */
- break;
- }
- nc = gdImageTileGet(im,x,y);
- pts[y][x]=1;
- gdImageSetPixel(im,x, y, nc);
- }
- if (x>=x1) {
- goto skip;
- }
- l = x+1;
-
- /* leak on left? */
- if (l<x1) {
- FILL_PUSH(y, l, x1-1, -dy);
- }
- x = x1+1;
- do {
- for (; x<=wx2 && (!pts[y][x] && gdImageGetPixel(im,x, y)==oc) ; x++) {
- if (pts[y][x]){
- /* we should never be here */
- break;
- }
- nc = gdImageTileGet(im,x,y);
- pts[y][x]=1;
- gdImageSetPixel(im, x, y, nc);
- }
- FILL_PUSH(y, l, x-1, dy);
- /* leak on right? */
- if (x>x2+1) {
- FILL_PUSH(y, x2+1, x-1, -dy);
- }
-skip: for (x++; x<=x2 && (pts[y][x] || gdImageGetPixel(im,x, y)!=oc); x++);
- l = x;
- } while (x<=x2);
- }
- for (i=0; i<im->sy;i++) {
- efree(pts[i]);
- }
- efree(pts);
- efree(stack);
-}
-
-
-
-void gdImageRectangle (gdImagePtr im, int x1, int y1, int x2, int y2, int color)
-{
- int x1h = x1, x1v = x1, y1h = y1, y1v = y1, x2h = x2, x2v = x2, y2h = y2, y2v = y2;
- int thick = im->thick;
-
- if (thick > 1) {
- int half = thick / 2;
- int half1 = thick - half;
-
- if (y1 < y2) {
- y1v = y1h - half;
- y2v = y2h + half1 - 1;
- } else {
- y1v = y1h + half1 - 1;
- y2v = y2h - half;
- }
- }
-
- gdImageLine(im, x1h, y1h, x2h, y1h, color);
- gdImageLine(im, x1h, y2h, x2h, y2h, color);
- gdImageLine(im, x1v, y1v, x1v, y2v, color);
- gdImageLine(im, x2v, y1v, x2v, y2v, color);
-}
-
-void gdImageFilledRectangle (gdImagePtr im, int x1, int y1, int x2, int y2, int color)
-{
- int x, y;
-
- /* Nick Atty: limit the points at the edge. Note that this also
- * nicely kills any plotting for rectangles completely outside the
- * window as it makes the tests in the for loops fail
- */
- if (x1 < 0) {
- x1 = 0;
- }
- if (x1 > gdImageSX(im)) {
- x1 = gdImageSX(im);
- }
- if(y1 < 0) {
- y1 = 0;
- }
- if (y1 > gdImageSY(im)) {
- y1 = gdImageSY(im);
- }
- if (x1 > x2) {
- x = x1;
- x1 = x2;
- x2 = x;
- }
- if (y1 > y2) {
- y = y1;
- y1 = y2;
- y2 = y;
- }
-
- for (y = y1; (y <= y2); y++) {
- for (x = x1; (x <= x2); x++) {
- gdImageSetPixel (im, x, y, color);
- }
- }
-}
-
-void gdImageCopy (gdImagePtr dst, gdImagePtr src, int dstX, int dstY, int srcX, int srcY, int w, int h)
-{
- int c;
- int x, y;
- int tox, toy;
- int i;
- int colorMap[gdMaxColors];
-
- if (dst->trueColor) {
- /* 2.0: much easier when the destination is truecolor. */
- /* 2.0.10: needs a transparent-index check that is still valid if
- * the source is not truecolor. Thanks to Frank Warmerdam.
- */
-
- if (src->trueColor) {
- for (y = 0; (y < h); y++) {
- for (x = 0; (x < w); x++) {
- int c = gdImageGetTrueColorPixel (src, srcX + x, srcY + y);
- gdImageSetPixel (dst, dstX + x, dstY + y, c);
- }
- }
- } else {
- /* source is palette based */
- for (y = 0; (y < h); y++) {
- for (x = 0; (x < w); x++) {
- int c = gdImageGetPixel (src, srcX + x, srcY + y);
- if (c != src->transparent) {
- gdImageSetPixel (dst, dstX + x, dstY + y, gdTrueColor(src->red[c], src->green[c], src->blue[c]));
- }
- }
- }
- }
- return;
- }
-
- /* Destination is palette based */
- if (src->trueColor) { /* But source is truecolor (Ouch!) */
- toy = dstY;
- for (y = srcY; (y < (srcY + h)); y++) {
- tox = dstX;
- for (x = srcX; x < (srcX + w); x++) {
- int nc;
- c = gdImageGetPixel (src, x, y);
-
- /* Get best match possible. */
- nc = gdImageColorResolveAlpha(dst, gdTrueColorGetRed(c), gdTrueColorGetGreen(c), gdTrueColorGetBlue(c), gdTrueColorGetAlpha(c));
-
- gdImageSetPixel(dst, tox, toy, nc);
- tox++;
- }
- toy++;
- }
- return;
- }
-
- /* Palette based to palette based */
- for (i = 0; i < gdMaxColors; i++) {
- colorMap[i] = (-1);
- }
- toy = dstY;
- for (y = srcY; y < (srcY + h); y++) {
- tox = dstX;
- for (x = srcX; x < (srcX + w); x++) {
- int nc;
- int mapTo;
- c = gdImageGetPixel (src, x, y);
- /* Added 7/24/95: support transparent copies */
- if (gdImageGetTransparent (src) == c) {
- tox++;
- continue;
- }
- /* Have we established a mapping for this color? */
- if (src->trueColor) {
- /* 2.05: remap to the palette available in the destination image. This is slow and
- * works badly, but it beats crashing! Thanks to Padhrig McCarthy.
- */
- mapTo = gdImageColorResolveAlpha (dst, gdTrueColorGetRed (c), gdTrueColorGetGreen (c), gdTrueColorGetBlue (c), gdTrueColorGetAlpha (c));
- } else if (colorMap[c] == (-1)) {
- /* If it's the same image, mapping is trivial */
- if (dst == src) {
- nc = c;
- } else {
- /* Get best match possible. This function never returns error. */
- nc = gdImageColorResolveAlpha (dst, src->red[c], src->green[c], src->blue[c], src->alpha[c]);
- }
- colorMap[c] = nc;
- mapTo = colorMap[c];
- } else {
- mapTo = colorMap[c];
- }
- gdImageSetPixel (dst, tox, toy, mapTo);
- tox++;
- }
- toy++;
- }
-}
-
-/* This function is a substitute for real alpha channel operations,
- so it doesn't pay attention to the alpha channel. */
-void gdImageCopyMerge (gdImagePtr dst, gdImagePtr src, int dstX, int dstY, int srcX, int srcY, int w, int h, int pct)
-{
- int c, dc;
- int x, y;
- int tox, toy;
- int ncR, ncG, ncB;
- toy = dstY;
-
- for (y = srcY; y < (srcY + h); y++) {
- tox = dstX;
- for (x = srcX; x < (srcX + w); x++) {
- int nc;
- c = gdImageGetPixel(src, x, y);
- /* Added 7/24/95: support transparent copies */
- if (gdImageGetTransparent(src) == c) {
- tox++;
- continue;
- }
- /* If it's the same image, mapping is trivial */
- if (dst == src) {
- nc = c;
- } else {
- dc = gdImageGetPixel(dst, tox, toy);
-
- ncR = (int)(gdImageRed (src, c) * (pct / 100.0) + gdImageRed (dst, dc) * ((100 - pct) / 100.0));
- ncG = (int)(gdImageGreen (src, c) * (pct / 100.0) + gdImageGreen (dst, dc) * ((100 - pct) / 100.0));
- ncB = (int)(gdImageBlue (src, c) * (pct / 100.0) + gdImageBlue (dst, dc) * ((100 - pct) / 100.0));
-
- /* Find a reasonable color */
- nc = gdImageColorResolve (dst, ncR, ncG, ncB);
- }
- gdImageSetPixel (dst, tox, toy, nc);
- tox++;
- }
- toy++;
- }
-}
-
-/* This function is a substitute for real alpha channel operations,
- so it doesn't pay attention to the alpha channel. */
-void gdImageCopyMergeGray (gdImagePtr dst, gdImagePtr src, int dstX, int dstY, int srcX, int srcY, int w, int h, int pct)
-{
- int c, dc;
- int x, y;
- int tox, toy;
- int ncR, ncG, ncB;
- float g;
- toy = dstY;
-
- for (y = srcY; (y < (srcY + h)); y++) {
- tox = dstX;
- for (x = srcX; (x < (srcX + w)); x++) {
- int nc;
- c = gdImageGetPixel (src, x, y);
- /* Added 7/24/95: support transparent copies */
- if (gdImageGetTransparent(src) == c) {
- tox++;
- continue;
- }
- /*
- * If it's the same image, mapping is NOT trivial since we
- * merge with greyscale target, but if pct is 100, the grey
- * value is not used, so it becomes trivial. pjw 2.0.12.
- */
- if (dst == src && pct == 100) {
- nc = c;
- } else {
- dc = gdImageGetPixel(dst, tox, toy);
- g = (0.29900f * gdImageRed(dst, dc)) + (0.58700f * gdImageGreen(dst, dc)) + (0.11400f * gdImageBlue(dst, dc));
-
- ncR = (int)(gdImageRed (src, c) * (pct / 100.0f) + gdImageRed(dst, dc) * g * ((100 - pct) / 100.0f));
- ncG = (int)(gdImageGreen (src, c) * (pct / 100.0f) + gdImageGreen(dst, dc) * g * ((100 - pct) / 100.0f));
- ncB = (int)(gdImageBlue (src, c) * (pct / 100.0f) + gdImageBlue(dst, dc) * g * ((100 - pct) / 100.0f));
-
- /* First look for an exact match */
- nc = gdImageColorExact(dst, ncR, ncG, ncB);
- if (nc == (-1)) {
- /* No, so try to allocate it */
- nc = gdImageColorAllocate(dst, ncR, ncG, ncB);
- /* If we're out of colors, go for the closest color */
- if (nc == (-1)) {
- nc = gdImageColorClosest(dst, ncR, ncG, ncB);
- }
- }
- }
- gdImageSetPixel(dst, tox, toy, nc);
- tox++;
- }
- toy++;
- }
-}
-
-void gdImageCopyResized (gdImagePtr dst, gdImagePtr src, int dstX, int dstY, int srcX, int srcY, int dstW, int dstH, int srcW, int srcH)
-{
- int c;
- int x, y;
- int tox, toy;
- int ydest;
- int i;
- int colorMap[gdMaxColors];
- /* Stretch vectors */
- int *stx, *sty;
- /* We only need to use floating point to determine the correct stretch vector for one line's worth. */
- double accum;
- stx = (int *) gdMalloc (sizeof (int) * srcW);
- sty = (int *) gdMalloc (sizeof (int) * srcH);
- accum = 0;
-
- /* Fixed by Mao Morimoto 2.0.16 */
- for (i = 0; (i < srcW); i++) {
- stx[i] = dstW * (i+1) / srcW - dstW * i / srcW ;
- }
- for (i = 0; (i < srcH); i++) {
- sty[i] = dstH * (i+1) / srcH - dstH * i / srcH ;
- }
- for (i = 0; (i < gdMaxColors); i++) {
- colorMap[i] = (-1);
- }
- toy = dstY;
- for (y = srcY; (y < (srcY + srcH)); y++) {
- for (ydest = 0; (ydest < sty[y - srcY]); ydest++) {
- tox = dstX;
- for (x = srcX; (x < (srcX + srcW)); x++) {
- int nc = 0;
- int mapTo;
- if (!stx[x - srcX]) {
- continue;
- }
- if (dst->trueColor) {
- /* 2.0.9: Thorben Kundinger: Maybe the source image is not a truecolor image */
- if (!src->trueColor) {
- int tmp = gdImageGetPixel (src, x, y);
- mapTo = gdImageGetTrueColorPixel (src, x, y);
- if (gdImageGetTransparent (src) == tmp) {
- /* 2.0.21, TK: not tox++ */
- tox += stx[x - srcX];
- continue;
- }
- } else {
- /* TK: old code follows */
- mapTo = gdImageGetTrueColorPixel (src, x, y);
- /* Added 7/24/95: support transparent copies */
- if (gdImageGetTransparent (src) == mapTo) {
- /* 2.0.21, TK: not tox++ */
- tox += stx[x - srcX];
- continue;
- }
- }
- } else {
- c = gdImageGetPixel (src, x, y);
- /* Added 7/24/95: support transparent copies */
- if (gdImageGetTransparent (src) == c) {
- tox += stx[x - srcX];
- continue;
- }
- if (src->trueColor) {
- /* Remap to the palette available in the destination image. This is slow and works badly. */
- mapTo = gdImageColorResolveAlpha(dst, gdTrueColorGetRed(c),
- gdTrueColorGetGreen(c),
- gdTrueColorGetBlue(c),
- gdTrueColorGetAlpha (c));
- } else {
- /* Have we established a mapping for this color? */
- if (colorMap[c] == (-1)) {
- /* If it's the same image, mapping is trivial */
- if (dst == src) {
- nc = c;
- } else {
- /* Find or create the best match */
- /* 2.0.5: can't use gdTrueColorGetRed, etc with palette */
- nc = gdImageColorResolveAlpha(dst, gdImageRed(src, c),
- gdImageGreen(src, c),
- gdImageBlue(src, c),
- gdImageAlpha(src, c));
- }
- colorMap[c] = nc;
- }
- mapTo = colorMap[c];
- }
- }
- for (i = 0; (i < stx[x - srcX]); i++) {
- gdImageSetPixel (dst, tox, toy, mapTo);
- tox++;
- }
- }
- toy++;
- }
- }
- gdFree (stx);
- gdFree (sty);
-}
-
-/* When gd 1.x was first created, floating point was to be avoided.
- These days it is often faster than table lookups or integer
- arithmetic. The routine below is shamelessly, gloriously
- floating point. TBB */
-
-void gdImageCopyResampled (gdImagePtr dst, gdImagePtr src, int dstX, int dstY, int srcX, int srcY, int dstW, int dstH, int srcW, int srcH)
-{
- int x, y;
- double sy1, sy2, sx1, sx2;
- if (!dst->trueColor) {
- gdImageCopyResized (dst, src, dstX, dstY, srcX, srcY, dstW, dstH, srcW, srcH);
- return;
- }
- for (y = dstY; (y < dstY + dstH); y++) {
- sy1 = ((double) y - (double) dstY) * (double) srcH / (double) dstH;
- sy2 = ((double) (y + 1) - (double) dstY) * (double) srcH / (double) dstH;
- for (x = dstX; (x < dstX + dstW); x++) {
- double sx, sy;
- double spixels = 0;
- double red = 0.0, green = 0.0, blue = 0.0, alpha = 0.0;
- double alpha_factor, alpha_sum = 0.0, contrib_sum = 0.0;
- sx1 = ((double) x - (double) dstX) * (double) srcW / dstW;
- sx2 = ((double) (x + 1) - (double) dstX) * (double) srcW / dstW;
- sy = sy1;
- do {
- double yportion;
- if (floor_cast(sy) == floor_cast(sy1)) {
- yportion = 1.0f - (sy - floor_cast(sy));
- if (yportion > sy2 - sy1) {
- yportion = sy2 - sy1;
- }
- sy = floor_cast(sy);
- } else if (sy == floorf(sy2)) {
- yportion = sy2 - floor_cast(sy2);
- } else {
- yportion = 1.0f;
- }
- sx = sx1;
- do {
- double xportion;
- double pcontribution;
- int p;
- if (floorf(sx) == floor_cast(sx1)) {
- xportion = 1.0f - (sx - floor_cast(sx));
- if (xportion > sx2 - sx1) {
- xportion = sx2 - sx1;
- }
- sx = floor_cast(sx);
- } else if (sx == floorf(sx2)) {
- xportion = sx2 - floor_cast(sx2);
- } else {
- xportion = 1.0f;
- }
- pcontribution = xportion * yportion;
- p = gdImageGetTrueColorPixel(src, (int) sx + srcX, (int) sy + srcY);
-
- alpha_factor = ((gdAlphaMax - gdTrueColorGetAlpha(p))) * pcontribution;
- red += gdTrueColorGetRed (p) * alpha_factor;
- green += gdTrueColorGetGreen (p) * alpha_factor;
- blue += gdTrueColorGetBlue (p) * alpha_factor;
- alpha += gdTrueColorGetAlpha (p) * pcontribution;
- alpha_sum += alpha_factor;
- contrib_sum += pcontribution;
- spixels += xportion * yportion;
- sx += 1.0f;
- }
- while (sx < sx2);
-
- sy += 1.0f;
- }
-
- while (sy < sy2);
-
- if (spixels != 0.0f) {
- red /= spixels;
- green /= spixels;
- blue /= spixels;
- alpha /= spixels;
- }
- if ( alpha_sum != 0.0f) {
- if( contrib_sum != 0.0f) {
- alpha_sum /= contrib_sum;
- }
- red /= alpha_sum;
- green /= alpha_sum;
- blue /= alpha_sum;
- }
- /* Clamping to allow for rounding errors above */
- if (red > 255.0f) {
- red = 255.0f;
- }
- if (green > 255.0f) {
- green = 255.0f;
- }
- if (blue > 255.0f) {
- blue = 255.0f;
- }
- if (alpha > gdAlphaMax) {
- alpha = gdAlphaMax;
- }
- gdImageSetPixel(dst, x, y, gdTrueColorAlpha ((int) red, (int) green, (int) blue, (int) alpha));
- }
- }
-}
-
-
-/*
- * Rotate function Added on 2003/12
- * by Pierre-Alain Joye (pajoye@pearfr.org)
- **/
-/* Begin rotate function */
-#ifdef ROTATE_PI
-#undef ROTATE_PI
-#endif /* ROTATE_PI */
-
-#define ROTATE_DEG2RAD 3.1415926535897932384626433832795/180
-void gdImageSkewX (gdImagePtr dst, gdImagePtr src, int uRow, int iOffset, double dWeight, int clrBack)
-{
- typedef int (*FuncPtr)(gdImagePtr, int, int);
- int i, r, g, b, a, clrBackR, clrBackG, clrBackB, clrBackA;
- FuncPtr f;
-
- int pxlOldLeft, pxlLeft=0, pxlSrc;
-
- /* Keep clrBack as color index if required */
- if (src->trueColor) {
- pxlOldLeft = clrBack;
- f = gdImageGetTrueColorPixel;
- } else {
- pxlOldLeft = clrBack;
- clrBackR = gdImageRed(src, clrBack);
- clrBackG = gdImageGreen(src, clrBack);
- clrBackB = gdImageBlue(src, clrBack);
- clrBackA = gdImageAlpha(src, clrBack);
- clrBack = gdTrueColorAlpha(clrBackR, clrBackG, clrBackB, clrBackA);
- f = gdImageGetPixel;
- }
-
- for (i = 0; i < iOffset; i++) {
- gdImageSetPixel (dst, i, uRow, clrBack);
- }
-
- if (i < dst->sx) {
- gdImageSetPixel (dst, i, uRow, clrBack);
- }
-
- for (i = 0; i < src->sx; i++) {
- pxlSrc = f (src,i,uRow);
-
- r = (int)(gdImageRed(src,pxlSrc) * dWeight);
- g = (int)(gdImageGreen(src,pxlSrc) * dWeight);
- b = (int)(gdImageBlue(src,pxlSrc) * dWeight);
- a = (int)(gdImageAlpha(src,pxlSrc) * dWeight);
-
- pxlLeft = gdImageColorAllocateAlpha(src, r, g, b, a);
-
- if (pxlLeft == -1) {
- pxlLeft = gdImageColorClosestAlpha(src, r, g, b, a);
- }
-
- r = gdImageRed(src,pxlSrc) - (gdImageRed(src,pxlLeft) - gdImageRed(src,pxlOldLeft));
- g = gdImageGreen(src,pxlSrc) - (gdImageGreen(src,pxlLeft) - gdImageGreen(src,pxlOldLeft));
- b = gdImageBlue(src,pxlSrc) - (gdImageBlue(src,pxlLeft) - gdImageBlue(src,pxlOldLeft));
- a = gdImageAlpha(src,pxlSrc) - (gdImageAlpha(src,pxlLeft) - gdImageAlpha(src,pxlOldLeft));
-
- if (r>255) {
- r = 255;
- }
-
- if (g>255) {
- g = 255;
- }
-
- if (b>255) {
- b = 255;
- }
-
- if (a>127) {
- a = 127;
- }
-
- pxlSrc = gdImageColorAllocateAlpha(dst, r, g, b, a);
-
- if (pxlSrc == -1) {
- pxlSrc = gdImageColorClosestAlpha(dst, r, g, b, a);
- }
-
- if ((i + iOffset >= 0) && (i + iOffset < dst->sx)) {
- gdImageSetPixel (dst, i+iOffset, uRow, pxlSrc);
- }
-
- pxlOldLeft = pxlLeft;
- }
-
- i += iOffset;
-
- if (i < dst->sx) {
- gdImageSetPixel (dst, i, uRow, pxlLeft);
- }
-
- gdImageSetPixel (dst, iOffset, uRow, clrBack);
-
- i--;
-
- while (++i < dst->sx) {
- gdImageSetPixel (dst, i, uRow, clrBack);
- }
-}
-
-void gdImageSkewY (gdImagePtr dst, gdImagePtr src, int uCol, int iOffset, double dWeight, int clrBack)
-{
- typedef int (*FuncPtr)(gdImagePtr, int, int);
- int i, iYPos=0, r, g, b, a;
- FuncPtr f;
- int pxlOldLeft, pxlLeft=0, pxlSrc;
-
- if (src->trueColor) {
- f = gdImageGetTrueColorPixel;
- } else {
- f = gdImageGetPixel;
- }
-
- for (i = 0; i<=iOffset; i++) {
- gdImageSetPixel (dst, uCol, i, clrBack);
- }
- r = (int)((double)gdImageRed(src,clrBack) * dWeight);
- g = (int)((double)gdImageGreen(src,clrBack) * dWeight);
- b = (int)((double)gdImageBlue(src,clrBack) * dWeight);
- a = (int)((double)gdImageAlpha(src,clrBack) * dWeight);
-
- pxlOldLeft = gdImageColorAllocateAlpha(dst, r, g, b, a);
-
- for (i = 0; i < src->sy; i++) {
- pxlSrc = f (src, uCol, i);
- iYPos = i + iOffset;
-
- r = (int)((double)gdImageRed(src,pxlSrc) * dWeight);
- g = (int)((double)gdImageGreen(src,pxlSrc) * dWeight);
- b = (int)((double)gdImageBlue(src,pxlSrc) * dWeight);
- a = (int)((double)gdImageAlpha(src,pxlSrc) * dWeight);
-
- pxlLeft = gdImageColorAllocateAlpha(src, r, g, b, a);
-
- if (pxlLeft == -1) {
- pxlLeft = gdImageColorClosestAlpha(src, r, g, b, a);
- }
-
- r = gdImageRed(src,pxlSrc) - (gdImageRed(src,pxlLeft) - gdImageRed(src,pxlOldLeft));
- g = gdImageGreen(src,pxlSrc) - (gdImageGreen(src,pxlLeft) - gdImageGreen(src,pxlOldLeft));
- b = gdImageBlue(src,pxlSrc) - (gdImageBlue(src,pxlLeft) - gdImageBlue(src,pxlOldLeft));
- a = gdImageAlpha(src,pxlSrc) - (gdImageAlpha(src,pxlLeft) - gdImageAlpha(src,pxlOldLeft));
-
- if (r>255) {
- r = 255;
- }
-
- if (g>255) {
- g = 255;
- }
-
- if (b>255) {
- b = 255;
- }
-
- if (a>127) {
- a = 127;
- }
-
- pxlSrc = gdImageColorAllocateAlpha(dst, r, g, b, a);
-
- if (pxlSrc == -1) {
- pxlSrc = gdImageColorClosestAlpha(dst, r, g, b, a);
- }
-
- if ((iYPos >= 0) && (iYPos < dst->sy)) {
- gdImageSetPixel (dst, uCol, iYPos, pxlSrc);
- }
-
- pxlOldLeft = pxlLeft;
- }
-
- i = iYPos;
- if (i < dst->sy) {
- gdImageSetPixel (dst, uCol, i, pxlLeft);
- }
-
- i--;
- while (++i < dst->sy) {
- gdImageSetPixel (dst, uCol, i, clrBack);
- }
-}
-
-/* Rotates an image by 90 degrees (counter clockwise) */
-gdImagePtr gdImageRotate90 (gdImagePtr src)
-{
- int uY, uX;
- int c,r,g,b,a;
- gdImagePtr dst;
- typedef int (*FuncPtr)(gdImagePtr, int, int);
- FuncPtr f;
-
- if (src->trueColor) {
- f = gdImageGetTrueColorPixel;
- } else {
- f = gdImageGetPixel;
- }
- dst = gdImageCreateTrueColor(src->sy, src->sx);
-
- if (dst != NULL) {
- gdImagePaletteCopy (dst, src);
-
- for (uY = 0; uY<src->sy; uY++) {
- for (uX = 0; uX<src->sx; uX++) {
- c = f (src, uX, uY);
- if (!src->trueColor) {
- r = gdImageRed(src,c);
- g = gdImageGreen(src,c);
- b = gdImageBlue(src,c);
- a = gdImageAlpha(src,c);
- c = gdTrueColorAlpha(r, g, b, a);
- }
- gdImageSetPixel(dst, uY, (dst->sy - uX - 1), c);
- }
- }
- }
-
- return dst;
-}
-
-/* Rotates an image by 180 degrees (counter clockwise) */
-gdImagePtr gdImageRotate180 (gdImagePtr src)
-{
- int uY, uX;
- int c,r,g,b,a;
- gdImagePtr dst;
- typedef int (*FuncPtr)(gdImagePtr, int, int);
- FuncPtr f;
-
- if (src->trueColor) {
- f = gdImageGetTrueColorPixel;
- } else {
- f = gdImageGetPixel;
- }
- dst = gdImageCreateTrueColor(src->sx, src->sy);
-
- if (dst != NULL) {
- gdImagePaletteCopy (dst, src);
-
- for (uY = 0; uY<src->sy; uY++) {
- for (uX = 0; uX<src->sx; uX++) {
- c = f (src, uX, uY);
- if (!src->trueColor) {
- r = gdImageRed(src,c);
- g = gdImageGreen(src,c);
- b = gdImageBlue(src,c);
- a = gdImageAlpha(src,c);
- c = gdTrueColorAlpha(r, g, b, a);
- }
- gdImageSetPixel(dst, (dst->sx - uX - 1), (dst->sy - uY - 1), c);
- }
- }
- }
-
- return dst;
-}
-
-/* Rotates an image by 270 degrees (counter clockwise) */
-gdImagePtr gdImageRotate270 ( gdImagePtr src )
-{
- int uY, uX;
- int c,r,g,b,a;
- gdImagePtr dst;
- typedef int (*FuncPtr)(gdImagePtr, int, int);
- FuncPtr f;
-
- if (src->trueColor) {
- f = gdImageGetTrueColorPixel;
- } else {
- f = gdImageGetPixel;
- }
- dst = gdImageCreateTrueColor (src->sy, src->sx);
-
- if (dst != NULL) {
- gdImagePaletteCopy (dst, src);
-
- for (uY = 0; uY<src->sy; uY++) {
- for (uX = 0; uX<src->sx; uX++) {
- c = f (src, uX, uY);
- if (!src->trueColor) {
- r = gdImageRed(src,c);
- g = gdImageGreen(src,c);
- b = gdImageBlue(src,c);
- a = gdImageAlpha(src,c);
- c = gdTrueColorAlpha(r, g, b, a);
- }
- gdImageSetPixel(dst, (dst->sx - uY - 1), uX, c);
- }
- }
- }
-
- return dst;
-}
-
-gdImagePtr gdImageRotate45 (gdImagePtr src, double dAngle, int clrBack)
-{
- typedef int (*FuncPtr)(gdImagePtr, int, int);
- gdImagePtr dst1,dst2,dst3;
- FuncPtr f;
- double dRadAngle, dSinE, dTan, dShear;
- double dOffset; /* Variable skew offset */
- int u, iShear, newx, newy;
- int clrBackR, clrBackG, clrBackB, clrBackA;
-
- /* See GEMS I for the algorithm details */
- dRadAngle = dAngle * ROTATE_DEG2RAD; /* Angle in radians */
- dSinE = sin (dRadAngle);
- dTan = tan (dRadAngle / 2.0);
-
- newx = (int)(src->sx + src->sy * fabs(dTan));
- newy = src->sy;
-
- /* 1st shear */
- if (src->trueColor) {
- f = gdImageGetTrueColorPixel;
- } else {
- f = gdImageGetPixel;
- }
-
- dst1 = gdImageCreateTrueColor(newx, newy);
- /******* Perform 1st shear (horizontal) ******/
- if (dst1 == NULL) {
- return NULL;
- }
- dst1->alphaBlendingFlag = gdEffectReplace;
-
- if (dAngle == 0.0) {
- /* Returns copy of src */
- gdImageCopy (dst1, src,0,0,0,0,src->sx,src->sy);
- return dst1;
- }
-
- gdImagePaletteCopy (dst1, src);
-
- dRadAngle = dAngle * ROTATE_DEG2RAD; /* Angle in radians */
- dSinE = sin (dRadAngle);
- dTan = tan (dRadAngle / 2.0);
-
- for (u = 0; u < dst1->sy; u++) {
- if (dTan >= 0.0) {
- dShear = ((double)(u + 0.5)) * dTan;
- } else {
- dShear = ((double)(u - dst1->sy) + 0.5) * dTan;
- }
-
- iShear = (int)floor(dShear);
- gdImageSkewX(dst1, src, u, iShear, (dShear - iShear), clrBack);
- }
-
- /*
- The 1st shear may use the original clrBack as color index
- Convert it once here
- */
- if(!src->trueColor) {
- clrBackR = gdImageRed(src, clrBack);
- clrBackG = gdImageGreen(src, clrBack);
- clrBackB = gdImageBlue(src, clrBack);
- clrBackA = gdImageAlpha(src, clrBack);
- clrBack = gdTrueColorAlpha(clrBackR, clrBackG, clrBackB, clrBackA);
- }
- /* 2nd shear */
- newx = dst1->sx;
-
- if (dSinE > 0.0) {
- dOffset = (src->sx-1) * dSinE;
- } else {
- dOffset = -dSinE * (src->sx - newx);
- }
-
- newy = (int) ((double) src->sx * fabs( dSinE ) + (double) src->sy * cos (dRadAngle))+1;
-
- if (src->trueColor) {
- f = gdImageGetTrueColorPixel;
- } else {
- f = gdImageGetPixel;
- }
- dst2 = gdImageCreateTrueColor(newx, newy);
- if (dst2 == NULL) {
- gdImageDestroy(dst1);
- return NULL;
- }
- dst2->alphaBlendingFlag = gdEffectReplace;
-
- for (u = 0; u < dst2->sx; u++, dOffset -= dSinE) {
- iShear = (int)floor (dOffset);
- gdImageSkewY(dst2, dst1, u, iShear, (dOffset - (double)iShear), clrBack);
- }
-
- /* 3rd shear */
- gdImageDestroy(dst1);
-
- newx = (int) ((double)src->sy * fabs (dSinE) + (double)src->sx * cos (dRadAngle)) + 1;
- newy = dst2->sy;
-
- if (src->trueColor) {
- f = gdImageGetTrueColorPixel;
- } else {
- f = gdImageGetPixel;
- }
- dst3 = gdImageCreateTrueColor(newx, newy);
- if (dst3 == NULL) {
- gdImageDestroy(dst2);
- return NULL;
- }
- if (dSinE >= 0.0) {
- dOffset = (double)(src->sx - 1) * dSinE * -dTan;
- } else {
- dOffset = dTan * ((double)(src->sx - 1) * -dSinE + (double)(1 - newy));
- }
-
- for (u = 0; u < dst3->sy; u++, dOffset += dTan) {
- int iShear = (int)floor(dOffset);
- gdImageSkewX(dst3, dst2, u, iShear, (dOffset - iShear), clrBack);
- }
-
- gdImageDestroy(dst2);
-
- return dst3;
-}
-
-gdImagePtr gdImageRotate (gdImagePtr src, double dAngle, int clrBack)
-{
- gdImagePtr pMidImg;
- gdImagePtr rotatedImg;
-
- if (src == NULL) {
- return NULL;
- }
-
- if (!gdImageTrueColor(src) && clrBack>=gdImageColorsTotal(src)) {
- return NULL;
- }
-
- while (dAngle >= 360.0) {
- dAngle -= 360.0;
- }
-
- while (dAngle < 0) {
- dAngle += 360.0;
- }
-
- if (dAngle == 90.00) {
- return gdImageRotate90(src);
- }
- if (dAngle == 180.00) {
- return gdImageRotate180(src);
- }
- if(dAngle == 270.00) {
- return gdImageRotate270 ( src);
- }
-
- if ((dAngle > 45.0) && (dAngle <= 135.0)) {
- pMidImg = gdImageRotate90 (src);
- dAngle -= 90.0;
- } else if ((dAngle > 135.0) && (dAngle <= 225.0)) {
- pMidImg = gdImageRotate180 (src);
- dAngle -= 180.0;
- } else if ((dAngle > 225.0) && (dAngle <= 315.0)) {
- pMidImg = gdImageRotate270 (src);
- dAngle -= 270.0;
- } else {
- return gdImageRotate45 (src, dAngle, clrBack);
- }
-
- if (pMidImg == NULL) {
- return NULL;
- }
-
- rotatedImg = gdImageRotate45 (pMidImg, dAngle, clrBack);
- gdImageDestroy(pMidImg);
-
- return rotatedImg;
-}
-/* End Rotate function */
-
-void gdImagePolygon (gdImagePtr im, gdPointPtr p, int n, int c)
-{
- int i;
- int lx, ly;
- typedef void (*image_line)(gdImagePtr im, int x1, int y1, int x2, int y2, int color);
- image_line draw_line;
-
- if (!n) {
- return;
- }
-
- /* Let it be known that we are drawing a polygon so that the opacity
- * mask doesn't get cleared after each line.
- */
- if (c == gdAntiAliased) {
- im->AA_polygon = 1;
- }
-
- if ( im->antialias) {
- draw_line = gdImageAALine;
- } else {
- draw_line = gdImageLine;
- }
- lx = p->x;
- ly = p->y;
- draw_line(im, lx, ly, p[n - 1].x, p[n - 1].y, c);
- for (i = 1; i < n; i++) {
- p++;
- draw_line(im, lx, ly, p->x, p->y, c);
- lx = p->x;
- ly = p->y;
- }
-
- if (c == gdAntiAliased) {
- im->AA_polygon = 0;
- gdImageAABlend(im);
- }
-}
-
-int gdCompareInt (const void *a, const void *b);
-
-/* THANKS to Kirsten Schulz for the polygon fixes! */
-
-/* The intersection finding technique of this code could be improved
- * by remembering the previous intertersection, and by using the slope.
- * That could help to adjust intersections to produce a nice
- * interior_extrema.
- */
-
-void gdImageFilledPolygon (gdImagePtr im, gdPointPtr p, int n, int c)
-{
- int i;
- int y;
- int miny, maxy;
- int x1, y1;
- int x2, y2;
- int ind1, ind2;
- int ints;
- int fill_color;
-
- if (!n) {
- return;
- }
-
- if (c == gdAntiAliased) {
- fill_color = im->AA_color;
- } else {
- fill_color = c;
- }
-
- if (!im->polyAllocated) {
- im->polyInts = (int *) gdMalloc(sizeof(int) * n);
- im->polyAllocated = n;
- }
- if (im->polyAllocated < n) {
- while (im->polyAllocated < n) {
- im->polyAllocated *= 2;
- }
- im->polyInts = (int *) gdRealloc(im->polyInts, sizeof(int) * im->polyAllocated);
- }
- miny = p[0].y;
- maxy = p[0].y;
- for (i = 1; i < n; i++) {
- if (p[i].y < miny) {
- miny = p[i].y;
- }
- if (p[i].y > maxy) {
- maxy = p[i].y;
- }
- }
-
- /* 2.0.16: Optimization by Ilia Chipitsine -- don't waste time offscreen */
- if (miny < 0) {
- miny = 0;
- }
- if (maxy >= gdImageSY(im)) {
- maxy = gdImageSY(im) - 1;
- }
-
- /* Fix in 1.3: count a vertex only once */
- for (y = miny; y <= maxy; y++) {
- /*1.4 int interLast = 0; */
- /* int dirLast = 0; */
- /* int interFirst = 1; */
- ints = 0;
- for (i = 0; i < n; i++) {
- if (!i) {
- ind1 = n - 1;
- ind2 = 0;
- } else {
- ind1 = i - 1;
- ind2 = i;
- }
- y1 = p[ind1].y;
- y2 = p[ind2].y;
- if (y1 < y2) {
- x1 = p[ind1].x;
- x2 = p[ind2].x;
- } else if (y1 > y2) {
- y2 = p[ind1].y;
- y1 = p[ind2].y;
- x2 = p[ind1].x;
- x1 = p[ind2].x;
- } else {
- continue;
- }
- /* Do the following math as float intermediately, and round to ensure
- * that Polygon and FilledPolygon for the same set of points have the
- * same footprint.
- */
- if (y >= y1 && y < y2) {
- im->polyInts[ints++] = (float) ((y - y1) * (x2 - x1)) / (float) (y2 - y1) + 0.5 + x1;
- } else if (y == maxy && y > y1 && y <= y2) {
- im->polyInts[ints++] = (float) ((y - y1) * (x2 - x1)) / (float) (y2 - y1) + 0.5 + x1;
- }
- }
- qsort(im->polyInts, ints, sizeof(int), gdCompareInt);
-
- for (i = 0; i < ints; i += 2) {
- gdImageLine(im, im->polyInts[i], y, im->polyInts[i + 1], y, fill_color);
- }
- }
-
- /* If we are drawing this AA, then redraw the border with AA lines. */
- if (c == gdAntiAliased) {
- gdImagePolygon(im, p, n, c);
- }
-}
-
-int gdCompareInt (const void *a, const void *b)
-{
- return (*(const int *) a) - (*(const int *) b);
-}
-
-void gdImageSetStyle (gdImagePtr im, int *style, int noOfPixels)
-{
- if (im->style) {
- gdFree(im->style);
- }
- im->style = (int *) gdMalloc(sizeof(int) * noOfPixels);
- memcpy(im->style, style, sizeof(int) * noOfPixels);
- im->styleLength = noOfPixels;
- im->stylePos = 0;
-}
-
-void gdImageSetThickness (gdImagePtr im, int thickness)
-{
- im->thick = thickness;
-}
-
-void gdImageSetBrush (gdImagePtr im, gdImagePtr brush)
-{
- int i;
- im->brush = brush;
- if (!im->trueColor && !im->brush->trueColor) {
- for (i = 0; i < gdImageColorsTotal(brush); i++) {
- int index;
- index = gdImageColorResolveAlpha(im, gdImageRed(brush, i), gdImageGreen(brush, i), gdImageBlue(brush, i), gdImageAlpha(brush, i));
- im->brushColorMap[i] = index;
- }
- }
-}
-
-void gdImageSetTile (gdImagePtr im, gdImagePtr tile)
-{
- int i;
- im->tile = tile;
- if (!im->trueColor && !im->tile->trueColor) {
- for (i = 0; i < gdImageColorsTotal(tile); i++) {
- int index;
- index = gdImageColorResolveAlpha(im, gdImageRed(tile, i), gdImageGreen(tile, i), gdImageBlue(tile, i), gdImageAlpha(tile, i));
- im->tileColorMap[i] = index;
- }
- }
-}
-
-void gdImageSetAntiAliased (gdImagePtr im, int c)
-{
- im->AA = 1;
- im->AA_color = c;
- im->AA_dont_blend = -1;
-}
-
-void gdImageSetAntiAliasedDontBlend (gdImagePtr im, int c, int dont_blend)
-{
- im->AA = 1;
- im->AA_color = c;
- im->AA_dont_blend = dont_blend;
-}
-
-
-void gdImageInterlace (gdImagePtr im, int interlaceArg)
-{
- im->interlace = interlaceArg;
-}
-
-int gdImageCompare (gdImagePtr im1, gdImagePtr im2)
-{
- int x, y;
- int p1, p2;
- int cmpStatus = 0;
- int sx, sy;
-
- if (im1->interlace != im2->interlace) {
- cmpStatus |= GD_CMP_INTERLACE;
- }
-
- if (im1->transparent != im2->transparent) {
- cmpStatus |= GD_CMP_TRANSPARENT;
- }
-
- if (im1->trueColor != im2->trueColor) {
- cmpStatus |= GD_CMP_TRUECOLOR;
- }
-
- sx = im1->sx;
- if (im1->sx != im2->sx) {
- cmpStatus |= GD_CMP_SIZE_X + GD_CMP_IMAGE;
- if (im2->sx < im1->sx) {
- sx = im2->sx;
- }
- }
-
- sy = im1->sy;
- if (im1->sy != im2->sy) {
- cmpStatus |= GD_CMP_SIZE_Y + GD_CMP_IMAGE;
- if (im2->sy < im1->sy) {
- sy = im2->sy;
- }
- }
-
- if (im1->colorsTotal != im2->colorsTotal) {
- cmpStatus |= GD_CMP_NUM_COLORS;
- }
-
- for (y = 0; y < sy; y++) {
- for (x = 0; x < sx; x++) {
- p1 = im1->trueColor ? gdImageTrueColorPixel(im1, x, y) : gdImagePalettePixel(im1, x, y);
- p2 = im2->trueColor ? gdImageTrueColorPixel(im2, x, y) : gdImagePalettePixel(im2, x, y);
-
- if (gdImageRed(im1, p1) != gdImageRed(im2, p2)) {
- cmpStatus |= GD_CMP_COLOR + GD_CMP_IMAGE;
- break;
- }
- if (gdImageGreen(im1, p1) != gdImageGreen(im2, p2)) {
- cmpStatus |= GD_CMP_COLOR + GD_CMP_IMAGE;
- break;
- }
- if (gdImageBlue(im1, p1) != gdImageBlue(im2, p2)) {
- cmpStatus |= GD_CMP_COLOR + GD_CMP_IMAGE;
- break;
- }
-#if 0
- /* Soon we'll add alpha channel to palettes */
- if (gdImageAlpha(im1, p1) != gdImageAlpha(im2, p2)) {
- cmpStatus |= GD_CMP_COLOR + GD_CMP_IMAGE;
- break;
- }
-#endif
- }
- if (cmpStatus & GD_CMP_COLOR) {
- break;
- }
- }
-
- return cmpStatus;
-}
-
-int
-gdAlphaBlend (int dst, int src)
-{
- /* 2.0.12: TBB: alpha in the destination should be a
- * component of the result. Thanks to Frank Warmerdam for
- * pointing out the issue.
- */
- return ((((gdTrueColorGetAlpha (src) *
- gdTrueColorGetAlpha (dst)) / gdAlphaMax) << 24) +
- ((((gdAlphaTransparent - gdTrueColorGetAlpha (src)) *
- gdTrueColorGetRed (src) / gdAlphaMax) +
- (gdTrueColorGetAlpha (src) *
- gdTrueColorGetRed (dst)) / gdAlphaMax) << 16) +
- ((((gdAlphaTransparent - gdTrueColorGetAlpha (src)) *
- gdTrueColorGetGreen (src) / gdAlphaMax) +
- (gdTrueColorGetAlpha (src) *
- gdTrueColorGetGreen (dst)) / gdAlphaMax) << 8) +
- (((gdAlphaTransparent - gdTrueColorGetAlpha (src)) *
- gdTrueColorGetBlue (src) / gdAlphaMax) +
- (gdTrueColorGetAlpha (src) *
- gdTrueColorGetBlue (dst)) / gdAlphaMax));
-}
-
-void gdImageAlphaBlending (gdImagePtr im, int alphaBlendingArg)
-{
- im->alphaBlendingFlag = alphaBlendingArg;
-}
-
-void gdImageAntialias (gdImagePtr im, int antialias)
-{
- if (im->trueColor){
- im->antialias = antialias;
- }
-}
-
-void gdImageSaveAlpha (gdImagePtr im, int saveAlphaArg)
-{
- im->saveAlphaFlag = saveAlphaArg;
-}
-
-static int gdLayerOverlay (int dst, int src)
-{
- int a1, a2;
- a1 = gdAlphaMax - gdTrueColorGetAlpha(dst);
- a2 = gdAlphaMax - gdTrueColorGetAlpha(src);
- return ( ((gdAlphaMax - a1*a2/gdAlphaMax) << 24) +
- (gdAlphaOverlayColor( gdTrueColorGetRed(src), gdTrueColorGetRed(dst), gdRedMax ) << 16) +
- (gdAlphaOverlayColor( gdTrueColorGetGreen(src), gdTrueColorGetGreen(dst), gdGreenMax ) << 8) +
- (gdAlphaOverlayColor( gdTrueColorGetBlue(src), gdTrueColorGetBlue(dst), gdBlueMax ))
- );
-}
-
-static int gdAlphaOverlayColor (int src, int dst, int max )
-{
- /* this function implements the algorithm
- *
- * for dst[rgb] < 0.5,
- * c[rgb] = 2.src[rgb].dst[rgb]
- * and for dst[rgb] > 0.5,
- * c[rgb] = -2.src[rgb].dst[rgb] + 2.dst[rgb] + 2.src[rgb] - 1
- *
- */
-
- dst = dst << 1;
- if( dst > max ) {
- /* in the "light" zone */
- return dst + (src << 1) - (dst * src / max) - max;
- } else {
- /* in the "dark" zone */
- return dst * src / max;
- }
-}
-
-void gdImageSetClip (gdImagePtr im, int x1, int y1, int x2, int y2)
-{
- if (x1 < 0) {
- x1 = 0;
- }
- if (x1 >= im->sx) {
- x1 = im->sx - 1;
- }
- if (x2 < 0) {
- x2 = 0;
- }
- if (x2 >= im->sx) {
- x2 = im->sx - 1;
- }
- if (y1 < 0) {
- y1 = 0;
- }
- if (y1 >= im->sy) {
- y1 = im->sy - 1;
- }
- if (y2 < 0) {
- y2 = 0;
- }
- if (y2 >= im->sy) {
- y2 = im->sy - 1;
- }
- im->cx1 = x1;
- im->cy1 = y1;
- im->cx2 = x2;
- im->cy2 = y2;
-}
-
-void gdImageGetClip (gdImagePtr im, int *x1P, int *y1P, int *x2P, int *y2P)
-{
- *x1P = im->cx1;
- *y1P = im->cy1;
- *x2P = im->cx2;
- *y2P = im->cy2;
-}
-
-
-/* Filters function added on 2003/12
- * by Pierre-Alain Joye (pajoye@pearfr.org)
- **/
-/* Begin filters function */
-#ifndef HAVE_GET_TRUE_COLOR
-#define GET_PIXEL_FUNCTION(src)(src->trueColor?gdImageGetTrueColorPixel:gdImageGetPixel)
-#endif
-
-/* invert src image */
-int gdImageNegate(gdImagePtr src)
-{
- int x, y;
- int r,g,b,a;
- int new_pxl, pxl;
- typedef int (*FuncPtr)(gdImagePtr, int, int);
- FuncPtr f;
-
- if (src==NULL) {
- return 0;
- }
-
- f = GET_PIXEL_FUNCTION(src);
-
- for (y=0; y<src->sy; ++y) {
- for (x=0; x<src->sx; ++x) {
- pxl = f (src, x, y);
- r = gdImageRed(src, pxl);
- g = gdImageGreen(src, pxl);
- b = gdImageBlue(src, pxl);
- a = gdImageAlpha(src, pxl);
-
- new_pxl = gdImageColorAllocateAlpha(src, 255-r, 255-g, 255-b, a);
- if (new_pxl == -1) {
- new_pxl = gdImageColorClosestAlpha(src, 255-r, 255-g, 255-b, a);
- }
- if ((y >= 0) && (y < src->sy)) {
- gdImageSetPixel (src, x, y, new_pxl);
- }
- }
- }
- return 1;
-}
-
-/* Convert the image src to a grayscale image */
-int gdImageGrayScale(gdImagePtr src)
-{
- int x, y;
- int r,g,b,a;
- int new_pxl, pxl;
- typedef int (*FuncPtr)(gdImagePtr, int, int);
- FuncPtr f;
- f = GET_PIXEL_FUNCTION(src);
-
- if (src==NULL) {
- return 0;
- }
-
- for (y=0; y<src->sy; ++y) {
- for (x=0; x<src->sx; ++x) {
- pxl = f (src, x, y);
- r = gdImageRed(src, pxl);
- g = gdImageGreen(src, pxl);
- b = gdImageBlue(src, pxl);
- a = gdImageAlpha(src, pxl);
- r = g = b = (int) (.299 * r + .587 * g + .114 * b);
-
- new_pxl = gdImageColorAllocateAlpha(src, r, g, b, a);
- if (new_pxl == -1) {
- new_pxl = gdImageColorClosestAlpha(src, r, g, b, a);
- }
- if ((y >= 0) && (y < src->sy)) {
- gdImageSetPixel (src, x, y, new_pxl);
- }
- }
- }
- return 1;
-}
-
-/* Set the brightness level <level> for the image src */
-int gdImageBrightness(gdImagePtr src, int brightness)
-{
- int x, y;
- int r,g,b,a;
- int new_pxl, pxl;
- typedef int (*FuncPtr)(gdImagePtr, int, int);
- FuncPtr f;
- f = GET_PIXEL_FUNCTION(src);
-
- if (src==NULL || (brightness < -255 || brightness>255)) {
- return 0;
- }
-
- if (brightness==0) {
- return 1;
- }
-
- for (y=0; y<src->sy; ++y) {
- for (x=0; x<src->sx; ++x) {
- pxl = f (src, x, y);
-
- r = gdImageRed(src, pxl);
- g = gdImageGreen(src, pxl);
- b = gdImageBlue(src, pxl);
- a = gdImageAlpha(src, pxl);
-
- r = r + brightness;
- g = g + brightness;
- b = b + brightness;
-
- r = (r > 255)? 255 : ((r < 0)? 0:r);
- g = (g > 255)? 255 : ((g < 0)? 0:g);
- b = (b > 255)? 255 : ((b < 0)? 0:b);
-
- new_pxl = gdImageColorAllocateAlpha(src, (int)r, (int)g, (int)b, a);
- if (new_pxl == -1) {
- new_pxl = gdImageColorClosestAlpha(src, (int)r, (int)g, (int)b, a);
- }
- if ((y >= 0) && (y < src->sy)) {
- gdImageSetPixel (src, x, y, new_pxl);
- }
- }
- }
- return 1;
-}
-
-
-int gdImageContrast(gdImagePtr src, double contrast)
-{
- int x, y;
- int r,g,b,a;
- double rf,gf,bf;
- int new_pxl, pxl;
- typedef int (*FuncPtr)(gdImagePtr, int, int);
-
- FuncPtr f;
- f = GET_PIXEL_FUNCTION(src);
-
- if (src==NULL) {
- return 0;
- }
-
- contrast = (double)(100.0-contrast)/100.0;
- contrast = contrast*contrast;
-
- for (y=0; y<src->sy; ++y) {
- for (x=0; x<src->sx; ++x) {
- pxl = f(src, x, y);
-
- r = gdImageRed(src, pxl);
- g = gdImageGreen(src, pxl);
- b = gdImageBlue(src, pxl);
- a = gdImageAlpha(src, pxl);
-
- rf = (double)r/255.0;
- rf = rf-0.5;
- rf = rf*contrast;
- rf = rf+0.5;
- rf = rf*255.0;
-
- bf = (double)b/255.0;
- bf = bf-0.5;
- bf = bf*contrast;
- bf = bf+0.5;
- bf = bf*255.0;
-
- gf = (double)g/255.0;
- gf = gf-0.5;
- gf = gf*contrast;
- gf = gf+0.5;
- gf = gf*255.0;
-
- rf = (rf > 255.0)? 255.0 : ((rf < 0.0)? 0.0:rf);
- gf = (gf > 255.0)? 255.0 : ((gf < 0.0)? 0.0:gf);
- bf = (bf > 255.0)? 255.0 : ((bf < 0.0)? 0.0:bf);
-
- new_pxl = gdImageColorAllocateAlpha(src, (int)rf, (int)gf, (int)bf, a);
- if (new_pxl == -1) {
- new_pxl = gdImageColorClosestAlpha(src, (int)rf, (int)gf, (int)bf, a);
- }
- if ((y >= 0) && (y < src->sy)) {
- gdImageSetPixel (src, x, y, new_pxl);
- }
- }
- }
- return 1;
-}
-
-
-int gdImageColor(gdImagePtr src, int red, int green, int blue)
-{
- int x, y;
- int r,g,b,a;
- int new_pxl, pxl;
- typedef int (*FuncPtr)(gdImagePtr, int, int);
- FuncPtr f;
-
- if (src==NULL || (red<-255||red>255) || (green<-255||green>255) || (blue<-255||blue>255)) {
- return 0;
- }
-
- f = GET_PIXEL_FUNCTION(src);
-
- for (y=0; y<src->sy; ++y) {
- for (x=0; x<src->sx; ++x) {
- pxl = f(src, x, y);
- r = gdImageRed(src, pxl);
- g = gdImageGreen(src, pxl);
- b = gdImageBlue(src, pxl);
- a = gdImageAlpha(src, pxl);
-
- r = r + red;
- g = g + green;
- b = b + blue;
-
- r = (r > 255)? 255 : ((r < 0)? 0:r);
- g = (g > 255)? 255 : ((g < 0)? 0:g);
- b = (b > 255)? 255 : ((b < 0)? 0:b);
-
- new_pxl = gdImageColorAllocateAlpha(src, (int)r, (int)g, (int)b, a);
- if (new_pxl == -1) {
- new_pxl = gdImageColorClosestAlpha(src, (int)r, (int)g, (int)b, a);
- }
- if ((y >= 0) && (y < src->sy)) {
- gdImageSetPixel (src, x, y, new_pxl);
- }
- }
- }
- return 1;
-}
-
-int gdImageConvolution(gdImagePtr src, float filter[3][3], float filter_div, float offset)
-{
- int x, y, i, j, new_a;
- float new_r, new_g, new_b;
- int new_pxl, pxl=0;
- gdImagePtr srcback;
- typedef int (*FuncPtr)(gdImagePtr, int, int);
- FuncPtr f;
-
- if (src==NULL) {
- return 0;
- }
-
- /* We need the orinal image with each safe neoghb. pixel */
- srcback = gdImageCreateTrueColor (src->sx, src->sy);
- gdImageCopy(srcback, src,0,0,0,0,src->sx,src->sy);
-
- if (srcback==NULL) {
- return 0;
- }
-
- f = GET_PIXEL_FUNCTION(src);
-
- for ( y=0; y<src->sy; y++) {
- for(x=0; x<src->sx; x++) {
- new_r = new_g = new_b = 0;
- new_a = gdImageAlpha(srcback, pxl);
-
- for (j=0; j<3; j++) {
- int yv = MIN(MAX(y - 1 + j, 0), src->sy - 1);
- for (i=0; i<3; i++) {
- pxl = f(srcback, MIN(MAX(x - 1 + i, 0), src->sx - 1), yv);
- new_r += (float)gdImageRed(srcback, pxl) * filter[j][i];
- new_g += (float)gdImageGreen(srcback, pxl) * filter[j][i];
- new_b += (float)gdImageBlue(srcback, pxl) * filter[j][i];
- }
- }
-
- new_r = (new_r/filter_div)+offset;
- new_g = (new_g/filter_div)+offset;
- new_b = (new_b/filter_div)+offset;
-
- new_r = (new_r > 255.0f)? 255.0f : ((new_r < 0.0f)? 0.0f:new_r);
- new_g = (new_g > 255.0f)? 255.0f : ((new_g < 0.0f)? 0.0f:new_g);
- new_b = (new_b > 255.0f)? 255.0f : ((new_b < 0.0f)? 0.0f:new_b);
-
- new_pxl = gdImageColorAllocateAlpha(src, (int)new_r, (int)new_g, (int)new_b, new_a);
- if (new_pxl == -1) {
- new_pxl = gdImageColorClosestAlpha(src, (int)new_r, (int)new_g, (int)new_b, new_a);
- }
- if ((y >= 0) && (y < src->sy)) {
- gdImageSetPixel (src, x, y, new_pxl);
- }
- }
- }
- gdImageDestroy(srcback);
- return 1;
-}
-
-int gdImageSelectiveBlur( gdImagePtr src)
-{
- int x, y, i, j;
- float new_r, new_g, new_b;
- int new_pxl, cpxl, pxl, new_a=0;
- float flt_r [3][3];
- float flt_g [3][3];
- float flt_b [3][3];
- float flt_r_sum, flt_g_sum, flt_b_sum;
-
- gdImagePtr srcback;
- typedef int (*FuncPtr)(gdImagePtr, int, int);
- FuncPtr f;
-
- if (src==NULL) {
- return 0;
- }
-
- /* We need the orinal image with each safe neoghb. pixel */
- srcback = gdImageCreateTrueColor (src->sx, src->sy);
- gdImageCopy(srcback, src,0,0,0,0,src->sx,src->sy);
-
- if (srcback==NULL) {
- return 0;
- }
-
- f = GET_PIXEL_FUNCTION(src);
-
- for(y = 0; y<src->sy; y++) {
- for (x=0; x<src->sx; x++) {
- flt_r_sum = flt_g_sum = flt_b_sum = 0.0;
- cpxl = f(src, x, y);
-
- for (j=0; j<3; j++) {
- for (i=0; i<3; i++) {
- if ((j == 1) && (i == 1)) {
- flt_r[1][1] = flt_g[1][1] = flt_b[1][1] = 0.5;
- } else {
- pxl = f(src, x-(3>>1)+i, y-(3>>1)+j);
- new_a = gdImageAlpha(srcback, pxl);
-
- new_r = ((float)gdImageRed(srcback, cpxl)) - ((float)gdImageRed (srcback, pxl));
-
- if (new_r < 0.0f) {
- new_r = -new_r;
- }
- if (new_r != 0) {
- flt_r[j][i] = 1.0f/new_r;
- } else {
- flt_r[j][i] = 1.0f;
- }
-
- new_g = ((float)gdImageGreen(srcback, cpxl)) - ((float)gdImageGreen(srcback, pxl));
-
- if (new_g < 0.0f) {
- new_g = -new_g;
- }
- if (new_g != 0) {
- flt_g[j][i] = 1.0f/new_g;
- } else {
- flt_g[j][i] = 1.0f;
- }
-
- new_b = ((float)gdImageBlue(srcback, cpxl)) - ((float)gdImageBlue(srcback, pxl));
-
- if (new_b < 0.0f) {
- new_b = -new_b;
- }
- if (new_b != 0) {
- flt_b[j][i] = 1.0f/new_b;
- } else {
- flt_b[j][i] = 1.0f;
- }
- }
-
- flt_r_sum += flt_r[j][i];
- flt_g_sum += flt_g[j][i];
- flt_b_sum += flt_b [j][i];
- }
- }
-
- for (j=0; j<3; j++) {
- for (i=0; i<3; i++) {
- if (flt_r_sum != 0.0) {
- flt_r[j][i] /= flt_r_sum;
- }
- if (flt_g_sum != 0.0) {
- flt_g[j][i] /= flt_g_sum;
- }
- if (flt_b_sum != 0.0) {
- flt_b [j][i] /= flt_b_sum;
- }
- }
- }
-
- new_r = new_g = new_b = 0.0;
-
- for (j=0; j<3; j++) {
- for (i=0; i<3; i++) {
- pxl = f(src, x-(3>>1)+i, y-(3>>1)+j);
- new_r += (float)gdImageRed(srcback, pxl) * flt_r[j][i];
- new_g += (float)gdImageGreen(srcback, pxl) * flt_g[j][i];
- new_b += (float)gdImageBlue(srcback, pxl) * flt_b[j][i];
- }
- }
-
- new_r = (new_r > 255.0f)? 255.0f : ((new_r < 0.0f)? 0.0f:new_r);
- new_g = (new_g > 255.0f)? 255.0f : ((new_g < 0.0f)? 0.0f:new_g);
- new_b = (new_b > 255.0f)? 255.0f : ((new_b < 0.0f)? 0.0f:new_b);
- new_pxl = gdImageColorAllocateAlpha(src, (int)new_r, (int)new_g, (int)new_b, new_a);
- if (new_pxl == -1) {
- new_pxl = gdImageColorClosestAlpha(src, (int)new_r, (int)new_g, (int)new_b, new_a);
- }
- if ((y >= 0) && (y < src->sy)) {
- gdImageSetPixel (src, x, y, new_pxl);
- }
- }
- }
- gdImageDestroy(srcback);
- return 1;
-}
-
-int gdImageEdgeDetectQuick(gdImagePtr src)
-{
- float filter[3][3] = {{1.0,1.0,1.0},
- {0.0,0.0,0.0},
- {-1.0,-1.0,-1.0}};
-
- return gdImageConvolution(src, filter, 1, 127);
-}
-
-int gdImageGaussianBlur(gdImagePtr im)
-{
- float filter[3][3] = {{1.0,2.0,1.0},
- {2.0,4.0,2.0},
- {1.0,2.0,1.0}};
-
- return gdImageConvolution(im, filter, 16, 0);
-}
-
-int gdImageEmboss(gdImagePtr im)
-{
- float filter[3][3] = {{-1.0,0.0,-1.0},
- {0.0,4.0,0.0},
- {-1.0,0.0,-1.0}};
-
- return gdImageConvolution(im, filter, 1, 127);
-}
-
-int gdImageMeanRemoval(gdImagePtr im)
-{
- float filter[3][3] = {{-1.0,-1.0,-1.0},
- {-1.0,9.0,-1.0},
- {-1.0,-1.0,-1.0}};
-
- return gdImageConvolution(im, filter, 1, 0);
-}
-
-int gdImageSmooth(gdImagePtr im, float weight)
-{
- float filter[3][3] = {{1.0,1.0,1.0},
- {1.0,0.0,1.0},
- {1.0,1.0,1.0}};
-
- filter[1][1] = weight;
-
- return gdImageConvolution(im, filter, weight+8, 0);
-}
-/* End filters function */
diff --git a/ext/gd/libgd/gd.h b/ext/gd/libgd/gd.h
deleted file mode 100644
index 6aa50c06c7..0000000000
--- a/ext/gd/libgd/gd.h
+++ /dev/null
@@ -1,664 +0,0 @@
-#ifndef GD_H
-#define GD_H 1
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#include "php_compat.h"
-
-#ifndef WIN32
-/* default fontpath for unix systems */
-#define DEFAULT_FONTPATH "/usr/X11R6/lib/X11/fonts/TrueType:/usr/X11R6/lib/X11/fonts/truetype:/usr/X11R6/lib/X11/fonts/TTF:/usr/share/fonts/TrueType:/usr/share/fonts/truetype:/usr/openwin/lib/X11/fonts/TrueType:/usr/X11R6/lib/X11/fonts/Type1:."
-#define PATHSEPARATOR ":"
-#else
-/* default fontpath for windows systems */
-#define DEFAULT_FONTPATH "c:\\winnt\\fonts;c:\\windows\\fonts;."
-#define PATHSEPARATOR ";"
-#endif
-
-/* gd.h: declarations file for the graphic-draw module.
- * Permission to use, copy, modify, and distribute this software and its
- * documentation for any purpose and without fee is hereby granted, provided
- * that the above copyright notice appear in all copies and that both that
- * copyright notice and this permission notice appear in supporting
- * documentation. This software is provided "AS IS." Thomas Boutell and
- * Boutell.Com, Inc. disclaim all warranties, either express or implied,
- * including but not limited to implied warranties of merchantability and
- * fitness for a particular purpose, with respect to this code and accompanying
- * documentation. */
-
-/* stdio is needed for file I/O. */
-#include <stdio.h>
-#include "gd_io.h"
-
-void php_gd_error_ex(int type, const char *format, ...);
-
-void php_gd_error(const char *format, ...);
-
-
-/* The maximum number of palette entries in palette-based images.
- In the wonderful new world of gd 2.0, you can of course have
- many more colors when using truecolor mode. */
-
-#define gdMaxColors 256
-
-/* Image type. See functions below; you will not need to change
- the elements directly. Use the provided macros to
- access sx, sy, the color table, and colorsTotal for
- read-only purposes. */
-
-/* If 'truecolor' is set true, the image is truecolor;
- pixels are represented by integers, which
- must be 32 bits wide or more.
-
- True colors are repsented as follows:
-
- ARGB
-
- Where 'A' (alpha channel) occupies only the
- LOWER 7 BITS of the MSB. This very small
- loss of alpha channel resolution allows gd 2.x
- to keep backwards compatibility by allowing
- signed integers to be used to represent colors,
- and negative numbers to represent special cases,
- just as in gd 1.x. */
-
-#define gdAlphaMax 127
-#define gdAlphaOpaque 0
-#define gdAlphaTransparent 127
-#define gdRedMax 255
-#define gdGreenMax 255
-#define gdBlueMax 255
-#define gdTrueColorGetAlpha(c) (((c) & 0x7F000000) >> 24)
-#define gdTrueColorGetRed(c) (((c) & 0xFF0000) >> 16)
-#define gdTrueColorGetGreen(c) (((c) & 0x00FF00) >> 8)
-#define gdTrueColorGetBlue(c) ((c) & 0x0000FF)
-#define gdEffectReplace 0
-#define gdEffectAlphaBlend 1
-#define gdEffectNormal 2
-#define gdEffectOverlay 3
-
-
-/* This function accepts truecolor pixel values only. The
- source color is composited with the destination color
- based on the alpha channel value of the source color.
- The resulting color is opaque. */
-
-int gdAlphaBlend(int dest, int src);
-
-typedef struct gdImageStruct {
- /* Palette-based image pixels */
- unsigned char ** pixels;
- int sx;
- int sy;
- /* These are valid in palette images only. See also
- 'alpha', which appears later in the structure to
- preserve binary backwards compatibility */
- int colorsTotal;
- int red[gdMaxColors];
- int green[gdMaxColors];
- int blue[gdMaxColors];
- int open[gdMaxColors];
- /* For backwards compatibility, this is set to the
- first palette entry with 100% transparency,
- and is also set and reset by the
- gdImageColorTransparent function. Newer
- applications can allocate palette entries
- with any desired level of transparency; however,
- bear in mind that many viewers, notably
- many web browsers, fail to implement
- full alpha channel for PNG and provide
- support for full opacity or transparency only. */
- int transparent;
- int *polyInts;
- int polyAllocated;
- struct gdImageStruct *brush;
- struct gdImageStruct *tile;
- int brushColorMap[gdMaxColors];
- int tileColorMap[gdMaxColors];
- int styleLength;
- int stylePos;
- int *style;
- int interlace;
- /* New in 2.0: thickness of line. Initialized to 1. */
- int thick;
- /* New in 2.0: alpha channel for palettes. Note that only
- Macintosh Internet Explorer and (possibly) Netscape 6
- really support multiple levels of transparency in
- palettes, to my knowledge, as of 2/15/01. Most
- common browsers will display 100% opaque and
- 100% transparent correctly, and do something
- unpredictable and/or undesirable for levels
- in between. TBB */
- int alpha[gdMaxColors];
- /* Truecolor flag and pixels. New 2.0 fields appear here at the
- end to minimize breakage of existing object code. */
- int trueColor;
- int ** tpixels;
- /* Should alpha channel be copied, or applied, each time a
- pixel is drawn? This applies to truecolor images only.
- No attempt is made to alpha-blend in palette images,
- even if semitransparent palette entries exist.
- To do that, build your image as a truecolor image,
- then quantize down to 8 bits. */
- int alphaBlendingFlag;
- /* Should antialias functions be used */
- int antialias;
- /* Should the alpha channel of the image be saved? This affects
- PNG at the moment; other future formats may also
- have that capability. JPEG doesn't. */
- int saveAlphaFlag;
-
-
- /* 2.0.12: anti-aliased globals */
- int AA;
- int AA_color;
- int AA_dont_blend;
- unsigned char **AA_opacity;
- int AA_polygon;
- /* Stored and pre-computed variables for determining the perpendicular
- * distance from a point to the anti-aliased line being drawn:
- */
- int AAL_x1;
- int AAL_y1;
- int AAL_x2;
- int AAL_y2;
- int AAL_Bx_Ax;
- int AAL_By_Ay;
- int AAL_LAB_2;
- float AAL_LAB;
-
- /* 2.0.12: simple clipping rectangle. These values must be checked for safety when set; please use gdImageSetClip */
- int cx1;
- int cy1;
- int cx2;
- int cy2;
-} gdImage;
-
-typedef gdImage * gdImagePtr;
-
-typedef struct {
- /* # of characters in font */
- int nchars;
- /* First character is numbered... (usually 32 = space) */
- int offset;
- /* Character width and height */
- int w;
- int h;
- /* Font data; array of characters, one row after another.
- Easily included in code, also easily loaded from
- data files. */
- char *data;
-} gdFont;
-
-/* Text functions take these. */
-typedef gdFont *gdFontPtr;
-
-/* For backwards compatibility only. Use gdImageSetStyle()
- for MUCH more flexible line drawing. Also see
- gdImageSetBrush(). */
-#define gdDashSize 4
-
-/* Special colors. */
-
-#define gdStyled (-2)
-#define gdBrushed (-3)
-#define gdStyledBrushed (-4)
-#define gdTiled (-5)
-
-/* NOT the same as the transparent color index.
- This is used in line styles only. */
-#define gdTransparent (-6)
-
-#define gdAntiAliased (-7)
-
-/* Functions to manipulate images. */
-
-/* Creates a palette-based image (up to 256 colors). */
-gdImagePtr gdImageCreate(int sx, int sy);
-
-/* An alternate name for the above (2.0). */
-#define gdImageCreatePalette gdImageCreate
-
-/* Creates a truecolor image (millions of colors). */
-gdImagePtr gdImageCreateTrueColor(int sx, int sy);
-
-/* Creates an image from various file types. These functions
- return a palette or truecolor image based on the
- nature of the file being loaded. Truecolor PNG
- stays truecolor; palette PNG stays palette-based;
- JPEG is always truecolor. */
-gdImagePtr gdImageCreateFromPng(FILE *fd);
-gdImagePtr gdImageCreateFromPngCtx(gdIOCtxPtr in);
-gdImagePtr gdImageCreateFromWBMP(FILE *inFile);
-gdImagePtr gdImageCreateFromWBMPCtx(gdIOCtx *infile);
-gdImagePtr gdImageCreateFromJpeg(FILE *infile);
-gdImagePtr gdImageCreateFromJpegCtx(gdIOCtx *infile);
-
-/* A custom data source. */
-/* The source function must return -1 on error, otherwise the number
- of bytes fetched. 0 is EOF, not an error! */
-/* context will be passed to your source function. */
-
-typedef struct {
- int (*source) (void *context, char *buffer, int len);
- void *context;
-} gdSource, *gdSourcePtr;
-
-gdImagePtr gdImageCreateFromPngSource(gdSourcePtr in);
-
-gdImagePtr gdImageCreateFromGd(FILE *in);
-gdImagePtr gdImageCreateFromGdCtx(gdIOCtxPtr in);
-
-gdImagePtr gdImageCreateFromGd2(FILE *in);
-gdImagePtr gdImageCreateFromGd2Ctx(gdIOCtxPtr in);
-
-gdImagePtr gdImageCreateFromGd2Part(FILE *in, int srcx, int srcy, int w, int h);
-gdImagePtr gdImageCreateFromGd2PartCtx(gdIOCtxPtr in, int srcx, int srcy, int w, int h);
-
-gdImagePtr gdImageCreateFromXbm(FILE *fd);
-void gdImageXbmCtx(gdImagePtr image, char* file_name, int fg, gdIOCtx * out);
-
-gdImagePtr gdImageCreateFromXpm (char *filename);
-
-void gdImageDestroy(gdImagePtr im);
-
-/* Replaces or blends with the background depending on the
- most recent call to gdImageAlphaBlending and the
- alpha channel value of 'color'; default is to overwrite.
- Tiling and line styling are also implemented
- here. All other gd drawing functions pass through this call,
- allowing for many useful effects. */
-
-void gdImageSetPixel(gdImagePtr im, int x, int y, int color);
-
-int gdImageGetPixel(gdImagePtr im, int x, int y);
-
-void gdImageAABlend(gdImagePtr im);
-
-void gdImageLine(gdImagePtr im, int x1, int y1, int x2, int y2, int color);
-void gdImageAALine(gdImagePtr im, int x1, int y1, int x2, int y2, int color);
-
-/* For backwards compatibility only. Use gdImageSetStyle()
- for much more flexible line drawing. */
-void gdImageDashedLine(gdImagePtr im, int x1, int y1, int x2, int y2, int color);
-/* Corners specified (not width and height). Upper left first, lower right
- second. */
-void gdImageRectangle(gdImagePtr im, int x1, int y1, int x2, int y2, int color);
-/* Solid bar. Upper left corner first, lower right corner second. */
-void gdImageFilledRectangle(gdImagePtr im, int x1, int y1, int x2, int y2, int color);
-void gdImageSetClip(gdImagePtr im, int x1, int y1, int x2, int y2);
-void gdImageGetClip(gdImagePtr im, int *x1P, int *y1P, int *x2P, int *y2P);
-void gdImageChar(gdImagePtr im, gdFontPtr f, int x, int y, int c, int color);
-void gdImageCharUp(gdImagePtr im, gdFontPtr f, int x, int y, int c, int color);
-void gdImageString(gdImagePtr im, gdFontPtr f, int x, int y, unsigned char *s, int color);
-void gdImageStringUp(gdImagePtr im, gdFontPtr f, int x, int y, unsigned char *s, int color);
-void gdImageString16(gdImagePtr im, gdFontPtr f, int x, int y, unsigned short *s, int color);
-void gdImageStringUp16(gdImagePtr im, gdFontPtr f, int x, int y, unsigned short *s, int color);
-
-/* 2.0.16: for thread-safe use of gdImageStringFT and friends,
- * call this before allowing any thread to call gdImageStringFT.
- * Otherwise it is invoked by the first thread to invoke
- * gdImageStringFT, with a very small but real risk of a race condition.
- * Return 0 on success, nonzero on failure to initialize freetype.
- */
-int gdFontCacheSetup(void);
-
-/* Optional: clean up after application is done using fonts in gdImageStringFT(). */
-void gdFontCacheShutdown(void);
-
-/* Calls gdImageStringFT. Provided for backwards compatibility only. */
-char *gdImageStringTTF(gdImage *im, int *brect, int fg, char *fontlist,
- double ptsize, double angle, int x, int y, char *string);
-
-/* FreeType 2 text output */
-char *gdImageStringFT(gdImage *im, int *brect, int fg, char *fontlist,
- double ptsize, double angle, int x, int y, char *string);
-
-typedef struct {
- double linespacing; /* fine tune line spacing for '\n' */
- int flags; /* Logical OR of gdFTEX_ values */
- int charmap; /* TBB: 2.0.12: may be gdFTEX_Unicode,
- gdFTEX_Shift_JIS, or gdFTEX_Big5;
- when not specified, maps are searched
- for in the above order. */
- int hdpi;
- int vdpi;
-}
- gdFTStringExtra, *gdFTStringExtraPtr;
-
-#define gdFTEX_LINESPACE 1
-#define gdFTEX_CHARMAP 2
-#define gdFTEX_RESOLUTION 4
-
-/* These are NOT flags; set one in 'charmap' if you set the gdFTEX_CHARMAP bit in 'flags'. */
-#define gdFTEX_Unicode 0
-#define gdFTEX_Shift_JIS 1
-#define gdFTEX_Big5 2
-
-/* FreeType 2 text output with fine tuning */
-char *
-gdImageStringFTEx(gdImage * im, int *brect, int fg, char * fontlist,
- double ptsize, double angle, int x, int y, char * string,
- gdFTStringExtraPtr strex);
-
-
-/* Point type for use in polygon drawing. */
-typedef struct {
- int x, y;
-} gdPoint, *gdPointPtr;
-
-void gdImagePolygon(gdImagePtr im, gdPointPtr p, int n, int c);
-void gdImageFilledPolygon(gdImagePtr im, gdPointPtr p, int n, int c);
-
-/* These functions still work with truecolor images,
- for which they never return error. */
-int gdImageColorAllocate(gdImagePtr im, int r, int g, int b);
-/* gd 2.0: palette entries with non-opaque transparency are permitted. */
-int gdImageColorAllocateAlpha(gdImagePtr im, int r, int g, int b, int a);
-/* Assumes opaque is the preferred alpha channel value */
-int gdImageColorClosest(gdImagePtr im, int r, int g, int b);
-/* Closest match taking all four parameters into account.
- A slightly different color with the same transparency
- beats the exact same color with radically different
- transparency */
-int gdImageColorClosestAlpha(gdImagePtr im, int r, int g, int b, int a);
-/* An alternate method */
-int gdImageColorClosestHWB(gdImagePtr im, int r, int g, int b);
-/* Returns exact, 100% opaque matches only */
-int gdImageColorExact(gdImagePtr im, int r, int g, int b);
-/* Returns an exact match only, including alpha */
-int gdImageColorExactAlpha(gdImagePtr im, int r, int g, int b, int a);
-/* Opaque only */
-int gdImageColorResolve(gdImagePtr im, int r, int g, int b);
-/* Based on gdImageColorExactAlpha and gdImageColorClosestAlpha */
-int gdImageColorResolveAlpha(gdImagePtr im, int r, int g, int b, int a);
-
-/* A simpler way to obtain an opaque truecolor value for drawing on a
- truecolor image. Not for use with palette images! */
-
-#define gdTrueColor(r, g, b) (((r) << 16) + \
- ((g) << 8) + \
- (b))
-
-/* Returns a truecolor value with an alpha channel component.
- gdAlphaMax (127, **NOT 255**) is transparent, 0 is completely
- opaque. */
-
-#define gdTrueColorAlpha(r, g, b, a) (((a) << 24) + \
- ((r) << 16) + \
- ((g) << 8) + \
- (b))
-
-void gdImageColorDeallocate(gdImagePtr im, int color);
-
-/* Converts a truecolor image to a palette-based image,
- using a high-quality two-pass quantization routine
- which attempts to preserve alpha channel information
- as well as R/G/B color information when creating
- a palette. If ditherFlag is set, the image will be
- dithered to approximate colors better, at the expense
- of some obvious "speckling." colorsWanted can be
- anything up to 256. If the original source image
- includes photographic information or anything that
- came out of a JPEG, 256 is strongly recommended.
-
- Better yet, don't use this function -- write real
- truecolor PNGs and JPEGs. The disk space gain of
- conversion to palette is not great (for small images
- it can be negative) and the quality loss is ugly. */
-
-gdImagePtr gdImageCreatePaletteFromTrueColor (gdImagePtr im, int ditherFlag, int colorsWanted);
-
-void gdImageTrueColorToPalette(gdImagePtr im, int ditherFlag, int colorsWanted);
-
-
-/* An attempt at getting the results of gdImageTrueColorToPalette
- to look a bit more like the original (im1 is the original
- and im2 is the palette version */
-int gdImageColorMatch(gdImagePtr im1, gdImagePtr im2);
-
-/* Specifies a color index (if a palette image) or an
- RGB color (if a truecolor image) which should be
- considered 100% transparent. FOR TRUECOLOR IMAGES,
- THIS IS IGNORED IF AN ALPHA CHANNEL IS BEING
- SAVED. Use gdImageSaveAlpha(im, 0); to
- turn off the saving of a full alpha channel in
- a truecolor image. Note that gdImageColorTransparent
- is usually compatible with older browsers that
- do not understand full alpha channels well. TBB */
-void gdImageColorTransparent(gdImagePtr im, int color);
-
-void gdImagePaletteCopy(gdImagePtr dst, gdImagePtr src);
-void gdImagePng(gdImagePtr im, FILE *out);
-void gdImagePngCtx(gdImagePtr im, gdIOCtx *out);
-void gdImageGif(gdImagePtr im, FILE *out);
-void gdImageGifCtx(gdImagePtr im, gdIOCtx *out);
-/* 2.0.12: Compression level: 0-9 or -1, where 0 is NO COMPRESSION at all,
- * 1 is FASTEST but produces larger files, 9 provides the best
- * compression (smallest files) but takes a long time to compress, and
- * -1 selects the default compiled into the zlib library.
- */
-void gdImagePngEx(gdImagePtr im, FILE * out, int level);
-void gdImagePngCtxEx(gdImagePtr im, gdIOCtx * out, int level);
-
-void gdImageWBMP(gdImagePtr image, int fg, FILE *out);
-void gdImageWBMPCtx(gdImagePtr image, int fg, gdIOCtx *out);
-
-/* Guaranteed to correctly free memory returned
- by the gdImage*Ptr functions */
-void gdFree(void *m);
-
-/* Best to free this memory with gdFree(), not free() */
-void *gdImageWBMPPtr(gdImagePtr im, int *size, int fg);
-
-/* 100 is highest quality (there is always a little loss with JPEG).
- 0 is lowest. 10 is about the lowest useful setting. */
-void gdImageJpeg(gdImagePtr im, FILE *out, int quality);
-void gdImageJpegCtx(gdImagePtr im, gdIOCtx *out, int quality);
-
-/* Best to free this memory with gdFree(), not free() */
-void *gdImageJpegPtr(gdImagePtr im, int *size, int quality);
-
-gdImagePtr gdImageCreateFromGif(FILE *fd);
-gdImagePtr gdImageCreateFromGifCtx(gdIOCtxPtr in);
-gdImagePtr gdImageCreateFromGifSource(gdSourcePtr in);
-
-/* A custom data sink. For backwards compatibility. Use
- gdIOCtx instead. */
-/* The sink function must return -1 on error, otherwise the number
- of bytes written, which must be equal to len. */
-/* context will be passed to your sink function. */
-typedef struct {
- int (*sink) (void *context, const char *buffer, int len);
- void *context;
-} gdSink, *gdSinkPtr;
-
-void gdImagePngToSink(gdImagePtr im, gdSinkPtr out);
-
-void gdImageGd(gdImagePtr im, FILE *out);
-void gdImageGd2(gdImagePtr im, FILE *out, int cs, int fmt);
-
-/* Best to free this memory with gdFree(), not free() */
-void* gdImagePngPtr(gdImagePtr im, int *size);
-
-/* Best to free this memory with gdFree(), not free() */
-void* gdImageGdPtr(gdImagePtr im, int *size);
-void *gdImagePngPtrEx(gdImagePtr im, int *size, int level);
-
-/* Best to free this memory with gdFree(), not free() */
-void* gdImageGd2Ptr(gdImagePtr im, int cs, int fmt, int *size);
-
-void gdImageEllipse(gdImagePtr im, int cx, int cy, int w, int h, int c);
-
-/* Style is a bitwise OR ( | operator ) of these.
- gdArc and gdChord are mutually exclusive;
- gdChord just connects the starting and ending
- angles with a straight line, while gdArc produces
- a rounded edge. gdPie is a synonym for gdArc.
- gdNoFill indicates that the arc or chord should be
- outlined, not filled. gdEdged, used together with
- gdNoFill, indicates that the beginning and ending
- angles should be connected to the center; this is
- a good way to outline (rather than fill) a
- 'pie slice'. */
-#define gdArc 0
-#define gdPie gdArc
-#define gdChord 1
-#define gdNoFill 2
-#define gdEdged 4
-
-void gdImageFilledArc(gdImagePtr im, int cx, int cy, int w, int h, int s, int e, int color, int style);
-void gdImageArc(gdImagePtr im, int cx, int cy, int w, int h, int s, int e, int color);
-void gdImageFilledEllipse(gdImagePtr im, int cx, int cy, int w, int h, int color);
-void gdImageFillToBorder(gdImagePtr im, int x, int y, int border, int color);
-void gdImageFill(gdImagePtr im, int x, int y, int color);
-void gdImageCopy(gdImagePtr dst, gdImagePtr src, int dstX, int dstY, int srcX, int srcY, int w, int h);
-void gdImageCopyMerge(gdImagePtr dst, gdImagePtr src, int dstX, int dstY,
- int srcX, int srcY, int w, int h, int pct);
-void gdImageCopyMergeGray(gdImagePtr dst, gdImagePtr src, int dstX, int dstY,
- int srcX, int srcY, int w, int h, int pct);
-
-/* Stretches or shrinks to fit, as needed. Does NOT attempt
- to average the entire set of source pixels that scale down onto the
- destination pixel. */
-void gdImageCopyResized(gdImagePtr dst, gdImagePtr src, int dstX, int dstY, int srcX, int srcY, int dstW, int dstH, int srcW, int srcH);
-
-/* gd 2.0: stretches or shrinks to fit, as needed. When called with a
- truecolor destination image, this function averages the
- entire set of source pixels that scale down onto the
- destination pixel, taking into account what portion of the
- destination pixel each source pixel represents. This is a
- floating point operation, but this is not a performance issue
- on modern hardware, except for some embedded devices. If the
- destination is a palette image, gdImageCopyResized is
- substituted automatically. */
-void gdImageCopyResampled(gdImagePtr dst, gdImagePtr src, int dstX, int dstY, int srcX, int srcY, int dstW, int dstH, int srcW, int srcH);
-
-gdImagePtr gdImageRotate90(gdImagePtr src);
-gdImagePtr gdImageRotate180(gdImagePtr src);
-gdImagePtr gdImageRotate270(gdImagePtr src);
-gdImagePtr gdImageRotate45(gdImagePtr src, double dAngle, int clrBack);
-gdImagePtr gdImageRotate (gdImagePtr src, double dAngle, int clrBack);
-
-void gdImageSetBrush(gdImagePtr im, gdImagePtr brush);
-void gdImageSetTile(gdImagePtr im, gdImagePtr tile);
-void gdImageSetAntiAliased(gdImagePtr im, int c);
-void gdImageSetAntiAliasedDontBlend(gdImagePtr im, int c, int dont_blend);
-void gdImageSetStyle(gdImagePtr im, int *style, int noOfPixels);
-/* Line thickness (defaults to 1). Affects lines, ellipses,
- rectangles, polygons and so forth. */
-void gdImageSetThickness(gdImagePtr im, int thickness);
-/* On or off (1 or 0) for all three of these. */
-void gdImageInterlace(gdImagePtr im, int interlaceArg);
-void gdImageAlphaBlending(gdImagePtr im, int alphaBlendingArg);
-void gdImageAntialias(gdImagePtr im, int antialias);
-void gdImageSaveAlpha(gdImagePtr im, int saveAlphaArg);
-
-/* Macros to access information about images. */
-
-/* Returns nonzero if the image is a truecolor image,
- zero for a palette image. */
-
-#define gdImageTrueColor(im) ((im)->trueColor)
-
-#define gdImageSX(im) ((im)->sx)
-#define gdImageSY(im) ((im)->sy)
-#define gdImageColorsTotal(im) ((im)->colorsTotal)
-#define gdImageRed(im, c) ((im)->trueColor ? gdTrueColorGetRed(c) : \
- (im)->red[(c)])
-#define gdImageGreen(im, c) ((im)->trueColor ? gdTrueColorGetGreen(c) : \
- (im)->green[(c)])
-#define gdImageBlue(im, c) ((im)->trueColor ? gdTrueColorGetBlue(c) : \
- (im)->blue[(c)])
-#define gdImageAlpha(im, c) ((im)->trueColor ? gdTrueColorGetAlpha(c) : \
- (im)->alpha[(c)])
-#define gdImageGetTransparent(im) ((im)->transparent)
-#define gdImageGetInterlaced(im) ((im)->interlace)
-
-/* These macros provide direct access to pixels in
- palette-based and truecolor images, respectively.
- If you use these macros, you must perform your own
- bounds checking. Use of the macro for the correct type
- of image is also your responsibility. */
-#define gdImagePalettePixel(im, x, y) (im)->pixels[(y)][(x)]
-#define gdImageTrueColorPixel(im, x, y) (im)->tpixels[(y)][(x)]
-
-/* I/O Support routines. */
-
-gdIOCtx* gdNewFileCtx(FILE*);
-gdIOCtx* gdNewDynamicCtx(int, void*);
-gdIOCtx *gdNewDynamicCtxEx(int size, void *data, int freeFlag);
-gdIOCtx* gdNewSSCtx(gdSourcePtr in, gdSinkPtr out);
-void* gdDPExtractData(struct gdIOCtx* ctx, int *size);
-
-#define GD2_CHUNKSIZE 128
-#define GD2_CHUNKSIZE_MIN 64
-#define GD2_CHUNKSIZE_MAX 4096
-
-#define GD2_VERS 2
-#define GD2_ID "gd2"
-#define GD2_FMT_RAW 1
-#define GD2_FMT_COMPRESSED 2
-
-
-/* filters section
- *
- * Negate the imag src, white becomes black,
- * The red, green, and blue intensities of an image are negated.
- * White becomes black, yellow becomes blue, etc.
- */
-int gdImageNegate(gdImagePtr src);
-
-/* Convert the image src to a grayscale image */
-int gdImageGrayScale(gdImagePtr src);
-
-/* Set the brightness level <brightness> for the image src */
-int gdImageBrightness(gdImagePtr src, int brightness);
-
-/* Set the contrast level <contrast> for the image <src> */
-int gdImageContrast(gdImagePtr src, double contrast);
-
-/* Simply adds or substracts respectively red, green or blue to a pixel */
-int gdImageColor(gdImagePtr src, int red, int green, int blue);
-
-/* Image convolution by a 3x3 custom matrix */
-int gdImageConvolution(gdImagePtr src, float ft[3][3], float filter_div, float offset);
-
-int gdImageEdgeDetectQuick(gdImagePtr src);
-
-int gdImageGaussianBlur(gdImagePtr im);
-
-int gdImageSelectiveBlur( gdImagePtr src);
-
-int gdImageEmboss(gdImagePtr im);
-
-int gdImageMeanRemoval(gdImagePtr im);
-
-int gdImageSmooth(gdImagePtr im, float weight);
-
-/* Image comparison definitions */
-int gdImageCompare(gdImagePtr im1, gdImagePtr im2);
-
-#define GD_CMP_IMAGE 1 /* Actual image IS different */
-#define GD_CMP_NUM_COLORS 2 /* Number of Colours in pallette differ */
-#define GD_CMP_COLOR 4 /* Image colours differ */
-#define GD_CMP_SIZE_X 8 /* Image width differs */
-#define GD_CMP_SIZE_Y 16 /* Image heights differ */
-#define GD_CMP_TRANSPARENT 32 /* Transparent colour */
-#define GD_CMP_BACKGROUND 64 /* Background colour */
-#define GD_CMP_INTERLACE 128 /* Interlaced setting */
-#define GD_CMP_TRUECOLOR 256 /* Truecolor vs palette differs */
-
-/* resolution affects ttf font rendering, particularly hinting */
-#define GD_RESOLUTION 96 /* pixels per inch */
-
-#ifdef __cplusplus
-}
-#endif
-
-/* 2.0.12: this now checks the clipping rectangle */
-#define gdImageBoundsSafe(im, x, y) (!((((y) < (im)->cy1) || ((y) > (im)->cy2)) || (((x) < (im)->cx1) || ((x) > (im)->cx2))))
-
-#endif /* GD_H */
diff --git a/ext/gd/libgd/gd2copypal.c b/ext/gd/libgd/gd2copypal.c
deleted file mode 100644
index ae9b559f17..0000000000
--- a/ext/gd/libgd/gd2copypal.c
+++ /dev/null
@@ -1,65 +0,0 @@
-
-#include <stdio.h>
-#include "gd.h"
-#include <stdlib.h>
-
-/* A short program which converts a .png file into a .gd file, for
- your convenience in creating images on the fly from a
- basis image that must be loaded quickly. The .gd format
- is not intended to be a general-purpose format. */
-
-int
-main (int argc, char **argv)
-{
- gdImagePtr im;
- gdImagePtr pal;
- FILE *in, *out;
- if (argc != 3)
- {
- fprintf (stderr, "Usage: gd2copypal palettefile.gd2 filename.gd2\n");
- exit (1);
- }
- in = fopen (argv[1], "rb");
- if (!in)
- {
- fprintf (stderr, "Palette file does not exist!\n");
- exit (1);
- }
- pal = gdImageCreateFromGd2 (in);
- fclose (in);
- if (!pal)
- {
- fprintf (stderr, "Palette is not in GD2 format!\n");
- exit (1);
- }
-
- in = fopen (argv[2], "rb");
- if (!in)
- {
- fprintf (stderr, "Input file does not exist!\n");
- exit (1);
- }
- im = gdImageCreateFromGd2 (in);
- fclose (in);
- if (!im)
- {
- fprintf (stderr, "Input is not in GD2 format!\n");
- exit (1);
- }
-
- gdImagePaletteCopy (im, pal);
-
- out = fopen (argv[2], "wb");
- if (!out)
- {
- fprintf (stderr, "Output file cannot be written to!\n");
- gdImageDestroy (im);
- exit (1);
- }
- gdImageGd2 (im, out, 128, 2);
- fclose (out);
- gdImageDestroy (pal);
- gdImageDestroy (im);
-
- return 0;
-}
diff --git a/ext/gd/libgd/gd2time.c b/ext/gd/libgd/gd2time.c
deleted file mode 100644
index 18e6c0c9e4..0000000000
--- a/ext/gd/libgd/gd2time.c
+++ /dev/null
@@ -1,60 +0,0 @@
-
-#include <stdio.h>
-#include <stdlib.h> /* for atoi */
-#include <time.h> /* For time */
-#include "gd.h"
-
-/* A short program which converts a .png file into a .gd file, for
- your convenience in creating images on the fly from a
- basis image that must be loaded quickly. The .gd format
- is not intended to be a general-purpose format. */
-
-int
-main (int argc, char **argv)
-{
- gdImagePtr im;
- FILE *in;
- int x, y, w, h;
- int c;
- int i;
- int t0;
-
- if (argc != 7)
- {
- fprintf (stderr, "Usage: gd2time filename.gd count x y w h\n");
- exit (1);
- }
-
- c = atoi (argv[2]);
- x = atoi (argv[3]);
- y = atoi (argv[4]);
- w = atoi (argv[5]);
- h = atoi (argv[6]);
-
- printf ("Extracting %d times from (%d, %d), size is %dx%d\n", c, x, y, w, h);
-
- t0 = time (0);
- for (i = 0; i < c; i++)
- {
- in = fopen (argv[1], "rb");
- if (!in)
- {
- fprintf (stderr, "Input file does not exist!\n");
- exit (1);
- }
-
- im = gdImageCreateFromGd2Part (in, x, y, w, h);
- fclose (in);
-
- if (!im)
- {
- fprintf (stderr, "Error reading source file!\n");
- exit (1);
- }
- gdImageDestroy (im);
- };
- t0 = time (0) - t0;
- printf ("%d seconds to extract (& destroy) %d times\n", t0, c);
-
- return 0;
-}
diff --git a/ext/gd/libgd/gd2topng.c b/ext/gd/libgd/gd2topng.c
deleted file mode 100644
index 6db5eb3003..0000000000
--- a/ext/gd/libgd/gd2topng.c
+++ /dev/null
@@ -1,49 +0,0 @@
-
-#include <stdio.h>
-#include "gd.h"
-
-/* A short program which converts a .png file into a .gd file, for
- your convenience in creating images on the fly from a
- basis image that must be loaded quickly. The .gd format
- is not intended to be a general-purpose format. */
-
-int
-main (int argc, char **argv)
-{
- gdImagePtr im;
- FILE *in, *out;
- if (argc != 3)
- {
- fprintf (stderr, "Usage: gd2topng filename.gd2 filename.png\n");
- exit (1);
- }
- in = fopen (argv[1], "rb");
- if (!in)
- {
- fprintf (stderr, "Input file does not exist!\n");
- exit (1);
- }
- im = gdImageCreateFromGd2 (in);
- fclose (in);
- if (!im)
- {
- fprintf (stderr, "Input is not in GD2 format!\n");
- exit (1);
- }
- out = fopen (argv[2], "wb");
- if (!out)
- {
- fprintf (stderr, "Output file cannot be written to!\n");
- gdImageDestroy (im);
- exit (1);
- }
-#ifdef HAVE_LIBPNG
- gdImagePng (im, out);
-#else
- fprintf(stderr, "No PNG library support available.\n");
-#endif
- fclose (out);
- gdImageDestroy (im);
-
- return 0;
-}
diff --git a/ext/gd/libgd/gd_arc_f_buggy.c b/ext/gd/libgd/gd_arc_f_buggy.c
deleted file mode 100644
index f51d916e5c..0000000000
--- a/ext/gd/libgd/gd_arc_f_buggy.c
+++ /dev/null
@@ -1,741 +0,0 @@
-/* This is potentially great stuff, but fails against the test
- program at the end. This would probably be much more
- efficent than the implementation currently in gd.c if the
- errors in the output were corrected. TBB */
-
-#if 0
-
-#include "gd.h"
-#include <math.h>
-
-/* Courtesy of F J Franklin. */
-
-static gdPoint gdArcClosest (int width, int height, int angle);
-
-void
-gdImageFilledEllipse (gdImagePtr im, int cx, int cy, int width, int height, int color)
-{
- gdImageFilledArc (im, cx, cy, width, height, 0, 360, color, gdChord);
-}
-
-void
-gdImageFilledArc (gdImagePtr im, int cx, int cy, int width, int height, int s, int e, int color, int style)
-{
- gdPoint pt[7];
- gdPoint axis_pt[4];
-
- int angle;
-
- int have_s = 0;
- int have_e = 0;
-
- int flip_x = 0;
- int flip_y = 0;
-
- int conquer = 0;
-
- int i;
-
- int a;
- int b;
-
- int x;
- int y;
-
- long s_sin = 0;
- long s_cos = 0;
- long e_sin = 0;
- long e_cos = 0;
-
- long w; /* a * 2 */
- long h; /* b * 2 */
-
- long x2; /* x * 2 */
- long y2; /* y * 2 */
- long lx2; /* x * 2 (line) */
- long ly2; /* y * 2 (line) */
-
- long ws; /* (a * 2)^2 */
- long hs; /* (b * 2)^2 */
-
- long whs; /* (a * 2)^2 * (b * 2)^2 */
-
- long g; /* decision variable */
- long lg; /* decision variable (line) */
-
- width = (width & 1) ? (width + 1) : (width);
- height = (height & 1) ? (height + 1) : (height);
-
- a = width / 2;
- b = height / 2;
-
- axis_pt[0].x = a;
- axis_pt[0].y = 0;
- axis_pt[1].x = 0;
- axis_pt[1].y = b;
- axis_pt[2].x = -a;
- axis_pt[2].y = 0;
- axis_pt[3].x = 0;
- axis_pt[3].y = -b;
-
- if (s == e)
- return;
-
- if ((e - s) >= 360)
- {
- s = 0;
- e = 0;
- }
-
- while (s < 0)
- s += 360;
- while (s >= 360)
- s -= 360;
- while (e < 0)
- e += 360;
- while (e >= 360)
- e -= 360;
-
- if (e <= s)
- e += 360;
-
- /* I'm assuming a chord-rule at the moment. Need to add origin to get a
- * pie-rule, but will need to set chord-rule before recursion...
- */
-
- for (i = 0; i < 4; i++)
- {
- if ((s < (i + 1) * 90) && (e > (i + 1) * 90))
- {
- gdImageFilledArc (im, cx, cy, width, height, s, (i + 1) * 90, color, gdChord);
- pt[0] = gdArcClosest (width, height, s);
- pt[0].x += cx;
- pt[0].y += cy;
- pt[1].x = cx + axis_pt[(i + 1) & 3].x;
- pt[1].y = cy + axis_pt[(i + 1) & 3].y;
- if (e <= (i + 2) * 90)
- {
- gdImageFilledArc (im, cx, cy, width, height, (i + 1) * 90, e, color, gdChord);
- pt[2] = gdArcClosest (width, height, e);
- pt[2].x += cx;
- pt[2].y += cy;
- if (style == gdChord)
- {
- gdImageFilledPolygon (im, pt, 3, color);
- gdImagePolygon (im, pt, 3, color);
- }
- else if (style == gdPie)
- {
- pt[3].x = cx;
- pt[3].y = cy;
- gdImageFilledPolygon (im, pt, 4, color);
- gdImagePolygon (im, pt, 4, color);
- }
- }
- else
- {
- gdImageFilledArc (im, cx, cy, width, height, (i + 1) * 90, (i + 2) * 90, color, gdChord);
- pt[2].x = cx + axis_pt[(i + 2) & 3].x;
- pt[2].y = cy + axis_pt[(i + 2) & 3].y;
- if (e <= (i + 3) * 90)
- {
- gdImageFilledArc (im, cx, cy, width, height, (i + 2) * 90, e, color, gdChord);
- pt[3] = gdArcClosest (width, height, e);
- pt[3].x += cx;
- pt[3].y += cy;
- if (style == gdChord)
- {
- gdImageFilledPolygon (im, pt, 4, color);
- gdImagePolygon (im, pt, 4, color);
- }
- else if (style == gdPie)
- {
- pt[4].x = cx;
- pt[4].y = cy;
- gdImageFilledPolygon (im, pt, 5, color);
- gdImagePolygon (im, pt, 5, color);
- }
- }
- else
- {
- gdImageFilledArc (im, cx, cy, width, height, (i + 2) * 90, (i + 3) * 90, color, gdChord);
- pt[3].x = cx + axis_pt[(i + 3) & 3].x;
- pt[3].y = cy + axis_pt[(i + 3) & 3].y;
- if (e <= (i + 4) * 90)
- {
- gdImageFilledArc (im, cx, cy, width, height, (i + 3) * 90, e, color, gdChord);
- pt[4] = gdArcClosest (width, height, e);
- pt[4].x += cx;
- pt[4].y += cy;
- if (style == gdChord)
- {
- gdImageFilledPolygon (im, pt, 5, color);
- gdImagePolygon (im, pt, 5, color);
- }
- else if (style == gdPie)
- {
- pt[5].x = cx;
- pt[5].y = cy;
- gdImageFilledPolygon (im, pt, 6, color);
- gdImagePolygon (im, pt, 6, color);
- }
- }
- else
- {
- gdImageFilledArc (im, cx, cy, width, height, (i + 3) * 90, (i + 4) * 90, color, gdChord);
- pt[4].x = cx + axis_pt[(i + 4) & 3].x;
- pt[4].y = cy + axis_pt[(i + 4) & 3].y;
-
- gdImageFilledArc (im, cx, cy, width, height, (i + 4) * 90, e, color, gdChord);
- pt[5] = gdArcClosest (width, height, e);
- pt[5].x += cx;
- pt[5].y += cy;
- if (style == gdChord)
- {
- gdImageFilledPolygon (im, pt, 6, color);
- gdImagePolygon (im, pt, 6, color);
- }
- else if (style == gdPie)
- {
- pt[6].x = cx;
- pt[6].y = cy;
- gdImageFilledPolygon (im, pt, 7, color);
- gdImagePolygon (im, pt, 7, color);
- }
- }
- }
- }
- return;
- }
- }
-
- /* At this point we have only arcs that lies within a quadrant -
- * map this to first quadrant...
- */
-
- if ((s >= 90) && (e <= 180))
- {
- angle = s;
- s = 180 - e;
- e = 180 - angle;
- flip_x = 1;
- }
- if ((s >= 180) && (e <= 270))
- {
- s = s - 180;
- e = e - 180;
- flip_x = 1;
- flip_y = 1;
- }
- if ((s >= 270) && (e <= 360))
- {
- angle = s;
- s = 360 - e;
- e = 360 - angle;
- flip_y = 1;
- }
-
- if (s == 0)
- {
- s_sin = 0;
- s_cos = (long) ((double) 32768);
- }
- else
- {
- s_sin = (long) ((double) 32768 * sin ((double) s * M_PI / (double) 180));
- s_cos = (long) ((double) 32768 * cos ((double) s * M_PI / (double) 180));
- }
- if (e == 0)
- {
- e_sin = (long) ((double) 32768);
- e_cos = 0;
- }
- else
- {
- e_sin = (long) ((double) 32768 * sin ((double) e * M_PI / (double) 180));
- e_cos = (long) ((double) 32768 * cos ((double) e * M_PI / (double) 180));
- }
-
- w = (long) width;
- h = (long) height;
-
- ws = w * w;
- hs = h * h;
-
- whs = 1;
- while ((ws > 32768) || (hs > 32768))
- {
- ws = (ws + 1) / 2; /* Unfortunate limitations on integers makes */
- hs = (hs + 1) / 2; /* drawing large ellipses problematic... */
- whs *= 2;
- }
- while ((ws * hs) > (0x04000000L / whs))
- {
- ws = (ws + 1) / 2;
- hs = (hs + 1) / 2;
- whs *= 2;
- }
- whs *= ws * hs;
-
- pt[0].x = w / 2;
- pt[0].y = 0;
-
- pt[2].x = 0;
- pt[2].y = h / 2;
-
- have_s = 0;
- have_e = 0;
-
- if (s == 0)
- have_s = 1;
- if (e == 90)
- have_e = 1;
-
- x2 = w;
- y2 = 0; /* Starting point is exactly on ellipse */
-
- g = x2 - 1;
- g = g * g * hs + 4 * ws - whs;
-
- while ((x2 * hs) > (y2 * ws)) /* Keep |tangent| > 1 */
- {
- y2 += 2;
- g += ws * 4 * (y2 + 1);
-
- if (g > 0) /* Need to drop */
- {
- x2 -= 2;
- g -= hs * 4 * x2;
- }
-
- if ((have_s == 0) && ((s_sin * x2) <= (y2 * s_cos)))
- {
- pt[0].x = (int) (x2 / 2);
- pt[0].y = (int) (y2 / 2);
- have_s = 1;
- }
-
- if ((have_e == 0) && ((e_sin * x2) <= (y2 * e_cos)))
- {
- pt[2].x = (int) (x2 / 2);
- pt[2].y = (int) (y2 / 2);
- have_e = 1;
- }
- }
- pt[1].x = (int) (x2 / 2);
- pt[1].y = (int) (y2 / 2);
-
- x2 = 0;
- y2 = h; /* Starting point is exactly on ellipse */
-
- g = y2 - 1;
- g = g * g * ws + 4 * hs - whs;
-
- while ((x2 * hs) < (y2 * ws))
- {
- x2 += 2;
- g += hs * 4 * (x2 + 1);
-
- if (g > 0) /* Need to drop */
- {
- y2 -= 2;
- g -= ws * 4 * y2;
- }
-
- if ((have_s == 0) && ((s_sin * x2) >= (y2 * s_cos)))
- {
- pt[0].x = (int) (x2 / 2);
- pt[0].y = (int) (y2 / 2);
- have_s = 1;
- }
-
- if ((have_e == 0) && ((e_sin * x2) >= (y2 * e_cos)))
- {
- pt[2].x = (int) (x2 / 2);
- pt[2].y = (int) (y2 / 2);
- have_e = 1;
- }
- }
-
- if ((have_s == 0) || (have_e == 0))
- return; /* Bizarre case */
-
- if (style == gdPie)
- {
- pt[3] = pt[0];
- pt[4] = pt[1];
- pt[5] = pt[2];
-
- pt[0].x = cx + (flip_x ? (-pt[0].x) : pt[0].x);
- pt[0].y = cy + (flip_y ? (-pt[0].y) : pt[0].y);
- pt[1].x = cx;
- pt[1].y = cy;
- pt[2].x = cx + (flip_x ? (-pt[2].x) : pt[2].x);
- pt[2].y = cy + (flip_y ? (-pt[2].y) : pt[2].y);
- gdImageFilledPolygon (im, pt, 3, color);
- gdImagePolygon (im, pt, 3, color);
-
- pt[0] = pt[3];
- pt[1] = pt[4];
- pt[2] = pt[5];
- }
-
- if (((s_cos * hs) > (s_sin * ws)) && ((e_cos * hs) < (e_sin * ws)))
- { /* the points are on different parts of the curve...
- * this is too tricky to try to handle, so divide and conquer:
- */
- pt[3] = pt[0];
- pt[4] = pt[1];
- pt[5] = pt[2];
-
- pt[0].x = cx + (flip_x ? (-pt[0].x) : pt[0].x);
- pt[0].y = cy + (flip_y ? (-pt[0].y) : pt[0].y);
- pt[1].x = cx + (flip_x ? (-pt[1].x) : pt[1].x);
- pt[1].y = cy + (flip_y ? (-pt[1].y) : pt[1].y);
- pt[2].x = cx + (flip_x ? (-pt[2].x) : pt[2].x);
- pt[2].y = cy + (flip_y ? (-pt[2].y) : pt[2].y);
- gdImageFilledPolygon (im, pt, 3, color);
- gdImagePolygon (im, pt, 3, color);
-
- pt[0] = pt[3];
- pt[2] = pt[4];
-
- conquer = 1;
- }
-
- if (conquer || (((s_cos * hs) > (s_sin * ws)) && ((e_cos * hs) > (e_sin * ws))))
- { /* This is the best bit... */
- /* steep line + ellipse */
- /* go up & left from pt[0] to pt[2] */
-
- x2 = w;
- y2 = 0; /* Starting point is exactly on ellipse */
-
- g = x2 - 1;
- g = g * g * hs + 4 * ws - whs;
-
- while ((x2 * hs) > (y2 * ws)) /* Keep |tangent| > 1 */
- {
- if ((s_sin * x2) <= (y2 * s_cos))
- break;
-
- y2 += 2;
- g += ws * 4 * (y2 + 1);
-
- if (g > 0) /* Need to drop */
- {
- x2 -= 2;
- g -= hs * 4 * x2;
- }
- }
-
- lx2 = x2;
- ly2 = y2;
-
- lg = lx2 * (pt[0].y - pt[2].y) - ly2 * (pt[0].x - pt[2].x);
- lg = (lx2 - 1) * (pt[0].y - pt[2].y) - (ly2 + 2) * (pt[0].x - pt[2].x) - lg;
-
- while (y2 < (2 * pt[2].y))
- {
- y2 += 2;
- g += ws * 4 * (y2 + 1);
-
- if (g > 0) /* Need to drop */
- {
- x2 -= 2;
- g -= hs * 4 * x2;
- }
-
- ly2 += 2;
- lg -= 2 * (pt[0].x - pt[2].x);
-
- if (lg < 0) /* Need to drop */
- {
- lx2 -= 2;
- lg -= 2 * (pt[0].y - pt[2].y);
- }
-
- y = (int) (y2 / 2);
- for (x = (int) (lx2 / 2); x <= (int) (x2 / 2); x++)
- {
- gdImageSetPixel (im, ((flip_x) ? (cx - x) : (cx + x)),
- ((flip_y) ? (cy - y) : (cy + y)), color);
- }
- }
- }
- if (conquer)
- {
- pt[0] = pt[4];
- pt[2] = pt[5];
- }
- if (conquer || (((s_cos * hs) < (s_sin * ws)) && ((e_cos * hs) < (e_sin * ws))))
- { /* This is the best bit... */
- /* gradual line + ellipse */
- /* go down & right from pt[2] to pt[0] */
-
- x2 = 0;
- y2 = h; /* Starting point is exactly on ellipse */
-
- g = y2 - 1;
- g = g * g * ws + 4 * hs - whs;
-
- while ((x2 * hs) < (y2 * ws))
- {
- x2 += 2;
- g += hs * 4 * (x2 + 1);
-
- if (g > 0) /* Need to drop */
- {
- y2 -= 2;
- g -= ws * 4 * y2;
- }
-
- if ((e_sin * x2) >= (y2 * e_cos))
- break;
- }
-
- lx2 = x2;
- ly2 = y2;
-
- lg = lx2 * (pt[0].y - pt[2].y) - ly2 * (pt[0].x - pt[2].x);
- lg = (lx2 + 2) * (pt[0].y - pt[2].y) - (ly2 - 1) * (pt[0].x - pt[2].x) - lg;
-
- while (x2 < (2 * pt[0].x))
- {
- x2 += 2;
- g += hs * 4 * (x2 + 1);
-
- if (g > 0) /* Need to drop */
- {
- y2 -= 2;
- g -= ws * 4 * y2;
- }
-
- lx2 += 2;
- lg += 2 * (pt[0].y - pt[2].y);
-
- if (lg < 0) /* Need to drop */
- {
- ly2 -= 2;
- lg += 2 * (pt[0].x - pt[2].x);
- }
-
- x = (int) (x2 / 2);
- for (y = (int) (ly2 / 2); y <= (int) (y2 / 2); y++)
- {
- gdImageSetPixel (im, ((flip_x) ? (cx - x) : (cx + x)),
- ((flip_y) ? (cy - y) : (cy + y)), color);
- }
- }
- }
-}
-
-static gdPoint
-gdArcClosest (int width, int height, int angle)
-{
- gdPoint pt;
-
- int flip_x = 0;
- int flip_y = 0;
-
- long a_sin = 0;
- long a_cos = 0;
-
- long w; /* a * 2 */
- long h; /* b * 2 */
-
- long x2; /* x * 2 */
- long y2; /* y * 2 */
-
- long ws; /* (a * 2)^2 */
- long hs; /* (b * 2)^2 */
-
- long whs; /* (a * 2)^2 * (b * 2)^2 */
-
- long g; /* decision variable */
-
- w = (long) ((width & 1) ? (width + 1) : (width));
- h = (long) ((height & 1) ? (height + 1) : (height));
-
- while (angle < 0)
- angle += 360;
- while (angle >= 360)
- angle -= 360;
-
- if (angle == 0)
- {
- pt.x = w / 2;
- pt.y = 0;
- return (pt);
- }
- if (angle == 90)
- {
- pt.x = 0;
- pt.y = h / 2;
- return (pt);
- }
- if (angle == 180)
- {
- pt.x = -w / 2;
- pt.y = 0;
- return (pt);
- }
- if (angle == 270)
- {
- pt.x = 0;
- pt.y = -h / 2;
- return (pt);
- }
-
- pt.x = 0;
- pt.y = 0;
-
- if ((angle > 90) && (angle < 180))
- {
- angle = 180 - angle;
- flip_x = 1;
- }
- if ((angle > 180) && (angle < 270))
- {
- angle = angle - 180;
- flip_x = 1;
- flip_y = 1;
- }
- if ((angle > 270) && (angle < 360))
- {
- angle = 360 - angle;
- flip_y = 1;
- }
-
- a_sin = (long) ((double) 32768 * sin ((double) angle * M_PI / (double) 180));
- a_cos = (long) ((double) 32768 * cos ((double) angle * M_PI / (double) 180));
-
- ws = w * w;
- hs = h * h;
-
- whs = 1;
- while ((ws > 32768) || (hs > 32768))
- {
- ws = (ws + 1) / 2; /* Unfortunate limitations on integers makes */
- hs = (hs + 1) / 2; /* drawing large ellipses problematic... */
- whs *= 2;
- }
- while ((ws * hs) > (0x04000000L / whs))
- {
- ws = (ws + 1) / 2;
- hs = (hs + 1) / 2;
- whs *= 2;
- }
- whs *= ws * hs;
-
- if ((a_cos * hs) > (a_sin * ws))
- {
- x2 = w;
- y2 = 0; /* Starting point is exactly on ellipse */
-
- g = x2 - 1;
- g = g * g * hs + 4 * ws - whs;
-
- while ((x2 * hs) > (y2 * ws)) /* Keep |tangent| > 1 */
- {
- y2 += 2;
- g += ws * 4 * (y2 + 1);
-
- if (g > 0) /* Need to drop */
- {
- x2 -= 2;
- g -= hs * 4 * x2;
- }
-
- if ((a_sin * x2) <= (y2 * a_cos))
- {
- pt.x = (int) (x2 / 2);
- pt.y = (int) (y2 / 2);
- break;
- }
- }
- }
- else
- {
- x2 = 0;
- y2 = h; /* Starting point is exactly on ellipse */
-
- g = y2 - 1;
- g = g * g * ws + 4 * hs - whs;
-
- while ((x2 * hs) < (y2 * ws))
- {
- x2 += 2;
- g += hs * 4 * (x2 + 1);
-
- if (g > 0) /* Need to drop */
- {
- y2 -= 2;
- g -= ws * 4 * y2;
- }
-
- if ((a_sin * x2) >= (y2 * a_cos))
- {
- pt.x = (int) (x2 / 2);
- pt.y = (int) (y2 / 2);
- break;
- }
- }
- }
-
- if (flip_x)
- pt.x = -pt.x;
- if (flip_y)
- pt.y = -pt.y;
-
- return (pt);
-}
-
-#include "gd.h"
-#include <string.h>
-#include <math.h>
-
-#define WIDTH 500
-#define HEIGHT 300
-
-int
-main (int argc, char *argv[])
-{
- gdImagePtr im = gdImageCreate (WIDTH, HEIGHT);
- int white = gdImageColorResolve (im, 0xFF, 0xFF, 0xFF), black = gdImageColorResolve (im, 0, 0, 0),
- red = gdImageColorResolve (im, 0xFF, 0xA0, 0xA0);
- FILE *out;
-
- /* filled arc - circle */
- gdImageFilledArc (im, WIDTH / 5, HEIGHT / 4, 200, 200, 45, 90, red, gdPie);
- gdImageArc (im, WIDTH / 5, HEIGHT / 4, 200, 200, 45, 90, black);
-
- /* filled arc - ellipse */
- gdImageFilledArc (im, WIDTH / 2, HEIGHT / 4, 200, 150, 45, 90, red, gdPie);
- gdImageArc (im, WIDTH / 2, HEIGHT / 4, 200, 150, 45, 90, black);
-
-
- /* reference lines */
- gdImageLine (im, 0, HEIGHT / 4, WIDTH, HEIGHT / 4, black);
- gdImageLine (im, WIDTH / 5, 0, WIDTH / 5, HEIGHT, black);
- gdImageLine (im, WIDTH / 2, 0, WIDTH / 2, HEIGHT, black);
- gdImageLine (im, WIDTH / 2, HEIGHT / 4, WIDTH / 2 + 300, HEIGHT / 4 + 300, black);
- gdImageLine (im, WIDTH / 5, HEIGHT / 4, WIDTH / 5 + 300, HEIGHT / 4 + 300, black);
-
- /* TBB: Write img to test/arctest.png */
- out = fopen ("test/arctest.png", "wb");
- if (!out)
- {
- php_gd_error("Can't create test/arctest.png\n");
- exit (1);
- }
- gdImagePng (im, out);
- fclose (out);
- php_gd_error("Test image written to test/arctest.png\n");
- /* Destroy it */
- gdImageDestroy (im);
-
- return 0;
-}
-
-#endif
diff --git a/ext/gd/libgd/gd_gd.c b/ext/gd/libgd/gd_gd.c
deleted file mode 100644
index 2d259cdd51..0000000000
--- a/ext/gd/libgd/gd_gd.c
+++ /dev/null
@@ -1,274 +0,0 @@
-#include <stdio.h>
-#include <math.h>
-#include <string.h>
-#include <stdlib.h>
-#include "gd.h"
-
-#define TRUE 1
-#define FALSE 0
-
-/* Exported functions: */
-extern void gdImageGd (gdImagePtr im, FILE * out);
-
-
-/* Use this for commenting out debug-print statements. */
-/* Just use the first '#define' to allow all the prints... */
-/*#define GD2_DBG(s) (s) */
-#define GD2_DBG(s)
-
-/* */
-/* Shared code to read color tables from gd file. */
-/* */
-int _gdGetColors (gdIOCtx * in, gdImagePtr im, int gd2xFlag)
-{
- int i;
- if (gd2xFlag) {
- int trueColorFlag;
- if (!gdGetByte(&trueColorFlag, in)) {
- goto fail1;
- }
- /* 2.0.12: detect bad truecolor .gd files created by pre-2.0.12.
- * Beginning in 2.0.12 truecolor is indicated by the initial 2-byte
- * signature.
- */
- if (trueColorFlag != im->trueColor) {
- goto fail1;
- }
- /* This should have been a word all along */
- if (!im->trueColor) {
- if (!gdGetWord(&im->colorsTotal, in)) {
- goto fail1;
- }
- }
- /* Int to accommodate truecolor single-color transparency */
- if (!gdGetInt(&im->transparent, in)) {
- goto fail1;
- }
- } else {
- if (!gdGetByte(&im->colorsTotal, in)) {
- goto fail1;
- }
- if (!gdGetWord(&im->transparent, in)) {
- goto fail1;
- }
- if (im->transparent == 257) {
- im->transparent = (-1);
- }
- }
-
- GD2_DBG(printf("Pallette had %d colours (T=%d)\n", im->colorsTotal, im->transparent));
-
- if (im->trueColor) {
- return TRUE;
- }
-
- for (i = 0; i < gdMaxColors; i++) {
- if (!gdGetByte(&im->red[i], in)) {
- goto fail1;
- }
- if (!gdGetByte(&im->green[i], in)) {
- goto fail1;
- }
- if (!gdGetByte(&im->blue[i], in)) {
- goto fail1;
- }
- if (gd2xFlag) {
- if (!gdGetByte(&im->alpha[i], in)) {
- goto fail1;
- }
- }
- }
-
- for (i = 0; i < im->colorsTotal; i++) {
- im->open[i] = 0;
- }
-
- return TRUE;
-fail1:
- return FALSE;
-}
-
-/* */
-/* Use the common basic header info to make the image object. */
-/* */
-static gdImagePtr _gdCreateFromFile (gdIOCtx * in, int *sx, int *sy)
-{
- gdImagePtr im;
- int gd2xFlag = 0;
- int trueColorFlag = 0;
-
- if (!gdGetWord(sx, in)) {
- goto fail1;
- }
- if (*sx == 65535 || *sx == 65534) {
- /* This is a gd 2.0 .gd file */
- gd2xFlag = 1;
- /* 2.0.12: 65534 signals a truecolor .gd file. There is a slight redundancy here but we can live with it. */
- if (*sx == 65534) {
- trueColorFlag = 1;
- }
- if (!gdGetWord(sx, in)) {
- goto fail1;
- }
- }
- if (!gdGetWord(sy, in)) {
- goto fail1;
- }
-
- GD2_DBG(printf("Image is %dx%d\n", *sx, *sy));
-
- if (trueColorFlag) {
- im = gdImageCreateTrueColor(*sx, *sy);
- } else {
- im = gdImageCreate(*sx, *sy);
- }
- if (!_gdGetColors(in, im, gd2xFlag)) {
- goto fail2;
- }
-
- return im;
-fail2:
- gdImageDestroy(im);
-fail1:
- return 0;
-}
-
-gdImagePtr gdImageCreateFromGd (FILE * inFile)
-{
- gdImagePtr im;
- gdIOCtx *in;
-
- in = gdNewFileCtx(inFile);
- im = gdImageCreateFromGdCtx(in);
-
- in->gd_free(in);
-
- return im;
-}
-
-gdImagePtr gdImageCreateFromGdPtr (int size, void *data)
-{
- gdImagePtr im;
- gdIOCtx *in = gdNewDynamicCtxEx(size, data, 0);
- im = gdImageCreateFromGdCtx(in);
- in->gd_free(in);
-
- return im;
-}
-
-gdImagePtr gdImageCreateFromGdCtx (gdIOCtxPtr in)
-{
- int sx, sy;
- int x, y;
- gdImagePtr im;
-
- /* Read the header */
- im = _gdCreateFromFile(in, &sx, &sy);
-
- if (im == NULL) {
- goto fail1;
- }
-
- /* Then the data... */
- /* 2.0.12: support truecolor properly in .gd as well as in .gd2. Problem reported by Andreas Pfaller. */
- if (im->trueColor) {
- for (y = 0; y < sy; y++) {
- for (x = 0; x < sx; x++) {
- int pix;
- if (!gdGetInt(&pix, in)) {
- goto fail2;
- }
- im->tpixels[y][x] = pix;
- }
- }
- } else {
- for (y = 0; y < sy; y++) {
- for (x = 0; x < sx; x++) {
- int ch;
- ch = gdGetC(in);
- if (ch == EOF) {
- goto fail2;
- }
- /* ROW-MAJOR IN GD 1.3 */
- im->pixels[y][x] = ch;
- }
- }
- }
-
- return im;
-
-fail2:
- gdImageDestroy (im);
-fail1:
- return 0;
-}
-
-void _gdPutColors (gdImagePtr im, gdIOCtx * out)
-{
- int i;
-
- gdPutC(im->trueColor, out);
- if (!im->trueColor) {
- gdPutWord(im->colorsTotal, out);
- }
- gdPutInt(im->transparent, out);
- if (!im->trueColor) {
- for (i = 0; i < gdMaxColors; i++) {
- gdPutC((unsigned char) im->red[i], out);
- gdPutC((unsigned char) im->green[i], out);
- gdPutC((unsigned char) im->blue[i], out);
- gdPutC((unsigned char) im->alpha[i], out);
- }
- }
-}
-
-static void _gdPutHeader (gdImagePtr im, gdIOCtx * out)
-{
- /* 65535 indicates this is a gd 2.x .gd file.
- * 2.0.12: 65534 indicates truecolor.
- */
- if (im->trueColor) {
- gdPutWord(65534, out);
- } else {
- gdPutWord(65535, out);
- }
- gdPutWord(im->sx, out);
- gdPutWord(im->sy, out);
-
- _gdPutColors(im, out);
-}
-
-static void _gdImageGd (gdImagePtr im, gdIOCtx * out)
-{
- int x, y;
-
- _gdPutHeader(im, out);
-
- for (y = 0; y < im->sy; y++) {
- for (x = 0; x < im->sx; x++) {
- /* ROW-MAJOR IN GD 1.3 */
- if (im->trueColor) {
- gdPutInt(im->tpixels[y][x], out);
- } else {
- gdPutC((unsigned char) im->pixels[y][x], out);
- }
- }
- }
-}
-
-void gdImageGd (gdImagePtr im, FILE * outFile)
-{
- gdIOCtx *out = gdNewFileCtx(outFile);
- _gdImageGd(im, out);
- out->gd_free(out);
-}
-
-void *gdImageGdPtr (gdImagePtr im, int *size)
-{
- void *rv;
- gdIOCtx *out = gdNewDynamicCtx(2048, NULL);
- _gdImageGd(im, out);
- rv = gdDPExtractData(out, size);
- out->gd_free(out);
- return rv;
-}
diff --git a/ext/gd/libgd/gd_gd2.c b/ext/gd/libgd/gd_gd2.c
deleted file mode 100644
index 9c8b35312c..0000000000
--- a/ext/gd/libgd/gd_gd2.c
+++ /dev/null
@@ -1,825 +0,0 @@
-/*
- * gd_gd2.c
- *
- * Implements the I/O and support for the GD2 format.
- *
- * Changing the definition of GD2_DBG (below) will cause copious messages
- * to be displayed while it processes requests.
- *
- * Designed, Written & Copyright 1999, Philip Warner.
- *
- */
-
-#include <stdio.h>
-#include <errno.h>
-#include <math.h>
-#include <string.h>
-#include <stdlib.h>
-#include "gd.h"
-#include "gdhelpers.h"
-
-#include <zlib.h>
-
-#define TRUE 1
-#define FALSE 0
-
-/* 2.11: not part of the API, as the save routine can figure it out
- * from im->trueColor, and the load routine doesn't need to tell
- * the end user the saved format. NOTE: adding 2 is assumed
- * to result in the correct format value for truecolor!
-*/
-#define GD2_FMT_TRUECOLOR_RAW 3
-#define GD2_FMT_TRUECOLOR_COMPRESSED 4
-
-#define gd2_compressed(fmt) (((fmt) == GD2_FMT_COMPRESSED) || ((fmt) == GD2_FMT_TRUECOLOR_COMPRESSED))
-#define gd2_truecolor(fmt) (((fmt) == GD2_FMT_TRUECOLOR_RAW) || ((fmt) == GD2_FMT_TRUECOLOR_COMPRESSED))
-
-/* Use this for commenting out debug-print statements. */
-/* Just use the first '#define' to allow all the prints... */
-/* #define GD2_DBG(s) (s) */
-#define GD2_DBG(s)
-
-typedef struct
-{
- int offset;
- int size;
-} t_chunk_info;
-
-extern int _gdGetColors(gdIOCtx * in, gdImagePtr im, int gd2xFlag);
-extern void _gdPutColors(gdImagePtr im, gdIOCtx * out);
-
-/* */
-/* Read the extra info in the gd2 header. */
-/* */
-static int _gd2GetHeader(gdIOCtxPtr in, int *sx, int *sy, int *cs, int *vers, int *fmt, int *ncx, int *ncy, t_chunk_info ** chunkIdx)
-{
- int i;
- int ch;
- char id[5];
- t_chunk_info *cidx;
- int sidx;
- int nc;
-
- GD2_DBG(php_gd_error("Reading gd2 header info\n"));
-
- for (i = 0; i < 4; i++) {
- ch = gdGetC(in);
- if (ch == EOF) {
- goto fail1;
- }
- id[i] = ch;
- }
- id[4] = 0;
-
- GD2_DBG(php_gd_error("Got file code: %s\n", id));
-
- /* Equiv. of 'magick'. */
- if (strcmp(id, GD2_ID) != 0) {
- GD2_DBG(php_gd_error("Not a valid gd2 file\n"));
- goto fail1;
- }
-
- /* Version */
- if (gdGetWord(vers, in) != 1) {
- goto fail1;
- }
- GD2_DBG(php_gd_error("Version: %d\n", *vers));
-
- if ((*vers != 1) && (*vers != 2)) {
- GD2_DBG(php_gd_error("Bad version: %d\n", *vers));
- goto fail1;
- }
-
- /* Image Size */
- if (!gdGetWord(sx, in)) {
- GD2_DBG(php_gd_error("Could not get x-size\n"));
- goto fail1;
- }
- if (!gdGetWord(sy, in)) {
- GD2_DBG(php_gd_error("Could not get y-size\n"));
- goto fail1;
- }
- GD2_DBG(php_gd_error("Image is %dx%d\n", *sx, *sy));
-
- /* Chunk Size (pixels, not bytes!) */
- if (gdGetWord(cs, in) != 1) {
- goto fail1;
- }
- GD2_DBG(php_gd_error("ChunkSize: %d\n", *cs));
-
- if ((*cs < GD2_CHUNKSIZE_MIN) || (*cs > GD2_CHUNKSIZE_MAX)) {
- GD2_DBG(php_gd_error("Bad chunk size: %d\n", *cs));
- goto fail1;
- }
-
- /* Data Format */
- if (gdGetWord(fmt, in) != 1) {
- goto fail1;
- }
- GD2_DBG(php_gd_error("Format: %d\n", *fmt));
-
- if ((*fmt != GD2_FMT_RAW) && (*fmt != GD2_FMT_COMPRESSED) && (*fmt != GD2_FMT_TRUECOLOR_RAW) && (*fmt != GD2_FMT_TRUECOLOR_COMPRESSED)) {
- GD2_DBG(php_gd_error("Bad data format: %d\n", *fmt));
- goto fail1;
- }
-
- /* # of chunks wide */
- if (gdGetWord(ncx, in) != 1) {
- goto fail1;
- }
- GD2_DBG(php_gd_error("%d Chunks Wide\n", *ncx));
-
- /* # of chunks high */
- if (gdGetWord(ncy, in) != 1) {
- goto fail1;
- }
- GD2_DBG(php_gd_error("%d Chunks vertically\n", *ncy));
-
- if (gd2_compressed(*fmt)) {
- nc = (*ncx) * (*ncy);
- GD2_DBG(php_gd_error("Reading %d chunk index entries\n", nc));
- sidx = sizeof(t_chunk_info) * nc;
- if (sidx <= 0) {
- goto fail1;
- }
- cidx = gdCalloc(sidx, 1);
- for (i = 0; i < nc; i++) {
- if (gdGetInt(&cidx[i].offset, in) != 1) {
- goto fail1;
- }
- if (gdGetInt(&cidx[i].size, in) != 1) {
- goto fail1;
- }
- }
- *chunkIdx = cidx;
- }
-
- GD2_DBG(php_gd_error("gd2 header complete\n"));
-
- return 1;
-
-fail1:
- return 0;
-}
-
-static gdImagePtr _gd2CreateFromFile (gdIOCtxPtr in, int *sx, int *sy, int *cs, int *vers, int *fmt, int *ncx, int *ncy, t_chunk_info ** cidx)
-{
- gdImagePtr im;
-
- if (_gd2GetHeader (in, sx, sy, cs, vers, fmt, ncx, ncy, cidx) != 1) {
- GD2_DBG(php_gd_error("Bad GD2 header\n"));
- goto fail1;
- }
-
- if (gd2_truecolor(*fmt)) {
- im = gdImageCreateTrueColor(*sx, *sy);
- } else {
- im = gdImageCreate(*sx, *sy);
- }
- if (im == NULL) {
- GD2_DBG(php_gd_error("Could not create gdImage\n"));
- goto fail1;
- }
-
- if (!_gdGetColors(in, im, (*vers) == 2)) {
- GD2_DBG(php_gd_error("Could not read color palette\n"));
- goto fail2;
- }
- GD2_DBG(php_gd_error("Image palette completed: %d colours\n", im->colorsTotal));
-
- return im;
-
-fail2:
- gdImageDestroy(im);
- return 0;
-
-fail1:
- return 0;
-}
-
-static int _gd2ReadChunk (int offset, char *compBuf, int compSize, char *chunkBuf, uLongf * chunkLen, gdIOCtx * in)
-{
- int zerr;
-
- if (gdTell(in) != offset) {
- GD2_DBG(php_gd_error("Positioning in file to %d\n", offset));
- gdSeek(in, offset);
- } else {
- GD2_DBG(php_gd_error("Already Positioned in file to %d\n", offset));
- }
-
- /* Read and uncompress an entire chunk. */
- GD2_DBG(php_gd_error("Reading file\n"));
- if (gdGetBuf(compBuf, compSize, in) != compSize) {
- return FALSE;
- }
- GD2_DBG(php_gd_error("Got %d bytes. Uncompressing into buffer of %d bytes\n", compSize, (int)*chunkLen));
- zerr = uncompress((unsigned char *) chunkBuf, chunkLen, (unsigned char *) compBuf, compSize);
- if (zerr != Z_OK) {
- GD2_DBG(php_gd_error("Error %d from uncompress\n", zerr));
- return FALSE;
- }
- GD2_DBG(php_gd_error("Got chunk\n"));
-
- return TRUE;
-}
-
-gdImagePtr gdImageCreateFromGd2 (FILE * inFile)
-{
- gdIOCtx *in = gdNewFileCtx(inFile);
- gdImagePtr im;
-
- im = gdImageCreateFromGd2Ctx(in);
-
- in->gd_free(in);
-
- return im;
-}
-
-gdImagePtr gdImageCreateFromGd2Ptr (int size, void *data)
-{
- gdImagePtr im;
- gdIOCtx *in = gdNewDynamicCtxEx(size, data, 0);
- im = gdImageCreateFromGd2Ctx(in);
- in->gd_free(in);
-
- return im;
-}
-
-gdImagePtr gdImageCreateFromGd2Ctx (gdIOCtxPtr in)
-{
- int sx, sy;
- int i;
- int ncx, ncy, nc, cs, cx, cy;
- int x, y, ylo, yhi, xlo, xhi;
- int vers, fmt;
- t_chunk_info *chunkIdx = NULL; /* So we can gdFree it with impunity. */
- unsigned char *chunkBuf = NULL; /* So we can gdFree it with impunity. */
- int chunkNum = 0;
- int chunkMax = 0;
- uLongf chunkLen;
- int chunkPos = 0;
- int compMax = 0;
- int bytesPerPixel;
- char *compBuf = NULL; /* So we can gdFree it with impunity. */
-
- gdImagePtr im;
-
- /* Get the header */
- if (!(im = _gd2CreateFromFile(in, &sx, &sy, &cs, &vers, &fmt, &ncx, &ncy, &chunkIdx))) {
- return 0;
- }
-
- bytesPerPixel = im->trueColor ? 4 : 1;
- nc = ncx * ncy;
-
- if (gd2_compressed(fmt)) {
- /* Find the maximum compressed chunk size. */
- compMax = 0;
- for (i = 0; (i < nc); i++) {
- if (chunkIdx[i].size > compMax) {
- compMax = chunkIdx[i].size;
- }
- }
- compMax++;
-
- /* Allocate buffers */
- chunkMax = cs * bytesPerPixel * cs;
- if (chunkMax <= 0) {
- return 0;
- }
- chunkBuf = gdCalloc(chunkMax, 1);
- compBuf = gdCalloc(compMax, 1);
-
- GD2_DBG(php_gd_error("Largest compressed chunk is %d bytes\n", compMax));
- }
-
- /* Read the data... */
- for (cy = 0; (cy < ncy); cy++) {
- for (cx = 0; (cx < ncx); cx++) {
- ylo = cy * cs;
- yhi = ylo + cs;
- if (yhi > im->sy) {
- yhi = im->sy;
- }
-
- GD2_DBG(php_gd_error("Processing Chunk %d (%d, %d), y from %d to %d\n", chunkNum, cx, cy, ylo, yhi));
-
- if (gd2_compressed(fmt)) {
- chunkLen = chunkMax;
-
- if (!_gd2ReadChunk(chunkIdx[chunkNum].offset, compBuf, chunkIdx[chunkNum].size, (char *) chunkBuf, &chunkLen, in)) {
- GD2_DBG(php_gd_error("Error reading comproessed chunk\n"));
- goto fail2;
- }
-
- chunkPos = 0;
- }
-
- for (y = ylo; (y < yhi); y++) {
- xlo = cx * cs;
- xhi = xlo + cs;
- if (xhi > im->sx) {
- xhi = im->sx;
- }
-
- if (!gd2_compressed(fmt)) {
- for (x = xlo; x < xhi; x++) {
- if (im->trueColor) {
- if (!gdGetInt(&im->tpixels[y][x], in)) {
- im->tpixels[y][x] = 0;
- }
- } else {
- int ch;
- if (!gdGetByte(&ch, in)) {
- ch = 0;
- }
- im->pixels[y][x] = ch;
- }
- }
- } else {
- for (x = xlo; x < xhi; x++) {
- if (im->trueColor) {
- /* 2.0.1: work around a gcc bug by being verbose. TBB */
- int a = chunkBuf[chunkPos++] << 24;
- int r = chunkBuf[chunkPos++] << 16;
- int g = chunkBuf[chunkPos++] << 8;
- int b = chunkBuf[chunkPos++];
- im->tpixels[y][x] = a + r + g + b;
- } else {
- im->pixels[y][x] = chunkBuf[chunkPos++];
- }
- }
- }
- }
- chunkNum++;
- }
- }
-
- GD2_DBG(php_gd_error("Freeing memory\n"));
-
- if (chunkBuf) {
- gdFree(chunkBuf);
- }
- if (compBuf) {
- gdFree(compBuf);
- }
- if (chunkIdx) {
- gdFree(chunkIdx);
- }
-
- GD2_DBG(php_gd_error("Done\n"));
-
- return im;
-
-fail2:
- gdImageDestroy(im);
- if (chunkBuf) {
- gdFree(chunkBuf);
- }
- if (compBuf) {
- gdFree(compBuf);
- }
- if (chunkIdx) {
- gdFree(chunkIdx);
- }
-
- return 0;
-}
-
-gdImagePtr gdImageCreateFromGd2PartPtr (int size, void *data, int srcx, int srcy, int w, int h)
-{
- gdImagePtr im;
- gdIOCtx *in = gdNewDynamicCtxEx(size, data, 0);
- im = gdImageCreateFromGd2PartCtx(in, srcx, srcy, w, h);
- in->gd_free(in);
-
- return im;
-}
-
-gdImagePtr gdImageCreateFromGd2Part (FILE * inFile, int srcx, int srcy, int w, int h)
-{
- gdImagePtr im;
- gdIOCtx *in = gdNewFileCtx(inFile);
-
- im = gdImageCreateFromGd2PartCtx(in, srcx, srcy, w, h);
-
- in->gd_free(in);
-
- return im;
-}
-
-gdImagePtr gdImageCreateFromGd2PartCtx (gdIOCtx * in, int srcx, int srcy, int w, int h)
-{
- int scx, scy, ecx, ecy, fsx, fsy;
- int nc, ncx, ncy, cs, cx, cy;
- int x, y, ylo, yhi, xlo, xhi;
- int dstart, dpos;
- int i;
- /* 2.0.12: unsigned is correct; fixes problems with color munging. Thanks to Steven Brown. */
- unsigned int ch;
- int vers, fmt;
- t_chunk_info *chunkIdx = NULL;
- unsigned char *chunkBuf = NULL;
- int chunkNum;
- int chunkMax = 0;
- uLongf chunkLen;
- int chunkPos = 0;
- int compMax;
- char *compBuf = NULL;
-
- gdImagePtr im;
-
- /* The next few lines are basically copied from gd2CreateFromFile
- * we change the file size, so don't want to use the code directly.
- * but we do need to know the file size.
- */
- if (_gd2GetHeader(in, &fsx, &fsy, &cs, &vers, &fmt, &ncx, &ncy, &chunkIdx) != 1) {
- goto fail1;
- }
-
- GD2_DBG(php_gd_error("File size is %dx%d\n", fsx, fsy));
-
- /* This is the difference - make a file based on size of chunks. */
- if (gd2_truecolor(fmt)) {
- im = gdImageCreateTrueColor(w, h);
- } else {
- im = gdImageCreate(w, h);
- }
- if (im == NULL) {
- goto fail1;
- }
-
- if (!_gdGetColors(in, im, vers == 2)) {
- goto fail2;
- }
- GD2_DBG(php_gd_error("Image palette completed: %d colours\n", im->colorsTotal));
-
- /* Process the header info */
- nc = ncx * ncy;
-
- if (gd2_compressed(fmt)) {
- /* Find the maximum compressed chunk size. */
- compMax = 0;
- for (i = 0; (i < nc); i++) {
- if (chunkIdx[i].size > compMax) {
- compMax = chunkIdx[i].size;
- }
- }
- compMax++;
-
- if (im->trueColor) {
- chunkMax = cs * cs * 4;
- } else {
- chunkMax = cs * cs;
- }
- if (chunkMax <= 0) {
- goto fail2;
- }
-
- chunkBuf = gdCalloc(chunkMax, 1);
- compBuf = gdCalloc(compMax, 1);
- }
-
- /* Work out start/end chunks */
- scx = srcx / cs;
- scy = srcy / cs;
- if (scx < 0) {
- scx = 0;
- }
- if (scy < 0) {
- scy = 0;
- }
-
- ecx = (srcx + w) / cs;
- ecy = (srcy + h) / cs;
- if (ecx >= ncx) {
- ecx = ncx - 1;
- }
- if (ecy >= ncy) {
- ecy = ncy - 1;
- }
-
- /* Remember file position of image data. */
- dstart = gdTell(in);
- GD2_DBG(php_gd_error("Data starts at %d\n", dstart));
-
- /* Loop through the chunks. */
- for (cy = scy; (cy <= ecy); cy++) {
- ylo = cy * cs;
- yhi = ylo + cs;
- if (yhi > fsy) {
- yhi = fsy;
- }
-
- for (cx = scx; cx <= ecx; cx++) {
-
- xlo = cx * cs;
- xhi = xlo + cs;
- if (xhi > fsx) {
- xhi = fsx;
- }
-
- GD2_DBG(php_gd_error("Processing Chunk (%d, %d), from %d to %d\n", cx, cy, ylo, yhi));
-
- if (!gd2_compressed(fmt)) {
- GD2_DBG(php_gd_error("Using raw format data\n"));
- if (im->trueColor) {
- dpos = (cy * (cs * fsx) * 4 + cx * cs * (yhi - ylo) * 4) + dstart;
- } else {
- dpos = cy * (cs * fsx) + cx * cs * (yhi - ylo) + dstart;
- }
-
- /* gd 2.0.11: gdSeek returns TRUE on success, not 0. Longstanding bug. 01/16/03 */
- if (!gdSeek(in, dpos)) {
- php_gd_error_ex(E_WARNING, "Error from seek: %d\n", errno);
- goto fail2;
- }
- GD2_DBG(php_gd_error("Reading (%d, %d) from position %d\n", cx, cy, dpos - dstart));
- } else {
- chunkNum = cx + cy * ncx;
-
- chunkLen = chunkMax;
- if (!_gd2ReadChunk (chunkIdx[chunkNum].offset, compBuf, chunkIdx[chunkNum].size, chunkBuf, &chunkLen, in)) {
- php_gd_error("Error reading comproessed chunk\n");
- goto fail2;
- }
- chunkPos = 0;
- GD2_DBG(php_gd_error("Reading (%d, %d) from chunk %d\n", cx, cy, chunkNum));
- }
-
- GD2_DBG(php_gd_error(" into (%d, %d) - (%d, %d)\n", xlo, ylo, xhi, yhi));
-
- for (y = ylo; (y < yhi); y++) {
- for (x = xlo; x < xhi; x++) {
- if (!gd2_compressed(fmt)) {
- if (im->trueColor) {
- if (!gdGetInt(&ch, in)) {
- ch = 0;
- }
- } else {
- ch = gdGetC(in);
- if ((int)ch == EOF) {
- ch = 0;
- }
- }
- } else {
- if (im->trueColor) {
- ch = chunkBuf[chunkPos++];
- ch = (ch << 8) + chunkBuf[chunkPos++];
- ch = (ch << 8) + chunkBuf[chunkPos++];
- ch = (ch << 8) + chunkBuf[chunkPos++];
- } else {
- ch = chunkBuf[chunkPos++];
- }
- }
-
- /* Only use a point that is in the image. */
- if ((x >= srcx) && (x < (srcx + w)) && (x < fsx) && (x >= 0) && (y >= srcy) && (y < (srcy + h)) && (y < fsy) && (y >= 0)) {
- if (im->trueColor) {
- im->tpixels[y - srcy][x - srcx] = ch;
- } else {
- im->pixels[y - srcy][x - srcx] = ch;
- }
- }
- }
- }
- }
- }
-
- if (chunkBuf) {
- gdFree(chunkBuf);
- }
- if (compBuf) {
- gdFree(compBuf);
- }
- if (chunkIdx) {
- gdFree(chunkIdx);
- }
-
- return im;
-
-fail2:
- gdImageDestroy(im);
-fail1:
- if (chunkBuf) {
- gdFree(chunkBuf);
- }
- if (compBuf) {
- gdFree(compBuf);
- }
- if (chunkIdx) {
- gdFree(chunkIdx);
- }
-
- return 0;
-}
-
-static void _gd2PutHeader (gdImagePtr im, gdIOCtx * out, int cs, int fmt, int cx, int cy)
-{
- int i;
-
- /* Send the gd2 id, to verify file format. */
- for (i = 0; i < 4; i++) {
- gdPutC((unsigned char) (GD2_ID[i]), out);
- }
-
- /* We put the version info first, so future versions can easily change header info. */
-
- gdPutWord(GD2_VERS, out);
- gdPutWord(im->sx, out);
- gdPutWord(im->sy, out);
- gdPutWord(cs, out);
- gdPutWord(fmt, out);
- gdPutWord(cx, out);
- gdPutWord(cy, out);
-}
-
-static void _gdImageGd2 (gdImagePtr im, gdIOCtx * out, int cs, int fmt)
-{
- int ncx, ncy, cx, cy;
- int x, y, ylo, yhi, xlo, xhi;
- int chunkLen;
- int chunkNum = 0;
- char *chunkData = NULL; /* So we can gdFree it with impunity. */
- char *compData = NULL; /* So we can gdFree it with impunity. */
- uLongf compLen;
- int idxPos = 0;
- int idxSize;
- t_chunk_info *chunkIdx = NULL; /* So we can gdFree it with impunity. */
- int posSave;
- int bytesPerPixel = im->trueColor ? 4 : 1;
- int compMax = 0;
-
- /* Force fmt to a valid value since we don't return anything. */
- if ((fmt != GD2_FMT_RAW) && (fmt != GD2_FMT_COMPRESSED)) {
- fmt = im->trueColor ? GD2_FMT_TRUECOLOR_COMPRESSED : GD2_FMT_COMPRESSED;
- }
- if (im->trueColor) {
- fmt += 2;
- }
- /* Make sure chunk size is valid. These are arbitrary values; 64 because it seems
- * a little silly to expect performance improvements on a 64x64 bit scale, and
- * 4096 because we buffer one chunk, and a 16MB buffer seems a little large - it may be
- * OK for one user, but for another to read it, they require the buffer.
- */
- if (cs == 0) {
- cs = GD2_CHUNKSIZE;
- } else if (cs < GD2_CHUNKSIZE_MIN) {
- cs = GD2_CHUNKSIZE_MIN;
- } else if (cs > GD2_CHUNKSIZE_MAX) {
- cs = GD2_CHUNKSIZE_MAX;
- }
-
- /* Work out number of chunks. */
- ncx = im->sx / cs + 1;
- ncy = im->sy / cs + 1;
-
- /* Write the standard header. */
- _gd2PutHeader (im, out, cs, fmt, ncx, ncy);
-
- if (gd2_compressed(fmt)) {
- /* Work out size of buffer for compressed data, If CHUNKSIZE is large,
- * then these will be large!
- */
-
- /* The zlib notes say output buffer size should be (input size) * 1.01 * 12
- * - we'll use 1.02 to be paranoid.
- */
- compMax = (int)(cs * bytesPerPixel * cs * 1.02f) + 12;
-
- /* Allocate the buffers. */
- chunkData = safe_emalloc(cs * bytesPerPixel, cs, 0);
- memset(chunkData, 0, cs * bytesPerPixel * cs);
- if (compMax <= 0) {
- goto fail;
- }
- compData = gdCalloc(compMax, 1);
-
- /* Save the file position of chunk index, and allocate enough space for
- * each chunk_info block .
- */
- idxPos = gdTell(out);
- idxSize = ncx * ncy * sizeof(t_chunk_info);
- GD2_DBG(php_gd_error("Index size is %d\n", idxSize));
- gdSeek(out, idxPos + idxSize);
-
- chunkIdx = safe_emalloc(idxSize, sizeof(t_chunk_info), 0);
- memset(chunkIdx, 0, idxSize * sizeof(t_chunk_info));
- }
-
- _gdPutColors (im, out);
-
- GD2_DBG(php_gd_error("Size: %dx%d\n", im->sx, im->sy));
- GD2_DBG(php_gd_error("Chunks: %dx%d\n", ncx, ncy));
-
- for (cy = 0; (cy < ncy); cy++) {
- for (cx = 0; (cx < ncx); cx++) {
- ylo = cy * cs;
- yhi = ylo + cs;
- if (yhi > im->sy) {
- yhi = im->sy;
- }
-
- GD2_DBG(php_gd_error("Processing Chunk (%dx%d), y from %d to %d\n", cx, cy, ylo, yhi));
- chunkLen = 0;
- for (y = ylo; (y < yhi); y++) {
- GD2_DBG(php_gd_error("y=%d: ",y));
- xlo = cx * cs;
- xhi = xlo + cs;
- if (xhi > im->sx) {
- xhi = im->sx;
- }
-
- if (gd2_compressed(fmt)) {
- for (x = xlo; x < xhi; x++) {
- GD2_DBG(php_gd_error("%d...",x));
- if (im->trueColor) {
- int p = im->tpixels[y][x];
- chunkData[chunkLen++] = gdTrueColorGetAlpha(p);
- chunkData[chunkLen++] = gdTrueColorGetRed(p);
- chunkData[chunkLen++] = gdTrueColorGetGreen(p);
- chunkData[chunkLen++] = gdTrueColorGetBlue(p);
- } else {
- chunkData[chunkLen++] = im->pixels[y][x];
- }
- }
- } else {
- for (x = xlo; x < xhi; x++) {
- GD2_DBG(php_gd_error("%d, ",x));
-
- if (im->trueColor) {
- gdPutInt(im->tpixels[y][x], out);
- } else {
- gdPutC((unsigned char) im->pixels[y][x], out);
- }
- }
- }
- GD2_DBG(php_gd_error("y=%d done.\n",y));
- }
-
- if (gd2_compressed(fmt)) {
- compLen = compMax;
- if (compress((unsigned char *) &compData[0], &compLen, (unsigned char *) &chunkData[0], chunkLen) != Z_OK) {
- php_gd_error("Error from compressing\n");
- } else {
- chunkIdx[chunkNum].offset = gdTell(out);
- chunkIdx[chunkNum++].size = compLen;
- GD2_DBG(php_gd_error("Chunk %d size %d offset %d\n", chunkNum, chunkIdx[chunkNum - 1].size, chunkIdx[chunkNum - 1].offset));
-
- if (gdPutBuf (compData, compLen, out) <= 0) {
- /* Any alternate suggestions for handling this? */
- php_gd_error_ex(E_WARNING, "Error %d on write\n", errno);
- }
- }
- }
- }
- }
-
- if (gd2_compressed(fmt)) {
- /* Save the position, write the index, restore position (paranoia). */
- GD2_DBG(php_gd_error("Seeking %d to write index\n", idxPos));
- posSave = gdTell(out);
- gdSeek(out, idxPos);
- GD2_DBG(php_gd_error("Writing index\n"));
- for (x = 0; x < chunkNum; x++) {
- GD2_DBG(php_gd_error("Chunk %d size %d offset %d\n", x, chunkIdx[x].size, chunkIdx[x].offset));
- gdPutInt(chunkIdx[x].offset, out);
- gdPutInt(chunkIdx[x].size, out);
- }
- gdSeek(out, posSave);
- }
-fail:
- GD2_DBG(php_gd_error("Freeing memory\n"));
- if (chunkData) {
- gdFree(chunkData);
- }
- if (compData) {
- gdFree(compData);
- }
- if (chunkIdx) {
- gdFree(chunkIdx);
- }
- GD2_DBG(php_gd_error("Done\n"));
-}
-
-void gdImageGd2 (gdImagePtr im, FILE * outFile, int cs, int fmt)
-{
- gdIOCtx *out = gdNewFileCtx(outFile);
-
- _gdImageGd2(im, out, cs, fmt);
-
- out->gd_free(out);
-}
-
-void *gdImageGd2Ptr (gdImagePtr im, int cs, int fmt, int *size)
-{
- void *rv;
- gdIOCtx *out = gdNewDynamicCtx(2048, NULL);
-
- _gdImageGd2(im, out, cs, fmt);
- rv = gdDPExtractData(out, size);
- out->gd_free(out);
-
- return rv;
-}
diff --git a/ext/gd/libgd/gd_gif_in.c b/ext/gd/libgd/gd_gif_in.c
deleted file mode 100644
index 724511b17f..0000000000
--- a/ext/gd/libgd/gd_gif_in.c
+++ /dev/null
@@ -1,580 +0,0 @@
-#include <stdio.h>
-#include <math.h>
-#include <string.h>
-#include <stdlib.h>
-#include "gd.h"
-
-#include "php.h"
-
-/* Used only when debugging GIF compression code */
-/* #define DEBUGGING_ENVARS */
-
-#ifdef DEBUGGING_ENVARS
-
-static int verbose_set = 0;
-static int verbose;
-#define VERBOSE (verbose_set?verbose:set_verbose())
-
-static int set_verbose(void)
-{
- verbose = !!getenv("GIF_VERBOSE");
- verbose_set = 1;
- return(verbose);
-}
-
-#else
-
-#define VERBOSE 0
-
-#endif
-
-
-#define MAXCOLORMAPSIZE 256
-
-#define TRUE 1
-#define FALSE 0
-
-#define CM_RED 0
-#define CM_GREEN 1
-#define CM_BLUE 2
-
-#define MAX_LWZ_BITS 12
-
-#define INTERLACE 0x40
-#define LOCALCOLORMAP 0x80
-#define BitSet(byte, bit) (((byte) & (bit)) == (bit))
-
-#define ReadOK(file,buffer,len) (gdGetBuf(buffer, len, file) != 0)
-
-#define LM_to_uint(a,b) (((b)<<8)|(a))
-
-/* We may eventually want to use this information, but def it out for now */
-#if 0
-static struct {
- unsigned int Width;
- unsigned int Height;
- unsigned char ColorMap[3][MAXCOLORMAPSIZE];
- unsigned int BitPixel;
- unsigned int ColorResolution;
- unsigned int Background;
- unsigned int AspectRatio;
-} GifScreen;
-#endif
-
-static struct {
- int transparent;
- int delayTime;
- int inputFlag;
- int disposal;
-} Gif89 = { -1, -1, -1, 0 };
-
-static int ReadColorMap (gdIOCtx *fd, int number, unsigned char (*buffer)[256]);
-static int DoExtension (gdIOCtx *fd, int label, int *Transparent);
-static int GetDataBlock (gdIOCtx *fd, unsigned char *buf);
-static int GetCode (gdIOCtx *fd, int code_size, int flag);
-static int LWZReadByte (gdIOCtx *fd, int flag, int input_code_size);
-
-static void ReadImage (gdImagePtr im, gdIOCtx *fd, int len, int height, unsigned char (*cmap)[256], int interlace); /*1.4//, int ignore); */
-
-int ZeroDataBlock;
-
-gdImagePtr gdImageCreateFromGifSource(gdSourcePtr inSource)
-{
- gdIOCtx *in = gdNewSSCtx(inSource, NULL);
- gdImagePtr im;
-
- im = gdImageCreateFromGifCtx(in);
-
- in->gd_free(in);
-
- return im;
-}
-
-gdImagePtr
-gdImageCreateFromGif(FILE *fdFile)
-{
- gdIOCtx *fd = gdNewFileCtx(fdFile);
- gdImagePtr im = 0;
-
- im = gdImageCreateFromGifCtx(fd);
-
- fd->gd_free(fd);
-
- return im;
-}
-
-gdImagePtr
-gdImageCreateFromGifCtx(gdIOCtxPtr fd)
-{
-/* 1.4 int imageNumber; */
- int BitPixel;
- int ColorResolution;
- int Background;
- int AspectRatio;
- int Transparent = (-1);
- unsigned char buf[16];
- unsigned char c;
- unsigned char ColorMap[3][MAXCOLORMAPSIZE];
- unsigned char localColorMap[3][MAXCOLORMAPSIZE];
- int imw, imh;
- int useGlobalColormap;
- int bitPixel;
- int i;
- /*1.4//int imageCount = 0; */
- char version[4];
-
- gdImagePtr im = 0;
- ZeroDataBlock = FALSE;
-
- /*1.4//imageNumber = 1; */
- if (! ReadOK(fd,buf,6)) {
- return 0;
- }
- if (strncmp((char *)buf,"GIF",3) != 0) {
- return 0;
- }
- strncpy(version, (char *)buf + 3, 3);
- version[3] = '\0';
-
- if ((strcmp(version, "87a") != 0) && (strcmp(version, "89a") != 0)) {
- return 0;
- }
- if (! ReadOK(fd,buf,7)) {
- return 0;
- }
- BitPixel = 2<<(buf[4]&0x07);
- ColorResolution = (int) (((buf[4]&0x70)>>3)+1);
- Background = buf[5];
- AspectRatio = buf[6];
-
- if (BitSet(buf[4], LOCALCOLORMAP)) { /* Global Colormap */
- if (ReadColorMap(fd, BitPixel, ColorMap)) {
- return 0;
- }
- }
- for (;;) {
- if (! ReadOK(fd,&c,1)) {
- return 0;
- }
- if (c == ';') { /* GIF terminator */
- goto terminated;
- }
-
- if (c == '!') { /* Extension */
- if (! ReadOK(fd,&c,1)) {
- return 0;
- }
- DoExtension(fd, c, &Transparent);
- continue;
- }
-
- if (c != ',') { /* Not a valid start character */
- continue;
- }
-
- /*1.4//++imageCount; */
-
- if (! ReadOK(fd,buf,9)) {
- return 0;
- }
-
- useGlobalColormap = ! BitSet(buf[8], LOCALCOLORMAP);
-
- bitPixel = 1<<((buf[8]&0x07)+1);
-
- imw = LM_to_uint(buf[4],buf[5]);
- imh = LM_to_uint(buf[6],buf[7]);
- if (!(im = gdImageCreate(imw, imh))) {
- return 0;
- }
- im->interlace = BitSet(buf[8], INTERLACE);
- if (! useGlobalColormap) {
- if (ReadColorMap(fd, bitPixel, localColorMap)) {
- return 0;
- }
- ReadImage(im, fd, imw, imh, localColorMap,
- BitSet(buf[8], INTERLACE));
- /*1.4//imageCount != imageNumber); */
- } else {
- ReadImage(im, fd, imw, imh,
- ColorMap,
- BitSet(buf[8], INTERLACE));
- /*1.4//imageCount != imageNumber); */
- }
- if (Transparent != (-1)) {
- gdImageColorTransparent(im, Transparent);
- }
- goto terminated;
- }
-
-terminated:
- /* Terminator before any image was declared! */
- if (!im) {
- return 0;
- }
- /* Check for open colors at the end, so
- we can reduce colorsTotal and ultimately
- BitsPerPixel */
- for (i=((im->colorsTotal-1)); (i>=0); i--) {
- if (im->open[i]) {
- im->colorsTotal--;
- } else {
- break;
- }
- }
- return im;
-}
-
-static int
-ReadColorMap(gdIOCtx *fd, int number, unsigned char (*buffer)[256])
-{
- int i;
- unsigned char rgb[3];
-
-
- for (i = 0; i < number; ++i) {
- if (! ReadOK(fd, rgb, sizeof(rgb))) {
- return TRUE;
- }
- buffer[CM_RED][i] = rgb[0] ;
- buffer[CM_GREEN][i] = rgb[1] ;
- buffer[CM_BLUE][i] = rgb[2] ;
- }
-
-
- return FALSE;
-}
-
-static int
-DoExtension(gdIOCtx *fd, int label, int *Transparent)
-{
- static unsigned char buf[256];
-
- switch (label) {
- case 0xf9: /* Graphic Control Extension */
- (void) GetDataBlock(fd, (unsigned char*) buf);
- Gif89.disposal = (buf[0] >> 2) & 0x7;
- Gif89.inputFlag = (buf[0] >> 1) & 0x1;
- Gif89.delayTime = LM_to_uint(buf[1],buf[2]);
- if ((buf[0] & 0x1) != 0)
- *Transparent = buf[3];
-
- while (GetDataBlock(fd, (unsigned char*) buf) != 0)
- ;
- return FALSE;
- default:
- break;
- }
- while (GetDataBlock(fd, (unsigned char*) buf) != 0)
- ;
-
- return FALSE;
-}
-
-static int
-GetDataBlock_(gdIOCtx *fd, unsigned char *buf)
-{
- unsigned char count;
-
- if (! ReadOK(fd,&count,1)) {
- return -1;
- }
-
- ZeroDataBlock = count == 0;
-
- if ((count != 0) && (! ReadOK(fd, buf, count))) {
- return -1;
- }
-
- return count;
-}
-
-static int
-GetDataBlock(gdIOCtx *fd, unsigned char *buf)
-{
- int rv;
- int i;
- char *tmp = NULL;
-
- rv = GetDataBlock_(fd,buf);
- if (VERBOSE) {
- if (rv > 0) {
- tmp = safe_emalloc(3 * rv, sizeof(char), 1);
- for (i=0;i<rv;i++) {
- sprintf(&tmp[3*sizeof(char)*i], " %02x", buf[i]);
- }
- } else {
- tmp = estrdup("");
- }
- php_gd_error_ex(E_NOTICE, "[GetDataBlock returning %d: %s]", rv, tmp);
- efree(tmp);
- }
- return(rv);
-}
-
-static int
-GetCode_(gdIOCtx *fd, int code_size, int flag)
-{
- static unsigned char buf[280];
- static int curbit, lastbit, done, last_byte;
- int i, j, ret;
- unsigned char count;
-
- if (flag) {
- curbit = 0;
- lastbit = 0;
- done = FALSE;
- return 0;
- }
-
- if ( (curbit+code_size) >= lastbit) {
- if (done) {
- if (curbit >= lastbit) {
- /* Oh well */
- }
- return -1;
- }
- buf[0] = buf[last_byte-2];
- buf[1] = buf[last_byte-1];
-
- if ((count = GetDataBlock(fd, &buf[2])) == 0)
- done = TRUE;
-
- last_byte = 2 + count;
- curbit = (curbit - lastbit) + 16;
- lastbit = (2+count)*8 ;
- }
-
- ret = 0;
- for (i = curbit, j = 0; j < code_size; ++i, ++j)
- ret |= ((buf[ i / 8 ] & (1 << (i % 8))) != 0) << j;
-
- curbit += code_size;
- return ret;
-}
-
-static int
-GetCode(gdIOCtx *fd, int code_size, int flag)
-{
- int rv;
-
- rv = GetCode_(fd,code_size,flag);
- if (VERBOSE) php_gd_error_ex(E_NOTICE, "[GetCode(,%d,%d) returning %d]\n",code_size,flag,rv);
- return(rv);
-}
-
-#define STACK_SIZE ((1<<(MAX_LWZ_BITS))*2)
-static int
-LWZReadByte_(gdIOCtx *fd, int flag, int input_code_size)
-{
- static int fresh = FALSE;
- int code, incode;
- static int code_size, set_code_size;
- static int max_code, max_code_size;
- static int firstcode, oldcode;
- static int clear_code, end_code;
- static int table[2][(1<< MAX_LWZ_BITS)];
- static int stack[STACK_SIZE], *sp;
- register int i;
-
- if (flag) {
- set_code_size = input_code_size;
- code_size = set_code_size+1;
- clear_code = 1 << set_code_size ;
- end_code = clear_code + 1;
- max_code_size = 2*clear_code;
- max_code = clear_code+2;
-
- GetCode(fd, 0, TRUE);
-
- fresh = TRUE;
-
- for (i = 0; i < clear_code; ++i) {
- table[0][i] = 0;
- table[1][i] = i;
- }
- for (; i < (1<<MAX_LWZ_BITS); ++i)
- table[0][i] = table[1][0] = 0;
-
- sp = stack;
-
- return 0;
- } else if (fresh) {
- fresh = FALSE;
- do {
- firstcode = oldcode =
- GetCode(fd, code_size, FALSE);
- } while (firstcode == clear_code);
- return firstcode;
- }
-
- if (sp > stack)
- return *--sp;
-
- while ((code = GetCode(fd, code_size, FALSE)) >= 0) {
- if (code == clear_code) {
- for (i = 0; i < clear_code; ++i) {
- table[0][i] = 0;
- table[1][i] = i;
- }
- for (; i < (1<<MAX_LWZ_BITS); ++i)
- table[0][i] = table[1][i] = 0;
- code_size = set_code_size+1;
- max_code_size = 2*clear_code;
- max_code = clear_code+2;
- sp = stack;
- firstcode = oldcode =
- GetCode(fd, code_size, FALSE);
- return firstcode;
- } else if (code == end_code) {
- int count;
- unsigned char buf[260];
-
- if (ZeroDataBlock)
- return -2;
-
- while ((count = GetDataBlock(fd, buf)) > 0)
- ;
-
- if (count != 0)
- return -2;
- }
-
- incode = code;
-
- if (sp == (stack + STACK_SIZE)) {
- /* Bad compressed data stream */
- return -1;
- }
-
- if (code >= max_code) {
- *sp++ = firstcode;
- code = oldcode;
- }
-
- while (code >= clear_code) {
- if (sp == (stack + STACK_SIZE)) {
- /* Bad compressed data stream */
- return -1;
- }
- *sp++ = table[1][code];
- if (code == table[0][code]) {
- /* Oh well */
- }
- code = table[0][code];
- }
-
- *sp++ = firstcode = table[1][code];
-
- if ((code = max_code) <(1<<MAX_LWZ_BITS)) {
- table[0][code] = oldcode;
- table[1][code] = firstcode;
- ++max_code;
- if ((max_code >= max_code_size) &&
- (max_code_size < (1<<MAX_LWZ_BITS))) {
- max_code_size *= 2;
- ++code_size;
- }
- }
-
- oldcode = incode;
-
- if (sp > stack)
- return *--sp;
- }
- return code;
-}
-
-static int
-LWZReadByte(gdIOCtx *fd, int flag, int input_code_size)
-{
- int rv;
-
- rv = LWZReadByte_(fd,flag,input_code_size);
- if (VERBOSE) php_gd_error_ex(E_NOTICE, "[LWZReadByte(,%d,%d) returning %d]\n",flag,input_code_size,rv);
- return(rv);
-}
-
-static void
-ReadImage(gdImagePtr im, gdIOCtx *fd, int len, int height, unsigned char (*cmap)[256], int interlace) /*1.4//, int ignore) */
-{
- unsigned char c;
- int v;
- int xpos = 0, ypos = 0, pass = 0;
- int i;
- /* Stash the color map into the image */
- for (i=0; (i<gdMaxColors); i++) {
- im->red[i] = cmap[CM_RED][i];
- im->green[i] = cmap[CM_GREEN][i];
- im->blue[i] = cmap[CM_BLUE][i];
- im->open[i] = 1;
- }
- /* Many (perhaps most) of these colors will remain marked open. */
- im->colorsTotal = gdMaxColors;
- /*
- ** Initialize the Compression routines
- */
- if (! ReadOK(fd,&c,1)) {
- return;
- }
- if (LWZReadByte(fd, TRUE, c) < 0) {
- return;
- }
-
- /*
- ** If this is an "uninteresting picture" ignore it.
- ** REMOVED For 1.4
- */
- /*if (ignore) { */
- /* while (LWZReadByte(fd, FALSE, c) >= 0) */
- /* ; */
- /* return; */
- /*} */
-
- while ((v = LWZReadByte(fd,FALSE,c)) >= 0 ) {
- /* This how we recognize which colors are actually used. */
- if (im->open[v]) {
- im->open[v] = 0;
- }
- gdImageSetPixel(im, xpos, ypos, v);
- ++xpos;
- if (xpos == len) {
- xpos = 0;
- if (interlace) {
- switch (pass) {
- case 0:
- case 1:
- ypos += 8; break;
- case 2:
- ypos += 4; break;
- case 3:
- ypos += 2; break;
- }
-
- if (ypos >= height) {
- ++pass;
- switch (pass) {
- case 1:
- ypos = 4; break;
- case 2:
- ypos = 2; break;
- case 3:
- ypos = 1; break;
- default:
- goto fini;
- }
- }
- } else {
- ++ypos;
- }
- }
- if (ypos >= height)
- break;
- }
-
-fini:
- if (LWZReadByte(fd,FALSE,c)>=0) {
- /* Ignore extra */
- }
-}
-
diff --git a/ext/gd/libgd/gd_gif_out.c b/ext/gd/libgd/gd_gif_out.c
deleted file mode 100644
index 49da75f96f..0000000000
--- a/ext/gd/libgd/gd_gif_out.c
+++ /dev/null
@@ -1,759 +0,0 @@
-#include <stdio.h>
-#include <math.h>
-#include <string.h>
-#include <stdlib.h>
-#include "gd.h"
-
-/* Code drawn from ppmtogif.c, from the pbmplus package
-**
-** Based on GIFENCOD by David Rowley <mgardi@watdscu.waterloo.edu>. A
-** Lempel-Zim compression based on "compress".
-**
-** Modified by Marcel Wijkstra <wijkstra@fwi.uva.nl>
-**
-** Copyright (C) 1989 by Jef Poskanzer.
-**
-** Permission to use, copy, modify, and distribute this software and its
-** documentation for any purpose and without fee is hereby granted, provided
-** that the above copyright notice appear in all copies and that both that
-** copyright notice and this permission notice appear in supporting
-** documentation. This software is provided "as is" without express or
-** implied warranty.
-**
-** The Graphics Interchange Format(c) is the Copyright property of
-** CompuServe Incorporated. GIF(sm) is a Service Mark property of
-** CompuServe Incorporated.
-*/
-
-/*
- * a code_int must be able to hold 2**GIFBITS values of type int, and also -1
- */
-typedef int code_int;
-
-#ifdef SIGNED_COMPARE_SLOW
-typedef unsigned long int count_int;
-typedef unsigned short int count_short;
-#else /*SIGNED_COMPARE_SLOW*/
-typedef long int count_int;
-#endif /*SIGNED_COMPARE_SLOW*/
-
-/* 2.0.28: threadsafe */
-
-#define maxbits GIFBITS
-
-/* should NEVER generate this code */
-#define maxmaxcode ((code_int)1 << GIFBITS)
-
-#define HSIZE 5003 /* 80% occupancy */
-#define hsize HSIZE /* Apparently invariant, left over from
- compress */
-
-typedef struct {
- int Width, Height;
- int curx, cury;
- long CountDown;
- int Pass;
- int Interlace;
- int n_bits; /* number of bits/code */
- code_int maxcode; /* maximum code, given n_bits */
- count_int htab [HSIZE];
- unsigned short codetab [HSIZE];
- code_int free_ent; /* first unused entry */
- /*
- * block compression parameters -- after all codes are used up,
- * and compression rate changes, start over.
- */
- int clear_flg;
- int offset;
- long int in_count; /* length of input */
- long int out_count; /* # of codes output (for debugging) */
-
- int g_init_bits;
- gdIOCtx * g_outfile;
-
- int ClearCode;
- int EOFCode;
- unsigned long cur_accum;
- int cur_bits;
- /*
- * Number of characters so far in this 'packet'
- */
- int a_count;
- /*
- * Define the storage for the packet accumulator
- */
- char accum[ 256 ];
-} GifCtx;
-
-static int gifPutWord(int w, gdIOCtx *out);
-static int colorstobpp(int colors);
-static void BumpPixel (GifCtx *ctx);
-static int GIFNextPixel (gdImagePtr im, GifCtx *ctx);
-static void GIFEncode (gdIOCtxPtr fp, int GWidth, int GHeight, int GInterlace, int Background, int Transparent, int BitsPerPixel, int *Red, int *Green, int *Blue, gdImagePtr im);
-static void compress (int init_bits, gdIOCtx *outfile, gdImagePtr im, GifCtx *ctx);
-static void output (code_int code, GifCtx *ctx);
-static void cl_block (GifCtx *ctx);
-static void cl_hash (register count_int chsize, GifCtx *ctx);
-static void char_init (GifCtx *ctx);
-static void char_out (int c, GifCtx *ctx);
-static void flush_char (GifCtx *ctx);
-void * gdImageGifPtr (gdImagePtr im, int *size)
-{
- void *rv;
- gdIOCtx *out = gdNewDynamicCtx (2048, NULL);
- gdImageGifCtx (im, out);
- rv = gdDPExtractData (out, size);
- out->gd_free (out);
- return rv;
-}
-
-void gdImageGif (gdImagePtr im, FILE * outFile)
-{
- gdIOCtx *out = gdNewFileCtx (outFile);
- gdImageGifCtx (im, out);
- out->gd_free (out);
-}
-
-void gdImageGifCtx(gdImagePtr im, gdIOCtxPtr out)
-{
- gdImagePtr pim = 0, tim = im;
- int interlace, transparent, BitsPerPixel;
- interlace = im->interlace;
- transparent = im->transparent;
- if (im->trueColor) {
- /* Expensive, but the only way that produces an
- acceptable result: mix down to a palette
- based temporary image. */
- pim = gdImageCreatePaletteFromTrueColor(im, 1, 256);
- if (!pim) {
- return;
- }
- tim = pim;
- }
- BitsPerPixel = colorstobpp(tim->colorsTotal);
- /* All set, let's do it. */
- GIFEncode(
- out, tim->sx, tim->sy, interlace, 0, transparent, BitsPerPixel,
- tim->red, tim->green, tim->blue, tim);
- if (pim) {
- /* Destroy palette based temporary image. */
- gdImageDestroy( pim);
- }
-}
-
-static int
-colorstobpp(int colors)
-{
- int bpp = 0;
-
- if ( colors <= 2 )
- bpp = 1;
- else if ( colors <= 4 )
- bpp = 2;
- else if ( colors <= 8 )
- bpp = 3;
- else if ( colors <= 16 )
- bpp = 4;
- else if ( colors <= 32 )
- bpp = 5;
- else if ( colors <= 64 )
- bpp = 6;
- else if ( colors <= 128 )
- bpp = 7;
- else if ( colors <= 256 )
- bpp = 8;
- return bpp;
- }
-
-/*****************************************************************************
- *
- * GIFENCODE.C - GIF Image compression interface
- *
- * GIFEncode( FName, GHeight, GWidth, GInterlace, Background, Transparent,
- * BitsPerPixel, Red, Green, Blue, gdImagePtr )
- *
- *****************************************************************************/
-
-#define TRUE 1
-#define FALSE 0
-/*
- * Bump the 'curx' and 'cury' to point to the next pixel
- */
-static void
-BumpPixel(GifCtx *ctx)
-{
- /*
- * Bump the current X position
- */
- ++(ctx->curx);
-
- /*
- * If we are at the end of a scan line, set curx back to the beginning
- * If we are interlaced, bump the cury to the appropriate spot,
- * otherwise, just increment it.
- */
- if( ctx->curx == ctx->Width ) {
- ctx->curx = 0;
-
- if( !ctx->Interlace )
- ++(ctx->cury);
- else {
- switch( ctx->Pass ) {
-
- case 0:
- ctx->cury += 8;
- if( ctx->cury >= ctx->Height ) {
- ++(ctx->Pass);
- ctx->cury = 4;
- }
- break;
-
- case 1:
- ctx->cury += 8;
- if( ctx->cury >= ctx->Height ) {
- ++(ctx->Pass);
- ctx->cury = 2;
- }
- break;
-
- case 2:
- ctx->cury += 4;
- if( ctx->cury >= ctx->Height ) {
- ++(ctx->Pass);
- ctx->cury = 1;
- }
- break;
-
- case 3:
- ctx->cury += 2;
- break;
- }
- }
- }
-}
-
-/*
- * Return the next pixel from the image
- */
-static int
-GIFNextPixel(gdImagePtr im, GifCtx *ctx)
-{
- int r;
-
- if( ctx->CountDown == 0 )
- return EOF;
-
- --(ctx->CountDown);
-
- r = gdImageGetPixel(im, ctx->curx, ctx->cury);
-
- BumpPixel(ctx);
-
- return r;
-}
-
-/* public */
-
-static void
-GIFEncode(gdIOCtxPtr fp, int GWidth, int GHeight, int GInterlace, int Background, int Transparent, int BitsPerPixel, int *Red, int *Green, int *Blue, gdImagePtr im)
-{
- int B;
- int RWidth, RHeight;
- int LeftOfs, TopOfs;
- int Resolution;
- int ColorMapSize;
- int InitCodeSize;
- int i;
- GifCtx ctx;
- ctx.Interlace = GInterlace;
- ctx.in_count = 1;
- memset(&ctx, 0, sizeof(ctx));
- ColorMapSize = 1 << BitsPerPixel;
-
- RWidth = ctx.Width = GWidth;
- RHeight = ctx.Height = GHeight;
- LeftOfs = TopOfs = 0;
-
- Resolution = BitsPerPixel;
-
- /*
- * Calculate number of bits we are expecting
- */
- ctx.CountDown = (long)ctx.Width * (long)ctx.Height;
-
- /*
- * Indicate which pass we are on (if interlace)
- */
- ctx.Pass = 0;
-
- /*
- * The initial code size
- */
- if( BitsPerPixel <= 1 )
- InitCodeSize = 2;
- else
- InitCodeSize = BitsPerPixel;
-
- /*
- * Set up the current x and y position
- */
- ctx.curx = ctx.cury = 0;
-
- /*
- * Write the Magic header
- */
- gdPutBuf(Transparent < 0 ? "GIF87a" : "GIF89a", 6, fp );
-
- /*
- * Write out the screen width and height
- */
- gifPutWord( RWidth, fp );
- gifPutWord( RHeight, fp );
-
- /*
- * Indicate that there is a global colour map
- */
- B = 0x80; /* Yes, there is a color map */
-
- /*
- * OR in the resolution
- */
- B |= (Resolution - 1) << 5;
-
- /*
- * OR in the Bits per Pixel
- */
- B |= (BitsPerPixel - 1);
-
- /*
- * Write it out
- */
- gdPutC( B, fp );
-
- /*
- * Write out the Background colour
- */
- gdPutC( Background, fp );
-
- /*
- * Byte of 0's (future expansion)
- */
- gdPutC( 0, fp );
-
- /*
- * Write out the Global Colour Map
- */
- for( i=0; i<ColorMapSize; ++i ) {
- gdPutC( Red[i], fp );
- gdPutC( Green[i], fp );
- gdPutC( Blue[i], fp );
- }
-
- /*
- * Write out extension for transparent colour index, if necessary.
- */
- if ( Transparent >= 0 ) {
- gdPutC( '!', fp );
- gdPutC( 0xf9, fp );
- gdPutC( 4, fp );
- gdPutC( 1, fp );
- gdPutC( 0, fp );
- gdPutC( 0, fp );
- gdPutC( (unsigned char) Transparent, fp );
- gdPutC( 0, fp );
- }
-
- /*
- * Write an Image separator
- */
- gdPutC( ',', fp );
-
- /*
- * Write the Image header
- */
-
- gifPutWord( LeftOfs, fp );
- gifPutWord( TopOfs, fp );
- gifPutWord( ctx.Width, fp );
- gifPutWord( ctx.Height, fp );
-
- /*
- * Write out whether or not the image is interlaced
- */
- if( ctx.Interlace )
- gdPutC( 0x40, fp );
- else
- gdPutC( 0x00, fp );
-
- /*
- * Write out the initial code size
- */
- gdPutC( InitCodeSize, fp );
-
- /*
- * Go and actually compress the data
- */
- compress( InitCodeSize+1, fp, im, &ctx );
-
- /*
- * Write out a Zero-length packet (to end the series)
- */
- gdPutC( 0, fp );
-
- /*
- * Write the GIF file terminator
- */
- gdPutC( ';', fp );
-}
-
-/***************************************************************************
- *
- * GIFCOMPR.C - GIF Image compression routines
- *
- * Lempel-Ziv compression based on 'compress'. GIF modifications by
- * David Rowley (mgardi@watdcsu.waterloo.edu)
- *
- ***************************************************************************/
-
-/*
- * General DEFINEs
- */
-
-#define GIFBITS 12
-
-#ifdef NO_UCHAR
- typedef char char_type;
-#else /*NO_UCHAR*/
- typedef unsigned char char_type;
-#endif /*NO_UCHAR*/
-
-/*
- *
- * GIF Image compression - modified 'compress'
- *
- * Based on: compress.c - File compression ala IEEE Computer, June 1984.
- *
- * By Authors: Spencer W. Thomas (decvax!harpo!utah-cs!utah-gr!thomas)
- * Jim McKie (decvax!mcvax!jim)
- * Steve Davies (decvax!vax135!petsd!peora!srd)
- * Ken Turkowski (decvax!decwrl!turtlevax!ken)
- * James A. Woods (decvax!ihnp4!ames!jaw)
- * Joe Orost (decvax!vax135!petsd!joe)
- *
- */
-#include <ctype.h>
-
-#define ARGVAL() (*++(*argv) || (--argc && *++argv))
-
-#ifdef COMPATIBLE /* But wrong! */
-# define MAXCODE(n_bits) ((code_int) 1 << (n_bits) - 1)
-#else /*COMPATIBLE*/
-# define MAXCODE(n_bits) (((code_int) 1 << (n_bits)) - 1)
-#endif /*COMPATIBLE*/
-
-#define HashTabOf(i) ctx->htab[i]
-#define CodeTabOf(i) ctx->codetab[i]
-
-
-/*
- * To save much memory, we overlay the table used by compress() with those
- * used by decompress(). The tab_prefix table is the same size and type
- * as the codetab. The tab_suffix table needs 2**GIFBITS characters. We
- * get this from the beginning of htab. The output stack uses the rest
- * of htab, and contains characters. There is plenty of room for any
- * possible stack (stack used to be 8000 characters).
- */
-
-#define tab_prefixof(i) CodeTabOf(i)
-#define tab_suffixof(i) ((char_type*)(htab))[i]
-#define de_stack ((char_type*)&tab_suffixof((code_int)1<<GIFBITS))
-
-/*
- * compress stdin to stdout
- *
- * Algorithm: use open addressing double hashing (no chaining) on the
- * prefix code / next character combination. We do a variant of Knuth's
- * algorithm D (vol. 3, sec. 6.4) along with G. Knott's relatively-prime
- * secondary probe. Here, the modular division first probe is gives way
- * to a faster exclusive-or manipulation. Also do block compression with
- * an adaptive reset, whereby the code table is cleared when the compression
- * ratio decreases, but after the table fills. The variable-length output
- * codes are re-sized at this point, and a special CLEAR code is generated
- * for the decompressor. Late addition: construct the table according to
- * file size for noticeable speed improvement on small files. Please direct
- * questions about this implementation to ames!jaw.
- */
-
-static void
-output(code_int code, GifCtx *ctx);
-
-static void
-compress(int init_bits, gdIOCtxPtr outfile, gdImagePtr im, GifCtx *ctx)
-{
- register long fcode;
- register code_int i /* = 0 */;
- register int c;
- register code_int ent;
- register code_int disp;
- register code_int hsize_reg;
- register int hshift;
-
- /*
- * Set up the globals: g_init_bits - initial number of bits
- * g_outfile - pointer to output file
- */
- ctx->g_init_bits = init_bits;
- ctx->g_outfile = outfile;
-
- /*
- * Set up the necessary values
- */
- ctx->offset = 0;
- ctx->out_count = 0;
- ctx->clear_flg = 0;
- ctx->in_count = 1;
- ctx->maxcode = MAXCODE(ctx->n_bits = ctx->g_init_bits);
-
- ctx->ClearCode = (1 << (init_bits - 1));
- ctx->EOFCode = ctx->ClearCode + 1;
- ctx->free_ent = ctx->ClearCode + 2;
-
- char_init(ctx);
-
- ent = GIFNextPixel( im, ctx );
-
- hshift = 0;
- for ( fcode = (long) hsize; fcode < 65536L; fcode *= 2L )
- ++hshift;
- hshift = 8 - hshift; /* set hash code range bound */
-
- hsize_reg = hsize;
- cl_hash( (count_int) hsize_reg, ctx ); /* clear hash table */
-
- output( (code_int)ctx->ClearCode, ctx );
-
-#ifdef SIGNED_COMPARE_SLOW
- while ( (c = GIFNextPixel( im )) != (unsigned) EOF ) {
-#else /*SIGNED_COMPARE_SLOW*/
- while ( (c = GIFNextPixel( im, ctx )) != EOF ) { /* } */
-#endif /*SIGNED_COMPARE_SLOW*/
-
- ++(ctx->in_count);
-
- fcode = (long) (((long) c << maxbits) + ent);
- i = (((code_int)c << hshift) ^ ent); /* xor hashing */
-
- if ( HashTabOf (i) == fcode ) {
- ent = CodeTabOf (i);
- continue;
- } else if ( (long)HashTabOf (i) < 0 ) /* empty slot */
- goto nomatch;
- disp = hsize_reg - i; /* secondary hash (after G. Knott) */
- if ( i == 0 )
- disp = 1;
-probe:
- if ( (i -= disp) < 0 )
- i += hsize_reg;
-
- if ( HashTabOf (i) == fcode ) {
- ent = CodeTabOf (i);
- continue;
- }
- if ( (long)HashTabOf (i) > 0 )
- goto probe;
-nomatch:
- output ( (code_int) ent, ctx );
- ++(ctx->out_count);
- ent = c;
-#ifdef SIGNED_COMPARE_SLOW
- if ( (unsigned) ctx->free_ent < (unsigned) maxmaxcode) {
-#else /*SIGNED_COMPARE_SLOW*/
- if ( ctx->free_ent < maxmaxcode ) { /* } */
-#endif /*SIGNED_COMPARE_SLOW*/
- CodeTabOf (i) = ctx->free_ent++; /* code -> hashtable */
- HashTabOf (i) = fcode;
- } else
- cl_block(ctx);
- }
- /*
- * Put out the final code.
- */
- output( (code_int)ent, ctx );
- ++(ctx->out_count);
- output( (code_int) ctx->EOFCode, ctx );
-}
-
-/*****************************************************************
- * TAG( output )
- *
- * Output the given code.
- * Inputs:
- * code: A n_bits-bit integer. If == -1, then EOF. This assumes
- * that n_bits =< (long)wordsize - 1.
- * Outputs:
- * Outputs code to the file.
- * Assumptions:
- * Chars are 8 bits long.
- * Algorithm:
- * Maintain a GIFBITS character long buffer (so that 8 codes will
- * fit in it exactly). Use the VAX insv instruction to insert each
- * code in turn. When the buffer fills up empty it and start over.
- */
-
-static unsigned long masks[] = { 0x0000, 0x0001, 0x0003, 0x0007, 0x000F,
- 0x001F, 0x003F, 0x007F, 0x00FF,
- 0x01FF, 0x03FF, 0x07FF, 0x0FFF,
- 0x1FFF, 0x3FFF, 0x7FFF, 0xFFFF };
-
-static void
-output(code_int code, GifCtx *ctx)
-{
- ctx->cur_accum &= masks[ ctx->cur_bits ];
-
- if( ctx->cur_bits > 0 )
- ctx->cur_accum |= ((long)code << ctx->cur_bits);
- else
- ctx->cur_accum = code;
-
- ctx->cur_bits += ctx->n_bits;
-
- while( ctx->cur_bits >= 8 ) {
- char_out( (unsigned int)(ctx->cur_accum & 0xff), ctx );
- ctx->cur_accum >>= 8;
- ctx->cur_bits -= 8;
- }
-
- /*
- * If the next entry is going to be too big for the code size,
- * then increase it, if possible.
- */
- if ( ctx->free_ent > ctx->maxcode || ctx->clear_flg ) {
-
- if( ctx->clear_flg ) {
-
- ctx->maxcode = MAXCODE (ctx->n_bits = ctx->g_init_bits);
- ctx->clear_flg = 0;
-
- } else {
-
- ++(ctx->n_bits);
- if ( ctx->n_bits == maxbits )
- ctx->maxcode = maxmaxcode;
- else
- ctx->maxcode = MAXCODE(ctx->n_bits);
- }
- }
-
- if( code == ctx->EOFCode ) {
- /*
- * At EOF, write the rest of the buffer.
- */
- while( ctx->cur_bits > 0 ) {
- char_out( (unsigned int)(ctx->cur_accum & 0xff), ctx);
- ctx->cur_accum >>= 8;
- ctx->cur_bits -= 8;
- }
-
- flush_char(ctx);
-
- }
-}
-
-/*
- * Clear out the hash table
- */
-static void
-cl_block (GifCtx *ctx) /* table clear for block compress */
-{
-
- cl_hash ( (count_int) hsize, ctx );
- ctx->free_ent = ctx->ClearCode + 2;
- ctx->clear_flg = 1;
-
- output( (code_int)ctx->ClearCode, ctx);
-}
-
-static void
-cl_hash(register count_int chsize, GifCtx *ctx) /* reset code table */
-
-{
-
- register count_int *htab_p = ctx->htab+chsize;
-
- register long i;
- register long m1 = -1;
-
- i = chsize - 16;
- do { /* might use Sys V memset(3) here */
- *(htab_p-16) = m1;
- *(htab_p-15) = m1;
- *(htab_p-14) = m1;
- *(htab_p-13) = m1;
- *(htab_p-12) = m1;
- *(htab_p-11) = m1;
- *(htab_p-10) = m1;
- *(htab_p-9) = m1;
- *(htab_p-8) = m1;
- *(htab_p-7) = m1;
- *(htab_p-6) = m1;
- *(htab_p-5) = m1;
- *(htab_p-4) = m1;
- *(htab_p-3) = m1;
- *(htab_p-2) = m1;
- *(htab_p-1) = m1;
- htab_p -= 16;
- } while ((i -= 16) >= 0);
-
- for ( i += 16; i > 0; --i )
- *--htab_p = m1;
-}
-
-/******************************************************************************
- *
- * GIF Specific routines
- *
- ******************************************************************************/
-
-/*
- * Set up the 'byte output' routine
- */
-static void
-char_init(GifCtx *ctx)
-{
- ctx->a_count = 0;
-}
-
-/*
- * Add a character to the end of the current packet, and if it is 254
- * characters, flush the packet to disk.
- */
-static void
-char_out(int c, GifCtx *ctx)
-{
- ctx->accum[ ctx->a_count++ ] = c;
- if( ctx->a_count >= 254 )
- flush_char(ctx);
-}
-
-/*
- * Flush the packet to disk, and reset the accumulator
- */
-static void
-flush_char(GifCtx *ctx)
-{
- if( ctx->a_count > 0 ) {
- gdPutC( ctx->a_count, ctx->g_outfile );
- gdPutBuf( ctx->accum, ctx->a_count, ctx->g_outfile );
- ctx->a_count = 0;
- }
-}
-
-static int gifPutWord(int w, gdIOCtx *out)
-{
- /* Byte order is little-endian */
- gdPutC(w & 0xFF, out);
- gdPutC((w >> 8) & 0xFF, out);
- return 0;
-}
-
-
diff --git a/ext/gd/libgd/gd_io.c b/ext/gd/libgd/gd_io.c
deleted file mode 100644
index 6a39e16eb1..0000000000
--- a/ext/gd/libgd/gd_io.c
+++ /dev/null
@@ -1,146 +0,0 @@
-
-
-/*
- * io.c
- *
- * Implements the simple I/O 'helper' routines.
- *
- * Not really essential, but these routines were used extensively in GD,
- * so they were moved here. They also make IOCtx calls look better...
- *
- * Written (or, at least, moved) 1999, Philip Warner.
- *
- */
-
-#include <math.h>
-#include <string.h>
-#include <stdlib.h>
-#include "gd.h"
-
-/* Use this for commenting out debug-print statements. */
-/* Just use the first '#define' to allow all the prints... */
-/*#define IO_DBG(s) (s) */
-#define IO_DBG(s)
-
-
-#define GD_IO_EOF_CHK(r) \
- if (r == EOF) { \
- return 0; \
- } \
-
-/*
- * Write out a word to the I/O context pointer
- */
-void Putword (int w, gdIOCtx * ctx)
-{
- unsigned char buf[2];
-
- buf[0] = w & 0xff;
- buf[1] = (w / 256) & 0xff;
- (ctx->putBuf) (ctx, (char *) buf, 2);
-}
-
-void Putchar (int c, gdIOCtx * ctx)
-{
- (ctx->putC) (ctx, c & 0xff);
-}
-
-void gdPutC (const unsigned char c, gdIOCtx * ctx)
-{
- (ctx->putC) (ctx, c);
-}
-
-void gdPutWord (int w, gdIOCtx * ctx)
-{
- IO_DBG (php_gd_error("Putting word...\n"));
- (ctx->putC) (ctx, (unsigned char) (w >> 8));
- (ctx->putC) (ctx, (unsigned char) (w & 0xFF));
- IO_DBG (php_gd_error("put.\n"));
-}
-
-void gdPutInt (int w, gdIOCtx * ctx)
-{
- IO_DBG (php_gd_error("Putting int...\n"));
- (ctx->putC) (ctx, (unsigned char) (w >> 24));
- (ctx->putC) (ctx, (unsigned char) ((w >> 16) & 0xFF));
- (ctx->putC) (ctx, (unsigned char) ((w >> 8) & 0xFF));
- (ctx->putC) (ctx, (unsigned char) (w & 0xFF));
- IO_DBG (php_gd_error("put.\n"));
-}
-
-int gdGetC (gdIOCtx * ctx)
-{
- return ((ctx->getC) (ctx));
-}
-
-int gdGetByte (int *result, gdIOCtx * ctx)
-{
- int r;
- r = (ctx->getC) (ctx);
- GD_IO_EOF_CHK(r);
- *result = r;
- return 1;
-}
-
-int gdGetWord (int *result, gdIOCtx * ctx)
-{
- int r;
- r = (ctx->getC) (ctx);
- GD_IO_EOF_CHK(r);
- *result = r << 8;
- r = (ctx->getC) (ctx);
- GD_IO_EOF_CHK(r);
- *result += r;
- return 1;
-}
-
-
-int gdGetInt (int *result, gdIOCtx * ctx)
-{
- int r;
- r = (ctx->getC) (ctx);
- GD_IO_EOF_CHK(r);
- *result = r << 24;
-
- r = (ctx->getC) (ctx);
- GD_IO_EOF_CHK(r);
- *result += r << 16;
-
- r = (ctx->getC) (ctx);
- if (r == EOF) {
- return 0;
- }
- *result += r << 8;
-
- r = (ctx->getC) (ctx);
- GD_IO_EOF_CHK(r);
- *result += r;
-
- return 1;
-}
-
-int gdPutBuf (const void *buf, int size, gdIOCtx * ctx)
-{
- IO_DBG (php_gd_error("Putting buf...\n"));
- return (ctx->putBuf) (ctx, buf, size);
- IO_DBG (php_gd_error("put.\n"));
-}
-
-int gdGetBuf (void *buf, int size, gdIOCtx * ctx)
-{
- return (ctx->getBuf) (ctx, buf, size);
-}
-
-int gdSeek (gdIOCtx * ctx, const int pos)
-{
- IO_DBG (php_gd_error("Seeking...\n"));
- return ((ctx->seek) (ctx, pos));
- IO_DBG (php_gd_error("Done.\n"));
-}
-
-long gdTell (gdIOCtx * ctx)
-{
- IO_DBG (php_gd_error("Telling...\n"));
- return ((ctx->tell) (ctx));
- IO_DBG (php_gd_error ("told.\n"));
-}
diff --git a/ext/gd/libgd/gd_io.h b/ext/gd/libgd/gd_io.h
deleted file mode 100644
index b893751b7b..0000000000
--- a/ext/gd/libgd/gd_io.h
+++ /dev/null
@@ -1,43 +0,0 @@
-#ifndef GD_IO_H
-#define GD_IO_H 1
-
-#include <stdio.h>
-
-#ifdef VMS
-#define Putchar gdPutchar
-#endif
-
-typedef struct gdIOCtx {
- int (*getC)(struct gdIOCtx*);
- int (*getBuf)(struct gdIOCtx*, void*, int);
-
- void (*putC)(struct gdIOCtx*, int);
- int (*putBuf)(struct gdIOCtx*, const void*, int);
-
- int (*seek)(struct gdIOCtx*, const int);
- long (*tell)(struct gdIOCtx*);
-
- void (*gd_free)(struct gdIOCtx*);
-
-} gdIOCtx;
-
-typedef struct gdIOCtx *gdIOCtxPtr;
-
-void Putword(int w, gdIOCtx *ctx);
-void Putchar(int c, gdIOCtx *ctx);
-
-void gdPutC(const unsigned char c, gdIOCtx *ctx);
-int gdPutBuf(const void *, int, gdIOCtx*);
-void gdPutWord(int w, gdIOCtx *ctx);
-void gdPutInt(int w, gdIOCtx *ctx);
-
-int gdGetC(gdIOCtx *ctx);
-int gdGetBuf(void *, int, gdIOCtx*);
-int gdGetByte(int *result, gdIOCtx *ctx);
-int gdGetWord(int *result, gdIOCtx *ctx);
-int gdGetInt(int *result, gdIOCtx *ctx);
-
-int gdSeek(gdIOCtx *ctx, const int);
-long gdTell(gdIOCtx *ctx);
-
-#endif
diff --git a/ext/gd/libgd/gd_io_dp.c b/ext/gd/libgd/gd_io_dp.c
deleted file mode 100644
index bfeb4cb4bb..0000000000
--- a/ext/gd/libgd/gd_io_dp.c
+++ /dev/null
@@ -1,360 +0,0 @@
-/*
- * io_dp.c
- *
- * Implements the dynamic pointer interface.
- *
- * Based on GD.pm code by Lincoln Stein for interfacing to libgd.
- * Added support for reading as well as support for 'tell' and 'seek'.
- *
- * As will all I/O modules, most functions are for local use only (called
- * via function pointers in the I/O context).
- *
- * gdDPExtractData is the exception to this: it will return the pointer to
- * the internal data, and reset the internal storage.
- *
- * Written/Modified 1999, Philip Warner.
- *
- */
-
-#include <math.h>
-#include <string.h>
-#include <stdlib.h>
-#include "gd.h"
-#include "gdhelpers.h"
-
-#define TRUE 1
-#define FALSE 0
-
-/* this is used for creating images in main memory */
-typedef struct dpStruct
-{
- void *data;
- int logicalSize;
- int realSize;
- int dataGood;
- int pos;
- int freeOK;
-} dynamicPtr;
-
-typedef struct dpIOCtx
-{
- gdIOCtx ctx;
- dynamicPtr *dp;
-} dpIOCtx;
-
-typedef struct dpIOCtx *dpIOCtxPtr;
-
-/* these functions operate on in-memory dynamic pointers */
-static int allocDynamic (dynamicPtr * dp, int initialSize, void *data);
-static int appendDynamic (dynamicPtr * dp, const void *src, int size);
-static int gdReallocDynamic (dynamicPtr * dp, int required);
-static int trimDynamic (dynamicPtr * dp);
-static void gdFreeDynamicCtx (struct gdIOCtx *ctx);
-static dynamicPtr *newDynamic (int initialSize, void *data, int freeOKFlag);
-
-static int dynamicPutbuf (struct gdIOCtx *, const void *, int);
-static void dynamicPutchar (struct gdIOCtx *, int a);
-
-static int dynamicGetbuf (gdIOCtxPtr ctx, void *buf, int len);
-static int dynamicGetchar (gdIOCtxPtr ctx);
-
-static int dynamicSeek (struct gdIOCtx *, const int);
-static long dynamicTell (struct gdIOCtx *);
-
-/* return data as a dynamic pointer */
-gdIOCtx * gdNewDynamicCtx (int initialSize, void *data)
-{
- return gdNewDynamicCtxEx(initialSize, data, 1);
-}
-
-gdIOCtx * gdNewDynamicCtxEx (int initialSize, void *data, int freeOKFlag)
-{
- dpIOCtx *ctx;
- dynamicPtr *dp;
-
- ctx = (dpIOCtx *) gdMalloc (sizeof (dpIOCtx));
-
- dp = newDynamic(initialSize, data, freeOKFlag);
-
- ctx->dp = dp;
-
- ctx->ctx.getC = dynamicGetchar;
- ctx->ctx.putC = dynamicPutchar;
-
- ctx->ctx.getBuf = dynamicGetbuf;
- ctx->ctx.putBuf = dynamicPutbuf;
-
- ctx->ctx.seek = dynamicSeek;
- ctx->ctx.tell = dynamicTell;
-
- ctx->ctx.gd_free = gdFreeDynamicCtx;
-
- return (gdIOCtx *) ctx;
-}
-
-void * gdDPExtractData (struct gdIOCtx *ctx, int *size)
-{
- dynamicPtr *dp;
- dpIOCtx *dctx;
- void *data;
-
- dctx = (dpIOCtx *) ctx;
- dp = dctx->dp;
-
- /* clean up the data block and return it */
- if (dp->dataGood) {
- trimDynamic (dp);
- *size = dp->logicalSize;
- data = dp->data;
- } else {
- *size = 0;
- data = NULL;
- if (dp->data != NULL && dp->freeOK) {
- gdFree(dp->data);
- }
- }
-
- dp->data = NULL;
- dp->realSize = 0;
- dp->logicalSize = 0;
-
- return data;
-}
-
-static void gdFreeDynamicCtx (struct gdIOCtx *ctx)
-{
- dynamicPtr *dp;
- dpIOCtx *dctx;
-
- dctx = (dpIOCtx *) ctx;
- dp = dctx->dp;
-
- gdFree(ctx);
-
- dp->realSize = 0;
- dp->logicalSize = 0;
-
- gdFree(dp);
-}
-
-static long dynamicTell (struct gdIOCtx *ctx)
-{
- dpIOCtx *dctx;
-
- dctx = (dpIOCtx *) ctx;
-
- return (dctx->dp->pos);
-}
-
-static int dynamicSeek (struct gdIOCtx *ctx, const int pos)
-{
- int bytesNeeded;
- dynamicPtr *dp;
- dpIOCtx *dctx;
-
- dctx = (dpIOCtx *) ctx;
- dp = dctx->dp;
-
- if (!dp->dataGood) {
- return FALSE;
- }
-
- bytesNeeded = pos;
- if (bytesNeeded > dp->realSize) {
- /* 2.0.21 */
- if (!dp->freeOK) {
- return FALSE;
- }
- gdReallocDynamic (dp, dp->realSize * 2);
- }
-
- /* if we get here, we can be sure that we have enough bytes to copy safely */
-
- /* Extend the logical size if we seek beyond EOF. */
- if (pos > dp->logicalSize) {
- dp->logicalSize = pos;
- }
-
- dp->pos = pos;
-
- return TRUE;
-}
-
-/* return data as a dynamic pointer */
-static dynamicPtr * newDynamic (int initialSize, void *data, int freeOKFlag)
-{
- dynamicPtr *dp;
- dp = (dynamicPtr *) gdMalloc (sizeof (dynamicPtr));
-
- allocDynamic (dp, initialSize, data);
-
- dp->pos = 0;
- dp->freeOK = freeOKFlag;
-
- return dp;
-}
-
-static int
-dynamicPutbuf (struct gdIOCtx *ctx, const void *buf, int size)
-{
- dpIOCtx *dctx;
- dctx = (dpIOCtx *) ctx;
-
- appendDynamic (dctx->dp, buf, size);
-
- if (dctx->dp->dataGood)
- {
- return size;
- }
- else
- {
- return -1;
- };
-
-}
-
-static void dynamicPutchar (struct gdIOCtx *ctx, int a)
-{
- unsigned char b;
- dpIOCtxPtr dctx;
-
- b = a;
- dctx = (dpIOCtxPtr) ctx;
-
- appendDynamic(dctx->dp, &b, 1);
-}
-
-static int dynamicGetbuf (gdIOCtxPtr ctx, void *buf, int len)
-{
- int rlen, remain;
- dpIOCtxPtr dctx;
- dynamicPtr *dp;
-
- dctx = (dpIOCtxPtr) ctx;
- dp = dctx->dp;
-
- remain = dp->logicalSize - dp->pos;
- if (remain >= len) {
- rlen = len;
- } else {
- if (remain == 0) {
- return EOF;
- }
- rlen = remain;
- }
-
- memcpy(buf, (void *) ((char *) dp->data + dp->pos), rlen);
- dp->pos += rlen;
-
- return rlen;
-}
-
-static int dynamicGetchar (gdIOCtxPtr ctx)
-{
- unsigned char b;
- int rv;
-
- rv = dynamicGetbuf (ctx, &b, 1);
- if (rv != 1) {
- return EOF;
- } else {
- return b; /* (b & 0xff); */
- }
-}
-
-/* *********************************************************************
-
- * InitDynamic - Return a dynamically resizable void*
- *
- * *********************************************************************
- */
-static int
-allocDynamic (dynamicPtr * dp, int initialSize, void *data)
-{
-
- if (data == NULL) {
- dp->logicalSize = 0;
- dp->dataGood = FALSE;
- dp->data = gdMalloc(initialSize);
- } else {
- dp->logicalSize = initialSize;
- dp->dataGood = TRUE;
- dp->data = data;
- }
-
- dp->realSize = initialSize;
- dp->dataGood = TRUE;
- dp->pos = 0;
-
- return TRUE;
-}
-
-/* append bytes to the end of a dynamic pointer */
-static int appendDynamic (dynamicPtr * dp, const void *src, int size)
-{
- int bytesNeeded;
- char *tmp;
-
- if (!dp->dataGood) {
- return FALSE;
- }
-
- /* bytesNeeded = dp->logicalSize + size; */
- bytesNeeded = dp->pos + size;
-
- if (bytesNeeded > dp->realSize) {
- /* 2.0.21 */
- if (!dp->freeOK) {
- return FALSE;
- }
- gdReallocDynamic(dp, bytesNeeded * 2);
- }
-
- /* if we get here, we can be sure that we have enough bytes to copy safely */
- /*printf("Mem OK Size: %d, Pos: %d\n", dp->realSize, dp->pos); */
-
- tmp = (char *) dp->data;
- memcpy((void *) (tmp + (dp->pos)), src, size);
- dp->pos += size;
-
- if (dp->pos > dp->logicalSize) {
- dp->logicalSize = dp->pos;
- }
-
- return TRUE;
-}
-
-/* grow (or shrink) dynamic pointer */
-static int gdReallocDynamic (dynamicPtr * dp, int required)
-{
- void *newPtr;
-
- /* First try gdRealloc(). If that doesn't work, make a new memory block and copy. */
- if ((newPtr = gdRealloc(dp->data, required))) {
- dp->realSize = required;
- dp->data = newPtr;
- return TRUE;
- }
-
- /* create a new pointer */
- newPtr = gdMalloc(required);
-
- /* copy the old data into it */
- memcpy(newPtr, dp->data, dp->logicalSize);
- gdFree(dp->data);
- dp->data = newPtr;
-
- dp->realSize = required;
-
- return TRUE;
-}
-
-/* trim pointer so that its real and logical sizes match */
-static int trimDynamic (dynamicPtr * dp)
-{
- /* 2.0.21: we don't reallocate memory we don't own */
- if (!dp->freeOK) {
- return FALSE;
- }
- return gdReallocDynamic(dp, dp->logicalSize);
-}
diff --git a/ext/gd/libgd/gd_io_file.c b/ext/gd/libgd/gd_io_file.c
deleted file mode 100644
index 8318a45969..0000000000
--- a/ext/gd/libgd/gd_io_file.c
+++ /dev/null
@@ -1,128 +0,0 @@
-
-/*
- * io_file.c
- *
- * Implements the file interface.
- *
- * As will all I/O modules, most functions are for local use only (called
- * via function pointers in the I/O context).
- *
- * Most functions are just 'wrappers' for standard file functions.
- *
- * Written/Modified 1999, Philip Warner.
- *
- */
-
-/* For platforms with incomplete ANSI defines. Fortunately,
- SEEK_SET is defined to be zero by the standard. */
-
-#ifndef SEEK_SET
-#define SEEK_SET 0
-#endif /* SEEK_SET */
-
-#include <math.h>
-#include <string.h>
-#include <stdlib.h>
-#include "gd.h"
-#include "gdhelpers.h"
-
-/* this is used for creating images in main memory */
-
-typedef struct fileIOCtx
-{
- gdIOCtx ctx;
- FILE *f;
-} fileIOCtx;
-
-gdIOCtx *newFileCtx (FILE * f);
-
-static int fileGetbuf (gdIOCtx *, void *, int);
-static int filePutbuf (gdIOCtx *, const void *, int);
-static void filePutchar (gdIOCtx *, int);
-static int fileGetchar (gdIOCtx * ctx);
-
-static int fileSeek (struct gdIOCtx *, const int);
-static long fileTell (struct gdIOCtx *);
-static void gdFreeFileCtx (gdIOCtx * ctx);
-
-/* return data as a dynamic pointer */
-gdIOCtx * gdNewFileCtx (FILE * f)
-{
- fileIOCtx *ctx;
-
- ctx = (fileIOCtx *) gdMalloc(sizeof (fileIOCtx));
-
- ctx->f = f;
-
- ctx->ctx.getC = fileGetchar;
- ctx->ctx.putC = filePutchar;
-
- ctx->ctx.getBuf = fileGetbuf;
- ctx->ctx.putBuf = filePutbuf;
-
- ctx->ctx.tell = fileTell;
- ctx->ctx.seek = fileSeek;
-
- ctx->ctx.gd_free = gdFreeFileCtx;
-
- return (gdIOCtx *) ctx;
-}
-
-static void gdFreeFileCtx (gdIOCtx * ctx)
-{
- gdFree(ctx);
-}
-
-
-static int filePutbuf (gdIOCtx * ctx, const void *buf, int size)
-{
- fileIOCtx *fctx;
- fctx = (fileIOCtx *) ctx;
-
- return fwrite(buf, 1, size, fctx->f);
-
-}
-
-static int fileGetbuf (gdIOCtx * ctx, void *buf, int size)
-{
- fileIOCtx *fctx;
- fctx = (fileIOCtx *) ctx;
-
- return fread(buf, 1, size, fctx->f);
-}
-
-static void filePutchar (gdIOCtx * ctx, int a)
-{
- unsigned char b;
- fileIOCtx *fctx;
- fctx = (fileIOCtx *) ctx;
-
- b = a;
-
- putc (b, fctx->f);
-}
-
-static int fileGetchar (gdIOCtx * ctx)
-{
- fileIOCtx *fctx;
- fctx = (fileIOCtx *) ctx;
-
- return getc (fctx->f);
-}
-
-
-static int fileSeek (struct gdIOCtx *ctx, const int pos)
-{
- fileIOCtx *fctx;
- fctx = (fileIOCtx *) ctx;
-
- return (fseek (fctx->f, pos, SEEK_SET) == 0);
-}
-
-static long fileTell (struct gdIOCtx *ctx)
-{
- fileIOCtx *fctx;
- fctx = (fileIOCtx *) ctx;
-
- return ftell (fctx->f);
-}
diff --git a/ext/gd/libgd/gd_io_ss.c b/ext/gd/libgd/gd_io_ss.c
deleted file mode 100644
index 0275cdc403..0000000000
--- a/ext/gd/libgd/gd_io_ss.c
+++ /dev/null
@@ -1,138 +0,0 @@
-
-/*
- * io_ss.c
- *
- * Implements the Source/Sink interface.
- *
- * As will all I/O modules, most functions are for local use only (called
- * via function pointers in the I/O context).
- *
- * The Source/Sink model is the primary 'user' interface for alternate data
- * sources; the IOCtx interface is intended (at least in version 1.5) to be
- * used internally until it settles down a bit.
- *
- * This module just layers the Source/Sink interface on top of the IOCtx; no
- * support is provided for tell/seek, so GD2 writing is not possible, and
- * retrieving parts of GD2 files is also not possible.
- *
- * A new SS context does not need to be created with both a Source and a Sink.
- *
- * Written/Modified 1999, Philip Warner.
- *
- */
-
-#include <math.h>
-#include <string.h>
-#include <stdlib.h>
-#include "gd.h"
-#include "gdhelpers.h"
-
-/* this is used for creating images in main memory */
-
-typedef struct ssIOCtx
-{
- gdIOCtx ctx;
- gdSourcePtr src;
- gdSinkPtr snk;
-} ssIOCtx;
-
-typedef struct ssIOCtx *ssIOCtxPtr;
-
-gdIOCtx *gdNewSSCtx (gdSourcePtr src, gdSinkPtr snk);
-
-static int sourceGetbuf (gdIOCtx *, void *, int);
-static int sourceGetchar (gdIOCtx * ctx);
-static int sinkPutbuf (gdIOCtx * ctx, const void *buf, int size);
-static void sinkPutchar (gdIOCtx * ctx, int a);
-static void gdFreeSsCtx (gdIOCtx * ctx);
-
-/* return data as a dynamic pointer */
-gdIOCtx * gdNewSSCtx (gdSourcePtr src, gdSinkPtr snk)
-{
- ssIOCtxPtr ctx;
-
- ctx = (ssIOCtxPtr) gdMalloc (sizeof (ssIOCtx));
-
- ctx->src = src;
- ctx->snk = snk;
-
- ctx->ctx.getC = sourceGetchar;
- ctx->ctx.getBuf = sourceGetbuf;
-
- ctx->ctx.putC = sinkPutchar;
- ctx->ctx.putBuf = sinkPutbuf;
-
- ctx->ctx.tell = NULL;
- ctx->ctx.seek = NULL;
-
- ctx->ctx.gd_free = gdFreeSsCtx;
-
- return (gdIOCtx *) ctx;
-}
-
-static void gdFreeSsCtx (gdIOCtx * ctx)
-{
- gdFree(ctx);
-}
-
-
-static int sourceGetbuf (gdIOCtx * ctx, void *buf, int size)
-{
- ssIOCtx *lctx;
- int res;
-
- lctx = (ssIOCtx *) ctx;
-
- res = ((lctx->src->source) (lctx->src->context, buf, size));
-
- /*
- * Translate the return values from the Source object:
- * 0 is EOF, -1 is error
- */
-
- if (res == 0) {
- return EOF;
- } else if (res < 0) {
- return 0;
- } else {
- return res;
- }
-}
-
-static int sourceGetchar (gdIOCtx * ctx)
-{
- int res;
- unsigned char buf;
-
- res = sourceGetbuf (ctx, &buf, 1);
-
- if (res == 1) {
- return buf;
- } else {
- return EOF;
- }
-}
-
-static int sinkPutbuf (gdIOCtx * ctx, const void *buf, int size)
-{
- ssIOCtxPtr lctx;
- int res;
-
- lctx = (ssIOCtx *) ctx;
-
- res = (lctx->snk->sink) (lctx->snk->context, buf, size);
-
- if (res <= 0) {
- return 0;
- } else {
- return res;
- }
-}
-
-static void sinkPutchar (gdIOCtx * ctx, int a)
-{
- unsigned char b;
-
- b = a;
- sinkPutbuf (ctx, &b, 1);
-}
diff --git a/ext/gd/libgd/gd_jpeg.c b/ext/gd/libgd/gd_jpeg.c
deleted file mode 100644
index 26332279ae..0000000000
--- a/ext/gd/libgd/gd_jpeg.c
+++ /dev/null
@@ -1,763 +0,0 @@
-/*
- * gd_jpeg.c: Read and write JPEG (JFIF) format image files using the
- * gd graphics library (http://www.boutell.com/gd/).
- *
- * This software is based in part on the work of the Independent JPEG
- * Group. For more information on the IJG JPEG software (and JPEG
- * documentation, etc.), see ftp://ftp.uu.net/graphics/jpeg/.
- *
- * NOTE: IJG 12-bit JSAMPLE (BITS_IN_JSAMPLE == 12) mode is not
- * supported at all on read in gd 2.0, and is not supported on write
- * except for palette images, which is sort of pointless (TBB). Even that
- * has never been tested according to DB.
- *
- * Copyright 2000 Doug Becker, mailto:thebeckers@home.com
- *
- * Modification 4/18/00 TBB: JPEG_DEBUG rather than just DEBUG,
- * so VC++ builds don't spew to standard output, causing
- * major CGI brain damage
- *
- * 2.0.10: more efficient gdImageCreateFromJpegCtx, thanks to
- * Christian Aberger
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <setjmp.h>
-#include <limits.h>
-#include <string.h>
-
-#include "gd.h"
-/* TBB: move this up so include files are not brought in */
-/* JCE: arrange HAVE_LIBJPEG so that it can be set in gd.h */
-#ifdef HAVE_LIBJPEG
-#include "gdhelpers.h"
-#undef HAVE_STDLIB_H
-
-/* 1.8.1: remove dependency on jinclude.h */
-#include "jpeglib.h"
-#include "jerror.h"
-
-static const char *const GD_JPEG_VERSION = "1.0";
-
-typedef struct _jmpbuf_wrapper
-{
- jmp_buf jmpbuf;
-} jmpbuf_wrapper;
-
-/* Called by the IJG JPEG library upon encountering a fatal error */
-static void fatal_jpeg_error (j_common_ptr cinfo)
-{
- jmpbuf_wrapper *jmpbufw;
-
- php_gd_error("gd-jpeg: JPEG library reports unrecoverable error: ");
- (*cinfo->err->output_message) (cinfo);
-
- jmpbufw = (jmpbuf_wrapper *) cinfo->client_data;
- jpeg_destroy (cinfo);
-
- if (jmpbufw != 0) {
- longjmp (jmpbufw->jmpbuf, 1);
- php_gd_error_ex(E_ERROR, "gd-jpeg: EXTREMELY fatal error: longjmp returned control; terminating");
- } else {
- php_gd_error_ex(E_ERROR, "gd-jpeg: EXTREMELY fatal error: jmpbuf unrecoverable; terminating");
- }
-
- exit (99);
-}
-
-/*
- * Write IM to OUTFILE as a JFIF-formatted JPEG image, using quality
- * QUALITY. If QUALITY is in the range 0-100, increasing values
- * represent higher quality but also larger image size. If QUALITY is
- * negative, the IJG JPEG library's default quality is used (which
- * should be near optimal for many applications). See the IJG JPEG
- * library documentation for more details.
- */
-
-void gdImageJpeg (gdImagePtr im, FILE * outFile, int quality)
-{
- gdIOCtx *out = gdNewFileCtx (outFile);
- gdImageJpegCtx (im, out, quality);
- out->gd_free (out);
-}
-
-void *gdImageJpegPtr (gdImagePtr im, int *size, int quality)
-{
- void *rv;
- gdIOCtx *out = gdNewDynamicCtx (2048, NULL);
- gdImageJpegCtx (im, out, quality);
- rv = gdDPExtractData (out, size);
- out->gd_free (out);
-
- return rv;
-}
-
-void jpeg_gdIOCtx_dest (j_compress_ptr cinfo, gdIOCtx * outfile);
-
-void gdImageJpegCtx (gdImagePtr im, gdIOCtx * outfile, int quality)
-{
- struct jpeg_compress_struct cinfo;
- struct jpeg_error_mgr jerr;
- int i, j, jidx;
- /* volatile so we can gdFree it on return from longjmp */
- volatile JSAMPROW row = 0;
- JSAMPROW rowptr[1];
- jmpbuf_wrapper jmpbufw;
- JDIMENSION nlines;
- char comment[255];
-
- memset (&cinfo, 0, sizeof (cinfo));
- memset (&jerr, 0, sizeof (jerr));
-
- cinfo.err = jpeg_std_error (&jerr);
- cinfo.client_data = &jmpbufw;
- if (setjmp (jmpbufw.jmpbuf) != 0) {
- /* we're here courtesy of longjmp */
- if (row) {
- gdFree (row);
- }
- return;
- }
-
- cinfo.err->error_exit = fatal_jpeg_error;
-
- jpeg_create_compress (&cinfo);
-
- cinfo.image_width = im->sx;
- cinfo.image_height = im->sy;
- cinfo.input_components = 3; /* # of color components per pixel */
- cinfo.in_color_space = JCS_RGB; /* colorspace of input image */
- jpeg_set_defaults (&cinfo);
- if (quality >= 0) {
- jpeg_set_quality (&cinfo, quality, TRUE);
- }
-
- /* If user requests interlace, translate that to progressive JPEG */
- if (gdImageGetInterlaced (im)) {
- jpeg_simple_progression (&cinfo);
- }
-
- jpeg_gdIOCtx_dest (&cinfo, outfile);
-
- row = (JSAMPROW) safe_emalloc(cinfo.image_width * cinfo.input_components, sizeof(JSAMPLE), 0);
- memset(row, 0, cinfo.image_width * cinfo.input_components * sizeof(JSAMPLE));
- rowptr[0] = row;
-
- jpeg_start_compress (&cinfo, TRUE);
-
- if (quality >= 0) {
- snprintf(comment, sizeof(comment)-1, "CREATOR: gd-jpeg v%s (using IJG JPEG v%d), quality = %d\n", GD_JPEG_VERSION, JPEG_LIB_VERSION, quality);
- } else {
- snprintf(comment, sizeof(comment)-1, "CREATOR: gd-jpeg v%s (using IJG JPEG v%d), default quality\n", GD_JPEG_VERSION, JPEG_LIB_VERSION);
- }
- jpeg_write_marker (&cinfo, JPEG_COM, (unsigned char *) comment, (unsigned int) strlen (comment));
- if (im->trueColor) {
-
-#if BITS_IN_JSAMPLE == 12
- php_gd_error("gd-jpeg: error: jpeg library was compiled for 12-bit precision. This is mostly useless, because JPEGs on the web are 8-bit and such versions of the jpeg library won't read or write them. GD doesn't support these unusual images. Edit your jmorecfg.h file to specify the correct precision and completely 'make clean' and 'make install' libjpeg again. Sorry");
- goto error;
-#endif /* BITS_IN_JSAMPLE == 12 */
-
- for (i = 0; i < im->sy; i++) {
- for (jidx = 0, j = 0; j < im->sx; j++) {
- int val = im->tpixels[i][j];
-
- row[jidx++] = gdTrueColorGetRed (val);
- row[jidx++] = gdTrueColorGetGreen (val);
- row[jidx++] = gdTrueColorGetBlue (val);
- }
-
- nlines = jpeg_write_scanlines (&cinfo, rowptr, 1);
- if (nlines != 1) {
- php_gd_error_ex(E_WARNING, "gd_jpeg: warning: jpeg_write_scanlines returns %u -- expected 1\n", nlines);
- }
- }
- } else {
- for (i = 0; i < im->sy; i++) {
- for (jidx = 0, j = 0; j < im->sx; j++) {
- int idx = im->pixels[i][j];
-
- /* NB: Although gd RGB values are ints, their max value is
- * 255 (see the documentation for gdImageColorAllocate())
- * -- perfect for 8-bit JPEG encoding (which is the norm)
- */
-#if BITS_IN_JSAMPLE == 8
- row[jidx++] = im->red[idx];
- row[jidx++] = im->green[idx];
- row[jidx++] = im->blue[idx];
-#elif BITS_IN_JSAMPLE == 12
- row[jidx++] = im->red[idx] << 4;
- row[jidx++] = im->green[idx] << 4;
- row[jidx++] = im->blue[idx] << 4;
-#else
-#error IJG JPEG library BITS_IN_JSAMPLE value must be 8 or 12
-#endif
- }
-
- nlines = jpeg_write_scanlines (&cinfo, rowptr, 1);
- if (nlines != 1) {
- php_gd_error_ex(E_WARNING, "gd_jpeg: warning: jpeg_write_scanlines returns %u -- expected 1\n", nlines);
- }
- }
- }
-
- jpeg_finish_compress (&cinfo);
- jpeg_destroy_compress (&cinfo);
- gdFree (row);
-}
-
-gdImagePtr gdImageCreateFromJpeg (FILE * inFile)
-{
- gdImagePtr im;
- gdIOCtx *in = gdNewFileCtx(inFile);
- im = gdImageCreateFromJpegCtx(in);
- in->gd_free (in);
-
- return im;
-}
-
-gdImagePtr gdImageCreateFromJpegPtr (int size, void *data)
-{
- gdImagePtr im;
- gdIOCtx *in = gdNewDynamicCtxEx(size, data, 0);
- im = gdImageCreateFromJpegCtx(in);
- in->gd_free(in);
-
- return im;
-}
-
-void jpeg_gdIOCtx_src (j_decompress_ptr cinfo, gdIOCtx * infile);
-
-static int CMYKToRGB(int c, int m, int y, int k, int inverted);
-
-/*
- * Create a gd-format image from the JPEG-format INFILE. Returns the
- * image, or NULL upon error.
- */
-gdImagePtr gdImageCreateFromJpegCtx (gdIOCtx * infile)
-{
- struct jpeg_decompress_struct cinfo;
- struct jpeg_error_mgr jerr;
- jmpbuf_wrapper jmpbufw;
- /* volatile so we can gdFree them after longjmp */
- volatile JSAMPROW row = 0;
- volatile gdImagePtr im = 0;
- JSAMPROW rowptr[1];
- unsigned int i, j;
- int retval;
- JDIMENSION nrows;
- int channels = 3;
- int inverted = 0;
-
- memset (&cinfo, 0, sizeof (cinfo));
- memset (&jerr, 0, sizeof (jerr));
-
- cinfo.err = jpeg_std_error (&jerr);
- cinfo.client_data = &jmpbufw;
- if (setjmp (jmpbufw.jmpbuf) != 0) {
- /* we're here courtesy of longjmp */
- if (row) {
- gdFree (row);
- }
- if (im) {
- gdImageDestroy (im);
- }
- return 0;
- }
-
- cinfo.err->error_exit = fatal_jpeg_error;
-
- jpeg_create_decompress (&cinfo);
-
- jpeg_gdIOCtx_src (&cinfo, infile);
-
- /* 2.0.22: save the APP14 marker to check for Adobe Photoshop CMYK files with inverted components. */
- jpeg_save_markers(&cinfo, JPEG_APP0 + 14, 256);
-
- retval = jpeg_read_header (&cinfo, TRUE);
- if (retval != JPEG_HEADER_OK) {
- php_gd_error_ex(E_WARNING, "gd-jpeg: warning: jpeg_read_header returned %d, expected %d", retval, JPEG_HEADER_OK);
- }
-
- if (cinfo.image_height > INT_MAX) {
- php_gd_error_ex(E_WARNING, "gd-jpeg: warning: JPEG image height (%u) is greater than INT_MAX (%d) (and thus greater than gd can handle)", cinfo.image_height, INT_MAX);
- }
-
- if (cinfo.image_width > INT_MAX) {
- php_gd_error_ex(E_WARNING, "gd-jpeg: warning: JPEG image width (%u) is greater than INT_MAX (%d) (and thus greater than gd can handle)", cinfo.image_width, INT_MAX);
- }
-
- im = gdImageCreateTrueColor ((int) cinfo.image_width, (int) cinfo.image_height);
- if (im == 0) {
- php_gd_error("gd-jpeg error: cannot allocate gdImage struct");
- goto error;
- }
-
- /* 2.0.22: very basic support for reading CMYK colorspace files. Nice for
- * thumbnails but there's no support for fussy adjustment of the
- * assumed properties of inks and paper. */
- if ((cinfo.jpeg_color_space == JCS_CMYK) || (cinfo.jpeg_color_space == JCS_YCCK)) {
- cinfo.out_color_space = JCS_CMYK;
- } else {
- cinfo.out_color_space = JCS_RGB;
- }
-
- if (jpeg_start_decompress (&cinfo) != TRUE) {
- php_gd_error("gd-jpeg: warning: jpeg_start_decompress reports suspended data source");
- }
-
- /* REMOVED by TBB 2/12/01. This field of the structure is
- * documented as private, and sure enough it's gone in the
- * latest libjpeg, replaced by something else. Unfortunately
- * there is still no right way to find out if the file was
- * progressive or not; just declare your intent before you
- * write one by calling gdImageInterlace(im, 1) yourself.
- * After all, we're not really supposed to rework JPEGs and
- * write them out again anyway. Lossy compression, remember?
- */
-#if 0
- gdImageInterlace (im, cinfo.progressive_mode != 0);
-#endif
-
- if (cinfo.out_color_space == JCS_RGB) {
- if (cinfo.output_components != 3) {
- php_gd_error_ex(E_WARNING, "gd-jpeg: error: JPEG color quantization request resulted in output_components == %d (expected 3 for RGB)", cinfo.output_components);
- goto error;
- }
- channels = 3;
- } else if (cinfo.out_color_space == JCS_CMYK) {
- jpeg_saved_marker_ptr marker;
- if (cinfo.output_components != 4) {
- php_gd_error_ex(E_WARNING, "gd-jpeg: error: JPEG color quantization request resulted in output_components == %d (expected 4 for CMYK)", cinfo.output_components);
- goto error;
- }
- channels = 4;
- marker = cinfo.marker_list;
- while (marker) {
- if ((marker->marker == (JPEG_APP0 + 14)) && (marker->data_length >= 12) && (!strncmp((const char *) marker->data, "Adobe", 5))) {
- inverted = 1;
- break;
- }
- marker = marker->next;
- }
- } else {
- php_gd_error_ex(E_WARNING, "gd-jpeg: error: unexpected colorspace.");
- goto error;
- }
-
-#if BITS_IN_JSAMPLE == 12
- php_gd_error("gd-jpeg: error: jpeg library was compiled for 12-bit precision. This is mostly useless, because JPEGs on the web are 8-bit and such versions of the jpeg library won't read or write them. GD doesn't support these unusual images. Edit your jmorecfg.h file to specify the correct precision and completely 'make clean' and 'make install' libjpeg again. Sorry.");
- goto error;
-#endif /* BITS_IN_JSAMPLE == 12 */
-
- row = safe_emalloc(cinfo.output_width * channels, sizeof(JSAMPLE), 0);
- memset(row, 0, cinfo.output_width * channels * sizeof(JSAMPLE));
- rowptr[0] = row;
-
- if (cinfo.out_color_space == JCS_CMYK) {
- for (i = 0; i < cinfo.output_height; i++) {
- register JSAMPROW currow = row;
- register int *tpix = im->tpixels[i];
- nrows = jpeg_read_scanlines (&cinfo, rowptr, 1);
- if (nrows != 1) {
- php_gd_error_ex(E_WARNING, "gd-jpeg: error: jpeg_read_scanlines returns %u, expected 1", nrows);
- goto error;
- }
- for (j = 0; j < cinfo.output_width; j++, currow += 4, tpix++) {
- *tpix = CMYKToRGB (currow[0], currow[1], currow[2], currow[3], inverted);
- }
- }
- } else {
- for (i = 0; i < cinfo.output_height; i++) {
- register JSAMPROW currow = row;
- register int *tpix = im->tpixels[i];
- nrows = jpeg_read_scanlines (&cinfo, rowptr, 1);
- if (nrows != 1) {
- php_gd_error_ex(E_WARNING, "gd-jpeg: error: jpeg_read_scanlines returns %u, expected 1", nrows);
- goto error;
- }
- for (j = 0; j < cinfo.output_width; j++, currow += 3, tpix++) {
- *tpix = gdTrueColor (currow[0], currow[1], currow[2]);
- }
- }
- }
-
- if (jpeg_finish_decompress (&cinfo) != TRUE) {
- php_gd_error("gd-jpeg: warning: jpeg_finish_decompress reports suspended data source");
- }
-
- /* Thanks to Truxton Fulton */
- if (cinfo.err->num_warnings > 0) {
- goto error;
- }
-
- jpeg_destroy_decompress (&cinfo);
- gdFree (row);
-
- return im;
-
-error:
- jpeg_destroy_decompress (&cinfo);
- if (row) {
- gdFree (row);
- }
- if (im) {
- gdImageDestroy (im);
- }
- return 0;
-}
-
-/* A very basic conversion approach, TBB */
-static int CMYKToRGB(int c, int m, int y, int k, int inverted)
-{
- if (inverted) {
- c = 255 - c;
- m = 255 - m;
- y = 255 - y;
- k = 255 - k;
- }
- return gdTrueColor((255 - c) * (255 - k) / 255, (255 - m) * (255 - k) / 255, (255 - y) * (255 - k) / 255);
-}
-
-/*
- * gdIOCtx JPEG data sources and sinks, T. Boutell
- * almost a simple global replace from T. Lane's stdio versions.
- *
- */
-
-/* Different versions of libjpeg use either 'jboolean' or 'boolean', and
- some platforms define 'boolean', and so forth. Deal with this
- madness by typedeffing 'safeboolean' to 'boolean' if HAVE_BOOLEAN
- is already set, because this is the test that libjpeg uses.
- Otherwise, typedef it to int, because that's what libjpeg does
- if HAVE_BOOLEAN is not defined. -TBB */
-
-#ifdef HAVE_BOOLEAN
-typedef boolean safeboolean;
-#else
-typedef int safeboolean;
-#endif /* HAVE_BOOLEAN */
-
-/* Expanded data source object for gdIOCtx input */
-
-typedef struct
-{
- struct jpeg_source_mgr pub; /* public fields */
-
- gdIOCtx *infile; /* source stream */
- unsigned char *buffer; /* start of buffer */
- safeboolean start_of_file; /* have we gotten any data yet? */
-} my_source_mgr;
-
-typedef my_source_mgr *my_src_ptr;
-
-#define INPUT_BUF_SIZE 4096 /* choose an efficiently fread'able size */
-
-/*
- * Initialize source --- called by jpeg_read_header
- * before any data is actually read.
- */
-
-void init_source (j_decompress_ptr cinfo)
-{
- my_src_ptr src = (my_src_ptr) cinfo->src;
-
- /* We reset the empty-input-file flag for each image,
- * but we don't clear the input buffer.
- * This is correct behavior for reading a series of images from one source.
- */
- src->start_of_file = TRUE;
-}
-
-
-/*
- * Fill the input buffer --- called whenever buffer is emptied.
- *
- * In typical applications, this should read fresh data into the buffer
- * (ignoring the current state of next_input_byte & bytes_in_buffer),
- * reset the pointer & count to the start of the buffer, and return TRUE
- * indicating that the buffer has been reloaded. It is not necessary to
- * fill the buffer entirely, only to obtain at least one more byte.
- *
- * There is no such thing as an EOF return. If the end of the file has been
- * reached, the routine has a choice of ERREXIT() or inserting fake data into
- * the buffer. In most cases, generating a warning message and inserting a
- * fake EOI marker is the best course of action --- this will allow the
- * decompressor to output however much of the image is there. However,
- * the resulting error message is misleading if the real problem is an empty
- * input file, so we handle that case specially.
- *
- * In applications that need to be able to suspend compression due to input
- * not being available yet, a FALSE return indicates that no more data can be
- * obtained right now, but more may be forthcoming later. In this situation,
- * the decompressor will return to its caller (with an indication of the
- * number of scanlines it has read, if any). The application should resume
- * decompression after it has loaded more data into the input buffer. Note
- * that there are substantial restrictions on the use of suspension --- see
- * the documentation.
- *
- * When suspending, the decompressor will back up to a convenient restart point
- * (typically the start of the current MCU). next_input_byte & bytes_in_buffer
- * indicate where the restart point will be if the current call returns FALSE.
- * Data beyond this point must be rescanned after resumption, so move it to
- * the front of the buffer rather than discarding it.
- */
-
-#define END_JPEG_SEQUENCE "\r\n[*]--:END JPEG:--[*]\r\n"
-
-safeboolean fill_input_buffer (j_decompress_ptr cinfo)
-{
- my_src_ptr src = (my_src_ptr) cinfo->src;
- /* 2.0.12: signed size. Thanks to Geert Jansen */
- ssize_t nbytes = 0;
-
- /* ssize_t got; */
- /* char *s; */
- memset(src->buffer, 0, INPUT_BUF_SIZE);
-
- while (nbytes < INPUT_BUF_SIZE) {
- int got = gdGetBuf(src->buffer + nbytes, INPUT_BUF_SIZE - nbytes, src->infile);
-
- if (got == EOF || got == 0) {
- /* EOF or error. If we got any data, don't worry about it. If we didn't, then this is unexpected. */
- if (!nbytes) {
- nbytes = -1;
- }
- break;
- }
- nbytes += got;
- }
-
- if (nbytes <= 0) {
- if (src->start_of_file) { /* Treat empty input file as fatal error */
- ERREXIT (cinfo, JERR_INPUT_EMPTY);
- }
- WARNMS (cinfo, JWRN_JPEG_EOF);
- /* Insert a fake EOI marker */
- src->buffer[0] = (unsigned char) 0xFF;
- src->buffer[1] = (unsigned char) JPEG_EOI;
- nbytes = 2;
- }
-
- src->pub.next_input_byte = src->buffer;
- src->pub.bytes_in_buffer = nbytes;
- src->start_of_file = FALSE;
-
- return TRUE;
-}
-
-
-/*
- * Skip data --- used to skip over a potentially large amount of
- * uninteresting data (such as an APPn marker).
- *
- * Writers of suspendable-input applications must note that skip_input_data
- * is not granted the right to give a suspension return. If the skip extends
- * beyond the data currently in the buffer, the buffer can be marked empty so
- * that the next read will cause a fill_input_buffer call that can suspend.
- * Arranging for additional bytes to be discarded before reloading the input
- * buffer is the application writer's problem.
- */
-
-void skip_input_data (j_decompress_ptr cinfo, long num_bytes)
-{
- my_src_ptr src = (my_src_ptr) cinfo->src;
-
- /* Just a dumb implementation for now. Not clear that being smart is worth
- * any trouble anyway --- large skips are infrequent.
- */
- if (num_bytes > 0) {
- while (num_bytes > (long) src->pub.bytes_in_buffer) {
- num_bytes -= (long) src->pub.bytes_in_buffer;
- (void) fill_input_buffer (cinfo);
- /* note we assume that fill_input_buffer will never return FALSE,
- * so suspension need not be handled.
- */
- }
- src->pub.next_input_byte += (size_t) num_bytes;
- src->pub.bytes_in_buffer -= (size_t) num_bytes;
- }
-}
-
-
-/*
- * An additional method that can be provided by data source modules is the
- * resync_to_restart method for error recovery in the presence of RST markers.
- * For the moment, this source module just uses the default resync method
- * provided by the JPEG library. That method assumes that no backtracking
- * is possible.
- */
-
-
-/*
- * Terminate source --- called by jpeg_finish_decompress
- * after all data has been read. Often a no-op.
- *
- * NB: *not* called by jpeg_abort or jpeg_destroy; surrounding
- * application must deal with any cleanup that should happen even
- * for error exit.
- */
-
-void term_source (j_decompress_ptr cinfo)
-{
-#if 0
- * never used */
- my_src_ptr src = (my_src_ptr) cinfo->src;
-#endif
-}
-
-
-/*
- * Prepare for input from a gdIOCtx stream.
- * The caller must have already opened the stream, and is responsible
- * for closing it after finishing decompression.
- */
-
-void jpeg_gdIOCtx_src (j_decompress_ptr cinfo, gdIOCtx * infile)
-{
- my_src_ptr src;
-
- /* The source object and input buffer are made permanent so that a series
- * of JPEG images can be read from the same file by calling jpeg_gdIOCtx_src
- * only before the first one. (If we discarded the buffer at the end of
- * one image, we'd likely lose the start of the next one.)
- * This makes it unsafe to use this manager and a different source
- * manager serially with the same JPEG object. Caveat programmer.
- */
- if (cinfo->src == NULL) { /* first time for this JPEG object? */
- cinfo->src = (struct jpeg_source_mgr *)
- (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_PERMANENT, sizeof (my_source_mgr));
- src = (my_src_ptr) cinfo->src;
- src->buffer = (unsigned char *) (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_PERMANENT, INPUT_BUF_SIZE * sizeof (unsigned char));
-
- }
-
- src = (my_src_ptr) cinfo->src;
- src->pub.init_source = init_source;
- src->pub.fill_input_buffer = fill_input_buffer;
- src->pub.skip_input_data = skip_input_data;
- src->pub.resync_to_restart = jpeg_resync_to_restart; /* use default method */
- src->pub.term_source = term_source;
- src->infile = infile;
- src->pub.bytes_in_buffer = 0; /* forces fill_input_buffer on first read */
- src->pub.next_input_byte = NULL; /* until buffer loaded */
-}
-
-/* Expanded data destination object for stdio output */
-
-typedef struct
-{
- struct jpeg_destination_mgr pub; /* public fields */
- gdIOCtx *outfile; /* target stream */
- unsigned char *buffer; /* start of buffer */
-} my_destination_mgr;
-
-typedef my_destination_mgr *my_dest_ptr;
-
-#define OUTPUT_BUF_SIZE 4096 /* choose an efficiently fwrite'able size */
-
-/*
- * Initialize destination --- called by jpeg_start_compress
- * before any data is actually written.
- */
-
-void init_destination (j_compress_ptr cinfo)
-{
- my_dest_ptr dest = (my_dest_ptr) cinfo->dest;
-
- /* Allocate the output buffer --- it will be released when done with image */
- dest->buffer = (unsigned char *) (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, OUTPUT_BUF_SIZE * sizeof (unsigned char));
-
- dest->pub.next_output_byte = dest->buffer;
- dest->pub.free_in_buffer = OUTPUT_BUF_SIZE;
-}
-
-
-/*
- * Empty the output buffer --- called whenever buffer fills up.
- *
- * In typical applications, this should write the entire output buffer
- * (ignoring the current state of next_output_byte & free_in_buffer),
- * reset the pointer & count to the start of the buffer, and return TRUE
- * indicating that the buffer has been dumped.
- *
- * In applications that need to be able to suspend compression due to output
- * overrun, a FALSE return indicates that the buffer cannot be emptied now.
- * In this situation, the compressor will return to its caller (possibly with
- * an indication that it has not accepted all the supplied scanlines). The
- * application should resume compression after it has made more room in the
- * output buffer. Note that there are substantial restrictions on the use of
- * suspension --- see the documentation.
- *
- * When suspending, the compressor will back up to a convenient restart point
- * (typically the start of the current MCU). next_output_byte & free_in_buffer
- * indicate where the restart point will be if the current call returns FALSE.
- * Data beyond this point will be regenerated after resumption, so do not
- * write it out when emptying the buffer externally.
- */
-
-safeboolean empty_output_buffer (j_compress_ptr cinfo)
-{
- my_dest_ptr dest = (my_dest_ptr) cinfo->dest;
-
- if (gdPutBuf (dest->buffer, OUTPUT_BUF_SIZE, dest->outfile) != (size_t) OUTPUT_BUF_SIZE) {
- ERREXIT (cinfo, JERR_FILE_WRITE);
- }
-
- dest->pub.next_output_byte = dest->buffer;
- dest->pub.free_in_buffer = OUTPUT_BUF_SIZE;
-
- return TRUE;
-}
-
-
-/*
- * Terminate destination --- called by jpeg_finish_compress
- * after all data has been written. Usually needs to flush buffer.
- *
- * NB: *not* called by jpeg_abort or jpeg_destroy; surrounding
- * application must deal with any cleanup that should happen even
- * for error exit.
- */
-
-void term_destination (j_compress_ptr cinfo)
-{
- my_dest_ptr dest = (my_dest_ptr) cinfo->dest;
- size_t datacount = OUTPUT_BUF_SIZE - dest->pub.free_in_buffer;
-
- /* Write any data remaining in the buffer */
- if (datacount > 0 && ((size_t)gdPutBuf (dest->buffer, datacount, dest->outfile) != datacount)) {
- ERREXIT (cinfo, JERR_FILE_WRITE);
- }
-}
-
-
-/*
- * Prepare for output to a stdio stream.
- * The caller must have already opened the stream, and is responsible
- * for closing it after finishing compression.
- */
-
-void jpeg_gdIOCtx_dest (j_compress_ptr cinfo, gdIOCtx * outfile)
-{
- my_dest_ptr dest;
-
- /* The destination object is made permanent so that multiple JPEG images
- * can be written to the same file without re-executing jpeg_stdio_dest.
- * This makes it dangerous to use this manager and a different destination
- * manager serially with the same JPEG object, because their private object
- * sizes may be different. Caveat programmer.
- */
- if (cinfo->dest == NULL) { /* first time for this JPEG object? */
- cinfo->dest = (struct jpeg_destination_mgr *) (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_PERMANENT, sizeof (my_destination_mgr));
- }
-
- dest = (my_dest_ptr) cinfo->dest;
- dest->pub.init_destination = init_destination;
- dest->pub.empty_output_buffer = empty_output_buffer;
- dest->pub.term_destination = term_destination;
- dest->outfile = outfile;
-}
-
-#endif /* HAVE_JPEG */
diff --git a/ext/gd/libgd/gd_png.c b/ext/gd/libgd/gd_png.c
deleted file mode 100644
index 1576fafa3d..0000000000
--- a/ext/gd/libgd/gd_png.c
+++ /dev/null
@@ -1,706 +0,0 @@
-#include <stdio.h>
-#include <math.h>
-#include <string.h>
-#include <stdlib.h>
-#include "gd.h"
-
-/* JCE: Arrange HAVE_LIBPNG so that it can be set in gd.h */
-#ifdef HAVE_LIBPNG
-
-#include "png.h" /* includes zlib.h and setjmp.h */
-#include "gdhelpers.h"
-
-#define TRUE 1
-#define FALSE 0
-
-/*---------------------------------------------------------------------------
-
- gd_png.c Copyright 1999 Greg Roelofs and Thomas Boutell
-
- The routines in this file, gdImagePng*() and gdImageCreateFromPng*(),
- are drop-in replacements for gdImageGif*() and gdImageCreateFromGif*(),
- except that these functions are noisier in the case of errors (comment
- out all fprintf() statements to disable that).
-
- GD 2.0 supports RGBA truecolor and will read and write truecolor PNGs.
- GD 2.0 supports 8 bits of color resolution per channel and
- 7 bits of alpha channel resolution. Images with more than 8 bits
- per channel are reduced to 8 bits. Images with an alpha channel are
- only able to resolve down to '1/128th opaque' instead of '1/256th',
- and this conversion is also automatic. I very much doubt you can see it.
- Both tRNS and true alpha are supported.
-
- Gamma is ignored, and there is no support for text annotations.
-
- Last updated: 9 February 2001
-
- ---------------------------------------------------------------------------*/
-
-#ifndef PNG_SETJMP_NOT_SUPPORTED
-typedef struct _jmpbuf_wrapper
-{
- jmp_buf jmpbuf;
-} jmpbuf_wrapper;
-
-static jmpbuf_wrapper gdPngJmpbufStruct;
-
-static void gdPngErrorHandler (png_structp png_ptr, png_const_charp msg)
-{
- jmpbuf_wrapper *jmpbuf_ptr;
-
- /* This function, aside from the extra step of retrieving the "error
- * pointer" (below) and the fact that it exists within the application
- * rather than within libpng, is essentially identical to libpng's
- * default error handler. The second point is critical: since both
- * setjmp() and longjmp() are called from the same code, they are
- * guaranteed to have compatible notions of how big a jmp_buf is,
- * regardless of whether _BSD_SOURCE or anything else has (or has not)
- * been defined.
- */
-
- php_gd_error_ex(E_ERROR, "gd-png: fatal libpng error: %s\n", msg);
-
- jmpbuf_ptr = png_get_error_ptr (png_ptr);
- if (jmpbuf_ptr == NULL) { /* we are completely hosed now */
- php_gd_error_ex(E_ERROR, "gd-png: EXTREMELY fatal error: jmpbuf unrecoverable; terminating.\n");
- }
-
- longjmp (jmpbuf_ptr->jmpbuf, 1);
-}
-#endif
-
-static void gdPngReadData (png_structp png_ptr, png_bytep data, png_size_t length)
-{
- gdGetBuf(data, length, (gdIOCtx *) png_get_io_ptr(png_ptr));
-}
-
-static void gdPngWriteData (png_structp png_ptr, png_bytep data, png_size_t length)
-{
- gdPutBuf (data, length, (gdIOCtx *) png_get_io_ptr(png_ptr));
-}
-
-static void gdPngFlushData (png_structp png_ptr)
-{
-}
-
-gdImagePtr gdImageCreateFromPng (FILE * inFile)
-{
- gdImagePtr im;
- gdIOCtx *in = gdNewFileCtx(inFile);
- im = gdImageCreateFromPngCtx(in);
- in->gd_free(in);
-
- return im;
-}
-
-gdImagePtr gdImageCreateFromPngPtr (int size, void *data)
-{
- gdImagePtr im;
- gdIOCtx *in = gdNewDynamicCtxEx(size, data, 0);
- im = gdImageCreateFromPngCtx(in);
- in->gd_free(in);
- return im;
-}
-
-/* This routine is based in part on the Chapter 13 demo code in "PNG: The
- * Definitive Guide" (http://www.cdrom.com/pub/png/pngbook.html).
- */
-gdImagePtr gdImageCreateFromPngCtx (gdIOCtx * infile)
-{
- png_byte sig[8];
- png_structp png_ptr;
- png_infop info_ptr;
- png_uint_32 width, height, rowbytes, w, h;
- int bit_depth, color_type, interlace_type;
- int num_palette, num_trans;
- png_colorp palette;
- png_color_16p trans_gray_rgb;
- png_color_16p trans_color_rgb;
- png_bytep trans;
- png_bytep image_data = NULL;
- png_bytepp row_pointers = NULL;
- gdImagePtr im = NULL;
- int i, j, *open = NULL;
- volatile int transparent = -1;
- volatile int palette_allocated = FALSE;
-
- /* Make sure the signature can't match by dumb luck -- TBB */
- /* GRR: isn't sizeof(infile) equal to the size of the pointer? */
- memset (infile, 0, sizeof(infile));
-
- /* first do a quick check that the file really is a PNG image; could
- * have used slightly more general png_sig_cmp() function instead
- */
- gdGetBuf(sig, 8, infile);
- if (!png_check_sig (sig, 8)) { /* bad signature */
- return NULL;
- }
-
-#ifndef PNG_SETJMP_NOT_SUPPORTED
- png_ptr = png_create_read_struct(PNG_LIBPNG_VER_STRING, &gdPngJmpbufStruct, gdPngErrorHandler, NULL);
-#else
- png_ptr = png_create_read_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
-#endif
- if (png_ptr == NULL) {
- php_gd_error("gd-png error: cannot allocate libpng main struct\n");
- return NULL;
- }
-
- info_ptr = png_create_info_struct(png_ptr);
- if (info_ptr == NULL) {
- php_gd_error("gd-png error: cannot allocate libpng info struct\n");
- png_destroy_read_struct (&png_ptr, NULL, NULL);
-
- return NULL;
- }
-
- /* we could create a second info struct here (end_info), but it's only
- * useful if we want to keep pre- and post-IDAT chunk info separated
- * (mainly for PNG-aware image editors and converters)
- */
-
- /* setjmp() must be called in every non-callback function that calls a
- * PNG-reading libpng function
- */
-#ifndef PNG_SETJMP_NOT_SUPPORTED
- if (setjmp(gdPngJmpbufStruct.jmpbuf)) {
- php_gd_error("gd-png error: setjmp returns error condition\n");
- png_destroy_read_struct(&png_ptr, &info_ptr, NULL);
-
- return NULL;
- }
-#endif
-
- png_set_sig_bytes(png_ptr, 8); /* we already read the 8 signature bytes */
-
- png_set_read_fn(png_ptr, (void *) infile, gdPngReadData);
- png_read_info(png_ptr, info_ptr); /* read all PNG info up to image data */
-
- png_get_IHDR(png_ptr, info_ptr, &width, &height, &bit_depth, &color_type, &interlace_type, NULL, NULL);
- if ((color_type == PNG_COLOR_TYPE_RGB) || (color_type == PNG_COLOR_TYPE_RGB_ALPHA)) {
- im = gdImageCreateTrueColor((int) width, (int) height);
- } else {
- im = gdImageCreate((int) width, (int) height);
- }
- if (im == NULL) {
- php_gd_error("gd-png error: cannot allocate gdImage struct\n");
- png_destroy_read_struct(&png_ptr, &info_ptr, NULL);
- gdFree(image_data);
- gdFree(row_pointers);
-
- return NULL;
- }
-
- if (bit_depth == 16) {
- png_set_strip_16(png_ptr);
- } else if (bit_depth < 8) {
- png_set_packing (png_ptr); /* expand to 1 byte per pixel */
- }
-
- switch (color_type) {
- case PNG_COLOR_TYPE_PALETTE:
- png_get_PLTE(png_ptr, info_ptr, &palette, &num_palette);
-#ifdef DEBUG
- php_gd_error("gd-png color_type is palette, colors: %d\n", num_palette);
-#endif /* DEBUG */
- if (png_get_valid (png_ptr, info_ptr, PNG_INFO_tRNS)) {
- /* gd 2.0: we support this rather thoroughly now. Grab the
- * first fully transparent entry, if any, as the value of
- * the simple-transparency index, mostly for backwards
- * binary compatibility. The alpha channel is where it's
- * really at these days.
- */
- int firstZero = 1;
- png_get_tRNS(png_ptr, info_ptr, &trans, &num_trans, NULL);
- for (i = 0; i < num_trans; ++i) {
- im->alpha[i] = gdAlphaMax - (trans[i] >> 1);
- if ((trans[i] == 0) && (firstZero)) {
- transparent = i;
- firstZero = 0;
- }
- }
- }
- break;
- case PNG_COLOR_TYPE_GRAY:
- case PNG_COLOR_TYPE_GRAY_ALPHA:
- /* create a fake palette and check for single-shade transparency */
- if ((palette = (png_colorp) gdMalloc (256 * sizeof (png_color))) == NULL) {
- php_gd_error("gd-png error: cannot allocate gray palette\n");
- png_destroy_read_struct(&png_ptr, &info_ptr, NULL);
-
- return NULL;
- }
- palette_allocated = TRUE;
- if (bit_depth < 8) {
- num_palette = 1 << bit_depth;
- for (i = 0; i < 256; ++i) {
- j = (255 * i) / (num_palette - 1);
- palette[i].red = palette[i].green = palette[i].blue = j;
- }
- } else {
- num_palette = 256;
- for (i = 0; i < 256; ++i) {
- palette[i].red = palette[i].green = palette[i].blue = i;
- }
- }
- if (png_get_valid(png_ptr, info_ptr, PNG_INFO_tRNS)) {
- png_get_tRNS(png_ptr, info_ptr, NULL, NULL, &trans_gray_rgb);
- if (bit_depth == 16) { /* png_set_strip_16() not yet in effect */
- transparent = trans_gray_rgb->gray >> 8;
- } else {
- transparent = trans_gray_rgb->gray;
- }
- /* Note slight error in 16-bit case: up to 256 16-bit shades
- * may get mapped to a single 8-bit shade, and only one of them
- * is supposed to be transparent. IOW, both opaque pixels and
- * transparent pixels will be mapped into the transparent entry.
- * There is no particularly good way around this in the case
- * that all 256 8-bit shades are used, but one could write some
- * custom 16-bit code to handle the case where there are gdFree
- * palette entries. This error will be extremely rare in
- * general, though. (Quite possibly there is only one such
- * image in existence.)
- */
- }
- break;
-
- case PNG_COLOR_TYPE_RGB:
- case PNG_COLOR_TYPE_RGB_ALPHA:
- /* gd 2.0: we now support truecolor. See the comment above
- * for a rare situation in which the transparent pixel may not
- * work properly with 16-bit channels.
- */
- if (png_get_valid(png_ptr, info_ptr, PNG_INFO_tRNS)) {
- png_get_tRNS(png_ptr, info_ptr, NULL, NULL, &trans_color_rgb);
- if (bit_depth == 16) { /* png_set_strip_16() not yet in effect */
- transparent = gdTrueColor(trans_color_rgb->red >> 8,
- trans_color_rgb->green >> 8,
- trans_color_rgb->blue >> 8);
- } else {
- transparent = gdTrueColor(trans_color_rgb->red,
- trans_color_rgb->green,
- trans_color_rgb->blue);
- }
- }
- break;
- }
-
- png_read_update_info(png_ptr, info_ptr);
-
- /* allocate space for the PNG image data */
- rowbytes = png_get_rowbytes(png_ptr, info_ptr);
- image_data = (png_bytep) safe_emalloc(rowbytes, height, 0);
-
- row_pointers = (png_bytepp) safe_emalloc(height, sizeof(png_bytep), 0);
-
- /* set the individual row_pointers to point at the correct offsets */
- for (h = 0; h < height; ++h) {
- row_pointers[h] = image_data + h * rowbytes;
- }
-
- png_read_image(png_ptr, row_pointers); /* read whole image... */
- png_read_end(png_ptr, NULL); /* ...done! */
-
- if (!im->trueColor) {
- im->colorsTotal = num_palette;
- /* load the palette and mark all entries "open" (unused) for now */
- open = im->open;
- for (i = 0; i < num_palette; ++i) {
- im->red[i] = palette[i].red;
- im->green[i] = palette[i].green;
- im->blue[i] = palette[i].blue;
- open[i] = 1;
- }
- for (i = num_palette; i < gdMaxColors; ++i) {
- open[i] = 1;
- }
- }
- /* 2.0.12: Slaven Rezic: palette images are not the only images
- * with a simple transparent color setting.
- */
- im->transparent = transparent;
- im->interlace = (interlace_type == PNG_INTERLACE_ADAM7);
-
- /* can't nuke structs until done with palette */
- png_destroy_read_struct(&png_ptr, &info_ptr, NULL);
- switch (color_type) {
- case PNG_COLOR_TYPE_RGB:
- for (h = 0; h < height; h++) {
- int boffset = 0;
- for (w = 0; w < width; w++) {
- register png_byte r = row_pointers[h][boffset++];
- register png_byte g = row_pointers[h][boffset++];
- register png_byte b = row_pointers[h][boffset++];
- im->tpixels[h][w] = gdTrueColor (r, g, b);
- }
- }
- break;
-
- case PNG_COLOR_TYPE_RGB_ALPHA:
- for (h = 0; h < height; h++) {
- int boffset = 0;
- for (w = 0; w < width; w++) {
- register png_byte r = row_pointers[h][boffset++];
- register png_byte g = row_pointers[h][boffset++];
- register png_byte b = row_pointers[h][boffset++];
-
- /* gd has only 7 bits of alpha channel resolution, and
- * 127 is transparent, 0 opaque. A moment of convenience,
- * a lifetime of compatibility.
- */
-
- register png_byte a = gdAlphaMax - (row_pointers[h][boffset++] >> 1);
- im->tpixels[h][w] = gdTrueColorAlpha(r, g, b, a);
- }
- }
- break;
-
- default:
- /* Palette image, or something coerced to be one */
- for (h = 0; h < height; ++h) {
- for (w = 0; w < width; ++w) {
- register png_byte idx = row_pointers[h][w];
- im->pixels[h][w] = idx;
- open[idx] = 0;
- }
- }
- }
-#ifdef DEBUG
- if (!im->trueColor) {
- for (i = num_palette; i < gdMaxColors; ++i) {
- if (!open[i]) {
- php_gd_error("gd-png warning: image data references out-of-range color index (%d)\n", i);
- }
- }
- }
-#endif
-
- if (palette_allocated) {
- gdFree(palette);
- }
- gdFree(image_data);
- gdFree(row_pointers);
-
- return im;
-}
-
-void gdImagePngEx (gdImagePtr im, FILE * outFile, int level)
-{
- gdIOCtx *out = gdNewFileCtx(outFile);
- gdImagePngCtxEx(im, out, level);
- out->gd_free(out);
-}
-
-void gdImagePng (gdImagePtr im, FILE * outFile)
-{
- gdIOCtx *out = gdNewFileCtx(outFile);
- gdImagePngCtxEx(im, out, -1);
- out->gd_free(out);
-}
-
-void * gdImagePngPtr (gdImagePtr im, int *size)
-{
- void *rv;
- gdIOCtx *out = gdNewDynamicCtx(2048, NULL);
- gdImagePngCtxEx(im, out, -1);
- rv = gdDPExtractData(out, size);
- out->gd_free(out);
-
- return rv;
-}
-
-void * gdImagePngPtrEx (gdImagePtr im, int *size, int level)
-{
- void *rv;
- gdIOCtx *out = gdNewDynamicCtx(2048, NULL);
- gdImagePngCtxEx(im, out, level);
- rv = gdDPExtractData(out, size);
- out->gd_free(out);
- return rv;
-}
-
-void gdImagePngCtx (gdImagePtr im, gdIOCtx * outfile)
-{
- gdImagePngCtxEx(im, outfile, -1);
-}
-
-/* This routine is based in part on code from Dale Lutz (Safe Software Inc.)
- * and in part on demo code from Chapter 15 of "PNG: The Definitive Guide"
- * (http://www.cdrom.com/pub/png/pngbook.html).
- */
-void gdImagePngCtxEx (gdImagePtr im, gdIOCtx * outfile, int level)
-{
- int i, j, bit_depth = 0, interlace_type;
- int width = im->sx;
- int height = im->sy;
- int colors = im->colorsTotal;
- int *open = im->open;
- int mapping[gdMaxColors]; /* mapping[gd_index] == png_index */
- png_byte trans_values[256];
- png_color_16 trans_rgb_value;
- png_color palette[gdMaxColors];
- png_structp png_ptr;
- png_infop info_ptr;
- volatile int transparent = im->transparent;
- volatile int remap = FALSE;
-
-#ifndef PNG_SETJMP_NOT_SUPPORTED
- png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, &gdPngJmpbufStruct, gdPngErrorHandler, NULL);
-#else
- png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
-#endif
- if (png_ptr == NULL) {
- php_gd_error("gd-png error: cannot allocate libpng main struct\n");
- return;
- }
-
- info_ptr = png_create_info_struct(png_ptr);
- if (info_ptr == NULL) {
- php_gd_error("gd-png error: cannot allocate libpng info struct\n");
- png_destroy_write_struct (&png_ptr, (png_infopp) NULL);
-
- return;
- }
-
-#ifndef PNG_SETJMP_NOT_SUPPORTED
- if (setjmp (gdPngJmpbufStruct.jmpbuf)) {
- php_gd_error("gd-png error: setjmp returns error condition\n");
- png_destroy_write_struct (&png_ptr, &info_ptr);
-
- return;
- }
-#endif
-
- png_set_write_fn(png_ptr, (void *) outfile, gdPngWriteData, gdPngFlushData);
-
- /* This is best for palette images, and libpng defaults to it for
- * palette images anyway, so we don't need to do it explicitly.
- * What to ideally do for truecolor images depends, alas, on the image.
- * gd is intentionally imperfect and doesn't spend a lot of time
- * fussing with such things.
- */
-
- /* png_set_filter(png_ptr, 0, PNG_FILTER_NONE); */
-
- /* 2.0.12: this is finally a parameter */
- png_set_compression_level(png_ptr, level);
-
- /* can set this to a smaller value without compromising compression if all
- * image data is 16K or less; will save some decoder memory [min == 8]
- */
-
- /* png_set_compression_window_bits(png_ptr, 15); */
-
- if (!im->trueColor) {
- if (transparent >= im->colorsTotal || (transparent >= 0 && open[transparent])) {
- transparent = -1;
- }
-
- for (i = 0; i < gdMaxColors; ++i) {
- mapping[i] = -1;
- }
-
- /* count actual number of colors used (colorsTotal == high-water mark) */
- colors = 0;
- for (i = 0; i < im->colorsTotal; ++i) {
- if (!open[i]) {
- mapping[i] = colors;
- ++colors;
- }
- }
- if (colors < im->colorsTotal) {
- remap = TRUE;
- }
- if (colors <= 2) {
- bit_depth = 1;
- } else if (colors <= 4) {
- bit_depth = 2;
- } else if (colors <= 16) {
- bit_depth = 4;
- } else {
- bit_depth = 8;
- }
- }
-
- interlace_type = im->interlace ? PNG_INTERLACE_ADAM7 : PNG_INTERLACE_NONE;
-
- if (im->trueColor) {
- if (im->saveAlphaFlag) {
- png_set_IHDR(png_ptr, info_ptr, width, height, 8, PNG_COLOR_TYPE_RGB_ALPHA, interlace_type,
- PNG_COMPRESSION_TYPE_DEFAULT, PNG_FILTER_TYPE_DEFAULT);
- } else {
- png_set_IHDR(png_ptr, info_ptr, width, height, 8, PNG_COLOR_TYPE_RGB, interlace_type,
- PNG_COMPRESSION_TYPE_DEFAULT, PNG_FILTER_TYPE_DEFAULT);
- }
- } else {
- png_set_IHDR(png_ptr, info_ptr, width, height, bit_depth, PNG_COLOR_TYPE_PALETTE, interlace_type,
- PNG_COMPRESSION_TYPE_DEFAULT, PNG_FILTER_TYPE_DEFAULT);
- }
-
- if (im->trueColor && !im->saveAlphaFlag && (transparent >= 0)) {
- /* 2.0.9: fixed by Thomas Winzig */
- trans_rgb_value.red = gdTrueColorGetRed (im->transparent);
- trans_rgb_value.green = gdTrueColorGetGreen (im->transparent);
- trans_rgb_value.blue = gdTrueColorGetBlue (im->transparent);
- png_set_tRNS(png_ptr, info_ptr, 0, 0, &trans_rgb_value);
- }
-
- if (!im->trueColor) {
- /* Oy veh. Remap the PNG palette to put the entries with interesting alpha channel
- * values first. This minimizes the size of the tRNS chunk and thus the size
- * of the PNG file as a whole.
- */
-
- int tc = 0;
- int i;
- int j;
- int k;
-
- for (i = 0; (i < im->colorsTotal); i++) {
- if ((!im->open[i]) && (im->alpha[i] != gdAlphaOpaque)) {
- tc++;
- }
- }
- if (tc) {
-#if 0
- for (i = 0; (i < im->colorsTotal); i++) {
- trans_values[i] = 255 - ((im->alpha[i] << 1) + (im->alpha[i] >> 6));
- }
- png_set_tRNS (png_ptr, info_ptr, trans_values, 256, NULL);
-#endif
- if (!remap) {
- remap = TRUE;
- }
-
- /* (Semi-)transparent indexes come up from the bottom of the list of real colors; opaque
- * indexes come down from the top
- */
- j = 0;
- k = colors - 1;
-
- for (i = 0; i < im->colorsTotal; i++) {
- if (!im->open[i]) {
- if (im->alpha[i] != gdAlphaOpaque) {
- /* Andrew Hull: >> 6, not >> 7! (gd 2.0.5) */
- trans_values[j] = 255 - ((im->alpha[i] << 1) + (im->alpha[i] >> 6));
- mapping[i] = j++;
- } else {
- mapping[i] = k--;
- }
- }
- }
- png_set_tRNS(png_ptr, info_ptr, trans_values, tc, NULL);
- }
- }
-
- /* convert palette to libpng layout */
- if (!im->trueColor) {
- if (remap) {
- for (i = 0; i < im->colorsTotal; ++i) {
- if (mapping[i] < 0) {
- continue;
- }
-
- palette[mapping[i]].red = im->red[i];
- palette[mapping[i]].green = im->green[i];
- palette[mapping[i]].blue = im->blue[i];
- }
- } else {
- for (i = 0; i < colors; ++i) {
- palette[i].red = im->red[i];
- palette[i].green = im->green[i];
- palette[i].blue = im->blue[i];
- }
- }
- png_set_PLTE(png_ptr, info_ptr, palette, colors);
- }
-
- /* write out the PNG header info (everything up to first IDAT) */
- png_write_info(png_ptr, info_ptr);
-
- /* make sure < 8-bit images are packed into pixels as tightly as possible */
- png_set_packing(png_ptr);
-
- /* This code allocates a set of row buffers and copies the gd image data
- * into them only in the case that remapping is necessary; in gd 1.3 and
- * later, the im->pixels array is laid out identically to libpng's row
- * pointers and can be passed to png_write_image() function directly.
- * The remapping case could be accomplished with less memory for non-
- * interlaced images, but interlacing causes some serious complications.
- */
-
- if (im->trueColor) {
- /* performance optimizations by Phong Tran */
- int channels = im->saveAlphaFlag ? 4 : 3;
- /* Our little 7-bit alpha channel trick costs us a bit here. */
- png_bytep *row_pointers;
- unsigned char* pOutputRow;
- int **ptpixels = im->tpixels;
- int *pThisRow;
- unsigned char a;
- int thisPixel;
- png_bytep *prow_pointers;
- int saveAlphaFlag = im->saveAlphaFlag;
-
- row_pointers = safe_emalloc(sizeof(png_bytep), height, 0);
- prow_pointers = row_pointers;
- for (j = 0; j < height; ++j) {
- *prow_pointers = (png_bytep) safe_emalloc(width, channels, 0);
- pOutputRow = *prow_pointers++;
- pThisRow = *ptpixels++;
- for (i = 0; i < width; ++i) {
- thisPixel = *pThisRow++;
- *pOutputRow++ = gdTrueColorGetRed(thisPixel);
- *pOutputRow++ = gdTrueColorGetGreen(thisPixel);
- *pOutputRow++ = gdTrueColorGetBlue(thisPixel);
- if (saveAlphaFlag) {
- /* convert the 7-bit alpha channel to an 8-bit alpha channel.
- * We do a little bit-flipping magic, repeating the MSB
- * as the LSB, to ensure that 0 maps to 0 and
- * 127 maps to 255. We also have to invert to match
- * PNG's convention in which 255 is opaque.
- */
- a = gdTrueColorGetAlpha(thisPixel);
- /* Andrew Hull: >> 6, not >> 7! (gd 2.0.5) */
- *pOutputRow++ = 255 - ((a << 1) + (a >> 6));
- }
- }
- }
-
- png_write_image(png_ptr, row_pointers);
- png_write_end(png_ptr, info_ptr);
-
- for (j = 0; j < height; ++j) {
- gdFree(row_pointers[j]);
- }
-
- gdFree(row_pointers);
- } else {
- if (remap) {
- png_bytep *row_pointers;
- row_pointers = safe_emalloc(height, sizeof(png_bytep), 0);
- for (j = 0; j < height; ++j) {
- row_pointers[j] = (png_bytep) gdMalloc(width);
- for (i = 0; i < width; ++i) {
- row_pointers[j][i] = mapping[im->pixels[j][i]];
- }
- }
-
- png_write_image(png_ptr, row_pointers);
- png_write_end(png_ptr, info_ptr);
-
- for (j = 0; j < height; ++j) {
- gdFree(row_pointers[j]);
- }
-
- gdFree(row_pointers);
- } else {
- png_write_image(png_ptr, im->pixels);
- png_write_end(png_ptr, info_ptr);
- }
- }
- /* 1.6.3: maybe we should give that memory BACK! TBB */
- png_destroy_write_struct(&png_ptr, &info_ptr);
-}
-
-#endif /* HAVE_LIBPNG */
diff --git a/ext/gd/libgd/gd_ss.c b/ext/gd/libgd/gd_ss.c
deleted file mode 100644
index 78f91df9c9..0000000000
--- a/ext/gd/libgd/gd_ss.c
+++ /dev/null
@@ -1,49 +0,0 @@
-#include <stdio.h>
-#include <math.h>
-#include <string.h>
-#include <stdlib.h>
-#include "gd.h"
-
-#define TRUE 1
-#define FALSE 0
-
-/* Exported functions: */
-extern void gdImagePngToSink (gdImagePtr im, gdSinkPtr out);
-extern gdImagePtr gdImageCreateFromPngSource (gdSourcePtr inSource);
-
-/* Use this for commenting out debug-print statements. */
-/* Just use the first '#define' to allow all the prints... */
-/*#define GD_SS_DBG(s) (s) */
-#define GD_SS_DBG(s)
-
-#ifdef HAVE_LIBPNG
-void gdImagePngToSink (gdImagePtr im, gdSinkPtr outSink)
-{
- gdIOCtx *out = gdNewSSCtx(NULL, outSink);
- gdImagePngCtx(im, out);
- out->gd_free(out);
-}
-
-gdImagePtr gdImageCreateFromPngSource (gdSourcePtr inSource)
-{
- gdIOCtx *in = gdNewSSCtx(inSource, NULL);
- gdImagePtr im;
-
- im = gdImageCreateFromPngCtx(in);
-
- in->gd_free(in);
-
- return im;
-}
-#else /* no HAVE_LIBPNG */
-void gdImagePngToSink (gdImagePtr im, gdSinkPtr outSink)
-{
- php_gd_error("PNG support is not available\n");
-}
-gdImagePtr gdImageCreateFromPngSource (gdSourcePtr inSource)
-{
- php_gd_error("PNG support is not available\n");
- return NULL;
-}
-#endif /* HAVE_LIBPNG */
-
diff --git a/ext/gd/libgd/gd_topal.c b/ext/gd/libgd/gd_topal.c
deleted file mode 100644
index 15eed3e11e..0000000000
--- a/ext/gd/libgd/gd_topal.c
+++ /dev/null
@@ -1,2122 +0,0 @@
-/* TODO: oim and nim in the lower level functions;
- correct use of stub (sigh). */
-
-/* 2.0.12: a new adaptation from the same original, this time
- by Barend Gehrels. My attempt to incorporate alpha channel
- into the result worked poorly and degraded the quality of
- palette conversion even when the source contained no
- alpha channel data. This version does not attempt to produce
- an output file with transparency in some of the palette
- indexes, which, in practice, doesn't look so hot anyway. TBB */
-
-/*
- * gd_topal, adapted from jquant2.c
- *
- * Copyright (C) 1991-1996, Thomas G. Lane.
- * This file is part of the Independent JPEG Group's software.
- * For conditions of distribution and use, see the accompanying README file.
- *
- * This file contains 2-pass color quantization (color mapping) routines.
- * These routines provide selection of a custom color map for an image,
- * followed by mapping of the image to that color map, with optional
- * Floyd-Steinberg dithering.
- * It is also possible to use just the second pass to map to an arbitrary
- * externally-given color map.
- *
- * Note: ordered dithering is not supported, since there isn't any fast
- * way to compute intercolor distances; it's unclear that ordered dither's
- * fundamental assumptions even hold with an irregularly spaced color map.
- */
-
-#ifdef ORIGINAL_LIB_JPEG
-
-#define JPEG_INTERNALS
-
-#include "jinclude.h"
-#include "jpeglib.h"
-
-#else
-
-/*
- * THOMAS BOUTELL & BAREND GEHRELS, february 2003
- * adapted the code to work within gd rather than within libjpeg.
- * If it is not working, it's not Thomas G. Lane's fault.
- */
-
-/*
- SETTING THIS ONE CAUSES STRIPED IMAGE
- to be done: solve this
- #define ORIGINAL_LIB_JPEG_REVERSE_ODD_ROWS
- */
-
-#include <string.h>
-#include "gd.h"
-#include "gdhelpers.h"
-
-/* (Re)define some defines known by libjpeg */
-#define QUANT_2PASS_SUPPORTED
-
-#define RGB_RED 0
-#define RGB_GREEN 1
-#define RGB_BLUE 2
-
-#define JSAMPLE unsigned char
-#define MAXJSAMPLE (gdMaxColors-1)
-#define BITS_IN_JSAMPLE 8
-
-#define JSAMPROW int*
-#define JDIMENSION int
-
-#define METHODDEF(type) static type
-#define LOCAL(type) static type
-
-
-/* We assume that right shift corresponds to signed division by 2 with
- * rounding towards minus infinity. This is correct for typical "arithmetic
- * shift" instructions that shift in copies of the sign bit. But some
- * C compilers implement >> with an unsigned shift. For these machines you
- * must define RIGHT_SHIFT_IS_UNSIGNED.
- * RIGHT_SHIFT provides a proper signed right shift of an INT32 quantity.
- * It is only applied with constant shift counts. SHIFT_TEMPS must be
- * included in the variables of any routine using RIGHT_SHIFT.
- */
-
-#ifdef RIGHT_SHIFT_IS_UNSIGNED
-#define SHIFT_TEMPS INT32 shift_temp;
-#define RIGHT_SHIFT(x,shft) \
- ((shift_temp = (x)) < 0 ? \
- (shift_temp >> (shft)) | ((~((INT32) 0)) << (32-(shft))) : \
- (shift_temp >> (shft)))
-#else
-#define SHIFT_TEMPS
-#define RIGHT_SHIFT(x,shft) ((x) >> (shft))
-#endif
-
-
-#define range_limit(x) { if(x<0) x=0; if (x>255) x=255; }
-
-
-#ifndef INT16
-#define INT16 short
-#endif
-
-#ifndef UINT16
-#define UINT16 unsigned short
-#endif
-
-#ifndef INT32
-#define INT32 int
-#endif
-
-#ifndef FAR
-#define FAR
-#endif
-
-
-
-#ifndef boolean
-#define boolean int
-#endif
-
-#ifndef TRUE
-#define TRUE 1
-#endif
-
-#ifndef FALSE
-#define FALSE 0
-#endif
-
-
-#define input_buf (oim->tpixels)
-#define output_buf (nim->pixels)
-
-#endif
-
-#ifdef QUANT_2PASS_SUPPORTED
-
-
-/*
- * This module implements the well-known Heckbert paradigm for color
- * quantization. Most of the ideas used here can be traced back to
- * Heckbert's seminal paper
- * Heckbert, Paul. "Color Image Quantization for Frame Buffer Display",
- * Proc. SIGGRAPH '82, Computer Graphics v.16 #3 (July 1982), pp 297-304.
- *
- * In the first pass over the image, we accumulate a histogram showing the
- * usage count of each possible color. To keep the histogram to a reasonable
- * size, we reduce the precision of the input; typical practice is to retain
- * 5 or 6 bits per color, so that 8 or 4 different input values are counted
- * in the same histogram cell.
- *
- * Next, the color-selection step begins with a box representing the whole
- * color space, and repeatedly splits the "largest" remaining box until we
- * have as many boxes as desired colors. Then the mean color in each
- * remaining box becomes one of the possible output colors.
- *
- * The second pass over the image maps each input pixel to the closest output
- * color (optionally after applying a Floyd-Steinberg dithering correction).
- * This mapping is logically trivial, but making it go fast enough requires
- * considerable care.
- *
- * Heckbert-style quantizers vary a good deal in their policies for choosing
- * the "largest" box and deciding where to cut it. The particular policies
- * used here have proved out well in experimental comparisons, but better ones
- * may yet be found.
- *
- * In earlier versions of the IJG code, this module quantized in YCbCr color
- * space, processing the raw upsampled data without a color conversion step.
- * This allowed the color conversion math to be done only once per colormap
- * entry, not once per pixel. However, that optimization precluded other
- * useful optimizations (such as merging color conversion with upsampling)
- * and it also interfered with desired capabilities such as quantizing to an
- * externally-supplied colormap. We have therefore abandoned that approach.
- * The present code works in the post-conversion color space, typically RGB.
- *
- * To improve the visual quality of the results, we actually work in scaled
- * RGB space, giving G distances more weight than R, and R in turn more than
- * B. To do everything in integer math, we must use integer scale factors.
- * The 2/3/1 scale factors used here correspond loosely to the relative
- * weights of the colors in the NTSC grayscale equation.
- * If you want to use this code to quantize a non-RGB color space, you'll
- * probably need to change these scale factors.
- */
-
-#define R_SCALE 2 /* scale R distances by this much */
-#define G_SCALE 3 /* scale G distances by this much */
-#define B_SCALE 1 /* and B by this much */
-
-/* Relabel R/G/B as components 0/1/2, respecting the RGB ordering defined
- * in jmorecfg.h. As the code stands, it will do the right thing for R,G,B
- * and B,G,R orders. If you define some other weird order in jmorecfg.h,
- * you'll get compile errors until you extend this logic. In that case
- * you'll probably want to tweak the histogram sizes too.
- */
-
-#if RGB_RED == 0
-#define C0_SCALE R_SCALE
-#endif
-#if RGB_BLUE == 0
-#define C0_SCALE B_SCALE
-#endif
-#if RGB_GREEN == 1
-#define C1_SCALE G_SCALE
-#endif
-#if RGB_RED == 2
-#define C2_SCALE R_SCALE
-#endif
-#if RGB_BLUE == 2
-#define C2_SCALE B_SCALE
-#endif
-
-
-/*
- * First we have the histogram data structure and routines for creating it.
- *
- * The number of bits of precision can be adjusted by changing these symbols.
- * We recommend keeping 6 bits for G and 5 each for R and B.
- * If you have plenty of memory and cycles, 6 bits all around gives marginally
- * better results; if you are short of memory, 5 bits all around will save
- * some space but degrade the results.
- * To maintain a fully accurate histogram, we'd need to allocate a "long"
- * (preferably unsigned long) for each cell. In practice this is overkill;
- * we can get by with 16 bits per cell. Few of the cell counts will overflow,
- * and clamping those that do overflow to the maximum value will give close-
- * enough results. This reduces the recommended histogram size from 256Kb
- * to 128Kb, which is a useful savings on PC-class machines.
- * (In the second pass the histogram space is re-used for pixel mapping data;
- * in that capacity, each cell must be able to store zero to the number of
- * desired colors. 16 bits/cell is plenty for that too.)
- * Since the JPEG code is intended to run in small memory model on 80x86
- * machines, we can't just allocate the histogram in one chunk. Instead
- * of a true 3-D array, we use a row of pointers to 2-D arrays. Each
- * pointer corresponds to a C0 value (typically 2^5 = 32 pointers) and
- * each 2-D array has 2^6*2^5 = 2048 or 2^6*2^6 = 4096 entries. Note that
- * on 80x86 machines, the pointer row is in near memory but the actual
- * arrays are in far memory (same arrangement as we use for image arrays).
- */
-
-#define MAXNUMCOLORS (MAXJSAMPLE+1) /* maximum size of colormap */
-
-/* These will do the right thing for either R,G,B or B,G,R color order,
- * but you may not like the results for other color orders.
- */
-#define HIST_C0_BITS 5 /* bits of precision in R/B histogram */
-#define HIST_C1_BITS 6 /* bits of precision in G histogram */
-#define HIST_C2_BITS 5 /* bits of precision in B/R histogram */
-
-/* Number of elements along histogram axes. */
-#define HIST_C0_ELEMS (1<<HIST_C0_BITS)
-#define HIST_C1_ELEMS (1<<HIST_C1_BITS)
-#define HIST_C2_ELEMS (1<<HIST_C2_BITS)
-
-/* These are the amounts to shift an input value to get a histogram index. */
-#define C0_SHIFT (BITS_IN_JSAMPLE-HIST_C0_BITS)
-#define C1_SHIFT (BITS_IN_JSAMPLE-HIST_C1_BITS)
-#define C2_SHIFT (BITS_IN_JSAMPLE-HIST_C2_BITS)
-
-
-typedef UINT16 histcell; /* histogram cell; prefer an unsigned type */
-
-typedef histcell FAR *histptr; /* for pointers to histogram cells */
-
-typedef histcell hist1d[HIST_C2_ELEMS]; /* typedefs for the array */
-typedef hist1d FAR *hist2d; /* type for the 2nd-level pointers */
-typedef hist2d *hist3d; /* type for top-level pointer */
-
-
-/* Declarations for Floyd-Steinberg dithering.
- *
- * Errors are accumulated into the array fserrors[], at a resolution of
- * 1/16th of a pixel count. The error at a given pixel is propagated
- * to its not-yet-processed neighbors using the standard F-S fractions,
- * ... (here) 7/16
- * 3/16 5/16 1/16
- * We work left-to-right on even rows, right-to-left on odd rows.
- *
- * We can get away with a single array (holding one row's worth of errors)
- * by using it to store the current row's errors at pixel columns not yet
- * processed, but the next row's errors at columns already processed. We
- * need only a few extra variables to hold the errors immediately around the
- * current column. (If we are lucky, those variables are in registers, but
- * even if not, they're probably cheaper to access than array elements are.)
- *
- * The fserrors[] array has (#columns + 2) entries; the extra entry at
- * each end saves us from special-casing the first and last pixels.
- * Each entry is three values long, one value for each color component.
- *
- * Note: on a wide image, we might not have enough room in a PC's near data
- * segment to hold the error array; so it is allocated with alloc_large.
- */
-
-#if BITS_IN_JSAMPLE == 8
-typedef INT16 FSERROR; /* 16 bits should be enough */
-typedef int LOCFSERROR; /* use 'int' for calculation temps */
-#else
-typedef INT32 FSERROR; /* may need more than 16 bits */
-typedef INT32 LOCFSERROR; /* be sure calculation temps are big enough */
-#endif
-
-typedef FSERROR FAR *FSERRPTR; /* pointer to error array (in FAR storage!) */
-
-
-/* Private subobject */
-
-typedef struct
-{
-#ifdef ORIGINAL_LIB_JPEG
- struct jpeg_color_quantizer pub; /* public fields */
-
- /* Space for the eventually created colormap is stashed here */
- JSAMPARRAY sv_colormap; /* colormap allocated at init time */
- int desired; /* desired # of colors = size of colormap */
- boolean needs_zeroed; /* TRUE if next pass must zero histogram */
-#endif
-
- /* Variables for accumulating image statistics */
- hist3d histogram; /* pointer to the histogram */
-
-
- /* Variables for Floyd-Steinberg dithering */
- FSERRPTR fserrors; /* accumulated errors */
-
- boolean on_odd_row; /* flag to remember which row we are on */
- int *error_limiter; /* table for clamping the applied error */
-#ifndef ORIGINAL_LIB_JPEG
- int *error_limiter_storage; /* gdMalloc'd storage for the above */
-#endif
-}
-my_cquantizer;
-
-typedef my_cquantizer *my_cquantize_ptr;
-
-
-/*
- * Prescan some rows of pixels.
- * In this module the prescan simply updates the histogram, which has been
- * initialized to zeroes by start_pass.
- * An output_buf parameter is required by the method signature, but no data
- * is actually output (in fact the buffer controller is probably passing a
- * NULL pointer).
- */
-
-METHODDEF (void)
-#ifndef ORIGINAL_LIB_JPEG
-prescan_quantize (gdImagePtr oim, gdImagePtr nim, my_cquantize_ptr cquantize)
-{
-#else
-prescan_quantize (j_decompress_ptr cinfo, JSAMPARRAY input_buf,
- JSAMPARRAY output_buf, int num_rows)
-{
- my_cquantize_ptr cquantize = (my_cquantize_ptr) cinfo->cquantize;
-#endif
- register JSAMPROW ptr;
- register histptr histp;
- register hist3d histogram = cquantize->histogram;
- int row;
- JDIMENSION col;
-#ifdef ORIGINAL_LIB_JPEG
- JDIMENSION width = cinfo->output_width;
-#else
- int width = oim->sx;
- int num_rows = oim->sy;
-#endif
-
- for (row = 0; row < num_rows; row++)
- {
- ptr = input_buf[row];
- for (col = width; col > 0; col--)
- {
-#ifdef ORIGINAL_LIB_JPEG
- int r = GETJSAMPLE (ptr[0]) >> C0_SHIFT;
- int g = GETJSAMPLE (ptr[1]) >> C1_SHIFT;
- int b = GETJSAMPLE (ptr[2]) >> C2_SHIFT;
-#else
- int r = gdTrueColorGetRed (*ptr) >> C0_SHIFT;
- int g = gdTrueColorGetGreen (*ptr) >> C1_SHIFT;
- int b = gdTrueColorGetBlue (*ptr) >> C2_SHIFT;
- /* 2.0.12: Steven Brown: support a single totally transparent
- color in the original. */
- if ((oim->transparent >= 0) && (*ptr == oim->transparent))
- {
- ptr++;
- continue;
- }
-#endif
- /* get pixel value and index into the histogram */
- histp = &histogram[r][g][b];
- /* increment, check for overflow and undo increment if so. */
- if (++(*histp) == 0)
- (*histp)--;
-#ifdef ORIGINAL_LIB_JPEG
- ptr += 3;
-#else
- ptr++;
-#endif
- }
- }
-}
-
-
-/*
- * Next we have the really interesting routines: selection of a colormap
- * given the completed histogram.
- * These routines work with a list of "boxes", each representing a rectangular
- * subset of the input color space (to histogram precision).
- */
-
-typedef struct
-{
- /* The bounds of the box (inclusive); expressed as histogram indexes */
- int c0min, c0max;
- int c1min, c1max;
- int c2min, c2max;
- /* The volume (actually 2-norm) of the box */
- INT32 volume;
- /* The number of nonzero histogram cells within this box */
- long colorcount;
-}
-box;
-
-typedef box *boxptr;
-
-
-LOCAL (boxptr) find_biggest_color_pop (boxptr boxlist, int numboxes)
-/* Find the splittable box with the largest color population */
-/* Returns NULL if no splittable boxes remain */
-{
- register boxptr boxp;
- register int i;
- register long maxc = 0;
- boxptr which = NULL;
-
- for (i = 0, boxp = boxlist; i < numboxes; i++, boxp++)
- {
- if (boxp->colorcount > maxc && boxp->volume > 0)
- {
- which = boxp;
- maxc = boxp->colorcount;
- }
- }
- return which;
-}
-
-
-LOCAL (boxptr) find_biggest_volume (boxptr boxlist, int numboxes)
-/* Find the splittable box with the largest (scaled) volume */
-/* Returns NULL if no splittable boxes remain */
-{
- register boxptr boxp;
- register int i;
- register INT32 maxv = 0;
- boxptr which = NULL;
-
- for (i = 0, boxp = boxlist; i < numboxes; i++, boxp++)
- {
- if (boxp->volume > maxv)
- {
- which = boxp;
- maxv = boxp->volume;
- }
- }
- return which;
-}
-
-
-LOCAL (void)
-#ifndef ORIGINAL_LIB_JPEG
- update_box (gdImagePtr oim, gdImagePtr nim, my_cquantize_ptr cquantize, boxptr boxp)
-{
-#else
- update_box (j_decompress_ptr cinfo, boxptr boxp)
-/* Shrink the min/max bounds of a box to enclose only nonzero elements, */
-/* and recompute its volume and population */
-{
- my_cquantize_ptr cquantize = (my_cquantize_ptr) cinfo->cquantize;
-#endif
- hist3d histogram = cquantize->histogram;
- histptr histp;
- int c0, c1, c2;
- int c0min, c0max, c1min, c1max, c2min, c2max;
- INT32 dist0, dist1, dist2;
- long ccount;
-
- c0min = boxp->c0min;
- c0max = boxp->c0max;
- c1min = boxp->c1min;
- c1max = boxp->c1max;
- c2min = boxp->c2min;
- c2max = boxp->c2max;
-
- if (c0max > c0min)
- for (c0 = c0min; c0 <= c0max; c0++)
- for (c1 = c1min; c1 <= c1max; c1++)
- {
- histp = &histogram[c0][c1][c2min];
- for (c2 = c2min; c2 <= c2max; c2++)
- if (*histp++ != 0)
- {
- boxp->c0min = c0min = c0;
- goto have_c0min;
- }
- }
-have_c0min:
- if (c0max > c0min)
- for (c0 = c0max; c0 >= c0min; c0--)
- for (c1 = c1min; c1 <= c1max; c1++)
- {
- histp = &histogram[c0][c1][c2min];
- for (c2 = c2min; c2 <= c2max; c2++)
- if (*histp++ != 0)
- {
- boxp->c0max = c0max = c0;
- goto have_c0max;
- }
- }
-have_c0max:
- if (c1max > c1min)
- for (c1 = c1min; c1 <= c1max; c1++)
- for (c0 = c0min; c0 <= c0max; c0++)
- {
- histp = &histogram[c0][c1][c2min];
- for (c2 = c2min; c2 <= c2max; c2++)
- if (*histp++ != 0)
- {
- boxp->c1min = c1min = c1;
- goto have_c1min;
- }
- }
-have_c1min:
- if (c1max > c1min)
- for (c1 = c1max; c1 >= c1min; c1--)
- for (c0 = c0min; c0 <= c0max; c0++)
- {
- histp = &histogram[c0][c1][c2min];
- for (c2 = c2min; c2 <= c2max; c2++)
- if (*histp++ != 0)
- {
- boxp->c1max = c1max = c1;
- goto have_c1max;
- }
- }
-have_c1max:
- if (c2max > c2min)
- for (c2 = c2min; c2 <= c2max; c2++)
- for (c0 = c0min; c0 <= c0max; c0++)
- {
- histp = &histogram[c0][c1min][c2];
- for (c1 = c1min; c1 <= c1max; c1++, histp += HIST_C2_ELEMS)
- if (*histp != 0)
- {
- boxp->c2min = c2min = c2;
- goto have_c2min;
- }
- }
-have_c2min:
- if (c2max > c2min)
- for (c2 = c2max; c2 >= c2min; c2--)
- for (c0 = c0min; c0 <= c0max; c0++)
- {
- histp = &histogram[c0][c1min][c2];
- for (c1 = c1min; c1 <= c1max; c1++, histp += HIST_C2_ELEMS)
- if (*histp != 0)
- {
- boxp->c2max = c2max = c2;
- goto have_c2max;
- }
- }
-have_c2max:
-
- /* Update box volume.
- * We use 2-norm rather than real volume here; this biases the method
- * against making long narrow boxes, and it has the side benefit that
- * a box is splittable iff norm > 0.
- * Since the differences are expressed in histogram-cell units,
- * we have to shift back to JSAMPLE units to get consistent distances;
- * after which, we scale according to the selected distance scale factors.
- */
- dist0 = ((c0max - c0min) << C0_SHIFT) * C0_SCALE;
- dist1 = ((c1max - c1min) << C1_SHIFT) * C1_SCALE;
- dist2 = ((c2max - c2min) << C2_SHIFT) * C2_SCALE;
- boxp->volume = dist0 * dist0 + dist1 * dist1 + dist2 * dist2;
-
- /* Now scan remaining volume of box and compute population */
- ccount = 0;
- for (c0 = c0min; c0 <= c0max; c0++)
- for (c1 = c1min; c1 <= c1max; c1++)
- {
- histp = &histogram[c0][c1][c2min];
- for (c2 = c2min; c2 <= c2max; c2++, histp++)
- if (*histp != 0)
- {
- ccount++;
- }
- }
- boxp->colorcount = ccount;
-}
-
-
-LOCAL (int)
-#ifdef ORIGINAL_LIB_JPEG
-median_cut (j_decompress_ptr cinfo, boxptr boxlist, int numboxes,
- int desired_colors)
-#else
-median_cut (gdImagePtr oim, gdImagePtr nim, my_cquantize_ptr cquantize,
- boxptr boxlist, int numboxes, int desired_colors)
-#endif
-/* Repeatedly select and split the largest box until we have enough boxes */
-{
- int n, lb;
- int c0, c1, c2, cmax;
- register boxptr b1, b2;
-
- while (numboxes < desired_colors)
- {
- /* Select box to split.
- * Current algorithm: by population for first half, then by volume.
- */
- if (numboxes * 2 <= desired_colors)
- {
- b1 = find_biggest_color_pop (boxlist, numboxes);
- }
- else
- {
- b1 = find_biggest_volume (boxlist, numboxes);
- }
- if (b1 == NULL) /* no splittable boxes left! */
- break;
- b2 = &boxlist[numboxes]; /* where new box will go */
- /* Copy the color bounds to the new box. */
- b2->c0max = b1->c0max;
- b2->c1max = b1->c1max;
- b2->c2max = b1->c2max;
- b2->c0min = b1->c0min;
- b2->c1min = b1->c1min;
- b2->c2min = b1->c2min;
- /* Choose which axis to split the box on.
- * Current algorithm: longest scaled axis.
- * See notes in update_box about scaling distances.
- */
- c0 = ((b1->c0max - b1->c0min) << C0_SHIFT) * C0_SCALE;
- c1 = ((b1->c1max - b1->c1min) << C1_SHIFT) * C1_SCALE;
- c2 = ((b1->c2max - b1->c2min) << C2_SHIFT) * C2_SCALE;
- /* We want to break any ties in favor of green, then red, blue last.
- * This code does the right thing for R,G,B or B,G,R color orders only.
- */
-#if RGB_RED == 0
- cmax = c1;
- n = 1;
- if (c0 > cmax)
- {
- cmax = c0;
- n = 0;
- }
- if (c2 > cmax)
- {
- n = 2;
- }
-#else
- cmax = c1;
- n = 1;
- if (c2 > cmax)
- {
- cmax = c2;
- n = 2;
- }
- if (c0 > cmax)
- {
- n = 0;
- }
-#endif
- /* Choose split point along selected axis, and update box bounds.
- * Current algorithm: split at halfway point.
- * (Since the box has been shrunk to minimum volume,
- * any split will produce two nonempty subboxes.)
- * Note that lb value is max for lower box, so must be < old max.
- */
- switch (n)
- {
- case 0:
- lb = (b1->c0max + b1->c0min) / 2;
- b1->c0max = lb;
- b2->c0min = lb + 1;
- break;
- case 1:
- lb = (b1->c1max + b1->c1min) / 2;
- b1->c1max = lb;
- b2->c1min = lb + 1;
- break;
- case 2:
- lb = (b1->c2max + b1->c2min) / 2;
- b1->c2max = lb;
- b2->c2min = lb + 1;
- break;
- }
- /* Update stats for boxes */
-#ifdef ORIGINAL_LIB_JPEG
- update_box (cinfo, b1);
- update_box (cinfo, b2);
-#else
- update_box (oim, nim, cquantize, b1);
- update_box (oim, nim, cquantize, b2);
-#endif
- numboxes++;
- }
- return numboxes;
-}
-
-
-LOCAL (void)
-#ifndef ORIGINAL_LIB_JPEG
- compute_color (gdImagePtr oim, gdImagePtr nim, my_cquantize_ptr cquantize,
- boxptr boxp, int icolor)
-{
-#else
- compute_color (j_decompress_ptr cinfo, boxptr boxp, int icolor)
-/* Compute representative color for a box, put it in colormap[icolor] */
-{
- /* Current algorithm: mean weighted by pixels (not colors) */
- /* Note it is important to get the rounding correct! */
- my_cquantize_ptr cquantize = (my_cquantize_ptr) cinfo->cquantize;
-#endif
- hist3d histogram = cquantize->histogram;
- histptr histp;
- int c0, c1, c2;
- int c0min, c0max, c1min, c1max, c2min, c2max;
- long count = 0; /* 2.0.28: = 0 */
- long total = 0;
- long c0total = 0;
- long c1total = 0;
- long c2total = 0;
-
- c0min = boxp->c0min;
- c0max = boxp->c0max;
- c1min = boxp->c1min;
- c1max = boxp->c1max;
- c2min = boxp->c2min;
- c2max = boxp->c2max;
-
- for (c0 = c0min; c0 <= c0max; c0++)
- for (c1 = c1min; c1 <= c1max; c1++)
- {
- histp = &histogram[c0][c1][c2min];
- for (c2 = c2min; c2 <= c2max; c2++)
- {
- if ((count = *histp++) != 0)
- {
- total += count;
- c0total +=
- ((c0 << C0_SHIFT) + ((1 << C0_SHIFT) >> 1)) * count;
- c1total +=
- ((c1 << C1_SHIFT) + ((1 << C1_SHIFT) >> 1)) * count;
- c2total +=
- ((c2 << C2_SHIFT) + ((1 << C2_SHIFT) >> 1)) * count;
- }
- }
- }
-
-#ifdef ORIGINAL_LIB_JPEG
- cinfo->colormap[0][icolor] = (JSAMPLE) ((c0total + (total >> 1)) / total);
- cinfo->colormap[1][icolor] = (JSAMPLE) ((c1total + (total >> 1)) / total);
- cinfo->colormap[2][icolor] = (JSAMPLE) ((c2total + (total >> 1)) / total);
-#else
- /* 2.0.16: Paul den Dulk found an occasion where total can be 0 */
- if (count)
- {
- nim->red[icolor] = (int) ((c0total + (total >> 1)) / total);
- nim->green[icolor] = (int) ((c1total + (total >> 1)) / total);
- nim->blue[icolor] = (int) ((c2total + (total >> 1)) / total);
- }
- else
- {
- nim->red[icolor] = 255;
- nim->green[icolor] = 255;
- nim->blue[icolor] = 255;
- }
-#endif
-}
-
-
-LOCAL (void)
-#ifdef ORIGINAL_LIB_JPEG
-select_colors (j_decompress_ptr cinfo, int desired_colors)
-#else
-select_colors (gdImagePtr oim, gdImagePtr nim, my_cquantize_ptr cquantize, int desired_colors)
-#endif
-/* Master routine for color selection */
-{
- boxptr boxlist;
- int numboxes;
- int i;
-
- /* Allocate workspace for box list */
-#ifdef ORIGINAL_LIB_JPEG
- boxlist = (boxptr) (*cinfo->mem->alloc_small)
- ((j_common_ptr) cinfo, JPOOL_IMAGE, desired_colors * SIZEOF (box));
-#else
- boxlist = (boxptr) safe_emalloc(desired_colors, sizeof (box), 1);
-#endif
- /* Initialize one box containing whole space */
- numboxes = 1;
- boxlist[0].c0min = 0;
- boxlist[0].c0max = MAXJSAMPLE >> C0_SHIFT;
- boxlist[0].c1min = 0;
- boxlist[0].c1max = MAXJSAMPLE >> C1_SHIFT;
- boxlist[0].c2min = 0;
- boxlist[0].c2max = MAXJSAMPLE >> C2_SHIFT;
-#ifdef ORIGINAL_LIB_JPEG
- /* Shrink it to actually-used volume and set its statistics */
- update_box (cinfo, &boxlist[0]);
- /* Perform median-cut to produce final box list */
- numboxes = median_cut (cinfo, boxlist, numboxes, desired_colors);
- /* Compute the representative color for each box, fill colormap */
- for (i = 0; i < numboxes; i++)
- compute_color (cinfo, &boxlist[i], i);
- cinfo->actual_number_of_colors = numboxes;
- TRACEMS1 (cinfo, 1, JTRC_QUANT_SELECTED, numboxes);
-#else
- /* Shrink it to actually-used volume and set its statistics */
- update_box (oim, nim, cquantize, &boxlist[0]);
- /* Perform median-cut to produce final box list */
- numboxes = median_cut (oim, nim, cquantize, boxlist, numboxes, desired_colors);
- /* Compute the representative color for each box, fill colormap */
- for (i = 0; i < numboxes; i++)
- compute_color (oim, nim, cquantize, &boxlist[i], i);
- nim->colorsTotal = numboxes;
-
- /* If we had a pure transparency color, add it as the last palette entry.
- * Skip incrementing the color count so that the dither / matching phase
- * won't use it on pixels that shouldn't have been transparent. We'll
- * increment it after all that finishes. */
- if (oim->transparent >= 0)
- {
- /* Save the transparent color. */
- nim->red[nim->colorsTotal] = gdTrueColorGetRed (oim->transparent);
- nim->green[nim->colorsTotal] = gdTrueColorGetGreen (oim->transparent);
- nim->blue[nim->colorsTotal] = gdTrueColorGetBlue (oim->transparent);
- nim->alpha[nim->colorsTotal] = gdAlphaTransparent;
- nim->open[nim->colorsTotal] = 0;
- }
-
- gdFree (boxlist);
-#endif
-}
-
-
-/*
- * These routines are concerned with the time-critical task of mapping input
- * colors to the nearest color in the selected colormap.
- *
- * We re-use the histogram space as an "inverse color map", essentially a
- * cache for the results of nearest-color searches. All colors within a
- * histogram cell will be mapped to the same colormap entry, namely the one
- * closest to the cell's center. This may not be quite the closest entry to
- * the actual input color, but it's almost as good. A zero in the cache
- * indicates we haven't found the nearest color for that cell yet; the array
- * is cleared to zeroes before starting the mapping pass. When we find the
- * nearest color for a cell, its colormap index plus one is recorded in the
- * cache for future use. The pass2 scanning routines call fill_inverse_cmap
- * when they need to use an unfilled entry in the cache.
- *
- * Our method of efficiently finding nearest colors is based on the "locally
- * sorted search" idea described by Heckbert and on the incremental distance
- * calculation described by Spencer W. Thomas in chapter III.1 of Graphics
- * Gems II (James Arvo, ed. Academic Press, 1991). Thomas points out that
- * the distances from a given colormap entry to each cell of the histogram can
- * be computed quickly using an incremental method: the differences between
- * distances to adjacent cells themselves differ by a constant. This allows a
- * fairly fast implementation of the "brute force" approach of computing the
- * distance from every colormap entry to every histogram cell. Unfortunately,
- * it needs a work array to hold the best-distance-so-far for each histogram
- * cell (because the inner loop has to be over cells, not colormap entries).
- * The work array elements have to be INT32s, so the work array would need
- * 256Kb at our recommended precision. This is not feasible in DOS machines.
- *
- * To get around these problems, we apply Thomas' method to compute the
- * nearest colors for only the cells within a small subbox of the histogram.
- * The work array need be only as big as the subbox, so the memory usage
- * problem is solved. Furthermore, we need not fill subboxes that are never
- * referenced in pass2; many images use only part of the color gamut, so a
- * fair amount of work is saved. An additional advantage of this
- * approach is that we can apply Heckbert's locality criterion to quickly
- * eliminate colormap entries that are far away from the subbox; typically
- * three-fourths of the colormap entries are rejected by Heckbert's criterion,
- * and we need not compute their distances to individual cells in the subbox.
- * The speed of this approach is heavily influenced by the subbox size: too
- * small means too much overhead, too big loses because Heckbert's criterion
- * can't eliminate as many colormap entries. Empirically the best subbox
- * size seems to be about 1/512th of the histogram (1/8th in each direction).
- *
- * Thomas' article also describes a refined method which is asymptotically
- * faster than the brute-force method, but it is also far more complex and
- * cannot efficiently be applied to small subboxes. It is therefore not
- * useful for programs intended to be portable to DOS machines. On machines
- * with plenty of memory, filling the whole histogram in one shot with Thomas'
- * refined method might be faster than the present code --- but then again,
- * it might not be any faster, and it's certainly more complicated.
- */
-
-
-/* log2(histogram cells in update box) for each axis; this can be adjusted */
-#define BOX_C0_LOG (HIST_C0_BITS-3)
-#define BOX_C1_LOG (HIST_C1_BITS-3)
-#define BOX_C2_LOG (HIST_C2_BITS-3)
-
-#define BOX_C0_ELEMS (1<<BOX_C0_LOG) /* # of hist cells in update box */
-#define BOX_C1_ELEMS (1<<BOX_C1_LOG)
-#define BOX_C2_ELEMS (1<<BOX_C2_LOG)
-
-#define BOX_C0_SHIFT (C0_SHIFT + BOX_C0_LOG)
-#define BOX_C1_SHIFT (C1_SHIFT + BOX_C1_LOG)
-#define BOX_C2_SHIFT (C2_SHIFT + BOX_C2_LOG)
-
-
-/*
- * The next three routines implement inverse colormap filling. They could
- * all be folded into one big routine, but splitting them up this way saves
- * some stack space (the mindist[] and bestdist[] arrays need not coexist)
- * and may allow some compilers to produce better code by registerizing more
- * inner-loop variables.
- */
-
-LOCAL (int)
-find_nearby_colors (
-#ifdef ORIGINAL_LIB_JPEG
- j_decompress_ptr cinfo,
-#else
- gdImagePtr oim, gdImagePtr nim, my_cquantize_ptr cquantize,
-#endif
- int minc0, int minc1, int minc2, JSAMPLE colorlist[])
-/* Locate the colormap entries close enough to an update box to be candidates
- * for the nearest entry to some cell(s) in the update box. The update box
- * is specified by the center coordinates of its first cell. The number of
- * candidate colormap entries is returned, and their colormap indexes are
- * placed in colorlist[].
- * This routine uses Heckbert's "locally sorted search" criterion to select
- * the colors that need further consideration.
- */
-{
-#ifdef ORIGINAL_LIB_JPEG
- int numcolors = cinfo->actual_number_of_colors;
-#else
- int numcolors = nim->colorsTotal;
-#endif
- int maxc0, maxc1, maxc2;
- int centerc0, centerc1, centerc2;
- int i, x, ncolors;
- INT32 minmaxdist, min_dist, max_dist, tdist;
- INT32 mindist[MAXNUMCOLORS]; /* min distance to colormap entry i */
-
- /* Compute true coordinates of update box's upper corner and center.
- * Actually we compute the coordinates of the center of the upper-corner
- * histogram cell, which are the upper bounds of the volume we care about.
- * Note that since ">>" rounds down, the "center" values may be closer to
- * min than to max; hence comparisons to them must be "<=", not "<".
- */
- maxc0 = minc0 + ((1 << BOX_C0_SHIFT) - (1 << C0_SHIFT));
- centerc0 = (minc0 + maxc0) >> 1;
- maxc1 = minc1 + ((1 << BOX_C1_SHIFT) - (1 << C1_SHIFT));
- centerc1 = (minc1 + maxc1) >> 1;
- maxc2 = minc2 + ((1 << BOX_C2_SHIFT) - (1 << C2_SHIFT));
- centerc2 = (minc2 + maxc2) >> 1;
-
- /* For each color in colormap, find:
- * 1. its minimum squared-distance to any point in the update box
- * (zero if color is within update box);
- * 2. its maximum squared-distance to any point in the update box.
- * Both of these can be found by considering only the corners of the box.
- * We save the minimum distance for each color in mindist[];
- * only the smallest maximum distance is of interest.
- */
- minmaxdist = 0x7FFFFFFFL;
-
- for (i = 0; i < numcolors; i++)
- {
- /* We compute the squared-c0-distance term, then add in the other two. */
-#ifdef ORIGINAL_LIB_JPEG
- x = GETJSAMPLE (cinfo->colormap[0][i]);
-#else
- x = nim->red[i];
-#endif
- if (x < minc0)
- {
- tdist = (x - minc0) * C0_SCALE;
- min_dist = tdist * tdist;
- tdist = (x - maxc0) * C0_SCALE;
- max_dist = tdist * tdist;
- }
- else if (x > maxc0)
- {
- tdist = (x - maxc0) * C0_SCALE;
- min_dist = tdist * tdist;
- tdist = (x - minc0) * C0_SCALE;
- max_dist = tdist * tdist;
- }
- else
- {
- /* within cell range so no contribution to min_dist */
- min_dist = 0;
- if (x <= centerc0)
- {
- tdist = (x - maxc0) * C0_SCALE;
- max_dist = tdist * tdist;
- }
- else
- {
- tdist = (x - minc0) * C0_SCALE;
- max_dist = tdist * tdist;
- }
- }
-
-#ifdef ORIGINAL_LIB_JPEG
- x = GETJSAMPLE (cinfo->colormap[1][i]);
-#else
- x = nim->green[i];
-#endif
- if (x < minc1)
- {
- tdist = (x - minc1) * C1_SCALE;
- min_dist += tdist * tdist;
- tdist = (x - maxc1) * C1_SCALE;
- max_dist += tdist * tdist;
- }
- else if (x > maxc1)
- {
- tdist = (x - maxc1) * C1_SCALE;
- min_dist += tdist * tdist;
- tdist = (x - minc1) * C1_SCALE;
- max_dist += tdist * tdist;
- }
- else
- {
- /* within cell range so no contribution to min_dist */
- if (x <= centerc1)
- {
- tdist = (x - maxc1) * C1_SCALE;
- max_dist += tdist * tdist;
- }
- else
- {
- tdist = (x - minc1) * C1_SCALE;
- max_dist += tdist * tdist;
- }
- }
-
-#ifdef ORIGINAL_LIB_JPEG
- x = GETJSAMPLE (cinfo->colormap[2][i]);
-#else
- x = nim->blue[i];
-#endif
- if (x < minc2)
- {
- tdist = (x - minc2) * C2_SCALE;
- min_dist += tdist * tdist;
- tdist = (x - maxc2) * C2_SCALE;
- max_dist += tdist * tdist;
- }
- else if (x > maxc2)
- {
- tdist = (x - maxc2) * C2_SCALE;
- min_dist += tdist * tdist;
- tdist = (x - minc2) * C2_SCALE;
- max_dist += tdist * tdist;
- }
- else
- {
- /* within cell range so no contribution to min_dist */
- if (x <= centerc2)
- {
- tdist = (x - maxc2) * C2_SCALE;
- max_dist += tdist * tdist;
- }
- else
- {
- tdist = (x - minc2) * C2_SCALE;
- max_dist += tdist * tdist;
- }
- }
-
- mindist[i] = min_dist; /* save away the results */
- if (max_dist < minmaxdist)
- minmaxdist = max_dist;
- }
-
- /* Now we know that no cell in the update box is more than minmaxdist
- * away from some colormap entry. Therefore, only colors that are
- * within minmaxdist of some part of the box need be considered.
- */
- ncolors = 0;
- for (i = 0; i < numcolors; i++)
- {
- if (mindist[i] <= minmaxdist)
- colorlist[ncolors++] = (JSAMPLE) i;
- }
- return ncolors;
-}
-
-
-LOCAL (void) find_best_colors (
-#ifdef ORIGINAL_LIB_JPEG
- j_decompress_ptr cinfo,
-#else
- gdImagePtr oim, gdImagePtr nim, my_cquantize_ptr cquantize,
-#endif
- int minc0, int minc1, int minc2,
- int numcolors, JSAMPLE colorlist[],
- JSAMPLE bestcolor[])
-/* Find the closest colormap entry for each cell in the update box,
- * given the list of candidate colors prepared by find_nearby_colors.
- * Return the indexes of the closest entries in the bestcolor[] array.
- * This routine uses Thomas' incremental distance calculation method to
- * find the distance from a colormap entry to successive cells in the box.
- */
-{
- int ic0, ic1, ic2;
- int i, icolor;
- register INT32 *bptr; /* pointer into bestdist[] array */
- JSAMPLE *cptr; /* pointer into bestcolor[] array */
- INT32 dist0, dist1; /* initial distance values */
- register INT32 dist2; /* current distance in inner loop */
- INT32 xx0, xx1; /* distance increments */
- register INT32 xx2;
- INT32 inc0, inc1, inc2; /* initial values for increments */
- /* This array holds the distance to the nearest-so-far color for each cell */
- INT32 bestdist[BOX_C0_ELEMS * BOX_C1_ELEMS * BOX_C2_ELEMS];
-
- /* Initialize best-distance for each cell of the update box */
- bptr = bestdist;
- for (i = BOX_C0_ELEMS * BOX_C1_ELEMS * BOX_C2_ELEMS - 1; i >= 0; i--)
- *bptr++ = 0x7FFFFFFFL;
-
- /* For each color selected by find_nearby_colors,
- * compute its distance to the center of each cell in the box.
- * If that's less than best-so-far, update best distance and color number.
- */
-
- /* Nominal steps between cell centers ("x" in Thomas article) */
-#define STEP_C0 ((1 << C0_SHIFT) * C0_SCALE)
-#define STEP_C1 ((1 << C1_SHIFT) * C1_SCALE)
-#define STEP_C2 ((1 << C2_SHIFT) * C2_SCALE)
-
- for (i = 0; i < numcolors; i++)
- {
- int r, g, b;
-#ifdef ORIGINAL_LIB_JPEG
-
- icolor = GETJSAMPLE (colorlist[i]);
- r = GETJSAMPLE (cinfo->colormap[0][icolor]);
- g = GETJSAMPLE (cinfo->colormap[1][icolor]);
- b = GETJSAMPLE (cinfo->colormap[2][icolor]);
-#else
- icolor = colorlist[i];
- r = nim->red[icolor];
- g = nim->green[icolor];
- b = nim->blue[icolor];
-#endif
-
- /* Compute (square of) distance from minc0/c1/c2 to this color */
- inc0 = (minc0 - r) * C0_SCALE;
- dist0 = inc0 * inc0;
- inc1 = (minc1 - g) * C1_SCALE;
- dist0 += inc1 * inc1;
- inc2 = (minc2 - b) * C2_SCALE;
- dist0 += inc2 * inc2;
- /* Form the initial difference increments */
- inc0 = inc0 * (2 * STEP_C0) + STEP_C0 * STEP_C0;
- inc1 = inc1 * (2 * STEP_C1) + STEP_C1 * STEP_C1;
- inc2 = inc2 * (2 * STEP_C2) + STEP_C2 * STEP_C2;
- /* Now loop over all cells in box, updating distance per Thomas method */
- bptr = bestdist;
- cptr = bestcolor;
- xx0 = inc0;
- for (ic0 = BOX_C0_ELEMS - 1; ic0 >= 0; ic0--)
- {
- dist1 = dist0;
- xx1 = inc1;
- for (ic1 = BOX_C1_ELEMS - 1; ic1 >= 0; ic1--)
- {
- dist2 = dist1;
- xx2 = inc2;
- for (ic2 = BOX_C2_ELEMS - 1; ic2 >= 0; ic2--)
- {
- if (dist2 < *bptr)
- {
- *bptr = dist2;
- *cptr = (JSAMPLE) icolor;
- }
- dist2 += xx2;
- xx2 += 2 * STEP_C2 * STEP_C2;
- bptr++;
- cptr++;
- }
- dist1 += xx1;
- xx1 += 2 * STEP_C1 * STEP_C1;
- }
- dist0 += xx0;
- xx0 += 2 * STEP_C0 * STEP_C0;
- }
- }
-}
-
-
-LOCAL (void)
-fill_inverse_cmap (
-#ifdef ORIGINAL_LIB_JPEG
- j_decompress_ptr cinfo,
-#else
- gdImagePtr oim, gdImagePtr nim, my_cquantize_ptr cquantize,
-#endif
- int c0, int c1, int c2)
-/* Fill the inverse-colormap entries in the update box that contains */
-/* histogram cell c0/c1/c2. (Only that one cell MUST be filled, but */
-/* we can fill as many others as we wish.) */
-{
-#ifdef ORIGINAL_LIB_JPEG
- my_cquantize_ptr cquantize = (my_cquantize_ptr) cinfo->cquantize;
-#endif
- hist3d histogram = cquantize->histogram;
- int minc0, minc1, minc2; /* lower left corner of update box */
- int ic0, ic1, ic2;
- register JSAMPLE *cptr; /* pointer into bestcolor[] array */
- register histptr cachep; /* pointer into main cache array */
- /* This array lists the candidate colormap indexes. */
- JSAMPLE colorlist[MAXNUMCOLORS];
- int numcolors; /* number of candidate colors */
- /* This array holds the actually closest colormap index for each cell. */
- JSAMPLE bestcolor[BOX_C0_ELEMS * BOX_C1_ELEMS * BOX_C2_ELEMS];
-
- /* Convert cell coordinates to update box ID */
- c0 >>= BOX_C0_LOG;
- c1 >>= BOX_C1_LOG;
- c2 >>= BOX_C2_LOG;
-
- /* Compute true coordinates of update box's origin corner.
- * Actually we compute the coordinates of the center of the corner
- * histogram cell, which are the lower bounds of the volume we care about.
- */
- minc0 = (c0 << BOX_C0_SHIFT) + ((1 << C0_SHIFT) >> 1);
- minc1 = (c1 << BOX_C1_SHIFT) + ((1 << C1_SHIFT) >> 1);
- minc2 = (c2 << BOX_C2_SHIFT) + ((1 << C2_SHIFT) >> 1);
-
- /* Determine which colormap entries are close enough to be candidates
- * for the nearest entry to some cell in the update box.
- */
-#ifdef ORIGINAL_LIB_JPEG
- numcolors = find_nearby_colors (cinfo, minc0, minc1, minc2, colorlist);
-
- /* Determine the actually nearest colors. */
- find_best_colors (cinfo, minc0, minc1, minc2, numcolors, colorlist,
- bestcolor);
-#else
- numcolors =
- find_nearby_colors (oim, nim, cquantize, minc0, minc1, minc2, colorlist);
- find_best_colors (oim, nim, cquantize, minc0, minc1, minc2, numcolors,
- colorlist, bestcolor);
-#endif
-
- /* Save the best color numbers (plus 1) in the main cache array */
- c0 <<= BOX_C0_LOG; /* convert ID back to base cell indexes */
- c1 <<= BOX_C1_LOG;
- c2 <<= BOX_C2_LOG;
- cptr = bestcolor;
- for (ic0 = 0; ic0 < BOX_C0_ELEMS; ic0++)
- {
- for (ic1 = 0; ic1 < BOX_C1_ELEMS; ic1++)
- {
- cachep = &histogram[c0 + ic0][c1 + ic1][c2];
- for (ic2 = 0; ic2 < BOX_C2_ELEMS; ic2++)
- {
-#ifdef ORIGINAL_LIB_JPEG
- *cachep++ = (histcell) (GETJSAMPLE (*cptr++) + 1);
-#else
- *cachep++ = (histcell) ((*cptr++) + 1);
-#endif
- }
- }
- }
-}
-
-
-/*
- * Map some rows of pixels to the output colormapped representation.
- */
-
-METHODDEF (void)
-#ifndef ORIGINAL_LIB_JPEG
-pass2_no_dither (gdImagePtr oim, gdImagePtr nim, my_cquantize_ptr cquantize)
-{
- register int *inptr;
- register unsigned char *outptr;
- int width = oim->sx;
- int num_rows = oim->sy;
-#else
-pass2_no_dither (j_decompress_ptr cinfo,
- JSAMPARRAY input_buf, JSAMPARRAY output_buf, int num_rows)
-/* This version performs no dithering */
-{
- my_cquantize_ptr cquantize = (my_cquantize_ptr) cinfo->cquantize;
- register JSAMPROW inptr, outptr;
- JDIMENSION width = cinfo->output_width;
-#endif
- hist3d histogram = cquantize->histogram;
- register int c0, c1, c2;
- int row;
- JDIMENSION col;
- register histptr cachep;
-
-
- for (row = 0; row < num_rows; row++)
- {
- inptr = input_buf[row];
- outptr = output_buf[row];
- for (col = width; col > 0; col--)
- {
- /* get pixel value and index into the cache */
- int r, g, b;
-#ifdef ORIGINAL_LIB_JPEG
- r = GETJSAMPLE (*inptr++);
- g = GETJSAMPLE (*inptr++);
- b = GETJSAMPLE (*inptr++);
-#else
- r = gdTrueColorGetRed (*inptr);
- g = gdTrueColorGetGreen (*inptr);
- /*
- 2.0.24: inptr must not be incremented until after
- transparency check, if any. Thanks to "Super Pikeman."
- */
- b = gdTrueColorGetBlue (*inptr);
-
- /* If the pixel is transparent, we assign it the palette index that
- * will later be added at the end of the palette as the transparent
- * index. */
- if ((oim->transparent >= 0) && (oim->transparent == *(inptr - 1)))
- {
- *outptr++ = nim->colorsTotal;
- inptr++;
- continue;
- }
- inptr++;
-#endif
- c0 = r >> C0_SHIFT;
- c1 = g >> C1_SHIFT;
- c2 = b >> C2_SHIFT;
- cachep = &histogram[c0][c1][c2];
- /* If we have not seen this color before, find nearest colormap entry */
- /* and update the cache */
- if (*cachep == 0)
-#ifdef ORIGINAL_LIB_JPEG
- fill_inverse_cmap (cinfo, c0, c1, c2);
-#else
- fill_inverse_cmap (oim, nim, cquantize, c0, c1, c2);
-#endif
- /* Now emit the colormap index for this cell */
-#ifdef ORIGINAL_LIB_JPEG
- *outptr++ = (JSAMPLE) (*cachep - 1);
-#else
- *outptr++ = (*cachep - 1);
-#endif
- }
- }
-}
-
-
-METHODDEF (void)
-#ifndef ORIGINAL_LIB_JPEG
-pass2_fs_dither (gdImagePtr oim, gdImagePtr nim, my_cquantize_ptr cquantize)
-{
-#else
-pass2_fs_dither (j_decompress_ptr cinfo,
- JSAMPARRAY input_buf, JSAMPARRAY output_buf, int num_rows)
-/* This version performs Floyd-Steinberg dithering */
-{
- my_cquantize_ptr cquantize = (my_cquantize_ptr) cinfo->cquantize;
- JSAMPROW inptr; /* => current input pixel */
-#endif
- hist3d histogram = cquantize->histogram;
- register LOCFSERROR cur0, cur1, cur2; /* current error or pixel value */
- LOCFSERROR belowerr0, belowerr1, belowerr2; /* error for pixel below cur */
- LOCFSERROR bpreverr0, bpreverr1, bpreverr2; /* error for below/prev col */
- register FSERRPTR errorptr; /* => fserrors[] at column before current */
- histptr cachep;
- int dir; /* +1 or -1 depending on direction */
- int dir3; /* 3*dir, for advancing inptr & errorptr */
- int row;
- JDIMENSION col;
-#ifdef ORIGINAL_LIB_JPEG
- JSAMPROW outptr; /* => current output pixel */
- JDIMENSION width = cinfo->output_width;
- JSAMPLE *range_limit = cinfo->sample_range_limit;
- JSAMPROW colormap0 = cinfo->colormap[0];
- JSAMPROW colormap1 = cinfo->colormap[1];
- JSAMPROW colormap2 = cinfo->colormap[2];
-#else
- int *inptr; /* => current input pixel */
- unsigned char *outptr; /* => current output pixel */
- int width = oim->sx;
- int num_rows = oim->sy;
- int *colormap0 = nim->red;
- int *colormap1 = nim->green;
- int *colormap2 = nim->blue;
-#endif
- int *error_limit = cquantize->error_limiter;
-
-
- SHIFT_TEMPS for (row = 0; row < num_rows; row++)
- {
- inptr = input_buf[row];
- outptr = output_buf[row];
- if (cquantize->on_odd_row)
- {
- /* work right to left in this row */
- inptr += (width - 1) * 3; /* so point to rightmost pixel */
- outptr += width - 1;
- dir = -1;
- dir3 = -3;
- errorptr = cquantize->fserrors + (width + 1) * 3; /* => entry after last column */
-#ifdef ORIGINAL_LIB_JPEG_REVERSE_ODD_ROWS
- cquantize->on_odd_row = FALSE; /* flip for next time */
-#endif
- }
- else
- {
- /* work left to right in this row */
- dir = 1;
- dir3 = 3;
- errorptr = cquantize->fserrors; /* => entry before first real column */
-#ifdef ORIGINAL_LIB_JPEG_REVERSE_ODD_ROWS
- cquantize->on_odd_row = TRUE; /* flip for next time */
-#endif
- }
- /* Preset error values: no error propagated to first pixel from left */
- cur0 = cur1 = cur2 = 0;
- /* and no error propagated to row below yet */
- belowerr0 = belowerr1 = belowerr2 = 0;
- bpreverr0 = bpreverr1 = bpreverr2 = 0;
-
- for (col = width; col > 0; col--)
- {
-
- /* If this pixel is transparent, we want to assign it to the special
- * transparency color index past the end of the palette rather than
- * go through matching / dithering. */
- if ((oim->transparent >= 0) && (*inptr == oim->transparent))
- {
- *outptr = nim->colorsTotal;
- errorptr[0] = 0;
- errorptr[1] = 0;
- errorptr[2] = 0;
- errorptr[3] = 0;
- inptr += dir;
- outptr += dir;
- errorptr += dir3;
- continue;
- }
- /* curN holds the error propagated from the previous pixel on the
- * current line. Add the error propagated from the previous line
- * to form the complete error correction term for this pixel, and
- * round the error term (which is expressed * 16) to an integer.
- * RIGHT_SHIFT rounds towards minus infinity, so adding 8 is correct
- * for either sign of the error value.
- * Note: errorptr points to *previous* column's array entry.
- */
- cur0 = RIGHT_SHIFT (cur0 + errorptr[dir3 + 0] + 8, 4);
- cur1 = RIGHT_SHIFT (cur1 + errorptr[dir3 + 1] + 8, 4);
- cur2 = RIGHT_SHIFT (cur2 + errorptr[dir3 + 2] + 8, 4);
- /* Limit the error using transfer function set by init_error_limit.
- * See comments with init_error_limit for rationale.
- */
- cur0 = error_limit[cur0];
- cur1 = error_limit[cur1];
- cur2 = error_limit[cur2];
- /* Form pixel value + error, and range-limit to 0..MAXJSAMPLE.
- * The maximum error is +- MAXJSAMPLE (or less with error limiting);
- * this sets the required size of the range_limit array.
- */
-#ifdef ORIGINAL_LIB_JPEG
- cur0 += GETJSAMPLE (inptr[0]);
- cur1 += GETJSAMPLE (inptr[1]);
- cur2 += GETJSAMPLE (inptr[2]);
- cur0 = GETJSAMPLE (range_limit[cur0]);
- cur1 = GETJSAMPLE (range_limit[cur1]);
- cur2 = GETJSAMPLE (range_limit[cur2]);
-#else
- cur0 += gdTrueColorGetRed (*inptr);
- cur1 += gdTrueColorGetGreen (*inptr);
- cur2 += gdTrueColorGetBlue (*inptr);
- range_limit (cur0);
- range_limit (cur1);
- range_limit (cur2);
-#endif
-
- /* Index into the cache with adjusted pixel value */
- cachep =
- &histogram[cur0 >> C0_SHIFT][cur1 >> C1_SHIFT][cur2 >> C2_SHIFT];
- /* If we have not seen this color before, find nearest colormap */
- /* entry and update the cache */
- if (*cachep == 0)
-#ifdef ORIGINAL_LIB_JPEG
- fill_inverse_cmap (cinfo, cur0 >> C0_SHIFT, cur1 >> C1_SHIFT,
- cur2 >> C2_SHIFT);
-#else
- fill_inverse_cmap (oim, nim, cquantize, cur0 >> C0_SHIFT,
- cur1 >> C1_SHIFT, cur2 >> C2_SHIFT);
-#endif
- /* Now emit the colormap index for this cell */
- {
- register int pixcode = *cachep - 1;
- *outptr = (JSAMPLE) pixcode;
- /* Compute representation error for this pixel */
-#define GETJSAMPLE
- cur0 -= GETJSAMPLE (colormap0[pixcode]);
- cur1 -= GETJSAMPLE (colormap1[pixcode]);
- cur2 -= GETJSAMPLE (colormap2[pixcode]);
-#undef GETJSAMPLE
- }
- /* Compute error fractions to be propagated to adjacent pixels.
- * Add these into the running sums, and simultaneously shift the
- * next-line error sums left by 1 column.
- */
- {
- register LOCFSERROR bnexterr, delta;
-
- bnexterr = cur0; /* Process component 0 */
- delta = cur0 * 2;
- cur0 += delta; /* form error * 3 */
- errorptr[0] = (FSERROR) (bpreverr0 + cur0);
- cur0 += delta; /* form error * 5 */
- bpreverr0 = belowerr0 + cur0;
- belowerr0 = bnexterr;
- cur0 += delta; /* form error * 7 */
- bnexterr = cur1; /* Process component 1 */
- delta = cur1 * 2;
- cur1 += delta; /* form error * 3 */
- errorptr[1] = (FSERROR) (bpreverr1 + cur1);
- cur1 += delta; /* form error * 5 */
- bpreverr1 = belowerr1 + cur1;
- belowerr1 = bnexterr;
- cur1 += delta; /* form error * 7 */
- bnexterr = cur2; /* Process component 2 */
- delta = cur2 * 2;
- cur2 += delta; /* form error * 3 */
- errorptr[2] = (FSERROR) (bpreverr2 + cur2);
- cur2 += delta; /* form error * 5 */
- bpreverr2 = belowerr2 + cur2;
- belowerr2 = bnexterr;
- cur2 += delta; /* form error * 7 */
- }
- /* At this point curN contains the 7/16 error value to be propagated
- * to the next pixel on the current line, and all the errors for the
- * next line have been shifted over. We are therefore ready to move on.
- */
-#ifdef ORIGINAL_LIB_JPEG
- inptr += dir3; /* Advance pixel pointers to next column */
-#else
- inptr += dir; /* Advance pixel pointers to next column */
-#endif
- outptr += dir;
- errorptr += dir3; /* advance errorptr to current column */
- }
- /* Post-loop cleanup: we must unload the final error values into the
- * final fserrors[] entry. Note we need not unload belowerrN because
- * it is for the dummy column before or after the actual array.
- */
- errorptr[0] = (FSERROR) bpreverr0; /* unload prev errs into array */
- errorptr[1] = (FSERROR) bpreverr1;
- errorptr[2] = (FSERROR) bpreverr2;
- }
-}
-
-
-/*
- * Initialize the error-limiting transfer function (lookup table).
- * The raw F-S error computation can potentially compute error values of up to
- * +- MAXJSAMPLE. But we want the maximum correction applied to a pixel to be
- * much less, otherwise obviously wrong pixels will be created. (Typical
- * effects include weird fringes at color-area boundaries, isolated bright
- * pixels in a dark area, etc.) The standard advice for avoiding this problem
- * is to ensure that the "corners" of the color cube are allocated as output
- * colors; then repeated errors in the same direction cannot cause cascading
- * error buildup. However, that only prevents the error from getting
- * completely out of hand; Aaron Giles reports that error limiting improves
- * the results even with corner colors allocated.
- * A simple clamping of the error values to about +- MAXJSAMPLE/8 works pretty
- * well, but the smoother transfer function used below is even better. Thanks
- * to Aaron Giles for this idea.
- */
-
-LOCAL (void)
-#ifdef ORIGINAL_LIB_JPEG
-init_error_limit (j_decompress_ptr cinfo)
-#else
-init_error_limit (gdImagePtr oim, gdImagePtr nim, my_cquantize_ptr cquantize)
-#endif
-/* Allocate and fill in the error_limiter table */
-{
- int *table;
- int in, out;
-#ifdef ORIGINAL_LIB_JPEG
- my_cquantize_ptr cquantize = (my_cquantize_ptr) cinfo->cquantize;
- table = (int *) (*cinfo->mem->alloc_small)
- ((j_common_ptr) cinfo, JPOOL_IMAGE, (MAXJSAMPLE * 2 + 1) * SIZEOF (int));
-#else
- cquantize->error_limiter_storage =
- (int *) safe_emalloc ((MAXJSAMPLE * 2 + 1), sizeof (int), 0);
- if (!cquantize->error_limiter_storage)
- {
- return;
- }
- table = cquantize->error_limiter_storage;
-#endif
-
- table += MAXJSAMPLE; /* so can index -MAXJSAMPLE .. +MAXJSAMPLE */
- cquantize->error_limiter = table;
-
-#define STEPSIZE ((MAXJSAMPLE+1)/16)
- /* Map errors 1:1 up to +- MAXJSAMPLE/16 */
- out = 0;
- for (in = 0; in < STEPSIZE; in++, out++)
- {
- table[in] = out;
- table[-in] = -out;
- }
- /* Map errors 1:2 up to +- 3*MAXJSAMPLE/16 */
- for (; in < STEPSIZE * 3; in++, out += (in & 1) ? 0 : 1)
- {
- table[in] = out;
- table[-in] = -out;
- }
- /* Clamp the rest to final out value (which is (MAXJSAMPLE+1)/8) */
- for (; in <= MAXJSAMPLE; in++)
- {
- table[in] = out;
- table[-in] = -out;
- }
-#undef STEPSIZE
-}
-
-
-/*
- * Finish up at the end of each pass.
- */
-
-#ifdef ORIGINAL_LIB_JPEG
-METHODDEF (void)
-finish_pass1 (j_decompress_ptr cinfo)
-{
- my_cquantize_ptr cquantize = (my_cquantize_ptr) cinfo->cquantize;
-
- /* Select the representative colors and fill in cinfo->colormap */
- cinfo->colormap = cquantize->sv_colormap;
- select_colors (cinfo, cquantize->desired);
- /* Force next pass to zero the color index table */
- cquantize->needs_zeroed = TRUE;
-}
-
-
-METHODDEF (void)
-finish_pass2 (j_decompress_ptr cinfo)
-{
- /* no work */
-}
-
-/*
- * Initialize for each processing pass.
- */
-
-METHODDEF (void)
-start_pass_2_quant (j_decompress_ptr cinfo, boolean is_pre_scan)
-{
- my_cquantize_ptr cquantize = (my_cquantize_ptr) cinfo->cquantize;
- hist3d histogram = cquantize->histogram;
- int i;
-
- /* Only F-S dithering or no dithering is supported. */
- /* If user asks for ordered dither, give him F-S. */
- if (cinfo->dither_mode != JDITHER_NONE)
- cinfo->dither_mode = JDITHER_FS;
-
- if (is_pre_scan)
- {
- /* Set up method pointers */
- cquantize->pub.color_quantize = prescan_quantize;
- cquantize->pub.finish_pass = finish_pass1;
- cquantize->needs_zeroed = TRUE; /* Always zero histogram */
- }
- else
- {
- /* Set up method pointers */
- if (cinfo->dither_mode == JDITHER_FS)
- cquantize->pub.color_quantize = pass2_fs_dither;
- else
- cquantize->pub.color_quantize = pass2_no_dither;
- cquantize->pub.finish_pass = finish_pass2;
-
- /* Make sure color count is acceptable */
- i = cinfo->actual_number_of_colors;
- if (i < 1)
- ERREXIT1 (cinfo, JERR_QUANT_FEW_COLORS, 1);
- if (i > MAXNUMCOLORS)
- ERREXIT1 (cinfo, JERR_QUANT_MANY_COLORS, MAXNUMCOLORS);
-
- if (cinfo->dither_mode == JDITHER_FS)
- {
- size_t arraysize = (size_t) ((cinfo->output_width + 2) *
- (3 * SIZEOF (FSERROR)));
- /* Allocate Floyd-Steinberg workspace if we didn't already. */
- if (cquantize->fserrors == NULL)
- cquantize->fserrors = (FSERRPTR) (*cinfo->mem->alloc_large)
- ((j_common_ptr) cinfo, JPOOL_IMAGE, arraysize);
- /* Initialize the propagated errors to zero. */
- jzero_far ((void FAR *) cquantize->fserrors, arraysize);
- /* Make the error-limit table if we didn't already. */
- if (cquantize->error_limiter == NULL)
- init_error_limit (cinfo);
- cquantize->on_odd_row = FALSE;
- }
-
- }
- /* Zero the histogram or inverse color map, if necessary */
- if (cquantize->needs_zeroed)
- {
- for (i = 0; i < HIST_C0_ELEMS; i++)
- {
- jzero_far ((void FAR *) histogram[i],
- HIST_C1_ELEMS * HIST_C2_ELEMS * SIZEOF (histcell));
- }
- cquantize->needs_zeroed = FALSE;
- }
-}
-
-
-/*
- * Switch to a new external colormap between output passes.
- */
-
-METHODDEF (void)
-new_color_map_2_quant (j_decompress_ptr cinfo)
-{
- my_cquantize_ptr cquantize = (my_cquantize_ptr) cinfo->cquantize;
-
- /* Reset the inverse color map */
- cquantize->needs_zeroed = TRUE;
-}
-#else
-static void
-zeroHistogram (hist3d histogram)
-{
- int i;
- /* Zero the histogram or inverse color map */
- for (i = 0; i < HIST_C0_ELEMS; i++)
- {
- memset (histogram[i],
- 0, HIST_C1_ELEMS * HIST_C2_ELEMS * sizeof (histcell));
- }
-}
-#endif
-
-static void gdImageTrueColorToPaletteBody (gdImagePtr oim, int dither, int colorsWanted, gdImagePtr *cimP);
-
-gdImagePtr gdImageCreatePaletteFromTrueColor (gdImagePtr im, int dither, int colorsWanted)
-{
- gdImagePtr nim;
- gdImageTrueColorToPaletteBody(im, dither, colorsWanted, &nim);
- return nim;
-}
-
-void gdImageTrueColorToPalette (gdImagePtr im, int dither, int colorsWanted)
-{
- gdImageTrueColorToPaletteBody(im, dither, colorsWanted, 0);
-}
-
-/*
- * Module initialization routine for 2-pass color quantization.
- */
-
-#ifdef ORIGINAL_LIB_JPEG
-GLOBAL (void)
-jinit_2pass_quantizer (j_decompress_ptr cinfo)
-#else
-static void gdImageTrueColorToPaletteBody (gdImagePtr oim, int dither, int colorsWanted, gdImagePtr *cimP)
-#endif
-{
- my_cquantize_ptr cquantize = NULL;
- int i;
-
-#ifndef ORIGINAL_LIB_JPEG
- /* Allocate the JPEG palette-storage */
- size_t arraysize;
- int maxColors = gdMaxColors;
- gdImagePtr nim;
- if (cimP) {
- nim = gdImageCreate(oim->sx, oim->sy);
- *cimP = nim;
- if (!nim) {
- return;
- }
- } else {
- nim = oim;
- }
- if (!oim->trueColor)
- {
- /* (Almost) nothing to do! */
- if (cimP) {
- gdImageCopy(nim, oim, 0, 0, 0, 0, oim->sx, oim->sy);
- *cimP = nim;
- }
- return;
- }
-
- /* If we have a transparent color (the alphaless mode of transparency), we
- * must reserve a palette entry for it at the end of the palette. */
- if (oim->transparent >= 0)
- {
- maxColors--;
- }
- if (colorsWanted > maxColors)
- {
- colorsWanted = maxColors;
- }
- if (!cimP) {
- nim->pixels = gdCalloc (sizeof (unsigned char *), oim->sy);
- if (!nim->pixels)
- {
- /* No can do */
- goto outOfMemory;
- }
- for (i = 0; (i < nim->sy); i++)
- {
- nim->pixels[i] = gdCalloc (sizeof (unsigned char *), oim->sx);
- if (!nim->pixels[i])
- {
- goto outOfMemory;
- }
- }
- }
-#endif
-
-#ifdef ORIGINAL_LIB_JPEG
- cquantize = (my_cquantize_ptr)
- (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE,
- SIZEOF (my_cquantizer));
- cinfo->cquantize = (struct jpeg_color_quantizer *) cquantize;
- cquantize->pub.start_pass = start_pass_2_quant;
- cquantize->pub.new_color_map = new_color_map_2_quant;
- /* Make sure jdmaster didn't give me a case I can't handle */
- if (cinfo->out_color_components != 3)
- ERREXIT (cinfo, JERR_NOTIMPL);
-#else
- cquantize = (my_cquantize_ptr) gdCalloc (sizeof (my_cquantizer), 1);
- if (!cquantize)
- {
- /* No can do */
- goto outOfMemory;
- }
-#endif
- cquantize->fserrors = NULL; /* flag optional arrays not allocated */
- cquantize->error_limiter = NULL;
-
-
- /* Allocate the histogram/inverse colormap storage */
-#ifdef ORIGINAL_LIB_JPEG
- cquantize->histogram = (hist3d) (*cinfo->mem->alloc_small)
- ((j_common_ptr) cinfo, JPOOL_IMAGE, HIST_C0_ELEMS * SIZEOF (hist2d));
- for (i = 0; i < HIST_C0_ELEMS; i++)
- {
- cquantize->histogram[i] = (hist2d) (*cinfo->mem->alloc_large)
- ((j_common_ptr) cinfo, JPOOL_IMAGE,
- HIST_C1_ELEMS * HIST_C2_ELEMS * SIZEOF (histcell));
- }
- cquantize->needs_zeroed = TRUE; /* histogram is garbage now */
-#else
- cquantize->histogram = (hist3d) safe_emalloc (HIST_C0_ELEMS, sizeof (hist2d), 0);
- for (i = 0; i < HIST_C0_ELEMS; i++)
- {
- cquantize->histogram[i] =
- (hist2d) safe_emalloc (HIST_C1_ELEMS * HIST_C2_ELEMS, sizeof (histcell), 0);
- if (!cquantize->histogram[i])
- {
- goto outOfMemory;
- }
- }
-#endif
-
-#ifdef ORIGINAL_LIB_JPEG
- /* Allocate storage for the completed colormap, if required.
- * We do this now since it is FAR storage and may affect
- * the memory manager's space calculations.
- */
- if (cinfo->enable_2pass_quant)
- {
- /* Make sure color count is acceptable */
- int desired = cinfo->desired_number_of_colors;
- /* Lower bound on # of colors ... somewhat arbitrary as long as > 0 */
- if (desired < 8)
- ERREXIT1 (cinfo, JERR_QUANT_FEW_COLORS, 8);
- /* Make sure colormap indexes can be represented by JSAMPLEs */
- if (desired > MAXNUMCOLORS)
- ERREXIT1 (cinfo, JERR_QUANT_MANY_COLORS, MAXNUMCOLORS);
- cquantize->sv_colormap = (*cinfo->mem->alloc_sarray)
- ((j_common_ptr) cinfo, JPOOL_IMAGE, (JDIMENSION) desired,
- (JDIMENSION) 3);
- cquantize->desired = desired;
- }
- else
- cquantize->sv_colormap = NULL;
-
- /* Only F-S dithering or no dithering is supported. */
- /* If user asks for ordered dither, give him F-S. */
- if (cinfo->dither_mode != JDITHER_NONE)
- cinfo->dither_mode = JDITHER_FS;
-
- /* Allocate Floyd-Steinberg workspace if necessary.
- * This isn't really needed until pass 2, but again it is FAR storage.
- * Although we will cope with a later change in dither_mode,
- * we do not promise to honor max_memory_to_use if dither_mode changes.
- */
- if (cinfo->dither_mode == JDITHER_FS)
- {
- cquantize->fserrors = (FSERRPTR) (*cinfo->mem->alloc_large)
- ((j_common_ptr) cinfo, JPOOL_IMAGE,
- (size_t) ((cinfo->output_width + 2) * (3 * SIZEOF (FSERROR))));
- /* Might as well create the error-limiting table too. */
- init_error_limit (cinfo);
- }
-#else
-
- cquantize->fserrors = (FSERRPTR) safe_emalloc (3, sizeof (FSERROR), 0);
- init_error_limit (oim, nim, cquantize);
- arraysize = (size_t) ((nim->sx + 2) * (3 * sizeof (FSERROR)));
- /* Allocate Floyd-Steinberg workspace. */
- cquantize->fserrors = gdRealloc(cquantize->fserrors, arraysize);
- memset(cquantize->fserrors, 0, arraysize);
- if (!cquantize->fserrors)
- {
- goto outOfMemory;
- }
- cquantize->on_odd_row = FALSE;
-
- /* Do the work! */
- zeroHistogram (cquantize->histogram);
- prescan_quantize (oim, nim, cquantize);
- /* TBB 2.0.5: pass colorsWanted, not 256! */
- select_colors (oim, nim, cquantize, colorsWanted);
- zeroHistogram (cquantize->histogram);
- if (dither)
- {
- pass2_fs_dither (oim, nim, cquantize);
- }
- else
- {
- pass2_no_dither (oim, nim, cquantize);
- }
-#if 0 /* 2.0.12; we no longer attempt full alpha in palettes */
- if (cquantize->transparentIsPresent)
- {
- int mt = -1;
- int mtIndex = -1;
- for (i = 0; (i < im->colorsTotal); i++)
- {
- if (im->alpha[i] > mt)
- {
- mtIndex = i;
- mt = im->alpha[i];
- }
- }
- for (i = 0; (i < im->colorsTotal); i++)
- {
- if (im->alpha[i] == mt)
- {
- im->alpha[i] = gdAlphaTransparent;
- }
- }
- }
- if (cquantize->opaqueIsPresent)
- {
- int mo = 128;
- int moIndex = -1;
- for (i = 0; (i < im->colorsTotal); i++)
- {
- if (im->alpha[i] < mo)
- {
- moIndex = i;
- mo = im->alpha[i];
- }
- }
- for (i = 0; (i < im->colorsTotal); i++)
- {
- if (im->alpha[i] == mo)
- {
- im->alpha[i] = gdAlphaOpaque;
- }
- }
- }
-#endif
-
- /* If we had a 'transparent' color, increment the color count so it's
- * officially in the palette and convert the transparent variable to point to
- * an index rather than a color (Its data already exists and transparent
- * pixels have already been mapped to it by this point, it is done late as to
- * avoid color matching / dithering with it). */
- if (oim->transparent >= 0)
- {
- nim->transparent = nim->colorsTotal;
- nim->colorsTotal++;
- }
-
- /* Success! Get rid of the truecolor image data. */
- if (!cimP) {
- oim->trueColor = 0;
- /* Junk the truecolor pixels */
- for (i = 0; i < oim->sy; i++)
- {
- gdFree (oim->tpixels[i]);
- }
- gdFree (oim->tpixels);
- oim->tpixels = 0;
- }
- goto success;
- /* Tediously free stuff. */
-outOfMemory:
- if (oim->trueColor)
- {
- if (!cimP) {
- /* On failure only */
- for (i = 0; i < nim->sy; i++)
- {
- if (nim->pixels[i])
- {
- gdFree (nim->pixels[i]);
- }
- }
- if (nim->pixels)
- {
- gdFree (nim->pixels);
- }
- nim->pixels = 0;
- } else {
- gdImageDestroy(nim);
- *cimP = 0;
- }
- }
-success:
- for (i = 0; i < HIST_C0_ELEMS; i++)
- {
- if (cquantize->histogram[i])
- {
- gdFree (cquantize->histogram[i]);
- }
- }
- if (cquantize->histogram)
- {
- gdFree (cquantize->histogram);
- }
- if (cquantize->fserrors)
- {
- gdFree (cquantize->fserrors);
- }
- if (cquantize->error_limiter_storage)
- {
- gdFree (cquantize->error_limiter_storage);
- }
- if (cquantize)
- {
- gdFree (cquantize);
- }
-
-#endif
-}
-
-
-/* bring the palette colors in im2 to be closer to im1
- *
- */
-int gdImageColorMatch (gdImagePtr im1, gdImagePtr im2)
-{
- unsigned long *buf; /* stores our calculations */
- unsigned long *bp; /* buf ptr */
- int color, rgb;
- int x,y;
- int count;
-
- if( !im1->trueColor ) {
- return -1; /* im1 must be True Color */
- }
- if( im2->trueColor ) {
- return -2; /* im2 must be indexed */
- }
- if( (im1->sx != im2->sx) || (im1->sy != im2->sy) ) {
- return -3; /* the images are meant to be the same dimensions */
- }
-
- buf = (unsigned long *)safe_emalloc(sizeof(unsigned long), 5 * im2->colorsTotal, 0);
- memset( buf, 0, sizeof(unsigned long) * 5 * im2->colorsTotal );
-
- for (x=0; x<im1->sx; x++) {
- for( y=0; y<im1->sy; y++ ) {
- color = im2->pixels[y][x];
- rgb = im1->tpixels[y][x];
- bp = buf + (color * 5);
- (*(bp++))++;
- *(bp++) += gdTrueColorGetRed(rgb);
- *(bp++) += gdTrueColorGetGreen(rgb);
- *(bp++) += gdTrueColorGetBlue(rgb);
- *(bp++) += gdTrueColorGetAlpha(rgb);
- }
- }
- bp = buf;
- for (color=0; color<im2->colorsTotal; color++) {
- count = *(bp++);
- if( count > 0 ) {
- im2->red[color] = *(bp++) / count;
- im2->green[color] = *(bp++) / count;
- im2->blue[color] = *(bp++) / count;
- im2->alpha[color] = *(bp++) / count;
- } else {
- bp += 4;
- }
- }
- gdFree(buf);
- return 0;
-}
-
-
-#endif
diff --git a/ext/gd/libgd/gd_wbmp.c b/ext/gd/libgd/gd_wbmp.c
deleted file mode 100644
index 5389695e28..0000000000
--- a/ext/gd/libgd/gd_wbmp.c
+++ /dev/null
@@ -1,210 +0,0 @@
-/*
- WBMP: Wireless Bitmap Type 0: B/W, Uncompressed Bitmap
- Specification of the WBMP format can be found in the file:
- SPEC-WAESpec-19990524.pdf
- You can download the WAP specification on: http://www.wapforum.com/
-
- gd_wbmp.c
-
- Copyright (C) Johan Van den Brande (johan@vandenbrande.com)
-
- Fixed: gdImageWBMPPtr, gdImageWBMP
-
- Recoded: gdImageWBMPCtx for use with my wbmp library
- (wbmp library included, but you can find the latest distribution
- at http://www.vandenbrande.com/wbmp)
-
- Implemented: gdImageCreateFromWBMPCtx, gdImageCreateFromWBMP
-
- ---------------------------------------------------------------------------
-
- Parts of this code are from Maurice Smurlo.
-
-
- ** Copyright (C) Maurice Szmurlo --- T-SIT --- January 2000
- ** (Maurice.Szmurlo@info.unicaen.fr)
-
- ** Permission to use, copy, modify, and distribute this software and its
- ** documentation for any purpose and without fee is hereby granted, provided
- ** that the above copyright notice appear in all copies and that both that
- ** copyright notice and this permission notice appear in supporting
- ** documentation. This software is provided "as is" without express or
- ** implied warranty.
-
- ---------------------------------------------------------------------------
- Parts od this code are inspired by 'pbmtowbmp.c' and 'wbmptopbm.c' by
- Terje Sannum <terje@looplab.com>.
- **
- ** Permission to use, copy, modify, and distribute this software and its
- ** documentation for any purpose and without fee is hereby granted, provided
- ** that the above copyright notice appear in all copies and that both that
- ** copyright notice and this permission notice appear in supporting
- ** documentation. This software is provided "as is" without express or
- ** implied warranty.
- **
- ---------------------------------------------------------------------------
-
- Todo:
-
- gdCreateFromWBMP function for reading WBMP files
-
- ----------------------------------------------------------------------------
- */
-
-#include <gd.h>
-#include <gdfonts.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <limits.h>
-
-#include "wbmp.h"
-
-
-/* gd_putout
- ** ---------
- ** Wrapper around gdPutC for use with writewbmp
- **
- */
-void gd_putout (int i, void *out)
-{
- gdPutC(i, (gdIOCtx *) out);
-}
-
-
-/* gd_getin
- ** --------
- ** Wrapper around gdGetC for use with readwbmp
- **
- */
-int gd_getin (void *in)
-{
- return (gdGetC((gdIOCtx *) in));
-}
-
-
-/* gdImageWBMPCtx
- ** --------------
- ** Write the image as a wbmp file
- ** Parameters are:
- ** image: gd image structure;
- ** fg: the index of the foreground color. any other value will be
- ** considered as background and will not be written
- ** out: the stream where to write
- */
-void gdImageWBMPCtx (gdImagePtr image, int fg, gdIOCtx * out)
-{
- int x, y, pos;
- Wbmp *wbmp;
-
- /* create the WBMP */
- if ((wbmp = createwbmp (gdImageSX (image), gdImageSY (image), WBMP_WHITE)) == NULL) {
- php_gd_error("Could not create WBMP\n");
- }
-
- /* fill up the WBMP structure */
- pos = 0;
- for (y = 0; y < gdImageSY(image); y++) {
- for (x = 0; x < gdImageSX(image); x++) {
- if (gdImageGetPixel (image, x, y) == fg) {
- wbmp->bitmap[pos] = WBMP_BLACK;
- }
- pos++;
- }
- }
-
- /* write the WBMP to a gd file descriptor */
- if (writewbmp (wbmp, &gd_putout, out)) {
- php_gd_error("Could not save WBMP\n");
- }
- /* des submitted this bugfix: gdFree the memory. */
- freewbmp(wbmp);
-}
-
-/* gdImageCreateFromWBMPCtx
- ** ------------------------
- ** Create a gdImage from a WBMP file input from an gdIOCtx
- */
-gdImagePtr gdImageCreateFromWBMPCtx (gdIOCtx * infile)
-{
- /* FILE *wbmp_file; */
- Wbmp *wbmp;
- gdImagePtr im = NULL;
- int black, white;
- int col, row, pos;
-
- if (readwbmp (&gd_getin, infile, &wbmp)) {
- return NULL;
- }
-
- if (!(im = gdImageCreate (wbmp->width, wbmp->height))) {
- freewbmp (wbmp);
- return NULL;
- }
-
- /* create the background color */
- white = gdImageColorAllocate(im, 255, 255, 255);
- /* create foreground color */
- black = gdImageColorAllocate(im, 0, 0, 0);
-
- /* fill in image (in a wbmp 1 = white/ 0 = black) */
- pos = 0;
- for (row = 0; row < wbmp->height; row++) {
- for (col = 0; col < wbmp->width; col++) {
- if (wbmp->bitmap[pos++] == WBMP_WHITE) {
- gdImageSetPixel(im, col, row, white);
- } else {
- gdImageSetPixel(im, col, row, black);
- }
- }
- }
-
- freewbmp(wbmp);
-
- return im;
-}
-
-/* gdImageCreateFromWBMP
- ** ---------------------
- */
-gdImagePtr gdImageCreateFromWBMP (FILE * inFile)
-{
- gdImagePtr im;
- gdIOCtx *in = gdNewFileCtx(inFile);
- im = gdImageCreateFromWBMPCtx(in);
- in->gd_free(in);
-
- return im;
-}
-
-gdImagePtr gdImageCreateFromWBMPPtr (int size, void *data)
-{
- gdImagePtr im;
- gdIOCtx *in = gdNewDynamicCtxEx(size, data, 0);
- im = gdImageCreateFromWBMPCtx(in);
- in->gd_free(in);
- return im;
-}
-
-/* gdImageWBMP
- ** -----------
- */
-void gdImageWBMP (gdImagePtr im, int fg, FILE * outFile)
-{
- gdIOCtx *out = gdNewFileCtx(outFile);
- gdImageWBMPCtx(im, fg, out);
- out->gd_free(out);
-}
-
-/* gdImageWBMPPtr
- ** --------------
- */
-void * gdImageWBMPPtr (gdImagePtr im, int *size, int fg)
-{
- void *rv;
- gdIOCtx *out = gdNewDynamicCtx(2048, NULL);
- gdImageWBMPCtx(im, fg, out);
- rv = gdDPExtractData(out, size);
- out->gd_free(out);
-
- return rv;
-}
diff --git a/ext/gd/libgd/gdcache.c b/ext/gd/libgd/gdcache.c
deleted file mode 100644
index a6e507a4bb..0000000000
--- a/ext/gd/libgd/gdcache.c
+++ /dev/null
@@ -1,214 +0,0 @@
-#include "gd.h"
-#include "gdhelpers.h"
-
-#ifdef HAVE_LIBTTF
-#define NEED_CACHE 1
-#else
-#ifdef HAVE_LIBFREETYPE
-#define NEED_CACHE 1
-#endif
-#endif
-
-#ifdef NEED_CACHE
-
-/*
- * gdcache.c
- *
- * Caches of pointers to user structs in which the least-recently-used
- * element is replaced in the event of a cache miss after the cache has
- * reached a given size.
- *
- * John Ellson (ellson@graphviz.org) Oct 31, 1997
- *
- * Test this with:
- * gcc -o gdcache -g -Wall -DTEST gdcache.c
- *
- * The cache is implemented by a singly-linked list of elements
- * each containing a pointer to a user struct that is being managed by
- * the cache.
- *
- * The head structure has a pointer to the most-recently-used
- * element, and elements are moved to this position in the list each
- * time they are used. The head also contains pointers to three
- * user defined functions:
- * - a function to test if a cached userdata matches some keydata
- * - a function to provide a new userdata struct to the cache
- * if there has been a cache miss.
- * - a function to release a userdata struct when it is
- * no longer being managed by the cache
- *
- * In the event of a cache miss the cache is allowed to grow up to
- * a specified maximum size. After the maximum size is reached then
- * the least-recently-used element is discarded to make room for the
- * new. The most-recently-returned value is always left at the
- * beginning of the list after retrieval.
- *
- * In the current implementation the cache is traversed by a linear
- * search from most-recent to least-recent. This linear search
- * probably limits the usefulness of this implementation to cache
- * sizes of a few tens of elements.
- */
-
-#include "gdcache.h"
-
-/*********************************************************/
-/* implementation */
-/*********************************************************/
-
-
-/* create a new cache */
-gdCache_head_t *
-gdCacheCreate (
- int size,
- gdCacheTestFn_t gdCacheTest,
- gdCacheFetchFn_t gdCacheFetch,
- gdCacheReleaseFn_t gdCacheRelease)
-{
- gdCache_head_t *head;
-
- head = (gdCache_head_t *) gdPMalloc(sizeof (gdCache_head_t));
- head->mru = NULL;
- head->size = size;
- head->gdCacheTest = gdCacheTest;
- head->gdCacheFetch = gdCacheFetch;
- head->gdCacheRelease = gdCacheRelease;
- return head;
-}
-
-void
-gdCacheDelete (gdCache_head_t * head)
-{
- gdCache_element_t *elem, *prev;
-
- elem = head->mru;
- while (elem)
- {
- (*(head->gdCacheRelease)) (elem->userdata);
- prev = elem;
- elem = elem->next;
- gdPFree ((char *) prev);
- }
- gdPFree ((char *) head);
-}
-
-void *
-gdCacheGet (gdCache_head_t * head, void *keydata)
-{
- int i = 0;
- gdCache_element_t *elem, *prev = NULL, *prevprev = NULL;
- void *userdata;
-
- elem = head->mru;
- while (elem)
- {
- if ((*(head->gdCacheTest)) (elem->userdata, keydata))
- {
- if (i)
- { /* if not already most-recently-used */
- /* relink to top of list */
- prev->next = elem->next;
- elem->next = head->mru;
- head->mru = elem;
- }
- return elem->userdata;
- }
- prevprev = prev;
- prev = elem;
- elem = elem->next;
- i++;
- }
- userdata = (*(head->gdCacheFetch)) (&(head->error), keydata);
- if (!userdata)
- {
- /* if there was an error in the fetch then don't cache */
- return NULL;
- }
- if (i < head->size)
- { /* cache still growing - add new elem */
- elem = (gdCache_element_t *) gdPMalloc(sizeof (gdCache_element_t));
- }
- else
- { /* cache full - replace least-recently-used */
- /* preveprev becomes new end of list */
- prevprev->next = NULL;
- elem = prev;
- (*(head->gdCacheRelease)) (elem->userdata);
- }
- /* relink to top of list */
- elem->next = head->mru;
- head->mru = elem;
- elem->userdata = userdata;
- return userdata;
-}
-
-
-
-/*********************************************************/
-/* test stub */
-/*********************************************************/
-
-
-#ifdef TEST
-
-#include <stdio.h>
-
-typedef struct
-{
- int key;
- int value;
-}
-key_value_t;
-
-static int
-cacheTest (void *map, void *key)
-{
- return (((key_value_t *) map)->key == *(int *) key);
-}
-
-static void *
-cacheFetch (char **error, void *key)
-{
- key_value_t *map;
-
- map = (key_value_t *) gdMalloc (sizeof (key_value_t));
- map->key = *(int *) key;
- map->value = 3;
-
- *error = NULL;
- return (void *) map;
-}
-
-static void
-cacheRelease (void *map)
-{
- gdFree ((char *) map);
-}
-
-int
-main (char *argv[], int argc)
-{
- gdCache_head_t *cacheTable;
- int elem, key;
-
- cacheTable = gdCacheCreate (3, cacheTest, cacheFetch, cacheRelease);
-
- key = 20;
- elem = *(int *) gdCacheGet (cacheTable, &key);
- key = 30;
- elem = *(int *) gdCacheGet (cacheTable, &key);
- key = 40;
- elem = *(int *) gdCacheGet (cacheTable, &key);
- key = 50;
- elem = *(int *) gdCacheGet (cacheTable, &key);
- key = 30;
- elem = *(int *) gdCacheGet (cacheTable, &key);
- key = 30;
- elem = *(int *) gdCacheGet (cacheTable, &key);
-
- gdCacheDelete (cacheTable);
-
- return 0;
-}
-
-#endif /* TEST */
-#endif /* HAVE_LIBTTF */
diff --git a/ext/gd/libgd/gdcache.h b/ext/gd/libgd/gdcache.h
deleted file mode 100644
index 6a6e892447..0000000000
--- a/ext/gd/libgd/gdcache.h
+++ /dev/null
@@ -1,86 +0,0 @@
-/*
- * gdcache.h
- *
- * Caches of pointers to user structs in which the least-recently-used
- * element is replaced in the event of a cache miss after the cache has
- * reached a given size.
- *
- * John Ellson (ellson@graphviz.org) Oct 31, 1997
- *
- * Test this with:
- * gcc -o gdcache -g -Wall -DTEST gdcache.c
- *
- * The cache is implemented by a singly-linked list of elements
- * each containing a pointer to a user struct that is being managed by
- * the cache.
- *
- * The head structure has a pointer to the most-recently-used
- * element, and elements are moved to this position in the list each
- * time they are used. The head also contains pointers to three
- * user defined functions:
- * - a function to test if a cached userdata matches some keydata
- * - a function to provide a new userdata struct to the cache
- * if there has been a cache miss.
- * - a function to release a userdata struct when it is
- * no longer being managed by the cache
- *
- * In the event of a cache miss the cache is allowed to grow up to
- * a specified maximum size. After the maximum size is reached then
- * the least-recently-used element is discarded to make room for the
- * new. The most-recently-returned value is always left at the
- * beginning of the list after retrieval.
- *
- * In the current implementation the cache is traversed by a linear
- * search from most-recent to least-recent. This linear search
- * probably limits the usefulness of this implementation to cache
- * sizes of a few tens of elements.
- */
-
-/*********************************************************/
-/* header */
-/*********************************************************/
-
-#include <stdlib.h>
-#ifdef HAVE_MALLOC_H
- #include <malloc.h>
-#endif
-#ifndef NULL
-#define NULL (void *)0
-#endif
-
-/* user defined function templates */
-typedef int (*gdCacheTestFn_t)(void *userdata, void *keydata);
-typedef void *(*gdCacheFetchFn_t)(char **error, void *keydata);
-typedef void (*gdCacheReleaseFn_t)(void *userdata);
-
-/* element structure */
-typedef struct gdCache_element_s gdCache_element_t;
-struct gdCache_element_s {
- gdCache_element_t *next;
- void *userdata;
-};
-
-/* head structure */
-typedef struct gdCache_head_s gdCache_head_t;
-struct gdCache_head_s {
- gdCache_element_t *mru;
- int size;
- char *error;
- gdCacheTestFn_t gdCacheTest;
- gdCacheFetchFn_t gdCacheFetch;
- gdCacheReleaseFn_t gdCacheRelease;
-};
-
-/* function templates */
-gdCache_head_t *
-gdCacheCreate(
- int size,
- gdCacheTestFn_t gdCacheTest,
- gdCacheFetchFn_t gdCacheFetch,
- gdCacheReleaseFn_t gdCacheRelease );
-
-void
-gdCacheDelete( gdCache_head_t *head );
-
-void *
-gdCacheGet( gdCache_head_t *head, void *keydata );
diff --git a/ext/gd/libgd/gddemo.c b/ext/gd/libgd/gddemo.c
deleted file mode 100644
index a5ceeb53b8..0000000000
--- a/ext/gd/libgd/gddemo.c
+++ /dev/null
@@ -1,118 +0,0 @@
-#include <stdio.h>
-#include "gd.h"
-#include "gdfontg.h"
-#include "gdfonts.h"
-
-int
-main (void)
-{
- /* Input and output files */
- FILE *in;
- FILE *out;
-
- /* Input and output images */
- gdImagePtr im_in = 0, im_out = 0;
-
- /* Brush image */
- gdImagePtr brush;
-
- /* Color indexes */
- int white;
- int blue;
- int red;
- int green;
-
- /* Points for polygon */
- gdPoint points[3];
-
- /* Create output image, 256 by 256 pixels, true color. */
- im_out = gdImageCreateTrueColor (256, 256);
- /* First color allocated is background. */
- white = gdImageColorAllocate (im_out, 255, 255, 255);
-
- /* Set transparent color. */
- gdImageColorTransparent (im_out, white);
-
- /* Try to load demoin.png and paste part of it into the
- output image. */
- in = fopen ("demoin.png", "rb");
- if (!in)
- {
- fprintf (stderr, "Can't load source image; this demo\n");
- fprintf (stderr, "is much more impressive if demoin.png\n");
- fprintf (stderr, "is available.\n");
- im_in = 0;
- }
- else
- {
- im_in = gdImageCreateFromPng (in);
- fclose (in);
- /* Now copy, and magnify as we do so */
- gdImageCopyResized (im_out, im_in,
- 32, 32, 0, 0, 192, 192, 255, 255);
- }
- red = gdImageColorAllocate (im_out, 255, 0, 0);
- green = gdImageColorAllocate (im_out, 0, 255, 0);
- blue = gdImageColorAllocate (im_out, 0, 0, 255);
- /* Rectangle */
- gdImageLine (im_out, 16, 16, 240, 16, green);
- gdImageLine (im_out, 240, 16, 240, 240, green);
- gdImageLine (im_out, 240, 240, 16, 240, green);
- gdImageLine (im_out, 16, 240, 16, 16, green);
- /* Circle */
- gdImageArc (im_out, 128, 128, 60, 20, 0, 720, blue);
- /* Arc */
- gdImageArc (im_out, 128, 128, 40, 40, 90, 270, blue);
- /* Flood fill: doesn't do much on a continuously
- variable tone jpeg original. */
- gdImageFill (im_out, 8, 8, blue);
- /* Polygon */
- points[0].x = 64;
- points[0].y = 0;
- points[1].x = 0;
- points[1].y = 128;
- points[2].x = 128;
- points[2].y = 128;
- gdImageFilledPolygon (im_out, points, 3, green);
- /* Brush. A fairly wild example also involving a line style! */
- if (im_in)
- {
- int style[8];
- brush = gdImageCreateTrueColor (16, 16);
- gdImageCopyResized (brush, im_in,
- 0, 0, 0, 0,
- gdImageSX (brush), gdImageSY (brush),
- gdImageSX (im_in), gdImageSY (im_in));
- gdImageSetBrush (im_out, brush);
- /* With a style, so they won't overprint each other.
- Normally, they would, yielding a fat-brush effect. */
- style[0] = 0;
- style[1] = 0;
- style[2] = 0;
- style[3] = 0;
- style[4] = 0;
- style[5] = 0;
- style[6] = 0;
- style[7] = 1;
- gdImageSetStyle (im_out, style, 8);
- /* Draw the styled, brushed line */
- gdImageLine (im_out, 0, 255, 255, 0, gdStyledBrushed);
- }
- /* Text */
- gdImageString (im_out, gdFontGiant, 32, 32,
- (unsigned char *) "hi", red);
- gdImageStringUp (im_out, gdFontSmall, 64, 64,
- (unsigned char *) "hi", red);
- /* Make output image interlaced (progressive, in the case of JPEG) */
- gdImageInterlace (im_out, 1);
- out = fopen ("demoout.png", "wb");
- /* Write PNG */
- gdImagePng (im_out, out);
- fclose (out);
- gdImageDestroy (im_out);
- if (im_in)
- {
- gdImageDestroy (im_in);
- }
- return 0;
-}
diff --git a/ext/gd/libgd/gdfontg.c b/ext/gd/libgd/gdfontg.c
deleted file mode 100644
index 61c8c2710e..0000000000
--- a/ext/gd/libgd/gdfontg.c
+++ /dev/null
@@ -1,4389 +0,0 @@
-
-
-/*
- This is a header file for gd font, generated using
- bdftogd version 0.51 by Jan Pazdziora, adelton@fi.muni.cz
- from bdf font
- -Misc-Fixed-Bold-R-Normal-Sans-15-140-75-75-C-90-ISO8859-2
- at Mon Jan 26 14:45:58 1998.
- The original bdf was holding following copyright:
- "Libor Skarvada, libor@informatics.muni.cz"
- */
-
-
-#include "gdfontg.h"
-
-char gdFontGiantData[] =
-{
-/* Char 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, 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, 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, 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, 0, 0, 0, 0,
-
-/* Char 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, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 1, 1, 1, 1, 1, 1, 1, 1, 0,
- 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 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,
-
-/* Char 2 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 0, 1, 0, 1, 0, 1, 0, 0,
- 0, 1, 0, 1, 0, 1, 0, 1, 0,
- 1, 0, 1, 0, 1, 0, 1, 0, 0,
- 0, 1, 0, 1, 0, 1, 0, 1, 0,
- 1, 0, 1, 0, 1, 0, 1, 0, 0,
- 0, 1, 0, 1, 0, 1, 0, 1, 0,
- 1, 0, 1, 0, 1, 0, 1, 0, 0,
- 0, 1, 0, 1, 0, 1, 0, 1, 0,
- 1, 0, 1, 0, 1, 0, 1, 0, 0,
- 0, 1, 0, 1, 0, 1, 0, 1, 0,
- 1, 0, 1, 0, 1, 0, 1, 0, 0,
- 0, 1, 0, 1, 0, 1, 0, 1, 0,
- 1, 0, 1, 0, 1, 0, 1, 0, 0,
- 0, 1, 0, 1, 0, 1, 0, 1, 0,
-
-/* Char 3 */
- 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, 1, 0, 0, 1, 1, 0, 0, 0,
- 1, 1, 0, 0, 1, 1, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 0, 0, 0,
- 1, 1, 0, 0, 1, 1, 0, 0, 0,
- 1, 1, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 4 */
- 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, 1, 1, 1, 1, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 5 */
- 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, 1, 1, 1, 1, 0, 0, 0,
- 1, 1, 0, 0, 0, 1, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 1, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 1, 1, 0, 0, 1, 1, 0,
- 0, 0, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 1, 1, 0, 0, 1, 1, 0,
- 0, 0, 1, 1, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 6 */
- 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, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 7 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 0, 1, 1, 1, 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, 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, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 8 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 1, 1, 0,
- 1, 1, 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 1, 1, 0,
- 1, 1, 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 9 */
- 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, 1, 0, 0, 1, 1, 0, 0, 0,
- 1, 1, 1, 0, 1, 1, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 0, 0, 0,
- 1, 1, 0, 1, 1, 1, 0, 0, 0,
- 1, 1, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 10 */
- 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, 1, 0, 0, 1, 1, 0, 0, 0,
- 1, 1, 0, 0, 1, 1, 0, 0, 0,
- 1, 1, 0, 0, 1, 1, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 11 */
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 0, 0, 0, 0,
- 1, 1, 1, 1, 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, 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,
-
-/* Char 12 */
- 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, 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, 1, 1, 1, 1, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
-
-/* Char 13 */
- 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, 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, 1, 1, 1, 1, 1,
- 0, 0, 0, 1, 1, 1, 1, 1, 1,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
-
-/* Char 14 */
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 1, 1, 1, 1,
- 0, 0, 0, 1, 1, 1, 1, 1, 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, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 15 */
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
-
-/* Char 16 */
- 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, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 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, 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, 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,
-
-/* Char 17 */
- 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, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 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, 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, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 18 */
- 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, 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, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 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, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 19 */
- 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, 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, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 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, 0, 0, 0, 0,
-
-/* Char 20 */
- 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, 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, 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, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 21 */
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 1, 1, 1, 1,
- 0, 0, 0, 1, 1, 1, 1, 1, 1,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
-
-/* Char 22 */
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
-
-/* Char 23 */
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 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, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 24 */
- 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, 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, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
-
-/* Char 25 */
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
-
-/* Char 26 */
- 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, 1, 1, 0,
- 0, 0, 0, 1, 1, 1, 0, 0, 0,
- 0, 1, 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 1, 1, 0,
- 1, 1, 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 27 */
- 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, 1, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 1, 1, 1, 0, 0,
- 0, 0, 1, 1, 1, 0, 0, 0, 0,
- 1, 1, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 1, 1, 0,
- 1, 1, 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 28 */
- 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, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 1, 1, 0,
- 1, 1, 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 1, 0, 0, 1, 1, 0, 0,
- 0, 0, 1, 0, 0, 1, 1, 0, 0,
- 0, 0, 1, 0, 0, 1, 1, 0, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 1, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 29 */
- 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, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 1, 1, 0, 0,
- 1, 1, 1, 1, 1, 1, 1, 1, 0,
- 1, 1, 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 1, 1, 0,
- 1, 1, 1, 1, 1, 1, 1, 1, 0,
- 0, 1, 1, 0, 0, 0, 0, 0, 0,
- 1, 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,
-
-/* Char 30 */
- 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, 0, 0, 0,
- 0, 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 1, 1, 0, 0, 1, 1, 0,
- 0, 0, 1, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 0, 0, 0, 0,
- 1, 0, 1, 1, 1, 1, 1, 1, 0,
- 1, 1, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 31 */
- 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, 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, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 32 */
- 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, 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, 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,
- 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, 0, 0, 0,
-
-/* Char 33 */
- 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, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 34 */
- 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, 1, 0, 1, 1, 0, 0,
- 0, 0, 1, 1, 0, 1, 1, 0, 0,
- 0, 0, 1, 1, 0, 1, 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, 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,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 35 */
- 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, 0, 0, 0,
- 0, 1, 1, 0, 1, 1, 0, 0, 0,
- 0, 1, 1, 0, 1, 1, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 1, 1, 0, 1, 1, 0, 0, 0,
- 0, 1, 1, 0, 1, 1, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 1, 1, 0, 1, 1, 0, 0, 0,
- 0, 1, 1, 0, 1, 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,
-
-/* Char 36 */
- 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, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 1, 0, 0,
- 0, 1, 1, 0, 1, 0, 1, 1, 0,
- 0, 1, 1, 0, 1, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 1, 0, 1, 1, 0,
- 0, 1, 1, 0, 1, 0, 1, 1, 0,
- 0, 0, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 37 */
- 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, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 1, 0, 0, 1, 1, 0, 0,
- 1, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 1, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 1, 0, 0,
- 0, 1, 1, 0, 0, 1, 1, 1, 0,
- 0, 1, 1, 0, 0, 1, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 38 */
- 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, 1, 1, 0, 0, 0, 0,
- 0, 1, 1, 0, 1, 1, 0, 0, 0,
- 0, 1, 1, 0, 1, 1, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0, 1, 0,
- 1, 1, 0, 0, 1, 1, 1, 1, 0,
- 1, 1, 0, 0, 0, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 1, 0, 0,
- 0, 1, 1, 1, 1, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 39 */
- 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, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 1, 1, 0, 0, 0,
- 0, 0, 1, 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,
- 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, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 40 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 41 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 42 */
- 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, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 1, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 1, 1, 1, 0, 0, 0, 0,
- 0, 1, 1, 0, 1, 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, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 43 */
- 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, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 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,
-
-/* Char 44 */
- 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, 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, 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,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 1, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 45 */
- 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, 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, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 1, 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, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 46 */
- 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, 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, 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,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 47 */
- 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, 1, 0,
- 0, 0, 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0, 0, 0,
- 1, 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,
-
-/* Char 48 */
- 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, 1, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 49 */
- 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, 1, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 50 */
- 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, 1, 1, 1, 0, 0, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 51 */
- 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, 1, 1, 1, 1, 0, 0, 0,
- 1, 1, 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 1, 1, 0, 0,
- 0, 1, 1, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 52 */
- 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, 1, 0, 0,
- 0, 0, 0, 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 1, 1, 0, 1, 1, 0, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 1, 1, 0, 0,
- 1, 1, 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 53 */
- 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, 1, 1, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 1, 1, 1, 0, 0, 0,
- 1, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 54 */
- 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, 1, 1, 1, 0, 0, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 1, 1, 1, 0, 0, 0,
- 1, 1, 1, 0, 0, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 55 */
- 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, 1, 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 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,
-
-/* Char 56 */
- 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, 1, 1, 1, 0, 0, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 57 */
- 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, 1, 1, 1, 0, 0, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 1, 1, 1, 0,
- 0, 0, 1, 1, 1, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 1, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 58 */
- 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, 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, 1, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 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, 1, 1, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 59 */
- 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, 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, 1, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 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, 1, 1, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 1, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 60 */
- 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, 1, 0, 0,
- 0, 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 61 */
- 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, 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, 1, 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 1, 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, 0, 0, 0, 0, 0,
-
-/* Char 62 */
- 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, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0, 0, 0,
- 1, 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,
-
-/* Char 63 */
- 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, 1, 1, 1, 1, 0, 0,
- 0, 1, 1, 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 64 */
- 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, 1, 1, 1, 0, 0, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 1, 1, 0,
- 1, 1, 0, 1, 1, 0, 1, 1, 0,
- 1, 1, 0, 1, 1, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 1, 1, 0,
- 0, 0, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 65 */
- 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, 1, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 1, 1, 1, 1, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 66 */
- 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, 1, 1, 1, 1, 1, 0, 0, 0,
- 1, 1, 0, 0, 0, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 1, 1, 0, 0,
- 1, 1, 1, 1, 1, 1, 0, 0, 0,
- 1, 1, 0, 0, 0, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 1, 1, 0, 0,
- 1, 1, 1, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 67 */
- 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, 1, 1, 1, 1, 0, 0,
- 0, 1, 1, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 0, 1, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 1, 0,
- 0, 1, 1, 0, 0, 0, 1, 1, 0,
- 0, 0, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 68 */
- 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, 1, 1, 1, 1, 1, 0, 0, 0,
- 1, 1, 0, 0, 0, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 1, 1, 0, 0,
- 1, 1, 1, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 69 */
- 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, 1, 1, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 70 */
- 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, 1, 1, 1, 1, 1, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 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,
-
-/* Char 71 */
- 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, 1, 1, 1, 1, 0, 0,
- 0, 1, 1, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 1, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 0, 1, 1, 0,
- 0, 0, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 72 */
- 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, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 1, 1, 1, 1, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 73 */
- 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, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 74 */
- 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, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 1, 1, 0, 0,
- 0, 1, 0, 0, 0, 1, 1, 0, 0,
- 0, 1, 1, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 75 */
- 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, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0, 0, 0,
- 1, 1, 0, 1, 1, 0, 0, 0, 0,
- 1, 1, 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 1, 1, 0, 0, 0, 0,
- 1, 1, 0, 0, 1, 1, 0, 0, 0,
- 1, 1, 0, 0, 0, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 76 */
- 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, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 77 */
- 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, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 1, 0, 0, 1, 1, 1, 0,
- 1, 1, 1, 1, 1, 1, 1, 1, 0,
- 1, 1, 0, 1, 1, 0, 1, 1, 0,
- 1, 1, 0, 1, 1, 0, 1, 1, 0,
- 1, 1, 0, 1, 1, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 78 */
- 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, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 1, 0, 0, 0, 1, 1, 0,
- 1, 1, 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 1, 1, 0, 1, 1, 0,
- 1, 1, 0, 1, 1, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 1, 1, 0,
- 1, 1, 0, 0, 0, 1, 1, 1, 0,
- 1, 1, 0, 0, 0, 1, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 79 */
- 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, 1, 1, 1, 0, 0, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 80 */
- 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, 1, 1, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 1, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 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,
-
-/* Char 81 */
- 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, 1, 1, 1, 0, 0, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 1, 1, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 1, 1, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 82 */
- 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, 1, 1, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 1, 1, 1, 1, 1, 0, 0,
- 1, 1, 1, 1, 1, 0, 0, 0, 0,
- 1, 1, 0, 0, 1, 1, 0, 0, 0,
- 1, 1, 0, 0, 0, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 83 */
- 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, 1, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 84 */
- 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, 1, 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 85 */
- 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, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 86 */
- 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, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 87 */
- 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, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 1, 1, 0, 1, 1, 0,
- 1, 1, 0, 1, 1, 0, 1, 1, 0,
- 1, 1, 0, 1, 1, 0, 1, 1, 0,
- 1, 1, 1, 1, 1, 1, 1, 1, 0,
- 1, 1, 1, 0, 0, 1, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 88 */
- 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, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 89 */
- 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, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 90 */
- 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, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 91 */
- 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, 1, 1, 1, 1, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 92 */
- 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, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 93 */
- 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, 1, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 94 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 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, 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,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 95 */
- 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, 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, 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,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 96 */
- 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, 1, 1, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 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, 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, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 97 */
- 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, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 1, 0, 0,
- 0, 1, 1, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 1, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 1, 1, 1, 0,
- 0, 1, 1, 1, 1, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 98 */
- 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, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 1, 1, 1, 0, 0, 0,
- 1, 1, 1, 0, 0, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 1, 0, 0, 1, 1, 0, 0,
- 1, 1, 0, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 99 */
- 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, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 1, 0, 0,
- 0, 1, 1, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 1, 1, 0,
- 0, 0, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 100 */
- 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, 1, 0,
- 0, 0, 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 1, 1, 1, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 1, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 1, 1, 1, 0,
- 0, 0, 1, 1, 1, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 101 */
- 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, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 1, 1, 1, 1, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 1, 1, 0,
- 0, 0, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 102 */
- 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, 1, 1, 1, 0, 0,
- 0, 0, 1, 1, 0, 0, 1, 1, 0,
- 0, 0, 1, 1, 0, 0, 1, 1, 0,
- 0, 0, 1, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 103 */
- 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, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 0, 1, 0,
- 1, 1, 0, 0, 0, 1, 1, 1, 0,
- 1, 1, 0, 0, 0, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 1, 1, 0, 0,
- 0, 1, 1, 1, 1, 1, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 1, 1, 0, 0,
-
-/* Char 104 */
- 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, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 1, 1, 1, 0, 0, 0,
- 1, 1, 1, 0, 0, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 105 */
- 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, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 106 */
- 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, 1, 0, 0,
- 0, 0, 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 1, 1, 0, 0,
- 0, 1, 1, 1, 1, 1, 0, 0, 0,
-
-/* Char 107 */
- 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, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 1, 1, 0, 1, 1, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0, 0, 0,
- 0, 1, 1, 0, 1, 1, 0, 0, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 1, 1, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 108 */
- 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, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 109 */
- 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, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 0, 1, 1, 0, 1, 1, 0, 0,
- 1, 1, 0, 1, 1, 0, 1, 1, 0,
- 1, 1, 0, 1, 1, 0, 1, 1, 0,
- 1, 1, 0, 1, 1, 0, 1, 1, 0,
- 1, 1, 0, 1, 1, 0, 1, 1, 0,
- 1, 1, 0, 1, 1, 0, 1, 1, 0,
- 1, 1, 0, 1, 1, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 110 */
- 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, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 1, 1, 1, 0, 0, 0,
- 1, 1, 1, 0, 0, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 111 */
- 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, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 112 */
- 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, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 1, 1, 1, 0, 0, 0,
- 1, 1, 1, 0, 0, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 1, 0, 0, 1, 1, 0, 0,
- 1, 1, 0, 1, 1, 1, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 113 */
- 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, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 1, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 1, 1, 1, 0,
- 0, 0, 1, 1, 1, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 1, 1, 0,
-
-/* Char 114 */
- 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, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 1, 1, 1, 1, 0, 0,
- 0, 1, 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 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,
-
-/* Char 115 */
- 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, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 116 */
- 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, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 1, 1, 0,
- 0, 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 117 */
- 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, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 1, 1, 1, 0,
- 0, 0, 1, 1, 1, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 118 */
- 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, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 119 */
- 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, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 1, 1, 0, 1, 1, 0,
- 1, 1, 0, 1, 1, 0, 1, 1, 0,
- 1, 1, 0, 1, 1, 0, 1, 1, 0,
- 1, 1, 1, 1, 1, 1, 1, 1, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 120 */
- 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, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 121 */
- 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, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 1, 1, 1, 0,
- 0, 0, 1, 1, 1, 0, 1, 1, 0,
- 1, 0, 0, 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 1, 1, 0, 0,
-
-/* Char 122 */
- 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, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 123 */
- 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, 1, 1, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 124 */
- 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, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 125 */
- 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, 1, 1, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 126 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 1, 1, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 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, 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,
- 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,
-
-/* Char 127 */
- 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, 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, 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,
- 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, 0, 0, 0,
-
-/* Char 128 */
- 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, 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, 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,
- 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, 0, 0, 0,
-
-/* Char 129 */
- 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, 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, 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,
- 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, 0, 0, 0,
-
-/* Char 130 */
- 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, 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, 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,
- 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, 0, 0, 0,
-
-/* Char 131 */
- 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, 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, 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,
- 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, 0, 0, 0,
-
-/* Char 132 */
- 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, 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, 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,
- 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, 0, 0, 0,
-
-/* Char 133 */
- 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, 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, 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,
- 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, 0, 0, 0,
-
-/* Char 134 */
- 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, 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, 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,
- 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, 0, 0, 0,
-
-/* Char 135 */
- 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, 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, 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,
- 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, 0, 0, 0,
-
-/* Char 136 */
- 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, 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, 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,
- 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, 0, 0, 0,
-
-/* Char 137 */
- 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, 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, 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,
- 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, 0, 0, 0,
-
-/* Char 138 */
- 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, 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, 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,
- 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, 0, 0, 0,
-
-/* Char 139 */
- 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, 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, 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,
- 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, 0, 0, 0,
-
-/* Char 140 */
- 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, 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, 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,
- 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, 0, 0, 0,
-
-/* Char 141 */
- 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, 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, 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,
- 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, 0, 0, 0,
-
-/* Char 142 */
- 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, 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, 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,
- 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, 0, 0, 0,
-
-/* Char 143 */
- 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, 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, 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,
- 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, 0, 0, 0,
-
-/* Char 144 */
- 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, 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, 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,
- 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, 0, 0, 0,
-
-/* Char 145 */
- 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, 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, 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,
- 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, 0, 0, 0,
-
-/* Char 146 */
- 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, 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, 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,
- 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, 0, 0, 0,
-
-/* Char 147 */
- 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, 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, 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,
- 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, 0, 0, 0,
-
-/* Char 148 */
- 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, 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, 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,
- 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, 0, 0, 0,
-
-/* Char 149 */
- 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, 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, 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,
- 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, 0, 0, 0,
-
-/* Char 150 */
- 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, 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, 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,
- 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, 0, 0, 0,
-
-/* Char 151 */
- 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, 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, 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,
- 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, 0, 0, 0,
-
-/* Char 152 */
- 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, 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, 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,
- 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, 0, 0, 0,
-
-/* Char 153 */
- 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, 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, 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,
- 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, 0, 0, 0,
-
-/* Char 154 */
- 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, 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, 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,
- 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, 0, 0, 0,
-
-/* Char 155 */
- 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, 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, 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,
- 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, 0, 0, 0,
-
-/* Char 156 */
- 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, 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, 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,
- 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, 0, 0, 0,
-
-/* Char 157 */
- 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, 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, 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,
- 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, 0, 0, 0,
-
-/* Char 158 */
- 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, 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, 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,
- 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, 0, 0, 0,
-
-/* Char 159 */
- 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, 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, 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,
- 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, 0, 0, 0,
-
-/* Char 160 */
- 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, 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, 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,
- 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, 0, 0, 0,
-
-/* Char 161 */
- 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, 1, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 1, 1, 1, 1, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 1, 1, 0,
-
-/* Char 162 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 1, 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, 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, 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,
-
-/* Char 163 */
- 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, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 1, 0, 0, 0,
- 0, 1, 1, 0, 1, 1, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 1, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 164 */
- 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, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 1, 1, 0, 1, 1, 0, 0,
- 0, 0, 1, 0, 0, 0, 1, 0, 0,
- 0, 0, 1, 1, 0, 1, 1, 0, 0,
- 0, 1, 1, 1, 1, 1, 1, 1, 0,
- 0, 1, 1, 0, 0, 0, 1, 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, 0, 0, 0, 0, 0,
-
-/* Char 165 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 1, 1, 0, 0, 0,
- 1, 1, 0, 0, 1, 1, 0, 0, 0,
- 1, 1, 0, 1, 1, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 166 */
- 0, 0, 0, 0, 1, 1, 1, 0, 0,
- 0, 0, 1, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 167 */
- 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, 1, 1, 1, 0, 0, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 1, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 1, 0, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 168 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 1, 1, 0, 0, 1, 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, 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,
- 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, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 169 */
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 170 */
- 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, 1, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0, 0, 0, 0,
-
-/* Char 171 */
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 172 */
- 0, 0, 0, 0, 1, 1, 1, 0, 0,
- 0, 0, 1, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 173 */
- 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, 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, 1, 1, 1, 1, 1, 0, 0,
- 0, 1, 1, 1, 1, 1, 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, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 174 */
- 0, 1, 1, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 175 */
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 176 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 0, 1, 1, 1, 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, 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, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 177 */
- 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, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 1, 0, 0,
- 0, 1, 1, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 1, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 1, 1, 1, 0,
- 0, 1, 1, 1, 1, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 1, 1, 1,
-
-/* Char 178 */
- 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, 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, 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,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 1, 1, 0,
- 0, 0, 0, 0, 1, 1, 1, 0, 0,
-
-/* Char 179 */
- 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, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 1, 0, 0,
- 0, 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0, 0, 0,
- 0, 1, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 180 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 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, 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, 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, 0, 0, 0, 0, 0,
-
-/* Char 181 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 0, 0, 1, 1, 0,
- 0, 0, 1, 1, 0, 1, 1, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 182 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 183 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 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, 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, 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,
-
-/* Char 184 */
- 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, 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, 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,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 1, 1, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 1, 0, 0, 0, 0,
-
-/* Char 185 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 186 */
- 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, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0, 0, 0, 0,
-
-/* Char 187 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 1, 1, 0, 0, 1, 1, 0,
- 0, 0, 1, 1, 0, 1, 1, 0, 0,
- 1, 1, 1, 1, 1, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 1, 1, 0,
- 0, 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 188 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 189 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 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, 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, 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,
-
-/* Char 190 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 191 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 192 */
- 0, 0, 0, 0, 1, 1, 1, 0, 0,
- 0, 0, 1, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 1, 1, 1, 1, 1, 0, 0,
- 1, 1, 1, 1, 1, 0, 0, 0, 0,
- 1, 1, 0, 0, 1, 1, 0, 0, 0,
- 1, 1, 0, 0, 0, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 193 */
- 0, 0, 0, 0, 1, 1, 1, 0, 0,
- 0, 0, 1, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 1, 1, 1, 1, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 194 */
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 1, 1, 1, 1, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 195 */
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 1, 1, 1, 1, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 196 */
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 1, 1, 1, 1, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 197 */
- 0, 0, 0, 1, 1, 1, 0, 0, 0,
- 0, 1, 1, 1, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 198 */
- 0, 0, 0, 0, 0, 1, 1, 1, 0,
- 0, 0, 0, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 1, 0, 0,
- 0, 1, 1, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 0, 1, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 1, 0,
- 0, 1, 1, 0, 0, 0, 1, 1, 0,
- 0, 0, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 199 */
- 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, 1, 1, 1, 1, 0, 0,
- 0, 1, 1, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 0, 1, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 1, 0,
- 0, 1, 1, 0, 0, 0, 1, 1, 0,
- 0, 0, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 1, 0, 0, 0, 0,
-
-/* Char 200 */
- 0, 0, 1, 1, 0, 1, 1, 0, 0,
- 0, 0, 0, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 1, 0, 0,
- 0, 1, 1, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 0, 1, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 1, 0,
- 0, 1, 1, 0, 0, 0, 1, 1, 0,
- 0, 0, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 201 */
- 0, 0, 0, 0, 0, 1, 1, 1, 0,
- 0, 0, 0, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 202 */
- 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, 1, 1, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 1, 1, 0,
-
-/* Char 203 */
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 204 */
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 205 */
- 0, 0, 0, 0, 1, 1, 1, 0, 0,
- 0, 0, 1, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 206 */
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 207 */
- 0, 1, 1, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 0, 0, 0,
- 1, 1, 0, 0, 0, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 1, 1, 0, 0,
- 1, 1, 1, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 208 */
- 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, 1, 1, 1, 1, 1, 0, 0, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 1, 1, 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 0, 1, 1, 0,
- 1, 1, 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 1, 1, 1, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 209 */
- 0, 0, 0, 0, 1, 1, 1, 0, 0,
- 0, 0, 1, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 1, 0, 0, 0, 1, 1, 0,
- 1, 1, 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 1, 1, 0, 1, 1, 0,
- 1, 1, 0, 1, 1, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 1, 1, 0,
- 1, 1, 0, 0, 0, 1, 1, 1, 0,
- 1, 1, 0, 0, 0, 1, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 210 */
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 1, 0, 0, 0, 1, 1, 0,
- 1, 1, 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 1, 1, 0, 1, 1, 0,
- 1, 1, 0, 1, 1, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 1, 1, 0,
- 1, 1, 0, 0, 0, 1, 1, 1, 0,
- 1, 1, 0, 0, 0, 1, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 211 */
- 0, 0, 0, 0, 1, 1, 1, 0, 0,
- 0, 0, 1, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 212 */
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 213 */
- 0, 0, 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 214 */
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 215 */
- 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, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 1, 0,
- 0, 1, 1, 0, 0, 0, 1, 1, 0,
- 0, 0, 1, 1, 0, 1, 1, 0, 0,
- 0, 0, 0, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 1, 1, 0, 0,
- 0, 1, 1, 0, 0, 0, 1, 1, 0,
- 0, 1, 0, 0, 0, 0, 0, 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,
-
-/* Char 216 */
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 1, 1, 1, 1, 1, 0, 0,
- 1, 1, 1, 1, 1, 0, 0, 0, 0,
- 1, 1, 0, 0, 1, 1, 0, 0, 0,
- 1, 1, 0, 0, 0, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 217 */
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 218 */
- 0, 0, 0, 0, 1, 1, 1, 0, 0,
- 0, 0, 1, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 219 */
- 0, 0, 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 220 */
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 221 */
- 0, 0, 0, 0, 1, 1, 1, 0, 0,
- 0, 0, 1, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 222 */
- 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, 1, 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 1, 0, 0, 0, 0,
-
-/* Char 223 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 1, 1, 1, 0, 1, 1, 0, 0, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 1, 1, 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 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,
-
-/* Char 224 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 1, 1, 1, 1, 0, 0,
- 0, 1, 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 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,
-
-/* Char 225 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 1, 0, 0,
- 0, 1, 1, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 1, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 1, 1, 1, 0,
- 0, 1, 1, 1, 1, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 226 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 1, 0, 0,
- 0, 1, 1, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 1, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 1, 1, 1, 0,
- 0, 1, 1, 1, 1, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 227 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 1, 0, 0,
- 0, 1, 1, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 1, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 1, 1, 1, 0,
- 0, 1, 1, 1, 1, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 228 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 1, 0, 0,
- 0, 1, 1, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 1, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 1, 1, 1, 0,
- 0, 1, 1, 1, 1, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 229 */
- 0, 0, 0, 0, 1, 1, 1, 0, 0,
- 0, 0, 1, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 230 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 1, 0, 0,
- 0, 1, 1, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 1, 1, 0,
- 0, 0, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 231 */
- 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, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 1, 0, 0,
- 0, 1, 1, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 1, 1, 0,
- 0, 0, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 1, 0, 0, 0, 0,
-
-/* Char 232 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 1, 1, 0, 0,
- 0, 0, 0, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 1, 0, 0,
- 0, 1, 1, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 1, 1, 0,
- 0, 0, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 233 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 1, 1, 1, 1, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 1, 1, 0,
- 0, 0, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 234 */
- 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, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 1, 1, 1, 1, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 1, 1, 0,
- 0, 0, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 1, 1, 0,
-
-/* Char 235 */
- 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, 1, 0, 0, 1, 1, 0, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 1, 1, 1, 1, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 1, 1, 0,
- 0, 0, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 236 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 1, 1, 1, 1, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 1, 1, 0,
- 0, 0, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 237 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 238 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 239 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 1, 1, 1,
- 0, 0, 0, 0, 0, 0, 0, 1, 1,
- 0, 0, 0, 0, 0, 1, 1, 1, 1,
- 0, 0, 0, 0, 0, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 1, 1, 0, 1, 1, 0, 0,
- 0, 1, 1, 0, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 1, 1, 0, 0,
- 0, 1, 1, 0, 1, 1, 1, 0, 0,
- 0, 0, 1, 1, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 240 */
- 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, 1, 0, 0,
- 0, 0, 0, 0, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 1, 1, 0, 1, 1, 0, 0,
- 0, 1, 1, 0, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 1, 1, 0, 0,
- 0, 1, 1, 0, 1, 1, 1, 0, 0,
- 0, 0, 1, 1, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 241 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 1, 1, 1, 0, 0, 0,
- 1, 1, 1, 0, 0, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 242 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 1, 1, 1, 0, 0, 0,
- 1, 1, 1, 0, 0, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 243 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 244 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 245 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 1, 1, 0,
- 0, 0, 1, 1, 0, 1, 1, 0, 0,
- 0, 1, 1, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 246 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 247 */
- 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, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 1, 1, 0,
- 1, 1, 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 248 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 1, 1, 0, 0,
- 0, 0, 0, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 1, 1, 1, 1, 0, 0,
- 0, 1, 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 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,
-
-/* Char 249 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 1, 1, 1, 0,
- 0, 0, 1, 1, 1, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 250 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 1, 1, 1, 0,
- 0, 0, 1, 1, 1, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 251 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 1, 1, 0,
- 0, 0, 1, 1, 0, 1, 1, 0, 0,
- 0, 1, 1, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 1, 1, 1, 0,
- 0, 0, 1, 1, 1, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 252 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 1, 1, 1, 0,
- 0, 0, 1, 1, 1, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 253 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 1, 1, 1, 0,
- 0, 0, 1, 1, 1, 0, 1, 1, 0,
- 1, 0, 0, 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 1, 1, 0, 0,
-
-/* Char 254 */
- 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, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 1, 1, 0,
- 0, 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 1, 0, 0, 0, 0,
-
-/* Char 255 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 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, 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, 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, 0, 0, 0, 0, 0,
-
-
-};
-
-gdFont gdFontGiantRep =
-{
- 256,
- 0,
- 9,
- 15,
- gdFontGiantData
-};
-
-gdFontPtr gdFontGiant = &gdFontGiantRep;
-
-gdFontPtr gdFontGetGiant(void)
-{
- return gdFontGiant;
-}
-
-/* This file has not been truncated. */
diff --git a/ext/gd/libgd/gdfontg.h b/ext/gd/libgd/gdfontg.h
deleted file mode 100644
index 8a3e95e8bc..0000000000
--- a/ext/gd/libgd/gdfontg.h
+++ /dev/null
@@ -1,30 +0,0 @@
-
-#ifndef _GDFONTG_H_
-#define _GDFONTG_H_ 1
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*
- This is a header file for gd font, generated using
- bdftogd version 0.51 by Jan Pazdziora, adelton@fi.muni.cz
- from bdf font
- -Misc-Fixed-Bold-R-Normal-Sans-15-140-75-75-C-90-ISO8859-2
- at Mon Jan 26 14:45:58 1998.
- The original bdf was holding following copyright:
- "Libor Skarvada, libor@informatics.muni.cz"
- */
-
-
-#include "gd.h"
-
-extern gdFontPtr gdFontGiant;
-extern gdFontPtr gdFontGetGiant(void);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
-
diff --git a/ext/gd/libgd/gdfontl.c b/ext/gd/libgd/gdfontl.c
deleted file mode 100644
index 6da54e1a12..0000000000
--- a/ext/gd/libgd/gdfontl.c
+++ /dev/null
@@ -1,4646 +0,0 @@
-
-
-/*
- This is a header file for gd font, generated using
- bdftogd version 0.5 by Jan Pazdziora, adelton@fi.muni.cz
- from bdf font
- -misc-fixed-medium-r-normal--16-140-75-75-c-80-iso8859-2
- at Tue Jan 6 19:39:27 1998.
-
- The original bdf was holding following copyright:
- "Libor Skarvada, libor@informatics.muni.cz"
- */
-
-
-#include "gdfontl.h"
-
-char gdFontLargeData[] =
-{
-/* Char 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,
- 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, 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, 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,
-
-/* Char 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,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 0, 0,
- 1, 1, 1, 1, 1, 1, 1, 0,
- 1, 1, 1, 1, 1, 1, 1, 0,
- 0, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 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, 0, 0, 0, 0,
-
-/* Char 2 */
- 1, 0, 1, 0, 1, 0, 1, 0,
- 0, 1, 0, 1, 0, 1, 0, 1,
- 1, 0, 1, 0, 1, 0, 1, 0,
- 0, 1, 0, 1, 0, 1, 0, 1,
- 1, 0, 1, 0, 1, 0, 1, 0,
- 0, 1, 0, 1, 0, 1, 0, 1,
- 1, 0, 1, 0, 1, 0, 1, 0,
- 0, 1, 0, 1, 0, 1, 0, 1,
- 1, 0, 1, 0, 1, 0, 1, 0,
- 0, 1, 0, 1, 0, 1, 0, 1,
- 1, 0, 1, 0, 1, 0, 1, 0,
- 0, 1, 0, 1, 0, 1, 0, 1,
- 1, 0, 1, 0, 1, 0, 1, 0,
- 0, 1, 0, 1, 0, 1, 0, 1,
- 1, 0, 1, 0, 1, 0, 1, 0,
- 0, 1, 0, 1, 0, 1, 0, 1,
-
-/* Char 3 */
- 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, 0, 0, 0, 1, 0, 0, 0,
- 1, 0, 0, 0, 1, 0, 0, 0,
- 1, 1, 1, 1, 1, 0, 0, 0,
- 1, 0, 0, 0, 1, 0, 0, 0,
- 1, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 4 */
- 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, 1, 1, 1, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 1, 1, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 5 */
- 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, 1, 1, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 1, 0, 0, 1, 0,
- 0, 0, 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 1, 0, 1, 0, 0,
- 0, 0, 0, 1, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 6 */
- 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, 0, 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 1, 1, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 7 */
- 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, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0, 1, 0, 0,
- 0, 0, 0, 1, 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, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 8 */
- 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, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 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, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 9 */
- 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, 0, 0, 0, 1, 0, 0, 0,
- 1, 1, 0, 0, 1, 0, 0, 0,
- 1, 0, 1, 0, 1, 0, 0, 0,
- 1, 0, 0, 1, 1, 0, 0, 0,
- 1, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 10 */
- 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, 0, 0, 0, 1, 0, 0, 0,
- 1, 0, 0, 0, 1, 0, 0, 0,
- 0, 1, 0, 1, 0, 0, 0, 0,
- 0, 1, 0, 1, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 11 */
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 1, 1, 1, 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, 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, 0, 0, 0,
-
-/* Char 12 */
- 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, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
-
-/* Char 13 */
- 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, 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, 1, 1, 1, 1,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
-
-/* Char 14 */
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 1, 1, 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,
- 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,
-
-/* Char 15 */
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 1, 1,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
-
-/* Char 16 */
- 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, 1, 1, 1, 1, 1, 1, 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,
- 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, 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,
-
-/* Char 17 */
- 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, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 1, 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,
- 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, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 18 */
- 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, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 1, 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,
- 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,
-
-/* Char 19 */
- 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, 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, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 1, 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,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 20 */
- 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, 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, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 1, 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,
-
-/* Char 21 */
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 1, 1, 1,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
-
-/* Char 22 */
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 1, 1, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
-
-/* Char 23 */
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 1, 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,
- 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,
-
-/* Char 24 */
- 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, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 1, 1,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
-
-/* Char 25 */
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
-
-/* Char 26 */
- 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, 0,
- 0, 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 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, 0,
-
-/* Char 27 */
- 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, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 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, 0,
-
-/* Char 28 */
- 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, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 1, 0,
- 1, 0, 1, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 1, 0, 0, 0,
- 1, 1, 0, 0, 0, 1, 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,
-
-/* Char 29 */
- 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, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 1, 0, 0,
- 1, 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 1, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 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,
-
-/* Char 30 */
- 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, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 1, 0,
- 1, 0, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 31 */
- 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, 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, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 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, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 32 */
- 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, 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, 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, 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,
-
-/* Char 33 */
- 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, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 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,
-
-/* Char 34 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0, 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, 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, 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,
-
-/* Char 35 */
- 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, 0, 0, 1, 0, 0, 1, 0,
- 0, 0, 0, 1, 0, 0, 1, 0,
- 0, 0, 0, 1, 0, 0, 1, 0,
- 0, 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 1, 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0, 1, 0, 0,
- 0, 1, 1, 1, 1, 1, 1, 0,
- 0, 1, 0, 0, 1, 0, 0, 0,
- 0, 1, 0, 0, 1, 0, 0, 0,
- 0, 1, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 36 */
- 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, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 0, 0,
- 1, 0, 0, 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0, 0, 1, 0,
- 0, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 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,
-
-/* Char 37 */
- 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, 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 1, 0, 1, 0, 0,
- 1, 0, 0, 1, 0, 1, 0, 0,
- 0, 1, 1, 0, 1, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 1, 0, 1, 1, 0, 0,
- 0, 1, 0, 1, 0, 0, 1, 0,
- 0, 1, 0, 1, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 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,
-
-/* Char 38 */
- 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, 1, 1, 0, 0, 0,
- 0, 1, 0, 0, 0, 1, 0, 0,
- 0, 1, 0, 0, 0, 1, 0, 0,
- 0, 1, 0, 0, 0, 1, 0, 0,
- 0, 0, 1, 1, 1, 0, 0, 0,
- 0, 1, 1, 1, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0, 1, 0,
- 1, 0, 0, 0, 0, 1, 0, 0,
- 1, 0, 0, 0, 1, 1, 0, 0,
- 0, 1, 1, 1, 0, 0, 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,
-
-/* Char 39 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 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, 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, 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,
-
-/* Char 40 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 41 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 42 */
- 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, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 1, 0, 0, 1, 0, 0, 1, 0,
- 0, 1, 0, 1, 0, 1, 0, 0,
- 0, 0, 1, 1, 1, 0, 0, 0,
- 0, 1, 0, 1, 0, 1, 0, 0,
- 1, 0, 0, 1, 0, 0, 1, 0,
- 0, 0, 0, 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, 0, 0, 0, 0,
-
-/* Char 43 */
- 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, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 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, 0, 0, 0, 0,
-
-/* Char 44 */
- 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, 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, 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, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 45 */
- 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, 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, 1, 1, 1, 1, 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, 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,
-
-/* Char 46 */
- 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, 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, 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, 1, 0, 0, 0,
- 0, 0, 0, 1, 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,
-
-/* Char 47 */
- 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, 0,
- 0, 0, 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 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,
-
-/* Char 48 */
- 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, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 0, 1, 0, 0, 1, 0, 0,
- 0, 0, 0, 1, 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,
-
-/* Char 49 */
- 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, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 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,
-
-/* Char 50 */
- 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, 1, 1, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 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,
-
-/* Char 51 */
- 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, 1, 1, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 0, 1, 1, 1, 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,
-
-/* Char 52 */
- 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, 0, 0,
- 0, 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 1, 0, 1, 0, 0,
- 0, 0, 1, 0, 0, 1, 0, 0,
- 0, 1, 0, 0, 0, 1, 0, 0,
- 0, 1, 0, 0, 0, 1, 0, 0,
- 0, 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0, 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,
-
-/* Char 53 */
- 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, 1, 1, 1, 1, 1, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 0, 1, 1, 1, 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,
-
-/* Char 54 */
- 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, 1, 1, 0, 0,
- 0, 0, 1, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 0, 1, 1, 1, 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,
-
-/* Char 55 */
- 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, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 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,
-
-/* Char 56 */
- 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, 1, 1, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 0, 1, 1, 1, 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,
-
-/* Char 57 */
- 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, 1, 1, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 0, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 1, 0, 0,
- 0, 0, 1, 1, 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,
-
-/* Char 58 */
- 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, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 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, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 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,
-
-/* Char 59 */
- 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, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 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, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 60 */
- 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, 0, 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 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,
-
-/* Char 61 */
- 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, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 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, 1, 1, 1, 1, 1, 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, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 62 */
- 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, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0, 0,
- 0, 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,
-
-/* Char 63 */
- 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, 1, 1, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 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,
-
-/* Char 64 */
- 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, 1, 1, 0, 0,
- 0, 0, 1, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 1, 0, 1, 0,
- 0, 1, 0, 1, 0, 1, 1, 0,
- 0, 1, 0, 1, 0, 0, 1, 0,
- 0, 1, 0, 1, 0, 0, 1, 0,
- 0, 1, 0, 1, 0, 0, 1, 0,
- 0, 1, 0, 0, 1, 1, 1, 0,
- 0, 0, 1, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 1, 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,
-
-/* Char 65 */
- 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, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 1, 1, 1, 1, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 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,
-
-/* Char 66 */
- 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, 1, 1, 1, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 1, 1, 1, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 1, 1, 1, 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,
-
-/* Char 67 */
- 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, 1, 1, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 0, 1, 1, 1, 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,
-
-/* Char 68 */
- 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, 1, 1, 1, 0, 0, 0,
- 0, 1, 0, 0, 0, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 1, 0, 0,
- 0, 1, 1, 1, 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,
-
-/* Char 69 */
- 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, 1, 1, 1, 1, 1, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 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,
-
-/* Char 70 */
- 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, 1, 1, 1, 1, 1, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 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,
-
-/* Char 71 */
- 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, 1, 1, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 1, 1, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 1, 1, 0,
- 0, 0, 1, 1, 1, 0, 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,
-
-/* Char 72 */
- 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, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 1, 1, 1, 1, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 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,
-
-/* Char 73 */
- 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, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 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,
-
-/* Char 74 */
- 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, 1, 1, 0,
- 0, 0, 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0, 1, 0, 0,
- 0, 1, 0, 0, 0, 1, 0, 0,
- 0, 1, 0, 0, 0, 1, 0, 0,
- 0, 0, 1, 1, 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,
-
-/* Char 75 */
- 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, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 1, 0, 0,
- 0, 1, 0, 0, 1, 0, 0, 0,
- 0, 1, 0, 1, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0, 0,
- 0, 1, 0, 1, 0, 0, 0, 0,
- 0, 1, 0, 0, 1, 0, 0, 0,
- 0, 1, 0, 0, 0, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 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,
-
-/* Char 76 */
- 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, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 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,
-
-/* Char 77 */
- 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, 0, 0, 0, 0, 0, 1, 0,
- 1, 1, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 1, 1, 0,
- 1, 0, 1, 0, 1, 0, 1, 0,
- 1, 0, 1, 0, 1, 0, 1, 0,
- 1, 0, 0, 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0, 0, 1, 0,
- 1, 0, 0, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 0, 0, 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,
-
-/* Char 78 */
- 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, 0, 0, 0, 0, 1, 0,
- 0, 1, 1, 0, 0, 0, 1, 0,
- 0, 1, 1, 0, 0, 0, 1, 0,
- 0, 1, 0, 1, 0, 0, 1, 0,
- 0, 1, 0, 1, 0, 0, 1, 0,
- 0, 1, 0, 0, 1, 0, 1, 0,
- 0, 1, 0, 0, 1, 0, 1, 0,
- 0, 1, 0, 0, 0, 1, 1, 0,
- 0, 1, 0, 0, 0, 1, 1, 0,
- 0, 1, 0, 0, 0, 0, 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,
-
-/* Char 79 */
- 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, 1, 1, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 0, 1, 1, 1, 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,
-
-/* Char 80 */
- 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, 1, 1, 1, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 1, 1, 1, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 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,
-
-/* Char 81 */
- 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, 1, 1, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 1, 1, 0, 1, 0,
- 0, 1, 1, 0, 0, 1, 1, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 1, 1,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 82 */
- 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, 1, 1, 1, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 1, 1, 1, 1, 0, 0,
- 0, 1, 0, 0, 1, 0, 0, 0,
- 0, 1, 0, 0, 0, 1, 0, 0,
- 0, 1, 0, 0, 0, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 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,
-
-/* Char 83 */
- 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, 1, 1, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 0, 1, 1, 1, 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,
-
-/* Char 84 */
- 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, 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 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,
-
-/* Char 85 */
- 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, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 0, 1, 1, 1, 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,
-
-/* Char 86 */
- 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, 0, 0, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 1, 0, 0,
- 0, 1, 0, 0, 0, 1, 0, 0,
- 0, 1, 0, 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 1, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 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,
-
-/* Char 87 */
- 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, 0, 0, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 0, 0, 1, 0,
- 1, 0, 0, 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0, 0, 1, 0,
- 1, 0, 1, 0, 1, 0, 1, 0,
- 1, 0, 1, 0, 1, 0, 1, 0,
- 0, 1, 0, 0, 0, 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,
-
-/* Char 88 */
- 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, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 0, 1, 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0, 1, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 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,
-
-/* Char 89 */
- 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, 0, 0, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 1, 0, 0,
- 0, 1, 0, 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 1, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 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,
-
-/* Char 90 */
- 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, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 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,
-
-/* Char 91 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 92 */
- 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, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 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,
-
-/* Char 93 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 94 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 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, 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,
- 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,
-
-/* Char 95 */
- 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, 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, 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, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 96 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 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, 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, 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,
-
-/* Char 97 */
- 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, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 1, 1, 1, 0,
- 0, 0, 1, 1, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 1, 1, 0,
- 0, 0, 1, 1, 1, 0, 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,
-
-/* Char 98 */
- 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, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 1, 1, 1, 0, 0,
- 0, 1, 1, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 1, 0, 0, 0, 1, 0,
- 0, 1, 0, 1, 1, 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,
-
-/* Char 99 */
- 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, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 0, 1, 1, 1, 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,
-
-/* Char 100 */
- 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, 0,
- 0, 0, 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 1, 0,
- 0, 0, 1, 1, 1, 0, 1, 0,
- 0, 1, 0, 0, 0, 1, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 1, 1, 0,
- 0, 0, 1, 1, 1, 0, 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,
-
-/* Char 101 */
- 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, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 1, 1, 1, 1, 1, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 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,
-
-/* Char 102 */
- 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, 1, 1, 0, 0,
- 0, 0, 1, 0, 0, 0, 1, 0,
- 0, 0, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0, 0,
- 0, 0, 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,
-
-/* Char 103 */
- 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, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 1, 0,
- 0, 0, 1, 1, 1, 0, 1, 0,
- 0, 1, 0, 0, 0, 1, 0, 0,
- 0, 1, 0, 0, 0, 1, 0, 0,
- 0, 1, 0, 0, 0, 1, 0, 0,
- 0, 0, 1, 1, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
-
-/* Char 104 */
- 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, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 1, 1, 1, 0, 0,
- 0, 1, 1, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 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,
-
-/* Char 105 */
- 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, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 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,
-
-/* Char 106 */
- 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, 0, 0,
- 0, 0, 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0, 1, 0, 0,
- 0, 1, 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0,
-
-/* Char 107 */
- 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, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 1, 0, 0,
- 0, 1, 0, 0, 1, 0, 0, 0,
- 0, 1, 0, 1, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0, 0, 0,
- 0, 1, 0, 0, 1, 0, 0, 0,
- 0, 1, 0, 0, 0, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 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,
-
-/* Char 108 */
- 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, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 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,
-
-/* Char 109 */
- 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, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 0, 1, 1, 0, 0,
- 1, 0, 0, 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0, 0, 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,
-
-/* Char 110 */
- 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, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 1, 1, 1, 0, 0,
- 0, 1, 1, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 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,
-
-/* Char 111 */
- 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, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 0, 1, 1, 1, 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,
-
-/* Char 112 */
- 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, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 1, 1, 1, 0, 0,
- 0, 1, 1, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 1, 0, 0, 0, 1, 0,
- 0, 1, 0, 1, 1, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
-
-/* Char 113 */
- 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, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 0, 1, 0,
- 0, 1, 0, 0, 0, 1, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 1, 1, 0,
- 0, 0, 1, 1, 1, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 1, 0,
-
-/* Char 114 */
- 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, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 1, 1, 1, 0, 0,
- 0, 1, 1, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 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,
-
-/* Char 115 */
- 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, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 0, 1, 1, 1, 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,
-
-/* Char 116 */
- 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, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 1, 0,
- 0, 0, 0, 0, 1, 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,
-
-/* Char 117 */
- 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, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 1, 1, 0,
- 0, 0, 1, 1, 1, 0, 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,
-
-/* Char 118 */
- 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, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 0, 1, 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0, 1, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 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,
-
-/* Char 119 */
- 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, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0, 1, 0,
- 1, 0, 0, 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0, 0, 1, 0,
- 1, 0, 1, 0, 1, 0, 1, 0,
- 0, 1, 0, 0, 0, 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,
-
-/* Char 120 */
- 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, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 0, 1, 0, 0, 1, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 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,
-
-/* Char 121 */
- 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, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 0, 1, 0, 0, 1, 1, 0,
- 0, 0, 0, 1, 1, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 1, 0, 0,
- 0, 0, 1, 1, 1, 0, 0, 0,
-
-/* Char 122 */
- 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, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 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,
-
-/* Char 123 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 124 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 125 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 126 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 1, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 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, 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, 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,
-
-/* Char 127 */
- 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, 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, 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, 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,
-
-/* Char 128 */
- 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, 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, 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, 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,
-
-/* Char 129 */
- 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, 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, 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, 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,
-
-/* Char 130 */
- 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, 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, 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, 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,
-
-/* Char 131 */
- 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, 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, 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, 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,
-
-/* Char 132 */
- 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, 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, 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, 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,
-
-/* Char 133 */
- 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, 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, 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, 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,
-
-/* Char 134 */
- 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, 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, 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, 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,
-
-/* Char 135 */
- 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, 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, 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, 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,
-
-/* Char 136 */
- 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, 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, 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, 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,
-
-/* Char 137 */
- 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, 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, 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, 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,
-
-/* Char 138 */
- 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, 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, 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, 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,
-
-/* Char 139 */
- 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, 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, 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, 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,
-
-/* Char 140 */
- 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, 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, 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, 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,
-
-/* Char 141 */
- 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, 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, 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, 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,
-
-/* Char 142 */
- 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, 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, 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, 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,
-
-/* Char 143 */
- 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, 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, 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, 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,
-
-/* Char 144 */
- 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, 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, 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, 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,
-
-/* Char 145 */
- 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, 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, 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, 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,
-
-/* Char 146 */
- 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, 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, 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, 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,
-
-/* Char 147 */
- 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, 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, 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, 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,
-
-/* Char 148 */
- 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, 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, 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, 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,
-
-/* Char 149 */
- 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, 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, 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, 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,
-
-/* Char 150 */
- 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, 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, 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, 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,
-
-/* Char 151 */
- 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, 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, 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, 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,
-
-/* Char 152 */
- 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, 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, 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, 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,
-
-/* Char 153 */
- 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, 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, 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, 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,
-
-/* Char 154 */
- 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, 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, 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, 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,
-
-/* Char 155 */
- 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, 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, 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, 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,
-
-/* Char 156 */
- 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, 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, 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, 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,
-
-/* Char 157 */
- 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, 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, 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, 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,
-
-/* Char 158 */
- 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, 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, 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, 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,
-
-/* Char 159 */
- 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, 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, 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, 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,
-
-/* Char 160 */
- 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, 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, 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, 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,
-
-/* Char 161 */
- 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, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 1, 1, 1, 1, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 1, 0,
-
-/* Char 162 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 0, 1, 1, 1, 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, 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, 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,
-
-/* Char 163 */
- 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, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 1, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 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,
-
-/* Char 164 */
- 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, 0, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 1, 0, 0,
- 0, 0, 1, 1, 1, 0, 0, 0,
- 0, 1, 0, 0, 0, 1, 0, 0,
- 0, 1, 0, 0, 0, 1, 0, 0,
- 0, 0, 1, 1, 1, 0, 0, 0,
- 0, 1, 0, 0, 0, 1, 0, 0,
- 1, 0, 0, 0, 0, 0, 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, 0,
-
-/* Char 165 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 1, 0, 0, 1, 0, 0, 0,
- 0, 1, 0, 1, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 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,
-
-/* Char 166 */
- 0, 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 0, 1, 1, 1, 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,
-
-/* Char 167 */
- 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, 0, 1, 1, 1, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 168 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0, 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, 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, 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,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 169 */
- 0, 0, 1, 0, 0, 1, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 0, 1, 1, 1, 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,
-
-/* Char 170 */
- 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, 1, 1, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
-
-/* Char 171 */
- 0, 0, 1, 0, 1, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 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,
-
-/* Char 172 */
- 0, 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 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,
-
-/* Char 173 */
- 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, 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, 1, 1, 1, 1, 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, 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,
-
-/* Char 174 */
- 0, 0, 1, 0, 0, 1, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 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,
-
-/* Char 175 */
- 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 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,
-
-/* Char 176 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 1, 0, 0,
- 0, 0, 0, 1, 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, 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, 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, 0,
-
-/* Char 177 */
- 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, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 1, 1, 1, 0,
- 0, 0, 1, 1, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 1, 1, 0,
- 0, 0, 1, 1, 1, 0, 1, 0,
- 0, 0, 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 1, 0,
-
-/* Char 178 */
- 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, 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, 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, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 1, 1, 0,
-
-/* Char 179 */
- 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, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 1, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 1, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 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,
-
-/* Char 180 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 1, 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, 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, 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, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 181 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 1, 1, 0, 0, 1, 0,
- 0, 0, 0, 1, 0, 0, 1, 0,
- 0, 0, 0, 1, 0, 1, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 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,
-
-/* Char 182 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 0, 1, 1, 1, 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,
-
-/* Char 183 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 1, 0, 0, 0,
- 0, 0, 0, 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, 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, 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, 0, 0,
-
-/* Char 184 */
- 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, 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, 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, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 0, 0,
- 0, 0, 1, 1, 1, 0, 0, 0,
-
-/* Char 185 */
- 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, 0, 0, 1, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 0, 1, 1, 1, 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,
-
-/* Char 186 */
- 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, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
-
-/* Char 187 */
- 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, 1, 0,
- 0, 0, 1, 0, 0, 0, 1, 0,
- 0, 0, 1, 0, 0, 0, 1, 0,
- 1, 1, 1, 1, 0, 1, 0, 0,
- 0, 0, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 1, 0, 0,
- 0, 0, 0, 1, 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,
-
-/* Char 188 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 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,
-
-/* Char 189 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 1, 0,
- 0, 0, 1, 0, 0, 1, 0, 0,
- 0, 1, 0, 0, 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, 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, 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, 0,
-
-/* Char 190 */
- 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, 0, 0, 1, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 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,
-
-/* Char 191 */
- 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, 1, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 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,
-
-/* Char 192 */
- 0, 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 1, 1, 1, 1, 0, 0,
- 0, 1, 0, 0, 1, 0, 0, 0,
- 0, 1, 0, 0, 0, 1, 0, 0,
- 0, 1, 0, 0, 0, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 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,
-
-/* Char 193 */
- 0, 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 1, 1, 1, 1, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 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,
-
-/* Char 194 */
- 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 1, 1, 1, 1, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 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,
-
-/* Char 195 */
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 1, 1, 1, 1, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 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,
-
-/* Char 196 */
- 0, 0, 1, 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 1, 1, 1, 1, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 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,
-
-/* Char 197 */
- 0, 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 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,
-
-/* Char 198 */
- 0, 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 0, 1, 1, 1, 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,
-
-/* Char 199 */
- 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, 1, 1, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 0, 0,
- 0, 0, 1, 1, 1, 0, 0, 0,
-
-/* Char 200 */
- 0, 0, 1, 0, 0, 1, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 0, 1, 1, 1, 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,
-
-/* Char 201 */
- 0, 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 1, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 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,
-
-/* Char 202 */
- 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, 1, 1, 1, 1, 1, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 1, 0,
-
-/* Char 203 */
- 0, 0, 1, 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 1, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 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,
-
-/* Char 204 */
- 0, 0, 1, 0, 0, 1, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 1, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 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,
-
-/* Char 205 */
- 0, 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 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,
-
-/* Char 206 */
- 0, 0, 1, 1, 1, 0, 0, 0,
- 0, 1, 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 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,
-
-/* Char 207 */
- 0, 0, 1, 0, 0, 1, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 1, 0, 0, 0, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 1, 0, 0,
- 0, 1, 1, 1, 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,
-
-/* Char 208 */
- 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, 1, 1, 1, 0, 0, 0,
- 0, 1, 0, 0, 0, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 1, 1, 1, 1, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 1, 0, 0,
- 0, 1, 1, 1, 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,
-
-/* Char 209 */
- 0, 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 1, 0, 0, 0, 1, 0,
- 0, 1, 1, 0, 0, 0, 1, 0,
- 0, 1, 0, 1, 0, 0, 1, 0,
- 0, 1, 0, 1, 0, 0, 1, 0,
- 0, 1, 0, 0, 1, 0, 1, 0,
- 0, 1, 0, 0, 1, 0, 1, 0,
- 0, 1, 0, 0, 0, 1, 1, 0,
- 0, 1, 0, 0, 0, 1, 1, 0,
- 0, 1, 0, 0, 0, 0, 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,
-
-/* Char 210 */
- 0, 0, 1, 0, 0, 1, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 1, 0, 0, 0, 1, 0,
- 0, 1, 1, 0, 0, 0, 1, 0,
- 0, 1, 0, 1, 0, 0, 1, 0,
- 0, 1, 0, 1, 0, 0, 1, 0,
- 0, 1, 0, 0, 1, 0, 1, 0,
- 0, 1, 0, 0, 1, 0, 1, 0,
- 0, 1, 0, 0, 0, 1, 1, 0,
- 0, 1, 0, 0, 0, 1, 1, 0,
- 0, 1, 0, 0, 0, 0, 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,
-
-/* Char 211 */
- 0, 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 0, 1, 1, 1, 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,
-
-/* Char 212 */
- 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 0, 1, 1, 1, 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,
-
-/* Char 213 */
- 0, 0, 0, 1, 0, 0, 1, 0,
- 0, 0, 1, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 0, 1, 1, 1, 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,
-
-/* Char 214 */
- 0, 0, 1, 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 0, 1, 1, 1, 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,
-
-/* Char 215 */
- 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, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 0, 1, 0, 0, 1, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 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, 0,
-
-/* Char 216 */
- 0, 0, 1, 0, 0, 1, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 1, 1, 1, 1, 0, 0,
- 0, 1, 0, 0, 1, 0, 0, 0,
- 0, 1, 0, 0, 0, 1, 0, 0,
- 0, 1, 0, 0, 0, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 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,
-
-/* Char 217 */
- 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 1, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 0, 1, 1, 1, 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,
-
-/* Char 218 */
- 0, 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 0, 1, 1, 1, 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,
-
-/* Char 219 */
- 0, 0, 0, 1, 0, 0, 1, 0,
- 0, 0, 1, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 0, 1, 1, 1, 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,
-
-/* Char 220 */
- 0, 0, 1, 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 0, 1, 1, 1, 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,
-
-/* Char 221 */
- 0, 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 1, 0, 0,
- 0, 1, 0, 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 1, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 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,
-
-/* Char 222 */
- 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, 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
-
-/* Char 223 */
- 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, 0, 1, 1, 1, 0, 0, 0,
- 0, 1, 0, 0, 0, 1, 0, 0,
- 0, 1, 0, 0, 0, 1, 0, 0,
- 0, 1, 0, 0, 0, 1, 0, 0,
- 1, 1, 0, 0, 1, 0, 0, 0,
- 0, 1, 0, 0, 0, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 1, 0, 0, 0, 1, 0,
- 0, 1, 0, 1, 1, 1, 0, 0,
- 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 224 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 1, 1, 1, 0, 0,
- 0, 1, 1, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 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,
-
-/* Char 225 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 1, 1, 1, 0,
- 0, 0, 1, 1, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 1, 1, 0,
- 0, 0, 1, 1, 1, 0, 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,
-
-/* Char 226 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 1, 0, 1, 0, 0,
- 0, 0, 1, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 1, 1, 1, 0,
- 0, 0, 1, 1, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 1, 1, 0,
- 0, 0, 1, 1, 1, 0, 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,
-
-/* Char 227 */
- 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, 0, 0, 0, 0, 1, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 1, 1, 1, 0,
- 0, 0, 1, 1, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 1, 1, 0,
- 0, 0, 1, 1, 1, 0, 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,
-
-/* Char 228 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 1, 1, 1, 0,
- 0, 0, 1, 1, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 1, 1, 0,
- 0, 0, 1, 1, 1, 0, 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,
-
-/* Char 229 */
- 0, 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 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,
-
-/* Char 230 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 0, 1, 1, 1, 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,
-
-/* Char 231 */
- 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, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 0, 0,
- 0, 0, 1, 1, 1, 0, 0, 0,
-
-/* Char 232 */
- 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, 0, 0, 1, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 0, 1, 1, 1, 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,
-
-/* Char 233 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 1, 1, 1, 1, 1, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 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,
-
-/* Char 234 */
- 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, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 1, 1, 1, 1, 1, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 1, 0, 0,
-
-/* Char 235 */
- 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, 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 1, 1, 1, 1, 1, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 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,
-
-/* Char 236 */
- 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, 0, 0, 1, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 1, 1, 1, 1, 1, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 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,
-
-/* Char 237 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 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,
-
-/* Char 238 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 1, 0, 1, 0, 0, 0,
- 0, 1, 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 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,
-
-/* Char 239 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 1, 1,
- 0, 0, 0, 0, 0, 0, 0, 1,
- 0, 0, 0, 0, 0, 1, 0, 1,
- 0, 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 1, 0, 0,
- 0, 1, 1, 1, 0, 1, 0, 0,
- 1, 0, 0, 0, 1, 1, 0, 0,
- 1, 0, 0, 0, 0, 1, 0, 0,
- 1, 0, 0, 0, 0, 1, 0, 0,
- 1, 0, 0, 0, 0, 1, 0, 0,
- 1, 0, 0, 0, 1, 1, 0, 0,
- 0, 1, 1, 1, 0, 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,
-
-/* Char 240 */
- 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, 0, 0,
- 0, 0, 0, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 1, 0, 0,
- 0, 1, 1, 1, 0, 1, 0, 0,
- 1, 0, 0, 0, 1, 1, 0, 0,
- 1, 0, 0, 0, 0, 1, 0, 0,
- 1, 0, 0, 0, 0, 1, 0, 0,
- 1, 0, 0, 0, 0, 1, 0, 0,
- 1, 0, 0, 0, 1, 1, 0, 0,
- 0, 1, 1, 1, 0, 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,
-
-/* Char 241 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 1, 1, 1, 0, 0,
- 0, 1, 1, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 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,
-
-/* Char 242 */
- 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, 0, 0, 1, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 1, 1, 1, 0, 0,
- 0, 1, 1, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 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,
-
-/* Char 243 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 0, 1, 1, 1, 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,
-
-/* Char 244 */
- 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, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 0, 1, 1, 1, 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,
-
-/* Char 245 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 1,
- 0, 0, 0, 1, 0, 0, 1, 0,
- 0, 0, 1, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 0, 1, 1, 1, 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,
-
-/* Char 246 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 0, 1, 1, 1, 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,
-
-/* Char 247 */
- 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, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 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, 0, 0, 0,
-
-/* Char 248 */
- 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, 0, 0, 1, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 1, 1, 1, 0, 0,
- 0, 1, 1, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 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,
-
-/* Char 249 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 1, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 1, 1, 0,
- 0, 0, 1, 1, 1, 0, 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,
-
-/* Char 250 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 1, 1, 0,
- 0, 0, 1, 1, 1, 0, 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,
-
-/* Char 251 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 1,
- 0, 0, 0, 1, 0, 0, 1, 0,
- 0, 0, 1, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 1, 1, 0,
- 0, 0, 1, 1, 1, 0, 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,
-
-/* Char 252 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 1, 1, 0,
- 0, 0, 1, 1, 1, 0, 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,
-
-/* Char 253 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 0, 1, 0, 0, 1, 1, 0,
- 0, 0, 0, 1, 1, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 1, 0, 0,
- 0, 0, 1, 1, 1, 0, 0, 0,
-
-/* Char 254 */
- 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, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 1, 0,
- 0, 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
-
-/* Char 255 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 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, 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, 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, 0,
-
-
-};
-
-gdFont gdFontLargeRep =
-{
- 256,
- 0,
- 8,
- 16,
- gdFontLargeData
-};
-
-gdFontPtr gdFontLarge = &gdFontLargeRep;
-
-gdFontPtr gdFontGetLarge(void)
-{
- return gdFontLarge;
-}
-
-/* This file has not been truncated. */
diff --git a/ext/gd/libgd/gdfontl.h b/ext/gd/libgd/gdfontl.h
deleted file mode 100644
index 92fee14ff3..0000000000
--- a/ext/gd/libgd/gdfontl.h
+++ /dev/null
@@ -1,31 +0,0 @@
-
-#ifndef _GDFONTL_H_
-#define _GDFONTL_H_ 1
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*
- This is a header file for gd font, generated using
- bdftogd version 0.5 by Jan Pazdziora, adelton@fi.muni.cz
- from bdf font
- -misc-fixed-medium-r-normal--16-140-75-75-c-80-iso8859-2
- at Tue Jan 6 19:39:27 1998.
-
- The original bdf was holding following copyright:
- "Libor Skarvada, libor@informatics.muni.cz"
- */
-
-
-#include "gd.h"
-
-extern gdFontPtr gdFontLarge;
-extern gdFontPtr gdFontGetLarge(void);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
-
diff --git a/ext/gd/libgd/gdfontmb.c b/ext/gd/libgd/gdfontmb.c
deleted file mode 100644
index dab7c0589d..0000000000
--- a/ext/gd/libgd/gdfontmb.c
+++ /dev/null
@@ -1,3876 +0,0 @@
-
-
-/*
- This is a header file for gd font, generated using
- bdftogd version 0.5 by Jan Pazdziora, adelton@fi.muni.cz
- from bdf font
- -misc-fixed-bold-r-normal-sans-13-94-100-100-c-70-iso8859-2
- at Thu Jan 8 13:54:57 1998.
- No copyright info was found in the original bdf.
- */
-
-
-#include "gdfontmb.h"
-
-char gdFontMediumBoldData[] =
-{
-/* Char 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, 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, 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,
-
-/* Char 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, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 1, 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,
-
-/* Char 2 */
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 3 */
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 1, 1, 0, 0,
- 1, 1, 0, 1, 1, 0, 0,
- 1, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 1, 1, 0, 0,
- 1, 1, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0,
- 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 4 */
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 1, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 1, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 5 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 0, 0,
- 0, 0, 1, 1, 0, 1, 0,
- 0, 0, 1, 1, 1, 0, 0,
- 0, 0, 1, 1, 0, 1, 0,
- 0, 0, 1, 1, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 6 */
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 1, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 7 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 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, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 8 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 9 */
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 1, 0, 1, 1, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 1, 1, 0, 1, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 10 */
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 0, 0, 1, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0,
- 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 11 */
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 1, 1, 1, 1, 0, 0, 0,
- 1, 1, 1, 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, 0, 0, 0, 0, 0, 0,
-
-/* Char 12 */
- 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, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 0, 0, 0,
- 1, 1, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
-
-/* Char 13 */
- 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, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 1,
- 0, 0, 1, 1, 1, 1, 1,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
-
-/* Char 14 */
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 1,
- 0, 0, 1, 1, 1, 1, 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, 0, 0, 0,
-
-/* Char 15 */
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
-
-/* Char 16 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 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, 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,
-
-/* Char 17 */
- 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, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 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, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 18 */
- 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, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 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, 0, 0, 0,
-
-/* Char 19 */
- 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, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 20 */
- 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, 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, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 21 */
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 1,
- 0, 0, 1, 1, 1, 1, 1,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
-
-/* Char 22 */
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 1, 1, 1, 1, 0, 0, 0,
- 1, 1, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
-
-/* Char 23 */
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 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, 0, 0, 0,
-
-/* Char 24 */
- 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, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
-
-/* Char 25 */
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
-
-/* Char 26 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 1, 1, 0, 0,
- 0, 1, 1, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 27 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 1, 1, 0, 0,
- 0, 1, 1, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 28 */
- 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, 0, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 0, 1, 1, 0, 1, 1, 0,
- 0, 1, 1, 0, 1, 1, 0,
- 0, 1, 1, 0, 1, 1, 0,
- 1, 1, 1, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 29 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 30 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 0, 0,
- 0, 1, 1, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 0, 0,
- 0, 1, 1, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0,
- 0, 1, 1, 0, 1, 1, 0,
- 1, 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 31 */
- 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, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 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, 0, 0, 0, 0, 0, 0,
-
-/* Char 32 */
- 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, 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, 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,
-
-/* Char 33 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 34 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 1, 1, 0,
- 0, 1, 1, 0, 1, 1, 0,
- 0, 1, 1, 0, 1, 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, 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,
-
-/* Char 35 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 1, 0, 0,
- 0, 0, 1, 0, 1, 0, 0,
- 0, 1, 1, 1, 1, 1, 0,
- 0, 1, 1, 1, 1, 1, 0,
- 0, 0, 1, 0, 1, 0, 0,
- 0, 1, 1, 1, 1, 1, 0,
- 0, 1, 1, 1, 1, 1, 0,
- 0, 0, 1, 0, 1, 0, 0,
- 0, 0, 1, 0, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 36 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 1, 0, 1, 1, 0, 1, 0,
- 1, 0, 1, 1, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 1, 1, 0, 1, 0,
- 1, 0, 1, 1, 0, 1, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 37 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 0, 0, 1, 0,
- 1, 0, 1, 0, 1, 1, 0,
- 1, 1, 1, 0, 1, 0, 0,
- 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0,
- 0, 1, 0, 1, 1, 1, 0,
- 1, 1, 0, 1, 0, 1, 0,
- 1, 0, 0, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 38 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0, 0,
- 1, 1, 0, 1, 1, 0, 0,
- 1, 1, 0, 1, 1, 0, 0,
- 0, 1, 1, 1, 0, 0, 0,
- 1, 1, 0, 1, 0, 1, 0,
- 1, 1, 0, 1, 1, 1, 0,
- 1, 1, 0, 1, 1, 0, 0,
- 0, 1, 1, 1, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 39 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 0, 0,
- 0, 0, 1, 1, 1, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 1, 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,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 40 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 41 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 42 */
- 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, 0, 0, 1, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 1, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 43 */
- 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, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 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,
-
-/* Char 44 */
- 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, 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, 1, 1, 0, 0,
- 0, 0, 1, 1, 1, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 45 */
- 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, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 1, 1, 1, 1, 1, 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, 0, 0, 0, 0,
-
-/* Char 46 */
- 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, 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, 1, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 47 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 48 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 1, 1, 1, 0,
- 1, 1, 1, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 49 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 1, 1, 1, 0, 0, 0,
- 1, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 50 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 1, 1, 1, 0, 0,
- 0, 1, 1, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 51 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 52 */
- 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, 1, 0,
- 0, 0, 0, 1, 1, 1, 0,
- 0, 0, 1, 1, 1, 1, 0,
- 0, 1, 1, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 53 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 54 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 55 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 56 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 57 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 58 */
- 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, 1, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 59 */
- 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, 1, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 0, 0,
- 0, 0, 1, 1, 1, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 60 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 61 */
- 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, 1, 1, 1, 1, 1, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 1, 1, 1, 1, 1, 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,
-
-/* Char 62 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 63 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 1, 1, 1, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 64 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 1, 0, 0, 0, 1, 1, 0,
- 1, 0, 1, 1, 1, 1, 0,
- 1, 0, 1, 0, 1, 1, 0,
- 1, 0, 1, 1, 1, 1, 0,
- 1, 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 65 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 66 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 67 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 68 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 69 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 70 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 71 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 1, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 72 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 73 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 74 */
- 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, 1, 0,
- 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 75 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 1, 1, 0, 0,
- 1, 1, 1, 1, 0, 0, 0,
- 1, 1, 1, 0, 0, 0, 0,
- 1, 1, 1, 0, 0, 0, 0,
- 1, 1, 1, 1, 0, 0, 0,
- 1, 1, 0, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 76 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 77 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 78 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 1, 0, 1, 1, 0,
- 1, 1, 1, 0, 1, 1, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 1, 1, 0, 1, 1, 1, 0,
- 1, 1, 0, 1, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 79 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 80 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 81 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 1, 0, 1, 1, 0,
- 1, 1, 0, 1, 1, 1, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 82 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 1, 1, 1, 0, 0,
- 1, 1, 1, 1, 0, 0, 0,
- 1, 1, 0, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 83 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 84 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 85 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 86 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 0, 0, 1, 0, 0,
- 0, 1, 0, 0, 1, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 87 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 88 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 0, 0, 1, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 1, 0, 0, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 89 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 90 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 91 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 1, 1, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 92 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 93 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 1, 1, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 94 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 0, 0, 0, 0, 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, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 95 */
- 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, 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, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 96 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0, 0,
- 0, 1, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 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, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 97 */
- 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, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 98 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 99 */
- 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, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 100 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 101 */
- 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, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 102 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 0, 0,
- 0, 1, 1, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0,
- 1, 1, 1, 1, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 103 */
- 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, 0, 0,
- 0, 1, 1, 1, 0, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 0, 0,
-
-/* Char 104 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 105 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 106 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 0, 0,
-
-/* Char 107 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 1, 1, 0, 0,
- 1, 1, 1, 1, 0, 0, 0,
- 1, 1, 1, 1, 0, 0, 0,
- 1, 1, 0, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 108 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 109 */
- 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, 0, 0,
- 1, 1, 0, 1, 1, 0, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 110 */
- 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, 0, 0,
- 1, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 111 */
- 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, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 112 */
- 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, 0, 0,
- 1, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
-
-/* Char 113 */
- 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, 0, 0,
- 0, 1, 1, 1, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 1, 1, 0,
-
-/* Char 114 */
- 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, 0, 0,
- 1, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 115 */
- 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, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 116 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 0, 0,
- 0, 1, 1, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0,
- 0, 1, 1, 0, 1, 1, 0,
- 0, 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 117 */
- 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, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 118 */
- 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, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 119 */
- 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, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 0, 1, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 120 */
- 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, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 121 */
- 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, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 0, 0,
-
-/* Char 122 */
- 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, 0, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 1, 1, 0, 0,
- 0, 1, 1, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 123 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 0, 0,
- 0, 1, 1, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 124 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 125 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 1, 1, 0, 0,
- 0, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 126 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 1, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 1, 0, 0, 1, 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, 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,
-
-/* Char 127 */
- 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, 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, 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,
-
-/* Char 128 */
- 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, 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, 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,
-
-/* Char 129 */
- 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, 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, 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,
-
-/* Char 130 */
- 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, 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, 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,
-
-/* Char 131 */
- 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, 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, 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,
-
-/* Char 132 */
- 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, 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, 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,
-
-/* Char 133 */
- 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, 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, 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,
-
-/* Char 134 */
- 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, 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, 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,
-
-/* Char 135 */
- 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, 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, 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,
-
-/* Char 136 */
- 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, 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, 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,
-
-/* Char 137 */
- 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, 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, 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,
-
-/* Char 138 */
- 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, 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, 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,
-
-/* Char 139 */
- 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, 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, 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,
-
-/* Char 140 */
- 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, 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, 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,
-
-/* Char 141 */
- 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, 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, 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,
-
-/* Char 142 */
- 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, 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, 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,
-
-/* Char 143 */
- 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, 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, 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,
-
-/* Char 144 */
- 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, 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, 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,
-
-/* Char 145 */
- 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, 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, 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,
-
-/* Char 146 */
- 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, 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, 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,
-
-/* Char 147 */
- 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, 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, 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,
-
-/* Char 148 */
- 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, 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, 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,
-
-/* Char 149 */
- 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, 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, 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,
-
-/* Char 150 */
- 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, 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, 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,
-
-/* Char 151 */
- 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, 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, 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,
-
-/* Char 152 */
- 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, 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, 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,
-
-/* Char 153 */
- 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, 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, 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,
-
-/* Char 154 */
- 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, 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, 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,
-
-/* Char 155 */
- 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, 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, 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,
-
-/* Char 156 */
- 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, 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, 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,
-
-/* Char 157 */
- 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, 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, 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,
-
-/* Char 158 */
- 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, 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, 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,
-
-/* Char 159 */
- 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, 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, 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,
-
-/* Char 160 */
- 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, 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, 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,
-
-/* Char 161 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 1, 1, 0,
-
-/* Char 162 */
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 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, 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,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 163 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 1, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 1, 1, 1, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0,
- 1, 1, 1, 0, 0, 0, 0,
- 1, 1, 1, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 164 */
- 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, 1, 0, 0, 1, 1, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 0, 1, 0, 0, 1, 0, 0,
- 0, 1, 0, 0, 1, 0, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 165 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 166 */
- 0, 0, 0, 1, 1, 1, 0,
- 0, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 167 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 168 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 1, 1, 0,
- 0, 1, 1, 0, 1, 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, 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, 0, 0, 0, 0, 0, 0,
-
-/* Char 169 */
- 0, 1, 1, 0, 1, 1, 0,
- 0, 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 170 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0,
-
-/* Char 171 */
- 0, 1, 1, 0, 1, 1, 0,
- 0, 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 172 */
- 0, 0, 0, 1, 1, 1, 0,
- 0, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 173 */
- 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, 0, 0,
- 0, 1, 1, 1, 1, 1, 0,
- 0, 1, 1, 1, 1, 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, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 174 */
- 0, 1, 1, 0, 1, 1, 0,
- 0, 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 175 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 176 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 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, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 177 */
- 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, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 1, 1, 0,
-
-/* Char 178 */
- 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, 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, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 1, 1, 0,
-
-/* Char 179 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 1, 0,
- 0, 0, 1, 1, 1, 1, 0,
- 0, 0, 1, 1, 1, 0, 0,
- 0, 1, 1, 1, 0, 0, 0,
- 1, 1, 1, 1, 0, 0, 0,
- 1, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 180 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 1, 0,
- 0, 1, 1, 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, 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, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 181 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 1, 0,
- 1, 1, 1, 0, 1, 1, 0,
- 0, 1, 1, 0, 1, 0, 0,
- 0, 1, 1, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 182 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 1, 0,
- 0, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 183 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 1, 1, 0,
- 0, 0, 1, 1, 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, 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,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 184 */
- 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, 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, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0,
- 0, 1, 1, 1, 0, 0, 0,
-
-/* Char 185 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 1, 1, 0,
- 0, 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 186 */
- 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, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0,
-
-/* Char 187 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 1, 0,
- 0, 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 1, 0, 0,
- 0, 1, 1, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 0, 0,
- 0, 1, 1, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0,
- 0, 1, 1, 0, 1, 1, 0,
- 0, 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 188 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 1, 0,
- 0, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 1, 1, 0, 0,
- 0, 1, 1, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 189 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 1, 1,
- 1, 1, 0, 0, 1, 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, 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, 0, 0, 0, 0, 0, 0,
-
-/* Char 190 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 1, 1, 0,
- 0, 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 1, 1, 0, 0,
- 0, 1, 1, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 191 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 1, 1, 0, 0,
- 0, 1, 1, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 192 */
- 0, 0, 0, 1, 1, 1, 0,
- 0, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 1, 1, 1, 0, 0,
- 1, 1, 1, 1, 0, 0, 0,
- 1, 1, 0, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 193 */
- 0, 0, 0, 1, 1, 1, 0,
- 0, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 194 */
- 0, 0, 1, 1, 0, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 195 */
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 196 */
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 197 */
- 0, 0, 0, 1, 1, 1, 0,
- 0, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 198 */
- 0, 0, 0, 1, 1, 1, 0,
- 0, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 199 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0,
-
-/* Char 200 */
- 0, 1, 1, 0, 1, 1, 0,
- 0, 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 201 */
- 0, 0, 0, 1, 1, 1, 0,
- 0, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 202 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 1, 1, 0,
-
-/* Char 203 */
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 204 */
- 0, 1, 1, 0, 1, 1, 0,
- 0, 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 205 */
- 0, 0, 0, 1, 1, 1, 0,
- 0, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 206 */
- 0, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 207 */
- 0, 1, 1, 0, 1, 1, 0,
- 0, 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 208 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 0, 0,
- 0, 1, 1, 0, 1, 1, 0,
- 0, 1, 1, 0, 1, 1, 0,
- 1, 1, 1, 0, 1, 1, 0,
- 0, 1, 1, 0, 1, 1, 0,
- 0, 1, 1, 0, 1, 1, 0,
- 0, 1, 1, 0, 1, 1, 0,
- 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 209 */
- 0, 0, 0, 1, 1, 1, 0,
- 0, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 1, 0, 1, 1, 0,
- 1, 1, 1, 0, 1, 1, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 1, 1, 0, 1, 1, 1, 0,
- 1, 1, 0, 1, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 210 */
- 0, 1, 1, 0, 1, 1, 0,
- 0, 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 1, 0, 1, 1, 0,
- 1, 1, 1, 0, 1, 1, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 1, 1, 0, 1, 1, 1, 0,
- 1, 1, 0, 1, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 211 */
- 0, 0, 0, 1, 1, 1, 0,
- 0, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 212 */
- 0, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 213 */
- 0, 1, 1, 0, 0, 1, 1,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 214 */
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 215 */
- 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, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 216 */
- 0, 1, 1, 0, 1, 1, 0,
- 0, 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 1, 1, 1, 0, 0,
- 1, 1, 1, 1, 0, 0, 0,
- 1, 1, 0, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 217 */
- 0, 0, 1, 1, 0, 0, 0,
- 0, 1, 0, 0, 1, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 218 */
- 0, 0, 0, 1, 1, 1, 0,
- 0, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 219 */
- 0, 1, 1, 0, 0, 1, 1,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 220 */
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 221 */
- 0, 0, 0, 1, 1, 1, 0,
- 0, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 222 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
-
-/* Char 223 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 1, 0, 1, 1, 0,
- 1, 1, 0, 1, 1, 0, 0,
- 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 224 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 1, 0,
- 0, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 225 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 1, 0,
- 0, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 226 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 0, 0,
- 0, 1, 1, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 227 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 228 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 229 */
- 0, 0, 0, 1, 1, 1, 0,
- 0, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 230 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 1, 0,
- 0, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 231 */
- 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, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0,
-
-/* Char 232 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 1, 1, 0,
- 0, 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 233 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 1, 0,
- 0, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 234 */
- 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, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0,
-
-/* Char 235 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 236 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 1, 1, 0,
- 0, 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 237 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 1, 0,
- 0, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 238 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0, 0,
- 1, 1, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 239 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 1,
- 0, 0, 0, 1, 1, 0, 1,
- 0, 0, 0, 1, 1, 1, 0,
- 0, 0, 0, 1, 1, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 1, 1, 0, 0,
- 1, 1, 0, 1, 1, 0, 0,
- 1, 1, 0, 1, 1, 0, 0,
- 1, 1, 0, 1, 1, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 240 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 1, 1, 1, 1,
- 0, 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 241 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 1, 0,
- 0, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 242 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 1, 1, 0,
- 0, 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 243 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 1, 0,
- 0, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 244 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 0, 0,
- 0, 1, 1, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 245 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 1, 1,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 246 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 247 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 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,
-
-/* Char 248 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 1, 1, 0,
- 0, 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 249 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 1, 0, 0, 1, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 250 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 1, 0,
- 0, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 251 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 1, 1,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 252 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-/* Char 253 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 1, 0,
- 0, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 0, 0,
-
-/* Char 254 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 0, 0,
- 0, 1, 1, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0,
- 0, 1, 1, 0, 1, 1, 0,
- 0, 0, 1, 1, 1, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0,
-
-/* Char 255 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 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, 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, 0,
-
-
-};
-
-gdFont gdFontMediumBoldRep =
-{
- 256,
- 0,
- 7,
- 13,
- gdFontMediumBoldData
-};
-
-gdFontPtr gdFontMediumBold = &gdFontMediumBoldRep;
-
-gdFontPtr gdFontGetMediumBold(void)
-{
- return gdFontMediumBold;
-}
-
-/* This file has not been truncated. */
diff --git a/ext/gd/libgd/gdfontmb.h b/ext/gd/libgd/gdfontmb.h
deleted file mode 100644
index 2e2f0cbe47..0000000000
--- a/ext/gd/libgd/gdfontmb.h
+++ /dev/null
@@ -1,29 +0,0 @@
-
-#ifndef _GDFONTMB_H_
-#define _GDFONTMB_H_ 1
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*
- This is a header file for gd font, generated using
- bdftogd version 0.5 by Jan Pazdziora, adelton@fi.muni.cz
- from bdf font
- -misc-fixed-bold-r-normal-sans-13-94-100-100-c-70-iso8859-2
- at Thu Jan 8 13:54:57 1998.
- No copyright info was found in the original bdf.
- */
-
-
-#include "gd.h"
-
-extern gdFontPtr gdFontMediumBold;
-extern gdFontPtr gdFontGetMediumBold(void);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
-
diff --git a/ext/gd/libgd/gdfonts.c b/ext/gd/libgd/gdfonts.c
deleted file mode 100644
index 165cf70c54..0000000000
--- a/ext/gd/libgd/gdfonts.c
+++ /dev/null
@@ -1,3876 +0,0 @@
-
-
-/*
- This is a header file for gd font, generated using
- bdftogd version 0.5 by Jan Pazdziora, adelton@fi.muni.cz
- from bdf font
- -misc-fixed-medium-r-semicondensed-sans-12-116-75-75-c-60-iso8859-2
- at Thu Jan 8 14:13:20 1998.
- No copyright info was found in the original bdf.
- */
-
-
-#include "gdfonts.h"
-
-char gdFontSmallData[] =
-{
-/* Char 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, 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, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 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, 1, 0, 0, 0,
- 0, 1, 1, 1, 0, 0,
- 1, 1, 1, 1, 1, 0,
- 0, 1, 1, 1, 0, 0,
- 0, 0, 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,
-
-/* Char 2 */
- 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 1, 0, 1,
- 1, 0, 1, 0, 1, 0,
- 0, 1, 0, 1, 0, 1,
- 1, 0, 1, 0, 1, 0,
- 0, 1, 0, 1, 0, 1,
- 1, 0, 1, 0, 1, 0,
- 0, 1, 0, 1, 0, 1,
- 1, 0, 1, 0, 1, 0,
- 0, 1, 0, 1, 0, 1,
- 1, 0, 1, 0, 1, 0,
- 0, 1, 0, 1, 0, 1,
- 1, 0, 1, 0, 1, 0,
-
-/* Char 3 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 0, 1, 0, 0, 0,
- 1, 0, 1, 0, 0, 0,
- 1, 1, 1, 0, 0, 0,
- 1, 0, 1, 0, 0, 0,
- 1, 0, 1, 0, 0, 0,
- 0, 0, 1, 1, 1, 0,
- 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 4 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 1, 1, 1, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 5 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0,
- 0, 1, 1, 1, 0, 0,
- 0, 1, 0, 0, 1, 0,
- 0, 1, 1, 1, 0, 0,
- 0, 1, 0, 1, 0, 0,
- 0, 1, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 6 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 1, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 7 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0,
- 1, 0, 0, 1, 0, 0,
- 1, 0, 0, 1, 0, 0,
- 0, 1, 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, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 8 */
- 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, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 1, 1, 1, 1, 1, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 9 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 1, 0, 0, 1, 0,
- 1, 0, 1, 0, 1, 0,
- 1, 0, 0, 1, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 1, 1, 1,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 10 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 1, 0, 1, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 11 */
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 1, 1, 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, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 12 */
- 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, 0, 0, 0,
- 1, 1, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
-
-/* Char 13 */
- 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, 0, 0, 0,
- 0, 0, 1, 1, 1, 1,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
-
-/* Char 14 */
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 1, 1, 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, 0, 0, 0, 0,
-
-/* Char 15 */
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 1, 1, 1, 1, 1, 1,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
-
-/* Char 16 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 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, 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,
-
-/* Char 17 */
- 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, 1, 1, 1, 1, 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, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 18 */
- 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, 0, 0, 0,
- 1, 1, 1, 1, 1, 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, 0, 0, 0, 0,
-
-/* Char 19 */
- 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, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 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,
-
-/* Char 20 */
- 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, 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, 1, 1, 1, 1, 1,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 21 */
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 1, 1, 1,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
-
-/* Char 22 */
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 1, 1, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
-
-/* Char 23 */
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 1, 1, 1, 1, 1, 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, 0, 0, 0, 0,
-
-/* Char 24 */
- 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, 0, 0, 0,
- 1, 1, 1, 1, 1, 1,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
-
-/* Char 25 */
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
-
-/* Char 26 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 1, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 1, 0,
- 0, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 27 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 1, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 28 */
- 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, 1, 1, 1, 1, 0,
- 0, 1, 0, 1, 0, 0,
- 0, 1, 0, 1, 0, 0,
- 0, 1, 0, 1, 0, 0,
- 0, 1, 0, 1, 0, 0,
- 1, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 29 */
- 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, 0, 1, 0,
- 1, 1, 1, 1, 1, 0,
- 0, 0, 1, 0, 0, 0,
- 1, 1, 1, 1, 1, 0,
- 1, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 30 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0,
- 0, 1, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0,
- 1, 1, 1, 0, 0, 0,
- 0, 1, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0,
- 0, 1, 0, 0, 1, 0,
- 1, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 31 */
- 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, 0, 0, 0,
- 0, 0, 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, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 32 */
- 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, 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,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 33 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 34 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 1, 0, 0,
- 0, 1, 0, 1, 0, 0,
- 0, 1, 0, 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,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 35 */
- 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, 0, 1, 0, 0,
- 0, 1, 0, 1, 0, 0,
- 1, 1, 1, 1, 1, 0,
- 0, 1, 0, 1, 0, 0,
- 1, 1, 1, 1, 1, 0,
- 0, 1, 0, 1, 0, 0,
- 0, 1, 0, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 36 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 1, 1, 1, 1, 0,
- 1, 0, 1, 0, 0, 0,
- 1, 0, 1, 0, 0, 0,
- 0, 1, 1, 1, 0, 0,
- 0, 0, 1, 0, 1, 0,
- 0, 0, 1, 0, 1, 0,
- 1, 1, 1, 1, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 37 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 1, 0,
- 1, 0, 1, 0, 1, 0,
- 0, 1, 0, 1, 0, 0,
- 0, 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 1, 0, 0, 0, 0,
- 0, 1, 0, 1, 0, 0,
- 1, 0, 1, 0, 1, 0,
- 1, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 38 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0,
- 1, 0, 1, 0, 0, 0,
- 1, 0, 1, 0, 0, 0,
- 0, 1, 0, 0, 0, 0,
- 1, 0, 1, 0, 0, 0,
- 1, 0, 0, 1, 1, 0,
- 1, 0, 0, 1, 0, 0,
- 0, 1, 1, 0, 1, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 39 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 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, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 40 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 1, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 41 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 42 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 1, 0, 1, 0, 1, 0,
- 0, 1, 1, 1, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 1, 1, 1, 0, 0,
- 1, 0, 1, 0, 1, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 43 */
- 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, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 1, 1, 1, 1, 1, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 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,
-
-/* Char 44 */
- 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, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 45 */
- 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, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 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,
-
-/* Char 46 */
- 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, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0,
- 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 47 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 1, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 48 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 1, 0, 1, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 1, 0, 1, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 49 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 1, 1, 0, 0, 0,
- 1, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 50 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 1, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 51 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 1, 0,
- 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 52 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0,
- 0, 0, 1, 1, 0, 0,
- 0, 1, 0, 1, 0, 0,
- 1, 0, 0, 1, 0, 0,
- 1, 0, 0, 1, 0, 0,
- 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 53 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 54 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 0,
- 0, 1, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 55 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 1, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 56 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 1, 1, 1, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 57 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 1, 0, 0,
- 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 58 */
- 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, 1, 0, 0,
- 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0,
- 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 59 */
- 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, 1, 0, 0,
- 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 60 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 1, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 61 */
- 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, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 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,
-
-/* Char 62 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 1, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 63 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 64 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 1, 1, 0,
- 1, 0, 1, 0, 1, 0,
- 1, 0, 1, 0, 1, 0,
- 1, 0, 1, 1, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 65 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 1, 0, 1, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 1, 1, 1, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 66 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 1, 1, 1, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 67 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 68 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 69 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 70 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 71 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 1, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 72 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 1, 1, 1, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 73 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 74 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 1, 0, 0,
- 1, 0, 0, 1, 0, 0,
- 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 75 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 1, 0, 0,
- 1, 0, 1, 0, 0, 0,
- 1, 1, 1, 0, 0, 0,
- 1, 0, 0, 1, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 76 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 77 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 1, 0, 1, 1, 0,
- 1, 0, 1, 0, 1, 0,
- 1, 0, 1, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 78 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 1, 0, 0, 1, 0,
- 1, 1, 0, 0, 1, 0,
- 1, 0, 1, 0, 1, 0,
- 1, 0, 1, 0, 1, 0,
- 1, 0, 0, 1, 1, 0,
- 1, 0, 0, 1, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 79 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 80 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 1, 1, 1, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 81 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 1, 0, 1, 0,
- 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 82 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 1, 1, 1, 0, 0,
- 1, 0, 1, 0, 0, 0,
- 1, 0, 0, 1, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 83 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 84 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 85 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 86 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 1, 0, 1, 0, 0,
- 0, 1, 0, 1, 0, 0,
- 0, 1, 0, 1, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 87 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 1, 0, 1, 0,
- 1, 0, 1, 0, 1, 0,
- 1, 0, 1, 0, 1, 0,
- 1, 0, 1, 0, 1, 0,
- 1, 1, 0, 1, 1, 0,
- 0, 1, 0, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 88 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 1, 0, 1, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 1, 0, 1, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 89 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 1, 0, 1, 0, 0,
- 0, 1, 0, 1, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 90 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 1, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 91 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0,
- 0, 1, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 92 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 93 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 1, 0, 0,
- 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 94 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 1, 0, 1, 0, 0,
- 1, 0, 0, 0, 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, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 95 */
- 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, 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, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 96 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 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,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 97 */
- 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, 1, 1, 0, 0,
- 0, 0, 0, 0, 1, 0,
- 0, 1, 1, 1, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 1, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 98 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 1, 0, 0, 1, 0,
- 1, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 99 */
- 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, 1, 1, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 100 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 1, 0,
- 0, 1, 1, 0, 1, 0,
- 1, 0, 0, 1, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 1, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 101 */
- 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, 1, 1, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 1, 1, 1, 1, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 102 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0,
- 0, 1, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0,
- 1, 1, 1, 1, 0, 0,
- 0, 1, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 103 */
- 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, 0,
- 0, 1, 1, 1, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 1, 1, 1, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 1, 1, 1, 0, 0,
-
-/* Char 104 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 105 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 106 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 1, 0, 0,
- 1, 0, 0, 1, 0, 0,
- 1, 0, 0, 1, 0, 0,
- 0, 1, 1, 0, 0, 0,
-
-/* Char 107 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 1, 0, 0,
- 1, 0, 1, 0, 0, 0,
- 1, 1, 0, 0, 0, 0,
- 1, 0, 1, 0, 0, 0,
- 1, 0, 0, 1, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 108 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 109 */
- 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, 1, 0, 1, 0, 0,
- 1, 0, 1, 0, 1, 0,
- 1, 0, 1, 0, 1, 0,
- 1, 0, 1, 0, 1, 0,
- 1, 0, 1, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 110 */
- 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, 0, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 111 */
- 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, 1, 1, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 112 */
- 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, 0, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 1, 0, 0, 1, 0,
- 1, 0, 1, 1, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
-
-/* Char 113 */
- 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, 1, 0, 1, 0,
- 1, 0, 0, 1, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 1, 0,
- 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 1, 0,
-
-/* Char 114 */
- 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, 0, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 115 */
- 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, 1, 1, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 116 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0,
- 1, 1, 1, 1, 0, 0,
- 0, 1, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0,
- 0, 1, 0, 0, 1, 0,
- 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 117 */
- 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, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 1, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 118 */
- 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, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 1, 0, 1, 0, 0,
- 0, 1, 0, 1, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 119 */
- 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, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 1, 0, 1, 0,
- 1, 0, 1, 0, 1, 0,
- 1, 0, 1, 0, 1, 0,
- 0, 1, 0, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 120 */
- 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, 0, 0, 0, 1, 0,
- 0, 1, 0, 1, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 1, 0, 1, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 121 */
- 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, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 1, 0,
- 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 1, 0, 0,
- 1, 1, 1, 0, 0, 0,
-
-/* Char 122 */
- 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, 1, 1, 1, 1, 0,
- 0, 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 1, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 123 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 1, 1, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 124 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 125 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 1, 1, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 126 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 1, 0,
- 1, 0, 1, 0, 1, 0,
- 1, 0, 0, 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,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 127 */
- 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, 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,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 128 */
- 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, 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,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 129 */
- 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, 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,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 130 */
- 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, 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,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 131 */
- 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, 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,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 132 */
- 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, 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,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 133 */
- 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, 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,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 134 */
- 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, 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,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 135 */
- 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, 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,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 136 */
- 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, 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,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 137 */
- 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, 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,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 138 */
- 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, 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,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 139 */
- 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, 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,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 140 */
- 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, 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,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 141 */
- 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, 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,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 142 */
- 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, 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,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 143 */
- 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, 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,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 144 */
- 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, 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,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 145 */
- 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, 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,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 146 */
- 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, 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,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 147 */
- 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, 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,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 148 */
- 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, 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,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 149 */
- 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, 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,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 150 */
- 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, 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,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 151 */
- 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, 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,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 152 */
- 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, 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,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 153 */
- 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, 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,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 154 */
- 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, 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,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 155 */
- 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, 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,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 156 */
- 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, 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,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 157 */
- 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, 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,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 158 */
- 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, 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,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 159 */
- 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, 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,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 160 */
- 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, 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,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 161 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 1, 0, 1, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 1, 1, 1, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 1, 1,
-
-/* Char 162 */
- 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 1, 1, 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,
- 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,
-
-/* Char 163 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0,
- 0, 1, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 164 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 1, 1, 1, 0, 0,
- 0, 1, 0, 1, 0, 0,
- 0, 1, 0, 1, 0, 0,
- 0, 1, 1, 1, 0, 0,
- 1, 0, 0, 0, 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,
-
-/* Char 165 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0,
- 1, 0, 0, 1, 0, 0,
- 1, 0, 1, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 166 */
- 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 167 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0,
- 0, 1, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0,
- 0, 1, 0, 0, 1, 0,
- 0, 1, 0, 0, 1, 0,
- 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 1, 0,
- 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 168 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 1, 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, 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,
-
-/* Char 169 */
- 0, 1, 0, 1, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 170 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 1, 1, 1, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 1, 0, 0, 0, 0,
-
-/* Char 171 */
- 0, 1, 0, 1, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 172 */
- 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 1, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 173 */
- 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, 0, 0, 0,
- 1, 1, 1, 1, 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, 0, 0, 0, 0, 0,
-
-/* Char 174 */
- 0, 1, 0, 1, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 1, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 175 */
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 1, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 176 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0,
- 0, 1, 0, 0, 1, 0,
- 0, 1, 0, 0, 1, 0,
- 0, 0, 1, 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,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 177 */
- 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, 1, 1, 0, 0,
- 0, 0, 0, 0, 1, 0,
- 0, 1, 1, 1, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 1, 0,
- 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 1, 1,
-
-/* Char 178 */
- 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, 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, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 1, 1, 0,
-
-/* Char 179 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 180 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 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, 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,
-
-/* Char 181 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 1,
- 0, 1, 1, 0, 0, 1,
- 0, 0, 1, 0, 1, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 182 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 183 */
- 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 1, 0, 1, 0, 0,
- 0, 0, 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, 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,
-
-/* Char 184 */
- 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, 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, 0, 0, 0,
- 0, 0, 0, 1, 0, 0,
- 0, 1, 1, 0, 0, 0,
-
-/* Char 185 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 1, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 186 */
- 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, 1, 1, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 1, 1, 1, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 1, 0, 0, 0, 0,
-
-/* Char 187 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 1, 0, 0,
- 0, 1, 0, 0, 0, 0,
- 1, 1, 1, 1, 0, 0,
- 0, 1, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0,
- 0, 1, 0, 0, 1, 0,
- 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 188 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 1, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 189 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 1,
- 0, 1, 0, 0, 1, 0,
- 1, 0, 0, 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,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 190 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 1, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 1, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 191 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 1, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 192 */
- 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 1, 1, 1, 0, 0,
- 1, 0, 1, 0, 0, 0,
- 1, 0, 0, 1, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 193 */
- 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 1, 0, 1, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 1, 1, 1, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 194 */
- 0, 0, 1, 0, 0, 0,
- 0, 1, 0, 1, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 1, 0, 1, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 1, 1, 1, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 195 */
- 1, 0, 0, 0, 1, 0,
- 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 1, 0, 1, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 1, 1, 1, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 196 */
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 1, 0, 1, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 1, 1, 1, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 197 */
- 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 198 */
- 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 199 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 1, 0, 0,
- 0, 1, 1, 0, 0, 0,
-
-/* Char 200 */
- 0, 1, 0, 1, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 201 */
- 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 202 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 1, 1, 0,
-
-/* Char 203 */
- 0, 1, 0, 1, 0, 0,
- 0, 1, 0, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 204 */
- 0, 1, 0, 1, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 205 */
- 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 206 */
- 0, 0, 1, 0, 0, 0,
- 0, 1, 0, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 207 */
- 0, 1, 0, 1, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 208 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 0, 0,
- 0, 1, 0, 0, 1, 0,
- 0, 1, 0, 0, 1, 0,
- 1, 1, 1, 0, 1, 0,
- 0, 1, 0, 0, 1, 0,
- 0, 1, 0, 0, 1, 0,
- 0, 1, 0, 0, 1, 0,
- 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 209 */
- 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 1, 0, 0, 1, 0,
- 1, 1, 0, 0, 1, 0,
- 1, 0, 1, 0, 1, 0,
- 1, 0, 1, 0, 1, 0,
- 1, 0, 0, 1, 1, 0,
- 1, 0, 0, 1, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 210 */
- 0, 1, 0, 1, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 1, 0, 0, 1, 0,
- 1, 1, 0, 0, 1, 0,
- 1, 0, 1, 0, 1, 0,
- 1, 0, 1, 0, 1, 0,
- 1, 0, 0, 1, 1, 0,
- 1, 0, 0, 1, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 211 */
- 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 212 */
- 0, 0, 1, 0, 0, 0,
- 0, 1, 0, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 213 */
- 0, 0, 1, 0, 0, 1,
- 0, 1, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 214 */
- 0, 1, 0, 1, 0, 0,
- 0, 1, 0, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 215 */
- 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, 0, 0, 0, 1, 0,
- 0, 1, 0, 1, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 1, 0, 1, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 216 */
- 0, 1, 0, 1, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 1, 1, 1, 0, 0,
- 1, 0, 1, 0, 0, 0,
- 1, 0, 0, 1, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 217 */
- 0, 0, 1, 0, 0, 0,
- 0, 1, 0, 1, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 218 */
- 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 219 */
- 0, 0, 1, 0, 0, 1,
- 0, 1, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 220 */
- 0, 1, 0, 1, 0, 0,
- 0, 1, 0, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 221 */
- 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 1, 0, 1, 0, 0,
- 0, 1, 0, 1, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 222 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0, 0,
-
-/* Char 223 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 1, 1, 1, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 1, 0, 0, 1, 0,
- 1, 0, 1, 1, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 224 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 0, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 225 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 1, 0,
- 0, 1, 1, 1, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 1, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 226 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 1, 0, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 1, 0,
- 0, 1, 1, 1, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 1, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 227 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 1, 0,
- 0, 1, 1, 1, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 1, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 228 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 1, 0,
- 0, 1, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 1, 0,
- 0, 1, 1, 1, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 1, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 229 */
- 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 230 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 231 */
- 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, 1, 1, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 1, 0, 0,
- 0, 1, 1, 0, 0, 0,
-
-/* Char 232 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 1, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 233 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 1, 1, 1, 1, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 234 */
- 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, 1, 1, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 1, 1, 1, 1, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 1, 1, 0,
-
-/* Char 235 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 1, 0, 0,
- 0, 1, 0, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 1, 1, 1, 1, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 236 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 1, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 1, 1, 1, 1, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 237 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 238 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 1, 0, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 239 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 1,
- 0, 0, 0, 0, 0, 1,
- 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 1, 0, 0,
- 0, 1, 0, 1, 0, 0,
- 1, 0, 1, 1, 0, 0,
- 1, 0, 0, 1, 0, 0,
- 1, 0, 0, 1, 0, 0,
- 1, 0, 0, 1, 0, 0,
- 0, 1, 1, 0, 1, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 240 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 1, 1, 1,
- 0, 0, 0, 0, 1, 0,
- 0, 1, 1, 0, 1, 0,
- 1, 0, 0, 1, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 1, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 241 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 0, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 242 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 1, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 0, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 243 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 244 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 1, 0, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 245 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 246 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 1, 0, 0,
- 0, 1, 0, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 247 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 248 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 1, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 0, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 249 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 1, 0, 1, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 1, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 250 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 1, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 251 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 1, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 252 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 1, 0, 0,
- 0, 1, 0, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 1, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-/* Char 253 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 1, 0,
- 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 1, 0, 0,
- 1, 1, 1, 0, 0, 0,
-
-/* Char 254 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0,
- 1, 1, 1, 1, 0, 0,
- 0, 1, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0,
- 0, 1, 0, 0, 1, 0,
- 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0, 0,
-
-/* Char 255 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 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, 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,
-
-
-};
-
-gdFont gdFontSmallRep =
-{
- 256,
- 0,
- 6,
- 13,
- gdFontSmallData
-};
-
-gdFontPtr gdFontSmall = &gdFontSmallRep;
-
-gdFontPtr gdFontGetSmall(void)
-{
- return gdFontSmall;
-}
-
-/* This file has not been truncated. */
diff --git a/ext/gd/libgd/gdfonts.h b/ext/gd/libgd/gdfonts.h
deleted file mode 100644
index 55d0e1f0b2..0000000000
--- a/ext/gd/libgd/gdfonts.h
+++ /dev/null
@@ -1,29 +0,0 @@
-
-#ifndef _GDFONTS_H_
-#define _GDFONTS_H_ 1
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*
- This is a header file for gd font, generated using
- bdftogd version 0.5 by Jan Pazdziora, adelton@fi.muni.cz
- from bdf font
- -misc-fixed-medium-r-semicondensed-sans-12-116-75-75-c-60-iso8859-2
- at Thu Jan 8 14:13:20 1998.
- No copyright info was found in the original bdf.
- */
-
-
-#include "gd.h"
-
-extern gdFontPtr gdFontSmall;
-extern gdFontPtr gdFontGetSmall(void);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
-
diff --git a/ext/gd/libgd/gdfontt.c b/ext/gd/libgd/gdfontt.c
deleted file mode 100644
index 2e6d241506..0000000000
--- a/ext/gd/libgd/gdfontt.c
+++ /dev/null
@@ -1,2597 +0,0 @@
-
-
-/*
- This is a header file for gd font, generated using
- bdftogd version 0.5 by Jan Pazdziora, adelton@fi.muni.cz
- from bdf font
- -Misc-Fixed-Medium-R-Normal--8-80-75-75-C-50-ISO8859-2
- at Thu Jan 8 13:49:54 1998.
- The original bdf was holding following copyright:
- "Libor Skarvada, libor@informatics.muni.cz"
- */
-
-
-#include "gdfontt.h"
-
-char gdFontTinyData[] =
-{
-/* Char 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, 0, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 1 */
- 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 1, 1, 1, 0,
- 1, 1, 1, 1, 1,
- 0, 1, 1, 1, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 2 */
- 0, 1, 0, 1, 0,
- 1, 0, 1, 0, 0,
- 0, 1, 0, 1, 0,
- 1, 0, 1, 0, 0,
- 0, 1, 0, 1, 0,
- 1, 0, 1, 0, 0,
- 0, 1, 0, 1, 0,
- 1, 0, 1, 0, 0,
-
-/* Char 3 */
- 0, 1, 0, 1, 0,
- 0, 1, 0, 1, 0,
- 0, 1, 1, 1, 0,
- 0, 1, 0, 1, 0,
- 0, 1, 0, 1, 0,
- 0, 0, 1, 1, 1,
- 0, 0, 0, 1, 0,
- 0, 0, 0, 1, 0,
-
-/* Char 4 */
- 1, 1, 1, 0, 0,
- 1, 0, 0, 0, 0,
- 1, 1, 0, 0, 0,
- 1, 0, 1, 1, 1,
- 1, 0, 1, 0, 0,
- 0, 0, 1, 1, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
-
-/* Char 5 */
- 0, 1, 1, 0, 0,
- 1, 0, 0, 0, 0,
- 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0,
- 0, 0, 1, 0, 1,
- 0, 0, 1, 1, 0,
- 0, 0, 1, 0, 1,
-
-/* Char 6 */
- 1, 0, 0, 0, 0,
- 1, 0, 0, 0, 0,
- 1, 0, 0, 0, 0,
- 1, 1, 1, 0, 0,
- 0, 0, 1, 1, 1,
- 0, 0, 1, 0, 0,
- 0, 0, 1, 1, 0,
- 0, 0, 1, 0, 0,
-
-/* Char 7 */
- 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0,
- 1, 0, 1, 0, 0,
- 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 8 */
- 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 1, 1, 1, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 9 */
- 1, 0, 0, 1, 0,
- 1, 1, 0, 1, 0,
- 1, 0, 1, 1, 0,
- 1, 0, 0, 1, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 1, 1, 1,
-
-/* Char 10 */
- 1, 0, 1, 0, 0,
- 1, 0, 1, 0, 0,
- 1, 0, 1, 0, 0,
- 0, 1, 0, 0, 0,
- 0, 0, 1, 1, 1,
- 0, 0, 0, 1, 0,
- 0, 0, 0, 1, 0,
- 0, 0, 0, 1, 0,
-
-/* Char 11 */
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 12 */
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 1, 1, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
-
-/* Char 13 */
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1,
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
-
-/* Char 14 */
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 1, 1, 1,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 15 */
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 1, 1, 1, 1, 1,
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
-
-/* Char 16 */
- 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 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,
-
-/* Char 17 */
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 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,
-
-/* Char 18 */
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 19 */
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 20 */
- 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, 1, 1, 1, 1,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 21 */
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 1, 1, 1,
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
-
-/* Char 22 */
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 1, 1, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
-
-/* Char 23 */
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 1, 1, 1, 1, 1,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 24 */
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1,
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
-
-/* Char 25 */
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
-
-/* Char 26 */
- 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 0,
- 0, 0, 1, 0, 0,
- 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 0, 1, 0,
- 0, 1, 1, 1, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 27 */
- 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 0, 1, 0,
- 0, 0, 1, 0, 0,
- 0, 1, 0, 0, 0,
- 0, 1, 1, 1, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 28 */
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1,
- 0, 1, 0, 1, 0,
- 0, 1, 0, 1, 0,
- 0, 1, 0, 1, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 29 */
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 0,
- 1, 1, 1, 1, 1,
- 0, 0, 1, 0, 0,
- 1, 1, 1, 1, 1,
- 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 30 */
- 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0,
- 0, 1, 0, 0, 1,
- 1, 1, 1, 0, 0,
- 0, 1, 0, 0, 0,
- 0, 1, 0, 0, 1,
- 1, 0, 1, 1, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 31 */
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 32 */
- 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, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 33 */
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 34 */
- 0, 0, 0, 0, 0,
- 0, 1, 0, 1, 0,
- 0, 1, 0, 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,
-
-/* Char 35 */
- 0, 1, 0, 1, 0,
- 0, 1, 0, 1, 0,
- 1, 1, 1, 1, 1,
- 0, 1, 0, 1, 0,
- 1, 1, 1, 1, 1,
- 0, 1, 0, 1, 0,
- 0, 1, 0, 1, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 36 */
- 0, 0, 1, 0, 0,
- 0, 1, 1, 1, 0,
- 1, 0, 1, 0, 0,
- 0, 1, 1, 1, 0,
- 0, 0, 1, 0, 1,
- 0, 1, 1, 1, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 37 */
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 1,
- 1, 1, 0, 1, 0,
- 0, 0, 1, 0, 0,
- 0, 1, 0, 1, 1,
- 1, 0, 0, 1, 1,
- 0, 0, 0, 0, 0,
-
-/* Char 38 */
- 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 1, 0, 1, 0,
- 0, 0, 1, 0, 0,
- 0, 1, 0, 1, 0,
- 0, 1, 0, 1, 0,
- 0, 0, 1, 0, 1,
- 0, 0, 0, 0, 0,
-
-/* Char 39 */
- 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 40 */
- 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 1, 0, 0, 0,
- 0, 1, 0, 0, 0,
- 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 41 */
- 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 42 */
- 0, 0, 0, 0, 0,
- 1, 0, 0, 1, 0,
- 0, 1, 1, 0, 0,
- 1, 1, 1, 1, 0,
- 0, 1, 1, 0, 0,
- 1, 0, 0, 1, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 43 */
- 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 1, 1, 1, 1, 1,
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 44 */
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0,
- 0, 0, 1, 0, 0,
- 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 45 */
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 46 */
- 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, 1, 0, 0,
- 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 47 */
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1,
- 0, 0, 0, 1, 0,
- 0, 0, 1, 0, 0,
- 0, 1, 0, 0, 0,
- 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 48 */
- 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 1, 0, 1, 0,
- 0, 1, 0, 1, 0,
- 0, 1, 0, 1, 0,
- 0, 1, 0, 1, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 49 */
- 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 1, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 1, 1, 1, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 50 */
- 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0,
- 1, 0, 0, 1, 0,
- 0, 0, 0, 1, 0,
- 0, 0, 1, 0, 0,
- 0, 1, 0, 0, 0,
- 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 51 */
- 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0,
- 1, 0, 0, 1, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 52 */
- 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 1, 1, 0, 0,
- 1, 0, 1, 0, 0,
- 1, 1, 1, 1, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 53 */
- 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 0,
- 1, 0, 0, 0, 0,
- 1, 1, 1, 0, 0,
- 0, 0, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 54 */
- 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0,
- 1, 0, 0, 0, 0,
- 1, 0, 1, 0, 0,
- 1, 1, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 55 */
- 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 0,
- 0, 0, 0, 1, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 1, 0, 0, 0,
- 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 56 */
- 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0,
- 1, 0, 0, 1, 0,
- 0, 1, 1, 0, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 57 */
- 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 1, 1, 0,
- 0, 1, 0, 1, 0,
- 0, 0, 0, 1, 0,
- 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 58 */
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0,
- 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0,
- 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 59 */
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0,
- 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0,
- 0, 0, 1, 0, 0,
- 0, 1, 0, 0, 0,
-
-/* Char 60 */
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 0,
- 0, 0, 1, 0, 0,
- 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 61 */
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 62 */
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 0, 1, 0,
- 0, 0, 1, 0, 0,
- 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 63 */
- 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 1, 0, 1, 0,
- 0, 0, 0, 1, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 64 */
- 0, 0, 1, 1, 0,
- 0, 1, 0, 0, 1,
- 1, 0, 0, 1, 1,
- 1, 0, 1, 0, 1,
- 1, 0, 1, 0, 1,
- 1, 0, 0, 1, 0,
- 0, 1, 0, 0, 0,
- 0, 0, 1, 1, 0,
-
-/* Char 65 */
- 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 1, 1, 1, 1, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 66 */
- 0, 0, 0, 0, 0,
- 1, 1, 1, 0, 0,
- 1, 0, 0, 1, 0,
- 1, 1, 1, 0, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 67 */
- 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 0, 0, 0,
- 1, 0, 0, 0, 0,
- 1, 0, 0, 1, 0,
- 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 68 */
- 0, 0, 0, 0, 0,
- 1, 1, 1, 0, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 69 */
- 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 0,
- 1, 0, 0, 0, 0,
- 1, 1, 1, 0, 0,
- 1, 0, 0, 0, 0,
- 1, 0, 0, 0, 0,
- 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 70 */
- 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 0,
- 1, 0, 0, 0, 0,
- 1, 1, 1, 0, 0,
- 1, 0, 0, 0, 0,
- 1, 0, 0, 0, 0,
- 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 71 */
- 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 0, 0, 0,
- 1, 0, 1, 1, 0,
- 1, 0, 0, 1, 0,
- 0, 1, 1, 1, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 72 */
- 0, 0, 0, 0, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 1, 1, 1, 1, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 73 */
- 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 1, 1, 1, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 74 */
- 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0,
- 0, 0, 0, 1, 0,
- 0, 0, 0, 1, 0,
- 0, 0, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 75 */
- 0, 0, 0, 0, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 1, 0, 0,
- 1, 1, 0, 0, 0,
- 1, 0, 1, 0, 0,
- 1, 0, 1, 0, 0,
- 1, 0, 0, 1, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 76 */
- 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0,
- 1, 0, 0, 0, 0,
- 1, 0, 0, 0, 0,
- 1, 0, 0, 0, 0,
- 1, 0, 0, 0, 0,
- 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 77 */
- 0, 0, 0, 0, 0,
- 1, 0, 0, 1, 0,
- 1, 1, 1, 1, 0,
- 1, 1, 1, 1, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 78 */
- 0, 0, 0, 0, 0,
- 1, 0, 0, 1, 0,
- 1, 1, 0, 1, 0,
- 1, 1, 1, 1, 0,
- 1, 0, 1, 1, 0,
- 1, 0, 1, 1, 0,
- 1, 0, 0, 1, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 79 */
- 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 80 */
- 0, 0, 0, 0, 0,
- 1, 1, 1, 0, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 1, 1, 1, 0, 0,
- 1, 0, 0, 0, 0,
- 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 81 */
- 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 1, 1, 0, 1, 0,
- 1, 0, 1, 1, 0,
- 0, 1, 1, 0, 0,
- 0, 0, 0, 1, 0,
-
-/* Char 82 */
- 0, 0, 0, 0, 0,
- 1, 1, 1, 0, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 1, 1, 1, 0, 0,
- 1, 0, 1, 0, 0,
- 1, 0, 0, 1, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 83 */
- 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0,
- 1, 0, 0, 0, 0,
- 1, 0, 0, 0, 0,
- 0, 1, 1, 0, 0,
- 0, 0, 0, 1, 0,
- 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 84 */
- 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1,
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 85 */
- 0, 0, 0, 0, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 86 */
- 0, 0, 0, 0, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 0, 1, 1, 0, 0,
- 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 87 */
- 0, 0, 0, 0, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 1, 1, 1, 1, 0,
- 1, 1, 1, 1, 0,
- 1, 0, 0, 1, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 88 */
- 0, 0, 0, 0, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 0, 1, 1, 0, 0,
- 0, 1, 1, 0, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 89 */
- 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 1,
- 1, 0, 0, 0, 1,
- 0, 1, 0, 1, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 90 */
- 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 0,
- 0, 0, 0, 1, 0,
- 0, 0, 1, 0, 0,
- 0, 1, 0, 0, 0,
- 1, 0, 0, 0, 0,
- 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 91 */
- 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0,
- 0, 1, 0, 0, 0,
- 0, 1, 0, 0, 0,
- 0, 1, 0, 0, 0,
- 0, 1, 0, 0, 0,
- 0, 1, 1, 1, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 92 */
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0,
- 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 1,
- 0, 0, 0, 0, 0,
-
-/* Char 93 */
- 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0,
- 0, 0, 0, 1, 0,
- 0, 0, 0, 1, 0,
- 0, 0, 0, 1, 0,
- 0, 0, 0, 1, 0,
- 0, 1, 1, 1, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 94 */
- 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 1, 0, 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,
-
-/* Char 95 */
- 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, 0, 0,
- 1, 1, 1, 1, 1,
-
-/* Char 96 */
- 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0,
- 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 97 */
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 1, 1, 0,
- 0, 1, 0, 1, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 98 */
- 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0,
- 1, 0, 0, 0, 0,
- 1, 1, 1, 0, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 99 */
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0,
- 1, 0, 0, 0, 0,
- 1, 0, 0, 0, 0,
- 0, 1, 1, 1, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 100 */
- 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 0,
- 0, 0, 0, 1, 0,
- 0, 1, 1, 1, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 1, 1, 0,
- 0, 1, 0, 1, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 101 */
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0,
- 1, 0, 1, 1, 0,
- 1, 1, 0, 0, 0,
- 0, 1, 1, 1, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 102 */
- 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 1, 0, 1, 0,
- 0, 1, 0, 0, 0,
- 1, 1, 1, 0, 0,
- 0, 1, 0, 0, 0,
- 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 103 */
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0,
- 1, 0, 0, 1, 0,
- 0, 1, 1, 1, 0,
- 0, 0, 0, 1, 0,
- 0, 1, 1, 0, 0,
-
-/* Char 104 */
- 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0,
- 1, 0, 0, 0, 0,
- 1, 1, 1, 0, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 105 */
- 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 1, 1, 1, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 106 */
- 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 0,
- 0, 0, 0, 1, 0,
- 0, 0, 0, 1, 0,
- 0, 1, 0, 1, 0,
- 0, 0, 1, 0, 0,
-
-/* Char 107 */
- 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0,
- 1, 0, 0, 0, 0,
- 1, 0, 0, 1, 0,
- 1, 1, 1, 0, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 108 */
- 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 1, 1, 1, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 109 */
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 1, 1, 0, 1, 0,
- 1, 0, 1, 0, 1,
- 1, 0, 1, 0, 1,
- 1, 0, 0, 0, 1,
- 0, 0, 0, 0, 0,
-
-/* Char 110 */
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 1, 0, 1, 0, 0,
- 1, 1, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 111 */
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 112 */
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 1, 1, 1, 0, 0,
- 1, 0, 0, 1, 0,
- 1, 1, 1, 0, 0,
- 1, 0, 0, 0, 0,
- 1, 0, 0, 0, 0,
-
-/* Char 113 */
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0,
- 1, 0, 0, 1, 0,
- 0, 1, 1, 1, 0,
- 0, 0, 0, 1, 0,
- 0, 0, 0, 1, 0,
-
-/* Char 114 */
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 1, 0, 1, 0, 0,
- 1, 1, 0, 1, 0,
- 1, 0, 0, 0, 0,
- 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 115 */
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0,
- 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0,
- 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 116 */
- 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0,
- 0, 1, 0, 0, 0,
- 1, 1, 1, 0, 0,
- 0, 1, 0, 0, 0,
- 0, 1, 0, 1, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 117 */
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 1, 1, 0,
- 0, 1, 0, 1, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 118 */
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 1, 0, 1, 0,
- 0, 1, 0, 1, 0,
- 0, 1, 0, 1, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 119 */
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 1,
- 1, 0, 1, 0, 1,
- 1, 0, 1, 0, 1,
- 0, 1, 1, 1, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 120 */
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 1, 0, 0, 1, 0,
- 0, 1, 1, 0, 0,
- 0, 1, 1, 0, 0,
- 1, 0, 0, 1, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 121 */
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 0, 1, 1, 1, 0,
- 0, 0, 0, 1, 0,
- 0, 1, 1, 0, 0,
-
-/* Char 122 */
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 0,
- 0, 0, 1, 0, 0,
- 0, 1, 0, 0, 0,
- 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 123 */
- 0, 0, 1, 1, 0,
- 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0,
- 1, 1, 0, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 1, 0, 0, 0,
- 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 124 */
- 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 125 */
- 0, 1, 1, 0, 0,
- 0, 0, 0, 1, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 0, 1, 1,
- 0, 0, 1, 0, 0,
- 0, 0, 0, 1, 0,
- 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 126 */
- 0, 0, 0, 0, 0,
- 0, 1, 0, 1, 0,
- 1, 0, 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,
-
-/* Char 127 */
- 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, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 128 */
- 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, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 129 */
- 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, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 130 */
- 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, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 131 */
- 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, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 132 */
- 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, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 133 */
- 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, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 134 */
- 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, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 135 */
- 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, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 136 */
- 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, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 137 */
- 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, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 138 */
- 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, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 139 */
- 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, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 140 */
- 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, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 141 */
- 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, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 142 */
- 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, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 143 */
- 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, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 144 */
- 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, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 145 */
- 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, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 146 */
- 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, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 147 */
- 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, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 148 */
- 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, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 149 */
- 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, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 150 */
- 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, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 151 */
- 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, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 152 */
- 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, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 153 */
- 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, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 154 */
- 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, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 155 */
- 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, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 156 */
- 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, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 157 */
- 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, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 158 */
- 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, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 159 */
- 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, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 160 */
- 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, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 161 */
- 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 1, 1, 1, 1, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 1, 1, 0,
- 0, 0, 0, 1, 1,
-
-/* Char 162 */
- 1, 0, 0, 0, 1,
- 0, 1, 1, 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,
-
-/* Char 163 */
- 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0,
- 0, 1, 0, 1, 0,
- 0, 1, 1, 0, 0,
- 0, 1, 0, 0, 0,
- 1, 1, 0, 0, 0,
- 0, 1, 1, 1, 1,
- 0, 0, 0, 0, 0,
-
-/* Char 164 */
- 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 1,
- 0, 1, 1, 1, 0,
- 0, 1, 0, 1, 0,
- 0, 1, 1, 1, 0,
- 1, 0, 0, 0, 1,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 165 */
- 0, 0, 1, 1, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 1, 0, 0,
- 1, 0, 0, 0, 0,
- 1, 0, 0, 0, 0,
- 1, 0, 0, 0, 0,
- 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 166 */
- 0, 0, 0, 1, 0,
- 0, 0, 1, 0, 0,
- 0, 1, 1, 1, 0,
- 1, 0, 0, 0, 0,
- 0, 1, 1, 0, 0,
- 0, 0, 0, 1, 0,
- 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 167 */
- 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0,
- 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 1, 0, 1, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 0, 1, 0,
- 0, 1, 1, 0, 0,
-
-/* Char 168 */
- 0, 1, 0, 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, 0, 0, 0, 0,
-
-/* Char 169 */
- 0, 1, 0, 1, 0,
- 0, 0, 1, 0, 0,
- 0, 1, 1, 1, 0,
- 1, 0, 0, 0, 0,
- 0, 1, 1, 0, 0,
- 0, 0, 0, 1, 0,
- 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 170 */
- 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0,
- 1, 0, 0, 0, 0,
- 1, 0, 0, 0, 0,
- 0, 1, 1, 0, 0,
- 0, 0, 0, 1, 0,
- 1, 1, 1, 0, 0,
- 0, 1, 0, 0, 0,
-
-/* Char 171 */
- 0, 1, 0, 1, 0,
- 0, 0, 1, 0, 0,
- 1, 1, 1, 1, 1,
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 172 */
- 0, 0, 0, 1, 0,
- 0, 0, 1, 0, 0,
- 1, 1, 1, 1, 0,
- 0, 0, 1, 0, 0,
- 0, 1, 0, 0, 0,
- 1, 0, 0, 0, 0,
- 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 173 */
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 174 */
- 0, 1, 0, 1, 0,
- 0, 0, 1, 0, 0,
- 1, 1, 1, 1, 0,
- 0, 0, 1, 0, 0,
- 0, 1, 0, 0, 0,
- 1, 0, 0, 0, 0,
- 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 175 */
- 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 0,
- 0, 0, 1, 0, 0,
- 0, 1, 0, 0, 0,
- 1, 0, 0, 0, 0,
- 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 176 */
- 0, 0, 1, 0, 0,
- 0, 1, 0, 1, 0,
- 0, 0, 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,
-
-/* Char 177 */
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 1, 1, 0,
- 0, 1, 0, 1, 0,
- 0, 0, 0, 1, 1,
-
-/* Char 178 */
- 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, 0, 0,
- 0, 0, 0, 1, 1,
-
-/* Char 179 */
- 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0,
- 0, 0, 1, 1, 0,
- 0, 0, 1, 0, 0,
- 0, 1, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 1, 1, 1, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 180 */
- 0, 0, 0, 1, 0,
- 0, 0, 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,
-
-/* Char 181 */
- 0, 0, 0, 1, 1,
- 1, 1, 0, 0, 1,
- 0, 1, 0, 1, 0,
- 0, 1, 0, 0, 0,
- 0, 1, 0, 0, 0,
- 0, 1, 0, 0, 0,
- 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 182 */
- 0, 0, 0, 1, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0,
- 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0,
- 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 183 */
- 0, 1, 0, 1, 0,
- 0, 0, 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,
-
-/* Char 184 */
- 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, 0,
- 0, 1, 1, 0, 0,
-
-/* Char 185 */
- 0, 1, 0, 1, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0,
- 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0,
- 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 186 */
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0,
- 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0,
- 1, 1, 1, 0, 0,
- 0, 1, 0, 0, 0,
-
-/* Char 187 */
- 0, 0, 0, 1, 1,
- 0, 1, 0, 0, 1,
- 0, 1, 0, 1, 0,
- 1, 1, 1, 0, 0,
- 0, 1, 0, 0, 0,
- 0, 1, 0, 1, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 188 */
- 0, 0, 0, 1, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 0,
- 0, 0, 1, 0, 0,
- 0, 1, 0, 0, 0,
- 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 189 */
- 0, 1, 0, 0, 1,
- 1, 0, 0, 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,
-
-/* Char 190 */
- 0, 1, 0, 1, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 0,
- 0, 0, 1, 0, 0,
- 0, 1, 0, 0, 0,
- 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 191 */
- 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 0,
- 0, 0, 1, 0, 0,
- 0, 1, 0, 0, 0,
- 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 192 */
- 0, 0, 1, 0, 0,
- 0, 1, 0, 0, 0,
- 1, 1, 1, 0, 0,
- 1, 0, 0, 1, 0,
- 1, 1, 1, 0, 0,
- 1, 0, 1, 0, 0,
- 1, 0, 0, 1, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 193 */
- 0, 0, 0, 1, 0,
- 0, 0, 1, 0, 0,
- 0, 1, 1, 0, 0,
- 1, 0, 0, 1, 0,
- 1, 1, 1, 1, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 194 */
- 0, 1, 1, 0, 0,
- 1, 0, 0, 1, 0,
- 0, 1, 1, 0, 0,
- 1, 0, 0, 1, 0,
- 1, 1, 1, 1, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 195 */
- 1, 0, 0, 1, 0,
- 0, 1, 1, 0, 0,
- 0, 1, 1, 0, 0,
- 1, 0, 0, 1, 0,
- 1, 1, 1, 1, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 196 */
- 1, 0, 0, 1, 0,
- 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0,
- 1, 0, 0, 1, 0,
- 1, 1, 1, 1, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 197 */
- 0, 0, 0, 1, 0,
- 0, 0, 1, 0, 0,
- 1, 0, 0, 0, 0,
- 1, 0, 0, 0, 0,
- 1, 0, 0, 0, 0,
- 1, 0, 0, 0, 0,
- 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 198 */
- 0, 0, 0, 1, 0,
- 0, 0, 1, 0, 0,
- 0, 1, 1, 0, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 0, 0, 0,
- 1, 0, 0, 1, 0,
- 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 199 */
- 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 0, 0, 0,
- 1, 0, 0, 0, 0,
- 1, 0, 0, 1, 0,
- 0, 1, 1, 0, 0,
- 1, 1, 0, 0, 0,
-
-/* Char 200 */
- 0, 0, 0, 1, 0,
- 0, 0, 1, 0, 0,
- 0, 1, 1, 0, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 0, 0, 0,
- 1, 0, 0, 1, 0,
- 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 201 */
- 0, 0, 0, 1, 0,
- 0, 0, 1, 0, 0,
- 1, 1, 1, 1, 0,
- 1, 0, 0, 0, 0,
- 1, 1, 1, 0, 0,
- 1, 0, 0, 0, 0,
- 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 202 */
- 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 0,
- 1, 0, 0, 0, 0,
- 1, 1, 1, 0, 0,
- 1, 0, 0, 0, 0,
- 1, 0, 0, 0, 0,
- 1, 1, 1, 1, 0,
- 0, 0, 0, 1, 1,
-
-/* Char 203 */
- 1, 0, 0, 1, 0,
- 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 0,
- 1, 0, 0, 0, 0,
- 1, 1, 1, 0, 0,
- 1, 0, 0, 0, 0,
- 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 204 */
- 0, 1, 0, 1, 0,
- 0, 0, 1, 0, 0,
- 1, 1, 1, 1, 0,
- 1, 0, 0, 0, 0,
- 1, 1, 1, 0, 0,
- 1, 0, 0, 0, 0,
- 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 205 */
- 0, 0, 0, 1, 0,
- 0, 0, 1, 0, 0,
- 0, 1, 1, 1, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 1, 1, 1, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 206 */
- 0, 0, 1, 0, 0,
- 0, 1, 0, 1, 0,
- 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 1, 1, 1, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 207 */
- 0, 1, 0, 1, 0,
- 0, 0, 1, 0, 0,
- 1, 1, 1, 0, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 208 */
- 0, 0, 0, 0, 0,
- 1, 1, 1, 0, 0,
- 0, 1, 0, 1, 0,
- 1, 1, 0, 1, 0,
- 0, 1, 0, 1, 0,
- 0, 1, 0, 1, 0,
- 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 209 */
- 0, 0, 0, 1, 0,
- 0, 0, 1, 0, 0,
- 1, 0, 0, 1, 0,
- 1, 1, 0, 1, 0,
- 1, 1, 1, 1, 0,
- 1, 0, 1, 1, 0,
- 1, 0, 0, 1, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 210 */
- 0, 1, 0, 1, 0,
- 0, 0, 1, 0, 0,
- 1, 0, 0, 1, 0,
- 1, 1, 0, 1, 0,
- 1, 1, 1, 1, 0,
- 1, 0, 1, 1, 0,
- 1, 0, 0, 1, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 211 */
- 0, 0, 0, 1, 0,
- 0, 0, 1, 0, 0,
- 0, 1, 1, 0, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 212 */
- 0, 1, 1, 0, 0,
- 1, 0, 0, 1, 0,
- 0, 1, 1, 0, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 213 */
- 0, 1, 0, 0, 1,
- 1, 0, 0, 1, 0,
- 0, 1, 1, 0, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 214 */
- 1, 0, 0, 1, 0,
- 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 215 */
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 1, 0, 0, 1, 0,
- 0, 1, 1, 0, 0,
- 0, 1, 1, 0, 0,
- 1, 0, 0, 1, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 216 */
- 0, 1, 0, 1, 0,
- 0, 0, 1, 0, 0,
- 1, 1, 1, 0, 0,
- 1, 0, 0, 1, 0,
- 1, 1, 1, 0, 0,
- 1, 0, 1, 0, 0,
- 1, 0, 0, 1, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 217 */
- 0, 1, 1, 0, 0,
- 0, 1, 1, 0, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 218 */
- 0, 0, 0, 1, 0,
- 0, 0, 1, 0, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 219 */
- 0, 1, 0, 0, 1,
- 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 220 */
- 1, 0, 0, 1, 0,
- 0, 0, 0, 0, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 221 */
- 0, 0, 0, 1, 0,
- 0, 0, 1, 0, 0,
- 1, 0, 0, 0, 1,
- 0, 1, 0, 1, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 222 */
- 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1,
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 1, 0, 0, 0,
-
-/* Char 223 */
- 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0,
- 1, 0, 0, 1, 0,
- 1, 1, 1, 0, 0,
- 1, 0, 0, 1, 0,
- 1, 1, 0, 1, 0,
- 1, 0, 1, 0, 0,
- 1, 0, 0, 0, 0,
-
-/* Char 224 */
- 0, 0, 0, 1, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0,
- 1, 0, 1, 0, 0,
- 1, 1, 0, 1, 0,
- 1, 0, 0, 0, 0,
- 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 225 */
- 0, 0, 0, 1, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 1, 1, 0,
- 0, 1, 0, 1, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 226 */
- 0, 0, 1, 0, 0,
- 0, 1, 0, 1, 0,
- 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 1, 1, 0,
- 0, 1, 0, 1, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 227 */
- 1, 0, 0, 1, 0,
- 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 1, 1, 0,
- 0, 1, 0, 1, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 228 */
- 1, 0, 0, 1, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 1, 1, 0,
- 0, 1, 0, 1, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 229 */
- 0, 0, 0, 0, 1,
- 0, 0, 0, 1, 0,
- 0, 1, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 1, 1, 1, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 230 */
- 0, 0, 0, 1, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0,
- 1, 0, 0, 0, 0,
- 1, 0, 0, 0, 0,
- 0, 1, 1, 1, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 231 */
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0,
- 1, 0, 0, 0, 0,
- 1, 0, 0, 0, 0,
- 0, 1, 1, 1, 0,
- 1, 1, 1, 0, 0,
-
-/* Char 232 */
- 0, 1, 0, 1, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0,
- 1, 0, 0, 0, 0,
- 1, 0, 0, 0, 0,
- 0, 1, 1, 1, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 233 */
- 0, 0, 0, 1, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0,
- 1, 0, 1, 1, 0,
- 1, 1, 0, 0, 0,
- 0, 1, 1, 1, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 234 */
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0,
- 1, 0, 1, 1, 0,
- 1, 1, 0, 0, 0,
- 0, 1, 1, 1, 0,
- 0, 0, 0, 1, 1,
-
-/* Char 235 */
- 0, 0, 0, 0, 0,
- 1, 0, 0, 1, 0,
- 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0,
- 1, 0, 1, 1, 0,
- 1, 1, 0, 0, 0,
- 0, 1, 1, 1, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 236 */
- 0, 1, 0, 1, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0,
- 1, 0, 1, 1, 0,
- 1, 1, 0, 0, 0,
- 0, 1, 1, 1, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 237 */
- 0, 0, 0, 1, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 1, 1, 1, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 238 */
- 0, 0, 1, 0, 0,
- 0, 1, 0, 1, 0,
- 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 1, 1, 1, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 239 */
- 0, 0, 0, 1, 1,
- 0, 0, 1, 0, 1,
- 0, 0, 1, 0, 1,
- 0, 1, 1, 0, 0,
- 1, 0, 1, 0, 0,
- 1, 0, 1, 0, 0,
- 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 240 */
- 0, 0, 0, 1, 0,
- 0, 0, 1, 1, 1,
- 0, 0, 0, 1, 0,
- 0, 1, 1, 1, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 1, 1, 0,
- 0, 1, 0, 1, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 241 */
- 0, 0, 0, 1, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0,
- 1, 0, 1, 0, 0,
- 1, 1, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 242 */
- 0, 1, 0, 1, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0,
- 1, 0, 1, 0, 0,
- 1, 1, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 243 */
- 0, 0, 0, 1, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 244 */
- 0, 1, 1, 0, 0,
- 1, 0, 0, 1, 0,
- 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 245 */
- 0, 1, 0, 0, 1,
- 1, 0, 0, 1, 0,
- 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 246 */
- 1, 0, 0, 1, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 247 */
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 248 */
- 0, 1, 0, 1, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0,
- 1, 0, 1, 0, 0,
- 1, 1, 0, 1, 0,
- 1, 0, 0, 0, 0,
- 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 249 */
- 0, 1, 1, 0, 0,
- 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 1, 1, 0,
- 0, 1, 0, 1, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 250 */
- 0, 0, 0, 1, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 1, 1, 0,
- 0, 1, 0, 1, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 251 */
- 0, 1, 0, 0, 1,
- 1, 0, 0, 1, 0,
- 0, 0, 0, 0, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 1, 1, 0,
- 0, 1, 0, 1, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 252 */
- 1, 0, 0, 1, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 1, 1, 0,
- 0, 1, 0, 1, 0,
- 0, 0, 0, 0, 0,
-
-/* Char 253 */
- 0, 0, 0, 1, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 0, 1, 1, 1, 0,
- 0, 0, 0, 1, 0,
- 0, 1, 1, 0, 0,
-
-/* Char 254 */
- 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0,
- 0, 1, 0, 0, 0,
- 1, 1, 1, 0, 0,
- 0, 1, 0, 0, 0,
- 0, 1, 0, 1, 0,
- 0, 0, 1, 0, 0,
- 0, 1, 1, 0, 0,
-
-/* Char 255 */
- 0, 0, 0, 0, 0,
- 0, 0, 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,
-
-
-};
-
-gdFont gdFontTinyRep =
-{
- 256,
- 0,
- 5,
- 8,
- gdFontTinyData
-};
-
-gdFontPtr gdFontTiny = &gdFontTinyRep;
-
-gdFontPtr gdFontGetTiny(void)
-{
- return gdFontTiny;
-}
-
-/* This file has not been truncated. */
diff --git a/ext/gd/libgd/gdfontt.h b/ext/gd/libgd/gdfontt.h
deleted file mode 100644
index 102fec991b..0000000000
--- a/ext/gd/libgd/gdfontt.h
+++ /dev/null
@@ -1,30 +0,0 @@
-
-#ifndef _GDFONTT_H_
-#define _GDFONTT_H_ 1
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*
- This is a header file for gd font, generated using
- bdftogd version 0.5 by Jan Pazdziora, adelton@fi.muni.cz
- from bdf font
- -Misc-Fixed-Medium-R-Normal--8-80-75-75-C-50-ISO8859-2
- at Thu Jan 8 13:49:54 1998.
- The original bdf was holding following copyright:
- "Libor Skarvada, libor@informatics.muni.cz"
- */
-
-
-#include "gd.h"
-
-extern gdFontPtr gdFontTiny;
-extern gdFontPtr gdFontGetTiny(void);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
-
diff --git a/ext/gd/libgd/gdft.c b/ext/gd/libgd/gdft.c
deleted file mode 100644
index 5e74b5757f..0000000000
--- a/ext/gd/libgd/gdft.c
+++ /dev/null
@@ -1,1105 +0,0 @@
-
-/********************************************/
-/* gd interface to freetype library */
-/* */
-/* John Ellson ellson@graphviz.org */
-/********************************************/
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <math.h>
-#include "gd.h"
-#include "gdhelpers.h"
-
-#ifndef MSWIN32
-#include <unistd.h>
-#else
-#include <io.h>
-#ifndef R_OK
-# define R_OK 04 /* Needed in Windows */
-#endif
-#endif
-
-#ifdef WIN32
-#define access _access
-#ifndef R_OK
-#define R_OK 2
-#endif
-#endif
-
-/* number of antialised colors for indexed bitmaps */
-/* overwrite Windows GDI define in case of windows build */
-#ifdef NUMCOLORS
-#undef NUMCOLORS
-#endif
-#define NUMCOLORS 8
-
-char *
-gdImageStringTTF (gdImage * im, int *brect, int fg, char *fontlist,
- double ptsize, double angle, int x, int y, char *string)
-{
- /* 2.0.6: valid return */
- return gdImageStringFT (im, brect, fg, fontlist, ptsize, angle, x, y, string);
-}
-
-#ifndef HAVE_LIBFREETYPE
-char *
-gdImageStringFTEx (gdImage * im, int *brect, int fg, char *fontlist,
- double ptsize, double angle, int x, int y, char *string,
- gdFTStringExtraPtr strex)
-{
- return "libgd was not built with FreeType font support\n";
-}
-
-char *
-gdImageStringFT (gdImage * im, int *brect, int fg, char *fontlist,
- double ptsize, double angle, int x, int y, char *string)
-{
- return "libgd was not built with FreeType font support\n";
-}
-#else
-
-#include "gdcache.h"
-#include <ft2build.h>
-#include FT_FREETYPE_H
-#include FT_GLYPH_H
-
-/* number of fonts cached before least recently used is replaced */
-#define FONTCACHESIZE 6
-
-/* number of antialias color lookups cached */
-#define TWEENCOLORCACHESIZE 32
-
-/*
- * Line separation as a factor of font height.
- * No space between if LINESPACE = 1.00
- * Line separation will be rounded up to next pixel row.
- */
-#define LINESPACE 1.05
-
-/*
- * The character (space) used to separate alternate fonts in the
- * fontlist parameter to gdImageStringFT. 2.0.18: space was a oor choice for this.
- */
-#define LISTSEPARATOR ";"
-
-/*
- * DEFAULT_FONTPATH and PATHSEPARATOR are host type dependent and
- * are normally set by configure in config.h. These are just
- * some last resort values that might match some Un*x system
- * if building this version of gd separate from graphviz.
- */
-#ifndef DEFAULT_FONTPATH
-#if defined(__APPLE__) || (defined(__MWERKS__) && defined(macintosh))
-#define DEFAULT_FONTPATH "/usr/share/fonts/truetype:/System/Library/Fonts:/Library/Fonts"
-#else
-#define DEFAULT_FONTPATH "/usr/share/fonts/truetype"
-#endif
-#endif
-#ifndef PATHSEPARATOR
-#define PATHSEPARATOR ":"
-#endif
-
-#ifndef TRUE
-#define FALSE 0
-#define TRUE !FALSE
-#endif
-
-#ifndef MAX
-#define MAX(a,b) ((a)>(b)?(a):(b))
-#endif
-
-#ifndef MIN
-#define MIN(a,b) ((a)<(b)?(a):(b))
-#endif
-
-typedef struct
-{
- char *fontlist; /* key */
- FT_Library *library;
- FT_Face face;
- FT_Bool have_char_map_unicode, have_char_map_big5, have_char_map_sjis, have_char_map_apple_roman;
- gdCache_head_t *glyphCache;
-} font_t;
-
-typedef struct
-{
- char *fontlist; /* key */
- FT_Library *library;
-} fontkey_t;
-
-typedef struct
-{
- int pixel; /* key */
- int bgcolor; /* key */
- int fgcolor; /* key *//* -ve means no antialias */
- gdImagePtr im; /* key */
- int tweencolor;
-} tweencolor_t;
-
-typedef struct
-{
- int pixel; /* key */
- int bgcolor; /* key */
- int fgcolor; /* key *//* -ve means no antialias */
- gdImagePtr im; /* key */
-} tweencolorkey_t;
-
-/********************************************************************
- * gdTcl_UtfToUniChar is borrowed from Tcl ...
- */
-/*
- * tclUtf.c --
- *
- * Routines for manipulating UTF-8 strings.
- *
- * Copyright (c) 1997-1998 Sun Microsystems, Inc.
- *
- * See the file "license.terms" for information on usage and redistribution
- * of this file, and for a DISCLAIMER OF ALL WARRANTIES.
- *
- * SCCS: @(#) tclUtf.c 1.25 98/01/28 18:02:43
- */
-
-/*
- *---------------------------------------------------------------------------
- *
- * gdTcl_UtfToUniChar --
- *
- * Extract the Tcl_UniChar represented by the UTF-8 string. Bad
- * UTF-8 sequences are converted to valid Tcl_UniChars and processing
- * continues. Equivalent to Plan 9 chartorune().
- *
- * The caller must ensure that the source buffer is long enough that
- * this routine does not run off the end and dereference non-existent
- * memory looking for trail bytes. If the source buffer is known to
- * be '\0' terminated, this cannot happen. Otherwise, the caller
- * should call Tcl_UtfCharComplete() before calling this routine to
- * ensure that enough bytes remain in the string.
- *
- * Results:
- * *chPtr is filled with the Tcl_UniChar, and the return value is the
- * number of bytes from the UTF-8 string that were consumed.
- *
- * Side effects:
- * None.
- *
- *---------------------------------------------------------------------------
- */
-
-#ifdef JISX0208
-#include "jisx0208.h"
-#endif
-
-#define Tcl_UniChar int
-#define TCL_UTF_MAX 3
-static int gdTcl_UtfToUniChar (char *str, Tcl_UniChar * chPtr)
-/* str is the UTF8 next character pointer */
-/* chPtr is the int for the result */
-{
- int byte;
-
- /* HTML4.0 entities in decimal form, e.g. &#197; */
- byte = *((unsigned char *) str);
- if (byte == '&') {
- int i, n = 0;
-
- byte = *((unsigned char *) (str + 1));
- if (byte == '#') {
- for (i = 2; i < 8; i++) {
- byte = *((unsigned char *) (str + i));
- if (byte >= '0' && byte <= '9') {
- n = (n * 10) + (byte - '0');
- } else {
- break;
- }
- }
- if (byte == ';') {
- *chPtr = (Tcl_UniChar) n;
- return ++i;
- }
- }
- }
-
- /* Unroll 1 to 3 byte UTF-8 sequences, use loop to handle longer ones. */
-
- byte = *((unsigned char *) str);
-#ifdef JISX0208
- if (0xA1 <= byte && byte <= 0xFE) {
- int ku, ten;
-
- ku = (byte & 0x7F) - 0x20;
- ten = (str[1] & 0x7F) - 0x20;
- if ((ku < 1 || ku > 92) || (ten < 1 || ten > 94)) {
- *chPtr = (Tcl_UniChar) byte;
- return 1;
- }
-
- *chPtr = (Tcl_UniChar) UnicodeTbl[ku - 1][ten - 1];
- return 2;
- } else
-#endif /* JISX0208 */
- if (byte < 0xC0) {
- /* Handles properly formed UTF-8 characters between
- * 0x01 and 0x7F. Also treats \0 and naked trail
- * bytes 0x80 to 0xBF as valid characters representing
- * themselves.
- */
-
- *chPtr = (Tcl_UniChar) byte;
- return 1;
- } else if (byte < 0xE0) {
- if ((str[1] & 0xC0) == 0x80) {
- /* Two-byte-character lead-byte followed by a trail-byte. */
-
- *chPtr = (Tcl_UniChar) (((byte & 0x1F) << 6) | (str[1] & 0x3F));
- return 2;
- }
- /*
- * A two-byte-character lead-byte not followed by trail-byte
- * represents itself.
- */
-
- *chPtr = (Tcl_UniChar) byte;
- return 1;
- } else if (byte < 0xF0) {
- if (((str[1] & 0xC0) == 0x80) && ((str[2] & 0xC0) == 0x80)) {
- /* Three-byte-character lead byte followed by two trail bytes. */
-
- *chPtr = (Tcl_UniChar) (((byte & 0x0F) << 12) | ((str[1] & 0x3F) << 6) | (str[2] & 0x3F));
- return 3;
- }
- /* A three-byte-character lead-byte not followed by two trail-bytes represents itself. */
-
- *chPtr = (Tcl_UniChar) byte;
- return 1;
- }
-#if TCL_UTF_MAX > 3
- else {
- int ch, total, trail;
-
- total = totalBytes[byte];
- trail = total - 1;
-
- if (trail > 0) {
- ch = byte & (0x3F >> trail);
- do {
- str++;
- if ((*str & 0xC0) != 0x80) {
- *chPtr = byte;
- return 1;
- }
- ch <<= 6;
- ch |= (*str & 0x3F);
- trail--;
- } while (trail > 0);
- *chPtr = ch;
- return total;
- }
- }
-#endif
-
- *chPtr = (Tcl_UniChar) byte;
- return 1;
-}
-
-/********************************************************************/
-/* font cache functions */
-
-static int fontTest (void *element, void *key)
-{
- font_t *a = (font_t *) element;
- fontkey_t *b = (fontkey_t *) key;
-
- return (strcmp (a->fontlist, b->fontlist) == 0);
-}
-
-static void *fontFetch (char **error, void *key)
-{
- font_t *a;
- fontkey_t *b = (fontkey_t *) key;
- int n;
- int font_found = 0;
- unsigned short platform, encoding;
- char *fontsearchpath, *fontlist;
- char fullname[MAXPATHLEN], cur_dir[MAXPATHLEN];
- char *name, *path=NULL, *dir;
- char *strtok_ptr;
- FT_Error err;
- FT_CharMap found = 0;
- FT_CharMap charmap;
-
- a = (font_t *) gdPMalloc(sizeof(font_t));
- a->fontlist = gdPEstrdup(b->fontlist);
- a->library = b->library;
-
- /*
- * Search the pathlist for any of a list of font names.
- */
- fontsearchpath = getenv ("GDFONTPATH");
- if (!fontsearchpath) {
- fontsearchpath = DEFAULT_FONTPATH;
- }
- fontlist = gdEstrdup(a->fontlist);
-
- /*
- * Must use gd_strtok_r else pointer corrupted by strtok in nested loop.
- */
- for (name = gd_strtok_r (fontlist, LISTSEPARATOR, &strtok_ptr); name; name = gd_strtok_r (0, LISTSEPARATOR, &strtok_ptr)) {
- /* make a fresh copy each time - strtok corrupts it. */
- path = gdEstrdup (fontsearchpath);
-
- /* if name is an absolute filename then test directly */
- if (*name == '/' || (name[0] != 0 && name[1] == ':' && (name[2] == '/' || name[2] == '\\'))) {
- snprintf(fullname, sizeof(fullname) - 1, "%s", name);
- if (access(fullname, R_OK) == 0) {
- font_found++;
- break;
- }
- }
- for (dir = strtok (path, PATHSEPARATOR); dir; dir = strtok (0, PATHSEPARATOR)) {
- if (!strcmp(dir, ".")) {
- TSRMLS_FETCH();
-#if HAVE_GETCWD
- dir = VCWD_GETCWD(cur_dir, MAXPATHLEN);
-#elif HAVE_GETWD
- dir = VCWD_GETWD(cur_dir);
-#endif
- if (!dir) {
- continue;
- }
- }
-
-#define GD_CHECK_FONT_PATH(ext) \
- snprintf(fullname, sizeof(fullname) - 1, "%s/%s%s", dir, name, ext); \
- if (access(fullname, R_OK) == 0) { \
- font_found++; \
- break; \
- } \
-
- GD_CHECK_FONT_PATH("");
- GD_CHECK_FONT_PATH(".ttf");
- GD_CHECK_FONT_PATH(".pfa");
- GD_CHECK_FONT_PATH(".pfb");
- GD_CHECK_FONT_PATH(".dfont");
- }
- gdFree(path);
- path = NULL;
- if (font_found) {
- break;
- }
- }
-
- if (path) {
- gdFree(path);
- }
-
- gdFree(fontlist);
-
- if (!font_found) {
- gdPFree(a->fontlist);
- gdPFree(a);
- *error = "Could not find/open font";
- return NULL;
- }
-
- err = FT_New_Face (*b->library, fullname, 0, &a->face);
- if (err) {
- gdPFree(a->fontlist);
- gdPFree(a);
- *error = "Could not read font";
- return NULL;
- }
-
- /* FIXME - This mapping stuff is imcomplete - where is the spec? */
- /* EAM - It's worse than that. It's pointless to match character encodings here.
- * As currently written, the stored a->face->charmap only matches one of
- * the actual charmaps and we cannot know at this stage if it is the right
- * one. We should just skip all this stuff, and check in gdImageStringFTEx
- * if some particular charmap is preferred and if so whether it is held in
- * one of the a->face->charmaps[0..num_charmaps].
- * And why is it so bad not to find any recognized charmap? The user may
- * still know what mapping to use, even if we do not. In that case we can
- * just use the map in a->face->charmaps[num_charmaps] and be done with it.
- */
-
- a->have_char_map_unicode = 0;
- a->have_char_map_big5 = 0;
- a->have_char_map_sjis = 0;
- a->have_char_map_apple_roman = 0;
- for (n = 0; n < a->face->num_charmaps; n++) {
- charmap = a->face->charmaps[n];
- platform = charmap->platform_id;
- encoding = charmap->encoding_id;
-
-/* EAM DEBUG - Newer versions of libfree2 make it easier by defining encodings */
-#if (defined(FREETYPE_MAJOR) && ((FREETYPE_MAJOR == 2 && ((FREETYPE_MINOR == 1 && FREETYPE_PATCH >= 3) || FREETYPE_MINOR > 1) || FREETYPE_MAJOR > 2)))
- if (charmap->encoding == FT_ENCODING_MS_SYMBOL
- || charmap->encoding == FT_ENCODING_ADOBE_CUSTOM
- || charmap->encoding == FT_ENCODING_ADOBE_STANDARD) {
- a->have_char_map_unicode = 1;
- found = charmap;
- a->face->charmap = charmap;
- return (void *)a;
- }
-#endif /* Freetype 2.1.3 or better */
-/* EAM DEBUG */
-
- if ((platform == 3 && encoding == 1) /* Windows Unicode */
- || (platform == 3 && encoding == 0) /* Windows Symbol */
- || (platform == 2 && encoding == 1) /* ISO Unicode */
- || (platform == 0))
- { /* Apple Unicode */
- a->have_char_map_unicode = 1;
- found = charmap;
- } else if (platform == 3 && encoding == 4) { /* Windows Big5 */
- a->have_char_map_big5 = 1;
- found = charmap;
- } else if (platform == 3 && encoding == 2) { /* Windows Sjis */
- a->have_char_map_sjis = 1;
- found = charmap;
- } else if ((platform == 1 && encoding == 0) /* Apple Roman */
- || (platform == 2 && encoding == 0))
- { /* ISO ASCII */
- a->have_char_map_apple_roman = 1;
- found = charmap;
- }
- }
- if (!found) {
- gdPFree(a->fontlist);
- gdPFree(a);
- *error = "Unable to find a CharMap that I can handle";
- return NULL;
- }
-
- /* 2.0.5: we should actually return this */
- a->face->charmap = found;
- return (void *) a;
-}
-
-static void fontRelease (void *element)
-{
- font_t *a = (font_t *) element;
-
- FT_Done_Face (a->face);
- gdPFree(a->fontlist);
- gdPFree((char *) element);
-}
-
-/********************************************************************/
-/* tweencolor cache functions */
-
-static int tweenColorTest (void *element, void *key)
-{
- tweencolor_t *a = (tweencolor_t *) element;
- tweencolorkey_t *b = (tweencolorkey_t *) key;
-
- return (a->pixel == b->pixel && a->bgcolor == b->bgcolor && a->fgcolor == b->fgcolor && a->im == b->im);
-}
-
-/*
- * Computes a color in im's color table that is part way between
- * the background and foreground colors proportional to the gray
- * pixel value in the range 0-NUMCOLORS. The fg and bg colors must already
- * be in the color table for palette images. For truecolor images the
- * returned value simply has an alpha component and gdImageAlphaBlend
- * does the work so that text can be alpha blended across a complex
- * background (TBB; and for real in 2.0.2).
- */
-static void * tweenColorFetch (char **error, void *key)
-{
- tweencolor_t *a;
- tweencolorkey_t *b = (tweencolorkey_t *) key;
- int pixel, npixel, bg, fg;
- gdImagePtr im;
-
- a = (tweencolor_t *) gdMalloc (sizeof (tweencolor_t));
- pixel = a->pixel = b->pixel;
- bg = a->bgcolor = b->bgcolor;
- fg = a->fgcolor = b->fgcolor;
- im = b->im;
-
- /* if fg is specified by a negative color idx, then don't antialias */
- if (fg < 0) {
- if ((pixel + pixel) >= NUMCOLORS) {
- a->tweencolor = -fg;
- } else {
- a->tweencolor = bg;
- }
- } else {
- npixel = NUMCOLORS - pixel;
- if (im->trueColor) {
- /* 2.0.1: use gdImageSetPixel to do the alpha blending work,
- * or to just store the alpha level. All we have to do here
- * is incorporate our knowledge of the percentage of this
- * pixel that is really "lit" by pushing the alpha value
- * up toward transparency in edge regions.
- */
- a->tweencolor = gdTrueColorAlpha(
- gdTrueColorGetRed(fg),
- gdTrueColorGetGreen(fg),
- gdTrueColorGetBlue(fg),
- gdAlphaMax - (gdTrueColorGetAlpha (fg) * pixel / NUMCOLORS));
- } else {
- a->tweencolor = gdImageColorResolve(im,
- (pixel * im->red[fg] + npixel * im->red[bg]) / NUMCOLORS,
- (pixel * im->green[fg] + npixel * im->green[bg]) / NUMCOLORS,
- (pixel * im->blue[fg] + npixel * im->blue[bg]) / NUMCOLORS);
- }
- }
- return (void *) a;
-}
-
-static void tweenColorRelease (void *element)
-{
- gdFree((char *) element);
-}
-
-/* draw_bitmap - transfers glyph bitmap to GD image */
-static char * gdft_draw_bitmap (gdCache_head_t *tc_cache, gdImage * im, int fg, FT_Bitmap bitmap, int pen_x, int pen_y)
-{
- unsigned char *pixel = NULL;
- int *tpixel = NULL;
- int x, y, row, col, pc, pcr;
-
- tweencolor_t *tc_elem;
- tweencolorkey_t tc_key;
-
- /* copy to image, mapping colors */
- tc_key.fgcolor = fg;
- tc_key.im = im;
- /* Truecolor version; does not require the cache */
- if (im->trueColor) {
- for (row = 0; row < bitmap.rows; row++) {
- pc = row * bitmap.pitch;
- pcr = pc;
- y = pen_y + row;
- /* clip if out of bounds */
- /* 2.0.16: clipping rectangle, not image bounds */
- if ((y > im->cy2) || (y < im->cy1)) {
- continue;
- }
- for (col = 0; col < bitmap.width; col++, pc++) {
- int level;
- if (bitmap.pixel_mode == ft_pixel_mode_grays) {
- /* Scale to 128 levels of alpha for gd use.
- * alpha 0 is opacity, so be sure to invert at the end
- */
- level = (bitmap.buffer[pc] * gdAlphaMax / (bitmap.num_grays - 1));
- } else if (bitmap.pixel_mode == ft_pixel_mode_mono) {
- /* 2.0.5: mode_mono fix from Giuliano Pochini */
- level = ((bitmap.buffer[(col>>3)+pcr]) & (1<<(~col&0x07))) ? gdAlphaTransparent : gdAlphaOpaque;
- } else {
- return "Unsupported ft_pixel_mode";
- }
- if ((fg >= 0) && (im->trueColor)) {
- /* Consider alpha in the foreground color itself to be an
- * upper bound on how opaque things get, when truecolor is
- * available. Without truecolor this results in far too many
- * color indexes.
- */
- level = level * (gdAlphaMax - gdTrueColorGetAlpha(fg)) / gdAlphaMax;
- }
- level = gdAlphaMax - level;
- x = pen_x + col;
- /* clip if out of bounds */
- /* 2.0.16: clip to clipping rectangle, Matt McNabb */
- if ((x > im->cx2) || (x < im->cx1)) {
- continue;
- }
- /* get pixel location in gd buffer */
- tpixel = &im->tpixels[y][x];
- if (fg < 0) {
- if (level < (gdAlphaMax / 2)) {
- *tpixel = -fg;
- }
- } else {
- if (im->alphaBlendingFlag) {
- *tpixel = gdAlphaBlend(*tpixel, (level << 24) + (fg & 0xFFFFFF));
- } else {
- *tpixel = (level << 24) + (fg & 0xFFFFFF);
- }
- }
- }
- }
- return (char *) NULL;
- }
- /* Non-truecolor case, restored to its more or less original form */
- for (row = 0; row < bitmap.rows; row++) {
- int pcr;
- pc = row * bitmap.pitch;
- pcr = pc;
- if (bitmap.pixel_mode==ft_pixel_mode_mono) {
- pc *= 8; /* pc is measured in bits for monochrome images */
- }
- y = pen_y + row;
-
- /* clip if out of bounds */
- if (y >= im->sy || y < 0) {
- continue;
- }
-
- for (col = 0; col < bitmap.width; col++, pc++) {
- if (bitmap.pixel_mode == ft_pixel_mode_grays) {
- /*
- * Round to NUMCOLORS levels of antialiasing for
- * index color images since only 256 colors are
- * available.
- */
- tc_key.pixel = ((bitmap.buffer[pc] * NUMCOLORS) + bitmap.num_grays / 2) / (bitmap.num_grays - 1);
- } else if (bitmap.pixel_mode == ft_pixel_mode_mono) {
- tc_key.pixel = ((bitmap.buffer[pc / 8] << (pc % 8)) & 128) ? NUMCOLORS : 0;
- /* 2.0.5: mode_mono fix from Giuliano Pochini */
- tc_key.pixel = ((bitmap.buffer[(col>>3)+pcr]) & (1<<(~col&0x07))) ? NUMCOLORS : 0;
- } else {
- return "Unsupported ft_pixel_mode";
- }
- if (tc_key.pixel > 0) { /* if not background */
- x = pen_x + col;
-
- /* clip if out of bounds */
- if (x >= im->sx || x < 0) {
- continue;
- }
- /* get pixel location in gd buffer */
- pixel = &im->pixels[y][x];
- if (tc_key.pixel == NUMCOLORS) {
- /* use fg color directly. gd 2.0.2: watch out for
- * negative indexes (thanks to David Marwood).
- */
- *pixel = (fg < 0) ? -fg : fg;
- } else {
- /* find antialised color */
- tc_key.bgcolor = *pixel;
- tc_elem = (tweencolor_t *) gdCacheGet(tc_cache, &tc_key);
- *pixel = tc_elem->tweencolor;
- }
- }
- }
- }
- return (char *) NULL;
-}
-
-static int
-gdroundupdown (FT_F26Dot6 v1, int updown)
-{
- return (!updown) ? (v1 < 0 ? ((v1 - 63) >> 6) : v1 >> 6) : (v1 > 0 ? ((v1 + 63) >> 6) : v1 >> 6);
-}
-
-extern int any2eucjp (char *, char *, unsigned int);
-
-/* Persistent font cache until explicitly cleared */
-/* Fonts can be used across multiple images */
-
-/* 2.0.16: thread safety (the font cache is shared) */
-gdMutexDeclare(gdFontCacheMutex);
-static gdCache_head_t *fontCache = NULL;
-static FT_Library library;
-
-void gdFontCacheShutdown()
-{
- if (fontCache) {
- gdMutexShutdown(gdFontCacheMutex);
- gdCacheDelete(fontCache);
- fontCache = NULL;
- FT_Done_FreeType(library);
- }
-}
-
-void gdFreeFontCache()
-{
- gdFontCacheShutdown();
-}
-
-int gdFontCacheSetup(void)
-{
- if (fontCache) {
- /* Already set up */
- return 0;
- }
- gdMutexSetup(gdFontCacheMutex);
- if (FT_Init_FreeType(&library)) {
- gdMutexShutdown(gdFontCacheMutex);
- return -1;
- }
- fontCache = gdCacheCreate (FONTCACHESIZE, fontTest, fontFetch, fontRelease);
- return 0;
-}
-
-
-/********************************************************************/
-/* gdImageStringFT - render a utf8 string onto a gd image */
-
-char *
-gdImageStringFT (gdImage * im, int *brect, int fg, char *fontlist,
- double ptsize, double angle, int x, int y, char *string)
-{
- return gdImageStringFTEx(im, brect, fg, fontlist, ptsize, angle, x, y, string, 0);
-}
-
-char *
-gdImageStringFTEx (gdImage * im, int *brect, int fg, char *fontlist, double ptsize, double angle, int x, int y, char *string, gdFTStringExtraPtr strex)
-{
- FT_BBox bbox, glyph_bbox;
- FT_Matrix matrix;
- FT_Vector pen, delta, penf;
- FT_Face face;
- FT_Glyph image;
- FT_GlyphSlot slot;
- FT_Bool use_kerning;
- FT_UInt glyph_index, previous;
- double sin_a = sin (angle);
- double cos_a = cos (angle);
- int len, i = 0, ch;
- int x1 = 0, y1 = 0;
- font_t *font;
- fontkey_t fontkey;
- char *next;
- char *tmpstr = NULL;
- int render = (im && (im->trueColor || (fg <= 255 && fg >= -255)));
- FT_BitmapGlyph bm;
- /* 2.0.13: Bob Ostermann: don't force autohint, that's just for testing freetype and doesn't look as good */
- int render_mode = FT_LOAD_DEFAULT;
- int m, mfound;
- /* Now tuneable thanks to Wez Furlong */
- double linespace = LINESPACE;
- /* 2.0.6: put this declaration with the other declarations! */
- /*
- * make a new tweenColorCache on every call
- * because caching colormappings between calls
- * is not safe. If the im-pointer points to a
- * brand new image, the cache gives out bogus
- * colorindexes. -- 27.06.2001 <krisku@arrak.fi>
- */
- gdCache_head_t *tc_cache;
- /* Tuneable horizontal and vertical resolution in dots per inch */
- int hdpi, vdpi;
-
- if (strex && ((strex->flags & gdFTEX_LINESPACE) == gdFTEX_LINESPACE)) {
- linespace = strex->linespacing;
- }
- tc_cache = gdCacheCreate(TWEENCOLORCACHESIZE, tweenColorTest, tweenColorFetch, tweenColorRelease);
-
- /***** initialize font library and font cache on first call ******/
-
- if (!fontCache) {
- if (gdFontCacheSetup() != 0) {
- gdCacheDelete(tc_cache);
- return "Failure to initialize font library";
- }
- }
- /*****/
-
- gdMutexLock(gdFontCacheMutex);
- /* get the font (via font cache) */
- fontkey.fontlist = fontlist;
- fontkey.library = &library;
- font = (font_t *) gdCacheGet (fontCache, &fontkey);
- if (!font) {
- gdCacheDelete(tc_cache);
- gdMutexUnlock(gdFontCacheMutex);
- return fontCache->error;
- }
- face = font->face; /* shortcut */
- slot = face->glyph; /* shortcut */
-
- /*
- * Added hdpi and vdpi to support images at non-screen resolutions, i.e. 300 dpi TIFF,
- * or 100h x 50v dpi FAX format. 2.0.23.
- * 2004/02/27 Mark Shackelford, mark.shackelford@acs-inc.com
- */
- hdpi = GD_RESOLUTION;
- vdpi = GD_RESOLUTION;
- if (strex && (strex->flags & gdFTEX_RESOLUTION)) {
- hdpi = strex->hdpi;
- vdpi = strex->vdpi;
- }
-
- if (FT_Set_Char_Size(face, 0, (FT_F26Dot6) (ptsize * 64), hdpi, vdpi)) {
- gdCacheDelete(tc_cache);
- gdMutexUnlock(gdFontCacheMutex);
- return "Could not set character size";
- }
-
- matrix.xx = (FT_Fixed) (cos_a * (1 << 16));
- matrix.yx = (FT_Fixed) (sin_a * (1 << 16));
- matrix.xy = -matrix.yx;
- matrix.yy = matrix.xx;
-
- penf.x = penf.y = 0; /* running position of non-rotated string */
- pen.x = pen.y = 0; /* running position of rotated string */
- bbox.xMin = bbox.xMax = bbox.yMin = bbox.yMax = 0;
-
- use_kerning = FT_HAS_KERNING (face);
- previous = 0;
- if (fg < 0) {
- render_mode |= FT_LOAD_MONOCHROME;
- }
- /* 2.0.12: allow explicit specification of the preferred map;
- * but we still fall back if it is not available.
- */
- m = gdFTEX_Unicode;
- if (strex && (strex->flags & gdFTEX_CHARMAP)) {
- m = strex->charmap;
- }
- /* Try all three types of maps, but start with the specified one */
- mfound = 0;
- for (i = 0; i < 3; i++) {
- switch (m) {
- case gdFTEX_Unicode:
- if (font->have_char_map_unicode) {
- mfound = 1;
- }
- break;
- case gdFTEX_Shift_JIS:
- if (font->have_char_map_sjis) {
- mfound = 1;
- }
- break;
- case gdFTEX_Big5:
- /* This was the 'else' case, we can't really 'detect' it */
- mfound = 1;
- break;
- }
- if (mfound) {
- break;
- }
- m++;
- m %= 3;
- }
- if (!mfound) {
- /* No character set found! */
- gdMutexUnlock(gdFontCacheMutex);
- return "No character set found";
- }
-
-#ifndef JISX0208
- if (font->have_char_map_sjis) {
-#endif
- tmpstr = (char *) gdMalloc(BUFSIZ);
- any2eucjp(tmpstr, string, BUFSIZ);
- next = tmpstr;
-#ifndef JISX0208
- } else {
- next = string;
- }
-#endif
-
- while (*next) {
- ch = *next;
-
- /* carriage returns */
- if (ch == '\r') {
- penf.x = 0;
- x1 = (int)(penf.x * cos_a - penf.y * sin_a + 32) / 64;
- y1 = (int)(penf.x * sin_a + penf.y * cos_a + 32) / 64;
- pen.x = pen.y = 0;
- previous = 0; /* clear kerning flag */
- next++;
- continue;
- }
- /* newlines */
- if (ch == '\n') {
- /* 2.0.13: reset penf.x. Christopher J. Grayce */
- penf.x = 0;
- penf.y -= (long)(face->size->metrics.height * linespace);
- penf.y = (penf.y - 32) & -64; /* round to next pixel row */
- x1 = (int)(penf.x * cos_a - penf.y * sin_a + 32) / 64;
- y1 = (int)(penf.x * sin_a + penf.y * cos_a + 32) / 64;
- pen.x = pen.y = 0;
- previous = 0; /* clear kerning flag */
- next++;
- continue;
- }
-
-/* EAM DEBUG */
-#if (defined(FREETYPE_MAJOR) && ((FREETYPE_MAJOR == 2 && ((FREETYPE_MINOR == 1 && FREETYPE_PATCH >= 3) || FREETYPE_MINOR > 1) || FREETYPE_MAJOR > 2)))
- if (font->face->charmap->encoding == FT_ENCODING_MS_SYMBOL) {
- /* I do not know the significance of the constant 0xf000.
- * It was determined by inspection of the character codes
- * stored in Microsoft font symbol.
- */
- len = gdTcl_UtfToUniChar (next, &ch);
- ch |= 0xf000;
- next += len;
- } else
-#endif /* Freetype 2.1 or better */
-/* EAM DEBUG */
-
- switch (m) {
- case gdFTEX_Unicode:
- if (font->have_char_map_unicode) {
- /* use UTF-8 mapping from ASCII */
- len = gdTcl_UtfToUniChar(next, &ch);
- next += len;
- }
- break;
- case gdFTEX_Shift_JIS:
- if (font->have_char_map_sjis) {
- unsigned char c;
- int jiscode;
- c = *next;
- if (0xA1 <= c && c <= 0xFE) {
- next++;
- jiscode = 0x100 * (c & 0x7F) + ((*next) & 0x7F);
-
- ch = (jiscode >> 8) & 0xFF;
- jiscode &= 0xFF;
-
- if (ch & 1) {
- jiscode += 0x40 - 0x21;
- } else {
- jiscode += 0x9E - 0x21;
- }
-
- if (jiscode >= 0x7F) {
- jiscode++;
- }
- ch = (ch - 0x21) / 2 + 0x81;
- if (ch >= 0xA0) {
- ch += 0x40;
- }
-
- ch = (ch << 8) + jiscode;
- } else {
- ch = c & 0xFF; /* don't extend sign */
- }
- next++;
- }
- break;
- case gdFTEX_Big5: {
- /*
- * Big 5 mapping:
- * use "JIS-8 half-width katakana" coding from 8-bit characters. Ref:
- * ftp://ftp.ora.com/pub/examples/nutshell/ujip/doc/japan.inf-032092.sjs
- */
- ch = (*next) & 0xFF; /* don't extend sign */
- next++;
- if (ch >= 161 /* first code of JIS-8 pair */
- && *next) { /* don't advance past '\0' */
- /* TBB: Fix from Kwok Wah On: & 255 needed */
- ch = (ch * 256) + ((*next) & 255);
- next++;
- }
- }
- break;
- }
-
- /* set rotation transform */
- FT_Set_Transform(face, &matrix, NULL);
- /* Convert character code to glyph index */
- glyph_index = FT_Get_Char_Index(face, ch);
-
- /* retrieve kerning distance and move pen position */
- if (use_kerning && previous && glyph_index) {
- FT_Get_Kerning(face, previous, glyph_index, ft_kerning_default, &delta);
- pen.x += delta.x;
- penf.x += delta.x;
- }
-
- /* load glyph image into the slot (erase previous one) */
- if (FT_Load_Glyph(face, glyph_index, render_mode)) {
- if (tmpstr) {
- gdFree(tmpstr);
- }
- gdCacheDelete(tc_cache);
- gdMutexUnlock(gdFontCacheMutex);
- return "Problem loading glyph";
- }
-
- /* transform glyph image */
- FT_Get_Glyph(slot, &image);
- if (brect) { /* only if need brect */
- FT_Glyph_Get_CBox(image, ft_glyph_bbox_gridfit, &glyph_bbox);
- glyph_bbox.xMin += penf.x;
- glyph_bbox.yMin += penf.y;
- glyph_bbox.xMax += penf.x;
- glyph_bbox.yMax += penf.y;
- if (ch == ' ') { /* special case for trailing space */
- glyph_bbox.xMax += slot->metrics.horiAdvance;
- }
- if (!i) { /* if first character, init BB corner values */
- bbox.xMin = glyph_bbox.xMin;
- bbox.yMin = glyph_bbox.yMin;
- bbox.xMax = glyph_bbox.xMax;
- bbox.yMax = glyph_bbox.yMax;
- } else {
- if (bbox.xMin > glyph_bbox.xMin) {
- bbox.xMin = glyph_bbox.xMin;
- }
- if (bbox.yMin > glyph_bbox.yMin) {
- bbox.yMin = glyph_bbox.yMin;
- }
- if (bbox.xMax < glyph_bbox.xMax) {
- bbox.xMax = glyph_bbox.xMax;
- }
- if (bbox.yMax < glyph_bbox.yMax) {
- bbox.yMax = glyph_bbox.yMax;
- }
- }
- i++;
- }
-
- if (render) {
- if (image->format != ft_glyph_format_bitmap && FT_Glyph_To_Bitmap(&image, ft_render_mode_normal, 0, 1)) {
- if (tmpstr) {
- gdFree(tmpstr);
- }
- gdCacheDelete(tc_cache);
- gdMutexUnlock(gdFontCacheMutex);
- return "Problem rendering glyph";
- }
-
- /* now, draw to our target surface */
- bm = (FT_BitmapGlyph) image;
- gdft_draw_bitmap(tc_cache, im, fg, bm->bitmap, x + x1 + ((pen.x + 31) >> 6) + bm->left, y - y1 + ((pen.y + 31) >> 6) - bm->top);
- }
-
- /* record current glyph index for kerning */
- previous = glyph_index;
-
- /* increment pen position */
- pen.x += image->advance.x >> 10;
- pen.y -= image->advance.y >> 10;
-
- penf.x += slot->metrics.horiAdvance;
-
- FT_Done_Glyph(image);
- }
-
- if (brect) { /* only if need brect */
- /* For perfect rounding, must get sin(a + pi/4) and sin(a - pi/4). */
- double d1 = sin (angle + 0.78539816339744830962);
- double d2 = sin (angle - 0.78539816339744830962);
-
- /* rotate bounding rectangle */
- brect[0] = (int) (bbox.xMin * cos_a - bbox.yMin * sin_a);
- brect[1] = (int) (bbox.xMin * sin_a + bbox.yMin * cos_a);
- brect[2] = (int) (bbox.xMax * cos_a - bbox.yMin * sin_a);
- brect[3] = (int) (bbox.xMax * sin_a + bbox.yMin * cos_a);
- brect[4] = (int) (bbox.xMax * cos_a - bbox.yMax * sin_a);
- brect[5] = (int) (bbox.xMax * sin_a + bbox.yMax * cos_a);
- brect[6] = (int) (bbox.xMin * cos_a - bbox.yMax * sin_a);
- brect[7] = (int) (bbox.xMin * sin_a + bbox.yMax * cos_a);
-
- /* scale, round and offset brect */
- brect[0] = x + gdroundupdown(brect[0], d2 > 0);
- brect[1] = y - gdroundupdown(brect[1], d1 < 0);
- brect[2] = x + gdroundupdown(brect[2], d1 > 0);
- brect[3] = y - gdroundupdown(brect[3], d2 > 0);
- brect[4] = x + gdroundupdown(brect[4], d2 < 0);
- brect[5] = y - gdroundupdown(brect[5], d1 > 0);
- brect[6] = x + gdroundupdown(brect[6], d1 < 0);
- brect[7] = y - gdroundupdown(brect[7], d2 < 0);
- }
-
- if (tmpstr) {
- gdFree(tmpstr);
- }
- gdCacheDelete(tc_cache);
- gdMutexUnlock(gdFontCacheMutex);
- return (char *) NULL;
-}
-
-#endif /* HAVE_LIBFREETYPE */
diff --git a/ext/gd/libgd/gdhelpers.c b/ext/gd/libgd/gdhelpers.c
deleted file mode 100644
index ae2428dfcd..0000000000
--- a/ext/gd/libgd/gdhelpers.c
+++ /dev/null
@@ -1,76 +0,0 @@
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "gd.h"
-#include "gdhelpers.h"
-#include <stdlib.h>
-#include <string.h>
-
-/* TBB: gd_strtok_r is not portable; provide an implementation */
-
-#define SEP_TEST (separators[*((unsigned char *) s)])
-
-char *
-gd_strtok_r (char *s, char *sep, char **state)
-{
- char separators[256];
- char *start;
- char *result = 0;
- memset (separators, 0, sizeof (separators));
- while (*sep)
- {
- separators[*((unsigned char *) sep)] = 1;
- sep++;
- }
- if (!s)
- {
- /* Pick up where we left off */
- s = *state;
- }
- start = s;
- /* 1. EOS */
- if (!(*s))
- {
- *state = s;
- return 0;
- }
- /* 2. Leading separators, if any */
- if (SEP_TEST)
- {
- do
- {
- s++;
- }
- while (SEP_TEST);
- /* 2a. EOS after separators only */
- if (!(*s))
- {
- *state = s;
- return 0;
- }
- }
- /* 3. A token */
- result = s;
- do
- {
- /* 3a. Token at end of string */
- if (!(*s))
- {
- *state = s;
- return result;
- }
- s++;
- }
- while (!SEP_TEST);
- /* 4. Terminate token and skip trailing separators */
- *s = '\0';
- do
- {
- s++;
- }
- while (SEP_TEST);
- /* 5. Return token */
- *state = s;
- return result;
-}
diff --git a/ext/gd/libgd/gdhelpers.h b/ext/gd/libgd/gdhelpers.h
deleted file mode 100644
index 5e7d9bee73..0000000000
--- a/ext/gd/libgd/gdhelpers.h
+++ /dev/null
@@ -1,39 +0,0 @@
-#ifndef GDHELPERS_H
-#define GDHELPERS_H 1
-
-#include <sys/types.h>
-#include "php.h"
-
-/* TBB: strtok_r is not universal; provide an implementation of it. */
-
-extern char *gd_strtok_r(char *s, char *sep, char **state);
-
-/* These functions wrap memory management. gdFree is
- in gd.h, where callers can utilize it to correctly
- free memory allocated by these functions with the
- right version of free(). */
-#define gdCalloc(nmemb, size) ecalloc(nmemb, size)
-#define gdMalloc(size) emalloc(size)
-#define gdRealloc(ptr, size) erealloc(ptr, size)
-#define gdEstrdup(ptr) estrdup(ptr)
-#define gdFree(ptr) efree(ptr)
-#define gdPMalloc(ptr) pemalloc(ptr, 1)
-#define gdPFree(ptr) pefree(ptr, 1)
-#define gdPEstrdup(ptr) pestrdup(ptr, 1)
-
-#ifdef ZTS
-#define gdMutexDeclare(x) MUTEX_T x
-#define gdMutexSetup(x) x = tsrm_mutex_alloc()
-#define gdMutexShutdown(x) tsrm_mutex_free(x)
-#define gdMutexLock(x) tsrm_mutex_lock(x)
-#define gdMutexUnlock(x) tsrm_mutex_unlock(x)
-#else
-#define gdMutexDeclare(x)
-#define gdMutexSetup(x)
-#define gdMutexShutdown(x)
-#define gdMutexLock(x)
-#define gdMutexUnlock(x)
-#endif
-
-#endif /* GDHELPERS_H */
-
diff --git a/ext/gd/libgd/gdkanji.c b/ext/gd/libgd/gdkanji.c
deleted file mode 100644
index 37f3bd10a0..0000000000
--- a/ext/gd/libgd/gdkanji.c
+++ /dev/null
@@ -1,627 +0,0 @@
-
-/* gdkanji.c (Kanji code converter) */
-/* written by Masahito Yamaga (ma@yama-ga.com) */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include "gd.h"
-#include "gdhelpers.h"
-
-#include <stdarg.h>
-#if defined(HAVE_ICONV_H) || defined(HAVE_ICONV)
-#include <iconv.h>
-#ifdef HAVE_ERRNO_H
-#include <errno.h>
-#endif
-#endif
-
-#if defined(HAVE_ICONV_H) && !defined(HAVE_ICONV)
-#define HAVE_ICONV 1
-#endif
-
-#define LIBNAME "any2eucjp()"
-
-#if defined(__MSC__) || defined(__BORLANDC__) || defined(__TURBOC__) || defined(_Windows) || defined(MSDOS)
-#ifndef SJISPRE
-#define SJISPRE 1
-#endif
-#endif
-
-#ifdef TRUE
-#undef TRUE
-#endif
-#ifdef FALSE
-#undef FALSE
-#endif
-
-#define TRUE 1
-#define FALSE 0
-
-#define NEW 1
-#define OLD 2
-#define ESCI 3
-#define NEC 4
-#define EUC 5
-#define SJIS 6
-#define EUCORSJIS 7
-#define ASCII 8
-
-#define NEWJISSTR "JIS7"
-#define OLDJISSTR "jis"
-#define EUCSTR "eucJP"
-#define SJISSTR "SJIS"
-
-#define ESC 27
-#define SS2 142
-
-static void
-debug (const char *format,...)
-{
-#ifdef DEBUG
- va_list args;
-
- va_start (args, format);
- fprintf (stdout, "%s: ", LIBNAME);
- vfprintf (stdout, format, args);
- fprintf (stdout, "\n");
- va_end (args);
-#endif
-}
-
-static void
-error (const char *format,...)
-{
- va_list args;
- char *tmp;
- TSRMLS_FETCH();
-
- va_start(args, format);
- vspprintf(&tmp, 0, format, args);
- va_end(args);
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s: %s", LIBNAME, tmp);
- efree(tmp);
-}
-
-/* DetectKanjiCode() derived from DetectCodeType() by Ken Lunde. */
-
-static int
-DetectKanjiCode (unsigned char *str)
-{
- static int whatcode = ASCII;
- int oldcode = ASCII;
- int c, i;
- char *lang = NULL;
-
- c = '\1';
- i = 0;
-
- if (whatcode != EUCORSJIS && whatcode != ASCII)
- {
- oldcode = whatcode;
- whatcode = ASCII;
- }
-
- while ((whatcode == EUCORSJIS || whatcode == ASCII) && c != '\0')
- {
- if ((c = str[i++]) != '\0')
- {
- if (c == ESC)
- {
- c = str[i++];
- if (c == '$')
- {
- c = str[i++];
- if (c == 'B')
- whatcode = NEW;
- else if (c == '@')
- whatcode = OLD;
- }
- else if (c == '(')
- {
- c = str[i++];
- if (c == 'I')
- whatcode = ESCI;
- }
- else if (c == 'K')
- whatcode = NEC;
- }
- else if ((c >= 129 && c <= 141) || (c >= 143 && c <= 159))
- whatcode = SJIS;
- else if (c == SS2)
- {
- c = str[i++];
- if ((c >= 64 && c <= 126) || (c >= 128 && c <= 160) || (c >= 224 && c <= 252))
- whatcode = SJIS;
- else if (c >= 161 && c <= 223)
- whatcode = EUCORSJIS;
- }
- else if (c >= 161 && c <= 223)
- {
- c = str[i++];
- if (c >= 240 && c <= 254)
- whatcode = EUC;
- else if (c >= 161 && c <= 223)
- whatcode = EUCORSJIS;
- else if (c >= 224 && c <= 239)
- {
- whatcode = EUCORSJIS;
- while (c >= 64 && c != '\0' && whatcode == EUCORSJIS)
- {
- if (c >= 129)
- {
- if (c <= 141 || (c >= 143 && c <= 159))
- whatcode = SJIS;
- else if (c >= 253 && c <= 254)
- whatcode = EUC;
- }
- c = str[i++];
- }
- }
- else if (c <= 159)
- whatcode = SJIS;
- }
- else if (c >= 240 && c <= 254)
- whatcode = EUC;
- else if (c >= 224 && c <= 239)
- {
- c = str[i++];
- if ((c >= 64 && c <= 126) || (c >= 128 && c <= 160))
- whatcode = SJIS;
- else if (c >= 253 && c <= 254)
- whatcode = EUC;
- else if (c >= 161 && c <= 252)
- whatcode = EUCORSJIS;
- }
- }
- }
-
-#ifdef DEBUG
- if (whatcode == ASCII)
- debug ("Kanji code not included.");
- else if (whatcode == EUCORSJIS)
- debug ("Kanji code not detected.");
- else
- debug ("Kanji code detected at %d byte.", i);
-#endif
-
- if (whatcode == EUCORSJIS && oldcode != ASCII)
- whatcode = oldcode;
-
- if (whatcode == EUCORSJIS)
- {
- if (getenv ("LC_ALL"))
- lang = getenv ("LC_ALL");
- else if (getenv ("LC_CTYPE"))
- lang = getenv ("LC_CTYPE");
- else if (getenv ("LANG"))
- lang = getenv ("LANG");
-
- if (lang)
- {
- if (strcmp (lang, "ja_JP.SJIS") == 0 ||
-#ifdef hpux
- strcmp (lang, "japanese") == 0 ||
-#endif
- strcmp (lang, "ja_JP.mscode") == 0 ||
- strcmp (lang, "ja_JP.PCK") == 0)
- whatcode = SJIS;
- else if (strncmp (lang, "ja", 2) == 0)
-#ifdef SJISPRE
- whatcode = SJIS;
-#else
- whatcode = EUC;
-#endif
- }
- }
-
- if (whatcode == EUCORSJIS)
-#ifdef SJISPRE
- whatcode = SJIS;
-#else
- whatcode = EUC;
-#endif
-
- return whatcode;
-}
-
-/* SJIStoJIS() is sjis2jis() by Ken Lunde. */
-
-static void
-SJIStoJIS (int *p1, int *p2)
-{
- register unsigned char c1 = *p1;
- register unsigned char c2 = *p2;
- register int adjust = c2 < 159;
- register int rowOffset = c1 < 160 ? 112 : 176;
- register int cellOffset = adjust ? (31 + (c2 > 127)) : 126;
-
- *p1 = ((c1 - rowOffset) << 1) - adjust;
- *p2 -= cellOffset;
-}
-
-/* han2zen() was derived from han2zen() written by Ken Lunde. */
-
-#define IS_DAKU(c) ((c >= 182 && c <= 196) || (c >= 202 && c <= 206) || (c == 179))
-#define IS_HANDAKU(c) (c >= 202 && c <= 206)
-
-static void
-han2zen (int *p1, int *p2)
-{
- int c = *p1;
- int daku = FALSE;
- int handaku = FALSE;
- int mtable[][2] =
- {
- {129, 66},
- {129, 117},
- {129, 118},
- {129, 65},
- {129, 69},
- {131, 146},
- {131, 64},
- {131, 66},
- {131, 68},
- {131, 70},
- {131, 72},
- {131, 131},
- {131, 133},
- {131, 135},
- {131, 98},
- {129, 91},
- {131, 65},
- {131, 67},
- {131, 69},
- {131, 71},
- {131, 73},
- {131, 74},
- {131, 76},
- {131, 78},
- {131, 80},
- {131, 82},
- {131, 84},
- {131, 86},
- {131, 88},
- {131, 90},
- {131, 92},
- {131, 94},
- {131, 96},
- {131, 99},
- {131, 101},
- {131, 103},
- {131, 105},
- {131, 106},
- {131, 107},
- {131, 108},
- {131, 109},
- {131, 110},
- {131, 113},
- {131, 116},
- {131, 119},
- {131, 122},
- {131, 125},
- {131, 126},
- {131, 128},
- {131, 129},
- {131, 130},
- {131, 132},
- {131, 134},
- {131, 136},
- {131, 137},
- {131, 138},
- {131, 139},
- {131, 140},
- {131, 141},
- {131, 143},
- {131, 147},
- {129, 74},
- {129, 75}
- };
-
- if (*p2 == 222 && IS_DAKU (*p1))
- daku = TRUE; /* Daku-ten */
- else if (*p2 == 223 && IS_HANDAKU (*p1))
- handaku = TRUE; /* Han-daku-ten */
-
- *p1 = mtable[c - 161][0];
- *p2 = mtable[c - 161][1];
-
- if (daku)
- {
- if ((*p2 >= 74 && *p2 <= 103) || (*p2 >= 110 && *p2 <= 122))
- (*p2)++;
- else if (*p2 == 131 && *p2 == 69)
- *p2 = 148;
- }
- else if (handaku && *p2 >= 110 && *p2 <= 122)
- (*p2) += 2;
-}
-
-/* Recast strcpy to handle unsigned chars used below. */
-#define ustrcpy(A,B) (strcpy((char*)(A),(const char*)(B)))
-
-static void
-do_convert (unsigned char *to, unsigned char *from, const char *code)
-{
-#ifdef HAVE_ICONV
- iconv_t cd;
- size_t from_len, to_len;
-
- if ((cd = iconv_open (EUCSTR, code)) == (iconv_t) - 1)
- {
- error ("iconv_open() error");
-#ifdef HAVE_ERRNO_H
- if (errno == EINVAL)
- error ("invalid code specification: \"%s\" or \"%s\"",
- EUCSTR, code);
-#endif
- strcpy ((char *) to, (const char *) from);
- return;
- }
-
- from_len = strlen ((const char *) from) + 1;
- to_len = BUFSIZ;
-
- if ((int) iconv(cd, (char **) &from, &from_len, (char **) &to, &to_len) == -1)
- {
-#ifdef HAVE_ERRNO_H
- if (errno == EINVAL)
- error ("invalid end of input string");
- else if (errno == EILSEQ)
- error ("invalid code in input string");
- else if (errno == E2BIG)
- error ("output buffer overflow at do_convert()");
- else
-#endif
- error ("something happen");
- strcpy ((char *) to, (const char *) from);
- return;
- }
-
- if (iconv_close (cd) != 0)
- {
- error ("iconv_close() error");
- }
-#else
- int p1, p2, i, j;
- int jisx0208 = FALSE;
- int hankaku = FALSE;
-
- j = 0;
- if (strcmp (code, NEWJISSTR) == 0 || strcmp (code, OLDJISSTR) == 0)
- {
- for (i = 0; from[i] != '\0' && j < BUFSIZ; i++)
- {
- if (from[i] == ESC)
- {
- i++;
- if (from[i] == '$')
- {
- jisx0208 = TRUE;
- hankaku = FALSE;
- i++;
- }
- else if (from[i] == '(')
- {
- jisx0208 = FALSE;
- i++;
- if (from[i] == 'I') /* Hankaku Kana */
- hankaku = TRUE;
- else
- hankaku = FALSE;
- }
- }
- else
- {
- if (jisx0208)
- to[j++] = from[i] + 128;
- else if (hankaku)
- {
- to[j++] = SS2;
- to[j++] = from[i] + 128;
- }
- else
- to[j++] = from[i];
- }
- }
- }
- else if (strcmp (code, SJISSTR) == 0)
- {
- for (i = 0; from[i] != '\0' && j < BUFSIZ; i++)
- {
- p1 = from[i];
- if (p1 < 127)
- to[j++] = p1;
- else if ((p1 >= 161) && (p1 <= 223))
- { /* Hankaku Kana */
- to[j++] = SS2;
- to[j++] = p1;
- }
- else
- {
- p2 = from[++i];
- SJIStoJIS (&p1, &p2);
- to[j++] = p1 + 128;
- to[j++] = p2 + 128;
- }
- }
- }
- else
- {
- error ("invalid code specification: \"%s\"", code);
- return;
- }
-
- if (j >= BUFSIZ)
- {
- error ("output buffer overflow at do_convert()");
- ustrcpy (to, from);
- }
- else
- to[j] = '\0';
-#endif /* HAVE_ICONV */
-}
-
-static int
-do_check_and_conv (unsigned char *to, unsigned char *from)
-{
- static unsigned char tmp[BUFSIZ];
- int p1, p2, i, j;
- int kanji = TRUE;
-
- switch (DetectKanjiCode (from))
- {
- case NEW:
- debug ("Kanji code is New JIS.");
- do_convert (tmp, from, NEWJISSTR);
- break;
- case OLD:
- debug ("Kanji code is Old JIS.");
- do_convert (tmp, from, OLDJISSTR);
- break;
- case ESCI:
- debug ("This string includes Hankaku-Kana (jisx0201) escape sequence [ESC] + ( + I.");
- do_convert (tmp, from, NEWJISSTR);
- break;
- case NEC:
- debug ("Kanji code is NEC Kanji.");
- error ("cannot convert NEC Kanji.");
- ustrcpy (tmp, from);
- kanji = FALSE;
- break;
- case EUC:
- debug ("Kanji code is EUC.");
- ustrcpy (tmp, from);
- break;
- case SJIS:
- debug ("Kanji code is SJIS.");
- do_convert (tmp, from, SJISSTR);
- break;
- case EUCORSJIS:
- debug ("Kanji code is EUC or SJIS.");
- ustrcpy (tmp, from);
- kanji = FALSE;
- break;
- case ASCII:
- debug ("This is ASCII string.");
- ustrcpy (tmp, from);
- kanji = FALSE;
- break;
- default:
- debug ("This string includes unknown code.");
- ustrcpy (tmp, from);
- kanji = FALSE;
- break;
- }
-
- /* Hankaku Kana ---> Zenkaku Kana */
- if (kanji)
- {
- j = 0;
- for (i = 0; tmp[i] != '\0' && j < BUFSIZ; i++)
- {
- if (tmp[i] == SS2)
- {
- p1 = tmp[++i];
- if (tmp[i + 1] == SS2)
- {
- p2 = tmp[i + 2];
- if (p2 == 222 || p2 == 223)
- i += 2;
- else
- p2 = 0;
- }
- else
- p2 = 0;
- han2zen (&p1, &p2);
- SJIStoJIS (&p1, &p2);
- to[j++] = p1 + 128;
- to[j++] = p2 + 128;
- }
- else
- to[j++] = tmp[i];
- }
-
- if (j >= BUFSIZ)
- {
- error ("output buffer overflow at Hankaku --> Zenkaku");
- ustrcpy (to, tmp);
- }
- else
- to[j] = '\0';
- }
- else
- ustrcpy (to, tmp);
-
- return kanji;
-}
-
-int
-any2eucjp (unsigned char *dest, unsigned char *src, unsigned int dest_max)
-{
- static unsigned char tmp_dest[BUFSIZ];
- int ret;
-
- if (strlen ((const char *) src) >= BUFSIZ)
- {
- error ("input string too large");
- return -1;
- }
- if (dest_max > BUFSIZ)
- {
- error ("invalid maximum size of destination\nit should be less than %d.", BUFSIZ);
- return -1;
- }
- ret = do_check_and_conv (tmp_dest, src);
- if (strlen ((const char *) tmp_dest) >= dest_max)
- {
- error ("output buffer overflow");
- ustrcpy (dest, src);
- return -1;
- }
- ustrcpy (dest, tmp_dest);
- return ret;
-}
-
-#if 0
-unsigned int
-strwidth (unsigned char *s)
-{
- unsigned char *t;
- unsigned int i;
-
- t = (unsigned char *) gdMalloc (BUFSIZ);
- any2eucjp (t, s, BUFSIZ);
- i = strlen (t);
- gdFree (t);
- return i;
-}
-
-#ifdef DEBUG
-int
-main ()
-{
- unsigned char input[BUFSIZ];
- unsigned char *output;
- unsigned char *str;
- int c, i = 0;
-
- while ((c = fgetc (stdin)) != '\n' && i < BUFSIZ)
- input[i++] = c;
- input[i] = '\0';
-
- printf ("input : %d bytes\n", strlen ((const char *) input));
- printf ("output: %d bytes\n", strwidth (input));
-
- output = (unsigned char *) gdMalloc (BUFSIZ);
- any2eucjp (output, input, BUFSIZ);
- str = output;
- while (*str != '\0')
- putchar (*(str++));
- putchar ('\n');
- gdFree (output);
-
- return 0;
-}
-#endif
-#endif
diff --git a/ext/gd/libgd/gdparttopng.c b/ext/gd/libgd/gdparttopng.c
deleted file mode 100644
index 677a0b5710..0000000000
--- a/ext/gd/libgd/gdparttopng.c
+++ /dev/null
@@ -1,59 +0,0 @@
-#include <stdio.h>
-#include <stdlib.h> /* For atoi */
-#include "gd.h"
-
-/* A short program which converts a .png file into a .gd file, for
- your convenience in creating images on the fly from a
- basis image that must be loaded quickly. The .gd format
- is not intended to be a general-purpose format. */
-
-int
-main (int argc, char **argv)
-{
- gdImagePtr im;
- FILE *in, *out;
- int x, y, w, h;
-
- if (argc != 7)
- {
- fprintf (stderr, "Usage: gdparttopng filename.gd filename.png x y w h\n");
- exit (1);
- }
- in = fopen (argv[1], "rb");
- if (!in)
- {
- fprintf (stderr, "Input file does not exist!\n");
- exit (1);
- }
-
- x = atoi (argv[3]);
- y = atoi (argv[4]);
- w = atoi (argv[5]);
- h = atoi (argv[6]);
-
- printf ("Extracting from (%d, %d), size is %dx%d\n", x, y, w, h);
-
- im = gdImageCreateFromGd2Part (in, x, y, w, h);
- fclose (in);
- if (!im)
- {
- fprintf (stderr, "Input is not in PNG format!\n");
- exit (1);
- }
- out = fopen (argv[2], "wb");
- if (!out)
- {
- fprintf (stderr, "Output file cannot be written to!\n");
- gdImageDestroy (im);
- exit (1);
- }
-#ifdef HAVE_LIBPNG
- gdImagePng (im, out);
-#else
- fprintf(stderr, "No PNG library support.\n");
-#endif
- fclose (out);
- gdImageDestroy (im);
-
- return 0;
-}
diff --git a/ext/gd/libgd/gdtables.c b/ext/gd/libgd/gdtables.c
deleted file mode 100644
index 46f94eaea2..0000000000
--- a/ext/gd/libgd/gdtables.c
+++ /dev/null
@@ -1,730 +0,0 @@
-
-#include "php_compat.h"
-
-int gdCosT[] =
-{
- 1024,
- 1023,
- 1023,
- 1022,
- 1021,
- 1020,
- 1018,
- 1016,
- 1014,
- 1011,
- 1008,
- 1005,
- 1001,
- 997,
- 993,
- 989,
- 984,
- 979,
- 973,
- 968,
- 962,
- 955,
- 949,
- 942,
- 935,
- 928,
- 920,
- 912,
- 904,
- 895,
- 886,
- 877,
- 868,
- 858,
- 848,
- 838,
- 828,
- 817,
- 806,
- 795,
- 784,
- 772,
- 760,
- 748,
- 736,
- 724,
- 711,
- 698,
- 685,
- 671,
- 658,
- 644,
- 630,
- 616,
- 601,
- 587,
- 572,
- 557,
- 542,
- 527,
- 512,
- 496,
- 480,
- 464,
- 448,
- 432,
- 416,
- 400,
- 383,
- 366,
- 350,
- 333,
- 316,
- 299,
- 282,
- 265,
- 247,
- 230,
- 212,
- 195,
- 177,
- 160,
- 142,
- 124,
- 107,
- 89,
- 71,
- 53,
- 35,
- 17,
- 0,
- -17,
- -35,
- -53,
- -71,
- -89,
- -107,
- -124,
- -142,
- -160,
- -177,
- -195,
- -212,
- -230,
- -247,
- -265,
- -282,
- -299,
- -316,
- -333,
- -350,
- -366,
- -383,
- -400,
- -416,
- -432,
- -448,
- -464,
- -480,
- -496,
- -512,
- -527,
- -542,
- -557,
- -572,
- -587,
- -601,
- -616,
- -630,
- -644,
- -658,
- -671,
- -685,
- -698,
- -711,
- -724,
- -736,
- -748,
- -760,
- -772,
- -784,
- -795,
- -806,
- -817,
- -828,
- -838,
- -848,
- -858,
- -868,
- -877,
- -886,
- -895,
- -904,
- -912,
- -920,
- -928,
- -935,
- -942,
- -949,
- -955,
- -962,
- -968,
- -973,
- -979,
- -984,
- -989,
- -993,
- -997,
- -1001,
- -1005,
- -1008,
- -1011,
- -1014,
- -1016,
- -1018,
- -1020,
- -1021,
- -1022,
- -1023,
- -1023,
- -1024,
- -1023,
- -1023,
- -1022,
- -1021,
- -1020,
- -1018,
- -1016,
- -1014,
- -1011,
- -1008,
- -1005,
- -1001,
- -997,
- -993,
- -989,
- -984,
- -979,
- -973,
- -968,
- -962,
- -955,
- -949,
- -942,
- -935,
- -928,
- -920,
- -912,
- -904,
- -895,
- -886,
- -877,
- -868,
- -858,
- -848,
- -838,
- -828,
- -817,
- -806,
- -795,
- -784,
- -772,
- -760,
- -748,
- -736,
- -724,
- -711,
- -698,
- -685,
- -671,
- -658,
- -644,
- -630,
- -616,
- -601,
- -587,
- -572,
- -557,
- -542,
- -527,
- -512,
- -496,
- -480,
- -464,
- -448,
- -432,
- -416,
- -400,
- -383,
- -366,
- -350,
- -333,
- -316,
- -299,
- -282,
- -265,
- -247,
- -230,
- -212,
- -195,
- -177,
- -160,
- -142,
- -124,
- -107,
- -89,
- -71,
- -53,
- -35,
- -17,
- 0,
- 17,
- 35,
- 53,
- 71,
- 89,
- 107,
- 124,
- 142,
- 160,
- 177,
- 195,
- 212,
- 230,
- 247,
- 265,
- 282,
- 299,
- 316,
- 333,
- 350,
- 366,
- 383,
- 400,
- 416,
- 432,
- 448,
- 464,
- 480,
- 496,
- 512,
- 527,
- 542,
- 557,
- 572,
- 587,
- 601,
- 616,
- 630,
- 644,
- 658,
- 671,
- 685,
- 698,
- 711,
- 724,
- 736,
- 748,
- 760,
- 772,
- 784,
- 795,
- 806,
- 817,
- 828,
- 838,
- 848,
- 858,
- 868,
- 877,
- 886,
- 895,
- 904,
- 912,
- 920,
- 928,
- 935,
- 942,
- 949,
- 955,
- 962,
- 968,
- 973,
- 979,
- 984,
- 989,
- 993,
- 997,
- 1001,
- 1005,
- 1008,
- 1011,
- 1014,
- 1016,
- 1018,
- 1020,
- 1021,
- 1022,
- 1023,
- 1023
-};
-
-int gdSinT[] =
-{
- 0,
- 17,
- 35,
- 53,
- 71,
- 89,
- 107,
- 124,
- 142,
- 160,
- 177,
- 195,
- 212,
- 230,
- 247,
- 265,
- 282,
- 299,
- 316,
- 333,
- 350,
- 366,
- 383,
- 400,
- 416,
- 432,
- 448,
- 464,
- 480,
- 496,
- 512,
- 527,
- 542,
- 557,
- 572,
- 587,
- 601,
- 616,
- 630,
- 644,
- 658,
- 671,
- 685,
- 698,
- 711,
- 724,
- 736,
- 748,
- 760,
- 772,
- 784,
- 795,
- 806,
- 817,
- 828,
- 838,
- 848,
- 858,
- 868,
- 877,
- 886,
- 895,
- 904,
- 912,
- 920,
- 928,
- 935,
- 942,
- 949,
- 955,
- 962,
- 968,
- 973,
- 979,
- 984,
- 989,
- 993,
- 997,
- 1001,
- 1005,
- 1008,
- 1011,
- 1014,
- 1016,
- 1018,
- 1020,
- 1021,
- 1022,
- 1023,
- 1023,
- 1024,
- 1023,
- 1023,
- 1022,
- 1021,
- 1020,
- 1018,
- 1016,
- 1014,
- 1011,
- 1008,
- 1005,
- 1001,
- 997,
- 993,
- 989,
- 984,
- 979,
- 973,
- 968,
- 962,
- 955,
- 949,
- 942,
- 935,
- 928,
- 920,
- 912,
- 904,
- 895,
- 886,
- 877,
- 868,
- 858,
- 848,
- 838,
- 828,
- 817,
- 806,
- 795,
- 784,
- 772,
- 760,
- 748,
- 736,
- 724,
- 711,
- 698,
- 685,
- 671,
- 658,
- 644,
- 630,
- 616,
- 601,
- 587,
- 572,
- 557,
- 542,
- 527,
- 512,
- 496,
- 480,
- 464,
- 448,
- 432,
- 416,
- 400,
- 383,
- 366,
- 350,
- 333,
- 316,
- 299,
- 282,
- 265,
- 247,
- 230,
- 212,
- 195,
- 177,
- 160,
- 142,
- 124,
- 107,
- 89,
- 71,
- 53,
- 35,
- 17,
- 0,
- -17,
- -35,
- -53,
- -71,
- -89,
- -107,
- -124,
- -142,
- -160,
- -177,
- -195,
- -212,
- -230,
- -247,
- -265,
- -282,
- -299,
- -316,
- -333,
- -350,
- -366,
- -383,
- -400,
- -416,
- -432,
- -448,
- -464,
- -480,
- -496,
- -512,
- -527,
- -542,
- -557,
- -572,
- -587,
- -601,
- -616,
- -630,
- -644,
- -658,
- -671,
- -685,
- -698,
- -711,
- -724,
- -736,
- -748,
- -760,
- -772,
- -784,
- -795,
- -806,
- -817,
- -828,
- -838,
- -848,
- -858,
- -868,
- -877,
- -886,
- -895,
- -904,
- -912,
- -920,
- -928,
- -935,
- -942,
- -949,
- -955,
- -962,
- -968,
- -973,
- -979,
- -984,
- -989,
- -993,
- -997,
- -1001,
- -1005,
- -1008,
- -1011,
- -1014,
- -1016,
- -1018,
- -1020,
- -1021,
- -1022,
- -1023,
- -1023,
- -1024,
- -1023,
- -1023,
- -1022,
- -1021,
- -1020,
- -1018,
- -1016,
- -1014,
- -1011,
- -1008,
- -1005,
- -1001,
- -997,
- -993,
- -989,
- -984,
- -979,
- -973,
- -968,
- -962,
- -955,
- -949,
- -942,
- -935,
- -928,
- -920,
- -912,
- -904,
- -895,
- -886,
- -877,
- -868,
- -858,
- -848,
- -838,
- -828,
- -817,
- -806,
- -795,
- -784,
- -772,
- -760,
- -748,
- -736,
- -724,
- -711,
- -698,
- -685,
- -671,
- -658,
- -644,
- -630,
- -616,
- -601,
- -587,
- -572,
- -557,
- -542,
- -527,
- -512,
- -496,
- -480,
- -464,
- -448,
- -432,
- -416,
- -400,
- -383,
- -366,
- -350,
- -333,
- -316,
- -299,
- -282,
- -265,
- -247,
- -230,
- -212,
- -195,
- -177,
- -160,
- -142,
- -124,
- -107,
- -89,
- -71,
- -53,
- -35,
- -17
-};
diff --git a/ext/gd/libgd/gdtest.c b/ext/gd/libgd/gdtest.c
deleted file mode 100644
index f4300bb3fd..0000000000
--- a/ext/gd/libgd/gdtest.c
+++ /dev/null
@@ -1,409 +0,0 @@
-#include <stdio.h>
-#ifdef _WIN32
-#include <process.h>
-int
-unlink (const char *filename)
-{
- return _unlink (filename);
-}
-#else
-#include <unistd.h> /* for getpid(), unlink() */
-#endif
-#include "gd.h"
-
-void CompareImages (char *msg, gdImagePtr im1, gdImagePtr im2);
-
-static int freadWrapper (void *context, char *buf, int len);
-static int fwriteWrapper (void *context, const char *buffer, int len);
-
-int
-main (int argc, char **argv)
-{
- gdImagePtr im, ref, im2, im3;
- FILE *in, *out;
- void *iptr;
- int sz;
- gdIOCtxPtr ctx;
- char of[256];
- int colRed, colBlu;
- gdSource imgsrc;
- gdSink imgsnk;
- int foreground;
- int i;
- if (argc != 2)
- {
- fprintf (stderr, "Usage: gdtest filename.png\n");
- exit (1);
- }
- in = fopen (argv[1], "rb");
- if (!in)
- {
- fprintf (stderr, "Input file does not exist!\n");
- exit (1);
- }
- im = gdImageCreateFromPng (in);
-
- rewind (in);
- ref = gdImageCreateFromPng (in);
-
- fclose (in);
-
- printf ("Reference File has %d Palette entries\n", ref->colorsTotal);
-
- CompareImages ("Initial Versions", ref, im);
-
-
- /* */
- /* Send to PNG File then Ptr */
- /* */
- sprintf (of, "%s.png", argv[1]);
- out = fopen (of, "wb");
- gdImagePng (im, out);
- fclose (out);
-
- in = fopen (of, "rb");
- if (!in)
- {
- fprintf (stderr, "PNG Output file does not exist!\n");
- exit (1);
- }
- im2 = gdImageCreateFromPng (in);
- fclose (in);
-
- CompareImages ("GD->PNG File->GD", ref, im2);
-
- unlink (of);
- gdImageDestroy (im2);
-
- iptr = gdImagePngPtr (im, &sz);
- ctx = gdNewDynamicCtx (sz, iptr);
- im2 = gdImageCreateFromPngCtx (ctx);
-
- CompareImages ("GD->PNG ptr->GD", ref, im2);
-
- gdImageDestroy (im2);
- ctx->gd_free (ctx);
-
-
- /* */
- /* Send to GD2 File then Ptr */
- /* */
- sprintf (of, "%s.gd2", argv[1]);
- out = fopen (of, "wb");
- gdImageGd2 (im, out, 128, 2);
- fclose (out);
-
- in = fopen (of, "rb");
- if (!in)
- {
- fprintf (stderr, "GD2 Output file does not exist!\n");
- exit (1);
- }
- im2 = gdImageCreateFromGd2 (in);
- fclose (in);
-
- CompareImages ("GD->GD2 File->GD", ref, im2);
-
- unlink (of);
- gdImageDestroy (im2);
-
- iptr = gdImageGd2Ptr (im, 128, 2, &sz);
- /*printf("Got ptr %d (size %d)\n",iptr, sz); */
- ctx = gdNewDynamicCtx (sz, iptr);
- /*printf("Got ctx %d\n",ctx); */
- im2 = gdImageCreateFromGd2Ctx (ctx);
- /*printf("Got img2 %d\n",im2); */
-
- CompareImages ("GD->GD2 ptr->GD", ref, im2);
-
- gdImageDestroy (im2);
- ctx->gd_free (ctx);
-
-
- /* */
- /* Send to GD File then Ptr */
- /* */
- sprintf (of, "%s.gd", argv[1]);
- out = fopen (of, "wb");
- gdImageGd (im, out);
- fclose (out);
-
- in = fopen (of, "rb");
- if (!in)
- {
- fprintf (stderr, "GD Output file does not exist!\n");
- exit (1);
- }
- im2 = gdImageCreateFromGd (in);
- fclose (in);
-
- CompareImages ("GD->GD File->GD", ref, im2);
-
- unlink (of);
- gdImageDestroy (im2);
-
- iptr = gdImageGdPtr (im, &sz);
- /*printf("Got ptr %d (size %d)\n",iptr, sz); */
- ctx = gdNewDynamicCtx (sz, iptr);
- /*printf("Got ctx %d\n",ctx); */
- im2 = gdImageCreateFromGdCtx (ctx);
- /*printf("Got img2 %d\n",im2); */
-
- CompareImages ("GD->GD ptr->GD", ref, im2);
-
- gdImageDestroy (im2);
- ctx->gd_free (ctx);
-
- /*
- ** Test gdImageCreateFromPngSource'
- * */
-
- in = fopen (argv[1], "rb");
-
- imgsrc.source = freadWrapper;
- imgsrc.context = in;
- im2 = gdImageCreateFromPngSource (&imgsrc);
- fclose (in);
-
- if (im2 == NULL)
- {
- printf ("GD Source: ERROR Null returned by gdImageCreateFromPngSource\n");
- }
- else
- {
- CompareImages ("GD Source", ref, im2);
- gdImageDestroy (im2);
- };
-
-
- /*
- ** Test gdImagePngToSink'
- * */
-
- sprintf (of, "%s.snk", argv[1]);
- out = fopen (of, "wb");
- imgsnk.sink = fwriteWrapper;
- imgsnk.context = out;
- gdImagePngToSink (im, &imgsnk);
- fclose (out);
- in = fopen (of, "rb");
- if (!in)
- {
- fprintf (stderr, "GD Sink: ERROR - GD Sink Output file does not exist!\n");
- }
- else
- {
- im2 = gdImageCreateFromPng (in);
- fclose (in);
-
- CompareImages ("GD Sink", ref, im2);
- gdImageDestroy (im2);
- };
-
- unlink (of);
-
- /* */
- /* Test Extraction */
- /* */
- in = fopen ("test/gdtest_200_300_150_100.png", "rb");
- if (!in)
- {
- fprintf (stderr, "gdtest_200_300_150_100.png does not exist!\n");
- exit (1);
- }
- im2 = gdImageCreateFromPng (in);
- fclose (in);
-
-
- in = fopen ("test/gdtest.gd2", "rb");
- if (!in)
- {
- fprintf (stderr, "gdtest.gd2 does not exist!\n");
- exit (1);
- }
- im3 = gdImageCreateFromGd2Part (in, 200, 300, 150, 100);
- fclose (in);
-
- CompareImages ("GD2Part (gdtest_200_300_150_100.png, gdtest.gd2(part))", im2, im3);
-
- gdImageDestroy (im2);
- gdImageDestroy (im3);
-
- /* */
- /* Copy Blend */
- /* */
- in = fopen ("test/gdtest.png", "rb");
- if (!in)
- {
- fprintf (stderr, "gdtest.png does not exist!\n");
- exit (1);
- }
- im2 = gdImageCreateFromPng (in);
- fclose (in);
-
- im3 = gdImageCreate (100, 60);
- colRed = gdImageColorAllocate (im3, 255, 0, 0);
- colBlu = gdImageColorAllocate (im3, 0, 0, 255);
- gdImageFilledRectangle (im3, 0, 0, 49, 30, colRed);
- gdImageFilledRectangle (im3, 50, 30, 99, 59, colBlu);
-
- gdImageCopyMerge (im2, im3, 150, 200, 10, 10, 90, 50, 50);
- gdImageCopyMerge (im2, im3, 180, 70, 10, 10, 90, 50, 50);
-
- gdImageCopyMergeGray (im2, im3, 250, 160, 10, 10, 90, 50, 50);
- gdImageCopyMergeGray (im2, im3, 80, 70, 10, 10, 90, 50, 50);
-
- gdImageDestroy (im3);
-
- in = fopen ("test/gdtest_merge.png", "rb");
- if (!in)
- {
- fprintf (stderr, "gdtest_merge.png does not exist!\n");
- exit (1);
- }
- im3 = gdImageCreateFromPng (in);
- fclose (in);
-
- printf ("[Merged Image has %d colours]\n", im2->colorsTotal);
- CompareImages ("Merged (gdtest.png, gdtest_merge.png)", im2, im3);
-
- gdImageDestroy (im2);
- gdImageDestroy (im3);
-
-#ifdef HAVE_JPEG
- out = fopen ("test/gdtest.jpg", "wb");
- if (!out)
- {
- fprintf (stderr, "Can't create file test/gdtest.jpg.\n");
- exit (1);
- }
- gdImageJpeg (im, out, -1);
- fclose (out);
- in = fopen ("test/gdtest.jpg", "rb");
- if (!in)
- {
- fprintf (stderr, "Can't open file test/gdtest.jpg.\n");
- exit (1);
- }
- im2 = gdImageCreateFromJpeg (in);
- fclose (in);
- if (!im2)
- {
- fprintf (stderr, "gdImageCreateFromJpeg failed.\n");
- exit (1);
- }
- gdImageDestroy (im2);
- printf ("Created test/gdtest.jpg successfully. Compare this image\n"
- "to the input image manually. Some difference must be\n"
- "expected as JPEG is a lossy file format.\n");
-#endif /* HAVE_JPEG */
- /* Assume the color closest to black is the foreground
- color for the B&W wbmp image. */
- fprintf (stderr, "NOTE: the WBMP output image will NOT match the original unless the original\n"
- "is also black and white. This is OK!\n");
- foreground = gdImageColorClosest (im, 0, 0, 0);
- fprintf (stderr, "Foreground index is %d\n", foreground);
- if (foreground == -1)
- {
- fprintf (stderr, "Source image has no colors, skipping wbmp test.\n");
- }
- else
- {
- out = fopen ("test/gdtest.wbmp", "wb");
- if (!out)
- {
- fprintf (stderr, "Can't create file test/gdtest.wbmp.\n");
- exit (1);
- }
- gdImageWBMP (im, foreground, out);
- fclose (out);
- in = fopen ("test/gdtest.wbmp", "rb");
- if (!in)
- {
- fprintf (stderr, "Can't open file test/gdtest.wbmp.\n");
- exit (1);
- }
- im2 = gdImageCreateFromWBMP (in);
- fprintf (stderr, "WBMP has %d colors\n", gdImageColorsTotal (im2));
- fprintf (stderr, "WBMP colors are:\n");
- for (i = 0; (i < gdImageColorsTotal (im2)); i++)
- {
- fprintf (stderr, "%02X%02X%02X\n",
- gdImageRed (im2, i),
- gdImageGreen (im2, i),
- gdImageBlue (im2, i));
- }
- fclose (in);
- if (!im2)
- {
- fprintf (stderr, "gdImageCreateFromWBMP failed.\n");
- exit (1);
- }
- CompareImages ("WBMP test (gdtest.png, gdtest.wbmp)", ref, im2);
- out = fopen ("test/gdtest_wbmp_to_png.png", "wb");
- if (!out)
- {
- fprintf (stderr, "Can't create file test/gdtest_wbmp_to_png.png.\n");
- exit (1);
- }
- gdImagePng (im2, out);
- fclose (out);
- gdImageDestroy (im2);
- }
- gdImageDestroy (im);
- gdImageDestroy (ref);
-
- return 0;
-}
-
-void
-CompareImages (char *msg, gdImagePtr im1, gdImagePtr im2)
-{
- int cmpRes;
-
- cmpRes = gdImageCompare (im1, im2);
-
- if (cmpRes & GD_CMP_IMAGE)
- {
- printf ("%%%s: ERROR images differ: BAD\n", msg);
- }
- else if (cmpRes != 0)
- {
- printf ("%%%s: WARNING images differ: WARNING - Probably OK\n", msg);
- }
- else
- {
- printf ("%%%s: OK\n", msg);
- return;
- }
-
- if (cmpRes & (GD_CMP_SIZE_X + GD_CMP_SIZE_Y))
- {
- printf ("-%s: INFO image sizes differ\n", msg);
- }
-
- if (cmpRes & GD_CMP_NUM_COLORS)
- {
- printf ("-%s: INFO number of pallette entries differ %d Vs. %d\n", msg,
- im1->colorsTotal, im2->colorsTotal);
- }
-
- if (cmpRes & GD_CMP_COLOR)
- {
- printf ("-%s: INFO actual colours of pixels differ\n", msg);
- }
-}
-
-
-static int
-freadWrapper (void *context, char *buf, int len)
-{
- int got = fread (buf, 1, len, (FILE *) context);
- return got;
-}
-
-static int
-fwriteWrapper (void *context, const char *buffer, int len)
-{
- return fwrite (buffer, 1, len, (FILE *) context);
-}
diff --git a/ext/gd/libgd/gdtestft.c b/ext/gd/libgd/gdtestft.c
deleted file mode 100644
index 1bd0dfc515..0000000000
--- a/ext/gd/libgd/gdtestft.c
+++ /dev/null
@@ -1,108 +0,0 @@
-
-#include "gd.h"
-#include <string.h>
-
-#define PI 3.141592
-#define DEG2RAD(x) ((x)*PI/180.)
-
-#define MAX(x,y) ((x) > (y) ? (x) : (y))
-#define MIN(x,y) ((x) < (y) ? (x) : (y))
-
-#define MAX4(x,y,z,w) \
- ((MAX((x),(y))) > (MAX((z),(w))) ? (MAX((x),(y))) : (MAX((z),(w))))
-#define MIN4(x,y,z,w) \
- ((MIN((x),(y))) < (MIN((z),(w))) ? (MIN((x),(y))) : (MIN((z),(w))))
-
-#define MAXX(x) MAX4(x[0],x[2],x[4],x[6])
-#define MINX(x) MIN4(x[0],x[2],x[4],x[6])
-#define MAXY(x) MAX4(x[1],x[3],x[5],x[7])
-#define MINY(x) MIN4(x[1],x[3],x[5],x[7])
-
-int
-main (int argc, char *argv[])
-{
-#ifndef HAVE_LIBFREETYPE
- fprintf (stderr, "gd was not compiled with HAVE_LIBFREETYPE defined.\n");
- fprintf (stderr, "Install the FreeType library, including the\n");
- fprintf (stderr, "header files. Then edit the gd Makefile, type\n");
- fprintf (stderr, "make clean, and type make again.\n");
- return 1;
-#else
- gdImagePtr im;
- int black;
- int white;
- int brect[8];
- int x, y;
- char *err;
- FILE *out;
-#ifdef JISX0208
- char *s = "Hello. ‚±‚ñ‚É‚¿‚Í Qyjpqg,"; /* String to draw. */
-#else
- char *s = "Hello. Qyjpqg,"; /* String to draw. */
-#endif
-
- double sz = 40.;
-
-#if 0
- double angle = 0.;
-#else
- double angle = DEG2RAD (-90);
-#endif
-
-#ifdef JISX0208
- char *f = "/usr/openwin/lib/locale/ja/X11/fonts/TT/HG-MinchoL.ttf"; /* UNICODE */
- /* char *f = "/usr/local/lib/fonts/truetype/DynaFont/dfpop1.ttf"; *//* SJIS */
-#else
- char *f = "times"; /* TrueType font */
-#endif
-
- /* obtain brect so that we can size the image */
- err = gdImageStringFT ((gdImagePtr) NULL, &brect[0], 0, f, sz, angle, 0, 0, s);
- if (err)
- {
- fprintf (stderr, "%s", err);
- return 1;
- }
-
- /* create an image just big enough for the string */
- x = MAXX (brect) - MINX (brect) + 6;
- y = MAXY (brect) - MINY (brect) + 6;
-#if 0
- im = gdImageCreate (500, 500);
-#else
- /* gd 2.0: true color images can use freetype too */
- im = gdImageCreateTrueColor (x, y);
-#endif
-
- /* Background color. gd 2.0: fill the image with it; truecolor
- images have a black background otherwise. */
- white = gdImageColorResolve (im, 255, 255, 255);
- gdImageFilledRectangle (im, 0, 0, x, y, white);
- black = gdImageColorResolve (im, 0, 0, 0);
-
- /* render the string, offset origin to center string */
- x = 0 - MINX (brect) + 3;
- y = 0 - MINY (brect) + 3;
-
- err = gdImageStringFT (im, NULL, black, f, sz, angle, x, y, s);
- if (err)
- {
- fprintf (stderr, "%s", err);
- return 1;
- }
- /* TBB: Write img to test/fttest.png */
- out = fopen ("test/fttest.png", "wb");
- if (!out)
- {
- fprintf (stderr, "Can't create test/fttest.png\n");
- exit (1);
- }
- gdImagePng (im, out);
- fclose (out);
- fprintf (stderr, "Test image written to test/fttest.png\n");
- /* Destroy it */
- gdImageDestroy (im);
-
- return 0;
-#endif /* HAVE_FREETYPE */
-}
diff --git a/ext/gd/libgd/gdtopng.c b/ext/gd/libgd/gdtopng.c
deleted file mode 100644
index 9de34990ab..0000000000
--- a/ext/gd/libgd/gdtopng.c
+++ /dev/null
@@ -1,44 +0,0 @@
-#include <stdio.h>
-#include "gd.h"
-
-/* A short program which converts a .png file into a .gd file, for
- your convenience in creating images on the fly from a
- basis image that must be loaded quickly. The .gd format
- is not intended to be a general-purpose format. */
-
-int
-main (int argc, char **argv)
-{
- gdImagePtr im;
- FILE *in, *out;
- if (argc != 3)
- {
- fprintf (stderr, "Usage: gdtopng filename.gd filename.png\n");
- exit (1);
- }
- in = fopen (argv[1], "rb");
- if (!in)
- {
- fprintf (stderr, "Input file does not exist!\n");
- exit (1);
- }
- im = gdImageCreateFromGd (in);
- fclose (in);
- if (!im)
- {
- fprintf (stderr, "Input is not in PNG format!\n");
- exit (1);
- }
- out = fopen (argv[2], "wb");
- if (!out)
- {
- fprintf (stderr, "Output file cannot be written to!\n");
- gdImageDestroy (im);
- exit (1);
- }
- gdImagePng (im, out);
- fclose (out);
- gdImageDestroy (im);
-
- return 0;
-}
diff --git a/ext/gd/libgd/gdxpm.c b/ext/gd/libgd/gdxpm.c
deleted file mode 100644
index 5663837aee..0000000000
--- a/ext/gd/libgd/gdxpm.c
+++ /dev/null
@@ -1,139 +0,0 @@
-
-/*
- add ability to load xpm files to gd, requires the xpm
- library.
- Caolan.McNamara@ul.ie
- http://www.csn.ul.ie/~caolan
- */
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include "gd.h"
-#include "gdhelpers.h"
-
-#ifdef HAVE_XPM
-
-#include <X11/xpm.h>
-
-gdImagePtr gdImageCreateFromXpm (char *filename)
-{
- XpmInfo info;
- XpmImage image;
- int i, j, k, number;
- char buf[5];
- gdImagePtr im = 0;
- char *apixel;
- int *pointer;
- int red = 0, green = 0, blue = 0;
- int *colors;
- int ret;
-
- ret = XpmReadFileToXpmImage(filename, &image, &info);
- if (ret != XpmSuccess) {
- return 0;
- }
-
- if (!(im = gdImageCreate(image.width, image.height))) {
- return 0;
- }
-
- number = image.ncolors;
- colors = (int *) safe_emalloc(number, sizeof(int), 0);
- for (i = 0; i < number; i++) {
- switch (strlen (image.colorTable[i].c_color)) {
- case 4:
- buf[1] = '\0';
- buf[0] = image.colorTable[i].c_color[1];
- red = strtol(buf, NULL, 16);
-
- buf[0] = image.colorTable[i].c_color[3];
- green = strtol(buf, NULL, 16);
-
- buf[0] = image.colorTable[i].c_color[5];
- blue = strtol(buf, NULL, 16);
- break;
-
- case 7:
- buf[2] = '\0';
- buf[0] = image.colorTable[i].c_color[1];
- buf[1] = image.colorTable[i].c_color[2];
- red = strtol(buf, NULL, 16);
-
- buf[0] = image.colorTable[i].c_color[3];
- buf[1] = image.colorTable[i].c_color[4];
- green = strtol(buf, NULL, 16);
-
- buf[0] = image.colorTable[i].c_color[5];
- buf[1] = image.colorTable[i].c_color[6];
- blue = strtol(buf, NULL, 16);
- break;
-
- case 10:
- buf[3] = '\0';
- buf[0] = image.colorTable[i].c_color[1];
- buf[1] = image.colorTable[i].c_color[2];
- buf[2] = image.colorTable[i].c_color[3];
- red = strtol(buf, NULL, 16);
- red /= 64;
-
- buf[0] = image.colorTable[i].c_color[4];
- buf[1] = image.colorTable[i].c_color[5];
- buf[2] = image.colorTable[i].c_color[6];
- green = strtol(buf, NULL, 16);
- green /= 64;
-
- buf[0] = image.colorTable[i].c_color[7];
- buf[1] = image.colorTable[i].c_color[8];
- buf[2] = image.colorTable[i].c_color[9];
- blue = strtol(buf, NULL, 16);
- blue /= 64;
- break;
-
- case 13:
- buf[4] = '\0';
- buf[0] = image.colorTable[i].c_color[1];
- buf[1] = image.colorTable[i].c_color[2];
- buf[2] = image.colorTable[i].c_color[3];
- buf[3] = image.colorTable[i].c_color[4];
- red = strtol(buf, NULL, 16);
- red /= 256;
-
- buf[0] = image.colorTable[i].c_color[5];
- buf[1] = image.colorTable[i].c_color[6];
- buf[2] = image.colorTable[i].c_color[7];
- buf[3] = image.colorTable[i].c_color[8];
- green = strtol(buf, NULL, 16);
- green /= 256;
-
- buf[0] = image.colorTable[i].c_color[9];
- buf[1] = image.colorTable[i].c_color[10];
- buf[2] = image.colorTable[i].c_color[11];
- buf[3] = image.colorTable[i].c_color[12];
- blue = strtol(buf, NULL, 16);
- blue /= 256;
- break;
- }
-
-
- colors[i] = gdImageColorResolve(im, red, green, blue);
- if (colors[i] == -1) {
- php_gd_error("ARRRGH\n");
- }
- }
-
- apixel = (char *) gdMalloc(image.cpp + 1);
- apixel[image.cpp] = '\0';
-
- pointer = (int *) image.data;
- for (i = 0; i < image.height; i++) {
- for (j = 0; j < image.width; j++) {
- k = *pointer++;
- gdImageSetPixel(im, j, i, colors[k]);
- }
- }
-
- gdFree(apixel);
- gdFree(colors);
- return im;
-}
-#endif
diff --git a/ext/gd/libgd/jisx0208.h b/ext/gd/libgd/jisx0208.h
deleted file mode 100644
index f8a8b510fa..0000000000
--- a/ext/gd/libgd/jisx0208.h
+++ /dev/null
@@ -1,1205 +0,0 @@
-#ifndef JISX0208_H
-#define JISX0208_H
-/* This file was derived from "src/VF_Ftype.c" in VFlib2-2.24.2
- by Dr. Kakugawa */
-
-/* JIS -> Unicode mapping table */
-static unsigned short UnicodeTbl[][94] = {
-{ /* category 01 */
-0x0000, 0x3001, 0x3002, 0xFF0C, 0xFF0E, 0x30FB, 0xFF1A, 0xFF1B,
-0xFF1F, 0xFF01, 0x309B, 0x309C, 0x00B4, 0xFF40, 0x00A8, 0xFF3E,
-0xFFE3, 0xFF3F, 0x30FD, 0x30FE, 0x309D, 0x309E, 0x3003, 0x4EDD,
-0x3005, 0x3006, 0x3007, 0x30FC, 0x2015, 0x2010, 0xFF0F, 0xFF3C,
-0xFF5E, 0x2225, 0xFF5C, 0x2026, 0x2025, 0x2018, 0x2019, 0x201C,
-0x201D, 0xFF08, 0xFF09, 0x3014, 0x3015, 0xFF3B, 0xFF3D, 0xFF5B,
-0xFF5D, 0x3008, 0x3009, 0x300A, 0x300B, 0x300C, 0x300D, 0x300E,
-0x300F, 0x3010, 0x3011, 0xFF0B, 0xFF0D, 0x00B1, 0x00D7, 0x00F7,
-0xFF1D, 0x2260, 0xFF1C, 0xFF1E, 0x2266, 0x2267, 0x221E, 0x2234,
-0x2642, 0x2640, 0x00B0, 0x2032, 0x2033, 0x2103, 0xFFE5, 0xFF04,
-0xFFE0, 0xFFE1, 0xFF05, 0xFF03, 0xFF06, 0xFF0A, 0xFF20, 0x00A7,
-0x2606, 0x2605, 0x25CB, 0x25CF, 0x25CE, 0x25C7},
-{ /* category 02 */
-0x25C6, 0x25A1, 0x25A0, 0x25B3, 0x25B2, 0x25BD, 0x25BC, 0x203B,
-0x3012, 0x2192, 0x2190, 0x2191, 0x2193, 0x3013, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x2208, 0x220B, 0x2286, 0x2287, 0x2282, 0x2283, 0x222A,
-0x2229, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x2227, 0x2228, 0xFFE2, 0x21D2, 0x21D4, 0x2200, 0x2203,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x2220, 0x22A5, 0x2312, 0x2202, 0x2207,
-0x2261, 0x2252, 0x226A, 0x226B, 0x221A, 0x223D, 0x221D, 0x2235,
-0x222B, 0x222C, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x212B, 0x2030, 0x266F, 0x266D, 0x266A, 0x2020, 0x2021, /**/
-0x00B6, 0x0000, 0x0000, 0x0000, 0x0000, 0x25EF},
-{ /* category 03 */
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xFF10,
-0xFF11, 0xFF12, 0xFF13, 0xFF14, 0xFF15, 0xFF16, 0xFF17, 0xFF18,
-0xFF19, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0xFF21, 0xFF22, 0xFF23, 0xFF24, 0xFF25, 0xFF26, 0xFF27, 0xFF28,
-0xFF29, 0xFF2A, 0xFF2B, 0xFF2C, 0xFF2D, 0xFF2E, 0xFF2F, 0xFF30,
-0xFF31, 0xFF32, 0xFF33, 0xFF34, 0xFF35, 0xFF36, 0xFF37, 0xFF38,
-0xFF39, 0xFF3A, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0xFF41, 0xFF42, 0xFF43, 0xFF44, 0xFF45, 0xFF46, 0xFF47, 0xFF48,
-0xFF49, 0xFF4A, 0xFF4B, 0xFF4C, 0xFF4D, 0xFF4E, 0xFF4F, 0xFF50,
-0xFF51, 0xFF52, 0xFF53, 0xFF54, 0xFF55, 0xFF56, 0xFF57, 0xFF58,
-0xFF59, 0xFF5A, 0x0000, 0x0000, 0x0000, 0x0000},
-{ /* category 04 */
-0x3041, 0x3042, 0x3043, 0x3044, 0x3045, 0x3046, 0x3047, 0x3048,
-0x3049, 0x304A, 0x304B, 0x304C, 0x304D, 0x304E, 0x304F, 0x3050,
-0x3051, 0x3052, 0x3053, 0x3054, 0x3055, 0x3056, 0x3057, 0x3058,
-0x3059, 0x305A, 0x305B, 0x305C, 0x305D, 0x305E, 0x305F, 0x3060,
-0x3061, 0x3062, 0x3063, 0x3064, 0x3065, 0x3066, 0x3067, 0x3068,
-0x3069, 0x306A, 0x306B, 0x306C, 0x306D, 0x306E, 0x306F, 0x3070,
-0x3071, 0x3072, 0x3073, 0x3074, 0x3075, 0x3076, 0x3077, 0x3078,
-0x3079, 0x307A, 0x307B, 0x307C, 0x307D, 0x307E, 0x307F, 0x3080,
-0x3081, 0x3082, 0x3083, 0x3084, 0x3085, 0x3086, 0x3087, 0x3088,
-0x3089, 0x308A, 0x308B, 0x308C, 0x308D, 0x308E, 0x308F, 0x3090,
-0x3091, 0x3092, 0x3093, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000},
-{ /* category 05 */
-0x30A1, 0x30A2, 0x30A3, 0x30A4, 0x30A5, 0x30A6, 0x30A7, 0x30A8,
-0x30A9, 0x30AA, 0x30AB, 0x30AC, 0x30AD, 0x30AE, 0x30AF, 0x30B0,
-0x30B1, 0x30B2, 0x30B3, 0x30B4, 0x30B5, 0x30B6, 0x30B7, 0x30B8,
-0x30B9, 0x30BA, 0x30BB, 0x30BC, 0x30BD, 0x30BE, 0x30BF, 0x30C0,
-0x30C1, 0x30C2, 0x30C3, 0x30C4, 0x30C5, 0x30C6, 0x30C7, 0x30C8,
-0x30C9, 0x30CA, 0x30CB, 0x30CC, 0x30CD, 0x30CE, 0x30CF, 0x30D0,
-0x30D1, 0x30D2, 0x30D3, 0x30D4, 0x30D5, 0x30D6, 0x30D7, 0x30D8,
-0x30D9, 0x30DA, 0x30DB, 0x30DC, 0x30DD, 0x30DE, 0x30DF, 0x30E0,
-0x30E1, 0x30E2, 0x30E3, 0x30E4, 0x30E5, 0x30E6, 0x30E7, 0x30E8,
-0x30E9, 0x30EA, 0x30EB, 0x30EC, 0x30ED, 0x30EE, 0x30EF, 0x30F0,
-0x30F1, 0x30F2, 0x30F3, 0x30F4, 0x30F5, 0x30F6, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000},
-{ /* category 06 */
-0x0391, 0x0392, 0x0393, 0x0394, 0x0395, 0x0396, 0x0397, 0x0398,
-0x0399, 0x039A, 0x039B, 0x039C, 0x039D, 0x039E, 0x039F, 0x03A0,
-0x03A1, 0x03A3, 0x03A4, 0x03A5, 0x03A6, 0x03A7, 0x03A8, 0x03A9,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x03B1, 0x03B2, 0x03B3, 0x03B4, 0x03B5, 0x03B6, 0x03B7, 0x03B8,
-0x03B9, 0x03BA, 0x03BB, 0x03BC, 0x03BD, 0x03BE, 0x03BF, 0x03C0,
-0x03C1, 0x03C3, 0x03C4, 0x03C5, 0x03C6, 0x03C7, 0x03C8, 0x03C9,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000},
-{ /* category 07 */
-0x0410, 0x0411, 0x0412, 0x0413, 0x0414, 0x0415, 0x0401, 0x0416,
-0x0417, 0x0418, 0x0419, 0x041A, 0x041B, 0x041C, 0x041D, 0x041E,
-0x041F, 0x0420, 0x0421, 0x0422, 0x0423, 0x0424, 0x0425, 0x0426,
-0x0427, 0x0428, 0x0429, 0x042A, 0x042B, 0x042C, 0x042D, 0x042E,
-0x042F, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0430, 0x0431, 0x0432, 0x0433, 0x0434, 0x0435, 0x0451, 0x0436,
-0x0437, 0x0438, 0x0439, 0x043A, 0x043B, 0x043C, 0x043D, 0x043E,
-0x043F, 0x0440, 0x0441, 0x0442, 0x0443, 0x0444, 0x0445, 0x0446,
-0x0447, 0x0448, 0x0449, 0x044A, 0x044B, 0x044C, 0x044D, 0x044E,
-0x044F, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000},
-{ /* category 08 */
-0x2500, 0x2502, 0x250C, 0x2510, 0x2518, 0x2514, 0x251C, 0x252C,
-0x2524, 0x2534, 0x253C, 0x2501, 0x2503, 0x250F, 0x2513, 0x251B,
-0x2517, 0x2523, 0x2533, 0x252B, 0x253B, 0x254B, 0x2520, 0x252F,
-0x2528, 0x2537, 0x253F, 0x251D, 0x2530, 0x2525, 0x2538, 0x2542,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000},
-{ /* category 09 */
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000},
-{ /* category 10 */
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000},
-{ /* category 11 */
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000},
-{ /* category 12 */
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000},
-{ /* category 13 */
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000},
-{ /* category 14 */
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000},
-{ /* category 15 */
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000},
-{ /* category 16 */
-0x4E9C, 0x5516, 0x5A03, 0x963F, 0x54C0, 0x611B, 0x6328, 0x59F6,
-0x9022, 0x8475, 0x831C, 0x7A50, 0x60AA, 0x63E1, 0x6E25, 0x65ED,
-0x8466, 0x82A6, 0x9BF5, 0x6893, 0x5727, 0x65A1, 0x6271, 0x5B9B,
-0x59D0, 0x867B, 0x98F4, 0x7D62, 0x7DBE, 0x9B8E, 0x6216, 0x7C9F,
-0x88B7, 0x5B89, 0x5EB5, 0x6309, 0x6697, 0x6848, 0x95C7, 0x978D,
-0x674F, 0x4EE5, 0x4F0A, 0x4F4D, 0x4F9D, 0x5049, 0x56F2, 0x5937,
-0x59D4, 0x5A01, 0x5C09, 0x60DF, 0x610F, 0x6170, 0x6613, 0x6905,
-0x70BA, 0x754F, 0x7570, 0x79FB, 0x7DAD, 0x7DEF, 0x80C3, 0x840E,
-0x8863, 0x8B02, 0x9055, 0x907A, 0x533B, 0x4E95, 0x4EA5, 0x57DF,
-0x80B2, 0x90C1, 0x78EF, 0x4E00, 0x58F1, 0x6EA2, 0x9038, 0x7A32,
-0x8328, 0x828B, 0x9C2F, 0x5141, 0x5370, 0x54BD, 0x54E1, 0x56E0,
-0x59FB, 0x5F15, 0x98F2, 0x6DEB, 0x80E4, 0x852D},
-{ /* category 17 */
-0x9662, 0x9670, 0x96A0, 0x97FB, 0x540B, 0x53F3, 0x5B87, 0x70CF,
-0x7FBD, 0x8FC2, 0x96E8, 0x536F, 0x9D5C, 0x7ABA, 0x4E11, 0x7893,
-0x81FC, 0x6E26, 0x5618, 0x5504, 0x6B1D, 0x851A, 0x9C3B, 0x59E5,
-0x53A9, 0x6D66, 0x74DC, 0x958F, 0x5642, 0x4E91, 0x904B, 0x96F2,
-0x834F, 0x990C, 0x53E1, 0x55B6, 0x5B30, 0x5F71, 0x6620, 0x66F3,
-0x6804, 0x6C38, 0x6CF3, 0x6D29, 0x745B, 0x76C8, 0x7A4E, 0x9834,
-0x82F1, 0x885B, 0x8A60, 0x92ED, 0x6DB2, 0x75AB, 0x76CA, 0x99C5,
-0x60A6, 0x8B01, 0x8D8A, 0x95B2, 0x698E, 0x53AD, 0x5186, 0x5712,
-0x5830, 0x5944, 0x5BB4, 0x5EF6, 0x6028, 0x63A9, 0x63F4, 0x6CBF,
-0x6F14, 0x708E, 0x7114, 0x7159, 0x71D5, 0x733F, 0x7E01, 0x8276,
-0x82D1, 0x8597, 0x9060, 0x925B, 0x9D1B, 0x5869, 0x65BC, 0x6C5A,
-0x7525, 0x51F9, 0x592E, 0x5965, 0x5F80, 0x5FDC},
-{ /* category 18 */
-0x62BC, 0x65FA, 0x6A2A, 0x6B27, 0x6BB4, 0x738B, 0x7FC1, 0x8956,
-0x9D2C, 0x9D0E, 0x9EC4, 0x5CA1, 0x6C96, 0x837B, 0x5104, 0x5C4B,
-0x61B6, 0x81C6, 0x6876, 0x7261, 0x4E59, 0x4FFA, 0x5378, 0x6069,
-0x6E29, 0x7A4F, 0x97F3, 0x4E0B, 0x5316, 0x4EEE, 0x4F55, 0x4F3D,
-0x4FA1, 0x4F73, 0x52A0, 0x53EF, 0x5609, 0x590F, 0x5AC1, 0x5BB6,
-0x5BE1, 0x79D1, 0x6687, 0x679C, 0x67B6, 0x6B4C, 0x6CB3, 0x706B,
-0x73C2, 0x798D, 0x79BE, 0x7A3C, 0x7B87, 0x82B1, 0x82DB, 0x8304,
-0x8377, 0x83EF, 0x83D3, 0x8766, 0x8AB2, 0x5629, 0x8CA8, 0x8FE6,
-0x904E, 0x971E, 0x868A, 0x4FC4, 0x5CE8, 0x6211, 0x7259, 0x753B,
-0x81E5, 0x82BD, 0x86FE, 0x8CC0, 0x96C5, 0x9913, 0x99D5, 0x4ECB,
-0x4F1A, 0x89E3, 0x56DE, 0x584A, 0x58CA, 0x5EFB, 0x5FEB, 0x602A,
-0x6094, 0x6062, 0x61D0, 0x6212, 0x62D0, 0x6539},
-{ /* category 19 */
-0x9B41, 0x6666, 0x68B0, 0x6D77, 0x7070, 0x754C, 0x7686, 0x7D75,
-0x82A5, 0x87F9, 0x958B, 0x968E, 0x8C9D, 0x51F1, 0x52BE, 0x5916,
-0x54B3, 0x5BB3, 0x5D16, 0x6168, 0x6982, 0x6DAF, 0x788D, 0x84CB,
-0x8857, 0x8A72, 0x93A7, 0x9AB8, 0x6D6C, 0x99A8, 0x86D9, 0x57A3,
-0x67FF, 0x86CE, 0x920E, 0x5283, 0x5687, 0x5404, 0x5ED3, 0x62E1,
-0x64B9, 0x683C, 0x6838, 0x6BBB, 0x7372, 0x78BA, 0x7A6B, 0x899A,
-0x89D2, 0x8D6B, 0x8F03, 0x90ED, 0x95A3, 0x9694, 0x9769, 0x5B66,
-0x5CB3, 0x697D, 0x984D, 0x984E, 0x639B, 0x7B20, 0x6A2B, 0x6A7F,
-0x68B6, 0x9C0D, 0x6F5F, 0x5272, 0x559D, 0x6070, 0x62EC, 0x6D3B,
-0x6E07, 0x6ED1, 0x845B, 0x8910, 0x8F44, 0x4E14, 0x9C39, 0x53F6,
-0x691B, 0x6A3A, 0x9784, 0x682A, 0x515C, 0x7AC3, 0x84B2, 0x91DC,
-0x938C, 0x565B, 0x9D28, 0x6822, 0x8305, 0x8431},
-{ /* category 20 */
-0x7CA5, 0x5208, 0x82C5, 0x74E6, 0x4E7E, 0x4F83, 0x51A0, 0x5BD2,
-0x520A, 0x52D8, 0x52E7, 0x5DFB, 0x559A, 0x582A, 0x59E6, 0x5B8C,
-0x5B98, 0x5BDB, 0x5E72, 0x5E79, 0x60A3, 0x611F, 0x6163, 0x61BE,
-0x63DB, 0x6562, 0x67D1, 0x6853, 0x68FA, 0x6B3E, 0x6B53, 0x6C57,
-0x6F22, 0x6F97, 0x6F45, 0x74B0, 0x7518, 0x76E3, 0x770B, 0x7AFF,
-0x7BA1, 0x7C21, 0x7DE9, 0x7F36, 0x7FF0, 0x809D, 0x8266, 0x839E,
-0x89B3, 0x8ACC, 0x8CAB, 0x9084, 0x9451, 0x9593, 0x9591, 0x95A2,
-0x9665, 0x97D3, 0x9928, 0x8218, 0x4E38, 0x542B, 0x5CB8, 0x5DCC,
-0x73A9, 0x764C, 0x773C, 0x5CA9, 0x7FEB, 0x8D0B, 0x96C1, 0x9811,
-0x9854, 0x9858, 0x4F01, 0x4F0E, 0x5371, 0x559C, 0x5668, 0x57FA,
-0x5947, 0x5B09, 0x5BC4, 0x5C90, 0x5E0C, 0x5E7E, 0x5FCC, 0x63EE,
-0x673A, 0x65D7, 0x65E2, 0x671F, 0x68CB, 0x68C4},
-{ /* category 21 */
-0x6A5F, 0x5E30, 0x6BC5, 0x6C17, 0x6C7D, 0x757F, 0x7948, 0x5B63,
-0x7A00, 0x7D00, 0x5FBD, 0x898F, 0x8A18, 0x8CB4, 0x8D77, 0x8ECC,
-0x8F1D, 0x98E2, 0x9A0E, 0x9B3C, 0x4E80, 0x507D, 0x5100, 0x5993,
-0x5B9C, 0x622F, 0x6280, 0x64EC, 0x6B3A, 0x72A0, 0x7591, 0x7947,
-0x7FA9, 0x87FB, 0x8ABC, 0x8B70, 0x63AC, 0x83CA, 0x97A0, 0x5409,
-0x5403, 0x55AB, 0x6854, 0x6A58, 0x8A70, 0x7827, 0x6775, 0x9ECD,
-0x5374, 0x5BA2, 0x811A, 0x8650, 0x9006, 0x4E18, 0x4E45, 0x4EC7,
-0x4F11, 0x53CA, 0x5438, 0x5BAE, 0x5F13, 0x6025, 0x6551, 0x673D,
-0x6C42, 0x6C72, 0x6CE3, 0x7078, 0x7403, 0x7A76, 0x7AAE, 0x7B08,
-0x7D1A, 0x7CFE, 0x7D66, 0x65E7, 0x725B, 0x53BB, 0x5C45, 0x5DE8,
-0x62D2, 0x62E0, 0x6319, 0x6E20, 0x865A, 0x8A31, 0x8DDD, 0x92F8,
-0x6F01, 0x79A6, 0x9B5A, 0x4EA8, 0x4EAB, 0x4EAC},
-{ /* category 22 */
-0x4F9B, 0x4FA0, 0x50D1, 0x5147, 0x7AF6, 0x5171, 0x51F6, 0x5354,
-0x5321, 0x537F, 0x53EB, 0x55AC, 0x5883, 0x5CE1, 0x5F37, 0x5F4A,
-0x602F, 0x6050, 0x606D, 0x631F, 0x6559, 0x6A4B, 0x6CC1, 0x72C2,
-0x72ED, 0x77EF, 0x80F8, 0x8105, 0x8208, 0x854E, 0x90F7, 0x93E1,
-0x97FF, 0x9957, 0x9A5A, 0x4EF0, 0x51DD, 0x5C2D, 0x6681, 0x696D,
-0x5C40, 0x66F2, 0x6975, 0x7389, 0x6850, 0x7C81, 0x50C5, 0x52E4,
-0x5747, 0x5DFE, 0x9326, 0x65A4, 0x6B23, 0x6B3D, 0x7434, 0x7981,
-0x79BD, 0x7B4B, 0x7DCA, 0x82B9, 0x83CC, 0x887F, 0x895F, 0x8B39,
-0x8FD1, 0x91D1, 0x541F, 0x9280, 0x4E5D, 0x5036, 0x53E5, 0x533A,
-0x72D7, 0x7396, 0x77E9, 0x82E6, 0x8EAF, 0x99C6, 0x99C8, 0x99D2,
-0x5177, 0x611A, 0x865E, 0x55B0, 0x7A7A, 0x5076, 0x5BD3, 0x9047,
-0x9685, 0x4E32, 0x6ADB, 0x91E7, 0x5C51, 0x5C48},
-{ /* category 23 */
-0x6398, 0x7A9F, 0x6C93, 0x9774, 0x8F61, 0x7AAA, 0x718A, 0x9688,
-0x7C82, 0x6817, 0x7E70, 0x6851, 0x936C, 0x52F2, 0x541B, 0x85AB,
-0x8A13, 0x7FA4, 0x8ECD, 0x90E1, 0x5366, 0x8888, 0x7941, 0x4FC2,
-0x50BE, 0x5211, 0x5144, 0x5553, 0x572D, 0x73EA, 0x578B, 0x5951,
-0x5F62, 0x5F84, 0x6075, 0x6176, 0x6167, 0x61A9, 0x63B2, 0x643A,
-0x656C, 0x666F, 0x6842, 0x6E13, 0x7566, 0x7A3D, 0x7CFB, 0x7D4C,
-0x7D99, 0x7E4B, 0x7F6B, 0x830E, 0x834A, 0x86CD, 0x8A08, 0x8A63,
-0x8B66, 0x8EFD, 0x981A, 0x9D8F, 0x82B8, 0x8FCE, 0x9BE8, 0x5287,
-0x621F, 0x6483, 0x6FC0, 0x9699, 0x6841, 0x5091, 0x6B20, 0x6C7A,
-0x6F54, 0x7A74, 0x7D50, 0x8840, 0x8A23, 0x6708, 0x4EF6, 0x5039,
-0x5026, 0x5065, 0x517C, 0x5238, 0x5263, 0x55A7, 0x570F, 0x5805,
-0x5ACC, 0x5EFA, 0x61B2, 0x61F8, 0x62F3, 0x6372},
-{ /* category 24 */
-0x691C, 0x6A29, 0x727D, 0x72AC, 0x732E, 0x7814, 0x786F, 0x7D79,
-0x770C, 0x80A9, 0x898B, 0x8B19, 0x8CE2, 0x8ED2, 0x9063, 0x9375,
-0x967A, 0x9855, 0x9A13, 0x9E78, 0x5143, 0x539F, 0x53B3, 0x5E7B,
-0x5F26, 0x6E1B, 0x6E90, 0x7384, 0x73FE, 0x7D43, 0x8237, 0x8A00,
-0x8AFA, 0x9650, 0x4E4E, 0x500B, 0x53E4, 0x547C, 0x56FA, 0x59D1,
-0x5B64, 0x5DF1, 0x5EAB, 0x5F27, 0x6238, 0x6545, 0x67AF, 0x6E56,
-0x72D0, 0x7CCA, 0x88B4, 0x80A1, 0x80E1, 0x83F0, 0x864E, 0x8A87,
-0x8DE8, 0x9237, 0x96C7, 0x9867, 0x9F13, 0x4E94, 0x4E92, 0x4F0D,
-0x5348, 0x5449, 0x543E, 0x5A2F, 0x5F8C, 0x5FA1, 0x609F, 0x68A7,
-0x6A8E, 0x745A, 0x7881, 0x8A9E, 0x8AA4, 0x8B77, 0x9190, 0x4E5E,
-0x9BC9, 0x4EA4, 0x4F7C, 0x4FAF, 0x5019, 0x5016, 0x5149, 0x516C,
-0x529F, 0x52B9, 0x52FE, 0x539A, 0x53E3, 0x5411},
-{ /* category 25 */
-0x540E, 0x5589, 0x5751, 0x57A2, 0x597D, 0x5B54, 0x5B5D, 0x5B8F,
-0x5DE5, 0x5DE7, 0x5DF7, 0x5E78, 0x5E83, 0x5E9A, 0x5EB7, 0x5F18,
-0x6052, 0x614C, 0x6297, 0x62D8, 0x63A7, 0x653B, 0x6602, 0x6643,
-0x66F4, 0x676D, 0x6821, 0x6897, 0x69CB, 0x6C5F, 0x6D2A, 0x6D69,
-0x6E2F, 0x6E9D, 0x7532, 0x7687, 0x786C, 0x7A3F, 0x7CE0, 0x7D05,
-0x7D18, 0x7D5E, 0x7DB1, 0x8015, 0x8003, 0x80AF, 0x80B1, 0x8154,
-0x818F, 0x822A, 0x8352, 0x884C, 0x8861, 0x8B1B, 0x8CA2, 0x8CFC,
-0x90CA, 0x9175, 0x9271, 0x783F, 0x92FC, 0x95A4, 0x964D, 0x9805,
-0x9999, 0x9AD8, 0x9D3B, 0x525B, 0x52AB, 0x53F7, 0x5408, 0x58D5,
-0x62F7, 0x6FE0, 0x8C6A, 0x8F5F, 0x9EB9, 0x514B, 0x523B, 0x544A,
-0x56FD, 0x7A40, 0x9177, 0x9D60, 0x9ED2, 0x7344, 0x6F09, 0x8170,
-0x7511, 0x5FFD, 0x60DA, 0x9AA8, 0x72DB, 0x8FBC},
-{ /* category 26 */
-0x6B64, 0x9803, 0x4ECA, 0x56F0, 0x5764, 0x58BE, 0x5A5A, 0x6068,
-0x61C7, 0x660F, 0x6606, 0x6839, 0x68B1, 0x6DF7, 0x75D5, 0x7D3A,
-0x826E, 0x9B42, 0x4E9B, 0x4F50, 0x53C9, 0x5506, 0x5D6F, 0x5DE6,
-0x5DEE, 0x67FB, 0x6C99, 0x7473, 0x7802, 0x8A50, 0x9396, 0x88DF,
-0x5750, 0x5EA7, 0x632B, 0x50B5, 0x50AC, 0x518D, 0x6700, 0x54C9,
-0x585E, 0x59BB, 0x5BB0, 0x5F69, 0x624D, 0x63A1, 0x683D, 0x6B73,
-0x6E08, 0x707D, 0x91C7, 0x7280, 0x7815, 0x7826, 0x796D, 0x658E,
-0x7D30, 0x83DC, 0x88C1, 0x8F09, 0x969B, 0x5264, 0x5728, 0x6750,
-0x7F6A, 0x8CA1, 0x51B4, 0x5742, 0x962A, 0x583A, 0x698A, 0x80B4,
-0x54B2, 0x5D0E, 0x57FC, 0x7895, 0x9DFA, 0x4F5C, 0x524A, 0x548B,
-0x643E, 0x6628, 0x6714, 0x67F5, 0x7A84, 0x7B56, 0x7D22, 0x932F,
-0x685C, 0x9BAD, 0x7B39, 0x5319, 0x518A, 0x5237},
-{ /* category 27 */
-0x5BDF, 0x62F6, 0x64AE, 0x64E6, 0x672D, 0x6BBA, 0x85A9, 0x96D1,
-0x7690, 0x9BD6, 0x634C, 0x9306, 0x9BAB, 0x76BF, 0x6652, 0x4E09,
-0x5098, 0x53C2, 0x5C71, 0x60E8, 0x6492, 0x6563, 0x685F, 0x71E6,
-0x73CA, 0x7523, 0x7B97, 0x7E82, 0x8695, 0x8B83, 0x8CDB, 0x9178,
-0x9910, 0x65AC, 0x66AB, 0x6B8B, 0x4ED5, 0x4ED4, 0x4F3A, 0x4F7F,
-0x523A, 0x53F8, 0x53F2, 0x55E3, 0x56DB, 0x58EB, 0x59CB, 0x59C9,
-0x59FF, 0x5B50, 0x5C4D, 0x5E02, 0x5E2B, 0x5FD7, 0x601D, 0x6307,
-0x652F, 0x5B5C, 0x65AF, 0x65BD, 0x65E8, 0x679D, 0x6B62, 0x6B7B,
-0x6C0F, 0x7345, 0x7949, 0x79C1, 0x7CF8, 0x7D19, 0x7D2B, 0x80A2,
-0x8102, 0x81F3, 0x8996, 0x8A5E, 0x8A69, 0x8A66, 0x8A8C, 0x8AEE,
-0x8CC7, 0x8CDC, 0x96CC, 0x98FC, 0x6B6F, 0x4E8B, 0x4F3C, 0x4F8D,
-0x5150, 0x5B57, 0x5BFA, 0x6148, 0x6301, 0x6642},
-{ /* category 28 */
-0x6B21, 0x6ECB, 0x6CBB, 0x723E, 0x74BD, 0x75D4, 0x78C1, 0x793A,
-0x800C, 0x8033, 0x81EA, 0x8494, 0x8F9E, 0x6C50, 0x9E7F, 0x5F0F,
-0x8B58, 0x9D2B, 0x7AFA, 0x8EF8, 0x5B8D, 0x96EB, 0x4E03, 0x53F1,
-0x57F7, 0x5931, 0x5AC9, 0x5BA4, 0x6089, 0x6E7F, 0x6F06, 0x75BE,
-0x8CEA, 0x5B9F, 0x8500, 0x7BE0, 0x5072, 0x67F4, 0x829D, 0x5C61,
-0x854A, 0x7E1E, 0x820E, 0x5199, 0x5C04, 0x6368, 0x8D66, 0x659C,
-0x716E, 0x793E, 0x7D17, 0x8005, 0x8B1D, 0x8ECA, 0x906E, 0x86C7,
-0x90AA, 0x501F, 0x52FA, 0x5C3A, 0x6753, 0x707C, 0x7235, 0x914C,
-0x91C8, 0x932B, 0x82E5, 0x5BC2, 0x5F31, 0x60F9, 0x4E3B, 0x53D6,
-0x5B88, 0x624B, 0x6731, 0x6B8A, 0x72E9, 0x73E0, 0x7A2E, 0x816B,
-0x8DA3, 0x9152, 0x9996, 0x5112, 0x53D7, 0x546A, 0x5BFF, 0x6388,
-0x6A39, 0x7DAC, 0x9700, 0x56DA, 0x53CE, 0x5468},
-{ /* category 29 */
-0x5B97, 0x5C31, 0x5DDE, 0x4FEE, 0x6101, 0x62FE, 0x6D32, 0x79C0,
-0x79CB, 0x7D42, 0x7E4D, 0x7FD2, 0x81ED, 0x821F, 0x8490, 0x8846,
-0x8972, 0x8B90, 0x8E74, 0x8F2F, 0x9031, 0x914B, 0x916C, 0x96C6,
-0x919C, 0x4EC0, 0x4F4F, 0x5145, 0x5341, 0x5F93, 0x620E, 0x67D4,
-0x6C41, 0x6E0B, 0x7363, 0x7E26, 0x91CD, 0x9283, 0x53D4, 0x5919,
-0x5BBF, 0x6DD1, 0x795D, 0x7E2E, 0x7C9B, 0x587E, 0x719F, 0x51FA,
-0x8853, 0x8FF0, 0x4FCA, 0x5CFB, 0x6625, 0x77AC, 0x7AE3, 0x821C,
-0x99FF, 0x51C6, 0x5FAA, 0x65EC, 0x696F, 0x6B89, 0x6DF3, 0x6E96,
-0x6F64, 0x76FE, 0x7D14, 0x5DE1, 0x9075, 0x9187, 0x9806, 0x51E6,
-0x521D, 0x6240, 0x6691, 0x66D9, 0x6E1A, 0x5EB6, 0x7DD2, 0x7F72,
-0x66F8, 0x85AF, 0x85F7, 0x8AF8, 0x52A9, 0x53D9, 0x5973, 0x5E8F,
-0x5F90, 0x6055, 0x92E4, 0x9664, 0x50B7, 0x511F},
-{ /* category 30 */
-0x52DD, 0x5320, 0x5347, 0x53EC, 0x54E8, 0x5546, 0x5531, 0x5617,
-0x5968, 0x59BE, 0x5A3C, 0x5BB5, 0x5C06, 0x5C0F, 0x5C11, 0x5C1A,
-0x5E84, 0x5E8A, 0x5EE0, 0x5F70, 0x627F, 0x6284, 0x62DB, 0x638C,
-0x6377, 0x6607, 0x660C, 0x662D, 0x6676, 0x677E, 0x68A2, 0x6A1F,
-0x6A35, 0x6CBC, 0x6D88, 0x6E09, 0x6E58, 0x713C, 0x7126, 0x7167,
-0x75C7, 0x7701, 0x785D, 0x7901, 0x7965, 0x79F0, 0x7AE0, 0x7B11,
-0x7CA7, 0x7D39, 0x8096, 0x83D6, 0x848B, 0x8549, 0x885D, 0x88F3,
-0x8A1F, 0x8A3C, 0x8A54, 0x8A73, 0x8C61, 0x8CDE, 0x91A4, 0x9266,
-0x937E, 0x9418, 0x969C, 0x9798, 0x4E0A, 0x4E08, 0x4E1E, 0x4E57,
-0x5197, 0x5270, 0x57CE, 0x5834, 0x58CC, 0x5B22, 0x5E38, 0x60C5,
-0x64FE, 0x6761, 0x6756, 0x6D44, 0x72B6, 0x7573, 0x7A63, 0x84B8,
-0x8B72, 0x91B8, 0x9320, 0x5631, 0x57F4, 0x98FE},
-{ /* category 31 */
-0x62ED, 0x690D, 0x6B96, 0x71ED, 0x7E54, 0x8077, 0x8272, 0x89E6,
-0x98DF, 0x8755, 0x8FB1, 0x5C3B, 0x4F38, 0x4FE1, 0x4FB5, 0x5507,
-0x5A20, 0x5BDD, 0x5BE9, 0x5FC3, 0x614E, 0x632F, 0x65B0, 0x664B,
-0x68EE, 0x699B, 0x6D78, 0x6DF1, 0x7533, 0x75B9, 0x771F, 0x795E,
-0x79E6, 0x7D33, 0x81E3, 0x82AF, 0x85AA, 0x89AA, 0x8A3A, 0x8EAB,
-0x8F9B, 0x9032, 0x91DD, 0x9707, 0x4EBA, 0x4EC1, 0x5203, 0x5875,
-0x58EC, 0x5C0B, 0x751A, 0x5C3D, 0x814E, 0x8A0A, 0x8FC5, 0x9663,
-0x976D, 0x7B25, 0x8ACF, 0x9808, 0x9162, 0x56F3, 0x53A8, 0x9017,
-0x5439, 0x5782, 0x5E25, 0x63A8, 0x6C34, 0x708A, 0x7761, 0x7C8B,
-0x7FE0, 0x8870, 0x9042, 0x9154, 0x9310, 0x9318, 0x968F, 0x745E,
-0x9AC4, 0x5D07, 0x5D69, 0x6570, 0x67A2, 0x8DA8, 0x96DB, 0x636E,
-0x6749, 0x6919, 0x83C5, 0x9817, 0x96C0, 0x88FE},
-{ /* category 32 */
-0x6F84, 0x647A, 0x5BF8, 0x4E16, 0x702C, 0x755D, 0x662F, 0x51C4,
-0x5236, 0x52E2, 0x59D3, 0x5F81, 0x6027, 0x6210, 0x653F, 0x6574,
-0x661F, 0x6674, 0x68F2, 0x6816, 0x6B63, 0x6E05, 0x7272, 0x751F,
-0x76DB, 0x7CBE, 0x8056, 0x58F0, 0x88FD, 0x897F, 0x8AA0, 0x8A93,
-0x8ACB, 0x901D, 0x9192, 0x9752, 0x9759, 0x6589, 0x7A0E, 0x8106,
-0x96BB, 0x5E2D, 0x60DC, 0x621A, 0x65A5, 0x6614, 0x6790, 0x77F3,
-0x7A4D, 0x7C4D, 0x7E3E, 0x810A, 0x8CAC, 0x8D64, 0x8DE1, 0x8E5F,
-0x78A9, 0x5207, 0x62D9, 0x63A5, 0x6442, 0x6298, 0x8A2D, 0x7A83,
-0x7BC0, 0x8AAC, 0x96EA, 0x7D76, 0x820C, 0x8749, 0x4ED9, 0x5148,
-0x5343, 0x5360, 0x5BA3, 0x5C02, 0x5C16, 0x5DDD, 0x6226, 0x6247,
-0x64B0, 0x6813, 0x6834, 0x6CC9, 0x6D45, 0x6D17, 0x67D3, 0x6F5C,
-0x714E, 0x717D, 0x65CB, 0x7A7F, 0x7BAD, 0x7DDA},
-{ /* category 33 */
-0x7E4A, 0x7FA8, 0x817A, 0x821B, 0x8239, 0x85A6, 0x8A6E, 0x8CCE,
-0x8DF5, 0x9078, 0x9077, 0x92AD, 0x9291, 0x9583, 0x9BAE, 0x524D,
-0x5584, 0x6F38, 0x7136, 0x5168, 0x7985, 0x7E55, 0x81B3, 0x7CCE,
-0x564C, 0x5851, 0x5CA8, 0x63AA, 0x66FE, 0x66FD, 0x695A, 0x72D9,
-0x758F, 0x758E, 0x790E, 0x7956, 0x79DF, 0x7C97, 0x7D20, 0x7D44,
-0x8607, 0x8A34, 0x963B, 0x9061, 0x9F20, 0x50E7, 0x5275, 0x53CC,
-0x53E2, 0x5009, 0x55AA, 0x58EE, 0x594F, 0x723D, 0x5B8B, 0x5C64,
-0x531D, 0x60E3, 0x60F3, 0x635C, 0x6383, 0x633F, 0x63BB, 0x64CD,
-0x65E9, 0x66F9, 0x5DE3, 0x69CD, 0x69FD, 0x6F15, 0x71E5, 0x4E89,
-0x75E9, 0x76F8, 0x7A93, 0x7CDF, 0x7DCF, 0x7D9C, 0x8061, 0x8349,
-0x8358, 0x846C, 0x84BC, 0x85FB, 0x88C5, 0x8D70, 0x9001, 0x906D,
-0x9397, 0x971C, 0x9A12, 0x50CF, 0x5897, 0x618E},
-{ /* category 34 */
-0x81D3, 0x8535, 0x8D08, 0x9020, 0x4FC3, 0x5074, 0x5247, 0x5373,
-0x606F, 0x6349, 0x675F, 0x6E2C, 0x8DB3, 0x901F, 0x4FD7, 0x5C5E,
-0x8CCA, 0x65CF, 0x7D9A, 0x5352, 0x8896, 0x5176, 0x63C3, 0x5B58,
-0x5B6B, 0x5C0A, 0x640D, 0x6751, 0x905C, 0x4ED6, 0x591A, 0x592A,
-0x6C70, 0x8A51, 0x553E, 0x5815, 0x59A5, 0x60F0, 0x6253, 0x67C1,
-0x8235, 0x6955, 0x9640, 0x99C4, 0x9A28, 0x4F53, 0x5806, 0x5BFE,
-0x8010, 0x5CB1, 0x5E2F, 0x5F85, 0x6020, 0x614B, 0x6234, 0x66FF,
-0x6CF0, 0x6EDE, 0x80CE, 0x817F, 0x82D4, 0x888B, 0x8CB8, 0x9000,
-0x902E, 0x968A, 0x9EDB, 0x9BDB, 0x4EE3, 0x53F0, 0x5927, 0x7B2C,
-0x918D, 0x984C, 0x9DF9, 0x6EDD, 0x7027, 0x5353, 0x5544, 0x5B85,
-0x6258, 0x629E, 0x62D3, 0x6CA2, 0x6FEF, 0x7422, 0x8A17, 0x9438,
-0x6FC1, 0x8AFE, 0x8338, 0x51E7, 0x86F8, 0x53EA},
-{ /* category 35 */
-0x53E9, 0x4F46, 0x9054, 0x8FB0, 0x596A, 0x8131, 0x5DFD, 0x7AEA,
-0x8FBF, 0x68DA, 0x8C37, 0x72F8, 0x9C48, 0x6A3D, 0x8AB0, 0x4E39,
-0x5358, 0x5606, 0x5766, 0x62C5, 0x63A2, 0x65E6, 0x6B4E, 0x6DE1,
-0x6E5B, 0x70AD, 0x77ED, 0x7AEF, 0x7BAA, 0x7DBB, 0x803D, 0x80C6,
-0x86CB, 0x8A95, 0x935B, 0x56E3, 0x58C7, 0x5F3E, 0x65AD, 0x6696,
-0x6A80, 0x6BB5, 0x7537, 0x8AC7, 0x5024, 0x77E5, 0x5730, 0x5F1B,
-0x6065, 0x667A, 0x6C60, 0x75F4, 0x7A1A, 0x7F6E, 0x81F4, 0x8718,
-0x9045, 0x99B3, 0x7BC9, 0x755C, 0x7AF9, 0x7B51, 0x84C4, 0x9010,
-0x79E9, 0x7A92, 0x8336, 0x5AE1, 0x7740, 0x4E2D, 0x4EF2, 0x5B99,
-0x5FE0, 0x62BD, 0x663C, 0x67F1, 0x6CE8, 0x866B, 0x8877, 0x8A3B,
-0x914E, 0x92F3, 0x99D0, 0x6A17, 0x7026, 0x732A, 0x82E7, 0x8457,
-0x8CAF, 0x4E01, 0x5146, 0x51CB, 0x558B, 0x5BF5},
-{ /* category 36 */
-0x5E16, 0x5E33, 0x5E81, 0x5F14, 0x5F35, 0x5F6B, 0x5FB4, 0x61F2,
-0x6311, 0x66A2, 0x671D, 0x6F6E, 0x7252, 0x753A, 0x773A, 0x8074,
-0x8139, 0x8178, 0x8776, 0x8ABF, 0x8ADC, 0x8D85, 0x8DF3, 0x929A,
-0x9577, 0x9802, 0x9CE5, 0x52C5, 0x6357, 0x76F4, 0x6715, 0x6C88,
-0x73CD, 0x8CC3, 0x93AE, 0x9673, 0x6D25, 0x589C, 0x690E, 0x69CC,
-0x8FFD, 0x939A, 0x75DB, 0x901A, 0x585A, 0x6802, 0x63B4, 0x69FB,
-0x4F43, 0x6F2C, 0x67D8, 0x8FBB, 0x8526, 0x7DB4, 0x9354, 0x693F,
-0x6F70, 0x576A, 0x58F7, 0x5B2C, 0x7D2C, 0x722A, 0x540A, 0x91E3,
-0x9DB4, 0x4EAD, 0x4F4E, 0x505C, 0x5075, 0x5243, 0x8C9E, 0x5448,
-0x5824, 0x5B9A, 0x5E1D, 0x5E95, 0x5EAD, 0x5EF7, 0x5F1F, 0x608C,
-0x62B5, 0x633A, 0x63D0, 0x68AF, 0x6C40, 0x7887, 0x798E, 0x7A0B,
-0x7DE0, 0x8247, 0x8A02, 0x8AE6, 0x8E44, 0x9013},
-{ /* category 37 */
-0x90B8, 0x912D, 0x91D8, 0x9F0E, 0x6CE5, 0x6458, 0x64E2, 0x6575,
-0x6EF4, 0x7684, 0x7B1B, 0x9069, 0x93D1, 0x6EBA, 0x54F2, 0x5FB9,
-0x64A4, 0x8F4D, 0x8FED, 0x9244, 0x5178, 0x586B, 0x5929, 0x5C55,
-0x5E97, 0x6DFB, 0x7E8F, 0x751C, 0x8CBC, 0x8EE2, 0x985B, 0x70B9,
-0x4F1D, 0x6BBF, 0x6FB1, 0x7530, 0x96FB, 0x514E, 0x5410, 0x5835,
-0x5857, 0x59AC, 0x5C60, 0x5F92, 0x6597, 0x675C, 0x6E21, 0x767B,
-0x83DF, 0x8CED, 0x9014, 0x90FD, 0x934D, 0x7825, 0x783A, 0x52AA,
-0x5EA6, 0x571F, 0x5974, 0x6012, 0x5012, 0x515A, 0x51AC, 0x51CD,
-0x5200, 0x5510, 0x5854, 0x5858, 0x5957, 0x5B95, 0x5CF6, 0x5D8B,
-0x60BC, 0x6295, 0x642D, 0x6771, 0x6843, 0x68BC, 0x68DF, 0x76D7,
-0x6DD8, 0x6E6F, 0x6D9B, 0x706F, 0x71C8, 0x5F53, 0x75D8, 0x7977,
-0x7B49, 0x7B54, 0x7B52, 0x7CD6, 0x7D71, 0x5230},
-{ /* category 38 */
-0x8463, 0x8569, 0x85E4, 0x8A0E, 0x8B04, 0x8C46, 0x8E0F, 0x9003,
-0x900F, 0x9419, 0x9676, 0x982D, 0x9A30, 0x95D8, 0x50CD, 0x52D5,
-0x540C, 0x5802, 0x5C0E, 0x61A7, 0x649E, 0x6D1E, 0x77B3, 0x7AE5,
-0x80F4, 0x8404, 0x9053, 0x9285, 0x5CE0, 0x9D07, 0x533F, 0x5F97,
-0x5FB3, 0x6D9C, 0x7279, 0x7763, 0x79BF, 0x7BE4, 0x6BD2, 0x72EC,
-0x8AAD, 0x6803, 0x6A61, 0x51F8, 0x7A81, 0x6934, 0x5C4A, 0x9CF6,
-0x82EB, 0x5BC5, 0x9149, 0x701E, 0x5678, 0x5C6F, 0x60C7, 0x6566,
-0x6C8C, 0x8C5A, 0x9041, 0x9813, 0x5451, 0x66C7, 0x920D, 0x5948,
-0x90A3, 0x5185, 0x4E4D, 0x51EA, 0x8599, 0x8B0E, 0x7058, 0x637A,
-0x934B, 0x6962, 0x99B4, 0x7E04, 0x7577, 0x5357, 0x6960, 0x8EDF,
-0x96E3, 0x6C5D, 0x4E8C, 0x5C3C, 0x5F10, 0x8FE9, 0x5302, 0x8CD1,
-0x8089, 0x8679, 0x5EFF, 0x65E5, 0x4E73, 0x5165},
-{ /* category 39 */
-0x5982, 0x5C3F, 0x97EE, 0x4EFB, 0x598A, 0x5FCD, 0x8A8D, 0x6FE1,
-0x79B0, 0x7962, 0x5BE7, 0x8471, 0x732B, 0x71B1, 0x5E74, 0x5FF5,
-0x637B, 0x649A, 0x71C3, 0x7C98, 0x4E43, 0x5EFC, 0x4E4B, 0x57DC,
-0x56A2, 0x60A9, 0x6FC3, 0x7D0D, 0x80FD, 0x8133, 0x81BF, 0x8FB2,
-0x8997, 0x86A4, 0x5DF4, 0x628A, 0x64AD, 0x8987, 0x6777, 0x6CE2,
-0x6D3E, 0x7436, 0x7834, 0x5A46, 0x7F75, 0x82AD, 0x99AC, 0x4FF3,
-0x5EC3, 0x62DD, 0x6392, 0x6557, 0x676F, 0x76C3, 0x724C, 0x80CC,
-0x80BA, 0x8F29, 0x914D, 0x500D, 0x57F9, 0x5A92, 0x6885, 0x6973,
-0x7164, 0x72FD, 0x8CB7, 0x58F2, 0x8CE0, 0x966A, 0x9019, 0x877F,
-0x79E4, 0x77E7, 0x8429, 0x4F2F, 0x5265, 0x535A, 0x62CD, 0x67CF,
-0x6CCA, 0x767D, 0x7B94, 0x7C95, 0x8236, 0x8584, 0x8FEB, 0x66DD,
-0x6F20, 0x7206, 0x7E1B, 0x83AB, 0x99C1, 0x9EA6},
-{ /* category 40 */
-0x51FD, 0x7BB1, 0x7872, 0x7BB8, 0x8087, 0x7B48, 0x6AE8, 0x5E61,
-0x808C, 0x7551, 0x7560, 0x516B, 0x9262, 0x6E8C, 0x767A, 0x9197,
-0x9AEA, 0x4F10, 0x7F70, 0x629C, 0x7B4F, 0x95A5, 0x9CE9, 0x567A,
-0x5859, 0x86E4, 0x96BC, 0x4F34, 0x5224, 0x534A, 0x53CD, 0x53DB,
-0x5E06, 0x642C, 0x6591, 0x677F, 0x6C3E, 0x6C4E, 0x7248, 0x72AF,
-0x73ED, 0x7554, 0x7E41, 0x822C, 0x85E9, 0x8CA9, 0x7BC4, 0x91C6,
-0x7169, 0x9812, 0x98EF, 0x633D, 0x6669, 0x756A, 0x76E4, 0x78D0,
-0x8543, 0x86EE, 0x532A, 0x5351, 0x5426, 0x5983, 0x5E87, 0x5F7C,
-0x60B2, 0x6249, 0x6279, 0x62AB, 0x6590, 0x6BD4, 0x6CCC, 0x75B2,
-0x76AE, 0x7891, 0x79D8, 0x7DCB, 0x7F77, 0x80A5, 0x88AB, 0x8AB9,
-0x8CBB, 0x907F, 0x975E, 0x98DB, 0x6A0B, 0x7C38, 0x5099, 0x5C3E,
-0x5FAE, 0x6787, 0x6BD8, 0x7435, 0x7709, 0x7F8E},
-{ /* category 41 */
-0x9F3B, 0x67CA, 0x7A17, 0x5339, 0x758B, 0x9AED, 0x5F66, 0x819D,
-0x83F1, 0x8098, 0x5F3C, 0x5FC5, 0x7562, 0x7B46, 0x903C, 0x6867,
-0x59EB, 0x5A9B, 0x7D10, 0x767E, 0x8B2C, 0x4FF5, 0x5F6A, 0x6A19,
-0x6C37, 0x6F02, 0x74E2, 0x7968, 0x8868, 0x8A55, 0x8C79, 0x5EDF,
-0x63CF, 0x75C5, 0x79D2, 0x82D7, 0x9328, 0x92F2, 0x849C, 0x86ED,
-0x9C2D, 0x54C1, 0x5F6C, 0x658C, 0x6D5C, 0x7015, 0x8CA7, 0x8CD3,
-0x983B, 0x654F, 0x74F6, 0x4E0D, 0x4ED8, 0x57E0, 0x592B, 0x5A66,
-0x5BCC, 0x51A8, 0x5E03, 0x5E9C, 0x6016, 0x6276, 0x6577, 0x65A7,
-0x666E, 0x6D6E, 0x7236, 0x7B26, 0x8150, 0x819A, 0x8299, 0x8B5C,
-0x8CA0, 0x8CE6, 0x8D74, 0x961C, 0x9644, 0x4FAE, 0x64AB, 0x6B66,
-0x821E, 0x8461, 0x856A, 0x90E8, 0x5C01, 0x6953, 0x98A8, 0x847A,
-0x8557, 0x4F0F, 0x526F, 0x5FA9, 0x5E45, 0x670D},
-{ /* category 42 */
-0x798F, 0x8179, 0x8907, 0x8986, 0x6DF5, 0x5F17, 0x6255, 0x6CB8,
-0x4ECF, 0x7269, 0x9B92, 0x5206, 0x543B, 0x5674, 0x58B3, 0x61A4,
-0x626E, 0x711A, 0x596E, 0x7C89, 0x7CDE, 0x7D1B, 0x96F0, 0x6587,
-0x805E, 0x4E19, 0x4F75, 0x5175, 0x5840, 0x5E63, 0x5E73, 0x5F0A,
-0x67C4, 0x4E26, 0x853D, 0x9589, 0x965B, 0x7C73, 0x9801, 0x50FB,
-0x58C1, 0x7656, 0x78A7, 0x5225, 0x77A5, 0x8511, 0x7B86, 0x504F,
-0x5909, 0x7247, 0x7BC7, 0x7DE8, 0x8FBA, 0x8FD4, 0x904D, 0x4FBF,
-0x52C9, 0x5A29, 0x5F01, 0x97AD, 0x4FDD, 0x8217, 0x92EA, 0x5703,
-0x6355, 0x6B69, 0x752B, 0x88DC, 0x8F14, 0x7A42, 0x52DF, 0x5893,
-0x6155, 0x620A, 0x66AE, 0x6BCD, 0x7C3F, 0x83E9, 0x5023, 0x4FF8,
-0x5305, 0x5446, 0x5831, 0x5949, 0x5B9D, 0x5CF0, 0x5CEF, 0x5D29,
-0x5E96, 0x62B1, 0x6367, 0x653E, 0x65B9, 0x670B},
-{ /* category 43 */
-0x6CD5, 0x6CE1, 0x70F9, 0x7832, 0x7E2B, 0x80DE, 0x82B3, 0x840C,
-0x84EC, 0x8702, 0x8912, 0x8A2A, 0x8C4A, 0x90A6, 0x92D2, 0x98FD,
-0x9CF3, 0x9D6C, 0x4E4F, 0x4EA1, 0x508D, 0x5256, 0x574A, 0x59A8,
-0x5E3D, 0x5FD8, 0x5FD9, 0x623F, 0x66B4, 0x671B, 0x67D0, 0x68D2,
-0x5192, 0x7D21, 0x80AA, 0x81A8, 0x8B00, 0x8C8C, 0x8CBF, 0x927E,
-0x9632, 0x5420, 0x982C, 0x5317, 0x50D5, 0x535C, 0x58A8, 0x64B2,
-0x6734, 0x7267, 0x7766, 0x7A46, 0x91E6, 0x52C3, 0x6CA1, 0x6B86,
-0x5800, 0x5E4C, 0x5954, 0x672C, 0x7FFB, 0x51E1, 0x76C6, 0x6469,
-0x78E8, 0x9B54, 0x9EBB, 0x57CB, 0x59B9, 0x6627, 0x679A, 0x6BCE,
-0x54E9, 0x69D9, 0x5E55, 0x819C, 0x6795, 0x9BAA, 0x67FE, 0x9C52,
-0x685D, 0x4EA6, 0x4FE3, 0x53C8, 0x62B9, 0x672B, 0x6CAB, 0x8FC4,
-0x4FAD, 0x7E6D, 0x9EBF, 0x4E07, 0x6162, 0x6E80},
-{ /* category 44 */
-0x6F2B, 0x8513, 0x5473, 0x672A, 0x9B45, 0x5DF3, 0x7B95, 0x5CAC,
-0x5BC6, 0x871C, 0x6E4A, 0x84D1, 0x7A14, 0x8108, 0x5999, 0x7C8D,
-0x6C11, 0x7720, 0x52D9, 0x5922, 0x7121, 0x725F, 0x77DB, 0x9727,
-0x9D61, 0x690B, 0x5A7F, 0x5A18, 0x51A5, 0x540D, 0x547D, 0x660E,
-0x76DF, 0x8FF7, 0x9298, 0x9CF4, 0x59EA, 0x725D, 0x6EC5, 0x514D,
-0x68C9, 0x7DBF, 0x7DEC, 0x9762, 0x9EBA, 0x6478, 0x6A21, 0x8302,
-0x5984, 0x5B5F, 0x6BDB, 0x731B, 0x76F2, 0x7DB2, 0x8017, 0x8499,
-0x5132, 0x6728, 0x9ED9, 0x76EE, 0x6762, 0x52FF, 0x9905, 0x5C24,
-0x623B, 0x7C7E, 0x8CB0, 0x554F, 0x60B6, 0x7D0B, 0x9580, 0x5301,
-0x4E5F, 0x51B6, 0x591C, 0x723A, 0x8036, 0x91CE, 0x5F25, 0x77E2,
-0x5384, 0x5F79, 0x7D04, 0x85AC, 0x8A33, 0x8E8D, 0x9756, 0x67F3,
-0x85AE, 0x9453, 0x6109, 0x6108, 0x6CB9, 0x7652},
-{ /* category 45 */
-0x8AED, 0x8F38, 0x552F, 0x4F51, 0x512A, 0x52C7, 0x53CB, 0x5BA5,
-0x5E7D, 0x60A0, 0x6182, 0x63D6, 0x6709, 0x67DA, 0x6E67, 0x6D8C,
-0x7336, 0x7337, 0x7531, 0x7950, 0x88D5, 0x8A98, 0x904A, 0x9091,
-0x90F5, 0x96C4, 0x878D, 0x5915, 0x4E88, 0x4F59, 0x4E0E, 0x8A89,
-0x8F3F, 0x9810, 0x50AD, 0x5E7C, 0x5996, 0x5BB9, 0x5EB8, 0x63DA,
-0x63FA, 0x64C1, 0x66DC, 0x694A, 0x69D8, 0x6D0B, 0x6EB6, 0x7194,
-0x7528, 0x7AAF, 0x7F8A, 0x8000, 0x8449, 0x84C9, 0x8981, 0x8B21,
-0x8E0A, 0x9065, 0x967D, 0x990A, 0x617E, 0x6291, 0x6B32, 0x6C83,
-0x6D74, 0x7FCC, 0x7FFC, 0x6DC0, 0x7F85, 0x87BA, 0x88F8, 0x6765,
-0x83B1, 0x983C, 0x96F7, 0x6D1B, 0x7D61, 0x843D, 0x916A, 0x4E71,
-0x5375, 0x5D50, 0x6B04, 0x6FEB, 0x85CD, 0x862D, 0x89A7, 0x5229,
-0x540F, 0x5C65, 0x674E, 0x68A8, 0x7406, 0x7483},
-{ /* category 46 */
-0x75E2, 0x88CF, 0x88E1, 0x91CC, 0x96E2, 0x9678, 0x5F8B, 0x7387,
-0x7ACB, 0x844E, 0x63A0, 0x7565, 0x5289, 0x6D41, 0x6E9C, 0x7409,
-0x7559, 0x786B, 0x7C92, 0x9686, 0x7ADC, 0x9F8D, 0x4FB6, 0x616E,
-0x65C5, 0x865C, 0x4E86, 0x4EAE, 0x50DA, 0x4E21, 0x51CC, 0x5BEE,
-0x6599, 0x6881, 0x6DBC, 0x731F, 0x7642, 0x77AD, 0x7A1C, 0x7CE7,
-0x826F, 0x8AD2, 0x907C, 0x91CF, 0x9675, 0x9818, 0x529B, 0x7DD1,
-0x502B, 0x5398, 0x6797, 0x6DCB, 0x71D0, 0x7433, 0x81E8, 0x8F2A,
-0x96A3, 0x9C57, 0x9E9F, 0x7460, 0x5841, 0x6D99, 0x7D2F, 0x985E,
-0x4EE4, 0x4F36, 0x4F8B, 0x51B7, 0x52B1, 0x5DBA, 0x601C, 0x73B2,
-0x793C, 0x82D3, 0x9234, 0x96B7, 0x96F6, 0x970A, 0x9E97, 0x9F62,
-0x66A6, 0x6B74, 0x5217, 0x52A3, 0x70C8, 0x88C2, 0x5EC9, 0x604B,
-0x6190, 0x6F23, 0x7149, 0x7C3E, 0x7DF4, 0x806F},
-{ /* category 47 */
-0x84EE, 0x9023, 0x932C, 0x5442, 0x9B6F, 0x6AD3, 0x7089, 0x8CC2,
-0x8DEF, 0x9732, 0x52B4, 0x5A41, 0x5ECA, 0x5F04, 0x6717, 0x697C,
-0x6994, 0x6D6A, 0x6F0F, 0x7262, 0x72FC, 0x7BED, 0x8001, 0x807E,
-0x874B, 0x90CE, 0x516D, 0x9E93, 0x7984, 0x808B, 0x9332, 0x8AD6,
-0x502D, 0x548C, 0x8A71, 0x6B6A, 0x8CC4, 0x8107, 0x60D1, 0x67A0,
-0x9DF2, 0x4E99, 0x4E98, 0x9C10, 0x8A6B, 0x85C1, 0x8568, 0x6900,
-0x6E7E, 0x7897, 0x8155, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000},
-{ /* category 48 */
-0x5F0C, 0x4E10, 0x4E15, 0x4E2A, 0x4E31, 0x4E36, 0x4E3C, 0x4E3F,
-0x4E42, 0x4E56, 0x4E58, 0x4E82, 0x4E85, 0x8C6B, 0x4E8A, 0x8212,
-0x5F0D, 0x4E8E, 0x4E9E, 0x4E9F, 0x4EA0, 0x4EA2, 0x4EB0, 0x4EB3,
-0x4EB6, 0x4ECE, 0x4ECD, 0x4EC4, 0x4EC6, 0x4EC2, 0x4ED7, 0x4EDE,
-0x4EED, 0x4EDF, 0x4EF7, 0x4F09, 0x4F5A, 0x4F30, 0x4F5B, 0x4F5D,
-0x4F57, 0x4F47, 0x4F76, 0x4F88, 0x4F8F, 0x4F98, 0x4F7B, 0x4F69,
-0x4F70, 0x4F91, 0x4F6F, 0x4F86, 0x4F96, 0x5118, 0x4FD4, 0x4FDF,
-0x4FCE, 0x4FD8, 0x4FDB, 0x4FD1, 0x4FDA, 0x4FD0, 0x4FE4, 0x4FE5,
-0x501A, 0x5028, 0x5014, 0x502A, 0x5025, 0x5005, 0x4F1C, 0x4FF6,
-0x5021, 0x5029, 0x502C, 0x4FFE, 0x4FEF, 0x5011, 0x5006, 0x5043,
-0x5047, 0x6703, 0x5055, 0x5050, 0x5048, 0x505A, 0x5056, 0x506C,
-0x5078, 0x5080, 0x509A, 0x5085, 0x50B4, 0x50B2},
-{ /* category 49 */
-0x50C9, 0x50CA, 0x50B3, 0x50C2, 0x50D6, 0x50DE, 0x50E5, 0x50ED,
-0x50E3, 0x50EE, 0x50F9, 0x50F5, 0x5109, 0x5101, 0x5102, 0x5116,
-0x5115, 0x5114, 0x511A, 0x5121, 0x513A, 0x5137, 0x513C, 0x513B,
-0x513F, 0x5140, 0x5152, 0x514C, 0x5154, 0x5162, 0x7AF8, 0x5169,
-0x516A, 0x516E, 0x5180, 0x5182, 0x56D8, 0x518C, 0x5189, 0x518F,
-0x5191, 0x5193, 0x5195, 0x5196, 0x51A4, 0x51A6, 0x51A2, 0x51A9,
-0x51AA, 0x51AB, 0x51B3, 0x51B1, 0x51B2, 0x51B0, 0x51B5, 0x51BD,
-0x51C5, 0x51C9, 0x51DB, 0x51E0, 0x8655, 0x51E9, 0x51ED, 0x51F0,
-0x51F5, 0x51FE, 0x5204, 0x520B, 0x5214, 0x520E, 0x5227, 0x522A,
-0x522E, 0x5233, 0x5239, 0x524F, 0x5244, 0x524B, 0x524C, 0x525E,
-0x5254, 0x526A, 0x5274, 0x5269, 0x5273, 0x527F, 0x527D, 0x528D,
-0x5294, 0x5292, 0x5271, 0x5288, 0x5291, 0x8FA8},
-{ /* category 50 */
-0x8FA7, 0x52AC, 0x52AD, 0x52BC, 0x52B5, 0x52C1, 0x52CD, 0x52D7,
-0x52DE, 0x52E3, 0x52E6, 0x98ED, 0x52E0, 0x52F3, 0x52F5, 0x52F8,
-0x52F9, 0x5306, 0x5308, 0x7538, 0x530D, 0x5310, 0x530F, 0x5315,
-0x531A, 0x5323, 0x532F, 0x5331, 0x5333, 0x5338, 0x5340, 0x5346,
-0x5345, 0x4E17, 0x5349, 0x534D, 0x51D6, 0x535E, 0x5369, 0x536E,
-0x5918, 0x537B, 0x5377, 0x5382, 0x5396, 0x53A0, 0x53A6, 0x53A5,
-0x53AE, 0x53B0, 0x53B6, 0x53C3, 0x7C12, 0x96D9, 0x53DF, 0x66FC,
-0x71EE, 0x53EE, 0x53E8, 0x53ED, 0x53FA, 0x5401, 0x543D, 0x5440,
-0x542C, 0x542D, 0x543C, 0x542E, 0x5436, 0x5429, 0x541D, 0x544E,
-0x548F, 0x5475, 0x548E, 0x545F, 0x5471, 0x5477, 0x5470, 0x5492,
-0x547B, 0x5480, 0x5476, 0x5484, 0x5490, 0x5486, 0x54C7, 0x54A2,
-0x54B8, 0x54A5, 0x54AC, 0x54C4, 0x54C8, 0x54A8},
-{ /* category 51 */
-0x54AB, 0x54C2, 0x54A4, 0x54BE, 0x54BC, 0x54D8, 0x54E5, 0x54E6,
-0x550F, 0x5514, 0x54FD, 0x54EE, 0x54ED, 0x54FA, 0x54E2, 0x5539,
-0x5540, 0x5563, 0x554C, 0x552E, 0x555C, 0x5545, 0x5556, 0x5557,
-0x5538, 0x5533, 0x555D, 0x5599, 0x5580, 0x54AF, 0x558A, 0x559F,
-0x557B, 0x557E, 0x5598, 0x559E, 0x55AE, 0x557C, 0x5583, 0x55A9,
-0x5587, 0x55A8, 0x55DA, 0x55C5, 0x55DF, 0x55C4, 0x55DC, 0x55E4,
-0x55D4, 0x5614, 0x55F7, 0x5616, 0x55FE, 0x55FD, 0x561B, 0x55F9,
-0x564E, 0x5650, 0x71DF, 0x5634, 0x5636, 0x5632, 0x5638, 0x566B,
-0x5664, 0x562F, 0x566C, 0x566A, 0x5686, 0x5680, 0x568A, 0x56A0,
-0x5694, 0x568F, 0x56A5, 0x56AE, 0x56B6, 0x56B4, 0x56C2, 0x56BC,
-0x56C1, 0x56C3, 0x56C0, 0x56C8, 0x56CE, 0x56D1, 0x56D3, 0x56D7,
-0x56EE, 0x56F9, 0x5700, 0x56FF, 0x5704, 0x5709},
-{ /* category 52 */
-0x5708, 0x570B, 0x570D, 0x5713, 0x5718, 0x5716, 0x55C7, 0x571C,
-0x5726, 0x5737, 0x5738, 0x574E, 0x573B, 0x5740, 0x574F, 0x5769,
-0x57C0, 0x5788, 0x5761, 0x577F, 0x5789, 0x5793, 0x57A0, 0x57B3,
-0x57A4, 0x57AA, 0x57B0, 0x57C3, 0x57C6, 0x57D4, 0x57D2, 0x57D3,
-0x580A, 0x57D6, 0x57E3, 0x580B, 0x5819, 0x581D, 0x5872, 0x5821,
-0x5862, 0x584B, 0x5870, 0x6BC0, 0x5852, 0x583D, 0x5879, 0x5885,
-0x58B9, 0x589F, 0x58AB, 0x58BA, 0x58DE, 0x58BB, 0x58B8, 0x58AE,
-0x58C5, 0x58D3, 0x58D1, 0x58D7, 0x58D9, 0x58D8, 0x58E5, 0x58DC,
-0x58E4, 0x58DF, 0x58EF, 0x58FA, 0x58F9, 0x58FB, 0x58FC, 0x58FD,
-0x5902, 0x590A, 0x5910, 0x591B, 0x68A6, 0x5925, 0x592C, 0x592D,
-0x5932, 0x5938, 0x593E, 0x7AD2, 0x5955, 0x5950, 0x594E, 0x595A,
-0x5958, 0x5962, 0x5960, 0x5967, 0x596C, 0x5969},
-{ /* category 53 */
-0x5978, 0x5981, 0x599D, 0x4F5E, 0x4FAB, 0x59A3, 0x59B2, 0x59C6,
-0x59E8, 0x59DC, 0x598D, 0x59D9, 0x59DA, 0x5A25, 0x5A1F, 0x5A11,
-0x5A1C, 0x5A09, 0x5A1A, 0x5A40, 0x5A6C, 0x5A49, 0x5A35, 0x5A36,
-0x5A62, 0x5A6A, 0x5A9A, 0x5ABC, 0x5ABE, 0x5ACB, 0x5AC2, 0x5ABD,
-0x5AE3, 0x5AD7, 0x5AE6, 0x5AE9, 0x5AD6, 0x5AFA, 0x5AFB, 0x5B0C,
-0x5B0B, 0x5B16, 0x5B32, 0x5AD0, 0x5B2A, 0x5B36, 0x5B3E, 0x5B43,
-0x5B45, 0x5B40, 0x5B51, 0x5B55, 0x5B5A, 0x5B5B, 0x5B65, 0x5B69,
-0x5B70, 0x5B73, 0x5B75, 0x5B78, 0x6588, 0x5B7A, 0x5B80, 0x5B83,
-0x5BA6, 0x5BB8, 0x5BC3, 0x5BC7, 0x5BC9, 0x5BD4, 0x5BD0, 0x5BE4,
-0x5BE6, 0x5BE2, 0x5BDE, 0x5BE5, 0x5BEB, 0x5BF0, 0x5BF6, 0x5BF3,
-0x5C05, 0x5C07, 0x5C08, 0x5C0D, 0x5C13, 0x5C20, 0x5C22, 0x5C28,
-0x5C38, 0x5C39, 0x5C41, 0x5C46, 0x5C4E, 0x5C53},
-{ /* category 54 */
-0x5C50, 0x5C4F, 0x5B71, 0x5C6C, 0x5C6E, 0x4E62, 0x5C76, 0x5C79,
-0x5C8C, 0x5C91, 0x5C94, 0x599B, 0x5CAB, 0x5CBB, 0x5CB6, 0x5CBC,
-0x5CB7, 0x5CC5, 0x5CBE, 0x5CC7, 0x5CD9, 0x5CE9, 0x5CFD, 0x5CFA,
-0x5CED, 0x5D8C, 0x5CEA, 0x5D0B, 0x5D15, 0x5D17, 0x5D5C, 0x5D1F,
-0x5D1B, 0x5D11, 0x5D14, 0x5D22, 0x5D1A, 0x5D19, 0x5D18, 0x5D4C,
-0x5D52, 0x5D4E, 0x5D4B, 0x5D6C, 0x5D73, 0x5D76, 0x5D87, 0x5D84,
-0x5D82, 0x5DA2, 0x5D9D, 0x5DAC, 0x5DAE, 0x5DBD, 0x5D90, 0x5DB7,
-0x5DBC, 0x5DC9, 0x5DCD, 0x5DD3, 0x5DD2, 0x5DD6, 0x5DDB, 0x5DEB,
-0x5DF2, 0x5DF5, 0x5E0B, 0x5E1A, 0x5E19, 0x5E11, 0x5E1B, 0x5E36,
-0x5E37, 0x5E44, 0x5E43, 0x5E40, 0x5E4E, 0x5E57, 0x5E54, 0x5E5F,
-0x5E62, 0x5E64, 0x5E47, 0x5E75, 0x5E76, 0x5E7A, 0x9EBC, 0x5E7F,
-0x5EA0, 0x5EC1, 0x5EC2, 0x5EC8, 0x5ED0, 0x5ECF},
-{ /* category 55 */
-0x5ED6, 0x5EE3, 0x5EDD, 0x5EDA, 0x5EDB, 0x5EE2, 0x5EE1, 0x5EE8,
-0x5EE9, 0x5EEC, 0x5EF1, 0x5EF3, 0x5EF0, 0x5EF4, 0x5EF8, 0x5EFE,
-0x5F03, 0x5F09, 0x5F5D, 0x5F5C, 0x5F0B, 0x5F11, 0x5F16, 0x5F29,
-0x5F2D, 0x5F38, 0x5F41, 0x5F48, 0x5F4C, 0x5F4E, 0x5F2F, 0x5F51,
-0x5F56, 0x5F57, 0x5F59, 0x5F61, 0x5F6D, 0x5F73, 0x5F77, 0x5F83,
-0x5F82, 0x5F7F, 0x5F8A, 0x5F88, 0x5F91, 0x5F87, 0x5F9E, 0x5F99,
-0x5F98, 0x5FA0, 0x5FA8, 0x5FAD, 0x5FBC, 0x5FD6, 0x5FFB, 0x5FE4,
-0x5FF8, 0x5FF1, 0x5FDD, 0x60B3, 0x5FFF, 0x6021, 0x6060, 0x6019,
-0x6010, 0x6029, 0x600E, 0x6031, 0x601B, 0x6015, 0x602B, 0x6026,
-0x600F, 0x603A, 0x605A, 0x6041, 0x606A, 0x6077, 0x605F, 0x604A,
-0x6046, 0x604D, 0x6063, 0x6043, 0x6064, 0x6042, 0x606C, 0x606B,
-0x6059, 0x6081, 0x608D, 0x60E7, 0x6083, 0x609A},
-{ /* category 56 */
-0x6084, 0x609B, 0x6096, 0x6097, 0x6092, 0x60A7, 0x608B, 0x60E1,
-0x60B8, 0x60E0, 0x60D3, 0x60B4, 0x5FF0, 0x60BD, 0x60C6, 0x60B5,
-0x60D8, 0x614D, 0x6115, 0x6106, 0x60F6, 0x60F7, 0x6100, 0x60F4,
-0x60FA, 0x6103, 0x6121, 0x60FB, 0x60F1, 0x610D, 0x610E, 0x6147,
-0x613E, 0x6128, 0x6127, 0x614A, 0x613F, 0x613C, 0x612C, 0x6134,
-0x613D, 0x6142, 0x6144, 0x6173, 0x6177, 0x6158, 0x6159, 0x615A,
-0x616B, 0x6174, 0x616F, 0x6165, 0x6171, 0x615F, 0x615D, 0x6153,
-0x6175, 0x6199, 0x6196, 0x6187, 0x61AC, 0x6194, 0x619A, 0x618A,
-0x6191, 0x61AB, 0x61AE, 0x61CC, 0x61CA, 0x61C9, 0x61F7, 0x61C8,
-0x61C3, 0x61C6, 0x61BA, 0x61CB, 0x7F79, 0x61CD, 0x61E6, 0x61E3,
-0x61F6, 0x61FA, 0x61F4, 0x61FF, 0x61FD, 0x61FC, 0x61FE, 0x6200,
-0x6208, 0x6209, 0x620D, 0x620C, 0x6214, 0x621B},
-{ /* category 57 */
-0x621E, 0x6221, 0x622A, 0x622E, 0x6230, 0x6232, 0x6233, 0x6241,
-0x624E, 0x625E, 0x6263, 0x625B, 0x6260, 0x6268, 0x627C, 0x6282,
-0x6289, 0x627E, 0x6292, 0x6293, 0x6296, 0x62D4, 0x6283, 0x6294,
-0x62D7, 0x62D1, 0x62BB, 0x62CF, 0x62FF, 0x62C6, 0x64D4, 0x62C8,
-0x62DC, 0x62CC, 0x62CA, 0x62C2, 0x62C7, 0x629B, 0x62C9, 0x630C,
-0x62EE, 0x62F1, 0x6327, 0x6302, 0x6308, 0x62EF, 0x62F5, 0x6350,
-0x633E, 0x634D, 0x641C, 0x634F, 0x6396, 0x638E, 0x6380, 0x63AB,
-0x6376, 0x63A3, 0x638F, 0x6389, 0x639F, 0x63B5, 0x636B, 0x6369,
-0x63BE, 0x63E9, 0x63C0, 0x63C6, 0x63E3, 0x63C9, 0x63D2, 0x63F6,
-0x63C4, 0x6416, 0x6434, 0x6406, 0x6413, 0x6426, 0x6436, 0x651D,
-0x6417, 0x6428, 0x640F, 0x6467, 0x646F, 0x6476, 0x644E, 0x652A,
-0x6495, 0x6493, 0x64A5, 0x64A9, 0x6488, 0x64BC},
-{ /* category 58 */
-0x64DA, 0x64D2, 0x64C5, 0x64C7, 0x64BB, 0x64D8, 0x64C2, 0x64F1,
-0x64E7, 0x8209, 0x64E0, 0x64E1, 0x62AC, 0x64E3, 0x64EF, 0x652C,
-0x64F6, 0x64F4, 0x64F2, 0x64FA, 0x6500, 0x64FD, 0x6518, 0x651C,
-0x6505, 0x6524, 0x6523, 0x652B, 0x6534, 0x6535, 0x6537, 0x6536,
-0x6538, 0x754B, 0x6548, 0x6556, 0x6555, 0x654D, 0x6558, 0x655E,
-0x655D, 0x6572, 0x6578, 0x6582, 0x6583, 0x8B8A, 0x659B, 0x659F,
-0x65AB, 0x65B7, 0x65C3, 0x65C6, 0x65C1, 0x65C4, 0x65CC, 0x65D2,
-0x65DB, 0x65D9, 0x65E0, 0x65E1, 0x65F1, 0x6772, 0x660A, 0x6603,
-0x65FB, 0x6773, 0x6635, 0x6636, 0x6634, 0x661C, 0x664F, 0x6644,
-0x6649, 0x6641, 0x665E, 0x665D, 0x6664, 0x6667, 0x6668, 0x665F,
-0x6662, 0x6670, 0x6683, 0x6688, 0x668E, 0x6689, 0x6684, 0x6698,
-0x669D, 0x66C1, 0x66B9, 0x66C9, 0x66BE, 0x66BC},
-{ /* category 59 */
-0x66C4, 0x66B8, 0x66D6, 0x66DA, 0x66E0, 0x663F, 0x66E6, 0x66E9,
-0x66F0, 0x66F5, 0x66F7, 0x670F, 0x6716, 0x671E, 0x6726, 0x6727,
-0x9738, 0x672E, 0x673F, 0x6736, 0x6741, 0x6738, 0x6737, 0x6746,
-0x675E, 0x6760, 0x6759, 0x6763, 0x6764, 0x6789, 0x6770, 0x67A9,
-0x677C, 0x676A, 0x678C, 0x678B, 0x67A6, 0x67A1, 0x6785, 0x67B7,
-0x67EF, 0x67B4, 0x67EC, 0x67B3, 0x67E9, 0x67B8, 0x67E4, 0x67DE,
-0x67DD, 0x67E2, 0x67EE, 0x67B9, 0x67CE, 0x67C6, 0x67E7, 0x6A9C,
-0x681E, 0x6846, 0x6829, 0x6840, 0x684D, 0x6832, 0x684E, 0x68B3,
-0x682B, 0x6859, 0x6863, 0x6877, 0x687F, 0x689F, 0x688F, 0x68AD,
-0x6894, 0x689D, 0x689B, 0x6883, 0x6AAE, 0x68B9, 0x6874, 0x68B5,
-0x68A0, 0x68BA, 0x690F, 0x688D, 0x687E, 0x6901, 0x68CA, 0x6908,
-0x68D8, 0x6922, 0x6926, 0x68E1, 0x690C, 0x68CD},
-{ /* category 60 */
-0x68D4, 0x68E7, 0x68D5, 0x6936, 0x6912, 0x6904, 0x68D7, 0x68E3,
-0x6925, 0x68F9, 0x68E0, 0x68EF, 0x6928, 0x692A, 0x691A, 0x6923,
-0x6921, 0x68C6, 0x6979, 0x6977, 0x695C, 0x6978, 0x696B, 0x6954,
-0x697E, 0x696E, 0x6939, 0x6974, 0x693D, 0x6959, 0x6930, 0x6961,
-0x695E, 0x695D, 0x6981, 0x696A, 0x69B2, 0x69AE, 0x69D0, 0x69BF,
-0x69C1, 0x69D3, 0x69BE, 0x69CE, 0x5BE8, 0x69CA, 0x69DD, 0x69BB,
-0x69C3, 0x69A7, 0x6A2E, 0x6991, 0x69A0, 0x699C, 0x6995, 0x69B4,
-0x69DE, 0x69E8, 0x6A02, 0x6A1B, 0x69FF, 0x6B0A, 0x69F9, 0x69F2,
-0x69E7, 0x6A05, 0x69B1, 0x6A1E, 0x69ED, 0x6A14, 0x69EB, 0x6A0A,
-0x6A12, 0x6AC1, 0x6A23, 0x6A13, 0x6A44, 0x6A0C, 0x6A72, 0x6A36,
-0x6A78, 0x6A47, 0x6A62, 0x6A59, 0x6A66, 0x6A48, 0x6A38, 0x6A22,
-0x6A90, 0x6A8D, 0x6AA0, 0x6A84, 0x6AA2, 0x6AA3},
-{ /* category 61 */
-0x6A97, 0x8617, 0x6ABB, 0x6AC3, 0x6AC2, 0x6AB8, 0x6AB3, 0x6AAC,
-0x6ADE, 0x6AD1, 0x6ADF, 0x6AAA, 0x6ADA, 0x6AEA, 0x6AFB, 0x6B05,
-0x8616, 0x6AFA, 0x6B12, 0x6B16, 0x9B31, 0x6B1F, 0x6B38, 0x6B37,
-0x76DC, 0x6B39, 0x98EE, 0x6B47, 0x6B43, 0x6B49, 0x6B50, 0x6B59,
-0x6B54, 0x6B5B, 0x6B5F, 0x6B61, 0x6B78, 0x6B79, 0x6B7F, 0x6B80,
-0x6B84, 0x6B83, 0x6B8D, 0x6B98, 0x6B95, 0x6B9E, 0x6BA4, 0x6BAA,
-0x6BAB, 0x6BAF, 0x6BB2, 0x6BB1, 0x6BB3, 0x6BB7, 0x6BBC, 0x6BC6,
-0x6BCB, 0x6BD3, 0x6BDF, 0x6BEC, 0x6BEB, 0x6BF3, 0x6BEF, 0x9EBE,
-0x6C08, 0x6C13, 0x6C14, 0x6C1B, 0x6C24, 0x6C23, 0x6C5E, 0x6C55,
-0x6C62, 0x6C6A, 0x6C82, 0x6C8D, 0x6C9A, 0x6C81, 0x6C9B, 0x6C7E,
-0x6C68, 0x6C73, 0x6C92, 0x6C90, 0x6CC4, 0x6CF1, 0x6CD3, 0x6CBD,
-0x6CD7, 0x6CC5, 0x6CDD, 0x6CAE, 0x6CB1, 0x6CBE},
-{ /* category 62 */
-0x6CBA, 0x6CDB, 0x6CEF, 0x6CD9, 0x6CEA, 0x6D1F, 0x884D, 0x6D36,
-0x6D2B, 0x6D3D, 0x6D38, 0x6D19, 0x6D35, 0x6D33, 0x6D12, 0x6D0C,
-0x6D63, 0x6D93, 0x6D64, 0x6D5A, 0x6D79, 0x6D59, 0x6D8E, 0x6D95,
-0x6FE4, 0x6D85, 0x6DF9, 0x6E15, 0x6E0A, 0x6DB5, 0x6DC7, 0x6DE6,
-0x6DB8, 0x6DC6, 0x6DEC, 0x6DDE, 0x6DCC, 0x6DE8, 0x6DD2, 0x6DC5,
-0x6DFA, 0x6DD9, 0x6DE4, 0x6DD5, 0x6DEA, 0x6DEE, 0x6E2D, 0x6E6E,
-0x6E2E, 0x6E19, 0x6E72, 0x6E5F, 0x6E3E, 0x6E23, 0x6E6B, 0x6E2B,
-0x6E76, 0x6E4D, 0x6E1F, 0x6E43, 0x6E3A, 0x6E4E, 0x6E24, 0x6EFF,
-0x6E1D, 0x6E38, 0x6E82, 0x6EAA, 0x6E98, 0x6EC9, 0x6EB7, 0x6ED3,
-0x6EBD, 0x6EAF, 0x6EC4, 0x6EB2, 0x6ED4, 0x6ED5, 0x6E8F, 0x6EA5,
-0x6EC2, 0x6E9F, 0x6F41, 0x6F11, 0x704C, 0x6EEC, 0x6EF8, 0x6EFE,
-0x6F3F, 0x6EF2, 0x6F31, 0x6EEF, 0x6F32, 0x6ECC},
-{ /* category 63 */
-0x6F3E, 0x6F13, 0x6EF7, 0x6F86, 0x6F7A, 0x6F78, 0x6F81, 0x6F80,
-0x6F6F, 0x6F5B, 0x6FF3, 0x6F6D, 0x6F82, 0x6F7C, 0x6F58, 0x6F8E,
-0x6F91, 0x6FC2, 0x6F66, 0x6FB3, 0x6FA3, 0x6FA1, 0x6FA4, 0x6FB9,
-0x6FC6, 0x6FAA, 0x6FDF, 0x6FD5, 0x6FEC, 0x6FD4, 0x6FD8, 0x6FF1,
-0x6FEE, 0x6FDB, 0x7009, 0x700B, 0x6FFA, 0x7011, 0x7001, 0x700F,
-0x6FFE, 0x701B, 0x701A, 0x6F74, 0x701D, 0x7018, 0x701F, 0x7030,
-0x703E, 0x7032, 0x7051, 0x7063, 0x7099, 0x7092, 0x70AF, 0x70F1,
-0x70AC, 0x70B8, 0x70B3, 0x70AE, 0x70DF, 0x70CB, 0x70DD, 0x70D9,
-0x7109, 0x70FD, 0x711C, 0x7119, 0x7165, 0x7155, 0x7188, 0x7166,
-0x7162, 0x714C, 0x7156, 0x716C, 0x718F, 0x71FB, 0x7184, 0x7195,
-0x71A8, 0x71AC, 0x71D7, 0x71B9, 0x71BE, 0x71D2, 0x71C9, 0x71D4,
-0x71CE, 0x71E0, 0x71EC, 0x71E7, 0x71F5, 0x71FC},
-{ /* category 64 */
-0x71F9, 0x71FF, 0x720D, 0x7210, 0x721B, 0x7228, 0x722D, 0x722C,
-0x7230, 0x7232, 0x723B, 0x723C, 0x723F, 0x7240, 0x7246, 0x724B,
-0x7258, 0x7274, 0x727E, 0x7282, 0x7281, 0x7287, 0x7292, 0x7296,
-0x72A2, 0x72A7, 0x72B9, 0x72B2, 0x72C3, 0x72C6, 0x72C4, 0x72CE,
-0x72D2, 0x72E2, 0x72E0, 0x72E1, 0x72F9, 0x72F7, 0x500F, 0x7317,
-0x730A, 0x731C, 0x7316, 0x731D, 0x7334, 0x732F, 0x7329, 0x7325,
-0x733E, 0x734E, 0x734F, 0x9ED8, 0x7357, 0x736A, 0x7368, 0x7370,
-0x7378, 0x7375, 0x737B, 0x737A, 0x73C8, 0x73B3, 0x73CE, 0x73BB,
-0x73C0, 0x73E5, 0x73EE, 0x73DE, 0x74A2, 0x7405, 0x746F, 0x7425,
-0x73F8, 0x7432, 0x743A, 0x7455, 0x743F, 0x745F, 0x7459, 0x7441,
-0x745C, 0x7469, 0x7470, 0x7463, 0x746A, 0x7476, 0x747E, 0x748B,
-0x749E, 0x74A7, 0x74CA, 0x74CF, 0x74D4, 0x73F1},
-{ /* category 65 */
-0x74E0, 0x74E3, 0x74E7, 0x74E9, 0x74EE, 0x74F2, 0x74F0, 0x74F1,
-0x74F8, 0x74F7, 0x7504, 0x7503, 0x7505, 0x750C, 0x750E, 0x750D,
-0x7515, 0x7513, 0x751E, 0x7526, 0x752C, 0x753C, 0x7544, 0x754D,
-0x754A, 0x7549, 0x755B, 0x7546, 0x755A, 0x7569, 0x7564, 0x7567,
-0x756B, 0x756D, 0x7578, 0x7576, 0x7586, 0x7587, 0x7574, 0x758A,
-0x7589, 0x7582, 0x7594, 0x759A, 0x759D, 0x75A5, 0x75A3, 0x75C2,
-0x75B3, 0x75C3, 0x75B5, 0x75BD, 0x75B8, 0x75BC, 0x75B1, 0x75CD,
-0x75CA, 0x75D2, 0x75D9, 0x75E3, 0x75DE, 0x75FE, 0x75FF, 0x75FC,
-0x7601, 0x75F0, 0x75FA, 0x75F2, 0x75F3, 0x760B, 0x760D, 0x7609,
-0x761F, 0x7627, 0x7620, 0x7621, 0x7622, 0x7624, 0x7634, 0x7630,
-0x763B, 0x7647, 0x7648, 0x7646, 0x765C, 0x7658, 0x7661, 0x7662,
-0x7668, 0x7669, 0x766A, 0x7667, 0x766C, 0x7670},
-{ /* category 66 */
-0x7672, 0x7676, 0x7678, 0x767C, 0x7680, 0x7683, 0x7688, 0x768B,
-0x768E, 0x7696, 0x7693, 0x7699, 0x769A, 0x76B0, 0x76B4, 0x76B8,
-0x76B9, 0x76BA, 0x76C2, 0x76CD, 0x76D6, 0x76D2, 0x76DE, 0x76E1,
-0x76E5, 0x76E7, 0x76EA, 0x862F, 0x76FB, 0x7708, 0x7707, 0x7704,
-0x7729, 0x7724, 0x771E, 0x7725, 0x7726, 0x771B, 0x7737, 0x7738,
-0x7747, 0x775A, 0x7768, 0x776B, 0x775B, 0x7765, 0x777F, 0x777E,
-0x7779, 0x778E, 0x778B, 0x7791, 0x77A0, 0x779E, 0x77B0, 0x77B6,
-0x77B9, 0x77BF, 0x77BC, 0x77BD, 0x77BB, 0x77C7, 0x77CD, 0x77D7,
-0x77DA, 0x77DC, 0x77E3, 0x77EE, 0x77FC, 0x780C, 0x7812, 0x7926,
-0x7820, 0x792A, 0x7845, 0x788E, 0x7874, 0x7886, 0x787C, 0x789A,
-0x788C, 0x78A3, 0x78B5, 0x78AA, 0x78AF, 0x78D1, 0x78C6, 0x78CB,
-0x78D4, 0x78BE, 0x78BC, 0x78C5, 0x78CA, 0x78EC},
-{ /* category 67 */
-0x78E7, 0x78DA, 0x78FD, 0x78F4, 0x7907, 0x7912, 0x7911, 0x7919,
-0x792C, 0x792B, 0x7940, 0x7960, 0x7957, 0x795F, 0x795A, 0x7955,
-0x7953, 0x797A, 0x797F, 0x798A, 0x799D, 0x79A7, 0x9F4B, 0x79AA,
-0x79AE, 0x79B3, 0x79B9, 0x79BA, 0x79C9, 0x79D5, 0x79E7, 0x79EC,
-0x79E1, 0x79E3, 0x7A08, 0x7A0D, 0x7A18, 0x7A19, 0x7A20, 0x7A1F,
-0x7980, 0x7A31, 0x7A3B, 0x7A3E, 0x7A37, 0x7A43, 0x7A57, 0x7A49,
-0x7A61, 0x7A62, 0x7A69, 0x9F9D, 0x7A70, 0x7A79, 0x7A7D, 0x7A88,
-0x7A97, 0x7A95, 0x7A98, 0x7A96, 0x7AA9, 0x7AC8, 0x7AB0, 0x7AB6,
-0x7AC5, 0x7AC4, 0x7ABF, 0x9083, 0x7AC7, 0x7ACA, 0x7ACD, 0x7ACF,
-0x7AD5, 0x7AD3, 0x7AD9, 0x7ADA, 0x7ADD, 0x7AE1, 0x7AE2, 0x7AE6,
-0x7AED, 0x7AF0, 0x7B02, 0x7B0F, 0x7B0A, 0x7B06, 0x7B33, 0x7B18,
-0x7B19, 0x7B1E, 0x7B35, 0x7B28, 0x7B36, 0x7B50},
-{ /* category 68 */
-0x7B7A, 0x7B04, 0x7B4D, 0x7B0B, 0x7B4C, 0x7B45, 0x7B75, 0x7B65,
-0x7B74, 0x7B67, 0x7B70, 0x7B71, 0x7B6C, 0x7B6E, 0x7B9D, 0x7B98,
-0x7B9F, 0x7B8D, 0x7B9C, 0x7B9A, 0x7B8B, 0x7B92, 0x7B8F, 0x7B5D,
-0x7B99, 0x7BCB, 0x7BC1, 0x7BCC, 0x7BCF, 0x7BB4, 0x7BC6, 0x7BDD,
-0x7BE9, 0x7C11, 0x7C14, 0x7BE6, 0x7BE5, 0x7C60, 0x7C00, 0x7C07,
-0x7C13, 0x7BF3, 0x7BF7, 0x7C17, 0x7C0D, 0x7BF6, 0x7C23, 0x7C27,
-0x7C2A, 0x7C1F, 0x7C37, 0x7C2B, 0x7C3D, 0x7C4C, 0x7C43, 0x7C54,
-0x7C4F, 0x7C40, 0x7C50, 0x7C58, 0x7C5F, 0x7C64, 0x7C56, 0x7C65,
-0x7C6C, 0x7C75, 0x7C83, 0x7C90, 0x7CA4, 0x7CAD, 0x7CA2, 0x7CAB,
-0x7CA1, 0x7CA8, 0x7CB3, 0x7CB2, 0x7CB1, 0x7CAE, 0x7CB9, 0x7CBD,
-0x7CC0, 0x7CC5, 0x7CC2, 0x7CD8, 0x7CD2, 0x7CDC, 0x7CE2, 0x9B3B,
-0x7CEF, 0x7CF2, 0x7CF4, 0x7CF6, 0x7CFA, 0x7D06},
-{ /* category 69 */
-0x7D02, 0x7D1C, 0x7D15, 0x7D0A, 0x7D45, 0x7D4B, 0x7D2E, 0x7D32,
-0x7D3F, 0x7D35, 0x7D46, 0x7D73, 0x7D56, 0x7D4E, 0x7D72, 0x7D68,
-0x7D6E, 0x7D4F, 0x7D63, 0x7D93, 0x7D89, 0x7D5B, 0x7D8F, 0x7D7D,
-0x7D9B, 0x7DBA, 0x7DAE, 0x7DA3, 0x7DB5, 0x7DC7, 0x7DBD, 0x7DAB,
-0x7E3D, 0x7DA2, 0x7DAF, 0x7DDC, 0x7DB8, 0x7D9F, 0x7DB0, 0x7DD8,
-0x7DDD, 0x7DE4, 0x7DDE, 0x7DFB, 0x7DF2, 0x7DE1, 0x7E05, 0x7E0A,
-0x7E23, 0x7E21, 0x7E12, 0x7E31, 0x7E1F, 0x7E09, 0x7E0B, 0x7E22,
-0x7E46, 0x7E66, 0x7E3B, 0x7E35, 0x7E39, 0x7E43, 0x7E37, 0x7E32,
-0x7E3A, 0x7E67, 0x7E5D, 0x7E56, 0x7E5E, 0x7E59, 0x7E5A, 0x7E79,
-0x7E6A, 0x7E69, 0x7E7C, 0x7E7B, 0x7E83, 0x7DD5, 0x7E7D, 0x8FAE,
-0x7E7F, 0x7E88, 0x7E89, 0x7E8C, 0x7E92, 0x7E90, 0x7E93, 0x7E94,
-0x7E96, 0x7E8E, 0x7E9B, 0x7E9C, 0x7F38, 0x7F3A},
-{ /* category 70 */
-0x7F45, 0x7F4C, 0x7F4D, 0x7F4E, 0x7F50, 0x7F51, 0x7F55, 0x7F54,
-0x7F58, 0x7F5F, 0x7F60, 0x7F68, 0x7F69, 0x7F67, 0x7F78, 0x7F82,
-0x7F86, 0x7F83, 0x7F88, 0x7F87, 0x7F8C, 0x7F94, 0x7F9E, 0x7F9D,
-0x7F9A, 0x7FA3, 0x7FAF, 0x7FB2, 0x7FB9, 0x7FAE, 0x7FB6, 0x7FB8,
-0x8B71, 0x7FC5, 0x7FC6, 0x7FCA, 0x7FD5, 0x7FD4, 0x7FE1, 0x7FE6,
-0x7FE9, 0x7FF3, 0x7FF9, 0x98DC, 0x8006, 0x8004, 0x800B, 0x8012,
-0x8018, 0x8019, 0x801C, 0x8021, 0x8028, 0x803F, 0x803B, 0x804A,
-0x8046, 0x8052, 0x8058, 0x805A, 0x805F, 0x8062, 0x8068, 0x8073,
-0x8072, 0x8070, 0x8076, 0x8079, 0x807D, 0x807F, 0x8084, 0x8086,
-0x8085, 0x809B, 0x8093, 0x809A, 0x80AD, 0x5190, 0x80AC, 0x80DB,
-0x80E5, 0x80D9, 0x80DD, 0x80C4, 0x80DA, 0x80D6, 0x8109, 0x80EF,
-0x80F1, 0x811B, 0x8129, 0x8123, 0x812F, 0x814B},
-{ /* category 71 */
-0x968B, 0x8146, 0x813E, 0x8153, 0x8151, 0x80FC, 0x8171, 0x816E,
-0x8165, 0x8166, 0x8174, 0x8183, 0x8188, 0x818A, 0x8180, 0x8182,
-0x81A0, 0x8195, 0x81A4, 0x81A3, 0x815F, 0x8193, 0x81A9, 0x81B0,
-0x81B5, 0x81BE, 0x81B8, 0x81BD, 0x81C0, 0x81C2, 0x81BA, 0x81C9,
-0x81CD, 0x81D1, 0x81D9, 0x81D8, 0x81C8, 0x81DA, 0x81DF, 0x81E0,
-0x81E7, 0x81FA, 0x81FB, 0x81FE, 0x8201, 0x8202, 0x8205, 0x8207,
-0x820A, 0x820D, 0x8210, 0x8216, 0x8229, 0x822B, 0x8238, 0x8233,
-0x8240, 0x8259, 0x8258, 0x825D, 0x825A, 0x825F, 0x8264, 0x8262,
-0x8268, 0x826A, 0x826B, 0x822E, 0x8271, 0x8277, 0x8278, 0x827E,
-0x828D, 0x8292, 0x82AB, 0x829F, 0x82BB, 0x82AC, 0x82E1, 0x82E3,
-0x82DF, 0x82D2, 0x82F4, 0x82F3, 0x82FA, 0x8393, 0x8303, 0x82FB,
-0x82F9, 0x82DE, 0x8306, 0x82DC, 0x8309, 0x82D9},
-{ /* category 72 */
-0x8335, 0x8334, 0x8316, 0x8332, 0x8331, 0x8340, 0x8339, 0x8350,
-0x8345, 0x832F, 0x832B, 0x8317, 0x8318, 0x8385, 0x839A, 0x83AA,
-0x839F, 0x83A2, 0x8396, 0x8323, 0x838E, 0x8387, 0x838A, 0x837C,
-0x83B5, 0x8373, 0x8375, 0x83A0, 0x8389, 0x83A8, 0x83F4, 0x8413,
-0x83EB, 0x83CE, 0x83FD, 0x8403, 0x83D8, 0x840B, 0x83C1, 0x83F7,
-0x8407, 0x83E0, 0x83F2, 0x840D, 0x8422, 0x8420, 0x83BD, 0x8438,
-0x8506, 0x83FB, 0x846D, 0x842A, 0x843C, 0x855A, 0x8484, 0x8477,
-0x846B, 0x84AD, 0x846E, 0x8482, 0x8469, 0x8446, 0x842C, 0x846F,
-0x8479, 0x8435, 0x84CA, 0x8462, 0x84B9, 0x84BF, 0x849F, 0x84D9,
-0x84CD, 0x84BB, 0x84DA, 0x84D0, 0x84C1, 0x84C6, 0x84D6, 0x84A1,
-0x8521, 0x84FF, 0x84F4, 0x8517, 0x8518, 0x852C, 0x851F, 0x8515,
-0x8514, 0x84FC, 0x8540, 0x8563, 0x8558, 0x8548},
-{ /* category 73 */
-0x8541, 0x8602, 0x854B, 0x8555, 0x8580, 0x85A4, 0x8588, 0x8591,
-0x858A, 0x85A8, 0x856D, 0x8594, 0x859B, 0x85EA, 0x8587, 0x859C,
-0x8577, 0x857E, 0x8590, 0x85C9, 0x85BA, 0x85CF, 0x85B9, 0x85D0,
-0x85D5, 0x85DD, 0x85E5, 0x85DC, 0x85F9, 0x860A, 0x8613, 0x860B,
-0x85FE, 0x85FA, 0x8606, 0x8622, 0x861A, 0x8630, 0x863F, 0x864D,
-0x4E55, 0x8654, 0x865F, 0x8667, 0x8671, 0x8693, 0x86A3, 0x86A9,
-0x86AA, 0x868B, 0x868C, 0x86B6, 0x86AF, 0x86C4, 0x86C6, 0x86B0,
-0x86C9, 0x8823, 0x86AB, 0x86D4, 0x86DE, 0x86E9, 0x86EC, 0x86DF,
-0x86DB, 0x86EF, 0x8712, 0x8706, 0x8708, 0x8700, 0x8703, 0x86FB,
-0x8711, 0x8709, 0x870D, 0x86F9, 0x870A, 0x8734, 0x873F, 0x8737,
-0x873B, 0x8725, 0x8729, 0x871A, 0x8760, 0x875F, 0x8778, 0x874C,
-0x874E, 0x8774, 0x8757, 0x8768, 0x876E, 0x8759},
-{ /* category 74 */
-0x8753, 0x8763, 0x876A, 0x8805, 0x87A2, 0x879F, 0x8782, 0x87AF,
-0x87CB, 0x87BD, 0x87C0, 0x87D0, 0x96D6, 0x87AB, 0x87C4, 0x87B3,
-0x87C7, 0x87C6, 0x87BB, 0x87EF, 0x87F2, 0x87E0, 0x880F, 0x880D,
-0x87FE, 0x87F6, 0x87F7, 0x880E, 0x87D2, 0x8811, 0x8816, 0x8815,
-0x8822, 0x8821, 0x8831, 0x8836, 0x8839, 0x8827, 0x883B, 0x8844,
-0x8842, 0x8852, 0x8859, 0x885E, 0x8862, 0x886B, 0x8881, 0x887E,
-0x889E, 0x8875, 0x887D, 0x88B5, 0x8872, 0x8882, 0x8897, 0x8892,
-0x88AE, 0x8899, 0x88A2, 0x888D, 0x88A4, 0x88B0, 0x88BF, 0x88B1,
-0x88C3, 0x88C4, 0x88D4, 0x88D8, 0x88D9, 0x88DD, 0x88F9, 0x8902,
-0x88FC, 0x88F4, 0x88E8, 0x88F2, 0x8904, 0x890C, 0x890A, 0x8913,
-0x8943, 0x891E, 0x8925, 0x892A, 0x892B, 0x8941, 0x8944, 0x893B,
-0x8936, 0x8938, 0x894C, 0x891D, 0x8960, 0x895E},
-{ /* category 75 */
-0x8966, 0x8964, 0x896D, 0x896A, 0x896F, 0x8974, 0x8977, 0x897E,
-0x8983, 0x8988, 0x898A, 0x8993, 0x8998, 0x89A1, 0x89A9, 0x89A6,
-0x89AC, 0x89AF, 0x89B2, 0x89BA, 0x89BD, 0x89BF, 0x89C0, 0x89DA,
-0x89DC, 0x89DD, 0x89E7, 0x89F4, 0x89F8, 0x8A03, 0x8A16, 0x8A10,
-0x8A0C, 0x8A1B, 0x8A1D, 0x8A25, 0x8A36, 0x8A41, 0x8A5B, 0x8A52,
-0x8A46, 0x8A48, 0x8A7C, 0x8A6D, 0x8A6C, 0x8A62, 0x8A85, 0x8A82,
-0x8A84, 0x8AA8, 0x8AA1, 0x8A91, 0x8AA5, 0x8AA6, 0x8A9A, 0x8AA3,
-0x8AC4, 0x8ACD, 0x8AC2, 0x8ADA, 0x8AEB, 0x8AF3, 0x8AE7, 0x8AE4,
-0x8AF1, 0x8B14, 0x8AE0, 0x8AE2, 0x8AF7, 0x8ADE, 0x8ADB, 0x8B0C,
-0x8B07, 0x8B1A, 0x8AE1, 0x8B16, 0x8B10, 0x8B17, 0x8B20, 0x8B33,
-0x97AB, 0x8B26, 0x8B2B, 0x8B3E, 0x8B28, 0x8B41, 0x8B4C, 0x8B4F,
-0x8B4E, 0x8B49, 0x8B56, 0x8B5B, 0x8B5A, 0x8B6B},
-{ /* category 76 */
-0x8B5F, 0x8B6C, 0x8B6F, 0x8B74, 0x8B7D, 0x8B80, 0x8B8C, 0x8B8E,
-0x8B92, 0x8B93, 0x8B96, 0x8B99, 0x8B9A, 0x8C3A, 0x8C41, 0x8C3F,
-0x8C48, 0x8C4C, 0x8C4E, 0x8C50, 0x8C55, 0x8C62, 0x8C6C, 0x8C78,
-0x8C7A, 0x8C82, 0x8C89, 0x8C85, 0x8C8A, 0x8C8D, 0x8C8E, 0x8C94,
-0x8C7C, 0x8C98, 0x621D, 0x8CAD, 0x8CAA, 0x8CBD, 0x8CB2, 0x8CB3,
-0x8CAE, 0x8CB6, 0x8CC8, 0x8CC1, 0x8CE4, 0x8CE3, 0x8CDA, 0x8CFD,
-0x8CFA, 0x8CFB, 0x8D04, 0x8D05, 0x8D0A, 0x8D07, 0x8D0F, 0x8D0D,
-0x8D10, 0x9F4E, 0x8D13, 0x8CCD, 0x8D14, 0x8D16, 0x8D67, 0x8D6D,
-0x8D71, 0x8D73, 0x8D81, 0x8D99, 0x8DC2, 0x8DBE, 0x8DBA, 0x8DCF,
-0x8DDA, 0x8DD6, 0x8DCC, 0x8DDB, 0x8DCB, 0x8DEA, 0x8DEB, 0x8DDF,
-0x8DE3, 0x8DFC, 0x8E08, 0x8E09, 0x8DFF, 0x8E1D, 0x8E1E, 0x8E10,
-0x8E1F, 0x8E42, 0x8E35, 0x8E30, 0x8E34, 0x8E4A},
-{ /* category 77 */
-0x8E47, 0x8E49, 0x8E4C, 0x8E50, 0x8E48, 0x8E59, 0x8E64, 0x8E60,
-0x8E2A, 0x8E63, 0x8E55, 0x8E76, 0x8E72, 0x8E7C, 0x8E81, 0x8E87,
-0x8E85, 0x8E84, 0x8E8B, 0x8E8A, 0x8E93, 0x8E91, 0x8E94, 0x8E99,
-0x8EAA, 0x8EA1, 0x8EAC, 0x8EB0, 0x8EC6, 0x8EB1, 0x8EBE, 0x8EC5,
-0x8EC8, 0x8ECB, 0x8EDB, 0x8EE3, 0x8EFC, 0x8EFB, 0x8EEB, 0x8EFE,
-0x8F0A, 0x8F05, 0x8F15, 0x8F12, 0x8F19, 0x8F13, 0x8F1C, 0x8F1F,
-0x8F1B, 0x8F0C, 0x8F26, 0x8F33, 0x8F3B, 0x8F39, 0x8F45, 0x8F42,
-0x8F3E, 0x8F4C, 0x8F49, 0x8F46, 0x8F4E, 0x8F57, 0x8F5C, 0x8F62,
-0x8F63, 0x8F64, 0x8F9C, 0x8F9F, 0x8FA3, 0x8FAD, 0x8FAF, 0x8FB7,
-0x8FDA, 0x8FE5, 0x8FE2, 0x8FEA, 0x8FEF, 0x9087, 0x8FF4, 0x9005,
-0x8FF9, 0x8FFA, 0x9011, 0x9015, 0x9021, 0x900D, 0x901E, 0x9016,
-0x900B, 0x9027, 0x9036, 0x9035, 0x9039, 0x8FF8},
-{ /* category 78 */
-0x904F, 0x9050, 0x9051, 0x9052, 0x900E, 0x9049, 0x903E, 0x9056,
-0x9058, 0x905E, 0x9068, 0x906F, 0x9076, 0x96A8, 0x9072, 0x9082,
-0x907D, 0x9081, 0x9080, 0x908A, 0x9089, 0x908F, 0x90A8, 0x90AF,
-0x90B1, 0x90B5, 0x90E2, 0x90E4, 0x6248, 0x90DB, 0x9102, 0x9112,
-0x9119, 0x9132, 0x9130, 0x914A, 0x9156, 0x9158, 0x9163, 0x9165,
-0x9169, 0x9173, 0x9172, 0x918B, 0x9189, 0x9182, 0x91A2, 0x91AB,
-0x91AF, 0x91AA, 0x91B5, 0x91B4, 0x91BA, 0x91C0, 0x91C1, 0x91C9,
-0x91CB, 0x91D0, 0x91D6, 0x91DF, 0x91E1, 0x91DB, 0x91FC, 0x91F5,
-0x91F6, 0x921E, 0x91FF, 0x9214, 0x922C, 0x9215, 0x9211, 0x925E,
-0x9257, 0x9245, 0x9249, 0x9264, 0x9248, 0x9295, 0x923F, 0x924B,
-0x9250, 0x929C, 0x9296, 0x9293, 0x929B, 0x925A, 0x92CF, 0x92B9,
-0x92B7, 0x92E9, 0x930F, 0x92FA, 0x9344, 0x932E},
-{ /* category 79 */
-0x9319, 0x9322, 0x931A, 0x9323, 0x933A, 0x9335, 0x933B, 0x935C,
-0x9360, 0x937C, 0x936E, 0x9356, 0x93B0, 0x93AC, 0x93AD, 0x9394,
-0x93B9, 0x93D6, 0x93D7, 0x93E8, 0x93E5, 0x93D8, 0x93C3, 0x93DD,
-0x93D0, 0x93C8, 0x93E4, 0x941A, 0x9414, 0x9413, 0x9403, 0x9407,
-0x9410, 0x9436, 0x942B, 0x9435, 0x9421, 0x943A, 0x9441, 0x9452,
-0x9444, 0x945B, 0x9460, 0x9462, 0x945E, 0x946A, 0x9229, 0x9470,
-0x9475, 0x9477, 0x947D, 0x945A, 0x947C, 0x947E, 0x9481, 0x947F,
-0x9582, 0x9587, 0x958A, 0x9594, 0x9596, 0x9598, 0x9599, 0x95A0,
-0x95A8, 0x95A7, 0x95AD, 0x95BC, 0x95BB, 0x95B9, 0x95BE, 0x95CA,
-0x6FF6, 0x95C3, 0x95CD, 0x95CC, 0x95D5, 0x95D4, 0x95D6, 0x95DC,
-0x95E1, 0x95E5, 0x95E2, 0x9621, 0x9628, 0x962E, 0x962F, 0x9642,
-0x964C, 0x964F, 0x964B, 0x9677, 0x965C, 0x965E},
-{ /* category 80 */
-0x965D, 0x965F, 0x9666, 0x9672, 0x966C, 0x968D, 0x9698, 0x9695,
-0x9697, 0x96AA, 0x96A7, 0x96B1, 0x96B2, 0x96B0, 0x96B4, 0x96B6,
-0x96B8, 0x96B9, 0x96CE, 0x96CB, 0x96C9, 0x96CD, 0x894D, 0x96DC,
-0x970D, 0x96D5, 0x96F9, 0x9704, 0x9706, 0x9708, 0x9713, 0x970E,
-0x9711, 0x970F, 0x9716, 0x9719, 0x9724, 0x972A, 0x9730, 0x9739,
-0x973D, 0x973E, 0x9744, 0x9746, 0x9748, 0x9742, 0x9749, 0x975C,
-0x9760, 0x9764, 0x9766, 0x9768, 0x52D2, 0x976B, 0x9771, 0x9779,
-0x9785, 0x977C, 0x9781, 0x977A, 0x9786, 0x978B, 0x978F, 0x9790,
-0x979C, 0x97A8, 0x97A6, 0x97A3, 0x97B3, 0x97B4, 0x97C3, 0x97C6,
-0x97C8, 0x97CB, 0x97DC, 0x97ED, 0x9F4F, 0x97F2, 0x7ADF, 0x97F6,
-0x97F5, 0x980F, 0x980C, 0x9838, 0x9824, 0x9821, 0x9837, 0x983D,
-0x9846, 0x984F, 0x984B, 0x986B, 0x986F, 0x9870},
-{ /* category 81 */
-0x9871, 0x9874, 0x9873, 0x98AA, 0x98AF, 0x98B1, 0x98B6, 0x98C4,
-0x98C3, 0x98C6, 0x98E9, 0x98EB, 0x9903, 0x9909, 0x9912, 0x9914,
-0x9918, 0x9921, 0x991D, 0x991E, 0x9924, 0x9920, 0x992C, 0x992E,
-0x993D, 0x993E, 0x9942, 0x9949, 0x9945, 0x9950, 0x994B, 0x9951,
-0x9952, 0x994C, 0x9955, 0x9997, 0x9998, 0x99A5, 0x99AD, 0x99AE,
-0x99BC, 0x99DF, 0x99DB, 0x99DD, 0x99D8, 0x99D1, 0x99ED, 0x99EE,
-0x99F1, 0x99F2, 0x99FB, 0x99F8, 0x9A01, 0x9A0F, 0x9A05, 0x99E2,
-0x9A19, 0x9A2B, 0x9A37, 0x9A45, 0x9A42, 0x9A40, 0x9A43, 0x9A3E,
-0x9A55, 0x9A4D, 0x9A5B, 0x9A57, 0x9A5F, 0x9A62, 0x9A65, 0x9A64,
-0x9A69, 0x9A6B, 0x9A6A, 0x9AAD, 0x9AB0, 0x9ABC, 0x9AC0, 0x9ACF,
-0x9AD1, 0x9AD3, 0x9AD4, 0x9ADE, 0x9ADF, 0x9AE2, 0x9AE3, 0x9AE6,
-0x9AEF, 0x9AEB, 0x9AEE, 0x9AF4, 0x9AF1, 0x9AF7},
-{ /* category 82 */
-0x9AFB, 0x9B06, 0x9B18, 0x9B1A, 0x9B1F, 0x9B22, 0x9B23, 0x9B25,
-0x9B27, 0x9B28, 0x9B29, 0x9B2A, 0x9B2E, 0x9B2F, 0x9B32, 0x9B44,
-0x9B43, 0x9B4F, 0x9B4D, 0x9B4E, 0x9B51, 0x9B58, 0x9B74, 0x9B93,
-0x9B83, 0x9B91, 0x9B96, 0x9B97, 0x9B9F, 0x9BA0, 0x9BA8, 0x9BB4,
-0x9BC0, 0x9BCA, 0x9BB9, 0x9BC6, 0x9BCF, 0x9BD1, 0x9BD2, 0x9BE3,
-0x9BE2, 0x9BE4, 0x9BD4, 0x9BE1, 0x9C3A, 0x9BF2, 0x9BF1, 0x9BF0,
-0x9C15, 0x9C14, 0x9C09, 0x9C13, 0x9C0C, 0x9C06, 0x9C08, 0x9C12,
-0x9C0A, 0x9C04, 0x9C2E, 0x9C1B, 0x9C25, 0x9C24, 0x9C21, 0x9C30,
-0x9C47, 0x9C32, 0x9C46, 0x9C3E, 0x9C5A, 0x9C60, 0x9C67, 0x9C76,
-0x9C78, 0x9CE7, 0x9CEC, 0x9CF0, 0x9D09, 0x9D08, 0x9CEB, 0x9D03,
-0x9D06, 0x9D2A, 0x9D26, 0x9DAF, 0x9D23, 0x9D1F, 0x9D44, 0x9D15,
-0x9D12, 0x9D41, 0x9D3F, 0x9D3E, 0x9D46, 0x9D48},
-{ /* category 83 */
-0x9D5D, 0x9D5E, 0x9D64, 0x9D51, 0x9D50, 0x9D59, 0x9D72, 0x9D89,
-0x9D87, 0x9DAB, 0x9D6F, 0x9D7A, 0x9D9A, 0x9DA4, 0x9DA9, 0x9DB2,
-0x9DC4, 0x9DC1, 0x9DBB, 0x9DB8, 0x9DBA, 0x9DC6, 0x9DCF, 0x9DC2,
-0x9DD9, 0x9DD3, 0x9DF8, 0x9DE6, 0x9DED, 0x9DEF, 0x9DFD, 0x9E1A,
-0x9E1B, 0x9E1E, 0x9E75, 0x9E79, 0x9E7D, 0x9E81, 0x9E88, 0x9E8B,
-0x9E8C, 0x9E92, 0x9E95, 0x9E91, 0x9E9D, 0x9EA5, 0x9EA9, 0x9EB8,
-0x9EAA, 0x9EAD, 0x9761, 0x9ECC, 0x9ECE, 0x9ECF, 0x9ED0, 0x9ED4,
-0x9EDC, 0x9EDE, 0x9EDD, 0x9EE0, 0x9EE5, 0x9EE8, 0x9EEF, 0x9EF4,
-0x9EF6, 0x9EF7, 0x9EF9, 0x9EFB, 0x9EFC, 0x9EFD, 0x9F07, 0x9F08,
-0x76B7, 0x9F15, 0x9F21, 0x9F2C, 0x9F3E, 0x9F4A, 0x9F52, 0x9F54,
-0x9F63, 0x9F5F, 0x9F60, 0x9F61, 0x9F66, 0x9F67, 0x9F6C, 0x9F6A,
-0x9F77, 0x9F72, 0x9F76, 0x9F95, 0x9F9C, 0x9FA0},
-{ /* category 84 */
-0x582F, 0x69C7, 0x9059, 0x7464, 0x51DC, 0x7199, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000},
-{ /* category 85 */
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000},
-{ /* category 86 */
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000},
-{ /* category 87 */
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000},
-{ /* category 88 */
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000},
-{ /* category 89 */
-0x7E8A, 0x891C, 0x9348, 0x9288, 0x84DC, 0x4FC9, 0x70BB, 0x6631,
-0x68C8, 0x92F9, 0x66FB, 0x5F45, 0x4E28, 0x4EE1, 0x4EFC, 0x4F00,
-0x4F03, 0x4F39, 0x4F56, 0x4F92, 0x4F8A, 0x4F9A, 0x4F94, 0x4FCD,
-0x5040, 0x5022, 0x4FFF, 0x501E, 0x5046, 0x5070, 0x5042, 0x5094,
-0x50F4, 0x50D8, 0x514A, 0x5164, 0x519D, 0x51BE, 0x51EC, 0x5215,
-0x529C, 0x52A6, 0x52C0, 0x52DB, 0x5300, 0x5307, 0x5324, 0x5372,
-0x5393, 0x53B2, 0x53DD, 0xFA0E, 0x549C, 0x548A, 0x54A9, 0x54FF,
-0x5586, 0x5759, 0x5765, 0x57AC, 0x57C8, 0x57C7, 0xFA0F, 0xFA10,
-0x589E, 0x58B2, 0x590B, 0x5953, 0x595B, 0x595D, 0x5963, 0x59A4,
-0x59BA, 0x5B56, 0x5BC0, 0x752F, 0x5BD8, 0x5BEC, 0x5C1E, 0x5CA6,
-0x5CBA, 0x5CF5, 0x5D27, 0x5D53, 0xFA11, 0x5D42, 0x5D6D, 0x5DB8,
-0x5DB9, 0x5DD0, 0x5F21, 0x5F34, 0x5F67, 0x5FB7},
-{ /* category 90 */
-0x5FDE, 0x605D, 0x6085, 0x608A, 0x60DE, 0x60D5, 0x6120, 0x60F2,
-0x6111, 0x6137, 0x6130, 0x6198, 0x6213, 0x62A6, 0x63F5, 0x6460,
-0x649D, 0x64CE, 0x654E, 0x6600, 0x6615, 0x663B, 0x6609, 0x662E,
-0x661E, 0x6624, 0x6665, 0x6657, 0x6659, 0xFA12, 0x6673, 0x6699,
-0x66A0, 0x66B2, 0x66BF, 0x66FA, 0x670E, 0xF929, 0x6766, 0x67BB,
-0x6852, 0x67C0, 0x6801, 0x6844, 0x68CF, 0xFA13, 0x6968, 0xFA14,
-0x6998, 0x69E2, 0x6A30, 0x6A6B, 0x6A46, 0x6A73, 0x6A7E, 0x6AE2,
-0x6AE4, 0x6BD6, 0x6C3F, 0x6C5C, 0x6C86, 0x6C6F, 0x6CDA, 0x6D04,
-0x6D87, 0x6D6F, 0x6D96, 0x6DAC, 0x6DCF, 0x6DF8, 0x6DF2, 0x6DFC,
-0x6E39, 0x6E5C, 0x6E27, 0x6E3C, 0x6EBF, 0x6F88, 0x6FB5, 0x6FF5,
-0x7005, 0x7007, 0x7028, 0x7085, 0x70AB, 0x710F, 0x7104, 0x715C,
-0x7146, 0x7147, 0xFA15, 0x71C1, 0x71FE, 0x72B1},
-{ /* category 91 */
-0x72BE, 0x7324, 0xFA16, 0x7377, 0x73BD, 0x73C9, 0x73D6, 0x73E3,
-0x73D2, 0x7407, 0x73F5, 0x7426, 0x742A, 0x7429, 0x742E, 0x7462,
-0x7489, 0x749F, 0x7501, 0x756F, 0x7682, 0x769C, 0x769E, 0x769B,
-0x76A6, 0xFA17, 0x7746, 0x52AF, 0x7821, 0x784E, 0x7864, 0x787A,
-0x7930, 0xFA18, 0xFA19, 0xFA1A, 0x7994, 0xFA1B, 0x799B, 0x7AD1,
-0x7AE7, 0xFA1C, 0x7AEB, 0x7B9E, 0xFA1D, 0x7D48, 0x7D5C, 0x7DB7,
-0x7DA0, 0x7DD6, 0x7E52, 0x7F47, 0x7FA1, 0xFA1E, 0x8301, 0x8362,
-0x837F, 0x83C7, 0x83F6, 0x8448, 0x84B4, 0x8553, 0x8559, 0x856B,
-0xFA1F, 0x85B0, 0xFA20, 0xFA21, 0x8807, 0x88F5, 0x8A12, 0x8A37,
-0x8A79, 0x8AA7, 0x8ABE, 0x8ADF, 0xFA22, 0x8AF6, 0x8B53, 0x8B7F,
-0x8CF0, 0x8CF4, 0x8D12, 0x8D76, 0xFA23, 0x8ECF, 0xFA24, 0xFA25,
-0x9067, 0x90DE, 0xFA26, 0x9115, 0x9127, 0x91DA},
-{ /* category 92 */
-0x91D7, 0x91DE, 0x91ED, 0x91EE, 0x91E4, 0x91E5, 0x9206, 0x9210,
-0x920A, 0x923A, 0x9240, 0x923C, 0x924E, 0x9259, 0x9251, 0x9239,
-0x9267, 0x92A7, 0x9277, 0x9278, 0x92E7, 0x92D7, 0x92D9, 0x92D0,
-0xFA27, 0x92D5, 0x92E0, 0x92D3, 0x9325, 0x9321, 0x92FB, 0xFA28,
-0x931E, 0x92FF, 0x931D, 0x9302, 0x9370, 0x9357, 0x93A4, 0x93C6,
-0x93DE, 0x93F8, 0x9431, 0x9445, 0x9448, 0x9592, 0xF9DC, 0xFA29,
-0x969D, 0x96AF, 0x9733, 0x973B, 0x9743, 0x974D, 0x974F, 0x9751,
-0x9755, 0x9857, 0x9865, 0xFA2A, 0xFA2B, 0x9927, 0xFA2C, 0x999E,
-0x9A4E, 0x9AD9, 0x9ADC, 0x9B75, 0x9B72, 0x9B8F, 0x9BB1, 0x9BBB,
-0x9C00, 0x9D70, 0x9D6B, 0xFA2D, 0x9E19, 0x9ED1, 0x0000, 0x0000,
-0x2170, 0x2171, 0x2172, 0x2173, 0x2174, 0x2175, 0x2176, 0x2177,
-0x2178, 0x2179, 0xFFE2, 0xFFE4, 0xFF07, 0xFF02}};
-
-#endif /* JISX0208_H */
diff --git a/ext/gd/libgd/mathmake.c b/ext/gd/libgd/mathmake.c
deleted file mode 100644
index 3950c4b09c..0000000000
--- a/ext/gd/libgd/mathmake.c
+++ /dev/null
@@ -1,52 +0,0 @@
-#include <stdio.h>
-#include <math.h>
-
-#define scale 1024
-
-int basis[91];
-int cost[360];
-
-main (void)
-{
- int i;
- printf ("#define costScale %d\n", scale);
- printf ("int cost[] = {\n ");
- for (i = 0; (i <= 90); i++)
- {
- basis[i] = cos ((double) i * .0174532925) * scale;
- }
- for (i = 0; (i < 90); i++)
- {
- printf ("%d,\n ", cost[i] = basis[i]);
- }
- for (i = 90; (i < 180); i++)
- {
- printf ("%d,\n ", cost[i] = -basis[180 - i]);
- }
- for (i = 180; (i < 270); i++)
- {
- printf ("%d,\n ", cost[i] = -basis[i - 180]);
- }
- for (i = 270; (i < 359); i++)
- {
- printf ("%d,\n ", cost[i] = basis[360 - i]);
- }
- printf ("%d\n", cost[359] = basis[1]);
- printf ("};\n");
- printf ("#define sintScale %d\n", scale);
- printf ("int sint[] = {\n ");
- for (i = 0; (i < 360); i++)
- {
- int val;
- val = cost[(i + 270) % 360];
- if (i != 359)
- {
- printf ("%d,\n ", val);
- }
- else
- {
- printf ("%d\n", val);
- }
- }
- printf ("};\n");
-}
diff --git a/ext/gd/libgd/pngtogd.c b/ext/gd/libgd/pngtogd.c
deleted file mode 100644
index b663b170b7..0000000000
--- a/ext/gd/libgd/pngtogd.c
+++ /dev/null
@@ -1,45 +0,0 @@
-
-#include <stdio.h>
-#include "gd.h"
-
-/* A short program which converts a .png file into a .gd file, for
- your convenience in creating images on the fly from a
- basis image that must be loaded quickly. The .gd format
- is not intended to be a general-purpose format. */
-
-int
-main (int argc, char **argv)
-{
- gdImagePtr im;
- FILE *in, *out;
- if (argc != 3)
- {
- fprintf (stderr, "Usage: pngtogd filename.png filename.gd\n");
- exit (1);
- }
- in = fopen (argv[1], "rb");
- if (!in)
- {
- fprintf (stderr, "Input file does not exist!\n");
- exit (1);
- }
- im = gdImageCreateFromPng (in);
- fclose (in);
- if (!im)
- {
- fprintf (stderr, "Input is not in PNG format!\n");
- exit (1);
- }
- out = fopen (argv[2], "wb");
- if (!out)
- {
- fprintf (stderr, "Output file cannot be written to!\n");
- gdImageDestroy (im);
- exit (1);
- }
- gdImageGd (im, out);
- fclose (out);
- gdImageDestroy (im);
-
- return 0;
-}
diff --git a/ext/gd/libgd/pngtogd2.c b/ext/gd/libgd/pngtogd2.c
deleted file mode 100644
index c8b1d843af..0000000000
--- a/ext/gd/libgd/pngtogd2.c
+++ /dev/null
@@ -1,52 +0,0 @@
-
-#include <stdio.h>
-#include <stdlib.h>
-#include "gd.h"
-
-/* A short program which converts a .png file into a .gd file, for
- your convenience in creating images on the fly from a
- basis image that must be loaded quickly. The .gd format
- is not intended to be a general-purpose format. */
-
-int
-main (int argc, char **argv)
-{
- gdImagePtr im;
- FILE *in, *out;
- int cs, fmt;
-
- if (argc != 5)
- {
- fprintf (stderr, "Usage: pngtogd2 filename.png filename.gd2 cs fmt\n");
- fprintf (stderr, " where cs is the chunk size\n");
- fprintf (stderr, " fmt is 1 for raw, 2 for compressed\n");
- exit (1);
- }
- in = fopen (argv[1], "rb");
- if (!in)
- {
- fprintf (stderr, "Input file does not exist!\n");
- exit (1);
- }
- im = gdImageCreateFromPng (in);
- fclose (in);
- if (!im)
- {
- fprintf (stderr, "Input is not in PNG format!\n");
- exit (1);
- }
- out = fopen (argv[2], "wb");
- if (!out)
- {
- fprintf (stderr, "Output file cannot be written to!\n");
- gdImageDestroy (im);
- exit (1);
- }
- cs = atoi (argv[3]);
- fmt = atoi (argv[4]);
- gdImageGd2 (im, out, cs, fmt);
- fclose (out);
- gdImageDestroy (im);
-
- return 0;
-}
diff --git a/ext/gd/libgd/testac.c b/ext/gd/libgd/testac.c
deleted file mode 100644
index 30c54e1641..0000000000
--- a/ext/gd/libgd/testac.c
+++ /dev/null
@@ -1,129 +0,0 @@
-
-#include <stdio.h>
-#include "gd.h"
-
-/* If palette is true, we convert from truecolor to palette at the end,
- to test gdImageTrueColorToPalette and see file size/
- quality tradeoffs. */
-
-void testDrawing (
- gdImagePtr im_in,
- double scale,
- int blending,
- int palette,
- char *filename);
-
-int
-main (int argc, char *argv[])
-{
- /* Input and output files */
- FILE *in;
- FILE *out;
-
- /* Input image */
- gdImagePtr im_in = 0;
-
- /* Colors */
- int lightBlue;
-
- if (argc != 2)
- {
- fprintf (stderr, "Usage: testac filename.png\n");
- exit (1);
- }
- /* Load original PNG, which should contain alpha channel
- information. We will use it in two ways: preserving it
- literally, for use with compatible browsers, and
- compositing it ourselves against a background of our
- choosing (alpha blending). We'll change its size
- and try creating palette versions of it. */
- in = fopen (argv[1], "rb");
- if (!in)
- {
- fprintf (stderr, "Can't load %s.\n", argv[1]);
- exit (1);
- }
- else
- {
- im_in = gdImageCreateFromPng (in);
- fclose (in);
- }
- testDrawing (im_in, 1.0, 0, 0, "noblending-fullsize-truecolor.png");
- testDrawing (im_in, 1.0, 1, 0, "blending-fullsize-truecolor.png");
- testDrawing (im_in, 0.5, 0, 0, "noblending-halfsize-truecolor.png");
- testDrawing (im_in, 0.5, 1, 0, "blending-halfsize-truecolor.png");
- testDrawing (im_in, 2.0, 0, 0, "noblending-doublesize-truecolor.png");
- testDrawing (im_in, 2.0, 1, 0, "blending-doublesize-truecolor.png");
- testDrawing (im_in, 1.0, 0, 1, "noblending-fullsize-palette.png");
- testDrawing (im_in, 1.0, 1, 1, "blending-fullsize-palette.png");
- testDrawing (im_in, 0.5, 0, 1, "noblending-halfsize-palette.png");
- testDrawing (im_in, 0.5, 1, 1, "blending-halfsize-palette.png");
- testDrawing (im_in, 2.0, 0, 1, "noblending-doublesize-palette.png");
- testDrawing (im_in, 2.0, 1, 1, "blending-doublesize-palette.png");
- gdImageDestroy (im_in);
- return 0;
-}
-
-/* If palette is true, we convert from truecolor to palette at the end,
- to test gdImageTrueColorToPalette and see file size/
- quality tradeoffs. */
-void
-testDrawing (
- gdImagePtr im_in,
- double scale,
- int blending,
- int palette,
- char *filename)
-{
- gdImagePtr im_out;
- FILE *out;
- /* Create output image. */
- im_out = gdImageCreateTrueColor ((int) (gdImageSX (im_in) * scale),
- (int) (gdImageSY (im_in) * scale));
- /*
- Request alpha blending. This causes future
- drawing operations to perform alpha channel blending
- with the background, resulting in an opaque image.
- Without this call, pixels in the foreground color are
- copied literally, *including* the alpha channel value,
- resulting in an output image which is potentially
- not opaque. This flag can be set and cleared as often
- as desired. */
- gdImageAlphaBlending (im_out, blending);
-
- /* Flood with light blue. */
- gdImageFill (im_out, (int) (gdImageSX (im_in) * scale / 2),
- (int) (gdImageSY (im_in) * scale / 2),
- gdTrueColor (192, 192, 255));
- /* Copy the source image. Alpha blending should result in
- compositing against red. With blending turned off, the
- browser or viewer will composite against its preferred
- background, or, if it does not support an alpha channel,
- we will see the original colors for the pixels that
- ought to be transparent or semitransparent. */
- gdImageCopyResampled (im_out, im_in,
- 0, 0,
- 0, 0,
- (int) (gdImageSX (im_in) * scale), (int) (gdImageSY (im_in) * scale),
- gdImageSX (im_in), gdImageSY (im_in));
- /* Write PNG */
- out = fopen (filename, "wb");
-
- /* If this image is the result of alpha channel blending,
- it will not contain an interesting alpha channel itself.
- Save a little file size by not saving the alpha channel.
- Otherwise the file would typically be slightly larger. */
- gdImageSaveAlpha (im_out, !blending);
-
- /* If requested, convert from truecolor to palette. */
- if (palette)
- {
- /* Dithering, 256 colors. */
- gdImageTrueColorToPalette (im_out, 1, 256);
- }
-
- gdImagePng (im_out, out);
- fclose (out);
-
- gdImageDestroy (im_out);
-}
diff --git a/ext/gd/libgd/wbmp.c b/ext/gd/libgd/wbmp.c
deleted file mode 100644
index d63c684ac7..0000000000
--- a/ext/gd/libgd/wbmp.c
+++ /dev/null
@@ -1,369 +0,0 @@
-
-/* WBMP
- ** ----
- ** WBMP Level 0: B/W, Uncompressed
- ** This implements the WBMP format as specified in WAPSpec 1.1 and 1.2.
- ** It does not support ExtHeaders as defined in the spec. The spec states
- ** that a WAP client does not need to implement ExtHeaders.
- **
- ** (c) 2000 Johan Van den Brande <johan@vandenbrande.com>
- */
-
-
-#include <stdio.h>
-#include <stddef.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include "wbmp.h"
-#include "gd.h"
-#include "gdhelpers.h"
-
-#ifdef NOTDEF
-#define __TEST /* Compile with main function */
-#define __DEBUG /* Extra verbose when with __TEST */
-#define __WRITE /* readwbmp and writewbmp(stdout) */
-#define __VIEW /* view the wbmp on stdout */
-#endif
-
-/* getmbi
- ** ------
- ** Get a multibyte integer from a generic getin function
- ** 'getin' can be getc, with in = NULL
- ** you can find getin as a function just above the main function
- ** This way you gain a lot of flexibilty about how this package
- ** reads a wbmp file.
- */
-int
-getmbi (int (*getin) (void *in), void *in)
-{
- int i, mbi = 0;
-
- do
- {
- i = getin (in);
- if (i < 0)
- return (-1);
- mbi = (mbi << 7) | (i & 0x7f);
- }
- while (i & 0x80);
-
- return (mbi);
-}
-
-
-/* putmbi
- ** ------
- ** Put a multibyte intgerer in some kind of output stream
- ** I work here with a function pointer, to make it as generic
- ** as possible. Look at this function as an iterator on the
- ** mbi integers it spits out.
- **
- */
-void
-putmbi (int i, void (*putout) (int c, void *out), void *out)
-{
- int cnt, l, accu;
-
- /* Get number of septets */
- cnt = 0;
- accu = 0;
- while (accu != i)
- accu += i & 0x7f << 7 * cnt++;
-
- /* Produce the multibyte output */
- for (l = cnt - 1; l > 0; l--)
- putout (0x80 | (i & 0x7f << 7 * l) >> 7 * l, out);
-
- putout (i & 0x7f, out);
-
-}
-
-
-
-/* skipheader
- ** ----------
- ** Skips the ExtHeader. Not needed for the moment
- **
- */
-int
-skipheader (int (*getin) (void *in), void *in)
-{
- int i;
-
- do
- {
- i = getin (in);
- if (i < 0)
- return (-1);
- }
- while (i & 0x80);
-
- return (0);
-}
-
-/* create wbmp
- ** -----------
- ** create an empty wbmp
- **
- */
-Wbmp *
-createwbmp (int width, int height, int color)
-{
- int i;
-
- Wbmp *wbmp;
- if ((wbmp = (Wbmp *) gdMalloc (sizeof (Wbmp))) == NULL)
- return (NULL);
-
- if ((wbmp->bitmap = (int *) safe_emalloc(sizeof(int), width * height, 0)) == NULL)
- {
- gdFree (wbmp);
- return (NULL);
- }
-
- wbmp->width = width;
- wbmp->height = height;
-
- for (i = 0; i < width * height; wbmp->bitmap[i++] = color);
-
- return (wbmp);
-}
-
-
-
-/* readwbmp
- ** -------
- ** Actually reads the WBMP format from an open file descriptor
- ** It goes along by returning a pointer to a WBMP struct.
- **
- */
-int
-readwbmp (int (*getin) (void *in), void *in, Wbmp ** return_wbmp)
-{
- int row, col, byte, pel, pos;
- Wbmp *wbmp;
-
- if ((wbmp = (Wbmp *) gdMalloc (sizeof (Wbmp))) == NULL)
- return (-1);
-
- wbmp->type = getin (in);
- if (wbmp->type != 0)
- {
- gdFree (wbmp);
- return (-1);
- }
-
- if (skipheader (getin, in))
- return (-1);
-
-
- wbmp->width = getmbi (getin, in);
- if (wbmp->width == -1)
- {
- gdFree (wbmp);
- return (-1);
- }
-
- wbmp->height = getmbi (getin, in);
- if (wbmp->height == -1)
- {
- gdFree (wbmp);
- return (-1);
- }
-
-#ifdef __DEBUG
- printf ("W: %d, H: %d\n", wbmp->width, wbmp->height);
-#endif
-
- if ((wbmp->bitmap = (int *) safe_emalloc(wbmp->width * wbmp->height, sizeof(int), 0)) == NULL)
- {
- gdFree (wbmp);
- return (-1);
- }
-
-#ifdef __DEBUG
- printf ("DATA CONSTRUCTED\n");
-#endif
-
- pos = 0;
- for (row = 0; row < wbmp->height; row++)
- {
- for (col = 0; col < wbmp->width;)
- {
- byte = getin (in);
-
- for (pel = 7; pel >= 0; pel--)
- {
- if (col++ < wbmp->width)
- {
- if (byte & 1 << pel)
- {
- wbmp->bitmap[pos] = WBMP_WHITE;
- }
- else
- {
- wbmp->bitmap[pos] = WBMP_BLACK;
- }
- pos++;
- }
- }
- }
- }
-
- *return_wbmp = wbmp;
-
- return (0);
-}
-
-
-/* writewbmp
- ** ---------
- ** Write a wbmp to a file descriptor
- **
- ** Why not just giving a filedescriptor to this function?
- ** Well, the incentive to write this function was the complete
- ** integration in gd library from www.boutell.com. They use
- ** their own io functions, so the passing of a function seemed to be
- ** a logic(?) decision ...
- **
- */
-int
-writewbmp (Wbmp * wbmp, void (*putout) (int c, void *out), void *out)
-{
- int row, col;
- int bitpos, octet;
-
- /* Generate the header */
- putout (0, out); /* WBMP Type 0: B/W, Uncompressed bitmap */
- putout (0, out); /* FixHeaderField */
-
-
-
- /* Size of the image */
- putmbi (wbmp->width, putout, out); /* width */
- putmbi (wbmp->height, putout, out); /* height */
-
-
- /* Image data */
- for (row = 0; row < wbmp->height; row++)
- {
- bitpos = 8;
- octet = 0;
- for (col = 0; col < wbmp->width; col++)
- {
- octet |= ((wbmp->bitmap[row * wbmp->width + col] == 1) ? WBMP_WHITE : WBMP_BLACK) << --bitpos;
- if (bitpos == 0)
- {
- bitpos = 8;
- putout (octet, out);
- octet = 0;
- }
- }
- if (bitpos != 8)
- putout (octet, out);
-
- }
- return (0);
-
-}
-
-
-/* freewbmp
- ** --------
- ** gdFrees up memory occupied by a WBMP structure
- **
- */
-void
-freewbmp (Wbmp * wbmp)
-{
- gdFree (wbmp->bitmap);
- gdFree (wbmp);
-}
-
-
-/* printwbmp
- ** ---------
- ** print a WBMP to stdout for visualisation
- **
- */
-void
-printwbmp (Wbmp * wbmp)
-{
- int row, col;
- for (row = 0; row < wbmp->height; row++)
- {
- for (col = 0; col < wbmp->width; col++)
- {
- if (wbmp->bitmap[wbmp->width * row + col] == WBMP_BLACK)
- {
- putchar ('#');
- }
- else
- {
- putchar (' ');
- }
- }
- putchar ('\n');
- }
-}
-
-#ifdef __TEST
-
-/* putout to file descriptor
- ** -------------------------
- */
-int
-putout (int c, void *out)
-{
- return (putc (c, (FILE *) out));
-}
-
-/* getin from file descriptor
- ** --------------------------
- */
-int
-getin (void *in)
-{
- return (getc ((FILE *) in));
-}
-
-
-/* Main function
- ** -------------
- **
- */
-int
-main (int argc, char *argv[])
-{
- FILE *wbmp_file;
- Wbmp *wbmp;
-
- wbmp_file = fopen (argv[1], "rb");
- if (wbmp_file)
- {
- readwbmp (&getin, wbmp_file, &wbmp);
-
-#ifdef __VIEW
-
-#ifdef __DEBUG
- printf ("\nVIEWING IMAGE\n");
-#endif
-
- printwbmp (wbmp);
-#endif
-
-#ifdef __WRITE
-
-#ifdef __DEBUG
- printf ("\nDUMPING WBMP to STDOUT\n");
-#endif
-
- writewbmp (wbmp, &putout, stdout);
-#endif
-
- freewbmp (wbmp);
- fclose (wbmp_file);
- }
-}
-#endif
diff --git a/ext/gd/libgd/wbmp.h b/ext/gd/libgd/wbmp.h
deleted file mode 100644
index 4c239d83cf..0000000000
--- a/ext/gd/libgd/wbmp.h
+++ /dev/null
@@ -1,48 +0,0 @@
-/* WBMP
-** ----
-** WBMP Level 0: B/W, Uncompressed
-** This implements the WBMP format as specified in WAPSpec 1.1 and 1.2.
-** It does not support ExtHeaders as defined in the spec. The spec states
-** that a WAP client does not need to implement ExtHeaders.
-**
-** (c) 2000 Johan Van den Brande <johan@vandenbrande.com>
-**
-** Header file
-*/
-#ifndef __WBMP_H
-#define __WBMP_H 1
-
-#include "php_compat.h"
-
-/* WBMP struct
-** -----------
-** A Wireless bitmap structure
-**
-*/
-
-typedef struct Wbmp_
-{
- int type; /* type of the wbmp */
- int width; /* width of the image */
- int height; /* height of the image */
- int *bitmap; /* pointer to data: 0 = WHITE , 1 = BLACK */
-} Wbmp;
-
-#define WBMP_WHITE 1
-#define WBMP_BLACK 0
-
-
-/* Proto's
-** -------
-**
-*/
-void putmbi( int i, void (*putout)(int c, void *out), void *out);
-int getmbi ( int (*getin)(void *in), void *in );
-int skipheader( int (*getin)(void *in), void *in );
-Wbmp *createwbmp( int width, int height, int color );
-int readwbmp( int (*getin)(void *in), void *in, Wbmp **wbmp );
-int writewbmp( Wbmp *wbmp, void (*putout)( int c, void *out), void *out);
-void freewbmp( Wbmp *wbmp );
-void printwbmp( Wbmp *wbmp );
-
-#endif
diff --git a/ext/gd/libgd/webpng.c b/ext/gd/libgd/webpng.c
deleted file mode 100644
index 81a00e749c..0000000000
--- a/ext/gd/libgd/webpng.c
+++ /dev/null
@@ -1,289 +0,0 @@
-/* Bring in the gd library functions */
-#include "gd.h"
-
-/* Bring in standard I/O and string manipulation functions */
-#include <stdio.h>
-#include <stdlib.h> /* for atoi() */
-#include <string.h>
-
-#ifdef _WIN32
-#include <process.h>
-int
-getpid ()
-{
- return _getpid ();
-}
-#else
-#include <unistd.h> /* for getpid(), unlink() */
-#endif
-int
-main (int argc, char **argv)
-{
- FILE *in;
- FILE *out;
- char outFn[20];
- int useStdinStdout = 0;
-
- /* Declare our image pointer */
- gdImagePtr im = 0;
- int i;
- /* We'll clear 'no' once we know the user has made a
- reasonable request. */
- int no = 1;
- /* We'll set 'write' once we know the user's request
- requires that the image be written back to disk. */
- int write = 0;
- /* C programs always get at least one argument; we want at
- least one more (the image), more in practice. */
- if (argc < 2 || !strcmp (argv[1], "--help"))
- {
- no = 1;
- goto usage;
- }
-
- /* The last argument should be the image. Open the file. */
- if (strcmp ("-", argv[argc - 1]) == 0)
- { /* - is synonymous with STDIN */
- useStdinStdout = 1;
- in = stdin;
- }
- else
- {
- in = fopen (argv[argc - 1], "rb");
- }
- if (!in)
- {
- fprintf (stderr,
- "Error: can't open file %s.\n", argv[argc - 1]);
- exit (1);
- }
- /* Now load the image. */
- im = gdImageCreateFromPng (in);
- fclose (in);
- /* If the load failed, it must not be a PNG file. */
- if (!im)
- {
- fprintf (stderr,
- "Error: %s is not a valid PNG file.\n", argv[argc - 1]);
- exit (1);
- }
- /* Consider each argument in turn. */
- for (i = 1; (i < (argc - 1)); i++)
- {
- /* -i turns on and off interlacing. */
- if (!strcmp (argv[i], "--help"))
- {
- /* Every program should use this for help! :) */
- no = 1;
- goto usage;
- }
- else if (!strcmp (argv[i], "-i"))
- {
- if (i == (argc - 2))
- {
- fprintf (stderr,
- "Error: -i specified without y or n.\n");
- no = 1;
- goto usage;
- }
- if (!strcmp (argv[i + 1], "y"))
- {
- /* Set interlace. */
- gdImageInterlace (im, 1);
- }
- else if (!strcmp (argv[i + 1], "n"))
- {
- /* Clear interlace. */
- gdImageInterlace (im, 0);
- }
- else
- {
- fprintf (stderr,
- "Error: -i specified without y or n.\n");
- no = 1;
- goto usage;
- }
- i++;
- no = 0;
- write = 1;
- }
- else if (!strcmp (argv[i], "-t"))
- {
- /* Set transparent index (or none). */
- int index;
- if (i == (argc - 2))
- {
- fprintf (stderr,
- "Error: -t specified without a color table index.\n");
- no = 1;
- goto usage;
- }
- if (!strcmp (argv[i + 1], "none"))
- {
- /* -1 means not transparent. */
- gdImageColorTransparent (im, -1);
- }
- else
- {
- /* OK, get an integer and set the index. */
- index = atoi (argv[i + 1]);
- gdImageColorTransparent (im, index);
- }
- i++;
- write = 1;
- no = 0;
- }
- else if (!strcmp (argv[i], "-l"))
- {
- /* List the colors in the color table. */
- int j;
- if (!im->trueColor)
- {
- /* Tabs used below. */
- printf ("Index Red Green Blue Alpha\n");
- for (j = 0; (j < gdImageColorsTotal (im)); j++)
- {
- /* Use access macros to learn colors. */
- printf ("%d %d %d %d %d\n",
- j,
- gdImageRed (im, j),
- gdImageGreen (im, j),
- gdImageBlue (im, j),
- gdImageAlpha (im, j));
- }
- }
- else
- {
- printf ("Truecolor image, no palette entries to list.\n");
- }
- no = 0;
- }
- else if (!strcmp (argv[i], "-d"))
- {
- /* Output dimensions, etc. */
- int t;
- printf ("Width: %d Height: %d Colors: %d\n",
- gdImageSX (im), gdImageSY (im),
- gdImageColorsTotal (im));
- t = gdImageGetTransparent (im);
- if (t != (-1))
- {
- printf ("First 100%% transparent index: %d\n", t);
- }
- else
- {
- /* -1 means the image is not transparent. */
- printf ("First 100%% transparent index: none\n");
- }
- if (gdImageGetInterlaced (im))
- {
- printf ("Interlaced: yes\n");
- }
- else
- {
- printf ("Interlaced: no\n");
- }
- no = 0;
- }
- else if (!strcmp(argv[i], "-a"))
- {
- int maxx, maxy, x, y, alpha, pix, nalpha = 0;
-
- maxx = gdImageSX(im);
- maxy = gdImageSY(im);
-
- printf("alpha channel information:\n");
-
- if (im->trueColor) {
- for (y = 0; y < maxy; y++) {
- for (x = 0; x < maxx; x++) {
- pix = gdImageGetPixel(im, x, y);
- alpha = gdTrueColorGetAlpha(pix);
-
- if (alpha > gdAlphaOpaque) {
- /* Use access macros to learn colors. */
- printf ("%d %d %d %d\n",
- gdTrueColorGetRed(pix),
- gdTrueColorGetGreen(pix),
- gdTrueColorGetBlue(pix),
- alpha);
- nalpha++;
- }
-
- }
- }
- }
- else
- printf("NOT a true color image\n");
- no = 0;
- printf("%d alpha channels\n", nalpha);
-
- }
- else
- {
- fprintf (stderr, "Unknown argument: %s\n", argv[i]);
- break;
- }
- }
-usage:
- if (no)
- {
- /* If the command failed, output an explanation. */
- fprintf (stderr,
- "Usage: webpng [-i y|n ] [-l] [-t index|none ] [-d] pngname.png\n"
-
- " -i [y|n] Turns on/off interlace\n"
- " -l Prints the table of color indexes\n"
- " -t [index] Set the transparent color to the specified index (0-255 or \"none\")\n"
- " -d Reports the dimensions and other characteristics of the image.\n"
- " -a Prints all alpha channels that are not 100%% opaque.\n"
- "\n"
- "If you specify '-' as the input file, stdin/stdout will be used input/output.\n"
- );
- }
- if (write)
- {
- if (useStdinStdout)
- {
- out = stdout;
- }
- else
- {
- /* Open a temporary file. */
-
- /* "temp.tmp" is not good temporary filename. */
- sprintf (outFn, "webpng.tmp%d", getpid ());
- out = fopen (outFn, "wb");
-
- if (!out)
- {
- fprintf (stderr,
- "Unable to write to %s -- exiting\n", outFn);
- exit (1);
- }
- }
-
- /* Write the new PNG. */
- gdImagePng (im, out);
-
- if (!useStdinStdout)
- {
- fclose (out);
- /* Erase the old PNG. */
- unlink (argv[argc - 1]);
- /* Rename the new to the old. */
- if (rename (outFn, argv[argc - 1]) != 0)
- {
- perror ("rename");
- exit (1);
- }
- }
- }
- /* Delete the image from memory. */
- if (im)
- {
- gdImageDestroy (im);
- }
- /* All's well that ends well. */
- return 0;
-}
diff --git a/ext/gd/libgd/xbm.c b/ext/gd/libgd/xbm.c
deleted file mode 100644
index c1fa912bda..0000000000
--- a/ext/gd/libgd/xbm.c
+++ /dev/null
@@ -1,239 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Marcus Boerger <helly@php.net> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-#include <stdio.h>
-#include <math.h>
-#include <string.h>
-#include <stdlib.h>
-#include "gd.h"
-#include "gdhelpers.h"
-
-#include "php.h"
-
-#define MAX_XBM_LINE_SIZE 255
-
-/* {{{ gdImagePtr gdImageCreateFromXbm */
-gdImagePtr gdImageCreateFromXbm(FILE * fd)
-{
- char fline[MAX_XBM_LINE_SIZE];
- char iname[MAX_XBM_LINE_SIZE];
- char *type;
- int value;
- unsigned int width = 0, height = 0;
- int fail = 0;
- int max_bit = 0;
-
- gdImagePtr im;
- int bytes = 0, i;
- int bit, x = 0, y = 0;
- int ch;
- char h[8];
- unsigned int b;
-
- rewind(fd);
- while (fgets(fline, MAX_XBM_LINE_SIZE, fd)) {
- fline[MAX_XBM_LINE_SIZE-1] = '\0';
- if (strlen(fline) == MAX_XBM_LINE_SIZE-1) {
- return 0;
- }
- if (sscanf(fline, "#define %s %d", iname, &value) == 2) {
- if (!(type = strrchr(iname, '_'))) {
- type = iname;
- } else {
- type++;
- }
-
- if (!strcmp("width", type)) {
- width = (unsigned int) value;
- }
- if (!strcmp("height", type)) {
- height = (unsigned int) value;
- }
- } else {
- if ( sscanf(fline, "static unsigned char %s = {", iname) == 1
- || sscanf(fline, "static char %s = {", iname) == 1)
- {
- max_bit = 128;
- } else if (sscanf(fline, "static unsigned short %s = {", iname) == 1
- || sscanf(fline, "static short %s = {", iname) == 1)
- {
- max_bit = 32768;
- }
- if (max_bit) {
- bytes = (width * height / 8) + 1;
- if (!bytes) {
- return 0;
- }
- if (!(type = strrchr(iname, '_'))) {
- type = iname;
- } else {
- type++;
- }
- if (!strcmp("bits[]", type)) {
- break;
- }
- }
- }
- }
- if (!bytes || !max_bit) {
- return 0;
- }
-
- im = gdImageCreate(width, height);
- gdImageColorAllocate(im, 255, 255, 255);
- gdImageColorAllocate(im, 0, 0, 0);
- h[2] = '\0';
- h[4] = '\0';
- for (i = 0; i < bytes; i++) {
- while (1) {
- if ((ch=getc(fd)) == EOF) {
- fail = 1;
- break;
- }
- if (ch == 'x') {
- break;
- }
- }
- if (fail) {
- break;
- }
- /* Get hex value */
- if ((ch=getc(fd)) == EOF) {
- break;
- }
- h[0] = ch;
- if ((ch=getc(fd)) == EOF) {
- break;
- }
- h[1] = ch;
- if (max_bit == 32768) {
- if ((ch=getc(fd)) == EOF) {
- break;
- }
- h[2] = ch;
- if ((ch=getc(fd)) == EOF) {
- break;
- }
- h[3] = ch;
- }
- sscanf(h, "%x", &b);
- for (bit = 1; bit <= max_bit; bit = bit << 1) {
- gdImageSetPixel(im, x++, y, (b & bit) ? 1 : 0);
- if (x == im->sx) {
- x = 0;
- y++;
- if (y == im->sy) {
- return im;
- }
- break;
- }
- }
- }
-
- php_gd_error("EOF before image was complete\n");
- gdImageDestroy(im);
- return 0;
-}
-/* }}} */
-
-/* {{{ gdCtxPrintf */
-void gdCtxPrintf(gdIOCtx * out, const char *format, ...)
-{
- char *buf;
- int len;
- va_list args;
-
- va_start(args, format);
- len = vspprintf(&buf, 0, format, args);
- va_end(args);
- out->putBuf(out, buf, len);
- efree(buf);
-}
-/* }}} */
-
-/* {{{ gdImageXbmCtx */
-void gdImageXbmCtx(gdImagePtr image, char* file_name, int fg, gdIOCtx * out)
-{
- int x, y, c, b, sx, sy, p;
- char *name, *f;
- size_t i, l;
-
- name = file_name;
- if ((f = strrchr(name, '/')) != NULL) name = f+1;
- if ((f = strrchr(name, '\\')) != NULL) name = f+1;
- name = estrdup(name);
- if ((f = strrchr(name, '.')) != NULL && !strcasecmp(f, ".XBM")) *f = '\0';
- if ((l = strlen(name)) == 0) {
- efree(name);
- name = estrdup("image");
- } else {
- for (i=0; i<l; i++) {
- /* only in C-locale isalnum() would work */
- if (!isupper(name[i]) && !islower(name[i]) && !isdigit(name[i])) {
- name[i] = '_';
- }
- }
- }
-
- gdCtxPrintf(out, "#define %s_width %d\n", name, gdImageSX(image));
- gdCtxPrintf(out, "#define %s_height %d\n", name, gdImageSY(image));
- gdCtxPrintf(out, "static unsigned char %s_bits[] = {\n ", name);
-
- efree(name);
-
- b = 1;
- p = 0;
- c = 0;
- sx = gdImageSX(image);
- sy = gdImageSY(image);
- for (y = 0; y < sy; y++) {
- for (x = 0; x < sx; x++) {
- if (gdImageGetPixel(image, x, y) == fg) {
- c |= b;
- }
- if ((b == 128) || (x == sx && y == sy)) {
- b = 1;
- if (p) {
- gdCtxPrintf(out, ", ");
- if (!(p%12)) {
- gdCtxPrintf(out, "\n ");
- p = 12;
- }
- }
- p++;
- gdCtxPrintf(out, "0x%02X", c);
- c = 0;
- } else {
- b <<= 1;
- }
- }
- }
- gdCtxPrintf(out, "};\n");
-}
-/* }}} */
-
-/*
- * 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/gd/php_gd.h b/ext/gd/php_gd.h
deleted file mode 100644
index a49e9a6caa..0000000000
--- a/ext/gd/php_gd.h
+++ /dev/null
@@ -1,189 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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. |
- +----------------------------------------------------------------------+
- | Authors: Rasmus Lerdorf <rasmus@php.net> |
- | Stig Bakken <ssb@php.net> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifndef PHP_GD_H
-#define PHP_GD_H
-
-#define HAVE_GDIMAGECREATEFROMPNG 1
-
-#if HAVE_LIBTTF|HAVE_LIBFREETYPE
-#define ENABLE_GD_TTF
-#endif
-
-#if HAVE_LIBGD
-
-#define PHP_GDIMG_TYPE_GIF 1
-#define PHP_GDIMG_TYPE_PNG 2
-#define PHP_GDIMG_TYPE_JPG 3
-#define PHP_GDIMG_TYPE_WBM 4
-#define PHP_GDIMG_TYPE_XBM 5
-#define PHP_GDIMG_TYPE_XPM 6
-#define PHP_GDIMG_CONVERT_WBM 7
-#define PHP_GDIMG_TYPE_GD 8
-#define PHP_GDIMG_TYPE_GD2 9
-#define PHP_GDIMG_TYPE_GD2PART 10
-
-#ifdef PHP_WIN32
-#define PHP_GD_API __declspec(dllexport)
-#else
-#define PHP_GD_API
-#endif
-
-PHPAPI extern const char php_sig_gif[3];
-PHPAPI extern const char php_sig_jpg[3];
-PHPAPI extern const char php_sig_png[3];
-
-extern zend_module_entry gd_module_entry;
-#define phpext_gd_ptr &gd_module_entry
-
-/* gd.c functions */
-PHP_MINFO_FUNCTION(gd);
-PHP_MINIT_FUNCTION(gd);
-PHP_MSHUTDOWN_FUNCTION(gd);
-#if HAVE_LIBGD20 && HAVE_GD_STRINGFT
-PHP_RSHUTDOWN_FUNCTION(gd);
-#endif
-
-PHP_FUNCTION(gd_info);
-PHP_FUNCTION(imagearc);
-PHP_FUNCTION(imageellipse);
-PHP_FUNCTION(imagechar);
-PHP_FUNCTION(imagecharup);
-PHP_FUNCTION(imageistruecolor);
-PHP_FUNCTION(imagecolorallocate);
-PHP_FUNCTION(imagepalettecopy);
-PHP_FUNCTION(imagecolorat);
-PHP_FUNCTION(imagecolorclosest);
-PHP_FUNCTION(imagecolorclosesthwb);
-PHP_FUNCTION(imagecolordeallocate);
-PHP_FUNCTION(imagecolorresolve);
-PHP_FUNCTION(imagecolorexact);
-PHP_FUNCTION(imagecolorset);
-PHP_FUNCTION(imagecolorstotal);
-PHP_FUNCTION(imagecolorsforindex);
-PHP_FUNCTION(imagecolortransparent);
-PHP_FUNCTION(imagecopy);
-PHP_FUNCTION(imagecopymerge);
-PHP_FUNCTION(imagecopyresized);
-PHP_FUNCTION(imagetypes);
-PHP_FUNCTION(imagecreate);
-PHP_FUNCTION(imageftbbox);
-PHP_FUNCTION(imagefttext);
-
-#ifdef HAVE_LIBGD20
-PHP_FUNCTION(imagecreatetruecolor);
-PHP_FUNCTION(imagetruecolortopalette);
-PHP_FUNCTION(imagesetthickness);
-PHP_FUNCTION(imagefilledellipse);
-PHP_FUNCTION(imagefilledarc);
-PHP_FUNCTION(imagealphablending);
-PHP_FUNCTION(imagesavealpha);
-PHP_FUNCTION(imagecolorallocatealpha);
-PHP_FUNCTION(imagecolorresolvealpha);
-PHP_FUNCTION(imagecolorclosestalpha);
-PHP_FUNCTION(imagecolorexactalpha);
-PHP_FUNCTION(imagecopyresampled);
-#endif
-
-#ifdef HAVE_GD_BUNDLED
-PHP_FUNCTION(imagerotate);
-PHP_FUNCTION(imageantialias);
-#endif
-
-PHP_FUNCTION(imagesetthickness);
-PHP_FUNCTION(imagecopymergegray);
-PHP_FUNCTION(imagesetbrush);
-PHP_FUNCTION(imagesettile);
-PHP_FUNCTION(imagesetstyle);
-
-PHP_FUNCTION(imagecreatefromstring);
-PHP_FUNCTION(imagecreatefromgif);
-PHP_FUNCTION(imagecreatefromjpeg);
-PHP_FUNCTION(imagecreatefromxbm);
-PHP_FUNCTION(imagecreatefrompng);
-PHP_FUNCTION(imagecreatefromwbmp);
-PHP_FUNCTION(imagecreatefromgd);
-PHP_FUNCTION(imagecreatefromgd2);
-PHP_FUNCTION(imagecreatefromgd2part);
-#if defined(HAVE_GD_XPM) && defined(HAVE_GD_BUNDLED)
-PHP_FUNCTION(imagecreatefromxpm);
-#endif
-
-PHP_FUNCTION(imagegammacorrect);
-PHP_FUNCTION(imagedestroy);
-PHP_FUNCTION(imagefill);
-PHP_FUNCTION(imagefilledpolygon);
-PHP_FUNCTION(imagefilledrectangle);
-PHP_FUNCTION(imagefilltoborder);
-PHP_FUNCTION(imagefontwidth);
-PHP_FUNCTION(imagefontheight);
-
-PHP_FUNCTION(imagegif );
-PHP_FUNCTION(imagejpeg );
-PHP_FUNCTION(imagepng);
-PHP_FUNCTION(imagewbmp);
-PHP_FUNCTION(imagegd);
-PHP_FUNCTION(imagegd2);
-
-PHP_FUNCTION(imageinterlace);
-PHP_FUNCTION(imageline);
-PHP_FUNCTION(imageloadfont);
-PHP_FUNCTION(imagepolygon);
-PHP_FUNCTION(imagerectangle);
-PHP_FUNCTION(imagesetpixel);
-PHP_FUNCTION(imagestring);
-PHP_FUNCTION(imagestringup);
-PHP_FUNCTION(imagesx);
-PHP_FUNCTION(imagesy);
-PHP_FUNCTION(imagedashedline);
-PHP_FUNCTION(imagettfbbox);
-PHP_FUNCTION(imagettftext);
-PHP_FUNCTION(imagepsloadfont);
-/*
-PHP_FUNCTION(imagepscopyfont);
-*/
-PHP_FUNCTION(imagepsfreefont);
-PHP_FUNCTION(imagepsencodefont);
-PHP_FUNCTION(imagepsextendfont);
-PHP_FUNCTION(imagepsslantfont);
-PHP_FUNCTION(imagepstext);
-PHP_FUNCTION(imagepsbbox);
-
-PHP_FUNCTION(jpeg2wbmp);
-PHP_FUNCTION(png2wbmp);
-PHP_FUNCTION(image2wbmp);
-
-#if HAVE_GD_BUNDLED
-PHP_FUNCTION(imagelayereffect);
-PHP_FUNCTION(imagecolormatch);
-PHP_FUNCTION(imagefilter);
-PHP_FUNCTION(imagexbm);
-#endif
-
-PHP_GD_API int phpi_get_le_gd(void);
-
-#else
-
-#define phpext_gd_ptr NULL
-
-#endif
-
-#endif /* PHP_GD_H */
diff --git a/ext/gd/tests/bug19366.phpt b/ext/gd/tests/bug19366.phpt
deleted file mode 100644
index 83dfa63100..0000000000
--- a/ext/gd/tests/bug19366.phpt
+++ /dev/null
@@ -1,53 +0,0 @@
---TEST--
-gdimagefill() function (Bug #19366 (fixed in bundled libgd))
---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
-echo "Alive: create image\n";
-$width = 50;
-$height = 100;
-$ImHandle = imagecreate($width,$height);
-
-echo "Alive: Define colors\n";
-$MyBlue = imagecolorAllocate($ImHandle, 0, 0, 255);
-$MyRed = imagecolorAllocate($ImHandle, 255, 0, 0);
-$MyWhite = imagecolorAllocate($ImHandle, 255, 255, 255);
-$MyBlack = imagecolorAllocate($ImHandle, 0, 0, 0);
-
-echo "Alive: Draw\n";
-ImageFill($ImHandle,0,0,$MyBlack);
-ImageLine($ImHandle,20,20,180,20,$MyWhite);
-ImageLine($ImHandle,20,20,20,70,$MyBlue);
-ImageLine($ImHandle,20,70,180,70,$MyRed);
-ImageLine($ImHandle,180,20,180,45,$MyWhite);
-ImageLine($ImHandle,180,70,180,45,$MyRed);
-ImageLine($ImHandle,20,20,100,45,$MyBlue);
-ImageLine($ImHandle,20,70,100,45,$MyBlue);
-ImageLine($ImHandle,100,45,180,45,$MyRed);
-ImageFill($ImHandle,21,45,$MyBlue);
-ImageFill($ImHandle,100,69,$MyRed);
-ImageFill($ImHandle,100,21,$MyWhite);
-
-echo "Alive: ImageString\n";
-ImageString($ImHandle,4,40,75,"Czech Republic",$MyWhite);
-
-echo "Alive: Send to browser\n";
-//Header("Content-type: image/PNG");
-//ImagePNG($ImHandle);
-
-echo "Alive: Free resources\n";
-imagedestroy($ImHandle);
-echo "Alive: Done\n";
-?>
---EXPECT--
-Alive: create image
-Alive: Define colors
-Alive: Draw
-Alive: ImageString
-Alive: Send to browser
-Alive: Free resources
-Alive: Done
diff --git a/ext/gd/tests/bug22544.phpt b/ext/gd/tests/bug22544.phpt
deleted file mode 100644
index 3c21f0b3c9..0000000000
--- a/ext/gd/tests/bug22544.phpt
+++ /dev/null
@@ -1,26 +0,0 @@
---TEST--
-Bug #22544 (TrueColor transparency in PNG images).
---SKIPIF--
-<?php
- if (!extension_loaded('gd')) {
- die("skip gd extension not available\n");
- }
- if (!GD_BUNDLED) {
- die('skip external GD libraries may fail');
- }
-?>
---FILE--
-<?php
- $dest = dirname(realpath(__FILE__)) . '/bug22544.png';
- @unlink($dest);
- $image = imageCreateTruecolor(640, 100);
- $transparent = imageColorAllocate($image, 0, 0, 0);
- $red = imageColorAllocate($image, 255, 50, 50);
- imageColorTransparent($image, $transparent);
- imageFilledRectangle($image, 0, 0, 640-1, 100-1, $transparent);
- imagePng($image, $dest);
- echo md5_file($dest) . "\n";
- @unlink($dest);
-?>
---EXPECT--
-10a57d09a2c63fad87b85b38d6b258d6
diff --git a/ext/gd/tests/bug24155.phpt b/ext/gd/tests/bug24155.phpt
deleted file mode 100644
index 3bcc8974a7..0000000000
--- a/ext/gd/tests/bug24155.phpt
+++ /dev/null
@@ -1,26 +0,0 @@
---TEST--
-Bug #24155 (gdImageRotate270 rotation problem).
---SKIPIF--
-<?php
- if (!extension_loaded('gd')) {
- die("skip gd extension not available\n");
- }
- if (!GD_BUNDLED) {
- die('skip external GD libraries may fail');
- }
-?>
---FILE--
-<?php
- $dest = dirname(realpath(__FILE__)) . '/bug24155.png';
- @unlink($dest);
-
- $im = imagecreatetruecolor(30, 50);
- imagefill($im, 0, 0, (16777215 - 255));
- $im = imagerotate($im, 270, 255);
- imagepng($im, $dest);
-
- echo md5_file($dest) . "\n";
- @unlink($dest);
-?>
---EXPECT--
-cc867fd65c30883463ce58d0341f0997
diff --git a/ext/gd/tests/bug24594.phpt b/ext/gd/tests/bug24594.phpt
deleted file mode 100644
index e7b9a653f2..0000000000
--- a/ext/gd/tests/bug24594.phpt
+++ /dev/null
@@ -1,85 +0,0 @@
---TEST--
-Bug #24594 (Filling an area using tiles).
---SKIPIF--
-<?php
- if (!extension_loaded('gd')) {
- die("skip gd extension not available\n");
- }
- if (!GD_BUNDLED) {
- die('skip external GD libraries may fail');
- }
-?>
---FILE--
-<?php
- $tile = imagecreate(36,36);
- $base = imagecreate(150,150);
- $white = imagecolorallocate($tile,255,255,255);
- $black = imagecolorallocate($tile,0,0,0);
- $white = imagecolorallocate($base,255,255,255);
- $black = imagecolorallocate($base,0,0,0);
-
- /* create the dots pattern */
- for ($x=0;$x<36;$x+=2) {
- for ($y=0;$y<36;$y+=2) {
- imagesetpixel($tile,$x,$y,$black);
- }
- }
-
- imagesettile($base,$tile);
- imagerectangle($base, 9,9,139,139,$black);
- imageline($base, 9,9,139,139,$black);
- imagefill($base,11,12,IMG_COLOR_TILED);
-
- $res = imagecolorat($base,0,10)==$black?'1':'0';
- $res .= imagecolorat($base,0,20)==$black?'1':'0';
- $res .= imagecolorat($base,0,30)==$black?'1':'0';
- $res .= imagecolorat($base,0,40)==$black?'1':'0';
- $res .= imagecolorat($base,0,50)==$black?'1':'0';
- $res .= imagecolorat($base,0,60)==$black?'1':'0';
-
- $res .= imagecolorat($base,11,12)==$white?'1':'0';
- $res .= imagecolorat($base,12,13)==$white?'1':'0';
- $res .= imagecolorat($base,13,14)==$white?'1':'0';
- $res .= imagecolorat($base,14,15)==$white?'1':'0';
- $res .= imagecolorat($base,15,16)==$white?'1':'0';
- $res .= imagecolorat($base,16,17)==$white?'1':'0';
-
- $res .= imagecolorat($base,10,12)==$black?'1':'0';
- $res .= imagecolorat($base,11,13)==$black?'1':'0';
- $res .= imagecolorat($base,12,14)==$black?'1':'0';
- $res .= imagecolorat($base,13,15)==$black?'1':'0';
- $res .= imagecolorat($base,14,16)==$black?'1':'0';
- $res .= imagecolorat($base,15,17)==$black?'1':'0';
- echo "$res\n";
-
- imagefilledrectangle($base,0,0,149,149,$white);
- imagerectangle($base, 9,9,139,139,$black);
- imageline($base, 9,9,139,139,$black);
- imagefill($base,0,0,IMG_COLOR_TILED);
-
- $res = imagecolorat($base,0,10)==$black?'1':'0';
- $res .= imagecolorat($base,0,20)==$black?'1':'0';
- $res .= imagecolorat($base,0,30)==$black?'1':'0';
- $res .= imagecolorat($base,0,40)==$black?'1':'0';
- $res .= imagecolorat($base,0,50)==$black?'1':'0';
- $res .= imagecolorat($base,0,60)==$black?'1':'0';
-
- $res .= imagecolorat($base,11,12)==$white?'1':'0';
- $res .= imagecolorat($base,12,13)==$white?'1':'0';
- $res .= imagecolorat($base,13,14)==$white?'1':'0';
- $res .= imagecolorat($base,14,15)==$white?'1':'0';
- $res .= imagecolorat($base,15,16)==$white?'1':'0';
- $res .= imagecolorat($base,16,17)==$white?'1':'0';
-
- $res .= imagecolorat($base,0,16)==$black?'1':'0';
- $res .= imagecolorat($base,2,42)==$black?'1':'0';
- $res .= imagecolorat($base,4,44)==$black?'1':'0';
- $res .= imagecolorat($base,146,146)==$black?'1':'0';
- $res .= imagecolorat($base,148,146)==$black?'1':'0';
- $res .= imagecolorat($base,0,0)==$black?'1':'0';
-
- echo "$res\n";
-?>
---EXPECT--
-000000111111101010
-111111111111111111
diff --git a/ext/gd/tests/bug27582_1.phpt b/ext/gd/tests/bug27582_1.phpt
deleted file mode 100644
index acc9670080..0000000000
--- a/ext/gd/tests/bug27582_1.phpt
+++ /dev/null
@@ -1,24 +0,0 @@
---TEST--
-gdimagefill() function (Bug #19366 (fixed in bundled libgd))
---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
-/* $id$ */
-$dest = dirname(realpath(__FILE__)) . '/bug27582.png';
-@unlink($dest);
-$im = ImageCreateTrueColor(10, 10);
-imagealphablending($im, true);
-imagesavealpha($im, false);
-$bordercolor=ImageColorAllocateAlpha($im, 0, 0, 0, 2);
-$color = ImageColorAllocateAlpha($im, 0, 0, 0, 1);
-ImageFillToBorder($im, 5, 5, $bordercolor, $color);
-imagepng($im, $dest);
-echo md5_file($dest) . "\n";
-@unlink($dest);
-?>
---EXPECT--
-08287f8f5d406946009df5f04ca83dc0
diff --git a/ext/gd/tests/bug28147.phpt b/ext/gd/tests/bug28147.phpt
deleted file mode 100644
index b3551a6393..0000000000
--- a/ext/gd/tests/bug28147.phpt
+++ /dev/null
@@ -1,27 +0,0 @@
---TEST--
-Bug #28147 (Crash with anti-aliased line)
---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
-//
-// This script will generate a Seg Fault on Linux
-//
-$im = imagecreatetruecolor(300, 300);
-$w = imagecolorallocate($im, 255, 255, 255);
-$red = imagecolorallocate($im, 255, 0, 0);
-
-imagefilledrectangle($im,0,0,299,299,$w);
-
-imageantialias($im,true);
-imageline($im, 299, 299, 0, 299, $red);
-
-imagedestroy($im);
-
-echo "Alive\n";
-?>
---EXPECT--
-Alive
diff --git a/ext/gd/tests/conv_test.gif b/ext/gd/tests/conv_test.gif
deleted file mode 100644
index 40aa4331cc..0000000000
--- a/ext/gd/tests/conv_test.gif
+++ /dev/null
Binary files differ
diff --git a/ext/gd/tests/conv_test.jpeg b/ext/gd/tests/conv_test.jpeg
deleted file mode 100644
index 7283d1a475..0000000000
--- a/ext/gd/tests/conv_test.jpeg
+++ /dev/null
Binary files differ
diff --git a/ext/gd/tests/conv_test.png b/ext/gd/tests/conv_test.png
deleted file mode 100644
index f8c12dfd06..0000000000
--- a/ext/gd/tests/conv_test.png
+++ /dev/null
Binary files differ
diff --git a/ext/gd/tests/conv_test.xbm b/ext/gd/tests/conv_test.xbm
deleted file mode 100644
index a91667187f..0000000000
--- a/ext/gd/tests/conv_test.xbm
+++ /dev/null
@@ -1,4 +0,0 @@
-#define conv_test_xbm_width 16
-#define conv_test_xbm_height 5
-static unsigned char conv_test_xbm_bits[] = {
- 0x4c, 0x0d, 0x54, 0x15, 0xcc, 0x0d, 0x44, 0x05, 0x44, 0x05}; \ No newline at end of file
diff --git a/ext/gd/tests/conv_test.xpm b/ext/gd/tests/conv_test.xpm
deleted file mode 100644
index b1126c1ba7..0000000000
--- a/ext/gd/tests/conv_test.xpm
+++ /dev/null
@@ -1,1588 +0,0 @@
-/* XPM */
-static char * conv_test_xpm[] = {
-"50 50 1535 2",
-" c None",
-". c #F81010",
-"+ c #F71112",
-"@ c #F51314",
-"# c #F31517",
-"$ c #F01619",
-"% c #EE181C",
-"& c #EC191E",
-"* c #E91B21",
-"= c #E71D24",
-"- c #E41E26",
-"; c #E22028",
-"> c #E0212B",
-", c #DE232D",
-"' c #DB2430",
-") c #D92632",
-"! c #D62835",
-"~ c #D42938",
-"{ c #D22B3A",
-"] c #CF2C3D",
-"^ c #CD2E3F",
-"/ c #CB2F41",
-"( c #C93144",
-"_ c #C63346",
-": c #C43449",
-"< c #C1364C",
-"[ c #BF374E",
-"} c #BD3951",
-"| c #BB3B53",
-"1 c #B83C55",
-"2 c #B63E58",
-"3 c #B43F5A",
-"4 c #B1415D",
-"5 c #AF4360",
-"6 c #AC4462",
-"7 c #AA4665",
-"8 c #A84767",
-"9 c #A6496A",
-"0 c #A34A6C",
-"a c #A14C6E",
-"b c #9F4D71",
-"c c #9C4F74",
-"d c #9A5176",
-"e c #975279",
-"f c #95547B",
-"g c #93557E",
-"h c #F71212",
-"i c #F51315",
-"j c #F21517",
-"k c #F0161A",
-"l c #EB191E",
-"m c #E22029",
-"n c #DD232E",
-"o c #D92633",
-"p c #D42A38",
-"q c #CF2D3D",
-"r c #CD2F3F",
-"s c #CB3142",
-"t c #C83244",
-"u c #C63347",
-"v c #C43549",
-"w c #BF384E",
-"x c #BA3B53",
-"y c #B83C56",
-"z c #B33F5B",
-"A c #A5496A",
-"B c #A14C6F",
-"C c #9E4E71",
-"D c #93567E",
-"E c #905780",
-"F c #F41315",
-"G c #EB191F",
-"H c #E61D24",
-"I c #DB2530",
-"J c #D92733",
-"K c #D62936",
-"L c #D22C3A",
-"M c #D02E3D",
-"N c #CD303F",
-"O c #C93344",
-"P c #C73447",
-"Q c #C53649",
-"R c #C2384C",
-"S c #C0394F",
-"T c #BD3A51",
-"U c #BB3C53",
-"V c #B83D56",
-"W c #B63F58",
-"X c #B3405B",
-"Y c #AE4360",
-"Z c #AC4463",
-"` c #A74767",
-" . c #A34B6C",
-".. c #995177",
-"+. c #975379",
-"@. c #95547C",
-"#. c #8E5983",
-"$. c #F71213",
-"%. c #ED181C",
-"&. c #EB1A1F",
-"*. c #E91B22",
-"=. c #E41E27",
-"-. c #DF222C",
-";. c #DB2630",
-">. c #D82833",
-",. c #D42B38",
-"'. c #D22D3B",
-"). c #D02F3D",
-"!. c #CE3040",
-"~. c #CB3242",
-"{. c #C93444",
-"]. c #C73547",
-"^. c #C53749",
-"/. c #C03A4F",
-"(. c #BE3B51",
-"_. c #BB3D54",
-":. c #B93E56",
-"<. c #B64059",
-"[. c #B4415B",
-"}. c #B2425D",
-"|. c #AF4460",
-"1. c #AC4563",
-"2. c #A74868",
-"3. c #A34B6D",
-"4. c #A04C6F",
-"5. c #9E4E72",
-"6. c #9C5074",
-"7. c #92567E",
-"8. c #905781",
-"9. c #8B5B86",
-"0. c #F61213",
-"a. c #F21518",
-"b. c #F0171A",
-"c. c #ED181D",
-"d. c #E81B22",
-"e. c #E41F27",
-"f. c #E12029",
-"g. c #DD242E",
-"h. c #DB2631",
-"i. c #D62A36",
-"j. c #D42C38",
-"k. c #D22E3B",
-"l. c #D0303D",
-"m. c #CD3140",
-"n. c #CB3342",
-"o. c #C93545",
-"p. c #C73647",
-"q. c #C5384A",
-"r. c #C3394C",
-"s. c #C03B4F",
-"t. c #BE3D51",
-"u. c #BC3E54",
-"v. c #BA3F56",
-"w. c #B74159",
-"x. c #B5425B",
-"y. c #B2435E",
-"z. c #B04560",
-"A. c #AD4663",
-"B. c #AA4765",
-"C. c #A84868",
-"D. c #9B5075",
-"E. c #94547C",
-"F. c #905881",
-"G. c #895C88",
-"H. c #F81111",
-"I. c #F41415",
-"J. c #EF171A",
-"K. c #E81C22",
-"L. c #E61D25",
-"M. c #DA2731",
-"N. c #D92933",
-"O. c #D42D39",
-"P. c #D0303E",
-"Q. c #CD3240",
-"R. c #C33A4D",
-"S. c #BE3D52",
-"T. c #B94056",
-"U. c #B04561",
-"V. c #AE4763",
-"W. c #AB4866",
-"X. c #A94A68",
-"Y. c #A64B6B",
-"Z. c #A34C6D",
-"`. c #A14D6F",
-" + c #97537A",
-".+ c #94557C",
-"++ c #92567F",
-"@+ c #8D5983",
-"#+ c #865E8B",
-"$+ c #F41416",
-"%+ c #F11518",
-"&+ c #EF171B",
-"*+ c #E31F27",
-"=+ c #E1202A",
-"-+ c #DF232C",
-";+ c #DC252F",
-">+ c #D62B36",
-",+ c #D22F3B",
-"'+ c #CF303E",
-")+ c #CB3343",
-"!+ c #C73648",
-"~+ c #C23A4D",
-"{+ c #BB3E54",
-"]+ c #B94057",
-"^+ c #B5425C",
-"/+ c #B2445E",
-"(+ c #AC4866",
-"_+ c #AA4A68",
-":+ c #A74C6B",
-"<+ c #A44D6D",
-"[+ c #A24E70",
-"}+ c #9F4F72",
-"|+ c #9C5075",
-"1+ c #995277",
-"2+ c #96537A",
-"3+ c #8D5984",
-"4+ c #895C89",
-"5+ c #84608E",
-"6+ c #ED191D",
-"7+ c #EA1A20",
-"8+ c #E1212A",
-"9+ c #D92934",
-"0+ c #C83545",
-"a+ c #B74259",
-"b+ c #B4425C",
-"c+ c #AE4764",
-"d+ c #AC4966",
-"e+ c #A54D6D",
-"f+ c #A34F70",
-"g+ c #A05072",
-"h+ c #9D5275",
-"i+ c #9A5378",
-"j+ c #97547A",
-"k+ c #8F5881",
-"l+ c #885D89",
-"m+ c #865E8C",
-"n+ c #816191",
-"o+ c #F11618",
-"p+ c #EC191D",
-"q+ c #E81C23",
-"r+ c #E51E25",
-"s+ c #E31F28",
-"t+ c #D92A34",
-"u+ c #D62C37",
-"v+ c #D12F3C",
-"w+ c #CD3241",
-"x+ c #CA3343",
-"y+ c #C73748",
-"z+ c #C03B50",
-"A+ c #BD3D52",
-"B+ c #BB3F55",
-"C+ c #B6425A",
-"D+ c #B4435C",
-"E+ c #AF4661",
-"F+ c #AD4764",
-"G+ c #A94A69",
-"H+ c #A54D6E",
-"I+ c #9E5275",
-"J+ c #9B5478",
-"K+ c #99557A",
-"L+ c #96567D",
-"M+ c #93577F",
-"N+ c #905882",
-"O+ c #8D5A84",
-"P+ c #8B5B87",
-"Q+ c #83608E",
-"R+ c #816291",
-"S+ c #7F6393",
-"T+ c #E71C23",
-"U+ c #DC262F",
-"V+ c #DA2832",
-"W+ c #D82A34",
-"X+ c #D32D39",
-"Y+ c #CA3443",
-"Z+ c #C83546",
-"`+ c #C4394B",
-" @ c #C23B4E",
-".@ c #C03D51",
-"+@ c #BE3F54",
-"@@ c #BC4157",
-"#@ c #BA435A",
-"$@ c #B7445C",
-"%@ c #B5455F",
-"&@ c #B24661",
-"*@ c #B04763",
-"=@ c #AE4865",
-"-@ c #A24F70",
-";@ c #A05173",
-">@ c #97577D",
-",@ c #94587F",
-"'@ c #915982",
-")@ c #8E5B84",
-"!@ c #865F8C",
-"~@ c #7C6596",
-"{@ c #E51E26",
-"]@ c #E0212A",
-"^@ c #D32D3A",
-"/@ c #CF313E",
-"(@ c #CC3241",
-"_@ c #C63749",
-":@ c #C43A4D",
-"<@ c #C23D50",
-"[@ c #C03F53",
-"}@ c #BE4157",
-"|@ c #BC4359",
-"1@ c #BA455C",
-"2@ c #B8465F",
-"3@ c #B64861",
-"4@ c #B44964",
-"5@ c #B14A66",
-"6@ c #AF4B68",
-"7@ c #AD4C6A",
-"8@ c #AA4D6B",
-"9@ c #A74E6D",
-"0@ c #A54E6E",
-"a@ c #9D5276",
-"b@ c #99567B",
-"c@ c #96577D",
-"d@ c #945980",
-"e@ c #925A82",
-"f@ c #8F5C84",
-"g@ c #8C5C87",
-"h@ c #895E89",
-"i@ c #83608F",
-"j@ c #7E6394",
-"k@ c #7A6698",
-"l@ c #EA1B20",
-"m@ c #E21F28",
-"n@ c #DC2530",
-"o@ c #D52C37",
-"p@ c #D32E3A",
-"q@ c #CE313F",
-"r@ c #CA3444",
-"s@ c #C83646",
-"t@ c #C6394A",
-"u@ c #C53B4E",
-"v@ c #C33E52",
-"w@ c #C14155",
-"x@ c #BF4358",
-"y@ c #BD455C",
-"z@ c #BB475F",
-"A@ c #B94961",
-"B@ c #B74B64",
-"C@ c #B54C66",
-"D@ c #B34D68",
-"E@ c #B04F6B",
-"F@ c #AE4F6C",
-"G@ c #AC506E",
-"H@ c #A95170",
-"I@ c #A65272",
-"J@ c #A35273",
-"K@ c #A05274",
-"L@ c #9D5376",
-"M@ c #905C85",
-"N@ c #8E5E87",
-"O@ c #8A5F8A",
-"P@ c #87608C",
-"Q@ c #84618F",
-"R@ c #7E6494",
-"S@ c #7A6799",
-"T@ c #77689B",
-"U@ c #D92832",
-"V@ c #D82A35",
-"W@ c #C83647",
-"X@ c #C6394B",
-"Y@ c #C53D4F",
-"Z@ c #C33F53",
-"`@ c #C14257",
-" # c #C0445A",
-".# c #BE475D",
-"+# c #BC4961",
-"@# c #BA4B63",
-"## c #B84D66",
-"$# c #B64F69",
-"%# c #B4506B",
-"&# c #B2526D",
-"*# c #AF536F",
-"=# c #AD5471",
-"-# c #AB5473",
-";# c #A85574",
-"># c #A55576",
-",# c #A25678",
-"'# c #9F5679",
-")# c #9C567A",
-"!# c #925B82",
-"~# c #8C5F8A",
-"{# c #88618D",
-"]# c #86628F",
-"^# c #826392",
-"/# c #7F6494",
-"(# c #796799",
-"_# c #756A9E",
-":# c #D72A35",
-"<# c #D52C38",
-"[# c #CC3342",
-"}# c #C83747",
-"|# c #C63A4B",
-"1# c #C53D50",
-"2# c #C34054",
-"3# c #C24358",
-"4# c #C0455B",
-"5# c #BE485F",
-"6# c #BC4B62",
-"7# c #BB4D65",
-"8# c #B94F68",
-"9# c #B7516B",
-"0# c #B5536E",
-"a# c #B35470",
-"b# c #B05672",
-"c# c #AE5774",
-"d# c #AD5876",
-"e# c #AA5878",
-"f# c #A75979",
-"g# c #A4597A",
-"h# c #A15A7C",
-"i# c #9E5A7D",
-"j# c #9B5A7E",
-"k# c #975A80",
-"l# c #945A81",
-"m# c #915B83",
-"n# c #8B5F8A",
-"o# c #89618D",
-"p# c #86638F",
-"q# c #846492",
-"r# c #806594",
-"s# c #7D6697",
-"t# c #77689C",
-"u# c #726CA1",
-"v# c #C63A4C",
-"w# c #C34154",
-"x# c #C0465C",
-"y# c #BE4960",
-"z# c #BD4C64",
-"A# c #BB4F67",
-"B# c #BA516A",
-"C# c #B8536D",
-"D# c #B65570",
-"E# c #B45772",
-"F# c #B25975",
-"G# c #B05A77",
-"H# c #AD5B79",
-"I# c #AC5C7B",
-"J# c #A95C7C",
-"K# c #A65D7E",
-"L# c #A35D7F",
-"M# c #A05D80",
-"N# c #9D5D81",
-"O# c #9A5D82",
-"P# c #965D83",
-"Q# c #935D85",
-"R# c #905D86",
-"S# c #8D5E88",
-"T# c #826694",
-"U# c #7E6797",
-"V# c #7B6899",
-"W# c #78699C",
-"X# c #706DA3",
-"Y# c #DF212B",
-"Z# c #D62935",
-"`# c #C43D50",
-" $ c #C34155",
-".$ c #C14459",
-"+$ c #C0475D",
-"@$ c #BF4A61",
-"#$ c #BD4D65",
-"$$ c #BC5068",
-"%$ c #BA536C",
-"&$ c #BA5870",
-"*$ c #B95C75",
-"=$ c #B85E79",
-"-$ c #B6607B",
-";$ c #B4617D",
-">$ c #B2627F",
-",$ c #B06380",
-"'$ c #AD6280",
-")$ c #A96080",
-"!$ c #A56082",
-"~$ c #A26183",
-"{$ c #9F6184",
-"]$ c #9C6185",
-"^$ c #996186",
-"/$ c #956187",
-"($ c #926088",
-"_$ c #8F6089",
-":$ c #8B608B",
-"<$ c #866390",
-"[$ c #826695",
-"}$ c #7F6897",
-"|$ c #7D6999",
-"1$ c #796A9C",
-"2$ c #766B9E",
-"3$ c #6F6EA4",
-"4$ c #6D6FA6",
-"5$ c #DB2531",
-"6$ c #D82733",
-"7$ c #CE3140",
-"8$ c #C93445",
-"9$ c #C5394B",
-"0$ c #C14359",
-"a$ c #BF4B61",
-"b$ c #BD4E66",
-"c$ c #BC5169",
-"d$ c #BC566D",
-"e$ c #BC5B74",
-"f$ c #B95C77",
-"g$ c #B85D78",
-"h$ c #B65F79",
-"i$ c #B4617C",
-"j$ c #B2627E",
-"k$ c #AE6483",
-"l$ c #AC6686",
-"m$ c #AB6888",
-"n$ c #A76787",
-"o$ c #A26487",
-"p$ c #9E6488",
-"q$ c #9B6489",
-"r$ c #98648A",
-"s$ c #94648B",
-"t$ c #91638C",
-"u$ c #8D638D",
-"v$ c #8A638E",
-"w$ c #846592",
-"x$ c #816695",
-"y$ c #7D699A",
-"z$ c #7A6B9C",
-"A$ c #776C9F",
-"B$ c #746DA1",
-"C$ c #706EA4",
-"D$ c #6B71A9",
-"E$ c #DA2531",
-"F$ c #D82633",
-"G$ c #C43C4F",
-"H$ c #C24054",
-"I$ c #C14358",
-"J$ c #BE4A61",
-"K$ c #BC516A",
-"L$ c #BD586F",
-"M$ c #BB5B76",
-"N$ c #BA5C76",
-"O$ c #B95F78",
-"P$ c #B8617B",
-"Q$ c #B6637E",
-"R$ c #B56580",
-"S$ c #B36783",
-"T$ c #B16885",
-"U$ c #AF6986",
-"V$ c #AC6988",
-"W$ c #A96989",
-"X$ c #A66A8D",
-"Y$ c #A56B8D",
-"Z$ c #9E688C",
-"`$ c #9A678D",
-" % c #96678E",
-".% c #93678F",
-"+% c #906690",
-"@% c #8C6691",
-"#% c #886692",
-"$% c #846593",
-"%% c #786C9F",
-"&% c #756EA2",
-"*% c #726FA4",
-"=% c #6E6FA7",
-"-% c #6872AB",
-";% c #D62836",
-">% c #D32B39",
-",% c #D02F3E",
-"'% c #C33B4E",
-")% c #C23F53",
-"!% c #C04358",
-"~% c #BF465C",
-"{% c #BA5D76",
-"]% c #B96079",
-"^% c #B9637D",
-"/% c #B96680",
-"(% c #B96883",
-"_% c #B86A86",
-":% c #B66C88",
-"<% c #B46D8A",
-"[% c #B06D8B",
-"}% c #AD6D8C",
-"|% c #AA6D8D",
-"1% c #A66D8E",
-"2% c #A26D91",
-"3% c #A06E92",
-"4% c #996A91",
-"5% c #956A91",
-"6% c #926992",
-"7% c #8F6993",
-"8% c #8B6994",
-"9% c #876895",
-"0% c #826896",
-"a% c #7F6898",
-"b% c #7C699A",
-"c% c #7A6B9D",
-"d% c #786D9F",
-"e% c #766EA2",
-"f% c #7370A4",
-"g% c #7070A7",
-"h% c #6C71A9",
-"i% c #6873AC",
-"j% c #6674AE",
-"k% c #D32A39",
-"l% c #D12D3B",
-"m% c #CF2F3E",
-"n% c #C13E52",
-"o% c #C04256",
-"p% c #BE455B",
-"q% c #BD4960",
-"r% c #BC4D65",
-"s% c #BB5069",
-"t% c #BB566E",
-"u% c #BA6079",
-"v% c #BA647E",
-"w% c #BB6882",
-"x% c #BD6B86",
-"y% c #BD6E89",
-"z% c #BE708C",
-"A% c #BC718E",
-"B% c #B9728F",
-"C% c #B57290",
-"D% c #B07191",
-"E% c #AC7191",
-"F% c #A67092",
-"G% c #A26F93",
-"H% c #9E7096",
-"I% c #9B7095",
-"J% c #946D95",
-"K% c #916C96",
-"L% c #8D6C96",
-"M% c #896B97",
-"N% c #856B98",
-"O% c #816A99",
-"P% c #7D6A9B",
-"Q% c #766FA2",
-"R% c #7470A4",
-"S% c #7172A7",
-"T% c #6E72A9",
-"U% c #6A73AC",
-"V% c #6376B1",
-"W% c #D02C3B",
-"X% c #CF2E3E",
-"Y% c #C03C50",
-"Z% c #BF4055",
-"`% c #BE445A",
-" & c #BC485F",
-".& c #BB4C63",
-"+& c #BA4F68",
-"@& c #BA536D",
-"#& c #BB5C75",
-"$& c #B95C76",
-"%& c #B9607A",
-"&& c #BC6882",
-"*& c #BF6C87",
-"=& c #C1708B",
-"-& c #C5778F",
-";& c #C97D92",
-">& c #C77F94",
-",& c #C27C95",
-"'& c #BB7896",
-")& c #B47696",
-"!& c #AE7596",
-"~& c #A87496",
-"{& c #A27396",
-"]& c #9D7297",
-"^& c #9B739A",
-"/& c #947098",
-"(& c #906F99",
-"_& c #8C6E9A",
-":& c #886E9B",
-"<& c #836D9B",
-"[& c #7F6D9C",
-"}& c #7B6C9D",
-"|& c #776D9F",
-"1& c #7470A5",
-"2& c #6F73AA",
-"3& c #6C74AC",
-"4& c #6875AE",
-"5& c #6476B1",
-"6& c #6178B3",
-"7& c #D02C3C",
-"8& c #CE2E3E",
-"9& c #CC3041",
-"0& c #C4384A",
-"a& c #BD4259",
-"b& c #BB465E",
-"c& c #BA4A62",
-"d& c #B94E67",
-"e& c #B8526B",
-"f& c #B95870",
-"g& c #B95D78",
-"h& c #B85F79",
-"i& c #C3738C",
-"j& c #CD8091",
-"k& c #D18695",
-"l& c #D18998",
-"m& c #D08A9B",
-"n& c #CE8A9B",
-"o& c #C9879B",
-"p& c #BB7D9B",
-"q& c #B1799A",
-"r& c #AA779A",
-"s& c #A37699",
-"t& c #9C759A",
-"u& c #98749C",
-"v& c #95759C",
-"w& c #8E719C",
-"x& c #8A709D",
-"y& c #86709E",
-"z& c #826F9F",
-"A& c #7D6FA0",
-"B& c #796FA1",
-"C& c #7370A5",
-"D& c #6C75AC",
-"E& c #6A76AF",
-"F& c #6677B1",
-"G& c #6278B4",
-"H& c #5E79B6",
-"I& c #CE2D3E",
-"J& c #CA3243",
-"K& c #C83446",
-"L& c #C4384B",
-"M& c #BF3C50",
-"N& c #BB4157",
-"O& c #BA445C",
-"P& c #B94861",
-"Q& c #B84C65",
-"R& c #B7506A",
-"S& c #B7546F",
-"T& c #B85D76",
-"U& c #B65E79",
-"V& c #B7627C",
-"W& c #B96681",
-"X& c #BC6B86",
-"Y& c #C1718B",
-"Z& c #D28897",
-"`& c #D991A0",
-" * c #DE98A9",
-".* c #DE9AAB",
-"+* c #D895A6",
-"@* c #CE8EA1",
-"#* c #C88A9F",
-"$* c #B57E9E",
-"%* c #AC7A9D",
-"&* c #A3789D",
-"** c #9C779D",
-"=* c #96769E",
-"-* c #9578A1",
-";* c #8D739F",
-">* c #8873A0",
-",* c #8472A0",
-"'* c #8072A2",
-")* c #7B71A3",
-"!* c #7771A4",
-"~* c #6F74AA",
-"{* c #6A77AF",
-"]* c #6778B1",
-"^* c #6379B4",
-"/* c #607AB7",
-"(* c #5C7BB9",
-"_* c #C93143",
-":* c #C63648",
-"<* c #BD3D53",
-"[* c #B9425A",
-"}* c #B74A63",
-"|* c #B64E68",
-"1* c #B5526D",
-"2* c #B55672",
-"3* c #B75F7A",
-"4* c #B5607B",
-"5* c #B6647F",
-"6* c #B86984",
-"7* c #C5788F",
-"8* c #E4A1B2",
-"9* c #ECB7C4",
-"0* c #ECBAC7",
-"a* c #E4A8BA",
-"b* c #D898AB",
-"c* c #CB8EA3",
-"d* c #BC86A2",
-"e* c #AD7DA1",
-"f* c #A47BA0",
-"g* c #9B79A0",
-"h* c #9578A0",
-"i* c #9379A4",
-"j* c #8C76A2",
-"k* c #8675A3",
-"l* c #8274A3",
-"m* c #7E73A4",
-"n* c #7973A5",
-"o* c #7573A6",
-"p* c #7172A8",
-"q* c #6E74AA",
-"r* c #6C75AD",
-"s* c #6878B2",
-"t* c #6579B4",
-"u* c #617BB7",
-"v* c #5D7BB9",
-"w* c #597DBC",
-"x* c #C73346",
-"y* c #C3384B",
-"z* c #C23A4E",
-"A* c #BA3F55",
-"B* c #B84158",
-"C* c #B7445D",
-"D* c #B64862",
-"E* c #B35874",
-"F* c #B5617C",
-"G* c #B3627D",
-"H* c #B46682",
-"I* c #B76B87",
-"J* c #BD708C",
-"K* c #C87E93",
-"L* c #D18999",
-"M* c #F9E0E6",
-"N* c #FAE6EB",
-"O* c #EEC2CE",
-"P* c #DDA1B5",
-"Q* c #CC91A8",
-"R* c #C18BA5",
-"S* c #AE7FA3",
-"T* c #A37DA2",
-"U* c #9A7BA2",
-"V* c #937AA3",
-"W* c #917BA6",
-"X* c #8B78A4",
-"Y* c #8476A5",
-"Z* c #8076A6",
-"`* c #7C75A7",
-" = c #7775A8",
-".= c #7375A9",
-"+= c #6778B2",
-"@= c #657AB4",
-"#= c #627BB7",
-"$= c #5F7CB9",
-"%= c #5B7DBC",
-"&= c #577EBE",
-"*= c #C3374B",
-"== c #C13A4E",
-"-= c #BF3C51",
-";= c #BD3E53",
-">= c #B6425B",
-",= c #B4465F",
-"'= c #B34A64",
-")= c #B24E69",
-"!= c #B2526E",
-"~= c #B15672",
-"{= c #B15A77",
-"]= c #B3627F",
-"^= c #B16380",
-"/= c #B26784",
-"(= c #B66D89",
-"_= c #BB728F",
-":= c #C77F95",
-"<= c #D08B9B",
-"[= c #FBEBF0",
-"}= c #EEC6D1",
-"|= c #DDA2B7",
-"1= c #CC93AA",
-"2= c #BF8CA7",
-"3= c #AC81A6",
-"4= c #A17FA5",
-"5= c #987DA5",
-"6= c #927BA5",
-"7= c #8F7CA8",
-"8= c #8879A7",
-"9= c #8278A8",
-"0= c #7E78A9",
-"a= c #7977AA",
-"b= c #7576AB",
-"c= c #7176AC",
-"d= c #6C76AD",
-"e= c #6977AF",
-"f= c #6779B2",
-"g= c #627CB7",
-"h= c #607DBA",
-"i= c #5C7EBC",
-"j= c #587FBF",
-"k= c #5580C1",
-"l= c #C2364B",
-"m= c #C0394E",
-"n= c #BF3B51",
-"o= c #BC3E53",
-"p= c #B3435D",
-"q= c #B24762",
-"r= c #B14B66",
-"s= c #AF5370",
-"t= c #AE5775",
-"u= c #AE5B79",
-"v= c #B16381",
-"w= c #AF6482",
-"x= c #B06986",
-"y= c #B36D8B",
-"z= c #B87290",
-"A= c #C17D96",
-"B= c #CE8A9C",
-"C= c #D895A7",
-"D= c #E5AFC2",
-"E= c #D79DB2",
-"F= c #C891AA",
-"G= c #BA8AA8",
-"H= c #A981A7",
-"I= c #9F80A7",
-"J= c #967EA7",
-"K= c #907DA8",
-"L= c #8D7EAB",
-"M= c #857AA9",
-"N= c #8079AA",
-"O= c #7B79AB",
-"P= c #7778AC",
-"Q= c #7378AD",
-"R= c #6E78AE",
-"S= c #6A77B0",
-"T= c #657AB5",
-"U= c #607EBA",
-"V= c #5D7EBC",
-"W= c #5A80BF",
-"X= c #5681C1",
-"Y= c #5282C4",
-"Z= c #BC3D53",
-"`= c #B14560",
-" - c #AF4864",
-".- c #AE4C69",
-"+- c #AE506D",
-"@- c #AD5472",
-"#- c #AD5877",
-"$- c #AD6585",
-"%- c #AD6988",
-"&- c #AF6E8C",
-"*- c #B37391",
-"=- c #BA7896",
-"-- c #C8889C",
-";- c #CE8EA2",
-">- c #DDA3B7",
-",- c #CC95AC",
-"'- c #C390AA",
-")- c #AF84A9",
-"!- c #A481A8",
-"~- c #9A80A8",
-"{- c #937FA9",
-"]- c #8D7DAA",
-"^- c #8B7FAD",
-"/- c #827BAB",
-"(- c #7D7BAC",
-"_- c #787AAD",
-":- c #757AAE",
-"<- c #7079B0",
-"[- c #6C79B1",
-"}- c #647AB5",
-"|- c #627CB8",
-"1- c #5D7FBD",
-"2- c #5B80BF",
-"3- c #5781C1",
-"4- c #5382C4",
-"5- c #5083C6",
-"6- c #BC3A51",
-"7- c #BB3C54",
-"8- c #BA3E56",
-"9- c #B74158",
-"0- c #AE4662",
-"a- c #AD4966",
-"b- c #AC4E6B",
-"c- c #AC5270",
-"d- c #AB5574",
-"e- c #AA5979",
-"f- c #AA5D7D",
-"g- c #AB6482",
-"h- c #AB6788",
-"i- c #AB6A89",
-"j- c #AC6E8E",
-"k- c #AF7292",
-"l- c #B37797",
-"m- c #BA7E9C",
-"n- c #C78AA0",
-"o- c #CB8EA4",
-"p- c #CC92A8",
-"q- c #C892AA",
-"r- c #B387AA",
-"s- c #A882AA",
-"t- c #9E81AA",
-"u- c #9580AA",
-"v- c #8F7FAA",
-"w- c #8A7EAC",
-"x- c #8880AD",
-"y- c #7E7CAD",
-"z- c #7A7CAE",
-"A- c #767BB0",
-"B- c #727BB1",
-"C- c #6D7BB2",
-"D- c #697BB3",
-"E- c #647BB5",
-"F- c #5F7EBA",
-"G- c #5B81BF",
-"H- c #5882C2",
-"I- c #5583C4",
-"J- c #5184C7",
-"K- c #4D85C9",
-"L- c #BC3951",
-"M- c #BA3B54",
-"N- c #B74059",
-"O- c #B3435E",
-"P- c #AE4663",
-"Q- c #AC4865",
-"R- c #AB4B68",
-"S- c #AA4F6D",
-"T- c #A95372",
-"U- c #A85676",
-"V- c #A75A7B",
-"W- c #A75E7F",
-"X- c #A76283",
-"Y- c #A96A8A",
-"Z- c #A76A8B",
-"`- c #A86E8F",
-" ; c #AA7293",
-".; c #AD7697",
-"+; c #B07A9B",
-"@; c #B57F9F",
-"#; c #BC87A3",
-"$; c #C08BA5",
-"%; c #BA8AA9",
-"&; c #A782AA",
-"*; c #9F81AA",
-"=; c #9781AB",
-"-; c #9180AB",
-";; c #8B80AC",
-">; c #8981AF",
-",; c #827EAE",
-"'; c #7B7DAF",
-"); c #777DB0",
-"!; c #737CB2",
-"~; c #6F7CB3",
-"{; c #6A7CB4",
-"]; c #667CB6",
-"^; c #5D80BD",
-"/; c #5982C2",
-"(; c #5683C4",
-"_; c #5284C7",
-":; c #4E85C9",
-"<; c #4A87CC",
-"[; c #B73D56",
-"}; c #B63F59",
-"|; c #B4425B",
-"1; c #A84C6B",
-"2; c #A7506F",
-"3; c #A65373",
-"4; c #A55778",
-"5; c #A45B7C",
-"6; c #A45E80",
-"7; c #A36285",
-"8; c #A56889",
-"9; c #A56B8F",
-"0; c #A46E90",
-"a; c #A57193",
-"b; c #A77597",
-"c; c #A9789B",
-"d; c #AB7B9F",
-"e; c #AD7EA2",
-"f; c #AD80A4",
-"g; c #AC81A7",
-"h; c #A981A8",
-"i; c #A481A9",
-"j; c #9D81AA",
-"k; c #9281AC",
-"l; c #8C80AD",
-"m; c #8880AF",
-"n; c #8681B0",
-"o; c #7C7EB0",
-"p; c #787EB1",
-"q; c #747EB2",
-"r; c #707DB4",
-"s; c #6C7DB5",
-"t; c #677DB7",
-"u; c #627DB8",
-"v; c #5F7EBB",
-"w; c #5B81C0",
-"x; c #5385C7",
-"y; c #4F86C9",
-"z; c #4B87CC",
-"A; c #4789CF",
-"B; c #B73D57",
-"C; c #B53E59",
-"D; c #B3415C",
-"E; c #B1435E",
-"F; c #A45071",
-"G; c #A35475",
-"H; c #A25879",
-"I; c #A15B7E",
-"J; c #A05F82",
-"K; c #A06286",
-"L; c #9F668A",
-"M; c #A26D8F",
-"N; c #A06E93",
-"O; c #A07195",
-"P; c #A07498",
-"Q; c #A1779B",
-"R; c #A2799E",
-"S; c #A37CA1",
-"T; c #A27EA4",
-"U; c #A17FA6",
-"V; c #9E80A8",
-"W; c #9981A9",
-"X; c #9181AC",
-"Y; c #8782B1",
-"Z; c #7E7FB1",
-"`; c #797FB2",
-" > c #757FB3",
-".> c #717EB5",
-"+> c #6D7EB6",
-"@> c #687EB7",
-"#> c #647EB9",
-"$> c #5783C5",
-"%> c #5485C7",
-"&> c #5087CA",
-"*> c #4C87CC",
-"=> c #4889CF",
-"-> c #458AD1",
-";> c #B53F59",
-">> c #B2405C",
-",> c #B0425E",
-"'> c #AF4461",
-")> c #A15173",
-"!> c #A05577",
-"~> c #9F587B",
-"{> c #9E5C7F",
-"]> c #9D5F83",
-"^> c #9D6387",
-"/> c #9C668B",
-"(> c #9C698F",
-"_> c #9E7094",
-":> c #9C7198",
-"<> c #9B7399",
-"[> c #9B769C",
-"}> c #9B789F",
-"|> c #9A7AA1",
-"1> c #997CA4",
-"2> c #977DA6",
-"3> c #957FA8",
-"4> c #927FAA",
-"5> c #8F80AB",
-"6> c #8B80AD",
-"7> c #8880B0",
-"8> c #8682B1",
-"9> c #7E80B1",
-"0> c #767FB4",
-"a> c #727FB5",
-"b> c #6D7FB6",
-"c> c #697FB8",
-"d> c #647FBA",
-"e> c #607FBB",
-"f> c #5C80BD",
-"g> c #5784C5",
-"h> c #5187CA",
-"i> c #4D88CC",
-"j> c #4989CF",
-"k> c #458BD2",
-"l> c #428CD4",
-"m> c #AE4461",
-"n> c #AC4663",
-"o> c #9C5579",
-"p> c #9C597D",
-"q> c #9B5C81",
-"r> c #9A5F85",
-"s> c #996389",
-"t> c #98668C",
-"u> c #976990",
-"v> c #976C93",
-"w> c #997197",
-"x> c #99759C",
-"y> c #96759E",
-"z> c #9577A0",
-"A> c #9379A2",
-"B> c #917CA7",
-"C> c #8F7DA9",
-"D> c #8C7EAA",
-"E> c #897FAD",
-"F> c #8881B0",
-"G> c #8582B1",
-"H> c #7D7FB1",
-"I> c #797FB3",
-"J> c #757FB4",
-"K> c #6E80B7",
-"L> c #6A7FB8",
-"M> c #6580BA",
-"N> c #6180BC",
-"O> c #5D80BE",
-"P> c #5982C3",
-"Q> c #5684C5",
-"R> c #5485C8",
-"S> c #4E88CC",
-"T> c #4A8ACF",
-"U> c #468BD2",
-"V> c #408ED7",
-"W> c #B0425F",
-"X> c #AD4361",
-"Y> c #AB4564",
-"Z> c #A94766",
-"`> c #A84969",
-" , c #A64C6B",
-"., c #99567A",
-"+, c #98597E",
-"@, c #975C82",
-"#, c #966086",
-"$, c #95638A",
-"%, c #94668E",
-"&, c #946991",
-"*, c #936C94",
-"=, c #926E98",
-"-, c #92719A",
-";, c #94769E",
-">, c #9479A2",
-",, c #927AA5",
-"', c #8E7DAA",
-"), c #8C7FAC",
-"!, c #8A80AE",
-"~, c #8780AE",
-"{, c #817FAF",
-"], c #7C7EB1",
-"^, c #787FB2",
-"/, c #727FB6",
-"(, c #6A80B9",
-"_, c #6680BA",
-":, c #5882C3",
-"<, c #5287CA",
-"[, c #4E88CD",
-"}, c #4B8ACF",
-"|, c #478BD2",
-"1, c #438CD4",
-"2, c #3D8FD9",
-"3, c #AD4461",
-"4, c #A74969",
-"5, c #A54B6B",
-"6, c #A44D6E",
-"7, c #955980",
-"8, c #945D84",
-"9, c #936087",
-"0, c #92638B",
-"a, c #91668F",
-"b, c #906992",
-"c, c #906C96",
-"d, c #8F6E99",
-"e, c #8D709C",
-"f, c #8C739E",
-"g, c #8B75A1",
-"h, c #8A77A4",
-"i, c #8979A6",
-"j, c #877AA8",
-"k, c #847BAB",
-"l, c #807CAD",
-"m, c #7D7DAF",
-"n, c #7A7EB1",
-"o, c #777EB2",
-"p, c #717FB5",
-"q, c #6D80B7",
-"r, c #6580BB",
-"s, c #6181BC",
-"t, c #5D81BE",
-"u, c #5A81C1",
-"v, c #4F89CD",
-"w, c #4B8AD0",
-"x, c #488BD2",
-"y, c #438CD5",
-"z, c #3D90D9",
-"A, c #3B91DC",
-"B, c #A64969",
-"C, c #A44A6C",
-"D, c #A24C6E",
-"E, c #A14E71",
-"F, c #9F5173",
-"G, c #905D85",
-"H, c #906089",
-"I, c #8F638C",
-"J, c #8E6690",
-"K, c #8D6893",
-"L, c #8C6B97",
-"M, c #8A6E9A",
-"N, c #89709D",
-"O, c #8872A0",
-"P, c #8674A2",
-"Q, c #8278A7",
-"R, c #8079A9",
-"S, c #7E7BAC",
-"T, c #7B7CAE",
-"U, c #797DB0",
-"V, c #767EB2",
-"W, c #747EB4",
-"X, c #707FB6",
-"Y, c #6980B9",
-"Z, c #5684C6",
-"`, c #5386C8",
-" ' c #5187CB",
-".' c #4C8AD0",
-"+' c #488CD2",
-"@' c #448DD5",
-"#' c #3D90DA",
-"$' c #3B91DD",
-"%' c #9E5073",
-"&' c #9C5276",
-"*' c #98567B",
-"=' c #8C608A",
-"-' c #8B638E",
-";' c #8A6691",
-">' c #896894",
-",' c #876B98",
-"'' c #866D9B",
-")' c #85709E",
-"!' c #8372A1",
-"~' c #7E77A8",
-"{' c #7C79AB",
-"]' c #797AAD",
-"^' c #777BAF",
-"/' c #757CB1",
-"(' c #727DB3",
-"_' c #6F7EB5",
-":' c #6C7FB7",
-"<' c #6880B9",
-"[' c #6181BD",
-"}' c #5883C3",
-"|' c #4C8BD0",
-"1' c #488CD3",
-"2' c #458DD5",
-"3' c #418ED7",
-"4' c #9C4F73",
-"5' c #9B5176",
-"6' c #995378",
-"7' c #98557B",
-"8' c #96577E",
-"9' c #925B83",
-"0' c #89618C",
-"a' c #87638F",
-"b' c #866692",
-"c' c #846896",
-"d' c #836B99",
-"e' c #826D9C",
-"f' c #806F9F",
-"g' c #7F72A2",
-"h' c #7D73A4",
-"i' c #7B75A7",
-"j' c #737BB1",
-"k' c #707CB3",
-"l' c #6D7DB5",
-"m' c #6A7EB7",
-"n' c #677FB8",
-"o' c #6380BB",
-"p' c #6080BD",
-"q' c #5C81BF",
-"r' c #5883C4",
-"s' c #5584C6",
-"t' c #498CD3",
-"u' c #458ED5",
-"v' c #418ED8",
-"w' c #985279",
-"x' c #96547B",
-"y' c #95577E",
-"z' c #935980",
-"A' c #8E5E88",
-"B' c #806897",
-"C' c #7F6A9A",
-"D' c #7D6D9D",
-"E' c #7C6FA0",
-"F' c #7A71A3",
-"G' c #7873A6",
-"H' c #7577AB",
-"I' c #717AB0",
-"J' c #6E7BB2",
-"K' c #6B7CB4",
-"L' c #697DB6",
-"M' c #657EB8",
-"N' c #627FBA",
-"O' c #5F80BC",
-"P' c #5386C9",
-"Q' c #5188CB",
-"R' c #4E89CE",
-"S' c #418FD8",
-"T' c #3E90DA",
-"U' c #925880",
-"V' c #905A83",
-"W' c #8F5C85",
-"X' c #8B608A",
-"Y' c #7B6B9C",
-"Z' c #796D9F",
-"`' c #776FA1",
-" ) c #7671A4",
-".) c #7573A7",
-"+) c #7375AA",
-"@) c #6E78AF",
-"#) c #647DB8",
-"$) c #5E7FBD",
-"%) c #5A81C2",
-"&) c #5783C4",
-"*) c #5585C6",
-"=) c #5088CB",
-"-) c #4C8BD1",
-";) c #498DD3",
-">) c #458ED6",
-",) c #8D5B86",
-"') c #8B5D88",
-")) c #766EA1",
-"!) c #756FA3",
-"~) c #7271A6",
-"{) c #7073A9",
-"]) c #6E75AB",
-"^) c #6C76AE",
-"/) c #6978B0",
-"() c #6779B3",
-"_) c #5585C7",
-":) c #5088CC",
-"<) c #4B8BD1",
-"[) c #488DD3",
-"}) c #3E90DB",
-"|) c #8A5C88",
-"1) c #885E8B",
-"2) c #86608D",
-"3) c #856290",
-"4) c #836492",
-"5) c #6D74AB",
-"6) c #6B76AE",
-"7) c #6679B3",
-"8) c #5286C9",
-"9) c #875E8B",
-"0) c #855F8D",
-"a) c #836290",
-"b) c #826493",
-"c) c #806595",
-"d) c #7E6898",
-"e) c #7271A7",
-"f) c #6F73A9",
-"g) c #6D75AC",
-"h) c #6878B1",
-"i) c #4D8ACE",
-"j) c #4A8BD1",
-"k) c #478DD4",
-"l) c #448ED6",
-"m) c #418FD9",
-"n) c #3D91DB",
-"o) c #826190",
-"p) c #806393",
-"q) c #7E6595",
-"r) c #7C6798",
-"s) c #7B699A",
-"t) c #796A9D",
-"u) c #647BB6",
-"v) c #617CB8",
-"w) c #4F88CC",
-"x) c #4D8ACF",
-"y) c #438ED6",
-"z) c #408FD9",
-"A) c #7D6595",
-"B) c #79689A",
-"C) c #776A9D",
-"D) c #766C9F",
-"E) c #746DA2",
-"F) c #7071A7",
-"G) c #6E73AA",
-"H) c #6A76AE",
-"I) c #617DB8",
-"J) c #5C80BE",
-"K) c #4C8ACF",
-"L) c #498BD2",
-"M) c #468DD4",
-"N) c #438ED7",
-"O) c #3F8FD9",
-"P) c #3C91DB",
-"Q) c #91567F",
-"R) c #8F5882",
-"S) c #816190",
-"T) c #7D6596",
-"U) c #78689B",
-"V) c #76699D",
-"W) c #746BA0",
-"X) c #726CA2",
-"Y) c #706FA4",
-"Z) c #6E71A7",
-"`) c #6D72AA",
-" ! c #6B74AC",
-".! c #6976AF",
-"+! c #6777B1",
-"@! c #637BB6",
-"#! c #5E7EBB",
-"$! c #5C7FBE",
-"%! c #5A81C0",
-"&! c #5584C5",
-"*! c #5385C8",
-"=! c #4D88CD",
-"-! c #458CD4",
-";! c #3C91DC",
-">! c #8A5B87",
-",! c #75699D",
-"'! c #736BA0",
-")! c #716DA2",
-"!! c #6F6EA5",
-"~! c #6C70A7",
-"{! c #6B71AA",
-"]! c #6973AC",
-"^! c #6775AF",
-"/! c #6577B1",
-"(! c #617AB6",
-"_! c #5D7EBB",
-":! c #5B7FBE",
-"<! c #5981C0",
-"[! c #5682C3",
-"}! c #5484C5",
-"|! c #5185C8",
-"1! c #4F87CA",
-"2! c #4C88CD",
-"3! c #3E90D9",
-"4! c #8C5A84",
-"5! c #7A6699",
-"6! c #756A9D",
-"7! c #6E6EA5",
-"8! c #6C70A8",
-"9! c #6972AA",
-"0! c #6773AD",
-"a! c #6575AF",
-"b! c #6178B4",
-"c! c #5F79B6",
-"d! c #597EBE",
-"e! c #5780C1",
-"f! c #5482C3",
-"g! c #5283C6",
-"h! c #5085C8",
-"i! c #4D86CA",
-"j! c #4B88CD",
-"k! c #428DD5",
-"l! c #8A5C87",
-"m! c #885D8A",
-"n! c #855F8C",
-"o! c #6276B2",
-"p! c #6078B4",
-"q! c #5E7AB7",
-"r! c #5282C3",
-"s! c #4E85C8",
-"t! c #4C86CB",
-"u! c #4988CD",
-"v! c #4789D0",
-"w! c #448BD2",
-"x! c #3F8ED7",
-". . . . . . + @ # $ % & * = - ; > , ' ) ! ~ { ] ^ / ( _ : < [ } | 1 2 3 4 5 6 7 8 9 0 a b c d e f g ",
-". . . . . h i j k % l * = - m > n ' o ! p { q r s t u v < w } x y 2 z 4 5 6 7 8 A 0 B C c d e f D E ",
-". . . . h F j k % G * H - m > n I J K p L M N s O P Q R S T U V W X 4 Y Z 7 ` A .B C c ..+.@.D E #.",
-". . . $.F j k %.&.*.H =.m -.n ;.>.K ,.'.).!.~.{.].^.R /.(._.:.<.[.}.|.1.7 2.A 3.4.5.6...+.@.7.8.#.9.",
-". . 0.F a.b.c.&.d.H e.f.-.g.h.>.i.j.k.l.m.n.o.p.q.r.s.t.u.v.w.x.y.z.A.B.C.A 3.4.5.D...+.E.7.F.#.9.G.",
-"H.0.I.a.J.c.&.K.L.e.f.-.g.M.N.i.O.k.P.Q.n.o.p.q.R.s.S.u.T.w.x.y.U.V.W.X.Y.Z.`.5.D... +.+++F.@+9.G.#+",
-"0.$+%+&+c.&.K.L.*+=+-+;+M.N.>+O.,+'+Q.)+o.!+q.~+s.S.{+]+w.^+/+U.V.(+_+:+<+[+}+|+1+2+.+++F.3+9.4+#+5+",
-"$+%+&+6+7+K.L.*+8+-+;+M.9+>+O.,+'+Q.)+0+!+q.~+s.S.{+]+a+b+/+U.c+d+_+:+e+f+g+h+i+j+.+++k+3+9.l+m+5+n+",
-"o+&+p+7+q+r+s+8+, ;+M.t+u+O.v+'+w+x+0+y+q.~+z+A+B+]+C+D+/+E+F+d+G+:+H+f+g+I+J+K+L+M+N+O+P+l+m+Q+R+S+",
-"&+& 7+T+r+s+8+, U+V+W+u+X+v+'+w+Y+Z+y+`+ @.@+@@@#@$@%@&@*@=@d+G+:+H+-@;@h+J+K+>@,@'@)@P+l+!@Q+R+S+~@",
-"& 7+T+{@s+]@, ;+V+W+u+^@v+/@(@Y+Z+_@:@<@[@}@|@1@2@3@4@5@6@7@8@9@0@-@;@a@J+b@c@d@e@f@g@h@!@i@R+j@~@k@",
-"l@T+{@m@> , n@V+W+o@p@v+q@(@r@s@t@u@v@w@x@y@z@A@B@C@D@E@F@G@H@I@J@K@L@J+b@c@d@e@M@N@O@P@Q@R+R@~@S@T@",
-"T+{@; > , I U@V@o@p@v+q@(@r@W@X@Y@Z@`@ #.#+#@###$#%#&#*#=#-#;#>#,#'#)#b@c@d@!#M@N@~#{#]#^#/#~@(#T@_#",
-"- m > , I U@:#<#p@).q@[#r@}#|#1#2#3#4#5#6#7#8#9#0#a#b#c#d#e#f#g#h#i#j#k#l#m#M@N@n#o#p#q#r#s#(#t#_#u#",
-"m > n I J :#<#p@l.q@[#{.W@v#1#w#3#x#y#z#A#B#C#D#E#F#G#H#I#J#K#L#M#N#O#P#Q#R#S#n#o#p#q#T#U#V#W#_#u#X#",
-"Y#n I J Z#<#k.l.q@n.{.W@v#`# $.$+$@$#$$$%$&$*$=$-$;$>$,$'$)$!$~${$]$^$/$($_$:${#<$q#[$}$|$1$2$u#3$4$",
-"n 5$6$Z#,.k.l.7$n.8$p.9$`#w#0$+$a$b$c$d$e$f$g$h$i$j$,$k$l$m$n$o$p$q$r$s$t$u$v$<$w$x$}$y$z$A$B$C$4$D$",
-"E$F$K ,.'.l.m.n.o.p.q.G$H$I$+$J$b$K$L$M$N$O$P$Q$R$S$T$U$V$W$X$Y$Z$`$ %.%+%@%#%$%x$}$y$z$%%&%*%=%D$-%",
-"6$;%>%'.,%Q.)+o.p.q.'%)%!%~%J$#$c$L$M${%]%^%/%(%_%:%<%[%}%|%1%2%3%4%5%6%7%8%9%0%a%b%c%d%e%f%g%h%i%j%",
-";%k%l%m%m.)+o.!+q.R.n%o%p%q%r%s%t%M${%u%v%w%x%y%z%A%B%C%D%E%F%G%H%I%J%K%L%M%N%O%P%c%d%Q%R%S%T%U%j%V%",
-"k%W%X%m.)+0+!+q.~+Y%Z%`% &.&+&@&#&$&%&v%&&*&=&-&;&>&,&'&)&!&~&{&]&^&/&(&_&:&<&[&}&|&Q%1&S%2&3&4&5&6&",
-"7&8&9&x+Z+y+0&~+z++@a&b&c&d&e&f&g&h&^%w%*&i&j&k&l&m&n&o&p&q&r&s&t&u&v&w&x&y&z&A&B&Q%C&S%2&D&E&F&G&H&",
-"I&9&J&K&y+L&~+M&A+N&O&P&Q&R&S&T&U&V&W&X&Y&j&Z&`& *.*+*@*#*$*%*&***=*-*;*>*,*'*)*!*1&S%~*D&{*]*^*/*(*",
-"/ _*K&:*L&~+M&<*B+[*2@}*|*1*2*3*4*5*6*y%7*k&`&8*9*0*a*b*c*d*e*f*g*h*i*j*k*l*m*n*o*p*q*r*{*s*t*u*v*w*",
-"( x*Q y*z*M&<*A*B*C*D*C@%#a#E*F*G*H*I*J*K*L* *9*M*N*O*P*Q*R*S*T*U*V*W*X*Y*Z*`* =.=~*r*{*+=@=#=$=%=&=",
-"_ v *===-=;=A*B*>=,='=)=!=~={=]=^=/=(=_=:=<=.*0*N*[=}=|=1=2=3=4=5=6=7=8=9=0=a=b=c=d=e=f=@=g=h=i=j=k=",
-": l=m=n=o=v.B*>=p=q=r=E@s=t=u=v=w=x=y=z=A=B=C=a*O*}=D=E=F=G=H=I=J=K=L=M=N=O=P=Q=R=S=f=T=g=U=V=W=X=Y=",
-"< w (.Z=v.B*x.p=`= -.-+-@-#-I#w=$-%-&-*-=---;-b*P*>-E=,-'-)-!-~-{-]-^-/-(-_-:-<-[-f=}-|-U=1-2-3-4-5-",
-"w 6-7-8-9-x.p=`=0-a-b-c-d-e-f-g-h-i-j-k-l-m-n-o-p-1=q-'-r-s-t-u-v-w-x-y-z-A-B-C-D-E-|-F-1-G-H-I-J-K-",
-"L-M-:.N-x.O-z.P-Q-R-S-T-U-V-W-X-Y-Z-`- ;.;+;@;#;$;2=%;)-&;*;=;-;;;>;,;';);!;~;{;];|-F-^;G-/;(;_;:;<;",
-"M-[;};|;O-z.P-(+_+1;2;3;4;5;6;7;8;9;0;a;b;c;d;e;f;g;h;i;j;=;k;l;m;n;o;p;q;r;s;t;u;v;^;w;/;(;x;y;z;A;",
-"B;C;D;E;z.V.(+_+1;e+F;G;H;I;J;K;L;M;N;O;P;Q;R;S;T;U;V;W;u-X;l;m;Y;Z;`; >.>+>@>#>v;^;w;/;$>%>&>*>=>->",
-";>>>,>'>V.d+_+:+e+f+)>!>~>{>]>^>/>(>_>:><>[>}>|>1>2>3>4>5>6>7>8>9>`;0>a>b>c>d>e>f>w;/;g>%>h>i>j>k>l>",
-">>,>m>n>W.G+:+e+f+g+I+o>p>q>r>s>t>u>v>w>x>y>z>A>6=B>C>D>E>F>G>H>I>J>a>K>L>M>N>O>w;P>Q>R>h>S>T>U>l>V>",
-"W>X>Y>Z>`> ,H+-@;@I+J+.,+,@,#,$,%,&,*,=,-,;,>,,,7=',),!,~,{,],^,J>/,K>(,_,N>O>w;:,Q>R><,[,},|,1,V>2,",
-"3,Y>8 4,5,6,-@;@I+J+b@c@7,8,9,0,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,J>p,q,(,r,s,t,u,:,Q>R>h>v,w,x,y,V>z,A,",
-"Y>8 B,C,D,E,F,h+J+b@c@d@e@G,H,I,J,K,L,M,N,O,P,Y*Q,R,S,T,U,V,W,X,q,Y,r,s,t,u,:,Z,`, 'v,.'+'@'V>#'A,$'",
-"8 B,0 a b %'&'J+*'c@d@e@M@N@='-';'>',''')'!'l*Z*~'{']'^'/'('_':'<'r,['t,u,}'Z,`, 'v,|'1'2'3'#'A,$'$'",
-"9 0 a b 4'5'6'7'8'd@9'M@N@n#0'a'b'c'd'e'f'g'h'i'a=P=:-j'k'l'm'n'o'p'q'u,r's'`, 'v,|'t'u'v'#'A,$'$'$'",
-"0 B C c d w'x'y'z'm#M@A'n#o#a'q#T#B'C'D'E'F'G' =H'Q=I'J'K'L'M'N'O'q'u,r's'P'Q'R'|'t'u'S'T'$'$'$'$'$'",
-"B C c d e @.D U'V'W'S#X'o#p#q#T#}$|$Y'Z'`' ).)+)c=@)[-D-];#)U=$)G-%)&)*)P'=)R'-);)>)S'T'$'$'$'$'$'$'",
-"5.c d +.@.7.8.#.,)')O@{#p#w$x$}$y$Y'%%))!)~){)])^)/)()E-g=F-1-G-/;&)_)P':)R'<)[)>)S'})$'$'$'$'$'$'$'",
-"6...+.@.7.F.#.9.|)1)2)3)4)x$}$y$z$%%))R%~){)5)6)/)7)E-|-F-^;G-/;&)_)8):)R'<)[)>)S'})$'$'$'$'$'$'$'$'",
-"..+..+++F.@+9.G.9)0)a)b)c)d)b%z$d%))R%e)f)g)6)h)7)E-|-v;^;w;/;$>_)8):)i)j)k)l)m)n)$'$'$'$'$'$'$'$'$'",
-"+..+++F.3+9.4+#+5+o)p)q)r)s)t)A$&%R%S%f)g)6)h)7)u)v)v;^;w;/;$>%><,w)x)j)k)y)z)n)$'$'$'$'$'$'$'$'$'$'",
-".+++k+3+9.l+#+5+o)S+A)k@B)C)D)E)*%F)G)g)H)h)7)u)I)v;J)w;/;Q>%>h>w)K)L)M)N)O)P)$'$'$'$'$'$'$'$'$'$'$'",
-"Q)R)O+P+l+#+5+S)S+T)k@U)V)W)X)Y)Z)`) !.!+!t*@!v)#!$!%!:,&!*!&>=!},x,-!3'O);!$'$'$'$'$'$'$'$'$'$'$'$'",
-"R)O+>!l+m+Q+R+S+~@k@U),!'!)!!!~!{!]!^!/!^*(!$=_!:!<![!}!|!1!2!j>U>1,3'3!;!$'$'$'$'$'$'$'$'$'$'$'$'$'",
-"4!>!l+!@Q+R+j@~@5!U)6!'!)!7!8!9!0!a!V%b!c!v*%=d!e!f!g!h!i!j!=>k>k!V>#'A,$'$'$'$'$'$'$'$'$'$'$'$'$'$'",
-"l!m!n!Q+R+R@~@S@T@_#'!X#7!8!9!0!a!o!p!q!(*w*&=k=r!5-s!t!u!v!w!k!x!#'A,$'$'$'$'$'$'$'$'$'$'$'$'$'$'$'"};
diff --git a/ext/gd/tests/gif2gd.phpt b/ext/gd/tests/gif2gd.phpt
deleted file mode 100644
index 3eee211871..0000000000
--- a/ext/gd/tests/gif2gd.phpt
+++ /dev/null
@@ -1,32 +0,0 @@
---TEST--
-gif --> gd1/gd2 conversion test
---SKIPIF--
-<?php
- if (!extension_loaded('gd')) {
- die("skip gd extension not avaliable.");
- }
- if (!GD_BUNDLED) {
- die("skip external GD libraries always fail");
- }
- if (!function_exists("imagecreatefromgif")) {
- die("skip gif read support unavailable");
- }
-?>
---FILE--
-<?php
- $cwd = dirname(__FILE__);
-
- echo "GIF to GD1 conversion: ";
- echo imagegd(imagecreatefromgif($cwd . "/conv_test.gif"), $cwd . "/test.gd1") ? 'ok' : 'failed';
- echo "\n";
-
- echo "GIF to GD2 conversion: ";
- echo imagegd2(imagecreatefromgif($cwd . "/conv_test.gif"), $cwd . "/test.gd2") ? 'ok' : 'failed';
- echo "\n";
-
- @unlink($cwd . "/test.gd1");
- @unlink($cwd . "/test.gd2");
-?>
---EXPECT--
-GIF to GD1 conversion: ok
-GIF to GD2 conversion: ok
diff --git a/ext/gd/tests/gif2jpg.phpt b/ext/gd/tests/gif2jpg.phpt
deleted file mode 100644
index 38a0493ff9..0000000000
--- a/ext/gd/tests/gif2jpg.phpt
+++ /dev/null
@@ -1,29 +0,0 @@
---TEST--
-gif --> jpeg conversion test
---SKIPIF--
-<?php
- if (!extension_loaded('gd')) {
- die("skip gd extension not avaliable.");
- }
- if (!GD_BUNDLED) {
- die("skip external GD libraries always fail");
- }
- if (!function_exists("imagejpeg")) {
- die("skip jpeg support unavailable");
- }
- if (!function_exists("imagecreatefromgif")) {
- die("skip gif read support unavailable");
- }
-?>
---FILE--
-<?php
- $cwd = dirname(__FILE__);
-
- echo "GIF to JPEG conversion: ";
- echo imagejpeg(imagecreatefromgif($cwd . "/conv_test.gif"), $cwd . "/test_gif.jpeg") ? 'ok' : 'failed';
- echo "\n";
-
- @unlink($cwd . "/test_gif.jpeg");
-?>
---EXPECT--
-GIF to JPEG conversion: ok
diff --git a/ext/gd/tests/gif2png.phpt b/ext/gd/tests/gif2png.phpt
deleted file mode 100644
index 70ddc37937..0000000000
--- a/ext/gd/tests/gif2png.phpt
+++ /dev/null
@@ -1,29 +0,0 @@
---TEST--
-gif --> png conversion test
---SKIPIF--
-<?php
- if (!extension_loaded('gd')) {
- die("skip gd extension not avaliable.");
- }
- if (!GD_BUNDLED) {
- die("skip external GD libraries always fail");
- }
- if (!function_exists("imagepng")) {
- die("skip png support unavailable");
- }
- if (!function_exists("imagecreatefromgif")) {
- die("skip gif read support unavailable");
- }
-?>
---FILE--
-<?php
- $cwd = dirname(__FILE__);
-
- echo "GIF to PNG conversion: ";
- echo imagepng(imagecreatefromgif($cwd . "/conv_test.gif"), $cwd . "/test_gif.png") ? 'ok' : 'failed';
- echo "\n";
-
- @unlink($cwd . "/test_gif.png");
-?>
---EXPECT--
-GIF to PNG conversion: ok
diff --git a/ext/gd/tests/imagefilter.phpt b/ext/gd/tests/imagefilter.phpt
deleted file mode 100644
index 3b97657a0d..0000000000
--- a/ext/gd/tests/imagefilter.phpt
+++ /dev/null
@@ -1,89 +0,0 @@
---TEST--
-imagefilter() function test
---SKIPIF--
-<?php
- if (!extension_loaded('gd')) {
- die("skip gd extension not avaliable.");
- }
- if (!GD_BUNDLED) {
- die("skip this test requires bundled gd library.");
- }
-?>
---FILE--
-<?php
-$no_arg_filters = array(
- "IMG_FILTER_NEGATE",
- "IMG_FILTER_GRAYSCALE",
- "IMG_FILTER_EDGEDETECT",
- "IMG_FILTER_GAUSSIAN_BLUR",
- "IMG_FILTER_SELECTIVE_BLUR",
- "IMG_FILTER_EMBOSS",
- "IMG_FILTER_MEAN_REMOVAL"
-);
-
-$SAVE_DIR = dirname(__FILE__);
-$SOURCE_IMG = $SAVE_DIR . "/test.png";
-
- foreach ($no_arg_filters as $filt) {
- $im = imagecreatefrompng($SOURCE_IMG);
- if (imagefilter($im, constant($filt))) {
- imagepng($im, $SAVE_DIR. $filt. ".png");
- echo "$filt success\n";
- @unlink($SAVE_DIR. $filt. ".png");
- } else {
- echo "$filt failed\n";
- }
- }
-
- $im = imagecreatefrompng($SOURCE_IMG);
-
- if (imagefilter($im, IMG_FILTER_SMOOTH, -1924.124)) {
- imagepng($im, $SAVE_DIR . "IMG_FILTER_SMOOTH.png");
- echo "IMG_FILTER_SMOOTH success\n";
- @unlink($SAVE_DIR . "IMG_FILTER_SMOOTH.png");
- } else {
- echo "IMG_FILTER_SMOOTH failed\n";
- }
-
- $im = imagecreatefrompng($SOURCE_IMG);
-
- if (imagefilter($im, IMG_FILTER_COLORIZE, -127.12, -127.98, 127)) {
- imagepng($im, $SAVE_DIR . "IMG_FILTER_COLORIZE.png");
- echo "IMG_FILTER_COLORIZE success\n";
- unlink($SAVE_DIR . "IMG_FILTER_COLORIZE.png");
- } else {
- echo "IMG_FILTER_COLORIZE failed\n";
- }
-
- $im = imagecreatefrompng($SOURCE_IMG);
-
- if (imagefilter($im, IMG_FILTER_CONTRAST, -90)) {
- imagepng($im, $SAVE_DIR . "IMG_FILTER_CONTRAST.png");
- echo "IMG_FILTER_CONTRAST success\n";
- unlink($SAVE_DIR . "IMG_FILTER_CONTRAST.png");
- } else {
- echo "IMG_FILTER_CONTRAST failed\n";
- }
-
- $im = imagecreatefrompng($SOURCE_IMG);
-
- if (imagefilter($im, IMG_FILTER_BRIGHTNESS, 98)) {
- imagepng($im, $SAVE_DIR . "IMG_FILTER_BRIGHTNESS.png");
- echo "IMG_FILTER_BRIGHTNESS success\n";
- unlink($SAVE_DIR . "IMG_FILTER_BRIGHTNESS.png");
- } else {
- echo "IMG_FILTER_BRIGHTNESS failed\n";
- }
-?>
---EXPECT--
-IMG_FILTER_NEGATE success
-IMG_FILTER_GRAYSCALE success
-IMG_FILTER_EDGEDETECT success
-IMG_FILTER_GAUSSIAN_BLUR success
-IMG_FILTER_SELECTIVE_BLUR success
-IMG_FILTER_EMBOSS success
-IMG_FILTER_MEAN_REMOVAL success
-IMG_FILTER_SMOOTH success
-IMG_FILTER_COLORIZE success
-IMG_FILTER_CONTRAST success
-IMG_FILTER_BRIGHTNESS success
diff --git a/ext/gd/tests/imagefttext.phpt b/ext/gd/tests/imagefttext.phpt
deleted file mode 100644
index ca62d60d43..0000000000
--- a/ext/gd/tests/imagefttext.phpt
+++ /dev/null
@@ -1,52 +0,0 @@
---TEST--
-imagefttext() function test
---SKIPIF--
-<?php
- if (!extension_loaded('gd')) {
- die("skip gd extension not avaliable.");
- }
- if (!function_exists("imagefttext")) {
- die("skip imagefttext() not available.");
- }
-?>
---FILE--
-<?php
- $cwd = dirname(__FILE__);
- $fontfile_8859 = "$cwd/test8859.ttf";
-
- function testrun($im, $fontfile) {
- $sx = imagesx($im);
- $sy = imagesy($im);
-
- $colour_w = imagecolorallocate($im, 255, 255, 255);
- $colour_b = imagecolorallocate($im, 0, 0, 0);
-
- imagefilledrectangle($im, 0, 0, $sx - 1, $sy - 1, $colour_b);
- imagefttext($im, $sy * 0.75, 0, 0, $sy - 1, $colour_w, $fontfile, "A", array());
-
- $cnt = 0;
- for ($y = 0; $y < $sy; ++$y) {
- for ($x = 0; $x < $sx; ++$x) {
- if (imagecolorat($im, $x, $y) == $colour_b) {
- ++$cnt;
- }
- }
- }
-
- // imagecolordeallocate($im, $colour_w);
- // imagecolordeallocate($im, $colour_b);
-
- return ($cnt < ($sx * $sy));
- }
-
- $im = imagecreate(256, 256);
- var_dump(testrun($im, $fontfile_8859));
- imagedestroy($im);
-
- $im = imagecreatetruecolor(256, 256);
- var_dump(testrun($im, $fontfile_8859));
- imagedestroy($im);
-?>
---EXPECT--
-bool(true)
-bool(true)
diff --git a/ext/gd/tests/jpeg2png.phpt b/ext/gd/tests/jpeg2png.phpt
deleted file mode 100644
index e345a51abd..0000000000
--- a/ext/gd/tests/jpeg2png.phpt
+++ /dev/null
@@ -1,47 +0,0 @@
---TEST--
-jpeg <--> png conversion test
---SKIPIF--
-<?php
- if (!extension_loaded('gd')) {
- die("skip gd extension not avaliable.");
- }
- if (!GD_BUNDLED) {
- die("skip external GD libraries always fail");
- }
- if (!function_exists("imagecreatefrompng") || !function_exists("imagepng")) {
- die("skip png support unavailable");
- }
- if (!function_exists("imagecreatefromjpeg") || !function_exists("imagejpeg")) {
- die("skip jpeg support unavailable");
- }
-?>
---FILE--
-<?php
- $cwd = dirname(__FILE__);
-
- echo "PNG to JPEG conversion: ";
- echo imagejpeg(imagecreatefrompng($cwd . "/conv_test.png"), $cwd . "/test_jpeg.jpeg") ? 'ok' : 'failed';
- echo "\n";
-
- echo "Generated JPEG to PNG conversion: ";
- echo imagepng(imagecreatefromjpeg($cwd . "/test_jpeg.jpeg"), $cwd . "/test_jpng.png") ? 'ok' : 'failed';
- echo "\n";
-
- echo "JPEG to PNG conversion: ";
- echo imagepng(imagecreatefromjpeg($cwd . "/conv_test.jpeg"), $cwd . "/test_png.png") ? 'ok' : 'failed';
- echo "\n";
-
- echo "Generated PNG to JPEG conversion: ";
- echo imagejpeg(imagecreatefrompng($cwd . "/test_png.png"), $cwd . "/test_pjpeg.jpeg") ? 'ok' : 'failed';
- echo "\n";
-
- @unlink($cwd . "/test_jpeg.jpeg");
- @unlink($cwd . "/test_jpng.png");
- @unlink($cwd . "/test_png.png");
- @unlink($cwd . "/test_pjpeg.jpeg");
-?>
---EXPECT--
-PNG to JPEG conversion: ok
-Generated JPEG to PNG conversion: ok
-JPEG to PNG conversion: ok
-Generated PNG to JPEG conversion: ok
diff --git a/ext/gd/tests/jpg2gd.phpt b/ext/gd/tests/jpg2gd.phpt
deleted file mode 100644
index c1da986f21..0000000000
--- a/ext/gd/tests/jpg2gd.phpt
+++ /dev/null
@@ -1,44 +0,0 @@
---TEST--
-jpeg <--> gd1/gd2 conversion test
---SKIPIF--
-<?php
- if (!extension_loaded('gd')) {
- die("skip gd extension not avaliable.");
- }
- if (!GD_BUNDLED) {
- die("skip external GD libraries always fail");
- }
- if (!function_exists("imagecreatefromjpeg") || !function_exists("imagejpeg")) {
- die("skip jpeg support unavailable");
- }
-?>
---FILE--
-<?php
- $cwd = dirname(__FILE__);
-
- echo "JPEG to GD1 conversion: ";
- echo imagegd(imagecreatefromjpeg($cwd . "/conv_test.jpeg"), $cwd . "/test.gd1") ? 'ok' : 'failed';
- echo "\n";
-
- echo "JPEG to GD2 conversion: ";
- echo imagegd2(imagecreatefromjpeg($cwd . "/conv_test.jpeg"), $cwd . "/test.gd2") ? 'ok' : 'failed';
- echo "\n";
-
- echo "GD1 to JPEG conversion: ";
- echo imagejpeg(imagecreatefromgd($cwd . "/test.gd1"), $cwd . "/test_gd1.jpeg") ? 'ok' : 'failed';
- echo "\n";
-
- echo "GD2 to JPEG conversion: ";
- echo imagejpeg(imagecreatefromgd2($cwd . "/test.gd2"), $cwd . "/test_gd2.jpeg") ? 'ok' : 'failed';
- echo "\n";
-
- @unlink($cwd . "/test.gd1");
- @unlink($cwd . "/test.gd2");
- @unlink($cwd . "/test_gd1.jpeg");
- @unlink($cwd . "/test_gd2.jpeg");
-?>
---EXPECT--
-JPEG to GD1 conversion: ok
-JPEG to GD2 conversion: ok
-GD1 to JPEG conversion: ok
-GD2 to JPEG conversion: ok
diff --git a/ext/gd/tests/png2gd.phpt b/ext/gd/tests/png2gd.phpt
deleted file mode 100644
index 9a25c5a7bc..0000000000
--- a/ext/gd/tests/png2gd.phpt
+++ /dev/null
@@ -1,44 +0,0 @@
---TEST--
-png <--> gd1/gd2 conversion test
---SKIPIF--
-<?php
- if (!extension_loaded('gd')) {
- die("skip gd extension not avaliable.");
- }
- if (!GD_BUNDLED) {
- die("skip external GD libraries always fail");
- }
- if (!function_exists("imagecreatefrompng") || !function_exists("imagepng")) {
- die("skip png support unavailable");
- }
-?>
---FILE--
-<?php
- $cwd = dirname(__FILE__);
-
- echo "PNG to GD1 conversion: ";
- echo imagegd(imagecreatefrompng($cwd . "/conv_test.png"), $cwd . "/test.gd1") ? 'ok' : 'failed';
- echo "\n";
-
- echo "PNG to GD2 conversion: ";
- echo imagegd2(imagecreatefrompng($cwd . "/conv_test.png"), $cwd . "/test.gd2") ? 'ok' : 'failed';
- echo "\n";
-
- echo "GD1 to PNG conversion: ";
- echo imagepng(imagecreatefromgd($cwd . "/test.gd1"), $cwd . "/test_gd1.png") ? 'ok' : 'failed';
- echo "\n";
-
- echo "GD2 to PNG conversion: ";
- echo imagepng(imagecreatefromgd2($cwd . "/test.gd2"), $cwd . "/test_gd2.png") ? 'ok' : 'failed';
- echo "\n";
-
- @unlink($cwd . "/test.gd1");
- @unlink($cwd . "/test.gd2");
- @unlink($cwd . "/test_gd1.png");
- @unlink($cwd . "/test_gd2.png");
-?>
---EXPECT--
-PNG to GD1 conversion: ok
-PNG to GD2 conversion: ok
-GD1 to PNG conversion: ok
-GD2 to PNG conversion: ok
diff --git a/ext/gd/tests/test.png b/ext/gd/tests/test.png
deleted file mode 100644
index 27c5d46444..0000000000
--- a/ext/gd/tests/test.png
+++ /dev/null
Binary files differ
diff --git a/ext/gd/tests/test8859.ttf b/ext/gd/tests/test8859.ttf
deleted file mode 100644
index dff237cd29..0000000000
--- a/ext/gd/tests/test8859.ttf
+++ /dev/null
Binary files differ
diff --git a/ext/gd/tests/xbm2png.phpt b/ext/gd/tests/xbm2png.phpt
deleted file mode 100644
index 5c51226093..0000000000
--- a/ext/gd/tests/xbm2png.phpt
+++ /dev/null
@@ -1,26 +0,0 @@
---TEST--
-xbm --> png conversion test
---SKIPIF--
-<?php
- if (!extension_loaded('gd')) {
- die("skip gd extension not avaliable.");
- }
- if (!function_exists("imagepng")) {
- die("skip png support unavailable");
- }
- if (!function_exists("imagecreatefromxbm")) {
- die("skip xbm read support unavailable");
- }
-?>
---FILE--
-<?php
- $cwd = dirname(__FILE__);
-
- echo "XBM to PNG conversion: ";
- echo imagepng(imagecreatefromxbm($cwd . "/conv_test.xbm"), $cwd . "/test_xbm.png") ? 'ok' : 'failed';
- echo "\n";
-
- @unlink($cwd . "/test_xbm.png");
-?>
---EXPECT--
-XBM to PNG conversion: ok
diff --git a/ext/gd/tests/xpm2gd.phpt b/ext/gd/tests/xpm2gd.phpt
deleted file mode 100644
index 617d634e6a..0000000000
--- a/ext/gd/tests/xpm2gd.phpt
+++ /dev/null
@@ -1,32 +0,0 @@
---TEST--
-xpm --> gd1/gd2 conversion test
---SKIPIF--
-<?php
- if (!extension_loaded('gd')) {
- die("skip gd extension not avaliable.");
- }
- if (!GD_BUNDLED) {
- die("skip external GD libraries always fail");
- }
- if (!function_exists("imagecreatefromxpm")) {
- die("skip xpm read support unavailable");
- }
-?>
---FILE--
-<?php
- $cwd = dirname(__FILE__);
-
- echo "XPM to GD1 conversion: ";
- echo imagegd(imagecreatefromxpm($cwd . "/conv_test.xpm"), $cwd . "/test.gd1") ? 'ok' : 'failed';
- echo "\n";
-
- echo "XPM to GD2 conversion: ";
- echo imagegd2(imagecreatefromxpm($cwd . "/conv_test.xpm"), $cwd . "/test.gd2") ? 'ok' : 'failed';
- echo "\n";
-
- @unlink($cwd . "/test.gd1");
- @unlink($cwd . "/test.gd2");
-?>
---EXPECT--
-XPM to GD1 conversion: ok
-XPM to GD2 conversion: ok
diff --git a/ext/gd/tests/xpm2jpg.phpt b/ext/gd/tests/xpm2jpg.phpt
deleted file mode 100644
index 462d42680a..0000000000
--- a/ext/gd/tests/xpm2jpg.phpt
+++ /dev/null
@@ -1,29 +0,0 @@
---TEST--
-xpm --> jpeg conversion test
---SKIPIF--
-<?php
- if (!extension_loaded('gd')) {
- die("skip gd extension not avaliable.");
- }
- if (!GD_BUNDLED) {
- die("skip external GD libraries always fail");
- }
- if (!function_exists("imagejpeg")) {
- die("skip jpeg support unavailable");
- }
- if (!function_exists("imagecreatefromxpm")) {
- die("skip xpm read support unavailable");
- }
-?>
---FILE--
-<?php
- $cwd = dirname(__FILE__);
-
- echo "XPM to JPEG conversion: ";
- echo imagejpeg(imagecreatefromxpm($cwd . "/conv_test.xpm"), $cwd . "/test_xpm.jpeg") ? 'ok' : 'failed';
- echo "\n";
-
- @unlink($cwd . "/test_xpm.jpeg");
-?>
---EXPECT--
-XPM to JPEG conversion: ok
diff --git a/ext/gd/tests/xpm2png.phpt b/ext/gd/tests/xpm2png.phpt
deleted file mode 100644
index ff8d403333..0000000000
--- a/ext/gd/tests/xpm2png.phpt
+++ /dev/null
@@ -1,29 +0,0 @@
---TEST--
-xpm --> png conversion test
---SKIPIF--
-<?php
- if (!extension_loaded('gd')) {
- die("skip gd extension not avaliable.");
- }
- if (!GD_BUNDLED) {
- die("skip external GD libraries always fail");
- }
- if (!function_exists("imagepng")) {
- die("skip png support unavailable");
- }
- if (!function_exists("imagecreatefromxpm")) {
- die("skip xpm read support unavailable");
- }
-?>
---FILE--
-<?php
- $cwd = dirname(__FILE__);
-
- echo "XPM to PNG conversion: ";
- echo imagepng(imagecreatefromxpm($cwd . "/conv_test.xpm"), $cwd . "/test_xpm.png") ? 'ok' : 'failed';
- echo "\n";
-
- @unlink($cwd . "/test_xpm.png");
-?>
---EXPECT--
-XPM to PNG conversion: ok
diff --git a/ext/gettext/CREDITS b/ext/gettext/CREDITS
deleted file mode 100644
index acaebd7fae..0000000000
--- a/ext/gettext/CREDITS
+++ /dev/null
@@ -1,2 +0,0 @@
-GetText
-Alex Plotnick
diff --git a/ext/gettext/config.m4 b/ext/gettext/config.m4
deleted file mode 100644
index 23bc9ae6f3..0000000000
--- a/ext/gettext/config.m4
+++ /dev/null
@@ -1,50 +0,0 @@
-dnl
-dnl $Id$
-dnl
-
-PHP_ARG_WITH(gettext,for GNU gettext support,
-[ --with-gettext[=DIR] Include GNU gettext support.])
-
-if test "$PHP_GETTEXT" != "no"; then
- for i in $PHP_GETTEXT /usr/local /usr; do
- test -r $i/include/libintl.h && GETTEXT_DIR=$i && break
- done
-
- if test -z "$GETTEXT_DIR"; then
- AC_MSG_ERROR(Cannot locate header file libintl.h)
- fi
-
- GETTEXT_LIBDIR=$GETTEXT_DIR/lib
- GETTEXT_INCDIR=$GETTEXT_DIR/include
-
- O_LDFLAGS=$LDFLAGS
- LDFLAGS="$LDFLAGS -L$GETTEXT_LIBDIR"
- AC_CHECK_LIB(intl, bindtextdomain, [
- GETTEXT_LIBS=intl
- GETTEXT_CHECK_IN_LIB=intl
- ],
- AC_CHECK_LIB(c, bindtextdomain, [
- GETTEXT_LIBS=
- GETTEXT_CHECK_IN_LIB=c
- ],[
- AC_MSG_ERROR(Unable to find required gettext library)
- ])
- )
- LDFLAGS=$O_LDFLAGS
-
- AC_DEFINE(HAVE_LIBINTL,1,[ ])
- PHP_NEW_EXTENSION(gettext, gettext.c, $ext_shared)
- PHP_SUBST(GETTEXT_SHARED_LIBADD)
-
- if test -n "$GETTEXT_LIBS"; then
- PHP_ADD_LIBRARY_WITH_PATH($GETTEXT_LIBS, $GETTEXT_LIBDIR, GETTEXT_SHARED_LIBADD)
- fi
-
- PHP_ADD_INCLUDE($GETTEXT_INCDIR)
-
- AC_CHECK_LIB($GETTEXT_CHECK_IN_LIB, ngettext, [AC_DEFINE(HAVE_NGETTEXT, 1, [ ])])
- AC_CHECK_LIB($GETTEXT_CHECK_IN_LIB, dngettext, [AC_DEFINE(HAVE_DNGETTEXT, 1, [ ])])
- AC_CHECK_LIB($GETTEXT_CHECK_IN_LIB, dcngettext, [AC_DEFINE(HAVE_DCNGETTEXT, 1, [ ])])
- AC_CHECK_LIB($GETTEXT_CHECK_IN_LIB, bind_textdomain_codeset, [AC_DEFINE(HAVE_BIND_TEXTDOMAIN_CODESET, 1, [ ])])
-
-fi
diff --git a/ext/gettext/config.w32 b/ext/gettext/config.w32
deleted file mode 100644
index b2c0c5ee28..0000000000
--- a/ext/gettext/config.w32
+++ /dev/null
@@ -1,12 +0,0 @@
-// $Id$
-// vim:ft=javascript
-
-ARG_WITH("gettext", "gettext support", "no");
-
-if (PHP_GETTEXT != "no") {
- if (CHECK_LIB("libintl.lib", "gettext", PHP_GETTEXT) && CHECK_HEADER_ADD_INCLUDE("libintl.h", "CFLAGS_GETTEXT")) {
- EXTENSION("gettext", "gettext.c", PHP_GETTEXT_SHARED, "-DHAVE_BIND_TEXTDOMAIN_CODESET=1 -DHAVE_DNGETTEXT=1 -DHAVE_NGETTEXT=1 -DHAVE_LIBINTL=1");
- } else {
- WARNING("gettext not enabled; libraries and headers not found");
- }
-}
diff --git a/ext/gettext/gettext.c b/ext/gettext/gettext.c
deleted file mode 100644
index e455b8536a..0000000000
--- a/ext/gettext/gettext.c
+++ /dev/null
@@ -1,319 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Alex Plotnick <alex@wgate.com> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "php.h"
-
-#if HAVE_LIBINTL
-
-#include <stdio.h>
-#include "ext/standard/info.h"
-#include "php_gettext.h"
-
-/* {{{ php_gettext_functions[]
- */
-function_entry php_gettext_functions[] = {
- PHP_NAMED_FE(textdomain, zif_textdomain, NULL)
- PHP_NAMED_FE(gettext, zif_gettext, NULL)
- /* Alias for gettext() */
- PHP_NAMED_FE(_, zif_gettext, NULL)
- PHP_NAMED_FE(dgettext, zif_dgettext, NULL)
- PHP_NAMED_FE(dcgettext, zif_dcgettext, NULL)
- PHP_NAMED_FE(bindtextdomain, zif_bindtextdomain, NULL)
-#if HAVE_NGETTEXT
- PHP_NAMED_FE(ngettext, zif_ngettext, NULL)
-#endif
-#if HAVE_DNGETTEXT
- PHP_NAMED_FE(dngettext, zif_dngettext, NULL)
-#endif
-#if HAVE_DCNGETTEXT
- PHP_NAMED_FE(dcngettext, zif_dcngettext, NULL)
-#endif
-#if HAVE_BIND_TEXTDOMAIN_CODESET
- PHP_NAMED_FE(bind_textdomain_codeset, zif_bind_textdomain_codeset, NULL)
-#endif
- {NULL, NULL, NULL}
-};
-/* }}} */
-
-#include <libintl.h>
-
-zend_module_entry php_gettext_module_entry = {
- STANDARD_MODULE_HEADER,
- "gettext",
- php_gettext_functions,
- NULL,
- NULL,
- NULL,
- NULL,
- PHP_MINFO(php_gettext),
- NO_VERSION_YET,
- STANDARD_MODULE_PROPERTIES
-};
-
-#ifdef COMPILE_DL_GETTEXT
-ZEND_GET_MODULE(php_gettext)
-#endif
-
-PHP_MINFO_FUNCTION(php_gettext)
-{
- php_info_print_table_start();
- php_info_print_table_row(2, "GetText Support", "enabled");
- php_info_print_table_end();
-}
-
-/* {{{ proto string textdomain(string domain)
- Set the textdomain to "domain". Returns the current domain */
-PHP_NAMED_FUNCTION(zif_textdomain)
-{
- zval **domain;
- char *domain_name, *retval;
- char *val;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &domain) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex(domain);
-
- val = Z_STRVAL_PP(domain);
- if (strcmp(val, "") && strcmp(val, "0")) {
- domain_name = val;
- } else {
- domain_name = NULL;
- }
-
- retval = textdomain(domain_name);
-
- RETURN_STRING(retval, 1);
-}
-/* }}} */
-
-/* {{{ proto string gettext(string msgid)
- 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;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &msgid) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex(msgid);
-
- msgstr = gettext(Z_STRVAL_PP(msgid));
-
- RETURN_STRING(msgstr, 1);
-}
-/* }}} */
-
-/* {{{ proto string dgettext(string domain_name, string msgid)
- 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;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &domain_name, &msgid) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex(domain_name);
- convert_to_string_ex(msgid);
-
- msgstr = dgettext(Z_STRVAL_PP(domain_name), Z_STRVAL_PP(msgid));
-
- RETURN_STRING(msgstr, 1);
-}
-/* }}} */
-
-/* {{{ proto string dcgettext(string domain_name, string msgid, long category)
- 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;
-
- if (ZEND_NUM_ARGS() != 3 || zend_get_parameters_ex(3, &domain_name, &msgid, &category) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- 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));
-
- RETURN_STRING(msgstr, 1);
-}
-/* }}} */
-
-/* {{{ proto string bindtextdomain(string domain_name, string dir)
- 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 *retval, dir_name[MAXPATHLEN];
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &domain_name, &dir) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex(domain_name);
- convert_to_string_ex(dir);
-
- if (Z_STRVAL_PP(domain_name)[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")) {
- VCWD_REALPATH(Z_STRVAL_PP(dir), dir_name);
- } else {
- VCWD_GETCWD(dir_name, MAXPATHLEN);
- }
-
- retval = bindtextdomain(Z_STRVAL_PP(domain_name), dir_name);
-
- RETURN_STRING(retval, 1);
-}
-/* }}} */
-
-#if HAVE_NGETTEXT
-/* {{{ proto string ngettext(string MSGID1, string MSGID2, int N)
- Plural version of gettext() */
-PHP_NAMED_FUNCTION(zif_ngettext)
-{
- zval **msgid1, **msgid2, **count;
- char *msgstr;
-
- RETVAL_FALSE;
-
- 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);
-
- msgstr = ngettext(Z_STRVAL_PP(msgid1), Z_STRVAL_PP(msgid2), Z_LVAL_PP(count));
- if (msgstr) {
- RETVAL_STRING (msgstr, 1);
- }
- }
-}
-/* }}} */
-#endif
-
-#if HAVE_DNGETTEXT
-/* {{{ proto string dngettext (string domain, string msgid1, string msgid2, int count)
- Plural version of dgettext() */
-PHP_NAMED_FUNCTION(zif_dngettext)
-{
- zval **domain, **msgid1, **msgid2, **count;
-
- RETVAL_FALSE;
-
- 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);
- }
- }
-}
-/* }}} */
-#endif
-
-#if HAVE_DCNGETTEXT
-/* {{{ proto string dcngettext (string domain, string msgid1, string msgid2, int n, int category)
- Plural version of dcgettext() */
-PHP_NAMED_FUNCTION(zif_dcngettext)
-{
- zval **domain, **msgid1, **msgid2, **count, **category;
-
- RETVAL_FALSE;
-
- if (ZEND_NUM_ARGS() != 5 || zend_get_parameters_ex(4, &domain, &msgid1, &msgid2, &count, &category) == FAILURE) {
- WRONG_PARAM_COUNT;
- } else {
- char* msgstr = NULL;
-
- 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);
-
- msgstr = dcngettext(Z_STRVAL_PP(domain), Z_STRVAL_PP(msgid1), Z_STRVAL_PP(msgid2), Z_LVAL_PP(count), Z_LVAL_PP(category));
-
- if (msgstr) {
- RETVAL_STRING(msgstr, 1);
- }
- }
-}
-/* }}} */
-#endif
-
-#if HAVE_BIND_TEXTDOMAIN_CODESET
-
-/* {{{ proto string bind_textdomain_codeset (string domain, string codeset)
- 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));
-
- if (!retval) {
- RETURN_FALSE;
- }
- RETURN_STRING(retval, 1);
- }
-}
-/* }}} */
-#endif
-
-
-#endif /* HAVE_LIBINTL */
-
-/*
- * 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/gettext/gettext.dsp b/ext/gettext/gettext.dsp
deleted file mode 100644
index 79ea194854..0000000000
--- a/ext/gettext/gettext.dsp
+++ /dev/null
@@ -1,113 +0,0 @@
-# Microsoft Developer Studio Project File - Name="gettext" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=gettext - Win32 Release_TS
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "gettext.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "gettext.mak" CFG="gettext - Win32 Release_TS"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "gettext - Win32 Release_TS" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "gettext - Win32 Debug_TS" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "gettext - Win32 Release_TS"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release_TS"
-# PROP BASE Intermediate_Dir "Release_TS"
-# PROP BASE Ignore_Export_Lib 0
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release_TS"
-# PROP Intermediate_Dir "Release_TS"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MT /W3 /GX /O2 /I "..\.." /I "..\..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\..\TSRM" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "COMPILE_DL_GETTEXT" /D ZTS=1 /YX /FD /c
-# ADD CPP /nologo /MD /W3 /GX /O2 /I "..\.." /I "..\..\main" /I "..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\TSRM" /D ZEND_DEBUG=0 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "GETTEXT_EXPORTS" /D "COMPILE_DL_GETTEXT" /D ZTS=1 /D "ZEND_WIN32" /D "PHP_WIN32" /D HAVE_LIBINTL=1 /D HAVE_BIND_TEXTDOMAIN_CODESET=1 /D HAVE_NGETTEXT=1 /D HAVE_DNGETTEXT=1 /FR /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x406 /d "NDEBUG"
-# ADD RSC /l 0x406 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib php5ts.lib /nologo /dll /machine:I386 /out:"..\..\Release_TS/php_gettext.dll" /libpath:"..\..\Release_TS" /libpath:"..\..\Release_TS_Inline"
-# ADD LINK32 php5ts.lib libintl.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 /out:"..\..\Release_TS/php_gettext.dll" /libpath:"..\..\Release_TS" /libpath:"..\..\Release_TS_Inline"
-
-!ELSEIF "$(CFG)" == "gettext - Win32 Debug_TS"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Debug_TS"
-# PROP BASE Intermediate_Dir "Debug_TS"
-# PROP BASE Ignore_Export_Lib 0
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Debug_TS"
-# PROP Intermediate_Dir "Debug_TS"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MT /W3 /GX /O2 /I "..\.." /I "..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\TSRM" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "MSSQL_EXPORTS" /D "COMPILE_DL_GETTEXT" /D ZTS=1 /YX /FD /c
-# ADD CPP /nologo /MDd /W3 /GX /ZI /Od /I "..\.." /I "..\..\main" /I "..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\TSRM" /D ZEND_DEBUG=1 /D HAVE_NGETTEXT=1 /D HAVE_DNGETTEXT=1 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "GETTEXT_EXPORTS" /D "COMPILE_DL_GETTEXT" /D ZTS=1 /D "ZEND_WIN32" /D "PHP_WIN32" /D HAVE_LIBINTL=1 /D HAVE_BIND_TEXTDOMAIN_CODESET=1 /FR /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x406 /d "NDEBUG"
-# ADD RSC /l 0x406 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib php5ts.lib /nologo /dll /machine:I386 /out:"../../Debug_TS/php_gettext.dll" /libpath:"..\..\Debug_TS"
-# ADD LINK32 php5ts_debug.lib libintl.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /incremental:yes /debug /machine:I386 /out:"../../Debug_TS/php_gettext.dll" /libpath:"..\..\Debug_TS"
-
-!ENDIF
-
-# Begin Target
-
-# Name "gettext - Win32 Release_TS"
-# Name "gettext - Win32 Debug_TS"
-# Begin Group "Source Files"
-
-# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
-# Begin Source File
-
-SOURCE=.\gettext.c
-# End Source File
-# End Group
-# Begin Group "Header Files"
-
-# PROP Default_Filter "h;hpp;hxx;hm;inl"
-# Begin Source File
-
-SOURCE=.\php_gettext.h
-# End Source File
-# End Group
-# Begin Group "Resource Files"
-
-# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
-# End Group
-# End Target
-# End Project
diff --git a/ext/gettext/php_gettext.h b/ext/gettext/php_gettext.h
deleted file mode 100644
index 8219ca3827..0000000000
--- a/ext/gettext/php_gettext.h
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Alex Plotnick <alex@wgate.com> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifndef PHP_GETTEXT_H
-#define PHP_GETTEXT_H
-
-#if HAVE_LIBINTL
-
-extern zend_module_entry php_gettext_module_entry;
-#define gettext_module_ptr &php_gettext_module_entry
-
-PHP_MINFO_FUNCTION(php_gettext);
-
-PHP_NAMED_FUNCTION(zif_textdomain);
-PHP_NAMED_FUNCTION(zif_gettext);
-PHP_NAMED_FUNCTION(zif_dgettext);
-PHP_NAMED_FUNCTION(zif_dcgettext);
-PHP_NAMED_FUNCTION(zif_bindtextdomain);
-#if HAVE_NGETTEXT
-PHP_NAMED_FUNCTION(zif_ngettext);
-#endif
-#if HAVE_DNGETTEXT
-PHP_NAMED_FUNCTION(zif_dngettext);
-#endif
-#if HAVE_DCNGETTEXT
-PHP_NAMED_FUNCTION(zif_dcngettext);
-#endif
-#if HAVE_BIND_TEXTDOMAIN_CODESET
-PHP_NAMED_FUNCTION(zif_bind_textdomain_codeset);
-#endif
-
-#else
-#define gettext_module_ptr NULL
-#endif /* HAVE_LIBINTL */
-
-#define phpext_gettext_ptr gettext_module_ptr
-
-#endif /* PHP_GETTEXT_H */
diff --git a/ext/gettext/tests/gettext_basic.phpt b/ext/gettext/tests/gettext_basic.phpt
deleted file mode 100644
index 441ca57a83..0000000000
--- a/ext/gettext/tests/gettext_basic.phpt
+++ /dev/null
@@ -1,25 +0,0 @@
---TEST--
-Gettext basic test
---SKIPIF--
-<?php
- if (!extension_loaded("gettext")) {
- die("skip\n");
- }
- if (!setlocale(LC_ALL, 'fi_FI')) {
- die("skip fi_FI locale not supported.");
- }
-?>
---FILE--
-<?php // $Id$
-
-chdir(dirname(__FILE__));
-setlocale(LC_ALL, 'fi_FI');
-bindtextdomain ("messages", "./locale");
-textdomain ("messages");
-echo gettext("Basic test"), "\n";
-echo _("Basic test"), "\n";
-
-?>
---EXPECT--
-Perustesti
-Perustesti
diff --git a/ext/gettext/tests/locale/fi/LC_MESSAGES/messages.mo b/ext/gettext/tests/locale/fi/LC_MESSAGES/messages.mo
deleted file mode 100644
index 55f4d1a341..0000000000
--- a/ext/gettext/tests/locale/fi/LC_MESSAGES/messages.mo
+++ /dev/null
Binary files differ
diff --git a/ext/gettext/tests/locale/fi/LC_MESSAGES/messages.po b/ext/gettext/tests/locale/fi/LC_MESSAGES/messages.po
deleted file mode 100644
index 3505156f74..0000000000
--- a/ext/gettext/tests/locale/fi/LC_MESSAGES/messages.po
+++ /dev/null
@@ -1,15 +0,0 @@
-# SOME DESCRIPTIVE TITLE.
-# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the PACKAGE package.
-# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
-#
-#, fuzzy
-msgid ""
-msgstr ""
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=ISO-8859-1\n"
-"Content-Transfer-Encoding: 8bit\n"
-
-#: gettext_basic.phpt:11
-msgid "Basic test"
-msgstr "Perustesti"
diff --git a/ext/gmp/CREDITS b/ext/gmp/CREDITS
deleted file mode 100644
index 7e0346dc24..0000000000
--- a/ext/gmp/CREDITS
+++ /dev/null
@@ -1,2 +0,0 @@
-GNU GMP support
-Stanislav Malyshev
diff --git a/ext/gmp/README b/ext/gmp/README
deleted file mode 100644
index e142e2e031..0000000000
--- a/ext/gmp/README
+++ /dev/null
@@ -1,5 +0,0 @@
-Arbitrary length number support with GNU MP library.
-Please see the PGP manual for more documentation.
-See also GNU MP home page at http://www.swox.com/gmp/.
-GNU MP library is available under the tems of GNU LGPL
-license. Please see http://www.swox.com/gmp/lgpl.html
diff --git a/ext/gmp/TODO b/ext/gmp/TODO
deleted file mode 100644
index 81098a9cc1..0000000000
--- a/ext/gmp/TODO
+++ /dev/null
@@ -1,22 +0,0 @@
-mpz_mul_2exp
-mpz_[ft]div_[qr]_2exp
-
-V 3:
-mpz_nextprime
-mpz_addmul
-mpz_root
-mpz_perfect_power_p
-mpz_lcm
-mpz_si_kronecker
-mpz_kronecker_si
-mpz_remove
-mpz_bin_ui
-mpz_fib_ui
-mpz_cmpabs
-mpz_xor
-mpz_tstbit
-mpz_urandom[bm]
-mpz_fits_slong_p
-mpz_mul_si
-mpz_odd_p
-mpz_even_p
diff --git a/ext/gmp/config.m4 b/ext/gmp/config.m4
deleted file mode 100644
index aeb7edbd55..0000000000
--- a/ext/gmp/config.m4
+++ /dev/null
@@ -1,36 +0,0 @@
-dnl
-dnl $Id$
-dnl
-
-PHP_ARG_WITH(gmp, for GNU MP support,
-[ --with-gmp[=DIR] Include GNU MP support])
-
-if test "$PHP_GMP" != "no"; then
-
- for i in $PHP_GMP /usr/local /usr; do
- test -f $i/include/gmp.h && GMP_DIR=$i && break
- done
-
- if test -z "$GMP_DIR"; then
- AC_MSG_ERROR(Unable to locate gmp.h)
- fi
-
- PHP_CHECK_LIBRARY(gmp, __gmp_randinit_lc_2exp_size,
- [],[
- PHP_CHECK_LIBRARY(gmp, gmp_randinit_lc_2exp_size,
- [],[
- AC_MSG_ERROR([GNU MP Library version 4.1.2 or greater required.])
- ],[
- -L$GMP_DIR/lib
- ])
- ],[
- -L$GMP_DIR/lib
- ])
-
- PHP_ADD_LIBRARY_WITH_PATH(gmp, $GMP_DIR/lib, GMP_SHARED_LIBADD)
- PHP_ADD_INCLUDE($GMP_DIR/include)
-
- PHP_NEW_EXTENSION(gmp, gmp.c, $ext_shared)
- PHP_SUBST(GMP_SHARED_LIBADD)
- AC_DEFINE(HAVE_GMP, 1, [ ])
-fi
diff --git a/ext/gmp/gmp.c b/ext/gmp/gmp.c
deleted file mode 100644
index f41b4063e3..0000000000
--- a/ext/gmp/gmp.c
+++ /dev/null
@@ -1,1312 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Stanislav Malyshev <stas@php.net> |
- +----------------------------------------------------------------------+
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "php.h"
-#include "php_ini.h"
-#include "php_gmp.h"
-#include "ext/standard/info.h"
-
-#if HAVE_GMP
-
-#include <gmp.h>
-
-/* Needed for gmp_random() */
-#include "ext/standard/php_rand.h"
-#include "ext/standard/php_lcg.h"
-#define GMP_ABS(x) ((x) >= 0 ? (x) : -(x))
-
-/* True global resources - no need for thread safety here */
-static int le_gmp;
-
-/* {{{ gmp_functions[]
- */
-function_entry gmp_functions[] = {
- ZEND_FE(gmp_init, NULL)
- ZEND_FE(gmp_intval, NULL)
- ZEND_FE(gmp_strval, NULL)
- ZEND_FE(gmp_add, NULL)
- ZEND_FE(gmp_sub, NULL)
- ZEND_FE(gmp_mul, NULL)
- ZEND_FE(gmp_div_qr, NULL)
- ZEND_FE(gmp_div_q, NULL)
- ZEND_FE(gmp_div_r, NULL)
- ZEND_FALIAS(gmp_div, gmp_div_q, NULL)
- ZEND_FE(gmp_mod, NULL)
- ZEND_FE(gmp_divexact, NULL)
- ZEND_FE(gmp_neg, NULL)
- ZEND_FE(gmp_abs, NULL)
- ZEND_FE(gmp_fact, NULL)
- ZEND_FE(gmp_sqrt, NULL)
- ZEND_FE(gmp_sqrtrem, NULL)
- ZEND_FE(gmp_pow, NULL)
- ZEND_FE(gmp_powm, NULL)
- ZEND_FE(gmp_perfect_square, NULL)
- ZEND_FE(gmp_prob_prime, NULL)
- ZEND_FE(gmp_gcd, NULL)
- ZEND_FE(gmp_gcdext, NULL)
- ZEND_FE(gmp_invert, NULL)
- ZEND_FE(gmp_jacobi, NULL)
- ZEND_FE(gmp_legendre, NULL)
- ZEND_FE(gmp_cmp, NULL)
- ZEND_FE(gmp_sign, NULL)
- ZEND_FE(gmp_random, NULL)
- ZEND_FE(gmp_and, NULL)
- ZEND_FE(gmp_or, NULL)
- ZEND_FE(gmp_com, NULL)
- ZEND_FE(gmp_xor, NULL)
- ZEND_FE(gmp_setbit, first_arg_force_ref)
- ZEND_FE(gmp_clrbit, first_arg_force_ref)
- ZEND_FE(gmp_scan0, NULL)
- ZEND_FE(gmp_scan1, NULL)
- ZEND_FE(gmp_popcount, NULL)
- ZEND_FE(gmp_hamdist, NULL)
- {NULL, NULL, NULL} /* Must be the last line in gmp_functions[] */
-};
-/* }}} */
-
-/* {{{ gmp_module_entry
- */
-zend_module_entry gmp_module_entry = {
- STANDARD_MODULE_HEADER,
- "gmp",
- gmp_functions,
- ZEND_MODULE_STARTUP_N(gmp),
- ZEND_MODULE_SHUTDOWN_N(gmp),
- NULL,
- ZEND_MODULE_DEACTIVATE_N(gmp),
- ZEND_MODULE_INFO_N(gmp),
- NO_VERSION_YET,
- STANDARD_MODULE_PROPERTIES
-};
-/* }}} */
-
-ZEND_DECLARE_MODULE_GLOBALS(gmp)
-
-#ifdef COMPILE_DL_GMP
-ZEND_GET_MODULE(gmp)
-# ifdef PHP_WIN32
-# include "zend_arg_defs.c"
-# endif
-#endif
-
-static void _php_gmpnum_free(zend_rsrc_list_entry *rsrc TSRMLS_DC);
-
-#define GMP_RESOURCE_NAME "GMP integer"
-
-#define GMP_ROUND_ZERO 0
-#define GMP_ROUND_PLUSINF 1
-#define GMP_ROUND_MINUSINF 2
-
-/* {{{ gmp_emalloc
- */
-static void *gmp_emalloc(size_t size)
-{
- return emalloc(size);
-}
-/* }}} */
-
-/* {{{ gmp_erealloc
- */
-static void *gmp_erealloc(void *ptr, size_t old_size, size_t new_size)
-{
- return erealloc(ptr, new_size);
-}
-/* }}} */
-
-/* {{{ gmp_efree
- */
-static void gmp_efree(void *ptr, size_t size)
-{
- efree(ptr);
-}
-/* }}} */
-
-/* {{{ php_gmp_init_globals
- */
-static void php_gmp_init_globals(zend_gmp_globals *gmp_globals)
-{
- gmp_globals->rand_initialized = 0;
-}
-/* }}} */
-
-/* {{{ ZEND_MINIT_FUNCTION
- */
-ZEND_MODULE_STARTUP_D(gmp)
-{
- ZEND_INIT_MODULE_GLOBALS(gmp, php_gmp_init_globals, NULL);
-
- le_gmp = zend_register_list_destructors_ex(_php_gmpnum_free, NULL, GMP_RESOURCE_NAME, module_number);
- REGISTER_LONG_CONSTANT("GMP_ROUND_ZERO", GMP_ROUND_ZERO, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("GMP_ROUND_PLUSINF", GMP_ROUND_PLUSINF, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("GMP_ROUND_MINUSINF", GMP_ROUND_MINUSINF, CONST_CS | CONST_PERSISTENT);
-
- mp_set_memory_functions(gmp_emalloc, gmp_erealloc, gmp_efree);
-
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ ZEND_RSHUTDOWN_FUNCTION
- */
-ZEND_MODULE_DEACTIVATE_D(gmp)
-{
- if (GMPG(rand_initialized)) {
- gmp_randclear(GMPG(rand_state));
- GMPG(rand_initialized) = 0;
- }
-
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ ZEND_MSHUTDOWN_FUNCTION
- */
-ZEND_MODULE_SHUTDOWN_D(gmp)
-{
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ ZEND_MINFO_FUNCTION
- */
-ZEND_MODULE_INFO_D(gmp)
-{
- php_info_print_table_start();
- php_info_print_table_row(2, "gmp support", "enabled");
- php_info_print_table_end();
-
- /* Remove comments if you have entries in php.ini
- DISPLAY_INI_ENTRIES();
- */
-}
-/* }}} */
-
-/* Fetch zval to be GMP number.
- Initially, zval can be also number or string */
-#define FETCH_GMP_ZVAL(gmpnumber, zval) \
-if (Z_TYPE_PP(zval) == IS_RESOURCE) { \
- ZEND_FETCH_RESOURCE(gmpnumber, mpz_t *, zval, -1, GMP_RESOURCE_NAME, le_gmp);\
-} else {\
- if (convert_to_gmp(&gmpnumber, zval, 0 TSRMLS_CC) == FAILURE) {\
- RETURN_FALSE;\
- }\
- ZEND_REGISTER_RESOURCE(NULL, gmpnumber, le_gmp);\
-}
-
-/* create a new initialized GMP number */
-#define INIT_GMP_NUM(gmpnumber) { gmpnumber=emalloc(sizeof(mpz_t)); mpz_init(*gmpnumber); }
-#define FREE_GMP_NUM(gmpnumber) { mpz_clear(*gmpnumber); efree(gmpnumber); }
-
-/* {{{ convert_to_gmp
- * Convert zval to be gmp number */
-static int convert_to_gmp(mpz_t * *gmpnumber, zval **val, int base TSRMLS_DC)
-{
- int ret = 0;
- int skip_lead = 0;
-
- *gmpnumber = emalloc(sizeof(mpz_t));
-
- switch (Z_TYPE_PP(val)) {
- case IS_LONG:
- case IS_BOOL:
- case IS_CONSTANT:
- {
- convert_to_long_ex(val);
- mpz_init_set_si(**gmpnumber, Z_LVAL_PP(val));
- }
- break;
- case IS_STRING:
- {
- char *numstr = Z_STRVAL_PP(val);
-
- if (Z_STRLEN_PP(val) > 2) {
- if (numstr[0] == '0') {
- if (numstr[1] == 'x' || numstr[1] == 'X') {
- base = 16;
- skip_lead = 1;
- } else if (base != 16 && (numstr[1] == 'b' || numstr[1] == 'B')) {
- base = 2;
- skip_lead = 1;
- }
- }
- }
- ret = mpz_init_set_str(**gmpnumber, (skip_lead ? &numstr[2] : numstr), base);
- }
- break;
- default:
- php_error_docref(NULL TSRMLS_CC, E_WARNING,"Unable to convert variable to GMP - wrong type");
- efree(*gmpnumber);
- return FAILURE;
- }
-
- if (ret) {
- FREE_GMP_NUM(*gmpnumber);
- return FAILURE;
- }
-
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ typedefs
- */
-typedef void (*gmp_unary_op_t)(mpz_ptr, mpz_srcptr);
-typedef int (*gmp_unary_opl_t)(mpz_srcptr);
-
-typedef void (*gmp_unary_ui_op_t)(mpz_ptr, unsigned long);
-
-typedef void (*gmp_binary_op_t)(mpz_ptr, mpz_srcptr, mpz_srcptr);
-typedef int (*gmp_binary_opl_t)(mpz_srcptr, mpz_srcptr);
-
-typedef unsigned long (*gmp_binary_ui_op_t)(mpz_ptr, mpz_srcptr, unsigned long);
-typedef void (*gmp_binary_op2_t)(mpz_ptr, mpz_ptr, mpz_srcptr, mpz_srcptr);
-typedef unsigned long (*gmp_binary_ui_op2_t)(mpz_ptr, mpz_ptr, mpz_srcptr, unsigned long);
-/* }}} */
-
-#define gmp_zval_binary_ui_op(r, a, b, o, u) gmp_zval_binary_ui_op_ex(r, a, b, o, u, 0 TSRMLS_CC)
-#define gmp_zval_binary_ui_op2(r, a, b, o, u) gmp_zval_binary_ui_op2_ex(r, a, b, o, u, 0 TSRMLS_CC)
-
-#define gmp_binary_ui_op(op, uop) _gmp_binary_ui_op(INTERNAL_FUNCTION_PARAM_PASSTHRU, op, uop)
-#define gmp_binary_op(op) _gmp_binary_ui_op(INTERNAL_FUNCTION_PARAM_PASSTHRU, op, NULL)
-#define gmp_binary_opl(op) _gmp_binary_opl(INTERNAL_FUNCTION_PARAM_PASSTHRU, op)
-
-/* Unary operations */
-#define gmp_unary_op(op) _gmp_unary_op(INTERNAL_FUNCTION_PARAM_PASSTHRU, op)
-#define gmp_unary_opl(op) _gmp_unary_opl(INTERNAL_FUNCTION_PARAM_PASSTHRU, op)
-#define gmp_unary_ui_op(op) _gmp_unary_ui_op(INTERNAL_FUNCTION_PARAM_PASSTHRU, op)
-
-/* {{{ gmp_zval_binary_ui_op_ex
- Execute GMP binary operation.
- May return GMP resource or long if operation allows this
-*/
-static inline void gmp_zval_binary_ui_op_ex(zval *return_value, zval **a_arg, zval **b_arg, gmp_binary_op_t gmp_op, gmp_binary_ui_op_t gmp_ui_op, int allow_ui_return TSRMLS_DC)
-{
- mpz_t *gmpnum_a, *gmpnum_b, *gmpnum_result;
- unsigned long long_result = 0;
- int use_ui = 0;
-
- FETCH_GMP_ZVAL(gmpnum_a, a_arg);
-
- if (gmp_ui_op && Z_TYPE_PP(b_arg) == IS_LONG && Z_LVAL_PP(b_arg) >= 0) {
- use_ui = 1;
- } else {
- FETCH_GMP_ZVAL(gmpnum_b, b_arg);
- }
-
- if (!Z_LVAL_PP(b_arg)) {
- RETURN_FALSE;
- }
-
- INIT_GMP_NUM(gmpnum_result);
-
- if (use_ui && gmp_ui_op) {
- if (allow_ui_return) {
- long_result = gmp_ui_op(*gmpnum_result, *gmpnum_a, (unsigned long)Z_LVAL_PP(b_arg));
- } else {
- gmp_ui_op(*gmpnum_result, *gmpnum_a, (unsigned long)Z_LVAL_PP(b_arg));
- }
- } else {
- gmp_op(*gmpnum_result, *gmpnum_a, *gmpnum_b);
- }
-
- if (use_ui && allow_ui_return) {
- FREE_GMP_NUM(gmpnum_result);
- RETURN_LONG((long)long_result);
- } else {
- ZEND_REGISTER_RESOURCE(return_value, gmpnum_result, le_gmp);
- }
-}
-/* }}} */
-
-/* {{{ gmp_zval_binary_ui_op2_ex
- Execute GMP binary operation which returns 2 values.
- May return GMP resources or longs if operation allows this.
-*/
-static inline void gmp_zval_binary_ui_op2_ex(zval *return_value, zval **a_arg, zval **b_arg, gmp_binary_op2_t gmp_op, gmp_binary_ui_op2_t gmp_ui_op, int allow_ui_return TSRMLS_DC)
-{
- mpz_t *gmpnum_a, *gmpnum_b, *gmpnum_result1, *gmpnum_result2;
- zval r;
- int use_ui = 0;
- unsigned long long_result = 0;
-
- FETCH_GMP_ZVAL(gmpnum_a, a_arg);
-
- if (gmp_ui_op && Z_TYPE_PP(b_arg) == IS_LONG && Z_LVAL_PP(b_arg) >= 0) {
- /* use _ui function */
- use_ui = 1;
- } else {
- FETCH_GMP_ZVAL(gmpnum_b, b_arg);
- }
-
- if (!Z_LVAL_PP(b_arg)) {
- RETURN_FALSE;
- }
-
- INIT_GMP_NUM(gmpnum_result1);
- INIT_GMP_NUM(gmpnum_result2);
-
- if (use_ui && gmp_ui_op) {
- if (allow_ui_return) {
- long_result = gmp_ui_op(*gmpnum_result1, *gmpnum_result2, *gmpnum_a, (unsigned long)Z_LVAL_PP(b_arg));
- } else {
- gmp_ui_op(*gmpnum_result1, *gmpnum_result2, *gmpnum_a, (unsigned long)Z_LVAL_PP(b_arg));
- }
- } else {
- gmp_op(*gmpnum_result1, *gmpnum_result2, *gmpnum_a, *gmpnum_b);
- }
-
- array_init(return_value);
- ZEND_REGISTER_RESOURCE(&r, gmpnum_result1, le_gmp);
- add_index_resource(return_value, 0, Z_LVAL(r));
- if (use_ui && allow_ui_return) {
- mpz_clear(*gmpnum_result2);
- add_index_long(return_value, 1, long_result);
- } else {
- ZEND_REGISTER_RESOURCE(&r, gmpnum_result2, le_gmp);
- add_index_resource(return_value, 1, Z_LVAL(r));
- }
-}
-/* }}} */
-
-/* {{{ _gmp_binary_ui_op
- */
-static inline void _gmp_binary_ui_op(INTERNAL_FUNCTION_PARAMETERS, gmp_binary_op_t gmp_op, gmp_binary_ui_op_t gmp_ui_op)
-{
- zval **a_arg, **b_arg;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &a_arg, &b_arg) == FAILURE){
- WRONG_PARAM_COUNT;
- }
-
- gmp_zval_binary_ui_op(return_value, a_arg, b_arg, gmp_op, gmp_ui_op);
-}
-/* }}} */
-
-/* Unary operations */
-
-/* {{{ gmp_zval_unary_op
- */
-static inline void gmp_zval_unary_op(zval *return_value, zval **a_arg, gmp_unary_op_t gmp_op TSRMLS_DC)
-{
- mpz_t *gmpnum_a, *gmpnum_result;
-
- FETCH_GMP_ZVAL(gmpnum_a, a_arg);
-
- INIT_GMP_NUM(gmpnum_result);
- gmp_op(*gmpnum_result, *gmpnum_a);
-
- ZEND_REGISTER_RESOURCE(return_value, gmpnum_result, le_gmp);
-}
-/* }}} */
-
-/* {{{ gmp_zval_unary_ui_op
- */
-static inline void gmp_zval_unary_ui_op(zval *return_value, zval **a_arg, gmp_unary_ui_op_t gmp_op)
-{
- mpz_t *gmpnum_result;
-
- convert_to_long_ex(a_arg);
-
- INIT_GMP_NUM(gmpnum_result);
- gmp_op(*gmpnum_result, Z_LVAL_PP(a_arg));
-
- ZEND_REGISTER_RESOURCE(return_value, gmpnum_result, le_gmp);
-}
-/* }}} */
-
-/* {{{ _gmp_unary_ui_op
- Execute GMP unary operation.
-*/
-static inline void _gmp_unary_ui_op(INTERNAL_FUNCTION_PARAMETERS, gmp_unary_ui_op_t gmp_op)
-{
- zval **a_arg;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &a_arg) == FAILURE){
- WRONG_PARAM_COUNT;
- }
-
- gmp_zval_unary_ui_op(return_value, a_arg, gmp_op);
-}
-/* }}} */
-
-/* {{{ _gmp_unary_op
- */
-static inline void _gmp_unary_op(INTERNAL_FUNCTION_PARAMETERS, gmp_unary_op_t gmp_op)
-{
- zval **a_arg;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &a_arg) == FAILURE){
- WRONG_PARAM_COUNT;
- }
-
- gmp_zval_unary_op(return_value, a_arg, gmp_op TSRMLS_CC);
-}
-/* }}} */
-
-/* {{{ _gmp_unary_opl
- */
-static inline void _gmp_unary_opl(INTERNAL_FUNCTION_PARAMETERS, gmp_unary_opl_t gmp_op)
-{
- zval **a_arg;
- mpz_t *gmpnum_a;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &a_arg) == FAILURE){
- WRONG_PARAM_COUNT;
- }
-
- FETCH_GMP_ZVAL(gmpnum_a, a_arg);
-
- RETURN_LONG(gmp_op(*gmpnum_a));
-}
-/* }}} */
-
-/* {{{ _gmp_binary_opl
- */
-static inline void _gmp_binary_opl(INTERNAL_FUNCTION_PARAMETERS, gmp_binary_opl_t gmp_op)
-{
- zval **a_arg, **b_arg;
- mpz_t *gmpnum_a, *gmpnum_b;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &a_arg, &b_arg) == FAILURE){
- WRONG_PARAM_COUNT;
- }
-
- FETCH_GMP_ZVAL(gmpnum_a, a_arg);
- FETCH_GMP_ZVAL(gmpnum_b, a_arg);
-
- RETURN_LONG(gmp_op(*gmpnum_a, *gmpnum_b));
-}
-/* }}} */
-
-/* {{{ proto resource gmp_init(mixed number [, int base])
- Initializes GMP number */
-ZEND_FUNCTION(gmp_init)
-{
- zval **number_arg, **base_arg;
- mpz_t * gmpnumber;
- int argc;
- int base=0;
-
- argc = ZEND_NUM_ARGS();
- if (argc < 1 || argc > 2 || zend_get_parameters_ex(argc, &number_arg, &base_arg) == FAILURE){
- WRONG_PARAM_COUNT;
- }
-
- if (argc == 2) {
- convert_to_long_ex(base_arg);
- base = Z_LVAL_PP(base_arg);
- if (base < 2 || base > 36) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Bad base for conversion: %d (should be between 2 and 36)", base);
- RETURN_FALSE;
- }
- }
-
- if (convert_to_gmp(&gmpnumber, number_arg, base TSRMLS_CC) == FAILURE) {
- RETURN_FALSE;
- }
-
- /* Write your own code here to handle argument number. */
- ZEND_REGISTER_RESOURCE(return_value, gmpnumber, le_gmp);
-}
-/* }}} */
-
-/* {{{ proto int gmp_intval(resource gmpnumber)
- Gets signed long value of GMP number */
-ZEND_FUNCTION(gmp_intval)
-{
- zval **gmpnumber_arg;
- mpz_t * gmpnum;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &gmpnumber_arg) == FAILURE){
- WRONG_PARAM_COUNT;
- }
-
- if (Z_TYPE_PP(gmpnumber_arg) == IS_RESOURCE) {
- ZEND_FETCH_RESOURCE(gmpnum, mpz_t *, gmpnumber_arg, -1, GMP_RESOURCE_NAME, le_gmp);
- RETVAL_LONG(mpz_get_si(*gmpnum));
- } else {
- convert_to_long_ex(gmpnumber_arg);
- RETVAL_LONG(Z_LVAL_PP(gmpnumber_arg));
- }
-}
-/* }}} */
-
-/* {{{ proto string gmp_strval(resource gmpnumber [, int base])
- Gets string representation of GMP number */
-ZEND_FUNCTION(gmp_strval)
-{
- zval **gmpnumber_arg, **base_arg;
- int base=10, num_len, argc;
- mpz_t * gmpnum;
- char *out_string;
-
- argc = ZEND_NUM_ARGS();
- if (argc < 1 || argc > 2 || zend_get_parameters_ex(argc, &gmpnumber_arg, &base_arg) == FAILURE){
- WRONG_PARAM_COUNT;
- }
-
- FETCH_GMP_ZVAL(gmpnum, gmpnumber_arg);
-
- switch (argc) {
- case 2:
- convert_to_long_ex(base_arg);
- base = Z_LVAL_PP(base_arg);
- break;
- case 1:
- base = 10;
- break;
- }
-
- if (base < 2 || base > 36) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Bad base for conversion: %d", base);
- RETURN_FALSE;
- }
-
- num_len = mpz_sizeinbase(*gmpnum, base);
- out_string = emalloc(num_len+2);
- if (mpz_sgn(*gmpnum) < 0) {
- num_len++;
- }
- mpz_get_str(out_string, base, *gmpnum);
-
- /*
- From GMP documentation for mpz_sizeinbase():
- The returned value will be exact or 1 too big. If base is a power of
- 2, the returned value will always be exact.
-
- So let's check to see if we already have a \0 byte...
- */
-
- if (out_string[num_len-1] == '\0') {
- num_len--;
- } else {
- out_string[num_len] = '\0';
- }
- RETVAL_STRINGL(out_string, num_len, 0);
-}
-/* }}} */
-
-/* {{{ proto resource gmp_add(resource a, resource b)
- Add a and b */
-ZEND_FUNCTION(gmp_add)
-{
- gmp_binary_ui_op(mpz_add, (gmp_binary_ui_op_t)mpz_add_ui);
-}
-/* }}} */
-
-/* {{{ proto resource gmp_sub(resource a, resource b)
- Subtract b from a */
-ZEND_FUNCTION(gmp_sub)
-{
- gmp_binary_ui_op(mpz_sub, (gmp_binary_ui_op_t)mpz_sub_ui);
-}
-/* }}} */
-
-/* {{{ proto resource gmp_mul(resource a, resource b)
- Multiply a and b */
-ZEND_FUNCTION(gmp_mul)
-{
- gmp_binary_ui_op(mpz_mul, (gmp_binary_ui_op_t)mpz_mul_ui);
-}
-/* }}} */
-
-/* {{{ proto array gmp_div_qr(resource a, resource b [, int round])
- Divide a by b, returns quotient and reminder */
-ZEND_FUNCTION(gmp_div_qr)
-{
- zval **a_arg, **b_arg, **round_arg;
- int round = GMP_ROUND_ZERO, argc;
-
- argc = ZEND_NUM_ARGS();
- if (argc < 2 || argc > 3 || zend_get_parameters_ex(argc, &a_arg, &b_arg, &round_arg) == FAILURE){
- WRONG_PARAM_COUNT;
- }
-
- switch (argc) {
- case 3:
- convert_to_long_ex(round_arg);
- round = Z_LVAL_PP(round_arg);
- break;
- case 2:
- round = GMP_ROUND_ZERO;
- break;
- }
-
- switch (round) {
- case GMP_ROUND_ZERO:
- gmp_zval_binary_ui_op2(return_value, a_arg, b_arg, mpz_tdiv_qr, (gmp_binary_ui_op2_t)mpz_tdiv_qr_ui);
- break;
- case GMP_ROUND_PLUSINF:
- gmp_zval_binary_ui_op2(return_value, a_arg, b_arg, mpz_cdiv_qr, (gmp_binary_ui_op2_t)mpz_cdiv_qr_ui);
- break;
- case GMP_ROUND_MINUSINF:
- gmp_zval_binary_ui_op2(return_value, a_arg, b_arg, mpz_fdiv_qr, (gmp_binary_ui_op2_t)mpz_fdiv_qr_ui);
- break;
- }
-
-}
-/* }}} */
-
-/* {{{ proto resource gmp_div_r(resource a, resource b [, int round])
- Divide a by b, returns reminder only */
-ZEND_FUNCTION(gmp_div_r)
-{
- zval **a_arg, **b_arg, **round_arg;
- int round = GMP_ROUND_ZERO, argc;
-
- argc = ZEND_NUM_ARGS();
- if (argc < 2 || argc > 3 || zend_get_parameters_ex(argc, &a_arg, &b_arg, &round_arg) == FAILURE){
- WRONG_PARAM_COUNT;
- }
-
- switch (argc) {
- case 3:
- convert_to_long_ex(round_arg);
- round = Z_LVAL_PP(round_arg);
- break;
- case 2:
- round = GMP_ROUND_ZERO;
- break;
- }
-
- switch (round) {
- case GMP_ROUND_ZERO:
- gmp_zval_binary_ui_op_ex(return_value, a_arg, b_arg, mpz_tdiv_r, (gmp_binary_ui_op_t)mpz_tdiv_r_ui, 1 TSRMLS_CC);
- break;
- case GMP_ROUND_PLUSINF:
- gmp_zval_binary_ui_op_ex(return_value, a_arg, b_arg, mpz_cdiv_r, (gmp_binary_ui_op_t)mpz_cdiv_r_ui, 1 TSRMLS_CC);
- break;
- case GMP_ROUND_MINUSINF:
- gmp_zval_binary_ui_op_ex(return_value, a_arg, b_arg, mpz_fdiv_r, (gmp_binary_ui_op_t)mpz_fdiv_r_ui, 1 TSRMLS_CC);
- break;
- }
-}
-/* }}} */
-
-/* {{{ proto resource gmp_div_q(resource a, resource b [, int round])
- Divide a by b, returns quotient only */
-ZEND_FUNCTION(gmp_div_q)
-{
- zval **a_arg, **b_arg, **round_arg;
- int round = GMP_ROUND_ZERO, argc;
-
- argc = ZEND_NUM_ARGS();
- if (argc < 2 || argc > 3 || zend_get_parameters_ex(argc, &a_arg, &b_arg, &round_arg) == FAILURE){
- WRONG_PARAM_COUNT;
- }
-
- switch (argc) {
- case 3:
- convert_to_long_ex(round_arg);
- round = Z_LVAL_PP(round_arg);
- break;
- case 2:
- round = GMP_ROUND_ZERO;
- break;
- }
-
- switch (round) {
- case GMP_ROUND_ZERO:
- gmp_zval_binary_ui_op(return_value, a_arg, b_arg, mpz_tdiv_q, (gmp_binary_ui_op_t)mpz_tdiv_q_ui);
- break;
- case GMP_ROUND_PLUSINF:
- gmp_zval_binary_ui_op(return_value, a_arg, b_arg, mpz_cdiv_q, (gmp_binary_ui_op_t)mpz_cdiv_q_ui);
- break;
- case GMP_ROUND_MINUSINF:
- gmp_zval_binary_ui_op(return_value, a_arg, b_arg, mpz_fdiv_q, (gmp_binary_ui_op_t)mpz_fdiv_q_ui);
- break;
- }
-
-}
-/* }}} */
-
-/* {{{ proto resource gmp_mod(resource a, resource b)
- Computes a modulo b */
-ZEND_FUNCTION(gmp_mod)
-{
- zval **a_arg, **b_arg;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &a_arg, &b_arg) == FAILURE){
- WRONG_PARAM_COUNT;
- }
-
- gmp_zval_binary_ui_op_ex(return_value, a_arg, b_arg, mpz_mod, (gmp_binary_ui_op_t)mpz_mod_ui, 1 TSRMLS_CC);
-}
-/* }}} */
-
-/* {{{ proto resource gmp_divexact(resource a, resource b)
- Divide a by b using exact division algorithm */
-ZEND_FUNCTION(gmp_divexact)
-{
- gmp_binary_op(mpz_divexact);
-}
-/* }}} */
-
-/* {{{ proto resource gmp_neg(resource a)
- Negates a number */
-ZEND_FUNCTION(gmp_neg)
-{
- gmp_unary_op(mpz_neg);
-}
-/* }}} */
-
-/* {{{ proto resource gmp_abs(resource a)
- Calculates absolute value */
-ZEND_FUNCTION(gmp_abs)
-{
- gmp_unary_op(mpz_abs);
-}
-/* }}} */
-
-/* {{{ proto resource gmp_fact(int a)
- Calculates factorial function */
-ZEND_FUNCTION(gmp_fact)
-{
- gmp_unary_ui_op(mpz_fac_ui);
-}
-/* }}} */
-
-/* {{{ proto resource gmp_pow(resource base, int exp)
- Raise base to power exp */
-ZEND_FUNCTION(gmp_pow)
-{
- zval **base_arg, **exp_arg;
- mpz_t *gmpnum_result, *gmpnum_base;
- int use_ui = 0;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &base_arg, &exp_arg) == FAILURE){
- WRONG_PARAM_COUNT;
- }
-
- if (Z_TYPE_PP(base_arg) == IS_LONG && Z_LVAL_PP(base_arg) >= 0) {
- use_ui = 1;
- } else {
- FETCH_GMP_ZVAL(gmpnum_base, base_arg);
- }
-
- convert_to_long_ex(exp_arg);
-
- if (Z_LVAL_PP(exp_arg) < 0) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING,"Negative exponent not supported");
- RETURN_FALSE;
- }
-
- INIT_GMP_NUM(gmpnum_result);
- if (use_ui) {
- mpz_ui_pow_ui(*gmpnum_result, Z_LVAL_PP(base_arg), Z_LVAL_PP(exp_arg));
- } else {
- mpz_pow_ui(*gmpnum_result, *gmpnum_base, Z_LVAL_PP(exp_arg));
- }
-
- ZEND_REGISTER_RESOURCE(return_value, gmpnum_result, le_gmp);
-}
-/* }}} */
-
-/* {{{ proto resource gmp_powm(resource base, resource exp, resource mod)
- Raise base to power exp and take result modulo mod */
-ZEND_FUNCTION(gmp_powm)
-{
- zval **base_arg, **exp_arg, **mod_arg;
- mpz_t *gmpnum_base, *gmpnum_exp, *gmpnum_mod, *gmpnum_result;
- int use_ui = 0;
-
- if (ZEND_NUM_ARGS() != 3 || zend_get_parameters_ex(3, &base_arg, &exp_arg, &mod_arg) == FAILURE){
- WRONG_PARAM_COUNT;
- }
-
- FETCH_GMP_ZVAL(gmpnum_base, base_arg);
-
- if (Z_TYPE_PP(exp_arg) == IS_LONG && Z_LVAL_PP(exp_arg) >= 0) {
- use_ui = 1;
- } else {
- FETCH_GMP_ZVAL(gmpnum_exp, exp_arg);
- }
- FETCH_GMP_ZVAL(gmpnum_mod, mod_arg);
-
- if (!mpz_cmp_ui(*gmpnum_mod, 0)) {
- RETURN_FALSE;
- }
-
- INIT_GMP_NUM(gmpnum_result);
- if (use_ui) {
- mpz_powm_ui(*gmpnum_result, *gmpnum_base, (unsigned long)Z_LVAL_PP(exp_arg), *gmpnum_mod);
- } else {
- mpz_powm(*gmpnum_result, *gmpnum_base, *gmpnum_exp, *gmpnum_mod);
- }
-
- ZEND_REGISTER_RESOURCE(return_value, gmpnum_result, le_gmp);
-
-}
-/* }}} */
-
-/* {{{ proto resource gmp_sqrt(resource a)
- Takes integer part of square root of a */
-ZEND_FUNCTION(gmp_sqrt)
-{
- gmp_unary_op(mpz_sqrt);
-}
-/* }}} */
-
-/* {{{ proto array gmp_sqrtrem(resource a)
- Square root with remainder */
-ZEND_FUNCTION(gmp_sqrtrem)
-{
- zval **a_arg;
- mpz_t *gmpnum_a, *gmpnum_result1, *gmpnum_result2;
- zval r;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &a_arg) == FAILURE){
- WRONG_PARAM_COUNT;
- }
-
- FETCH_GMP_ZVAL(gmpnum_a, a_arg);
-
- INIT_GMP_NUM(gmpnum_result1);
- INIT_GMP_NUM(gmpnum_result2);
-
- mpz_sqrtrem(*gmpnum_result1, *gmpnum_result2, *gmpnum_a);
-
- array_init(return_value);
- ZEND_REGISTER_RESOURCE(&r, gmpnum_result1, le_gmp);
- add_index_resource(return_value, 0, Z_LVAL(r));
- ZEND_REGISTER_RESOURCE(&r, gmpnum_result2, le_gmp);
- add_index_resource(return_value, 1, Z_LVAL(r));
-}
-/* }}} */
-
-/* {{{ proto bool gmp_perfect_square(resource a)
- Checks if a is an exact square */
-ZEND_FUNCTION(gmp_perfect_square)
-{
- zval **a_arg;
- mpz_t *gmpnum_a;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &a_arg) == FAILURE){
- WRONG_PARAM_COUNT;
- }
-
- FETCH_GMP_ZVAL(gmpnum_a, a_arg);
-
- RETURN_BOOL((mpz_perfect_square_p(*gmpnum_a)!=0));
-}
-/* }}} */
-
-/* {{{ proto int gmp_prob_prime(resource a[, int reps])
- Checks if a is "probably prime" */
-ZEND_FUNCTION(gmp_prob_prime)
-{
- zval **gmpnumber_arg, **reps_arg;
- mpz_t *gmpnum_a;
- int argc, reps = 10;
-
- argc = ZEND_NUM_ARGS();
- if (argc < 1 || argc > 2 || zend_get_parameters_ex(argc, &gmpnumber_arg, &reps_arg) == FAILURE){
- WRONG_PARAM_COUNT;
- }
-
- FETCH_GMP_ZVAL(gmpnum_a, gmpnumber_arg);
-
- switch (argc) {
- case 2:
- convert_to_long_ex(reps_arg);
- reps = Z_LVAL_PP(reps_arg);
- break;
- case 1:
- reps = 10;
- break;
- }
-
- RETURN_LONG(mpz_probab_prime_p(*gmpnum_a, reps));
-}
-/* }}} */
-
-/* {{{ proto resource gmp_gcd(resource a, resource b)
- Computes greatest common denominator (gcd) of a and b */
-ZEND_FUNCTION(gmp_gcd)
-{
- zval **a_arg, **b_arg;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &a_arg, &b_arg) == FAILURE){
- WRONG_PARAM_COUNT;
- }
-
- gmp_zval_binary_ui_op_ex(return_value, a_arg, b_arg, mpz_gcd, (gmp_binary_ui_op_t)mpz_gcd_ui, 1 TSRMLS_CC);
-}
-/* }}} */
-
-/* {{{ proto array gmp_gcdext(resource a, resource b)
- Computes G, S, and T, such that AS + BT = G = `gcd' (A, B) */
-ZEND_FUNCTION(gmp_gcdext)
-{
- zval **a_arg, **b_arg;
- mpz_t *gmpnum_a, *gmpnum_b, *gmpnum_t, *gmpnum_s, *gmpnum_g;
- zval r;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &a_arg, &b_arg) == FAILURE){
- WRONG_PARAM_COUNT;
- }
-
- FETCH_GMP_ZVAL(gmpnum_a, a_arg);
- FETCH_GMP_ZVAL(gmpnum_b, b_arg);
-
- INIT_GMP_NUM(gmpnum_g);
- INIT_GMP_NUM(gmpnum_s);
- INIT_GMP_NUM(gmpnum_t);
-
- mpz_gcdext(*gmpnum_g, *gmpnum_s, *gmpnum_t, *gmpnum_a, *gmpnum_b);
-
- array_init(return_value);
-
- ZEND_REGISTER_RESOURCE(&r, gmpnum_g, le_gmp);
- add_assoc_resource(return_value, "g", Z_LVAL(r));
- ZEND_REGISTER_RESOURCE(&r, gmpnum_s, le_gmp);
- add_assoc_resource(return_value, "s", Z_LVAL(r));
- ZEND_REGISTER_RESOURCE(&r, gmpnum_t, le_gmp);
- add_assoc_resource(return_value, "t", Z_LVAL(r));
-}
-/* }}} */
-
-/* {{{ proto resource gmp_invert(resource a, resource b)
- Computes the inverse of a modulo b */
-ZEND_FUNCTION(gmp_invert)
-{
- zval **a_arg, **b_arg;
- mpz_t *gmpnum_a, *gmpnum_b, *gmpnum_result;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &a_arg, &b_arg) == FAILURE){
- WRONG_PARAM_COUNT;
- }
-
- FETCH_GMP_ZVAL(gmpnum_a, a_arg);
- FETCH_GMP_ZVAL(gmpnum_b, b_arg);
-
- INIT_GMP_NUM(gmpnum_result);
- if (mpz_invert(*gmpnum_result, *gmpnum_a, *gmpnum_b)) {
- ZEND_REGISTER_RESOURCE(return_value, gmpnum_result, le_gmp);
- } else {
- FREE_GMP_NUM(gmpnum_result);
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-/* {{{ proto int gmp_jacobi(resource a, resource b)
- Computes Jacobi symbol */
-ZEND_FUNCTION(gmp_jacobi)
-{
- gmp_binary_opl(mpz_jacobi);
-}
-/* }}} */
-
-/* {{{ proto int gmp_legendre(resource a, resource b)
- Computes Legendre symbol */
-ZEND_FUNCTION(gmp_legendre)
-{
- gmp_binary_opl(mpz_legendre);
-}
-/* }}} */
-
-/* {{{ proto int gmp_cmp(resource a, resource b)
- Compares two numbers */
-ZEND_FUNCTION(gmp_cmp)
-{
- zval **a_arg, **b_arg;
- mpz_t *gmpnum_a, *gmpnum_b;
- int use_si = 0, res;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &a_arg, &b_arg) == FAILURE){
- WRONG_PARAM_COUNT;
- }
-
- FETCH_GMP_ZVAL(gmpnum_a, a_arg);
-
- if (Z_TYPE_PP(b_arg) == IS_LONG) {
- use_si = 1;
- } else {
- FETCH_GMP_ZVAL(gmpnum_b, b_arg);
- }
-
- if (use_si) {
- res = mpz_cmp_si(*gmpnum_a, Z_LVAL_PP(b_arg));
- } else {
- res = mpz_cmp(*gmpnum_a, *gmpnum_b);
- }
-
- RETURN_LONG(res);
-}
-/* }}} */
-
-/* {{{ proto int gmp_sign(resource a)
- Gets the sign of the number */
-ZEND_FUNCTION(gmp_sign)
-{
- zval **a_arg;
- mpz_t *gmpnum_a;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &a_arg) == FAILURE){
- WRONG_PARAM_COUNT;
- }
-
- FETCH_GMP_ZVAL(gmpnum_a, a_arg);
-
- RETURN_LONG(mpz_sgn(*gmpnum_a));
-}
-/* }}} */
-
-/* {{{ proto resource gmp_random([int limiter])
- Gets random number */
-ZEND_FUNCTION(gmp_random)
-{
- zval **limiter_arg;
- int limiter, argc;
- mpz_t *gmpnum_result;
-
- argc = ZEND_NUM_ARGS();
-
- if (argc == 0) {
- limiter = 20;
- } else if (argc == 1 && zend_get_parameters_ex(1, &limiter_arg) == SUCCESS) {
- convert_to_long_ex(limiter_arg);
- limiter = Z_LVAL_PP(limiter_arg);
- } else {
- WRONG_PARAM_COUNT;
- }
-
- INIT_GMP_NUM(gmpnum_result);
-
- if (!GMPG(rand_initialized)) {
- /* Initialize */
- gmp_randinit_lc_2exp_size(GMPG(rand_state), 32L);
-
- /* Seed */
- gmp_randseed_ui(GMPG(rand_state), GENERATE_SEED());
-
- GMPG(rand_initialized) = 1;
- }
- mpz_urandomb(*gmpnum_result, GMPG(rand_state), GMP_ABS (limiter) * __GMP_BITS_PER_MP_LIMB);
-
- ZEND_REGISTER_RESOURCE(return_value, gmpnum_result, le_gmp);
-}
-/* }}} */
-
-/* {{{ proto resource gmp_and(resource a, resource b)
- Calculates logical AND of a and b */
-ZEND_FUNCTION(gmp_and)
-{
- gmp_binary_op(mpz_and);
-}
-/* }}} */
-
-/* {{{ proto resource gmp_or(resource a, resource b)
- Calculates logical OR of a and b */
-ZEND_FUNCTION(gmp_or)
-{
- gmp_binary_op(mpz_ior);
-}
-/* }}} */
-
-/* {{{ proto resource gmp_com(resource a)
- Calculates one's complement of a */
-ZEND_FUNCTION(gmp_com)
-{
- gmp_unary_op(mpz_com);
-}
-/* }}} */
-
-/* {{{ proto resource gmp_xor(resource a, resource b)
- Calculates logical exclusive OR of a and b */
-ZEND_FUNCTION(gmp_xor)
-{
- /* use formula: a^b = (a|b)&^(a&b) */
- zval **a_arg, **b_arg;
- mpz_t *gmpnum_a, *gmpnum_b, *gmpnum_result, *gmpnum_t;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &a_arg, &b_arg) == FAILURE){
- WRONG_PARAM_COUNT;
- }
-
- FETCH_GMP_ZVAL(gmpnum_a, a_arg);
- FETCH_GMP_ZVAL(gmpnum_b, b_arg);
-
- INIT_GMP_NUM(gmpnum_result);
- INIT_GMP_NUM(gmpnum_t);
-
- mpz_and(*gmpnum_t, *gmpnum_a, *gmpnum_b);
- mpz_com(*gmpnum_t, *gmpnum_t);
-
- mpz_ior(*gmpnum_result, *gmpnum_a, *gmpnum_b);
- mpz_and(*gmpnum_result, *gmpnum_result, *gmpnum_t);
-
- FREE_GMP_NUM(gmpnum_t);
-
- ZEND_REGISTER_RESOURCE(return_value, gmpnum_result, le_gmp);
-}
-/* }}} */
-
-/* {{{ proto void gmp_setbit(resource &a, int index[, bool set_clear])
- Sets or clear bit in a */
-ZEND_FUNCTION(gmp_setbit)
-{
- zval **a_arg, **ind_arg, **set_c_arg;
- int argc, index, set = 1;
- mpz_t *gmpnum_a;
-
- argc = ZEND_NUM_ARGS();
- if (argc < 2 || argc > 3 || zend_get_parameters_ex(argc, &a_arg, &ind_arg, &set_c_arg) == FAILURE){
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(gmpnum_a, mpz_t *, a_arg, -1, GMP_RESOURCE_NAME, le_gmp);
-
- convert_to_long_ex(ind_arg);
- index = Z_LVAL_PP(ind_arg);
-
- switch (argc) {
- case 3:
- convert_to_long_ex(set_c_arg);
- set = Z_LVAL_PP(set_c_arg);
- break;
- case 2:
- set = 1;
- break;
- }
-
- if (set) {
- mpz_setbit(*gmpnum_a, index);
- } else {
- mpz_clrbit(*gmpnum_a, index);
- }
-}
-/* }}} */
-
-/* {{{ proto void gmp_clrbit(resource &a, int index)
- Clears bit in a */
-ZEND_FUNCTION(gmp_clrbit)
-{
- zval **a_arg, **ind_arg;
- int index;
- mpz_t *gmpnum_a;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &a_arg, &ind_arg) == FAILURE){
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(gmpnum_a, mpz_t *, a_arg, -1, GMP_RESOURCE_NAME, le_gmp);
-
- convert_to_long_ex(ind_arg);
- index = Z_LVAL_PP(ind_arg);
-
- mpz_clrbit(*gmpnum_a, index);
-}
-/* }}} */
-
-/* {{{ proto int gmp_popcount(resource a)
- Calculates the population count of a */
-ZEND_FUNCTION(gmp_popcount)
-{
- zval **a_arg;
- mpz_t *gmpnum_a;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &a_arg) == FAILURE){
- WRONG_PARAM_COUNT;
- }
-
- FETCH_GMP_ZVAL(gmpnum_a, a_arg);
-
- RETURN_LONG(mpz_popcount(*gmpnum_a));
-}
-/* }}} */
-
-/* {{{ proto int gmp_hamdist(resource a, resource b)
- Calculates hamming distance between a and b */
-ZEND_FUNCTION(gmp_hamdist)
-{
- zval **a_arg, **b_arg;
- mpz_t *gmpnum_a, *gmpnum_b;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &a_arg, &b_arg) == FAILURE){
- WRONG_PARAM_COUNT;
- }
-
- FETCH_GMP_ZVAL(gmpnum_a, a_arg);
- FETCH_GMP_ZVAL(gmpnum_b, b_arg);
-
- RETURN_LONG(mpz_hamdist(*gmpnum_a, *gmpnum_b));
-}
-/* }}} */
-
-/* {{{ proto int gmp_scan0(resource a, int start)
- Finds first zero bit */
-ZEND_FUNCTION(gmp_scan0)
-{
- zval **a_arg, **start_arg;
- mpz_t *gmpnum_a;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &a_arg, &start_arg) == FAILURE){
- WRONG_PARAM_COUNT;
- }
-
- FETCH_GMP_ZVAL(gmpnum_a, a_arg);
- convert_to_long_ex(start_arg);
-
- RETURN_LONG(mpz_scan0(*gmpnum_a, Z_LVAL_PP(start_arg)));
-}
-/* }}} */
-
-/* {{{ proto int gmp_scan1(resource a, int start)
- Finds first non-zero bit */
-ZEND_FUNCTION(gmp_scan1)
-{
- zval **a_arg, **start_arg;
- mpz_t *gmpnum_a;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &a_arg, &start_arg) == FAILURE){
- WRONG_PARAM_COUNT;
- }
-
- FETCH_GMP_ZVAL(gmpnum_a, a_arg);
- convert_to_long_ex(start_arg);
-
- RETURN_LONG(mpz_scan1(*gmpnum_a, Z_LVAL_PP(start_arg)));
-}
-/* }}} */
-
-/* {{{ _php_gmpnum_free
- */
-static void _php_gmpnum_free(zend_rsrc_list_entry *rsrc TSRMLS_DC)
-{
- mpz_t *gmpnum = (mpz_t *)rsrc->ptr;
-
- FREE_GMP_NUM(gmpnum);
-}
-/* }}} */
-
-#endif /* HAVE_GMP */
-
-/*
- * 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/gmp/php_gmp.h b/ext/gmp/php_gmp.h
deleted file mode 100644
index 9268f09858..0000000000
--- a/ext/gmp/php_gmp.h
+++ /dev/null
@@ -1,104 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Stanislav Malyshev <stas@php.net> |
- +----------------------------------------------------------------------+
- */
-
-#ifndef PHP_GMP_H
-#define PHP_GMP_H
-
-#if HAVE_GMP
-
-#include <gmp.h>
-
-extern zend_module_entry gmp_module_entry;
-#define phpext_gmp_ptr &gmp_module_entry
-
-#ifdef ZEND_WIN32
-#define GMP_API __declspec(dllexport)
-#else
-#define GMP_API
-#endif
-
-ZEND_MODULE_STARTUP_D(gmp);
-ZEND_MODULE_SHUTDOWN_D(gmp);
-ZEND_MODULE_DEACTIVATE_D(gmp);
-ZEND_MODULE_INFO_D(gmp);
-
-ZEND_FUNCTION(gmp_init);
-ZEND_FUNCTION(gmp_intval);
-ZEND_FUNCTION(gmp_strval);
-ZEND_FUNCTION(gmp_add);
-ZEND_FUNCTION(gmp_sub);
-ZEND_FUNCTION(gmp_mul);
-ZEND_FUNCTION(gmp_div_qr);
-ZEND_FUNCTION(gmp_div_q);
-ZEND_FUNCTION(gmp_div_r);
-ZEND_FUNCTION(gmp_mod);
-ZEND_FUNCTION(gmp_divexact);
-ZEND_FUNCTION(gmp_neg);
-ZEND_FUNCTION(gmp_abs);
-ZEND_FUNCTION(gmp_fact);
-ZEND_FUNCTION(gmp_sqrt);
-ZEND_FUNCTION(gmp_pow);
-ZEND_FUNCTION(gmp_powm);
-ZEND_FUNCTION(gmp_sqrtrem);
-ZEND_FUNCTION(gmp_perfect_square);
-ZEND_FUNCTION(gmp_prob_prime);
-ZEND_FUNCTION(gmp_gcd);
-ZEND_FUNCTION(gmp_gcdext);
-ZEND_FUNCTION(gmp_invert);
-ZEND_FUNCTION(gmp_jacobi);
-ZEND_FUNCTION(gmp_legendre);
-ZEND_FUNCTION(gmp_cmp);
-ZEND_FUNCTION(gmp_sign);
-ZEND_FUNCTION(gmp_and);
-ZEND_FUNCTION(gmp_or);
-ZEND_FUNCTION(gmp_com);
-ZEND_FUNCTION(gmp_xor);
-ZEND_FUNCTION(gmp_random);
-ZEND_FUNCTION(gmp_setbit);
-ZEND_FUNCTION(gmp_clrbit);
-ZEND_FUNCTION(gmp_scan0);
-ZEND_FUNCTION(gmp_scan1);
-ZEND_FUNCTION(gmp_popcount);
-ZEND_FUNCTION(gmp_hamdist);
-
-ZEND_BEGIN_MODULE_GLOBALS(gmp)
- zend_bool rand_initialized;
- gmp_randstate_t rand_state;
-ZEND_END_MODULE_GLOBALS(gmp)
-
-#ifdef ZTS
-#define GMPG(v) TSRMG(gmp_globals_id, zend_gmp_globals *, v)
-#else
-#define GMPG(v) (gmp_globals.v)
-#endif
-
-#else
-
-#define phpext_gmp_ptr NULL
-
-#endif
-
-#endif /* PHP_GMP_H */
-
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- */
diff --git a/ext/gmp/tests/001.phpt b/ext/gmp/tests/001.phpt
deleted file mode 100644
index 382d374cb9..0000000000
--- a/ext/gmp/tests/001.phpt
+++ /dev/null
@@ -1,21 +0,0 @@
---TEST--
-Check for gmp presence
---SKIPIF--
-<?php if (!extension_loaded("gmp")) print "skip"; ?>
---FILE--
-<?php
-echo "gmp extension is available";
-/*
- you can add regression tests for your extension here
-
- the output of your test code has to be equal to the
- text in the --EXPECT-- section below for the tests
- to pass, differences between the output and the
- expected text are interpreted as failure
-
- see php5/tests/README for further information on
- writing regression tests
-*/
-?>
---EXPECT--
-gmp extension is available \ No newline at end of file
diff --git a/ext/gmp/tests/002.phpt b/ext/gmp/tests/002.phpt
deleted file mode 100644
index ac2a7a5494..0000000000
--- a/ext/gmp/tests/002.phpt
+++ /dev/null
@@ -1,17 +0,0 @@
---TEST--
-GMP functionality test - factorial
---SKIPIF--
-<?php if (!extension_loaded("gmp")) print "skip"; ?>
---FILE--
-<?php
-function fact($x) {
- if($x <= 1)
- return 1;
- else
- return gmp_mul($x,fact($x-1));
-}
-
-print gmp_strval(fact(1000))."\n";
-?>
---EXPECT--
-402387260077093773543702433923003985719374864210714632543799910429938512398629020592044208486969404800479988610197196058631666872994808558901323829669944590997424504087073759918823627727188732519779505950995276120874975462497043601418278094646496291056393887437886487337119181045825783647849977012476632889835955735432513185323958463075557409114262417474349347553428646576611667797396668820291207379143853719588249808126867838374559731746136085379534524221586593201928090878297308431392844403281231558611036976801357304216168747609675871348312025478589320767169132448426236131412508780208000261683151027341827977704784635868170164365024153691398281264810213092761244896359928705114964975419909342221566832572080821333186116811553615836546984046708975602900950537616475847728421889679646244945160765353408198901385442487984959953319101723355556602139450399736280750137837615307127761926849034352625200015888535147331611702103968175921510907788019393178114194545257223865541461062892187960223838971476088506276862967146674697562911234082439208160153780889893964518263243671616762179168909779911903754031274622289988005195444414282012187361745992642956581746628302955570299024324153181617210465832036786906117260158783520751516284225540265170483304226143974286933061690897968482590125458327168226458066526769958652682272807075781391858178889652208164348344825993266043367660176999612831860788386150279465955131156552036093988180612138558600301435694527224206344631797460594682573103790084024432438465657245014402821885252470935190620929023136493273497565513958720559654228749774011413346962715422845862377387538230483865688976461927383814900140767310446640259899490222221765904339901886018566526485061799702356193897017860040811889729918311021171229845901641921068884387121855646124960798722908519296819372388642614839657382291123125024186649353143970137428531926649875337218940694281434118520158014123344828015051399694290153483077644569099073152433278288269864602789864321139083506217095002597389863554277196742822248757586765752344220207573630569498825087968928162753848863396909959826280956121450994871701244516461260379029309120889086942028510640182154399457156805941872748998094254742173582401063677404595741785160829230135358081840096996372524230560855903700624271243416909004153690105933983835777939410970027753472000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
diff --git a/ext/gmp/tests/003.phpt b/ext/gmp/tests/003.phpt
deleted file mode 100644
index 379833024d..0000000000
--- a/ext/gmp/tests/003.phpt
+++ /dev/null
@@ -1,47 +0,0 @@
---TEST--
-Check for number base recognition
---SKIPIF--
-<?php if (!extension_loaded("gmp")) print "skip"; ?>
---FILE--
-<?php
- /* Binary */
- $test[] = gmp_init("0b10011010010");
- $test[] = gmp_init("0b10011010010", 2);
- $test[] = gmp_init("10011010010");
- $test[] = gmp_init("10011010010", 2);
-
- /* Octal */
- $test[] = gmp_init("02322");
- $test[] = gmp_init("02322", 8);
- $test[] = gmp_init("2322");
- $test[] = gmp_init("2322", 8);
-
- /* Decimal */
- $test[] = gmp_init("1234");
- $test[] = gmp_init("1234", 10);
-
- /* Hexidecimal */
- $test[] = gmp_init("0x4d2");
- $test[] = gmp_init("0x4d2", 16);
- $test[] = gmp_init("4d2");
- $test[] = gmp_init("4d2", 16);
-
- for ($i = 0; $i < count($test); $i++) {
- printf("%s\n", gmp_strval($test[$i]));
- }
-?>
---EXPECT--
-1234
-1234
-10011010010
-1234
-1234
-1234
-2322
-1234
-1234
-1234
-1234
-1234
-0
-1234
diff --git a/ext/hwapi/CREDITS b/ext/hwapi/CREDITS
deleted file mode 100644
index 8416199c54..0000000000
--- a/ext/hwapi/CREDITS
+++ /dev/null
@@ -1,2 +0,0 @@
-HwAPI
-Uwe Steinmann
diff --git a/ext/hwapi/config.m4 b/ext/hwapi/config.m4
deleted file mode 100644
index af8069fd21..0000000000
--- a/ext/hwapi/config.m4
+++ /dev/null
@@ -1,35 +0,0 @@
-dnl $Id$
-
-PHP_ARG_WITH(hwapi, for hwapi support,
-[ --with-hwapi[=DIR] Include official Hyperwave API support])
-
-if test "$PHP_HWAPI" != "no"; then
- if test -r $PHP_HWAPI/include/sdk/api/object.h; then
- HWAPI_DIR=$PHP_HWAPI
- else
- AC_MSG_CHECKING(for HWAPI in default path)
- for i in /usr/local /usr; do
- if test -r $i/include/hwapi/sdk/api/object.h; then
- HWAPI_DIR=$i
- AC_MSG_RESULT(found in $i)
- fi
- done
- fi
-
- if test -z "$HWAPI_DIR"; then
- AC_MSG_RESULT(not found)
- AC_MSG_ERROR(Please install the hwapi >= 1.0.0 distribution)
- fi
-
- PHP_ADD_INCLUDE($HWAPI_DIR/include/hwapi)
- PHP_SUBST(HWAPI_SHARED_LIBADD)
- PHP_ADD_LIBRARY_WITH_PATH(hwapi, $HWAPI_DIR/lib, HWAPI_SHARED_LIBADD)
- AC_DEFINE(HAVE_HWAPI,1,[ ])
-
- PHP_REQUIRE_CXX
- PHP_NEW_EXTENSION(hwapi, hwapi.cpp, $ext_shared)
- PHP_ADD_LIBRARY(hwapi)
- PHP_ADD_LIBRARY(pthread)
- PHP_ADD_LIBRARY(stdc++)
- PHP_ADD_INCLUDE($HWAPI_DIR/include)
-fi
diff --git a/ext/hwapi/hwapi.cpp b/ext/hwapi/hwapi.cpp
deleted file mode 100644
index 157195ae01..0000000000
--- a/ext/hwapi/hwapi.cpp
+++ /dev/null
@@ -1,5031 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP version 4.0 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997, 1998, 1999, 2000 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. |
- +----------------------------------------------------------------------+
- | Authors: Uwe Steinmann |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-#include <stdlib.h>
-#include <errno.h>
-
-extern "C"
-{
-#include "php.h"
-#include "php_globals.h"
-#include "ext/standard/head.h"
-#include "ext/standard/info.h"
-#if 0
-#include "ext/standard/php_standard.h"
-#include "fopen-wrappers.h"
-#endif
-#include "SAPI.h"
-}
-
-#ifdef PHP_WIN32
-#include <winsock.h>
-#endif
-#ifdef HAVE_MMAP
-#include <sys/mman.h>
-#endif
-
-#if HAVE_HWAPI
-
-static int le_hwapip;
-static int le_hwapi_objectp;
-static int le_hwapi_attributep;
-static int le_hwapi_errorp;
-static int le_hwapi_contentp;
-static int le_hwapi_reasonp;
-
-static zend_class_entry *hw_api_class_entry_ptr;
-static zend_class_entry *hw_api_object_class_entry_ptr;
-static zend_class_entry *hw_api_attribute_class_entry_ptr;
-static zend_class_entry *hw_api_error_class_entry_ptr;
-static zend_class_entry *hw_api_content_class_entry_ptr;
-static zend_class_entry *hw_api_reason_class_entry_ptr;
-
-#include "php_ini.h"
-#include "php_hwapi.h"
-
-//#ifdef __cplusplus
-//extern "C" {
-#include <sdk/api/api.h>
-#include <sdk/hgcsp/apihgcsp.h>
-//}
-//#endif
-
-function_entry hwapi_functions[] = {
- PHP_FE(hwapi_dummy, NULL)
- PHP_FE(hwapi_init, NULL)
- PHP_FE(hwapi_hgcsp, NULL)
- PHP_FE(hwapi_object, NULL)
- PHP_FE(hwapi_children, NULL)
- PHP_FE(hwapi_parents, NULL)
- PHP_FE(hwapi_find, NULL)
- PHP_FE(hwapi_identify, NULL)
- PHP_FE(hwapi_remove, NULL)
- PHP_FE(hwapi_content, NULL)
- PHP_FE(hwapi_copy, NULL)
- PHP_FE(hwapi_link, NULL)
- PHP_FE(hwapi_move, NULL)
- PHP_FE(hwapi_lock, NULL)
- PHP_FE(hwapi_unlock, NULL)
- PHP_FE(hwapi_replace, NULL)
- PHP_FE(hwapi_object_new, NULL)
- PHP_FE(hwapi_object_count, NULL)
- PHP_FE(hwapi_object_title, NULL)
- PHP_FE(hwapi_object_attreditable, NULL)
- PHP_FE(hwapi_object_assign, NULL)
- PHP_FE(hwapi_object_attribute, NULL)
- PHP_FE(hwapi_object_insert, NULL)
- PHP_FE(hwapi_object_remove, NULL)
- PHP_FE(hwapi_object_value, NULL)
- PHP_FE(hwapi_attribute_new, NULL)
- PHP_FE(hwapi_attribute_key, NULL)
- PHP_FE(hwapi_attribute_value, NULL)
- PHP_FE(hwapi_attribute_values, NULL)
- PHP_FE(hwapi_attribute_langdepvalue, NULL)
- PHP_FE(hwapi_content_new, NULL)
- {NULL, NULL, NULL}
-};
-
-static function_entry php_hw_api_functions[] = {
- {"hgcsp", PHP_FN(hwapi_hgcsp), NULL},
- {"object", PHP_FN(hwapi_object), NULL},
- {"children", PHP_FN(hwapi_children), NULL},
- {"mychildren", PHP_FN(hwapi_mychildren), NULL},
- {"parents", PHP_FN(hwapi_parents), NULL},
- {"find", PHP_FN(hwapi_find), NULL},
- {"identify", PHP_FN(hwapi_identify), NULL},
- {"remove", PHP_FN(hwapi_remove), NULL},
- {"content", PHP_FN(hwapi_content), NULL},
- {"copy", PHP_FN(hwapi_copy), NULL},
- {"link", PHP_FN(hwapi_link), NULL},
- {"move", PHP_FN(hwapi_move), NULL},
- {"lock", PHP_FN(hwapi_lock), NULL},
- {"unlock", PHP_FN(hwapi_unlock), NULL},
- {"replace", PHP_FN(hwapi_replace), NULL},
- {"insert", PHP_FN(hwapi_insert), NULL},
- {"insertdocument", PHP_FN(hwapi_insertdocument), NULL},
- {"insertcollection", PHP_FN(hwapi_insertcollection), NULL},
- {"srcanchors", PHP_FN(hwapi_srcanchors), NULL},
- {"dstanchors", PHP_FN(hwapi_dstanchors), NULL},
- {"objectbyanchor", PHP_FN(hwapi_objectbyanchor), NULL},
- {"dstofsrcanchor", PHP_FN(hwapi_dstofsrcanchor), NULL},
- {"srcsofdst", PHP_FN(hwapi_srcsofdst), NULL},
- {"checkin", PHP_FN(hwapi_checkin), NULL},
- {"checkout", PHP_FN(hwapi_checkout), NULL},
- {"setcommittedversion", PHP_FN(hwapi_setcommittedversion), NULL},
- {"revert", PHP_FN(hwapi_revert), NULL},
- {"history", PHP_FN(hwapi_history), NULL},
- {"removeversion", PHP_FN(hwapi_removeversion), NULL},
- {"freeversion", PHP_FN(hwapi_freeversion), NULL},
- {"configurationhistory", PHP_FN(hwapi_configurationhistory), NULL},
- {"saveconfiguration", PHP_FN(hwapi_saveconfiguration), NULL},
- {"restoreconfiguration", PHP_FN(hwapi_restoreconfiguration), NULL},
- {"removeconfiguration", PHP_FN(hwapi_removeconfiguration), NULL},
- {"mergeconfiguration", PHP_FN(hwapi_mergeconfiguration), NULL},
- {"user", PHP_FN(hwapi_user), NULL},
- {"userlist", PHP_FN(hwapi_userlist), NULL},
- {"hwstat", PHP_FN(hwapi_hwstat), NULL},
- {"dcstat", PHP_FN(hwapi_dcstat), NULL},
- {"dbstat", PHP_FN(hwapi_dbstat), NULL},
- {"ftstat", PHP_FN(hwapi_ftstat), NULL},
- {"info", PHP_FN(hwapi_info), NULL},
- {NULL, NULL, NULL}
-};
-
-static function_entry php_hw_api_object_functions[] = {
- {"hw_api_object", PHP_FN(hwapi_object_new), NULL},
- {"count", PHP_FN(hwapi_object_count), NULL},
- {"title", PHP_FN(hwapi_object_title), NULL},
- {"attributeeditable", PHP_FN(hwapi_object_attreditable), NULL},
- {"assign", PHP_FN(hwapi_object_assign), NULL},
- {"attribute", PHP_FN(hwapi_object_attribute), NULL},
- {"insert", PHP_FN(hwapi_object_insert), NULL},
- {"remove", PHP_FN(hwapi_object_remove), NULL},
- {"value", PHP_FN(hwapi_object_value), NULL},
- {NULL, NULL, NULL}
-};
-
-static function_entry php_hw_api_attribute_functions[] = {
- {"hw_api_attribute", PHP_FN(hwapi_attribute_new), NULL},
- {"key", PHP_FN(hwapi_attribute_key), NULL},
- {"value", PHP_FN(hwapi_attribute_value), NULL},
- {"values", PHP_FN(hwapi_attribute_values), NULL},
- {"langdepvalue", PHP_FN(hwapi_attribute_langdepvalue), NULL},
- {NULL, NULL, NULL}
-};
-
-static function_entry php_hw_api_error_functions[] = {
- {"count", PHP_FN(hwapi_error_count), NULL},
- {"reason", PHP_FN(hwapi_error_reason), NULL},
- {NULL, NULL, NULL}
-};
-
-static function_entry php_hw_api_content_functions[] = {
- {"hw_api_content", PHP_FN(hwapi_content_new), NULL},
- {"read", PHP_FN(hwapi_content_read), NULL},
- {"mimetype", PHP_FN(hwapi_content_mimetype), NULL},
- {NULL, NULL, NULL}
-};
-
-static function_entry php_hw_api_reason_functions[] = {
- {"type", PHP_FN(hwapi_reason_type), NULL},
- {"description", PHP_FN(hwapi_reason_description), NULL},
- {NULL, NULL, NULL}
-};
-
-void hw_api_class_startup();
-void hw_api_object_class_startup();
-void hw_api_attribute_class_startup();
-void hw_api_error_class_startup();
-void hw_api_content_class_startup();
-void hw_api_reason_class_startup();
-static zval *php_hwapi_object_new(void *obj, int rsrc_type);
-
-zend_module_entry hwapi_module_entry = {
- STANDARD_MODULE_HEADER,
- "hwapi",
- hwapi_functions,
- PHP_MINIT(hwapi),
- PHP_MSHUTDOWN(hwapi),
- PHP_RINIT(hwapi),
- NULL,
- PHP_MINFO(hwapi),
- NO_VERSION_YET,
- STANDARD_MODULE_PROPERTIES
-};
-
-#ifdef ZTS
-int hwapi_globals_id;
-#else
-PHP_HWAPI_API zend_hwapi_globals hwapi_globals;
-#endif
-
-#ifdef COMPILE_DL_HWAPI
-ZEND_GET_MODULE(hwapi)
-#endif
-
-static void print_reason(const HW_API_Reason& reason) {
- HW_API_String str_type;
- switch(reason.type()) {
- case HW_API_Reason::HW_API_ERROR:
- str_type = "Error";
- break;
- case HW_API_Reason::HW_API_WARNING:
- str_type = "Warning";
- break;
- case HW_API_Reason::HW_API_MESSAGE:
- str_type = "Message";
- break;
- }
- fprintf(stderr, "%s: %s\n", str_type.string(), reason.description("en").string());
-}
-
-static void print_error(const HW_API_Error& error) {
- for (int i=0; i < error.count(); i++) {
- HW_API_Reason reason;
- error.reason(i, reason);
- print_reason(reason);
- }
-}
-
-static void print_object(const HW_API_Object& object) {
- fprintf(stderr, "%s\n", object.title("en").string());
- for (int i=0; i < object.count(); i++) {
- HW_API_Attribute attrib;
- object.attribute(i, attrib);
- fprintf(stderr, "%s=%s\n", attrib.key().string(), attrib.value().string());
- }
-}
-
-static void php_hwapi_init_globals(zend_hwapi_globals *hwapi_globals) {
-}
-
-static void php_free_hwapi(zend_rsrc_list_entry *rsrc) {
- HW_API *obj;
-
- obj = (HW_API *) (rsrc->ptr);
- delete obj;
-}
-
-static void php_free_hwapi_object(zend_rsrc_list_entry *rsrc) {
- HW_API_Object *obj;
-
- obj = (HW_API_Object *) (rsrc->ptr);
- delete obj;
-}
-
-static void php_free_hwapi_attribute(zend_rsrc_list_entry *rsrc) {
- HW_API_Attribute *obj;
-
- obj = (HW_API_Attribute *) (rsrc->ptr);
- if(obj)
- delete obj;
-}
-
-static void php_free_hwapi_error(zend_rsrc_list_entry *rsrc) {
- HW_API_Error *obj;
-
- obj = (HW_API_Error *) (rsrc->ptr);
- if(obj)
- delete obj;
-}
-
-static void php_free_hwapi_content(zend_rsrc_list_entry *rsrc) {
- HW_API_Content *obj;
-
- obj = (HW_API_Content *) (rsrc->ptr);
- if(obj)
- delete obj;
-}
-
-static void php_free_hwapi_reason(zend_rsrc_list_entry *rsrc) {
- HW_API_Reason *obj;
-
- obj = (HW_API_Reason *) (rsrc->ptr);
- if(obj)
- delete obj;
-}
-
-static void print_hwapi_stringarray(const HW_API_StringArray& strings) {
- for(int i=0; i<strings.count(); i++) {
- HW_API_String str;
- strings.string(i, str);
- fprintf(stderr, "%s\n", str.string());
- }
-}
-
-static int stringArray2indexArray(pval **return_value, HW_API_StringArray *values) {
- array_init(*return_value);
- for (int i=0; i<values->count(); i++) {
- HW_API_String str;
- values->string(i, str);
- str.string();
- add_next_index_string(*return_value, (char *) str.string(), 1);
- }
- return 1;
-}
-
-static int objectArray2indexArray(pval **return_value, HW_API_ObjectArray *objarr) {
- array_init(*return_value);
-
- for(int i=0; i<objarr->count(); i++) {
- zval *child;
- HW_API_Object obj, *objp;
- objarr->object(i, obj);
- objp = new HW_API_Object(obj);
- child = php_hwapi_object_new(objp, le_hwapi_objectp);
- add_next_index_zval(*return_value, child);
- }
- return 1;
-}
-
-static void *php_hwapi_get_object(zval *wrapper, int rsrc_type1) {
- void *obj;
- zval **handle;
- int type;
-
- if (Z_TYPE_P(wrapper) != IS_OBJECT) {
- php_error_docref(NULL TSRMLS_CC, E_ERROR, "Wrapper is not an object");
- }
- if (zend_hash_find(Z_OBJPROP_P(wrapper), "this", sizeof("this"), (void **)&handle) == FAILURE) {
- php_error_docref(NULL TSRMLS_CC, E_ERROR, "Underlying object missing");
- }
-
- obj = zend_list_find(Z_LVAL_PP(handle), &type);
- if (!obj || (type != rsrc_type1)) {
- php_error_docref(NULL TSRMLS_CC, E_ERROR, "Underlying object missing or of invalid type");
- }
- return obj;
-}
-
-static zval *php_hwapi_object_new(void *obj, int rsrc_type) {
- zval *wrapper, *handle;
- int ret;
-
- MAKE_STD_ZVAL(wrapper);
- if (!obj) {
- ZVAL_NULL(wrapper);
- return wrapper;
- }
-
- /* construct an object with some methods */
- if(rsrc_type == le_hwapi_attributep)
- object_init_ex(wrapper, hw_api_attribute_class_entry_ptr);
- else if(rsrc_type == le_hwapi_objectp)
- object_init_ex(wrapper, hw_api_object_class_entry_ptr);
- else if(rsrc_type == le_hwapip)
- object_init_ex(wrapper, hw_api_class_entry_ptr);
- else if(rsrc_type == le_hwapi_errorp)
- object_init_ex(wrapper, hw_api_error_class_entry_ptr);
- else if(rsrc_type == le_hwapi_contentp)
- object_init_ex(wrapper, hw_api_content_class_entry_ptr);
- else if(rsrc_type == le_hwapi_reasonp)
- object_init_ex(wrapper, hw_api_reason_class_entry_ptr);
-
- MAKE_STD_ZVAL(handle);
- ZEND_REGISTER_RESOURCE(handle, obj, rsrc_type);
- zend_hash_update(Z_OBJPROP_P(wrapper), "this", sizeof("this"), &handle, sizeof(zval *), NULL);
- return(wrapper);
-}
-
-static HW_API_StringArray *make_HW_API_StringArray(HashTable *lht) {
- int count, j;
- HW_API_StringArray *sarr;
-
- sarr = new HW_API_StringArray();
-
- count = zend_hash_num_elements(lht);
- zend_hash_internal_pointer_reset(lht);
- for(j=0; j<count; j++) {
- zval **keydata;
- zend_hash_get_current_data(lht, (void **) &keydata);
- switch((*keydata)->type) {
- case IS_STRING:
- sarr->insert((HW_API_String) (*keydata)->value.str.val);
- break;
- }
- zend_hash_move_forward(lht);
- }
- return sarr;
-}
-
-static HW_API_object_In *make_HW_API_object_In(zval *arg1) {
- int count, i;
- HashTable *lht;
- HW_API_object_In *in;
-
- lht = arg1->value.ht;
-
- if(0 == (count = zend_hash_num_elements(lht))) {
- return NULL;
- }
-
- in = new HW_API_object_In();
-
- zend_hash_internal_pointer_reset(lht);
- for(i=0; i<count; i++) {
- ulong ind;
- char *key;
- zval **keydata;
- zend_hash_get_current_data(lht, (void **) &keydata);
- zend_hash_get_current_key(lht, &key, &ind, 0);
- switch((*keydata)->type) {
- case IS_STRING:
- if(!strcmp(key, "objectIdentifier"))
- in->setObjectIdentifier((*keydata)->value.str.val);
- else if(!strcmp(key, "version"))
- in->setVersion((*keydata)->value.str.val);
- break;
- case IS_ARRAY: {
- HW_API_StringArray *sarr;
-
- if(!strcmp(key, "attributeSelector")) {
- sarr = make_HW_API_StringArray((*keydata)->value.ht);
- in->setAttributeSelector(*sarr);
- /* FIXME: sarr can be propperly by freed now */
- }
- break;
- }
- }
- zend_hash_move_forward(lht);
- }
- return(in);
-}
-
-static HW_API_children_In *make_HW_API_children_In(zval *arg1) {
- int count, i;
- HashTable *lht;
- HW_API_children_In *in;
-
- lht = arg1->value.ht;
-
- if(0 == (count = zend_hash_num_elements(lht))) {
- return NULL;
- }
-
- in = new HW_API_children_In();
-
- zend_hash_internal_pointer_reset(lht);
- for(i=0; i<count; i++) {
- ulong ind;
- char *key;
- zval **keydata;
- zend_hash_get_current_data(lht, (void **) &keydata);
- zend_hash_get_current_key(lht, &key, &ind, 0);
- switch((*keydata)->type) {
- case IS_STRING:
- if(!strcmp(key, "objectIdentifier"))
- in->setObjectIdentifier((*keydata)->value.str.val);
- else if(!strcmp(key, "objectQuery"))
- in->setObjectQuery((*keydata)->value.str.val);
- break;
- case IS_ARRAY: {
- HW_API_StringArray *sarr;
-
- if(!strcmp(key, "attributeSelector")) {
- sarr = make_HW_API_StringArray((*keydata)->value.ht);
- in->setAttributeSelector(*sarr);
- /* FIXME: sarr can be propperly by freed now */
- }
- break;
- }
- }
- zend_hash_move_forward(lht);
- }
- return(in);
-}
-
-static HW_API_parents_In *make_HW_API_parents_In(zval *arg1) {
- int count, i;
- HashTable *lht;
- HW_API_parents_In *in;
-
- lht = arg1->value.ht;
-
- if(0 == (count = zend_hash_num_elements(lht))) {
- return NULL;
- }
-
- in = new HW_API_parents_In();
-
- zend_hash_internal_pointer_reset(lht);
- for(i=0; i<count; i++) {
- ulong ind;
- char *key;
- zval **keydata;
- zend_hash_get_current_data(lht, (void **) &keydata);
- zend_hash_get_current_key(lht, &key, &ind, 0);
- switch((*keydata)->type) {
- case IS_STRING:
- if(!strcmp(key, "objectIdentifier"))
- in->setObjectIdentifier((*keydata)->value.str.val);
- else if(!strcmp(key, "objectQuery"))
- in->setObjectQuery((*keydata)->value.str.val);
- break;
- case IS_ARRAY: {
- HW_API_StringArray *sarr;
-
- if(!strcmp(key, "attributeSelector")) {
- sarr = make_HW_API_StringArray((*keydata)->value.ht);
- in->setAttributeSelector(*sarr);
- /* FIXME: sarr can be propperly by freed now */
- }
- break;
- }
- }
- zend_hash_move_forward(lht);
- }
- return(in);
-}
-
-static HW_API_find_In *make_HW_API_find_In(zval *arg1) {
- int count, i;
- HashTable *lht;
- HW_API_find_In *in;
-
- lht = arg1->value.ht;
-
- if(0 == (count = zend_hash_num_elements(lht))) {
- return NULL;
- }
-
- in = new HW_API_find_In();
-
- zend_hash_internal_pointer_reset(lht);
- for(i=0; i<count; i++) {
- ulong ind;
- char *key;
- zval **keydata;
- zend_hash_get_current_data(lht, (void **) &keydata);
- zend_hash_get_current_key(lht, &key, &ind, 0);
- switch((*keydata)->type) {
- case IS_STRING:
- if(!strcmp(key, "keyQuery"))
- in->setKeyQuery((*keydata)->value.str.val);
- else if(!strcmp(key, "objectQuery"))
- in->setObjectQuery((*keydata)->value.str.val);
- else if(!strcmp(key, "fullTextQuery"))
- in->setFullTextQuery((*keydata)->value.str.val);
- break;
- case IS_LONG:
- if(!strcmp(key, "startIndex"))
- in->setStartIndex((*keydata)->value.lval);
- else if(!strcmp(key, "numberOfObjectsToGet"))
- in->setNumberOfObjectsToGet((*keydata)->value.lval);
- else if(!strcmp(key, "exactMatchLimit"))
- in->setExactMatchLimit((*keydata)->value.lval);
- break;
- case IS_ARRAY: {
- HW_API_StringArray *sarr;
-
- if(!strcmp(key, "attributeSelector")) {
- sarr = make_HW_API_StringArray((*keydata)->value.ht);
- in->setAttributeSelector(*sarr);
- /* FIXME: sarr can be propperly by freed now */
- } else if(!strcmp(key, "languages")) {
- sarr = make_HW_API_StringArray((*keydata)->value.ht);
- in->setLanguages(*sarr);
- /* FIXME: sarr can be propperly by freed now */
- } else if(!strcmp(key, "scope")) {
- sarr = make_HW_API_StringArray((*keydata)->value.ht);
- in->setScope(*sarr);
- /* FIXME: sarr can be propperly by freed now */
- }
-
- break;
- }
- }
- zend_hash_move_forward(lht);
- }
- return(in);
-}
-
-static HW_API_identify_In *make_HW_API_identify_In(zval *arg1) {
- int count, i;
- HashTable *lht;
- HW_API_identify_In *in;
-
- lht = arg1->value.ht;
-
- if(0 == (count = zend_hash_num_elements(lht))) {
- return NULL;
- }
-
- in = new HW_API_identify_In();
-
- zend_hash_internal_pointer_reset(lht);
- for(i=0; i<count; i++) {
- ulong ind;
- char *key;
- zval **keydata;
- zend_hash_get_current_data(lht, (void **) &keydata);
- zend_hash_get_current_key(lht, &key, &ind, 0);
- switch((*keydata)->type) {
- case IS_STRING:
- if(!strcmp(key, "username"))
- in->setUsername((*keydata)->value.str.val);
- else if(!strcmp(key, "password"))
- in->setPassword((*keydata)->value.str.val);
- break;
- }
- zend_hash_move_forward(lht);
- }
- return(in);
-}
-
-static HW_API_remove_In *make_HW_API_remove_In(zval *arg1) {
- int count, i;
- HashTable *lht;
- HW_API_remove_In *in;
-
- lht = arg1->value.ht;
-
- if(0 == (count = zend_hash_num_elements(lht))) {
- return NULL;
- }
-
- in = new HW_API_remove_In();
-
- zend_hash_internal_pointer_reset(lht);
- for(i=0; i<count; i++) {
- ulong ind;
- char *key;
- zval **keydata;
- zend_hash_get_current_data(lht, (void **) &keydata);
- zend_hash_get_current_key(lht, &key, &ind, 0);
- switch((*keydata)->type) {
- case IS_STRING:
- if(!strcmp(key, "parentIdentifier"))
- in->setParentIdentifier((*keydata)->value.str.val);
- else if(!strcmp(key, "objectIdentifier"))
- in->setObjectIdentifier((*keydata)->value.str.val);
- else if(!strcmp(key, "objectQuery"))
- in->setObjectQuery((*keydata)->value.str.val);
- break;
- case IS_LONG:
- if(!strcmp(key, "mode"))
- in->setMode((*keydata)->value.lval);
- break;
- }
- zend_hash_move_forward(lht);
- }
- return(in);
-}
-
-static HW_API_content_In *make_HW_API_content_In(zval *arg1) {
- int count, i;
- HashTable *lht;
- HW_API_content_In *in;
-
- lht = arg1->value.ht;
-
- if(0 == (count = zend_hash_num_elements(lht))) {
- return NULL;
- }
-
- in = new HW_API_content_In();
-
- zend_hash_internal_pointer_reset(lht);
- for(i=0; i<count; i++) {
- ulong ind;
- char *key;
- zval **keydata;
- zend_hash_get_current_data(lht, (void **) &keydata);
- zend_hash_get_current_key(lht, &key, &ind, 0);
- switch((*keydata)->type) {
- case IS_STRING:
- if(!strcmp(key, "objectIdentifier"))
- in->setObjectIdentifier((*keydata)->value.str.val);
- break;
- case IS_LONG:
- if(!strcmp(key, "mode"))
- in->setMode((*keydata)->value.lval);
- break;
- }
- zend_hash_move_forward(lht);
- }
- return(in);
-}
-
-static HW_API_copy_In *make_HW_API_copy_In(zval *arg1) {
- int count, i;
- HashTable *lht;
- HW_API_copy_In *in;
-
- lht = arg1->value.ht;
-
- if(0 == (count = zend_hash_num_elements(lht))) {
- return NULL;
- }
-
- in = new HW_API_copy_In();
-
- zend_hash_internal_pointer_reset(lht);
- for(i=0; i<count; i++) {
- ulong ind;
- char *key;
- zval **keydata;
- zend_hash_get_current_data(lht, (void **) &keydata);
- zend_hash_get_current_key(lht, &key, &ind, 0);
- switch((*keydata)->type) {
- case IS_STRING:
- if(!strcmp(key, "destinationParentIdentifier"))
- in->setDestinationParentIdentifier((*keydata)->value.str.val);
- else if(!strcmp(key, "objectIdentifier"))
- in->setObjectIdentifier((*keydata)->value.str.val);
- break;
- case IS_ARRAY: {
- HW_API_StringArray *sarr;
-
- if(!strcmp(key, "attributeSelector")) {
- sarr = make_HW_API_StringArray((*keydata)->value.ht);
- in->setAttributeSelector(*sarr);
- /* FIXME: sarr can be propperly by freed now */
- }
- break;
- }
- }
- zend_hash_move_forward(lht);
- }
- return(in);
-}
-
-static HW_API_link_In *make_HW_API_link_In(zval *arg1) {
- int count, i;
- HashTable *lht;
- HW_API_link_In *in;
-
- lht = arg1->value.ht;
-
- if(0 == (count = zend_hash_num_elements(lht))) {
- return NULL;
- }
-
- in = new HW_API_link_In();
-
- zend_hash_internal_pointer_reset(lht);
- for(i=0; i<count; i++) {
- ulong ind;
- char *key;
- zval **keydata;
- zend_hash_get_current_data(lht, (void **) &keydata);
- zend_hash_get_current_key(lht, &key, &ind, 0);
- switch((*keydata)->type) {
- case IS_STRING:
- if(!strcmp(key, "destinationParentIdentifier"))
- in->setDestinationParentIdentifier((*keydata)->value.str.val);
- else if(!strcmp(key, "objectIdentifier"))
- in->setObjectIdentifier((*keydata)->value.str.val);
- break;
- }
- zend_hash_move_forward(lht);
- }
- return(in);
-}
-
-static HW_API_move_In *make_HW_API_move_In(zval *arg1) {
- int count, i;
- HashTable *lht;
- HW_API_move_In *in;
-
- lht = arg1->value.ht;
-
- if(0 == (count = zend_hash_num_elements(lht))) {
- return NULL;
- }
-
- in = new HW_API_move_In();
-
- zend_hash_internal_pointer_reset(lht);
- for(i=0; i<count; i++) {
- ulong ind;
- char *key;
- zval **keydata;
- zend_hash_get_current_data(lht, (void **) &keydata);
- zend_hash_get_current_key(lht, &key, &ind, 0);
- switch((*keydata)->type) {
- case IS_STRING:
- if(!strcmp(key, "destinationParentIdentifier"))
- in->setDestinationParentIdentifier((*keydata)->value.str.val);
- else if(!strcmp(key, "sourceParentIdentifier"))
- in->setSourceParentIdentifier((*keydata)->value.str.val);
- else if(!strcmp(key, "objectIdentifier"))
- in->setObjectIdentifier((*keydata)->value.str.val);
- break;
- }
- zend_hash_move_forward(lht);
- }
- return(in);
-}
-
-static HW_API_lock_In *make_HW_API_lock_In(zval *arg1) {
- int count, i;
- HashTable *lht;
- HW_API_lock_In *in;
-
- lht = arg1->value.ht;
-
- if(0 == (count = zend_hash_num_elements(lht))) {
- return NULL;
- }
-
- in = new HW_API_lock_In();
-
- zend_hash_internal_pointer_reset(lht);
- for(i=0; i<count; i++) {
- ulong ind;
- char *key;
- zval **keydata;
- zend_hash_get_current_data(lht, (void **) &keydata);
- zend_hash_get_current_key(lht, &key, &ind, 0);
- switch((*keydata)->type) {
- case IS_STRING:
- if(!strcmp(key, "objectQuery"))
- in->setObjectQuery((*keydata)->value.str.val);
- else if(!strcmp(key, "objectIdentifier"))
- in->setObjectIdentifier((*keydata)->value.str.val);
- break;
- case IS_LONG:
- if(!strcmp(key, "mode"))
- in->setMode((*keydata)->value.lval);
- break;
- }
- zend_hash_move_forward(lht);
- }
- return(in);
-}
-
-static HW_API_unlock_In *make_HW_API_unlock_In(zval *arg1) {
- int count, i;
- HashTable *lht;
- HW_API_unlock_In *in;
-
- lht = arg1->value.ht;
-
- if(0 == (count = zend_hash_num_elements(lht))) {
- return NULL;
- }
-
- in = new HW_API_unlock_In();
-
- zend_hash_internal_pointer_reset(lht);
- for(i=0; i<count; i++) {
- ulong ind;
- char *key;
- zval **keydata;
- zend_hash_get_current_data(lht, (void **) &keydata);
- zend_hash_get_current_key(lht, &key, &ind, 0);
- switch((*keydata)->type) {
- case IS_STRING:
- if(!strcmp(key, "objectQuery"))
- in->setObjectQuery((*keydata)->value.str.val);
- else if(!strcmp(key, "objectIdentifier"))
- in->setObjectIdentifier((*keydata)->value.str.val);
- break;
- case IS_LONG:
- if(!strcmp(key, "mode"))
- in->setMode((*keydata)->value.lval);
- break;
- }
- zend_hash_move_forward(lht);
- }
- return(in);
-}
-
-static HW_API_replace_In *make_HW_API_replace_In(zval *arg1) {
- int count, i;
- HashTable *lht;
- HW_API_replace_In *in;
-
- lht = arg1->value.ht;
-
- if(0 == (count = zend_hash_num_elements(lht))) {
- return NULL;
- }
-
- in = new HW_API_replace_In();
-
- zend_hash_internal_pointer_reset(lht);
- for(i=0; i<count; i++) {
- ulong ind;
- char *key;
- zval **keydata;
- zend_hash_get_current_data(lht, (void **) &keydata);
- zend_hash_get_current_key(lht, &key, &ind, 0);
- switch((*keydata)->type) {
- case IS_STRING:
- if(!strcmp(key, "objectIdentifier"))
- in->setObjectIdentifier((*keydata)->value.str.val);
- break;
- case IS_OBJECT: {
- zend_class_entry *ce;
- ce = zend_get_class_entry(*keydata);
- if(!strcmp(key, "object")) {
-// if(!((*keydata)->value.obj.ce->name, "hw_api_object")) {
- if(!strcmp(ce->name, "hw_api_object")) {
- HW_API_Object *obj;
- obj = (HW_API_Object *) php_hwapi_get_object(*keydata, le_hwapi_objectp);
- in->setObject(*obj);
- }
- } else if(!strcmp(key, "parameters")) {
- if(!strcmp(ce->name, "hw_api_object")) {
- HW_API_Object *obj;
- obj = (HW_API_Object *) php_hwapi_get_object(*keydata, le_hwapi_objectp);
- in->setParameters(*obj);
- }
- } else if(!strcmp(key, "content")) {
- if(!strcmp(ce->name, "hw_api_content")) {
- HW_API_Content *obj;
- obj = (HW_API_Content *) php_hwapi_get_object(*keydata, le_hwapi_contentp);
- in->setContent(*obj);
- }
- }
- /* FIXME: HW_API_Object and HW_API_Content needs to be handelt */
- break;
- }
- case IS_ARRAY: {
- HW_API_StringArray *sarr;
-
- if(!strcmp(key, "attributeSelector")) {
- sarr = make_HW_API_StringArray((*keydata)->value.ht);
- in->setAttributeSelector(*sarr);
- /* FIXME: sarr can be propperly by freed now */
- }
- break;
- }
- case IS_LONG:
- if(!strcmp(key, "mode"))
- in->setMode((*keydata)->value.lval);
- break;
- }
- zend_hash_move_forward(lht);
- }
- return(in);
-}
-
-static HW_API_insert_In *make_HW_API_insert_In(zval *arg1) {
- int count, i;
- HashTable *lht;
- HW_API_insert_In *in;
-
- lht = arg1->value.ht;
-
- if(0 == (count = zend_hash_num_elements(lht))) {
- return NULL;
- }
-
- in = new HW_API_insert_In();
-
- zend_hash_internal_pointer_reset(lht);
- for(i=0; i<count; i++) {
- ulong ind;
- char *key;
- zval **keydata;
- zend_hash_get_current_data(lht, (void **) &keydata);
- zend_hash_get_current_key(lht, &key, &ind, 0);
- switch((*keydata)->type) {
- case IS_OBJECT: {
- zend_class_entry *ce;
- ce = zend_get_class_entry(*keydata);
- if(!strcmp(key, "object")) {
- if(!strcmp(ce->name, "hw_api_object")) {
- HW_API_Object *obj;
- obj = (HW_API_Object *) php_hwapi_get_object(*keydata, le_hwapi_objectp);
- in->setObject(*obj);
- }
- } else if(!strcmp(key, "parameters")) {
- if(!strcmp(ce->name, "hw_api_object")) {
- HW_API_Object *obj;
- obj = (HW_API_Object *) php_hwapi_get_object(*keydata, le_hwapi_objectp);
- in->setParameters(*obj);
- }
- } else if(!strcmp(key, "content")) {
- if(!strcmp(ce->name, "hw_api_content")) {
- HW_API_Content *obj;
- obj = (HW_API_Content *) php_hwapi_get_object(*keydata, le_hwapi_contentp);
- in->setContent(*obj);
- }
- }
- /* FIXME: HW_API_Object and HW_API_Content needs to be handelt */
- break;
- }
- case IS_ARRAY: {
- HW_API_StringArray *sarr;
-
- if(!strcmp(key, "attributeSelector")) {
- sarr = make_HW_API_StringArray((*keydata)->value.ht);
- in->setAttributeSelector(*sarr);
- /* FIXME: sarr can be propperly by freed now */
- }
- break;
- }
- case IS_LONG:
- if(!strcmp(key, "mode"))
- in->setMode((*keydata)->value.lval);
- break;
- }
- zend_hash_move_forward(lht);
- }
- return(in);
-}
-
-static HW_API_insertDocument_In *make_HW_API_insertDocument_In(zval *arg1) {
- int count, i;
- HashTable *lht;
- HW_API_insertDocument_In *in;
-
- lht = arg1->value.ht;
-
- if(0 == (count = zend_hash_num_elements(lht))) {
- return NULL;
- }
-
- in = new HW_API_insertDocument_In();
-
- zend_hash_internal_pointer_reset(lht);
- for(i=0; i<count; i++) {
- ulong ind;
- char *key;
- zval **keydata;
- zend_hash_get_current_data(lht, (void **) &keydata);
- zend_hash_get_current_key(lht, &key, &ind, 0);
- switch((*keydata)->type) {
- case IS_OBJECT: {
- zend_class_entry *ce;
- ce = zend_get_class_entry(*keydata);
- if(!strcmp(key, "object")) {
- if(!strcmp(ce->name, "hw_api_object")) {
- HW_API_Object *obj;
- obj = (HW_API_Object *) php_hwapi_get_object(*keydata, le_hwapi_objectp);
- in->setObject(*obj);
- }
- } else if(!strcmp(key, "parameters")) {
- if(!strcmp(ce->name, "hw_api_object")) {
- HW_API_Object *obj;
- obj = (HW_API_Object *) php_hwapi_get_object(*keydata, le_hwapi_objectp);
- in->setParameters(*obj);
- }
- } else if(!strcmp(key, "content")) {
- if(!strcmp(ce->name, "hw_api_content")) {
- HW_API_Content *obj;
- obj = (HW_API_Content *) php_hwapi_get_object(*keydata, le_hwapi_contentp);
- in->setContent(*obj);
- }
- }
- /* FIXME: HW_API_Object and HW_API_Content needs to be handelt */
- break;
- }
- case IS_ARRAY: {
- HW_API_StringArray *sarr;
-
- if(!strcmp(key, "attributeSelector")) {
- sarr = make_HW_API_StringArray((*keydata)->value.ht);
- in->setAttributeSelector(*sarr);
- /* FIXME: sarr can be propperly by freed now */
- }
- break;
- }
- case IS_LONG:
- if(!strcmp(key, "mode"))
- in->setMode((*keydata)->value.lval);
- break;
- case IS_STRING:
- if(!strcmp(key, "parentIdentifier"))
- in->setParentIdentifier((*keydata)->value.str.val);
- break;
- }
- zend_hash_move_forward(lht);
- }
- return(in);
-}
-
-static HW_API_insertCollection_In *make_HW_API_insertCollection_In(zval *arg1) {
- int count, i;
- HashTable *lht;
- HW_API_insertCollection_In *in;
-
- lht = arg1->value.ht;
-
- if(0 == (count = zend_hash_num_elements(lht))) {
- return NULL;
- }
-
- in = new HW_API_insertCollection_In();
-
- zend_hash_internal_pointer_reset(lht);
- for(i=0; i<count; i++) {
- ulong ind;
- char *key;
- zval **keydata;
- zend_hash_get_current_data(lht, (void **) &keydata);
- zend_hash_get_current_key(lht, &key, &ind, 0);
- switch((*keydata)->type) {
- case IS_STRING:
- if(!strcmp(key, "parentIdentifier"))
- in->setParentIdentifier((*keydata)->value.str.val);
- break;
- case IS_OBJECT: {
- zend_class_entry *ce;
- ce = zend_get_class_entry(*keydata);
- if(!strcmp(key, "object")) {
- if(!strcmp(ce->name, "hw_api_object")) {
- HW_API_Object *obj;
- obj = (HW_API_Object *) php_hwapi_get_object(*keydata, le_hwapi_objectp);
- in->setObject(*obj);
- }
- } else if(!strcmp(key, "parameters")) {
- if(!strcmp(ce->name, "hw_api_object")) {
- HW_API_Object *obj;
- obj = (HW_API_Object *) php_hwapi_get_object(*keydata, le_hwapi_objectp);
- in->setParameters(*obj);
- }
- }
- /* FIXME: HW_API_Object and HW_API_Content needs to be handelt */
- break;
- }
- case IS_ARRAY: {
- HW_API_StringArray *sarr;
-
- if(!strcmp(key, "attributeSelector")) {
- sarr = make_HW_API_StringArray((*keydata)->value.ht);
- in->setAttributeSelector(*sarr);
- /* FIXME: sarr can be propperly by freed now */
- }
- break;
- }
- }
- zend_hash_move_forward(lht);
- }
- return(in);
-}
-
-static HW_API_insertAnchor_In *make_HW_API_insertAnchor_In(zval *arg1) {
- int count, i;
- HashTable *lht;
- HW_API_insertAnchor_In *in;
-
- lht = arg1->value.ht;
-
- if(0 == (count = zend_hash_num_elements(lht))) {
- return NULL;
- }
-
- in = new HW_API_insertAnchor_In();
-
- zend_hash_internal_pointer_reset(lht);
- for(i=0; i<count; i++) {
- ulong ind;
- char *key;
- zval **keydata;
- zend_hash_get_current_data(lht, (void **) &keydata);
- zend_hash_get_current_key(lht, &key, &ind, 0);
- switch((*keydata)->type) {
- case IS_STRING:
- if(!strcmp(key, "documentIdentifier"))
- in->setDocumentIdentifier((*keydata)->value.str.val);
- else if(!strcmp(key, "destinationIdentifier"))
- in->setDestinationIdentifier((*keydata)->value.str.val);
- else if(!strcmp(key, "hint"))
- in->setHint((*keydata)->value.str.val);
- break;
- case IS_OBJECT: {
- zend_class_entry *ce;
- ce = zend_get_class_entry(*keydata);
- if(!strcmp(key, "object")) {
- if(!strcmp(ce->name, "hw_api_object")) {
- HW_API_Object *obj;
- obj = (HW_API_Object *) php_hwapi_get_object(*keydata, le_hwapi_objectp);
- in->setObject(*obj);
- }
- } else if(!strcmp(key, "parameters")) {
- if(!strcmp(ce->name, "hw_api_object")) {
- HW_API_Object *obj;
- obj = (HW_API_Object *) php_hwapi_get_object(*keydata, le_hwapi_objectp);
- in->setParameters(*obj);
- }
- }
- /* FIXME: HW_API_Object and HW_API_Content needs to be handelt */
- break;
- }
- case IS_ARRAY: {
- HW_API_StringArray *sarr;
-
- if(!strcmp(key, "attributeSelector")) {
- sarr = make_HW_API_StringArray((*keydata)->value.ht);
- in->setAttributeSelector(*sarr);
- /* FIXME: sarr can be propperly by freed now */
- }
- break;
- }
- }
- zend_hash_move_forward(lht);
- }
- return(in);
-}
-
-static HW_API_srcAnchors_In *make_HW_API_srcAnchors_In(zval *arg1) {
- int count, i;
- HashTable *lht;
- HW_API_srcAnchors_In *in;
-
- lht = arg1->value.ht;
-
- if(0 == (count = zend_hash_num_elements(lht))) {
- return NULL;
- }
-
- in = new HW_API_srcAnchors_In();
-
- zend_hash_internal_pointer_reset(lht);
- for(i=0; i<count; i++) {
- ulong ind;
- char *key;
- zval **keydata;
- zend_hash_get_current_data(lht, (void **) &keydata);
- zend_hash_get_current_key(lht, &key, &ind, 0);
- switch((*keydata)->type) {
- case IS_STRING:
- if(!strcmp(key, "objectIdentifier"))
- in->setObjectIdentifier((*keydata)->value.str.val);
- else if(!strcmp(key, "objectQuery"))
- in->setObjectQuery((*keydata)->value.str.val);
- break;
- case IS_ARRAY: {
- HW_API_StringArray *sarr;
-
- if(!strcmp(key, "attributeSelector")) {
- sarr = make_HW_API_StringArray((*keydata)->value.ht);
- in->setAttributeSelector(*sarr);
- /* FIXME: sarr can be propperly by freed now */
- }
- break;
- }
- }
- zend_hash_move_forward(lht);
- }
- return(in);
-}
-
-static HW_API_dstAnchors_In *make_HW_API_dstAnchors_In(zval *arg1) {
- int count, i;
- HashTable *lht;
- HW_API_dstAnchors_In *in;
-
- lht = arg1->value.ht;
-
- if(0 == (count = zend_hash_num_elements(lht))) {
- return NULL;
- }
-
- in = new HW_API_dstAnchors_In();
-
- zend_hash_internal_pointer_reset(lht);
- for(i=0; i<count; i++) {
- ulong ind;
- char *key;
- zval **keydata;
- zend_hash_get_current_data(lht, (void **) &keydata);
- zend_hash_get_current_key(lht, &key, &ind, 0);
- switch((*keydata)->type) {
- case IS_STRING:
- if(!strcmp(key, "objectIdentifier"))
- in->setObjectIdentifier((*keydata)->value.str.val);
- else if(!strcmp(key, "objectQuery"))
- in->setObjectQuery((*keydata)->value.str.val);
- break;
- case IS_ARRAY: {
- HW_API_StringArray *sarr;
-
- if(!strcmp(key, "attributeSelector")) {
- sarr = make_HW_API_StringArray((*keydata)->value.ht);
- in->setAttributeSelector(*sarr);
- /* FIXME: sarr can be propperly by freed now */
- }
- break;
- }
- }
- zend_hash_move_forward(lht);
- }
- return(in);
-}
-
-static HW_API_dstOfSrcAnchor_In *make_HW_API_dstOfSrcAnchor_In(zval *arg1) {
- int count, i;
- HashTable *lht;
- HW_API_dstOfSrcAnchor_In *in;
-
- lht = arg1->value.ht;
-
- if(0 == (count = zend_hash_num_elements(lht))) {
- return NULL;
- }
-
- in = new HW_API_dstOfSrcAnchor_In();
-
- zend_hash_internal_pointer_reset(lht);
- for(i=0; i<count; i++) {
- ulong ind;
- char *key;
- zval **keydata;
- zend_hash_get_current_data(lht, (void **) &keydata);
- zend_hash_get_current_key(lht, &key, &ind, 0);
- switch((*keydata)->type) {
- case IS_STRING:
- if(!strcmp(key, "objectIdentifier"))
- in->setObjectIdentifier((*keydata)->value.str.val);
- break;
- case IS_ARRAY: {
- HW_API_StringArray *sarr;
-
- if(!strcmp(key, "attributeSelector")) {
- sarr = make_HW_API_StringArray((*keydata)->value.ht);
- in->setAttributeSelector(*sarr);
- /* FIXME: sarr can be propperly by freed now */
- }
- break;
- }
- }
- zend_hash_move_forward(lht);
- }
- return(in);
-}
-
-static HW_API_objectByAnchor_In *make_HW_API_objectByAnchor_In(zval *arg1) {
- int count, i;
- HashTable *lht;
- HW_API_objectByAnchor_In *in;
-
- lht = arg1->value.ht;
-
- if(0 == (count = zend_hash_num_elements(lht))) {
- return NULL;
- }
-
- in = new HW_API_objectByAnchor_In();
-
- zend_hash_internal_pointer_reset(lht);
- for(i=0; i<count; i++) {
- ulong ind;
- char *key;
- zval **keydata;
- zend_hash_get_current_data(lht, (void **) &keydata);
- zend_hash_get_current_key(lht, &key, &ind, 0);
- switch((*keydata)->type) {
- case IS_STRING:
- if(!strcmp(key, "objectIdentifier"))
- in->setObjectIdentifier((*keydata)->value.str.val);
- break;
- case IS_ARRAY: {
- HW_API_StringArray *sarr;
-
- if(!strcmp(key, "attributeSelector")) {
- sarr = make_HW_API_StringArray((*keydata)->value.ht);
- in->setAttributeSelector(*sarr);
- /* FIXME: sarr can be propperly by freed now */
- }
- break;
- }
- }
- zend_hash_move_forward(lht);
- }
- return(in);
-}
-
-static HW_API_srcsOfDst_In *make_HW_API_srcsOfDst_In(zval *arg1) {
- int count, i;
- HashTable *lht;
- HW_API_srcsOfDst_In *in;
-
- lht = arg1->value.ht;
-
- if(0 == (count = zend_hash_num_elements(lht))) {
- return NULL;
- }
-
- in = new HW_API_srcsOfDst_In();
-
- zend_hash_internal_pointer_reset(lht);
- for(i=0; i<count; i++) {
- ulong ind;
- char *key;
- zval **keydata;
- zend_hash_get_current_data(lht, (void **) &keydata);
- zend_hash_get_current_key(lht, &key, &ind, 0);
- switch((*keydata)->type) {
- case IS_STRING:
- if(!strcmp(key, "objectIdentifier"))
- in->setObjectIdentifier((*keydata)->value.str.val);
- else if(!strcmp(key, "objectQuery"))
- in->setObjectQuery((*keydata)->value.str.val);
- break;
- case IS_ARRAY: {
- HW_API_StringArray *sarr;
-
- if(!strcmp(key, "attributeSelector")) {
- sarr = make_HW_API_StringArray((*keydata)->value.ht);
- in->setAttributeSelector(*sarr);
- /* FIXME: sarr can be propperly by freed now */
- }
- break;
- }
- }
- zend_hash_move_forward(lht);
- }
- return(in);
-}
-
-static HW_API_checkIn_In *make_HW_API_checkIn_In(zval *arg1) {
- int count, i;
- HashTable *lht;
- HW_API_checkIn_In *in;
-
- lht = arg1->value.ht;
-
- if(0 == (count = zend_hash_num_elements(lht))) {
- return NULL;
- }
-
- in = new HW_API_checkIn_In();
-
- zend_hash_internal_pointer_reset(lht);
- for(i=0; i<count; i++) {
- ulong ind;
- char *key;
- zval **keydata;
- zend_hash_get_current_data(lht, (void **) &keydata);
- zend_hash_get_current_key(lht, &key, &ind, 0);
- switch((*keydata)->type) {
- case IS_STRING:
- if(!strcmp(key, "objectIdentifier"))
- in->setObjectIdentifier((*keydata)->value.str.val);
- else if(!strcmp(key, "objectQuery"))
- in->setObjectQuery((*keydata)->value.str.val);
- else if(!strcmp(key, "version"))
- in->setVersion((*keydata)->value.str.val);
- else if(!strcmp(key, "comment"))
- in->setComment((*keydata)->value.str.val);
- break;
- case IS_LONG:
- if(!strcmp(key, "mode"))
- in->setMode((*keydata)->value.lval);
- break;
- }
- zend_hash_move_forward(lht);
- }
- return(in);
-}
-
-static HW_API_checkOut_In *make_HW_API_checkOut_In(zval *arg1) {
- int count, i;
- HashTable *lht;
- HW_API_checkOut_In *in;
-
- lht = arg1->value.ht;
-
- if(0 == (count = zend_hash_num_elements(lht))) {
- return NULL;
- }
-
- in = new HW_API_checkOut_In();
-
- zend_hash_internal_pointer_reset(lht);
- for(i=0; i<count; i++) {
- ulong ind;
- char *key;
- zval **keydata;
- zend_hash_get_current_data(lht, (void **) &keydata);
- zend_hash_get_current_key(lht, &key, &ind, 0);
- switch((*keydata)->type) {
- case IS_STRING:
- if(!strcmp(key, "objectIdentifier"))
- in->setObjectIdentifier((*keydata)->value.str.val);
- else if(!strcmp(key, "objectQuery"))
- in->setObjectQuery((*keydata)->value.str.val);
- else if(!strcmp(key, "version"))
- in->setVersion((*keydata)->value.str.val);
- break;
- case IS_LONG:
- if(!strcmp(key, "mode"))
- in->setMode((*keydata)->value.lval);
- break;
- }
- zend_hash_move_forward(lht);
- }
- return(in);
-}
-
-static HW_API_setCommittedVersion_In *make_HW_API_setCommittedVersion_In(zval *arg1) {
- int count, i;
- HashTable *lht;
- HW_API_setCommittedVersion_In *in;
-
- lht = arg1->value.ht;
-
- if(0 == (count = zend_hash_num_elements(lht))) {
- return NULL;
- }
-
- in = new HW_API_setCommittedVersion_In();
-
- zend_hash_internal_pointer_reset(lht);
- for(i=0; i<count; i++) {
- ulong ind;
- char *key;
- zval **keydata;
- zend_hash_get_current_data(lht, (void **) &keydata);
- zend_hash_get_current_key(lht, &key, &ind, 0);
- switch((*keydata)->type) {
- case IS_STRING:
- if(!strcmp(key, "objectIdentifier"))
- in->setObjectIdentifier((*keydata)->value.str.val);
- else if(!strcmp(key, "version"))
- in->setVersion((*keydata)->value.str.val);
- break;
- case IS_ARRAY: {
- HW_API_StringArray *sarr;
-
- if(!strcmp(key, "attributeSelector")) {
- sarr = make_HW_API_StringArray((*keydata)->value.ht);
- in->setAttributeSelector(*sarr);
- /* FIXME: sarr can be propperly be freed now */
- }
- break;
- }
- }
- zend_hash_move_forward(lht);
- }
- return(in);
-}
-
-static HW_API_revert_In *make_HW_API_revert_In(zval *arg1) {
- int count, i;
- HashTable *lht;
- HW_API_revert_In *in;
-
- lht = arg1->value.ht;
-
- if(0 == (count = zend_hash_num_elements(lht))) {
- return NULL;
- }
-
- in = new HW_API_revert_In();
-
- zend_hash_internal_pointer_reset(lht);
- for(i=0; i<count; i++) {
- ulong ind;
- char *key;
- zval **keydata;
- zend_hash_get_current_data(lht, (void **) &keydata);
- zend_hash_get_current_key(lht, &key, &ind, 0);
- switch((*keydata)->type) {
- case IS_STRING:
- if(!strcmp(key, "objectIdentifier"))
- in->setObjectIdentifier((*keydata)->value.str.val);
- else if(!strcmp(key, "objectQuery"))
- in->setObjectQuery((*keydata)->value.str.val);
- else if(!strcmp(key, "version"))
- in->setVersion((*keydata)->value.str.val);
- break;
- case IS_LONG:
- if(!strcmp(key, "mode"))
- in->setMode((*keydata)->value.lval);
- break;
- }
- zend_hash_move_forward(lht);
- }
- return(in);
-}
-
-static HW_API_history_In *make_HW_API_history(zval *arg1) {
- int count, i;
- HashTable *lht;
- HW_API_history_In *in;
-
- lht = arg1->value.ht;
-
- if(0 == (count = zend_hash_num_elements(lht))) {
- return NULL;
- }
-
- in = new HW_API_history_In();
-
- zend_hash_internal_pointer_reset(lht);
- for(i=0; i<count; i++) {
- ulong ind;
- char *key;
- zval **keydata;
- zend_hash_get_current_data(lht, (void **) &keydata);
- zend_hash_get_current_key(lht, &key, &ind, 0);
- switch((*keydata)->type) {
- case IS_STRING:
- if(!strcmp(key, "objectIdentifier"))
- in->setObjectIdentifier((*keydata)->value.str.val);
-/* else if(!strcmp(key, "objectQuery"))
- in->objectQuery((*keydata)->value.str.val);*/
- break;
- case IS_ARRAY: {
- HW_API_StringArray *sarr;
-
- if(!strcmp(key, "attributeSelector")) {
- sarr = make_HW_API_StringArray((*keydata)->value.ht);
- in->setAttributeSelector(*sarr);
- /* FIXME: sarr can be propperly be freed now */
- }
- break;
- }
- }
- zend_hash_move_forward(lht);
- }
- return(in);
-}
-
-static HW_API_removeVersion_In *make_HW_API_removeVersion_In(zval *arg1) {
- int count, i;
- HashTable *lht;
- HW_API_removeVersion_In *in;
-
- lht = arg1->value.ht;
-
- if(0 == (count = zend_hash_num_elements(lht))) {
- return NULL;
- }
-
- in = new HW_API_removeVersion_In();
-
- zend_hash_internal_pointer_reset(lht);
- for(i=0; i<count; i++) {
- ulong ind;
- char *key;
- zval **keydata;
- zend_hash_get_current_data(lht, (void **) &keydata);
- zend_hash_get_current_key(lht, &key, &ind, 0);
- switch((*keydata)->type) {
- case IS_STRING:
- if(!strcmp(key, "objectIdentifier"))
- in->setObjectIdentifier((*keydata)->value.str.val);
- else if(!strcmp(key, "version"))
- in->setVersion((*keydata)->value.str.val);
- break;
- case IS_LONG:
- if(!strcmp(key, "mode"))
- in->setMode((*keydata)->value.lval);
- break;
- }
- zend_hash_move_forward(lht);
- }
- return(in);
-}
-
-static HW_API_freeVersion_In *make_HW_API_freeVersion_In(zval *arg1) {
- int count, i;
- HashTable *lht;
- HW_API_freeVersion_In *in;
-
- lht = arg1->value.ht;
-
- if(0 == (count = zend_hash_num_elements(lht))) {
- return NULL;
- }
-
- in = new HW_API_freeVersion_In();
-
- zend_hash_internal_pointer_reset(lht);
- for(i=0; i<count; i++) {
- ulong ind;
- char *key;
- zval **keydata;
- zend_hash_get_current_data(lht, (void **) &keydata);
- zend_hash_get_current_key(lht, &key, &ind, 0);
- switch((*keydata)->type) {
- case IS_STRING:
- if(!strcmp(key, "objectIdentifier"))
- in->setObjectIdentifier((*keydata)->value.str.val);
- else if(!strcmp(key, "version"))
- in->setVersion((*keydata)->value.str.val);
- break;
- case IS_ARRAY: {
- HW_API_StringArray *sarr;
-
- if(!strcmp(key, "attributeSelector")) {
- sarr = make_HW_API_StringArray((*keydata)->value.ht);
- in->setAttributeSelector(*sarr);
- /* FIXME: sarr can be propperly be freed now */
- }
- break;
- }
- }
- zend_hash_move_forward(lht);
- }
- return(in);
-}
-
-static HW_API_configurationHistory_In *make_HW_API_configurationHistory_In(zval *arg1) {
- int count, i;
- HashTable *lht;
- HW_API_configurationHistory_In *in;
-
- lht = arg1->value.ht;
-
- if(0 == (count = zend_hash_num_elements(lht))) {
- return NULL;
- }
-
- in = new HW_API_configurationHistory_In();
-
- zend_hash_internal_pointer_reset(lht);
- for(i=0; i<count; i++) {
- ulong ind;
- char *key;
- zval **keydata;
- zend_hash_get_current_data(lht, (void **) &keydata);
- zend_hash_get_current_key(lht, &key, &ind, 0);
- switch((*keydata)->type) {
- case IS_STRING:
- if(!strcmp(key, "objectIdentifier"))
- in->setObjectIdentifier((*keydata)->value.str.val);
- break;
- }
- zend_hash_move_forward(lht);
- }
- return(in);
-}
-
-static HW_API_saveConfiguration_In *make_HW_API_saveConfiguration_In(zval *arg1) {
- int count, i;
- HashTable *lht;
- HW_API_saveConfiguration_In *in;
-
- lht = arg1->value.ht;
-
- if(0 == (count = zend_hash_num_elements(lht))) {
- return NULL;
- }
-
- in = new HW_API_saveConfiguration_In();
-
- zend_hash_internal_pointer_reset(lht);
- for(i=0; i<count; i++) {
- ulong ind;
- char *key;
- zval **keydata;
- zend_hash_get_current_data(lht, (void **) &keydata);
- zend_hash_get_current_key(lht, &key, &ind, 0);
- switch((*keydata)->type) {
- case IS_STRING:
- if(!strcmp(key, "objectIdentifier"))
- in->setObjectIdentifier((*keydata)->value.str.val);
- else if(!strcmp(key, "version"))
- in->setVersion((*keydata)->value.str.val);
- else if(!strcmp(key, "comment"))
- in->setComment((*keydata)->value.str.val);
- break;
- case IS_LONG:
- if(!strcmp(key, "mode"))
- in->setMode((*keydata)->value.lval);
- break;
- case IS_ARRAY: {
- HW_API_StringArray *sarr;
-
- if(!strcmp(key, "attributeSelector")) {
- sarr = make_HW_API_StringArray((*keydata)->value.ht);
- in->setAttributeSelector(*sarr);
- /* FIXME: sarr can be propperly be freed now */
- }
- break;
- }
- }
- zend_hash_move_forward(lht);
- }
- return(in);
-}
-
-static HW_API_restoreConfiguration_In *make_HW_API_restoreConfiguration_In(zval *arg1) {
- int count, i;
- HashTable *lht;
- HW_API_restoreConfiguration_In *in;
-
- lht = arg1->value.ht;
-
- if(0 == (count = zend_hash_num_elements(lht))) {
- return NULL;
- }
-
- in = new HW_API_restoreConfiguration_In();
-
- zend_hash_internal_pointer_reset(lht);
- for(i=0; i<count; i++) {
- ulong ind;
- char *key;
- zval **keydata;
- zend_hash_get_current_data(lht, (void **) &keydata);
- zend_hash_get_current_key(lht, &key, &ind, 0);
- switch((*keydata)->type) {
- case IS_STRING:
- if(!strcmp(key, "objectIdentifier"))
- in->setObjectIdentifier((*keydata)->value.str.val);
- else if(!strcmp(key, "version"))
- in->setVersion((*keydata)->value.str.val);
- break;
- case IS_LONG:
- if(!strcmp(key, "mode"))
- in->setMode((*keydata)->value.lval);
- break;
- }
- zend_hash_move_forward(lht);
- }
- return(in);
-}
-
-static HW_API_removeConfiguration_In *make_HW_API_removeConfiguration_In(zval *arg1) {
- int count, i;
- HashTable *lht;
- HW_API_removeConfiguration_In *in;
-
- lht = arg1->value.ht;
-
- if(0 == (count = zend_hash_num_elements(lht))) {
- return NULL;
- }
-
- in = new HW_API_removeConfiguration_In();
-
- zend_hash_internal_pointer_reset(lht);
- for(i=0; i<count; i++) {
- ulong ind;
- char *key;
- zval **keydata;
- zend_hash_get_current_data(lht, (void **) &keydata);
- zend_hash_get_current_key(lht, &key, &ind, 0);
- switch((*keydata)->type) {
- case IS_STRING:
- if(!strcmp(key, "objectIdentifier"))
- in->setObjectIdentifier((*keydata)->value.str.val);
- else if(!strcmp(key, "version"))
- in->setVersion((*keydata)->value.str.val);
- break;
- }
- zend_hash_move_forward(lht);
- }
- return(in);
-}
-
-static HW_API_mergeConfiguration_In *make_HW_API_mergeConfiguration_In(zval *arg1) {
- int count, i;
- HashTable *lht;
- HW_API_mergeConfiguration_In *in;
-
- lht = arg1->value.ht;
-
- if(0 == (count = zend_hash_num_elements(lht))) {
- return NULL;
- }
-
- in = new HW_API_mergeConfiguration_In();
-
- zend_hash_internal_pointer_reset(lht);
- for(i=0; i<count; i++) {
- ulong ind;
- char *key;
- zval **keydata;
- zend_hash_get_current_data(lht, (void **) &keydata);
- zend_hash_get_current_key(lht, &key, &ind, 0);
- switch((*keydata)->type) {
- case IS_STRING:
- if(!strcmp(key, "objectIdentifier"))
- in->setObjectIdentifier((*keydata)->value.str.val);
- else if(!strcmp(key, "version"))
- in->setVersion((*keydata)->value.str.val);
- break;
- case IS_LONG:
- if(!strcmp(key, "mode"))
- in->setMode((*keydata)->value.lval);
- break;
- }
- zend_hash_move_forward(lht);
- }
- return(in);
-}
-
-static HW_API_user_In *make_HW_API_user_In(zval *arg1) {
- int count, i;
- HashTable *lht;
- HW_API_user_In *in;
-
- lht = arg1->value.ht;
-
- if(0 == (count = zend_hash_num_elements(lht))) {
- return NULL;
- }
-
- in = new HW_API_user_In();
-
- zend_hash_internal_pointer_reset(lht);
- for(i=0; i<count; i++) {
- ulong ind;
- char *key;
- zval **keydata;
- zend_hash_get_current_data(lht, (void **) &keydata);
- zend_hash_get_current_key(lht, &key, &ind, 0);
- switch((*keydata)->type) {
- case IS_ARRAY: {
- HW_API_StringArray *sarr;
-
- if(!strcmp(key, "attributeSelector")) {
- sarr = make_HW_API_StringArray((*keydata)->value.ht);
- in->setAttributeSelector(*sarr);
- /* FIXME: sarr can be propperly be freed now */
- }
- break;
- }
- }
- zend_hash_move_forward(lht);
- }
- return(in);
-}
-
-static HW_API_userlist_In *make_HW_API_userlist_In(zval *arg1) {
- int count, i;
- HashTable *lht;
- HW_API_userlist_In *in;
-
- lht = arg1->value.ht;
-
- if(0 == (count = zend_hash_num_elements(lht))) {
- return NULL;
- }
-
- in = new HW_API_userlist_In();
-
- zend_hash_internal_pointer_reset(lht);
- for(i=0; i<count; i++) {
- ulong ind;
- char *key;
- zval **keydata;
- zend_hash_get_current_data(lht, (void **) &keydata);
- zend_hash_get_current_key(lht, &key, &ind, 0);
- switch((*keydata)->type) {
- case IS_ARRAY: {
- HW_API_StringArray *sarr;
-
- if(!strcmp(key, "attributeSelector")) {
- sarr = make_HW_API_StringArray((*keydata)->value.ht);
- in->setAttributeSelector(*sarr);
- /* FIXME: sarr can be propperly be freed now */
- }
- break;
- }
- }
- zend_hash_move_forward(lht);
- }
- return(in);
-}
-
-static HW_API_hwStat_In *make_HW_API_hwStat_In(zval *arg1) {
- int count, i;
- HashTable *lht;
- HW_API_hwStat_In *in;
-
- lht = arg1->value.ht;
-
- if(0 == (count = zend_hash_num_elements(lht))) {
- return NULL;
- }
-
- in = new HW_API_hwStat_In();
-
- zend_hash_internal_pointer_reset(lht);
- for(i=0; i<count; i++) {
- ulong ind;
- char *key;
- zval **keydata;
- zend_hash_get_current_data(lht, (void **) &keydata);
- zend_hash_get_current_key(lht, &key, &ind, 0);
- switch((*keydata)->type) {
- case IS_ARRAY: {
- HW_API_StringArray *sarr;
-
- if(!strcmp(key, "attributeSelector")) {
- sarr = make_HW_API_StringArray((*keydata)->value.ht);
- in->setAttributeSelector(*sarr);
- /* FIXME: sarr can be propperly be freed now */
- }
- break;
- }
- }
- zend_hash_move_forward(lht);
- }
- return(in);
-}
-
-static HW_API_dcStat_In *make_HW_API_dcStat_In(zval *arg1) {
- int count, i;
- HashTable *lht;
- HW_API_dcStat_In *in;
-
- lht = arg1->value.ht;
-
- if(0 == (count = zend_hash_num_elements(lht))) {
- return NULL;
- }
-
- in = new HW_API_dcStat_In();
-
- zend_hash_internal_pointer_reset(lht);
- for(i=0; i<count; i++) {
- ulong ind;
- char *key;
- zval **keydata;
- zend_hash_get_current_data(lht, (void **) &keydata);
- zend_hash_get_current_key(lht, &key, &ind, 0);
- switch((*keydata)->type) {
- case IS_ARRAY: {
- HW_API_StringArray *sarr;
-
- if(!strcmp(key, "attributeSelector")) {
- sarr = make_HW_API_StringArray((*keydata)->value.ht);
- in->setAttributeSelector(*sarr);
- /* FIXME: sarr can be propperly be freed now */
- }
- break;
- }
- }
- zend_hash_move_forward(lht);
- }
- return(in);
-}
-
-static HW_API_dbStat_In *make_HW_API_dbStat_In(zval *arg1) {
- int count, i;
- HashTable *lht;
- HW_API_dbStat_In *in;
-
- lht = arg1->value.ht;
-
- if(0 == (count = zend_hash_num_elements(lht))) {
- return NULL;
- }
-
- in = new HW_API_dbStat_In();
-
- zend_hash_internal_pointer_reset(lht);
- for(i=0; i<count; i++) {
- ulong ind;
- char *key;
- zval **keydata;
- zend_hash_get_current_data(lht, (void **) &keydata);
- zend_hash_get_current_key(lht, &key, &ind, 0);
- switch((*keydata)->type) {
- case IS_ARRAY: {
- HW_API_StringArray *sarr;
-
- if(!strcmp(key, "attributeSelector")) {
- sarr = make_HW_API_StringArray((*keydata)->value.ht);
- in->setAttributeSelector(*sarr);
- /* FIXME: sarr can be propperly be freed now */
- }
- break;
- }
- }
- zend_hash_move_forward(lht);
- }
- return(in);
-}
-
-static HW_API_ftStat_In *make_HW_API_ftStat_In(zval *arg1) {
- int count, i;
- HashTable *lht;
- HW_API_ftStat_In *in;
-
- lht = arg1->value.ht;
-
- if(0 == (count = zend_hash_num_elements(lht))) {
- return NULL;
- }
-
- in = new HW_API_ftStat_In();
-
- zend_hash_internal_pointer_reset(lht);
- for(i=0; i<count; i++) {
- ulong ind;
- char *key;
- zval **keydata;
- zend_hash_get_current_data(lht, (void **) &keydata);
- zend_hash_get_current_key(lht, &key, &ind, 0);
- switch((*keydata)->type) {
- case IS_ARRAY: {
- HW_API_StringArray *sarr;
-
- if(!strcmp(key, "attributeSelector")) {
- sarr = make_HW_API_StringArray((*keydata)->value.ht);
- in->setAttributeSelector(*sarr);
- /* FIXME: sarr can be propperly be freed now */
- }
- break;
- }
- }
- zend_hash_move_forward(lht);
- }
- return(in);
-}
-
-static HW_API_info_In *make_HW_API_info_In(zval *arg1) {
- int count, i;
- HashTable *lht;
- HW_API_info_In *in;
-
- lht = arg1->value.ht;
-
- if(0 == (count = zend_hash_num_elements(lht))) {
- return NULL;
- }
-
- in = new HW_API_info_In();
-
- zend_hash_internal_pointer_reset(lht);
- for(i=0; i<count; i++) {
- ulong ind;
- char *key;
- zval **keydata;
- zend_hash_get_current_data(lht, (void **) &keydata);
- zend_hash_get_current_key(lht, &key, &ind, 0);
- switch((*keydata)->type) {
- case IS_ARRAY: {
- HW_API_StringArray *sarr;
-
- if(!strcmp(key, "attributeSelector")) {
- sarr = make_HW_API_StringArray((*keydata)->value.ht);
- in->setAttributeSelector(*sarr);
- /* FIXME: sarr can be propperly be freed now */
- }
- break;
- }
- }
- zend_hash_move_forward(lht);
- }
- return(in);
-}
-
-PHP_INI_BEGIN()
-// STD_PHP_INI_ENTRY("hwapi.allow_persistent", "0", PHP_INI_SYSTEM, OnUpdateLong, allow_persistent, zend_hwapi_globals, hwapi_globals)
-PHP_INI_END()
-
-PHP_MINIT_FUNCTION(hwapi) {
- ZEND_INIT_MODULE_GLOBALS(hwapi, php_hwapi_init_globals, NULL);
-
- le_hwapip = zend_register_list_destructors_ex(php_free_hwapi, NULL, "hw_api", module_number);
- le_hwapi_attributep = zend_register_list_destructors_ex(php_free_hwapi_attribute, NULL, "hw_api_attribute", module_number);
- le_hwapi_objectp = zend_register_list_destructors_ex(php_free_hwapi_object, NULL, "hw_api_object", module_number);
- le_hwapi_errorp = zend_register_list_destructors_ex(php_free_hwapi_error, NULL, "hw_api_error", module_number);
- le_hwapi_contentp = zend_register_list_destructors_ex(php_free_hwapi_content, NULL, "hw_api_content", module_number);
- le_hwapi_reasonp = zend_register_list_destructors_ex(php_free_hwapi_reason, NULL, "hw_api_reason", module_number);
- hw_api_class_startup();
- hw_api_object_class_startup();
- hw_api_attribute_class_startup();
- hw_api_error_class_startup();
- hw_api_content_class_startup();
- hw_api_reason_class_startup();
-
- REGISTER_LONG_CONSTANT("HW_API_REMOVE_NORMAL", HW_API_remove_In::NORMAL, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("HW_API_REMOVE_PHYSICAL", HW_API_remove_In::PHYSICAL, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("HW_API_REMOVE_REMOVELINKS", HW_API_remove_In::REMOVELINKS, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("HW_API_REMOVE_NONRECURSIVE", HW_API_remove_In::NONRECURSIVE, CONST_CS | CONST_PERSISTENT);
-
- REGISTER_LONG_CONSTANT("HW_API_REPLACE_NORMAL", HW_API_replace_In::NORMAL, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("HW_API_REPLACE_FORCE_VERSION_CONTROL", HW_API_replace_In::FORCE_VERSION_CONTROL, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("HW_API_REPLACE_AUTOMATIC_CHECKOUT", HW_API_replace_In::AUTOMATIC_CHECKOUT, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("HW_API_REPLACE_AUTOMATIC_CHECKIN", HW_API_replace_In::AUTOMATIC_CHECKIN, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("HW_API_REPLACE_PLAIN", HW_API_replace_In::PLAIN, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("HW_API_REPLACE_REVERT_IF_NOT_CHANGED", HW_API_replace_In::REVERT_IF_NOT_CHANGED, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("HW_API_REPLACE_KEEP_TIME_MODIFIED", HW_API_replace_In::KEEP_TIME_MODIFIED, CONST_CS | CONST_PERSISTENT);
-
- REGISTER_LONG_CONSTANT("HW_API_INSERT_NORMAL", HW_API_insert_In::NORMAL, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("HW_API_INSERT_FORCE_VERSION_CONTROL", HW_API_insert_In::FORCE_VERSION_CONTROL, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("HW_API_INSERT_AUTOMATIC_CHECKOUT", HW_API_insert_In::AUTOMATIC_CHECKOUT, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("HW_API_INSERT_PLAIN", HW_API_insert_In::PLAIN, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("HW_API_INSERT_KEEP_TIME_MODIFIED", HW_API_insert_In::KEEP_TIME_MODIFIED, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("HW_API_INSERT_DELAY_INDEXING", HW_API_insert_In::DELAY_INDEXING, CONST_CS | CONST_PERSISTENT);
-
- REGISTER_LONG_CONSTANT("HW_API_LOCK_NORMAL", HW_API_lock_In::NORMAL, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("HW_API_LOCK_RECURSIVE", HW_API_lock_In::RECURSIVE, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("HW_API_LOCK_SESSION", HW_API_lock_In::SESSION, CONST_CS | CONST_PERSISTENT);
-
- REGISTER_LONG_CONSTANT("HW_API_CONTENT_ALLLINKS", HW_API_content_In::ALLLINKS, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("HW_API_CONTENT_REACHABLELINKS", HW_API_content_In::REACHABLELINKS, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("HW_API_CONTENT_PLAIN", HW_API_content_In::PLAIN, CONST_CS | CONST_PERSISTENT);
-
- REGISTER_LONG_CONSTANT("HW_API_REASON_ERROR", HW_API_Reason::HW_API_ERROR, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("HW_API_REASON_WARNING", HW_API_Reason::HW_API_WARNING, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("HW_API_REASON_MESSAGE", HW_API_Reason::HW_API_MESSAGE, CONST_CS | CONST_PERSISTENT);
-
- /* Make sure there are at least default values, though the MessageFilePath
- * is bogus. If it isn't set at all the web server dies.
- */
- HW_API_init_In initargs;
- initargs.setArgv0("PHP HWAPI");
- initargs.setMessageFilePath("");
- HW_API::init(initargs);
-
- return SUCCESS;
-}
-
-PHP_MSHUTDOWN_FUNCTION(hwapi) {
- return SUCCESS;
-}
-
-PHP_RINIT_FUNCTION(hwapi) {
- return SUCCESS;
-}
-
-PHP_MINFO_FUNCTION(hwapi) {
- php_info_print_table_start();
- php_info_print_table_row(2, "Hyperwave API Support", "enabled");
- php_info_print_table_end();
-}
-
-/* {{{ proto bool hwapi_dummy(int link, int id, int msgid)
- Hyperwave dummy function */
-PHP_FUNCTION(hwapi_dummy) {
- pval **arg1, **arg2, **arg3;
- int link, id, type, msgid;
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto bool hwapi_init(string hostname, int port)
- Hyperwave initialisation */
-PHP_FUNCTION(hwapi_init) {
- zval **argv[2], *id;
- HW_API_init_In initargs;
- HW_API_init_Out out;
- int ret;
- HW_API_HGCSP *db;
- zval *rv;
- int argc = ZEND_NUM_ARGS();
-
- if (((argc < 1) || (argc > 2)) || zend_get_parameters_array_ex(argc, argv) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- id = getThis();
-
- convert_to_string_ex(argv[0]);
- initargs.setArgv0("PHP HWAPI");
- initargs.setMessageFilePath(Z_STRVAL_PP(argv[0]));
- if(argc == 2) {
- convert_to_string_ex(argv[1]);
- initargs.setWhatString(Z_STRVAL_PP(argv[1])) ;
- }
- if(id) {
- db = (HW_API_HGCSP *) php_hwapi_get_object(id, le_hwapip);
- if(!db) {
- RETURN_FALSE;
- }
- out = db->init(initargs);
- } else {
- out = HW_API::init(initargs);
- }
-
- if (out.error().error()) {
- HW_API_Error *err = new HW_API_Error(out.error());
- rv = php_hwapi_object_new((HW_API_Error *) err, le_hwapi_errorp);
- SEPARATE_ZVAL(&rv);
- *return_value = *rv;
- FREE_ZVAL(rv);
- return;
- }
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto string hwapi_hgcsp(string hostname, int port)
- */
-PHP_FUNCTION(hwapi_hgcsp) {
- zval **argv[2];
- HW_API_HGCSP *db;
- zval *rv;
- int argc = ZEND_NUM_ARGS();
-
- if (((argc < 1) || (argc > 2)) || zend_get_parameters_array_ex(argc, argv) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_string_ex(argv[0]);
- if(argc == 2) {
- convert_to_long_ex(argv[1]);
- db = new HW_API_HGCSP(Z_STRVAL_PP(argv[0]), Z_LVAL_PP(argv[1]));
- } else {
- db = new HW_API_HGCSP(Z_STRVAL_PP(argv[0]));
- }
-
- rv = php_hwapi_object_new((HW_API_HGCSP *) db, le_hwapip);
- SEPARATE_ZVAL(&rv);
- *return_value = *rv;
- FREE_ZVAL(rv);
-
-// ret = zend_list_insert(db, le_hwapip);
-
- /* construct an object with some methods */
-// object_init_ex(return_value, hw_api_class_entry_ptr);
-// add_property_resource(return_value, "this", ret);
-}
-/* }}} */
-
-/* {{{ proto object hwapi_object(array object_in)
- */
-PHP_FUNCTION(hwapi_object) {
- pval **arg1, *rv, *id;
- HW_API_Object *newobj;
- HW_API_object_In *in;
- HW_API_object_Out out;
- HW_API_HGCSP *db;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg1) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_array_ex(arg1);
-
- id = getThis();
- db = (HW_API_HGCSP *) php_hwapi_get_object(id, le_hwapip);
-
- if(!db) {
- RETURN_FALSE;
- }
-
- in = make_HW_API_object_In(*arg1);
-
- out = db->object(*in);
- delete in;
- if (out.error().error()) {
- HW_API_Error *err = new HW_API_Error(out.error());
- rv = php_hwapi_object_new((HW_API_Error *) err, le_hwapi_errorp);
- SEPARATE_ZVAL(&rv);
- *return_value = *rv;
- FREE_ZVAL(rv);
- return;
- }
-
- //Frage: Diese Zeile erzeugt erst mit dem Konstruktor von HW_API_Object
- //eine Kopie und danach durch das assign. Wie kann man das verhindern.
- newobj = new HW_API_Object();
- *newobj = out.object();
-// newobj = new HW_API_Object(out.object());
-
- rv = php_hwapi_object_new(newobj, le_hwapi_objectp);
- SEPARATE_ZVAL(&rv);
- *return_value = *rv;
- FREE_ZVAL(rv);
-}
-/* }}} */
-
-/* {{{ proto array hwapi_mychildren(string parameters)
- */
-PHP_FUNCTION(hwapi_mychildren) {
- zval **arg1, *id, *rv;
- HW_API_ObjectArray objarr;
- HW_API_children_In *in;
- HW_API_children_Out out;
- HW_API_HGCSP *db;
- int i;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg1) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex(arg1);
-
- id = getThis();
- db = (HW_API_HGCSP *) php_hwapi_get_object(id, le_hwapip);
-
- if(!db) {
- RETURN_FALSE;
- }
-
- in = new HW_API_children_In();
- in->setObjectIdentifier(Z_STRVAL_PP(arg1));
- out = db->children(*in);
- delete in;
- if (out.error().error()) {
- HW_API_Error *err = new HW_API_Error(out.error());
- rv = php_hwapi_object_new((HW_API_Error *) err, le_hwapi_errorp);
- SEPARATE_ZVAL(&rv);
- *return_value = *rv;
- FREE_ZVAL(rv);
- return;
- } else {
- objarr = (HW_API_ObjectArray) out.objects();
- }
-
- array_init(return_value);
-
- for(i=0; i<objarr.count(); i++) {
- zval *child;
- HW_API_Object obj, *objp;
- objarr.object(i, obj);
- objp = new HW_API_Object(obj);
- child = php_hwapi_object_new(objp, le_hwapi_objectp);
- add_next_index_zval(return_value, child);
- }
- return;
- for(i=0; i<objarr.count(); i++) {
- HW_API_Object obj;
- HW_API_Attribute attr;
- objarr.object(i, obj);
- obj.attribute("GOid", attr);
- add_next_index_string(return_value, (char *) attr.value().string(), 1);
- }
-}
-/* }}} */
-
-/* {{{ proto object hwapi_children(array parameters)
- */
-PHP_FUNCTION(hwapi_children) {
- zval **arg1, *id, *rv;
- HW_API_ObjectArray objarr;
- HW_API_children_In *in;
- HW_API_children_Out out;
- HW_API_HGCSP *db;
- int i;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg1) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_array_ex(arg1);
-
- id = getThis();
- db = (HW_API_HGCSP *) php_hwapi_get_object(id, le_hwapip);
-
- if(!db) {
- RETURN_FALSE;
- }
-
- in = make_HW_API_children_In(*arg1);
-
- out = db->children(*in);
- delete in;
- if (out.error().error()) {
- HW_API_Error *err = new HW_API_Error(out.error());
- rv = php_hwapi_object_new((HW_API_Error *) err, le_hwapi_errorp);
- SEPARATE_ZVAL(&rv);
- *return_value = *rv;
- FREE_ZVAL(rv);
- return;
- } else {
- objarr = (HW_API_ObjectArray) out.objects();
- }
-
- objectArray2indexArray(&return_value, &objarr);
-}
-/* }}} */
-
-/* {{{ proto object hwapi_parents(array parameters)
- */
-PHP_FUNCTION(hwapi_parents) {
- zval **arg1, *id, *rv;
- HW_API_ObjectArray objarr;
- HW_API_parents_In *in;
- HW_API_parents_Out out;
- HW_API_HGCSP *db;
- int i;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg1) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_array_ex(arg1);
-
- id = getThis();
- db = (HW_API_HGCSP *) php_hwapi_get_object(id, le_hwapip);
-
- if(!db) {
- RETURN_FALSE;
- }
-
- in = make_HW_API_parents_In(*arg1);
-
- out = db->parents(*in);
- delete in;
- if (out.error().error()) {
- HW_API_Error *err = new HW_API_Error(out.error());
- rv = php_hwapi_object_new((HW_API_Error *) err, le_hwapi_errorp);
- SEPARATE_ZVAL(&rv);
- *return_value = *rv;
- FREE_ZVAL(rv);
- return;
- } else {
- objarr = (HW_API_ObjectArray) out.objects();
- }
-
- objectArray2indexArray(&return_value, &objarr);
-}
-/* }}} */
-
-/* {{{ proto array hwapi_find(array parameters)
- Finds objects */
-PHP_FUNCTION(hwapi_find) {
- zval **arg1, *id, *rv;
- HW_API_ObjectArray objarr;
- HW_API_find_In *in;
- HW_API_find_Out out;
- HW_API_HGCSP *db;
- int i;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg1) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_array_ex(arg1);
-
- id = getThis();
- db = (HW_API_HGCSP *) php_hwapi_get_object(id, le_hwapip);
-
- if(!db) {
- RETURN_FALSE;
- }
-
- in = make_HW_API_find_In(*arg1);
-
- out = db->find(*in);
- delete in;
- if (out.error().error()) {
- HW_API_Error *err = new HW_API_Error(out.error());
- rv = php_hwapi_object_new((HW_API_Error *) err, le_hwapi_errorp);
- SEPARATE_ZVAL(&rv);
- *return_value = *rv;
- FREE_ZVAL(rv);
- return;
- }
- objarr = (HW_API_ObjectArray) out.objects();
-
- /* FIXME: No a good idea to return just the objects. There is actually
- * more to return. Changing this to an object of type hw_api_find_out would
- * mean to change hw_api_parents() and hw_api_children() as well. */
- array_init(return_value);
-
- /* FIXME: More than just the list of objects is returned by find() */
- if(0 == objectArray2indexArray(&rv, &objarr)) {
- RETURN_FALSE;
- }
- zend_hash_add(return_value->value.ht, "objects", 8, &rv, sizeof(zval *), NULL);
- add_assoc_long(return_value, "endIndex", out.endIndex());
- add_assoc_bool(return_value, "haveMore", out.haveMore() ? true : false);
- add_assoc_long(return_value, "numberOfThingsFound", out.numberOfThingsFound());
-}
-/* }}} */
-
-/* {{{ proto bool hwapi_identify(array parameters)
- Hyperwave dummy function */
-PHP_FUNCTION(hwapi_identify) {
- pval **arg1, *id, *rv;
- HW_API_identify_In *in;
- HW_API_identify_Out out;
- HW_API_HGCSP *db;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg1) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_array_ex(arg1);
-
- id = getThis();
- db = (HW_API_HGCSP *) php_hwapi_get_object(id, le_hwapip);
-
- if(!db) {
- RETURN_FALSE;
- }
-
- in = make_HW_API_identify_In(*arg1);
-
- out = db->identify(*in);
- delete in;
- if (out.error().error()) {
- HW_API_Error *err = new HW_API_Error(out.error());
- rv = php_hwapi_object_new((HW_API_Error *) err, le_hwapi_errorp);
- SEPARATE_ZVAL(&rv);
- *return_value = *rv;
- FREE_ZVAL(rv);
- return;
- }
-
- printf("hwapi_identify\n");
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto bool hwapi_remove(array parameters)
- Remove an object */
-PHP_FUNCTION(hwapi_remove) {
- pval **arg1, *id, *rv;
- HW_API_remove_In *in;
- HW_API_remove_Out out;
- HW_API_HGCSP *db;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg1) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_array_ex(arg1);
-
- id = getThis();
- db = (HW_API_HGCSP *) php_hwapi_get_object(id, le_hwapip);
-
- if(!db) {
- RETURN_FALSE;
- }
-
- in = make_HW_API_remove_In(*arg1);
-
- out = db->remove(*in);
- delete in;
- if (out.error().error()) {
- HW_API_Error *err = new HW_API_Error(out.error());
- rv = php_hwapi_object_new(err, le_hwapi_errorp);
- SEPARATE_ZVAL(&rv);
- *return_value = *rv;
- FREE_ZVAL(rv);
- return;
- }
-
- printf("hwapi_remove\n");
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto object hwapi_content(array parameters)
- Retrieve content of object */
-PHP_FUNCTION(hwapi_content) {
- pval **arg1, *id, *rv;
- HW_API_content_In *in;
- HW_API_content_Out out;
- HW_API_HGCSP *db;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg1) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_array_ex(arg1);
-
- id = getThis();
- db = (HW_API_HGCSP *) php_hwapi_get_object(id, le_hwapip);
-
- if(!db) {
- RETURN_FALSE;
- }
-
- in = make_HW_API_content_In(*arg1);
-
- out = db->content(*in);
- delete in;
- if (!out.error().error()) {
- HW_API_Content *content = new HW_API_Content(out.content());
- rv = php_hwapi_object_new(content, le_hwapi_contentp);
- } else {
- HW_API_Error *err = new HW_API_Error(out.error());
- rv = php_hwapi_object_new(err, le_hwapi_errorp);
- }
- SEPARATE_ZVAL(&rv);
- *return_value = *rv;
- FREE_ZVAL(rv);
-}
-/* }}} */
-
-/* {{{ proto object hwapi_copy(array parameters)
- */
-PHP_FUNCTION(hwapi_copy) {
- pval **arg1, *id, *rv;
- HW_API_copy_In *in;
- HW_API_copy_Out out;
- HW_API_HGCSP *db;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg1) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_array_ex(arg1);
-
- id = getThis();
- db = (HW_API_HGCSP *) php_hwapi_get_object(id, le_hwapip);
-
- if(!db) {
- RETURN_FALSE;
- }
-
- in = make_HW_API_copy_In(*arg1);
-
- out = db->copy(*in);
- delete in;
- if (!out.error().error()) {
- HW_API_Object *object = new HW_API_Object(out.object());
- rv = php_hwapi_object_new((HW_API_Object*) object, le_hwapi_objectp);
- } else {
- HW_API_Error *err = new HW_API_Error(out.error());
- rv = php_hwapi_object_new((HW_API_Error *) err, le_hwapi_errorp);
- }
- SEPARATE_ZVAL(&rv);
- *return_value = *rv;
- FREE_ZVAL(rv);
-
- printf("hwapi_copy\n");
-}
-/* }}} */
-
-/* {{{ proto bool hwapi_link(array parameters)
- Hyperwave dummy function */
-PHP_FUNCTION(hwapi_link) {
- pval **arg1, *id, *rv;
- HW_API_link_In *in;
- HW_API_link_Out out;
- HW_API_HGCSP *db;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg1) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_array_ex(arg1);
-
- id = getThis();
- db = (HW_API_HGCSP *) php_hwapi_get_object(id, le_hwapip);
-
- if(!db) {
- RETURN_FALSE;
- }
-
- in = make_HW_API_link_In(*arg1);
-
- out = db->link(*in);
- delete in;
- if (out.error().error()) {
- HW_API_Error *err = new HW_API_Error(out.error());
- rv = php_hwapi_object_new(err, le_hwapi_errorp);
- SEPARATE_ZVAL(&rv);
- *return_value = *rv;
- FREE_ZVAL(rv);
- return;
- }
-
- printf("hwapi_link\n");
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto bool hwapi_move(array parameters)
- */
-PHP_FUNCTION(hwapi_move) {
- pval **arg1, *id, *rv;
- HW_API_move_In *in;
- HW_API_move_Out out;
- HW_API_HGCSP *db;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg1) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_array_ex(arg1);
-
- id = getThis();
- db = (HW_API_HGCSP *) php_hwapi_get_object(id, le_hwapip);
-
- if(!db) {
- RETURN_FALSE;
- }
-
- in = make_HW_API_move_In(*arg1);
-
- out = db->move(*in);
- delete in;
- if (out.error().error()) {
- HW_API_Error *err = new HW_API_Error(out.error());
- rv = php_hwapi_object_new(err, le_hwapi_errorp);
- SEPARATE_ZVAL(&rv);
- *return_value = *rv;
- FREE_ZVAL(rv);
- return;
- }
-
- printf("hwapi_move\n");
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto bool hwapi_lock(array parameters)
- */
-PHP_FUNCTION(hwapi_lock) {
- pval **arg1, *id, *rv;
- HW_API_lock_In *in;
- HW_API_lock_Out out;
- HW_API_HGCSP *db;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg1) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_array_ex(arg1);
-
- id = getThis();
- db = (HW_API_HGCSP *) php_hwapi_get_object(id, le_hwapip);
-
- if(!db) {
- RETURN_FALSE;
- }
-
- in = make_HW_API_lock_In(*arg1);
-
- out = db->lock(*in);
- delete in;
- if (out.error().error()) {
- HW_API_Error *err = new HW_API_Error(out.error());
- rv = php_hwapi_object_new(err, le_hwapi_errorp);
- SEPARATE_ZVAL(&rv);
- *return_value = *rv;
- FREE_ZVAL(rv);
- return;
- }
-
- printf("hwapi_lock\n");
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto bool hwapi_unlock(array parameters)
- */
-PHP_FUNCTION(hwapi_unlock) {
- pval **arg1, *id, *rv;
- HW_API_unlock_In *in;
- HW_API_unlock_Out out;
- HW_API_HGCSP *db;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg1) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_array_ex(arg1);
-
- id = getThis();
- db = (HW_API_HGCSP *) php_hwapi_get_object(id, le_hwapip);
-
- if(!db) {
- RETURN_FALSE;
- }
-
- in = make_HW_API_unlock_In(*arg1);
-
- out = db->unlock(*in);
- delete in;
- if (out.error().error()) {
- HW_API_Error *err = new HW_API_Error(out.error());
- rv = php_hwapi_object_new(err, le_hwapi_errorp);
- SEPARATE_ZVAL(&rv);
- *return_value = *rv;
- FREE_ZVAL(rv);
- return;
- }
-
- printf("hwapi_unlock\n");
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto object hwapi_replace(array parameters)
- */
-PHP_FUNCTION(hwapi_replace) {
- pval **arg1, *id, *rv;
- HW_API_replace_In *in;
- HW_API_replace_Out out;
- HW_API_HGCSP *db;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg1) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_array_ex(arg1);
-
- id = getThis();
- db = (HW_API_HGCSP *) php_hwapi_get_object(id, le_hwapip);
-
- if(!db) {
- RETURN_FALSE;
- }
-
- in = make_HW_API_replace_In(*arg1);
-
- out = db->replace(*in);
- delete in;
- if (!out.error().error()) {
- HW_API_Object *object = new HW_API_Object(out.object());
- rv = php_hwapi_object_new(object, le_hwapi_objectp);
- } else {
- HW_API_Error *err = new HW_API_Error(out.error());
- rv = php_hwapi_object_new(err, le_hwapi_errorp);
- }
- SEPARATE_ZVAL(&rv);
- *return_value = *rv;
- FREE_ZVAL(rv);
-}
-/* }}} */
-
-/* {{{ proto object hwapi_insert(array parameters)
- */
-PHP_FUNCTION(hwapi_insert) {
- pval **arg1, *id, *rv;
- HW_API_insert_In *in;
- HW_API_insert_Out out;
- HW_API_HGCSP *db;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg1) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_array_ex(arg1);
-
- id = getThis();
- db = (HW_API_HGCSP *) php_hwapi_get_object(id, le_hwapip);
-
- if(!db) {
- RETURN_FALSE;
- }
-
- in = make_HW_API_insert_In(*arg1);
-
- out = db->insert(*in);
- delete in;
- if (!out.error().error()) {
- HW_API_Object *object = new HW_API_Object(out.object());
- rv = php_hwapi_object_new(object, le_hwapi_objectp);
- } else {
- HW_API_Error *err = new HW_API_Error(out.error());
- rv = php_hwapi_object_new(err, le_hwapi_errorp);
- }
- SEPARATE_ZVAL(&rv);
- *return_value = *rv;
- FREE_ZVAL(rv);
-}
-/* }}} */
-
-/* {{{ proto object hwapi_insertdocument(array parameters)
- */
-PHP_FUNCTION(hwapi_insertdocument) {
- pval **arg1, *id, *rv;
- HW_API_insertDocument_In *in;
- HW_API_insertDocument_Out out;
- HW_API_HGCSP *db;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg1) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_array_ex(arg1);
-
- id = getThis();
- db = (HW_API_HGCSP *) php_hwapi_get_object(id, le_hwapip);
-
- if(!db) {
- RETURN_FALSE;
- }
-
- in = make_HW_API_insertDocument_In(*arg1);
-
- out = db->insertDocument(*in);
- delete in;
- if (!out.error().error()) {
- HW_API_Object *object = new HW_API_Object(out.object());
- rv = php_hwapi_object_new(object, le_hwapi_objectp);
- } else {
- HW_API_Error *err = new HW_API_Error(out.error());
- rv = php_hwapi_object_new(err, le_hwapi_errorp);
- }
- SEPARATE_ZVAL(&rv);
- *return_value = *rv;
- FREE_ZVAL(rv);
-
- printf("hwapi_insertdocument\n");
-}
-/* }}} */
-
-/* {{{ proto object hwapi_insertcollection(array parameters)
- */
-PHP_FUNCTION(hwapi_insertcollection) {
- pval **arg1, *id, *rv;
- HW_API_insertCollection_In *in;
- HW_API_insertCollection_Out out;
- HW_API_HGCSP *db;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg1) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_array_ex(arg1);
-
- id = getThis();
- db = (HW_API_HGCSP *) php_hwapi_get_object(id, le_hwapip);
-
- if(!db) {
- RETURN_FALSE;
- }
-
- in = make_HW_API_insertCollection_In(*arg1);
-
- out = db->insertCollection(*in);
- delete in;
- if (!out.error().error()) {
- HW_API_Object *object = new HW_API_Object(out.object());
- rv = php_hwapi_object_new(object, le_hwapi_objectp);
- } else {
- HW_API_Error *err = new HW_API_Error(out.error());
- rv = php_hwapi_object_new((HW_API_Error *) &err, le_hwapi_errorp);
- }
- SEPARATE_ZVAL(&rv);
- *return_value = *rv;
- FREE_ZVAL(rv);
-
- printf("hwapi_insertcollection\n");
-}
-/* }}} */
-
-/* {{{ proto object hwapi_insertanchor(array parameters)
- */
-PHP_FUNCTION(hwapi_insertanchor) {
- pval **arg1, *id, *rv;
- HW_API_insertAnchor_In *in;
- HW_API_insertAnchor_Out out;
- HW_API_HGCSP *db;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg1) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_array_ex(arg1);
-
- id = getThis();
- db = (HW_API_HGCSP *) php_hwapi_get_object(id, le_hwapip);
-
- if(!db) {
- RETURN_FALSE;
- }
-
- in = make_HW_API_insertAnchor_In(*arg1);
-
- out = db->insertAnchor(*in);
- delete in;
- if (!out.error().error()) {
- HW_API_Object *object = new HW_API_Object(out.object());
- rv = php_hwapi_object_new(object, le_hwapi_objectp);
- } else {
- HW_API_Error *err = new HW_API_Error(out.error());
- rv = php_hwapi_object_new(err, le_hwapi_errorp);
- }
- SEPARATE_ZVAL(&rv);
- *return_value = *rv;
- FREE_ZVAL(rv);
-
- printf("hwapi_insertanchor\n");
-}
-/* }}} */
-
-/* {{{ proto array hwapi_srcanchors(array parameters)
- */
-PHP_FUNCTION(hwapi_srcanchors) {
- pval **arg1, *id, *rv;
- HW_API_ObjectArray objarr;
- HW_API_srcAnchors_In *in;
- HW_API_srcAnchors_Out out;
- HW_API_HGCSP *db;
- int i;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg1) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_array_ex(arg1);
-
- id = getThis();
- db = (HW_API_HGCSP *) php_hwapi_get_object(id, le_hwapip);
-
- if(!db) {
- RETURN_FALSE;
- }
-
- in = make_HW_API_srcAnchors_In(*arg1);
-
- out = db->srcAnchors(*in);
- delete in;
- if (out.error().error()) {
- HW_API_Error *err = new HW_API_Error(out.error());
- rv = php_hwapi_object_new(err, le_hwapi_errorp);
- SEPARATE_ZVAL(&rv);
- *return_value = *rv;
- FREE_ZVAL(rv);
- return;
- } else {
- objarr = (HW_API_ObjectArray) out.objects();
- }
-
- objectArray2indexArray(&return_value, &objarr);
-}
-/* }}} */
-
-/* {{{ proto array hwapi_dstanchors(array parameters)
- */
-PHP_FUNCTION(hwapi_dstanchors) {
- pval **arg1, *id, *rv;
- HW_API_ObjectArray objarr;
- HW_API_dstAnchors_In *in;
- HW_API_dstAnchors_Out out;
- HW_API_HGCSP *db;
- int i;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg1) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_array_ex(arg1);
-
- id = getThis();
- db = (HW_API_HGCSP *) php_hwapi_get_object(id, le_hwapip);
-
- if(!db) {
- RETURN_FALSE;
- }
-
- in = make_HW_API_dstAnchors_In(*arg1);
-
- out = db->dstAnchors(*in);
- delete in;
- if (out.error().error()) {
- HW_API_Error *err = new HW_API_Error(out.error());
- rv = php_hwapi_object_new(err, le_hwapi_errorp);
- SEPARATE_ZVAL(&rv);
- *return_value = *rv;
- FREE_ZVAL(rv);
- return;
- } else {
- objarr = (HW_API_ObjectArray) out.objects();
- }
-
- objectArray2indexArray(&return_value, &objarr);
-}
-/* }}} */
-
-/* {{{ proto object hwapi_objectbyanchor(array parameters)
- */
-PHP_FUNCTION(hwapi_objectbyanchor) {
- pval **arg1, *id, *rv;
- HW_API_objectByAnchor_In *in;
- HW_API_objectByAnchor_Out out;
- HW_API_HGCSP *db;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg1) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_array_ex(arg1);
-
- id = getThis();
- db = (HW_API_HGCSP *) php_hwapi_get_object(id, le_hwapip);
-
- if(!db) {
- RETURN_FALSE;
- }
-
- in = make_HW_API_objectByAnchor_In(*arg1);
- /* FIXME: return value of any make_HW_API_xxx function should be checked
- * for NULL
- */
-
- out = db->objectByAnchor(*in);
- delete in;
- if (!out.error().error()) {
- HW_API_Object *object = new HW_API_Object(out.object());
- rv = php_hwapi_object_new(object, le_hwapi_objectp);
- } else {
- HW_API_Error *err = new HW_API_Error(out.error());
- rv = php_hwapi_object_new(err, le_hwapi_errorp);
- }
- SEPARATE_ZVAL(&rv);
- *return_value = *rv;
- FREE_ZVAL(rv);
-
- printf("hwapi_objectbyanchor\n");
-}
-/* }}} */
-
-/* {{{ proto object hwapi_dstofsrcanchor(array parameters)
- */
-PHP_FUNCTION(hwapi_dstofsrcanchor) {
- pval **arg1, *id, *rv;
- HW_API_dstOfSrcAnchor_In *in;
- HW_API_dstOfSrcAnchor_Out out;
- HW_API_HGCSP *db;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg1) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_array_ex(arg1);
-
- id = getThis();
- db = (HW_API_HGCSP *) php_hwapi_get_object(id, le_hwapip);
-
- if(!db) {
- RETURN_FALSE;
- }
-
- in = make_HW_API_dstOfSrcAnchor_In(*arg1);
-
- out = db->dstOfSrcAnchor(*in);
- delete in;
- if (!out.error().error()) {
- HW_API_Object *object = new HW_API_Object(out.object());
- rv = php_hwapi_object_new(object, le_hwapi_objectp);
- } else {
- HW_API_Error *err = new HW_API_Error(out.error());
- rv = php_hwapi_object_new(err, le_hwapi_errorp);
- }
- SEPARATE_ZVAL(&rv);
- *return_value = *rv;
- FREE_ZVAL(rv);
-
- printf("hwapi_dstofsrcanchor\n");
-}
-/* }}} */
-
-/* {{{ proto array hwapi_srcsofdst(array parameters)
- */
-PHP_FUNCTION(hwapi_srcsofdst) {
- pval **arg1, *id, *rv;
- HW_API_ObjectArray objarr;
- HW_API_srcsOfDst_In *in;
- HW_API_srcsOfDst_Out out;
- HW_API_HGCSP *db;
- int i;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg1) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_array_ex(arg1);
-
- id = getThis();
- db = (HW_API_HGCSP *) php_hwapi_get_object(id, le_hwapip);
-
- if(!db) {
- RETURN_FALSE;
- }
-
- in = make_HW_API_srcsOfDst_In(*arg1);
-
- out = db->srcsOfDst(*in);
- delete in;
- if (out.error().error()) {
- HW_API_Error *err = new HW_API_Error(out.error());
- rv = php_hwapi_object_new(err, le_hwapi_errorp);
- SEPARATE_ZVAL(&rv);
- *return_value = *rv;
- FREE_ZVAL(rv);
- return;
- } else {
- objarr = (HW_API_ObjectArray) out.objects();
- }
-
- objectArray2indexArray(&return_value, &objarr);
-}
-/* }}} */
-
-/* {{{ proto object hwapi_checkin(array parameters)
- Checking in a document */
-PHP_FUNCTION(hwapi_checkin) {
- pval **arg1, *id, *rv;
- HW_API_ObjectArray objarr;
- HW_API_checkIn_In *in;
- HW_API_checkIn_Out out;
- HW_API_HGCSP *db;
- int i;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg1) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_array_ex(arg1);
-
- id = getThis();
- db = (HW_API_HGCSP *) php_hwapi_get_object(id, le_hwapip);
-
- if(!db) {
- RETURN_FALSE;
- }
-
- in = make_HW_API_checkIn_In(*arg1);
-
- out = db->checkIn(*in);
- delete in;
- if (out.error().error()) {
- HW_API_Error *err = new HW_API_Error(out.error());
- rv = php_hwapi_object_new(err, le_hwapi_errorp);
- SEPARATE_ZVAL(&rv);
- *return_value = *rv;
- FREE_ZVAL(rv);
- return;
- } else {
- RETURN_TRUE;
- }
-
- printf("hwapi_checkin\n");
-}
-/* }}} */
-
-/* {{{ proto object hwapi_checkout(array parameters)
- Checking out a document */
-PHP_FUNCTION(hwapi_checkout) {
- pval **arg1, *id, *rv;
- HW_API_ObjectArray objarr;
- HW_API_checkOut_In *in;
- HW_API_checkOut_Out out;
- HW_API_HGCSP *db;
- int i;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg1) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_array_ex(arg1);
-
- id = getThis();
- db = (HW_API_HGCSP *) php_hwapi_get_object(id, le_hwapip);
-
- if(!db) {
- RETURN_FALSE;
- }
-
- in = make_HW_API_checkOut_In(*arg1);
-
- out = db->checkOut(*in);
- delete in;
- if (out.error().error()) {
- HW_API_Error *err = new HW_API_Error(out.error());
- rv = php_hwapi_object_new(err, le_hwapi_errorp);
- SEPARATE_ZVAL(&rv);
- *return_value = *rv;
- FREE_ZVAL(rv);
- return;
- } else {
- RETURN_TRUE;
- }
-
- printf("hwapi_checkout\n");
-}
-/* }}} */
-
-/* {{{ proto object hwapi_setcommittedversion(array parameters)
- setcommittedversion */
-PHP_FUNCTION(hwapi_setcommittedversion) {
- pval **arg1, *id, *rv;
- HW_API_ObjectArray objarr;
- HW_API_setCommittedVersion_In *in;
- HW_API_setCommittedVersion_Out out;
- HW_API_HGCSP *db;
- int i;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg1) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_array_ex(arg1);
-
- id = getThis();
- db = (HW_API_HGCSP *) php_hwapi_get_object(id, le_hwapip);
-
- if(!db) {
- RETURN_FALSE;
- }
-
- in = make_HW_API_setCommittedVersion_In(*arg1);
-
- out = db->setCommittedVersion(*in);
- delete in;
- if (!out.error().error()) {
- HW_API_Object *object = new HW_API_Object(out.object());
- rv = php_hwapi_object_new(object, le_hwapi_objectp);
- } else {
- HW_API_Error *err = new HW_API_Error(out.error());
- rv = php_hwapi_object_new(err, le_hwapi_errorp);
- }
- SEPARATE_ZVAL(&rv);
- *return_value = *rv;
- FREE_ZVAL(rv);
-
- printf("hwapi_setcommittedversion\n");
-}
-/* }}} */
-
-/* {{{ proto object hwapi_revert(array parameters)
- Reverting to a former document */
-PHP_FUNCTION(hwapi_revert) {
- pval **arg1, *id, *rv;
- HW_API_ObjectArray objarr;
- HW_API_revert_In *in;
- HW_API_revert_Out out;
- HW_API_HGCSP *db;
- int i;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg1) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_array_ex(arg1);
-
- id = getThis();
- db = (HW_API_HGCSP *) php_hwapi_get_object(id, le_hwapip);
-
- if(!db) {
- RETURN_FALSE;
- }
-
- in = make_HW_API_revert_In(*arg1);
-
- out = db->revert(*in);
- delete in;
- if (out.error().error()) {
- HW_API_Error *err = new HW_API_Error(out.error());
- rv = php_hwapi_object_new(err, le_hwapi_errorp);
- SEPARATE_ZVAL(&rv);
- *return_value = *rv;
- FREE_ZVAL(rv);
- return;
- } else {
- RETURN_TRUE;
- }
-
- printf("hwapi_revert\n");
-}
-/* }}} */
-
-/* {{{ proto array hwapi_history(array parameters)
- history */
-PHP_FUNCTION(hwapi_history) {
- pval **arg1, *id, *rv;
- HW_API_ObjectArray objarr;
- HW_API_history_In *in;
- HW_API_history_Out out;
- HW_API_HGCSP *db;
- int i;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg1) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_array_ex(arg1);
-
- id = getThis();
- db = (HW_API_HGCSP *) php_hwapi_get_object(id, le_hwapip);
-
- if(!db) {
- RETURN_FALSE;
- }
-
- in = make_HW_API_history(*arg1);
-
- out = db->history(*in);
- delete in;
- if (out.error().error()) {
- HW_API_Error *err = new HW_API_Error(out.error());
- rv = php_hwapi_object_new((HW_API_Error *) err, le_hwapi_errorp);
- SEPARATE_ZVAL(&rv);
- *return_value = *rv;
- FREE_ZVAL(rv);
- return;
- } else {
- objarr = (HW_API_ObjectArray) out.objects();
- }
-
- objectArray2indexArray(&return_value, &objarr);
-}
-/* }}} */
-
-/* {{{ proto object hwapi_removeversion(array parameters)
- Reverting to a former document */
-PHP_FUNCTION(hwapi_removeversion) {
- pval **arg1, *id, *rv;
- HW_API_ObjectArray objarr;
- HW_API_removeVersion_In *in;
- HW_API_removeVersion_Out out;
- HW_API_HGCSP *db;
- int i;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg1) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_array_ex(arg1);
-
- id = getThis();
- db = (HW_API_HGCSP *) php_hwapi_get_object(id, le_hwapip);
-
- if(!db) {
- RETURN_FALSE;
- }
-
- in = make_HW_API_removeVersion_In(*arg1);
-
- out = db->removeVersion(*in);
- delete in;
- if (out.error().error()) {
- HW_API_Error *err = new HW_API_Error(out.error());
- rv = php_hwapi_object_new(err, le_hwapi_errorp);
- SEPARATE_ZVAL(&rv);
- *return_value = *rv;
- FREE_ZVAL(rv);
- return;
- } else {
- RETURN_TRUE;
- }
-
- printf("hwapi_removeversion\n");
-}
-/* }}} */
-
-/* {{{ proto object hwapi_freeversion(array parameters)
- freeversion */
-PHP_FUNCTION(hwapi_freeversion) {
- pval **arg1, *id, *rv;
- HW_API_ObjectArray objarr;
- HW_API_freeVersion_In *in;
- HW_API_freeVersion_Out out;
- HW_API_HGCSP *db;
- int i;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg1) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_array_ex(arg1);
-
- id = getThis();
- db = (HW_API_HGCSP *) php_hwapi_get_object(id, le_hwapip);
-
- if(!db) {
- RETURN_FALSE;
- }
-
- in = make_HW_API_freeVersion_In(*arg1);
-
- out = db->freeVersion(*in);
- delete in;
- if (!out.error().error()) {
- HW_API_Object *object = new HW_API_Object(out.object());
- rv = php_hwapi_object_new(object, le_hwapi_objectp);
- } else {
- HW_API_Error *err = new HW_API_Error(out.error());
- rv = php_hwapi_object_new(err, le_hwapi_errorp);
- }
- SEPARATE_ZVAL(&rv);
- *return_value = *rv;
- FREE_ZVAL(rv);
-
- printf("hwapi_freeversion\n");
-}
-/* }}} */
-
-/* {{{ proto array hwapi_configurationhistory(array parameters)
- Returns configuration history of object */
-PHP_FUNCTION(hwapi_configurationhistory) {
- zval **arg1, *id, *rv;
- HW_API_ObjectArray objarr;
- HW_API_configurationHistory_In *in;
- HW_API_configurationHistory_Out out;
- HW_API_HGCSP *db;
- int i;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg1) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_array_ex(arg1);
-
- id = getThis();
- db = (HW_API_HGCSP *) php_hwapi_get_object(id, le_hwapip);
-
- if(!db) {
- RETURN_FALSE;
- }
-
- in = make_HW_API_configurationHistory_In(*arg1);
-
- out = db->configurationHistory(*in);
- delete in;
- if (out.error().error()) {
- HW_API_Error *err = new HW_API_Error(out.error());
- rv = php_hwapi_object_new((HW_API_Error *) err, le_hwapi_errorp);
- SEPARATE_ZVAL(&rv);
- *return_value = *rv;
- FREE_ZVAL(rv);
- return;
- } else {
- objarr = (HW_API_ObjectArray) out.objects();
- }
-
- objectArray2indexArray(&return_value, &objarr);
-}
-/* }}} */
-
-/* {{{ proto object hwapi_saveconfiguration(array parameters)
- Save configuration for an object */
-PHP_FUNCTION(hwapi_saveconfiguration) {
- pval **arg1, *id, *rv;
- HW_API_ObjectArray objarr;
- HW_API_saveConfiguration_In *in;
- HW_API_saveConfiguration_Out out;
- HW_API_HGCSP *db;
- int i;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg1) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_array_ex(arg1);
-
- id = getThis();
- db = (HW_API_HGCSP *) php_hwapi_get_object(id, le_hwapip);
-
- if(!db) {
- RETURN_FALSE;
- }
-
- in = make_HW_API_saveConfiguration_In(*arg1);
-
- out = db->saveConfiguration(*in);
- delete in;
- if (!out.error().error()) {
- HW_API_Object *object = new HW_API_Object(out.object());
- rv = php_hwapi_object_new(object, le_hwapi_objectp);
- } else {
- HW_API_Error *err = new HW_API_Error(out.error());
- rv = php_hwapi_object_new(err, le_hwapi_errorp);
- }
- SEPARATE_ZVAL(&rv);
- *return_value = *rv;
- FREE_ZVAL(rv);
-
- printf("hwapi_saveconfiguration\n");
-}
-/* }}} */
-
-/* {{{ proto object hwapi_restoreconfiguration(array parameters)
- Restore configuration for an object */
-PHP_FUNCTION(hwapi_restoreconfiguration) {
- pval **arg1, *id, *rv;
- HW_API_ObjectArray objarr;
- HW_API_restoreConfiguration_In *in;
- HW_API_restoreConfiguration_Out out;
- HW_API_HGCSP *db;
- int i;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg1) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_array_ex(arg1);
-
- id = getThis();
- db = (HW_API_HGCSP *) php_hwapi_get_object(id, le_hwapip);
-
- if(!db) {
- RETURN_FALSE;
- }
-
- in = make_HW_API_restoreConfiguration_In(*arg1);
-
- out = db->restoreConfiguration(*in);
- delete in;
- if (!out.error().error()) {
- RETURN_STRING((char *) (out.progressIdentifier().string()), 1);
- } else {
- HW_API_Error *err = new HW_API_Error(out.error());
- rv = php_hwapi_object_new(err, le_hwapi_errorp);
- }
- SEPARATE_ZVAL(&rv);
- *return_value = *rv;
- FREE_ZVAL(rv);
-
- printf("hwapi_restoreconfiguration\n");
-}
-/* }}} */
-
-/* {{{ proto object hwapi_mergeconfiguration(array parameters)
- Merge configuration for an object */
-PHP_FUNCTION(hwapi_mergeconfiguration) {
- pval **arg1, *id, *rv;
- HW_API_ObjectArray objarr;
- HW_API_mergeConfiguration_In *in;
- HW_API_mergeConfiguration_Out out;
- HW_API_HGCSP *db;
- int i;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg1) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_array_ex(arg1);
-
- id = getThis();
- db = (HW_API_HGCSP *) php_hwapi_get_object(id, le_hwapip);
-
- if(!db) {
- RETURN_FALSE;
- }
-
- in = make_HW_API_mergeConfiguration_In(*arg1);
-
- out = db->mergeConfiguration(*in);
- delete in;
- if (!out.error().error()) {
- RETURN_STRING((char *) (out.progressIdentifier().string()), 1);
- } else {
- HW_API_Error *err = new HW_API_Error(out.error());
- rv = php_hwapi_object_new(err, le_hwapi_errorp);
- }
- SEPARATE_ZVAL(&rv);
- *return_value = *rv;
- FREE_ZVAL(rv);
-
- printf("hwapi_mergeconfiguration\n");
-}
-/* }}} */
-
-/* {{{ proto object hwapi_removeconfiguration(array parameters)
- Removes configuration */
-PHP_FUNCTION(hwapi_removeconfiguration) {
- pval **arg1, *id, *rv;
- HW_API_ObjectArray objarr;
- HW_API_removeConfiguration_In *in;
- HW_API_removeConfiguration_Out out;
- HW_API_HGCSP *db;
- int i;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg1) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_array_ex(arg1);
-
- id = getThis();
- db = (HW_API_HGCSP *) php_hwapi_get_object(id, le_hwapip);
-
- if(!db) {
- RETURN_FALSE;
- }
-
- in = make_HW_API_removeConfiguration_In(*arg1);
-
- out = db->removeConfiguration(*in);
- delete in;
- if (out.error().error()) {
- HW_API_Error *err = new HW_API_Error(out.error());
- rv = php_hwapi_object_new(err, le_hwapi_errorp);
- SEPARATE_ZVAL(&rv);
- *return_value = *rv;
- FREE_ZVAL(rv);
- return;
- } else {
- RETURN_TRUE;
- }
-
- printf("hwapi_removeconfiguration\n");
-}
-/* }}} */
-
-/* {{{ proto object hwapi_user(array parameters)
- Returns information about user */
-PHP_FUNCTION(hwapi_user) {
- pval **arg1, *id, *rv;
- HW_API_user_In *in;
- HW_API_user_Out out;
- HW_API_HGCSP *db;
- int argc;
-
- id = getThis();
- db = (HW_API_HGCSP *) php_hwapi_get_object(id, le_hwapip);
-
- if(!db) {
- RETURN_FALSE;
- }
-
- argc = ZEND_NUM_ARGS();
- switch(argc) {
- case 0:
- out = db->user(HW_API_user_In());
- break;
- case 1:
- if (zend_get_parameters_ex(1, &arg1) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_array_ex(arg1);
- in = make_HW_API_user_In(*arg1);
- if(NULL == in)
- out = db->user(HW_API_user_In());
- else
- out = db->user(*in);
- delete in;
- break;
- default:
- WRONG_PARAM_COUNT;
- }
-
- if (!out.error().error()) {
- HW_API_Object *object = new HW_API_Object(out.object());
- rv = php_hwapi_object_new(object, le_hwapi_objectp);
- } else {
- HW_API_Error *err = new HW_API_Error(out.error());
- rv = php_hwapi_object_new(err, le_hwapi_errorp);
- }
- SEPARATE_ZVAL(&rv);
- *return_value = *rv;
- FREE_ZVAL(rv);
-
-}
-/* }}} */
-
-/* {{{ proto array hwapi_userlist(array parameters)
- Returns list of login in users */
-PHP_FUNCTION(hwapi_userlist) {
- zval **arg1, *id, *rv;
- HW_API_userlist_In *in;
- HW_API_userlist_Out out;
- HW_API_ObjectArray objarr;
- HW_API_HGCSP *db;
- int i;
- int argc;
-
- id = getThis();
- db = (HW_API_HGCSP *) php_hwapi_get_object(id, le_hwapip);
-
- if(!db) {
- RETURN_FALSE;
- }
-
- argc = ZEND_NUM_ARGS();
- switch(argc) {
- case 0:
- out = db->userlist(HW_API_userlist_In());
- break;
- case 1:
- if (zend_get_parameters_ex(1, &arg1) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_array_ex(arg1);
- in = make_HW_API_userlist_In(*arg1);
- if(NULL == in)
- out = db->userlist(HW_API_userlist_In());
- else
- out = db->userlist(*in);
- delete in;
- break;
- default:
- WRONG_PARAM_COUNT;
- }
-
- if (out.error().error()) {
- HW_API_Error *err = new HW_API_Error(out.error());
- rv = php_hwapi_object_new((HW_API_Error *) err, le_hwapi_errorp);
- SEPARATE_ZVAL(&rv);
- *return_value = *rv;
- FREE_ZVAL(rv);
- return;
- } else {
- objarr = (HW_API_ObjectArray) out.objects();
- }
-
- objectArray2indexArray(&return_value, &objarr);
-}
-/* }}} */
-
-/* {{{ proto object hwapi_hwstat(array parameters)
- Returns information about hgserver */
-PHP_FUNCTION(hwapi_hwstat) {
- pval **arg1, *id, *rv;
- HW_API_hwStat_In *in;
- HW_API_hwStat_Out out;
- HW_API_HGCSP *db;
- int argc;
-
- id = getThis();
- db = (HW_API_HGCSP *) php_hwapi_get_object(id, le_hwapip);
-
- if(!db) {
- RETURN_FALSE;
- }
-
- argc = ZEND_NUM_ARGS();
- switch(argc) {
- case 0:
- out = db->hwStat(HW_API_hwStat_In());
- break;
- case 1:
- if (zend_get_parameters_ex(1, &arg1) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_array_ex(arg1);
- in = make_HW_API_hwStat_In(*arg1);
- if(NULL == in)
- out = db->hwStat(HW_API_hwStat_In());
- else
- out = db->hwStat(*in);
- delete in;
- break;
- default:
- WRONG_PARAM_COUNT;
- }
-
- if (!out.error().error()) {
- HW_API_Object *object = new HW_API_Object(out.object());
- rv = php_hwapi_object_new(object, le_hwapi_objectp);
- } else {
- HW_API_Error *err = new HW_API_Error(out.error());
- rv = php_hwapi_object_new(err, le_hwapi_errorp);
- }
- SEPARATE_ZVAL(&rv);
- *return_value = *rv;
- FREE_ZVAL(rv);
-}
-/* }}} */
-
-/* {{{ proto object hwapi_dcstat(array parameters)
- Returns information about hgserver */
-PHP_FUNCTION(hwapi_dcstat) {
- pval **arg1, *id, *rv;
- HW_API_dcStat_In *in;
- HW_API_dcStat_Out out;
- HW_API_HGCSP *db;
- int argc;
-
- id = getThis();
- db = (HW_API_HGCSP *) php_hwapi_get_object(id, le_hwapip);
-
- if(!db) {
- RETURN_FALSE;
- }
-
- argc = ZEND_NUM_ARGS();
- switch(argc) {
- case 0:
- out = db->dcStat(HW_API_dcStat_In());
- break;
- case 1:
- if (zend_get_parameters_ex(1, &arg1) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_array_ex(arg1);
- in = make_HW_API_dcStat_In(*arg1);
- if(NULL == in)
- out = db->dcStat(HW_API_dcStat_In());
- else
- out = db->dcStat(*in);
- delete in;
- break;
- default:
- WRONG_PARAM_COUNT;
- }
-
- if (!out.error().error()) {
- HW_API_Object *object = new HW_API_Object(out.object());
- rv = php_hwapi_object_new(object, le_hwapi_objectp);
- } else {
- HW_API_Error *err = new HW_API_Error(out.error());
- rv = php_hwapi_object_new(err, le_hwapi_errorp);
- }
- SEPARATE_ZVAL(&rv);
- *return_value = *rv;
- FREE_ZVAL(rv);
-}
-/* }}} */
-
-/* {{{ proto object hwapi_dbstat(array parameters)
- Returns information about hgserver */
-PHP_FUNCTION(hwapi_dbstat) {
- pval **arg1, *id, *rv;
- HW_API_dbStat_In *in;
- HW_API_dbStat_Out out;
- HW_API_HGCSP *db;
- int argc;
-
- id = getThis();
- db = (HW_API_HGCSP *) php_hwapi_get_object(id, le_hwapip);
-
- if(!db) {
- RETURN_FALSE;
- }
-
- argc = ZEND_NUM_ARGS();
- switch(argc) {
- case 0:
- out = db->dbStat(HW_API_dbStat_In());
- break;
- case 1:
- if (zend_get_parameters_ex(1, &arg1) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_array_ex(arg1);
- in = make_HW_API_dbStat_In(*arg1);
- if(NULL == in)
- out = db->dbStat(HW_API_dbStat_In());
- else
- out = db->dbStat(*in);
- delete in;
- break;
- default:
- WRONG_PARAM_COUNT;
- }
-
- if (!out.error().error()) {
- HW_API_Object *object = new HW_API_Object(out.object());
- rv = php_hwapi_object_new(object, le_hwapi_objectp);
- } else {
- HW_API_Error *err = new HW_API_Error(out.error());
- rv = php_hwapi_object_new(err, le_hwapi_errorp);
- }
- SEPARATE_ZVAL(&rv);
- *return_value = *rv;
- FREE_ZVAL(rv);
-}
-/* }}} */
-
-/* {{{ proto object hwapi_ftstat(array parameters)
- Returns information about ftserver */
-PHP_FUNCTION(hwapi_ftstat) {
- pval **arg1, *id, *rv;
- HW_API_ftStat_In *in;
- HW_API_ftStat_Out out;
- HW_API_HGCSP *db;
- int argc;
-
- id = getThis();
- db = (HW_API_HGCSP *) php_hwapi_get_object(id, le_hwapip);
-
- if(!db) {
- RETURN_FALSE;
- }
-
- argc = ZEND_NUM_ARGS();
- switch(argc) {
- case 0:
- out = db->ftStat(HW_API_ftStat_In());
- break;
- case 1:
- if (zend_get_parameters_ex(1, &arg1) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_array_ex(arg1);
- in = make_HW_API_ftStat_In(*arg1);
- if(NULL == in)
- out = db->ftStat(HW_API_ftStat_In());
- else
- out = db->ftStat(*in);
- delete in;
- break;
- default:
- WRONG_PARAM_COUNT;
- }
-
- if (!out.error().error()) {
- HW_API_Object *object = new HW_API_Object(out.object());
- rv = php_hwapi_object_new(object, le_hwapi_objectp);
- } else {
- HW_API_Error *err = new HW_API_Error(out.error());
- rv = php_hwapi_object_new(err, le_hwapi_errorp);
- }
- SEPARATE_ZVAL(&rv);
- *return_value = *rv;
- FREE_ZVAL(rv);
-}
-/* }}} */
-
-/* {{{ proto array hwapi_info(array parameters)
- Returns information about server */
-PHP_FUNCTION(hwapi_info) {
- pval **arg1, *id, *rv, *rv1, *rv2, *rv3;
- HW_API_info_In *in;
- HW_API_info_Out out;
- HW_API_HGCSP *db;
- int argc;
-
- id = getThis();
- db = (HW_API_HGCSP *) php_hwapi_get_object(id, le_hwapip);
-
- if(!db) {
- RETURN_FALSE;
- }
-
- argc = ZEND_NUM_ARGS();
- switch(argc) {
- case 0:
- out = db->info(HW_API_info_In());
- break;
- case 1:
- if (zend_get_parameters_ex(1, &arg1) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_array_ex(arg1);
- in = make_HW_API_info_In(*arg1);
- if(NULL == in)
- out = db->info(HW_API_info_In());
- else
- out = db->info(*in);
- delete in;
- break;
- default:
- WRONG_PARAM_COUNT;
- }
-
- if (!out.error().error()) {
- HW_API_StringArray languages, customidx, systemidx;
- array_init(return_value);
- HW_API_Object *object = new HW_API_Object(out.typeInfo());
- rv = php_hwapi_object_new(object, le_hwapi_objectp);
- zend_hash_add(return_value->value.ht, "typeInfo", 9, &rv, sizeof(zval *), NULL);
- languages = out.languages();
- MAKE_STD_ZVAL(rv1);
- if(0 == stringArray2indexArray(&rv1, &languages))
- RETURN_FALSE;
- zend_hash_add(return_value->value.ht, "languages", 10, &rv1, sizeof(zval *), NULL);
- customidx = out.customIdx();
- MAKE_STD_ZVAL(rv2);
- if(0 == stringArray2indexArray(&rv2, &customidx))
- RETURN_FALSE;
- zend_hash_add(return_value->value.ht, "customIdx", 10, &rv2, sizeof(zval *), NULL);
- systemidx = out.systemIdx();
- MAKE_STD_ZVAL(rv3);
- if(0 == stringArray2indexArray(&rv3, &systemidx))
- RETURN_FALSE;
- zend_hash_add(return_value->value.ht, "systemIdx", 10, &rv3, sizeof(zval *), NULL);
- } else {
- HW_API_Error *err = new HW_API_Error(out.error());
- rv = php_hwapi_object_new(err, le_hwapi_errorp);
- SEPARATE_ZVAL(&rv);
- *return_value = *rv;
- FREE_ZVAL(rv);
- }
-}
-/* }}} */
-
-/* {{{ proto object hwapi_object_new()
- Creates new HW_API_Object */
-PHP_FUNCTION(hwapi_object_new) {
- pval **arg1, **arg2, *rv;
- HW_API_Object *obj;
- const HW_API_Object *srcobj;
- int ret;
-
- switch(ZEND_NUM_ARGS()) {
- case 0:
- obj = new HW_API_Object();
- break;
- case 1:
- if (zend_get_parameters_ex(1, &arg1) == FAILURE)
- WRONG_PARAM_COUNT;
- srcobj = (const HW_API_Object *) php_hwapi_get_object(*arg1, le_hwapi_objectp);
- obj = new HW_API_Object(*srcobj);
- break;
- default:
- WRONG_PARAM_COUNT;
- }
-
- rv = php_hwapi_object_new(obj, le_hwapi_objectp);
-//zend_print_pval_r(rv, 0);
- SEPARATE_ZVAL(&rv);
- *return_value = *rv;
- FREE_ZVAL(rv);
-}
-/* }}} */
-
-/* {{{ proto int hwapi_object_count()
- Counts number of attributes of an HW_API_Object */
-PHP_FUNCTION(hwapi_object_count) {
- zval *id, **tmp;
- HW_API_Object *objp;
- int value;
-
- id = getThis();
- objp = (HW_API_Object *) php_hwapi_get_object(id, le_hwapi_objectp);
-
- if(!objp) {
- RETURN_FALSE;
- }
- value = objp->count();
-
- RETURN_LONG(value);
-}
-/* }}} */
-
-/* {{{ proto string hwapi_object_title(string language)
- Returns title of HW_API_Object for given language */
-PHP_FUNCTION(hwapi_object_title) {
- zval **arg1, *id, **tmp;
- HW_API_Object *objp;
- char *value;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg1) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- id = getThis();
- objp = (HW_API_Object *) php_hwapi_get_object(id, le_hwapi_objectp);
-
- convert_to_string_ex(arg1);
-
- // Warning: It is import to duplicate the string before RETURN.
- // If that is not done the HW_API_String destructor will be called
- // before RETURN_STRING can duplicate the string.
- value = (char *) estrdup(objp->title(Z_STRVAL_PP(arg1)).string());
-
- RETURN_STRING(value, 0);
-}
-/* }}} */
-
-/* {{{ proto bool hwapi_object_attreditable(int attr, string username, bool is_system)
- Hyperwave object_attreditable function */
-PHP_FUNCTION(hwapi_object_attreditable) {
- zval *id, **arg1, **arg2, **arg3;
- HW_API_Object *objp;
- HW_API_Attribute *attrp;
- bool value;
-
- if (ZEND_NUM_ARGS() != 3 || zend_get_parameters_ex(3, &arg1, &arg2, &arg3) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- id = getThis();
- objp = (HW_API_Object *) php_hwapi_get_object(id, le_hwapi_objectp);
- convert_to_string_ex(arg2);
- convert_to_long_ex(arg3);
- switch(Z_TYPE_PP(arg1)) {
- case IS_STRING:
- convert_to_string_ex(arg1);
- value = objp->attributeEditable((char *) Z_STRVAL_PP(arg1), (char *) Z_STRVAL_PP(arg2), (bool) Z_LVAL_PP(arg3));
- break;
- case IS_OBJECT:
- attrp = (HW_API_Attribute *) php_hwapi_get_object(*arg1, le_hwapi_attributep);
- value = objp->attributeEditable(*attrp, (char *) Z_STRVAL_PP(arg2), (bool) Z_LVAL_PP(arg3));
- break;
- }
- if(value) {
- RETURN_TRUE;
- } else {
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-/* {{{ proto bool hwapi_object_assign(int object)
- Hyperwave object_assign function */
-PHP_FUNCTION(hwapi_object_assign) {
- zval *id, **arg1, **arg2;
-
- printf("hwapi_object_assign\n");
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto object hwapi_object_attribute(int index, object &attribute)
- Hyperwave object_attribute function */
-PHP_FUNCTION(hwapi_object_attribute) {
- zval **arg1, *id, *rv;
- HW_API_Attribute *attrp, attr;
- HW_API_Object *objp;
- int error;
-
- if ((ZEND_NUM_ARGS() != 1) || zend_get_parameters_ex(1, &arg1) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- id = getThis();
- objp = (HW_API_Object *) php_hwapi_get_object(id, le_hwapi_objectp);
- if(!objp) {
- RETURN_FALSE;
- }
-
- switch(Z_TYPE_PP(arg1)) {
- case IS_LONG:
- error = objp->attribute(Z_LVAL_PP(arg1), attr);
- break;
- case IS_STRING:
- error = objp->attribute(HW_API_String(Z_STRVAL_PP(arg1)), attr);
- break;
- default:
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "HW_API_Object::attribute() needs string or long as parameter");
- RETURN_FALSE;
- }
-
- if(error) {
- attrp = new HW_API_Attribute(attr);
- rv = php_hwapi_object_new(attrp, le_hwapi_attributep);
- SEPARATE_ZVAL(&rv);
- *return_value = *rv;
- FREE_ZVAL(rv);
- return;
- } else {
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-/* {{{ proto bool hwapi_object_insert(object attr)
- Inserts new HW_API_Attribute into HW_API_Object */
-PHP_FUNCTION(hwapi_object_insert) {
- zval **arg1, *id;
- HW_API_Object *objp;
- HW_API_Attribute *attrp;
- char *value;
-
- if (ZEND_NUM_ARGS() != 1 || (zend_get_parameters_ex(1, &arg1) == FAILURE)) {
- WRONG_PARAM_COUNT;
- }
- id = getThis();
- objp = (HW_API_Object *) php_hwapi_get_object(id, le_hwapi_objectp);
- if(!objp) {
- RETURN_FALSE;
- }
- attrp = (HW_API_Attribute *) php_hwapi_get_object(*arg1, le_hwapi_attributep);
-
- objp->insert(*attrp);
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto bool hwapi_object_remove(string name)
- Removes HW_API_Attribute with given name from HW_API_Object */
-PHP_FUNCTION(hwapi_object_remove) {
- zval **arg1, *id, **tmp;
- HW_API_Object *objp;
- int error;
-
- if ((ZEND_NUM_ARGS() != 1) || zend_get_parameters_ex(1, &arg1) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex(arg1);
- id = getThis();
- objp = (HW_API_Object *) php_hwapi_get_object(id, le_hwapi_objectp);
- if(!objp) {
- RETURN_FALSE;
- }
-
- error = objp->remove(Z_STRVAL_PP(arg1));
-
- if(!error) {
- RETURN_TRUE;
- } else {
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-/* {{{ proto string hwapi_object_value(string name)
- Returns attribute value of given attribute */
-PHP_FUNCTION(hwapi_object_value) {
- zval **arg1, *id;
- HW_API_Object *objp;
- HW_API_Attribute *attrp;
- HW_API_String value;
- int error;
-
- if ((ZEND_NUM_ARGS() != 1) || zend_get_parameters_ex(1, &arg1) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex(arg1);
- id = getThis();
- objp = (HW_API_Object *) php_hwapi_get_object(id, le_hwapi_objectp);
- if(!objp) {
- RETURN_FALSE;
- }
-
- error = objp->value((HW_API_String) Z_STRVAL_PP(arg1), value);
-
- printf("hwapi_object_value\n");
- if(error) {
- char *str = (char *) estrdup(value.string());
- RETURN_STRING(str, 0);
- } else {
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-/* {{{ proto object hwapi_attribute_new([string name][, string value])
- Creates new HW_API_Attribute */
-PHP_FUNCTION(hwapi_attribute_new) {
- zval *rv, **arg1, **arg2;
- HW_API_Attribute *attrp;
- int ret;
-
- /* FIXME: I'm not sure if the constructor of HW_API_Attribute takes normal C-Strings
- * or if it has to be HW_API_String. Currently C-Strings are passed.
- */
- switch(ZEND_NUM_ARGS()) {
- case 0:
- break;
- attrp = new HW_API_Attribute();
- case 1:
- if (zend_get_parameters_ex(1, &arg1) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex(arg1);
- attrp = new HW_API_Attribute(Z_STRVAL_PP(arg1));
- break;
- case 2: //* FIXME: Second Parameter can be string or array of strings
- if (zend_get_parameters_ex(2, &arg1, &arg2) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex(arg1);
- switch((*arg2)->type) {
- case IS_ARRAY: {
- HashTable *lht = (*arg2)->value.ht;
- int i, count;
- HW_API_StringArray values;
- if(NULL == lht)
- RETURN_FALSE;
-
- if(0 == (count = zend_hash_num_elements(lht))) {
- attrp = new HW_API_Attribute(Z_STRVAL_PP(arg1));
- break;
- }
- zend_hash_internal_pointer_reset(lht);
- for(i=0; i<count; i++) {
- zval *keydata, **keydataptr;
- zend_hash_get_current_data(lht, (void **) &keydataptr);
- /* FIXME: just hope this doesn't do any harm. Maybe convert_to_string
- * changes the type of the array element */
- convert_to_string_ex(keydataptr);
- keydata = *keydataptr;
- values.insert(keydata->value.str.val);
- zend_hash_move_forward(lht);
- }
- attrp = new HW_API_Attribute(Z_STRVAL_PP(arg1), values);
- break;
- }
- default:
- convert_to_string_ex(arg2);
- attrp = new HW_API_Attribute(Z_STRVAL_PP(arg1), Z_STRVAL_PP(arg2));
- }
- break;
- default:
- WRONG_PARAM_COUNT;
- }
-
- rv = php_hwapi_object_new(attrp, le_hwapi_attributep);
- SEPARATE_ZVAL(&rv);
- *return_value = *rv;
- FREE_ZVAL(rv);
-
- printf("hwapi_attribute_new\n");
-}
-/* }}} */
-
-/* {{{ proto string hwapi_attribute_key(void)
- Returns key of an hwapi_attribute */
-PHP_FUNCTION(hwapi_attribute_key) {
- zval *id;
- HW_API_Attribute *attrp;
- char *value;
-
- id = getThis();
- attrp = (HW_API_Attribute *) php_hwapi_get_object(id, le_hwapi_attributep);
-
- // Warning: It is import to duplicate the string before RETURN.
- // If that is not done the HW_API_String destructor will be called
- // before RETURN_STRING can duplicate the string.
- value = (char *) estrdup((attrp->key()).string());
-
- RETURN_STRING(value, 0);
-}
-/* }}} */
-
-/* {{{ proto string hwapi_attribute_value(void)
- Returns value of hw_api_attribute */
-PHP_FUNCTION(hwapi_attribute_value) {
- zval *id;
- HW_API_Attribute *attrp;
- char *value;
-
- id = getThis();
- attrp = (HW_API_Attribute *) php_hwapi_get_object(id, le_hwapi_attributep);
-
- // Warning: It is import to duplicate the string before RETURN.
- // If that is not done the HW_API_String destructor will be called
- // before RETURN_STRING can duplicate the string.
- value = (char *) estrdup(attrp->value().string());
-
- RETURN_STRING(value, 0);
-}
-/* }}} */
-
-/* {{{ proto array hwapi_attribute_values(void)
- Returns all values of an attribute as an array */
-PHP_FUNCTION(hwapi_attribute_values) {
- zval *id, **tmp;
- HW_API_Attribute *attrp;
- HW_API_StringArray values;
-
- id = getThis();
- attrp = (HW_API_Attribute *) php_hwapi_get_object(id, le_hwapi_attributep);
-
- values = attrp->values();
- if(0 == stringArray2indexArray(&return_value, &values))
- RETURN_FALSE;
-}
-/* }}} */
-
-/* {{{ proto string hwapi_attribute_langdepvalue(string language)
- Returns value of attribute with givenn language */
-PHP_FUNCTION(hwapi_attribute_langdepvalue) {
- zval **arg1, *id, **tmp;
- HW_API_Attribute *attrp;
- char *value;
-
- if((ZEND_NUM_ARGS() != 1) || (zend_get_parameters_ex(1, &arg1) == FAILURE)) {
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex(arg1);
-
- id = getThis();
- attrp = (HW_API_Attribute *) php_hwapi_get_object(id, le_hwapi_attributep);
-
- value = (char *) attrp->langDepValue((*arg1)->value.str.val).string();
- printf("hwapi_attribute_langdepvalue\n");
- RETURN_STRING(value, 1);
-}
-/* }}} */
-
-/* {{{ proto object hwapi_content_new([string name][, string value])
- Creates new HW_API_Content */
-PHP_FUNCTION(hwapi_content_new) {
- zval *rv, **arg1, **arg2, **arg3;
- HW_API_Content *contp;
- int ret;
-
- switch(ZEND_NUM_ARGS()) {
- case 0:
- contp = new HW_API_Content();
- break;
- case 1:
- if (zend_get_parameters_ex(1, &arg1) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- switch((*arg1)->type) {
- case IS_OBJECT:
- break;
- default:
- convert_to_string_ex(arg1);
- contp = new HW_API_Content(Z_STRVAL_PP(arg1));
- }
- break;
- case 2: //First Parameter is long, second the file name
- if (zend_get_parameters_ex(2, &arg1, &arg2) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long_ex(arg1);
- convert_to_string_ex(arg2);
- contp = new HW_API_Content(HW_API_Content::File, Z_STRVAL_PP(arg2));
- break;
- case 3: //First Parameter is long or string, second and third is string
- if (zend_get_parameters_ex(3, &arg1, &arg2, &arg3) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- switch((*arg1)->type) {
- case IS_LONG:
- convert_to_string_ex(arg2);
- convert_to_string_ex(arg3);
- contp = new HW_API_Content(HW_API_Content::File, Z_STRVAL_PP(arg2), Z_STRVAL_PP(arg3));
- break;
- default:
- convert_to_string_ex(arg1);
- convert_to_string_ex(arg2);
- convert_to_string_ex(arg3);
- contp = new HW_API_Content(Z_STRVAL_PP(arg1), Z_STRVAL_PP(arg2), Z_STRVAL_PP(arg3));
- }
- break;
- default:
- WRONG_PARAM_COUNT;
- }
-
- rv = php_hwapi_object_new(contp, le_hwapi_contentp);
- SEPARATE_ZVAL(&rv);
- *return_value = *rv;
- FREE_ZVAL(rv);
-}
-/* }}} */
-
-/* {{{ proto int hwapi_content_read(string buffer, int length)
- Reads length bytes from content */
-PHP_FUNCTION(hwapi_content_read) {
- zval **arg1, **arg2, *id, **tmp;
- HW_API_Content *contentp;
- char *value;
- int len;
-
- if((ZEND_NUM_ARGS() != 2) || (zend_get_parameters_ex(2, &arg1, &arg2) == FAILURE)) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long_ex(arg2);
-
- id = getThis();
- contentp = (HW_API_Content *) php_hwapi_get_object(id, le_hwapi_contentp);
-
- zval_dtor(*arg1);
- Z_TYPE_PP(arg1) = IS_STRING;
- /* FIXME: Need to finish the new zval */
- value = (char *) emalloc(Z_LVAL_PP(arg2)+1);
-
- Z_STRVAL_PP(arg1) = value;
- len = contentp->read(value, Z_LVAL_PP(arg2));
- value[len] = '\0';
- Z_STRLEN_PP(arg1) = len;
-
- RETURN_LONG(len);
-}
-/* }}} */
-
-/* {{{ proto string hwapi_content_mimetype(void)
- Returns MimeType of document */
-PHP_FUNCTION(hwapi_content_mimetype) {
- zval *id;
- HW_API_Content *contentp;
- HW_API_String hwstr;
-
- id = getThis();
- contentp = (HW_API_Content *) php_hwapi_get_object(id, le_hwapi_contentp);
-
- hwstr = contentp->mimetype();
-
- RETURN_STRING((char *) hwstr.string(), 1);
-}
-/* }}} */
-
-/* {{{ proto int hwapi_error_count()
- Counts number of reasons of an HW_API_Error */
-PHP_FUNCTION(hwapi_error_count) {
- zval *id, **tmp;
- HW_API_Error *objp;
- int value;
-
- id = getThis();
- objp = (HW_API_Error *) php_hwapi_get_object(id, le_hwapi_errorp);
-
- if(!objp) {
- RETURN_FALSE;
- }
- value = objp->count();
-
- RETURN_LONG(value);
-}
-/* }}} */
-
-/* {{{ proto object hwapi_error_reason(int index)
- Returns a reason of an HW_API_Error */
-PHP_FUNCTION(hwapi_error_reason) {
- zval **arg1, *id, **tmp;
- HW_API_Error *objp;
- HW_API_Reason reason;
- bool error;
-
- if((ZEND_NUM_ARGS() != 1) || (zend_get_parameters_ex(1, &arg1) == FAILURE)) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long_ex(arg1);
-
- id = getThis();
- objp = (HW_API_Error *) php_hwapi_get_object(id, le_hwapi_errorp);
-
- if(!objp) {
- RETURN_FALSE;
- }
- if(!objp->error())
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "This is not an error");
-
- error = objp->reason(Z_LVAL_PP(arg1), reason);
- if(error) {
- zval *rv;
- HW_API_Reason *reasonp = new HW_API_Reason(reason);
- rv = php_hwapi_object_new(reasonp, le_hwapi_reasonp);
- SEPARATE_ZVAL(&rv);
- *return_value = *rv;
- FREE_ZVAL(rv);
- return;
- } else {
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-/* {{{ proto int hwapi_reason_type(void)
- Returns the type of HW_API_Reason */
-PHP_FUNCTION(hwapi_reason_type) {
- zval **arg1, *id, **tmp;
- HW_API_Reason *objp;
-
- id = getThis();
- objp = (HW_API_Reason *) php_hwapi_get_object(id, le_hwapi_reasonp);
-
- if(!objp) {
- RETURN_FALSE;
- }
- RETURN_LONG((long) (objp->type()));
-}
-/* }}} */
-
-/* {{{ proto string hwapi_reason_description(string language)
- Returns description of HW_API_Reason */
-PHP_FUNCTION(hwapi_reason_description) {
- zval **arg1, *id, **tmp;
- HW_API_Reason *objp;
- HW_API_String desc;
-
- if((ZEND_NUM_ARGS() != 1) || (zend_get_parameters_ex(1, &arg1) == FAILURE)) {
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex(arg1);
-
- id = getThis();
- objp = (HW_API_Reason *) php_hwapi_get_object(id, le_hwapi_reasonp);
-
- if(!objp) {
- RETURN_FALSE;
- }
- desc = objp->description((HW_API_String) (Z_STRVAL_PP(arg1)));
- RETURN_STRING((char *) desc.string(), 1);
-}
-/* }}} */
-
-/* hw_api_class_get_property(zend_property_reference *property_reference) {{{
- *
- */
-pval hw_api_class_get_property(zend_property_reference *property_reference) {
- pval result;
- zend_overloaded_element *overloaded_property;
- zend_llist_element *element;
-
-
- printf("Reading a property from a HW_API object:\n");
-
- for (element=property_reference->elements_list->head; element; element=element->next) {
- overloaded_property = (zend_overloaded_element *) element->data;
- switch (Z_TYPE_P(overloaded_property)) {
- case OE_IS_ARRAY:
- printf("Array offset: ");
- break;
- case OE_IS_OBJECT:
- printf("Object property: ");
- break;
- }
- switch (Z_TYPE(overloaded_property->element)) {
- case IS_LONG:
- printf("%ld (numeric)\n", Z_LVAL(overloaded_property->element));
- break;
- case IS_STRING:
- printf("'%s'\n", Z_STRVAL(overloaded_property->element));
- break;
- }
- pval_destructor(&overloaded_property->element);
- }
-
- Z_STRVAL(result) = estrndup("testing", 7);
- Z_STRLEN(result) = 7;
- Z_TYPE(result) = IS_STRING;
- return result;
-}
-/* }}} */
-
-/* hw_api_class_set_property(zend_property_reference *property_reference, pval *value) {{{
- */
-int hw_api_class_set_property(zend_property_reference *property_reference, pval *value) {
- zend_overloaded_element *overloaded_property;
- zend_llist_element *element;
-
- printf("Writing to a property from a HW_API object:\n");
- printf("Writing '");
- zend_print_variable(value);
- printf("'\n");
-
- for (element=property_reference->elements_list->head; element; element=element->next) {
- overloaded_property = (zend_overloaded_element *) element->data;
- switch (Z_TYPE_P(overloaded_property)) {
- case OE_IS_ARRAY:
- printf("Array offset: ");
- break;
- case OE_IS_OBJECT:
- printf("Object property: ");
- break;
- }
- switch (Z_TYPE(overloaded_property->element)) {
- case IS_LONG:
- printf("%ld (numeric)\n", Z_LVAL(overloaded_property->element));
- break;
- case IS_STRING:
- printf("'%s'\n", Z_STRVAL(overloaded_property->element));
- break;
- }
- pval_destructor(&overloaded_property->element);
- }
-
- return 0;
-}
-/* }}} */
-
-/* hw_api_class_startup() {{{
- */
-void hw_api_class_startup() {
- zend_class_entry ce;
-
- INIT_OVERLOADED_CLASS_ENTRY(ce, "HW_API", php_hw_api_functions,
- NULL,
- NULL,
- NULL);
-
- hw_api_class_entry_ptr = zend_register_internal_class_ex(&ce, NULL, NULL);
-}
-/* }}} */
-
-/* hw_api_object_class_get_property(zend_property_reference *property_reference) {{{
- */
-pval hw_api_object_class_get_property(zend_property_reference *property_reference) {
- pval result;
- zend_overloaded_element *overloaded_property;
- zend_llist_element *element;
-
-
- printf("Reading a property from a HW_API_Object object:\n");
-
- for (element=property_reference->elements_list->head; element; element=element->next) {
- overloaded_property = (zend_overloaded_element *) element->data;
- switch (Z_TYPE_P(overloaded_property)) {
- case OE_IS_ARRAY:
- printf("Array offset: ");
- break;
- case OE_IS_OBJECT:
- printf("Object property: ");
- break;
- }
- switch (Z_TYPE(overloaded_property->element)) {
- case IS_LONG:
- printf("%ld (numeric)\n", Z_LVAL(overloaded_property->element));
- break;
- case IS_STRING:
- printf("'%s'\n", Z_STRVAL(overloaded_property->element));
- break;
- }
- pval_destructor(&overloaded_property->element);
- }
-
- Z_STRVAL(result) = estrndup("testing", 7);
- Z_STRLEN(result) = 7;
- Z_TYPE(result) = IS_STRING;
- return result;
-}
-/* }}} */
-
-/* hw_api_object_class_set_property(zend_property_reference *property_reference, pval *value) {{{
- */
-int hw_api_object_class_set_property(zend_property_reference *property_reference, pval *value) {
- zend_overloaded_element *overloaded_property;
- zend_llist_element *element;
-
- printf("Writing to a property from a HW_API_Object object:\n");
- printf("Writing '");
- zend_print_variable(value);
- printf("'\n");
-
- for (element=property_reference->elements_list->head; element; element=element->next) {
- overloaded_property = (zend_overloaded_element *) element->data;
- switch (Z_TYPE_P(overloaded_property)) {
- case OE_IS_ARRAY:
- printf("Array offset: ");
- break;
- case OE_IS_OBJECT:
- printf("Object property: ");
- break;
- }
- switch (Z_TYPE(overloaded_property->element)) {
- case IS_LONG:
- printf("%ld (numeric)\n", Z_LVAL(overloaded_property->element));
- break;
- case IS_STRING:
- printf("'%s'\n", Z_STRVAL(overloaded_property->element));
- break;
- }
- pval_destructor(&overloaded_property->element);
- }
-
- return 0;
-}
-/* }}} */
-
-/* {{{ hw_api_object_class_startup()
- */
-void hw_api_object_class_startup() {
- zend_class_entry ce;
-
- INIT_OVERLOADED_CLASS_ENTRY(ce, "hw_api_object", php_hw_api_object_functions,
- NULL,
- NULL,
- NULL);
-
- hw_api_object_class_entry_ptr = zend_register_internal_class_ex(&ce, NULL, NULL);
-}
-/* }}} */
-
-/* hw_api_attribute_class_get_property(zend_property_reference *property_reference) {{{
- */
-pval hw_api_attribute_class_get_property(zend_property_reference *property_reference) {
- pval result;
- zend_overloaded_element *overloaded_property;
- zend_llist_element *element;
-
- printf("Reading a property from a HW_API_Attribute object:\n");
-
- for (element=property_reference->elements_list->head; element; element=element->next) {
- overloaded_property = (zend_overloaded_element *) element->data;
- switch (Z_TYPE_P(overloaded_property)) {
- case OE_IS_ARRAY:
- printf("Array offset: ");
- break;
- case OE_IS_OBJECT:
- printf("Object property: ");
- break;
- }
- switch (Z_TYPE(overloaded_property->element)) {
- case IS_LONG:
- printf("%ld (numeric)\n", Z_LVAL(overloaded_property->element));
- break;
- case IS_STRING:
- printf("'%s'\n", Z_STRVAL(overloaded_property->element));
- break;
- }
- pval_destructor(&overloaded_property->element);
- }
-
- Z_STRVAL(result) = estrndup("testing", 7);
- Z_STRLEN(result) = 7;
- Z_TYPE(result) = IS_STRING;
- return result;
-}
-/* }}} */
-
-/* hw_api_attribute_class_set_property(zend_property_reference *property_reference, pval *value) {{{
- */
-int hw_api_attribute_class_set_property(zend_property_reference *property_reference, pval *value) {
- zend_overloaded_element *overloaded_property;
- zend_llist_element *element;
-
- printf("Writing to a property from a HW_API_Attribute object:\n");
- printf("Writing '");
- zend_print_variable(value);
- printf("'\n");
-
- for (element=property_reference->elements_list->head; element; element=element->next) {
- overloaded_property = (zend_overloaded_element *) element->data;
- switch (Z_TYPE_P(overloaded_property)) {
- case OE_IS_ARRAY:
- printf("Array offset: ");
- break;
- case OE_IS_OBJECT:
- printf("Object property: ");
- break;
- }
- switch (Z_TYPE(overloaded_property->element)) {
- case IS_LONG:
- printf("%ld (numeric)\n", Z_LVAL(overloaded_property->element));
- break;
- case IS_STRING:
- printf("'%s'\n", Z_STRVAL(overloaded_property->element));
- break;
- }
- pval_destructor(&overloaded_property->element);
- }
-
- return 0;
-}
-/* }}} */
-
-/* hw_api_attribute_class_startup() {{{
- */
-void hw_api_attribute_class_startup() {
- zend_class_entry hw_api_attribute_class_entry;
-
- INIT_OVERLOADED_CLASS_ENTRY(hw_api_attribute_class_entry, "HW_API_Attribute", php_hw_api_attribute_functions,
- NULL,
- NULL,
- NULL);
-
- hw_api_attribute_class_entry_ptr = zend_register_internal_class(&hw_api_attribute_class_entry);
-}
-/* }}} */
-
-/* hw_api_error_class_startup() {{{
- */
-void hw_api_error_class_startup() {
- zend_class_entry hw_api_error_class_entry;
-
- INIT_OVERLOADED_CLASS_ENTRY(hw_api_error_class_entry, "HW_API_Error", php_hw_api_error_functions,
- NULL,
- NULL,
- NULL);
-
- hw_api_error_class_entry_ptr = zend_register_internal_class(&hw_api_error_class_entry);
-}
-/* }}} */
-
-/* hw_api_content_class_startup() {{{
- */
-void hw_api_content_class_startup() {
- zend_class_entry hw_api_content_class_entry;
-
- INIT_OVERLOADED_CLASS_ENTRY(hw_api_content_class_entry, "HW_API_Content", php_hw_api_content_functions,
- NULL,
- NULL,
- NULL);
-
- hw_api_content_class_entry_ptr = zend_register_internal_class(&hw_api_content_class_entry);
-}
-/* }}} */
-
-/* hw_api_reason_class_startup() {{{
- */
-void hw_api_reason_class_startup() {
- zend_class_entry hw_api_reason_class_entry;
-
- INIT_OVERLOADED_CLASS_ENTRY(hw_api_reason_class_entry, "HW_API_Reason", php_hw_api_reason_functions,
- NULL,
- NULL,
- NULL);
-
- hw_api_reason_class_entry_ptr = zend_register_internal_class(&hw_api_reason_class_entry);
-}
-/* }}} */
-
-#endif
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- */
diff --git a/ext/hwapi/php_hwapi.h b/ext/hwapi/php_hwapi.h
deleted file mode 100644
index 9c199134fd..0000000000
--- a/ext/hwapi/php_hwapi.h
+++ /dev/null
@@ -1,159 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP version 4.0 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997, 1998, 1999, 2000 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. |
- +----------------------------------------------------------------------+
- | Authors: Rasmus Lerdorf <rasmus@lerdorf.on.ca> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifndef PHP_HWAPI_H
-#define PHP_HWAPI_H
-
-#ifdef PHP_WIN32
-#define PHP_HWAPI_API __declspec(dllexport)
-#else
-#define PHP_HWAPI_API
-#endif
-
-#if HAVE_HWAPI
-#ifndef DLEXPORT
-#define DLEXPORT
-#endif
-
-#ifdef ZTS
-#include "TSRM.h"
-#endif
-
-extern zend_module_entry hwapi_module_entry;
-#define hwapi_module_ptr &hwapi_module_entry
-
-typedef struct {
- long default_link;
- long default_port;
- long num_links,num_persistent;
- long max_links,max_persistent;
- long allow_persistent;
- int le_socketp, le_psocketp, le_document;
-} zend_hwapi_globals;
-
-#ifdef ZTS
-# define HwApiSLS_D zend_hwapi_globals *hwapi_globals
-# define HwApiSLS_DC , HwApiSLS_D
-# define HwApiSLS_C hwapi_globals
-# define HwApiSLS_CC , HwApiSLS_C
-# define HwApiSG(v) (hwapi_globals->v)
-# define HwApiSLS_FETCH() zend_hwapi_globals *hwapi_globals = ts_resource(hwapi_globals_id)
-#else
-# define HwApiSLS_D
-# define HwApiSLS_DC
-# define HwApiSLS_C
-# define HwApiSLS_CC
-# define HwApiSG(v) (hwapi_globals.v)
-# define HwApiSLS_FETCH()
-extern PHP_HWAPI_API zend_hwapi_globals hwapi_globals;
-#endif
-
-extern PHP_MINIT_FUNCTION(hwapi);
-extern PHP_MSHUTDOWN_FUNCTION(hwapi);
-extern PHP_RINIT_FUNCTION(hwapi);
-PHP_MINFO_FUNCTION(hwapi);
-
-/* HW_API */
-PHP_FUNCTION(hwapi_dummy);
-PHP_FUNCTION(hwapi_init);
-PHP_FUNCTION(hwapi_hgcsp);
-PHP_FUNCTION(hwapi_object);
-PHP_FUNCTION(hwapi_children);
-PHP_FUNCTION(hwapi_mychildren);
-PHP_FUNCTION(hwapi_parents);
-PHP_FUNCTION(hwapi_find);
-PHP_FUNCTION(hwapi_identify);
-PHP_FUNCTION(hwapi_remove);
-PHP_FUNCTION(hwapi_content);
-PHP_FUNCTION(hwapi_copy);
-PHP_FUNCTION(hwapi_link);
-PHP_FUNCTION(hwapi_move);
-PHP_FUNCTION(hwapi_lock);
-PHP_FUNCTION(hwapi_unlock);
-PHP_FUNCTION(hwapi_replace);
-PHP_FUNCTION(hwapi_insert);
-PHP_FUNCTION(hwapi_insertdocument);
-PHP_FUNCTION(hwapi_insertcollection);
-
-PHP_FUNCTION(hwapi_srcanchors);
-PHP_FUNCTION(hwapi_dstanchors);
-PHP_FUNCTION(hwapi_objectbyanchor);
-PHP_FUNCTION(hwapi_dstofsrcanchor);
-PHP_FUNCTION(hwapi_srcsofdst);
-
-PHP_FUNCTION(hwapi_checkin);
-PHP_FUNCTION(hwapi_checkout);
-PHP_FUNCTION(hwapi_setcommittedversion);
-PHP_FUNCTION(hwapi_revert);
-PHP_FUNCTION(hwapi_history);
-PHP_FUNCTION(hwapi_removeversion);
-PHP_FUNCTION(hwapi_freeversion);
-
-PHP_FUNCTION(hwapi_configurationhistory);
-PHP_FUNCTION(hwapi_saveconfiguration);
-PHP_FUNCTION(hwapi_restoreconfiguration);
-PHP_FUNCTION(hwapi_mergeconfiguration);
-PHP_FUNCTION(hwapi_removeconfiguration);
-
-PHP_FUNCTION(hwapi_user);
-PHP_FUNCTION(hwapi_userlist);
-PHP_FUNCTION(hwapi_hwstat);
-PHP_FUNCTION(hwapi_dcstat);
-PHP_FUNCTION(hwapi_dbstat);
-PHP_FUNCTION(hwapi_ftstat);
-PHP_FUNCTION(hwapi_info);
-
-/* HW_Object */
-PHP_FUNCTION(hwapi_object_new);
-PHP_FUNCTION(hwapi_object_count);
-PHP_FUNCTION(hwapi_object_title);
-PHP_FUNCTION(hwapi_object_attreditable);
-PHP_FUNCTION(hwapi_object_assign);
-PHP_FUNCTION(hwapi_object_attribute);
-PHP_FUNCTION(hwapi_object_insert);
-PHP_FUNCTION(hwapi_object_remove);
-PHP_FUNCTION(hwapi_object_value);
-
-/* HW_Attribute */
-PHP_FUNCTION(hwapi_attribute_new);
-PHP_FUNCTION(hwapi_attribute_key);
-PHP_FUNCTION(hwapi_attribute_value);
-PHP_FUNCTION(hwapi_attribute_values);
-PHP_FUNCTION(hwapi_attribute_langdepvalue);
-
-/* HW_Content */
-PHP_FUNCTION(hwapi_content_new);
-PHP_FUNCTION(hwapi_content_read);
-PHP_FUNCTION(hwapi_content_mimetype);
-
-/* HW_Error */
-PHP_FUNCTION(hwapi_error_count);
-PHP_FUNCTION(hwapi_error_reason);
-
-/* HW_Reason */
-PHP_FUNCTION(hwapi_reason_type);
-PHP_FUNCTION(hwapi_reason_description);
-
-#else
-#define hwapi_module_ptr NULL
-#endif /* HAVE_HWAPI */
-#define phpext_hwapi_ptr hwapi_module_ptr
-#endif /* PHP_HWAPI_H */
-
diff --git a/ext/iconv/CREDITS b/ext/iconv/CREDITS
deleted file mode 100644
index 70d3825ac3..0000000000
--- a/ext/iconv/CREDITS
+++ /dev/null
@@ -1,2 +0,0 @@
-Iconv
-Rui Hirokawa, Stig Bakken, Moriyoshi Koizumi
diff --git a/ext/iconv/config.m4 b/ext/iconv/config.m4
deleted file mode 100644
index 6f49e423f2..0000000000
--- a/ext/iconv/config.m4
+++ /dev/null
@@ -1,137 +0,0 @@
-dnl
-dnl $Id$
-dnl
-
-PHP_ARG_WITH(iconv, for iconv support,
-[ --without-iconv[=DIR] Exclude iconv support], yes)
-
-if test "$PHP_ICONV" != "no"; then
-
- PHP_SETUP_ICONV(ICONV_SHARED_LIBADD, [
- iconv_avail="yes";
- ],[
- iconv_avail="no";
- ])
-
- if test "$iconv_avail" != "no"; then
- iconv_cflags_save="$CFLAGS"
- iconv_ldflags_save="$LDFLAGS"
-
- if test -z "$ICONV_DIR"; then
- PHP_ICONV_PREFIX="/usr"
- else
- PHP_ICONV_PREFIX="$ICONV_DIR"
- fi
-
- CFLAGS="-I$PHP_ICONV_PREFIX/include $CFLAGS"
- LDFLAGS="-L$PHP_ICONV_PREFIX/lib $LDFLAGS"
-
- if test -r $PHP_ICONV_PREFIX/include/giconv.h; then
- PHP_ICONV_H_PATH="$PHP_ICONV_PREFIX/include/giconv.h"
- else
- PHP_ICONV_H_PATH="$PHP_ICONV_PREFIX/include/iconv.h"
- fi
-
- if test -z "$iconv_lib_name"; then
- AC_MSG_CHECKING([if iconv is glibc's])
- AC_TRY_LINK([#include <gnu/libc-version.h>],[gnu_get_libc_version();],
- [
- AC_MSG_RESULT(yes)
- iconv_impl_name="glibc"
- ],[
- AC_MSG_RESULT(no)
- ])
- else
- case "$iconv_lib_name" in
- iconv [)]
- AC_MSG_CHECKING([if iconv is Konstantin Chugeuv's])
- AC_TRY_LINK([#include <iconv.h>],[iconv_ccs_init(NULL, NULL);],
- [
- AC_MSG_RESULT(yes)
- iconv_impl_name="bsd"
- ],[
- AC_MSG_RESULT(no)
- iconv_impl_name="gnu_libiconv"
- ])
- ;;
-
- giconv [)]
- iconv_impl_name="gnu_libiconv"
- ;;
-
- biconv [)]
- iconv_impl_name="bsd"
- ;;
- esac
- fi
-
- case "$iconv_impl_name" in
- gnu_libiconv [)]
- PHP_DEFINE([PHP_ICONV_IMPL],[\"libiconv\"])
- AC_DEFINE([PHP_ICONV_IMPL],["libiconv"],[Which iconv implementation to use])
- ;;
-
- bsd [)]
- PHP_DEFINE([HAVE_BSD_ICONV],1)
- AC_DEFINE([HAVE_BSD_ICONV],1,[Konstantin Chugeuv's iconv implementation])
- PHP_DEFINE([PHP_ICONV_IMPL],[\"BSD iconv\"])
- AC_DEFINE([PHP_ICONV_IMPL],["BSD iconv"],[Which iconv implementation to use])
- ;;
-
- glibc [)]
- PHP_DEFINE([HAVE_GLIBC_ICONV],1)
- AC_DEFINE([HAVE_GLIBC_ICONV],1,[glibc's iconv implementation])
- PHP_DEFINE([PHP_ICONV_IMPL],[\"glibc\"])
- AC_DEFINE([PHP_ICONV_IMPL],["glibc"],[Which iconv implementation to use])
- ;;
- esac
-
- AC_MSG_CHECKING([if iconv supports errno])
- AC_TRY_RUN([
-#include <$PHP_ICONV_H_PATH>
-#include <errno.h>
-
-int main() {
- iconv_t cd;
- cd = iconv_open( "*blahblah*", "*blahblah*" );
- if (cd == (iconv_t)(-1)) {
- if (errno == EINVAL) {
- return 0;
- } else {
- return 1;
- }
- }
- iconv_close( cd );
- return 2;
-}
- ],[
- AC_MSG_RESULT(yes)
- PHP_DEFINE([ICONV_SUPPORTS_ERRNO],1)
- AC_DEFINE([ICONV_SUPPORTS_ERRNO],1,[Whether iconv supports error no or not])
- ],[
- AC_MSG_RESULT(no)
- PHP_DEFINE([ICONV_SUPPORTS_ERRNO],0)
- AC_DEFINE([ICONV_SUPPORTS_ERRNO],0,[Whether iconv supports error no or not])
- ])
-
- AC_MSG_CHECKING([if your cpp allows macro usage in include lines])
- AC_TRY_COMPILE([
-#define FOO <$PHP_ICONV_H_PATH>
-#include FOO
- ], [], [
- AC_MSG_RESULT([yes])
- PHP_DEFINE([PHP_ICONV_H_PATH], [<$PHP_ICONV_H_PATH>])
- AC_DEFINE_UNQUOTED([PHP_ICONV_H_PATH], [<$PHP_ICONV_H_PATH>], [Path to iconv.h])
- ], [
- AC_MSG_RESULT([no])
- ])
-
- CFLAGS="$iconv_cflags_save"
- LDFLAGS="$iconv_ldflags_save"
-
- PHP_NEW_EXTENSION(iconv, iconv.c, $ext_shared,, [-I\"$PHP_ICONV_PREFIX/include\"])
- PHP_SUBST(ICONV_SHARED_LIBADD)
- else
- AC_MSG_ERROR(Please reinstall the iconv library.)
- fi
-fi
diff --git a/ext/iconv/config.w32 b/ext/iconv/config.w32
deleted file mode 100644
index 22dc46607f..0000000000
--- a/ext/iconv/config.w32
+++ /dev/null
@@ -1,20 +0,0 @@
-// $Id$
-// vim: ft=javascript
-
-ARG_WITH("iconv", "iconv support", "yes");
-
-if (PHP_ICONV != "no") {
- if (/*CHECK_LIB("iconv.lib", "iconv", PHP_ICONV) &&*/
- CHECK_HEADER_ADD_INCLUDE("iconv.h", "CFLAGS_ICONV", PHP_ICONV)) {
- EXTENSION("iconv", "iconv.c");
-
- AC_DEFINE("HAVE_ICONV", 1, "Define if iconv extension is enabled");
- AC_DEFINE("HAVE_LIBICONV", 1, "Define if libiconv is available");
- AC_DEFINE("PHP_ICONV_IMPL", "\"libiconv\"", "Which iconv implementation to use");
- AC_DEFINE("ICONV_SUPPORTS_ERRNO", 1, "Whether iconv supports errno or not");
- if (!PHP_ICONV_SHARED) {
- ADD_DEF_FILE("ext\\iconv\\php_iconv.def");
- }
- }
-}
-
diff --git a/ext/iconv/iconv.c b/ext/iconv/iconv.c
deleted file mode 100644
index e0cb6c230e..0000000000
--- a/ext/iconv/iconv.c
+++ /dev/null
@@ -1,2691 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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. |
- +----------------------------------------------------------------------+
- | Authors: Rui Hirokawa <rui_hirokawa@ybb.ne.jp> |
- | Stig Bakken <ssb@php.net> |
- | Moriyoshi Koizumi <moriyoshi@php.net> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "php.h"
-#include "php_globals.h"
-#include "ext/standard/info.h"
-#include "main/php_output.h"
-#include "SAPI.h"
-#include "php_ini.h"
-
-#ifdef HAVE_STDLIB_H
-# include <stdlib.h>
-#endif
-
-#include <errno.h>
-
-#include "php_iconv.h"
-
-#ifdef HAVE_ICONV
-
-#ifdef PHP_ICONV_H_PATH
-#include PHP_ICONV_H_PATH
-#else
-#include <iconv.h>
-#endif
-
-#ifdef HAVE_GLIBC_ICONV
-#include <gnu/libc-version.h>
-#endif
-
-#ifdef HAVE_LIBICONV
-#undef iconv
-#endif
-
-#include "ext/standard/php_smart_str.h"
-#include "ext/standard/base64.h"
-#include "ext/standard/quot_print.h"
-
-#define _php_iconv_memequal(a, b, c) \
- ((c) == sizeof(unsigned long) ? *((unsigned long *)(a)) == *((unsigned long *)(b)) : ((c) == sizeof(unsigned int) ? *((unsigned int *)(a)) == *((unsigned int *)(b)) : memcmp(a, b, c) == 0))
-
-/* {{{ iconv_functions[]
- */
-function_entry iconv_functions[] = {
- PHP_NAMED_FE(iconv,php_if_iconv, NULL)
- PHP_FE(ob_iconv_handler, NULL)
- PHP_FE(iconv_get_encoding, NULL)
- PHP_FE(iconv_set_encoding, NULL)
- PHP_FE(iconv_strlen, NULL)
- PHP_FE(iconv_substr, NULL)
- PHP_FE(iconv_strpos, NULL)
- PHP_FE(iconv_strrpos, NULL)
- PHP_FE(iconv_mime_encode, NULL)
- PHP_FE(iconv_mime_decode, NULL)
- PHP_FE(iconv_mime_decode_headers, NULL)
- {NULL, NULL, NULL}
-};
-/* }}} */
-
-/* {{{ iconv_module_entry
- */
-zend_module_entry iconv_module_entry = {
- STANDARD_MODULE_HEADER,
- "iconv",
- iconv_functions,
- PHP_MINIT(miconv),
- PHP_MSHUTDOWN(miconv),
- NULL,
- NULL,
- PHP_MINFO(miconv),
- NO_VERSION_YET,
- STANDARD_MODULE_PROPERTIES
-};
-/* }}} */
-
-ZEND_DECLARE_MODULE_GLOBALS(iconv)
-
-#ifdef COMPILE_DL_ICONV
-ZEND_GET_MODULE(iconv)
-#endif
-
-#ifdef HAVE_LIBICONV
-#define iconv libiconv
-#endif
-
-/* {{{ typedef enum php_iconv_err_t */
-typedef enum _php_iconv_err_t {
- PHP_ICONV_ERR_SUCCESS = SUCCESS,
- PHP_ICONV_ERR_CONVERTER = 1,
- PHP_ICONV_ERR_WRONG_CHARSET = 2,
- PHP_ICONV_ERR_TOO_BIG = 3,
- PHP_ICONV_ERR_ILLEGAL_SEQ = 4,
- PHP_ICONV_ERR_ILLEGAL_CHAR = 5,
- PHP_ICONV_ERR_UNKNOWN = 6,
- PHP_ICONV_ERR_MALFORMED = 7,
- PHP_ICONV_ERR_ALLOC = 8
-} php_iconv_err_t;
-/* }}} */
-
-/* {{{ typedef enum php_iconv_enc_scheme_t */
-typedef enum _php_iconv_enc_scheme_t {
- PHP_ICONV_ENC_SCHEME_BASE64,
- PHP_ICONV_ENC_SCHEME_QPRINT
-} php_iconv_enc_scheme_t;
-/* }}} */
-
-#define PHP_ICONV_MIME_DECODE_STRICT (1<<0)
-#define PHP_ICONV_MIME_DECODE_CONTINUE_ON_ERROR (1<<1)
-
-/* {{{ prototypes */
-static php_iconv_err_t _php_iconv_appendl(smart_str *d, const char *s, size_t l, iconv_t cd);
-static php_iconv_err_t _php_iconv_appendc(smart_str *d, const char c, iconv_t cd);
-
-static php_iconv_err_t php_iconv_string(const char * in_p, size_t in_len, char **out, size_t *out_len, const char *out_charset, const char *in_charset);
-
-static void _php_iconv_show_error(php_iconv_err_t err, const char *out_charset, const char *in_charset TSRMLS_DC);
-
-static php_iconv_err_t _php_iconv_strlen(unsigned int *pretval, const char *str, size_t nbytes, const char *enc);
-
-static php_iconv_err_t _php_iconv_substr(smart_str *pretval, const char *str, size_t nbytes, int offset, int len, const char *enc);
-
-static php_iconv_err_t _php_iconv_strpos(unsigned int *pretval, const char *haystk, size_t haystk_nbytes, const char *ndl, size_t ndl_nbytes, int offset, const char *enc);
-
-static php_iconv_err_t _php_iconv_mime_encode(smart_str *pretval, const char *fname, size_t fname_nbytes, const char *fval, size_t fval_nbytes, unsigned int max_line_len, const char *lfchars, php_iconv_enc_scheme_t enc_scheme, const char *out_charset, const char *enc);
-
-static php_iconv_err_t _php_iconv_mime_decode(smart_str *pretval, const char *str, size_t str_nbytes, const char *enc, const char **next_pos, int mode);
-
-static php_iconv_err_t php_iconv_stream_filter_register_factory(TSRMLS_D);
-static php_iconv_err_t php_iconv_stream_filter_unregister_factory(TSRMLS_D);
-/* }}} */
-
-/* {{{ static globals */
-static char _generic_superset_name[] = "UCS-4LE";
-#define GENERIC_SUPERSET_NAME _generic_superset_name
-#define GENERIC_SUPERSET_NBYTES 4
-/* }}} */
-
-/* {{{ PHP_INI
- */
-PHP_INI_BEGIN()
- STD_PHP_INI_ENTRY("iconv.input_encoding", ICONV_INPUT_ENCODING, PHP_INI_ALL, OnUpdateString, input_encoding, zend_iconv_globals, iconv_globals)
- STD_PHP_INI_ENTRY("iconv.output_encoding", ICONV_OUTPUT_ENCODING, PHP_INI_ALL, OnUpdateString, output_encoding, zend_iconv_globals, iconv_globals)
- STD_PHP_INI_ENTRY("iconv.internal_encoding", ICONV_INTERNAL_ENCODING, PHP_INI_ALL, OnUpdateString, internal_encoding, zend_iconv_globals, iconv_globals)
-PHP_INI_END()
-/* }}} */
-
-/* {{{ php_iconv_init_globals */
-static void php_iconv_init_globals(zend_iconv_globals *iconv_globals)
-{
- iconv_globals->input_encoding = NULL;
- iconv_globals->output_encoding = NULL;
- iconv_globals->internal_encoding = NULL;
-}
-/* }}} */
-
-/* {{{ PHP_MINIT_FUNCTION */
-PHP_MINIT_FUNCTION(miconv)
-{
- char *version = "unknown";
-
- ZEND_INIT_MODULE_GLOBALS(iconv, php_iconv_init_globals, NULL);
- REGISTER_INI_ENTRIES();
-
-#if HAVE_LIBICONV
- {
- static char buf[16];
- snprintf(buf, sizeof(buf), "%d.%d",
- ((_libiconv_version >> 8) & 0x0f), (_libiconv_version & 0x0f));
- version = buf;
- }
-#elif HAVE_GLIBC_ICONV
- version = (char *)gnu_get_libc_version();
-#endif
-
-#ifdef PHP_ICONV_IMPL
- REGISTER_STRING_CONSTANT("ICONV_IMPL", PHP_ICONV_IMPL, CONST_CS | CONST_PERSISTENT);
-#elif HAVE_LIBICONV
- REGISTER_STRING_CONSTANT("ICONV_IMPL", "libiconv", CONST_CS | CONST_PERSISTENT);
-#else
- REGISTER_STRING_CONSTANT("ICONV_IMPL", "unknown", CONST_CS | CONST_PERSISTENT);
-#endif
- REGISTER_STRING_CONSTANT("ICONV_VERSION", version, CONST_CS | CONST_PERSISTENT);
-
- REGISTER_LONG_CONSTANT("ICONV_MIME_DECODE_STRICT", PHP_ICONV_MIME_DECODE_STRICT, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("ICONV_MIME_DECODE_CONTINUE_ON_ERROR", PHP_ICONV_MIME_DECODE_CONTINUE_ON_ERROR, CONST_CS | CONST_PERSISTENT);
-
- if (php_iconv_stream_filter_register_factory(TSRMLS_C) != PHP_ICONV_ERR_SUCCESS) {
- return FAILURE;
- }
-
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ PHP_MSHUTDOWN_FUNCTION */
-PHP_MSHUTDOWN_FUNCTION(miconv)
-{
- php_iconv_stream_filter_unregister_factory(TSRMLS_C);
- UNREGISTER_INI_ENTRIES();
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ PHP_MINFO_FUNCTION */
-PHP_MINFO_FUNCTION(miconv)
-{
- zval iconv_impl, iconv_ver;
-
- zend_get_constant("ICONV_IMPL", sizeof("ICONV_IMPL")-1, &iconv_impl TSRMLS_CC);
- zend_get_constant("ICONV_VERSION", sizeof("ICONV_VERSION")-1, &iconv_ver TSRMLS_CC);
-
- php_info_print_table_start();
- php_info_print_table_row(2, "iconv support", "enabled");
- php_info_print_table_row(2, "iconv implementation", Z_STRVAL(iconv_impl));
- php_info_print_table_row(2, "iconv library version", Z_STRVAL(iconv_ver));
- php_info_print_table_end();
-
- DISPLAY_INI_ENTRIES();
-
- zval_dtor(&iconv_impl);
- zval_dtor(&iconv_ver);
-}
-/* }}} */
-
-/* {{{ _php_iconv_appendl() */
-static php_iconv_err_t _php_iconv_appendl(smart_str *d, const char *s, size_t l, iconv_t cd)
-{
- const char *in_p = s;
- size_t in_left = l;
- char *out_p;
- size_t out_left = 0;
- size_t buf_growth = 128;
-#if !ICONV_SUPPORTS_ERRNO
- size_t prev_in_left = in_left;
-#endif
-
- if (in_p != NULL) {
- while (in_left > 0) {
- out_left = buf_growth - out_left;
- {
- size_t newlen;
- smart_str_alloc((d), out_left, 0);
- }
-
- out_p = (d)->c + (d)->len;
-
- if (iconv(cd, (char **)&in_p, &in_left, (char **) &out_p, &out_left) == (size_t)-1) {
-#if ICONV_SUPPORTS_ERRNO
- switch (errno) {
- case EINVAL:
- return PHP_ICONV_ERR_ILLEGAL_CHAR;
-
- case EILSEQ:
- return PHP_ICONV_ERR_ILLEGAL_SEQ;
-
- case E2BIG:
- break;
-
- default:
- return PHP_ICONV_ERR_UNKNOWN;
- }
-#else
- if (prev_in_left == in_left) {
- return PHP_ICONV_ERR_UNKNOWN;
- }
-#endif
- }
-#if !ICONV_SUPPORTS_ERRNO
- prev_in_left = in_left;
-#endif
- (d)->len += (buf_growth - out_left);
- buf_growth <<= 1;
- }
- } else {
- for (;;) {
- out_left = buf_growth - out_left;
- {
- size_t newlen;
- smart_str_alloc((d), out_left, 0);
- }
-
- out_p = (d)->c + (d)->len;
-
- if (iconv(cd, NULL, NULL, (char **) &out_p, &out_left) == (size_t)0) {
- (d)->len += (buf_growth - out_left);
- break;
- } else {
-#if ICONV_SUPPORTS_ERRNO
- if (errno != E2BIG) {
- return PHP_ICONV_ERR_UNKNOWN;
- }
-#else
- if (out_left != 0) {
- return PHP_ICONV_ERR_UNKNOWN;
- }
-#endif
- }
- (d)->len += (buf_growth - out_left);
- buf_growth <<= 1;
- }
- }
- return PHP_ICONV_ERR_SUCCESS;
-}
-/* }}} */
-
-/* {{{ _php_iconv_appendc() */
-static php_iconv_err_t _php_iconv_appendc(smart_str *d, const char c, iconv_t cd)
-{
- return _php_iconv_appendl(d, &c, 1, cd);
-}
-/* }}} */
-
-/* {{{ php_iconv_string()
- */
-php_iconv_err_t php_iconv_string(const char *in_p, size_t in_len,
- char **out, size_t *out_len,
- const char *out_charset, const char *in_charset)
-{
-#if !ICONV_SUPPORTS_ERRNO
- size_t in_size, out_size, out_left;
- char *out_buffer, *out_p;
- iconv_t cd;
- size_t result;
-
- *out = NULL;
- *out_len = 0;
-
- /*
- This is not the right way to get output size...
- This is not space efficient for large text.
- This is also problem for encoding like UTF-7/UTF-8/ISO-2022 which
- a single char can be more than 4 bytes.
- I added 15 extra bytes for safety. <yohgaki@php.net>
- */
- out_size = in_len * sizeof(int) + 15;
- out_left = out_size;
-
- in_size = in_len;
-
- cd = iconv_open(out_charset, in_charset);
-
- if (cd == (iconv_t)(-1)) {
- return PHP_ICONV_ERR_UNKNOWN;
- }
-
- out_buffer = (char *) emalloc(out_size + 1);
- out_p = out_buffer;
-
- result = iconv(cd, (const char **) &in_p, &in_size, (char **)
- &out_p, &out_left);
-
- if (result == (size_t)(-1)) {
- efree(out_buffer);
- return PHP_ICONV_ERR_UNKNOWN;
- }
-
- if (out_left < 8) {
- out_buffer = (char *) erealloc(out_buffer, out_size + 8);
- }
-
- /* flush the shift-out sequences */
- result = iconv(cd, NULL, NULL, &out_p, &out_left);
-
- if (result == (size_t)(-1)) {
- efree(out_buffer);
- return PHP_ICONV_ERR_UNKNOWN;
- }
-
- *out_len = out_size - out_left;
- out_buffer[*out_len] = '\0';
- *out = out_buffer;
-
- iconv_close(cd);
-
- return PHP_ICONV_ERR_SUCCESS;
-
-#else
- /*
- iconv supports errno. Handle it better way.
- */
- iconv_t cd;
- size_t in_left, out_size, out_left;
- char *out_p, *out_buf, *tmp_buf;
- size_t bsz, result = 0;
- php_iconv_err_t retval = PHP_ICONV_ERR_SUCCESS;
-
- *out = NULL;
- *out_len = 0;
-
- cd = iconv_open(out_charset, in_charset);
-
- if (cd == (iconv_t)(-1)) {
- if (errno == EINVAL) {
- return PHP_ICONV_ERR_WRONG_CHARSET;
- } else {
- return PHP_ICONV_ERR_CONVERTER;
- }
- }
- in_left= in_len;
- out_left = in_len + 32; /* Avoid realloc() most cases */
- out_size = 0;
- bsz = out_left;
- out_buf = (char *) emalloc(bsz+1);
- out_p = out_buf;
-
- while (in_left > 0) {
- result = iconv(cd, (char **) &in_p, &in_left, (char **) &out_p, &out_left);
- out_size = bsz - out_left;
- if (result == (size_t)(-1)) {
- if (errno == E2BIG && in_left > 0) {
- /* converted string is longer than out buffer */
- bsz += in_len;
-
- tmp_buf = (char*) erealloc(out_buf, bsz+1);
- out_p = out_buf = tmp_buf;
- out_p += out_size;
- out_left = bsz - out_size;
- continue;
- }
- }
- break;
- }
-
- if (result != (size_t)(-1)) {
- /* flush the shift-out sequences */
- for (;;) {
- result = iconv(cd, NULL, NULL, (char **) &out_p, &out_left);
- out_size = bsz - out_left;
-
- if (result != (size_t)(-1)) {
- break;
- }
-
- if (errno == E2BIG) {
- bsz += 16;
- tmp_buf = (char *) erealloc(out_buf, bsz);
-
- out_p = out_buf = tmp_buf;
- out_p += out_size;
- out_left = bsz - out_size;
- } else {
- break;
- }
- }
- }
-
- iconv_close(cd);
-
- if (result == (size_t)(-1)) {
- switch (errno) {
- case EINVAL:
- retval = PHP_ICONV_ERR_ILLEGAL_CHAR;
- break;
-
- case EILSEQ:
- retval = PHP_ICONV_ERR_ILLEGAL_SEQ;
- break;
-
- case E2BIG:
- /* should not happen */
- retval = PHP_ICONV_ERR_TOO_BIG;
- break;
-
- default:
- /* other error */
- retval = PHP_ICONV_ERR_UNKNOWN;
- efree(out_buf);
- return PHP_ICONV_ERR_UNKNOWN;
- }
- }
- *out_p = '\0';
- *out = out_buf;
- *out_len = out_size;
- return retval;
-#endif
-}
-/* }}} */
-
-/* {{{ _php_iconv_strlen() */
-static php_iconv_err_t _php_iconv_strlen(unsigned int *pretval, const char *str, size_t nbytes, const char *enc)
-{
- char buf[GENERIC_SUPERSET_NBYTES*2];
-
- php_iconv_err_t err = PHP_ICONV_ERR_SUCCESS;
-
- iconv_t cd;
-
- const char *in_p;
- size_t in_left;
-
- char *out_p;
- size_t out_left;
-
- unsigned int cnt;
-
- *pretval = (unsigned int)-1;
-
- cd = iconv_open(GENERIC_SUPERSET_NAME, enc);
-
- if (cd == (iconv_t)(-1)) {
-#if ICONV_SUPPORTS_ERRNO
- if (errno == EINVAL) {
- return PHP_ICONV_ERR_WRONG_CHARSET;
- } else {
- return PHP_ICONV_ERR_CONVERTER;
- }
-#else
- return PHP_ICONV_ERR_UNKNOWN;
-#endif
- }
-
- out_left = 0;
-
- for (in_p = str, in_left = nbytes, cnt = 0; in_left > 0; cnt+=2) {
- size_t prev_in_left;
- out_p = buf;
- out_left = sizeof(buf);
-
- prev_in_left = in_left;
-
- if (iconv(cd, (char **)&in_p, &in_left, (char **) &out_p, &out_left) == (size_t)-1) {
- if (prev_in_left == in_left) {
- break;
- }
- }
- }
-
- if (out_left > 0) {
- cnt -= out_left / GENERIC_SUPERSET_NBYTES;
- }
-
-#if ICONV_SUPPORTS_ERRNO
- switch (errno) {
- case EINVAL:
- err = PHP_ICONV_ERR_ILLEGAL_CHAR;
- break;
-
- case EILSEQ:
- err = PHP_ICONV_ERR_ILLEGAL_SEQ;
- break;
-
- case E2BIG:
- *pretval = cnt;
- break;
-
- default:
- err = PHP_ICONV_ERR_UNKNOWN;
- break;
- }
-#else
- *pretval = cnt;
-#endif
-
- iconv_close(cd);
-
- return err;
-}
-
-/* }}} */
-
-/* {{{ _php_iconv_substr() */
-static php_iconv_err_t _php_iconv_substr(smart_str *pretval,
- const char *str, size_t nbytes, int offset, int len, const char *enc)
-{
- char buf[GENERIC_SUPERSET_NBYTES];
-
- php_iconv_err_t err = PHP_ICONV_ERR_SUCCESS;
-
- iconv_t cd1, cd2;
-
- const char *in_p;
- size_t in_left;
-
- char *out_p;
- size_t out_left;
-
- unsigned int cnt;
-
- /* normalize the offset and the length */
- if (offset < 0 || len < 0) {
- unsigned int total_len;
- err = _php_iconv_strlen(&total_len, str, nbytes, enc);
- if (err != PHP_ICONV_ERR_SUCCESS) {
- return err;
- }
- if (offset < 0) {
- if ((offset += total_len) < 0) {
- offset = 0;
- }
- }
- if (len < 0) {
- if ((len += (total_len - offset)) < 0) {
- len = 0;
- }
- }
- }
-
- cd1 = iconv_open(GENERIC_SUPERSET_NAME, enc);
-
- if (cd1 == (iconv_t)(-1)) {
-#if ICONV_SUPPORTS_ERRNO
- if (errno == EINVAL) {
- return PHP_ICONV_ERR_WRONG_CHARSET;
- } else {
- return PHP_ICONV_ERR_CONVERTER;
- }
-#else
- return PHP_ICONV_ERR_UNKNOWN;
-#endif
- }
-
- cd2 = NULL;
-
- for (in_p = str, in_left = nbytes, cnt = 0; in_left > 0 && len > 0; ++cnt) {
- size_t prev_in_left;
- out_p = buf;
- out_left = sizeof(buf);
-
- prev_in_left = in_left;
-
- if (iconv(cd1, (char **)&in_p, &in_left, (char **) &out_p, &out_left) == (size_t)-1) {
- if (prev_in_left == in_left) {
- break;
- }
- }
-
- if (cnt >= (unsigned int)offset) {
- if (cd2 == NULL) {
- cd2 = iconv_open(enc, GENERIC_SUPERSET_NAME);
-
- if (cd2 == (iconv_t)(-1)) {
- cd2 = NULL;
-#if ICONV_SUPPORTS_ERRNO
- if (errno == EINVAL) {
- err = PHP_ICONV_ERR_WRONG_CHARSET;
- } else {
- err = PHP_ICONV_ERR_CONVERTER;
- }
-#else
- err = PHP_ICONV_ERR_UNKNOWN;
-#endif
- break;
- }
- }
-
- _php_iconv_appendl(pretval, buf, sizeof(buf), cd2);
- --len;
- }
-
- }
-
-#if ICONV_SUPPORTS_ERRNO
- switch (errno) {
- case EINVAL:
- err = PHP_ICONV_ERR_ILLEGAL_CHAR;
- break;
-
- case EILSEQ:
- err = PHP_ICONV_ERR_ILLEGAL_SEQ;
- break;
-
- case E2BIG:
- break;
-
- default:
- err = PHP_ICONV_ERR_UNKNOWN;
- break;
- }
-#endif
- if (err == PHP_ICONV_ERR_SUCCESS) {
- if (cd2 != NULL) {
- _php_iconv_appendl(pretval, NULL, 0, cd2);
- }
- smart_str_0(pretval);
- }
-
- if (cd1 != NULL) {
- iconv_close(cd1);
- }
-
- if (cd2 != NULL) {
- iconv_close(cd2);
- }
- return err;
-}
-
-/* }}} */
-
-/* {{{ _php_iconv_strpos() */
-static php_iconv_err_t _php_iconv_strpos(unsigned int *pretval,
- const char *haystk, size_t haystk_nbytes,
- const char *ndl, size_t ndl_nbytes,
- int offset, const char *enc)
-{
- char buf[GENERIC_SUPERSET_NBYTES];
-
- php_iconv_err_t err = PHP_ICONV_ERR_SUCCESS;
-
- iconv_t cd;
-
- const char *in_p;
- size_t in_left;
-
- char *out_p;
- size_t out_left;
-
- unsigned int cnt;
-
- char *ndl_buf;
- const char *ndl_buf_p;
- size_t ndl_buf_len, ndl_buf_left;
-
- unsigned int match_ofs;
-
- *pretval = (unsigned int)-1;
-
- err = php_iconv_string(ndl, ndl_nbytes,
- &ndl_buf, &ndl_buf_len, GENERIC_SUPERSET_NAME, enc);
-
- if (err != PHP_ICONV_ERR_SUCCESS) {
- if (ndl_buf != NULL) {
- efree(ndl_buf);
- }
- return err;
- }
-
- cd = iconv_open(GENERIC_SUPERSET_NAME, enc);
-
- if (cd == (iconv_t)(-1)) {
-#if ICONV_SUPPORTS_ERRNO
- if (errno == EINVAL) {
- return PHP_ICONV_ERR_WRONG_CHARSET;
- } else {
- return PHP_ICONV_ERR_CONVERTER;
- }
-#else
- return PHP_ICONV_ERR_UNKNOWN;
-#endif
- }
-
- ndl_buf_p = ndl_buf;
- ndl_buf_left = ndl_buf_len;
- match_ofs = (unsigned int)-1;
-
- for (in_p = haystk, in_left = haystk_nbytes, cnt = 0; in_left > 0; ++cnt) {
- size_t prev_in_left;
- out_p = buf;
- out_left = sizeof(buf);
-
- prev_in_left = in_left;
-
- if (iconv(cd, (char **)&in_p, &in_left, (char **) &out_p, &out_left) == (size_t)-1) {
- if (prev_in_left == in_left) {
-#if ICONV_SUPPORTS_ERRNO
- switch (errno) {
- case EINVAL:
- err = PHP_ICONV_ERR_ILLEGAL_CHAR;
- break;
-
- case EILSEQ:
- err = PHP_ICONV_ERR_ILLEGAL_SEQ;
- break;
-
- case E2BIG:
- break;
-
- default:
- err = PHP_ICONV_ERR_UNKNOWN;
- break;
- }
-#endif
- break;
- }
- }
- if (offset >= 0) {
- if (cnt >= (unsigned int)offset) {
- if (_php_iconv_memequal(buf, ndl_buf_p, sizeof(buf))) {
- if (match_ofs == (unsigned int)-1) {
- match_ofs = cnt;
- }
- ndl_buf_p += GENERIC_SUPERSET_NBYTES;
- ndl_buf_left -= GENERIC_SUPERSET_NBYTES;
- if (ndl_buf_left == 0) {
- *pretval = match_ofs;
- break;
- }
- } else {
- unsigned int i, j, lim;
-
- i = 0;
- j = GENERIC_SUPERSET_NBYTES;
- lim = (unsigned int)(ndl_buf_p - ndl_buf);
-
- while (j < lim) {
- if (_php_iconv_memequal(&ndl_buf[j], &ndl_buf[i],
- GENERIC_SUPERSET_NBYTES)) {
- i += GENERIC_SUPERSET_NBYTES;
- } else {
- j -= i;
- i = 0;
- }
- j += GENERIC_SUPERSET_NBYTES;
- }
-
- if (!_php_iconv_memequal(buf, &ndl_buf[i], sizeof(buf))) {
- i = 0;
- }
-
- if (i == 0) {
- match_ofs = (unsigned int)-1;
- } else {
- match_ofs += (lim - i) / GENERIC_SUPERSET_NBYTES;
- i += GENERIC_SUPERSET_NBYTES;
- }
- ndl_buf_p = &ndl_buf[i];
- ndl_buf_left = ndl_buf_len - i;
- }
- }
- } else {
- if (_php_iconv_memequal(buf, ndl_buf_p, sizeof(buf))) {
- if (match_ofs == (unsigned int)-1) {
- match_ofs = cnt;
- }
- ndl_buf_p += GENERIC_SUPERSET_NBYTES;
- ndl_buf_left -= GENERIC_SUPERSET_NBYTES;
- if (ndl_buf_left == 0) {
- *pretval = match_ofs;
- ndl_buf_p = ndl_buf;
- ndl_buf_left = ndl_buf_len;
- match_ofs = -1;
- }
- } else {
- unsigned int i, j, lim;
-
- i = 0;
- j = GENERIC_SUPERSET_NBYTES;
- lim = (unsigned int)(ndl_buf_p - ndl_buf);
-
- while (j < lim) {
- if (_php_iconv_memequal(&ndl_buf[j], &ndl_buf[i],
- GENERIC_SUPERSET_NBYTES)) {
- i += GENERIC_SUPERSET_NBYTES;
- } else {
- j -= i;
- i = 0;
- }
- j += GENERIC_SUPERSET_NBYTES;
- }
-
- if (!_php_iconv_memequal(buf, &ndl_buf[i], sizeof(buf))) {
- i = 0;
- }
-
- if (i == 0) {
- match_ofs = (unsigned int)-1;
- } else {
- match_ofs += (lim - i) / GENERIC_SUPERSET_NBYTES;
- i += GENERIC_SUPERSET_NBYTES;
- }
- ndl_buf_p = &ndl_buf[i];
- ndl_buf_left = ndl_buf_len - i;
- }
- }
- }
-
- if (ndl_buf) {
- efree(ndl_buf);
- }
-
- iconv_close(cd);
-
- return err;
-}
-/* }}} */
-
-/* {{{ _php_iconv_mime_encode() */
-static php_iconv_err_t _php_iconv_mime_encode(smart_str *pretval, const char *fname, size_t fname_nbytes, const char *fval, size_t fval_nbytes, unsigned int max_line_len, const char *lfchars, php_iconv_enc_scheme_t enc_scheme, const char *out_charset, const char *enc)
-{
- php_iconv_err_t err = PHP_ICONV_ERR_SUCCESS;
- iconv_t cd = (iconv_t)(-1), cd_pl = (iconv_t)(-1);
- unsigned int char_cnt = 0;
- size_t out_charset_len;
- size_t lfchars_len;
- char *buf = NULL;
- char *encoded = NULL;
- size_t encoded_len;
- const char *in_p;
- size_t in_left;
- char *out_p;
- size_t out_left;
- static int qp_table[256] = {
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, /* 0x00 */
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, /* 0x10 */
- 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /* 0x20 */
- 1, 1, 1, 1, 1, 1, 1 ,1, 1, 1, 1, 1, 1, 3, 1, 3, /* 0x30 */
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /* 0x40 */
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, /* 0x50 */
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /* 0x60 */
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, /* 0x70 */
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, /* 0x80 */
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, /* 0x90 */
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, /* 0xA0 */
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, /* 0xB0 */
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, /* 0xC0 */
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, /* 0xD0 */
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, /* 0xE0 */
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 /* 0xF0 */
- };
-
- out_charset_len = strlen(out_charset);
- lfchars_len = strlen(lfchars);
-
- if ((fname_nbytes + 2) >= max_line_len
- || (out_charset_len + 12) >= max_line_len) {
- /* field name is too long */
- err = PHP_ICONV_ERR_TOO_BIG;
- goto out;
- }
-
- cd_pl = iconv_open("ASCII", enc);
- if (cd_pl == (iconv_t)(-1)) {
-#if ICONV_SUPPORTS_ERRNO
- if (errno == EINVAL) {
- err = PHP_ICONV_ERR_WRONG_CHARSET;
- } else {
- err = PHP_ICONV_ERR_CONVERTER;
- }
-#else
- err = PHP_ICONV_ERR_UNKNOWN;
-#endif
- goto out;
- }
-
- cd = iconv_open(out_charset, enc);
- if (cd == (iconv_t)(-1)) {
-#if ICONV_SUPPORTS_ERRNO
- if (errno == EINVAL) {
- err = PHP_ICONV_ERR_WRONG_CHARSET;
- } else {
- err = PHP_ICONV_ERR_CONVERTER;
- }
-#else
- err = PHP_ICONV_ERR_UNKNOWN;
-#endif
- goto out;
- }
-
- buf = emalloc(max_line_len + 5);
-
- char_cnt = max_line_len;
-
- _php_iconv_appendl(pretval, fname, fname_nbytes, cd_pl);
- char_cnt -= fname_nbytes;
- smart_str_appendl(pretval, ": ", sizeof(": ") - 1);
- char_cnt -= 2;
-
- in_p = fval;
- in_left = fval_nbytes;
-
- do {
- size_t prev_in_left;
- size_t out_size;
-
- if (char_cnt < (out_charset_len + 12)) {
- /* lfchars must be encoded in ASCII here*/
- smart_str_appendl(pretval, lfchars, lfchars_len);
- smart_str_appendc(pretval, ' ');
- char_cnt = max_line_len - 1;
- }
-
- smart_str_appendl(pretval, "=?", sizeof("=?") - 1);
- char_cnt -= 2;
- smart_str_appendl(pretval, out_charset, out_charset_len);
- char_cnt -= out_charset_len;
- smart_str_appendc(pretval, '?');
- char_cnt --;
-
- switch (enc_scheme) {
- case PHP_ICONV_ENC_SCHEME_BASE64: {
- size_t ini_in_left;
- const char *ini_in_p;
- size_t out_reserved = 4;
- int dummy;
-
- smart_str_appendc(pretval, 'B');
- char_cnt--;
- smart_str_appendc(pretval, '?');
- char_cnt--;
-
- prev_in_left = ini_in_left = in_left;
- ini_in_p = in_p;
-
- out_size = (char_cnt - 2) / 4 * 3;
-
- for (;;) {
- out_p = buf;
-
- if (out_size <= out_reserved) {
- err = PHP_ICONV_ERR_TOO_BIG;
- goto out;
- }
-
- out_left = out_size - out_reserved;
-
- if (iconv(cd, (char **)&in_p, &in_left, (char **) &out_p, &out_left) == (size_t)-1) {
-#if ICONV_SUPPORTS_ERRNO
- switch (errno) {
- case EINVAL:
- err = PHP_ICONV_ERR_ILLEGAL_CHAR;
- goto out;
-
- case EILSEQ:
- err = PHP_ICONV_ERR_ILLEGAL_SEQ;
- goto out;
-
- case E2BIG:
- if (prev_in_left == in_left) {
- err = PHP_ICONV_ERR_TOO_BIG;
- goto out;
- }
- break;
-
- default:
- err = PHP_ICONV_ERR_UNKNOWN;
- goto out;
- }
-#else
- if (prev_in_left == in_left) {
- err = PHP_ICONV_ERR_UNKNOWN;
- goto out;
- }
-#endif
- }
-
- out_left += out_reserved;
-
- if (iconv(cd, NULL, NULL, (char **) &out_p, &out_left) == (size_t)-1) {
-#if ICONV_SUPPORTS_ERRNO
- if (errno != E2BIG) {
- err = PHP_ICONV_ERR_UNKNOWN;
- goto out;
- }
-#else
- if (out_left != 0) {
- err = PHP_ICONV_ERR_UNKNOWN;
- goto out;
- }
-#endif
- } else {
- break;
- }
-
- if (iconv(cd, NULL, NULL, NULL, NULL) == (size_t)-1) {
- err = PHP_ICONV_ERR_UNKNOWN;
- goto out;
- }
-
- out_reserved += 4;
- in_left = ini_in_left;
- in_p = ini_in_p;
- }
-
- prev_in_left = in_left;
-
- encoded = php_base64_encode(buf, (int)(out_size - out_left), &dummy);
- encoded_len = (size_t)dummy;
-
- if (char_cnt < encoded_len) {
- /* something went wrong! */
- err = PHP_ICONV_ERR_UNKNOWN;
- goto out;
- }
-
- smart_str_appendl(pretval, encoded, encoded_len);
- char_cnt -= encoded_len;
- smart_str_appendl(pretval, "?=", sizeof("?=") - 1);
- char_cnt -= 2;
-
- efree(encoded);
- encoded = NULL;
- } break; /* case PHP_ICONV_ENC_SCHEME_BASE64: */
-
- case PHP_ICONV_ENC_SCHEME_QPRINT: {
- size_t ini_in_left;
- const char *ini_in_p;
- const unsigned char *p;
- size_t nbytes_required;
-
- smart_str_appendc(pretval, 'Q');
- char_cnt--;
- smart_str_appendc(pretval, '?');
- char_cnt--;
-
- prev_in_left = ini_in_left = in_left;
- ini_in_p = in_p;
-
- for (out_size = char_cnt; out_size > 0;) {
- size_t prev_out_left;
-
- nbytes_required = 0;
-
- out_p = buf;
- out_left = out_size;
-
- if (iconv(cd, (char **)&in_p, &in_left, (char **) &out_p, &out_left) == (size_t)-1) {
-#if ICONV_SUPPORTS_ERRNO
- switch (errno) {
- case EINVAL:
- err = PHP_ICONV_ERR_ILLEGAL_CHAR;
- goto out;
-
- case EILSEQ:
- err = PHP_ICONV_ERR_ILLEGAL_SEQ;
- goto out;
-
- case E2BIG:
- if (prev_in_left == in_left) {
- err = PHP_ICONV_ERR_UNKNOWN;
- goto out;
- }
- break;
-
- default:
- err = PHP_ICONV_ERR_UNKNOWN;
- goto out;
- }
-#else
- if (prev_in_left == in_left) {
- err = PHP_ICONV_ERR_UNKNOWN;
- goto out;
- }
-#endif
- }
-
- prev_out_left = out_left;
- if (iconv(cd, NULL, NULL, (char **) &out_p, &out_left) == (size_t)-1) {
-#if ICONV_SUPPORTS_ERRNO
- if (errno != E2BIG) {
- err = PHP_ICONV_ERR_UNKNOWN;
- goto out;
- }
-#else
- if (out_left == prev_out_left) {
- err = PHP_ICONV_ERR_UNKNOWN;
- goto out;
- }
-#endif
- }
-
- for (p = (unsigned char *)buf; p < (unsigned char *)out_p; p++) {
- nbytes_required += qp_table[*p];
- }
-
- if (nbytes_required <= char_cnt - 2) {
- break;
- }
-
- out_size -= ((nbytes_required - (char_cnt - 2)) + 1) / (3 - 1);
- in_left = ini_in_left;
- in_p = ini_in_p;
- }
-
- for (p = (unsigned char *)buf; p < (unsigned char *)out_p; p++) {
- if (qp_table[*p] == 1) {
- smart_str_appendc(pretval, *(char *)p);
- char_cnt--;
- } else {
- static char qp_digits[] = "0123456789ABCDEF";
- smart_str_appendc(pretval, '=');
- smart_str_appendc(pretval, qp_digits[(*p >> 4) & 0x0f]);
- smart_str_appendc(pretval, qp_digits[(*p & 0x0f)]);
- char_cnt -= 3;
- }
- }
- prev_in_left = in_left;
-
- smart_str_appendl(pretval, "?=", sizeof("?=") - 1);
- char_cnt -= 2;
-
- if (iconv(cd, NULL, NULL, NULL, NULL) == (size_t)-1) {
- err = PHP_ICONV_ERR_UNKNOWN;
- goto out;
- }
-
- } break; /* case PHP_ICONV_ENC_SCHEME_QPRINT: */
- }
- } while (in_left > 0);
-
- smart_str_0(pretval);
-
-out:
- if (cd != (iconv_t)(-1)) {
- iconv_close(cd);
- }
- if (cd_pl != (iconv_t)(-1)) {
- iconv_close(cd_pl);
- }
- if (encoded != NULL) {
- efree(encoded);
- }
- if (buf != NULL) {
- efree(buf);
- }
- return err;
-}
-/* }}} */
-
-/* {{{ _php_iconv_mime_decode() */
-static php_iconv_err_t _php_iconv_mime_decode(smart_str *pretval, const char *str, size_t str_nbytes, const char *enc, const char **next_pos, int mode)
-{
- php_iconv_err_t err = PHP_ICONV_ERR_SUCCESS;
-
- iconv_t cd = (iconv_t)(-1), cd_pl = (iconv_t)(-1);
-
- const char *p1;
- size_t str_left;
- unsigned int scan_stat = 0;
- const char *csname = NULL;
- size_t csname_len;
- const char *encoded_text = NULL;
- size_t encoded_text_len = 0;
- const char *encoded_word = NULL;
- const char *spaces = NULL;
-
- php_iconv_enc_scheme_t enc_scheme = 0;
-
- if (next_pos != NULL) {
- *next_pos = NULL;
- }
-
- cd_pl = iconv_open(enc, "ASCII");
-
- if (cd_pl == (iconv_t)(-1)) {
-#if ICONV_SUPPORTS_ERRNO
- if (errno == EINVAL) {
- err = PHP_ICONV_ERR_WRONG_CHARSET;
- } else {
- err = PHP_ICONV_ERR_CONVERTER;
- }
-#else
- err = PHP_ICONV_ERR_UNKNOWN;
-#endif
- goto out;
- }
-
- p1 = str;
- for (str_left = str_nbytes; str_left > 0; str_left--, p1++) {
- int eos = 0;
-
- switch (scan_stat) {
- case 0: /* expecting any character */
- switch (*p1) {
- case '\r': /* part of an EOL sequence? */
- scan_stat = 7;
- break;
-
- case '\n':
- scan_stat = 8;
- break;
-
- case '=': /* first letter of an encoded chunk */
- encoded_word = p1;
- scan_stat = 1;
- break;
-
- case ' ': case '\t': /* a chunk of whitespaces */
- spaces = p1;
- scan_stat = 11;
- break;
-
- default: /* first letter of a non-encoded word */
- _php_iconv_appendc(pretval, *p1, cd_pl);
- encoded_word = NULL;
- if ((mode & PHP_ICONV_MIME_DECODE_STRICT)) {
- scan_stat = 12;
- }
- break;
- }
- break;
-
- case 1: /* expecting a delimiter */
- if (*p1 != '?') {
- err = _php_iconv_appendl(pretval, encoded_word, (size_t)((p1 + 1) - encoded_word), cd_pl);
- if (err != PHP_ICONV_ERR_SUCCESS) {
- goto out;
- }
- encoded_word = NULL;
- if ((mode & PHP_ICONV_MIME_DECODE_STRICT)) {
- scan_stat = 12;
- } else {
- scan_stat = 0;
- }
- break;
- }
- csname = p1 + 1;
- scan_stat = 2;
- break;
-
- case 2: /* expecting a charset name */
- switch (*p1) {
- case '?': /* normal delimiter: encoding scheme follows */
- scan_stat = 3;
- break;
-
- case '*': /* new style delimiter: locale id follows */
- scan_stat = 10;
- break;
- }
- if (scan_stat != 2) {
- char tmpbuf[80];
-
- if (csname == NULL) {
- err = PHP_ICONV_ERR_MALFORMED;
- goto out;
- }
-
- csname_len = (size_t)(p1 - csname);
-
- if (csname_len > sizeof(tmpbuf) - 1) {
- if ((mode & PHP_ICONV_MIME_DECODE_CONTINUE_ON_ERROR)) {
- err = _php_iconv_appendl(pretval, encoded_word, (size_t)((p1 + 1) - encoded_word), cd_pl);
- if (err != PHP_ICONV_ERR_SUCCESS) {
- goto out;
- }
- encoded_word = NULL;
- if ((mode & PHP_ICONV_MIME_DECODE_STRICT)) {
- scan_stat = 12;
- } else {
- scan_stat = 0;
- }
- break;
- } else {
- err = PHP_ICONV_ERR_MALFORMED;
- goto out;
- }
- }
-
- memcpy(tmpbuf, csname, csname_len);
- tmpbuf[csname_len] = '\0';
-
- if (cd != (iconv_t)(-1)) {
- iconv_close(cd);
- }
-
- cd = iconv_open(enc, tmpbuf);
-
- if (cd == (iconv_t)(-1)) {
- if ((mode & PHP_ICONV_MIME_DECODE_CONTINUE_ON_ERROR)) {
- err = _php_iconv_appendl(pretval, encoded_word, (size_t)((p1 + 1) - encoded_word), cd);
- if (err != PHP_ICONV_ERR_SUCCESS) {
- goto out;
- }
- encoded_word = NULL;
- if ((mode & PHP_ICONV_MIME_DECODE_STRICT)) {
- scan_stat = 12;
- } else {
- scan_stat = 0;
- }
- break;
- } else {
-#if ICONV_SUPPORTS_ERRNO
- if (errno == EINVAL) {
- err = PHP_ICONV_ERR_WRONG_CHARSET;
- } else {
- err = PHP_ICONV_ERR_CONVERTER;
- }
-#else
- err = PHP_ICONV_ERR_UNKNOWN;
-#endif
- goto out;
- }
- }
- }
- break;
-
- case 3: /* expecting a encoding scheme specifier */
- switch (*p1) {
- case 'B':
- enc_scheme = PHP_ICONV_ENC_SCHEME_BASE64;
- scan_stat = 4;
- break;
-
- case 'Q':
- enc_scheme = PHP_ICONV_ENC_SCHEME_QPRINT;
- scan_stat = 4;
- break;
-
- default:
- if ((mode & PHP_ICONV_MIME_DECODE_CONTINUE_ON_ERROR)) {
- err = _php_iconv_appendl(pretval, encoded_word, (size_t)((p1 + 1) - encoded_word), cd_pl);
- if (err != PHP_ICONV_ERR_SUCCESS) {
- goto out;
- }
- encoded_word = NULL;
- if ((mode & PHP_ICONV_MIME_DECODE_STRICT)) {
- scan_stat = 12;
- } else {
- scan_stat = 0;
- }
- break;
- } else {
- err = PHP_ICONV_ERR_MALFORMED;
- goto out;
- }
- }
- break;
-
- case 4: /* expecting a delimiter */
- if (*p1 != '?') {
- if ((mode & PHP_ICONV_MIME_DECODE_CONTINUE_ON_ERROR)) {
- /* pass the entire chunk through the converter */
- err = _php_iconv_appendl(pretval, encoded_word, (size_t)((p1 + 1) - encoded_word), cd_pl);
- if (err != PHP_ICONV_ERR_SUCCESS) {
- goto out;
- }
- encoded_word = NULL;
- if ((mode & PHP_ICONV_MIME_DECODE_STRICT)) {
- scan_stat = 12;
- } else {
- scan_stat = 0;
- }
- break;
- } else {
- err = PHP_ICONV_ERR_MALFORMED;
- goto out;
- }
- }
- encoded_text = p1 + 1;
- scan_stat = 5;
- break;
-
- case 5: /* expecting an encoded portion */
- if (*p1 == '?') {
- encoded_text_len = (size_t)(p1 - encoded_text);
- scan_stat = 6;
- }
- break;
-
- case 7: /* expecting a "\n" character */
- if (*p1 == '\n') {
- scan_stat = 8;
- } else {
- /* bare CR */
- _php_iconv_appendc(pretval, '\r', cd_pl);
- _php_iconv_appendc(pretval, *p1, cd_pl);
- scan_stat = 0;
- }
- break;
-
- case 8: /* checking whether the following line is part of a
- folded header */
- if (*p1 != ' ' && *p1 != '\t') {
- --p1;
- str_left = 1; /* quit_loop */
- break;
- }
- if (encoded_word == NULL) {
- _php_iconv_appendc(pretval, ' ', cd_pl);
- }
- spaces = NULL;
- scan_stat = 11;
- break;
-
- case 6: /* expecting a End-Of-Chunk character "=" */
- if (*p1 != '=') {
- if ((mode & PHP_ICONV_MIME_DECODE_CONTINUE_ON_ERROR)) {
- /* pass the entire chunk through the converter */
- err = _php_iconv_appendl(pretval, encoded_word, (size_t)((p1 + 1) - encoded_word), cd_pl);
- if (err != PHP_ICONV_ERR_SUCCESS) {
- goto out;
- }
- encoded_word = NULL;
- if ((mode & PHP_ICONV_MIME_DECODE_STRICT)) {
- scan_stat = 12;
- } else {
- scan_stat = 0;
- }
- break;
- } else {
- err = PHP_ICONV_ERR_MALFORMED;
- goto out;
- }
- }
- scan_stat = 9;
- if (str_left == 1) {
- eos = 1;
- } else {
- break;
- }
-
- case 9: /* choice point, seeing what to do next.*/
- switch (*p1) {
- default:
- /* Handle non-RFC-compliant formats
- *
- * RFC2047 requires the character that comes right
- * after an encoded word (chunk) to be a whitespace,
- * while there are lots of broken implementations that
- * generate such malformed headers that don't fulfill
- * that requirement.
- */
- if (!eos) {
- if ((mode & PHP_ICONV_MIME_DECODE_STRICT)) {
- /* pass the entire chunk through the converter */
- err = _php_iconv_appendl(pretval, encoded_word, (size_t)((p1 + 1) - encoded_word), cd_pl);
- if (err != PHP_ICONV_ERR_SUCCESS) {
- goto out;
- }
- scan_stat = 12;
- break;
- }
- }
- /* break is omitted intentionally */
-
- case '\r': case '\n': case ' ': case '\t': {
- char *decoded_text;
- size_t decoded_text_len;
- int dummy;
-
- switch (enc_scheme) {
- case PHP_ICONV_ENC_SCHEME_BASE64:
- decoded_text = (char *)php_base64_decode((unsigned char*)encoded_text, (int)encoded_text_len, &dummy);
- decoded_text_len = (size_t)dummy;
- break;
-
- case PHP_ICONV_ENC_SCHEME_QPRINT:
- decoded_text = (char *)php_quot_print_decode((unsigned char*)encoded_text, (int)encoded_text_len, &decoded_text_len, 1);
- break;
- default:
- decoded_text = NULL;
- break;
- }
-
- if (decoded_text == NULL) {
- if ((mode & PHP_ICONV_MIME_DECODE_CONTINUE_ON_ERROR)) {
- /* pass the entire chunk through the converter */
- err = _php_iconv_appendl(pretval, encoded_word, (size_t)((p1 + 1) - encoded_word), cd_pl);
- if (err != PHP_ICONV_ERR_SUCCESS) {
- goto out;
- }
- encoded_word = NULL;
- if ((mode & PHP_ICONV_MIME_DECODE_STRICT)) {
- scan_stat = 12;
- } else {
- scan_stat = 0;
- }
- break;
- } else {
- err = PHP_ICONV_ERR_UNKNOWN;
- goto out;
- }
- }
-
- err = _php_iconv_appendl(pretval, decoded_text, decoded_text_len, cd);
- efree(decoded_text);
-
- if (err != PHP_ICONV_ERR_SUCCESS) {
- if ((mode & PHP_ICONV_MIME_DECODE_CONTINUE_ON_ERROR)) {
- /* pass the entire chunk through the converter */
- err = _php_iconv_appendl(pretval, encoded_word, (size_t)(p1 - encoded_word), cd_pl);
- if (err != PHP_ICONV_ERR_SUCCESS) {
- goto out;
- }
- encoded_word = NULL;
- } else {
- goto out;
- }
- }
-
- if (eos) { /* reached end-of-string. done. */
- scan_stat = 0;
- break;
- }
-
- switch (*p1) {
- case '\r': /* part of an EOL sequence? */
- scan_stat = 7;
- break;
-
- case '\n':
- scan_stat = 8;
- break;
-
- case '=': /* first letter of an encoded chunk */
- scan_stat = 1;
- break;
-
- case ' ': case '\t': /* medial whitespaces */
- spaces = p1;
- scan_stat = 11;
- break;
-
- default: /* first letter of a non-encoded word */
- _php_iconv_appendc(pretval, *p1, cd_pl);
- scan_stat = 12;
- break;
- }
- } break;
- }
- break;
-
- case 10: /* expects a language specifier. dismiss it for now */
- if (*p1 == '?') {
- scan_stat = 3;
- }
- break;
-
- case 11: /* expecting a chunk of whitespaces */
- switch (*p1) {
- case '\r': /* part of an EOL sequence? */
- scan_stat = 7;
- break;
-
- case '\n':
- scan_stat = 8;
- break;
-
- case '=': /* first letter of an encoded chunk */
- if (spaces != NULL && encoded_word == NULL) {
- _php_iconv_appendl(pretval, spaces, (size_t)(p1 - spaces), cd_pl);
- spaces = NULL;
- }
- encoded_word = p1;
- scan_stat = 1;
- break;
-
- case ' ': case '\t':
- break;
-
- default: /* first letter of a non-encoded word */
- if (spaces != NULL) {
- _php_iconv_appendl(pretval, spaces, (size_t)(p1 - spaces), cd_pl);
- spaces = NULL;
- }
- _php_iconv_appendc(pretval, *p1, cd_pl);
- encoded_word = NULL;
- if ((mode & PHP_ICONV_MIME_DECODE_STRICT)) {
- scan_stat = 12;
- } else {
- scan_stat = 0;
- }
- break;
- }
- break;
-
- case 12: /* expecting a non-encoded word */
- switch (*p1) {
- case '\r': /* part of an EOL sequence? */
- scan_stat = 7;
- break;
-
- case '\n':
- scan_stat = 8;
- break;
-
- case ' ': case '\t':
- spaces = p1;
- scan_stat = 11;
- break;
-
- case '=': /* first letter of an encoded chunk */
- if (!(mode & PHP_ICONV_MIME_DECODE_STRICT)) {
- encoded_word = p1;
- scan_stat = 1;
- break;
- }
- /* break is omitted intentionally */
-
- default:
- _php_iconv_appendc(pretval, *p1, cd_pl);
- break;
- }
- break;
- }
- }
- switch (scan_stat) {
- case 0: case 8: case 11: case 12:
- break;
- default:
- if ((mode & PHP_ICONV_MIME_DECODE_CONTINUE_ON_ERROR)) {
- if (scan_stat == 1) {
- _php_iconv_appendc(pretval, '=', cd_pl);
- }
- err = 0;
- } else {
- err = PHP_ICONV_ERR_MALFORMED;
- goto out;
- }
- }
-
- if (next_pos != NULL) {
- *next_pos = p1;
- }
-
- smart_str_0(pretval);
-out:
- if (cd != (iconv_t)(-1)) {
- iconv_close(cd);
- }
- if (cd_pl != (iconv_t)(-1)) {
- iconv_close(cd_pl);
- }
- return err;
-}
-/* }}} */
-
-/* {{{ php_iconv_show_error() */
-static void _php_iconv_show_error(php_iconv_err_t err, const char *out_charset, const char *in_charset TSRMLS_DC)
-{
- switch (err) {
- case PHP_ICONV_ERR_SUCCESS:
- break;
-
- case PHP_ICONV_ERR_CONVERTER:
- php_error_docref(NULL TSRMLS_CC, E_NOTICE, "Cannot open converter");
- break;
-
- case PHP_ICONV_ERR_WRONG_CHARSET:
- php_error_docref(NULL TSRMLS_CC, E_NOTICE, "Wrong charset, conversion from `%s' to `%s' is not allowed",
- in_charset, out_charset);
- break;
-
- case PHP_ICONV_ERR_ILLEGAL_CHAR:
- php_error_docref(NULL TSRMLS_CC, E_NOTICE, "Detected an incomplete multibyte character in input string");
- break;
-
- case PHP_ICONV_ERR_ILLEGAL_SEQ:
- php_error_docref(NULL TSRMLS_CC, E_NOTICE, "Detected an illegal character in input string");
- break;
-
- case PHP_ICONV_ERR_TOO_BIG:
- /* should not happen */
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Run out of buffer");
- break;
-
- case PHP_ICONV_ERR_MALFORMED:
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Malformed string");
- break;
-
- default:
- /* other error */
- php_error_docref(NULL TSRMLS_CC, E_NOTICE, "Unknown error (%d)", errno);
- break;
- }
-}
-/* }}} */
-
-/* {{{ proto int iconv_strlen(string str [, string charset])
- Returns the character count of str */
-PHP_FUNCTION(iconv_strlen)
-{
- char *charset;
- int charset_len;
- char *str;
- int str_len;
-
- php_iconv_err_t err;
-
- unsigned int retval;
-
- charset = ICONVG(internal_encoding);
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|s",
- &str, &str_len, &charset, &charset_len) == FAILURE) {
- RETURN_FALSE;
- }
-
- err = _php_iconv_strlen(&retval, str, str_len, charset);
- _php_iconv_show_error(err, GENERIC_SUPERSET_NAME, charset TSRMLS_CC);
- if (err == PHP_ICONV_ERR_SUCCESS) {
- RETVAL_LONG(retval);
- } else {
- RETVAL_FALSE;
- }
-}
-/* }}} */
-
-/* {{{ proto string iconv_substr(string str, int offset, [int length, string charset])
- Returns specified part of a string */
-PHP_FUNCTION(iconv_substr)
-{
- char *charset;
- int charset_len;
- char *str;
- int str_len;
- long offset, length;
- zval *len_z = NULL;
-
- php_iconv_err_t err;
-
- smart_str retval = {0};
-
- charset = ICONVG(internal_encoding);
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "sl|zs",
- &str, &str_len, &offset, &len_z,
- &charset, &charset_len) == FAILURE) {
- RETURN_FALSE;
- }
-
- if (len_z == NULL) {
- length = str_len;
- } else {
- convert_to_long_ex(&len_z);
- length = Z_LVAL_P(len_z);
- }
-
- err = _php_iconv_substr(&retval, str, str_len, offset, length, charset);
- _php_iconv_show_error(err, GENERIC_SUPERSET_NAME, charset TSRMLS_CC);
-
- if (err == PHP_ICONV_ERR_SUCCESS && str != NULL) {
- if (retval.c != NULL) {
- RETVAL_STRINGL(retval.c, retval.len, 0);
- } else {
- RETVAL_EMPTY_STRING();
- }
- } else {
- smart_str_free(&retval);
- RETVAL_FALSE;
- }
-}
-/* }}} */
-
-/* {{{ proto int iconv_strpos(string haystack, string needle, int offset [, string charset])
- Finds position of first occurrence of needle within part of haystack beginning with offset */
-PHP_FUNCTION(iconv_strpos)
-{
- char *charset;
- int charset_len;
- char *haystk;
- int haystk_len;
- char *ndl;
- int ndl_len;
- long offset;
-
- php_iconv_err_t err;
-
- unsigned int retval;
-
- offset = 0;
- charset = ICONVG(internal_encoding);
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ss|ls",
- &haystk, &haystk_len, &ndl, &ndl_len,
- &offset, &charset, &charset_len) == FAILURE) {
- RETURN_FALSE;
- }
-
- if (offset < 0) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Offset not contained in string.");
- RETURN_FALSE;
- }
-
- err = _php_iconv_strpos(&retval, haystk, haystk_len, ndl, ndl_len,
- offset, charset);
- _php_iconv_show_error(err, GENERIC_SUPERSET_NAME, charset TSRMLS_CC);
-
- if (err == PHP_ICONV_ERR_SUCCESS && retval != (unsigned int)-1) {
- RETVAL_LONG((long)retval);
- } else {
- RETVAL_FALSE;
- }
-}
-/* }}} */
-
-/* {{{ proto int iconv_strrpos(string haystack, string needle [, string charset])
- Finds position of last occurrence of needle within part of haystack beginning with offset */
-PHP_FUNCTION(iconv_strrpos)
-{
- char *charset;
- int charset_len;
- char *haystk;
- int haystk_len;
- char *ndl;
- int ndl_len;
-
- php_iconv_err_t err;
-
- unsigned int retval;
-
- charset = ICONVG(internal_encoding);
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ss|s",
- &haystk, &haystk_len, &ndl, &ndl_len,
- &charset, &charset_len) == FAILURE) {
- RETURN_FALSE;
- }
-
- err = _php_iconv_strpos(&retval, haystk, haystk_len, ndl, ndl_len,
- -1, charset);
- _php_iconv_show_error(err, GENERIC_SUPERSET_NAME, charset TSRMLS_CC);
-
- if (err == PHP_ICONV_ERR_SUCCESS && retval != (unsigned int)-1) {
- RETVAL_LONG((long)retval);
- } else {
- RETVAL_FALSE;
- }
-}
-/* }}} */
-
-/* {{{ proto string iconv_mime_encode(string field_name, string field_value, [, array preference])
- Composes a mime header field with field_name and field_value in a specified scheme */
-PHP_FUNCTION(iconv_mime_encode)
-{
- char *field_name;
- int field_name_len;
- char *field_value;
- int field_value_len;
- zval *pref;
- zval val, *pval, **ppval;
- char *in_charset;
- char *out_charset;
- long line_len = 76;
- zval lfchars;
-
- php_iconv_enc_scheme_t scheme_id = PHP_ICONV_ENC_SCHEME_BASE64;
-
- smart_str retval = {0};
-
- php_iconv_err_t err;
-
- in_charset = ICONVG(internal_encoding);
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ss|a",
- &field_name, &field_name_len, &field_value, &field_value_len,
- &pref) == FAILURE) {
-
- RETURN_FALSE;
- }
-
- if (zend_hash_find(Z_ARRVAL_P(pref), "scheme", sizeof("scheme"), (void **)&ppval) == SUCCESS) {
- if (Z_TYPE_PP(ppval) == IS_STRING && Z_STRLEN_PP(ppval) > 0) {
- switch (Z_STRVAL_PP(ppval)[0]) {
- case 'B': case 'b':
- scheme_id = PHP_ICONV_ENC_SCHEME_BASE64;
- break;
-
- case 'Q': case 'q':
- scheme_id = PHP_ICONV_ENC_SCHEME_QPRINT;
- break;
- }
- }
- }
-
- in_charset = ICONVG(internal_encoding);
-
- if (zend_hash_find(Z_ARRVAL_P(pref), "input-charset", sizeof("input-charset"), (void **)&ppval) == SUCCESS) {
- if (Z_TYPE_PP(ppval) == IS_STRING && Z_STRLEN_PP(ppval) > 0) {
- in_charset = Z_STRVAL_PP(ppval);
- }
- }
-
- out_charset = in_charset;
-
- if (zend_hash_find(Z_ARRVAL_P(pref), "output-charset", sizeof("output-charset"), (void **)&ppval) == SUCCESS) {
- if (Z_TYPE_PP(ppval) == IS_STRING && Z_STRLEN_PP(ppval) > 0) {
- out_charset = Z_STRVAL_PP(ppval);
- }
- }
-
- if (zend_hash_find(Z_ARRVAL_P(pref), "line-length", sizeof("line-length"), (void **)&ppval) == SUCCESS) {
- pval = *ppval;
- if (Z_TYPE_P(pval) != IS_LONG) {
- val = *pval;
- zval_copy_ctor(&val);
- convert_to_long(&val);
- pval = &val;
- }
-
- line_len = Z_LVAL_P(pval);
-
- if (pval == &val) {
- zval_dtor(&val);
- }
- }
-
- if (zend_hash_find(Z_ARRVAL_P(pref), "line-break-chars", sizeof("line-break-chars"), (void **)&ppval) == SUCCESS) {
- lfchars = **ppval;
- zval_copy_ctor(&lfchars);
-
- if (Z_TYPE(lfchars) != IS_STRING) {
- convert_to_string(&lfchars);
- }
- } else {
- ZVAL_STRING(&lfchars, "\r\n", 1);
- }
-
- err = _php_iconv_mime_encode(&retval, field_name, field_name_len,
- field_value, field_value_len, line_len, Z_STRVAL(lfchars), scheme_id,
- out_charset, in_charset);
- _php_iconv_show_error(err, out_charset, in_charset TSRMLS_CC);
-
- if (err == PHP_ICONV_ERR_SUCCESS) {
- if (retval.c != NULL) {
- RETVAL_STRINGL(retval.c, retval.len, 0);
- } else {
- RETVAL_EMPTY_STRING();
- }
- } else {
- smart_str_free(&retval);
- RETVAL_FALSE;
- }
-
- zval_dtor(&lfchars);
-}
-/* }}} */
-
-/* {{{ proto string iconv_mime_decode(string encoded_string [, int mode, string charset])
- Decodes a mime header field */
-PHP_FUNCTION(iconv_mime_decode)
-{
- char *encoded_str;
- int encoded_str_len;
- char *charset;
- int charset_len;
- long mode = 0;
-
- smart_str retval = {0};
-
- php_iconv_err_t err;
-
- charset = ICONVG(internal_encoding);
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|ls",
- &encoded_str, &encoded_str_len, &mode, &charset, &charset_len) == FAILURE) {
-
- RETURN_FALSE;
- }
-
- err = _php_iconv_mime_decode(&retval, encoded_str, encoded_str_len, charset, NULL, mode);
- _php_iconv_show_error(err, charset, "???" TSRMLS_CC);
-
- if (err == PHP_ICONV_ERR_SUCCESS) {
- if (retval.c != NULL) {
- RETVAL_STRINGL(retval.c, retval.len, 0);
- } else {
- RETVAL_EMPTY_STRING();
- }
- } else {
- smart_str_free(&retval);
- RETVAL_FALSE;
- }
-}
-/* }}} */
-
-/* {{{ proto array iconv_mime_decode_headers(string headers [, int mode, string charset])
- Decodes multiple mime header fields */
-PHP_FUNCTION(iconv_mime_decode_headers)
-{
- const char *encoded_str;
- int encoded_str_len;
- char *charset;
- int charset_len;
- long mode = 0;
-
- php_iconv_err_t err = 0;
-
- charset = ICONVG(internal_encoding);
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|ls",
- &encoded_str, &encoded_str_len, &mode, &charset, &charset_len) == FAILURE) {
-
- RETURN_FALSE;
- }
-
- array_init(return_value);
-
- while (encoded_str_len > 0) {
- smart_str decoded_header = {0};
- char *header_name = NULL;
- size_t header_name_len = 0;
- char *header_value = NULL;
- size_t header_value_len = 0;
- char *p, *limit;
- const char *next_pos;
-
- if (PHP_ICONV_ERR_SUCCESS != (err = _php_iconv_mime_decode(&decoded_header, encoded_str, encoded_str_len, charset, &next_pos, mode))) {
- smart_str_free(&decoded_header);
- break;
- }
-
- if (decoded_header.c == NULL) {
- break;
- }
-
- limit = decoded_header.c + decoded_header.len;
- for (p = decoded_header.c; p < limit; p++) {
- if (*p == ':') {
- *p = '\0';
- header_name = decoded_header.c;
- header_name_len = (p - decoded_header.c) + 1;
-
- while (++p < limit) {
- if (*p != ' ' && *p != '\t') {
- break;
- }
- }
-
- header_value = p;
- header_value_len = limit - p;
-
- break;
- }
- }
-
- if (header_name != NULL) {
- zval **elem;
-
- if (zend_hash_find(Z_ARRVAL_P(return_value), header_name, header_name_len, (void **)&elem) == SUCCESS) {
- if (Z_TYPE_PP(elem) != IS_ARRAY) {
- zval *new_elem;
-
- MAKE_STD_ZVAL(new_elem);
- array_init(new_elem);
-
- ZVAL_ADDREF(*elem);
- add_next_index_zval(new_elem, *elem);
-
- zend_hash_update(Z_ARRVAL_P(return_value), header_name, header_name_len, (void *)&new_elem, sizeof(new_elem), NULL);
-
- elem = &new_elem;
- }
- add_next_index_stringl(*elem, header_value, header_value_len, 1);
- } else {
- add_assoc_stringl_ex(return_value, header_name, header_name_len, header_value, header_value_len, 1);
- }
- }
- encoded_str_len -= next_pos - encoded_str;
- encoded_str = next_pos;
-
- smart_str_free(&decoded_header);
- }
-
- if (err != PHP_ICONV_ERR_SUCCESS) {
- _php_iconv_show_error(err, charset, "???" TSRMLS_CC);
- zval_dtor(return_value);
- RETVAL_FALSE;
- }
-}
-/* }}} */
-
-/* {{{ proto string iconv(string in_charset, string out_charset, string str)
- Returns str converted to the out_charset character set */
-PHP_NAMED_FUNCTION(php_if_iconv)
-{
- char *in_charset, *out_charset, *in_buffer, *out_buffer;
- size_t out_len;
- int in_charset_len, out_charset_len, in_buffer_len;
- php_iconv_err_t err;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "sss",
- &in_charset, &in_charset_len, &out_charset, &out_charset_len, &in_buffer, &in_buffer_len) == FAILURE)
- return;
-
- err = php_iconv_string(in_buffer, (size_t)in_buffer_len,
- &out_buffer, &out_len, out_charset, in_charset);
- _php_iconv_show_error(err, out_charset, in_charset TSRMLS_CC);
- if (out_buffer != NULL) {
- RETVAL_STRINGL(out_buffer, out_len, 0);
- } else {
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-/* {{{ proto string ob_iconv_handler(string contents, int status)
- Returns str in output buffer converted to the iconv.output_encoding character set */
-PHP_FUNCTION(ob_iconv_handler)
-{
- char *out_buffer, *content_type, *mimetype = NULL, *s;
- zval *zv_string;
- size_t out_len;
- int mimetype_alloced = 0;
- long status;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "zl", &zv_string, &status) == FAILURE)
- return;
-
- convert_to_string_ex(&zv_string);
-
- if (SG(sapi_headers).mimetype &&
- strncasecmp(SG(sapi_headers).mimetype, "text/", 5) == 0) {
- if ((s = strchr(SG(sapi_headers).mimetype,';')) == NULL){
- mimetype = SG(sapi_headers).mimetype;
- } else {
- mimetype = estrndup(SG(sapi_headers).mimetype, s-SG(sapi_headers).mimetype);
- mimetype_alloced = 1;
- }
- } else if (SG(sapi_headers).send_default_content_type) {
- mimetype =(SG(default_mimetype) ? SG(default_mimetype) : SAPI_DEFAULT_MIMETYPE);
- }
- if (mimetype != NULL) {
- php_iconv_err_t err = php_iconv_string(Z_STRVAL_P(zv_string),
- Z_STRLEN_P(zv_string), &out_buffer, &out_len,
- ICONVG(output_encoding), ICONVG(internal_encoding));
- _php_iconv_show_error(err, ICONVG(output_encoding), ICONVG(internal_encoding) TSRMLS_CC);
- if (out_buffer != NULL) {
- spprintf(&content_type, 0, "Content-Type:%s; charset=%s", mimetype, ICONVG(output_encoding));
- if (content_type && sapi_add_header(content_type, strlen(content_type), 0) != FAILURE) {
- SG(sapi_headers).send_default_content_type = 0;
- }
- RETURN_STRINGL(out_buffer, out_len, 0);
- }
- if (mimetype_alloced) {
- efree(mimetype);
- }
- }
-
- zval_dtor(return_value);
- *return_value = *zv_string;
- zval_copy_ctor(return_value);
-}
-/* }}} */
-
-/* {{{ proto bool iconv_set_encoding(string type, string charset)
- Sets internal encoding and output encoding for ob_iconv_handler() */
-PHP_FUNCTION(iconv_set_encoding)
-{
- char *type, *charset;
- int type_len, charset_len, retval;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ss", &type, &type_len, &charset, &charset_len) == FAILURE)
- return;
-
- if(!strcasecmp("input_encoding", type)) {
- retval = zend_alter_ini_entry("iconv.input_encoding", sizeof("iconv.input_encoding"), charset, charset_len, PHP_INI_USER, PHP_INI_STAGE_RUNTIME);
- } else if(!strcasecmp("output_encoding", type)) {
- retval = zend_alter_ini_entry("iconv.output_encoding", sizeof("iconv.output_encoding"), charset, charset_len, PHP_INI_USER, PHP_INI_STAGE_RUNTIME);
- } else if(!strcasecmp("internal_encoding", type)) {
- retval = zend_alter_ini_entry("iconv.internal_encoding", sizeof("iconv.internal_encoding"), charset, charset_len, PHP_INI_USER, PHP_INI_STAGE_RUNTIME);
- } else {
- RETURN_FALSE;
- }
-
- if (retval == SUCCESS) {
- RETURN_TRUE;
- } else {
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-/* {{{ proto mixed iconv_get_encoding([string type])
- Get internal encoding and output encoding for ob_iconv_handler() */
-PHP_FUNCTION(iconv_get_encoding)
-{
- char *type = "all";
- int type_len;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|s", &type, &type_len) == FAILURE)
- return;
-
- if (!strcasecmp("all", type)) {
- array_init(return_value);
- add_assoc_string(return_value, "input_encoding", ICONVG(input_encoding), 1);
- add_assoc_string(return_value, "output_encoding", ICONVG(output_encoding), 1);
- add_assoc_string(return_value, "internal_encoding", ICONVG(internal_encoding), 1);
- } else if (!strcasecmp("input_encoding", type)) {
- RETVAL_STRING(ICONVG(input_encoding), 1);
- } else if (!strcasecmp("output_encoding", type)) {
- RETVAL_STRING(ICONVG(output_encoding), 1);
- } else if (!strcasecmp("internal_encoding", type)) {
- RETVAL_STRING(ICONVG(internal_encoding), 1);
- } else {
- RETURN_FALSE;
- }
-
-}
-/* }}} */
-
-/* {{{ iconv stream filter */
-typedef struct _php_iconv_stream_filter {
- iconv_t cd;
- int persistent;
- char *to_charset;
- size_t to_charset_len;
- char *from_charset;
- size_t from_charset_len;
- char stub[128];
- size_t stub_len;
-} php_iconv_stream_filter;
-
-/* {{{ php_iconv_stream_filter_dtor */
-static void php_iconv_stream_filter_dtor(php_iconv_stream_filter *self)
-{
- iconv_close(self->cd);
- pefree(self->to_charset, self->persistent);
- pefree(self->from_charset, self->persistent);
-}
-/* }}} */
-
-/* {{{ php_iconv_stream_filter_ctor() */
-static php_iconv_err_t php_iconv_stream_filter_ctor(php_iconv_stream_filter *self,
- const char *to_charset, size_t to_charset_len,
- const char *from_charset, size_t from_charset_len, int persistent)
-{
- if (NULL == (self->to_charset = pemalloc(to_charset_len + 1, persistent))) {
- return PHP_ICONV_ERR_ALLOC;
- }
- self->to_charset_len = to_charset_len;
- if (NULL == (self->from_charset = pemalloc(from_charset_len + 1, persistent))) {
- pefree(self->to_charset, persistent);
- return PHP_ICONV_ERR_ALLOC;
- }
- self->from_charset_len = from_charset_len;
-
- memcpy(self->to_charset, to_charset, to_charset_len);
- self->to_charset[to_charset_len] = '\0';
- memcpy(self->from_charset, from_charset, from_charset_len);
- self->from_charset[from_charset_len] = '\0';
-
- if ((iconv_t)-1 == (self->cd = iconv_open(self->to_charset, self->from_charset))) {
- pefree(self->from_charset, persistent);
- pefree(self->to_charset, persistent);
- return PHP_ICONV_ERR_UNKNOWN;
- }
- self->persistent = persistent;
- self->stub_len = 0;
- return PHP_ICONV_ERR_SUCCESS;
-}
-/* }}} */
-
-/* {{{ php_iconv_stream_filter_append_bucket */
-static int php_iconv_stream_filter_append_bucket(
- php_iconv_stream_filter *self,
- php_stream *stream, php_stream_filter *filter,
- php_stream_bucket_brigade *buckets_out,
- const char *ps, size_t buf_len, size_t *consumed,
- int persistent TSRMLS_DC)
-{
- php_stream_bucket *new_bucket;
- char *out_buf = NULL;
- size_t out_buf_size;
- char *pd, *pt;
- size_t ocnt, prev_ocnt, icnt, tcnt;
- size_t initial_out_buf_size;
-
- if (ps == NULL) {
- initial_out_buf_size = 64;
- icnt = 1;
- } else {
- initial_out_buf_size = buf_len;
- icnt = buf_len;
- }
-
- out_buf_size = ocnt = prev_ocnt = initial_out_buf_size;
- if (NULL == (out_buf = pemalloc(out_buf_size, persistent))) {
- return FAILURE;
- }
-
- pd = out_buf;
-
- if (self->stub_len > 0) {
- pt = self->stub;
- tcnt = self->stub_len;
-
- while (tcnt > 0) {
- if (iconv(self->cd, &pt, &tcnt, &pd, &ocnt) == (size_t)-1) {
-#if ICONV_SUPPORTS_ERRNO
- switch (errno) {
- case EILSEQ:
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "iconv stream filter (\"%s\"=>\"%s\"): invalid multibyte sequence", self->from_charset, self->to_charset);
- goto out_failure;
-
- case EINVAL:
- if (ps != NULL) {
- if (icnt > 0) {
- if (self->stub_len >= sizeof(self->stub)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "iconv stream filter (\"%s\"=>\"%s\"): insufficient buffer", self->from_charset, self->to_charset);
- goto out_failure;
- }
- self->stub[self->stub_len++] = *(ps++);
- icnt--;
- pt = self->stub;
- tcnt = self->stub_len;
- } else {
- tcnt = 0;
- break;
- }
- }
- break;
-
- case E2BIG: {
- char *new_out_buf;
- size_t new_out_buf_size;
-
- new_out_buf_size = out_buf_size << 1;
-
- if (new_out_buf_size < out_buf_size) {
- /* whoa! no bigger buckets are sold anywhere... */
- if (NULL == (new_bucket = php_stream_bucket_new(stream, out_buf, (out_buf_size - ocnt), 1, persistent TSRMLS_CC))) {
- goto out_failure;
- }
-
- php_stream_bucket_append(buckets_out, new_bucket TSRMLS_CC);
-
- out_buf_size = ocnt = initial_out_buf_size;
- if (NULL == (out_buf = pemalloc(out_buf_size, persistent))) {
- return FAILURE;
- }
- pd = out_buf;
- } else {
- if (NULL == (new_out_buf = perealloc(out_buf, new_out_buf_size, persistent))) {
- if (NULL == (new_bucket = php_stream_bucket_new(stream, out_buf, (out_buf_size - ocnt), 1, persistent TSRMLS_CC))) {
- goto out_failure;
- }
-
- php_stream_bucket_append(buckets_out, new_bucket TSRMLS_CC);
- return FAILURE;
- }
- pd = new_out_buf + (pd - out_buf);
- ocnt += (new_out_buf_size - out_buf_size);
- out_buf = new_out_buf;
- out_buf_size = new_out_buf_size;
- }
- } break;
-
- default:
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "iconv stream filter (\"%s\"=>\"%s\"): unknown error", self->from_charset, self->to_charset);
- goto out_failure;
- }
-#else
- if (ocnt == prev_ocnt) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "iconv stream filter (\"%s\"=>\"%s\"): unknown error", self->from_charset, self->to_charset);
- goto out_failure;
- }
-#endif
- }
- prev_ocnt = ocnt;
- }
- memmove(self->stub, pt, tcnt);
- self->stub_len = tcnt;
- }
-
- while (icnt > 0) {
- if ((ps == NULL ? iconv(self->cd, NULL, NULL, &pd, &ocnt):
- iconv(self->cd, (char **)&ps, &icnt, &pd, &ocnt)) == (size_t)-1) {
-#if ICONV_SUPPORTS_ERRNO
- switch (errno) {
- case EILSEQ:
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "iconv stream filter (\"%s\"=>\"%s\"): invalid multibyte sequence", self->from_charset, self->to_charset);
- goto out_failure;
-
- case EINVAL:
- if (ps != NULL) {
- if (icnt > sizeof(self->stub)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "iconv stream filter (\"%s\"=>\"%s\"): insufficient buffer", self->from_charset, self->to_charset);
- goto out_failure;
- }
- memcpy(self->stub, ps, icnt);
- self->stub_len = icnt;
- ps += icnt;
- icnt = 0;
- } else {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "iconv stream filter (\"%s\"=>\"%s\"): unexpected octet values", self->from_charset, self->to_charset);
- goto out_failure;
- }
- break;
-
- case E2BIG: {
- char *new_out_buf;
- size_t new_out_buf_size;
-
- new_out_buf_size = out_buf_size << 1;
-
- if (new_out_buf_size < out_buf_size) {
- /* whoa! no bigger buckets are sold anywhere... */
- if (NULL == (new_bucket = php_stream_bucket_new(stream, out_buf, (out_buf_size - ocnt), 1, persistent TSRMLS_CC))) {
- goto out_failure;
- }
-
- php_stream_bucket_append(buckets_out, new_bucket TSRMLS_CC);
-
- out_buf_size = ocnt = initial_out_buf_size;
- if (NULL == (out_buf = pemalloc(out_buf_size, persistent))) {
- return FAILURE;
- }
- pd = out_buf;
- } else {
- if (NULL == (new_out_buf = perealloc(out_buf, new_out_buf_size, persistent))) {
- if (NULL == (new_bucket = php_stream_bucket_new(stream, out_buf, (out_buf_size - ocnt), 1, persistent TSRMLS_CC))) {
- goto out_failure;
- }
-
- php_stream_bucket_append(buckets_out, new_bucket TSRMLS_CC);
- return FAILURE;
- }
- pd = new_out_buf + (pd - out_buf);
- ocnt += (new_out_buf_size - out_buf_size);
- out_buf = new_out_buf;
- out_buf_size = new_out_buf_size;
- }
- } break;
-
- default:
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "iconv stream filter (\"%s\"=>\"%s\"): unknown error", self->from_charset, self->to_charset);
- goto out_failure;
- }
-#else
- if (ocnt == prev_ocnt) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "iconv stream filter (\"%s\"=>\"%s\"): unknown error", self->from_charset, self->to_charset);
- goto out_failure;
- }
-#endif
- } else {
- if (ps == NULL) {
- break;
- }
- }
- prev_ocnt = ocnt;
- }
-
- if (out_buf_size - ocnt > 0) {
- if (NULL == (new_bucket = php_stream_bucket_new(stream, out_buf, (out_buf_size - ocnt), 1, persistent TSRMLS_CC))) {
- goto out_failure;
- }
- php_stream_bucket_append(buckets_out, new_bucket TSRMLS_CC);
- } else {
- pefree(out_buf, persistent);
- }
- *consumed += buf_len - icnt;
-
- return SUCCESS;
-
-out_failure:
- pefree(out_buf, persistent);
- return FAILURE;
-}
-
-/* {{{ php_iconv_stream_filter_do_filter */
-static php_stream_filter_status_t php_iconv_stream_filter_do_filter(
- php_stream *stream, php_stream_filter *filter,
- php_stream_bucket_brigade *buckets_in,
- php_stream_bucket_brigade *buckets_out,
- size_t *bytes_consumed, int flags TSRMLS_DC)
-{
- php_stream_bucket *bucket = NULL;
- size_t consumed = 0;
- php_iconv_stream_filter *self = (php_iconv_stream_filter *)filter->abstract;
-
- while (buckets_in->head != NULL) {
- bucket = buckets_in->head;
-
- php_stream_bucket_unlink(bucket TSRMLS_CC);
-
- if (php_iconv_stream_filter_append_bucket(self, stream, filter,
- buckets_out, bucket->buf, bucket->buflen, &consumed,
- php_stream_is_persistent(stream) TSRMLS_CC) != SUCCESS) {
- goto out_failure;
- }
-
- php_stream_bucket_delref(bucket TSRMLS_CC);
- }
-
- if (flags != PSFS_FLAG_NORMAL) {
- if (php_iconv_stream_filter_append_bucket(self, stream, filter,
- buckets_out, NULL, 0, &consumed,
- php_stream_is_persistent(stream) TSRMLS_CC) != SUCCESS) {
- goto out_failure;
- }
- }
-
- if (bytes_consumed != NULL) {
- *bytes_consumed = consumed;
- }
-
- return PSFS_PASS_ON;
-
-out_failure:
- if (bucket != NULL) {
- php_stream_bucket_delref(bucket TSRMLS_CC);
- }
- return PSFS_ERR_FATAL;
-}
-/* }}} */
-
-/* {{{ php_iconv_stream_filter_cleanup */
-static void php_iconv_stream_filter_cleanup(php_stream_filter *filter TSRMLS_DC)
-{
- php_iconv_stream_filter_dtor((php_iconv_stream_filter *)filter->abstract);
- pefree(filter->abstract, ((php_iconv_stream_filter *)filter->abstract)->persistent);
-}
-/* }}} */
-
-static php_stream_filter_ops php_iconv_stream_filter_ops = {
- php_iconv_stream_filter_do_filter,
- php_iconv_stream_filter_cleanup,
- "convert.iconv.*"
-};
-
-/* {{{ php_iconv_stream_filter_create */
-static php_stream_filter *php_iconv_stream_filter_factory_create(const char *name, zval *params, int persistent TSRMLS_DC)
-{
- php_stream_filter *retval = NULL;
- php_iconv_stream_filter *inst;
- char *from_charset = NULL, *to_charset = NULL;
- size_t from_charset_len, to_charset_len;
-
- if ((from_charset = strchr(name, '.')) == NULL) {
- return NULL;
- }
- ++from_charset;
- if ((from_charset = strchr(from_charset, '.')) == NULL) {
- return NULL;
- }
- ++from_charset;
- if ((to_charset = strchr(from_charset, '/')) == NULL) {
- return NULL;
- }
- from_charset_len = to_charset - from_charset;
- ++to_charset;
- to_charset_len = strlen(to_charset);
-
- if (NULL == (inst = pemalloc(sizeof(php_iconv_stream_filter), persistent))) {
- return NULL;
- }
-
- if (php_iconv_stream_filter_ctor(inst, to_charset, to_charset_len, from_charset, from_charset_len, persistent) != PHP_ICONV_ERR_SUCCESS) {
- pefree(inst, persistent);
- return NULL;
- }
-
- if (NULL == (retval = php_stream_filter_alloc(&php_iconv_stream_filter_ops, inst, persistent))) {
- php_iconv_stream_filter_dtor(inst);
- pefree(inst, persistent);
- }
-
- return retval;
-}
-/* }}} */
-
-/* {{{ php_iconv_stream_register_factory */
-static php_iconv_err_t php_iconv_stream_filter_register_factory(TSRMLS_D)
-{
- static php_stream_filter_factory filter_factory = {
- php_iconv_stream_filter_factory_create
- };
-
- if (FAILURE == php_stream_filter_register_factory(
- php_iconv_stream_filter_ops.label,
- &filter_factory TSRMLS_CC)) {
- return PHP_ICONV_ERR_UNKNOWN;
- }
- return PHP_ICONV_ERR_SUCCESS;
-}
-/* }}} */
-
-/* {{{ php_iconv_stream_unregister_factory */
-static php_iconv_err_t php_iconv_stream_filter_unregister_factory(TSRMLS_D)
-{
- if (FAILURE == php_stream_filter_unregister_factory(
- php_iconv_stream_filter_ops.label TSRMLS_CC)) {
- return PHP_ICONV_ERR_UNKNOWN;
- }
- return PHP_ICONV_ERR_SUCCESS;
-}
-/* }}} */
-/* }}} */
-#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/iconv/iconv.dsp b/ext/iconv/iconv.dsp
deleted file mode 100644
index 2d66cf00ab..0000000000
--- a/ext/iconv/iconv.dsp
+++ /dev/null
@@ -1,107 +0,0 @@
-# Microsoft Developer Studio Project File - Name="iconv" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=iconv - Win32 Debug_TS
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "iconv.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "iconv.mak" CFG="iconv - Win32 Debug_TS"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "iconv - Win32 Release_TS" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "iconv - Win32 Debug_TS" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "iconv - Win32 Release_TS"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release_TS"
-# PROP BASE Intermediate_Dir "Release_TS"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release_TS"
-# PROP Intermediate_Dir "Release_TS"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "ICONV_EXPORTS" /YX /FD /c
-# ADD CPP /nologo /MD /W3 /GX /O2 /I "..\.." /I "..\..\Zend" /I "..\..\TSRM" /I "..\..\main" /I "..\..\win32" /I "..\..\..\php_build\iconv\include" /D "WIN32" /D "PHP_EXPORTS" /D "COMPILE_DL_ICONV" /D "HAVE_ICONV" /D ZEND_DEBUG=0 /D "NDEBUG" /D "_WINDOWS" /D "ZEND_WIN32" /D "PHP_WIN32" /D ZTS=1 /D "ICONV_SUPPORTS_ERRNO" /D "HAVE_LIBICONV" /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x407 /d "NDEBUG"
-# ADD RSC /l 0x407 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386
-# ADD LINK32 php5ts.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 /out:"..\..\Release_TS/php_iconv.dll" /libpath:"..\..\Release_TS" /libpath:"..\..\Release_TS_Inline"
-
-!ELSEIF "$(CFG)" == "iconv - Win32 Debug_TS"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug_TS"
-# PROP BASE Intermediate_Dir "Debug_TS"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug_TS"
-# PROP Intermediate_Dir "Debug_TS"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "ICONV_EXPORTS" /YX /FD /GZ /c
-# ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "..\.." /I "..\..\Zend" /I "..\..\TSRM" /I "..\..\main" /I "..\..\win32" /I "..\..\..\php_build\iconv\include" /D ZEND_DEBUG=1 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "PHP_EXPORTS" /D "COMPILE_DL_ICONV" /D "ZEND_WIN32" /D "PHP_WIN32" /D "HAVE_ICONV" /D ZTS=1 /D "HAVE_LIBICONV" /YX /FD /GZ /c
-# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x407 /d "_DEBUG"
-# ADD RSC /l 0x407 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 php5ts_debug.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /out:"..\..\Debug_TS/php_iconv.dll" /pdbtype:sept /libpath:"..\..\Debug_TS"
-
-!ENDIF
-
-# Begin Target
-
-# Name "iconv - Win32 Release_TS"
-# Name "iconv - Win32 Debug_TS"
-# Begin Group "Source Files"
-
-# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
-# Begin Source File
-
-SOURCE=.\iconv.c
-# End Source File
-# End Group
-# Begin Group "Header Files"
-
-# PROP Default_Filter "h;hpp;hxx;hm;inl"
-# Begin Source File
-
-SOURCE=.\php_iconv.h
-# End Source File
-# End Group
-# End Target
-# End Project
diff --git a/ext/iconv/php_iconv.def b/ext/iconv/php_iconv.def
deleted file mode 100644
index 2f77aa4c79..0000000000
--- a/ext/iconv/php_iconv.def
+++ /dev/null
@@ -1,6 +0,0 @@
-EXPORTS
-_libiconv_version
-libiconv_close
-libiconv
-libiconv_open
-libiconv_set_relocation_prefix
diff --git a/ext/iconv/php_iconv.h b/ext/iconv/php_iconv.h
deleted file mode 100644
index 7479560cf1..0000000000
--- a/ext/iconv/php_iconv.h
+++ /dev/null
@@ -1,94 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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. |
- +----------------------------------------------------------------------+
- | Authors: Rui Hirokawa <rui_hirokawa@ybb.ne.jp> |
- | Stig Bakken <ssb@php.net> |
- +----------------------------------------------------------------------+
- */
-
-/* $Revision$ */
-
-#ifndef PHP_ICONV_H
-#define PHP_ICONV_H
-
-#ifdef PHP_WIN32
-#define PHP_ICONV_API __declspec(dllexport)
-#else
-#define PHP_ICONV_API
-#endif
-
-#ifdef PHP_ATOM_INC
-#include "php_have_iconv.h"
-#include "php_have_libiconv.h"
-#include "php_have_glibc_iconv.h"
-#include "php_have_bsd_iconv.h"
-#include "php_iconv_supports_errno.h"
-#include "php_php_iconv_impl.h"
-#include "php_php_iconv_h_path.h"
-#endif
-
-
-#ifdef HAVE_ICONV
-extern zend_module_entry iconv_module_entry;
-#define iconv_module_ptr &iconv_module_entry
-
-PHP_MINIT_FUNCTION(miconv);
-PHP_MSHUTDOWN_FUNCTION(miconv);
-PHP_MINFO_FUNCTION(miconv);
-
-PHP_NAMED_FUNCTION(php_if_iconv);
-PHP_FUNCTION(ob_iconv_handler);
-PHP_FUNCTION(iconv_get_encoding);
-PHP_FUNCTION(iconv_set_encoding);
-PHP_FUNCTION(iconv_strlen);
-PHP_FUNCTION(iconv_substr);
-PHP_FUNCTION(iconv_strpos);
-PHP_FUNCTION(iconv_strrpos);
-PHP_FUNCTION(iconv_mime_encode);
-PHP_FUNCTION(iconv_mime_decode);
-PHP_FUNCTION(iconv_mime_decode_headers);
-
-ZEND_BEGIN_MODULE_GLOBALS(iconv)
- char *input_encoding;
- char *internal_encoding;
- char *output_encoding;
-ZEND_END_MODULE_GLOBALS(iconv)
-
-#ifdef ZTS
-#define ICONVG(v) TSRMG(iconv_globals_id, zend_iconv_globals *, v)
-#else
-#define ICONVG(v) (iconv_globals.v)
-#endif
-
-#define ICONV_INPUT_ENCODING "ISO-8859-1"
-#define ICONV_OUTPUT_ENCODING "ISO-8859-1"
-#define ICONV_INTERNAL_ENCODING "ISO-8859-1"
-
-#else
-
-#define iconv_module_ptr NULL
-
-#endif /* HAVE_ICONV */
-
-#define phpext_iconv_ptr iconv_module_ptr
-
-#endif /* PHP_ICONV_H */
-
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- */
diff --git a/ext/iconv/tests/Quotes.UTF-8 b/ext/iconv/tests/Quotes.UTF-8
deleted file mode 100644
index 3d48ee970a..0000000000
--- a/ext/iconv/tests/Quotes.UTF-8
+++ /dev/null
@@ -1,4 +0,0 @@
-“Helloâ€
-‘Hello’
-„Helloâ€
-‚Hello’
diff --git a/ext/iconv/tests/bug16069.phpt b/ext/iconv/tests/bug16069.phpt
deleted file mode 100644
index 0d58defe3c..0000000000
--- a/ext/iconv/tests/bug16069.phpt
+++ /dev/null
@@ -1,22 +0,0 @@
---TEST--
-Bug #16069
---SKIPIF--
-<?php
-/* include( 'skipif.inc' ); */
-if (@iconv('CP932', 'EUC-JP//TRANSLIT', "\x87\x6d")=='') {
- die("skip CP932 translit not available\n");
-}
-?>
---INI--
-error_reporting=2039
---FILE--
-<?php
-/* include('test.inc'); */
-/* charset=CP932, KOI8-R */
-$str = "\x87\x6d\x87\x6d\x87\x6d\x87\x6d\x87\x6d\x87\x6d\x87\x6d\x87\x6d\x87\x6d\x87\x6d\x87\x6d\x87\x6d\x87\x6d\x87\x6d\x87\x6d\x87\x6d\x87\x6d\x87\x6d\x87\x6d\x87\x6d\x87\x6d\x87\x6d\x87\x6d\x87\x6d\x87\x6d\x87\x6d\x87\x6d\x87\x6d\x87\x6d\x87\x6d\x87\x6d\x87\x6d\x87\x6d\x87\x6d\x87\x6d\x87\x6d\x87\x6d\x87\x6d\x87\x6d\x87\x6d";
-print iconv( "CP932", "EUC-JP//TRANSLIT", $str );
-$str = "(\x9c\xe4\x9c)";
-print iconv( "KOI8-R", "EUC-JP//TRANSLIT", $str );
-?>
---EXPECT--
-¥ß¥ê¥Ð¡¼¥ë¥ß¥ê¥Ð¡¼¥ë¥ß¥ê¥Ð¡¼¥ë¥ß¥ê¥Ð¡¼¥ë¥ß¥ê¥Ð¡¼¥ë¥ß¥ê¥Ð¡¼¥ë¥ß¥ê¥Ð¡¼¥ë¥ß¥ê¥Ð¡¼¥ë¥ß¥ê¥Ð¡¼¥ë¥ß¥ê¥Ð¡¼¥ë¥ß¥ê¥Ð¡¼¥ë¥ß¥ê¥Ð¡¼¥ë¥ß¥ê¥Ð¡¼¥ë¥ß¥ê¥Ð¡¼¥ë¥ß¥ê¥Ð¡¼¥ë¥ß¥ê¥Ð¡¼¥ë¥ß¥ê¥Ð¡¼¥ë¥ß¥ê¥Ð¡¼¥ë¥ß¥ê¥Ð¡¼¥ë¥ß¥ê¥Ð¡¼¥ë¥ß¥ê¥Ð¡¼¥ë¥ß¥ê¥Ð¡¼¥ë¥ß¥ê¥Ð¡¼¥ë¥ß¥ê¥Ð¡¼¥ë¥ß¥ê¥Ð¡¼¥ë¥ß¥ê¥Ð¡¼¥ë¥ß¥ê¥Ð¡¼¥ë¥ß¥ê¥Ð¡¼¥ë¥ß¥ê¥Ð¡¼¥ë¥ß¥ê¥Ð¡¼¥ë¥ß¥ê¥Ð¡¼¥ë¥ß¥ê¥Ð¡¼¥ë¥ß¥ê¥Ð¡¼¥ë¥ß¥ê¥Ð¡¼¥ë¥ß¥ê¥Ð¡¼¥ë¥ß¥ê¥Ð¡¼¥ë¥ß¥ê¥Ð¡¼¥ë¥ß¥ê¥Ð¡¼¥ë¥ß¥ê¥Ð¡¼¥ë¥ß¥ê¥Ð¡¼¥ë(¡ë§¥¡ë)
diff --git a/ext/iconv/tests/eucjp2iso2022jp.phpt b/ext/iconv/tests/eucjp2iso2022jp.phpt
deleted file mode 100644
index 13dab43d4c..0000000000
--- a/ext/iconv/tests/eucjp2iso2022jp.phpt
+++ /dev/null
@@ -1,27 +0,0 @@
---TEST--
-EUC-JP to ISO-2022-JP
---SKIPIF--
-<?php /* include('skipif.inc'); */ ?>
---INI--
-error_reporting=2039
---FILE--
-<?php
-/* include('test.inc'); */
-/* charset=EUC-JP */
-
-function hexdump($str) {
- $len = strlen($str);
- for ($i = 0; $i < $len; ++$i) {
- printf("%02x", ord($str{$i}));
- }
- print "\n";
-}
-
-$str = str_repeat("ÆüËܸì¥Æ¥­¥¹¥È¤È English text", 30);
-$str .= "ÆüËܸì";
-
-echo hexdump(iconv("EUC-JP", "ISO-2022-JP", $str));
-?>
---EXPECT--
-1b2442467c4b5c386c2546252d2539254824481b284220456e676c69736820746578741b2442467c4b5c386c2546252d2539254824481b284220456e676c69736820746578741b2442467c4b5c386c2546252d2539254824481b284220456e676c69736820746578741b2442467c4b5c386c2546252d2539254824481b284220456e676c69736820746578741b2442467c4b5c386c2546252d2539254824481b284220456e676c69736820746578741b2442467c4b5c386c2546252d2539254824481b284220456e676c69736820746578741b2442467c4b5c386c2546252d2539254824481b284220456e676c69736820746578741b2442467c4b5c386c2546252d2539254824481b284220456e676c69736820746578741b2442467c4b5c386c2546252d2539254824481b284220456e676c69736820746578741b2442467c4b5c386c2546252d2539254824481b284220456e676c69736820746578741b2442467c4b5c386c2546252d2539254824481b284220456e676c69736820746578741b2442467c4b5c386c2546252d2539254824481b284220456e676c69736820746578741b2442467c4b5c386c2546252d2539254824481b284220456e676c69736820746578741b2442467c4b5c386c2546252d2539254824481b284220456e676c69736820746578741b2442467c4b5c386c2546252d2539254824481b284220456e676c69736820746578741b2442467c4b5c386c2546252d2539254824481b284220456e676c69736820746578741b2442467c4b5c386c2546252d2539254824481b284220456e676c69736820746578741b2442467c4b5c386c2546252d2539254824481b284220456e676c69736820746578741b2442467c4b5c386c2546252d2539254824481b284220456e676c69736820746578741b2442467c4b5c386c2546252d2539254824481b284220456e676c69736820746578741b2442467c4b5c386c2546252d2539254824481b284220456e676c69736820746578741b2442467c4b5c386c2546252d2539254824481b284220456e676c69736820746578741b2442467c4b5c386c2546252d2539254824481b284220456e676c69736820746578741b2442467c4b5c386c2546252d2539254824481b284220456e676c69736820746578741b2442467c4b5c386c2546252d2539254824481b284220456e676c69736820746578741b2442467c4b5c386c2546252d2539254824481b284220456e676c69736820746578741b2442467c4b5c386c2546252d2539254824481b284220456e676c69736820746578741b2442467c4b5c386c2546252d2539254824481b284220456e676c69736820746578741b2442467c4b5c386c2546252d2539254824481b284220456e676c69736820746578741b2442467c4b5c386c2546252d2539254824481b284220456e676c69736820746578741b2442467c4b5c386c1b2842
-
diff --git a/ext/iconv/tests/eucjp2sjis.phpt b/ext/iconv/tests/eucjp2sjis.phpt
deleted file mode 100644
index c1cac62e85..0000000000
--- a/ext/iconv/tests/eucjp2sjis.phpt
+++ /dev/null
@@ -1,58 +0,0 @@
---TEST--
-EUC-JP to SJIS
---SKIPIF--
-<?php /* include('skipif.inc'); */ ?>
---INI--
-error_reporting=2039
---FILE--
-<?php
-/* include('test.inc'); */
-/* charset=EUC-JP */
-
-$str = "
-ÆüËܸì¥Æ¥­¥¹¥È¤ÈEnglish Text
-ÆüËܸì¥Æ¥­¥¹¥È¤ÈEnglish Text
-ÆüËܸì¥Æ¥­¥¹¥È¤ÈEnglish Text
-ÆüËܸì¥Æ¥­¥¹¥È¤ÈEnglish Text
-ÆüËܸì¥Æ¥­¥¹¥È¤ÈEnglish Text
-ÆüËܸì¥Æ¥­¥¹¥È¤ÈEnglish Text
-ÆüËܸì¥Æ¥­¥¹¥È¤ÈEnglish Text
-ÆüËܸì¥Æ¥­¥¹¥È¤ÈEnglish Text
-ÆüËܸì¥Æ¥­¥¹¥È¤ÈEnglish Text
-ÆüËܸì¥Æ¥­¥¹¥È¤ÈEnglish Text
-ÆüËܸì¥Æ¥­¥¹¥È¤ÈEnglish Text
-ÆüËܸì¥Æ¥­¥¹¥È¤ÈEnglish Text
-ÆüËܸì¥Æ¥­¥¹¥È¤ÈEnglish Text
-ÆüËܸì¥Æ¥­¥¹¥È¤ÈEnglish Text
-ÆüËܸì¥Æ¥­¥¹¥È¤ÈEnglish Text
-ÆüËܸì¥Æ¥­¥¹¥È¤ÈEnglish Text
-ÆüËܸì¥Æ¥­¥¹¥È¤ÈEnglish Text
-ÆüËܸì¥Æ¥­¥¹¥È¤ÈEnglish Text
-ÆüËܸì¥Æ¥­¥¹¥È¤ÈEnglish Text
-ÆüËܸì¥Æ¥­¥¹¥È¤ÈEnglish Text
-ÆüËܸì¥Æ¥­¥¹¥È¤ÈEnglish Text
-ÆüËܸì¥Æ¥­¥¹¥È¤ÈEnglish Text
-ÆüËܸì¥Æ¥­¥¹¥È¤ÈEnglish Text
-ÆüËܸì¥Æ¥­¥¹¥È¤ÈEnglish Text
-ÆüËܸì¥Æ¥­¥¹¥È¤ÈEnglish Text
-ÆüËܸì¥Æ¥­¥¹¥È¤ÈEnglish Text
-ÆüËܸì¥Æ¥­¥¹¥È¤ÈEnglish Text
-ÆüËܸì¥Æ¥­¥¹¥È¤ÈEnglish Text
-ÆüËܸì¥Æ¥­¥¹¥È¤ÈEnglish Text
-ÆüËܸì¥Æ¥­¥¹¥È¤ÈEnglish Text
-ÆüËܸì¥Æ¥­¥¹¥È¤ÈEnglish Text
-ÆüËܸì¥Æ¥­¥¹¥È¤ÈEnglish Text
-ÆüËܸì¥Æ¥­¥¹¥È¤ÈEnglish Text
-ÆüËܸì¥Æ¥­¥¹¥È¤ÈEnglish Text
-ÆüËܸì¥Æ¥­¥¹¥È¤ÈEnglish Text
-ÆüËܸì¥Æ¥­¥¹¥È¤ÈEnglish Text
-";
-
-$str = iconv("EUC-JP", "SJIS", $str);
-$str = base64_encode($str);
-echo $str."\n";
-
-?>
---EXPECT--
-CpP6lnuM6oNlg0yDWINngsZFbmdsaXNoIFRleHQKk/qWe4zqg2WDTINYg2eCxkVuZ2xpc2ggVGV4dAqT+pZ7jOqDZYNMg1iDZ4LGRW5nbGlzaCBUZXh0CpP6lnuM6oNlg0yDWINngsZFbmdsaXNoIFRleHQKk/qWe4zqg2WDTINYg2eCxkVuZ2xpc2ggVGV4dAqT+pZ7jOqDZYNMg1iDZ4LGRW5nbGlzaCBUZXh0CpP6lnuM6oNlg0yDWINngsZFbmdsaXNoIFRleHQKk/qWe4zqg2WDTINYg2eCxkVuZ2xpc2ggVGV4dAqT+pZ7jOqDZYNMg1iDZ4LGRW5nbGlzaCBUZXh0CpP6lnuM6oNlg0yDWINngsZFbmdsaXNoIFRleHQKk/qWe4zqg2WDTINYg2eCxkVuZ2xpc2ggVGV4dAqT+pZ7jOqDZYNMg1iDZ4LGRW5nbGlzaCBUZXh0CpP6lnuM6oNlg0yDWINngsZFbmdsaXNoIFRleHQKk/qWe4zqg2WDTINYg2eCxkVuZ2xpc2ggVGV4dAqT+pZ7jOqDZYNMg1iDZ4LGRW5nbGlzaCBUZXh0CpP6lnuM6oNlg0yDWINngsZFbmdsaXNoIFRleHQKk/qWe4zqg2WDTINYg2eCxkVuZ2xpc2ggVGV4dAqT+pZ7jOqDZYNMg1iDZ4LGRW5nbGlzaCBUZXh0CpP6lnuM6oNlg0yDWINngsZFbmdsaXNoIFRleHQKk/qWe4zqg2WDTINYg2eCxkVuZ2xpc2ggVGV4dAqT+pZ7jOqDZYNMg1iDZ4LGRW5nbGlzaCBUZXh0CpP6lnuM6oNlg0yDWINngsZFbmdsaXNoIFRleHQKk/qWe4zqg2WDTINYg2eCxkVuZ2xpc2ggVGV4dAqT+pZ7jOqDZYNMg1iDZ4LGRW5nbGlzaCBUZXh0CpP6lnuM6oNlg0yDWINngsZFbmdsaXNoIFRleHQKk/qWe4zqg2WDTINYg2eCxkVuZ2xpc2ggVGV4dAqT+pZ7jOqDZYNMg1iDZ4LGRW5nbGlzaCBUZXh0CpP6lnuM6oNlg0yDWINngsZFbmdsaXNoIFRleHQKk/qWe4zqg2WDTINYg2eCxkVuZ2xpc2ggVGV4dAqT+pZ7jOqDZYNMg1iDZ4LGRW5nbGlzaCBUZXh0CpP6lnuM6oNlg0yDWINngsZFbmdsaXNoIFRleHQKk/qWe4zqg2WDTINYg2eCxkVuZ2xpc2ggVGV4dAqT+pZ7jOqDZYNMg1iDZ4LGRW5nbGlzaCBUZXh0CpP6lnuM6oNlg0yDWINngsZFbmdsaXNoIFRleHQKk/qWe4zqg2WDTINYg2eCxkVuZ2xpc2ggVGV4dAqT+pZ7jOqDZYNMg1iDZ4LGRW5nbGlzaCBUZXh0Cg==
-
diff --git a/ext/iconv/tests/eucjp2utf8.phpt b/ext/iconv/tests/eucjp2utf8.phpt
deleted file mode 100644
index 2100385cd6..0000000000
--- a/ext/iconv/tests/eucjp2utf8.phpt
+++ /dev/null
@@ -1,58 +0,0 @@
---TEST--
-EUC-JP to UTF8
---SKIPIF--
-<?php /* include('skipif.inc'); */ ?>
---INI--
-error_reporting=2039
---FILE--
-<?php
-/* include('test.inc'); */
-/* charset=EUC-JP */
-
-$str = "
-ÆüËܸì¥Æ¥­¥¹¥È¤ÈEnglish Text
-ÆüËܸì¥Æ¥­¥¹¥È¤ÈEnglish Text
-ÆüËܸì¥Æ¥­¥¹¥È¤ÈEnglish Text
-ÆüËܸì¥Æ¥­¥¹¥È¤ÈEnglish Text
-ÆüËܸì¥Æ¥­¥¹¥È¤ÈEnglish Text
-ÆüËܸì¥Æ¥­¥¹¥È¤ÈEnglish Text
-ÆüËܸì¥Æ¥­¥¹¥È¤ÈEnglish Text
-ÆüËܸì¥Æ¥­¥¹¥È¤ÈEnglish Text
-ÆüËܸì¥Æ¥­¥¹¥È¤ÈEnglish Text
-ÆüËܸì¥Æ¥­¥¹¥È¤ÈEnglish Text
-ÆüËܸì¥Æ¥­¥¹¥È¤ÈEnglish Text
-ÆüËܸì¥Æ¥­¥¹¥È¤ÈEnglish Text
-ÆüËܸì¥Æ¥­¥¹¥È¤ÈEnglish Text
-ÆüËܸì¥Æ¥­¥¹¥È¤ÈEnglish Text
-ÆüËܸì¥Æ¥­¥¹¥È¤ÈEnglish Text
-ÆüËܸì¥Æ¥­¥¹¥È¤ÈEnglish Text
-ÆüËܸì¥Æ¥­¥¹¥È¤ÈEnglish Text
-ÆüËܸì¥Æ¥­¥¹¥È¤ÈEnglish Text
-ÆüËܸì¥Æ¥­¥¹¥È¤ÈEnglish Text
-ÆüËܸì¥Æ¥­¥¹¥È¤ÈEnglish Text
-ÆüËܸì¥Æ¥­¥¹¥È¤ÈEnglish Text
-ÆüËܸì¥Æ¥­¥¹¥È¤ÈEnglish Text
-ÆüËܸì¥Æ¥­¥¹¥È¤ÈEnglish Text
-ÆüËܸì¥Æ¥­¥¹¥È¤ÈEnglish Text
-ÆüËܸì¥Æ¥­¥¹¥È¤ÈEnglish Text
-ÆüËܸì¥Æ¥­¥¹¥È¤ÈEnglish Text
-ÆüËܸì¥Æ¥­¥¹¥È¤ÈEnglish Text
-ÆüËܸì¥Æ¥­¥¹¥È¤ÈEnglish Text
-ÆüËܸì¥Æ¥­¥¹¥È¤ÈEnglish Text
-ÆüËܸì¥Æ¥­¥¹¥È¤ÈEnglish Text
-ÆüËܸì¥Æ¥­¥¹¥È¤ÈEnglish Text
-ÆüËܸì¥Æ¥­¥¹¥È¤ÈEnglish Text
-ÆüËܸì¥Æ¥­¥¹¥È¤ÈEnglish Text
-ÆüËܸì¥Æ¥­¥¹¥È¤ÈEnglish Text
-ÆüËܸì¥Æ¥­¥¹¥È¤ÈEnglish Text
-ÆüËܸì¥Æ¥­¥¹¥È¤ÈEnglish Text
-";
-
-$str = iconv("EUC-JP", "UTF-8", $str); /* libiconv(1.8) doesn't know "UTF8" but "UTF-8". */
-$str = base64_encode($str);
-echo $str."\n";
-
-?>
---EXPECT--
-CuaXpeacrOiqnuODhuOCreOCueODiOOBqEVuZ2xpc2ggVGV4dArml6XmnKzoqp7jg4bjgq3jgrnjg4jjgahFbmdsaXNoIFRleHQK5pel5pys6Kqe44OG44Kt44K544OI44GoRW5nbGlzaCBUZXh0CuaXpeacrOiqnuODhuOCreOCueODiOOBqEVuZ2xpc2ggVGV4dArml6XmnKzoqp7jg4bjgq3jgrnjg4jjgahFbmdsaXNoIFRleHQK5pel5pys6Kqe44OG44Kt44K544OI44GoRW5nbGlzaCBUZXh0CuaXpeacrOiqnuODhuOCreOCueODiOOBqEVuZ2xpc2ggVGV4dArml6XmnKzoqp7jg4bjgq3jgrnjg4jjgahFbmdsaXNoIFRleHQK5pel5pys6Kqe44OG44Kt44K544OI44GoRW5nbGlzaCBUZXh0CuaXpeacrOiqnuODhuOCreOCueODiOOBqEVuZ2xpc2ggVGV4dArml6XmnKzoqp7jg4bjgq3jgrnjg4jjgahFbmdsaXNoIFRleHQK5pel5pys6Kqe44OG44Kt44K544OI44GoRW5nbGlzaCBUZXh0CuaXpeacrOiqnuODhuOCreOCueODiOOBqEVuZ2xpc2ggVGV4dArml6XmnKzoqp7jg4bjgq3jgrnjg4jjgahFbmdsaXNoIFRleHQK5pel5pys6Kqe44OG44Kt44K544OI44GoRW5nbGlzaCBUZXh0CuaXpeacrOiqnuODhuOCreOCueODiOOBqEVuZ2xpc2ggVGV4dArml6XmnKzoqp7jg4bjgq3jgrnjg4jjgahFbmdsaXNoIFRleHQK5pel5pys6Kqe44OG44Kt44K544OI44GoRW5nbGlzaCBUZXh0CuaXpeacrOiqnuODhuOCreOCueODiOOBqEVuZ2xpc2ggVGV4dArml6XmnKzoqp7jg4bjgq3jgrnjg4jjgahFbmdsaXNoIFRleHQK5pel5pys6Kqe44OG44Kt44K544OI44GoRW5nbGlzaCBUZXh0CuaXpeacrOiqnuODhuOCreOCueODiOOBqEVuZ2xpc2ggVGV4dArml6XmnKzoqp7jg4bjgq3jgrnjg4jjgahFbmdsaXNoIFRleHQK5pel5pys6Kqe44OG44Kt44K544OI44GoRW5nbGlzaCBUZXh0CuaXpeacrOiqnuODhuOCreOCueODiOOBqEVuZ2xpc2ggVGV4dArml6XmnKzoqp7jg4bjgq3jgrnjg4jjgahFbmdsaXNoIFRleHQK5pel5pys6Kqe44OG44Kt44K544OI44GoRW5nbGlzaCBUZXh0CuaXpeacrOiqnuODhuOCreOCueODiOOBqEVuZ2xpc2ggVGV4dArml6XmnKzoqp7jg4bjgq3jgrnjg4jjgahFbmdsaXNoIFRleHQK5pel5pys6Kqe44OG44Kt44K544OI44GoRW5nbGlzaCBUZXh0CuaXpeacrOiqnuODhuOCreOCueODiOOBqEVuZ2xpc2ggVGV4dArml6XmnKzoqp7jg4bjgq3jgrnjg4jjgahFbmdsaXNoIFRleHQK5pel5pys6Kqe44OG44Kt44K544OI44GoRW5nbGlzaCBUZXh0CuaXpeacrOiqnuODhuOCreOCueODiOOBqEVuZ2xpc2ggVGV4dArml6XmnKzoqp7jg4bjgq3jgrnjg4jjgahFbmdsaXNoIFRleHQK5pel5pys6Kqe44OG44Kt44K544OI44GoRW5nbGlzaCBUZXh0Cg==
-
diff --git a/ext/iconv/tests/iconv001.phpt b/ext/iconv/tests/iconv001.phpt
deleted file mode 100644
index d2c1f3ed60..0000000000
--- a/ext/iconv/tests/iconv001.phpt
+++ /dev/null
@@ -1,18 +0,0 @@
---TEST--
-iconv() test 1
---SKIPIF--
-<?php /* include('skipif.inc'); */ ?>
---INI--
-error_reporting=2039
---FILE--
-<?php
-/* include('test.inc'); */
-echo "iconv extension is available\n";
-$test = "æøå";
-var_dump("ISO-8859-1: $test");
-var_dump("UTF-8: ".iconv( "ISO-8859-1", "UTF-8", $test ) );
-?>
---EXPECT--
-iconv extension is available
-string(15) "ISO-8859-1: æøå"
-string(13) "UTF-8: æøå"
diff --git a/ext/iconv/tests/iconv002.phpt b/ext/iconv/tests/iconv002.phpt
deleted file mode 100644
index 8aded58866..0000000000
--- a/ext/iconv/tests/iconv002.phpt
+++ /dev/null
@@ -1,30 +0,0 @@
---TEST--
-iconv() test 2 (UCS4BE to ASCII)
---SKIPIF--
-<?php
-/* include('skipif.inc'); */
-if (@iconv("ascii","UCS-4LE", "abcd") == '') {
- die("skip conversion to UCS-4LE not supported");
-}
-?>
---INI--
-error_reporting=2039
---FILE--
-<?php
-/* include('test.inc'); */
-/*
-Expected output:
-&#97;&#98;&#99;&#100;
-abcd
-*/
-
- $s = unpack("V*", iconv("ascii","UCS-4LE", "abcd"));
- foreach($s as $c) { print "&#$c;"; } print "\n";
-
- $s = pack("NNNN", 97, 98, 99, 100);
- $q = iconv("UCS-4BE", "ascii", $s);
- print $q; print "\n";
-?>
---EXPECT--
-&#97;&#98;&#99;&#100;
-abcd
diff --git a/ext/iconv/tests/iconv003.phpt b/ext/iconv/tests/iconv003.phpt
deleted file mode 100644
index 9fcfe4b0cd..0000000000
--- a/ext/iconv/tests/iconv003.phpt
+++ /dev/null
@@ -1,13 +0,0 @@
---TEST--
-iconv() test 3
---FILE--
-<?php
-for ($i = 0; $i < 3; ++$i) {
- if (@iconv('blah', 'blah', 'blah') != '') {
- die("failed\n");
- }
-}
-echo "success\n";
-?>
---EXPECT--
-success
diff --git a/ext/iconv/tests/iconv_mime_decode.phpt b/ext/iconv/tests/iconv_mime_decode.phpt
deleted file mode 100644
index 24d1794f3f..0000000000
--- a/ext/iconv/tests/iconv_mime_decode.phpt
+++ /dev/null
@@ -1,90 +0,0 @@
---TEST--
-iconv_mime_decode()
---SKIPIF--
-<?php extension_loaded('iconv') or die('skip iconv extension is not available'); ?>
---INI--
-iconv.internal_charset=iso-8859-1
---FILE--
-<?php
-function my_error_handler($errno, $errmsg, $filename, $linenum, $vars)
-{
- echo "$errno: $errmsg\n";
-}
-set_error_handler('my_error_handler');
-
-function do_single_test($header)
-{
- global $mode;
-
- $result = iconv_mime_decode($header, $mode, "UTF-8");
- printf("(%d) \"%s\"\n", iconv_strlen($result, "UTF-8"), $result);
-}
-
-function do_regression_test()
-{
- do_single_test(<<< HERE
-Subject: =?ISO-8859-1?Q?Pr=FCfung?=
- =?ISO-8859-1*de_DE?Q?Pr=FCfung?=\t
- =?ISO-8859-2?Q?k=F9=D4=F1=D3let?=
-HERE
-);
- do_single_test(<<< HERE
-Subject: =?ISO-8859-1?Q?Pr=FCfung?= =?ISO-8859-1*de_DE?Q?=20Pr=FCfung?= \t =?ISO-8859-2?Q?k=F9=D4=F1=D3let?=
-HERE
-);
- do_single_test(<<< HERE
-Subject: =?ISO-8859-1?Q?Pr=FCfung?==?ISO-8859-1*de_DE?Q?Pr=FCfung?==?ISO-8859-2?Q?k=F9=D4=F1=D3let?=
-HERE
-);
- do_single_test(<<< HERE
-Subject: =?ISO-8859-1?Q?Pr=FCfung?= =?ISO-8859-1*de_DE?Q?Pr=FCfung?? =?ISO-8859-2?X?k=F9=D4=F1=D3let?=
-HERE
-);
- do_single_test(<<< HERE
-From: =?ISO-2022-JP?B?GyRCJTUbKEI=?=
- =?ISO-2022-JP?B?GyRCJXMlVxsoQg==?=
- =?ISO-2022-JP?B?GyRCJWtKOBsoQg==?=
- =?ISO-2022-JP?B?GyRCO3pOcxsoQg==?=
- =?ISO-2022-JP?B?GyRCJTUlcxsoQg==?=
- =?ISO-2022-JP?B?GyRCJVclaxsoQg==?=
- =?ISO-2022-JP?B?GyRCSjg7ehsoQg==?=
- =?ISO-2022-JP?B?GyRCTnNGfBsoQg==?=
- =?ISO-2022-JP?B?GyRCS1w4bBsoQg==?=
- =?ISO-2022-JP?B?GyRCJUYlLRsoQg==?=
- =?ISO-2022-JP?B?GyRCJTklSBsoQg==?=
-HERE
-);
-}
-
-$mode = 0;
-do_regression_test();
-$mode = ICONV_MIME_DECODE_STRICT;
-do_regression_test();
-$mode = ICONV_MIME_DECODE_CONTINUE_ON_ERROR;
-do_regression_test();
-$mode = ICONV_MIME_DECODE_STRICT | ICONV_MIME_DECODE_CONTINUE_ON_ERROR;
-do_regression_test();
---EXPECT--
-(31) "Subject: PrüfungPrüfungkůÔńÓlet"
-(32) "Subject: Prüfung PrüfungkůÔńÓlet"
-(31) "Subject: PrüfungPrüfungkůÔńÓlet"
-2: iconv_mime_decode(): Malformed string
-(0) ""
-(27) "From: サンプル文字列サンプル文字列日本語テキスト"
-(31) "Subject: PrüfungPrüfungkůÔńÓlet"
-(32) "Subject: Prüfung PrüfungkůÔńÓlet"
-(100) "Subject: =?ISO-8859-1?Q?Pr=FCfung?==?ISO-8859-1*de_DE?Q?Pr=FCfung?==?ISO-8859-2?Q?k=F9=D4=F1=D3let?="
-2: iconv_mime_decode(): Malformed string
-(0) ""
-(27) "From: サンプル文字列サンプル文字列日本語テキスト"
-(31) "Subject: PrüfungPrüfungkůÔńÓlet"
-(32) "Subject: Prüfung PrüfungkůÔńÓlet"
-(31) "Subject: PrüfungPrüfungkůÔńÓlet"
-(84) "Subject: Prüfung=?ISO-8859-1*de_DE?Q?Pr=FCfung?? =?ISO-8859-2?X?k=F9=D4=F1=D3let?="
-(27) "From: サンプル文字列サンプル文字列日本語テキスト"
-(31) "Subject: PrüfungPrüfungkůÔńÓlet"
-(32) "Subject: Prüfung PrüfungkůÔńÓlet"
-(100) "Subject: =?ISO-8859-1?Q?Pr=FCfung?==?ISO-8859-1*de_DE?Q?Pr=FCfung?==?ISO-8859-2?Q?k=F9=D4=F1=D3let?="
-(84) "Subject: Prüfung=?ISO-8859-1*de_DE?Q?Pr=FCfung?? =?ISO-8859-2?X?k=F9=D4=F1=D3let?="
-(27) "From: サンプル文字列サンプル文字列日本語テキスト"
-
diff --git a/ext/iconv/tests/iconv_mime_decode_headers.phpt b/ext/iconv/tests/iconv_mime_decode_headers.phpt
deleted file mode 100644
index 403d6f8eec..0000000000
--- a/ext/iconv/tests/iconv_mime_decode_headers.phpt
+++ /dev/null
@@ -1,89 +0,0 @@
---TEST--
-iconv_mime_decode_headers()
---SKIP--
-<?php extension_loaded('iconv') or die('skip iconv extension is not available'); ?>
---INI--
-iconv.internal_charset=iso-8859-1
---FILE--
-<?php
-$headers = <<<HERE
-Return-Path: <internals-return-5651-***=***.example.com@lists.php.net>
-Received: from pb1.pair.com (pb1.pair.com [16.92.131.4]) by ***.example.com
- (8.12.10/8.12.10/1970-09-30) with SMTP id hALLmpea023899 for
- <***@***.example.com>; Sat, 22 Jan 1970 06:48:51 +0900 (JST)
- (envelope-from
- internals-return-5651-***=***.example.com@lists.php.net)
-Received: (qmail 63472 invoked by uid 1010); 1 Jan 1970 0:00:00 -0000
-Mailing-List: contact internals-help@lists.php.net; run by ezmlm
-Precedence: bulk
-List-Help: <mailto:internals-help@lists.php.net>
-List-Unsubscribe: <mailto:internals-unsubscribe@lists.php.net>
-List-Post: <mailto:internals@lists.php.net>
-Delivered-To: mailing list internals@lists.php.net
-Received: (qmail 63459 invoked by uid 1010); 1 Jan 1970 0:00:00 -0000
-Delivered-To: ezmlm-scan-internals@lists.php.net
-Delivered-To: ezmlm-internals@lists.php.net
-Date: Thu, 1 Jan 1970 00:00:00 -0000 (GMT)
-From: *** *** *** <***@***.example.com>
-X-X-Sender: ***@***.example.com
-To: internals@lists.php.net
-Message-Id: <Pine.LNX.4.58.************@***.example.com>
-MIME-Version: 1.0
-Content-Type: TEXT/PLAIN; charset=US-ASCII
-Subject: [PHP-DEV] [ICONV] test for =?US-ASCII?Q?iconv_mime_decode_headers=28=29?=
-X-UIDL: @eH!!h2:!!EOS!!A_c"!
-HERE;
-var_dump(iconv_mime_decode_headers($headers));
-?>
---EXPECT--
-array(17) {
- ["Return-Path"]=>
- string(57) "<internals-return-5651-***=***.example.com@lists.php.net>"
- ["Received"]=>
- array(3) {
- [0]=>
- string(259) "from pb1.pair.com (pb1.pair.com [16.92.131.4]) by ***.example.com (8.12.10/8.12.10/1970-09-30) with SMTP id hALLmpea023899 for <***@***.example.com>; Sat, 22 Jan 1970 06:48:51 +0900 (JST) (envelope-from internals-return-5651-***=***.example.com@lists.php.net)"
- [1]=>
- string(59) "(qmail 63472 invoked by uid 1010); 1 Jan 1970 0:00:00 -0000"
- [2]=>
- string(59) "(qmail 63459 invoked by uid 1010); 1 Jan 1970 0:00:00 -0000"
- }
- ["Mailing-List"]=>
- string(50) "contact internals-help@lists.php.net; run by ezmlm"
- ["Precedence"]=>
- string(4) "bulk"
- ["List-Help"]=>
- string(37) "<mailto:internals-help@lists.php.net>"
- ["List-Unsubscribe"]=>
- string(44) "<mailto:internals-unsubscribe@lists.php.net>"
- ["List-Post"]=>
- string(32) "<mailto:internals@lists.php.net>"
- ["Delivered-To"]=>
- array(3) {
- [0]=>
- string(36) "mailing list internals@lists.php.net"
- [1]=>
- string(34) "ezmlm-scan-internals@lists.php.net"
- [2]=>
- string(29) "ezmlm-internals@lists.php.net"
- }
- ["Date"]=>
- string(36) "Thu, 1 Jan 1970 00:00:00 -0000 (GMT)"
- ["From"]=>
- string(33) "*** *** *** <***@***.example.com>"
- ["X-X-Sender"]=>
- string(19) "***@***.example.com"
- ["To"]=>
- string(23) "internals@lists.php.net"
- ["Message-Id"]=>
- string(44) "<Pine.LNX.4.58.************@***.example.com>"
- ["MIME-Version"]=>
- string(3) "1.0"
- ["Content-Type"]=>
- string(28) "TEXT/PLAIN; charset=US-ASCII"
- ["Subject"]=>
- string(54) "[PHP-DEV] [ICONV] test for iconv mime decode headers()"
- ["X-UIDL"]=>
- string(20) "@eH!!h2:!!EOS!!A_c"!"
-}
-
diff --git a/ext/iconv/tests/iconv_mime_encode.phpt b/ext/iconv/tests/iconv_mime_encode.phpt
deleted file mode 100644
index f002ec75fa..0000000000
--- a/ext/iconv/tests/iconv_mime_encode.phpt
+++ /dev/null
@@ -1,426 +0,0 @@
---TEST--
-iconv_mime_encode()
---SKIPIF--
-<?php extension_loaded('iconv') or die('skip iconv extension is not available'); ?>
---INI--
-iconv.internal_charset=iso-8859-1
---FILE--
-<?php
-function my_error_handler($errno, $errmsg, $filename, $linenum, $vars)
-{
- echo "$errno: $errmsg\n";
-}
-set_error_handler('my_error_handler');
-$preference = array(
- "scheme" => "B",
- "output-charset" => "ISO-2022-JP",
- "input-charset" => "EUC-JP",
- "line-break-chars" => "\n"
-);
-for ($line_len= 0; $line_len < 80; ++$line_len) {
- print "-------- line length=$line_len\n";
- $preference["line-length"] = $line_len;
- $result = iconv_mime_encode("From", "¥µ¥ó¥×¥ëʸ»úÎó¥µ¥ó¥×¥ëʸ»úÎóÆüËܸì¥Æ¥­¥¹¥È", $preference);
- var_dump($result);
- if ($result !== false) {
- list($max) = rsort(array_map("strlen", explode("\n", $result)));
- print "-------- ";
- var_dump(($max <= $line_len));
- } else {
- print "-------- \n";
- }
-}
-?>
---EXPECTF--
--------- line length=0
-2: %s
-bool(false)
---------
--------- line length=1
-2: %s
-bool(false)
---------
--------- line length=2
-2: %s
-bool(false)
---------
--------- line length=3
-2: %s
-bool(false)
---------
--------- line length=4
-2: %s
-bool(false)
---------
--------- line length=5
-2: %s
-bool(false)
---------
--------- line length=6
-2: %s
-bool(false)
---------
--------- line length=7
-2: %s
-bool(false)
---------
--------- line length=8
-2: %s
-bool(false)
---------
--------- line length=9
-2: %s
-bool(false)
---------
--------- line length=10
-2: %s
-bool(false)
---------
--------- line length=11
-2: %s
-bool(false)
---------
--------- line length=12
-2: %s
-bool(false)
---------
--------- line length=13
-2: %s
-bool(false)
---------
--------- line length=14
-2: %s
-bool(false)
---------
--------- line length=15
-2: %s
-bool(false)
---------
--------- line length=16
-2: %s
-bool(false)
---------
--------- line length=17
-2: %s
-bool(false)
---------
--------- line length=18
-2: %s
-bool(false)
---------
--------- line length=19
-2: %s
-bool(false)
---------
--------- line length=20
-2: %s
-bool(false)
---------
--------- line length=21
-2: %s
-bool(false)
---------
--------- line length=22
-2: %s
-bool(false)
---------
--------- line length=23
-2: %s
-bool(false)
---------
--------- line length=24
-2: %s
-bool(false)
---------
--------- line length=25
-2: %s
-bool(false)
---------
--------- line length=26
-2: %s
-bool(false)
---------
--------- line length=27
-2: %s
-bool(false)
---------
--------- line length=28
-2: %s
-bool(false)
---------
--------- line length=29
-2: %s
-bool(false)
---------
--------- line length=30
-2: %s
-bool(false)
---------
--------- line length=31
-2: %s
-bool(false)
---------
--------- line length=32
-2: %s
-bool(false)
---------
--------- line length=33
-2: %s
-bool(false)
---------
--------- line length=34
-2: %s
-bool(false)
---------
--------- line length=35
-2: %s
-bool(false)
---------
--------- line length=36
-string(396) "From: =?ISO-2022-JP?B?GyRCJTUbKEI=?=
- =?ISO-2022-JP?B?GyRCJXMlVxsoQg==?=
- =?ISO-2022-JP?B?GyRCJWtKOBsoQg==?=
- =?ISO-2022-JP?B?GyRCO3pOcxsoQg==?=
- =?ISO-2022-JP?B?GyRCJTUlcxsoQg==?=
- =?ISO-2022-JP?B?GyRCJVclaxsoQg==?=
- =?ISO-2022-JP?B?GyRCSjg7ehsoQg==?=
- =?ISO-2022-JP?B?GyRCTnNGfBsoQg==?=
- =?ISO-2022-JP?B?GyRCS1w4bBsoQg==?=
- =?ISO-2022-JP?B?GyRCJUYlLRsoQg==?=
- =?ISO-2022-JP?B?GyRCJTklSBsoQg==?="
--------- bool(true)
--------- line length=37
-string(396) "From: =?ISO-2022-JP?B?GyRCJTUbKEI=?=
- =?ISO-2022-JP?B?GyRCJXMlVxsoQg==?=
- =?ISO-2022-JP?B?GyRCJWtKOBsoQg==?=
- =?ISO-2022-JP?B?GyRCO3pOcxsoQg==?=
- =?ISO-2022-JP?B?GyRCJTUlcxsoQg==?=
- =?ISO-2022-JP?B?GyRCJVclaxsoQg==?=
- =?ISO-2022-JP?B?GyRCSjg7ehsoQg==?=
- =?ISO-2022-JP?B?GyRCTnNGfBsoQg==?=
- =?ISO-2022-JP?B?GyRCS1w4bBsoQg==?=
- =?ISO-2022-JP?B?GyRCJUYlLRsoQg==?=
- =?ISO-2022-JP?B?GyRCJTklSBsoQg==?="
--------- bool(true)
--------- line length=38
-string(396) "From: =?ISO-2022-JP?B?GyRCJTUbKEI=?=
- =?ISO-2022-JP?B?GyRCJXMlVxsoQg==?=
- =?ISO-2022-JP?B?GyRCJWtKOBsoQg==?=
- =?ISO-2022-JP?B?GyRCO3pOcxsoQg==?=
- =?ISO-2022-JP?B?GyRCJTUlcxsoQg==?=
- =?ISO-2022-JP?B?GyRCJVclaxsoQg==?=
- =?ISO-2022-JP?B?GyRCSjg7ehsoQg==?=
- =?ISO-2022-JP?B?GyRCTnNGfBsoQg==?=
- =?ISO-2022-JP?B?GyRCS1w4bBsoQg==?=
- =?ISO-2022-JP?B?GyRCJUYlLRsoQg==?=
- =?ISO-2022-JP?B?GyRCJTklSBsoQg==?="
--------- bool(true)
--------- line length=39
-string(236) "From: =?ISO-2022-JP?B?GyRCJTUbKEI=?=
- =?ISO-2022-JP?B?GyRCJXMlVyVrSjgbKEI=?=
- =?ISO-2022-JP?B?GyRCO3pOcyU1JXMbKEI=?=
- =?ISO-2022-JP?B?GyRCJVcla0o4O3obKEI=?=
- =?ISO-2022-JP?B?GyRCTnNGfEtcOGwbKEI=?=
- =?ISO-2022-JP?B?GyRCJUYlLSU5JUgbKEI=?="
--------- bool(true)
--------- line length=40
-string(236) "From: =?ISO-2022-JP?B?GyRCJTUlcxsoQg==?=
- =?ISO-2022-JP?B?GyRCJVcla0o4O3obKEI=?=
- =?ISO-2022-JP?B?GyRCTnMlNSVzJVcbKEI=?=
- =?ISO-2022-JP?B?GyRCJWtKODt6TnMbKEI=?=
- =?ISO-2022-JP?B?GyRCRnxLXDhsJUYbKEI=?=
- =?ISO-2022-JP?B?GyRCJS0lOSVIGyhC?="
--------- bool(true)
--------- line length=41
-string(236) "From: =?ISO-2022-JP?B?GyRCJTUlcxsoQg==?=
- =?ISO-2022-JP?B?GyRCJVcla0o4O3obKEI=?=
- =?ISO-2022-JP?B?GyRCTnMlNSVzJVcbKEI=?=
- =?ISO-2022-JP?B?GyRCJWtKODt6TnMbKEI=?=
- =?ISO-2022-JP?B?GyRCRnxLXDhsJUYbKEI=?=
- =?ISO-2022-JP?B?GyRCJS0lOSVIGyhC?="
--------- bool(true)
--------- line length=42
-string(236) "From: =?ISO-2022-JP?B?GyRCJTUlcxsoQg==?=
- =?ISO-2022-JP?B?GyRCJVcla0o4O3obKEI=?=
- =?ISO-2022-JP?B?GyRCTnMlNSVzJVcbKEI=?=
- =?ISO-2022-JP?B?GyRCJWtKODt6TnMbKEI=?=
- =?ISO-2022-JP?B?GyRCRnxLXDhsJUYbKEI=?=
- =?ISO-2022-JP?B?GyRCJS0lOSVIGyhC?="
--------- bool(true)
--------- line length=43
-string(212) "From: =?ISO-2022-JP?B?GyRCJTUlcxsoQg==?=
- =?ISO-2022-JP?B?GyRCJVcla0o4O3pOcxsoQg==?=
- =?ISO-2022-JP?B?GyRCJTUlcyVXJWtKOBsoQg==?=
- =?ISO-2022-JP?B?GyRCO3pOc0Z8S1w4bBsoQg==?=
- =?ISO-2022-JP?B?GyRCJUYlLSU5JUgbKEI=?="
--------- bool(true)
--------- line length=44
-string(212) "From: =?ISO-2022-JP?B?GyRCJTUlcyVXJWsbKEI=?=
- =?ISO-2022-JP?B?GyRCSjg7ek5zJTUlcxsoQg==?=
- =?ISO-2022-JP?B?GyRCJVcla0o4O3pOcxsoQg==?=
- =?ISO-2022-JP?B?GyRCRnxLXDhsJUYlLRsoQg==?=
- =?ISO-2022-JP?B?GyRCJTklSBsoQg==?="
--------- bool(true)
--------- line length=45
-string(212) "From: =?ISO-2022-JP?B?GyRCJTUlcyVXJWsbKEI=?=
- =?ISO-2022-JP?B?GyRCSjg7ek5zJTUlcxsoQg==?=
- =?ISO-2022-JP?B?GyRCJVcla0o4O3pOcxsoQg==?=
- =?ISO-2022-JP?B?GyRCRnxLXDhsJUYlLRsoQg==?=
- =?ISO-2022-JP?B?GyRCJTklSBsoQg==?="
--------- bool(true)
--------- line length=46
-string(212) "From: =?ISO-2022-JP?B?GyRCJTUlcyVXJWsbKEI=?=
- =?ISO-2022-JP?B?GyRCSjg7ek5zJTUlcxsoQg==?=
- =?ISO-2022-JP?B?GyRCJVcla0o4O3pOcxsoQg==?=
- =?ISO-2022-JP?B?GyRCRnxLXDhsJUYlLRsoQg==?=
- =?ISO-2022-JP?B?GyRCJTklSBsoQg==?="
--------- bool(true)
--------- line length=47
-string(176) "From: =?ISO-2022-JP?B?GyRCJTUlcyVXJWsbKEI=?=
- =?ISO-2022-JP?B?GyRCSjg7ek5zJTUlcyVXJWsbKEI=?=
- =?ISO-2022-JP?B?GyRCSjg7ek5zRnxLXDhsJUYbKEI=?=
- =?ISO-2022-JP?B?GyRCJS0lOSVIGyhC?="
--------- bool(true)
--------- line length=48
-string(180) "From: =?ISO-2022-JP?B?GyRCJTUlcyVXJWtKOBsoQg==?=
- =?ISO-2022-JP?B?GyRCO3pOcyU1JXMlVyVrSjgbKEI=?=
- =?ISO-2022-JP?B?GyRCO3pOc0Z8S1w4bCVGJS0bKEI=?=
- =?ISO-2022-JP?B?GyRCJTklSBsoQg==?="
--------- bool(true)
--------- line length=49
-string(180) "From: =?ISO-2022-JP?B?GyRCJTUlcyVXJWtKOBsoQg==?=
- =?ISO-2022-JP?B?GyRCO3pOcyU1JXMlVyVrSjgbKEI=?=
- =?ISO-2022-JP?B?GyRCO3pOc0Z8S1w4bCVGJS0bKEI=?=
- =?ISO-2022-JP?B?GyRCJTklSBsoQg==?="
--------- bool(true)
--------- line length=50
-string(180) "From: =?ISO-2022-JP?B?GyRCJTUlcyVXJWtKOBsoQg==?=
- =?ISO-2022-JP?B?GyRCO3pOcyU1JXMlVyVrSjgbKEI=?=
- =?ISO-2022-JP?B?GyRCO3pOc0Z8S1w4bCVGJS0bKEI=?=
- =?ISO-2022-JP?B?GyRCJTklSBsoQg==?="
--------- bool(true)
--------- line length=51
-string(152) "From: =?ISO-2022-JP?B?GyRCJTUlcyVXJWtKOBsoQg==?=
- =?ISO-2022-JP?B?GyRCO3pOcyU1JXMlVyVrSjg7ehsoQg==?=
- =?ISO-2022-JP?B?GyRCTnNGfEtcOGwlRiUtJTklSBsoQg==?="
--------- bool(true)
--------- line length=52
-string(148) "From: =?ISO-2022-JP?B?GyRCJTUlcyVXJWtKODt6TnMbKEI=?=
- =?ISO-2022-JP?B?GyRCJTUlcyVXJWtKODt6TnNGfBsoQg==?=
- =?ISO-2022-JP?B?GyRCS1w4bCVGJS0lOSVIGyhC?="
--------- bool(true)
--------- line length=53
-string(148) "From: =?ISO-2022-JP?B?GyRCJTUlcyVXJWtKODt6TnMbKEI=?=
- =?ISO-2022-JP?B?GyRCJTUlcyVXJWtKODt6TnNGfBsoQg==?=
- =?ISO-2022-JP?B?GyRCS1w4bCVGJS0lOSVIGyhC?="
--------- bool(true)
--------- line length=54
-string(148) "From: =?ISO-2022-JP?B?GyRCJTUlcyVXJWtKODt6TnMbKEI=?=
- =?ISO-2022-JP?B?GyRCJTUlcyVXJWtKODt6TnNGfBsoQg==?=
- =?ISO-2022-JP?B?GyRCS1w4bCVGJS0lOSVIGyhC?="
--------- bool(true)
--------- line length=55
-string(148) "From: =?ISO-2022-JP?B?GyRCJTUlcyVXJWtKODt6TnMbKEI=?=
- =?ISO-2022-JP?B?GyRCJTUlcyVXJWtKODt6TnNGfEtcOGwbKEI=?=
- =?ISO-2022-JP?B?GyRCJUYlLSU5JUgbKEI=?="
--------- bool(true)
--------- line length=56
-string(148) "From: =?ISO-2022-JP?B?GyRCJTUlcyVXJWtKODt6TnMlNRsoQg==?=
- =?ISO-2022-JP?B?GyRCJXMlVyVrSjg7ek5zRnxLXDhsJUYbKEI=?=
- =?ISO-2022-JP?B?GyRCJS0lOSVIGyhC?="
--------- bool(true)
--------- line length=57
-string(148) "From: =?ISO-2022-JP?B?GyRCJTUlcyVXJWtKODt6TnMlNRsoQg==?=
- =?ISO-2022-JP?B?GyRCJXMlVyVrSjg7ek5zRnxLXDhsJUYbKEI=?=
- =?ISO-2022-JP?B?GyRCJS0lOSVIGyhC?="
--------- bool(true)
--------- line length=58
-string(148) "From: =?ISO-2022-JP?B?GyRCJTUlcyVXJWtKODt6TnMlNRsoQg==?=
- =?ISO-2022-JP?B?GyRCJXMlVyVrSjg7ek5zRnxLXDhsJUYbKEI=?=
- =?ISO-2022-JP?B?GyRCJS0lOSVIGyhC?="
--------- bool(true)
--------- line length=59
-string(152) "From: =?ISO-2022-JP?B?GyRCJTUlcyVXJWtKODt6TnMlNRsoQg==?=
- =?ISO-2022-JP?B?GyRCJXMlVyVrSjg7ek5zRnxLXDhsJUYlLRsoQg==?=
- =?ISO-2022-JP?B?GyRCJTklSBsoQg==?="
--------- bool(true)
--------- line length=60
-string(120) "From: =?ISO-2022-JP?B?GyRCJTUlcyVXJWtKODt6TnMlNSVzJVcbKEI=?=
- =?ISO-2022-JP?B?GyRCJWtKODt6TnNGfEtcOGwlRiUtJTklSBsoQg==?="
--------- bool(true)
--------- line length=61
-string(120) "From: =?ISO-2022-JP?B?GyRCJTUlcyVXJWtKODt6TnMlNSVzJVcbKEI=?=
- =?ISO-2022-JP?B?GyRCJWtKODt6TnNGfEtcOGwlRiUtJTklSBsoQg==?="
--------- bool(true)
--------- line length=62
-string(120) "From: =?ISO-2022-JP?B?GyRCJTUlcyVXJWtKODt6TnMlNSVzJVcbKEI=?=
- =?ISO-2022-JP?B?GyRCJWtKODt6TnNGfEtcOGwlRiUtJTklSBsoQg==?="
--------- bool(true)
--------- line length=63
-string(120) "From: =?ISO-2022-JP?B?GyRCJTUlcyVXJWtKODt6TnMlNSVzJVcbKEI=?=
- =?ISO-2022-JP?B?GyRCJWtKODt6TnNGfEtcOGwlRiUtJTklSBsoQg==?="
--------- bool(true)
--------- line length=64
-string(120) "From: =?ISO-2022-JP?B?GyRCJTUlcyVXJWtKODt6TnMlNSVzJVclaxsoQg==?=
- =?ISO-2022-JP?B?GyRCSjg7ek5zRnxLXDhsJUYlLSU5JUgbKEI=?="
--------- bool(true)
--------- line length=65
-string(120) "From: =?ISO-2022-JP?B?GyRCJTUlcyVXJWtKODt6TnMlNSVzJVclaxsoQg==?=
- =?ISO-2022-JP?B?GyRCSjg7ek5zRnxLXDhsJUYlLSU5JUgbKEI=?="
--------- bool(true)
--------- line length=66
-string(120) "From: =?ISO-2022-JP?B?GyRCJTUlcyVXJWtKODt6TnMlNSVzJVclaxsoQg==?=
- =?ISO-2022-JP?B?GyRCSjg7ek5zRnxLXDhsJUYlLSU5JUgbKEI=?="
--------- bool(true)
--------- line length=67
-string(120) "From: =?ISO-2022-JP?B?GyRCJTUlcyVXJWtKODt6TnMlNSVzJVclaxsoQg==?=
- =?ISO-2022-JP?B?GyRCSjg7ek5zRnxLXDhsJUYlLSU5JUgbKEI=?="
--------- bool(true)
--------- line length=68
-string(120) "From: =?ISO-2022-JP?B?GyRCJTUlcyVXJWtKODt6TnMlNSVzJVcla0o4O3obKEI=?=
- =?ISO-2022-JP?B?GyRCTnNGfEtcOGwlRiUtJTklSBsoQg==?="
--------- bool(true)
--------- line length=69
-string(120) "From: =?ISO-2022-JP?B?GyRCJTUlcyVXJWtKODt6TnMlNSVzJVcla0o4O3obKEI=?=
- =?ISO-2022-JP?B?GyRCTnNGfEtcOGwlRiUtJTklSBsoQg==?="
--------- bool(true)
--------- line length=70
-string(120) "From: =?ISO-2022-JP?B?GyRCJTUlcyVXJWtKODt6TnMlNSVzJVcla0o4O3obKEI=?=
- =?ISO-2022-JP?B?GyRCTnNGfEtcOGwlRiUtJTklSBsoQg==?="
--------- bool(true)
--------- line length=71
-string(120) "From: =?ISO-2022-JP?B?GyRCJTUlcyVXJWtKODt6TnMlNSVzJVcla0o4O3obKEI=?=
- =?ISO-2022-JP?B?GyRCTnNGfEtcOGwlRiUtJTklSBsoQg==?="
--------- bool(true)
--------- line length=72
-string(120) "From: =?ISO-2022-JP?B?GyRCJTUlcyVXJWtKODt6TnMlNSVzJVcla0o4O3pOcxsoQg==?=
- =?ISO-2022-JP?B?GyRCRnxLXDhsJUYlLSU5JUgbKEI=?="
--------- bool(true)
--------- line length=73
-string(120) "From: =?ISO-2022-JP?B?GyRCJTUlcyVXJWtKODt6TnMlNSVzJVcla0o4O3pOcxsoQg==?=
- =?ISO-2022-JP?B?GyRCRnxLXDhsJUYlLSU5JUgbKEI=?="
--------- bool(true)
--------- line length=74
-string(120) "From: =?ISO-2022-JP?B?GyRCJTUlcyVXJWtKODt6TnMlNSVzJVcla0o4O3pOcxsoQg==?=
- =?ISO-2022-JP?B?GyRCRnxLXDhsJUYlLSU5JUgbKEI=?="
--------- bool(true)
--------- line length=75
-string(120) "From: =?ISO-2022-JP?B?GyRCJTUlcyVXJWtKODt6TnMlNSVzJVcla0o4O3pOcxsoQg==?=
- =?ISO-2022-JP?B?GyRCRnxLXDhsJUYlLSU5JUgbKEI=?="
--------- bool(true)
--------- line length=76
-string(120) "From: =?ISO-2022-JP?B?GyRCJTUlcyVXJWtKODt6TnMlNSVzJVcla0o4O3pOc0Z8S1wbKEI=?=
- =?ISO-2022-JP?B?GyRCOGwlRiUtJTklSBsoQg==?="
--------- bool(true)
--------- line length=77
-string(120) "From: =?ISO-2022-JP?B?GyRCJTUlcyVXJWtKODt6TnMlNSVzJVcla0o4O3pOc0Z8S1wbKEI=?=
- =?ISO-2022-JP?B?GyRCOGwlRiUtJTklSBsoQg==?="
--------- bool(true)
--------- line length=78
-string(120) "From: =?ISO-2022-JP?B?GyRCJTUlcyVXJWtKODt6TnMlNSVzJVcla0o4O3pOc0Z8S1wbKEI=?=
- =?ISO-2022-JP?B?GyRCOGwlRiUtJTklSBsoQg==?="
--------- bool(true)
--------- line length=79
-string(120) "From: =?ISO-2022-JP?B?GyRCJTUlcyVXJWtKODt6TnMlNSVzJVcla0o4O3pOc0Z8S1wbKEI=?=
- =?ISO-2022-JP?B?GyRCOGwlRiUtJTklSBsoQg==?="
--------- bool(true)
diff --git a/ext/iconv/tests/iconv_stream_filter.phpt b/ext/iconv/tests/iconv_stream_filter.phpt
deleted file mode 100644
index 70facdcf56..0000000000
--- a/ext/iconv/tests/iconv_stream_filter.phpt
+++ /dev/null
@@ -1,41 +0,0 @@
---TEST--
-iconv stream filter
---SKIPIF--
-<?php extension_loaded('iconv') or die('skip iconv extension is not available'); ?>
---INI--
-iconv.internal_charset=iso-8859-1
---FILE--
-<?php
-$fp = fopen(dirname(__FILE__).'/iconv_stream_filter.txt', 'rb');
-var_dump(bin2hex(fread($fp, 10)));
-var_dump(bin2hex(fread($fp, 5)));
-var_dump(bin2hex(fread($fp, 1)));
-fclose($fp);
-
-$fp = fopen(dirname(__FILE__).'/iconv_stream_filter.txt', 'rb');
-stream_filter_append($fp, 'convert.iconv.ISO-2022-JP/EUC-JP');
-var_dump(bin2hex(fread($fp, 10)));
-var_dump(bin2hex(fread($fp, 5)));
-var_dump(bin2hex(fread($fp, 1)));
-fclose($fp);
-
-$fp = fopen(dirname(__FILE__).'/iconv_stream_filter.txt', 'rb');
-stream_filter_append($fp, 'string.rot13'); // this will make conversion fail.
-stream_filter_append($fp, 'convert.iconv.ISO-2022-JP/EUC-JP');
-var_dump(bin2hex(fread($fp, 10)));
-var_dump(bin2hex(fread($fp, 5)));
-var_dump(bin2hex(fread($fp, 1)));
-fclose($fp);
-?>
---EXPECTF--
-string(20) "1b244224332473244b24"
-string(10) "41244f1b28"
-string(2) "42"
-string(20) "a4b3a4f3a4cba4c1a4cf"
-string(10) "69636f6e76"
-string(2) "0a"
-
-Warning: fread(): iconv stream filter ("ISO-2022-JP"=>"EUC-JP"): invalid multibyte sequence in %s on line %d
-string(0) ""
-string(0) ""
-string(0) ""
diff --git a/ext/iconv/tests/iconv_stream_filter.txt b/ext/iconv/tests/iconv_stream_filter.txt
deleted file mode 100644
index 1074d2a48b..0000000000
--- a/ext/iconv/tests/iconv_stream_filter.txt
+++ /dev/null
@@ -1 +0,0 @@
-$B$3$s$K$A$O(Biconv
diff --git a/ext/iconv/tests/iconv_strlen.phpt b/ext/iconv/tests/iconv_strlen.phpt
deleted file mode 100644
index 2c815f4f31..0000000000
--- a/ext/iconv/tests/iconv_strlen.phpt
+++ /dev/null
@@ -1,19 +0,0 @@
---TEST--
-iconv_strlen()
---SKIPIF--
-<?php extension_loaded('iconv') or die('skip iconv extension is not available'); ?>
---FILE--
-<?php
-function foo($str, $charset) {
- var_dump(strlen($str));
- var_dump(iconv_strlen($str, $charset));
-}
-
-foo("abc", "ASCII");
-foo("ÆüËܸì EUC-JP", "EUC-JP");
-?>
---EXPECT--
-int(3)
-int(3)
-int(13)
-int(10)
diff --git a/ext/iconv/tests/iconv_strpos.phpt b/ext/iconv/tests/iconv_strpos.phpt
deleted file mode 100644
index ccf4ea74a7..0000000000
--- a/ext/iconv/tests/iconv_strpos.phpt
+++ /dev/null
@@ -1,52 +0,0 @@
---TEST--
-iconv_strpos()
---SKIPIF--
-<?php extension_loaded('iconv') or die('skip iconv extension is not available'); ?>
---INI--
-iconv.internal_charset=ISO-8859-1
---FILE--
-<?php
-function my_error_handler($errno, $errmsg, $filename, $linenum, $vars)
-{
- echo "$errno: $errmsg\n";
-}
-set_error_handler('my_error_handler');
-function foo($haystk, $needle, $offset, $to_charset = false, $from_charset = false)
-{
- if ($from_charset !== false) {
- $haystk = iconv($from_charset, $to_charset, $haystk);
- }
- var_dump(strpos($haystk, $needle, $offset));
- if ($to_charset !== false) {
- var_dump(iconv_strpos($haystk, $needle, $offset, $to_charset));
- } else {
- var_dump(iconv_strpos($haystk, $needle, $offset));
- }
-}
-foo("abecdbcdabef", "bcd", -1);
-foo("abecdbcdabef", "bcd", 100000);
-foo("abcabcabcdabcababcdabc", "bcd", 0);
-foo("abcabcabcdabcababcdabc", "bcd", 10);
-foo(str_repeat("abcab", 60)."abcdb".str_repeat("adabc", 60), "abcd", 0);
-foo(str_repeat("¤¢¤¤¤¦¤¨¤ª", 30)."¤¤¤¦¤ª¤¨¤¢".str_repeat("¤¢¤¤¤¨¤ª¤¦", 30), "¤¦¤ª", 0, "EUC-JP");
-$str = str_repeat("¤¢¤¤¤¦¤¨¤ª", 60).'$'.str_repeat("¤¢¤¤¤¨¤ª¤¦", 60);
-foo($str, '$', 0, "ISO-2022-JP", "EUC-JP");
-?>
---EXPECTF--
-2: %s
-bool(false)
-2: %s
-bool(false)
-2: %s
-bool(false)
-bool(false)
-int(7)
-int(7)
-int(16)
-int(16)
-int(300)
-int(300)
-int(302)
-int(151)
-int(1)
-int(300)
diff --git a/ext/iconv/tests/iconv_strrpos.phpt b/ext/iconv/tests/iconv_strrpos.phpt
deleted file mode 100644
index f150f88422..0000000000
--- a/ext/iconv/tests/iconv_strrpos.phpt
+++ /dev/null
@@ -1,56 +0,0 @@
---TEST--
-iconv_strrpos()
---SKIPIF--
-<?php extension_loaded('iconv') or die('skip iconv extension is not available'); ?>
---INI--
-iconv.internal_charset=ISO-8859-1
---FILE--
-<?php
-function my_error_handler($errno, $errmsg, $filename, $linenum, $vars)
-{
- echo "$errno: $errmsg\n";
-}
-set_error_handler('my_error_handler');
-function foo($haystk, $needle, $to_charset = false, $from_charset = false)
-{
- if ($from_charset !== false) {
- $haystk = iconv($from_charset, $to_charset, $haystk);
- }
- if ($to_charset !== false) {
- var_dump(iconv_strlen($haystk, $to_charset));
- var_dump(iconv_strrpos($haystk, $needle, $to_charset));
- } else {
- var_dump(iconv_strlen($haystk));
- var_dump(iconv_strrpos($haystk, $needle));
- }
-}
-foo("abecdbcdabcdef", "bcd");
-foo(str_repeat("abcab", 60)."abcdb".str_repeat("adabc", 60), "abcd");
-foo(str_repeat("¤¢¤¤¤¦¤¨¤ª", 30)."¤¤¤¦¤ª¤¨¤¢".str_repeat("¤¢¤¤¤¨¤ª¤¦", 30), "¤¦¤ª", "EUC-JP");
-
-for ($i = 0; $i <=6; ++$i) {
- $str = str_repeat("¤¢¤¤¤¦¤¨¤ª", 60).str_repeat('$', $i).str_repeat("¤¢¤¤¤¨¤ª¤¦", 60);
- foo($str, '$', "ISO-2022-JP", "EUC-JP");
-}
-?>
---EXPECT--
-int(14)
-int(9)
-int(605)
-int(300)
-int(305)
-int(151)
-int(600)
-bool(false)
-int(601)
-int(300)
-int(602)
-int(301)
-int(603)
-int(302)
-int(604)
-int(303)
-int(605)
-int(304)
-int(606)
-int(305)
diff --git a/ext/iconv/tests/iconv_substr.phpt b/ext/iconv/tests/iconv_substr.phpt
deleted file mode 100644
index efa746e6de..0000000000
--- a/ext/iconv/tests/iconv_substr.phpt
+++ /dev/null
@@ -1,59 +0,0 @@
---TEST--
-iconv_substr()
---SKIPIF--
-<?php extension_loaded('iconv') or die('skip iconv extension is not available'); ?>
---INI--
-iconv.internal_charset=ISO-8859-1
---FILE--
-<?php
-function hexdump($str) {
- $len = strlen($str);
- for ($i = 0; $i < $len; ++$i) {
- printf("%02x", ord($str{$i}));
- }
- print "\n";
-}
-
-function foo($str, $offset, $len, $charset) {
- hexdump(substr($str, $offset, $len));
- hexdump(iconv_substr($str, $offset, $len, $charset));
-}
-
-function bar($str, $offset, $len = false) {
- if (is_bool($len)) {
- var_dump(substr($str, $offset));
- var_dump(iconv_substr($str, $offset));
- } else {
- var_dump(substr($str, $offset, $len));
- var_dump(iconv_substr($str, $offset, $len));
- }
-}
-
-foo("abcdefghijklmnopqrstuvwxyz", 5, 7, "ASCII");
-foo("¤¢¤¤¤¦¤¨¤ª¤«¤­¤¯¤±¤³¤µ¤·¤¹", 5, 7, "EUC-JP");
-bar("This is a test", 100000);
-bar("This is a test", 0, 100000);
-bar("This is a test", -3);
-bar("This is a test", 0, -9);
-bar("This is a test", 0, -100000);
-bar("This is a test", -9, -100000);
-var_dump(iconv("ISO-2022-JP", "EUC-JP", iconv_substr(iconv("EUC-JP", "ISO-2022-JP", "¤³¤ó¤Ë¤Á¤Ï ISO-2022-JP"), 3, 8, "ISO-2022-JP")));
-?>
---EXPECT--
-666768696a6b6c
-666768696a6b6c
-a6a4a8a4aaa4ab
-a4aba4ada4afa4b1a4b3a4b5a4b7
-bool(false)
-string(0) ""
-string(14) "This is a test"
-string(14) "This is a test"
-string(3) "est"
-string(3) "est"
-string(5) "This "
-string(5) "This "
-string(0) ""
-string(0) ""
-string(0) ""
-string(0) ""
-string(10) "¤Á¤Ï ISO-2"
diff --git a/ext/iconv/tests/ob_iconv_handler.phpt b/ext/iconv/tests/ob_iconv_handler.phpt
deleted file mode 100644
index f26f87e97c..0000000000
--- a/ext/iconv/tests/ob_iconv_handler.phpt
+++ /dev/null
@@ -1,17 +0,0 @@
---TEST--
-ob_iconv_handler()
---SKIPIF--
-<?php /* include('skipif.inc'); */ ?>
---INI--
-error_reporting=2039
---FILE--
-<?php
-/* include('test.inc'); */
-iconv_set_encoding('internal_encoding', 'EUC-JP');
-iconv_set_encoding('output_encoding', 'Shift_JIS');
-ob_start('ob_iconv_handler');
-print "¤¢¤¤¤¦¤¨¤ª";
-ob_end_flush();
-?>
---EXPECT--
-‚ ‚¢‚¤‚¦‚¨
diff --git a/ext/iconv/tests/skipif.inc b/ext/iconv/tests/skipif.inc
deleted file mode 100644
index 6f7bbf2b86..0000000000
--- a/ext/iconv/tests/skipif.inc
+++ /dev/null
@@ -1,12 +0,0 @@
-<?php
-// This script prints "skip" if condition does not meet.
-
-// Do not dl load extension
-//if (!extension_loaded("iconv") && ini_get("enable_dl")) {
-// $dlext = (substr(PHP_OS, 0, 3) == "WIN") ? ".dll" : ".so";
-// @dl("iconv$dlext");
-//}
-if (!extension_loaded("iconv")) {
- die("skip iconv extension not available\n");
-}
-?> \ No newline at end of file
diff --git a/ext/iconv/tests/test.inc b/ext/iconv/tests/test.inc
deleted file mode 100644
index 78f180462f..0000000000
--- a/ext/iconv/tests/test.inc
+++ /dev/null
@@ -1,7 +0,0 @@
-<?php
-// Do not dl load extension
-//if (!extension_loaded("iconv") && ini_get("enable_dl")) {
-// $dlext = (substr(PHP_OS, 0, 3) == "WIN") ? ".dll" : ".so";
-// @dl("iconv$dlext");
-//}
-?> \ No newline at end of file
diff --git a/ext/iconv/tests/translit-failure.phpt b/ext/iconv/tests/translit-failure.phpt
deleted file mode 100644
index a97e29c029..0000000000
--- a/ext/iconv/tests/translit-failure.phpt
+++ /dev/null
@@ -1,31 +0,0 @@
---TEST--
-Translit failure
---SKIPIF--
-<?php
-/* include('skipif.inc'); */
-( ICONV_IMPL != "libiconv" ) and die("skip ICONV_IMPL != \"libiconv\"");
-?>
---INI--
-error_reporting=2039
---FILE--
-<?php
-/* include('test.inc'); */
-// Should be ok.
-// Content from file is from libiconv testkit. Tested both
-// with a string as an implode, no difference.
-// if at some point internal encoding changes, set correct one
-// in INI section or use file 'TranslitFail1.ISO-8859-1'.
-
-set_time_limit(5);
-/*
- * The bug (fixed in libiconv 1.8) was confirmed that iconv goes into an
- * infinite loop when ASCII//TRANSLIT is performed. We should stop it in
- * some time.
- */
-
-$test = 'Écrit par %s.';
-
-var_dump(iconv("ISO-8859-1", "ASCII//TRANSLIT", $test));
-?>
---EXPECT--
-string(14) "'Ecrit par %s."
diff --git a/ext/iconv/tests/translit-utf8.phpt b/ext/iconv/tests/translit-utf8.phpt
deleted file mode 100644
index 10f9605bb1..0000000000
--- a/ext/iconv/tests/translit-utf8.phpt
+++ /dev/null
@@ -1,28 +0,0 @@
---TEST--
-Translit UTF-8 quotes
---SKIPIF--
-<?php
-/* include('skipif.inc'); */
-( ICONV_IMPL != "libiconv" ) and die("skip ICONV_IMPL != \"libiconv\"");
-?>
---INI--
-magic_quotes_runtime=0
-error_reporting=2047
---FILE--
-<?php // vim600: syn=php
-/* include('test.inc'); */
-//error_reporting(E_ALL);
-$utf = implode('', file('ext/iconv/tests/Quotes.UTF-8'));
-
-print(iconv("UTF-8", "ISO-8859-1//TRANSLIT", $utf));
-print(iconv("UTF-8", "ASCII//TRANSLIT", $utf));
-?>
---EXPECT--
-"Hello"
-`Hello´
-"Hello"
-`Hello´
-"Hello"
-'Hello'
-"Hello"
-'Hello'
diff --git a/ext/imap/CREDITS b/ext/imap/CREDITS
deleted file mode 100644
index 2d19ecd24a..0000000000
--- a/ext/imap/CREDITS
+++ /dev/null
@@ -1,2 +0,0 @@
-IMAP
-Rex Logan, Mark Musone, Brian Wang, Kaj-Michael Lang, Antoni Pamies Olive, Rasmus Lerdorf, Andrew Skalski, Chuck Hagenbuch, Daniel R Kalowsky
diff --git a/ext/imap/IMAP_Win32_HOWTO.txt b/ext/imap/IMAP_Win32_HOWTO.txt
deleted file mode 100644
index 5fbd859a6d..0000000000
--- a/ext/imap/IMAP_Win32_HOWTO.txt
+++ /dev/null
@@ -1,32 +0,0 @@
-Rules for building IMAP
------------------------
-
-Note 1: You *must* use NT's cmd.exe for this job; 4NT.exe will NOT work properly.
-Note 2: During the entire build process, you can ignore warnings about
- inconsistent DLL linkage.
-
-- Open IMAP under php_build. Rename this directory to 'IMAP'.
-- Change to the IMAP directory.
-- Edit .\src\osdep\nt\makefile.nt:
- Search for '/MT', and change it to '/MD'. If you're compiling in DEBUG mode,
- use '/MDd' instead.
- Search for 'ERASE'. Comment out the line that contains the ERASE command.
-- Run 'nmake nt'
-
----Begin Win2K only---
-- At some point, the build will fail. Rerun 'nmake nt'.
-- After a while, the build will fail again, failing to find auths.c.
-- Change directory to 'c-client'
-- Create an a file named auths.c, that includes the following line:
- #include "auth_md5.c"
-- Run 'nmake -f makefile.nt'
----End Win2K only---
-
-At this point (even if the last build apparently failed), you should have the
-client library ready (cclient.lib).
-
-Start Visual Studio, load php_modules.dsw, select the IMAP projects, and build
-it.
-
-
- \ No newline at end of file
diff --git a/ext/imap/config.m4 b/ext/imap/config.m4
deleted file mode 100644
index d0bb00b14b..0000000000
--- a/ext/imap/config.m4
+++ /dev/null
@@ -1,204 +0,0 @@
-dnl
-dnl $Id$
-dnl
-
-AC_DEFUN(IMAP_INC_CHK,[if test -r "$i$1/c-client.h"; then
- AC_DEFINE(HAVE_IMAP2000, 1, [ ])
- IMAP_DIR=$i
- IMAP_INC_DIR=$i$1
- break
- elif test -r "$i$1/rfc822.h"; then
- IMAP_DIR=$i;
- IMAP_INC_DIR=$i$1
- break
-])
-
-AC_DEFUN(IMAP_LIB_CHK,[
- str="$IMAP_DIR/$1/lib$lib.*"
- for i in `echo $str`; do
- test -r $i && IMAP_LIBDIR=$IMAP_DIR/$1 && break 2
- done
-])
-
-dnl PHP_IMAP_TEST_BUILD(function, action-if-ok, action-if-not-ok, extra-libs)
-AC_DEFUN(PHP_IMAP_TEST_BUILD, [
- PHP_TEST_BUILD([$1], [$2], [$3], [$4],
- [
- 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){}
- ])
-])
-
-AC_DEFUN(PHP_IMAP_KRB_CHK, [
- AC_ARG_WITH(kerberos,
- [ --with-kerberos[=DIR] IMAP: Include Kerberos support. DIR is the Kerberos install dir.],[
- PHP_KERBEROS=$withval
- ],[
- PHP_KERBEROS=no
- ])
-
- if test "$PHP_KERBEROS" != "no"; then
-
- if test "$PHP_KERBEROS" = "yes"; then
- SEARCH_PATHS="/usr/kerberos /usr/local /usr"
- else
- SEARCH_PATHS=$PHP_KERBEROS
- fi
-
- for i in $SEARCH_PATHS; do
- if test -f $i/lib/libkrb5.a || test -f $i/lib/libkrb5.$SHLIB_SUFFIX_NAME; then
- PHP_KERBEROS_DIR=$i
- break
- fi
- done
-
- if test -z "$PHP_KERBEROS_DIR"; then
- AC_MSG_ERROR([Kerberos libraries not found.
-
- Check the path given to --with-kerberos (if no path is given, searches in /usr/kerberos, /usr/local and /usr )
- ])
- fi
- AC_DEFINE(HAVE_IMAP_KRB,1,[ ])
- PHP_ADD_LIBPATH($PHP_KERBEROS_DIR/lib, IMAP_SHARED_LIBADD)
- PHP_ADD_LIBRARY(gssapi_krb5, 1, IMAP_SHARED_LIBADD)
- PHP_ADD_LIBRARY(krb5, 1, IMAP_SHARED_LIBADD)
- PHP_ADD_LIBRARY(k5crypto, 1, IMAP_SHARED_LIBADD)
- PHP_ADD_LIBRARY(com_err, 1, IMAP_SHARED_LIBADD)
- PHP_ADD_INCLUDE($PHP_KERBEROS_DIR/include)
- else
- AC_EGREP_HEADER(auth_gss, $IMAP_INC_DIR/linkage.h, [
- AC_MSG_ERROR([This c-client library is built with Kerberos support.
-
- Add --with-kerberos to your configure line. Check config.log for details.
- ])
- ])
- fi
-
-])
-
-AC_DEFUN(PHP_IMAP_SSL_CHK, [
- AC_ARG_WITH(imap-ssl,
- [ --with-imap-ssl=<DIR> IMAP: Include SSL support. DIR is the OpenSSL install dir.],[
- PHP_IMAP_SSL=$withval
- ],[
- PHP_IMAP_SSL=no
- ])
-
- if test "$PHP_IMAP_SSL" = "yes"; then
- PHP_IMAP_SSL=/usr
- fi
-
- AC_MSG_CHECKING([whether SSL libraries are needed for c-client])
-
- if test "$PHP_IMAP_SSL" != "no"; then
- AC_MSG_RESULT([$PHP_IMAP_SSL/lib])
- AC_DEFINE(HAVE_IMAP_SSL,1,[ ])
- PHP_ADD_LIBRARY_DEFER(ssl, 1, IMAP_SHARED_LIBADD)
- PHP_ADD_LIBRARY_DEFER(crypto, 1, IMAP_SHARED_LIBADD)
- PHP_ADD_LIBPATH($PHP_IMAP_SSL/lib, IMAP_SHARED_LIBADD)
- else
- AC_MSG_RESULT(no)
- fi
-])
-
-
-PHP_ARG_WITH(imap,for IMAP support,
-[ --with-imap[=DIR] Include IMAP support. DIR is the c-client install prefix.])
-
-if test "$PHP_IMAP" != "no"; then
-
- PHP_SUBST(IMAP_SHARED_LIBADD)
- PHP_NEW_EXTENSION(imap, php_imap.c, $ext_shared)
- AC_DEFINE(HAVE_IMAP,1,[ ])
-
- for i in $PHP_IMAP /usr/local /usr; do
- IMAP_INC_CHK()
- el[]IMAP_INC_CHK(/include/c-client)
- el[]IMAP_INC_CHK(/include/imap)
- el[]IMAP_INC_CHK(/include)
- el[]IMAP_INC_CHK(/imap)
- el[]IMAP_INC_CHK(/c-client)
- fi
- done
-
- old_CPPFLAGS=$CPPFLAGS
- CPPFLAGS=-I$IMAP_INC_DIR
- AC_EGREP_CPP(this_is_true, [
-#include "imap4r1.h"
-#if defined(IMAPSSLPORT)
- this_is_true
-#endif
- ],[
- AC_DEFINE(HAVE_IMAP2001, 1, [ ])
- ],[])
- CPPFLAGS=$old_CPPFLAGS
-
- PHP_CHECK_LIBRARY(pam, pam_start,
- [
- PHP_ADD_LIBRARY(pam,, IMAP_SHARED_LIBADD)
- AC_DEFINE(HAVE_LIBPAM,1,[ ])
- ])
-
- PHP_CHECK_LIBRARY(crypt, crypt,
- [
- PHP_ADD_LIBRARY(crypt,, IMAP_SHARED_LIBADD)
- AC_DEFINE(HAVE_LIBCRYPT,1,[ ])
- ])
-
- PHP_EXPAND_PATH($IMAP_DIR, IMAP_DIR)
-
- if test -z "$IMAP_DIR"; then
- AC_MSG_ERROR(Cannot find rfc822.h. Please check your IMAP installation.)
- fi
-
- if test -r "$IMAP_DIR/c-client/c-client.a"; then
- ln -s "$IMAP_DIR/c-client/c-client.a" "$IMAP_DIR/c-client/libc-client.a" >/dev/null 2>&1
- elif test -r "$IMAP_DIR/lib/c-client.a"; then
- ln -s "$IMAP_DIR/lib/c-client.a" "$IMAP_DIR/lib/libc-client.a" >/dev/null 2>&1
- fi
-
- for lib in c-client4 c-client imap; do
- IMAP_LIB=$lib
- IMAP_LIB_CHK(lib)
- IMAP_LIB_CHK(c-client)
- done
-
- if test -z "$IMAP_LIBDIR"; then
- AC_MSG_ERROR(Cannot find imap library (libc-client.a). Please check your IMAP installation.)
- fi
-
- PHP_ADD_INCLUDE($IMAP_INC_DIR)
- PHP_ADD_LIBRARY_DEFER($IMAP_LIB,, IMAP_SHARED_LIBADD)
- PHP_ADD_LIBPATH($IMAP_LIBDIR, IMAP_SHARED_LIBADD)
- PHP_IMAP_KRB_CHK
- PHP_IMAP_SSL_CHK
-
- dnl Test the build in the end
- TST_LIBS="$DLIBS $IMAP_SHARED_LIBADD"
-
- dnl Check if auth_gss exists
- PHP_IMAP_TEST_BUILD(auth_gssapi_valid, [
- AC_DEFINE(HAVE_IMAP_AUTH_GSS, 1, [ ])
- ], [], $TST_LIBS)
-
- AC_MSG_CHECKING(whether build with IMAP works)
- PHP_IMAP_TEST_BUILD(mail_newbody, [
- AC_MSG_RESULT(yes)
- ], [
- AC_MSG_RESULT(no)
- AC_MSG_ERROR([build test failed. Please check the config.log for details.])
- ], $TST_LIBS)
-fi
diff --git a/ext/imap/config.w32 b/ext/imap/config.w32
deleted file mode 100644
index 48c002c4aa..0000000000
--- a/ext/imap/config.w32
+++ /dev/null
@@ -1,21 +0,0 @@
-// $Id$
-// vim:ft=javascript
-
-ARG_WITH("imap", "IMAP Support", "no");
-
-if (PHP_IMAP == "yes") {
- if (CHECK_LIB("cclient.lib", "imap") &&
- (CHECK_HEADER_ADD_INCLUDE("c-client.h", "CFLAGS_IMAP")||
- CHECK_HEADER_ADD_INCLUDE("c-client/c-client.h", "CFLAGS_IMAP", null, null, true))) {
- CHECK_LIB("winmm.lib", "imap");
- CHECK_LIB("ws2_32.lib", "imap");
- CHECK_LIB("Secur32.lib", "imap");
- CHECK_LIB("crypt32.lib", "imap");
- EXTENSION("imap", "php_imap.c");
-
- ADD_FLAG("CFLAGS_IMAP", "/D HAVE_IMAP2000=1");
- AC_DEFINE('HAVE_IMAP', 1, 'Have IMAP support', true);
- } else {
- WARNING("imap not enabled; libraries and headers not found");
- }
-}
diff --git a/ext/imap/imap.dsp b/ext/imap/imap.dsp
deleted file mode 100644
index ef05d49f20..0000000000
--- a/ext/imap/imap.dsp
+++ /dev/null
@@ -1,176 +0,0 @@
-# Microsoft Developer Studio Project File - Name="imap" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=imap - Win32 Debug_TS
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "imap.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "imap.mak" CFG="imap - Win32 Debug_TS"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "imap - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "imap - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "imap - Win32 Debug_TS" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "imap - Win32 Release_TS" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "imap - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release"
-# PROP Intermediate_Dir "Release"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "IMAP_EXPORTS" /YX /FD /c
-# ADD CPP /nologo /MD /W3 /GX /O2 /I "..\.." /I "..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\..\php_build\IMAP\c-client" /I "..\..\TSRM" /D "NDEBUG" /D "IMAP_EXPORTS" /D "COMPILE_DL_IMAP" /D HAVE_IMAP=1 /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "ZEND_WIN32" /D "PHP_WIN32" /D ZEND_DEBUG=0 /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x40d /d "NDEBUG"
-# ADD RSC /l 0x40d /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386
-# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib php5nts.lib wsock32.lib winmm.lib cclient.lib /nologo /dll /machine:I386 /out:"Release/php_imap.dll" /libpath:"..\..\Release" /libpath:"..\..\..\php_build\IMAP\C-Client"
-
-!ELSEIF "$(CFG)" == "imap - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug"
-# PROP Intermediate_Dir "Debug"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "IMAP_EXPORTS" /YX /FD /GZ /c
-# ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "..\.." /I "..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\..\php_build\IMAP\c-client" /I "..\..\TSRM" /D "_DEBUG" /D "IMAP_EXPORTS" /D "COMPILE_DL_IMAP" /D HAVE_IMAP=1 /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "ZEND_WIN32" /D "PHP_WIN32" /D ZEND_DEBUG=1 /FR /YX /FD /GZ /c
-# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x40d /d "_DEBUG"
-# ADD RSC /l 0x40d /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib php5nts_debug.lib wsock32.lib winmm.lib cclient.lib /nologo /dll /debug /machine:I386 /out:"Debug/php_imap.dll" /pdbtype:sept /libpath:"..\..\Debug" /libpath:"..\..\..\php_build\IMAP\C-Client"
-
-!ELSEIF "$(CFG)" == "imap - Win32 Debug_TS"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug_TS"
-# PROP BASE Intermediate_Dir "Debug_TS"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug_TS"
-# PROP Intermediate_Dir "Debug_TS"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "IMAP_EXPORTS" /FR /YX /FD /GZ /c
-# ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "..\..\\" /I "..\..\main" /I "..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\TSRM" /D "ZTS" /D "_DEBUG" /D "IMAP_EXPORTS" /D "COMPILE_DL_IMAP" /D HAVE_IMAP=1 /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "ZEND_WIN32" /D "PHP_WIN32" /D ZEND_DEBUG=1 /FR /YX /FD /GZ /c
-# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x40d /d "_DEBUG"
-# ADD RSC /l 0x40d /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib php5ts_debug.lib wsock32.lib winmm.lib cclient.lib /nologo /dll /debug /machine:I386 /out:"..\..\Debug_TS/php_imap.dll" /pdbtype:sept /libpath:"..\..\..\\" /libpath:"..\..\Debug_TS"
-
-!ELSEIF "$(CFG)" == "imap - Win32 Release_TS"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release_TS"
-# PROP BASE Intermediate_Dir "Release_TS"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release_TS"
-# PROP Intermediate_Dir "Release_TS"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "IMAP_EXPORTS" /YX /FD /c
-# ADD CPP /nologo /MD /W3 /GX /O2 /I "..\..\\" /I "..\..\main" /I "..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\TSRM" /I "..\..\..\php_build\imap\c-client" /D "ZTS" /D "NDEBUG" /D "IMAP_EXPORTS" /D "COMPILE_DL_IMAP" /D HAVE_IMAP=1 /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "ZEND_WIN32" /D "PHP_WIN32" /D ZEND_DEBUG=0 /D HAVE_IMAP2001=1 /FR /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x40d /d "NDEBUG"
-# ADD RSC /l 0x40d /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386
-# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib php5ts.lib wsock32.lib winmm.lib cclient.lib Secur32.lib CertIdl.Lib /nologo /dll /machine:I386 /nodefaultlib:"LIBCMT" /out:"..\..\Release_TS/php_imap.dll" /libpath:"..\..\Release_TS" /libpath:"..\..\Release_TS_Inline" /libpath:"..\..\..\php_build\imap"
-# SUBTRACT LINK32 /nodefaultlib
-
-!ENDIF
-
-# Begin Target
-
-# Name "imap - Win32 Release"
-# Name "imap - Win32 Debug"
-# Name "imap - Win32 Debug_TS"
-# Name "imap - Win32 Release_TS"
-# Begin Group "Source Files"
-
-# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
-# Begin Source File
-
-SOURCE=.\php_imap.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\win32\sendmail.c
-# End Source File
-# End Group
-# Begin Group "Header Files"
-
-# PROP Default_Filter "h;hpp;hxx;hm;inl"
-# Begin Source File
-
-SOURCE=.\php_imap.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\win32\sendmail.h
-# End Source File
-# End Group
-# Begin Source File
-
-SOURCE=.\IMAP_Win32_HOWTO.txt
-# End Source File
-# End Target
-# End Project
diff --git a/ext/imap/imap.h b/ext/imap/imap.h
deleted file mode 100644
index 914d128316..0000000000
--- a/ext/imap/imap.h
+++ /dev/null
@@ -1,103 +0,0 @@
-#ifndef _INCLUDED_IMAP_H
-#define _INCLUDED_IMAP_H
-
-#if COMPILE_DL
-#undef HAVE_IMAP
-#define HAVE_IMAP 1
-#endif
-
-#if HAVE_IMAP
-
-#ifndef PHP_WIN32
-#include "build-defs.h"
-#endif
-
-/* Functions accessable to PHP */
-extern zend_module_entry imap_module_entry;
-#define imap_module_ptr &imap_module_entry
-
-extern PHP_MINIT_FUNCTION(imap);
-extern PHP_RINIT_FUNCTION(imap);
-extern PHP_RSHUTDOWN_FUNCTION(imap);
-PHP_MINFO_FUNCTION(imap);
-PHP_FUNCTION(imap_open);
-PHP_FUNCTION(imap_popen);
-PHP_FUNCTION(imap_reopen);
-PHP_FUNCTION(imap_num_msg);
-PHP_FUNCTION(imap_num_recent);
-PHP_FUNCTION(imap_headers);
-PHP_FUNCTION(imap_headerinfo);
-PHP_FUNCTION(imap_rfc822_parse_headers);
-PHP_FUNCTION(imap_body);
-PHP_FUNCTION(imap_fetchstructure);
-PHP_FUNCTION(imap_fetchbody);
-PHP_FUNCTION(imap_expunge);
-PHP_FUNCTION(imap_delete);
-PHP_FUNCTION(imap_undelete);
-PHP_FUNCTION(imap_check);
-PHP_FUNCTION(imap_close);
-PHP_FUNCTION(imap_mail_copy);
-PHP_FUNCTION(imap_mail_move);
-PHP_FUNCTION(imap_createmailbox);
-PHP_FUNCTION(imap_renamemailbox);
-PHP_FUNCTION(imap_deletemailbox);
-PHP_FUNCTION(imap_listmailbox);
-PHP_FUNCTION(imap_scanmailbox);
-PHP_FUNCTION(imap_subscribe);
-PHP_FUNCTION(imap_unsubscribe);
-PHP_FUNCTION(imap_append);
-PHP_FUNCTION(imap_ping);
-PHP_FUNCTION(imap_base64);
-PHP_FUNCTION(imap_qprint);
-PHP_FUNCTION(imap_8bit);
-PHP_FUNCTION(imap_binary);
-PHP_FUNCTION(imap_mailboxmsginfo);
-PHP_FUNCTION(imap_rfc822_write_address);
-PHP_FUNCTION(imap_rfc822_parse_adrlist);
-PHP_FUNCTION(imap_setflag_full);
-PHP_FUNCTION(imap_clearflag_full);
-PHP_FUNCTION(imap_sort);
-PHP_FUNCTION(imap_fetchheader);
-PHP_FUNCTION(imap_fetchtext);
-PHP_FUNCTION(imap_uid);
-PHP_FUNCTION(imap_msgno);
-PHP_FUNCTION(imap_list);
-PHP_FUNCTION(imap_list_full);
-PHP_FUNCTION(imap_listscan);
-PHP_FUNCTION(imap_lsub);
-PHP_FUNCTION(imap_lsub_full);
-PHP_FUNCTION(imap_create);
-PHP_FUNCTION(imap_rename);
-PHP_FUNCTION(imap_status);
-PHP_FUNCTION(imap_bodystruct);
-PHP_FUNCTION(imap_fetch_overview);
-PHP_FUNCTION(imap_mail_compose);
-PHP_FUNCTION(imap_alerts);
-PHP_FUNCTION(imap_errors);
-PHP_FUNCTION(imap_last_error);
-PHP_FUNCTION(imap_mail);
-PHP_FUNCTION(imap_search);
-PHP_FUNCTION(imap_utf8);
-PHP_FUNCTION(imap_utf7_decode);
-PHP_FUNCTION(imap_utf7_encode);
-PHP_FUNCTION(imap_mime_header_decode);
-#else
-#define imap_module_ptr NULL
-#endif /* HAVE_IMAP */
-
-#endif
-
-
-
-
-
-
-#define phpext_imap_ptr imap_module_ptr
-
-
-
-
-
-
-
-
diff --git a/ext/imap/php_imap.c b/ext/imap/php_imap.c
deleted file mode 100644
index 6703e6ba9c..0000000000
--- a/ext/imap/php_imap.c
+++ /dev/null
@@ -1,4343 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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. |
- +----------------------------------------------------------------------+
- | Authors: Rex Logan <veebert@dimensional.com> |
- | Mark Musone <musone@afterfive.com> |
- | Brian Wang <brian@vividnet.com> |
- | Kaj-Michael Lang <milang@tal.org> |
- | Antoni Pamies Olive <toni@readysoft.net> |
- | Rasmus Lerdorf <rasmus@php.net> |
- | Chuck Hagenbuch <chuck@horde.org> |
- | Andrew Skalski <askalski@chekinc.com> |
- | Hartmut Holzgraefe <hholzgra@php.net> |
- | Jani Taskinen <sniper@iki.fi> |
- | Daniel R. Kalowsky <kalowsky@php.net> |
- | PHP 4.0 updates: Zeev Suraski <zeev@zend.com> |
- +----------------------------------------------------------------------+
- */
-/* $Id$ */
-
-#define IMAP41
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "php.h"
-#include "php_ini.h"
-#include "ext/standard/php_string.h"
-#include "ext/standard/info.h"
-#include "ext/standard/file.h"
-
-#ifdef ERROR
-#undef ERROR
-#endif
-#include "php_imap.h"
-
-#include <time.h>
-#include <stdio.h>
-#include <ctype.h>
-#include <signal.h>
-
-#ifdef PHP_WIN32
-#include <winsock2.h>
-#include <stdlib.h>
-#include "win32/sendmail.h"
-MAILSTREAM DEFAULTPROTO;
-#endif
-
-#define CRLF "\015\012"
-#define PHP_EXPUNGE 32768
-#define PHP_IMAP_ADDRESS_SIZE_BUF 10
-
-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);
-
-/* These function declarations are missing from the IMAP header files... */
-void rfc822_date(char *date);
-char *cpystr(const char *str);
-char *cpytxt(SIZEDTEXT *dst, char *text, unsigned long size);
-long utf8_mime2text(SIZEDTEXT *src, SIZEDTEXT *dst);
-unsigned long find_rightmost_bit(unsigned long *valptr);
-void fs_give(void **block);
-void *fs_get(size_t size);
-
-
-/* {{{ imap_functions[]
- */
-function_entry imap_functions[] = {
- PHP_FE(imap_open, NULL)
- PHP_FE(imap_reopen, NULL)
- PHP_FE(imap_close, NULL)
- PHP_FE(imap_num_msg, NULL)
- PHP_FE(imap_num_recent, NULL)
- PHP_FE(imap_headers, NULL)
- PHP_FE(imap_headerinfo, NULL)
- PHP_FE(imap_rfc822_parse_headers, NULL)
- PHP_FE(imap_rfc822_write_address, NULL)
- PHP_FE(imap_rfc822_parse_adrlist, NULL)
- PHP_FE(imap_body, NULL)
- PHP_FE(imap_bodystruct, NULL)
- PHP_FE(imap_fetchbody, NULL)
- PHP_FE(imap_fetchheader, NULL)
- PHP_FE(imap_fetchstructure, NULL)
- PHP_FE(imap_expunge, NULL)
- PHP_FE(imap_delete, NULL)
- PHP_FE(imap_undelete, NULL)
- PHP_FE(imap_check, NULL)
- PHP_FE(imap_mail_copy, NULL)
- PHP_FE(imap_mail_move, NULL)
- PHP_FE(imap_mail_compose, NULL)
- PHP_FE(imap_createmailbox, NULL)
- PHP_FE(imap_renamemailbox, NULL)
- PHP_FE(imap_deletemailbox, NULL)
- PHP_FE(imap_subscribe, NULL)
- PHP_FE(imap_unsubscribe, NULL)
- PHP_FE(imap_append, NULL)
- PHP_FE(imap_ping, NULL)
- PHP_FE(imap_base64, NULL)
- PHP_FE(imap_qprint, NULL)
- PHP_FE(imap_8bit, NULL)
- PHP_FE(imap_binary, NULL)
- PHP_FE(imap_utf8, NULL)
- PHP_FE(imap_status, NULL)
- PHP_FE(imap_mailboxmsginfo, NULL)
- PHP_FE(imap_setflag_full, NULL)
- PHP_FE(imap_clearflag_full, NULL)
- PHP_FE(imap_sort, NULL)
- PHP_FE(imap_uid, NULL)
- PHP_FE(imap_msgno, NULL)
- PHP_FE(imap_list, NULL)
- PHP_FE(imap_lsub, NULL)
- PHP_FE(imap_fetch_overview, NULL)
- PHP_FE(imap_alerts, NULL)
- PHP_FE(imap_errors, NULL)
- PHP_FE(imap_last_error, NULL)
- PHP_FE(imap_search, NULL)
- PHP_FE(imap_utf7_decode, NULL)
- PHP_FE(imap_utf7_encode, NULL)
- PHP_FE(imap_mime_header_decode, NULL)
- PHP_FE(imap_thread, NULL)
- PHP_FE(imap_timeout, NULL)
-
-#if defined(HAVE_IMAP2000) || defined(HAVE_IMAP2001)
- PHP_FE(imap_get_quota, NULL)
- PHP_FE(imap_get_quotaroot, NULL)
- PHP_FE(imap_set_quota, NULL)
- PHP_FE(imap_setacl, NULL)
- PHP_FE(imap_getacl, NULL)
-#endif
-
- PHP_FE(imap_mail, NULL)
-
- PHP_FALIAS(imap_header, imap_headerinfo, NULL)
- PHP_FALIAS(imap_listmailbox, imap_list, NULL)
- PHP_FALIAS(imap_getmailboxes, imap_list_full, NULL)
- PHP_FALIAS(imap_scanmailbox, imap_listscan, NULL)
- PHP_FALIAS(imap_listsubscribed, imap_lsub, NULL)
- PHP_FALIAS(imap_getsubscribed, imap_lsub_full, NULL)
- PHP_FALIAS(imap_fetchtext, imap_body, NULL)
- PHP_FALIAS(imap_scan, imap_listscan, NULL)
- PHP_FALIAS(imap_create, imap_createmailbox, NULL)
- PHP_FALIAS(imap_rename, imap_renamemailbox, NULL)
- {NULL, NULL, NULL}
-};
-/* }}} */
-
-/* {{{ imap_module_entry
- */
-zend_module_entry imap_module_entry = {
- STANDARD_MODULE_HEADER,
- "imap",
- imap_functions,
- PHP_MINIT(imap),
- NULL,
- PHP_RINIT(imap),
- PHP_RSHUTDOWN(imap),
- PHP_MINFO(imap),
- NO_VERSION_YET,
- STANDARD_MODULE_PROPERTIES
-};
-/* }}} */
-
-ZEND_DECLARE_MODULE_GLOBALS(imap)
-
-#ifdef COMPILE_DL_IMAP
-ZEND_GET_MODULE(imap)
-#endif
-
-/* True globals, no need for thread safety */
-static int le_imap;
-
-#define PHP_IMAP_CHECK_MSGNO(msgindex) \
- if ((msgindex < 1) || ((unsigned) msgindex > imap_le_struct->imap_stream->nmsgs)) { \
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Bad message number"); \
- RETURN_FALSE; \
- } \
-
-/* {{{ mail_close_it
- */
-static void mail_close_it(zend_rsrc_list_entry *rsrc TSRMLS_DC)
-{
- pils *imap_le_struct = (pils *)rsrc->ptr;
-
- mail_close_full(imap_le_struct->imap_stream, imap_le_struct->flags);
-
- if (IMAPG(imap_user)) {
- efree(IMAPG(imap_user));
- IMAPG(imap_user) = 0;
- }
- if (IMAPG(imap_password)) {
- efree(IMAPG(imap_password));
- IMAPG(imap_password) = 0;
- }
-
- efree(imap_le_struct);
-}
-/* }}} */
-
-/* {{{ add_assoc_object
- */
-static int add_assoc_object(zval *arg, char *key, zval *tmp TSRMLS_DC)
-{
- HashTable *symtable;
-
- if (Z_TYPE_P(arg) == IS_OBJECT) {
- symtable = Z_OBJPROP_P(arg);
- } else {
- symtable = Z_ARRVAL_P(arg);
- }
- return zend_hash_update(symtable, key, strlen(key)+1, (void *) &tmp, sizeof(zval *), NULL);
-}
-/* }}} */
-
-/* {{{ add_next_index_object
- */
-static inline int add_next_index_object(zval *arg, zval *tmp TSRMLS_DC)
-{
- HashTable *symtable;
-
- if (Z_TYPE_P(arg) == IS_OBJECT) {
- symtable = Z_OBJPROP_P(arg);
- } else {
- symtable = Z_ARRVAL_P(arg);
- }
-
- return zend_hash_next_index_insert(symtable, (void *) &tmp, sizeof(zval *), NULL);
-}
-/* }}} */
-
-/* {{{ mail_newfolderobjectlist
- *
- * Mail instantiate FOBJECTLIST
- * Returns: new FOBJECTLIST list
- * Author: CJH
- */
-FOBJECTLIST *mail_newfolderobjectlist(void)
-{
- return (FOBJECTLIST *) memset(fs_get(sizeof(FOBJECTLIST)), 0, sizeof(FOBJECTLIST));
-}
-/* }}} */
-
-/* {{{ mail_free_foblist
- *
- * Mail garbage collect FOBJECTLIST
- * Accepts: pointer to FOBJECTLIST pointer
- * Author: CJH
- */
-void mail_free_foblist(FOBJECTLIST **foblist, FOBJECTLIST **tail)
-{
- FOBJECTLIST *cur, *next;
-
- for (cur=*foblist, next=cur->next; cur; cur=next) {
- next = cur->next;
-
- if(cur->text.data)
- fs_give((void **)&(cur->text.data));
-
- fs_give((void **)&cur);
- }
-
- *tail = NIL;
- *foblist = NIL;
-}
-/* }}} */
-
-/* {{{ mail_newerrorlist
- *
- * Mail instantiate ERRORLIST
- * Returns: new ERRORLIST list
- * Author: CJH
- */
-ERRORLIST *mail_newerrorlist(void)
-{
- return (ERRORLIST *) memset(fs_get(sizeof(ERRORLIST)), 0, sizeof(ERRORLIST));
-}
-/* }}} */
-
-/* {{{ mail_free_errorlist
- *
- * Mail garbage collect FOBJECTLIST
- * Accepts: pointer to FOBJECTLIST pointer
- * Author: CJH
- */
-void mail_free_errorlist(ERRORLIST **errlist)
-{
- if (*errlist) { /* only free if exists */
- if ((*errlist)->text.data) {
- fs_give((void **) &(*errlist)->text.data);
- }
- mail_free_errorlist (&(*errlist)->next);
- fs_give((void **) errlist); /* return string to free storage */
- }
-}
-/* }}} */
-
-/* {{{ mail_newmessagelist
- *
- * Mail instantiate MESSAGELIST
- * Returns: new MESSAGELIST list
- * Author: CJH
- */
-MESSAGELIST *mail_newmessagelist(void)
-{
- return (MESSAGELIST *) memset(fs_get(sizeof(MESSAGELIST)), 0, sizeof(MESSAGELIST));
-}
-/* }}} */
-
-/* {{{ mail_free_messagelist
- *
- * Mail garbage collect MESSAGELIST
- * Accepts: pointer to MESSAGELIST pointer
- * Author: CJH
- */
-void mail_free_messagelist(MESSAGELIST **msglist, MESSAGELIST **tail)
-{
- MESSAGELIST *cur, *next;
-
- for (cur = *msglist, next = cur->next; cur; cur = next) {
- next = cur->next;
- fs_give((void **)&cur);
- }
-
- *tail = NIL;
- *msglist = NIL;
-}
-/* }}} */
-
-#if defined(HAVE_IMAP2000) || defined(HAVE_IMAP2001)
-/* {{{ mail_getquota
- *
- * Mail GET_QUOTA callback
- * Called via the mail_parameter function in c-client:src/c-client/mail.c
- * Author DRK
- */
-
-void mail_getquota(MAILSTREAM *stream, char *qroot, QUOTALIST *qlist)
-{
- zval *t_map, *return_value;
- TSRMLS_FETCH();
-
- return_value = *IMAPG(quota_return);
-
-/* put parsing code here */
- for(; qlist; qlist = qlist->next) {
- MAKE_STD_ZVAL(t_map);
- array_init(t_map);
- if (strncmp(qlist->name, "STORAGE", 7) == 0)
- {
- /* this is to add backwards compatibility */
- add_assoc_long_ex(return_value, "usage", sizeof("usage"), qlist->usage);
- add_assoc_long_ex(return_value, "limit", sizeof("limit"), qlist->limit);
- }
-
- add_assoc_long_ex(t_map, "usage", sizeof("usage"), qlist->usage);
- add_assoc_long_ex(t_map, "limit", sizeof("limit"), qlist->limit);
- add_assoc_zval_ex(return_value, qlist->name, strlen(qlist->name)+1, t_map);
- }
-}
-/* }}} */
-
-
-/* {{{ mail_getquota
- *
- * Mail GET_ACL callback
- * Called via the mail_parameter function in c-client:src/c-client/mail.c
- */
-void mail_getacl(MAILSTREAM *stream, char *mailbox, ACLLIST *alist)
-{
- TSRMLS_FETCH();
-
- /* walk through the ACLLIST */
- for(; alist; alist = alist->next) {
- add_assoc_stringl(IMAPG(imap_acl_list), alist->identifier, alist->rights, strlen(alist->rights), 1);
- }
-}
-/* }}} */
-
-#endif
-
-
-/* {{{ php_imap_init_globals
- */
-static void php_imap_init_globals(zend_imap_globals *imap_globals)
-{
- imap_globals->imap_user = NIL;
- imap_globals->imap_password = NIL;
-
- imap_globals->imap_alertstack = NIL;
- imap_globals->imap_errorstack = NIL;
-
- imap_globals->imap_folders = NIL;
- imap_globals->imap_folders_tail = NIL;
- imap_globals->imap_sfolders = NIL;
- imap_globals->imap_sfolders_tail = NIL;
- imap_globals->imap_messages = NIL;
- imap_globals->imap_messages_tail = NIL;
- imap_globals->imap_folder_objects = NIL;
- imap_globals->imap_folder_objects_tail = NIL;
- imap_globals->imap_sfolder_objects = NIL;
- imap_globals->imap_sfolder_objects_tail = NIL;
-
- imap_globals->folderlist_style = FLIST_ARRAY;
-#if defined(HAVE_IMAP2000) || defined(HAVE_IMAP2001)
- imap_globals->quota_return = NIL;
- imap_globals->imap_acl_list = NIL;
-#endif
-}
-/* }}} */
-
-/* {{{ PHP_MINIT_FUNCTION
- */
-PHP_MINIT_FUNCTION(imap)
-{
- unsigned long sa_all = SA_MESSAGES | SA_RECENT | SA_UNSEEN | SA_UIDNEXT | SA_UIDVALIDITY;
-
- ZEND_INIT_MODULE_GLOBALS(imap, php_imap_init_globals, NULL)
-
-#ifndef PHP_WIN32
- mail_link(&unixdriver); /* link in the unix driver */
- mail_link(&mhdriver); /* link in the mh driver */
- /* mail_link(&mxdriver); */ /* According to c-client docs (internal.txt) this shouldn't be used. */
- mail_link(&mmdfdriver); /* link in the mmdf driver */
- mail_link(&newsdriver); /* link in the news driver */
- mail_link(&philedriver); /* link in the phile driver */
-#endif
- mail_link(&imapdriver); /* link in the imap driver */
- mail_link(&nntpdriver); /* link in the nntp driver */
- mail_link(&pop3driver); /* link in the pop3 driver */
- mail_link(&mbxdriver); /* link in the mbx driver */
- mail_link(&tenexdriver); /* link in the tenex driver */
- mail_link(&mtxdriver); /* link in the mtx driver */
- mail_link(&dummydriver); /* link in the dummy driver */
-
-#ifndef PHP_WIN32
- auth_link(&auth_log); /* link in the log authenticator */
- auth_link(&auth_md5); /* link in the cram-md5 authenticator */
-#if HAVE_IMAP_KRB && defined(HAVE_IMAP_AUTH_GSS)
- auth_link(&auth_gss); /* link in the gss authenticator */
-#endif
-
-#ifdef HAVE_IMAP_SSL
- ssl_onceonlyinit ();
-#endif
-#endif
-
- /* lets allow NIL */
- REGISTER_LONG_CONSTANT("NIL", NIL, CONST_PERSISTENT | CONST_CS);
-
- /* set default timeout values */
- mail_parameters(NIL, SET_OPENTIMEOUT, (void *) FG(default_socket_timeout));
- mail_parameters(NIL, SET_READTIMEOUT, (void *) FG(default_socket_timeout));
- mail_parameters(NIL, SET_WRITETIMEOUT, (void *) FG(default_socket_timeout));
- mail_parameters(NIL, SET_CLOSETIMEOUT, (void *) FG(default_socket_timeout));
-
- /* timeout constants */
- REGISTER_LONG_CONSTANT("IMAP_OPENTIMEOUT", 1, CONST_PERSISTENT | CONST_CS);
- REGISTER_LONG_CONSTANT("IMAP_READTIMEOUT", 2, CONST_PERSISTENT | CONST_CS);
- REGISTER_LONG_CONSTANT("IMAP_WRITETIMEOUT", 3, CONST_PERSISTENT | CONST_CS);
- REGISTER_LONG_CONSTANT("IMAP_CLOSETIMEOUT", 4, CONST_PERSISTENT | CONST_CS);
-
- /* Open Options */
-
- REGISTER_LONG_CONSTANT("OP_DEBUG", OP_DEBUG, CONST_PERSISTENT | CONST_CS);
- /* debug protocol negotiations */
- REGISTER_LONG_CONSTANT("OP_READONLY", OP_READONLY, CONST_PERSISTENT | CONST_CS);
- /* read-only open */
- REGISTER_LONG_CONSTANT("OP_ANONYMOUS", OP_ANONYMOUS, CONST_PERSISTENT | CONST_CS);
- /* anonymous open of newsgroup */
- REGISTER_LONG_CONSTANT("OP_SHORTCACHE", OP_SHORTCACHE, CONST_PERSISTENT | CONST_CS);
- /* short (elt-only) caching */
- REGISTER_LONG_CONSTANT("OP_SILENT", OP_SILENT, CONST_PERSISTENT | CONST_CS);
- /* don't pass up events (internal use) */
- REGISTER_LONG_CONSTANT("OP_PROTOTYPE", OP_PROTOTYPE, CONST_PERSISTENT | CONST_CS);
- /* return driver prototype */
- REGISTER_LONG_CONSTANT("OP_HALFOPEN", OP_HALFOPEN, CONST_PERSISTENT | CONST_CS);
- /* half-open (IMAP connect but no select) */
- REGISTER_LONG_CONSTANT("OP_EXPUNGE", OP_EXPUNGE, CONST_PERSISTENT | CONST_CS);
- /* silently expunge recycle stream */
- REGISTER_LONG_CONSTANT("OP_SECURE", OP_SECURE, CONST_PERSISTENT | CONST_CS);
- /* don't do non-secure authentication */
-
- /*
- PHP re-assigns CL_EXPUNGE a custom value that can be used as part of the imap_open() bitfield
- because it seems like a good idea to be able to indicate that the mailbox should be
- automatically expunged during imap_open in case the script get interrupted and it doesn't get
- to the imap_close() where this option is normally placed. If the c-client library adds other
- options and the value for this one conflicts, simply make PHP_EXPUNGE higher at the top of
- this file
- */
- REGISTER_LONG_CONSTANT("CL_EXPUNGE", PHP_EXPUNGE, CONST_PERSISTENT | CONST_CS);
- /* expunge silently */
-
-
- /* Fetch options */
-
- REGISTER_LONG_CONSTANT("FT_UID", FT_UID, CONST_PERSISTENT | CONST_CS);
- /* argument is a UID */
- REGISTER_LONG_CONSTANT("FT_PEEK", FT_PEEK, CONST_PERSISTENT | CONST_CS);
- /* peek at data */
- REGISTER_LONG_CONSTANT("FT_NOT", FT_NOT, CONST_PERSISTENT | CONST_CS);
- /* NOT flag for header lines fetch */
- REGISTER_LONG_CONSTANT("FT_INTERNAL", FT_INTERNAL, CONST_PERSISTENT | CONST_CS);
- /* text can be internal strings */
- REGISTER_LONG_CONSTANT("FT_PREFETCHTEXT", FT_PREFETCHTEXT, CONST_PERSISTENT | CONST_CS);
- /* IMAP prefetch text when fetching header */
-
-
- /* Flagging options */
-
- REGISTER_LONG_CONSTANT("ST_UID", ST_UID, CONST_PERSISTENT | CONST_CS);
- /* argument is a UID sequence */
- REGISTER_LONG_CONSTANT("ST_SILENT", ST_SILENT, CONST_PERSISTENT | CONST_CS);
- /* don't return results */
- REGISTER_LONG_CONSTANT("ST_SET", ST_SET, CONST_PERSISTENT | CONST_CS);
- /* set vs. clear */
-
-
- /* Copy options */
-
- REGISTER_LONG_CONSTANT("CP_UID", CP_UID, CONST_PERSISTENT | CONST_CS);
- /* argument is a UID sequence */
- REGISTER_LONG_CONSTANT("CP_MOVE", CP_MOVE, CONST_PERSISTENT | CONST_CS);
- /* delete from source after copying */
-
-
- /* Search/sort options */
-
- REGISTER_LONG_CONSTANT("SE_UID", SE_UID, CONST_PERSISTENT | CONST_CS);
- /* return UID */
- REGISTER_LONG_CONSTANT("SE_FREE", SE_FREE, CONST_PERSISTENT | CONST_CS);
- /* free search program after finished */
- REGISTER_LONG_CONSTANT("SE_NOPREFETCH", SE_NOPREFETCH, CONST_PERSISTENT | CONST_CS);
- /* no search prefetching */
- REGISTER_LONG_CONSTANT("SO_FREE", SO_FREE, CONST_PERSISTENT | CONST_CS);
- /* free sort program after finished */
- REGISTER_LONG_CONSTANT("SO_NOSERVER", SO_NOSERVER, CONST_PERSISTENT | CONST_CS);
- /* don't do server-based sort */
-
-
- /* Status options */
-
- REGISTER_LONG_CONSTANT("SA_MESSAGES", SA_MESSAGES , CONST_PERSISTENT | CONST_CS);
- /* number of messages */
- REGISTER_LONG_CONSTANT("SA_RECENT", SA_RECENT, CONST_PERSISTENT | CONST_CS);
- /* number of recent messages */
- REGISTER_LONG_CONSTANT("SA_UNSEEN", SA_UNSEEN , CONST_PERSISTENT | CONST_CS);
- /* number of unseen messages */
- REGISTER_LONG_CONSTANT("SA_UIDNEXT", SA_UIDNEXT, CONST_PERSISTENT | CONST_CS);
- /* next UID to be assigned */
- REGISTER_LONG_CONSTANT("SA_UIDVALIDITY", SA_UIDVALIDITY , CONST_PERSISTENT | CONST_CS);
- /* UID validity value */
- REGISTER_LONG_CONSTANT("SA_ALL", sa_all, CONST_PERSISTENT | CONST_CS);
- /* get all status information */
-
-
- /* Bits for mm_list() and mm_lsub() */
-
- REGISTER_LONG_CONSTANT("LATT_NOINFERIORS", LATT_NOINFERIORS , CONST_PERSISTENT | CONST_CS);
- REGISTER_LONG_CONSTANT("LATT_NOSELECT", LATT_NOSELECT, CONST_PERSISTENT | CONST_CS);
- REGISTER_LONG_CONSTANT("LATT_MARKED", LATT_MARKED, CONST_PERSISTENT | CONST_CS);
- REGISTER_LONG_CONSTANT("LATT_UNMARKED", LATT_UNMARKED , CONST_PERSISTENT | CONST_CS);
-
-#ifdef LATT_REFERRAL
- REGISTER_LONG_CONSTANT("LATT_REFERRAL", LATT_REFERRAL, CONST_PERSISTENT | CONST_CS);
-#endif
-
-#ifdef LATT_HASCHILDREN
- REGISTER_LONG_CONSTANT("LATT_HASCHILDREN", LATT_HASCHILDREN, CONST_PERSISTENT | CONST_CS);
-#endif
-
-#ifdef LATT_HASNOCHILDREN
- REGISTER_LONG_CONSTANT("LATT_HASNOCHILDREN", LATT_HASNOCHILDREN, CONST_PERSISTENT | CONST_CS);
-#endif
-
- /* Sort functions */
-
- REGISTER_LONG_CONSTANT("SORTDATE", SORTDATE , CONST_PERSISTENT | CONST_CS);
- /* date */
- REGISTER_LONG_CONSTANT("SORTARRIVAL", SORTARRIVAL , CONST_PERSISTENT | CONST_CS);
- /* arrival date */
- REGISTER_LONG_CONSTANT("SORTFROM", SORTFROM , CONST_PERSISTENT | CONST_CS);
- /* from */
- REGISTER_LONG_CONSTANT("SORTSUBJECT", SORTSUBJECT , CONST_PERSISTENT | CONST_CS);
- /* subject */
- REGISTER_LONG_CONSTANT("SORTTO", SORTTO , CONST_PERSISTENT | CONST_CS);
- /* to */
- REGISTER_LONG_CONSTANT("SORTCC", SORTCC , CONST_PERSISTENT | CONST_CS);
- /* cc */
- REGISTER_LONG_CONSTANT("SORTSIZE", SORTSIZE , CONST_PERSISTENT | CONST_CS);
- /* size */
-
- REGISTER_LONG_CONSTANT("TYPETEXT", TYPETEXT , CONST_PERSISTENT | CONST_CS);
- REGISTER_LONG_CONSTANT("TYPEMULTIPART", TYPEMULTIPART , CONST_PERSISTENT | CONST_CS);
- REGISTER_LONG_CONSTANT("TYPEMESSAGE", TYPEMESSAGE , CONST_PERSISTENT | CONST_CS);
- REGISTER_LONG_CONSTANT("TYPEAPPLICATION", TYPEAPPLICATION , CONST_PERSISTENT | CONST_CS);
- REGISTER_LONG_CONSTANT("TYPEAUDIO", TYPEAUDIO , CONST_PERSISTENT | CONST_CS);
- REGISTER_LONG_CONSTANT("TYPEIMAGE", TYPEIMAGE , CONST_PERSISTENT | CONST_CS);
- REGISTER_LONG_CONSTANT("TYPEVIDEO", TYPEVIDEO , CONST_PERSISTENT | CONST_CS);
- REGISTER_LONG_CONSTANT("TYPEMODEL", TYPEMODEL , CONST_PERSISTENT | CONST_CS);
- REGISTER_LONG_CONSTANT("TYPEOTHER", TYPEOTHER , CONST_PERSISTENT | CONST_CS);
- /*
- TYPETEXT unformatted text
- TYPEMULTIPART multiple part
- TYPEMESSAGE encapsulated message
- TYPEAPPLICATION application data
- TYPEAUDIO audio
- TYPEIMAGE static image (GIF, JPEG, etc.)
- TYPEVIDEO video
- TYPEMODEL model
- TYPEOTHER unknown
- */
-
- REGISTER_LONG_CONSTANT("ENC7BIT", ENC7BIT , CONST_PERSISTENT | CONST_CS);
- REGISTER_LONG_CONSTANT("ENC8BIT", ENC8BIT , CONST_PERSISTENT | CONST_CS);
- REGISTER_LONG_CONSTANT("ENCBINARY", ENCBINARY , CONST_PERSISTENT | CONST_CS);
- REGISTER_LONG_CONSTANT("ENCBASE64", ENCBASE64, CONST_PERSISTENT | CONST_CS);
- REGISTER_LONG_CONSTANT("ENCQUOTEDPRINTABLE", ENCQUOTEDPRINTABLE , CONST_PERSISTENT | CONST_CS);
- REGISTER_LONG_CONSTANT("ENCOTHER", ENCOTHER , CONST_PERSISTENT | CONST_CS);
- /*
- ENC7BIT 7 bit SMTP semantic data
- ENC8BIT 8 bit SMTP semantic data
- ENCBINARY 8 bit binary data
- ENCBASE64 base-64 encoded data
- ENCQUOTEDPRINTABLE human-readable 8-as-7 bit data
- ENCOTHER unknown
- */
-
- le_imap = zend_register_list_destructors_ex(mail_close_it, NULL, "imap", module_number);
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ PHP_RINIT_FUNCTION
- */
-PHP_RINIT_FUNCTION(imap)
-{
- IMAPG(imap_errorstack) = NIL;
- IMAPG(imap_alertstack) = NIL;
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ PHP_RSHUTDOWN_FUNCTION
- */
-PHP_RSHUTDOWN_FUNCTION(imap)
-{
- ERRORLIST *ecur = NIL;
- STRINGLIST *acur = NIL;
-
- if (IMAPG(imap_errorstack) != NIL) {
- /* output any remaining errors at their original error level */
- if (EG(error_reporting) & E_NOTICE) {
- ecur = IMAPG(imap_errorstack);
- while (ecur != NIL) {
- php_error_docref(NULL TSRMLS_CC, E_NOTICE, "%s (errflg=%ld)", ecur->LTEXT, ecur->errflg);
- ecur = ecur->next;
- }
- }
- mail_free_errorlist(&IMAPG(imap_errorstack));
- }
-
- if (IMAPG(imap_alertstack) != NIL) {
- /* output any remaining alerts at E_NOTICE level */
- if (EG(error_reporting) & E_NOTICE) {
- acur = IMAPG(imap_alertstack);
- while (acur != NIL) {
- php_error_docref(NULL TSRMLS_CC, E_NOTICE, "%s", acur->LTEXT);
- acur = acur->next;
- }
- }
- mail_free_stringlist(&IMAPG(imap_alertstack));
- IMAPG(imap_alertstack) = NIL;
- }
- return SUCCESS;
-}
-/* }}} */
-
-
-/* {{{ PHP_MINFO_FUNCTION
- */
-PHP_MINFO_FUNCTION(imap)
-{
- php_info_print_table_start();
-#if HAVE_IMAP2001
- php_info_print_table_row(2, "IMAP c-Client Version", "2001");
-#elif HAVE_IMAP2000
- php_info_print_table_row(2, "IMAP c-Client Version", "2000");
-#elif defined(IMAP41)
- php_info_print_table_row(2, "IMAP c-Client Version", "4.1");
-#else
- php_info_print_table_row(2, "IMAP c-Client Version", "4.0");
-#endif
-#if HAVE_IMAP_SSL
- php_info_print_table_row(2, "SSL Support", "enabled");
-#endif
-#if HAVE_IMAP_KRB
- php_info_print_table_row(2, "Kerberos Support", "enabled");
-#endif
- php_info_print_table_end();
-}
-/* }}} */
-
-/* {{{ imap_do_open
- */
-static void php_imap_do_open(INTERNAL_FUNCTION_PARAMETERS, int persistent)
-{
- zval **mailbox, **user, **passwd, **options;
- MAILSTREAM *imap_stream;
- pils *imap_le_struct;
- long flags=NIL;
- long cl_flags=NIL;
- int myargc = ZEND_NUM_ARGS();
-
- if (myargc < 3 || myargc > 4 || zend_get_parameters_ex(myargc, &mailbox, &user, &passwd, &options) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- convert_to_string_ex(mailbox);
- convert_to_string_ex(user);
- convert_to_string_ex(passwd);
- if (myargc ==4) {
- convert_to_long_ex(options);
- flags = Z_LVAL_PP(options);
- if (flags & PHP_EXPUNGE) {
- cl_flags = CL_EXPUNGE;
- flags ^= PHP_EXPUNGE;
- }
- }
-
- if (IMAPG(imap_user)) {
- efree(IMAPG(imap_user));
- }
-
- if (IMAPG(imap_password)) {
- efree(IMAPG(imap_password));
- }
-
- IMAPG(imap_user) = estrndup(Z_STRVAL_PP(user), Z_STRLEN_PP(user));
- IMAPG(imap_password) = estrndup(Z_STRVAL_PP(passwd), Z_STRLEN_PP(passwd));
-
- imap_stream = mail_open(NIL, Z_STRVAL_PP(mailbox), flags);
-
- if (imap_stream == NIL) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Couldn't open stream %s", Z_STRVAL_PP(mailbox));
- efree(IMAPG(imap_user)); IMAPG(imap_user) = 0;
- efree(IMAPG(imap_password)); IMAPG(imap_password) = 0;
- RETURN_FALSE;
- }
-
- imap_le_struct = emalloc(sizeof(pils));
- imap_le_struct->imap_stream = imap_stream;
- imap_le_struct->flags = cl_flags;
-
- ZEND_REGISTER_RESOURCE(return_value, imap_le_struct, le_imap);
-}
-/* }}} */
-
-/* {{{ proto resource imap_open(string mailbox, string user, string password [, int options])
- Open an IMAP stream to a mailbox */
-PHP_FUNCTION(imap_open)
-{
- php_imap_do_open(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0);
-}
-/* }}} */
-
-/* {{{ proto bool imap_reopen(resource stream_id, string mailbox [, int options])
- Reopen an IMAP stream to a new mailbox */
-PHP_FUNCTION(imap_reopen)
-{
- zval **streamind, **mailbox, **options;
- pils *imap_le_struct;
- MAILSTREAM *imap_stream;
- long flags=NIL;
- long cl_flags=NIL;
- int myargc=ZEND_NUM_ARGS();
-
- if (myargc < 2 || myargc > 3 || zend_get_parameters_ex(myargc, &streamind, &mailbox, &options) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- ZEND_FETCH_RESOURCE(imap_le_struct, pils *, streamind, -1, "imap", le_imap);
-
- convert_to_string_ex(mailbox);
-
- if (myargc == 3) {
- convert_to_long_ex(options);
- flags = Z_LVAL_PP(options);
- if (flags & PHP_EXPUNGE) {
- cl_flags = CL_EXPUNGE;
- flags ^= PHP_EXPUNGE;
- }
- imap_le_struct->flags = cl_flags;
- }
- imap_stream = mail_open(imap_le_struct->imap_stream, Z_STRVAL_PP(mailbox), flags);
- if (imap_stream == NIL) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Couldn't re-open stream");
- RETURN_FALSE;
- }
- imap_le_struct->imap_stream = imap_stream;
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto bool imap_append(resource stream_id, string folder, string message [, string options])
- Append a new message to a specified mailbox */
-PHP_FUNCTION(imap_append)
-{
- zval **streamind, **folder, **message, **flags;
- pils *imap_le_struct;
- STRING st;
- int myargc=ZEND_NUM_ARGS();
-
- if (myargc < 3 || myargc > 4 || zend_get_parameters_ex(myargc, &streamind, &folder, &message, &flags) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- ZEND_FETCH_RESOURCE(imap_le_struct, pils *, streamind, -1, "imap", le_imap);
-
- convert_to_string_ex(folder);
- convert_to_string_ex(message);
-
- if (myargc == 4) {
- convert_to_string_ex(flags);
- }
-
- INIT (&st, mail_string, (void *) Z_STRVAL_PP(message), Z_STRLEN_PP(message));
-
- if (mail_append_full(imap_le_struct->imap_stream, Z_STRVAL_PP(folder), myargc==4 ? Z_STRVAL_PP(flags) : NIL, NIL, &st)) {
- RETURN_TRUE;
- } else {
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-/* {{{ proto int imap_num_msg(resource stream_id)
- Gives the number of messages in the current mailbox */
-PHP_FUNCTION(imap_num_msg)
-{
- zval **streamind;
- pils *imap_le_struct;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &streamind) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- ZEND_FETCH_RESOURCE(imap_le_struct, pils *, streamind, -1, "imap", le_imap);
-
- RETURN_LONG(imap_le_struct->imap_stream->nmsgs);
-}
-/* }}} */
-
-/* {{{ proto bool imap_ping(resource stream_id)
- Check if the IMAP stream is still active */
-PHP_FUNCTION(imap_ping)
-{
- zval **streamind;
- pils *imap_le_struct;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &streamind) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- ZEND_FETCH_RESOURCE(imap_le_struct, pils *, streamind, -1, "imap", le_imap);
-
- RETURN_BOOL(mail_ping(imap_le_struct->imap_stream));
-}
-/* }}} */
-
-/* {{{ proto int imap_num_recent(resource stream_id)
- Gives the number of recent messages in current mailbox */
-PHP_FUNCTION(imap_num_recent)
-{
- zval **streamind;
- pils *imap_le_struct;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &streamind) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- ZEND_FETCH_RESOURCE(imap_le_struct, pils *, streamind, -1, "imap", le_imap);
-
- RETURN_LONG(imap_le_struct->imap_stream->recent);
-}
-/* }}} */
-
-#if defined(HAVE_IMAP2000) || defined(HAVE_IMAP2001)
-/* {{{ proto array imap_get_quota(resource stream_id, string qroot)
- Returns the quota set to the mailbox account qroot */
-PHP_FUNCTION(imap_get_quota)
-{
- zval **streamind, **qroot;
- pils *imap_le_struct;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &streamind, &qroot) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- ZEND_FETCH_RESOURCE(imap_le_struct, pils *, streamind, -1, "imap", le_imap);
-
- convert_to_string_ex(qroot);
-
- array_init(return_value);
- IMAPG(quota_return) = &return_value;
-
- /* set the callback for the GET_QUOTA function */
- mail_parameters(NIL, SET_QUOTA, (void *) mail_getquota);
- if(!imap_getquota(imap_le_struct->imap_stream, Z_STRVAL_PP(qroot))) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "c-client imap_getquota failed");
- zval_dtor(return_value);
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-/* {{{ proto array imap_get_quotaroot(resource stream_id, string mbox)
- Returns the quota set to the mailbox account mbox */
-PHP_FUNCTION(imap_get_quotaroot)
-{
- zval **streamind, **mbox;
- pils *imap_le_struct;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &streamind, &mbox) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- ZEND_FETCH_RESOURCE(imap_le_struct, pils *, streamind, -1, "imap", le_imap);
-
- convert_to_string_ex(mbox);
-
- array_init(return_value);
- IMAPG(quota_return) = &return_value;
-
- /* set the callback for the GET_QUOTAROOT function */
- mail_parameters(NIL, SET_QUOTA, (void *) mail_getquota);
- if(!imap_getquotaroot(imap_le_struct->imap_stream, Z_STRVAL_PP(mbox))) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "c-client imap_getquotaroot failed");
- zval_dtor(return_value);
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-/* {{{ proto bool imap_set_quota(resource stream_id, string qroot, int mailbox_size)
- Will set the quota for qroot mailbox */
-PHP_FUNCTION(imap_set_quota)
-{
- zval **streamind, **qroot, **mailbox_size;
- pils *imap_le_struct;
- STRINGLIST limits;
-
- if (ZEND_NUM_ARGS() != 3 || zend_get_parameters_ex(3, &streamind, &qroot, &mailbox_size) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- ZEND_FETCH_RESOURCE(imap_le_struct, pils *, streamind, -1, "imap", le_imap);
-
- convert_to_string_ex(qroot);
- convert_to_long_ex(mailbox_size);
-
- limits.text.data = "STORAGE";
- limits.text.size = Z_LVAL_PP(mailbox_size);
- limits.next = NIL;
-
- RETURN_BOOL(imap_setquota(imap_le_struct->imap_stream, Z_STRVAL_PP(qroot), &limits));
-}
-/* }}} */
-
-/* {{{ proto bool imap_setacl(resource stream_id, string mailbox, string id, string rights)
- Sets the ACL for a given mailbox */
-PHP_FUNCTION(imap_setacl)
-{
- zval **streamind, **mailbox, **id, **rights;
- pils *imap_le_struct;
-
- if (ZEND_NUM_ARGS() != 4 || zend_get_parameters_ex(4, &streamind, &mailbox, &id, &rights) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- ZEND_FETCH_RESOURCE(imap_le_struct, pils *, streamind, -1, "imap", le_imap);
-
- convert_to_string_ex(mailbox);
- convert_to_string_ex(rights);
-
- RETURN_BOOL(imap_setacl(imap_le_struct->imap_stream, Z_STRVAL_PP(mailbox), Z_STRVAL_PP(id), Z_STRVAL_PP(rights)));
-}
-/* }}} */
-
-
-/* {{{ proto array imap_getacl(resource stream_id, string mailbox)
- Gets the ACL for a given mailbox */
-PHP_FUNCTION(imap_getacl)
-{
- zval **streamind, **mailbox;
- pils *imap_le_struct;
-
- if(ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &streamind, &mailbox) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- ZEND_FETCH_RESOURCE(imap_le_struct, pils *, streamind, -1, "imap", le_imap);
-
- convert_to_string_ex(mailbox);
-
- /* initializing the special array for the return values */
- array_init(return_value);
-
- IMAPG(imap_acl_list) = return_value;
-
- /* set the callback for the GET_ACL function */
- mail_parameters(NIL, SET_ACL, (void *) mail_getacl);
- if(!imap_getacl(imap_le_struct->imap_stream, Z_STRVAL_PP(mailbox))) {
- php_error(E_WARNING, "c-client imap_getacl failed");
- RETURN_FALSE;
- }
-
- IMAPG(imap_acl_list) = NIL;
-}
-/* }}} */
-
-#endif /* HAVE_IMAP2000 || HAVE_IMAP2001 */
-
-
-/* {{{ proto bool imap_expunge(resource stream_id)
- Permanently delete all messages marked for deletion */
-PHP_FUNCTION(imap_expunge)
-{
- zval **streamind;
- pils *imap_le_struct;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &streamind) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- ZEND_FETCH_RESOURCE(imap_le_struct, pils *, streamind, -1, "imap", le_imap);
-
- mail_expunge (imap_le_struct->imap_stream);
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto bool imap_close(resource stream_id [, int options])
- Close an IMAP stream */
-PHP_FUNCTION(imap_close)
-{
- zval **options, **streamind=NULL;
- pils *imap_le_struct=NULL;
- long flags = NIL;
- int myargcount=ZEND_NUM_ARGS();
-
- if (myargcount < 1 || myargcount > 2 || zend_get_parameters_ex(myargcount, &streamind, &options) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- ZEND_FETCH_RESOURCE(imap_le_struct, pils *, streamind, -1, "imap", le_imap);
-
- if (myargcount == 2) {
- convert_to_long_ex(options);
- flags = Z_LVAL_PP(options);
- /* Do the translation from PHP's internal PHP_EXPUNGE define to c-client's CL_EXPUNGE */
- if (flags & PHP_EXPUNGE) {
- flags ^= PHP_EXPUNGE;
- flags |= CL_EXPUNGE;
- }
- imap_le_struct->flags = flags;
- }
-
- zend_list_delete(Z_RESVAL_PP(streamind));
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto array imap_headers(resource stream_id)
- Returns headers for all messages in a mailbox */
-PHP_FUNCTION(imap_headers)
-{
- zval **streamind;
- pils *imap_le_struct;
- unsigned long i;
- char *t;
- unsigned int msgno;
- char tmp[MAILTMPLEN];
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &streamind) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- ZEND_FETCH_RESOURCE(imap_le_struct, pils *, streamind, -1, "imap", le_imap);
-
- /* Initialize return array */
- array_init(return_value);
-
- for (msgno = 1; msgno <= imap_le_struct->imap_stream->nmsgs; msgno++) {
- MESSAGECACHE * cache = mail_elt (imap_le_struct->imap_stream, msgno);
- mail_fetchstructure(imap_le_struct->imap_stream, msgno, NIL);
- tmp[0] = cache->recent ? (cache->seen ? 'R': 'N') : ' ';
- tmp[1] = (cache->recent | cache->seen) ? ' ' : 'U';
- tmp[2] = cache->flagged ? 'F' : ' ';
- tmp[3] = cache->answered ? 'A' : ' ';
- tmp[4] = cache->deleted ? 'D' : ' ';
- tmp[5] = cache->draft ? 'X' : ' ';
- sprintf(tmp + 6, "%4ld) ", cache->msgno);
- mail_date(tmp+11, cache);
- tmp[22] = ' ';
- tmp[23] = '\0';
- mail_fetchfrom(tmp+23, imap_le_struct->imap_stream, msgno, (long)20);
- strcat(tmp, " ");
- if ((i = cache->user_flags)) {
- strcat(tmp, "{");
- while (i) {
- strcat(tmp, imap_le_struct->imap_stream->user_flags[find_rightmost_bit (&i)]);
- if (i) strcat(tmp, " ");
- }
- strcat(tmp, "} ");
- }
- mail_fetchsubject(t = tmp + strlen(tmp), imap_le_struct->imap_stream, msgno, (long)25);
- sprintf(t += strlen(t), " (%ld chars)", cache->rfc822_size);
- add_next_index_string(return_value, tmp, 1);
- }
-}
-/* }}} */
-
-/* {{{ proto string imap_body(resource stream_id, int msg_no [, int options])
- Read the message body */
-PHP_FUNCTION(imap_body)
-{
- zval **streamind, **msgno, **flags;
- pils *imap_le_struct;
- int msgindex, myargc=ZEND_NUM_ARGS();
-
- if (myargc < 2 || myargc > 3 || zend_get_parameters_ex(myargc, &streamind, &msgno, &flags) == 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);
- }
-
- if ((myargc == 3) && (Z_LVAL_PP(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. */
- msgindex = mail_msgno(imap_le_struct->imap_stream, Z_LVAL_PP(msgno));
- } else {
- msgindex = Z_LVAL_PP(msgno);
- }
- if ((msgindex < 1) || ((unsigned) msgindex > imap_le_struct->imap_stream->nmsgs)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Bad message number");
- 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);
-}
-/* }}} */
-
-/* {{{ proto bool imap_mail_copy(resource stream_id, int msg_no, string mailbox [, int options])
- Copy specified message to a mailbox */
-PHP_FUNCTION(imap_mail_copy)
-{
- zval **streamind, **seq, **folder, **options;
- pils *imap_le_struct;
- int myargcount = ZEND_NUM_ARGS();
-
- if (myargcount > 4 || myargcount < 3 || zend_get_parameters_ex(myargcount, &streamind, &seq, &folder, &options) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- ZEND_FETCH_RESOURCE(imap_le_struct, pils *, streamind, -1, "imap", le_imap);
-
- convert_to_string_ex(seq);
- convert_to_string_ex(folder);
- if (myargcount == 4) {
- convert_to_long_ex(options);
- }
-
- if (mail_copy_full(imap_le_struct->imap_stream, Z_STRVAL_PP(seq), Z_STRVAL_PP(folder), myargcount==4 ? Z_LVAL_PP(options) : NIL)==T) {
- RETURN_TRUE;
- } else {
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-/* {{{ proto bool imap_mail_move(resource stream_id, int msg_no, string mailbox [, int options])
- Move specified message to a mailbox */
-PHP_FUNCTION(imap_mail_move)
-{
- zval **streamind, **seq, **folder, **options;
- pils *imap_le_struct;
- int myargcount = ZEND_NUM_ARGS();
-
- if (myargcount > 4 || myargcount < 3 || zend_get_parameters_ex(myargcount, &streamind, &seq, &folder, &options) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- ZEND_FETCH_RESOURCE(imap_le_struct, pils *, streamind, -1, "imap", le_imap);
-
- convert_to_string_ex(seq);
- convert_to_string_ex(folder);
- if (myargcount == 4) {
- convert_to_long_ex(options);
- }
-
- if (mail_copy_full(imap_le_struct->imap_stream, Z_STRVAL_PP(seq), Z_STRVAL_PP(folder), myargcount == 4 ? (Z_LVAL_PP(options) | CP_MOVE) : CP_MOVE) == T) {
- RETURN_TRUE;
- } else {
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-/* {{{ proto bool imap_createmailbox(resource stream_id, string mailbox)
- Create a new mailbox */
-PHP_FUNCTION(imap_createmailbox)
-{
- zval **streamind, **folder;
- pils *imap_le_struct;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &streamind, &folder) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- ZEND_FETCH_RESOURCE(imap_le_struct, pils *, streamind, -1, "imap", le_imap);
-
- convert_to_string_ex(folder);
-
- if (mail_create(imap_le_struct->imap_stream, Z_STRVAL_PP(folder)) == T) {
- RETURN_TRUE;
- } else {
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-/* {{{ proto bool imap_renamemailbox(resource stream_id, string old_name, string new_name)
- Rename a mailbox */
-PHP_FUNCTION(imap_renamemailbox)
-{
- zval **streamind, **old_mailbox, **new_mailbox;
- pils *imap_le_struct;
-
- if (ZEND_NUM_ARGS() != 3 || zend_get_parameters_ex(3, &streamind, &old_mailbox, &new_mailbox) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- ZEND_FETCH_RESOURCE(imap_le_struct, pils *, streamind, -1, "imap", le_imap);
-
- convert_to_string_ex(old_mailbox);
- convert_to_string_ex(new_mailbox);
-
- if (mail_rename(imap_le_struct->imap_stream, Z_STRVAL_PP(old_mailbox), Z_STRVAL_PP(new_mailbox))==T) {
- RETURN_TRUE;
- } else {
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-/* {{{ proto bool imap_deletemailbox(resource stream_id, string mailbox)
- Delete a mailbox */
-PHP_FUNCTION(imap_deletemailbox)
-{
- zval **streamind, **folder;
- pils *imap_le_struct;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &streamind, &folder) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- ZEND_FETCH_RESOURCE(imap_le_struct, pils *, streamind, -1, "imap", le_imap);
-
- convert_to_string_ex(folder);
-
- if (mail_delete(imap_le_struct->imap_stream, Z_STRVAL_PP(folder))==T) {
- RETURN_TRUE;
- } else {
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-/* {{{ proto array imap_list(resource stream_id, string ref, string pattern)
- Read the list of mailboxes */
-PHP_FUNCTION(imap_list)
-{
- zval **streamind, **ref, **pat;
- pils *imap_le_struct;
- STRINGLIST *cur=NIL;
-
- if (ZEND_NUM_ARGS() != 3 || zend_get_parameters_ex(3, &streamind, &ref, &pat) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- ZEND_FETCH_RESOURCE(imap_le_struct, pils *, streamind, -1, "imap", le_imap);
-
- convert_to_string_ex(ref);
- convert_to_string_ex(pat);
-
- /* set flag for normal, old mailbox list */
- IMAPG(folderlist_style) = FLIST_ARRAY;
-
- IMAPG(imap_folders) = IMAPG(imap_folders_tail) = NIL;
- mail_list(imap_le_struct->imap_stream, Z_STRVAL_PP(ref), Z_STRVAL_PP(pat));
- if (IMAPG(imap_folders) == NIL) {
- RETURN_FALSE;
- }
-
- array_init(return_value);
- cur=IMAPG(imap_folders);
- while (cur != NIL) {
- add_next_index_string(return_value, cur->LTEXT, 1);
- cur=cur->next;
- }
- mail_free_stringlist (&IMAPG(imap_folders));
- IMAPG(imap_folders) = IMAPG(imap_folders_tail) = NIL;
-}
-
-/* }}} */
-
-/* {{{ proto array imap_getmailboxes(resource stream_id, string ref, string pattern)
- Reads the list of mailboxes and returns a full array of objects containing name, attributes, and delimiter */
-/* Author: CJH */
-PHP_FUNCTION(imap_list_full)
-{
- zval **streamind, **ref, **pat, *mboxob;
- pils *imap_le_struct;
- FOBJECTLIST *cur=NIL;
- char *delim=NIL;
-
- if (ZEND_NUM_ARGS() != 3 || zend_get_parameters_ex(3, &streamind, &ref, &pat) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- ZEND_FETCH_RESOURCE(imap_le_struct, pils *, streamind, -1, "imap", le_imap);
-
- convert_to_string_ex(ref);
- convert_to_string_ex(pat);
-
- /* set flag for new, improved array of objects mailbox list */
- IMAPG(folderlist_style) = FLIST_OBJECT;
-
- IMAPG(imap_folder_objects) = IMAPG(imap_folder_objects_tail) = NIL;
- mail_list(imap_le_struct->imap_stream, Z_STRVAL_PP(ref), Z_STRVAL_PP(pat));
- if (IMAPG(imap_folder_objects) == NIL) {
- RETURN_FALSE;
- }
-
- array_init(return_value);
- delim = safe_emalloc(2, sizeof(char), 0);
- cur=IMAPG(imap_folder_objects);
- while (cur != NIL) {
- MAKE_STD_ZVAL(mboxob);
- object_init(mboxob);
- add_property_string(mboxob, "name", cur->LTEXT, 1);
- add_property_long(mboxob, "attributes", cur->attributes);
-#ifdef IMAP41
- delim[0] = (char)cur->delimiter;
- delim[1] = 0;
- add_property_string(mboxob, "delimiter", delim, 1);
-#else
- add_property_string(mboxob, "delimiter", cur->delimiter, 1);
-#endif
- add_next_index_object(return_value, mboxob TSRMLS_CC);
- cur=cur->next;
- }
- mail_free_foblist(&IMAPG(imap_folder_objects), &IMAPG(imap_folder_objects_tail));
- efree(delim);
- IMAPG(folderlist_style) = FLIST_ARRAY; /* reset to default */
-}
-/* }}} */
-
-/* {{{ proto array imap_scan(resource stream_id, string ref, string pattern, string content)
- Read list of mailboxes containing a certain string */
-PHP_FUNCTION(imap_listscan)
-{
- zval **streamind, **ref, **pat, **content;
- pils *imap_le_struct;
- STRINGLIST *cur=NIL;
-
- if (ZEND_NUM_ARGS() != 4 || zend_get_parameters_ex(4, &streamind, &ref, &pat, &content) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- ZEND_FETCH_RESOURCE(imap_le_struct, pils *, streamind, -1, "imap", le_imap);
-
- convert_to_string_ex(ref);
- convert_to_string_ex(pat);
- convert_to_string_ex(content);
-
- IMAPG(imap_folders) = NIL;
- mail_scan(imap_le_struct->imap_stream, Z_STRVAL_PP(ref), Z_STRVAL_PP(pat), Z_STRVAL_PP(content));
- if (IMAPG(imap_folders) == NIL) {
- RETURN_FALSE;
- }
-
- array_init(return_value);
- cur=IMAPG(imap_folders);
- while (cur != NIL) {
- add_next_index_string(return_value, cur->LTEXT, 1);
- cur=cur->next;
- }
- mail_free_stringlist (&IMAPG(imap_folders));
- IMAPG(imap_folders) = IMAPG(imap_folders_tail) = NIL;
-}
-
-/* }}} */
-
-/* {{{ proto object imap_check(resource stream_id)
- Get mailbox properties */
-PHP_FUNCTION(imap_check)
-{
- zval **streamind;
- pils *imap_le_struct;
- char date[100];
-
- if (ZEND_NUM_ARGS()!=1 || zend_get_parameters_ex(1, &streamind) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- ZEND_FETCH_RESOURCE(imap_le_struct, pils *, streamind, -1, "imap", le_imap);
-
- if (mail_ping (imap_le_struct->imap_stream) == NIL) {
- RETURN_FALSE;
- }
-
- if (imap_le_struct->imap_stream && imap_le_struct->imap_stream->mailbox) {
- rfc822_date(date);
- object_init(return_value);
- add_property_string(return_value, "Date", date, 1);
- add_property_string(return_value, "Driver", imap_le_struct->imap_stream->dtb->name, 1);
- add_property_string(return_value, "Mailbox", imap_le_struct->imap_stream->mailbox, 1);
- add_property_long(return_value, "Nmsgs", imap_le_struct->imap_stream->nmsgs);
- add_property_long(return_value, "Recent", imap_le_struct->imap_stream->recent);
- } else {
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-/* {{{ proto bool imap_delete(resource stream_id, int msg_no [, int options])
- Mark a message for deletion */
-PHP_FUNCTION(imap_delete)
-{
- zval **streamind, **sequence, **flags;
- pils *imap_le_struct;
- int myargc=ZEND_NUM_ARGS();
-
- if (myargc < 2 || myargc > 3 || zend_get_parameters_ex(myargc, &streamind, &sequence, &flags) == FAILURE) {
- 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(flags);
- }
-
- mail_setflag_full(imap_le_struct->imap_stream, Z_STRVAL_PP(sequence), "\\DELETED", myargc==3 ? Z_LVAL_PP(flags) : NIL);
- RETVAL_TRUE;
-}
-/* }}} */
-
-/* {{{ proto bool imap_undelete(resource stream_id, int msg_no)
- Remove the delete flag from a message */
-PHP_FUNCTION(imap_undelete)
-{
- zval **streamind, **sequence, **flags;
- pils *imap_le_struct;
- int myargc=ZEND_NUM_ARGS();
-
- if (myargc < 2 || myargc > 3 || zend_get_parameters_ex(myargc, &streamind, &sequence, &flags) == FAILURE) {
- 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(flags);
- }
-
- mail_clearflag_full(imap_le_struct->imap_stream, Z_STRVAL_PP(sequence), "\\DELETED", myargc==3 ? Z_LVAL_PP(flags) : NIL);
- RETVAL_TRUE;
-}
-/* }}} */
-
-/* {{{ proto object imap_headerinfo(resource stream_id, int msg_no [, int from_length [, int subject_length [, string default_host]]])
- Read the headers of the message */
-PHP_FUNCTION(imap_headerinfo)
-{
- zval **streamind, **msgno, **fromlength, **subjectlength, **defaulthost;
- pils *imap_le_struct;
- MESSAGECACHE *cache;
- ENVELOPE *en;
- char dummy[2000], fulladdress[MAILTMPLEN];
- int myargc = ZEND_NUM_ARGS();
-
- if (myargc < 2 || myargc > 5 || zend_get_parameters_ex(myargc, &streamind, &msgno, &fromlength, &subjectlength, &defaulthost) == 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(fromlength);
- } else {
- fromlength = 0x00;
- }
- if (myargc >= 4) {
- convert_to_long_ex(subjectlength);
- } else {
- subjectlength = 0x00;
- }
- if (myargc == 5) {
- convert_to_string_ex(defaulthost);
- }
-
- PHP_IMAP_CHECK_MSGNO(Z_LVAL_PP(msgno));
-
- if (mail_fetchstructure(imap_le_struct->imap_stream, Z_LVAL_PP(msgno), NIL)) {
- cache = mail_elt(imap_le_struct->imap_stream, Z_LVAL_PP(msgno));
- } else {
- RETURN_FALSE;
- }
-
- en = mail_fetchenvelope(imap_le_struct->imap_stream, Z_LVAL_PP(msgno));
-
- /* call a function to parse all the text, so that we can use the
- same function to parse text from other sources */
- _php_make_header_object(return_value, en TSRMLS_CC);
-
- /* now run through properties that are only going to be returned
- from a server, not text headers */
- add_property_string(return_value, "Recent", cache->recent ? (cache->seen ? "R": "N") : " ", 1);
- add_property_string(return_value, "Unseen", (cache->recent | cache->seen) ? " " : "U", 1);
- add_property_string(return_value, "Flagged", cache->flagged ? "F" : " ", 1);
- add_property_string(return_value, "Answered", cache->answered ? "A" : " ", 1);
- add_property_string(return_value, "Deleted", cache->deleted ? "D" : " ", 1);
- add_property_string(return_value, "Draft", cache->draft ? "X" : " ", 1);
-
- sprintf(dummy, "%4ld", cache->msgno);
- add_property_string(return_value, "Msgno", dummy, 1);
-
- mail_date(dummy, cache);
- add_property_string(return_value, "MailDate", dummy, 1);
-
- sprintf(dummy, "%ld", cache->rfc822_size);
- add_property_string(return_value, "Size", dummy, 1);
-
- add_property_long(return_value, "udate", mail_longdate(cache));
-
- if (en->from && fromlength) {
- fulladdress[0] = 0x00;
- mail_fetchfrom(fulladdress, imap_le_struct->imap_stream, Z_LVAL_PP(msgno), Z_LVAL_PP(fromlength));
- add_property_string(return_value, "fetchfrom", fulladdress, 1);
- }
- if (en->subject && subjectlength) {
- fulladdress[0] = 0x00;
- mail_fetchsubject(fulladdress, imap_le_struct->imap_stream, Z_LVAL_PP(msgno), Z_LVAL_PP(subjectlength));
- add_property_string(return_value, "fetchsubject", fulladdress, 1);
- }
-}
-/* }}} */
-
-/* {{{ proto object imap_rfc822_parse_headers(string headers [, string default_host])
- Parse a set of mail headers contained in a string, and return an object similar to imap_headerinfo() */
-PHP_FUNCTION(imap_rfc822_parse_headers)
-{
- zval **headers, **defaulthost;
- ENVELOPE *en;
- int myargc = ZEND_NUM_ARGS();
-
- if (myargc < 1 || myargc > 2 || zend_get_parameters_ex(myargc, &headers, &defaulthost) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- convert_to_string_ex(headers);
- if (myargc == 2) {
- convert_to_string_ex(defaulthost);
- }
-
- if (myargc == 2) {
- rfc822_parse_msg(&en, NULL, Z_STRVAL_PP(headers), Z_STRLEN_PP(headers), NULL, Z_STRVAL_PP(defaulthost), NIL);
- } else {
- rfc822_parse_msg(&en, NULL, Z_STRVAL_PP(headers), Z_STRLEN_PP(headers), NULL, "UNKNOWN", NIL);
- }
-
- /* call a function to parse all the text, so that we can use the
- same function no matter where the headers are from */
- _php_make_header_object(return_value, en TSRMLS_CC);
- mail_free_envelope(&en);
-}
-/* }}} */
-
-
-/* KMLANG */
-/* {{{ proto array imap_lsub(resource stream_id, string ref, string pattern)
- Return a list of subscribed mailboxes */
-PHP_FUNCTION(imap_lsub)
-{
- zval **streamind, **ref, **pat;
- pils *imap_le_struct;
- STRINGLIST *cur=NIL;
-
- if (ZEND_NUM_ARGS() != 3 || zend_get_parameters_ex(3, &streamind, &ref, &pat) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- ZEND_FETCH_RESOURCE(imap_le_struct, pils *, streamind, -1, "imap", le_imap);
-
- convert_to_string_ex(ref);
- convert_to_string_ex(pat);
-
- /* set flag for normal, old mailbox list */
- IMAPG(folderlist_style) = FLIST_ARRAY;
-
- IMAPG(imap_sfolders) = NIL;
- mail_lsub(imap_le_struct->imap_stream, Z_STRVAL_PP(ref), Z_STRVAL_PP(pat));
- if (IMAPG(imap_sfolders) == NIL) {
- RETURN_FALSE;
- }
-
- array_init(return_value);
- cur=IMAPG(imap_sfolders);
- while (cur != NIL) {
- add_next_index_string(return_value, cur->LTEXT, 1);
- cur=cur->next;
- }
- mail_free_stringlist (&IMAPG(imap_sfolders));
- IMAPG(imap_sfolders) = IMAPG(imap_sfolders_tail) = NIL;
-}
-/* }}} */
-
-/* {{{ proto array imap_getsubscribed(resource stream_id, string ref, string pattern)
- Return a list of subscribed mailboxes, in the same format as imap_getmailboxes() */
-/* Author: CJH */
-PHP_FUNCTION(imap_lsub_full)
-{
- zval **streamind, **ref, **pat, *mboxob;
- pils *imap_le_struct;
- FOBJECTLIST *cur=NIL;
- char *delim=NIL;
-
- if (ZEND_NUM_ARGS() != 3 || zend_get_parameters_ex(3, &streamind, &ref, &pat) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- ZEND_FETCH_RESOURCE(imap_le_struct, pils *, streamind, -1, "imap", le_imap);
-
- convert_to_string_ex(ref);
- convert_to_string_ex(pat);
-
- /* set flag for new, improved array of objects list */
- IMAPG(folderlist_style) = FLIST_OBJECT;
-
- IMAPG(imap_sfolder_objects) = IMAPG(imap_sfolder_objects_tail) = NIL;
- mail_lsub(imap_le_struct->imap_stream, Z_STRVAL_PP(ref), Z_STRVAL_PP(pat));
- if (IMAPG(imap_sfolder_objects) == NIL) {
- RETURN_FALSE;
- }
-
- array_init(return_value);
- delim = safe_emalloc(2, sizeof(char), 0);
- cur=IMAPG(imap_sfolder_objects);
- while (cur != NIL) {
- MAKE_STD_ZVAL(mboxob);
- object_init(mboxob);
- add_property_string(mboxob, "name", cur->LTEXT, 1);
- add_property_long(mboxob, "attributes", cur->attributes);
-#ifdef IMAP41
- delim[0] = (char)cur->delimiter;
- delim[1] = 0;
- add_property_string(mboxob, "delimiter", delim, 1);
-#else
- add_property_string(mboxob, "delimiter", cur->delimiter, 1);
-#endif
- add_next_index_object(return_value, mboxob TSRMLS_CC);
- cur=cur->next;
- }
- mail_free_foblist (&IMAPG(imap_sfolder_objects), &IMAPG(imap_sfolder_objects_tail));
- efree(delim);
- IMAPG(folderlist_style) = FLIST_ARRAY; /* reset to default */
-}
-/* }}} */
-
-/* {{{ proto bool imap_subscribe(resource stream_id, string mailbox)
- Subscribe to a mailbox */
-PHP_FUNCTION(imap_subscribe)
-{
- zval **streamind, **folder;
- pils *imap_le_struct;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &streamind, &folder) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- ZEND_FETCH_RESOURCE(imap_le_struct, pils *, streamind, -1, "imap", le_imap);
-
- convert_to_string_ex(folder);
-
- if (mail_subscribe(imap_le_struct->imap_stream, Z_STRVAL_PP(folder))==T) {
- RETURN_TRUE;
- } else {
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-/* {{{ proto bool imap_unsubscribe(resource stream_id, string mailbox)
- Unsubscribe from a mailbox */
-PHP_FUNCTION(imap_unsubscribe)
-{
- zval **streamind, **folder;
- pils *imap_le_struct;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &streamind, &folder) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- ZEND_FETCH_RESOURCE(imap_le_struct, pils *, streamind, -1, "imap", le_imap);
-
- convert_to_string_ex(folder);
-
- if (mail_unsubscribe(imap_le_struct->imap_stream, Z_STRVAL_PP(folder))==T) {
- RETURN_TRUE;
- } else {
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-/* {{{ proto object imap_fetchstructure(resource stream_id, int msg_no [, int options])
- Read the full structure of a message */
-PHP_FUNCTION(imap_fetchstructure)
-{
- zval **streamind, **msgno, **flags;
- pils *imap_le_struct;
- BODY *body;
- int msgindex, myargc=ZEND_NUM_ARGS();
-
- if (myargc < 2 || myargc > 3 || zend_get_parameters_ex(myargc, &streamind, &msgno, &flags) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- ZEND_FETCH_RESOURCE(imap_le_struct, pils *, streamind, -1, "imap", le_imap);
-
- convert_to_long_ex(msgno);
- if (Z_LVAL_PP(msgno) < 1) {
- RETURN_FALSE;
- }
- if (myargc == 3) {
- convert_to_long_ex(flags);
- }
-
- object_init(return_value);
-
- if ((myargc == 3) && (Z_LVAL_PP(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. */
- msgindex = mail_msgno(imap_le_struct->imap_stream, Z_LVAL_PP(msgno));
- } else {
- msgindex = Z_LVAL_PP(msgno);
- }
- 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);
-
- if (!body) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "No body information available");
- RETURN_FALSE;
- }
-
- _php_imap_add_body(return_value, body TSRMLS_CC);
-}
-/* }}} */
-
-/* {{{ proto string imap_fetchbody(resource stream_id, int msg_no, int section [, int options])
- Get a specific body section */
-PHP_FUNCTION(imap_fetchbody)
-{
- zval **streamind, **msgno, **sec, **flags;
- pils *imap_le_struct;
- char *body;
- unsigned long len;
- int myargc=ZEND_NUM_ARGS();
-
- if (myargc < 3 || myargc > 4 || zend_get_parameters_ex(myargc, &streamind, &msgno, &sec, &flags) == 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);
- }
-
- if (myargc < 4 || !(Z_LVAL_PP(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);
-
- if (!body) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "No body information available");
- RETURN_FALSE;
- }
- RETVAL_STRINGL(body, len, 1);
-}
-
-/* }}} */
-
-/* {{{ proto string imap_base64(string text)
- Decode BASE64 encoded text */
-PHP_FUNCTION(imap_base64)
-{
- zval **text;
- char *decode;
- unsigned long newlength;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &text) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- convert_to_string_ex(text);
-
- decode = (char *) rfc822_base64((unsigned char *) Z_STRVAL_PP(text), Z_STRLEN_PP(text), &newlength);
-
- if (decode == NULL) {
- RETURN_FALSE;
- }
-
- RETVAL_STRINGL(decode, newlength, 1);
- fs_give((void**) &decode);
-}
-/* }}} */
-
-/* {{{ proto string imap_qprint(string text)
- Convert a quoted-printable string to an 8-bit string */
-PHP_FUNCTION(imap_qprint)
-{
- zval **text;
- char *decode;
- unsigned long newlength;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &text) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- convert_to_string_ex(text);
-
- decode = (char *) rfc822_qprint((unsigned char *) Z_STRVAL_PP(text), Z_STRLEN_PP(text), &newlength);
-
- if (decode == NULL) {
- RETURN_FALSE;
- }
-
- RETVAL_STRINGL(decode, newlength, 1);
- fs_give((void**) &decode);
-}
-/* }}} */
-
-/* {{{ proto string imap_8bit(string text)
- Convert an 8-bit string to a quoted-printable string */
-PHP_FUNCTION(imap_8bit)
-{
- zval **text;
- char *decode;
- unsigned long newlength;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &text) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- convert_to_string_ex(text);
-
- decode = (char *) rfc822_8bit((unsigned char *) Z_STRVAL_PP(text), Z_STRLEN_PP(text), &newlength);
-
- if (decode == NULL) {
- RETURN_FALSE;
- }
-
- RETVAL_STRINGL(decode, newlength, 1);
- fs_give((void**) &decode);
-}
-/* }}} */
-
-/* {{{ proto string imap_binary(string text)
- Convert an 8bit string to a base64 string */
-PHP_FUNCTION(imap_binary)
-{
- zval **text;
- char *decode;
- unsigned long newlength;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &text) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- convert_to_string_ex(text);
-
- decode = rfc822_binary(Z_STRVAL_PP(text), Z_STRLEN_PP(text), &newlength);
-
- if (decode == NULL) {
- RETURN_FALSE;
- }
-
- RETVAL_STRINGL(decode, newlength, 1);
- fs_give((void**) &decode);
-}
-/* }}} */
-
-/* {{{ proto object imap_mailboxmsginfo(resource stream_id)
- Returns info about the current mailbox */
-PHP_FUNCTION(imap_mailboxmsginfo)
-{
- zval **streamind;
- pils *imap_le_struct;
- char date[100];
- unsigned int msgno, unreadmsg, deletedmsg, msize;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &streamind) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- ZEND_FETCH_RESOURCE(imap_le_struct, pils *, streamind, -1, "imap", le_imap);
-
- /* Initialize return object */
- object_init(return_value);
-
- unreadmsg = 0;
- deletedmsg = 0;
- msize = 0;
-
- for (msgno = 1; msgno <= imap_le_struct->imap_stream->nmsgs; msgno++) {
- MESSAGECACHE * cache = mail_elt (imap_le_struct->imap_stream, msgno);
- mail_fetchstructure (imap_le_struct->imap_stream, msgno, NIL);
-
- if (!cache->seen || cache->recent) {
- unreadmsg++;
- }
-
- if (cache->deleted) {
- deletedmsg++;
- }
- msize = msize + cache->rfc822_size;
- }
- add_property_long(return_value, "Unread", unreadmsg);
- add_property_long(return_value, "Deleted", deletedmsg);
- add_property_long(return_value, "Nmsgs", imap_le_struct->imap_stream->nmsgs);
- add_property_long(return_value, "Size", msize);
- rfc822_date(date);
- add_property_string(return_value, "Date", date, 1);
- add_property_string(return_value, "Driver", imap_le_struct->imap_stream->dtb->name, 1);
- add_property_string(return_value, "Mailbox", imap_le_struct->imap_stream->mailbox, 1);
- add_property_long(return_value, "Recent", imap_le_struct->imap_stream->recent);
-}
-/* }}} */
-
-/* {{{ proto string imap_rfc822_write_address(string mailbox, string host, string personal)
- Returns a properly formatted email address given the mailbox, host, and personal info */
-PHP_FUNCTION(imap_rfc822_write_address)
-{
- zval **mailbox, **host, **personal;
- ADDRESS *addr;
- char string[MAILTMPLEN];
-
- if (ZEND_NUM_ARGS() != 3 || zend_get_parameters_ex(3, &mailbox, &host, &personal) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- convert_to_string_ex(mailbox);
- convert_to_string_ex(host);
- convert_to_string_ex(personal);
-
- addr=mail_newaddr();
-
- if (mailbox) {
- addr->mailbox = cpystr(Z_STRVAL_PP(mailbox));
- }
-
- if (host) {
- addr->host = cpystr(Z_STRVAL_PP(host));
- }
-
- if (personal) {
- addr->personal = cpystr(Z_STRVAL_PP(personal));
- }
-
- addr->next=NIL;
- addr->error=NIL;
- addr->adl=NIL;
-
- if (_php_imap_address_size(addr) >= MAILTMPLEN) {
- RETURN_FALSE;
- }
-
- string[0]='\0';
- rfc822_write_address(string, addr);
- RETVAL_STRING(string, 1);
-}
-/* }}} */
-
-/* {{{ proto array imap_rfc822_parse_adrlist(string address_string, string default_host)
- Parses an address string */
-PHP_FUNCTION(imap_rfc822_parse_adrlist)
-{
- zval **str, **defaulthost, *tovals;
- ADDRESS *addresstmp;
- ENVELOPE *env;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &str, &defaulthost) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- SEPARATE_ZVAL(str);
- convert_to_string_ex(str);
- convert_to_string_ex(defaulthost);
-
- env = mail_newenvelope();
-
- rfc822_parse_adrlist(&env->to, Z_STRVAL_PP(str), Z_STRVAL_PP(defaulthost));
-
- array_init(return_value);
-
- addresstmp = env->to;
-
- if (addresstmp) do {
- MAKE_STD_ZVAL(tovals);
- object_init(tovals);
- if (addresstmp->mailbox) {
- add_property_string(tovals, "mailbox", addresstmp->mailbox, 1);
- }
- if (addresstmp->host) {
- add_property_string(tovals, "host", addresstmp->host, 1);
- }
- if (addresstmp->personal) {
- add_property_string(tovals, "personal", addresstmp->personal, 1);
- }
- if (addresstmp->adl) {
- add_property_string(tovals, "adl", addresstmp->adl, 1);
- }
- add_next_index_object(return_value, tovals TSRMLS_CC);
- } while ((addresstmp = addresstmp->next));
-}
-/* }}} */
-
-/* {{{ proto string imap_utf8(string mime_encoded_text)
- Convert a mime-encoded text to UTF-8 */
-PHP_FUNCTION(imap_utf8)
-{
- zval **str;
- SIZEDTEXT src, dest;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &str) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- convert_to_string_ex(str);
-
- src.data = NULL;
- src.size = 0;
- dest.data = NULL;
- dest.size = 0;
-
- cpytxt(&src, Z_STRVAL_PP(str), Z_STRLEN_PP(str));
- utf8_mime2text(&src, &dest);
- RETURN_STRINGL(dest.data, strlen(dest.data), 1);
-}
-/* }}} */
-
-
-/* {{{ macros for the modified utf7 conversion functions
- *
- * author: Andrew Skalski <askalski@chek.com>
- */
-
-/* tests `c' and returns true if it is a special character */
-#define SPECIAL(c) ((c) <= 0x1f || (c) >= 0x7f)
-
-/* validate a modified-base64 character */
-#define B64CHAR(c) (isalnum(c) || (c) == '+' || (c) == ',')
-
-/* map the low 64 bits of `n' to the modified-base64 characters */
-#define B64(n) ("ABCDEFGHIJKLMNOPQRSTUVWXYZ" \
- "abcdefghijklmnopqrstuvwxyz0123456789+,"[(n) & 0x3f])
-
-/* map the modified-base64 character `c' to its 64 bit value */
-#define UNB64(c) ((c) == '+' ? 62 : (c) == ',' ? 63 : (c) >= 'a' ? \
- (c) - 71 : (c) >= 'A' ? (c) - 65 : (c) + 4)
-/* }}} */
-
-/* {{{ proto string imap_utf7_decode(string buf)
- Decode a modified UTF-7 string */
-PHP_FUNCTION(imap_utf7_decode)
-{
- /* author: Andrew Skalski <askalski@chek.com> */
- zval **arg;
- const unsigned char *in, *inp, *endp;
- unsigned char *out, *outp;
- unsigned char c;
- int inlen, outlen;
- enum {
- ST_NORMAL, /* printable text */
- ST_DECODE0, /* encoded text rotation... */
- ST_DECODE1,
- ST_DECODE2,
- ST_DECODE3
- } state;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- convert_to_string_ex(arg); /* Is this string really modified?
- If it is use and you don't want it to be seen outside of the function
- then use zend_get_parameters() */
-
- in = (const unsigned char *) Z_STRVAL_PP(arg);
- inlen = Z_STRLEN_PP(arg);
-
- /* validate and compute length of output string */
- outlen = 0;
- state = ST_NORMAL;
- for (endp = (inp = in) + inlen; inp < endp; inp++) {
- if (state == ST_NORMAL) {
- /* process printable character */
- if (SPECIAL(*inp)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid modified UTF-7 character: `%c'", *inp);
- RETURN_FALSE;
- } else if (*inp != '&') {
- outlen++;
- } else if (inp + 1 == endp) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unexpected end of string");
- RETURN_FALSE;
- } else if (inp[1] != '-') {
- state = ST_DECODE0;
- } else {
- outlen++;
- inp++;
- }
- } else if (*inp == '-') {
- /* return to NORMAL mode */
- if (state == ST_DECODE1) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Stray modified base64 character: `%c'", *--inp);
- RETURN_FALSE;
- }
- state = ST_NORMAL;
- } else if (!B64CHAR(*inp)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid modified base64 character: `%c'", *inp);
- RETURN_FALSE;
- } else {
- switch (state) {
- case ST_DECODE3:
- outlen++;
- state = ST_DECODE0;
- break;
- case ST_DECODE2:
- case ST_DECODE1:
- outlen++;
- case ST_DECODE0:
- state++;
- case ST_NORMAL:
- break;
- }
- }
- }
-
- /* enforce end state */
- if (state != ST_NORMAL) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unexpected end of string");
- RETURN_FALSE;
- }
-
- /* allocate output buffer */
- out = emalloc(outlen + 1);
-
- /* decode input string */
- outp = out;
- state = ST_NORMAL;
- for (endp = (inp = in) + inlen; inp < endp; inp++) {
- if (state == ST_NORMAL) {
- if (*inp == '&' && inp[1] != '-') {
- state = ST_DECODE0;
- }
- else if ((*outp++ = *inp) == '&') {
- inp++;
- }
- }
- else if (*inp == '-') {
- state = ST_NORMAL;
- }
- else {
- /* decode input character */
- switch (state) {
- case ST_DECODE0:
- *outp = UNB64(*inp) << 2;
- state = ST_DECODE1;
- break;
- case ST_DECODE1:
- outp[1] = UNB64(*inp);
- c = outp[1] >> 4;
- *outp++ |= c;
- *outp <<= 4;
- state = ST_DECODE2;
- break;
- case ST_DECODE2:
- outp[1] = UNB64(*inp);
- c = outp[1] >> 2;
- *outp++ |= c;
- *outp <<= 6;
- state = ST_DECODE3;
- break;
- case ST_DECODE3:
- *outp++ |= UNB64(*inp);
- state = ST_DECODE0;
- case ST_NORMAL:
- break;
- }
- }
- }
-
- *outp = 0;
-
-#if PHP_DEBUG
- /* warn if we computed outlen incorrectly */
- if (outp - out != outlen) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "outp - out [%d] != outlen [%d]", outp - out, outlen);
- }
-#endif
-
- RETURN_STRINGL(out, outlen, 0);
-}
-/* }}} */
-
-/* {{{ proto string imap_utf7_encode(string buf)
- Encode a string in modified UTF-7 */
-PHP_FUNCTION(imap_utf7_encode)
-{
- /* author: Andrew Skalski <askalski@chek.com> */
- zval **arg;
- const unsigned char *in, *inp, *endp;
- unsigned char *out, *outp;
- unsigned char c;
- int inlen, outlen;
- enum {
- ST_NORMAL, /* printable text */
- ST_ENCODE0, /* encoded text rotation... */
- ST_ENCODE1,
- ST_ENCODE2
- } state;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- convert_to_string_ex(arg);
-
- in = (const unsigned char *) Z_STRVAL_PP(arg);
- inlen = Z_STRLEN_PP(arg);
-
- /* compute the length of the result string */
- outlen = 0;
- state = ST_NORMAL;
- endp = (inp = in) + inlen;
- while (inp < endp) {
- if (state == ST_NORMAL) {
- if (SPECIAL(*inp)) {
- state = ST_ENCODE0;
- outlen++;
- } else if (*inp++ == '&') {
- outlen++;
- }
- outlen++;
- } else if (!SPECIAL(*inp)) {
- state = ST_NORMAL;
- } else {
- /* ST_ENCODE0 -> ST_ENCODE1 - two chars
- * ST_ENCODE1 -> ST_ENCODE2 - one char
- * ST_ENCODE2 -> ST_ENCODE0 - one char
- */
- if (state == ST_ENCODE2) {
- state = ST_ENCODE0;
- }
- else if (state++ == ST_ENCODE0) {
- outlen++;
- }
- outlen++;
- inp++;
- }
- }
-
- /* allocate output buffer */
- out = emalloc(outlen + 1);
-
- /* encode input string */
- outp = out;
- state = ST_NORMAL;
- endp = (inp = in) + inlen;
- while (inp < endp || state != ST_NORMAL) {
- if (state == ST_NORMAL) {
- if (SPECIAL(*inp)) {
- /* begin encoding */
- *outp++ = '&';
- state = ST_ENCODE0;
- } else if ((*outp++ = *inp++) == '&') {
- *outp++ = '-';
- }
- } else if (inp == endp || !SPECIAL(*inp)) {
- /* flush overflow and terminate region */
- if (state != ST_ENCODE0) {
- c = B64(*outp);
- *outp++ = c;
- }
- *outp++ = '-';
- state = ST_NORMAL;
- } else {
- /* encode input character */
- switch (state) {
- case ST_ENCODE0:
- *outp++ = B64(*inp >> 2);
- *outp = *inp++ << 4;
- state = ST_ENCODE1;
- break;
- case ST_ENCODE1:
- c = B64(*outp | *inp >> 4);
- *outp++ = c;
- *outp = *inp++ << 2;
- state = ST_ENCODE2;
- break;
- case ST_ENCODE2:
- c = B64(*outp | *inp >> 6);
- *outp++ = c;
- *outp++ = B64(*inp++);
- state = ST_ENCODE0;
- case ST_NORMAL:
- break;
- }
- }
- }
-
- *outp = 0;
-
-#if PHP_DEBUG
- /* warn if we computed outlen incorrectly */
- if (outp - out != outlen) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "outp - out [%d] != outlen [%d]", outp - out, outlen);
- }
-#endif
-
- RETURN_STRINGL(out, outlen, 0);
-}
-/* }}} */
-
-#undef SPECIAL
-#undef B64CHAR
-#undef B64
-#undef UNB64
-
-/* {{{ proto bool imap_setflag_full(resource stream_id, string sequence, string flag [, int options])
- Sets flags on messages */
-PHP_FUNCTION(imap_setflag_full)
-{
- zval **streamind, **sequence, **flag, **flags;
- pils *imap_le_struct;
- int myargc = ZEND_NUM_ARGS();
-
- if (myargc < 3 || myargc > 4 || zend_get_parameters_ex(myargc, &streamind, &sequence, &flag, &flags) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- ZEND_FETCH_RESOURCE(imap_le_struct, pils *, streamind, -1, "imap", le_imap);
-
- convert_to_string_ex(sequence);
- convert_to_string_ex(flag);
- if (myargc==4) {
- convert_to_long_ex(flags);
- }
-
- mail_setflag_full(imap_le_struct->imap_stream, Z_STRVAL_PP(sequence), Z_STRVAL_PP(flag), myargc==4 ? Z_LVAL_PP(flags) : NIL);
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto bool imap_clearflag_full(resource stream_id, string sequence, string flag [, int options])
- Clears flags on messages */
-PHP_FUNCTION(imap_clearflag_full)
-{
- zval **streamind, **sequence, **flag, **flags;
- pils *imap_le_struct;
- int myargc = ZEND_NUM_ARGS();
-
- if (myargc < 3 || myargc > 4 || zend_get_parameters_ex(myargc, &streamind, &sequence, &flag, &flags) ==FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- ZEND_FETCH_RESOURCE(imap_le_struct, pils *, streamind, -1, "imap", le_imap);
-
- convert_to_string_ex(sequence);
- convert_to_string_ex(flag);
- if (myargc==4) {
- convert_to_long_ex(flags);
- }
-
- mail_clearflag_full(imap_le_struct->imap_stream, Z_STRVAL_PP(sequence), Z_STRVAL_PP(flag), myargc==4 ? Z_LVAL_PP(flags) : NIL);
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto array imap_sort(resource stream_id, int criteria, int reverse [, int options [, string search_criteria [, string charset]]])
- Sort an array of message headers, optionally including only messages that meet specified criteria. */
-PHP_FUNCTION(imap_sort)
-{
- zval **streamind, **pgm, **rev, **flags, **criteria, **charset;
- pils *imap_le_struct;
- unsigned long *slst, *sl;
- char *search_criteria;
- SORTPGM *mypgm=NIL;
- SEARCHPGM *spg=NIL;
- int myargc = ZEND_NUM_ARGS();
-
- if (myargc < 3 || myargc > 6 || zend_get_parameters_ex(myargc, &streamind, &pgm, &rev, &flags, &criteria, &charset) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- ZEND_FETCH_RESOURCE(imap_le_struct, pils *, streamind, -1, "imap", le_imap);
-
- convert_to_long_ex(rev);
- convert_to_long_ex(pgm);
- if (Z_LVAL_PP(pgm) > SORTSIZE) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unrecognized sort criteria");
- RETURN_FALSE;
- }
- if (myargc >= 4) {
- convert_to_long_ex(flags);
- }
- if (myargc >= 5) {
- search_criteria = estrndup(Z_STRVAL_PP(criteria), Z_STRLEN_PP(criteria));
- spg = mail_criteria(search_criteria);
- efree(search_criteria);
- if (myargc == 6) {
- convert_to_string_ex(charset);
- }
- } else {
- spg = mail_newsearchpgm();
- }
-
- mypgm = mail_newsortpgm();
- mypgm->reverse = Z_LVAL_PP(rev);
- mypgm->function = (short) Z_LVAL_PP(pgm);
- mypgm->next = NIL;
-
- slst = mail_sort(imap_le_struct->imap_stream, (myargc == 6 ? Z_STRVAL_PP(charset) : NIL), spg, mypgm, (myargc >= 4 ? Z_LVAL_PP(flags) : NIL));
-
- if (spg) {
- mail_free_searchpgm(&spg);
- }
-
- array_init(return_value);
- if (slst != NIL && slst != 0) {
- for (sl = slst; *sl; sl++) {
- add_next_index_long(return_value, *sl);
- }
- fs_give ((void **) &slst);
- }
-}
-/* }}} */
-
-/* {{{ proto string imap_fetchheader(resource stream_id, int msg_no [, int options])
- Get the full unfiltered header for a message */
-PHP_FUNCTION(imap_fetchheader)
-{
- zval **streamind, **msgno, **flags;
- pils *imap_le_struct;
- int msgindex, myargc = ZEND_NUM_ARGS();
-
- if (myargc < 2 || myargc > 3 || zend_get_parameters_ex(myargc, &streamind, &msgno, &flags) == 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);
- }
-
- if ((myargc == 3) && (Z_LVAL_PP(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. */
- msgindex = mail_msgno(imap_le_struct->imap_stream, Z_LVAL_PP(msgno));
- } else {
- msgindex = Z_LVAL_PP(msgno);
- }
-
- 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);
-}
-/* }}} */
-
-/* {{{ proto int imap_uid(resource stream_id, int msg_no)
- Get the unique message id associated with a standard sequential message number */
-PHP_FUNCTION(imap_uid)
-{
- zval **streamind, **msgno;
- pils *imap_le_struct;
- int msgindex;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &streamind, &msgno) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- ZEND_FETCH_RESOURCE(imap_le_struct, pils *, streamind, -1, "imap", le_imap);
-
- convert_to_long_ex(msgno);
-
- msgindex = Z_LVAL_PP(msgno);
- if ((msgindex < 1) || ((unsigned) msgindex > imap_le_struct->imap_stream->nmsgs)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Bad message number");
- RETURN_FALSE;
- }
-
- RETURN_LONG(mail_uid(imap_le_struct->imap_stream, Z_LVAL_PP(msgno)));
-}
-/* }}} */
-
-/* {{{ proto int imap_msgno(resource stream_id, int unique_msg_id)
- Get the sequence number associated with a UID */
-PHP_FUNCTION(imap_msgno)
-{
- zval **streamind, **msgno;
- pils *imap_le_struct;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &streamind, &msgno) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- ZEND_FETCH_RESOURCE(imap_le_struct, pils *, streamind, -1, "imap", le_imap);
-
- convert_to_long_ex(msgno);
-
- RETURN_LONG(mail_msgno(imap_le_struct->imap_stream, Z_LVAL_PP(msgno)));
-}
-/* }}} */
-
-/* {{{ proto object imap_status(resource stream_id, string mailbox, int options)
- Get status info from a mailbox */
-PHP_FUNCTION(imap_status)
-{
- zval **streamind, **mbx, **flags;
- pils *imap_le_struct;
-
- if (ZEND_NUM_ARGS() != 3 || zend_get_parameters_ex(3, &streamind, &mbx, &flags) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- ZEND_FETCH_RESOURCE(imap_le_struct, pils *, streamind, -1, "imap", le_imap);
-
- convert_to_string_ex(mbx);
- convert_to_long_ex(flags);
-
- object_init(return_value);
-
- if (mail_status(imap_le_struct->imap_stream, Z_STRVAL_PP(mbx), Z_LVAL_PP(flags))) {
- add_property_long(return_value, "flags", IMAPG(status_flags));
- if (IMAPG(status_flags) & SA_MESSAGES) {
- add_property_long(return_value, "messages", IMAPG(status_messages));
- }
- if (IMAPG(status_flags) & SA_RECENT) {
- add_property_long(return_value, "recent", IMAPG(status_recent));
- }
- if (IMAPG(status_flags) & SA_UNSEEN) {
- add_property_long(return_value, "unseen", IMAPG(status_unseen));
- }
- if (IMAPG(status_flags) & SA_UIDNEXT) {
- add_property_long(return_value, "uidnext", IMAPG(status_uidnext));
- }
- if (IMAPG(status_flags) & SA_UIDVALIDITY) {
- add_property_long(return_value, "uidvalidity", IMAPG(status_uidvalidity));
- }
- } else {
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-/* {{{ proto object imap_bodystruct(resource stream_id, int msg_no, int section)
- Read the structure of a specified body section of a specific message */
-PHP_FUNCTION(imap_bodystruct)
-{
- zval **streamind, **msg, **section;
- pils *imap_le_struct;
- zval *parametres, *param, *dparametres, *dparam;
- PARAMETER *par, *dpar;
- BODY *body;
-
- if (ZEND_NUM_ARGS() != 3 || zend_get_parameters_ex(3, &streamind, &msg, &section) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- ZEND_FETCH_RESOURCE(imap_le_struct, pils *, streamind, -1, "imap", le_imap);
-
- convert_to_long_ex(msg);
- convert_to_string_ex(section);
-
- if (!Z_LVAL_PP(msg) || Z_LVAL_PP(msg) < 1 || (unsigned) Z_LVAL_PP(msg) > imap_le_struct->imap_stream->nmsgs) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Bad message number");
- RETURN_FALSE;
- }
-
- object_init(return_value);
-
- body=mail_body(imap_le_struct->imap_stream, Z_LVAL_PP(msg), Z_STRVAL_PP(section));
- if (body->type <= TYPEMAX) {
- add_property_long(return_value, "type", body->type);
- }
- if (body->encoding <= ENCMAX) {
- add_property_long(return_value, "encoding", body->encoding);
- }
-
- if (body->subtype) {
- add_property_long(return_value, "ifsubtype", 1);
- add_property_string(return_value, "subtype", body->subtype, 1);
- } else {
- add_property_long(return_value, "ifsubtype", 0);
- }
-
- if (body->description) {
- add_property_long(return_value, "ifdescription", 1);
- add_property_string(return_value, "description", body->description, 1);
- } else {
- add_property_long(return_value, "ifdescription", 0);
- }
- if (body->id) {
- add_property_long(return_value, "ifid", 1);
- add_property_string(return_value, "id", body->id, 1);
- } else {
- add_property_long(return_value, "ifid", 0);
- }
-
-
- if (body->size.lines) {
- add_property_long(return_value, "lines", body->size.lines);
- }
- if (body->size.bytes) {
- add_property_long(return_value, "bytes", body->size.bytes);
- }
-#ifdef IMAP41
- if (body->disposition.type) {
- add_property_long(return_value, "ifdisposition", 1);
- add_property_string(return_value, "disposition", body->disposition.type, 1);
- } else {
- add_property_long(return_value, "ifdisposition", 0);
- }
-
- if (body->disposition.parameter) {
- dpar = body->disposition.parameter;
- add_property_long(return_value, "ifdparameters", 1);
- MAKE_STD_ZVAL(dparametres);
- array_init(dparametres);
- do {
- MAKE_STD_ZVAL(dparam);
- object_init(dparam);
- add_property_string(dparam, "attribute", dpar->attribute, 1);
- add_property_string(dparam, "value", dpar->value, 1);
- add_next_index_object(dparametres, dparam TSRMLS_CC);
- } while ((dpar = dpar->next));
- add_assoc_object(return_value, "dparameters", dparametres TSRMLS_CC);
- } else {
- add_property_long(return_value, "ifdparameters", 0);
- }
-#endif
-
- if ((par = body->parameter)) {
- add_property_long(return_value, "ifparameters", 1);
-
- MAKE_STD_ZVAL(parametres);
- array_init(parametres);
- do {
- MAKE_STD_ZVAL(param);
- object_init(param);
- if (par->attribute) {
- add_property_string(param, "attribute", par->attribute, 1);
- }
- if (par->value) {
- add_property_string(param, "value", par->value, 1);
- }
-
- add_next_index_object(parametres, param TSRMLS_CC);
- } while ((par = par->next));
- } else {
- MAKE_STD_ZVAL(parametres);
- object_init(parametres);
- add_property_long(return_value, "ifparameters", 0);
- }
- add_assoc_object(return_value, "parameters", parametres TSRMLS_CC);
-}
-
-/* }}} */
-
-/* {{{ proto array imap_fetch_overview(resource stream_id, int msg_no [, int options])
- Read an overview of the information in the headers of the given message sequence */
-PHP_FUNCTION(imap_fetch_overview)
-{
- zval **streamind, **sequence, **pflags;
- pils *imap_le_struct;
- zval *myoverview;
- char address[MAILTMPLEN];
- long status, flags=0L;
- int myargc = ZEND_NUM_ARGS();
-
- if (myargc < 2 || myargc > 3 || zend_get_parameters_ex(myargc, &streamind, &sequence, &pflags) == FAILURE) {
- 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);
- }
-
- array_init(return_value);
-
- status = (flags & FT_UID)
- ? mail_uid_sequence (imap_le_struct->imap_stream, Z_STRVAL_PP(sequence))
- : mail_sequence (imap_le_struct->imap_stream, Z_STRVAL_PP(sequence));
-
- if (status) {
- MESSAGECACHE *elt;
- ENVELOPE *env;
- unsigned long i;
-
- for (i = 1; i <= imap_le_struct->imap_stream->nmsgs; i++) {
- if (((elt = mail_elt (imap_le_struct->imap_stream, i))->sequence) &&
- (env = mail_fetch_structure (imap_le_struct->imap_stream, i, NIL, NIL))) {
- MAKE_STD_ZVAL(myoverview);
- object_init(myoverview);
- if (env->subject) {
- add_property_string(myoverview, "subject", env->subject, 1);
- }
- if (env->from && _php_imap_address_size(env->from) < MAILTMPLEN) {
- env->from->next=NULL;
- address[0] = '\0';
- rfc822_write_address(address, env->from);
- add_property_string(myoverview, "from", address, 1);
- }
- if (env->to && _php_imap_address_size(env->to) < MAILTMPLEN) {
- env->to->next = NULL;
- address[0] = '\0';
- rfc822_write_address(address, env->to);
- add_property_string(myoverview, "to", address, 1);
- }
- if (env->date) {
- add_property_string(myoverview, "date", env->date, 1);
- }
- if (env->message_id) {
- add_property_string(myoverview, "message_id", env->message_id, 1);
- }
- if (env->references) {
- add_property_string(myoverview, "references", env->references, 1);
- }
- if (env->in_reply_to) {
- add_property_string(myoverview, "in_reply_to", env->in_reply_to, 1);
- }
- add_property_long(myoverview, "size", elt->rfc822_size);
- add_property_long(myoverview, "uid", mail_uid(imap_le_struct->imap_stream, i));
- add_property_long(myoverview, "msgno", i);
- add_property_long(myoverview, "recent", elt->recent);
- add_property_long(myoverview, "flagged", elt->flagged);
- add_property_long(myoverview, "answered", elt->answered);
- add_property_long(myoverview, "deleted", elt->deleted);
- add_property_long(myoverview, "seen", elt->seen);
- add_property_long(myoverview, "draft", elt->draft);
- add_next_index_object(return_value, myoverview TSRMLS_CC);
- }
- }
- }
-}
-/* }}} */
-
-/* {{{ proto string imap_mail_compose(array envelope, array body)
- Create a MIME message based on given envelope and body sections */
-PHP_FUNCTION(imap_mail_compose)
-{
- zval **envelope, **body;
- char *key;
- zval **data, **pvalue, **disp_data, **env_data;
- ulong ind;
- char *cookie = NIL;
- ENVELOPE *env;
- BODY *bod=NULL, *topbod=NULL;
- PART *mypart=NULL, *toppart=NULL, *part;
- PARAMETER *param, *disp_param = NULL, *custom_headers_param = NULL, *tmp_param = NULL;
- char tmp[8 * MAILTMPLEN], *mystring=NULL, *t=NULL, *tempstring=NULL;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &envelope, &body) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- if (Z_TYPE_PP(envelope) != IS_ARRAY) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Expected Array as envelope parameter");
- RETURN_FALSE;
- }
-
- if (Z_TYPE_PP(body) != IS_ARRAY) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Expected Array as body parameter");
- RETURN_FALSE;
- }
-
- 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));
- }
- 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");
- }
- 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));
- }
- 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");
- }
- 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");
- }
- 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));
- }
- 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));
- }
- 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");
- }
- 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");
- }
- 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");
- }
- 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));
- }
-
- if (zend_hash_find(Z_ARRVAL_PP(envelope), "custom_headers", sizeof("custom_headers"), (void **) &pvalue)== SUCCESS) {
- if (Z_TYPE_PP(pvalue) == IS_ARRAY) {
- custom_headers_param = tmp_param = NULL;
- while (zend_hash_get_current_data(Z_ARRVAL_PP(pvalue), (void **) &env_data) == SUCCESS) {
- custom_headers_param = mail_newbody_parameter();
- convert_to_string_ex(env_data);
- custom_headers_param->value = (char *) fs_get(Z_STRLEN_PP(env_data) + 1);
- memcpy(custom_headers_param->value, Z_STRVAL_PP(env_data), Z_STRLEN_PP(env_data) + 1);
- zend_hash_move_forward(Z_ARRVAL_PP(pvalue));
- custom_headers_param->next = tmp_param;
- tmp_param = custom_headers_param;
- }
- }
- }
-
- zend_hash_internal_pointer_reset(Z_ARRVAL_PP(body));
- if (zend_hash_get_current_data(Z_ARRVAL_PP(body), (void **) &data) != SUCCESS) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "body parameter cannot be empty");
- RETURN_FALSE;
- }
- zend_hash_get_current_key(Z_ARRVAL_PP(body), &key, &ind, 0); /* FIXME: is this necessary? we're not using key/ind */
-
- if (Z_TYPE_PP(data) == IS_ARRAY) {
- bod = mail_newbody();
- topbod = bod;
-
- if (zend_hash_find(Z_ARRVAL_PP(data), "type", sizeof("type"), (void **) &pvalue)== SUCCESS) {
- convert_to_long_ex(pvalue);
- bod->type = (short) Z_LVAL_PP(pvalue);
- }
- if (zend_hash_find(Z_ARRVAL_PP(data), "encoding", sizeof("encoding"), (void **) &pvalue)== SUCCESS) {
- convert_to_long_ex(pvalue);
- bod->encoding = (short) Z_LVAL_PP(pvalue);
- }
- if (zend_hash_find(Z_ARRVAL_PP(data), "charset", sizeof("charset"), (void **) &pvalue)== SUCCESS) {
- convert_to_string_ex(pvalue);
- tmp_param = mail_newbody_parameter();
- tmp_param->value = cpystr(Z_STRVAL_PP(pvalue));
- tmp_param->attribute = "CHARSET";
- tmp_param->next = bod->parameter;
- bod->parameter = tmp_param;
- }
- if (zend_hash_find(Z_ARRVAL_PP(data), "type.parameters", sizeof("type.parameters"), (void **) &pvalue)== SUCCESS) {
- if(Z_TYPE_PP(pvalue) == IS_ARRAY) {
- disp_param = tmp_param = NULL;
- while (zend_hash_get_current_data(Z_ARRVAL_PP(pvalue), (void **) &disp_data) == SUCCESS) {
- disp_param = mail_newbody_parameter();
- zend_hash_get_current_key(Z_ARRVAL_PP(pvalue), &key, &ind, 0);
- disp_param->attribute = key;
- convert_to_string_ex(disp_data);
- disp_param->value = (char *) fs_get(Z_STRLEN_PP(disp_data) + 1);
- memcpy(disp_param->value, Z_STRVAL_PP(disp_data), Z_STRLEN_PP(disp_data) + 1);
- zend_hash_move_forward(Z_ARRVAL_PP(pvalue));
- disp_param->next = tmp_param;
- tmp_param = disp_param;
- }
- bod->parameter = disp_param;
- }
- }
- if (zend_hash_find(Z_ARRVAL_PP(data), "subtype", sizeof("subtype"), (void **) &pvalue)== SUCCESS) {
- convert_to_string_ex(pvalue);
- bod->subtype = cpystr(Z_STRVAL_PP(pvalue));
- }
- if (zend_hash_find(Z_ARRVAL_PP(data), "id", sizeof("id"), (void **) &pvalue)== SUCCESS) {
- convert_to_string_ex(pvalue);
- bod->id = cpystr(Z_STRVAL_PP(pvalue));
- }
- if (zend_hash_find(Z_ARRVAL_PP(data), "description", sizeof("description"), (void **) &pvalue)== SUCCESS) {
- convert_to_string_ex(pvalue);
- bod->description = cpystr(Z_STRVAL_PP(pvalue));
- }
- if (zend_hash_find(Z_ARRVAL_PP(data), "disposition.type", sizeof("disposition.type"), (void **) &pvalue)== SUCCESS) {
- convert_to_string_ex(pvalue);
- bod->disposition.type = (char *) fs_get(Z_STRLEN_PP(pvalue) + 1);
- memcpy(bod->disposition.type, Z_STRVAL_PP(pvalue), Z_STRLEN_PP(pvalue)+1);
- }
- if (zend_hash_find(Z_ARRVAL_PP(data), "disposition", sizeof("disposition"), (void **) &pvalue)== SUCCESS) {
- if (Z_TYPE_PP(pvalue) == IS_ARRAY) {
- disp_param = tmp_param = NULL;
- while (zend_hash_get_current_data(Z_ARRVAL_PP(pvalue), (void **) &disp_data) == SUCCESS) {
- disp_param = mail_newbody_parameter();
- zend_hash_get_current_key(Z_ARRVAL_PP(pvalue), &key, &ind, 0);
- disp_param->attribute = key;
- convert_to_string_ex(disp_data);
- disp_param->value = (char *) fs_get(Z_STRLEN_PP(disp_data) + 1);
- memcpy(disp_param->value, Z_STRVAL_PP(disp_data), Z_STRLEN_PP(disp_data) + 1);
- zend_hash_move_forward(Z_ARRVAL_PP(pvalue));
- disp_param->next = tmp_param;
- tmp_param = disp_param;
- }
- bod->disposition.parameter = disp_param;
- }
- }
- if (zend_hash_find(Z_ARRVAL_PP(data), "contents.data", sizeof("contents.data"), (void **) &pvalue)== SUCCESS) {
- convert_to_string_ex(pvalue);
- bod->contents.text.data = (char *) fs_get(Z_STRLEN_PP(pvalue) + 1);
- memcpy(bod->contents.text.data, Z_STRVAL_PP(pvalue), Z_STRLEN_PP(pvalue)+1);
- bod->contents.text.size = Z_STRLEN_PP(pvalue);
- }
- if (zend_hash_find(Z_ARRVAL_PP(data), "lines", sizeof("lines"), (void **) &pvalue)== SUCCESS) {
- convert_to_long_ex(pvalue);
- bod->size.lines = Z_LVAL_PP(pvalue);
- }
- if (zend_hash_find(Z_ARRVAL_PP(data), "bytes", sizeof("bytes"), (void **) &pvalue)== SUCCESS) {
- convert_to_long_ex(pvalue);
- bod->size.bytes = Z_LVAL_PP(pvalue);
- }
- if (zend_hash_find(Z_ARRVAL_PP(data), "md5", sizeof("md5"), (void **) &pvalue)== SUCCESS) {
- convert_to_string_ex(pvalue);
- bod->md5 = cpystr(Z_STRVAL_PP(pvalue));
- }
- }
-
- zend_hash_move_forward(Z_ARRVAL_PP(body));
-
- while (zend_hash_get_current_data(Z_ARRVAL_PP(body), (void **) &data) == SUCCESS) {
- zend_hash_get_current_key(Z_ARRVAL_PP(body), &key, &ind, 0); /* FIXME: Is this necessary? We're not using key/ind */
- if (Z_TYPE_PP(data) == IS_ARRAY) {
- if (!toppart) {
- bod->nested.part = mail_newbody_part();
- mypart = bod->nested.part;
- toppart = mypart;
- bod=&mypart->body;
- } else {
- mypart->next = mail_newbody_part();
- mypart = mypart->next;
- bod = &mypart->body;
- }
-
- if (zend_hash_find(Z_ARRVAL_PP(data), "type", sizeof("type"), (void **) &pvalue)== SUCCESS) {
- convert_to_long_ex(pvalue);
- bod->type = (short) Z_LVAL_PP(pvalue);
- }
- if (zend_hash_find(Z_ARRVAL_PP(data), "encoding", sizeof("encoding"), (void **) &pvalue)== SUCCESS) {
- convert_to_long_ex(pvalue);
- bod->encoding = (short) Z_LVAL_PP(pvalue);
- }
- if (zend_hash_find(Z_ARRVAL_PP(data), "charset", sizeof("charset"), (void **) &pvalue)== SUCCESS) {
- convert_to_string_ex(pvalue);
- tmp_param = mail_newbody_parameter();
- tmp_param->value = cpystr(Z_STRVAL_PP(pvalue));
- tmp_param->attribute = "CHARSET";
- tmp_param->next = bod->parameter;
- bod->parameter = tmp_param;
- }
- if (zend_hash_find(Z_ARRVAL_PP(data), "type.parameters", sizeof("type.parameters"), (void **) &pvalue)== SUCCESS) {
- if(Z_TYPE_PP(pvalue) == IS_ARRAY) {
- disp_param = tmp_param = NULL;
- while (zend_hash_get_current_data(Z_ARRVAL_PP(pvalue), (void **) &disp_data) == SUCCESS) {
- disp_param = mail_newbody_parameter();
- zend_hash_get_current_key(Z_ARRVAL_PP(pvalue), &key, &ind, 0);
- disp_param->attribute = key;
- convert_to_string_ex(disp_data);
- disp_param->value = (char *) fs_get(Z_STRLEN_PP(disp_data) + 1);
- memcpy(disp_param->value, Z_STRVAL_PP(disp_data), Z_STRLEN_PP(disp_data) + 1);
- zend_hash_move_forward(Z_ARRVAL_PP(pvalue));
- disp_param->next = tmp_param;
- tmp_param = disp_param;
- }
- bod->parameter = disp_param;
- }
- }
- if (zend_hash_find(Z_ARRVAL_PP(data), "subtype", sizeof("subtype"), (void **) &pvalue)== SUCCESS) {
- convert_to_string_ex(pvalue);
- bod->subtype = cpystr(Z_STRVAL_PP(pvalue));
- }
- if (zend_hash_find(Z_ARRVAL_PP(data), "id", sizeof("id"), (void **) &pvalue)== SUCCESS) {
- convert_to_string_ex(pvalue);
- bod->id = cpystr(Z_STRVAL_PP(pvalue));
- }
- if (zend_hash_find(Z_ARRVAL_PP(data), "description", sizeof("description"), (void **) &pvalue)== SUCCESS) {
- convert_to_string_ex(pvalue);
- bod->description = cpystr(Z_STRVAL_PP(pvalue));
- }
- if (zend_hash_find(Z_ARRVAL_PP(data), "disposition.type", sizeof("disposition.type"), (void **) &pvalue)== SUCCESS) {
- convert_to_string_ex(pvalue);
- bod->disposition.type = (char *) fs_get(Z_STRLEN_PP(pvalue) + 1);
- memcpy(bod->disposition.type, Z_STRVAL_PP(pvalue), Z_STRLEN_PP(pvalue)+1);
- }
- if (zend_hash_find(Z_ARRVAL_PP(data), "disposition", sizeof("disposition"), (void **) &pvalue)== SUCCESS) {
- if (Z_TYPE_PP(pvalue) == IS_ARRAY) {
- disp_param = tmp_param = NULL;
- while (zend_hash_get_current_data(Z_ARRVAL_PP(pvalue), (void **) &disp_data) == SUCCESS) {
- disp_param = mail_newbody_parameter();
- zend_hash_get_current_key(Z_ARRVAL_PP(pvalue), &key, &ind, 0);
- disp_param->attribute = key;
- convert_to_string_ex(disp_data);
- disp_param->value = (char *) fs_get(Z_STRLEN_PP(disp_data) + 1);
- memcpy(disp_param->value, Z_STRVAL_PP(disp_data), Z_STRLEN_PP(disp_data) + 1);
- zend_hash_move_forward(Z_ARRVAL_PP(pvalue));
- disp_param->next = tmp_param;
- tmp_param = disp_param;
- }
- bod->disposition.parameter = disp_param;
- }
- }
- if (zend_hash_find(Z_ARRVAL_PP(data), "contents.data", sizeof("contents.data"), (void **) &pvalue)== SUCCESS) {
- convert_to_string_ex(pvalue);
- bod->contents.text.data = (char *) fs_get(Z_STRLEN_PP(pvalue) + 1);
- memcpy(bod->contents.text.data, Z_STRVAL_PP(pvalue), Z_STRLEN_PP(pvalue) + 1);
- bod->contents.text.size = Z_STRLEN_PP(pvalue);
- }
- if (zend_hash_find(Z_ARRVAL_PP(data), "lines", sizeof("lines"), (void **) &pvalue)== SUCCESS) {
- convert_to_long_ex(pvalue);
- bod->size.lines = Z_LVAL_PP(pvalue);
- }
- if (zend_hash_find(Z_ARRVAL_PP(data), "bytes", sizeof("bytes"), (void **) &pvalue)== SUCCESS) {
- convert_to_long_ex(pvalue);
- bod->size.bytes = Z_LVAL_PP(pvalue);
- }
- if (zend_hash_find(Z_ARRVAL_PP(data), "md5", sizeof("md5"), (void **) &pvalue)== SUCCESS) {
- convert_to_string_ex(pvalue);
- bod->md5 = cpystr(Z_STRVAL_PP(pvalue));
- }
-
- zend_hash_move_forward(Z_ARRVAL_PP(body));
- }
- }
-
- rfc822_encode_body_7bit(env, topbod);
- rfc822_header (tmp, env, topbod);
-
- /* add custom envelope headers */
- if (custom_headers_param) {
- /* remove last CRLF from tmp */
- tmp[strlen(tmp) - 2] = '\0';
- tempstring = emalloc(strlen(tmp) + 1);
- strcpy(tempstring, tmp);
- do {
- tempstring = erealloc(tempstring, strlen(tempstring) + strlen(custom_headers_param->value) + strlen(CRLF) + 1);
- sprintf(tempstring, "%s%s%s", tempstring, custom_headers_param->value, CRLF);
- } while ((custom_headers_param = custom_headers_param->next));
-
- mystring = emalloc(strlen(tempstring) + strlen(CRLF) + 1);
- sprintf(mystring, "%s%s", tempstring, CRLF);
- efree(tempstring);
- } else {
- mystring = emalloc(strlen(tmp) + 1);
- strcpy(mystring, tmp);
- }
-
- bod = topbod;
-
- if (bod && bod->type == TYPEMULTIPART) {
-
- /* first body part */
- part = bod->nested.part;
-
- /* find cookie */
- for (param = bod->parameter; param && !cookie; param = param->next) {
- if (!strcmp (param->attribute, "BOUNDARY")) {
- cookie = param->value;
- }
- }
-
- /* yucky default */
- if (!cookie) {
- cookie = "-";
- }
-
- /* for each part */
- do {
- /* build cookie */
- sprintf (t=tmp, "--%s%s", cookie, CRLF);
-
- /* append mini-header */
- rfc822_write_body_header(&t, &part->body);
-
- /* write terminating blank line */
- strcat (t, CRLF);
-
- /* output cookie, mini-header, and contents */
- tempstring=emalloc(strlen(mystring)+strlen(tmp)+1);
- strcpy(tempstring, mystring);
- efree(mystring);
- mystring=tempstring;
- strcat(mystring, tmp);
-
- bod=&part->body;
-
- tempstring=emalloc(strlen(bod->contents.text.data)+strlen(CRLF)+strlen(mystring)+1);
- strcpy(tempstring, mystring);
- efree(mystring);
- mystring=tempstring;
- sprintf(mystring, "%s%s%s", mystring, bod->contents.text.data, CRLF);
-
- } while ((part = part->next)); /* until done */
-
- /* output trailing cookie */
- sprintf(tmp, "--%s--", cookie);
- tempstring=emalloc(strlen(tmp)+strlen(CRLF)+strlen(mystring)+1);
- strcpy(tempstring, mystring);
- efree(mystring);
- mystring=tempstring;
- sprintf(mystring, "%s%s%s", mystring, tmp, CRLF);
-
- } else if (bod) {
-
- tempstring=emalloc(strlen(bod->contents.text.data)+strlen(CRLF)+strlen(mystring)+1);
- strcpy(tempstring, mystring);
- efree(mystring);
- mystring=tempstring;
- sprintf(mystring, "%s%s%s", mystring, bod->contents.text.data, CRLF);
-
- } else {
- efree(mystring);
- RETURN_FALSE;
- }
-
- RETVAL_STRINGL(mystring, strlen(mystring), 1);
- efree(tempstring);
-}
-/* }}} */
-
-
-/* {{{ _php_imap_mail
- */
-int _php_imap_mail(char *to, char *subject, char *message, char *headers, char *cc, char *bcc, char* rpath TSRMLS_DC)
-{
-#ifdef PHP_WIN32
- int tsm_err;
-#else
- FILE *sendmail;
- int ret;
-#endif
-
-#ifdef PHP_WIN32
- char *tempMailTo;
- char *tsm_errmsg = NULL;
- ADDRESS *addr;
- char *bufferTo = NULL, *bufferCc = NULL, *bufferBcc = NULL, *bufferHeader = NULL;
- int offset, bufferLen = 0;;
-
- if (headers) {
- bufferLen += strlen(headers);
- }
- if (to) {
- bufferLen += strlen(to) + 6;
- }
- if (cc) {
- bufferLen += strlen(cc) + 6;
- }
-
-#define PHP_IMAP_CLEAN if (bufferTo) efree(bufferTo); if (bufferCc) efree(bufferCc); if (bufferBcc) efree(bufferBcc); if (bufferHeader) efree(bufferHeader);
-#define PHP_IMAP_BAD_DEST PHP_IMAP_CLEAN; efree(tempMailTo); return (BAD_MSG_DESTINATION);
-
- bufferHeader = (char *)emalloc(bufferLen);
- memset(bufferHeader, 0, bufferLen);
- if (to && *to) {
- strcat(bufferHeader, "To: ");
- strcat(bufferHeader, to);
- strcat(bufferHeader, "\r\n");
- tempMailTo = estrdup(to);
- bufferTo = (char *)emalloc(strlen(to));
- offset = 0;
- addr = NULL;
- rfc822_parse_adrlist(&addr, tempMailTo, NULL);
- while (addr) {
- if (strcmp(addr->host, ERRHOST) == 0) {
- PHP_IMAP_BAD_DEST;
- } else {
- offset += sprintf(bufferTo + offset, "%s@%s,", addr->mailbox, addr->host);
- }
- addr = addr->next;
- }
- efree(tempMailTo);
- if (offset>0) {
- bufferTo[offset-1] = 0;
- }
- }
-
- if (cc && *cc) {
- strcat(bufferHeader, "Cc: ");
- strcat(bufferHeader, cc);
- strcat(bufferHeader, "\r\n");
- tempMailTo = estrdup(cc);
- bufferCc = (char *)emalloc(strlen(cc));
- offset = 0;
- addr = NULL;
- rfc822_parse_adrlist(&addr, tempMailTo, NULL);
- while (addr) {
- if (strcmp(addr->host, ERRHOST) == 0) {
- PHP_IMAP_BAD_DEST;
- } else {
- offset += sprintf(bufferCc + offset, "%s@%s,", addr->mailbox, addr->host);
- }
- addr = addr->next;
- }
- efree(tempMailTo);
- if (offset>0) {
- bufferCc[offset-1] = 0;
- }
- }
-
- if (bcc && *bcc) {
- tempMailTo = estrdup(bcc);
- bufferBcc = (char *)emalloc(strlen(bcc));
- offset = 0;
- addr = NULL;
- rfc822_parse_adrlist(&addr, tempMailTo, NULL);
- while (addr) {
- if (strcmp(addr->host, ERRHOST) == 0) {
- PHP_IMAP_BAD_DEST;
- } else {
- offset += sprintf(bufferBcc + offset, "%s@%s,", addr->mailbox, addr->host);
- }
- addr = addr->next;
- }
- efree(tempMailTo);
- if (offset>0) {
- bufferBcc[offset-1] = 0;
- }
- }
-
- if (headers && *headers) {
- strcat(bufferHeader, headers);
- }
-
- if (TSendMail(INI_STR("SMTP"), &tsm_err, &tsm_errmsg, bufferHeader, subject, bufferTo, message, bufferCc, bufferBcc, rpath) != SUCCESS) {
- if (tsm_errmsg) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", tsm_errmsg);
- efree(tsm_errmsg);
- } else {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", GetSMErrorText(tsm_err));
- }
- PHP_IMAP_CLEAN;
- return 0;
- }
- PHP_IMAP_CLEAN;
-#else
- if (!INI_STR("sendmail_path")) {
- return 0;
- }
- sendmail = popen(INI_STR("sendmail_path"), "w");
- if (sendmail) {
- if (rpath && rpath[0]) fprintf(sendmail, "From: %s\n", rpath);
- fprintf(sendmail, "To: %s\n", to);
- if (cc && cc[0]) fprintf(sendmail, "Cc: %s\n", cc);
- if (bcc && bcc[0]) fprintf(sendmail, "Bcc: %s\n", bcc);
- fprintf(sendmail, "Subject: %s\n", subject);
- if (headers != NULL) {
- fprintf(sendmail, "%s\n", headers);
- }
- fprintf(sendmail, "\n%s\n", message);
- ret = pclose(sendmail);
- if (ret == -1) {
- return 0;
- } else {
- return 1;
- }
- } else {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Could not execute mail delivery program");
- return 0;
- }
-#endif
- return 1;
-}
-/* }}} */
-
-/* {{{ proto bool imap_mail(string to, string subject, string message [, string additional_headers [, string cc [, string bcc [, string rpath]]]])
- Send an email message */
-PHP_FUNCTION(imap_mail)
-{
- zval **argv[7];
- char *to=NULL, *message=NULL, *headers=NULL, *subject=NULL, *cc=NULL, *bcc=NULL, *rpath=NULL;
- int argc = ZEND_NUM_ARGS();
-
- if (argc < 3 || argc > 7 || zend_get_parameters_array_ex(argc, argv) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- /* To: */
- convert_to_string_ex(argv[0]);
- if (Z_STRVAL_PP(argv[0])) {
- to = Z_STRVAL_PP(argv[0]);
- } else {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "No to field in mail command");
- RETURN_FALSE;
- }
-
- /* Subject: */
- convert_to_string_ex(argv[1]);
- if (Z_STRVAL_PP(argv[1])) {
- subject = Z_STRVAL_PP(argv[1]);
- } else {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "No subject field in mail command");
- RETURN_FALSE;
- }
-
- /* message body */
- convert_to_string_ex(argv[2]);
- if (Z_STRVAL_PP(argv[2])) {
- message = Z_STRVAL_PP(argv[2]);
- } else {
- /* this is not really an error, so it is allowed. */
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "No message string in mail command");
- message = NULL;
- }
-
- /* other headers */
- if (argc > 3) {
- convert_to_string_ex(argv[3]);
- headers = Z_STRVAL_PP(argv[3]);
- }
-
- /* cc */
- if (argc > 4) {
- convert_to_string_ex(argv[4]);
- cc = Z_STRVAL_PP(argv[4]);
- }
-
- /* bcc */
- if (argc > 5) {
- convert_to_string_ex(argv[5]);
- bcc = Z_STRVAL_PP(argv[5]);
- }
-
- /* rpath */
- if (argc > 6) {
- convert_to_string_ex(argv[6]);
- rpath = Z_STRVAL_PP(argv[6]);
- }
-
- if (_php_imap_mail(to, subject, message, headers, cc, bcc, rpath TSRMLS_CC)) {
- RETURN_TRUE;
- } else {
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-/* {{{ proto array imap_search(resource stream_id, string criteria [, int options [, string charset]])
- Return a list of messages matching the given criteria */
-PHP_FUNCTION(imap_search)
-{
- zval **streamind, **criteria, **search_flags, **charset;
- pils *imap_le_struct;
- long flags;
- char *search_criteria;
- MESSAGELIST *cur;
- int argc = ZEND_NUM_ARGS();
-
- if (argc < 2 || argc > 4 || zend_get_parameters_ex(argc, &streamind, &criteria, &search_flags, &charset) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- ZEND_FETCH_RESOURCE(imap_le_struct, pils *, streamind, -1, "imap", le_imap);
-
- convert_to_string_ex(criteria);
- search_criteria = estrndup(Z_STRVAL_PP(criteria), Z_STRLEN_PP(criteria));
-
- if (argc == 2) {
- flags = SE_FREE;
- } else {
- convert_to_long_ex(search_flags);
- flags = Z_LVAL_PP(search_flags);
- if (argc == 4) {
- convert_to_string_ex(charset);
- }
- }
-
- IMAPG(imap_messages) = IMAPG(imap_messages_tail) = NIL;
- mail_search_full(imap_le_struct->imap_stream, (argc == 4 ? Z_STRVAL_PP(charset) : NIL), mail_criteria(search_criteria), flags);
- if (IMAPG(imap_messages) == NIL) {
- efree(search_criteria);
- RETURN_FALSE;
- }
-
- array_init(return_value);
-
- cur = IMAPG(imap_messages);
- while (cur != NIL) {
- add_next_index_long(return_value, cur->msgid);
- cur = cur->next;
- }
- mail_free_messagelist(&IMAPG(imap_messages), &IMAPG(imap_messages_tail));
- efree(search_criteria);
-}
-/* }}} */
-
-/* {{{ proto array imap_alerts(void)
- 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. */
-/* Author: CJH */
-PHP_FUNCTION(imap_alerts)
-{
- STRINGLIST *cur=NIL;
-
- if (ZEND_NUM_ARGS() > 0) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- if (IMAPG(imap_alertstack) == NIL) {
- RETURN_FALSE;
- }
-
- array_init(return_value);
-
- cur = IMAPG(imap_alertstack);
- while (cur != NIL) {
- add_next_index_string(return_value, cur->LTEXT, 1);
- cur = cur->next;
- }
- mail_free_stringlist(&IMAPG(imap_alertstack));
- IMAPG(imap_alertstack) = NIL;
-}
-/* }}} */
-
-/* {{{ proto array imap_errors(void)
- Returns an array of all IMAP errors generated since the last page load, or since the last imap_errors() call, whichever came last. The error stack is cleared after imap_errors() is called. */
-/* Author: CJH */
-PHP_FUNCTION(imap_errors)
-{
- ERRORLIST *cur=NIL;
-
- if (ZEND_NUM_ARGS() > 0) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- if (IMAPG(imap_errorstack) == NIL) {
- RETURN_FALSE;
- }
-
- array_init(return_value);
-
- cur = IMAPG(imap_errorstack);
- while (cur != NIL) {
- add_next_index_string(return_value, cur->LTEXT, 1);
- cur = cur->next;
- }
- mail_free_errorlist(&IMAPG(imap_errorstack));
- IMAPG(imap_errorstack) = NIL;
-}
-/* }}} */
-
-/* {{{ proto string imap_last_error(void)
- Returns the last error that was generated by an IMAP function. The error stack is NOT cleared after this call. */
-/* Author: CJH */
-PHP_FUNCTION(imap_last_error)
-{
- ERRORLIST *cur=NIL;
-
- if (ZEND_NUM_ARGS() > 0) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- if (IMAPG(imap_errorstack) == NIL) {
- RETURN_FALSE;
- }
-
- cur = IMAPG(imap_errorstack);
- while (cur != NIL) {
- if (cur->next == NIL) {
- RETURN_STRING(cur->LTEXT, 1);
- }
- cur = cur->next;
- }
-}
-/* }}} */
-
-/* {{{ proto array imap_mime_header_decode(string str)
- Decode mime header element in accordance with RFC 2047 and return array of objects containing 'charset' encoding and decoded 'text' */
-PHP_FUNCTION(imap_mime_header_decode)
-{
- /* Author: Ted Parnefors <ted@mtv.se> */
- zval **str, *myobject;
- char *string, *charset, encoding, *text, *decode;
- long charset_token, encoding_token, end_token, end, offset=0, i;
- unsigned long newlength;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &str) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- convert_to_string_ex(str);
-
- array_init(return_value);
-
- string = Z_STRVAL_PP(str);
- end = Z_STRLEN_PP(str);
-
- charset = (char *) safe_emalloc((end + 1), 2, 0);
- text = &charset[end + 1];
- while (offset < end) { /* Reached end of the string? */
- if ((charset_token = (long)php_memnstr(&string[offset], "=?", 2, string + end))) { /* Is there anything encoded in the string? */
- charset_token -= (long)string;
- if (offset != charset_token) { /* Is there anything before the encoded data? */
- /* Retrieve unencoded data that is found before encoded data */
- memcpy(text, &string[offset], charset_token-offset);
- text[charset_token - offset] = 0x00;
- MAKE_STD_ZVAL(myobject);
- object_init(myobject);
- add_property_string(myobject, "charset", "default", 1);
- add_property_string(myobject, "text", text, 1);
- zend_hash_next_index_insert(Z_ARRVAL_P(return_value), (void *)&myobject, sizeof(zval *), NULL);
- }
- if ((encoding_token = (long)php_memnstr(&string[charset_token+2], "?", 1, string+end))) { /* Find token for encoding */
- encoding_token -= (long)string;
- if ((end_token = (long)php_memnstr(&string[encoding_token+3], "?=", 2, string+end))) { /* Find token for end of encoded data */
- end_token -= (long)string;
- memcpy(charset, &string[charset_token + 2], encoding_token - (charset_token + 2)); /* Extract charset encoding */
- charset[encoding_token-(charset_token + 2)] = 0x00;
- encoding=string[encoding_token + 1]; /* Extract encoding from string */
- memcpy(text, &string[encoding_token + 3], end_token - (encoding_token + 3)); /* Extract text */
- text[end_token - (encoding_token + 3)] = 0x00;
- decode = text;
- if (encoding == 'q' || encoding == 'Q') { /* Decode 'q' encoded data */
- for(i=0; text[i] != 0x00; i++) if (text[i] == '_') text[i] = ' '; /* Replace all *_' with space. */
- decode = (char *)rfc822_qprint((unsigned char *) text, strlen(text), &newlength);
- } else if (encoding == 'b' || encoding == 'B') {
- decode = (char *)rfc822_base64((unsigned char *) text, strlen(text), &newlength); /* Decode 'B' encoded data */
- }
- if (decode == NULL) {
- efree(charset);
- zval_dtor(return_value);
- RETURN_FALSE;
- }
- MAKE_STD_ZVAL(myobject);
- object_init(myobject);
- add_property_string(myobject, "charset", charset, 1);
- add_property_string(myobject, "text", decode, 1);
- zend_hash_next_index_insert(Z_ARRVAL_P(return_value), (void *)&myobject, sizeof(zval *), NULL);
-
- /* only free decode if it was allocated by rfc822_qprint or rfc822_base64 */
- if (decode != text) {
- fs_give((void**)&decode);
- }
-
- offset = end_token+2;
- for (i = 0; (string[offset + i] == ' ') || (string[offset + i] == 0x0a) || (string[offset + i] == 0x0d); i++);
- if ((string[offset + i] == '=') && (string[offset + i + 1] == '?') && (offset + i < end)) {
- offset += i;
- }
- continue; /*/ Iterate the loop again please. */
- }
- }
- } else {
- /* Just some tweaking to optimize the code, and get the end statements work in a general manner.
- * If we end up here we didn't find a position for "charset_token",
- * so we need to set it to the start of the yet unextracted data.
- */
- charset_token = offset;
- }
- /* Return the rest of the data as unencoded, as it was either unencoded or was missing separators
- which rendered the the remainder of the string impossible for us to decode. */
- memcpy(text, &string[charset_token], end - charset_token); /* Extract unencoded text from string */
- text[end - charset_token] = 0x00;
- MAKE_STD_ZVAL(myobject);
- object_init(myobject);
- add_property_string(myobject, "charset", "default", 1);
- add_property_string(myobject, "text", text, 1);
- zend_hash_next_index_insert(Z_ARRVAL_P(return_value), (void *)&myobject, sizeof(zval *), NULL);
-
- offset = end; /* We have reached the end of the string. */
- }
- efree(charset);
-}
-/* }}} */
-
-/* {{{ _php_rfc822_len
- * Calculate string length based on imap's rfc822_cat function.
- */
-static int _php_rfc822_len(char *str)
-{
- int len;
- char *p;
-
- if (!str || !*str) {
- return 0;
- }
-
- /* strings with special characters will need to be quoted, as a safety measure we
- * add 2 bytes for the quotes just in case.
- */
- len = strlen(str) + 2;
- p = str;
- /* rfc822_cat() will escape all " and \ characters, therefor we need to increase
- * our buffer length to account for these characters.
- */
- while ((p = strpbrk(p, "\\\""))) {
- p++;
- len++;
- }
-
- return len;
-}
-/* }}} */
-
-/* Support Functions */
-/* {{{ _php_imap_get_address_size
- */
-static int _php_imap_address_size (ADDRESS *addresslist)
-{
- ADDRESS *tmp;
- int ret=0, num_ent=0;
-
- tmp = addresslist;
-
- if (tmp) do {
- ret += _php_rfc822_len(tmp->personal);
- ret += _php_rfc822_len(tmp->adl);
- ret += _php_rfc822_len(tmp->mailbox);
- ret += _php_rfc822_len(tmp->host);
- num_ent++;
- } while ((tmp = tmp->next));
-
- /*
- * rfc822_write_address_full() needs some extra space for '<>,', etc.
- * for this perpouse we allocate additional PHP_IMAP_ADDRESS_SIZE_BUF bytes
- * by default this buffer is 10 bytes long
- */
- ret += (ret) ? num_ent*PHP_IMAP_ADDRESS_SIZE_BUF : 0;
-
- return ret;
-}
-
-/* }}} */
-
-
-/* {{{ _php_imap_parse_address
- */
-static void _php_imap_parse_address (ADDRESS *addresslist, char **fulladdress, zval *paddress TSRMLS_DC)
-{
- ADDRESS *addresstmp;
- zval *tmpvals;
- char *tmpstr;
- int len=0;
-
- addresstmp = addresslist;
-
- if ((len = _php_imap_address_size(addresstmp))) {
- tmpstr = (char *) malloc(len + 1);
- tmpstr[0] = '\0';
- rfc822_write_address(tmpstr, addresstmp);
- *fulladdress = tmpstr;
- } else {
- *fulladdress = NULL;
- }
-
- addresstmp = addresslist;
- do {
- MAKE_STD_ZVAL(tmpvals);
- object_init(tmpvals);
- if (addresstmp->personal) add_property_string(tmpvals, "personal", addresstmp->personal, 1);
- if (addresstmp->adl) add_property_string(tmpvals, "adl", addresstmp->adl, 1);
- if (addresstmp->mailbox) add_property_string(tmpvals, "mailbox", addresstmp->mailbox, 1);
- if (addresstmp->host) add_property_string(tmpvals, "host", addresstmp->host, 1);
- add_next_index_object(paddress, tmpvals TSRMLS_CC);
- } while ((addresstmp = addresstmp->next));
-}
-/* }}} */
-
-/* {{{ _php_make_header_object
- */
-static void _php_make_header_object(zval *myzvalue, ENVELOPE *en TSRMLS_DC)
-{
- zval *paddress;
- char *fulladdress=NULL;
-
- object_init(myzvalue);
-
- if (en->remail) add_property_string(myzvalue, "remail", en->remail, 1);
- if (en->date) add_property_string(myzvalue, "date", en->date, 1);
- if (en->date) add_property_string(myzvalue, "Date", en->date, 1);
- if (en->subject) add_property_string(myzvalue, "subject", en->subject, 1);
- if (en->subject) add_property_string(myzvalue, "Subject", en->subject, 1);
- if (en->in_reply_to) add_property_string(myzvalue, "in_reply_to", en->in_reply_to, 1);
- if (en->message_id) add_property_string(myzvalue, "message_id", en->message_id, 1);
- if (en->newsgroups) add_property_string(myzvalue, "newsgroups", en->newsgroups, 1);
- if (en->followup_to) add_property_string(myzvalue, "followup_to", en->followup_to, 1);
- if (en->references) add_property_string(myzvalue, "references", en->references, 1);
-
- if (en->to) {
- MAKE_STD_ZVAL(paddress);
- array_init(paddress);
- _php_imap_parse_address(en->to, &fulladdress, paddress TSRMLS_CC);
- if (fulladdress) {
- add_property_string(myzvalue, "toaddress", fulladdress, 1);
- free(fulladdress);
- }
- add_assoc_object(myzvalue, "to", paddress TSRMLS_CC);
- }
-
- if (en->from) {
- MAKE_STD_ZVAL(paddress);
- array_init(paddress);
- _php_imap_parse_address(en->from, &fulladdress, paddress TSRMLS_CC);
- if (fulladdress) {
- add_property_string(myzvalue, "fromaddress", fulladdress, 1);
- free(fulladdress);
- }
- add_assoc_object(myzvalue, "from", paddress TSRMLS_CC);
- }
-
- if (en->cc) {
- MAKE_STD_ZVAL(paddress);
- array_init(paddress);
- _php_imap_parse_address(en->cc, &fulladdress, paddress TSRMLS_CC);
- if (fulladdress) {
- add_property_string(myzvalue, "ccaddress", fulladdress, 1);
- free(fulladdress);
- }
- add_assoc_object(myzvalue, "cc", paddress TSRMLS_CC);
- }
-
- if (en->bcc) {
- MAKE_STD_ZVAL(paddress);
- array_init(paddress);
- _php_imap_parse_address(en->bcc, &fulladdress, paddress TSRMLS_CC);
- if (fulladdress) {
- add_property_string(myzvalue, "bccaddress", fulladdress, 1);
- free(fulladdress);
- }
- add_assoc_object(myzvalue, "bcc", paddress TSRMLS_CC);
- }
-
- if (en->reply_to) {
- MAKE_STD_ZVAL(paddress);
- array_init(paddress);
- _php_imap_parse_address(en->reply_to, &fulladdress, paddress TSRMLS_CC);
- if (fulladdress) {
- add_property_string(myzvalue, "reply_toaddress", fulladdress, 1);
- free(fulladdress);
- }
- add_assoc_object(myzvalue, "reply_to", paddress TSRMLS_CC);
- }
-
- if (en->sender) {
- MAKE_STD_ZVAL(paddress);
- array_init(paddress);
- _php_imap_parse_address(en->sender, &fulladdress, paddress TSRMLS_CC);
- if (fulladdress) {
- add_property_string(myzvalue, "senderaddress", fulladdress, 1);
- free(fulladdress);
- }
- add_assoc_object(myzvalue, "sender", paddress TSRMLS_CC);
- }
-
- if (en->return_path) {
- MAKE_STD_ZVAL(paddress);
- array_init(paddress);
- _php_imap_parse_address(en->return_path, &fulladdress, paddress TSRMLS_CC);
- if (fulladdress) {
- add_property_string(myzvalue, "return_pathaddress", fulladdress, 1);
- free(fulladdress);
- }
- add_assoc_object(myzvalue, "return_path", paddress TSRMLS_CC);
- }
-}
-/* }}} */
-
-/* {{{ _php_imap_add_body
- */
-void _php_imap_add_body(zval *arg, BODY *body TSRMLS_DC)
-{
- zval *parametres, *param, *dparametres, *dparam;
- PARAMETER *par, *dpar;
- PART *part;
-
- if (body->type <= TYPEMAX) {
- add_property_long(arg, "type", body->type);
- }
-
- if (body->encoding <= ENCMAX) {
- add_property_long(arg, "encoding", body->encoding);
- }
-
- if (body->subtype) {
- add_property_long(arg, "ifsubtype", 1);
- add_property_string(arg, "subtype", body->subtype, 1);
- } else {
- add_property_long(arg, "ifsubtype", 0);
- }
-
- if (body->description) {
- add_property_long(arg, "ifdescription", 1);
- add_property_string(arg, "description", body->description, 1);
- } else {
- add_property_long(arg, "ifdescription", 0);
- }
-
- if (body->id) {
- add_property_long(arg, "ifid", 1);
- add_property_string(arg, "id", body->id, 1);
- } else {
- add_property_long(arg, "ifid", 0);
- }
-
- if (body->size.lines) {
- add_property_long(arg, "lines", body->size.lines);
- }
-
- if (body->size.bytes) {
- add_property_long(arg, "bytes", body->size.bytes);
- }
-
-#ifdef IMAP41
- if (body->disposition.type) {
- add_property_long(arg, "ifdisposition", 1);
- add_property_string(arg, "disposition", body->disposition.type, 1);
- } else {
- add_property_long(arg, "ifdisposition", 0);
- }
-
- if (body->disposition.parameter) {
- dpar = body->disposition.parameter;
- add_property_long(arg, "ifdparameters", 1);
- MAKE_STD_ZVAL(dparametres);
- array_init(dparametres);
- do {
- MAKE_STD_ZVAL(dparam);
- object_init(dparam);
- add_property_string(dparam, "attribute", dpar->attribute, 1);
- add_property_string(dparam, "value", dpar->value, 1);
- add_next_index_object(dparametres, dparam TSRMLS_CC);
- } while ((dpar = dpar->next));
- add_assoc_object(arg, "dparameters", dparametres TSRMLS_CC);
- } else {
- add_property_long(arg, "ifdparameters", 0);
- }
-#endif
-
- if ((par = body->parameter)) {
- add_property_long(arg, "ifparameters", 1);
-
- MAKE_STD_ZVAL(parametres);
- array_init(parametres);
- do {
- MAKE_STD_ZVAL(param);
- object_init(param);
- if (par->attribute) {
- add_property_string(param, "attribute", par->attribute, 1);
- }
- if (par->value) {
- add_property_string(param, "value", par->value, 1);
- }
-
- add_next_index_object(parametres, param TSRMLS_CC);
- } while ((par = par->next));
- } else {
- MAKE_STD_ZVAL(parametres);
- object_init(parametres);
- add_property_long(arg, "ifparameters", 0);
- }
- add_assoc_object(arg, "parameters", parametres TSRMLS_CC);
-
- /* multipart message ? */
- if (body->type == TYPEMULTIPART) {
- MAKE_STD_ZVAL(parametres);
- array_init(parametres);
- for (part = body->CONTENT_PART; part; part = part->next) {
- MAKE_STD_ZVAL(param);
- object_init(param);
- _php_imap_add_body(param, &part->body TSRMLS_CC);
- add_next_index_object(parametres, param TSRMLS_CC);
- }
- add_assoc_object(arg, "parts", parametres TSRMLS_CC);
- }
-
- /* encapsulated message ? */
- if ((body->type == TYPEMESSAGE) && (!strcasecmp(body->subtype, "rfc822"))) {
- body = body->CONTENT_MSG_BODY;
- MAKE_STD_ZVAL(parametres);
- array_init(parametres);
- MAKE_STD_ZVAL(param);
- object_init(param);
- _php_imap_add_body(param, body TSRMLS_CC);
- add_next_index_object(parametres, param TSRMLS_CC);
- add_assoc_object(arg, "parts", parametres TSRMLS_CC);
- }
-}
-/* }}} */
-
-
-/* imap_thread, stealing this from header cclient -rjs3 */
-/* {{{ build_thread_tree_helper
- */
-static void build_thread_tree_helper(THREADNODE *cur, zval *tree, long *numNodes, char *buf)
-{
- unsigned long thisNode = *numNodes;
-
- /* define "#.num" */
- snprintf(buf, 25, "%ld.num", thisNode);
-
- add_assoc_long(tree, buf, cur->num);
-
- snprintf(buf, 25, "%ld.next", thisNode);
- if(cur->next) {
- (*numNodes)++;
- add_assoc_long(tree, buf, *numNodes);
- build_thread_tree_helper(cur->next, tree, numNodes, buf);
- } else { /* "null pointer" */
- add_assoc_long(tree, buf, 0);
- }
-
- snprintf(buf, 25, "%ld.branch", thisNode);
- if(cur->branch) {
- (*numNodes)++;
- add_assoc_long(tree, buf, *numNodes);
- build_thread_tree_helper(cur->branch, tree, numNodes, buf);
- } else { /* "null pointer" */
- add_assoc_long(tree, buf, 0);
- }
-}
-/* }}} */
-
-/* {{{ build_thread_tree
- */
-static int build_thread_tree(THREADNODE *top, zval **tree)
-{
- long numNodes = 0;
- char buf[25];
-
- array_init(*tree);
-
- build_thread_tree_helper(top, *tree, &numNodes, buf);
-
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ proto array imap_thread(resource stream_id [, int options])
- Return threaded by REFERENCES tree */
-PHP_FUNCTION(imap_thread)
-{
- zval **streamind, **search_flags;
- pils *imap_le_struct;
- long flags;
- char criteria[] = "ALL";
- THREADNODE *top;
- int argc = ZEND_NUM_ARGS();
-
- if ( argc < 1 || argc > 2 || zend_get_parameters_ex(argc, &streamind, &search_flags) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- ZEND_FETCH_RESOURCE(imap_le_struct, pils *, streamind, -1, "imap", le_imap);
-
- if (argc == 1) {
- flags = SE_FREE;
- } else {
- convert_to_long_ex(search_flags);
- flags = Z_LVAL_PP(search_flags);
- }
-
- top = mail_thread(imap_le_struct->imap_stream, "REFERENCES", NIL, mail_criteria(criteria), flags);
-
- if(top == NIL) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Function returned an empty tree");
- RETURN_FALSE;
- }
-
- /* Populate our return value data structure here. */
- if(build_thread_tree(top, &return_value) == FAILURE) {
- mail_free_threadnode(&top);
- RETURN_FALSE;
- }
- mail_free_threadnode(&top);
-}
-/* }}} */
-
-/* {{{ proto mixed imap_timeout(int timeout_type [, int timeout])
- Set or fetch imap timeout */
-PHP_FUNCTION(imap_timeout)
-{
- long ttype, timeout=-1;
- int timeout_type;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l|l", &ttype, &timeout) == FAILURE) {
- RETURN_FALSE;
- }
-
- if (timeout == -1) {
- switch (ttype) {
- case 1:
- timeout_type = GET_OPENTIMEOUT;
- break;
- case 2:
- timeout_type = GET_READTIMEOUT;
- break;
- case 3:
- timeout_type = GET_WRITETIMEOUT;
- break;
- case 4:
- timeout_type = GET_CLOSETIMEOUT;
- break;
- default:
- RETURN_FALSE;
- break;
- }
-
- timeout = (long) mail_parameters(NIL, timeout_type, NIL);
- RETURN_LONG(timeout);
- } else if (timeout >= 0) {
- switch (ttype) {
- case 1:
- timeout_type = SET_OPENTIMEOUT;
- break;
- case 2:
- timeout_type = SET_READTIMEOUT;
- break;
- case 3:
- timeout_type = SET_WRITETIMEOUT;
- break;
- case 4:
- timeout_type = SET_CLOSETIMEOUT;
- break;
- default:
- RETURN_FALSE;
- break;
- }
-
- timeout = (long) mail_parameters(NIL, timeout_type, (void *) timeout);
- RETURN_TRUE;
- } else {
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-/* {{{ Interfaces to C-client
- */
-void mm_searched(MAILSTREAM *stream, unsigned long number)
-{
- MESSAGELIST *cur = NIL;
- TSRMLS_FETCH();
-
- if (IMAPG(imap_messages) == NIL) {
- IMAPG(imap_messages) = mail_newmessagelist();
- IMAPG(imap_messages)->msgid = number;
- IMAPG(imap_messages)->next = NIL;
- IMAPG(imap_messages_tail) = IMAPG(imap_messages);
- } else {
- cur = IMAPG(imap_messages_tail);
- cur->next = mail_newmessagelist();
- cur = cur->next;
- cur->msgid = number;
- cur->next = NIL;
- IMAPG(imap_messages_tail) = cur;
- }
-}
-
-void mm_exists(MAILSTREAM *stream, unsigned long number)
-{
-}
-
-void mm_expunged(MAILSTREAM *stream, unsigned long number)
-{
-}
-
-void mm_flags(MAILSTREAM *stream, unsigned long number)
-{
-}
-
-/* Author: CJH */
-void mm_notify(MAILSTREAM *stream, char *str, long errflg)
-{
- STRINGLIST *cur = NIL;
- TSRMLS_FETCH();
-
- if (strncmp(str, "[ALERT] ", 8) == 0) {
- if (IMAPG(imap_alertstack) == NIL) {
- IMAPG(imap_alertstack) = mail_newstringlist();
- IMAPG(imap_alertstack)->LSIZE = strlen(IMAPG(imap_alertstack)->LTEXT = cpystr(str));
- IMAPG(imap_alertstack)->next = NIL;
- } else {
- cur = IMAPG(imap_alertstack);
- while (cur->next != NIL) {
- cur = cur->next;
- }
- cur->next = mail_newstringlist ();
- cur = cur->next;
- cur->LSIZE = strlen(cur->LTEXT = cpystr(str));
- cur->next = NIL;
- }
- }
-}
-
-void mm_list(MAILSTREAM *stream, DTYPE delimiter, char *mailbox, long attributes)
-{
- STRINGLIST *cur=NIL;
- FOBJECTLIST *ocur=NIL;
- TSRMLS_FETCH();
-
- if (IMAPG(folderlist_style) == FLIST_OBJECT) {
- /* build up a the new array of objects */
- /* Author: CJH */
- if (IMAPG(imap_folder_objects) == NIL) {
- IMAPG(imap_folder_objects) = mail_newfolderobjectlist();
- IMAPG(imap_folder_objects)->LSIZE=strlen(IMAPG(imap_folder_objects)->LTEXT=cpystr(mailbox));
- IMAPG(imap_folder_objects)->delimiter = delimiter;
- IMAPG(imap_folder_objects)->attributes = attributes;
- IMAPG(imap_folder_objects)->next = NIL;
- IMAPG(imap_folder_objects_tail) = IMAPG(imap_folder_objects);
- } else {
- ocur=IMAPG(imap_folder_objects_tail);
- ocur->next=mail_newfolderobjectlist();
- ocur=ocur->next;
- ocur->LSIZE = strlen(ocur->LTEXT = cpystr(mailbox));
- ocur->delimiter = delimiter;
- ocur->attributes = attributes;
- ocur->next = NIL;
- IMAPG(imap_folder_objects_tail) = ocur;
- }
-
- } else {
- /* build the old IMAPG(imap_folders) variable to allow old imap_listmailbox() to work */
- if (!(attributes & LATT_NOSELECT)) {
- if (IMAPG(imap_folders) == NIL) {
- IMAPG(imap_folders)=mail_newstringlist();
- IMAPG(imap_folders)->LSIZE=strlen(IMAPG(imap_folders)->LTEXT=cpystr(mailbox));
- IMAPG(imap_folders)->next=NIL;
- IMAPG(imap_folders_tail) = IMAPG(imap_folders);
- } else {
- cur=IMAPG(imap_folders_tail);
- cur->next=mail_newstringlist ();
- cur=cur->next;
- cur->LSIZE = strlen (cur->LTEXT = cpystr (mailbox));
- cur->next = NIL;
- IMAPG(imap_folders_tail) = cur;
- }
- }
- }
-}
-
-void mm_lsub(MAILSTREAM *stream, DTYPE delimiter, char *mailbox, long attributes)
-{
- STRINGLIST *cur=NIL;
- FOBJECTLIST *ocur=NIL;
- TSRMLS_FETCH();
-
- if (IMAPG(folderlist_style) == FLIST_OBJECT) {
- /* build the array of objects */
- /* Author: CJH */
- if (IMAPG(imap_sfolder_objects) == NIL) {
- IMAPG(imap_sfolder_objects) = mail_newfolderobjectlist();
- IMAPG(imap_sfolder_objects)->LSIZE=strlen(IMAPG(imap_sfolder_objects)->LTEXT=cpystr(mailbox));
- IMAPG(imap_sfolder_objects)->delimiter = delimiter;
- IMAPG(imap_sfolder_objects)->attributes = attributes;
- IMAPG(imap_sfolder_objects)->next = NIL;
- IMAPG(imap_sfolder_objects_tail) = IMAPG(imap_sfolder_objects);
- } else {
- ocur=IMAPG(imap_sfolder_objects_tail);
- ocur->next=mail_newfolderobjectlist();
- ocur=ocur->next;
- ocur->LSIZE=strlen(ocur->LTEXT = cpystr(mailbox));
- ocur->delimiter = delimiter;
- ocur->attributes = attributes;
- ocur->next = NIL;
- IMAPG(imap_sfolder_objects_tail) = ocur;
- }
- } else {
- /* build the old simple array for imap_listsubscribed() */
- if (IMAPG(imap_sfolders) == NIL) {
- IMAPG(imap_sfolders)=mail_newstringlist();
- IMAPG(imap_sfolders)->LSIZE=strlen(IMAPG(imap_sfolders)->LTEXT=cpystr(mailbox));
- IMAPG(imap_sfolders)->next=NIL;
- IMAPG(imap_sfolders_tail) = IMAPG(imap_sfolders);
- } else {
- cur=IMAPG(imap_sfolders_tail);
- cur->next=mail_newstringlist ();
- cur=cur->next;
- cur->LSIZE = strlen (cur->LTEXT = cpystr (mailbox));
- cur->next = NIL;
- IMAPG(imap_sfolders_tail) = cur;
- }
- }
-}
-
-void mm_status(MAILSTREAM *stream, char *mailbox, MAILSTATUS *status)
-{
- TSRMLS_FETCH();
-
- IMAPG(status_flags)=status->flags;
- if (IMAPG(status_flags) & SA_MESSAGES) {
- IMAPG(status_messages)=status->messages;
- }
- if (IMAPG(status_flags) & SA_RECENT) {
- IMAPG(status_recent)=status->recent;
- }
- if (IMAPG(status_flags) & SA_UNSEEN) {
- IMAPG(status_unseen)=status->unseen;
- }
- if (IMAPG(status_flags) & SA_UIDNEXT) {
- IMAPG(status_uidnext)=status->uidnext;
- }
- if (IMAPG(status_flags) & SA_UIDVALIDITY) {
- IMAPG(status_uidvalidity)=status->uidvalidity;
- }
-}
-
-void mm_log(char *str, long errflg)
-{
- ERRORLIST *cur = NIL;
- TSRMLS_FETCH();
-
- /* Author: CJH */
- if (errflg != NIL) { /* CJH: maybe put these into a more comprehensive log for debugging purposes? */
- if (IMAPG(imap_errorstack) == NIL) {
- IMAPG(imap_errorstack) = mail_newerrorlist();
- IMAPG(imap_errorstack)->LSIZE = strlen(IMAPG(imap_errorstack)->LTEXT = cpystr(str));
- IMAPG(imap_errorstack)->errflg = errflg;
- IMAPG(imap_errorstack)->next = NIL;
- } else {
- cur = IMAPG(imap_errorstack);
- while (cur->next != NIL) {
- cur = cur->next;
- }
- cur->next = mail_newerrorlist();
- cur = cur->next;
- cur->LSIZE = strlen(cur->LTEXT = cpystr(str));
- cur->errflg = errflg;
- cur->next = NIL;
- }
- }
-}
-
-void mm_dlog(char *str)
-{
- /* CJH: this is for debugging; it might be useful to allow setting
- the stream to debug mode and capturing this somewhere - syslog?
- php debugger? */
-}
-
-void mm_login(NETMBX *mb, char *user, char *pwd, long trial)
-{
- TSRMLS_FETCH();
-
- if (*mb->user) {
- strlcpy (user, mb->user, MAILTMPLEN);
- } else {
- strlcpy (user, IMAPG(imap_user), MAILTMPLEN);
- }
- strlcpy (pwd, IMAPG(imap_password), MAILTMPLEN);
-}
-
-void mm_critical(MAILSTREAM *stream)
-{
-}
-
-void mm_nocritical(MAILSTREAM *stream)
-{
-}
-
-long mm_diskerror(MAILSTREAM *stream, long errcode, long serious)
-{
- return 1;
-}
-
-void mm_fatal(char *str)
-{
-}
-/* }}} */
-
-/*
- * 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/imap/php_imap.h b/ext/imap/php_imap.h
deleted file mode 100644
index 28475bbc80..0000000000
--- a/ext/imap/php_imap.h
+++ /dev/null
@@ -1,224 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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. |
- +----------------------------------------------------------------------+
- | Authors: Rex Logan <veebert@dimensional.com> |
- | Mark Musone <musone@afterfive.com> |
- | Brian Wang <brian@vividnet.com> |
- | Kaj-Michael Lang <milang@tal.org> |
- | Antoni Pamies Olive <toni@readysoft.net> |
- | Rasmus Lerdorf <rasmus@php.net> |
- | Chuck Hagenbuch <chuck@horde.org> |
- | Andrew Skalski <askalski@chekinc.com> |
- | Hartmut Holzgraefe <hholzgra@php.net> |
- | Jani Taskinen <sniper@iki.fi> |
- | Daniel R. Kalowsky <kalowsky@php.net> |
- | PHP 4.0 updates: Zeev Suraski <zeev@zend.com> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-#ifndef PHP_IMAP_H
-#define PHP_IMAP_H
-
-#if HAVE_IMAP
-
-#if defined(HAVE_IMAP2000) || defined(HAVE_IMAP2001)
- /* these are used for quota support */
-# include "c-client.h" /* includes mail.h and rfc822.h */
-# include "imap4r1.h" /* location of c-client quota functions */
-#else
-# include "mail.h"
-# include "rfc822.h"
-#endif
-
-extern zend_module_entry imap_module_entry;
-#define imap_module_ptr &imap_module_entry
-
-
-/* Data types */
-
-#ifdef IMAP41
-#define LSIZE text.size
-#define LTEXT text.data
-#define DTYPE int
-#define CONTENT_PART nested.part
-#define CONTENT_MSG_BODY nested.msg->body
-#define IMAPVER "Imap 4R1"
-#else
-#define LSIZE size
-#define LTEXT text
-#define DTYPE char
-#define CONTENT_PART contents.part
-#define CONTENT_MSG_BODY contents.msg.body
-#define IMAPVER "Imap 4"
-#endif
-
-
-/* Determines how mm_list() and mm_lsub() are to return their results. */
-typedef enum {
- FLIST_ARRAY,
- FLIST_OBJECT
-} folderlist_style_t;
-
-typedef struct php_imap_le_struct {
- MAILSTREAM *imap_stream;
- long flags;
-} pils;
-
-typedef struct php_imap_mailbox_struct {
- SIZEDTEXT text;
- DTYPE delimiter;
- long attributes;
- struct php_imap_mailbox_struct *next;
-} FOBJECTLIST;
-
-typedef struct php_imap_error_struct {
- SIZEDTEXT text;
- long errflg;
- struct php_imap_error_struct *next;
-} ERRORLIST;
-
-typedef struct _php_imap_message_struct {
- unsigned long msgid;
- struct _php_imap_message_struct *next;
-} MESSAGELIST;
-
-
-/* Functions */
-
-PHP_MINIT_FUNCTION(imap);
-PHP_RINIT_FUNCTION(imap);
-PHP_RSHUTDOWN_FUNCTION(imap);
-PHP_MINFO_FUNCTION(imap);
-
-PHP_FUNCTION(imap_open);
-PHP_FUNCTION(imap_popen);
-PHP_FUNCTION(imap_reopen);
-PHP_FUNCTION(imap_num_msg);
-PHP_FUNCTION(imap_num_recent);
-PHP_FUNCTION(imap_headers);
-PHP_FUNCTION(imap_headerinfo);
-PHP_FUNCTION(imap_rfc822_parse_headers);
-PHP_FUNCTION(imap_body);
-PHP_FUNCTION(imap_fetchstructure);
-PHP_FUNCTION(imap_fetchbody);
-PHP_FUNCTION(imap_expunge);
-PHP_FUNCTION(imap_delete);
-PHP_FUNCTION(imap_undelete);
-PHP_FUNCTION(imap_check);
-PHP_FUNCTION(imap_close);
-PHP_FUNCTION(imap_mail_copy);
-PHP_FUNCTION(imap_mail_move);
-PHP_FUNCTION(imap_createmailbox);
-PHP_FUNCTION(imap_renamemailbox);
-PHP_FUNCTION(imap_deletemailbox);
-PHP_FUNCTION(imap_listmailbox);
-PHP_FUNCTION(imap_scanmailbox);
-PHP_FUNCTION(imap_subscribe);
-PHP_FUNCTION(imap_unsubscribe);
-PHP_FUNCTION(imap_append);
-PHP_FUNCTION(imap_ping);
-PHP_FUNCTION(imap_base64);
-PHP_FUNCTION(imap_qprint);
-PHP_FUNCTION(imap_8bit);
-PHP_FUNCTION(imap_binary);
-PHP_FUNCTION(imap_mailboxmsginfo);
-PHP_FUNCTION(imap_rfc822_write_address);
-PHP_FUNCTION(imap_rfc822_parse_adrlist);
-PHP_FUNCTION(imap_setflag_full);
-PHP_FUNCTION(imap_clearflag_full);
-PHP_FUNCTION(imap_sort);
-PHP_FUNCTION(imap_fetchheader);
-PHP_FUNCTION(imap_fetchtext);
-PHP_FUNCTION(imap_uid);
-PHP_FUNCTION(imap_msgno);
-PHP_FUNCTION(imap_list);
-PHP_FUNCTION(imap_list_full);
-PHP_FUNCTION(imap_listscan);
-PHP_FUNCTION(imap_lsub);
-PHP_FUNCTION(imap_lsub_full);
-PHP_FUNCTION(imap_create);
-PHP_FUNCTION(imap_rename);
-PHP_FUNCTION(imap_status);
-PHP_FUNCTION(imap_bodystruct);
-PHP_FUNCTION(imap_fetch_overview);
-PHP_FUNCTION(imap_mail_compose);
-PHP_FUNCTION(imap_alerts);
-PHP_FUNCTION(imap_errors);
-PHP_FUNCTION(imap_last_error);
-PHP_FUNCTION(imap_mail);
-PHP_FUNCTION(imap_search);
-PHP_FUNCTION(imap_utf8);
-PHP_FUNCTION(imap_utf7_decode);
-PHP_FUNCTION(imap_utf7_encode);
-PHP_FUNCTION(imap_mime_header_decode);
-PHP_FUNCTION(imap_thread);
-PHP_FUNCTION(imap_timeout);
-
-#if defined(HAVE_IMAP2000) || defined(HAVE_IMAP2001)
-PHP_FUNCTION(imap_get_quota);
-PHP_FUNCTION(imap_get_quotaroot);
-PHP_FUNCTION(imap_set_quota);
-PHP_FUNCTION(imap_setacl);
-PHP_FUNCTION(imap_getacl);
-#endif
-
-
-ZEND_BEGIN_MODULE_GLOBALS(imap)
- char *imap_user;
- char *imap_password;
-
- STRINGLIST *imap_alertstack;
- ERRORLIST *imap_errorstack;
-
- STRINGLIST *imap_folders;
- STRINGLIST *imap_folders_tail;
- STRINGLIST *imap_sfolders;
- STRINGLIST *imap_sfolders_tail;
- MESSAGELIST *imap_messages;
- MESSAGELIST *imap_messages_tail;
- FOBJECTLIST *imap_folder_objects;
- FOBJECTLIST *imap_folder_objects_tail;
- FOBJECTLIST *imap_sfolder_objects;
- FOBJECTLIST *imap_sfolder_objects_tail;
-
- folderlist_style_t folderlist_style;
- long status_flags;
- unsigned long status_messages;
- unsigned long status_recent;
- unsigned long status_unseen;
- unsigned long status_uidnext;
- unsigned long status_uidvalidity;
-#if defined(HAVE_IMAP2000) || defined(HAVE_IMAP2001)
- zval **quota_return;
- zval *imap_acl_list;
-#endif
-ZEND_END_MODULE_GLOBALS(imap)
-
-#ifdef ZTS
-# define IMAPG(v) TSRMG(imap_globals_id, zend_imap_globals *, v)
-#else
-# define IMAPG(v) (imap_globals.v)
-#endif
-
-#else
-
-#define imap_module_ptr NULL
-
-#endif
-
-#define phpext_imap_ptr imap_module_ptr
-
-#endif /* PHP_IMAP_H */
diff --git a/ext/informix/CREDITS b/ext/informix/CREDITS
deleted file mode 100644
index b98418479b..0000000000
--- a/ext/informix/CREDITS
+++ /dev/null
@@ -1,2 +0,0 @@
-Informix
-Danny Heijl, Christian Cartus, Corne' Cornelius
diff --git a/ext/informix/Makefile.frag b/ext/informix/Makefile.frag
deleted file mode 100644
index 2da3a15e7f..0000000000
--- a/ext/informix/Makefile.frag
+++ /dev/null
@@ -1,13 +0,0 @@
-OVERALL_TARGET += $(srcdir)/ifx.c
-
-$(srcdir)/ifx.c: $(srcdir)/ifx.ec $(builddir)/libphpifx.a
- (if test -d $(INFORMIXDIR); then \
- THREADLIB=POSIX $(INFORMIXDIR)/bin/esql -e $(IFX_ESQL_FLAGS) $(srcdir)/ifx.ec; mv ifx.c $@; \
- THREADLIB=POSIX $(INFORMIXDIR)/bin/esql -e $(IFX_ESQL_FLAGS) $(srcdir)/ifx.ec; \
- mv ifx.c $@ || true; \
- else \
- touch $@; \
- fi)
-
-$(builddir)/libphpifx.a:
- $(LIBTOOL) --mode=link $(CC) $(IFX_LIBOBJS) -o $@
diff --git a/ext/informix/config.m4 b/ext/informix/config.m4
deleted file mode 100644
index 1e892fd908..0000000000
--- a/ext/informix/config.m4
+++ /dev/null
@@ -1,96 +0,0 @@
-dnl
-dnl $Id$
-dnl
-
-PHP_ARG_WITH(informix,for Informix support,
-[ --with-informix[=DIR] Include Informix support. DIR is the Informix base
- install directory, defaults to ${INFORMIXDIR:-nothing}.])
-
-if test "$PHP_INFORMIX" != "no"; then
-
- if test "$INFORMIXDIR" = ""; then
- AC_MSG_ERROR([INFORMIXDIR environment variable is not set.])
- fi
-
- if test "$PHP_INFORMIX" = "yes"; then
- IFX_INCLUDE=-I$INFORMIXDIR/incl/esql
- PHP_ADD_LIBPATH($INFORMIXDIR/lib, INFORMIX_SHARED_LIBADD)
- PHP_ADD_LIBPATH($INFORMIXDIR/lib/esql, INFORMIX_SHARED_LIBADD)
- else
- if test "$PHP_INFORMIX" != "$INFORMIXDIR"; then
- AC_MSG_ERROR([Specified Informix base install directory is different than your INFORMIXDIR environment variable.])
- fi
- IFX_INCLUDE=-I$PHP_INFORMIX/incl/esql
- PHP_ADD_LIBPATH($PHP_INFORMIX/lib, INFORMIX_SHARED_LIBADD)
- PHP_ADD_LIBPATH($PHP_INFORMIX/lib/esql, INFORMIX_SHARED_LIBADD)
- fi
-
- dnl Check if thread safety flags are needed
- if test "$enable_experimental_zts" = "yes"; then
- IFX_ESQL_FLAGS="-thread"
- CPPFLAGS="$CPPFLAGS -DIFX_THREAD"
- else
- IFX_ESQL_FLAGS=""
- fi
-
- IFX_LIBS=`THREADLIB=POSIX $INFORMIXDIR/bin/esql $IFX_ESQL_FLAGS -libs`
- IFX_LIBS=`echo $IFX_LIBS | sed -e 's/Libraries to be used://g' -e 's/esql: error -55923: No source or object file\.//g'`
- dnl Seems to get rid of newlines.
- dnl According to Perls DBD-Informix, might contain these strings.
-
- case "$host_alias" in
- *aix*)
- CPPFLAGS="$CPPFLAGS -D__H_LOCALEDEF";;
- esac
-
- AC_MSG_CHECKING([Informix version])
- IFX_VERSION=[`$INFORMIXDIR/bin/esql -V | grep "ESQL Version" | sed -ne '1 s/\(.*\)ESQL Version \([0-9]*\)\.\([0-9]*\).*/\2\3/p'`]
- AC_MSG_RESULT($IFX_VERSION)
- AC_DEFINE_UNQUOTED(IFX_VERSION, $IFX_VERSION, [ ])
-
- if test $IFX_VERSION -ge "900"; then
- AC_DEFINE(HAVE_IFX_IUS,1,[ ])
- IFX_ESQL_FLAGS="$IFX_ESQL_FLAGS -EDHAVE_IFX_IUS"
- else
- IFX_ESQL_FLAGS="$IFX_ESQL_FLAGS -EUHAVE_IFX_IUS"
- fi
-
- PHP_NEW_EXTENSION(informix, ifx.c, $ext_shared,, $IFX_INCLUDE)
- PHP_ADD_MAKEFILE_FRAGMENT
-
- for i in $IFX_LIBS; do
- case "$i" in
- *.o)
- IFX_LIBOBJS="$IFX_LIBOBJS $i"
- PHP_ADD_LIBPATH($ext_builddir, INFORMIX_SHARED_LIBADD)
- PHP_ADD_LIBRARY_DEFER(phpifx, 1, INFORMIX_SHARED_LIBADD)
- ;;
- -lm)
- ;;
- -lc)
- ;;
- -l*)
- lib=`echo $i | cut -c 3-`
- PHP_ADD_LIBRARY_DEFER($lib, 1, INFORMIX_SHARED_LIBADD)
- ;;
- *.a)
- case "`uname -s 2>/dev/null`" in
- UnixWare | SCO_SV | UNIX_SV)
- DLIBS="$DLIBS $i"
- ;;
- *)
- ac_dir="`echo $i|sed 's#[^/]*$##;s#\/$##'`"
- ac_lib="`echo $i|sed 's#^/.*/lib##g;s#\.a##g'`"
- DLIBS="$DLIBS -L$ac_dir -l$ac_lib"
- ;;
- esac
- ;;
- esac
- done
-
- PHP_SUBST(INFORMIX_SHARED_LIBADD)
- PHP_SUBST(INFORMIXDIR)
- PHP_SUBST(IFX_LIBOBJS)
- PHP_SUBST(IFX_ESQL_FLAGS)
- AC_DEFINE(HAVE_IFX,1,[ ])
-fi
diff --git a/ext/informix/config.w32 b/ext/informix/config.w32
deleted file mode 100644
index c01d3567a0..0000000000
--- a/ext/informix/config.w32
+++ /dev/null
@@ -1,32 +0,0 @@
-// $Id$
-// vim:ft=javascript
-
-ARG_WITH("informix", "informix support", "no");
-
-if (PHP_INFORMIX != "no") {
-
- php_ifx_esql = PATH_PROG('esql', PHP_INFORMIX + ";\\ifx-client\\bin", 'IFX_ESQL');
-
- if (php_ifx_esql) {
- php_ifx_libs = execute(php_ifx_esql + " -thread -libs");
- php_ifx_libs = php_ifx_libs.replace("Libraries to be used:", "").replace(/^\s+/, "");
- ADD_FLAG("LIBS_INFORMIX", php_ifx_libs);
-
- php_ifx_bin = FSO.GetParentFolderName(php_ifx_esql);
- php_ifx_dir = FSO.GetParentFolderName(php_ifx_bin);
-
- ADD_FLAG("CFLAGS_INFORMIX", "/I " + php_ifx_dir + "\\incl\\esql ");
-
- EXTENSION('informix', 'ifx.c', null, "/D IFX_VERSION=921 /D HAVE_IFX_IUS=1 /D HAVE_IFX=1", "php_ifx.dll");
- MFO.WriteLine(configure_module_dirname + "\\ifx.c: " + configure_module_dirname + "\\ifx.ec");
- MFO.WriteLine("\t<<informix_build.bat");
- MFO.WriteLine("PATH " + php_ifx_bin + ";%PATH%");
- MFO.WriteLine("cd " + configure_module_dirname);
- MFO.WriteLine("$(IFX_ESQL) -dcmdl -p -G -subsystem:windows -EDHAVE_IFX_IUS -thread -I ..\\.. ifx.ec");
- MFO.WriteLine("<<NOKEEP");
-
- } else {
- WARNING("informix not enabled; could not find esql.exe");
- }
-}
-
diff --git a/ext/informix/ifx.dsp b/ext/informix/ifx.dsp
deleted file mode 100644
index a87a4224be..0000000000
--- a/ext/informix/ifx.dsp
+++ /dev/null
@@ -1,138 +0,0 @@
-# Microsoft Developer Studio Project File - Name="ifx" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=ifx - Win32 Debug_TS
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "ifx.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "ifx.mak" CFG="ifx - Win32 Debug_TS"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "ifx - Win32 Release_TS" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "ifx - Win32 Debug_TS" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "ifx - Win32 Release_TS"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "..\..\Release_TS"
-# PROP BASE Intermediate_Dir "Release_TS"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "..\..\Release_TS"
-# PROP Intermediate_Dir "Release_TS"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c
-# ADD CPP /nologo /MT /W3 /GX /O2 /I "..\..\main" /I "..\.." /I "..\..\Zend" /I "..\..\TSRM" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "COMPILE_DL" /D HAVE_IFX=1 /D HAVE_IUS=1 /D "ZTS" /D ZEND_WIN32=1 /D PHP_WIN32=1 /D IFX_VERSION=921 /D COMPILE_DL_INFORMIX=1 /D ZEND_DEBUG=0 /D HAVE_IFX_IUS=1 /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32
-# ADD BASE RSC /l 0x406 /d "NDEBUG"
-# ADD RSC /l 0x406 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /machine:I386
-# ADD LINK32 isqlt09a.lib php5ts.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /machine:I386 /out:"..\..\Release_TS/php_ifx.dll" /libpath:"..\..\Release_TS" /libpath:"..\..\Release_TS_Inline"
-
-!ELSEIF "$(CFG)" == "ifx - Win32 Debug_TS"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "ifx___W0"
-# PROP BASE Intermediate_Dir "ifx___W0"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug_TS"
-# PROP Intermediate_Dir "Debug_TS"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c
-# ADD CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /I "..\..\main" /I "..\.." /I "..\..\Zend" /I "..\..\TSRM" /D "_DEBUG" /D ZEND_DEBUG=1 /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "COMPILE_DL" /D HAVE_IFX=1 /D HAVE_IUS=1 /D "ZTS" /D ZEND_WIN32=1 /D PHP_WIN32=1 /D IFX_VERSION=921 /D COMPILE_DL_INFORMIX=1 /D HAVE_IFX_IUS=1 /YX /FD /c
-# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32
-# ADD BASE RSC /l 0x406 /d "_DEBUG"
-# ADD RSC /l 0x406 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 isqlt09a.lib php5ts_debug.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /debug /machine:I386 /out:"Debug_TS/php_ifx.dll" /pdbtype:sept /libpath:"..\..\Debug_TS"
-
-!ENDIF
-
-# Begin Target
-
-# Name "ifx - Win32 Release_TS"
-# Name "ifx - Win32 Debug_TS"
-# Begin Group "Source Files"
-
-# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
-# Begin Source File
-
-SOURCE=.\ifx.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\ifx.ec
-
-!IF "$(CFG)" == "ifx - Win32 Release_TS"
-
-# Begin Custom Build
-InputPath=.\ifx.ec
-
-".\ifx.c" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- esql.exe -dcmdl -p -G -subsystem:windows -EDHAVE_IFX_IUS=1 -thread -I..\.. ifx.ec
-
-# End Custom Build
-
-!ELSEIF "$(CFG)" == "ifx - Win32 Debug_TS"
-
-# Begin Custom Build
-InputPath=.\ifx.ec
-
-".\ifx.c" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- esql.exe -dcmdl -p -G -subsystem:windows -EDHAVE_IFX_IUS=1 -thread -I..\.. ifx.ec
-
-# End Custom Build
-
-!ENDIF
-
-# End Source File
-# End Group
-# Begin Group "Header Files"
-
-# PROP Default_Filter "h;hpp;hxx;hm;inl"
-# Begin Source File
-
-SOURCE=.\php_informix.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\php_informix_includes.h
-# End Source File
-# End Group
-# End Target
-# End Project
diff --git a/ext/informix/ifx.ec b/ext/informix/ifx.ec
deleted file mode 100644
index f43a697d0b..0000000000
--- a/ext/informix/ifx.ec
+++ /dev/null
@@ -1,4712 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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. |
- +----------------------------------------------------------------------+
- | Authors: Danny Heijl <Danny.Heijl@cevi.be> : initial cut (ODS 7.2x) |
- | PHP 4 port |
- | Christian Cartus <chc@idgruppe.de> : blobs, and IUS 9 |
- | Jouni Ahto <jouni.ahto@exdec.fi> : configuration stuff |
- | Corne' Cornelius <cornec@reach.co.za> : input descriptors |
- | Based on the MySQL code by: Zeev Suraski <zeev@php.net> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-/* -------------------------------------------------------------------
- * if you want a function reference : "grep '^\*\*' ifx.ec" will give
- * you a very short one
- * -------------------------------------------------------------------
-*/
-
-/* TODO:
- *
- * ? Safe mode implementation
- */
-
-/* prevent mod_ssl.h's header file from being included. */
-#define AP_HOOK_H
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "php.h"
-#include "php_globals.h"
-#include "ext/standard/php_standard.h"
-#include "php_open_temporary_file.h"
-#include "php_informix.h"
-#include "php_informix_includes.h"
-#include "php_globals.h"
-#include "php_ini.h"
-
-#ifdef PHP_WIN32
-#include <winsock.h>
-#endif
-
-#ifdef ZTS
-#define IFX_THRD_ID tsrm_thread_id()
-#else
-#define IFX_THRD_ID 0
-#endif
-
-#if HAVE_SYS_TYPES_H
-#include <sys/types.h>
-#endif
-
-#if HAVE_NETDB_H
-#include <netdb.h>
-#endif
-
-#if HAVE_NETINET_IN_H
-#include <netinet/in.h>
-#endif
-
-#if HAVE_IFX
-
-/* local function prototypes */
-static void php_ifx_set_default_link(int id TSRMLS_DC);
-static long php_intifx_getType(long id, HashTable *list TSRMLS_DC);
-static long php_intifx_create_blob(long type, long mode, char* param, long len, HashTable *list TSRMLS_DC);
-static long php_intifx_init_blob(loc_t *blob, long mode, long new TSRMLS_DC);
-static long php_intifx_init_blob_inmem(loc_t *blob, long new TSRMLS_DC);
-static long php_intifx_init_blob_infile(loc_t *blob, long new TSRMLS_DC);
-static void php_intifx_release_blob(loc_t *blob TSRMLS_DC);
-static long php_intifx_free_blob(long id, HashTable *list TSRMLS_DC);
-static long php_intifx_get_blob(long bid, HashTable *list, char** content TSRMLS_DC);
-static long php_intifx_update_blob(long bid, char* param, long len, HashTable *list TSRMLS_DC);
-static loc_t *php_intifx_get_blobloc(long bid, HashTable *list TSRMLS_DC);
-static char* php_intifx_create_tmpfile(TSRMLS_D);
-static long php_intifx_copy_blob(long bid, HashTable *list TSRMLS_DC);
-static long php_intifx_alloc_ibind(IFX_RES *Ifx_Result, int items TSRMLS_DC);
-static long php_intifx_preparse(char *statement TSRMLS_DC);
-static long php_intifx_count_descriptors(char *p_statemid TSRMLS_DC);
-static char* php_intifx_null(TSRMLS_D);
-static long php_intifx_create_char(char* param, long len, HashTable *list TSRMLS_DC);
-static long php_intifx_free_char(long id, HashTable *list TSRMLS_DC);
-static long php_intifx_update_char(long bid, char* param, long len, HashTable *list TSRMLS_DC);
-static long php_intifx_get_char(long bid, HashTable *list, char** content TSRMLS_DC);
-#if HAVE_IFX_IUS
-static long php_intifxus_create_slob(long create_mode, HashTable *list TSRMLS_DC);
-static long php_intifxus_free_slob(long bid, HashTable *list TSRMLS_DC);
-static long php_intifxus_close_slob(long bid, HashTable *list TSRMLS_DC);
-static long php_intifxus_open_slob(long bid, long create_mode, HashTable *list TSRMLS_DC);
-static long php_intifxus_new_slob(HashTable *list TSRMLS_DC);
-static ifx_lo_t *php_intifxus_get_slobloc(long bid, HashTable *list TSRMLS_DC);
-#endif
-
-/* 7.10 on (at least) AIX is missing this */
-#ifndef CLIENT_SQLI_VER
-#define CLIENT_SQLI_VER IFX_VERSION
-#endif
-
-#define TYPE_BLBYTE 0
-#define TYPE_BLTEXT 1
-#define TYPE_SLOB 2
-#define TYPE_CHAR 3
-
-#define BLMODE_INMEM 0
-#define BLMODE_INFILE 1
-
-#define IFX_SCROLL 1
-#define IFX_HOLD 2
-
-EXEC SQL include locator;
-EXEC SQL include sqltypes;
-EXEC SQL include sqlstype;
-
-#include <errno.h>
-
-typedef char IFX[128];
-#define SAFE_STRING(s) ((s) ? (s) : "")
-#define PHP_IFX_CHECK_CONNECTION(ifx) \
- do { \
- if (ifx_check() < 0) { \
- char *ifx_err = ifx_error(ifx); \
- IFXG(sv_sqlcode) = SQLCODE; \
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Set connection %s fails (%s)", ifx, ifx_err); \
- efree(ifx_err); \
- RETURN_FALSE; \
- } \
- } while (0)
-
-function_entry ifx_functions[] = {
- PHP_FE(ifx_connect, NULL)
- PHP_FE(ifx_pconnect, NULL)
- PHP_FE(ifx_close, NULL)
- PHP_FE(ifx_query, NULL)
- PHP_FE(ifx_prepare, NULL)
- PHP_FE(ifx_do, NULL)
- PHP_FE(ifx_error, NULL)
- PHP_FE(ifx_errormsg, NULL)
- PHP_FE(ifx_affected_rows, NULL)
- PHP_FE(ifx_num_rows, NULL)
- PHP_FE(ifx_num_fields, NULL)
- PHP_FE(ifx_fetch_row, NULL)
- PHP_FE(ifx_free_result, NULL)
- PHP_FE(ifx_htmltbl_result, NULL)
- PHP_FE(ifx_fieldtypes, NULL)
- PHP_FE(ifx_fieldproperties, NULL)
- PHP_FE(ifx_getsqlca, NULL)
-
- PHP_FE(ifx_create_blob, NULL)
- PHP_FE(ifx_free_blob, NULL)
- PHP_FE(ifx_get_blob, NULL)
- PHP_FE(ifx_update_blob, NULL)
- PHP_FE(ifx_copy_blob, NULL)
- PHP_FE(ifx_textasvarchar, NULL)
- PHP_FE(ifx_byteasvarchar, NULL)
- PHP_FE(ifx_nullformat, NULL)
- PHP_FE(ifx_blobinfile_mode, NULL)
-
- PHP_FE(ifx_create_char, NULL)
- PHP_FE(ifx_free_char, NULL)
- PHP_FE(ifx_get_char, NULL)
- PHP_FE(ifx_update_char, NULL)
-
-$ifdef HAVE_IFX_IUS;
- PHP_FE(ifxus_create_slob, NULL)
- PHP_FE(ifxus_close_slob, NULL)
- PHP_FE(ifxus_open_slob, NULL)
- PHP_FE(ifxus_free_slob, NULL)
- PHP_FE(ifxus_read_slob, NULL)
- PHP_FE(ifxus_write_slob, NULL)
- PHP_FE(ifxus_seek_slob, NULL)
- PHP_FE(ifxus_tell_slob, NULL)
-$endif;
-
- {NULL,NULL,NULL}
-};
-
-zend_module_entry ifx_module_entry = {
- STANDARD_MODULE_HEADER,
- "informix",
- ifx_functions,
- PHP_MINIT(ifx),
- PHP_MSHUTDOWN(ifx),
- PHP_RINIT(ifx),
- NULL,
- PHP_MINFO(ifx),
- NO_VERSION_YET,
- STANDARD_MODULE_PROPERTIES
-};
-
-ZEND_DECLARE_MODULE_GLOBALS(ifx)
-
-#ifdef COMPILE_DL_INFORMIX
-ZEND_GET_MODULE(ifx)
-#endif
-
-/* True globals, no need for thread safety */
-static int le_link, le_plink, le_result, le_idresult;
-
-#define DUP 1
-
-EXEC SQL DEFINE IFX_SUCCESS 0;
-EXEC SQL DEFINE IFX_WARNING 1;
-EXEC SQL DEFINE IFX_ERROR -1;
-EXEC SQL DEFINE IFX_NODATA 100;
-
-static int ifx_check()
-{
- int _ifx_check;
-
- _ifx_check = IFX_ERROR;
-
- if (SQLSTATE[0] == '0') {
- switch (SQLSTATE[1]) {
- case '0':
- _ifx_check = IFX_SUCCESS;
- break;
- case '1':
- _ifx_check = IFX_WARNING;
- break;
- case '2':
- _ifx_check = IFX_NODATA;
- break;
- default :
- _ifx_check = IFX_ERROR;
- break;
- }
- }
- return _ifx_check;
-}
-
-static char *ifx_error(ifx)
-EXEC SQL BEGIN DECLARE SECTION;
- PARAMETER char *ifx;
-EXEC SQL END DECLARE SECTION;
-{
- char *ifx_err_msg;
- char c;
- int errorcode;
- TSRMLS_FETCH();
-
- if (IFXG(sv_sqlcode) == 0) {
- errorcode = SQLCODE;
- } else {
- errorcode = IFXG(sv_sqlcode);
- }
-
- switch (ifx_check()) {
- case IFX_SUCCESS:
- c = ' ';
- break;
- case IFX_WARNING:
- c = 'W';
- break;
- case IFX_ERROR:
- c = 'E';
- break;
- case IFX_NODATA:
- c = 'N';
- break;
- default:
- c = '?';
- break;
- }
-
- ifx_err_msg = emalloc(64);
- sprintf(ifx_err_msg, "%c [SQLSTATE=%c%c %c%c%c SQLCODE=%d]",
- c,
- SQLSTATE[0],
- SQLSTATE[1],
- SQLSTATE[2],
- SQLSTATE[3],
- SQLSTATE[4],
- errorcode
- );
-
- return(ifx_err_msg);
-}
-
-static void ifx_do_close(link)
-EXEC SQL BEGIN DECLARE SECTION;
- PARAMETER char *link;
-EXEC SQL END DECLARE SECTION;
-{
- char *ifx_err = NULL;
- TSRMLS_FETCH();
-
- EXEC SQL SET CONNECTION :link;
-
- if (ifx_check() >= 0) {
- EXEC SQL DISCONNECT :link;
-
- /* check if were in a transaction */
- if (SQLCODE == -1800) {
- EXEC SQL SET CONNECTION :link;
- EXEC SQL ROLLBACK WORK;
- if (ifx_check() == 0) {
- /* DISCONNECT again, after rollback */
- EXEC SQL DISCONNECT :link;
- if (ifx_check() < 0) {
- IFXG(sv_sqlcode) = SQLCODE;
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Disconnect link %s after Automatic Rollback fails (%s)", link, (ifx_err = ifx_error(link)));
- }
- }
- if (ifx_check() < 0) {
- /* CLOSE database if rollback or disconnect fails */
- EXEC SQL CLOSE DATABASE;
- if (ifx_check() < 0) {
- IFXG(sv_sqlcode) = SQLCODE;
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Close database fails %s (%s)", link, (ifx_err = ifx_error(link)));
- }
- }
- }
- else if (SQLCODE < 0) {
- IFXG(sv_sqlcode) = SQLCODE;
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Disconnect link %s fails (%s)", link, (ifx_err = ifx_error(link)));
- }
- }
- else {
- IFXG(sv_sqlcode) = SQLCODE;
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Set connection %s fails (%s)", link, (ifx_err = ifx_error(link)));
- }
-
- if (ifx_err) {
- efree(ifx_err);
- }
-}
-
-static void _close_ifx_link(zend_rsrc_list_entry *rsrc TSRMLS_DC)
-{
- char *link;
-
- link=(char *)rsrc->ptr;
-
- ifx_do_close(link);
-
- efree(link);
- IFXG(num_links)--;
-}
-
-static void _close_ifx_plink(zend_rsrc_list_entry *rsrc TSRMLS_DC)
-{
- char *link;
-
- link = (char *)rsrc->ptr;
-
- ifx_do_close(link);
-
- free(link);
- IFXG(num_persistent)--;
- IFXG(num_links)--;
-}
-
-static void ifx_free_result(zend_rsrc_list_entry *rsrc TSRMLS_DC)
-{
- IFX_RES *Ifx_Result = (IFX_RES *)rsrc->ptr;
- efree(Ifx_Result);
-}
-
-static void ifx_free_blob(zend_rsrc_list_entry *rsrc TSRMLS_DC)
-{
- IFX_IDRES *Ifx_blob = (IFX_IDRES *)rsrc->ptr;
-
- php_intifx_release_blob(&Ifx_blob->BLOB.blob_data TSRMLS_CC);
- efree(Ifx_blob);
-}
-
-PHP_INI_BEGIN()
- STD_PHP_INI_BOOLEAN("ifx.allow_persistent", "1", PHP_INI_SYSTEM, OnUpdateLong, allow_persistent, zend_ifx_globals, ifx_globals)
- STD_PHP_INI_ENTRY_EX("ifx.max_persistent", "-1", PHP_INI_SYSTEM, OnUpdateLong, max_persistent, zend_ifx_globals, ifx_globals, display_link_numbers)
- STD_PHP_INI_ENTRY_EX("ifx.max_links", "-1", PHP_INI_SYSTEM, OnUpdateLong, max_links, zend_ifx_globals, ifx_globals, display_link_numbers)
- STD_PHP_INI_ENTRY("ifx.default_host", NULL, PHP_INI_SYSTEM, OnUpdateString, default_host, zend_ifx_globals, ifx_globals)
- STD_PHP_INI_ENTRY("ifx.default_user", NULL, PHP_INI_SYSTEM, OnUpdateString, default_user, zend_ifx_globals, ifx_globals)
- STD_PHP_INI_ENTRY("ifx.default_password", NULL, PHP_INI_SYSTEM, OnUpdateString, default_password, zend_ifx_globals, ifx_globals)
- STD_PHP_INI_ENTRY("ifx.blobinfile", "1", PHP_INI_ALL, OnUpdateLong, blobinfile, zend_ifx_globals, ifx_globals)
- STD_PHP_INI_ENTRY("ifx.textasvarchar", "0", PHP_INI_ALL, OnUpdateLong, textasvarchar, zend_ifx_globals, ifx_globals)
- STD_PHP_INI_ENTRY("ifx.byteasvarchar", "0", PHP_INI_ALL, OnUpdateLong, byteasvarchar, zend_ifx_globals, ifx_globals)
- STD_PHP_INI_ENTRY("ifx.charasvarchar", "0", PHP_INI_ALL, OnUpdateLong, charasvarchar, zend_ifx_globals, ifx_globals)
- STD_PHP_INI_ENTRY("ifx.nullformat", "0", PHP_INI_ALL, OnUpdateLong, nullformat, zend_ifx_globals, ifx_globals)
-PHP_INI_END()
-
-static void php_ifx_init_globals(zend_ifx_globals *ifx_globals)
-{
- ifx_globals->num_persistent = 0;
- ifx_globals->nullvalue[0] = 0;
- strcpy(ifx_globals->nullstring, "NULL");
- ifx_globals->num_persistent = 0;
- ifx_globals->sv_sqlcode = 0;
-}
-
-PHP_MINIT_FUNCTION(ifx)
-{
- ZEND_INIT_MODULE_GLOBALS(ifx, php_ifx_init_globals, NULL);
-
- REGISTER_INI_ENTRIES();
-
- le_result = zend_register_list_destructors_ex(ifx_free_result, NULL, "informix result", module_number);
- le_idresult = zend_register_list_destructors_ex(ifx_free_blob, NULL, "informix id result", module_number);
- le_link = zend_register_list_destructors_ex(_close_ifx_link, NULL, "informix link", module_number);
- le_plink = zend_register_list_destructors_ex(NULL, _close_ifx_plink, "informix persistent link", module_number);
- ifx_module_entry.type = type;
-
- REGISTER_LONG_CONSTANT("IFX_SCROLL", IFX_SCROLL, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("IFX_HOLD", IFX_HOLD, CONST_CS | CONST_PERSISTENT);
-$ifdef HAVE_IFX_IUS;
- REGISTER_LONG_CONSTANT("IFX_LO_RDONLY", LO_RDONLY, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("IFX_LO_WRONLY", LO_WRONLY, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("IFX_LO_APPEND", LO_APPEND, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("IFX_LO_RDWR", LO_RDWR, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("IFX_LO_BUFFER", LO_BUFFER, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("IFX_LO_NOBUFFER", LO_NOBUFFER, CONST_CS | CONST_PERSISTENT);
-$endif;
-
- return SUCCESS;
-}
-
-PHP_MSHUTDOWN_FUNCTION(ifx)
-{
- UNREGISTER_INI_ENTRIES();
- return SUCCESS;
-}
-
-PHP_RINIT_FUNCTION(ifx)
-{
- IFXG(default_link) = -1;
- IFXG(num_links) = IFXG(num_persistent);
- return SUCCESS;
-}
-PHP_MINFO_FUNCTION(ifx)
-{
- char buf[32];
-
- php_info_print_table_start();
- php_info_print_table_header(2, "Informix support", "enabled");
- sprintf(buf, "%ld", IFXG(num_persistent));
- php_info_print_table_row(2, "Active Persistent links", buf);
- sprintf(buf, "%ld", IFXG(num_links));
- php_info_print_table_row(2, "Active links", buf);
- sprintf(buf, "%02.2f", (double)(IFX_VERSION/100.0));
- php_info_print_table_row(2, "ESQL/C Version", buf);
- php_info_print_table_end();
-
- DISPLAY_INI_ENTRIES();
-}
-
-static void php_ifx_set_default_link(int id TSRMLS_DC)
-{
- if (IFXG(default_link) != -1) {
- zend_list_delete(IFXG(default_link));
- }
- IFXG(default_link) = id;
- zend_list_addref(id);
-}
-
-/* ----------------------------------------------------------------------
-** int ifx_(p)connect(string database, string userid, string password)
-**
-** connects to $database (db@server syntax) using $userid and $password
-**
-** returns a connection id on success or FALSE one error
-** ----------------------------------------------------------------------
-*/
-
-static void php_ifx_do_connect(INTERNAL_FUNCTION_PARAMETERS, int persistent)
-{
- char *hashed_details;
- int hashed_details_length;
-
-EXEC SQL BEGIN DECLARE SECTION;
- char *user,*passwd,*host;
- char *ifx;
-EXEC SQL END DECLARE SECTION;
-
- if (PG(sql_safe_mode)) {
- if (ZEND_NUM_ARGS() > 0) {
- php_error_docref(NULL TSRMLS_CC, E_NOTICE, "SQL safe mode in effect - ignoring host/user/password information");
- }
- host = passwd = NULL;
- user = php_get_current_user();
- hashed_details_length = strlen(user) + 3 + 3;
- hashed_details = (char *) emalloc(hashed_details_length + 1);
- sprintf(hashed_details, "ifx__%s_", user);
- } else {
- int host_len = 0, user_len = 0, passwd_len = 0;
- host = user = passwd = NULL;
-
- /* set default values if any are avaliable */
- if (IFXG(default_host)) {
- host = IFXG(default_host);
- host_len = strlen(host);
- }
- if (IFXG(default_user)) {
- user = IFXG(default_user);
- user_len = strlen(IFXG(default_user));
- }
- if (IFXG(default_password)) {
- passwd = IFXG(default_password);
- passwd_len = strlen(IFXG(default_password));
- }
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|sss", &host, &host_len, &user, &user_len, &passwd, &passwd_len) == FAILURE) {
- return;
- }
-
- hashed_details_length = sizeof("ifx___") - 1 + host_len + user_len + passwd_len;
- hashed_details = (char *) emalloc(hashed_details_length + 1);
- sprintf(hashed_details, "ifx_%s_%s_%s", SAFE_STRING(host), SAFE_STRING(user), SAFE_STRING(passwd));
- }
-
- IFXG(sv_sqlcode) = 0;
-
- if (!IFXG(allow_persistent)) {
- persistent = 0;
- }
-
- if (persistent) {
- list_entry *le;
-
- /* try to find if we already have this link in our persistent list */
- if (zend_hash_find(&EG(persistent_list), hashed_details, hashed_details_length + 1, (void **) &le) == FAILURE) { /* we don't */
- list_entry new_le;
-
- if (IFXG(max_links) != -1 && IFXG(num_links) >= IFXG(max_links)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Too many open links (%d)", IFXG(num_links));
- efree(hashed_details);
- RETURN_FALSE;
- }
- if (IFXG(max_persistent) != -1 && IFXG(num_persistent) >= IFXG(max_persistent)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Too many open persistent links (%d)", IFXG(num_persistent));
- efree(hashed_details);
- RETURN_FALSE;
- }
-
- /* create the link */
- ifx = (char *) malloc(sizeof(IFX));
- IFXG(connectionid)++;
- sprintf(ifx, "%s%x_%x", SAFE_STRING(user), IFX_THRD_ID,IFXG(connectionid));
-
- EXEC SQL CONNECT TO :host AS :ifx USER :user USING :passwd WITH CONCURRENT TRANSACTION;
-
- if (ifx_check() == IFX_ERROR) {
- char *ifx_err = ifx_error(ifx);
- IFXG(sv_sqlcode) = SQLCODE;
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", ifx_err);
- efree(ifx_err);
- free(ifx);
- efree(hashed_details);
- RETURN_FALSE;
- }
-
- /* hash it up */
- new_le.type = le_plink;
- new_le.ptr = ifx;
- if (zend_hash_update(&EG(persistent_list), hashed_details, hashed_details_length + 1, (void *) &new_le, sizeof(list_entry), NULL) == FAILURE) {
- free(ifx);
- efree(hashed_details);
- RETURN_FALSE;
- }
- IFXG(num_persistent)++;
- IFXG(num_links)++;
- } else { /* we do */
- if (le->type != le_plink) {
- RETURN_FALSE;
- }
- /* ensure that the link did not die */
- ifx = le->ptr;
- EXEC SQL SET CONNECTION :ifx;
- if (ifx_check() == IFX_ERROR) { /* the link died */
- ifx = le->ptr; /* reconnect silently */
- EXEC SQL CONNECT TO :host AS :ifx USER :user USING :passwd WITH CONCURRENT TRANSACTION;
-
- if (ifx_check() == IFX_ERROR) {
- char *ifx_err = ifx_error(ifx);
- IFXG(sv_sqlcode) = SQLCODE;
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Link to server lost, unable to reconnect (%s)", ifx_err);
- zend_hash_del(&EG(persistent_list), hashed_details, hashed_details_length + 1);
- efree(ifx_err);
- efree(hashed_details);
- RETURN_FALSE;
- }
- }
- ifx = le->ptr;
- }
- ZEND_REGISTER_RESOURCE(return_value, ifx, le_plink);
- } else { /* non persistent */
- list_entry *index_ptr,new_index_ptr;
-
- /* first we check the hash for the hashed_details key. if it exists,
- * it should point us to the right offset where the actual ifx link sits.
- * if it doesn't, open a new ifx link, add it to the resource list,
- * and add a pointer to it with hashed_details as the key.
- */
- if (zend_hash_find(&EG(regular_list), hashed_details, hashed_details_length + 1, (void **) &index_ptr) == SUCCESS)
- {
- int type,link;
- void *ptr;
-
- if (index_ptr->type != le_index_ptr) {
- RETURN_FALSE;
- }
- link = (int) index_ptr->ptr;
- ptr = zend_list_find(link, &type); /* check if the link is still there */
- if (ptr && (type == le_link || type == le_plink)) {
- /* ensure that the link is not closed */
- ifx = ptr;
- EXEC SQL SET CONNECTION :ifx;
- if (ifx_check() == IFX_ERROR) {
- /* the link is closed */
- ifx = ptr; /* reconnect silently */
- EXEC SQL CONNECT TO :host AS :ifx USER :user USING :passwd WITH CONCURRENT TRANSACTION;
-
- if (ifx_check() == IFX_ERROR) {
- char *ifx_err = ifx_error(ifx);
- IFXG(sv_sqlcode) = SQLCODE;
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to connect (%s)", ifx_err);
- zend_hash_del(&EG(regular_list), hashed_details, hashed_details_length + 1);
- efree(hashed_details);
- efree(ifx_err);
- RETURN_FALSE;
- }
- }
- zend_list_addref(link);
- return_value->value.lval = link;
- php_ifx_set_default_link(link TSRMLS_CC);
- return_value->type = IS_RESOURCE;
- efree(hashed_details);
- return;
- } else {
- zend_hash_del(&EG(regular_list), hashed_details, hashed_details_length + 1);
- }
- }
- if (IFXG(max_links) != -1 && IFXG(num_links) >= IFXG(max_links)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Too many open links (%d)", IFXG(num_links));
- efree(hashed_details);
- RETURN_FALSE;
- }
-
- ifx = (char *) emalloc(sizeof(IFX));
- IFXG(connectionid)++;
- sprintf(ifx, "connec%x_%x", IFX_THRD_ID, IFXG(connectionid));
-
- EXEC SQL CONNECT TO :host AS :ifx USER :user USING :passwd WITH CONCURRENT TRANSACTION;
-
- if (ifx_check() == IFX_ERROR) {
- char *ifx_err = ifx_error(ifx);
- IFXG(sv_sqlcode) = SQLCODE;
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", ifx_err);
- efree(ifx_err);
- efree(hashed_details);
- efree(ifx);
- RETURN_FALSE;
- }
-
- /* add it to the list */
- ZEND_REGISTER_RESOURCE(return_value, ifx, le_link);
-
- /* add it to the hash */
- new_index_ptr.ptr = (void *) return_value->value.lval;
- new_index_ptr.type = le_index_ptr;
- if (zend_hash_update(&EG(regular_list), hashed_details, hashed_details_length + 1, (void *) &new_index_ptr, sizeof(list_entry), NULL) == FAILURE) {
- efree(hashed_details);
- RETURN_FALSE;
- }
- IFXG(num_links)++;
- }
- efree(hashed_details);
- php_ifx_set_default_link(return_value->value.lval TSRMLS_CC);
-}
-
-/* {{{ proto resource ifx_connect([string database [, string userid [, string password]]])
- Connects to database using userid/password, returns connection id */
-PHP_FUNCTION(ifx_connect)
-{
- php_ifx_do_connect(INTERNAL_FUNCTION_PARAM_PASSTHRU,0);
-}
-/* }}} */
-
-/* {{{ proto resource ifx_pconnect([string database [, string userid [, string password]]])
- Connects to database using userid/password, returns connection id */
-PHP_FUNCTION(ifx_pconnect)
-{
- php_ifx_do_connect(INTERNAL_FUNCTION_PARAM_PASSTHRU,1);
-}
-/* }}} */
-
-/* ----------------------------------------------------------------------
-** int ifx_close(int connid)
-**
-** closes connection connid
-** always returns TRUE
-** ----------------------------------------------------------------------
-*/
-
-/* {{{ proto bool ifx_close([resource connid])
- Close informix connection */
-PHP_FUNCTION(ifx_close)
-{
- zval **ifx_link = NULL;
- int id;
-
-EXEC SQL BEGIN DECLARE SECTION;
- char *ifx;
-EXEC SQL END DECLARE SECTION;
-
- switch (ZEND_NUM_ARGS()) {
- case 0:
- id = IFXG(default_link);
- break;
- case 1:
- if (zend_get_parameters_ex(1, &ifx_link) == FAILURE) {
- RETURN_FALSE;
- }
- id=-1;
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
-
- IFXG(sv_sqlcode) = 0;
-
- ZEND_FETCH_RESOURCE2(ifx, char *, ifx_link, id, "Informix link", le_link, le_plink);
-
- if (id == -1) { /* explicit resource number */
- zend_list_delete(Z_RESVAL_PP(ifx_link));
- }
-
- if (id != -1 || (ifx_link && Z_RESVAL_PP(ifx_link) == IFXG(default_link))) {
- zend_list_delete(IFXG(default_link));
- IFXG(default_link) = -1;
- }
- RETURN_TRUE;
-}
-/* }}} */
-
-/* ----------------------------------------------------------------------
-** int ifx_query(string query, int connid
-** [, int cursortype] [, array blobidarray])
-** cursortype and blobidarray are optional
-**
-** executes query query on connection connid
-** for select queries a cursor is declared and opened
-** non-select queries are "execute immediate"
-** select queries accept an optional cursortype param:
-** IFX_SCROLL, IFX_HOLD (or'ed mask)
-** non-select queries accept an optional "blobarryid" parameter
-** blobsupport: mark the blob-column(s) with ? in the insert/update query
-** and add a blob-id-array-functionparameter
-** select queries return "blob-ids" for blob columns
-** except if text/byteasvarchar is set
-** example: ifx_query("insert into catalog (stock_num, manu_code,
-** cat_descr,cat_picture) values(1,'HRO',?,?)",$cid,$bidarray);
-**
-** returns a "result id" on success or FALSE on error
-** also sets "affected_rows for retrieval by ifx_affected_rows()
-** ----------------------------------------------------------------------
-*/
-
-/* {{{ proto resource ifx_query(string query, resource connid [, int cursortype] [, array idarray])
- Perform a query on a given connection */
-PHP_FUNCTION(ifx_query)
-{
- zval **query, **ifx_link, **cursortype, **dummy;
- int id=-1;
- IFX_RES *Ifx_Result;
-
-EXEC SQL BEGIN DECLARE SECTION;
- char *ifx; /* connection ID */
- char cursorid[32]; /* query cursor id */
- char statemid[32]; /* statement id */
- char descrpid[32]; /* descriptor id */
- char i_descrpid[32]; /* input descriptor binding */
- char *statement; /* query text */
- int fieldcount; /* field count */
- int i; /* field index */
- short fieldtype;
- loc_t *locator=NULL;
- int loc_t_type=CLOCATORTYPE; /* WORKAROUND:TYPE=CLOCATORTYPE doesn't work, */
- int sqlchar_type=SQLCHAR; /* don't ask me, why. */
- char *char_tmp;
- long len;
- int indicator;
- int desc_count;
-$ifdef HAVE_IFX_IUS;
- fixed binary 'blob' ifx_lo_t *slocator;
-$endif;
-EXEC SQL END DECLARE SECTION;
-
- int locind;
- int ctype;
- int affected_rows;
- long sqlerrd[6];
- int e;
- int query_type;
- int cursoryproc;
- int argc=ZEND_NUM_ARGS();
- long ifx_type;
- int num_params;
-
- if (argc < 2 || zend_get_parameters_ex(argc, &query, &ifx_link, &dummy, &dummy) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE2(ifx, char *, ifx_link, id, "Informix link", le_link, le_plink);
-
- IFXG(sv_sqlcode) = 0;
- affected_rows = -1; /* invalid */
-
- convert_to_string_ex(query);
- statement = Z_STRVAL_PP(query);
-
- IFXG(cursorid)++;
- sprintf(statemid, "statem%x_%x", IFX_THRD_ID, IFXG(cursorid));
- sprintf(cursorid, "cursor%x_%x", IFX_THRD_ID, IFXG(cursorid));
- sprintf(descrpid, "descrp%x_%x", IFX_THRD_ID, IFXG(cursorid));
- sprintf(i_descrpid, "i_descrp%x_%x", IFX_THRD_ID,IFXG(cursorid));
-
- EXEC SQL set connection :ifx;
- PHP_IFX_CHECK_CONNECTION(ifx);
-
- EXEC SQL PREPARE :statemid FROM :statement;
- if (ifx_check() < 0) {
- char *ifx_err = ifx_error(ifx);
- IFXG(sv_sqlcode) = SQLCODE;
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Prepare fails (%s)", ifx_err);
- efree(ifx_err);
- RETURN_FALSE;
- }
-
- affected_rows = sqlca.sqlerrd[0]; /* save estimated affected rows */
- for (e = 0; e < 6; e++) sqlerrd[e] = sqlca.sqlerrd[e];
-
- num_params = php_intifx_preparse(statement TSRMLS_CC);
-
- Ifx_Result = (IFX_RES *) emalloc(sizeof(IFX_RES));
- if (Ifx_Result == NULL) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Out of memory allocating IFX_RES");
- EXEC SQL free :statemid;
- RETURN_FALSE;
- }
-
- /* initialize result data structure */
- Ifx_Result->rowid = 0;
- strcpy(Ifx_Result->connecid, ifx);
- strcpy(Ifx_Result->cursorid, cursorid);
- strcpy(Ifx_Result->descrpid, descrpid);
- strcpy(Ifx_Result->i_descrpid, i_descrpid);
- strcpy(Ifx_Result->statemid, statemid);
- Ifx_Result->numcols = 0;
- Ifx_Result->numicols = 0;
-
- for (i = 0; i < MAX_RESID; ++i) {
- Ifx_Result->res_id[i] = -1;
- }
-
- if (!php_intifx_alloc_ibind(Ifx_Result, num_params TSRMLS_CC)) {
- char *ifx_err = ifx_error(ifx);
- IFXG(sv_sqlcode) = SQLCODE;
- EXEC SQL free :statemid;
- efree(Ifx_Result);
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Allocate i_desciptor <%s> fails (%s)", i_descrpid, ifx_err);
- efree(ifx_err);
- RETURN_FALSE;
- }
-
- desc_count = php_intifx_count_descriptors(statemid TSRMLS_CC);
- if (desc_count == 0) {
- desc_count = 1;
- }
-
- EXEC SQL ALLOCATE DESCRIPTOR :descrpid WITH MAX :desc_count;
- if (ifx_check() < 0) {
- char *ifx_err = ifx_error(ifx);
- IFXG(sv_sqlcode) = SQLCODE;
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Allocate desciptor <%s> fails (%s)", descrpid, ifx_err);
- EXEC SQL free :statemid;
- efree(ifx_err);
- RETURN_FALSE;
- }
-
- EXEC SQL DESCRIBE :statemid USING SQL DESCRIPTOR :descrpid;
- if (ifx_check() < 0) {
- char *ifx_err = ifx_error(ifx);
- IFXG(sv_sqlcode) = SQLCODE;
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Describe fails (%s)", ifx_err);
- EXEC SQL DEALLOCATE DESCRIPTOR :descrpid;
- EXEC SQL free :statemid;
- efree(ifx_err);
- RETURN_FALSE;
- }
-
- query_type = sqlca.sqlcode;
-
- cursoryproc = 0;
- if (query_type == SQ_EXECPROC) {
- EXEC SQL GET DESCRIPTOR :descrpid :i = COUNT;
- if (i > 0) {
- cursoryproc = 1;
- }
- }
-
- Ifx_Result->iscursory = -1; /* prevent ifx_do */
- Ifx_Result->paramquery = 0;
-
- if ((query_type != 0) && (!cursoryproc)) { /* NO RESULT SET */
- /* ##
- ## NONSELECT-STATEMENT
- ##
- */
- zval **pblobidarr, **tmp;
-
- /* We don't need this descriptor anymore, NONSELECT-STATEMENT */
- EXEC SQL DEALLOCATE DESCRIPTOR :descrpid;
-
- Ifx_Result->iscursory = 0;
-
- if (argc > 3) {
- WRONG_PARAM_COUNT;
- }
-
- if (argc == 3) {
-
- if (Ifx_Result->numicols <= 0) {
- IFXG(sv_sqlcode) = SQLCODE;
- EXEC SQL free :statemid;
- efree(Ifx_Result);
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "No placeholders (?) in Statement, but blob array param supplied");
- RETURN_FALSE;
- }
-
- if (zend_get_parameters_ex(3, &dummy, &dummy, &pblobidarr) == FAILURE) {
- IFXG(sv_sqlcode) = SQLCODE;
- EXEC SQL DEALLOCATE DESCRIPTOR :i_descrpid;
- EXEC SQL free :statemid;
- efree(Ifx_Result);
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Can't get blob array param");
- RETURN_FALSE;
- }
- if (Z_TYPE_PP(pblobidarr) != IS_ARRAY) {
- IFXG(sv_sqlcode) = SQLCODE;
- EXEC SQL DEALLOCATE DESCRIPTOR :i_descrpid;
- EXEC SQL free :statemid;
- efree(Ifx_Result);
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Blob-parameter is not an array");
- RETURN_FALSE;
- }
-
- zend_hash_internal_pointer_reset((*pblobidarr)->value.ht);
- for (i = 1; i <= Ifx_Result->numicols && (zend_hash_get_current_data((*pblobidarr)->value.ht, (void **) &tmp) == SUCCESS); ++i) {
- convert_to_long(*tmp);
-
- ifx_type = php_intifx_getType((int)(*tmp)->value.lval, &EG(regular_list) TSRMLS_CC);
- switch (ifx_type) {
- case TYPE_BLTEXT:
- case TYPE_BLBYTE:
- locator = php_intifx_get_blobloc((int)((*tmp)->value.lval), &EG(regular_list) TSRMLS_CC);
- if (locator == NULL) {
- IFXG(sv_sqlcode) = SQLCODE;
- EXEC SQL DEALLOCATE DESCRIPTOR :i_descrpid;
- EXEC SQL free :statemid;
- efree(Ifx_Result);
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "%d is not an Informix blob-result index", (int)((*tmp)->value.lval));
- RETURN_FALSE;
- }
- if (locator->loc_loctype == LOCFNAME) {
- locator->loc_oflags=LOC_RONLY;
- }
- EXEC SQL SET DESCRIPTOR :i_descrpid VALUE :i DATA = :*locator, TYPE = :loc_t_type;
- break;
-
- case TYPE_CHAR:
- len = php_intifx_get_char((int) ((*tmp)->value.lval), &EG(regular_list), &char_tmp TSRMLS_CC);
- indicator = 0;
- if (char_tmp == NULL || len < 0) {
- indicator = -1;
- }
- len++;
-
- EXEC SQL SET DESCRIPTOR :i_descrpid VALUE :i
- DATA= :char_tmp,
- LENGTH= :len,
- INDICATOR= :indicator,
- TYPE= :sqlchar_type;
- break;
- }
-
- if (ifx_check() < 0) {
- char *ifx_err = ifx_error(ifx);
- IFXG(sv_sqlcode) = SQLCODE;
- EXEC SQL DEALLOCATE DESCRIPTOR :i_descrpid;
- EXEC SQL free :statemid;
- efree(Ifx_Result);
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Execute immediate fails : %s", ifx_err);
- efree(ifx_err);
- RETURN_FALSE;
- }
-
- zend_hash_move_forward((*pblobidarr)->value.ht);
- }
- Ifx_Result->paramquery=1;
-
- if (i - 1 != Ifx_Result->numicols) {
- EXEC SQL DEALLOCATE DESCRIPTOR :i_descrpid;
- EXEC SQL free :statemid;
- efree(Ifx_Result);
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Execute immediate fails : number of created blobs doesn't match placeholders (?)");
- RETURN_FALSE;
- }
- EXEC SQL EXECUTE :statemid USING SQL DESCRIPTOR :i_descrpid;
- } else {
- EXEC SQL EXECUTE :statemid;
- }
-
- if (ifx_check() < 0) {
- char *ifx_err = ifx_error(ifx);
- IFXG(sv_sqlcode) = SQLCODE;
- if (Ifx_Result->numicols > 0) {
- EXEC SQL DEALLOCATE DESCRIPTOR :i_descrpid;
- }
- EXEC SQL free :statemid;
- efree(Ifx_Result);
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Execute immediate fails : %s", ifx_err);
- efree(ifx_err);
- RETURN_FALSE;
- }
- Ifx_Result->affected_rows = sqlca.sqlerrd[2]; /* really affected */
- for (e = 0; e < 6; e++) {
- Ifx_Result->sqlerrd[e] = sqlca.sqlerrd[e];
- }
- } else {
- /* ##
- ## SELECT-STATEMENT
- ##
- */
-
- ctype = 0; /* preset */
-
- switch(argc) {
- case 2:
- break;
- case 3:
- if (zend_get_parameters_ex(3, &dummy, &dummy, &cursortype) == FAILURE) {
- RETURN_FALSE;
- }
- convert_to_long_ex(cursortype);
- ctype = Z_LVAL_PP(cursortype);
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
-
- Ifx_Result->affected_rows = affected_rows; /* saved estimated from prepare */
- for (e = 0; e < 6; e++) {
- Ifx_Result->sqlerrd[e] = sqlerrd[e];
- }
-
- EXEC SQL GET DESCRIPTOR :descrpid :fieldcount = COUNT;
- if (ifx_check() < 0) {
- char *ifx_err = ifx_error(ifx);
- IFXG(sv_sqlcode) = SQLCODE;
- EXEC SQL DEALLOCATE DESCRIPTOR :descrpid;
- EXEC SQL free :statemid;
- efree(Ifx_Result);
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Can not get descriptor %s (%s)", descrpid, ifx_err);
- efree(ifx_err);
- RETURN_FALSE;
- }
-
- Ifx_Result->numcols = fieldcount;
- Ifx_Result->isscroll = Ifx_Result->ishold = 0;
-
- if (ctype & IFX_SCROLL) {
- Ifx_Result->isscroll = 1;
- }
- if (ctype & IFX_HOLD) {
- Ifx_Result->ishold = 1;
- }
-
- /*
- * ifx_do() part
- */
-
- if (Ifx_Result->isscroll) {
- if (Ifx_Result->ishold) {
- EXEC SQL DECLARE :cursorid SCROLL CURSOR WITH HOLD FOR :statemid;
- } else {
- EXEC SQL DECLARE :cursorid SCROLL CURSOR FOR :statemid;
- }
- } else {
- if (Ifx_Result->ishold) {
- EXEC SQL DECLARE :cursorid CURSOR WITH HOLD FOR :statemid;
- } else {
- EXEC SQL DECLARE :cursorid CURSOR FOR :statemid;
- }
- }
-
- if (ifx_check() < 0) {
- char *ifx_err = ifx_error(ifx);
- IFXG(sv_sqlcode) = SQLCODE;
- EXEC SQL DEALLOCATE DESCRIPTOR :descrpid;
- EXEC SQL free :statemid;
- efree(Ifx_Result);
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Declare cursor fails (%s)", ifx_err);
- efree(ifx_err);
- RETURN_FALSE;
- }
-
- EXEC SQL OPEN :cursorid;
- if (ifx_check() < 0) {
- char *ifx_err = ifx_error(ifx);
- IFXG(sv_sqlcode) = SQLCODE;
- EXEC SQL DEALLOCATE DESCRIPTOR :descrpid;
- EXEC SQL free :statemid;
- EXEC SQL free :cursorid;
- efree(Ifx_Result);
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Open cursor fails (%s)", ifx_err);
- efree(ifx_err);
- RETURN_FALSE;
- }
-
- /* check for text/blob columns */
- locind = 0;
- for (i = 1; i <= fieldcount; ++i) {
- EXEC SQL GET DESCRIPTOR :descrpid VALUE :i :fieldtype = TYPE;
- if ((fieldtype == SQLTEXT) || (fieldtype == SQLBYTES)
-$ifdef HAVE_IFX_IUS;
- || (fieldtype == SQLUDTFIXED)
-$endif;
- ) {
- int bid = 0;
- if (fieldtype == SQLTEXT) {
- if (IFXG(blobinfile) == 0) {
- bid = php_intifx_create_blob(TYPE_BLTEXT,BLMODE_INMEM, "", -1, &EG(regular_list) TSRMLS_CC);
- locator = php_intifx_get_blobloc(bid, &EG(regular_list) TSRMLS_CC);
- } else {
- bid = php_intifx_create_blob(TYPE_BLTEXT,BLMODE_INFILE, "",-1, &EG(regular_list) TSRMLS_CC);
- locator = php_intifx_get_blobloc(bid, &EG(regular_list) TSRMLS_CC);
- }
-
- EXEC SQL SET DESCRIPTOR :descrpid VALUE :i DATA = :*locator;
- } else if (fieldtype == SQLBYTES) {
- if (IFXG(blobinfile) == 0) {
- bid = php_intifx_create_blob(TYPE_BLBYTE, BLMODE_INMEM, "", -1, &EG(regular_list) TSRMLS_CC);
- locator = php_intifx_get_blobloc(bid, &EG(regular_list) TSRMLS_CC);
- } else {
- bid = php_intifx_create_blob(TYPE_BLBYTE,BLMODE_INFILE, "", -1, &EG(regular_list) TSRMLS_CC);
- locator = php_intifx_get_blobloc(bid, &EG(regular_list) TSRMLS_CC);
- }
- EXEC SQL SET DESCRIPTOR :descrpid VALUE :i DATA = :*locator;
- }
-
- php_intifx_release_blob(locator TSRMLS_CC);
-$ifdef HAVE_IFX_IUS;
- if (fieldtype == SQLUDTFIXED) {
- bid = php_intifxus_new_slob(&EG(regular_list) TSRMLS_CC);
- slocator = php_intifxus_get_slobloc(bid, &EG(regular_list) TSRMLS_CC);
- EXEC SQL SET DESCRIPTOR :descrpid VALUE :i DATA = :*slocator;
- }
-$endif;
- Ifx_Result->res_id[locind]=bid;
- ++locind;
- }
- }
- }
- ZEND_REGISTER_RESOURCE(return_value, Ifx_Result, le_result);
-}
-/* }}} */
-
-
-/* ----------------------------------------------------------------------
-** int ifx_prepare(string query, int connid,
-** [, int cursortype] [, array blobidarry])
-**
-** $hold, $scroll are optional and valid only for select queries
-** $blobidarray is optional, an array of blob id's
-**
-** prepares query $query on connection $connid
-** select queries accept an optional cursortype param: IFX_SCROLL, IFX_HOLD (or'ed mask)
-** blobsupport: mark the blob-column with ? and add a blob-id-functionparameter
-** example: ifx_query("insert into catalog (stock_num, manu_code ,cat_descr,
-** cat_picture) values(1,'HRO',?,?)",$cid,$bid1,$bid2);
-**
-** returns a "result id" on success or FALSE on error
-** also sets "affected_rows for retrieval by ifx_affected_rows
-** ----------------------------------------------------------------------
-*/
-
-/* {{{ proto resource ifx_prepare(string query, resource connid [, int cursortype] [, array idarray])
- Prepare a query on a given connection */
-PHP_FUNCTION(ifx_prepare)
-{
- zval **query, **ifx_link, **cursortype, **dummy;
- int id=-1;
- IFX_RES *Ifx_Result;
-
-EXEC SQL BEGIN DECLARE SECTION;
- char *ifx; /* connection ID */
- char cursorid[32]; /* query cursor id */
- char statemid[32]; /* statement id */
- char descrpid[32]; /* descriptor id */
- char i_descrpid[32]; /* input descriptor binding */
- char *statement; /* query text */
- int fieldcount; /* field count */
- int i; /* field index */
- loc_t *locator;
- int loc_t_type=CLOCATORTYPE; /* WORKAROUND: TYPE=CLOCATORTYPE doesn't work, */
- int sqlchar_type=SQLCHAR; /* don't ask me, why. */
- char *char_tmp;
- long len;
- int indicator;
- long sqlerrd[6];
- int e;
- int desc_count;
-EXEC SQL END DECLARE SECTION;
- int ctype;
- int affected_rows;
- int query_type;
- int cursoryproc;
- int argc=ZEND_NUM_ARGS();
- long ifx_type;
- int num_params;
-
- if (argc < 2 || zend_get_parameters_ex(argc, &query, &ifx_link, &dummy, &dummy) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE2(ifx, char *, ifx_link, id, "Informix link", le_link, le_plink);
-
- IFXG(sv_sqlcode) = 0;
- affected_rows = -1; /* invalid */
-
- convert_to_string_ex(query);
- statement = Z_STRVAL_PP(query);
-
- IFXG(cursorid)++;
- sprintf(statemid, "statem%x_%x", IFX_THRD_ID, IFXG(cursorid));
- sprintf(cursorid, "cursor%x_%x", IFX_THRD_ID, IFXG(cursorid));
- sprintf(descrpid, "descrp%x_%x", IFX_THRD_ID, IFXG(cursorid));
- sprintf(i_descrpid, "i_descrp%x_%x", IFX_THRD_ID,IFXG(cursorid));
-
- EXEC SQL set connection :ifx;
- PHP_IFX_CHECK_CONNECTION(ifx);
-
- EXEC SQL PREPARE :statemid FROM :statement;
- if (ifx_check() < 0) {
- IFXG(sv_sqlcode) = SQLCODE;
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Prepare fails (%s)", ifx_error(ifx));
- RETURN_FALSE;
- }
-
- affected_rows = sqlca.sqlerrd[0]; /* save estimated affected rows */
- for (e = 0; e < 6; e++) {
- sqlerrd[e] = sqlca.sqlerrd[e];
- }
- num_params = php_intifx_preparse(statement TSRMLS_CC);
-
- Ifx_Result = (IFX_RES *) emalloc(sizeof(IFX_RES));
- if (Ifx_Result == NULL) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Out of memory allocating IFX_RES");
- EXEC SQL free :statemid;
- RETURN_FALSE;
- }
-
- /* initialize result data structure */
-
- Ifx_Result->rowid = 0;
- strcpy(Ifx_Result->connecid, ifx);
- strcpy(Ifx_Result->cursorid, cursorid);
- strcpy(Ifx_Result->descrpid, descrpid);
- strcpy(Ifx_Result->i_descrpid, i_descrpid);
- strcpy(Ifx_Result->statemid, statemid);
- Ifx_Result->numcols = 0;
- Ifx_Result->numicols = 0;
-
- for (i = 0; i < MAX_RESID; ++i) {
- Ifx_Result->res_id[i] = -1;
- }
-
- if (!php_intifx_alloc_ibind(Ifx_Result, num_params TSRMLS_CC)) {
- char *ifx_err = ifx_error(ifx);
- IFXG(sv_sqlcode) = SQLCODE;
- EXEC SQL free :statemid;
- efree(Ifx_Result);
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Allocate i_desciptor <%s> fails (%s)", i_descrpid, ifx_err);
- efree(ifx_err);
- RETURN_FALSE;
- }
-
- desc_count = php_intifx_count_descriptors(statemid TSRMLS_CC);
- if (desc_count == 0) {
- desc_count = 1;
- }
-
- EXEC SQL ALLOCATE DESCRIPTOR :descrpid WITH MAX :desc_count;
- if (ifx_check() < 0) {
- char *ifx_err = ifx_error(ifx);
- IFXG(sv_sqlcode) = SQLCODE;
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Allocate desciptor <%s> fails (%s)", descrpid, ifx_err);
- EXEC SQL free :statemid;
- efree(ifx_err);
- RETURN_FALSE;
- }
-
- EXEC SQL DESCRIBE :statemid USING SQL DESCRIPTOR :descrpid;
- if (ifx_check() < 0) {
- char *ifx_err = ifx_error(ifx);
- IFXG(sv_sqlcode) = SQLCODE;
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Describe fails (%s)", ifx_err);
- EXEC SQL DEALLOCATE DESCRIPTOR :descrpid;
- EXEC SQL free :statemid;
- efree(ifx_err);
- RETURN_FALSE;
- }
-
- query_type = sqlca.sqlcode;
-
- cursoryproc = 0;
- if (query_type == SQ_EXECPROC) {
- EXEC SQL GET DESCRIPTOR :descrpid :i = COUNT;
- if (i > 0) {
- cursoryproc = 1;
- }
- }
-
- Ifx_Result->iscursory = -1; /* prevent ifx_do */
- Ifx_Result->paramquery=0;
-
- if ((query_type != 0) && (!cursoryproc)) { /* NO RESULT SET */
- /* ##
- ## NONSELECT-STATEMENT
- ##
- */
- zval **pblobidarr, **tmp;
-
- /* We don't need this descriptor anymore, NONSELECT-STATEMENT */
- EXEC SQL DEALLOCATE DESCRIPTOR :descrpid;
-
- Ifx_Result->iscursory = 0;
-
- if (argc > 3) {
- WRONG_PARAM_COUNT;
- }
-
- if (argc == 3) {
- Ifx_Result->paramquery = 1;
-
- if (Ifx_Result->numicols <= 0) {
- IFXG(sv_sqlcode) = SQLCODE;
- EXEC SQL free :statemid;
- efree(Ifx_Result);
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "No placeholders (?) in Statement, but blob array param supplied");
- RETURN_FALSE;
- }
-
- if (zend_get_parameters_ex(3, &dummy, &dummy, &pblobidarr) == FAILURE) {
- IFXG(sv_sqlcode) = SQLCODE;
- EXEC SQL DEALLOCATE DESCRIPTOR :i_descrpid;
- EXEC SQL free :statemid;
- efree(Ifx_Result);
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Can't get blob array param");
- RETURN_FALSE;
- }
-
- if ((*pblobidarr)->type != IS_ARRAY) {
- IFXG(sv_sqlcode) = SQLCODE;
- EXEC SQL DEALLOCATE DESCRIPTOR :i_descrpid;
- EXEC SQL free :statemid;
- efree(Ifx_Result);
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Blob-parameter not an array");
- RETURN_FALSE;
- }
-
- zend_hash_internal_pointer_reset((*pblobidarr)->value.ht);
- for (i = 1; i <= num_params && (zend_hash_get_current_data((*pblobidarr)->value.ht, (void **) &tmp) == SUCCESS); ++i) {
- convert_to_long(*tmp);
-
- ifx_type = php_intifx_getType((int)(*tmp)->value.lval, &EG(regular_list) TSRMLS_CC);
- switch (ifx_type) {
- case TYPE_BLTEXT:
- case TYPE_BLBYTE:
- locator = php_intifx_get_blobloc((int)((*tmp)->value.lval), &EG(regular_list) TSRMLS_CC);
- if (locator == NULL) {
- IFXG(sv_sqlcode) = SQLCODE;
- EXEC SQL DEALLOCATE DESCRIPTOR :i_descrpid;
- EXEC SQL free :statemid;
- efree(Ifx_Result);
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "%d is not a Informix blob-result index", (int)((*tmp)->value.lval));
- RETURN_FALSE;
- }
- if (locator->loc_loctype == LOCFNAME) {
- locator->loc_oflags=LOC_RONLY;
- }
- EXEC SQL SET DESCRIPTOR :i_descrpid VALUE :i DATA = :*locator, TYPE = :loc_t_type;
- break;
- case TYPE_CHAR:
- len = php_intifx_get_char((int)((*tmp)->value.lval), &EG(regular_list), &char_tmp TSRMLS_CC);
-
- indicator = 0;
- if (char_tmp == NULL || len < 0) {
- indicator = -1;
- }
- len++;
-
- EXEC SQL SET DESCRIPTOR :descrpid VALUE :i
- DATA= :char_tmp,
- LENGTH= :len,
- INDICATOR= :indicator,
- TYPE= :sqlchar_type;
- break;
- }
-
- if (ifx_check() < 0) {
- char *ifx_err = ifx_error(ifx);
- IFXG(sv_sqlcode) = SQLCODE;
- EXEC SQL DEALLOCATE DESCRIPTOR :i_descrpid;
- EXEC SQL free :statemid;
- efree(Ifx_Result);
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Prepare fails : %s", ifx_err);
- efree(ifx_err);
- RETURN_FALSE;
- }
-
- zend_hash_move_forward((*pblobidarr)->value.ht);
- }
-
- if (i - 1 != Ifx_Result->numicols) {
- EXEC SQL DEALLOCATE DESCRIPTOR :i_descrpid;
- EXEC SQL free :statemid;
- efree(Ifx_Result);
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Prepare fails : number of created blobs doesn't match placeholders (?)");
- RETURN_FALSE;
- }
-
- }
-
- Ifx_Result->affected_rows = affected_rows; /* saved estimated from prepare */
- for (e = 0; e < 6; e++) {
- Ifx_Result->sqlerrd[e] = sqlerrd[e];
- }
-
- } else {
- /* ##
- ## SELECT-STATEMENT
- ##
- */
- ctype = 0; /* preset */
-
- switch (argc) {
- case 2:
- break;
- case 3:
- if (zend_get_parameters_ex(3, &dummy, &dummy, &cursortype) == FAILURE) {
- RETURN_FALSE;
- }
- convert_to_long_ex(cursortype);
- ctype = Z_LVAL_PP(cursortype);
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
-
- Ifx_Result->iscursory = 1;
-
- Ifx_Result->affected_rows = affected_rows; /* saved estimated from prepare */
- for (e = 0; e < 6; e++) {
- Ifx_Result->sqlerrd[e] = sqlerrd[e];
- }
-
- EXEC SQL GET DESCRIPTOR :descrpid :fieldcount = COUNT;
- if (ifx_check() < 0) {
- char *ifx_err;
- IFXG(sv_sqlcode) = SQLCODE;
- EXEC SQL DEALLOCATE DESCRIPTOR :descrpid;
- EXEC SQL free :statemid;
- efree(Ifx_Result);
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Can not get descriptor %s (%s)", descrpid, (ifx_err = ifx_error(ifx)));
- efree(ifx_err);
- RETURN_FALSE;
- }
- Ifx_Result->numcols = fieldcount;
- Ifx_Result->isscroll = Ifx_Result->ishold = 0;
-
- if (ctype & IFX_SCROLL) {
- Ifx_Result->isscroll = 1;
- }
- if (ctype & IFX_HOLD) {
- Ifx_Result->ishold = 1;
- }
- }
-
- ZEND_REGISTER_RESOURCE(return_value, Ifx_Result, le_result);
-}
-/* }}} */
-
-/* ----------------------------------------------------------------------
-** int ifx_do(int resultid)
-**
-** executes a previously prepared query or opens a cursor for it
-**
-** returns TRUE on success, false on error
-** does NOT free $resultid on error !!!
-**
-** also sets (real) affected_rows for non-select statements
-** for retrieval by ifx_affected_rows
-** ----------------------------------------------------------------------
-*/
-
-/* {{{ proto bool ifx_do(resource resultid)
- Executes a previously prepared query or opens a cursor for it */
-PHP_FUNCTION(ifx_do)
-{
- zval **result;
- IFX_RES *Ifx_Result;
-
-EXEC SQL BEGIN DECLARE SECTION;
- char *ifx; /* connection ID */
- char *cursorid; /* query cursor id */
- char *statemid; /* statement id */
- char *descrpid; /* descriptor id */
- char *i_descrpid; /* descriptor id */
- int fieldcount; /* field count */
- int i; /* field index */
- short fieldtype;
- loc_t *locator=NULL;
- int e;
-$ifdef HAVE_IFX_IUS;
- fixed binary 'blob' ifx_lo_t *slocator;
-$endif;
-EXEC SQL END DECLARE SECTION;
-
- int locind;
-
- if (ZEND_NUM_ARGS() != 1 || (zend_get_parameters_ex(1, &result) == FAILURE)) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(Ifx_Result, IFX_RES *, result, -1, "Informix Result", le_result);
-
- IFXG(sv_sqlcode) = 0;
-
- ifx = Ifx_Result->connecid;
- cursorid = Ifx_Result->cursorid;
- statemid = Ifx_Result->statemid;
- descrpid = Ifx_Result->descrpid;
- i_descrpid = Ifx_Result->i_descrpid;
- fieldcount = Ifx_Result->numcols;
-
- EXEC SQL set connection :ifx;
- PHP_IFX_CHECK_CONNECTION(ifx);
-
- if (Ifx_Result->iscursory < 0) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Resultindex %d is not a prepared query", Z_LVAL_PP(result));
- RETURN_FALSE;
- }
-
- if (Ifx_Result->iscursory == 0) { /* execute immediate */
- if (Ifx_Result->paramquery != 0) {
- EXEC SQL EXECUTE :statemid USING SQL DESCRIPTOR :i_descrpid;
- } else {
- EXEC SQL EXECUTE :statemid;
- }
- if (ifx_check() < 0) {
- char *ifx_err = ifx_error(ifx);
- IFXG(sv_sqlcode) = SQLCODE;
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Execute immediate fails: %s", ifx_err);
- efree(ifx_err);
- RETURN_FALSE;
- }
- Ifx_Result->affected_rows = sqlca.sqlerrd[2]; /* really affected */
- for (e = 0; e < 6; e++) {
- Ifx_Result->sqlerrd[e] = sqlca.sqlerrd[e];
- }
- } else { /* open cursor */
- if (Ifx_Result->isscroll) {
- if (Ifx_Result->ishold) {
- EXEC SQL DECLARE :cursorid SCROLL CURSOR WITH HOLD FOR :statemid;
- } else {
- EXEC SQL DECLARE :cursorid SCROLL CURSOR FOR :statemid;
- }
- } else {
- if (Ifx_Result->ishold) {
- EXEC SQL DECLARE :cursorid CURSOR WITH HOLD FOR :statemid;
- } else {
- EXEC SQL DECLARE :cursorid CURSOR FOR :statemid;
- }
- }
-
- if (ifx_check() < 0) {
- char *ifx_err = ifx_error(ifx);
- IFXG(sv_sqlcode) = SQLCODE;
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Declare cursor fails (%s)", ifx_err);
- efree(ifx_err);
- RETURN_FALSE;
- }
-
- EXEC SQL OPEN :cursorid;
- if (ifx_check() < 0) {
- char *ifx_err = ifx_error(ifx);
- IFXG(sv_sqlcode) = SQLCODE;
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Open cursor fails (%s)", ifx_err);
- efree(ifx_err);
- RETURN_FALSE;
- }
-
- /* check for text/blob columns */
- locind = 0;
- for (i = 1; i <= fieldcount; ++i) {
- EXEC SQL GET DESCRIPTOR :descrpid VALUE :i :fieldtype = TYPE;
- if ((fieldtype == SQLTEXT) || (fieldtype == SQLBYTES)
-$ifdef HAVE_IFX_IUS;
- || (fieldtype == SQLUDTFIXED)
-$endif;
- ) {
-
- int bid = 0;
- if (fieldtype == SQLTEXT) {
- if (IFXG(blobinfile) == 0) {
- bid = php_intifx_create_blob(TYPE_BLTEXT,BLMODE_INMEM, "", -1, &EG(regular_list) TSRMLS_CC);
- locator = php_intifx_get_blobloc(bid, &EG(regular_list) TSRMLS_CC);
- } else {
- bid = php_intifx_create_blob(TYPE_BLTEXT,BLMODE_INFILE, "", -1, &EG(regular_list) TSRMLS_CC);
- locator = php_intifx_get_blobloc(bid, &EG(regular_list) TSRMLS_CC);
- }
-
- EXEC SQL SET DESCRIPTOR :descrpid VALUE :i DATA = :*locator;
- }
- else if (fieldtype == SQLBYTES) {
- if (IFXG(blobinfile) == 0) {
- bid = php_intifx_create_blob(TYPE_BLBYTE,BLMODE_INMEM, "", -1, &EG(regular_list) TSRMLS_CC);
- locator = php_intifx_get_blobloc(bid, &EG(regular_list) TSRMLS_CC);
- } else {
- bid = php_intifx_create_blob(TYPE_BLBYTE,BLMODE_INFILE, "", -1, &EG(regular_list) TSRMLS_CC);
- locator = php_intifx_get_blobloc(bid, &EG(regular_list) TSRMLS_CC);
- locator->loc_oflags = LOC_WONLY;
- }
- EXEC SQL SET DESCRIPTOR :descrpid VALUE :i DATA = :*locator;
- }
-
- php_intifx_release_blob(locator TSRMLS_CC);
-$ifdef HAVE_IFX_IUS;
- if (fieldtype == SQLUDTFIXED) {
- bid = php_intifxus_new_slob(&EG(regular_list) TSRMLS_CC);
- slocator = php_intifxus_get_slobloc(bid, &EG(regular_list) TSRMLS_CC);
- EXEC SQL SET DESCRIPTOR :descrpid VALUE :i DATA = :*slocator;
- }
-$endif;
- Ifx_Result->res_id[locind] = bid;
- ++locind;
- }
- }
- } /* end open cursor */
- RETURN_TRUE;
-}
-/* }}} */
-
-/* ----------------------------------------------------------------------
-** string ifx_error([int connection_id]);
-**
-** returns the Informix error codes (SQLSTATE & SQLCODE)
-**
-** connection id is not checked, but remains for compatibility
-** ----------------------------------------------------------------------
-*/
-
-/* {{{ proto string ifx_error([resource connection_id])
- Returns the Informix error codes (SQLSTATE & SQLCODE) */
-PHP_FUNCTION(ifx_error)
-{
- zval **ifx_link;
- int id;
-
- switch(ZEND_NUM_ARGS()) {
- case 0:
- id = IFXG(default_link);
- break;
- case 1:
- if (zend_get_parameters_ex(1, &ifx_link) == FAILURE) {
- RETURN_FALSE;
- }
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
-
- RETURN_STRING(ifx_error(0), 0); /* ifx_error returns emalloced string */
-}
-/* }}} */
-
-/* ----------------------------------------------------------------------
-** string ifx_errormsg([int errorcode])
-**
-** returns the Informix errormessage associated with
-** the most recent Informix error if SQLCODE is nonzero, or,
-** when the optional "errocode" param is present, the errormessage
-** corresponding to "errorcode".
-** ----------------------------------------------------------------------
-*/
-
-/* {{{ proto string ifx_errormsg([int errorcode])
- Returns the Informix errormessage associated with */
-PHP_FUNCTION(ifx_errormsg)
-{
- zval **errcode;
- int ifx_errorcode;
- int msglen, maxmsglen;
- char *ifx_errmsg;
- char * returnmsg;
-
- switch(ZEND_NUM_ARGS()) {
- case 0:
- if (IFXG(sv_sqlcode) == 0) {
- ifx_errorcode = SQLCODE;
- } else {
- ifx_errorcode = IFXG(sv_sqlcode);
- }
- break;
- case 1:
- if (zend_get_parameters_ex(1, &errcode) == FAILURE) {
- RETURN_FALSE;
- }
- convert_to_long_ex(errcode);
- ifx_errorcode = Z_LVAL_PP(errcode);
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
-
- maxmsglen = 255;
- msglen = maxmsglen; /* Some bug fix, rgetlmsg doesnt always set the value */
- ifx_errmsg = (char *)emalloc(maxmsglen + 1);
- if (ifx_errorcode != 0) {
- rgetlmsg(ifx_errorcode, ifx_errmsg, maxmsglen, &msglen);
- if (msglen > maxmsglen) {
- maxmsglen = msglen;
- ifx_errmsg = (char *)erealloc(ifx_errmsg, maxmsglen + 1);
- rgetlmsg(ifx_errorcode, ifx_errmsg, maxmsglen, &msglen);
- }
- } else {
- ifx_errmsg[0] = 0;
- }
-
- returnmsg = (char *) emalloc(strlen(ifx_errmsg) + 128);
- sprintf(returnmsg, ifx_errmsg, sqlca.sqlerrm);
- efree(ifx_errmsg);
- RETURN_STRING(returnmsg,0);
-}
-/* }}} */
-
-/* --------------------------------------------------------------
-** int ifx_affected_rows(int resultid)
-**
-** returns the number of rows affected by query $resultid
-**
-** for selects : estimated number of rows (sqlerrd[0])
-** for insert/update/delete : real number (sqlerrd[2])
-** ---------------------------------------------------------------
-*/
-
-/* {{{ proto int ifx_affected_rows(resource resultid)
- Returns the number of rows affected by query identified by resultid */
-PHP_FUNCTION(ifx_affected_rows)
-{
- zval **result;
- IFX_RES *Ifx_Result;
-
- if (ZEND_NUM_ARGS() != 1 || (zend_get_parameters_ex(1, &result)) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- IFXG(sv_sqlcode) = 0;
-
- ZEND_FETCH_RESOURCE(Ifx_Result, IFX_RES *, result, -1, "Informix Result", le_result);
- RETURN_LONG(Ifx_Result->affected_rows);
-}
-/* }}} */
-
-/* ----------------------------------------------------------------------
-** array ifx_fetch_row(int resultid [, mixed $position])
-**
-** fetches the next row, or if using a scroll cursor, and position
-** is present, the row as given in position, into an associative
-** array with the fieldnames as key
-**
-** returns FALSE on error
-**
-** position can be : "FIRST", "NEXT", "LAST", "PREVIOUS", "CURRENT"
-** or an absolute row number
-** ----------------------------------------------------------------------
-*/
-
-/* {{{ proto array ifx_fetch_row(resource resultid [, mixed position])
- Fetches the next row or <position> row if using a scroll cursor */
-PHP_FUNCTION(ifx_fetch_row)
-{
- zval **result, **position;
- IFX_RES *Ifx_Result;
-
-EXEC SQL BEGIN DECLARE SECTION;
- char *ifx; /* connection ID */
- char *cursorid; /* query cursor id */
- char *statemid; /* statement id */
- char *descrpid; /* descriptor id */
- int fieldcount; /* field count */
- int i; /* an index */
- char fieldname[64]; /* fieldname */
- short fieldtype; /* field type */
- int fieldleng; /* field length */
-$ifdef HAVE_IFX_IUS;
- ifx_int8_t int8_var;
- lvarchar *lvar_tmp;
-$endif;
- short indicator;
- int int_data;
- char *char_data;
- long date_data;
- interval intvl_data = {0};
- datetime dt_data = {0};
- decimal dec_data = {0};
- short short_data;
- loc_t *locator_b;
-$ifdef HAVE_IFX_IUS;
- fixed binary 'blob' ifx_lo_t *slocator;
-$endif;
- float float_data;
- double double_data;
- int fetch_row;
-EXEC SQL END DECLARE SECTION;
-
- int num_fields;
- int locind,bid,bid_b;
- char string_data[256];
- long long_data;
- char *p;
- char *fetch_pos;
- char *nullstr;
-
- switch (ZEND_NUM_ARGS()) {
- case 1:
- if (zend_get_parameters_ex(1, &result) == FAILURE) {
- RETURN_FALSE;
- }
- fetch_pos = NULL;
- fetch_row = 0;
- break;
- case 2:
- if (zend_get_parameters_ex(2, &result, &position) == FAILURE) {
- RETURN_FALSE;
- }
- if (Z_TYPE_PP(position) != IS_STRING) {
- fetch_pos = NULL;
- fetch_row = Z_LVAL_PP(position);
- } else {
- fetch_pos = Z_STRVAL_PP(position);
- fetch_row = 0;
- }
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
-
- ZEND_FETCH_RESOURCE(Ifx_Result, IFX_RES *, result, -1, "Informix Result", le_result);
-
- nullstr = php_intifx_null(TSRMLS_C);
- IFXG(sv_sqlcode) = 0;
-
- if (strcmp(Ifx_Result->cursorid, "") == 0) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Not a select cursor!");
- RETURN_FALSE;
- }
-
- ifx = Ifx_Result->connecid;
- cursorid = Ifx_Result->cursorid;
- statemid = Ifx_Result->statemid;
- descrpid = Ifx_Result->descrpid;
- fieldcount = Ifx_Result->numcols;
-
- EXEC SQL set connection :ifx;
- PHP_IFX_CHECK_CONNECTION(ifx);
-
- locind = 0;
- for (i = 1; i <= Ifx_Result->numcols; i++) {
-
- EXEC SQL GET DESCRIPTOR :descrpid VALUE :i :fieldtype = TYPE;
- if (fieldtype == SQLBYTES || fieldtype == SQLTEXT) {
-
- bid_b = Ifx_Result->res_id[locind];
-
- if ((locator_b = php_intifx_get_blobloc(bid_b, &EG(regular_list) TSRMLS_CC)) == NULL) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Cant get BLOB from Result Set!");
- RETURN_FALSE;
- }
-
- locind++;
-
- if (IFXG(blobinfile) == 0) {
- php_intifx_init_blob(locator_b, BLMODE_INMEM, 1 TSRMLS_CC);
- } else {
- php_intifx_init_blob(locator_b, BLMODE_INFILE, 1 TSRMLS_CC);
- }
-
- EXEC SQL SET DESCRIPTOR :descrpid VALUE :i DATA = :*locator_b;
-
- }
- }
-
- if (!Ifx_Result->isscroll) {
- EXEC SQL FETCH :cursorid USING SQL DESCRIPTOR :descrpid;
- } else {
- if (fetch_pos == NULL) {
- if (fetch_row != 0) {
- EXEC SQL FETCH ABSOLUTE :fetch_row :cursorid USING SQL DESCRIPTOR :descrpid;
- } else {
- EXEC SQL FETCH NEXT :cursorid USING SQL DESCRIPTOR :descrpid;
- }
- } else {
- if (!strcasecmp(fetch_pos, "NEXT")) {
- EXEC SQL FETCH NEXT :cursorid USING SQL DESCRIPTOR :descrpid;
- } else if (!strcasecmp(fetch_pos, "PREVIOUS")) {
- EXEC SQL FETCH PREVIOUS :cursorid USING SQL DESCRIPTOR :descrpid;
- } else if (!strcasecmp(fetch_pos, "FIRST")) {
- EXEC SQL FETCH FIRST :cursorid USING SQL DESCRIPTOR :descrpid;
- } else if (!strcasecmp(fetch_pos, "LAST")) {
- EXEC SQL FETCH LAST :cursorid USING SQL DESCRIPTOR :descrpid;
- } else if (!strcasecmp(fetch_pos, "CURRENT")) {
- EXEC SQL FETCH CURRENT :cursorid USING SQL DESCRIPTOR :descrpid;
- } else {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid positioning arg on fetch");
- }
- }
- }
-
- if (SQLCODE != -451) {
- switch (ifx_check()) {
- case IFX_ERROR:
- IFXG(sv_sqlcode) = SQLCODE;
- {
- char *ifx_err = ifx_error(ifx);
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Can not fetch row on cursor %s (%s)", ifx_err, cursorid);
- efree(ifx_err);
- RETURN_FALSE;
- }
- break;
- case IFX_NODATA:
- RETURN_FALSE;
- break;
- default:
- break;
- }
- }
- Ifx_Result->rowid++;
-
- array_init(return_value);
- num_fields = fieldcount;
-
- locind = 0;
- for (i = 1; i <= num_fields; i++) {
- EXEC SQL GET DESCRIPTOR :descrpid VALUE :i
- :fieldtype = TYPE,
- :fieldname = NAME,
- :fieldleng = LENGTH,
- :indicator = INDICATOR;
-
- if (ifx_check() < 0) {
- char *ifx_err = ifx_error(ifx);
- IFXG(sv_sqlcode) = SQLCODE;
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Get descriptor (field # %d) fails (%s)", i, ifx_err);
- efree(ifx_err);
- RETURN_FALSE;
- }
-
- p = fieldname; /* rtrim fieldname */
- while ((*p != ' ') && (p < &fieldname[sizeof(fieldname) - 1])) ++p;
- *p = 0;
- if (strcmp("(expression)", fieldname) == 0) { /* stored proc */
- sprintf(fieldname, "[Expr_%d]", i);
- }
-
- if (indicator == -1) { /* NULL */
- if ((IFXG(textasvarchar) == 0 && fieldtype == SQLTEXT) ||
- (IFXG(byteasvarchar) == 0 && fieldtype == SQLBYTES)) {
- bid_b = Ifx_Result->res_id[locind];
- /* call php_intifx_get_blobloc() to reset locator_b */
- locator_b = php_intifx_get_blobloc(bid_b, &EG(regular_list) TSRMLS_CC);
- bid = php_intifx_copy_blob(bid_b, &EG(regular_list) TSRMLS_CC);
- php_intifx_update_blob(bid,nullstr, strlen(nullstr), &EG(regular_list) TSRMLS_CC);
- add_assoc_long(return_value, fieldname, bid);
- ++locind;
- php_intifx_release_blob(locator_b TSRMLS_CC);
- continue;
- }
- if ((fieldtype == SQLTEXT) || (fieldtype == SQLBYTES)
-$ifdef HAVE_IFX_IUS;
- || (fieldtype == SQLUDTFIXED)
-$endif;
- ) {
- /* call php_intifx_get_blobloc() to reset locator_b */
- bid_b = Ifx_Result->res_id[locind];
- locator_b = php_intifx_get_blobloc(bid_b, &EG(regular_list) TSRMLS_CC);
- ++locind;
- php_intifx_release_blob(locator_b TSRMLS_CC);
- }
- add_assoc_string(return_value, fieldname, nullstr, DUP);
- continue;
- } /* NULL */
-
- switch (fieldtype) {
- case SQLSERIAL:
- case SQLINT:
- EXEC SQL GET DESCRIPTOR :descrpid VALUE :i :int_data = DATA;
- long_data = int_data;
- sprintf(string_data, "%ld", long_data);
- add_assoc_string(return_value, fieldname, string_data, DUP);
- break;
- case SQLSMINT:
- EXEC SQL GET DESCRIPTOR :descrpid VALUE :i :short_data = DATA;
- long_data = short_data;
- sprintf(string_data, "%ld", long_data);
- add_assoc_string(return_value, fieldname, string_data, DUP);
- break;
- case SQLDECIMAL:
- case SQLMONEY:
- EXEC SQL GET DESCRIPTOR :descrpid VALUE :i :dec_data = DATA;
- memset(string_data, 0x20, 64);
- dectoasc(&dec_data, string_data, 63, -1);
- for (p = string_data; *p != ' '; ++p) ;
- *p = 0;
- add_assoc_string(return_value, fieldname, string_data, DUP);
- break;
- case SQLSMFLOAT:
- EXEC SQL GET DESCRIPTOR :descrpid VALUE :i :float_data = DATA;
- double_data = float_data;
- sprintf(string_data, "%17.17g", double_data);
- add_assoc_string(return_value, fieldname, string_data, DUP);
- break;
- case SQLFLOAT:
- EXEC SQL GET DESCRIPTOR :descrpid VALUE :i :double_data = DATA;
- sprintf(string_data, "%17.17g", double_data);
- add_assoc_string(return_value, fieldname, string_data, DUP);
- break;
- case SQLDATE:
- EXEC SQL GET DESCRIPTOR :descrpid VALUE :i :date_data = DATA;
- rdatestr(date_data, string_data);
- add_assoc_string(return_value, fieldname, string_data, DUP);
- break;
- case SQLDTIME:
- EXEC SQL GET DESCRIPTOR :descrpid VALUE :i :dt_data = DATA;
- dttoasc(&dt_data, string_data);
- add_assoc_string(return_value, fieldname, string_data, DUP);
- break;
- case SQLINTERVAL:
- EXEC SQL GET DESCRIPTOR :descrpid VALUE :i :intvl_data = DATA;
- intoasc(&intvl_data, string_data);
- add_assoc_string(return_value, fieldname, string_data, DUP);
- break;
-$ifdef HAVE_IFX_IUS;
- case SQLSERIAL8:
- case SQLINT8:
- EXEC SQL GET DESCRIPTOR :descrpid VALUE :i :int8_var = DATA;
- memset(string_data, ' ', sizeof(string_data));
- ifx_int8toasc(&int8_var, string_data, 200);
- p = string_data; /* rtrim string_data */
- while ((*p != ' ') && (p < &string_data[sizeof(string_data) - 1])) ++p;
- *p = 0;
- add_assoc_string(return_value, fieldname, string_data, DUP);
- break;
- case SQLLVARCHAR:
- ifx_var_flag(&lvar_tmp, 1);
- EXEC SQL GET DESCRIPTOR :descrpid VALUE :i :lvar_tmp = DATA;
- fieldleng = ifx_var_getlen(&lvar_tmp);
- if (fieldleng > 2) { /* fix by Alex Shepherd */
- fieldleng -= 2;
- }
- if ((char_data = (char *)emalloc(fieldleng + 1)) == NULL) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Out of memory");
- RETURN_FALSE;
- }
- memcpy(char_data, ifx_var_getdata(&lvar_tmp), fieldleng);
- ifx_var_dealloc(&lvar_tmp);
- add_assoc_stringl(return_value, fieldname, char_data, fieldleng, 0);
- break;
- case SQLBOOL:
-$endif;
- case SQLVCHAR:
- case SQLNVCHAR:
- case SQLCHAR:
- case SQLNCHAR:
- if ((char_data = (char *)emalloc(fieldleng + 1)) == NULL) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Out of memory");
- RETURN_FALSE;
- }
- EXEC SQL GET DESCRIPTOR :descrpid VALUE :i :char_data = DATA;
- if (IFXG(charasvarchar) != 0 && (fieldtype == SQLCHAR || fieldtype == SQLNCHAR)) {
- ldchar(char_data, fieldleng, char_data);
- }
- add_assoc_string(return_value, fieldname, char_data, DUP);
- efree(char_data);
- char_data = NULL;
- break;
-$ifdef HAVE_IFX_IUS;
- case SQLUDTFIXED:
- bid_b = Ifx_Result->res_id[locind];
- add_assoc_long(return_value, fieldname,bid_b);
- bid = php_intifxus_new_slob(&EG(regular_list) TSRMLS_CC);
- slocator = php_intifxus_get_slobloc(bid, &EG(regular_list) TSRMLS_CC);
- EXEC SQL SET DESCRIPTOR :descrpid VALUE :i DATA = :*slocator;
- Ifx_Result->res_id[locind] = bid;
- ++locind;
- break;
-$endif;
- case SQLBYTES:
- case SQLTEXT:
- bid_b = Ifx_Result->res_id[locind];
- locator_b = php_intifx_get_blobloc(bid_b, &EG(regular_list) TSRMLS_CC);
- ++locind;
-
- if (IFXG(blobinfile) == 0) {
- php_intifx_init_blob(locator_b, BLMODE_INMEM, 0 TSRMLS_CC);
- } else {
- php_intifx_init_blob(locator_b, BLMODE_INFILE, 0 TSRMLS_CC);
- }
-
- EXEC SQL GET DESCRIPTOR :descrpid VALUE :i :*locator_b = DATA;
-
- /* work around for ESQL/C bug with NULL values and BLOBS */
- if ((locator_b->loc_status < 0) && (locator_b->loc_bufsize == 0)){
- locator_b->loc_indicator = -1;
- }
-
- /* normal check for NULL values */
- if (locator_b->loc_indicator == -1) {
- if ((IFXG(textasvarchar) == 0 && fieldtype == SQLTEXT) ||
- (IFXG(byteasvarchar) == 0 && fieldtype == SQLBYTES)
- ) {
- bid = php_intifx_copy_blob(bid_b, &EG(regular_list) TSRMLS_CC);
- php_intifx_update_blob(bid,nullstr, strlen(nullstr), &EG(regular_list) TSRMLS_CC);
- add_assoc_long(return_value, fieldname, bid);
- php_intifx_release_blob(locator_b TSRMLS_CC);
- break;
- }
- if ((fieldtype == SQLTEXT) || (fieldtype == SQLBYTES)
-$ifdef HAVE_IFX_IUS;
- || (fieldtype == SQLUDTFIXED)
-$endif;
- ) {
- add_assoc_string(return_value, fieldname, nullstr, DUP);
- php_intifx_release_blob(locator_b TSRMLS_CC);
- break;
- }
- }
-
- if (locator_b->loc_status < 0) { /* blob too large */
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "No memory (%d bytes) for blob", locator_b->loc_bufsize);
- RETURN_FALSE;
- }
-
- /* return blob as VARCHAR ? */
- /* note that in case of "blobinfile" */
- /* you get the file name */
- /* a new one for every row ! */
- if ((IFXG(textasvarchar) != 0 && fieldtype == SQLTEXT) ||
- (IFXG(byteasvarchar) != 0 && fieldtype == SQLBYTES)
- ) {
- char *content;
- long lg;
-
- lg = php_intifx_get_blob(bid_b, &EG(regular_list), &content TSRMLS_CC);
- if (content == NULL || lg < 0) {
- add_assoc_string(return_value, fieldname, nullstr, DUP);
- } else {
- add_assoc_stringl(return_value, fieldname, content, lg, DUP);
- }
-
- php_intifx_release_blob(locator_b TSRMLS_CC);
- break;
- }
-
- /* copy blob */
- bid = php_intifx_copy_blob(bid_b, &EG(regular_list) TSRMLS_CC);
-
- /* no, return as blob id */
- add_assoc_long(return_value, fieldname, bid);
- php_intifx_release_blob(locator_b TSRMLS_CC);
- break;
-
- default:
- sprintf(string_data, "ESQL/C : %s : unsupported field type[%d]", fieldname, fieldleng);
- add_assoc_string(return_value, fieldname, string_data, DUP);
- break;
- }
- continue;
- }
-}
-/* }}} */
-
-/* ----------------------------------------------------------------------
-** int ifx_htmltbl_result(int resultid [, string htmltableoptions])
-**
-** formats all rows of the resultid query into a html table
-** the optional second argument is a string of <table> tag options
-**
-** returns the number of rows printed or FALSE on error
-** ----------------------------------------------------------------------
-*/
-
-/* {{{ proto int ifx_htmltbl_result(resource resultid [, string htmltableoptions])
- Formats all rows of the resultid query into a html table */
-PHP_FUNCTION(ifx_htmltbl_result)
-{
- zval **result, **arg2;
- IFX_RES *Ifx_Result;
-
-EXEC SQL BEGIN DECLARE SECTION;
- char *ifx; /* connection ID */
- char *cursorid; /* query cursor id */
- char *statemid; /* statement id */
- char *descrpid; /* descriptor id */
- int fieldcount; /* field count */
- int i; /* an index */
- char fieldname[64]; /* fieldname */
- short fieldtype; /* field type */
- int fieldleng; /* field length */
-$ifdef HAVE_IFX_IUS;
- ifx_int8_t int8_var;
- lvarchar *lvar_tmp;
-$endif;
- short indicator;
- int int_data;
- char *char_data = NULL;
- long date_data;
- interval intvl_data = {0};
- datetime dt_data = {0};
- decimal dec_data = {0};
- short short_data;
- float float_data;
- double double_data;
- loc_t *locator_b;
-EXEC SQL END DECLARE SECTION;
-
- char *content;
- char *copy_content;
- long lg;
- char *nullstr;
- int num_fields;
- char string_data[256];
- long long_data;
- char *p;
- int locind,bid_b;
- char *table_options;
- int moredata;
-
- switch (ZEND_NUM_ARGS()) {
- case 1:
- if (zend_get_parameters_ex(1, &result) == FAILURE) {
- RETURN_FALSE;
- }
- table_options = NULL;
- break;
- case 2:
- if (zend_get_parameters_ex(2, &result, &arg2) == FAILURE) {
- RETURN_FALSE;
- }
- table_options = (*arg2)->value.str.val;
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
-
- IFXG(sv_sqlcode) = 0;
-
- ZEND_FETCH_RESOURCE(Ifx_Result, IFX_RES *, result, -1, "Informix Result", le_result);
-
- if (strcmp(Ifx_Result->cursorid, "") == 0) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Not a select cursor!");
- RETURN_FALSE;
- }
-
- ifx = Ifx_Result->connecid;
- cursorid = Ifx_Result->cursorid;
- statemid = Ifx_Result->statemid;
- descrpid = Ifx_Result->descrpid;
- fieldcount = Ifx_Result->numcols;
-
- EXEC SQL set connection :ifx;
- PHP_IFX_CHECK_CONNECTION(ifx);
-
- /* try to fetch the first row */
- EXEC SQL FETCH :cursorid USING SQL DESCRIPTOR :descrpid;
- switch (ifx_check()) {
- case IFX_ERROR:
- IFXG(sv_sqlcode) = SQLCODE;
- {
- char *ifx_err = ifx_error(ifx);
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Can not fetch next row on cursor %s (%s)", ifx_err, cursorid);
- efree(ifx_err);
- }
- RETURN_FALSE;
- break;
- case IFX_NODATA:
- moredata = 0;
- break;
- default:
- Ifx_Result->rowid = moredata = 1;
- break;
- }
-
- if (!moredata) {
- php_printf("<h2>No rows found</h2>\n");
- RETURN_LONG(0);
- }
- num_fields = fieldcount;
- nullstr = php_intifx_null(TSRMLS_C);
-
- /* start table tag */
- if (table_options == NULL) {
- php_printf("<table><tr>");
- } else {
- php_printf("<table %s><tr>", table_options);
- }
-
- /* table headings */
- for (i = 1; i <= num_fields; i++) {
- EXEC SQL GET DESCRIPTOR :descrpid VALUE :i :fieldname = NAME;
- if (ifx_check() < 0) {
- char *ifx_err = ifx_error(ifx);
- IFXG(sv_sqlcode) = SQLCODE;
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Get descriptor (field # %d) fails (%s)", i, ifx_err);
- efree(ifx_err);
- RETURN_FALSE;
- }
-
- p = fieldname; /* Capitalize and rtrim fieldname */
- *p = toupper(*p);
- while ((*p != ' ') && (p < &fieldname[sizeof(fieldname) - 1])) ++p;
- *p = 0;
- if (strcmp("(expression)", fieldname) == 0) { /* stored proc */
- sprintf(fieldname, "[Expr_%d]", i);
- }
- php_printf("<th>%s</th>", fieldname);
- }
- php_printf("</tr>\n");
-
- /* start spitting out rows untill none left */
- while (moredata) {
- php_printf("<tr>");
- locind = 0;
- for (i = 1; i <= num_fields; i++) {
- EXEC SQL GET DESCRIPTOR :descrpid VALUE :i
- :fieldtype = TYPE,
- :fieldleng = LENGTH,
- :indicator = INDICATOR;
-
- if (ifx_check() < 0) {
- char *ifx_err = ifx_error(ifx);
- IFXG(sv_sqlcode) = SQLCODE;
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Get descriptor (field # %d) fails (%s)", i, ifx_err);
- efree(ifx_err);
- RETURN_FALSE;
- }
-
- if (indicator == -1) { /* NULL */
- if (fieldtype == SQLTEXT || fieldtype == SQLBYTES) {
- ++locind;
- }
- php_printf("<td>%s</td>", nullstr);
- continue;
- }
-
- switch (fieldtype) {
- case SQLSERIAL:
- case SQLINT:
- EXEC SQL GET DESCRIPTOR :descrpid VALUE :i :int_data = DATA;
- long_data = int_data;
- sprintf(string_data, "%ld", long_data);
- php_printf("<td>%s</td>", string_data);
- break;
- case SQLSMINT:
- EXEC SQL GET DESCRIPTOR :descrpid VALUE :i :short_data = DATA;
- long_data = short_data;
- sprintf(string_data, "%ld", long_data);
- php_printf("<td>%s</td>", string_data);
- break;
- case SQLDECIMAL:
- case SQLMONEY:
- EXEC SQL GET DESCRIPTOR :descrpid VALUE :i :dec_data = DATA;
- memset(string_data, 0x20, 64);
- dectoasc(&dec_data, string_data, 63, -1);
- for (p = string_data; *p != ' '; ++p) ;
- *p = 0;
- php_printf("<td>%s</td>", string_data);
- break;
- case SQLSMFLOAT:
- EXEC SQL GET DESCRIPTOR :descrpid VALUE :i :float_data = DATA;
- double_data = float_data;
- sprintf(string_data, "%17.17g", double_data);
- php_printf("<td>%s</td>", string_data);
- break;
- case SQLFLOAT:
- EXEC SQL GET DESCRIPTOR :descrpid VALUE :i :double_data = DATA;
- sprintf(string_data, "%17.17g", double_data);
- php_printf("<td>%s</td>", string_data);
- break;
- case SQLDATE:
- EXEC SQL GET DESCRIPTOR :descrpid VALUE :i :date_data = DATA;
- rdatestr(date_data, string_data);
- php_printf("<td>%s</td>", string_data);
- break;
- case SQLDTIME:
- EXEC SQL GET DESCRIPTOR :descrpid VALUE :i :dt_data = DATA;
- dttoasc(&dt_data, string_data);
- php_printf("<td>%s</td>", string_data);
- break;
- case SQLINTERVAL:
- EXEC SQL GET DESCRIPTOR :descrpid VALUE :i :intvl_data = DATA;
- intoasc(&intvl_data, string_data);
- php_printf("<td>%s</td>", string_data);
- break;
-$ifdef HAVE_IFX_IUS;
- case SQLSERIAL8:
- case SQLINT8:
- EXEC SQL GET DESCRIPTOR :descrpid VALUE :i :int8_var = DATA;
- memset(string_data, ' ', sizeof(string_data));
- ifx_int8toasc(&int8_var, string_data, 200);
- p = string_data; /* rtrim string_data */
- while ((*p != ' ') && (p < &string_data[sizeof(string_data) - 1])) ++p;
- *p = 0;
- php_printf("<td>%s</td>", string_data);
- break;
- case SQLLVARCHAR:
- ifx_var_flag(&lvar_tmp, 1);
- EXEC SQL GET DESCRIPTOR :descrpid VALUE :i :lvar_tmp = DATA;
- fieldleng = ifx_var_getlen(&lvar_tmp);
- if (fieldleng > 2) { /* fix by Alex Shepherd */
- fieldleng -= 2;
- }
- if ((char_data = (char *)emalloc(fieldleng + 1)) == NULL) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Out of memory");
- RETURN_FALSE;
- }
- memcpy(char_data, ifx_var_getdata(&lvar_tmp), fieldleng);
- ifx_var_dealloc(&lvar_tmp);
- add_assoc_stringl(return_value, fieldname, char_data, fieldleng, 0);
- break;
- case SQLBOOL:
-$endif;
- case SQLCHAR:
- case SQLVCHAR:
- case SQLNCHAR:
- case SQLNVCHAR:
- if ((char_data = (char *)emalloc(fieldleng + 1)) == NULL) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Out of memory");
- RETURN_FALSE;
- }
- EXEC SQL GET DESCRIPTOR :descrpid VALUE :i :char_data = DATA;
- if (IFXG(charasvarchar) != 0 && (fieldtype == SQLCHAR || fieldtype == SQLNCHAR)) {
- ldchar(char_data, fieldleng, char_data);
- }
- php_printf("<td>%s</td>", char_data);
- efree(char_data);
- char_data = NULL;
- break;
- case SQLTEXT :
- /* treated always as a long VARCHAR here */
- /* if blobinbfile, too bad */
- bid_b = Ifx_Result->res_id[locind];
- ++locind;
- locator_b = php_intifx_get_blobloc(bid_b, &EG(regular_list) TSRMLS_CC);
- EXEC SQL GET DESCRIPTOR :descrpid VALUE :i :*locator_b = DATA;
-
- /* work around for ESQL/C bug with NULL values and BLOBS */
- if ((locator_b->loc_status < 0) && (locator_b->loc_bufsize == 0)){
- locator_b->loc_indicator = -1;
- }
-
- /* normal check for NULL values */
- if (locator_b->loc_indicator == -1) {
- if ((fieldtype == SQLTEXT) || (fieldtype == SQLBYTES)
-$ifdef HAVE_IFX_IUS;
- || (fieldtype == SQLUDTFIXED)
-$endif;
- ) {
- php_printf("<td>%s</td>", nullstr);
- break;
- }
- }
- if (locator_b->loc_status < 0) { /* blob too large */
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Not enough memory (%d bytes) for blob", locator_b->loc_bufsize);
- RETURN_FALSE;
- }
-
- /* get blob contents */
- lg = php_intifx_get_blob(bid_b, &EG(regular_list), &content TSRMLS_CC);
-
- if (content == NULL || lg < 0) {
- php_printf("<td>%s</td>", nullstr);
- } else {
- /* need an extra byte for string terminator */
- copy_content = emalloc(lg + 1);
- if (copy_content == NULL) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Not enough memory for TEXT column");
- RETURN_FALSE;
- }
- memcpy(copy_content, content, lg);
- copy_content[lg] = 0;
- php_printf("<td>%s</td>", copy_content);
- efree(copy_content);
- }
- break;
-
- case SQLBYTES :
- ++locind;
- php_printf("<td>(BYTE)</td>");
- break;
- default :
- sprintf(string_data, "ESQL/C: %s : unsupported field type[%d]", fieldname, fieldleng);
- php_printf("<td>%s</td>", string_data);
- break;
- }
- continue;
- }
- php_printf("</tr>\n");
-
- /* fetch next row */
- EXEC SQL FETCH :cursorid USING SQL DESCRIPTOR :descrpid;
- switch (ifx_check()) {
- case IFX_ERROR:
- IFXG(sv_sqlcode) = SQLCODE;
- {
- char *ifx_err = ifx_error(ifx);
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Can not fetch next row on cursor %s (%s)", ifx_err, cursorid);
- efree(ifx_err);
- }
- RETURN_FALSE;
- break;
- case IFX_NODATA:
- moredata = 0;
- break;
- default:
- break;
- } /* switch() */
- Ifx_Result->rowid++;
- } /* endwhile (moredata); */
- php_printf("</table>\n");
- RETURN_LONG(Ifx_Result->rowid);
-}
-/* }}} */
-
-/* ----------------------------------------------------------------------
-** array ifx_fieldtypes(int resultid)
-**
-** returns an associative array with fieldnames as key
-** and SQL fieldtypes as data for query $resultid
-**
-** returns FALSE on error
-** ----------------------------------------------------------------------
-*/
-
-/* {{{ proto array ifx_fieldtypes(resource resultid)
- Returns an associative array with fieldnames as key for query <resultid> */
-PHP_FUNCTION(ifx_fieldtypes)
-{
- zval **result;
- IFX_RES *Ifx_Result;
-
-EXEC SQL BEGIN DECLARE SECTION;
- char *ifx; /* connection ID */
- char *cursorid; /* query cursor id */
- char *statemid; /* statement id */
- char *descrpid; /* descriptor id */
- int fieldcount; /* field count */
- int i; /* an index */
- char fieldname[64]; /* fieldname */
- short fieldtype; /* field type */
- char *char_data = NULL;
-EXEC SQL END DECLARE SECTION;
- int num_fields;
- char *p;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &result) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- IFXG(sv_sqlcode) = 0;
-
- ZEND_FETCH_RESOURCE(Ifx_Result, IFX_RES *, result, -1, "Informix Result", le_result);
-
- if (strcmp(Ifx_Result->cursorid, "") == 0) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Not a select cursor!");
- RETURN_FALSE;
- }
-
- ifx = Ifx_Result->connecid;
- cursorid = Ifx_Result->cursorid;
- statemid = Ifx_Result->statemid;
- descrpid = Ifx_Result->descrpid;
- fieldcount = Ifx_Result->numcols;
-
- EXEC SQL set connection :ifx;
- PHP_IFX_CHECK_CONNECTION(ifx);
-
- array_init(return_value);
- num_fields = fieldcount;
- for (i = 1; i <= num_fields; i++) {
- EXEC SQL GET DESCRIPTOR :descrpid VALUE :i :fieldname = NAME, :fieldtype = TYPE;
- if (ifx_check() < 0) {
- char *ifx_err = ifx_error(ifx);
- IFXG(sv_sqlcode) = SQLCODE;
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Get descriptor (field # %d) fails (%s)", i, ifx_err);
- efree(ifx_err);
- RETURN_FALSE;
- }
-
- p = fieldname; /* rtrim fieldname */
- while ((*p != ' ') && (p < &fieldname[sizeof(fieldname) - 1])) ++p;
- *p = 0;
- if (strcmp("(expression)", fieldname) == 0) { /* stored proc */
- sprintf(fieldname, "[Expr_%d]", i);
- }
-
- switch (fieldtype) {
- case SQLSERIAL:
- char_data = "SQLSERIAL";
- break;
- case SQLINT:
- char_data = "SQLINT";
- break;
- case SQLSMINT:
- char_data = "SQLSMINT";
- break;
- case SQLDECIMAL:
- char_data = "SQLDECIMAL";
- break;
- case SQLMONEY:
- char_data = "SQLMONEY";
- break;
- case SQLSMFLOAT:
- char_data = "SQLSMFLOAT";
- break;
- case SQLFLOAT:
- char_data = "SQLFLOAT";
- break;
- case SQLDATE:
- char_data = "SQLDATE";
- break;
- case SQLDTIME:
- char_data = "SQLDTIME";
- break;
- case SQLINTERVAL:
- char_data = "SQLINTERVAL";
- break;
- case SQLCHAR:
- char_data = "SQLCHAR";
- break;
- case SQLVCHAR:
- char_data = "SQLVCHAR";
- break;
- case SQLNCHAR:
- char_data = "SQLNCHAR";
- break;
- case SQLNVCHAR:
- char_data = "SQLNVCHAR";
- break;
- case SQLTEXT:
- char_data = "SQLTEXT";
- break;
- case SQLBYTES:
- char_data = "SQLBYTES";
- break;
-$ifdef HAVE_IFX_IUS;
- case SQLUDTFIXED:
- char_data = "SQLUDTFIXED";
- break;
- case SQLBOOL:
- char_data = "SQLBOOL";
- break;
- case SQLINT8:
- char_data = "SQLINT8";
- break;
- case SQLSERIAL8:
- char_data = "SQLSERIAL8";
- break;
- case SQLLVARCHAR:
- char_data = "SQLLVARCHAR";
- break;
-$endif;
- default:
- char_data = emalloc(20);
- sprintf(char_data, "ESQL/C : %i", fieldtype);
- break;
- } /* switch (fieldtype) */
-
- add_assoc_string(return_value, fieldname, char_data, DUP);
- } /* for() */
-}
-/* }}} */
-
-/* ----------------------------------------------------------------------
-** array ifx_fieldproperties(int resultid)
-**
-** returns an associative array with fieldnames as key
-** and SQL fieldproperties as data for query $resultid
-**
-** properties are encoded as : "SQLTYPE;length;precision;scale;ISNULLABLE"
-** where SQLTYPE = the Informix type like "SQLVCHAR" etc...
-** ISNULLABLE = "Y" or "N"
-**
-** returns FALSE on error
-** ----------------------------------------------------------------------
-*/
-
-/* {{{ proto array ifx_fieldproperties(resource resultid)
- Returns an associative for query <resultid> array with fieldnames as key */
-PHP_FUNCTION(ifx_fieldproperties)
-{
- zval **result;
- IFX_RES *Ifx_Result;
-
-EXEC SQL BEGIN DECLARE SECTION;
- char *ifx; /* connection ID */
- char *cursorid; /* query cursor id */
- char *statemid; /* statement id */
- char *descrpid; /* descriptor id */
- int fieldcount; /* field count */
- int i; /* an index */
- char fieldname[64]; /* fieldname */
- short fieldtype; /* field type */
- char *char_data = NULL;
- int size;
- int precision;
- int scale;
- int isnullable;
-EXEC SQL END DECLARE SECTION;
- int num_fields;
- char string_data[256];
- char *p;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &result) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- IFXG(sv_sqlcode) = 0;
-
- ZEND_FETCH_RESOURCE(Ifx_Result, IFX_RES *, result, -1, "Informix Result", le_result);
-
- if (strcmp(Ifx_Result->cursorid, "") == 0) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Not a select cursor!");
- RETURN_FALSE;
- }
-
- ifx = Ifx_Result->connecid;
- cursorid = Ifx_Result->cursorid;
- statemid = Ifx_Result->statemid;
- descrpid = Ifx_Result->descrpid;
- fieldcount = Ifx_Result->numcols;
-
- EXEC SQL set connection :ifx;
- PHP_IFX_CHECK_CONNECTION(ifx);
-
- array_init(return_value);
- num_fields = fieldcount;
-
- for (i = 1; i <= num_fields; i++) {
- EXEC SQL GET DESCRIPTOR :descrpid VALUE :i :fieldname = NAME,
- :fieldtype = TYPE,
- :size = LENGTH,
- :precision = PRECISION,
- :scale = SCALE,
- :isnullable = NULLABLE;
-
- if (ifx_check() < 0) {
- char *ifx_err = ifx_error(ifx);
- IFXG(sv_sqlcode) = SQLCODE;
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Get descriptor (field # %d) fails (%s)", i, ifx_err);
- efree(ifx_err);
- RETURN_FALSE;
- }
-
- p = fieldname; /* rtrim fieldname */
- while ((*p != ' ') && (p < &fieldname[sizeof(fieldname) - 1])) ++p;
- *p = 0;
- if (strcmp("(expression)", fieldname) == 0) { /* stored proc */
- sprintf(fieldname, "[Expr_%d]", i);
- }
-
- switch (fieldtype) {
- case SQLSERIAL:
- char_data = "SQLSERIAL";
- break;
- case SQLINT:
- char_data = "SQLINT";
- break;
- case SQLSMINT:
- char_data = "SQLSMINT";
- break;
- case SQLDECIMAL:
- char_data = "SQLDECIMAL";
- break;
- case SQLMONEY:
- char_data = "SQLMONEY";
- break;
- case SQLSMFLOAT:
- char_data = "SQLSMFLOAT";
- break;
- case SQLFLOAT:
- char_data = "SQLFLOAT";
- break;
- case SQLDATE:
- char_data = "SQLDATE";
- break;
- case SQLDTIME:
- char_data = "SQLDTIME";
- break;
- case SQLINTERVAL:
- char_data = "SQLINTERVAL";
- break;
- case SQLCHAR:
- char_data = "SQLCHAR";
- break;
- case SQLVCHAR:
- char_data = "SQLVCHAR";
- break;
- case SQLTEXT:
- char_data = "SQLTEXT";
- break;
- case SQLBYTES:
- char_data = "SQLBYTES";
- break;
- case SQLNCHAR:
- char_data = "SQLNCHAR";
- break;
- case SQLNVCHAR:
- char_data = "SQLNVCHAR";
- break;
-$ifdef HAVE_IFX_IUS;
- case SQLUDTFIXED:
- char_data = "SQLUDTFIXED";
- break;
- case SQLBOOL:
- char_data = "SQLBOOL";
- break;
- case SQLINT8:
- char_data = "SQLINT8";
- break;
- case SQLSERIAL8:
- char_data = "SQLSERIAL8";
- break;
- case SQLLVARCHAR:
- char_data = "SQLLVARCHAR";
- break;
-$endif;
- default:
- char_data = emalloc(20);
- sprintf(char_data, "ESQL/C : %i", fieldtype);
- break;
- } /* switch (fieldtype) */
-
- sprintf(string_data, "%s;%d;%d;%d;%c", char_data, size, precision, scale, (isnullable ? 'Y' : 'N'));
- add_assoc_string(return_value, fieldname, string_data, DUP);
- } /* for() */
-}
-/* }}} */
-
-/* --------------------------------------------------------------
-** int ifx_num_rows(int resultid)
-**
-** returns the number of rows already fetched for query resultid
-**
-** ---------------------------------------------------------------
-*/
-
-/* {{{ proto int ifx_num_rows(resource resultid)
- Returns the number of rows already fetched for query identified by resultid */
-PHP_FUNCTION(ifx_num_rows)
-{
- zval **result;
- IFX_RES *Ifx_Result;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &result) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- IFXG(sv_sqlcode) = 0;
-
- ZEND_FETCH_RESOURCE(Ifx_Result, IFX_RES *, result, -1, "Informix Result", le_result);
-
- RETURN_LONG(Ifx_Result->rowid);
-}
-/* }}} */
-
-/* --------------------------------------------------------------
-** int ifx_getsqlca(int resultid)
-**
-** returns the sqlerrd[] fields of the sqlca struct for query resultid
-** following the prepare (select) or execute immediate (insert/update/execute procedure)
-**
-** ---------------------------------------------------------------
-*/
-
-/* {{{ proto array ifx_getsqlca(resource resultid)
- Returns the sqlerrd[] fields of the sqlca struct for query resultid */
-PHP_FUNCTION(ifx_getsqlca)
-{
- zval **result;
- IFX_RES *Ifx_Result;
- char fieldname[16];
- int e;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &result) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- IFXG(sv_sqlcode) = 0;
-
- ZEND_FETCH_RESOURCE(Ifx_Result, IFX_RES *, result, -1, "Informix Result", le_result);
-
- /* create pseudo-row array to return */
- array_init(return_value);
-
- /* fill array with 6 fields sqlerrd0 .. sqlerrd5 */
- /* each ESQLC call saves these sqlca values */
- for (e = 0; e < 6; e++) {
- sprintf(fieldname, "sqlerrd%d", e);
- add_assoc_long(return_value, fieldname, Ifx_Result->sqlerrd[e]);
- }
-}
-/* }}} */
-
-/* ----------------------------------------------------------------------
-** int ifx_num_fields(int resultid)
-**
-** returns the number of columns in query resultid
-** or FALSE on error
-** ----------------------------------------------------------------------
-*/
-
-/* {{{ proto int ifx_num_fields(resource resultid)
- Returns the number of columns in query resultid */
-PHP_FUNCTION(ifx_num_fields)
-{
- zval **result;
- IFX_RES *Ifx_Result;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &result) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- IFXG(sv_sqlcode) = 0;
-
- ZEND_FETCH_RESOURCE(Ifx_Result, IFX_RES *, result, -1, "Informix Result", le_result);
-
- RETURN_LONG(Ifx_Result->numcols);
-}
-/* }}} */
-
-/* ----------------------------------------------------------------------
-** int ifx_free_result(int resultid)
-**
-** releases resources for query associated with resultid
-**
-** returns FALSE on error
-** ----------------------------------------------------------------------
-*/
-
-/* {{{ proto bool ifx_free_result(resource resultid)
- Releases resources for query associated with resultid */
-PHP_FUNCTION(ifx_free_result)
-{
- zval **result;
- IFX_RES *Ifx_Result;
-
-EXEC SQL BEGIN DECLARE SECTION;
- char *ifx; /* connection ID */
- char *cursorid; /* query cursor id */
- char *statemid; /* statement id */
- char *descrpid; /* descriptor id */
-EXEC SQL END DECLARE SECTION;
-
- int i;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &result) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- IFXG(sv_sqlcode = 0);
-
- ZEND_FETCH_RESOURCE(Ifx_Result, IFX_RES *, result, -1, "Informix Result", le_result);
-
- for (i = 0; i < MAX_RESID; ++i) {
- if (Ifx_Result->res_id[i] > 0) {
- zend_list_delete(Ifx_Result->res_id[i]);
- Ifx_Result->res_id[i] = -1;
- }
- }
-
- ifx = Ifx_Result->connecid;
- cursorid = Ifx_Result->cursorid;
- statemid = Ifx_Result->statemid;
- descrpid = Ifx_Result->descrpid;
-
- EXEC SQL set connection :ifx;
- PHP_IFX_CHECK_CONNECTION(ifx);
-
- EXEC SQL free :statemid;
- if (strlen(cursorid) != 0) {
- EXEC SQL CLOSE :cursorid;
- EXEC SQL FREE :cursorid;
- }
-
- EXEC SQL DEALLOCATE DESCRIPTOR :descrpid;
-
- zend_list_delete(Z_RESVAL_PP(result));
- RETURN_TRUE;
-}
-/* }}} */
-
-
-/* ----------------------------------------------------------------------
- * internal function
- * long php_intifx_getType(long id, HashTable *list)
- *
- * returns the type of an id-object
- * bid: Id of object
- * list: internal hashlist of php
- *
- * return -1 on error otherwise the type: TYPE_BLTEXT, TYPE_BLBYTE, TYPE_SLOB
- * ----------------------------------------------------------------------
-*/
-static long php_intifx_getType(long id, HashTable *list TSRMLS_DC)
-{
- IFX_IDRES *Ifx_res;
- int type;
-
- Ifx_res = (IFX_IDRES *) zend_list_find(id, &type);
- if (type != le_idresult) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "%d is not a Informix id-result index", id);
- return -1;
- }
- return Ifx_res->type;
-}
-
-/* ----------------------------------------------------------------------
-** int ifx_create_blob(int type, int mode, string param)
-**
-** creates a blob-object
-** type: 1=TEXT, 0=BYTE
-** mode: blob-object holds 0=the content in memory, 1=content in file
-** param: if mode=0: pointer to the content
-** mode=1: pointer to the filestring
-** return false on error otherwise the new Blob-Object-id
-** ----------------------------------------------------------------------
-*/
-
-/* {{{ proto int ifx_create_blob(int type, int mode, string param)
- Creates a blob-object */
-PHP_FUNCTION(ifx_create_blob)
-{
- zval **pmode, **pparam,**ptype;
- long id;
- long mode,type;
-
- if (ZEND_NUM_ARGS() != 3 || zend_get_parameters_ex(3, &ptype, &pmode, &pparam) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long_ex(pmode);
- convert_to_string_ex(pparam);
- convert_to_long_ex(ptype);
-
- type = Z_LVAL_PP(ptype);
- if (type != 0) {
- type = TYPE_BLTEXT;
- }
-
- mode = Z_LVAL_PP(pmode);
- if (mode != 0) {
- mode=BLMODE_INFILE;
- }
-
- id = php_intifx_create_blob(type, mode, Z_STRVAL_PP(pparam), Z_STRLEN_PP(pparam), &EG(regular_list) TSRMLS_CC);
-
- if (id < 0) {
- RETURN_FALSE;
- }
- RETURN_LONG(id);
-}
-/* }}} */
-
-/* ----------------------------------------------------------------------
- * internal function
- * long php_intifx_create_blob(long type, long mode, char* param, long len, HashTable *list TSRMLS_DC)
- *
- * creates an blob-object for the PHP Resource list
- * type: 1=TEXT, 0=BYTE
- * mode: blob-object holds 0=the content in momory, 1=content in file
- * param: if mode=0: pointer to the content
- * mode=1: pointer to the filestring
- * len: length of param
- * list: internal hashlist of php
- * return -1 on error otherwise the new Blob-Object-id
- * ----------------------------------------------------------------------
-*/
-static long php_intifx_create_blob(long type, long mode, char* param, long len, HashTable *list TSRMLS_DC)
-{
- IFX_IDRES *Ifx_blob;
-
- Ifx_blob=emalloc(sizeof(IFX_IDRES));
- if (Ifx_blob == NULL) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Can't create blob-resource");
- return -1;
- }
-
- memset(Ifx_blob, 0, sizeof(IFX_IDRES));
-
- if (type == 0 ) {
- Ifx_blob->type = TYPE_BLBYTE;
- } else {
- Ifx_blob->type = TYPE_BLTEXT;
- }
- Ifx_blob->BLOB.mode = (int) mode;
-
- if (php_intifx_init_blob(&Ifx_blob->BLOB.blob_data, mode, 1 TSRMLS_CC) < 0) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Can't create blob-resource");
- return -1;
- }
-
- if (mode == BLMODE_INMEM) {
- if (len >= 0) {
- char *content = emalloc(len);
- if (content == NULL) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Can't create blob-resource");
- return -1;
- }
- memcpy(content,param,len);
- Ifx_blob->BLOB.blob_data.loc_buffer = content;
- Ifx_blob->BLOB.blob_data.loc_bufsize = len;
- Ifx_blob->BLOB.blob_data.loc_size = len;
- Ifx_blob->BLOB.blob_data.loc_oflags = 0;
- }
- } else {
-
- if (*param && param != "") {
-
- /*
- * copy the filename in param to filename in loc_fname
- * otherwise we'll unlink non-temporary files
- *
- * loc_fname gets filled by php_intifx_init_blob_infile
- */
- if (Ifx_blob->BLOB.blob_data.loc_fname != NULL) {
- if (php_copy_file(param, Ifx_blob->BLOB.blob_data.loc_fname TSRMLS_CC) == FAILURE) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Could not create blob-resource file. File copy failed: %s", param);
- return -1;
- }
- Ifx_blob->BLOB.blob_data.loc_size = -1;
- }
- }
- }
-
- return zend_list_insert(Ifx_blob,le_idresult);
-}
-
-static long php_intifx_init_blob(loc_t *blob, long mode, long new TSRMLS_DC)
-{
- if (new) {
- memset(blob, 0, sizeof(loc_t));
- }
-
- blob->loc_status = 0;
- blob->loc_type = SQLTEXT;
- blob->loc_xfercount = 0;
- blob->loc_indicator = 0;
-
- if (mode == BLMODE_INMEM) {
- return php_intifx_init_blob_inmem(blob, new TSRMLS_CC);
- } else {
- return php_intifx_init_blob_infile(blob, new TSRMLS_CC);
- }
-
- return 1;
-}
-
-static long php_intifx_init_blob_inmem(loc_t *blob, long new TSRMLS_DC)
-{
- blob->loc_loctype = LOCMEMORY;
-
- if (new) {
- blob->loc_buffer = NULL;
- blob->loc_bufsize = -1;
- blob->loc_size = 0;
- }
-
- blob->loc_mflags = 0;
- blob->loc_oflags = 0;
-
- return 1;
-}
-
-static long php_intifx_init_blob_infile(loc_t *blob, long new TSRMLS_DC)
-{
- char *filename;
-
- blob->loc_loctype = LOCFNAME;
-
- if (new) {
-
- filename = php_intifx_create_tmpfile(TSRMLS_C);
-
- if (filename == NULL) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Can't create blob-resource");
- return -1;
- }
-
- blob->loc_fname = filename;
- blob->loc_size = 0;
- blob->loc_fd = -1;
- }
-
- return 1;
-}
-
-static void php_intifx_release_blob(loc_t *blob TSRMLS_DC)
-{
-
-#if IFX_VERSION < 724 /* this Informix memory leak is fixed from 7.24 on */
- /* according to the current PERL DBD::Informix */
- /* and otherwise I get segmenation violations with 7.30 */
-
- /* Not set to NULL, so function will free resources */
-#else
- /* Set to NULL so php_intifx_release_blob() doens't try to free stuff it shouldn't */
-
- if (blob->loc_loctype == LOCMEMORY) {
- blob->loc_buffer = NULL;
- }
-#endif
-
- switch (blob->loc_loctype) {
-
- case LOCMEMORY:
- if (blob->loc_buffer != NULL) {
- efree(blob->loc_buffer);
- blob->loc_buffer = NULL;
- }
- break;
-
- case LOCFNAME:
- if (blob->loc_fd >= 0) {
- close(blob->loc_fd);
- }
- blob->loc_fd = -1;
-
- if (blob->loc_fname != NULL) {
- unlink(blob->loc_fname);
- efree(blob->loc_fname);
- blob->loc_fname = NULL;
- }
- break;
-
- case LOCFILE:
- case LOCUSER:
- default:
- break;
- }
-}
-
-
-/* ----------------------------------------------------------------------
-** int ifx_copy_blob(int bid)
-**
-** duplicates the given blob-object
-** bid: Id of Blobobject
-**
-** return false on error otherwise the new Blob-Object-id
-** ----------------------------------------------------------------------
-*/
-
-/* {{{ proto int ifx_copy_blob(int bid)
- Duplicates the given blob-object */
-PHP_FUNCTION(ifx_copy_blob)
-{
- zval **pbid;
- long newid;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &pbid) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long_ex(pbid);
-
- newid = php_intifx_copy_blob(Z_LVAL_PP(pbid), &EG(regular_list) TSRMLS_CC);
-
- if (newid < 0) {
- RETURN_FALSE;
- }
- RETURN_LONG(newid);
-}
-/* }}} */
-
-/* ----------------------------------------------------------------------
- * internal function
- * long php_intifx_copy_blob(long bid, HashTable *list)
- *
- * duplicates the given blob-object in the PHP resource list
- * bid: Id of Blobobject
- * list: internal hashlist of php
- *
- * return -1 on error otherwise the new Blob-Object-id
- * ----------------------------------------------------------------------
-*/
-static long php_intifx_copy_blob(long bid, HashTable *list TSRMLS_DC)
-{
- IFX_IDRES *Ifx_blob, *Ifx_blob_orig;
- loc_t *locator, *locator_orig;
- int type;
-
- Ifx_blob_orig = (IFX_IDRES *) zend_list_find(bid, &type);
- if (type != le_idresult || !(Ifx_blob_orig->type == TYPE_BLBYTE || Ifx_blob_orig->type == TYPE_BLTEXT)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "%d is not a Informix blob-result index", bid);
- return -1;
- }
-
- Ifx_blob = emalloc(sizeof(IFX_IDRES));
- if (Ifx_blob == NULL) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Can't create blob-resource");
- return -1;
- }
-
- memset(Ifx_blob, 0, sizeof(IFX_IDRES));
-
- Ifx_blob->type = Ifx_blob_orig->type;
- Ifx_blob->BLOB.mode = Ifx_blob_orig->BLOB.mode;
-
- locator = &(Ifx_blob->BLOB.blob_data);
- locator_orig = &(Ifx_blob_orig->BLOB.blob_data);
-
- if (php_intifx_init_blob(locator, Ifx_blob->BLOB.mode, 1 TSRMLS_CC) < 0) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Can't create blob-resource");
- return -1;
- }
-
- if (Ifx_blob->BLOB.mode == BLMODE_INMEM) {
- char *content;
- if (locator_orig->loc_bufsize >= 0 && locator_orig->loc_buffer != NULL) {
- if ((content = emalloc(locator_orig->loc_bufsize)) == NULL) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Can't create blob-resource");
- return -1;
- }
- memcpy(content,locator_orig->loc_buffer, locator_orig->loc_bufsize);
- locator->loc_buffer = content;
- locator->loc_bufsize = locator_orig->loc_bufsize;
- locator->loc_size = locator_orig->loc_size;
- }
- } else { /* BLMODE_INFILE */
-
- if (locator_orig->loc_size) {
- php_copy_file(locator_orig->loc_fname, locator->loc_fname TSRMLS_CC);
- }
-
- }
-
- return zend_list_insert(Ifx_blob, le_idresult);
-}
-
-/* ----------------------------------------------------------------------
-** int ifx_free_blob(int bid)
-**
-** deletes the blob-object
-** bid: Id of Blobobject
-** return false on error otherwise true
-** ----------------------------------------------------------------------
-*/
-
-/* {{{ proto int ifx_free_blob(int bid)
- Deletes the blob-object */
-PHP_FUNCTION(ifx_free_blob)
-{
- zval **pid;
- long ret;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &pid) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long_ex(pid);
-
- ret = php_intifx_free_blob(Z_LVAL_PP(pid), &EG(regular_list) TSRMLS_CC);
- if (ret < 0) {
- RETURN_FALSE;
- }
- RETURN_TRUE;
-}
-/* }}} */
-
-/* ----------------------------------------------------------------------
- * internal function
- * long php_intifx_free_blob(long bid, HashTable *list)
- *
- * deletes the blob-object from the PHP Resource List
- * bid: Id of Blobobject
- * list: internal hashlist of php
- *
- * return -1 on error otherwise 0
- * FREES BYTE-MEMORY WITH EFREE()
- * ----------------------------------------------------------------------
-*/
-static long php_intifx_free_blob(long bid, HashTable *list TSRMLS_DC)
-{
- IFX_IDRES *Ifx_blob;
- int type;
-
- Ifx_blob = (IFX_IDRES *) zend_list_find(bid, &type);
- if (type != le_idresult && !(Ifx_blob->type == TYPE_BLTEXT || Ifx_blob->type == TYPE_BLBYTE)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "%d is not a Informix blob-result index", bid);
- return -1;
- }
-
- if (!(Ifx_blob->type == TYPE_BLTEXT || Ifx_blob->type == TYPE_BLBYTE)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "%d is not a Informix BYTE or TEXT type", bid);
- return -1;
- }
-
- zend_list_delete(bid);
-
- return 0;
-}
-
-/* ----------------------------------------------------------------------
-** string ifx_get_blob(int bid)
-**
-** returns the content of the blob-object
-** bid: Id of Blobobject
-** return the content
-** ----------------------------------------------------------------------
-*/
-
-/* {{{ proto string ifx_get_blob(int bid)
- Returns the content of the blob-object */
-PHP_FUNCTION(ifx_get_blob)
-{
- zval **pbid;
- char *content;
- long len;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &pbid) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long_ex(pbid);
-
- len = php_intifx_get_blob(Z_LVAL_PP(pbid), &EG(regular_list), &content TSRMLS_CC);
- if (content == NULL || len < 0) {
- RETURN_STRING(php_intifx_null(TSRMLS_C), 1);
- }
- RETURN_STRINGL(content, len, 1);
-}
-/* }}} */
-
-/* ----------------------------------------------------------------------
- * internal function
- * long php_intifx_get_blob(long bid, HashTable *list, char** content)
- *
- * returns the content of the blob-object
- * bid: Id of Blobobject
- * list: internal hashlist of php
- *
- * return -1 on error
- * returns the pointer to the content in char** content and the amount of content in bytes
- * ----------------------------------------------------------------------
-*/
-static long php_intifx_get_blob(long bid, HashTable *list, char** content TSRMLS_DC)
-{
- IFX_IDRES *Ifx_blob;
- int type;
-
- Ifx_blob = (IFX_IDRES *) zend_list_find(bid, &type);
- if (type != le_idresult && !(Ifx_blob->type == TYPE_BLTEXT || Ifx_blob->type == TYPE_BLBYTE)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "%d is not a Informix blob-result index", bid);
- return -1;
- }
-
- if (Ifx_blob->BLOB.mode == BLMODE_INMEM) {
- *content = Ifx_blob->BLOB.blob_data.loc_buffer;
- return Ifx_blob->BLOB.blob_data.loc_size;
- }
- *content = Ifx_blob->BLOB.blob_data.loc_fname;
- return strlen(Ifx_blob->BLOB.blob_data.loc_fname);
-}
-
-/* ----------------------------------------------------------------------
- * internal function
- * loc_t *php_intifx_get_blobloc(long bid, HashTable *list TSRMLS_DC)
- *
- * returns the blob-locator-structur
- * bid: Id of Blobobject
- * list: internal hashlist of php
- * return NULL on error or the pointer to the locator-structur
- * ----------------------------------------------------------------------
-*/
-static loc_t *php_intifx_get_blobloc(long bid, HashTable *list TSRMLS_DC)
-{
- IFX_IDRES *Ifx_blob;
- int type;
-
- Ifx_blob = (IFX_IDRES *) zend_list_find(bid, &type);
- if (type != le_idresult && !(Ifx_blob->type == TYPE_BLTEXT || Ifx_blob->type == TYPE_BLBYTE)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "%d is not a Informix blob-result index", bid);
- return NULL;
- }
- return &(Ifx_blob->BLOB.blob_data);
-}
-
-
-/* ----------------------------------------------------------------------
-** int update_blob(int bid, string content)
-**
-** updates the content of the blob-object
-** bid: Id of Blobobject
-** content: string of new data
-** return false on error otherwise true
-** ----------------------------------------------------------------------
-*/
-
-/* {{{ proto int ifx_update_blob(int bid, string content)
- Updates the content of the blob-object */
-PHP_FUNCTION(ifx_update_blob)
-{
- zval **pbid, **pparam;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &pbid, &pparam) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long_ex(pbid);
- convert_to_string_ex(pparam);
-
- if (php_intifx_update_blob(Z_LVAL_PP(pbid), Z_STRVAL_PP(pparam), Z_STRLEN_PP(pparam), &EG(regular_list) TSRMLS_CC) < 0) {
- RETURN_FALSE;
- }
- RETURN_TRUE;
-}
-/* }}} */
-
-/* ----------------------------------------------------------------------
- * internal function
- * long php_intifx_update_blob(long bid, char* param, long len, HashTable *list)
- *
- * updates the content of the blob-object
- * bid: Id of Blobobject
- * param: string of new data
- * len: length of string
- * list: internal hashlist of php
- * return nothing
- * ----------------------------------------------------------------------
-*/
-static long php_intifx_update_blob(long bid, char* param, long len, HashTable *list TSRMLS_DC)
-{
- IFX_IDRES *Ifx_blob;
- int type;
-
- Ifx_blob = (IFX_IDRES *) zend_list_find(bid, &type);
- if (type != le_idresult && !(Ifx_blob->type == TYPE_BLTEXT || Ifx_blob->type == TYPE_BLBYTE)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "%d is not a Informix blob-result index", bid);
- return -1;
- }
-
- if (Ifx_blob->BLOB.mode == BLMODE_INMEM) {
- char *content;
-
- if (Ifx_blob->BLOB.blob_data.loc_buffer != NULL) {
- efree(Ifx_blob->BLOB.blob_data.loc_buffer);
- }
- if (len >= 0) {
- if ((content = emalloc(len)) == NULL) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Can't create blob-resource");
- return -1;
- }
- memcpy(content, param, len);
- Ifx_blob->BLOB.blob_data.loc_buffer = content;
- Ifx_blob->BLOB.blob_data.loc_bufsize = len;
- Ifx_blob->BLOB.blob_data.loc_size = len;
- } else {
- Ifx_blob->BLOB.blob_data.loc_buffer = NULL;
- Ifx_blob->BLOB.blob_data.loc_bufsize = -1;
- Ifx_blob->BLOB.blob_data.loc_size = -1;
- }
- Ifx_blob->BLOB.blob_data.loc_mflags = 0;
- Ifx_blob->BLOB.blob_data.loc_oflags = 0;
- } else {
- char *filename;
-
- if (Ifx_blob->BLOB.blob_data.loc_fname != NULL) {
- efree(Ifx_blob->BLOB.blob_data.loc_fname);
- }
- if ((filename = emalloc(len + 1)) == NULL) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Can't create blob-resource");
- return -1;
- }
- memcpy(filename, param, len);
- filename[len] = 0;
- Ifx_blob->BLOB.blob_data.loc_fname = filename;
- Ifx_blob->BLOB.blob_data.loc_size = -1;
- }
- return 0;
-}
-
-/*-------------------------------------------------
- * internal function
- *
- * php_intifx_create_tmpfile(TSRMLS_D)
- * creates a temporary file to store a blob in
- *-------------------------------------------------
-*/
-static char* php_intifx_create_tmpfile(TSRMLS_D)
-{
- char filename[10];
- char *blobdir;
- char *retval;
- char *opened_path;
- FILE *fp;
-
- if ((blobdir = getenv("php_blobdir")) == NULL) {
- blobdir = ".";
- }
-
- sprintf(filename, "blb");
-
- if ((fp = php_open_temporary_file(blobdir, filename, &opened_path TSRMLS_CC))) {
- fclose(fp);
- retval = estrndup(opened_path, strlen(opened_path));
- efree(opened_path);
- } else {
- retval = NULL;
- }
- return retval;
-}
-
-/* ----------------------------------------------------------------------
- * int php_intifx_alloc_ibind(IFX_RES *Ifx_Result, int items TSRMLS_DC)
- *
- * Allocates descriptors for input parameters
- * return 0 for error. 1 for ok
- * ----------------------------------------------------------------------
-*/
-static long php_intifx_alloc_ibind(IFX_RES *Ifx_Result, int items TSRMLS_DC)
-{
- EXEC SQL BEGIN DECLARE SECTION;
- char *i_bind = Ifx_Result->i_descrpid;
- int bind_size = items;
- EXEC SQL END DECLARE SECTION;
-
- if (items > Ifx_Result->numicols) {
-
- if (Ifx_Result->numicols > 0) {
- EXEC SQL DEALLOCATE DESCRIPTOR :i_bind;
- if (ifx_check() < 0) {
- return 0;
- }
- }
-
- EXEC SQL ALLOCATE DESCRIPTOR :i_bind WITH MAX :bind_size;
- if (ifx_check() < 0) {
- return 0;
- }
-
- Ifx_Result->numicols = items;
- }
-
- return 1;
-}
-
-/* ----------------------------------------------------------------------
- * int php_intifx_preparse(char *statement TSRMLS_DC)
- *
- * Count the placeholders (?) parameters in the statement
- * return -1 for error. 0 or number of question marks
- *
- * Thanks to DBD-Informix
- *
- * ----------------------------------------------------------------------
-*/
-static long php_intifx_preparse(char *statement TSRMLS_DC)
-{
- char end_quote = '\0';
- char *src;
- char *dst;
- int idx = 0;
- int style = 0;
- int laststyle = 0;
- char ch;
-
- src = statement;
- dst = statement;
-
- while ((ch = *src++) != '\0') {
- if (ch == end_quote) {
- end_quote = '\0';
- } else if (end_quote != '\0') {
- *dst++ = ch;
- continue;
- } else if (ch == '\'' || ch == '\"') {
- end_quote = ch;
- } else if (ch == '{') {
- end_quote = '}';
- } else if (ch == '-' && *src == '-') {
- end_quote = '\n';
- }
-
- if (ch == '?') {
- /* X/Open standard */
- *dst++ = '?';
- idx++;
- style = 3;
- } else {
- /* Perhaps ':=' PL/SQL construct or dbase:table in Informix */
- /* Or it could be :2 or :22 as part of a DATETIME/INTERVAL */
- *dst++ = ch;
- continue;
- }
-
- if (laststyle && style != laststyle) {
- return -1;
- }
- laststyle = style;
- }
-
- *dst = '\0';
- return(idx);
-}
-
-/* ----------------------------------------------------------------------
- * int php_intifx_count_descriptors(char *p_statemid TSRMLS_DC)
- *
- * count the number of descriptors allocated for a certain statement
- * return 384 or number of descriptors
- * ----------------------------------------------------------------------
-*/
-static long php_intifx_count_descriptors(char *p_statemid TSRMLS_DC)
-{
- EXEC SQL BEGIN DECLARE SECTION;
- char *statemid = p_statemid;
- EXEC SQL END DECLARE SECTION;
-
- struct sqlda *s_da;
- int ret = 384;
-
- EXEC SQL DESCRIBE :statemid INTO s_da;
-
- if (ifx_check() >= 0) {
-
- ret = s_da->sqld;
-
- /*
- * Thanks to DBD-Informix
- */
-
-#if (ESQLC_VERSION >= 720 || (ESQLC_VERSION >= 501 && ESQLC_VERSION < 600))
- SqlFreeMem(s_da, SQLDA_FREE);
- } else {
- free(s_da);
-#endif
- }
-
- return ret;
-}
-
-/* ----------------------------------------------------------------------
-** void ifx_blobinfile_mode(int mode)
-**
-** sets the default blob-mode for all select-queries
-** mode=0: save Byte-Blobs in momory
-** mode=1: save Byte-Blobs in a file
-** return nothing
-** ----------------------------------------------------------------------
-*/
-
-/* {{{ proto bool ifx_blobinfile_mode(int mode)
- Sets the default blob-mode for all select-queries */
-PHP_FUNCTION(ifx_blobinfile_mode)
-{
- zval **pmode;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &pmode) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long_ex(pmode);
-
- IFXG(blobinfile) = Z_LVAL_PP(pmode);
- RETURN_TRUE;
-}
-/* }}} */
-
-/* ----------------------------------------------------------------------
-** void ifx_textasvarchar(int mode)
-**
-** sets the default text-mode for all select-queries
-** mode=0: select returns a blob-id
-** mode=1: select returns a varchar with text-content
-** return nothing
-** ----------------------------------------------------------------------
-*/
-
-/* {{{ proto bool ifx_textasvarchar(int mode)
- Sets the default text-mode for all select-queries */
-PHP_FUNCTION(ifx_textasvarchar)
-{
- zval **pmode;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &pmode) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long_ex(pmode);
-
- IFXG(textasvarchar) = Z_LVAL_PP(pmode);
- RETURN_TRUE;
-}
-/* }}} */
-
-/* ----------------------------------------------------------------------
-** void ifx_byteasvarchar(int mode)
-**
-** sets the default byte-mode for all select-queries
-** mode=0: select returns a blob-id
-** mode=1: select returns a varchar with byte-content
-** return nothing
-** ----------------------------------------------------------------------
-*/
-
-/* {{{ proto bool ifx_byteasvarchar(int mode)
- Sets the default byte-mode for all select-queries */
-PHP_FUNCTION(ifx_byteasvarchar)
-{
- zval **pmode;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &pmode) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long_ex(pmode);
-
- IFXG(byteasvarchar) = Z_LVAL_PP(pmode);
- RETURN_TRUE;
-}
-
-/* ----------------------------------------------------------------------
-** void ifx_nullformat(int mode)
-**
-** sets the default return value of a NULL-value on a fetch-row
-** mode=0: return ""
-** mode=1: return "NULL"
-** return nothing
-** ----------------------------------------------------------------------
-*/
-
-/* {{{ proto bool ifx_nullformat(int mode)
- Sets the default return value of a NULL-value on a fetch-row */
-PHP_FUNCTION(ifx_nullformat)
-{
- zval **pmode;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &pmode) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long_ex(pmode);
-
- IFXG(nullformat) = Z_LVAL_PP(pmode);
- RETURN_TRUE;
-}
-/* }}} */
-
-/* ----------------------------------------------------------------------
- * void php_intifx_null()
- *
- * return the NULL-string depending on .nullformat
- * return "" or "NULL"
- * ----------------------------------------------------------------------
-*/
-static char* php_intifx_null(TSRMLS_D)
-{
- char* tmp;
-
- if (IFXG(nullformat) == 0) {
- tmp = IFXG(nullvalue);
- } else {
- tmp = IFXG(nullstring);
- }
- return tmp;
-}
-
-/* ----------------------------------------------------------------------
-** int ifx_create_char(string param)
-**
-** creates an char-object
-** param: content
-** return false on error otherwise the new char-Object-id
-** ----------------------------------------------------------------------
-*/
-
-/* {{{ proto int ifx_create_char(string param)
- Creates a char-object */
-PHP_FUNCTION(ifx_create_char)
-{
- zval **pparam;
- long id;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &pparam) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex(pparam);
-
- id = php_intifx_create_char(Z_STRVAL_PP(pparam), Z_STRLEN_PP(pparam), &EG(regular_list) TSRMLS_CC);
-
- if (id < 0) {
- RETURN_FALSE;
- }
- RETURN_LONG(id);
-}
-/* }}} */
-
-/* ----------------------------------------------------------------------
- * internal function
- * long php_intifx_create_char(char* param, long len, HashTable *list TSRMLS_DC)
- *
- * creates an char-object
- * param: content
- * len: length of param
- * list: internal hashlist of php
- * return -1 on error otherwise the new char-Object-id
- * ----------------------------------------------------------------------
-*/
-static long php_intifx_create_char(char* param, long len, HashTable *list TSRMLS_DC)
-{
- IFX_IDRES *Ifx_char;
-
- Ifx_char = emalloc(sizeof(IFX_IDRES));
- if (Ifx_char == NULL) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Can't create char-resource");
- return -1;
- }
-
- Ifx_char->type = TYPE_CHAR;
-
- if (param == NULL || len < 0) {
- Ifx_char->CHAR.char_data = NULL;
- Ifx_char->CHAR.len = 0;
- } else {
- Ifx_char->CHAR.char_data = emalloc(len + 1);
- if (Ifx_char->CHAR.char_data == NULL) {
- efree(Ifx_char);
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Can't create char-resource");
- return -1;
- }
- memcpy(Ifx_char->CHAR.char_data, param,len);
- Ifx_char->CHAR.char_data[len] = 0;
- Ifx_char->CHAR.len = len;
- }
- return zend_list_insert(Ifx_char, le_idresult);
-}
-
-/* ----------------------------------------------------------------------
-** string ifx_get_char(int bid)
-**
-** returns the content of the char-object
-** bid: Id of charobject
-** return the content
-** ----------------------------------------------------------------------
-*/
-
-/* {{{ proto string ifx_get_char(int bid)
- Returns the content of the char-object */
-PHP_FUNCTION(ifx_get_char)
-{
- zval **pbid;
- char *content;
- long len;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &pbid) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long_ex(pbid);
-
- len = php_intifx_get_char(Z_LVAL_PP(pbid), &EG(regular_list), &content TSRMLS_CC);
- if (content == NULL || len < 0) {
- RETURN_STRING("", 1);
- }
- RETURN_STRINGL(content, len, 1);
-}
-/* }}} */
-
-/* ----------------------------------------------------------------------
- * internal function
- * long php_intifx_get_char(long bid, HashTable *list, char** content)
- *
- * returns the content of the char-object
- * bid: Id of charobject
- * list: internal hashlist of php
- *
- * return -1 on error
- * returns the pointer to the content in char** content and the amount of content in bytes
- * ----------------------------------------------------------------------
-*/
-
-static long php_intifx_get_char(long bid, HashTable *list, char** content TSRMLS_DC)
-{
- IFX_IDRES *Ifx_char;
- int type;
-
- Ifx_char = (IFX_IDRES *) zend_list_find(bid, &type);
- if (type != le_idresult && !(Ifx_char->type == TYPE_CHAR)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "%d is not a Informix char-result index", bid);
- return -1;
- }
-
- *content = Ifx_char->CHAR.char_data;
- return Ifx_char->CHAR.len;
-}
-
-/* ----------------------------------------------------------------------
-** int ifx_free_char(int bid)
-**
-** deletes the char-object
-** bid: Id of charobject
-** return false on error otherwise true
-** ----------------------------------------------------------------------
-*/
-
-/* {{{ proto bool ifx_free_char(int bid)
- Deletes the char-object */
-PHP_FUNCTION(ifx_free_char)
-{
- zval **pid;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &pid) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long_ex(pid);
-
- if (php_intifx_free_char(Z_LVAL_PP(pid), &EG(regular_list) TSRMLS_CC) < 0) {
- RETURN_FALSE;
- }
- RETURN_TRUE;
-}
-/* }}} */
-
-/* ----------------------------------------------------------------------
- * internal function
- * long php_intifx_free_char(long bid, HashTable *list TSRMLS_DC)
- *
- * deletes the char-object
- * bid: Id of Charobject
- * list: internal hashlist of php
- *
- * return -1 on error otherwise 0
- * ----------------------------------------------------------------------
-*/
-static long php_intifx_free_char(long bid, HashTable *list TSRMLS_DC)
-{
- IFX_IDRES *Ifx_char;
- int type;
-
- Ifx_char = (IFX_IDRES *) zend_list_find(bid, &type);
- if (type != le_idresult && !(Ifx_char->type == TYPE_CHAR)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "%d is not a Informix char-result index", bid);
- return -1;
- }
-
- if (Ifx_char->CHAR.char_data != NULL) {
- efree(Ifx_char->CHAR.char_data);
- }
- zend_list_delete(bid);
- efree(Ifx_char);
- return 0;
-}
-
-/* ----------------------------------------------------------------------
-** int ifx_update_char(int bid, string content)
-**
-** updates the content of the char-object
-** bid: Id of charobject
-** content: string of new data
-** return false on error otherwise true
-** ----------------------------------------------------------------------
-*/
-
-/* {{{ proto bool ifx_update_char(int bid, string content)
- Updates the content of the char-object */
-PHP_FUNCTION(ifx_update_char)
-{
- zval **pbid, **pparam;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &pbid, &pparam) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long_ex(pbid);
- convert_to_string_ex(pparam);
-
- if (php_intifx_update_char(Z_LVAL_PP(pbid), Z_STRVAL_PP(pparam), Z_STRLEN_PP(pparam), &EG(regular_list) TSRMLS_CC) < 0) {
- RETURN_FALSE;
- }
- RETURN_TRUE;
-}
-/* }}} */
-
-/* ----------------------------------------------------------------------
- * internal function
- * long php_intifx_update_char(long bid, char* param, long len, HashTable *list)
- *
- * updates the content of the char-object
- * bid: Id of charobject
- * param: string of new data
- * len: length of string
- * list: internal hashlist of php
- * return nothing
- * ----------------------------------------------------------------------
-*/
-static long php_intifx_update_char(long bid, char* param, long len, HashTable *list TSRMLS_DC)
-{
- IFX_IDRES *Ifx_char;
- int type;
-
- Ifx_char = (IFX_IDRES *) zend_list_find(bid, &type);
- if (type != le_idresult && !(Ifx_char->type == TYPE_CHAR)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "%d is not a Informix char-result index", bid);
- return -1;
- }
-
- if (Ifx_char->CHAR.char_data != NULL) {
- efree(Ifx_char->CHAR.char_data);
- }
- Ifx_char->CHAR.char_data = NULL;
- Ifx_char->CHAR.len = 0;
-
- if (param == NULL || len < 0) {
- Ifx_char->CHAR.char_data = NULL;
- Ifx_char->CHAR.len = 0;
- } else {
- Ifx_char->CHAR.char_data = emalloc(len + 1);
- if (Ifx_char->CHAR.char_data == NULL) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Can't create char-resource");
- return -1;
- }
- memcpy(Ifx_char->CHAR.char_data, param,len);
- Ifx_char->CHAR.char_data[len] = 0;
- Ifx_char->CHAR.len = len;
- }
- return 0;
-}
-
-$ifdef HAVE_IFX_IUS;
-
-/* ----------------------------------------------------------------------
-** int ifxus_create_slob(int mode)
-**
-** creates an slob-object and opens it
-** mode: 1=LO_RDONLY, 2=LO_WRONLY, 4=LO_APPEND, 8=LO_RDWR, 16=LO_BUFFER, 32=LO_NOBUFFER -> or-mask
-** return false on error otherwise the new Slob-Object-id
-** ----------------------------------------------------------------------
-*/
-
-/* {{{ proto int ifxus_create_slob(int mode)
- Creates a slob-object and opens it */
-PHP_FUNCTION(ifxus_create_slob)
-{
- zval **pmode;
- long id;
- long mode, create_mode;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &pmode) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long_ex(pmode);
- mode = Z_LVAL_PP(pmode);
-
- create_mode = 0;
- if ((mode & 1) != 0) {
- create_mode |= LO_RDONLY;
- }
- if ((mode & 2) != 0) {
- create_mode |= LO_WRONLY;
- }
- if ((mode & 4) != 0) {
- create_mode |= LO_APPEND;
- }
- if ((mode & 8) != 0) {
- create_mode |= LO_RDWR;
- }
- if ((mode & 16) != 0) {
- create_mode |= LO_BUFFER;
- }
- if ((mode & 32) != 0) {
- create_mode |= LO_NOBUFFER;
- }
-
- id = php_intifxus_create_slob(create_mode, &EG(regular_list) TSRMLS_CC);
-
- if (id < 0) {
- RETURN_FALSE;
- }
- RETURN_LONG(id);
-}
-/* }}} */
-
-/* ----------------------------------------------------------------------
- * internal function
- * long php_intifx_create_slob(long create_mode, HashTable *list TSRMLS_DC)
- *
- * creates an slob-object and opens it
- * mode: 1=LO_RDONLY, 2=LO_WRONLY, 4=LO_APPEND, 8=LO_RDWR, 16=LO_BUFFER, 32=LO_NOBUFFER -> or-mask
- * list: internal hashlist of php
- * return -1 on error otherwise the new Blob-Object-id
- * ----------------------------------------------------------------------
-*/
-static long php_intifxus_create_slob(long create_mode, HashTable *list TSRMLS_DC)
-{
- IFX_IDRES *Ifx_slob;
- int errcode;
-
- Ifx_slob = emalloc(sizeof(IFX_IDRES));
- if (Ifx_slob == NULL) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Can't create slob-resource");
- return -1;
- }
-
- errcode = ifx_lo_def_create_spec(&(Ifx_slob->SLOB.createspec));
- if (errcode < 0) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Can't create slob-resource: %d", errcode);
- return -1;
- }
-
- Ifx_slob->type = TYPE_SLOB;
- Ifx_slob->SLOB.lofd = ifx_lo_create(Ifx_slob->SLOB.createspec, create_mode, &(Ifx_slob->SLOB.slob_data), &errcode);
- if (errcode < 0 || Ifx_slob->SLOB.lofd < 0) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Can't create slob-resource: %d", errcode);
- return -1;
- }
- return zend_list_insert(Ifx_slob, le_idresult);
-}
-
-/* ----------------------------------------------------------------------
-** int ifxus_free_slob(int bid)
-**
-** deletes the slob-object
-** bid: Id of Slobobject
-** return false on error otherwise true
-** ----------------------------------------------------------------------
-*/
-
-/* {{{ proto bool ifxus_free_slob(int bid)
- Deletes the slob-object */
-PHP_FUNCTION(ifxus_free_slob)
-{
- zval **pid;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &pid) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long_ex(pid);
-
- if (php_intifxus_free_slob(Z_LVAL_PP(pid), &EG(regular_list) TSRMLS_CC) < 0) {
- RETURN_FALSE;
- }
- RETURN_TRUE;
-}
-/* }}} */
-
-/* ----------------------------------------------------------------------
- * internal function
- * long php_intifxus_free_slob(long bid, HashTable *list)
- *
- * deletes the slob-object
- * bid: Id of Slobobject
- * list: internal hashlist of php
- *
- * return -1 on error otherwise 0
- * ----------------------------------------------------------------------
-*/
-static long php_intifxus_free_slob(long bid, HashTable *list TSRMLS_DC)
-{
- IFX_IDRES *Ifx_slob;
- int type;
-
- Ifx_slob = (IFX_IDRES *) zend_list_find(bid, &type);
- if (type != le_idresult || Ifx_slob->type != TYPE_SLOB) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "%d is not a Informix slob-result index", bid);
- return -1;
- }
-
- if (php_intifxus_close_slob(bid, &EG(regular_list) TSRMLS_CC) < 0) {
- return -1;
- }
-
- if (Ifx_slob->SLOB.createspec != NULL) {
- ifx_lo_spec_free(Ifx_slob->SLOB.createspec);
- Ifx_slob->SLOB.createspec = NULL;
- }
- efree(Ifx_slob);
- zend_list_delete(bid);
- return 0;
-}
-
-/* ----------------------------------------------------------------------
-** int ifxus_close_slob(int bid)
-**
-** deletes the slob-object
-** bid: Id of Slobobject
-** return false on error otherwise true
-** ----------------------------------------------------------------------
-*/
-
-/* {{{ proto bool ifxus_close_slob(int bid)
- Deletes the slob-object */
-PHP_FUNCTION(ifxus_close_slob)
-{
- zval **pid;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &pid) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long_ex(pid);
-
- if (php_intifxus_close_slob(Z_LVAL_PP(pid), &EG(regular_list) TSRMLS_CC) < 0) {
- RETURN_FALSE;
- }
- RETURN_TRUE;
-}
-/* }}} */
-
-/* ----------------------------------------------------------------------
- * internal function
- * long php_intifxus_close_slob(long bid, HashTable *list)
- *
- * deletes the slob-object
- * bid: Id of Slobobject
- * list: internal hashlist of php
- *
- * return -1 on error otherwise 0
- * ----------------------------------------------------------------------
-*/
-static long php_intifxus_close_slob(long bid, HashTable *list TSRMLS_DC)
-{
- IFX_IDRES *Ifx_slob;
- int type;
-
- Ifx_slob = (IFX_IDRES *) zend_list_find(bid, &type);
- if (type != le_idresult || Ifx_slob->type != TYPE_SLOB) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "%d is not a Informix slob-result index", bid);
- return -1;
- }
-
- if (Ifx_slob->SLOB.lofd < 0) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Slob-resource already closed");
- return -1;
- }
-
- if (ifx_lo_close(Ifx_slob->SLOB.lofd) < 0) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Can't close slob-resource");
- return -1;
- }
- Ifx_slob->SLOB.lofd = -1;
- return 0;
-}
-
-/* ----------------------------------------------------------------------
-** int ifxus_open_slob(long bid, int mode)
-**
-** opens an slob-object
-** bid: existing slob-id
-** mode: 1=LO_RDONLY, 2=LO_WRONLY, 4=LO_APPEND, 8=LO_RDWR, 16=LO_BUFFER, 32=LO_NOBUFFER -> or-mask
-** return false on error otherwise the new Slob-Object-id
-** ----------------------------------------------------------------------
-*/
-
-/* {{{ proto int ifxus_open_slob(int bid, int mode)
- Opens an slob-object */
-PHP_FUNCTION(ifxus_open_slob)
-{
- zval **pbid, **pmode;
- long mode,create_mode;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(1, &pbid, &pmode) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long_ex(pmode);
- convert_to_long_ex(pbid);
-
- mode = Z_LVAL_PP(pmode);
- create_mode = 0;
- if ((mode & 1) != 0) {
- create_mode|=LO_RDONLY;
- }
- if ((mode & 2) != 0) {
- create_mode|=LO_WRONLY;
- }
- if ((mode & 4) != 0) {
- create_mode|=LO_APPEND;
- }
- if ((mode & 8) != 0) {
- create_mode|=LO_RDWR;
- }
- if ((mode & 16) != 0) {
- create_mode|=LO_BUFFER;
- }
- if ((mode & 32) != 0) {
- create_mode|=LO_NOBUFFER;
- }
-
- RETURN_LONG(php_intifxus_open_slob(Z_LVAL_PP(pbid), create_mode, &EG(regular_list) TSRMLS_CC));
-}
-/* }}} */
-
-
-/* ----------------------------------------------------------------------
- * internal function
- * long php_intifxus_open_slob(long bid,long create_mode, HashTable *list)
- *
- * opens an slob-object
- * mode: 1=LO_RDONLY, 2=LO_WRONLY, 4=LO_APPEND, 8=LO_RDWR, 16=LO_BUFFER, 32=LO_NOBUFFER -> or-mask
- * list: internal hashlist of php
- * return -1 on error otherwise the new Blob-Object-id
- * ----------------------------------------------------------------------
-*/
-static long php_intifxus_open_slob(long bid, long create_mode, HashTable *list TSRMLS_DC)
-{
- IFX_IDRES *Ifx_slob;
- int errcode;
- int type;
-
- Ifx_slob = (IFX_IDRES *) zend_list_find(bid, &type);
- if (type != le_idresult || Ifx_slob->type != TYPE_SLOB) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "%d is not a Informix slob-result index", bid);
- return -1;
- }
-
- if (Ifx_slob->SLOB.lofd > 0) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Slob-resource already open");
- return -1;
- }
-
- Ifx_slob->SLOB.lofd = ifx_lo_open(&(Ifx_slob->SLOB.slob_data), create_mode, &errcode);
- if (errcode < 0 || Ifx_slob->SLOB.lofd < 0) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Can't open slob-resource: %d", errcode);
- return -1;
- }
- return 0;
-}
-
-/* ----------------------------------------------------------------------
- * internal function
- * long php_intifxus_new_slob(HashTable *list TSRMLS_DC)
- *
- * creates an slob-object but don't open it
- * list: internal hashlist of php
- * return -1 on error otherwise the new slob-Object-id
- * ----------------------------------------------------------------------
-*/
-static long php_intifxus_new_slob(HashTable *list TSRMLS_DC)
-{
- IFX_IDRES *Ifx_slob;
-
- Ifx_slob = emalloc(sizeof(IFX_IDRES));
- if (Ifx_slob == NULL) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Can't create slob-resource");
- return -1;
- }
-
- Ifx_slob->type = TYPE_SLOB;
- Ifx_slob->SLOB.lofd = -1;
- Ifx_slob->SLOB.createspec = NULL;
- return zend_list_insert(Ifx_slob, le_idresult);
-}
-
-/* ----------------------------------------------------------------------
- * internal function
- * ifx_lo_t *php_intifxus_get_slobloc(long bid, HashTable *list)
- *
- * retuens the ifx_lo_t-structure of a slob-object
- * list: internal hashlist of php
- * return -1 on error otherwise the new Blob-Object-id
- * ----------------------------------------------------------------------
-*/
-static ifx_lo_t *php_intifxus_get_slobloc(long bid, HashTable *list TSRMLS_DC)
-{
- IFX_IDRES *Ifx_slob;
- int type;
-
- Ifx_slob = (IFX_IDRES *) zend_list_find(bid, &type);
- if (type != le_idresult || Ifx_slob->type != TYPE_SLOB) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "%d is not a Informix slob-result index", bid);
- return NULL;
- }
- return &(Ifx_slob->SLOB.slob_data);
-}
-
-/* ----------------------------------------------------------------------
-** int ifxus_tell_slob(long bid)
-**
-** returns the current file or seek position of an open slob-object
-** bid: existing slob-id
-** return false on error otherwise the seek-position
-** ----------------------------------------------------------------------
-*/
-
-/* {{{ proto int ifxus_tell_slob(int bid)
- Returns the current file or seek position of an open slob-object */
-PHP_FUNCTION(ifxus_tell_slob)
-{
- zval **pbid;
- long bid;
- IFX_IDRES *Ifx_slob;
- ifx_int8_t akt_seek_pos;
- int type;
- long lakt_seek_pos;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &pbid) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long_ex(pbid);
- bid = Z_LVAL_PP(pbid);
-
- Ifx_slob = (IFX_IDRES *) zend_list_find(bid, &type);
- if (type != le_idresult || Ifx_slob->type != TYPE_SLOB) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "%d is not a Informix slob-result index", bid);
- RETURN_FALSE;
- }
-
- if (ifx_lo_tell(Ifx_slob->SLOB.lofd, &akt_seek_pos) < 0) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Can't perform tell-operation");
- RETURN_FALSE;
- }
-
- if (ifx_int8tolong(&akt_seek_pos, &lakt_seek_pos) < 0) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Seek-position to large for long");
- RETURN_FALSE;
- }
- RETURN_LONG(lakt_seek_pos);
-}
-/* }}} */
-
-/* ----------------------------------------------------------------------
-** int ifxus_seek_slob(long bid, int mode, long offset)
-**
-** sets the current file or seek position of an open slob-object
-** bid: existing slob-id
-** mode: 0=LO_SEEK_SET, 1=LO_SEEK_CUR, 2=LO_SEEK_END
-** offset: byte-offset
-** return false on error otherwise the seek-position
-** ----------------------------------------------------------------------
-*/
-
-/* {{{ proto int ifxus_seek_slob(int bid, int mode, long offset)
- Sets the current file or seek position of an open slob-object */
-PHP_FUNCTION(ifxus_seek_slob)
-{
- zval **pbid, **pmode, **poffset;
- long bid,lakt_seek_pos;
- IFX_IDRES *Ifx_slob;
- ifx_int8_t akt_seek_pos, offset;
- int type, mode;
-
- if (ZEND_NUM_ARGS() != 3 || zend_get_parameters_ex(3, &pbid, &pmode, &poffset) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long_ex(pbid);
- convert_to_long_ex(pmode);
- convert_to_long_ex(poffset);
-
- bid = Z_LVAL_PP(pbid);
- Ifx_slob = (IFX_IDRES *) zend_list_find(bid, &type);
- if (type != le_idresult || Ifx_slob->type != TYPE_SLOB) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "%d is not a Informix slob-result index", bid);
- RETURN_FALSE;
- }
-
- mode = LO_SEEK_SET;
- if (Z_LVAL_PP(pmode) == 1) {
- mode = LO_SEEK_CUR;
- }
- if (Z_LVAL_PP(pmode) == 2) {
- mode = LO_SEEK_END;
- }
-
- ifx_int8cvlong(Z_LVAL_PP(poffset), &offset);
- if (ifx_lo_seek(Ifx_slob->SLOB.lofd, &offset, mode, &akt_seek_pos) < 0) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Can't perform seek-operation");
- RETURN_FALSE;
- }
-
- if (ifx_int8tolong(&akt_seek_pos, &lakt_seek_pos) < 0) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Seek-position to large for long");
- RETURN_FALSE;
- }
- RETURN_LONG(lakt_seek_pos);
-}
-/* }}} */
-
-/* ----------------------------------------------------------------------
-** int ifxus_read_slob(long bid, long nbytes)
-**
-** reads nbytes of the slob-object
-** bid: existing slob-id
-** nbytes: bytes zu read
-** return false on error otherwise the string
-** ----------------------------------------------------------------------
-*/
-
-/* {{{ proto string ifxus_read_slob(int bid, int nbytes)
- Reads nbytes of the slob-object */
-PHP_FUNCTION(ifxus_read_slob)
-{
- zval **pbid, **pnbytes;
- long bid, nbytes;
- IFX_IDRES *Ifx_slob;
- int errcode, type;
- char *buffer;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &pbid, &pnbytes) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long_ex(pbid);
- convert_to_long_ex(pnbytes);
-
- bid = Z_LVAL_PP(pbid);
- Ifx_slob = (IFX_IDRES *) zend_list_find(bid, &type);
- if (type != le_idresult || Ifx_slob->type != TYPE_SLOB) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "%d is not a Informix slob-result index", bid);
- RETURN_FALSE;
- }
-
- nbytes = Z_LVAL_PP(pnbytes);
- buffer = emalloc(nbytes);
-
- if (ifx_lo_read(Ifx_slob->SLOB.lofd, buffer, nbytes, &errcode) < 0) {
- efree(buffer);
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Error reading slob: %d", errcode);
- RETURN_FALSE;
- }
- RETURN_STRINGL(buffer, nbytes, 0);
-}
-/* }}} */
-
-/* ----------------------------------------------------------------------
-** int ifxus_write_slob(long bid, string content)
-**
-** writes a string into the slob-object
-** bid: existing slob-id
-** content: content to write
-** return false on error otherwise bytes written
-** ----------------------------------------------------------------------
-*/
-
-/* {{{ proto int ifxus_write_slob(int bid, string content)
- Writes a string into the slob-object */
-PHP_FUNCTION(ifxus_write_slob)
-{
- zval **pbid, **pcontent;
- long bid, nbytes;
- IFX_IDRES *Ifx_slob;
- int errcode, type;
- char *buffer;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &pbid, &pcontent) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long_ex(pbid);
- convert_to_string_ex(pcontent);
-
- bid = Z_LVAL_PP(pbid);
- Ifx_slob = (IFX_IDRES *) zend_list_find(bid, &type);
- if (type != le_idresult || Ifx_slob->type != TYPE_SLOB) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "%d is not a Informix slob-result index", bid);
- RETURN_FALSE;
- }
-
- buffer = Z_STRVAL_PP(pcontent);
- nbytes = Z_STRLEN_PP(pcontent);
-
- if (nbytes <= 0) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "String has no content");
- RETURN_FALSE;
- }
-
- if ((nbytes = ifx_lo_write(Ifx_slob->SLOB.lofd, buffer, nbytes, &errcode)) < 0) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Error writing slob: %d", errcode);
- RETURN_FALSE;
- }
-
- RETURN_LONG(nbytes);
-}
-/* }}} */
-
-$endif;
-
-#endif
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- */
diff --git a/ext/informix/php_informix.h b/ext/informix/php_informix.h
deleted file mode 100644
index 5764408447..0000000000
--- a/ext/informix/php_informix.h
+++ /dev/null
@@ -1,125 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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. |
- +----------------------------------------------------------------------+
- | Authors: Danny Heijl <Danny.Heijl@cevi.be>, initial cut (ODS 7) |
- | Christian Cartus <chc@idgruppe.de>, blobs, and IUS 9 |
- | Jouni Ahto <jouni.ahto@exdec.fi>, configuration stuff |
- | Corne' Cornelius <cornec@reach.co.za>, input descriptors |
- | based on mysql code by: Zeev Suraski <zeev@php.net> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifndef PHP_INFORMIX_H
-#define PHP_INFORMIX_H
-
-#ifdef PHP_WIN32
-#define PHP_IFX_API __declspec(dllexport)
-#else
-#define PHP_IFX_API
-#endif
-
-#if HAVE_IFX /* with Informix */
-
-#ifndef DLEXPORT
-#define DLEXPORT
-#endif
-
-#ifdef ZTS
-#include "TSRM.h"
-#endif
-
-extern zend_module_entry ifx_module_entry;
-#define ifx_module_ptr &ifx_module_entry
-
-/* user functions */
-PHP_MINIT_FUNCTION(ifx);
-PHP_RINIT_FUNCTION(ifx);
-PHP_MSHUTDOWN_FUNCTION(ifx);
-PHP_MINFO_FUNCTION(ifx);
-/* functions common to all Informix versions */
-PHP_FUNCTION(ifx_connect);
-PHP_FUNCTION(ifx_pconnect);
-PHP_FUNCTION(ifx_close);
-PHP_FUNCTION(ifx_query);
-PHP_FUNCTION(ifx_prepare);
-PHP_FUNCTION(ifx_do);
-PHP_FUNCTION(ifx_error);
-PHP_FUNCTION(ifx_errormsg);
-PHP_FUNCTION(ifx_affected_rows);
-PHP_FUNCTION(ifx_num_rows);
-PHP_FUNCTION(ifx_num_fields);
-PHP_FUNCTION(ifx_fetch_row);
-PHP_FUNCTION(ifx_free_result);
-PHP_FUNCTION(ifx_htmltbl_result);
-PHP_FUNCTION(ifx_fieldtypes);
-PHP_FUNCTION(ifx_fieldproperties);
-PHP_FUNCTION(ifx_getsqlca);
-/* BLOB related stuff, IDS & IUS only */
-PHP_FUNCTION(ifx_create_blob);
-PHP_FUNCTION(ifx_free_blob) ;
-PHP_FUNCTION(ifx_get_blob);
-PHP_FUNCTION(ifx_update_blob);
-PHP_FUNCTION(ifx_blobinfile_mode);
-PHP_FUNCTION(ifx_copy_blob);
-PHP_FUNCTION(ifx_textasvarchar);
-PHP_FUNCTION(ifx_byteasvarchar);
-PHP_FUNCTION(ifx_nullformat);
-PHP_FUNCTION(ifx_create_char);
-PHP_FUNCTION(ifx_free_char) ;
-PHP_FUNCTION(ifx_update_char);
-PHP_FUNCTION(ifx_get_char);
-
-/* SLOB, CLOB : IUS only functions */
-#if HAVE_IFX_IUS
-PHP_FUNCTION(ifxus_create_slob);
-PHP_FUNCTION(ifxus_free_slob) ;
-PHP_FUNCTION(ifxus_close_slob) ;
-PHP_FUNCTION(ifxus_open_slob) ;
-PHP_FUNCTION(ifxus_read_slob);
-PHP_FUNCTION(ifxus_write_slob);
-PHP_FUNCTION(ifxus_seek_slob);
-PHP_FUNCTION(ifxus_tell_slob);
-#endif
-
-ZEND_BEGIN_MODULE_GLOBALS(ifx)
- long default_link;
- long num_links, num_persistent;
- long max_links, max_persistent;
- long allow_persistent;
- char *default_host, *default_user, *default_password;
- int connectionid;
- int cursorid;
- int sv_sqlcode; /* saved informix SQLCODE value */
- long blobinfile; /* 0=save in memory, 1=save in file */
- long textasvarchar; /* 0=as id, 1=as varchar */
- long byteasvarchar; /* 0=as id, 1=as varchar */
- long charasvarchar; /* 0=don't strip trailing blanks, 1=strip */
- long nullformat; /* 0=NULL as "", 1= NULL as "NULL" */
- char nullvalue[1]; /* "" */
- char nullstring[5]; /* "NULL" */
-ZEND_END_MODULE_GLOBALS(ifx)
-
-#ifdef ZTS
-# define IFXG(v) TSRMG(ifx_globals_id, zend_ifx_globals *, v)
-#else
-# define IFXG(v) (ifx_globals.v)
-#endif
-
-#else /* not HAVE_IFX */
-#define ifx_module_ptr NULL
-#endif
-#define phpext_informix_ptr ifx_module_ptr
-#endif /* PHP_INFORMIX_H */
diff --git a/ext/informix/php_informix_includes.h b/ext/informix/php_informix_includes.h
deleted file mode 100644
index cb3a8c66d2..0000000000
--- a/ext/informix/php_informix_includes.h
+++ /dev/null
@@ -1,90 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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. |
- +----------------------------------------------------------------------+
- | Authors: Danny Heijl <Danny.Heijl@cevi.be>, initial cut (ODS 7) |
- | Christian Cartus <chc@idgruppe.de>, blobs, and IUS 9 |
- | Jouni Ahto <jouni.ahto@exdec.fi>, configuration stuff |
- | Corne' Cornelius <cornec@reach.co.za>, input descriptors |
- | based on mysql code by: Zeev Suraski <zeev@php.net> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifndef PHP_INFORMIX_INCLUDES_H
-#define PHP_INFORMIX_INCLUDES_H
-
-#if HAVE_IFX /* with Informix */
-
-#undef TYPEMAX
-#undef CHAR
-
-#include "locator.h"
-#include "sqltypes.h"
-
-#define MAX_RESID 64
-#define BLOBINFILE 0 /* 0=in memory, 1=in file */
-
-/* query result set data */
-typedef struct ifx_res {
- char connecid[32];
- char cursorid[32];
- char descrpid[32];
- char i_descrpid[32];
- char statemid[32];
- int isscroll;
- int ishold;
- int iscursory;
- int paramquery;
- int numcols;
- int numicols;
- int rowid;
- int affected_rows;
- long sqlerrd[6];
- int res_id[MAX_RESID];
-} IFX_RES;
-
-typedef struct _IFX_IDRES {
- int type;
- union {
- struct {
- int mode;
- loc_t blob_data;
- } BLOBRES;
-
- struct {
- char *char_data;
- int len;
- } CHARRES;
-
-#if HAVE_IFX_IUS
- struct {
- ifx_lo_t slob_data;
- ifx_lo_create_spec_t *createspec;
- int lofd;
- } SLOBRES;
-#endif
- } DATARES;
-} IFX_IDRES;
-
-#define BLOB DATARES.BLOBRES
-#define CHAR DATARES.CHARRES
-
-#if HAVE_IFX_IUS
-#define SLOB DATARES.SLOBRES
-#endif
-
-#endif /* HAVE_IFX */
-
-#endif /* PHP_INFORMIX_INCLUDES_H */
diff --git a/ext/ingres_ii/CREDITS b/ext/ingres_ii/CREDITS
deleted file mode 100644
index f23fb1d63f..0000000000
--- a/ext/ingres_ii/CREDITS
+++ /dev/null
@@ -1,2 +0,0 @@
-Ingres II
-David Hénot
diff --git a/ext/ingres_ii/EXPERIMENTAL b/ext/ingres_ii/EXPERIMENTAL
deleted file mode 100644
index 6443e99646..0000000000
--- a/ext/ingres_ii/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/ingres_ii/README b/ext/ingres_ii/README
deleted file mode 100644
index 422bec9957..0000000000
--- a/ext/ingres_ii/README
+++ /dev/null
@@ -1,13 +0,0 @@
-Ingres II extension for PHP
-===========================
-
-This extension provides access to Ingres II servers from PHP 4.0.
-It is still in development and has been only quickly tested on
-Linux (Mandrake 5.3 for Intel), so you should avoid using it with
-critical data.
-
-To enable the extension just add --with-ingres to your ./configure
-line. If the Ingres files are not found, use --with-ingres=DIR instead
-to specify your Ingres installation directory.
-
-Please report suggestions to henot@php.net.
diff --git a/ext/ingres_ii/config.m4 b/ext/ingres_ii/config.m4
deleted file mode 100644
index abfce6bf8b..0000000000
--- a/ext/ingres_ii/config.m4
+++ /dev/null
@@ -1,35 +0,0 @@
-dnl
-dnl $Id$
-dnl
-
-PHP_ARG_WITH(ingres, for Ingres II support,
-[ --with-ingres[=DIR] Include Ingres II support. DIR is the Ingres
- base directory (default $II_SYSTEM/ingres)])
-
-if test "$PHP_INGRES" != "no"; then
- AC_DEFINE(HAVE_II, 1, [Whether you have Ingres II])
- PHP_NEW_EXTENSION(ingres_ii, ii.c, $ext_shared)
- PHP_SUBST(II_SHARED_LIBADD)
-
- if test "$PHP_INGRES" = "yes"; then
- II_DIR=$II_SYSTEM/ingres
- else
- II_DIR=$PHP_INGRES
- fi
-
- if test -r $II_DIR/files/iiapi.h; then
- II_INC_DIR=$II_DIR/files
- else
- AC_MSG_ERROR(Cannot find iiapi.h under $II_DIR/files)
- fi
-
- if test -r $II_DIR/lib/libiiapi.a; then
- II_LIB_DIR=$II_DIR/lib
- else
- AC_MSG_ERROR(Cannot find libiiapi.a under $II_DIR/lib)
- fi
-
- PHP_ADD_LIBRARY_WITH_PATH(iiapi, $II_LIB_DIR, II_SHARED_LIBADD)
- PHP_ADD_LIBRARY_WITH_PATH(ingres, $II_LIB_DIR, II_SHARED_LIBADD)
- PHP_ADD_INCLUDE($II_INC_DIR)
-fi
diff --git a/ext/ingres_ii/ii.c b/ext/ingres_ii/ii.c
deleted file mode 100644
index c6a312bcc7..0000000000
--- a/ext/ingres_ii/ii.c
+++ /dev/null
@@ -1,1545 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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. |
- +----------------------------------------------------------------------+
- | Contributed by ECL IP'S Software & Services |
- | http://www.eclips-software.com |
- | mailto://idev@eclips-software.com |
- | Author: David Hénot <henot@php.net> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "php.h"
-#include "php_globals.h"
-#include "php_ini.h"
-#include "ext/standard/info.h"
-#include "php_ii.h"
-#include "ii.h"
-#include "ext/standard/php_string.h"
-
-#if HAVE_II
-
-ZEND_DECLARE_MODULE_GLOBALS(ii)
-
-/* True globals, no need for thread safety */
-static int le_ii_link, le_ii_plink;
-
-#define SAFE_STRING(s) ((s)?(s):"")
-
-/* Every user visible function must have an entry in ii_functions[].
-*/
-function_entry ii_functions[] = {
- PHP_FE(ingres_connect, NULL)
- PHP_FE(ingres_pconnect, NULL)
- PHP_FE(ingres_close, NULL)
- PHP_FE(ingres_query, NULL)
- PHP_FE(ingres_num_rows, NULL)
- PHP_FE(ingres_num_fields, NULL)
- PHP_FE(ingres_field_name, NULL)
- PHP_FE(ingres_field_type, NULL)
- PHP_FE(ingres_field_nullable, NULL)
- PHP_FE(ingres_field_length, NULL)
- PHP_FE(ingres_field_precision, NULL)
- PHP_FE(ingres_field_scale, NULL)
- PHP_FE(ingres_fetch_array, NULL)
- PHP_FE(ingres_fetch_row, NULL)
- PHP_FE(ingres_fetch_object, NULL)
- PHP_FE(ingres_rollback, NULL)
- PHP_FE(ingres_commit, NULL)
- PHP_FE(ingres_autocommit, NULL)
- {NULL, NULL, NULL} /* Must be the last line in ii_functions[] */
-};
-
-zend_module_entry ingres_ii_module_entry = {
- STANDARD_MODULE_HEADER,
- "ingres_ii",
- ii_functions,
- PHP_MINIT(ii),
- PHP_MSHUTDOWN(ii),
- PHP_RINIT(ii),
- PHP_RSHUTDOWN(ii),
- PHP_MINFO(ii),
- NO_VERSION_YET,
- STANDARD_MODULE_PROPERTIES
-};
-
-#ifdef COMPILE_DL_INGRES_II
-ZEND_GET_MODULE(ingres_ii)
-#endif
-
-/* php.ini entries
-*/
-PHP_INI_BEGIN()
- STD_PHP_INI_BOOLEAN("ingres.allow_persistent", "1", PHP_INI_SYSTEM, OnUpdateLong, allow_persistent, zend_ii_globals, ii_globals)
- STD_PHP_INI_ENTRY_EX("ingres.max_persistent", "-1", PHP_INI_SYSTEM, OnUpdateLong, max_persistent, zend_ii_globals, ii_globals, display_link_numbers)
- STD_PHP_INI_ENTRY_EX("ingres.max_links", "-1", PHP_INI_SYSTEM, OnUpdateLong, max_links, zend_ii_globals, ii_globals, display_link_numbers)
- STD_PHP_INI_ENTRY("ingres.default_database", NULL, PHP_INI_ALL, OnUpdateString, default_database, zend_ii_globals, ii_globals)
- STD_PHP_INI_ENTRY("ingres.default_user", NULL, PHP_INI_ALL, OnUpdateString, default_user, zend_ii_globals, ii_globals)
- STD_PHP_INI_ENTRY("ingres.default_password", NULL, PHP_INI_ALL, OnUpdateString, default_password, zend_ii_globals, ii_globals)
-PHP_INI_END()
-
-/* closes statement in given link
-*/
-static int _close_statement(II_LINK *link)
-{
- IIAPI_CLOSEPARM closeParm;
-
- closeParm.cl_genParm.gp_callback = NULL;
- closeParm.cl_genParm.gp_closure = NULL;
- closeParm.cl_stmtHandle = link->stmtHandle;
-
- IIapi_close(&closeParm);
- ii_sync(&(closeParm.cl_genParm));
-
- if (ii_success(&(closeParm.cl_genParm)) == II_FAIL) {
- return 1;
- }
-
- link->stmtHandle = NULL;
- link->fieldCount = 0;
- link->descriptor = NULL;
- return 0;
-}
-
-/* rolls back transaction in given link
- after closing the active transaction (if any)
-*/
-static int _rollback_transaction(II_LINK *link TSRMLS_DC)
-{
- IIAPI_ROLLBACKPARM rollbackParm;
-
- if (link->stmtHandle && _close_statement(link)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Ingres II: Unable to close statement !!");
- return 1;
- }
-
- rollbackParm.rb_genParm.gp_callback = NULL;
- rollbackParm.rb_genParm.gp_closure = NULL;
- rollbackParm.rb_tranHandle = link->tranHandle;
- rollbackParm.rb_savePointHandle = NULL;
-
- IIapi_rollback(&rollbackParm);
- ii_sync(&(rollbackParm.rb_genParm));
-
- if (ii_success(&(rollbackParm.rb_genParm)) == II_FAIL) {
- return 1;
- }
-
- link->tranHandle = NULL;
- return 0;
-}
-
-static void _close_ii_link(II_LINK *link TSRMLS_DC)
-{
- IIAPI_DISCONNPARM disconnParm;
-
- if (link->tranHandle && _rollback_transaction(link TSRMLS_CC)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Ingres II: Unable to rollback transaction !!");
- }
-
- disconnParm.dc_genParm.gp_callback = NULL;
- disconnParm.dc_genParm.gp_closure = NULL;
- disconnParm.dc_connHandle = link->connHandle;
-
- IIapi_disconnect(&disconnParm);
-
- free(link);
-
- IIG(num_links)--;
-}
-
-/* closes the given link, actually disconnecting from server
- and releasing associated resources after rolling back the
- active transaction (if any)
-*/
-static void php_close_ii_link(zend_rsrc_list_entry *rsrc TSRMLS_DC)
-{
- II_LINK *link = (II_LINK *) rsrc->ptr;
-
- _close_ii_link(link TSRMLS_CC);
-}
-
-/* closes the given persistent link, see _close_ii_link
-*/
-static void _close_ii_plink(zend_rsrc_list_entry *rsrc TSRMLS_DC)
-{
- II_LINK *link = (II_LINK *) rsrc->ptr;
-
- _close_ii_link(link TSRMLS_CC);
- IIG(num_persistent)--;
-}
-
-/* cleans up the given persistent link.
- used when the request ends to 'refresh' the link for use
- by the next request
-*/
-static void _ai_clean_ii_plink(II_LINK *link TSRMLS_DC)
-{
- int ai_error = 0;
- IIAPI_DISCONNPARM disconnParm;
- IIAPI_AUTOPARM autoParm;
-
- /* if link as always been marked as broken do nothing */
- /* This because we call this function directly from close function */
- /* And it's called in the end of request */
- if (link->connHandle == NULL) {
- return;
- }
-
- if (link->stmtHandle && _close_statement(link)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Ingres II: Unable to close statement !!");
- ai_error = 1;
- }
-
- if (link->autocommit) {
- autoParm.ac_genParm.gp_callback = NULL;
- autoParm.ac_genParm.gp_closure = NULL;
- autoParm.ac_connHandle = link->connHandle;
- autoParm.ac_tranHandle = link->tranHandle;
-
- IIapi_autocommit(&autoParm);
- ii_sync(&(autoParm.ac_genParm));
-
- if (ii_success(&(autoParm.ac_genParm)) == II_FAIL) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Ingres II: Unable to disable autocommit");
- }
-
- link->autocommit = 0;
- link->tranHandle = NULL;
- }
-
- if (link->tranHandle && _rollback_transaction(link TSRMLS_CC)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Ingres II: Unable to rollback transaction !!");
- }
-
- /* Assume link is broken, close it, and mark it as broken with conn Handle NULL */
- if (ai_error) {
- disconnParm.dc_genParm.gp_callback = NULL;
- disconnParm.dc_genParm.gp_closure = NULL;
- disconnParm.dc_connHandle = link->connHandle;
-
- IIapi_disconnect(&disconnParm);
- link->connHandle = NULL;
- }
-}
-
-static void _clean_ii_plink(zend_rsrc_list_entry *rsrc TSRMLS_DC)
-{
- II_LINK *link = (II_LINK *)rsrc->ptr;
- _ai_clean_ii_plink(link TSRMLS_CC);
-}
-
-/* sets the default link
-*/
-static void php_ii_set_default_link(int id TSRMLS_DC)
-{
- if (IIG(default_link) != -1) {
- zend_list_delete(IIG(default_link));
- }
- IIG(default_link) = id;
- zend_list_addref(id);
-}
-
-/* gets the default link
- if none has been set, tries to open a new one with default
- parameters
-*/
-static int php_ii_get_default_link(INTERNAL_FUNCTION_PARAMETERS)
-{
- if (IIG(default_link) == -1) { /* no link opened yet, implicitly open one */
- ht = 0;
- php_ii_do_connect(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0);
- }
- return IIG(default_link);
-}
-
-static void php_ii_globals_init(zend_ii_globals *ii_globals)
-{
- ii_globals->num_persistent = 0;
-}
-
-/* Module initialization
-*/
-PHP_MINIT_FUNCTION(ii)
-{
- IIAPI_INITPARM initParm;
-
- ZEND_INIT_MODULE_GLOBALS(ii, php_ii_globals_init, NULL);
- REGISTER_INI_ENTRIES();
-
- le_ii_link = zend_register_list_destructors_ex(php_close_ii_link, NULL, "ingres", module_number);
- le_ii_plink = zend_register_list_destructors_ex(_clean_ii_plink, _close_ii_plink, "ingres persistent", module_number);
-
- /* Constants registration */
- REGISTER_LONG_CONSTANT("INGRES_ASSOC", II_ASSOC, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("INGRES_NUM", II_NUM, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("INGRES_BOTH", II_BOTH, CONST_CS | CONST_PERSISTENT);
-
- /* Ingres api initialization */
- initParm.in_timeout = -1; /* timeout in ms, -1 = no timeout */
- initParm.in_version = IIAPI_VERSION_1; /* api version used */
-
- IIapi_initialize(&initParm);
- if (initParm.in_status == IIAPI_ST_SUCCESS) {
- return SUCCESS;
- } else {
- return FAILURE;
- }
-}
-
-/* Module shutdown
-*/
-PHP_MSHUTDOWN_FUNCTION(ii)
-{
- IIAPI_TERMPARM termParm;
-
- UNREGISTER_INI_ENTRIES();
-
- /* Ingres api termination */
- IIapi_terminate(&termParm);
- if (termParm.tm_status == IIAPI_ST_SUCCESS) {
- return SUCCESS;
- } else {
- return FAILURE;
- }
-}
-
-/* New request initialization
-*/
-PHP_RINIT_FUNCTION(ii)
-{
- IIG(default_link) = -1;
- IIG(num_links) = IIG(num_persistent);
- return SUCCESS;
-}
-
-/* End of request
-*/
-PHP_RSHUTDOWN_FUNCTION(ii)
-{
- if (IIG(default_link) != -1) {
- zend_list_delete(IIG(default_link));
- IIG(default_link) = -1;
- }
- return SUCCESS;
-}
-
-/* Informations reported to phpinfo()
-*/
-PHP_MINFO_FUNCTION(ii)
-{
- char buf[32];
-
- php_info_print_table_start();
- php_info_print_table_header(2, "Ingres II Support", "enabled");
- sprintf(buf, "%ld", IIG(num_persistent));
- php_info_print_table_row(2, "Active Persistent Links", buf);
- sprintf(buf, "%ld", IIG(num_links));
- php_info_print_table_row(2, "Active Links", buf);
- php_info_print_table_end();
-
- DISPLAY_INI_ENTRIES();
-}
-
-/* Waits for completion of the last Ingres api call
- used because of the asynchronous design of this api
-*/
-static int ii_sync(IIAPI_GENPARM *genParm)
-{
- static IIAPI_WAITPARM waitParm = {
- -1, /* no timeout, we don't want asynchronous queries */
- 0 /* wt_status (output) */
- };
-
- while (genParm->gp_completed == FALSE) {
- IIapi_wait(&waitParm);
- }
-
- if (waitParm.wt_status != IIAPI_ST_SUCCESS) {
- TSRMLS_FETCH();
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Ingres II: Unexpected failure of IIapi_wait()");
- return 0;
- }
- return 1;
-}
-
-/* Handles errors from Ingres api
-*/
-static int ii_success(IIAPI_GENPARM *genParm)
-{
- switch (genParm->gp_status) {
-
- case IIAPI_ST_SUCCESS:
- return II_OK;
-
- case IIAPI_ST_NO_DATA:
- return II_NO_DATA;
-
- default:
- if (genParm->gp_errorHandle == NULL) { /* no error message available */
- TSRMLS_FETCH();
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Ingres II: Server or API error - no error message available");
- } else {
- IIAPI_GETEINFOPARM getEInfoParm;
- TSRMLS_FETCH();
-
- getEInfoParm.ge_errorHandle = genParm->gp_errorHandle;
- IIapi_getErrorInfo(&getEInfoParm);
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Ingres II: Server or API error : %s", getEInfoParm.ge_message);
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Ingres II: SQLSTATE : %s", getEInfoParm.ge_SQLSTATE);
- }
- return II_FAIL;
- }
-}
-
-/* Actually handles connection creation, either persistent or not
-*/
-static void php_ii_do_connect(INTERNAL_FUNCTION_PARAMETERS, int persistent)
-{
- zval **database, **username, **password;
- char *db, *user, *pass;
- int argc;
- char *hashed_details;
- int hashed_details_length;
- IIAPI_CONNPARM connParm;
- II_LINK *link;
-
- /* Setting db, user and pass according to sql_safe_mode, parameters and/or default values */
- argc = ZEND_NUM_ARGS();
-
- if (PG(sql_safe_mode)) { /* sql_safe_mode */
-
- if (argc > 0) {
- php_error_docref(NULL TSRMLS_CC, E_NOTICE, "SQL safe mode in effect - ignoring host/user/password information");
- }
-
- db = pass = NULL;
- user = php_get_current_user();
- hashed_details_length = strlen(user) + sizeof("ingres___") - 1;
- hashed_details = (char *) emalloc(hashed_details_length + 1);
- sprintf(hashed_details, "Ingres__%s_", user);
-
- } else { /* non-sql_safe_mode */
-
- db = IIG(default_database);
- user = IIG(default_user);
- pass = IIG(default_password);
-
- if (argc > 3 || zend_get_parameters_ex(argc, &database, &username, &password) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- switch (argc) {
-
- case 3:
- convert_to_string_ex(password);
- pass = Z_STRVAL_PP(password);
- /* Fall-through. */
-
- case 2:
- convert_to_string_ex(username);
- user = Z_STRVAL_PP(username);
- /* Fall-through. */
-
- case 1:
- convert_to_string_ex(database);
- db = Z_STRVAL_PP(database);
- /* Fall-through. */
-
- case 0:
- break;
- }
-
- hashed_details_length = sizeof("ingres___") - 1 +
- strlen(SAFE_STRING(db)) +
- strlen(SAFE_STRING(user)) +
- strlen(SAFE_STRING(pass));
-
- hashed_details = (char *) emalloc(hashed_details_length + 1);
- sprintf(hashed_details, "Ingres_%s_%s_%s", SAFE_STRING(db), SAFE_STRING(user), SAFE_STRING(pass));
- }
-
- /* if asked for unauthorized persistency, issue a warning
- and go for a non-persistent link */
- if (persistent && !IIG(allow_persistent)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Ingres II: Persistent links disabled !");
- persistent = 0;
- }
-
- if (persistent) {
- list_entry *le;
-
- /* is this link already in the persistent list ? */
- if (zend_hash_find(&EG(persistent_list), hashed_details, hashed_details_length + 1, (void **) &le) == FAILURE) { /* no, new persistent connection */
- list_entry new_le;
-
- if (IIG(max_links) != -1 && IIG(num_links) >= IIG(max_links)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Ingres II: Too many open links (%d)", IIG(num_links));
- efree(hashed_details);
- RETURN_FALSE;
- }
- if (IIG(max_persistent) != -1 && IIG(num_persistent) >= IIG(max_persistent)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Ingres II: Too many open persistent links (%d)", IIG(num_persistent));
- efree(hashed_details);
- RETURN_FALSE;
- }
-
- /* create the link */
- connParm.co_genParm.gp_callback = NULL;
- connParm.co_genParm.gp_closure = NULL;
- connParm.co_target = db;
- connParm.co_username = user;
- connParm.co_password = pass;
- connParm.co_timeout = -1; /* -1 is no timeout */
- connParm.co_connHandle = NULL;
- connParm.co_tranHandle = NULL;
-
- IIapi_connect(&connParm);
-
- if (!ii_sync(&(connParm.co_genParm)) || ii_success(&(connParm.co_genParm)) == II_FAIL) {
- efree(hashed_details);
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Ingres II: Unable to connect to database (%s)", db);
- RETURN_FALSE;
- }
-
- link = (II_LINK *) malloc(sizeof(II_LINK));
- link->connHandle = connParm.co_connHandle;
- link->tranHandle = NULL;
- link->stmtHandle = NULL;
- link->fieldCount = 0;
- link->descriptor = NULL;
- link->autocommit = 0;
-
- /* hash it up */
- Z_TYPE(new_le) = le_ii_plink;
- new_le.ptr = link;
- if (zend_hash_update(&EG(persistent_list), hashed_details, hashed_details_length + 1, (void *) &new_le, sizeof(list_entry), NULL) == FAILURE) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Ingres II: Unable to hash (%s)", hashed_details);
- free(link);
- efree(hashed_details);
- RETURN_FALSE;
- }
- IIG(num_persistent)++;
- IIG(num_links)++;
-
- } else { /* already open persistent connection */
-
- if (Z_TYPE_P(le) != le_ii_plink) {
- efree(hashed_details);
- RETURN_FALSE;
- }
- /* here we should ensure that the link did not die */
- /* unable to figure out the right way to do this */
- /* maybe does the api handle the reconnection transparently ? */
- link = (II_LINK *) le->ptr;
-
- /* Unfortunetaly NO !!!*/
- /* Ingres api doesn't reconnect */
- /* Have to reconnect if cleaning function has flagged link as broken */
- if (link->connHandle == NULL) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING,"Ingres II: Broken link (%s),reconnect", db);
-
- /* Recreate the link */
- connParm.co_genParm.gp_callback = NULL;
- connParm.co_genParm.gp_closure = NULL;
- connParm.co_target = db;
- connParm.co_username = user;
- connParm.co_password = pass;
- connParm.co_timeout = -1; /* no timeout */
- connParm.co_connHandle = NULL;
- connParm.co_tranHandle = NULL;
-
- IIapi_connect(&connParm);
-
- if (!ii_sync(&(connParm.co_genParm)) || ii_success(&(connParm.co_genParm)) == II_FAIL) {
- efree(hashed_details);
- php_error_docref(NULL TSRMLS_CC, E_WARNING,"Ingres II: Unable to connect to database (%s)", db);
- RETURN_FALSE;
- }
-
- link->connHandle = connParm.co_connHandle;
- link->tranHandle = NULL;
- link->stmtHandle = NULL;
- link->fieldCount = 0;
- link->descriptor = NULL;
- link->autocommit = 0;
- }
- }
-
- ZEND_REGISTER_RESOURCE(return_value, link, le_ii_plink);
-
- } else { /* non persistent */
- list_entry *index_ptr, new_index_ptr;
-
- /* first we check the hash for the hashed_details key. if it exists,
- * it should point us to the right offset where the actual link sits.
- * if it doesn't, open a new link, add it to the resource list,
- * and add a pointer to it with hashed_details as the key.
- */
- if (zend_hash_find(&EG(regular_list), hashed_details, hashed_details_length + 1, (void **) &index_ptr) == SUCCESS) {
- int type;
- void *ptr;
-
- if (Z_TYPE_P(index_ptr) != le_index_ptr) {
- RETURN_FALSE;
- }
- link = (II_LINK *) index_ptr->ptr;
- ptr = zend_list_find((int) link, &type); /* check if the link is still there */
- if (ptr && (type == le_ii_link || type == le_ii_plink)) {
- zend_list_addref((int) link);
- Z_LVAL_P(return_value) = (int) link;
-
- php_ii_set_default_link((int) link TSRMLS_CC);
-
- Z_TYPE_P(return_value) = IS_RESOURCE;
- efree(hashed_details);
- return;
- } else {
- zend_hash_del(&EG(regular_list), hashed_details, hashed_details_length + 1);
- }
- }
- if (IIG(max_links) != -1 && IIG(num_links) >= IIG(max_links)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Ingres II: Too many open links (%d)", IIG(num_links));
- efree(hashed_details);
- RETURN_FALSE;
- }
-
- /* create the link */
- connParm.co_genParm.gp_callback = NULL;
- connParm.co_genParm.gp_closure = NULL;
- connParm.co_target = db;
- connParm.co_username = user;
- connParm.co_password = pass;
- connParm.co_timeout = -1; /* -1 is no timeout */
- connParm.co_connHandle = NULL;
- connParm.co_tranHandle = NULL;
-
- IIapi_connect(&connParm);
-
- if (!ii_sync(&(connParm.co_genParm)) || ii_success(&(connParm.co_genParm)) == II_FAIL) {
- efree(hashed_details);
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Ingres II: Unable to connect to database (%s)", db);
- RETURN_FALSE;
- }
-
- link = (II_LINK *) malloc(sizeof(II_LINK));
- link->connHandle = connParm.co_connHandle;
- link->tranHandle = NULL;
- link->stmtHandle = NULL;
- link->fieldCount = 0;
- link->descriptor = NULL;
- link->autocommit = 0;
-
- /* add it to the list */
- ZEND_REGISTER_RESOURCE(return_value, link, le_ii_link);
-
- /* add it to the hash */
- new_index_ptr.ptr = (void *) Z_LVAL_P(return_value);
- Z_TYPE(new_index_ptr) = le_index_ptr;
- if (zend_hash_update(&EG(regular_list), hashed_details, hashed_details_length + 1, (void *) &new_index_ptr, sizeof(list_entry), NULL) == FAILURE) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Ingres II: Unable to hash (%s)", hashed_details);
- free(link);
- efree(hashed_details);
- RETURN_FALSE;
- }
- IIG(num_links)++;
- }
-
- efree(hashed_details);
- php_ii_set_default_link(Z_LVAL_P(return_value) TSRMLS_CC);
-}
-
-/* {{{ proto resource ingres_connect([string database [, string username [, string password]]])
- Open a connection to an Ingres II database the syntax of database is [node_id::]dbname[/svr_class] */
-PHP_FUNCTION(ingres_connect)
-{
- php_ii_do_connect(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0);
-}
-/* }}} */
-
-/* {{{ proto resource ingres_pconnect([string database [, string username [, string password]]])
- Open a persistent connection to an Ingres II database the syntax of database is [node_id::]dbname[/svr_class] */
-PHP_FUNCTION(ingres_pconnect)
-{
- php_ii_do_connect(INTERNAL_FUNCTION_PARAM_PASSTHRU, 1);
-}
-/* }}} */
-
-/* {{{ proto bool ingres_close([resource link])
- Close an Ingres II database connection */
-PHP_FUNCTION(ingres_close)
-{
- zval **link = NULL;
- int link_id = -1;
- II_LINK *ii_link;
-
- switch (ZEND_NUM_ARGS()) {
- case 0:
- link_id = IIG(default_link);
- break;
-
- case 1:
- if (zend_get_parameters_ex(1, &link) == FAILURE) {
- RETURN_FALSE;
- }
- link_id = -1;
- break;
-
- default:
- WRONG_PARAM_COUNT;
- break;
- }
-
- ZEND_FETCH_RESOURCE2(ii_link, II_LINK *, link, link_id, "Ingres II Link", le_ii_link, le_ii_plink);
-
- /* Call the clean function synchronously here */
- /* Otherwise we have to wait for request shutdown */
- /* This way we can reuse the link in the same script */
- _ai_clean_ii_plink(ii_link TSRMLS_CC);
-
- if (link_id == -1) { /* explicit resource number */
- zend_list_delete(Z_RESVAL_PP(link));
- }
-
- if (link_id != -1 || (link && Z_RESVAL_PP(link) == IIG(default_link))) {
- zend_list_delete(IIG(default_link));
- IIG(default_link) = -1;
- }
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto bool ingres_query(string query [, resource link])
- Send a SQL query to Ingres II */
-/* This should go into the documentation */
-/* Unsupported query types:
- - close
- - commit
- - connect
- - disconnect
- - get dbevent
- - prepare to commit
- - rollback
- - savepoint
- - set autocommit
- - <all cursor related queries>
- (look for dedicated functions instead) */
-PHP_FUNCTION(ingres_query)
-{
- zval **query, **link;
- int argc;
- int link_id = -1;
- II_LINK *ii_link;
- IIAPI_QUERYPARM queryParm;
- IIAPI_GETDESCRPARM getDescrParm;
-
- argc = ZEND_NUM_ARGS();
- if (argc < 1 || argc > 2 || zend_get_parameters_ex(argc, &query, &link) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- if (argc < 2) {
- link_id = php_ii_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU);
- }
-
- ZEND_FETCH_RESOURCE2(ii_link, II_LINK *, link, link_id, "Ingres II Link", le_ii_link, le_ii_plink);
-
- convert_to_string_ex(query);
-
- /* if there's already an active statement, close it */
- if (ii_link->stmtHandle && _close_statement(ii_link)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Ingres II: Unable to close statement !!");
- RETURN_FALSE;
- }
-
- /* send the query */
- queryParm.qy_genParm.gp_callback = NULL;
- queryParm.qy_genParm.gp_closure = NULL;
- queryParm.qy_connHandle = ii_link->connHandle;
- queryParm.qy_tranHandle = ii_link->tranHandle;
- queryParm.qy_stmtHandle = NULL;
- queryParm.qy_queryType = IIAPI_QT_QUERY;
- queryParm.qy_parameters = FALSE;
- queryParm.qy_queryText = Z_STRVAL_PP(query);
-
- IIapi_query(&queryParm);
- ii_sync(&(queryParm.qy_genParm));
-
- if (ii_success(&(queryParm.qy_genParm)) == II_FAIL) {
- RETURN_FALSE;
- }
-
- /* store transaction and statement handles */
- ii_link->tranHandle = queryParm.qy_tranHandle;
- ii_link->stmtHandle = queryParm.qy_stmtHandle;
-
- /* get description of results */
- getDescrParm.gd_genParm.gp_callback = NULL;
- getDescrParm.gd_genParm.gp_closure = NULL;
- getDescrParm.gd_stmtHandle = ii_link->stmtHandle;
-
- IIapi_getDescriptor(&getDescrParm);
- ii_sync(&(getDescrParm.gd_genParm));
-
- if (ii_success(&(getDescrParm.gd_genParm)) == II_FAIL) {
- RETURN_FALSE;
- }
-
- /* store the results */
- ii_link->fieldCount = getDescrParm.gd_descriptorCount;
- ii_link->descriptor = getDescrParm.gd_descriptor;
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto int ingres_num_rows([resource link])
- Return the number of rows affected/returned by the last query */
-
-/* Warning : don't call ingres_num_rows() before ingres_fetch_xx(),
- or ingres_fetch_xx() wouldn't find any data */
-PHP_FUNCTION(ingres_num_rows)
-{
- zval **link;
- int argc;
- int link_id = -1;
- II_LINK *ii_link;
- IIAPI_GETQINFOPARM getQInfoParm;
-
- argc = ZEND_NUM_ARGS();
- if (argc > 1 || zend_get_parameters_ex(argc, &link) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- if (argc < 1) {
- link_id = php_ii_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU);
- }
-
- ZEND_FETCH_RESOURCE2(ii_link, II_LINK *, link, link_id, "Ingres II Link", le_ii_link, le_ii_plink);
-
- /* get number of affected rows */
- getQInfoParm.gq_genParm.gp_callback = NULL;
- getQInfoParm.gq_genParm.gp_closure = NULL;
- getQInfoParm.gq_stmtHandle = ii_link->stmtHandle;
-
- IIapi_getQueryInfo(&getQInfoParm);
- ii_sync(&(getQInfoParm.gq_genParm));
-
- if (ii_success(&(getQInfoParm.gq_genParm)) == II_FAIL) {
- RETURN_FALSE;
- }
-
- /* return the result */
- if (getQInfoParm.gq_mask & IIAPI_GQ_ROW_COUNT) {
- RETURN_LONG(getQInfoParm.gq_rowCount);
- } else {
- RETURN_LONG(0);
- }
-}
-/* }}} */
-
-/* {{{ proto int ingres_num_fields([resource link])
- Return the number of fields returned by the last query */
-PHP_FUNCTION(ingres_num_fields)
-{
- zval **link;
- int argc;
- int link_id = -1;
- II_LINK *ii_link;
-
- argc = ZEND_NUM_ARGS();
- if (argc > 1 || zend_get_parameters_ex(argc, &link) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- if (argc < 1) {
- link_id = php_ii_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU);
- }
-
- ZEND_FETCH_RESOURCE2(ii_link, II_LINK *, link, link_id, "Ingres II Link", le_ii_link, le_ii_plink);
-
- RETURN_LONG(ii_link->fieldCount);
-}
-/* }}} */
-
-#define II_FIELD_INFO_NAME 1
-#define II_FIELD_INFO_TYPE 2
-#define II_FIELD_INFO_NULLABLE 3
-#define II_FIELD_INFO_LENGTH 4
-#define II_FIELD_INFO_PRECISION 5
-#define II_FIELD_INFO_SCALE 6
-
-/* Return information about a field in a query result
-*/
-static void php_ii_field_info(INTERNAL_FUNCTION_PARAMETERS, int info_type)
-{
- zval **idx, **link;
- int argc;
- int link_id = -1;
- char *name, *fun_name;
- int index;
- II_LINK *ii_link;
-
- argc = ZEND_NUM_ARGS();
- if (argc < 1 || argc > 2 || zend_get_parameters_ex(argc, &idx, &link) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- if (argc < 2) {
- link_id = php_ii_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU);
- }
-
- ZEND_FETCH_RESOURCE2(ii_link, II_LINK *, link, link_id, "Ingres II Link", le_ii_link, le_ii_plink);
-
- convert_to_long_ex(idx);
- index = Z_LVAL_PP(idx);
-
- if (index < 1 || index > ii_link->fieldCount) {
- switch (info_type) {
-
- case II_FIELD_INFO_NAME:
- fun_name = "ii_field_name";
- break;
-
- case II_FIELD_INFO_TYPE:
- fun_name = "ii_field_type";
- break;
-
- case II_FIELD_INFO_NULLABLE:
- fun_name = "ii_field_nullable";
- break;
-
- case II_FIELD_INFO_LENGTH:
- fun_name = "ii_field_length";
- break;
-
- case II_FIELD_INFO_PRECISION:
- fun_name = "ii_field_precision";
- break;
-
- case II_FIELD_INFO_SCALE:
- fun_name = "ii_field_scale";
- break;
-
- default:
- fun_name = "foobar";
- break;
- }
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Ingres II: %s() called with wrong index (%d)", fun_name, index);
- RETURN_FALSE;
- }
-
- switch (info_type) {
-
- case II_FIELD_INFO_NAME:
- name = php_ii_field_name(ii_link, index TSRMLS_CC);
- if (name == NULL) {
- RETURN_FALSE;
- }
- RETURN_STRING(name, 1);
- break;
-
- case II_FIELD_INFO_TYPE:
- switch ((ii_link->descriptor[index - 1]).ds_dataType) {
-
- case IIAPI_BYTE_TYPE:
- RETURN_STRING("IIAPI_BYTE_TYPE", 1);
-
- case IIAPI_CHA_TYPE:
- RETURN_STRING("IIAPI_CHA_TYPE", 1);
-
- case IIAPI_CHR_TYPE:
- RETURN_STRING("IIAPI_CHR_TYPE", 1);
-
- case IIAPI_DEC_TYPE:
- RETURN_STRING("IIAPI_DEC_TYPE", 1);
-
- case IIAPI_DTE_TYPE:
- RETURN_STRING("IIAPI_DTE_TYPE", 1);
-
- case IIAPI_FLT_TYPE:
- RETURN_STRING("IIAPI_FLT_TYPE", 1);
-
- case IIAPI_INT_TYPE:
- RETURN_STRING("IIAPI_INT_TYPE", 1);
-
- case IIAPI_LOGKEY_TYPE:
- RETURN_STRING("IIAPI_LOGKEY_TYPE", 1);
-
- case IIAPI_LBYTE_TYPE:
- RETURN_STRING("IIAPI_LBYTE_TYPE", 1);
-
- case IIAPI_LVCH_TYPE:
- RETURN_STRING("IIAPI_LVCH_TYPE", 1);
-
- case IIAPI_MNY_TYPE:
- RETURN_STRING("IIAPI_MNY_TYPE", 1);
-
- case IIAPI_TABKEY_TYPE:
- RETURN_STRING("IIAPI_TABKEY_TYPE", 1);
-
- case IIAPI_TXT_TYPE:
- RETURN_STRING("IIAPI_TXT_TYPE", 1);
-
- case IIAPI_VBYTE_TYPE:
- RETURN_STRING("IIAPI_VBYTE_TYPE", 1);
-
- case IIAPI_VCH_TYPE:
- RETURN_STRING("IIAPI_VCH_TYPE", 1);
-
- default:
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Ingres II: Unknown Ingres data type");
- RETURN_FALSE;
- break;
- }
- break;
-
- case II_FIELD_INFO_NULLABLE:
- if ((ii_link->descriptor[index - 1]).ds_nullable) {
- RETURN_TRUE;
- } else {
- RETURN_FALSE;
- }
- break;
-
- case II_FIELD_INFO_LENGTH:
- RETURN_LONG((ii_link->descriptor[index - 1]).ds_length);
- break;
-
- case II_FIELD_INFO_PRECISION:
- RETURN_LONG((ii_link->descriptor[index - 1]).ds_precision);
- break;
-
- case II_FIELD_INFO_SCALE:
- RETURN_LONG((ii_link->descriptor[index - 1]).ds_scale);
- break;
-
- default:
- RETURN_FALSE;
- }
-}
-
-/* Return the name of a field in a query result
-*/
-static char *php_ii_field_name(II_LINK *ii_link, int index TSRMLS_DC)
-{
- if (index < 1 || index > ii_link->fieldCount) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Ingres II: php_ii_field_name() called with wrong index (%d)", index);
- return NULL;
- }
-
- return (ii_link->descriptor[index - 1]).ds_columnName;
-}
-
-/* {{{ proto string ingres_field_name(int index [, resource link])
- Return the name of a field in a query result index must be >0 and <= ingres_num_fields() */
-PHP_FUNCTION(ingres_field_name)
-{
- php_ii_field_info(INTERNAL_FUNCTION_PARAM_PASSTHRU, II_FIELD_INFO_NAME);
-}
-/* }}} */
-
-/* {{{ proto string ingres_field_type(int index [, resource link])
- Return the type of a field in a query result index must be >0 and <= ingres_num_fields() */
-PHP_FUNCTION(ingres_field_type)
-{
- php_ii_field_info(INTERNAL_FUNCTION_PARAM_PASSTHRU, II_FIELD_INFO_TYPE);
-}
-/* }}} */
-
-/* {{{ proto string ingres_field_nullable(int index [, resource link])
- Return true if the field is nullable and false otherwise index must be >0 and <= ingres_num_fields() */
-PHP_FUNCTION(ingres_field_nullable)
-{
- php_ii_field_info(INTERNAL_FUNCTION_PARAM_PASSTHRU, II_FIELD_INFO_NULLABLE);
-}
-/* }}} */
-
-/* {{{ proto string ingres_field_length(int index [, resource link])
- Return the length of a field in a query result index must be >0 and <= ingres_num_fields() */
-PHP_FUNCTION(ingres_field_length)
-{
- php_ii_field_info(INTERNAL_FUNCTION_PARAM_PASSTHRU, II_FIELD_INFO_LENGTH);
-}
-/* }}} */
-
-/* {{{ proto string ingres_field_precision(int index [, resource link])
- Return the precision of a field in a query result index must be >0 and <= ingres_num_fields() */
-PHP_FUNCTION(ingres_field_precision)
-{
- php_ii_field_info(INTERNAL_FUNCTION_PARAM_PASSTHRU, II_FIELD_INFO_PRECISION);
-}
-/* }}} */
-
-/* {{{ proto string ingres_field_scale(int index [, resource link])
- Return the scale of a field in a query result index must be >0 and <= ingres_num_fields() */
-PHP_FUNCTION(ingres_field_scale)
-{
- php_ii_field_info(INTERNAL_FUNCTION_PARAM_PASSTHRU, II_FIELD_INFO_SCALE);
-}
-/* }}} */
-
-
-/* Convert complex Ingres data types to php-usable ones
-*/
-#define IIAPI_CONVERT(destType, destSize, precision) {\
- convertParm.cv_srcDesc.ds_dataType = (ii_link->descriptor[i+k-2]).ds_dataType;\
- convertParm.cv_srcDesc.ds_nullable = (ii_link->descriptor[i+k-2]).ds_nullable;\
- convertParm.cv_srcDesc.ds_length = (ii_link->descriptor[i+k-2]).ds_length;\
- convertParm.cv_srcDesc.ds_precision = (ii_link->descriptor[i+k-2]).ds_precision;\
- convertParm.cv_srcDesc.ds_scale = (ii_link->descriptor[i+k-2]).ds_scale;\
- convertParm.cv_srcDesc.ds_columnType = (ii_link->descriptor[i+k-2]).ds_columnType;\
- convertParm.cv_srcDesc.ds_columnName = (ii_link->descriptor[i+k-2]).ds_columnName;\
- convertParm.cv_srcValue.dv_null = columnData[k-1].dv_null;\
- convertParm.cv_srcValue.dv_length = columnData[k-1].dv_length;\
- convertParm.cv_srcValue.dv_value = columnData[k-1].dv_value;\
- convertParm.cv_dstDesc.ds_dataType = destType;\
- convertParm.cv_dstDesc.ds_nullable = FALSE;\
- convertParm.cv_dstDesc.ds_length = destSize;\
- convertParm.cv_dstDesc.ds_precision = precision;\
- convertParm.cv_dstDesc.ds_scale = 0;\
- convertParm.cv_dstDesc.ds_columnType = IIAPI_COL_TUPLE;\
- convertParm.cv_dstDesc.ds_columnName = NULL;\
- convertParm.cv_dstValue.dv_null = FALSE;\
- convertParm.cv_dstValue.dv_length = convertParm.cv_dstDesc.ds_length;\
- convertParm.cv_dstValue.dv_value = emalloc(convertParm.cv_dstDesc.ds_length+1);\
-\
- IIapi_convertData(&convertParm);\
-\
- if(ii_success(&(getColParm.gc_genParm))!=II_OK) {\
- RETURN_FALSE;\
- }\
-\
- columnData[k-1].dv_length = convertParm.cv_dstValue.dv_length;\
- columnData[k-1].dv_value = convertParm.cv_dstValue.dv_value;\
- efree(convertParm.cv_srcValue.dv_value);\
-}
-
-
-/* Fetch a row of result
-*/
-static void php_ii_fetch(INTERNAL_FUNCTION_PARAMETERS, II_LINK *ii_link, int result_type)
-{
- IIAPI_GETCOLPARM getColParm;
- IIAPI_DATAVALUE *columnData;
- IIAPI_CONVERTPARM convertParm;
- int i, j, k;
- int more;
- double value_double = 0;
- long value_long = 0;
- char *value_char_p;
- int len, should_copy, correct_length;
-
- /* array initialization */
- array_init(return_value);
-
- /* going through all fields */
- for (i = 1; i <= ii_link->fieldCount;) {
- j = 1;
-
- /* as long as there are no long byte or long varchar fields,
- Ingres is able to fetch many fields at a time, so try to find
- these types and stop if they're found.
- variable j will get number of fields to fetch */
- if ((ii_link->descriptor[i]).ds_dataType != IIAPI_LBYTE_TYPE &&
- (ii_link->descriptor[i]).ds_dataType != IIAPI_LVCH_TYPE) {
- while ( (ii_link->descriptor[i + j - 1]).ds_dataType != IIAPI_LBYTE_TYPE &&
- (ii_link->descriptor[i + j - 1]).ds_dataType != IIAPI_LVCH_TYPE &&
- i + j <= ii_link->fieldCount) {
- j++;
- }
- }
-
- /* allocate memory for j fields */
- columnData = (IIAPI_DATAVALUE *) safe_emalloc(j, sizeof(IIAPI_DATAVALUE), 0);
- for (k = 1; k <= j; k++) {
- columnData[k - 1].dv_value = (II_PTR) emalloc((ii_link->descriptor[i + k - 2]).ds_length);
- }
-
- more = 1; /* this is for multi segment LBYTE and LVCH elements */
-
- while (more) {
- getColParm.gc_genParm.gp_callback = NULL;
- getColParm.gc_genParm.gp_closure = NULL;
- getColParm.gc_rowCount = 1;
- getColParm.gc_columnCount = j;
- getColParm.gc_columnData = columnData;
- getColParm.gc_stmtHandle = ii_link->stmtHandle;
- getColParm.gc_moreSegments = 0;
-
- IIapi_getColumns(&getColParm);
- ii_sync(&(getColParm.gc_genParm));
-
- if (ii_success(&(getColParm.gc_genParm)) != II_OK) {
- RETURN_FALSE;
- }
-
- more = getColParm.gc_moreSegments;
-
- if (more) { /* more segments of LBYTE or LVCH element to come */
-
- /* Multi segment LBYTE and LVCH elements not supported yet */
- php_error_docref(NULL TSRMLS_CC, E_ERROR, "Ingres II: Multi segment LBYTE and LVCH elements not supported yet");
-
- } else {
-
- for (k = 1; k <= j; k++) {
- if (columnData[k - 1].dv_null) { /* NULL value ? */
-
- if (result_type & II_NUM) {
- add_index_null(return_value, i + k - 1);
- }
- if (result_type & II_ASSOC) {
- add_assoc_null(return_value, php_ii_field_name(ii_link, i + k - 1 TSRMLS_CC));
- }
-
- } else { /* non NULL value */
- correct_length = 0;
-
- switch ((ii_link->descriptor[i + k - 2]).ds_dataType) {
-
- case IIAPI_DEC_TYPE: /* decimal (fixed point number) */
- case IIAPI_MNY_TYPE: /* money */
- /* convert to floating point number */
- IIAPI_CONVERT(IIAPI_FLT_TYPE, sizeof(II_FLOAT8), 53);
- /* NO break */
-
- case IIAPI_FLT_TYPE: /* floating point number */
- switch (columnData[k - 1].dv_length) {
-
- case 4:
- value_double = (double) *((II_FLOAT4 *) columnData[k - 1].dv_value);
- break;
-
- case 8:
- value_double = (double) *((II_FLOAT8 *) columnData[k - 1].dv_value);
- break;
-
- default:
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Ingres II: Invalid size for IIAPI_FLT_TYPE data (%d)", columnData[k - 1].dv_length);
- break;
- }
-
- if (result_type & II_NUM) {
- add_index_double(return_value, i + k - 1, value_double);
- }
-
- if (result_type & II_ASSOC) {
- add_assoc_double(return_value, php_ii_field_name(ii_link, i + k - 1 TSRMLS_CC), value_double);
- }
- break;
-
- case IIAPI_INT_TYPE: /* integer */
- switch (columnData[k - 1].dv_length) {
-
- case 1:
- value_long = (long) *((II_INT1 *) columnData[k - 1].dv_value);
- break;
-
- case 2:
- value_long = (long) *((II_INT2 *) columnData[k - 1].dv_value);
- break;
-
- case 4:
- value_long = (long) *((II_INT4 *) columnData[k - 1].dv_value);
- break;
-
- default:
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Ingres II: Invalid size for IIAPI_INT_TYPE data (%d)", columnData[k - 1].dv_length);
- break;
- }
-
- if (result_type & II_NUM) {
- add_index_long(return_value, i + k - 1, value_long);
- }
-
- if (result_type & II_ASSOC) {
- add_assoc_long(return_value, php_ii_field_name(ii_link, i + k - 1 TSRMLS_CC), value_long);
- }
- break;
-
- case IIAPI_TXT_TYPE: /* variable length character string */
- case IIAPI_VBYTE_TYPE: /* variable length binary string */
- case IIAPI_VCH_TYPE: /* variable length character string */
- /* real length is stored in first 2 bytes of data, so adjust
- length variable and data pointer */
- columnData[k - 1].dv_length = *((II_INT2 *) columnData[k - 1].dv_value);
- ((II_INT2 *) columnData[k - 1].dv_value)++;
- correct_length = 1;
- /* NO break */
-
- case IIAPI_BYTE_TYPE: /* fixed length binary string */
- case IIAPI_CHA_TYPE: /* fixed length character string */
- case IIAPI_CHR_TYPE: /* fixed length character string */
- case IIAPI_LOGKEY_TYPE: /* value unique to database */
- case IIAPI_TABKEY_TYPE: /* value unique to table */
- case IIAPI_DTE_TYPE: /* date */
- /* eventualy convert date to string */
- if ((ii_link->descriptor[i + k - 2]).
- ds_dataType == IIAPI_DTE_TYPE) {
- IIAPI_CONVERT(IIAPI_CHA_TYPE, 32, 0);
- }
-
- /* use php_addslashes if asked to */
- if (PG(magic_quotes_runtime)) {
- value_char_p = php_addslashes((char *) columnData[k - 1].dv_value, columnData[k - 1].dv_length, &len, 0 TSRMLS_CC);
- should_copy = 0;
- } else {
- value_char_p = (char *) columnData[k - 1].dv_value;
- len = columnData[k - 1].dv_length;
- should_copy = 1;
- }
-
- if (result_type & II_NUM) {
- add_index_stringl(return_value, i + k - 1, value_char_p, len, should_copy);
- }
-
- if (result_type & II_ASSOC) {
- add_assoc_stringl(return_value, php_ii_field_name(ii_link, i + k - 1 TSRMLS_CC), value_char_p, len, should_copy);
- }
-
- /* eventualy restore data pointer state for
- variable length data types */
- if (correct_length) {
- ((II_INT2 *) columnData[k - 1].dv_value)--;
- }
- break;
-
- default:
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Ingres II: Invalid SQL data type in fetched field (%d -- length : %d)", (ii_link->descriptor[i + k - 2]).ds_dataType, columnData[k - 1].dv_length);
- break;
- }
- }
- }
- }
- }
-
- /* free the memory buffers */
- for (k = 1; k <= j; k++) {
- efree(columnData[k - 1].dv_value);
- }
- efree(columnData);
-
- /* increase field pointer by number of fetched fields */
- i += j;
- }
-}
-
-/* {{{ proto array ingres_fetch_array([int result_type [, resource link]])
- Fetch a row of result into an array result_type can be II_NUM for enumerated array, II_ASSOC for associative array, or II_BOTH (default) */
-PHP_FUNCTION(ingres_fetch_array)
-{
- zval **result_type, **link;
- int argc;
- int link_id = -1;
- II_LINK *ii_link;
-
- argc = ZEND_NUM_ARGS();
- if (argc > 2 || zend_get_parameters_ex(argc, &result_type, &link) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- if (argc != 2) {
- link_id = php_ii_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU);
- }
-
- if (argc != 0) {
- convert_to_long_ex(result_type);
- }
-
- ZEND_FETCH_RESOURCE2(ii_link, II_LINK *, link, link_id, "Ingres II Link", le_ii_link, le_ii_plink);
-
- php_ii_fetch(INTERNAL_FUNCTION_PARAM_PASSTHRU, ii_link, (argc == 0 ? II_BOTH : Z_LVAL_PP(result_type)));
-}
-/* }}} */
-
-/* {{{ proto array ingres_fetch_row([resource link])
- Fetch a row of result into an enumerated array */
-PHP_FUNCTION(ingres_fetch_row)
-{
- zval **link;
- int argc;
- int link_id = -1;
- II_LINK *ii_link;
-
- argc = ZEND_NUM_ARGS();
- if (argc > 1 || zend_get_parameters_ex(argc, &link) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- if (argc != 1) {
- link_id = php_ii_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU);
- }
-
- ZEND_FETCH_RESOURCE2(ii_link, II_LINK *, link, link_id, "Ingres II Link", le_ii_link, le_ii_plink);
-
- php_ii_fetch(INTERNAL_FUNCTION_PARAM_PASSTHRU, ii_link, II_NUM);
-}
-/* }}} */
-
-/* {{{ proto array ingres_fetch_object([int result_type [, resource link]])
- Fetch a row of result into an object result_type can be II_NUM for enumerated object, II_ASSOC for associative object, or II_BOTH (default) */
-PHP_FUNCTION(ingres_fetch_object)
-{
- zval **result_type, **link;
- int argc;
- int link_id = -1;
- II_LINK *ii_link;
-
- argc = ZEND_NUM_ARGS();
- if (argc > 2 || zend_get_parameters_ex(argc, &result_type, &link) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- if (argc != 2) {
- link_id = php_ii_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU);
- }
-
- if (argc != 0) {
- convert_to_long_ex(result_type);
- }
-
- ZEND_FETCH_RESOURCE2(ii_link, II_LINK *, link, link_id, "Ingres II Link", le_ii_link, le_ii_plink);
-
- php_ii_fetch(INTERNAL_FUNCTION_PARAM_PASSTHRU, ii_link, (argc == 0 ? II_BOTH : Z_LVAL_PP(result_type)));
-
- if (Z_TYPE_P(return_value) == IS_ARRAY) {
- convert_to_object(return_value);
- }
-}
-/* }}} */
-
-/* {{{ proto bool ingres_rollback([resource link])
- Roll back a transaction */
-PHP_FUNCTION(ingres_rollback)
-{
- zval **link;
- int argc;
- int link_id = -1;
- II_LINK *ii_link;
-
- argc = ZEND_NUM_ARGS();
- if (argc > 1 || (argc && zend_get_parameters_ex(argc, &link) == FAILURE)) {
- WRONG_PARAM_COUNT;
- }
-
- if (argc == 0) {
- link_id = IIG(default_link);
- }
- ZEND_FETCH_RESOURCE2(ii_link, II_LINK *, link, link_id, "Ingres II Link", le_ii_link, le_ii_plink);
-
- if (_rollback_transaction(ii_link TSRMLS_CC)) {
- RETURN_FALSE;
- }
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto bool ingres_commit([resource link])
- Commit a transaction */
-PHP_FUNCTION(ingres_commit)
-{
- zval **link;
- int argc;
- int link_id = -1;
- II_LINK *ii_link;
- IIAPI_COMMITPARM commitParm;
-
- argc = ZEND_NUM_ARGS();
- if (argc > 1 || (argc && zend_get_parameters_ex(argc, &link) == FAILURE)) {
- WRONG_PARAM_COUNT;
- }
-
- if (argc == 0) {
- link_id = IIG(default_link);
- }
-
- ZEND_FETCH_RESOURCE2(ii_link, II_LINK *, link, link_id, "Ingres II Link", le_ii_link, le_ii_plink);
-
- if (ii_link->stmtHandle && _close_statement(ii_link)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Ingres II: Unable to close statement !!");
- RETURN_FALSE;
- }
-
- commitParm.cm_genParm.gp_callback = NULL;
- commitParm.cm_genParm.gp_closure = NULL;
- commitParm.cm_tranHandle = ii_link->tranHandle;
-
- IIapi_commit(&commitParm);
- ii_sync(&(commitParm.cm_genParm));
-
- if (ii_success(&(commitParm.cm_genParm)) == II_FAIL) {
- RETURN_FALSE;
- }
-
- ii_link->tranHandle = NULL;
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto bool ingres_autocommit([resource link])
- Switch autocommit on or off */
-PHP_FUNCTION(ingres_autocommit)
-{
- zval **link;
- int argc;
- int link_id = -1;
- II_LINK *ii_link;
- IIAPI_AUTOPARM autoParm;
-
- argc = ZEND_NUM_ARGS();
- if (argc > 1 || (argc && zend_get_parameters_ex(argc, &link) == FAILURE)) {
- WRONG_PARAM_COUNT;
- }
-
- if (argc == 0) {
- link_id = IIG(default_link);
- }
-
- ZEND_FETCH_RESOURCE2(ii_link, II_LINK *, link, link_id, "Ingres II Link", le_ii_link, le_ii_plink);
-
- autoParm.ac_genParm.gp_callback = NULL;
- autoParm.ac_genParm.gp_closure = NULL;
- autoParm.ac_connHandle = ii_link->connHandle;
- autoParm.ac_tranHandle = ii_link->tranHandle;
-
- IIapi_autocommit(&autoParm);
- ii_sync(&(autoParm.ac_genParm));
-
- if (ii_success(&(autoParm.ac_genParm)) == II_FAIL) {
- RETURN_FALSE;
- }
-
- ii_link->autocommit = (ii_link->autocommit ? 0 : 1);
- ii_link->tranHandle = autoParm.ac_tranHandle;
- RETURN_TRUE;
-}
-/* }}} */
-
-#endif /* HAVE_II */
-
-/*
- * 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/ingres_ii/ii.h b/ext/ingres_ii/ii.h
deleted file mode 100644
index aa097cdc23..0000000000
--- a/ext/ingres_ii/ii.h
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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. |
- +----------------------------------------------------------------------+
- | Contributed by ECL IP'S Software & Services |
- | http://www.eclips-software.com |
- | mailto://idev@eclips-software.com |
- | Author: David Hénot <henot@php.net> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-#ifndef II_H
-#define II_H
-
-#if HAVE_II
-#include "php_ii.h"
-#include "iiapi.h"
-
-typedef struct _II_LINK {
- int autocommit;
- II_PTR connHandle;
- II_PTR tranHandle;
- II_PTR stmtHandle;
- II_LONG fieldCount;
- IIAPI_DESCRIPTOR *descriptor;
-} II_LINK;
-
-static int ii_sync(IIAPI_GENPARM *genParm);
-static int ii_success(IIAPI_GENPARM *genParm);
-#define II_FAIL 0
-#define II_OK 1
-#define II_NO_DATA 2
-static int _close_statement(II_LINK *link);
-static int _rollback_transaction(II_LINK *link TSRMLS_DC);
-static void _close_ii_link(II_LINK *link TSRMLS_DC);
-static void _close_ii_plink(zend_rsrc_list_entry *link TSRMLS_DC);
-static int php_ii_get_default_link(INTERNAL_FUNCTION_PARAMETERS);
-static void php_ii_set_default_link(int id TSRMLS_DC);
-static void php_ii_do_connect(INTERNAL_FUNCTION_PARAMETERS, int persistent);
-static char *php_ii_field_name(II_LINK *ii_link, int index TSRMLS_DC);
-static void php_ii_field_info(INTERNAL_FUNCTION_PARAMETERS, int info_type);
-static void php_ii_fetch(INTERNAL_FUNCTION_PARAMETERS, II_LINK *ii_link, int result_type);
-
-#endif /* HAVE_II */
-#endif /* II_H */
-
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- */
diff --git a/ext/ingres_ii/ingres.dsp b/ext/ingres_ii/ingres.dsp
deleted file mode 100644
index d7b515eed1..0000000000
--- a/ext/ingres_ii/ingres.dsp
+++ /dev/null
@@ -1,111 +0,0 @@
-# Microsoft Developer Studio Project File - Name="ingres" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=ingres - Win32 Debug_TS
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "ingres.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "ingres.mak" CFG="ingres - Win32 Debug_TS"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "ingres - Win32 Release_TS" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "ingres - Win32 Debug_TS" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "ingres - Win32 Release_TS"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release_TS"
-# PROP BASE Intermediate_Dir "Release_TS"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release_TS"
-# PROP Intermediate_Dir "Release_TS"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MD /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "INGRES_EXPORTS" /YX /FD /c
-# ADD CPP /nologo /MD /W3 /GX /O2 /I "..\.." /I "..\..\main" /I "..\..\Zend" /I "..\..\TSRM" /D ZEND_DEBUG=0 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "COMPILE_DL_INGRES_II" /D "ZEND_WIN32" /D "PHP_WIN32" /D HAVE_II=1 /D ZTS=1 /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x407 /d "NDEBUG"
-# ADD RSC /l 0x407 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386
-# ADD LINK32 php5ts.lib oiapi.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 /out:"..\..\Release_TS/php_ingres.dll" /libpath:"..\..\Release_TS" /libpath:"..\..\Release_TS_Inline"
-
-!ELSEIF "$(CFG)" == "ingres - Win32 Debug_TS"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug_TS"
-# PROP BASE Intermediate_Dir "Debug_TS"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug_TS"
-# PROP Intermediate_Dir "Debug_TS"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "INGRES_EXPORTS" /YX /FD /GZ /c
-# ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "..\.." /I "..\..\main" /I "..\..\Zend" /I "..\..\TSRM" /D ZEND_DEBUG=1 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "PHP_EXPORTS" /D "COMPILE_DL_INGRES_II" /D ZTS=1 /D "ZEND_WIN32" /D "PHP_WIN32" /D HAVE_II=1 /YX /FD /GZ /c
-# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x407 /d "_DEBUG"
-# ADD RSC /l 0x407 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 php5ts_debug.lib oiapi.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /out:"..\..\Debug_TS/php_ingres.dll" /pdbtype:sept /libpath:"..\..\Debug_TS"
-
-!ENDIF
-
-# Begin Target
-
-# Name "ingres - Win32 Release_TS"
-# Name "ingres - Win32 Debug_TS"
-# Begin Group "Source Files"
-
-# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
-# Begin Source File
-
-SOURCE=.\ii.c
-# End Source File
-# End Group
-# Begin Group "Header Files"
-
-# PROP Default_Filter "h;hpp;hxx;hm;inl"
-# Begin Source File
-
-SOURCE=.\ii.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\php_ii.h
-# End Source File
-# End Group
-# End Target
-# End Project
diff --git a/ext/ingres_ii/php_ii.h b/ext/ingres_ii/php_ii.h
deleted file mode 100644
index d15a2503c5..0000000000
--- a/ext/ingres_ii/php_ii.h
+++ /dev/null
@@ -1,100 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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. |
- +----------------------------------------------------------------------+
- | Contributed by ECL IP'S Software & Services |
- | http://www.eclips-software.com |
- | mailto://idev@eclips-software.com |
- | Author: David Hénot <henot@php.net> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-#ifndef PHP_II_H
-#define PHP_II_H
-
-#if HAVE_II
-
-extern zend_module_entry ingres_ii_module_entry;
-#define phpext_ingres_ii_ptr &ingres_ii_module_entry
-
-#ifdef PHP_WIN32
-#define PHP_II_API __declspec(dllexport)
-#else
-#define PHP_II_API
-#endif
-
-PHP_MINIT_FUNCTION(ii);
-PHP_MSHUTDOWN_FUNCTION(ii);
-PHP_RINIT_FUNCTION(ii);
-PHP_RSHUTDOWN_FUNCTION(ii);
-PHP_MINFO_FUNCTION(ii);
-
-PHP_FUNCTION(ingres_connect);
-PHP_FUNCTION(ingres_pconnect);
-PHP_FUNCTION(ingres_close);
-PHP_FUNCTION(ingres_query);
-PHP_FUNCTION(ingres_num_rows);
-PHP_FUNCTION(ingres_num_fields);
-PHP_FUNCTION(ingres_field_name);
-PHP_FUNCTION(ingres_field_type);
-PHP_FUNCTION(ingres_field_nullable);
-PHP_FUNCTION(ingres_field_length);
-PHP_FUNCTION(ingres_field_precision);
-PHP_FUNCTION(ingres_field_scale);
-PHP_FUNCTION(ingres_fetch_array);
-PHP_FUNCTION(ingres_fetch_row);
-PHP_FUNCTION(ingres_fetch_object);
-PHP_FUNCTION(ingres_rollback);
-PHP_FUNCTION(ingres_commit);
-PHP_FUNCTION(ingres_autocommit);
-
-ZEND_BEGIN_MODULE_GLOBALS(ii)
- long allow_persistent;
- long max_persistent;
- long max_links;
- char *default_database;
- char *default_user;
- char *default_password;
-
- long num_persistent;
- long num_links;
- long default_link;
-ZEND_END_MODULE_GLOBALS(ii)
-
-#define II_ASSOC (1<<0)
-#define II_NUM (1<<1)
-#define II_BOTH (II_ASSOC|II_NUM)
-
-#ifdef ZTS
-#define IIG(v) TSRMG(ii_globals_id, zend_ii_globals *, v)
-#else
-#define IIG(v) (ii_globals.v)
-#endif
-
-#else
-
-#define phpext_ii_ptr NULL
-
-#endif
-
-#endif /* PHP_II_H */
-
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- */
diff --git a/ext/interbase/CREDITS b/ext/interbase/CREDITS
deleted file mode 100644
index d66f13b5f3..0000000000
--- a/ext/interbase/CREDITS
+++ /dev/null
@@ -1,2 +0,0 @@
-InterBase
-Jouni Ahto, Andrew Avdeev, Ard Biesheuvel
diff --git a/ext/interbase/config.m4 b/ext/interbase/config.m4
deleted file mode 100644
index 5f8d66ba8b..0000000000
--- a/ext/interbase/config.m4
+++ /dev/null
@@ -1,46 +0,0 @@
-dnl
-dnl $Id$
-dnl
-
-PHP_ARG_WITH(interbase,for InterBase support,
-[ --with-interbase[=DIR] Include InterBase support. DIR is the InterBase base
- install directory, defaults to /usr/interbase])
-
-if test "$PHP_INTERBASE" != "no"; then
- if test "$PHP_INTERBASE" = "yes"; then
- IBASE_INCDIR=/usr/interbase/include
- IBASE_LIBDIR=/usr/interbase/lib
- else
- IBASE_INCDIR=$PHP_INTERBASE/include
- IBASE_LIBDIR=$PHP_INTERBASE/lib
- fi
-
- PHP_CHECK_LIBRARY(fbclient, isc_detach_database,
- [
- IBASE_LIBNAME=fbclient
- ], [
- PHP_CHECK_LIBRARY(gds, isc_detach_database,
- [
- IBASE_LIBNAME=gds
- ], [
- PHP_CHECK_LIBRARY(ib_util, isc_detach_database,
- [
- IBASE_LIBNAME=ib_util
- ], [
- AC_MSG_ERROR([libgds, libib_util or libfbclient not found! Check config.log for more information.])
- ], [
- -L$IBASE_LIBDIR
- ])
- ], [
- -L$IBASE_LIBDIR
- ])
- ], [
- -L$IBASE_LIBDIR
- ])
-
- PHP_ADD_LIBRARY_WITH_PATH($IBASE_LIBNAME, $IBASE_LIBDIR, INTERBASE_SHARED_LIBADD)
- PHP_ADD_INCLUDE($IBASE_INCDIR)
- AC_DEFINE(HAVE_IBASE,1,[ ])
- PHP_NEW_EXTENSION(interbase, interbase.c ibase_query.c ibase_service.c ibase_events.c ibase_blobs.c, $ext_shared)
- PHP_SUBST(INTERBASE_SHARED_LIBADD)
-fi
diff --git a/ext/interbase/config.w32 b/ext/interbase/config.w32
deleted file mode 100644
index 78a442d8ca..0000000000
--- a/ext/interbase/config.w32
+++ /dev/null
@@ -1,17 +0,0 @@
-// $Id$
-// vim:ft=javascript
-
-ARG_WITH("interbase", "InterBase support", "no");
-
-if (PHP_INTERBASE != "no") {
-
- if (CHECK_HEADER_ADD_INCLUDE("ibase.h", "CFLAGS_INTERBASE", PHP_PHP_BUILD + "\\interbase\\include;" + PHP_INTERBASE) &&
- (CHECK_LIB("fbclient_ms.lib", "interbase", PHP_PHP_BUILD + "\\interbase\\lib_ms;" + PHP_INTERBASE) ||
- CHECK_LIB("gds32_ms.lib", "interbase", PHP_PHP_BUILD + "\\interbase\\lib_ms;" + PHP_INTERBASE))) {
-
- EXTENSION("interbase", "interbase.c ibase_query.c ibase_service.c ibase_events.c ibase_blobs.c");
- AC_DEFINE('HAVE_IBASE', 1, 'Have interbase library');
- } else {
- WARNING("interbase not enabled; libraries and headers not found");
- }
-}
diff --git a/ext/interbase/ibase_blobs.c b/ext/interbase/ibase_blobs.c
deleted file mode 100644
index ac5502c1c8..0000000000
--- a/ext/interbase/ibase_blobs.c
+++ /dev/null
@@ -1,594 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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. |
- +----------------------------------------------------------------------+
- | Authors: Ard Biesheuvel <a.k.biesheuvel@its.tudelft.nl> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "php.h"
-
-#if HAVE_IBASE
-
-#include "php_interbase.h"
-#include "php_ibase_includes.h"
-
-#define BLOB_CLOSE 1
-#define BLOB_CANCEL 2
-
-static int le_blob;
-
-static void _php_ibase_free_blob(zend_rsrc_list_entry *rsrc TSRMLS_DC) /* {{{ */
-{
- ibase_blob *ib_blob = (ibase_blob *)rsrc->ptr;
-
- if (ib_blob->bl_handle != NULL) { /* blob open*/
- if (isc_cancel_blob(IB_STATUS, &ib_blob->bl_handle)) {
- _php_ibase_module_error("You can lose data. Close any blob after reading from or "
- "writing to it. Use ibase_blob_close() before calling ibase_close()" TSRMLS_CC);
- }
- }
- efree(ib_blob);
-}
-/* }}} */
-
-void php_ibase_blobs_minit(INIT_FUNC_ARGS) /* {{{ */
-{
- le_blob = zend_register_list_destructors_ex(_php_ibase_free_blob, NULL,
- "interbase blob", module_number);
-}
-/* }}} */
-
-int _php_ibase_string_to_quad(char const *id, ISC_QUAD *qd) /* {{{ */
-{
- /* shortcut for most common case */
- if (sizeof(ISC_QUAD) == sizeof(ISC_UINT64)) {
- return sscanf(id, BLOB_ID_MASK, (ISC_UINT64 *) qd);
- } else {
- ISC_UINT64 res;
- if (sscanf(id, BLOB_ID_MASK, &res)) {
- qd->gds_quad_high = (ISC_LONG) (res >> 0x20);
- qd->gds_quad_low = (ISC_LONG) (res & 0xFFFFFFFF);
- return 1;
- }
- return 0;
- }
-}
-/* }}} */
-
-char *_php_ibase_quad_to_string(ISC_QUAD const qd) /* {{{ */
-{
- char *result = (char *) emalloc(BLOB_ID_LEN+1);
-
- /* shortcut for most common case */
- if (sizeof(ISC_QUAD) == sizeof(ISC_UINT64)) {
- sprintf(result, "0x%0*" LL_MASK "x", 16, *(ISC_UINT64*)(void *) &qd);
- } else {
- ISC_UINT64 res = ((ISC_UINT64) qd.gds_quad_high << 0x20) | qd.gds_quad_low;
- sprintf(result, "0x%0*" LL_MASK "x", 16, res);
- }
- result[BLOB_ID_LEN] = '\0';
- return result;
-}
-/* }}} */
-
-typedef struct { /* {{{ */
- ISC_LONG max_segment; /* Length of longest segment */
- ISC_LONG num_segments; /* Total number of segments */
- ISC_LONG total_length; /* Total length of blob */
- int bl_stream; /* blob is stream ? */
-/* }}} */
-} IBASE_BLOBINFO;
-
-int _php_ibase_blob_get(zval *return_value, ibase_blob *ib_blob, unsigned long max_len TSRMLS_DC) /* {{{ */
-{
- if (ib_blob->bl_qd.gds_quad_high || ib_blob->bl_qd.gds_quad_low) { /*not null ?*/
-
- ISC_STATUS stat;
- char *bl_data;
- unsigned long cur_len;
- unsigned short seg_len;
-
- bl_data = emalloc(max_len + 1);
-
- for (cur_len = stat = 0; (stat == 0 || stat == isc_segment) && cur_len < max_len; cur_len += seg_len) {
-
- unsigned short chunk_size = (max_len-cur_len) > USHRT_MAX ? USHRT_MAX
- : (unsigned short)(max_len-cur_len);
-
- stat = isc_get_segment(IB_STATUS, &ib_blob->bl_handle, &seg_len, chunk_size, &bl_data[cur_len]);
- }
-
- bl_data[cur_len] = '\0';
- if (IB_STATUS[0] == 1 && (stat != 0 && stat != isc_segstr_eof && stat != isc_segment)) {
- efree(bl_data);
- _php_ibase_error(TSRMLS_C);
- return FAILURE;
- }
- RETVAL_STRINGL(bl_data, cur_len, 0);
- } else { /* null blob */
- RETVAL_STRING("", 1); /* empty string */
- }
- return SUCCESS;
-}
-/* }}} */
-
-int _php_ibase_blob_add(zval **string_arg, ibase_blob *ib_blob TSRMLS_DC) /* {{{ */
-{
- unsigned long put_cnt = 0, rem_cnt;
- unsigned short chunk_size;
-
- convert_to_string_ex(string_arg);
-
- for (rem_cnt = Z_STRLEN_PP(string_arg); rem_cnt > 0; rem_cnt -= chunk_size) {
-
- chunk_size = rem_cnt > USHRT_MAX ? USHRT_MAX : (unsigned short)rem_cnt;
-
- if (isc_put_segment(IB_STATUS, &ib_blob->bl_handle, chunk_size, &Z_STRVAL_PP(string_arg)[put_cnt] )) {
- _php_ibase_error(TSRMLS_C);
- return FAILURE;
- }
- put_cnt += chunk_size;
- }
- return SUCCESS;
-}
-/* }}} */
-
-static int _php_ibase_blob_info(isc_blob_handle bl_handle, IBASE_BLOBINFO *bl_info TSRMLS_DC) /* {{{ */
-{
- static char bl_items[] = {
- isc_info_blob_num_segments,
- isc_info_blob_max_segment,
- isc_info_blob_total_length,
- isc_info_blob_type
- };
-
- char bl_inf[sizeof(long)*8], *p;
-
- bl_info->max_segment = 0;
- bl_info->num_segments = 0;
- bl_info->total_length = 0;
- bl_info->bl_stream = 0;
-
- if (isc_blob_info(IB_STATUS, &bl_handle, sizeof(bl_items), bl_items, sizeof(bl_inf), bl_inf)) {
- _php_ibase_error(TSRMLS_C);
- return FAILURE;
- }
-
- for (p = bl_inf; *p != isc_info_end && p < bl_inf + sizeof(bl_inf);) {
- unsigned short item_len;
- int item = *p++;
-
- item_len = (short) isc_vax_integer(p, 2);
- p += 2;
- switch (item) {
- case isc_info_blob_num_segments:
- bl_info->num_segments = isc_vax_integer(p, item_len);
- break;
- case isc_info_blob_max_segment:
- bl_info->max_segment = isc_vax_integer(p, item_len);
- break;
- case isc_info_blob_total_length:
- bl_info->total_length = isc_vax_integer(p, item_len);
- break;
- case isc_info_blob_type:
- bl_info->bl_stream = isc_vax_integer(p, item_len);
- break;
- case isc_info_end:
- break;
- case isc_info_truncated:
- case isc_info_error: /* hmm. don't think so...*/
- _php_ibase_module_error("PHP module internal error" TSRMLS_CC);
- return FAILURE;
- } /* switch */
- p += item_len;
- } /* for */
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ proto resource ibase_blob_create([resource link_identifier])
- Create blob for adding data */
-PHP_FUNCTION(ibase_blob_create)
-{
- zval *link = NULL;
- ibase_db_link *ib_link;
- ibase_trans *trans = NULL;
- ibase_blob *ib_blob;
-
- RESET_ERRMSG;
-
- if (FAILURE == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|r", &link)) {
- RETURN_FALSE;
- }
-
- PHP_IBASE_LINK_TRANS(link, ib_link, trans);
-
- ib_blob = (ibase_blob *) emalloc(sizeof(ibase_blob));
- ib_blob->bl_handle = NULL;
- ib_blob->type = BLOB_INPUT;
-
- if (isc_create_blob(IB_STATUS, &ib_link->handle, &trans->handle, &ib_blob->bl_handle, &ib_blob->bl_qd)) {
- _php_ibase_error(TSRMLS_C);
- efree(ib_blob);
- RETURN_FALSE;
- }
-
- ZEND_REGISTER_RESOURCE(return_value, ib_blob, le_blob);
-}
-/* }}} */
-
-/* {{{ proto resource ibase_blob_open([ resource link_identifier, ] string blob_id)
- Open blob for retrieving data parts */
-PHP_FUNCTION(ibase_blob_open)
-{
- char *blob_id;
- int blob_id_len;
- zval *link = NULL;
- ibase_db_link *ib_link;
- ibase_trans *trans = NULL;
- ibase_blob *ib_blob;
-
- RESET_ERRMSG;
-
- switch (ZEND_NUM_ARGS()) {
- default:
- WRONG_PARAM_COUNT;
- case 1:
- if (FAILURE == zend_parse_parameters(1 TSRMLS_CC, "s", &blob_id, &blob_id_len)) {
- RETURN_FALSE;
- }
- break;
- case 2:
- if (FAILURE == zend_parse_parameters(2 TSRMLS_CC, "rs", &link, &blob_id, &blob_id_len)) {
- RETURN_FALSE;
- }
- break;
- }
-
- PHP_IBASE_LINK_TRANS(link, ib_link, trans);
-
- ib_blob = (ibase_blob *) emalloc(sizeof(ibase_blob));
- ib_blob->bl_handle = NULL;
- ib_blob->type = BLOB_OUTPUT;
-
- do {
- if (! _php_ibase_string_to_quad(blob_id, &ib_blob->bl_qd)) {
- _php_ibase_module_error("String is not a BLOB ID" TSRMLS_CC);
- break;
- }
-
- if (isc_open_blob(IB_STATUS, &ib_link->handle, &trans->handle, &ib_blob->bl_handle,
- &ib_blob->bl_qd)) {
- _php_ibase_error(TSRMLS_C);
- break;
- }
-
- ZEND_REGISTER_RESOURCE(return_value, ib_blob, le_blob);
- return;
-
- } while (0);
-
- efree(ib_blob);
- RETURN_FALSE;
-}
-/* }}} */
-
-/* {{{ proto bool ibase_blob_add(resource blob_handle, string data)
- Add data into created blob */
-PHP_FUNCTION(ibase_blob_add)
-{
- zval **blob_arg, **string_arg;
- ibase_blob *ib_blob;
-
- RESET_ERRMSG;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &blob_arg, &string_arg) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(ib_blob, ibase_blob *, blob_arg, -1, "Interbase blob", le_blob);
-
- if (ib_blob->type != BLOB_INPUT) {
- _php_ibase_module_error("BLOB is not open for input" TSRMLS_CC);
- RETURN_FALSE;
- }
-
- if (_php_ibase_blob_add(string_arg, ib_blob TSRMLS_CC) != SUCCESS) {
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-/* {{{ proto string ibase_blob_get(resource blob_handle, int len)
- Get len bytes data from open blob */
-PHP_FUNCTION(ibase_blob_get)
-{
- zval **blob_arg, **len_arg;
- ibase_blob *ib_blob;
-
- RESET_ERRMSG;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &blob_arg, &len_arg) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(ib_blob, ibase_blob *, blob_arg, -1, "Interbase blob", le_blob);
-
- if (ib_blob->type != BLOB_OUTPUT) {
- _php_ibase_module_error("BLOB is not open for output" TSRMLS_CC);
- RETURN_FALSE;
- }
-
- convert_to_long_ex(len_arg);
-
- if (_php_ibase_blob_get(return_value, ib_blob, Z_LVAL_PP(len_arg) TSRMLS_CC) != SUCCESS) {
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-static void _php_ibase_blob_end(INTERNAL_FUNCTION_PARAMETERS, int bl_end) /* {{{ */
-{
- zval **blob_arg;
- ibase_blob *ib_blob;
-
- RESET_ERRMSG;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &blob_arg) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(ib_blob, ibase_blob *, blob_arg, -1, "Interbase blob", le_blob);
-
- if (bl_end == BLOB_CLOSE) { /* return id here */
-
- if (ib_blob->bl_qd.gds_quad_high || ib_blob->bl_qd.gds_quad_low) { /*not null ?*/
- if (isc_close_blob(IB_STATUS, &ib_blob->bl_handle)) {
- _php_ibase_error(TSRMLS_C);
- RETURN_FALSE;
- }
- }
- ib_blob->bl_handle = NULL;
-
- RETVAL_STRINGL(_php_ibase_quad_to_string(ib_blob->bl_qd), BLOB_ID_LEN, 0);
- } else { /* discard created blob */
- if (isc_cancel_blob(IB_STATUS, &ib_blob->bl_handle)) {
- _php_ibase_error(TSRMLS_C);
- RETURN_FALSE;
- }
- ib_blob->bl_handle = NULL;
- RETVAL_TRUE;
- }
- zend_list_delete(Z_LVAL_PP(blob_arg));
-}
-/* }}} */
-
-/* {{{ proto string ibase_blob_close(resource blob_handle)
- Close blob */
-PHP_FUNCTION(ibase_blob_close)
-{
- _php_ibase_blob_end(INTERNAL_FUNCTION_PARAM_PASSTHRU, BLOB_CLOSE);
-}
-/* }}} */
-
-/* {{{ proto bool ibase_blob_cancel(resource blob_handle)
- Cancel creating blob */
-PHP_FUNCTION(ibase_blob_cancel)
-{
- _php_ibase_blob_end(INTERNAL_FUNCTION_PARAM_PASSTHRU, BLOB_CANCEL);
-}
-/* }}} */
-
-/* {{{ proto array ibase_blob_info([ resource link_identifier, ] string blob_id)
- Return blob length and other useful info */
-PHP_FUNCTION(ibase_blob_info)
-{
- char *blob_id;
- int blob_id_len;
- zval *link = NULL;
- ibase_db_link *ib_link;
- ibase_trans *trans = NULL;
- ibase_blob ib_blob = { NULL, BLOB_INPUT };
- IBASE_BLOBINFO bl_info;
-
- RESET_ERRMSG;
-
- switch (ZEND_NUM_ARGS()) {
- default:
- WRONG_PARAM_COUNT;
- case 1:
- if (FAILURE == zend_parse_parameters(1 TSRMLS_CC, "s", &blob_id, &blob_id_len)) {
- RETURN_FALSE;
- }
- break;
- case 2:
- if (FAILURE == zend_parse_parameters(2 TSRMLS_CC, "rs", &link, &blob_id, &blob_id_len)) {
- RETURN_FALSE;
- }
- break;
- }
-
- PHP_IBASE_LINK_TRANS(link, ib_link, trans);
-
- if (! _php_ibase_string_to_quad(blob_id, &ib_blob.bl_qd)) {
- _php_ibase_module_error("Unrecognized BLOB ID" TSRMLS_CC);
- RETURN_FALSE;
- }
-
- if (ib_blob.bl_qd.gds_quad_high || ib_blob.bl_qd.gds_quad_low) { /* not null ? */
- if (isc_open_blob(IB_STATUS, &ib_link->handle, &trans->handle, &ib_blob.bl_handle,
- &ib_blob.bl_qd)) {
- _php_ibase_error(TSRMLS_C);
- RETURN_FALSE;
- }
-
- if (_php_ibase_blob_info(ib_blob.bl_handle, &bl_info TSRMLS_CC)) {
- RETURN_FALSE;
- }
- if (isc_close_blob(IB_STATUS, &ib_blob.bl_handle)) {
- _php_ibase_error(TSRMLS_C);
- RETURN_FALSE;
- }
- } else { /* null blob, all values to zero */
- bl_info.max_segment = 0;
- bl_info.num_segments = 0;
- bl_info.total_length = 0;
- bl_info.bl_stream = 0;
- }
-
- array_init(return_value);
-
- add_index_long(return_value, 0, bl_info.total_length);
- add_assoc_long(return_value, "length", bl_info.total_length);
-
- add_index_long(return_value, 1, bl_info.num_segments);
- add_assoc_long(return_value, "numseg", bl_info.num_segments);
-
- add_index_long(return_value, 2, bl_info.max_segment);
- add_assoc_long(return_value, "maxseg", bl_info.max_segment);
-
- add_index_bool(return_value, 3, bl_info.bl_stream);
- add_assoc_bool(return_value, "stream", bl_info.bl_stream);
-
- add_index_bool(return_value, 4, (!ib_blob.bl_qd.gds_quad_high && !ib_blob.bl_qd.gds_quad_low));
- add_assoc_bool(return_value, "isnull", (!ib_blob.bl_qd.gds_quad_high && !ib_blob.bl_qd.gds_quad_low));
-}
-/* }}} */
-
-/* {{{ proto bool ibase_blob_echo([ resource link_identifier, ] string blob_id)
- Output blob contents to browser */
-PHP_FUNCTION(ibase_blob_echo)
-{
- char *blob_id;
- int blob_id_len;
- zval *link = NULL;
- ibase_db_link *ib_link;
- ibase_trans *trans = NULL;
- ibase_blob ib_blob_id = { NULL, BLOB_OUTPUT };
- char bl_data[IBASE_BLOB_SEG];
- unsigned short seg_len;
-
- RESET_ERRMSG;
-
- switch (ZEND_NUM_ARGS()) {
- default:
- WRONG_PARAM_COUNT;
- case 1:
- if (FAILURE == zend_parse_parameters(1 TSRMLS_CC, "s", &blob_id, &blob_id_len)) {
- RETURN_FALSE;
- }
- break;
- case 2:
- if (FAILURE == zend_parse_parameters(2 TSRMLS_CC, "rs", &link, &blob_id, &blob_id_len)) {
- RETURN_FALSE;
- }
- break;
- }
-
- PHP_IBASE_LINK_TRANS(link, ib_link, trans);
-
- if (! _php_ibase_string_to_quad(blob_id, &ib_blob_id.bl_qd)) {
- _php_ibase_module_error("Unrecognized BLOB ID" TSRMLS_CC);
- RETURN_FALSE;
- }
-
- do {
- if (isc_open_blob(IB_STATUS, &ib_link->handle, &trans->handle, &ib_blob_id.bl_handle,
- &ib_blob_id.bl_qd)) {
- break;
- }
-
- while (!isc_get_segment(IB_STATUS, &ib_blob_id.bl_handle, &seg_len, sizeof(bl_data), bl_data)
- || IB_STATUS[1] == isc_segment) {
- PHPWRITE(bl_data, seg_len);
- }
-
- if (IB_STATUS[0] && (IB_STATUS[1] != isc_segstr_eof)) {
- break;
- }
-
- if (isc_close_blob(IB_STATUS, &ib_blob_id.bl_handle)) {
- break;
- }
- RETURN_TRUE;
- } while (0);
-
- _php_ibase_error(TSRMLS_C);
- RETURN_FALSE;
-}
-/* }}} */
-
-/* {{{ proto string ibase_blob_import([ resource link_identifier, ] resource file)
- Create blob, copy file in it, and close it */
-PHP_FUNCTION(ibase_blob_import)
-{
- zval *link = NULL, *file;
- int size;
- unsigned short b;
- ibase_blob ib_blob = { NULL, 0 };
- ibase_db_link *ib_link;
- ibase_trans *trans = NULL;
- char bl_data[IBASE_BLOB_SEG];
- php_stream *stream;
-
- RESET_ERRMSG;
-
- if (FAILURE == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r|r",
- (ZEND_NUM_ARGS()-1) ? &link : &file, &file)) {
- RETURN_FALSE;
- }
-
- PHP_IBASE_LINK_TRANS(link, ib_link, trans);
-
- php_stream_from_zval(stream, &file);
-
- do {
- if (isc_create_blob(IB_STATUS, &ib_link->handle, &trans->handle, &ib_blob.bl_handle,
- &ib_blob.bl_qd)) {
- break;
- }
-
- for (size = 0; (b = php_stream_read(stream, bl_data, sizeof(bl_data))); size += b) {
- if (isc_put_segment(IB_STATUS, &ib_blob.bl_handle, b, bl_data)) {
- break;
- }
- }
-
- if (isc_close_blob(IB_STATUS, &ib_blob.bl_handle)) {
- break;
- }
- RETURN_STRINGL( _php_ibase_quad_to_string(ib_blob.bl_qd), BLOB_ID_LEN, 0);
- } while (0);
-
- _php_ibase_error(TSRMLS_C);
- RETURN_FALSE;
-}
-/* }}} */
-
-#endif /* HAVE_IBASE */
-
-/*
- * 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/interbase/ibase_events.c b/ext/interbase/ibase_events.c
deleted file mode 100644
index 2408c4a989..0000000000
--- a/ext/interbase/ibase_events.c
+++ /dev/null
@@ -1,385 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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. |
- +----------------------------------------------------------------------+
- | Authors: Ard Biesheuvel <a.k.biesheuvel@its.tudelft.nl> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "php.h"
-
-#if HAVE_IBASE
-
-#include "php_interbase.h"
-#include "php_ibase_includes.h"
-
-static int le_event;
-
-static void _php_ibase_event_free(char *event_buf, char *result_buf) /* {{{ */
-{
- isc_free(event_buf);
- isc_free(result_buf);
-}
-/* }}} */
-
-void _php_ibase_free_event(ibase_event *event TSRMLS_DC) /* {{{ */
-{
- unsigned short i;
-
- event->state = DEAD;
-
- if (event->link != NULL) {
- ibase_event **node;
-
- if (event->link->handle != NULL &&
- isc_cancel_events(IB_STATUS, &event->link->handle, &event->event_id)) {
- _php_ibase_error(TSRMLS_C);
- }
-
- /* delete this event from the link struct */
- for (node = &event->link->event_head; *node != event; node = &(*node)->event_next);
- *node = event->event_next;
- }
-
- if (event->callback) {
- zval_dtor(event->callback);
- FREE_ZVAL(event->callback);
- event->callback = NULL;
-
- _php_ibase_event_free(event->event_buffer,event->result_buffer);
-
- for (i = 0; i < event->event_count; ++i) {
- efree(event->events[i]);
- }
- efree(event->events);
- }
-}
-/* }}} */
-
-static void _php_ibase_free_event_rsrc(zend_rsrc_list_entry *rsrc TSRMLS_DC) /* {{{ */
-{
- ibase_event *e = (ibase_event *) rsrc->ptr;
-
- _php_ibase_free_event(e TSRMLS_CC);
-
- efree(e);
-}
-/* }}} */
-
-void php_ibase_events_minit(INIT_FUNC_ARGS) /* {{{ */
-{
- le_event = zend_register_list_destructors_ex(_php_ibase_free_event_rsrc, NULL,
- "interbase event", module_number);
-}
-/* }}} */
-
-static void _php_ibase_event_block(ibase_db_link *ib_link, unsigned short count, /* {{{ */
- char **events, unsigned short *l, char **event_buf, char **result_buf)
-{
- ISC_STATUS dummy_result[20];
- unsigned long dummy_count[15];
-
- /**
- * Unfortunately, there's no clean and portable way in C to pass arguments to
- * a variadic function if you don't know the number of arguments at compile time.
- * (And even if there were a way, the Interbase API doesn't provide a version of
- * this function that takes a va_list as an argument)
- *
- * In this case, the number of arguments is limited to 18 by the underlying API,
- * so we can work around it.
- */
-
- *l = (unsigned short) isc_event_block(event_buf, result_buf, count, events[0],
- events[1], events[2], events[3], events[4], events[5], events[6], events[7],
- events[8], events[9], events[10], events[11], events[12], events[13], events[14]);
-
- /**
- * Currently, this is the only way to correctly initialize an event buffer.
- * This is clearly something that should be fixed, cause the semantics of
- * isc_wait_for_event() indicate that it blocks until an event occurs.
- * If the Firebird people ever fix this, these lines should be removed,
- * otherwise, events will have to fire twice before ibase_wait_event() returns.
- */
-
- isc_wait_for_event(dummy_result, &ib_link->handle, *l, *event_buf, *result_buf);
- isc_event_counts(dummy_count, *l, *event_buf, *result_buf);
-}
-/* }}} */
-
-/* {{{ proto string ibase_wait_event([resource link_identifier,] string event [, string event [, ...]])
- Waits for any one of the passed Interbase events to be posted by the database, and returns its name */
-PHP_FUNCTION(ibase_wait_event)
-{
- zval **args[16];
- ibase_db_link *ib_link;
- char *event_buffer, *result_buffer, *events[15];
- unsigned short i = 0, event_count = 0, buffer_size;
- unsigned long occurred_event[15];
-
- RESET_ERRMSG;
-
- /* no more than 15 events */
- if (ZEND_NUM_ARGS() < 1 || ZEND_NUM_ARGS() > 16) {
- WRONG_PARAM_COUNT;
- }
-
- if (zend_get_parameters_array_ex(ZEND_NUM_ARGS(), args) == FAILURE) {
- RETURN_FALSE;
- }
-
- if (Z_TYPE_PP(args[0]) == IS_RESOURCE) {
-
- ZEND_FETCH_RESOURCE2(ib_link, ibase_db_link *, args[0], -1, "InterBase link", le_link, le_plink);
- i = 1;
-
- } else {
-
- if (ZEND_NUM_ARGS() > 15) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE2(ib_link, ibase_db_link *, NULL, IBG(default_link), "InterBase link", le_link, le_plink);
- }
-
- for (; i < ZEND_NUM_ARGS(); ++i) {
- convert_to_string_ex(args[i]);
- events[event_count++] = Z_STRVAL_PP(args[i]);
- }
-
- /* fills the required data structure with information about the events */
- _php_ibase_event_block(ib_link, event_count, events, &buffer_size, &event_buffer, &result_buffer);
-
- /* now block until an event occurs */
- if (isc_wait_for_event(IB_STATUS, &ib_link->handle, buffer_size, event_buffer, result_buffer)) {
- _php_ibase_error(TSRMLS_C);
- _php_ibase_event_free(event_buffer,result_buffer);
- RETURN_FALSE;
- }
-
- /* find out which event occurred */
- isc_event_counts(occurred_event, buffer_size, event_buffer, result_buffer);
- for (i = 0; i < event_count; ++i) {
- if (occurred_event[i]) {
- char *result = estrdup(events[i]);
- _php_ibase_event_free(event_buffer,result_buffer);
- RETURN_STRING(result,0);
- }
- }
-
- /* If we reach this line, isc_wait_for_event() did return, but we don't know
- which event fired. */
- _php_ibase_event_free(event_buffer,result_buffer);
- RETURN_FALSE;
-}
-/* }}} */
-
-static isc_callback _php_ibase_callback(ibase_event *event, /* {{{ */
- unsigned short buffer_size, char *result_buf)
-{
- /* this function is called asynchronously by the Interbase client library. */
- TSRMLS_FETCH_FROM_CTX(event->thread_ctx);
-
- /**
- * The callback function is called when the event is first registered and when the event
- * is cancelled. I consider this is a bug. By clearing event->callback first and setting
- * it to -1 later, we make sure nothing happens if no event was actually posted.
- */
- switch (event->state) {
- unsigned short i;
- unsigned long occurred_event[15];
- zval event_name, link_id, return_value, *args[2];
-
- default: /* == DEAD */
- break;
- case ACTIVE:
- args[0] = &event_name;
- args[1] = &link_id;
-
- /* copy the updated results into the result buffer */
- memcpy(event->result_buffer, result_buf, buffer_size);
-
- INIT_ZVAL(event_name);
- INIT_ZVAL(link_id);
- ZVAL_RESOURCE(&link_id, event->link_res_id);
-
- /* find out which event occurred */
- isc_event_counts(occurred_event, buffer_size, event->event_buffer, event->result_buffer);
- for (i = 0; i < event->event_count; ++i) {
- if (occurred_event[i]) {
- ZVAL_STRING(&event_name,event->events[i],0);
- break;
- }
- }
-
- /* call the callback provided by the user */
- if (SUCCESS != call_user_function(EG(function_table), NULL,
- event->callback, &return_value, 2, args TSRMLS_CC)) {
- _php_ibase_module_error("Error calling callback %s" TSRMLS_CC, Z_STRVAL_P(event->callback));
- break;
- }
-
- if (Z_TYPE(return_value) == IS_BOOL && !Z_BVAL(return_value)) {
- event->state = DEAD;
- break;
- }
- case NEW:
- /* re-register the event */
- if (isc_que_events(IB_STATUS, &event->link->handle, &event->event_id, buffer_size,
- event->event_buffer,(isc_callback)_php_ibase_callback, (void *)event)) {
-
- _php_ibase_error(TSRMLS_C);
- }
- event->state = ACTIVE;
- }
- return 0;
-}
-/* }}} */
-
-/* {{{ proto resource ibase_set_event_handler([resource link_identifier,] callback handler, string event [, string event [, ...]])
- Register the callback for handling each of the named events */
-PHP_FUNCTION(ibase_set_event_handler)
-{
- /**
- * The callback passed to this function should take an event name (string) and a
- * link resource id (int) as arguments. The value returned from the function is
- * used to determine if the event handler should remain set.
- */
-
- zval **args[17], **cb_arg;
- ibase_db_link *ib_link;
- ibase_event *event;
- unsigned short i = 1, buffer_size;
- int link_res_id;
-
- RESET_ERRMSG;
-
- /* no more than 15 events */
- if (ZEND_NUM_ARGS() < 2 || ZEND_NUM_ARGS() > 17) {
- WRONG_PARAM_COUNT;
- }
-
- if (zend_get_parameters_array_ex(ZEND_NUM_ARGS(), args) == FAILURE) {
- RETURN_FALSE;
- }
-
- /* get a working link */
- if (Z_TYPE_PP(args[0]) != IS_STRING) {
-
- cb_arg = args[1];
- i = 2;
-
- ZEND_FETCH_RESOURCE2(ib_link, ibase_db_link *, args[0], -1,
- "InterBase link", le_link, le_plink);
-
- convert_to_long_ex(args[0]);
- link_res_id = Z_LVAL_PP(args[0]);
-
- } else {
-
- if (ZEND_NUM_ARGS() > 16) {
- WRONG_PARAM_COUNT;
- }
-
- cb_arg = args[0];
-
- ZEND_FETCH_RESOURCE2(ib_link, ibase_db_link *, NULL, IBG(default_link),
- "InterBase link", le_link, le_plink);
- link_res_id = IBG(default_link);
- }
-
- /* 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));
- RETURN_FALSE;
- }
-
- /* allocate the event resource */
- event = (ibase_event *) safe_emalloc(sizeof(ibase_event), 1, 0);
- TSRMLS_SET_CTX(event->thread_ctx);
- event->link_res_id = link_res_id;
- event->link = ib_link;
- event->event_count = 0;
- event->state = NEW;
- event->events = (char **) safe_emalloc(sizeof(char *),ZEND_NUM_ARGS()-i,0);
-
- ALLOC_ZVAL(event->callback);
- *event->callback = **cb_arg;
- INIT_PZVAL(event->callback);
- zval_copy_ctor(event->callback);
-
- for (; i < ZEND_NUM_ARGS(); ++i) {
- convert_to_string_ex(args[i]);
- event->events[event->event_count++] = estrdup(Z_STRVAL_PP(args[i]));
- }
-
- /* fills the required data structure with information about the events */
- _php_ibase_event_block(ib_link, event->event_count, event->events,
- &buffer_size, &event->event_buffer, &event->result_buffer);
-
- /* now register the events with the Interbase API */
- if (isc_que_events(IB_STATUS, &ib_link->handle, &event->event_id, buffer_size,
- event->event_buffer,(isc_callback)_php_ibase_callback, (void *)event)) {
-
- _php_ibase_error(TSRMLS_C);
- efree(event);
- RETURN_FALSE;
- }
-
- event->event_next = ib_link->event_head;
- ib_link->event_head = event;
-
- ZEND_REGISTER_RESOURCE(return_value, event, le_event);
- zend_list_addref(Z_LVAL_P(return_value));
-}
-/* }}} */
-
-/* {{{ proto bool ibase_free_event_handler(resource event)
- Frees the event handler set by ibase_set_event_handler() */
-PHP_FUNCTION(ibase_free_event_handler)
-{
- zval *event_arg;
-
- RESET_ERRMSG;
-
- if (SUCCESS == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &event_arg)) {
- ibase_event *event;
-
- ZEND_FETCH_RESOURCE(event, ibase_event *, &event_arg, -1, "Interbase event", le_event);
-
- event->state = DEAD;
-
- zend_list_delete(Z_LVAL_P(event_arg));
- RETURN_TRUE;
- } else {
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-#endif /* HAVE_IBASE */
-
-/*
- * 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/interbase/ibase_query.c b/ext/interbase/ibase_query.c
deleted file mode 100644
index c4cdbf2c56..0000000000
--- a/ext/interbase/ibase_query.c
+++ /dev/null
@@ -1,2115 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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. |
- +----------------------------------------------------------------------+
- | Authors: Ard Biesheuvel <a.k.biesheuvel@its.tudelft.nl> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "php.h"
-#include "php_ini.h"
-
-#if HAVE_IBASE
-
-#include "ext/standard/php_standard.h"
-#include "php_interbase.h"
-#include "php_ibase_includes.h"
-
-#define ISC_LONG_MIN INT_MIN
-#define ISC_LONG_MAX INT_MAX
-
-#define QUERY_RESULT 1
-#define EXECUTE_RESULT 2
-
-#define FETCH_ROW 1
-#define FETCH_ARRAY 2
-
-typedef struct {
- ISC_ARRAY_DESC ar_desc;
- ISC_LONG ar_size; /* size of entire array in bytes */
- unsigned short el_type, el_size;
-} ibase_array;
-
-typedef struct {
- ibase_db_link *link;
- ibase_trans *trans;
- isc_stmt_handle stmt;
- unsigned short type;
- unsigned char has_more_rows, statement_type;
- XSQLDA *out_sqlda;
- ibase_array out_array[1]; /* last member */
-} ibase_result;
-
-typedef struct {
- ibase_db_link *link;
- ibase_trans *trans;
- int result_res_id;
- isc_stmt_handle stmt;
- XSQLDA *in_sqlda, *out_sqlda;
- ibase_array *in_array, *out_array;
- unsigned short in_array_cnt, out_array_cnt;
- unsigned short dialect;
- char statement_type;
- char *query;
- long trans_res_id;
-} ibase_query;
-
-typedef struct {
- unsigned short vary_length;
- char vary_string[1];
-} IBVARY;
-
-/* sql variables union
- * used for convert and binding input variables
- */
-typedef struct {
- union {
- short sval;
- float fval;
- ISC_LONG lval;
- ISC_QUAD qval;
- ISC_TIMESTAMP tsval;
- ISC_DATE dtval;
- ISC_TIME tmval;
- } val;
- short sqlind;
-} BIND_BUF;
-
-static int le_result, le_query;
-
-#define LE_RESULT "Firebird/InterBase result"
-#define LE_QUERY "Firebird/InterBase query"
-
-static void _php_ibase_free_xsqlda(XSQLDA *sqlda) /* {{{ */
-{
- int i;
- XSQLVAR *var;
-
- IBDEBUG("Free XSQLDA?");
- if (sqlda) {
- IBDEBUG("Freeing XSQLDA...");
- var = sqlda->sqlvar;
- for (i = 0; i < sqlda->sqld; i++, var++) {
- efree(var->sqldata);
- if (var->sqlind) {
- efree(var->sqlind);
- }
- }
- efree(sqlda);
- }
-}
-/* }}} */
-
-static void _php_ibase_free_result(zend_rsrc_list_entry *rsrc TSRMLS_DC) /* {{{ */
-{
- ibase_result *ib_result = (ibase_result *) rsrc->ptr;
-
- IBDEBUG("Freeing result by dtor...");
- if (ib_result) {
- _php_ibase_free_xsqlda(ib_result->out_sqlda);
- if (ib_result->stmt && ib_result->type != EXECUTE_RESULT) {
- IBDEBUG("Dropping statement handle (free_result dtor)...");
- isc_dsql_free_statement(IB_STATUS, &ib_result->stmt, DSQL_drop);
- }
- efree(ib_result);
- }
-}
-/* }}} */
-
-static void _php_ibase_free_query(ibase_query *ib_query TSRMLS_DC) /* {{{ */
-{
- IBDEBUG("Freeing query...");
-
- if (ib_query->in_sqlda) {
- efree(ib_query->in_sqlda);
- }
- if (ib_query->out_sqlda) {
- efree(ib_query->out_sqlda);
- }
- if (ib_query->stmt) {
- IBDEBUG("Dropping statement handle (free_query)...");
- if (isc_dsql_free_statement(IB_STATUS, &ib_query->stmt, DSQL_drop)) {
- _php_ibase_error(TSRMLS_C);
- }
- }
- if (ib_query->in_array) {
- efree(ib_query->in_array);
- }
- if (ib_query->out_array) {
- efree(ib_query->out_array);
- }
- if (ib_query->query) {
- efree(ib_query->query);
- }
-}
-/* }}} */
-
-static void php_ibase_free_query_rsrc(zend_rsrc_list_entry *rsrc TSRMLS_DC) /* {{{ */
-{
- ibase_query *ib_query = (ibase_query *)rsrc->ptr;
-
- if (ib_query != NULL) {
- IBDEBUG("Preparing to free query by dtor...");
-
- _php_ibase_free_query(ib_query TSRMLS_CC);
- if (ib_query->statement_type != isc_info_sql_stmt_exec_procedure) {
- zend_list_delete(ib_query->result_res_id);
- }
- efree(ib_query);
- }
-}
-/* }}} */
-
-void php_ibase_query_minit(INIT_FUNC_ARGS) /* {{{ */
-{
- le_result = zend_register_list_destructors_ex(_php_ibase_free_result, NULL,
- "interbase result", module_number);
- le_query = zend_register_list_destructors_ex(php_ibase_free_query_rsrc, NULL,
- "interbase query", module_number);
-}
-/* }}} */
-
-static int _php_ibase_alloc_array(ibase_array **ib_arrayp, XSQLDA *sqlda, /* {{{ */
- isc_db_handle link, isc_tr_handle trans, unsigned short *array_cnt TSRMLS_DC)
-{
- unsigned short i, n;
- ibase_array *ar;
-
- /* first check if we have any arrays at all */
- for (i = *array_cnt = 0; i < sqlda->sqld; ++i) {
- if ((sqlda->sqlvar[i].sqltype & ~1) == SQL_ARRAY) {
- ++*array_cnt;
- }
- }
- if (! *array_cnt) return SUCCESS;
-
- ar = safe_emalloc(sizeof(ibase_array), *array_cnt, 0);
-
- for (i = n = 0; i < sqlda->sqld; ++i) {
- unsigned short dim;
- unsigned long ar_size = 1;
- XSQLVAR *var = &sqlda->sqlvar[i];
-
- if ((var->sqltype & ~1) == SQL_ARRAY) {
- ibase_array *a = &ar[n++];
- ISC_ARRAY_DESC *ar_desc = &a->ar_desc;
-
- if (isc_array_lookup_bounds(IB_STATUS, &link, &trans, var->relname,
- var->sqlname, ar_desc)) {
- _php_ibase_error(TSRMLS_C);
- efree(ar);
- return FAILURE;
- }
-
- switch (ar_desc->array_desc_dtype) {
- case blr_text:
- case blr_text2:
- a->el_type = SQL_TEXT;
- a->el_size = ar_desc->array_desc_length;
- break;
- case blr_short:
- a->el_type = SQL_SHORT;
- a->el_size = sizeof(short);
- break;
- case blr_long:
- a->el_type = SQL_LONG;
- a->el_size = sizeof(ISC_LONG);
- break;
- case blr_float:
- a->el_type = SQL_FLOAT;
- a->el_size = sizeof(float);
- break;
- case blr_double:
- a->el_type = SQL_DOUBLE;
- a->el_size = sizeof(double);
- break;
- case blr_int64:
- a->el_type = SQL_INT64;
- a->el_size = sizeof(ISC_INT64);
- break;
- case blr_timestamp:
- a->el_type = SQL_TIMESTAMP;
- a->el_size = sizeof(ISC_TIMESTAMP);
- break;
- case blr_sql_date:
- a->el_type = SQL_TYPE_DATE;
- a->el_size = sizeof(ISC_DATE);
- break;
- case blr_sql_time:
- a->el_type = SQL_TYPE_TIME;
- a->el_size = sizeof(ISC_TIME);
- break;
- case blr_varying:
- case blr_varying2:
- /**
- * IB has a strange way of handling VARCHAR arrays. It doesn't store
- * the length in the first short, as with VARCHAR fields. It does,
- * however, expect the extra short to be allocated for each element.
- */
- a->el_type = SQL_TEXT;
- a->el_size = ar_desc->array_desc_length + sizeof(short);
- break;
- case blr_quad:
- case blr_blob_id:
- case blr_cstring:
- case blr_cstring2:
- /**
- * These types are mentioned as array types in the manual, but I
- * wouldn't know how to create an array field with any of these
- * types. I assume these types are not applicable to arrays, and
- * were mentioned erroneously.
- */
- default:
- _php_ibase_module_error("Unsupported array type %d in relation '%s' column '%s'"
- TSRMLS_CC, ar_desc->array_desc_dtype, var->relname, var->sqlname);
- efree(ar);
- return FAILURE;
- } /* switch array_desc_type */
-
- /* calculate elements count */
- for (dim = 0; dim < ar_desc->array_desc_dimensions; dim++) {
- ar_size *= 1 + ar_desc->array_desc_bounds[dim].array_bound_upper
- -ar_desc->array_desc_bounds[dim].array_bound_lower;
- }
- a->ar_size = a->el_size * ar_size;
- } /* if SQL_ARRAY */
- } /* for column */
- *ib_arrayp = ar;
- return SUCCESS;
-}
-/* }}} */
-
-/* allocate and prepare query */
-static int _php_ibase_alloc_query(ibase_query *ib_query, ibase_db_link *link, /* {{{ */
- ibase_trans *trans, char *query, unsigned short dialect, int trans_res_id TSRMLS_DC)
-{
- static char info_type[] = {isc_info_sql_stmt_type};
- char result[8];
-
- ib_query->link = link;
- ib_query->trans = trans;
- ib_query->result_res_id = 0;
- ib_query->stmt = NULL;
- ib_query->in_array = NULL;
- ib_query->out_array = NULL;
- ib_query->dialect = dialect;
- ib_query->query = estrdup(query);
- ib_query->trans_res_id = trans_res_id;
- ib_query->out_sqlda = NULL;
- ib_query->in_sqlda = NULL;
-
- if (isc_dsql_allocate_statement(IB_STATUS, &link->handle, &ib_query->stmt)) {
- _php_ibase_error(TSRMLS_C);
- goto _php_ibase_alloc_query_error;
- }
-
- ib_query->out_sqlda = (XSQLDA *) emalloc(XSQLDA_LENGTH(1));
- ib_query->out_sqlda->sqln = 1;
- ib_query->out_sqlda->version = SQLDA_CURRENT_VERSION;
-
- if (isc_dsql_prepare(IB_STATUS, &ib_query->trans->handle, &ib_query->stmt,
- 0, query, dialect, ib_query->out_sqlda)) {
- _php_ibase_error(TSRMLS_C);
- goto _php_ibase_alloc_query_error;
- }
-
- /* find out what kind of statement was prepared */
- if (isc_dsql_sql_info(IB_STATUS, &ib_query->stmt, sizeof(info_type),
- info_type, sizeof(result), result)) {
- _php_ibase_error(TSRMLS_C);
- goto _php_ibase_alloc_query_error;
- }
- ib_query->statement_type = result[3];
-
- /* not enough output variables ? */
- if (ib_query->out_sqlda->sqld > ib_query->out_sqlda->sqln) {
- ib_query->out_sqlda = erealloc(ib_query->out_sqlda, XSQLDA_LENGTH(ib_query->out_sqlda->sqld));
- ib_query->out_sqlda->sqln = ib_query->out_sqlda->sqld;
- ib_query->out_sqlda->version = SQLDA_CURRENT_VERSION;
- if (isc_dsql_describe(IB_STATUS, &ib_query->stmt, SQLDA_CURRENT_VERSION, ib_query->out_sqlda)) {
- _php_ibase_error(TSRMLS_C);
- goto _php_ibase_alloc_query_error;
- }
- }
-
- /* maybe have input placeholders? */
- ib_query->in_sqlda = emalloc(XSQLDA_LENGTH(1));
- ib_query->in_sqlda->sqln = 1;
- ib_query->in_sqlda->version = SQLDA_CURRENT_VERSION;
- if (isc_dsql_describe_bind(IB_STATUS, &ib_query->stmt, SQLDA_CURRENT_VERSION, ib_query->in_sqlda)) {
- _php_ibase_error(TSRMLS_C);
- goto _php_ibase_alloc_query_error;
- }
-
- /* not enough input variables ? */
- if (ib_query->in_sqlda->sqln < ib_query->in_sqlda->sqld) {
- ib_query->in_sqlda = erealloc(ib_query->in_sqlda, XSQLDA_LENGTH(ib_query->in_sqlda->sqld));
- ib_query->in_sqlda->sqln = ib_query->in_sqlda->sqld;
- ib_query->in_sqlda->version = SQLDA_CURRENT_VERSION;
-
- if (isc_dsql_describe_bind(IB_STATUS, &ib_query->stmt,
- SQLDA_CURRENT_VERSION, ib_query->in_sqlda)) {
- _php_ibase_error(TSRMLS_C);
- goto _php_ibase_alloc_query_error;
- }
- }
-
- /* no, haven't placeholders at all */
- if (ib_query->in_sqlda->sqld == 0) {
- efree(ib_query->in_sqlda);
- ib_query->in_sqlda = NULL;
- } else if (FAILURE == _php_ibase_alloc_array(&ib_query->in_array, ib_query->in_sqlda,
- link->handle, trans->handle, &ib_query->in_array_cnt TSRMLS_CC)) {
- goto _php_ibase_alloc_query_error;
- }
-
- if (ib_query->out_sqlda->sqld == 0) {
- efree(ib_query->out_sqlda);
- ib_query->out_sqlda = NULL;
- } else if (FAILURE == _php_ibase_alloc_array(&ib_query->out_array, ib_query->out_sqlda,
- link->handle, trans->handle, &ib_query->out_array_cnt TSRMLS_CC)) {
- goto _php_ibase_alloc_query_error;
- }
-
- return SUCCESS;
-
-_php_ibase_alloc_query_error:
-
- if (ib_query->out_sqlda) {
- efree(ib_query->out_sqlda);
- }
- if (ib_query->in_sqlda) {
- efree(ib_query->in_sqlda);
- }
- if (ib_query->out_array) {
- efree(ib_query->out_array);
- }
- if (ib_query->query) {
- efree(ib_query->query);
- }
- return FAILURE;
-}
-/* }}} */
-
-static int _php_ibase_bind_array(zval *val, char *buf, unsigned long buf_size, /* {{{ */
- ibase_array *array, int dim TSRMLS_DC)
-{
- zval null_val, *pnull_val = &null_val;
- int u_bound = array->ar_desc.array_desc_bounds[dim].array_bound_upper,
- l_bound = array->ar_desc.array_desc_bounds[dim].array_bound_lower,
- dim_len = 1 + u_bound - l_bound;
-
- ZVAL_NULL(pnull_val);
-
- if (dim < array->ar_desc.array_desc_dimensions) {
- unsigned long slice_size = buf_size / dim_len;
- unsigned short i;
- zval **subval = &val;
-
- if (Z_TYPE_P(val) == IS_ARRAY) {
- zend_hash_internal_pointer_reset(Z_ARRVAL_P(val));
- }
-
- for (i = 0; i < dim_len; ++i) {
-
- if (Z_TYPE_P(val) == IS_ARRAY &&
- zend_hash_get_current_data(Z_ARRVAL_P(val), (void *) &subval) == FAILURE)
- {
- subval = &pnull_val;
- }
-
- if (_php_ibase_bind_array(*subval, buf, slice_size, array, dim+1 TSRMLS_CC) == FAILURE)
- {
- return FAILURE;
- }
- buf += slice_size;
-
- if (Z_TYPE_P(val) == IS_ARRAY) {
- zend_hash_move_forward(Z_ARRVAL_P(val));
- }
- }
-
- if (Z_TYPE_P(val) == IS_ARRAY) {
- zend_hash_internal_pointer_reset(Z_ARRVAL_P(val));
- }
-
- } else {
- /* expect a single value */
- if (Z_TYPE_P(val) == IS_NULL) {
- memset(buf, 0, buf_size);
- } else if (array->ar_desc.array_desc_scale < 0) {
-
- /* no coercion for array types */
- double l;
-
- convert_to_double(val);
-
- if (Z_DVAL_P(val) > 0) {
- l = Z_DVAL_P(val) * pow(10, -array->ar_desc.array_desc_scale) + .5;
- } else {
- l = Z_DVAL_P(val) * pow(10, -array->ar_desc.array_desc_scale) - .5;
- }
-
- switch (array->el_type) {
- case SQL_SHORT:
- if (l > SHRT_MAX || l < SHRT_MIN) {
- _php_ibase_module_error("Array parameter exceeds field width" TSRMLS_CC);
- return FAILURE;
- }
- *(short*) buf = (short) l;
- break;
- case SQL_LONG:
- if (l > ISC_LONG_MAX || l < ISC_LONG_MIN) {
- _php_ibase_module_error("Array parameter exceeds field width" TSRMLS_CC);
- return FAILURE;
- }
- *(ISC_LONG*) buf = (ISC_LONG) l;
- break;
- case SQL_INT64:
- {
- long double l;
-
- convert_to_string(val);
-
- if (!sscanf(Z_STRVAL_P(val), "%Lf", &l)) {
- _php_ibase_module_error("Cannot convert '%s' to long double"
- TSRMLS_CC, Z_STRVAL_P(val));
- return FAILURE;
- }
-
- if (l > 0) {
- *(ISC_INT64 *) buf = (ISC_INT64) (l * pow(10,
- -array->ar_desc.array_desc_scale) + .5);
- } else {
- *(ISC_INT64 *) buf = (ISC_INT64) (l * pow(10,
- -array->ar_desc.array_desc_scale) - .5);
- }
- }
- break;
- }
- } else {
- struct tm t = { 0, 0, 0, 0, 0, 0 };
-
- switch (array->el_type) {
- unsigned short n;
- ISC_INT64 l;
-
- case SQL_SHORT:
- convert_to_long(val);
- if (Z_LVAL_P(val) > SHRT_MAX || Z_LVAL_P(val) < SHRT_MIN) {
- _php_ibase_module_error("Array parameter exceeds field width" TSRMLS_CC);
- return FAILURE;
- }
- *(short *) buf = (short) Z_LVAL_P(val);
- break;
- case SQL_LONG:
- convert_to_long(val);
-#if (SIZEOF_LONG > 4)
- if (Z_LVAL_P(val) > ISC_LONG_MAX || Z_LVAL_P(val) < ISC_LONG_MIN) {
- _php_ibase_module_error("Array parameter exceeds field width" TSRMLS_CC);
- return FAILURE;
- }
-#endif
- *(ISC_LONG *) buf = (ISC_LONG) Z_LVAL_P(val);
- break;
- case SQL_INT64:
-#if (SIZEOF_LONG >= 8)
- convert_to_long(val);
- *(long *) buf = Z_LVAL_P(val);
-#else
- convert_to_string(val);
- if (!sscanf(Z_STRVAL_P(val), "%" LL_MASK "d", &l)) {
- _php_ibase_module_error("Cannot convert '%s' to long integer"
- TSRMLS_CC, Z_STRVAL_P(val));
- return FAILURE;
- } else {
- *(ISC_INT64 *) buf = l;
- }
-#endif
- break;
- case SQL_FLOAT:
- convert_to_double(val);
- *(float*) buf = (float) Z_DVAL_P(val);
- break;
- case SQL_DOUBLE:
- convert_to_double(val);
- *(double*) buf = Z_DVAL_P(val);
- break;
- case SQL_TIMESTAMP:
- convert_to_string(val);
-#ifdef HAVE_STRPTIME
- strptime(Z_STRVAL_P(val), INI_STR("ibase.timestampformat"), &t);
-#else
- n = sscanf(Z_STRVAL_P(val), "%d%*[/]%d%*[/]%d %d%*[:]%d%*[:]%d",
- &t.tm_mon, &t.tm_mday, &t.tm_year, &t.tm_hour, &t.tm_min, &t.tm_sec);
-
- if (n != 3 && n != 6) {
- _php_ibase_module_error("Invalid date/time format (expected 3 or 6 fields, got %d."
- " Use format 'm/d/Y H:i:s'. You gave '%s')" TSRMLS_CC, n, Z_STRVAL_P(val));
- return FAILURE;
- }
- t.tm_year -= 1900;
- t.tm_mon--;
-#endif
- isc_encode_timestamp(&t, (ISC_TIMESTAMP * ) buf);
- break;
- case SQL_TYPE_DATE:
- convert_to_string(val);
-#ifdef HAVE_STRPTIME
- strptime(Z_STRVAL_P(val), INI_STR("ibase.dateformat"), &t);
-#else
- n = sscanf(Z_STRVAL_P(val), "%d%*[/]%d%*[/]%d", &t.tm_mon, &t.tm_mday, &t.tm_year);
-
- if (n != 3) {
- _php_ibase_module_error("Invalid date format (expected 3 fields, got %d. "
- "Use format 'm/d/Y' You gave '%s')" TSRMLS_CC, n, Z_STRVAL_P(val));
- return FAILURE;
- }
- t.tm_year -= 1900;
- t.tm_mon--;
-#endif
- isc_encode_sql_date(&t, (ISC_DATE *) buf);
- break;
- case SQL_TYPE_TIME:
- convert_to_string(val);
-#ifdef HAVE_STRPTIME
- strptime(Z_STRVAL_P(val), INI_STR("ibase.timeformat"), &t);
-#else
- n = sscanf(Z_STRVAL_P(val), "%d%*[:]%d%*[:]%d", &t.tm_hour, &t.tm_min, &t.tm_sec);
-
- if (n != 3) {
- _php_ibase_module_error("Invalid time format (expected 3 fields, got %d. "
- "Use format 'H:i:s'. You gave '%s')" TSRMLS_CC, n, Z_STRVAL_P(val));
- return FAILURE;
- }
-#endif
- isc_encode_sql_time(&t, (ISC_TIME *) buf);
- break;
- default:
- convert_to_string(val);
- strncpy(buf, Z_STRVAL_P(val), array->el_size);
- buf[array->el_size-1] = '\0';
- }
- }
- }
- return SUCCESS;
-}
-/* }}} */
-
-static int _php_ibase_bind(XSQLDA *sqlda, zval ***b_vars, BIND_BUF *buf, /* {{{ */
- ibase_query *ib_query TSRMLS_DC)
-{
- int i, array_cnt = 0, rv = SUCCESS;
-
- for (i = 0; i < sqlda->sqld; ++i) { /* bound vars */
-
- zval *b_var = *b_vars[i];
- XSQLVAR *var = &sqlda->sqlvar[i];
-
- var->sqlind = &buf[i].sqlind;
-
- /* check if a NULL should be inserted */
- switch (Z_TYPE_P(b_var)) {
- int force_null;
-
- case IS_STRING:
-
- force_null = 0;
-
- /* for these types, an empty string can be handled like a NULL value */
- switch (var->sqltype & ~1) {
- case SQL_SHORT:
- case SQL_LONG:
- case SQL_INT64:
- case SQL_FLOAT:
- case SQL_DOUBLE:
- case SQL_TIMESTAMP:
- case SQL_TYPE_DATE:
- case SQL_TYPE_TIME:
- force_null = (Z_STRLEN_P(b_var) == 0);
- }
-
- if (! force_null) break;
-
- case IS_NULL:
-
- /* complain if this field doesn't allow NULL values */
- if (! (var->sqltype & 1)) {
- _php_ibase_module_error("Parameter %d: non-empty value required" TSRMLS_CC, i+1);
- rv = FAILURE;
- } else {
- buf[i].sqlind = -1;
- }
-
- if (var->sqltype & SQL_ARRAY) ++array_cnt;
-
- continue;
- }
-
- /* if we make it to this point, we must provide a value for the parameter */
-
- buf[i].sqlind = 0;
-
- var->sqldata = (void*)&buf[i].val;
-
- switch (var->sqltype & ~1) {
- struct tm t;
-
- case SQL_TIMESTAMP:
- case SQL_TYPE_DATE:
- case SQL_TYPE_TIME:
- if (Z_TYPE_P(b_var) == IS_LONG) {
- /* insert timestamp directly */
- t = *gmtime(&Z_LVAL_P(b_var));
- } else {
-#ifdef HAVE_STRPTIME
- char *format = INI_STR("ibase.timestampformat");
-
- convert_to_string(b_var);
-
- switch (var->sqltype & ~1) {
- case SQL_TYPE_DATE:
- format = INI_STR("ibase.dateformat");
- break;
- case SQL_TYPE_TIME:
- format = INI_STR("ibase.timeformat");
- }
- if (! strptime(Z_STRVAL_P(b_var), format, &t)) {
- /* strptime() cannot handle it, so let IB have a try */
- break;
- }
-#else /* ifndef HAVE_STRPTIME */
- break; /* let IB parse it as a string */
-#endif
- }
-
- switch (var->sqltype & ~1) {
- default: /* == case SQL_TIMESTAMP */
- isc_encode_timestamp(&t, &buf[i].val.tsval);
- break;
- case SQL_TYPE_DATE:
- isc_encode_sql_date(&t, &buf[i].val.dtval);
- break;
- case SQL_TYPE_TIME:
- isc_encode_sql_time(&t, &buf[i].val.tmval);
- break;
- }
- continue;
-
- case SQL_BLOB:
-
- convert_to_string(b_var);
-
- if (Z_STRLEN_P(b_var) != BLOB_ID_LEN ||
- !_php_ibase_string_to_quad(Z_STRVAL_P(b_var), &buf[i].val.qval)) {
-
- ibase_blob ib_blob = { NULL, BLOB_INPUT };
-
- if (isc_create_blob(IB_STATUS, &ib_query->link->handle,
- &ib_query->trans->handle, &ib_blob.bl_handle, &ib_blob.bl_qd)) {
- _php_ibase_error(TSRMLS_C);
- return FAILURE;
- }
-
- if (_php_ibase_blob_add(&b_var, &ib_blob TSRMLS_CC) != SUCCESS) {
- return FAILURE;
- }
-
- if (isc_close_blob(IB_STATUS, &ib_blob.bl_handle)) {
- _php_ibase_error(TSRMLS_C);
- return FAILURE;
- }
- buf[i].val.qval = ib_blob.bl_qd;
- }
- continue;
-
- case SQL_ARRAY:
-
- if (Z_TYPE_P(b_var) != IS_ARRAY) {
- convert_to_string(b_var);
-
- if (Z_STRLEN_P(b_var) != BLOB_ID_LEN ||
- !_php_ibase_string_to_quad(Z_STRVAL_P(b_var), &buf[i].val.qval)) {
-
- _php_ibase_module_error("Parameter %d: invalid array ID" TSRMLS_CC,i+1);
- rv = FAILURE;
- }
- } else {
- /* convert the array data into something IB can understand */
- ibase_array *ar = &ib_query->in_array[array_cnt];
- void *array_data = emalloc(ar->ar_size);
- ISC_QUAD array_id = { 0, 0 };
-
- if (FAILURE == _php_ibase_bind_array(b_var, array_data, ar->ar_size,
- ar, 0 TSRMLS_CC)) {
- _php_ibase_module_error("Parameter %d: failed to bind array argument"
- TSRMLS_CC,i+1);
- efree(array_data);
- rv = FAILURE;
- continue;
- }
-
- if (isc_array_put_slice(IB_STATUS, &ib_query->link->handle, &ib_query->trans->handle,
- &array_id, &ar->ar_desc, array_data, &ar->ar_size)) {
- _php_ibase_error(TSRMLS_C);
- efree(array_data);
- return FAILURE;
- }
- buf[i].val.qval = array_id;
- efree(array_data);
- }
- ++array_cnt;
- continue;
- } /* switch */
-
- /* we end up here if none of the switch cases handled the field */
- convert_to_string(b_var);
- var->sqldata = Z_STRVAL_P(b_var);
- var->sqllen = Z_STRLEN_P(b_var);
- var->sqltype = SQL_TEXT;
- } /* for */
- return rv;
-}
-/* }}} */
-
-static void _php_ibase_alloc_xsqlda(XSQLDA *sqlda) /* {{{ */
-{
- int i;
-
- for (i = 0; i < sqlda->sqld; i++) {
- XSQLVAR *var = &sqlda->sqlvar[i];
-
- switch (var->sqltype & ~1) {
- case SQL_TEXT:
- var->sqldata = safe_emalloc(sizeof(char), var->sqllen, 0);
- break;
- case SQL_VARYING:
- var->sqldata = safe_emalloc(sizeof(char), var->sqllen + sizeof(short), 0);
- break;
- case SQL_SHORT:
- var->sqldata = emalloc(sizeof(short));
- break;
- case SQL_LONG:
- var->sqldata = emalloc(sizeof(ISC_LONG));
- break;
- case SQL_FLOAT:
- var->sqldata = emalloc(sizeof(float));
- break;
- case SQL_DOUBLE:
- var->sqldata = emalloc(sizeof(double));
- break;
- case SQL_INT64:
- var->sqldata = emalloc(sizeof(ISC_INT64));
- break;
- case SQL_TIMESTAMP:
- var->sqldata = emalloc(sizeof(ISC_TIMESTAMP));
- break;
- case SQL_TYPE_DATE:
- var->sqldata = emalloc(sizeof(ISC_DATE));
- break;
- case SQL_TYPE_TIME:
- var->sqldata = emalloc(sizeof(ISC_TIME));
- break;
- case SQL_BLOB:
- case SQL_ARRAY:
- var->sqldata = emalloc(sizeof(ISC_QUAD));
- break;
- } /* switch */
-
- if (var->sqltype & 1) { /* sql NULL flag */
- var->sqlind = emalloc(sizeof(short));
- } else {
- var->sqlind = NULL;
- }
- } /* for */
-}
-/* }}} */
-
-static int _php_ibase_exec(INTERNAL_FUNCTION_PARAMETERS, ibase_result **ib_resultp, /* {{{ */
- ibase_query *ib_query, zval ***args)
-{
- XSQLDA *in_sqlda = NULL, *out_sqlda = NULL;
- BIND_BUF *bind_buf = NULL;
- int i, rv = FAILURE;
- static char info_count[] = { isc_info_sql_records };
- char result[64];
- ISC_STATUS isc_result;
- int argc = ib_query->in_sqlda ? ib_query->in_sqlda->sqld : 0;
-
- RESET_ERRMSG;
-
- for (i = 0; i < argc; ++i) {
- SEPARATE_ZVAL(args[i]);
- }
-
- switch (ib_query->statement_type) {
- isc_tr_handle tr;
- ibase_tr_list **l;
- ibase_trans *trans;
-
- case isc_info_sql_stmt_start_trans:
-
- /* a SET TRANSACTION statement should be executed with a NULL trans handle */
- tr = NULL;
-
- if (isc_dsql_execute_immediate(IB_STATUS, &ib_query->link->handle, &tr, 0,
- ib_query->query, ib_query->dialect, NULL)) {
- _php_ibase_error(TSRMLS_C);
- goto _php_ibase_exec_error;
- }
-
- trans = (ibase_trans *) emalloc(sizeof(ibase_trans));
- trans->handle = tr;
- trans->link_cnt = 1;
- trans->affected_rows = 0;
- trans->db_link[0] = ib_query->link;
-
- if (ib_query->link->tr_list == NULL) {
- ib_query->link->tr_list = (ibase_tr_list *) emalloc(sizeof(ibase_tr_list));
- ib_query->link->tr_list->trans = NULL;
- ib_query->link->tr_list->next = NULL;
- }
-
- /* link the transaction into the connection-transaction list */
- for (l = &ib_query->link->tr_list; *l != NULL; l = &(*l)->next);
- *l = (ibase_tr_list *) emalloc(sizeof(ibase_tr_list));
- (*l)->trans = trans;
- (*l)->next = NULL;
-
- ZEND_REGISTER_RESOURCE(return_value, trans, le_trans);
-
- return SUCCESS;
-
- case isc_info_sql_stmt_commit:
- case isc_info_sql_stmt_rollback:
-
- if (isc_dsql_execute_immediate(IB_STATUS, &ib_query->link->handle,
- &ib_query->trans->handle, 0, ib_query->query, ib_query->dialect, NULL)) {
- _php_ibase_error(TSRMLS_C);
- goto _php_ibase_exec_error;
- }
-
- if (ib_query->trans->handle == NULL && ib_query->trans_res_id != 0) {
- /* transaction was released by the query and was a registered resource,
- so we have to release it */
- zend_list_delete(ib_query->trans_res_id);
- }
- return SUCCESS;
-
- default:
- RETVAL_FALSE;
- }
-
- /* allocate sqlda and output buffers */
- if (ib_query->out_sqlda) { /* output variables in select, select for update */
- ibase_result *res;
-
- IBDEBUG("Query wants XSQLDA for output");
- res = emalloc(sizeof(ibase_result)+sizeof(ibase_array)*max(0,ib_query->out_array_cnt-1));
- res->link = ib_query->link;
- res->trans = ib_query->trans;
- res->stmt = ib_query->stmt;
- res->statement_type = ib_query->statement_type;
- res->has_more_rows = 1;
-
- out_sqlda = res->out_sqlda = emalloc(XSQLDA_LENGTH(ib_query->out_sqlda->sqld));
- memcpy(out_sqlda, ib_query->out_sqlda, XSQLDA_LENGTH(ib_query->out_sqlda->sqld));
- _php_ibase_alloc_xsqlda(out_sqlda);
-
- if (ib_query->out_array) {
- memcpy(&res->out_array, ib_query->out_array, sizeof(ibase_array)*ib_query->out_array_cnt);
- }
- *ib_resultp = res;
- }
-
- if (ib_query->in_sqlda) { /* has placeholders */
- IBDEBUG("Query wants XSQLDA for input");
- in_sqlda = emalloc(XSQLDA_LENGTH(ib_query->in_sqlda->sqld));
- memcpy(in_sqlda, ib_query->in_sqlda, XSQLDA_LENGTH(ib_query->in_sqlda->sqld));
- bind_buf = safe_emalloc(sizeof(BIND_BUF), ib_query->in_sqlda->sqld, 0);
- if (_php_ibase_bind(in_sqlda, args, bind_buf, ib_query TSRMLS_CC) == FAILURE) {
- IBDEBUG("Could not bind input XSQLDA");
- goto _php_ibase_exec_error;
- }
- }
-
- if (ib_query->statement_type == isc_info_sql_stmt_exec_procedure) {
- isc_result = isc_dsql_execute2(IB_STATUS, &ib_query->trans->handle,
- &ib_query->stmt, SQLDA_CURRENT_VERSION, in_sqlda, out_sqlda);
- } else {
- isc_result = isc_dsql_execute(IB_STATUS, &ib_query->trans->handle,
- &ib_query->stmt, SQLDA_CURRENT_VERSION, in_sqlda);
- }
- if (isc_result) {
- IBDEBUG("Could not execute query");
- _php_ibase_error(TSRMLS_C);
- goto _php_ibase_exec_error;
- }
- ib_query->trans->affected_rows = 0;
-
- switch (ib_query->statement_type) {
-
- unsigned long affected_rows;
-
- case isc_info_sql_stmt_insert:
- case isc_info_sql_stmt_update:
- case isc_info_sql_stmt_delete:
- case isc_info_sql_stmt_exec_procedure:
-
- if (isc_dsql_sql_info(IB_STATUS, &ib_query->stmt, sizeof(info_count),
- info_count, sizeof(result), result)) {
- _php_ibase_error(TSRMLS_C);
- goto _php_ibase_exec_error;
- }
-
- affected_rows = 0;
-
- if (result[0] == isc_info_sql_records) {
- unsigned i = 3, result_size = isc_vax_integer(&result[1],2);
-
- while (result[i] != isc_info_end && i < result_size) {
- short len = (short)isc_vax_integer(&result[i+1],2);
- if (result[i] != isc_info_req_select_count) {
- affected_rows += isc_vax_integer(&result[i+3],len);
- }
- i += len+3;
- }
- }
-
- ib_query->trans->affected_rows = affected_rows;
-
- if (!ib_query->out_sqlda) { /* no result set is being returned */
- if (affected_rows) {
- RETVAL_LONG(affected_rows);
- } else {
- /* this return value evaluates to bool(true) and to int(0) */
- RETVAL_STRINGL("0 ",2,1);
- }
- break;
- }
- default:
- RETVAL_TRUE;
- }
-
- rv = SUCCESS;
-
-_php_ibase_exec_error:
-
- if (in_sqlda) {
- efree(in_sqlda);
- }
- if (bind_buf)
- efree(bind_buf);
-
- if (rv == FAILURE) {
- if (*ib_resultp) {
- efree(*ib_resultp);
- *ib_resultp = NULL;
- }
- if (out_sqlda) {
- _php_ibase_free_xsqlda(out_sqlda);
- }
- }
-
- return rv;
-}
-/* }}} */
-
-/* {{{ proto mixed ibase_query([resource link_identifier, [ resource link_identifier, ]] string query [, mixed bind_arg [, mixed bind_arg [, ...]]])
- Execute a query */
-PHP_FUNCTION(ibase_query)
-{
- zval *zlink, *ztrans, ***bind_args = NULL;
- char *query;
- int bind_i, query_len;
- long trans_res_id = 0;
- ibase_db_link *ib_link = NULL;
- ibase_trans *trans = NULL;
- ibase_query ib_query = { NULL, NULL, 0, 0 };
- ibase_result *result = NULL;
-
- RESET_ERRMSG;
-
- RETVAL_FALSE;
-
- switch (ZEND_NUM_ARGS()) {
- long l;
-
- default:
- if (SUCCESS == zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, 3 TSRMLS_CC, "rrs",
- &zlink, &ztrans, &query, &query_len)) {
-
- ZEND_FETCH_RESOURCE2(ib_link, ibase_db_link*, &zlink, -1, LE_LINK, le_link, le_plink);
- ZEND_FETCH_RESOURCE(trans, ibase_trans*, &ztrans, -1, LE_TRANS, le_trans);
-
- trans_res_id = Z_LVAL_P(ztrans);
- bind_i = 3;
- break;
- }
- case 2:
- if (SUCCESS == zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, 2 TSRMLS_CC, "rs",
- &zlink, &query, &query_len)) {
- _php_ibase_get_link_trans(INTERNAL_FUNCTION_PARAM_PASSTHRU, &zlink, &ib_link, &trans);
-
- if (trans != NULL) {
- trans_res_id = Z_LVAL_P(zlink);
- }
- bind_i = 2;
- break;
- }
-
- /* the statement is 'CREATE DATABASE ...' if the link argument is IBASE_CREATE */
- if (SUCCESS == zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, ZEND_NUM_ARGS()
- TSRMLS_CC, "ls", &l, &query, &query_len) && l == PHP_IBASE_CREATE) {
- isc_db_handle db = NULL;
- isc_tr_handle trans = NULL;
-
- if (PG(sql_safe_mode)) {
- _php_ibase_module_error("CREATE DATABASE is not allowed in SQL safe mode"
- TSRMLS_CC);
-
- } else if (((l = INI_INT("ibase.max_links")) != -1) && (IBG(num_links) >= l)) {
- _php_ibase_module_error("CREATE DATABASE is not allowed: maximum link count "
- "(%ld) reached" TSRMLS_CC, l);
-
- } else if (isc_dsql_execute_immediate(IB_STATUS, &db, &trans, (short)query_len,
- query, SQL_DIALECT_CURRENT, NULL)) {
- _php_ibase_error(TSRMLS_C);
-
- } else if (!db) {
- _php_ibase_module_error("Connection to created database could not be "
- "established" TSRMLS_CC);
-
- } else {
-
- /* register the link as a resource; unfortunately, we cannot register
- it in the hash table, because we don't know the connection params */
- ib_link = (ibase_db_link *) emalloc(sizeof(ibase_db_link));
- ib_link->handle = db;
- ib_link->dialect = SQL_DIALECT_CURRENT;
- ib_link->tr_list = NULL;
- ib_link->event_head = NULL;
-
- ZEND_REGISTER_RESOURCE(return_value, ib_link, le_link);
- zend_list_addref(Z_LVAL_P(return_value));
- IBG(default_link) = Z_LVAL_P(return_value);
- ++IBG(num_links);
- }
- return;
- }
- case 1:
- case 0:
- if (SUCCESS == zend_parse_parameters(ZEND_NUM_ARGS() ? 1 : 0 TSRMLS_CC, "s|z", &query,
- &query_len)) {
- ZEND_FETCH_RESOURCE2(ib_link, ibase_db_link *, NULL, IBG(default_link), LE_LINK,
- le_link, le_plink);
-
- bind_i = 1;
- break;
- }
- return;
- }
-
- /* open default transaction */
- if (ib_link == NULL || FAILURE == _php_ibase_def_trans(ib_link, &trans TSRMLS_CC)
- || FAILURE == _php_ibase_alloc_query(&ib_query, ib_link, trans, query, ib_link->dialect,
- trans_res_id TSRMLS_CC)) {
- return;
- }
-
- do {
- int bind_n = ZEND_NUM_ARGS() - bind_i,
- expected_n = ib_query.in_sqlda ? ib_query.in_sqlda->sqld : 0;
-
- 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) {
- bind_args = (zval ***) emalloc(sizeof(zval **) * ZEND_NUM_ARGS());
-
- if (FAILURE == zend_get_parameters_array_ex(ZEND_NUM_ARGS(), bind_args)) {
- break;
- }
- }
-
- if (FAILURE == _php_ibase_exec(INTERNAL_FUNCTION_PARAM_PASSTHRU, &result, &ib_query,
- &bind_args[bind_i])) {
- break;
- }
-
- if (result != NULL) { /* statement returns a result */
- result->type = QUERY_RESULT;
-
- /* EXECUTE PROCEDURE returns only one row => statement can be released immediately */
- if (ib_query.statement_type != isc_info_sql_stmt_exec_procedure) {
- ib_query.stmt = NULL; /* keep stmt when free query */
- }
- ZEND_REGISTER_RESOURCE(return_value, result, le_result);
- }
- } while (0);
-
- _php_ibase_free_query(&ib_query TSRMLS_CC);
-
- if (bind_args) {
- efree(bind_args);
- }
-}
-/* }}} */
-
-/* {{{ proto int ibase_affected_rows( [ resource link_identifier ] )
- Returns the number of rows affected by the previous INSERT, UPDATE or DELETE statement */
-PHP_FUNCTION(ibase_affected_rows)
-{
- ibase_trans *trans = NULL;
-
- RESET_ERRMSG;
-
- switch (ZEND_NUM_ARGS()) {
-
- ibase_db_link *ib_link;
- zval **arg;
-
- case 0:
- ZEND_FETCH_RESOURCE2(ib_link, ibase_db_link *, NULL, IBG(default_link), LE_LINK,
- le_link, le_plink);
- if (ib_link->tr_list == NULL || ib_link->tr_list->trans == NULL) {
- RETURN_FALSE;
- }
- trans = ib_link->tr_list->trans;
- break;
-
- case 1:
- if (zend_get_parameters_ex(1, &arg) == FAILURE) {
- RETURN_FALSE;
- }
- /* one id was passed, could be db or trans id */
- _php_ibase_get_link_trans(INTERNAL_FUNCTION_PARAM_PASSTHRU, arg, &ib_link, &trans);
- if (trans == NULL) {
- ZEND_FETCH_RESOURCE2(ib_link, ibase_db_link *, arg, -1, LE_LINK, le_link, le_plink);
-
- if (ib_link->tr_list == NULL || ib_link->tr_list->trans == NULL) {
- RETURN_FALSE;
- }
- trans = ib_link->tr_list->trans;
- }
- break;
-
- default:
- WRONG_PARAM_COUNT;
- break;
- }
- RETURN_LONG(trans->affected_rows);
-}
-/* }}} */
-
-/* {{{ proto int ibase_num_rows( resource result_identifier )
- Return the number of rows that are available in a result */
-#if abies_0
-PHP_FUNCTION(ibase_num_rows)
-{
- /**
- * As this function relies on the InterBase API function isc_dsql_sql_info()
- * which has a couple of limitations (which I hope will be fixed in future
- * releases of Firebird), this function is fairly useless. I'm leaving it
- * in place for people who can live with the limitations, which I only
- * found out about after I had implemented it anyway.
- *
- * Currently, there's no way to determine how many rows can be fetched from
- * a cursor. The only number that _can_ be determined is the number of rows
- * that have already been pre-fetched by the client library.
- * This implies the following:
- * - num_rows() always returns zero before the first fetch;
- * - num_rows() for SELECT ... FOR UPDATE is broken -> never returns a
- * higher number than the number of records fetched so far (no pre-fetch);
- * - the result of num_rows() for other statements is merely a lower bound
- * on the number of records => calling ibase_num_rows() again after a couple
- * of fetches will most likely return a new (higher) figure for large result
- * sets.
- */
-
- zval **result_arg;
- ibase_result *ib_result;
- static char info_count[] = {isc_info_sql_records};
- char result[64];
-
- RESET_ERRMSG;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &result_arg) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(ib_result, ibase_result *, result_arg, -1, LE_RESULT, le_result);
-
- if (isc_dsql_sql_info(IB_STATUS, &ib_result->stmt, sizeof(info_count), info_count,
- sizeof(result), result)) {
- _php_ibase_error(TSRMLS_C);
- RETURN_FALSE;
- }
-
- if (result[0] == isc_info_sql_records) {
- unsigned i = 3, result_size = isc_vax_integer(&result[1],2);
-
- while (result[i] != isc_info_end && i < result_size) {
- short len = (short)isc_vax_integer(&result[i+1],2);
- if (result[i] == isc_info_req_select_count) {
- RETURN_LONG(isc_vax_integer(&result[i+3],len));
- }
- i += len+3;
- }
- }
-}
-#endif
-/* }}} */
-
-static int _php_ibase_var_zval(zval *val, void *data, int type, int len, /* {{{ */
- int scale, int flag TSRMLS_DC)
-{
- static ISC_INT64 const scales[] = { 1, 10, 100, 1000, 10000, 100000, 1000000, 100000000, 1000000000,
- 1000000000, LL_LIT(10000000000),LL_LIT(100000000000),LL_LIT(10000000000000),LL_LIT(100000000000000),
- LL_LIT(1000000000000000),LL_LIT(1000000000000000),LL_LIT(1000000000000000000) };
-
- switch (type & ~1) {
- unsigned short l;
- long n;
- char string_data[255];
- struct tm t;
- char *format;
-
- case SQL_VARYING:
- len = ((IBVARY *) data)->vary_length;
- data = ((IBVARY *) data)->vary_string;
- /* no break */
- case SQL_TEXT:
- if (PG(magic_quotes_runtime)) {
- Z_STRVAL_P(val) = php_addslashes(data, len, &Z_STRLEN_P(val), 0 TSRMLS_CC);
- Z_TYPE_P(val) = IS_STRING;
- } else {
- ZVAL_STRINGL(val,(char *) data,len,1);
- }
- break;
- case SQL_SHORT:
- n = *(short *) data;
- goto _sql_long;
- case SQL_INT64:
-#if (SIZEOF_LONG >= 8)
- n = *(long *) data;
- goto _sql_long;
-#else
- if (scale == 0) {
- l = sprintf(string_data, "%" LL_MASK "d", *(ISC_INT64 *) data);
- ZVAL_STRINGL(val,string_data,l,1);
- } else {
- ISC_INT64 n = *(ISC_INT64 *) data, f = scales[-scale];
-
- if (n >= 0) {
- l = sprintf(string_data, "%" LL_MASK "d.%0*" LL_MASK "d", n / f, -scale, n % f);
- } else if (n <= -f) {
- l = sprintf(string_data, "%" LL_MASK "d.%0*" LL_MASK "d", n / f, -scale, -n % f);
- } else {
- l = sprintf(string_data, "-0.%0*" LL_MASK "d", -scale, -n % f);
- }
- ZVAL_STRINGL(val,string_data,l,1);
- }
- break;
-#endif
- case SQL_LONG:
- n = *(ISC_LONG *) data;
- _sql_long:
- if (scale == 0) {
- ZVAL_LONG(val,n);
- } else {
- long f = (long) scales[-scale];
-
- if (n >= 0) {
- l = sprintf(string_data, "%ld.%0*ld", n / f, -scale, n % f);
- } else if (n <= -f) {
- l = sprintf(string_data, "%ld.%0*ld", n / f, -scale, -n % f);
- } else {
- l = sprintf(string_data, "-0.%0*ld", -scale, -n % f);
- }
- ZVAL_STRINGL(val,string_data,l,1);
- }
- break;
- case SQL_FLOAT:
- ZVAL_DOUBLE(val, *(float *) data);
- break;
- case SQL_DOUBLE:
- ZVAL_DOUBLE(val, *(double *) data);
- break;
- case SQL_DATE: /* == case SQL_TIMESTAMP: */
- format = INI_STR("ibase.timestampformat");
- isc_decode_timestamp((ISC_TIMESTAMP *) data, &t);
- goto format_date_time;
- case SQL_TYPE_DATE:
- format = INI_STR("ibase.dateformat");
- isc_decode_sql_date((ISC_DATE *) data, &t);
- goto format_date_time;
- case SQL_TYPE_TIME:
- format = INI_STR("ibase.timeformat");
- isc_decode_sql_time((ISC_TIME *) data, &t);
-
-format_date_time:
- /*
- XXX - Might have to remove this later - seems that isc_decode_date()
- always sets tm_isdst to 0, sometimes incorrectly (InterBase 6 bug?)
- */
- t.tm_isdst = -1;
-#if HAVE_TM_ZONE
- t.tm_zone = tzname[0];
-#endif
- if (flag & PHP_IBASE_UNIXTIME) {
- ZVAL_LONG(val, mktime(&t));
- } else {
-#if HAVE_STRFTIME
- l = strftime(string_data, sizeof(string_data), format, &t);
-#else
- switch (type & ~1) {
- default:
- l = sprintf(string_data, "%02d/%02d/%4d %02d:%02d:%02d", t.tm_mon+1, t.tm_mday,
- t.tm_year + 1900, t.tm_hour, t.tm_min, t.tm_sec);
- break;
- case SQL_TYPE_DATE:
- l = sprintf(string_data, "%02d/%02d/%4d", t.tm_mon + 1, t.tm_mday, t.tm_year+1900);
- break;
- case SQL_TYPE_TIME:
- l = sprintf(string_data, "%02d:%02d:%02d", t.tm_hour, t.tm_min, t.tm_sec);
- break;
- }
-#endif
- ZVAL_STRINGL(val,string_data,l,1);
- break;
- }
- } /* switch (type) */
- return SUCCESS;
-}
-/* }}} */
-
-static int _php_ibase_arr_zval(zval *ar_zval, char *data, unsigned long data_size, /* {{{ */
- ibase_array *ib_array, int dim, int flag TSRMLS_DC)
-{
- /**
- * Create multidimension array - recursion function
- */
- int
- u_bound = ib_array->ar_desc.array_desc_bounds[dim].array_bound_upper,
- l_bound = ib_array->ar_desc.array_desc_bounds[dim].array_bound_lower,
- dim_len = 1 + u_bound - l_bound;
- unsigned short i;
-
- if (dim < ib_array->ar_desc.array_desc_dimensions) { /* array again */
- unsigned long slice_size = data_size / dim_len;
-
- array_init(ar_zval);
-
- for (i = 0; i < dim_len; ++i) {
- zval *slice_zval;
- ALLOC_INIT_ZVAL(slice_zval);
-
- /* recursion here */
- if (FAILURE == _php_ibase_arr_zval(slice_zval, data, slice_size, ib_array, dim + 1,
- flag TSRMLS_CC)) {
- return FAILURE;
- }
- data += slice_size;
-
- add_index_zval(ar_zval,l_bound+i,slice_zval);
- }
- } else { /* data at last */
-
- if (FAILURE == _php_ibase_var_zval(ar_zval, data, ib_array->el_type,
- ib_array->ar_desc.array_desc_length, ib_array->ar_desc.array_desc_scale, flag TSRMLS_CC)) {
- return FAILURE;
- }
-
- /* fix for peculiar handling of VARCHAR arrays;
- truncate the field to the cstring length */
- if (ib_array->ar_desc.array_desc_dtype == blr_varying ||
- ib_array->ar_desc.array_desc_dtype == blr_varying2) {
-
- Z_STRLEN_P(ar_zval) = strlen(Z_STRVAL_P(ar_zval));
- }
- }
- return SUCCESS;
-}
-/* }}} */
-
-static void _php_ibase_fetch_hash(INTERNAL_FUNCTION_PARAMETERS, int fetch_type) /* {{{ */
-{
- zval **result_arg, **flag_arg;
- long i, array_cnt = 0, flag = 0;
- ibase_result *ib_result;
-
- RESET_ERRMSG;
-
- switch (ZEND_NUM_ARGS()) {
- case 1:
- if (FAILURE == zend_get_parameters_ex(1, &result_arg)) {
- RETURN_FALSE;
- }
- break;
- case 2:
- if (FAILURE == zend_get_parameters_ex(2, &result_arg, &flag_arg)) {
- RETURN_FALSE;
- }
- convert_to_long_ex(flag_arg);
- flag = Z_LVAL_PP(flag_arg);
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
-
- ZEND_FETCH_RESOURCE(ib_result, ibase_result *, result_arg, -1, LE_RESULT, le_result);
-
- if (ib_result->out_sqlda == NULL || !ib_result->has_more_rows) {
- RETURN_FALSE;
- }
-
- if (ib_result->statement_type != isc_info_sql_stmt_exec_procedure) {
-
- if (isc_dsql_fetch(IB_STATUS, &ib_result->stmt, 1, ib_result->out_sqlda)) {
-
- ib_result->has_more_rows = 0;
- if (IB_STATUS[0] && IB_STATUS[1]) { /* error in fetch */
- _php_ibase_error(TSRMLS_C);
- }
- RETURN_FALSE;
- }
- } else {
- ib_result->has_more_rows = 0;
- }
-
- array_init(return_value);
-
- for (i = 0; i < ib_result->out_sqlda->sqld; ++i) {
- XSQLVAR *var = &ib_result->out_sqlda->sqlvar[i];
- char buf[METADATALENGTH+4], *alias = var->aliasname;
-
- if (! (fetch_type & FETCH_ROW)) {
- int i = 0;
- char const *base = "FIELD"; /* use 'FIELD' if name is empty */
-
- /**
- * Ensure no two columns have identical names:
- * keep generating new names until we find one that is unique.
- */
- switch (*alias) {
- void *p;
-
- default:
- i = 1;
- base = alias;
-
- while (SUCCESS == zend_symtable_find(
- Z_ARRVAL_P(return_value),alias,strlen(alias)+1,&p)) {
-
- case '\0':
- sprintf(alias = buf, "%s_%02d", base, i++);
- }
- }
- }
-
- if (((var->sqltype & 1) == 0) || *var->sqlind != -1) {
- zval *result;
- ALLOC_INIT_ZVAL(result);
-
- switch (var->sqltype & ~1) {
-
- default:
- _php_ibase_var_zval(result, var->sqldata, var->sqltype, var->sqllen,
- var->sqlscale, flag TSRMLS_CC);
- break;
- case SQL_BLOB:
- if (flag & PHP_IBASE_FETCH_BLOBS) { /* fetch blob contents into hash */
-
- ibase_blob blob_handle;
- unsigned long max_len = 0;
- static char bl_items[] = {isc_info_blob_total_length};
- char bl_info[20];
- unsigned short i;
-
- blob_handle.bl_handle = NULL;
- blob_handle.bl_qd = *(ISC_QUAD *) var->sqldata;
-
- if (isc_open_blob(IB_STATUS, &ib_result->link->handle, &ib_result->trans->handle,
- &blob_handle.bl_handle, &blob_handle.bl_qd)) {
- _php_ibase_error(TSRMLS_C);
- goto _php_ibase_fetch_error;
- }
-
- if (isc_blob_info(IB_STATUS, &blob_handle.bl_handle, sizeof(bl_items),
- bl_items, sizeof(bl_info), bl_info)) {
- _php_ibase_error(TSRMLS_C);
- goto _php_ibase_fetch_error;
- }
-
- /* find total length of blob's data */
- for (i = 0; i < sizeof(bl_info); ) {
- unsigned short item_len;
- char item = bl_info[i++];
-
- if (item == isc_info_end || item == isc_info_truncated ||
- item == isc_info_error || i >= sizeof(bl_info)) {
-
- _php_ibase_module_error("Could not determine BLOB size (internal error)"
- TSRMLS_CC);
- goto _php_ibase_fetch_error;
- }
-
- item_len = (unsigned short) isc_vax_integer(&bl_info[i], 2);
-
- if (item == isc_info_blob_total_length) {
- max_len = isc_vax_integer(&bl_info[i+2], item_len);
- break;
- }
- i += item_len+2;
- }
-
- if (max_len == 0) {
- ZVAL_STRING(result, "", 1);
- } else if (SUCCESS != _php_ibase_blob_get(result, &blob_handle,
- max_len TSRMLS_CC)) {
- goto _php_ibase_fetch_error;
- }
-
- if (isc_close_blob(IB_STATUS, &blob_handle.bl_handle)) {
- _php_ibase_error(TSRMLS_C);
- goto _php_ibase_fetch_error;
- }
-
- } else { /* blob id only */
- ISC_QUAD bl_qd = *(ISC_QUAD *) var->sqldata;
- ZVAL_STRINGL(result,_php_ibase_quad_to_string(bl_qd), BLOB_ID_LEN, 0);
- }
- break;
- case SQL_ARRAY:
- if (flag & PHP_IBASE_FETCH_ARRAYS) { /* array can be *huge* so only fetch if asked */
- ISC_QUAD ar_qd = *(ISC_QUAD *) var->sqldata;
- ibase_array *ib_array = &ib_result->out_array[array_cnt++];
- void *ar_data = emalloc(ib_array->ar_size);
-
- if (isc_array_get_slice(IB_STATUS, &ib_result->link->handle,
- &ib_result->trans->handle, &ar_qd, &ib_array->ar_desc,
- ar_data, &ib_array->ar_size)) {
- _php_ibase_error(TSRMLS_C);
- efree(ar_data);
- goto _php_ibase_fetch_error;
- }
-
- if (FAILURE == _php_ibase_arr_zval(result, ar_data, ib_array->ar_size, ib_array,
- 0, flag TSRMLS_CC)) {
- efree(ar_data);
- goto _php_ibase_fetch_error;
- }
- efree(ar_data);
-
- } else { /* blob id only */
- ISC_QUAD ar_qd = *(ISC_QUAD *) var->sqldata;
- ZVAL_STRINGL(result,_php_ibase_quad_to_string(ar_qd), BLOB_ID_LEN, 0);
- }
- break;
- _php_ibase_fetch_error:
- zval_dtor(result);
- FREE_ZVAL(result);
- RETURN_FALSE;
- } /* switch */
-
- if (fetch_type & FETCH_ROW) {
- add_index_zval(return_value, i, result);
- } else {
- add_assoc_zval(return_value, alias, result);
- }
- } else {
- if (fetch_type & FETCH_ROW) {
- add_index_null(return_value, i);
- } else {
- add_assoc_null(return_value, alias);
- }
- }
- } /* for field */
-}
-/* }}} */
-
-/* {{{ proto array ibase_fetch_row(resource result [, int fetch_flags])
- Fetch a row from the results of a query */
-PHP_FUNCTION(ibase_fetch_row)
-{
- _php_ibase_fetch_hash(INTERNAL_FUNCTION_PARAM_PASSTHRU, FETCH_ROW);
-}
-/* }}} */
-
-/* {{{ proto array ibase_fetch_assoc(resource result [, int fetch_flags])
- Fetch a row from the results of a query */
-PHP_FUNCTION(ibase_fetch_assoc)
-{
- _php_ibase_fetch_hash(INTERNAL_FUNCTION_PARAM_PASSTHRU, FETCH_ARRAY);
-}
-/* }}} */
-
-/* {{{ proto object ibase_fetch_object(resource result [, int fetch_flags])
- Fetch a object from the results of a query */
-PHP_FUNCTION(ibase_fetch_object)
-{
- _php_ibase_fetch_hash(INTERNAL_FUNCTION_PARAM_PASSTHRU, FETCH_ARRAY);
-
- if (Z_TYPE_P(return_value) == IS_ARRAY) {
- object_and_properties_init(return_value, ZEND_STANDARD_CLASS_DEF_PTR, Z_ARRVAL_P(return_value));
- }
-}
-/* }}} */
-
-
-/* {{{ proto bool ibase_name_result(resource result, string name)
- Assign a name to a result for use with ... WHERE CURRENT OF <name> statements */
-PHP_FUNCTION(ibase_name_result)
-{
- zval **result_arg, **name_arg;
- ibase_result *ib_result;
-
- RESET_ERRMSG;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &result_arg, &name_arg) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(ib_result, ibase_result *, result_arg, -1, LE_RESULT, le_result);
- convert_to_string_ex(name_arg);
-
- if (isc_dsql_set_cursor_name(IB_STATUS, &ib_result->stmt, Z_STRVAL_PP(name_arg), 0)) {
- _php_ibase_error(TSRMLS_C);
- RETURN_FALSE;
- }
- RETURN_TRUE;
-}
-/* }}} */
-
-
-/* {{{ proto bool ibase_free_result(resource result)
- Free the memory used by a result */
-PHP_FUNCTION(ibase_free_result)
-{
- zval **result_arg;
- ibase_result *ib_result;
-
- RESET_ERRMSG;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &result_arg) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(ib_result, ibase_result *, result_arg, -1, LE_RESULT, le_result);
- zend_list_delete(Z_LVAL_PP(result_arg));
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto resource ibase_prepare([resource link_identifier, ] string query)
- Prepare a query for later execution */
-PHP_FUNCTION(ibase_prepare)
-{
- zval **link_arg, **trans_arg, **query_arg;
- ibase_db_link *ib_link;
- ibase_trans *trans = NULL;
- int trans_res_id = 0;
- ibase_query *ib_query;
- char *query;
-
- RESET_ERRMSG;
-
- switch (ZEND_NUM_ARGS()) {
- case 1:
- if (zend_get_parameters_ex(1, &query_arg) == FAILURE) {
- RETURN_FALSE;
- }
- ZEND_FETCH_RESOURCE2(ib_link, ibase_db_link *, NULL, IBG(default_link), LE_LINK,
- le_link, le_plink);
- break;
- case 2:
- if (zend_get_parameters_ex(2, &link_arg, &query_arg) == FAILURE) {
- RETURN_FALSE;
- }
- _php_ibase_get_link_trans(INTERNAL_FUNCTION_PARAM_PASSTHRU, link_arg, &ib_link, &trans);
-
- if (trans != NULL) {
- convert_to_long_ex(link_arg);
- trans_res_id = Z_LVAL_PP(link_arg);
- }
-
- break;
- case 3:
- if (zend_get_parameters_ex(3, &link_arg, &trans_arg, &query_arg) == FAILURE) {
- RETURN_FALSE;
- }
- ZEND_FETCH_RESOURCE2(ib_link, ibase_db_link*, link_arg, -1, LE_LINK, le_link, le_plink);
- ZEND_FETCH_RESOURCE(trans, ibase_trans*, trans_arg, -1, LE_TRANS, le_trans);
-
- convert_to_long_ex(trans_arg);
- trans_res_id = Z_LVAL_PP(trans_arg);
-
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
-
- convert_to_string_ex(query_arg);
- query = Z_STRVAL_PP(query_arg);
-
- if (FAILURE == _php_ibase_def_trans(ib_link, &trans TSRMLS_CC)) {
- RETURN_FALSE;
- }
-
- ib_query = (ibase_query *) emalloc(sizeof(ibase_query));
-
- if (FAILURE == _php_ibase_alloc_query(ib_query, ib_link, trans, query, ib_link->dialect,
- trans_res_id TSRMLS_CC)) {
- efree(ib_query);
- RETURN_FALSE;
- }
- ZEND_REGISTER_RESOURCE(return_value, ib_query, le_query);
-}
-/* }}} */
-
-/* {{{ proto mixed ibase_execute(resource query [, mixed bind_arg [, mixed bind_arg [, ...]]])
- Execute a previously prepared query */
-PHP_FUNCTION(ibase_execute)
-{
- zval *query, ***args = NULL;
- ibase_query *ib_query;
- ibase_result *result = NULL;
-
- RESET_ERRMSG;
-
- RETVAL_FALSE;
-
- if (FAILURE == zend_parse_parameters(ZEND_NUM_ARGS() ? 1 : 0 TSRMLS_CC, "r", &query)) {
- return;
- }
-
- ZEND_FETCH_RESOURCE(ib_query, ibase_query *, &query, -1, LE_QUERY, le_query);
-
- do {
- int bind_n = ZEND_NUM_ARGS() - 1,
- expected_n = ib_query->in_sqlda ? ib_query->in_sqlda->sqld : 0;
-
- 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 **));
-
- if (FAILURE == zend_get_parameters_array_ex(ZEND_NUM_ARGS(), args)) {
- break;
- }
- }
-
- /* Have we used this cursor before and it's still open (exec proc has no cursor) ? */
- if (ib_query->result_res_id != 0
- && ib_query->statement_type != isc_info_sql_stmt_exec_procedure) {
- IBDEBUG("Implicitly closing a cursor");
-
- if (isc_dsql_free_statement(IB_STATUS, &ib_query->stmt, DSQL_close)) {
- _php_ibase_error(TSRMLS_C);
- break;
- }
- /* invalidate previous results returned by this query (not necessary for exec proc) */
- zend_list_delete(ib_query->result_res_id);
- }
-
- if (FAILURE == _php_ibase_exec(INTERNAL_FUNCTION_PARAM_PASSTHRU, &result, ib_query,
- &args[1])) {
- break;
- }
-
- /* free the query if trans handle was released */
- if (ib_query->trans->handle == NULL) {
- zend_list_delete(Z_LVAL_P(query));
- }
-
- if (result != NULL) {
- result->type = EXECUTE_RESULT;
- if (ib_query->statement_type == isc_info_sql_stmt_exec_procedure) {
- result->stmt = NULL;
- }
- ib_query->result_res_id = zend_list_insert(result, le_result);
- RETVAL_RESOURCE(ib_query->result_res_id);
- } else {
- RETVAL_TRUE;
- }
- } while (0);
-
- if (args) {
- free_alloca(args);
- }
-}
-/* }}} */
-
-/* {{{ proto bool ibase_free_query(resource query)
- Free memory used by a query */
-PHP_FUNCTION(ibase_free_query)
-{
- zval **query_arg;
- ibase_query *ib_query;
-
- RESET_ERRMSG;
-
- if (ZEND_NUM_ARGS()!=1 || zend_get_parameters_ex(1, &query_arg) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(ib_query, ibase_query *, query_arg, -1, LE_QUERY, le_query);
- zend_list_delete(Z_LVAL_PP(query_arg));
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto int ibase_num_fields(resource query_result)
- Get the number of fields in result */
-PHP_FUNCTION(ibase_num_fields)
-{
- zval **result;
- int type;
- XSQLDA *sqlda;
-
- RESET_ERRMSG;
-
- if (ZEND_NUM_ARGS()!=1 || zend_get_parameters_ex(1, &result)==FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- zend_list_find(Z_LVAL_PP(result), &type);
-
- if (type == le_query) {
- ibase_query *ib_query;
-
- ZEND_FETCH_RESOURCE(ib_query, ibase_query *, result, -1, LE_QUERY, le_query);
- sqlda = ib_query->out_sqlda;
- } else {
- ibase_result *ib_result;
-
- ZEND_FETCH_RESOURCE(ib_result, ibase_result *, result, -1, LE_RESULT, le_result);
- sqlda = ib_result->out_sqlda;
- }
-
- if (sqlda == NULL) {
- RETURN_LONG(0);
- } else {
- RETURN_LONG(sqlda->sqld);
- }
-}
-/* }}} */
-
-static void _php_ibase_field_info(zval *return_value, XSQLVAR *var) /* {{{ */
-{
- unsigned short len;
- char buf[16], *s = buf;
-
- array_init(return_value);
-
- add_index_stringl(return_value, 0, var->sqlname, var->sqlname_length, 1);
- add_assoc_stringl(return_value, "name", var->sqlname, var->sqlname_length, 1);
-
- add_index_stringl(return_value, 1, var->aliasname, var->aliasname_length, 1);
- add_assoc_stringl(return_value, "alias", var->aliasname, var->aliasname_length, 1);
-
- add_index_stringl(return_value, 2, var->relname, var->relname_length, 1);
- add_assoc_stringl(return_value, "relation", var->relname, var->relname_length, 1);
-
- len = sprintf(buf, "%d", var->sqllen);
- add_index_stringl(return_value, 3, buf, len, 1);
- add_assoc_stringl(return_value, "length", buf, len, 1);
-
- if (var->sqlscale < 0) {
- unsigned short precision = 0;
-
- switch (var->sqltype & ~1) {
-
- case SQL_SHORT:
- precision = 4;
- break;
- case SQL_LONG:
- precision = 9;
- break;
- case SQL_INT64:
- precision = 18;
- break;
- }
- len = sprintf(buf, "NUMERIC(%d,%d)", precision, -var->sqlscale);
- add_index_stringl(return_value, 4, s, len, 1);
- add_assoc_stringl(return_value, "type", s, len, 1);
- } else {
- switch (var->sqltype & ~1) {
- case SQL_TEXT:
- s = "CHAR";
- break;
- case SQL_VARYING:
- s = "VARCHAR";
- break;
- case SQL_SHORT:
- s = "SMALLINT";
- break;
- case SQL_LONG:
- s = "INTEGER";
- break;
- case SQL_FLOAT:
- s = "FLOAT"; break;
- case SQL_DOUBLE:
- case SQL_D_FLOAT:
- s = "DOUBLE PRECISION"; break;
- case SQL_INT64:
- s = "BIGINT";
- break;
- case SQL_TIMESTAMP:
- s = "TIMESTAMP";
- break;
- case SQL_TYPE_DATE:
- s = "DATE";
- break;
- case SQL_TYPE_TIME:
- s = "TIME";
- break;
- case SQL_BLOB:
- s = "BLOB";
- break;
- case SQL_ARRAY:
- s = "ARRAY";
- break;
- /* FIXME: provide more detailed information about the field type, field size
- * and array dimensions */
- case SQL_QUAD:
- s = "QUAD";
- break;
- }
- add_index_string(return_value, 4, s, 1);
- add_assoc_string(return_value, "type", s, 1);
- }
-}
-/* }}} */
-
-/* {{{ proto array ibase_field_info(resource query_result, int field_number)
- Get information about a field */
-PHP_FUNCTION(ibase_field_info)
-{
- zval **result_arg, **field_arg;
- int type;
- XSQLDA *sqlda;
-
- RESET_ERRMSG;
-
- if (ZEND_NUM_ARGS()!=2 || zend_get_parameters_ex(2, &result_arg, &field_arg)==FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- zend_list_find(Z_LVAL_PP(result_arg), &type);
-
- if (type == le_query) {
- ibase_query *ib_query;
-
- ZEND_FETCH_RESOURCE(ib_query, ibase_query *, result_arg, -1, LE_QUERY, le_query);
- sqlda = ib_query->out_sqlda;
- } else {
- ibase_result *ib_result;
-
- ZEND_FETCH_RESOURCE(ib_result, ibase_result *, result_arg, -1, LE_RESULT, le_result);
- sqlda = ib_result->out_sqlda;
- }
-
- if (sqlda == NULL) {
- _php_ibase_module_error("Trying to get field info from a non-select query" TSRMLS_CC);
- RETURN_FALSE;
- }
-
- convert_to_long_ex(field_arg);
-
- if (Z_LVAL_PP(field_arg) < 0 || Z_LVAL_PP(field_arg) >= sqlda->sqld) {
- RETURN_FALSE;
- }
- _php_ibase_field_info(return_value,sqlda->sqlvar + Z_LVAL_PP(field_arg));
-}
-/* }}} */
-
-/* {{{ proto int ibase_num_params(resource query)
- Get the number of params in a prepared query */
-PHP_FUNCTION(ibase_num_params)
-{
- zval **result;
- ibase_query *ib_query;
-
- RESET_ERRMSG;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &result) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(ib_query, ibase_query *, result, -1, LE_QUERY, le_query);
-
- if (ib_query->in_sqlda == NULL) {
- RETURN_LONG(0);
- } else {
- RETURN_LONG(ib_query->in_sqlda->sqld);
- }
-}
-/* }}} */
-
-/* {{{ proto array ibase_param_info(resource query, int field_number)
- Get information about a parameter */
-PHP_FUNCTION(ibase_param_info)
-{
- zval **result_arg, **field_arg;
- ibase_query *ib_query;
-
- RESET_ERRMSG;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &result_arg, &field_arg) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(ib_query, ibase_query *, result_arg, -1, LE_QUERY, le_query);
-
- if (ib_query->in_sqlda == NULL) {
- RETURN_FALSE;
- }
-
- convert_to_long_ex(field_arg);
-
- if (Z_LVAL_PP(field_arg) < 0 || Z_LVAL_PP(field_arg) >= ib_query->in_sqlda->sqld) {
- RETURN_FALSE;
- }
-
- _php_ibase_field_info(return_value,ib_query->in_sqlda->sqlvar + Z_LVAL_PP(field_arg));
-}
-/* }}} */
-
-#endif /* HAVE_IBASE */
-
-/*
- * 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/interbase/ibase_service.c b/ext/interbase/ibase_service.c
deleted file mode 100644
index fe02daeec9..0000000000
--- a/ext/interbase/ibase_service.c
+++ /dev/null
@@ -1,629 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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. |
- +----------------------------------------------------------------------+
- | Authors: Ard Biesheuvel <a.k.biesheuvel@its.tudelft.nl> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "php.h"
-
-#if HAVE_IBASE
-
-#include "php_interbase.h"
-#include "php_ibase_includes.h"
-
-typedef struct {
- isc_svc_handle handle;
- char *hostname;
- char *username;
- long res_id;
-} ibase_service;
-
-static int le_service;
-
-static void _php_ibase_free_service(zend_rsrc_list_entry *rsrc TSRMLS_DC) /* {{{ */
-{
- ibase_service *sv = (ibase_service *) rsrc->ptr;
-
- if (isc_service_detach(IB_STATUS, &sv->handle)) {
- _php_ibase_error(TSRMLS_C);
- }
-
- if (sv->hostname) {
- efree(sv->hostname);
- }
- if (sv->username) {
- efree(sv->username);
- }
-
- efree(sv);
-}
-/* }}} */
-
-/* the svc api seems to get confused after an error has occurred,
- so invalidate the handle on errors */
-#define IBASE_SVC_ERROR(svm) \
- do { zend_list_delete(svm->res_id); _php_ibase_error(TSRMLS_C); } while (0)
-
-
-void php_ibase_service_minit(INIT_FUNC_ARGS) /* {{{ */
-{
- le_service = zend_register_list_destructors_ex(_php_ibase_free_service, NULL,
- "interbase service manager handle", module_number);
-
- /* backup options */
- REGISTER_LONG_CONSTANT("IBASE_BKP_IGNORE_CHECKSUMS", isc_spb_bkp_ignore_checksums, CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("IBASE_BKP_IGNORE_LIMBO", isc_spb_bkp_ignore_limbo, CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("IBASE_BKP_METADATA_ONLY", isc_spb_bkp_metadata_only, CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("IBASE_BKP_NO_GARBAGE_COLLECT", isc_spb_bkp_no_garbage_collect, CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("IBASE_BKP_OLD_DESCRIPTIONS", isc_spb_bkp_old_descriptions, CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("IBASE_BKP_NON_TRANSPORTABLE", isc_spb_bkp_non_transportable, CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("IBASE_BKP_CONVERT", isc_spb_bkp_convert, CONST_PERSISTENT);
-
- /* restore options */
- REGISTER_LONG_CONSTANT("IBASE_RES_DEACTIVATE_IDX", isc_spb_res_deactivate_idx, CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("IBASE_RES_NO_SHADOW", isc_spb_res_no_shadow, CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("IBASE_RES_NO_VALIDITY", isc_spb_res_no_validity, CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("IBASE_RES_ONE_AT_A_TIME", isc_spb_res_one_at_a_time, CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("IBASE_RES_REPLACE", isc_spb_res_replace, CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("IBASE_RES_CREATE", isc_spb_res_create, CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("IBASE_RES_USE_ALL_SPACE", isc_spb_res_use_all_space, CONST_PERSISTENT);
-
- /* manage options */
- REGISTER_LONG_CONSTANT("IBASE_PRP_PAGE_BUFFERS", isc_spb_prp_page_buffers, CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("IBASE_PRP_SWEEP_INTERVAL", isc_spb_prp_sweep_interval, CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("IBASE_PRP_SHUTDOWN_DB", isc_spb_prp_shutdown_db, CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("IBASE_PRP_DENY_NEW_TRANSACTIONS", isc_spb_prp_deny_new_transactions, CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("IBASE_PRP_DENY_NEW_ATTACHMENTS", isc_spb_prp_deny_new_attachments, CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("IBASE_PRP_RESERVE_SPACE", isc_spb_prp_reserve_space, CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("IBASE_PRP_RES_USE_FULL", isc_spb_prp_res_use_full, CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("IBASE_PRP_RES", isc_spb_prp_res, CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("IBASE_PRP_WRITE_MODE", isc_spb_prp_write_mode, CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("IBASE_PRP_WM_ASYNC", isc_spb_prp_wm_async, CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("IBASE_PRP_WM_SYNC", isc_spb_prp_wm_sync, CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("IBASE_PRP_ACCESS_MODE", isc_spb_prp_access_mode, CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("IBASE_PRP_AM_READONLY", isc_spb_prp_am_readonly, CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("IBASE_PRP_AM_READWRITE", isc_spb_prp_am_readwrite, CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("IBASE_PRP_SET_SQL_DIALECT", isc_spb_prp_set_sql_dialect, CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("IBASE_PRP_ACTIVATE", isc_spb_prp_activate, CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("IBASE_PRP_DB_ONLINE", isc_spb_prp_db_online, CONST_PERSISTENT);
-
- /* repair options */
- REGISTER_LONG_CONSTANT("IBASE_RPR_CHECK_DB", isc_spb_rpr_check_db, CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("IBASE_RPR_IGNORE_CHECKSUM", isc_spb_rpr_ignore_checksum, CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("IBASE_RPR_KILL_SHADOWS", isc_spb_rpr_kill_shadows, CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("IBASE_RPR_MEND_DB", isc_spb_rpr_mend_db, CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("IBASE_RPR_VALIDATE_DB", isc_spb_rpr_validate_db, CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("IBASE_RPR_FULL", isc_spb_rpr_full, CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("IBASE_RPR_SWEEP_DB", isc_spb_rpr_sweep_db, CONST_PERSISTENT);
-
- /* db info arguments */
- REGISTER_LONG_CONSTANT("IBASE_STS_DATA_PAGES", isc_spb_sts_data_pages, CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("IBASE_STS_DB_LOG", isc_spb_sts_db_log, CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("IBASE_STS_HDR_PAGES", isc_spb_sts_hdr_pages, CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("IBASE_STS_IDX_PAGES", isc_spb_sts_idx_pages, CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("IBASE_STS_SYS_RELATIONS", isc_spb_sts_sys_relations, CONST_PERSISTENT);
-
- /* server info arguments */
- REGISTER_LONG_CONSTANT("IBASE_SVC_SERVER_VERSION", isc_info_svc_server_version, CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("IBASE_SVC_IMPLEMENTATION", isc_info_svc_implementation, CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("IBASE_SVC_GET_ENV", isc_info_svc_get_env, CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("IBASE_SVC_GET_ENV_LOCK", isc_info_svc_get_env_lock, CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("IBASE_SVC_GET_ENV_MSG", isc_info_svc_get_env_msg, CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("IBASE_SVC_USER_DBPATH", isc_info_svc_user_dbpath, CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("IBASE_SVC_SVR_DB_INFO", isc_info_svc_svr_db_info, CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("IBASE_SVC_GET_USERS", isc_info_svc_get_users, CONST_PERSISTENT);
-}
-/* }}} */
-
-static void _php_ibase_user(INTERNAL_FUNCTION_PARAMETERS, char operation) /* {{{ */
-{
- /* user = 0, password = 1, first_name = 2, middle_name = 3, last_name = 4 */
- static char const user_flags[] = { isc_spb_sec_username, isc_spb_sec_password,
- isc_spb_sec_firstname, isc_spb_sec_middlename, isc_spb_sec_lastname };
- char buf[128], *args[] = { NULL, NULL, NULL, NULL, NULL };
- int i, args_len[] = { 0, 0, 0, 0, 0 };
- unsigned short spb_len = 1;
- zval *res;
- ibase_service *svm;
-
- RESET_ERRMSG;
-
- if (FAILURE == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC,
- (operation == isc_action_svc_delete_user) ? "rs" : "rss|sss",
- &res, &args[0], &args_len[0], &args[1], &args_len[1], &args[2], &args_len[2],
- &args[3], &args_len[3], &args[4], &args_len[4])) {
- RETURN_FALSE;
- }
-
- ZEND_FETCH_RESOURCE(svm, ibase_service *, &res, -1, "Interbase service manager handle",
- le_service);
-
- buf[0] = operation;
-
- for (i = 0; i < sizeof(user_flags); ++i) {
- if (args[i] != NULL) {
- int chunk = snprintf(&buf[spb_len], sizeof(buf) - spb_len, "%c%c%c%s",
- user_flags[i], (char)args_len[i], (char)(args_len[i] >> 8), args[i]);
-
- if ((spb_len + chunk) > sizeof(buf) || chunk <= 0) {
- _php_ibase_module_error("Internal error: insufficient buffer space for SPB (%d)"
- TSRMLS_CC, spb_len);
- RETURN_FALSE;
- }
- spb_len += chunk;
- }
- }
-
- /* now start the job */
- if (isc_service_start(IB_STATUS, &svm->handle, NULL, spb_len, buf)) {
- IBASE_SVC_ERROR(svm);
- RETURN_FALSE;
- }
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto bool ibase_add_user(resource service_handle, string user_name, string password [, string first_name [, string middle_name [, string last_name]]])
- Add a user to security database */
-PHP_FUNCTION(ibase_add_user)
-{
- _php_ibase_user(INTERNAL_FUNCTION_PARAM_PASSTHRU, isc_action_svc_add_user);
-}
-/* }}} */
-
-/* {{{ proto bool ibase_modify_user(resource service_handle, string user_name, string password [, string first_name [, string middle_name [, string last_name]]])
- Modify a user in security database */
-PHP_FUNCTION(ibase_modify_user)
-{
- _php_ibase_user(INTERNAL_FUNCTION_PARAM_PASSTHRU, isc_action_svc_modify_user);
-}
-/* }}} */
-
-/* {{{ proto bool ibase_delete_user(resource service_handle, string user_name, string password [, string first_name [, string middle_name [, string last_name]]])
- Delete a user from security database */
-PHP_FUNCTION(ibase_delete_user)
-{
- _php_ibase_user(INTERNAL_FUNCTION_PARAM_PASSTHRU, isc_action_svc_delete_user);
-}
-/* }}} */
-
-/* {{{ proto resource ibase_service_attach(string host, string dba_username, string dba_password)
- Connect to the service manager */
-PHP_FUNCTION(ibase_service_attach)
-{
- long hlen, ulen, plen, spb_len;
- ibase_service *svm;
- char buf[128], *host, *user, *pass, *loc;
- isc_svc_handle handle = NULL;
-
- RESET_ERRMSG;
-
- if (SUCCESS != zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "sss",
- &host, &hlen, &user, &ulen, &pass, &plen)) {
-
- RETURN_FALSE;
- }
-
- /* construct the spb, hack the service name into it as well */
- spb_len = snprintf(buf, sizeof(buf), "%c%c%c%c%s%c%c%s" "%s:service_mgr",
- isc_spb_version, isc_spb_current_version, isc_spb_user_name, (char)ulen,
- 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);
- RETURN_FALSE;
- }
-
- spb_len -= hlen + 12;
- loc = buf + spb_len; /* points to %s:service_mgr part */
-
- /* attach to the service manager */
- if (isc_service_attach(IB_STATUS, 0, loc, &handle, (unsigned short)spb_len, buf)) {
- _php_ibase_error(TSRMLS_C);
- RETURN_FALSE;
- }
-
- svm = (ibase_service*)emalloc(sizeof(ibase_service));
- svm->handle = handle;
- svm->hostname = estrdup(host);
- svm->username = estrdup(user);
-
- ZEND_REGISTER_RESOURCE(return_value, svm, le_service);
- svm->res_id = Z_LVAL_P(return_value);
-}
-/* }}} */
-
-/* {{{ proto bool ibase_service_detach(resource service_handle)
- Disconnect from the service manager */
-PHP_FUNCTION(ibase_service_detach)
-{
- zval *res;
-
- RESET_ERRMSG;
-
- if (SUCCESS != zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &res)) {
- RETURN_FALSE;
- }
-
- zend_list_delete(Z_LVAL_P(res));
-
- RETURN_TRUE;
-}
-/* }}} */
-
-static void _php_ibase_service_query(INTERNAL_FUNCTION_PARAMETERS, /* {{{ */
- ibase_service *svm, char info_action)
-{
- static char spb[] = { isc_info_svc_timeout, 10, 0, 0, 0 };
-
- char res_buf[400], *result, *heap_buf = NULL, *heap_p;
- long heap_buf_size = 200, line_len;
-
- /* info about users requires an action first */
- if (info_action == isc_info_svc_get_users) {
- static char action[] = { isc_action_svc_display_user };
-
- if (isc_service_start(IB_STATUS, &svm->handle, NULL, sizeof(action), action)) {
- IBASE_SVC_ERROR(svm);
- RETURN_FALSE;
- }
- }
-
-query_loop:
- result = res_buf;
-
- if (isc_service_query(IB_STATUS, &svm->handle, NULL, sizeof(spb), spb,
- 1, &info_action, sizeof(res_buf), res_buf)) {
-
- IBASE_SVC_ERROR(svm);
- RETURN_FALSE;
- }
- while (*result != isc_info_end) {
- switch (*result++) {
- default:
- RETURN_FALSE;
-
- case isc_info_svc_line:
- if (! (line_len = isc_vax_integer(result, 2))) {
- /* done */
- if (heap_buf) {
- RETURN_STRING(heap_buf,0);
- } else {
- RETURN_TRUE;
- }
- }
- if (!heap_buf || (heap_p - heap_buf + line_len +2) > heap_buf_size) {
- long res_size = heap_buf ? heap_p - heap_buf : 0;
-
- while (heap_buf_size < (res_size + line_len +2)) {
- heap_buf_size *= 2;
- }
- heap_buf = (char*) erealloc(heap_buf, heap_buf_size);
- heap_p = heap_buf + res_size;
- }
- result += 2;
- sprintf(heap_p, "%s\n", result);
- heap_p += line_len +2;
- goto query_loop; /* repeat until result is exhausted */
-
- case isc_info_svc_server_version:
- case isc_info_svc_implementation:
- case isc_info_svc_get_env:
- case isc_info_svc_get_env_lock:
- case isc_info_svc_get_env_msg:
- case isc_info_svc_user_dbpath:
- RETURN_STRINGL(result + 2, isc_vax_integer(result, 2), 1);
-
- case isc_info_svc_svr_db_info:
- array_init(return_value);
-
- do {
- switch (*result++) {
- int len;
-
- case isc_spb_num_att:
- add_assoc_long(return_value, "attachments", isc_vax_integer(result,4));
- result += 4;
- break;
-
- case isc_spb_num_db:
- add_assoc_long(return_value, "databases", isc_vax_integer(result,4));
- result += 4;
- break;
-
- case isc_spb_dbname:
- len = isc_vax_integer(result,2);
- add_next_index_stringl(return_value, result +2, len, 1);
- result += len+2;
- }
- } while (*result != isc_info_flag_end);
- return;
-
- case isc_info_svc_get_users: {
- zval *user;
- array_init(return_value);
-
- while (*result != isc_info_end) {
-
- switch (*result++) {
- int len;
-
- case isc_spb_sec_username:
- /* it appears that the username is always first */
- ALLOC_INIT_ZVAL(user);
- array_init(user);
- add_next_index_zval(return_value, user);
-
- len = isc_vax_integer(result,2);
- add_assoc_stringl(user, "user_name", result +2, len, 1);
- result += len+2;
- break;
-
- case isc_spb_sec_firstname:
- len = isc_vax_integer(result,2);
- add_assoc_stringl(user, "first_name", result +2, len, 1);
- result += len+2;
- break;
-
- case isc_spb_sec_middlename:
- len = isc_vax_integer(result,2);
- add_assoc_stringl(user, "middle_name", result +2, len, 1);
- result += len+2;
- break;
-
- case isc_spb_sec_lastname:
- len = isc_vax_integer(result,2);
- add_assoc_stringl(user, "last_name", result +2, len, 1);
- result += len+2;
- break;
-
- case isc_spb_sec_userid:
- add_assoc_long(user, "user_id", isc_vax_integer(result, 4));
- result += 4;
- break;
-
- case isc_spb_sec_groupid:
- add_assoc_long(user, "group_id", isc_vax_integer(result, 4));
- result += 4;
- break;
- }
- }
- return;
- }
- }
- }
-}
-/* }}} */
-
-static void _php_ibase_backup_restore(INTERNAL_FUNCTION_PARAMETERS, char operation) /* {{{ */
-{
- /**
- * It appears that the service API is a little bit confused about which flag
- * to use for the source and destination in the case of a restore operation.
- * When passing the backup file as isc_spb_dbname and the destination db as
- * bpk_file, things work well.
- */
- zval *res;
- char *db, *bk, buf[200];
- long dblen, bklen, spb_len, opts = 0;
- zend_bool verbose = 0;
- ibase_service *svm;
-
- RESET_ERRMSG;
-
- if (SUCCESS != zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rss|lb",
- &res, &db, &dblen, &bk, &bklen, &opts, &verbose)) {
- RETURN_FALSE;
- }
-
- ZEND_FETCH_RESOURCE(svm, ibase_service *, &res, -1,
- "Interbase service manager handle", le_service);
-
- /* fill the param buffer */
- spb_len = snprintf(buf, sizeof(buf), "%c%c%c%c%s%c%c%c%s%c%c%c%c%c",
- operation, isc_spb_dbname, (char)dblen, (char)(dblen >> 8), db,
- isc_spb_bkp_file, (char)bklen, (char)(bklen >> 8), bk, isc_spb_options,
- (char)opts,(char)(opts >> 8), (char)(opts >> 16), (char)(opts >> 24));
-
- if (verbose) {
- buf[spb_len++] = isc_spb_verbose;
- }
-
- if (spb_len > sizeof(buf) || spb_len <= 0) {
- _php_ibase_module_error("Internal error: insufficient buffer space for SPB (%ld)"
- TSRMLS_CC, spb_len);
- RETURN_FALSE;
- }
-
- /* now start the backup/restore job */
- if (isc_service_start(IB_STATUS, &svm->handle, NULL, (unsigned short)spb_len, buf)) {
- IBASE_SVC_ERROR(svm);
- RETURN_FALSE;
- }
-
- if (!verbose) {
- RETURN_TRUE;
- } else {
- _php_ibase_service_query(INTERNAL_FUNCTION_PARAM_PASSTHRU, svm, isc_info_svc_line);
- }
-}
-/* }}} */
-
-/* {{{ proto mixed ibase_backup(resource service_handle, string source_db, string dest_file [, int options [, bool verbose]])
- Initiates a backup task in the service manager and returns immediately */
-PHP_FUNCTION(ibase_backup)
-{
- _php_ibase_backup_restore(INTERNAL_FUNCTION_PARAM_PASSTHRU, isc_action_svc_backup);
-}
-/* }}} */
-
-/* {{{ proto mixed ibase_restore(resource service_handle, string source_file, string dest_db [, int options [, bool verbose]])
- Initiates a restore task in the service manager and returns immediately */
-PHP_FUNCTION(ibase_restore)
-{
- _php_ibase_backup_restore(INTERNAL_FUNCTION_PARAM_PASSTHRU, isc_action_svc_restore);
-}
-/* }}} */
-
-static void _php_ibase_service_action(INTERNAL_FUNCTION_PARAMETERS, char svc_action) /* {{{ */
-{
- zval *res;
- char buf[128], *db;
- long action, spb_len, dblen, argument = 0;
- ibase_service *svm;
-
- RESET_ERRMSG;
-
- if (SUCCESS != zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rsl|l",
- &res, &db, &dblen, &action, &argument)) {
- RETURN_FALSE;
- }
-
- ZEND_FETCH_RESOURCE(svm, ibase_service *, &res, -1,
- "Interbase service manager handle", le_service);
-
- if (svc_action == isc_action_svc_db_stats) {
- switch (action) {
- default:
- goto unknown_option;
-
- case isc_spb_sts_data_pages:
- case isc_spb_sts_db_log:
- case isc_spb_sts_hdr_pages:
- case isc_spb_sts_idx_pages:
- case isc_spb_sts_sys_relations:
- goto options_argument;
- }
- } else {
- /* these actions all expect different types of arguments */
- switch (action) {
- default:
-unknown_option:
- _php_ibase_module_error("Unrecognised option (%ld)" TSRMLS_CC, action);
- RETURN_FALSE;
-
- case isc_spb_rpr_check_db:
- case isc_spb_rpr_ignore_checksum:
- case isc_spb_rpr_kill_shadows:
- case isc_spb_rpr_mend_db:
- case isc_spb_rpr_validate_db:
- case isc_spb_rpr_sweep_db:
- svc_action = isc_action_svc_repair;
-
- case isc_spb_prp_activate:
- case isc_spb_prp_db_online:
-options_argument:
- argument |= action;
- action = isc_spb_options;
-
- case isc_spb_prp_page_buffers:
- case isc_spb_prp_sweep_interval:
- case isc_spb_prp_shutdown_db:
- case isc_spb_prp_deny_new_transactions:
- case isc_spb_prp_deny_new_attachments:
- case isc_spb_prp_set_sql_dialect:
- spb_len = snprintf(buf, sizeof(buf), "%c%c%c%c%s%c%c%c%c%c",
- svc_action, isc_spb_dbname, (char)dblen, (char)(dblen >> 8), db,
- (char)action, (char)argument, (char)(argument >> 8), (char)(argument >> 16),
- (char)(argument >> 24));
- break;
-
- case isc_spb_prp_reserve_space:
- case isc_spb_prp_write_mode:
- case isc_spb_prp_access_mode:
- spb_len = snprintf(buf, sizeof(buf), "%c%c%c%c%s%c%c",
- isc_action_svc_properties, isc_spb_dbname, (char)dblen, (char)(dblen >> 8),
- db, (char)action, (char)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);
- RETURN_FALSE;
- }
-
- if (isc_service_start(IB_STATUS, &svm->handle, NULL, (unsigned short)spb_len, buf)) {
- IBASE_SVC_ERROR(svm);
- RETURN_FALSE;
- }
-
- if (svc_action == isc_action_svc_db_stats) {
- _php_ibase_service_query(INTERNAL_FUNCTION_PARAM_PASSTHRU, svm, isc_info_svc_line);
- } else {
- RETURN_TRUE;
- }
-}
-/* }}} */
-
-/* {{{ proto bool ibase_maintain_db(resource service_handle, string db, int action [, int argument])
- Execute a maintenance command on the database server */
-PHP_FUNCTION(ibase_maintain_db)
-{
- _php_ibase_service_action(INTERNAL_FUNCTION_PARAM_PASSTHRU, isc_action_svc_properties);
-}
-/* }}} */
-
-/* {{{ proto string ibase_db_info(resource service_handle, string db, int action [, int argument])
- Request statistics about a database */
-PHP_FUNCTION(ibase_db_info)
-{
- _php_ibase_service_action(INTERNAL_FUNCTION_PARAM_PASSTHRU, isc_action_svc_db_stats);
-}
-/* }}} */
-
-/* {{{ proto string ibase_server_info(resource service_handle, int action)
- Request information about a database server */
-PHP_FUNCTION(ibase_server_info)
-{
- zval *res;
- long action;
- ibase_service *svm;
-
- RESET_ERRMSG;
-
- if (SUCCESS != zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rl", &res, &action)) {
- RETURN_FALSE;
- }
-
- ZEND_FETCH_RESOURCE(svm, ibase_service *, &res, -1,
- "Interbase service manager handle", le_service);
-
- _php_ibase_service_query(INTERNAL_FUNCTION_PARAM_PASSTHRU, svm, (char)action);
-}
-/* }}} */
-
-#else
-
-void php_ibase_register_service_constants(INIT_FUNC_ARGS) { /* nop */ }
-
-#endif /* HAVE_IBASE */
-
-/*
- * 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/interbase/interbase.c b/ext/interbase/interbase.c
deleted file mode 100644
index ecee39b09b..0000000000
--- a/ext/interbase/interbase.c
+++ /dev/null
@@ -1,1206 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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. |
- +----------------------------------------------------------------------+
- | Authors: Jouni Ahto <jouni.ahto@exdec.fi> |
- | Andrew Avdeev <andy@rsc.mv.ru> |
- | Ard Biesheuvel <a.k.biesheuvel@ewi.tudelft.nl> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#define _GNU_SOURCE
-
-#include "php.h"
-
-#if HAVE_IBASE
-
-#include "php_ini.h"
-#include "ext/standard/php_standard.h"
-#include "ext/standard/md5.h"
-#include "php_interbase.h"
-#include "php_ibase_includes.h"
-#include "SAPI.h"
-
-#include <time.h>
-
-#define ROLLBACK 0
-#define COMMIT 1
-#define RETAIN 2
-
-/* {{{ extension definition structures */
-function_entry ibase_functions[] = {
- PHP_FE(ibase_connect, NULL)
- PHP_FE(ibase_pconnect, NULL)
- PHP_FE(ibase_close, NULL)
- PHP_FE(ibase_drop_db, NULL)
- PHP_FE(ibase_query, NULL)
- PHP_FE(ibase_fetch_row, NULL)
- PHP_FE(ibase_fetch_assoc, NULL)
- PHP_FE(ibase_fetch_object, NULL)
- PHP_FE(ibase_free_result, NULL)
- PHP_FE(ibase_name_result, NULL)
- PHP_FE(ibase_prepare, NULL)
- PHP_FE(ibase_execute, NULL)
- PHP_FE(ibase_free_query, NULL)
- PHP_FE(ibase_gen_id, NULL)
- PHP_FE(ibase_num_fields, NULL)
- PHP_FE(ibase_num_params, NULL)
-#if abies_0
- PHP_FE(ibase_num_rows, NULL)
-#endif
- PHP_FE(ibase_affected_rows, NULL)
- PHP_FE(ibase_field_info, NULL)
- PHP_FE(ibase_param_info, NULL)
-
- PHP_FE(ibase_trans, NULL)
- PHP_FE(ibase_commit, NULL)
- PHP_FE(ibase_rollback, NULL)
- PHP_FE(ibase_commit_ret, NULL)
- PHP_FE(ibase_rollback_ret, NULL)
-
- PHP_FE(ibase_blob_info, NULL)
- PHP_FE(ibase_blob_create, NULL)
- PHP_FE(ibase_blob_add, NULL)
- PHP_FE(ibase_blob_cancel, NULL)
- PHP_FE(ibase_blob_close, NULL)
- PHP_FE(ibase_blob_open, NULL)
- PHP_FE(ibase_blob_get, NULL)
- PHP_FE(ibase_blob_echo, NULL)
- PHP_FE(ibase_blob_import, NULL)
- PHP_FE(ibase_errmsg, NULL)
- PHP_FE(ibase_errcode, NULL)
-
- PHP_FE(ibase_add_user, NULL)
- PHP_FE(ibase_modify_user, NULL)
- PHP_FE(ibase_delete_user, NULL)
-
- PHP_FE(ibase_service_attach, NULL)
- PHP_FE(ibase_service_detach, NULL)
- PHP_FE(ibase_backup, NULL)
- PHP_FE(ibase_restore, NULL)
- PHP_FE(ibase_maintain_db, NULL)
- PHP_FE(ibase_db_info, NULL)
- PHP_FE(ibase_server_info, NULL)
-
- PHP_FE(ibase_wait_event, NULL)
- PHP_FE(ibase_set_event_handler, NULL)
- PHP_FE(ibase_free_event_handler, NULL)
-
- /**
- * These aliases are provided in order to maintain forward compatibility. As Firebird
- * and InterBase are developed independently, functionality might be different between
- * the two branches in future versions.
- * Firebird users should use the aliases, so future InterBase-specific changes will
- * not affect their code
- */
- PHP_FALIAS(fbird_connect,ibase_connect, NULL)
- PHP_FALIAS(fbird_pconnect,ibase_pconnect, NULL)
- PHP_FALIAS(fbird_close,ibase_close, NULL)
- PHP_FALIAS(fbird_drop_db,ibase_drop_db, NULL)
- PHP_FALIAS(fbird_query,ibase_query, NULL)
- PHP_FALIAS(fbird_fetch_row,ibase_fetch_row, NULL)
- PHP_FALIAS(fbird_fetch_assoc,ibase_fetch_assoc, NULL)
- PHP_FALIAS(fbird_fetch_object,ibase_fetch_object, NULL)
- PHP_FALIAS(fbird_free_result,ibase_free_result, NULL)
- PHP_FALIAS(fbird_name_result,ibase_name_result, NULL)
- PHP_FALIAS(fbird_prepare,ibase_prepare, NULL)
- PHP_FALIAS(fbird_execute,ibase_execute, NULL)
- PHP_FALIAS(fbird_free_query,ibase_free_query, NULL)
- PHP_FALIAS(fbird_gen_id,ibase_gen_id, NULL)
- PHP_FALIAS(fbird_num_fields,ibase_num_fields, NULL)
- PHP_FALIAS(fbird_num_params,ibase_num_params, NULL)
-#if abies_0
- PHP_FALIAS(fbird_num_rows,ibase_num_rows, NULL)
-#endif
- PHP_FALIAS(fbird_affected_rows,ibase_affected_rows, NULL)
- PHP_FALIAS(fbird_field_info,ibase_field_info, NULL)
- PHP_FALIAS(fbird_param_info,ibase_param_info, NULL)
-
- PHP_FALIAS(fbird_trans,ibase_trans, NULL)
- PHP_FALIAS(fbird_commit,ibase_commit, NULL)
- PHP_FALIAS(fbird_rollback,ibase_rollback, NULL)
- PHP_FALIAS(fbird_commit_ret,ibase_commit_ret, NULL)
- PHP_FALIAS(fbird_rollback_ret,ibase_rollback_ret, NULL)
-
- PHP_FALIAS(fbird_blob_info,ibase_blob_info, NULL)
- PHP_FALIAS(fbird_blob_create,ibase_blob_create, NULL)
- PHP_FALIAS(fbird_blob_add,ibase_blob_add, NULL)
- PHP_FALIAS(fbird_blob_cancel,ibase_blob_cancel, NULL)
- PHP_FALIAS(fbird_blob_close,ibase_blob_close, NULL)
- PHP_FALIAS(fbird_blob_open,ibase_blob_open, NULL)
- PHP_FALIAS(fbird_blob_get,ibase_blob_get, NULL)
- PHP_FALIAS(fbird_blob_echo,ibase_blob_echo, NULL)
- PHP_FALIAS(fbird_blob_import,ibase_blob_import, NULL)
- PHP_FALIAS(fbird_errmsg,ibase_errmsg, NULL)
- PHP_FALIAS(fbird_errcode,ibase_errcode, NULL)
-
- PHP_FALIAS(fbird_add_user,ibase_add_user, NULL)
- PHP_FALIAS(fbird_modify_user,ibase_modify_user, NULL)
- PHP_FALIAS(fbird_delete_user,ibase_delete_user, NULL)
-
- PHP_FALIAS(fbird_service_attach,ibase_service_attach, NULL)
- PHP_FALIAS(fbird_service_detach,ibase_service_detach, NULL)
- PHP_FALIAS(fbird_backup,ibase_backup, NULL)
- PHP_FALIAS(fbird_restore,ibase_restore, NULL)
- PHP_FALIAS(fbird_maintain_db,ibase_maintain_db, NULL)
- PHP_FALIAS(fbird_db_info,ibase_db_info, NULL)
- PHP_FALIAS(fbird_server_info,ibase_server_info, NULL)
-
- PHP_FALIAS(fbird_wait_event,ibase_wait_event, NULL)
- PHP_FALIAS(fbird_set_event_handler,ibase_set_event_handler, NULL)
- PHP_FALIAS(fbird_free_event_handler,ibase_free_event_handler, NULL)
- {NULL, NULL, NULL}
-};
-
-zend_module_entry ibase_module_entry = {
- STANDARD_MODULE_HEADER,
- "interbase",
- ibase_functions,
- PHP_MINIT(ibase),
- PHP_MSHUTDOWN(ibase),
- NULL,
- PHP_RSHUTDOWN(ibase),
- PHP_MINFO(ibase),
- NO_VERSION_YET,
- STANDARD_MODULE_PROPERTIES
-};
-
-#ifdef COMPILE_DL_INTERBASE
-ZEND_GET_MODULE(ibase)
-#endif
-
-/* True globals, no need for thread safety */
-int le_link, le_plink, le_trans;
-
-ZEND_DECLARE_MODULE_GLOBALS(ibase)
-
-/* }}} */
-
-/* error handling ---------------------------- */
-
-/* {{{ proto string ibase_errmsg(void)
- Return error message */
-PHP_FUNCTION(ibase_errmsg)
-{
- if (ZEND_NUM_ARGS() != 0) {
- WRONG_PARAM_COUNT;
- }
-
- if (IBG(sql_code) != 0) {
- RETURN_STRING(IBG(errmsg), 1);
- }
-
- RETURN_FALSE;
-}
-/* }}} */
-
-/* {{{ proto int ibase_errcode(void)
- Return error code */
-PHP_FUNCTION(ibase_errcode)
-{
- if (ZEND_NUM_ARGS() != 0) {
- WRONG_PARAM_COUNT;
- }
-
- if (IBG(sql_code) != 0) {
- RETURN_LONG(IBG(sql_code));
- }
- RETURN_FALSE;
-}
-/* }}} */
-
-/* print interbase error and save it for ibase_errmsg() */
-void _php_ibase_error(TSRMLS_D) /* {{{ */
-{
- char *s = IBG(errmsg);
- ISC_STATUS *statusp = IB_STATUS;
-
- IBG(sql_code) = isc_sqlcode(IB_STATUS);
-
- while ((s - IBG(errmsg)) < MAX_ERRMSG - (IBASE_MSGSIZE + 2) && isc_interprete(s, &statusp)) {
- strcat(IBG(errmsg), " ");
- s = IBG(errmsg) + strlen(IBG(errmsg));
- }
-
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", IBG(errmsg));
-}
-/* }}} */
-
-/* print php interbase module error and save it for ibase_errmsg() */
-void _php_ibase_module_error(char *msg TSRMLS_DC, ...) /* {{{ */
-{
- va_list ap;
-
-#ifdef ZTS
- va_start(ap, TSRMLS_C);
-#else
- va_start(ap, msg);
-#endif
-
- /* vsnprintf NUL terminates the buf and writes at most n-1 chars+NUL */
- vsnprintf(IBG(errmsg), MAX_ERRMSG, msg, ap);
- va_end(ap);
-
- IBG(sql_code) = -999; /* no SQL error */
-
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", IBG(errmsg));
-}
-/* }}} */
-
-/* {{{ internal macros, functions and structures */
-typedef struct {
- isc_db_handle *db_ptr;
- long tpb_len;
- char *tpb_ptr;
-} ISC_TEB;
-
-/* }}} */
-
-/* Fill ib_link and trans with the correct database link and transaction. */
-void _php_ibase_get_link_trans(INTERNAL_FUNCTION_PARAMETERS, /* {{{ */
- zval **link_id, ibase_db_link **ib_link, ibase_trans **trans)
-{
- int type;
-
- IBDEBUG("Transaction or database link?");
- if (zend_list_find(Z_LVAL_PP(link_id), &type)) {
- if (type == le_trans) {
- /* Transaction resource: make sure it refers to one link only, then
- fetch it; database link is stored in ib_trans->db_link[]. */
- IBDEBUG("Type is le_trans");
- ZEND_FETCH_RESOURCE(*trans, ibase_trans *, link_id, -1, LE_TRANS, le_trans);
- if ((*trans)->link_cnt > 1) {
- _php_ibase_module_error("Link id is ambiguous: transaction spans multiple connections."
- TSRMLS_CC);
- return;
- }
- *ib_link = (*trans)->db_link[0];
- return;
- }
- }
- IBDEBUG("Type is le_[p]link or id not found");
- /* Database link resource, use default transaction. */
- *trans = NULL;
- ZEND_FETCH_RESOURCE2(*ib_link, ibase_db_link *, link_id, -1, LE_LINK, le_link, le_plink);
-}
-/* }}} */
-
-/* destructors ---------------------- */
-
-static void _php_ibase_commit_link(ibase_db_link *link TSRMLS_DC) /* {{{ */
-{
- unsigned short i = 0, j;
- ibase_tr_list *l;
- ibase_event *e;
- IBDEBUG("Checking transactions to close...");
-
- for (l = link->tr_list; l != NULL; ++i) {
- ibase_tr_list *p = l;
- if (p->trans != NULL) {
- if (i == 0) {
- if (p->trans->handle != NULL) {
- IBDEBUG("Committing default transaction...");
- if (isc_commit_transaction(IB_STATUS, &p->trans->handle)) {
- _php_ibase_error(TSRMLS_C);
- }
- }
- efree(p->trans); /* default transaction is not a registered resource: clean up */
- } else {
- if (p->trans->handle != NULL) {
- /* non-default trans might have been rolled back by other call of this dtor */
- IBDEBUG("Rolling back other transactions...");
- if (isc_rollback_transaction(IB_STATUS, &p->trans->handle)) {
- _php_ibase_error(TSRMLS_C);
- }
- }
- /* set this link pointer to NULL in the transaction */
- for (j = 0; j < p->trans->link_cnt; ++j) {
- if (p->trans->db_link[j] == link) {
- p->trans->db_link[j] = NULL;
- break;
- }
- }
- }
- }
- l = l->next;
- efree(p);
- }
- link->tr_list = NULL;
-
- for (e = link->event_head; e; e = e->event_next) {
- _php_ibase_free_event(e TSRMLS_CC);
- e->link = NULL;
- }
-}
-
-/* }}} */
-
-static void php_ibase_commit_link_rsrc(zend_rsrc_list_entry *rsrc TSRMLS_DC) /* {{{ */
-{
- ibase_db_link *link = (ibase_db_link *) rsrc->ptr;
-
- _php_ibase_commit_link(link TSRMLS_CC);
-}
-/* }}} */
-
-static void _php_ibase_close_link(zend_rsrc_list_entry *rsrc TSRMLS_DC) /* {{{ */
-{
- ibase_db_link *link = (ibase_db_link *) rsrc->ptr;
-
- _php_ibase_commit_link(link TSRMLS_CC);
- if (link->handle != NULL) {
- IBDEBUG("Closing normal link...");
- isc_detach_database(IB_STATUS, &link->handle);
- }
- IBG(num_links)--;
- efree(link);
-}
-/* }}} */
-
-static void _php_ibase_close_plink(zend_rsrc_list_entry *rsrc TSRMLS_DC) /* {{{ */
-{
- ibase_db_link *link = (ibase_db_link *) rsrc->ptr;
-
- _php_ibase_commit_link(link TSRMLS_CC);
- IBDEBUG("Closing permanent link...");
- if (link->handle != NULL) {
- isc_detach_database(IB_STATUS, &link->handle);
- }
- IBG(num_persistent)--;
- IBG(num_links)--;
- free(link);
-}
-/* }}} */
-
-static void _php_ibase_free_trans(zend_rsrc_list_entry *rsrc TSRMLS_DC) /* {{{ */
-{
- ibase_trans *trans = (ibase_trans *)rsrc->ptr;
- unsigned short i;
-
- IBDEBUG("Cleaning up transaction resource...");
- if (trans->handle != NULL) {
- IBDEBUG("Rolling back unhandled transaction...");
- if (isc_rollback_transaction(IB_STATUS, &trans->handle)) {
- _php_ibase_error(TSRMLS_C);
- }
- }
-
- /* now remove this transaction from all the connection-transaction lists */
- for (i = 0; i < trans->link_cnt; ++i) {
- if (trans->db_link[i] != NULL) {
- ibase_tr_list **l;
- for (l = &trans->db_link[i]->tr_list; *l != NULL; l = &(*l)->next) {
- if ( (*l)->trans == trans) {
- ibase_tr_list *p = *l;
- *l = p->next;
- efree(p);
- break;
- }
- }
- }
- }
- efree(trans);
-}
-/* }}} */
-
-/* TODO this function should be part of either Zend or PHP API */
-static PHP_INI_DISP(php_ibase_password_displayer_cb)
-{
- TSRMLS_FETCH();
-
- if ((type == PHP_INI_DISPLAY_ORIG && ini_entry->orig_value)
- || (type == PHP_INI_DISPLAY_ACTIVE && ini_entry->value)) {
- PUTS("********");
- } else if (!sapi_module.phpinfo_as_text) {
- PUTS("<i>no value</i>");
- } else {
- PUTS("no value");
- }
-}
-
-/* {{{ startup, shutdown and info functions */
-PHP_INI_BEGIN()
- PHP_INI_ENTRY_EX("ibase.allow_persistent", "1", PHP_INI_SYSTEM, NULL, zend_ini_boolean_displayer_cb)
- PHP_INI_ENTRY_EX("ibase.max_persistent", "-1", PHP_INI_SYSTEM, NULL, display_link_numbers)
- PHP_INI_ENTRY_EX("ibase.max_links", "-1", PHP_INI_SYSTEM, NULL, display_link_numbers)
- PHP_INI_ENTRY("ibase.default_db", NULL, PHP_INI_SYSTEM, NULL)
- PHP_INI_ENTRY("ibase.default_user", NULL, PHP_INI_ALL, NULL)
- PHP_INI_ENTRY_EX("ibase.default_password", NULL, PHP_INI_ALL, NULL, php_ibase_password_displayer_cb)
- PHP_INI_ENTRY("ibase.default_charset", NULL, PHP_INI_ALL, NULL)
- PHP_INI_ENTRY("ibase.timestampformat", IB_DEF_DATE_FMT " " IB_DEF_TIME_FMT, PHP_INI_ALL, NULL)
- PHP_INI_ENTRY("ibase.dateformat", IB_DEF_DATE_FMT, PHP_INI_ALL, NULL)
- PHP_INI_ENTRY("ibase.timeformat", IB_DEF_TIME_FMT, PHP_INI_ALL, NULL)
-PHP_INI_END()
-
-static void php_ibase_init_globals(zend_ibase_globals *ibase_globals)
-{
- ibase_globals->num_persistent = ibase_globals->num_links = 0;
- ibase_globals->sql_code = *ibase_globals->errmsg = 0;
- ibase_globals->default_link = -1;
-}
-
-PHP_MINIT_FUNCTION(ibase)
-{
- ZEND_INIT_MODULE_GLOBALS(ibase, php_ibase_init_globals, NULL);
-
- REGISTER_INI_ENTRIES();
-
- le_link = zend_register_list_destructors_ex(_php_ibase_close_link, NULL, LE_LINK, module_number);
- le_plink = zend_register_list_destructors_ex(php_ibase_commit_link_rsrc, _php_ibase_close_plink, LE_PLINK, module_number);
- le_trans = zend_register_list_destructors_ex(_php_ibase_free_trans, NULL, LE_TRANS, module_number);
-
- REGISTER_LONG_CONSTANT("IBASE_DEFAULT", PHP_IBASE_DEFAULT, CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("IBASE_CREATE", PHP_IBASE_CREATE, CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("IBASE_TEXT", PHP_IBASE_FETCH_BLOBS, CONST_PERSISTENT); /* deprecated, for BC only */
- REGISTER_LONG_CONSTANT("IBASE_FETCH_BLOBS", PHP_IBASE_FETCH_BLOBS, CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("IBASE_FETCH_ARRAYS", PHP_IBASE_FETCH_ARRAYS, CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("IBASE_UNIXTIME", PHP_IBASE_UNIXTIME, CONST_PERSISTENT);
-
- /* transactions */
- REGISTER_LONG_CONSTANT("IBASE_WRITE", PHP_IBASE_WRITE, CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("IBASE_READ", PHP_IBASE_READ, CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("IBASE_COMMITTED", PHP_IBASE_COMMITTED, CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("IBASE_CONSISTENCY", PHP_IBASE_CONSISTENCY, CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("IBASE_CONCURRENCY", PHP_IBASE_CONCURRENCY, CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("IBASE_REC_VERSION", PHP_IBASE_REC_VERSION, CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("IBASE_REC_NO_VERSION", PHP_IBASE_REC_NO_VERSION, CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("IBASE_NOWAIT", PHP_IBASE_NOWAIT, CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("IBASE_WAIT", PHP_IBASE_WAIT, CONST_PERSISTENT);
-
- php_ibase_query_minit(INIT_FUNC_ARGS_PASSTHRU);
- php_ibase_blobs_minit(INIT_FUNC_ARGS_PASSTHRU);
- php_ibase_events_minit(INIT_FUNC_ARGS_PASSTHRU);
- php_ibase_service_minit(INIT_FUNC_ARGS_PASSTHRU);
-
- return SUCCESS;
-}
-
-PHP_MSHUTDOWN_FUNCTION(ibase)
-{
-#ifndef PHP_WIN32
- /**
- * When the Interbase client API library libgds.so is first loaded, it registers a call to
- * gds__cleanup() with atexit(), in order to clean up after itself when the process exits.
- * This means that the library is called at process shutdown, and cannot be unloaded beforehand.
- * PHP tries to unload modules after every request [dl()'ed modules], and right before the
- * process shuts down [modules loaded from php.ini]. This results in a segfault for this module.
- * By NULLing the dlopen() handle in the module entry, Zend omits the call to dlclose(),
- * ensuring that the module will remain present until the process exits. However, the functions
- * and classes exported by the module will not be available until the module is 'reloaded'.
- * When reloaded, dlopen() will return the handle of the already loaded module. The module will
- * be unloaded automatically when the process exits.
- */
- zend_module_entry *ibase_entry;
- if (SUCCESS == zend_hash_find(&module_registry, ibase_module_entry.name,
- strlen(ibase_module_entry.name) +1, (void*) &ibase_entry)) {
- ibase_entry->handle = NULL;
- }
-#endif
- UNREGISTER_INI_ENTRIES();
- return SUCCESS;
-}
-
-PHP_RSHUTDOWN_FUNCTION(ibase)
-{
- IBG(num_links) = IBG(num_persistent);
- IBG(default_link)= -1;
-
- RESET_ERRMSG;
-
- return SUCCESS;
-}
-
-PHP_MINFO_FUNCTION(ibase)
-{
- char tmp[64], *s;
-
- php_info_print_table_start();
- php_info_print_table_row(2, "Firebird/InterBase Support",
-#ifdef COMPILE_DL_INTERBASE
- "dynamic");
-#else
- "static");
-#endif
-
-#ifdef FB_API_VER
- sprintf( (s = tmp), "Firebird API version %d", FB_API_VER);
-#elif (SQLDA_CURRENT_VERSION > 1)
- s = "Interbase 7.0 and up";
-#elif !defined(DSC_null)
- s = "Interbase 6";
-#else
- s = "Firebird 1.0";
-#endif
- php_info_print_table_row(2, "Compile-time Client Library Version", s);
-
-#if defined(__GNUC__) || defined(PHP_WIN32)
- do {
- info_func_t info_func = NULL;
-#ifdef __GNUC__
- info_func = (info_func_t)dlsym(RTLD_DEFAULT, "isc_get_client_version");
-#else
- HMODULE l = GetModuleHandle("fbclient");
-
- if (!l && !(l = GetModuleHandle("gds32"))) {
- break;
- }
- info_func = (info_func_t)GetProcAddress(l, "isc_get_client_version");
-#endif
- if (info_func) {
- info_func(s = tmp);
- } else {
- s = "Firebird 1.0/Interbase 6";
- }
- php_info_print_table_row(2, "Run-time Client Library Version", s);
- } while (0);
-#endif
- php_info_print_table_end();
-
- DISPLAY_INI_ENTRIES();
-
-}
-/* }}} */
-
-enum connect_args { DB = 0, USER = 1, PASS = 2, CSET = 3, ROLE = 4, BUF = 0, DLECT = 1, SYNC = 2 };
-
-static char const dpb_args[] = {
- 0, isc_dpb_user_name, isc_dpb_password, isc_dpb_lc_ctype, isc_dpb_sql_role_name, 0
-};
-
-int _php_ibase_attach_db(char **args, int *len, long *largs, isc_db_handle *db TSRMLS_DC)
-{
- short i;
- char dpb_buffer[256] = { isc_dpb_version1 }, *dpb;
-
- dpb = dpb_buffer + 1;
-
- for (i = 0; i < sizeof(dpb_args); ++i) {
- if (dpb_args[i] && args[i]) {
- dpb += sprintf(dpb, "%c%c%s", dpb_args[i],(unsigned char)len[i],args[i]);
- }
- }
- if (largs[BUF]) {
- dpb += sprintf(dpb, "%c\2%c%c", isc_dpb_num_buffers,
- (char)(largs[BUF] >> 8), (char)(largs[BUF] & 0xff));
- }
- if (largs[SYNC]) {
- dpb += sprintf(dpb, "%c\1%c", isc_dpb_force_write, largs[SYNC] == isc_spb_prp_wm_sync ? 1 : 0);
- }
- if (isc_attach_database(IB_STATUS, (short)len[DB], args[DB], db, (short)(dpb-dpb_buffer), dpb_buffer)) {
- _php_ibase_error(TSRMLS_C);
- return FAILURE;
- }
- return SUCCESS;
-}
-/* }}} */
-
-static void _php_ibase_connect(INTERNAL_FUNCTION_PARAMETERS, int persistent) /* {{{ */
-{
- char *c, hash[16], *args[] = { NULL, NULL, NULL, NULL, NULL };
- int i, len[] = { 0, 0, 0, 0, 0 };
- long largs[] = { 0, 0, 0 };
- PHP_MD5_CTX hash_context;
- list_entry new_index_ptr, *le;
- isc_db_handle db_handle = NULL;
- ibase_db_link *ib_link;
-
- RESET_ERRMSG;
-
- if (FAILURE == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|ssssllsl",
- &args[DB], &len[DB], &args[USER], &len[USER], &args[PASS], &len[PASS],
- &args[CSET], &len[CSET], &largs[BUF], &largs[DLECT], &args[ROLE], &len[ROLE],
- &largs[SYNC])) {
- RETURN_FALSE;
- }
-
- /* restrict to the server/db in the .ini if in safe mode */
- if ((!len[DB] || PG(sql_safe_mode)) && (c = INI_STR("ibase.default_db"))) {
- args[DB] = c;
- len[DB] = strlen(c);
- }
- if (!len[USER] && (c = INI_STR("ibase.default_user"))) {
- args[USER] = c;
- len[USER] = strlen(c);
- }
- if (!len[PASS] && (c = INI_STR("ibase.default_password"))) {
- args[PASS] = c;
- len[PASS] = strlen(c);
- }
- if (!len[CSET] && (c = INI_STR("ibase.default_charset"))) {
- args[CSET] = c;
- len[CSET] = strlen(c);
- }
-
- /* don't want usernames and passwords floating around */
- PHP_MD5Init(&hash_context);
- for (i = 0; i < sizeof(args)/sizeof(char*); ++i) {
- PHP_MD5Update(&hash_context,args[i],len[i]);
- }
- for (i = 0; i < sizeof(largs)/sizeof(long); ++i) {
- PHP_MD5Update(&hash_context,(char*)&largs[i],sizeof(long));
- }
- PHP_MD5Final(hash, &hash_context);
-
- /* try to reuse a connection */
- if (SUCCESS == zend_hash_find(&EG(regular_list), hash, sizeof(hash), (void *) &le)) {
- long xlink;
- int type;
-
- if (Z_TYPE_P(le) != le_index_ptr) {
- RETURN_FALSE;
- }
-
- xlink = (long) le->ptr;
- if (zend_list_find(xlink, &type) && ((!persistent && type == le_link) || type == le_plink)) {
- zend_list_addref(xlink);
- RETURN_RESOURCE(IBG(default_link) = xlink);
- } else {
- zend_hash_del(&EG(regular_list), hash, sizeof(hash));
- }
- }
-
- /* ... or a persistent one */
- switch (zend_hash_find(&EG(persistent_list), hash, sizeof(hash), (void *) &le)) {
- long l;
-
- static char info[] = { isc_info_base_level, isc_info_end };
- char result[8];
- ISC_STATUS status[20];
-
- case SUCCESS:
-
- if (Z_TYPE_P(le) != le_plink) {
- RETURN_FALSE;
- }
- /* check if connection has timed out */
- ib_link = (ibase_db_link *) le->ptr;
- if (!isc_database_info(status, &ib_link->handle, sizeof(info), info, sizeof(result), result)) {
- ZEND_REGISTER_RESOURCE(return_value, ib_link, le_plink);
- break;
- }
- zend_hash_del(&EG(persistent_list), hash, sizeof(hash));
-
- default:
-
- /* no link found, so we have to open one */
-
- if ((l = INI_INT("ibase.max_links")) != -1 && IBG(num_links) >= l) {
- _php_ibase_module_error("Too many open links (%ld)" TSRMLS_CC, IBG(num_links));
- RETURN_FALSE;
- }
-
- /* create the ib_link */
- if (FAILURE == _php_ibase_attach_db(args, len, largs, &db_handle TSRMLS_CC)) {
- RETURN_FALSE;
- }
-
- /* use non-persistent if allowed number of persistent links is exceeded */
- if (!persistent || ((l = INI_INT("ibase.max_persistent") != -1) && IBG(num_persistent) >= l)) {
- ib_link = (ibase_db_link *) emalloc(sizeof(ibase_db_link));
- ZEND_REGISTER_RESOURCE(return_value, ib_link, le_link);
- } else {
- list_entry new_le;
-
- ib_link = (ibase_db_link *) malloc(sizeof(ibase_db_link));
-
- /* hash it up */
- Z_TYPE(new_le) = le_plink;
- new_le.ptr = ib_link;
- if (FAILURE == zend_hash_update(&EG(persistent_list), hash, sizeof(hash),
- (void *) &new_le, sizeof(list_entry), NULL)) {
- free(ib_link);
- RETURN_FALSE;
- }
- ZEND_REGISTER_RESOURCE(return_value, ib_link, le_plink);
- ++IBG(num_persistent);
- }
- ib_link->handle = db_handle;
- ib_link->dialect = largs[DLECT] ? (unsigned short)largs[DLECT] : SQL_DIALECT_CURRENT;
- ib_link->tr_list = NULL;
- ib_link->event_head = NULL;
-
- ++IBG(num_links);
- }
-
- /* add it to the hash */
- new_index_ptr.ptr = (void *) Z_LVAL_P(return_value);
- Z_TYPE(new_index_ptr) = le_index_ptr;
- if (FAILURE == zend_hash_update(&EG(regular_list), hash, sizeof(hash),
- (void *) &new_index_ptr, sizeof(list_entry), NULL)) {
- RETURN_FALSE;
- }
- zend_list_addref(IBG(default_link) = Z_LVAL_P(return_value));
-}
-/* }}} */
-
-/* {{{ proto resource ibase_connect(string database [, string username [, string password [, string charset [, int buffers [, int dialect [, string role]]]]]])
- Open a connection to an InterBase database */
-PHP_FUNCTION(ibase_connect)
-{
- _php_ibase_connect(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0);
-}
-/* }}} */
-
-/* {{{ proto resource ibase_pconnect(string database [, string username [, string password [, string charset [, int buffers [, int dialect [, string role]]]]]])
- Open a persistent connection to an InterBase database */
-PHP_FUNCTION(ibase_pconnect)
-{
- _php_ibase_connect(INTERNAL_FUNCTION_PARAM_PASSTHRU, INI_INT("ibase.allow_persistent"));
-}
-/* }}} */
-
-/* {{{ proto bool ibase_close([resource link_identifier])
- Close an InterBase connection */
-PHP_FUNCTION(ibase_close)
-{
- zval **link_arg = NULL;
- ibase_db_link *ib_link;
- int link_id;
-
- RESET_ERRMSG;
-
- switch (ZEND_NUM_ARGS()) {
- case 0:
- link_id = IBG(default_link);
- IBG(default_link) = -1;
- break;
- case 1:
- if (zend_get_parameters_ex(1, &link_arg) == FAILURE) {
- RETURN_FALSE;
- }
- convert_to_long_ex(link_arg);
- link_id = Z_LVAL_PP(link_arg);
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
-
- ZEND_FETCH_RESOURCE2(ib_link, ibase_db_link *, link_arg, link_id, LE_LINK, le_link, le_plink);
- zend_list_delete(link_id);
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto bool ibase_drop_db([resource link_identifier])
- Drop an InterBase database */
-PHP_FUNCTION(ibase_drop_db)
-{
- zval **link_arg = NULL;
- ibase_db_link *ib_link;
- ibase_tr_list *l;
- int link_id;
-
- RESET_ERRMSG;
-
- switch (ZEND_NUM_ARGS()) {
- case 0:
- link_id = IBG(default_link);
- IBG(default_link) = -1;
- break;
- case 1:
- if (zend_get_parameters_ex(1, &link_arg) == FAILURE) {
- RETURN_FALSE;
- }
- convert_to_long_ex(link_arg);
- link_id = Z_LVAL_PP(link_arg);
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
-
- ZEND_FETCH_RESOURCE2(ib_link, ibase_db_link *, link_arg, link_id, LE_LINK, le_link, le_plink);
-
- if (isc_drop_database(IB_STATUS, &ib_link->handle)) {
- _php_ibase_error(TSRMLS_C);
- RETURN_FALSE;
- }
-
- /* isc_drop_database() doesn't invalidate the transaction handles */
- for (l = ib_link->tr_list; l != NULL; l = l->next) {
- if (l->trans != NULL) l->trans->handle = NULL;
- }
-
- zend_list_delete(link_id);
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto resource ibase_trans([int trans_args [, resource link_identifier [, ... ], int trans_args [, resource link_identifier [, ... ]] [, ...]]])
- Start a transaction over one or several databases */
-
-#define TPB_MAX_SIZE (8*sizeof(char))
-
-PHP_FUNCTION(ibase_trans)
-{
- unsigned short i, argn, link_cnt = 0, tpb_len = 0;
- char last_tpb[TPB_MAX_SIZE];
- ibase_db_link **ib_link = NULL;
- ibase_trans *ib_trans;
- isc_tr_handle tr_handle = NULL;
- ISC_STATUS result;
-
- RESET_ERRMSG;
-
- argn = ZEND_NUM_ARGS();
-
- /* (1+argn) is an upper bound for the number of links this trans connects to */
- ib_link = (ibase_db_link **) safe_emalloc(sizeof(ibase_db_link *),1+argn,0);
-
- if (argn > 0) {
- long trans_argl = 0;
- char *tpb;
- ISC_TEB *teb;
- zval ***args = (zval ***) safe_emalloc(sizeof(zval **),argn,0);
-
- if (zend_get_parameters_array_ex(argn, args) == FAILURE) {
- efree(args);
- efree(ib_link);
- RETURN_FALSE;
- }
-
- teb = (ISC_TEB *) safe_emalloc(sizeof(ISC_TEB),argn,0);
- tpb = (char *) safe_emalloc(TPB_MAX_SIZE,argn,0);
-
- /* enumerate all the arguments: assume every non-resource argument
- specifies modifiers for the link ids that follow it */
- for (i = 0; i < argn; ++i) {
-
- 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);
-
- /* copy the most recent modifier string into tbp[] */
- memcpy(&tpb[TPB_MAX_SIZE * link_cnt], last_tpb, TPB_MAX_SIZE);
-
- /* add a database handle to the TEB with the most recently specified set of modifiers */
- teb[link_cnt].db_ptr = &ib_link[link_cnt]->handle;
- teb[link_cnt].tpb_len = tpb_len;
- teb[link_cnt].tpb_ptr = &tpb[TPB_MAX_SIZE * link_cnt];
-
- ++link_cnt;
-
- } else {
-
- tpb_len = 0;
-
- convert_to_long_ex(args[i]);
- trans_argl = Z_LVAL_PP(args[i]);
-
- if (trans_argl != PHP_IBASE_DEFAULT) {
- last_tpb[tpb_len++] = isc_tpb_version3;
-
- /* access mode */
- if (PHP_IBASE_READ == (trans_argl & PHP_IBASE_READ)) {
- last_tpb[tpb_len++] = isc_tpb_read;
- } else if (PHP_IBASE_WRITE == (trans_argl & PHP_IBASE_WRITE)) {
- last_tpb[tpb_len++] = isc_tpb_write;
- }
-
- /* isolation level */
- if (PHP_IBASE_COMMITTED == (trans_argl & PHP_IBASE_COMMITTED)) {
- last_tpb[tpb_len++] = isc_tpb_read_committed;
- if (PHP_IBASE_REC_VERSION == (trans_argl & PHP_IBASE_REC_VERSION)) {
- last_tpb[tpb_len++] = isc_tpb_rec_version;
- } else if (PHP_IBASE_REC_NO_VERSION == (trans_argl & PHP_IBASE_REC_NO_VERSION)) {
- last_tpb[tpb_len++] = isc_tpb_no_rec_version;
- }
- } else if (PHP_IBASE_CONSISTENCY == (trans_argl & PHP_IBASE_CONSISTENCY)) {
- last_tpb[tpb_len++] = isc_tpb_consistency;
- } else if (PHP_IBASE_CONCURRENCY == (trans_argl & PHP_IBASE_CONCURRENCY)) {
- last_tpb[tpb_len++] = isc_tpb_concurrency;
- }
-
- /* lock resolution */
- if (PHP_IBASE_NOWAIT == (trans_argl & PHP_IBASE_NOWAIT)) {
- last_tpb[tpb_len++] = isc_tpb_nowait;
- } else if (PHP_IBASE_WAIT == (trans_argl & PHP_IBASE_WAIT)) {
- last_tpb[tpb_len++] = isc_tpb_wait;
- }
- }
- }
- }
-
- if (link_cnt > 0) {
- result = isc_start_multiple(IB_STATUS, &tr_handle, link_cnt, teb);
- }
-
- efree(args);
- efree(tpb);
- efree(teb);
- }
-
- 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);
- result = isc_start_transaction(IB_STATUS, &tr_handle, 1, &ib_link[0]->handle, tpb_len, last_tpb);
- }
-
- /* start the transaction */
- if (result) {
- _php_ibase_error(TSRMLS_C);
- efree(ib_link);
- RETURN_FALSE;
- }
-
- /* register the transaction in our own data structures */
- ib_trans = (ibase_trans *) safe_emalloc(link_cnt-1, sizeof(ibase_db_link *), sizeof(ibase_trans));
- ib_trans->handle = tr_handle;
- ib_trans->link_cnt = link_cnt;
- ib_trans->affected_rows = 0;
- for (i = 0; i < link_cnt; ++i) {
- ibase_tr_list **l;
- ib_trans->db_link[i] = ib_link[i];
-
- /* the first item in the connection-transaction list is reserved for the default transaction */
- if (ib_link[i]->tr_list == NULL) {
- ib_link[i]->tr_list = (ibase_tr_list *) emalloc(sizeof(ibase_tr_list));
- ib_link[i]->tr_list->trans = NULL;
- ib_link[i]->tr_list->next = NULL;
- }
-
- /* link the transaction into the connection-transaction list */
- for (l = &ib_link[i]->tr_list; *l != NULL; l = &(*l)->next);
- *l = (ibase_tr_list *) emalloc(sizeof(ibase_tr_list));
- (*l)->trans = ib_trans;
- (*l)->next = NULL;
- }
- efree(ib_link);
- ZEND_REGISTER_RESOURCE(return_value, ib_trans, le_trans);
-}
-/* }}} */
-
-int _php_ibase_def_trans(ibase_db_link *ib_link, ibase_trans **trans TSRMLS_DC) /* {{{ */
-{
- if (ib_link == NULL) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid database link");
- return FAILURE;
- }
-
- /* the first item in the connection-transaction list is reserved for the default transaction */
- if (ib_link->tr_list == NULL) {
- ib_link->tr_list = (ibase_tr_list *) emalloc(sizeof(ibase_tr_list));
- ib_link->tr_list->trans = NULL;
- ib_link->tr_list->next = NULL;
- }
-
- if (*trans == NULL) {
- ibase_trans *tr = ib_link->tr_list->trans;
-
- if (tr == NULL) {
- tr = (ibase_trans *) emalloc(sizeof(ibase_trans));
- tr->handle = NULL;
- tr->link_cnt = 1;
- tr->affected_rows = 0;
- tr->db_link[0] = ib_link;
- ib_link->tr_list->trans = tr;
- }
- if (tr->handle == NULL) {
- if (isc_start_transaction(IB_STATUS, &tr->handle, 1, &ib_link->handle, 0, NULL)) {
- _php_ibase_error(TSRMLS_C);
- return FAILURE;
- }
- }
- *trans = tr;
- }
- return SUCCESS;
-}
-/* }}} */
-
-static void _php_ibase_trans_end(INTERNAL_FUNCTION_PARAMETERS, int commit) /* {{{ */
-{
- ibase_trans *trans = NULL;
- int res_id = 0;
- ISC_STATUS result;
-
- RESET_ERRMSG;
-
- switch (ZEND_NUM_ARGS()) {
-
- ibase_db_link *ib_link;
- zval **arg;
- int type;
-
- case 0:
- ZEND_FETCH_RESOURCE2(ib_link, ibase_db_link *, NULL, IBG(default_link), LE_LINK,
- le_link, le_plink);
- if (ib_link->tr_list == NULL || ib_link->tr_list->trans == NULL) {
- /* this link doesn't have a default transaction */
- _php_ibase_module_error("Default link has no default transaction" TSRMLS_CC);
- RETURN_FALSE;
- }
- trans = ib_link->tr_list->trans;
- break;
-
- case 1:
- if (zend_get_parameters_ex(1, &arg) == FAILURE) {
- RETURN_FALSE;
- }
- /* one id was passed, could be db or trans id */
- if (zend_list_find(Z_LVAL_PP(arg), &type) && type == le_trans) {
- ZEND_FETCH_RESOURCE(trans, ibase_trans *, arg, -1, LE_TRANS, le_trans);
-
- convert_to_long_ex(arg);
- res_id = Z_LVAL_PP(arg);
- } else {
- ZEND_FETCH_RESOURCE2(ib_link, ibase_db_link *, arg, -1, LE_LINK, le_link, le_plink);
-
- if (ib_link->tr_list == NULL || ib_link->tr_list->trans == NULL) {
- /* this link doesn't have a default transaction */
- _php_ibase_module_error("Link has no default transaction" TSRMLS_CC);
- RETURN_FALSE;
- }
- trans = ib_link->tr_list->trans;
- }
- break;
-
- default:
- WRONG_PARAM_COUNT;
- break;
- }
-
- switch (commit) {
-
- default: /* == case ROLLBACK: */
- result = isc_rollback_transaction(IB_STATUS, &trans->handle);
- break;
- case COMMIT:
- result = isc_commit_transaction(IB_STATUS, &trans->handle);
- break;
- case (ROLLBACK | RETAIN):
- result = isc_rollback_retaining(IB_STATUS, &trans->handle);
- break;
- case (COMMIT | RETAIN):
- result = isc_commit_retaining(IB_STATUS, &trans->handle);
- break;
- }
-
- if (result) {
- _php_ibase_error(TSRMLS_C);
- RETURN_FALSE;
- }
-
- /* Don't try to destroy implicitly opened transaction from list... */
- if ( (commit & RETAIN) == 0 && res_id != 0) {
- zend_list_delete(res_id);
- }
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto bool ibase_commit( resource link_identifier )
- Commit transaction */
-PHP_FUNCTION(ibase_commit)
-{
- _php_ibase_trans_end(INTERNAL_FUNCTION_PARAM_PASSTHRU, COMMIT);
-}
-/* }}} */
-
-/* {{{ proto bool ibase_rollback( resource link_identifier )
- Rollback transaction */
-PHP_FUNCTION(ibase_rollback)
-{
- _php_ibase_trans_end(INTERNAL_FUNCTION_PARAM_PASSTHRU, ROLLBACK);
-}
-/* }}} */
-
-/* {{{ proto bool ibase_commit_ret( resource link_identifier )
- Commit transaction and retain the transaction context */
-PHP_FUNCTION(ibase_commit_ret)
-{
- _php_ibase_trans_end(INTERNAL_FUNCTION_PARAM_PASSTHRU, COMMIT | RETAIN);
-}
-/* }}} */
-
-/* {{{ proto bool ibase_rollback_ret( resource link_identifier )
- Rollback transaction and retain the transaction context */
-PHP_FUNCTION(ibase_rollback_ret)
-{
- _php_ibase_trans_end(INTERNAL_FUNCTION_PARAM_PASSTHRU, ROLLBACK | RETAIN);
-}
-/* }}} */
-
-/* {{{ proto int ibase_gen_id(string generator [, int increment [, resource link_identifier ]])
- Increments the named generator and returns its new value */
-PHP_FUNCTION(ibase_gen_id)
-{
- zval *link = NULL;
- char query[128], *generator;
- int gen_len;
- long inc = 1;
- ibase_db_link *ib_link;
- ibase_trans *trans = NULL;
- XSQLDA out_sqlda;
- ISC_INT64 result;
-
- RESET_ERRMSG;
-
- if (FAILURE == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|lr", &generator, &gen_len,
- &inc, &link)) {
- RETURN_FALSE;
- }
-
- PHP_IBASE_LINK_TRANS(link, ib_link, trans);
-
- sprintf(query, "SELECT GEN_ID(%s,%ld) FROM rdb$database", generator, inc);
-
- /* allocate a minimal descriptor area */
- out_sqlda.sqln = out_sqlda.sqld = 1;
- out_sqlda.version = SQLDA_CURRENT_VERSION;
-
- /* allocate the field for the result */
- out_sqlda.sqlvar[0].sqltype = SQL_INT64;
- out_sqlda.sqlvar[0].sqlscale = 0;
- out_sqlda.sqlvar[0].sqllen = sizeof(result);
- out_sqlda.sqlvar[0].sqldata = (void*) &result;
-
- /* execute the query */
- if (isc_dsql_exec_immed2(IB_STATUS, &ib_link->handle, &trans->handle, 0, query,
- SQL_DIALECT_CURRENT, NULL, &out_sqlda)) {
- _php_ibase_error(TSRMLS_C);
- RETURN_FALSE;
- }
-
- /* don't return the generator value as a string unless it doesn't fit in a long */
-#if SIZEOF_LONG < 8
- if (result < LONG_MIN || result > LONG_MAX) {
- char res[24];
-
- sprintf(res, "%" LL_MASK "d", result);
- RETURN_STRING(res,1);
- }
-#endif
- RETURN_LONG((long)result);
-}
-
-/* }}} */
-
-#endif /* HAVE_IBASE */
-
-/*
- * 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/interbase/interbase.dsp b/ext/interbase/interbase.dsp
deleted file mode 100644
index c151deb40c..0000000000
--- a/ext/interbase/interbase.dsp
+++ /dev/null
@@ -1,135 +0,0 @@
-# Microsoft Developer Studio Project File - Name="interbase" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=interbase - Win32 Debug_TS
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "interbase.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "interbase.mak" CFG="interbase - Win32 Debug_TS"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "interbase - Win32 Debug_TS" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "interbase - Win32 Release_TS" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName "interbase"
-# PROP Scc_LocalPath "."
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "interbase - Win32 Debug_TS"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug_TS"
-# PROP BASE Intermediate_Dir "Debug_TS"
-# PROP BASE Ignore_Export_Lib 0
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug_TS"
-# PROP Intermediate_Dir "Debug_TS"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "..\..\main" /I "..\.." /I "..\..\Zend" /I "..\..\TSRM" /I "..\..\..\php_build\Interbase SDK\include" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "INTERBASE_EXPORTS" /D "ZEND_WIN32" /D "PHP_WIN32" /D ZEND_DEBUG=1 /YX /FD /GZ /c
-# ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "..\..\main" /I "..\.." /I "..\..\Zend" /I "..\..\TSRM" /I "..\..\..\php_build\Interbase SDK\include" /I "..\..\..\bindlib_w32" /D "_DEBUG" /D ZEND_DEBUG=1 /D "ZTS" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "INTERBASE_EXPORTS" /D "ZEND_WIN32" /D "PHP_WIN32" /D HAVE_IBASE=1 /D "COMPILE_DL_INTERBASE" /FR /YX /FD /GZ /c
-# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x40d /d "_DEBUG"
-# ADD RSC /l 0x40d /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ib_util_ms.lib gds32_ms.lib php5ts_debug.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib php5ts_debug.lib gds32_ms.lib /nologo /dll /debug /machine:I386 /out:"..\..\Debug_TS/php_interbase.dll" /pdbtype:sept /libpath:"..\..\..\php_build\Interbase SDK\lib_ms" /libpath:"..\..\Debug_TS"
-
-!ELSEIF "$(CFG)" == "interbase - Win32 Release_TS"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release_TS"
-# PROP BASE Intermediate_Dir "Release_TS"
-# PROP BASE Ignore_Export_Lib 0
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release_TS"
-# PROP Intermediate_Dir "Release_TS"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MD /W3 /GX /O2 /I "..\..\main" /I "..\.." /I "..\..\Zend" /I "..\..\TSRM" /I "..\..\..\php_build\Interbase SDK\include" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "INTERBASE_EXPORTS" /D "ZEND_WIN32" /D "PHP_WIN32" /D HAVE_IBASE=1 /D ZEND_DEBUG=0 /YX /FD /c
-# ADD CPP /nologo /MD /W3 /GX /O2 /I "..\..\main" /I "..\.." /I "..\..\Zend" /I "..\..\TSRM" /I "..\..\..\php_build\Interbase SDK\include" /I "..\..\..\bindlib_w32" /D "NDEBUG" /D ZEND_DEBUG=0 /D "ZTS" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "INTERBASE_EXPORTS" /D "ZEND_WIN32" /D "PHP_WIN32" /D HAVE_IBASE=1 /D "COMPILE_DL_INTERBASE" /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x40d /d "NDEBUG"
-# ADD RSC /l 0x40d /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 php5ts.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ib_util_ms.lib gds32_ms.lib /nologo /dll /machine:I386
-# ADD LINK32 php5ts.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib gds32_ms.lib /nologo /dll /machine:I386 /out:"..\..\Release_TS/php_interbase.dll" /libpath:"..\..\..\php_build\Interbase SDK\lib_ms" /libpath:"..\..\Release_TS" /libpath:"..\..\Release_TS_Inline"
-
-!ENDIF
-
-# Begin Target
-
-# Name "interbase - Win32 Debug_TS"
-# Name "interbase - Win32 Release_TS"
-# Begin Group "Source Files"
-
-# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
-# Begin Source File
-
-SOURCE=.\ibase_blobs.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\ibase_events.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\ibase_query.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\ibase_service.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\interbase.c
-# End Source File
-# End Group
-# Begin Group "Header Files"
-
-# PROP Default_Filter "h;hpp;hxx;hm;inl"
-# Begin Source File
-
-SOURCE=.\php_interbase.h
-# End Source File
-# End Group
-# Begin Group "Resource Files"
-
-# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
-# Begin Source File
-
-SOURCE=.\interbase.rc
-# ADD BASE RSC /l 0x413
-# ADD RSC /l 0x413 /i "..\..\main" /i "..\..\win32" /d "PHP_H"
-# End Source File
-# End Group
-# End Target
-# End Project
diff --git a/ext/interbase/interbase.rc b/ext/interbase/interbase.rc
deleted file mode 100644
index ca8c186794..0000000000
--- a/ext/interbase/interbase.rc
+++ /dev/null
@@ -1,81 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Ard Biesheuvel <a.k.biesheuvel@its.tudelft.nl> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-#ifdef APSTUDIO_INVOKED
-#error This file cannot be opened from the Visual Studio IDE
-#endif
-
-#include "resource.h"
-
-#define APSTUDIO_READONLY_SYMBOLS
-#include "winres.h"
-#undef APSTUDIO_READONLY_SYMBOLS
-
-#include "php_version.h"
-
-#ifdef _DEBUG
-# define BUILD_TYPE "Debug"
-#else
-# define BUILD_TYPE "Release"
-#endif
-
-#include <ibase.h>
-#include "interbase.c"
-
-#ifdef FB_SQLDA
-#define CLIENT_LIB "fbclient.dll"
-#else
-#define CLIENT_LIB "gds32.dll"
-#endif
-
-#ifndef _MAC
-
-VS_VERSION_INFO VERSIONINFO
- FILEVERSION PHP_MAJOR_VERSION,PHP_MINOR_VERSION,PHP_RELEASE_VERSION,0
- PRODUCTVERSION PHP_MAJOR_VERSION,PHP_MINOR_VERSION,PHP_RELEASE_VERSION,0
-#ifndef _DEBUG
- FILEFLAGS 0x0L
-#else
- FILEFLAGS 0x1L
-#endif
- FILEFLAGSMASK 0x3fL
- FILEOS VOS__WINDOWS32
- FILETYPE VFT_DLL
- FILESUBTYPE VFT2_UNKNOWN
-BEGIN
- BLOCK "StringFileInfo"
- BEGIN
- BLOCK "000004b0"
- BEGIN
- VALUE "FileDescription", "PHP Interbase module\0"
- VALUE "FileVersion", PHP_VERSION "\0"
- VALUE "LegalCopyright", "Copyright © 2003 The PHP Group\0"
- VALUE "Build Type", BUILD_TYPE "\0"
- VALUE "Client Library", CLIENT_LIB "\0"
- VALUE "URL", "http://www.php.net\0"
- END
- END
- BLOCK "VarFileInfo"
- BEGIN
- VALUE "Translation", 0x0, 1200
- END
-END
-
-#endif // !_MAC
diff --git a/ext/interbase/php_ibase_includes.h b/ext/interbase/php_ibase_includes.h
deleted file mode 100755
index 0c891be1e5..0000000000
--- a/ext/interbase/php_ibase_includes.h
+++ /dev/null
@@ -1,200 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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. |
- +----------------------------------------------------------------------+
- | Authors: Jouni Ahto <jouni.ahto@exdec.fi> |
- | Andrew Avdeev <andy@simgts.mv.ru> |
- | Ard Biesheuvel <a.k.biesheuvel@ewi.tudelft.nl> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-#ifndef PHP_IBASE_INCLUDES_H
-#define PHP_IBASE_INCLUDES_H
-
-#include <ibase.h>
-
-#ifndef SQLDA_CURRENT_VERSION
-#define SQLDA_CURRENT_VERSION SQLDA_VERSION1
-#endif
-
-#ifndef METADATALENGTH
-#define METADATALENGTH 32
-#endif
-
-#define RESET_ERRMSG do { IBG(errmsg)[0] = '\0'; IBG(sql_code) = 0; } while (0)
-
-#define IB_STATUS (IBG(status))
-
-#ifdef ZEND_DEBUG_
-#define IBDEBUG(a) php_printf("::: %s (%d)\n", a, __LINE__);
-#endif
-
-#ifndef IBDEBUG
-#define IBDEBUG(a)
-#endif
-
-extern int le_link, le_plink, le_trans;
-
-#define LE_LINK "Firebird/InterBase link"
-#define LE_PLINK "Firebird/InterBase persistent link"
-#define LE_TRANS "Firebird/InterBase transaction"
-
-#define IBASE_MSGSIZE 256
-#define MAX_ERRMSG (IBASE_MSGSIZE*2)
-
-#define IB_DEF_DATE_FMT "%Y-%m-%d"
-#define IB_DEF_TIME_FMT "%H:%M:%S"
-
-/* this value should never be > USHRT_MAX */
-#define IBASE_BLOB_SEG 4096
-
-ZEND_BEGIN_MODULE_GLOBALS(ibase)
- ISC_STATUS status[20];
- long default_link;
- long num_links, num_persistent;
- char errmsg[MAX_ERRMSG];
- long sql_code;
-ZEND_END_MODULE_GLOBALS(ibase)
-
-ZEND_EXTERN_MODULE_GLOBALS(ibase)
-
-typedef struct {
- isc_db_handle handle;
- struct tr_list *tr_list;
- unsigned short dialect;
- struct event *event_head;
-} ibase_db_link;
-
-typedef struct {
- isc_tr_handle handle;
- unsigned short link_cnt;
- unsigned long affected_rows;
- ibase_db_link *db_link[1]; /* last member */
-} ibase_trans;
-
-typedef struct tr_list {
- ibase_trans *trans;
- struct tr_list *next;
-} ibase_tr_list;
-
-typedef struct {
- isc_blob_handle bl_handle;
- unsigned short type;
- ISC_QUAD bl_qd;
-} ibase_blob;
-
-typedef struct event {
- ibase_db_link *link;
- long link_res_id;
- ISC_LONG event_id;
- unsigned short event_count;
- char **events;
- char *event_buffer, *result_buffer;
- zval *callback;
- void **thread_ctx;
- struct event *event_next;
- enum event_state { NEW, ACTIVE, DEAD } state;
-} ibase_event;
-
-enum php_interbase_option {
- PHP_IBASE_DEFAULT = 0,
- PHP_IBASE_CREATE = 0,
- /* fetch flags */
- PHP_IBASE_FETCH_BLOBS = 1,
- PHP_IBASE_FETCH_ARRAYS = 2,
- PHP_IBASE_UNIXTIME = 4,
- /* transaction access mode */
- PHP_IBASE_WRITE = 1,
- PHP_IBASE_READ = 2,
- /* transaction isolation level */
- PHP_IBASE_CONCURRENCY = 4,
- PHP_IBASE_COMMITTED = 8,
- PHP_IBASE_REC_NO_VERSION = 32,
- PHP_IBASE_REC_VERSION = 64,
- PHP_IBASE_CONSISTENCY = 16,
- /* transaction lock resolution */
- PHP_IBASE_WAIT = 128,
- PHP_IBASE_NOWAIT = 256
-};
-
-#ifdef ZTS
-#define IBG(v) TSRMG(ibase_globals_id, zend_ibase_globals *, v)
-#else
-#define IBG(v) (ibase_globals.v)
-#endif
-
-#define BLOB_ID_LEN 18
-#define BLOB_ID_MASK "0x%" LL_MASK "x"
-
-#define BLOB_INPUT 1
-#define BLOB_OUTPUT 2
-
-#ifdef PHP_WIN32
-#define LL_MASK "I64"
-#define LL_LIT(lit) lit ## I64
-typedef void (__stdcall *info_func_t)(char*);
-#else
-#define LL_MASK "ll"
-#define LL_LIT(lit) lit ## ll
-typedef void (*info_func_t)(char*);
-#endif
-
-void _php_ibase_error(TSRMLS_D);
-void _php_ibase_module_error(char * TSRMLS_DC, ...)
- PHP_ATTRIBUTE_FORMAT(printf,1,PHP_ATTR_FMT_OFFSET +2);
-
-/* determine if a resource is a link or transaction handle */
-#define PHP_IBASE_LINK_TRANS(pzval, lh, th) \
- do { if (!pzval) { \
- ZEND_FETCH_RESOURCE2(lh, ibase_db_link *, NULL, IBG(default_link), \
- "InterBase link", le_link, le_plink) } \
- else \
- _php_ibase_get_link_trans(INTERNAL_FUNCTION_PARAM_PASSTHRU, &pzval, &lh, &th); \
- if (SUCCESS != _php_ibase_def_trans(lh, &th TSRMLS_CC)) { RETURN_FALSE; } \
- } while (0)
-
-int _php_ibase_def_trans(ibase_db_link *ib_link, ibase_trans **trans TSRMLS_DC);
-void _php_ibase_get_link_trans(INTERNAL_FUNCTION_PARAMETERS, zval **link_id,
- ibase_db_link **ib_link, ibase_trans **trans);
-
-/* provided by ibase_query.c */
-void php_ibase_query_minit(INIT_FUNC_ARGS);
-
-/* provided by ibase_blobs.c */
-void php_ibase_blobs_minit(INIT_FUNC_ARGS);
-int _php_ibase_string_to_quad(char const *id, ISC_QUAD *qd);
-char *_php_ibase_quad_to_string(ISC_QUAD const qd);
-int _php_ibase_blob_get(zval *return_value, ibase_blob *ib_blob, unsigned long max_len TSRMLS_DC);
-int _php_ibase_blob_add(zval **string_arg, ibase_blob *ib_blob TSRMLS_DC);
-
-/* provided by ibase_events.c */
-void php_ibase_events_minit(INIT_FUNC_ARGS);
-void _php_ibase_free_event(ibase_event *event TSRMLS_DC);
-
-/* provided by ibase_service.c */
-void php_ibase_service_minit(INIT_FUNC_ARGS);
-
-#ifndef max
-#define max(a,b) ((a)>(b)?(a):(b))
-#endif
-
-#endif /* PHP_IBASE_INCLUDES_H */
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- */
diff --git a/ext/interbase/php_ibase_udf.c b/ext/interbase/php_ibase_udf.c
deleted file mode 100644
index 26c8882071..0000000000
--- a/ext/interbase/php_ibase_udf.c
+++ /dev/null
@@ -1,405 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Ard Biesheuvel <a.k.biesheuvel@ewi.tudelft.nl> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-/**
-* This UDF library adds the ability to call PHP functions from SQL
-* statements. Because of SQL's strong typing, you will have to declare
-* an external function for every combination { output type, #args } that
-* your application requires.
-*
-* Declare the functions like this:
-*
-* DECLARE EXTERNAL FUNCTION CALL_PHP1
-* CSTRING(xx),
-* <return type> BY DESCRIPTOR,
-* INTEGER BY DESCRIPTOR
-* RETURNS PARAMETER 2
-* ENTRY_POINT 'udf_call_php1' MODULE_NAME 'php_ibase_udf'
-*
-* DECLARE EXTERNAL FUNCTION CALL_PHP2
-* CSTRING(xx),
-* <return type> BY DESCRIPTOR,
-* INTEGER BY DESCRIPTOR,
-* INTEGER BY DESCRIPTOR
-* RETURNS PARAMETER 2
-* ENTRY_POINT 'udf_call_php2' MODULE_NAME 'php_ibase_udf'
-*
-* ... and so on. [for up to 8 input arguments]
-*
-* The first input parameter contains the name of the PHP function you want
-* to call. The second argument is the result. (omit this argument when calling
-* the function) The return type of the function is the declared type of the
-* result. The value returned from the PHP function being called will
-* automatically be converted if necessary.
-* The arguments should have their types declared as well, but you're free
-* to pass arguments of other types instead. They will be converted to the
-* best matching PHP type before being passed to the PHP function.
-*
-* The declared functions can be called from SQL like:
-*
-* SELECT * FROM <table> WHERE CALL_PHP1('soundex',<field>) NOT LIKE ?
-* or
-* UPDATE <table> SET <field> = CALL_PHP1('ucwords',<field>)
-*
-* Additionally, there's a function 'exec_php' which allows the contents
-* of text BLOB fields to be parsed and executed by PHP. This is most useful
-* for declaring functions that can then be called with CALL_PHPx.
-*
-* DECLARE EXTERNAL FUNCTION EXEC_PHP
-* BLOB,
-* INTEGER BY DESCRIPTOR,
-* SMALLINT
-* RETURNS PARAMETER 2
-* ENTRY_POINT 'exec_php' MODULE_NAME 'php_ibase_udf'
-*
-* The function will return 1 if execution succeeded and 0 if an error
-* occurred. The result that is returned from the executed PHP code is
-* ignored. You can pass a non-zero value as second argument to force
-* the embedded PHP engine to re-initialise.
-*
-* There are several ways to build this library, depending on which way the
-* database is accessed. If you're using the classic server on a local
-* connection, you should compile the library like this:
-*
-* gcc -shared `php-config --includes` `php-config --ldflags` \
-* `php-config --libs` -o php_ibase_udf.so php_ibase_udf.c
-*
-* If you connect to the classic server by TCP/IP, you should build the
-* PHP embedded static library and link against that.
-*
-* gcc -shared `php-config --includes` `php-config --ldflags` \
-* `php-config --libs` -o php_ibase_udf.so php_ibase_udf.c \
-* /usr/lib/libphp5.a
-*
-* If you use the super server, you should also link against the embedded
-* library, but be sure to enable thread safety, as the super server is
-* multi-threaded. After building, copy the resulting file to the folder
-* where your database expects to find its UDFs.
-*/
-
-#include "zend.h"
-#include "zend_API.h"
-
-#include "php.h"
-#include "php_ini.h"
-
-#include "ibase.h"
-
-#define min(a,b) ((a)<(b)?(a):(b))
-
-#ifdef PHP_WIN32
-#define LL_LIT(lit) lit ## I64
-#else
-#define LL_LIT(lit) lit ## ll
-#endif
-
-#ifdef ZTS
-# include <pthread.h>
-
-static void ***tsrm_ls;
-pthread_mutex_t mtx_res = PTHREAD_MUTEX_INITIALIZER;
-
-#define LOCK() do { pthread_mutex_lock(&mtx_res); } while (0)
-#define UNLOCK() do { pthread_mutex_unlock(&mtx_res); } while (0)
-#else
-#define LOCK()
-#define UNLOCK()
-#endif
-
-#ifdef PHP_EMBED
-# include "php_main.h"
-# include "php_embed.h"
-
-static void __attribute__((constructor)) init()
-{
- php_embed_init(0, NULL PTSRMLS_CC);
-}
-
-static void __attribute__((destructor)) fini()
-{
- php_embed_shutdown(TSRMLS_C);
-}
-
-#endif
-
-/**
-* Gets the contents of the BLOB b and offers it to Zend for parsing/execution
-*/
-void exec_php(BLOBCALLBACK b, PARAMDSC *res, ISC_SHORT *init)
-{
- int result, remaining = b->blob_total_length, i = 0;
- char *code = malloc(remaining+1);
- ISC_USHORT read;
-
- for (code[remaining] = '\0'; remaining > 0; remaining -= read)
- b->blob_get_segment(b->blob_handle, &code[i++<<16],min(0x10000,remaining), &read);
-
- LOCK();
-
- switch (init && *init) {
-
- default:
-#ifdef PHP_EMBED
- php_request_shutdown(NULL);
- if (FAILURE == (result = php_request_startup(TSRMLS_C))) {
- break;
- }
- case 0:
-#endif
- /* feed it to the parser */
- zend_first_try {
- result = zend_eval_string(code, NULL, "Firebird Embedded PHP engine" TSRMLS_CC);
- } zend_end_try();
- }
-
- UNLOCK();
-
- free(code);
-
- res->dsc_dtype = dtype_long;
- *(ISC_LONG*)res->dsc_address = (result == SUCCESS);
-}
-
-static ISC_INT64 const scales[] = { 1, 10, 100, 1000, 10000, 100000, 1000000, 100000000, 1000000000,
- 1000000000, LL_LIT(10000000000),LL_LIT(100000000000),LL_LIT(10000000000000),LL_LIT(100000000000000),
- LL_LIT(1000000000000000),LL_LIT(1000000000000000),LL_LIT(1000000000000000000) };
-
-
-static void call_php(char *name, PARAMDSC *r, int argc, PARAMDSC **argv)
-{
- do {
- zval callback, args[4], *argp[4], return_value;
- PARAMVARY *res = (PARAMVARY*)r->dsc_address;
- int i;
-
- INIT_ZVAL(callback);
- ZVAL_STRING(&callback,name,0);
-
- /* check if the requested function exists */
- if (!zend_is_callable(&callback, 0, NULL)) {
- break;
- }
-
- /* create the argument array */
- for (i = 0; i < argc; ++i) {
-
- INIT_ZVAL(args[i]);
- argp[i] = &args[i];
-
- /* test arg for null */
- if (argv[i]->dsc_flags & DSC_null) {
- ZVAL_NULL(argp[i]);
- continue;
- }
-
- switch (argv[i]->dsc_dtype) {
- ISC_INT64 l;
- struct tm t;
- char const *fmt;
- char d[64];
-
- case dtype_cstring:
- ZVAL_STRING(argp[i], (char*)argv[i]->dsc_address,0);
- break;
-
- case dtype_text:
- ZVAL_STRINGL(argp[i], (char*)argv[i]->dsc_address, argv[i]->dsc_length,0);
- break;
-
- case dtype_varying:
- ZVAL_STRINGL(argp[i], ((PARAMVARY*)argv[i]->dsc_address)->vary_string,
- ((PARAMVARY*)argv[i]->dsc_address)->vary_length,0);
- break;
-
- case dtype_short:
- if (argv[i]->dsc_scale == 0) {
- ZVAL_LONG(argp[i], *(short*)argv[i]->dsc_address);
- } else {
- ZVAL_DOUBLE(argp[i],
- ((double)*(short*)argv[i]->dsc_address)/scales[-argv[i]->dsc_scale]);
- }
- break;
-
- case dtype_long:
- if (argv[i]->dsc_scale == 0) {
- ZVAL_LONG(argp[i], *(ISC_LONG*)argv[i]->dsc_address);
- } else {
- ZVAL_DOUBLE(argp[i],
- ((double)*(ISC_LONG*)argv[i]->dsc_address)/scales[-argv[i]->dsc_scale]);
- }
- break;
-
- case dtype_int64:
- l = *(ISC_INT64*)argv[i]->dsc_address;
-
- if (argv[i]->dsc_scale == 0 && l <= LONG_MAX && l >= LONG_MIN) {
- ZVAL_LONG(argp[i], (long)l);
- } else {
- ZVAL_DOUBLE(argp[i], ((double)l)/scales[-argv[i]->dsc_scale]);
- }
- break;
-
- case dtype_real:
- ZVAL_DOUBLE(argp[i], *(float*)argv[i]->dsc_address);
- break;
-
- case dtype_double:
- ZVAL_DOUBLE(argp[i], *(double*)argv[i]->dsc_address);
- break;
-
- case dtype_sql_date:
- isc_decode_sql_date((ISC_DATE*)argv[i]->dsc_address, &t);
- ZVAL_STRINGL(argp[i], d, strftime(d, sizeof(d), INI_STR("ibase.dateformat"), &t),1);
- break;
-
- case dtype_sql_time:
- isc_decode_sql_time((ISC_TIME*)argv[i]->dsc_address, &t);
- ZVAL_STRINGL(argp[i], d, strftime(d, sizeof(d), INI_STR("ibase.timeformat"), &t),1);
- break;
-
- case dtype_timestamp:
- isc_decode_timestamp((ISC_TIMESTAMP*)argv[i]->dsc_address, &t);
- ZVAL_STRINGL(argp[i], d, strftime(d, sizeof(d), INI_STR("ibase.timestampformat"), &t),1);
- break;
- }
- }
-
- LOCK();
-
- /* now call the function */
- if (FAILURE == call_user_function(EG(function_table), NULL,
- &callback, &return_value, argc, argp TSRMLS_CC)) {
- UNLOCK();
- break;
- }
-
- UNLOCK();
-
- for (i = 0; i < argc; ++i) {
- switch (argv[i]->dsc_dtype) {
- case dtype_sql_date:
- case dtype_sql_time:
- case dtype_timestamp:
- zval_dtor(argp[i]);
-
- }
- }
-
- /* return whatever type we got back from the callback: let DB handle conversion */
- switch (Z_TYPE(return_value)) {
-
- case IS_LONG:
- r->dsc_dtype = dtype_long;
- *(long*)r->dsc_address = Z_LVAL(return_value);
- r->dsc_length = sizeof(long);
- break;
-
- case IS_DOUBLE:
- r->dsc_dtype = dtype_double;
- *(double*)r->dsc_address = Z_DVAL(return_value);
- r->dsc_length = sizeof(double);
- break;
-
- case IS_NULL:
- r->dsc_flags |= DSC_null;
- break;
-
- default:
- convert_to_string(&return_value);
-
- case IS_STRING:
- r->dsc_dtype = dtype_varying;
- memcpy(res->vary_string, Z_STRVAL(return_value),
- (res->vary_length = min(r->dsc_length-2,Z_STRLEN(return_value))));
- r->dsc_length = res->vary_length+2;
- break;
- }
-
- zval_dtor(&return_value);
-
- return;
-
- } while (0);
-
- /**
- * If we end up here, we should report an error back to the DB engine, but
- * that's not possible. We can however report it back to PHP.
- */
- LOCK();
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Error calling function '%s' from database", name);
- UNLOCK();
-}
-
-
-/* Entry points for the DB engine */
-
-void udf_call_php1(char *name, PARAMDSC *r, PARAMDSC *arg1)
-{
- PARAMDSC *args[1] = { arg1 };
- call_php(name, r, 1, args);
-}
-
-void udf_call_php2(char *name, PARAMDSC *r, PARAMDSC *arg1, PARAMDSC *arg2)
-{
- PARAMDSC *args[2] = { arg1, arg2 };
- call_php(name, r, 2, args);
-}
-
-void udf_call_php3(char *name, PARAMDSC *r, PARAMDSC *arg1, PARAMDSC *arg2, PARAMDSC *arg3)
-{
- PARAMDSC *args[3] = { arg1, arg2, arg3 };
- call_php(name, r, 3, args);
-}
-
-void udf_call_php4(char *name, PARAMDSC *r, PARAMDSC *arg1, PARAMDSC *arg2, PARAMDSC *arg3,
- PARAMDSC *arg4)
-{
- PARAMDSC *args[4] = { arg1, arg2, arg3, arg4 };
- call_php(name, r, 4, args);
-}
-
-void udf_call_php5(char *name, PARAMDSC *r, PARAMDSC *arg1, PARAMDSC *arg2, PARAMDSC *arg3,
- PARAMDSC *arg4, PARAMDSC *arg5)
-{
- PARAMDSC *args[5] = { arg1, arg2, arg3, arg4, arg5 };
- call_php(name, r, 5, args);
-}
-
-void udf_call_php6(char *name, PARAMDSC *r, PARAMDSC *arg1, PARAMDSC *arg2, PARAMDSC *arg3,
- PARAMDSC *arg4, PARAMDSC *arg5, PARAMDSC *arg6)
-{
- PARAMDSC *args[6] = { arg1, arg2, arg3, arg4, arg5, arg6 };
- call_php(name, r, 6, args);
-}
-
-void udf_call_php7(char *name, PARAMDSC *r, PARAMDSC *arg1, PARAMDSC *arg2, PARAMDSC *arg3,
- PARAMDSC *arg4, PARAMDSC *arg5, PARAMDSC *arg6, PARAMDSC *arg7)
-{
- PARAMDSC *args[7] = { arg1, arg2, arg3, arg4, arg5, arg6, arg7 };
- call_php(name, r, 7, args);
-}
-
-void udf_call_php8(char *name, PARAMDSC *r, PARAMDSC *arg1, PARAMDSC *arg2, PARAMDSC *arg3,
- PARAMDSC *arg4, PARAMDSC *arg5, PARAMDSC *arg6, PARAMDSC *arg7, PARAMDSC *arg8)
-{
- PARAMDSC *args[8] = { arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8 };
- call_php(name, r, 8, args);
-}
-
diff --git a/ext/interbase/php_interbase.h b/ext/interbase/php_interbase.h
deleted file mode 100644
index 1469b2a4bd..0000000000
--- a/ext/interbase/php_interbase.h
+++ /dev/null
@@ -1,107 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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. |
- +----------------------------------------------------------------------+
- | Authors: Jouni Ahto <jouni.ahto@exdec.fi> |
- | Andrew Avdeev <andy@simgts.mv.ru> |
- | Ard Biesheuvel <a.k.biesheuvel@its.tudelft.nl> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-#ifndef PHP_INTERBASE_H
-#define PHP_INTERBASE_H
-
-extern zend_module_entry ibase_module_entry;
-#define phpext_interbase_ptr &ibase_module_entry
-
-PHP_MINIT_FUNCTION(ibase);
-PHP_RINIT_FUNCTION(ibase);
-PHP_MSHUTDOWN_FUNCTION(ibase);
-PHP_RSHUTDOWN_FUNCTION(ibase);
-PHP_MINFO_FUNCTION(ibase);
-
-PHP_FUNCTION(ibase_connect);
-PHP_FUNCTION(ibase_pconnect);
-PHP_FUNCTION(ibase_close);
-PHP_FUNCTION(ibase_drop_db);
-PHP_FUNCTION(ibase_query);
-PHP_FUNCTION(ibase_fetch_row);
-PHP_FUNCTION(ibase_fetch_assoc);
-PHP_FUNCTION(ibase_fetch_object);
-PHP_FUNCTION(ibase_free_result);
-PHP_FUNCTION(ibase_name_result);
-PHP_FUNCTION(ibase_prepare);
-PHP_FUNCTION(ibase_execute);
-PHP_FUNCTION(ibase_free_query);
-
-PHP_FUNCTION(ibase_timefmt);
-
-PHP_FUNCTION(ibase_gen_id);
-PHP_FUNCTION(ibase_num_fields);
-PHP_FUNCTION(ibase_num_params);
-#if abies_0
-PHP_FUNCTION(ibase_num_rows);
-#endif
-PHP_FUNCTION(ibase_affected_rows);
-PHP_FUNCTION(ibase_field_info);
-PHP_FUNCTION(ibase_param_info);
-
-PHP_FUNCTION(ibase_trans);
-PHP_FUNCTION(ibase_commit);
-PHP_FUNCTION(ibase_rollback);
-PHP_FUNCTION(ibase_commit_ret);
-PHP_FUNCTION(ibase_rollback_ret);
-
-PHP_FUNCTION(ibase_blob_create);
-PHP_FUNCTION(ibase_blob_add);
-PHP_FUNCTION(ibase_blob_cancel);
-PHP_FUNCTION(ibase_blob_open);
-PHP_FUNCTION(ibase_blob_get);
-PHP_FUNCTION(ibase_blob_close);
-PHP_FUNCTION(ibase_blob_echo);
-PHP_FUNCTION(ibase_blob_info);
-PHP_FUNCTION(ibase_blob_import);
-
-PHP_FUNCTION(ibase_add_user);
-PHP_FUNCTION(ibase_modify_user);
-PHP_FUNCTION(ibase_delete_user);
-
-PHP_FUNCTION(ibase_service_attach);
-PHP_FUNCTION(ibase_service_detach);
-PHP_FUNCTION(ibase_backup);
-PHP_FUNCTION(ibase_restore);
-PHP_FUNCTION(ibase_maintain_db);
-PHP_FUNCTION(ibase_db_info);
-PHP_FUNCTION(ibase_server_info);
-
-PHP_FUNCTION(ibase_errmsg);
-PHP_FUNCTION(ibase_errcode);
-
-PHP_FUNCTION(ibase_wait_event);
-PHP_FUNCTION(ibase_set_event_handler);
-PHP_FUNCTION(ibase_free_event_handler);
-
-#else
-
-#define phpext_interbase_ptr NULL
-
-#endif /* PHP_INTERBASE_H */
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- */
diff --git a/ext/interbase/tests/002.phpt b/ext/interbase/tests/002.phpt
deleted file mode 100644
index 070a6f0069..0000000000
--- a/ext/interbase/tests/002.phpt
+++ /dev/null
@@ -1,33 +0,0 @@
---TEST--
-InterBase: connect, close and pconnect
---SKIPIF--
-<?php include("skipif.inc"); ?>
---FILE--
-<?php /* $Id$ */
-
- require("interbase.inc");
-
- ibase_connect($test_base);
- out_table("test1");
- ibase_close();
-
- $con = ibase_connect($test_base);
- $pcon1 = ibase_pconnect($test_base);
- $pcon2 = ibase_pconnect($test_base);
- ibase_close($con);
- unset($con);
- ibase_close($pcon1);
- unset($pcon1);
-
- out_table("test1");
-
- ibase_close($pcon2);
- unset($pcon2);
-?>
---EXPECT--
---- test1 ---
-1 test table not created with isql
----
---- test1 ---
-1 test table not created with isql
----
diff --git a/ext/interbase/tests/003.phpt b/ext/interbase/tests/003.phpt
deleted file mode 100644
index 0263010b02..0000000000
--- a/ext/interbase/tests/003.phpt
+++ /dev/null
@@ -1,183 +0,0 @@
---TEST--
-InterBase: misc sql types (may take a while)
---SKIPIF--
-<?php include("skipif.inc"); ?>
---FILE--
-<?php /* $Id$ */
-
- require("interbase.inc");
- ibase_connect($test_base);
-
- ibase_query(
- "create table test3 (
- iter integer not null,
- v_char char(1000),
- v_date timestamp,
- v_decimal4_2 decimal(4,2),
- v_decimal4_0 decimal(4,0),
- v_decimal7_2 decimal(7,2),
- v_decimal7_0 decimal(7,0),
- v_numeric15_15 numeric(15,15),
- v_numeric15_0 numeric(15,0),
- v_double double precision,
- v_float float,
- v_integer integer,
- v_smallint smallint,
- v_varchar varchar(10000)
- )");
- ibase_commit();
-
- /* should fail, but gracefully */
- @ibase_query("insert into test3 (iter) values (?)", null);
-
- /* if timefmt is not supported, suppress error here */
- ini_set('ibase.timestampformat',"%m/%d/%Y %H:%M:%S");
-
- for($iter = 0; $iter < 10; $iter++){
- /* prepare data */
- $v_char = rand_str(1000);
- $v_date = rand_datetime();
- $v_decimal4_2 = rand_number(4,2);
- $v_decimal4_0 = rand_number(4,0);
- $v_decimal7_2 = rand_number(7,2);
- $v_decimal7_0 = rand_number(7,0);
- $v_numeric15_15 = rand_number(15,15);
- $v_numeric15_0 = $iter ? rand_number(15,0) : 0;
- $v_double = rand_number(18);
- $v_float = rand_number(7);
- $v_integer = rand_number(9,0);
- $v_smallint = rand_number(5) % 32767;
- $v_varchar = rand_str(10000);
-
- ibase_query(
- "insert into test3 (iter, v_char,v_date,v_decimal4_2, v_decimal4_0, v_decimal7_2, v_decimal7_0,v_numeric15_15, v_numeric15_0,v_double,v_float,v_integer,v_smallint,v_varchar)
- values ($iter, '$v_char','$v_date',$v_decimal4_2, $v_decimal4_0, $v_decimal7_2, $v_decimal7_0,$v_numeric15_15, $v_numeric15_0,$v_double,$v_float,$v_integer,$v_smallint,'$v_varchar')");
- $sel = ibase_query("select * from test3 where iter = $iter");
- $row = ibase_fetch_object($sel);
- if(substr($row->V_CHAR,0,strlen($v_char)) != $v_char){
- echo " CHAR fail:\n";
- echo " in: $v_char\n";
- echo " out: $row->V_CHAR\n";
- }
- if($row->V_DATE != $v_date){
- echo " DATE fail\n";
- echo " in: $v_date\n";
- echo " out: $row->V_DATE\n";
- }
- if($row->V_DECIMAL4_2 != $v_decimal4_2){
- echo " DECIMAL4_2 fail\n";
- echo " in: $v_decimal4_2\n";
- echo " out: $row->V_DECIMAL4_2\n";
- }
- if($row->V_DECIMAL4_0 != $v_decimal4_0){
- echo " DECIMAL4_0 fail\n";
- echo " in: $v_decimal4_0\n";
- echo " out: $row->V_DECIMAL4_0\n";
- }
- if($row->V_DECIMAL7_2 != $v_decimal7_2){
- echo " DECIMAL7_2 fail\n";
- echo " in: $v_decimal7_2\n";
- echo " out: $row->V_DECIMAL7_2\n";
- }
- if($row->V_DECIMAL7_0 != $v_decimal7_0){
- echo " DECIMAL7_0 fail\n";
- echo " in: $v_decimal7_0\n";
- echo " out: $row->V_DECIMAL7_0\n";
- }
- if($row->V_NUMERIC15_15 != $v_numeric15_15){
- echo " NUMERIC15_15 fail\n";
- echo " in: $v_numeric15_15\n";
- echo " out: $row->V_NUMERIC15_15\n";
- }
- if($row->V_NUMERIC15_0 != (string)$v_numeric15_0){
- echo " NUMERIC15_0 fail\n";
- echo " in: $v_numeric15_0\n";
- echo " out: $row->V_NUMERIC15_0\n";
- }
-
- if(abs($row->V_DOUBLE - $v_double) > abs($v_double / 1E15)){
- echo " DOUBLE fail\n";
- echo " in: $v_double\n";
- echo " out: $row->V_DOUBLE\n";
- }
- if(abs($row->V_FLOAT - $v_float) > abs($v_float / 1E7)){
- echo " FLOAT fail\n";
- echo " in: $v_float\n";
- echo " out: $row->V_FLOAT\n";
- }
- if($row->V_INTEGER != $v_integer){
- echo " INTEGER fail\n";
- echo " in: $v_integer\n";
- echo " out: $row->V_INTEGER\n";
- }
- if($row->V_SMALLINT != $v_smallint){
- echo " SMALLINT fail\n";
- echo " in: $v_smallint\n";
- echo " out: $row->V_SMALLINT\n";
- }
-
- if(substr($row->V_VARCHAR,0,strlen($v_varchar)) != $v_varchar){
- echo " VARCHAR fail:\n";
- echo " in: $v_varchar\n";
- echo " out: $row->V_VARCHAR\n";
- }
-
- ibase_free_result($sel);
- } /* for($iter) */
-
- /* check for correct handling of duplicate field names */
- $q = ibase_query('SELECT 1 AS id, 2 AS id, 3 AS id, 4 AS id, 5 AS id, 6 AS id, 7 AS id, 8 AS id, 9 AS id,
- 10 AS id, 11 AS id, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22 FROM rdb$database');
- var_dump(ibase_fetch_assoc($q));
-
- ibase_close();
- echo "end of test\n";
-?>
---EXPECT--
-array(22) {
- ["ID"]=>
- int(1)
- ["ID_01"]=>
- int(2)
- ["ID_02"]=>
- int(3)
- ["ID_03"]=>
- int(4)
- ["ID_04"]=>
- int(5)
- ["ID_05"]=>
- int(6)
- ["ID_06"]=>
- int(7)
- ["ID_07"]=>
- int(8)
- ["ID_08"]=>
- int(9)
- ["ID_09"]=>
- int(10)
- ["ID_10"]=>
- int(11)
- ["FIELD_00"]=>
- int(12)
- ["FIELD_01"]=>
- int(13)
- ["FIELD_02"]=>
- int(14)
- ["FIELD_03"]=>
- int(15)
- ["FIELD_04"]=>
- int(16)
- ["FIELD_05"]=>
- int(17)
- ["FIELD_06"]=>
- int(18)
- ["FIELD_07"]=>
- int(19)
- ["FIELD_08"]=>
- int(20)
- ["FIELD_09"]=>
- int(21)
- ["FIELD_10"]=>
- int(22)
-}
-end of test
diff --git a/ext/interbase/tests/004.phpt b/ext/interbase/tests/004.phpt
deleted file mode 100644
index 579445dbdd..0000000000
--- a/ext/interbase/tests/004.phpt
+++ /dev/null
@@ -1,182 +0,0 @@
---TEST--
-InterBase: BLOB test
---SKIPIF--
-<?php include("skipif.inc"); ?>
---FILE--
-<?php /* $Id$ */
-
- require("interbase.inc");
-
- $link = ibase_connect($test_base);
-
- ibase_query(
- "CREATE TABLE test4 (
- v_integer integer,
- v_blob blob)");
- ibase_commit();
-
- /* create 100k blob file */
- $blob_str = rand_binstr(100*1024);
-
- $name = tempnam(dirname(__FILE__),"blob.tmp");
- $ftmp = fopen($name,"w");
- fwrite($ftmp,$blob_str);
- fclose($ftmp);
-
- echo "import blob 1\n";
- $ftmp = fopen($name,"r");
- $bl_s = ibase_blob_import($ftmp);
- ibase_query("INSERT INTO test4 (v_integer, v_blob) VALUES (1, ?)", $bl_s);
-
- $bl_s = ibase_blob_import($link,$ftmp);
- ibase_query($link, "INSERT INTO test4 (v_integer, v_blob) VALUES (1, ?)", $bl_s);
- fclose($ftmp);
-
- echo "test blob 1\n";
- $q = ibase_query("SELECT v_blob FROM test4 WHERE v_integer = 1");
-
- $row = ibase_fetch_object($q);
- $bl_h = ibase_blob_open($row->V_BLOB);
-
- $blob = '';
- while($piece = ibase_blob_get($bl_h, 1 + rand() % 1024))
- $blob .= $piece;
- if($blob != $blob_str)
- echo " BLOB 1 fail (1)\n";
- ibase_blob_close($bl_h);
-
- $bl_h = ibase_blob_open($link,$row->V_BLOB);
-
- $blob = '';
- while($piece = ibase_blob_get($bl_h, 100 * 1024))
- $blob .= $piece;
- if($blob != $blob_str)
- echo " BLOB 1 fail (2)\n";
- ibase_blob_close($bl_h);
- ibase_free_result($q);
- unset($blob);
-
- echo "create blob 2\n";
-
- ibase_query("INSERT INTO test4 (v_integer, v_blob) VALUES (2, ?)", $blob_str);
-
- echo "test blob 2\n";
-
- $q = ibase_query("SELECT v_blob FROM test4 WHERE v_integer = 2");
- $row = ibase_fetch_object($q,IBASE_TEXT);
-
- if($row->V_BLOB != $blob_str)
- echo " BLOB 2 fail\n";
- ibase_free_result($q);
- unset($blob);
-
-
- echo "create blob 3\n";
-
- $bl_h = ibase_blob_create($link);
-
- ibase_blob_add($bl_h, "+----------------------------------------------------------------------+\n");
- ibase_blob_add($bl_h, "| PHP HTML Embedded Scripting Language Version 3.0 |\n");
- ibase_blob_add($bl_h, "+----------------------------------------------------------------------+\n");
- ibase_blob_add($bl_h, "| Copyright (c) 1997-2000 PHP Development Team (See Credits file) |\n");
- ibase_blob_add($bl_h, "+----------------------------------------------------------------------+\n");
- ibase_blob_add($bl_h, "| This program is free software; you can redistribute it and/or modify |\n");
- ibase_blob_add($bl_h, "| it under the terms of one of the following licenses: |\n");
- ibase_blob_add($bl_h, "| |\n");
- ibase_blob_add($bl_h, "| A) the GNU General Public License as published by the Free Software |\n");
- ibase_blob_add($bl_h, "| Foundation; either version 2 of the License, or (at your option) |\n");
- ibase_blob_add($bl_h, "| any later version. |\n");
- ibase_blob_add($bl_h, "| |\n");
- ibase_blob_add($bl_h, "| B) the PHP License as published by the PHP Development Team and |\n");
- ibase_blob_add($bl_h, "| included in the distribution in the file: LICENSE |\n");
- ibase_blob_add($bl_h, "| |\n");
- ibase_blob_add($bl_h, "| This program is distributed in the hope that it will be useful, |\n");
- ibase_blob_add($bl_h, "| but WITHOUT ANY WARRANTY; without even the implied warranty of |\n");
- ibase_blob_add($bl_h, "| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |\n");
- ibase_blob_add($bl_h, "| GNU General Public License for more details. |\n");
- ibase_blob_add($bl_h, "| |\n");
- ibase_blob_add($bl_h, "| You should have received a copy of both licenses referred to here. |\n");
- ibase_blob_add($bl_h, "| If you did not, or have any questions about PHP licensing, please |\n");
- ibase_blob_add($bl_h, "| contact core@php.net. |\n");
- ibase_blob_add($bl_h, "+----------------------------------------------------------------------+\n");
- $bl_s = ibase_blob_close($bl_h);
- ibase_query("INSERT INTO test4 (v_integer, v_blob) VALUES (3, ?)", $bl_s);
- ibase_commit();
- echo "echo blob 3\n";
-
- $q = ibase_query("SELECT v_blob FROM test4 WHERE v_integer = 3");
- $row = ibase_fetch_object($q);
- ibase_commit();
- ibase_close();
-
- ibase_connect($test_base);
- ibase_blob_echo($link, $row->V_BLOB);
- ibase_free_result($q);
-
- echo "fetch blob 3\n";
- $q = ibase_query("SELECT v_blob FROM test4 WHERE v_integer = 3");
- $row = ibase_fetch_object($q,IBASE_TEXT);
- echo $row->V_BLOB;
- ibase_free_result($q);
-
- ibase_close();
- unlink($name);
- echo "end of test\n";
-?>
---EXPECT--
-import blob 1
-test blob 1
-create blob 2
-test blob 2
-create blob 3
-echo blob 3
-+----------------------------------------------------------------------+
-| PHP HTML Embedded Scripting Language Version 3.0 |
-+----------------------------------------------------------------------+
-| Copyright (c) 1997-2000 PHP Development Team (See Credits file) |
-+----------------------------------------------------------------------+
-| This program is free software; you can redistribute it and/or modify |
-| it under the terms of one of the following licenses: |
-| |
-| A) the GNU General Public License as published by the Free Software |
-| Foundation; either version 2 of the License, or (at your option) |
-| any later version. |
-| |
-| B) the PHP License as published by the PHP Development Team and |
-| included in the distribution in the file: LICENSE |
-| |
-| This program is distributed in the hope that it will be useful, |
-| but WITHOUT ANY WARRANTY; without even the implied warranty of |
-| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
-| GNU General Public License for more details. |
-| |
-| You should have received a copy of both licenses referred to here. |
-| If you did not, or have any questions about PHP licensing, please |
-| contact core@php.net. |
-+----------------------------------------------------------------------+
-fetch blob 3
-+----------------------------------------------------------------------+
-| PHP HTML Embedded Scripting Language Version 3.0 |
-+----------------------------------------------------------------------+
-| Copyright (c) 1997-2000 PHP Development Team (See Credits file) |
-+----------------------------------------------------------------------+
-| This program is free software; you can redistribute it and/or modify |
-| it under the terms of one of the following licenses: |
-| |
-| A) the GNU General Public License as published by the Free Software |
-| Foundation; either version 2 of the License, or (at your option) |
-| any later version. |
-| |
-| B) the PHP License as published by the PHP Development Team and |
-| included in the distribution in the file: LICENSE |
-| |
-| This program is distributed in the hope that it will be useful, |
-| but WITHOUT ANY WARRANTY; without even the implied warranty of |
-| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
-| GNU General Public License for more details. |
-| |
-| You should have received a copy of both licenses referred to here. |
-| If you did not, or have any questions about PHP licensing, please |
-| contact core@php.net. |
-+----------------------------------------------------------------------+
-end of test
diff --git a/ext/interbase/tests/005.phpt b/ext/interbase/tests/005.phpt
deleted file mode 100644
index 5b16ac2917..0000000000
--- a/ext/interbase/tests/005.phpt
+++ /dev/null
@@ -1,290 +0,0 @@
---TEST--
-InterBase: transactions
---SKIPIF--
-<?php include("skipif.inc"); ?>
---FILE--
-<?php /* $Id$ */
-
- require("interbase.inc");
-
- ibase_connect($test_base);
-
- @ibase_query("create table test5 (i integer)");
- @ibase_query("delete from test5");
- ibase_close();
-
-
- echo "default transaction:\n";
-
-/*
-Difference between default and other transactions:
-default commited when you call ibase_close().
-Other transaction doing rollback.
-
-If you not open default transaction with
-ibase_trans, default transaction open
-when you call ibase_query(), ibase_prepare(),
-ibase_blob_create(), ibase_blob_import() first time.
-*/
-
-/*
-simple default transaction test without ibase_trans()
-*/
-
- ibase_connect($test_base);
-
- echo "empty table\n";
-
- /* out_table call ibase_query()
- and ibase_query() start default transaction */
- out_table("test5");
-
- /* in default transaction context */
- ibase_query("insert into test5 (i) values (1)");
-
- echo "one row\n";
- out_table("test5");
-
- ibase_rollback(); /* default rolled */
-
- echo "after rollback table empty again\n";
- out_table("test5"); /* started new default transaction */
-
- ibase_query("insert into test5 (i) values (2)");
-
- ibase_close(); /* commit here! */
-
- ibase_connect($test_base);
-
- echo "one row\n";
- out_table("test5");
- ibase_close();
-
-/*
-default transaction on default link
-First open transaction on link will be default.
-$tr_def_l1 may be ommited. All queryes without link and trans
-parameters run in this context
-*/
-
- $link_def = ibase_connect($test_base);
-
- $tr_def_l1 = ibase_trans(IBASE_READ); /* here transaction start */
-
- /* all default */
- $res = ibase_query("select * from test5");
-
- echo "one row\n";
- out_result($res,"test5");
-
- ibase_free_result($res);
-
- /* specify transaction context... */
- $res = ibase_query($tr_def_l1, "select * from test5");
-
- echo "one row... again.\n";
- out_result($res,"test5");
-
- ibase_free_result($res);
-
- /* specify default transaction on link */
- $res = ibase_query($link_def, "select * from test5");
-
- echo "one row.\n";
- out_result($res,"test5");
-
- ibase_free_result($res);
-
- ibase_rollback($link_def); /* just for example */
-
- ibase_close();
-
-/*
-three transaction on default link
-*/
- ibase_connect($test_base);
-
- $res = ibase_query("select * from test5");
-
- echo "one row\n";
- out_result($res,"test5");
-
- ibase_free_result($res);
-
- $tr_1 = ibase_query("SET TRANSACTION");
- $tr_2 = ibase_query("SET TRANSACTION READ ONLY");
- $tr_3 = ibase_trans(IBASE_READ+IBASE_COMMITTED+IBASE_REC_VERSION+IBASE_WAIT);
- $tr_4 = ibase_trans(IBASE_READ+IBASE_COMMITTED+IBASE_REC_NO_VERSION+IBASE_NOWAIT);
-
- /* insert in first transaction context... */
- /* as default */
- ibase_query("insert into test5 (i) values (3)");
- /* specify context */
- ibase_query($tr_1, "insert into test5 (i) values (4)");
-
- $res = ibase_query("select * from test5");
-
- echo "two rows\n";
- out_result($res,"test5");
-
- ibase_free_result($res);
-
- $res = ibase_query($tr_1, "select * from test5");
-
- echo "two rows again\n";
- out_result($res,"test5");
-
- ibase_free_result($res);
-
- ibase_commit();
- ibase_commit($tr_1);
-
- $tr_1 = ibase_trans();
- ibase_query($tr_1, "insert into test5 (i) values (5)");
-
- /* tr_2 is IBASE_READ + IBASE_CONCURRENCY + IBASE_WAIT */
- $res = ibase_query($tr_2, "select * from test5");
-
- echo "one row in second transaction\n";
- out_result($res,"test5");
-
- ibase_free_result($res);
-
- /* tr_3 is IBASE_COMMITTED + IBASE_REC_VERSION + IBASE_WAIT */
- $res = ibase_query($tr_3, "select * from test5");
-
- echo "three rows in third transaction\n";
- out_result($res,"test5");
-
- ibase_free_result($res);
-
- /* tr_4 IBASE_COMMITED + IBASE_REC_NO_VERSION + IBASE_NOWAIT */
- $res = ibase_query($tr_4, "select * from test5");
-
- echo "three rows in fourth transaction with deadlock\n";
- out_result_trap_error($res,"test5");
-
- ibase_free_result($res);
-
- ibase_rollback($tr_1);
- ibase_close();
-/*
-transactions on second link
-*/
- $link_1 = ibase_pconnect($test_base);
- $link_2 = ibase_pconnect($test_base);
-
- $tr_1 = ibase_trans(IBASE_DEFAULT, $link_2); /* this default transaction also */
- $tr_2 = ibase_trans(IBASE_COMMITTED, $link_2);
-
- $res = ibase_query($tr_1, "select * from test5");
-
- echo "three rows\n";
- out_result($res,"test5");
-
- ibase_free_result($res);
-
- ibase_query($tr_1, "insert into test5 (i) values (5)");
-
- $res = ibase_query($tr_1, "select * from test5");
-
- echo "four rows\n";
- out_result($res,"test5");
-
- ibase_free_result($res);
-
- ibase_commit($tr_1);
-
- $res = ibase_query($tr_2, "select * from test5");
-
- echo "four rows again\n";
- out_result($res,"test5");
-
- ibase_free_result($res);
-
- ibase_close($link_1);
- ibase_close($link_2);
-
- echo "end of test\n";
-?>
---EXPECT--
-default transaction:
-empty table
---- test5 ---
----
-one row
---- test5 ---
-1
----
-after rollback table empty again
---- test5 ---
----
-one row
---- test5 ---
-2
----
-one row
---- test5 ---
-2
----
-one row... again.
---- test5 ---
-2
----
-one row.
---- test5 ---
-2
----
-one row
---- test5 ---
-2
----
-two rows
---- test5 ---
-2
-3
----
-two rows again
---- test5 ---
-2
-4
----
-one row in second transaction
---- test5 ---
-2
----
-three rows in third transaction
---- test5 ---
-2
-3
-4
----
-three rows in fourth transaction with deadlock
---- test5 ---
-2
-3
-4
-errmsg [lock conflict on no wait transaction deadlock ]
----
-three rows
---- test5 ---
-2
-3
-4
----
-four rows
---- test5 ---
-2
-3
-4
-5
----
-four rows again
---- test5 ---
-2
-3
-4
-5
----
-end of test
-
diff --git a/ext/interbase/tests/006.phpt b/ext/interbase/tests/006.phpt
deleted file mode 100644
index 8155c9f41e..0000000000
--- a/ext/interbase/tests/006.phpt
+++ /dev/null
@@ -1,301 +0,0 @@
---TEST--
-InterBase: binding (may take a while)
---SKIPIF--
-<?php include("skipif.inc"); ?>
---FILE--
-<?php /* $Id$ */
-
- require("interbase.inc");
-
- ibase_connect($test_base);
-
- ibase_query(
- "create table test6 (
- iter integer,
- v_char char(1000),
- v_date timestamp,
- v_decimal decimal(12,3),
- v_double double precision,
- v_float float,
- v_integer integer,
- v_numeric numeric(4,2),
- v_smallint smallint,
- v_varchar varchar(10000)
- )");
- ibase_query(
- "create procedure add1 (arg integer)
- returns (result integer)
- as
- begin
- result = arg +1;
- end");
- ibase_commit();
-
- /* if timefmt not supported, hide error */
- ini_set('ibase.timestampformat',"%m/%d/%Y %H:%M:%S");
-
- echo "insert\n";
-
- for($iter = 0; $iter < 3; $iter++) {
- /* prepare data */
- $v_char = rand_str(1000);
- $v_date = rand_datetime();
- $v_decimal = rand_number(12,3);
- $v_double = rand_number(20);
- $v_float = rand_number(7);
- $v_integer = rand_number(9,0);
- $v_numeric = rand_number(4,2);
- $v_smallint = rand_number(5) % 32767;
- $v_varchar = rand_str(10000);
-
- ibase_query("insert into test6
- (iter,v_char,v_date,v_decimal,v_double,v_float,
- v_integer,v_numeric,v_smallint,v_varchar)
- values (?,?,?,?,?,?,?,?,?,?)",
- $iter, $v_char, $v_date, $v_decimal, $v_double, $v_float,
- $v_integer, $v_numeric, $v_smallint, $v_varchar);
- $sel = ibase_query("select * from test6 where iter = ?", $iter);
-
- $row = ibase_fetch_object($sel);
- if(substr($row->V_CHAR,0,strlen($v_char)) != $v_char) {
- echo " CHAR fail:\n";
- echo " in: $v_char\n";
- echo " out: $row->V_CHAR\n";
- }
- if($row->V_DATE != $v_date) {
- echo " DATE fail\n";
- echo " in: $v_date\n";
- echo " out: $row->V_DATE\n";
- }
- if($row->V_DECIMAL != $v_decimal) {
- echo " DECIMAL fail\n";
- echo " in: $v_decimal\n";
- echo " out: $row->V_DECIMAL\n";
- }
- if(abs($row->V_DOUBLE - $v_double) > abs($v_double / 1E15)) {
- echo " DOUBLE fail\n";
- echo " in: $v_double\n";
- echo " out: $row->V_DOUBLE\n";
- }
- if(abs($row->V_FLOAT - $v_float) > abs($v_float / 1E7)) {
- echo " FLOAT fail\n";
- echo " in: $v_float\n";
- echo " out: $row->V_FLOAT\n";
- }
- if($row->V_INTEGER != $v_integer) {
- echo " INTEGER fail\n";
- echo " in: $v_integer\n";
- echo " out: $row->V_INTEGER\n";
- }
- if ($row->V_NUMERIC != $v_numeric) {
- echo " NUMERIC fail\n";
- echo " in: $v_numeric\n";
- echo " out: $row->V_NUMERIC\n";
- }
- if ($row->V_SMALLINT != $v_smallint) {
- echo " SMALLINT fail\n";
- echo " in: $v_smallint\n";
- echo " out: $row->V_SMALLINT\n";
- }
- if ($row->V_VARCHAR != $v_varchar) {
- echo " VARCHAR fail:\n";
- echo " in: $v_varchar\n";
- echo " out: $row->V_VARCHAR\n";
- }
- ibase_free_result($sel);
- }/* for($iter)*/
-
- echo "select\n";
- for($iter = 0; $iter < 3; $iter++) {
- /* prepare data */
- $v_char = rand_str(1000);
- $v_date = (int)rand_number(10,0,0);
- $v_decimal = rand_number(12,3);
- $v_double = rand_number(20);
- $v_float = rand_number(7);
- $v_integer = rand_number(9,0);
- $v_numeric = rand_number(4,2);
- $v_smallint = rand_number(5) % 32767;
- $v_varchar = rand_str(10000);
-
- /* clear table*/
- ibase_query("delete from test6");
-
- /* make one record */
- ibase_query("insert into test6
- (iter, v_char,v_date,v_decimal,
- v_integer,v_numeric,v_smallint,v_varchar)
- values (666, '$v_char',?,$v_decimal, $v_integer,
- $v_numeric, $v_smallint, '$v_varchar')",$v_date);
-
- /* test all types */
- if(!($sel = ibase_query(
- "select iter from test6 where v_char = ?", $v_char)) ||
- !ibase_fetch_row($sel)) {
- echo "CHAR fail\n";
- }
- ibase_free_result($sel);
- if(!($sel = ibase_query(
- "select iter from test6 where v_date = ?", $v_date)) ||
- !ibase_fetch_row($sel)) {
- echo "DATE fail\n";
- }
- ibase_free_result($sel);
- if(!($sel = ibase_query(
- "select iter from test6 where v_decimal = ?", $v_decimal)) ||
- !ibase_fetch_row($sel)) {
- echo "DECIMAL fail\n";
- }
- ibase_free_result($sel);
- if(!($sel = ibase_query(
- "select iter from test6 where v_integer = ?", $v_integer)) ||
- !ibase_fetch_row($sel)) {
- echo "INTEGER fail\n";
- }
- ibase_free_result($sel);
- if(!($sel = ibase_query(
- "select iter from test6 where v_numeric = ?", $v_numeric)) ||
- !ibase_fetch_row($sel)) {
- echo "NUMERIC fail\n";
- }
- ibase_free_result($sel);
- if(!($sel = ibase_query(
- "select iter from test6 where v_smallint = ?", $v_smallint)) ||
- !ibase_fetch_row($sel)) {
- echo "SMALLINT fail\n";
- }
- ibase_free_result($sel);
- if(!($sel = ibase_query(
- "select iter from test6 where v_varchar = ?", $v_varchar)) ||
- !ibase_fetch_row($sel)) {
- echo "VARCHAR fail\n";
- }
- ibase_free_result($sel);
-
- } /*for iter*/
-
- echo "prepare and exec insert\n";
-
- /* prepare table */
- ibase_query("delete from test6");
-
- /* prepare query */
- $query = ibase_prepare(
- "insert into test6 (v_integer) values (?)");
-
- for($i = 0; $i < 10; $i++) {
- ibase_execute($query, $i);
- }
-
- out_table("test6");
-
- ibase_free_query($query);
-
- echo "prepare and exec select\n";
-
- /* prepare query */
- $query = ibase_prepare("select * from test6
- where v_integer between ? and ?");
-
- $low_border = 2;
- $high_border = 6;
-
- $res = ibase_execute($query, $low_border, $high_border);
- out_result($res, "test6");
- ibase_free_result($res);
-
- $low_border = 0;
- $high_border = 4;
- $res = ibase_execute($query, $low_border, $high_border);
- out_result($res, "test6");
- ibase_free_result($res);
-
- $res = ibase_execute($query, "5", 7.5);
- out_result($res, "test6");
- ibase_free_result($res);
-
- ibase_free_query($query);
-
- /* test execute procedure */
- $query = ibase_prepare("execute procedure add1(?)");
- $res = array();
- for ($i = 0; $i < 10; $i++) {
- $res[] = ibase_execute($query,$i);
- }
- ibase_free_query($query);
- foreach ($res as $r) {
- out_result($r, "proc add1");
- ibase_free_result($r);
- }
-
- ibase_close();
- echo "end of test\n";
-?>
---EXPECT--
-insert
-select
-prepare and exec insert
---- test6 ---
- 0
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
----
-prepare and exec select
---- test6 ---
- 2
- 3
- 4
- 5
- 6
----
---- test6 ---
- 0
- 1
- 2
- 3
- 4
----
---- test6 ---
- 5
- 6
- 7
----
---- proc add1 ---
-1
----
---- proc add1 ---
-2
----
---- proc add1 ---
-3
----
---- proc add1 ---
-4
----
---- proc add1 ---
-5
----
---- proc add1 ---
-6
----
---- proc add1 ---
-7
----
---- proc add1 ---
-8
----
---- proc add1 ---
-9
----
---- proc add1 ---
-10
----
-end of test
-
diff --git a/ext/interbase/tests/007.phpt b/ext/interbase/tests/007.phpt
deleted file mode 100644
index 069b7eda26..0000000000
--- a/ext/interbase/tests/007.phpt
+++ /dev/null
@@ -1,183 +0,0 @@
---TEST--
-InterBase: array handling
---SKIPIF--
-<?php include("skipif.inc"); ?>
---FILE--
-<?php /* $Id$ */
-
- require("interbase.inc");
-
- ibase_connect($test_base);
-
- ibase_query(
- "create table test7 (
- iter integer,
- v_multi integer[10,10,10],
- v_char char(100)[10],
- v_date timestamp[10],
- v_decimal decimal(18,3)[10],
- v_double double precision[10],
- v_float float[10],
- v_integer integer[10],
- v_numeric numeric(9,2)[10],
- v_smallint smallint[10],
- v_varchar varchar(1000)[10]
- )");
- ibase_commit();
-
- /* if timefmt not supported, hide error */
- ini_set('ibase.timestampformat',"%m/%d/%Y %H:%M:%S");
-
- echo "insert\n";
-
- for ($i = 1; $i <= 10; ++$i) {
- for ($j = 1; $j <= 10; ++$j) {
- for ($k = 1; $k <= 10; ++$k) {
- $v_multi[$i][$j][$k] = $i * $j * $k;
- }
- }
- }
-
- for($iter = 0; $iter < 3; $iter++) {
-
- /* prepare data */
- $v_char = array();
- $v_date = array();
- $v_decimal = array();
- $v_double = array();
- $v_float = array();
- $v_integer = array();
- $v_numeric = array();
- $v_smallint = array();
- $v_varchar = array();
-
- for ($i = 1; $i <= 10; ++$i) {
- $v_char[$i] = rand_str(100);
- $v_date[$i] = rand_datetime();
- $v_decimal[$i] = rand_number(18,3);
- $v_double[$i] = rand_number(20);
- $v_float[$i] = rand_number(7);
- $v_integer[$i] = rand_number(9,0);
- $v_numeric[$i] = rand_number(9,2);
- $v_smallint[$i] = rand_number(5) % 32767;
- $v_varchar[$i] = rand_str(1000);
- }
-
- ibase_query("insert into test7
- (iter,v_multi,v_char,v_date,v_decimal,v_double,v_float,
- v_integer,v_numeric,v_smallint,v_varchar)
- values (?,?,?,?,?,?,?,?,?,?,?)",
- $iter, $v_multi, $v_char, $v_date, $v_decimal, $v_double, $v_float,
- $v_integer, $v_numeric, $v_smallint, $v_varchar);
- $sel = ibase_query("select * from test7 where iter = $iter");
-
- $row = ibase_fetch_object($sel,IBASE_FETCH_ARRAYS);
- for ($i = 1; $i <= 10; ++$i) {
-
- if(strncmp($row->V_CHAR[$i],$v_char[$i],strlen($v_char[$i])) != 0) {
- echo " CHAR[$i] fail:\n";
- echo " in: ".$v_char[$i]."\n";
- echo " out: ".$row->V_CHAR[$i]."\n";
- }
- if($row->V_DATE[$i] != $v_date[$i]) {
- echo " DATE[$i] fail\n";
- echo " in: ".$v_date[$i]."\n";
- echo " out: ".$row->V_DATE[$i]."\n";
- }
- if($row->V_DECIMAL[$i] != $v_decimal[$i]) {
- echo " DECIMAL[$i] fail\n";
- echo " in: ".$v_decimal[$i]."\n";
- echo " out: ".$row->V_DECIMAL[$i]."\n";
- }
- if(abs($row->V_DOUBLE[$i] - $v_double[$i]) > abs($v_double[$i] / 1E15)) {
- echo " DOUBLE[$i] fail\n";
- echo " in: ".$v_double[$i]."\n";
- echo " out: ".$row->V_DOUBLE[$i]."\n";
- }
- if(abs($row->V_FLOAT[$i] - $v_float[$i]) > abs($v_float[$i] / 1E7)) {
- echo " FLOAT[$i] fail\n";
- echo " in: ".$v_float[$i]."\n";
- echo " out: ".$row->V_FLOAT[$i]."\n";
- }
- if($row->V_INTEGER[$i] != $v_integer[$i]) {
- echo " INTEGER[$i] fail\n";
- echo " in: ".$v_integer[$i]."\n";
- echo " out: ".$row->V_INTEGER[$i]."\n";
- }
- if ($row->V_NUMERIC[$i] != $v_numeric[$i]) {
- echo " NUMERIC[$i] fail\n";
- echo " in: ".$v_numeric[$i]."\n";
- echo " out: ".$row->V_NUMERIC[$i]."\n";
- }
- if ($row->V_SMALLINT[$i] != $v_smallint[$i]) {
- echo " SMALLINT[$i] fail\n";
- echo " in: ".$v_smallint[$i]."\n";
- echo " out: ".$row->V_SMALLINT[$i]."\n";
- }
- if ($row->V_VARCHAR[$i] != $v_varchar[$i]) {
- echo " VARCHAR[$i] fail:\n";
- echo " in: ".$v_varchar[$i]."\n";
- echo " out: ".$row->V_VARCHAR[$i]."\n";
- }
- }
- ibase_free_result($sel);
- }/* for($iter) */
-
- echo "select\n";
-
- $sel = ibase_query("SELECT v_multi[5,5,5],v_multi[10,10,10] FROM test7 WHERE iter = 0");
- print_r(ibase_fetch_row($sel));
- ibase_free_result($sel);
-
- for($iter = 1; $iter <= 3; $iter++) {
-
- if(!($sel = ibase_query(
- "select iter from test7 where v_char[$iter] LIKE ?", $v_char[$iter]."%")) ||
- !ibase_fetch_row($sel)) {
- echo "CHAR fail\n";
- }
- ibase_free_result($sel);
-
- if(!($sel = ibase_query(
- "select iter from test7 where v_date[$iter] = ?", $v_date[$iter])) ||
- !ibase_fetch_row($sel)) {
- echo "DATE fail\n";
- }
- ibase_free_result($sel);
- if(!($sel = ibase_query(
- "select iter from test7 where v_decimal[$iter] = ?", $v_decimal[$iter])) ||
- !ibase_fetch_row($sel)) {
- echo "DECIMAL fail\n";
- }
- ibase_free_result($sel);
- if(!($sel = ibase_query(
- "select iter from test7 where v_integer[$iter] = ?", $v_integer[$iter])) ||
- !ibase_fetch_row($sel)) {
- echo "INTEGER fail\n";
- }
- ibase_free_result($sel);
- if(!($sel = ibase_query(
- "select iter from test7 where v_numeric[$iter] = ?", $v_numeric[$iter])) ||
- !ibase_fetch_row($sel)) {
- echo "NUMERIC fail\n";
- }
- ibase_free_result($sel);
- if(!($sel = ibase_query(
- "select iter from test7 where v_smallint[$iter] = ?", $v_smallint[$iter])) ||
- !ibase_fetch_row($sel)) {
- echo "SMALLINT fail\n";
- }
- ibase_free_result($sel);
- }
- ibase_close();
- echo "end of test\n";
-?>
---EXPECT--
-insert
-select
-Array
-(
- [0] => 125
- [1] => 1000
-)
-end of test
diff --git a/ext/interbase/tests/008.phpt b/ext/interbase/tests/008.phpt
deleted file mode 100755
index 8292fc38c5..0000000000
--- a/ext/interbase/tests/008.phpt
+++ /dev/null
@@ -1,48 +0,0 @@
---TEST--
-InterBase: event handling
---SKIPIF--
-<?php
-if (PHP_OS == "WINNT") echo "skip";
-include("skipif.inc");
-?>
---FILE--
-<?php /* $Id$ */
-
-require("interbase.inc");
-
-$count = 0;
-
-function event_callback($event)
-{
- global $count;
- if ($event == 'TEST1') echo "FAIL TEST1\n";
- return (++$count < 5); /* cancel event */
-}
-
-$link = ibase_connect($test_base);
-
-ibase_query("CREATE PROCEDURE pevent AS BEGIN POST_EVENT 'TEST1'; POST_EVENT 'TEST2'; END");
-ibase_commit();
-
-$e = ibase_set_event_handler('event_callback','TEST1');
-ibase_free_event_handler($e);
-
-ibase_set_event_handler('event_callback','TEST2');
-
-usleep(5E+5);
-
-for ($i = 0; $i < 8; ++$i) {
- ibase_query("EXECUTE PROCEDURE pevent");
- ibase_commit();
-
- usleep(3E+5);
-}
-
-usleep(5E+5);
-
-if (!$count || $count > 5) echo "FAIL ($count)\n";
-echo "end of test\n";
-
-?>
---EXPECT--
-end of test
diff --git a/ext/interbase/tests/interbase.inc b/ext/interbase/tests/interbase.inc
deleted file mode 100755
index 1401d9b821..0000000000
--- a/ext/interbase/tests/interbase.inc
+++ /dev/null
@@ -1,117 +0,0 @@
-<?php /* $Id$ */
-
-srand((double)microtime()*1000000);
-
-$user = 'SYSDBA';
-$password = 'masterkey';
-ini_set('ibase.default_user',$user);
-ini_set('ibase.default_password',$password);
-
-/* we need just the generated name, not the file itself */
-unlink($test_base = tempnam('/tmp',"php_ibase_test"));
-
-function init_db()
-{
- global $test_base, $user, $password;
-
- $test_db = ibase_query(IBASE_CREATE,
- sprintf("CREATE SCHEMA '%s' USER '%s' PASSWORD '%s' DEFAULT CHARACTER SET %s",$test_base,
- $user, $password, ($charset = ini_get('ibase.default_charset')) ? $charset : 'NONE'));
- $tr = ibase_trans($test_db);
- ibase_query($tr,"create table test1 (i integer, c varchar(100))");
- ibase_commit_ret($tr);
- ibase_query($tr,"insert into test1(i, c) values(1, 'test table not created with isql')");
- ibase_commit($tr);
- ibase_close($test_db);
-}
-
-function cleanup_db()
-{
- global $test_base;
-
- $r = ibase_connect($test_base);
- ibase_drop_db($r);
-}
-
-register_shutdown_function('cleanup_db');
-init_db();
-
-function out_table($table_name)
-{
- echo "--- $table_name ---\n";
- $res = ibase_query("select * from $table_name");
- while ($r = ibase_fetch_row($res)) {
- echo join("\t",$r)."\t\n";
- }
- ibase_free_result($res);
- echo "---\n";
-}
-
-function out_result($result, $table_name = "")
-{
- echo "--- $table_name ---\n";
- while ($r = ibase_fetch_row($result)) {
- echo join("\t",$r)."\t\n";
- }
- echo "---\n";
-}
-
-function out_result_trap_error($result, $table_name = "")
-{
- echo "--- $table_name ---\n";
- while ($r = @ibase_fetch_row($result)) {
- echo join("\t",$r)."\t\n";
- }
- echo "errmsg [" . ibase_errmsg() . "]\t\n";
- echo "---\n";
-}
-
-/* M/D/Y H:M:S */
-function rand_datetime()
-{
- return sprintf("%02d/%02d/%4d %02d:%02d:%02d",
- rand()%12+1, rand()%28+1, rand()%100+1910,
- rand()%24, rand()%60, rand()%60);
-}
-
-/* random binary string */
-function rand_binstr($max_len)
-{
- $len = rand() % $max_len;
- $s = "";
- while($len--) {
- $s .= sprintf("%c", rand() % 256);
- }
- return $s;
-}
-
-function rand_str($max_len)
-{
- $len = rand() % $max_len;
- $s = "";
- while ($len--) {
- $s .= sprintf("%c", rand() % 26 + 65);
- }
- return $s;
-}
-
-function rand_number($len , $prec = -1, $sign = 1)
-{
- if ($prec == -1) {
- $n = substr(rand() . rand(), 0, rand() % $len + 1);
- if (strlen($n) < $len) {
- $n .= "." . substr(rand(), 0, rand() % ($len - strlen($n)) + 1);
- }
- } else if ($prec == 0) {
- $n = substr(rand() . rand(), 0, rand() % $len + 1);
- } else {
- $n = substr(rand() . rand(), 0, rand() % ($len - $prec) + 1);
- $n .= "." . substr(rand(), 0, $prec);
- }
- if ($sign && (rand() % 3 == 0)) {
- $n = "-" .$n;
- }
- return $n;
-}
-
-?>
diff --git a/ext/interbase/tests/skipif.inc b/ext/interbase/tests/skipif.inc
deleted file mode 100755
index 337abe7cff..0000000000
--- a/ext/interbase/tests/skipif.inc
+++ /dev/null
@@ -1,5 +0,0 @@
-<?php /* $Id$ */
-
-if (!extension_loaded("interbase")) print "skip";
-
-?>
diff --git a/ext/ldap/CREDITS b/ext/ldap/CREDITS
deleted file mode 100644
index 5dc3d01974..0000000000
--- a/ext/ldap/CREDITS
+++ /dev/null
@@ -1,2 +0,0 @@
-LDAP
-Amitay Isaacs, Eric Warnke, Rasmus Lerdorf, Gerrit Thomson, Stig Venaas
diff --git a/ext/ldap/LDAP_Win32_HOWTO.txt b/ext/ldap/LDAP_Win32_HOWTO.txt
deleted file mode 100644
index bcee731e88..0000000000
--- a/ext/ldap/LDAP_Win32_HOWTO.txt
+++ /dev/null
@@ -1,33 +0,0 @@
-Rules for building LDAP
------------------------
-
-Note 1: During the entire build process, you can ignore warnings about
- inconsistent DLL linkage.
-
-
-- Open LDAP under php_build. Rename this directory to 'OpenLDAP'.
-- Rename OpenLDAP\include\portable.h.nt to OpenLDAP\include\portable.h
-- Rename OpenLDAP\include\ldapconfig.h.nt to OpenLDAP\include\ldapconfig.h
-- Launch Visual Studio with OpenLDAP\libraries\libldap\libldap.dsw
-- Enter Project->Settings.
- Select the C/C++ tab, and select 'Code Generation' in the Category box.
- For 'Win32 Debug', change the runtime library to 'Debug Multithreaded DLL'
- For 'Win32 Release', change the runtime library to 'Multithreaded DLL'
- Select the Preprocessor tab, select 'All Configurations'.
- Add '..\..\..\..\php5\regex' to the 'Additional include directories' list.
- Add 'HAVE_MKTEMP' to the 'Preprocessor definitions' list.
-- Compile (you can compile both Debug and Release versions).
-
-
-- Launch Visual Studio with OpenLDAP\libraries\liblber\liblber.dsw
-- Enter Project->Settings.
- Select the C/C++ tab, and select 'Code Generation' in the Category box.
- For 'Win32 Debug', change the runtime library to 'Debug Multithreaded DLL'
- For 'Win32 Release', change the runtime library to 'Multithreaded DLL'
- Select the Preprocessor tab, select 'All Configurations'.
- Add 'HAVE_MKTEMP' to the 'Preprocessor definitions' list.
-- Compile (you can compile both Debug and Release versions).
-
-
-Start Visual Studio, load php_modules.dsw, select the LDAP project, and build
-it.
diff --git a/ext/ldap/config.m4 b/ext/ldap/config.m4
deleted file mode 100644
index 2eb00971b8..0000000000
--- a/ext/ldap/config.m4
+++ /dev/null
@@ -1,191 +0,0 @@
-dnl
-dnl $Id$
-dnl
-
-AC_DEFUN(PHP_LDAP_CHECKS, [
- if test -f $1/include/ldap.h; then
- LDAP_DIR=$1
- LDAP_INCDIR=$1/include
- LDAP_LIBDIR=$1/lib
- elif test -f $1/include/umich-ldap/ldap.h; then
- LDAP_DIR=$1
- LDAP_INCDIR=$1/include/umich-ldap
- LDAP_LIBDIR=$1/lib
- elif test -f $1/ldap/public/ldap.h; then
- LDAP_DIR=$1
- LDAP_INCDIR=$1/ldap/public
- LDAP_LIBDIR=$1/lib
- fi
-])
-
-AC_DEFUN(PHP_LDAP_SASL_CHECKS, [
- if test "$1" = "yes"; then
- SEARCH_DIRS="/usr/local /usr"
- else
- SEARCH_DIRS=$1
- fi
-
- for i in $SEARCH_DIRS; do
- if test -f $i/include/sasl/sasl.h; then
- LDAP_SASL_DIR=$i
- AC_DEFINE(HAVE_LDAP_SASL_SASL_H,1,[ ])
- break
- elif test -f $i/include/sasl.h; then
- LDAP_SASL_DIR=$i
- AC_DEFINE(HAVE_LDAP_SASL_H,1,[ ])
- break
- fi
- done
-
- if test "$LDAP_SASL_DIR"; then
- LDAP_SASL_INCDIR=$LDAP_SASL_DIR/include
- LDAP_SASL_LIBDIR=$LDAP_SASL_DIR/lib
- else
- AC_MSG_ERROR([sasl.h not found!])
- fi
-
- if test "$PHP_LDAP_SASL" = "yes"; then
- SASL_LIB="-lsasl2"
- else
- SASL_LIB="-L$LDAP_SASL_LIBDIR -lsasl2"
- fi
-
- PHP_CHECK_LIBRARY(ldap, sasl_version,
- [
- PHP_ADD_INCLUDE($LDAP_SASL_INCDIR)
- PHP_ADD_LIBRARY_WITH_PATH(sasl2, $LDAP_SASL_LIBDIR, LDAP_SHARED_LIBADD)
- AC_DEFINE(HAVE_LDAP_SASL, 1, [LDAP SASL support])
- ], [
- AC_MSG_ERROR([LDAP SASL check failed. Please check config.log for more information.])
- ], [
- $LDAP_SHARED_LIBADD $SASL_LIB
- ])
-])
-
-PHP_ARG_WITH(ldap,for LDAP support,
-[ --with-ldap[=DIR] Include LDAP support.])
-
-PHP_ARG_WITH(ldap-sasl,for LDAP Cyrus SASL support,
-[ --with-ldap-sasl[=DIR] LDAP: Include Cyrus SASL support.], no, no)
-
-if test "$PHP_LDAP" != "no"; then
-
- PHP_NEW_EXTENSION(ldap, ldap.c, $ext_shared)
-
- if test "$PHP_LDAP" = "yes"; then
- for i in /usr/local /usr; do
- PHP_LDAP_CHECKS($i)
- done
- else
- PHP_LDAP_CHECKS($PHP_LDAP)
- fi
-
- if test -z "$LDAP_DIR"; then
- AC_MSG_ERROR(Cannot find ldap.h)
- fi
-
- dnl The Linux version of the SDK need -lpthread
- dnl I have tested Solaris, and it doesn't, but others may. Add
- dnl these here if necessary. -RL
- dnl Is this really necessary? -Troels Arvin
-
- if test `uname` = "Linux"; then
- LDAP_PTHREAD=pthread
- else
- LDAP_PTHREAD=
- fi
-
- if test -f $LDAP_LIBDIR/liblber.a -o -f $LDAP_LIBDIR/liblber.$SHLIB_SUFFIX_NAME; then
- PHP_ADD_LIBRARY_WITH_PATH(lber, $LDAP_LIBDIR, LDAP_SHARED_LIBADD)
- PHP_ADD_LIBRARY_WITH_PATH(ldap, $LDAP_LIBDIR, LDAP_SHARED_LIBADD)
-
- elif test -f $LDAP_LIBDIR/libldap.$SHLIB_SUFFIX_NAME.3 -o -f $LDAP_LIBDIR/libldap.3.dylib; then
- PHP_ADD_LIBRARY_WITH_PATH(ldap, $LDAP_LIBDIR, LDAP_SHARED_LIBADD)
-
- elif test -f $LDAP_LIBDIR/libssldap50.$SHLIB_SUFFIX_NAME; then
- if test -n "$LDAP_PTHREAD"; then
- PHP_ADD_LIBRARY($LDAP_PTHREAD)
- fi
- PHP_ADD_LIBRARY_WITH_PATH(nspr4, $LDAP_LIBDIR, LDAP_SHARED_LIBADD)
- PHP_ADD_LIBRARY_WITH_PATH(plc4, $LDAP_LIBDIR, LDAP_SHARED_LIBADD)
- PHP_ADD_LIBRARY_WITH_PATH(plds4, $LDAP_LIBDIR, LDAP_SHARED_LIBADD)
- PHP_ADD_LIBRARY_WITH_PATH(ssldap50, $LDAP_LIBDIR, LDAP_SHARED_LIBADD)
- PHP_ADD_LIBRARY_WITH_PATH(ldap50, $LDAP_LIBDIR, LDAP_SHARED_LIBADD)
- PHP_ADD_LIBRARY_WITH_PATH(prldap50, $LDAP_LIBDIR, LDAP_SHARED_LIBADD)
- PHP_ADD_LIBRARY_WITH_PATH(ssl3, $LDAP_LIBDIR, LDAP_SHARED_LIBADD)
- AC_DEFINE(HAVE_NSLDAP,1,[ ])
-
- elif test -f $LDAP_LIBDIR/libldapssl41.$SHLIB_SUFFIX_NAME; then
- if test -n "$LDAP_PTHREAD"; then
- PHP_ADD_LIBRARY($LDAP_PTHREAD)
- fi
- PHP_ADD_LIBRARY_WITH_PATH(nspr3, $LDAP_LIBDIR, LDAP_SHARED_LIBADD)
- PHP_ADD_LIBRARY_WITH_PATH(plc3, $LDAP_LIBDIR, LDAP_SHARED_LIBADD)
- PHP_ADD_LIBRARY_WITH_PATH(plds3, $LDAP_LIBDIR, LDAP_SHARED_LIBADD)
- PHP_ADD_LIBRARY_WITH_PATH(ldapssl41, $LDAP_LIBDIR, LDAP_SHARED_LIBADD)
- AC_DEFINE(HAVE_NSLDAP,1,[ ])
-
- elif test -f $LDAP_LIBDIR/libldapssl30.$SHLIB_SUFFIX_NAME; then
- if test -n "$LDAP_PTHREAD"; then
- PHP_ADD_LIBRARY($LDAP_PTHREAD)
- fi
- PHP_ADD_LIBRARY_WITH_PATH(ldapssl30, $LDAP_LIBDIR, LDAP_SHARED_LIBADD)
- AC_DEFINE(HAVE_NSLDAP,1,[ ])
-
- elif test -f $LDAP_LIBDIR/libldap30.$SHLIB_SUFFIX_NAME; then
- if test -n "$LDAP_PTHREAD"; then
- PHP_ADD_LIBRARY($LDAP_PTHREAD)
- fi
- PHP_ADD_LIBRARY_WITH_PATH(ldap30, $LDAP_LIBDIR, LDAP_SHARED_LIBADD)
- AC_DEFINE(HAVE_NSLDAP,1,[ ])
-
- elif test -f $LDAP_LIBDIR/libumich_ldap.$SHLIB_SUFFIX_NAME; then
- PHP_ADD_LIBRARY_WITH_PATH(umich_lber, $LDAP_LIBDIR, LDAP_SHARED_LIBADD)
- PHP_ADD_LIBRARY_WITH_PATH(umich_ldap, $LDAP_LIBDIR, LDAP_SHARED_LIBADD)
-
- elif test -f $LDAP_LIBDIR/libclntsh.$SHLIB_SUFFIX_NAME; then
- PHP_ADD_LIBRARY_WITH_PATH(clntsh, $LDAP_LIBDIR, LDAP_SHARED_LIBADD)
- AC_DEFINE(HAVE_ORALDAP,1,[ ])
-
- else
- AC_MSG_ERROR(Cannot find ldap libraries in $LDAP_LIBDIR.)
- fi
-
- PHP_ADD_INCLUDE($LDAP_INCDIR)
- PHP_SUBST(LDAP_SHARED_LIBADD)
- AC_DEFINE(HAVE_LDAP,1,[ ])
-
- dnl Check for 3 arg ldap_set_rebind_proc
- _SAVE_CPPFLAGS=$CPPFLAGS
- _SAVE_LDFLAGS=$LDFLAGS
- CPPFLAGS="$CPPFLAGS -I$LDAP_INCDIR"
- AC_CACHE_CHECK([for 3 arg ldap_set_rebind_proc], ac_cv_3arg_setrebindproc,
- [AC_TRY_COMPILE([#include <ldap.h>], [ldap_set_rebind_proc(0,0,0)],
- ac_cv_3arg_setrebindproc=yes, ac_cv_3arg_setrebindproc=no)])
- if test "$ac_cv_3arg_setrebindproc" = yes; then
- AC_DEFINE(HAVE_3ARG_SETREBINDPROC,1,[Whether 3 arg set_rebind_proc()])
- fi
- CPPFLAGS=$_SAVE_CPPFLAGS
-
- dnl Solaris 2.8 claims to be 2004 API, but doesn't have
- dnl ldap_parse_reference() nor ldap_start_tls_s()
- AC_CHECK_FUNCS([ldap_parse_reference ldap_start_tls_s])
- LDFLAGS=$_SAVE_LDFLAGS
-
- dnl
- dnl SASL check
- dnl
- if test "$PHP_LDAP_SASL" != "no"; then
- PHP_LDAP_SASL_CHECKS([$PHP_LDAP_SASL])
- fi
-
- dnl
- dnl Sanity check
- dnl
- _SAVE_LDFLAGS=$LDFLAGS
- LDFLAGS="$LDFLAGS $LDAP_SHARED_LIBADD"
- AC_CHECK_FUNC(ldap_bind_s, [], [
- AC_MSG_ERROR([LDAP build check failed. Please check config.log for more information.])
- ])
- LDFLAGS=$_SAVE_LDFLAGS
-fi
diff --git a/ext/ldap/config.w32 b/ext/ldap/config.w32
deleted file mode 100644
index 4cbfbcae62..0000000000
--- a/ext/ldap/config.w32
+++ /dev/null
@@ -1,22 +0,0 @@
-// $Id$
-// vim:ft=javascript
-
-ARG_WITH("ldap", "LDAP support", "no");
-
-if (PHP_LDAP != "no") {
-
- if (CHECK_HEADER_ADD_INCLUDE("ldap.h", "CFLAGS_LDAP", PHP_PHP_BUILD + "\\openldap\\include;" + PHP_LDAP) &&
- CHECK_LIB("ssleay32.lib", "ldap", PHP_LDAP) &&
- CHECK_LIB("libeay32.lib", "ldap", PHP_LDAP) &&
- CHECK_LIB("oldap32.lib", "ldap", PHP_LDAP) &&
- CHECK_LIB("olber32.lib", "ldap", PHP_LDAP)) {
- EXTENSION('ldap', 'ldap.c');
-
- AC_DEFINE('HAVE_LDAP_START_TLS_S', 1);
- AC_DEFINE('HAVE_LDAP', 1);
-
- } else {
- WARNING("ldap not enabled; libraries and headers not found");
- }
-}
-
diff --git a/ext/ldap/ldap.c b/ext/ldap/ldap.c
deleted file mode 100644
index 119e942d5a..0000000000
--- a/ext/ldap/ldap.c
+++ /dev/null
@@ -1,2190 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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. |
- +----------------------------------------------------------------------+
- | Authors: Amitay Isaacs <amitay@w-o-i.com> |
- | Eric Warnke <ericw@albany.edu> |
- | Rasmus Lerdorf <rasmus@php.net> |
- | Gerrit Thomson <334647@swin.edu.au> |
- | Jani Taskinen <sniper@iki.fi> |
- | Stig Venaas <venaas@uninett.no> |
- | PHP 4.0 updates: Zeev Suraski <zeev@zend.com> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-#define IS_EXT_MODULE
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-/* Additional headers for NetWare */
-#if defined(NETWARE) && (NEW_LIBC)
-#include <sys/select.h>
-#include <sys/timeval.h>
-#endif
-
-#include "php.h"
-#include "php_ini.h"
-
-#include <stddef.h>
-
-#include "ext/standard/dl.h"
-#include "php_ldap.h"
-
-#ifdef PHP_WIN32
-#include <string.h>
-#if HAVE_NSLDAP
-#include <winsock2.h>
-#endif
-#define strdup _strdup
-#undef WINDOWS
-#undef strcasecmp
-#undef strncasecmp
-#define WINSOCK 1
-#define __STDC__ 1
-#endif
-
-#include "ext/standard/php_string.h"
-#include "ext/standard/info.h"
-
-#ifdef HAVE_LDAP_SASL_H
-#include <sasl.h>
-#elif defined(HAVE_LDAP_SASL_SASL_H)
-#include <sasl/sasl.h>
-#endif
-
-typedef struct {
- LDAP *link;
-#if defined(LDAP_API_FEATURE_X_OPENLDAP) && defined(HAVE_3ARG_SETREBINDPROC)
- zval *rebindproc;
-#endif
-} ldap_linkdata;
-
-typedef struct {
- LDAPMessage *data;
- int id;
-} ldap_resultentry;
-
-ZEND_DECLARE_MODULE_GLOBALS(ldap)
-
-static
- ZEND_BEGIN_ARG_INFO(arg3to6of6_force_ref, 0)
- ZEND_ARG_PASS_INFO(0)
- ZEND_ARG_PASS_INFO(0)
- ZEND_ARG_PASS_INFO(1)
- ZEND_ARG_PASS_INFO(1)
- ZEND_ARG_PASS_INFO(1)
- ZEND_ARG_PASS_INFO(1)
- ZEND_END_ARG_INFO();
-
-static int le_link, le_result, le_result_entry, le_ber_entry;
-
-/*
- This is just a small subset of the functionality provided by the LDAP library. All the
- operations are synchronous. Referrals are not handled automatically.
-*/
-/* {{{ ldap_functions[]
- */
-function_entry ldap_functions[] = {
- PHP_FE(ldap_connect, NULL)
- PHP_FALIAS(ldap_close, ldap_unbind, NULL)
- PHP_FE(ldap_bind, NULL)
-#ifdef HAVE_LDAP_SASL
- PHP_FE(ldap_sasl_bind, NULL)
-#endif
- PHP_FE(ldap_unbind, NULL)
- PHP_FE(ldap_read, NULL)
- PHP_FE(ldap_list, NULL)
- PHP_FE(ldap_search, NULL)
- PHP_FE(ldap_free_result, NULL)
- PHP_FE(ldap_count_entries, NULL)
- PHP_FE(ldap_first_entry, NULL)
- PHP_FE(ldap_next_entry, NULL)
- PHP_FE(ldap_get_entries, NULL)
- PHP_FE(ldap_first_attribute, third_arg_force_ref)
- PHP_FE(ldap_next_attribute, third_arg_force_ref)
- PHP_FE(ldap_get_attributes, NULL)
- PHP_FE(ldap_get_values, NULL)
- PHP_FE(ldap_get_values_len, NULL)
- PHP_FE(ldap_get_dn, NULL)
- PHP_FE(ldap_explode_dn, NULL)
- PHP_FE(ldap_dn2ufn, NULL)
- PHP_FE(ldap_add, NULL)
- PHP_FE(ldap_delete, NULL)
- PHP_FALIAS(ldap_modify, ldap_mod_replace, NULL)
-
-/* additional functions for attribute based modifications, Gerrit Thomson */
- PHP_FE(ldap_mod_add, NULL)
- PHP_FE(ldap_mod_replace, NULL)
- PHP_FE(ldap_mod_del, NULL)
-/* end gjt mod */
-
- PHP_FE(ldap_errno, NULL)
- PHP_FE(ldap_err2str, NULL)
- PHP_FE(ldap_error, NULL)
- PHP_FE(ldap_compare, NULL)
- PHP_FE(ldap_sort, NULL)
-
-#if (LDAP_API_VERSION > 2000) || HAVE_NSLDAP
- PHP_FE(ldap_get_option, third_arg_force_ref)
- PHP_FE(ldap_set_option, NULL)
- PHP_FE(ldap_parse_result, arg3to6of6_force_ref)
- PHP_FE(ldap_first_reference, NULL)
- PHP_FE(ldap_next_reference, NULL)
-#ifdef HAVE_LDAP_PARSE_REFERENCE
- PHP_FE(ldap_parse_reference, third_arg_force_ref)
-#endif
- PHP_FE(ldap_rename, NULL)
-#ifdef HAVE_LDAP_START_TLS_S
- PHP_FE(ldap_start_tls, NULL)
-#endif
-#endif
-
-#if defined(LDAP_API_FEATURE_X_OPENLDAP) && defined(HAVE_3ARG_SETREBINDPROC)
- PHP_FE(ldap_set_rebind_proc, NULL)
-#endif
-
-#ifdef STR_TRANSLATION
- PHP_FE(ldap_t61_to_8859, NULL)
- PHP_FE(ldap_8859_to_t61, NULL)
-#endif
-
- {NULL, NULL, NULL}
-};
-/* }}} */
-
-zend_module_entry ldap_module_entry = {
- STANDARD_MODULE_HEADER,
- "ldap",
- ldap_functions,
- PHP_MINIT(ldap),
- PHP_MSHUTDOWN(ldap),
- NULL,
- NULL,
- PHP_MINFO(ldap),
- NO_VERSION_YET,
- STANDARD_MODULE_PROPERTIES
-};
-
-#ifdef COMPILE_DL_LDAP
-ZEND_GET_MODULE(ldap)
-# ifdef PHP_WIN32
-# include "zend_arg_defs.c"
-# endif
-#endif
-
-static void _close_ldap_link(zend_rsrc_list_entry *rsrc TSRMLS_DC)
-{
- ldap_linkdata *ld = (ldap_linkdata *)rsrc->ptr;
-
- ldap_unbind_s(ld->link);
-#if defined(LDAP_API_FEATURE_X_OPENLDAP) && defined(HAVE_3ARG_SETREBINDPROC)
- if (ld->rebindproc != NULL) {
- zval_dtor(ld->rebindproc);
- FREE_ZVAL(ld->rebindproc);
- }
-#endif
- efree(ld);
- LDAPG(num_links)--;
-}
-
-static void _free_ldap_result(zend_rsrc_list_entry *rsrc TSRMLS_DC)
-{
- LDAPMessage *result = (LDAPMessage *)rsrc->ptr;
- ldap_msgfree(result);
-}
-
-static void _free_ldap_result_entry(zend_rsrc_list_entry *rsrc TSRMLS_DC)
-{
- ldap_resultentry *entry = (ldap_resultentry *)rsrc->ptr;
- zend_list_delete(entry->id);
- efree(entry);
-}
-
-/* {{{ PHP_INI_BEGIN
- */
-PHP_INI_BEGIN()
- STD_PHP_INI_ENTRY_EX("ldap.max_links", "-1", PHP_INI_SYSTEM, OnUpdateLong, max_links, zend_ldap_globals, ldap_globals, display_link_numbers)
-PHP_INI_END()
-/* }}} */
-
-/* {{{ php_ldap_init_globals
- */
-static void php_ldap_init_globals(zend_ldap_globals *ldap_globals)
-{
- ldap_globals->num_links = 0;
-}
-/* }}} */
-
-/* {{{ PHP_MINIT_FUNCTION
- */
-PHP_MINIT_FUNCTION(ldap)
-{
- ZEND_INIT_MODULE_GLOBALS(ldap, php_ldap_init_globals, NULL);
-
- REGISTER_INI_ENTRIES();
-
- /* Constants to be used with deref-parameter in php_ldap_do_search() */
- REGISTER_LONG_CONSTANT("LDAP_DEREF_NEVER", LDAP_DEREF_NEVER, CONST_PERSISTENT | CONST_CS);
- REGISTER_LONG_CONSTANT("LDAP_DEREF_SEARCHING", LDAP_DEREF_SEARCHING, CONST_PERSISTENT | CONST_CS);
- REGISTER_LONG_CONSTANT("LDAP_DEREF_FINDING", LDAP_DEREF_FINDING, CONST_PERSISTENT | CONST_CS);
- REGISTER_LONG_CONSTANT("LDAP_DEREF_ALWAYS", LDAP_DEREF_ALWAYS, CONST_PERSISTENT | CONST_CS);
-
-#if (LDAP_API_VERSION > 2000) || HAVE_NSLDAP
- /* LDAP options */
- REGISTER_LONG_CONSTANT("LDAP_OPT_DEREF", LDAP_OPT_DEREF, CONST_PERSISTENT | CONST_CS);
- REGISTER_LONG_CONSTANT("LDAP_OPT_SIZELIMIT", LDAP_OPT_SIZELIMIT, CONST_PERSISTENT | CONST_CS);
- REGISTER_LONG_CONSTANT("LDAP_OPT_TIMELIMIT", LDAP_OPT_TIMELIMIT, CONST_PERSISTENT | CONST_CS);
- REGISTER_LONG_CONSTANT("LDAP_OPT_PROTOCOL_VERSION", LDAP_OPT_PROTOCOL_VERSION, CONST_PERSISTENT | CONST_CS);
- REGISTER_LONG_CONSTANT("LDAP_OPT_ERROR_NUMBER", LDAP_OPT_ERROR_NUMBER, CONST_PERSISTENT | CONST_CS);
- REGISTER_LONG_CONSTANT("LDAP_OPT_REFERRALS", LDAP_OPT_REFERRALS, CONST_PERSISTENT | CONST_CS);
-#ifdef LDAP_OPT_RESTART
- REGISTER_LONG_CONSTANT("LDAP_OPT_RESTART", LDAP_OPT_RESTART, CONST_PERSISTENT | CONST_CS);
-#endif
- REGISTER_LONG_CONSTANT("LDAP_OPT_HOST_NAME", LDAP_OPT_HOST_NAME, CONST_PERSISTENT | CONST_CS);
- REGISTER_LONG_CONSTANT("LDAP_OPT_ERROR_STRING", LDAP_OPT_ERROR_STRING, CONST_PERSISTENT | CONST_CS);
-#ifdef LDAP_OPT_MATCHED_DN
- REGISTER_LONG_CONSTANT("LDAP_OPT_MATCHED_DN", LDAP_OPT_MATCHED_DN, CONST_PERSISTENT | CONST_CS);
-#endif
- REGISTER_LONG_CONSTANT("LDAP_OPT_SERVER_CONTROLS", LDAP_OPT_SERVER_CONTROLS, CONST_PERSISTENT | CONST_CS);
- REGISTER_LONG_CONSTANT("LDAP_OPT_CLIENT_CONTROLS", LDAP_OPT_CLIENT_CONTROLS, CONST_PERSISTENT | CONST_CS);
-#endif
-#ifdef LDAP_OPT_DEBUG_LEVEL
- REGISTER_LONG_CONSTANT("LDAP_OPT_DEBUG_LEVEL", LDAP_OPT_DEBUG_LEVEL, CONST_PERSISTENT | CONST_CS);
-#endif
-
-#ifdef ORALDAP
- REGISTER_LONG_CONSTANT("GSLC_SSL_NO_AUTH", GSLC_SSL_NO_AUTH, CONST_PERSISTENT | CONST_CS);
- REGISTER_LONG_CONSTANT("GSLC_SSL_ONEWAY_AUTH", GSLC_SSL_ONEWAY_AUTH, CONST_PERSISTENT | CONST_CS);
- REGISTER_LONG_CONSTANT("GSLC_SSL_TWOWAY_AUTH", GSLC_SSL_TWOWAY_AUTH, CONST_PERSISTENT | CONST_CS);
-#endif
-
- le_result = zend_register_list_destructors_ex(_free_ldap_result, NULL, "ldap result", module_number);
- le_link = zend_register_list_destructors_ex(_close_ldap_link, NULL, "ldap link", module_number);
- le_result_entry = zend_register_list_destructors_ex(_free_ldap_result_entry, NULL, "ldap result entry", module_number);
- le_ber_entry = zend_register_list_destructors_ex(NULL, NULL, "ldap ber entry", module_number);
-
- Z_TYPE(ldap_module_entry) = type;
-
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ PHP_MSHUTDOWN_FUNCTION
- */
-PHP_MSHUTDOWN_FUNCTION(ldap)
-{
- UNREGISTER_INI_ENTRIES();
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ PHP_MINFO_FUNCTION
- */
-PHP_MINFO_FUNCTION(ldap)
-{
- char tmp[32];
-#if HAVE_NSLDAP
- LDAPVersion ver;
- double SDKVersion;
-#endif
-
- php_info_print_table_start();
- php_info_print_table_row(2, "LDAP Support", "enabled");
- php_info_print_table_row(2, "RCS Version", "$Id$");
-
- if (LDAPG(max_links) == -1) {
- snprintf(tmp, 31, "%ld/unlimited", LDAPG(num_links));
- } else {
- snprintf(tmp, 31, "%ld/%ld", LDAPG(num_links), LDAPG(max_links));
- }
- php_info_print_table_row(2, "Total Links", tmp);
-
-#ifdef LDAP_API_VERSION
- snprintf(tmp, 31, "%d", LDAP_API_VERSION);
- php_info_print_table_row(2, "API Version", tmp);
-#endif
-
-#ifdef LDAP_VENDOR_NAME
- php_info_print_table_row(2, "Vendor Name", LDAP_VENDOR_NAME);
-#endif
-
-#ifdef LDAP_VENDOR_VERSION
- snprintf(tmp, 31, "%d", LDAP_VENDOR_VERSION);
- php_info_print_table_row(2, "Vendor Version", tmp);
-#endif
-
-#if HAVE_NSLDAP
- SDKVersion = ldap_version(&ver);
- snprintf(tmp, 31, "%f", SDKVersion/100.0);
- php_info_print_table_row(2, "SDK Version", tmp);
-
- snprintf(tmp, 31, "%f", ver.protocol_version/100.0);
- php_info_print_table_row(2, "Highest LDAP Protocol Supported", tmp);
-
- snprintf(tmp, 31, "%f", ver.SSL_version/100.0);
- php_info_print_table_row(2, "SSL Level Supported", tmp);
-
- if (ver.security_level != LDAP_SECURITY_NONE) {
- snprintf(tmp, 31, "%d", ver.security_level);
- } else {
- strcpy(tmp, "SSL not enabled");
- }
- php_info_print_table_row(2, "Level of Encryption", tmp);
-#endif
-
-#ifdef HAVE_LDAP_SASL
- php_info_print_table_row(2, "SASL Support", "Enabled");
-#endif
-
- php_info_print_table_end();
-}
-/* }}} */
-
-/* {{{ proto resource ldap_connect([string host [, int port]])
- Connect to an LDAP server */
-PHP_FUNCTION(ldap_connect)
-{
- char *host = NULL;
- int hostlen;
- long port = 389; /* Default port */
-#ifdef HAVE_ORALDAP
- char *wallet, *walletpasswd;
- int walletlen, walletpasswdlen;
- long authmode;
- int ssl=0;
-#endif
- ldap_linkdata *ld;
- LDAP *ldap;
-
-#ifdef HAVE_ORALDAP
- if (ZEND_NUM_ARGS() == 3 || ZEND_NUM_ARGS() == 4) {
- WRONG_PARAM_COUNT;
- }
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|slssl", &host, &hostlen, &port, &wallet, &walletlen, &walletpasswd, &walletpasswdlen, &authmode) == FAILURE) {
- RETURN_FALSE;
- }
-
- if (ZEND_NUM_ARGS() == 5) {
- ssl = 1;
- }
-#else
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|sl", &host, &hostlen, &port) == FAILURE) {
- RETURN_FALSE;
- }
-#endif
-
- if (LDAPG(max_links) != -1 && LDAPG(num_links) >= LDAPG(max_links)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Too many open links (%ld)", LDAPG(num_links));
- RETURN_FALSE;
- }
-
- ld = ecalloc(1, sizeof(ldap_linkdata));
-
-#ifdef LDAP_API_FEATURE_X_OPENLDAP
- if (host != NULL && strchr(host, '/')) {
- int rc;
-
- rc = ldap_initialize(&ldap, host);
- if (rc != LDAP_SUCCESS) {
- efree(ld);
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Could not create session handle: %s", ldap_err2string(rc));
- RETURN_FALSE;
- }
- } else {
- ldap = ldap_init(host, port);
- }
-#else
- ldap = ldap_open(host, port);
-#endif
-
- if (ldap == NULL) {
- efree(ld);
- RETURN_FALSE;
- } else {
-#ifdef HAVE_ORALDAP
- if (ssl) {
- if (ldap_init_SSL(&ldap->ld_sb, wallet, walletpasswd, authmode)) {
- efree(ld);
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "SSL init failed");
- RETURN_FALSE;
- }
- }
-#endif
- LDAPG(num_links)++;
- ld->link = ldap;
- ZEND_REGISTER_RESOURCE(return_value, ld, le_link);
- }
-
-}
-/* }}} */
-
-/* {{{ _get_lderrno
- */
-static int _get_lderrno(LDAP *ldap)
-{
-#if !HAVE_NSLDAP
-#if LDAP_API_VERSION > 2000
- int lderr;
-
- /* New versions of OpenLDAP do it this way */
- ldap_get_option(ldap, LDAP_OPT_ERROR_NUMBER, &lderr);
- return lderr;
-#else
- return ldap->ld_errno;
-#endif
-#else
- return ldap_get_lderrno(ldap, NULL, NULL);
-#endif
-}
-/* }}} */
-
-/* {{{ proto bool ldap_bind(resource link [, string dn, string password])
- Bind to LDAP directory */
-PHP_FUNCTION(ldap_bind)
-{
- zval *link;
- char *ldap_bind_dn = NULL, *ldap_bind_pw = NULL;
- int ldap_bind_dnlen, ldap_bind_pwlen;
- ldap_linkdata *ld;
- int rc;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r|ss", &link, &ldap_bind_dn, &ldap_bind_dnlen, &ldap_bind_pw, &ldap_bind_pwlen) == FAILURE) {
- RETURN_FALSE;
- }
-
- ZEND_FETCH_RESOURCE(ld, ldap_linkdata *, &link, -1, "ldap link", le_link);
-
- if ((rc = ldap_bind_s(ld->link, ldap_bind_dn, ldap_bind_pw, LDAP_AUTH_SIMPLE)) != LDAP_SUCCESS) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to bind to server: %s", ldap_err2string(rc));
- RETURN_FALSE;
- } else {
- RETURN_TRUE;
- }
-}
-/* }}} */
-
-#ifdef HAVE_LDAP_SASL
-/* {{{ _php_sasl_interact
- Interact function for SASL */
-static int _php_sasl_interact(LDAP *ld, unsigned flags, void *defaults, void *in)
-{
- sasl_interact_t *interact = in;
-
- while (interact->id != SASL_CB_LIST_END) {
- const char *dflt = interact->defresult;
-
- interact->result = strdup((dflt && *dflt) ? dflt : "");
- interact->len = interact->result ? strlen(interact->result) : 0;
- interact++;
- };
- return LDAP_SUCCESS;
-}
-
-/* {{{ proto bool ldap_sasl_bind(resource link)
- Bind to LDAP directory using SASL */
-PHP_FUNCTION(ldap_sasl_bind)
-{
- zval *link;
- ldap_linkdata *ld;
- int rc;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &link) == FAILURE) {
- RETURN_FALSE;
- }
-
- ZEND_FETCH_RESOURCE(ld, ldap_linkdata *, &link, -1, "ldap link", le_link);
-
- if ((rc = ldap_sasl_interactive_bind_s(ld->link, NULL, NULL, NULL, NULL, LDAP_SASL_QUIET, _php_sasl_interact, NULL)) != LDAP_SUCCESS) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to bind to server: %s", ldap_err2string(rc));
- RETURN_FALSE;
- } else {
- RETURN_TRUE;
- }
-}
-/* }}} */
-#endif /* HAVE_LDAP_SASL */
-
-/* {{{ proto bool ldap_unbind(resource link)
- Unbind from LDAP directory */
-PHP_FUNCTION(ldap_unbind)
-{
- zval *link;
- ldap_linkdata *ld;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &link) == FAILURE) {
- RETURN_FALSE;
- }
-
- ZEND_FETCH_RESOURCE(ld, ldap_linkdata *, &link, -1, "ldap link", le_link);
-
- zend_list_delete(Z_LVAL_P(link));
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ php_set_opts
- */
-static void php_set_opts(LDAP *ldap, int sizelimit, int timelimit, int deref)
-{
- /* sizelimit */
- if (sizelimit > -1) {
-#if (LDAP_API_VERSION >= 2004) || HAVE_NSLDAP
- ldap_set_option(ldap, LDAP_OPT_SIZELIMIT, &sizelimit);
-#else
- ldap->ld_sizelimit = sizelimit;
-#endif
- }
-
- /* timelimit */
- if (timelimit > -1) {
-#if (LDAP_API_VERSION >= 2004) || HAVE_NSLDAP
- ldap_set_option(ldap, LDAP_OPT_TIMELIMIT, &timelimit);
-#else
- ldap->ld_timelimit = timelimit;
-#endif
- }
-
- /* deref */
- if (deref > -1) {
-#if (LDAP_API_VERSION >= 2004) || HAVE_NSLDAP
- ldap_set_option(ldap, LDAP_OPT_DEREF, &deref);
-#else
- ldap->ld_deref = deref;
-#endif
- }
-}
-/* }}} */
-
-/* {{{ php_ldap_do_search
- */
-static void php_ldap_do_search(INTERNAL_FUNCTION_PARAMETERS, int scope)
-{
- zval **link, **base_dn, **filter, **attrs, **attr, **attrsonly, **sizelimit, **timelimit, **deref;
- char *ldap_base_dn = NULL;
- char *ldap_filter = NULL;
- char **ldap_attrs = NULL;
- ldap_linkdata *ld;
- LDAPMessage *ldap_res;
- int ldap_attrsonly = 0;
- int ldap_sizelimit = -1;
- int ldap_timelimit = -1;
- int ldap_deref = -1;
- int num_attribs = 0;
- int i, errno;
- int myargcount = ZEND_NUM_ARGS();
-
- if (myargcount < 3 || myargcount > 8 || zend_get_parameters_ex(myargcount, &link, &base_dn, &filter, &attrs, &attrsonly, &sizelimit, &timelimit, &deref) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- /* Reverse -> fall through */
- switch (myargcount) {
- case 8 :
- convert_to_long_ex(deref);
- ldap_deref = Z_LVAL_PP(deref);
-
- case 7 :
- convert_to_long_ex(timelimit);
- ldap_timelimit = Z_LVAL_PP(timelimit);
-
- case 6 :
- convert_to_long_ex(sizelimit);
- ldap_sizelimit = Z_LVAL_PP(sizelimit);
-
- case 5 :
- convert_to_long_ex(attrsonly);
- ldap_attrsonly = Z_LVAL_PP(attrsonly);
-
- case 4 :
- if (Z_TYPE_PP(attrs) != IS_ARRAY) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Expected Array as last element");
- RETURN_FALSE;
- }
-
- num_attribs = zend_hash_num_elements(Z_ARRVAL_PP(attrs));
- ldap_attrs = safe_emalloc((num_attribs+1), sizeof(char *), 0);
-
- for (i = 0; i<num_attribs; i++) {
- if (zend_hash_index_find(Z_ARRVAL_PP(attrs), i, (void **) &attr) == FAILURE) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Array initialization wrong");
- efree(ldap_attrs);
- RETURN_FALSE;
- }
-
- SEPARATE_ZVAL(attr);
- convert_to_string_ex(attr);
- ldap_attrs[i] = Z_STRVAL_PP(attr);
- }
- ldap_attrs[num_attribs] = NULL;
-
- case 3 :
- /* parallel search? */
- if (Z_TYPE_PP(link) != IS_ARRAY) {
- convert_to_string_ex(filter);
- ldap_filter = Z_STRVAL_PP(filter);
- convert_to_string_ex(base_dn);
- ldap_base_dn = Z_STRVAL_PP(base_dn);
- }
- break;
-
- default:
- WRONG_PARAM_COUNT;
- break;
- }
-
- /* parallel search? */
- if (Z_TYPE_PP(link) == IS_ARRAY) {
- int i, nlinks, nbases, nfilters, *rcs;
- ldap_linkdata **lds;
- zval **entry, *resource;
-
- nlinks = zend_hash_num_elements(Z_ARRVAL_PP(link));
- if (nlinks == 0) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "No links in link array");
- if (ldap_attrs != NULL) {
- efree(ldap_attrs);
- }
- RETURN_FALSE;
- }
-
- if (Z_TYPE_PP(base_dn) == IS_ARRAY) {
- nbases = zend_hash_num_elements(Z_ARRVAL_PP(base_dn));
- if (nbases != nlinks) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Base must either be a string, or an array with the same number of elements as the links array");
- if (ldap_attrs != NULL) {
- efree(ldap_attrs);
- }
- RETURN_FALSE;
- }
- zend_hash_internal_pointer_reset(Z_ARRVAL_PP(base_dn));
- } else {
- nbases = 0; /* this means string, not array */
- convert_to_string_ex(base_dn);
- ldap_base_dn = Z_STRLEN_PP(base_dn) < 1 ? NULL : Z_STRVAL_PP(base_dn);
- }
-
- if (Z_TYPE_PP(filter) == IS_ARRAY) {
- nfilters = zend_hash_num_elements(Z_ARRVAL_PP(filter));
- if (nfilters != nlinks) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Filter must either be a string, or an array with the same number of elements as the links array");
- if (ldap_attrs != NULL) {
- efree(ldap_attrs);
- }
- RETURN_FALSE;
- }
- zend_hash_internal_pointer_reset(Z_ARRVAL_PP(filter));
- } else {
- nfilters = 0; /* this means string, not array */
- convert_to_string_ex(filter);
- ldap_filter = Z_STRVAL_PP(filter);
- }
-
- lds = safe_emalloc(nlinks, sizeof(ldap_linkdata), 0);
- rcs = safe_emalloc(nlinks, sizeof(*rcs), 0);
-
- zend_hash_internal_pointer_reset(Z_ARRVAL_PP(link));
- for (i=0; i<nlinks; i++) {
- zend_hash_get_current_data(Z_ARRVAL_PP(link), (void **)&entry);
-
- ld = (ldap_linkdata *) zend_fetch_resource(entry TSRMLS_CC, -1, "ldap link", NULL, 1, le_link);
- if (ld == NULL) {
- efree(lds);
- efree(rcs);
- if (ldap_attrs != NULL) {
- efree(ldap_attrs);
- }
- RETURN_FALSE;
- }
- if (nbases != 0) { /* base_dn an array? */
- zend_hash_get_current_data(Z_ARRVAL_PP(base_dn), (void **)&entry);
- zend_hash_move_forward(Z_ARRVAL_PP(base_dn));
- convert_to_string_ex(entry);
- ldap_base_dn = Z_STRLEN_PP(entry) < 1 ? NULL : Z_STRVAL_PP(entry);
- }
- if (nfilters != 0) { /* filter an array? */
- zend_hash_get_current_data(Z_ARRVAL_PP(filter), (void **)&entry);
- zend_hash_move_forward(Z_ARRVAL_PP(filter));
- convert_to_string_ex(entry);
- ldap_filter = Z_STRVAL_PP(entry);
- }
-
- php_set_opts(ld->link, ldap_sizelimit, ldap_timelimit, ldap_deref);
-
- /* Run the actual search */
- rcs[i] = ldap_search(ld->link, ldap_base_dn, scope, ldap_filter, ldap_attrs, ldap_attrsonly);
- lds[i] = ld;
- zend_hash_move_forward(Z_ARRVAL_PP(link));
- }
-
- if (ldap_attrs != NULL) {
- efree(ldap_attrs);
- }
-
- array_init(return_value);
-
- /* Collect results from the searches */
- for (i=0; i<nlinks; i++) {
- MAKE_STD_ZVAL(resource);
- if (rcs[i] != -1) {
- rcs[i] = ldap_result(lds[i]->link, LDAP_RES_ANY, 1 /* LDAP_MSG_ALL */, NULL, &ldap_res);
- }
- if (rcs[i] != -1) {
- ZEND_REGISTER_RESOURCE(resource, ldap_res, le_result);
- add_next_index_zval(return_value, resource);
- } else {
- add_next_index_bool(return_value, 0);
- }
- }
- efree(lds);
- efree(rcs);
- return;
- }
-
- /* fix to make null base_dn's work */
- if (strlen(ldap_base_dn) < 1) {
- ldap_base_dn = NULL;
- }
-
- ld = (ldap_linkdata *) zend_fetch_resource(link TSRMLS_CC, -1, "ldap link", NULL, 1, le_link);
- if (ld == NULL) {
- if (ldap_attrs != NULL) {
- efree(ldap_attrs);
- }
- RETURN_FALSE;
- }
-
- php_set_opts(ld->link, ldap_sizelimit, ldap_timelimit, ldap_deref);
-
- /* Run the actual search */
- errno = ldap_search_s(ld->link, ldap_base_dn, scope, ldap_filter, ldap_attrs, ldap_attrsonly, &ldap_res);
-
- if (ldap_attrs != NULL) {
- efree(ldap_attrs);
- }
-
- if (errno != LDAP_SUCCESS
- && errno != LDAP_SIZELIMIT_EXCEEDED
-#ifdef LDAP_ADMINLIMIT_EXCEEDED
- && errno != LDAP_ADMINLIMIT_EXCEEDED
-#endif
-#ifdef LDAP_REFERRAL
- && errno != LDAP_REFERRAL
-#endif
- ) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Search: %s", ldap_err2string(errno));
- RETVAL_FALSE;
- } else {
- if (errno == LDAP_SIZELIMIT_EXCEEDED) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Partial search results returned: Sizelimit exceeded.");
- }
-#ifdef LDAP_ADMINLIMIT_EXCEEDED
- else if (errno == LDAP_ADMINLIMIT_EXCEEDED) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Partial search results returned: Adminlimit exceeded.");
- }
-#endif
-
- ZEND_REGISTER_RESOURCE(return_value, ldap_res, le_result);
- }
-}
-/* }}} */
-
-/* {{{ proto resource ldap_read(resource link, string base_dn, string filter [, array attrs [, int attrsonly [, int sizelimit [, int timelimit [, int deref]]]]])
- Read an entry */
-PHP_FUNCTION(ldap_read)
-{
- php_ldap_do_search(INTERNAL_FUNCTION_PARAM_PASSTHRU, LDAP_SCOPE_BASE);
-}
-/* }}} */
-
-/* {{{ proto resource ldap_list(resource link, string base_dn, string filter [, array attrs [, int attrsonly [, int sizelimit [, int timelimit [, int deref]]]]])
- Single-level search */
-PHP_FUNCTION(ldap_list)
-{
- php_ldap_do_search(INTERNAL_FUNCTION_PARAM_PASSTHRU, LDAP_SCOPE_ONELEVEL);
-}
-/* }}} */
-
-/* {{{ proto resource ldap_search(resource link, string base_dn, string filter [, array attrs [, int attrsonly [, int sizelimit [, int timelimit [, int deref]]]]])
- Search LDAP tree under base_dn */
-PHP_FUNCTION(ldap_search)
-{
- php_ldap_do_search(INTERNAL_FUNCTION_PARAM_PASSTHRU, LDAP_SCOPE_SUBTREE);
-}
-/* }}} */
-
-/* {{{ proto bool ldap_free_result(resource result)
- Free result memory */
-PHP_FUNCTION(ldap_free_result)
-{
- zval **result;
- LDAPMessage *ldap_result;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &result) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(ldap_result, LDAPMessage *, result, -1, "ldap result", le_result);
-
- zend_list_delete(Z_LVAL_PP(result)); /* Delete list entry and call registered destructor function */
- RETVAL_TRUE;
-}
-/* }}} */
-
-/* {{{ proto int ldap_count_entries(resource link, resource result)
- Count the number of entries in a search result */
-PHP_FUNCTION(ldap_count_entries)
-{
- zval **link, **result;
- ldap_linkdata *ld;
- LDAPMessage *ldap_result;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &link, &result) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(ld, ldap_linkdata *, link, -1, "ldap link", le_link);
- ZEND_FETCH_RESOURCE(ldap_result, LDAPMessage *, result, -1, "ldap result", le_result);
-
- RETURN_LONG(ldap_count_entries(ld->link, ldap_result));
-}
-/* }}} */
-
-/* {{{ proto resource ldap_first_entry(resource link, resource result)
- Return first result id */
-PHP_FUNCTION(ldap_first_entry)
-{
- zval **link, **result;
- ldap_linkdata *ld;
- ldap_resultentry *resultentry;
- LDAPMessage *ldap_result, *entry;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &link, &result) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(ld, ldap_linkdata *, link, -1, "ldap link", le_link);
- ZEND_FETCH_RESOURCE(ldap_result, LDAPMessage *, result, -1, "ldap result", le_result);
-
- if ((entry = ldap_first_entry(ld->link, ldap_result)) == NULL) {
- RETVAL_FALSE;
- } else {
- resultentry = emalloc(sizeof(ldap_resultentry));
- ZEND_REGISTER_RESOURCE(return_value, resultentry, le_result_entry);
- resultentry->id = Z_LVAL_PP(result);
- zend_list_addref(resultentry->id);
- resultentry->data = entry;
- }
-}
-/* }}} */
-
-/* {{{ proto resource ldap_next_entry(resource link, resource result_entry)
- Get next result entry */
-PHP_FUNCTION(ldap_next_entry)
-{
- zval **link, **result_entry;
- ldap_linkdata *ld;
- ldap_resultentry *resultentry, *resultentry_next;
- LDAPMessage *entry_next;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &link, &result_entry) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(ld, ldap_linkdata *, link, -1, "ldap link", le_link);
- ZEND_FETCH_RESOURCE(resultentry, ldap_resultentry *, result_entry, -1, "ldap result entry", le_result_entry);
-
- if ((entry_next = ldap_next_entry(ld->link, resultentry->data)) == NULL) {
- RETVAL_FALSE;
- } else {
- resultentry_next = emalloc(sizeof(ldap_resultentry));
- ZEND_REGISTER_RESOURCE(return_value, resultentry_next, le_result_entry);
- resultentry_next->id = resultentry->id;
- zend_list_addref(resultentry->id);
- resultentry_next->data = entry_next;
- }
-}
-/* }}} */
-
-/* {{{ proto array ldap_get_entries(resource link, resource result)
- Get all result entries */
-PHP_FUNCTION(ldap_get_entries)
-{
- zval **link, **result;
- LDAPMessage *ldap_result, *ldap_result_entry;
- zval *tmp1, *tmp2;
- ldap_linkdata *ld;
- LDAP *ldap;
- int num_entries, num_attrib, num_values, i;
- BerElement *ber;
- char *attribute;
- size_t attr_len;
- char **ldap_value;
- char *dn;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &link, &result) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(ld, ldap_linkdata *, link, -1, "ldap link", le_link);
- ZEND_FETCH_RESOURCE(ldap_result, LDAPMessage *, result, -1, "ldap result", le_result);
-
- ldap = ld->link;
- num_entries = ldap_count_entries(ldap, ldap_result);
-
- array_init(return_value);
- add_assoc_long(return_value, "count", num_entries);
-
- if (num_entries == 0) return;
- num_entries = 0;
-
- ldap_result_entry = ldap_first_entry(ldap, ldap_result);
- if (ldap_result_entry == NULL) RETURN_FALSE;
-
- while (ldap_result_entry != NULL) {
-
- MAKE_STD_ZVAL(tmp1);
- array_init(tmp1);
-
- num_attrib = 0;
- attribute = ldap_first_attribute(ldap, ldap_result_entry, &ber);
-
- while (attribute != NULL) {
- ldap_value = ldap_get_values(ldap, ldap_result_entry, attribute);
- num_values = ldap_count_values(ldap_value);
-
- MAKE_STD_ZVAL(tmp2);
- array_init(tmp2);
- add_assoc_long(tmp2, "count", num_values);
- for (i = 0; i < num_values; i++) {
- add_index_string(tmp2, i, ldap_value[i], 1);
- }
- ldap_value_free(ldap_value);
-
- attr_len = strlen(attribute);
- zend_hash_update(Z_ARRVAL_P(tmp1), php_strtolower(attribute, attr_len), attr_len+1, (void *) &tmp2, sizeof(zval *), NULL);
- add_index_string(tmp1, num_attrib, attribute, 1);
-
- num_attrib++;
-#if (LDAP_API_VERSION > 2000) || HAVE_NSLDAP || WINDOWS
- ldap_memfree(attribute);
-#endif
- attribute = ldap_next_attribute(ldap, ldap_result_entry, ber);
- }
-#if (LDAP_API_VERSION > 2000) || HAVE_NSLDAP || WINDOWS
- if (ber != NULL)
- ber_free(ber, 0);
-#endif
-
- add_assoc_long(tmp1, "count", num_attrib);
- dn = ldap_get_dn(ldap, ldap_result_entry);
- add_assoc_string(tmp1, "dn", dn, 1);
-#if (LDAP_API_VERSION > 2000) || HAVE_NSLDAP || WINDOWS
- ldap_memfree(dn);
-#else
- free(dn);
-#endif
-
- zend_hash_index_update(Z_ARRVAL_P(return_value), num_entries, (void *) &tmp1, sizeof(zval *), NULL);
-
- num_entries++;
- ldap_result_entry = ldap_next_entry(ldap, ldap_result_entry);
- }
-
- add_assoc_long(return_value, "count", num_entries);
-
-}
-/* }}} */
-
-/* {{{ proto string ldap_first_attribute(resource link, resource result_entry, int ber)
- Return first attribute */
-PHP_FUNCTION(ldap_first_attribute)
-{
- zval **link, **result_entry, **berp;
- ldap_linkdata *ld;
- ldap_resultentry *resultentry;
- BerElement *ber;
- char *attribute;
-
- if (ZEND_NUM_ARGS() != 3 || zend_get_parameters_ex(3, &link, &result_entry, &berp) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(ld, ldap_linkdata *, link, -1, "ldap link", le_link);
- ZEND_FETCH_RESOURCE(resultentry, ldap_resultentry *, result_entry, -1, "ldap result entry", le_result_entry);
-
- if ((attribute = ldap_first_attribute(ld->link, resultentry->data, &ber)) == NULL) {
- RETURN_FALSE;
- } else {
- ZEND_REGISTER_RESOURCE(*berp, ber, le_ber_entry);
-
- RETVAL_STRING(attribute, 1);
-#if (LDAP_API_VERSION > 2000) || HAVE_NSLDAP || WINDOWS
- ldap_memfree(attribute);
-#endif
- }
-}
-/* }}} */
-
-/* {{{ proto string ldap_next_attribute(resource link, resource result_entry, resource ber)
- Get the next attribute in result */
-PHP_FUNCTION(ldap_next_attribute)
-{
- zval **link, **result_entry, **berp;
- ldap_linkdata *ld;
- ldap_resultentry *resultentry;
- BerElement *ber;
- char *attribute;
-
- if (ZEND_NUM_ARGS() != 3 || zend_get_parameters_ex(3, &link, &result_entry, &berp) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(ld, ldap_linkdata *, link, -1, "ldap link", le_link);
- ZEND_FETCH_RESOURCE(resultentry, ldap_resultentry *, result_entry, -1, "ldap result entry", le_result_entry);
- ZEND_FETCH_RESOURCE(ber, BerElement *, berp, -1, "ldap ber entry", le_ber_entry);
-
- if ((attribute = ldap_next_attribute(ld->link, resultentry->data, ber)) == NULL) {
- RETURN_FALSE;
- } else {
- ZEND_REGISTER_RESOURCE(*berp, ber, le_ber_entry);
-
- RETVAL_STRING(attribute, 1);
-#if (LDAP_API_VERSION > 2000) || HAVE_NSLDAP || WINDOWS
- ldap_memfree(attribute);
-#endif
- }
-}
-/* }}} */
-
-/* {{{ proto array ldap_get_attributes(resource link, resource result_entry)
- Get attributes from a search result entry */
-PHP_FUNCTION(ldap_get_attributes)
-{
- zval **link, **result_entry;
- zval *tmp;
- ldap_linkdata *ld;
- ldap_resultentry *resultentry;
- char *attribute;
- char **ldap_value;
- int i, num_values, num_attrib;
- BerElement *ber;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &link, &result_entry) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(ld, ldap_linkdata *, link, -1, "ldap link", le_link);
- ZEND_FETCH_RESOURCE(resultentry, ldap_resultentry *, result_entry, -1, "ldap result entry", le_result_entry);
-
- array_init(return_value);
- num_attrib = 0;
-
- attribute = ldap_first_attribute(ld->link, resultentry->data, &ber);
- while (attribute != NULL) {
- ldap_value = ldap_get_values(ld->link, resultentry->data, attribute);
- num_values = ldap_count_values(ldap_value);
-
- MAKE_STD_ZVAL(tmp);
- array_init(tmp);
- add_assoc_long(tmp, "count", num_values);
- for (i = 0; i < num_values; i++) {
- add_index_string(tmp, i, ldap_value[i], 1);
- }
- ldap_value_free(ldap_value);
-
- zend_hash_update(Z_ARRVAL_P(return_value), attribute, strlen(attribute)+1, (void *) &tmp, sizeof(zval *), NULL);
- add_index_string(return_value, num_attrib, attribute, 1);
-
- num_attrib++;
-#if (LDAP_API_VERSION > 2000) || HAVE_NSLDAP || WINDOWS
- ldap_memfree(attribute);
-#endif
- attribute = ldap_next_attribute(ld->link, resultentry->data, ber);
- }
-#if (LDAP_API_VERSION > 2000) || HAVE_NSLDAP || WINDOWS
- if (ber != NULL) {
- ber_free(ber, 0);
- }
-#endif
-
- add_assoc_long(return_value, "count", num_attrib);
-}
-/* }}} */
-
-/* {{{ proto array ldap_get_values(resource link, resource result_entry, string attribute)
- Get all values from a result entry */
-PHP_FUNCTION(ldap_get_values)
-{
- zval **link, **result_entry, **attr;
- ldap_linkdata *ld;
- ldap_resultentry *resultentry;
- char *attribute;
- char **ldap_value;
- int i, num_values;
-
- if (ZEND_NUM_ARGS() != 3 || zend_get_parameters_ex(3, &link, &result_entry, &attr) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(ld, ldap_linkdata *, link, -1, "ldap link", le_link);
- ZEND_FETCH_RESOURCE(resultentry, ldap_resultentry *, result_entry, -1, "ldap result entry", le_result_entry);
-
- convert_to_string_ex(attr);
- attribute = Z_STRVAL_PP(attr);
-
- if ((ldap_value = ldap_get_values(ld->link, resultentry->data, attribute)) == NULL) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Cannot get the value(s) of attribute %s", ldap_err2string(_get_lderrno(ld->link)));
- RETURN_FALSE;
- }
-
- num_values = ldap_count_values(ldap_value);
-
- array_init(return_value);
-
- for (i = 0; i<num_values; i++) {
- add_next_index_string(return_value, ldap_value[i], 1);
- }
-
- add_assoc_long(return_value, "count", num_values);
- ldap_value_free(ldap_value);
-
-}
-/* }}} */
-
-/* {{{ proto array ldap_get_values_len(resource link, resource result_entry, string attribute)
- Get all values with lengths from a result entry */
-PHP_FUNCTION(ldap_get_values_len)
-{
- zval **link, **result_entry, **attr;
- ldap_linkdata *ld;
- ldap_resultentry *resultentry;
- char* attribute;
- struct berval **ldap_value_len;
- int i, num_values;
-
- if (ZEND_NUM_ARGS() != 3 || zend_get_parameters_ex(3, &link, &result_entry, &attr) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(ld, ldap_linkdata *, link, -1, "ldap link", le_link);
- ZEND_FETCH_RESOURCE(resultentry, ldap_resultentry *, result_entry, -1, "ldap result entry", le_result_entry);
-
- convert_to_string_ex(attr);
- attribute = Z_STRVAL_PP(attr);
-
- if ((ldap_value_len = ldap_get_values_len(ld->link, resultentry->data, attribute)) == NULL) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Cannot get the value(s) of attribute %s", ldap_err2string(_get_lderrno(ld->link)));
- RETURN_FALSE;
- }
-
- num_values = ldap_count_values_len(ldap_value_len);
- array_init(return_value);
-
- for (i=0; i<num_values; i++) {
- add_next_index_stringl(return_value, ldap_value_len[i]->bv_val, ldap_value_len[i]->bv_len, 1);
- }
-
- add_assoc_long(return_value, "count", num_values);
- ldap_value_free_len(ldap_value_len);
-
-}
-/* }}} */
-
-/* {{{ proto string ldap_get_dn(resource link, resource result_entry)
- Get the DN of a result entry */
-PHP_FUNCTION(ldap_get_dn)
-{
- zval **link, **result_entry;
- ldap_linkdata *ld;
- ldap_resultentry *resultentry;
- char *text;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &link, &result_entry) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(ld, ldap_linkdata *, link, -1, "ldap link", le_link);
- ZEND_FETCH_RESOURCE(resultentry, ldap_resultentry *, result_entry, -1, "ldap result entry", le_result_entry);
-
- text = ldap_get_dn(ld->link, resultentry->data);
- if (text != NULL) {
- RETVAL_STRING(text, 1);
-#if (LDAP_API_VERSION > 2000) || HAVE_NSLDAP || WINDOWS
- ldap_memfree(text);
-#else
- free(text);
-#endif
- } else {
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-/* {{{ proto array ldap_explode_dn(string dn, int with_attrib)
- Splits DN into its component parts */
-PHP_FUNCTION(ldap_explode_dn)
-{
- zval **dn, **with_attrib;
- char **ldap_value;
- int i, count;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &dn, &with_attrib) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_string_ex(dn);
- convert_to_long_ex(with_attrib);
-
- if (!(ldap_value = ldap_explode_dn(Z_STRVAL_PP(dn), Z_LVAL_PP(with_attrib)))) {
- /* Invalid parameters were passed to ldap_explode_dn */
- RETURN_FALSE;
- }
-
- i=0;
- while (ldap_value[i] != NULL) i++;
- count = i;
-
- array_init(return_value);
-
- add_assoc_long(return_value, "count", count);
- for (i = 0; i<count; i++) {
- add_index_string(return_value, i, ldap_value[i], 1);
- }
-
- ldap_value_free(ldap_value);
-}
-/* }}} */
-
-/* {{{ proto string ldap_dn2ufn(string dn)
- Convert DN to User Friendly Naming format */
-PHP_FUNCTION(ldap_dn2ufn)
-{
- zval **dn;
- char *ufn;
-
- if (ZEND_NUM_ARGS() !=1 || zend_get_parameters_ex(1, &dn)==FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_string_ex(dn);
-
- ufn = ldap_dn2ufn(Z_STRVAL_PP(dn));
-
- if (ufn !=NULL) {
- RETVAL_STRING(ufn, 1);
-#if (LDAP_API_VERSION > 2000) || HAVE_NSLDAP || WINDOWS
- ldap_memfree(ufn);
-#endif
- } else {
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-
-/* added to fix use of ldap_modify_add for doing an ldap_add, gerrit thomson. */
-#define PHP_LD_FULL_ADD 0xff
-/* {{{ php_ldap_do_modify
- */
-static void php_ldap_do_modify(INTERNAL_FUNCTION_PARAMETERS, int oper)
-{
- zval **link, **dn, **entry, **value, **ivalue;
- ldap_linkdata *ld;
- char *ldap_dn;
- LDAPMod **ldap_mods;
- int i, j, num_attribs, num_values;
- int *num_berval;
- char *attribute;
- ulong index;
- int is_full_add=0; /* flag for full add operation so ldap_mod_add can be put back into oper, gerrit THomson */
-
- if (ZEND_NUM_ARGS() != 3 || zend_get_parameters_ex(3, &link, &dn, &entry) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- if (Z_TYPE_PP(entry) != IS_ARRAY) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Expected Array as the last element");
- RETURN_FALSE;
- }
-
- ZEND_FETCH_RESOURCE(ld, ldap_linkdata *, link, -1, "ldap link", le_link);
-
- convert_to_string_ex(dn);
- ldap_dn = Z_STRVAL_PP(dn);
-
- num_attribs = zend_hash_num_elements(Z_ARRVAL_PP(entry));
- ldap_mods = safe_emalloc((num_attribs+1), sizeof(LDAPMod *), 0);
- num_berval = safe_emalloc(num_attribs, sizeof(int), 0);
- zend_hash_internal_pointer_reset(Z_ARRVAL_PP(entry));
-
- /* added by gerrit thomson to fix ldap_add using ldap_mod_add */
- if (oper == PHP_LD_FULL_ADD) {
- oper = LDAP_MOD_ADD;
- is_full_add = 1;
- }
- /* end additional , gerrit thomson */
-
- for (i = 0; i < num_attribs; i++) {
- ldap_mods[i] = emalloc(sizeof(LDAPMod));
- ldap_mods[i]->mod_op = oper | LDAP_MOD_BVALUES;
-
- if (zend_hash_get_current_key(Z_ARRVAL_PP(entry), &attribute, &index, 0) == HASH_KEY_IS_STRING) {
- ldap_mods[i]->mod_type = estrdup(attribute);
- } else {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unknown attribute in the data");
- /* Free allocated memory */
- while (i >= 0) {
- efree(ldap_mods[i--]);
- }
- efree(num_berval);
- efree(ldap_mods);
- RETURN_FALSE;
- }
-
- zend_hash_get_current_data(Z_ARRVAL_PP(entry), (void **)&value);
-
- if (Z_TYPE_PP(value) != IS_ARRAY) {
- num_values = 1;
- } else {
- num_values = zend_hash_num_elements(Z_ARRVAL_PP(value));
- }
-
- num_berval[i] = num_values;
- ldap_mods[i]->mod_bvalues = safe_emalloc((num_values + 1), sizeof(struct berval *), 0);
-
-/* allow for arrays with one element, no allowance for arrays with none but probably not required, gerrit thomson. */
- if ((num_values == 1) && (Z_TYPE_PP(value) != IS_ARRAY)) {
- convert_to_string_ex(value);
- ldap_mods[i]->mod_bvalues[0] = (struct berval *) emalloc (sizeof(struct berval));
- ldap_mods[i]->mod_bvalues[0]->bv_len = Z_STRLEN_PP(value);
- ldap_mods[i]->mod_bvalues[0]->bv_val = Z_STRVAL_PP(value);
- } else {
- for (j = 0; j < num_values; j++) {
- if (zend_hash_index_find(Z_ARRVAL_PP(value), j, (void **) &ivalue) == FAILURE) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Value array must have consecutive indices 0, 1, ...");
- num_berval[i] = j;
- num_attribs = i + 1;
- RETVAL_FALSE;
- goto errexit;
- }
- convert_to_string_ex(ivalue);
- ldap_mods[i]->mod_bvalues[j] = (struct berval *) emalloc (sizeof(struct berval));
- ldap_mods[i]->mod_bvalues[j]->bv_len = Z_STRLEN_PP(ivalue);
- ldap_mods[i]->mod_bvalues[j]->bv_val = Z_STRVAL_PP(ivalue);
- }
- }
- ldap_mods[i]->mod_bvalues[num_values] = NULL;
- zend_hash_move_forward(Z_ARRVAL_PP(entry));
- }
- ldap_mods[num_attribs] = NULL;
-
-/* check flag to see if do_mod was called to perform full add , gerrit thomson */
- if (is_full_add == 1) {
- if ((i = ldap_add_s(ld->link, ldap_dn, ldap_mods)) != LDAP_SUCCESS) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Add: %s", ldap_err2string(i));
- RETVAL_FALSE;
- } else RETVAL_TRUE;
- } else {
- if ((i = ldap_modify_s(ld->link, ldap_dn, ldap_mods)) != LDAP_SUCCESS) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Modify: %s", ldap_err2string(i));
- RETVAL_FALSE;
- } else RETVAL_TRUE;
- }
-
-errexit:
- for (i = 0; i < num_attribs; i++) {
- efree(ldap_mods[i]->mod_type);
- for (j = 0; j < num_berval[i]; j++) {
- efree(ldap_mods[i]->mod_bvalues[j]);
- }
- efree(ldap_mods[i]->mod_bvalues);
- efree(ldap_mods[i]);
- }
- efree(num_berval);
- efree(ldap_mods);
-
- return;
-}
-/* }}} */
-
-/* {{{ proto bool ldap_add(resource link, string dn, array entry)
- Add entries to LDAP directory */
-PHP_FUNCTION(ldap_add)
-{
- /* use a newly define parameter into the do_modify so ldap_mod_add can be used the way it is supposed to be used , Gerrit THomson */
- php_ldap_do_modify(INTERNAL_FUNCTION_PARAM_PASSTHRU, PHP_LD_FULL_ADD);
-}
-/* }}} */
-
-/* three functions for attribute base modifications, gerrit Thomson */
-
-/* {{{ proto bool ldap_mod_replace(resource link, string dn, array entry)
- Replace attribute values with new ones */
-PHP_FUNCTION(ldap_mod_replace)
-{
- php_ldap_do_modify(INTERNAL_FUNCTION_PARAM_PASSTHRU, LDAP_MOD_REPLACE);
-}
-/* }}} */
-
-/* {{{ proto bool ldap_mod_add(resource link, string dn, array entry)
- Add attribute values to current */
-PHP_FUNCTION(ldap_mod_add)
-{
- php_ldap_do_modify(INTERNAL_FUNCTION_PARAM_PASSTHRU, LDAP_MOD_ADD);
-}
-/* }}} */
-
-/* {{{ proto bool ldap_mod_del(resource link, string dn, array entry)
- Delete attribute values */
-PHP_FUNCTION(ldap_mod_del)
-{
- php_ldap_do_modify(INTERNAL_FUNCTION_PARAM_PASSTHRU, LDAP_MOD_DELETE);
-}
-/* }}} */
-
-/* {{{ proto bool ldap_delete(resource link, string dn)
- Delete an entry from a directory */
-PHP_FUNCTION(ldap_delete)
-{
- zval **link, **dn;
- ldap_linkdata *ld;
- char *ldap_dn;
- int rc;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &link, &dn) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(ld, ldap_linkdata *, link, -1, "ldap link", le_link);
-
- convert_to_string_ex(dn);
- ldap_dn = Z_STRVAL_PP(dn);
-
- if ((rc = ldap_delete_s(ld->link, ldap_dn)) != LDAP_SUCCESS) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Delete: %s", ldap_err2string(rc));
- RETURN_FALSE;
- }
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto int ldap_errno(resource link)
- Get the current ldap error number */
-PHP_FUNCTION(ldap_errno)
-{
- zval **link;
- ldap_linkdata *ld;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(ht, &link) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(ld, ldap_linkdata *, link, -1, "ldap link", le_link);
-
- RETURN_LONG(_get_lderrno(ld->link));
-}
-/* }}} */
-
-/* {{{ proto string ldap_err2str(int errno)
- Convert error number to error string */
-PHP_FUNCTION(ldap_err2str)
-{
- zval **perrno;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(ht, &perrno) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long_ex(perrno);
- RETURN_STRING(ldap_err2string(Z_LVAL_PP(perrno)), 1);
-}
-/* }}} */
-
-/* {{{ proto string ldap_error(resource link)
- Get the current ldap error string */
-PHP_FUNCTION(ldap_error)
-{
- zval **link;
- ldap_linkdata *ld;
- int ld_errno;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(ht, &link) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(ld, ldap_linkdata *, link, -1, "ldap link", le_link);
-
- ld_errno = _get_lderrno(ld->link);
-
- RETURN_STRING(ldap_err2string(ld_errno), 1);
-}
-/* }}} */
-
-/* {{{ proto bool ldap_compare(resource link, string dn, string attr, string value)
- Determine if an entry has a specific value for one of its attributes */
-PHP_FUNCTION(ldap_compare)
-{
- zval **link, **dn, **attr, **value;
- char *ldap_dn, *ldap_attr, *ldap_value;
- ldap_linkdata *ld;
- int errno;
-
- if (ZEND_NUM_ARGS() != 4 || zend_get_parameters_ex(4, &link, &dn, &attr, &value) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(ld, ldap_linkdata *, link, -1, "ldap link", le_link);
-
- convert_to_string_ex(dn);
- convert_to_string_ex(attr);
- convert_to_string_ex(value);
-
- ldap_dn = Z_STRVAL_PP(dn);
- ldap_attr = Z_STRVAL_PP(attr);
- ldap_value = Z_STRVAL_PP(value);
-
- errno = ldap_compare_s(ld->link, ldap_dn, ldap_attr, ldap_value);
-
- switch (errno) {
- case LDAP_COMPARE_TRUE:
- RETURN_TRUE;
- break;
-
- case LDAP_COMPARE_FALSE:
- RETURN_FALSE;
- break;
- }
-
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Compare: %s", ldap_err2string(errno));
- RETURN_LONG(-1);
-
-}
-/* }}} */
-
-/* {{{ proto bool ldap_sort(resource link, resource result, string sortfilter)
- Sort LDAP result entries */
-PHP_FUNCTION(ldap_sort)
-{
- zval *link, *result;
- ldap_linkdata *ld;
- char *sortfilter;
- int sflen;
- zend_rsrc_list_entry *le;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rrs", &link, &result, &sortfilter, &sflen) == FAILURE) {
- RETURN_FALSE;
- }
-
- ZEND_FETCH_RESOURCE(ld, ldap_linkdata *, &link, -1, "ldap link", le_link);
-
- if (zend_hash_index_find(&EG(regular_list), Z_LVAL_P(result), (void **) &le) == FAILURE || le->type != le_result) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Supplied resource is not a valid ldap result resource");
- RETURN_FALSE;
- }
-
- if (ldap_sort_entries(ld->link, (LDAPMessage **) &le->ptr, sflen ? sortfilter : NULL, strcmp) != LDAP_SUCCESS) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", ldap_err2string(errno));
- RETURN_FALSE;
- }
-
- RETURN_TRUE;
-}
-/* }}} */
-
-
-#if (LDAP_API_VERSION > 2000) || HAVE_NSLDAP
-/* {{{ proto bool ldap_get_option(resource link, int option, mixed retval)
- Get the current value of various session-wide parameters */
-PHP_FUNCTION(ldap_get_option)
-{
- zval **link, **option, **retval;
- ldap_linkdata *ld;
- int opt;
-
- if (ZEND_NUM_ARGS() != 3 || zend_get_parameters_ex(3, &link, &option, &retval) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(ld, ldap_linkdata *, link, -1, "ldap link", le_link);
-
- convert_to_long_ex(option);
- opt = Z_LVAL_PP(option);
-
- switch (opt) {
- /* options with int value */
- case LDAP_OPT_DEREF:
- case LDAP_OPT_SIZELIMIT:
- case LDAP_OPT_TIMELIMIT:
- case LDAP_OPT_PROTOCOL_VERSION:
- case LDAP_OPT_ERROR_NUMBER:
- case LDAP_OPT_REFERRALS:
-#ifdef LDAP_OPT_RESTART
- case LDAP_OPT_RESTART:
-#endif
- {
- int val;
- if (ldap_get_option(ld->link, opt, &val)) {
- RETURN_FALSE;
- }
- zval_dtor(*retval);
- ZVAL_LONG(*retval, val);
- } break;
- /* options with string value */
- case LDAP_OPT_HOST_NAME:
- case LDAP_OPT_ERROR_STRING:
-#ifdef LDAP_OPT_MATCHED_DN
- case LDAP_OPT_MATCHED_DN:
-#endif
- {
- char *val = NULL;
-
- if (ldap_get_option(ld->link, opt, &val) || val == NULL || *val == '\0') {
- if (val) {
- ldap_memfree(val);
- }
- RETURN_FALSE;
- }
- zval_dtor(*retval);
- ZVAL_STRING(*retval, val, 1);
- ldap_memfree(val);
- } break;
-/* options not implemented
- case LDAP_OPT_SERVER_CONTROLS:
- case LDAP_OPT_CLIENT_CONTROLS:
- case LDAP_OPT_API_INFO:
- case LDAP_OPT_API_FEATURE_INFO:
-*/
- default:
- RETURN_FALSE;
- }
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto bool ldap_set_option(resource link, int option, mixed newval)
- Set the value of various session-wide parameters */
-PHP_FUNCTION(ldap_set_option)
-{
- zval **link, **option, **newval;
- ldap_linkdata *ld;
- LDAP *ldap;
- int opt;
-
- if (ZEND_NUM_ARGS() != 3 || zend_get_parameters_ex(3, &link, &option, &newval) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- if (Z_TYPE_PP(link) == IS_NULL) {
- ldap = NULL;
- } else {
- ZEND_FETCH_RESOURCE(ld, ldap_linkdata *, link, -1, "ldap link", le_link);
- ldap = ld->link;
- }
-
- convert_to_long_ex(option);
- opt = Z_LVAL_PP(option);
-
- switch (opt) {
- /* options with int value */
- case LDAP_OPT_DEREF:
- case LDAP_OPT_SIZELIMIT:
- case LDAP_OPT_TIMELIMIT:
- case LDAP_OPT_PROTOCOL_VERSION:
- case LDAP_OPT_ERROR_NUMBER:
-#ifdef LDAP_OPT_DEBUG_LEVEL
- case LDAP_OPT_DEBUG_LEVEL:
-#endif
- {
- int val;
- convert_to_long_ex(newval);
- val = Z_LVAL_PP(newval);
- if (ldap_set_option(ldap, opt, &val)) {
- RETURN_FALSE;
- }
- } break;
- /* options with string value */
- case LDAP_OPT_HOST_NAME:
- case LDAP_OPT_ERROR_STRING:
-#ifdef LDAP_OPT_MATCHED_DN
- case LDAP_OPT_MATCHED_DN:
-#endif
- {
- char *val;
- convert_to_string_ex(newval);
- val = Z_STRVAL_PP(newval);
- if (ldap_set_option(ldap, opt, val)) {
- RETURN_FALSE;
- }
- } break;
- /* options with boolean value */
- case LDAP_OPT_REFERRALS:
-#ifdef LDAP_OPT_RESTART
- case LDAP_OPT_RESTART:
-#endif
- {
- void *val;
- convert_to_boolean_ex(newval);
- val = Z_LVAL_PP(newval)
- ? LDAP_OPT_ON : LDAP_OPT_OFF;
- if (ldap_set_option(ldap, opt, val)) {
- RETURN_FALSE;
- }
- } break;
- /* options with control list value */
- case LDAP_OPT_SERVER_CONTROLS:
- case LDAP_OPT_CLIENT_CONTROLS:
- {
- LDAPControl *ctrl, **ctrls, **ctrlp;
- zval **ctrlval, **val;
- int ncontrols;
- char error=0;
-
- if ((Z_TYPE_PP(newval) != IS_ARRAY) || !(ncontrols = zend_hash_num_elements(Z_ARRVAL_PP(newval)))) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Expected non-empty array value for this option");
- RETURN_FALSE;
- }
- ctrls = safe_emalloc((1 + ncontrols), sizeof(*ctrls), 0);
- *ctrls = NULL;
- ctrlp = ctrls;
- zend_hash_internal_pointer_reset(Z_ARRVAL_PP(newval));
- while (zend_hash_get_current_data(Z_ARRVAL_PP(newval), (void**)&ctrlval) == SUCCESS) {
- if (Z_TYPE_PP(ctrlval) != IS_ARRAY) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "The array value must contain only arrays, where each array is a control");
- error = 1;
- break;
- }
- if (zend_hash_find(Z_ARRVAL_PP(ctrlval), "oid", sizeof("oid"), (void **) &val) == FAILURE) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Control must have an oid key");
- error = 1;
- break;
- }
- ctrl = *ctrlp = emalloc(sizeof(**ctrlp));
- convert_to_string_ex(val);
- ctrl->ldctl_oid = Z_STRVAL_PP(val);
- if (zend_hash_find(Z_ARRVAL_PP(ctrlval), "value", sizeof("value"), (void **) &val) == SUCCESS) {
- convert_to_string_ex(val);
- ctrl->ldctl_value.bv_val = Z_STRVAL_PP(val);
- ctrl->ldctl_value.bv_len = Z_STRLEN_PP(val);
- } else {
- ctrl->ldctl_value.bv_val = NULL;
- ctrl->ldctl_value.bv_len = 0;
- }
- if (zend_hash_find(Z_ARRVAL_PP(ctrlval), "iscritical", sizeof("iscritical"), (void **) &val) == SUCCESS) {
- convert_to_boolean_ex(val);
- ctrl->ldctl_iscritical = Z_BVAL_PP(val);
- } else {
- ctrl->ldctl_iscritical = 0;
- }
-
- ++ctrlp;
- *ctrlp = NULL;
- zend_hash_move_forward(Z_ARRVAL_PP(newval));
- }
- if (!error) {
- error = ldap_set_option(ldap, opt, ctrls);
- }
- ctrlp = ctrls;
- while (*ctrlp) {
- efree(*ctrlp);
- ctrlp++;
- }
- efree(ctrls);
- if (error) {
- RETURN_FALSE;
- }
- } break;
- default:
- RETURN_FALSE;
- }
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto bool ldap_parse_result(resource link, resource result, int errcode, string matcheddn, string errmsg, array referrals)
- Extract information from result */
-PHP_FUNCTION(ldap_parse_result)
-{
- zval **link, **result, **errcode, **matcheddn, **errmsg, **referrals;
- ldap_linkdata *ld;
- LDAPMessage *ldap_result;
- char **lreferrals, **refp;
- char *lmatcheddn, *lerrmsg;
- int rc, lerrcode, myargcount = ZEND_NUM_ARGS();
-
- if (myargcount < 3 || myargcount > 6 || zend_get_parameters_ex(myargcount, &link, &result, &errcode, &matcheddn, &errmsg, &referrals) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(ld, ldap_linkdata *, link, -1, "ldap link", le_link);
- ZEND_FETCH_RESOURCE(ldap_result, LDAPMessage *, result, -1, "ldap result", le_result);
-
- rc = ldap_parse_result(ld->link, ldap_result, &lerrcode,
- myargcount > 3 ? &lmatcheddn : NULL,
- myargcount > 4 ? &lerrmsg : NULL,
- myargcount > 5 ? &lreferrals : NULL,
- NULL /* &serverctrls */,
- 0);
- if (rc != LDAP_SUCCESS) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to parse result: %s", ldap_err2string(rc));
- RETURN_FALSE;
- }
-
- zval_dtor(*errcode);
- ZVAL_LONG(*errcode, lerrcode);
-
- /* Reverse -> fall through */
- switch (myargcount) {
- case 6:
- zval_dtor(*referrals);
- array_init(*referrals);
- if (lreferrals != NULL) {
- refp = lreferrals;
- while (*refp) {
- add_next_index_string(*referrals, *refp, 1);
- refp++;
- }
- ldap_value_free(lreferrals);
- }
- case 5:
- zval_dtor(*errmsg);
- if (lerrmsg == NULL) {
- ZVAL_EMPTY_STRING(*errmsg);
- } else {
- ZVAL_STRING(*errmsg, lerrmsg, 1);
- ldap_memfree(lerrmsg);
- }
- case 4:
- zval_dtor(*matcheddn);
- if (lmatcheddn == NULL) {
- ZVAL_EMPTY_STRING(*matcheddn);
- } else {
- ZVAL_STRING(*matcheddn, lmatcheddn, 1);
- ldap_memfree(lmatcheddn);
- }
- }
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto resource ldap_first_reference(resource link, resource result)
- Return first reference */
-PHP_FUNCTION(ldap_first_reference)
-{
- zval **link, **result;
- ldap_linkdata *ld;
- ldap_resultentry *resultentry;
- LDAPMessage *ldap_result, *entry;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &link, &result) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(ld, ldap_linkdata *, link, -1, "ldap link", le_link);
- ZEND_FETCH_RESOURCE(ldap_result, LDAPMessage *, result, -1, "ldap result", le_result);
-
- if ((entry = ldap_first_reference(ld->link, ldap_result)) == NULL) {
- RETVAL_FALSE;
- } else {
- resultentry = emalloc(sizeof(ldap_resultentry));
- ZEND_REGISTER_RESOURCE(return_value, resultentry, le_result_entry);
- resultentry->id = Z_LVAL_PP(result);
- zend_list_addref(resultentry->id);
- resultentry->data = entry;
- }
-}
-/* }}} */
-
-/* {{{ proto resource ldap_next_reference(resource link, resource reference_entry)
- Get next reference */
-PHP_FUNCTION(ldap_next_reference)
-{
- zval **link, **result_entry;
- ldap_linkdata *ld;
- ldap_resultentry *resultentry, *resultentry_next;
- LDAPMessage *entry_next;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &link, &result_entry) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(ld, ldap_linkdata *, link, -1, "ldap link", le_link);
- ZEND_FETCH_RESOURCE(resultentry, ldap_resultentry *, result_entry, -1, "ldap result entry", le_result_entry);
-
- if ((entry_next = ldap_next_reference(ld->link, resultentry->data)) == NULL) {
- RETVAL_FALSE;
- } else {
- resultentry_next = emalloc(sizeof(ldap_resultentry));
- ZEND_REGISTER_RESOURCE(return_value, resultentry_next, le_result_entry);
- resultentry_next->id = resultentry->id;
- zend_list_addref(resultentry->id);
- resultentry_next->data = entry_next;
- }
-}
-/* }}} */
-
-#ifdef HAVE_LDAP_PARSE_REFERENCE
-/* {{{ proto bool ldap_parse_reference(resource link, resource reference_entry, array referrals)
- Extract information from reference entry */
-PHP_FUNCTION(ldap_parse_reference)
-{
- zval **link, **result_entry, **referrals;
- ldap_linkdata *ld;
- ldap_resultentry *resultentry;
- char **lreferrals, **refp;
-
- if (ZEND_NUM_ARGS() != 3 || zend_get_parameters_ex(3, &link, &result_entry, &referrals) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(ld, ldap_linkdata *, link, -1, "ldap link", le_link);
- ZEND_FETCH_RESOURCE(resultentry, ldap_resultentry *, result_entry, -1, "ldap result entry", le_result_entry);
-
- if (ldap_parse_reference(ld->link, resultentry->data, &lreferrals, NULL /* &serverctrls */, 0) != LDAP_SUCCESS) {
- RETURN_FALSE;
- }
-
- zval_dtor(*referrals);
- array_init(*referrals);
- if (lreferrals != NULL) {
- refp = lreferrals;
- while (*refp) {
- add_next_index_string(*referrals, *refp, 1);
- refp++;
- }
- ldap_value_free(lreferrals);
- }
- RETURN_TRUE;
-}
-/* }}} */
-#endif
-
-/* {{{ proto bool ldap_rename(resource link, string dn, string newrdn, string newparent, bool deleteoldrdn);
- Modify the name of an entry */
-PHP_FUNCTION(ldap_rename)
-{
- zval **link, **dn, **newrdn, **newparent, **deleteoldrdn;
- ldap_linkdata *ld;
- int rc;
-
- if (ZEND_NUM_ARGS() != 5 || zend_get_parameters_ex(5, &link, &dn, &newrdn, &newparent, &deleteoldrdn) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(ld, ldap_linkdata *, link, -1, "ldap link", le_link);
-
- convert_to_string_ex(dn);
- convert_to_string_ex(newrdn);
- convert_to_string_ex(newparent);
- convert_to_boolean_ex(deleteoldrdn);
-
-#if (LDAP_API_VERSION > 2000) || HAVE_NSLDAP
- rc = ldap_rename_s(ld->link, Z_STRVAL_PP(dn), Z_STRVAL_PP(newrdn), Z_STRVAL_PP(newparent), Z_BVAL_PP(deleteoldrdn), NULL, NULL);
-#else
- if (Z_STRLEN_PP(newparent) != 0) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "You are using old LDAP API, newparent must be the empty string, can only modify RDN");
- RETURN_FALSE;
- }
-/* could support old APIs but need check for ldap_modrdn2()/ldap_modrdn() */
- rc = ldap_modrdn2_s(ld->link, Z_STRVAL_PP(dn), Z_STRVAL_PP(newrdn), Z_BVAL_PP(deleteoldrdn));
-#endif
-
- if (rc == LDAP_SUCCESS) {
- RETURN_TRUE;
- }
- RETURN_FALSE;
-}
-/* }}} */
-
-#ifdef HAVE_LDAP_START_TLS_S
-/* {{{ proto bool ldap_start_tls(resource link)
- Start TLS */
-PHP_FUNCTION(ldap_start_tls)
-{
- zval **link;
- ldap_linkdata *ld;
- int rc;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &link) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(ld, ldap_linkdata *, link, -1, "ldap link", le_link);
-
- if ((rc = ldap_start_tls_s(ld->link, NULL, NULL)) != LDAP_SUCCESS) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING,"Unable to start TLS: %s", ldap_err2string(rc));
- RETURN_FALSE;
- } else {
- RETURN_TRUE;
- }
-}
-/* }}} */
-#endif
-#endif /* (LDAP_API_VERSION > 2000) || HAVE_NSLDAP */
-
-#if defined(LDAP_API_FEATURE_X_OPENLDAP) && defined(HAVE_3ARG_SETREBINDPROC)
-/* {{{ proto _ldap_rebind_proc()
-*/
-int _ldap_rebind_proc(LDAP *ldap, const char *url, ber_tag_t req, ber_int_t msgid, void *params)
-{
- ldap_linkdata *ld;
- int retval;
- zval *cb_url;
- zval **cb_args[2];
- zval *cb_retval;
- zval *cb_link = (zval *) params;
- TSRMLS_FETCH();
-
- ld = (ldap_linkdata *) zend_fetch_resource(&cb_link TSRMLS_CC, -1, "ldap link", NULL, 1, le_link);
-
- /* link exists and callback set? */
- if (ld == NULL || ld->rebindproc == NULL) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Link not found or no callback set");
- return LDAP_OTHER;
- }
-
- /* callback */
- MAKE_STD_ZVAL(cb_url);
- ZVAL_STRING(cb_url, estrdup(url), 0);
- cb_args[0] = &cb_link;
- cb_args[1] = &cb_url;
- if (call_user_function_ex(EG(function_table), NULL, ld->rebindproc, &cb_retval, 2, cb_args, 0, NULL TSRMLS_CC) == SUCCESS && cb_retval) {
- convert_to_long_ex(&cb_retval);
- retval = Z_LVAL_P(cb_retval);
- zval_ptr_dtor(&cb_retval);
- } else {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "rebind_proc PHP callback failed");
- retval = LDAP_OTHER;
- }
- zval_dtor(cb_url);
- FREE_ZVAL(cb_url);
- return retval;
-}
-/* }}} */
-
-/* {{{ proto bool ldap_set_rebind_proc(resource link, string callback)
- Set a callback function to do re-binds on referral chasing. */
-PHP_FUNCTION(ldap_set_rebind_proc)
-{
- zval *link, *callback;
- ldap_linkdata *ld;
- char *callback_name;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rz", &link, &callback) == FAILURE) {
- RETURN_FALSE;
- }
-
- ZEND_FETCH_RESOURCE(ld, ldap_linkdata *, &link, -1, "ldap link", le_link);
-
- if (Z_TYPE_P(callback) == IS_STRING && Z_STRLEN_P(callback) == 0) {
- /* unregister rebind procedure */
- if (ld->rebindproc != NULL) {
- zval_dtor(ld->rebindproc);
- ld->rebindproc = NULL;
- ldap_set_rebind_proc(ld->link, NULL, NULL);
- }
- RETURN_TRUE;
- }
-
- /* callable? */
- if (!zend_is_callable(callback, 0, &callback_name)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Two arguments expected for '%s' to be a valid callback", callback_name);
- efree(callback_name);
- RETURN_FALSE;
- }
- efree(callback_name);
-
- /* register rebind procedure */
- if (ld->rebindproc == NULL) {
- ldap_set_rebind_proc(ld->link, _ldap_rebind_proc, (void *) link);
- } else {
- zval_dtor(ld->rebindproc);
- }
-
- ALLOC_ZVAL(ld->rebindproc);
- *ld->rebindproc = *callback;
- zval_copy_ctor(ld->rebindproc);
- RETURN_TRUE;
-}
-/* }}} */
-#endif
-
-#ifdef STR_TRANSLATION
-/* {{{ php_ldap_do_translate
- */
-static void php_ldap_do_translate(INTERNAL_FUNCTION_PARAMETERS, int way)
-{
- zval **value;
- char *ldap_buf;
- unsigned long ldap_len;
- int result;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &value) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_string_ex(value);
- ldap_buf = Z_STRVAL_PP(value);
- ldap_len = Z_STRLEN_PP(value);
-
- if (ldap_len == 0) {
- RETURN_FALSE;
- }
-
- if (way == 1) {
- result = ldap_8859_to_t61(&ldap_buf, &ldap_len, 0);
- } else {
- result = ldap_t61_to_8859(&ldap_buf, &ldap_len, 0);
- }
-
- if (result == LDAP_SUCCESS) {
- RETVAL_STRINGL(ldap_buf, ldap_len, 1);
- free(ldap_buf);
- } else {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Conversion from iso-8859-1 to t61 failed: %s", ldap_err2string(result));
- RETVAL_FALSE;
- }
-
- return;
-}
-/* }}} */
-
-/* {{{ proto string ldap_t61_to_8859(string value)
- Translate t61 characters to 8859 characters */
-PHP_FUNCTION(ldap_t61_to_8859)
-{
- php_ldap_do_translate(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0);
-}
-/* }}} */
-
-/* {{{ proto string ldap_8859_to_t61(string value)
- Translate 8859 characters to t61 characters */
-PHP_FUNCTION(ldap_8859_to_t61)
-{
- php_ldap_do_translate(INTERNAL_FUNCTION_PARAM_PASSTHRU, 1);
-}
-/* }}} */
-#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/ldap/ldap.dsp b/ext/ldap/ldap.dsp
deleted file mode 100644
index a97ebe4105..0000000000
--- a/ext/ldap/ldap.dsp
+++ /dev/null
@@ -1,288 +0,0 @@
-# Microsoft Developer Studio Project File - Name="ldap" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=ldap - Win32 Debug_TS_SSL
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "ldap.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "ldap.mak" CFG="ldap - Win32 Debug_TS_SSL"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "ldap - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "ldap - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "ldap - Win32 Debug_TS" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "ldap - Win32 Release_TS" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "ldap - Win32 Release_TS SASL" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "ldap - Win32 Debug_TS SASL" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "ldap - Win32 Release_TS_SSL" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "ldap - Win32 Debug_TS_SSL" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "ldap - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release"
-# PROP Intermediate_Dir "Release"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LDAP_EXPORTS" /YX /FD /c
-# ADD CPP /nologo /MD /W3 /GX /O2 /I "..\.." /I "..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\TSRM" /I "..\..\..\php_build\openldap\include" /D "NDEBUG" /D ZEND_DEBUG=0 /D "COMPILE_DL_LDAP_LDAP" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LDAP_EXPORTS" /D "ZEND_WIN32" /D "PHP_WIN32" /D HAVE_LDAP=1 /D "COMPILE_DL_LDAP" /D "HAVE_LDAP_START_TLS_S" /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386
-# ADD LINK32 oldap32.lib olber32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib wsock32.lib php5nts.lib /nologo /dll /machine:I386 /out:"Release/php_ldap.dll" /libpath:"..\..\Release" /libpath:"..\..\..\php_build\openldap\libraries\Release"
-
-!ELSEIF "$(CFG)" == "ldap - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug"
-# PROP Intermediate_Dir "Debug"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LDAP_EXPORTS" /YX /FD /GZ /c
-# ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "..\.." /I "..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\TSRM" /I "..\..\..\php_build\openldap\include" /D "_DEBUG" /D ZEND_DEBUG=1 /D "COMPILE_DL_LDAP_LDAP" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LDAP_EXPORTS" /D "ZEND_WIN32" /D "PHP_WIN32" /D HAVE_LDAP=1 /D "COMPILE_DL_LDAP" /D "HAVE_LDAP_START_TLS_S" /FR /YX /FD /GZ /c
-# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 oldap32.lib olber32.lib php5nts_debug.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib wsock32.lib /nologo /dll /debug /machine:I386 /out:"Debug/php_ldap.dll" /pdbtype:sept /libpath:"..\..\Debug" /libpath:"..\..\..\php_build\openldap\libraries\Debug"
-
-!ELSEIF "$(CFG)" == "ldap - Win32 Debug_TS"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug_TS"
-# PROP BASE Intermediate_Dir "Debug_TS"
-# PROP BASE Ignore_Export_Lib 0
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug_TS"
-# PROP Intermediate_Dir "Debug_TS"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "..\.." /I "..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\TSRM" /I "..\..\..\openldap\include" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LDAP_EXPORTS" /D "ZEND_WIN32" /D "PHP_WIN32" /D HAVE_LDAP=1 /D ZEND_DEBUG=1 /YX /FD /GZ /c
-# ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "..\.." /I "..\..\main" /I "..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\TSRM" /I "..\..\..\php_build\openldap\include" /D "_DEBUG" /D ZEND_DEBUG=1 /D "ZTS" /D "COMPILE_DL_LDAP" /D "HAVE_LDAP_START_TLS_S" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LDAP_EXPORTS" /D "ZEND_WIN32" /D "PHP_WIN32" /D HAVE_LDAP=1 /YX /FD /GZ /c
-# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 oldap32.lib olber32.lib php5nts_debug.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib wsock32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept /libpath:"..\..\..\openldap\libraries\Debug" /libpath:"..\..\Debug"
-# ADD LINK32 oldap32.lib olber32.lib php5ts_debug.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib wsock32.lib /nologo /dll /debug /machine:I386 /out:"..\..\Debug_TS/php_ldap.dll" /pdbtype:sept /libpath:"..\..\Debug_TS" /libpath:"..\..\..\php_build\openldap\libraries\Debug"
-
-!ELSEIF "$(CFG)" == "ldap - Win32 Release_TS"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release_TS"
-# PROP BASE Intermediate_Dir "Release_TS"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release_TS"
-# PROP Intermediate_Dir "Release_TS"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MD /W3 /GX /O2 /I "..\.." /I "..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\TSRM" /I "..\..\..\openldap\include" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LDAP_EXPORTS" /D "ZEND_WIN32" /D "PHP_WIN32" /D HAVE_LDAP=1 /D ZEND_DEBUG=0 /YX /FD /c
-# ADD CPP /nologo /MD /W3 /GX /O2 /I "..\.." /I "..\..\main" /I "..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\TSRM" /I "..\..\..\php_build\openldap\include" /D "NDEBUG" /D ZEND_DEBUG=0 /D "ZTS" /D "COMPILE_DL_LDAP" /D "HAVE_LDAP_START_TLS_S" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LDAP_EXPORTS" /D "ZEND_WIN32" /D "PHP_WIN32" /D HAVE_LDAP=1 /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 oldap32.lib olber32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib wsock32.lib php5ts.lib /nologo /dll /machine:I386
-# ADD LINK32 oldap32.lib olber32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib wsock32.lib php5ts.lib /nologo /dll /machine:I386 /out:"..\..\Release_TS/php_ldap.dll" /libpath:"..\..\Release_TS" /libpath:"..\..\..\php_build\openldap\libraries\Release" /libpath:"..\..\Release_TS_Inline"
-
-!ELSEIF "$(CFG)" == "ldap - Win32 Release_TS SASL"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "ldap___Win32_Release_TS_SASL"
-# PROP BASE Intermediate_Dir "ldap___Win32_Release_TS_SASL"
-# PROP BASE Ignore_Export_Lib 0
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release_TS_SASL"
-# PROP Intermediate_Dir "Release_TS_SASL"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MD /W3 /GX /O2 /I "..\.." /I "..\..\main" /I "..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\TSRM" /I "..\..\..\php_build\openldap\include" /D "NDEBUG" /D ZEND_DEBUG=0 /D "ZTS" /D "COMPILE_DL_LDAP" /D "HAVE_LDAP_START_TLS_S" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LDAP_EXPORTS" /D "ZEND_WIN32" /D "PHP_WIN32" /D HAVE_LDAP=1 /YX /FD /c
-# ADD CPP /nologo /MD /W3 /GX /O2 /I "..\.." /I "..\..\main" /I "..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\TSRM" /I "..\..\..\php_build\openldap\include" /D "NDEBUG" /D ZEND_DEBUG=0 /D "ZTS" /D "COMPILE_DL_LDAP" /D "HAVE_LDAP_START_TLS_S" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LDAP_EXPORTS" /D "ZEND_WIN32" /D "PHP_WIN32" /D HAVE_LDAP=1 /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 oldap32.lib olber32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib wsock32.lib php5ts.lib /nologo /dll /machine:I386 /out:"..\..\Release_TS/php_ldap.dll" /libpath:"..\..\Release_TS" /libpath:"..\..\..\php_build\openldap\libraries\Release" /libpath:"..\..\Release_TS_Inline"
-# ADD LINK32 oldap32.lib olber32.lib libsasl.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib wsock32.lib php5ts.lib /nologo /dll /machine:I386 /out:"..\..\Release_TS/php_ldap.dll" /libpath:"..\..\Release_TS" /libpath:"..\..\..\php_build\openldap\libraries\Release" /libpath:"..\..\Release_TS_Inline"
-
-!ELSEIF "$(CFG)" == "ldap - Win32 Debug_TS SASL"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "ldap___Win32_Debug_TS_SASL"
-# PROP BASE Intermediate_Dir "ldap___Win32_Debug_TS_SASL"
-# PROP BASE Ignore_Export_Lib 0
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug_TS_SASL"
-# PROP Intermediate_Dir "Debug_TS_SASL"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "..\.." /I "..\..\main" /I "..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\TSRM" /I "..\..\..\php_build\openldap\include" /D "_DEBUG" /D ZEND_DEBUG=1 /D "ZTS" /D "COMPILE_DL_LDAP" /D "HAVE_LDAP_START_TLS_S" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LDAP_EXPORTS" /D "ZEND_WIN32" /D "PHP_WIN32" /D HAVE_LDAP=1 /YX /FD /GZ /c
-# ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "..\.." /I "..\..\main" /I "..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\TSRM" /I "..\..\..\php_build\openldap\include" /D "_DEBUG" /D ZEND_DEBUG=1 /D "ZTS" /D "COMPILE_DL_LDAP" /D "HAVE_LDAP_START_TLS_S" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LDAP_EXPORTS" /D "ZEND_WIN32" /D "PHP_WIN32" /D HAVE_LDAP=1 /YX /FD /GZ /c
-# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 oldap32.lib olber32.lib php5ts_debug.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib wsock32.lib /nologo /dll /debug /machine:I386 /out:"Debug_TS/php_ldap.dll" /pdbtype:sept /libpath:"..\..\Debug_TS" /libpath:"..\..\..\php_build\openldap\libraries\Debug"
-# ADD LINK32 oldap32.lib olber32.lib libsasl.lib php5ts_debug.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib wsock32.lib /nologo /dll /debug /machine:I386 /out:"..\..\Debug_TS/php_ldap.dll" /pdbtype:sept /libpath:"..\..\Debug_TS" /libpath:"..\..\..\php_build\openldap\libraries\Debug"
-
-!ELSEIF "$(CFG)" == "ldap - Win32 Release_TS_SSL"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "ldap___Win32_Release_TS_SSL"
-# PROP BASE Intermediate_Dir "ldap___Win32_Release_TS_SSL"
-# PROP BASE Ignore_Export_Lib 0
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release_TS_SSL"
-# PROP Intermediate_Dir "Release_TS_SSL"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MD /W3 /GX /O2 /I "..\.." /I "..\..\main" /I "..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\TSRM" /I "..\..\..\php_build\openldap\include" /D "NDEBUG" /D ZEND_DEBUG=0 /D "ZTS" /D "COMPILE_DL_LDAP" /D "HAVE_LDAP_START_TLS_S" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LDAP_EXPORTS" /D "ZEND_WIN32" /D "PHP_WIN32" /D HAVE_LDAP=1 /YX /FD /c
-# ADD CPP /nologo /MD /W3 /GX /O2 /I "..\.." /I "..\..\main" /I "..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\TSRM" /I "..\..\..\php_build\openldap\include" /D "NDEBUG" /D ZEND_DEBUG=0 /D "ZTS" /D "COMPILE_DL_LDAP" /D "HAVE_LDAP_START_TLS_S" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LDAP_EXPORTS" /D "ZEND_WIN32" /D "PHP_WIN32" /D HAVE_LDAP=1 /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 oldap32.lib olber32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib wsock32.lib php5ts.lib /nologo /dll /machine:I386 /out:"..\..\Release_TS/php_ldap.dll" /libpath:"..\..\Release_TS" /libpath:"..\..\..\php_build\openldap\libraries\Release" /libpath:"..\..\Release_TS_Inline"
-# ADD LINK32 php5ts.lib oldap32.lib olber32.lib ssleay32.lib libeay32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib wsock32.lib /nologo /dll /machine:I386 /out:"..\..\Release_TS/php_ldap.dll" /libpath:"..\..\Release_TS" /libpath:"..\..\..\php_build\openldap\libraries\Release" /libpath:"..\..\Release_TS_Inline"
-
-!ELSEIF "$(CFG)" == "ldap - Win32 Debug_TS_SSL"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "ldap___Win32_Debug_TS_SSL"
-# PROP BASE Intermediate_Dir "ldap___Win32_Debug_TS_SSL"
-# PROP BASE Ignore_Export_Lib 0
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug_TS_SSL"
-# PROP Intermediate_Dir "Debug_TS_SSL"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "..\.." /I "..\..\main" /I "..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\TSRM" /I "..\..\..\php_build\openldap\include" /D "_DEBUG" /D ZEND_DEBUG=1 /D "ZTS" /D "COMPILE_DL_LDAP" /D "HAVE_LDAP_START_TLS_S" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LDAP_EXPORTS" /D "ZEND_WIN32" /D "PHP_WIN32" /D HAVE_LDAP=1 /YX /FD /GZ /c
-# ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "..\.." /I "..\..\main" /I "..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\TSRM" /I "..\..\..\php_build\openldap\include" /D "_DEBUG" /D ZEND_DEBUG=1 /D "ZTS" /D "COMPILE_DL_LDAP" /D "HAVE_LDAP_START_TLS_S" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LDAP_EXPORTS" /D "ZEND_WIN32" /D "PHP_WIN32" /D HAVE_LDAP=1 /YX /FD /GZ /c
-# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 oldap32.lib olber32.lib php5ts_debug.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib wsock32.lib /nologo /dll /debug /machine:I386 /out:"..\..\Debug_TS/php_ldap.dll" /pdbtype:sept /libpath:"..\..\Debug_TS" /libpath:"..\..\..\php_build\openldap\libraries\Debug"
-# ADD LINK32 php5ts_debug.lib oldap32.lib olber32.lib ssleay32.lib libeay32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib wsock32.lib /nologo /dll /debug /machine:I386 /out:"..\..\Debug_TS/php_ldap.dll" /pdbtype:sept /libpath:"..\..\Debug_TS" /libpath:"..\..\..\php_build\openldap\libraries\Debug"
-
-!ENDIF
-
-# Begin Target
-
-# Name "ldap - Win32 Release"
-# Name "ldap - Win32 Debug"
-# Name "ldap - Win32 Debug_TS"
-# Name "ldap - Win32 Release_TS"
-# Name "ldap - Win32 Release_TS SASL"
-# Name "ldap - Win32 Debug_TS SASL"
-# Name "ldap - Win32 Release_TS_SSL"
-# Name "ldap - Win32 Debug_TS_SSL"
-# Begin Group "Source Files"
-
-# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
-# Begin Source File
-
-SOURCE=.\ldap.c
-# End Source File
-# End Group
-# Begin Group "Header Files"
-
-# PROP Default_Filter "h;hpp;hxx;hm;inl"
-# Begin Source File
-
-SOURCE=.\php_ldap.h
-# End Source File
-# End Group
-# Begin Group "Resource Files"
-
-# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
-# End Group
-# Begin Source File
-
-SOURCE=.\LDAP_Win32_HOWTO.txt
-# End Source File
-# End Target
-# End Project
diff --git a/ext/ldap/ldap.mak b/ext/ldap/ldap.mak
deleted file mode 100644
index 959fe16cf1..0000000000
--- a/ext/ldap/ldap.mak
+++ /dev/null
@@ -1,173 +0,0 @@
-# Temporarily here -- later may go into some batch file
-# which will set this as an environment variable
-PROJECT_ROOT = ..\..
-
-# Module details
-MODULE_NAME = php_ldap
-MODULE_DESC = "PHP 5 - LDAP Extension"
-VMAJ = 3
-VMIN = 0
-VREV = 0
-
-#include the common settings
-include $(PROJECT_ROOT)/netware/common.mif
-
-# Extensions of all input and output files
-.SUFFIXES:
-.SUFFIXES: .nlm .lib .obj .cpp .c .msg .mlc .mdb .xdc .d
-
-# Source files
-C_SRC = ldap.c \
- start.c
-
-CPP_SRC_NODIR = $(notdir $(CPP_SRC))
-C_SRC_NODIR = $(notdir $(C_SRC))
-SRC_DIR = $(dir $(CPP_SRC) $(C_SRC))
-
-# Library files
-LIBRARY =
-
-# Destination directories and files
-OBJ_DIR = $(BUILD)
-FINAL_DIR = $(BUILD)
-MAP_FILE = $(FINAL_DIR)\$(MODULE_NAME).map
-OBJECTS = $(addprefix $(OBJ_DIR)/,$(CPP_SRC_NODIR:.c=.obj) $(C_SRC_NODIR:.c=.obj))
-DEPDS = $(addprefix $(OBJ_DIR)/,$(CPP_SRC_NODIR:.c=.d) $(C_SRC_NODIR:.c=.d))
-
-# Binary file
-ifndef BINARY
- BINARY=$(FINAL_DIR)\$(MODULE_NAME).nlm
-endif
-
-# Compile flags
-C_FLAGS += -c -maxerrors 25 -msgstyle gcc
-C_FLAGS += -wchar_t on -bool on
-C_FLAGS += -processor Pentium
-C_FLAGS += -nostdinc -nosyspath
-C_FLAGS += -relax_pointers # To remove type-casting errors
-C_FLAGS += -DNETWARE -DZTS
-C_FLAGS += -DNEW_LIBC
-C_FLAGS += -DCOMPILE_DL_LDAP
-C_FLAGS += -I. -I- -I$(PROJECT_ROOT) -I$(PROJECT_ROOT)/main
-C_FLAGS += -I$(PROJECT_ROOT)/ext/standard -I$(PROJECT_ROOT)/netware
-C_FLAGS += -I$(PROJECT_ROOT)/zend -I$(PROJECT_ROOT)/tsrm
-C_FLAGS += -I$(SDK_DIR)/include -I$(MWCIncludes)
-C_FLAGS += -I$(LDAP_DIR)/inc
-C_FLAGS += -I$(WINSOCK_DIR)/include/nlm -I$(WINSOCK_DIR)/include
-
-ifndef STACK_SIZE
-STACK_SIZE=8192
-endif
-
-# Extra stuff based on debug / release builds
-ifeq '$(BUILD)' 'debug'
- SYM_FILE = $(FINAL_DIR)\$(MODULE_NAME).sym
- C_FLAGS += -inline smart -sym on -sym codeview4 -opt off -opt intrinsics -sym internal -DDEBUGGING -DDKFBPON
- C_FLAGS += -exc cw -DZEND_DEBUG=1
- LD_FLAGS += -sym on -sym codeview4 -osym $(SYM_FILE)
- export MWLibraryFiles=$(SDK_DIR)/imports/libcpre.o;mwcrtld.lib
-else
- C_FLAGS += -opt speed -inline on -inline smart -inline auto -sym off
- C_FLAGS += -opt intrinsics
- C_FLAGS += -opt level=4 -DZEND_DEBUG=0
- LD_FLAGS += -sym off
- export MWLibraryFiles=$(SDK_DIR)/imports/libcpre.o;mwcrtl.lib
-endif
-
-# Dependencies
-MODULE = LibC \
- ldapsdk \
- phplib
-IMPORT = @$(SDK_DIR)/imports/libc.imp \
- @$(SDK_DIR)/imports/ws2nlm.imp \
- @$(MPK_DIR)/import/mpkOrg.imp \
- @$(LDAP_DIR)/lib/nlm/Ldapsdk.imp \
- @$(PROJECT_ROOT)/netware/phplib.imp
-EXPORT = ($(MODULE_NAME)) get_module
-API = OutputToScreen
-
-
-# Virtual paths
-vpath %.cpp .
-vpath %.c . ..\..\netware
-vpath %.obj $(OBJ_DIR)
-
-
-all: prebuild project
-
-.PHONY: all
-
-prebuild:
- @if not exist $(OBJ_DIR) md $(OBJ_DIR)
-
-project: $(BINARY)
- @echo Build complete.
-
-$(OBJ_DIR)/%.d: %.cpp
- @echo Building Dependencies for $(<F)
- @$(CC) -M $< $(C_FLAGS) -o $@
-
-$(OBJ_DIR)/%.d: %.c
- @echo Building Dependencies for $(<F)
- @$(CC) -M $< $(C_FLAGS) -o $@
-
-$(OBJ_DIR)/%.obj: %.cpp
- @echo Compiling $?...
- @$(CC) $< $(C_FLAGS) -o $@
-
-$(OBJ_DIR)/%.obj: %.c
- @echo Compiling $?...
- @$(CC) $< $(C_FLAGS) -o $@
-
-
-$(BINARY): $(OBJECTS)
- @echo Import $(IMPORT) > $(basename $@).def
-ifdef API
- @echo Import $(API) >> $(basename $@).def
-endif
- @echo Module $(MODULE) >> $(basename $@).def
-ifdef EXPORT
- @echo Export $(EXPORT) >> $(basename $@).def
-endif
- @echo AutoUnload >> $(basename $@).def
-ifeq '$(BUILD)' 'debug'
- @echo Debug >> $(basename $@).def
-endif
- @echo Flag_On 0x00000008 >> $(basename $@).def
- @echo Start _LibCPrelude >> $(basename $@).def
- @echo Exit _LibCPostlude >> $(basename $@).def
-
- $(MPKTOOL) $(XDCFLAGS) $(basename $@).xdc
- @echo xdcdata $(basename $@).xdc >> $(basename $@).def
-
- @echo Linking $@...
- @echo $(LD_FLAGS) -commandfile $(basename $@).def > $(basename $@).link
- @echo $(LIBRARY) $(OBJECTS) >> $(basename $@).link
-
- @$(LINK) @$(basename $@).link
-
-
-.PHONY: clean
-clean: cleanobj cleanbin
-
-.PHONY: cleand
-cleand:
- @echo Deleting all dependency files...
- -@del "$(OBJ_DIR)\*.d"
-
-.PHONY: cleanobj
-cleanobj:
- @echo Deleting all object files...
- -@del "$(OBJ_DIR)\*.obj"
-
-.PHONY: cleanbin
-cleanbin:
- @echo Deleting binary files...
- -@del "$(FINAL_DIR)\$(MODULE_NAME).nlm"
- @echo Deleting MAP, DEF files, etc....
- -@del "$(FINAL_DIR)\$(MODULE_NAME).map"
- -@del "$(FINAL_DIR)\$(MODULE_NAME).def"
- -@del "$(FINAL_DIR)\$(MODULE_NAME).link"
-ifeq '$(BUILD)' 'debug'
- -@del $(FINAL_DIR)\$(MODULE_NAME).sym
-endif
diff --git a/ext/ldap/php_ldap.h b/ext/ldap/php_ldap.h
deleted file mode 100644
index 7260939cbd..0000000000
--- a/ext/ldap/php_ldap.h
+++ /dev/null
@@ -1,110 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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. |
- +----------------------------------------------------------------------+
- | Authors: Amitay Isaacs <amitay@w-o-i.com> |
- | Eric Warnke <ericw@albany.edu> |
- | Jani Taskinen <sniper@iki.fi> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifndef PHP_LDAP_H
-#define PHP_LDAP_H
-
-#ifndef HAVE_ORALDAP
-#include <lber.h>
-#endif
-#include <ldap.h>
-
-extern zend_module_entry ldap_module_entry;
-#define ldap_module_ptr &ldap_module_entry
-
-/* LDAP functions */
-PHP_MINIT_FUNCTION(ldap);
-PHP_MSHUTDOWN_FUNCTION(ldap);
-PHP_MINFO_FUNCTION(ldap);
-
-PHP_FUNCTION(ldap_connect);
-PHP_FUNCTION(ldap_bind);
-#ifdef HAVE_LDAP_SASL
-PHP_FUNCTION(ldap_sasl_bind);
-#endif
-PHP_FUNCTION(ldap_unbind);
-PHP_FUNCTION(ldap_read);
-PHP_FUNCTION(ldap_list);
-PHP_FUNCTION(ldap_search);
-PHP_FUNCTION(ldap_free_result);
-PHP_FUNCTION(ldap_count_entries);
-PHP_FUNCTION(ldap_first_entry);
-PHP_FUNCTION(ldap_next_entry);
-PHP_FUNCTION(ldap_get_entries);
-PHP_FUNCTION(ldap_first_attribute);
-PHP_FUNCTION(ldap_next_attribute);
-PHP_FUNCTION(ldap_get_attributes);
-PHP_FUNCTION(ldap_get_values);
-PHP_FUNCTION(ldap_get_values_len);
-PHP_FUNCTION(ber_free);
-PHP_FUNCTION(ldap_get_dn);
-PHP_FUNCTION(ldap_explode_dn);
-PHP_FUNCTION(ldap_dn2ufn);
-PHP_FUNCTION(ldap_add);
-PHP_FUNCTION(ldap_delete);
-PHP_FUNCTION(ldap_mod_add);
-PHP_FUNCTION(ldap_mod_replace);
-PHP_FUNCTION(ldap_mod_del);
-PHP_FUNCTION(ldap_errno);
-PHP_FUNCTION(ldap_err2str);
-PHP_FUNCTION(ldap_error);
-PHP_FUNCTION(ldap_compare);
-PHP_FUNCTION(ldap_sort);
-
-#if (LDAP_API_VERSION > 2000) || HAVE_NSLDAP
-PHP_FUNCTION(ldap_get_option);
-PHP_FUNCTION(ldap_set_option);
-PHP_FUNCTION(ldap_parse_result);
-PHP_FUNCTION(ldap_first_reference);
-PHP_FUNCTION(ldap_next_reference);
-PHP_FUNCTION(ldap_parse_reference);
-PHP_FUNCTION(ldap_rename);
-#endif
-
-#if LDAP_API_VERSION > 2000
-PHP_FUNCTION(ldap_start_tls);
-#endif
-
-#if defined(LDAP_API_FEATURE_X_OPENLDAP) && defined(HAVE_3ARG_SETREBINDPROC)
-PHP_FUNCTION(ldap_set_rebind_proc);
-#endif
-
-#ifdef STR_TRANSLATION
-PHP_FUNCTION(ldap_t61_to_8859);
-PHP_FUNCTION(ldap_8859_to_t61);
-#endif
-
-ZEND_BEGIN_MODULE_GLOBALS(ldap)
- long num_links;
- long max_links;
-ZEND_END_MODULE_GLOBALS(ldap)
-
-#ifdef ZTS
-# define LDAPG(v) TSRMG(ldap_globals_id, zend_ldap_globals *, v)
-#else
-# define LDAPG(v) (ldap_globals.v)
-#endif
-
-
-#define phpext_ldap_ptr ldap_module_ptr
-
-#endif /* PHP_LDAP_H */
diff --git a/ext/libxml/CREDITS b/ext/libxml/CREDITS
deleted file mode 100644
index 9b744ae5fb..0000000000
--- a/ext/libxml/CREDITS
+++ /dev/null
@@ -1,2 +0,0 @@
-LIBXML
-Christian Stocker, Rob Richards, Marcus Boerger, Wez Furlong, Shane Caraveo
diff --git a/ext/libxml/config.w32 b/ext/libxml/config.w32
deleted file mode 100644
index 711e456f43..0000000000
--- a/ext/libxml/config.w32
+++ /dev/null
@@ -1,22 +0,0 @@
-// $Id$
-// vim:ft=javascript
-
-ARG_WITH("libxml", "LibXML support", "yes");
-
-if (PHP_LIBXML == "yes") {
- if (CHECK_LIB("libxml2_a.lib;libxml2.lib", "libxml") &&
- CHECK_LIB("iconv_a.lib;iconv.lib", "libxml") &&
- CHECK_HEADER_ADD_INCLUDE("libxml/parser.h", "CFLAGS")) {
-
- EXTENSION("libxml", "libxml.c", false /* never shared */);
- AC_DEFINE("HAVE_LIBXML", 1, "LibXML support");
- ADD_FLAG("CFLAGS", "/D LIBXML_THREAD_ENABLED");
- ADD_FLAG("CFLAGS_LIBXML", "/D LIBXML_STATIC ");
- if (!PHP_LIBXML_SHARED) {
- ADD_DEF_FILE("ext\\libxml\\php_libxml2.def");
- }
- ADD_EXTENSION_DEP('libxml', 'iconv');
- }
-}
-
-
diff --git a/ext/libxml/config0.m4 b/ext/libxml/config0.m4
deleted file mode 100644
index ecab8c1d2f..0000000000
--- a/ext/libxml/config0.m4
+++ /dev/null
@@ -1,24 +0,0 @@
-dnl
-dnl $Id$
-dnl
-
-PHP_ARG_ENABLE(libxml, whether to enable LIBXML support,
-[ --disable-libxml Disable new LIBXML support.], yes)
-
-if test -z "$PHP_LIBXML_DIR"; then
- PHP_ARG_WITH(libxml-dir, libxml2 install dir,
- [ --with-libxml-dir[=DIR] libxml2 install prefix.], no, no)
-fi
-
-if test "$PHP_LIBXML" != "no"; then
-
- dnl This extension can not be build as shared
- ext_shared=no
-
- PHP_SETUP_LIBXML(LIBXML_SHARED_LIBADD, [
- AC_DEFINE(HAVE_LIBXML,1,[ ])
- PHP_NEW_EXTENSION(libxml, [libxml.c], $ext_shared)
- ], [
- AC_MSG_ERROR([xml2-config not found. Please check your libxml2 installation.])
- ])
-fi
diff --git a/ext/libxml/libxml.c b/ext/libxml/libxml.c
deleted file mode 100644
index 7a8b4d2d2c..0000000000
--- a/ext/libxml/libxml.c
+++ /dev/null
@@ -1,690 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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. |
- +----------------------------------------------------------------------+
- | Authors: Shane Caraveo <shane@php.net> |
- | Wez Furlong <wez@thebrainroom.com> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-#define IS_EXT_MODULE
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "php.h"
-
-#define PHP_XML_INTERNAL
-#include "zend_variables.h"
-#include "ext/standard/php_string.h"
-#include "ext/standard/info.h"
-#include "ext/standard/file.h"
-
-#if HAVE_LIBXML
-
-#include <libxml/parser.h>
-#include <libxml/parserInternals.h>
-#include <libxml/tree.h>
-#include <libxml/uri.h>
-#include <libxml/xmlerror.h>
-#ifdef LIBXML_SCHEMAS_ENABLED
-#include <libxml/relaxng.h>
-#endif
-
-#include "php_libxml.h"
-
-#define PHP_LIBXML_ERROR 0
-#define PHP_LIBXML_CTX_ERROR 1
-#define PHP_LIBXML_CTX_WARNING 2
-
-/* a true global for initialization */
-int _php_libxml_initialized = 0;
-
-typedef struct _php_libxml_func_handler {
- php_libxml_export_node export_func;
-} php_libxml_func_handler;
-
-static HashTable php_libxml_exports;
-
-#ifdef ZTS
-int libxml_globals_id;
-#else
-PHP_LIBXML_API php_libxml_globals libxml_globals;
-#endif
-
-/* {{{ dynamically loadable module stuff */
-#ifdef COMPILE_DL_LIBXML
-ZEND_GET_MODULE(libxml)
-# ifdef PHP_WIN32
-# include "zend_arg_defs.c"
-# endif
-#endif /* COMPILE_DL_LIBXML */
-/* }}} */
-
-/* {{{ function prototypes */
-PHP_MINIT_FUNCTION(libxml);
-PHP_RINIT_FUNCTION(libxml);
-PHP_MSHUTDOWN_FUNCTION(libxml);
-PHP_RSHUTDOWN_FUNCTION(libxml);
-PHP_MINFO_FUNCTION(libxml);
-
-/* }}} */
-
-/* {{{ extension definition structures */
-function_entry libxml_functions[] = {
- PHP_FE(libxml_set_streams_context, NULL)
- {NULL, NULL, NULL}
-};
-
-zend_module_entry libxml_module_entry = {
- STANDARD_MODULE_HEADER,
- "libxml", /* extension name */
- libxml_functions, /* extension function list */
- PHP_MINIT(libxml), /* extension-wide startup function */
- PHP_MSHUTDOWN(libxml), /* extension-wide shutdown function */
- PHP_RINIT(libxml), /* per-request startup function */
- PHP_RSHUTDOWN(libxml), /* per-request shutdown function */
- PHP_MINFO(libxml), /* information function */
- NO_VERSION_YET,
- STANDARD_MODULE_PROPERTIES
-};
-
-/* }}} */
-
-/* {{{ internal functions for interoperability */
-static int php_libxml_dec_node(php_libxml_node_ptr *nodeptr)
-{
- int ret_refcount;
-
- ret_refcount = --nodeptr->refcount;
- if (ret_refcount == 0) {
- if (nodeptr->node != NULL && nodeptr->node->type != XML_DOCUMENT_NODE) {
- nodeptr->node->_private = NULL;
- }
- /* node is destroyed by another object. reset ret_refcount to 1 and node to NULL
- so the php_libxml_node_ptr is detroyed when the object is destroyed */
- nodeptr->refcount = 1;
- nodeptr->node = NULL;
- }
-
- return ret_refcount;
-}
-
-static int php_libxml_clear_object(php_libxml_node_object *object TSRMLS_DC)
-{
- if (object->properties) {
- object->properties = NULL;
- }
- php_libxml_decrement_node_ptr(object TSRMLS_CC);
- return php_libxml_decrement_doc_ref(object TSRMLS_CC);
-}
-
-static int php_libxml_unregister_node(xmlNodePtr nodep TSRMLS_DC)
-{
- php_libxml_node_object *wrapper;
-
- php_libxml_node_ptr *nodeptr = nodep->_private;
-
- if (nodeptr != NULL) {
- wrapper = nodeptr->_private;
- if (wrapper) {
- php_libxml_clear_object(wrapper TSRMLS_CC);
- } else {
- php_libxml_dec_node(nodeptr);
- }
- }
-
- return -1;
-}
-
-static void php_libxml_node_free(xmlNodePtr node)
-{
- if(node) {
- if (node->_private != NULL) {
- ((php_libxml_node_ptr *) node->_private)->node = NULL;
- }
- switch (node->type) {
- case XML_ATTRIBUTE_NODE:
- xmlFreeProp((xmlAttrPtr) node);
- break;
- case XML_ENTITY_DECL:
- case XML_ELEMENT_DECL:
- case XML_ATTRIBUTE_DECL:
- break;
- case XML_NOTATION_NODE:
- /* These require special handling */
- if (node->name != NULL) {
- xmlFree((char *) node->name);
- }
- if (((xmlEntityPtr) node)->ExternalID != NULL) {
- xmlFree((char *) ((xmlEntityPtr) node)->ExternalID);
- }
- if (((xmlEntityPtr) node)->SystemID != NULL) {
- xmlFree((char *) ((xmlEntityPtr) node)->SystemID);
- }
- xmlFree(node);
- break;
- case XML_NAMESPACE_DECL:
- if (node->ns) {
- xmlFreeNs(node->ns);
- node->ns = NULL;
- }
- node->type = XML_ELEMENT_NODE;
- default:
- xmlFreeNode(node);
- }
- }
-}
-
-static void php_libxml_node_free_list(xmlNodePtr node TSRMLS_DC)
-{
- xmlNodePtr curnode;
-
- if (node != NULL) {
- curnode = node;
- while (curnode != NULL) {
- node = curnode;
- switch (node->type) {
- /* Skip property freeing for the following types */
- case XML_NOTATION_NODE:
- break;
- case XML_ENTITY_REF_NODE:
- php_libxml_node_free_list((xmlNodePtr) node->properties TSRMLS_CC);
- break;
- case XML_ATTRIBUTE_DECL:
- case XML_DTD_NODE:
- case XML_DOCUMENT_TYPE_NODE:
- case XML_ENTITY_DECL:
- case XML_ATTRIBUTE_NODE:
- case XML_NAMESPACE_DECL:
- php_libxml_node_free_list(node->children TSRMLS_CC);
- break;
- default:
- php_libxml_node_free_list(node->children TSRMLS_CC);
- php_libxml_node_free_list((xmlNodePtr) node->properties TSRMLS_CC);
- }
-
- curnode = node->next;
- xmlUnlinkNode(node);
- if (php_libxml_unregister_node(node TSRMLS_CC) == 0) {
- node->doc = NULL;
- }
- php_libxml_node_free(node);
- }
- }
-}
-
-/* }}} */
-
-/* {{{ startup, shutdown and info functions */
-#ifdef ZTS
-static void php_libxml_init_globals(php_libxml_globals *libxml_globals_p TSRMLS_DC)
-{
- LIBXML(stream_context) = NULL;
- LIBXML(error_buffer).c = NULL;
-}
-#endif
-
-/* Channel libxml file io layer through the PHP streams subsystem.
- * This allows use of ftps:// and https:// urls */
-
-int php_libxml_streams_IO_match_wrapper(const char *filename)
-{
- TSRMLS_FETCH();
-
- if (zend_is_executing(TSRMLS_C)) {
- return php_stream_locate_url_wrapper(filename, NULL, 0 TSRMLS_CC) ? 1 : 0;
- }
- return 0;
-}
-
-void *php_libxml_streams_IO_open_wrapper(const char *filename, const char *mode, const int read_only)
-{
- php_stream_statbuf ssbuf;
- php_stream_context *context = NULL;
- php_stream_wrapper *wrapper = NULL;
- char *resolved_path, *path_to_open = NULL;
- void *ret_val = NULL;
-
- TSRMLS_FETCH();
- resolved_path = xmlURIUnescapeString(filename, 0, NULL);
-
- if (resolved_path == NULL) {
- return NULL;
- }
-
- /* logic copied from _php_stream_stat, but we only want to fail
- if the wrapper supports stat, otherwise, figure it out from
- the open. This logic is only to support hiding warnings
- that the streams layer puts out at times, but for libxml we
- may try to open files that don't exist, but it is not a failure
- in xml processing (eg. DTD files) */
- wrapper = php_stream_locate_url_wrapper(resolved_path, &path_to_open, ENFORCE_SAFE_MODE TSRMLS_CC);
- if (wrapper && read_only && wrapper->wops->url_stat) {
- if (wrapper->wops->url_stat(wrapper, path_to_open, 0, &ssbuf, NULL TSRMLS_CC) == -1) {
- xmlFree(resolved_path);
- return NULL;
- }
- }
-
- if (LIBXML(stream_context)) {
- context = zend_fetch_resource(&LIBXML(stream_context) TSRMLS_CC, -1, "Stream-Context", NULL, 1, php_le_stream_context());
- ret_val = php_stream_open_wrapper_ex(path_to_open, (char *)mode, ENFORCE_SAFE_MODE|REPORT_ERRORS, NULL, context);
- xmlFree(resolved_path);
- return ret_val;
- }
- ret_val = php_stream_open_wrapper(path_to_open, (char *)mode, ENFORCE_SAFE_MODE|REPORT_ERRORS, NULL);
- xmlFree(resolved_path);
- return ret_val;
-}
-
-void *php_libxml_streams_IO_open_read_wrapper(const char *filename)
-{
- return php_libxml_streams_IO_open_wrapper(filename, "rb", 1);
-}
-
-void *php_libxml_streams_IO_open_write_wrapper(const char *filename)
-{
- return php_libxml_streams_IO_open_wrapper(filename, "wb", 0);
-}
-
-int php_libxml_streams_IO_read(void *context, char *buffer, int len)
-{
- TSRMLS_FETCH();
- return php_stream_read((php_stream*)context, buffer, len);
-}
-
-int php_libxml_streams_IO_write(void *context, const char *buffer, int len)
-{
- TSRMLS_FETCH();
- return php_stream_write((php_stream*)context, buffer, len);
-}
-
-int php_libxml_streams_IO_close(void *context)
-{
- TSRMLS_FETCH();
- return php_stream_close((php_stream*)context);
-}
-
-static void php_libxml_ctx_error_level(int level, void *ctx, const char *msg TSRMLS_DC)
-{
- xmlParserCtxtPtr parser;
-
- parser = (xmlParserCtxtPtr) ctx;
-
- if (parser != NULL && parser->input != NULL) {
- if (parser->input->filename) {
- php_error_docref(NULL TSRMLS_CC, level, "%s in %s, line: %d", msg, parser->input->filename, parser->input->line);
- } else {
- php_error_docref(NULL TSRMLS_CC, level, "%s in Entity, line: %d", msg, parser->input->line);
- }
- }
-}
-
-static void php_libxml_internal_error_handler(int error_type, void *ctx, const char **msg, va_list ap)
-{
- char *buf;
- int len, len_iter, output = 0;
-
- TSRMLS_FETCH();
-
- len = vspprintf(&buf, 0, *msg, ap);
- len_iter = len;
-
- /* remove any trailing \n */
- while (len_iter && buf[--len_iter] == '\n') {
- buf[len_iter] = '\0';
- output = 1;
- }
-
- smart_str_appendl(&LIBXML(error_buffer), buf, len);
-
- efree(buf);
-
- if (output == 1) {
- switch (error_type) {
- case PHP_LIBXML_CTX_ERROR:
- php_libxml_ctx_error_level(E_WARNING, ctx, LIBXML(error_buffer).c TSRMLS_CC);
- break;
- case PHP_LIBXML_CTX_WARNING:
- php_libxml_ctx_error_level(E_NOTICE, ctx, LIBXML(error_buffer).c TSRMLS_CC);
- break;
- default:
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", LIBXML(error_buffer).c);
- }
- smart_str_free(&LIBXML(error_buffer));
- }
-}
-
-void php_libxml_ctx_error(void *ctx, const char *msg, ...)
-{
- va_list args;
- va_start(args, msg);
- php_libxml_internal_error_handler(PHP_LIBXML_CTX_ERROR, ctx, &msg, args);
- va_end(args);
-}
-
-void php_libxml_ctx_warning(void *ctx, const char *msg, ...)
-{
- va_list args;
- va_start(args, msg);
- php_libxml_internal_error_handler(PHP_LIBXML_CTX_WARNING, ctx, &msg, args);
- va_end(args);
-}
-
-PHP_LIBXML_API void php_libxml_error_handler(void *ctx, const char *msg, ...)
-{
- va_list args;
- va_start(args, msg);
- php_libxml_internal_error_handler(PHP_LIBXML_ERROR, ctx, &msg, args);
- va_end(args);
-}
-
-
-PHP_LIBXML_API void php_libxml_initialize() {
- if (!_php_libxml_initialized) {
- /* we should be the only one's to ever init!! */
- xmlInitParser();
-
- /* Enable php stream/wrapper support for libxml
- we only use php streams, so we do not enable
- the default io handlers in libxml.
- */
- xmlRegisterInputCallbacks(
- php_libxml_streams_IO_match_wrapper,
- php_libxml_streams_IO_open_read_wrapper,
- php_libxml_streams_IO_read,
- php_libxml_streams_IO_close);
-
- xmlRegisterOutputCallbacks(
- php_libxml_streams_IO_match_wrapper,
- php_libxml_streams_IO_open_write_wrapper,
- php_libxml_streams_IO_write,
- php_libxml_streams_IO_close);
-
- zend_hash_init(&php_libxml_exports, 0, NULL, NULL, 1);
-
- _php_libxml_initialized = 1;
- }
-}
-
-PHP_LIBXML_API void php_libxml_shutdown() {
- if (_php_libxml_initialized) {
-#if defined(LIBXML_SCHEMAS_ENABLED)
- xmlRelaxNGCleanupTypes();
-#endif
- xmlCleanupParser();
- zend_hash_destroy(&php_libxml_exports);
- _php_libxml_initialized = 0;
- }
-}
-
-PHP_MINIT_FUNCTION(libxml)
-{
- php_libxml_initialize();
-
-#ifdef ZTS
- ts_allocate_id(&libxml_globals_id, sizeof(php_libxml_globals), (ts_allocate_ctor) php_libxml_init_globals, NULL);
-#else
- LIBXML(stream_context) = NULL;
- LIBXML(error_buffer).c = NULL;
-#endif
-
- return SUCCESS;
-}
-
-
-PHP_RINIT_FUNCTION(libxml)
-{
- /* report errors via handler rather than stderr */
- xmlSetGenericErrorFunc(NULL, php_libxml_error_handler);
-
- return SUCCESS;
-}
-
-
-PHP_MSHUTDOWN_FUNCTION(libxml)
-{
- php_libxml_shutdown();
-
- return SUCCESS;
-}
-
-
-PHP_RSHUTDOWN_FUNCTION(libxml)
-{
- /* reset libxml generic error handling */
- xmlSetGenericErrorFunc(NULL, NULL);
-
- smart_str_free(&LIBXML(error_buffer));
- return SUCCESS;
-}
-
-
-PHP_MINFO_FUNCTION(libxml)
-{
- php_info_print_table_start();
- php_info_print_table_row(2, "libXML support", "active");
- php_info_print_table_row(2, "libXML Version", LIBXML_DOTTED_VERSION);
- php_info_print_table_row(2, "libXML streams", "enabled");
- php_info_print_table_end();
-}
-/* }}} */
-
-
-/* {{{ proto void libxml_set_streams_context(resource streams_context)
- Set the streams context for the next libxml document load or write */
-PHP_FUNCTION(libxml_set_streams_context)
-{
- zval *arg;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z", &arg) == FAILURE) {
- return;
- }
- if (LIBXML(stream_context)) {
- zval_ptr_dtor(&LIBXML(stream_context));
- LIBXML(stream_context) = NULL;
- }
- ZVAL_ADDREF(arg);
- LIBXML(stream_context) = arg;
-}
-/* }}} */
-
-
-/* {{{ Common functions shared by extensions */
-int php_libxml_register_export(zend_class_entry *ce, php_libxml_export_node export_function)
-{
- php_libxml_func_handler export_hnd;
-
- /* Initialize in case this module hasnt been loaded yet */
- php_libxml_initialize();
- export_hnd.export_func = export_function;
-
- return zend_hash_add(&php_libxml_exports, ce->name, ce->name_length + 1, &export_hnd, sizeof(export_hnd), NULL);
-}
-
-PHP_LIBXML_API xmlNodePtr php_libxml_import_node(zval *object TSRMLS_DC)
-{
- zend_class_entry *ce = NULL;
- xmlNodePtr node = NULL;
- php_libxml_func_handler *export_hnd;
-
- if (object->type == IS_OBJECT) {
- ce = Z_OBJCE_P(object);
- while (ce->parent != NULL) {
- ce = ce->parent;
- }
- if (zend_hash_find(&php_libxml_exports, ce->name, ce->name_length + 1, (void **) &export_hnd) == SUCCESS) {
- node = export_hnd->export_func(object TSRMLS_CC);
- }
- }
-
- return node;
-
-}
-
-int php_libxml_increment_node_ptr(php_libxml_node_object *object, xmlNodePtr node, void *private_data TSRMLS_DC)
-{
- int ret_refcount = -1;
-
- if (object != NULL && node != NULL) {
- if (object->node != NULL) {
- if (object->node->node == node) {
- return object->node->refcount;
- } else {
- php_libxml_decrement_node_ptr(object TSRMLS_CC);
- }
- }
- if (node->_private != NULL) {
- object->node = node->_private;
- ret_refcount = ++object->node->refcount;
- /* Only dom uses _private */
- if (object->node->_private == NULL) {
- object->node->_private = private_data;
- }
- } else {
- ret_refcount = 1;
- object->node = emalloc(sizeof(php_libxml_node_ptr));
- object->node->node = node;
- object->node->refcount = 1;
- object->node->_private = private_data;
- node->_private = object->node;
- }
- }
-
- return ret_refcount;
-}
-
-int php_libxml_decrement_node_ptr(php_libxml_node_object *object TSRMLS_DC) {
- int ret_refcount = -1;
- php_libxml_node_ptr *obj_node;
-
- if (object != NULL && object->node != NULL) {
- obj_node = (php_libxml_node_ptr *) object->node;
- ret_refcount = --obj_node->refcount;
- if (ret_refcount == 0) {
- if (obj_node->node != NULL) {
- obj_node->node->_private = NULL;
- }
- efree(obj_node);
- }
- object->node = NULL;
- }
-
- return ret_refcount;
-}
-
-int php_libxml_increment_doc_ref(php_libxml_node_object *object, xmlDocPtr docp TSRMLS_DC) {
- int ret_refcount = -1;
-
- if (object->document != NULL) {
- object->document->refcount++;
- ret_refcount = object->document->refcount;
- } else if (docp != NULL) {
- ret_refcount = 1;
- object->document = emalloc(sizeof(php_libxml_ref_obj));
- object->document->ptr = docp;
- object->document->refcount = ret_refcount;
- object->document->doc_props = NULL;
- }
-
- return ret_refcount;
-}
-
-int php_libxml_decrement_doc_ref(php_libxml_node_object *object TSRMLS_DC) {
- int ret_refcount = -1;
-
- if (object != NULL && object->document != NULL) {
- ret_refcount = --object->document->refcount;
- if (ret_refcount == 0) {
- if (object->document->ptr != NULL) {
- xmlFreeDoc((xmlDoc *) object->document->ptr);
- }
- if (object->document->doc_props != NULL) {
- efree(object->document->doc_props);
- }
- efree(object->document);
- }
- object->document = NULL;
- }
-
- return ret_refcount;
-}
-
-void php_libxml_node_free_resource(xmlNodePtr node TSRMLS_DC)
-{
- if (!node) {
- return;
- }
-
- switch (node->type) {
- case XML_DOCUMENT_NODE:
- case XML_HTML_DOCUMENT_NODE:
- break;
- default:
- if (node->parent == NULL || node->type == XML_NAMESPACE_DECL) {
- php_libxml_node_free_list((xmlNodePtr) node->children TSRMLS_CC);
- switch (node->type) {
- /* Skip property freeing for the following types */
- case XML_ATTRIBUTE_DECL:
- case XML_DTD_NODE:
- case XML_DOCUMENT_TYPE_NODE:
- case XML_ENTITY_DECL:
- case XML_ATTRIBUTE_NODE:
- case XML_NAMESPACE_DECL:
- break;
- default:
- php_libxml_node_free_list((xmlNodePtr) node->properties TSRMLS_CC);
- }
- if (php_libxml_unregister_node(node TSRMLS_CC) == 0) {
- node->doc = NULL;
- }
- php_libxml_node_free(node);
- } else {
- php_libxml_unregister_node(node TSRMLS_CC);
- }
- }
-}
-
-void php_libxml_node_decrement_resource(php_libxml_node_object *object TSRMLS_DC)
-{
- int ret_refcount = -1;
- xmlNodePtr nodep;
- php_libxml_node_ptr *obj_node;
-
- if (object != NULL && object->node != NULL) {
- obj_node = (php_libxml_node_ptr *) object->node;
- nodep = object->node->node;
- ret_refcount = php_libxml_decrement_node_ptr(object TSRMLS_CC);
- if (ret_refcount == 0) {
- php_libxml_node_free_resource(nodep TSRMLS_CC);
- }
- /* Safe to call as if the resource were freed then doc pointer is NULL */
- php_libxml_decrement_doc_ref(object TSRMLS_CC);
- }
-}
-/* }}} */
-
-#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/libxml/php_libxml.h b/ext/libxml/php_libxml.h
deleted file mode 100644
index 5642abc627..0000000000
--- a/ext/libxml/php_libxml.h
+++ /dev/null
@@ -1,104 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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. |
- +----------------------------------------------------------------------+
- | Authors: Shane Caraveo <shane@php.net> |
- | Wez Furlong <wez@thebrainroom.com> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifndef PHP_LIBXML_H
-#define PHP_LIBXML_H
-
-#ifdef HAVE_LIBXML
-extern zend_module_entry libxml_module_entry;
-#define libxml_module_ptr &libxml_module_entry
-#else
-#define libxml_module_ptr NULL
-#endif
-
-#ifdef HAVE_LIBXML
-
-#ifdef PHP_WIN32
-#define PHP_LIBXML_API __declspec(dllexport)
-#else
-#define PHP_LIBXML_API
-#endif
-
-#include "ext/standard/php_smart_str.h"
-#include <libxml/tree.h>
-
-typedef struct {
- zval *stream_context;
- smart_str error_buffer;
-} php_libxml_globals;
-
-typedef struct _php_libxml_ref_obj {
- void *ptr;
- int refcount;
- void *doc_props;
-} php_libxml_ref_obj;
-
-typedef struct _php_libxml_node_ptr {
- xmlNodePtr node;
- int refcount;
- void *_private;
-} php_libxml_node_ptr;
-
-typedef struct _php_libxml_node_object {
- zend_object std;
- php_libxml_node_ptr *node;
- php_libxml_ref_obj *document;
- HashTable *properties;
-} php_libxml_node_object;
-
-typedef void * (*php_libxml_export_node) (zval *object TSRMLS_DC);
-
-PHP_FUNCTION(libxml_set_streams_context);
-int php_libxml_increment_node_ptr(php_libxml_node_object *object, xmlNodePtr node, void *private_data TSRMLS_DC);
-int php_libxml_decrement_node_ptr(php_libxml_node_object *object TSRMLS_DC);
-int php_libxml_increment_doc_ref(php_libxml_node_object *object, xmlDocPtr docp TSRMLS_DC);
-int php_libxml_decrement_doc_ref(php_libxml_node_object *object TSRMLS_DC);
-PHP_LIBXML_API xmlNodePtr php_libxml_import_node(zval *object TSRMLS_DC);
-PHP_LIBXML_API int php_libxml_register_export(zend_class_entry *ce, php_libxml_export_node export_function);
-/* When an explicit freeing of node and children is required */
-void php_libxml_node_free_resource(xmlNodePtr node TSRMLS_DC);
-/* When object dtor is called as node may still be referenced */
-void php_libxml_node_decrement_resource(php_libxml_node_object *object TSRMLS_DC);
-PHP_LIBXML_API void php_libxml_error_handler(void *ctx, const char *msg, ...);
-void php_libxml_ctx_warning(void *ctx, const char *msg, ...);
-void php_libxml_ctx_error(void *ctx, const char *msg, ...);
-
-#endif /* HAVE_LIBXML */
-
-#define phpext_libxml_ptr libxml_module_ptr
-
-#ifdef ZTS
-#define LIBXML(v) TSRMG(libxml_globals_id, php_libxml_globals *, v)
-#else
-#define LIBXML(v) (libxml_globals.v)
-#endif
-
-PHP_LIBXML_API void php_libxml_initialize();
-PHP_LIBXML_API void php_libxml_shutdown();
-
-#endif /* PHP_LIBXML_H */
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- */
diff --git a/ext/libxml/php_libxml2.def b/ext/libxml/php_libxml2.def
deleted file mode 100644
index 0dd470afce..0000000000
--- a/ext/libxml/php_libxml2.def
+++ /dev/null
@@ -1,1571 +0,0 @@
-EXPORTS
-__docbDefaultSAXHandler
-__htmlDefaultSAXHandler
-__oldXMLWDcompatibility
-__xmlBufferAllocScheme
-__xmlDefaultBufferSize
-__xmlDefaultSAXHandler
-__xmlDefaultSAXLocator
-__xmlDeregisterNodeDefaultValue
-__xmlDoValidityCheckingDefaultValue
-xmlFree DATA
-__xmlGenericError
-__xmlGenericErrorContext
-__xmlGetWarningsDefaultValue
-__xmlIndentTreeOutput
-xmlIsBaseCharGroup DATA
-xmlIsCharGroup DATA
-xmlIsCombiningGroup DATA
-xmlIsDigitGroup DATA
-xmlIsExtenderGroup DATA
-xmlIsIdeographicGroup DATA
-xmlIsPubidChar_tab DATA
-__xmlKeepBlanksDefaultValue
-xmlLastError DATA
-__xmlLineNumbersDefaultValue
-__xmlLoadExtDtdDefaultValue
-xmlMalloc DATA
-xmlMallocAtomic DATA
-xmlMemStrdup DATA
-__xmlParserDebugEntities
-xmlParserMaxDepth DATA
-__xmlParserVersion
-__xmlPedanticParserDefaultValue
-xmlRealloc DATA
-__xmlRegisterNodeDefaultValue
-__xmlSaveNoEmptyTags
-xmlStringComment DATA
-xmlStringText DATA
-xmlStringTextNoenc DATA
-xmlStructuredError DATA
-__xmlSubstituteEntitiesDefaultValue
-__xmlTreeIndentString
-xmlXPathNAN DATA
-xmlXPathNINF DATA
-xmlXPathPINF DATA
-UTF8ToHtml
-UTF8Toisolat1
-attribute
-attributeDecl
-cdataBlock
-characters
-checkNamespace
-comment
-docbCreateFileParserCtxt
-docbCreatePushParserCtxt
-docbDefaultSAXHandlerInit
-docbEncodeEntities
-docbFreeParserCtxt
-docbParseChunk
-docbParseDoc
-docbParseDocument
-docbParseFile
-docbSAXParseDoc
-docbSAXParseFile
-elementDecl
-endDocument
-endElement
-entityDecl
-externalSubset
-getColumnNumber
-getEntity
-getLineNumber
-getNamespace
-getParameterEntity
-getPublicId
-getSystemId
-globalNamespace
-hasExternalSubset
-hasInternalSubset
-htmlAttrAllowed
-htmlAutoCloseTag
-htmlCreateFileParserCtxt
-htmlCreateMemoryParserCtxt
-htmlCreatePushParserCtxt
-htmlCtxtReadDoc
-htmlCtxtReadFd
-htmlCtxtReadFile
-htmlCtxtReadIO
-htmlCtxtReadMemory
-htmlCtxtReset
-htmlCtxtUseOptions
-htmlDefaultSAXHandlerInit
-htmlDocContentDumpFormatOutput
-htmlDocContentDumpOutput
-htmlDocDump
-htmlDocDumpMemory
-htmlElementAllowedHere
-htmlElementStatusHere
-htmlEncodeEntities
-htmlEntityLookup
-htmlEntityValueLookup
-htmlFreeParserCtxt
-htmlGetMetaEncoding
-htmlHandleOmittedElem
-htmlInitAutoClose
-htmlIsAutoClosed
-htmlIsBooleanAttr
-htmlIsScriptAttribute
-htmlNewDoc
-htmlNewDocNoDtD
-htmlNodeDump
-htmlNodeDumpFile
-htmlNodeDumpFileFormat
-htmlNodeDumpFormatOutput
-htmlNodeDumpOutput
-htmlNodeStatus
-htmlParseCharRef
-htmlParseChunk
-htmlParseDoc
-htmlParseDocument
-htmlParseElement
-htmlParseEntityRef
-htmlParseFile
-htmlReadDoc
-htmlReadFd
-htmlReadFile
-htmlReadIO
-htmlReadMemory
-htmlSAXParseDoc
-htmlSAXParseFile
-htmlSaveFile
-htmlSaveFileEnc
-htmlSaveFileFormat
-htmlSetMetaEncoding
-htmlTagLookup
-ignorableWhitespace
-initGenericErrorDefaultFunc
-initdocbDefaultSAXHandler
-inithtmlDefaultSAXHandler
-initxmlDefaultSAXHandler
-inputPop
-inputPush
-internalSubset
-isStandalone
-isolat1ToUTF8
-namePop
-namePush
-namespaceDecl
-nodePop
-nodePush
-notationDecl
-processingInstruction
-reference
-resolveEntity
-setDocumentLocator
-setNamespace
-startDocument
-startElement
-unparsedEntityDecl
-valuePop
-valuePush
-xmlACatalogAdd
-xmlACatalogDump
-xmlACatalogRemove
-xmlACatalogResolve
-xmlACatalogResolvePublic
-xmlACatalogResolveSystem
-xmlACatalogResolveURI
-xmlAddAttributeDecl
-xmlAddChild
-xmlAddChildList
-xmlAddDocEntity
-xmlAddDtdEntity
-xmlAddElementDecl
-xmlAddEncodingAlias
-xmlAddID
-xmlAddNextSibling
-xmlAddNotationDecl
-xmlAddPrevSibling
-xmlAddRef
-xmlAddSibling
-xmlAllocOutputBuffer
-xmlAllocParserInputBuffer
-xmlAttrSerializeTxtContent
-xmlAutomataCompile
-xmlAutomataGetInitState
-xmlAutomataIsDeterminist
-xmlAutomataNewAllTrans
-xmlAutomataNewCountTrans
-xmlAutomataNewCountedTrans
-xmlAutomataNewCounter
-xmlAutomataNewCounterTrans
-xmlAutomataNewEpsilon
-xmlAutomataNewOnceTrans
-xmlAutomataNewState
-xmlAutomataNewTransition
-xmlAutomataNewTransition2
-xmlAutomataSetFinalState
-xmlBoolToText
-xmlBufferAdd
-xmlBufferAddHead
-xmlBufferCCat
-xmlBufferCat
-xmlBufferContent
-xmlBufferCreate
-xmlBufferCreateSize
-xmlBufferCreateStatic
-xmlBufferDump
-xmlBufferEmpty
-xmlBufferFree
-xmlBufferGrow
-xmlBufferLength
-xmlBufferResize
-xmlBufferSetAllocationScheme
-xmlBufferShrink
-xmlBufferWriteCHAR
-xmlBufferWriteChar
-xmlBufferWriteQuotedString
-xmlBuildQName
-xmlBuildURI
-xmlByteConsumed
-xmlC14NDocDumpMemory
-xmlC14NDocSave
-xmlC14NDocSaveTo
-xmlC14NExecute
-xmlCanonicPath
-xmlCatalogAdd
-xmlCatalogAddLocal
-xmlCatalogCleanup
-xmlCatalogConvert
-xmlCatalogDump
-xmlCatalogFreeLocal
-xmlCatalogGetDefaults
-xmlCatalogGetPublic
-xmlCatalogGetSystem
-xmlCatalogIsEmpty
-xmlCatalogLocalResolve
-xmlCatalogLocalResolveURI
-xmlCatalogRemove
-xmlCatalogResolve
-xmlCatalogResolvePublic
-xmlCatalogResolveSystem
-xmlCatalogResolveURI
-xmlCatalogSetDebug
-xmlCatalogSetDefaultPrefer
-xmlCatalogSetDefaults
-xmlCharEncCloseFunc
-xmlCharEncFirstLine
-xmlCharEncInFunc
-xmlCharEncOutFunc
-xmlCharInRange
-xmlCharStrdup
-xmlCharStrndup
-xmlCheckFilename
-xmlCheckHTTPInput
-xmlCheckLanguageID
-xmlCheckUTF8
-xmlCheckVersion
-xmlCleanupCharEncodingHandlers
-xmlCleanupEncodingAliases
-xmlCleanupGlobals
-xmlCleanupInputCallbacks
-xmlCleanupMemory
-xmlCleanupOutputCallbacks
-xmlCleanupParser
-xmlCleanupPredefinedEntities
-xmlCleanupThreads
-xmlClearNodeInfoSeq
-xmlClearParserCtxt
-xmlConvertSGMLCatalog
-xmlCopyAttributeTable
-xmlCopyChar
-xmlCopyCharMultiByte
-xmlCopyDoc
-xmlCopyDtd
-xmlCopyElementContent
-xmlCopyElementTable
-xmlCopyEntitiesTable
-xmlCopyEnumeration
-xmlCopyError
-xmlCopyNamespace
-xmlCopyNamespaceList
-xmlCopyNode
-xmlCopyNodeList
-xmlCopyNotationTable
-xmlCopyProp
-xmlCopyPropList
-xmlCreateDocParserCtxt
-xmlCreateEntitiesTable
-xmlCreateEntityParserCtxt
-xmlCreateEnumeration
-xmlCreateFileParserCtxt
-xmlCreateIOParserCtxt
-xmlCreateIntSubset
-xmlCreateMemoryParserCtxt
-xmlCreatePushParserCtxt
-xmlCreateURI
-xmlCreateURLParserCtxt
-xmlCtxtGetLastError
-xmlCtxtReadDoc
-xmlCtxtReadFd
-xmlCtxtReadFile
-xmlCtxtReadIO
-xmlCtxtReadMemory
-xmlCtxtReset
-xmlCtxtResetLastError
-xmlCtxtResetPush
-xmlCtxtUseOptions
-xmlCurrentChar
-xmlDictCreate
-xmlDictCreateSub
-xmlDictFree
-xmlDictLookup
-xmlDictOwns
-xmlDictQLookup
-xmlDictReference
-xmlDictSize
-xmlDebugDumpAttr
-xmlDebugDumpAttrList
-xmlDebugDumpDTD
-xmlDebugDumpDocument
-xmlDebugDumpDocumentHead
-xmlDebugDumpEntities
-xmlDebugDumpNode
-xmlDebugDumpNodeList
-xmlDebugDumpOneNode
-xmlDebugDumpString
-xmlDecodeEntities
-xmlDefaultSAXHandlerInit
-xmlDelEncodingAlias
-xmlDeregisterNodeDefault
-xmlDetectCharEncoding
-xmlDictCreate
-xmlDictCreateSub
-xmlDictFree
-xmlDictLookup
-xmlDictOwns
-xmlDictQLookup
-xmlDictReference
-xmlDictSize
-xmlDocCopyNode
-xmlDocDump
-xmlDocDumpFormatMemory
-xmlDocDumpFormatMemoryEnc
-xmlDocDumpMemory
-xmlDocDumpMemoryEnc
-xmlDocFormatDump
-xmlDocGetRootElement
-xmlDocSetRootElement
-xmlDumpAttributeDecl
-xmlDumpAttributeTable
-xmlDumpElementDecl
-xmlDumpElementTable
-xmlDumpEntitiesTable
-xmlDumpEntityDecl
-xmlDumpNotationDecl
-xmlDumpNotationTable
-xmlElemDump
-xmlEncodeEntities
-xmlEncodeEntitiesReentrant
-xmlEncodeSpecialChars
-xmlErrMemory
-xmlFileClose
-xmlFileMatch
-xmlFileOpen
-xmlFileRead
-xmlFindCharEncodingHandler
-xmlFreeAttributeTable
-xmlFreeAutomata
-xmlFreeCatalog
-xmlFreeDoc
-xmlFreeDtd
-xmlFreeElementContent
-xmlFreeElementTable
-xmlFreeEntitiesTable
-xmlFreeEnumeration
-xmlFreeIDTable
-xmlFreeInputStream
-xmlFreeMutex
-xmlFreeNode
-xmlFreeNodeList
-xmlFreeNotationTable
-xmlFreeNs
-xmlFreeNsList
-xmlFreeParserCtxt
-xmlFreeParserInputBuffer
-xmlFreePattern
-xmlFreePatternList
-xmlFreeProp
-xmlFreePropList
-xmlFreeRMutex
-xmlFreeRefTable
-xmlFreeTextReader
-xmlFreeTextWriter
-xmlFreeURI
-xmlFreeValidCtxt
-xmlGcMemGet
-xmlGcMemSetup
-xmlGetBufferAllocationScheme
-xmlGetCharEncodingHandler
-xmlGetCharEncodingName
-xmlGetCompressMode
-xmlGetDocCompressMode
-xmlGetDocEntity
-xmlGetDtdAttrDesc
-xmlGetDtdElementDesc
-xmlGetDtdEntity
-xmlGetDtdNotationDesc
-xmlGetDtdQAttrDesc
-xmlGetDtdQElementDesc
-xmlGetEncodingAlias
-xmlGetExternalEntityLoader
-xmlGetFeature
-xmlGetFeaturesList
-xmlGetGlobalState
-xmlGetID
-xmlGetIntSubset
-xmlGetLastChild
-xmlGetLastError
-xmlGetLineNo
-xmlGetNoNsProp
-xmlGetNodePath
-xmlGetNsList
-xmlGetNsProp
-xmlGetParameterEntity
-xmlGetPredefinedEntity
-xmlGetProp
-xmlGetRefs
-xmlGetThreadId
-xmlGetUTF8Char
-xmlHandleEntity
-xmlHasNsProp
-xmlHasProp
-xmlHashAddEntry
-xmlHashAddEntry2
-xmlHashAddEntry3
-xmlHashCopy
-xmlHashCreate
-xmlHashFree
-xmlHashLookup
-xmlHashLookup2
-xmlHashLookup3
-xmlHashQLookup
-xmlHashQLookup2
-xmlHashQLookup3
-xmlHashRemoveEntry
-xmlHashRemoveEntry2
-xmlHashRemoveEntry3
-xmlHashScan
-xmlHashScan3
-xmlHashScanFull
-xmlHashScanFull3
-xmlHashSize
-xmlHashUpdateEntry
-xmlHashUpdateEntry2
-xmlHashUpdateEntry3
-xmlIOFTPClose
-xmlIOFTPMatch
-xmlIOFTPOpen
-xmlIOFTPRead
-xmlIOHTTPClose
-xmlIOHTTPMatch
-xmlIOHTTPOpen
-xmlIOHTTPOpenW
-xmlIOHTTPRead
-xmlIOParseDTD
-xmlInitCharEncodingHandlers
-xmlInitGlobals
-xmlInitMemory
-xmlInitNodeInfoSeq
-xmlInitParser
-xmlInitParserCtxt
-xmlInitThreads
-xmlInitializeCatalog
-xmlInitializeGlobalState
-xmlInitializePredefinedEntities
-xmlIsBaseChar
-xmlIsBlank
-xmlIsBlankNode
-xmlIsChar
-xmlIsCombining
-xmlIsDigit
-xmlIsExtender
-xmlIsID
-xmlIsIdeographic
-xmlIsLetter
-xmlIsMainThread
-xmlIsMixedElement
-xmlIsPubidChar
-xmlIsRef
-xmlIsXHTML
-xmlIsBaseCharGroup DATA
-xmlIsCharGroup DATA
-xmlIsCombiningGroup DATA
-xmlIsDigitGroup DATA
-xmlIsExtenderGroup DATA
-xmlIsIdeographicGroup DATA
-xmlKeepBlanksDefault
-xmlLineNumbersDefault
-xmlLinkGetData
-xmlListAppend
-xmlListClear
-xmlListCopy
-xmlListCreate
-xmlListDelete
-xmlListDup
-xmlListEmpty
-xmlListEnd
-xmlListFront
-xmlListInsert
-xmlListMerge
-xmlListPopBack
-xmlListPopFront
-xmlListPushBack
-xmlListPushFront
-xmlListRemoveAll
-xmlListRemoveFirst
-xmlListRemoveLast
-xmlListReverse
-xmlListReverseSearch
-xmlListReverseWalk
-xmlListSearch
-xmlListSize
-xmlListSort
-xmlListWalk
-xmlLoadACatalog
-xmlLoadCatalog
-xmlLoadCatalogs
-xmlLoadExternalEntity
-xmlLoadSGMLSuperCatalog
-xmlLockLibrary
-xmlLsCountNode
-xmlLsOneNode
-xmlMallocAtomicLoc
-xmlMallocLoc
-xmlMemDisplay
-xmlMemFree
-xmlMemGet
-xmlMemMalloc
-xmlMemRealloc
-xmlMemSetup
-xmlMemShow
-xmlMemStrdupLoc
-xmlMemUsed
-xmlMemoryDump
-xmlMemoryStrdup
-xmlMutexLock
-xmlMutexUnlock
-xmlNamespaceParseNCName
-xmlNamespaceParseNSDef
-xmlNamespaceParseQName
-xmlNanoFTPCheckResponse
-xmlNanoFTPCleanup
-xmlNanoFTPClose
-xmlNanoFTPCloseConnection
-xmlNanoFTPConnect
-xmlNanoFTPConnectTo
-xmlNanoFTPCwd
-xmlNanoFTPDele
-xmlNanoFTPFreeCtxt
-xmlNanoFTPGet
-xmlNanoFTPGetConnection
-xmlNanoFTPGetResponse
-xmlNanoFTPGetSocket
-xmlNanoFTPInit
-xmlNanoFTPList
-xmlNanoFTPNewCtxt
-xmlNanoFTPOpen
-xmlNanoFTPProxy
-xmlNanoFTPQuit
-xmlNanoFTPRead
-xmlNanoFTPScanProxy
-xmlNanoFTPUpdateURL
-xmlNanoHTTPAuthHeader
-xmlNanoHTTPCleanup
-xmlNanoHTTPClose
-xmlNanoHTTPEncoding
-xmlNanoHTTPFetch
-xmlNanoHTTPInit
-xmlNanoHTTPMethod
-xmlNanoHTTPMethodRedir
-xmlNanoHTTPMimeType
-xmlNanoHTTPOpen
-xmlNanoHTTPOpenRedir
-xmlNanoHTTPRead
-xmlNanoHTTPRedir
-xmlNanoHTTPReturnCode
-xmlNanoHTTPSave
-xmlNanoHTTPScanProxy
-xmlNewAutomata
-xmlNewCDataBlock
-xmlNewCatalog
-xmlNewCharEncodingHandler
-xmlNewCharRef
-xmlNewChild
-xmlNewComment
-xmlNewDoc
-xmlNewDocComment
-xmlNewDocFragment
-xmlNewDocNode
-xmlNewDocNodeEatName
-xmlNewDocProp
-xmlNewDocRawNode
-xmlNewDocText
-xmlNewDocTextLen
-xmlNewDtd
-xmlNewElementContent
-xmlNewEntityInputStream
-xmlNewGlobalNs
-xmlNewIOInputStream
-xmlNewInputFromFile
-xmlNewInputStream
-xmlNewMutex
-xmlNewNode
-xmlNewNodeEatName
-xmlNewNs
-xmlNewNsProp
-xmlNewNsPropEatName
-xmlNewPI
-xmlNewParserCtxt
-xmlNewProp
-xmlNewRMutex
-xmlNewReference
-xmlNewStringInputStream
-xmlNewText
-xmlNewTextChild
-xmlNewTextLen
-xmlNewTextReader
-xmlNewTextReaderFilename
-xmlNewTextWriter
-xmlNewTextWriterDoc
-xmlNewTextWriterFilename
-xmlNewTextWriterMemory
-xmlNewTextWriterPushParser
-xmlNewTextWriterTree
-xmlNewValidCtxt
-xmlNextChar
-xmlNoNetExternalEntityLoader
-xmlNodeAddContent
-xmlNodeAddContentLen
-xmlNodeBufGetContent
-xmlNodeDump
-xmlNodeDumpOutput
-xmlNodeGetBase
-xmlNodeGetContent
-xmlNodeGetLang
-xmlNodeGetSpacePreserve
-xmlNodeIsText
-xmlNodeListGetRawString
-xmlNodeListGetString
-xmlNodeSetBase
-xmlNodeSetContent
-xmlNodeSetContentLen
-xmlNodeSetLang
-xmlNodeSetName
-xmlNodeSetSpacePreserve
-xmlNormalizeURIPath
-xmlNormalizeWindowsPath
-xmlOutputBufferClose
-xmlOutputBufferCreateFd
-xmlOutputBufferCreateFile
-xmlOutputBufferCreateFilename
-xmlOutputBufferCreateIO
-xmlOutputBufferFlush
-xmlOutputBufferWrite
-xmlOutputBufferWriteString
-xmlParseAttValue
-xmlParseAttribute
-xmlParseAttributeListDecl
-xmlParseAttributeType
-xmlParseBalancedChunkMemory
-xmlParseBalancedChunkMemoryRecover
-xmlParseCDSect
-xmlParseCatalogFile
-xmlParseCharData
-xmlParseCharEncoding
-xmlParseCharRef
-xmlParseChunk
-xmlParseComment
-xmlParseContent
-xmlParseCtxtExternalEntity
-xmlParseDTD
-xmlParseDefaultDecl
-xmlParseDoc
-xmlParseDocTypeDecl
-xmlParseDocument
-xmlParseElement
-xmlParseElementChildrenContentDecl
-xmlParseElementContentDecl
-xmlParseElementDecl
-xmlParseElementMixedContentDecl
-xmlParseEncName
-xmlParseEncodingDecl
-xmlParseEndTag
-xmlParseEntity
-xmlParseEntityDecl
-xmlParseEntityRef
-xmlParseEntityValue
-xmlParseEnumeratedType
-xmlParseEnumerationType
-xmlParseExtParsedEnt
-xmlParseExternalEntity
-xmlParseExternalID
-xmlParseExternalSubset
-xmlParseFile
-xmlParseMarkupDecl
-xmlParseMemory
-xmlParseMisc
-xmlParseName
-xmlParseNamespace
-xmlParseNmtoken
-xmlParseNotationDecl
-xmlParseNotationType
-xmlParsePEReference
-xmlParsePI
-xmlParsePITarget
-xmlParsePubidLiteral
-xmlParseQuotedString
-xmlParseReference
-xmlParseSDDecl
-xmlParseStartTag
-xmlParseSystemLiteral
-xmlParseTextDecl
-xmlParseURI
-xmlParseURIReference
-xmlParseVersionInfo
-xmlParseVersionNum
-xmlParseXMLDecl
-xmlParserAddNodeInfo
-xmlParserError
-xmlParserFindNodeInfo
-xmlParserFindNodeInfoIndex
-xmlParserGetDirectory
-xmlParserHandlePEReference
-xmlParserHandleReference
-xmlParserInputBufferCreateFd
-xmlParserInputBufferCreateFile
-xmlParserInputBufferCreateFilename
-xmlParserInputBufferCreateIO
-xmlParserInputBufferCreateMem
-xmlParserInputBufferCreateStatic
-xmlParserInputBufferGrow
-xmlParserInputBufferPush
-xmlParserInputBufferRead
-xmlParserInputGrow
-xmlParserInputRead
-xmlParserInputShrink
-xmlParserPrintFileContext
-xmlParserPrintFileInfo
-xmlParserValidityError
-xmlParserValidityWarning
-xmlParserWarning
-xmlPatternMatch
-xmlPatterncompile
-xmlPedanticParserDefault
-xmlPopInput
-xmlPrintURI
-xmlPushInput
-xmlRMutexLock
-xmlRMutexUnlock
-xmlReadDoc
-xmlReadFd
-xmlReadFile
-xmlReadIO
-xmlReadMemory
-xmlReaderForDoc
-xmlReaderForFd
-xmlReaderForFile
-xmlReaderForIO
-xmlReaderForMemory
-xmlReaderNewDoc
-xmlReaderNewFd
-xmlReaderNewFile
-xmlReaderNewIO
-xmlReaderNewMemory
-xmlReaderNewWalker
-xmlReaderWalker
-xmlReallocLoc
-xmlReconciliateNs
-xmlRecoverDoc
-xmlRecoverFile
-xmlRecoverMemory
-xmlRegExecPushString
-xmlRegExecPushString2
-xmlRegFreeExecCtxt
-xmlRegFreeRegexp
-xmlRegNewExecCtxt
-xmlRegexpCompile
-xmlRegexpExec
-xmlRegexpIsDeterminist
-xmlRegexpPrint
-xmlRegisterCharEncodingHandler
-xmlRegisterDefaultInputCallbacks
-xmlRegisterDefaultOutputCallbacks
-xmlRegisterHTTPPostCallbacks
-xmlRegisterInputCallbacks
-xmlRegisterNodeDefault
-xmlRegisterOutputCallbacks
-xmlRelaxNGCleanupTypes
-xmlRelaxNGDump
-xmlRelaxNGDumpTree
-xmlRelaxNGFree
-xmlRelaxNGFreeParserCtxt
-xmlRelaxNGFreeValidCtxt
-xmlRelaxNGGetParserErrors
-xmlRelaxNGGetValidErrors
-xmlRelaxNGNewDocParserCtxt
-xmlRelaxNGNewMemParserCtxt
-xmlRelaxNGNewParserCtxt
-xmlRelaxNGNewValidCtxt
-xmlRelaxNGParse
-xmlRelaxNGSetParserErrors
-xmlRelaxNGSetValidErrors
-xmlRelaxNGValidateDoc
-xmlRelaxNGValidateFullElement
-xmlRelaxNGValidatePopElement
-xmlRelaxNGValidatePushCData
-xmlRelaxNGValidatePushElement
-xmlRelaxParserSetFlag
-xmlRemoveID
-xmlRemoveProp
-xmlRemoveRef
-xmlReplaceNode
-xmlResetError
-xmlResetLastError
-xmlSAX2AttributeDecl
-xmlSAX2CDataBlock
-xmlSAX2Characters
-xmlSAX2Comment
-xmlSAX2ElementDecl
-xmlSAX2EndDocument
-xmlSAX2EndElement
-xmlSAX2EndElementNs
-xmlSAX2EntityDecl
-xmlSAX2ExternalSubset
-xmlSAX2GetColumnNumber
-xmlSAX2GetEntity
-xmlSAX2GetLineNumber
-xmlSAX2GetParameterEntity
-xmlSAX2GetPublicId
-xmlSAX2GetSystemId
-xmlSAX2HasExternalSubset
-xmlSAX2HasInternalSubset
-xmlSAX2IgnorableWhitespace
-xmlSAX2InitDefaultSAXHandler
-xmlSAX2InitDocbDefaultSAXHandler
-xmlSAX2InitHtmlDefaultSAXHandler
-xmlSAX2InternalSubset
-xmlSAX2IsStandalone
-xmlSAX2NotationDecl
-xmlSAX2ProcessingInstruction
-xmlSAX2Reference
-xmlSAX2ResolveEntity
-xmlSAX2SetDocumentLocator
-xmlSAX2StartDocument
-xmlSAX2StartElement
-xmlSAX2StartElementNs
-xmlSAX2UnparsedEntityDecl
-xmlSAXDefaultVersion
-xmlSAXParseDTD
-xmlSAXParseDoc
-xmlSAXParseEntity
-xmlSAXParseFile
-xmlSAXParseFileWithData
-xmlSAXParseMemory
-xmlSAXParseMemoryWithData
-xmlSAXUserParseFile
-xmlSAXUserParseMemory
-xmlSAXVersion
-xmlSaveFile
-xmlSaveFileEnc
-xmlSaveFileTo
-xmlSaveFormatFile
-xmlSaveFormatFileEnc
-xmlSaveFormatFileTo
-xmlSaveUri
-xmlScanName
-xmlSchemaCheckFacet
-xmlSchemaCleanupTypes
-xmlSchemaCompareValues
-xmlSchemaDump
-xmlSchemaFree
-xmlSchemaFreeFacet
-xmlSchemaFreeParserCtxt
-xmlSchemaFreeType
-xmlSchemaFreeValidCtxt
-xmlSchemaFreeValue
-xmlSchemaGetPredefinedType
-xmlSchemaInitTypes
-xmlSchemaNewDocParserCtxt
-xmlSchemaNewFacet
-xmlSchemaNewMemParserCtxt
-xmlSchemaNewParserCtxt
-xmlSchemaNewValidCtxt
-xmlSchemaParse
-xmlSchemaSetParserErrors
-xmlSchemaSetValidErrors
-xmlSchemaValPredefTypeNode
-xmlSchemaValidateDoc
-xmlSchemaValidateFacet
-xmlSchemaValidatePredefinedType
-xmlSchemaValidateStream
-xmlSearchNs
-xmlSearchNsByHref
-xmlSetBufferAllocationScheme
-xmlSetCompressMode
-xmlSetDocCompressMode
-xmlSetEntityReferenceFunc
-xmlSetExternalEntityLoader
-xmlSetFeature
-xmlSetGenericErrorFunc
-xmlSetListDoc
-xmlSetNs
-xmlSetNsProp
-xmlSetProp
-xmlSetStructuredErrorFunc
-xmlSetTreeDoc
-xmlSetupParserForBuffer
-xmlShell
-xmlShellBase
-xmlShellCat
-xmlShellDir
-xmlShellDu
-xmlShellList
-xmlShellLoad
-xmlShellPrintNode
-xmlShellPrintXPathError
-xmlShellPrintXPathResult
-xmlShellPwd
-xmlShellSave
-xmlShellValidate
-xmlShellWrite
-xmlSkipBlankChars
-xmlSnprintfElementContent
-xmlSplitQName
-xmlSplitQName2
-xmlSplitQName3
-xmlSprintfElementContent
-xmlStopParser
-xmlStrEqual
-xmlStrPrintf
-xmlStrQEqual
-xmlStrVPrintf
-xmlStrcasecmp
-xmlStrcasestr
-xmlStrcat
-xmlStrchr
-xmlStrcmp
-xmlStrdup
-xmlStringCurrentChar
-xmlStringDecodeEntities
-xmlStringGetNodeList
-xmlStringLenDecodeEntities
-xmlStringLenGetNodeList
-xmlStrlen
-xmlStrncasecmp
-xmlStrncat
-xmlStrncatNew
-xmlStrncmp
-xmlStrndup
-xmlStrstr
-xmlStrsub
-xmlSubstituteEntitiesDefault
-xmlSwitchEncoding
-xmlSwitchInputEncoding
-xmlSwitchToEncoding
-xmlTextConcat
-xmlTextMerge
-xmlTextReaderAttributeCount
-xmlTextReaderBaseUri
-xmlTextReaderClose
-xmlTextReaderConstBaseUri
-xmlTextReaderConstLocalName
-xmlTextReaderConstName
-xmlTextReaderConstNamespaceUri
-xmlTextReaderConstPrefix
-xmlTextReaderConstString
-xmlTextReaderConstValue
-xmlTextReaderConstXmlLang
-xmlTextReaderCurrentDoc
-xmlTextReaderCurrentNode
-xmlTextReaderDepth
-xmlTextReaderExpand
-xmlTextReaderGetAttribute
-xmlTextReaderGetAttributeNo
-xmlTextReaderGetAttributeNs
-xmlTextReaderGetErrorHandler
-xmlTextReaderGetParserProp
-xmlTextReaderGetRemainder
-xmlTextReaderHasAttributes
-xmlTextReaderHasValue
-xmlTextReaderIsDefault
-xmlTextReaderIsEmptyElement
-xmlTextReaderIsValid
-xmlTextReaderLocalName
-xmlTextReaderLocatorBaseURI
-xmlTextReaderLocatorLineNumber
-xmlTextReaderLookupNamespace
-xmlTextReaderMoveToAttribute
-xmlTextReaderMoveToAttributeNo
-xmlTextReaderMoveToAttributeNs
-xmlTextReaderMoveToElement
-xmlTextReaderMoveToFirstAttribute
-xmlTextReaderMoveToNextAttribute
-xmlTextReaderName
-xmlTextReaderNamespaceUri
-xmlTextReaderNext
-xmlTextReaderNextSibling
-xmlTextReaderNodeType
-xmlTextReaderNormalization
-xmlTextReaderPrefix
-xmlTextReaderPreserve
-xmlTextReaderPreservePattern
-xmlTextReaderQuoteChar
-xmlTextReaderRead
-xmlTextReaderReadAttributeValue
-xmlTextReaderReadInnerXml
-xmlTextReaderReadOuterXml
-xmlTextReaderReadState
-xmlTextReaderReadString
-xmlTextReaderRelaxNGSetSchema
-xmlTextReaderRelaxNGValidate
-xmlTextReaderSetErrorHandler
-xmlTextReaderSetParserProp
-xmlTextReaderSetStructuredErrorHandler
-xmlTextReaderValue
-xmlTextReaderXmlLang
-xmlTextWriterEndAttribute
-xmlTextWriterEndCDATA
-xmlTextWriterEndComment
-xmlTextWriterEndDTD
-xmlTextWriterEndDocument
-xmlTextWriterEndElement
-xmlTextWriterEndPI
-xmlTextWriterFlush
-xmlTextWriterFullEndElement
-xmlTextWriterSetIndent
-xmlTextWriterSetIndentString
-xmlTextWriterStartAttribute
-xmlTextWriterStartAttributeNS
-xmlTextWriterStartCDATA
-xmlTextWriterStartComment
-xmlTextWriterStartDTD
-xmlTextWriterStartDTDAttlist
-xmlTextWriterStartDTDElement
-xmlTextWriterStartDTDEntity
-xmlTextWriterStartDocument
-xmlTextWriterStartElement
-xmlTextWriterStartElementNS
-xmlTextWriterStartPI
-xmlTextWriterWriteAttribute
-xmlTextWriterWriteAttributeNS
-xmlTextWriterWriteBase64
-xmlTextWriterWriteBinHex
-xmlTextWriterWriteCDATA
-xmlTextWriterWriteComment
-xmlTextWriterWriteDTD
-xmlTextWriterWriteDTDAttlist
-xmlTextWriterWriteDTDElement
-xmlTextWriterWriteDTDEntity
-xmlTextWriterWriteDTDExternalEntity
-xmlTextWriterWriteDTDInternalEntity
-xmlTextWriterWriteDTDNotation
-xmlTextWriterWriteElement
-xmlTextWriterWriteElementNS
-xmlTextWriterWriteFormatAttribute
-xmlTextWriterWriteFormatAttributeNS
-xmlTextWriterWriteFormatCDATA
-xmlTextWriterWriteFormatComment
-xmlTextWriterWriteFormatDTD
-xmlTextWriterWriteFormatDTDAttlist
-xmlTextWriterWriteFormatDTDElement
-xmlTextWriterWriteFormatDTDInternalEntity
-xmlTextWriterWriteFormatElement
-xmlTextWriterWriteFormatElementNS
-xmlTextWriterWriteFormatPI
-xmlTextWriterWriteFormatRaw
-xmlTextWriterWriteFormatString
-xmlTextWriterWritePI
-xmlTextWriterWriteRaw
-xmlTextWriterWriteRawLen
-xmlTextWriterWriteString
-xmlTextWriterWriteVFormatAttribute
-xmlTextWriterWriteVFormatAttributeNS
-xmlTextWriterWriteVFormatCDATA
-xmlTextWriterWriteVFormatComment
-xmlTextWriterWriteVFormatDTD
-xmlTextWriterWriteVFormatDTDAttlist
-xmlTextWriterWriteVFormatDTDElement
-xmlTextWriterWriteVFormatDTDInternalEntity
-xmlTextWriterWriteVFormatElement
-xmlTextWriterWriteVFormatElementNS
-xmlTextWriterWriteVFormatPI
-xmlTextWriterWriteVFormatRaw
-xmlTextWriterWriteVFormatString
-xmlThrDefBufferAllocScheme
-xmlThrDefDefaultBufferSize
-xmlThrDefDeregisterNodeDefault
-xmlThrDefDoValidityCheckingDefaultValue
-xmlThrDefGetWarningsDefaultValue
-xmlThrDefIndentTreeOutput
-xmlThrDefKeepBlanksDefaultValue
-xmlThrDefLineNumbersDefaultValue
-xmlThrDefLoadExtDtdDefaultValue
-xmlThrDefParserDebugEntities
-xmlThrDefPedanticParserDefaultValue
-xmlThrDefRegisterNodeDefault
-xmlThrDefSaveNoEmptyTags
-xmlThrDefSetGenericErrorFunc
-xmlThrDefSetStructuredErrorFunc
-xmlThrDefSubstituteEntitiesDefaultValue
-xmlThrDefTreeIndentString
-xmlUCSIsAegeanNumbers
-xmlUCSIsAlphabeticPresentationForms
-xmlUCSIsArabic
-xmlUCSIsArabicPresentationFormsA
-xmlUCSIsArabicPresentationFormsB
-xmlUCSIsArmenian
-xmlUCSIsArrows
-xmlUCSIsBasicLatin
-xmlUCSIsBengali
-xmlUCSIsBlock
-xmlUCSIsBlockElements
-xmlUCSIsBopomofo
-xmlUCSIsBopomofoExtended
-xmlUCSIsBoxDrawing
-xmlUCSIsBraillePatterns
-xmlUCSIsBuhid
-xmlUCSIsByzantineMusicalSymbols
-xmlUCSIsCJKCompatibility
-xmlUCSIsCJKCompatibilityForms
-xmlUCSIsCJKCompatibilityIdeographs
-xmlUCSIsCJKCompatibilityIdeographsSupplement
-xmlUCSIsCJKRadicalsSupplement
-xmlUCSIsCJKSymbolsandPunctuation
-xmlUCSIsCJKUnifiedIdeographs
-xmlUCSIsCJKUnifiedIdeographsExtensionA
-xmlUCSIsCJKUnifiedIdeographsExtensionB
-xmlUCSIsCat
-xmlUCSIsCatC
-xmlUCSIsCatCc
-xmlUCSIsCatCf
-xmlUCSIsCatCo
-xmlUCSIsCatCs
-xmlUCSIsCatL
-xmlUCSIsCatLl
-xmlUCSIsCatLm
-xmlUCSIsCatLo
-xmlUCSIsCatLt
-xmlUCSIsCatLu
-xmlUCSIsCatM
-xmlUCSIsCatMc
-xmlUCSIsCatMe
-xmlUCSIsCatMn
-xmlUCSIsCatN
-xmlUCSIsCatNd
-xmlUCSIsCatNl
-xmlUCSIsCatNo
-xmlUCSIsCatP
-xmlUCSIsCatPc
-xmlUCSIsCatPd
-xmlUCSIsCatPe
-xmlUCSIsCatPf
-xmlUCSIsCatPi
-xmlUCSIsCatPo
-xmlUCSIsCatPs
-xmlUCSIsCatS
-xmlUCSIsCatSc
-xmlUCSIsCatSk
-xmlUCSIsCatSm
-xmlUCSIsCatSo
-xmlUCSIsCatZ
-xmlUCSIsCatZl
-xmlUCSIsCatZp
-xmlUCSIsCatZs
-xmlUCSIsCherokee
-xmlUCSIsCombiningDiacriticalMarks
-xmlUCSIsCombiningDiacriticalMarksforSymbols
-xmlUCSIsCombiningHalfMarks
-xmlUCSIsCombiningMarksforSymbols
-xmlUCSIsControlPictures
-xmlUCSIsCurrencySymbols
-xmlUCSIsCypriotSyllabary
-xmlUCSIsCyrillic
-xmlUCSIsCyrillicSupplement
-xmlUCSIsDeseret
-xmlUCSIsDevanagari
-xmlUCSIsDingbats
-xmlUCSIsEnclosedAlphanumerics
-xmlUCSIsEnclosedCJKLettersandMonths
-xmlUCSIsEthiopic
-xmlUCSIsGeneralPunctuation
-xmlUCSIsGeometricShapes
-xmlUCSIsGeorgian
-xmlUCSIsGothic
-xmlUCSIsGreek
-xmlUCSIsGreekExtended
-xmlUCSIsGreekandCoptic
-xmlUCSIsGujarati
-xmlUCSIsGurmukhi
-xmlUCSIsHalfwidthandFullwidthForms
-xmlUCSIsHangulCompatibilityJamo
-xmlUCSIsHangulJamo
-xmlUCSIsHangulSyllables
-xmlUCSIsHanunoo
-xmlUCSIsHebrew
-xmlUCSIsHighPrivateUseSurrogates
-xmlUCSIsHighSurrogates
-xmlUCSIsHiragana
-xmlUCSIsIPAExtensions
-xmlUCSIsIdeographicDescriptionCharacters
-xmlUCSIsKanbun
-xmlUCSIsKangxiRadicals
-xmlUCSIsKannada
-xmlUCSIsKatakana
-xmlUCSIsKatakanaPhoneticExtensions
-xmlUCSIsKhmer
-xmlUCSIsKhmerSymbols
-xmlUCSIsLao
-xmlUCSIsLatin1Supplement
-xmlUCSIsLatinExtendedA
-xmlUCSIsLatinExtendedAdditional
-xmlUCSIsLatinExtendedB
-xmlUCSIsLetterlikeSymbols
-xmlUCSIsLimbu
-xmlUCSIsLinearBIdeograms
-xmlUCSIsLinearBSyllabary
-xmlUCSIsLowSurrogates
-xmlUCSIsMalayalam
-xmlUCSIsMathematicalAlphanumericSymbols
-xmlUCSIsMathematicalOperators
-xmlUCSIsMiscellaneousMathematicalSymbolsA
-xmlUCSIsMiscellaneousMathematicalSymbolsB
-xmlUCSIsMiscellaneousSymbols
-xmlUCSIsMiscellaneousSymbolsandArrows
-xmlUCSIsMiscellaneousTechnical
-xmlUCSIsMongolian
-xmlUCSIsMusicalSymbols
-xmlUCSIsMyanmar
-xmlUCSIsNumberForms
-xmlUCSIsOgham
-xmlUCSIsOldItalic
-xmlUCSIsOpticalCharacterRecognition
-xmlUCSIsOriya
-xmlUCSIsOsmanya
-xmlUCSIsPhoneticExtensions
-xmlUCSIsPrivateUse
-xmlUCSIsPrivateUseArea
-xmlUCSIsRunic
-xmlUCSIsShavian
-xmlUCSIsSinhala
-xmlUCSIsSmallFormVariants
-xmlUCSIsSpacingModifierLetters
-xmlUCSIsSpecials
-xmlUCSIsSuperscriptsandSubscripts
-xmlUCSIsSupplementalArrowsA
-xmlUCSIsSupplementalArrowsB
-xmlUCSIsSupplementalMathematicalOperators
-xmlUCSIsSupplementaryPrivateUseAreaA
-xmlUCSIsSupplementaryPrivateUseAreaB
-xmlUCSIsSyriac
-xmlUCSIsTagalog
-xmlUCSIsTagbanwa
-xmlUCSIsTags
-xmlUCSIsTaiLe
-xmlUCSIsTaiXuanJingSymbols
-xmlUCSIsTamil
-xmlUCSIsTelugu
-xmlUCSIsThaana
-xmlUCSIsThai
-xmlUCSIsTibetan
-xmlUCSIsUgaritic
-xmlUCSIsUnifiedCanadianAboriginalSyllabics
-xmlUCSIsVariationSelectors
-xmlUCSIsVariationSelectorsSupplement
-xmlUCSIsYiRadicals
-xmlUCSIsYiSyllables
-xmlUCSIsYijingHexagramSymbols
-xmlURIEscape
-xmlURIEscapeStr
-xmlURIUnescapeString
-xmlUTF8Charcmp
-xmlUTF8Size
-xmlUTF8Strlen
-xmlUTF8Strloc
-xmlUTF8Strndup
-xmlUTF8Strpos
-xmlUTF8Strsize
-xmlUTF8Strsub
-xmlUnlinkNode
-xmlUnlockLibrary
-xmlUnsetNsProp
-xmlUnsetProp
-xmlValidBuildContentModel
-xmlValidCtxtNormalizeAttributeValue
-xmlValidGetPotentialChildren
-xmlValidGetValidElements
-xmlValidNormalizeAttributeValue
-xmlValidateAttributeDecl
-xmlValidateAttributeValue
-xmlValidateDocument
-xmlValidateDocumentFinal
-xmlValidateDtd
-xmlValidateDtdFinal
-xmlValidateElement
-xmlValidateElementDecl
-xmlValidateNCName
-xmlValidateNMToken
-xmlValidateName
-xmlValidateNameValue
-xmlValidateNamesValue
-xmlValidateNmtokenValue
-xmlValidateNmtokensValue
-xmlValidateNotationDecl
-xmlValidateNotationUse
-xmlValidateOneAttribute
-xmlValidateOneElement
-xmlValidateOneNamespace
-xmlValidatePopElement
-xmlValidatePushCData
-xmlValidatePushElement
-xmlValidateQName
-xmlValidateRoot
-xmlXIncludeFreeContext
-xmlXIncludeNewContext
-xmlXIncludeProcess
-xmlXIncludeProcessFlags
-xmlXIncludeProcessNode
-xmlXIncludeProcessTree
-xmlXIncludeProcessTreeFlags
-xmlXIncludeSetFlags
-xmlXPathAddValues
-xmlXPathBooleanFunction
-xmlXPathCastBooleanToNumber
-xmlXPathCastBooleanToString
-xmlXPathCastNodeSetToBoolean
-xmlXPathCastNodeSetToNumber
-xmlXPathCastNodeSetToString
-xmlXPathCastNodeToNumber
-xmlXPathCastNodeToString
-xmlXPathCastNumberToBoolean
-xmlXPathCastNumberToString
-xmlXPathCastStringToBoolean
-xmlXPathCastStringToNumber
-xmlXPathCastToBoolean
-xmlXPathCastToNumber
-xmlXPathCastToString
-xmlXPathCeilingFunction
-xmlXPathCmpNodes
-xmlXPathCtxtCompile
-xmlXPathCompareValues
-xmlXPathCompile
-xmlXPathCompiledEval
-xmlXPathConcatFunction
-xmlXPathContainsFunction
-xmlXPathConvertBoolean
-xmlXPathConvertNumber
-xmlXPathConvertString
-xmlXPathCountFunction
-xmlXPathCtxtCompile
-xmlXPathDebugDumpCompExpr
-xmlXPathDebugDumpObject
-xmlXPathDifference
-xmlXPathDistinct
-xmlXPathDistinctSorted
-xmlXPathDivValues
-xmlXPathEqualValues
-xmlXPathErr
-xmlXPathEval
-xmlXPathEvalExpr
-xmlXPathEvalExpression
-xmlXPathEvalPredicate
-xmlXPathEvaluatePredicateResult
-xmlXPathFalseFunction
-xmlXPathFloorFunction
-xmlXPathFreeCompExpr
-xmlXPathFreeContext
-xmlXPathFreeNodeSet
-xmlXPathFreeNodeSetList
-xmlXPathFreeObject
-xmlXPathFreeParserContext
-xmlXPathFunctionLookup
-xmlXPathFunctionLookupNS
-xmlXPathHasSameNodes
-xmlXPathIdFunction
-xmlXPathInit
-xmlXPathIntersection
-xmlXPathIsInf
-xmlXPathIsNaN
-xmlXPathIsNodeType
-xmlXPathLangFunction
-xmlXPathLastFunction
-xmlXPathLeading
-xmlXPathLeadingSorted
-xmlXPathLocalNameFunction
-xmlXPathModValues
-xmlXPathMultValues
-xmlXPathNamespaceURIFunction
-xmlXPathNewBoolean
-xmlXPathNewCString
-xmlXPathNewContext
-xmlXPathNewFloat
-xmlXPathNewNodeSet
-xmlXPathNewNodeSetList
-xmlXPathNewParserContext
-xmlXPathNewString
-xmlXPathNewValueTree
-xmlXPathNextAncestor
-xmlXPathNextAncestorOrSelf
-xmlXPathNextAttribute
-xmlXPathNextChild
-xmlXPathNextDescendant
-xmlXPathNextDescendantOrSelf
-xmlXPathNextFollowing
-xmlXPathNextFollowingSibling
-xmlXPathNextNamespace
-xmlXPathNextParent
-xmlXPathNextPreceding
-xmlXPathNextPrecedingSibling
-xmlXPathNextSelf
-xmlXPathNodeLeading
-xmlXPathNodeLeadingSorted
-xmlXPathNodeSetAdd
-xmlXPathNodeSetAddNs
-xmlXPathNodeSetAddUnique
-xmlXPathNodeSetContains
-xmlXPathNodeSetCreate
-xmlXPathNodeSetDel
-xmlXPathNodeSetFreeNs
-xmlXPathNodeSetMerge
-xmlXPathNodeSetRemove
-xmlXPathNodeSetSort
-xmlXPathNodeTrailing
-xmlXPathNodeTrailingSorted
-xmlXPathNormalizeFunction
-xmlXPathNotEqualValues
-xmlXPathNotFunction
-xmlXPathNsLookup
-xmlXPathNumberFunction
-xmlXPathObjectCopy
-xmlXPathOrderDocElems
-xmlXPathParseNCName
-xmlXPathParseName
-xmlXPathPopBoolean
-xmlXPathPopExternal
-xmlXPathPopNodeSet
-xmlXPathPopNumber
-xmlXPathPopString
-xmlXPathPositionFunction
-xmlXPathRegisterAllFunctions
-xmlXPathRegisterFunc
-xmlXPathRegisterFuncLookup
-xmlXPathRegisterFuncNS
-xmlXPathRegisterNs
-xmlXPathRegisterVariable
-xmlXPathRegisterVariableLookup
-xmlXPathRegisterVariableNS
-xmlXPathRegisteredFuncsCleanup
-xmlXPathRegisteredNsCleanup
-xmlXPathRegisteredVariablesCleanup
-xmlXPathRoot
-xmlXPathRoundFunction
-xmlXPathStartsWithFunction
-xmlXPathStringEvalNumber
-xmlXPathStringFunction
-xmlXPathStringLengthFunction
-xmlXPathSubValues
-xmlXPathSubstringAfterFunction
-xmlXPathSubstringBeforeFunction
-xmlXPathSubstringFunction
-xmlXPathSumFunction
-xmlXPathTrailing
-xmlXPathTrailingSorted
-xmlXPathTranslateFunction
-xmlXPathTrueFunction
-xmlXPathValueFlipSign
-xmlXPathVariableLookup
-xmlXPathVariableLookupNS
-xmlXPathWrapCString
-xmlXPathWrapExternal
-xmlXPathWrapNodeSet
-xmlXPathWrapString
-xmlXPathErr
-xmlXPatherror
-xmlXPtrBuildNodeList
-xmlXPtrEval
-xmlXPtrEvalRangePredicate
-xmlXPtrFreeLocationSet
-xmlXPtrLocationSetAdd
-xmlXPtrLocationSetCreate
-xmlXPtrLocationSetDel
-xmlXPtrLocationSetMerge
-xmlXPtrLocationSetRemove
-xmlXPtrNewCollapsedRange
-xmlXPtrNewContext
-xmlXPtrNewLocationSetNodeSet
-xmlXPtrNewLocationSetNodes
-xmlXPtrNewRange
-xmlXPtrNewRangeNodeObject
-xmlXPtrNewRangeNodePoint
-xmlXPtrNewRangeNodes
-xmlXPtrNewRangePointNode
-xmlXPtrNewRangePoints
-xmlXPtrRangeToFunction
-xmlXPtrWrapLocationSet
-xmlNewTextWriter
-xmlNewTextWriterDoc
-xmlNewTextWriterFilename
-xmlNewTextWriterMemory
-xmlNewTextWriterPushParser
-xmlNewTextWriterTree
-xmlFreeTextWriter
-xmlTextWriterEndAttribute
-xmlTextWriterEndCDATA
-xmlTextWriterEndComment
-xmlTextWriterEndDTD
-xmlTextWriterEndDTDAttlist
-xmlTextWriterEndDTDElement
-xmlTextWriterEndDTDEntity
-xmlTextWriterEndDocument
-xmlTextWriterEndElement
-xmlTextWriterEndPI
-xmlTextWriterFlush
-xmlTextWriterFullEndElement
-xmlTextWriterSetIndent
-xmlTextWriterSetIndentString
-xmlTextWriterStartAttribute
-xmlTextWriterStartAttributeNS
-xmlTextWriterStartCDATA
-xmlTextWriterStartComment
-xmlTextWriterStartDTD
-xmlTextWriterStartDTDAttlist
-xmlTextWriterStartDTDElement
-xmlTextWriterStartDTDEntity
-xmlTextWriterStartDocument
-xmlTextWriterStartElement
-xmlTextWriterStartElementNS
-xmlTextWriterStartPI
-xmlTextWriterWriteAttribute
-xmlTextWriterWriteAttributeNS
-xmlTextWriterWriteBase64
-xmlTextWriterWriteBinHex
-xmlTextWriterWriteCDATA
-xmlTextWriterWriteComment
-xmlTextWriterWriteDTD
-xmlTextWriterWriteDTDAttlist
-xmlTextWriterWriteDTDElement
-xmlTextWriterWriteDTDEntity
-xmlTextWriterWriteDTDExternalEntity
-xmlTextWriterWriteDTDExternalEntityContents
-xmlTextWriterWriteDTDInternalEntity
-xmlTextWriterWriteDTDNotation
-xmlTextWriterWriteElement
-xmlTextWriterWriteElementNS
-xmlTextWriterWriteFormatAttribute
-xmlTextWriterWriteFormatAttributeNS
-xmlTextWriterWriteFormatCDATA
-xmlTextWriterWriteFormatComment
-xmlTextWriterWriteFormatDTD
-xmlTextWriterWriteFormatDTDAttlist
-xmlTextWriterWriteFormatDTDElement
-xmlTextWriterWriteFormatDTDInternalEntity
-xmlTextWriterWriteFormatElement
-xmlTextWriterWriteFormatElementNS
-xmlTextWriterWriteFormatPI
-xmlTextWriterWriteFormatRaw
-xmlTextWriterWriteFormatString
-xmlTextWriterWritePI
-xmlTextWriterWriteRaw
-xmlTextWriterWriteRawLen
-xmlTextWriterWriteString
diff --git a/ext/mbstring/CREDITS b/ext/mbstring/CREDITS
deleted file mode 100644
index d03463b3d2..0000000000
--- a/ext/mbstring/CREDITS
+++ /dev/null
@@ -1,2 +0,0 @@
-Multibyte String Functions
-Tsukada Takuya, Rui Hirokawa
diff --git a/ext/mbstring/README b/ext/mbstring/README
deleted file mode 100644
index 338aa79fcd..0000000000
--- a/ext/mbstring/README
+++ /dev/null
@@ -1,17 +0,0 @@
-!!Caution: DO NOT ADD/CHANGE MBSTRING CODE!!
-
-New mbstring is under development, anyone who would like
-add new feature/change behavior should access to development
-source.
-
-http://cvs.sourceforge.jp/cgi-bin/viewcvs.cgi/php-i18n/
-
-All changes made after 2002/5/19 are subject to be
-removed.
-
-You are warned in php-dev and php-cvs lists many times
-already. If you are curious, search archive for details.
-
-Thank you.
-
-
diff --git a/ext/mbstring/README.libmbfl b/ext/mbstring/README.libmbfl
deleted file mode 100644
index 4f1174e2f7..0000000000
--- a/ext/mbstring/README.libmbfl
+++ /dev/null
@@ -1,16 +0,0 @@
-
-libmbfl is a streamable multibyte character code filter and
-converter library.
-libmbfl is distributed under LGPL 2.1 and bundled with PHP.
-
-The original version of libmbfl is developed and distributed
-at http://sourceforge.jp/project/php-i18n/ .
-
-If you need to modify the bundled libmbfl, the change also have to be applied for
-the libmbfl on sourceforge.jp.
-
-If you have question about libmbfl, please ask to
- hirokawa@php.net, moriyoshi@php.net.
-
-See libmbfl/DISCLAIMER for licensing information of libmbfl.
-
diff --git a/ext/mbstring/README_PHP3-i18n-ja b/ext/mbstring/README_PHP3-i18n-ja
deleted file mode 100644
index cac00b82a1..0000000000
--- a/ext/mbstring/README_PHP3-i18n-ja
+++ /dev/null
@@ -1,774 +0,0 @@
-==========================================
- README for I18N Package
-==========================================
-
-o Name and location of package
-
-Name: php-3.0.18-i18n-ja-2
-Location: http://www.happysize.co.jp/techie/php-ja-jp/
- ftp://ftp.happysize.co.jp/php-ja-jp/
- http://php.vdomains.org/
- ftp://ftp.vdomains.org/pub/php-ja-jp/
- http://php.jpnnet.com/
-
-Currently, this I18N version of PHP only adds Japanese support to base
-PHP. It allows you to use Japanese in scripts, as well as conversion
-between various Japanese encodings. It will work perfectly fine with
-ASCII with i18n option enabled. (note: executable is bit larger due
-to UNICODE table). The basic design aproach is to allow for other
-languages to be added in the future. Developers are encourage to join
-us!
-
-For more information on Japanese encodings, please refer to the
-section "Additional Notes."
-
-
-o What is this package?
-
-This package allows you to handle multiple Japanese encodings (SJIS, EUC,
-UTF-8, JIS) in PHP. If you find any bugs in this package, please report
-them to the appropriate mailing list. For now, the PHP-jp mailing list
-is the best place for this.
-
-PHP-jp ML mailto:PHP-jp@sidecar.ics.es.osaka-u.ac.jp
- http://sidecar.ics.es.osaka-u.ac.jp/php-jp/
- (discussions are in Japanese)
-
-
-o Who should use this
-
-Due to lack of documentation, it's not intended for beginners. If
-something goes wrong, be prepared to fix it on your own.
-
-
-o Warranty and Copyright
-
-There is no warranty with this package. Use it at your own risk.
-
-Please refer to the source code for the copyrights. In general, each
-program's copyright is owned by the programmer. Unless you obey the
-copyright holders restrictions, you are not allowed to use it in any
-form.
-
-
-o Redistribution
-
-As described in the source code, this package and the components are
-allowed to be redistributed with certain restrictions.
-
-Due to this package being still in beta, please try to redistribute
-it as an entire package. Please try not to distribute it as a form
-of patch. Because we would prefer to have this package distributed
-as one single package (not patch of patch of patch), avoid releasing
-any patch to this package.
-
-
-o Who made this
-
-A team of volunteers, PHP3 Internationalization, has been contributing
-their free time producing it. Although we are not related to the core
-PHP programmers, we are hoping to have our modifications merged into the
-core distribution in the near future. Thus, we did not call this a
-"Japanese Patch" (or distribution). Our final goal is to have true
-i18nized PHP!
-
-For anyone interested in this project, please drop us a line.
-
-Contact Address:
- phpj-dev@kage.net
- (Discussions are in Japanese, but feel free to write us in English)
-
-Webpage (English and Japanese):
- http://php.jpnnet.com/
-
-Project Outline (Japanese):
- http://www.happysize.co.jp/techie/php-ja-jp/spec.htm
-
-Developers:
- Hironori Sato <satoh@jpnnet.com>
- Shigeru Kanemoto <sgk@happysize.co.jp>
- Tsukada Takuya <tsukada@fminn.nagano.nagano.jp>
- U. Kenkichi <kenkichi@axes.co.jp>
- Tateyama <tateyan@amy.hi-ho.ne.jp>
- Other gracious contributors
-
-
-o Future plans
-
-- fulfilling what's written in outline
-- support for other languages other than Japanese
-- make the character conversion as a library (?)
-- more testing
-
-
-o Special Thanks to
-
-PHP Japanese webpage maintainer, Hirokawa-san
- http://www.cityfujisawa.ne.jp/%7Elouis/apps/phpfi/
-PHP-JP ML's Yamamoto-san
- http://sidecar.ics.es.osaka-u.ac.jp/php-jp/
-Previous jp-patch developers
-
-
-
-==========================================
- Advantages of using I18N package
-==========================================
-
-- allows you to use various character encodings for script files and
- http output
-- distinguish character encoding in POST/GET/COOKIE
-- proper mail output using JIS as body and MIME/Base64/JIS subject
-- if http output's Content-Type is text/html, it will set proper charset
-- stable character encoding conversion
-- multibyte regex
-
-
-
-==========================================
- Installation
-==========================================
-
-o Summary
-
-Add --enable-i18n option when running configure. For your own setup,
-add any other appropriate options as well.
-
-Don't forget to copy php3.ini-dist to desired location.
-(ex. /usr/local/lib/php3.ini)
-
-If you have already installed PHP3, copy all the entries in php3.ini-dist
-which start with "i18n.xxxx" to php3.ini.
-
-
-o configure option
- --enable-i18n
- include i18n features
-
- --enable-mbregex
- include multibyte regex library
- (without i18n enabled, mbregex functions will not function)
-
-
-o creating cgi version
-
- % tar xvzf php-3.0.18-i18n-ja-2.tar.gz
- % cd php-3.0.18-i18n-ja-2
- % ./configure --enable-i18n --enable-mbregex
- % make
-
-
-o creating Apache version (regular module)
-
- % tar xvzf php-3.0.18-i18n-ja-2.tar.gz
- % tar xvzf apache_1.3.x.tar.gz
- % cd apache_1.3.x
- % ./configure
- % cd ../php-3.0.18-i18n-ja-2
- % ./configure --with-apache=../apache_1.3.x --enable-i18n --enable-mbregex
- % make
- % make install
- % cd ../apache_1.3.x
- % ./configure --activate-module=src/modules/php3/libphp3.a
- % make
- % make install
-
-
-o creating Apache DSO version
-
- create DSO capable Apache first
- % tar xvzf apache_1.3.x.tar.gz
- % cd apache-1.3.x
- % ./configure --enable-shared=max
- % make
- % make install
-
- now create php3
- % cd php-3.0.18-i18n-ja-2
- % ./configure --with-apxs=/usr/local/apache/bin/apxs --enable-i18n \
- --enable-mbregex
- % make
- % make install
-
-
-==========================================
- Additional Notes
-==========================================
-
-o Multibyte regex library
-
-From beta4, we have included the multibyte (mb) regex library which comes with
-Ruby. With this addition, you can now use regex in EUC, SJIS and UTF-8
-encoding. To avoid any conflicts with HSREGEX included with Apache,
-each function name has been changed. Therefore, mb regex functions are
-named differently from the original ereg functions in PHP. The character
-encoding used in mb regex is configured in i18n.internal_encoding.
-
-
-o Binary Output
-
-If http output encoding is set to other than 'pass', conversion of encoding
-from internal encoding to http output is done automatically. Thus,
-if you prefer to spit out anything in raw binary format, your data
-may be corrupted. In such event, set http_output to 'pass'.
-
-ex.
- <?
- i18n_http_output("pass");
- ...
- echo $the_binary_data_string;
- ?>
-
-
-o Content-Type
-
-Depending on the setting of http_output, PHP will output the proper charset.
-ex. Content-Type: text/html; charset="..."
-
-Be aware of following:
-
-- If you set Content-Type header using header() function, that will
- override the automatic addition of charset.
-- Be cautious when you set i18n_http_output, since if any output is
- made prior to this, proper header may have been sent out to the
- client already.
-
-
-o In the event of trouble
-
-If you find any bugs or trouble, please contact us at the above address.
-It may help us to track the problem if you send us the script as well.
-
-If you encounter any memory related error such as segmentation violation,
-add --enable-debug when you run configure. This will give you more
-detail information on where error has occurred. The error is stored
-in the server log or regular http output in CGI mode.
-
-
-o About Japanese encodings
-
-Due to historical reason, there are multiple character encodings used
-for Japanese. The most common encodings are: SJIS, EUC, JIS, and UTF-8.
-Here are (very) brief description of them:
-
-EUC
- commonly used in UNIX environment
- 8bit-8bit combo
- always >=0x80
-
-SJIS
- commonly used in Mac or PCs
- similar to EUC
- mostly 8bit-8bit (some 8bit-7bit)
- mostly >=0x80
- there are some halfwidth (size of ASCII) multibytes
-
-JIS
- commonly used in 7bit environment (nntp and smtp)
- starts with escaping char, \033 and a few more characters
-
-UTF-8
- 16bit+ encoding
- defines many languages existing in this world
- see http://www.unicode.org/ for more detail
-
-Because of having all these character encodings, PHP needs to translate
-between these encodings on the fly. Also, the addition of the mb regex
-library allows you to handle mb strings without fear of getting mb char
-chopped in half.
-
-Since Japanese is not the only language with multiple encodings, we
-encourage other developers to modify our code to suit your needs. We
-definitely need people to work with Korean, Chinese (both traditional
-and simplified), and Russian. Let us know if you are interested in
-this project!
-
-
-
-==========================================
- php3.ini setting
-==========================================
-
-The following init options will allow you to change the default settings.
-Define these settings in the global section of php3.ini.
-
-All keywords are case-insensitive.
-
-o Encoding naming
-
- For each encoding, there are three names: standarized, alias, MIME
-
- - UTF-8
- standard: UTF-8
- alias: N/A
- mime: UTF-8
-
- - ASCII
- standard: ASCII
- alias: N/A
- mime: US-ASCII
-
- - Japanese EUC
- standard: EUC-JP
- alias: EUC, EUC_JP, eucJP, x-euc-jp
- mime: EUC-JP
-
- - Shift JIS
- standard: SJIS
- alias: x-sjis, MS_Kanji
- mime: Shift_JIS
-
- - JIS
- standard: JIS
- alias: N/A
- mime: ISO-2022-JP
-
- - Quoted-Printable
- standard: Quoted-Printable
- alias: qprint
- mime: N/A
-
- - BASE64
- standard: BASE64
- alias: N/A
- mime: N/A
-
- - no conversion
- standard: pass
- alias: none
- mime: N/A
-
- - auto encoding detection
- standard: auto
- alias: unknown
- mime: N/A
-
- * N/A - Not Applicapable
-
-o i18n.http_output - default http output encoding
-
- i18n.http_output = EUC-JP|SJIS|JIS|UTF-8|pass
- EUC-JP : EUC
- SJIS: SJIS
- JIS : JIS
- UTF-8: UTF-8
- pass: no conversion
-
- The default is pass (internal encoding is used)
- It can be re-configured on the fly using i18n_http_output().
-
-
-o i18n.internal_encoding - internal encoding
-
- i18n.internal_encoding = EUC-JP|SJIS|UTF-8
- EUC-JP : EUC
- SJIS: SJIS
- UTF-8: UTF-8
-
- The default is EUC-JP.
-
- PHP parser is designed based on using ISO-8859-1. For other
- encodings, following conditions have to be satisfied in order
- to use them:
- - per byte encoding
- - single byte charactor in range of 00h-7fh which is compatible
- with ASCII
- - multibyte without 00h-7fh
- In case of Japanese, EUC-JP and UTF-8 are the only encoding that
- meets this criteria.
-
- If i18n.internal_encoding and i18n.http_output differs, conversion
- takes place at the time of output. If you convert any data within
- PHP scripts to URL encoding, BASE64 or Quoted-Printable, encoding
- stays as defined in i18n.internal_encoding. Thus, if you would
- prefer to encode in compliance with i18n.http_output, you need
- to manually convert encoding.
-
- ex. $str = urlencode( i18n_convert($str, i18n_http_output()) );
-
- Encoding such as ISO-2022-** and HZ encoding which uses escape
- sequences can not be used as internal encoding. If used, they
- result in following errors:
- - parser pukes funky error
- - magic_quotes_*** breaks encoding (SJIS may have similar problem)
- - string manipulation and regex will malfunction
-
-
-o i18n.script_encoding - script encoding
-
- i18n.script_encoding = auto|EUC-JP|SJIS|JIS|UTF-8
- auto: automatic
- EUC-JP : EUC
- SJIS: SJIS
- JIS : JIS
- UTF-8: UTF-8
-
- The default is auto.
- The script's encoding is converted to i18n.internal_encoding before
- entering the script parser.
-
- Be aware that auto detection may fail under some conditions.
- For best auto detection, add multibyte charactor at begining of
- script.
-
-
-o i18n.http_input - handling of http input (GET/POST/COOKIE)
-
- i18n.http_input = pass|auto
- auto: auto conversion
- pass: no conversion
-
- The default is auto.
- If set to pass, no conversion will take place.
- If set to auto, it will automatically detect the encoding. If
- detection is successful, it will convert to the proper internal
- encoding. If not, it will assume the input as defined in
- i18n.http_input_default.
-
-o i18n.http_input_default - default http input encoding
-
- i18n.http_input_default = pass|EUC-JP|SJIS|JIS|UTF-8
- pass: no conversion
- EUC-JP : EUC
- SJIS: SJIS
- JIS : JIS
- UTF-8: UTF-8
-
- The default is pass.
- This option is only effective as long as i18n.http_input is set to
- auto. If the auto detection fails, this encoding is used as an
- assumption to convert the http input to the internal encoding.
- If set to pass, no conversion will take place.
-
-o sample settings
-
- 1) For most flexibility, we recommend using following example.
- i18n.http_output = SJIS
- i18n.internal_encoding = EUC-JP
- i18n.script_encoding = auto
- i18n.http_input = auto
- i18n.http_input_default = SJIS
-
- 2) To avoid unexpected encoding problems, try these:
-
- i18n.http_output = pass
- i18n.internal_encoding = EUC-JP
- i18n.script_encoding = pass
- i18n.http_input = pass
- i18n.http_input_default = pass
-
-
-
-==========================================
- PHP functions
-==========================================
-
-The following describes the additional PHP functions.
-
-All keywords are case-insensitive.
-
-o i18n_http_output(encoding)
-o encoding = i18n_http_output()
-
- This will set the http output encoding. Any output following this
- function will be controlled by this function. If no argument is given,
- the current http output encode setting is returned.
-
- encodings
- EUC-JP : EUC
- SJIS: SJIS
- JIS : JIS
- UTF-8: UTF-8
- pass: no conversion
-
- NONE is not allowed
-
-
-o encoding = i18n_internal_encoding()
-
- Returns the current internal encoding as a string.
-
- internal encoding
- EUC-JP : EUC
- SJIS: SJIS
- UTF-8: UTF-8
-
-
-o encoding = i18n_http_input()
-
- Returns http input encoding.
-
- encodings
- EUC-JP : EUC
- SJIS: SJIS
- JIS : JIS
- UTF-8: UTF-8
- pass: no conversion (only if i18n.http_input is set to pass)
-
-
-o string = i18n_convert(string, encoding)
- string = i18n_convert(string, encoding, pre-conversion-encoding)
-
- Returns converted string in desired encoding. If
- pre-conversion-encoding is not defined, the given
- string is assumed to be in internal encoding.
-
- encoding
- EUC-JP : EUC
- SJIS: SJIS
- JIS : JIS
- UTF-8: UTF-8
- pass: no conversion
-
- pre-conversion-encoding
- EUC-JP : EUC
- SJIS: SJIS
- JIS : JIS
- UTF-8: UTF-8
- pass: no conversion
- auto: auto detection
-
-
-o encoding = i18n_discover_encoding(string)
-
- Encoding of the given string is returned (as a string).
-
- encoding
- EUC-JP : EUC
- SJIS: SJIS
- JIS : JIS
- UTF-8: UTF-8
- ASCII: ASCII (only 09h, 0Ah, 0Dh, 20h-7Eh)
- pass: unable to determine (text is too short to determine)
- unknown: unknown or possible error
-
-
-o int = mbstrlen(string)
-o int = mbstrlen(string, encoding)
-
- Returns character length of a given string. If no encoding is defined,
- the encoding of string is assumed to be the internal encoding.
-
- encoding
- EUC-JP : EUC
- SJIS: SJIS
- JIS : JIS
- UTF-8: UTF-8
- auto: automatic
-
-
-o int = mbstrpos(string1, string2)
-o int = mbstrpos(string1, string2, start)
-o int = mbstrpos(string1, string2, start, encoding)
-
- Same as strpos. If no encoding is defined, the encoding of string
- is assumed to be the internal encoding.
-
- encoding
- EUC-JP : EUC
- SJIS: SJIS
- JIS : JIS
- UTF-8: UTF-8
-
-
-o int = mbstrrpos(string1, string2)
-o int = mbstrrpos(string1, string2, encoding)
-
- Same as strrpos. If no encoding is defined, the encoding of string
- is assumed to be the internal encoding.
-
- encoding
- EUC-JP : EUC
- SJIS: SJIS
- JIS : JIS
- UTF-8: UTF-8
-
-
-o string = mbsubstr(string, position)
-o string = mbsubstr(string, position, length)
-o string = mbsubstr(string, position, length, encoding)
-
- Same as substr. If no encoding is defined, the encoding of string
- is assumed to be the internal encoding.
-
- encoding
- EUC-JP : EUC
- SJIS: SJIS
- JIS : JIS
- UTF-8: UTF-8
-
-
-o string = mbstrcut(string, position)
-o string = mbstrcut(string, position, length)
-o string = mbstrcut(string, position, length, encoding)
-
- Same as subcut. If position is the 2nd byte of a mb character, it will cut
- from the first byte of that character. It will cut the string without
- chopping a single byte from a mb character. In another words, if you
- set length to 5, you will only get two mb characters. If no encoding
- is defined, the encoding of string is assumed to be the internal encoding.
-
- encoding
- EUC-JP : EUC
- SJIS: SJIS
- JIS : JIS
- UTF-8: UTF-8
-
-
-o string = i18n_mime_header_encode(string)
- MIME encode the string in the format of =?ISO-2022-JP?B?[string]?=.
-
-
-o string = i18n_mime_header_decode(string)
- MIME decodes the string.
-
-
-o string = i18n_ja_jp_hantozen(string)
-o string = i18n_ja_jp_hantozen(string, option)
-o string = i18n_ja_jp_hantozen(string, option, encoding)
-
- Conversion between full width character and halfwidth character.
-
- option
- The following options are allowed. The default is "KV".
- Acronym: FW = fullwidth, HW = halfwidth
-
- "r" : FW alphabet -> HW alphabet
-
- "R" : HW alphabet -> FW alphabet
-
- "n" : FW number -> HW number
-
- "N" : HW number -> FW number
-
- "a" : FW alpha numeric (21h-7Eh) -> HW alpha numeric
-
- "A" : HW alpha numeric (21h-7Eh) -> FW alpha numeric
-
- "k" : FW katakana -> HW katakana
-
- "K" : HW katakana -> FW katakana
-
- "h" : FW hiragana -> HW hiragana
-
- "H" : HW hiragana -> FW katakana
-
- "c" : FW katakana -> FW hiragana
-
- "C" : FW hiragana -> FW katakana
-
- "V" : merge dakuon character. only works with "K" and "H" option
-
- encoding
- If no encoding is defined, the encoding of string is assumed to be
- the internal encoding.
- EUC-JP : EUC
- SJIS: SJIS
- JIS : JIS
- UTF-8: UTF-8
-
-
-int = mbereg(regex_pattern, string, string)
-int = mberegi(regex_pattern, string, string)
- mb version of ereg() and eregi()
-
-
-string = mbereg_replace(regex_pattern, string, string)
-string = mberegi_replace(regex_pattern, string, string)
- mb version of ereg_replace() and eregi_replace()
-
-
-string_array = mbsplit(regex, string, limit)
- mb version of split()
-
-
-
-==========================================
- FAQ
-==========================================
-
-Here, we have gathered some commonly asked questions on PHP-jp mailing
-list.
-
-o To use Japanese in GET method
-
-If you need to assign Japanese text in GET method with argument, such as;
-xxxx.php?data=<Japanese text>, use urlencode function in PHP. If not,
-text may not be passed onto action php properly.
-
-ex: <a href="hoge.php?data=<? echo urlencode($data) ?>">Link</a>
-
-
-o When passing data via GET/POST/COOKIE, \ character sneaks in
-
-When using SJIS as internal encoding, or passed-on data includes '"\,
-PHP automatically inserts escaping character, \. Set magic_quotes_gpc
-in php3.ini from On to Off. An alternative work around to this problem
-is to use StripSlashes().
-
-If $quote_str is in SJIS and you would like to extract Japanese text,
-use ereg_replace as follows:
-
-ereg_replace(sprintf("([%c-%c%c-%c]\\\\)\\\\",0x81,0x9f,0xe0,0xfc),
- "\\1",$quote_str);
-
-This will effectively extract Japanese text out of $quote_str.
-
-
-o Sometimes, encoding detection fails
-
-If i18n_http_input() returns 'pass', it's likely that PHP failed to
-detect whether it's SJIS or EUC. In such case, use <input type=hidden
-value="some Japanese text"> to properly detect the incoming text's
-encoding.
-
-
-
-==========================================
- Japanese Manual
-==========================================
-Translated manual done by "PHP Japanese Manual Project" :
-
-http://www.php.net/manual/ja/manual.php
-
-Starting 3.0.18-i18n-ja, we have removed doc-jp from tarball package.
-
-
-==========================================
- Change Logs
-==========================================
-
-o 2000-10-28, Rui Hirokawa <hirokawa@php.net>
-
-This patch is derived from php-3.0.15-i18n-ja as well as php-3.0.16 by
-Kuwamura applied to original php-3.0.18. It also includes following fixes:
-
-1) allows you to set charset in mail().
-2) fixed mbregex definitions to avoid conflicts with system regex
-3) php3.ini-dist now uses PASS for http_output instead of SJIS
-
-o 2000-11-24, Hironori Sato <satoh@yyplanet.com>
-
-Applied above patched and added detection for gdImageStringTTF in configure.
-Following setups are known to work:
-
-gd-1.3-6, gd-devel-1.3-6, freetype-1.3.1-5, freetype-devel-1.3.1-5
- ImageTTFText($im,$size,$angle,$x1,$y1,$color,"/path/to/font.ttf",
- i18n_convert("ÆüËܸì", "UTF-8"));
- ImageGif($im);
-
-gd-1.7.3-1k1, gd-devel-1.7.3-1k1, freetype-1.3.1-5, freetype-devel-1.3.1-5
- ImageTTFText($im,$size,$angle,$x1,$y1,$color,"/path/to/font.ttf","ÆüËܸì");
- ImagePng($im);
- * i18n_internal_encoding = EUC Ëô¤Ï SJIS
-
-For any gd libraries before 1.6.2, you need to use i18n_convert. For
-gd-1.5.2/3, upgrade to anything above 1.7 to use ImageTTFText without
-using i18n_convert. As long as you have internal_encoding set to EUC or
-SJIS, ImageTTFText should work without mojibake. Again, make sure you
-have i18n_http_output("pass") before calling ImageGif, ImagePng, ImageJpeg!
-
-o 2000-12-09, Rui Hirokawa <hirokawa@php.net>
-
-Fixed mail() which was causing segmentation fault when header was null.
-
diff --git a/ext/mbstring/config.m4 b/ext/mbstring/config.m4
deleted file mode 100644
index 64aadf66f8..0000000000
--- a/ext/mbstring/config.m4
+++ /dev/null
@@ -1,264 +0,0 @@
-dnl
-dnl $Id$
-dnl
-
-AC_DEFUN([PHP_MBSTRING_ADD_SOURCES], [
- PHP_MBSTRING_SOURCES="$PHP_MBSTRING_SOURCES $1"
-])
-
-AC_DEFUN([PHP_MBSTRING_ADD_BUILD_DIR], [
- PHP_MBSTRING_EXTRA_BUILD_DIRS="$PHP_MBSTRING_EXTRA_BUILD_DIRS $1"
-])
-
-AC_DEFUN([PHP_MBSTRING_ADD_INCLUDE], [
- PHP_MBSTRING_EXTRA_INCLUDES="$PHP_MBSTRING_EXTRA_INCLUDES $1"
-])
-
-AC_DEFUN([PHP_MBSTRING_ADD_CONFIG_HEADER], [
- PHP_MBSTRING_EXTRA_CONFIG_HEADERS="$PHP_MBSTRING_EXTRA_CONFIG_HEADERS $1"
-])
-
-AC_DEFUN([PHP_MBSTRING_ADD_CFLAG], [
- PHP_MBSTRING_CFLAGS="$PHP_MBSTRING_CFLAGS $1"
-])
-
-AC_DEFUN([PHP_MBSTRING_EXTENSION], [
- PHP_NEW_EXTENSION(mbstring, $PHP_MBSTRING_SOURCES, $ext_shared,, $PHP_MBSTRING_CFLAGS)
- PHP_SUBST(MBSTRING_SHARED_LIBADD)
-
- for dir in $PHP_MBSTRING_EXTRA_INCLUDES; do
- PHP_ADD_INCLUDE([$ext_srcdir/$dir])
- done
-
- for dir in $PHP_MBSTRING_EXTRA_BUILD_DIRS; do
- PHP_ADD_BUILD_DIR([$ext_builddir/$dir])
- done
-
- if test "$ext_shared" = "no"; then
- out="php_config.h"
- else
- if test -f "$ext_builddir/config.h.in"; then
- out="$abs_builddir/config.h"
- else
- out="php_config.h"
- fi
- fi
-
- for cfg in $PHP_MBSTRING_EXTRA_CONFIG_HEADERS; do
- cat > $ext_srcdir/$cfg <<EOF
-#include "$out"
-EOF
- done
-
-])
-
-AC_DEFUN([PHP_MBSTRING_SETUP_MBREGEX], [
- if test "$PHP_MBREGEX" = "yes"; then
- AC_CACHE_CHECK(for variable length prototypes and stdarg.h, cv_php_mbstring_stdarg, [
- AC_TRY_COMPILE([#include <stdarg.h>], [
-int foo(int x, ...) {
- va_list va;
- va_start(va, x);
- va_arg(va, int);
- va_arg(va, char *);
- va_arg(va, double);
- return 0;
-}
-int main() { return foo(10, "", 3.14); }
- ], [cv_php_mbstring_stdarg=yes], [cv_php_mbstring_stdarg=no])
- ])
-
- AC_CHECK_HEADERS([stdlib.h string.h strings.h unistd.h sys/time.h sys/times.h])
- AC_CHECK_SIZEOF(int, 4)
- AC_CHECK_SIZEOF(short, 2)
- AC_CHECK_SIZEOF(long, 4)
- AC_C_CONST
- AC_HEADER_TIME
- AC_FUNC_ALLOCA
- AC_FUNC_MEMCMP
-
- if test "$cv_php_mbstring_stdarg" = "yes"; then
- AC_DEFINE([HAVE_STDARG_PROTOTYPES], 1, [Define if stdarg.h is available])
- fi
- AC_DEFINE([HAVE_MBREGEX], 1, [whether to have multibyte regex support])
-
- PHP_MBSTRING_ADD_CFLAG([-DNOT_RUBY])
- PHP_MBSTRING_ADD_BUILD_DIR([oniguruma])
- PHP_MBSTRING_ADD_BUILD_DIR([oniguruma/enc])
- PHP_MBSTRING_ADD_INCLUDE([oniguruma])
- PHP_MBSTRING_ADD_CONFIG_HEADER([oniguruma/config.h])
-
- PHP_MBSTRING_ADD_SOURCES([
- php_mbregex.c
- oniguruma/regcomp.c
- oniguruma/regerror.c
- oniguruma/regexec.c
- oniguruma/reggnu.c
- oniguruma/regparse.c
- oniguruma/regenc.c
- oniguruma/regposerr.c
- oniguruma/enc/ascii.c
- oniguruma/enc/utf8.c
- oniguruma/enc/euc_jp.c
- oniguruma/enc/euc_tw.c
- oniguruma/enc/euc_kr.c
- oniguruma/enc/sjis.c
- oniguruma/enc/iso8859_1.c
- oniguruma/enc/iso8859_2.c
- oniguruma/enc/iso8859_3.c
- oniguruma/enc/iso8859_4.c
- oniguruma/enc/iso8859_5.c
- oniguruma/enc/iso8859_6.c
- oniguruma/enc/iso8859_7.c
- oniguruma/enc/iso8859_8.c
- oniguruma/enc/iso8859_9.c
- oniguruma/enc/iso8859_10.c
- oniguruma/enc/iso8859_11.c
- oniguruma/enc/iso8859_13.c
- oniguruma/enc/iso8859_14.c
- oniguruma/enc/iso8859_15.c
- oniguruma/enc/iso8859_16.c
- oniguruma/enc/koi8.c
- oniguruma/enc/koi8_r.c
- oniguruma/enc/big5.c
- ])
- fi
-])
-
-AC_DEFUN([PHP_MBSTRING_SETUP_LIBMBFL], [
- dnl libmbfl is required and can not be disabled
- if test "$PHP_LIBMBFL" = "yes" || test "$PHP_LIBMBFL" = "no"; then
- dnl
- dnl Bundled libmbfl
- dnl
- PHP_MBSTRING_ADD_BUILD_DIR([libmbfl])
- PHP_MBSTRING_ADD_BUILD_DIR([libmbfl/mbfl])
- PHP_MBSTRING_ADD_BUILD_DIR([libmbfl/filters])
- PHP_MBSTRING_ADD_BUILD_DIR([libmbfl/nls])
- PHP_MBSTRING_ADD_INCLUDE([libmbfl])
- PHP_MBSTRING_ADD_INCLUDE([libmbfl/mbfl])
- PHP_MBSTRING_ADD_CONFIG_HEADER([libmbfl/config.h])
-
- PHP_MBSTRING_ADD_SOURCES([
- libmbfl/filters/html_entities.c
- libmbfl/filters/mbfilter_7bit.c
- libmbfl/filters/mbfilter_ascii.c
- libmbfl/filters/mbfilter_base64.c
- libmbfl/filters/mbfilter_big5.c
- libmbfl/filters/mbfilter_byte2.c
- libmbfl/filters/mbfilter_byte4.c
- libmbfl/filters/mbfilter_cp1251.c
- libmbfl/filters/mbfilter_cp1252.c
- libmbfl/filters/mbfilter_cp866.c
- libmbfl/filters/mbfilter_cp932.c
- libmbfl/filters/mbfilter_cp936.c
- libmbfl/filters/mbfilter_euc_cn.c
- libmbfl/filters/mbfilter_euc_jp.c
- libmbfl/filters/mbfilter_euc_jp_win.c
- libmbfl/filters/mbfilter_euc_kr.c
- libmbfl/filters/mbfilter_euc_tw.c
- libmbfl/filters/mbfilter_htmlent.c
- libmbfl/filters/mbfilter_hz.c
- libmbfl/filters/mbfilter_iso2022_kr.c
- libmbfl/filters/mbfilter_iso8859_1.c
- libmbfl/filters/mbfilter_iso8859_10.c
- libmbfl/filters/mbfilter_iso8859_13.c
- libmbfl/filters/mbfilter_iso8859_14.c
- libmbfl/filters/mbfilter_iso8859_15.c
- libmbfl/filters/mbfilter_iso8859_2.c
- libmbfl/filters/mbfilter_iso8859_3.c
- libmbfl/filters/mbfilter_iso8859_4.c
- libmbfl/filters/mbfilter_iso8859_5.c
- libmbfl/filters/mbfilter_iso8859_6.c
- libmbfl/filters/mbfilter_iso8859_7.c
- libmbfl/filters/mbfilter_iso8859_8.c
- libmbfl/filters/mbfilter_iso8859_9.c
- libmbfl/filters/mbfilter_jis.c
- libmbfl/filters/mbfilter_koi8r.c
- libmbfl/filters/mbfilter_qprint.c
- libmbfl/filters/mbfilter_sjis.c
- libmbfl/filters/mbfilter_ucs2.c
- libmbfl/filters/mbfilter_ucs4.c
- libmbfl/filters/mbfilter_uhc.c
- libmbfl/filters/mbfilter_utf16.c
- libmbfl/filters/mbfilter_utf32.c
- libmbfl/filters/mbfilter_utf7.c
- libmbfl/filters/mbfilter_utf7imap.c
- libmbfl/filters/mbfilter_utf8.c
- libmbfl/filters/mbfilter_uuencode.c
- libmbfl/mbfl/mbfilter.c
- libmbfl/mbfl/mbfilter_8bit.c
- libmbfl/mbfl/mbfilter_pass.c
- libmbfl/mbfl/mbfilter_wchar.c
- libmbfl/mbfl/mbfl_convert.c
- libmbfl/mbfl/mbfl_encoding.c
- libmbfl/mbfl/mbfl_filter_output.c
- libmbfl/mbfl/mbfl_ident.c
- libmbfl/mbfl/mbfl_language.c
- libmbfl/mbfl/mbfl_memory_device.c
- libmbfl/mbfl/mbfl_string.c
- libmbfl/mbfl/mbfl_allocators.c
- libmbfl/nls/nls_de.c
- libmbfl/nls/nls_en.c
- libmbfl/nls/nls_ja.c
- libmbfl/nls/nls_kr.c
- libmbfl/nls/nls_neutral.c
- libmbfl/nls/nls_ru.c
- libmbfl/nls/nls_uni.c
- libmbfl/nls/nls_zh.c
- ])
- PHP_MBSTRING_ADD_CFLAG([-DHAVE_CONFIG_H])
- else
- dnl
- dnl External libmfl
- dnl
- for inc in include include/mbfl-1.0 include/mbfl; do
- if test -f "$PHP_LIBMBFL/$inc/mbfilter.h"; then
- PHP_LIBMBFL_INCLUDE="$inc"
- break
- fi
- done
-
- if test -z "$PHP_LIBMBFL_INCLUDE"; then
- AC_MSG_ERROR([mbfilter.h not found. Please reinstall libmbfl library.])
- else
- PHP_ADD_INCLUDE([$PHP_LIBMBFL_INCLUDE])
- fi
-
- PHP_CHECK_LIBRARY(mbfl, mbfl_buffer_converter_new, [
- PHP_ADD_LIBRARY_WITH_PATH(mbfl, $PHP_LIBMBFL/lib, MBSTRING_SHARED_LIBADD)
- ],[
- AC_MSG_ERROR([Problem with libmbfl. Please check config.log for more information.])
- ], [
- -LPHP_LIBMBFL/lib
- ])
- fi
-])
-
-dnl
-dnl Main config
-dnl
-
-PHP_ARG_ENABLE(mbstring, whether to enable multibyte string support,
-[ --enable-mbstring Enable multibyte string support.])
-
-PHP_ARG_ENABLE([mbregex], [whether to enable multibyte regex support],
-[ --disable-mbregex MBSTRING: Disable multibyte regex support.], yes, no)
-
-PHP_ARG_WITH(libmbfl, [for external libmbfl],
-[ --with-libmbfl[=DIR] MBSTRING: Use external libmbfl. DIR is the libmbfl install prefix.
- If DIR is not set, the bundled libmbfl will be used.], no, no)
-
-if test "$PHP_MBSTRING" != "no"; then
- AC_DEFINE([HAVE_MBSTRING],1,[whether to have multibyte string support])
-
- PHP_MBSTRING_ADD_SOURCES([mbstring.c php_unicode.c mb_gpc.c])
-
- if test "$PHP_MBREGEX" != "no"; then
- PHP_MBSTRING_SETUP_MBREGEX
- fi
-
- dnl libmbfl is required
- PHP_MBSTRING_SETUP_LIBMBFL
- PHP_MBSTRING_EXTENSION
-fi
diff --git a/ext/mbstring/config.w32 b/ext/mbstring/config.w32
deleted file mode 100644
index 8484b46231..0000000000
--- a/ext/mbstring/config.w32
+++ /dev/null
@@ -1,63 +0,0 @@
-// $Id$
-// vim:ft=javascript
-
-ARG_ENABLE("mbstring", "multibyte string functions", "no");
-ARG_ENABLE("mbregex", "multibyte regex support", "no");
-
-if (PHP_MBSTRING == "yes") {
-
- FSO.CopyFile("ext\\mbstring\\libmbfl\\config.h.vc6",
- "ext\\mbstring\\libmbfl\\config.h", true);
- FSO.CopyFile("ext\\mbstring\\oniguruma\\win32\\config.h",
- "ext\\mbstring\\oniguruma\\config.h", true);
-
- EXTENSION("mbstring", "mbstring.c php_unicode.c mb_gpc.c", null,
- "-Iext/mbstring/libmbfl -Iext/mbstring/libmbfl/mbfl \
- -Iext/mbstring/oniguruma /D NOT_RUBY=1 /D LIBMBFL_EXPORTS=1 \
- /D HAVE_STDARG_PROTOTYPES=1 /D HAVE_CONFIG_H /D HAVE_STDLIB_H \
- /D HAVE_STRICMP /D MBFL_DLL_EXPORT=1 /D EXPORT");
-
- ADD_SOURCES("ext/mbstring/libmbfl/filters", "html_entities.c \
- mbfilter_7bit.c mbfilter_ascii.c mbfilter_base64.c mbfilter_big5.c \
- mbfilter_byte2.c mbfilter_byte4.c mbfilter_cp1251.c mbfilter_cp1252.c \
- mbfilter_cp866.c mbfilter_cp932.c mbfilter_cp936.c mbfilter_euc_cn.c \
- mbfilter_euc_jp.c mbfilter_euc_jp_win.c mbfilter_euc_kr.c \
- mbfilter_euc_tw.c mbfilter_htmlent.c mbfilter_hz.c mbfilter_iso2022_kr.c \
- mbfilter_iso8859_1.c mbfilter_iso8859_10.c mbfilter_iso8859_13.c \
- mbfilter_iso8859_14.c mbfilter_iso8859_15.c mbfilter_iso8859_2.c \
- mbfilter_iso8859_3.c mbfilter_iso8859_4.c mbfilter_iso8859_5.c \
- mbfilter_iso8859_6.c mbfilter_iso8859_7.c mbfilter_iso8859_8.c \
- mbfilter_iso8859_9.c mbfilter_jis.c mbfilter_koi8r.c mbfilter_qprint.c \
- mbfilter_sjis.c mbfilter_ucs2.c mbfilter_ucs4.c mbfilter_uhc.c \
- mbfilter_utf16.c mbfilter_utf32.c mbfilter_utf7.c mbfilter_utf7imap.c \
- mbfilter_utf8.c mbfilter_uuencode.c", "mbstring");
-
- ADD_SOURCES("ext/mbstring/libmbfl/mbfl", "mbfilter.c mbfilter_8bit.c \
- mbfilter_pass.c mbfilter_wchar.c mbfl_convert.c mbfl_encoding.c \
- mbfl_filter_output.c mbfl_ident.c mbfl_language.c mbfl_memory_device.c \
- mbfl_string.c mbfl_allocators.c", "mbstring");
-
- ADD_SOURCES("ext/mbstring/libmbfl/nls", "nls_de.c nls_en.c nls_ja.c nls_kr.c \
- nls_neutral.c nls_ru.c nls_uni.c nls_zh.c", "mbstring");
-
- AC_DEFINE('HAVE_MBSTRING', 1, 'Have mbstring support');
- AC_DEFINE('HAVE_MBSTR_CN', 1, 'CN');
- AC_DEFINE('HAVE_MBSTR_JA', 1, 'JA');
- AC_DEFINE('HAVE_MBSTR_KR', 1, 'KR');
- AC_DEFINE('HAVE_MBSTR_RU', 1, 'RU');
- AC_DEFINE('HAVE_MBSTR_TW', 1, 'TW');
-
- if (PHP_MBREGEX != "no") {
- AC_DEFINE('HAVE_STDARG_PROTOTYPES', 1, 'have stdarg.h');
- AC_DEFINE('HAVE_MBREGEX', 1);
- ADD_SOURCES("ext/mbstring/oniguruma", "regcomp.c regerror.c \
- regenc.c regexec.c reggnu.c regparse.c regposerr.c", "mbstring");
- ADD_SOURCES("ext/mbstring/oniguruma/enc", "ascii.c big5.c \
- euc_jp.c euc_kr.c euc_tw.c iso8859_1.c iso8859_2.c \
- iso8859_3.c iso8859_4.c iso8859_5.c iso8859_6.c \
- iso8859_7.c iso8859_8.c iso8859_9.c iso8859_10.c \
- iso8859_11.c iso8859_13.c iso8859_14.c iso8859_15.c iso8859_16.c \
- koi8.c koi8_r.c sjis.c utf8.c", "mbstring");
- ADD_SOURCES("ext/mbstring", "php_mbregex.c", "mbstring");
- }
-}
diff --git a/ext/mbstring/libmbfl/AUTHORS b/ext/mbstring/libmbfl/AUTHORS
deleted file mode 100644
index e606231518..0000000000
--- a/ext/mbstring/libmbfl/AUTHORS
+++ /dev/null
@@ -1,10 +0,0 @@
-Den V. Tsopa <tdv@edisoft.ru>
-Hironori Sato <satoh@jpnnet.com>
-Marcus Boerger <helly@php.net>
-Moriyoshi Koizumi <moriyoshi@php.net>
-Rui Hirokawa <hirokawa@php.net>
-Shigeru Kanemoto <sgk@happysize.co.jp>
-Tsukada Takuya <tsukada@fminn.nagano.nagano.jp>
-Tateyama <tateyan@amy.hi-ho.ne.jp>
-U. Kenkichi <kenkichi@axes.co.jp>
-Wez Furlong <wez@thebrainroom.com>
diff --git a/ext/mbstring/libmbfl/DISCLAIMER b/ext/mbstring/libmbfl/DISCLAIMER
deleted file mode 100644
index 97fe77c33c..0000000000
--- a/ext/mbstring/libmbfl/DISCLAIMER
+++ /dev/null
@@ -1,69 +0,0 @@
-# charset=UTF-8
-# vim600: encoding=UTF-8
-
- "streamable kanji code filter and converter"
-
- Copyright (c) 1998,1999,2000,2001 HappySize, Inc. All rights reserved.
-
- This software is released under the GNU Lesser General Public License.
- (Version 2.1, February 1999)
- Please read the following detail of the licence (in japanese).
-
- ◆使用許諾æ¡ä»¶â—†
-
- ã“ã®ã‚½ãƒ•ãƒˆã‚¦ã‚§ã‚¢ã¯æ ªå¼ä¼šç¤¾ãƒãƒƒãƒ”ーサイズã«ã‚ˆã£ã¦é–‹ç™ºã•ã‚Œã¾ã—ãŸã€‚æ ªå¼ä¼šç¤¾ãƒãƒƒ
- ピーサイズã¯ã€è‘—作権法ãŠã‚ˆã³ä¸‡å›½è‘—作権æ¡ç´„ã®å®šã‚ã«ã‚ˆã‚Šã€ã“ã®ã‚½ãƒ•ãƒˆã‚¦ã‚§ã‚¢ã«é–¢
- ã™ã‚‹ã™ã¹ã¦ã®æ¨©åˆ©ã‚’ç•™ä¿ã™ã‚‹æ¨©åˆ©ã‚’æŒã¡ã€ã“ã“ã«è¡Œä½¿ã—ã¾ã™ã€‚æ ªå¼ä¼šç¤¾ãƒãƒƒãƒ”ーサイ
- ズã¯ä»¥ä¸‹ã«æ˜Žè¨˜ã—ãŸæ¡ä»¶ã«å¾“ã£ã¦ã€ã“ã®ã‚½ãƒ•ãƒˆã‚¦ã‚§ã‚¢ã‚’使用ã™ã‚‹æŽ’ä»–çš„ã§ã¯ãªã„権利
- ã‚’ãŠå®¢æ§˜ã«è¨±è«¾ã—ã¾ã™ã€‚何人ãŸã‚Šã¨ã‚‚ã€ä»¥ä¸‹ã®æ¡ä»¶ã«åã—ã¦ã“ã®ã‚½ãƒ•ãƒˆã‚¦ã‚§ã‚¢ã‚’使用
- ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。
-
- ã“ã®ã‚½ãƒ•ãƒˆã‚¦ã‚§ã‚¢ã‚’「GNU Lesser General Public License (Version 2.1, February
- 1999)ã€ã«ç¤ºã•ã‚ŒãŸæ¡ä»¶ã§ä½¿ç”¨ã™ã‚‹ã“ã¨ã‚’ã€å…¨ã¦ã®æ–¹ã«è¨±è«¾ã—ã¾ã™ã€‚「GNU Lesser
- General Public Licenseã€ã‚’満ãŸã•ãªã„使用ã«ã¯ã€æ ªå¼ä¼šç¤¾ãƒãƒƒãƒ”ーサイズã‹ã‚‰æ›¸é¢
- ã«ã‚ˆã‚‹è¨±è«¾ã‚’å¾—ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚
-
- 「GNU Lesser General Public Licenseã€ã®å…¨æ–‡ã¯ä»¥ä¸‹ã®ã‚¦ã‚§ãƒ–ページã‹ã‚‰å–å¾—ã§ã
- ã¾ã™ã€‚「GNU Lesser General Public Licenseã€ã¨ã¯ã€ã“ã‚Œã¾ã§Library General
- Public Licenseã¨å‘¼ã°ã‚Œã¦ã„ãŸã‚‚ã®ã§ã™ã€‚
- http://www.gnu.org/ --- GNUウェブサイト
- http://www.gnu.org/copyleft/lesser.html --- ライセンス文é¢
- ã“ã®ãƒ©ã‚¤ã‚»ãƒ³ã‚¹ã®å†…容ãŒã‚ã‹ã‚‰ãªã„æ–¹ã€å®ˆã‚Œãªã„æ–¹ã«ã¯ä½¿ç”¨ã‚’許諾ã—ã¾ã›ã‚“。
-
- ã—ã‹ã—ãªãŒã‚‰ã€å½“社ã¨GNUプロジェクトã¨ã®ç‰¹å®šã®é–¢ä¿‚を示唆ã¾ãŸã¯ä¸»å¼µã™ã‚‹ã‚‚ã®ã§
- ã¯ã‚ã‚Šã¾ã›ã‚“。
-
- â—†ä¿è¨¼å†…容◆
-
- ã“ã®ã‚½ãƒ•ãƒˆã‚¦ã‚§ã‚¢ã¯ã€æœŸå¾…ã•ã‚ŒãŸå‹•ä½œãƒ»æ©Ÿèƒ½ãƒ»æ€§èƒ½ã‚’æŒã¤ã“ã¨ã‚’目標ã¨ã—ã¦è¨­è¨ˆã•ã‚Œ
- 開発ã•ã‚Œã¦ã„ã¾ã™ãŒã€ã“れをä¿è¨¼ã™ã‚‹ã‚‚ã®ã§ã¯ã‚ã‚Šã¾ã›ã‚“。ã“ã®ã‚½ãƒ•ãƒˆã‚¦ã‚§ã‚¢ã¯ã€Œã“
- ã®ã¾ã¾ã€ã®çŠ¶æ…‹ã§æä¾›ã•ã‚Œã¦ãŠã‚Šã€ãŸã¨ãˆã°ã“ã®ã‚½ãƒ•ãƒˆã‚¦ã‚§ã‚¢ã®æœ‰ç”¨æ€§ãªã„ã—特定ã®
- 目的ã«åˆè‡´ã™ã‚‹ã“ã¨ã¨ã„ã£ãŸã€ä½•ã‚‰ã‹ã®ä¿è¨¼å†…容ãŒã€æ˜Žç¤ºã•ã‚ŒãŸã‚Šæš—é»™ã«ç¤ºã•ã‚Œã¦ã„
- ã‚‹å ´åˆã§ã‚ã£ã¦ã‚‚ã€ãã®ä¿è¨¼ã¯ç„¡åŠ¹ã§ã™ã€‚ã“ã®ã‚½ãƒ•ãƒˆã‚¦ã‚§ã‚¢ã‚’使用ã—ãŸçµæžœãªã„ã—使
- 用ã—ãªã‹ã£ãŸçµæžœã«ã‚ˆã£ã¦ã€ç›´æŽ¥ã‚ã‚‹ã„ã¯é–“接ã«å—ã‘ãŸèº«ä½“çš„ãªå‚·å®³ã€è²¡ç”£ä¸Šã®æ害
- ã€ãƒ‡ãƒ¼ã‚¿ã®æ失ã‚ã‚‹ã„ã¯ãã®ä»–ã®å…¨ã¦ã®æ害ã«ã¤ã„ã¦ã¯ã€ãã®æ害ã®å¯èƒ½æ€§ãŒä½¿ç”¨è€…
- ã€å½“社ã‚ã‚‹ã„ã¯ç¬¬ä¸‰è€…ã«ã‚ˆã£ã¦è­¦å‘Šã•ã‚Œã¦ã„ãŸå ´åˆã§ã‚ã£ã¦ã‚‚ã€å½“社ã¯ãã®æ害ã®è³ 
- å„ŸãŠã‚ˆã³è£œå¡«ã‚’è¡Œã„ã¾ã›ã‚“。ã“ã®è¦å®šã¯ä»–ã®å…¨ã¦ã®ã€æ›¸é¢ä¸Šã¾ãŸã¯æ›¸é¢ã«ç„¡ã„ä¿è¨¼ãƒ»
- 契約・è¦å®šã«å„ªå…ˆã—ã¾ã™ã€‚
-
- ◆著作権者ã®é€£çµ¡å…ˆãŠã‚ˆã³ä½¿ç”¨æ¡ä»¶ã«ã¤ã„ã¦ã®å•ã„åˆã‚ã›å…ˆâ—†
-
- 〒102-0073
- æ±äº¬éƒ½åƒä»£ç”°åŒºä¹æ®µåŒ—1-13-5日本地所第一ビル4F
- æ ªå¼ä¼šç¤¾ãƒãƒƒãƒ”ーサイズ
- Phone: 03-3512-3655, Fax: 03-3512-3656
- Email: sales@happysize.co.jp
- Web: http://happysize.com/
-
- ◆著者◆
-
- 金本 茂 <sgk@happysize.co.jp>
-
- ◆履歴◆
-
- 1998/11/10 sgk implementation in C++
- 1999/4/25 sgk Cã§æ›¸ããªãŠã—。
- 1999/4/26 sgk 入力フィルタを実装。漢字コードを推定ã—ãªãŒã‚‰ãƒ•ã‚£ãƒ«ã‚¿ã‚’追加。
- 1999/6/?? Unicodeサãƒãƒ¼ãƒˆã€‚
- 1999/6/22 sgk ライセンスをLGPLã«å¤‰æ›´ã€‚
-
diff --git a/ext/mbstring/libmbfl/INSTALL b/ext/mbstring/libmbfl/INSTALL
deleted file mode 100644
index b07c9157cd..0000000000
--- a/ext/mbstring/libmbfl/INSTALL
+++ /dev/null
@@ -1,12 +0,0 @@
-
-For UNIX compatible system,
-
-./buildconf
-./configure
-make
-make install
-
-For Windows,
-
-Visual C++ 6.0 and Borland C++ 5.0 is suppoted.
-
diff --git a/ext/mbstring/libmbfl/LICENSE b/ext/mbstring/libmbfl/LICENSE
deleted file mode 100644
index 3b204400cf..0000000000
--- a/ext/mbstring/libmbfl/LICENSE
+++ /dev/null
@@ -1,458 +0,0 @@
- GNU LESSER GENERAL PUBLIC LICENSE
- Version 2.1, February 1999
-
- Copyright (C) 1991, 1999 Free Software Foundation, Inc.
- 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-[This is the first released version of the Lesser GPL. It also counts
- as the successor of the GNU Library Public License, version 2, hence
- the version number 2.1.]
-
- Preamble
-
- The licenses for most software are designed to take away your
-freedom to share and change it. By contrast, the GNU General Public
-Licenses are intended to guarantee your freedom to share and change
-free software--to make sure the software is free for all its users.
-
- This license, the Lesser General Public License, applies to some
-specially designated software packages--typically libraries--of the
-Free Software Foundation and other authors who decide to use it. You
-can use it too, but we suggest you first think carefully about whether
-this license or the ordinary General Public License is the better
-strategy to use in any particular case, based on the explanations below.
-
- When we speak of free software, we are referring to freedom of use,
-not price. Our General Public Licenses are designed to make sure that
-you have the freedom to distribute copies of free software (and charge
-for this service if you wish); that you receive source code or can get
-it if you want it; that you can change the software and use pieces of
-it in new free programs; and that you are informed that you can do
-these things.
-
- To protect your rights, we need to make restrictions that forbid
-distributors to deny you these rights or to ask you to surrender these
-rights. These restrictions translate to certain responsibilities for
-you if you distribute copies of the library or if you modify it.
-
- For example, if you distribute copies of the library, whether gratis
-or for a fee, you must give the recipients all the rights that we gave
-you. You must make sure that they, too, receive or can get the source
-code. If you link other code with the library, you must provide
-complete object files to the recipients, so that they can relink them
-with the library after making changes to the library and recompiling
-it. And you must show them these terms so they know their rights.
-
- We protect your rights with a two-step method: (1) we copyright the
-library, and (2) we offer you this license, which gives you legal
-permission to copy, distribute and/or modify the library.
-
- To protect each distributor, we want to make it very clear that
-there is no warranty for the free library. Also, if the library is
-modified by someone else and passed on, the recipients should know
-that what they have is not the original version, so that the original
-author's reputation will not be affected by problems that might be
-introduced by others.
-
- Finally, software patents pose a constant threat to the existence of
-any free program. We wish to make sure that a company cannot
-effectively restrict the users of a free program by obtaining a
-restrictive license from a patent holder. Therefore, we insist that
-any patent license obtained for a version of the library must be
-consistent with the full freedom of use specified in this license.
-
- Most GNU software, including some libraries, is covered by the
-ordinary GNU General Public License. This license, the GNU Lesser
-General Public License, applies to certain designated libraries, and
-is quite different from the ordinary General Public License. We use
-this license for certain libraries in order to permit linking those
-libraries into non-free programs.
-
- When a program is linked with a library, whether statically or using
-a shared library, the combination of the two is legally speaking a
-combined work, a derivative of the original library. The ordinary
-General Public License therefore permits such linking only if the
-entire combination fits its criteria of freedom. The Lesser General
-Public License permits more lax criteria for linking other code with
-the library.
-
- We call this license the "Lesser" General Public License because it
-does Less to protect the user's freedom than the ordinary General
-Public License. It also provides other free software developers Less
-of an advantage over competing non-free programs. These disadvantages
-are the reason we use the ordinary General Public License for many
-libraries. However, the Lesser license provides advantages in certain
-special circumstances.
-
- For example, on rare occasions, there may be a special need to
-encourage the widest possible use of a certain library, so that it becomes
-a de-facto standard. To achieve this, non-free programs must be
-allowed to use the library. A more frequent case is that a free
-library does the same job as widely used non-free libraries. In this
-case, there is little to gain by limiting the free library to free
-software only, so we use the Lesser General Public License.
-
- In other cases, permission to use a particular library in non-free
-programs enables a greater number of people to use a large body of
-free software. For example, permission to use the GNU C Library in
-non-free programs enables many more people to use the whole GNU
-operating system, as well as its variant, the GNU/Linux operating
-system.
-
- Although the Lesser General Public License is Less protective of the
-users' freedom, it does ensure that the user of a program that is
-linked with the Library has the freedom and the wherewithal to run
-that program using a modified version of the Library.
-
- The precise terms and conditions for copying, distribution and
-modification follow. Pay close attention to the difference between a
-"work based on the library" and a "work that uses the library". The
-former contains code derived from the library, whereas the latter must
-be combined with the library in order to run.
-
- GNU LESSER GENERAL PUBLIC LICENSE
- TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
- 0. This License Agreement applies to any software library or other
-program which contains a notice placed by the copyright holder or
-other authorized party saying it may be distributed under the terms of
-this Lesser General Public License (also called "this License").
-Each licensee is addressed as "you".
-
- A "library" means a collection of software functions and/or data
-prepared so as to be conveniently linked with application programs
-(which use some of those functions and data) to form executables.
-
- The "Library", below, refers to any such software library or work
-which has been distributed under these terms. A "work based on the
-Library" means either the Library or any derivative work under
-copyright law: that is to say, a work containing the Library or a
-portion of it, either verbatim or with modifications and/or translated
-straightforwardly into another language. (Hereinafter, translation is
-included without limitation in the term "modification".)
-
- "Source code" for a work means the preferred form of the work for
-making modifications to it. For a library, complete source code means
-all the source code for all modules it contains, plus any associated
-interface definition files, plus the scripts used to control compilation
-and installation of the library.
-
- Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope. The act of
-running a program using the Library is not restricted, and output from
-such a program is covered only if its contents constitute a work based
-on the Library (independent of the use of the Library in a tool for
-writing it). Whether that is true depends on what the Library does
-and what the program that uses the Library does.
-
- 1. You may copy and distribute verbatim copies of the Library's
-complete source code as you receive it, in any medium, provided that
-you conspicuously and appropriately publish on each copy an
-appropriate copyright notice and disclaimer of warranty; keep intact
-all the notices that refer to this License and to the absence of any
-warranty; and distribute a copy of this License along with the
-Library.
-
- You may charge a fee for the physical act of transferring a copy,
-and you may at your option offer warranty protection in exchange for a
-fee.
-
- 2. You may modify your copy or copies of the Library or any portion
-of it, thus forming a work based on the Library, and copy and
-distribute such modifications or work under the terms of Section 1
-above, provided that you also meet all of these conditions:
-
- a) The modified work must itself be a software library.
-
- b) You must cause the files modified to carry prominent notices
- stating that you changed the files and the date of any change.
-
- c) You must cause the whole of the work to be licensed at no
- charge to all third parties under the terms of this License.
-
- d) If a facility in the modified Library refers to a function or a
- table of data to be supplied by an application program that uses
- the facility, other than as an argument passed when the facility
- is invoked, then you must make a good faith effort to ensure that,
- in the event an application does not supply such function or
- table, the facility still operates, and performs whatever part of
- its purpose remains meaningful.
-
- (For example, a function in a library to compute square roots has
- a purpose that is entirely well-defined independent of the
- application. Therefore, Subsection 2d requires that any
- application-supplied function or table used by this function must
- be optional: if the application does not supply it, the square
- root function must still compute square roots.)
-
-These requirements apply to the modified work as a whole. If
-identifiable sections of that work are not derived from the Library,
-and can be reasonably considered independent and separate works in
-themselves, then this License, and its terms, do not apply to those
-sections when you distribute them as separate works. But when you
-distribute the same sections as part of a whole which is a work based
-on the Library, the distribution of the whole must be on the terms of
-this License, whose permissions for other licensees extend to the
-entire whole, and thus to each and every part regardless of who wrote
-it.
-
-Thus, it is not the intent of this section to claim rights or contest
-your rights to work written entirely by you; rather, the intent is to
-exercise the right to control the distribution of derivative or
-collective works based on the Library.
-
-In addition, mere aggregation of another work not based on the Library
-with the Library (or with a work based on the Library) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
-
- 3. You may opt to apply the terms of the ordinary GNU General Public
-License instead of this License to a given copy of the Library. To do
-this, you must alter all the notices that refer to this License, so
-that they refer to the ordinary GNU General Public License, version 2,
-instead of to this License. (If a newer version than version 2 of the
-ordinary GNU General Public License has appeared, then you can specify
-that version instead if you wish.) Do not make any other change in
-these notices.
-
- Once this change is made in a given copy, it is irreversible for
-that copy, so the ordinary GNU General Public License applies to all
-subsequent copies and derivative works made from that copy.
-
- This option is useful when you wish to copy part of the code of
-the Library into a program that is not a library.
-
- 4. You may copy and distribute the Library (or a portion or
-derivative of it, under Section 2) in object code or executable form
-under the terms of Sections 1 and 2 above provided that you accompany
-it with the complete corresponding machine-readable source code, which
-must be distributed under the terms of Sections 1 and 2 above on a
-medium customarily used for software interchange.
-
- If distribution of object code is made by offering access to copy
-from a designated place, then offering equivalent access to copy the
-source code from the same place satisfies the requirement to
-distribute the source code, even though third parties are not
-compelled to copy the source along with the object code.
-
- 5. A program that contains no derivative of any portion of the
-Library, but is designed to work with the Library by being compiled or
-linked with it, is called a "work that uses the Library". Such a
-work, in isolation, is not a derivative work of the Library, and
-therefore falls outside the scope of this License.
-
- However, linking a "work that uses the Library" with the Library
-creates an executable that is a derivative of the Library (because it
-contains portions of the Library), rather than a "work that uses the
-library". The executable is therefore covered by this License.
-Section 6 states terms for distribution of such executables.
-
- When a "work that uses the Library" uses material from a header file
-that is part of the Library, the object code for the work may be a
-derivative work of the Library even though the source code is not.
-Whether this is true is especially significant if the work can be
-linked without the Library, or if the work is itself a library. The
-threshold for this to be true is not precisely defined by law.
-
- If such an object file uses only numerical parameters, data
-structure layouts and accessors, and small macros and small inline
-functions (ten lines or less in length), then the use of the object
-file is unrestricted, regardless of whether it is legally a derivative
-work. (Executables containing this object code plus portions of the
-Library will still fall under Section 6.)
-
- Otherwise, if the work is a derivative of the Library, you may
-distribute the object code for the work under the terms of Section 6.
-Any executables containing that work also fall under Section 6,
-whether or not they are linked directly with the Library itself.
-
- 6. As an exception to the Sections above, you may also combine or
-link a "work that uses the Library" with the Library to produce a
-work containing portions of the Library, and distribute that work
-under terms of your choice, provided that the terms permit
-modification of the work for the customer's own use and reverse
-engineering for debugging such modifications.
-
- You must give prominent notice with each copy of the work that the
-Library is used in it and that the Library and its use are covered by
-this License. You must supply a copy of this License. If the work
-during execution displays copyright notices, you must include the
-copyright notice for the Library among them, as well as a reference
-directing the user to the copy of this License. Also, you must do one
-of these things:
-
- a) Accompany the work with the complete corresponding
- machine-readable source code for the Library including whatever
- changes were used in the work (which must be distributed under
- Sections 1 and 2 above); and, if the work is an executable linked
- with the Library, with the complete machine-readable "work that
- uses the Library", as object code and/or source code, so that the
- user can modify the Library and then relink to produce a modified
- executable containing the modified Library. (It is understood
- that the user who changes the contents of definitions files in the
- Library will not necessarily be able to recompile the application
- to use the modified definitions.)
-
- b) Use a suitable shared library mechanism for linking with the
- Library. A suitable mechanism is one that (1) uses at run time a
- copy of the library already present on the user's computer system,
- rather than copying library functions into the executable, and (2)
- will operate properly with a modified version of the library, if
- the user installs one, as long as the modified version is
- interface-compatible with the version that the work was made with.
-
- c) Accompany the work with a written offer, valid for at
- least three years, to give the same user the materials
- specified in Subsection 6a, above, for a charge no more
- than the cost of performing this distribution.
-
- d) If distribution of the work is made by offering access to copy
- from a designated place, offer equivalent access to copy the above
- specified materials from the same place.
-
- e) Verify that the user has already received a copy of these
- materials or that you have already sent this user a copy.
-
- For an executable, the required form of the "work that uses the
-Library" must include any data and utility programs needed for
-reproducing the executable from it. However, as a special exception,
-the materials to be distributed need not include anything that is
-normally distributed (in either source or binary form) with the major
-components (compiler, kernel, and so on) of the operating system on
-which the executable runs, unless that component itself accompanies
-the executable.
-
- It may happen that this requirement contradicts the license
-restrictions of other proprietary libraries that do not normally
-accompany the operating system. Such a contradiction means you cannot
-use both them and the Library together in an executable that you
-distribute.
-
- 7. You may place library facilities that are a work based on the
-Library side-by-side in a single library together with other library
-facilities not covered by this License, and distribute such a combined
-library, provided that the separate distribution of the work based on
-the Library and of the other library facilities is otherwise
-permitted, and provided that you do these two things:
-
- a) Accompany the combined library with a copy of the same work
- based on the Library, uncombined with any other library
- facilities. This must be distributed under the terms of the
- Sections above.
-
- b) Give prominent notice with the combined library of the fact
- that part of it is a work based on the Library, and explaining
- where to find the accompanying uncombined form of the same work.
-
- 8. You may not copy, modify, sublicense, link with, or distribute
-the Library except as expressly provided under this License. Any
-attempt otherwise to copy, modify, sublicense, link with, or
-distribute the Library is void, and will automatically terminate your
-rights under this License. However, parties who have received copies,
-or rights, from you under this License will not have their licenses
-terminated so long as such parties remain in full compliance.
-
- 9. You are not required to accept this License, since you have not
-signed it. However, nothing else grants you permission to modify or
-distribute the Library or its derivative works. These actions are
-prohibited by law if you do not accept this License. Therefore, by
-modifying or distributing the Library (or any work based on the
-Library), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Library or works based on it.
-
- 10. Each time you redistribute the Library (or any work based on the
-Library), the recipient automatically receives a license from the
-original licensor to copy, distribute, link with or modify the Library
-subject to these terms and conditions. You may not impose any further
-restrictions on the recipients' exercise of the rights granted herein.
-You are not responsible for enforcing compliance by third parties with
-this License.
-
- 11. If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues),
-conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License. If you cannot
-distribute so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you
-may not distribute the Library at all. For example, if a patent
-license would not permit royalty-free redistribution of the Library by
-all those who receive copies directly or indirectly through you, then
-the only way you could satisfy both it and this License would be to
-refrain entirely from distribution of the Library.
-
-If any portion of this section is held invalid or unenforceable under any
-particular circumstance, the balance of the section is intended to apply,
-and the section as a whole is intended to apply in other circumstances.
-
-It is not the purpose of this section to induce you to infringe any
-patents or other property right claims or to contest validity of any
-such claims; this section has the sole purpose of protecting the
-integrity of the free software distribution system which is
-implemented by public license practices. Many people have made
-generous contributions to the wide range of software distributed
-through that system in reliance on consistent application of that
-system; it is up to the author/donor to decide if he or she is willing
-to distribute software through any other system and a licensee cannot
-impose that choice.
-
-This section is intended to make thoroughly clear what is believed to
-be a consequence of the rest of this License.
-
- 12. If the distribution and/or use of the Library is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Library under this License may add
-an explicit geographical distribution limitation excluding those countries,
-so that distribution is permitted only in or among countries not thus
-excluded. In such case, this License incorporates the limitation as if
-written in the body of this License.
-
- 13. The Free Software Foundation may publish revised and/or new
-versions of the Lesser General Public License from time to time.
-Such new versions will be similar in spirit to the present version,
-but may differ in detail to address new problems or concerns.
-
-Each version is given a distinguishing version number. If the Library
-specifies a version number of this License which applies to it and
-"any later version", you have the option of following the terms and
-conditions either of that version or of any later version published by
-the Free Software Foundation. If the Library does not specify a
-license version number, you may choose any version ever published by
-the Free Software Foundation.
-
- 14. If you wish to incorporate parts of the Library into other free
-programs whose distribution conditions are incompatible with these,
-write to the author to ask for permission. For software which is
-copyrighted by the Free Software Foundation, write to the Free
-Software Foundation; we sometimes make exceptions for this. Our
-decision will be guided by the two goals of preserving the free status
-of all derivatives of our free software and of promoting the sharing
-and reuse of software generally.
-
- NO WARRANTY
-
- 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
-WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
-EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
-OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
-KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
-LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
-THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
- 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
-WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
-AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
-FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
-CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
-LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
-RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
-FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
-SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
-DAMAGES.
-
- END OF TERMS AND CONDITIONS
diff --git a/ext/mbstring/libmbfl/Makefile.am b/ext/mbstring/libmbfl/Makefile.am
deleted file mode 100644
index 7f60683435..0000000000
--- a/ext/mbstring/libmbfl/Makefile.am
+++ /dev/null
@@ -1,5 +0,0 @@
-EXTRA_DIST=AUTHORS DISCLAIMER LICENSE Makefile.bcc32 \
- config.h.bcc32 config.h.vc6 \
- libmbfl.dsp libmbfl.dsw libmbfl.sln libmbfl.vcproj mbfl.rc \
- mksbcc32.bat rules.mak.bcc32
-SUBDIRS = nls filters mbfl
diff --git a/ext/mbstring/libmbfl/Makefile.bcc32 b/ext/mbstring/libmbfl/Makefile.bcc32
deleted file mode 100644
index 6dde6b8384..0000000000
--- a/ext/mbstring/libmbfl/Makefile.bcc32
+++ /dev/null
@@ -1,33 +0,0 @@
-!include rules.mak.bcc32
-
-SUBDIRS=mbfl nls filters
-
-all: mbfl.dll mbfl.lib
-
-mbfl.lib: mbfl.dll
- implib -a mbfl.lib mbfl.dll
-
-mbfl.dll: compile mbfl.res
- @if exist linker.rsp del linker.rsp
- @for %i in ($(SUBDIRS)) do @for %j in (%i\*.obj) do @echo %j+ >> linker.rsp
- ilink32 $(LDFLAGS) @linker.rsp,mbfl.dll,,$(LIBS),,mbfl.res
- del linker.rsp
-
-mbfl.res: mbfl.rc
- brcc32 -r mbfl.rc
-
-prepare: config.h.bcc32
- @if exist linker.rsp del linker.rsp
- @copy config.h.bcc32 config.h
-
-clean:
- @for %i in ($(SUBDIRS)) do $(COMSPEC) /C mksbcc32.bat $(MAKE) %i clean
- @if exist linker.rsp del linker.rsp
- @if exist mbfl.RES del mbfl.RES
- @if exist mbfl.dll del mbfl.dll
- @if exist mbfl.lib del mbfl.lib
- @if exist config.h del config.h
-
-compile: prepare
- @for %i in ($(SUBDIRS)) do $(COMSPEC) /C mksbcc32.bat $(MAKE) %i
-
diff --git a/ext/mbstring/libmbfl/README b/ext/mbstring/libmbfl/README
deleted file mode 100644
index 5a3255560e..0000000000
--- a/ext/mbstring/libmbfl/README
+++ /dev/null
@@ -1,8 +0,0 @@
-This is Libmbfl, a streamable multibyte character code filter and
-converter library.
-
-See LICENSE and DISCLAIMER for licensing information.
-
-See the file INSTALL for building and installation instructions.
-
-# $Id$
diff --git a/ext/mbstring/libmbfl/buildconf b/ext/mbstring/libmbfl/buildconf
deleted file mode 100755
index 981812ad64..0000000000
--- a/ext/mbstring/libmbfl/buildconf
+++ /dev/null
@@ -1,6 +0,0 @@
-#!/bin/sh
-libtoolize -c -f --automake
-aclocal
-autoheader
-automake -a -c --foreign
-autoconf
diff --git a/ext/mbstring/libmbfl/config.h.bcc32 b/ext/mbstring/libmbfl/config.h.bcc32
deleted file mode 100644
index 7458e441eb..0000000000
--- a/ext/mbstring/libmbfl/config.h.bcc32
+++ /dev/null
@@ -1,12 +0,0 @@
-#define HAVE_STDIO_H 1
-#define HAVE_STDLIB_H 1
-#define HAVE_STDDEF_H 1
-#define HAVE_ASSERT_H 1
-#define HAVE_MEMORY_H 1
-/* #undef HAVE_STRINGS_H */
-#define HAVE_STRING_H 1
-/* #undef HAVE_STRCASECMP */
-#define HAVE_STRICMP 1
-#define HAVE_WIN32_NATIVE_THREAD 1
-#define USE_WIN32_NATIVE_THREAD 1
-#define ENABLE_THREADS 1
diff --git a/ext/mbstring/libmbfl/config.h.in b/ext/mbstring/libmbfl/config.h.in
deleted file mode 100644
index 8e7493257e..0000000000
--- a/ext/mbstring/libmbfl/config.h.in
+++ /dev/null
@@ -1,87 +0,0 @@
-/* config.h.in. Generated from configure.in by autoheader. */
-
-/* Define to 1 if you have the <assert.h> header file. */
-#undef HAVE_ASSERT_H
-
-/* Define to 1 if you have the <dlfcn.h> header file. */
-#undef HAVE_DLFCN_H
-
-/* Define to 1 if you have the <inttypes.h> header file. */
-#undef HAVE_INTTYPES_H
-
-/* Define to 1 if your system has a GNU libc compatible `malloc' function, and
- to 0 otherwise. */
-#undef HAVE_MALLOC
-
-/* Define to 1 if you have the <memory.h> header file. */
-#undef HAVE_MEMORY_H
-
-/* Define to 1 if your system has a GNU libc compatible `realloc' function,
- and to 0 otherwise. */
-#undef HAVE_REALLOC
-
-/* Define to 1 if you have the <stddef.h> header file. */
-#undef HAVE_STDDEF_H
-
-/* Define to 1 if you have the <stdint.h> header file. */
-#undef HAVE_STDINT_H
-
-/* Define to 1 if you have the <stdlib.h> header file. */
-#undef HAVE_STDLIB_H
-
-/* Define to 1 if you have the `strcasecmp' function. */
-#undef HAVE_STRCASECMP
-
-/* Define to 1 if you have the `strchr' function. */
-#undef HAVE_STRCHR
-
-/* Define to 1 if you have the <strings.h> header file. */
-#undef HAVE_STRINGS_H
-
-/* Define to 1 if you have the <string.h> header file. */
-#undef HAVE_STRING_H
-
-/* Define to 1 if you have the <sys/stat.h> header file. */
-#undef HAVE_SYS_STAT_H
-
-/* Define to 1 if you have the <sys/types.h> header file. */
-#undef HAVE_SYS_TYPES_H
-
-/* Define to 1 if you have the <unistd.h> header file. */
-#undef HAVE_UNISTD_H
-
-/* Name of package */
-#undef PACKAGE
-
-/* Define to the address where bug reports for this package should be sent. */
-#undef PACKAGE_BUGREPORT
-
-/* Define to the full name of this package. */
-#undef PACKAGE_NAME
-
-/* Define to the full name and version of this package. */
-#undef PACKAGE_STRING
-
-/* Define to the one symbol short name of this package. */
-#undef PACKAGE_TARNAME
-
-/* Define to the version of this package. */
-#undef PACKAGE_VERSION
-
-/* Define to 1 if you have the ANSI C header files. */
-#undef STDC_HEADERS
-
-/* Version number of package */
-#undef VERSION
-
-/* Define to empty if `const' does not conform to ANSI C. */
-#undef const
-
-/* Define to rpl_malloc if the replacement function should be used. */
-#undef malloc
-
-/* Define to rpl_realloc if the replacement function should be used. */
-#undef realloc
-
-/* Define to `unsigned' if <sys/types.h> does not define. */
-#undef size_t
diff --git a/ext/mbstring/libmbfl/config.h.vc6 b/ext/mbstring/libmbfl/config.h.vc6
deleted file mode 100644
index 7458e441eb..0000000000
--- a/ext/mbstring/libmbfl/config.h.vc6
+++ /dev/null
@@ -1,12 +0,0 @@
-#define HAVE_STDIO_H 1
-#define HAVE_STDLIB_H 1
-#define HAVE_STDDEF_H 1
-#define HAVE_ASSERT_H 1
-#define HAVE_MEMORY_H 1
-/* #undef HAVE_STRINGS_H */
-#define HAVE_STRING_H 1
-/* #undef HAVE_STRCASECMP */
-#define HAVE_STRICMP 1
-#define HAVE_WIN32_NATIVE_THREAD 1
-#define USE_WIN32_NATIVE_THREAD 1
-#define ENABLE_THREADS 1
diff --git a/ext/mbstring/libmbfl/configure.in b/ext/mbstring/libmbfl/configure.in
deleted file mode 100644
index b6e5ab581a..0000000000
--- a/ext/mbstring/libmbfl/configure.in
+++ /dev/null
@@ -1,32 +0,0 @@
-# Process this file with autoconf to produce a configure script.
-AC_INIT(mbfl/mbfilter.c)
-AM_INIT_AUTOMAKE(libmbfl, 1.0.0)
-AC_CONFIG_SRCDIR(mbfl/mbfilter.c)
-AM_CONFIG_HEADER(config.h)
-
-SHLIB_VERSION="1:0:0"
-AC_SUBST(SHLIB_VERSION)
-
-# Checks for programs.
-AC_PROG_CC
-AC_PROG_CXX
-AC_PROG_LIBTOOL
-AC_PROG_RANLIB
-
-# Checks for libraries.
-
-# Checks for header files.
-AC_HEADER_STDC
-AC_CHECK_HEADERS([stdlib.h stddef.h assert.h])
-
-# Checks for typedefs, structures, and compiler characteristics.
-AC_C_CONST
-AC_TYPE_SIZE_T
-
-# Checks for library functions.
-AC_FUNC_MALLOC
-AC_FUNC_REALLOC
-AC_CHECK_FUNCS([strcasecmp strchr])
-
-AC_CONFIG_FILES([Makefile mbfl/Makefile filters/Makefile nls/Makefile])
-AC_OUTPUT
diff --git a/ext/mbstring/libmbfl/cvsclean b/ext/mbstring/libmbfl/cvsclean
deleted file mode 100755
index 60ae246a50..0000000000
--- a/ext/mbstring/libmbfl/cvsclean
+++ /dev/null
@@ -1,14 +0,0 @@
-#!/bin/sh
-function cvsclean_sub() {
- prev_pwd=`pwd`
- cd $1
- cat .cvsignore | while read fname; do
- rm -r -f $fname
- done
- cd "$prev_pwd"
-}
-
-cvsclean_sub .
-cvsclean_sub mbfl
-cvsclean_sub filters
-cvsclean_sub nls
diff --git a/ext/mbstring/libmbfl/filters/Makefile.am b/ext/mbstring/libmbfl/filters/Makefile.am
deleted file mode 100644
index d3e5cfd257..0000000000
--- a/ext/mbstring/libmbfl/filters/Makefile.am
+++ /dev/null
@@ -1,5 +0,0 @@
-EXTRA_DIST=Makefile.bcc32
-noinst_LTLIBRARIES=libmbfl_filters.la
-INCLUDES=-I../mbfl
-libmbfl_filters_la_LDFLAGS=-version-info $(SHLIB_VERSION)
-libmbfl_filters_la_SOURCES=mbfilter_cp936.c mbfilter_hz.c mbfilter_euc_tw.c mbfilter_big5.c mbfilter_euc_jp.c mbfilter_jis.c mbfilter_iso8859_1.c mbfilter_iso8859_2.c mbfilter_cp1252.c mbfilter_cp1251.c mbfilter_ascii.c mbfilter_iso8859_3.c mbfilter_iso8859_4.c mbfilter_iso8859_5.c mbfilter_iso8859_6.c mbfilter_iso8859_7.c mbfilter_iso8859_8.c mbfilter_iso8859_9.c mbfilter_iso8859_10.c mbfilter_iso8859_13.c mbfilter_iso8859_14.c mbfilter_iso8859_15.c mbfilter_htmlent.c mbfilter_byte2.c mbfilter_byte4.c mbfilter_uuencode.c mbfilter_base64.c mbfilter_sjis.c mbfilter_7bit.c mbfilter_qprint.c mbfilter_ucs4.c mbfilter_ucs2.c mbfilter_utf32.c mbfilter_utf16.c mbfilter_utf8.c mbfilter_utf7.c mbfilter_utf7imap.c mbfilter_euc_jp_win.c mbfilter_cp932.c mbfilter_euc_cn.c mbfilter_euc_kr.c mbfilter_uhc.c mbfilter_iso2022_kr.c mbfilter_cp866.c mbfilter_koi8r.c html_entities.c cp932_table.h html_entities.h mbfilter_7bit.h mbfilter_ascii.h mbfilter_base64.h mbfilter_big5.h mbfilter_byte2.h mbfilter_byte4.h mbfilter_cp1251.h mbfilter_cp1252.h mbfilter_cp866.h mbfilter_cp932.h mbfilter_cp936.h mbfilter_euc_cn.h mbfilter_euc_jp.h mbfilter_euc_jp_win.h mbfilter_euc_kr.h mbfilter_euc_tw.h mbfilter_htmlent.h mbfilter_hz.h mbfilter_iso2022_kr.h mbfilter_iso8859_1.h mbfilter_iso8859_10.h mbfilter_iso8859_13.h mbfilter_iso8859_14.h mbfilter_iso8859_15.h mbfilter_iso8859_2.h mbfilter_iso8859_3.h mbfilter_iso8859_4.h mbfilter_iso8859_5.h mbfilter_iso8859_6.h mbfilter_iso8859_7.h mbfilter_iso8859_8.h mbfilter_iso8859_9.h mbfilter_jis.h mbfilter_koi8r.h mbfilter_qprint.h mbfilter_sjis.h mbfilter_ucs2.h mbfilter_ucs4.h mbfilter_uhc.h mbfilter_utf16.h mbfilter_utf32.h mbfilter_utf7.h mbfilter_utf7imap.h mbfilter_utf8.h mbfilter_uuencode.h unicode_prop.h unicode_table_big5.h unicode_table_cns11643.h unicode_table_cp1251.h unicode_table_cp1252.h unicode_table_cp866.h unicode_table_cp932_ext.h unicode_table_cp936.h unicode_table_iso8859_10.h unicode_table_iso8859_13.h unicode_table_iso8859_14.h unicode_table_iso8859_15.h unicode_table_iso8859_2.h unicode_table_iso8859_3.h unicode_table_iso8859_4.h unicode_table_iso8859_5.h unicode_table_iso8859_6.h unicode_table_iso8859_7.h unicode_table_iso8859_8.h unicode_table_iso8859_9.h unicode_table_jis.h unicode_table_koi8r.h unicode_table_uhc.h
diff --git a/ext/mbstring/libmbfl/filters/Makefile.bcc32 b/ext/mbstring/libmbfl/filters/Makefile.bcc32
deleted file mode 100644
index 4219ed9061..0000000000
--- a/ext/mbstring/libmbfl/filters/Makefile.bcc32
+++ /dev/null
@@ -1,9 +0,0 @@
-!include ..\rules.mak.bcc32
-INCLUDES=$(INCLUDES) -I../mbfl
-OBJS=mbfilter_cp936.obj mbfilter_hz.obj mbfilter_euc_tw.obj mbfilter_big5.obj mbfilter_euc_jp.obj mbfilter_jis.obj mbfilter_iso8859_1.obj mbfilter_iso8859_2.obj mbfilter_cp1252.obj mbfilter_cp1251.obj mbfilter_ascii.obj mbfilter_iso8859_3.obj mbfilter_iso8859_4.obj mbfilter_iso8859_5.obj mbfilter_iso8859_6.obj mbfilter_iso8859_7.obj mbfilter_iso8859_8.obj mbfilter_iso8859_9.obj mbfilter_iso8859_10.obj mbfilter_iso8859_13.obj mbfilter_iso8859_14.obj mbfilter_iso8859_15.obj mbfilter_htmlent.obj mbfilter_byte2.obj mbfilter_byte4.obj mbfilter_uuencode.obj mbfilter_base64.obj mbfilter_sjis.obj mbfilter_7bit.obj mbfilter_qprint.obj mbfilter_ucs4.obj mbfilter_ucs2.obj mbfilter_utf32.obj mbfilter_utf16.obj mbfilter_utf8.obj mbfilter_utf7.obj mbfilter_utf7imap.obj mbfilter_euc_jp_win.obj mbfilter_cp932.obj mbfilter_euc_cn.obj mbfilter_euc_kr.obj mbfilter_uhc.obj mbfilter_iso2022_kr.obj mbfilter_cp866.obj mbfilter_koi8r.obj html_entities.obj
-
-all: $(OBJS)
-
-clean:
- @for %i in ($(OBJS)) do @if exist %i del %i
-
diff --git a/ext/mbstring/libmbfl/filters/cp932_table.h b/ext/mbstring/libmbfl/filters/cp932_table.h
deleted file mode 100644
index d8cbb7f0a8..0000000000
--- a/ext/mbstring/libmbfl/filters/cp932_table.h
+++ /dev/null
@@ -1,95 +0,0 @@
-/*
- * "streamable kanji code filter and converter"
- * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved.
- *
- * LICENSE NOTICES
- *
- * This file is part of "streamable kanji code filter and converter",
- * which is distributed under the terms of GNU Lesser General Public
- * License (version 2) as published by the Free Software Foundation.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with "streamable kanji code filter and converter";
- * if not, write to the Free Software Foundation, Inc., 59 Temple Place,
- * Suite 330, Boston, MA 02111-1307 USA
- *
- * The author of this file:
- *
- */
-
-#ifndef CP932_TABLE_H
-#define CP932_TABLE_H
-
-/*
- * cp932 table
- */
-static const unsigned short cp932ext3_eucjp_table[] = {
- /* ku 115 */
- 0xF3F3,0xF3F4,0xF3F5,0xF3F6,0xF3F7,0xF3F8,0xF3F9,0xF3FA,
- 0xF3FB,0xF3FC,0xF3FD,0xF3FE,0xF4A1,0xF4A2,0xF4A3,0xF4A4,
- 0xF4A5,0xF4A6,0xF4A7,0xF4A8,0x224C,0xA2C3,0xF4A9,0xF4AA,
- 0xF4AB,0xF4AC,0xF4AD,0x2268,0xD4E3,0xDCDF,0xE4E9,0xE3F8,
- 0xD9A1,0xB1BB,0xF4AE,0xC2AD,0xC3FC,0xE4D0,0xC2BF,0xBCF4,
- 0xB0A9,0xB0C8,0xF4AF,0xB0D2,0xB0D4,0xB0E3,0xB0EE,0xB1A7,
- 0xB1A3,0xB1AC,0xB1A9,0xB1BE,0xB1DF,0xB1D8,0xB1C8,0xB1D7,
- 0xB1E3,0xB1F4,0xB1E1,0xB2A3,0xF4B0,0xB2BB,0xB2E6,0xB2ED,
- 0xB2F5,0xB2FC,0xF4B1,0xB3B5,0xB3D8,0xB3DB,0xB3E5,0xB3EE,
- 0xB3FB,0xF4B2,0xF4B3,0xB4C0,0xB4C7,0xB4D0,0xB4DE,0xF4B4,
- 0xB5AA,0xF4B5,0xB5AF,0xB5C4,0xB5E8,0xF4B6,0xB7C2,0xB7E4,
- 0xB7E8,0xB7E7,0xF4B7,0xF4B8,0xF4B9,0xB8CE,
-
- /* ku 116 */
- 0xB8E1,0xB8F5,0xB8F7,0xB8F8,0xB8FC,0xB9AF,0xB9B7,0xBABE,
- 0xBADB,0xCDAA,0xBAE1,0xF4BA,0xBAEB,0xBBB3,0xBBB8,0xF4BB,
- 0xBBCA,0xF4BC,0xF4BD,0xBBD0,0xBBDE,0xBBF4,0xBBF5,0xBBF9,
- 0xBCE4,0xBCED,0xBCFE,0xF4BE,0xBDC2,0xBDE7,0xF4BF,0xBDF0,
- 0xBEB0,0xBEAC,0xF4C0,0xBEB3,0xBEBD,0xBECD,0xBEC9,0xBEE4,
- 0xBFA8,0xBFC9,0xC0C4,0xC0E4,0xC0F4,0xC1A6,0xF4C1,0xC1F5,
- 0xC1FC,0xF4C2,0xC1F8,0xC2AB,0xC2A1,0xC2A5,0xF4C3,0xC2B8,
- 0xC2BA,0xF4C4,0xC2C4,0xC2D2,0xC2D7,0xC2DB,0xC2DE,0xC2ED,
- 0xC2F0,0xF4C5,0xC3A1,0xC3B5,0xC3C9,0xC3B9,0xF4C6,0xC3D8,
- 0xC3FE,0xF4C7,0xC4CC,0xF4C8,0xC4D9,0xC4EA,0xC4FD,0xF4C9,
- 0xC5A7,0xC5B5,0xC5B6,0xF4CA,0xC5D5,0xC6B8,0xC6D7,0xC6E0,
- 0xC6EA,0xC6E3,0xC7A1,0xC7AB,0xC7C7,0xC7C3,
-
- /* ku 117 */
- 0xC7CB,0xC7CF,0xC7D9,0xF4CB,0xF4CC,0xC7E6,0xC7EE,0xC7FC,
- 0xC7EB,0xC7F0,0xC8B1,0xC8E5,0xC8F8,0xC9A6,0xC9AB,0xC9AD,
- 0xF4CD,0xC9CA,0xC9D3,0xC9E9,0xC9E3,0xC9FC,0xC9F4,0xC9F5,
- 0xF4CE,0xCAB3,0xCABD,0xCAEF,0xCAF1,0xCBAE,0xF4CF,0xCBCA,
- 0xCBE6,0xCBEA,0xCBF0,0xCBF4,0xCBEE,0xCCA5,0xCBF9,0xCCAB,
- 0xCCAE,0xCCAD,0xCCB2,0xCCC2,0xCCD0,0xCCD9,0xF4D0,0xCDBB,
- 0xF4D1,0xCEBB,0xF4D2,0xCEBA,0xCEC3,0xF4D3,0xCEF2,0xB3DD,
- 0xCFD5,0xCFE2,0xCFE9,0xCFED,0xF4D4,0xF4D5,0xF4D6,0xF4D7,
- 0xD0E5,0xF4D8,0xD0E9,0xD1E8,0xF4D9,0xF4DA,0xD1EC,0xD2BB,
- 0xF4DB,0xD3E1,0xD3E8,0xD4A7,0xF4DC,0xF4DD,0xD4D4,0xD4F2,
- 0xD5AE,0xF4DE,0xD7DE,0xF4DF,0xD8A2,0xD8B7,0xD8C1,0xD8D1,
- 0xD8F4,0xD9C6,0xD9C8,0xD9D1,0xF4E0,0xF4E1,
-
- /* ku 118 */
- 0xF4E2,0xF4E3,0xF4E4,0xDCD3,0xDDC8,0xDDD4,0xDDEA,0xDDFA,
- 0xDEA4,0xDEB0,0xF4E5,0xDEB5,0xDECB,0xF4E6,0xDFB9,0xF4E7,
- 0xDFC3,0xF4E8,0xF4E9,0xE0D9,0xF4EA,0xF4EB,0xE1E2,0xF4EC,
- 0xF4ED,0xF4EE,0xE2C7,0xE3A8,0xE3A6,0xE3A9,0xE3AF,0xE3B0,
- 0xE3AA,0xE3AB,0xE3BC,0xE3C1,0xE3BF,0xE3D5,0xE3D8,0xE3D6,
- 0xE3DF,0xE3E3,0xE3E1,0xE3D4,0xE3E9,0xE4A6,0xE3F1,0xE3F2,
- 0xE4CB,0xE4C1,0xE4C3,0xE4BE,0xF4EF,0xE4C0,0xE4C7,0xE4BF,
- 0xE4E0,0xE4DE,0xE4D1,0xF4F0,0xE4DC,0xE4D2,0xE4DB,0xE4D4,
- 0xE4FA,0xE4EF,0xE5B3,0xE5BF,0xE5C9,0xE5D0,0xE5E2,0xE5EA,
- 0xE5EB,0xF4F1,0xF4F2,0xF4F3,0xE6E8,0xE6EF,0xE7AC,0xF4F4,
- 0xE7AE,0xF4F5,0xE7B1,0xF4F6,0xE7B2,0xE8B1,0xE8B6,0xF4F7,
- 0xF4F8,0xE8DD,0xF4F9,0xF4FA,0xE9D1,0xF4FB,
-
- /* ku 119 */
- 0xE9ED,0xEACD,0xF4FC,0xEADB,0xEAE6,0xEAEA,0xEBA5,0xEBFB,
- 0xEBFA,0xF4FD,0xECD6,0xF4FE
-};
-
-static const int cp932ext3_eucjp_table_size = (sizeof (cp932ext3_eucjp_table) / sizeof (unsigned short));
-
-#endif /* CP932_TABLE_H */
diff --git a/ext/mbstring/libmbfl/filters/html_entities.c b/ext/mbstring/libmbfl/filters/html_entities.c
deleted file mode 100644
index 59eb1818d0..0000000000
--- a/ext/mbstring/libmbfl/filters/html_entities.c
+++ /dev/null
@@ -1,297 +0,0 @@
-/*
- * "streamable kanji code filter and converter"
- * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved.
- *
- * LICENSE NOTICES
- *
- * This file is part of "streamable kanji code filter and converter",
- * which is distributed under the terms of GNU Lesser General Public
- * License (version 2) as published by the Free Software Foundation.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with "streamable kanji code filter and converter";
- * if not, write to the Free Software Foundation, Inc., 59 Temple Place,
- * Suite 330, Boston, MA 02111-1307 USA
- *
- * The author of this part: Marcus Boerger <helly@php.net>
- *
- */
-/*
- * The source code included in this files was separated from mbfilter.c
- * by moriyoshi koizumi <moriyoshi@php.net> on 4 dec 2002.
- *
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "mbfilter.h"
-#include "html_entities.h"
-
-const mbfl_html_entity_entry mbfl_html_entity_list[] = {
- {"quot", 34},
- {"amp", 38},
- {"lt", 60},
- {"gt", 62},
- {"nbsp", 160},
- {"iexcl", 161},
- {"cent", 162},
- {"pound", 163},
- {"curren", 164},
- {"yen", 165},
- {"brvbar", 166},
- {"sect", 167},
- {"uml", 168},
- {"copy", 169},
- {"ordf", 170},
- {"laquo", 171},
- {"not", 172},
- {"shy", 173},
- {"reg", 174},
- {"macr", 175},
- {"deg", 176},
- {"plusmn", 177},
- {"sup2", 178},
- {"sup3", 179},
- {"acute", 180},
- {"micro", 181},
- {"para", 182},
- {"middot", 183},
- {"cedil", 184},
- {"sup1", 185},
- {"ordm", 186},
- {"raquo", 187},
- {"frac14", 188},
- {"frac12", 189},
- {"frac34", 190},
- {"iquest", 191},
- {"Agrave", 192},
- {"Aacute", 193},
- {"Acirc", 194},
- {"Atilde", 195},
- {"Auml", 196},
- {"Aring", 197},
- {"AElig", 198},
- {"Ccedil", 199},
- {"Egrave", 200},
- {"Eacute", 201},
- {"Ecirc", 202},
- {"Euml", 203},
- {"Igrave", 204},
- {"Iacute", 205},
- {"Icirc", 206},
- {"Iuml", 207},
- {"ETH", 208},
- {"Ntilde", 209},
- {"Ograve", 210},
- {"Oacute", 211},
- {"Ocirc", 212},
- {"Otilde", 213},
- {"Ouml", 214},
- {"times", 215},
- {"Oslash", 216},
- {"Ugrave", 217},
- {"Uacute", 218},
- {"Ucirc", 219},
- {"Uuml", 220},
- {"Yacute", 221},
- {"THORN", 222},
- {"szlig", 223},
- {"agrave", 224},
- {"aacute", 225},
- {"acirc", 226},
- {"atilde", 227},
- {"auml", 228},
- {"aring", 229},
- {"aelig", 230},
- {"ccedil", 231},
- {"egrave", 232},
- {"eacute", 233},
- {"ecirc", 234},
- {"euml", 235},
- {"igrave", 236},
- {"iacute", 237},
- {"icirc", 238},
- {"iuml", 239},
- {"eth", 240},
- {"ntilde", 241},
- {"ograve", 242},
- {"oacute", 243},
- {"ocirc", 244},
- {"otilde", 245},
- {"ouml", 246},
- {"divide", 247},
- {"oslash", 248},
- {"ugrave", 249},
- {"uacute", 250},
- {"ucirc", 251},
- {"uuml", 252},
- {"yacute", 253},
- {"thorn", 254},
- {"yuml", 255},
- {"OElig", 338},
- {"oelig", 339},
- {"Scaron", 352},
- {"scaron", 353},
- {"Yuml", 376},
- {"fnof", 402},
- {"circ", 710},
- {"tilde", 732},
- {"Alpha", 913},
- {"Beta", 914},
- {"Gamma", 915},
- {"Delta", 916},
- {"Epsilon", 917},
- {"Zeta", 918},
- {"Eta", 919},
- {"Theta", 920},
- {"Iota", 921},
- {"Kappa", 922},
- {"Lambda", 923},
- {"Mu", 924},
- {"Nu", 925},
- {"Xi", 926},
- {"Omicron", 927},
- {"Pi", 928},
- {"Rho", 929},
- {"Sigma", 931},
- {"Tau", 932},
- {"Upsilon", 933},
- {"Phi", 934},
- {"Chi", 935},
- {"Psi", 936},
- {"Omega", 937},
- {"beta", 946},
- {"gamma", 947},
- {"delta", 948},
- {"epsilon", 949},
- {"zeta", 950},
- {"eta", 951},
- {"theta", 952},
- {"iota", 953},
- {"kappa", 954},
- {"lambda", 955},
- {"mu", 956},
- {"nu", 957},
- {"xi", 958},
- {"omicron", 959},
- {"pi", 960},
- {"rho", 961},
- {"sigmaf", 962},
- {"sigma", 963},
- {"tau", 964},
- {"upsilon", 965},
- {"phi", 966},
- {"chi", 967},
- {"psi", 968},
- {"omega", 969},
- {"thetasym", 977},
- {"upsih", 978},
- {"piv", 982},
- {"ensp", 8194},
- {"emsp", 8195},
- {"thinsp", 8201},
- {"zwnj", 8204},
- {"zwj", 8205},
- {"lrm", 8206},
- {"rlm", 8207},
- {"ndash", 8211},
- {"mdash", 8212},
- {"lsquo", 8216},
- {"rsquo", 8217},
- {"sbquo", 8218},
- {"ldquo", 8220},
- {"rdquo", 8221},
- {"bdquo", 8222},
- {"dagger", 8224},
- {"Dagger", 8225},
- {"bull", 8226},
- {"hellip", 8230},
- {"permil", 8240},
- {"prime", 8242},
- {"Prime", 8243},
- {"lsaquo", 8249},
- {"rsaquo", 8250},
- {"oline", 8254},
- {"frasl", 8260},
- {"euro", 8364},
- {"weierp", 8472},
- {"image", 8465},
- {"real", 8476},
- {"trade", 8482},
- {"alefsym", 8501},
- {"larr", 8592},
- {"uarr", 8593},
- {"rarr", 8594},
- {"darr", 8595},
- {"harr", 8596},
- {"crarr", 8629},
- {"lArr", 8656},
- {"uArr", 8657},
- {"rArr", 8658},
- {"dArr", 8659},
- {"hArr", 8660},
- {"forall", 8704},
- {"part", 8706},
- {"exist", 8707},
- {"empty", 8709},
- {"nabla", 8711},
- {"isin", 8712},
- {"notin", 8713},
- {"ni", 8715},
- {"prod", 8719},
- {"sum", 8721},
- {"minus", 8722},
- {"lowast", 8727},
- {"radic", 8730},
- {"prop", 8733},
- {"infin", 8734},
- {"ang", 8736},
- {"and", 8743},
- {"or", 8744},
- {"cap", 8745},
- {"cup", 8746},
- {"int", 8747},
- {"there4", 8756},
- {"sim", 8764},
- {"cong", 8773},
- {"asymp", 8776},
- {"ne", 8800},
- {"equiv", 8801},
- {"le", 8804},
- {"ge", 8805},
- {"sub", 8834},
- {"sup", 8835},
- {"nsub", 8836},
- {"sube", 8838},
- {"supe", 8839},
- {"oplus", 8853},
- {"otimes", 8855},
- {"perp", 8869},
- {"sdot", 8901},
- {"lceil", 8968},
- {"rceil", 8969},
- {"lfloor", 8970},
- {"rfloor", 8971},
- {"lang", 9001},
- {"rang", 9002},
- {"loz", 9674},
- {"spades", 9824},
- {"clubs", 9827},
- {"hearts", 9829},
- {"diams", 9830},
- {NULL, -1} /* mark end of table */
-};
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- */
diff --git a/ext/mbstring/libmbfl/filters/html_entities.h b/ext/mbstring/libmbfl/filters/html_entities.h
deleted file mode 100644
index a73b9d5bbd..0000000000
--- a/ext/mbstring/libmbfl/filters/html_entities.h
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * "streamable kanji code filter and converter"
- * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved.
- *
- * LICENSE NOTICES
- *
- * This file is part of "streamable kanji code filter and converter",
- * which is distributed under the terms of GNU Lesser General Public
- * License (version 2) as published by the Free Software Foundation.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with "streamable kanji code filter and converter";
- * if not, write to the Free Software Foundation, Inc., 59 Temple Place,
- * Suite 330, Boston, MA 02111-1307 USA
- *
- * The author of this part: Marcus Boerger <helly@php.net>
- *
- */
-/*
- * The source code included in this files was separated from mbfilter.h
- * by moriyoshi koizumi <moriyoshi@php.net> on 4 dec 2002.
- *
- */
-
-#ifndef MBFL_HTML_ENTITIES_H
-#define MBFL_HTML_ENTITIES_H
-
-typedef struct _mbfl_html_entity_entry {
- char * name;
- int code;
-} mbfl_html_entity_entry;
-
-extern const mbfl_html_entity_entry mbfl_html_entity_list[];
-
-#endif /* MBFL_HTML_ENTITIES_H */
-
diff --git a/ext/mbstring/libmbfl/filters/mbfilter_7bit.c b/ext/mbstring/libmbfl/filters/mbfilter_7bit.c
deleted file mode 100644
index 7b793cd540..0000000000
--- a/ext/mbstring/libmbfl/filters/mbfilter_7bit.c
+++ /dev/null
@@ -1,82 +0,0 @@
-/*
- * "streamable kanji code filter and converter"
- * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved.
- *
- * LICENSE NOTICES
- *
- * This file is part of "streamable kanji code filter and converter",
- * which is distributed under the terms of GNU Lesser General Public
- * License (version 2) as published by the Free Software Foundation.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with "streamable kanji code filter and converter";
- * if not, write to the Free Software Foundation, Inc., 59 Temple Place,
- * Suite 330, Boston, MA 02111-1307 USA
- *
- * The author of this file:
- *
- */
-/*
- * The source code included in this files was separated from mbfilter.c
- * by Moriyoshi Koizumi <moriyoshi@php.net> on 4 Dec 2002. The file
- * mbfilter.c is included in this package .
- *
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "mbfilter.h"
-#include "mbfilter_7bit.h"
-
-const mbfl_encoding mbfl_encoding_7bit = {
- mbfl_no_encoding_7bit,
- "7bit",
- "7bit",
- NULL,
- NULL,
- MBFL_ENCTYPE_SBCS
-};
-
-const struct mbfl_convert_vtbl vtbl_8bit_7bit = {
- mbfl_no_encoding_8bit,
- mbfl_no_encoding_7bit,
- mbfl_filt_conv_common_ctor,
- mbfl_filt_conv_common_dtor,
- mbfl_filt_conv_any_7bit,
- mbfl_filt_conv_common_flush
-};
-
-const struct mbfl_convert_vtbl vtbl_7bit_8bit = {
- mbfl_no_encoding_7bit,
- mbfl_no_encoding_8bit,
- mbfl_filt_conv_common_ctor,
- mbfl_filt_conv_common_dtor,
- mbfl_filt_conv_7bit_any,
- mbfl_filt_conv_common_flush
-};
-
-
-#define CK(statement) do { if ((statement) < 0) return (-1); } while (0)
-
-int mbfl_filt_conv_7bit_any(int c, mbfl_convert_filter *filter)
-{
- return (*filter->output_function)(c, filter->data);
-}
-
-
-int mbfl_filt_conv_any_7bit(int c, mbfl_convert_filter *filter)
-{
- if (c >= 0 && c < 0x80) {
- CK((*filter->output_function)(c, filter->data));
- }
- return c;
-}
-
-
diff --git a/ext/mbstring/libmbfl/filters/mbfilter_7bit.h b/ext/mbstring/libmbfl/filters/mbfilter_7bit.h
deleted file mode 100644
index d9a285fb1b..0000000000
--- a/ext/mbstring/libmbfl/filters/mbfilter_7bit.h
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * "streamable kanji code filter and converter"
- * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved.
- *
- * LICENSE NOTICES
- *
- * This file is part of "streamable kanji code filter and converter",
- * which is distributed under the terms of GNU Lesser General Public
- * License (version 2) as published by the Free Software Foundation.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with "streamable kanji code filter and converter";
- * if not, write to the Free Software Foundation, Inc., 59 Temple Place,
- * Suite 330, Boston, MA 02111-1307 USA
- *
- * The author of this file:
- *
- */
-/*
- * The source code included in this files was separated from mbfilter.c
- * by Moriyoshi Koizumi <moriyoshi@php.net> on 4 Dec 2002. The file
- * mbfilter.c is included in this package .
- *
- */
-
-#ifndef MBFL_MBFILTER_7BIT_H
-#define MBFL_MBFILTER_7BIT_H
-
-#include "mbfilter.h"
-
-extern const mbfl_encoding mbfl_encoding_7bit;
-extern const struct mbfl_convert_vtbl vtbl_8bit_7bit;
-extern const struct mbfl_convert_vtbl vtbl_7bit_8bit;
-
-int mbfl_filt_conv_7bit_any(int c, mbfl_convert_filter *filter);
-int mbfl_filt_conv_any_7bit(int c, mbfl_convert_filter *filter);
-
-#endif /* MBFL_MBFILTER_7BIT_H */
diff --git a/ext/mbstring/libmbfl/filters/mbfilter_ascii.c b/ext/mbstring/libmbfl/filters/mbfilter_ascii.c
deleted file mode 100644
index 34366db6c0..0000000000
--- a/ext/mbstring/libmbfl/filters/mbfilter_ascii.c
+++ /dev/null
@@ -1,114 +0,0 @@
-/*
- * "streamable kanji code filter and converter"
- * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved.
- *
- * LICENSE NOTICES
- *
- * This file is part of "streamable kanji code filter and converter",
- * which is distributed under the terms of GNU Lesser General Public
- * License (version 2) as published by the Free Software Foundation.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with "streamable kanji code filter and converter";
- * if not, write to the Free Software Foundation, Inc., 59 Temple Place,
- * Suite 330, Boston, MA 02111-1307 USA
- *
- * The author of this file:
- *
- */
-/*
- * The source code included in this files was separated from mbfilter.c
- * by Moriyoshi Koizumi <moriyoshi@php.net> on 4 Dec 2002. The file
- * mbfilter.c is included in this package .
- *
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "mbfilter.h"
-#include "mbfilter_ascii.h"
-
-static int mbfl_filt_ident_ascii(int c, mbfl_identify_filter *filter);
-
-static const char *mbfl_encoding_ascii_aliases[] = {"ANSI_X3.4-1968", "iso-ir-6", "ANSI_X3.4-1986", "ISO_646.irv:1991", "US-ASCII", "ISO646-US", "us", "IBM367", "cp367", "csASCII", NULL};
-
-const mbfl_encoding mbfl_encoding_ascii = {
- mbfl_no_encoding_ascii,
- "ASCII",
- "US-ASCII", /* preferred MIME name */
- (const char *(*)[])&mbfl_encoding_ascii_aliases,
- NULL,
- MBFL_ENCTYPE_SBCS
-};
-
-const struct mbfl_identify_vtbl vtbl_identify_ascii = {
- mbfl_no_encoding_ascii,
- mbfl_filt_ident_common_ctor,
- mbfl_filt_ident_common_dtor,
- mbfl_filt_ident_ascii
-};
-
-const struct mbfl_convert_vtbl vtbl_ascii_wchar = {
- mbfl_no_encoding_ascii,
- mbfl_no_encoding_wchar,
- mbfl_filt_conv_common_ctor,
- mbfl_filt_conv_common_dtor,
- mbfl_filt_conv_ascii_wchar,
- mbfl_filt_conv_common_flush
-};
-
-const struct mbfl_convert_vtbl vtbl_wchar_ascii = {
- mbfl_no_encoding_wchar,
- mbfl_no_encoding_ascii,
- mbfl_filt_conv_common_ctor,
- mbfl_filt_conv_common_dtor,
- mbfl_filt_conv_wchar_ascii,
- mbfl_filt_conv_common_flush
-};
-
-#define CK(statement) do { if ((statement) < 0) return (-1); } while (0)
-
-/*
- * ASCII => wchar
- */
-int mbfl_filt_conv_ascii_wchar(int c, mbfl_convert_filter *filter)
-{
- return (*filter->output_function)(c, filter->data);
-}
-
-
-/*
- * wchar => ASCII
- */
-int mbfl_filt_conv_wchar_ascii(int c, mbfl_convert_filter *filter)
-{
- if (c >= 0 && c < 0x80) {
- CK((*filter->output_function)(c, filter->data));
- } else {
- if (filter->illegal_mode != MBFL_OUTPUTFILTER_ILLEGAL_MODE_NONE) {
- CK(mbfl_filt_conv_illegal_output(c, filter));
- }
- }
-
- return c;
-}
-
-static int mbfl_filt_ident_ascii(int c, mbfl_identify_filter *filter)
-{
- if (c >= 0x20 && c < 0x80) {
- ;
- } else if (c == 0x0d || c == 0x0a || c == 0x09 || c == 0) { /* CR or LF or HTAB or null */
- ;
- } else {
- filter->flag = 1;
- }
-
- return c;
-}
diff --git a/ext/mbstring/libmbfl/filters/mbfilter_ascii.h b/ext/mbstring/libmbfl/filters/mbfilter_ascii.h
deleted file mode 100644
index c48ced6447..0000000000
--- a/ext/mbstring/libmbfl/filters/mbfilter_ascii.h
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * "streamable kanji code filter and converter"
- * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved.
- *
- * LICENSE NOTICES
- *
- * This file is part of "streamable kanji code filter and converter",
- * which is distributed under the terms of GNU Lesser General Public
- * License (version 2) as published by the Free Software Foundation.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with "streamable kanji code filter and converter";
- * if not, write to the Free Software Foundation, Inc., 59 Temple Place,
- * Suite 330, Boston, MA 02111-1307 USA
- *
- * The author of this file:
- *
- */
-/*
- * The source code included in this files was separated from mbfilter.c
- * by Moriyoshi Koizumi <moriyoshi@php.net> on 4 Dec 2002. The file
- * mbfilter.c is included in this package .
- *
- */
-
-#ifndef MBFL_MBFILTER_ASCII_H
-#define MBFL_MBFILTER_ASCII_H
-
-#include "mbfilter.h"
-
-extern const mbfl_encoding mbfl_encoding_ascii;
-extern const struct mbfl_identify_vtbl vtbl_identify_ascii;
-extern const struct mbfl_convert_vtbl vtbl_ascii_wchar;
-extern const struct mbfl_convert_vtbl vtbl_wchar_ascii;
-
-int mbfl_filt_conv_ascii_wchar(int c, mbfl_convert_filter *filter);
-int mbfl_filt_conv_wchar_ascii(int c, mbfl_convert_filter *filter);
-
-#endif /* MBFL_MBFILTER_ASCII_H */
-
-
diff --git a/ext/mbstring/libmbfl/filters/mbfilter_base64.c b/ext/mbstring/libmbfl/filters/mbfilter_base64.c
deleted file mode 100644
index 13341f9e9f..0000000000
--- a/ext/mbstring/libmbfl/filters/mbfilter_base64.c
+++ /dev/null
@@ -1,214 +0,0 @@
- /*
- * "streamable kanji code filter and converter"
- * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved.
- *
- * LICENSE NOTICES
- *
- * This file is part of "streamable kanji code filter and converter",
- * which is distributed under the terms of GNU Lesser General Public
- * License (version 2) as published by the Free Software Foundation.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with "streamable kanji code filter and converter";
- * if not, write to the Free Software Foundation, Inc., 59 Temple Place,
- * Suite 330, Boston, MA 02111-1307 USA
- *
- * The author of this file:
- *
- */
-/*
- * The source code included in this files was separated from mbfilter.c
- * by Moriyoshi Koizumi <moriyoshi@php.net> on 4 Dec 2002. The file
- * mbfilter.c is included in this package .
- *
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "mbfilter.h"
-#include "mbfilter_base64.h"
-
-const mbfl_encoding mbfl_encoding_base64 = {
- mbfl_no_encoding_base64,
- "BASE64",
- "BASE64",
- NULL,
- NULL,
- MBFL_ENCTYPE_SBCS
-};
-
-const struct mbfl_convert_vtbl vtbl_8bit_b64 = {
- mbfl_no_encoding_8bit,
- mbfl_no_encoding_base64,
- mbfl_filt_conv_common_ctor,
- mbfl_filt_conv_common_dtor,
- mbfl_filt_conv_base64enc,
- mbfl_filt_conv_base64enc_flush
-};
-
-const struct mbfl_convert_vtbl vtbl_b64_8bit = {
- mbfl_no_encoding_base64,
- mbfl_no_encoding_8bit,
- mbfl_filt_conv_common_ctor,
- mbfl_filt_conv_common_dtor,
- mbfl_filt_conv_base64dec,
- mbfl_filt_conv_base64dec_flush
-};
-
-
-#define CK(statement) do { if ((statement) < 0) return (-1); } while (0)
-
-/*
- * any => BASE64
- */
-static const unsigned char mbfl_base64_table[] = {
- /* 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', */
- 0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4a,0x4b,0x4c,0x4d,
- /* 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', */
- 0x4e,0x4f,0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5a,
- /* 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', */
- 0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6a,0x6b,0x6c,0x6d,
- /* 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', */
- 0x6e,0x6f,0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7a,
- /* '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '+', '/', '\0' */
- 0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x2b,0x2f,0x00
-};
-
-int mbfl_filt_conv_base64enc(int c, mbfl_convert_filter *filter)
-{
- int n;
-
- n = (filter->status & 0xff);
- if (n == 0) {
- filter->status++;
- filter->cache = (c & 0xff) << 16;
- } else if (n == 1) {
- filter->status++;
- filter->cache |= (c & 0xff) << 8;
- } else {
- filter->status &= ~0xff;
- if ((filter->status & MBFL_BASE64_STS_MIME_HEADER) == 0) {
- n = (filter->status & 0xff00) >> 8;
- if (n > 72) {
- CK((*filter->output_function)(0x0d, filter->data)); /* CR */
- CK((*filter->output_function)(0x0a, filter->data)); /* LF */
- filter->status &= ~0xff00;
- }
- filter->status += 0x400;
- }
- n = filter->cache | (c & 0xff);
- CK((*filter->output_function)(mbfl_base64_table[(n >> 18) & 0x3f], filter->data));
- CK((*filter->output_function)(mbfl_base64_table[(n >> 12) & 0x3f], filter->data));
- CK((*filter->output_function)(mbfl_base64_table[(n >> 6) & 0x3f], filter->data));
- CK((*filter->output_function)(mbfl_base64_table[n & 0x3f], filter->data));
- }
-
- return c;
-}
-
-int mbfl_filt_conv_base64enc_flush(mbfl_convert_filter *filter)
-{
- int status, cache, len;
-
- status = filter->status & 0xff;
- cache = filter->cache;
- len = (filter->status & 0xff00) >> 8;
- filter->status &= ~0xffff;
- filter->cache = 0;
- /* flush fragments */
- if (status >= 1) {
- if ((filter->status & MBFL_BASE64_STS_MIME_HEADER) == 0) {
- if (len > 72){
- CK((*filter->output_function)(0x0d, filter->data)); /* CR */
- CK((*filter->output_function)(0x0a, filter->data)); /* LF */
- }
- }
- CK((*filter->output_function)(mbfl_base64_table[(cache >> 18) & 0x3f], filter->data));
- CK((*filter->output_function)(mbfl_base64_table[(cache >> 12) & 0x3f], filter->data));
- if (status == 1) {
- CK((*filter->output_function)(0x3d, filter->data)); /* '=' */
- CK((*filter->output_function)(0x3d, filter->data)); /* '=' */
- } else {
- CK((*filter->output_function)(mbfl_base64_table[(cache >> 6) & 0x3f], filter->data));
- CK((*filter->output_function)(0x3d, filter->data)); /* '=' */
- }
- }
- return 0;
-}
-
-/*
- * BASE64 => any
- */
-int mbfl_filt_conv_base64dec(int c, mbfl_convert_filter *filter)
-{
- int n;
-
- if (c == 0x0d || c == 0x0a || c == 0x20 || c == 0x09 || c == 0x3d) { /* CR or LF or SPACE or HTAB or '=' */
- return c;
- }
-
- n = 0;
- if (c >= 0x41 && c <= 0x5a) { /* A - Z */
- n = c - 65;
- } else if (c >= 0x61 && c <= 0x7a) { /* a - z */
- n = c - 71;
- } else if (c >= 0x30 && c <= 0x39) { /* 0 - 9 */
- n = c + 4;
- } else if (c == 0x2b) { /* '+' */
- n = 62;
- } else if (c == 0x2f) { /* '/' */
- n = 63;
- }
- n &= 0x3f;
-
- switch (filter->status) {
- case 0:
- filter->status = 1;
- filter->cache = n << 18;
- break;
- case 1:
- filter->status = 2;
- filter->cache |= n << 12;
- break;
- case 2:
- filter->status = 3;
- filter->cache |= n << 6;
- break;
- default:
- filter->status = 0;
- n |= filter->cache;
- CK((*filter->output_function)((n >> 16) & 0xff, filter->data));
- CK((*filter->output_function)((n >> 8) & 0xff, filter->data));
- CK((*filter->output_function)(n & 0xff, filter->data));
- break;
- }
-
- return c;
-}
-
-int mbfl_filt_conv_base64dec_flush(mbfl_convert_filter *filter)
-{
- int status, cache;
-
- status = filter->status;
- cache = filter->cache;
- filter->status = 0;
- filter->cache = 0;
- /* flush fragments */
- if (status >= 2) {
- CK((*filter->output_function)((cache >> 16) & 0xff, filter->data));
- if (status >= 3) {
- CK((*filter->output_function)((cache >> 8) & 0xff, filter->data));
- }
- }
- return 0;
-}
-
-
diff --git a/ext/mbstring/libmbfl/filters/mbfilter_base64.h b/ext/mbstring/libmbfl/filters/mbfilter_base64.h
deleted file mode 100644
index 6bd525fd3e..0000000000
--- a/ext/mbstring/libmbfl/filters/mbfilter_base64.h
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * "streamable kanji code filter and converter"
- * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved.
- *
- * LICENSE NOTICES
- *
- * This file is part of "streamable kanji code filter and converter",
- * which is distributed under the terms of GNU Lesser General Public
- * License (version 2) as published by the Free Software Foundation.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with "streamable kanji code filter and converter";
- * if not, write to the Free Software Foundation, Inc., 59 Temple Place,
- * Suite 330, Boston, MA 02111-1307 USA
- *
- * The author of this file:
- *
- */
-/*
- * The source code included in this files was separated from mbfilter.c
- * by Moriyoshi Koizumi <moriyoshi@php.net> on 4 Dec 2002. The file
- * mbfilter.c is included in this package .
- *
- */
-
-#ifndef MBFL_MBFILTER_BASE64_H
-#define MBFL_MBFILTER_BASE64_H
-
-#include "mbfilter.h"
-
-extern const mbfl_encoding mbfl_encoding_base64;
-extern const struct mbfl_convert_vtbl vtbl_b64_8bit;
-extern const struct mbfl_convert_vtbl vtbl_8bit_b64;
-
-int mbfl_filt_conv_base64enc(int c, mbfl_convert_filter *filter);
-int mbfl_filt_conv_base64enc_flush(mbfl_convert_filter *filter);
-int mbfl_filt_conv_base64dec(int c, mbfl_convert_filter *filter);
-int mbfl_filt_conv_base64dec_flush(mbfl_convert_filter *filter);
-
-#endif /* MBFL_MBFILTER_BASE64_H */
diff --git a/ext/mbstring/libmbfl/filters/mbfilter_big5.c b/ext/mbstring/libmbfl/filters/mbfilter_big5.c
deleted file mode 100644
index fe5effe044..0000000000
--- a/ext/mbstring/libmbfl/filters/mbfilter_big5.c
+++ /dev/null
@@ -1,227 +0,0 @@
-/*
- * "streamable kanji code filter and converter"
- * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved.
- *
- * LICENSE NOTICES
- *
- * This file is part of "streamable kanji code filter and converter",
- * which is distributed under the terms of GNU Lesser General Public
- * License (version 2) as published by the Free Software Foundation.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with "streamable kanji code filter and converter";
- * if not, write to the Free Software Foundation, Inc., 59 Temple Place,
- * Suite 330, Boston, MA 02111-1307 USA
- *
- * The author of this file: Rui Hirokawa <hirokawa@php.net>
- *
- */
-/*
- * The source code included in this files was separated from mbfilter_tw.c
- * by moriyoshi koizumi <moriyoshi@php.net> on 4 dec 2002.
- *
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "mbfilter.h"
-#include "mbfilter_big5.h"
-
-#include "unicode_table_big5.h"
-
-static int mbfl_filt_ident_big5(int c, mbfl_identify_filter *filter);
-
-static const unsigned char mblen_table_big5[] = { /* 0x81-0xFE */
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1
-};
-
-static const char *mbfl_encoding_big5_aliases[] = {"CN-BIG5", "BIG-FIVE", "BIGFIVE", "CP950", NULL};
-
-const mbfl_encoding mbfl_encoding_big5 = {
- mbfl_no_encoding_big5,
- "BIG-5",
- "BIG5",
- (const char *(*)[])&mbfl_encoding_big5_aliases,
- mblen_table_big5,
- MBFL_ENCTYPE_MBCS
-};
-
-const struct mbfl_identify_vtbl vtbl_identify_big5 = {
- mbfl_no_encoding_big5,
- mbfl_filt_ident_common_ctor,
- mbfl_filt_ident_common_dtor,
- mbfl_filt_ident_big5
-};
-
-const struct mbfl_convert_vtbl vtbl_big5_wchar = {
- mbfl_no_encoding_big5,
- mbfl_no_encoding_wchar,
- mbfl_filt_conv_common_ctor,
- mbfl_filt_conv_common_dtor,
- mbfl_filt_conv_big5_wchar,
- mbfl_filt_conv_common_flush
-};
-
-const struct mbfl_convert_vtbl vtbl_wchar_big5 = {
- mbfl_no_encoding_wchar,
- mbfl_no_encoding_big5,
- mbfl_filt_conv_common_ctor,
- mbfl_filt_conv_common_dtor,
- mbfl_filt_conv_wchar_big5,
- mbfl_filt_conv_common_flush
-};
-
-#define CK(statement) do { if ((statement) < 0) return (-1); } while (0)
-
-/*
- * Big5 => wchar
- */
-int
-mbfl_filt_conv_big5_wchar(int c, mbfl_convert_filter *filter)
-{
- int c1, w;
-
- switch (filter->status) {
- case 0:
- if (c >= 0 && c < 0x80) { /* latin */
- CK((*filter->output_function)(c, filter->data));
- } else if (c > 0xa0 && c < 0xff) { /* dbcs lead byte */
- filter->status = 1;
- filter->cache = c;
- } else {
- w = c & MBFL_WCSGROUP_MASK;
- w |= MBFL_WCSGROUP_THROUGH;
- CK((*filter->output_function)(w, filter->data));
- }
- break;
-
- case 1: /* dbcs second byte */
- filter->status = 0;
- c1 = filter->cache;
- if ((c > 0x39 && c < 0x7f) | (c > 0xa0 && c < 0xff)) {
- if (c < 0x7f){
- w = (c1 - 0xa1)*157 + (c - 0x40);
- } else {
- w = (c1 - 0xa1)*157 + (c - 0xa1) + 0x3f;
- }
- if (w >= 0 && w < big5_ucs_table_size) {
- w = big5_ucs_table[w];
- } else {
- w = 0;
- }
- if (w <= 0) {
- w = (c1 << 8) | c;
- w &= MBFL_WCSPLANE_MASK;
- w |= MBFL_WCSPLANE_BIG5;
- }
- CK((*filter->output_function)(w, filter->data));
- } else if ((c >= 0 && c < 0x21) || c == 0x7f) { /* CTLs */
- CK((*filter->output_function)(c, filter->data));
- } else {
- w = (c1 << 8) | c;
- w &= MBFL_WCSGROUP_MASK;
- w |= MBFL_WCSGROUP_THROUGH;
- CK((*filter->output_function)(w, filter->data));
- }
- break;
-
- default:
- filter->status = 0;
- break;
- }
-
- return c;
-}
-
-/*
- * wchar => Big5
- */
-int
-mbfl_filt_conv_wchar_big5(int c, mbfl_convert_filter *filter)
-{
- int c1, s;
-
- s = 0;
- if (c >= ucs_a1_big5_table_min && c < ucs_a1_big5_table_max) {
- s = ucs_a1_big5_table[c - ucs_a1_big5_table_min];
- } else if (c >= ucs_a2_big5_table_min && c < ucs_a2_big5_table_max) {
- s = ucs_a2_big5_table[c - ucs_a2_big5_table_min];
- } else if (c >= ucs_a3_big5_table_min && c < ucs_a3_big5_table_max) {
- s = ucs_a3_big5_table[c - ucs_a3_big5_table_min];
- } else if (c >= ucs_i_big5_table_min && c < ucs_i_big5_table_max) {
- s = ucs_i_big5_table[c - ucs_i_big5_table_min];
- } else if (c >= ucs_pua_big5_table_min && c < ucs_pua_big5_table_max) {
- s = ucs_pua_big5_table[c - ucs_pua_big5_table_min];
- } else if (c >= ucs_r1_big5_table_min && c < ucs_r1_big5_table_max) {
- s = ucs_r1_big5_table[c - ucs_r1_big5_table_min];
- } else if (c >= ucs_r2_big5_table_min && c < ucs_r2_big5_table_max) {
- s = ucs_r2_big5_table[c - ucs_r2_big5_table_min];
- }
- if (s <= 0) {
- c1 = c & ~MBFL_WCSPLANE_MASK;
- if (c1 == MBFL_WCSPLANE_BIG5) {
- s = c & MBFL_WCSPLANE_MASK;
- }
- if (c == 0) {
- s = 0;
- } else if (s <= 0) {
- s = -1;
- }
- }
- if (s >= 0) {
- if (s < 0x80) { /* latin */
- CK((*filter->output_function)(s, filter->data));
- } else {
- CK((*filter->output_function)((s >> 8) & 0xff, filter->data));
- CK((*filter->output_function)(s & 0xff, filter->data));
- }
- } else {
- if (filter->illegal_mode != MBFL_OUTPUTFILTER_ILLEGAL_MODE_NONE) {
- CK(mbfl_filt_conv_illegal_output(c, filter));
- }
- }
-
- return c;
-}
-
-static int mbfl_filt_ident_big5(int c, mbfl_identify_filter *filter)
-{
- if (filter->status) { /* kanji second char */
- if (c < 0x40 || (c > 0x7e && c < 0xa1) ||c > 0xfe) { /* bad */
- filter->flag = 1;
- }
- filter->status = 0;
- } else if (c >= 0 && c < 0x80) { /* latin ok */
- ;
- } else if (c > 0xa0 && c < 0xff) { /* DBCS lead byte */
- filter->status = 1;
- } else { /* bad */
- filter->flag = 1;
- }
-
- return c;
-}
-
-
diff --git a/ext/mbstring/libmbfl/filters/mbfilter_big5.h b/ext/mbstring/libmbfl/filters/mbfilter_big5.h
deleted file mode 100644
index 6b6a26563b..0000000000
--- a/ext/mbstring/libmbfl/filters/mbfilter_big5.h
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * "streamable kanji code filter and converter"
- * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved.
- *
- * LICENSE NOTICES
- *
- * This file is part of "streamable kanji code filter and converter",
- * which is distributed under the terms of GNU Lesser General Public
- * License (version 2) as published by the Free Software Foundation.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with "streamable kanji code filter and converter";
- * if not, write to the Free Software Foundation, Inc., 59 Temple Place,
- * Suite 330, Boston, MA 02111-1307 USA
- *
- * The author of this file: Rui Hirokawa <hirokawa@php.net>
- *
- */
-/*
- * The source code included in this files was separated from mbfilter_tw.h
- * by moriyoshi koizumi <moriyoshi@php.net> on 4 dec 2002.
- *
- */
-
-#ifndef MBFL_MBFILTER_BIG5_H
-#define MBFL_MBFILTER_BIG5_H
-
-#include "mbfilter.h"
-
-extern const mbfl_encoding mbfl_encoding_big5;
-extern const struct mbfl_identify_vtbl vtbl_identify_big5;
-extern const struct mbfl_convert_vtbl vtbl_big5_wchar;
-extern const struct mbfl_convert_vtbl vtbl_wchar_big5;
-
-int mbfl_filt_conv_big5_wchar(int c, mbfl_convert_filter *filter);
-int mbfl_filt_conv_wchar_big5(int c, mbfl_convert_filter *filter);
-
-#endif /* MBFL_MBFILTER_BIG5_H */
diff --git a/ext/mbstring/libmbfl/filters/mbfilter_byte2.c b/ext/mbstring/libmbfl/filters/mbfilter_byte2.c
deleted file mode 100644
index 03b471bf5b..0000000000
--- a/ext/mbstring/libmbfl/filters/mbfilter_byte2.c
+++ /dev/null
@@ -1,137 +0,0 @@
-/*
- * "streamable kanji code filter and converter"
- * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved.
- *
- * LICENSE NOTICES
- *
- * This file is part of "streamable kanji code filter and converter",
- * which is distributed under the terms of GNU Lesser General Public
- * License (version 2) as published by the Free Software Foundation.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with "streamable kanji code filter and converter";
- * if not, write to the Free Software Foundation, Inc., 59 Temple Place,
- * Suite 330, Boston, MA 02111-1307 USA
- *
- * The author of this file:
- *
- */
-/*
- * The source code included in this files was separated from mbfilter.c
- * by Moriyoshi Koizumi <moriyoshi@php.net> on 4 Dec 2002. The file
- * mbfilter.c is included in this package .
- *
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "mbfilter.h"
-#include "mbfilter_byte2.h"
-
-const mbfl_encoding mbfl_encoding_byte2be = {
- mbfl_no_encoding_byte2be,
- "byte2be",
- NULL,
- NULL,
- NULL,
- MBFL_ENCTYPE_SBCS
-};
-
-const mbfl_encoding mbfl_encoding_byte2le = {
- mbfl_no_encoding_byte2le,
- "byte2le",
- NULL,
- NULL,
- NULL,
- MBFL_ENCTYPE_SBCS
-};
-
-const struct mbfl_convert_vtbl vtbl_byte2be_wchar = {
- mbfl_no_encoding_byte2be,
- mbfl_no_encoding_wchar,
- mbfl_filt_conv_common_ctor,
- mbfl_filt_conv_common_dtor,
- mbfl_filt_conv_byte2be_wchar,
- mbfl_filt_conv_common_flush
-};
-
-const struct mbfl_convert_vtbl vtbl_wchar_byte2be = {
- mbfl_no_encoding_wchar,
- mbfl_no_encoding_byte2be,
- mbfl_filt_conv_common_ctor,
- mbfl_filt_conv_common_dtor,
- mbfl_filt_conv_wchar_byte2be,
- mbfl_filt_conv_common_flush };
-
-const struct mbfl_convert_vtbl vtbl_byte2le_wchar = {
- mbfl_no_encoding_byte2le,
- mbfl_no_encoding_wchar,
- mbfl_filt_conv_common_ctor,
- mbfl_filt_conv_common_dtor,
- mbfl_filt_conv_byte2le_wchar,
- mbfl_filt_conv_common_flush };
-
-const struct mbfl_convert_vtbl vtbl_wchar_byte2le = {
- mbfl_no_encoding_wchar,
- mbfl_no_encoding_byte2le,
- mbfl_filt_conv_common_ctor,
- mbfl_filt_conv_common_dtor,
- mbfl_filt_conv_wchar_byte2le,
- mbfl_filt_conv_common_flush };
-
-#define CK(statement) do { if ((statement) < 0) return (-1); } while (0)
-
-int mbfl_filt_conv_byte2be_wchar(int c, mbfl_convert_filter *filter)
-{
- int n;
-
- if (filter->status == 0) {
- filter->status = 1;
- n = (c & 0xff) << 8;
- filter->cache = n;
- } else {
- filter->status = 0;
- n = (c & 0xff) | filter->cache;
- CK((*filter->output_function)(n, filter->data));
- }
- return c;
-}
-
-int mbfl_filt_conv_wchar_byte2be(int c, mbfl_convert_filter *filter)
-{
- CK((*filter->output_function)((c >> 8) & 0xff, filter->data));
- CK((*filter->output_function)(c & 0xff, filter->data));
- return c;
-}
-
-int mbfl_filt_conv_byte2le_wchar(int c, mbfl_convert_filter *filter)
-{
- int n;
-
- if (filter->status == 0) {
- filter->status = 1;
- n = c & 0xff;
- filter->cache = n;
- } else {
- filter->status = 0;
- n = ((c & 0xff) << 8) | filter->cache;
- CK((*filter->output_function)(n, filter->data));
- }
- return c;
-}
-
-int mbfl_filt_conv_wchar_byte2le(int c, mbfl_convert_filter *filter)
-{
- CK((*filter->output_function)(c & 0xff, filter->data));
- CK((*filter->output_function)((c >> 8) & 0xff, filter->data));
- return c;
-}
-
-
diff --git a/ext/mbstring/libmbfl/filters/mbfilter_byte2.h b/ext/mbstring/libmbfl/filters/mbfilter_byte2.h
deleted file mode 100644
index e762a9db7f..0000000000
--- a/ext/mbstring/libmbfl/filters/mbfilter_byte2.h
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * "streamable kanji code filter and converter"
- * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved.
- *
- * LICENSE NOTICES
- *
- * This file is part of "streamable kanji code filter and converter",
- * which is distributed under the terms of GNU Lesser General Public
- * License (version 2) as published by the Free Software Foundation.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with "streamable kanji code filter and converter";
- * if not, write to the Free Software Foundation, Inc., 59 Temple Place,
- * Suite 330, Boston, MA 02111-1307 USA
- *
- * The author of this file:
- *
- */
-/*
- * The source code included in this files was separated from mbfilter.c
- * by Moriyoshi Koizumi <moriyoshi@php.net> on 4 Dec 2002. The file
- * mbfilter.c is included in this package .
- *
- */
-
-#ifndef MBFL_MBFILTER_BYTE2_H
-#define MBFL_MBFILTER_BYTE2_H
-
-#include "mbfilter.h"
-
-extern const mbfl_encoding mbfl_encoding_byte2be;
-extern const mbfl_encoding mbfl_encoding_byte2le;
-extern const struct mbfl_convert_vtbl vtbl_byte2be_wchar;
-extern const struct mbfl_convert_vtbl vtbl_wchar_byte2be;
-extern const struct mbfl_convert_vtbl vtbl_byte2le_wchar;
-extern const struct mbfl_convert_vtbl vtbl_wchar_byte2le;
-
-int mbfl_filt_conv_wchar_byte2be(int c, mbfl_convert_filter *filter);
-int mbfl_filt_conv_byte2be_wchar(int c, mbfl_convert_filter *filter);
-int mbfl_filt_conv_wchar_byte2le(int c, mbfl_convert_filter *filter);
-int mbfl_filt_conv_byte2le_wchar(int c, mbfl_convert_filter *filter);
-
-#endif /* MBFL_MBFILTER_BYTE2_H */
diff --git a/ext/mbstring/libmbfl/filters/mbfilter_byte4.c b/ext/mbstring/libmbfl/filters/mbfilter_byte4.c
deleted file mode 100644
index 24b7367fea..0000000000
--- a/ext/mbstring/libmbfl/filters/mbfilter_byte4.c
+++ /dev/null
@@ -1,159 +0,0 @@
-/*
- * "streamable kanji code filter and converter"
- * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved.
- *
- * LICENSE NOTICES
- *
- * This file is part of "streamable kanji code filter and converter",
- * which is distributed under the terms of GNU Lesser General Public
- * License (version 2) as published by the Free Software Foundation.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with "streamable kanji code filter and converter";
- * if not, write to the Free Software Foundation, Inc., 59 Temple Place,
- * Suite 330, Boston, MA 02111-1307 USA
- *
- * The author of this file:
- *
- */
-/*
- * The source code included in this files was separated from mbfilter.c
- * by Moriyoshi Koizumi <moriyoshi@php.net> on 4 Dec 2002. The file
- * mbfilter.c is included in this package .
- *
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "mbfilter.h"
-#include "mbfilter_byte4.h"
-
-const mbfl_encoding mbfl_encoding_byte4be = {
- mbfl_no_encoding_byte4be,
- "byte4be",
- NULL,
- NULL,
- NULL,
- MBFL_ENCTYPE_SBCS
-};
-
-const mbfl_encoding mbfl_encoding_byte4le = {
- mbfl_no_encoding_byte4le,
- "byte4le",
- NULL,
- NULL,
- NULL,
- MBFL_ENCTYPE_SBCS
-};
-
-const struct mbfl_convert_vtbl vtbl_byte4be_wchar = {
- mbfl_no_encoding_byte4be,
- mbfl_no_encoding_wchar,
- mbfl_filt_conv_common_ctor,
- mbfl_filt_conv_common_dtor,
- mbfl_filt_conv_byte4be_wchar,
- mbfl_filt_conv_common_flush
-};
-
-const struct mbfl_convert_vtbl vtbl_wchar_byte4be = {
- mbfl_no_encoding_wchar,
- mbfl_no_encoding_byte4be,
- mbfl_filt_conv_common_ctor,
- mbfl_filt_conv_common_dtor,
- mbfl_filt_conv_wchar_byte4be,
- mbfl_filt_conv_common_flush };
-
-const struct mbfl_convert_vtbl vtbl_byte4le_wchar = {
- mbfl_no_encoding_byte4le,
- mbfl_no_encoding_wchar,
- mbfl_filt_conv_common_ctor,
- mbfl_filt_conv_common_dtor,
- mbfl_filt_conv_byte4le_wchar,
- mbfl_filt_conv_common_flush
-};
-
-const struct mbfl_convert_vtbl vtbl_wchar_byte4le = {
- mbfl_no_encoding_wchar,
- mbfl_no_encoding_byte4le,
- mbfl_filt_conv_common_ctor,
- mbfl_filt_conv_common_dtor,
- mbfl_filt_conv_wchar_byte4le,
- mbfl_filt_conv_common_flush
-};
-
-#define CK(statement) do { if ((statement) < 0) return (-1); } while (0)
-
-int mbfl_filt_conv_byte4be_wchar(int c, mbfl_convert_filter *filter)
-{
- int n;
-
- if (filter->status == 0) {
- filter->status = 1;
- n = (c & 0xff) << 24;
- filter->cache = n;
- } else if (filter->status == 1) {
- filter->status = 2;
- n = (c & 0xff) << 16;
- filter->cache |= n;
- } else if (filter->status == 2) {
- filter->status = 3;
- n = (c & 0xff) << 8;
- filter->cache |= n;
- } else {
- filter->status = 0;
- n = (c & 0xff) | filter->cache;
- CK((*filter->output_function)(n, filter->data));
- }
- return c;
-}
-
-int mbfl_filt_conv_wchar_byte4be(int c, mbfl_convert_filter *filter)
-{
- CK((*filter->output_function)((c >> 24) & 0xff, filter->data));
- CK((*filter->output_function)((c >> 16) & 0xff, filter->data));
- CK((*filter->output_function)((c >> 8) & 0xff, filter->data));
- CK((*filter->output_function)(c & 0xff, filter->data));
- return c;
-}
-
-int mbfl_filt_conv_byte4le_wchar(int c, mbfl_convert_filter *filter)
-{
- int n;
-
- if (filter->status == 0) {
- filter->status = 1;
- n = (c & 0xff);
- filter->cache = n;
- } else if (filter->status == 1) {
- filter->status = 2;
- n = (c & 0xff) << 8;
- filter->cache |= n;
- } else if (filter->status == 2) {
- filter->status = 3;
- n = (c & 0xff) << 16;
- filter->cache |= n;
- } else {
- filter->status = 0;
- n = ((c & 0xff) << 24) | filter->cache;
- CK((*filter->output_function)(n, filter->data));
- }
- return c;
-}
-
-int mbfl_filt_conv_wchar_byte4le(int c, mbfl_convert_filter *filter)
-{
- CK((*filter->output_function)(c & 0xff, filter->data));
- CK((*filter->output_function)((c >> 8) & 0xff, filter->data));
- CK((*filter->output_function)((c >> 16) & 0xff, filter->data));
- CK((*filter->output_function)((c >> 24) & 0xff, filter->data));
- return c;
-}
-
-
diff --git a/ext/mbstring/libmbfl/filters/mbfilter_byte4.h b/ext/mbstring/libmbfl/filters/mbfilter_byte4.h
deleted file mode 100644
index f6c0aed2be..0000000000
--- a/ext/mbstring/libmbfl/filters/mbfilter_byte4.h
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * "streamable kanji code filter and converter"
- * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved.
- *
- * LICENSE NOTICES
- *
- * This file is part of "streamable kanji code filter and converter",
- * which is distributed under the terms of GNU Lesser General Public
- * License (version 2) as published by the Free Software Foundation.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with "streamable kanji code filter and converter";
- * if not, write to the Free Software Foundation, Inc., 59 Temple Place,
- * Suite 330, Boston, MA 02111-1307 USA
- *
- * The author of this file:
- *
- */
-/*
- * The source code included in this files was separated from mbfilter.c
- * by Moriyoshi Koizumi <moriyoshi@php.net> on 4 Dec 2002. The file
- * mbfilter.c is included in this package .
- *
- */
-
-#ifndef MBFL_MBFILTER_BYTE4_H
-#define MBFL_MBFILTER_BYTE4_H
-
-extern const mbfl_encoding mbfl_encoding_byte4be;
-extern const mbfl_encoding mbfl_encoding_byte4le;
-extern const struct mbfl_convert_vtbl vtbl_byte4be_wchar;
-extern const struct mbfl_convert_vtbl vtbl_wchar_byte4be;
-extern const struct mbfl_convert_vtbl vtbl_byte4le_wchar;
-extern const struct mbfl_convert_vtbl vtbl_wchar_byte4le;
-
-int mbfl_filt_conv_wchar_byte4be(int c, mbfl_convert_filter *filter);
-int mbfl_filt_conv_byte4be_wchar(int c, mbfl_convert_filter *filter);
-int mbfl_filt_conv_wchar_byte4le(int c, mbfl_convert_filter *filter);
-int mbfl_filt_conv_byte4le_wchar(int c, mbfl_convert_filter *filter);
-
-#endif /* MBFL_MBFILTER_BYTE4_H */
diff --git a/ext/mbstring/libmbfl/filters/mbfilter_cp1251.c b/ext/mbstring/libmbfl/filters/mbfilter_cp1251.c
deleted file mode 100644
index b5ab8e71b5..0000000000
--- a/ext/mbstring/libmbfl/filters/mbfilter_cp1251.c
+++ /dev/null
@@ -1,152 +0,0 @@
-/*
- * "streamable kanji code filter and converter"
- * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved.
- *
- * LICENSE NOTICES
- *
- * This file is part of "streamable kanji code filter and converter",
- * which is distributed under the terms of GNU Lesser General Public
- * License (version 2) as published by the Free Software Foundation.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with "streamable kanji code filter and converter";
- * if not, write to the Free Software Foundation, Inc., 59 Temple Place,
- * Suite 330, Boston, MA 02111-1307 USA
- *
- * The author of this part: Den V. Tsopa <tdv@edisoft.ru>
- *
- */
-/*
- * The source code included in this files was separated from mbfilter_ru.c
- * by moriyoshi koizumi <moriyoshi@php.net> on 4 dec 2002.
- *
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "mbfilter.h"
-#include "mbfilter_cp1251.h"
-#include "unicode_table_cp1251.h"
-
-static int mbfl_filt_ident_cp1251(int c, mbfl_identify_filter *filter);
-
-static const char *mbfl_encoding_cp1251_aliases[] = {"CP1251", "CP-1251", "WINDOWS-1251", NULL};
-
-const mbfl_encoding mbfl_encoding_cp1251 = {
- mbfl_no_encoding_cp1251,
- "Windows-1251",
- "Windows-1251",
- (const char *(*)[])&mbfl_encoding_cp1251_aliases,
- NULL,
- MBFL_ENCTYPE_SBCS
-};
-
-const struct mbfl_identify_vtbl vtbl_identify_cp1251 = {
- mbfl_no_encoding_cp1251,
- mbfl_filt_ident_common_ctor,
- mbfl_filt_ident_common_dtor,
- mbfl_filt_ident_cp1251
-};
-
-const struct mbfl_convert_vtbl vtbl_wchar_cp1251 = {
- mbfl_no_encoding_wchar,
- mbfl_no_encoding_cp1251,
- mbfl_filt_conv_common_ctor,
- mbfl_filt_conv_common_dtor,
- mbfl_filt_conv_wchar_cp1251,
- mbfl_filt_conv_common_flush
-};
-
-const struct mbfl_convert_vtbl vtbl_cp1251_wchar = {
- mbfl_no_encoding_cp1251,
- mbfl_no_encoding_wchar,
- mbfl_filt_conv_common_ctor,
- mbfl_filt_conv_common_dtor,
- mbfl_filt_conv_cp1251_wchar,
- mbfl_filt_conv_common_flush
-};
-
-#define CK(statement) do { if ((statement) < 0) return (-1); } while (0)
-
-/*
- * cp1251 => wchar
- */
-int
-mbfl_filt_conv_cp1251_wchar(int c, mbfl_convert_filter *filter)
-{
- int s;
-
- if (c >= 0 && c < cp1251_ucs_table_min) {
- s = c;
- } else if (c >= cp1251_ucs_table_min && c < 0x100) {
- s = cp1251_ucs_table[c - cp1251_ucs_table_min];
- if (s <= 0) {
- s = c;
- s &= MBFL_WCSPLANE_MASK;
- s |= MBFL_WCSPLANE_CP1251;
- }
- } else {
- s = c;
- s &= MBFL_WCSGROUP_MASK;
- s |= MBFL_WCSGROUP_THROUGH;
- }
-
- CK((*filter->output_function)(s, filter->data));
-
- return c;
-}
-
-/*
- * wchar => cp1251
- */
-int
-mbfl_filt_conv_wchar_cp1251(int c, mbfl_convert_filter *filter)
-{
- int s, n;
-
- if (c < 0x80) {
- s = c;
- } else {
- s = -1;
- n = cp1251_ucs_table_len-1;
- while (n >= 0) {
- if (c == cp1251_ucs_table[n]) {
- s = cp1251_ucs_table_min + n;
- break;
- }
- n--;
- }
- if (s <= 0 && (c & ~MBFL_WCSPLANE_MASK) == MBFL_WCSPLANE_CP1251) {
- s = c & MBFL_WCSPLANE_MASK;
- }
- }
-
- if (s >= 0) {
- CK((*filter->output_function)(s, filter->data));
- } else {
- if (filter->illegal_mode != MBFL_OUTPUTFILTER_ILLEGAL_MODE_NONE) {
- CK(mbfl_filt_conv_illegal_output(c, filter));
- }
- }
-
- return c;
-}
-
-/* all of this is so ugly now! */
-static int mbfl_filt_ident_cp1251(int c, mbfl_identify_filter *filter)
-{
- if (c >= 0x80 && c < 0xff)
- filter->flag = 0;
- else
- filter->flag = 1; /* not it */
- return c;
-}
-
-
diff --git a/ext/mbstring/libmbfl/filters/mbfilter_cp1251.h b/ext/mbstring/libmbfl/filters/mbfilter_cp1251.h
deleted file mode 100644
index 6c0f680b29..0000000000
--- a/ext/mbstring/libmbfl/filters/mbfilter_cp1251.h
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * "streamable kanji code filter and converter"
- * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved.
- *
- * LICENSE NOTICES
- *
- * This file is part of "streamable kanji code filter and converter",
- * which is distributed under the terms of GNU Lesser General Public
- * License (version 2) as published by the Free Software Foundation.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with "streamable kanji code filter and converter";
- * if not, write to the Free Software Foundation, Inc., 59 Temple Place,
- * Suite 330, Boston, MA 02111-1307 USA
- *
- * The author of this part: Den V. Tsopa <tdv@edisoft.ru>
- *
- */
-/*
- * the source code included in this files was separated from mbfilter_ru.h
- * by moriyoshi koizumi <moriyoshi@php.net> on 4 dec 2002.
- *
- */
-
-#ifndef MBFL_MBFILTER_CP1251_H
-#define MBFL_MBFILTER_CP1251_H
-
-#include "mbfilter.h"
-
-extern const mbfl_encoding mbfl_encoding_cp1251;
-extern const struct mbfl_identify_vtbl vtbl_identify_cp1251;
-extern const struct mbfl_convert_vtbl vtbl_wchar_cp1251;
-extern const struct mbfl_convert_vtbl vtbl_cp1251_wchar;
-
-int mbfl_filt_conv_wchar_cp1251(int c, mbfl_convert_filter *filter);
-int mbfl_filt_conv_cp1251_wchar(int c, mbfl_convert_filter *filter);
-
-#endif /* MBFL_MBFILTER_CP1251_H */
-
diff --git a/ext/mbstring/libmbfl/filters/mbfilter_cp1252.c b/ext/mbstring/libmbfl/filters/mbfilter_cp1252.c
deleted file mode 100644
index ad160821a5..0000000000
--- a/ext/mbstring/libmbfl/filters/mbfilter_cp1252.c
+++ /dev/null
@@ -1,147 +0,0 @@
-/*
- * "streamable kanji code filter and converter"
- * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved.
- *
- * LICENSE NOTICES
- *
- * This file is part of "streamable kanji code filter and converter",
- * which is distributed under the terms of GNU Lesser General Public
- * License (version 2) as published by the Free Software Foundation.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with "streamable kanji code filter and converter";
- * if not, write to the Free Software Foundation, Inc., 59 Temple Place,
- * Suite 330, Boston, MA 02111-1307 USA
- *
- * The author of this part: Wez Furlong <wez@thebrainroom.com>
- *
- */
-/*
- * the source code included in this files was separated from mbfilter.c
- * by moriyoshi koizumi <moriyoshi@php.net> on 4 dec 2002.
- *
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "mbfilter.h"
-#include "mbfilter_cp1252.h"
-#include "unicode_table_cp1252.h"
-
-static int mbfl_filt_ident_cp1252(int c, mbfl_identify_filter *filter);
-
-static const char *mbfl_encoding_cp1252_aliases[] = {"cp1252", NULL};
-
-const mbfl_encoding mbfl_encoding_cp1252 = {
- mbfl_no_encoding_cp1252,
- "Windows-1252",
- "Windows-1252",
- (const char *(*)[])&mbfl_encoding_cp1252_aliases,
- NULL,
- MBFL_ENCTYPE_SBCS
-};
-
-const struct mbfl_identify_vtbl vtbl_identify_cp1252 = {
- mbfl_no_encoding_cp1252,
- mbfl_filt_ident_common_ctor,
- mbfl_filt_ident_common_dtor,
- mbfl_filt_ident_cp1252
-};
-
-const struct mbfl_convert_vtbl vtbl_cp1252_wchar = {
- mbfl_no_encoding_cp1252,
- mbfl_no_encoding_wchar,
- mbfl_filt_conv_common_ctor,
- mbfl_filt_conv_common_dtor,
- mbfl_filt_conv_cp1252_wchar,
- mbfl_filt_conv_common_flush
-};
-
-const struct mbfl_convert_vtbl vtbl_wchar_cp1252 = {
- mbfl_no_encoding_wchar,
- mbfl_no_encoding_cp1252,
- mbfl_filt_conv_common_ctor,
- mbfl_filt_conv_common_dtor,
- mbfl_filt_conv_wchar_cp1252,
- mbfl_filt_conv_common_flush
-};
-
-#define CK(statement) do { if ((statement) < 0) return (-1); } while (0)
-
-/*
- * wchar => cp1252
- */
-int mbfl_filt_conv_wchar_cp1252(int c, mbfl_convert_filter *filter)
-{
- int s=-1, n;
-
- if (c >= 0x100) {
- /* look it up from the cp1252 table */
- s = -1;
- n = 31;
- while (n >= 0) {
- if (c == cp1252_ucs_table[n] && c != 0xfffe) {
- s = 0x80 + n;
- break;
- }
- n--;
- }
- if (s <= 0 && (c & ~MBFL_WCSPLANE_MASK) == MBFL_WCSPLANE_8859_1)
- {
- s = c & MBFL_WCSPLANE_MASK;
- }
- }
- else if (c >= 0 && c < 0x100) {
- s = c;
- }
- if (s >= 0) {
- CK((*filter->output_function)(s, filter->data));
- } else {
- if (filter->illegal_mode != MBFL_OUTPUTFILTER_ILLEGAL_MODE_NONE) {
- CK(mbfl_filt_conv_illegal_output(c, filter));
- }
- }
- return c;
-}
-
-/*
- * cp1252 => wchar
- */
-int mbfl_filt_conv_cp1252_wchar(int c, mbfl_convert_filter *filter)
-{
- int s;
-
- if (c >= 0x80 && c < 0xa0) {
- s = cp1252_ucs_table[c - 0x80];
- } else {
- s = c;
- }
-
- CK((*filter->output_function)(s, filter->data));
-
- return c;
-}
-
-/* We only distinguish the MS extensions to ISO-8859-1.
- * Actually, this is pretty much a NO-OP, since the identification
- * system doesn't allow us to discriminate between a positive match,
- * a possible match and a definite non-match.
- * The problem here is that cp1252 looks like SJIS for certain chars.
- * */
-static int mbfl_filt_ident_cp1252(int c, mbfl_identify_filter *filter)
-{
- if (c >= 0x80 && c < 0xa0)
- filter->flag = 0;
- else
- filter->flag = 1; /* not it */
- return c;
-}
-
-
diff --git a/ext/mbstring/libmbfl/filters/mbfilter_cp1252.h b/ext/mbstring/libmbfl/filters/mbfilter_cp1252.h
deleted file mode 100644
index 032c30eb9e..0000000000
--- a/ext/mbstring/libmbfl/filters/mbfilter_cp1252.h
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * "streamable kanji code filter and converter"
- * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved.
- *
- * LICENSE NOTICES
- *
- * This file is part of "streamable kanji code filter and converter",
- * which is distributed under the terms of GNU Lesser General Public
- * License (version 2) as published by the Free Software Foundation.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with "streamable kanji code filter and converter";
- * if not, write to the Free Software Foundation, Inc., 59 Temple Place,
- * Suite 330, Boston, MA 02111-1307 USA
- *
- * The author of this part: Wez Furlong <wez@thebrainroom.com>
- *
- */
-/*
- * the source code included in this files was separated from mbfilter.c
- * by moriyoshi koizumi <moriyoshi@php.net> on 4 dec 2002.
- *
- */
-
-#ifndef MBFL_MBFILTER_CP1252_H
-#define MBFL_MBFILTER_CP1252_H
-
-#include "mbfilter.h"
-
-extern const mbfl_encoding mbfl_encoding_cp1252;
-extern const struct mbfl_identify_vtbl vtbl_identify_cp1252;
-extern const struct mbfl_convert_vtbl vtbl_cp1252_wchar;
-extern const struct mbfl_convert_vtbl vtbl_wchar_cp1252;
-
-int mbfl_filt_conv_wchar_cp1252(int c, mbfl_convert_filter *filter);
-int mbfl_filt_conv_cp1252_wchar(int c, mbfl_convert_filter *filter);
-
-#endif /* MBFL_MBFILTER_CP1252_H */
diff --git a/ext/mbstring/libmbfl/filters/mbfilter_cp866.c b/ext/mbstring/libmbfl/filters/mbfilter_cp866.c
deleted file mode 100644
index 7725d7a266..0000000000
--- a/ext/mbstring/libmbfl/filters/mbfilter_cp866.c
+++ /dev/null
@@ -1,151 +0,0 @@
-/*
- * "streamable kanji code filter and converter"
- * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved.
- *
- * LICENSE NOTICES
- *
- * This file is part of "streamable kanji code filter and converter",
- * which is distributed under the terms of GNU Lesser General Public
- * License (version 2) as published by the Free Software Foundation.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with "streamable kanji code filter and converter";
- * if not, write to the Free Software Foundation, Inc., 59 Temple Place,
- * Suite 330, Boston, MA 02111-1307 USA
- *
- * The author of this part: Den V. Tsopa <tdv@edisoft.ru>
- *
- */
-/*
- * The source code included in this files was separated from mbfilter_ru.c
- * by moriyoshi koizumi <moriyoshi@php.net> on 4 dec 2002.
- *
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "mbfilter.h"
-#include "mbfilter_cp866.h"
-#include "unicode_table_cp866.h"
-
-static int mbfl_filt_ident_cp866(int c, mbfl_identify_filter *filter);
-
-static const char *mbfl_encoding_cp866_aliases[] = {"CP866", "CP-866", "IBM-866", NULL};
-
-const mbfl_encoding mbfl_encoding_cp866 = {
- mbfl_no_encoding_cp866,
- "CP866",
- "CP866",
- (const char *(*)[])&mbfl_encoding_cp866_aliases,
- NULL,
- MBFL_ENCTYPE_SBCS
-};
-
-const struct mbfl_identify_vtbl vtbl_identify_cp866 = {
- mbfl_no_encoding_cp866,
- mbfl_filt_ident_common_ctor,
- mbfl_filt_ident_common_dtor,
- mbfl_filt_ident_cp866
-};
-
-const struct mbfl_convert_vtbl vtbl_wchar_cp866 = {
- mbfl_no_encoding_wchar,
- mbfl_no_encoding_cp866,
- mbfl_filt_conv_common_ctor,
- mbfl_filt_conv_common_dtor,
- mbfl_filt_conv_wchar_cp866,
- mbfl_filt_conv_common_flush
-};
-
-const struct mbfl_convert_vtbl vtbl_cp866_wchar = {
- mbfl_no_encoding_cp866,
- mbfl_no_encoding_wchar,
- mbfl_filt_conv_common_ctor,
- mbfl_filt_conv_common_dtor,
- mbfl_filt_conv_cp866_wchar,
- mbfl_filt_conv_common_flush
-};
-
-#define CK(statement) do { if ((statement) < 0) return (-1); } while (0)
-
-/*
- * cp866 => wchar
- */
-int
-mbfl_filt_conv_cp866_wchar(int c, mbfl_convert_filter *filter)
-{
- int s;
-
- if (c >= 0 && c < cp866_ucs_table_min) {
- s = c;
- } else if (c >= cp866_ucs_table_min && c < 0x100) {
- s = cp866_ucs_table[c - cp866_ucs_table_min];
- if (s <= 0) {
- s = c;
- s &= MBFL_WCSPLANE_MASK;
- s |= MBFL_WCSPLANE_CP866;
- }
- } else {
- s = c;
- s &= MBFL_WCSGROUP_MASK;
- s |= MBFL_WCSGROUP_THROUGH;
- }
-
- CK((*filter->output_function)(s, filter->data));
-
- return c;
-}
-
-/*
- * wchar => cp866
- */
-int
-mbfl_filt_conv_wchar_cp866(int c, mbfl_convert_filter *filter)
-{
- int s, n;
-
- if (c < 0x80) {
- s = c;
- } else {
- s = -1;
- n = cp866_ucs_table_len-1;
- while (n >= 0) {
- if (c == cp866_ucs_table[n]) {
- s = cp866_ucs_table_min + n;
- break;
- }
- n--;
- }
- if (s <= 0 && (c & ~MBFL_WCSPLANE_MASK) == MBFL_WCSPLANE_CP866) {
- s = c & MBFL_WCSPLANE_MASK;
- }
- }
-
- if (s >= 0) {
- CK((*filter->output_function)(s, filter->data));
- } else {
- if (filter->illegal_mode != MBFL_OUTPUTFILTER_ILLEGAL_MODE_NONE) {
- CK(mbfl_filt_conv_illegal_output(c, filter));
- }
- }
-
- return c;
-}
-
-static int mbfl_filt_ident_cp866(int c, mbfl_identify_filter *filter)
-{
- if (c >= 0x80 && c < 0xff)
- filter->flag = 0;
- else
- filter->flag = 1; /* not it */
- return c;
-}
-
-
diff --git a/ext/mbstring/libmbfl/filters/mbfilter_cp866.h b/ext/mbstring/libmbfl/filters/mbfilter_cp866.h
deleted file mode 100644
index 9cb4e257e3..0000000000
--- a/ext/mbstring/libmbfl/filters/mbfilter_cp866.h
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * "streamable kanji code filter and converter"
- * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved.
- *
- * LICENSE NOTICES
- *
- * This file is part of "streamable kanji code filter and converter",
- * which is distributed under the terms of GNU Lesser General Public
- * License (version 2) as published by the Free Software Foundation.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with "streamable kanji code filter and converter";
- * if not, write to the Free Software Foundation, Inc., 59 Temple Place,
- * Suite 330, Boston, MA 02111-1307 USA
- *
- * The author of this part: Den V. Tsopa <tdv@edisoft.ru>
- *
- */
-/*
- * The source code included in this files was separated from mbfilter_ru.h
- * by moriyoshi koizumi <moriyoshi@php.net> on 4 dec 2002.
- *
- */
-
-#ifndef MBFL_MBFILTER_CP866_H
-#define MBFL_MBFILTER_CP866_H
-
-extern const mbfl_encoding mbfl_encoding_cp866;
-extern const struct mbfl_identify_vtbl vtbl_identify_cp866;
-extern const struct mbfl_convert_vtbl vtbl_wchar_cp866;
-extern const struct mbfl_convert_vtbl vtbl_cp866_wchar;
-
-int mbfl_filt_conv_cp866_wchar(int c, mbfl_convert_filter *filter);
-int mbfl_filt_conv_wchar_cp866(int c, mbfl_convert_filter *filter);
-
-#endif /* MBFL_MBFILTER_CP866_H */
diff --git a/ext/mbstring/libmbfl/filters/mbfilter_cp932.c b/ext/mbstring/libmbfl/filters/mbfilter_cp932.c
deleted file mode 100644
index 80f7bfbc6b..0000000000
--- a/ext/mbstring/libmbfl/filters/mbfilter_cp932.c
+++ /dev/null
@@ -1,350 +0,0 @@
-/*
- * "streamable kanji code filter and converter"
- * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved.
- *
- * LICENSE NOTICES
- *
- * This file is part of "streamable kanji code filter and converter",
- * which is distributed under the terms of GNU Lesser General Public
- * License (version 2) as published by the Free Software Foundation.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with "streamable kanji code filter and converter";
- * if not, write to the Free Software Foundation, Inc., 59 Temple Place,
- * Suite 330, Boston, MA 02111-1307 USA
- *
- * The author of this file:
- *
- */
-/*
- * the source code included in this files was separated from mbfilter_ja.c
- * by moriyoshi koizumi <moriyoshi@php.net> on 4 dec 2002.
- *
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "mbfilter.h"
-#include "mbfilter_cp932.h"
-
-#include "unicode_table_cp932_ext.h"
-#include "unicode_table_jis.h"
-
-static int mbfl_filt_ident_sjiswin(int c, mbfl_identify_filter *filter);
-
-static const unsigned char mblen_table_sjis[] = { /* 0x80-0x9f,0xE0-0xFF */
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2
-};
-
-static const char *mbfl_encoding_sjis_win_aliases[] = {"SJIS-open", "CP932", "Windows-31J", "MS_Kanji", NULL};
-
-const mbfl_encoding mbfl_encoding_sjis_win = {
- mbfl_no_encoding_sjis_win,
- "SJIS-win",
- "Shift_JIS",
- (const char *(*)[])&mbfl_encoding_sjis_win_aliases,
- mblen_table_sjis,
- MBFL_ENCTYPE_MBCS
-};
-
-const struct mbfl_identify_vtbl vtbl_identify_sjiswin = {
- mbfl_no_encoding_sjis_win,
- mbfl_filt_ident_common_ctor,
- mbfl_filt_ident_common_dtor,
- mbfl_filt_ident_sjiswin
-};
-
-const struct mbfl_convert_vtbl vtbl_sjiswin_wchar = {
- mbfl_no_encoding_sjis_win,
- mbfl_no_encoding_wchar,
- mbfl_filt_conv_common_ctor,
- mbfl_filt_conv_common_dtor,
- mbfl_filt_conv_sjiswin_wchar,
- mbfl_filt_conv_common_flush
-};
-
-const struct mbfl_convert_vtbl vtbl_wchar_sjiswin = {
- mbfl_no_encoding_wchar,
- mbfl_no_encoding_sjis_win,
- mbfl_filt_conv_common_ctor,
- mbfl_filt_conv_common_dtor,
- mbfl_filt_conv_wchar_sjiswin,
- mbfl_filt_conv_common_flush
-};
-
-#define CK(statement) do { if ((statement) < 0) return (-1); } while (0)
-
-#define SJIS_ENCODE(c1,c2,s1,s2) \
- do { \
- s1 = c1; \
- s1--; \
- s1 >>= 1; \
- if ((c1) < 0x5f) { \
- s1 += 0x71; \
- } else { \
- s1 += 0xb1; \
- } \
- s2 = c2; \
- if ((c1) & 1) { \
- if ((c2) < 0x60) { \
- s2--; \
- } \
- s2 += 0x20; \
- } else { \
- s2 += 0x7e; \
- } \
- } while (0)
-
-#define SJIS_DECODE(c1,c2,s1,s2) \
- do { \
- s1 = c1; \
- if (s1 < 0xa0) { \
- s1 -= 0x81; \
- } else { \
- s1 -= 0xc1; \
- } \
- s1 <<= 1; \
- s1 += 0x21; \
- s2 = c2; \
- if (s2 < 0x9f) { \
- if (s2 < 0x7f) { \
- s2++; \
- } \
- s2 -= 0x20; \
- } else { \
- s1++; \
- s2 -= 0x7e; \
- } \
- } while (0)
-
-
-/*
- * SJIS-win => wchar
- */
-int
-mbfl_filt_conv_sjiswin_wchar(int c, mbfl_convert_filter *filter)
-{
- int c1, s, s1, s2, w;
-
- switch (filter->status) {
- case 0:
- if (c >= 0 && c < 0x80) { /* latin */
- CK((*filter->output_function)(c, filter->data));
- } else if (c > 0xa0 && c < 0xe0) { /* kana */
- CK((*filter->output_function)(0xfec0 + c, filter->data));
- } else if (c > 0x80 && c < 0xfd && c != 0xa0) { /* kanji first char */
- filter->status = 1;
- filter->cache = c;
- } else {
- w = c & MBFL_WCSGROUP_MASK;
- w |= MBFL_WCSGROUP_THROUGH;
- CK((*filter->output_function)(w, filter->data));
- }
- break;
-
- case 1: /* kanji second char */
- filter->status = 0;
- c1 = filter->cache;
- if (c > 0x39 && c < 0xfd && c != 0x7f) {
- w = 0;
- SJIS_DECODE(c1, c, s1, s2);
- s = (s1 - 0x21)*94 + s2 - 0x21;
- if (s <= 137) {
- if (s == 31) {
- w = 0xff3c; /* FULLWIDTH REVERSE SOLIDUS */
- } else if (s == 32) {
- w = 0xff5e; /* FULLWIDTH TILDE */
- } else if (s == 33) {
- w = 0x2225; /* PARALLEL TO */
- } else if (s == 60) {
- w = 0xff0d; /* FULLWIDTH HYPHEN-MINUS */
- } else if (s == 80) {
- w = 0xffe0; /* FULLWIDTH CENT SIGN */
- } else if (s == 81) {
- w = 0xffe1; /* FULLWIDTH POUND SIGN */
- } else if (s == 137) {
- w = 0xffe2; /* FULLWIDTH NOT SIGN */
- }
- }
- if (w == 0) {
- if (s >= cp932ext1_ucs_table_min && s < cp932ext1_ucs_table_max) { /* vendor ext1 (13ku) */
- w = cp932ext1_ucs_table[s - cp932ext1_ucs_table_min];
- } else if (s >= 0 && s < jisx0208_ucs_table_size) { /* X 0208 */
- w = jisx0208_ucs_table[s];
- } else if (s >= cp932ext2_ucs_table_min && s < cp932ext2_ucs_table_max) { /* vendor ext2 (89ku - 92ku) */
- w = cp932ext2_ucs_table[s - cp932ext2_ucs_table_min];
- } else if (s >= cp932ext3_ucs_table_min && s < cp932ext3_ucs_table_max) { /* vendor ext3 (115ku - 119ku) */
- w = cp932ext3_ucs_table[s - cp932ext3_ucs_table_min];
- } else if (s >= (94*94) && s < (114*94)) { /* user (95ku - 114ku) */
- w = s - (94*94) + 0xe000;
- }
- }
- if (w <= 0) {
- w = (s1 << 8) | s2;
- w &= MBFL_WCSPLANE_MASK;
- w |= MBFL_WCSPLANE_WINCP932;
- }
- CK((*filter->output_function)(w, filter->data));
- } else if ((c >= 0 && c < 0x21) || c == 0x7f) { /* CTLs */
- CK((*filter->output_function)(c, filter->data));
- } else {
- w = (c1 << 8) | c;
- w &= MBFL_WCSGROUP_MASK;
- w |= MBFL_WCSGROUP_THROUGH;
- CK((*filter->output_function)(w, filter->data));
- }
- break;
-
- default:
- filter->status = 0;
- break;
- }
-
- return c;
-}
-
-/*
- * wchar => SJIS-win
- */
-int
-mbfl_filt_conv_wchar_sjiswin(int c, mbfl_convert_filter *filter)
-{
- int c1, c2, s1, s2;
-
- s1 = 0;
- s2 = 0;
- if (c >= ucs_a1_jis_table_min && c < ucs_a1_jis_table_max) {
- s1 = ucs_a1_jis_table[c - ucs_a1_jis_table_min];
- } else if (c >= ucs_a2_jis_table_min && c < ucs_a2_jis_table_max) {
- s1 = ucs_a2_jis_table[c - ucs_a2_jis_table_min];
- } else if (c >= ucs_i_jis_table_min && c < ucs_i_jis_table_max) {
- s1 = ucs_i_jis_table[c - ucs_i_jis_table_min];
- } else if (c >= ucs_r_jis_table_min && c < ucs_r_jis_table_max) {
- s1 = ucs_r_jis_table[c - ucs_r_jis_table_min];
- } else if (c >= 0xe000 && c < (0xe000 + 20*94)) { /* user (95ku - 114ku) */
- s1 = c - 0xe000;
- c1 = s1/94 + 0x7f;
- c2 = s1%94 + 0x21;
- s1 = (c1 << 8) | c2;
- s2 = 1;
- }
- if (s1 <= 0) {
- c1 = c & ~MBFL_WCSPLANE_MASK;
- if (c1 == MBFL_WCSPLANE_WINCP932) {
- s1 = c & MBFL_WCSPLANE_MASK;
- s2 = 1;
- } else if (c1 == MBFL_WCSPLANE_JIS0208) {
- s1 = c & MBFL_WCSPLANE_MASK;
- } else if (c1 == MBFL_WCSPLANE_JIS0212) {
- s1 = c & MBFL_WCSPLANE_MASK;
- s1 |= 0x8080;
- } else if (c == 0xa5) { /* YEN SIGN */
- s1 = 0x216f; /* FULLWIDTH YEN SIGN */
- } else if (c == 0x203e) { /* OVER LINE */
- s1 = 0x2131; /* FULLWIDTH MACRON */
- } else if (c == 0xff3c) { /* FULLWIDTH REVERSE SOLIDUS */
- s1 = 0x2140;
- } else if (c == 0xff5e) { /* FULLWIDTH TILDE */
- s1 = 0x2141;
- } else if (c == 0x2225) { /* PARALLEL TO */
- s1 = 0x2142;
- } else if (c == 0xff0d) { /* FULLWIDTH HYPHEN-MINUS */
- s1 = 0x215d;
- } else if (c == 0xffe0) { /* FULLWIDTH CENT SIGN */
- s1 = 0x2171;
- } else if (c == 0xffe1) { /* FULLWIDTH POUND SIGN */
- s1 = 0x2172;
- } else if (c == 0xffe2) { /* FULLWIDTH NOT SIGN */
- s1 = 0x224c;
- }
- }
- if ((s1 <= 0) || (s1 >= 0x8080 && s2 == 0)) { /* not found or X 0212 */
- s1 = -1;
- c1 = 0;
- c2 = cp932ext1_ucs_table_max - cp932ext1_ucs_table_min;
- while (c1 < c2) { /* CP932 vendor ext1 (13ku) */
- if (c == cp932ext1_ucs_table[c1]) {
- s1 = ((c1/94 + 0x2d) << 8) + (c1%94 + 0x21);
- break;
- }
- c1++;
- }
- if (s1 <= 0) {
- c1 = 0;
- c2 = cp932ext3_ucs_table_max - cp932ext3_ucs_table_min;
- while (c1 < c2) { /* CP932 vendor ext3 (115ku - 119ku) */
- if (c == cp932ext3_ucs_table[c1]) {
- s1 = ((c1/94 + 0x93) << 8) + (c1%94 + 0x21);
- break;
- }
- c1++;
- }
- }
- if (c == 0) {
- s1 = 0;
- } else if (s1 <= 0) {
- s1 = -1;
- }
- }
- if (s1 >= 0) {
- if (s1 < 0x100) { /* latin or kana */
- CK((*filter->output_function)(s1, filter->data));
- } else { /* kanji */
- c1 = (s1 >> 8) & 0xff;
- c2 = s1 & 0xff;
- SJIS_ENCODE(c1, c2, s1, s2);
- CK((*filter->output_function)(s1, filter->data));
- CK((*filter->output_function)(s2, filter->data));
- }
- } else {
- if (filter->illegal_mode != MBFL_OUTPUTFILTER_ILLEGAL_MODE_NONE) {
- CK(mbfl_filt_conv_illegal_output(c, filter));
- }
- }
-
- return c;
-}
-
-static int mbfl_filt_ident_sjiswin(int c, mbfl_identify_filter *filter)
-{
- if (filter->status) { /* kanji second char */
- if (c < 0x40 || c > 0xfc || c == 0x7f) { /* bad */
- filter->flag = 1;
- }
- filter->status = 0;
- } else if (c >= 0 && c < 0x80) { /* latin ok */
- ;
- } else if (c > 0xa0 && c < 0xe0) { /* kana ok */
- ;
- } else if (c > 0x80 && c < 0xfd && c != 0xa0) { /* kanji first char */
- filter->status = 1;
- } else { /* bad */
- filter->flag = 1;
- }
-
- return c;
-}
-
-
diff --git a/ext/mbstring/libmbfl/filters/mbfilter_cp932.h b/ext/mbstring/libmbfl/filters/mbfilter_cp932.h
deleted file mode 100644
index f66baabea5..0000000000
--- a/ext/mbstring/libmbfl/filters/mbfilter_cp932.h
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * "streamable kanji code filter and converter"
- * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved.
- *
- * LICENSE NOTICES
- *
- * This file is part of "streamable kanji code filter and converter",
- * which is distributed under the terms of GNU Lesser General Public
- * License (version 2) as published by the Free Software Foundation.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with "streamable kanji code filter and converter";
- * if not, write to the Free Software Foundation, Inc., 59 Temple Place,
- * Suite 330, Boston, MA 02111-1307 USA
- *
- * The author of this file:
- *
- */
-/*
- * the source code included in this files was separated from mbfilter_ja.c
- * by moriyoshi koizumi <moriyoshi@php.net> on 4 dec 2002.
- *
- */
-
-#ifndef MBFL_MBFILTER_CP932_H
-#define MBFL_MBFILTER_CP932_H
-
-#include "mbfilter.h"
-
-extern const mbfl_encoding mbfl_encoding_sjis_win;
-extern const struct mbfl_identify_vtbl vtbl_identify_sjiswin;
-extern const struct mbfl_convert_vtbl vtbl_sjiswin_wchar;
-extern const struct mbfl_convert_vtbl vtbl_wchar_sjiswin;
-
-int mbfl_filt_conv_sjiswin_wchar(int c, mbfl_convert_filter *filter);
-int mbfl_filt_conv_wchar_sjiswin(int c, mbfl_convert_filter *filter);
-
-#endif /* MBFL_MBFILTER_CP932_H */
diff --git a/ext/mbstring/libmbfl/filters/mbfilter_cp936.c b/ext/mbstring/libmbfl/filters/mbfilter_cp936.c
deleted file mode 100644
index 9cdd0520e8..0000000000
--- a/ext/mbstring/libmbfl/filters/mbfilter_cp936.c
+++ /dev/null
@@ -1,228 +0,0 @@
-/*
- * "streamable kanji code filter and converter"
- * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved.
- *
- * LICENSE NOTICES
- *
- * This file is part of "streamable kanji code filter and converter",
- * which is distributed under the terms of GNU Lesser General Public
- * License (version 2) as published by the Free Software Foundation.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with "streamable kanji code filter and converter";
- * if not, write to the Free Software Foundation, Inc., 59 Temple Place,
- * Suite 330, Boston, MA 02111-1307 USA
- *
- * The author of this file:
- *
- */
-/*
- * the source code included in this files was separated from mbfilter_cn.c
- * by moriyoshi koizumi <moriyoshi@php.net> on 4 dec 2002.
- *
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "mbfilter.h"
-#include "mbfilter_cp936.h"
-
-#include "unicode_table_cp936.h"
-
-static int mbfl_filt_ident_cp936(int c, mbfl_identify_filter *filter);
-
-static const unsigned char mblen_table_cp936[] = { /* 0x81-0xFE */
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1
-};
-
-static const char *mbfl_encoding_cp936_aliases[] = {"CP-936", "GBK", NULL};
-
-const mbfl_encoding mbfl_encoding_cp936 = {
- mbfl_no_encoding_cp936,
- "CP936",
- "CP936",
- (const char *(*)[])&mbfl_encoding_cp936_aliases,
- mblen_table_cp936,
- MBFL_ENCTYPE_MBCS
-};
-
-const struct mbfl_identify_vtbl vtbl_identify_cp936 = {
- mbfl_no_encoding_cp936,
- mbfl_filt_ident_common_ctor,
- mbfl_filt_ident_common_dtor,
- mbfl_filt_ident_cp936
-};
-
-const struct mbfl_convert_vtbl vtbl_cp936_wchar = {
- mbfl_no_encoding_cp936,
- mbfl_no_encoding_wchar,
- mbfl_filt_conv_common_ctor,
- mbfl_filt_conv_common_dtor,
- mbfl_filt_conv_cp936_wchar,
- mbfl_filt_conv_common_flush
-};
-
-const struct mbfl_convert_vtbl vtbl_wchar_cp936 = {
- mbfl_no_encoding_wchar,
- mbfl_no_encoding_cp936,
- mbfl_filt_conv_common_ctor,
- mbfl_filt_conv_common_dtor,
- mbfl_filt_conv_wchar_cp936,
- mbfl_filt_conv_common_flush
-};
-
-
-#define CK(statement) do { if ((statement) < 0) return (-1); } while (0)
-
-/*
- * CP936 => wchar
- */
-int
-mbfl_filt_conv_cp936_wchar(int c, mbfl_convert_filter *filter)
-{
- int c1, w;
-
- switch (filter->status) {
- case 0:
- if (c >= 0 && c < 0x80) { /* latin */
- CK((*filter->output_function)(c, filter->data));
- } else if (c == 0x80) { /* euro sign */
- CK((*filter->output_function)(0x20ac, filter->data));
- } else if (c > 0x80 && c < 0xff) { /* dbcs lead byte */
- filter->status = 1;
- filter->cache = c;
- } else {
- w = c & MBFL_WCSGROUP_MASK;
- w |= MBFL_WCSGROUP_THROUGH;
- CK((*filter->output_function)(w, filter->data));
- }
- break;
-
- case 1: /* dbcs second byte */
- filter->status = 0;
- c1 = filter->cache;
- if ( c1 < 0xff && c1 > 0x80 && c > 0x39 && c < 0xff && c != 0x7f) {
- w = (c1 - 0x81)*192 + (c - 0x40);
- if (w >= 0 && w < cp936_ucs_table_size) {
- w = cp936_ucs_table[w];
- } else {
- w = 0;
- }
- if (w <= 0) {
- w = (c1 << 8) | c;
- w &= MBFL_WCSPLANE_MASK;
- w |= MBFL_WCSPLANE_WINCP936;
- }
- CK((*filter->output_function)(w, filter->data));
- } else if ((c >= 0 && c < 0x21) || c == 0x7f) { /* CTLs */
- CK((*filter->output_function)(c, filter->data));
- } else {
- w = (c1 << 8) | c;
- w &= MBFL_WCSGROUP_MASK;
- w |= MBFL_WCSGROUP_THROUGH;
- CK((*filter->output_function)(w, filter->data));
- }
- break;
-
- default:
- filter->status = 0;
- break;
- }
-
- return c;
-}
-
-/*
- * wchar => CP936
- */
-int
-mbfl_filt_conv_wchar_cp936(int c, mbfl_convert_filter *filter)
-{
- int c1, s;
-
- s = 0;
- if (c >= ucs_a1_cp936_table_min && c < ucs_a1_cp936_table_max) {
- s = ucs_a1_cp936_table[c - ucs_a1_cp936_table_min];
- } else if (c >= ucs_a2_cp936_table_min && c < ucs_a2_cp936_table_max) {
- s = ucs_a2_cp936_table[c - ucs_a2_cp936_table_min];
- } else if (c >= ucs_a3_cp936_table_min && c < ucs_a3_cp936_table_max) {
- s = ucs_a3_cp936_table[c - ucs_a3_cp936_table_min];
- } else if (c >= ucs_i_cp936_table_min && c < ucs_i_cp936_table_max) {
- s = ucs_i_cp936_table[c - ucs_i_cp936_table_min];
- } else if (c >= ucs_ci_cp936_table_min && c < ucs_ci_cp936_table_max) {
- s = ucs_ci_cp936_table[c - ucs_ci_cp936_table_min];
- } else if (c >= ucs_cf_cp936_table_min && c < ucs_cf_cp936_table_max) {
- s = ucs_cf_cp936_table[c - ucs_cf_cp936_table_min];
- } else if (c >= ucs_sfv_cp936_table_min && c < ucs_sfv_cp936_table_max) {
- s = ucs_sfv_cp936_table[c - ucs_sfv_cp936_table_min];
- } else if (c >= ucs_hff_cp936_table_min && c < ucs_hff_cp936_table_max) {
- s = ucs_hff_cp936_table[c - ucs_hff_cp936_table_min];
- }
- if (s <= 0) {
- c1 = c & ~MBFL_WCSPLANE_MASK;
- if (c1 == MBFL_WCSPLANE_WINCP936) {
- s = c & MBFL_WCSPLANE_MASK;
- }
- if (c == 0) {
- s = 0;
- } else if (s <= 0) {
- s = -1;
- }
- }
- if (s >= 0) {
- if (s < 0x80) { /* latin */
- CK((*filter->output_function)(s, filter->data));
- } else {
- CK((*filter->output_function)((s >> 8) & 0xff, filter->data));
- CK((*filter->output_function)(s & 0xff, filter->data));
- }
- } else {
- if (filter->illegal_mode != MBFL_OUTPUTFILTER_ILLEGAL_MODE_NONE) {
- CK(mbfl_filt_conv_illegal_output(c, filter));
- }
- }
-
- return c;
-}
-
-static int mbfl_filt_ident_cp936(int c, mbfl_identify_filter *filter)
-{
- if (filter->status) { /* kanji second char */
- if (c < 0x40 || c > 0xfe || c == 0x7f) { /* bad */
- filter->flag = 1;
- }
- filter->status = 0;
- } else if (c >= 0 && c < 0x80) { /* latin ok */
- ;
- } else if (c > 0x80 && c < 0xff) { /* DBCS lead byte */
- filter->status = 1;
- } else { /* bad */
- filter->flag = 1;
- }
-
- return c;
-}
-
-
diff --git a/ext/mbstring/libmbfl/filters/mbfilter_cp936.h b/ext/mbstring/libmbfl/filters/mbfilter_cp936.h
deleted file mode 100644
index 1bd603d157..0000000000
--- a/ext/mbstring/libmbfl/filters/mbfilter_cp936.h
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * "streamable kanji code filter and converter"
- * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved.
- *
- * LICENSE NOTICES
- *
- * This file is part of "streamable kanji code filter and converter",
- * which is distributed under the terms of GNU Lesser General Public
- * License (version 2) as published by the Free Software Foundation.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with "streamable kanji code filter and converter";
- * if not, write to the Free Software Foundation, Inc., 59 Temple Place,
- * Suite 330, Boston, MA 02111-1307 USA
- *
- * The author of this file:
- *
- */
-/*
- * the source code included in this files was separated from mbfilter_cn.h
- * by moriyoshi koizumi <moriyoshi@php.net> on 4 dec 2002.
- *
- */
-
-#ifndef MBFL_MBFILTER_CP936_H
-#define MBFL_MBFILTER_CP936_H
-
-#include "mbfilter.h"
-
-extern const mbfl_encoding mbfl_encoding_cp936;
-extern const struct mbfl_identify_vtbl vtbl_identify_cp936;
-extern const struct mbfl_convert_vtbl vtbl_cp936_wchar;
-extern const struct mbfl_convert_vtbl vtbl_wchar_cp936;
-
-int mbfl_filt_conv_cp936_wchar(int c, mbfl_convert_filter *filter);
-int mbfl_filt_conv_wchar_cp936(int c, mbfl_convert_filter *filter);
-
-#endif /* MBFL_MBFILTER_CP936_H */
diff --git a/ext/mbstring/libmbfl/filters/mbfilter_euc_cn.c b/ext/mbstring/libmbfl/filters/mbfilter_euc_cn.c
deleted file mode 100644
index cc2bcc1cee..0000000000
--- a/ext/mbstring/libmbfl/filters/mbfilter_euc_cn.c
+++ /dev/null
@@ -1,236 +0,0 @@
-/*
- * "streamable kanji code filter and converter"
- * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved.
- *
- * LICENSE NOTICES
- *
- * This file is part of "streamable kanji code filter and converter",
- * which is distributed under the terms of GNU Lesser General Public
- * License (version 2) as published by the Free Software Foundation.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with "streamable kanji code filter and converter";
- * if not, write to the Free Software Foundation, Inc., 59 Temple Place,
- * Suite 330, Boston, MA 02111-1307 USA
- *
- * The author of this file:
- *
- */
-/*
- * The source code included in this files was separated from mbfilter_cn.c
- * by Moriyoshi Koizumi <moriyoshi@php.net> on 4 Dec 2002.
- *
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "mbfilter.h"
-#include "mbfilter_euc_cn.h"
-
-#include "unicode_table_cp936.h"
-
-static int mbfl_filt_ident_euccn(int c, mbfl_identify_filter *filter);
-
-static const unsigned char mblen_table_euccn[] = { /* 0xA1-0xFE */
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1
-};
-
-static const char *mbfl_encoding_euc_cn_aliases[] = {"CN-GB", "EUC_CN", "eucCN", "x-euc-cn", "gb2312", NULL};
-
-const mbfl_encoding mbfl_encoding_euc_cn = {
- mbfl_no_encoding_euc_cn,
- "EUC-CN",
- "CN-GB",
- (const char *(*)[])&mbfl_encoding_euc_cn_aliases,
- mblen_table_euccn,
- MBFL_ENCTYPE_MBCS
-};
-
-const struct mbfl_identify_vtbl vtbl_identify_euccn = {
- mbfl_no_encoding_euc_cn,
- mbfl_filt_ident_common_ctor,
- mbfl_filt_ident_common_dtor,
- mbfl_filt_ident_euccn
-};
-
-const struct mbfl_convert_vtbl vtbl_euccn_wchar = {
- mbfl_no_encoding_euc_cn,
- mbfl_no_encoding_wchar,
- mbfl_filt_conv_common_ctor,
- mbfl_filt_conv_common_dtor,
- mbfl_filt_conv_euccn_wchar,
- mbfl_filt_conv_common_flush
-};
-
-const struct mbfl_convert_vtbl vtbl_wchar_euccn = {
- mbfl_no_encoding_wchar,
- mbfl_no_encoding_euc_cn,
- mbfl_filt_conv_common_ctor,
- mbfl_filt_conv_common_dtor,
- mbfl_filt_conv_wchar_euccn,
- mbfl_filt_conv_common_flush
-};
-
-#define CK(statement) do { if ((statement) < 0) return (-1); } while (0)
-
-/*
- * EUC-CN => wchar
- */
-int
-mbfl_filt_conv_euccn_wchar(int c, mbfl_convert_filter *filter)
-{
- int c1, w;
-
- switch (filter->status) {
- case 0:
- if (c >= 0 && c < 0x80) { /* latin */
- CK((*filter->output_function)(c, filter->data));
- } else if (c > 0xa0 && c < 0xff) { /* dbcs lead byte */
- filter->status = 1;
- filter->cache = c;
- } else {
- w = c & MBFL_WCSGROUP_MASK;
- w |= MBFL_WCSGROUP_THROUGH;
- CK((*filter->output_function)(w, filter->data));
- }
- break;
-
- case 1: /* dbcs second byte */
- filter->status = 0;
- c1 = filter->cache;
- if (c1 > 0xa0 && c1 < 0xff && c > 0xa0 && c < 0xff) {
- w = (c1 - 0x81)*192 + (c - 0x40);
- if (w >= 0 && w < cp936_ucs_table_size) {
- w = cp936_ucs_table[w];
- } else {
- w = 0;
- }
- if (w <= 0) {
- w = (c1 << 8) | c;
- w &= MBFL_WCSPLANE_MASK;
- w |= MBFL_WCSPLANE_GB2312;
- }
- CK((*filter->output_function)(w, filter->data));
- } else if ((c >= 0 && c < 0x21) || c == 0x7f) { /* CTLs */
- CK((*filter->output_function)(c, filter->data));
- } else {
- w = (c1 << 8) | c;
- w &= MBFL_WCSGROUP_MASK;
- w |= MBFL_WCSGROUP_THROUGH;
- CK((*filter->output_function)(w, filter->data));
- }
- break;
-
- default:
- filter->status = 0;
- break;
- }
-
- return c;
-}
-
-/*
- * wchar => EUC-CN
- */
-int
-mbfl_filt_conv_wchar_euccn(int c, mbfl_convert_filter *filter)
-{
- int c1, c2, s;
-
- s = 0;
- if (c >= ucs_a1_cp936_table_min && c < ucs_a1_cp936_table_max) {
- s = ucs_a1_cp936_table[c - ucs_a1_cp936_table_min];
- } else if (c >= ucs_a2_cp936_table_min && c < ucs_a2_cp936_table_max) {
- s = ucs_a2_cp936_table[c - ucs_a2_cp936_table_min];
- } else if (c >= ucs_a3_cp936_table_min && c < ucs_a3_cp936_table_max) {
- s = ucs_a3_cp936_table[c - ucs_a3_cp936_table_min];
- } else if (c >= ucs_i_cp936_table_min && c < ucs_i_cp936_table_max) {
- s = ucs_i_cp936_table[c - ucs_i_cp936_table_min];
- } else if (c >= ucs_hff_cp936_table_min && c < ucs_hff_cp936_table_max) {
- s = ucs_hff_cp936_table[c - ucs_hff_cp936_table_min];
- }
- c1 = (s >> 8) & 0xff;
- c2 = s & 0xff;
-
- if (c1 < 0xa1 || c2 < 0xa1) { /* exclude CP936 extension */
- s = c;
- }
-
- if (s <= 0) {
- c1 = c & ~MBFL_WCSPLANE_MASK;
- if (c1 == MBFL_WCSPLANE_GB2312) {
- s = c & MBFL_WCSPLANE_MASK;
- }
- if (c == 0) {
- s = 0;
- } else if (s <= 0) {
- s = -1;
- }
- }
- if (s >= 0) {
- if (s < 0x80) { /* latin */
- CK((*filter->output_function)(s, filter->data));
- } else {
- CK((*filter->output_function)((s >> 8) & 0xff, filter->data));
- CK((*filter->output_function)(s & 0xff, filter->data));
- }
- } else {
- if (filter->illegal_mode != MBFL_OUTPUTFILTER_ILLEGAL_MODE_NONE) {
- CK(mbfl_filt_conv_illegal_output(c, filter));
- }
- }
-
- return c;
-}
-
-static int mbfl_filt_ident_euccn(int c, mbfl_identify_filter *filter)
-{
- switch (filter->status) {
- case 0: /* latin */
- if (c >= 0 && c < 0x80) { /* ok */
- ;
- } else if (c > 0xa0 && c < 0xff) { /* DBCS lead byte */
- filter->status = 1;
- } else { /* bad */
- filter->flag = 1;
- }
- break;
-
- case 1: /* got lead byte */
- if (c < 0xa1 || c > 0xfe) { /* bad */
- filter->flag = 1;
- }
- filter->status = 0;
- break;
-
- default:
- filter->status = 0;
- break;
- }
-
- return c;
-}
-
-
diff --git a/ext/mbstring/libmbfl/filters/mbfilter_euc_cn.h b/ext/mbstring/libmbfl/filters/mbfilter_euc_cn.h
deleted file mode 100644
index e72bc08ebf..0000000000
--- a/ext/mbstring/libmbfl/filters/mbfilter_euc_cn.h
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * "streamable kanji code filter and converter"
- * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved.
- *
- * LICENSE NOTICES
- *
- * This file is part of "streamable kanji code filter and converter",
- * which is distributed under the terms of GNU Lesser General Public
- * License (version 2) as published by the Free Software Foundation.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with "streamable kanji code filter and converter";
- * if not, write to the Free Software Foundation, Inc., 59 Temple Place,
- * Suite 330, Boston, MA 02111-1307 USA
- *
- * The author of this file:
- *
- */
-/*
- * The source code included in this files was separated from mbfilter_euc_cn.h
- * by Moriyoshi Koizumi <moriyoshi@php.net> on 4 Dec 2002.
- *
- */
-
-#ifndef MBFL_MBFILTER_EUC_CN_H
-#define MBFL_MBFILTER_EUC_CN_H
-
-#include "mbfilter.h"
-
-extern const mbfl_encoding mbfl_encoding_euc_cn;
-extern const struct mbfl_identify_vtbl vtbl_identify_euccn;
-extern const struct mbfl_convert_vtbl vtbl_euccn_wchar;
-extern const struct mbfl_convert_vtbl vtbl_wchar_euccn;
-
-int mbfl_filt_conv_euccn_wchar(int c, mbfl_convert_filter *filter);
-int mbfl_filt_conv_wchar_euccn(int c, mbfl_convert_filter *filter);
-
-#endif /* MBFL_MBFILTER_EUC_CN_H */
diff --git a/ext/mbstring/libmbfl/filters/mbfilter_euc_jp.c b/ext/mbstring/libmbfl/filters/mbfilter_euc_jp.c
deleted file mode 100644
index f5c9643772..0000000000
--- a/ext/mbstring/libmbfl/filters/mbfilter_euc_jp.c
+++ /dev/null
@@ -1,331 +0,0 @@
-/*
- * "streamable kanji code filter and converter"
- * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved.
- *
- * LICENSE NOTICES
- *
- * This file is part of "streamable kanji code filter and converter",
- * which is distributed under the terms of GNU Lesser General Public
- * License (version 2) as published by the Free Software Foundation.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with "streamable kanji code filter and converter";
- * if not, write to the Free Software Foundation, Inc., 59 Temple Place,
- * Suite 330, Boston, MA 02111-1307 USA
- *
- * The author of this file:
- *
- */
-/*
- * The source code included in this files was separated from mbfilter_ja.c
- * by moriyoshi koizumi <moriyoshi@php.net> on 4 dec 2002.
- *
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "mbfilter.h"
-#include "mbfilter_euc_jp.h"
-
-#include "unicode_table_cp932_ext.h"
-#include "unicode_table_jis.h"
-
-static int mbfl_filt_ident_eucjp(int c, mbfl_identify_filter *filter);
-
-static const unsigned char mblen_table_eucjp[] = { /* 0xA1-0xFE */
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 3,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1
-};
-
-static const char *mbfl_encoding_euc_jp_aliases[] = {"EUC", "EUC_JP", "eucJP", "x-euc-jp", NULL};
-
-const mbfl_encoding mbfl_encoding_euc_jp = {
- mbfl_no_encoding_euc_jp,
- "EUC-JP",
- "EUC-JP",
- (const char *(*)[])&mbfl_encoding_euc_jp_aliases,
- mblen_table_eucjp,
- MBFL_ENCTYPE_MBCS
-};
-
-const struct mbfl_identify_vtbl vtbl_identify_eucjp = {
- mbfl_no_encoding_euc_jp,
- mbfl_filt_ident_common_ctor,
- mbfl_filt_ident_common_dtor,
- mbfl_filt_ident_eucjp
-};
-
-const struct mbfl_convert_vtbl vtbl_eucjp_wchar = {
- mbfl_no_encoding_euc_jp,
- mbfl_no_encoding_wchar,
- mbfl_filt_conv_common_ctor,
- mbfl_filt_conv_common_dtor,
- mbfl_filt_conv_eucjp_wchar,
- mbfl_filt_conv_common_flush
-};
-
-const struct mbfl_convert_vtbl vtbl_wchar_eucjp = {
- mbfl_no_encoding_wchar,
- mbfl_no_encoding_euc_jp,
- mbfl_filt_conv_common_ctor,
- mbfl_filt_conv_common_dtor,
- mbfl_filt_conv_wchar_eucjp,
- mbfl_filt_conv_common_flush
-};
-
-#define CK(statement) do { if ((statement) < 0) return (-1); } while (0)
-
-/*
- * EUC-JP => wchar
- */
-int
-mbfl_filt_conv_eucjp_wchar(int c, mbfl_convert_filter *filter)
-{
- int c1, s, w;
-
- switch (filter->status) {
- case 0:
- if (c >= 0 && c < 0x80) { /* latin */
- CK((*filter->output_function)(c, filter->data));
- } else if (c > 0xa0 && c < 0xff) { /* X 0208 first char */
- filter->status = 1;
- filter->cache = c;
- } else if (c == 0x8e) { /* kana first char */
- filter->status = 2;
- } else if (c == 0x8f) { /* X 0212 first char */
- filter->status = 3;
- } else {
- w = c & MBFL_WCSGROUP_MASK;
- w |= MBFL_WCSGROUP_THROUGH;
- CK((*filter->output_function)(w, filter->data));
- }
- break;
-
- case 1: /* got first half */
- filter->status = 0;
- c1 = filter->cache;
- if (c > 0xa0 && c < 0xff) {
- s = (c1 - 0xa1)*94 + c - 0xa1;
- if (s >= 0 && s < jisx0208_ucs_table_size) {
- w = jisx0208_ucs_table[s];
- } else {
- w = 0;
- }
- if (w <= 0) {
- w = ((c1 & 0x7f) << 8) | (c & 0x7f);
- w &= MBFL_WCSPLANE_MASK;
- w |= MBFL_WCSPLANE_JIS0208;
- }
- CK((*filter->output_function)(w, filter->data));
- } else if ((c >= 0 && c < 0x21) || c == 0x7f) { /* CTLs */
- CK((*filter->output_function)(c, filter->data));
- } else {
- w = (c1 << 8) | c;
- w &= MBFL_WCSGROUP_MASK;
- w |= MBFL_WCSGROUP_THROUGH;
- CK((*filter->output_function)(w, filter->data));
- }
- break;
-
- case 2: /* got 0x8e */
- filter->status = 0;
- if (c > 0xa0 && c < 0xe0) {
- w = 0xfec0 + c;
- CK((*filter->output_function)(w, filter->data));
- } else if ((c >= 0 && c < 0x21) || c == 0x7f) { /* CTLs */
- CK((*filter->output_function)(c, filter->data));
- } else {
- w = 0x8e00 | c;
- w &= MBFL_WCSGROUP_MASK;
- w |= MBFL_WCSGROUP_THROUGH;
- CK((*filter->output_function)(w, filter->data));
- }
- break;
-
- case 3: /* got 0x8f, X 0212 first char */
- if ((c >= 0 && c < 0x21) || c == 0x7f) { /* CTLs */
- CK((*filter->output_function)(c, filter->data));
- filter->status = 0;
- } else {
- filter->status++;
- filter->cache = c;
- }
- break;
- case 4: /* got 0x8f, X 0212 second char */
- filter->status = 0;
- c1 = filter->cache;
- if (c1 > 0xa0 && c1 < 0xff && c > 0xa0 && c < 0xff) {
- s = (c1 - 0xa1)*94 + c - 0xa1;
- if (s >= 0 && s < jisx0212_ucs_table_size) {
- w = jisx0212_ucs_table[s];
- } else {
- w = 0;
- }
- if (w <= 0) {
- w = ((c1 & 0x7f) << 8) | (c & 0x7f);
- w &= MBFL_WCSPLANE_MASK;
- w |= MBFL_WCSPLANE_JIS0212;
- }
- CK((*filter->output_function)(w, filter->data));
- } else if ((c >= 0 && c < 0x21) || c == 0x7f) { /* CTLs */
- CK((*filter->output_function)(c, filter->data));
- } else {
- w = (c1 << 8) | c | 0x8f0000;
- w &= MBFL_WCSGROUP_MASK;
- w |= MBFL_WCSGROUP_THROUGH;
- CK((*filter->output_function)(w, filter->data));
- }
- break;
-
- default:
- filter->status = 0;
- break;
- }
-
- return c;
-}
-
-/*
- * wchar => EUC-JP
- */
-int
-mbfl_filt_conv_wchar_eucjp(int c, mbfl_convert_filter *filter)
-{
- int c1, s;
-
- s = 0;
- if (c >= ucs_a1_jis_table_min && c < ucs_a1_jis_table_max) {
- s = ucs_a1_jis_table[c - ucs_a1_jis_table_min];
- } else if (c >= ucs_a2_jis_table_min && c < ucs_a2_jis_table_max) {
- s = ucs_a2_jis_table[c - ucs_a2_jis_table_min];
- } else if (c >= ucs_i_jis_table_min && c < ucs_i_jis_table_max) {
- s = ucs_i_jis_table[c - ucs_i_jis_table_min];
- } else if (c >= ucs_r_jis_table_min && c < ucs_r_jis_table_max) {
- s = ucs_r_jis_table[c - ucs_r_jis_table_min];
- }
- if (s <= 0) {
- c1 = c & ~MBFL_WCSPLANE_MASK;
- if (c1 == MBFL_WCSPLANE_JIS0208) {
- s = c & MBFL_WCSPLANE_MASK;
- } else if (c1 == MBFL_WCSPLANE_JIS0212) {
- s = c & MBFL_WCSPLANE_MASK;
- s |= 0x8080;
- } else if (c == 0xff3c) { /* FULLWIDTH REVERSE SOLIDUS */
- s = 0x2140;
- } else if (c == 0xff5e) { /* FULLWIDTH TILDE */
- s = 0x2141;
- } else if (c == 0x2225) { /* PARALLEL TO */
- s = 0x2142;
- } else if (c == 0xff0d) { /* FULLWIDTH HYPHEN-MINUS */
- s = 0x215d;
- } else if (c == 0xffe0) { /* FULLWIDTH CENT SIGN */
- s = 0x2171;
- } else if (c == 0xffe1) { /* FULLWIDTH POUND SIGN */
- s = 0x2172;
- } else if (c == 0xffe2) { /* FULLWIDTH NOT SIGN */
- s = 0x224c;
- }
- if (c == 0) {
- s = 0;
- } else if (s <= 0) {
- s = -1;
- }
- }
- if (s >= 0) {
- if (s < 0x80) { /* latin */
- CK((*filter->output_function)(s, filter->data));
- } else if (s < 0x100) { /* kana */
- CK((*filter->output_function)(0x8e, filter->data));
- CK((*filter->output_function)(s, filter->data));
- } else if (s < 0x8080) { /* X 0208 */
- CK((*filter->output_function)(((s >> 8) & 0xff) | 0x80, filter->data));
- CK((*filter->output_function)((s & 0xff) | 0x80, filter->data));
- } else { /* X 0212 */
- CK((*filter->output_function)(0x8f, filter->data));
- CK((*filter->output_function)(((s >> 8) & 0xff) | 0x80, filter->data));
- CK((*filter->output_function)((s & 0xff) | 0x80, filter->data));
- }
- } else {
- if (filter->illegal_mode != MBFL_OUTPUTFILTER_ILLEGAL_MODE_NONE) {
- CK(mbfl_filt_conv_illegal_output(c, filter));
- }
- }
-
- return c;
-}
-
-static int mbfl_filt_ident_eucjp(int c, mbfl_identify_filter *filter)
-{
- switch (filter->status) {
- case 0: /* latin */
- if (c >= 0 && c < 0x80) { /* ok */
- ;
- } else if (c > 0xa0 && c < 0xff) { /* kanji first char */
- filter->status = 1;
- } else if (c == 0x8e) { /* kana first char */
- filter->status = 2;
- } else if (c == 0x8f) { /* X 0212 first char */
- filter->status = 3;
- } else { /* bad */
- filter->flag = 1;
- }
- break;
-
- case 1: /* got first half */
- if (c < 0xa1 || c > 0xfe) { /* bad */
- filter->flag = 1;
- }
- filter->status = 0;
- break;
-
- case 2: /* got 0x8e */
- if (c < 0xa1 || c > 0xdf) { /* bad */
- filter->flag = 1;
- }
- filter->status = 0;
- break;
-
- case 3: /* got 0x8f */
- if (c < 0xa1 || c > 0xfe) { /* bad */
- filter->flag = 1;
- }
- filter->status++;
- break;
- case 4: /* got 0x8f */
- if (c < 0xa1 || c > 0xfe) { /* bad */
- filter->flag = 1;
- }
- filter->status = 0;
- break;
-
- default:
- filter->status = 0;
- break;
- }
-
- return c;
-}
-
-
-
diff --git a/ext/mbstring/libmbfl/filters/mbfilter_euc_jp.h b/ext/mbstring/libmbfl/filters/mbfilter_euc_jp.h
deleted file mode 100644
index de1212dfa8..0000000000
--- a/ext/mbstring/libmbfl/filters/mbfilter_euc_jp.h
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * "streamable kanji code filter and converter"
- * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved.
- *
- * LICENSE NOTICES
- *
- * This file is part of "streamable kanji code filter and converter",
- * which is distributed under the terms of GNU Lesser General Public
- * License (version 2) as published by the Free Software Foundation.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with "streamable kanji code filter and converter";
- * if not, write to the Free Software Foundation, Inc., 59 Temple Place,
- * Suite 330, Boston, MA 02111-1307 USA
- *
- * The author of this file:
- *
- */
-/*
- * The source code included in this files was separated from mbfilter_ja.h
- * by moriyoshi koizumi <moriyoshi@php.net> on 4 dec 2002.
- *
- */
-
-#ifndef MBFL_MBFILTER_EUC_JP_H
-#define MBFL_MBFILTER_EUC_JP_H
-
-#include "mbfilter.h"
-
-extern const mbfl_encoding mbfl_encoding_euc_jp;
-extern const struct mbfl_identify_vtbl vtbl_identify_eucjp;
-extern const struct mbfl_convert_vtbl vtbl_eucjp_wchar;
-extern const struct mbfl_convert_vtbl vtbl_wchar_eucjp;
-
-int mbfl_filt_conv_eucjp_wchar(int c, mbfl_convert_filter *filter);
-int mbfl_filt_conv_wchar_eucjp(int c, mbfl_convert_filter *filter);
-
-#endif /* MBFL_MBFILTER_EUC_JP_H */
diff --git a/ext/mbstring/libmbfl/filters/mbfilter_euc_jp_win.c b/ext/mbstring/libmbfl/filters/mbfilter_euc_jp_win.c
deleted file mode 100644
index e57ae69356..0000000000
--- a/ext/mbstring/libmbfl/filters/mbfilter_euc_jp_win.c
+++ /dev/null
@@ -1,420 +0,0 @@
-/*
- * "streamable kanji code filter and converter"
- * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved.
- *
- * LICENSE NOTICES
- *
- * This file is part of "streamable kanji code filter and converter",
- * which is distributed under the terms of GNU Lesser General Public
- * License (version 2) as published by the Free Software Foundation.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with "streamable kanji code filter and converter";
- * if not, write to the Free Software Foundation, Inc., 59 Temple Place,
- * Suite 330, Boston, MA 02111-1307 USA
- *
- * The author of this file:
- *
- */
-/*
- * The source code included in this files was separated from mbfilter_ja.c
- * by moriyoshi koizumi <moriyoshi@php.net> on 4 dec 2002.
- *
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "mbfilter.h"
-#include "mbfilter_euc_jp_win.h"
-
-#include "unicode_table_cp932_ext.h"
-#include "unicode_table_jis.h"
-#include "cp932_table.h"
-
-static int mbfl_filt_ident_eucjp_win(int c, mbfl_identify_filter *filter);
-
-static const unsigned char mblen_table_eucjp[] = { /* 0xA1-0xFE */
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 3,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1
-};
-
-
-static const char *mbfl_encoding_eucjp_win_aliases[] = {"eucJP-open", NULL};
-
-const struct mbfl_identify_vtbl vtbl_identify_eucjpwin = {
- mbfl_no_encoding_eucjp_win,
- mbfl_filt_ident_common_ctor,
- mbfl_filt_ident_common_dtor,
- mbfl_filt_ident_eucjp_win
-};
-
-const mbfl_encoding mbfl_encoding_eucjp_win = {
- mbfl_no_encoding_eucjp_win,
- "eucJP-win",
- "EUC-JP",
- (const char *(*)[])&mbfl_encoding_eucjp_win_aliases,
- mblen_table_eucjp,
- MBFL_ENCTYPE_MBCS
-};
-
-const struct mbfl_convert_vtbl vtbl_eucjpwin_wchar = {
- mbfl_no_encoding_eucjp_win,
- mbfl_no_encoding_wchar,
- mbfl_filt_conv_common_ctor,
- mbfl_filt_conv_common_dtor,
- mbfl_filt_conv_eucjpwin_wchar,
- mbfl_filt_conv_common_flush
-};
-
-const struct mbfl_convert_vtbl vtbl_wchar_eucjpwin = {
- mbfl_no_encoding_wchar,
- mbfl_no_encoding_eucjp_win,
- mbfl_filt_conv_common_ctor,
- mbfl_filt_conv_common_dtor,
- mbfl_filt_conv_wchar_eucjpwin,
- mbfl_filt_conv_common_flush
-};
-
-#define CK(statement) do { if ((statement) < 0) return (-1); } while (0)
-
-/*
- * eucJP-win => wchar
- */
-int
-mbfl_filt_conv_eucjpwin_wchar(int c, mbfl_convert_filter *filter)
-{
- int c1, s, w, n;
-
- switch (filter->status) {
- case 0:
- if (c >= 0 && c < 0x80) { /* latin */
- CK((*filter->output_function)(c, filter->data));
- } else if (c > 0xa0 && c < 0xff) { /* CP932 first char */
- filter->status = 1;
- filter->cache = c;
- } else if (c == 0x8e) { /* kana first char */
- filter->status = 2;
- } else if (c == 0x8f) { /* X 0212 first char */
- filter->status = 3;
- } else {
- w = c & MBFL_WCSGROUP_MASK;
- w |= MBFL_WCSGROUP_THROUGH;
- CK((*filter->output_function)(w, filter->data));
- }
- break;
-
- case 1: /* got first half */
- filter->status = 0;
- c1 = filter->cache;
- if (c > 0xa0 && c < 0xff) {
- w = 0;
- s = (c1 - 0xa1)*94 + c - 0xa1;
- if (s <= 137) {
- if (s == 31) {
- w = 0xff3c; /* FULLWIDTH REVERSE SOLIDUS */
- } else if (s == 32) {
- w = 0xff5e; /* FULLWIDTH TILDE */
- } else if (s == 33) {
- w = 0x2225; /* PARALLEL TO */
- } else if (s == 60) {
- w = 0xff0d; /* FULLWIDTH HYPHEN-MINUS */
- } else if (s == 80) {
- w = 0xffe0; /* FULLWIDTH CENT SIGN */
- } else if (s == 81) {
- w = 0xffe1; /* FULLWIDTH POUND SIGN */
- } else if (s == 137) {
- w = 0xffe2; /* FULLWIDTH NOT SIGN */
- }
- }
- if (w == 0) {
- if (s >= cp932ext1_ucs_table_min && s < cp932ext1_ucs_table_max) { /* vendor ext1 (13ku) */
- w = cp932ext1_ucs_table[s - cp932ext1_ucs_table_min];
- } else if (s >= 0 && s < jisx0208_ucs_table_size) { /* X 0208 */
- w = jisx0208_ucs_table[s];
- } else if (s >= (84*94)) { /* user (85ku - 94ku) */
- w = s - (84*94) + 0xe000;
- }
- }
- if (w <= 0) {
- w = ((c1 & 0x7f) << 8) | (c & 0x7f);
- w &= MBFL_WCSPLANE_MASK;
- w |= MBFL_WCSPLANE_WINCP932;
- }
- CK((*filter->output_function)(w, filter->data));
- } else if ((c >= 0 && c < 0x21) || c == 0x7f) { /* CTLs */
- CK((*filter->output_function)(c, filter->data));
- } else {
- w = (c1 << 8) | c;
- w &= MBFL_WCSGROUP_MASK;
- w |= MBFL_WCSGROUP_THROUGH;
- CK((*filter->output_function)(w, filter->data));
- }
- break;
-
- case 2: /* got 0x8e, X0201 kana */
- filter->status = 0;
- if (c > 0xa0 && c < 0xe0) {
- w = 0xfec0 + c;
- CK((*filter->output_function)(w, filter->data));
- } else if ((c >= 0 && c < 0x21) || c == 0x7f) { /* CTLs */
- CK((*filter->output_function)(c, filter->data));
- } else {
- w = 0x8e00 | c;
- w &= MBFL_WCSGROUP_MASK;
- w |= MBFL_WCSGROUP_THROUGH;
- CK((*filter->output_function)(w, filter->data));
- }
- break;
-
- case 3: /* got 0x8f, X 0212 first char */
- if ((c >= 0 && c < 0x21) || c == 0x7f) { /* CTLs */
- CK((*filter->output_function)(c, filter->data));
- filter->status = 0;
- } else {
- filter->status++;
- filter->cache = c;
- }
- break;
- case 4: /* got 0x8f, X 0212 second char */
- filter->status = 0;
- c1 = filter->cache;
- if (c1 > 0xa0 && c1 < 0xff && c > 0xa0 && c < 0xff) {
- s = (c1 - 0xa1)*94 + c - 0xa1;
- if (s >= 0 && s < jisx0212_ucs_table_size) {
- w = jisx0212_ucs_table[s];
- } else if (s >= (82*94) && s < (84*94)) { /* vender ext3 (83ku - 84ku) <-> CP932 (115ku -120ku) */
- s = (c1<< 8) | c;
- w = 0;
- n = 0;
- while (n < cp932ext3_eucjp_table_size) {
- if (s == cp932ext3_eucjp_table[n]) {
- if (n < (cp932ext3_ucs_table_max - cp932ext3_ucs_table_min)) {
- w = cp932ext3_ucs_table[n];
- }
- break;
- }
- n++;
- }
- } else if (s >= (84*94)) { /* user (85ku - 94ku) */
- w = s - (84*94) + (0xe000 + (94*10));
- } else {
- w = 0;
- }
- if (w <= 0) {
- w = ((c1 & 0x7f) << 8) | (c & 0x7f);
- w &= MBFL_WCSPLANE_MASK;
- w |= MBFL_WCSPLANE_JIS0212;
- }
- CK((*filter->output_function)(w, filter->data));
- } else if ((c >= 0 && c < 0x21) || c == 0x7f) { /* CTLs */
- CK((*filter->output_function)(c, filter->data));
- } else {
- w = (c1 << 8) | c | 0x8f0000;
- w &= MBFL_WCSGROUP_MASK;
- w |= MBFL_WCSGROUP_THROUGH;
- CK((*filter->output_function)(w, filter->data));
- }
- break;
-
- default:
- filter->status = 0;
- break;
- }
-
- return c;
-}
-
-/*
- * wchar => eucJP-win
- */
-int
-mbfl_filt_conv_wchar_eucjpwin(int c, mbfl_convert_filter *filter)
-{
- int c1, c2, s1;
-
- s1 = 0;
- if (c >= ucs_a1_jis_table_min && c < ucs_a1_jis_table_max) {
- s1 = ucs_a1_jis_table[c - ucs_a1_jis_table_min];
- } else if (c >= ucs_a2_jis_table_min && c < ucs_a2_jis_table_max) {
- s1 = ucs_a2_jis_table[c - ucs_a2_jis_table_min];
- } else if (c >= ucs_i_jis_table_min && c < ucs_i_jis_table_max) {
- s1 = ucs_i_jis_table[c - ucs_i_jis_table_min];
- } else if (c >= ucs_r_jis_table_min && c < ucs_r_jis_table_max) {
- s1 = ucs_r_jis_table[c - ucs_r_jis_table_min];
- } else if (c >= 0xe000 && c < (0xe000 + 10*94)) { /* user (X0208 85ku - 94ku) */
- s1 = c - 0xe000;
- c1 = s1/94 + 0x75;
- c2 = s1%94 + 0x21;
- s1 = (c1 << 8) | c2;
- } else if (c >= (0xe000 + 10*94) && c < (0xe000 + 20*94)) { /* user (X0212 85ku - 94ku) */
- s1 = c - (0xe000 + 10*94);
- c1 = s1/94 + 0xf5;
- c2 = s1%94 + 0xa1;
- s1 = (c1 << 8) | c2;
- }
- if (s1 <= 0) {
- c1 = c & ~MBFL_WCSPLANE_MASK;
- if (c1 == MBFL_WCSPLANE_WINCP932) {
- s1 = c & MBFL_WCSPLANE_MASK;
- if (s1 >= ((85 + 0x20) << 8)) { /* 85ku - 120ku */
- s1 = -1;
- }
- } else if (c1 == MBFL_WCSPLANE_JIS0208) {
- s1 = c & MBFL_WCSPLANE_MASK;
- if (s1 >= ((85 + 0x20) << 8)) { /* 85ku - 94ku */
- s1 = -1;
- }
- } else if (c1 == MBFL_WCSPLANE_JIS0212) {
- s1 = c & MBFL_WCSPLANE_MASK;
- if (s1 >= ((83 + 0x20) << 8)) { /* 83ku - 94ku */
- s1 = -1;
- } else {
- s1 |= 0x8080;
- }
- } else if (c == 0xa5) { /* YEN SIGN */
- s1 = 0x216f; /* FULLWIDTH YEN SIGN */
- } else if (c == 0x203e) { /* OVER LINE */
- s1 = 0x2131; /* FULLWIDTH MACRON */
- } else if (c == 0xff3c) { /* FULLWIDTH REVERSE SOLIDUS */
- s1 = 0x2140;
- } else if (c == 0xff5e) { /* FULLWIDTH TILDE */
- s1 = 0x2141;
- } else if (c == 0x2225) { /* PARALLEL TO */
- s1 = 0x2142;
- } else if (c == 0xff0d) { /* FULLWIDTH HYPHEN-MINUS */
- s1 = 0x215d;
- } else if (c == 0xffe0) { /* FULLWIDTH CENT SIGN */
- s1 = 0x2171;
- } else if (c == 0xffe1) { /* FULLWIDTH POUND SIGN */
- s1 = 0x2172;
- } else if (c == 0xffe2) { /* FULLWIDTH NOT SIGN */
- s1 = 0x224c;
- } else {
- s1 = -1;
- c1 = 0;
- c2 = cp932ext1_ucs_table_max - cp932ext1_ucs_table_min;
- while (c1 < c2) { /* CP932 vendor ext1 (13ku) */
- if (c == cp932ext1_ucs_table[c1]) {
- s1 = ((c1/94 + 0x2d) << 8) + (c1%94 + 0x21);
- break;
- }
- c1++;
- }
- if (s1 < 0) {
- c1 = 0;
- c2 = cp932ext3_ucs_table_max - cp932ext3_ucs_table_min;
- while (c1 < c2) { /* CP932 vendor ext3 (115ku - 119ku) */
- if (c == cp932ext3_ucs_table[c1]) {
- if (c1 < cp932ext3_eucjp_table_size) {
- s1 = cp932ext3_eucjp_table[c1];
- }
- break;
- }
- c1++;
- }
- }
- }
- if (c == 0) {
- s1 = 0;
- } else if (s1 <= 0) {
- s1 = -1;
- }
- }
-
- if (s1 >= 0) {
- if (s1 < 0x80) { /* latin */
- CK((*filter->output_function)(s1, filter->data));
- } else if (s1 < 0x100) { /* kana */
- CK((*filter->output_function)(0x8e, filter->data));
- CK((*filter->output_function)(s1, filter->data));
- } else if (s1 < 0x8080) { /* X 0208 */
- CK((*filter->output_function)(((s1 >> 8) & 0xff) | 0x80, filter->data));
- CK((*filter->output_function)((s1 & 0xff) | 0x80, filter->data));
- } else { /* X 0212 */
- CK((*filter->output_function)(0x8f, filter->data));
- CK((*filter->output_function)(((s1 >> 8) & 0xff) | 0x80, filter->data));
- CK((*filter->output_function)((s1 & 0xff) | 0x80, filter->data));
- }
- } else {
- if (filter->illegal_mode != MBFL_OUTPUTFILTER_ILLEGAL_MODE_NONE) {
- CK(mbfl_filt_conv_illegal_output(c, filter));
- }
- }
-
- return c;
-}
-
-static int mbfl_filt_ident_eucjp_win(int c, mbfl_identify_filter *filter)
-{
- switch (filter->status) {
- case 0: /* latin */
- if (c >= 0 && c < 0x80) { /* ok */
- ;
- } else if (c > 0xa0 && c < 0xff) { /* kanji first char */
- filter->status = 1;
- } else if (c == 0x8e) { /* kana first char */
- filter->status = 2;
- } else if (c == 0x8f) { /* X 0212 first char */
- filter->status = 3;
- } else { /* bad */
- filter->flag = 1;
- }
- break;
-
- case 1: /* got first half */
- if (c < 0xa1 || c > 0xfe) { /* bad */
- filter->flag = 1;
- }
- filter->status = 0;
- break;
-
- case 2: /* got 0x8e */
- if (c < 0xa1 || c > 0xdf) { /* bad */
- filter->flag = 1;
- }
- filter->status = 0;
- break;
-
- case 3: /* got 0x8f */
- if (c < 0xa1 || c > 0xfe) { /* bad */
- filter->flag = 1;
- }
- filter->status++;
- break;
- case 4: /* got 0x8f */
- if (c < 0xa1 || c > 0xfe) { /* bad */
- filter->flag = 1;
- }
- filter->status = 0;
- break;
-
- default:
- filter->status = 0;
- break;
- }
-
- return c;
-}
-
-
diff --git a/ext/mbstring/libmbfl/filters/mbfilter_euc_jp_win.h b/ext/mbstring/libmbfl/filters/mbfilter_euc_jp_win.h
deleted file mode 100644
index 8b79a7241f..0000000000
--- a/ext/mbstring/libmbfl/filters/mbfilter_euc_jp_win.h
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * "streamable kanji code filter and converter"
- * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved.
- *
- * LICENSE NOTICES
- *
- * This file is part of "streamable kanji code filter and converter",
- * which is distributed under the terms of GNU Lesser General Public
- * License (version 2) as published by the Free Software Foundation.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with "streamable kanji code filter and converter";
- * if not, write to the Free Software Foundation, Inc., 59 Temple Place,
- * Suite 330, Boston, MA 02111-1307 USA
- *
- * The author of this file:
- *
- */
-/*
- * The source code included in this files was separated from mbfilter_ja.h
- * by moriyoshi koizumi <moriyoshi@php.net> on 4 dec 2002.
- *
- */
-
-#ifndef MBFL_MBFILTER_EUC_JP_WIN_H
-#define MBFL_MBFILTER_EUC_JP_WIN_H
-
-#include "mbfilter.h"
-
-extern const mbfl_encoding mbfl_encoding_eucjp_win;
-extern const struct mbfl_identify_vtbl vtbl_identify_eucjpwin;
-extern const struct mbfl_convert_vtbl vtbl_eucjpwin_wchar;
-extern const struct mbfl_convert_vtbl vtbl_wchar_eucjpwin;
-
-int mbfl_filt_conv_eucjpwin_wchar(int c, mbfl_convert_filter *filter);
-int mbfl_filt_conv_wchar_eucjpwin(int c, mbfl_convert_filter *filter);
-
-#endif /* MBFL_MBFILTER_EUC_JP_WIN_H */
diff --git a/ext/mbstring/libmbfl/filters/mbfilter_euc_kr.c b/ext/mbstring/libmbfl/filters/mbfilter_euc_kr.c
deleted file mode 100644
index 211a3ad5ad..0000000000
--- a/ext/mbstring/libmbfl/filters/mbfilter_euc_kr.c
+++ /dev/null
@@ -1,256 +0,0 @@
-/*
- * "streamable kanji code filter and converter"
- * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved.
- *
- * LICENSE NOTICES
- *
- * This file is part of "streamable kanji code filter and converter",
- * which is distributed under the terms of GNU Lesser General Public
- * License (version 2) as published by the Free Software Foundation.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with "streamable kanji code filter and converter";
- * if not, write to the Free Software Foundation, Inc., 59 Temple Place,
- * Suite 330, Boston, MA 02111-1307 USA
- *
- * The author of this file:
- *
- */
-/*
- * The source code included in this files was separated from mbfilter_kr.c
- * by moriyoshi koizumi <moriyoshi@php.net> on 4 dec 2002.
- *
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "mbfilter.h"
-#include "mbfilter_euc_kr.h"
-#include "unicode_table_uhc.h"
-
-static int mbfl_filt_ident_euckr(int c, mbfl_identify_filter *filter);
-
-static const unsigned char mblen_table_euckr[] = { /* 0xA1-0xFE */
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1
-};
-
-static const char *mbfl_encoding_euc_kr_aliases[] = {"EUC_KR", "eucKR", "x-euc-kr", NULL};
-
-const mbfl_encoding mbfl_encoding_euc_kr = {
- mbfl_no_encoding_euc_kr,
- "EUC-KR",
- "EUC-KR",
- (const char *(*)[])&mbfl_encoding_euc_kr_aliases,
- mblen_table_euckr,
- MBFL_ENCTYPE_MBCS
-};
-
-const struct mbfl_identify_vtbl vtbl_identify_euckr = {
- mbfl_no_encoding_euc_kr,
- mbfl_filt_ident_common_ctor,
- mbfl_filt_ident_common_dtor,
- mbfl_filt_ident_euckr
-};
-
-const struct mbfl_convert_vtbl vtbl_euckr_wchar = {
- mbfl_no_encoding_euc_kr,
- mbfl_no_encoding_wchar,
- mbfl_filt_conv_common_ctor,
- mbfl_filt_conv_common_dtor,
- mbfl_filt_conv_euckr_wchar,
- mbfl_filt_conv_common_flush
-};
-
-const struct mbfl_convert_vtbl vtbl_wchar_euckr = {
- mbfl_no_encoding_wchar,
- mbfl_no_encoding_euc_kr,
- mbfl_filt_conv_common_ctor,
- mbfl_filt_conv_common_dtor,
- mbfl_filt_conv_wchar_euckr,
- mbfl_filt_conv_common_flush
-};
-
-
-#define CK(statement) do { if ((statement) < 0) return (-1); } while (0)
-
-/*
- * EUC-KR => wchar
- */
-int
-mbfl_filt_conv_euckr_wchar(int c, mbfl_convert_filter *filter)
-{
- int c1, w, flag;
-
- switch (filter->status) {
- case 0:
- if (c >= 0 && c < 0x80) { /* latin */
- CK((*filter->output_function)(c, filter->data));
- } else if (c > 0xa0 && c < 0xff && c != 0xc9) { /* dbcs lead byte */
- filter->status = 1;
- filter->cache = c;
- } else {
- w = c & MBFL_WCSGROUP_MASK;
- w |= MBFL_WCSGROUP_THROUGH;
- CK((*filter->output_function)(w, filter->data));
- }
- break;
-
- case 1: /* dbcs second byte */
- filter->status = 0;
- c1 = filter->cache;
- flag = 0;
- if (c1 >= 0xa1 && c1 <= 0xc6) {
- flag = 1;
- } else if (c1 >= 0xc7 && c1 <= 0xfe && c1 != 0xc9) {
- flag = 2;
- }
- if (flag > 0 && c >= 0xa1 && c <= 0xfe) {
- if (flag == 1){ /* 1st: 0xa1..0xc6, 2nd: 0x41..0x7a, 0x81..0xfe */
- w = (c1 - 0xa1)*190 + (c - 0x41);
- if (w >= 0 && w < uhc2_ucs_table_size) {
- w = uhc2_ucs_table[w];
- } else {
- w = 0;
- }
- } else { /* 1st: 0xc7..0xc8,0xca..0xfe, 2nd: 0xa1..0xfe */
- w = (c1 - 0xc7)*94 + (c - 0xa1);
- if (w >= 0 && w < uhc3_ucs_table_size) {
- w = uhc3_ucs_table[w];
- } else {
- w = 0;
- }
- }
-
- if (w <= 0) {
- w = (c1 << 8) | c;
- w &= MBFL_WCSPLANE_MASK;
- w |= MBFL_WCSPLANE_KSC5601;
- }
- CK((*filter->output_function)(w, filter->data));
- } else if ((c >= 0 && c < 0x21) || c == 0x7f) { /* CTLs */
- CK((*filter->output_function)(c, filter->data));
- } else {
- w = (c1 << 8) | c;
- w &= MBFL_WCSGROUP_MASK;
- w |= MBFL_WCSGROUP_THROUGH;
- CK((*filter->output_function)(w, filter->data));
- }
- break;
-
- default:
- filter->status = 0;
- break;
- }
-
- return c;
-}
-
-/*
- * wchar => EUC-KR
- */
-int
-mbfl_filt_conv_wchar_euckr(int c, mbfl_convert_filter *filter)
-{
- int c1, c2, s;
-
- s = 0;
-
- if (c >= ucs_a1_uhc_table_min && c < ucs_a1_uhc_table_max) {
- s = ucs_a1_uhc_table[c - ucs_a1_uhc_table_min];
- } else if (c >= ucs_a2_uhc_table_min && c < ucs_a2_uhc_table_max) {
- s = ucs_a2_uhc_table[c - ucs_a2_uhc_table_min];
- } else if (c >= ucs_a3_uhc_table_min && c < ucs_a3_uhc_table_max) {
- s = ucs_a3_uhc_table[c - ucs_a3_uhc_table_min];
- } else if (c >= ucs_i_uhc_table_min && c < ucs_i_uhc_table_max) {
- s = ucs_i_uhc_table[c - ucs_i_uhc_table_min];
- } else if (c >= ucs_s_uhc_table_min && c < ucs_s_uhc_table_max) {
- s = ucs_s_uhc_table[c - ucs_s_uhc_table_min];
- } else if (c >= ucs_r1_uhc_table_min && c < ucs_r1_uhc_table_max) {
- s = ucs_r1_uhc_table[c - ucs_r1_uhc_table_min];
- } else if (c >= ucs_r2_uhc_table_min && c < ucs_r2_uhc_table_max) {
- s = ucs_r2_uhc_table[c - ucs_r2_uhc_table_min];
- }
-
- c1 = (s >> 8) & 0xff;
- c2 = s & 0xff;
- /* exclude UHC extension area */
- if (c1 < 0xa1 || c2 < 0xa1){
- s = c;
- }
-
- if (s <= 0) {
- c1 = c & ~MBFL_WCSPLANE_MASK;
- if (c1 == MBFL_WCSPLANE_KSC5601) {
- s = c & MBFL_WCSPLANE_MASK;
- }
- if (c == 0) {
- s = 0;
- } else if (s <= 0) {
- s = -1;
- }
- }
- if (s >= 0) {
- if (s < 0x80) { /* latin */
- CK((*filter->output_function)(s, filter->data));
- } else {
- CK((*filter->output_function)((s >> 8) & 0xff, filter->data));
- CK((*filter->output_function)(s & 0xff, filter->data));
- }
- } else {
- if (filter->illegal_mode != MBFL_OUTPUTFILTER_ILLEGAL_MODE_NONE) {
- CK(mbfl_filt_conv_illegal_output(c, filter));
- }
- }
-
- return c;
-}
-
-static int mbfl_filt_ident_euckr(int c, mbfl_identify_filter *filter)
-{
- switch (filter->status) {
- case 0: /* latin */
- if (c >= 0 && c < 0x80) { /* ok */
- ;
- } else if (c > 0xa0 && c < 0xff) { /* DBCS lead byte */
- filter->status = 1;
- } else { /* bad */
- filter->flag = 1;
- }
- break;
-
- case 1: /* got lead byte */
- if (c < 0xa1 || c > 0xfe) { /* bad */
- filter->flag = 1;
- }
- filter->status = 0;
- break;
-
- default:
- filter->status = 0;
- break;
- }
-
- return c;
-}
diff --git a/ext/mbstring/libmbfl/filters/mbfilter_euc_kr.h b/ext/mbstring/libmbfl/filters/mbfilter_euc_kr.h
deleted file mode 100644
index 5ccbe79445..0000000000
--- a/ext/mbstring/libmbfl/filters/mbfilter_euc_kr.h
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * "streamable kanji code filter and converter"
- * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved.
- *
- * LICENSE NOTICES
- *
- * This file is part of "streamable kanji code filter and converter",
- * which is distributed under the terms of GNU Lesser General Public
- * License (version 2) as published by the Free Software Foundation.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with "streamable kanji code filter and converter";
- * if not, write to the Free Software Foundation, Inc., 59 Temple Place,
- * Suite 330, Boston, MA 02111-1307 USA
- *
- * The author of this file:
- *
- */
-/*
- * The source code included in this files was separated from mbfilter_kr.h
- * by moriyoshi koizumi <moriyoshi@php.net> on 4 dec 2002.
- *
- */
-
-#ifndef MBFL_MBFILTER_EUC_KR_H
-#define MBFL_MBFILTER_EUC_KR_H
-
-#include "mbfilter.h"
-
-extern const mbfl_encoding mbfl_encoding_euc_kr;
-extern const struct mbfl_identify_vtbl vtbl_identify_euckr;
-extern const struct mbfl_convert_vtbl vtbl_euckr_wchar;
-extern const struct mbfl_convert_vtbl vtbl_wchar_euckr;
-
-int mbfl_filt_conv_euckr_wchar(int c, mbfl_convert_filter *filter);
-int mbfl_filt_conv_wchar_euckr(int c, mbfl_convert_filter *filter);
-
-#endif /* MBFL_MBFILTER_EUC_KR_H */
diff --git a/ext/mbstring/libmbfl/filters/mbfilter_euc_tw.c b/ext/mbstring/libmbfl/filters/mbfilter_euc_tw.c
deleted file mode 100644
index 95665d0562..0000000000
--- a/ext/mbstring/libmbfl/filters/mbfilter_euc_tw.c
+++ /dev/null
@@ -1,329 +0,0 @@
-/*
- * "streamable kanji code filter and converter"
- * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved.
- *
- * LICENSE NOTICES
- *
- * This file is part of "streamable kanji code filter and converter",
- * which is distributed under the terms of GNU Lesser General Public
- * License (version 2) as published by the Free Software Foundation.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with "streamable kanji code filter and converter";
- * if not, write to the Free Software Foundation, Inc., 59 Temple Place,
- * Suite 330, Boston, MA 02111-1307 USA
- *
- * The author of this file: Rui Hirokawa <hirokawa@php.net>
- *
- */
-/*
- * The source code included in this files was separated from mbfilter_tw.c
- * by moriyoshi koizumi <moriyoshi@php.net> on 4 dec 2002.
- *
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "mbfilter.h"
-#include "mbfilter_euc_tw.h"
-
-#include "unicode_table_cns11643.h"
-
-static int mbfl_filt_ident_euctw(int c, mbfl_identify_filter *filter);
-
-static const unsigned char mblen_table_euctw[] = { /* 0xA1-0xFE */
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1
-};
-
-
-static const char *mbfl_encoding_euc_tw_aliases[] = {"EUC_TW", "eucTW", "x-euc-tw", NULL};
-
-const mbfl_encoding mbfl_encoding_euc_tw = {
- mbfl_no_encoding_euc_tw,
- "EUC-TW",
- "EUC-TW",
- (const char *(*)[])&mbfl_encoding_euc_tw_aliases,
- mblen_table_euctw,
- MBFL_ENCTYPE_MBCS
-};
-
-const struct mbfl_identify_vtbl vtbl_identify_euctw = {
- mbfl_no_encoding_euc_tw,
- mbfl_filt_ident_common_ctor,
- mbfl_filt_ident_common_dtor,
- mbfl_filt_ident_euctw
-};
-
-const struct mbfl_convert_vtbl vtbl_euctw_wchar = {
- mbfl_no_encoding_euc_tw,
- mbfl_no_encoding_wchar,
- mbfl_filt_conv_common_ctor,
- mbfl_filt_conv_common_dtor,
- mbfl_filt_conv_euctw_wchar,
- mbfl_filt_conv_common_flush
-};
-
-const struct mbfl_convert_vtbl vtbl_wchar_euctw = {
- mbfl_no_encoding_wchar,
- mbfl_no_encoding_euc_tw,
- mbfl_filt_conv_common_ctor,
- mbfl_filt_conv_common_dtor,
- mbfl_filt_conv_wchar_euctw,
- mbfl_filt_conv_common_flush
-};
-
-#define CK(statement) do { if ((statement) < 0) return (-1); } while (0)
-
-/*
- * EUC-TW => wchar
- */
-int
-mbfl_filt_conv_euctw_wchar(int c, mbfl_convert_filter *filter)
-{
- int c1, s, w, plane;
-
- switch (filter->status) {
- case 0:
- if (c >= 0 && c < 0x80) { /* latin */
- CK((*filter->output_function)(c, filter->data));
- } else if (c > 0xa0 && c < 0xff) { /* dbcs first byte */
- filter->status = 1;
- filter->cache = c;
- } else if (c == 0x8e) { /* mbcs first byte */
- filter->status = 2;
- filter->cache = c;
- } else {
- w = c & MBFL_WCSGROUP_MASK;
- w |= MBFL_WCSGROUP_THROUGH;
- CK((*filter->output_function)(w, filter->data));
- }
- break;
-
- case 1: /* mbcs second byte */
- filter->status = 0;
- c1 = filter->cache;
- if (c > 0xa0 && c < 0xff) {
- w = (c1 - 0xa1)*94 + (c - 0xa1);
- if (w >= 0 && w < cns11643_1_ucs_table_size) {
- w = cns11643_1_ucs_table[w];
- } else {
- w = 0;
- }
- if (w <= 0) {
- w = (c1 << 8) | c;
- w &= MBFL_WCSPLANE_MASK;
- w |= MBFL_WCSPLANE_CNS11643;
- }
- CK((*filter->output_function)(w, filter->data));
- } else if ((c >= 0 && c < 0x21) || c == 0x7f) { /* CTLs */
- CK((*filter->output_function)(c, filter->data));
- } else {
- w = (c1 << 8) | c;
- w &= MBFL_WCSGROUP_MASK;
- w |= MBFL_WCSGROUP_THROUGH;
- CK((*filter->output_function)(w, filter->data));
- }
- break;
-
- case 2: /* got 0x8e, first char */
- c1 = filter->cache;
- if ((c >= 0 && c < 0x21) || c == 0x7f) { /* CTLs */
- CK((*filter->output_function)(c, filter->data));
- filter->status = 0;
- } else if (c > 0xa0 && c < 0xaf) {
- filter->status = 3;
- filter->cache = c - 0xa1;
- } else {
- w = (c1 << 8) | c;
- w &= MBFL_WCSGROUP_MASK;
- w |= MBFL_WCSGROUP_THROUGH;
- CK((*filter->output_function)(w, filter->data));
- }
- break;
-
- case 3: /* got 0x8e, third char */
- filter->status = 0;
- c1 = filter->cache;
- if ((c >= 0 && c < 0x21) || c == 0x7f) { /* CTLs */
- CK((*filter->output_function)(c, filter->data));
- filter->status = 0;
- } else if (c > 0xa0 && c < 0xff) {
- filter->status = 4;
- filter->cache = (c1 << 8) + c - 0xa1;
- } else {
- w = (c1 << 8) | c;
- w &= MBFL_WCSGROUP_MASK;
- w |= MBFL_WCSGROUP_THROUGH;
- CK((*filter->output_function)(w, filter->data));
- }
- break;
-
- case 4: /* mbcs fourth char */
- filter->status = 0;
- c1 = filter->cache;
- if (c1 >= 0x100 && c1 <= 0xdff && c > 0xa0 && c < 0xff) {
- plane = (c1 & 0xf00) >> 8;
- s = (c1 & 0xff)*94 + c - 0xa1;
- w = 0;
- if (s >= 0) {
- if (plane == 1 && s < cns11643_2_ucs_table_size) {
- w = cns11643_2_ucs_table[s];
- }
- if (plane == 13 && s < cns11643_14_ucs_table_size) {
- w = cns11643_14_ucs_table[s];
- }
- }
- if (w <= 0) {
- w = ((c1 & 0x7f) << 8) | (c & 0x7f);
- w &= MBFL_WCSPLANE_MASK;
- w |= MBFL_WCSPLANE_CNS11643;
- }
- CK((*filter->output_function)(w, filter->data));
- } else if ((c >= 0 && c < 0x21) || c == 0x7f) { /* CTLs */
- CK((*filter->output_function)(c, filter->data));
- } else {
- w = (c1 << 8) | c | 0x8e0000;
- w &= MBFL_WCSGROUP_MASK;
- w |= MBFL_WCSGROUP_THROUGH;
- CK((*filter->output_function)(w, filter->data));
- }
- break;
-
- default:
- filter->status = 0;
- break;
- }
-
- return c;
-}
-
-/*
- * wchar => EUC-TW
- */
-int
-mbfl_filt_conv_wchar_euctw(int c, mbfl_convert_filter *filter)
-{
- int c1, s, plane;
-
- s = 0;
- if (c >= ucs_a1_cns11643_table_min && c < ucs_a1_cns11643_table_max) {
- s = ucs_a1_cns11643_table[c - ucs_a1_cns11643_table_min];
- } else if (c >= ucs_a2_cns11643_table_min && c < ucs_a2_cns11643_table_max) {
- s = ucs_a2_cns11643_table[c - ucs_a2_cns11643_table_min];
- } else if (c >= ucs_a3_cns11643_table_min && c < ucs_a3_cns11643_table_max) {
- s = ucs_a3_cns11643_table[c - ucs_a3_cns11643_table_min];
- } else if (c >= ucs_i_cns11643_table_min && c < ucs_i_cns11643_table_max) {
- s = ucs_i_cns11643_table[c - ucs_i_cns11643_table_min];
- } else if (c >= ucs_r_cns11643_table_min && c < ucs_r_cns11643_table_max) {
- s = ucs_r_cns11643_table[c - ucs_r_cns11643_table_min];
- }
- if (s <= 0) {
- c1 = c & ~MBFL_WCSPLANE_MASK;
- if (c1 == MBFL_WCSPLANE_CNS11643) {
- s = c & MBFL_WCSPLANE_MASK;
- }
- if (c == 0) {
- s = 0;
- } else if (s <= 0) {
- s = -1;
- }
- }
- if (s >= 0) {
- plane = (s & 0x1f0000) >> 16;
- if (plane <= 1){
- if (s < 0x80) { /* latin */
- CK((*filter->output_function)(s, filter->data));
- } else {
- s = (s & 0xffff) | 0x8080;
- CK((*filter->output_function)((s >> 8) & 0xff, filter->data));
- CK((*filter->output_function)(s & 0xff, filter->data));
- }
- } else {
- s = (0x8ea00000 + (plane << 16)) | ((s & 0xffff) | 0x8080);
- CK((*filter->output_function)(0x8e , filter->data));
- CK((*filter->output_function)((s >> 16) & 0xff, filter->data));
- CK((*filter->output_function)((s >> 8) & 0xff, filter->data));
- CK((*filter->output_function)(s & 0xff, filter->data));
- }
- } else {
- if (filter->illegal_mode != MBFL_OUTPUTFILTER_ILLEGAL_MODE_NONE) {
- CK(mbfl_filt_conv_illegal_output(c, filter));
- }
- }
- return c;
-}
-
-static int mbfl_filt_ident_euctw(int c, mbfl_identify_filter *filter)
-{
- switch (filter->status) {
- case 0: /* latin */
- if (c >= 0 && c < 0x80) { /* ok */
- ;
- } else if (c > 0xa0 && c < 0xff) { /* DBCS lead byte */
- filter->status = 1;
- } else if (c == 0x8e) { /* DBCS lead byte */
- filter->status = 2;
- } else { /* bad */
- filter->flag = 1;
- }
- break;
-
- case 1: /* got lead byte */
- if (c < 0xa1 || c > 0xfe) { /* bad */
- filter->flag = 1;
- }
- filter->status = 0;
- break;
-
- case 2: /* got lead byte */
- if (c >= 0xa1 && c < 0xaf) { /* ok */
- filter->status = 3;
- } else {
- filter->flag = 1; /* bad */
- }
- break;
-
- case 3: /* got lead byte */
- if (c < 0xa1 || c > 0xfe) { /* bad */
- filter->flag = 1;
- }
- filter->status = 4;
- break;
-
- case 4: /* got lead byte */
- if (c < 0xa1 || c > 0xfe) { /* bad */
- filter->flag = 1;
- }
- filter->status = 0;
- break;
-
- default:
- filter->status = 0;
- break;
- }
-
- return c;
-}
-
diff --git a/ext/mbstring/libmbfl/filters/mbfilter_euc_tw.h b/ext/mbstring/libmbfl/filters/mbfilter_euc_tw.h
deleted file mode 100644
index 64071809d0..0000000000
--- a/ext/mbstring/libmbfl/filters/mbfilter_euc_tw.h
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * "streamable kanji code filter and converter"
- * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved.
- *
- * LICENSE NOTICES
- *
- * This file is part of "streamable kanji code filter and converter",
- * which is distributed under the terms of GNU Lesser General Public
- * License (version 2) as published by the Free Software Foundation.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with "streamable kanji code filter and converter";
- * if not, write to the Free Software Foundation, Inc., 59 Temple Place,
- * Suite 330, Boston, MA 02111-1307 USA
- *
- * The author of this file: Rui Hirokawa <hirokawa@php.net>
- *
- */
-/*
- * The source code included in this files was separated from mbfilter_tw.h
- * by moriyoshi koizumi <moriyoshi@php.net> on 4 dec 2002.
- *
- */
-
-#ifndef MBFL_MBFILTER_EUC_TW_H
-#define MBFL_MBFILTER_EUC_TW_H
-
-#include "mbfilter.h"
-
-extern const mbfl_encoding mbfl_encoding_euc_tw;
-extern const struct mbfl_identify_vtbl vtbl_identify_euctw;
-extern const struct mbfl_convert_vtbl vtbl_euctw_wchar;
-extern const struct mbfl_convert_vtbl vtbl_wchar_euctw;
-
-int mbfl_filt_conv_euctw_wchar(int c, mbfl_convert_filter *filter);
-int mbfl_filt_conv_wchar_euctw(int c, mbfl_convert_filter *filter);
-
-#endif /* MBFL_MBFILTER_EUC_TW_H */
diff --git a/ext/mbstring/libmbfl/filters/mbfilter_htmlent.c b/ext/mbstring/libmbfl/filters/mbfilter_htmlent.c
deleted file mode 100644
index f7e7896be6..0000000000
--- a/ext/mbstring/libmbfl/filters/mbfilter_htmlent.c
+++ /dev/null
@@ -1,260 +0,0 @@
-/*
- * "streamable kanji code filter and converter"
- * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved.
- *
- * LICENSE NOTICES
- *
- * This file is part of "streamable kanji code filter and converter",
- * which is distributed under the terms of GNU Lesser General Public
- * License (version 2) as published by the Free Software Foundation.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with "streamable kanji code filter and converter";
- * if not, write to the Free Software Foundation, Inc., 59 Temple Place,
- * Suite 330, Boston, MA 02111-1307 USA
- *
- * The author of this part: Marcus Boerger <helly@php.net>
- *
- */
-/*
- * The source code included in this files was separated from mbfilter.c
- * by moriyoshi koizumi <moriyoshi@php.net> on 4 dec 2002.
- *
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#ifdef HAVE_STRING_H
-#include <string.h>
-#endif
-
-#ifdef HAVE_STRINGS_H
-#include <strings.h>
-#endif
-
-#include "mbfilter.h"
-#include "mbfilter_htmlent.h"
-#include "html_entities.h"
-
-static const int htmlentitifieds[256] = {
- 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, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 2, 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,
- 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, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
-};
-
-static const char *mbfl_encoding_html_ent_aliases[] = {"HTML", "html", NULL};
-
-const mbfl_encoding mbfl_encoding_html_ent = {
- mbfl_no_encoding_html_ent,
- "HTML-ENTITIES",
- "HTML-ENTITIES",
- (const char *(*)[])&mbfl_encoding_html_ent_aliases,
- NULL,
- MBFL_ENCTYPE_HTML_ENT
-};
-
-const struct mbfl_convert_vtbl vtbl_wchar_html = {
- mbfl_no_encoding_wchar,
- mbfl_no_encoding_html_ent,
- mbfl_filt_conv_common_ctor,
- mbfl_filt_conv_common_dtor,
- mbfl_filt_conv_html_enc,
- mbfl_filt_conv_html_enc_flush
-};
-
-const struct mbfl_convert_vtbl vtbl_html_wchar = {
- mbfl_no_encoding_html_ent,
- mbfl_no_encoding_wchar,
- mbfl_filt_conv_html_dec_ctor,
- mbfl_filt_conv_html_dec_dtor,
- mbfl_filt_conv_html_dec,
- mbfl_filt_conv_html_dec_flush };
-
-
-#define CK(statement) do { if ((statement) < 0) return (-1); } while (0)
-
-/*
- * any => HTML
- */
-int mbfl_filt_conv_html_enc(int c, mbfl_convert_filter *filter)
-{
- int tmp[64];
- int i;
- unsigned int uc;
- const mbfl_html_entity_entry *e;
-
- if (c < sizeof(htmlentitifieds) / sizeof(htmlentitifieds[0]) &&
- htmlentitifieds[c] != 1) {
- CK((*filter->output_function)(c, filter->data));
- } else {
- CK((*filter->output_function)('&', filter->data));
- for (i = 0; (e = &mbfl_html_entity_list[i])->name != NULL; i++) {
- if (c == e->code) {
- char *p;
-
- for (p = e->name; *p != '\0'; p++) {
- CK((*filter->output_function)((int)*p, filter->data));
- }
- goto last;
- }
- }
-
- {
- int *p = tmp + sizeof(tmp);
-
- CK((*filter->output_function)('#', filter->data));
-
- uc = (unsigned int)c;
-
- *(--p) = '\0';
- do {
- *(--p) = "0123456789"[uc % 10];
- uc /= 10;
- } while (uc);
-
- for (; *p != '\0'; p++) {
- CK((*filter->output_function)(*p, filter->data));
- }
- }
- last:
- CK((*filter->output_function)(';', filter->data));
- }
- return c;
-}
-
-int mbfl_filt_conv_html_enc_flush(mbfl_convert_filter *filter)
-{
- filter->status = 0;
- filter->cache = 0;
- return 0;
-}
-
-/*
- * HTML => any
- */
-#define html_enc_buffer_size 16
-static const char html_entity_chars[] = "#0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
-
-void mbfl_filt_conv_html_dec_ctor(mbfl_convert_filter *filter)
-{
- filter->status = 0;
- filter->cache = (int)mbfl_malloc(html_enc_buffer_size+1);
-}
-
-void mbfl_filt_conv_html_dec_dtor(mbfl_convert_filter *filter)
-{
- filter->status = 0;
- if (filter->cache)
- {
- mbfl_free((void*)filter->cache);
- }
- filter->cache = 0;
-}
-
-int mbfl_filt_conv_html_dec(int c, mbfl_convert_filter *filter)
-{
- int pos, ent = 0;
- mbfl_html_entity_entry *entity;
- char *buffer = (char*)filter->cache;
-
- if (!filter->status) {
- if (c == '&' ) {
- filter->status = 1;
- buffer[0] = '&';
- } else {
- CK((*filter->output_function)(c, filter->data));
- }
- } else {
- if (c == ';') {
- buffer[filter->status] = 0;
- if (buffer[1]=='#') {
- /* numeric entity */
- for (pos=2; pos<filter->status; pos++) {
- ent = ent*10 + (buffer[pos] - '0');
- }
- CK((*filter->output_function)(ent, filter->data));
- filter->status = 0;
- /*php_error_docref("ref.mbstring" TSRMLS_CC, E_NOTICE, "mbstring decoded '%s'=%d", buffer, ent);*/
- } else {
- /* named entity */
- entity = (mbfl_html_entity_entry *)mbfl_html_entity_list;
- while (entity->name) {
- if (!strcmp(buffer+1, entity->name)) {
- ent = entity->code;
- break;
- }
- entity++;
- }
- if (ent) {
- /* decoded */
- CK((*filter->output_function)(ent, filter->data));
- filter->status = 0;
- /*php_error_docref("ref.mbstring" TSRMLS_CC, E_NOTICE,"mbstring decoded '%s'=%d", buffer, ent);*/
- } else {
- /* failure */
- buffer[filter->status++] = ';';
- buffer[filter->status] = 0;
- /* php_error_docref("ref.mbstring" TSRMLS_CC, E_WARNING, "mbstring cannot decode '%s'", buffer); */
- mbfl_filt_conv_html_dec_flush(filter);
- }
- }
- } else {
- /* add character */
- buffer[filter->status++] = c;
- /* add character and check */
- if (!strchr(html_entity_chars, c) || filter->status+1==html_enc_buffer_size || (c=='#' && filter->status>2))
- {
- /* illegal character or end of buffer */
- if (c=='&')
- filter->status--;
- buffer[filter->status] = 0;
- /* php_error_docref("ref.mbstring" TSRMLS_CC, E_WARNING, "mbstring cannot decode '%s'", buffer)l */
- mbfl_filt_conv_html_dec_flush(filter);
- if (c=='&')
- {
- filter->status = 1;
- buffer[0] = '&';
- }
- }
- }
- }
- return c;
-}
-
-int mbfl_filt_conv_html_dec_flush(mbfl_convert_filter *filter)
-{
- int status, pos = 0;
- char *buffer;
-
- buffer = (char*)filter->cache;
- status = filter->status;
- /* flush fragments */
- while (status--) {
- CK((*filter->output_function)(buffer[pos++], filter->data));
- }
- filter->status = 0;
- /*filter->buffer = 0; of cause NOT*/
- return 0;
-}
-
-
diff --git a/ext/mbstring/libmbfl/filters/mbfilter_htmlent.h b/ext/mbstring/libmbfl/filters/mbfilter_htmlent.h
deleted file mode 100644
index 99827c2303..0000000000
--- a/ext/mbstring/libmbfl/filters/mbfilter_htmlent.h
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * "streamable kanji code filter and converter"
- * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved.
- *
- * LICENSE NOTICES
- *
- * This file is part of "streamable kanji code filter and converter",
- * which is distributed under the terms of GNU Lesser General Public
- * License (version 2) as published by the Free Software Foundation.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with "streamable kanji code filter and converter";
- * if not, write to the Free Software Foundation, Inc., 59 Temple Place,
- * Suite 330, Boston, MA 02111-1307 USA
- *
- * The author of this part: Marcus Boerger <helly@php.net>
- *
- */
-/*
- * The source code included in this files was separated from mbfilter.c
- * by moriyoshi koizumi <moriyoshi@php.net> on 4 dec 2002.
- *
- */
-
-#ifndef MBFL_MBFILTER_HTMLENT_H
-#define MBFL_MBFILTER_HTMLENT_H
-
-#include "mbfilter.h"
-
-extern const mbfl_encoding mbfl_encoding_html_ent;
-extern const struct mbfl_convert_vtbl vtbl_wchar_html;
-extern const struct mbfl_convert_vtbl vtbl_html_wchar;
-
-void mbfl_filt_conv_html_dec_ctor(mbfl_convert_filter *filter);
-void mbfl_filt_conv_html_dec_dtor(mbfl_convert_filter *filter);
-int mbfl_filt_conv_html_enc(int c, mbfl_convert_filter *filter);
-int mbfl_filt_conv_html_enc_flush(mbfl_convert_filter *filter);
-int mbfl_filt_conv_html_dec(int c, mbfl_convert_filter *filter);
-int mbfl_filt_conv_html_dec_flush(mbfl_convert_filter *filter);
-void mbfl_filt_conv_html_dec_ctor(mbfl_convert_filter *filter);
-void mbfl_filt_conv_html_dec_dtor(mbfl_convert_filter *filter);
-
-#endif /* MBFL_MBFILTER_HTMLENT_H */
diff --git a/ext/mbstring/libmbfl/filters/mbfilter_hz.c b/ext/mbstring/libmbfl/filters/mbfilter_hz.c
deleted file mode 100644
index 7c7eaffc07..0000000000
--- a/ext/mbstring/libmbfl/filters/mbfilter_hz.c
+++ /dev/null
@@ -1,276 +0,0 @@
-/*
- * "streamable kanji code filter and converter"
- * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved.
- *
- * LICENSE NOTICES
- *
- * This file is part of "streamable kanji code filter and converter",
- * which is distributed under the terms of GNU Lesser General Public
- * License (version 2) as published by the Free Software Foundation.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with "streamable kanji code filter and converter";
- * if not, write to the Free Software Foundation, Inc., 59 Temple Place,
- * Suite 330, Boston, MA 02111-1307 USA
- *
- * The author of this file:
- *
- */
-/*
- * The source code included in this files was separated from mbfilter_cn.c
- * by moriyoshi koizumi <moriyoshi@php.net> on 4 dec 2002.
- *
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "mbfilter.h"
-#include "mbfilter_hz.h"
-
-#include "unicode_table_cp936.h"
-
-static int mbfl_filt_ident_hz(int c, mbfl_identify_filter *filter);
-
-const mbfl_encoding mbfl_encoding_hz = {
- mbfl_no_encoding_hz,
- "HZ",
- "HZ-GB-2312",
- NULL,
- NULL,
- MBFL_ENCTYPE_MBCS | MBFL_ENCTYPE_SHFTCODE
-};
-
-const struct mbfl_identify_vtbl vtbl_identify_hz = {
- mbfl_no_encoding_hz,
- mbfl_filt_ident_common_ctor,
- mbfl_filt_ident_common_dtor,
- mbfl_filt_ident_hz
-};
-
-const struct mbfl_convert_vtbl vtbl_hz_wchar = {
- mbfl_no_encoding_hz,
- mbfl_no_encoding_wchar,
- mbfl_filt_conv_common_ctor,
- mbfl_filt_conv_common_dtor,
- mbfl_filt_conv_hz_wchar,
- mbfl_filt_conv_common_flush
-};
-
-const struct mbfl_convert_vtbl vtbl_wchar_hz = {
- mbfl_no_encoding_wchar,
- mbfl_no_encoding_hz,
- mbfl_filt_conv_common_ctor,
- mbfl_filt_conv_common_dtor,
- mbfl_filt_conv_wchar_hz,
- mbfl_filt_conv_any_hz_flush
-};
-
-#define CK(statement) do { if ((statement) < 0) return (-1); } while (0)
-
-/*
- * HZ => wchar
- */
-int
-mbfl_filt_conv_hz_wchar(int c, mbfl_convert_filter *filter)
-{
- int c1, s, w;
-
- switch (filter->status & 0xf) {
-/* case 0x00: ASCII */
-/* case 0x10: GB2312 */
- case 0:
- if (c == 0x7e) {
- filter->status += 2;
- } else if (filter->status == 0x10 && c > 0x20 && c < 0x7f) { /* DBCS first char */
- filter->cache = c;
- filter->status += 1;
- } else if (c >= 0 && c < 0x80) { /* latin, CTLs */
- CK((*filter->output_function)(c, filter->data));
- } else {
- w = c & MBFL_WCSGROUP_MASK;
- w |= MBFL_WCSGROUP_THROUGH;
- CK((*filter->output_function)(w, filter->data));
- }
- break;
-
-/* case 0x11: GB2312 second char */
- case 1:
- filter->status &= ~0xf;
- c1 = filter->cache;
- if (c1 > 0x20 && c1 < 0x7f && c > 0x20 && c < 0x7f) {
- s = (c1 - 1)*192 + c + 0x40; /* GB2312 */
- if (s >= 0 && s < cp936_ucs_table_size) {
- w = cp936_ucs_table[s];
- } else {
- w = 0;
- }
- if (w <= 0) {
- w = (c1 << 8) | c;
- w &= MBFL_WCSPLANE_MASK;
- w |= MBFL_WCSPLANE_GB2312;
- }
- CK((*filter->output_function)(w, filter->data));
- } else if ((c >= 0 && c < 0x21) || c == 0x7f) { /* CTLs */
- CK((*filter->output_function)(c, filter->data));
- } else {
- w = (c1 << 8) | c;
- w &= MBFL_WCSGROUP_MASK;
- w |= MBFL_WCSGROUP_THROUGH;
- CK((*filter->output_function)(w, filter->data));
- }
- break;
-
- /* '~' */
- case 2:
- if (c == 0x7d) { /* '}' */
- filter->status = 0x0;
- } else if (c == 0x7b) { /* '{' */
- filter->status = 0x10;
- } else if (c == 0x7e) { /* '~' */
- filter->status = 0x0;
- CK((*filter->output_function)(0x007e, filter->data));
- }
- break;
-
- default:
- filter->status = 0;
- break;
- }
-
- return c;
-}
-
-/*
- * wchar => HZ
- */
-int
-mbfl_filt_conv_wchar_hz(int c, mbfl_convert_filter *filter)
-{
- int s;
-
- s = 0;
- if (c >= ucs_a1_cp936_table_min && c < ucs_a1_cp936_table_max) {
- s = ucs_a1_cp936_table[c - ucs_a1_cp936_table_min];
- } else if (c >= ucs_a2_cp936_table_min && c < ucs_a2_cp936_table_max) {
- s = ucs_a2_cp936_table[c - ucs_a2_cp936_table_min];
- } else if (c >= ucs_a3_cp936_table_min && c < ucs_a3_cp936_table_max) {
- s = ucs_a3_cp936_table[c - ucs_a3_cp936_table_min];
- } else if (c >= ucs_i_cp936_table_min && c < ucs_i_cp936_table_max) {
- s = ucs_i_cp936_table[c - ucs_i_cp936_table_min];
- } else if (c >= ucs_hff_cp936_table_min && c < ucs_hff_cp936_table_max) {
- s = ucs_hff_cp936_table[c - ucs_hff_cp936_table_min];
- }
- if (s & 0x8000) {
- s -= 0x8080;
- }
-
- if (s <= 0) {
- if (c == 0) {
- s = 0;
- } else if (s <= 0) {
- s = -1;
- }
- } else if ((s >= 0x80 && s < 0x2121) || (s > 0x8080)) {
- s = -1;
- }
- if (s >= 0) {
- if (s < 0x80) { /* ASCII */
- if ((filter->status & 0xff00) != 0) {
- CK((*filter->output_function)(0x7e, filter->data)); /* '~' */
- CK((*filter->output_function)(0x7d, filter->data)); /* '}' */
- }
- filter->status = 0;
- if (s == 0x7e){
- CK((*filter->output_function)(0x7e, filter->data));
- }
- CK((*filter->output_function)(s, filter->data));
- } else { /* GB 2312-80 */
- if ((filter->status & 0xff00) != 0x200) {
- CK((*filter->output_function)(0x7e, filter->data)); /* '~' */
- CK((*filter->output_function)(0x7b, filter->data)); /* '{' */
- }
- filter->status = 0x200;
- CK((*filter->output_function)((s >> 8) & 0x7f, filter->data));
- CK((*filter->output_function)(s & 0x7f, filter->data));
- }
- } else {
- if (filter->illegal_mode != MBFL_OUTPUTFILTER_ILLEGAL_MODE_NONE) {
- CK(mbfl_filt_conv_illegal_output(c, filter));
- }
- }
-
- return c;
-}
-
-int
-mbfl_filt_conv_any_hz_flush(mbfl_convert_filter *filter)
-{
- /* back to latin */
- if ((filter->status & 0xff00) != 0) {
- CK((*filter->output_function)(0x7e, filter->data)); /* ~ */
- CK((*filter->output_function)(0x7d, filter->data)); /* '{' */
- }
- filter->status &= 0xff;
- return 0;
-}
-
-static int mbfl_filt_ident_hz(int c, mbfl_identify_filter *filter)
-{
- switch (filter->status & 0xf) {
-/* case 0x00: ASCII */
-/* case 0x10: GB2312 */
- case 0:
- if (c == 0x7e) {
- filter->status += 2;
- } else if (filter->status == 0x10 && c > 0x20 && c < 0x7f) { /* DBCS first char */
- filter->status += 1;
- } else if (c >= 0 && c < 0x80) { /* latin, CTLs */
- ;
- } else {
- filter->flag = 1; /* bad */
- }
- break;
-
-/* case 0x11: GB2312 second char */
- case 1:
- filter->status &= ~0xf;
- if (c < 0x21 || c > 0x7e) { /* bad */
- filter->flag = 1;
- }
- break;
-
- case 2:
- if (c == 0x7d) { /* '}' */
- filter->status = 0;
- } else if (c == 0x7b) { /* '{' */
- filter->status = 0x10;
- } else if (c == 0x7e) { /* '~' */
- filter->status = 0;
- } else {
- filter->flag = 1; /* bad */
- filter->status &= ~0xf;
- }
- break;
-
- default:
- filter->status = 0;
- break;
- }
-
- return c;
-}
-
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- */
diff --git a/ext/mbstring/libmbfl/filters/mbfilter_hz.h b/ext/mbstring/libmbfl/filters/mbfilter_hz.h
deleted file mode 100644
index 1e7ebc334d..0000000000
--- a/ext/mbstring/libmbfl/filters/mbfilter_hz.h
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * "streamable kanji code filter and converter"
- * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved.
- *
- * LICENSE NOTICES
- *
- * This file is part of "streamable kanji code filter and converter",
- * which is distributed under the terms of GNU Lesser General Public
- * License (version 2) as published by the Free Software Foundation.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with "streamable kanji code filter and converter";
- * if not, write to the Free Software Foundation, Inc., 59 Temple Place,
- * Suite 330, Boston, MA 02111-1307 USA
- *
- * The author of this file:
- *
- */
-/*
- * The source code included in this files was separated from mbfilter_cn.h
- * by moriyoshi koizumi <moriyoshi@php.net> on 4 dec 2002.
- *
- */
-
-#ifndef MBFL_MBFILTER_HZ_H
-#define MBFL_MBFILTER_HZ_H
-
-#include "mbfilter.h"
-
-extern const mbfl_encoding mbfl_encoding_hz;
-extern const struct mbfl_identify_vtbl vtbl_identify_hz;
-extern const struct mbfl_convert_vtbl vtbl_hz_wchar;
-extern const struct mbfl_convert_vtbl vtbl_wchar_hz;
-
-int mbfl_filt_conv_hz_wchar(int c, mbfl_convert_filter *filter);
-int mbfl_filt_conv_wchar_hz(int c, mbfl_convert_filter *filter);
-int mbfl_filt_conv_any_hz_flush(mbfl_convert_filter *filter);
-
-#endif /* MBFL_MBFILTER_HZ_H */
diff --git a/ext/mbstring/libmbfl/filters/mbfilter_iso2022_kr.c b/ext/mbstring/libmbfl/filters/mbfilter_iso2022_kr.c
deleted file mode 100644
index 263476d628..0000000000
--- a/ext/mbstring/libmbfl/filters/mbfilter_iso2022_kr.c
+++ /dev/null
@@ -1,353 +0,0 @@
-/*
- * "streamable kanji code filter and converter"
- * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved.
- *
- * LICENSE NOTICES
- *
- * This file is part of "streamable kanji code filter and converter",
- * which is distributed under the terms of GNU Lesser General Public
- * License (version 2) as published by the Free Software Foundation.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with "streamable kanji code filter and converter";
- * if not, write to the Free Software Foundation, Inc., 59 Temple Place,
- * Suite 330, Boston, MA 02111-1307 USA
- *
- * The author of this file:
- *
- */
-/*
- * The source code included in this files was separated from mbfilter_kr.c
- * by moriyoshi koizumi <moriyoshi@php.net> on 4 dec 2002.
- *
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "mbfilter.h"
-#include "mbfilter_iso2022_kr.h"
-#include "unicode_table_uhc.h"
-
-static int mbfl_filt_ident_2022kr(int c, mbfl_identify_filter *filter);
-
-const mbfl_encoding mbfl_encoding_2022kr = {
- mbfl_no_encoding_2022kr,
- "ISO-2022-KR",
- "ISO-2022-KR",
- NULL,
- NULL,
- MBFL_ENCTYPE_MBCS | MBFL_ENCTYPE_SHFTCODE
-};
-
-const struct mbfl_identify_vtbl vtbl_identify_2022kr = {
- mbfl_no_encoding_2022kr,
- mbfl_filt_ident_common_ctor,
- mbfl_filt_ident_common_dtor,
- mbfl_filt_ident_2022kr
-};
-
-const struct mbfl_convert_vtbl vtbl_wchar_2022kr = {
- mbfl_no_encoding_wchar,
- mbfl_no_encoding_2022kr,
- mbfl_filt_conv_common_ctor,
- mbfl_filt_conv_common_dtor,
- mbfl_filt_conv_wchar_2022kr,
- mbfl_filt_conv_any_2022kr_flush
-};
-
-const struct mbfl_convert_vtbl vtbl_2022kr_wchar = {
- mbfl_no_encoding_2022kr,
- mbfl_no_encoding_wchar,
- mbfl_filt_conv_common_ctor,
- mbfl_filt_conv_common_dtor,
- mbfl_filt_conv_2022kr_wchar,
- mbfl_filt_conv_common_flush
-};
-
-#define CK(statement) do { if ((statement) < 0) return (-1); } while (0)
-
-/*
- * ISO-2022-KR => wchar
- */
-int
-mbfl_filt_conv_2022kr_wchar(int c, mbfl_convert_filter *filter)
-{
- int c1, w, flag;
-
-retry:
- switch (filter->status & 0xf) {
- /* case 0x00: ASCII */
- /* case 0x10: KSC5601 */
- case 0:
- if (c == 0x1b) { /* ESC */
- filter->status += 2;
- } else if (c == 0x0f) { /* SI (ASCII) */
- filter->status &= ~0xff;
- } else if (c == 0x0e) { /* SO (KSC5601) */
- filter->status |= 0x10;
- } else if ((filter->status & 0x10) != 0 && c > 0x20 && c < 0x7f) {
- /* KSC5601 lead byte */
- filter->cache = c;
- filter->status += 1;
- } else if ((filter->status & 0x10) == 0 && c >= 0 && c < 0x80) {
- /* latin, CTLs */
- CK((*filter->output_function)(c, filter->data));
- } else {
- w = c & MBFL_WCSGROUP_MASK;
- w |= MBFL_WCSGROUP_THROUGH;
- CK((*filter->output_function)(w, filter->data));
- }
- break;
-
- case 1: /* dbcs second byte */
- filter->status &= ~0xf;
- c1 = filter->cache;
- flag = 0;
- if (c1 > 0x20 && c1 < 0x47) {
- flag = 1;
- } else if (c1 >= 0x47 && c1 <= 0x7e && c1 != 0x49) {
- flag = 2;
- }
- if (flag > 0 && c > 0x20 && c < 0x7f) {
- if (flag == 1){
- w = (c1 - 0x21)*190 + (c - 0x41) + 0x80;
- if (w >= 0 && w < uhc2_ucs_table_size) {
- w = uhc2_ucs_table[w];
- } else {
- w = 0;
- }
- } else {
- w = (c1 - 0x47)*94 + (c - 0x21);
- if (w >= 0 && w < uhc3_ucs_table_size) {
- w = uhc3_ucs_table[w];
- } else {
- w = 0;
- }
- }
-
- if (w <= 0) {
- w = (c1 << 8) | c;
- w &= MBFL_WCSPLANE_MASK;
- w |= MBFL_WCSPLANE_KSC5601;
- }
- CK((*filter->output_function)(w, filter->data));
- } else if (c == 0x1b) { /* ESC */
- filter->status++;
- } else if ((c >= 0 && c < 0x21) || c == 0x7f) { /* CTLs */
- CK((*filter->output_function)(c, filter->data));
- } else {
- w = (c1 << 8) | c;
- w &= MBFL_WCSGROUP_MASK;
- w |= MBFL_WCSGROUP_THROUGH;
- CK((*filter->output_function)(w, filter->data));
- }
- break;
-
- case 2: /* ESC */
- if (c == 0x24) { /* '$' */
- filter->status++;
- } else {
- filter->status &= ~0xf;
- CK((*filter->output_function)(0x1b, filter->data));
- goto retry;
- }
- break;
- case 3: /* ESC $ */
- if (c == 0x29) { /* ')' */
- filter->status++;
- } else {
- filter->status &= ~0xf;
- CK((*filter->output_function)(0x1b, filter->data));
- CK((*filter->output_function)(0x24, filter->data));
- goto retry;
- }
- break;
- case 4: /* ESC $ ) */
- if (c == 0x43) { /* 'C' */
- filter->status &= ~0xf;
- filter->status |= 0x100;
- } else {
- filter->status &= ~0xf;
- CK((*filter->output_function)(0x1b, filter->data));
- CK((*filter->output_function)(0x24, filter->data));
- CK((*filter->output_function)(0x29, filter->data));
- goto retry;
- }
- break;
- default:
- filter->status = 0;
- break;
- }
-
- return c;
-}
-
-/*
- * wchar => ISO-2022-KR
- */
-int
-mbfl_filt_conv_wchar_2022kr(int c, mbfl_convert_filter *filter)
-{
- int c1, c2, s;
-
- s = 0;
-
- if (c >= ucs_a1_uhc_table_min && c < ucs_a1_uhc_table_max) {
- s = ucs_a1_uhc_table[c - ucs_a1_uhc_table_min];
- } else if (c >= ucs_a2_uhc_table_min && c < ucs_a2_uhc_table_max) {
- s = ucs_a2_uhc_table[c - ucs_a2_uhc_table_min];
- } else if (c >= ucs_a3_uhc_table_min && c < ucs_a3_uhc_table_max) {
- s = ucs_a3_uhc_table[c - ucs_a3_uhc_table_min];
- } else if (c >= ucs_i_uhc_table_min && c < ucs_i_uhc_table_max) {
- s = ucs_i_uhc_table[c - ucs_i_uhc_table_min];
- } else if (c >= ucs_s_uhc_table_min && c < ucs_s_uhc_table_max) {
- s = ucs_s_uhc_table[c - ucs_s_uhc_table_min];
- } else if (c >= ucs_r1_uhc_table_min && c < ucs_r1_uhc_table_max) {
- s = ucs_r1_uhc_table[c - ucs_r1_uhc_table_min];
- } else if (c >= ucs_r2_uhc_table_min && c < ucs_r2_uhc_table_max) {
- s = ucs_r2_uhc_table[c - ucs_r2_uhc_table_min];
- }
-
- c1 = (s >> 8) & 0xff;
- c2 = s & 0xff;
- /* exclude UHC extension area */
- if (c1 < 0xa1 || c2 < 0xa1){
- s = c;
- }
- if (s & 0x8000) {
- s -= 0x8080;
- }
-
- if (s <= 0) {
- c1 = c & ~MBFL_WCSPLANE_MASK;
- if (c1 == MBFL_WCSPLANE_KSC5601) {
- s = c & MBFL_WCSPLANE_MASK;
- }
- if (c == 0) {
- s = 0;
- } else if (s <= 0) {
- s = -1;
- }
- } else if ((s >= 0x80 && s < 0x2121) || (s > 0x8080)) {
- s = -1;
- }
- if (s >= 0) {
- if (s < 0x80 && s > 0) { /* ASCII */
- if ((filter->status & 0x10) != 0) {
- CK((*filter->output_function)(0x0f, filter->data)); /* SI */
- filter->status &= ~0x10;
- }
- CK((*filter->output_function)(s, filter->data));
- } else {
- if ( (filter->status & 0x100) == 0) {
- CK((*filter->output_function)(0x1b, filter->data)); /* ESC */
- CK((*filter->output_function)(0x24, filter->data)); /* '$' */
- CK((*filter->output_function)(0x29, filter->data)); /* ')' */
- CK((*filter->output_function)(0x43, filter->data)); /* 'C' */
- filter->status |= 0x100;
- }
- if ((filter->status & 0x10) == 0) {
- CK((*filter->output_function)(0x0e, filter->data)); /* SO */
- filter->status |= 0x10;
- }
- CK((*filter->output_function)((s >> 8) & 0xff, filter->data));
- CK((*filter->output_function)(s & 0xff, filter->data));
- }
- } else {
- if (filter->illegal_mode != MBFL_OUTPUTFILTER_ILLEGAL_MODE_NONE) {
- CK(mbfl_filt_conv_illegal_output(c, filter));
- }
- }
-
- return c;
-}
-
-int
-mbfl_filt_conv_any_2022kr_flush(mbfl_convert_filter *filter)
-{
- /* back to ascii */
- if ((filter->status & 0xff00) != 0) {
- CK((*filter->output_function)(0x0f, filter->data)); /* SI */
- }
- filter->status &= 0xff;
- return 0;
-}
-
-static int mbfl_filt_ident_2022kr(int c, mbfl_identify_filter *filter)
-{
-retry:
- switch (filter->status & 0xf) {
-/* case 0x00: ASCII */
-/* case 0x10: KSC5601 mode */
-/* case 0x20: KSC5601 DBCS */
-/* case 0x40: KSC5601 SBCS */
- case 0:
- if (!(filter->status & 0x10)) {
- if (c == 0x1b)
- filter->status += 2;
- } else if (filter->status == 0x20 && c > 0x20 && c < 0x7f) { /* kanji first char */
- filter->status += 1;
- } else if (c >= 0 && c < 0x80) { /* latin, CTLs */
- ;
- } else {
- filter->flag = 1; /* bad */
- }
- break;
-
-/* case 0x21: KSC5601 second char */
- case 1:
- filter->status &= ~0xf;
- if (c < 0x21 || c > 0x7e) { /* bad */
- filter->flag = 1;
- }
- break;
-
- /* ESC */
- case 2:
- if (c == 0x24) { /* '$' */
- filter->status++;
- } else {
- filter->flag = 1; /* bad */
- filter->status &= ~0xf;
- goto retry;
- }
- break;
-
- /* ESC $ */
- case 3:
- if (c == 0x29) { /* ')' */
- filter->status++;
- } else {
- filter->flag = 1; /* bad */
- filter->status &= ~0xf;
- goto retry;
- }
- break;
-
- /* ESC $) */
- case 5:
- if (c == 0x43) { /* 'C' */
- filter->status = 0x10;
- } else {
- filter->flag = 1; /* bad */
- filter->status &= ~0xf;
- goto retry;
- }
- break;
-
- default:
- filter->status = 0;
- break;
- }
-
- return c;
-}
-
-
diff --git a/ext/mbstring/libmbfl/filters/mbfilter_iso2022_kr.h b/ext/mbstring/libmbfl/filters/mbfilter_iso2022_kr.h
deleted file mode 100644
index 1dd9f69351..0000000000
--- a/ext/mbstring/libmbfl/filters/mbfilter_iso2022_kr.h
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * "streamable kanji code filter and converter"
- * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved.
- *
- * LICENSE NOTICES
- *
- * This file is part of "streamable kanji code filter and converter",
- * which is distributed under the terms of GNU Lesser General Public
- * License (version 2) as published by the Free Software Foundation.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with "streamable kanji code filter and converter";
- * if not, write to the Free Software Foundation, Inc., 59 Temple Place,
- * Suite 330, Boston, MA 02111-1307 USA
- *
- * The author of this file:
- *
- */
-/*
- * The source code included in this files was separated from mbfilter_kr.h
- * by moriyoshi koizumi <moriyoshi@php.net> on 4 dec 2002.
- *
- */
-
-#ifndef MBFL_MBFILTER_ISO2022_KR_H
-#define MBFL_MBFILTER_ISO2022_KR_H
-
-#include "mbfilter.h"
-
-extern const mbfl_encoding mbfl_encoding_2022kr;
-extern const struct mbfl_identify_vtbl vtbl_identify_2022kr;
-extern const struct mbfl_convert_vtbl vtbl_wchar_2022kr;
-extern const struct mbfl_convert_vtbl vtbl_2022kr_wchar;
-
-int mbfl_filt_conv_2022kr_wchar(int c, mbfl_convert_filter *filter);
-int mbfl_filt_conv_wchar_2022kr(int c, mbfl_convert_filter *filter);
-int mbfl_filt_conv_any_2022kr_flush(mbfl_convert_filter *filter);
-
-#endif /* MBFL_MBFILTER_ISO2022_KR_H */
diff --git a/ext/mbstring/libmbfl/filters/mbfilter_iso8859_1.c b/ext/mbstring/libmbfl/filters/mbfilter_iso8859_1.c
deleted file mode 100644
index 901bbb7eec..0000000000
--- a/ext/mbstring/libmbfl/filters/mbfilter_iso8859_1.c
+++ /dev/null
@@ -1,100 +0,0 @@
-/*
- * "streamable kanji code filter and converter"
- * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved.
- *
- * LICENSE NOTICES
- *
- * This file is part of "streamable kanji code filter and converter",
- * which is distributed under the terms of GNU Lesser General Public
- * License (version 2) as published by the Free Software Foundation.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with "streamable kanji code filter and converter";
- * if not, write to the Free Software Foundation, Inc., 59 Temple Place,
- * Suite 330, Boston, MA 02111-1307 USA
- *
- * The author of this file:
- *
- */
-/*
- * The source code included in this files was separated from mbfilter.c
- * by moriyoshi koizumi <moriyoshi@php.net> on 4 dec 2002.
- *
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "mbfilter.h"
-#include "mbfilter_iso8859_1.h"
-
-static const char *mbfl_encoding_8859_1_aliases[] = {"ISO_8859-1", "latin1", NULL};
-
-const mbfl_encoding mbfl_encoding_8859_1 = {
- mbfl_no_encoding_8859_1,
- "ISO-8859-1",
- "ISO-8859-1",
- (const char *(*)[])&mbfl_encoding_8859_1_aliases,
- NULL,
- MBFL_ENCTYPE_SBCS
-};
-
-const struct mbfl_identify_vtbl vtbl_identify_8859_1 = {
- mbfl_no_encoding_8859_1,
- mbfl_filt_ident_common_ctor,
- mbfl_filt_ident_common_dtor,
- mbfl_filt_ident_true
-};
-
-const struct mbfl_convert_vtbl vtbl_8859_1_wchar = {
- mbfl_no_encoding_8859_1,
- mbfl_no_encoding_wchar,
- mbfl_filt_conv_common_ctor,
- mbfl_filt_conv_common_dtor,
- mbfl_filt_conv_8859_1_wchar,
- mbfl_filt_conv_common_flush
-};
-
-const struct mbfl_convert_vtbl vtbl_wchar_8859_1 = {
- mbfl_no_encoding_wchar,
- mbfl_no_encoding_8859_1,
- mbfl_filt_conv_common_ctor,
- mbfl_filt_conv_common_dtor,
- mbfl_filt_conv_wchar_8859_1,
- mbfl_filt_conv_common_flush
-};
-
-
-#define CK(statement) do { if ((statement) < 0) return (-1); } while (0)
-
-/*
- * ISO-8859-1 => wchar
- */
-int mbfl_filt_conv_8859_1_wchar(int c, mbfl_convert_filter *filter)
-{
- return (*filter->output_function)(c, filter->data);
-}
-
-/*
- * wchar => ISO-8859-1
- */
-int mbfl_filt_conv_wchar_8859_1(int c, mbfl_convert_filter *filter)
-{
- if (c >= 0 && c < 0x100) {
- CK((*filter->output_function)(c, filter->data));
- } else {
- if (filter->illegal_mode != MBFL_OUTPUTFILTER_ILLEGAL_MODE_NONE) {
- CK(mbfl_filt_conv_illegal_output(c, filter));
- }
- }
-
- return c;
-}
-
-
diff --git a/ext/mbstring/libmbfl/filters/mbfilter_iso8859_1.h b/ext/mbstring/libmbfl/filters/mbfilter_iso8859_1.h
deleted file mode 100644
index d55a457679..0000000000
--- a/ext/mbstring/libmbfl/filters/mbfilter_iso8859_1.h
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * "streamable kanji code filter and converter"
- * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved.
- *
- * LICENSE NOTICES
- *
- * This file is part of "streamable kanji code filter and converter",
- * which is distributed under the terms of GNU Lesser General Public
- * License (version 2) as published by the Free Software Foundation.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with "streamable kanji code filter and converter";
- * if not, write to the Free Software Foundation, Inc., 59 Temple Place,
- * Suite 330, Boston, MA 02111-1307 USA
- *
- * The author of this file:
- *
- */
-/*
- * The source code included in this files was separated from mbfilter.h
- * by moriyoshi koizumi <moriyoshi@php.net> on 4 dec 2002.
- *
- */
-
-#ifndef MBFL_MBFILTER_ISO8859_1_H
-#define MBFL_MBFILTER_ISO8859_1_H
-
-#include "mbfilter.h"
-
-extern const mbfl_encoding mbfl_encoding_8859_1;
-extern const struct mbfl_identify_vtbl vtbl_identify_8859_1;
-extern const struct mbfl_convert_vtbl vtbl_8859_1_wchar;
-extern const struct mbfl_convert_vtbl vtbl_wchar_8859_1;
-
-int mbfl_filt_conv_8859_1_wchar(int c, mbfl_convert_filter *filter);
-int mbfl_filt_conv_wchar_8859_1(int c, mbfl_convert_filter *filter);
-
-#endif /* MBFL_MBFILTER_ISO8859_1_H */
diff --git a/ext/mbstring/libmbfl/filters/mbfilter_iso8859_10.c b/ext/mbstring/libmbfl/filters/mbfilter_iso8859_10.c
deleted file mode 100644
index b0f80e7a17..0000000000
--- a/ext/mbstring/libmbfl/filters/mbfilter_iso8859_10.c
+++ /dev/null
@@ -1,138 +0,0 @@
-/*
- * "streamable kanji code filter and converter"
- * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved.
- *
- * LICENSE NOTICES
- *
- * This file is part of "streamable kanji code filter and converter",
- * which is distributed under the terms of GNU Lesser General Public
- * License (version 2) as published by the Free Software Foundation.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with "streamable kanji code filter and converter";
- * if not, write to the Free Software Foundation, Inc., 59 Temple Place,
- * Suite 330, Boston, MA 02111-1307 USA
- *
- * The author of this file:
- *
- */
-/*
- * The source code included in this files was separated from mbfilter.c
- * by moriyoshi koizumi <moriyoshi@php.net> on 4 dec 2002.
- *
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "mbfilter.h"
-#include "mbfilter_iso8859_10.h"
-#include "unicode_table_iso8859_10.h"
-
-static const char *mbfl_encoding_8859_10_aliases[] = {"ISO_8859-10", "latin6", NULL};
-
-const mbfl_encoding mbfl_encoding_8859_10 = {
- mbfl_no_encoding_8859_10,
- "ISO-8859-10",
- "ISO-8859-10",
- (const char *(*)[])&mbfl_encoding_8859_10_aliases,
- NULL,
- MBFL_ENCTYPE_SBCS
-};
-
-const struct mbfl_identify_vtbl vtbl_identify_8859_10 = {
- mbfl_no_encoding_8859_10,
- mbfl_filt_ident_common_ctor,
- mbfl_filt_ident_common_dtor,
- mbfl_filt_ident_true
-};
-
-const struct mbfl_convert_vtbl vtbl_8859_10_wchar = {
- mbfl_no_encoding_8859_10,
- mbfl_no_encoding_wchar,
- mbfl_filt_conv_common_ctor,
- mbfl_filt_conv_common_dtor,
- mbfl_filt_conv_8859_10_wchar,
- mbfl_filt_conv_common_flush
-};
-
-const struct mbfl_convert_vtbl vtbl_wchar_8859_10 = {
- mbfl_no_encoding_wchar,
- mbfl_no_encoding_8859_10,
- mbfl_filt_conv_common_ctor,
- mbfl_filt_conv_common_dtor,
- mbfl_filt_conv_wchar_8859_10,
- mbfl_filt_conv_common_flush
-};
-
-#define CK(statement) do { if ((statement) < 0) return (-1); } while (0)
-
-/*
- * ISO-8859-10 => wchar
- */
-int mbfl_filt_conv_8859_10_wchar(int c, mbfl_convert_filter *filter)
-{
- int s;
-
- if (c >= 0 && c < 0xa0) {
- s = c;
- } else if (c >= 0xa0 && c < 0x100) {
- s = iso8859_10_ucs_table[c - 0xa0];
- if (s <= 0) {
- s = c;
- s &= MBFL_WCSPLANE_MASK;
- s |= MBFL_WCSPLANE_8859_10;
- }
- } else {
- s = c;
- s &= MBFL_WCSGROUP_MASK;
- s |= MBFL_WCSGROUP_THROUGH;
- }
-
- CK((*filter->output_function)(s, filter->data));
-
- return c;
-}
-
-/*
- * wchar => ISO-8859-10
- */
-int mbfl_filt_conv_wchar_8859_10(int c, mbfl_convert_filter *filter)
-{
- int s, n;
-
- if (c >= 0 && c < 0xa0) {
- s = c;
- } else {
- s = -1;
- n = 95;
- while (n >= 0) {
- if (c == iso8859_10_ucs_table[n]) {
- s = 0xa0 + n;
- break;
- }
- n--;
- }
- if (s <= 0 && (c & ~MBFL_WCSPLANE_MASK) == MBFL_WCSPLANE_8859_10) {
- s = c & MBFL_WCSPLANE_MASK;
- }
- }
-
- if (s >= 0) {
- CK((*filter->output_function)(s, filter->data));
- } else {
- if (filter->illegal_mode != MBFL_OUTPUTFILTER_ILLEGAL_MODE_NONE) {
- CK(mbfl_filt_conv_illegal_output(c, filter));
- }
- }
-
- return c;
-}
-
-
diff --git a/ext/mbstring/libmbfl/filters/mbfilter_iso8859_10.h b/ext/mbstring/libmbfl/filters/mbfilter_iso8859_10.h
deleted file mode 100644
index 3743422c6d..0000000000
--- a/ext/mbstring/libmbfl/filters/mbfilter_iso8859_10.h
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * "streamable kanji code filter and converter"
- * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved.
- *
- * LICENSE NOTICES
- *
- * This file is part of "streamable kanji code filter and converter",
- * which is distributed under the terms of GNU Lesser General Public
- * License (version 2) as published by the Free Software Foundation.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with "streamable kanji code filter and converter";
- * if not, write to the Free Software Foundation, Inc., 59 Temple Place,
- * Suite 330, Boston, MA 02111-1307 USA
- *
- * The author of this file:
- *
- */
-/*
- * The source code included in this files was separated from mbfilter.c
- * by moriyoshi koizumi <moriyoshi@php.net> on 4 dec 2002.
- *
- */
-
-#ifndef MBFL_MBFILTER_ISO8859_10_H
-#define MBFL_MBFILTER_ISO8859_10_H
-
-#include "mbfilter.h"
-
-extern const mbfl_encoding mbfl_encoding_8859_10;
-extern const struct mbfl_identify_vtbl vtbl_identify_8859_10;
-extern const struct mbfl_convert_vtbl vtbl_8859_10_wchar;
-extern const struct mbfl_convert_vtbl vtbl_wchar_8859_10;
-
-int mbfl_filt_conv_8859_10_wchar(int c, mbfl_convert_filter *filter);
-int mbfl_filt_conv_wchar_8859_10(int c, mbfl_convert_filter *filter);
-
-#endif /* MBFL_MBFILTER_ISO8859_10_H */
diff --git a/ext/mbstring/libmbfl/filters/mbfilter_iso8859_13.c b/ext/mbstring/libmbfl/filters/mbfilter_iso8859_13.c
deleted file mode 100644
index 674db7e469..0000000000
--- a/ext/mbstring/libmbfl/filters/mbfilter_iso8859_13.c
+++ /dev/null
@@ -1,138 +0,0 @@
-/*
- * "streamable kanji code filter and converter"
- * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved.
- *
- * LICENSE NOTICES
- *
- * This file is part of "streamable kanji code filter and converter",
- * which is distributed under the terms of GNU Lesser General Public
- * License (version 2) as published by the Free Software Foundation.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with "streamable kanji code filter and converter";
- * if not, write to the Free Software Foundation, Inc., 59 Temple Place,
- * Suite 330, Boston, MA 02111-1307 USA
- *
- * The author of this file:
- *
- */
-/*
- * The source code included in this files was separated from mbfilter.c
- * by moriyoshi koizumi <moriyoshi@php.net> on 4 dec 2002.
- *
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "mbfilter.h"
-#include "mbfilter_iso8859_13.h"
-#include "unicode_table_iso8859_13.h"
-
-static const char *mbfl_encoding_8859_13_aliases[] = {"ISO_8859-13", NULL};
-
-const mbfl_encoding mbfl_encoding_8859_13 = {
- mbfl_no_encoding_8859_13,
- "ISO-8859-13",
- "ISO-8859-13",
- (const char *(*)[])&mbfl_encoding_8859_13_aliases,
- NULL,
- MBFL_ENCTYPE_SBCS
-};
-
-const struct mbfl_identify_vtbl vtbl_identify_8859_13 = {
- mbfl_no_encoding_8859_13,
- mbfl_filt_ident_common_ctor,
- mbfl_filt_ident_common_dtor,
- mbfl_filt_ident_true
-};
-
-const struct mbfl_convert_vtbl vtbl_8859_13_wchar = {
- mbfl_no_encoding_8859_13,
- mbfl_no_encoding_wchar,
- mbfl_filt_conv_common_ctor,
- mbfl_filt_conv_common_dtor,
- mbfl_filt_conv_8859_13_wchar,
- mbfl_filt_conv_common_flush
-};
-
-const struct mbfl_convert_vtbl vtbl_wchar_8859_13 = {
- mbfl_no_encoding_wchar,
- mbfl_no_encoding_8859_13,
- mbfl_filt_conv_common_ctor,
- mbfl_filt_conv_common_dtor,
- mbfl_filt_conv_wchar_8859_13,
- mbfl_filt_conv_common_flush
-};
-
-#define CK(statement) do { if ((statement) < 0) return (-1); } while (0)
-
-/*
- * ISO-8859-13 => wchar
- */
-int mbfl_filt_conv_8859_13_wchar(int c, mbfl_convert_filter *filter)
-{
- int s;
-
- if (c >= 0 && c < 0xa0) {
- s = c;
- } else if (c >= 0xa0 && c < 0x100) {
- s = iso8859_13_ucs_table[c - 0xa0];
- if (s <= 0) {
- s = c;
- s &= MBFL_WCSPLANE_MASK;
- s |= MBFL_WCSPLANE_8859_13;
- }
- } else {
- s = c;
- s &= MBFL_WCSGROUP_MASK;
- s |= MBFL_WCSGROUP_THROUGH;
- }
-
- CK((*filter->output_function)(s, filter->data));
-
- return c;
-}
-
-/*
- * wchar => ISO-8859-13
- */
-int mbfl_filt_conv_wchar_8859_13(int c, mbfl_convert_filter *filter)
-{
- int s, n;
-
- if (c >= 0 && c < 0xa0) {
- s = c;
- } else {
- s = -1;
- n = 95;
- while (n >= 0) {
- if (c == iso8859_13_ucs_table[n]) {
- s = 0xa0 + n;
- break;
- }
- n--;
- }
- if (s <= 0 && (c & ~MBFL_WCSPLANE_MASK) == MBFL_WCSPLANE_8859_13) {
- s = c & MBFL_WCSPLANE_MASK;
- }
- }
-
- if (s >= 0) {
- CK((*filter->output_function)(s, filter->data));
- } else {
- if (filter->illegal_mode != MBFL_OUTPUTFILTER_ILLEGAL_MODE_NONE) {
- CK(mbfl_filt_conv_illegal_output(c, filter));
- }
- }
-
- return c;
-}
-
-
diff --git a/ext/mbstring/libmbfl/filters/mbfilter_iso8859_13.h b/ext/mbstring/libmbfl/filters/mbfilter_iso8859_13.h
deleted file mode 100644
index 594575c981..0000000000
--- a/ext/mbstring/libmbfl/filters/mbfilter_iso8859_13.h
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * "streamable kanji code filter and converter"
- * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved.
- *
- * LICENSE NOTICES
- *
- * This file is part of "streamable kanji code filter and converter",
- * which is distributed under the terms of GNU Lesser General Public
- * License (version 2) as published by the Free Software Foundation.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with "streamable kanji code filter and converter";
- * if not, write to the Free Software Foundation, Inc., 59 Temple Place,
- * Suite 330, Boston, MA 02111-1307 USA
- *
- * The author of this file:
- *
- */
-/*
- * The source code included in this files was separated from mbfilter.c
- * by moriyoshi koizumi <moriyoshi@php.net> on 4 dec 2002.
- *
- */
-
-#ifndef MBFL_MBFILTER_ISO8859_13_H
-#define MBFL_MBFILTER_ISO8859_13_H
-
-#include "mbfilter.h"
-
-extern const mbfl_encoding mbfl_encoding_8859_13;
-extern const struct mbfl_identify_vtbl vtbl_identify_8859_13;
-extern const struct mbfl_convert_vtbl vtbl_8859_13_wchar;
-extern const struct mbfl_convert_vtbl vtbl_wchar_8859_13;
-
-int mbfl_filt_conv_8859_13_wchar(int c, mbfl_convert_filter *filter);
-int mbfl_filt_conv_wchar_8859_13(int c, mbfl_convert_filter *filter);
-
-#endif /* MBFL_MBFILTER_ISO8859_13_H */
diff --git a/ext/mbstring/libmbfl/filters/mbfilter_iso8859_14.c b/ext/mbstring/libmbfl/filters/mbfilter_iso8859_14.c
deleted file mode 100644
index c0d241c842..0000000000
--- a/ext/mbstring/libmbfl/filters/mbfilter_iso8859_14.c
+++ /dev/null
@@ -1,138 +0,0 @@
-/*
- * "streamable kanji code filter and converter"
- * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved.
- *
- * LICENSE NOTICES
- *
- * This file is part of "streamable kanji code filter and converter",
- * which is distributed under the terms of GNU Lesser General Public
- * License (version 2) as published by the Free Software Foundation.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with "streamable kanji code filter and converter";
- * if not, write to the Free Software Foundation, Inc., 59 Temple Place,
- * Suite 330, Boston, MA 02111-1307 USA
- *
- * The author of this file:
- *
- */
-/*
- * The source code included in this files was separated from mbfilter.c
- * by moriyoshi koizumi <moriyoshi@php.net> on 4 dec 2002.
- *
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "mbfilter.h"
-#include "mbfilter_iso8859_14.h"
-#include "unicode_table_iso8859_14.h"
-
-static const char *mbfl_encoding_8859_14_aliases[] = {"ISO_8859-14", "latin8", NULL};
-
-const mbfl_encoding mbfl_encoding_8859_14 = {
- mbfl_no_encoding_8859_14,
- "ISO-8859-14",
- "ISO-8859-14",
- (const char *(*)[])&mbfl_encoding_8859_14_aliases,
- NULL,
- MBFL_ENCTYPE_SBCS
-};
-
-const struct mbfl_identify_vtbl vtbl_identify_8859_14 = {
- mbfl_no_encoding_8859_14,
- mbfl_filt_ident_common_ctor,
- mbfl_filt_ident_common_dtor,
- mbfl_filt_ident_true
-};
-
-const struct mbfl_convert_vtbl vtbl_8859_14_wchar = {
- mbfl_no_encoding_8859_14,
- mbfl_no_encoding_wchar,
- mbfl_filt_conv_common_ctor,
- mbfl_filt_conv_common_dtor,
- mbfl_filt_conv_8859_14_wchar,
- mbfl_filt_conv_common_flush
-};
-
-const struct mbfl_convert_vtbl vtbl_wchar_8859_14 = {
- mbfl_no_encoding_wchar,
- mbfl_no_encoding_8859_14,
- mbfl_filt_conv_common_ctor,
- mbfl_filt_conv_common_dtor,
- mbfl_filt_conv_wchar_8859_14,
- mbfl_filt_conv_common_flush
-};
-
-#define CK(statement) do { if ((statement) < 0) return (-1); } while (0)
-
-/*
- * ISO-8859-14 => wchar
- */
-int mbfl_filt_conv_8859_14_wchar(int c, mbfl_convert_filter *filter)
-{
- int s;
-
- if (c >= 0 && c < 0xa0) {
- s = c;
- } else if (c >= 0xa0 && c < 0x100) {
- s = iso8859_14_ucs_table[c - 0xa0];
- if (s <= 0) {
- s = c;
- s &= MBFL_WCSPLANE_MASK;
- s |= MBFL_WCSPLANE_8859_14;
- }
- } else {
- s = c;
- s &= MBFL_WCSGROUP_MASK;
- s |= MBFL_WCSGROUP_THROUGH;
- }
-
- CK((*filter->output_function)(s, filter->data));
-
- return c;
-}
-
-/*
- * wchar => ISO-8859-14
- */
-int mbfl_filt_conv_wchar_8859_14(int c, mbfl_convert_filter *filter)
-{
- int s, n;
-
- if (c >= 0 && c < 0xa0) {
- s = c;
- } else {
- s = -1;
- n = 95;
- while (n >= 0) {
- if (c == iso8859_14_ucs_table[n]) {
- s = 0xa0 + n;
- break;
- }
- n--;
- }
- if (s <= 0 && (c & ~MBFL_WCSPLANE_MASK) == MBFL_WCSPLANE_8859_14) {
- s = c & MBFL_WCSPLANE_MASK;
- }
- }
-
- if (s >= 0) {
- CK((*filter->output_function)(s, filter->data));
- } else {
- if (filter->illegal_mode != MBFL_OUTPUTFILTER_ILLEGAL_MODE_NONE) {
- CK(mbfl_filt_conv_illegal_output(c, filter));
- }
- }
-
- return c;
-}
-
-
diff --git a/ext/mbstring/libmbfl/filters/mbfilter_iso8859_14.h b/ext/mbstring/libmbfl/filters/mbfilter_iso8859_14.h
deleted file mode 100644
index 0006baedb6..0000000000
--- a/ext/mbstring/libmbfl/filters/mbfilter_iso8859_14.h
+++ /dev/null
@@ -1,26 +0,0 @@
-/*
- * COPYRIGHT NOTICE
- *
- * This file is a portion of "streamable kanji code filter and converter"
- * library, which is distributed under GNU Lesser General Public License
- * version 2.1.
- *
- * The source code included in this files was separated from mbfilter.c
- * by Moriyoshi Koizumi <moriyoshi@php.net> on 4 Dec 2002.
- *
- */
-
-#ifndef MBFL_MBFILTER_ISO8859_14_H
-#define MBFL_MBFILTER_ISO8859_14_H
-
-#include "mbfilter.h"
-
-extern const mbfl_encoding mbfl_encoding_8859_14;
-extern const struct mbfl_identify_vtbl vtbl_identify_8859_14;
-extern const struct mbfl_convert_vtbl vtbl_8859_14_wchar;
-extern const struct mbfl_convert_vtbl vtbl_wchar_8859_14;
-
-int mbfl_filt_conv_8859_14_wchar(int c, mbfl_convert_filter *filter);
-int mbfl_filt_conv_wchar_8859_14(int c, mbfl_convert_filter *filter);
-
-#endif /* MBFL_MBFILTER_ISO8859_14_H */
diff --git a/ext/mbstring/libmbfl/filters/mbfilter_iso8859_15.c b/ext/mbstring/libmbfl/filters/mbfilter_iso8859_15.c
deleted file mode 100644
index af321d671f..0000000000
--- a/ext/mbstring/libmbfl/filters/mbfilter_iso8859_15.c
+++ /dev/null
@@ -1,136 +0,0 @@
-/*
- * "streamable kanji code filter and converter"
- * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved.
- *
- * LICENSE NOTICES
- *
- * This file is part of "streamable kanji code filter and converter",
- * which is distributed under the terms of GNU Lesser General Public
- * License (version 2) as published by the Free Software Foundation.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with "streamable kanji code filter and converter";
- * if not, write to the Free Software Foundation, Inc., 59 Temple Place,
- * Suite 330, Boston, MA 02111-1307 USA
- *
- * The author of this file:
- *
- */
-/*
- * The source code included in this files was separated from mbfilter.c
- * by moriyoshi koizumi <moriyoshi@php.net> on 4 dec 2002.
- *
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "mbfilter.h"
-#include "mbfilter_iso8859_15.h"
-#include "unicode_table_iso8859_15.h"
-
-static const char *mbfl_encoding_8859_15_aliases[] = {"ISO_8859-15", NULL};
-
-const mbfl_encoding mbfl_encoding_8859_15 = {
- mbfl_no_encoding_8859_15,
- "ISO-8859-15",
- "ISO-8859-15",
- (const char *(*)[])&mbfl_encoding_8859_15_aliases,
- NULL,
- MBFL_ENCTYPE_SBCS
-};
-
-const struct mbfl_identify_vtbl vtbl_identify_8859_15 = {
- mbfl_no_encoding_8859_15,
- mbfl_filt_ident_common_ctor,
- mbfl_filt_ident_common_dtor,
- mbfl_filt_ident_true
-};
-
-const struct mbfl_convert_vtbl vtbl_8859_15_wchar = {
- mbfl_no_encoding_8859_15,
- mbfl_no_encoding_wchar,
- mbfl_filt_conv_common_ctor,
- mbfl_filt_conv_common_dtor,
- mbfl_filt_conv_8859_15_wchar,
- mbfl_filt_conv_common_flush
-};
-
-const struct mbfl_convert_vtbl vtbl_wchar_8859_15 = {
- mbfl_no_encoding_wchar,
- mbfl_no_encoding_8859_15,
- mbfl_filt_conv_common_ctor,
- mbfl_filt_conv_common_dtor,
- mbfl_filt_conv_wchar_8859_15,
- mbfl_filt_conv_common_flush
-};
-
-#define CK(statement) do { if ((statement) < 0) return (-1); } while (0)
-
-/*
- * ISO-8859-15 => wchar
- */
-int mbfl_filt_conv_8859_15_wchar(int c, mbfl_convert_filter *filter)
-{
- int s;
-
- if (c >= 0 && c < 0xa0) {
- s = c;
- } else if (c >= 0xa0 && c < 0x100) {
- s = iso8859_15_ucs_table[c - 0xa0];
- if (s <= 0) {
- s = c;
- s &= MBFL_WCSPLANE_MASK;
- s |= MBFL_WCSPLANE_8859_15;
- }
- } else {
- s = c;
- s &= MBFL_WCSGROUP_MASK;
- s |= MBFL_WCSGROUP_THROUGH;
- }
-
- CK((*filter->output_function)(s, filter->data));
-
- return c;
-}
-
-/*
- * wchar => ISO-8859-15
- */
-int mbfl_filt_conv_wchar_8859_15(int c, mbfl_convert_filter *filter)
-{
- int s, n;
-
- if (c >= 0 && c < 0xa0) {
- s = c;
- } else {
- s = -1;
- n = 95;
- while (n >= 0) {
- if (c == iso8859_15_ucs_table[n]) {
- s = 0xa0 + n;
- break;
- }
- n--;
- }
- if (s <= 0 && (c & ~MBFL_WCSPLANE_MASK) == MBFL_WCSPLANE_8859_15) {
- s = c & MBFL_WCSPLANE_MASK;
- }
- }
-
- if (s >= 0) {
- CK((*filter->output_function)(s, filter->data));
- } else {
- if (filter->illegal_mode != MBFL_OUTPUTFILTER_ILLEGAL_MODE_NONE) {
- CK(mbfl_filt_conv_illegal_output(c, filter));
- }
- }
-
- return c;
-}
diff --git a/ext/mbstring/libmbfl/filters/mbfilter_iso8859_15.h b/ext/mbstring/libmbfl/filters/mbfilter_iso8859_15.h
deleted file mode 100644
index b5054dec2c..0000000000
--- a/ext/mbstring/libmbfl/filters/mbfilter_iso8859_15.h
+++ /dev/null
@@ -1,26 +0,0 @@
-/*
- * COPYRIGHT NOTICE
- *
- * This file is a portion of "streamable kanji code filter and converter"
- * library, which is distributed under GNU Lesser General Public License
- * version 2.1.
- *
- * The source code included in this files was separated from mbfilter.c
- * by Moriyoshi Koizumi <moriyoshi@php.net> on 4 Dec 2002.
- *
- */
-
-#ifndef MBFL_MBFILTER_ISO8859_15_H
-#define MBFL_MBFILTER_ISO8859_15_H
-
-#include "mbfilter.h"
-
-extern const mbfl_encoding mbfl_encoding_8859_15;
-extern const struct mbfl_identify_vtbl vtbl_identify_8859_15;
-extern const struct mbfl_convert_vtbl vtbl_8859_15_wchar;
-extern const struct mbfl_convert_vtbl vtbl_wchar_8859_15;
-
-int mbfl_filt_conv_8859_15_wchar(int c, mbfl_convert_filter *filter);
-int mbfl_filt_conv_wchar_8859_15(int c, mbfl_convert_filter *filter);
-
-#endif /* MBFL_MBFILTER_ISO8859_15_H */
diff --git a/ext/mbstring/libmbfl/filters/mbfilter_iso8859_2.c b/ext/mbstring/libmbfl/filters/mbfilter_iso8859_2.c
deleted file mode 100644
index c52c72ae62..0000000000
--- a/ext/mbstring/libmbfl/filters/mbfilter_iso8859_2.c
+++ /dev/null
@@ -1,139 +0,0 @@
-/*
- * "streamable kanji code filter and converter"
- * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved.
- *
- * LICENSE NOTICES
- *
- * This file is part of "streamable kanji code filter and converter",
- * which is distributed under the terms of GNU Lesser General Public
- * License (version 2) as published by the Free Software Foundation.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with "streamable kanji code filter and converter";
- * if not, write to the Free Software Foundation, Inc., 59 Temple Place,
- * Suite 330, Boston, MA 02111-1307 USA
- *
- * The author of this file:
- *
- */
-/*
- * The source code included in this files was separated from mbfilter.c
- * by moriyoshi koizumi <moriyoshi@php.net> on 4 dec 2002.
- *
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "mbfilter.h"
-#include "mbfilter_iso8859_2.h"
-#include "unicode_table_iso8859_2.h"
-
-static const char *mbfl_encoding_8859_2_aliases[] = {"ISO_8859-2", "latin2", NULL};
-
-const mbfl_encoding mbfl_encoding_8859_2 = {
- mbfl_no_encoding_8859_2,
- "ISO-8859-2",
- "ISO-8859-2",
- (const char *(*)[])&mbfl_encoding_8859_2_aliases,
- NULL,
- MBFL_ENCTYPE_SBCS
-};
-
-const struct mbfl_identify_vtbl vtbl_identify_8859_2 = {
- mbfl_no_encoding_8859_2,
- mbfl_filt_ident_common_ctor,
- mbfl_filt_ident_common_dtor,
- mbfl_filt_ident_true
-};
-
-const struct mbfl_convert_vtbl vtbl_8859_2_wchar = {
- mbfl_no_encoding_8859_2,
- mbfl_no_encoding_wchar,
- mbfl_filt_conv_common_ctor,
- mbfl_filt_conv_common_dtor,
- mbfl_filt_conv_8859_2_wchar,
- mbfl_filt_conv_common_flush
-};
-
-const struct mbfl_convert_vtbl vtbl_wchar_8859_2 = {
- mbfl_no_encoding_wchar,
- mbfl_no_encoding_8859_2,
- mbfl_filt_conv_common_ctor,
- mbfl_filt_conv_common_dtor,
- mbfl_filt_conv_wchar_8859_2,
- mbfl_filt_conv_common_flush
-};
-
-
-#define CK(statement) do { if ((statement) < 0) return (-1); } while (0)
-
-/*
- * ISO-8859-2 => wchar
- */
-int mbfl_filt_conv_8859_2_wchar(int c, mbfl_convert_filter *filter)
-{
- int s;
-
- if (c >= 0 && c < 0xa0) {
- s = c;
- } else if (c >= 0xa0 && c < 0x100) {
- s = iso8859_2_ucs_table[c - 0xa0];
- if (s <= 0) {
- s = c;
- s &= MBFL_WCSPLANE_MASK;
- s |= MBFL_WCSPLANE_8859_2;
- }
- } else {
- s = c;
- s &= MBFL_WCSGROUP_MASK;
- s |= MBFL_WCSGROUP_THROUGH;
- }
-
- CK((*filter->output_function)(s, filter->data));
-
- return c;
-}
-
-/*
- * wchar => ISO-8859-2
- */
-int mbfl_filt_conv_wchar_8859_2(int c, mbfl_convert_filter *filter)
-{
- int s, n;
-
- if (c >= 0 && c < 0xa0) {
- s = c;
- } else {
- s = -1;
- n = 95;
- while (n >= 0) {
- if (c == iso8859_2_ucs_table[n]) {
- s = 0xa0 + n;
- break;
- }
- n--;
- }
- if (s <= 0 && (c & ~MBFL_WCSPLANE_MASK) == MBFL_WCSPLANE_8859_2) {
- s = c & MBFL_WCSPLANE_MASK;
- }
- }
-
- if (s >= 0) {
- CK((*filter->output_function)(s, filter->data));
- } else {
- if (filter->illegal_mode != MBFL_OUTPUTFILTER_ILLEGAL_MODE_NONE) {
- CK(mbfl_filt_conv_illegal_output(c, filter));
- }
- }
-
- return c;
-}
-
-
diff --git a/ext/mbstring/libmbfl/filters/mbfilter_iso8859_2.h b/ext/mbstring/libmbfl/filters/mbfilter_iso8859_2.h
deleted file mode 100644
index 732e9194e6..0000000000
--- a/ext/mbstring/libmbfl/filters/mbfilter_iso8859_2.h
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * "streamable kanji code filter and converter"
- * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved.
- *
- * LICENSE NOTICES
- *
- * This file is part of "streamable kanji code filter and converter",
- * which is distributed under the terms of GNU Lesser General Public
- * License (version 2) as published by the Free Software Foundation.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with "streamable kanji code filter and converter";
- * if not, write to the Free Software Foundation, Inc., 59 Temple Place,
- * Suite 330, Boston, MA 02111-1307 USA
- *
- * The author of this file:
- *
- */
-/*
- * The source code included in this files was separated from mbfilter.c
- * by moriyoshi koizumi <moriyoshi@php.net> on 4 dec 2002.
- *
- */
-
-#ifndef MBFL_MBFILTER_ISO8859_2_H
-#define MBFL_MBFILTER_ISO8859_2_H
-
-#include "mbfilter.h"
-
-extern const mbfl_encoding mbfl_encoding_8859_2;
-extern const struct mbfl_identify_vtbl vtbl_identify_8859_2;
-extern const struct mbfl_convert_vtbl vtbl_8859_2_wchar;
-extern const struct mbfl_convert_vtbl vtbl_wchar_8859_2;
-
-int mbfl_filt_conv_8859_2_wchar(int c, mbfl_convert_filter *filter);
-int mbfl_filt_conv_wchar_8859_2(int c, mbfl_convert_filter *filter);
-
-#endif /* MBFL_MBFILTER_ISO8859_2_H */
diff --git a/ext/mbstring/libmbfl/filters/mbfilter_iso8859_3.c b/ext/mbstring/libmbfl/filters/mbfilter_iso8859_3.c
deleted file mode 100644
index d47098ceb5..0000000000
--- a/ext/mbstring/libmbfl/filters/mbfilter_iso8859_3.c
+++ /dev/null
@@ -1,139 +0,0 @@
-/*
- * "streamable kanji code filter and converter"
- * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved.
- *
- * LICENSE NOTICES
- *
- * This file is part of "streamable kanji code filter and converter",
- * which is distributed under the terms of GNU Lesser General Public
- * License (version 2) as published by the Free Software Foundation.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with "streamable kanji code filter and converter";
- * if not, write to the Free Software Foundation, Inc., 59 Temple Place,
- * Suite 330, Boston, MA 02111-1307 USA
- *
- * The author of this file:
- *
- */
-/*
- * The source code included in this files was separated from mbfilter.c
- * by moriyoshi koizumi <moriyoshi@php.net> on 4 dec 2002.
- *
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "mbfilter.h"
-#include "mbfilter_iso8859_3.h"
-#include "unicode_table_iso8859_3.h"
-
-static const char *mbfl_encoding_8859_3_aliases[] = {"ISO_8859-3", "latin3", NULL};
-
-const mbfl_encoding mbfl_encoding_8859_3 = {
- mbfl_no_encoding_8859_3,
- "ISO-8859-3",
- "ISO-8859-3",
- (const char *(*)[])&mbfl_encoding_8859_3_aliases,
- NULL,
- MBFL_ENCTYPE_SBCS
-};
-
-const struct mbfl_identify_vtbl vtbl_identify_8859_3 = {
- mbfl_no_encoding_8859_3,
- mbfl_filt_ident_common_ctor,
- mbfl_filt_ident_common_dtor,
- mbfl_filt_ident_true
-};
-
-const struct mbfl_convert_vtbl vtbl_8859_3_wchar = {
- mbfl_no_encoding_8859_3,
- mbfl_no_encoding_wchar,
- mbfl_filt_conv_common_ctor,
- mbfl_filt_conv_common_dtor,
- mbfl_filt_conv_8859_3_wchar,
- mbfl_filt_conv_common_flush
-};
-
-const struct mbfl_convert_vtbl vtbl_wchar_8859_3 = {
- mbfl_no_encoding_wchar,
- mbfl_no_encoding_8859_3,
- mbfl_filt_conv_common_ctor,
- mbfl_filt_conv_common_dtor,
- mbfl_filt_conv_wchar_8859_3,
- mbfl_filt_conv_common_flush
-};
-
-
-#define CK(statement) do { if ((statement) < 0) return (-1); } while (0)
-
-/*
- * ISO-8859-3 => wchar
- */
-int mbfl_filt_conv_8859_3_wchar(int c, mbfl_convert_filter *filter)
-{
- int s;
-
- if (c >= 0 && c < 0xa0) {
- s = c;
- } else if (c >= 0xa0 && c < 0x100) {
- s = iso8859_3_ucs_table[c - 0xa0];
- if (s <= 0) {
- s = c;
- s &= MBFL_WCSPLANE_MASK;
- s |= MBFL_WCSPLANE_8859_3;
- }
- } else {
- s = c;
- s &= MBFL_WCSGROUP_MASK;
- s |= MBFL_WCSGROUP_THROUGH;
- }
-
- CK((*filter->output_function)(s, filter->data));
-
- return c;
-}
-
-/*
- * wchar => ISO-8859-3
- */
-int mbfl_filt_conv_wchar_8859_3(int c, mbfl_convert_filter *filter)
-{
- int s, n;
-
- if (c >= 0 && c < 0xa0) {
- s = c;
- } else {
- s = -1;
- n = 95;
- while (n >= 0) {
- if (c == iso8859_3_ucs_table[n]) {
- s = 0xa0 + n;
- break;
- }
- n--;
- }
- if (s <= 0 && (c & ~MBFL_WCSPLANE_MASK) == MBFL_WCSPLANE_8859_3) {
- s = c & MBFL_WCSPLANE_MASK;
- }
- }
-
- if (s >= 0) {
- CK((*filter->output_function)(s, filter->data));
- } else {
- if (filter->illegal_mode != MBFL_OUTPUTFILTER_ILLEGAL_MODE_NONE) {
- CK(mbfl_filt_conv_illegal_output(c, filter));
- }
- }
-
- return c;
-}
-
-
diff --git a/ext/mbstring/libmbfl/filters/mbfilter_iso8859_3.h b/ext/mbstring/libmbfl/filters/mbfilter_iso8859_3.h
deleted file mode 100644
index 88ab3be6cd..0000000000
--- a/ext/mbstring/libmbfl/filters/mbfilter_iso8859_3.h
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * "streamable kanji code filter and converter"
- * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved.
- *
- * LICENSE NOTICES
- *
- * This file is part of "streamable kanji code filter and converter",
- * which is distributed under the terms of GNU Lesser General Public
- * License (version 2) as published by the Free Software Foundation.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with "streamable kanji code filter and converter";
- * if not, write to the Free Software Foundation, Inc., 59 Temple Place,
- * Suite 330, Boston, MA 02111-1307 USA
- *
- * The author of this file:
- *
- */
-/*
- * The source code included in this files was separated from mbfilter.c
- * by moriyoshi koizumi <moriyoshi@php.net> on 4 dec 2002.
- *
- */
-
-#ifndef MBFL_MBFILTER_ISO8859_3_H
-#define MBFL_MBFILTER_ISO8859_3_H
-
-#include "mbfilter.h"
-
-extern const mbfl_encoding mbfl_encoding_8859_3;
-extern const struct mbfl_identify_vtbl vtbl_identify_8859_3;
-extern const struct mbfl_convert_vtbl vtbl_8859_3_wchar;
-extern const struct mbfl_convert_vtbl vtbl_wchar_8859_3;
-
-int mbfl_filt_conv_8859_3_wchar(int c, mbfl_convert_filter *filter);
-int mbfl_filt_conv_wchar_8859_3(int c, mbfl_convert_filter *filter);
-
-#endif /* MBFL_MBFILTER_ISO8859_3_H */
diff --git a/ext/mbstring/libmbfl/filters/mbfilter_iso8859_4.c b/ext/mbstring/libmbfl/filters/mbfilter_iso8859_4.c
deleted file mode 100644
index 65c539eb4a..0000000000
--- a/ext/mbstring/libmbfl/filters/mbfilter_iso8859_4.c
+++ /dev/null
@@ -1,137 +0,0 @@
-/*
- * "streamable kanji code filter and converter"
- * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved.
- *
- * LICENSE NOTICES
- *
- * This file is part of "streamable kanji code filter and converter",
- * which is distributed under the terms of GNU Lesser General Public
- * License (version 2) as published by the Free Software Foundation.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with "streamable kanji code filter and converter";
- * if not, write to the Free Software Foundation, Inc., 59 Temple Place,
- * Suite 330, Boston, MA 02111-1307 USA
- *
- * The author of this file:
- *
- */
-/*
- * The source code included in this files was separated from mbfilter.c
- * by moriyoshi koizumi <moriyoshi@php.net> on 4 dec 2002.
- *
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "mbfilter.h"
-#include "mbfilter_iso8859_4.h"
-#include "unicode_table_iso8859_4.h"
-
-static const char *mbfl_encoding_8859_4_aliases[] = {"ISO_8859-4", "latin4", NULL};
-
-const mbfl_encoding mbfl_encoding_8859_4 = {
- mbfl_no_encoding_8859_4,
- "ISO-8859-4",
- "ISO-8859-4",
- (const char *(*)[])&mbfl_encoding_8859_4_aliases,
- NULL,
- MBFL_ENCTYPE_SBCS
-};
-
-const struct mbfl_identify_vtbl vtbl_identify_8859_4 = {
- mbfl_no_encoding_8859_4,
- mbfl_filt_ident_common_ctor,
- mbfl_filt_ident_common_dtor,
- mbfl_filt_ident_true };
-
-const struct mbfl_convert_vtbl vtbl_8859_4_wchar = {
- mbfl_no_encoding_8859_4,
- mbfl_no_encoding_wchar,
- mbfl_filt_conv_common_ctor,
- mbfl_filt_conv_common_dtor,
- mbfl_filt_conv_8859_4_wchar,
- mbfl_filt_conv_common_flush
-};
-
-const struct mbfl_convert_vtbl vtbl_wchar_8859_4 = {
- mbfl_no_encoding_wchar,
- mbfl_no_encoding_8859_4,
- mbfl_filt_conv_common_ctor,
- mbfl_filt_conv_common_dtor,
- mbfl_filt_conv_wchar_8859_4,
- mbfl_filt_conv_common_flush
-};
-
-#define CK(statement) do { if ((statement) < 0) return (-1); } while (0)
-
-/*
- * ISO-8859-4 => wchar
- */
-int mbfl_filt_conv_8859_4_wchar(int c, mbfl_convert_filter *filter)
-{
- int s;
-
- if (c >= 0 && c < 0xa0) {
- s = c;
- } else if (c >= 0xa0 && c < 0x100) {
- s = iso8859_4_ucs_table[c - 0xa0];
- if (s <= 0) {
- s = c;
- s &= MBFL_WCSPLANE_MASK;
- s |= MBFL_WCSPLANE_8859_4;
- }
- } else {
- s = c;
- s &= MBFL_WCSGROUP_MASK;
- s |= MBFL_WCSGROUP_THROUGH;
- }
-
- CK((*filter->output_function)(s, filter->data));
-
- return c;
-}
-
-/*
- * wchar => ISO-8859-4
- */
-int mbfl_filt_conv_wchar_8859_4(int c, mbfl_convert_filter *filter)
-{
- int s, n;
-
- if (c >= 0 && c < 0xa0) {
- s = c;
- } else {
- s = -1;
- n = 95;
- while (n >= 0) {
- if (c == iso8859_4_ucs_table[n]) {
- s = 0xa0 + n;
- break;
- }
- n--;
- }
- if (s <= 0 && (c & ~MBFL_WCSPLANE_MASK) == MBFL_WCSPLANE_8859_4) {
- s = c & MBFL_WCSPLANE_MASK;
- }
- }
-
- if (s >= 0) {
- CK((*filter->output_function)(s, filter->data));
- } else {
- if (filter->illegal_mode != MBFL_OUTPUTFILTER_ILLEGAL_MODE_NONE) {
- CK(mbfl_filt_conv_illegal_output(c, filter));
- }
- }
-
- return c;
-}
-
-
diff --git a/ext/mbstring/libmbfl/filters/mbfilter_iso8859_4.h b/ext/mbstring/libmbfl/filters/mbfilter_iso8859_4.h
deleted file mode 100644
index c68239100a..0000000000
--- a/ext/mbstring/libmbfl/filters/mbfilter_iso8859_4.h
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * "streamable kanji code filter and converter"
- * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved.
- *
- * LICENSE NOTICES
- *
- * This file is part of "streamable kanji code filter and converter",
- * which is distributed under the terms of GNU Lesser General Public
- * License (version 2) as published by the Free Software Foundation.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with "streamable kanji code filter and converter";
- * if not, write to the Free Software Foundation, Inc., 59 Temple Place,
- * Suite 330, Boston, MA 02111-1307 USA
- *
- * The author of this file:
- *
- */
-/*
- * The source code included in this files was separated from mbfilter.c
- * by moriyoshi koizumi <moriyoshi@php.net> on 4 dec 2002.
- *
- */
-
-#ifndef MBFL_MBFILTER_ISO8859_4_H
-#define MBFL_MBFILTER_ISO8859_4_H
-
-extern const mbfl_encoding mbfl_encoding_8859_4;
-extern const struct mbfl_identify_vtbl vtbl_identify_8859_4;
-extern const struct mbfl_convert_vtbl vtbl_8859_4_wchar;
-extern const struct mbfl_convert_vtbl vtbl_wchar_8859_4;
-
-int mbfl_filt_conv_8859_4_wchar(int c, mbfl_convert_filter *filter);
-int mbfl_filt_conv_wchar_8859_4(int c, mbfl_convert_filter *filter);
-
-#endif /* MBFL_MBFILTER_ISO8859_4_H */
diff --git a/ext/mbstring/libmbfl/filters/mbfilter_iso8859_5.c b/ext/mbstring/libmbfl/filters/mbfilter_iso8859_5.c
deleted file mode 100644
index 3a41398bf3..0000000000
--- a/ext/mbstring/libmbfl/filters/mbfilter_iso8859_5.c
+++ /dev/null
@@ -1,139 +0,0 @@
-/*
- * "streamable kanji code filter and converter"
- * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved.
- *
- * LICENSE NOTICES
- *
- * This file is part of "streamable kanji code filter and converter",
- * which is distributed under the terms of GNU Lesser General Public
- * License (version 2) as published by the Free Software Foundation.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with "streamable kanji code filter and converter";
- * if not, write to the Free Software Foundation, Inc., 59 Temple Place,
- * Suite 330, Boston, MA 02111-1307 USA
- *
- * The author of this file:
- *
- */
-/*
- * The source code included in this files was separated from mbfilter.c
- * by moriyoshi koizumi <moriyoshi@php.net> on 4 dec 2002.
- *
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "mbfilter.h"
-#include "mbfilter_iso8859_5.h"
-#include "unicode_table_iso8859_5.h"
-
-static const char *mbfl_encoding_8859_5_aliases[] = {"ISO_8859-5", "cyrillic", NULL};
-
-const mbfl_encoding mbfl_encoding_8859_5 = {
- mbfl_no_encoding_8859_5,
- "ISO-8859-5",
- "ISO-8859-5",
- (const char *(*)[])&mbfl_encoding_8859_5_aliases,
- NULL,
- MBFL_ENCTYPE_SBCS
-};
-
-const struct mbfl_identify_vtbl vtbl_identify_8859_5 = {
- mbfl_no_encoding_8859_5,
- mbfl_filt_ident_common_ctor,
- mbfl_filt_ident_common_dtor,
- mbfl_filt_ident_true
-};
-
-const struct mbfl_convert_vtbl vtbl_8859_5_wchar = {
- mbfl_no_encoding_8859_5,
- mbfl_no_encoding_wchar,
- mbfl_filt_conv_common_ctor,
- mbfl_filt_conv_common_dtor,
- mbfl_filt_conv_8859_5_wchar,
- mbfl_filt_conv_common_flush
-};
-
-const struct mbfl_convert_vtbl vtbl_wchar_8859_5 = {
- mbfl_no_encoding_wchar,
- mbfl_no_encoding_8859_5,
- mbfl_filt_conv_common_ctor,
- mbfl_filt_conv_common_dtor,
- mbfl_filt_conv_wchar_8859_5,
- mbfl_filt_conv_common_flush
-};
-
-
-#define CK(statement) do { if ((statement) < 0) return (-1); } while (0)
-
-/*
- * ISO-8859-5 => wchar
- */
-int mbfl_filt_conv_8859_5_wchar(int c, mbfl_convert_filter *filter)
-{
- int s;
-
- if (c >= 0 && c < 0xa0) {
- s = c;
- } else if (c >= 0xa0 && c < 0x100) {
- s = iso8859_5_ucs_table[c - 0xa0];
- if (s <= 0) {
- s = c;
- s &= MBFL_WCSPLANE_MASK;
- s |= MBFL_WCSPLANE_8859_5;
- }
- } else {
- s = c;
- s &= MBFL_WCSGROUP_MASK;
- s |= MBFL_WCSGROUP_THROUGH;
- }
-
- CK((*filter->output_function)(s, filter->data));
-
- return c;
-}
-
-/*
- * wchar => ISO-8859-5
- */
-int mbfl_filt_conv_wchar_8859_5(int c, mbfl_convert_filter *filter)
-{
- int s, n;
-
- if (c >= 0 && c < 0xa0) {
- s = c;
- } else {
- s = -1;
- n = 95;
- while (n >= 0) {
- if (c == iso8859_5_ucs_table[n]) {
- s = 0xa0 + n;
- break;
- }
- n--;
- }
- if (s <= 0 && (c & ~MBFL_WCSPLANE_MASK) == MBFL_WCSPLANE_8859_5) {
- s = c & MBFL_WCSPLANE_MASK;
- }
- }
-
- if (s >= 0) {
- CK((*filter->output_function)(s, filter->data));
- } else {
- if (filter->illegal_mode != MBFL_OUTPUTFILTER_ILLEGAL_MODE_NONE) {
- CK(mbfl_filt_conv_illegal_output(c, filter));
- }
- }
-
- return c;
-}
-
-
diff --git a/ext/mbstring/libmbfl/filters/mbfilter_iso8859_5.h b/ext/mbstring/libmbfl/filters/mbfilter_iso8859_5.h
deleted file mode 100644
index 531c1c1a72..0000000000
--- a/ext/mbstring/libmbfl/filters/mbfilter_iso8859_5.h
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * "streamable kanji code filter and converter"
- * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved.
- *
- * LICENSE NOTICES
- *
- * This file is part of "streamable kanji code filter and converter",
- * which is distributed under the terms of GNU Lesser General Public
- * License (version 2) as published by the Free Software Foundation.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with "streamable kanji code filter and converter";
- * if not, write to the Free Software Foundation, Inc., 59 Temple Place,
- * Suite 330, Boston, MA 02111-1307 USA
- *
- * The author of this file:
- *
- */
-/*
- * The source code included in this files was separated from mbfilter.c
- * by moriyoshi koizumi <moriyoshi@php.net> on 4 dec 2002.
- *
- */
-
-#ifndef MBFL_MBFILTER_ISO8859_5_H
-#define MBFL_MBFILTER_ISO8859_5_H
-
-#include "mbfilter.h"
-
-extern const mbfl_encoding mbfl_encoding_8859_5;
-extern const struct mbfl_identify_vtbl vtbl_identify_8859_5;
-extern const struct mbfl_convert_vtbl vtbl_8859_5_wchar;
-extern const struct mbfl_convert_vtbl vtbl_wchar_8859_5;
-
-int mbfl_filt_conv_8859_5_wchar(int c, mbfl_convert_filter *filter);
-int mbfl_filt_conv_wchar_8859_5(int c, mbfl_convert_filter *filter);
-
-#endif /* MBFL_MBFILTER_ISO8859_5_H */
diff --git a/ext/mbstring/libmbfl/filters/mbfilter_iso8859_6.c b/ext/mbstring/libmbfl/filters/mbfilter_iso8859_6.c
deleted file mode 100644
index 9823064e7e..0000000000
--- a/ext/mbstring/libmbfl/filters/mbfilter_iso8859_6.c
+++ /dev/null
@@ -1,139 +0,0 @@
-/*
- * "streamable kanji code filter and converter"
- * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved.
- *
- * LICENSE NOTICES
- *
- * This file is part of "streamable kanji code filter and converter",
- * which is distributed under the terms of GNU Lesser General Public
- * License (version 2) as published by the Free Software Foundation.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with "streamable kanji code filter and converter";
- * if not, write to the Free Software Foundation, Inc., 59 Temple Place,
- * Suite 330, Boston, MA 02111-1307 USA
- *
- * The author of this file:
- *
- */
-/*
- * The source code included in this files was separated from mbfilter.c
- * by moriyoshi koizumi <moriyoshi@php.net> on 4 dec 2002.
- *
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "mbfilter.h"
-#include "mbfilter_iso8859_6.h"
-#include "unicode_table_iso8859_6.h"
-
-static const char *mbfl_encoding_8859_6_aliases[] = {"ISO_8859-6", "arabic", NULL};
-
-const mbfl_encoding mbfl_encoding_8859_6 = {
- mbfl_no_encoding_8859_6,
- "ISO-8859-6",
- "ISO-8859-6",
- (const char *(*)[])&mbfl_encoding_8859_6_aliases,
- NULL,
- MBFL_ENCTYPE_SBCS
-};
-
-const struct mbfl_identify_vtbl vtbl_identify_8859_6 = {
- mbfl_no_encoding_8859_6,
- mbfl_filt_ident_common_ctor,
- mbfl_filt_ident_common_dtor,
- mbfl_filt_ident_true
-};
-
-const struct mbfl_convert_vtbl vtbl_8859_6_wchar = {
- mbfl_no_encoding_8859_6,
- mbfl_no_encoding_wchar,
- mbfl_filt_conv_common_ctor,
- mbfl_filt_conv_common_dtor,
- mbfl_filt_conv_8859_6_wchar,
- mbfl_filt_conv_common_flush
-};
-
-const struct mbfl_convert_vtbl vtbl_wchar_8859_6 = {
- mbfl_no_encoding_wchar,
- mbfl_no_encoding_8859_6,
- mbfl_filt_conv_common_ctor,
- mbfl_filt_conv_common_dtor,
- mbfl_filt_conv_wchar_8859_6,
- mbfl_filt_conv_common_flush
-};
-
-
-#define CK(statement) do { if ((statement) < 0) return (-1); } while (0)
-
-/*
- * ISO-8859-6 => wchar
- */
-int mbfl_filt_conv_8859_6_wchar(int c, mbfl_convert_filter *filter)
-{
- int s;
-
- if (c >= 0 && c < 0xa0) {
- s = c;
- } else if (c >= 0xa0 && c < 0x100) {
- s = iso8859_6_ucs_table[c - 0xa0];
- if (s <= 0) {
- s = c;
- s &= MBFL_WCSPLANE_MASK;
- s |= MBFL_WCSPLANE_8859_6;
- }
- } else {
- s = c;
- s &= MBFL_WCSGROUP_MASK;
- s |= MBFL_WCSGROUP_THROUGH;
- }
-
- CK((*filter->output_function)(s, filter->data));
-
- return c;
-}
-
-/*
- * wchar => ISO-8859-6
- */
-int mbfl_filt_conv_wchar_8859_6(int c, mbfl_convert_filter *filter)
-{
- int s, n;
-
- if (c >= 0 && c < 0xa0) {
- s = c;
- } else {
- s = -1;
- n = 95;
- while (n >= 0) {
- if (c == iso8859_6_ucs_table[n]) {
- s = 0xa0 + n;
- break;
- }
- n--;
- }
- if (s <= 0 && (c & ~MBFL_WCSPLANE_MASK) == MBFL_WCSPLANE_8859_6) {
- s = c & MBFL_WCSPLANE_MASK;
- }
- }
-
- if (s >= 0) {
- CK((*filter->output_function)(s, filter->data));
- } else {
- if (filter->illegal_mode != MBFL_OUTPUTFILTER_ILLEGAL_MODE_NONE) {
- CK(mbfl_filt_conv_illegal_output(c, filter));
- }
- }
-
- return c;
-}
-
-
diff --git a/ext/mbstring/libmbfl/filters/mbfilter_iso8859_6.h b/ext/mbstring/libmbfl/filters/mbfilter_iso8859_6.h
deleted file mode 100644
index bc27f3eb31..0000000000
--- a/ext/mbstring/libmbfl/filters/mbfilter_iso8859_6.h
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * "streamable kanji code filter and converter"
- * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved.
- *
- * LICENSE NOTICES
- *
- * This file is part of "streamable kanji code filter and converter",
- * which is distributed under the terms of GNU Lesser General Public
- * License (version 2) as published by the Free Software Foundation.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with "streamable kanji code filter and converter";
- * if not, write to the Free Software Foundation, Inc., 59 Temple Place,
- * Suite 330, Boston, MA 02111-1307 USA
- *
- * The author of this file:
- *
- */
-/*
- * The source code included in this files was separated from mbfilter.c
- * by moriyoshi koizumi <moriyoshi@php.net> on 4 dec 2002.
- *
- */
-
-#ifndef MBFL_MBFILTER_ISO8859_6_H
-#define MBFL_MBFILTER_ISO8859_6_H
-
-#include "mbfilter.h"
-
-extern const mbfl_encoding mbfl_encoding_8859_6;
-extern const struct mbfl_identify_vtbl vtbl_identify_8859_6;
-extern const struct mbfl_convert_vtbl vtbl_8859_6_wchar;
-extern const struct mbfl_convert_vtbl vtbl_wchar_8859_6;
-
-int mbfl_filt_conv_8859_6_wchar(int c, mbfl_convert_filter *filter);
-int mbfl_filt_conv_wchar_8859_6(int c, mbfl_convert_filter *filter);
-
-#endif /* MBFL_MBFILTER_ISO8859_6_H */
diff --git a/ext/mbstring/libmbfl/filters/mbfilter_iso8859_7.c b/ext/mbstring/libmbfl/filters/mbfilter_iso8859_7.c
deleted file mode 100644
index a02ce7fb67..0000000000
--- a/ext/mbstring/libmbfl/filters/mbfilter_iso8859_7.c
+++ /dev/null
@@ -1,139 +0,0 @@
-/*
- * "streamable kanji code filter and converter"
- * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved.
- *
- * LICENSE NOTICES
- *
- * This file is part of "streamable kanji code filter and converter",
- * which is distributed under the terms of GNU Lesser General Public
- * License (version 2) as published by the Free Software Foundation.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with "streamable kanji code filter and converter";
- * if not, write to the Free Software Foundation, Inc., 59 Temple Place,
- * Suite 330, Boston, MA 02111-1307 USA
- *
- * The author of this file:
- *
- */
-/*
- * The source code included in this files was separated from mbfilter.c
- * by moriyoshi koizumi <moriyoshi@php.net> on 4 dec 2002.
- *
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "mbfilter.h"
-#include "mbfilter_iso8859_7.h"
-#include "unicode_table_iso8859_7.h"
-
-static const char *mbfl_encoding_8859_7_aliases[] = {"ISO_8859-7", "greek", NULL};
-
-const mbfl_encoding mbfl_encoding_8859_7 = {
- mbfl_no_encoding_8859_7,
- "ISO-8859-7",
- "ISO-8859-7",
- (const char *(*)[])&mbfl_encoding_8859_7_aliases,
- NULL,
- MBFL_ENCTYPE_SBCS
-};
-
-const struct mbfl_identify_vtbl vtbl_identify_8859_7 = {
- mbfl_no_encoding_8859_7,
- mbfl_filt_ident_common_ctor,
- mbfl_filt_ident_common_dtor,
- mbfl_filt_ident_true
-};
-
-const struct mbfl_convert_vtbl vtbl_8859_7_wchar = {
- mbfl_no_encoding_8859_7,
- mbfl_no_encoding_wchar,
- mbfl_filt_conv_common_ctor,
- mbfl_filt_conv_common_dtor,
- mbfl_filt_conv_8859_7_wchar,
- mbfl_filt_conv_common_flush
-};
-
-const struct mbfl_convert_vtbl vtbl_wchar_8859_7 = {
- mbfl_no_encoding_wchar,
- mbfl_no_encoding_8859_7,
- mbfl_filt_conv_common_ctor,
- mbfl_filt_conv_common_dtor,
- mbfl_filt_conv_wchar_8859_7,
- mbfl_filt_conv_common_flush
-};
-
-
-#define CK(statement) do { if ((statement) < 0) return (-1); } while (0)
-
-/*
- * ISO-8859-7 => wchar
- */
-int mbfl_filt_conv_8859_7_wchar(int c, mbfl_convert_filter *filter)
-{
- int s;
-
- if (c >= 0 && c < 0xa0) {
- s = c;
- } else if (c >= 0xa0 && c < 0x100) {
- s = iso8859_7_ucs_table[c - 0xa0];
- if (s <= 0) {
- s = c;
- s &= MBFL_WCSPLANE_MASK;
- s |= MBFL_WCSPLANE_8859_7;
- }
- } else {
- s = c;
- s &= MBFL_WCSGROUP_MASK;
- s |= MBFL_WCSGROUP_THROUGH;
- }
-
- CK((*filter->output_function)(s, filter->data));
-
- return c;
-}
-
-/*
- * wchar => ISO-8859-7
- */
-int mbfl_filt_conv_wchar_8859_7(int c, mbfl_convert_filter *filter)
-{
- int s, n;
-
- if (c >= 0 && c < 0xa0) {
- s = c;
- } else {
- s = -1;
- n = 95;
- while (n >= 0) {
- if (c == iso8859_7_ucs_table[n]) {
- s = 0xa0 + n;
- break;
- }
- n--;
- }
- if (s <= 0 && (c & ~MBFL_WCSPLANE_MASK) == MBFL_WCSPLANE_8859_7) {
- s = c & MBFL_WCSPLANE_MASK;
- }
- }
-
- if (s >= 0) {
- CK((*filter->output_function)(s, filter->data));
- } else {
- if (filter->illegal_mode != MBFL_OUTPUTFILTER_ILLEGAL_MODE_NONE) {
- CK(mbfl_filt_conv_illegal_output(c, filter));
- }
- }
-
- return c;
-}
-
-
diff --git a/ext/mbstring/libmbfl/filters/mbfilter_iso8859_7.h b/ext/mbstring/libmbfl/filters/mbfilter_iso8859_7.h
deleted file mode 100644
index d3042f3e4b..0000000000
--- a/ext/mbstring/libmbfl/filters/mbfilter_iso8859_7.h
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * "streamable kanji code filter and converter"
- * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved.
- *
- * LICENSE NOTICES
- *
- * This file is part of "streamable kanji code filter and converter",
- * which is distributed under the terms of GNU Lesser General Public
- * License (version 2) as published by the Free Software Foundation.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with "streamable kanji code filter and converter";
- * if not, write to the Free Software Foundation, Inc., 59 Temple Place,
- * Suite 330, Boston, MA 02111-1307 USA
- *
- * The author of this file:
- *
- */
-/*
- * The source code included in this files was separated from mbfilter.c
- * by moriyoshi koizumi <moriyoshi@php.net> on 4 dec 2002.
- *
- */
-
-#ifndef MBFL_MBFILTER_ISO8859_7_H
-#define MBFL_MBFILTER_ISO8859_7_H
-
-#include "mbfilter.h"
-
-extern const mbfl_encoding mbfl_encoding_8859_7;
-extern const struct mbfl_identify_vtbl vtbl_identify_8859_7;
-extern const struct mbfl_convert_vtbl vtbl_8859_7_wchar;
-extern const struct mbfl_convert_vtbl vtbl_wchar_8859_7;
-
-int mbfl_filt_conv_8859_7_wchar(int c, mbfl_convert_filter *filter);
-int mbfl_filt_conv_wchar_8859_7(int c, mbfl_convert_filter *filter);
-
-#endif /* MBFL_MBFILTER_ISO8859_7_H */
diff --git a/ext/mbstring/libmbfl/filters/mbfilter_iso8859_8.c b/ext/mbstring/libmbfl/filters/mbfilter_iso8859_8.c
deleted file mode 100644
index fa4571aa31..0000000000
--- a/ext/mbstring/libmbfl/filters/mbfilter_iso8859_8.c
+++ /dev/null
@@ -1,137 +0,0 @@
-/*
- * "streamable kanji code filter and converter"
- * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved.
- *
- * LICENSE NOTICES
- *
- * This file is part of "streamable kanji code filter and converter",
- * which is distributed under the terms of GNU Lesser General Public
- * License (version 2) as published by the Free Software Foundation.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with "streamable kanji code filter and converter";
- * if not, write to the Free Software Foundation, Inc., 59 Temple Place,
- * Suite 330, Boston, MA 02111-1307 USA
- *
- * The author of this file:
- *
- */
-/*
- * The source code included in this files was separated from mbfilter.c
- * by moriyoshi koizumi <moriyoshi@php.net> on 4 dec 2002.
- *
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "mbfilter.h"
-#include "mbfilter_iso8859_8.h"
-#include "unicode_table_iso8859_8.h"
-
-static const char *mbfl_encoding_8859_8_aliases[] = {"ISO_8859-8", "hebrew", NULL};
-
-const mbfl_encoding mbfl_encoding_8859_8 = {
- mbfl_no_encoding_8859_8,
- "ISO-8859-8",
- "ISO-8859-8",
- (const char *(*)[])&mbfl_encoding_8859_8_aliases,
- NULL,
- MBFL_ENCTYPE_SBCS
-};
-
-const struct mbfl_identify_vtbl vtbl_identify_8859_8 = {
- mbfl_no_encoding_8859_8,
- mbfl_filt_ident_common_ctor,
- mbfl_filt_ident_common_dtor,
- mbfl_filt_ident_true
-};
-
-const struct mbfl_convert_vtbl vtbl_8859_8_wchar = {
- mbfl_no_encoding_8859_8,
- mbfl_no_encoding_wchar,
- mbfl_filt_conv_common_ctor,
- mbfl_filt_conv_common_dtor,
- mbfl_filt_conv_8859_8_wchar,
- mbfl_filt_conv_common_flush
-};
-
-const struct mbfl_convert_vtbl vtbl_wchar_8859_8 = {
- mbfl_no_encoding_wchar,
- mbfl_no_encoding_8859_8,
- mbfl_filt_conv_common_ctor,
- mbfl_filt_conv_common_dtor,
- mbfl_filt_conv_wchar_8859_8,
- mbfl_filt_conv_common_flush
-};
-
-#define CK(statement) do { if ((statement) < 0) return (-1); } while (0)
-
-/*
- * ISO-8859-8 => wchar
- */
-int mbfl_filt_conv_8859_8_wchar(int c, mbfl_convert_filter *filter)
-{
- int s;
-
- if (c >= 0 && c < 0xa0) {
- s = c;
- } else if (c >= 0xa0 && c < 0x100) {
- s = iso8859_8_ucs_table[c - 0xa0];
- if (s <= 0) {
- s = c;
- s &= MBFL_WCSPLANE_MASK;
- s |= MBFL_WCSPLANE_8859_8;
- }
- } else {
- s = c;
- s &= MBFL_WCSGROUP_MASK;
- s |= MBFL_WCSGROUP_THROUGH;
- }
-
- CK((*filter->output_function)(s, filter->data));
-
- return c;
-}
-
-/*
- * wchar => ISO-8859-8
- */
-int mbfl_filt_conv_wchar_8859_8(int c, mbfl_convert_filter *filter)
-{
- int s, n;
-
- if (c >= 0 && c < 0xa0) {
- s = c;
- } else {
- s = -1;
- n = 95;
- while (n >= 0) {
- if (c == iso8859_8_ucs_table[n]) {
- s = 0xa0 + n;
- break;
- }
- n--;
- }
- if (s <= 0 && (c & ~MBFL_WCSPLANE_MASK) == MBFL_WCSPLANE_8859_8) {
- s = c & MBFL_WCSPLANE_MASK;
- }
- }
-
- if (s >= 0) {
- CK((*filter->output_function)(s, filter->data));
- } else {
- if (filter->illegal_mode != MBFL_OUTPUTFILTER_ILLEGAL_MODE_NONE) {
- CK(mbfl_filt_conv_illegal_output(c, filter));
- }
- }
-
- return c;
-}
-
diff --git a/ext/mbstring/libmbfl/filters/mbfilter_iso8859_8.h b/ext/mbstring/libmbfl/filters/mbfilter_iso8859_8.h
deleted file mode 100644
index 884d5095e0..0000000000
--- a/ext/mbstring/libmbfl/filters/mbfilter_iso8859_8.h
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * "streamable kanji code filter and converter"
- * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved.
- *
- * LICENSE NOTICES
- *
- * This file is part of "streamable kanji code filter and converter",
- * which is distributed under the terms of GNU Lesser General Public
- * License (version 2) as published by the Free Software Foundation.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with "streamable kanji code filter and converter";
- * if not, write to the Free Software Foundation, Inc., 59 Temple Place,
- * Suite 330, Boston, MA 02111-1307 USA
- *
- * The author of this file:
- *
- */
-/*
- * The source code included in this files was separated from mbfilter.c
- * by moriyoshi koizumi <moriyoshi@php.net> on 4 dec 2002.
- *
- */
-
-#ifndef MBFL_MBFILTER_ISO8859_8_H
-#define MBFL_MBFILTER_ISO8859_8_H
-
-#include "mbfilter.h"
-
-extern const mbfl_encoding mbfl_encoding_8859_8;
-extern const struct mbfl_identify_vtbl vtbl_identify_8859_8;
-extern const struct mbfl_convert_vtbl vtbl_8859_8_wchar;
-extern const struct mbfl_convert_vtbl vtbl_wchar_8859_8;
-
-int mbfl_filt_conv_8859_8_wchar(int c, mbfl_convert_filter *filter);
-int mbfl_filt_conv_wchar_8859_8(int c, mbfl_convert_filter *filter);
-
-#endif /* MBFL_MBFILTER_ISO8859_8_H */
diff --git a/ext/mbstring/libmbfl/filters/mbfilter_iso8859_9.c b/ext/mbstring/libmbfl/filters/mbfilter_iso8859_9.c
deleted file mode 100644
index 57d2e3777c..0000000000
--- a/ext/mbstring/libmbfl/filters/mbfilter_iso8859_9.c
+++ /dev/null
@@ -1,138 +0,0 @@
-/*
- * "streamable kanji code filter and converter"
- * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved.
- *
- * LICENSE NOTICES
- *
- * This file is part of "streamable kanji code filter and converter",
- * which is distributed under the terms of GNU Lesser General Public
- * License (version 2) as published by the Free Software Foundation.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with "streamable kanji code filter and converter";
- * if not, write to the Free Software Foundation, Inc., 59 Temple Place,
- * Suite 330, Boston, MA 02111-1307 USA
- *
- * The author of this file:
- *
- */
-/*
- * The source code included in this files was separated from mbfilter.c
- * by moriyoshi koizumi <moriyoshi@php.net> on 4 dec 2002.
- *
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "mbfilter.h"
-#include "mbfilter_iso8859_9.h"
-#include "unicode_table_iso8859_9.h"
-
-static const char *mbfl_encoding_8859_9_aliases[] = {"ISO_8859-9", "latin5", NULL};
-
-const mbfl_encoding mbfl_encoding_8859_9 = {
- mbfl_no_encoding_8859_9,
- "ISO-8859-9",
- "ISO-8859-9",
- (const char *(*)[])&mbfl_encoding_8859_9_aliases,
- NULL,
- MBFL_ENCTYPE_SBCS
-};
-
-const struct mbfl_identify_vtbl vtbl_identify_8859_9 = {
- mbfl_no_encoding_8859_9,
- mbfl_filt_ident_common_ctor,
- mbfl_filt_ident_common_dtor,
- mbfl_filt_ident_true
-};
-
-const struct mbfl_convert_vtbl vtbl_8859_9_wchar = {
- mbfl_no_encoding_8859_9,
- mbfl_no_encoding_wchar,
- mbfl_filt_conv_common_ctor,
- mbfl_filt_conv_common_dtor,
- mbfl_filt_conv_8859_9_wchar,
- mbfl_filt_conv_common_flush
-};
-
-const struct mbfl_convert_vtbl vtbl_wchar_8859_9 = {
- mbfl_no_encoding_wchar,
- mbfl_no_encoding_8859_9,
- mbfl_filt_conv_common_ctor,
- mbfl_filt_conv_common_dtor,
- mbfl_filt_conv_wchar_8859_9,
- mbfl_filt_conv_common_flush
-};
-
-#define CK(statement) do { if ((statement) < 0) return (-1); } while (0)
-
-/*
- * ISO-8859-9 => wchar
- */
-int mbfl_filt_conv_8859_9_wchar(int c, mbfl_convert_filter *filter)
-{
- int s;
-
- if (c >= 0 && c < 0xa0) {
- s = c;
- } else if (c >= 0xa0 && c < 0x100) {
- s = iso8859_9_ucs_table[c - 0xa0];
- if (s <= 0) {
- s = c;
- s &= MBFL_WCSPLANE_MASK;
- s |= MBFL_WCSPLANE_8859_9;
- }
- } else {
- s = c;
- s &= MBFL_WCSGROUP_MASK;
- s |= MBFL_WCSGROUP_THROUGH;
- }
-
- CK((*filter->output_function)(s, filter->data));
-
- return c;
-}
-
-/*
- * wchar => ISO-8859-9
- */
-int mbfl_filt_conv_wchar_8859_9(int c, mbfl_convert_filter *filter)
-{
- int s, n;
-
- if (c >= 0 && c < 0xa0) {
- s = c;
- } else {
- s = -1;
- n = 95;
- while (n >= 0) {
- if (c == iso8859_9_ucs_table[n]) {
- s = 0xa0 + n;
- break;
- }
- n--;
- }
- if (s <= 0 && (c & ~MBFL_WCSPLANE_MASK) == MBFL_WCSPLANE_8859_9) {
- s = c & MBFL_WCSPLANE_MASK;
- }
- }
-
- if (s >= 0) {
- CK((*filter->output_function)(s, filter->data));
- } else {
- if (filter->illegal_mode != MBFL_OUTPUTFILTER_ILLEGAL_MODE_NONE) {
- CK(mbfl_filt_conv_illegal_output(c, filter));
- }
- }
-
- return c;
-}
-
-
diff --git a/ext/mbstring/libmbfl/filters/mbfilter_iso8859_9.h b/ext/mbstring/libmbfl/filters/mbfilter_iso8859_9.h
deleted file mode 100644
index 3731eda82a..0000000000
--- a/ext/mbstring/libmbfl/filters/mbfilter_iso8859_9.h
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * "streamable kanji code filter and converter"
- * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved.
- *
- * LICENSE NOTICES
- *
- * This file is part of "streamable kanji code filter and converter",
- * which is distributed under the terms of GNU Lesser General Public
- * License (version 2) as published by the Free Software Foundation.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with "streamable kanji code filter and converter";
- * if not, write to the Free Software Foundation, Inc., 59 Temple Place,
- * Suite 330, Boston, MA 02111-1307 USA
- *
- * The author of this file:
- *
- */
-/*
- * The source code included in this files was separated from mbfilter.c
- * by moriyoshi koizumi <moriyoshi@php.net> on 4 dec 2002.
- *
- */
-
-#ifndef MBFL_MBFILTER_ISO8859_9_H
-#define MBFL_MBFILTER_ISO8859_9_H
-
-#include "mbfilter.h"
-
-extern const mbfl_encoding mbfl_encoding_8859_9;
-extern const struct mbfl_identify_vtbl vtbl_identify_8859_9;
-extern const struct mbfl_convert_vtbl vtbl_8859_9_wchar;
-extern const struct mbfl_convert_vtbl vtbl_wchar_8859_9;
-
-int mbfl_filt_conv_8859_9_wchar(int c, mbfl_convert_filter *filter);
-int mbfl_filt_conv_wchar_8859_9(int c, mbfl_convert_filter *filter);
-
-#endif /* MBFL_MBFILTER_ISO8859_9_H */
diff --git a/ext/mbstring/libmbfl/filters/mbfilter_jis.c b/ext/mbstring/libmbfl/filters/mbfilter_jis.c
deleted file mode 100644
index 58336d4e28..0000000000
--- a/ext/mbstring/libmbfl/filters/mbfilter_jis.c
+++ /dev/null
@@ -1,658 +0,0 @@
-/*
- * "streamable kanji code filter and converter"
- * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved.
- *
- * LICENSE NOTICES
- *
- * This file is part of "streamable kanji code filter and converter",
- * which is distributed under the terms of GNU Lesser General Public
- * License (version 2) as published by the Free Software Foundation.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with "streamable kanji code filter and converter";
- * if not, write to the Free Software Foundation, Inc., 59 Temple Place,
- * Suite 330, Boston, MA 02111-1307 USA
- *
- * The author of this file:
- *
- */
-/*
- * The source code included in this files was separated from mbfilter_ja.c
- * by moriyoshi koizumi <moriyoshi@php.net> on 4 dec 2002.
- *
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "mbfilter.h"
-#include "mbfilter_jis.h"
-
-#include "unicode_table_cp932_ext.h"
-#include "unicode_table_jis.h"
-
-static int mbfl_filt_ident_jis(int c, mbfl_identify_filter *filter);
-static int mbfl_filt_ident_2022jp(int c, mbfl_identify_filter *filter);
-
-const mbfl_encoding mbfl_encoding_jis = {
- mbfl_no_encoding_jis,
- "JIS",
- "ISO-2022-JP",
- NULL,
- NULL,
- MBFL_ENCTYPE_MBCS | MBFL_ENCTYPE_SHFTCODE
-};
-
-const mbfl_encoding mbfl_encoding_2022jp = {
- mbfl_no_encoding_2022jp,
- "ISO-2022-JP",
- "ISO-2022-JP",
- NULL,
- NULL,
- MBFL_ENCTYPE_MBCS | MBFL_ENCTYPE_SHFTCODE
-};
-
-const struct mbfl_identify_vtbl vtbl_identify_jis = {
- mbfl_no_encoding_jis,
- mbfl_filt_ident_common_ctor,
- mbfl_filt_ident_common_dtor,
- mbfl_filt_ident_jis
-};
-
-const struct mbfl_identify_vtbl vtbl_identify_2022jp = {
- mbfl_no_encoding_2022jp,
- mbfl_filt_ident_common_ctor,
- mbfl_filt_ident_common_dtor,
- mbfl_filt_ident_2022jp
-};
-
-const struct mbfl_convert_vtbl vtbl_jis_wchar = {
- mbfl_no_encoding_jis,
- mbfl_no_encoding_wchar,
- mbfl_filt_conv_common_ctor,
- mbfl_filt_conv_common_dtor,
- mbfl_filt_conv_jis_wchar,
- mbfl_filt_conv_common_flush
-};
-
-const struct mbfl_convert_vtbl vtbl_wchar_jis = {
- mbfl_no_encoding_wchar,
- mbfl_no_encoding_jis,
- mbfl_filt_conv_common_ctor,
- mbfl_filt_conv_common_dtor,
- mbfl_filt_conv_wchar_jis,
- mbfl_filt_conv_any_jis_flush
-};
-
-const struct mbfl_convert_vtbl vtbl_2022jp_wchar = {
- mbfl_no_encoding_2022jp,
- mbfl_no_encoding_wchar,
- mbfl_filt_conv_common_ctor,
- mbfl_filt_conv_common_dtor,
- mbfl_filt_conv_jis_wchar,
- mbfl_filt_conv_common_flush
-};
-
-const struct mbfl_convert_vtbl vtbl_wchar_2022jp = {
- mbfl_no_encoding_wchar,
- mbfl_no_encoding_2022jp,
- mbfl_filt_conv_common_ctor,
- mbfl_filt_conv_common_dtor,
- mbfl_filt_conv_wchar_2022jp,
- mbfl_filt_conv_any_jis_flush
-};
-
-#define CK(statement) do { if ((statement) < 0) return (-1); } while (0)
-
-/*
- * JIS => wchar
- */
-int
-mbfl_filt_conv_jis_wchar(int c, mbfl_convert_filter *filter)
-{
- int c1, s, w;
-
-retry:
- switch (filter->status & 0xf) {
-/* case 0x00: ASCII */
-/* case 0x10: X 0201 latin */
-/* case 0x20: X 0201 kana */
-/* case 0x80: X 0208 */
-/* case 0x90: X 0212 */
- case 0:
- if (c == 0x1b) {
- filter->status += 2;
- } else if (c == 0x0e) { /* "kana in" */
- filter->status = 0x20;
- } else if (c == 0x0f) { /* "kana out" */
- filter->status = 0;
- } else if (filter->status == 0x10 && c == 0x5c) { /* YEN SIGN */
- CK((*filter->output_function)(0xa5, filter->data));
- } else if (filter->status == 0x10 && c == 0x7e) { /* OVER LINE */
- CK((*filter->output_function)(0x203e, filter->data));
- } else if (filter->status == 0x20 && c > 0x20 && c < 0x60) { /* kana */
- CK((*filter->output_function)(0xff40 + c, filter->data));
- } else if ((filter->status == 0x80 || filter->status == 0x90) && c > 0x20 && c < 0x7f) { /* kanji first char */
- filter->cache = c;
- filter->status += 1;
- } else if (c >= 0 && c < 0x80) { /* latin, CTLs */
- CK((*filter->output_function)(c, filter->data));
- } else if (c > 0xa0 && c < 0xe0) { /* GR kana */
- CK((*filter->output_function)(0xfec0 + c, filter->data));
- } else {
- w = c & MBFL_WCSGROUP_MASK;
- w |= MBFL_WCSGROUP_THROUGH;
- CK((*filter->output_function)(w, filter->data));
- }
- break;
-
-/* case 0x81: X 0208 second char */
-/* case 0x91: X 0212 second char */
- case 1:
- filter->status &= ~0xf;
- c1 = filter->cache;
- if (c > 0x20 && c < 0x7f) {
- s = (c1 - 0x21)*94 + c - 0x21;
- if (filter->status == 0x80) {
- if (s >= 0 && s < jisx0208_ucs_table_size) {
- w = jisx0208_ucs_table[s];
- } else {
- w = 0;
- }
- if (w <= 0) {
- w = (c1 << 8) | c;
- w &= MBFL_WCSPLANE_MASK;
- w |= MBFL_WCSPLANE_JIS0208;
- }
- } else {
- if (s >= 0 && s < jisx0212_ucs_table_size) {
- w = jisx0212_ucs_table[s];
- } else {
- w = 0;
- }
- if (w <= 0) {
- w = (c1 << 8) | c;
- w &= MBFL_WCSPLANE_MASK;
- w |= MBFL_WCSPLANE_JIS0212;
- }
- }
- CK((*filter->output_function)(w, filter->data));
- } else if (c == 0x1b) {
- filter->status += 2;
- } else if ((c >= 0 && c < 0x21) || c == 0x7f) { /* CTLs */
- CK((*filter->output_function)(c, filter->data));
- } else {
- w = (c1 << 8) | c;
- w &= MBFL_WCSGROUP_MASK;
- w |= MBFL_WCSGROUP_THROUGH;
- CK((*filter->output_function)(w, filter->data));
- }
- break;
-
- /* ESC */
-/* case 0x02: */
-/* case 0x12: */
-/* case 0x22: */
-/* case 0x82: */
-/* case 0x92: */
- case 2:
- if (c == 0x24) { /* '$' */
- filter->status++;
- } else if (c == 0x28) { /* '(' */
- filter->status += 3;
- } else {
- filter->status &= ~0xf;
- CK((*filter->output_function)(0x1b, filter->data));
- goto retry;
- }
- break;
-
- /* ESC $ */
-/* case 0x03: */
-/* case 0x13: */
-/* case 0x23: */
-/* case 0x83: */
-/* case 0x93: */
- case 3:
- if (c == 0x40 || c == 0x42) { /* '@' or 'B' */
- filter->status = 0x80;
- } else if (c == 0x28) { /* '(' */
- filter->status++;
- } else {
- filter->status &= ~0xf;
- CK((*filter->output_function)(0x1b, filter->data));
- CK((*filter->output_function)(0x24, filter->data));
- goto retry;
- }
- break;
-
- /* ESC $ ( */
-/* case 0x04: */
-/* case 0x14: */
-/* case 0x24: */
-/* case 0x84: */
-/* case 0x94: */
- case 4:
- if (c == 0x40 || c == 0x42) { /* '@' or 'B' */
- filter->status = 0x80;
- } else if (c == 0x44) { /* 'D' */
- filter->status = 0x90;
- } else {
- filter->status &= ~0xf;
- CK((*filter->output_function)(0x1b, filter->data));
- CK((*filter->output_function)(0x24, filter->data));
- CK((*filter->output_function)(0x28, filter->data));
- goto retry;
- }
- break;
-
- /* ESC ( */
-/* case 0x05: */
-/* case 0x15: */
-/* case 0x25: */
-/* case 0x85: */
-/* case 0x95: */
- case 5:
- if (c == 0x42 || c == 0x48) { /* 'B' or 'H' */
- filter->status = 0;
- } else if (c == 0x4a) { /* 'J' */
- filter->status = 0x10;
- } else if (c == 0x49) { /* 'I' */
- filter->status = 0x20;
- } else {
- filter->status &= ~0xf;
- CK((*filter->output_function)(0x1b, filter->data));
- CK((*filter->output_function)(0x28, filter->data));
- goto retry;
- }
- break;
-
- default:
- filter->status = 0;
- break;
- }
-
- return c;
-}
-
-/*
- * wchar => JIS
- */
-int
-mbfl_filt_conv_wchar_jis(int c, mbfl_convert_filter *filter)
-{
- int c1, s;
-
- s = 0;
- if (c >= ucs_a1_jis_table_min && c < ucs_a1_jis_table_max) {
- s = ucs_a1_jis_table[c - ucs_a1_jis_table_min];
- } else if (c >= ucs_a2_jis_table_min && c < ucs_a2_jis_table_max) {
- s = ucs_a2_jis_table[c - ucs_a2_jis_table_min];
- } else if (c >= ucs_i_jis_table_min && c < ucs_i_jis_table_max) {
- s = ucs_i_jis_table[c - ucs_i_jis_table_min];
- } else if (c >= ucs_r_jis_table_min && c < ucs_r_jis_table_max) {
- s = ucs_r_jis_table[c - ucs_r_jis_table_min];
- }
- if (s <= 0) {
- c1 = c & ~MBFL_WCSPLANE_MASK;
- if (c1 == MBFL_WCSPLANE_JIS0208) {
- s = c & MBFL_WCSPLANE_MASK;
- } else if (c1 == MBFL_WCSPLANE_JIS0212) {
- s = c & MBFL_WCSPLANE_MASK;
- s |= 0x8080;
- } else if (c == 0xa5) { /* YEN SIGN */
- s = 0x1005c;
- } else if (c == 0x203e) { /* OVER LINE */
- s = 0x1007e;
- } else if (c == 0xff3c) { /* FULLWIDTH REVERSE SOLIDUS */
- s = 0x2140;
- } else if (c == 0xff5e) { /* FULLWIDTH TILDE */
- s = 0x2141;
- } else if (c == 0x2225) { /* PARALLEL TO */
- s = 0x2142;
- } else if (c == 0xff0d) { /* FULLWIDTH HYPHEN-MINUS */
- s = 0x215d;
- } else if (c == 0xffe0) { /* FULLWIDTH CENT SIGN */
- s = 0x2171;
- } else if (c == 0xffe1) { /* FULLWIDTH POUND SIGN */
- s = 0x2172;
- } else if (c == 0xffe2) { /* FULLWIDTH NOT SIGN */
- s = 0x224c;
- }
- if (c == 0) {
- s = 0;
- } else if (s <= 0) {
- s = -1;
- }
- }
- if (s >= 0) {
- if (s < 0x80) { /* ASCII */
- if ((filter->status & 0xff00) != 0) {
- CK((*filter->output_function)(0x1b, filter->data)); /* ESC */
- CK((*filter->output_function)(0x28, filter->data)); /* '(' */
- CK((*filter->output_function)(0x42, filter->data)); /* 'B' */
- }
- filter->status = 0;
- CK((*filter->output_function)(s, filter->data));
- } else if (s < 0x100) { /* kana */
- if ((filter->status & 0xff00) != 0x100) {
- CK((*filter->output_function)(0x1b, filter->data)); /* ESC */
- CK((*filter->output_function)(0x28, filter->data)); /* '(' */
- CK((*filter->output_function)(0x49, filter->data)); /* 'I' */
- }
- filter->status = 0x100;
- CK((*filter->output_function)(s & 0x7f, filter->data));
- } else if (s < 0x8080) { /* X 0208 */
- if ((filter->status & 0xff00) != 0x200) {
- CK((*filter->output_function)(0x1b, filter->data)); /* ESC */
- CK((*filter->output_function)(0x24, filter->data)); /* '$' */
- CK((*filter->output_function)(0x42, filter->data)); /* 'B' */
- }
- filter->status = 0x200;
- CK((*filter->output_function)((s >> 8) & 0x7f, filter->data));
- CK((*filter->output_function)(s & 0x7f, filter->data));
- } else if (s < 0x10000) { /* X 0212 */
- if ((filter->status & 0xff00) != 0x300) {
- CK((*filter->output_function)(0x1b, filter->data)); /* ESC */
- CK((*filter->output_function)(0x24, filter->data)); /* '$' */
- CK((*filter->output_function)(0x28, filter->data)); /* '(' */
- CK((*filter->output_function)(0x44, filter->data)); /* 'D' */
- }
- filter->status = 0x300;
- CK((*filter->output_function)((s >> 8) & 0x7f, filter->data));
- CK((*filter->output_function)(s & 0x7f, filter->data));
- } else { /* X 0201 latin */
- if ((filter->status & 0xff00) != 0x400) {
- CK((*filter->output_function)(0x1b, filter->data)); /* ESC */
- CK((*filter->output_function)(0x28, filter->data)); /* '(' */
- CK((*filter->output_function)(0x4a, filter->data)); /* 'J' */
- }
- filter->status = 0x400;
- CK((*filter->output_function)(s & 0x7f, filter->data));
- }
- } else {
- if (filter->illegal_mode != MBFL_OUTPUTFILTER_ILLEGAL_MODE_NONE) {
- CK(mbfl_filt_conv_illegal_output(c, filter));
- }
- }
-
- return c;
-}
-
-
-/*
- * wchar => ISO-2022-JP
- */
-int
-mbfl_filt_conv_wchar_2022jp(int c, mbfl_convert_filter *filter)
-{
- int s;
-
- s = 0;
- if (c >= ucs_a1_jis_table_min && c < ucs_a1_jis_table_max) {
- s = ucs_a1_jis_table[c - ucs_a1_jis_table_min];
- } else if (c >= ucs_a2_jis_table_min && c < ucs_a2_jis_table_max) {
- s = ucs_a2_jis_table[c - ucs_a2_jis_table_min];
- } else if (c >= ucs_i_jis_table_min && c < ucs_i_jis_table_max) {
- s = ucs_i_jis_table[c - ucs_i_jis_table_min];
- } else if (c >= ucs_r_jis_table_min && c < ucs_r_jis_table_max) {
- s = ucs_r_jis_table[c - ucs_r_jis_table_min];
- }
- if (s <= 0) {
- if (c == 0xa5) { /* YEN SIGN */
- s = 0x1005c;
- } else if (c == 0x203e) { /* OVER LINE */
- s = 0x1007e;
- } else if (c == 0xff3c) { /* FULLWIDTH REVERSE SOLIDUS */
- s = 0x2140;
- } else if (c == 0xff5e) { /* FULLWIDTH TILDE */
- s = 0x2141;
- } else if (c == 0x2225) { /* PARALLEL TO */
- s = 0x2142;
- } else if (c == 0xff0d) { /* FULLWIDTH HYPHEN-MINUS */
- s = 0x215d;
- } else if (c == 0xffe0) { /* FULLWIDTH CENT SIGN */
- s = 0x2171;
- } else if (c == 0xffe1) { /* FULLWIDTH POUND SIGN */
- s = 0x2172;
- } else if (c == 0xffe2) { /* FULLWIDTH NOT SIGN */
- s = 0x224c;
- }
- if (c == 0) {
- s = 0;
- } else if (s <= 0) {
- s = -1;
- }
- } else if ((s >= 0x80 && s < 0x2121) || (s > 0x8080)) {
- s = -1;
- }
- if (s >= 0) {
- if (s < 0x80) { /* ASCII */
- if ((filter->status & 0xff00) != 0) {
- CK((*filter->output_function)(0x1b, filter->data)); /* ESC */
- CK((*filter->output_function)(0x28, filter->data)); /* '(' */
- CK((*filter->output_function)(0x42, filter->data)); /* 'B' */
- }
- filter->status = 0;
- CK((*filter->output_function)(s, filter->data));
- } else if (s < 0x10000) { /* X 0208 */
- if ((filter->status & 0xff00) != 0x200) {
- CK((*filter->output_function)(0x1b, filter->data)); /* ESC */
- CK((*filter->output_function)(0x24, filter->data)); /* '$' */
- CK((*filter->output_function)(0x42, filter->data)); /* 'B' */
- }
- filter->status = 0x200;
- CK((*filter->output_function)((s >> 8) & 0x7f, filter->data));
- CK((*filter->output_function)(s & 0x7f, filter->data));
- } else { /* X 0201 latin */
- if ((filter->status & 0xff00) != 0x400) {
- CK((*filter->output_function)(0x1b, filter->data)); /* ESC */
- CK((*filter->output_function)(0x28, filter->data)); /* '(' */
- CK((*filter->output_function)(0x4a, filter->data)); /* 'J' */
- }
- filter->status = 0x400;
- CK((*filter->output_function)(s & 0x7f, filter->data));
- }
- } else {
- if (filter->illegal_mode != MBFL_OUTPUTFILTER_ILLEGAL_MODE_NONE) {
- CK(mbfl_filt_conv_illegal_output(c, filter));
- }
- }
-
- return c;
-}
-
-int
-mbfl_filt_conv_any_jis_flush(mbfl_convert_filter *filter)
-{
- /* back to latin */
- if ((filter->status & 0xff00) != 0) {
- CK((*filter->output_function)(0x1b, filter->data)); /* ESC */
- CK((*filter->output_function)(0x28, filter->data)); /* '(' */
- CK((*filter->output_function)(0x42, filter->data)); /* 'B' */
- }
- filter->status &= 0xff;
- return 0;
-}
-
-static int mbfl_filt_ident_jis(int c, mbfl_identify_filter *filter)
-{
-retry:
- switch (filter->status & 0xf) {
-/* case 0x00: ASCII */
-/* case 0x10: X 0201 latin */
-/* case 0x20: X 0201 kana */
-/* case 0x80: X 0208 */
-/* case 0x90: X 0212 */
- case 0:
- if (c == 0x1b) {
- filter->status += 2;
- } else if (c == 0x0e) { /* "kana in" */
- filter->status = 0x20;
- } else if (c == 0x0f) { /* "kana out" */
- filter->status = 0;
- } else if ((filter->status == 0x80 || filter->status == 0x90) && c > 0x20 && c < 0x7f) { /* kanji first char */
- filter->status += 1;
- } else if (c >= 0 && c < 0x80) { /* latin, CTLs */
- ;
- } else {
- filter->flag = 1; /* bad */
- }
- break;
-
-/* case 0x81: X 0208 second char */
-/* case 0x91: X 0212 second char */
- case 1:
- filter->status &= ~0xf;
- if (c == 0x1b) {
- goto retry;
- } else if (c < 0x21 || c > 0x7e) { /* bad */
- filter->flag = 1;
- }
- break;
-
- /* ESC */
- case 2:
- if (c == 0x24) { /* '$' */
- filter->status++;
- } else if (c == 0x28) { /* '(' */
- filter->status += 3;
- } else {
- filter->flag = 1; /* bad */
- filter->status &= ~0xf;
- goto retry;
- }
- break;
-
- /* ESC $ */
- case 3:
- if (c == 0x40 || c == 0x42) { /* '@' or 'B' */
- filter->status = 0x80;
- } else if (c == 0x28) { /* '(' */
- filter->status++;
- } else {
- filter->flag = 1; /* bad */
- filter->status &= ~0xf;
- goto retry;
- }
- break;
-
- /* ESC $ ( */
- case 4:
- if (c == 0x40 || c == 0x42) { /* '@' or 'B' */
- filter->status = 0x80;
- } else if (c == 0x44) { /* 'D' */
- filter->status = 0x90;
- } else {
- filter->flag = 1; /* bad */
- filter->status &= ~0xf;
- goto retry;
- }
- break;
-
- /* ESC ( */
- case 5:
- if (c == 0x42 || c == 0x48) { /* 'B' or 'H' */
- filter->status = 0;
- } else if (c == 0x4a) { /* 'J' */
- filter->status = 0x10;
- } else if (c == 0x49) { /* 'I' */
- filter->status = 0x20;
- } else {
- filter->flag = 1; /* bad */
- filter->status &= ~0xf;
- goto retry;
- }
- break;
-
- default:
- filter->status = 0;
- break;
- }
-
- return c;
-}
-
-static int mbfl_filt_ident_2022jp(int c, mbfl_identify_filter *filter)
-{
-retry:
- switch (filter->status & 0xf) {
-/* case 0x00: ASCII */
-/* case 0x10: X 0201 latin */
-/* case 0x80: X 0208 */
- case 0:
- if (c == 0x1b) {
- filter->status += 2;
- } else if (filter->status == 0x80 && c > 0x20 && c < 0x7f) { /* kanji first char */
- filter->status += 1;
- } else if (c >= 0 && c < 0x80) { /* latin, CTLs */
- ;
- } else {
- filter->flag = 1; /* bad */
- }
- break;
-
-/* case 0x81: X 0208 second char */
- case 1:
- if (c == 0x1b) {
- filter->status++;
- } else {
- filter->status &= ~0xf;
- if (c < 0x21 || c > 0x7e) { /* bad */
- filter->flag = 1;
- }
- }
- break;
-
- /* ESC */
- case 2:
- if (c == 0x24) { /* '$' */
- filter->status++;
- } else if (c == 0x28) { /* '(' */
- filter->status += 3;
- } else {
- filter->flag = 1; /* bad */
- filter->status &= ~0xf;
- goto retry;
- }
- break;
-
- /* ESC $ */
- case 3:
- if (c == 0x40 || c == 0x42) { /* '@' or 'B' */
- filter->status = 0x80;
- } else {
- filter->flag = 1; /* bad */
- filter->status &= ~0xf;
- goto retry;
- }
- break;
-
- /* ESC ( */
- case 5:
- if (c == 0x42) { /* 'B' */
- filter->status = 0;
- } else if (c == 0x4a) { /* 'J' */
- filter->status = 0x10;
- } else {
- filter->flag = 1; /* bad */
- filter->status &= ~0xf;
- goto retry;
- }
- break;
-
- default:
- filter->status = 0;
- break;
- }
-
- return c;
-}
-
-
diff --git a/ext/mbstring/libmbfl/filters/mbfilter_jis.h b/ext/mbstring/libmbfl/filters/mbfilter_jis.h
deleted file mode 100644
index 0375307263..0000000000
--- a/ext/mbstring/libmbfl/filters/mbfilter_jis.h
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * "streamable kanji code filter and converter"
- * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved.
- *
- * LICENSE NOTICES
- *
- * This file is part of "streamable kanji code filter and converter",
- * which is distributed under the terms of GNU Lesser General Public
- * License (version 2) as published by the Free Software Foundation.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with "streamable kanji code filter and converter";
- * if not, write to the Free Software Foundation, Inc., 59 Temple Place,
- * Suite 330, Boston, MA 02111-1307 USA
- *
- * The author of this file:
- *
- */
-/*
- * The source code included in this files was separated from mbfilter_ja.c
- * by moriyoshi koizumi <moriyoshi@php.net> on 4 dec 2002.
- *
- */
-
-#ifndef MBFL_MBFILTER_JIS_H
-#define MBFL_MBFILTER_JIS_H
-
-#include "mbfilter.h"
-
-extern const mbfl_encoding mbfl_encoding_jis;
-extern const mbfl_encoding mbfl_encoding_2022jp;
-extern const struct mbfl_identify_vtbl vtbl_identify_2022jp;
-extern const struct mbfl_identify_vtbl vtbl_identify_jis;
-extern const struct mbfl_convert_vtbl vtbl_jis_wchar;
-extern const struct mbfl_convert_vtbl vtbl_wchar_jis;
-extern const struct mbfl_convert_vtbl vtbl_2022jp_wchar;
-extern const struct mbfl_convert_vtbl vtbl_wchar_2022jp;
-
-int mbfl_filt_conv_jis_wchar(int c, mbfl_convert_filter *filter);
-int mbfl_filt_conv_wchar_jis(int c, mbfl_convert_filter *filter);
-int mbfl_filt_conv_wchar_2022jp(int c, mbfl_convert_filter *filter);
-int mbfl_filt_conv_any_jis_flush(mbfl_convert_filter *filter);
-
-#endif /* MBFL_MBFILTER_JIS_H */
diff --git a/ext/mbstring/libmbfl/filters/mbfilter_koi8r.c b/ext/mbstring/libmbfl/filters/mbfilter_koi8r.c
deleted file mode 100644
index 892bf15213..0000000000
--- a/ext/mbstring/libmbfl/filters/mbfilter_koi8r.c
+++ /dev/null
@@ -1,149 +0,0 @@
-/*
- * "streamable kanji code filter and converter"
- * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved.
- *
- * LICENSE NOTICES
- *
- * This file is part of "streamable kanji code filter and converter",
- * which is distributed under the terms of GNU Lesser General Public
- * License (version 2) as published by the Free Software Foundation.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with "streamable kanji code filter and converter";
- * if not, write to the Free Software Foundation, Inc., 59 Temple Place,
- * Suite 330, Boston, MA 02111-1307 USA
- *
- * The author of this part: Den V. Tsopa <tdv@edisoft.ru>
- *
- */
-/*
- * The source code included in this files was separated from mbfilter_ru.c
- * by moriyoshi koizumi <moriyoshi@php.net> on 4 dec 2002.
- *
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "mbfilter.h"
-#include "mbfilter_koi8r.h"
-#include "unicode_table_koi8r.h"
-
-static int mbfl_filt_ident_koi8r(int c, mbfl_identify_filter *filter);
-
-static const char *mbfl_encoding_koi8r_aliases[] = {"KOI8-R", "KOI8R", NULL};
-
-const mbfl_encoding mbfl_encoding_koi8r = {
- mbfl_no_encoding_koi8r,
- "KOI8-R",
- "KOI8-R",
- (const char *(*)[])&mbfl_encoding_koi8r_aliases,
- NULL,
- MBFL_ENCTYPE_SBCS
-};
-
-const struct mbfl_identify_vtbl vtbl_identify_koi8r = {
- mbfl_no_encoding_koi8r,
- mbfl_filt_ident_common_ctor,
- mbfl_filt_ident_common_dtor,
- mbfl_filt_ident_koi8r
-};
-
-const struct mbfl_convert_vtbl vtbl_wchar_koi8r = {
- mbfl_no_encoding_wchar,
- mbfl_no_encoding_koi8r,
- mbfl_filt_conv_common_ctor,
- mbfl_filt_conv_common_dtor,
- mbfl_filt_conv_wchar_koi8r,
- mbfl_filt_conv_common_flush
-};
-
-const struct mbfl_convert_vtbl vtbl_koi8r_wchar = {
- mbfl_no_encoding_koi8r,
- mbfl_no_encoding_wchar,
- mbfl_filt_conv_common_ctor,
- mbfl_filt_conv_common_dtor,
- mbfl_filt_conv_koi8r_wchar,
- mbfl_filt_conv_common_flush
-};
-
-#define CK(statement) do { if ((statement) < 0) return (-1); } while (0)
-
-/*
- * koi8r => wchar
- */
-int
-mbfl_filt_conv_koi8r_wchar(int c, mbfl_convert_filter *filter)
-{
- int s;
-
- if (c >= 0 && c < koi8r_ucs_table_min) {
- s = c;
- } else if (c >= koi8r_ucs_table_min && c < 0x100) {
- s = koi8r_ucs_table[c - koi8r_ucs_table_min];
- if (s <= 0) {
- s = c;
- s &= MBFL_WCSPLANE_MASK;
- s |= MBFL_WCSPLANE_KOI8R;
- }
- } else {
- s = c;
- s &= MBFL_WCSGROUP_MASK;
- s |= MBFL_WCSGROUP_THROUGH;
- }
-
- CK((*filter->output_function)(s, filter->data));
-
- return c;
-}
-
-/*
- * wchar => koi8r
- */
-int
-mbfl_filt_conv_wchar_koi8r(int c, mbfl_convert_filter *filter)
-{
- int s, n;
-
- if (c < 0x80) {
- s = c;
- } else {
- s = -1;
- n = koi8r_ucs_table_len-1;
- while (n >= 0) {
- if (c == koi8r_ucs_table[n]) {
- s = koi8r_ucs_table_min + n;
- break;
- }
- n--;
- }
- if (s <= 0 && (c & ~MBFL_WCSPLANE_MASK) == MBFL_WCSPLANE_KOI8R) {
- s = c & MBFL_WCSPLANE_MASK;
- }
- }
-
- if (s >= 0) {
- CK((*filter->output_function)(s, filter->data));
- } else {
- if (filter->illegal_mode != MBFL_OUTPUTFILTER_ILLEGAL_MODE_NONE) {
- CK(mbfl_filt_conv_illegal_output(c, filter));
- }
- }
-
- return c;
-}
-
-static int mbfl_filt_ident_koi8r(int c, mbfl_identify_filter *filter)
-{
- if (c >= 0x80 && c < 0xff)
- filter->flag = 0;
- else
- filter->flag = 1; /* not it */
- return c;
-}
diff --git a/ext/mbstring/libmbfl/filters/mbfilter_koi8r.h b/ext/mbstring/libmbfl/filters/mbfilter_koi8r.h
deleted file mode 100644
index 8298631f97..0000000000
--- a/ext/mbstring/libmbfl/filters/mbfilter_koi8r.h
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * "streamable kanji code filter and converter"
- * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved.
- *
- * LICENSE NOTICES
- *
- * This file is part of "streamable kanji code filter and converter",
- * which is distributed under the terms of GNU Lesser General Public
- * License (version 2) as published by the Free Software Foundation.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with "streamable kanji code filter and converter";
- * if not, write to the Free Software Foundation, Inc., 59 Temple Place,
- * Suite 330, Boston, MA 02111-1307 USA
- *
- * The author of this part: Den V. Tsopa <tdv@edisoft.ru>
- *
- */
-/*
- * The source code included in this files was separated from mbfilter_ru.h
- * by moriyoshi koizumi <moriyoshi@php.net> on 4 dec 2002.
- *
- */
-
-#ifndef MBFL_MBFILTER_KOI8R_H
-#define MBFL_MBFILTER_KOI8R_H
-
-#include "mbfilter.h"
-
-extern const mbfl_encoding mbfl_encoding_koi8r;
-extern const struct mbfl_identify_vtbl vtbl_identify_koi8r;
-extern const struct mbfl_convert_vtbl vtbl_wchar_koi8r;
-extern const struct mbfl_convert_vtbl vtbl_koi8r_wchar;
-
-int mbfl_filt_conv_koi8r_wchar(int c, mbfl_convert_filter *filter);
-int mbfl_filt_conv_wchar_koi8r(int c, mbfl_convert_filter *filter);
-
-#endif /* MBFL_MBFILTER_KOI8R_H */
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- */
diff --git a/ext/mbstring/libmbfl/filters/mbfilter_qprint.c b/ext/mbstring/libmbfl/filters/mbfilter_qprint.c
deleted file mode 100644
index 9b18a1cb2b..0000000000
--- a/ext/mbstring/libmbfl/filters/mbfilter_qprint.c
+++ /dev/null
@@ -1,233 +0,0 @@
-/*
- * "streamable kanji code filter and converter"
- * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved.
- *
- * LICENSE NOTICES
- *
- * This file is part of "streamable kanji code filter and converter",
- * which is distributed under the terms of GNU Lesser General Public
- * License (version 2) as published by the Free Software Foundation.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with "streamable kanji code filter and converter";
- * if not, write to the Free Software Foundation, Inc., 59 Temple Place,
- * Suite 330, Boston, MA 02111-1307 USA
- *
- * The author of this file:
- *
- */
-/*
- * The source code included in this files was separated from mbfilter.c
- * by moriyoshi koizumi <moriyoshi@php.net> on 4 dec 2002.
- *
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "mbfilter.h"
-#include "mbfilter_qprint.h"
-#include "unicode_prop.h"
-
-static const char *mbfl_encoding_qprint_aliases[] = {"qprint", NULL};
-
-const mbfl_encoding mbfl_encoding_qprint = {
- mbfl_no_encoding_qprint,
- "Quoted-Printable",
- "Quoted-Printable",
- (const char *(*)[])&mbfl_encoding_qprint_aliases,
- NULL,
- MBFL_ENCTYPE_SBCS
-};
-
-const struct mbfl_convert_vtbl vtbl_8bit_qprint = {
- mbfl_no_encoding_8bit,
- mbfl_no_encoding_qprint,
- mbfl_filt_conv_common_ctor,
- mbfl_filt_conv_common_dtor,
- mbfl_filt_conv_qprintenc,
- mbfl_filt_conv_qprintenc_flush };
-
-const struct mbfl_convert_vtbl vtbl_qprint_8bit = {
- mbfl_no_encoding_qprint,
- mbfl_no_encoding_8bit,
- mbfl_filt_conv_common_ctor,
- mbfl_filt_conv_common_dtor,
- mbfl_filt_conv_qprintdec,
- mbfl_filt_conv_qprintdec_flush };
-
-
-#define CK(statement) do { if ((statement) < 0) return (-1); } while (0)
-
-/*
- * any => Quoted-Printable
- */
-
-int mbfl_filt_conv_qprintenc(int c, mbfl_convert_filter *filter)
-{
- int s, n;
-
- switch (filter->status & 0xff) {
- case 0:
- filter->cache = c;
- filter->status++;
- break;
- default:
- s = filter->cache;
- filter->cache = c;
- n = (filter->status & 0xff00) >> 8;
-
- if (s == 0) { /* null */
- CK((*filter->output_function)(s, filter->data));
- filter->status &= ~0xff00;
- break;
- }
-
- if ((filter->status & MBFL_QPRINT_STS_MIME_HEADER) == 0) {
- if (s == 0x0a || (s == 0x0d && c != 0x0a)) { /* line feed */
- CK((*filter->output_function)(0x0d, filter->data)); /* CR */
- CK((*filter->output_function)(0x0a, filter->data)); /* LF */
- filter->status &= ~0xff00;
- break;
- } else if (s == 0x0d) {
- break;
- }
- }
-
- if ((filter->status & MBFL_QPRINT_STS_MIME_HEADER) == 0 && n >= 72) { /* soft line feed */
- CK((*filter->output_function)(0x3d, filter->data)); /* '=' */
- CK((*filter->output_function)(0x0d, filter->data)); /* CR */
- CK((*filter->output_function)(0x0a, filter->data)); /* LF */
- filter->status &= ~0xff00;
- }
-
- if (s <= 0 || s >= 0x80 || s == 0x3d /* not ASCII or '=' */
- || ((filter->status & MBFL_QPRINT_STS_MIME_HEADER) != 0 &&
- (mbfl_charprop_table[s] & MBFL_CHP_MMHQENC) != 0)) {
- /* hex-octet */
- CK((*filter->output_function)(0x3d, filter->data)); /* '=' */
- n = (s >> 4) & 0xf;
- if (n < 10) {
- n += 48; /* '0' */
- } else {
- n += 55; /* 'A' - 10 */
- }
- CK((*filter->output_function)(n, filter->data));
- n = s & 0xf;
- if (n < 10) {
- n += 48;
- } else {
- n += 55;
- }
- CK((*filter->output_function)(n, filter->data));
- if ((filter->status & MBFL_QPRINT_STS_MIME_HEADER) == 0) {
- filter->status += 0x300;
- }
- } else {
- CK((*filter->output_function)(s, filter->data));
- if ((filter->status & MBFL_QPRINT_STS_MIME_HEADER) == 0) {
- filter->status += 0x100;
- }
- }
- break;
- }
-
- return c;
-}
-
-int mbfl_filt_conv_qprintenc_flush(mbfl_convert_filter *filter)
-{
- /* flush filter cache */
- (*filter->filter_function)('\0', filter);
- filter->status &= ~0xffff;
- filter->cache = 0;
- return 0;
-}
-
-/*
- * Quoted-Printable => any
- */
-int mbfl_filt_conv_qprintdec(int c, mbfl_convert_filter *filter)
-{
- int n;
-
- switch (filter->status) {
- case 1:
- if ((c >= 0x30 && c <= 0x39) || (c >= 0x41 && c <= 0x46)) { /* 0 - 9 or A - F */
- filter->cache = c;
- filter->status = 2;
- } else if (c == 0x0d) { /* soft line feed */
- filter->status = 3;
- } else if (c == 0x0a) { /* soft line feed */
- filter->status = 0;
- } else {
- CK((*filter->output_function)(0x3d, filter->data)); /* '=' */
- CK((*filter->output_function)(c, filter->data));
- filter->status = 0;
- }
- break;
- case 2:
- n = filter->cache;
- if (n >= 0x30 && n <= 0x39) { /* '0' - '9' */
- n -= 48; /* 48 = '0' */
- } else {
- n -= 55; /* 55 = 'A' - 10 */
- }
- n <<= 4;
- if (c >= 0x30 && c <= 0x39) { /* '0' - '9' */
- n += (c - 48);
- } else if (c >= 0x41 && c <= 0x46) { /* 'A' - 'F' */
- n += (c - 55);
- } else {
- CK((*filter->output_function)(0x3d, filter->data)); /* '=' */
- CK((*filter->output_function)(filter->cache, filter->data));
- n = c;
- }
- CK((*filter->output_function)(n, filter->data));
- filter->status = 0;
- break;
- case 3:
- if (c != 0x0a) { /* LF */
- CK((*filter->output_function)(c, filter->data));
- }
- filter->status = 0;
- break;
- default:
- if (c == 0x3d) { /* '=' */
- filter->status = 1;
- } else {
- CK((*filter->output_function)(c, filter->data));
- }
- break;
- }
-
- return c;
-}
-
-int mbfl_filt_conv_qprintdec_flush(mbfl_convert_filter *filter)
-{
- int status, cache;
-
- status = filter->status;
- cache = filter->cache;
- filter->status = 0;
- filter->cache = 0;
- /* flush fragments */
- if (status == 1) {
- CK((*filter->output_function)(0x3d, filter->data)); /* '=' */
- } else if (status == 2) {
- CK((*filter->output_function)(0x3d, filter->data)); /* '=' */
- CK((*filter->output_function)(cache, filter->data));
- }
-
- return 0;
-}
-
-
-
diff --git a/ext/mbstring/libmbfl/filters/mbfilter_qprint.h b/ext/mbstring/libmbfl/filters/mbfilter_qprint.h
deleted file mode 100644
index 3a39fa7402..0000000000
--- a/ext/mbstring/libmbfl/filters/mbfilter_qprint.h
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * "streamable kanji code filter and converter"
- * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved.
- *
- * LICENSE NOTICES
- *
- * This file is part of "streamable kanji code filter and converter",
- * which is distributed under the terms of GNU Lesser General Public
- * License (version 2) as published by the Free Software Foundation.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with "streamable kanji code filter and converter";
- * if not, write to the Free Software Foundation, Inc., 59 Temple Place,
- * Suite 330, Boston, MA 02111-1307 USA
- *
- * The author of this file:
- *
- */
-/*
- * The source code included in this files was separated from mbfilter.c
- * by moriyoshi koizumi <moriyoshi@php.net> on 4 dec 2002.
- *
- */
-
-#ifndef MBFL_MBFILTER_QPRINT_H
-#define MBFL_MBFILTER_QPRINT_H
-
-#include "mbfilter.h"
-
-extern const mbfl_encoding mbfl_encoding_qprint;
-extern const struct mbfl_convert_vtbl vtbl_8bit_qprint;
-extern const struct mbfl_convert_vtbl vtbl_qprint_8bit;
-
-int mbfl_filt_conv_qprintenc(int c, mbfl_convert_filter *filter);
-int mbfl_filt_conv_qprintenc_flush(mbfl_convert_filter *filter);
-int mbfl_filt_conv_qprintdec(int c, mbfl_convert_filter *filter);
-int mbfl_filt_conv_qprintdec_flush(mbfl_convert_filter *filter);
-
-#endif /* MBFL_MBFILTER_ASCII_H */
diff --git a/ext/mbstring/libmbfl/filters/mbfilter_sjis.c b/ext/mbstring/libmbfl/filters/mbfilter_sjis.c
deleted file mode 100644
index f9d7ff671d..0000000000
--- a/ext/mbstring/libmbfl/filters/mbfilter_sjis.c
+++ /dev/null
@@ -1,295 +0,0 @@
-/*
- * "streamable kanji code filter and converter"
- * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved.
- *
- * LICENSE NOTICES
- *
- * This file is part of "streamable kanji code filter and converter",
- * which is distributed under the terms of GNU Lesser General Public
- * License (version 2) as published by the Free Software Foundation.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with "streamable kanji code filter and converter";
- * if not, write to the Free Software Foundation, Inc., 59 Temple Place,
- * Suite 330, Boston, MA 02111-1307 USA
- *
- * The author of this file:
- *
- */
-/*
- * The source code included in this files was separated from mbfilter_ja.c
- * by moriyoshi koizumi <moriyoshi@php.net> on 4 dec 2002.
- *
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "mbfilter.h"
-#include "mbfilter_sjis.h"
-
-#include "unicode_table_cp932_ext.h"
-#include "unicode_table_jis.h"
-
-static int mbfl_filt_ident_sjis(int c, mbfl_identify_filter *filter);
-
-static const unsigned char mblen_table_sjis[] = { /* 0x80-0x9f,0xE0-0xFF */
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2
-};
-
-static const char *mbfl_encoding_sjis_aliases[] = {"x-sjis", "SHIFT-JIS", NULL};
-
-const mbfl_encoding mbfl_encoding_sjis = {
- mbfl_no_encoding_sjis,
- "SJIS",
- "Shift_JIS",
- (const char *(*)[])&mbfl_encoding_sjis_aliases,
- mblen_table_sjis,
- MBFL_ENCTYPE_MBCS
-};
-
-const struct mbfl_identify_vtbl vtbl_identify_sjis = {
- mbfl_no_encoding_sjis,
- mbfl_filt_ident_common_ctor,
- mbfl_filt_ident_common_dtor,
- mbfl_filt_ident_sjis
-};
-
-const struct mbfl_convert_vtbl vtbl_sjis_wchar = {
- mbfl_no_encoding_sjis,
- mbfl_no_encoding_wchar,
- mbfl_filt_conv_common_ctor,
- mbfl_filt_conv_common_dtor,
- mbfl_filt_conv_sjis_wchar,
- mbfl_filt_conv_common_flush
-};
-
-const struct mbfl_convert_vtbl vtbl_wchar_sjis = {
- mbfl_no_encoding_wchar,
- mbfl_no_encoding_sjis,
- mbfl_filt_conv_common_ctor,
- mbfl_filt_conv_common_dtor,
- mbfl_filt_conv_wchar_sjis,
- mbfl_filt_conv_common_flush
-};
-
-#define CK(statement) do { if ((statement) < 0) return (-1); } while (0)
-
-#define SJIS_ENCODE(c1,c2,s1,s2) \
- do { \
- s1 = c1; \
- s1--; \
- s1 >>= 1; \
- if ((c1) < 0x5f) { \
- s1 += 0x71; \
- } else { \
- s1 += 0xb1; \
- } \
- s2 = c2; \
- if ((c1) & 1) { \
- if ((c2) < 0x60) { \
- s2--; \
- } \
- s2 += 0x20; \
- } else { \
- s2 += 0x7e; \
- } \
- } while (0)
-
-#define SJIS_DECODE(c1,c2,s1,s2) \
- do { \
- s1 = c1; \
- if (s1 < 0xa0) { \
- s1 -= 0x81; \
- } else { \
- s1 -= 0xc1; \
- } \
- s1 <<= 1; \
- s1 += 0x21; \
- s2 = c2; \
- if (s2 < 0x9f) { \
- if (s2 < 0x7f) { \
- s2++; \
- } \
- s2 -= 0x20; \
- } else { \
- s1++; \
- s2 -= 0x7e; \
- } \
- } while (0)
-
-
-/*
- * SJIS => wchar
- */
-int
-mbfl_filt_conv_sjis_wchar(int c, mbfl_convert_filter *filter)
-{
- int c1, s1, s2, w;
-
- switch (filter->status) {
- case 0:
- if (c >= 0 && c < 0x80) { /* latin */
- CK((*filter->output_function)(c, filter->data));
- } else if (c > 0xa0 && c < 0xe0) { /* kana */
- CK((*filter->output_function)(0xfec0 + c, filter->data));
- } else if (c > 0x80 && c < 0xfd && c != 0xa0) { /* kanji first char */
- filter->status = 1;
- filter->cache = c;
- } else {
- w = c & MBFL_WCSGROUP_MASK;
- w |= MBFL_WCSGROUP_THROUGH;
- CK((*filter->output_function)(w, filter->data));
- }
- break;
-
- case 1: /* kanji second char */
- filter->status = 0;
- c1 = filter->cache;
- if (c > 0x39 && c < 0xfd && c != 0x7f) {
- SJIS_DECODE(c1, c, s1, s2);
- w = (s1 - 0x21)*94 + s2 - 0x21;
- if (w >= 0 && w < jisx0208_ucs_table_size) {
- w = jisx0208_ucs_table[w];
- } else {
- w = 0;
- }
- if (w <= 0) {
- if (s1 < 0x7f && s2 < 0x7f) {
- w = (s1 << 8) | s2;
- w &= MBFL_WCSPLANE_MASK;
- w |= MBFL_WCSPLANE_JIS0208;
- } else {
- w = (c1 << 8) | c;
- w &= MBFL_WCSGROUP_MASK;
- w |= MBFL_WCSGROUP_THROUGH;
- }
- }
- CK((*filter->output_function)(w, filter->data));
- } else if ((c >= 0 && c < 0x21) || c == 0x7f) { /* CTLs */
- CK((*filter->output_function)(c, filter->data));
- } else {
- w = (c1 << 8) | c;
- w &= MBFL_WCSGROUP_MASK;
- w |= MBFL_WCSGROUP_THROUGH;
- CK((*filter->output_function)(w, filter->data));
- }
- break;
-
- default:
- filter->status = 0;
- break;
- }
-
- return c;
-}
-
-/*
- * wchar => SJIS
- */
-int
-mbfl_filt_conv_wchar_sjis(int c, mbfl_convert_filter *filter)
-{
- int c1, c2, s1, s2;
-
- s1 = 0;
- if (c >= ucs_a1_jis_table_min && c < ucs_a1_jis_table_max) {
- s1 = ucs_a1_jis_table[c - ucs_a1_jis_table_min];
- } else if (c >= ucs_a2_jis_table_min && c < ucs_a2_jis_table_max) {
- s1 = ucs_a2_jis_table[c - ucs_a2_jis_table_min];
- } else if (c >= ucs_i_jis_table_min && c < ucs_i_jis_table_max) {
- s1 = ucs_i_jis_table[c - ucs_i_jis_table_min];
- } else if (c >= ucs_r_jis_table_min && c < ucs_r_jis_table_max) {
- s1 = ucs_r_jis_table[c - ucs_r_jis_table_min];
- }
- if (s1 <= 0) {
- c1 = c & ~MBFL_WCSPLANE_MASK;
- if (c1 == MBFL_WCSPLANE_JIS0208) {
- s1 = c & MBFL_WCSPLANE_MASK;
- } else if (c == 0xa5) { /* YEN SIGN */
- s1 = 0x216f; /* FULLWIDTH YEN SIGN */
- } else if (c == 0x203e) { /* OVER LINE */
- s1 = 0x2131; /* FULLWIDTH MACRON */
- } else if (c == 0xff3c) { /* FULLWIDTH REVERSE SOLIDUS */
- s1 = 0x2140;
- } else if (c == 0xff5e) { /* FULLWIDTH TILDE */
- s1 = 0x2141;
- } else if (c == 0x2225) { /* PARALLEL TO */
- s1 = 0x2142;
- } else if (c == 0xff0d) { /* FULLWIDTH HYPHEN-MINUS */
- s1 = 0x215d;
- } else if (c == 0xffe0) { /* FULLWIDTH CENT SIGN */
- s1 = 0x2171;
- } else if (c == 0xffe1) { /* FULLWIDTH POUND SIGN */
- s1 = 0x2172;
- } else if (c == 0xffe2) { /* FULLWIDTH NOT SIGN */
- s1 = 0x224c;
- }
- if (c == 0) {
- s1 = 0;
- } else if (s1 <= 0) {
- s1 = -1;
- }
- } else if (s1 >= 0x8080) {
- s1 = -1;
- }
- if (s1 >= 0) {
- if (s1 < 0x100) { /* latin or kana */
- CK((*filter->output_function)(s1, filter->data));
- } else { /* kanji */
- c1 = (s1 >> 8) & 0xff;
- c2 = s1 & 0xff;
- SJIS_ENCODE(c1, c2, s1, s2);
- CK((*filter->output_function)(s1, filter->data));
- CK((*filter->output_function)(s2, filter->data));
- }
- } else {
- if (filter->illegal_mode != MBFL_OUTPUTFILTER_ILLEGAL_MODE_NONE) {
- CK(mbfl_filt_conv_illegal_output(c, filter));
- }
- }
-
- return c;
-}
-
-static int mbfl_filt_ident_sjis(int c, mbfl_identify_filter *filter)
-{
- if (filter->status) { /* kanji second char */
- if (c < 0x40 || c > 0xfc || c == 0x7f) { /* bad */
- filter->flag = 1;
- }
- filter->status = 0;
- } else if (c >= 0 && c < 0x80) { /* latin ok */
- ;
- } else if (c > 0xa0 && c < 0xe0) { /* kana ok */
- ;
- } else if (c > 0x80 && c < 0xf0 && c != 0xa0) { /* kanji first char */
- filter->status = 1;
- } else { /* bad */
- filter->flag = 1;
- }
-
- return c;
-}
-
diff --git a/ext/mbstring/libmbfl/filters/mbfilter_sjis.h b/ext/mbstring/libmbfl/filters/mbfilter_sjis.h
deleted file mode 100644
index cb9146fd89..0000000000
--- a/ext/mbstring/libmbfl/filters/mbfilter_sjis.h
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * "streamable kanji code filter and converter"
- * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved.
- *
- * LICENSE NOTICES
- *
- * This file is part of "streamable kanji code filter and converter",
- * which is distributed under the terms of GNU Lesser General Public
- * License (version 2) as published by the Free Software Foundation.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with "streamable kanji code filter and converter";
- * if not, write to the Free Software Foundation, Inc., 59 Temple Place,
- * Suite 330, Boston, MA 02111-1307 USA
- *
- * The author of this file:
- *
- */
-/*
- * The source code included in this files was separated from mbfilter_ja.c
- * by moriyoshi koizumi <moriyoshi@php.net> on 4 dec 2002.
- *
- */
-
-#ifndef MBFL_MBFILTER_SJIS_H
-#define MBFL_MBFILTER_SJIS_H
-
-#include "mbfilter.h"
-
-extern const mbfl_encoding mbfl_encoding_sjis;
-extern const struct mbfl_identify_vtbl vtbl_identify_sjis;
-extern const struct mbfl_convert_vtbl vtbl_sjis_wchar;
-extern const struct mbfl_convert_vtbl vtbl_wchar_sjis;
-
-int mbfl_filt_conv_sjis_wchar(int c, mbfl_convert_filter *filter);
-int mbfl_filt_conv_wchar_sjis(int c, mbfl_convert_filter *filter);
-
-#endif /* MBFL_MBFILTER_SJIS_H */
-
-/*
- * charset=UTF-8
- */
diff --git a/ext/mbstring/libmbfl/filters/mbfilter_ucs2.c b/ext/mbstring/libmbfl/filters/mbfilter_ucs2.c
deleted file mode 100644
index 4d83af0bf1..0000000000
--- a/ext/mbstring/libmbfl/filters/mbfilter_ucs2.c
+++ /dev/null
@@ -1,238 +0,0 @@
-/*
- * "streamable kanji code filter and converter"
- * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved.
- *
- * LICENSE NOTICES
- *
- * This file is part of "streamable kanji code filter and converter",
- * which is distributed under the terms of GNU Lesser General Public
- * License (version 2) as published by the Free Software Foundation.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with "streamable kanji code filter and converter";
- * if not, write to the Free Software Foundation, Inc., 59 Temple Place,
- * Suite 330, Boston, MA 02111-1307 USA
- *
- * The author of this file:
- *
- */
-/*
- * The source code included in this files was separated from mbfilter.c
- * by moriyoshi koizumi <moriyoshi@php.net> on 4 dec 2002.
- *
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "mbfilter.h"
-#include "mbfilter_ucs2.h"
-
-static const char *mbfl_encoding_ucs2_aliases[] = {"ISO-10646-UCS-2", "UCS2" , "UNICODE", NULL};
-
-const mbfl_encoding mbfl_encoding_ucs2 = {
- mbfl_no_encoding_ucs2,
- "UCS-2",
- "UCS-2",
- (const char *(*)[])&mbfl_encoding_ucs2_aliases,
- NULL,
- MBFL_ENCTYPE_WCS2BE
-};
-
-const mbfl_encoding mbfl_encoding_ucs2be = {
- mbfl_no_encoding_ucs2be,
- "UCS-2BE",
- "UCS-2BE",
- NULL,
- NULL,
- MBFL_ENCTYPE_WCS2BE
-};
-
-const mbfl_encoding mbfl_encoding_ucs2le = {
- mbfl_no_encoding_ucs2le,
- "UCS-2LE",
- "UCS-2LE",
- NULL,
- NULL,
- MBFL_ENCTYPE_WCS2LE
-};
-
-const struct mbfl_convert_vtbl vtbl_ucs2_wchar = {
- mbfl_no_encoding_ucs2,
- mbfl_no_encoding_wchar,
- mbfl_filt_conv_common_ctor,
- mbfl_filt_conv_common_dtor,
- mbfl_filt_conv_ucs2_wchar,
- mbfl_filt_conv_common_flush
-};
-
-const struct mbfl_convert_vtbl vtbl_wchar_ucs2 = {
- mbfl_no_encoding_wchar,
- mbfl_no_encoding_ucs2,
- mbfl_filt_conv_common_ctor,
- mbfl_filt_conv_common_dtor,
- mbfl_filt_conv_wchar_ucs2be,
- mbfl_filt_conv_common_flush
-};
-
-const struct mbfl_convert_vtbl vtbl_ucs2be_wchar = {
- mbfl_no_encoding_ucs2be,
- mbfl_no_encoding_wchar,
- mbfl_filt_conv_common_ctor,
- mbfl_filt_conv_common_dtor,
- mbfl_filt_conv_ucs2be_wchar,
- mbfl_filt_conv_common_flush
-};
-
-const struct mbfl_convert_vtbl vtbl_wchar_ucs2be = {
- mbfl_no_encoding_wchar,
- mbfl_no_encoding_ucs2be,
- mbfl_filt_conv_common_ctor,
- mbfl_filt_conv_common_dtor,
- mbfl_filt_conv_wchar_ucs2be,
- mbfl_filt_conv_common_flush
-};
-
-const struct mbfl_convert_vtbl vtbl_ucs2le_wchar = {
- mbfl_no_encoding_ucs2le,
- mbfl_no_encoding_wchar,
- mbfl_filt_conv_common_ctor,
- mbfl_filt_conv_common_dtor,
- mbfl_filt_conv_ucs2le_wchar,
- mbfl_filt_conv_common_flush
-};
-
-const struct mbfl_convert_vtbl vtbl_wchar_ucs2le = {
- mbfl_no_encoding_wchar,
- mbfl_no_encoding_ucs2le,
- mbfl_filt_conv_common_ctor,
- mbfl_filt_conv_common_dtor,
- mbfl_filt_conv_wchar_ucs2le,
- mbfl_filt_conv_common_flush
-};
-
-#define CK(statement) do { if ((statement) < 0) return (-1); } while (0)
-
-/*
- * UCS-2 => wchar
- */
-int mbfl_filt_conv_ucs2_wchar(int c, mbfl_convert_filter *filter)
-{
- int n, endian;
-
- endian = filter->status & 0xff00;
- switch (filter->status & 0xff) {
- case 0:
- if (endian) {
- n = c & 0xff;
- } else {
- n = (c & 0xff) << 8;
- }
- filter->cache = n;
- filter->status++;
- break;
- default:
- if (endian) {
- n = (c & 0xff) << 8;
- } else {
- n = c & 0xff;
- }
- n |= filter->cache;
- if (n == 0xfffe) {
- if (endian) {
- filter->status = 0; /* big-endian */
- } else {
- filter->status = 0x100; /* little-endian */
- }
- CK((*filter->output_function)(0xfeff, filter->data));
- } else {
- filter->status &= ~0xff;
- CK((*filter->output_function)(n, filter->data));
- }
- break;
- }
-
- return c;
-}
-
-/*
- * UCS-2BE => wchar
- */
-int mbfl_filt_conv_ucs2be_wchar(int c, mbfl_convert_filter *filter)
-{
- int n;
-
- if (filter->status == 0) {
- filter->status = 1;
- n = (c & 0xff) << 8;
- filter->cache = n;
- } else {
- filter->status = 0;
- n = (c & 0xff) | filter->cache;
- CK((*filter->output_function)(n, filter->data));
- }
- return c;
-}
-
-/*
- * wchar => UCS-2BE
- */
-int mbfl_filt_conv_wchar_ucs2be(int c, mbfl_convert_filter *filter)
-{
- if (c >= 0 && c < MBFL_WCSPLANE_UCS2MAX) {
- CK((*filter->output_function)((c >> 8) & 0xff, filter->data));
- CK((*filter->output_function)(c & 0xff, filter->data));
- } else {
- if (filter->illegal_mode != MBFL_OUTPUTFILTER_ILLEGAL_MODE_NONE) {
- CK(mbfl_filt_conv_illegal_output(c, filter));
- }
- }
-
- return c;
-}
-
-/*
- * UCS-2LE => wchar
- */
-int mbfl_filt_conv_ucs2le_wchar(int c, mbfl_convert_filter *filter)
-{
- int n;
-
- if (filter->status == 0) {
- filter->status = 1;
- n = c & 0xff;
- filter->cache = n;
- } else {
- filter->status = 0;
- n = ((c & 0xff) << 8) | filter->cache;
- CK((*filter->output_function)(n, filter->data));
- }
- return c;
-}
-
-
-/*
- * wchar => UCS-2LE
- */
-int mbfl_filt_conv_wchar_ucs2le(int c, mbfl_convert_filter *filter)
-{
- if (c >= 0 && c < MBFL_WCSPLANE_UCS2MAX) {
- CK((*filter->output_function)(c & 0xff, filter->data));
- CK((*filter->output_function)((c >> 8) & 0xff, filter->data));
- } else {
- if (filter->illegal_mode != MBFL_OUTPUTFILTER_ILLEGAL_MODE_NONE) {
- CK(mbfl_filt_conv_illegal_output(c, filter));
- }
- }
-
- return c;
-}
-
-
-
diff --git a/ext/mbstring/libmbfl/filters/mbfilter_ucs2.h b/ext/mbstring/libmbfl/filters/mbfilter_ucs2.h
deleted file mode 100644
index 6dd1e65697..0000000000
--- a/ext/mbstring/libmbfl/filters/mbfilter_ucs2.h
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * "streamable kanji code filter and converter"
- * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved.
- *
- * LICENSE NOTICES
- *
- * This file is part of "streamable kanji code filter and converter",
- * which is distributed under the terms of GNU Lesser General Public
- * License (version 2) as published by the Free Software Foundation.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with "streamable kanji code filter and converter";
- * if not, write to the Free Software Foundation, Inc., 59 Temple Place,
- * Suite 330, Boston, MA 02111-1307 USA
- *
- * The author of this file:
- *
- */
-/*
- * The source code included in this files was separated from mbfilter.c
- * by moriyoshi koizumi <moriyoshi@php.net> on 4 dec 2002.
- *
- */
-
-#ifndef MBFL_MBFILTER_UCS2_H
-#define MBFL_MBFILTER_UCS2_H
-
-#include "mbfilter.h"
-
-extern const mbfl_encoding mbfl_encoding_ucs2;
-extern const mbfl_encoding mbfl_encoding_ucs2be;
-extern const mbfl_encoding mbfl_encoding_ucs2le;
-extern const struct mbfl_convert_vtbl vtbl_ucs2_wchar;
-extern const struct mbfl_convert_vtbl vtbl_wchar_ucs2;
-extern const struct mbfl_convert_vtbl vtbl_ucs2be_wchar;
-extern const struct mbfl_convert_vtbl vtbl_wchar_ucs2be;
-extern const struct mbfl_convert_vtbl vtbl_ucs2le_wchar;
-extern const struct mbfl_convert_vtbl vtbl_wchar_ucs2le;
-
-int mbfl_filt_conv_ucs2_wchar(int c, mbfl_convert_filter *filter);
-int mbfl_filt_conv_ucs2be_wchar(int c, mbfl_convert_filter *filter);
-int mbfl_filt_conv_wchar_ucs2be(int c, mbfl_convert_filter *filter);
-int mbfl_filt_conv_ucs2le_wchar(int c, mbfl_convert_filter *filter);
-int mbfl_filt_conv_wchar_ucs2le(int c, mbfl_convert_filter *filter);
-
-#endif /* MBFL_MBFILTER_UCS2_H */
diff --git a/ext/mbstring/libmbfl/filters/mbfilter_ucs4.c b/ext/mbstring/libmbfl/filters/mbfilter_ucs4.c
deleted file mode 100644
index 12a2033e0c..0000000000
--- a/ext/mbstring/libmbfl/filters/mbfilter_ucs4.c
+++ /dev/null
@@ -1,275 +0,0 @@
-/*
- * "streamable kanji code filter and converter"
- * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved.
- *
- * LICENSE NOTICES
- *
- * This file is part of "streamable kanji code filter and converter",
- * which is distributed under the terms of GNU Lesser General Public
- * License (version 2) as published by the Free Software Foundation.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with "streamable kanji code filter and converter";
- * if not, write to the Free Software Foundation, Inc., 59 Temple Place,
- * Suite 330, Boston, MA 02111-1307 USA
- *
- * The author of this file:
- *
- */
-/*
- * The source code included in this files was separated from mbfilter.c
- * by moriyoshi koizumi <moriyoshi@php.net> on 4 dec 2002.
- *
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "mbfilter.h"
-#include "mbfilter_ucs4.h"
-
-static const char *mbfl_encoding_ucs4_aliases[] = {"ISO-10646-UCS-4", "UCS4", NULL};
-
-const mbfl_encoding mbfl_encoding_ucs4 = {
- mbfl_no_encoding_ucs4,
- "UCS-4",
- "UCS-4",
- (const char *(*)[])&mbfl_encoding_ucs4_aliases,
- NULL,
- MBFL_ENCTYPE_WCS4BE
-};
-
-const mbfl_encoding mbfl_encoding_ucs4be = {
- mbfl_no_encoding_ucs4be,
- "UCS-4BE",
- "UCS-4BE",
- NULL,
- NULL,
- MBFL_ENCTYPE_WCS4BE
-};
-
-const mbfl_encoding mbfl_encoding_ucs4le = {
- mbfl_no_encoding_ucs4le,
- "UCS-4LE",
- "UCS-4LE",
- NULL,
- NULL,
- MBFL_ENCTYPE_WCS4LE
-};
-
-const struct mbfl_convert_vtbl vtbl_ucs4_wchar = {
- mbfl_no_encoding_ucs4,
- mbfl_no_encoding_wchar,
- mbfl_filt_conv_common_ctor,
- mbfl_filt_conv_common_dtor,
- mbfl_filt_conv_ucs4_wchar,
- mbfl_filt_conv_common_flush
-};
-
-const struct mbfl_convert_vtbl vtbl_wchar_ucs4 = {
- mbfl_no_encoding_wchar,
- mbfl_no_encoding_ucs4,
- mbfl_filt_conv_common_ctor,
- mbfl_filt_conv_common_dtor,
- mbfl_filt_conv_wchar_ucs4be,
- mbfl_filt_conv_common_flush
-};
-
-const struct mbfl_convert_vtbl vtbl_ucs4be_wchar = {
- mbfl_no_encoding_ucs4be,
- mbfl_no_encoding_wchar,
- mbfl_filt_conv_common_ctor,
- mbfl_filt_conv_common_dtor,
- mbfl_filt_conv_ucs4be_wchar,
- mbfl_filt_conv_common_flush
-};
-
-const struct mbfl_convert_vtbl vtbl_wchar_ucs4be = {
- mbfl_no_encoding_wchar,
- mbfl_no_encoding_ucs4be,
- mbfl_filt_conv_common_ctor,
- mbfl_filt_conv_common_dtor,
- mbfl_filt_conv_wchar_ucs4be,
- mbfl_filt_conv_common_flush
-};
-
-const struct mbfl_convert_vtbl vtbl_ucs4le_wchar = {
- mbfl_no_encoding_ucs4le,
- mbfl_no_encoding_wchar,
- mbfl_filt_conv_common_ctor,
- mbfl_filt_conv_common_dtor,
- mbfl_filt_conv_ucs4le_wchar,
- mbfl_filt_conv_common_flush
-};
-
-const struct mbfl_convert_vtbl vtbl_wchar_ucs4le = {
- mbfl_no_encoding_wchar,
- mbfl_no_encoding_ucs4le,
- mbfl_filt_conv_common_ctor,
- mbfl_filt_conv_common_dtor,
- mbfl_filt_conv_wchar_ucs4le,
- mbfl_filt_conv_common_flush
-};
-
-
-#define CK(statement) do { if ((statement) < 0) return (-1); } while (0)
-
-/*
- * UCS-4 => wchar
- */
-int mbfl_filt_conv_ucs4_wchar(int c, mbfl_convert_filter *filter)
-{
- int n, endian;
-
- endian = filter->status & 0xff00;
- switch (filter->status & 0xff) {
- case 0:
- if (endian) {
- n = c & 0xff;
- } else {
- n = (c & 0xff) << 24;
- }
- filter->cache = n;
- filter->status++;
- break;
- case 1:
- if (endian) {
- n = (c & 0xff) << 8;
- } else {
- n = (c & 0xff) << 16;
- }
- filter->cache |= n;
- filter->status++;
- break;
- case 2:
- if (endian) {
- n = (c & 0xff) << 16;
- } else {
- n = (c & 0xff) << 8;
- }
- filter->cache |= n;
- filter->status++;
- break;
- default:
- if (endian) {
- n = (c & 0xff) << 24;
- } else {
- n = c & 0xff;
- }
- n |= filter->cache;
- if ((n & 0xffff) == 0 && ((n >> 16) & 0xffff) == 0xfffe) {
- if (endian) {
- filter->status = 0; /* big-endian */
- } else {
- filter->status = 0x100; /* little-endian */
- }
- CK((*filter->output_function)(0xfeff, filter->data));
- } else {
- filter->status &= ~0xff;
- CK((*filter->output_function)(n, filter->data));
- }
- break;
- }
-
- return c;
-}
-
-/*
- * UCS-4BE => wchar
- */
-int mbfl_filt_conv_ucs4be_wchar(int c, mbfl_convert_filter *filter)
-{
- int n;
-
- if (filter->status == 0) {
- filter->status = 1;
- n = (c & 0xff) << 24;
- filter->cache = n;
- } else if (filter->status == 1) {
- filter->status = 2;
- n = (c & 0xff) << 16;
- filter->cache |= n;
- } else if (filter->status == 2) {
- filter->status = 3;
- n = (c & 0xff) << 8;
- filter->cache |= n;
- } else {
- filter->status = 0;
- n = (c & 0xff) | filter->cache;
- CK((*filter->output_function)(n, filter->data));
- }
- return c;
-}
-
-/*
- * wchar => UCS-4BE
- */
-int mbfl_filt_conv_wchar_ucs4be(int c, mbfl_convert_filter *filter)
-{
- if (c >= 0 && c < MBFL_WCSGROUP_UCS4MAX) {
- CK((*filter->output_function)((c >> 24) & 0xff, filter->data));
- CK((*filter->output_function)((c >> 16) & 0xff, filter->data));
- CK((*filter->output_function)((c >> 8) & 0xff, filter->data));
- CK((*filter->output_function)(c & 0xff, filter->data));
- } else {
- if (filter->illegal_mode != MBFL_OUTPUTFILTER_ILLEGAL_MODE_NONE) {
- CK(mbfl_filt_conv_illegal_output(c, filter));
- }
- }
-
- return c;
-}
-
-/*
- * UCS-4LE => wchar
- */
-int mbfl_filt_conv_ucs4le_wchar(int c, mbfl_convert_filter *filter)
-{
- int n;
-
- if (filter->status == 0) {
- filter->status = 1;
- n = (c & 0xff);
- filter->cache = n;
- } else if (filter->status == 1) {
- filter->status = 2;
- n = (c & 0xff) << 8;
- filter->cache |= n;
- } else if (filter->status == 2) {
- filter->status = 3;
- n = (c & 0xff) << 16;
- filter->cache |= n;
- } else {
- filter->status = 0;
- n = ((c & 0xff) << 24) | filter->cache;
- CK((*filter->output_function)(n, filter->data));
- }
- return c;
-}
-
-/*
- * wchar => UCS-4LE
- */
-int mbfl_filt_conv_wchar_ucs4le(int c, mbfl_convert_filter *filter)
-{
- if (c >= 0 && c < MBFL_WCSGROUP_UCS4MAX) {
- CK((*filter->output_function)(c & 0xff, filter->data));
- CK((*filter->output_function)((c >> 8) & 0xff, filter->data));
- CK((*filter->output_function)((c >> 16) & 0xff, filter->data));
- CK((*filter->output_function)((c >> 24) & 0xff, filter->data));
- } else {
- if (filter->illegal_mode != MBFL_OUTPUTFILTER_ILLEGAL_MODE_NONE) {
- CK(mbfl_filt_conv_illegal_output(c, filter));
- }
- }
-
- return c;
-}
-
-
diff --git a/ext/mbstring/libmbfl/filters/mbfilter_ucs4.h b/ext/mbstring/libmbfl/filters/mbfilter_ucs4.h
deleted file mode 100644
index 718c7e1c2c..0000000000
--- a/ext/mbstring/libmbfl/filters/mbfilter_ucs4.h
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * "streamable kanji code filter and converter"
- * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved.
- *
- * LICENSE NOTICES
- *
- * This file is part of "streamable kanji code filter and converter",
- * which is distributed under the terms of GNU Lesser General Public
- * License (version 2) as published by the Free Software Foundation.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with "streamable kanji code filter and converter";
- * if not, write to the Free Software Foundation, Inc., 59 Temple Place,
- * Suite 330, Boston, MA 02111-1307 USA
- *
- * The author of this file:
- *
- */
-/*
- * The source code included in this files was separated from mbfilter.c
- * by moriyoshi koizumi <moriyoshi@php.net> on 4 dec 2002.
- *
- */
-
-#ifndef MBFL_MBFILTER_UCS4_H
-#define MBFL_MBFILTER_UCS4_H
-
-extern const mbfl_encoding mbfl_encoding_ucs4;
-extern const mbfl_encoding mbfl_encoding_ucs4le;
-extern const mbfl_encoding mbfl_encoding_ucs4be;
-extern const struct mbfl_convert_vtbl vtbl_ucs4_wchar;
-extern const struct mbfl_convert_vtbl vtbl_wchar_ucs4;
-extern const struct mbfl_convert_vtbl vtbl_ucs4be_wchar;
-extern const struct mbfl_convert_vtbl vtbl_wchar_ucs4be;
-extern const struct mbfl_convert_vtbl vtbl_ucs4le_wchar;
-extern const struct mbfl_convert_vtbl vtbl_wchar_ucs4le;
-
-int mbfl_filt_conv_ucs4_wchar(int c, mbfl_convert_filter *filter);
-int mbfl_filt_conv_ucs4be_wchar(int c, mbfl_convert_filter *filter);
-int mbfl_filt_conv_wchar_ucs4be(int c, mbfl_convert_filter *filter);
-int mbfl_filt_conv_ucs4le_wchar(int c, mbfl_convert_filter *filter);
-int mbfl_filt_conv_wchar_ucs4le(int c, mbfl_convert_filter *filter);
-
-#endif /* MBFL_MBFILTER_UCS4_H */
diff --git a/ext/mbstring/libmbfl/filters/mbfilter_uhc.c b/ext/mbstring/libmbfl/filters/mbfilter_uhc.c
deleted file mode 100644
index c72d93f5fb..0000000000
--- a/ext/mbstring/libmbfl/filters/mbfilter_uhc.c
+++ /dev/null
@@ -1,266 +0,0 @@
-/*
- * "streamable kanji code filter and converter"
- * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved.
- *
- * LICENSE NOTICES
- *
- * This file is part of "streamable kanji code filter and converter",
- * which is distributed under the terms of GNU Lesser General Public
- * License (version 2) as published by the Free Software Foundation.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with "streamable kanji code filter and converter";
- * if not, write to the Free Software Foundation, Inc., 59 Temple Place,
- * Suite 330, Boston, MA 02111-1307 USA
- *
- * The author of this file:
- *
- */
-/*
- * The source code included in this files was separated from mbfilter_kr.c
- * by moriyoshi koizumi <moriyoshi@php.net> on 4 dec 2002.
- *
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "mbfilter.h"
-#include "mbfilter_uhc.h"
-#include "unicode_table_uhc.h"
-
-static int mbfl_filt_ident_uhc(int c, mbfl_identify_filter *filter);
-
-static const unsigned char mblen_table_uhc[] = { /* 0x81-0xFE */
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1
-};
-
-static const char *mbfl_encoding_uhc_aliases[] = {"CP949", NULL};
-
-const mbfl_encoding mbfl_encoding_uhc = {
- mbfl_no_encoding_uhc,
- "UHC",
- "UHC",
- (const char *(*)[])&mbfl_encoding_uhc_aliases,
- mblen_table_uhc,
- MBFL_ENCTYPE_MBCS
-};
-
-const struct mbfl_identify_vtbl vtbl_identify_uhc = {
- mbfl_no_encoding_uhc,
- mbfl_filt_ident_common_ctor,
- mbfl_filt_ident_common_dtor,
- mbfl_filt_ident_uhc
-};
-
-const struct mbfl_convert_vtbl vtbl_uhc_wchar = {
- mbfl_no_encoding_uhc,
- mbfl_no_encoding_wchar,
- mbfl_filt_conv_common_ctor,
- mbfl_filt_conv_common_dtor,
- mbfl_filt_conv_uhc_wchar,
- mbfl_filt_conv_common_flush
-};
-
-const struct mbfl_convert_vtbl vtbl_wchar_uhc = {
- mbfl_no_encoding_wchar,
- mbfl_no_encoding_uhc,
- mbfl_filt_conv_common_ctor,
- mbfl_filt_conv_common_dtor,
- mbfl_filt_conv_wchar_uhc,
- mbfl_filt_conv_common_flush
-};
-
-#define CK(statement) do { if ((statement) < 0) return (-1); } while (0)
-
-/*
- * UHC => wchar
- */
-int
-mbfl_filt_conv_uhc_wchar(int c, mbfl_convert_filter *filter)
-{
- int c1, w = 0, flag = 0;
-
- switch (filter->status) {
- case 0:
- if (c >= 0 && c < 0x80) { /* latin */
- CK((*filter->output_function)(c, filter->data));
- } else if (c > 0x80 && c < 0xff && c != 0xc9) { /* dbcs lead byte */
- filter->status = 1;
- filter->cache = c;
- } else {
- w = c & MBFL_WCSGROUP_MASK;
- w |= MBFL_WCSGROUP_THROUGH;
- CK((*filter->output_function)(w, filter->data));
- }
- break;
-
- case 1: /* dbcs second byte */
- filter->status = 0;
- c1 = filter->cache;
-
- if ( c1 >= 0x81 && c1 <= 0xa0){
- w = (c1 - 0x81)*190 + (c - 0x41);
- if (w >= 0 && w < uhc1_ucs_table_size) {
- flag = 1;
- w = uhc1_ucs_table[w];
- } else {
- w = 0;
- }
- } else if ( c1 >= 0xa1 && c1 <= 0xc6){
- w = (c1 - 0xa1)*190 + (c - 0x41);
- if (w >= 0 && w < uhc2_ucs_table_size) {
- flag = 2;
- w = uhc2_ucs_table[w];
- } else {
- w = 0;
- }
- } else if ( c1 >= 0xc7 && c1 <= 0xfe){
- w = (c1 - 0xc7)*94 + (c - 0xa1);
- if (w >= 0 && w < uhc3_ucs_table_size) {
- flag = 3;
- w = uhc3_ucs_table[w];
- } else {
- w = 0;
- }
- }
- if (flag > 0){
- if (w <= 0) {
- w = (c1 << 8) | c;
- w &= MBFL_WCSPLANE_MASK;
- w |= MBFL_WCSPLANE_UHC;
- }
- CK((*filter->output_function)(w, filter->data));
- } else {
- if ((c >= 0 && c < 0x21) || c == 0x7f) { /* CTLs */
- CK((*filter->output_function)(c, filter->data));
- } else {
- w = (c1 << 8) | c;
- w &= MBFL_WCSGROUP_MASK;
- w |= MBFL_WCSGROUP_THROUGH;
- CK((*filter->output_function)(w, filter->data));
- }
- }
- break;
-
- default:
- filter->status = 0;
- break;
- }
-
- return c;
-}
-
-/*
- * wchar => UHC
- */
-int
-mbfl_filt_conv_wchar_uhc(int c, mbfl_convert_filter *filter)
-{
- int c1, s;
-
- s = 0;
- if (c >= ucs_a1_uhc_table_min && c < ucs_a1_uhc_table_max) {
- s = ucs_a1_uhc_table[c - ucs_a1_uhc_table_min];
- } else if (c >= ucs_a2_uhc_table_min && c < ucs_a2_uhc_table_max) {
- s = ucs_a2_uhc_table[c - ucs_a2_uhc_table_min];
- } else if (c >= ucs_a3_uhc_table_min && c < ucs_a3_uhc_table_max) {
- s = ucs_a3_uhc_table[c - ucs_a3_uhc_table_min];
- } else if (c >= ucs_i_uhc_table_min && c < ucs_i_uhc_table_max) {
- s = ucs_i_uhc_table[c - ucs_i_uhc_table_min];
- } else if (c >= ucs_s_uhc_table_min && c < ucs_s_uhc_table_max) {
- s = ucs_s_uhc_table[c - ucs_s_uhc_table_min];
- } else if (c >= ucs_r1_uhc_table_min && c < ucs_r1_uhc_table_max) {
- s = ucs_r1_uhc_table[c - ucs_r1_uhc_table_min];
- } else if (c >= ucs_r2_uhc_table_min && c < ucs_r2_uhc_table_max) {
- s = ucs_r2_uhc_table[c - ucs_r2_uhc_table_min];
- }
- if (s <= 0) {
- c1 = c & ~MBFL_WCSPLANE_MASK;
- if (c1 == MBFL_WCSPLANE_UHC) {
- s = c & MBFL_WCSPLANE_MASK;
- }
- if (c == 0) {
- s = 0;
- } else if (s <= 0) {
- s = -1;
- }
- }
- if (s >= 0) {
- if (s < 0x80) { /* latin */
- CK((*filter->output_function)(s, filter->data));
- } else {
- CK((*filter->output_function)((s >> 8) & 0xff, filter->data));
- CK((*filter->output_function)(s & 0xff, filter->data));
- }
- } else {
- if (filter->illegal_mode != MBFL_OUTPUTFILTER_ILLEGAL_MODE_NONE) {
- CK(mbfl_filt_conv_illegal_output(c, filter));
- }
- }
-
- return c;
-}
-
-static int mbfl_filt_ident_uhc(int c, mbfl_identify_filter *filter)
-{
- switch (filter->status) {
- case 0: /* latin */
- if (c >= 0 && c < 0x80) { /* ok */
- ;
- } else if (c >= 0x81 && c <= 0xa0) { /* dbcs first char */
- filter->status= 1;
- } else if (c >= 0xa1 && c <= 0xc6) { /* dbcs first char */
- filter->status= 2;
- } else if (c >= 0xc7 && c <= 0xfe) { /* dbcs first char */
- filter->status= 3;
- } else { /* bad */
- filter->flag = 1;
- }
-
- case 1:
- case 2:
- if (c < 0x41 || (c > 0x5a && c < 0x61)
- || (c > 0x7a && c < 0x81) || c > 0xfe) { /* bad */
- filter->flag = 1;
- }
- filter->status = 0;
- break;
-
- case 3:
- if (c < 0xa1 || c > 0xfe) { /* bad */
- filter->flag = 1;
- }
- filter->status = 0;
- break;
-
- default:
- filter->status = 0;
- break;
- }
-
- return c;
-}
-
-
diff --git a/ext/mbstring/libmbfl/filters/mbfilter_uhc.h b/ext/mbstring/libmbfl/filters/mbfilter_uhc.h
deleted file mode 100644
index f964249197..0000000000
--- a/ext/mbstring/libmbfl/filters/mbfilter_uhc.h
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * "streamable kanji code filter and converter"
- * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved.
- *
- * LICENSE NOTICES
- *
- * This file is part of "streamable kanji code filter and converter",
- * which is distributed under the terms of GNU Lesser General Public
- * License (version 2) as published by the Free Software Foundation.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with "streamable kanji code filter and converter";
- * if not, write to the Free Software Foundation, Inc., 59 Temple Place,
- * Suite 330, Boston, MA 02111-1307 USA
- *
- * The author of this file:
- *
- */
-/*
- * The source code included in this files was separated from mbfilter_kr.h
- * by moriyoshi koizumi <moriyoshi@php.net> on 4 dec 2002.
- *
- */
-
-#ifndef MBFL_MBFILTER_UHC_H
-#define MBFL_MBFILTER_UHC_H
-
-#include "mbfilter.h"
-
-extern const mbfl_encoding mbfl_encoding_uhc;
-extern const struct mbfl_identify_vtbl vtbl_identify_uhc;
-extern const struct mbfl_convert_vtbl vtbl_uhc_wchar;
-extern const struct mbfl_convert_vtbl vtbl_wchar_uhc;
-
-int mbfl_filt_conv_uhc_wchar(int c, mbfl_convert_filter *filter);
-int mbfl_filt_conv_wchar_uhc(int c, mbfl_convert_filter *filter);
-
-#endif /* MBFL_MBFILTER_UHC_H */
diff --git a/ext/mbstring/libmbfl/filters/mbfilter_utf16.c b/ext/mbstring/libmbfl/filters/mbfilter_utf16.c
deleted file mode 100644
index b6c2aeda5b..0000000000
--- a/ext/mbstring/libmbfl/filters/mbfilter_utf16.c
+++ /dev/null
@@ -1,309 +0,0 @@
-/*
- * "streamable kanji code filter and converter"
- * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved.
- *
- * LICENSE NOTICES
- *
- * This file is part of "streamable kanji code filter and converter",
- * which is distributed under the terms of GNU Lesser General Public
- * License (version 2) as published by the Free Software Foundation.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with "streamable kanji code filter and converter";
- * if not, write to the Free Software Foundation, Inc., 59 Temple Place,
- * Suite 330, Boston, MA 02111-1307 USA
- *
- * The author of this file:
- *
- */
-/*
- * The source code included in this files was separated from mbfilter.c
- * by moriyoshi koizumi <moriyoshi@php.net> on 4 dec 2002.
- *
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "mbfilter.h"
-#include "mbfilter_utf16.h"
-
-static const char *mbfl_encoding_utf16_aliases[] = {"utf16", NULL};
-
-const mbfl_encoding mbfl_encoding_utf16 = {
- mbfl_no_encoding_utf16,
- "UTF-16",
- "UTF-16",
- (const char *(*)[])&mbfl_encoding_utf16_aliases,
- NULL,
- MBFL_ENCTYPE_MWC2BE
-};
-
-const mbfl_encoding mbfl_encoding_utf16be = {
- mbfl_no_encoding_utf16be,
- "UTF-16BE",
- "UTF-16BE",
- NULL,
- NULL,
- MBFL_ENCTYPE_MWC2BE
-};
-
-const mbfl_encoding mbfl_encoding_utf16le = {
- mbfl_no_encoding_utf16le,
- "UTF-16LE",
- "UTF-16LE",
- NULL,
- NULL,
- MBFL_ENCTYPE_MWC2LE
-};
-
-const struct mbfl_convert_vtbl vtbl_utf16_wchar = {
- mbfl_no_encoding_utf16,
- mbfl_no_encoding_wchar,
- mbfl_filt_conv_common_ctor,
- mbfl_filt_conv_common_dtor,
- mbfl_filt_conv_utf16_wchar,
- mbfl_filt_conv_common_flush
-};
-
-const struct mbfl_convert_vtbl vtbl_wchar_utf16 = {
- mbfl_no_encoding_wchar,
- mbfl_no_encoding_utf16,
- mbfl_filt_conv_common_ctor,
- mbfl_filt_conv_common_dtor,
- mbfl_filt_conv_wchar_utf16be,
- mbfl_filt_conv_common_flush
-};
-
-const struct mbfl_convert_vtbl vtbl_utf16be_wchar = {
- mbfl_no_encoding_utf16be,
- mbfl_no_encoding_wchar,
- mbfl_filt_conv_common_ctor,
- mbfl_filt_conv_common_dtor,
- mbfl_filt_conv_utf16be_wchar,
- mbfl_filt_conv_common_flush
-};
-
-const struct mbfl_convert_vtbl vtbl_wchar_utf16be = {
- mbfl_no_encoding_wchar,
- mbfl_no_encoding_utf16be,
- mbfl_filt_conv_common_ctor,
- mbfl_filt_conv_common_dtor,
- mbfl_filt_conv_wchar_utf16be,
- mbfl_filt_conv_common_flush
-};
-
-const struct mbfl_convert_vtbl vtbl_utf16le_wchar = {
- mbfl_no_encoding_utf16le,
- mbfl_no_encoding_wchar,
- mbfl_filt_conv_common_ctor,
- mbfl_filt_conv_common_dtor,
- mbfl_filt_conv_utf16le_wchar,
- mbfl_filt_conv_common_flush
-};
-
-const struct mbfl_convert_vtbl vtbl_wchar_utf16le = {
- mbfl_no_encoding_wchar,
- mbfl_no_encoding_utf16le,
- mbfl_filt_conv_common_ctor,
- mbfl_filt_conv_common_dtor,
- mbfl_filt_conv_wchar_utf16le,
- mbfl_filt_conv_common_flush
-};
-
-#define CK(statement) do { if ((statement) < 0) return (-1); } while (0)
-
-/*
- * UTF-16 => wchar
- */
-int mbfl_filt_conv_utf16_wchar(int c, mbfl_convert_filter *filter)
-{
- int n, endian;
-
- endian = filter->status & 0xff00;
- switch (filter->status & 0xff) {
- case 0:
- if (endian) {
- n = c & 0xff;
- } else {
- n = (c & 0xff) << 8;
- }
- filter->cache |= n;
- filter->status++;
- break;
- default:
- if (endian) {
- n = (c & 0xff) << 8;
- } else {
- n = c & 0xff;
- }
- n |= filter->cache & 0xffff;
- filter->status &= ~0xff;
- if (n == 0xfffe) {
- if (endian) {
- filter->status = 0; /* big-endian */
- } else {
- filter->status = 0x100; /* little-endian */
- }
- CK((*filter->output_function)(0xfeff, filter->data));
- } else if (n >= 0xd800 && n < 0xdc00) {
- filter->cache = ((n & 0x3ff) << 16) + 0x400000;
- } else if (n >= 0xdc00 && n < 0xe000) {
- n &= 0x3ff;
- n |= (filter->cache & 0xfff0000) >> 6;
- filter->cache = 0;
- if (n >= MBFL_WCSPLANE_SUPMIN && n < MBFL_WCSPLANE_SUPMAX) {
- CK((*filter->output_function)(n, filter->data));
- } else { /* illegal character */
- n &= MBFL_WCSGROUP_MASK;
- n |= MBFL_WCSGROUP_THROUGH;
- CK((*filter->output_function)(n, filter->data));
- }
- } else {
- filter->cache = 0;
- CK((*filter->output_function)(n, filter->data));
- }
- break;
- }
-
- return c;
-}
-
-/*
- * UTF-16BE => wchar
- */
-int mbfl_filt_conv_utf16be_wchar(int c, mbfl_convert_filter *filter)
-{
- int n;
-
- switch (filter->status) {
- case 0:
- filter->status = 1;
- n = (c & 0xff) << 8;
- filter->cache |= n;
- break;
- default:
- filter->status = 0;
- n = (filter->cache & 0xff00) | (c & 0xff);
- if (n >= 0xd800 && n < 0xdc00) {
- filter->cache = ((n & 0x3ff) << 16) + 0x400000;
- } else if (n >= 0xdc00 && n < 0xe000) {
- n &= 0x3ff;
- n |= (filter->cache & 0xfff0000) >> 6;
- filter->cache = 0;
- if (n >= MBFL_WCSPLANE_SUPMIN && n < MBFL_WCSPLANE_SUPMAX) {
- CK((*filter->output_function)(n, filter->data));
- } else { /* illegal character */
- n &= MBFL_WCSGROUP_MASK;
- n |= MBFL_WCSGROUP_THROUGH;
- CK((*filter->output_function)(n, filter->data));
- }
- } else {
- filter->cache = 0;
- CK((*filter->output_function)(n, filter->data));
- }
- break;
- }
-
- return c;
-}
-
-/*
- * wchar => UTF-16BE
- */
-int mbfl_filt_conv_wchar_utf16be(int c, mbfl_convert_filter *filter)
-{
- int n;
-
- if (c >= 0 && c < MBFL_WCSPLANE_UCS2MAX) {
- CK((*filter->output_function)((c >> 8) & 0xff, filter->data));
- CK((*filter->output_function)(c & 0xff, filter->data));
- } else if (c >= MBFL_WCSPLANE_SUPMIN && c < MBFL_WCSPLANE_SUPMAX) {
- n = ((c >> 10) - 0x40) | 0xd800;
- CK((*filter->output_function)((n >> 8) & 0xff, filter->data));
- CK((*filter->output_function)(n & 0xff, filter->data));
- n = (c & 0x3ff) | 0xdc00;
- CK((*filter->output_function)((n >> 8) & 0xff, filter->data));
- CK((*filter->output_function)(n & 0xff, filter->data));
- } else {
- if (filter->illegal_mode != MBFL_OUTPUTFILTER_ILLEGAL_MODE_NONE) {
- CK(mbfl_filt_conv_illegal_output(c, filter));
- }
- }
-
- return c;
-}
-
-/*
- * UTF-16LE => wchar
- */
-int mbfl_filt_conv_utf16le_wchar(int c, mbfl_convert_filter *filter)
-{
- int n;
-
- switch (filter->status) {
- case 0:
- filter->status = 1;
- n = c & 0xff;
- filter->cache |= n;
- break;
- default:
- filter->status = 0;
- n = (filter->cache & 0xff) | ((c & 0xff) << 8);
- if (n >= 0xd800 && n < 0xdc00) {
- filter->cache = ((n & 0x3ff) << 16) + 0x400000;
- } else if (n >= 0xdc00 && n < 0xe000) {
- n &= 0x3ff;
- n |= (filter->cache & 0xfff0000) >> 6;
- filter->cache = 0;
- if (n >= MBFL_WCSPLANE_SUPMIN && n < MBFL_WCSPLANE_SUPMAX) {
- CK((*filter->output_function)(n, filter->data));
- } else { /* illegal character */
- n &= MBFL_WCSGROUP_MASK;
- n |= MBFL_WCSGROUP_THROUGH;
- CK((*filter->output_function)(n, filter->data));
- }
- } else {
- filter->cache = 0;
- CK((*filter->output_function)(n, filter->data));
- }
- break;
- }
-
- return c;
-}
-
-/*
- * wchar => UTF-16LE
- */
-int mbfl_filt_conv_wchar_utf16le(int c, mbfl_convert_filter *filter)
-{
- int n;
-
- if (c >= 0 && c < MBFL_WCSPLANE_UCS2MAX) {
- CK((*filter->output_function)(c & 0xff, filter->data));
- CK((*filter->output_function)((c >> 8) & 0xff, filter->data));
- } else if (c >= MBFL_WCSPLANE_SUPMIN && c < MBFL_WCSPLANE_SUPMAX) {
- n = ((c >> 10) - 0x40) | 0xd800;
- CK((*filter->output_function)(n & 0xff, filter->data));
- CK((*filter->output_function)((n >> 8) & 0xff, filter->data));
- n = (c & 0x3ff) | 0xdc00;
- CK((*filter->output_function)(n & 0xff, filter->data));
- CK((*filter->output_function)((n >> 8) & 0xff, filter->data));
- } else {
- if (filter->illegal_mode != MBFL_OUTPUTFILTER_ILLEGAL_MODE_NONE) {
- CK(mbfl_filt_conv_illegal_output(c, filter));
- }
- }
-
- return c;
-}
-
-
-
diff --git a/ext/mbstring/libmbfl/filters/mbfilter_utf16.h b/ext/mbstring/libmbfl/filters/mbfilter_utf16.h
deleted file mode 100644
index f54bb00573..0000000000
--- a/ext/mbstring/libmbfl/filters/mbfilter_utf16.h
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * "streamable kanji code filter and converter"
- * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved.
- *
- * LICENSE NOTICES
- *
- * This file is part of "streamable kanji code filter and converter",
- * which is distributed under the terms of GNU Lesser General Public
- * License (version 2) as published by the Free Software Foundation.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with "streamable kanji code filter and converter";
- * if not, write to the Free Software Foundation, Inc., 59 Temple Place,
- * Suite 330, Boston, MA 02111-1307 USA
- *
- * The author of this file:
- *
- */
-/*
- * The source code included in this files was separated from mbfilter.c
- * by moriyoshi koizumi <moriyoshi@php.net> on 4 dec 2002.
- *
- */
-
-#ifndef MBFL_MBFILTER_UTF16_H
-#define MBFL_MBFILTER_UTF16_H
-
-extern const mbfl_encoding mbfl_encoding_utf16;
-extern const mbfl_encoding mbfl_encoding_utf16be;
-extern const mbfl_encoding mbfl_encoding_utf16le;
-extern const struct mbfl_convert_vtbl vtbl_utf16_wchar;
-extern const struct mbfl_convert_vtbl vtbl_wchar_utf16;
-extern const struct mbfl_convert_vtbl vtbl_utf16be_wchar;
-extern const struct mbfl_convert_vtbl vtbl_wchar_utf16be;
-extern const struct mbfl_convert_vtbl vtbl_utf16le_wchar;
-extern const struct mbfl_convert_vtbl vtbl_wchar_utf16le;
-
-int mbfl_filt_conv_utf16_wchar(int c, mbfl_convert_filter *filter);
-int mbfl_filt_conv_utf16be_wchar(int c, mbfl_convert_filter *filter);
-int mbfl_filt_conv_wchar_utf16be(int c, mbfl_convert_filter *filter);
-int mbfl_filt_conv_utf16le_wchar(int c, mbfl_convert_filter *filter);
-int mbfl_filt_conv_wchar_utf16le(int c, mbfl_convert_filter *filter);
-
-#endif /* MBFL_MBFILTER_UTF16_H */
diff --git a/ext/mbstring/libmbfl/filters/mbfilter_utf32.c b/ext/mbstring/libmbfl/filters/mbfilter_utf32.c
deleted file mode 100644
index 4b0e9b9e0f..0000000000
--- a/ext/mbstring/libmbfl/filters/mbfilter_utf32.c
+++ /dev/null
@@ -1,272 +0,0 @@
-/*
- * "streamable kanji code filter and converter"
- * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved.
- *
- * LICENSE NOTICES
- *
- * This file is part of "streamable kanji code filter and converter",
- * which is distributed under the terms of GNU Lesser General Public
- * License (version 2) as published by the Free Software Foundation.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with "streamable kanji code filter and converter";
- * if not, write to the Free Software Foundation, Inc., 59 Temple Place,
- * Suite 330, Boston, MA 02111-1307 USA
- *
- * The author of this file:
- *
- */
-/*
- * The source code included in this files was separated from mbfilter.c
- * by moriyoshi koizumi <moriyoshi@php.net> on 20 dec 2002.
- *
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "mbfilter.h"
-#include "mbfilter_utf32.h"
-
-static const char *mbfl_encoding_utf32_aliases[] = {"utf32", NULL};
-
-const mbfl_encoding mbfl_encoding_utf32 = {
- mbfl_no_encoding_utf32,
- "UTF-32",
- "UTF-32",
- (const char *(*)[])&mbfl_encoding_utf32_aliases,
- NULL,
- MBFL_ENCTYPE_WCS4BE
-};
-
-const mbfl_encoding mbfl_encoding_utf32be = {
- mbfl_no_encoding_utf32be,
- "UTF-32BE",
- "UTF-32BE",
- NULL,
- NULL,
- MBFL_ENCTYPE_WCS4BE
-};
-
-const mbfl_encoding mbfl_encoding_utf32le = {
- mbfl_no_encoding_utf32le,
- "UTF-32LE",
- "UTF-32LE",
- NULL,
- NULL,
- MBFL_ENCTYPE_WCS4LE
-};
-
-const struct mbfl_convert_vtbl vtbl_utf32_wchar = {
- mbfl_no_encoding_utf32,
- mbfl_no_encoding_wchar,
- mbfl_filt_conv_common_ctor,
- mbfl_filt_conv_common_dtor,
- mbfl_filt_conv_utf32_wchar,
- mbfl_filt_conv_common_flush
-};
-
-const struct mbfl_convert_vtbl vtbl_wchar_utf32 = {
- mbfl_no_encoding_wchar,
- mbfl_no_encoding_utf32,
- mbfl_filt_conv_common_ctor,
- mbfl_filt_conv_common_dtor,
- mbfl_filt_conv_wchar_utf32be,
- mbfl_filt_conv_common_flush
-};
-
-const struct mbfl_convert_vtbl vtbl_utf32be_wchar = {
- mbfl_no_encoding_utf32be,
- mbfl_no_encoding_wchar,
- mbfl_filt_conv_common_ctor,
- mbfl_filt_conv_common_dtor,
- mbfl_filt_conv_utf32be_wchar,
- mbfl_filt_conv_common_flush
-};
-
-const struct mbfl_convert_vtbl vtbl_wchar_utf32be = {
- mbfl_no_encoding_wchar,
- mbfl_no_encoding_utf32be,
- mbfl_filt_conv_common_ctor,
- mbfl_filt_conv_common_dtor,
- mbfl_filt_conv_wchar_utf32be,
- mbfl_filt_conv_common_flush
-};
-
-const struct mbfl_convert_vtbl vtbl_utf32le_wchar = {
- mbfl_no_encoding_utf32le,
- mbfl_no_encoding_wchar,
- mbfl_filt_conv_common_ctor,
- mbfl_filt_conv_common_dtor,
- mbfl_filt_conv_utf32le_wchar,
- mbfl_filt_conv_common_flush
-};
-
-const struct mbfl_convert_vtbl vtbl_wchar_utf32le = {
- mbfl_no_encoding_wchar,
- mbfl_no_encoding_utf32le,
- mbfl_filt_conv_common_ctor,
- mbfl_filt_conv_common_dtor,
- mbfl_filt_conv_wchar_utf32le,
- mbfl_filt_conv_common_flush
-};
-
-#define CK(statement) do { if ((statement) < 0) return (-1); } while (0)
-
-/*
- * UTF-32 => wchar
- */
-int mbfl_filt_conv_utf32_wchar(int c, mbfl_convert_filter *filter)
-{
- int n, endian;
-
- endian = filter->status & 0xff00;
- switch (filter->status & 0xff) {
- case 0:
- if (endian) {
- n = c & 0xff;
- } else {
- n = (c & 0xff) << 24;
- }
- filter->cache = n;
- filter->status++;
- break;
- case 1:
- if (endian) {
- n = (c & 0xff) << 8;
- } else {
- n = (c & 0xff) << 16;
- }
- filter->cache |= n;
- filter->status++;
- break;
- case 2:
- if (endian) {
- n = (c & 0xff) << 16;
- } else {
- n = (c & 0xff) << 8;
- }
- filter->cache |= n;
- filter->status++;
- break;
- default:
- if (endian) {
- n = (c & 0xff) << 24;
- } else {
- n = c & 0xff;
- }
- n |= filter->cache;
- if ((n & 0xffff) == 0 && ((n >> 16) & 0xffff) == 0xfffe) {
- if (endian) {
- filter->status = 0; /* big-endian */
- } else {
- filter->status = 0x100; /* little-endian */
- }
- CK((*filter->output_function)(0xfeff, filter->data));
- } else {
- filter->status &= ~0xff;
- CK((*filter->output_function)(n, filter->data));
- }
- break;
- }
-
- return c;
-}
-
-/*
- * UTF-32BE => wchar
- */
-int mbfl_filt_conv_utf32be_wchar(int c, mbfl_convert_filter *filter)
-{
- int n;
-
- if (filter->status == 0) {
- filter->status = 1;
- n = (c & 0xff) << 24;
- filter->cache = n;
- } else if (filter->status == 1) {
- filter->status = 2;
- n = (c & 0xff) << 16;
- filter->cache |= n;
- } else if (filter->status == 2) {
- filter->status = 3;
- n = (c & 0xff) << 8;
- filter->cache |= n;
- } else {
- filter->status = 0;
- n = (c & 0xff) | filter->cache;
- CK((*filter->output_function)(n, filter->data));
- }
- return c;
-}
-
-/*
- * wchar => UTF-32BE
- */
-int mbfl_filt_conv_wchar_utf32be(int c, mbfl_convert_filter *filter)
-{
- if (c >= 0 && c < MBFL_WCSGROUP_UCS4MAX) {
- CK((*filter->output_function)((c >> 24) & 0xff, filter->data));
- CK((*filter->output_function)((c >> 16) & 0xff, filter->data));
- CK((*filter->output_function)((c >> 8) & 0xff, filter->data));
- CK((*filter->output_function)(c & 0xff, filter->data));
- } else {
- if (filter->illegal_mode != MBFL_OUTPUTFILTER_ILLEGAL_MODE_NONE) {
- CK(mbfl_filt_conv_illegal_output(c, filter));
- }
- }
-
- return c;
-}
-
-/*
- * UTF-32LE => wchar
- */
-int mbfl_filt_conv_utf32le_wchar(int c, mbfl_convert_filter *filter)
-{
- int n;
-
- if (filter->status == 0) {
- filter->status = 1;
- n = (c & 0xff);
- filter->cache = n;
- } else if (filter->status == 1) {
- filter->status = 2;
- n = (c & 0xff) << 8;
- filter->cache |= n;
- } else if (filter->status == 2) {
- filter->status = 3;
- n = (c & 0xff) << 16;
- filter->cache |= n;
- } else {
- filter->status = 0;
- n = ((c & 0xff) << 24) | filter->cache;
- CK((*filter->output_function)(n, filter->data));
- }
- return c;
-}
-
-/*
- * wchar => UTF-32LE
- */
-int mbfl_filt_conv_wchar_utf32le(int c, mbfl_convert_filter *filter)
-{
- if (c >= 0 && c < MBFL_WCSGROUP_UCS4MAX) {
- CK((*filter->output_function)(c & 0xff, filter->data));
- CK((*filter->output_function)((c >> 8) & 0xff, filter->data));
- CK((*filter->output_function)((c >> 16) & 0xff, filter->data));
- CK((*filter->output_function)((c >> 24) & 0xff, filter->data));
- } else {
- if (filter->illegal_mode != MBFL_OUTPUTFILTER_ILLEGAL_MODE_NONE) {
- CK(mbfl_filt_conv_illegal_output(c, filter));
- }
- }
-
- return c;
-}
diff --git a/ext/mbstring/libmbfl/filters/mbfilter_utf32.h b/ext/mbstring/libmbfl/filters/mbfilter_utf32.h
deleted file mode 100644
index c280e9f376..0000000000
--- a/ext/mbstring/libmbfl/filters/mbfilter_utf32.h
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * "streamable kanji code filter and converter"
- * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved.
- *
- * LICENSE NOTICES
- *
- * This file is part of "streamable kanji code filter and converter",
- * which is distributed under the terms of GNU Lesser General Public
- * License (version 2) as published by the Free Software Foundation.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with "streamable kanji code filter and converter";
- * if not, write to the Free Software Foundation, Inc., 59 Temple Place,
- * Suite 330, Boston, MA 02111-1307 USA
- *
- * The author of this file:
- *
- */
-/*
- * The source code included in this files was separated from mbfilter.c
- * by moriyoshi koizumi <moriyoshi@php.net> on 20 dec 2002.
- *
- */
-
-#ifndef MBFL_MBFILTER_UTF32_H
-#define MBFL_MBFILTER_UTF32_H
-
-extern const mbfl_encoding mbfl_encoding_utf32;
-extern const mbfl_encoding mbfl_encoding_utf32be;
-extern const mbfl_encoding mbfl_encoding_utf32le;
-extern const struct mbfl_convert_vtbl vtbl_utf32_wchar;
-extern const struct mbfl_convert_vtbl vtbl_wchar_utf32;
-extern const struct mbfl_convert_vtbl vtbl_utf32be_wchar;
-extern const struct mbfl_convert_vtbl vtbl_wchar_utf32be;
-extern const struct mbfl_convert_vtbl vtbl_utf32le_wchar;
-extern const struct mbfl_convert_vtbl vtbl_wchar_utf32le;
-
-int mbfl_filt_conv_utf32_wchar(int c, mbfl_convert_filter *filter);
-int mbfl_filt_conv_utf32be_wchar(int c, mbfl_convert_filter *filter);
-int mbfl_filt_conv_wchar_utf32be(int c, mbfl_convert_filter *filter);
-int mbfl_filt_conv_utf32le_wchar(int c, mbfl_convert_filter *filter);
-int mbfl_filt_conv_wchar_utf32le(int c, mbfl_convert_filter *filter);
-
-#endif /* MBFL_MBFILTER_UTF32_H */
-
diff --git a/ext/mbstring/libmbfl/filters/mbfilter_utf7.c b/ext/mbstring/libmbfl/filters/mbfilter_utf7.c
deleted file mode 100644
index ea37073761..0000000000
--- a/ext/mbstring/libmbfl/filters/mbfilter_utf7.c
+++ /dev/null
@@ -1,460 +0,0 @@
-/*
- * "streamable kanji code filter and converter"
- * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved.
- *
- * LICENSE NOTICES
- *
- * This file is part of "streamable kanji code filter and converter",
- * which is distributed under the terms of GNU Lesser General Public
- * License (version 2) as published by the Free Software Foundation.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with "streamable kanji code filter and converter";
- * if not, write to the Free Software Foundation, Inc., 59 Temple Place,
- * Suite 330, Boston, MA 02111-1307 USA
- *
- * The author of this file:
- *
- */
-/*
- * The source code included in this files was separated from mbfilter.c
- * by moriyoshi koizumi <moriyoshi@php.net> on 4 dec 2002.
- *
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "mbfilter.h"
-#include "mbfilter_utf7.h"
-
-static int mbfl_filt_ident_utf7(int c, mbfl_identify_filter *filter);
-
-static const unsigned char mbfl_base64_table[] = {
- /* 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', */
- 0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4a,0x4b,0x4c,0x4d,
- /* 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', */
- 0x4e,0x4f,0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5a,
- /* 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', */
- 0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6a,0x6b,0x6c,0x6d,
- /* 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', */
- 0x6e,0x6f,0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7a,
- /* '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '+', '/', '\0' */
- 0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x2b,0x2f,0x00
-};
-
-static const char *mbfl_encoding_utf7_aliases[] = {"utf7", NULL};
-
-const mbfl_encoding mbfl_encoding_utf7 = {
- mbfl_no_encoding_utf7,
- "UTF-7",
- "UTF-7",
- (const char *(*)[])&mbfl_encoding_utf7_aliases,
- NULL,
- MBFL_ENCTYPE_MBCS | MBFL_ENCTYPE_SHFTCODE
-};
-
-const struct mbfl_identify_vtbl vtbl_identify_utf7 = {
- mbfl_no_encoding_utf7,
- mbfl_filt_ident_common_ctor,
- mbfl_filt_ident_common_dtor,
- mbfl_filt_ident_utf7
-};
-
-const struct mbfl_convert_vtbl vtbl_utf7_wchar = {
- mbfl_no_encoding_utf7,
- mbfl_no_encoding_wchar,
- mbfl_filt_conv_common_ctor,
- mbfl_filt_conv_common_dtor,
- mbfl_filt_conv_utf7_wchar,
- mbfl_filt_conv_common_flush
-};
-
-const struct mbfl_convert_vtbl vtbl_wchar_utf7 = {
- mbfl_no_encoding_wchar,
- mbfl_no_encoding_utf7,
- mbfl_filt_conv_common_ctor,
- mbfl_filt_conv_common_dtor,
- mbfl_filt_conv_wchar_utf7,
- mbfl_filt_conv_wchar_utf7_flush
-};
-
-
-#define CK(statement) do { if ((statement) < 0) return (-1); } while (0)
-
-/*
- * UTF-7 => wchar
- */
-int mbfl_filt_conv_utf7_wchar(int c, mbfl_convert_filter *filter)
-{
- int s, n;
-
- n = -1;
- if (filter->status != 0) { /* Modified Base64 */
- if (c >= 0x41 && c <= 0x5a) { /* A - Z */
- n = c - 65;
- } else if (c >= 0x61 && c <= 0x7a) { /* a - z */
- n = c - 71;
- } else if (c >= 0x30 && c <= 0x39) { /* 0 - 9 */
- n = c + 4;
- } else if (c == 0x2b) { /* '+' */
- n = 62;
- } else if (c == 0x2f) { /* '/' */
- n = 63;
- }
- if (n < 0 || n > 63) {
- if (c == 0x2d) {
- if (filter->status == 1) { /* "+-" -> "+" */
- CK((*filter->output_function)(0x2b, filter->data));
- }
- } else if (c >= 0 && c < 0x80) { /* ASCII exclude '-' */
- CK((*filter->output_function)(c, filter->data));
- } else { /* illegal character */
- s = c & MBFL_WCSGROUP_MASK;
- s |= MBFL_WCSGROUP_THROUGH;
- CK((*filter->output_function)(s, filter->data));
- }
- filter->cache = 0;
- filter->status = 0;
- return c;
- }
- }
-
- switch (filter->status) {
- /* directly encoded characters */
- case 0:
- if (c == 0x2b) { /* '+' shift character */
- filter->status = 1;
- } else if (c >= 0 && c < 0x80) { /* ASCII */
- CK((*filter->output_function)(c, filter->data));
- } else { /* illegal character */
- s = c & MBFL_WCSGROUP_MASK;
- s |= MBFL_WCSGROUP_THROUGH;
- CK((*filter->output_function)(s, filter->data));
- }
- break;
-
- /* decode Modified Base64 */
- case 1:
- case 2:
- filter->cache |= n << 10;
- filter->status = 3;
- break;
- case 3:
- filter->cache |= n << 4;
- filter->status = 4;
- break;
- case 4:
- s = ((n >> 2) & 0xf) | (filter->cache & 0xffff);
- n = (n & 0x3) << 14;
- filter->status = 5;
- if (s >= 0xd800 && s < 0xdc00) {
- s = (((s & 0x3ff) << 16) + 0x400000) | n;
- filter->cache = s;
- } else if (s >= 0xdc00 && s < 0xe000) {
- s &= 0x3ff;
- s |= (filter->cache & 0xfff0000) >> 6;
- filter->cache = n;
- if (s >= MBFL_WCSPLANE_SUPMIN && s < MBFL_WCSPLANE_SUPMAX) {
- CK((*filter->output_function)(s, filter->data));
- } else { /* illegal character */
- s &= MBFL_WCSGROUP_MASK;
- s |= MBFL_WCSGROUP_THROUGH;
- CK((*filter->output_function)(s, filter->data));
- }
- } else {
- filter->cache = n;
- CK((*filter->output_function)(s, filter->data));
- }
- break;
-
- case 5:
- filter->cache |= n << 8;
- filter->status = 6;
- break;
- case 6:
- filter->cache |= n << 2;
- filter->status = 7;
- break;
- case 7:
- s = ((n >> 4) & 0x3) | (filter->cache & 0xffff);
- n = (n & 0xf) << 12;
- filter->status = 8;
- if (s >= 0xd800 && s < 0xdc00) {
- s = (((s & 0x3ff) << 16) + 0x400000) | n;
- filter->cache = s;
- } else if (s >= 0xdc00 && s < 0xe000) {
- s &= 0x3ff;
- s |= (filter->cache & 0xfff0000) >> 6;
- filter->cache = n;
- if (s >= MBFL_WCSPLANE_SUPMIN && s < MBFL_WCSPLANE_SUPMAX) {
- CK((*filter->output_function)(s, filter->data));
- } else { /* illegal character */
- s &= MBFL_WCSGROUP_MASK;
- s |= MBFL_WCSGROUP_THROUGH;
- CK((*filter->output_function)(s, filter->data));
- }
- } else {
- filter->cache = n;
- CK((*filter->output_function)(s, filter->data));
- }
- break;
-
- case 8:
- filter->cache |= n << 6;
- filter->status = 9;
- break;
- case 9:
- s = n | (filter->cache & 0xffff);
- filter->status = 2;
- if (s >= 0xd800 && s < 0xdc00) {
- s = (((s & 0x3ff) << 16) + 0x400000);
- filter->cache = s;
- } else if (s >= 0xdc00 && s < 0xe000) {
- s &= 0x3ff;
- s |= (filter->cache & 0xfff0000) >> 6;
- filter->cache = 0;
- if (s >= MBFL_WCSPLANE_SUPMIN && s < MBFL_WCSPLANE_SUPMAX) {
- CK((*filter->output_function)(s, filter->data));
- } else { /* illegal character */
- s &= MBFL_WCSGROUP_MASK;
- s |= MBFL_WCSGROUP_THROUGH;
- CK((*filter->output_function)(s, filter->data));
- }
- } else {
- filter->cache = 0;
- CK((*filter->output_function)(s, filter->data));
- }
- break;
-
- default:
- filter->status = 0;
- break;
- }
-
- return c;
-}
-
-/*
- * wchar => UTF-7
- */
-int mbfl_filt_conv_wchar_utf7(int c, mbfl_convert_filter *filter)
-{
- int s, n;
-
- n = 0;
- if (c >= 0 && c < 0x80) { /* ASCII */
- if (c >= 0x41 && c <= 0x5a) { /* A - Z */
- n = 1;
- } else if (c >= 0x61 && c <= 0x7a) { /* a - z */
- n = 1;
- } else if (c >= 0x30 && c <= 0x39) { /* 0 - 9 */
- n = 1;
- } else if (c == '\0') { /* '\0' */
- n = 1;
- } else if (c == 0x2f) { /* '/' */
- n = 1;
- } else if (c == 0x2d) { /* '-' */
- n = 1;
- } else if (c == 0x20) { /* SPACE */
- n = 2;
- } else if (c == 0x09) { /* HTAB */
- n = 2;
- } else if (c == 0x0d) { /* CR */
- n = 2;
- } else if (c == 0x0a) { /* LF */
- n = 2;
- } else if (c == 0x27) { /* "'" */
- n = 2;
- } else if (c == 0x28) { /* '(' */
- n = 2;
- } else if (c == 0x29) { /* ')' */
- n = 2;
- } else if (c == 0x2c) { /* ',' */
- n = 2;
- } else if (c == 0x2e) { /* '.' */
- n = 2;
- } else if (c == 0x3a) { /* ':' */
- n = 2;
- } else if (c == 0x3f) { /* '?' */
- n = 2;
- }
- } else if (c >= 0 && c < MBFL_WCSPLANE_UCS2MAX) {
- ;
- } else if (c >= MBFL_WCSPLANE_SUPMIN && c < MBFL_WCSPLANE_SUPMAX) {
- s = ((c >> 10) - 0x40) | 0xd800;
- CK((*filter->filter_function)(s, filter));
- s = (c & 0x3ff) | 0xdc00;
- CK((*filter->filter_function)(s, filter));
- return c;
- } else {
- if (filter->illegal_mode != MBFL_OUTPUTFILTER_ILLEGAL_MODE_NONE) {
- CK(mbfl_filt_conv_illegal_output(c, filter));
- }
- return c;
- }
-
- switch (filter->status) {
- case 0:
- if (n != 0) { /* directly encode characters */
- CK((*filter->output_function)(c, filter->data));
- } else { /* Modified Base64 */
- CK((*filter->output_function)(0x2b, filter->data)); /* '+' */
- filter->status++;
- filter->cache = c;
- }
- break;
-
- /* encode Modified Base64 */
- case 1:
- s = filter->cache;
- CK((*filter->output_function)(mbfl_base64_table[(s >> 10) & 0x3f], filter->data));
- CK((*filter->output_function)(mbfl_base64_table[(s >> 4) & 0x3f], filter->data));
- if (n != 0) {
- CK((*filter->output_function)(mbfl_base64_table[(s << 2) & 0x3c], filter->data));
- if (n == 1) {
- CK((*filter->output_function)(0x2d, filter->data)); /* '-' */
- }
- CK((*filter->output_function)(c, filter->data));
- filter->status = 0;
- } else {
- filter->status++;
- filter->cache = ((s & 0xf) << 16) | c;
- }
- break;
-
- case 2:
- s = filter->cache;
- CK((*filter->output_function)(mbfl_base64_table[(s >> 14) & 0x3f], filter->data));
- CK((*filter->output_function)(mbfl_base64_table[(s >> 8) & 0x3f], filter->data));
- CK((*filter->output_function)(mbfl_base64_table[(s >> 2) & 0x3f], filter->data));
- if (n != 0) {
- CK((*filter->output_function)(mbfl_base64_table[(s << 4) & 0x30], filter->data));
- if (n == 1) {
- CK((*filter->output_function)(0x2d, filter->data)); /* '-' */
- }
- CK((*filter->output_function)(c, filter->data));
- filter->status = 0;
- } else {
- filter->status++;
- filter->cache = ((s & 0x3) << 16) | c;
- }
- break;
-
- case 3:
- s = filter->cache;
- CK((*filter->output_function)(mbfl_base64_table[(s >> 12) & 0x3f], filter->data));
- CK((*filter->output_function)(mbfl_base64_table[(s >> 6) & 0x3f], filter->data));
- CK((*filter->output_function)(mbfl_base64_table[s & 0x3f], filter->data));
- if (n != 0) {
- if (n == 1) {
- CK((*filter->output_function)(0x2d, filter->data)); /* '-' */
- }
- CK((*filter->output_function)(c, filter->data));
- filter->status = 0;
- } else {
- filter->status = 1;
- filter->cache = c;
- }
- break;
-
- default:
- filter->status = 0;
- break;
- }
-
- return c;
-
-}
-
-int mbfl_filt_conv_wchar_utf7_flush(mbfl_convert_filter *filter)
-{
- int status, cache;
-
- status = filter->status;
- cache = filter->cache;
- filter->status = 0;
- filter->cache = 0;
- /* flush fragments */
- switch (status) {
- case 1:
- CK((*filter->output_function)(mbfl_base64_table[(cache >> 10) & 0x3f], filter->data));
- CK((*filter->output_function)(mbfl_base64_table[(cache >> 4) & 0x3f], filter->data));
- CK((*filter->output_function)(mbfl_base64_table[(cache << 2) & 0x3c], filter->data));
- CK((*filter->output_function)(0x2d, filter->data)); /* '-' */
- break;
-
- case 2:
- CK((*filter->output_function)(mbfl_base64_table[(cache >> 14) & 0x3f], filter->data));
- CK((*filter->output_function)(mbfl_base64_table[(cache >> 8) & 0x3f], filter->data));
- CK((*filter->output_function)(mbfl_base64_table[(cache >> 2) & 0x3f], filter->data));
- CK((*filter->output_function)(mbfl_base64_table[(cache << 4) & 0x30], filter->data));
- CK((*filter->output_function)(0x2d, filter->data)); /* '-' */
- break;
-
- case 3:
- CK((*filter->output_function)(mbfl_base64_table[(cache >> 12) & 0x3f], filter->data));
- CK((*filter->output_function)(mbfl_base64_table[(cache >> 6) & 0x3f], filter->data));
- CK((*filter->output_function)(mbfl_base64_table[cache & 0x3f], filter->data));
- CK((*filter->output_function)(0x2d, filter->data)); /* '-' */
- break;
- }
- return 0;
-}
-
-static int mbfl_filt_ident_utf7(int c, mbfl_identify_filter *filter)
-{
- int n;
-
- switch (filter->status) {
- /* directly encoded characters */
- case 0:
- if (c == 0x2b) { /* '+' shift character */
- filter->status++;
- } else if (c == 0x5c || c == 0x7e || c < 0 || c > 0x7f) { /* illegal character */
- filter->flag = 1; /* bad */
- }
- break;
-
- /* Modified Base64 */
- case 1:
- case 2:
- n = 0;
- if (c >= 0x41 && c <= 0x5a) { /* A - Z */
- n = 1;
- } else if (c >= 0x61 && c <= 0x7a) { /* a - z */
- n = 1;
- } else if (c >= 0x30 && c <= 0x39) { /* 0 - 9 */
- n = 1;
- } else if (c == 0x2b) { /* '+' */
- n = 1;
- } else if (c == 0x2f) { /* '/' */
- n = 1;
- }
- if (n <= 0) {
- if (filter->status == 1 && c != 0x2d) {
- filter->flag = 1; /* bad */
- } else if (c < 0 || c > 0x7f) {
- filter->flag = 1; /* bad */
- }
- filter->status = 0;
- } else {
- filter->status = 2;
- }
- break;
-
- default:
- filter->status = 0;
- break;
- }
-
- return c;
-}
-
-
diff --git a/ext/mbstring/libmbfl/filters/mbfilter_utf7.h b/ext/mbstring/libmbfl/filters/mbfilter_utf7.h
deleted file mode 100644
index 0da3b02c0e..0000000000
--- a/ext/mbstring/libmbfl/filters/mbfilter_utf7.h
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * "streamable kanji code filter and converter"
- * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved.
- *
- * LICENSE NOTICES
- *
- * This file is part of "streamable kanji code filter and converter",
- * which is distributed under the terms of GNU Lesser General Public
- * License (version 2) as published by the Free Software Foundation.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with "streamable kanji code filter and converter";
- * if not, write to the Free Software Foundation, Inc., 59 Temple Place,
- * Suite 330, Boston, MA 02111-1307 USA
- *
- * The author of this file:
- *
- */
-/*
- * The source code included in this files was separated from mbfilter.c
- * by moriyoshi koizumi <moriyoshi@php.net> on 4 dec 2002.
- *
- */
-
-#ifndef MBFL_MBFILTER_UTF7_H
-#define MBFL_MBFILTER_UTF7_H
-
-#include "mbfilter.h"
-
-extern const mbfl_encoding mbfl_encoding_utf7;
-extern const struct mbfl_identify_vtbl vtbl_identify_utf7;
-extern const struct mbfl_convert_vtbl vtbl_utf7_wchar;
-extern const struct mbfl_convert_vtbl vtbl_wchar_utf7;
-
-int mbfl_filt_conv_utf7_wchar(int c, mbfl_convert_filter *filter);
-int mbfl_filt_conv_wchar_utf7(int c, mbfl_convert_filter *filter);
-int mbfl_filt_conv_wchar_utf7_flush(mbfl_convert_filter *filter);
-
-#endif /* MBFL_MBFILTER_UTF7_H */
diff --git a/ext/mbstring/libmbfl/filters/mbfilter_utf7imap.c b/ext/mbstring/libmbfl/filters/mbfilter_utf7imap.c
deleted file mode 100644
index b32095cd33..0000000000
--- a/ext/mbstring/libmbfl/filters/mbfilter_utf7imap.c
+++ /dev/null
@@ -1,372 +0,0 @@
-/*
- * "streamable kanji code filter and converter"
- * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved.
- *
- * LICENSE NOTICES
- *
- * This file is part of "streamable kanji code filter and converter",
- * which is distributed under the terms of GNU Lesser General Public
- * License (version 2) as published by the Free Software Foundation.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with "streamable kanji code filter and converter";
- * if not, write to the Free Software Foundation, Inc., 59 Temple Place,
- * Suite 330, Boston, MA 02111-1307 USA
- *
- * The author of this file:
- *
- */
-/*
- * The source code included in this files was separated from mbfilter.c
- * by moriyoshi koizumi <moriyoshi@php.net> on 4 dec 2002.
- *
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "mbfilter.h"
-#include "mbfilter_utf7imap.h"
-
-const mbfl_encoding mbfl_encoding_utf7imap = {
- mbfl_no_encoding_utf7imap,
- "UTF7-IMAP",
- NULL,
- NULL,
- NULL,
- MBFL_ENCTYPE_MBCS | MBFL_ENCTYPE_SHFTCODE
-};
-
-const struct mbfl_convert_vtbl vtbl_utf7imap_wchar = {
- mbfl_no_encoding_utf7imap,
- mbfl_no_encoding_wchar,
- mbfl_filt_conv_common_ctor,
- mbfl_filt_conv_common_dtor,
- mbfl_filt_conv_utf7imap_wchar,
- mbfl_filt_conv_common_flush };
-
-const struct mbfl_convert_vtbl vtbl_wchar_utf7imap = {
- mbfl_no_encoding_wchar,
- mbfl_no_encoding_utf7imap,
- mbfl_filt_conv_common_ctor,
- mbfl_filt_conv_common_dtor,
- mbfl_filt_conv_wchar_utf7imap,
- mbfl_filt_conv_wchar_utf7imap_flush };
-
-#define CK(statement) do { if ((statement) < 0) return (-1); } while (0)
-
-/*
- * UTF7-IMAP => wchar
- */
-int mbfl_filt_conv_utf7imap_wchar(int c, mbfl_convert_filter *filter)
-{
- int s, n;
-
- n = -1;
- if (filter->status != 0) { /* Modified Base64 */
- if (c >= 0x41 && c <= 0x5a) { /* A - Z */
- n = c - 65;
- } else if (c >= 0x61 && c <= 0x7a) { /* a - z */
- n = c - 71;
- } else if (c >= 0x30 && c <= 0x39) { /* 0 - 9 */
- n = c + 4;
- } else if (c == 0x2b) { /* '+' */
- n = 62;
- } else if (c == 0x2c) { /* ',' */
- n = 63;
- }
- if (n < 0 || n > 63) {
- if (c == 0x2d) {
- if (filter->status == 1) { /* "&-" -> "&" */
- CK((*filter->output_function)(0x26, filter->data));
- }
- } else if (c >= 0 && c < 0x80) { /* ASCII exclude '-' */
- CK((*filter->output_function)(c, filter->data));
- } else { /* illegal character */
- s = c & MBFL_WCSGROUP_MASK;
- s |= MBFL_WCSGROUP_THROUGH;
- CK((*filter->output_function)(s, filter->data));
- }
- filter->cache = 0;
- filter->status = 0;
- return c;
- }
- }
-
- switch (filter->status) {
- /* directly encoded characters */
- case 0:
- if (c == 0x26) { /* '&' shift character */
- filter->status++;
- } else if (c >= 0 && c < 0x80) { /* ASCII */
- CK((*filter->output_function)(c, filter->data));
- } else { /* illegal character */
- s = c & MBFL_WCSGROUP_MASK;
- s |= MBFL_WCSGROUP_THROUGH;
- CK((*filter->output_function)(s, filter->data));
- }
- break;
-
- /* decode Modified Base64 */
- case 1:
- case 2:
- filter->cache |= n << 10;
- filter->status = 3;
- break;
- case 3:
- filter->cache |= n << 4;
- filter->status = 4;
- break;
- case 4:
- s = ((n >> 2) & 0xf) | (filter->cache & 0xffff);
- n = (n & 0x3) << 14;
- filter->status = 5;
- if (s >= 0xd800 && s < 0xdc00) {
- s = (((s & 0x3ff) << 16) + 0x400000) | n;
- filter->cache = s;
- } else if (s >= 0xdc00 && s < 0xe000) {
- s &= 0x3ff;
- s |= (filter->cache & 0xfff0000) >> 6;
- filter->cache = n;
- if (s >= MBFL_WCSPLANE_SUPMIN && s < MBFL_WCSPLANE_SUPMAX) {
- CK((*filter->output_function)(s, filter->data));
- } else { /* illegal character */
- s &= MBFL_WCSGROUP_MASK;
- s |= MBFL_WCSGROUP_THROUGH;
- CK((*filter->output_function)(s, filter->data));
- }
- } else {
- filter->cache = n;
- CK((*filter->output_function)(s, filter->data));
- }
- break;
-
- case 5:
- filter->cache |= n << 8;
- filter->status = 6;
- break;
- case 6:
- filter->cache |= n << 2;
- filter->status = 7;
- break;
- case 7:
- s = ((n >> 4) & 0x3) | (filter->cache & 0xffff);
- n = (n & 0xf) << 12;
- filter->status = 8;
- if (s >= 0xd800 && s < 0xdc00) {
- s = (((s & 0x3ff) << 16) + 0x400000) | n;
- filter->cache = s;
- } else if (s >= 0xdc00 && s < 0xe000) {
- s &= 0x3ff;
- s |= (filter->cache & 0xfff0000) >> 6;
- filter->cache = n;
- if (s >= MBFL_WCSPLANE_SUPMIN && s < MBFL_WCSPLANE_SUPMAX) {
- CK((*filter->output_function)(s, filter->data));
- } else { /* illegal character */
- s &= MBFL_WCSGROUP_MASK;
- s |= MBFL_WCSGROUP_THROUGH;
- CK((*filter->output_function)(s, filter->data));
- }
- } else {
- filter->cache = n;
- CK((*filter->output_function)(s, filter->data));
- }
- break;
-
- case 8:
- filter->cache |= n << 6;
- filter->status = 9;
- break;
- case 9:
- s = n | (filter->cache & 0xffff);
- filter->status = 2;
- if (s >= 0xd800 && s < 0xdc00) {
- s = (((s & 0x3ff) << 16) + 0x400000);
- filter->cache = s;
- } else if (s >= 0xdc00 && s < 0xe000) {
- s &= 0x3ff;
- s |= (filter->cache & 0xfff0000) >> 6;
- filter->cache = 0;
- if (s >= MBFL_WCSPLANE_SUPMIN && s < MBFL_WCSPLANE_SUPMAX) {
- CK((*filter->output_function)(s, filter->data));
- } else { /* illegal character */
- s &= MBFL_WCSGROUP_MASK;
- s |= MBFL_WCSGROUP_THROUGH;
- CK((*filter->output_function)(s, filter->data));
- }
- } else {
- filter->cache = 0;
- CK((*filter->output_function)(s, filter->data));
- }
- break;
-
- default:
- filter->status = 0;
- break;
- }
-
- return c;
-}
-
-static const unsigned char mbfl_utf7imap_base64_table[] =
-{
- /* 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', */
- 0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4a,0x4b,0x4c,0x4d,
- /* 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', */
- 0x4e,0x4f,0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5a,
- /* 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', */
- 0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6a,0x6b,0x6c,0x6d,
- /* 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', */
- 0x6e,0x6f,0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7a,
- /* '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '+', ',', '\0' */
- 0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x2b,0x2c,0x00
-};
-
-/*
- * wchar => UTF7-IMAP
- */
-int mbfl_filt_conv_wchar_utf7imap(int c, mbfl_convert_filter *filter)
-{
- int n, s;
-
- n = 0;
- if (c == 0x26) {
- n = 1;
- } else if ((c >= 0x20 && c <= 0x7e) || c == 0) {
- n = 2;
- } else if (c >= 0 && c < MBFL_WCSPLANE_UCS2MAX) {
- ;
- } else if (c >= MBFL_WCSPLANE_SUPMIN && c < MBFL_WCSPLANE_SUPMAX) {
- s = ((c >> 10) - 0x40) | 0xd800;
- CK((*filter->filter_function)(s, filter));
- s = (c & 0x3ff) | 0xdc00;
- CK((*filter->filter_function)(s, filter));
- return c;
- } else {
- if (filter->illegal_mode != MBFL_OUTPUTFILTER_ILLEGAL_MODE_NONE) {
- CK(mbfl_filt_conv_illegal_output(c, filter));
- }
- return c;
- }
-
- switch (filter->status) {
- case 0:
- if (n != 0) { /* directly encode characters */
- CK((*filter->output_function)(c, filter->data));
- if (n == 1) {
- CK((*filter->output_function)(0x2d, filter->data)); /* '-' */
- }
- } else { /* Modified Base64 */
- CK((*filter->output_function)(0x26, filter->data)); /* '&' */
- filter->status = 1;
- filter->cache = c;
- }
- break;
-
- /* encode Modified Base64 */
- case 1:
- s = filter->cache;
- CK((*filter->output_function)(mbfl_utf7imap_base64_table[(s >> 10) & 0x3f], filter->data));
- CK((*filter->output_function)(mbfl_utf7imap_base64_table[(s >> 4) & 0x3f], filter->data));
- if (n != 0) {
- CK((*filter->output_function)(mbfl_utf7imap_base64_table[(s << 2) & 0x3c], filter->data));
- CK((*filter->output_function)(0x2d, filter->data)); /* '-' */
- CK((*filter->output_function)(c, filter->data));
- if (n == 1) {
- CK((*filter->output_function)(0x2d, filter->data)); /* '-' */
- }
- filter->status = 0;
- } else {
- filter->status = 2;
- filter->cache = ((s & 0xf) << 16) | c;
- }
- break;
-
- case 2:
- s = filter->cache;
- CK((*filter->output_function)(mbfl_utf7imap_base64_table[(s >> 14) & 0x3f], filter->data));
- CK((*filter->output_function)(mbfl_utf7imap_base64_table[(s >> 8) & 0x3f], filter->data));
- CK((*filter->output_function)(mbfl_utf7imap_base64_table[(s >> 2) & 0x3f], filter->data));
- if (n != 0) {
- CK((*filter->output_function)(mbfl_utf7imap_base64_table[(s << 4) & 0x30], filter->data));
- CK((*filter->output_function)(0x2d, filter->data)); /* '-' */
- CK((*filter->output_function)(c, filter->data));
- if (n == 1) {
- CK((*filter->output_function)(0x2d, filter->data)); /* '-' */
- }
- filter->status = 0;
- } else {
- filter->status = 3;
- filter->cache = ((s & 0x3) << 16) | c;
- }
- break;
-
- case 3:
- s = filter->cache;
- CK((*filter->output_function)(mbfl_utf7imap_base64_table[(s >> 12) & 0x3f], filter->data));
- CK((*filter->output_function)(mbfl_utf7imap_base64_table[(s >> 6) & 0x3f], filter->data));
- CK((*filter->output_function)(mbfl_utf7imap_base64_table[s & 0x3f], filter->data));
- if (n != 0) {
- CK((*filter->output_function)(0x2d, filter->data)); /* '-' */
- CK((*filter->output_function)(c, filter->data));
- if (n == 1) {
- CK((*filter->output_function)(0x2d, filter->data)); /* '-' */
- }
- filter->status = 0;
- } else {
- filter->status = 1;
- filter->cache = c;
- }
- break;
-
- default:
- filter->status = 0;
- break;
- }
-
- return c;
-
-}
-
-int mbfl_filt_conv_wchar_utf7imap_flush(mbfl_convert_filter *filter)
-{
- int status, cache;
-
- status = filter->status;
- cache = filter->cache;
- filter->status = 0;
- filter->cache = 0;
- /* flush fragments */
- switch (status) {
- case 1:
- CK((*filter->output_function)(mbfl_utf7imap_base64_table[(cache >> 10) & 0x3f], filter->data));
- CK((*filter->output_function)(mbfl_utf7imap_base64_table[(cache >> 4) & 0x3f], filter->data));
- CK((*filter->output_function)(mbfl_utf7imap_base64_table[(cache << 2) & 0x3c], filter->data));
- CK((*filter->output_function)(0x2d, filter->data)); /* '-' */
- break;
-
- case 2:
- CK((*filter->output_function)(mbfl_utf7imap_base64_table[(cache >> 14) & 0x3f], filter->data));
- CK((*filter->output_function)(mbfl_utf7imap_base64_table[(cache >> 8) & 0x3f], filter->data));
- CK((*filter->output_function)(mbfl_utf7imap_base64_table[(cache >> 2) & 0x3f], filter->data));
- CK((*filter->output_function)(mbfl_utf7imap_base64_table[(cache << 4) & 0x30], filter->data));
- CK((*filter->output_function)(0x2d, filter->data)); /* '-' */
- break;
-
- case 3:
- CK((*filter->output_function)(mbfl_utf7imap_base64_table[(cache >> 12) & 0x3f], filter->data));
- CK((*filter->output_function)(mbfl_utf7imap_base64_table[(cache >> 6) & 0x3f], filter->data));
- CK((*filter->output_function)(mbfl_utf7imap_base64_table[cache & 0x3f], filter->data));
- CK((*filter->output_function)(0x2d, filter->data)); /* '-' */
- break;
- }
- return 0;
-}
-
-
diff --git a/ext/mbstring/libmbfl/filters/mbfilter_utf7imap.h b/ext/mbstring/libmbfl/filters/mbfilter_utf7imap.h
deleted file mode 100644
index d6c54789c3..0000000000
--- a/ext/mbstring/libmbfl/filters/mbfilter_utf7imap.h
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * "streamable kanji code filter and converter"
- * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved.
- *
- * LICENSE NOTICES
- *
- * This file is part of "streamable kanji code filter and converter",
- * which is distributed under the terms of GNU Lesser General Public
- * License (version 2) as published by the Free Software Foundation.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with "streamable kanji code filter and converter";
- * if not, write to the Free Software Foundation, Inc., 59 Temple Place,
- * Suite 330, Boston, MA 02111-1307 USA
- *
- * The author of this file:
- *
- */
-/*
- * The source code included in this files was separated from mbfilter.c
- * by moriyoshi koizumi <moriyoshi@php.net> on 4 dec 2002.
- *
- */
-
-#ifndef MBFL_MBFILTER_UTF7IMAP_H
-#define MBFL_MBFILTER_UTF7IMAP_H
-
-#include "mbfilter.h"
-
-extern const mbfl_encoding mbfl_encoding_utf7imap;
-extern const struct mbfl_convert_vtbl vtbl_utf7imap_wchar;
-extern const struct mbfl_convert_vtbl vtbl_wchar_utf7imap;
-
-int mbfl_filt_conv_utf7imap_wchar(int c, mbfl_convert_filter *filter);
-int mbfl_filt_conv_wchar_utf7imap(int c, mbfl_convert_filter *filter);
-int mbfl_filt_conv_wchar_utf7imap_flush(mbfl_convert_filter *filter);
-
-#endif /* MBFL_MBFILTER_UTF7IMAP_H */
diff --git a/ext/mbstring/libmbfl/filters/mbfilter_utf8.c b/ext/mbstring/libmbfl/filters/mbfilter_utf8.c
deleted file mode 100644
index 8b95897eac..0000000000
--- a/ext/mbstring/libmbfl/filters/mbfilter_utf8.c
+++ /dev/null
@@ -1,269 +0,0 @@
-/*
- * "streamable kanji code filter and converter"
- * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved.
- *
- * LICENSE NOTICES
- *
- * This file is part of "streamable kanji code filter and converter",
- * which is distributed under the terms of GNU Lesser General Public
- * License (version 2) as published by the Free Software Foundation.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with "streamable kanji code filter and converter";
- * if not, write to the Free Software Foundation, Inc., 59 Temple Place,
- * Suite 330, Boston, MA 02111-1307 USA
- *
- * The author of this file:
- *
- */
-/*
- * The source code included in this files was separated from mbfilter.c
- * by moriyoshi koizumi <moriyoshi@php.net> on 4 dec 2002.
- *
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "mbfilter.h"
-#include "mbfilter_utf8.h"
-
-static int mbfl_filt_ident_utf8(int c, mbfl_identify_filter *filter);
-
-static const unsigned char mblen_table_utf8[] = {
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 6, 6, 1, 1
-};
-
-static const char *mbfl_encoding_utf8_aliases[] = {"utf8", NULL};
-
-const mbfl_encoding mbfl_encoding_utf8 = {
- mbfl_no_encoding_utf8,
- "UTF-8",
- "UTF-8",
- (const char *(*)[])&mbfl_encoding_utf8_aliases,
- mblen_table_utf8,
- MBFL_ENCTYPE_MBCS
-};
-
-const struct mbfl_identify_vtbl vtbl_identify_utf8 = {
- mbfl_no_encoding_utf8,
- mbfl_filt_ident_common_ctor,
- mbfl_filt_ident_common_dtor,
- mbfl_filt_ident_utf8
-};
-
-const struct mbfl_convert_vtbl vtbl_utf8_wchar = {
- mbfl_no_encoding_utf8,
- mbfl_no_encoding_wchar,
- mbfl_filt_conv_common_ctor,
- mbfl_filt_conv_common_dtor,
- mbfl_filt_conv_utf8_wchar,
- mbfl_filt_conv_common_flush
-};
-
-const struct mbfl_convert_vtbl vtbl_wchar_utf8 = {
- mbfl_no_encoding_wchar,
- mbfl_no_encoding_utf8,
- mbfl_filt_conv_common_ctor,
- mbfl_filt_conv_common_dtor,
- mbfl_filt_conv_wchar_utf8,
- mbfl_filt_conv_common_flush
-};
-
-#define CK(statement) do { if ((statement) < 0) return (-1); } while (0)
-
-/*
- * UTF-8 => wchar
- */
-int mbfl_filt_conv_utf8_wchar(int c, mbfl_convert_filter *filter)
-{
- int s;
-
- if (c < 0x80) {
- if (c >= 0) {
- CK((*filter->output_function)(c, filter->data));
- }
- filter->status = 0;
- } else if (c < 0xc0) {
- switch (filter->status & 0xff) {
- case 0x10: /* 2byte code 2nd char */
- case 0x21: /* 3byte code 3rd char */
- case 0x32: /* 4byte code 4th char */
- case 0x43: /* 5byte code 5th char */
- case 0x54: /* 6byte code 6th char */
- filter->status = 0;
- s = filter->cache | (c & 0x3f);
- if (s >= 0x80) {
- CK((*filter->output_function)(s, filter->data));
- }
- break;
- case 0x20: /* 3byte code 2nd char */
- case 0x31: /* 4byte code 3rd char */
- case 0x42: /* 5byte code 4th char */
- case 0x53: /* 6byte code 5th char */
- filter->cache |= ((c & 0x3f) << 6);
- filter->status++;
- break;
- case 0x30: /* 4byte code 2nd char */
- case 0x41: /* 5byte code 3rd char */
- case 0x52: /* 6byte code 4th char */
- filter->cache |= ((c & 0x3f) << 12);
- filter->status++;
- break;
- case 0x40: /* 5byte code 2nd char */
- case 0x51: /* 6byte code 3rd char */
- filter->cache |= ((c & 0x3f) << 18);
- filter->status++;
- break;
- case 0x50: /* 6byte code 2nd char */
- filter->cache |= ((c & 0x3f) << 24);
- filter->status++;
- break;
- default:
- filter->status = 0;
- break;
- }
- } else if (c < 0xe0) { /* 2byte code first char */
- filter->status = 0x10;
- filter->cache = (c & 0x1f) << 6;
- } else if (c < 0xf0) { /* 3byte code first char */
- filter->status = 0x20;
- filter->cache = (c & 0xf) << 12;
- } else if (c < 0xf8) { /* 4byte code first char */
- filter->status = 0x30;
- filter->cache = (c & 0x7) << 18;
- } else if (c < 0xfc) { /* 5byte code first char */
- filter->status = 0x40;
- filter->cache = (c & 0x3) << 24;
- } else if (c < 0xfe) { /* 6 byte code first char */
- filter->status = 0x50;
- filter->cache = (c & 0x1) << 30;
- } else {
- filter->status = 0;
- filter->cache = 0;
- }
-
- return c;
-}
-
-/*
- * wchar => UTF-8
- */
-int mbfl_filt_conv_wchar_utf8(int c, mbfl_convert_filter *filter)
-{
- if (c >= 0 && c < MBFL_WCSGROUP_UCS4MAX) {
- if (c < 0x80) {
- CK((*filter->output_function)(c, filter->data));
- } else if (c < 0x800) {
- CK((*filter->output_function)(((c >> 6) & 0x1f) | 0xc0, filter->data));
- CK((*filter->output_function)((c & 0x3f) | 0x80, filter->data));
- } else if (c < 0x10000) {
- CK((*filter->output_function)(((c >> 12) & 0x0f) | 0xe0, filter->data));
- CK((*filter->output_function)(((c >> 6) & 0x3f) | 0x80, filter->data));
- CK((*filter->output_function)((c & 0x3f) | 0x80, filter->data));
- } else if (c < 0x200000) {
- CK((*filter->output_function)(((c >> 18) & 0x07) | 0xf0, filter->data));
- CK((*filter->output_function)(((c >> 12) & 0x3f) | 0x80, filter->data));
- CK((*filter->output_function)(((c >> 6) & 0x3f) | 0x80, filter->data));
- CK((*filter->output_function)((c & 0x3f) | 0x80, filter->data));
- } else if (c < 0x4000000) {
- CK((*filter->output_function)(((c >> 24) & 0x03) | 0xf8, filter->data));
- CK((*filter->output_function)(((c >> 18) & 0x3f) | 0x80, filter->data));
- CK((*filter->output_function)(((c >> 12) & 0x3f) | 0x80, filter->data));
- CK((*filter->output_function)(((c >> 6) & 0x3f) | 0x80, filter->data));
- CK((*filter->output_function)((c & 0x3f) | 0x80, filter->data));
- } else {
- CK((*filter->output_function)(((c >> 30) & 0x01) | 0xfc, filter->data));
- CK((*filter->output_function)(((c >> 24) & 0x3f) | 0x80, filter->data));
- CK((*filter->output_function)(((c >> 18) & 0x3f) | 0x80, filter->data));
- CK((*filter->output_function)(((c >> 12) & 0x3f) | 0x80, filter->data));
- CK((*filter->output_function)(((c >> 6) & 0x3f) | 0x80, filter->data));
- CK((*filter->output_function)((c & 0x3f) | 0x80, filter->data));
- }
- } else {
- if (filter->illegal_mode != MBFL_OUTPUTFILTER_ILLEGAL_MODE_NONE) {
- CK(mbfl_filt_conv_illegal_output(c, filter));
- }
- }
-
- return c;
-}
-
-static int mbfl_filt_ident_utf8(int c, mbfl_identify_filter *filter)
-{
- if (c < 0x80) {
- if (c < 0) {
- filter->flag = 1; /* bad */
- } else if (c != 0 && filter->status) {
- filter->flag = 1; /* bad */
- }
- filter->status = 0;
- } else if (c < 0xc0) {
- switch (filter->status) {
- case 0x20: /* 3 byte code 2nd char */
- case 0x30: /* 4 byte code 2nd char */
- case 0x31: /* 4 byte code 3rd char */
- case 0x40: /* 5 byte code 2nd char */
- case 0x41: /* 5 byte code 3rd char */
- case 0x42: /* 5 byte code 4th char */
- case 0x50: /* 6 byte code 2nd char */
- case 0x51: /* 6 byte code 3rd char */
- case 0x52: /* 6 byte code 4th char */
- case 0x53: /* 6 byte code 5th char */
- filter->status++;
- break;
- case 0x10: /* 2 byte code 2nd char */
- case 0x21: /* 3 byte code 3rd char */
- case 0x32: /* 4 byte code 4th char */
- case 0x43: /* 5 byte code 5th char */
- case 0x54: /* 6 byte code 6th char */
- filter->status = 0;
- break;
- default:
- filter->flag = 1; /* bad */
- filter->status = 0;
- break;
- }
- } else {
- if (filter->status) {
- filter->flag = 1; /* bad */
- }
- filter->status = 0;
- if (c < 0xe0) { /* 2 byte code first char */
- filter->status = 0x10;
- } else if (c < 0xf0) { /* 3 byte code 1st char */
- filter->status = 0x20;
- } else if (c < 0xf8) { /* 4 byte code 1st char */
- filter->status = 0x30;
- } else if (c < 0xfc) { /* 5 byte code 1st char */
- filter->status = 0x40;
- } else if (c < 0xfe) { /* 6 byte code 1st char */
- filter->status = 0x50;
- } else {
- filter->flag = 1; /* bad */
- }
- }
-
- return c;
-}
diff --git a/ext/mbstring/libmbfl/filters/mbfilter_utf8.h b/ext/mbstring/libmbfl/filters/mbfilter_utf8.h
deleted file mode 100644
index 07bf655022..0000000000
--- a/ext/mbstring/libmbfl/filters/mbfilter_utf8.h
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * "streamable kanji code filter and converter"
- * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved.
- *
- * LICENSE NOTICES
- *
- * This file is part of "streamable kanji code filter and converter",
- * which is distributed under the terms of GNU Lesser General Public
- * License (version 2) as published by the Free Software Foundation.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with "streamable kanji code filter and converter";
- * if not, write to the Free Software Foundation, Inc., 59 Temple Place,
- * Suite 330, Boston, MA 02111-1307 USA
- *
- * The author of this file:
- *
- */
-/*
- * The source code included in this files was separated from mbfilter.c
- * by moriyoshi koizumi <moriyoshi@php.net> on 4 dec 2002.
- *
- */
-
-#ifndef MBFL_MBFILTER_UTF8_H
-#define MBFL_MBFILTER_UTF8_H
-
-extern const mbfl_encoding mbfl_encoding_utf8;
-extern const struct mbfl_identify_vtbl vtbl_identify_utf8;
-extern const struct mbfl_convert_vtbl vtbl_utf8_wchar;
-extern const struct mbfl_convert_vtbl vtbl_wchar_utf8;
-
-int mbfl_filt_conv_utf8_wchar(int c, mbfl_convert_filter *filter);
-int mbfl_filt_conv_wchar_utf8(int c, mbfl_convert_filter *filter);
-
-#endif /* MBFL_MBFILTER_UTF8_H */
diff --git a/ext/mbstring/libmbfl/filters/mbfilter_uuencode.c b/ext/mbstring/libmbfl/filters/mbfilter_uuencode.c
deleted file mode 100644
index 64fc39d19b..0000000000
--- a/ext/mbstring/libmbfl/filters/mbfilter_uuencode.c
+++ /dev/null
@@ -1,152 +0,0 @@
-/*
- * "streamable kanji code filter and converter"
- * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved.
- *
- * LICENSE NOTICES
- *
- * This file is part of "streamable kanji code filter and converter",
- * which is distributed under the terms of GNU Lesser General Public
- * License (version 2) as published by the Free Software Foundation.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with "streamable kanji code filter and converter";
- * if not, write to the Free Software Foundation, Inc., 59 Temple Place,
- * Suite 330, Boston, MA 02111-1307 USA
- *
- * The author of this file:
- *
- */
-/*
- * The source code included in this files was separated from mbfilter.c
- * by moriyoshi koizumi <moriyoshi@php.net> on 4 dec 2002.
- *
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "mbfilter.h"
-#include "mbfilter_uuencode.h"
-
-const mbfl_encoding mbfl_encoding_uuencode = {
- mbfl_no_encoding_uuencode,
- "UUENCODE",
- "x-uuencode",
- NULL,
- NULL,
- MBFL_ENCTYPE_SBCS
-};
-
-const struct mbfl_convert_vtbl vtbl_uuencode_8bit = {
- mbfl_no_encoding_uuencode,
- mbfl_no_encoding_8bit,
- mbfl_filt_conv_common_ctor,
- mbfl_filt_conv_common_dtor,
- mbfl_filt_conv_uudec,
- mbfl_filt_conv_common_flush
-};
-
-#define CK(statement) do { if ((statement) < 0) return (-1); } while (0)
-
-/* uuencode => any */
-#define UUDEC(c) (char)(((c)-' ')&077)
-static const char * uuenc_begin_text = "begin ";
-enum { uudec_state_ground=0, uudec_state_inbegin,
- uudec_state_until_newline,
- uudec_state_size, uudec_state_a, uudec_state_b, uudec_state_c, uudec_state_d,
- uudec_state_skip_newline};
-
-int mbfl_filt_conv_uudec(int c, mbfl_convert_filter * filter)
-{
- int n;
-
- switch(filter->status) {
- case uudec_state_ground:
- /* looking for "begin 0666 filename\n" line */
- if (filter->cache == 0 && c == 'b')
- {
- filter->status = uudec_state_inbegin;
- filter->cache = 1; /* move to 'e' */
- }
- else if (c == '\n')
- filter->cache = 0;
- else
- filter->cache++;
- break;
- case uudec_state_inbegin:
- if (uuenc_begin_text[filter->cache++] != c) {
- /* doesn't match pattern */
- filter->status = uudec_state_ground;
- break;
- }
- if (filter->cache == 5)
- {
- /* thats good enough - wait for a newline */
- filter->status = uudec_state_until_newline;
- filter->cache = 0;
- }
- break;
- case uudec_state_until_newline:
- if (c == '\n')
- filter->status = uudec_state_size;
- break;
- case uudec_state_size:
- /* get "size" byte */
- n = UUDEC(c);
- filter->cache = n << 24;
- filter->status = uudec_state_a;
- break;
- case uudec_state_a:
- /* get "a" byte */
- n = UUDEC(c);
- filter->cache |= (n << 16);
- filter->status = uudec_state_b;
- break;
- case uudec_state_b:
- /* get "b" byte */
- n = UUDEC(c);
- filter->cache |= (n << 8);
- filter->status = uudec_state_c;
- break;
- case uudec_state_c:
- /* get "c" byte */
- n = UUDEC(c);
- filter->cache |= n;
- filter->status = uudec_state_d;
- break;
- case uudec_state_d:
- /* get "d" byte */
- {
- int A, B, C, D = UUDEC(c);
- A = (filter->cache >> 16) & 0xff;
- B = (filter->cache >> 8) & 0xff;
- C = (filter->cache) & 0xff;
- n = (filter->cache >> 24) & 0xff;
- if (n-- > 0)
- CK((*filter->output_function)( (A << 2) | (B >> 4), filter->data));
- if (n-- > 0)
- CK((*filter->output_function)( (B << 4) | (C >> 2), filter->data));
- if (n-- > 0)
- CK((*filter->output_function)( (C << 6) | D, filter->data));
- filter->cache = n << 24;
-
- if (n == 0)
- filter->status = uudec_state_skip_newline; /* skip next byte (newline) */
- else
- filter->status = uudec_state_a; /* go back to fetch "A" byte */
- }
- break;
- case uudec_state_skip_newline:
- /* skip newline */
- filter->status = uudec_state_size;
- }
- return c;
-}
-
-
diff --git a/ext/mbstring/libmbfl/filters/mbfilter_uuencode.h b/ext/mbstring/libmbfl/filters/mbfilter_uuencode.h
deleted file mode 100644
index ca7521c39c..0000000000
--- a/ext/mbstring/libmbfl/filters/mbfilter_uuencode.h
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * "streamable kanji code filter and converter"
- * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved.
- *
- * LICENSE NOTICES
- *
- * This file is part of "streamable kanji code filter and converter",
- * which is distributed under the terms of GNU Lesser General Public
- * License (version 2) as published by the Free Software Foundation.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with "streamable kanji code filter and converter";
- * if not, write to the Free Software Foundation, Inc., 59 Temple Place,
- * Suite 330, Boston, MA 02111-1307 USA
- *
- * The author of this file:
- *
- */
-/*
- * The source code included in this files was separated from mbfilter.c
- * by moriyoshi koizumi <moriyoshi@php.net> on 4 dec 2002.
- *
- */
-
-#ifndef MBFL_MBFILTER_UUENCODE_H
-#define MBFL_MBFILTER_UUENCODE_H
-
-extern const mbfl_encoding mbfl_encoding_uuencode;
-extern const struct mbfl_convert_vtbl vtbl_uuencode_8bit;
-
-int mbfl_filt_conv_uudec(int c, mbfl_convert_filter *filter);
-
-#endif /* MBFL_MBFILTER_UUENCODE_H */
-
diff --git a/ext/mbstring/libmbfl/filters/unicode_prop.h b/ext/mbstring/libmbfl/filters/unicode_prop.h
deleted file mode 100644
index d21ec61dfb..0000000000
--- a/ext/mbstring/libmbfl/filters/unicode_prop.h
+++ /dev/null
@@ -1,167 +0,0 @@
-/*
- * "streamable kanji code filter and converter"
- * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved.
- *
- * LICENSE NOTICES
- *
- * This file is part of "streamable kanji code filter and converter",
- * which is distributed under the terms of GNU Lesser General Public
- * License (version 2) as published by the Free Software Foundation.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with "streamable kanji code filter and converter";
- * if not, write to the Free Software Foundation, Inc., 59 Temple Place,
- * Suite 330, Boston, MA 02111-1307 USA
- *
- * The authors of this file: PHP3 Internationalization team
- *
- */
-
-/* charactor property table */
-#define MBFL_CHP_CTL 0x01
-#define MBFL_CHP_DIGIT 0x02
-#define MBFL_CHP_UALPHA 0x04
-#define MBFL_CHP_LALPHA 0x08
-#define MBFL_CHP_MMHQENC 0x10 /* must Q-encoding in MIME Header encoded-word */
-#define MBFL_CHP_MSPECIAL 0x20 /* RFC822 Special characters */
-
-/*
- * Unicode table
- */
-
-static const unsigned char mbfl_charprop_table[] = {
-/* NUL 0 */ MBFL_CHP_CTL | MBFL_CHP_MMHQENC,
-/* SCH 1 */ MBFL_CHP_CTL | MBFL_CHP_MMHQENC ,
-/* SIX 2 */ MBFL_CHP_CTL | MBFL_CHP_MMHQENC ,
-/* EIX 3 */ MBFL_CHP_CTL | MBFL_CHP_MMHQENC ,
-/* EOT 4 */ MBFL_CHP_CTL | MBFL_CHP_MMHQENC ,
-/* ENQ 5 */ MBFL_CHP_CTL | MBFL_CHP_MMHQENC ,
-/* ACK 6 */ MBFL_CHP_CTL | MBFL_CHP_MMHQENC ,
-/* BEL 7 */ MBFL_CHP_CTL | MBFL_CHP_MMHQENC ,
-/* BS 8 */ MBFL_CHP_CTL | MBFL_CHP_MMHQENC ,
-/* HI 9 */ MBFL_CHP_CTL | MBFL_CHP_MMHQENC ,
-/* LF 10 */ MBFL_CHP_CTL | MBFL_CHP_MMHQENC ,
-/* VI 11 */ MBFL_CHP_CTL | MBFL_CHP_MMHQENC ,
-/* FF 12 */ MBFL_CHP_CTL | MBFL_CHP_MMHQENC ,
-/* CR 13 */ MBFL_CHP_CTL | MBFL_CHP_MMHQENC ,
-/* SO 14 */ MBFL_CHP_CTL | MBFL_CHP_MMHQENC ,
-/* SI 15 */ MBFL_CHP_CTL | MBFL_CHP_MMHQENC ,
-/* SLE 16 */ MBFL_CHP_CTL | MBFL_CHP_MMHQENC ,
-/* CSI 17 */ MBFL_CHP_CTL | MBFL_CHP_MMHQENC ,
-/* DC2 18 */ MBFL_CHP_CTL | MBFL_CHP_MMHQENC ,
-/* DC3 19 */ MBFL_CHP_CTL | MBFL_CHP_MMHQENC ,
-/* DC4 20 */ MBFL_CHP_CTL | MBFL_CHP_MMHQENC ,
-/* NAK 21 */ MBFL_CHP_CTL | MBFL_CHP_MMHQENC ,
-/* SYN 22 */ MBFL_CHP_CTL | MBFL_CHP_MMHQENC ,
-/* EIB 23 */ MBFL_CHP_CTL | MBFL_CHP_MMHQENC ,
-/* CAN 24 */ MBFL_CHP_CTL | MBFL_CHP_MMHQENC ,
-/* EM 25 */ MBFL_CHP_CTL | MBFL_CHP_MMHQENC ,
-/* SLB 26 */ MBFL_CHP_CTL | MBFL_CHP_MMHQENC ,
-/* ESC 27 */ MBFL_CHP_CTL | MBFL_CHP_MMHQENC ,
-/* FS 28 */ MBFL_CHP_CTL | MBFL_CHP_MMHQENC ,
-/* GS 29 */ MBFL_CHP_CTL | MBFL_CHP_MMHQENC ,
-/* RS 30 */ MBFL_CHP_CTL | MBFL_CHP_MMHQENC ,
-/* US 31 */ MBFL_CHP_CTL | MBFL_CHP_MMHQENC ,
-/* SP 32 */ MBFL_CHP_MMHQENC ,
-/* ! 33 */ 0 ,
-/* " 34 */ MBFL_CHP_MMHQENC | MBFL_CHP_MSPECIAL ,
-/* # 35 */ MBFL_CHP_MMHQENC ,
-/* $ 36 */ MBFL_CHP_MMHQENC ,
-/* % 37 */ MBFL_CHP_MMHQENC ,
-/* & 38 */ MBFL_CHP_MMHQENC ,
-/* ' 39 */ MBFL_CHP_MMHQENC ,
-/* ( 40 */ MBFL_CHP_MMHQENC | MBFL_CHP_MSPECIAL ,
-/* ) 41 */ MBFL_CHP_MMHQENC | MBFL_CHP_MSPECIAL ,
-/* * 42 */ 0 ,
-/* + 43 */ 0 ,
-/* , 44 */ MBFL_CHP_MMHQENC | MBFL_CHP_MSPECIAL ,
-/* - 45 */ 0 ,
-/* . 46 */ MBFL_CHP_MMHQENC | MBFL_CHP_MSPECIAL ,
-/* / 47 */ 0 ,
-/* 0 48 */ MBFL_CHP_DIGIT | MBFL_CHP_MMHQENC ,
-/* 1 49 */ MBFL_CHP_DIGIT | MBFL_CHP_MMHQENC ,
-/* 2 50 */ MBFL_CHP_DIGIT | MBFL_CHP_MMHQENC ,
-/* 3 51 */ MBFL_CHP_DIGIT | MBFL_CHP_MMHQENC ,
-/* 4 52 */ MBFL_CHP_DIGIT | MBFL_CHP_MMHQENC ,
-/* 5 53 */ MBFL_CHP_DIGIT | MBFL_CHP_MMHQENC ,
-/* 6 54 */ MBFL_CHP_DIGIT | MBFL_CHP_MMHQENC ,
-/* 7 55 */ MBFL_CHP_DIGIT | MBFL_CHP_MMHQENC ,
-/* 8 56 */ MBFL_CHP_DIGIT | MBFL_CHP_MMHQENC ,
-/* 9 57 */ MBFL_CHP_DIGIT | MBFL_CHP_MMHQENC ,
-/* : 58 */ MBFL_CHP_MMHQENC | MBFL_CHP_MSPECIAL ,
-/* ; 59 */ MBFL_CHP_MMHQENC | MBFL_CHP_MSPECIAL ,
-/* < 60 */ MBFL_CHP_MMHQENC | MBFL_CHP_MSPECIAL ,
-/* = 61 */ 0 ,
-/* > 62 */ MBFL_CHP_MMHQENC | MBFL_CHP_MSPECIAL ,
-/* ? 63 */ MBFL_CHP_MMHQENC ,
-/* @ 64 */ MBFL_CHP_MMHQENC | MBFL_CHP_MSPECIAL ,
-/* A 65 */ MBFL_CHP_UALPHA ,
-/* B 66 */ MBFL_CHP_UALPHA ,
-/* C 67 */ MBFL_CHP_UALPHA ,
-/* D 68 */ MBFL_CHP_UALPHA ,
-/* E 69 */ MBFL_CHP_UALPHA ,
-/* F 70 */ MBFL_CHP_UALPHA ,
-/* G 71 */ MBFL_CHP_UALPHA ,
-/* H 72 */ MBFL_CHP_UALPHA ,
-/* I 73 */ MBFL_CHP_UALPHA ,
-/* J 74 */ MBFL_CHP_UALPHA ,
-/* K 75 */ MBFL_CHP_UALPHA ,
-/* L 76 */ MBFL_CHP_UALPHA ,
-/* M 77 */ MBFL_CHP_UALPHA ,
-/* N 78 */ MBFL_CHP_UALPHA ,
-/* O 79 */ MBFL_CHP_UALPHA ,
-/* P 80 */ MBFL_CHP_UALPHA ,
-/* Q 81 */ MBFL_CHP_UALPHA ,
-/* R 82 */ MBFL_CHP_UALPHA ,
-/* S 83 */ MBFL_CHP_UALPHA ,
-/* T 84 */ MBFL_CHP_UALPHA ,
-/* U 85 */ MBFL_CHP_UALPHA ,
-/* V 86 */ MBFL_CHP_UALPHA ,
-/* W 87 */ MBFL_CHP_UALPHA ,
-/* X 88 */ MBFL_CHP_UALPHA ,
-/* Y 89 */ MBFL_CHP_UALPHA ,
-/* Z 90 */ MBFL_CHP_UALPHA ,
-/* [ 91 */ MBFL_CHP_MMHQENC | MBFL_CHP_MSPECIAL ,
-/* \ 92 */ MBFL_CHP_MMHQENC | MBFL_CHP_MSPECIAL ,
-/* ] 93 */ MBFL_CHP_MMHQENC | MBFL_CHP_MSPECIAL ,
-/* ^ 94 */ MBFL_CHP_MMHQENC ,
-/* _ 95 */ MBFL_CHP_MMHQENC ,
-/* ` 96 */ MBFL_CHP_MMHQENC ,
-/* a 97 */ MBFL_CHP_LALPHA ,
-/* b 98 */ MBFL_CHP_LALPHA ,
-/* c 99 */ MBFL_CHP_LALPHA ,
-/* d 100 */ MBFL_CHP_LALPHA ,
-/* e 101 */ MBFL_CHP_LALPHA ,
-/* f 102 */ MBFL_CHP_LALPHA ,
-/* g 103 */ MBFL_CHP_LALPHA ,
-/* h 104 */ MBFL_CHP_LALPHA ,
-/* i 105 */ MBFL_CHP_LALPHA ,
-/* j 106 */ MBFL_CHP_LALPHA ,
-/* k 107 */ MBFL_CHP_LALPHA ,
-/* l 108 */ MBFL_CHP_LALPHA ,
-/* m 109 */ MBFL_CHP_LALPHA ,
-/* n 110 */ MBFL_CHP_LALPHA ,
-/* o 111 */ MBFL_CHP_LALPHA ,
-/* p 112 */ MBFL_CHP_LALPHA ,
-/* q 113 */ MBFL_CHP_LALPHA ,
-/* r 114 */ MBFL_CHP_LALPHA ,
-/* s 115 */ MBFL_CHP_LALPHA ,
-/* t 116 */ MBFL_CHP_LALPHA ,
-/* u 117 */ MBFL_CHP_LALPHA ,
-/* v 118 */ MBFL_CHP_LALPHA ,
-/* w 119 */ MBFL_CHP_LALPHA ,
-/* x 120 */ MBFL_CHP_LALPHA ,
-/* y 121 */ MBFL_CHP_LALPHA ,
-/* z 122 */ MBFL_CHP_LALPHA ,
-/* { 123 */ MBFL_CHP_MMHQENC ,
-/* | 124 */ MBFL_CHP_MMHQENC ,
-/* } 125 */ MBFL_CHP_MMHQENC ,
-/* ~ 126 */ MBFL_CHP_MMHQENC ,
-/* DEL 127 */ MBFL_CHP_MMHQENC
-};
-
diff --git a/ext/mbstring/libmbfl/filters/unicode_table_big5.h b/ext/mbstring/libmbfl/filters/unicode_table_big5.h
deleted file mode 100644
index 2616d0433a..0000000000
--- a/ext/mbstring/libmbfl/filters/unicode_table_big5.h
+++ /dev/null
@@ -1,5123 +0,0 @@
-/*
- * "streamable kanji code filter and converter"
- * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved.
- *
- * LICENSE NOTICES
- *
- * This file is part of "streamable kanji code filter and converter",
- * which is distributed under the terms of GNU Lesser General Public
- * License (version 2) as published by the Free Software Foundation.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with "streamable kanji code filter and converter";
- * if not, write to the Free Software Foundation, Inc., 59 Temple Place,
- * Suite 330, Boston, MA 02111-1307 USA
- *
- * The author of this file: Rui Hirokawa <hirokawa@php.net>
- *
- */
-
-#ifndef UNICODE_TABLE_BIG5_H
-#define UNICODE_TABLE_BIG5_H
-
-/* Big5 -> UCS */
-static const unsigned short big5_ucs_table[] = {
-0x3000,0xff0c,0x3001,0x3002,0xff0e,0x2027,0xff1b,0xff1a,
-0xff1f,0xff01,0xfe30,0x2026,0x2025,0xfe50,0xfe51,0xfe52,
-0x00b7,0xfe54,0xfe55,0xfe56,0xfe57,0xff5c,0x2013,0xfe31,
-0x2014,0xfe33,0x2574,0xfe34,0xfe4f,0xff08,0xff09,0xfe35,
-0xfe36,0xff5b,0xff5d,0xfe37,0xfe38,0x3014,0x3015,0xfe39,
-0xfe3a,0x3010,0x3011,0xfe3b,0xfe3c,0x300a,0x300b,0xfe3d,
-0xfe3e,0x3008,0x3009,0xfe3f,0xfe40,0x300c,0x300d,0xfe41,
-0xfe42,0x300e,0x300f,0xfe43,0xfe44,0xfe59,0xfe5a,0xfe5b,
-0xfe5c,0xfe5d,0xfe5e,0x2018,0x2019,0x201c,0x201d,0x301d,
-0x301e,0x2035,0x2032,0xff03,0xff06,0xff0a,0x203b,0x00a7,
-0x3003,0x25cb,0x25cf,0x25b3,0x25b2,0x25ce,0x2606,0x2605,
-0x25c7,0x25c6,0x25a1,0x25a0,0x25bd,0x25bc,0x32a3,0x2105,
-0x00af,0xffe3,0xff3f,0x02cd,0xfe49,0xfe4a,0xfe4d,0xfe4e,
-0xfe4b,0xfe4c,0xfe5f,0xfe60,0xfe61,0xff0b,0xff0d,0x00d7,
-0x00f7,0x00b1,0x221a,0xff1c,0xff1e,0xff1d,0x2266,0x2267,
-0x2260,0x221e,0x2252,0x2261,0xfe62,0xfe63,0xfe64,0xfe65,
-0xfe66,0xff5e,0x2229,0x222a,0x22a5,0x2220,0x221f,0x22bf,
-0x33d2,0x33d1,0x222b,0x222e,0x2235,0x2234,0x2640,0x2642,
-0x2295,0x2299,0x2191,0x2193,0x2190,0x2192,0x2196,0x2197,
-0x2199,0x2198,0x2225,0x2223,0xff0f,0xff3c,0x2215,0xfe68,
-0xff04,0xffe5,0x3012,0xffe0,0xffe1,0xff05,0xff20,0x2103,
-0x2109,0xfe69,0xfe6a,0xfe6b,0x33d5,0x339c,0x339d,0x339e,
-0x33ce,0x33a1,0x338e,0x338f,0x33c4,0x00b0,0x5159,0x515b,
-0x515e,0x515d,0x5161,0x5163,0x55e7,0x74e9,0x7cce,0x2581,
-0x2582,0x2583,0x2584,0x2585,0x2586,0x2587,0x2588,0x258f,
-0x258e,0x258d,0x258c,0x258b,0x258a,0x2589,0x253c,0x2534,
-0x252c,0x2524,0x251c,0x2594,0x2500,0x2502,0x2595,0x250c,
-0x2510,0x2514,0x2518,0x256d,0x256e,0x2570,0x256f,0x2550,
-0x255e,0x256a,0x2561,0x25e2,0x25e3,0x25e5,0x25e4,0x2571,
-0x2572,0x2573,0xff10,0xff11,0xff12,0xff13,0xff14,0xff15,
-0xff16,0xff17,0xff18,0xff19,0x2160,0x2161,0x2162,0x2163,
-0x2164,0x2165,0x2166,0x2167,0x2168,0x2169,0x3021,0x3022,
-0x3023,0x3024,0x3025,0x3026,0x3027,0x3028,0x3029,0x5341,
-0x5344,0x5345,0xff21,0xff22,0xff23,0xff24,0xff25,0xff26,
-0xff27,0xff28,0xff29,0xff2a,0xff2b,0xff2c,0xff2d,0xff2e,
-0xff2f,0xff30,0xff31,0xff32,0xff33,0xff34,0xff35,0xff36,
-0xff37,0xff38,0xff39,0xff3a,0xff41,0xff42,0xff43,0xff44,
-0xff45,0xff46,0xff47,0xff48,0xff49,0xff4a,0xff4b,0xff4c,
-0xff4d,0xff4e,0xff4f,0xff50,0xff51,0xff52,0xff53,0xff54,
-0xff55,0xff56,0xff57,0xff58,0xff59,0xff5a,0x0391,0x0392,
-0x0393,0x0394,0x0395,0x0396,0x0397,0x0398,0x0399,0x039a,
-0x039b,0x039c,0x039d,0x039e,0x039f,0x03a0,0x03a1,0x03a3,
-0x03a4,0x03a5,0x03a6,0x03a7,0x03a8,0x03a9,0x03b1,0x03b2,
-0x03b3,0x03b4,0x03b5,0x03b6,0x03b7,0x03b8,0x03b9,0x03ba,
-0x03bb,0x03bc,0x03bd,0x03be,0x03bf,0x03c0,0x03c1,0x03c3,
-0x03c4,0x03c5,0x03c6,0x03c7,0x03c8,0x03c9,0x3105,0x3106,
-0x3107,0x3108,0x3109,0x310a,0x310b,0x310c,0x310d,0x310e,
-0x310f,0x3110,0x3111,0x3112,0x3113,0x3114,0x3115,0x3116,
-0x3117,0x3118,0x3119,0x311a,0x311b,0x311c,0x311d,0x311e,
-0x311f,0x3120,0x3121,0x3122,0x3123,0x3124,0x3125,0x3126,
-0x3127,0x3128,0x3129,0x02d9,0x02c9,0x02ca,0x02c7,0x02cb,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x20ac,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x4e00,
-0x4e59,0x4e01,0x4e03,0x4e43,0x4e5d,0x4e86,0x4e8c,0x4eba,
-0x513f,0x5165,0x516b,0x51e0,0x5200,0x5201,0x529b,0x5315,
-0x5341,0x535c,0x53c8,0x4e09,0x4e0b,0x4e08,0x4e0a,0x4e2b,
-0x4e38,0x51e1,0x4e45,0x4e48,0x4e5f,0x4e5e,0x4e8e,0x4ea1,
-0x5140,0x5203,0x52fa,0x5343,0x53c9,0x53e3,0x571f,0x58eb,
-0x5915,0x5927,0x5973,0x5b50,0x5b51,0x5b53,0x5bf8,0x5c0f,
-0x5c22,0x5c38,0x5c71,0x5ddd,0x5de5,0x5df1,0x5df2,0x5df3,
-0x5dfe,0x5e72,0x5efe,0x5f0b,0x5f13,0x624d,0x4e11,0x4e10,
-0x4e0d,0x4e2d,0x4e30,0x4e39,0x4e4b,0x5c39,0x4e88,0x4e91,
-0x4e95,0x4e92,0x4e94,0x4ea2,0x4ec1,0x4ec0,0x4ec3,0x4ec6,
-0x4ec7,0x4ecd,0x4eca,0x4ecb,0x4ec4,0x5143,0x5141,0x5167,
-0x516d,0x516e,0x516c,0x5197,0x51f6,0x5206,0x5207,0x5208,
-0x52fb,0x52fe,0x52ff,0x5316,0x5339,0x5348,0x5347,0x5345,
-0x535e,0x5384,0x53cb,0x53ca,0x53cd,0x58ec,0x5929,0x592b,
-0x592a,0x592d,0x5b54,0x5c11,0x5c24,0x5c3a,0x5c6f,0x5df4,
-0x5e7b,0x5eff,0x5f14,0x5f15,0x5fc3,0x6208,0x6236,0x624b,
-0x624e,0x652f,0x6587,0x6597,0x65a4,0x65b9,0x65e5,0x66f0,
-0x6708,0x6728,0x6b20,0x6b62,0x6b79,0x6bcb,0x6bd4,0x6bdb,
-0x6c0f,0x6c34,0x706b,0x722a,0x7236,0x723b,0x7247,0x7259,
-0x725b,0x72ac,0x738b,0x4e19,0x4e16,0x4e15,0x4e14,0x4e18,
-0x4e3b,0x4e4d,0x4e4f,0x4e4e,0x4ee5,0x4ed8,0x4ed4,0x4ed5,
-0x4ed6,0x4ed7,0x4ee3,0x4ee4,0x4ed9,0x4ede,0x5145,0x5144,
-0x5189,0x518a,0x51ac,0x51f9,0x51fa,0x51f8,0x520a,0x52a0,
-0x529f,0x5305,0x5306,0x5317,0x531d,0x4edf,0x534a,0x5349,
-0x5361,0x5360,0x536f,0x536e,0x53bb,0x53ef,0x53e4,0x53f3,
-0x53ec,0x53ee,0x53e9,0x53e8,0x53fc,0x53f8,0x53f5,0x53eb,
-0x53e6,0x53ea,0x53f2,0x53f1,0x53f0,0x53e5,0x53ed,0x53fb,
-0x56db,0x56da,0x5916,0x592e,0x5931,0x5974,0x5976,0x5b55,
-0x5b83,0x5c3c,0x5de8,0x5de7,0x5de6,0x5e02,0x5e03,0x5e73,
-0x5e7c,0x5f01,0x5f18,0x5f17,0x5fc5,0x620a,0x6253,0x6254,
-0x6252,0x6251,0x65a5,0x65e6,0x672e,0x672c,0x672a,0x672b,
-0x672d,0x6b63,0x6bcd,0x6c11,0x6c10,0x6c38,0x6c41,0x6c40,
-0x6c3e,0x72af,0x7384,0x7389,0x74dc,0x74e6,0x7518,0x751f,
-0x7528,0x7529,0x7530,0x7531,0x7532,0x7533,0x758b,0x767d,
-0x76ae,0x76bf,0x76ee,0x77db,0x77e2,0x77f3,0x793a,0x79be,
-0x7a74,0x7acb,0x4e1e,0x4e1f,0x4e52,0x4e53,0x4e69,0x4e99,
-0x4ea4,0x4ea6,0x4ea5,0x4eff,0x4f09,0x4f19,0x4f0a,0x4f15,
-0x4f0d,0x4f10,0x4f11,0x4f0f,0x4ef2,0x4ef6,0x4efb,0x4ef0,
-0x4ef3,0x4efd,0x4f01,0x4f0b,0x5149,0x5147,0x5146,0x5148,
-0x5168,0x5171,0x518d,0x51b0,0x5217,0x5211,0x5212,0x520e,
-0x5216,0x52a3,0x5308,0x5321,0x5320,0x5370,0x5371,0x5409,
-0x540f,0x540c,0x540a,0x5410,0x5401,0x540b,0x5404,0x5411,
-0x540d,0x5408,0x5403,0x540e,0x5406,0x5412,0x56e0,0x56de,
-0x56dd,0x5733,0x5730,0x5728,0x572d,0x572c,0x572f,0x5729,
-0x5919,0x591a,0x5937,0x5938,0x5984,0x5978,0x5983,0x597d,
-0x5979,0x5982,0x5981,0x5b57,0x5b58,0x5b87,0x5b88,0x5b85,
-0x5b89,0x5bfa,0x5c16,0x5c79,0x5dde,0x5e06,0x5e76,0x5e74,
-0x5f0f,0x5f1b,0x5fd9,0x5fd6,0x620e,0x620c,0x620d,0x6210,
-0x6263,0x625b,0x6258,0x6536,0x65e9,0x65e8,0x65ec,0x65ed,
-0x66f2,0x66f3,0x6709,0x673d,0x6734,0x6731,0x6735,0x6b21,
-0x6b64,0x6b7b,0x6c16,0x6c5d,0x6c57,0x6c59,0x6c5f,0x6c60,
-0x6c50,0x6c55,0x6c61,0x6c5b,0x6c4d,0x6c4e,0x7070,0x725f,
-0x725d,0x767e,0x7af9,0x7c73,0x7cf8,0x7f36,0x7f8a,0x7fbd,
-0x8001,0x8003,0x800c,0x8012,0x8033,0x807f,0x8089,0x808b,
-0x808c,0x81e3,0x81ea,0x81f3,0x81fc,0x820c,0x821b,0x821f,
-0x826e,0x8272,0x827e,0x866b,0x8840,0x884c,0x8863,0x897f,
-0x9621,0x4e32,0x4ea8,0x4f4d,0x4f4f,0x4f47,0x4f57,0x4f5e,
-0x4f34,0x4f5b,0x4f55,0x4f30,0x4f50,0x4f51,0x4f3d,0x4f3a,
-0x4f38,0x4f43,0x4f54,0x4f3c,0x4f46,0x4f63,0x4f5c,0x4f60,
-0x4f2f,0x4f4e,0x4f36,0x4f59,0x4f5d,0x4f48,0x4f5a,0x514c,
-0x514b,0x514d,0x5175,0x51b6,0x51b7,0x5225,0x5224,0x5229,
-0x522a,0x5228,0x52ab,0x52a9,0x52aa,0x52ac,0x5323,0x5373,
-0x5375,0x541d,0x542d,0x541e,0x543e,0x5426,0x544e,0x5427,
-0x5446,0x5443,0x5433,0x5448,0x5442,0x541b,0x5429,0x544a,
-0x5439,0x543b,0x5438,0x542e,0x5435,0x5436,0x5420,0x543c,
-0x5440,0x5431,0x542b,0x541f,0x542c,0x56ea,0x56f0,0x56e4,
-0x56eb,0x574a,0x5751,0x5740,0x574d,0x5747,0x574e,0x573e,
-0x5750,0x574f,0x573b,0x58ef,0x593e,0x599d,0x5992,0x59a8,
-0x599e,0x59a3,0x5999,0x5996,0x598d,0x59a4,0x5993,0x598a,
-0x59a5,0x5b5d,0x5b5c,0x5b5a,0x5b5b,0x5b8c,0x5b8b,0x5b8f,
-0x5c2c,0x5c40,0x5c41,0x5c3f,0x5c3e,0x5c90,0x5c91,0x5c94,
-0x5c8c,0x5deb,0x5e0c,0x5e8f,0x5e87,0x5e8a,0x5ef7,0x5f04,
-0x5f1f,0x5f64,0x5f62,0x5f77,0x5f79,0x5fd8,0x5fcc,0x5fd7,
-0x5fcd,0x5ff1,0x5feb,0x5ff8,0x5fea,0x6212,0x6211,0x6284,
-0x6297,0x6296,0x6280,0x6276,0x6289,0x626d,0x628a,0x627c,
-0x627e,0x6279,0x6273,0x6292,0x626f,0x6298,0x626e,0x6295,
-0x6293,0x6291,0x6286,0x6539,0x653b,0x6538,0x65f1,0x66f4,
-0x675f,0x674e,0x674f,0x6750,0x6751,0x675c,0x6756,0x675e,
-0x6749,0x6746,0x6760,0x6753,0x6757,0x6b65,0x6bcf,0x6c42,
-0x6c5e,0x6c99,0x6c81,0x6c88,0x6c89,0x6c85,0x6c9b,0x6c6a,
-0x6c7a,0x6c90,0x6c70,0x6c8c,0x6c68,0x6c96,0x6c92,0x6c7d,
-0x6c83,0x6c72,0x6c7e,0x6c74,0x6c86,0x6c76,0x6c8d,0x6c94,
-0x6c98,0x6c82,0x7076,0x707c,0x707d,0x7078,0x7262,0x7261,
-0x7260,0x72c4,0x72c2,0x7396,0x752c,0x752b,0x7537,0x7538,
-0x7682,0x76ef,0x77e3,0x79c1,0x79c0,0x79bf,0x7a76,0x7cfb,
-0x7f55,0x8096,0x8093,0x809d,0x8098,0x809b,0x809a,0x80b2,
-0x826f,0x8292,0x828b,0x828d,0x898b,0x89d2,0x8a00,0x8c37,
-0x8c46,0x8c55,0x8c9d,0x8d64,0x8d70,0x8db3,0x8eab,0x8eca,
-0x8f9b,0x8fb0,0x8fc2,0x8fc6,0x8fc5,0x8fc4,0x5de1,0x9091,
-0x90a2,0x90aa,0x90a6,0x90a3,0x9149,0x91c6,0x91cc,0x9632,
-0x962e,0x9631,0x962a,0x962c,0x4e26,0x4e56,0x4e73,0x4e8b,
-0x4e9b,0x4e9e,0x4eab,0x4eac,0x4f6f,0x4f9d,0x4f8d,0x4f73,
-0x4f7f,0x4f6c,0x4f9b,0x4f8b,0x4f86,0x4f83,0x4f70,0x4f75,
-0x4f88,0x4f69,0x4f7b,0x4f96,0x4f7e,0x4f8f,0x4f91,0x4f7a,
-0x5154,0x5152,0x5155,0x5169,0x5177,0x5176,0x5178,0x51bd,
-0x51fd,0x523b,0x5238,0x5237,0x523a,0x5230,0x522e,0x5236,
-0x5241,0x52be,0x52bb,0x5352,0x5354,0x5353,0x5351,0x5366,
-0x5377,0x5378,0x5379,0x53d6,0x53d4,0x53d7,0x5473,0x5475,
-0x5496,0x5478,0x5495,0x5480,0x547b,0x5477,0x5484,0x5492,
-0x5486,0x547c,0x5490,0x5471,0x5476,0x548c,0x549a,0x5462,
-0x5468,0x548b,0x547d,0x548e,0x56fa,0x5783,0x5777,0x576a,
-0x5769,0x5761,0x5766,0x5764,0x577c,0x591c,0x5949,0x5947,
-0x5948,0x5944,0x5954,0x59be,0x59bb,0x59d4,0x59b9,0x59ae,
-0x59d1,0x59c6,0x59d0,0x59cd,0x59cb,0x59d3,0x59ca,0x59af,
-0x59b3,0x59d2,0x59c5,0x5b5f,0x5b64,0x5b63,0x5b97,0x5b9a,
-0x5b98,0x5b9c,0x5b99,0x5b9b,0x5c1a,0x5c48,0x5c45,0x5c46,
-0x5cb7,0x5ca1,0x5cb8,0x5ca9,0x5cab,0x5cb1,0x5cb3,0x5e18,
-0x5e1a,0x5e16,0x5e15,0x5e1b,0x5e11,0x5e78,0x5e9a,0x5e97,
-0x5e9c,0x5e95,0x5e96,0x5ef6,0x5f26,0x5f27,0x5f29,0x5f80,
-0x5f81,0x5f7f,0x5f7c,0x5fdd,0x5fe0,0x5ffd,0x5ff5,0x5fff,
-0x600f,0x6014,0x602f,0x6035,0x6016,0x602a,0x6015,0x6021,
-0x6027,0x6029,0x602b,0x601b,0x6216,0x6215,0x623f,0x623e,
-0x6240,0x627f,0x62c9,0x62cc,0x62c4,0x62bf,0x62c2,0x62b9,
-0x62d2,0x62db,0x62ab,0x62d3,0x62d4,0x62cb,0x62c8,0x62a8,
-0x62bd,0x62bc,0x62d0,0x62d9,0x62c7,0x62cd,0x62b5,0x62da,
-0x62b1,0x62d8,0x62d6,0x62d7,0x62c6,0x62ac,0x62ce,0x653e,
-0x65a7,0x65bc,0x65fa,0x6614,0x6613,0x660c,0x6606,0x6602,
-0x660e,0x6600,0x660f,0x6615,0x660a,0x6607,0x670d,0x670b,
-0x676d,0x678b,0x6795,0x6771,0x679c,0x6773,0x6777,0x6787,
-0x679d,0x6797,0x676f,0x6770,0x677f,0x6789,0x677e,0x6790,
-0x6775,0x679a,0x6793,0x677c,0x676a,0x6772,0x6b23,0x6b66,
-0x6b67,0x6b7f,0x6c13,0x6c1b,0x6ce3,0x6ce8,0x6cf3,0x6cb1,
-0x6ccc,0x6ce5,0x6cb3,0x6cbd,0x6cbe,0x6cbc,0x6ce2,0x6cab,
-0x6cd5,0x6cd3,0x6cb8,0x6cc4,0x6cb9,0x6cc1,0x6cae,0x6cd7,
-0x6cc5,0x6cf1,0x6cbf,0x6cbb,0x6ce1,0x6cdb,0x6cca,0x6cac,
-0x6cef,0x6cdc,0x6cd6,0x6ce0,0x7095,0x708e,0x7092,0x708a,
-0x7099,0x722c,0x722d,0x7238,0x7248,0x7267,0x7269,0x72c0,
-0x72ce,0x72d9,0x72d7,0x72d0,0x73a9,0x73a8,0x739f,0x73ab,
-0x73a5,0x753d,0x759d,0x7599,0x759a,0x7684,0x76c2,0x76f2,
-0x76f4,0x77e5,0x77fd,0x793e,0x7940,0x7941,0x79c9,0x79c8,
-0x7a7a,0x7a79,0x7afa,0x7cfe,0x7f54,0x7f8c,0x7f8b,0x8005,
-0x80ba,0x80a5,0x80a2,0x80b1,0x80a1,0x80ab,0x80a9,0x80b4,
-0x80aa,0x80af,0x81e5,0x81fe,0x820d,0x82b3,0x829d,0x8299,
-0x82ad,0x82bd,0x829f,0x82b9,0x82b1,0x82ac,0x82a5,0x82af,
-0x82b8,0x82a3,0x82b0,0x82be,0x82b7,0x864e,0x8671,0x521d,
-0x8868,0x8ecb,0x8fce,0x8fd4,0x8fd1,0x90b5,0x90b8,0x90b1,
-0x90b6,0x91c7,0x91d1,0x9577,0x9580,0x961c,0x9640,0x963f,
-0x963b,0x9644,0x9642,0x96b9,0x96e8,0x9752,0x975e,0x4e9f,
-0x4ead,0x4eae,0x4fe1,0x4fb5,0x4faf,0x4fbf,0x4fe0,0x4fd1,
-0x4fcf,0x4fdd,0x4fc3,0x4fb6,0x4fd8,0x4fdf,0x4fca,0x4fd7,
-0x4fae,0x4fd0,0x4fc4,0x4fc2,0x4fda,0x4fce,0x4fde,0x4fb7,
-0x5157,0x5192,0x5191,0x51a0,0x524e,0x5243,0x524a,0x524d,
-0x524c,0x524b,0x5247,0x52c7,0x52c9,0x52c3,0x52c1,0x530d,
-0x5357,0x537b,0x539a,0x53db,0x54ac,0x54c0,0x54a8,0x54ce,
-0x54c9,0x54b8,0x54a6,0x54b3,0x54c7,0x54c2,0x54bd,0x54aa,
-0x54c1,0x54c4,0x54c8,0x54af,0x54ab,0x54b1,0x54bb,0x54a9,
-0x54a7,0x54bf,0x56ff,0x5782,0x578b,0x57a0,0x57a3,0x57a2,
-0x57ce,0x57ae,0x5793,0x5955,0x5951,0x594f,0x594e,0x5950,
-0x59dc,0x59d8,0x59ff,0x59e3,0x59e8,0x5a03,0x59e5,0x59ea,
-0x59da,0x59e6,0x5a01,0x59fb,0x5b69,0x5ba3,0x5ba6,0x5ba4,
-0x5ba2,0x5ba5,0x5c01,0x5c4e,0x5c4f,0x5c4d,0x5c4b,0x5cd9,
-0x5cd2,0x5df7,0x5e1d,0x5e25,0x5e1f,0x5e7d,0x5ea0,0x5ea6,
-0x5efa,0x5f08,0x5f2d,0x5f65,0x5f88,0x5f85,0x5f8a,0x5f8b,
-0x5f87,0x5f8c,0x5f89,0x6012,0x601d,0x6020,0x6025,0x600e,
-0x6028,0x604d,0x6070,0x6068,0x6062,0x6046,0x6043,0x606c,
-0x606b,0x606a,0x6064,0x6241,0x62dc,0x6316,0x6309,0x62fc,
-0x62ed,0x6301,0x62ee,0x62fd,0x6307,0x62f1,0x62f7,0x62ef,
-0x62ec,0x62fe,0x62f4,0x6311,0x6302,0x653f,0x6545,0x65ab,
-0x65bd,0x65e2,0x6625,0x662d,0x6620,0x6627,0x662f,0x661f,
-0x6628,0x6631,0x6624,0x66f7,0x67ff,0x67d3,0x67f1,0x67d4,
-0x67d0,0x67ec,0x67b6,0x67af,0x67f5,0x67e9,0x67ef,0x67c4,
-0x67d1,0x67b4,0x67da,0x67e5,0x67b8,0x67cf,0x67de,0x67f3,
-0x67b0,0x67d9,0x67e2,0x67dd,0x67d2,0x6b6a,0x6b83,0x6b86,
-0x6bb5,0x6bd2,0x6bd7,0x6c1f,0x6cc9,0x6d0b,0x6d32,0x6d2a,
-0x6d41,0x6d25,0x6d0c,0x6d31,0x6d1e,0x6d17,0x6d3b,0x6d3d,
-0x6d3e,0x6d36,0x6d1b,0x6cf5,0x6d39,0x6d27,0x6d38,0x6d29,
-0x6d2e,0x6d35,0x6d0e,0x6d2b,0x70ab,0x70ba,0x70b3,0x70ac,
-0x70af,0x70ad,0x70b8,0x70ae,0x70a4,0x7230,0x7272,0x726f,
-0x7274,0x72e9,0x72e0,0x72e1,0x73b7,0x73ca,0x73bb,0x73b2,
-0x73cd,0x73c0,0x73b3,0x751a,0x752d,0x754f,0x754c,0x754e,
-0x754b,0x75ab,0x75a4,0x75a5,0x75a2,0x75a3,0x7678,0x7686,
-0x7687,0x7688,0x76c8,0x76c6,0x76c3,0x76c5,0x7701,0x76f9,
-0x76f8,0x7709,0x770b,0x76fe,0x76fc,0x7707,0x77dc,0x7802,
-0x7814,0x780c,0x780d,0x7946,0x7949,0x7948,0x7947,0x79b9,
-0x79ba,0x79d1,0x79d2,0x79cb,0x7a7f,0x7a81,0x7aff,0x7afd,
-0x7c7d,0x7d02,0x7d05,0x7d00,0x7d09,0x7d07,0x7d04,0x7d06,
-0x7f38,0x7f8e,0x7fbf,0x8004,0x8010,0x800d,0x8011,0x8036,
-0x80d6,0x80e5,0x80da,0x80c3,0x80c4,0x80cc,0x80e1,0x80db,
-0x80ce,0x80de,0x80e4,0x80dd,0x81f4,0x8222,0x82e7,0x8303,
-0x8305,0x82e3,0x82db,0x82e6,0x8304,0x82e5,0x8302,0x8309,
-0x82d2,0x82d7,0x82f1,0x8301,0x82dc,0x82d4,0x82d1,0x82de,
-0x82d3,0x82df,0x82ef,0x8306,0x8650,0x8679,0x867b,0x867a,
-0x884d,0x886b,0x8981,0x89d4,0x8a08,0x8a02,0x8a03,0x8c9e,
-0x8ca0,0x8d74,0x8d73,0x8db4,0x8ecd,0x8ecc,0x8ff0,0x8fe6,
-0x8fe2,0x8fea,0x8fe5,0x8fed,0x8feb,0x8fe4,0x8fe8,0x90ca,
-0x90ce,0x90c1,0x90c3,0x914b,0x914a,0x91cd,0x9582,0x9650,
-0x964b,0x964c,0x964d,0x9762,0x9769,0x97cb,0x97ed,0x97f3,
-0x9801,0x98a8,0x98db,0x98df,0x9996,0x9999,0x4e58,0x4eb3,
-0x500c,0x500d,0x5023,0x4fef,0x5026,0x5025,0x4ff8,0x5029,
-0x5016,0x5006,0x503c,0x501f,0x501a,0x5012,0x5011,0x4ffa,
-0x5000,0x5014,0x5028,0x4ff1,0x5021,0x500b,0x5019,0x5018,
-0x4ff3,0x4fee,0x502d,0x502a,0x4ffe,0x502b,0x5009,0x517c,
-0x51a4,0x51a5,0x51a2,0x51cd,0x51cc,0x51c6,0x51cb,0x5256,
-0x525c,0x5254,0x525b,0x525d,0x532a,0x537f,0x539f,0x539d,
-0x53df,0x54e8,0x5510,0x5501,0x5537,0x54fc,0x54e5,0x54f2,
-0x5506,0x54fa,0x5514,0x54e9,0x54ed,0x54e1,0x5509,0x54ee,
-0x54ea,0x54e6,0x5527,0x5507,0x54fd,0x550f,0x5703,0x5704,
-0x57c2,0x57d4,0x57cb,0x57c3,0x5809,0x590f,0x5957,0x5958,
-0x595a,0x5a11,0x5a18,0x5a1c,0x5a1f,0x5a1b,0x5a13,0x59ec,
-0x5a20,0x5a23,0x5a29,0x5a25,0x5a0c,0x5a09,0x5b6b,0x5c58,
-0x5bb0,0x5bb3,0x5bb6,0x5bb4,0x5bae,0x5bb5,0x5bb9,0x5bb8,
-0x5c04,0x5c51,0x5c55,0x5c50,0x5ced,0x5cfd,0x5cfb,0x5cea,
-0x5ce8,0x5cf0,0x5cf6,0x5d01,0x5cf4,0x5dee,0x5e2d,0x5e2b,
-0x5eab,0x5ead,0x5ea7,0x5f31,0x5f92,0x5f91,0x5f90,0x6059,
-0x6063,0x6065,0x6050,0x6055,0x606d,0x6069,0x606f,0x6084,
-0x609f,0x609a,0x608d,0x6094,0x608c,0x6085,0x6096,0x6247,
-0x62f3,0x6308,0x62ff,0x634e,0x633e,0x632f,0x6355,0x6342,
-0x6346,0x634f,0x6349,0x633a,0x6350,0x633d,0x632a,0x632b,
-0x6328,0x634d,0x634c,0x6548,0x6549,0x6599,0x65c1,0x65c5,
-0x6642,0x6649,0x664f,0x6643,0x6652,0x664c,0x6645,0x6641,
-0x66f8,0x6714,0x6715,0x6717,0x6821,0x6838,0x6848,0x6846,
-0x6853,0x6839,0x6842,0x6854,0x6829,0x68b3,0x6817,0x684c,
-0x6851,0x683d,0x67f4,0x6850,0x6840,0x683c,0x6843,0x682a,
-0x6845,0x6813,0x6818,0x6841,0x6b8a,0x6b89,0x6bb7,0x6c23,
-0x6c27,0x6c28,0x6c26,0x6c24,0x6cf0,0x6d6a,0x6d95,0x6d88,
-0x6d87,0x6d66,0x6d78,0x6d77,0x6d59,0x6d93,0x6d6c,0x6d89,
-0x6d6e,0x6d5a,0x6d74,0x6d69,0x6d8c,0x6d8a,0x6d79,0x6d85,
-0x6d65,0x6d94,0x70ca,0x70d8,0x70e4,0x70d9,0x70c8,0x70cf,
-0x7239,0x7279,0x72fc,0x72f9,0x72fd,0x72f8,0x72f7,0x7386,
-0x73ed,0x7409,0x73ee,0x73e0,0x73ea,0x73de,0x7554,0x755d,
-0x755c,0x755a,0x7559,0x75be,0x75c5,0x75c7,0x75b2,0x75b3,
-0x75bd,0x75bc,0x75b9,0x75c2,0x75b8,0x768b,0x76b0,0x76ca,
-0x76cd,0x76ce,0x7729,0x771f,0x7720,0x7728,0x77e9,0x7830,
-0x7827,0x7838,0x781d,0x7834,0x7837,0x7825,0x782d,0x7820,
-0x781f,0x7832,0x7955,0x7950,0x7960,0x795f,0x7956,0x795e,
-0x795d,0x7957,0x795a,0x79e4,0x79e3,0x79e7,0x79df,0x79e6,
-0x79e9,0x79d8,0x7a84,0x7a88,0x7ad9,0x7b06,0x7b11,0x7c89,
-0x7d21,0x7d17,0x7d0b,0x7d0a,0x7d20,0x7d22,0x7d14,0x7d10,
-0x7d15,0x7d1a,0x7d1c,0x7d0d,0x7d19,0x7d1b,0x7f3a,0x7f5f,
-0x7f94,0x7fc5,0x7fc1,0x8006,0x8018,0x8015,0x8019,0x8017,
-0x803d,0x803f,0x80f1,0x8102,0x80f0,0x8105,0x80ed,0x80f4,
-0x8106,0x80f8,0x80f3,0x8108,0x80fd,0x810a,0x80fc,0x80ef,
-0x81ed,0x81ec,0x8200,0x8210,0x822a,0x822b,0x8228,0x822c,
-0x82bb,0x832b,0x8352,0x8354,0x834a,0x8338,0x8350,0x8349,
-0x8335,0x8334,0x834f,0x8332,0x8339,0x8336,0x8317,0x8340,
-0x8331,0x8328,0x8343,0x8654,0x868a,0x86aa,0x8693,0x86a4,
-0x86a9,0x868c,0x86a3,0x869c,0x8870,0x8877,0x8881,0x8882,
-0x887d,0x8879,0x8a18,0x8a10,0x8a0e,0x8a0c,0x8a15,0x8a0a,
-0x8a17,0x8a13,0x8a16,0x8a0f,0x8a11,0x8c48,0x8c7a,0x8c79,
-0x8ca1,0x8ca2,0x8d77,0x8eac,0x8ed2,0x8ed4,0x8ecf,0x8fb1,
-0x9001,0x9006,0x8ff7,0x9000,0x8ffa,0x8ff4,0x9003,0x8ffd,
-0x9005,0x8ff8,0x9095,0x90e1,0x90dd,0x90e2,0x9152,0x914d,
-0x914c,0x91d8,0x91dd,0x91d7,0x91dc,0x91d9,0x9583,0x9662,
-0x9663,0x9661,0x965b,0x965d,0x9664,0x9658,0x965e,0x96bb,
-0x98e2,0x99ac,0x9aa8,0x9ad8,0x9b25,0x9b32,0x9b3c,0x4e7e,
-0x507a,0x507d,0x505c,0x5047,0x5043,0x504c,0x505a,0x5049,
-0x5065,0x5076,0x504e,0x5055,0x5075,0x5074,0x5077,0x504f,
-0x500f,0x506f,0x506d,0x515c,0x5195,0x51f0,0x526a,0x526f,
-0x52d2,0x52d9,0x52d8,0x52d5,0x5310,0x530f,0x5319,0x533f,
-0x5340,0x533e,0x53c3,0x66fc,0x5546,0x556a,0x5566,0x5544,
-0x555e,0x5561,0x5543,0x554a,0x5531,0x5556,0x554f,0x5555,
-0x552f,0x5564,0x5538,0x552e,0x555c,0x552c,0x5563,0x5533,
-0x5541,0x5557,0x5708,0x570b,0x5709,0x57df,0x5805,0x580a,
-0x5806,0x57e0,0x57e4,0x57fa,0x5802,0x5835,0x57f7,0x57f9,
-0x5920,0x5962,0x5a36,0x5a41,0x5a49,0x5a66,0x5a6a,0x5a40,
-0x5a3c,0x5a62,0x5a5a,0x5a46,0x5a4a,0x5b70,0x5bc7,0x5bc5,
-0x5bc4,0x5bc2,0x5bbf,0x5bc6,0x5c09,0x5c08,0x5c07,0x5c60,
-0x5c5c,0x5c5d,0x5d07,0x5d06,0x5d0e,0x5d1b,0x5d16,0x5d22,
-0x5d11,0x5d29,0x5d14,0x5d19,0x5d24,0x5d27,0x5d17,0x5de2,
-0x5e38,0x5e36,0x5e33,0x5e37,0x5eb7,0x5eb8,0x5eb6,0x5eb5,
-0x5ebe,0x5f35,0x5f37,0x5f57,0x5f6c,0x5f69,0x5f6b,0x5f97,
-0x5f99,0x5f9e,0x5f98,0x5fa1,0x5fa0,0x5f9c,0x607f,0x60a3,
-0x6089,0x60a0,0x60a8,0x60cb,0x60b4,0x60e6,0x60bd,0x60c5,
-0x60bb,0x60b5,0x60dc,0x60bc,0x60d8,0x60d5,0x60c6,0x60df,
-0x60b8,0x60da,0x60c7,0x621a,0x621b,0x6248,0x63a0,0x63a7,
-0x6372,0x6396,0x63a2,0x63a5,0x6377,0x6367,0x6398,0x63aa,
-0x6371,0x63a9,0x6389,0x6383,0x639b,0x636b,0x63a8,0x6384,
-0x6388,0x6399,0x63a1,0x63ac,0x6392,0x638f,0x6380,0x637b,
-0x6369,0x6368,0x637a,0x655d,0x6556,0x6551,0x6559,0x6557,
-0x555f,0x654f,0x6558,0x6555,0x6554,0x659c,0x659b,0x65ac,
-0x65cf,0x65cb,0x65cc,0x65ce,0x665d,0x665a,0x6664,0x6668,
-0x6666,0x665e,0x66f9,0x52d7,0x671b,0x6881,0x68af,0x68a2,
-0x6893,0x68b5,0x687f,0x6876,0x68b1,0x68a7,0x6897,0x68b0,
-0x6883,0x68c4,0x68ad,0x6886,0x6885,0x6894,0x689d,0x68a8,
-0x689f,0x68a1,0x6882,0x6b32,0x6bba,0x6beb,0x6bec,0x6c2b,
-0x6d8e,0x6dbc,0x6df3,0x6dd9,0x6db2,0x6de1,0x6dcc,0x6de4,
-0x6dfb,0x6dfa,0x6e05,0x6dc7,0x6dcb,0x6daf,0x6dd1,0x6dae,
-0x6dde,0x6df9,0x6db8,0x6df7,0x6df5,0x6dc5,0x6dd2,0x6e1a,
-0x6db5,0x6dda,0x6deb,0x6dd8,0x6dea,0x6df1,0x6dee,0x6de8,
-0x6dc6,0x6dc4,0x6daa,0x6dec,0x6dbf,0x6de6,0x70f9,0x7109,
-0x710a,0x70fd,0x70ef,0x723d,0x727d,0x7281,0x731c,0x731b,
-0x7316,0x7313,0x7319,0x7387,0x7405,0x740a,0x7403,0x7406,
-0x73fe,0x740d,0x74e0,0x74f6,0x74f7,0x751c,0x7522,0x7565,
-0x7566,0x7562,0x7570,0x758f,0x75d4,0x75d5,0x75b5,0x75ca,
-0x75cd,0x768e,0x76d4,0x76d2,0x76db,0x7737,0x773e,0x773c,
-0x7736,0x7738,0x773a,0x786b,0x7843,0x784e,0x7965,0x7968,
-0x796d,0x79fb,0x7a92,0x7a95,0x7b20,0x7b28,0x7b1b,0x7b2c,
-0x7b26,0x7b19,0x7b1e,0x7b2e,0x7c92,0x7c97,0x7c95,0x7d46,
-0x7d43,0x7d71,0x7d2e,0x7d39,0x7d3c,0x7d40,0x7d30,0x7d33,
-0x7d44,0x7d2f,0x7d42,0x7d32,0x7d31,0x7f3d,0x7f9e,0x7f9a,
-0x7fcc,0x7fce,0x7fd2,0x801c,0x804a,0x8046,0x812f,0x8116,
-0x8123,0x812b,0x8129,0x8130,0x8124,0x8202,0x8235,0x8237,
-0x8236,0x8239,0x838e,0x839e,0x8398,0x8378,0x83a2,0x8396,
-0x83bd,0x83ab,0x8392,0x838a,0x8393,0x8389,0x83a0,0x8377,
-0x837b,0x837c,0x8386,0x83a7,0x8655,0x5f6a,0x86c7,0x86c0,
-0x86b6,0x86c4,0x86b5,0x86c6,0x86cb,0x86b1,0x86af,0x86c9,
-0x8853,0x889e,0x8888,0x88ab,0x8892,0x8896,0x888d,0x888b,
-0x8993,0x898f,0x8a2a,0x8a1d,0x8a23,0x8a25,0x8a31,0x8a2d,
-0x8a1f,0x8a1b,0x8a22,0x8c49,0x8c5a,0x8ca9,0x8cac,0x8cab,
-0x8ca8,0x8caa,0x8ca7,0x8d67,0x8d66,0x8dbe,0x8dba,0x8edb,
-0x8edf,0x9019,0x900d,0x901a,0x9017,0x9023,0x901f,0x901d,
-0x9010,0x9015,0x901e,0x9020,0x900f,0x9022,0x9016,0x901b,
-0x9014,0x90e8,0x90ed,0x90fd,0x9157,0x91ce,0x91f5,0x91e6,
-0x91e3,0x91e7,0x91ed,0x91e9,0x9589,0x966a,0x9675,0x9673,
-0x9678,0x9670,0x9674,0x9676,0x9677,0x966c,0x96c0,0x96ea,
-0x96e9,0x7ae0,0x7adf,0x9802,0x9803,0x9b5a,0x9ce5,0x9e75,
-0x9e7f,0x9ea5,0x9ebb,0x50a2,0x508d,0x5085,0x5099,0x5091,
-0x5080,0x5096,0x5098,0x509a,0x6700,0x51f1,0x5272,0x5274,
-0x5275,0x5269,0x52de,0x52dd,0x52db,0x535a,0x53a5,0x557b,
-0x5580,0x55a7,0x557c,0x558a,0x559d,0x5598,0x5582,0x559c,
-0x55aa,0x5594,0x5587,0x558b,0x5583,0x55b3,0x55ae,0x559f,
-0x553e,0x55b2,0x559a,0x55bb,0x55ac,0x55b1,0x557e,0x5589,
-0x55ab,0x5599,0x570d,0x582f,0x582a,0x5834,0x5824,0x5830,
-0x5831,0x5821,0x581d,0x5820,0x58f9,0x58fa,0x5960,0x5a77,
-0x5a9a,0x5a7f,0x5a92,0x5a9b,0x5aa7,0x5b73,0x5b71,0x5bd2,
-0x5bcc,0x5bd3,0x5bd0,0x5c0a,0x5c0b,0x5c31,0x5d4c,0x5d50,
-0x5d34,0x5d47,0x5dfd,0x5e45,0x5e3d,0x5e40,0x5e43,0x5e7e,
-0x5eca,0x5ec1,0x5ec2,0x5ec4,0x5f3c,0x5f6d,0x5fa9,0x5faa,
-0x5fa8,0x60d1,0x60e1,0x60b2,0x60b6,0x60e0,0x611c,0x6123,
-0x60fa,0x6115,0x60f0,0x60fb,0x60f4,0x6168,0x60f1,0x610e,
-0x60f6,0x6109,0x6100,0x6112,0x621f,0x6249,0x63a3,0x638c,
-0x63cf,0x63c0,0x63e9,0x63c9,0x63c6,0x63cd,0x63d2,0x63e3,
-0x63d0,0x63e1,0x63d6,0x63ed,0x63ee,0x6376,0x63f4,0x63ea,
-0x63db,0x6452,0x63da,0x63f9,0x655e,0x6566,0x6562,0x6563,
-0x6591,0x6590,0x65af,0x666e,0x6670,0x6674,0x6676,0x666f,
-0x6691,0x667a,0x667e,0x6677,0x66fe,0x66ff,0x671f,0x671d,
-0x68fa,0x68d5,0x68e0,0x68d8,0x68d7,0x6905,0x68df,0x68f5,
-0x68ee,0x68e7,0x68f9,0x68d2,0x68f2,0x68e3,0x68cb,0x68cd,
-0x690d,0x6912,0x690e,0x68c9,0x68da,0x696e,0x68fb,0x6b3e,
-0x6b3a,0x6b3d,0x6b98,0x6b96,0x6bbc,0x6bef,0x6c2e,0x6c2f,
-0x6c2c,0x6e2f,0x6e38,0x6e54,0x6e21,0x6e32,0x6e67,0x6e4a,
-0x6e20,0x6e25,0x6e23,0x6e1b,0x6e5b,0x6e58,0x6e24,0x6e56,
-0x6e6e,0x6e2d,0x6e26,0x6e6f,0x6e34,0x6e4d,0x6e3a,0x6e2c,
-0x6e43,0x6e1d,0x6e3e,0x6ecb,0x6e89,0x6e19,0x6e4e,0x6e63,
-0x6e44,0x6e72,0x6e69,0x6e5f,0x7119,0x711a,0x7126,0x7130,
-0x7121,0x7136,0x716e,0x711c,0x724c,0x7284,0x7280,0x7336,
-0x7325,0x7334,0x7329,0x743a,0x742a,0x7433,0x7422,0x7425,
-0x7435,0x7436,0x7434,0x742f,0x741b,0x7426,0x7428,0x7525,
-0x7526,0x756b,0x756a,0x75e2,0x75db,0x75e3,0x75d9,0x75d8,
-0x75de,0x75e0,0x767b,0x767c,0x7696,0x7693,0x76b4,0x76dc,
-0x774f,0x77ed,0x785d,0x786c,0x786f,0x7a0d,0x7a08,0x7a0b,
-0x7a05,0x7a00,0x7a98,0x7a97,0x7a96,0x7ae5,0x7ae3,0x7b49,
-0x7b56,0x7b46,0x7b50,0x7b52,0x7b54,0x7b4d,0x7b4b,0x7b4f,
-0x7b51,0x7c9f,0x7ca5,0x7d5e,0x7d50,0x7d68,0x7d55,0x7d2b,
-0x7d6e,0x7d72,0x7d61,0x7d66,0x7d62,0x7d70,0x7d73,0x5584,
-0x7fd4,0x7fd5,0x800b,0x8052,0x8085,0x8155,0x8154,0x814b,
-0x8151,0x814e,0x8139,0x8146,0x813e,0x814c,0x8153,0x8174,
-0x8212,0x821c,0x83e9,0x8403,0x83f8,0x840d,0x83e0,0x83c5,
-0x840b,0x83c1,0x83ef,0x83f1,0x83f4,0x8457,0x840a,0x83f0,
-0x840c,0x83cc,0x83fd,0x83f2,0x83ca,0x8438,0x840e,0x8404,
-0x83dc,0x8407,0x83d4,0x83df,0x865b,0x86df,0x86d9,0x86ed,
-0x86d4,0x86db,0x86e4,0x86d0,0x86de,0x8857,0x88c1,0x88c2,
-0x88b1,0x8983,0x8996,0x8a3b,0x8a60,0x8a55,0x8a5e,0x8a3c,
-0x8a41,0x8a54,0x8a5b,0x8a50,0x8a46,0x8a34,0x8a3a,0x8a36,
-0x8a56,0x8c61,0x8c82,0x8caf,0x8cbc,0x8cb3,0x8cbd,0x8cc1,
-0x8cbb,0x8cc0,0x8cb4,0x8cb7,0x8cb6,0x8cbf,0x8cb8,0x8d8a,
-0x8d85,0x8d81,0x8dce,0x8ddd,0x8dcb,0x8dda,0x8dd1,0x8dcc,
-0x8ddb,0x8dc6,0x8efb,0x8ef8,0x8efc,0x8f9c,0x902e,0x9035,
-0x9031,0x9038,0x9032,0x9036,0x9102,0x90f5,0x9109,0x90fe,
-0x9163,0x9165,0x91cf,0x9214,0x9215,0x9223,0x9209,0x921e,
-0x920d,0x9210,0x9207,0x9211,0x9594,0x958f,0x958b,0x9591,
-0x9593,0x9592,0x958e,0x968a,0x968e,0x968b,0x967d,0x9685,
-0x9686,0x968d,0x9672,0x9684,0x96c1,0x96c5,0x96c4,0x96c6,
-0x96c7,0x96ef,0x96f2,0x97cc,0x9805,0x9806,0x9808,0x98e7,
-0x98ea,0x98ef,0x98e9,0x98f2,0x98ed,0x99ae,0x99ad,0x9ec3,
-0x9ecd,0x9ed1,0x4e82,0x50ad,0x50b5,0x50b2,0x50b3,0x50c5,
-0x50be,0x50ac,0x50b7,0x50bb,0x50af,0x50c7,0x527f,0x5277,
-0x527d,0x52df,0x52e6,0x52e4,0x52e2,0x52e3,0x532f,0x55df,
-0x55e8,0x55d3,0x55e6,0x55ce,0x55dc,0x55c7,0x55d1,0x55e3,
-0x55e4,0x55ef,0x55da,0x55e1,0x55c5,0x55c6,0x55e5,0x55c9,
-0x5712,0x5713,0x585e,0x5851,0x5858,0x5857,0x585a,0x5854,
-0x586b,0x584c,0x586d,0x584a,0x5862,0x5852,0x584b,0x5967,
-0x5ac1,0x5ac9,0x5acc,0x5abe,0x5abd,0x5abc,0x5ab3,0x5ac2,
-0x5ab2,0x5d69,0x5d6f,0x5e4c,0x5e79,0x5ec9,0x5ec8,0x5f12,
-0x5f59,0x5fac,0x5fae,0x611a,0x610f,0x6148,0x611f,0x60f3,
-0x611b,0x60f9,0x6101,0x6108,0x614e,0x614c,0x6144,0x614d,
-0x613e,0x6134,0x6127,0x610d,0x6106,0x6137,0x6221,0x6222,
-0x6413,0x643e,0x641e,0x642a,0x642d,0x643d,0x642c,0x640f,
-0x641c,0x6414,0x640d,0x6436,0x6416,0x6417,0x6406,0x656c,
-0x659f,0x65b0,0x6697,0x6689,0x6687,0x6688,0x6696,0x6684,
-0x6698,0x668d,0x6703,0x6994,0x696d,0x695a,0x6977,0x6960,
-0x6954,0x6975,0x6930,0x6982,0x694a,0x6968,0x696b,0x695e,
-0x6953,0x6979,0x6986,0x695d,0x6963,0x695b,0x6b47,0x6b72,
-0x6bc0,0x6bbf,0x6bd3,0x6bfd,0x6ea2,0x6eaf,0x6ed3,0x6eb6,
-0x6ec2,0x6e90,0x6e9d,0x6ec7,0x6ec5,0x6ea5,0x6e98,0x6ebc,
-0x6eba,0x6eab,0x6ed1,0x6e96,0x6e9c,0x6ec4,0x6ed4,0x6eaa,
-0x6ea7,0x6eb4,0x714e,0x7159,0x7169,0x7164,0x7149,0x7167,
-0x715c,0x716c,0x7166,0x714c,0x7165,0x715e,0x7146,0x7168,
-0x7156,0x723a,0x7252,0x7337,0x7345,0x733f,0x733e,0x746f,
-0x745a,0x7455,0x745f,0x745e,0x7441,0x743f,0x7459,0x745b,
-0x745c,0x7576,0x7578,0x7600,0x75f0,0x7601,0x75f2,0x75f1,
-0x75fa,0x75ff,0x75f4,0x75f3,0x76de,0x76df,0x775b,0x776b,
-0x7766,0x775e,0x7763,0x7779,0x776a,0x776c,0x775c,0x7765,
-0x7768,0x7762,0x77ee,0x788e,0x78b0,0x7897,0x7898,0x788c,
-0x7889,0x787c,0x7891,0x7893,0x787f,0x797a,0x797f,0x7981,
-0x842c,0x79bd,0x7a1c,0x7a1a,0x7a20,0x7a14,0x7a1f,0x7a1e,
-0x7a9f,0x7aa0,0x7b77,0x7bc0,0x7b60,0x7b6e,0x7b67,0x7cb1,
-0x7cb3,0x7cb5,0x7d93,0x7d79,0x7d91,0x7d81,0x7d8f,0x7d5b,
-0x7f6e,0x7f69,0x7f6a,0x7f72,0x7fa9,0x7fa8,0x7fa4,0x8056,
-0x8058,0x8086,0x8084,0x8171,0x8170,0x8178,0x8165,0x816e,
-0x8173,0x816b,0x8179,0x817a,0x8166,0x8205,0x8247,0x8482,
-0x8477,0x843d,0x8431,0x8475,0x8466,0x846b,0x8449,0x846c,
-0x845b,0x843c,0x8435,0x8461,0x8463,0x8469,0x846d,0x8446,
-0x865e,0x865c,0x865f,0x86f9,0x8713,0x8708,0x8707,0x8700,
-0x86fe,0x86fb,0x8702,0x8703,0x8706,0x870a,0x8859,0x88df,
-0x88d4,0x88d9,0x88dc,0x88d8,0x88dd,0x88e1,0x88ca,0x88d5,
-0x88d2,0x899c,0x89e3,0x8a6b,0x8a72,0x8a73,0x8a66,0x8a69,
-0x8a70,0x8a87,0x8a7c,0x8a63,0x8aa0,0x8a71,0x8a85,0x8a6d,
-0x8a62,0x8a6e,0x8a6c,0x8a79,0x8a7b,0x8a3e,0x8a68,0x8c62,
-0x8c8a,0x8c89,0x8cca,0x8cc7,0x8cc8,0x8cc4,0x8cb2,0x8cc3,
-0x8cc2,0x8cc5,0x8de1,0x8ddf,0x8de8,0x8def,0x8df3,0x8dfa,
-0x8dea,0x8de4,0x8de6,0x8eb2,0x8f03,0x8f09,0x8efe,0x8f0a,
-0x8f9f,0x8fb2,0x904b,0x904a,0x9053,0x9042,0x9054,0x903c,
-0x9055,0x9050,0x9047,0x904f,0x904e,0x904d,0x9051,0x903e,
-0x9041,0x9112,0x9117,0x916c,0x916a,0x9169,0x91c9,0x9237,
-0x9257,0x9238,0x923d,0x9240,0x923e,0x925b,0x924b,0x9264,
-0x9251,0x9234,0x9249,0x924d,0x9245,0x9239,0x923f,0x925a,
-0x9598,0x9698,0x9694,0x9695,0x96cd,0x96cb,0x96c9,0x96ca,
-0x96f7,0x96fb,0x96f9,0x96f6,0x9756,0x9774,0x9776,0x9810,
-0x9811,0x9813,0x980a,0x9812,0x980c,0x98fc,0x98f4,0x98fd,
-0x98fe,0x99b3,0x99b1,0x99b4,0x9ae1,0x9ce9,0x9e82,0x9f0e,
-0x9f13,0x9f20,0x50e7,0x50ee,0x50e5,0x50d6,0x50ed,0x50da,
-0x50d5,0x50cf,0x50d1,0x50f1,0x50ce,0x50e9,0x5162,0x51f3,
-0x5283,0x5282,0x5331,0x53ad,0x55fe,0x5600,0x561b,0x5617,
-0x55fd,0x5614,0x5606,0x5609,0x560d,0x560e,0x55f7,0x5616,
-0x561f,0x5608,0x5610,0x55f6,0x5718,0x5716,0x5875,0x587e,
-0x5883,0x5893,0x588a,0x5879,0x5885,0x587d,0x58fd,0x5925,
-0x5922,0x5924,0x596a,0x5969,0x5ae1,0x5ae6,0x5ae9,0x5ad7,
-0x5ad6,0x5ad8,0x5ae3,0x5b75,0x5bde,0x5be7,0x5be1,0x5be5,
-0x5be6,0x5be8,0x5be2,0x5be4,0x5bdf,0x5c0d,0x5c62,0x5d84,
-0x5d87,0x5e5b,0x5e63,0x5e55,0x5e57,0x5e54,0x5ed3,0x5ed6,
-0x5f0a,0x5f46,0x5f70,0x5fb9,0x6147,0x613f,0x614b,0x6177,
-0x6162,0x6163,0x615f,0x615a,0x6158,0x6175,0x622a,0x6487,
-0x6458,0x6454,0x64a4,0x6478,0x645f,0x647a,0x6451,0x6467,
-0x6434,0x646d,0x647b,0x6572,0x65a1,0x65d7,0x65d6,0x66a2,
-0x66a8,0x669d,0x699c,0x69a8,0x6995,0x69c1,0x69ae,0x69d3,
-0x69cb,0x699b,0x69b7,0x69bb,0x69ab,0x69b4,0x69d0,0x69cd,
-0x69ad,0x69cc,0x69a6,0x69c3,0x69a3,0x6b49,0x6b4c,0x6c33,
-0x6f33,0x6f14,0x6efe,0x6f13,0x6ef4,0x6f29,0x6f3e,0x6f20,
-0x6f2c,0x6f0f,0x6f02,0x6f22,0x6eff,0x6eef,0x6f06,0x6f31,
-0x6f38,0x6f32,0x6f23,0x6f15,0x6f2b,0x6f2f,0x6f88,0x6f2a,
-0x6eec,0x6f01,0x6ef2,0x6ecc,0x6ef7,0x7194,0x7199,0x717d,
-0x718a,0x7184,0x7192,0x723e,0x7292,0x7296,0x7344,0x7350,
-0x7464,0x7463,0x746a,0x7470,0x746d,0x7504,0x7591,0x7627,
-0x760d,0x760b,0x7609,0x7613,0x76e1,0x76e3,0x7784,0x777d,
-0x777f,0x7761,0x78c1,0x789f,0x78a7,0x78b3,0x78a9,0x78a3,
-0x798e,0x798f,0x798d,0x7a2e,0x7a31,0x7aaa,0x7aa9,0x7aed,
-0x7aef,0x7ba1,0x7b95,0x7b8b,0x7b75,0x7b97,0x7b9d,0x7b94,
-0x7b8f,0x7bb8,0x7b87,0x7b84,0x7cb9,0x7cbd,0x7cbe,0x7dbb,
-0x7db0,0x7d9c,0x7dbd,0x7dbe,0x7da0,0x7dca,0x7db4,0x7db2,
-0x7db1,0x7dba,0x7da2,0x7dbf,0x7db5,0x7db8,0x7dad,0x7dd2,
-0x7dc7,0x7dac,0x7f70,0x7fe0,0x7fe1,0x7fdf,0x805e,0x805a,
-0x8087,0x8150,0x8180,0x818f,0x8188,0x818a,0x817f,0x8182,
-0x81e7,0x81fa,0x8207,0x8214,0x821e,0x824b,0x84c9,0x84bf,
-0x84c6,0x84c4,0x8499,0x849e,0x84b2,0x849c,0x84cb,0x84b8,
-0x84c0,0x84d3,0x8490,0x84bc,0x84d1,0x84ca,0x873f,0x871c,
-0x873b,0x8722,0x8725,0x8734,0x8718,0x8755,0x8737,0x8729,
-0x88f3,0x8902,0x88f4,0x88f9,0x88f8,0x88fd,0x88e8,0x891a,
-0x88ef,0x8aa6,0x8a8c,0x8a9e,0x8aa3,0x8a8d,0x8aa1,0x8a93,
-0x8aa4,0x8aaa,0x8aa5,0x8aa8,0x8a98,0x8a91,0x8a9a,0x8aa7,
-0x8c6a,0x8c8d,0x8c8c,0x8cd3,0x8cd1,0x8cd2,0x8d6b,0x8d99,
-0x8d95,0x8dfc,0x8f14,0x8f12,0x8f15,0x8f13,0x8fa3,0x9060,
-0x9058,0x905c,0x9063,0x9059,0x905e,0x9062,0x905d,0x905b,
-0x9119,0x9118,0x911e,0x9175,0x9178,0x9177,0x9174,0x9278,
-0x9280,0x9285,0x9298,0x9296,0x927b,0x9293,0x929c,0x92a8,
-0x927c,0x9291,0x95a1,0x95a8,0x95a9,0x95a3,0x95a5,0x95a4,
-0x9699,0x969c,0x969b,0x96cc,0x96d2,0x9700,0x977c,0x9785,
-0x97f6,0x9817,0x9818,0x98af,0x98b1,0x9903,0x9905,0x990c,
-0x9909,0x99c1,0x9aaf,0x9ab0,0x9ae6,0x9b41,0x9b42,0x9cf4,
-0x9cf6,0x9cf3,0x9ebc,0x9f3b,0x9f4a,0x5104,0x5100,0x50fb,
-0x50f5,0x50f9,0x5102,0x5108,0x5109,0x5105,0x51dc,0x5287,
-0x5288,0x5289,0x528d,0x528a,0x52f0,0x53b2,0x562e,0x563b,
-0x5639,0x5632,0x563f,0x5634,0x5629,0x5653,0x564e,0x5657,
-0x5674,0x5636,0x562f,0x5630,0x5880,0x589f,0x589e,0x58b3,
-0x589c,0x58ae,0x58a9,0x58a6,0x596d,0x5b09,0x5afb,0x5b0b,
-0x5af5,0x5b0c,0x5b08,0x5bee,0x5bec,0x5be9,0x5beb,0x5c64,
-0x5c65,0x5d9d,0x5d94,0x5e62,0x5e5f,0x5e61,0x5ee2,0x5eda,
-0x5edf,0x5edd,0x5ee3,0x5ee0,0x5f48,0x5f71,0x5fb7,0x5fb5,
-0x6176,0x6167,0x616e,0x615d,0x6155,0x6182,0x617c,0x6170,
-0x616b,0x617e,0x61a7,0x6190,0x61ab,0x618e,0x61ac,0x619a,
-0x61a4,0x6194,0x61ae,0x622e,0x6469,0x646f,0x6479,0x649e,
-0x64b2,0x6488,0x6490,0x64b0,0x64a5,0x6493,0x6495,0x64a9,
-0x6492,0x64ae,0x64ad,0x64ab,0x649a,0x64ac,0x6499,0x64a2,
-0x64b3,0x6575,0x6577,0x6578,0x66ae,0x66ab,0x66b4,0x66b1,
-0x6a23,0x6a1f,0x69e8,0x6a01,0x6a1e,0x6a19,0x69fd,0x6a21,
-0x6a13,0x6a0a,0x69f3,0x6a02,0x6a05,0x69ed,0x6a11,0x6b50,
-0x6b4e,0x6ba4,0x6bc5,0x6bc6,0x6f3f,0x6f7c,0x6f84,0x6f51,
-0x6f66,0x6f54,0x6f86,0x6f6d,0x6f5b,0x6f78,0x6f6e,0x6f8e,
-0x6f7a,0x6f70,0x6f64,0x6f97,0x6f58,0x6ed5,0x6f6f,0x6f60,
-0x6f5f,0x719f,0x71ac,0x71b1,0x71a8,0x7256,0x729b,0x734e,
-0x7357,0x7469,0x748b,0x7483,0x747e,0x7480,0x757f,0x7620,
-0x7629,0x761f,0x7624,0x7626,0x7621,0x7622,0x769a,0x76ba,
-0x76e4,0x778e,0x7787,0x778c,0x7791,0x778b,0x78cb,0x78c5,
-0x78ba,0x78ca,0x78be,0x78d5,0x78bc,0x78d0,0x7a3f,0x7a3c,
-0x7a40,0x7a3d,0x7a37,0x7a3b,0x7aaf,0x7aae,0x7bad,0x7bb1,
-0x7bc4,0x7bb4,0x7bc6,0x7bc7,0x7bc1,0x7ba0,0x7bcc,0x7cca,
-0x7de0,0x7df4,0x7def,0x7dfb,0x7dd8,0x7dec,0x7ddd,0x7de8,
-0x7de3,0x7dda,0x7dde,0x7de9,0x7d9e,0x7dd9,0x7df2,0x7df9,
-0x7f75,0x7f77,0x7faf,0x7fe9,0x8026,0x819b,0x819c,0x819d,
-0x81a0,0x819a,0x8198,0x8517,0x853d,0x851a,0x84ee,0x852c,
-0x852d,0x8513,0x8511,0x8523,0x8521,0x8514,0x84ec,0x8525,
-0x84ff,0x8506,0x8782,0x8774,0x8776,0x8760,0x8766,0x8778,
-0x8768,0x8759,0x8757,0x874c,0x8753,0x885b,0x885d,0x8910,
-0x8907,0x8912,0x8913,0x8915,0x890a,0x8abc,0x8ad2,0x8ac7,
-0x8ac4,0x8a95,0x8acb,0x8af8,0x8ab2,0x8ac9,0x8ac2,0x8abf,
-0x8ab0,0x8ad6,0x8acd,0x8ab6,0x8ab9,0x8adb,0x8c4c,0x8c4e,
-0x8c6c,0x8ce0,0x8cde,0x8ce6,0x8ce4,0x8cec,0x8ced,0x8ce2,
-0x8ce3,0x8cdc,0x8cea,0x8ce1,0x8d6d,0x8d9f,0x8da3,0x8e2b,
-0x8e10,0x8e1d,0x8e22,0x8e0f,0x8e29,0x8e1f,0x8e21,0x8e1e,
-0x8eba,0x8f1d,0x8f1b,0x8f1f,0x8f29,0x8f26,0x8f2a,0x8f1c,
-0x8f1e,0x8f25,0x9069,0x906e,0x9068,0x906d,0x9077,0x9130,
-0x912d,0x9127,0x9131,0x9187,0x9189,0x918b,0x9183,0x92c5,
-0x92bb,0x92b7,0x92ea,0x92ac,0x92e4,0x92c1,0x92b3,0x92bc,
-0x92d2,0x92c7,0x92f0,0x92b2,0x95ad,0x95b1,0x9704,0x9706,
-0x9707,0x9709,0x9760,0x978d,0x978b,0x978f,0x9821,0x982b,
-0x981c,0x98b3,0x990a,0x9913,0x9912,0x9918,0x99dd,0x99d0,
-0x99df,0x99db,0x99d1,0x99d5,0x99d2,0x99d9,0x9ab7,0x9aee,
-0x9aef,0x9b27,0x9b45,0x9b44,0x9b77,0x9b6f,0x9d06,0x9d09,
-0x9d03,0x9ea9,0x9ebe,0x9ece,0x58a8,0x9f52,0x5112,0x5118,
-0x5114,0x5110,0x5115,0x5180,0x51aa,0x51dd,0x5291,0x5293,
-0x52f3,0x5659,0x566b,0x5679,0x5669,0x5664,0x5678,0x566a,
-0x5668,0x5665,0x5671,0x566f,0x566c,0x5662,0x5676,0x58c1,
-0x58be,0x58c7,0x58c5,0x596e,0x5b1d,0x5b34,0x5b78,0x5bf0,
-0x5c0e,0x5f4a,0x61b2,0x6191,0x61a9,0x618a,0x61cd,0x61b6,
-0x61be,0x61ca,0x61c8,0x6230,0x64c5,0x64c1,0x64cb,0x64bb,
-0x64bc,0x64da,0x64c4,0x64c7,0x64c2,0x64cd,0x64bf,0x64d2,
-0x64d4,0x64be,0x6574,0x66c6,0x66c9,0x66b9,0x66c4,0x66c7,
-0x66b8,0x6a3d,0x6a38,0x6a3a,0x6a59,0x6a6b,0x6a58,0x6a39,
-0x6a44,0x6a62,0x6a61,0x6a4b,0x6a47,0x6a35,0x6a5f,0x6a48,
-0x6b59,0x6b77,0x6c05,0x6fc2,0x6fb1,0x6fa1,0x6fc3,0x6fa4,
-0x6fc1,0x6fa7,0x6fb3,0x6fc0,0x6fb9,0x6fb6,0x6fa6,0x6fa0,
-0x6fb4,0x71be,0x71c9,0x71d0,0x71d2,0x71c8,0x71d5,0x71b9,
-0x71ce,0x71d9,0x71dc,0x71c3,0x71c4,0x7368,0x749c,0x74a3,
-0x7498,0x749f,0x749e,0x74e2,0x750c,0x750d,0x7634,0x7638,
-0x763a,0x76e7,0x76e5,0x77a0,0x779e,0x779f,0x77a5,0x78e8,
-0x78da,0x78ec,0x78e7,0x79a6,0x7a4d,0x7a4e,0x7a46,0x7a4c,
-0x7a4b,0x7aba,0x7bd9,0x7c11,0x7bc9,0x7be4,0x7bdb,0x7be1,
-0x7be9,0x7be6,0x7cd5,0x7cd6,0x7e0a,0x7e11,0x7e08,0x7e1b,
-0x7e23,0x7e1e,0x7e1d,0x7e09,0x7e10,0x7f79,0x7fb2,0x7ff0,
-0x7ff1,0x7fee,0x8028,0x81b3,0x81a9,0x81a8,0x81fb,0x8208,
-0x8258,0x8259,0x854a,0x8559,0x8548,0x8568,0x8569,0x8543,
-0x8549,0x856d,0x856a,0x855e,0x8783,0x879f,0x879e,0x87a2,
-0x878d,0x8861,0x892a,0x8932,0x8925,0x892b,0x8921,0x89aa,
-0x89a6,0x8ae6,0x8afa,0x8aeb,0x8af1,0x8b00,0x8adc,0x8ae7,
-0x8aee,0x8afe,0x8b01,0x8b02,0x8af7,0x8aed,0x8af3,0x8af6,
-0x8afc,0x8c6b,0x8c6d,0x8c93,0x8cf4,0x8e44,0x8e31,0x8e34,
-0x8e42,0x8e39,0x8e35,0x8f3b,0x8f2f,0x8f38,0x8f33,0x8fa8,
-0x8fa6,0x9075,0x9074,0x9078,0x9072,0x907c,0x907a,0x9134,
-0x9192,0x9320,0x9336,0x92f8,0x9333,0x932f,0x9322,0x92fc,
-0x932b,0x9304,0x931a,0x9310,0x9326,0x9321,0x9315,0x932e,
-0x9319,0x95bb,0x96a7,0x96a8,0x96aa,0x96d5,0x970e,0x9711,
-0x9716,0x970d,0x9713,0x970f,0x975b,0x975c,0x9766,0x9798,
-0x9830,0x9838,0x983b,0x9837,0x982d,0x9839,0x9824,0x9910,
-0x9928,0x991e,0x991b,0x9921,0x991a,0x99ed,0x99e2,0x99f1,
-0x9ab8,0x9abc,0x9afb,0x9aed,0x9b28,0x9b91,0x9d15,0x9d23,
-0x9d26,0x9d28,0x9d12,0x9d1b,0x9ed8,0x9ed4,0x9f8d,0x9f9c,
-0x512a,0x511f,0x5121,0x5132,0x52f5,0x568e,0x5680,0x5690,
-0x5685,0x5687,0x568f,0x58d5,0x58d3,0x58d1,0x58ce,0x5b30,
-0x5b2a,0x5b24,0x5b7a,0x5c37,0x5c68,0x5dbc,0x5dba,0x5dbd,
-0x5db8,0x5e6b,0x5f4c,0x5fbd,0x61c9,0x61c2,0x61c7,0x61e6,
-0x61cb,0x6232,0x6234,0x64ce,0x64ca,0x64d8,0x64e0,0x64f0,
-0x64e6,0x64ec,0x64f1,0x64e2,0x64ed,0x6582,0x6583,0x66d9,
-0x66d6,0x6a80,0x6a94,0x6a84,0x6aa2,0x6a9c,0x6adb,0x6aa3,
-0x6a7e,0x6a97,0x6a90,0x6aa0,0x6b5c,0x6bae,0x6bda,0x6c08,
-0x6fd8,0x6ff1,0x6fdf,0x6fe0,0x6fdb,0x6fe4,0x6feb,0x6fef,
-0x6f80,0x6fec,0x6fe1,0x6fe9,0x6fd5,0x6fee,0x6ff0,0x71e7,
-0x71df,0x71ee,0x71e6,0x71e5,0x71ed,0x71ec,0x71f4,0x71e0,
-0x7235,0x7246,0x7370,0x7372,0x74a9,0x74b0,0x74a6,0x74a8,
-0x7646,0x7642,0x764c,0x76ea,0x77b3,0x77aa,0x77b0,0x77ac,
-0x77a7,0x77ad,0x77ef,0x78f7,0x78fa,0x78f4,0x78ef,0x7901,
-0x79a7,0x79aa,0x7a57,0x7abf,0x7c07,0x7c0d,0x7bfe,0x7bf7,
-0x7c0c,0x7be0,0x7ce0,0x7cdc,0x7cde,0x7ce2,0x7cdf,0x7cd9,
-0x7cdd,0x7e2e,0x7e3e,0x7e46,0x7e37,0x7e32,0x7e43,0x7e2b,
-0x7e3d,0x7e31,0x7e45,0x7e41,0x7e34,0x7e39,0x7e48,0x7e35,
-0x7e3f,0x7e2f,0x7f44,0x7ff3,0x7ffc,0x8071,0x8072,0x8070,
-0x806f,0x8073,0x81c6,0x81c3,0x81ba,0x81c2,0x81c0,0x81bf,
-0x81bd,0x81c9,0x81be,0x81e8,0x8209,0x8271,0x85aa,0x8584,
-0x857e,0x859c,0x8591,0x8594,0x85af,0x859b,0x8587,0x85a8,
-0x858a,0x8667,0x87c0,0x87d1,0x87b3,0x87d2,0x87c6,0x87ab,
-0x87bb,0x87ba,0x87c8,0x87cb,0x893b,0x8936,0x8944,0x8938,
-0x893d,0x89ac,0x8b0e,0x8b17,0x8b19,0x8b1b,0x8b0a,0x8b20,
-0x8b1d,0x8b04,0x8b10,0x8c41,0x8c3f,0x8c73,0x8cfa,0x8cfd,
-0x8cfc,0x8cf8,0x8cfb,0x8da8,0x8e49,0x8e4b,0x8e48,0x8e4a,
-0x8f44,0x8f3e,0x8f42,0x8f45,0x8f3f,0x907f,0x907d,0x9084,
-0x9081,0x9082,0x9080,0x9139,0x91a3,0x919e,0x919c,0x934d,
-0x9382,0x9328,0x9375,0x934a,0x9365,0x934b,0x9318,0x937e,
-0x936c,0x935b,0x9370,0x935a,0x9354,0x95ca,0x95cb,0x95cc,
-0x95c8,0x95c6,0x96b1,0x96b8,0x96d6,0x971c,0x971e,0x97a0,
-0x97d3,0x9846,0x98b6,0x9935,0x9a01,0x99ff,0x9bae,0x9bab,
-0x9baa,0x9bad,0x9d3b,0x9d3f,0x9e8b,0x9ecf,0x9ede,0x9edc,
-0x9edd,0x9edb,0x9f3e,0x9f4b,0x53e2,0x5695,0x56ae,0x58d9,
-0x58d8,0x5b38,0x5f5d,0x61e3,0x6233,0x64f4,0x64f2,0x64fe,
-0x6506,0x64fa,0x64fb,0x64f7,0x65b7,0x66dc,0x6726,0x6ab3,
-0x6aac,0x6ac3,0x6abb,0x6ab8,0x6ac2,0x6aae,0x6aaf,0x6b5f,
-0x6b78,0x6baf,0x7009,0x700b,0x6ffe,0x7006,0x6ffa,0x7011,
-0x700f,0x71fb,0x71fc,0x71fe,0x71f8,0x7377,0x7375,0x74a7,
-0x74bf,0x7515,0x7656,0x7658,0x7652,0x77bd,0x77bf,0x77bb,
-0x77bc,0x790e,0x79ae,0x7a61,0x7a62,0x7a60,0x7ac4,0x7ac5,
-0x7c2b,0x7c27,0x7c2a,0x7c1e,0x7c23,0x7c21,0x7ce7,0x7e54,
-0x7e55,0x7e5e,0x7e5a,0x7e61,0x7e52,0x7e59,0x7f48,0x7ff9,
-0x7ffb,0x8077,0x8076,0x81cd,0x81cf,0x820a,0x85cf,0x85a9,
-0x85cd,0x85d0,0x85c9,0x85b0,0x85ba,0x85b9,0x85a6,0x87ef,
-0x87ec,0x87f2,0x87e0,0x8986,0x89b2,0x89f4,0x8b28,0x8b39,
-0x8b2c,0x8b2b,0x8c50,0x8d05,0x8e59,0x8e63,0x8e66,0x8e64,
-0x8e5f,0x8e55,0x8ec0,0x8f49,0x8f4d,0x9087,0x9083,0x9088,
-0x91ab,0x91ac,0x91d0,0x9394,0x938a,0x9396,0x93a2,0x93b3,
-0x93ae,0x93ac,0x93b0,0x9398,0x939a,0x9397,0x95d4,0x95d6,
-0x95d0,0x95d5,0x96e2,0x96dc,0x96d9,0x96db,0x96de,0x9724,
-0x97a3,0x97a6,0x97ad,0x97f9,0x984d,0x984f,0x984c,0x984e,
-0x9853,0x98ba,0x993e,0x993f,0x993d,0x992e,0x99a5,0x9a0e,
-0x9ac1,0x9b03,0x9b06,0x9b4f,0x9b4e,0x9b4d,0x9bca,0x9bc9,
-0x9bfd,0x9bc8,0x9bc0,0x9d51,0x9d5d,0x9d60,0x9ee0,0x9f15,
-0x9f2c,0x5133,0x56a5,0x58de,0x58df,0x58e2,0x5bf5,0x9f90,
-0x5eec,0x61f2,0x61f7,0x61f6,0x61f5,0x6500,0x650f,0x66e0,
-0x66dd,0x6ae5,0x6add,0x6ada,0x6ad3,0x701b,0x701f,0x7028,
-0x701a,0x701d,0x7015,0x7018,0x7206,0x720d,0x7258,0x72a2,
-0x7378,0x737a,0x74bd,0x74ca,0x74e3,0x7587,0x7586,0x765f,
-0x7661,0x77c7,0x7919,0x79b1,0x7a6b,0x7a69,0x7c3e,0x7c3f,
-0x7c38,0x7c3d,0x7c37,0x7c40,0x7e6b,0x7e6d,0x7e79,0x7e69,
-0x7e6a,0x7f85,0x7e73,0x7fb6,0x7fb9,0x7fb8,0x81d8,0x85e9,
-0x85dd,0x85ea,0x85d5,0x85e4,0x85e5,0x85f7,0x87fb,0x8805,
-0x880d,0x87f9,0x87fe,0x8960,0x895f,0x8956,0x895e,0x8b41,
-0x8b5c,0x8b58,0x8b49,0x8b5a,0x8b4e,0x8b4f,0x8b46,0x8b59,
-0x8d08,0x8d0a,0x8e7c,0x8e72,0x8e87,0x8e76,0x8e6c,0x8e7a,
-0x8e74,0x8f54,0x8f4e,0x8fad,0x908a,0x908b,0x91b1,0x91ae,
-0x93e1,0x93d1,0x93df,0x93c3,0x93c8,0x93dc,0x93dd,0x93d6,
-0x93e2,0x93cd,0x93d8,0x93e4,0x93d7,0x93e8,0x95dc,0x96b4,
-0x96e3,0x972a,0x9727,0x9761,0x97dc,0x97fb,0x985e,0x9858,
-0x985b,0x98bc,0x9945,0x9949,0x9a16,0x9a19,0x9b0d,0x9be8,
-0x9be7,0x9bd6,0x9bdb,0x9d89,0x9d61,0x9d72,0x9d6a,0x9d6c,
-0x9e92,0x9e97,0x9e93,0x9eb4,0x52f8,0x56a8,0x56b7,0x56b6,
-0x56b4,0x56bc,0x58e4,0x5b40,0x5b43,0x5b7d,0x5bf6,0x5dc9,
-0x61f8,0x61fa,0x6518,0x6514,0x6519,0x66e6,0x6727,0x6aec,
-0x703e,0x7030,0x7032,0x7210,0x737b,0x74cf,0x7662,0x7665,
-0x7926,0x792a,0x792c,0x792b,0x7ac7,0x7af6,0x7c4c,0x7c43,
-0x7c4d,0x7cef,0x7cf0,0x8fae,0x7e7d,0x7e7c,0x7e82,0x7f4c,
-0x8000,0x81da,0x8266,0x85fb,0x85f9,0x8611,0x85fa,0x8606,
-0x860b,0x8607,0x860a,0x8814,0x8815,0x8964,0x89ba,0x89f8,
-0x8b70,0x8b6c,0x8b66,0x8b6f,0x8b5f,0x8b6b,0x8d0f,0x8d0d,
-0x8e89,0x8e81,0x8e85,0x8e82,0x91b4,0x91cb,0x9418,0x9403,
-0x93fd,0x95e1,0x9730,0x98c4,0x9952,0x9951,0x99a8,0x9a2b,
-0x9a30,0x9a37,0x9a35,0x9c13,0x9c0d,0x9e79,0x9eb5,0x9ee8,
-0x9f2f,0x9f5f,0x9f63,0x9f61,0x5137,0x5138,0x56c1,0x56c0,
-0x56c2,0x5914,0x5c6c,0x5dcd,0x61fc,0x61fe,0x651d,0x651c,
-0x6595,0x66e9,0x6afb,0x6b04,0x6afa,0x6bb2,0x704c,0x721b,
-0x72a7,0x74d6,0x74d4,0x7669,0x77d3,0x7c50,0x7e8f,0x7e8c,
-0x7fbc,0x8617,0x862d,0x861a,0x8823,0x8822,0x8821,0x881f,
-0x896a,0x896c,0x89bd,0x8b74,0x8b77,0x8b7d,0x8d13,0x8e8a,
-0x8e8d,0x8e8b,0x8f5f,0x8faf,0x91ba,0x942e,0x9433,0x9435,
-0x943a,0x9438,0x9432,0x942b,0x95e2,0x9738,0x9739,0x9732,
-0x97ff,0x9867,0x9865,0x9957,0x9a45,0x9a43,0x9a40,0x9a3e,
-0x9acf,0x9b54,0x9b51,0x9c2d,0x9c25,0x9daf,0x9db4,0x9dc2,
-0x9db8,0x9e9d,0x9eef,0x9f19,0x9f5c,0x9f66,0x9f67,0x513c,
-0x513b,0x56c8,0x56ca,0x56c9,0x5b7f,0x5dd4,0x5dd2,0x5f4e,
-0x61ff,0x6524,0x6b0a,0x6b61,0x7051,0x7058,0x7380,0x74e4,
-0x758a,0x766e,0x766c,0x79b3,0x7c60,0x7c5f,0x807e,0x807d,
-0x81df,0x8972,0x896f,0x89fc,0x8b80,0x8d16,0x8d17,0x8e91,
-0x8e93,0x8f61,0x9148,0x9444,0x9451,0x9452,0x973d,0x973e,
-0x97c3,0x97c1,0x986b,0x9955,0x9a55,0x9a4d,0x9ad2,0x9b1a,
-0x9c49,0x9c31,0x9c3e,0x9c3b,0x9dd3,0x9dd7,0x9f34,0x9f6c,
-0x9f6a,0x9f94,0x56cc,0x5dd6,0x6200,0x6523,0x652b,0x652a,
-0x66ec,0x6b10,0x74da,0x7aca,0x7c64,0x7c63,0x7c65,0x7e93,
-0x7e96,0x7e94,0x81e2,0x8638,0x863f,0x8831,0x8b8a,0x9090,
-0x908f,0x9463,0x9460,0x9464,0x9768,0x986f,0x995c,0x9a5a,
-0x9a5b,0x9a57,0x9ad3,0x9ad4,0x9ad1,0x9c54,0x9c57,0x9c56,
-0x9de5,0x9e9f,0x9ef4,0x56d1,0x58e9,0x652c,0x705e,0x7671,
-0x7672,0x77d7,0x7f50,0x7f88,0x8836,0x8839,0x8862,0x8b93,
-0x8b92,0x8b96,0x8277,0x8d1b,0x91c0,0x946a,0x9742,0x9748,
-0x9744,0x97c6,0x9870,0x9a5f,0x9b22,0x9b58,0x9c5f,0x9df9,
-0x9dfa,0x9e7c,0x9e7d,0x9f07,0x9f77,0x9f72,0x5ef3,0x6b16,
-0x7063,0x7c6c,0x7c6e,0x883b,0x89c0,0x8ea1,0x91c1,0x9472,
-0x9470,0x9871,0x995e,0x9ad6,0x9b23,0x9ecc,0x7064,0x77da,
-0x8b9a,0x9477,0x97c9,0x9a62,0x9a65,0x7e9c,0x8b9c,0x8eaa,
-0x91c5,0x947d,0x947e,0x947c,0x9c77,0x9c78,0x9ef7,0x8c54,
-0x947f,0x9e1a,0x7228,0x9a6a,0x9b31,0x9e1b,0x9e1e,0x7c72,
-0xf6b1,0xf6b2,0xf6b3,0xf6b4,0xf6b5,0xf6b6,0xf6b7,0xf6b8,
-0xf6b9,0xf6ba,0xf6bb,0xf6bc,0xf6bd,0xf6be,0xf6bf,0xf6c0,
-0xf6c1,0xf6c2,0xf6c3,0xf6c4,0xf6c5,0xf6c6,0xf6c7,0xf6c8,
-0xf6c9,0xf6ca,0xf6cb,0xf6cc,0xf6cd,0xf6ce,0xf6cf,0xf6d0,
-0xf6d1,0xf6d2,0xf6d3,0xf6d4,0xf6d5,0xf6d6,0xf6d7,0xf6d8,
-0xf6d9,0xf6da,0xf6db,0xf6dc,0xf6dd,0xf6de,0xf6df,0xf6e0,
-0xf6e1,0xf6e2,0xf6e3,0xf6e4,0xf6e5,0xf6e6,0xf6e7,0xf6e8,
-0xf6e9,0xf6ea,0xf6eb,0xf6ec,0xf6ed,0xf6ee,0xf6ef,0xf6f0,
-0xf6f1,0xf6f2,0xf6f3,0xf6f4,0xf6f5,0xf6f6,0xf6f7,0xf6f8,
-0xf6f9,0xf6fa,0xf6fb,0xf6fc,0xf6fd,0xf6fe,0xf6ff,0xf700,
-0xf701,0xf702,0xf703,0xf704,0xf705,0xf706,0xf707,0xf708,
-0xf709,0xf70a,0xf70b,0xf70c,0xf70d,0xf70e,0xf70f,0xf710,
-0xf711,0xf712,0xf713,0xf714,0xf715,0xf716,0xf717,0xf718,
-0xf719,0xf71a,0xf71b,0xf71c,0xf71d,0xf71e,0xf71f,0xf720,
-0xf721,0xf722,0xf723,0xf724,0xf725,0xf726,0xf727,0xf728,
-0xf729,0xf72a,0xf72b,0xf72c,0xf72d,0xf72e,0xf72f,0xf730,
-0xf731,0xf732,0xf733,0xf734,0xf735,0xf736,0xf737,0xf738,
-0xf739,0xf73a,0xf73b,0xf73c,0xf73d,0xf73e,0xf73f,0xf740,
-0xf741,0xf742,0xf743,0xf744,0xf745,0xf746,0xf747,0xf748,
-0xf749,0xf74a,0xf74b,0xf74c,0xf74d,0xf74e,0xf74f,0xf750,
-0xf751,0xf752,0xf753,0xf754,0xf755,0xf756,0xf757,0xf758,
-0xf759,0xf75a,0xf75b,0xf75c,0xf75d,0xf75e,0xf75f,0xf760,
-0xf761,0xf762,0xf763,0xf764,0xf765,0xf766,0xf767,0xf768,
-0xf769,0xf76a,0xf76b,0xf76c,0xf76d,0xf76e,0xf76f,0xf770,
-0xf771,0xf772,0xf773,0xf774,0xf775,0xf776,0xf777,0xf778,
-0xf779,0xf77a,0xf77b,0xf77c,0xf77d,0xf77e,0xf77f,0xf780,
-0xf781,0xf782,0xf783,0xf784,0xf785,0xf786,0xf787,0xf788,
-0xf789,0xf78a,0xf78b,0xf78c,0xf78d,0xf78e,0xf78f,0xf790,
-0xf791,0xf792,0xf793,0xf794,0xf795,0xf796,0xf797,0xf798,
-0xf799,0xf79a,0xf79b,0xf79c,0xf79d,0xf79e,0xf79f,0xf7a0,
-0xf7a1,0xf7a2,0xf7a3,0xf7a4,0xf7a5,0xf7a6,0xf7a7,0xf7a8,
-0xf7a9,0xf7aa,0xf7ab,0xf7ac,0xf7ad,0xf7ae,0xf7af,0xf7b0,
-0xf7b1,0xf7b2,0xf7b3,0xf7b4,0xf7b5,0xf7b6,0xf7b7,0xf7b8,
-0xf7b9,0xf7ba,0xf7bb,0xf7bc,0xf7bd,0xf7be,0xf7bf,0xf7c0,
-0xf7c1,0xf7c2,0xf7c3,0xf7c4,0xf7c5,0xf7c6,0xf7c7,0xf7c8,
-0xf7c9,0xf7ca,0xf7cb,0xf7cc,0xf7cd,0xf7ce,0xf7cf,0xf7d0,
-0xf7d1,0xf7d2,0xf7d3,0xf7d4,0xf7d5,0xf7d6,0xf7d7,0xf7d8,
-0xf7d9,0xf7da,0xf7db,0xf7dc,0xf7dd,0xf7de,0xf7df,0xf7e0,
-0xf7e1,0xf7e2,0xf7e3,0xf7e4,0xf7e5,0xf7e6,0xf7e7,0xf7e8,
-0xf7e9,0xf7ea,0xf7eb,0xf7ec,0xf7ed,0xf7ee,0xf7ef,0xf7f0,
-0xf7f1,0xf7f2,0xf7f3,0xf7f4,0xf7f5,0xf7f6,0xf7f7,0xf7f8,
-0xf7f9,0xf7fa,0xf7fb,0xf7fc,0xf7fd,0xf7fe,0xf7ff,0xf800,
-0xf801,0xf802,0xf803,0xf804,0xf805,0xf806,0xf807,0xf808,
-0xf809,0xf80a,0xf80b,0xf80c,0xf80d,0xf80e,0xf80f,0xf810,
-0xf811,0xf812,0xf813,0xf814,0xf815,0xf816,0xf817,0xf818,
-0xf819,0xf81a,0xf81b,0xf81c,0xf81d,0xf81e,0xf81f,0xf820,
-0xf821,0xf822,0xf823,0xf824,0xf825,0xf826,0xf827,0xf828,
-0xf829,0xf82a,0xf82b,0xf82c,0xf82d,0xf82e,0xf82f,0xf830,
-0xf831,0xf832,0xf833,0xf834,0xf835,0xf836,0xf837,0xf838,
-0xf839,0xf83a,0xf83b,0xf83c,0xf83d,0xf83e,0xf83f,0xf840,
-0xf841,0xf842,0xf843,0xf844,0xf845,0xf846,0xf847,0xf848,
-0x4e42,0x4e5c,0x51f5,0x531a,0x5382,0x4e07,0x4e0c,0x4e47,
-0x4e8d,0x56d7,0xfa0c,0x5c6e,0x5f73,0x4e0f,0x5187,0x4e0e,
-0x4e2e,0x4e93,0x4ec2,0x4ec9,0x4ec8,0x5198,0x52fc,0x536c,
-0x53b9,0x5720,0x5903,0x592c,0x5c10,0x5dff,0x65e1,0x6bb3,
-0x6bcc,0x6c14,0x723f,0x4e31,0x4e3c,0x4ee8,0x4edc,0x4ee9,
-0x4ee1,0x4edd,0x4eda,0x520c,0x531c,0x534c,0x5722,0x5723,
-0x5917,0x592f,0x5b81,0x5b84,0x5c12,0x5c3b,0x5c74,0x5c73,
-0x5e04,0x5e80,0x5e82,0x5fc9,0x6209,0x6250,0x6c15,0x6c36,
-0x6c43,0x6c3f,0x6c3b,0x72ae,0x72b0,0x738a,0x79b8,0x808a,
-0x961e,0x4f0e,0x4f18,0x4f2c,0x4ef5,0x4f14,0x4ef1,0x4f00,
-0x4ef7,0x4f08,0x4f1d,0x4f02,0x4f05,0x4f22,0x4f13,0x4f04,
-0x4ef4,0x4f12,0x51b1,0x5213,0x5209,0x5210,0x52a6,0x5322,
-0x531f,0x534d,0x538a,0x5407,0x56e1,0x56df,0x572e,0x572a,
-0x5734,0x593c,0x5980,0x597c,0x5985,0x597b,0x597e,0x5977,
-0x597f,0x5b56,0x5c15,0x5c25,0x5c7c,0x5c7a,0x5c7b,0x5c7e,
-0x5ddf,0x5e75,0x5e84,0x5f02,0x5f1a,0x5f74,0x5fd5,0x5fd4,
-0x5fcf,0x625c,0x625e,0x6264,0x6261,0x6266,0x6262,0x6259,
-0x6260,0x625a,0x6265,0x65ef,0x65ee,0x673e,0x6739,0x6738,
-0x673b,0x673a,0x673f,0x673c,0x6733,0x6c18,0x6c46,0x6c52,
-0x6c5c,0x6c4f,0x6c4a,0x6c54,0x6c4b,0x6c4c,0x7071,0x725e,
-0x72b4,0x72b5,0x738e,0x752a,0x767f,0x7a75,0x7f51,0x8278,
-0x827c,0x8280,0x827d,0x827f,0x864d,0x897e,0x9099,0x9097,
-0x9098,0x909b,0x9094,0x9622,0x9624,0x9620,0x9623,0x4f56,
-0x4f3b,0x4f62,0x4f49,0x4f53,0x4f64,0x4f3e,0x4f67,0x4f52,
-0x4f5f,0x4f41,0x4f58,0x4f2d,0x4f33,0x4f3f,0x4f61,0x518f,
-0x51b9,0x521c,0x521e,0x5221,0x52ad,0x52ae,0x5309,0x5363,
-0x5372,0x538e,0x538f,0x5430,0x5437,0x542a,0x5454,0x5445,
-0x5419,0x541c,0x5425,0x5418,0x543d,0x544f,0x5441,0x5428,
-0x5424,0x5447,0x56ee,0x56e7,0x56e5,0x5741,0x5745,0x574c,
-0x5749,0x574b,0x5752,0x5906,0x5940,0x59a6,0x5998,0x59a0,
-0x5997,0x598e,0x59a2,0x5990,0x598f,0x59a7,0x59a1,0x5b8e,
-0x5b92,0x5c28,0x5c2a,0x5c8d,0x5c8f,0x5c88,0x5c8b,0x5c89,
-0x5c92,0x5c8a,0x5c86,0x5c93,0x5c95,0x5de0,0x5e0a,0x5e0e,
-0x5e8b,0x5e89,0x5e8c,0x5e88,0x5e8d,0x5f05,0x5f1d,0x5f78,
-0x5f76,0x5fd2,0x5fd1,0x5fd0,0x5fed,0x5fe8,0x5fee,0x5ff3,
-0x5fe1,0x5fe4,0x5fe3,0x5ffa,0x5fef,0x5ff7,0x5ffb,0x6000,
-0x5ff4,0x623a,0x6283,0x628c,0x628e,0x628f,0x6294,0x6287,
-0x6271,0x627b,0x627a,0x6270,0x6281,0x6288,0x6277,0x627d,
-0x6272,0x6274,0x6537,0x65f0,0x65f4,0x65f3,0x65f2,0x65f5,
-0x6745,0x6747,0x6759,0x6755,0x674c,0x6748,0x675d,0x674d,
-0x675a,0x674b,0x6bd0,0x6c19,0x6c1a,0x6c78,0x6c67,0x6c6b,
-0x6c84,0x6c8b,0x6c8f,0x6c71,0x6c6f,0x6c69,0x6c9a,0x6c6d,
-0x6c87,0x6c95,0x6c9c,0x6c66,0x6c73,0x6c65,0x6c7b,0x6c8e,
-0x7074,0x707a,0x7263,0x72bf,0x72bd,0x72c3,0x72c6,0x72c1,
-0x72ba,0x72c5,0x7395,0x7397,0x7393,0x7394,0x7392,0x753a,
-0x7539,0x7594,0x7595,0x7681,0x793d,0x8034,0x8095,0x8099,
-0x8090,0x8092,0x809c,0x8290,0x828f,0x8285,0x828e,0x8291,
-0x8293,0x828a,0x8283,0x8284,0x8c78,0x8fc9,0x8fbf,0x909f,
-0x90a1,0x90a5,0x909e,0x90a7,0x90a0,0x9630,0x9628,0x962f,
-0x962d,0x4e33,0x4f98,0x4f7c,0x4f85,0x4f7d,0x4f80,0x4f87,
-0x4f76,0x4f74,0x4f89,0x4f84,0x4f77,0x4f4c,0x4f97,0x4f6a,
-0x4f9a,0x4f79,0x4f81,0x4f78,0x4f90,0x4f9c,0x4f94,0x4f9e,
-0x4f92,0x4f82,0x4f95,0x4f6b,0x4f6e,0x519e,0x51bc,0x51be,
-0x5235,0x5232,0x5233,0x5246,0x5231,0x52bc,0x530a,0x530b,
-0x533c,0x5392,0x5394,0x5487,0x547f,0x5481,0x5491,0x5482,
-0x5488,0x546b,0x547a,0x547e,0x5465,0x546c,0x5474,0x5466,
-0x548d,0x546f,0x5461,0x5460,0x5498,0x5463,0x5467,0x5464,
-0x56f7,0x56f9,0x576f,0x5772,0x576d,0x576b,0x5771,0x5770,
-0x5776,0x5780,0x5775,0x577b,0x5773,0x5774,0x5762,0x5768,
-0x577d,0x590c,0x5945,0x59b5,0x59ba,0x59cf,0x59ce,0x59b2,
-0x59cc,0x59c1,0x59b6,0x59bc,0x59c3,0x59d6,0x59b1,0x59bd,
-0x59c0,0x59c8,0x59b4,0x59c7,0x5b62,0x5b65,0x5b93,0x5b95,
-0x5c44,0x5c47,0x5cae,0x5ca4,0x5ca0,0x5cb5,0x5caf,0x5ca8,
-0x5cac,0x5c9f,0x5ca3,0x5cad,0x5ca2,0x5caa,0x5ca7,0x5c9d,
-0x5ca5,0x5cb6,0x5cb0,0x5ca6,0x5e17,0x5e14,0x5e19,0x5f28,
-0x5f22,0x5f23,0x5f24,0x5f54,0x5f82,0x5f7e,0x5f7d,0x5fde,
-0x5fe5,0x602d,0x6026,0x6019,0x6032,0x600b,0x6034,0x600a,
-0x6017,0x6033,0x601a,0x601e,0x602c,0x6022,0x600d,0x6010,
-0x602e,0x6013,0x6011,0x600c,0x6009,0x601c,0x6214,0x623d,
-0x62ad,0x62b4,0x62d1,0x62be,0x62aa,0x62b6,0x62ca,0x62ae,
-0x62b3,0x62af,0x62bb,0x62a9,0x62b0,0x62b8,0x653d,0x65a8,
-0x65bb,0x6609,0x65fc,0x6604,0x6612,0x6608,0x65fb,0x6603,
-0x660b,0x660d,0x6605,0x65fd,0x6611,0x6610,0x66f6,0x670a,
-0x6785,0x676c,0x678e,0x6792,0x6776,0x677b,0x6798,0x6786,
-0x6784,0x6774,0x678d,0x678c,0x677a,0x679f,0x6791,0x6799,
-0x6783,0x677d,0x6781,0x6778,0x6779,0x6794,0x6b25,0x6b80,
-0x6b7e,0x6bde,0x6c1d,0x6c93,0x6cec,0x6ceb,0x6cee,0x6cd9,
-0x6cb6,0x6cd4,0x6cad,0x6ce7,0x6cb7,0x6cd0,0x6cc2,0x6cba,
-0x6cc3,0x6cc6,0x6ced,0x6cf2,0x6cd2,0x6cdd,0x6cb4,0x6c8a,
-0x6c9d,0x6c80,0x6cde,0x6cc0,0x6d30,0x6ccd,0x6cc7,0x6cb0,
-0x6cf9,0x6ccf,0x6ce9,0x6cd1,0x7094,0x7098,0x7085,0x7093,
-0x7086,0x7084,0x7091,0x7096,0x7082,0x709a,0x7083,0x726a,
-0x72d6,0x72cb,0x72d8,0x72c9,0x72dc,0x72d2,0x72d4,0x72da,
-0x72cc,0x72d1,0x73a4,0x73a1,0x73ad,0x73a6,0x73a2,0x73a0,
-0x73ac,0x739d,0x74dd,0x74e8,0x753f,0x7540,0x753e,0x758c,
-0x7598,0x76af,0x76f3,0x76f1,0x76f0,0x76f5,0x77f8,0x77fc,
-0x77f9,0x77fb,0x77fa,0x77f7,0x7942,0x793f,0x79c5,0x7a78,
-0x7a7b,0x7afb,0x7c75,0x7cfd,0x8035,0x808f,0x80ae,0x80a3,
-0x80b8,0x80b5,0x80ad,0x8220,0x82a0,0x82c0,0x82ab,0x829a,
-0x8298,0x829b,0x82b5,0x82a7,0x82ae,0x82bc,0x829e,0x82ba,
-0x82b4,0x82a8,0x82a1,0x82a9,0x82c2,0x82a4,0x82c3,0x82b6,
-0x82a2,0x8670,0x866f,0x866d,0x866e,0x8c56,0x8fd2,0x8fcb,
-0x8fd3,0x8fcd,0x8fd6,0x8fd5,0x8fd7,0x90b2,0x90b4,0x90af,
-0x90b3,0x90b0,0x9639,0x963d,0x963c,0x963a,0x9643,0x4fcd,
-0x4fc5,0x4fd3,0x4fb2,0x4fc9,0x4fcb,0x4fc1,0x4fd4,0x4fdc,
-0x4fd9,0x4fbb,0x4fb3,0x4fdb,0x4fc7,0x4fd6,0x4fba,0x4fc0,
-0x4fb9,0x4fec,0x5244,0x5249,0x52c0,0x52c2,0x533d,0x537c,
-0x5397,0x5396,0x5399,0x5398,0x54ba,0x54a1,0x54ad,0x54a5,
-0x54cf,0x54c3,0x830d,0x54b7,0x54ae,0x54d6,0x54b6,0x54c5,
-0x54c6,0x54a0,0x5470,0x54bc,0x54a2,0x54be,0x5472,0x54de,
-0x54b0,0x57b5,0x579e,0x579f,0x57a4,0x578c,0x5797,0x579d,
-0x579b,0x5794,0x5798,0x578f,0x5799,0x57a5,0x579a,0x5795,
-0x58f4,0x590d,0x5953,0x59e1,0x59de,0x59ee,0x5a00,0x59f1,
-0x59dd,0x59fa,0x59fd,0x59fc,0x59f6,0x59e4,0x59f2,0x59f7,
-0x59db,0x59e9,0x59f3,0x59f5,0x59e0,0x59fe,0x59f4,0x59ed,
-0x5ba8,0x5c4c,0x5cd0,0x5cd8,0x5ccc,0x5cd7,0x5ccb,0x5cdb,
-0x5cde,0x5cda,0x5cc9,0x5cc7,0x5cca,0x5cd6,0x5cd3,0x5cd4,
-0x5ccf,0x5cc8,0x5cc6,0x5cce,0x5cdf,0x5cf8,0x5df9,0x5e21,
-0x5e22,0x5e23,0x5e20,0x5e24,0x5eb0,0x5ea4,0x5ea2,0x5e9b,
-0x5ea3,0x5ea5,0x5f07,0x5f2e,0x5f56,0x5f86,0x6037,0x6039,
-0x6054,0x6072,0x605e,0x6045,0x6053,0x6047,0x6049,0x605b,
-0x604c,0x6040,0x6042,0x605f,0x6024,0x6044,0x6058,0x6066,
-0x606e,0x6242,0x6243,0x62cf,0x630d,0x630b,0x62f5,0x630e,
-0x6303,0x62eb,0x62f9,0x630f,0x630c,0x62f8,0x62f6,0x6300,
-0x6313,0x6314,0x62fa,0x6315,0x62fb,0x62f0,0x6541,0x6543,
-0x65aa,0x65bf,0x6636,0x6621,0x6632,0x6635,0x661c,0x6626,
-0x6622,0x6633,0x662b,0x663a,0x661d,0x6634,0x6639,0x662e,
-0x670f,0x6710,0x67c1,0x67f2,0x67c8,0x67ba,0x67dc,0x67bb,
-0x67f8,0x67d8,0x67c0,0x67b7,0x67c5,0x67eb,0x67e4,0x67df,
-0x67b5,0x67cd,0x67b3,0x67f7,0x67f6,0x67ee,0x67e3,0x67c2,
-0x67b9,0x67ce,0x67e7,0x67f0,0x67b2,0x67fc,0x67c6,0x67ed,
-0x67cc,0x67ae,0x67e6,0x67db,0x67fa,0x67c9,0x67ca,0x67c3,
-0x67ea,0x67cb,0x6b28,0x6b82,0x6b84,0x6bb6,0x6bd6,0x6bd8,
-0x6be0,0x6c20,0x6c21,0x6d28,0x6d34,0x6d2d,0x6d1f,0x6d3c,
-0x6d3f,0x6d12,0x6d0a,0x6cda,0x6d33,0x6d04,0x6d19,0x6d3a,
-0x6d1a,0x6d11,0x6d00,0x6d1d,0x6d42,0x6d01,0x6d18,0x6d37,
-0x6d03,0x6d0f,0x6d40,0x6d07,0x6d20,0x6d2c,0x6d08,0x6d22,
-0x6d09,0x6d10,0x70b7,0x709f,0x70be,0x70b1,0x70b0,0x70a1,
-0x70b4,0x70b5,0x70a9,0x7241,0x7249,0x724a,0x726c,0x7270,
-0x7273,0x726e,0x72ca,0x72e4,0x72e8,0x72eb,0x72df,0x72ea,
-0x72e6,0x72e3,0x7385,0x73cc,0x73c2,0x73c8,0x73c5,0x73b9,
-0x73b6,0x73b5,0x73b4,0x73eb,0x73bf,0x73c7,0x73be,0x73c3,
-0x73c6,0x73b8,0x73cb,0x74ec,0x74ee,0x752e,0x7547,0x7548,
-0x75a7,0x75aa,0x7679,0x76c4,0x7708,0x7703,0x7704,0x7705,
-0x770a,0x76f7,0x76fb,0x76fa,0x77e7,0x77e8,0x7806,0x7811,
-0x7812,0x7805,0x7810,0x780f,0x780e,0x7809,0x7803,0x7813,
-0x794a,0x794c,0x794b,0x7945,0x7944,0x79d5,0x79cd,0x79cf,
-0x79d6,0x79ce,0x7a80,0x7a7e,0x7ad1,0x7b00,0x7b01,0x7c7a,
-0x7c78,0x7c79,0x7c7f,0x7c80,0x7c81,0x7d03,0x7d08,0x7d01,
-0x7f58,0x7f91,0x7f8d,0x7fbe,0x8007,0x800e,0x800f,0x8014,
-0x8037,0x80d8,0x80c7,0x80e0,0x80d1,0x80c8,0x80c2,0x80d0,
-0x80c5,0x80e3,0x80d9,0x80dc,0x80ca,0x80d5,0x80c9,0x80cf,
-0x80d7,0x80e6,0x80cd,0x81ff,0x8221,0x8294,0x82d9,0x82fe,
-0x82f9,0x8307,0x82e8,0x8300,0x82d5,0x833a,0x82eb,0x82d6,
-0x82f4,0x82ec,0x82e1,0x82f2,0x82f5,0x830c,0x82fb,0x82f6,
-0x82f0,0x82ea,0x82e4,0x82e0,0x82fa,0x82f3,0x82ed,0x8677,
-0x8674,0x867c,0x8673,0x8841,0x884e,0x8867,0x886a,0x8869,
-0x89d3,0x8a04,0x8a07,0x8d72,0x8fe3,0x8fe1,0x8fee,0x8fe0,
-0x90f1,0x90bd,0x90bf,0x90d5,0x90c5,0x90be,0x90c7,0x90cb,
-0x90c8,0x91d4,0x91d3,0x9654,0x964f,0x9651,0x9653,0x964a,
-0x964e,0x501e,0x5005,0x5007,0x5013,0x5022,0x5030,0x501b,
-0x4ff5,0x4ff4,0x5033,0x5037,0x502c,0x4ff6,0x4ff7,0x5017,
-0x501c,0x5020,0x5027,0x5035,0x502f,0x5031,0x500e,0x515a,
-0x5194,0x5193,0x51ca,0x51c4,0x51c5,0x51c8,0x51ce,0x5261,
-0x525a,0x5252,0x525e,0x525f,0x5255,0x5262,0x52cd,0x530e,
-0x539e,0x5526,0x54e2,0x5517,0x5512,0x54e7,0x54f3,0x54e4,
-0x551a,0x54ff,0x5504,0x5508,0x54eb,0x5511,0x5505,0x54f1,
-0x550a,0x54fb,0x54f7,0x54f8,0x54e0,0x550e,0x5503,0x550b,
-0x5701,0x5702,0x57cc,0x5832,0x57d5,0x57d2,0x57ba,0x57c6,
-0x57bd,0x57bc,0x57b8,0x57b6,0x57bf,0x57c7,0x57d0,0x57b9,
-0x57c1,0x590e,0x594a,0x5a19,0x5a16,0x5a2d,0x5a2e,0x5a15,
-0x5a0f,0x5a17,0x5a0a,0x5a1e,0x5a33,0x5b6c,0x5ba7,0x5bad,
-0x5bac,0x5c03,0x5c56,0x5c54,0x5cec,0x5cff,0x5cee,0x5cf1,
-0x5cf7,0x5d00,0x5cf9,0x5e29,0x5e28,0x5ea8,0x5eae,0x5eaa,
-0x5eac,0x5f33,0x5f30,0x5f67,0x605d,0x605a,0x6067,0x6041,
-0x60a2,0x6088,0x6080,0x6092,0x6081,0x609d,0x6083,0x6095,
-0x609b,0x6097,0x6087,0x609c,0x608e,0x6219,0x6246,0x62f2,
-0x6310,0x6356,0x632c,0x6344,0x6345,0x6336,0x6343,0x63e4,
-0x6339,0x634b,0x634a,0x633c,0x6329,0x6341,0x6334,0x6358,
-0x6354,0x6359,0x632d,0x6347,0x6333,0x635a,0x6351,0x6338,
-0x6357,0x6340,0x6348,0x654a,0x6546,0x65c6,0x65c3,0x65c4,
-0x65c2,0x664a,0x665f,0x6647,0x6651,0x6712,0x6713,0x681f,
-0x681a,0x6849,0x6832,0x6833,0x683b,0x684b,0x684f,0x6816,
-0x6831,0x681c,0x6835,0x682b,0x682d,0x682f,0x684e,0x6844,
-0x6834,0x681d,0x6812,0x6814,0x6826,0x6828,0x682e,0x684d,
-0x683a,0x6825,0x6820,0x6b2c,0x6b2f,0x6b2d,0x6b31,0x6b34,
-0x6b6d,0x8082,0x6b88,0x6be6,0x6be4,0x6be8,0x6be3,0x6be2,
-0x6be7,0x6c25,0x6d7a,0x6d63,0x6d64,0x6d76,0x6d0d,0x6d61,
-0x6d92,0x6d58,0x6d62,0x6d6d,0x6d6f,0x6d91,0x6d8d,0x6def,
-0x6d7f,0x6d86,0x6d5e,0x6d67,0x6d60,0x6d97,0x6d70,0x6d7c,
-0x6d5f,0x6d82,0x6d98,0x6d2f,0x6d68,0x6d8b,0x6d7e,0x6d80,
-0x6d84,0x6d16,0x6d83,0x6d7b,0x6d7d,0x6d75,0x6d90,0x70dc,
-0x70d3,0x70d1,0x70dd,0x70cb,0x7f39,0x70e2,0x70d7,0x70d2,
-0x70de,0x70e0,0x70d4,0x70cd,0x70c5,0x70c6,0x70c7,0x70da,
-0x70ce,0x70e1,0x7242,0x7278,0x7277,0x7276,0x7300,0x72fa,
-0x72f4,0x72fe,0x72f6,0x72f3,0x72fb,0x7301,0x73d3,0x73d9,
-0x73e5,0x73d6,0x73bc,0x73e7,0x73e3,0x73e9,0x73dc,0x73d2,
-0x73db,0x73d4,0x73dd,0x73da,0x73d7,0x73d8,0x73e8,0x74de,
-0x74df,0x74f4,0x74f5,0x7521,0x755b,0x755f,0x75b0,0x75c1,
-0x75bb,0x75c4,0x75c0,0x75bf,0x75b6,0x75ba,0x768a,0x76c9,
-0x771d,0x771b,0x7710,0x7713,0x7712,0x7723,0x7711,0x7715,
-0x7719,0x771a,0x7722,0x7727,0x7823,0x782c,0x7822,0x7835,
-0x782f,0x7828,0x782e,0x782b,0x7821,0x7829,0x7833,0x782a,
-0x7831,0x7954,0x795b,0x794f,0x795c,0x7953,0x7952,0x7951,
-0x79eb,0x79ec,0x79e0,0x79ee,0x79ed,0x79ea,0x79dc,0x79de,
-0x79dd,0x7a86,0x7a89,0x7a85,0x7a8b,0x7a8c,0x7a8a,0x7a87,
-0x7ad8,0x7b10,0x7b04,0x7b13,0x7b05,0x7b0f,0x7b08,0x7b0a,
-0x7b0e,0x7b09,0x7b12,0x7c84,0x7c91,0x7c8a,0x7c8c,0x7c88,
-0x7c8d,0x7c85,0x7d1e,0x7d1d,0x7d11,0x7d0e,0x7d18,0x7d16,
-0x7d13,0x7d1f,0x7d12,0x7d0f,0x7d0c,0x7f5c,0x7f61,0x7f5e,
-0x7f60,0x7f5d,0x7f5b,0x7f96,0x7f92,0x7fc3,0x7fc2,0x7fc0,
-0x8016,0x803e,0x8039,0x80fa,0x80f2,0x80f9,0x80f5,0x8101,
-0x80fb,0x8100,0x8201,0x822f,0x8225,0x8333,0x832d,0x8344,
-0x8319,0x8351,0x8325,0x8356,0x833f,0x8341,0x8326,0x831c,
-0x8322,0x8342,0x834e,0x831b,0x832a,0x8308,0x833c,0x834d,
-0x8316,0x8324,0x8320,0x8337,0x832f,0x8329,0x8347,0x8345,
-0x834c,0x8353,0x831e,0x832c,0x834b,0x8327,0x8348,0x8653,
-0x8652,0x86a2,0x86a8,0x8696,0x868d,0x8691,0x869e,0x8687,
-0x8697,0x8686,0x868b,0x869a,0x8685,0x86a5,0x8699,0x86a1,
-0x86a7,0x8695,0x8698,0x868e,0x869d,0x8690,0x8694,0x8843,
-0x8844,0x886d,0x8875,0x8876,0x8872,0x8880,0x8871,0x887f,
-0x886f,0x8883,0x887e,0x8874,0x887c,0x8a12,0x8c47,0x8c57,
-0x8c7b,0x8ca4,0x8ca3,0x8d76,0x8d78,0x8db5,0x8db7,0x8db6,
-0x8ed1,0x8ed3,0x8ffe,0x8ff5,0x9002,0x8fff,0x8ffb,0x9004,
-0x8ffc,0x8ff6,0x90d6,0x90e0,0x90d9,0x90da,0x90e3,0x90df,
-0x90e5,0x90d8,0x90db,0x90d7,0x90dc,0x90e4,0x9150,0x914e,
-0x914f,0x91d5,0x91e2,0x91da,0x965c,0x965f,0x96bc,0x98e3,
-0x9adf,0x9b2f,0x4e7f,0x5070,0x506a,0x5061,0x505e,0x5060,
-0x5053,0x504b,0x505d,0x5072,0x5048,0x504d,0x5041,0x505b,
-0x504a,0x5062,0x5015,0x5045,0x505f,0x5069,0x506b,0x5063,
-0x5064,0x5046,0x5040,0x506e,0x5073,0x5057,0x5051,0x51d0,
-0x526b,0x526d,0x526c,0x526e,0x52d6,0x52d3,0x532d,0x539c,
-0x5575,0x5576,0x553c,0x554d,0x5550,0x5534,0x552a,0x5551,
-0x5562,0x5536,0x5535,0x5530,0x5552,0x5545,0x550c,0x5532,
-0x5565,0x554e,0x5539,0x5548,0x552d,0x553b,0x5540,0x554b,
-0x570a,0x5707,0x57fb,0x5814,0x57e2,0x57f6,0x57dc,0x57f4,
-0x5800,0x57ed,0x57fd,0x5808,0x57f8,0x580b,0x57f3,0x57cf,
-0x5807,0x57ee,0x57e3,0x57f2,0x57e5,0x57ec,0x57e1,0x580e,
-0x57fc,0x5810,0x57e7,0x5801,0x580c,0x57f1,0x57e9,0x57f0,
-0x580d,0x5804,0x595c,0x5a60,0x5a58,0x5a55,0x5a67,0x5a5e,
-0x5a38,0x5a35,0x5a6d,0x5a50,0x5a5f,0x5a65,0x5a6c,0x5a53,
-0x5a64,0x5a57,0x5a43,0x5a5d,0x5a52,0x5a44,0x5a5b,0x5a48,
-0x5a8e,0x5a3e,0x5a4d,0x5a39,0x5a4c,0x5a70,0x5a69,0x5a47,
-0x5a51,0x5a56,0x5a42,0x5a5c,0x5b72,0x5b6e,0x5bc1,0x5bc0,
-0x5c59,0x5d1e,0x5d0b,0x5d1d,0x5d1a,0x5d20,0x5d0c,0x5d28,
-0x5d0d,0x5d26,0x5d25,0x5d0f,0x5d30,0x5d12,0x5d23,0x5d1f,
-0x5d2e,0x5e3e,0x5e34,0x5eb1,0x5eb4,0x5eb9,0x5eb2,0x5eb3,
-0x5f36,0x5f38,0x5f9b,0x5f96,0x5f9f,0x608a,0x6090,0x6086,
-0x60be,0x60b0,0x60ba,0x60d3,0x60d4,0x60cf,0x60e4,0x60d9,
-0x60dd,0x60c8,0x60b1,0x60db,0x60b7,0x60ca,0x60bf,0x60c3,
-0x60cd,0x60c0,0x6332,0x6365,0x638a,0x6382,0x637d,0x63bd,
-0x639e,0x63ad,0x639d,0x6397,0x63ab,0x638e,0x636f,0x6387,
-0x6390,0x636e,0x63af,0x6375,0x639c,0x636d,0x63ae,0x637c,
-0x63a4,0x633b,0x639f,0x6378,0x6385,0x6381,0x6391,0x638d,
-0x6370,0x6553,0x65cd,0x6665,0x6661,0x665b,0x6659,0x665c,
-0x6662,0x6718,0x6879,0x6887,0x6890,0x689c,0x686d,0x686e,
-0x68ae,0x68ab,0x6956,0x686f,0x68a3,0x68ac,0x68a9,0x6875,
-0x6874,0x68b2,0x688f,0x6877,0x6892,0x687c,0x686b,0x6872,
-0x68aa,0x6880,0x6871,0x687e,0x689b,0x6896,0x688b,0x68a0,
-0x6889,0x68a4,0x6878,0x687b,0x6891,0x688c,0x688a,0x687d,
-0x6b36,0x6b33,0x6b37,0x6b38,0x6b91,0x6b8f,0x6b8d,0x6b8e,
-0x6b8c,0x6c2a,0x6dc0,0x6dab,0x6db4,0x6db3,0x6e74,0x6dac,
-0x6de9,0x6de2,0x6db7,0x6df6,0x6dd4,0x6e00,0x6dc8,0x6de0,
-0x6ddf,0x6dd6,0x6dbe,0x6de5,0x6ddc,0x6ddd,0x6ddb,0x6df4,
-0x6dca,0x6dbd,0x6ded,0x6df0,0x6dba,0x6dd5,0x6dc2,0x6dcf,
-0x6dc9,0x6dd0,0x6df2,0x6dd3,0x6dfd,0x6dd7,0x6dcd,0x6de3,
-0x6dbb,0x70fa,0x710d,0x70f7,0x7117,0x70f4,0x710c,0x70f0,
-0x7104,0x70f3,0x7110,0x70fc,0x70ff,0x7106,0x7113,0x7100,
-0x70f8,0x70f6,0x710b,0x7102,0x710e,0x727e,0x727b,0x727c,
-0x727f,0x731d,0x7317,0x7307,0x7311,0x7318,0x730a,0x7308,
-0x72ff,0x730f,0x731e,0x7388,0x73f6,0x73f8,0x73f5,0x7404,
-0x7401,0x73fd,0x7407,0x7400,0x73fa,0x73fc,0x73ff,0x740c,
-0x740b,0x73f4,0x7408,0x7564,0x7563,0x75ce,0x75d2,0x75cf,
-0x75cb,0x75cc,0x75d1,0x75d0,0x768f,0x7689,0x76d3,0x7739,
-0x772f,0x772d,0x7731,0x7732,0x7734,0x7733,0x773d,0x7725,
-0x773b,0x7735,0x7848,0x7852,0x7849,0x784d,0x784a,0x784c,
-0x7826,0x7845,0x7850,0x7964,0x7967,0x7969,0x796a,0x7963,
-0x796b,0x7961,0x79bb,0x79fa,0x79f8,0x79f6,0x79f7,0x7a8f,
-0x7a94,0x7a90,0x7b35,0x7b47,0x7b34,0x7b25,0x7b30,0x7b22,
-0x7b24,0x7b33,0x7b18,0x7b2a,0x7b1d,0x7b31,0x7b2b,0x7b2d,
-0x7b2f,0x7b32,0x7b38,0x7b1a,0x7b23,0x7c94,0x7c98,0x7c96,
-0x7ca3,0x7d35,0x7d3d,0x7d38,0x7d36,0x7d3a,0x7d45,0x7d2c,
-0x7d29,0x7d41,0x7d47,0x7d3e,0x7d3f,0x7d4a,0x7d3b,0x7d28,
-0x7f63,0x7f95,0x7f9c,0x7f9d,0x7f9b,0x7fca,0x7fcb,0x7fcd,
-0x7fd0,0x7fd1,0x7fc7,0x7fcf,0x7fc9,0x801f,0x801e,0x801b,
-0x8047,0x8043,0x8048,0x8118,0x8125,0x8119,0x811b,0x812d,
-0x811f,0x812c,0x811e,0x8121,0x8115,0x8127,0x811d,0x8122,
-0x8211,0x8238,0x8233,0x823a,0x8234,0x8232,0x8274,0x8390,
-0x83a3,0x83a8,0x838d,0x837a,0x8373,0x83a4,0x8374,0x838f,
-0x8381,0x8395,0x8399,0x8375,0x8394,0x83a9,0x837d,0x8383,
-0x838c,0x839d,0x839b,0x83aa,0x838b,0x837e,0x83a5,0x83af,
-0x8388,0x8397,0x83b0,0x837f,0x83a6,0x8387,0x83ae,0x8376,
-0x839a,0x8659,0x8656,0x86bf,0x86b7,0x86c2,0x86c1,0x86c5,
-0x86ba,0x86b0,0x86c8,0x86b9,0x86b3,0x86b8,0x86cc,0x86b4,
-0x86bb,0x86bc,0x86c3,0x86bd,0x86be,0x8852,0x8889,0x8895,
-0x88a8,0x88a2,0x88aa,0x889a,0x8891,0x88a1,0x889f,0x8898,
-0x88a7,0x8899,0x889b,0x8897,0x88a4,0x88ac,0x888c,0x8893,
-0x888e,0x8982,0x89d6,0x89d9,0x89d5,0x8a30,0x8a27,0x8a2c,
-0x8a1e,0x8c39,0x8c3b,0x8c5c,0x8c5d,0x8c7d,0x8ca5,0x8d7d,
-0x8d7b,0x8d79,0x8dbc,0x8dc2,0x8db9,0x8dbf,0x8dc1,0x8ed8,
-0x8ede,0x8edd,0x8edc,0x8ed7,0x8ee0,0x8ee1,0x9024,0x900b,
-0x9011,0x901c,0x900c,0x9021,0x90ef,0x90ea,0x90f0,0x90f4,
-0x90f2,0x90f3,0x90d4,0x90eb,0x90ec,0x90e9,0x9156,0x9158,
-0x915a,0x9153,0x9155,0x91ec,0x91f4,0x91f1,0x91f3,0x91f8,
-0x91e4,0x91f9,0x91ea,0x91eb,0x91f7,0x91e8,0x91ee,0x957a,
-0x9586,0x9588,0x967c,0x966d,0x966b,0x9671,0x966f,0x96bf,
-0x976a,0x9804,0x98e5,0x9997,0x509b,0x5095,0x5094,0x509e,
-0x508b,0x50a3,0x5083,0x508c,0x508e,0x509d,0x5068,0x509c,
-0x5092,0x5082,0x5087,0x515f,0x51d4,0x5312,0x5311,0x53a4,
-0x53a7,0x5591,0x55a8,0x55a5,0x55ad,0x5577,0x5645,0x55a2,
-0x5593,0x5588,0x558f,0x55b5,0x5581,0x55a3,0x5592,0x55a4,
-0x557d,0x558c,0x55a6,0x557f,0x5595,0x55a1,0x558e,0x570c,
-0x5829,0x5837,0x5819,0x581e,0x5827,0x5823,0x5828,0x57f5,
-0x5848,0x5825,0x581c,0x581b,0x5833,0x583f,0x5836,0x582e,
-0x5839,0x5838,0x582d,0x582c,0x583b,0x5961,0x5aaf,0x5a94,
-0x5a9f,0x5a7a,0x5aa2,0x5a9e,0x5a78,0x5aa6,0x5a7c,0x5aa5,
-0x5aac,0x5a95,0x5aae,0x5a37,0x5a84,0x5a8a,0x5a97,0x5a83,
-0x5a8b,0x5aa9,0x5a7b,0x5a7d,0x5a8c,0x5a9c,0x5a8f,0x5a93,
-0x5a9d,0x5bea,0x5bcd,0x5bcb,0x5bd4,0x5bd1,0x5bca,0x5bce,
-0x5c0c,0x5c30,0x5d37,0x5d43,0x5d6b,0x5d41,0x5d4b,0x5d3f,
-0x5d35,0x5d51,0x5d4e,0x5d55,0x5d33,0x5d3a,0x5d52,0x5d3d,
-0x5d31,0x5d59,0x5d42,0x5d39,0x5d49,0x5d38,0x5d3c,0x5d32,
-0x5d36,0x5d40,0x5d45,0x5e44,0x5e41,0x5f58,0x5fa6,0x5fa5,
-0x5fab,0x60c9,0x60b9,0x60cc,0x60e2,0x60ce,0x60c4,0x6114,
-0x60f2,0x610a,0x6116,0x6105,0x60f5,0x6113,0x60f8,0x60fc,
-0x60fe,0x60c1,0x6103,0x6118,0x611d,0x6110,0x60ff,0x6104,
-0x610b,0x624a,0x6394,0x63b1,0x63b0,0x63ce,0x63e5,0x63e8,
-0x63ef,0x63c3,0x649d,0x63f3,0x63ca,0x63e0,0x63f6,0x63d5,
-0x63f2,0x63f5,0x6461,0x63df,0x63be,0x63dd,0x63dc,0x63c4,
-0x63d8,0x63d3,0x63c2,0x63c7,0x63cc,0x63cb,0x63c8,0x63f0,
-0x63d7,0x63d9,0x6532,0x6567,0x656a,0x6564,0x655c,0x6568,
-0x6565,0x658c,0x659d,0x659e,0x65ae,0x65d0,0x65d2,0x667c,
-0x666c,0x667b,0x6680,0x6671,0x6679,0x666a,0x6672,0x6701,
-0x690c,0x68d3,0x6904,0x68dc,0x692a,0x68ec,0x68ea,0x68f1,
-0x690f,0x68d6,0x68f7,0x68eb,0x68e4,0x68f6,0x6913,0x6910,
-0x68f3,0x68e1,0x6907,0x68cc,0x6908,0x6970,0x68b4,0x6911,
-0x68ef,0x68c6,0x6914,0x68f8,0x68d0,0x68fd,0x68fc,0x68e8,
-0x690b,0x690a,0x6917,0x68ce,0x68c8,0x68dd,0x68de,0x68e6,
-0x68f4,0x68d1,0x6906,0x68d4,0x68e9,0x6915,0x6925,0x68c7,
-0x6b39,0x6b3b,0x6b3f,0x6b3c,0x6b94,0x6b97,0x6b99,0x6b95,
-0x6bbd,0x6bf0,0x6bf2,0x6bf3,0x6c30,0x6dfc,0x6e46,0x6e47,
-0x6e1f,0x6e49,0x6e88,0x6e3c,0x6e3d,0x6e45,0x6e62,0x6e2b,
-0x6e3f,0x6e41,0x6e5d,0x6e73,0x6e1c,0x6e33,0x6e4b,0x6e40,
-0x6e51,0x6e3b,0x6e03,0x6e2e,0x6e5e,0x6e68,0x6e5c,0x6e61,
-0x6e31,0x6e28,0x6e60,0x6e71,0x6e6b,0x6e39,0x6e22,0x6e30,
-0x6e53,0x6e65,0x6e27,0x6e78,0x6e64,0x6e77,0x6e55,0x6e79,
-0x6e52,0x6e66,0x6e35,0x6e36,0x6e5a,0x7120,0x711e,0x712f,
-0x70fb,0x712e,0x7131,0x7123,0x7125,0x7122,0x7132,0x711f,
-0x7128,0x713a,0x711b,0x724b,0x725a,0x7288,0x7289,0x7286,
-0x7285,0x728b,0x7312,0x730b,0x7330,0x7322,0x7331,0x7333,
-0x7327,0x7332,0x732d,0x7326,0x7323,0x7335,0x730c,0x742e,
-0x742c,0x7430,0x742b,0x7416,0x741a,0x7421,0x742d,0x7431,
-0x7424,0x7423,0x741d,0x7429,0x7420,0x7432,0x74fb,0x752f,
-0x756f,0x756c,0x75e7,0x75da,0x75e1,0x75e6,0x75dd,0x75df,
-0x75e4,0x75d7,0x7695,0x7692,0x76da,0x7746,0x7747,0x7744,
-0x774d,0x7745,0x774a,0x774e,0x774b,0x774c,0x77de,0x77ec,
-0x7860,0x7864,0x7865,0x785c,0x786d,0x7871,0x786a,0x786e,
-0x7870,0x7869,0x7868,0x785e,0x7862,0x7974,0x7973,0x7972,
-0x7970,0x7a02,0x7a0a,0x7a03,0x7a0c,0x7a04,0x7a99,0x7ae6,
-0x7ae4,0x7b4a,0x7b3b,0x7b44,0x7b48,0x7b4c,0x7b4e,0x7b40,
-0x7b58,0x7b45,0x7ca2,0x7c9e,0x7ca8,0x7ca1,0x7d58,0x7d6f,
-0x7d63,0x7d53,0x7d56,0x7d67,0x7d6a,0x7d4f,0x7d6d,0x7d5c,
-0x7d6b,0x7d52,0x7d54,0x7d69,0x7d51,0x7d5f,0x7d4e,0x7f3e,
-0x7f3f,0x7f65,0x7f66,0x7fa2,0x7fa0,0x7fa1,0x7fd7,0x8051,
-0x804f,0x8050,0x80fe,0x80d4,0x8143,0x814a,0x8152,0x814f,
-0x8147,0x813d,0x814d,0x813a,0x81e6,0x81ee,0x81f7,0x81f8,
-0x81f9,0x8204,0x823c,0x823d,0x823f,0x8275,0x833b,0x83cf,
-0x83f9,0x8423,0x83c0,0x83e8,0x8412,0x83e7,0x83e4,0x83fc,
-0x83f6,0x8410,0x83c6,0x83c8,0x83eb,0x83e3,0x83bf,0x8401,
-0x83dd,0x83e5,0x83d8,0x83ff,0x83e1,0x83cb,0x83ce,0x83d6,
-0x83f5,0x83c9,0x8409,0x840f,0x83de,0x8411,0x8406,0x83c2,
-0x83f3,0x83d5,0x83fa,0x83c7,0x83d1,0x83ea,0x8413,0x83c3,
-0x83ec,0x83ee,0x83c4,0x83fb,0x83d7,0x83e2,0x841b,0x83db,
-0x83fe,0x86d8,0x86e2,0x86e6,0x86d3,0x86e3,0x86da,0x86ea,
-0x86dd,0x86eb,0x86dc,0x86ec,0x86e9,0x86d7,0x86e8,0x86d1,
-0x8848,0x8856,0x8855,0x88ba,0x88d7,0x88b9,0x88b8,0x88c0,
-0x88be,0x88b6,0x88bc,0x88b7,0x88bd,0x88b2,0x8901,0x88c9,
-0x8995,0x8998,0x8997,0x89dd,0x89da,0x89db,0x8a4e,0x8a4d,
-0x8a39,0x8a59,0x8a40,0x8a57,0x8a58,0x8a44,0x8a45,0x8a52,
-0x8a48,0x8a51,0x8a4a,0x8a4c,0x8a4f,0x8c5f,0x8c81,0x8c80,
-0x8cba,0x8cbe,0x8cb0,0x8cb9,0x8cb5,0x8d84,0x8d80,0x8d89,
-0x8dd8,0x8dd3,0x8dcd,0x8dc7,0x8dd6,0x8ddc,0x8dcf,0x8dd5,
-0x8dd9,0x8dc8,0x8dd7,0x8dc5,0x8eef,0x8ef7,0x8efa,0x8ef9,
-0x8ee6,0x8eee,0x8ee5,0x8ef5,0x8ee7,0x8ee8,0x8ef6,0x8eeb,
-0x8ef1,0x8eec,0x8ef4,0x8ee9,0x902d,0x9034,0x902f,0x9106,
-0x912c,0x9104,0x90ff,0x90fc,0x9108,0x90f9,0x90fb,0x9101,
-0x9100,0x9107,0x9105,0x9103,0x9161,0x9164,0x915f,0x9162,
-0x9160,0x9201,0x920a,0x9225,0x9203,0x921a,0x9226,0x920f,
-0x920c,0x9200,0x9212,0x91ff,0x91fd,0x9206,0x9204,0x9227,
-0x9202,0x921c,0x9224,0x9219,0x9217,0x9205,0x9216,0x957b,
-0x958d,0x958c,0x9590,0x9687,0x967e,0x9688,0x9689,0x9683,
-0x9680,0x96c2,0x96c8,0x96c3,0x96f1,0x96f0,0x976c,0x9770,
-0x976e,0x9807,0x98a9,0x98eb,0x9ce6,0x9ef9,0x4e83,0x4e84,
-0x4eb6,0x50bd,0x50bf,0x50c6,0x50ae,0x50c4,0x50ca,0x50b4,
-0x50c8,0x50c2,0x50b0,0x50c1,0x50ba,0x50b1,0x50cb,0x50c9,
-0x50b6,0x50b8,0x51d7,0x527a,0x5278,0x527b,0x527c,0x55c3,
-0x55db,0x55cc,0x55d0,0x55cb,0x55ca,0x55dd,0x55c0,0x55d4,
-0x55c4,0x55e9,0x55bf,0x55d2,0x558d,0x55cf,0x55d5,0x55e2,
-0x55d6,0x55c8,0x55f2,0x55cd,0x55d9,0x55c2,0x5714,0x5853,
-0x5868,0x5864,0x584f,0x584d,0x5849,0x586f,0x5855,0x584e,
-0x585d,0x5859,0x5865,0x585b,0x583d,0x5863,0x5871,0x58fc,
-0x5ac7,0x5ac4,0x5acb,0x5aba,0x5ab8,0x5ab1,0x5ab5,0x5ab0,
-0x5abf,0x5ac8,0x5abb,0x5ac6,0x5ab7,0x5ac0,0x5aca,0x5ab4,
-0x5ab6,0x5acd,0x5ab9,0x5a90,0x5bd6,0x5bd8,0x5bd9,0x5c1f,
-0x5c33,0x5d71,0x5d63,0x5d4a,0x5d65,0x5d72,0x5d6c,0x5d5e,
-0x5d68,0x5d67,0x5d62,0x5df0,0x5e4f,0x5e4e,0x5e4a,0x5e4d,
-0x5e4b,0x5ec5,0x5ecc,0x5ec6,0x5ecb,0x5ec7,0x5f40,0x5faf,
-0x5fad,0x60f7,0x6149,0x614a,0x612b,0x6145,0x6136,0x6132,
-0x612e,0x6146,0x612f,0x614f,0x6129,0x6140,0x6220,0x9168,
-0x6223,0x6225,0x6224,0x63c5,0x63f1,0x63eb,0x6410,0x6412,
-0x6409,0x6420,0x6424,0x6433,0x6443,0x641f,0x6415,0x6418,
-0x6439,0x6437,0x6422,0x6423,0x640c,0x6426,0x6430,0x6428,
-0x6441,0x6435,0x642f,0x640a,0x641a,0x6440,0x6425,0x6427,
-0x640b,0x63e7,0x641b,0x642e,0x6421,0x640e,0x656f,0x6592,
-0x65d3,0x6686,0x668c,0x6695,0x6690,0x668b,0x668a,0x6699,
-0x6694,0x6678,0x6720,0x6966,0x695f,0x6938,0x694e,0x6962,
-0x6971,0x693f,0x6945,0x696a,0x6939,0x6942,0x6957,0x6959,
-0x697a,0x6948,0x6949,0x6935,0x696c,0x6933,0x693d,0x6965,
-0x68f0,0x6978,0x6934,0x6969,0x6940,0x696f,0x6944,0x6976,
-0x6958,0x6941,0x6974,0x694c,0x693b,0x694b,0x6937,0x695c,
-0x694f,0x6951,0x6932,0x6952,0x692f,0x697b,0x693c,0x6b46,
-0x6b45,0x6b43,0x6b42,0x6b48,0x6b41,0x6b9b,0xfa0d,0x6bfb,
-0x6bfc,0x6bf9,0x6bf7,0x6bf8,0x6e9b,0x6ed6,0x6ec8,0x6e8f,
-0x6ec0,0x6e9f,0x6e93,0x6e94,0x6ea0,0x6eb1,0x6eb9,0x6ec6,
-0x6ed2,0x6ebd,0x6ec1,0x6e9e,0x6ec9,0x6eb7,0x6eb0,0x6ecd,
-0x6ea6,0x6ecf,0x6eb2,0x6ebe,0x6ec3,0x6edc,0x6ed8,0x6e99,
-0x6e92,0x6e8e,0x6e8d,0x6ea4,0x6ea1,0x6ebf,0x6eb3,0x6ed0,
-0x6eca,0x6e97,0x6eae,0x6ea3,0x7147,0x7154,0x7152,0x7163,
-0x7160,0x7141,0x715d,0x7162,0x7172,0x7178,0x716a,0x7161,
-0x7142,0x7158,0x7143,0x714b,0x7170,0x715f,0x7150,0x7153,
-0x7144,0x714d,0x715a,0x724f,0x728d,0x728c,0x7291,0x7290,
-0x728e,0x733c,0x7342,0x733b,0x733a,0x7340,0x734a,0x7349,
-0x7444,0x744a,0x744b,0x7452,0x7451,0x7457,0x7440,0x744f,
-0x7450,0x744e,0x7442,0x7446,0x744d,0x7454,0x74e1,0x74ff,
-0x74fe,0x74fd,0x751d,0x7579,0x7577,0x6983,0x75ef,0x760f,
-0x7603,0x75f7,0x75fe,0x75fc,0x75f9,0x75f8,0x7610,0x75fb,
-0x75f6,0x75ed,0x75f5,0x75fd,0x7699,0x76b5,0x76dd,0x7755,
-0x775f,0x7760,0x7752,0x7756,0x775a,0x7769,0x7767,0x7754,
-0x7759,0x776d,0x77e0,0x7887,0x789a,0x7894,0x788f,0x7884,
-0x7895,0x7885,0x7886,0x78a1,0x7883,0x7879,0x7899,0x7880,
-0x7896,0x787b,0x797c,0x7982,0x797d,0x7979,0x7a11,0x7a18,
-0x7a19,0x7a12,0x7a17,0x7a15,0x7a22,0x7a13,0x7a1b,0x7a10,
-0x7aa3,0x7aa2,0x7a9e,0x7aeb,0x7b66,0x7b64,0x7b6d,0x7b74,
-0x7b69,0x7b72,0x7b65,0x7b73,0x7b71,0x7b70,0x7b61,0x7b78,
-0x7b76,0x7b63,0x7cb2,0x7cb4,0x7caf,0x7d88,0x7d86,0x7d80,
-0x7d8d,0x7d7f,0x7d85,0x7d7a,0x7d8e,0x7d7b,0x7d83,0x7d7c,
-0x7d8c,0x7d94,0x7d84,0x7d7d,0x7d92,0x7f6d,0x7f6b,0x7f67,
-0x7f68,0x7f6c,0x7fa6,0x7fa5,0x7fa7,0x7fdb,0x7fdc,0x8021,
-0x8164,0x8160,0x8177,0x815c,0x8169,0x815b,0x8162,0x8172,
-0x6721,0x815e,0x8176,0x8167,0x816f,0x8144,0x8161,0x821d,
-0x8249,0x8244,0x8240,0x8242,0x8245,0x84f1,0x843f,0x8456,
-0x8476,0x8479,0x848f,0x848d,0x8465,0x8451,0x8440,0x8486,
-0x8467,0x8430,0x844d,0x847d,0x845a,0x8459,0x8474,0x8473,
-0x845d,0x8507,0x845e,0x8437,0x843a,0x8434,0x847a,0x8443,
-0x8478,0x8432,0x8445,0x8429,0x83d9,0x844b,0x842f,0x8442,
-0x842d,0x845f,0x8470,0x8439,0x844e,0x844c,0x8452,0x846f,
-0x84c5,0x848e,0x843b,0x8447,0x8436,0x8433,0x8468,0x847e,
-0x8444,0x842b,0x8460,0x8454,0x846e,0x8450,0x870b,0x8704,
-0x86f7,0x870c,0x86fa,0x86d6,0x86f5,0x874d,0x86f8,0x870e,
-0x8709,0x8701,0x86f6,0x870d,0x8705,0x88d6,0x88cb,0x88cd,
-0x88ce,0x88de,0x88db,0x88da,0x88cc,0x88d0,0x8985,0x899b,
-0x89df,0x89e5,0x89e4,0x89e1,0x89e0,0x89e2,0x89dc,0x89e6,
-0x8a76,0x8a86,0x8a7f,0x8a61,0x8a3f,0x8a77,0x8a82,0x8a84,
-0x8a75,0x8a83,0x8a81,0x8a74,0x8a7a,0x8c3c,0x8c4b,0x8c4a,
-0x8c65,0x8c64,0x8c66,0x8c86,0x8c84,0x8c85,0x8ccc,0x8d68,
-0x8d69,0x8d91,0x8d8c,0x8d8e,0x8d8f,0x8d8d,0x8d93,0x8d94,
-0x8d90,0x8d92,0x8df0,0x8de0,0x8dec,0x8df1,0x8dee,0x8dd0,
-0x8de9,0x8de3,0x8de2,0x8de7,0x8df2,0x8deb,0x8df4,0x8f06,
-0x8eff,0x8f01,0x8f00,0x8f05,0x8f07,0x8f08,0x8f02,0x8f0b,
-0x9052,0x903f,0x9044,0x9049,0x903d,0x9110,0x910d,0x910f,
-0x9111,0x9116,0x9114,0x910b,0x910e,0x916e,0x916f,0x9248,
-0x9252,0x9230,0x923a,0x9266,0x9233,0x9265,0x925e,0x9283,
-0x922e,0x924a,0x9246,0x926d,0x926c,0x924f,0x9260,0x9267,
-0x926f,0x9236,0x9261,0x9270,0x9231,0x9254,0x9263,0x9250,
-0x9272,0x924e,0x9253,0x924c,0x9256,0x9232,0x959f,0x959c,
-0x959e,0x959b,0x9692,0x9693,0x9691,0x9697,0x96ce,0x96fa,
-0x96fd,0x96f8,0x96f5,0x9773,0x9777,0x9778,0x9772,0x980f,
-0x980d,0x980e,0x98ac,0x98f6,0x98f9,0x99af,0x99b2,0x99b0,
-0x99b5,0x9aad,0x9aab,0x9b5b,0x9cea,0x9ced,0x9ce7,0x9e80,
-0x9efd,0x50e6,0x50d4,0x50d7,0x50e8,0x50f3,0x50db,0x50ea,
-0x50dd,0x50e4,0x50d3,0x50ec,0x50f0,0x50ef,0x50e3,0x50e0,
-0x51d8,0x5280,0x5281,0x52e9,0x52eb,0x5330,0x53ac,0x5627,
-0x5615,0x560c,0x5612,0x55fc,0x560f,0x561c,0x5601,0x5613,
-0x5602,0x55fa,0x561d,0x5604,0x55ff,0x55f9,0x5889,0x587c,
-0x5890,0x5898,0x5886,0x5881,0x587f,0x5874,0x588b,0x587a,
-0x5887,0x5891,0x588e,0x5876,0x5882,0x5888,0x587b,0x5894,
-0x588f,0x58fe,0x596b,0x5adc,0x5aee,0x5ae5,0x5ad5,0x5aea,
-0x5ada,0x5aed,0x5aeb,0x5af3,0x5ae2,0x5ae0,0x5adb,0x5aec,
-0x5ade,0x5add,0x5ad9,0x5ae8,0x5adf,0x5b77,0x5be0,0x5be3,
-0x5c63,0x5d82,0x5d80,0x5d7d,0x5d86,0x5d7a,0x5d81,0x5d77,
-0x5d8a,0x5d89,0x5d88,0x5d7e,0x5d7c,0x5d8d,0x5d79,0x5d7f,
-0x5e58,0x5e59,0x5e53,0x5ed8,0x5ed1,0x5ed7,0x5ece,0x5edc,
-0x5ed5,0x5ed9,0x5ed2,0x5ed4,0x5f44,0x5f43,0x5f6f,0x5fb6,
-0x612c,0x6128,0x6141,0x615e,0x6171,0x6173,0x6152,0x6153,
-0x6172,0x616c,0x6180,0x6174,0x6154,0x617a,0x615b,0x6165,
-0x613b,0x616a,0x6161,0x6156,0x6229,0x6227,0x622b,0x642b,
-0x644d,0x645b,0x645d,0x6474,0x6476,0x6472,0x6473,0x647d,
-0x6475,0x6466,0x64a6,0x644e,0x6482,0x645e,0x645c,0x644b,
-0x6453,0x6460,0x6450,0x647f,0x643f,0x646c,0x646b,0x6459,
-0x6465,0x6477,0x6573,0x65a0,0x66a1,0x66a0,0x669f,0x6705,
-0x6704,0x6722,0x69b1,0x69b6,0x69c9,0x69a0,0x69ce,0x6996,
-0x69b0,0x69ac,0x69bc,0x6991,0x6999,0x698e,0x69a7,0x698d,
-0x69a9,0x69be,0x69af,0x69bf,0x69c4,0x69bd,0x69a4,0x69d4,
-0x69b9,0x69ca,0x699a,0x69cf,0x69b3,0x6993,0x69aa,0x69a1,
-0x699e,0x69d9,0x6997,0x6990,0x69c2,0x69b5,0x69a5,0x69c6,
-0x6b4a,0x6b4d,0x6b4b,0x6b9e,0x6b9f,0x6ba0,0x6bc3,0x6bc4,
-0x6bfe,0x6ece,0x6ef5,0x6ef1,0x6f03,0x6f25,0x6ef8,0x6f37,
-0x6efb,0x6f2e,0x6f09,0x6f4e,0x6f19,0x6f1a,0x6f27,0x6f18,
-0x6f3b,0x6f12,0x6eed,0x6f0a,0x6f36,0x6f73,0x6ef9,0x6eee,
-0x6f2d,0x6f40,0x6f30,0x6f3c,0x6f35,0x6eeb,0x6f07,0x6f0e,
-0x6f43,0x6f05,0x6efd,0x6ef6,0x6f39,0x6f1c,0x6efc,0x6f3a,
-0x6f1f,0x6f0d,0x6f1e,0x6f08,0x6f21,0x7187,0x7190,0x7189,
-0x7180,0x7185,0x7182,0x718f,0x717b,0x7186,0x7181,0x7197,
-0x7244,0x7253,0x7297,0x7295,0x7293,0x7343,0x734d,0x7351,
-0x734c,0x7462,0x7473,0x7471,0x7475,0x7472,0x7467,0x746e,
-0x7500,0x7502,0x7503,0x757d,0x7590,0x7616,0x7608,0x760c,
-0x7615,0x7611,0x760a,0x7614,0x76b8,0x7781,0x777c,0x7785,
-0x7782,0x776e,0x7780,0x776f,0x777e,0x7783,0x78b2,0x78aa,
-0x78b4,0x78ad,0x78a8,0x787e,0x78ab,0x789e,0x78a5,0x78a0,
-0x78ac,0x78a2,0x78a4,0x7998,0x798a,0x798b,0x7996,0x7995,
-0x7994,0x7993,0x7997,0x7988,0x7992,0x7990,0x7a2b,0x7a4a,
-0x7a30,0x7a2f,0x7a28,0x7a26,0x7aa8,0x7aab,0x7aac,0x7aee,
-0x7b88,0x7b9c,0x7b8a,0x7b91,0x7b90,0x7b96,0x7b8d,0x7b8c,
-0x7b9b,0x7b8e,0x7b85,0x7b98,0x5284,0x7b99,0x7ba4,0x7b82,
-0x7cbb,0x7cbf,0x7cbc,0x7cba,0x7da7,0x7db7,0x7dc2,0x7da3,
-0x7daa,0x7dc1,0x7dc0,0x7dc5,0x7d9d,0x7dce,0x7dc4,0x7dc6,
-0x7dcb,0x7dcc,0x7daf,0x7db9,0x7d96,0x7dbc,0x7d9f,0x7da6,
-0x7dae,0x7da9,0x7da1,0x7dc9,0x7f73,0x7fe2,0x7fe3,0x7fe5,
-0x7fde,0x8024,0x805d,0x805c,0x8189,0x8186,0x8183,0x8187,
-0x818d,0x818c,0x818b,0x8215,0x8497,0x84a4,0x84a1,0x849f,
-0x84ba,0x84ce,0x84c2,0x84ac,0x84ae,0x84ab,0x84b9,0x84b4,
-0x84c1,0x84cd,0x84aa,0x849a,0x84b1,0x84d0,0x849d,0x84a7,
-0x84bb,0x84a2,0x8494,0x84c7,0x84cc,0x849b,0x84a9,0x84af,
-0x84a8,0x84d6,0x8498,0x84b6,0x84cf,0x84a0,0x84d7,0x84d4,
-0x84d2,0x84db,0x84b0,0x8491,0x8661,0x8733,0x8723,0x8728,
-0x876b,0x8740,0x872e,0x871e,0x8721,0x8719,0x871b,0x8743,
-0x872c,0x8741,0x873e,0x8746,0x8720,0x8732,0x872a,0x872d,
-0x873c,0x8712,0x873a,0x8731,0x8735,0x8742,0x8726,0x8727,
-0x8738,0x8724,0x871a,0x8730,0x8711,0x88f7,0x88e7,0x88f1,
-0x88f2,0x88fa,0x88fe,0x88ee,0x88fc,0x88f6,0x88fb,0x88f0,
-0x88ec,0x88eb,0x899d,0x89a1,0x899f,0x899e,0x89e9,0x89eb,
-0x89e8,0x8aab,0x8a99,0x8a8b,0x8a92,0x8a8f,0x8a96,0x8c3d,
-0x8c68,0x8c69,0x8cd5,0x8ccf,0x8cd7,0x8d96,0x8e09,0x8e02,
-0x8dff,0x8e0d,0x8dfd,0x8e0a,0x8e03,0x8e07,0x8e06,0x8e05,
-0x8dfe,0x8e00,0x8e04,0x8f10,0x8f11,0x8f0e,0x8f0d,0x9123,
-0x911c,0x9120,0x9122,0x911f,0x911d,0x911a,0x9124,0x9121,
-0x911b,0x917a,0x9172,0x9179,0x9173,0x92a5,0x92a4,0x9276,
-0x929b,0x927a,0x92a0,0x9294,0x92aa,0x928d,0x92a6,0x929a,
-0x92ab,0x9279,0x9297,0x927f,0x92a3,0x92ee,0x928e,0x9282,
-0x9295,0x92a2,0x927d,0x9288,0x92a1,0x928a,0x9286,0x928c,
-0x9299,0x92a7,0x927e,0x9287,0x92a9,0x929d,0x928b,0x922d,
-0x969e,0x96a1,0x96ff,0x9758,0x977d,0x977a,0x977e,0x9783,
-0x9780,0x9782,0x977b,0x9784,0x9781,0x977f,0x97ce,0x97cd,
-0x9816,0x98ad,0x98ae,0x9902,0x9900,0x9907,0x999d,0x999c,
-0x99c3,0x99b9,0x99bb,0x99ba,0x99c2,0x99bd,0x99c7,0x9ab1,
-0x9ae3,0x9ae7,0x9b3e,0x9b3f,0x9b60,0x9b61,0x9b5f,0x9cf1,
-0x9cf2,0x9cf5,0x9ea7,0x50ff,0x5103,0x5130,0x50f8,0x5106,
-0x5107,0x50f6,0x50fe,0x510b,0x510c,0x50fd,0x510a,0x528b,
-0x528c,0x52f1,0x52ef,0x5648,0x5642,0x564c,0x5635,0x5641,
-0x564a,0x5649,0x5646,0x5658,0x565a,0x5640,0x5633,0x563d,
-0x562c,0x563e,0x5638,0x562a,0x563a,0x571a,0x58ab,0x589d,
-0x58b1,0x58a0,0x58a3,0x58af,0x58ac,0x58a5,0x58a1,0x58ff,
-0x5aff,0x5af4,0x5afd,0x5af7,0x5af6,0x5b03,0x5af8,0x5b02,
-0x5af9,0x5b01,0x5b07,0x5b05,0x5b0f,0x5c67,0x5d99,0x5d97,
-0x5d9f,0x5d92,0x5da2,0x5d93,0x5d95,0x5da0,0x5d9c,0x5da1,
-0x5d9a,0x5d9e,0x5e69,0x5e5d,0x5e60,0x5e5c,0x7df3,0x5edb,
-0x5ede,0x5ee1,0x5f49,0x5fb2,0x618b,0x6183,0x6179,0x61b1,
-0x61b0,0x61a2,0x6189,0x619b,0x6193,0x61af,0x61ad,0x619f,
-0x6192,0x61aa,0x61a1,0x618d,0x6166,0x61b3,0x622d,0x646e,
-0x6470,0x6496,0x64a0,0x6485,0x6497,0x649c,0x648f,0x648b,
-0x648a,0x648c,0x64a3,0x649f,0x6468,0x64b1,0x6498,0x6576,
-0x657a,0x6579,0x657b,0x65b2,0x65b3,0x66b5,0x66b0,0x66a9,
-0x66b2,0x66b7,0x66aa,0x66af,0x6a00,0x6a06,0x6a17,0x69e5,
-0x69f8,0x6a15,0x69f1,0x69e4,0x6a20,0x69ff,0x69ec,0x69e2,
-0x6a1b,0x6a1d,0x69fe,0x6a27,0x69f2,0x69ee,0x6a14,0x69f7,
-0x69e7,0x6a40,0x6a08,0x69e6,0x69fb,0x6a0d,0x69fc,0x69eb,
-0x6a09,0x6a04,0x6a18,0x6a25,0x6a0f,0x69f6,0x6a26,0x6a07,
-0x69f4,0x6a16,0x6b51,0x6ba5,0x6ba3,0x6ba2,0x6ba6,0x6c01,
-0x6c00,0x6bff,0x6c02,0x6f41,0x6f26,0x6f7e,0x6f87,0x6fc6,
-0x6f92,0x6f8d,0x6f89,0x6f8c,0x6f62,0x6f4f,0x6f85,0x6f5a,
-0x6f96,0x6f76,0x6f6c,0x6f82,0x6f55,0x6f72,0x6f52,0x6f50,
-0x6f57,0x6f94,0x6f93,0x6f5d,0x6f00,0x6f61,0x6f6b,0x6f7d,
-0x6f67,0x6f90,0x6f53,0x6f8b,0x6f69,0x6f7f,0x6f95,0x6f63,
-0x6f77,0x6f6a,0x6f7b,0x71b2,0x71af,0x719b,0x71b0,0x71a0,
-0x719a,0x71a9,0x71b5,0x719d,0x71a5,0x719e,0x71a4,0x71a1,
-0x71aa,0x719c,0x71a7,0x71b3,0x7298,0x729a,0x7358,0x7352,
-0x735e,0x735f,0x7360,0x735d,0x735b,0x7361,0x735a,0x7359,
-0x7362,0x7487,0x7489,0x748a,0x7486,0x7481,0x747d,0x7485,
-0x7488,0x747c,0x7479,0x7508,0x7507,0x757e,0x7625,0x761e,
-0x7619,0x761d,0x761c,0x7623,0x761a,0x7628,0x761b,0x769c,
-0x769d,0x769e,0x769b,0x778d,0x778f,0x7789,0x7788,0x78cd,
-0x78bb,0x78cf,0x78cc,0x78d1,0x78ce,0x78d4,0x78c8,0x78c3,
-0x78c4,0x78c9,0x799a,0x79a1,0x79a0,0x799c,0x79a2,0x799b,
-0x6b76,0x7a39,0x7ab2,0x7ab4,0x7ab3,0x7bb7,0x7bcb,0x7bbe,
-0x7bac,0x7bce,0x7baf,0x7bb9,0x7bca,0x7bb5,0x7cc5,0x7cc8,
-0x7ccc,0x7ccb,0x7df7,0x7ddb,0x7dea,0x7de7,0x7dd7,0x7de1,
-0x7e03,0x7dfa,0x7de6,0x7df6,0x7df1,0x7df0,0x7dee,0x7ddf,
-0x7f76,0x7fac,0x7fb0,0x7fad,0x7fed,0x7feb,0x7fea,0x7fec,
-0x7fe6,0x7fe8,0x8064,0x8067,0x81a3,0x819f,0x819e,0x8195,
-0x81a2,0x8199,0x8197,0x8216,0x824f,0x8253,0x8252,0x8250,
-0x824e,0x8251,0x8524,0x853b,0x850f,0x8500,0x8529,0x850e,
-0x8509,0x850d,0x851f,0x850a,0x8527,0x851c,0x84fb,0x852b,
-0x84fa,0x8508,0x850c,0x84f4,0x852a,0x84f2,0x8515,0x84f7,
-0x84eb,0x84f3,0x84fc,0x8512,0x84ea,0x84e9,0x8516,0x84fe,
-0x8528,0x851d,0x852e,0x8502,0x84fd,0x851e,0x84f6,0x8531,
-0x8526,0x84e7,0x84e8,0x84f0,0x84ef,0x84f9,0x8518,0x8520,
-0x8530,0x850b,0x8519,0x852f,0x8662,0x8756,0x8763,0x8764,
-0x8777,0x87e1,0x8773,0x8758,0x8754,0x875b,0x8752,0x8761,
-0x875a,0x8751,0x875e,0x876d,0x876a,0x8750,0x874e,0x875f,
-0x875d,0x876f,0x876c,0x877a,0x876e,0x875c,0x8765,0x874f,
-0x877b,0x8775,0x8762,0x8767,0x8769,0x885a,0x8905,0x890c,
-0x8914,0x890b,0x8917,0x8918,0x8919,0x8906,0x8916,0x8911,
-0x890e,0x8909,0x89a2,0x89a4,0x89a3,0x89ed,0x89f0,0x89ec,
-0x8acf,0x8ac6,0x8ab8,0x8ad3,0x8ad1,0x8ad4,0x8ad5,0x8abb,
-0x8ad7,0x8abe,0x8ac0,0x8ac5,0x8ad8,0x8ac3,0x8aba,0x8abd,
-0x8ad9,0x8c3e,0x8c4d,0x8c8f,0x8ce5,0x8cdf,0x8cd9,0x8ce8,
-0x8cda,0x8cdd,0x8ce7,0x8da0,0x8d9c,0x8da1,0x8d9b,0x8e20,
-0x8e23,0x8e25,0x8e24,0x8e2e,0x8e15,0x8e1b,0x8e16,0x8e11,
-0x8e19,0x8e26,0x8e27,0x8e14,0x8e12,0x8e18,0x8e13,0x8e1c,
-0x8e17,0x8e1a,0x8f2c,0x8f24,0x8f18,0x8f1a,0x8f20,0x8f23,
-0x8f16,0x8f17,0x9073,0x9070,0x906f,0x9067,0x906b,0x912f,
-0x912b,0x9129,0x912a,0x9132,0x9126,0x912e,0x9185,0x9186,
-0x918a,0x9181,0x9182,0x9184,0x9180,0x92d0,0x92c3,0x92c4,
-0x92c0,0x92d9,0x92b6,0x92cf,0x92f1,0x92df,0x92d8,0x92e9,
-0x92d7,0x92dd,0x92cc,0x92ef,0x92c2,0x92e8,0x92ca,0x92c8,
-0x92ce,0x92e6,0x92cd,0x92d5,0x92c9,0x92e0,0x92de,0x92e7,
-0x92d1,0x92d3,0x92b5,0x92e1,0x92c6,0x92b4,0x957c,0x95ac,
-0x95ab,0x95ae,0x95b0,0x96a4,0x96a2,0x96d3,0x9705,0x9708,
-0x9702,0x975a,0x978a,0x978e,0x9788,0x97d0,0x97cf,0x981e,
-0x981d,0x9826,0x9829,0x9828,0x9820,0x981b,0x9827,0x98b2,
-0x9908,0x98fa,0x9911,0x9914,0x9916,0x9917,0x9915,0x99dc,
-0x99cd,0x99cf,0x99d3,0x99d4,0x99ce,0x99c9,0x99d6,0x99d8,
-0x99cb,0x99d7,0x99cc,0x9ab3,0x9aec,0x9aeb,0x9af3,0x9af2,
-0x9af1,0x9b46,0x9b43,0x9b67,0x9b74,0x9b71,0x9b66,0x9b76,
-0x9b75,0x9b70,0x9b68,0x9b64,0x9b6c,0x9cfc,0x9cfa,0x9cfd,
-0x9cff,0x9cf7,0x9d07,0x9d00,0x9cf9,0x9cfb,0x9d08,0x9d05,
-0x9d04,0x9e83,0x9ed3,0x9f0f,0x9f10,0x511c,0x5113,0x5117,
-0x511a,0x5111,0x51de,0x5334,0x53e1,0x5670,0x5660,0x566e,
-0x5673,0x5666,0x5663,0x566d,0x5672,0x565e,0x5677,0x571c,
-0x571b,0x58c8,0x58bd,0x58c9,0x58bf,0x58ba,0x58c2,0x58bc,
-0x58c6,0x5b17,0x5b19,0x5b1b,0x5b21,0x5b14,0x5b13,0x5b10,
-0x5b16,0x5b28,0x5b1a,0x5b20,0x5b1e,0x5bef,0x5dac,0x5db1,
-0x5da9,0x5da7,0x5db5,0x5db0,0x5dae,0x5daa,0x5da8,0x5db2,
-0x5dad,0x5daf,0x5db4,0x5e67,0x5e68,0x5e66,0x5e6f,0x5ee9,
-0x5ee7,0x5ee6,0x5ee8,0x5ee5,0x5f4b,0x5fbc,0x619d,0x61a8,
-0x6196,0x61c5,0x61b4,0x61c6,0x61c1,0x61cc,0x61ba,0x61bf,
-0x61b8,0x618c,0x64d7,0x64d6,0x64d0,0x64cf,0x64c9,0x64bd,
-0x6489,0x64c3,0x64db,0x64f3,0x64d9,0x6533,0x657f,0x657c,
-0x65a2,0x66c8,0x66be,0x66c0,0x66ca,0x66cb,0x66cf,0x66bd,
-0x66bb,0x66ba,0x66cc,0x6723,0x6a34,0x6a66,0x6a49,0x6a67,
-0x6a32,0x6a68,0x6a3e,0x6a5d,0x6a6d,0x6a76,0x6a5b,0x6a51,
-0x6a28,0x6a5a,0x6a3b,0x6a3f,0x6a41,0x6a6a,0x6a64,0x6a50,
-0x6a4f,0x6a54,0x6a6f,0x6a69,0x6a60,0x6a3c,0x6a5e,0x6a56,
-0x6a55,0x6a4d,0x6a4e,0x6a46,0x6b55,0x6b54,0x6b56,0x6ba7,
-0x6baa,0x6bab,0x6bc8,0x6bc7,0x6c04,0x6c03,0x6c06,0x6fad,
-0x6fcb,0x6fa3,0x6fc7,0x6fbc,0x6fce,0x6fc8,0x6f5e,0x6fc4,
-0x6fbd,0x6f9e,0x6fca,0x6fa8,0x7004,0x6fa5,0x6fae,0x6fba,
-0x6fac,0x6faa,0x6fcf,0x6fbf,0x6fb8,0x6fa2,0x6fc9,0x6fab,
-0x6fcd,0x6faf,0x6fb2,0x6fb0,0x71c5,0x71c2,0x71bf,0x71b8,
-0x71d6,0x71c0,0x71c1,0x71cb,0x71d4,0x71ca,0x71c7,0x71cf,
-0x71bd,0x71d8,0x71bc,0x71c6,0x71da,0x71db,0x729d,0x729e,
-0x7369,0x7366,0x7367,0x736c,0x7365,0x736b,0x736a,0x747f,
-0x749a,0x74a0,0x7494,0x7492,0x7495,0x74a1,0x750b,0x7580,
-0x762f,0x762d,0x7631,0x763d,0x7633,0x763c,0x7635,0x7632,
-0x7630,0x76bb,0x76e6,0x779a,0x779d,0x77a1,0x779c,0x779b,
-0x77a2,0x77a3,0x7795,0x7799,0x7797,0x78dd,0x78e9,0x78e5,
-0x78ea,0x78de,0x78e3,0x78db,0x78e1,0x78e2,0x78ed,0x78df,
-0x78e0,0x79a4,0x7a44,0x7a48,0x7a47,0x7ab6,0x7ab8,0x7ab5,
-0x7ab1,0x7ab7,0x7bde,0x7be3,0x7be7,0x7bdd,0x7bd5,0x7be5,
-0x7bda,0x7be8,0x7bf9,0x7bd4,0x7bea,0x7be2,0x7bdc,0x7beb,
-0x7bd8,0x7bdf,0x7cd2,0x7cd4,0x7cd7,0x7cd0,0x7cd1,0x7e12,
-0x7e21,0x7e17,0x7e0c,0x7e1f,0x7e20,0x7e13,0x7e0e,0x7e1c,
-0x7e15,0x7e1a,0x7e22,0x7e0b,0x7e0f,0x7e16,0x7e0d,0x7e14,
-0x7e25,0x7e24,0x7f43,0x7f7b,0x7f7c,0x7f7a,0x7fb1,0x7fef,
-0x802a,0x8029,0x806c,0x81b1,0x81a6,0x81ae,0x81b9,0x81b5,
-0x81ab,0x81b0,0x81ac,0x81b4,0x81b2,0x81b7,0x81a7,0x81f2,
-0x8255,0x8256,0x8257,0x8556,0x8545,0x856b,0x854d,0x8553,
-0x8561,0x8558,0x8540,0x8546,0x8564,0x8541,0x8562,0x8544,
-0x8551,0x8547,0x8563,0x853e,0x855b,0x8571,0x854e,0x856e,
-0x8575,0x8555,0x8567,0x8560,0x858c,0x8566,0x855d,0x8554,
-0x8565,0x856c,0x8663,0x8665,0x8664,0x879b,0x878f,0x8797,
-0x8793,0x8792,0x8788,0x8781,0x8796,0x8798,0x8779,0x8787,
-0x87a3,0x8785,0x8790,0x8791,0x879d,0x8784,0x8794,0x879c,
-0x879a,0x8789,0x891e,0x8926,0x8930,0x892d,0x892e,0x8927,
-0x8931,0x8922,0x8929,0x8923,0x892f,0x892c,0x891f,0x89f1,
-0x8ae0,0x8ae2,0x8af2,0x8af4,0x8af5,0x8add,0x8b14,0x8ae4,
-0x8adf,0x8af0,0x8ac8,0x8ade,0x8ae1,0x8ae8,0x8aff,0x8aef,
-0x8afb,0x8c91,0x8c92,0x8c90,0x8cf5,0x8cee,0x8cf1,0x8cf0,
-0x8cf3,0x8d6c,0x8d6e,0x8da5,0x8da7,0x8e33,0x8e3e,0x8e38,
-0x8e40,0x8e45,0x8e36,0x8e3c,0x8e3d,0x8e41,0x8e30,0x8e3f,
-0x8ebd,0x8f36,0x8f2e,0x8f35,0x8f32,0x8f39,0x8f37,0x8f34,
-0x9076,0x9079,0x907b,0x9086,0x90fa,0x9133,0x9135,0x9136,
-0x9193,0x9190,0x9191,0x918d,0x918f,0x9327,0x931e,0x9308,
-0x931f,0x9306,0x930f,0x937a,0x9338,0x933c,0x931b,0x9323,
-0x9312,0x9301,0x9346,0x932d,0x930e,0x930d,0x92cb,0x931d,
-0x92fa,0x9325,0x9313,0x92f9,0x92f7,0x9334,0x9302,0x9324,
-0x92ff,0x9329,0x9339,0x9335,0x932a,0x9314,0x930c,0x930b,
-0x92fe,0x9309,0x9300,0x92fb,0x9316,0x95bc,0x95cd,0x95be,
-0x95b9,0x95ba,0x95b6,0x95bf,0x95b5,0x95bd,0x96a9,0x96d4,
-0x970b,0x9712,0x9710,0x9799,0x9797,0x9794,0x97f0,0x97f8,
-0x9835,0x982f,0x9832,0x9924,0x991f,0x9927,0x9929,0x999e,
-0x99ee,0x99ec,0x99e5,0x99e4,0x99f0,0x99e3,0x99ea,0x99e9,
-0x99e7,0x9ab9,0x9abf,0x9ab4,0x9abb,0x9af6,0x9afa,0x9af9,
-0x9af7,0x9b33,0x9b80,0x9b85,0x9b87,0x9b7c,0x9b7e,0x9b7b,
-0x9b82,0x9b93,0x9b92,0x9b90,0x9b7a,0x9b95,0x9b7d,0x9b88,
-0x9d25,0x9d17,0x9d20,0x9d1e,0x9d14,0x9d29,0x9d1d,0x9d18,
-0x9d22,0x9d10,0x9d19,0x9d1f,0x9e88,0x9e86,0x9e87,0x9eae,
-0x9ead,0x9ed5,0x9ed6,0x9efa,0x9f12,0x9f3d,0x5126,0x5125,
-0x5122,0x5124,0x5120,0x5129,0x52f4,0x5693,0x568c,0x568d,
-0x5686,0x5684,0x5683,0x567e,0x5682,0x567f,0x5681,0x58d6,
-0x58d4,0x58cf,0x58d2,0x5b2d,0x5b25,0x5b32,0x5b23,0x5b2c,
-0x5b27,0x5b26,0x5b2f,0x5b2e,0x5b7b,0x5bf1,0x5bf2,0x5db7,
-0x5e6c,0x5e6a,0x5fbe,0x5fbb,0x61c3,0x61b5,0x61bc,0x61e7,
-0x61e0,0x61e5,0x61e4,0x61e8,0x61de,0x64ef,0x64e9,0x64e3,
-0x64eb,0x64e4,0x64e8,0x6581,0x6580,0x65b6,0x65da,0x66d2,
-0x6a8d,0x6a96,0x6a81,0x6aa5,0x6a89,0x6a9f,0x6a9b,0x6aa1,
-0x6a9e,0x6a87,0x6a93,0x6a8e,0x6a95,0x6a83,0x6aa8,0x6aa4,
-0x6a91,0x6a7f,0x6aa6,0x6a9a,0x6a85,0x6a8c,0x6a92,0x6b5b,
-0x6bad,0x6c09,0x6fcc,0x6fa9,0x6ff4,0x6fd4,0x6fe3,0x6fdc,
-0x6fed,0x6fe7,0x6fe6,0x6fde,0x6ff2,0x6fdd,0x6fe2,0x6fe8,
-0x71e1,0x71f1,0x71e8,0x71f2,0x71e4,0x71f0,0x71e2,0x7373,
-0x736e,0x736f,0x7497,0x74b2,0x74ab,0x7490,0x74aa,0x74ad,
-0x74b1,0x74a5,0x74af,0x7510,0x7511,0x7512,0x750f,0x7584,
-0x7643,0x7648,0x7649,0x7647,0x76a4,0x76e9,0x77b5,0x77ab,
-0x77b2,0x77b7,0x77b6,0x77b4,0x77b1,0x77a8,0x77f0,0x78f3,
-0x78fd,0x7902,0x78fb,0x78fc,0x78f2,0x7905,0x78f9,0x78fe,
-0x7904,0x79ab,0x79a8,0x7a5c,0x7a5b,0x7a56,0x7a58,0x7a54,
-0x7a5a,0x7abe,0x7ac0,0x7ac1,0x7c05,0x7c0f,0x7bf2,0x7c00,
-0x7bff,0x7bfb,0x7c0e,0x7bf4,0x7c0b,0x7bf3,0x7c02,0x7c09,
-0x7c03,0x7c01,0x7bf8,0x7bfd,0x7c06,0x7bf0,0x7bf1,0x7c10,
-0x7c0a,0x7ce8,0x7e2d,0x7e3c,0x7e42,0x7e33,0x9848,0x7e38,
-0x7e2a,0x7e49,0x7e40,0x7e47,0x7e29,0x7e4c,0x7e30,0x7e3b,
-0x7e36,0x7e44,0x7e3a,0x7f45,0x7f7f,0x7f7e,0x7f7d,0x7ff4,
-0x7ff2,0x802c,0x81bb,0x81c4,0x81cc,0x81ca,0x81c5,0x81c7,
-0x81bc,0x81e9,0x825b,0x825a,0x825c,0x8583,0x8580,0x858f,
-0x85a7,0x8595,0x85a0,0x858b,0x85a3,0x857b,0x85a4,0x859a,
-0x859e,0x8577,0x857c,0x8589,0x85a1,0x857a,0x8578,0x8557,
-0x858e,0x8596,0x8586,0x858d,0x8599,0x859d,0x8581,0x85a2,
-0x8582,0x8588,0x8585,0x8579,0x8576,0x8598,0x8590,0x859f,
-0x8668,0x87be,0x87aa,0x87ad,0x87c5,0x87b0,0x87ac,0x87b9,
-0x87b5,0x87bc,0x87ae,0x87c9,0x87c3,0x87c2,0x87cc,0x87b7,
-0x87af,0x87c4,0x87ca,0x87b4,0x87b6,0x87bf,0x87b8,0x87bd,
-0x87de,0x87b2,0x8935,0x8933,0x893c,0x893e,0x8941,0x8952,
-0x8937,0x8942,0x89ad,0x89af,0x89ae,0x89f2,0x89f3,0x8b1e,
-0x8b18,0x8b16,0x8b11,0x8b05,0x8b0b,0x8b22,0x8b0f,0x8b12,
-0x8b15,0x8b07,0x8b0d,0x8b08,0x8b06,0x8b1c,0x8b13,0x8b1a,
-0x8c4f,0x8c70,0x8c72,0x8c71,0x8c6f,0x8c95,0x8c94,0x8cf9,
-0x8d6f,0x8e4e,0x8e4d,0x8e53,0x8e50,0x8e4c,0x8e47,0x8f43,
-0x8f40,0x9085,0x907e,0x9138,0x919a,0x91a2,0x919b,0x9199,
-0x919f,0x91a1,0x919d,0x91a0,0x93a1,0x9383,0x93af,0x9364,
-0x9356,0x9347,0x937c,0x9358,0x935c,0x9376,0x9349,0x9350,
-0x9351,0x9360,0x936d,0x938f,0x934c,0x936a,0x9379,0x9357,
-0x9355,0x9352,0x934f,0x9371,0x9377,0x937b,0x9361,0x935e,
-0x9363,0x9367,0x9380,0x934e,0x9359,0x95c7,0x95c0,0x95c9,
-0x95c3,0x95c5,0x95b7,0x96ae,0x96b0,0x96ac,0x9720,0x971f,
-0x9718,0x971d,0x9719,0x979a,0x97a1,0x979c,0x979e,0x979d,
-0x97d5,0x97d4,0x97f1,0x9841,0x9844,0x984a,0x9849,0x9845,
-0x9843,0x9925,0x992b,0x992c,0x992a,0x9933,0x9932,0x992f,
-0x992d,0x9931,0x9930,0x9998,0x99a3,0x99a1,0x9a02,0x99fa,
-0x99f4,0x99f7,0x99f9,0x99f8,0x99f6,0x99fb,0x99fd,0x99fe,
-0x99fc,0x9a03,0x9abe,0x9afe,0x9afd,0x9b01,0x9afc,0x9b48,
-0x9b9a,0x9ba8,0x9b9e,0x9b9b,0x9ba6,0x9ba1,0x9ba5,0x9ba4,
-0x9b86,0x9ba2,0x9ba0,0x9baf,0x9d33,0x9d41,0x9d67,0x9d36,
-0x9d2e,0x9d2f,0x9d31,0x9d38,0x9d30,0x9d45,0x9d42,0x9d43,
-0x9d3e,0x9d37,0x9d40,0x9d3d,0x7ff5,0x9d2d,0x9e8a,0x9e89,
-0x9e8d,0x9eb0,0x9ec8,0x9eda,0x9efb,0x9eff,0x9f24,0x9f23,
-0x9f22,0x9f54,0x9fa0,0x5131,0x512d,0x512e,0x5698,0x569c,
-0x5697,0x569a,0x569d,0x5699,0x5970,0x5b3c,0x5c69,0x5c6a,
-0x5dc0,0x5e6d,0x5e6e,0x61d8,0x61df,0x61ed,0x61ee,0x61f1,
-0x61ea,0x61f0,0x61eb,0x61d6,0x61e9,0x64ff,0x6504,0x64fd,
-0x64f8,0x6501,0x6503,0x64fc,0x6594,0x65db,0x66da,0x66db,
-0x66d8,0x6ac5,0x6ab9,0x6abd,0x6ae1,0x6ac6,0x6aba,0x6ab6,
-0x6ab7,0x6ac7,0x6ab4,0x6aad,0x6b5e,0x6bc9,0x6c0b,0x7007,
-0x700c,0x700d,0x7001,0x7005,0x7014,0x700e,0x6fff,0x7000,
-0x6ffb,0x7026,0x6ffc,0x6ff7,0x700a,0x7201,0x71ff,0x71f9,
-0x7203,0x71fd,0x7376,0x74b8,0x74c0,0x74b5,0x74c1,0x74be,
-0x74b6,0x74bb,0x74c2,0x7514,0x7513,0x765c,0x7664,0x7659,
-0x7650,0x7653,0x7657,0x765a,0x76a6,0x76bd,0x76ec,0x77c2,
-0x77ba,0x78ff,0x790c,0x7913,0x7914,0x7909,0x7910,0x7912,
-0x7911,0x79ad,0x79ac,0x7a5f,0x7c1c,0x7c29,0x7c19,0x7c20,
-0x7c1f,0x7c2d,0x7c1d,0x7c26,0x7c28,0x7c22,0x7c25,0x7c30,
-0x7e5c,0x7e50,0x7e56,0x7e63,0x7e58,0x7e62,0x7e5f,0x7e51,
-0x7e60,0x7e57,0x7e53,0x7fb5,0x7fb3,0x7ff7,0x7ff8,0x8075,
-0x81d1,0x81d2,0x81d0,0x825f,0x825e,0x85b4,0x85c6,0x85c0,
-0x85c3,0x85c2,0x85b3,0x85b5,0x85bd,0x85c7,0x85c4,0x85bf,
-0x85cb,0x85ce,0x85c8,0x85c5,0x85b1,0x85b6,0x85d2,0x8624,
-0x85b8,0x85b7,0x85be,0x8669,0x87e7,0x87e6,0x87e2,0x87db,
-0x87eb,0x87ea,0x87e5,0x87df,0x87f3,0x87e4,0x87d4,0x87dc,
-0x87d3,0x87ed,0x87d8,0x87e3,0x87a4,0x87d7,0x87d9,0x8801,
-0x87f4,0x87e8,0x87dd,0x8953,0x894b,0x894f,0x894c,0x8946,
-0x8950,0x8951,0x8949,0x8b2a,0x8b27,0x8b23,0x8b33,0x8b30,
-0x8b35,0x8b47,0x8b2f,0x8b3c,0x8b3e,0x8b31,0x8b25,0x8b37,
-0x8b26,0x8b36,0x8b2e,0x8b24,0x8b3b,0x8b3d,0x8b3a,0x8c42,
-0x8c75,0x8c99,0x8c98,0x8c97,0x8cfe,0x8d04,0x8d02,0x8d00,
-0x8e5c,0x8e62,0x8e60,0x8e57,0x8e56,0x8e5e,0x8e65,0x8e67,
-0x8e5b,0x8e5a,0x8e61,0x8e5d,0x8e69,0x8e54,0x8f46,0x8f47,
-0x8f48,0x8f4b,0x9128,0x913a,0x913b,0x913e,0x91a8,0x91a5,
-0x91a7,0x91af,0x91aa,0x93b5,0x938c,0x9392,0x93b7,0x939b,
-0x939d,0x9389,0x93a7,0x938e,0x93aa,0x939e,0x93a6,0x9395,
-0x9388,0x9399,0x939f,0x938d,0x93b1,0x9391,0x93b2,0x93a4,
-0x93a8,0x93b4,0x93a3,0x93a5,0x95d2,0x95d3,0x95d1,0x96b3,
-0x96d7,0x96da,0x5dc2,0x96df,0x96d8,0x96dd,0x9723,0x9722,
-0x9725,0x97ac,0x97ae,0x97a8,0x97ab,0x97a4,0x97aa,0x97a2,
-0x97a5,0x97d7,0x97d9,0x97d6,0x97d8,0x97fa,0x9850,0x9851,
-0x9852,0x98b8,0x9941,0x993c,0x993a,0x9a0f,0x9a0b,0x9a09,
-0x9a0d,0x9a04,0x9a11,0x9a0a,0x9a05,0x9a07,0x9a06,0x9ac0,
-0x9adc,0x9b08,0x9b04,0x9b05,0x9b29,0x9b35,0x9b4a,0x9b4c,
-0x9b4b,0x9bc7,0x9bc6,0x9bc3,0x9bbf,0x9bc1,0x9bb5,0x9bb8,
-0x9bd3,0x9bb6,0x9bc4,0x9bb9,0x9bbd,0x9d5c,0x9d53,0x9d4f,
-0x9d4a,0x9d5b,0x9d4b,0x9d59,0x9d56,0x9d4c,0x9d57,0x9d52,
-0x9d54,0x9d5f,0x9d58,0x9d5a,0x9e8e,0x9e8c,0x9edf,0x9f01,
-0x9f00,0x9f16,0x9f25,0x9f2b,0x9f2a,0x9f29,0x9f28,0x9f4c,
-0x9f55,0x5134,0x5135,0x5296,0x52f7,0x53b4,0x56ab,0x56ad,
-0x56a6,0x56a7,0x56aa,0x56ac,0x58da,0x58dd,0x58db,0x5912,
-0x5b3d,0x5b3e,0x5b3f,0x5dc3,0x5e70,0x5fbf,0x61fb,0x6507,
-0x6510,0x650d,0x6509,0x650c,0x650e,0x6584,0x65de,0x65dd,
-0x66de,0x6ae7,0x6ae0,0x6acc,0x6ad1,0x6ad9,0x6acb,0x6adf,
-0x6adc,0x6ad0,0x6aeb,0x6acf,0x6acd,0x6ade,0x6b60,0x6bb0,
-0x6c0c,0x7019,0x7027,0x7020,0x7016,0x702b,0x7021,0x7022,
-0x7023,0x7029,0x7017,0x7024,0x701c,0x702a,0x720c,0x720a,
-0x7207,0x7202,0x7205,0x72a5,0x72a6,0x72a4,0x72a3,0x72a1,
-0x74cb,0x74c5,0x74b7,0x74c3,0x7516,0x7660,0x77c9,0x77ca,
-0x77c4,0x77f1,0x791d,0x791b,0x7921,0x791c,0x7917,0x791e,
-0x79b0,0x7a67,0x7a68,0x7c33,0x7c3c,0x7c39,0x7c2c,0x7c3b,
-0x7cec,0x7cea,0x7e76,0x7e75,0x7e78,0x7e70,0x7e77,0x7e6f,
-0x7e7a,0x7e72,0x7e74,0x7e68,0x7f4b,0x7f4a,0x7f83,0x7f86,
-0x7fb7,0x7ffd,0x7ffe,0x8078,0x81d7,0x81d5,0x8264,0x8261,
-0x8263,0x85eb,0x85f1,0x85ed,0x85d9,0x85e1,0x85e8,0x85da,
-0x85d7,0x85ec,0x85f2,0x85f8,0x85d8,0x85df,0x85e3,0x85dc,
-0x85d1,0x85f0,0x85e6,0x85ef,0x85de,0x85e2,0x8800,0x87fa,
-0x8803,0x87f6,0x87f7,0x8809,0x880c,0x880b,0x8806,0x87fc,
-0x8808,0x87ff,0x880a,0x8802,0x8962,0x895a,0x895b,0x8957,
-0x8961,0x895c,0x8958,0x895d,0x8959,0x8988,0x89b7,0x89b6,
-0x89f6,0x8b50,0x8b48,0x8b4a,0x8b40,0x8b53,0x8b56,0x8b54,
-0x8b4b,0x8b55,0x8b51,0x8b42,0x8b52,0x8b57,0x8c43,0x8c77,
-0x8c76,0x8c9a,0x8d06,0x8d07,0x8d09,0x8dac,0x8daa,0x8dad,
-0x8dab,0x8e6d,0x8e78,0x8e73,0x8e6a,0x8e6f,0x8e7b,0x8ec2,
-0x8f52,0x8f51,0x8f4f,0x8f50,0x8f53,0x8fb4,0x9140,0x913f,
-0x91b0,0x91ad,0x93de,0x93c7,0x93cf,0x93c2,0x93da,0x93d0,
-0x93f9,0x93ec,0x93cc,0x93d9,0x93a9,0x93e6,0x93ca,0x93d4,
-0x93ee,0x93e3,0x93d5,0x93c4,0x93ce,0x93c0,0x93d2,0x93e7,
-0x957d,0x95da,0x95db,0x96e1,0x9729,0x972b,0x972c,0x9728,
-0x9726,0x97b3,0x97b7,0x97b6,0x97dd,0x97de,0x97df,0x985c,
-0x9859,0x985d,0x9857,0x98bf,0x98bd,0x98bb,0x98be,0x9948,
-0x9947,0x9943,0x99a6,0x99a7,0x9a1a,0x9a15,0x9a25,0x9a1d,
-0x9a24,0x9a1b,0x9a22,0x9a20,0x9a27,0x9a23,0x9a1e,0x9a1c,
-0x9a14,0x9ac2,0x9b0b,0x9b0a,0x9b0e,0x9b0c,0x9b37,0x9bea,
-0x9beb,0x9be0,0x9bde,0x9be4,0x9be6,0x9be2,0x9bf0,0x9bd4,
-0x9bd7,0x9bec,0x9bdc,0x9bd9,0x9be5,0x9bd5,0x9be1,0x9bda,
-0x9d77,0x9d81,0x9d8a,0x9d84,0x9d88,0x9d71,0x9d80,0x9d78,
-0x9d86,0x9d8b,0x9d8c,0x9d7d,0x9d6b,0x9d74,0x9d75,0x9d70,
-0x9d69,0x9d85,0x9d73,0x9d7b,0x9d82,0x9d6f,0x9d79,0x9d7f,
-0x9d87,0x9d68,0x9e94,0x9e91,0x9ec0,0x9efc,0x9f2d,0x9f40,
-0x9f41,0x9f4d,0x9f56,0x9f57,0x9f58,0x5337,0x56b2,0x56b5,
-0x56b3,0x58e3,0x5b45,0x5dc6,0x5dc7,0x5eee,0x5eef,0x5fc0,
-0x5fc1,0x61f9,0x6517,0x6516,0x6515,0x6513,0x65df,0x66e8,
-0x66e3,0x66e4,0x6af3,0x6af0,0x6aea,0x6ae8,0x6af9,0x6af1,
-0x6aee,0x6aef,0x703c,0x7035,0x702f,0x7037,0x7034,0x7031,
-0x7042,0x7038,0x703f,0x703a,0x7039,0x7040,0x703b,0x7033,
-0x7041,0x7213,0x7214,0x72a8,0x737d,0x737c,0x74ba,0x76ab,
-0x76aa,0x76be,0x76ed,0x77cc,0x77ce,0x77cf,0x77cd,0x77f2,
-0x7925,0x7923,0x7927,0x7928,0x7924,0x7929,0x79b2,0x7a6e,
-0x7a6c,0x7a6d,0x7af7,0x7c49,0x7c48,0x7c4a,0x7c47,0x7c45,
-0x7cee,0x7e7b,0x7e7e,0x7e81,0x7e80,0x7fba,0x7fff,0x8079,
-0x81db,0x81d9,0x820b,0x8268,0x8269,0x8622,0x85ff,0x8601,
-0x85fe,0x861b,0x8600,0x85f6,0x8604,0x8609,0x8605,0x860c,
-0x85fd,0x8819,0x8810,0x8811,0x8817,0x8813,0x8816,0x8963,
-0x8966,0x89b9,0x89f7,0x8b60,0x8b6a,0x8b5d,0x8b68,0x8b63,
-0x8b65,0x8b67,0x8b6d,0x8dae,0x8e86,0x8e88,0x8e84,0x8f59,
-0x8f56,0x8f57,0x8f55,0x8f58,0x8f5a,0x908d,0x9143,0x9141,
-0x91b7,0x91b5,0x91b2,0x91b3,0x940b,0x9413,0x93fb,0x9420,
-0x940f,0x9414,0x93fe,0x9415,0x9410,0x9428,0x9419,0x940d,
-0x93f5,0x9400,0x93f7,0x9407,0x940e,0x9416,0x9412,0x93fa,
-0x9409,0x93f8,0x940a,0x93ff,0x93fc,0x940c,0x93f6,0x9411,
-0x9406,0x95de,0x95e0,0x95df,0x972e,0x972f,0x97b9,0x97bb,
-0x97fd,0x97fe,0x9860,0x9862,0x9863,0x985f,0x98c1,0x98c2,
-0x9950,0x994e,0x9959,0x994c,0x994b,0x9953,0x9a32,0x9a34,
-0x9a31,0x9a2c,0x9a2a,0x9a36,0x9a29,0x9a2e,0x9a38,0x9a2d,
-0x9ac7,0x9aca,0x9ac6,0x9b10,0x9b12,0x9b11,0x9c0b,0x9c08,
-0x9bf7,0x9c05,0x9c12,0x9bf8,0x9c40,0x9c07,0x9c0e,0x9c06,
-0x9c17,0x9c14,0x9c09,0x9d9f,0x9d99,0x9da4,0x9d9d,0x9d92,
-0x9d98,0x9d90,0x9d9b,0x9da0,0x9d94,0x9d9c,0x9daa,0x9d97,
-0x9da1,0x9d9a,0x9da2,0x9da8,0x9d9e,0x9da3,0x9dbf,0x9da9,
-0x9d96,0x9da6,0x9da7,0x9e99,0x9e9b,0x9e9a,0x9ee5,0x9ee4,
-0x9ee7,0x9ee6,0x9f30,0x9f2e,0x9f5b,0x9f60,0x9f5e,0x9f5d,
-0x9f59,0x9f91,0x513a,0x5139,0x5298,0x5297,0x56c3,0x56bd,
-0x56be,0x5b48,0x5b47,0x5dcb,0x5dcf,0x5ef1,0x61fd,0x651b,
-0x6b02,0x6afc,0x6b03,0x6af8,0x6b00,0x7043,0x7044,0x704a,
-0x7048,0x7049,0x7045,0x7046,0x721d,0x721a,0x7219,0x737e,
-0x7517,0x766a,0x77d0,0x792d,0x7931,0x792f,0x7c54,0x7c53,
-0x7cf2,0x7e8a,0x7e87,0x7e88,0x7e8b,0x7e86,0x7e8d,0x7f4d,
-0x7fbb,0x8030,0x81dd,0x8618,0x862a,0x8626,0x861f,0x8623,
-0x861c,0x8619,0x8627,0x862e,0x8621,0x8620,0x8629,0x861e,
-0x8625,0x8829,0x881d,0x881b,0x8820,0x8824,0x881c,0x882b,
-0x884a,0x896d,0x8969,0x896e,0x896b,0x89fa,0x8b79,0x8b78,
-0x8b45,0x8b7a,0x8b7b,0x8d10,0x8d14,0x8daf,0x8e8e,0x8e8c,
-0x8f5e,0x8f5b,0x8f5d,0x9146,0x9144,0x9145,0x91b9,0x943f,
-0x943b,0x9436,0x9429,0x943d,0x943c,0x9430,0x9439,0x942a,
-0x9437,0x942c,0x9440,0x9431,0x95e5,0x95e4,0x95e3,0x9735,
-0x973a,0x97bf,0x97e1,0x9864,0x98c9,0x98c6,0x98c0,0x9958,
-0x9956,0x9a39,0x9a3d,0x9a46,0x9a44,0x9a42,0x9a41,0x9a3a,
-0x9a3f,0x9acd,0x9b15,0x9b17,0x9b18,0x9b16,0x9b3a,0x9b52,
-0x9c2b,0x9c1d,0x9c1c,0x9c2c,0x9c23,0x9c28,0x9c29,0x9c24,
-0x9c21,0x9db7,0x9db6,0x9dbc,0x9dc1,0x9dc7,0x9dca,0x9dcf,
-0x9dbe,0x9dc5,0x9dc3,0x9dbb,0x9db5,0x9dce,0x9db9,0x9dba,
-0x9dac,0x9dc8,0x9db1,0x9dad,0x9dcc,0x9db3,0x9dcd,0x9db2,
-0x9e7a,0x9e9c,0x9eeb,0x9eee,0x9eed,0x9f1b,0x9f18,0x9f1a,
-0x9f31,0x9f4e,0x9f65,0x9f64,0x9f92,0x4eb9,0x56c6,0x56c5,
-0x56cb,0x5971,0x5b4b,0x5b4c,0x5dd5,0x5dd1,0x5ef2,0x6521,
-0x6520,0x6526,0x6522,0x6b0b,0x6b08,0x6b09,0x6c0d,0x7055,
-0x7056,0x7057,0x7052,0x721e,0x721f,0x72a9,0x737f,0x74d8,
-0x74d5,0x74d9,0x74d7,0x766d,0x76ad,0x7935,0x79b4,0x7a70,
-0x7a71,0x7c57,0x7c5c,0x7c59,0x7c5b,0x7c5a,0x7cf4,0x7cf1,
-0x7e91,0x7f4f,0x7f87,0x81de,0x826b,0x8634,0x8635,0x8633,
-0x862c,0x8632,0x8636,0x882c,0x8828,0x8826,0x882a,0x8825,
-0x8971,0x89bf,0x89be,0x89fb,0x8b7e,0x8b84,0x8b82,0x8b86,
-0x8b85,0x8b7f,0x8d15,0x8e95,0x8e94,0x8e9a,0x8e92,0x8e90,
-0x8e96,0x8e97,0x8f60,0x8f62,0x9147,0x944c,0x9450,0x944a,
-0x944b,0x944f,0x9447,0x9445,0x9448,0x9449,0x9446,0x973f,
-0x97e3,0x986a,0x9869,0x98cb,0x9954,0x995b,0x9a4e,0x9a53,
-0x9a54,0x9a4c,0x9a4f,0x9a48,0x9a4a,0x9a49,0x9a52,0x9a50,
-0x9ad0,0x9b19,0x9b2b,0x9b3b,0x9b56,0x9b55,0x9c46,0x9c48,
-0x9c3f,0x9c44,0x9c39,0x9c33,0x9c41,0x9c3c,0x9c37,0x9c34,
-0x9c32,0x9c3d,0x9c36,0x9ddb,0x9dd2,0x9dde,0x9dda,0x9dcb,
-0x9dd0,0x9ddc,0x9dd1,0x9ddf,0x9de9,0x9dd9,0x9dd8,0x9dd6,
-0x9df5,0x9dd5,0x9ddd,0x9eb6,0x9ef0,0x9f35,0x9f33,0x9f32,
-0x9f42,0x9f6b,0x9f95,0x9fa2,0x513d,0x5299,0x58e8,0x58e7,
-0x5972,0x5b4d,0x5dd8,0x882f,0x5f4f,0x6201,0x6203,0x6204,
-0x6529,0x6525,0x6596,0x66eb,0x6b11,0x6b12,0x6b0f,0x6bca,
-0x705b,0x705a,0x7222,0x7382,0x7381,0x7383,0x7670,0x77d4,
-0x7c67,0x7c66,0x7e95,0x826c,0x863a,0x8640,0x8639,0x863c,
-0x8631,0x863b,0x863e,0x8830,0x8832,0x882e,0x8833,0x8976,
-0x8974,0x8973,0x89fe,0x8b8c,0x8b8e,0x8b8b,0x8b88,0x8c45,
-0x8d19,0x8e98,0x8f64,0x8f63,0x91bc,0x9462,0x9455,0x945d,
-0x9457,0x945e,0x97c4,0x97c5,0x9800,0x9a56,0x9a59,0x9b1e,
-0x9b1f,0x9b20,0x9c52,0x9c58,0x9c50,0x9c4a,0x9c4d,0x9c4b,
-0x9c55,0x9c59,0x9c4c,0x9c4e,0x9dfb,0x9df7,0x9def,0x9de3,
-0x9deb,0x9df8,0x9de4,0x9df6,0x9de1,0x9dee,0x9de6,0x9df2,
-0x9df0,0x9de2,0x9dec,0x9df4,0x9df3,0x9de8,0x9ded,0x9ec2,
-0x9ed0,0x9ef2,0x9ef3,0x9f06,0x9f1c,0x9f38,0x9f37,0x9f36,
-0x9f43,0x9f4f,0x9f71,0x9f70,0x9f6e,0x9f6f,0x56d3,0x56cd,
-0x5b4e,0x5c6d,0x652d,0x66ed,0x66ee,0x6b13,0x705f,0x7061,
-0x705d,0x7060,0x7223,0x74db,0x74e5,0x77d5,0x7938,0x79b7,
-0x79b6,0x7c6a,0x7e97,0x7f89,0x826d,0x8643,0x8838,0x8837,
-0x8835,0x884b,0x8b94,0x8b95,0x8e9e,0x8e9f,0x8ea0,0x8e9d,
-0x91be,0x91bd,0x91c2,0x946b,0x9468,0x9469,0x96e5,0x9746,
-0x9743,0x9747,0x97c7,0x97e5,0x9a5e,0x9ad5,0x9b59,0x9c63,
-0x9c67,0x9c66,0x9c62,0x9c5e,0x9c60,0x9e02,0x9dfe,0x9e07,
-0x9e03,0x9e06,0x9e05,0x9e00,0x9e01,0x9e09,0x9dff,0x9dfd,
-0x9e04,0x9ea0,0x9f1e,0x9f46,0x9f74,0x9f75,0x9f76,0x56d4,
-0x652e,0x65b8,0x6b18,0x6b19,0x6b17,0x6b1a,0x7062,0x7226,
-0x72aa,0x77d8,0x77d9,0x7939,0x7c69,0x7c6b,0x7cf6,0x7e9a,
-0x7e98,0x7e9b,0x7e99,0x81e0,0x81e1,0x8646,0x8647,0x8648,
-0x8979,0x897a,0x897c,0x897b,0x89ff,0x8b98,0x8b99,0x8ea5,
-0x8ea4,0x8ea3,0x946e,0x946d,0x946f,0x9471,0x9473,0x9749,
-0x9872,0x995f,0x9c68,0x9c6e,0x9c6d,0x9e0b,0x9e0d,0x9e10,
-0x9e0f,0x9e12,0x9e11,0x9ea1,0x9ef5,0x9f09,0x9f47,0x9f78,
-0x9f7b,0x9f7a,0x9f79,0x571e,0x7066,0x7c6f,0x883c,0x8db2,
-0x8ea6,0x91c3,0x9474,0x9478,0x9476,0x9475,0x9a60,0x9c74,
-0x9c73,0x9c71,0x9c75,0x9e14,0x9e13,0x9ef6,0x9f0a,0x9fa4,
-0x7068,0x7065,0x7cf7,0x866a,0x883e,0x883d,0x883f,0x8b9e,
-0x8c9c,0x8ea9,0x8ec9,0x974b,0x9873,0x9874,0x98cc,0x9961,
-0x99ab,0x9a64,0x9a66,0x9a67,0x9b24,0x9e15,0x9e17,0x9f48,
-0x6207,0x6b1e,0x7227,0x864c,0x8ea8,0x9482,0x9480,0x9481,
-0x9a69,0x9a68,0x9b2e,0x9e19,0x7229,0x864b,0x8b9f,0x9483,
-0x9c79,0x9eb7,0x7675,0x9a6b,0x9c7a,0x9e1d,0x7069,0x706a,
-0x9ea4,0x9f7e,0x9f49,0x9f98,0x7881,0x92b9,0x88cf,0x58bb,
-0x6052,0x7ca7,0x5afa,0x2554,0x2566,0x2557,0x2560,0x256c,
-0x2563,0x255a,0x2569,0x255d,0x2552,0x2564,0x2555,0x255e,
-0x256a,0x2561,0x2558,0x2567,0x255b,0x2553,0x2565,0x2556,
-0x255f,0x256b,0x2562,0x2559,0x2568,0x255c,0x2551,0x2550,
-0x256d,0x256e,0x2570,0x256f,0x2593};
-
-static const int big5_ucs_table_size = sizeof(big5_ucs_table)/sizeof(unsigned short);
-
-/* UCS -> Big5 */
-static const unsigned short ucs_a1_big5_table[] = {
-/* 0x0000 */
-0x0000,0x0001,0x0002,0x0003,0x0004,0x0005,0x0006,0x0007,
-0x0008,0x0009,0x000a,0x000b,0x000c,0x000d,0x000e,0x000f,
-0x0010,0x0011,0x0012,0x0013,0x0014,0x0015,0x0016,0x0017,
-0x0018,0x0019,0x001a,0x001b,0x001c,0x001d,0x001e,0x001f,
-0x0020,0x0021,0x0022,0x0023,0x0024,0x0025,0x0026,0x0027,
-0x0028,0x0029,0x002a,0x002b,0x002c,0x002d,0x002e,0x002f,
-0x0030,0x0031,0x0032,0x0033,0x0034,0x0035,0x0036,0x0037,
-0x0038,0x0039,0x003a,0x003b,0x003c,0x003d,0x003e,0x003f,
-0x0040,0x0041,0x0042,0x0043,0x0044,0x0045,0x0046,0x0047,
-0x0048,0x0049,0x004a,0x004b,0x004c,0x004d,0x004e,0x004f,
-0x0050,0x0051,0x0052,0x0053,0x0054,0x0055,0x0056,0x0057,
-0x0058,0x0059,0x005a,0x005b,0x005c,0x005d,0x005e,0x005f,
-0x0060,0x0061,0x0062,0x0063,0x0064,0x0065,0x0066,0x0067,
-0x0068,0x0069,0x006a,0x006b,0x006c,0x006d,0x006e,0x006f,
-0x0070,0x0071,0x0072,0x0073,0x0074,0x0075,0x0076,0x0077,
-0x0078,0x0079,0x007a,0x007b,0x007c,0x007d,0x007e,0x007f,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xa1b1,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xa1c2,
-0xa258,0xa1d3,0x0000,0x0000,0x0000,0x0000,0x0000,0xa150,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xa1d1,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xa1d2,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-/* 0x0100 */
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-/* 0x0200 */
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xa3be,
-0x0000,0xa3bc,0xa3bd,0xa3bf,0x0000,0xa1c5,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xa3bb,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-/* 0x0300 */
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xa344,0xa345,0xa346,0xa347,0xa348,0xa349,0xa34a,
-0xa34b,0xa34c,0xa34d,0xa34e,0xa34f,0xa350,0xa351,0xa352,
-0xa353,0xa354,0x0000,0xa355,0xa356,0xa357,0xa358,0xa359,
-0xa35a,0xa35b,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xa35c,0xa35d,0xa35e,0xa35f,0xa360,0xa361,0xa362,
-0xa363,0xa364,0xa365,0xa366,0xa367,0xa368,0xa369,0xa36a,
-0xa36b,0xa36c,0x0000,0xa36d,0xa36e,0xa36f,0xa370,0xa371,
-0xa372,0xa373};
-
-static const int ucs_a1_big5_table_min = 0x0000;
-static const int ucs_a1_big5_table_max = 0x0000 + (sizeof (ucs_a1_big5_table) / sizeof (unsigned short));
-
-
-static const unsigned short ucs_a2_big5_table[] = {
-/* 0x2000 */
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xa156,0xa158,0x0000,0x0000,0x0000,
-0xa1a5,0xa1a6,0x0000,0x0000,0xa1a7,0xa1a8,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xa14c,0xa14b,0xa145,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xa1ac,0x0000,0x0000,0xa1ab,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xa1b0,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xa3e1,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-/* 0x2100 */
-0x0000,0x0000,0x0000,0xa24a,0x0000,0xa1c1,0x0000,0x0000,
-0x0000,0xa24b,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xa2b9,0xa2ba,0xa2bb,0xa2bc,0xa2bd,0xa2be,0xa2bf,0xa2c0,
-0xa2c1,0xa2c2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xa1f6,0xa1f4,0xa1f7,0xa1f5,0x0000,0x0000,0xa1f8,0xa1f9,
-0xa1fb,0xa1fa,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-/* 0x2200 */
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xa241,0x0000,0x0000,
-0x0000,0x0000,0xa1d4,0x0000,0x0000,0x0000,0xa1db,0xa1e8,
-0xa1e7,0x0000,0x0000,0xa1fd,0x0000,0xa1fc,0x0000,0x0000,
-0x0000,0xa1e4,0xa1e5,0xa1ec,0x0000,0x0000,0xa1ed,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xa1ef,0xa1ee,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xa1dc,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xa1da,0xa1dd,0x0000,0x0000,0x0000,0x0000,0xa1d8,0xa1d9,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xa1f2,0x0000,0x0000,
-0x0000,0xa1f3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xa1e6,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xa1e9,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-/* 0x2300 */
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-/* 0x2400 */
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xa277,0x0000,0xa278,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xa27a,0x0000,0x0000,0x0000,
-0xa27b,0x0000,0x0000,0x0000,0xa27c,0x0000,0x0000,0x0000,
-0xa27d,0x0000,0x0000,0x0000,0xa275,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xa274,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xa273,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xa272,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xa271,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xf9f9,0xf9f8,0xf9e6,0xf9ef,0xf9dd,0xf9e8,0xf9f1,0xf9df,
-0xf9ec,0xf9f5,0xf9e3,0xf9ee,0xf9f7,0xf9e5,0xf9e9,0xf9f2,
-0xf9e0,0xf9eb,0xf9f4,0xf9e2,0xf9e7,0xf9f0,0xf9de,0xf9ed,
-0xf9f6,0xf9e4,0xf9ea,0xf9f3,0xf9e1,0xf9fa,0xf9fb,0xf9fd,
-0xf9fc,0xa2ac,0xa2ad,0xa2ae,0xa15a,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xa262,0xa263,0xa264,0xa265,0xa266,0xa267,0xa268,
-0xa269,0xa270,0xa26f,0xa26e,0xa26d,0xa26c,0xa26b,0xa26a,
-0x0000,0x0000,0x0000,0xf9fe,0xa276,0xa279,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xa1bd,0xa1bc,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xa1b6,0xa1b5,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xa1bf,0xa1be,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xa1bb,0xa1ba,
-0x0000,0x0000,0x0000,0xa1b3,0x0000,0x0000,0xa1b7,0xa1b4,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xa2a8,0xa2a9,0xa2ab,0xa2aa,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-/* 0x2600 */
-0x0000,0x0000,0x0000,0x0000,0x0000,0xa1b9,0xa1b8,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xa1f0,0x0000,0xa1f1};
-
-static const int ucs_a2_big5_table_min = 0x2000;
-static const int ucs_a2_big5_table_max = 0x2000 + (sizeof (ucs_a2_big5_table) / sizeof (unsigned short));
-
-
-static const unsigned short ucs_a3_big5_table[] = {
-/* 0x2f00 */
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xa140,0xa142,0xa143,0xa1b2,0x0000,0x0000,0x0000,0x0000,
-0xa171,0xa172,0xa16d,0xa16e,0xa175,0xa176,0xa179,0xa17a,
-0xa169,0xa16a,0xa245,0x0000,0xa165,0xa166,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xa1a9,0xa1aa,0x0000,
-0x0000,0xa2c3,0xa2c4,0xa2c5,0xa2c6,0xa2c7,0xa2c8,0xa2c9,
-0xa2ca,0xa2cb,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-/* 0x3100 */
-0x0000,0x0000,0x0000,0x0000,0x0000,0xa374,0xa375,0xa376,
-0xa377,0xa378,0xa379,0xa37a,0xa37b,0xa37c,0xa37d,0xa37e,
-0xa3a1,0xa3a2,0xa3a3,0xa3a4,0xa3a5,0xa3a6,0xa3a7,0xa3a8,
-0xa3a9,0xa3aa,0xa3ab,0xa3ac,0xa3ad,0xa3ae,0xa3af,0xa3b0,
-0xa3b1,0xa3b2,0xa3b3,0xa3b4,0xa3b5,0xa3b6,0xa3b7,0xa3b8,
-0xa3b9,0xa3ba,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-/* 0x3200 */
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xa1c0,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-/* 0x3300 */
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xa255,0xa256,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xa250,0xa251,0xa252,0x0000,
-0x0000,0xa254,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xa257,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xa253,0x0000,
-0x0000,0xa1eb,0xa1ea,0x0000,0x0000,0xa24f};
-
-static const int ucs_a3_big5_table_min = 0x2f00;
-static const int ucs_a3_big5_table_max = 0x2f00 + (sizeof (ucs_a3_big5_table) / sizeof (unsigned short));
-
-static const unsigned short ucs_i_big5_table[] = {
-/* 0x4d00 */
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xa440,0xa442,0x0000,0xa443,0x0000,0x0000,0x0000,0xc945,
-0xa456,0xa454,0xa457,0xa455,0xc946,0xa4a3,0xc94f,0xc94d,
-0xa4a2,0xa4a1,0x0000,0x0000,0xa542,0xa541,0xa540,0x0000,
-0xa543,0xa4fe,0x0000,0x0000,0x0000,0x0000,0xa5e0,0xa5e1,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xa8c3,0x0000,
-0x0000,0x0000,0x0000,0xa458,0x0000,0xa4a4,0xc950,0x0000,
-0xa4a5,0xc963,0xa6ea,0xcbb1,0x0000,0x0000,0x0000,0x0000,
-0xa459,0xa4a6,0x0000,0xa544,0xc964,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xc940,0xa444,0x0000,0xa45b,0x0000,0xc947,
-0xa45c,0x0000,0x0000,0xa4a7,0x0000,0xa545,0xa547,0xa546,
-0x0000,0x0000,0xa5e2,0xa5e3,0x0000,0x0000,0xa8c4,0x0000,
-0xadbc,0xa441,0x0000,0x0000,0xc941,0xa445,0xa45e,0xa45d,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xa5e4,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xa8c5,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xb0ae,0xd44b,
-0x0000,0x0000,0xb6c3,0xdcb1,0xdcb2,0x0000,0xa446,0x0000,
-0xa4a9,0x0000,0x0000,0xa8c6,0xa447,0xc948,0xa45f,0x0000,
-0x0000,0xa4aa,0xa4ac,0xc951,0xa4ad,0xa4ab,0x0000,0x0000,
-0x0000,0xa5e5,0x0000,0xa8c7,0x0000,0x0000,0xa8c8,0xab45,
-0x0000,0xa460,0xa4ae,0x0000,0xa5e6,0xa5e8,0xa5e7,0x0000,
-0xa6eb,0x0000,0x0000,0xa8c9,0xa8ca,0xab46,0xab47,0x0000,
-0x0000,0x0000,0x0000,0xadbd,0x0000,0x0000,0xdcb3,0x0000,
-0x0000,0xf6d6,0xa448,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xa4b0,0xa4af,0xc952,0xa4b1,0xa4b7,0x0000,0xa4b2,0xa4b3,
-0xc954,0xc953,0xa4b5,0xa4b6,0x0000,0xa4b4,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xa54a,0xa54b,0xa54c,0xa54d,
-0xa549,0xa550,0xc96a,0x0000,0xc966,0xc969,0xa551,0xa561,
-0x0000,0xc968,0x0000,0xa54e,0xa54f,0xa548,0x0000,0x0000,
-0xc965,0xc967,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xa5f5,0xc9b0,0xa5f2,0xa5f6,0xc9ba,0xc9ae,0xa5f3,0xc9b2,
-0x0000,0x0000,0x0000,0xa5f4,0x0000,0xa5f7,0x0000,0xa5e9,
-0xc9b1,0xa5f8,0xc9b5,0x0000,0xc9b9,0xc9b6,0x0000,0x0000,
-0xc9b3,0xa5ea,0xa5ec,0xa5f9,0x0000,0xa5ee,0xc9ab,0xa5f1,
-0xa5ef,0xa5f0,0xc9bb,0xc9b8,0xc9af,0xa5ed,0x0000,0x0000,
-0xc9ac,0xa5eb,0x0000,0x0000,0x0000,0xc9b4,0x0000,0x0000,
-0x0000,0x0000,0xc9b7,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xc9ad,0xca66,0x0000,0xa742,
-0xa6f4,0x0000,0x0000,0xca67,0xa6f1,0x0000,0xa744,0x0000,
-0xa6f9,0x0000,0xa6f8,0xca5b,0xa6fc,0xa6f7,0xca60,0xca68,
-0x0000,0xca64,0x0000,0xa6fa,0x0000,0x0000,0xa6fd,0xa6ee,
-0xa747,0xca5d,0x0000,0x0000,0xcbbd,0xa6ec,0xa743,0xa6ed,
-0xa6f5,0xa6f6,0xca62,0xca5e,0xa6fb,0xa6f3,0xca5a,0xa6ef,
-0xca65,0xa745,0xa748,0xa6f2,0xa740,0xa746,0xa6f0,0xca63,
-0xa741,0xca69,0xca5c,0xa6fe,0xca5f,0x0000,0x0000,0xca61,
-0x0000,0xa8d8,0xcbbf,0xcbcb,0xa8d0,0x0000,0xcbcc,0xa8cb,
-0xa8d5,0x0000,0x0000,0xa8ce,0xcbb9,0xa8d6,0xcbb8,0xcbbc,
-0xcbc3,0xcbc1,0xa8de,0xa8d9,0xcbb3,0xcbb5,0xa8db,0xa8cf,
-0xcbb6,0xcbc2,0xcbc9,0xa8d4,0xcbbb,0xcbb4,0xa8d3,0xcbb7,
-0xa8d7,0xcbba,0x0000,0xa8d2,0x0000,0xa8cd,0x0000,0xa8dc,
-0xcbc4,0xa8dd,0xcbc8,0x0000,0xcbc6,0xcbca,0xa8da,0xcbbe,
-0xcbb2,0x0000,0xcbc0,0xa8d1,0xcbc5,0xa8cc,0xcbc7,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xab56,0xab4a,
-0x0000,0x0000,0xcde0,0xcde8,0x0000,0xab49,0xab51,0xab5d,
-0x0000,0xcdee,0xcdec,0xcde7,0x0000,0x0000,0x0000,0xab4b,
-0xcded,0xcde3,0xab59,0xab50,0xab58,0xcdde,0x0000,0xcdea,
-0x0000,0xcde1,0xab54,0xcde2,0x0000,0xcddd,0xab5b,0xab4e,
-0xab57,0xab4d,0x0000,0xcddf,0xcde4,0x0000,0xcdeb,0xab55,
-0xab52,0xcde6,0xab5a,0xcde9,0xcde5,0xab4f,0xab5c,0xab53,
-0xab4c,0xab48,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xcdef,0x0000,0xadd7,0xadc1,
-0x0000,0xadd1,0x0000,0xadd6,0xd0d0,0xd0cf,0xd0d4,0xd0d5,
-0xadc4,0x0000,0xadcd,0x0000,0x0000,0x0000,0xadda,0x0000,
-0xadce,0x0000,0x0000,0x0000,0x0000,0xd0c9,0xadc7,0xd0ca,
-0x0000,0xaddc,0x0000,0xadd3,0xadbe,0xadbf,0xd0dd,0xb0bf,
-0x0000,0xadcc,0xadcb,0xd0cb,0xadcf,0xd45b,0xadc6,0xd0d6,
-0xadd5,0xadd4,0xadca,0xd0ce,0xd0d7,0x0000,0xd0c8,0xadc9,
-0xd0d8,0xadd2,0xd0cc,0xadc0,0x0000,0xadc3,0xadc2,0xd0d9,
-0xadd0,0xadc5,0xadd9,0xaddb,0xd0d3,0xadd8,0x0000,0xd0db,
-0xd0cd,0xd0dc,0x0000,0xd0d1,0x0000,0xd0da,0x0000,0xd0d2,
-0x0000,0x0000,0x0000,0x0000,0xadc8,0x0000,0x0000,0x0000,
-0xd463,0xd457,0x0000,0xb0b3,0x0000,0xd45c,0xd462,0xb0b2,
-0xd455,0xb0b6,0xd459,0xd452,0xb0b4,0xd456,0xb0b9,0xb0be,
-0x0000,0xd467,0x0000,0xd451,0x0000,0xb0ba,0x0000,0xd466,
-0x0000,0x0000,0xb0b5,0xd458,0xb0b1,0xd453,0xd44f,0xd45d,
-0xd450,0xd44e,0xd45a,0xd460,0xd461,0xb0b7,0x0000,0x0000,
-0xd85b,0xd45e,0xd44d,0xd45f,0x0000,0xb0c1,0xd464,0xb0c0,
-0xd44c,0x0000,0xd454,0xd465,0xb0bc,0xb0bb,0xb0b8,0xb0bd,
-0x0000,0x0000,0xb0af,0x0000,0x0000,0xb0b0,0x0000,0x0000,
-0xb3c8,0x0000,0xd85e,0xd857,0x0000,0xb3c5,0x0000,0xd85f,
-0x0000,0x0000,0x0000,0xd855,0xd858,0xb3c4,0xd859,0x0000,
-0x0000,0xb3c7,0xd85d,0x0000,0xd853,0xd852,0xb3c9,0x0000,
-0xb3ca,0xb3c6,0xb3cb,0xd851,0xd85c,0xd85a,0xd854,0x0000,
-0x0000,0x0000,0xb3c3,0xd856,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xb6ca,0xb6c4,0xdcb7,0xb6cd,
-0xdcbd,0xdcc0,0xb6c6,0xb6c7,0xdcba,0xb6c5,0xdcc3,0xb6cb,
-0xdcc4,0x0000,0xdcbf,0xb6cc,0x0000,0xdcb4,0xb6c9,0xdcb5,
-0x0000,0xdcbe,0xdcbc,0x0000,0xdcb8,0xb6c8,0xdcb6,0xb6ce,
-0xdcbb,0xdcc2,0xdcb9,0xdcc1,0x0000,0x0000,0xb9b6,0xb9b3,
-0x0000,0xb9b4,0x0000,0xe0f9,0xe0f1,0xb9b2,0xb9af,0xe0f2,
-0x0000,0x0000,0xb9b1,0xe0f5,0x0000,0xe0f7,0x0000,0x0000,
-0xe0fe,0x0000,0x0000,0xe0fd,0xe0f8,0xb9ae,0xe0f0,0xb9ac,
-0xe0f3,0xb9b7,0xe0f6,0x0000,0xe0fa,0xb9b0,0xb9ad,0xe0fc,
-0xe0fb,0xb9b5,0x0000,0xe0f4,0x0000,0xbbf8,0xe4ec,0x0000,
-0xe4e9,0xbbf9,0x0000,0xbbf7,0x0000,0xe4f0,0xe4ed,0xe4e6,
-0xbbf6,0x0000,0xbbfa,0xe4e7,0xbbf5,0xbbfd,0xe4ea,0xe4eb,
-0xbbfb,0xbbfc,0xe4f1,0xe4ee,0xe4ef,0x0000,0x0000,0x0000,
-0xbeaa,0xe8f8,0xbea7,0xe8f5,0xbea9,0xbeab,0x0000,0xe8f6,
-0xbea8,0x0000,0xe8f7,0x0000,0xe8f4,0x0000,0x0000,0xc076,
-0xecbd,0xc077,0xecbb,0x0000,0xecbc,0xecba,0xecb9,0x0000,
-0x0000,0xecbe,0xc075,0x0000,0x0000,0xefb8,0xefb9,0x0000,
-0xe4e8,0xefb7,0xc078,0xc35f,0xf1eb,0xf1ec,0x0000,0xc4d7,
-0xc4d8,0xf5c1,0xf5c0,0xc56c,0xc56b,0xf7d0,0x0000,0xa449,
-0xa461,0xa4b9,0x0000,0xa4b8,0xa553,0xa552,0xa5fc,0xa5fb,
-0xa5fd,0xa5fa,0x0000,0xa74a,0xa749,0xa74b,0x0000,0x0000,
-0x0000,0x0000,0xa8e0,0x0000,0xa8df,0xa8e1,0x0000,0xab5e,
-0x0000,0xa259,0xd0de,0xa25a,0xb0c2,0xa25c,0xa25b,0xd860,
-0x0000,0xa25d,0xb9b8,0xa25e,0x0000,0xa44a,0x0000,0xa4ba,
-0xa5fe,0xa8e2,0x0000,0xa44b,0xa4bd,0xa4bb,0xa4bc,0x0000,
-0x0000,0xa640,0x0000,0x0000,0x0000,0xa74c,0xa8e4,0xa8e3,
-0xa8e5,0x0000,0x0000,0x0000,0xaddd,0x0000,0x0000,0x0000,
-0xbeac,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xc94e,
-0x0000,0xa554,0xa555,0x0000,0x0000,0xa641,0x0000,0xca6a,
-0x0000,0xab60,0xab5f,0xd0e0,0xd0df,0xb0c3,0x0000,0xa4be,
-0xc955,0x0000,0x0000,0x0000,0x0000,0x0000,0xcbcd,0x0000,
-0xab61,0x0000,0xade0,0x0000,0xadde,0xaddf,0x0000,0x0000,
-0x0000,0x0000,0xbead,0x0000,0xa556,0x0000,0x0000,0x0000,
-0xa642,0xc9bc,0x0000,0x0000,0x0000,0x0000,0xa74d,0xa74e,
-0x0000,0xca6b,0x0000,0x0000,0xcbce,0xa8e6,0xcbcf,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xd0e2,0xd0e3,0xade3,0x0000,
-0xd0e4,0x0000,0xd0e1,0xade4,0xade2,0xade1,0xd0e5,0x0000,
-0xd468,0x0000,0x0000,0x0000,0xd861,0x0000,0x0000,0xdcc5,
-0xe140,0x0000,0x0000,0x0000,0xbbfe,0xbeae,0xe8f9,0x0000,
-0xa44c,0xa45a,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xb0c4,0xb3cd,0x0000,0xb9b9,0x0000,0xc942,0xa4bf,0x0000,
-0xa559,0xa557,0xa558,0x0000,0x0000,0xa8e7,0x0000,0x0000,
-0xa44d,0xa44e,0x0000,0xa462,0x0000,0x0000,0xa4c0,0xa4c1,
-0xa4c2,0xc9be,0xa55a,0x0000,0xc96b,0x0000,0xa646,0x0000,
-0xc9bf,0xa644,0xa645,0xc9bd,0x0000,0x0000,0xa647,0xa643,
-0x0000,0x0000,0x0000,0x0000,0xca6c,0xaaec,0xca6d,0x0000,
-0x0000,0xca6e,0x0000,0x0000,0xa750,0xa74f,0x0000,0x0000,
-0xa753,0xa751,0xa752,0x0000,0x0000,0x0000,0xa8ed,0x0000,
-0xa8ec,0xcbd4,0xcbd1,0xcbd2,0x0000,0xcbd0,0xa8ee,0xa8ea,
-0xa8e9,0x0000,0xa8eb,0xa8e8,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xa8ef,0x0000,0xab63,0xcdf0,0x0000,0xcbd3,0xab68,
-0x0000,0xcdf1,0xab64,0xab67,0xab66,0xab65,0xab62,0x0000,
-0x0000,0x0000,0xd0e8,0x0000,0xade7,0xd0eb,0xade5,0x0000,
-0x0000,0x0000,0xd0e7,0xade8,0xade6,0xade9,0xd0e9,0xd0ea,
-0x0000,0xd0e6,0xd0ec,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xb3d1,0xb0c5,0xd469,0xd46b,0xd46a,0xd46c,0xb0c6,
-0x0000,0x0000,0xb3ce,0x0000,0xb3cf,0xb3d0,0x0000,0xb6d0,
-0xdcc7,0x0000,0xdcc6,0xdcc8,0xdcc9,0xb6d1,0x0000,0xb6cf,
-0xe141,0xe142,0xb9bb,0xb9ba,0xe35a,0x0000,0x0000,0xbc40,
-0xbc41,0xbc42,0xbc44,0xe4f2,0xe4f3,0xbc43,0x0000,0x0000,
-0x0000,0xbeaf,0x0000,0xbeb0,0x0000,0x0000,0xf1ed,0xf5c3,
-0xf5c2,0xf7d1,0x0000,0xa44f,0x0000,0x0000,0x0000,0xa55c,
-0xa55b,0x0000,0x0000,0xa648,0x0000,0x0000,0xc9c0,0x0000,
-0x0000,0xa755,0xa756,0xa754,0xa757,0xca6f,0xca70,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xa8f1,0xcbd5,0x0000,0xa8f0,0x0000,
-0xcdf2,0xab6c,0xcdf3,0xab6b,0x0000,0x0000,0x0000,0xab69,
-0x0000,0xab6a,0x0000,0x0000,0x0000,0xd0ed,0x0000,0x0000,
-0x0000,0x0000,0xb0c7,0xd46e,0x0000,0xb0ca,0xd46d,0xb1e5,
-0xb0c9,0xb0c8,0x0000,0xb3d4,0x0000,0xb3d3,0xb3d2,0xb6d2,
-0x0000,0x0000,0xb6d5,0xb6d6,0xb6d4,0x0000,0xb6d3,0x0000,
-0x0000,0xe143,0x0000,0xe144,0x0000,0x0000,0x0000,0xe4f5,
-0xbc45,0xe4f4,0x0000,0xbeb1,0xecbf,0xc079,0x0000,0xf1ee,
-0xc455,0x0000,0xa463,0xa4c3,0xc956,0x0000,0xa4c4,0xa4c5,
-/* 0x5300 */
-0x0000,0x0000,0x0000,0x0000,0x0000,0xa55d,0xa55e,0x0000,
-0xa649,0xca71,0xcbd6,0xcbd7,0x0000,0xab6d,0xd0ee,0xb0cc,
-0xb0cb,0xd863,0xd862,0x0000,0x0000,0xa450,0xa4c6,0xa55f,
-0x0000,0xb0cd,0xc943,0x0000,0xc96c,0xa560,0x0000,0xc9c2,
-0xa64b,0xa64a,0xc9c1,0xa758,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xadea,0x0000,0x0000,0xd46f,0x0000,0xb6d7,
-0xe145,0xb9bc,0x0000,0x0000,0xe8fa,0x0000,0x0000,0xf3fd,
-0x0000,0xa4c7,0x0000,0x0000,0xcbd8,0xcdf4,0xb0d0,0xb0ce,
-0xb0cf,0xa451,0x0000,0xa464,0xa2cd,0xa4ca,0x0000,0xa4c9,
-0xa4c8,0xa563,0xa562,0x0000,0xc96d,0xc9c3,0x0000,0x0000,
-0x0000,0xa8f5,0xa8f2,0xa8f4,0xa8f3,0x0000,0x0000,0xab6e,
-0x0000,0x0000,0xb3d5,0x0000,0xa452,0x0000,0xa4cb,0x0000,
-0xa565,0xa564,0x0000,0xca72,0x0000,0x0000,0xa8f6,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xc957,0x0000,0xa567,0xa566,
-0xa64c,0xa64d,0xca73,0xa759,0x0000,0xa75a,0x0000,0xa8f7,
-0xa8f8,0xa8f9,0x0000,0xab6f,0xcdf5,0x0000,0x0000,0xadeb,
-0x0000,0x0000,0xc944,0x0000,0xa4cc,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xc9c4,0x0000,0x0000,0x0000,0xca74,0xca75,
-0x0000,0x0000,0xcbd9,0x0000,0xcbda,0x0000,0xcdf7,0xcdf6,
-0xcdf9,0xcdf8,0xab70,0x0000,0xd470,0xaded,0xd0ef,0xadec,
-0x0000,0x0000,0x0000,0x0000,0xd864,0xb3d6,0x0000,0xd865,
-0x0000,0x0000,0x0000,0x0000,0xe146,0xb9bd,0x0000,0x0000,
-0x0000,0x0000,0xbc46,0x0000,0xf1ef,0x0000,0x0000,0x0000,
-0x0000,0xc958,0x0000,0xa568,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xb0d1,0x0000,0x0000,0x0000,0x0000,
-0xa453,0xa465,0xa4ce,0xa4cd,0x0000,0xa4cf,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xa8fb,0x0000,0xa8fa,0xa8fc,
-0x0000,0x0000,0x0000,0xab71,0x0000,0x0000,0x0000,0xadee,
-0x0000,0xe8fb,0xc24f,0xa466,0xa56a,0xa579,0xa574,0x0000,
-0xa56f,0xa56e,0xa575,0xa573,0xa56c,0xa57a,0xa56d,0xa569,
-0xa578,0xa577,0xa576,0xa56b,0x0000,0xa572,0x0000,0x0000,
-0xa571,0x0000,0x0000,0xa57b,0xa570,0x0000,0x0000,0x0000,
-/* 0x5400 */
-0x0000,0xa653,0x0000,0xa659,0xa655,0x0000,0xa65b,0xc9c5,
-0xa658,0xa64e,0xa651,0xa654,0xa650,0xa657,0xa65a,0xa64f,
-0xa652,0xa656,0xa65c,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xca7e,0xca7b,0x0000,0xa767,0xca7c,0xa75b,0xa75d,0xa775,
-0xa770,0x0000,0x0000,0x0000,0xcaa5,0xca7d,0xa75f,0xa761,
-0xcaa4,0xa768,0xca78,0xa774,0xa776,0xa75c,0xa76d,0x0000,
-0xca76,0xa773,0x0000,0xa764,0x0000,0xa76e,0xa76f,0xca77,
-0xa76c,0xa76a,0x0000,0xa76b,0xa771,0xcaa1,0xa75e,0x0000,
-0xa772,0xcaa3,0xa766,0xa763,0x0000,0xca7a,0xa762,0xcaa6,
-0xa765,0x0000,0xa769,0x0000,0x0000,0x0000,0xa760,0xcaa2,
-0x0000,0x0000,0x0000,0x0000,0xca79,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xcbeb,0xcbea,0xa94f,0xcbed,0xcbef,0xcbe4,0xcbe7,0xcbee,
-0xa950,0x0000,0x0000,0xcbe1,0xcbe5,0x0000,0x0000,0xcbe9,
-0xce49,0xa94b,0xce4d,0xa8fd,0xcbe6,0xa8fe,0xa94c,0xa945,
-0xa941,0x0000,0xcbe2,0xa944,0xa949,0xa952,0xcbe3,0xcbdc,
-0xa943,0xcbdd,0xcbdf,0x0000,0xa946,0x0000,0xa948,0xcbdb,
-0xcbe0,0x0000,0x0000,0xa951,0xa94d,0xcbe8,0xa953,0x0000,
-0xa94a,0xcbde,0xa947,0x0000,0x0000,0xa942,0xa940,0x0000,
-0xcbec,0x0000,0xa94e,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xce48,0xcdfb,0xce4b,0x0000,0x0000,0xcdfd,0xab78,0xaba8,
-0xab74,0xaba7,0xab7d,0xaba4,0xab72,0xcdfc,0xce43,0xaba3,
-0xce4f,0xaba5,0x0000,0xab79,0x0000,0x0000,0xce45,0xce42,
-0xab77,0x0000,0xcdfa,0xaba6,0xce4a,0xab7c,0xce4c,0xaba9,
-0xab73,0xab7e,0xab7b,0xce40,0xaba1,0xce46,0xce47,0xab7a,
-0xaba2,0xab76,0x0000,0x0000,0x0000,0x0000,0xab75,0xcdfe,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xce44,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xce4e,0x0000,
-0xd144,0xadfb,0xd0f1,0x0000,0xd0f6,0xadf4,0xae40,0xd0f4,
-0xadef,0xadf9,0xadfe,0xd0fb,0x0000,0xadfa,0xadfd,0x0000,
-0x0000,0xd0fe,0xadf5,0xd0f5,0x0000,0x0000,0x0000,0xd142,
-0xd143,0x0000,0xadf7,0xd141,0xadf3,0xae43,0x0000,0xd0f8,
-/* 0x5500 */
-0x0000,0xadf1,0x0000,0xd146,0xd0f9,0xd0fd,0xadf6,0xae42,
-0xd0fa,0xadfc,0xd140,0xd147,0xd4a1,0x0000,0xd145,0xae44,
-0xadf0,0xd0fc,0xd0f3,0x0000,0xadf8,0x0000,0x0000,0xd0f2,
-0x0000,0x0000,0xd0f7,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xd0f0,0xae41,
-0x0000,0x0000,0xd477,0x0000,0xb0e4,0xd4a7,0xb0e2,0xb0df,
-0xd47c,0xb0db,0xd4a2,0xb0e6,0xd476,0xd47b,0xd47a,0xadf2,
-0xb0e1,0xd4a5,0x0000,0xd4a8,0xd473,0x0000,0xb3e8,0x0000,
-0xd4a9,0xb0e7,0x0000,0xb0d9,0xb0d6,0xd47e,0xb0d3,0x0000,
-0xd4a6,0x0000,0xb0da,0xd4aa,0x0000,0xd474,0xd4a4,0xb0dd,
-0xd475,0xd478,0xd47d,0x0000,0x0000,0xb0de,0xb0dc,0xb0e8,
-0x0000,0x0000,0x0000,0x0000,0xb0e3,0x0000,0xb0d7,0xb1d2,
-0x0000,0xb0d8,0xd479,0xb0e5,0xb0e0,0xd4a3,0xb0d5,0x0000,
-0x0000,0x0000,0xb0d4,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xd471,0xd472,0xd86a,
-0x0000,0x0000,0x0000,0xb3d7,0xb3da,0xd875,0xb3ee,0xd878,
-0xb3d8,0xd871,0xb3de,0xb3e4,0xb5bd,0x0000,0x0000,0xb3e2,
-0xd86e,0xb3ef,0xb3db,0xb3e3,0xd876,0xdcd7,0xd87b,0xd86f,
-0x0000,0xd866,0xd873,0xd86d,0xb3e1,0xd879,0x0000,0x0000,
-0xb3dd,0xb3f1,0xb3ea,0x0000,0xb3df,0xb3dc,0x0000,0xb3e7,
-0x0000,0xd87a,0xd86c,0xd872,0xd874,0xd868,0xd877,0xb3d9,
-0xd867,0x0000,0xb3e0,0xb3f0,0xb3ec,0xd869,0xb3e6,0x0000,
-0x0000,0xb3ed,0xb3e9,0xb3e5,0x0000,0xd870,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xb3eb,0x0000,0x0000,0x0000,0xdcd5,
-0xdcd1,0x0000,0xdce0,0xdcca,0xdcd3,0xb6e5,0xb6e6,0xb6de,
-0xdcdc,0xb6e8,0xdccf,0xdcce,0xdccc,0xdcde,0xb6dc,0xdcd8,
-0xdccd,0xb6df,0xdcd6,0xb6da,0xdcd2,0xdcd9,0xdcdb,0x0000,
-0x0000,0xdcdf,0xb6e3,0xdccb,0xb6dd,0xdcd0,0x0000,0xb6d8,
-0x0000,0xb6e4,0xdcda,0xb6e0,0xb6e1,0xb6e7,0xb6db,0xa25f,
-0xb6d9,0xdcd4,0x0000,0x0000,0x0000,0x0000,0x0000,0xb6e2,
-0x0000,0x0000,0xdcdd,0x0000,0x0000,0x0000,0xb9cd,0xb9c8,
-0x0000,0xe155,0xe151,0x0000,0xe14b,0xb9c2,0xb9be,0xe154,
-0xb9bf,0xe14e,0xe150,0x0000,0xe153,0x0000,0xb9c4,0x0000,
-0xb9cb,0xb9c5,0x0000,0x0000,0xe149,0xb9c6,0xb9c7,0xe14c,
-0xb9cc,0x0000,0xe14a,0xe14f,0xb9c3,0xe148,0xb9c9,0xb9c1,
-0x0000,0x0000,0x0000,0xb9c0,0xe14d,0xe152,0x0000,0xb9ca,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xe147,
-0x0000,0xbc4d,0xe547,0x0000,0xe544,0x0000,0xbc47,0xbc53,
-0xbc54,0x0000,0xbc4a,0xe542,0xbc4c,0xe4f9,0xbc52,0x0000,
-0xe546,0xbc49,0xe548,0xbc48,0x0000,0xe543,0xe545,0xbc4b,
-0xe541,0xe4fa,0xe4f7,0x0000,0x0000,0xd86b,0xe4fd,0x0000,
-0xe4f6,0xe4fc,0xe4fb,0x0000,0xe4f8,0x0000,0xbc4f,0x0000,
-0x0000,0x0000,0x0000,0xbc4e,0x0000,0x0000,0x0000,0xbc50,
-0xe4fe,0xbeb2,0xe540,0x0000,0x0000,0x0000,0xe945,0x0000,
-0xe8fd,0x0000,0xbebe,0xe942,0xbeb6,0xbeba,0xe941,0x0000,
-0xbeb9,0xbeb5,0xbeb8,0xbeb3,0xbebd,0xe943,0xe8fe,0xbebc,
-0xe8fc,0xbebb,0xe944,0xe940,0xbc51,0x0000,0xbebf,0xe946,
-0xbeb7,0xbeb4,0x0000,0x0000,0x0000,0x0000,0xecc6,0xecc8,
-0xc07b,0xecc9,0xecc7,0xecc5,0xecc4,0xc07d,0xecc3,0xc07e,
-0x0000,0x0000,0x0000,0x0000,0xecc1,0xecc2,0xc07a,0xc0a1,
-0xc07c,0x0000,0x0000,0xecc0,0x0000,0xc250,0x0000,0xefbc,
-0xefba,0xefbf,0xefbd,0x0000,0xefbb,0xefbe,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xc360,0xf1f2,0xf1f3,
-0xc456,0x0000,0xf1f4,0xf1f0,0xf1f5,0xf1f1,0xc251,0x0000,
-0x0000,0x0000,0xf3fe,0xf441,0xc459,0xf440,0xc458,0xc457,
-0x0000,0x0000,0x0000,0x0000,0xc45a,0xf5c5,0xf5c6,0x0000,
-0xc4da,0xc4d9,0xc4db,0xf5c4,0x0000,0xf6d8,0xf6d7,0x0000,
-0xc56d,0xc56f,0xc56e,0xf6d9,0xc5c8,0xf8a6,0x0000,0x0000,
-0x0000,0xc5f1,0x0000,0xf8a5,0xf8ee,0x0000,0x0000,0xc949,
-0x0000,0x0000,0xa57d,0xa57c,0x0000,0xa65f,0xa65e,0xc9c7,
-0xa65d,0xc9c6,0x0000,0x0000,0xa779,0xcaa9,0x0000,0xcaa8,
-0x0000,0x0000,0xa777,0xa77a,0x0000,0x0000,0xcaa7,0x0000,
-0xa778,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xcbf0,
-0x0000,0xcbf1,0xa954,0x0000,0x0000,0x0000,0x0000,0xabaa,
-/* 0x5700 */
-0x0000,0xd148,0xd149,0xae45,0xae46,0x0000,0x0000,0xd4ac,
-0xb0e9,0xb0eb,0xd4ab,0xb0ea,0xd87c,0xb3f2,0x0000,0x0000,
-0x0000,0x0000,0xb6e9,0xb6ea,0xdce1,0x0000,0xb9cf,0x0000,
-0xb9ce,0x0000,0xe549,0xe948,0xe947,0x0000,0xf96b,0xa467,
-0xc959,0x0000,0xc96e,0xc96f,0x0000,0x0000,0x0000,0x0000,
-0xa662,0xa666,0xc9c9,0x0000,0xa664,0xa663,0xc9c8,0xa665,
-0xa661,0x0000,0x0000,0xa660,0xc9ca,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xa7a6,0x0000,0x0000,0xa7a3,0x0000,
-0xa77d,0xcaaa,0x0000,0x0000,0x0000,0xcaab,0x0000,0xa7a1,
-0x0000,0xcaad,0xa77b,0xcaae,0xcaac,0xa77e,0xa7a2,0xa7a5,
-0xa7a4,0xa77c,0xcaaf,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xa959,0xcbfe,0x0000,0xa95b,0x0000,0xa95a,0x0000,
-0xcc40,0xa958,0xa957,0xcbf5,0x0000,0xcbf4,0x0000,0xcbf2,
-0xcbf7,0xcbf6,0xcbf3,0xcbfc,0xcbfd,0xcbfa,0xcbf8,0xa956,
-0x0000,0x0000,0x0000,0xcbfb,0xa95c,0xcc41,0x0000,0x0000,
-0xcbf9,0x0000,0xabab,0xa955,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xabac,0xce54,0x0000,0x0000,0xce5a,
-0x0000,0x0000,0x0000,0xabb2,0xce58,0xce5e,0x0000,0xce55,
-0xce59,0xce5b,0xce5d,0xce57,0x0000,0xce56,0xce51,0xce52,
-0xabad,0x0000,0xabaf,0xabae,0xce53,0xce5c,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xabb1,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xce50,0xd153,0x0000,
-0xd152,0xd157,0xd14e,0x0000,0xd151,0xd150,0x0000,0xd154,
-0x0000,0xd158,0xae47,0xae4a,0x0000,0x0000,0xd14f,0xd155,
-0x0000,0x0000,0x0000,0xae49,0xd14a,0x0000,0xabb0,0xd4ba,
-0xd156,0x0000,0xd14d,0x0000,0xae48,0xd14c,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xd4b1,0x0000,0x0000,0xb0ec,
-0xb0f0,0xd4c1,0xd4af,0xd4bd,0xb0f1,0xd4bf,0x0000,0xd4c5,
-0x0000,0xd4c9,0x0000,0x0000,0xd4c0,0xd4b4,0xd4bc,0x0000,
-0xd4ca,0xd4c8,0xd4be,0xd4b9,0xd4b2,0xd8a6,0xd4b0,0xb0f5,
-0xd4b7,0xb0f6,0xb0f2,0xd4ad,0xd4c3,0xd4b5,0x0000,0x0000,
-0xd4b3,0xd4c6,0xb0f3,0x0000,0xd4cc,0xb0ed,0xb0ef,0xd4bb,
-0xd4b6,0xae4b,0xb0ee,0xd4b8,0xd4c7,0xd4cb,0xd4c2,0x0000,
-0xd4c4,0x0000,0x0000,0x0000,0xd4ae,0x0000,0x0000,0x0000,
-0x0000,0xd8a1,0x0000,0xd8aa,0xd8a9,0xb3fa,0xd8a2,0x0000,
-0xb3fb,0xb3f9,0x0000,0xd8a4,0xb3f6,0xd8a8,0x0000,0xd8a3,
-0xd8a5,0xd87d,0xb3f4,0x0000,0xd8b2,0xd8b1,0xd8ae,0xb3f3,
-0xb3f7,0xb3f8,0xd14b,0xd8ab,0xb3f5,0xb0f4,0xd8ad,0xd87e,
-0xd8b0,0xd8af,0x0000,0xd8b3,0x0000,0xdcef,0x0000,0xd8ac,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xd8a7,0xdce7,0xb6f4,0xb6f7,0xb6f2,0xdce6,0xdcea,0xdce5,
-0x0000,0xb6ec,0xb6f6,0xdce2,0xb6f0,0xdce9,0x0000,0xb6ee,
-0xb6ed,0xdcec,0xb6ef,0xdcee,0x0000,0xdceb,0xb6eb,0x0000,
-0x0000,0x0000,0xb6f5,0xdcf0,0xdce4,0xdced,0x0000,0x0000,
-0xdce3,0x0000,0x0000,0xb6f1,0x0000,0xb6f3,0x0000,0xdce8,
-0x0000,0xdcf1,0x0000,0x0000,0xe15d,0xb9d0,0xe163,0x0000,
-0x0000,0xb9d5,0xe15f,0xe166,0xe157,0xb9d7,0xb9d1,0xe15c,
-0xbc55,0xe15b,0xe164,0xb9d2,0x0000,0xb9d6,0xe15a,0xe160,
-0xe165,0xe156,0xb9d4,0xe15e,0x0000,0x0000,0xe162,0xe168,
-0xe158,0xe161,0x0000,0xb9d3,0xe167,0x0000,0x0000,0x0000,
-0xe159,0x0000,0x0000,0x0000,0xbc59,0xe54b,0xbc57,0xbc56,
-0xe54d,0xe552,0x0000,0xe54e,0x0000,0xe551,0xbc5c,0x0000,
-0xbea5,0xbc5b,0x0000,0xe54a,0xe550,0x0000,0xbc5a,0xe54f,
-0x0000,0xe54c,0x0000,0xbc58,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xe94d,0xf9d9,0xe94f,0xe94a,0xbec1,0xe94c,
-0x0000,0xbec0,0xe94e,0x0000,0x0000,0xbec3,0xe950,0xbec2,
-0xe949,0xe94b,0x0000,0x0000,0x0000,0x0000,0xc0a5,0xeccc,
-0x0000,0xc0a4,0xeccd,0xc0a3,0xeccb,0xc0a2,0xecca,0x0000,
-0xc253,0xc252,0xf1f6,0xf1f8,0x0000,0xf1f7,0xc361,0xc362,
-0x0000,0x0000,0xc363,0xf442,0xc45b,0x0000,0x0000,0xf7d3,
-0xf7d2,0xc5f2,0x0000,0xa468,0xa4d0,0x0000,0x0000,0xa7a7,
-0x0000,0x0000,0x0000,0x0000,0xce5f,0x0000,0x0000,0x0000,
-0x0000,0xb3fc,0xb3fd,0x0000,0xdcf2,0xb9d8,0xe169,0xe553,
-/* 0x5900 */
-0x0000,0x0000,0x0000,0xc95a,0x0000,0x0000,0xcab0,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xcc42,0xce60,0xd159,0xae4c,
-0x0000,0x0000,0xf1f9,0x0000,0xc4dc,0xa469,0xa57e,0xc970,
-0x0000,0xa667,0xa668,0x0000,0xa95d,0x0000,0x0000,0x0000,
-0xb0f7,0x0000,0xb9da,0x0000,0xb9db,0xb9d9,0x0000,0xa46a,
-0x0000,0xa4d1,0xa4d3,0xa4d2,0xc95b,0xa4d4,0xa5a1,0xc971,
-0x0000,0xa5a2,0x0000,0x0000,0x0000,0x0000,0x0000,0xa669,
-0xa66a,0x0000,0x0000,0x0000,0xc9cb,0x0000,0xa7a8,0x0000,
-0xcab1,0x0000,0x0000,0x0000,0xa961,0xcc43,0x0000,0xa95f,
-0xa960,0xa95e,0xd15a,0x0000,0x0000,0x0000,0xabb6,0xabb5,
-0xabb7,0xabb4,0x0000,0xce61,0xa962,0xabb3,0x0000,0xae4d,
-0xae4e,0x0000,0xae4f,0x0000,0xd4cd,0x0000,0x0000,0x0000,
-0xb3fe,0xd8b4,0xb0f8,0x0000,0x0000,0x0000,0x0000,0xb6f8,
-0x0000,0xb9dd,0xb9dc,0xe16a,0x0000,0xbc5d,0xbec4,0x0000,
-0xefc0,0xf6da,0xf7d4,0xa46b,0xa5a3,0x0000,0xa5a4,0xc9d1,
-0xa66c,0xa66f,0x0000,0xc9cf,0xc9cd,0xa66e,0xc9d0,0xc9d2,
-0xc9cc,0xa671,0xa670,0xa66d,0xa66b,0xc9ce,0x0000,0x0000,
-0x0000,0x0000,0xa7b3,0x0000,0x0000,0xa7b0,0xcab6,0xcab9,
-0xcab8,0x0000,0xa7aa,0xa7b2,0x0000,0x0000,0xa7af,0xcab5,
-0xcab3,0xa7ae,0x0000,0x0000,0x0000,0xa7a9,0xa7ac,0x0000,
-0xcab4,0xcabb,0xcab7,0xa7ad,0xa7b1,0xa7b4,0xcab2,0xcaba,
-0xa7ab,0x0000,0x0000,0x0000,0x0000,0x0000,0xa967,0xa96f,
-0x0000,0xcc4f,0xcc48,0xa970,0xcc53,0xcc44,0xcc4b,0x0000,
-0x0000,0xa966,0xcc45,0xa964,0xcc4c,0xcc50,0xa963,0x0000,
-0xcc51,0xcc4a,0x0000,0xcc4d,0x0000,0xa972,0xa969,0xcc54,
-0xcc52,0x0000,0xa96e,0xa96c,0xcc49,0xa96b,0xcc47,0xcc46,
-0xa96a,0xa968,0xa971,0xa96d,0xa965,0x0000,0xcc4e,0x0000,
-0xabb9,0x0000,0xabc0,0xce6f,0xabb8,0xce67,0xce63,0x0000,
-0xce73,0xce62,0x0000,0xabbb,0xce6c,0xabbe,0xabc1,0x0000,
-0xabbc,0xce70,0xabbf,0x0000,0xae56,0xce76,0xce64,0x0000,
-0x0000,0xce66,0xce6d,0xce71,0xce75,0xce72,0xce6b,0xce6e,
-0x0000,0x0000,0xce68,0xabc3,0xce6a,0xce69,0xce74,0xabba,
-0xce65,0xabc2,0x0000,0xabbd,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xae5c,0xd162,0x0000,0xae5b,0x0000,0x0000,0xd160,
-0x0000,0xae50,0x0000,0xae55,0x0000,0xd15f,0xd15c,0xd161,
-0xae51,0xd15b,0x0000,0xae54,0xae52,0x0000,0xd163,0xae53,
-0xae57,0x0000,0x0000,0xae58,0x0000,0xae5a,0x0000,0x0000,
-0x0000,0xae59,0x0000,0x0000,0x0000,0xd15d,0xd15e,0x0000,
-0x0000,0x0000,0x0000,0xd164,0x0000,0xd4d4,0xb0f9,0xd8c2,
-0xd4d3,0xd4e6,0x0000,0x0000,0xb140,0x0000,0xd4e4,0x0000,
-0xb0fe,0xb0fa,0xd4ed,0xd4dd,0xd4e0,0x0000,0xb143,0xd4ea,
-0xd4e2,0xb0fb,0xb144,0x0000,0xd4e7,0xd4e5,0x0000,0x0000,
-0xd4d6,0xd4eb,0xd4df,0xd4da,0x0000,0xd4d0,0xd4ec,0xd4dc,
-0xd4cf,0x0000,0xb142,0xd4e1,0xd4ee,0xd4de,0xd4d2,0xd4d7,
-0xd4ce,0x0000,0xb141,0x0000,0xd4db,0xd4d8,0xb0fc,0xd4d1,
-0x0000,0xd4e9,0xb0fd,0x0000,0xd4d9,0xd4d5,0x0000,0x0000,
-0xd4e8,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xb440,
-0xd8bb,0x0000,0xd8b8,0xd8c9,0xd8bd,0xd8ca,0x0000,0xb442,
-0x0000,0x0000,0x0000,0xd8c6,0xd8c3,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xd8c4,0xd8c7,0xd8cb,0x0000,0xd4e3,0xd8cd,
-0xdd47,0x0000,0xb443,0xd8ce,0xd8b6,0xd8c0,0x0000,0xd8c5,
-0x0000,0x0000,0xb441,0xb444,0xd8cc,0xd8cf,0xd8ba,0xd8b7,
-0x0000,0x0000,0xd8b9,0x0000,0x0000,0xd8be,0xd8bc,0xb445,
-0x0000,0xd8c8,0x0000,0x0000,0xd8bf,0x0000,0xd8c1,0xd8b5,
-0xdcfa,0xdcf8,0xb742,0xb740,0xdd43,0xdcf9,0xdd44,0xdd40,
-0xdcf7,0xdd46,0xdcf6,0xdcfd,0xb6fe,0xb6fd,0xb6fc,0xdcfb,
-0xdd41,0xb6f9,0xb741,0x0000,0xdcf4,0x0000,0xdcfe,0xdcf3,
-0xdcfc,0xb6fa,0xdd42,0xdcf5,0xb6fb,0xdd45,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xe16e,0xb9e2,0xb9e1,
-0xb9e3,0xe17a,0xe170,0xe176,0xe16b,0xe179,0xe178,0xe17c,
-0xe175,0xb9de,0xe174,0xb9e4,0x0000,0xe16d,0xb9df,0x0000,
-0xe17b,0xb9e0,0xe16f,0xe172,0xe177,0xe171,0xe16c,0x0000,
-0x0000,0x0000,0x0000,0xe173,0xe555,0xbc61,0xe558,0xe557,
-0xe55a,0xe55c,0xf9dc,0xbc5f,0x0000,0xe556,0x0000,0xe554,
-/* 0x5b00 */
-0x0000,0xe55d,0xe55b,0xe559,0x0000,0xe55f,0x0000,0xe55e,
-0xbc63,0xbc5e,0x0000,0xbc60,0xbc62,0x0000,0x0000,0xe560,
-0xe957,0x0000,0x0000,0xe956,0xe955,0x0000,0xe958,0xe951,
-0x0000,0xe952,0xe95a,0xe953,0x0000,0xbec5,0xe95c,0x0000,
-0xe95b,0xe954,0x0000,0xecd1,0xc0a8,0xeccf,0xecd4,0xecd3,
-0xe959,0x0000,0xc0a7,0x0000,0xecd2,0xecce,0xecd6,0xecd5,
-0xc0a6,0x0000,0xecd0,0x0000,0xbec6,0x0000,0x0000,0x0000,
-0xc254,0x0000,0x0000,0x0000,0xefc1,0xf1fa,0xf1fb,0xf1fc,
-0xc45c,0x0000,0x0000,0xc45d,0x0000,0xf443,0x0000,0xf5c8,
-0xf5c7,0x0000,0x0000,0xf6db,0xf6dc,0xf7d5,0xf8a7,0x0000,
-0xa46c,0xa46d,0x0000,0xa46e,0xa4d5,0xa5a5,0xc9d3,0xa672,
-0xa673,0x0000,0xa7b7,0xa7b8,0xa7b6,0xa7b5,0x0000,0xa973,
-0x0000,0x0000,0xcc55,0xa975,0xa974,0xcc56,0x0000,0x0000,
-0x0000,0xabc4,0x0000,0xae5d,0xd165,0x0000,0xd4f0,0x0000,
-0xb145,0xb447,0xd4ef,0xb446,0x0000,0xb9e5,0x0000,0xe17d,
-0xbec7,0x0000,0xc0a9,0xecd7,0x0000,0xc45e,0x0000,0xc570,
-0x0000,0xc972,0x0000,0xa5a6,0xc973,0xa676,0x0000,0xa674,
-0xa675,0xa677,0x0000,0xa7ba,0xa7b9,0x0000,0xcabc,0xa7bb,
-0x0000,0x0000,0xcabd,0xcc57,0x0000,0xcc58,0x0000,0xa976,
-0xa978,0xa97a,0xa977,0xa97b,0xa979,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xabc8,0xabc5,0xabc7,0xabc9,0xabc6,0xd166,
-0xce77,0x0000,0x0000,0x0000,0xd168,0xd167,0xae63,0x0000,
-0xae5f,0x0000,0x0000,0xae60,0xae62,0xae64,0xae61,0x0000,
-0xae66,0xae65,0x0000,0x0000,0x0000,0x0000,0x0000,0xb14a,
-0xd4f2,0xd4f1,0xb149,0x0000,0xb148,0xb147,0xb14b,0xb146,
-0x0000,0x0000,0xd8d5,0xd8d2,0xb449,0xd8d1,0xd8d6,0x0000,
-0xb44b,0xd8d4,0xb448,0xb44a,0xd8d3,0x0000,0xdd48,0x0000,
-0xdd49,0xdd4a,0x0000,0x0000,0x0000,0x0000,0xb9e6,0xb9ee,
-0xe17e,0xb9e8,0xb9ec,0xe1a1,0xb9ed,0xb9e9,0xb9ea,0xb9e7,
-0xb9eb,0xbc66,0xd8d0,0xbc67,0xbc65,0x0000,0xbc64,0xe95d,
-0xbec8,0xecd8,0xecd9,0x0000,0x0000,0xc364,0xc45f,0x0000,
-0xa46f,0x0000,0xa678,0x0000,0x0000,0x0000,0x0000,0x0000,
-/* 0x5c00 */
-0x0000,0xabca,0x0000,0xd169,0xae67,0x0000,0x0000,0xb14e,
-0xb14d,0xb14c,0xb44c,0xb44d,0xd8d7,0xb9ef,0xbec9,0xa470,
-0xc95c,0xa4d6,0xc974,0x0000,0x0000,0xc9d4,0xa679,0x0000,
-0x0000,0x0000,0xa97c,0x0000,0x0000,0x0000,0x0000,0xdd4b,
-0x0000,0x0000,0xa471,0x0000,0xa4d7,0xc9d5,0x0000,0x0000,
-0xcabe,0x0000,0xcabf,0x0000,0xa7bc,0x0000,0x0000,0x0000,
-0xd8d8,0xb44e,0x0000,0xdd4c,0x0000,0x0000,0x0000,0xc0aa,
-0xa472,0xa4a8,0xa4d8,0xc975,0xa5a7,0x0000,0xa7c0,0xa7bf,
-0xa7bd,0xa7be,0x0000,0x0000,0xcc59,0xa97e,0xa9a1,0xcc5a,
-0xa97d,0x0000,0x0000,0xabce,0xce78,0xabcd,0xabcb,0xabcc,
-0xae6a,0xae68,0x0000,0x0000,0xd16b,0xae69,0xd16a,0x0000,
-0xae5e,0xd4f3,0x0000,0x0000,0xb150,0xb151,0x0000,0x0000,
-0xb14f,0x0000,0xb9f0,0xe1a2,0xbc68,0xbc69,0x0000,0xe561,
-0xc0ab,0xefc2,0xefc3,0x0000,0xc4dd,0xf8a8,0xc94b,0xa4d9,
-0x0000,0xa473,0x0000,0xc977,0xc976,0x0000,0x0000,0x0000,
-0x0000,0xa67a,0xc9d7,0xc9d8,0xc9d6,0x0000,0xc9d9,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xcac7,0x0000,
-0xcac2,0xcac4,0xcac6,0xcac3,0xa7c4,0xcac0,0x0000,0xcac1,
-0xa7c1,0xa7c2,0xcac5,0xcac8,0xa7c3,0xcac9,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xcc68,0x0000,0xcc62,
-0xcc5d,0xa9a3,0xcc65,0xcc63,0xcc5c,0xcc69,0xcc6c,0xcc67,
-0xcc60,0xa9a5,0xcc66,0xa9a6,0xcc61,0xcc64,0xcc5b,0xcc5f,
-0xcc6b,0xa9a7,0x0000,0xa9a8,0x0000,0xcc5e,0xcc6a,0xa9a2,
-0xa9a4,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xceab,0xcea4,
-0xceaa,0xcea3,0xcea5,0xce7d,0xce7b,0x0000,0xceac,0xcea9,
-0xce79,0x0000,0xabd0,0xcea7,0xcea8,0x0000,0xcea6,0xce7c,
-0xce7a,0xabcf,0xcea2,0xce7e,0x0000,0x0000,0xcea1,0xcead,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xae6f,0x0000,0xae6e,0x0000,0xd16c,0xae6b,0xd16e,0x0000,
-0xae70,0xd16f,0x0000,0x0000,0xae73,0x0000,0xae71,0xd170,
-0xceae,0xd172,0x0000,0xae6d,0x0000,0xae6c,0x0000,0xd16d,
-0xd171,0xae72,0x0000,0x0000,0x0000,0x0000,0xb153,0xb152,
-0x0000,0x0000,0x0000,0xd4f5,0xd4f9,0xd4fb,0xb154,0xd4fe,
-0x0000,0xb158,0xd541,0x0000,0xb15a,0x0000,0xb156,0xb15e,
-0x0000,0xb15b,0xd4f7,0xb155,0x0000,0xd4f6,0xd4f4,0xd543,
-0xd4f8,0x0000,0xb157,0xd542,0xb15c,0xd4fd,0xd4fc,0xb15d,
-0xd4fa,0xb159,0x0000,0x0000,0x0000,0x0000,0xd544,0x0000,
-0xd540,0xd8e7,0xd8ee,0xd8e3,0xb451,0xd8df,0xd8ef,0xd8d9,
-0xd8ec,0xd8ea,0xd8e4,0x0000,0xd8ed,0xd8e6,0x0000,0xd8de,
-0xd8f0,0xd8dc,0xd8e9,0xd8da,0x0000,0xd8f1,0x0000,0xb452,
-0x0000,0xd8eb,0xdd4f,0xd8dd,0xb44f,0x0000,0xd8e1,0x0000,
-0xb450,0xd8e0,0xd8e5,0x0000,0x0000,0xd8e2,0x0000,0x0000,
-0x0000,0xd8e8,0x0000,0x0000,0x0000,0x0000,0xdd53,0x0000,
-0x0000,0x0000,0xdd56,0xdd4e,0x0000,0xdd50,0x0000,0xdd55,
-0xdd54,0xb743,0x0000,0xd8db,0xdd52,0x0000,0x0000,0xb744,
-0x0000,0xdd4d,0xdd51,0x0000,0x0000,0x0000,0x0000,0xe1a9,
-0x0000,0xe1b0,0xe1a7,0x0000,0xe1ae,0xe1a5,0xe1ad,0xe1b1,
-0xe1a4,0xe1a8,0xe1a3,0x0000,0xb9f1,0x0000,0xe1a6,0xb9f2,
-0xe1ac,0xe1ab,0xe1aa,0x0000,0x0000,0xe1af,0x0000,0x0000,
-0x0000,0x0000,0xe565,0xe567,0xbc6b,0xe568,0x0000,0xe563,
-0x0000,0xe562,0xe56c,0x0000,0xe56a,0xbc6a,0xe56d,0xe564,
-0xe569,0xe56b,0xe566,0x0000,0x0000,0x0000,0x0000,0xe961,
-0xe966,0xe960,0xe965,0x0000,0xe95e,0xe968,0xe964,0xe969,
-0xe963,0xe95f,0xe967,0x0000,0xe96a,0xe962,0x0000,0xecda,
-0xc0af,0x0000,0xc0ad,0x0000,0xc0ac,0xc0ae,0x0000,0x0000,
-0xefc4,0x0000,0xf172,0xf1fd,0x0000,0x0000,0xf444,0xf445,
-0x0000,0xc460,0x0000,0xf5c9,0x0000,0xc4de,0x0000,0xf5ca,
-0x0000,0xf6de,0xc572,0x0000,0xc571,0xf6dd,0xc5c9,0x0000,
-0xf7d6,0x0000,0x0000,0x0000,0x0000,0xa474,0xa67b,0xc9da,
-0xcaca,0xa8b5,0xb15f,0x0000,0x0000,0xa475,0xa5aa,0xa5a9,
-0xa5a8,0x0000,0x0000,0xa7c5,0x0000,0x0000,0xae74,0x0000,
-0xdd57,0xa476,0xa477,0xa478,0xa4da,0x0000,0x0000,0xabd1,
-0x0000,0xceaf,0x0000,0x0000,0x0000,0xb453,0xa479,0xc95d,
-/* 0x5e00 */
-0x0000,0x0000,0xa5ab,0xa5ac,0xc978,0x0000,0xa67c,0x0000,
-0x0000,0x0000,0xcacb,0x0000,0xa7c6,0x0000,0xcacc,0x0000,
-0x0000,0xa9ae,0x0000,0x0000,0xcc6e,0xa9ac,0xa9ab,0xcc6d,
-0xa9a9,0xcc6f,0xa9aa,0xa9ad,0x0000,0xabd2,0x0000,0xabd4,
-0xceb3,0xceb0,0xceb1,0xceb2,0xceb4,0xabd3,0x0000,0x0000,
-0xd174,0xd173,0x0000,0xae76,0x0000,0xae75,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xb162,0xd546,0x0000,0xb161,0xb163,
-0xb160,0x0000,0x0000,0x0000,0x0000,0xb455,0xd545,0x0000,
-0xb456,0xd8f3,0x0000,0xb457,0xd8f2,0xb454,0x0000,0x0000,
-0x0000,0x0000,0xdd5a,0xdd5c,0xb745,0xdd5b,0xdd59,0xdd58,
-0x0000,0x0000,0x0000,0xe1b4,0xb9f7,0xb9f5,0x0000,0xb9f6,
-0xe1b2,0xe1b3,0x0000,0xb9f3,0xe571,0xe56f,0x0000,0xbc6d,
-0xe570,0xbc6e,0xbc6c,0xb9f4,0x0000,0x0000,0xe96d,0xe96b,
-0xe96c,0xe56e,0xecdc,0xc0b0,0xecdb,0xefc5,0xefc6,0xe96e,
-0xf1fe,0x0000,0xa47a,0xa5ad,0xa67e,0xc9db,0xa67d,0x0000,
-0xa9af,0xb746,0x0000,0xa4db,0xa5ae,0xabd5,0xb458,0x0000,
-0xc979,0x0000,0xc97a,0x0000,0xc9dc,0x0000,0x0000,0xa7c8,
-0xcad0,0xcace,0xa7c9,0xcacd,0xcacf,0xcad1,0x0000,0xa7c7,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xa9b3,0xa9b4,0xa9b1,
-0x0000,0x0000,0xa9b0,0xceb8,0xa9b2,0x0000,0x0000,0x0000,
-0xabd6,0x0000,0xceb7,0xceb9,0xceb6,0xceba,0xabd7,0xae79,
-0xd175,0x0000,0xd177,0xae77,0xd178,0xae78,0xd176,0x0000,
-0xceb5,0xd547,0xd54a,0xd54b,0xd548,0xb167,0xb166,0xb164,
-0xb165,0xd549,0x0000,0x0000,0x0000,0x0000,0xb168,0x0000,
-0x0000,0xb45a,0xb45b,0x0000,0xb45c,0xdd5d,0xdd5f,0xdd61,
-0xb748,0xb747,0xb459,0xdd60,0xdd5e,0x0000,0xe1b8,0x0000,
-0x0000,0xe1b6,0xe1bc,0xb9f8,0xe1bd,0xe1ba,0xb9f9,0xe1b7,
-0xe1b5,0xe1bb,0xbc70,0xe573,0xe1b9,0xbc72,0xe574,0xbc71,
-0xbc74,0xe575,0xbc6f,0xbc73,0x0000,0xe973,0xe971,0xe970,
-0xe972,0xe96f,0x0000,0x0000,0xc366,0x0000,0xf446,0xf447,
-0x0000,0xf5cb,0xf6df,0xc655,0x0000,0x0000,0xa9b5,0xa7ca,
-0x0000,0x0000,0xabd8,0x0000,0x0000,0x0000,0xa47b,0xa4dc,
-/* 0x5f00 */
-0x0000,0xa5af,0xc9dd,0x0000,0xa7cb,0xcad2,0x0000,0xcebb,
-0xabd9,0x0000,0xb9fa,0xa47c,0x0000,0x0000,0x0000,0xa6a1,
-0x0000,0x0000,0xb749,0xa47d,0xa4dd,0xa4de,0x0000,0xa5b1,
-0xa5b0,0x0000,0xc9de,0xa6a2,0x0000,0xcad3,0x0000,0xa7cc,
-0x0000,0x0000,0xcc71,0xcc72,0xcc73,0x0000,0xa9b6,0xa9b7,
-0xcc70,0xa9b8,0x0000,0x0000,0x0000,0xabda,0xcebc,0x0000,
-0xd17a,0xae7a,0x0000,0xd179,0x0000,0xb169,0xd54c,0xb16a,
-0xd54d,0x0000,0x0000,0x0000,0xb45d,0x0000,0x0000,0x0000,
-0xdd62,0x0000,0x0000,0xe1bf,0xe1be,0x0000,0xb9fb,0x0000,
-0xbc75,0xe576,0xbeca,0xe974,0xc0b1,0x0000,0xc573,0xf7d8,
-0x0000,0x0000,0x0000,0x0000,0xcc74,0x0000,0xcebd,0xb16b,
-0xd8f4,0xb74a,0x0000,0x0000,0x0000,0xc255,0x0000,0x0000,
-0x0000,0x0000,0xa7ce,0x0000,0xa7cd,0xabdb,0x0000,0xd17b,
-0x0000,0xb16d,0xb343,0xb16e,0xb16c,0xb45e,0x0000,0xe1c0,
-0xb9fc,0xbc76,0x0000,0xc94c,0xc9df,0x0000,0xcad5,0xa7cf,
-0xcad4,0xa7d0,0x0000,0x0000,0xa9bc,0xcc77,0xcc76,0xa9bb,
-0xa9b9,0xa9ba,0xcc75,0x0000,0x0000,0xabdd,0xcebe,0xabe0,
-0xabdc,0xabe2,0xabde,0xabdf,0xabe1,0x0000,0x0000,0x0000,
-0xae7d,0xae7c,0xae7b,0x0000,0x0000,0x0000,0xd54f,0xb16f,
-0xb172,0xb170,0x0000,0xd54e,0xb175,0x0000,0xb171,0xd550,
-0xb174,0xb173,0x0000,0x0000,0x0000,0xd8f6,0xd8f5,0x0000,
-0xb461,0xb45f,0xb460,0xd8f7,0xb74b,0xdd64,0xb74c,0xdd63,
-0x0000,0x0000,0xe577,0x0000,0x0000,0xbc78,0xe1c1,0xbc77,
-0x0000,0xb9fd,0x0000,0xecde,0xe975,0xc0b2,0xecdd,0xf240,
-0xf448,0xf449,0x0000,0xa4df,0x0000,0xa5b2,0x0000,0x0000,
-0x0000,0xc97b,0x0000,0x0000,0xa7d2,0xa7d4,0x0000,0xc9e2,
-0xcad8,0xcad7,0xcad6,0x0000,0xc9e1,0xc9e0,0xa6a4,0xa7d3,
-0xa7d1,0xa6a3,0x0000,0x0000,0x0000,0xa9bd,0xcc78,0x0000,
-0xa9be,0xcadd,0x0000,0xcadf,0xcade,0xcc79,0x0000,0x0000,
-0xcada,0x0000,0xa7d8,0xa7d6,0x0000,0xcad9,0xcadb,0xcae1,
-0x0000,0xa7d5,0x0000,0xcadc,0xcae5,0xa9c0,0x0000,0xcae2,
-0xa7d7,0x0000,0xcae0,0xcae3,0x0000,0xa9bf,0x0000,0xa9c1,
-0xcae4,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xccaf,0xcca2,0xcc7e,0xccae,0xcca9,0xabe7,0xa9c2,
-0xccaa,0xccad,0xabe3,0xccac,0xa9c3,0xa9c8,0xa9c6,0xcca3,
-0x0000,0xcc7c,0xcca5,0xa9cd,0xccb0,0xabe4,0xcca6,0x0000,
-0xabe5,0xa9c9,0xcca8,0x0000,0xcecd,0xabe6,0xcc7b,0xa9ca,
-0xabe8,0xa9cb,0xa9c7,0xa9cc,0xcca7,0xcc7a,0xccab,0xa9c4,
-0x0000,0x0000,0xcc7d,0xcca4,0xcca1,0xa9c5,0x0000,0xcebf,
-0x0000,0xcec0,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xceca,0xd1a1,0xcecb,0xabee,0xcece,0xcec4,0xabed,0xcec6,
-0x0000,0xcec7,0x0000,0x0000,0xcec9,0xabe9,0x0000,0x0000,
-0xaea3,0x0000,0xf9da,0xcec5,0xcec1,0xaea4,0x0000,0x0000,
-0xcecf,0xae7e,0xd17d,0xcec8,0x0000,0xd17c,0xcec3,0xcecc,
-0x0000,0x0000,0xabec,0xaea1,0xabf2,0xaea2,0xced0,0xd17e,
-0xabeb,0xaea6,0xabf1,0xabf0,0xabef,0xaea5,0xced1,0xaea7,
-0xabea,0x0000,0xcec2,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xb176,
-0xd1a4,0xd1a6,0x0000,0xd1a8,0xaea8,0xaeae,0xd553,0xd1ac,
-0xd1a3,0xb178,0xd551,0x0000,0xaead,0xaeab,0xd1ae,0x0000,
-0xd552,0x0000,0xd1a5,0x0000,0xaeac,0xd1a9,0xaeaf,0xd1ab,
-0x0000,0x0000,0xaeaa,0xd1aa,0xd1ad,0xd1a7,0x0000,0xaea9,
-0xb179,0x0000,0xd1a2,0xb177,0x0000,0x0000,0x0000,0x0000,
-0xb17a,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xd555,0xd55e,0xb464,0x0000,0xb17c,0xb1a3,0xb465,0xd560,
-0xb1aa,0xd8f9,0xd556,0xb1a2,0xb1a5,0xb17e,0xd554,0xd562,
-0xd565,0xd949,0x0000,0xd563,0xd8fd,0xb1a1,0xb1a8,0xb1ac,
-0xd55d,0xd8f8,0xd561,0xb17b,0xd8fa,0xd564,0xd8fc,0xd559,
-0x0000,0xb462,0x0000,0xd557,0xd558,0xb1a7,0x0000,0x0000,
-0xb1a6,0xd55b,0xb1ab,0xd55f,0xb1a4,0xd55c,0x0000,0xb1a9,
-0xb466,0xb463,0xd8fb,0x0000,0xd55a,0x0000,0xb17d,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xb46b,0xb46f,0xd940,0xb751,0xb46d,0xd944,0xb471,0xdd65,
-0xd946,0xb753,0xb469,0xb46c,0xd947,0x0000,0xd948,0xd94e,
-0xb473,0xb754,0x0000,0xd94a,0xd94f,0xd943,0xb75e,0x0000,
-0xb755,0xb472,0xd941,0xd950,0x0000,0xb75d,0xb470,0xb74e,
-0xd94d,0x0000,0xb474,0xd945,0xd8fe,0xb46a,0xd942,0x0000,
-0xd94b,0x0000,0xb74d,0xb752,0xb467,0xd94c,0x0000,0xb750,
-0x0000,0x0000,0x0000,0xb468,0x0000,0x0000,0x0000,0xb75c,
-0xe1c3,0xdd70,0x0000,0xdd68,0xe1c2,0x0000,0xdd6c,0xdd6e,
-0x0000,0x0000,0xdd6b,0x0000,0xb75b,0x0000,0xdd6a,0xb75f,
-0x0000,0x0000,0x0000,0xe1d2,0x0000,0x0000,0xb75a,0xba40,
-0xdd71,0xe1c4,0x0000,0x0000,0xb758,0xdd69,0xdd6d,0xb9fe,
-0xb74f,0xdd66,0xdd67,0xba41,0xb757,0xb759,0xb756,0xdd6f,
-0x0000,0x0000,0xe1c8,0xe1c9,0xe1ce,0xbc7d,0xe1d5,0x0000,
-0xba47,0x0000,0xba46,0xe1d0,0x0000,0xbc7c,0xe1c5,0xba45,
-0x0000,0xe1d4,0xba43,0xba44,0x0000,0xe1d1,0xe5aa,0xbc7a,
-0xb46e,0x0000,0xe1d3,0xbca3,0xe1cb,0x0000,0xbc7b,0x0000,
-0xbca2,0xe1c6,0xe1ca,0xe1c7,0xe1cd,0xba48,0xbc79,0xba42,
-0x0000,0xe57a,0xe1cf,0x0000,0xbca1,0x0000,0xbca4,0x0000,
-0xe1cc,0x0000,0xbc7e,0xe579,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xe57e,0xbece,0xe578,0xe9a3,0xe5a9,0xbca8,0x0000,
-0xbca6,0xbecc,0xe5a6,0xe5a2,0xbcac,0x0000,0xe978,0x0000,
-0x0000,0x0000,0xbcaa,0xe5a1,0x0000,0xe976,0x0000,0xe5a5,
-0x0000,0xe5a8,0xe57d,0x0000,0xbcab,0x0000,0x0000,0xbca5,
-0xe977,0xbecd,0xe5a7,0xbca7,0xbca9,0xe5a4,0xbcad,0xe5a3,
-0xe57c,0xe57b,0xbecb,0xe5ab,0xe97a,0xece0,0xbed0,0x0000,
-0xe9a2,0x0000,0xe97e,0x0000,0xece1,0x0000,0xbed1,0xe9a1,
-0x0000,0xe97c,0xc0b4,0xecdf,0x0000,0xe979,0xe97b,0xc0b5,
-0xbed3,0xc0b3,0xbed2,0xc0b7,0xe97d,0xbecf,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xefcf,0x0000,
-0xefc7,0x0000,0x0000,0x0000,0x0000,0x0000,0xece7,0xefc8,
-0xece3,0x0000,0x0000,0xc256,0xece5,0xece4,0xc0b6,0xece2,
-0xece6,0xefd0,0xefcc,0xefce,0x0000,0xefc9,0xefca,0x0000,
-0xefcd,0xefcb,0xc367,0x0000,0x0000,0xc36a,0xc369,0xc368,
-0xc461,0xf44a,0xc462,0xf241,0xc4df,0xf5cc,0xc4e0,0xc574,
-0xc5ca,0xf7d9,0x0000,0xf7da,0xf7db,0x0000,0x0000,0xf9ba,
-0xa4e0,0xc97c,0xa5b3,0x0000,0xa6a6,0xa6a7,0xa6a5,0x0000,
-0xa6a8,0xa7da,0xa7d9,0x0000,0xccb1,0xa9cf,0xa9ce,0x0000,
-0x0000,0xd1af,0xb1ad,0xb1ae,0x0000,0x0000,0x0000,0xb475,
-0xdd72,0xb760,0xb761,0xdd74,0xdd76,0xdd75,0x0000,0xe1d7,
-0x0000,0xe1d6,0xba49,0xe1d8,0x0000,0xe5ac,0xbcae,0x0000,
-0xbed4,0x0000,0xc0b8,0xc257,0xc0b9,0x0000,0xa4e1,0x0000,
-0x0000,0x0000,0xcae6,0x0000,0x0000,0xccb2,0xa9d1,0xa9d0,
-0xa9d2,0xabf3,0xced2,0xced3,0x0000,0x0000,0xd1b0,0xaeb0,
-0xb1af,0xb476,0xd951,0xa4e2,0x0000,0xa47e,0xa4e3,0x0000,
-0xc97d,0xa5b7,0xa5b6,0xa5b4,0xa5b5,0x0000,0x0000,0x0000,
-0xa6ab,0xc9e9,0xc9eb,0xa6aa,0xc9e3,0x0000,0xc9e4,0x0000,
-0xc9ea,0xc9e6,0xc9e8,0xa6a9,0xc9e5,0xc9ec,0xc9e7,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xa7e1,0xa7ea,0xa7e8,
-0xcaf0,0xcaed,0xcaf5,0xa7e6,0xcaf6,0x0000,0xa7df,0xcaf3,
-0x0000,0xa7e5,0xcaef,0xcaee,0xa7e3,0xcaf4,0xa7e4,0xa9d3,
-0xa7de,0xcaf1,0x0000,0xcae7,0xa7db,0x0000,0xa7ee,0xcaec,
-0xcaf2,0xa7e0,0xa7e2,0x0000,0xcae8,0x0000,0xcae9,0xcaea,
-0x0000,0xa7ed,0xa7e7,0xa7ec,0xcaeb,0xa7eb,0xa7dd,0xa7dc,
-0xa7e9,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xa9e1,0xccbe,0xccb7,0xa9dc,0xa9ef,0xccb3,0xccba,0xccbc,
-0xccbf,0xa9ea,0x0000,0xccbb,0xccb4,0xa9e8,0xccb8,0x0000,
-0xccc0,0xa9d9,0x0000,0xccbd,0xa9e3,0xa9e2,0xccb6,0xa9d7,
-0x0000,0x0000,0xa9d8,0x0000,0xa9d6,0x0000,0xa9ee,0xa9e6,
-0xa9e0,0xa9d4,0xccb9,0xa9df,0xa9d5,0xa9e7,0xa9f0,0xced4,
-0xa9e4,0xccb5,0xa9da,0xa9dd,0xa9de,0x0000,0xa9ec,0xa9ed,
-0xa9eb,0xa9e5,0xa9e9,0xa9db,0xabf4,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xceda,0xac41,0xabf8,0xabfa,0xac40,
-0xcee6,0xabfd,0xd1b1,0xaeb1,0xac43,0xced7,0xcedf,0xabfe,
-0xcede,0xcedb,0xcee3,0xcee5,0xabf7,0xabfb,0xac42,0xaeb3,
-0xcee0,0xabf9,0xac45,0xced9,0x0000,0x0000,0x0000,0xabfc,
-0xaeb2,0xabf6,0x0000,0xced6,0xcedd,0xced5,0xced8,0xcedc,
-0xd1b2,0xac44,0x0000,0xcee1,0xcee2,0xcee4,0xabf5,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xaec1,0xd1be,0xaebf,0xaec0,0xd1b4,0xd1c4,0x0000,0xaeb6,
-0x0000,0x0000,0xd566,0xd1c6,0xd1c0,0x0000,0xd1b7,0x0000,
-0xd1c9,0xd1ba,0xaebc,0xd57d,0xd1bd,0xaebe,0xaeb5,0x0000,
-0xd1cb,0xd1bf,0xaeb8,0xd1b8,0xd1b5,0xd1b6,0xaeb9,0xd1c5,
-0xd1cc,0xaebb,0xd1bc,0xd1bb,0xaec3,0xaec2,0xaeb4,0xaeba,
-0xaebd,0xd1c8,0x0000,0x0000,0xd1c2,0xaeb7,0xd1b3,0xd1ca,
-0xd1c1,0xd1c3,0xd1c7,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xd567,0x0000,0xb1b7,
-0xb1cb,0xb1ca,0x0000,0xb1bf,0x0000,0xd579,0xd575,0xd572,
-0xd5a6,0xb1ba,0xb1b2,0x0000,0x0000,0xd577,0xb4a8,0xb1b6,
-0xd5a1,0x0000,0xb1cc,0xb1c9,0xd57b,0xd56a,0x0000,0x0000,
-0xb1c8,0xd5a3,0xd569,0xb1bd,0xb1c1,0xd5a2,0x0000,0xd573,
-0xb1c2,0xb1bc,0xd568,0x0000,0xb478,0xd5a5,0xd571,0xb1c7,
-0xd574,0xd5a4,0xb1c6,0x0000,0xd952,0x0000,0xb1b3,0xd56f,
-0xb1b8,0xb1c3,0x0000,0xb1be,0xd578,0xd56e,0xd56c,0xd57e,
-0xb1b0,0xb1c4,0xb1b4,0xb477,0xd57c,0xb1b5,0x0000,0xb1b1,
-0xb1c0,0xb1bb,0xb1b9,0xd570,0xb1c5,0xd56d,0xd57a,0xd576,
-0xd954,0xd953,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xd56b,0xd964,0x0000,
-0xb47a,0x0000,0xd96a,0xd959,0xd967,0xdd77,0xb47d,0xd96b,
-0xd96e,0xb47c,0xd95c,0xd96d,0xd96c,0xb47e,0xd955,0xb479,
-0xb4a3,0x0000,0xb4a1,0xd969,0x0000,0xd95f,0xb4a5,0xd970,
-0xd968,0xd971,0xb4ad,0xb4ab,0xd966,0xd965,0x0000,0xd963,
-0xd95d,0xb4a4,0x0000,0xb4a2,0xd1b9,0xd956,0x0000,0xddb7,
-0xd957,0xb47b,0xb4aa,0xdd79,0x0000,0xb4a6,0xb4a7,0xd958,
-0xd96f,0xdd78,0xd960,0xd95b,0xb4a9,0xd961,0xd95e,0x0000,
-0x0000,0xb4ae,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-/* 0x6400 */
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xb770,0x0000,
-0x0000,0xdd7c,0xddb1,0xddb6,0xddaa,0xb76c,0xddbb,0xb769,
-0xdd7a,0x0000,0xdd7b,0xb762,0xb76b,0xdda4,0xb76e,0xb76f,
-0xdda5,0x0000,0xddb2,0xddb8,0xb76a,0x0000,0xb764,0xdda3,
-0xdd7d,0xddba,0xdda8,0xdda9,0xdd7e,0xddb4,0xddab,0xddb5,
-0xddad,0x0000,0xb765,0xe1d9,0xb768,0xb766,0xddb9,0xddb0,
-0xddac,0x0000,0x0000,0xdda1,0xba53,0xddaf,0xb76d,0xdda7,
-0x0000,0xdda6,0x0000,0x0000,0x0000,0xb767,0xb763,0xe1ee,
-0xddb3,0xddae,0x0000,0xdda2,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xe1e9,0x0000,0xe1da,0xe1e5,0x0000,
-0xe1ec,0xba51,0xb4ac,0xe1ea,0xba4c,0x0000,0x0000,0x0000,
-0xba4b,0xe1f1,0x0000,0xe1db,0xe1e8,0xe1dc,0xe1e7,0xba4f,
-0xe1eb,0xd962,0x0000,0x0000,0x0000,0xe1f2,0xe1e3,0xba52,
-0xe5ba,0xbcaf,0x0000,0xe1f0,0xe1ef,0xba54,0xe5ad,0xbcb0,
-0xe5ae,0x0000,0xe1df,0xe1e0,0xe1dd,0xe1e2,0xe1de,0xe1f3,
-0xba4e,0xbcb1,0xba50,0xba55,0x0000,0xe1e1,0x0000,0xe1ed,
-0x0000,0x0000,0xe1e6,0x0000,0x0000,0xe5b1,0x0000,0xba4a,
-0xbcb4,0xe9aa,0xe5b6,0xe5b5,0xe5b7,0x0000,0x0000,0xe5b4,
-0xbcb5,0x0000,0xbcbb,0xbcb8,0x0000,0xbcb9,0xe5af,0xe5b2,
-0xe5bc,0xbcc1,0xbcbf,0x0000,0xe5b3,0xd95a,0xbcb2,0xe5b9,
-0xe5b0,0x0000,0xbcc2,0xe5b8,0xba4d,0xbcb7,0xe1e4,0x0000,
-0x0000,0xbcba,0x0000,0xbcbe,0xbcc0,0xbcbd,0xbcbc,0x0000,
-0xbcb6,0xe5bb,0xbcb3,0xbcc3,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xbed8,0xbed9,0xe9a9,0xbee2,0xbedf,
-0x0000,0xbed6,0xbedd,0xe9ab,0xbedb,0xbed5,0x0000,0xbedc,
-0x0000,0xe9a8,0xc0bb,0xbed7,0x0000,0xbede,0xc0ba,0xe9a7,
-0xe9a6,0x0000,0xbee0,0x0000,0xbee1,0x0000,0xe9a5,0xe9a4,
-0xc0bc,0xe9ae,0xbeda,0xe9ac,0x0000,0x0000,0x0000,0x0000,
-0xc0bd,0x0000,0xc0c2,0xecea,0xecec,0x0000,0xc0bf,0x0000,
-0xeced,0xece9,0x0000,0xeceb,0xc0c0,0xc0c3,0x0000,0xece8,
-0xc0be,0xc0c1,0xc259,0xe9ad,0xc258,0x0000,0x0000,0xc25e,
-0xefd4,0x0000,0xc25c,0xc25d,0xefd7,0xefd3,0xc25a,0xefd1,
-0xc36b,0xefd5,0x0000,0xefd6,0xefd2,0x0000,0xc25b,0xf242,
-0x0000,0xf245,0x0000,0x0000,0xf246,0xf244,0xf247,0xc36c,
-0xf243,0x0000,0x0000,0xf44e,0xc464,0xf44d,0xf44c,0xf44b,
-0xc463,0xc465,0x0000,0xf5cd,0xc4e2,0xc4e1,0x0000,0x0000,
-0xf6e1,0xf6e0,0xf6e3,0xc5cb,0xc575,0xf7dd,0xf6e2,0x0000,
-0x0000,0xf7dc,0xc5cd,0xc5cc,0xc5f3,0xf8a9,0xf8ef,0xa4e4,
-0x0000,0x0000,0xd972,0xe9af,0x0000,0x0000,0xa6ac,0xcaf7,
-0xa7f1,0xa7ef,0x0000,0xa7f0,0x0000,0xccc1,0xa9f1,0xac46,
-0x0000,0xcee7,0x0000,0xcee8,0x0000,0xac47,0xd1ce,0x0000,
-0xaec4,0xaec5,0xd1cd,0x0000,0x0000,0x0000,0x0000,0xb1d3,
-0x0000,0xb1cf,0x0000,0xd5a7,0xb1d6,0xb1d5,0xb1ce,0xb1d1,
-0xb1d4,0xb1d0,0x0000,0x0000,0xd976,0xb1cd,0xb4af,0x0000,
-0x0000,0x0000,0xb4b1,0xb4b2,0xd975,0xd978,0xb4b0,0xd973,
-0xd977,0x0000,0xd974,0x0000,0xb771,0x0000,0x0000,0xddbc,
-0x0000,0x0000,0xba56,0xe1f4,0xbee3,0xbcc4,0xe5bd,0xbcc5,
-0xbcc6,0xe5bf,0xe5be,0xe5c0,0xe9b1,0x0000,0x0000,0xe9b0,
-0xecef,0xecee,0xc0c4,0xc0c5,0xf248,0x0000,0x0000,0xa4e5,
-0x0000,0x0000,0x0000,0x0000,0xd979,0x0000,0x0000,0x0000,
-0xb4b4,0xb4b3,0xddbd,0x0000,0xefd8,0xc4e3,0xf7de,0xa4e6,
-0x0000,0xaec6,0x0000,0xb1d8,0xb1d7,0xd97a,0xd97b,0xb772,
-0xe1f5,0xba57,0xe9b2,0x0000,0xa4e7,0xa5b8,0x0000,0xa9f2,
-0xccc2,0x0000,0xcee9,0xac48,0xb1d9,0x0000,0xd97c,0xb4b5,
-0xb773,0x0000,0xe5c1,0xe5c2,0x0000,0x0000,0xecf0,0xc25f,
-0xf8f0,0xa4e8,0x0000,0xccc3,0xa9f3,0xac49,0x0000,0xceea,
-0x0000,0xaec7,0xd1d2,0xd1d0,0xd1d1,0xaec8,0xd1cf,0x0000,
-0x0000,0x0000,0x0000,0xb1db,0xb1dc,0xd5a8,0xb1dd,0xb1da,
-0xd97d,0x0000,0xd97e,0xddbe,0x0000,0x0000,0xba59,0xba58,
-0x0000,0x0000,0xecf1,0xefd9,0x0000,0xf24a,0xf249,0xf44f,
-0x0000,0xc95e,0xac4a,0x0000,0x0000,0xa4e9,0xa5b9,0x0000,
-0xa6ae,0xa6ad,0x0000,0x0000,0xa6af,0xa6b0,0xc9ee,0xc9ed,
-0xcaf8,0xa7f2,0xcafb,0xcafa,0xcaf9,0xcafc,0x0000,0x0000,
-0x0000,0x0000,0xa9f4,0xccc9,0xccc5,0xccce,0x0000,0x0000,
-0xa9fb,0x0000,0xa9f9,0xccca,0xccc6,0xcccd,0xa9f8,0xaa40,
-0xccc8,0xccc4,0xa9fe,0xcccb,0xa9f7,0xcccc,0xa9fa,0xa9fc,
-0xccd0,0xcccf,0xccc7,0xa9f6,0xa9f5,0xa9fd,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xceef,0xcef5,0x0000,0xac50,
-0xac4d,0xceec,0xcef1,0x0000,0xac53,0xac4b,0xcef0,0xac4e,
-0xac51,0x0000,0x0000,0xcef3,0x0000,0xac4c,0xcef8,0xac4f,
-0x0000,0xac52,0xceed,0xcef2,0xcef6,0xceee,0xceeb,0x0000,
-0x0000,0xcef7,0xcef4,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xaed0,0xaec9,0xaecc,0x0000,0xaecf,0x0000,0xd1d5,
-0x0000,0xaeca,0xd1d3,0x0000,0xaece,0x0000,0x0000,0xaecb,
-0x0000,0xd1d6,0xaecd,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xd5ac,0xb1df,0xd5ab,0xd5ad,0xb1de,0xb1e3,0xd1d4,
-0x0000,0xd5aa,0xd5ae,0x0000,0xb1e0,0xd5a9,0xb1e2,0x0000,
-0xb1e1,0x0000,0xd9a7,0x0000,0xd9a2,0x0000,0xb4b6,0xb4ba,
-0xb4b7,0xd9a5,0xd9a8,0x0000,0xb4b8,0x0000,0xb4b9,0xb4be,
-0xddc7,0xd9a6,0xb4bc,0xd9a3,0xd9a1,0x0000,0xb4bd,0x0000,
-0xd9a4,0x0000,0x0000,0x0000,0xb779,0x0000,0xddbf,0xb776,
-0xb777,0xb775,0xddc4,0xddc3,0xddc0,0xb77b,0x0000,0x0000,
-0xddc2,0xb4bb,0x0000,0x0000,0xddc6,0xddc1,0xb778,0xb774,
-0xb77a,0xddc5,0x0000,0x0000,0x0000,0xba5c,0x0000,0xe1f8,
-0xe1f7,0xe1f6,0xba5a,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xba5b,0xe5c5,0xe5c8,0xbcc8,0x0000,0x0000,0xbcc7,0xe5c9,
-0xe5c4,0xbcca,0xe5c6,0x0000,0xbcc9,0xe5c3,0x0000,0xe5c7,
-0xbee9,0xbee6,0xe9bb,0xe9ba,0x0000,0xe9b9,0xe9b4,0x0000,
-0xe9b5,0x0000,0x0000,0x0000,0xbee7,0x0000,0xbee4,0xbee8,
-0xe9b3,0xbee5,0xe9b6,0xe9b7,0xe9bc,0x0000,0x0000,0xe9b8,
-0x0000,0x0000,0xecf2,0x0000,0x0000,0x0000,0xc0c7,0x0000,
-0xefdc,0xc0c6,0xefda,0xefdb,0xc260,0xc36e,0xf24b,0x0000,
-0xc36d,0x0000,0x0000,0xf451,0xf452,0x0000,0xc466,0x0000,
-0xf450,0xc4e4,0x0000,0xf7df,0xc5ce,0xf8aa,0xf8ab,0x0000,
-0xa4ea,0x0000,0xa6b1,0xa6b2,0xa7f3,0x0000,0xccd1,0xac54,
-0xaed1,0xb1e4,0x0000,0x0000,0xb0d2,0x0000,0xb4bf,0xb4c0,
-0xb3cc,0xd9a9,0x0000,0xb77c,0xe1fa,0xe1f9,0x0000,0x0000,
-0xa4eb,0xa6b3,0xccd2,0xaa42,0x0000,0xaa41,0x0000,0xcef9,
-0xcefa,0x0000,0xd1d7,0xd1d8,0xaed2,0xaed3,0x0000,0xaed4,
-0xd5af,0x0000,0x0000,0xb1e6,0x0000,0xb4c2,0x0000,0xb4c1,
-0xddc8,0xdf7a,0xe1fb,0xe9bd,0x0000,0x0000,0xc261,0xc467,
-0xa4ec,0x0000,0xa5bc,0xa5bd,0xa5bb,0xa5be,0xa5ba,0x0000,
-0x0000,0xa6b6,0x0000,0xc9f6,0xa6b5,0xa6b7,0x0000,0x0000,
-0xc9f1,0xc9f0,0xc9f3,0xc9f2,0xc9f5,0xa6b4,0xc9ef,0xc9f4,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xcafd,0xa7fd,0xcafe,
-0xcb43,0xa7fc,0x0000,0xcb47,0xcb42,0xcb45,0xa7f5,0xa7f6,
-0xa7f7,0xa7f8,0x0000,0xa840,0x0000,0xcb41,0xa7fa,0xa841,
-0x0000,0xcb40,0xcb46,0x0000,0xa7f9,0xcb44,0xa7fb,0xa7f4,
-0xa7fe,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xaa57,0x0000,0xccd4,0xaa43,0x0000,0xaa4d,
-0xaa4e,0xaa46,0xaa58,0xaa48,0xccdc,0xaa53,0xccd7,0xaa49,
-0xcce6,0xcce7,0xccdf,0xccd8,0xaa56,0xcce4,0xaa51,0xaa4f,
-0x0000,0xcce5,0x0000,0xcce3,0xccdb,0xccd3,0xccda,0xaa4a,
-0x0000,0xaa50,0x0000,0xaa44,0xccde,0xccdd,0xccd5,0x0000,
-0xaa52,0xcce1,0xccd6,0xaa55,0xcce8,0xaa45,0x0000,0xaa4c,
-0xccd9,0xcce2,0xaa54,0x0000,0xaa47,0xaa4b,0x0000,0xcce0,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xcf5b,0xac5c,
-0xac69,0x0000,0xcf56,0xcf4c,0xac62,0xcf4a,0xac5b,0xcf45,
-0xac65,0xcf52,0xcefe,0xcf41,0x0000,0x0000,0x0000,0x0000,
-0xcf44,0xcefb,0xcf51,0xcf61,0xac60,0xcf46,0xcf58,0x0000,
-0xcefd,0xcf5f,0xcf60,0xcf63,0xcf5a,0xcf4b,0xcf53,0xac66,
-0xac59,0xac61,0xac6d,0xac56,0xac58,0x0000,0x0000,0x0000,
-0xcf43,0xac6a,0xac63,0xcf5d,0xcf40,0xac6c,0xac67,0xcf49,
-0x0000,0x0000,0xac6b,0xcf50,0xcf48,0xac64,0xcf5c,0xcf54,
-0x0000,0xac5e,0xcf62,0xcf47,0xac5a,0xcf59,0xcf4f,0xac5f,
-0xcf55,0xac57,0xcefc,0xac68,0xaee3,0xac5d,0xcf4e,0xcf4d,
-0xcf42,0x0000,0xcf5e,0x0000,0xcf57,0x0000,0x0000,0xac55,
-/* 0x6800 */
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xd1ec,0xaeea,0xd1ed,0x0000,0xd1e1,0xaedf,
-0xaeeb,0x0000,0xd1da,0x0000,0xd1e3,0xd1eb,0x0000,0xd1d9,
-0xd1f4,0xaed5,0x0000,0x0000,0x0000,0xd1f3,0xd1ee,0x0000,
-0xd1ef,0xaedd,0xaee8,0xd1e5,0x0000,0xd1e6,0xd1f0,0xd1e7,
-0x0000,0xd1e2,0xd1dc,0xd1dd,0xd1ea,0xd1e4,0x0000,0x0000,
-0xaed6,0xaeda,0xd1f2,0xd1de,0xaee6,0xaee2,0x0000,0x0000,
-0xaee5,0xaeec,0xaedb,0xaee7,0xd1e9,0xaee9,0xaed8,0x0000,
-0xaed7,0xd1db,0x0000,0xd1df,0xaee0,0xd1f1,0xd1e8,0xd1e0,
-0xaee4,0xaee1,0x0000,0xaed9,0xaedc,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xd5c4,0x0000,0xd5b4,0xd5b5,0xd5b9,
-0x0000,0xd5c8,0xd5c5,0x0000,0xd5be,0xd5bd,0xb1ed,0xd5c1,
-0xd5d0,0xd5b0,0x0000,0xd5d1,0xd5c3,0xd5d5,0xd5c9,0xb1ec,
-0xd5c7,0xb1e7,0xb1fc,0xb1f2,0x0000,0xb1f6,0xb1f5,0xd5b1,
-0x0000,0xd5ce,0xd5d4,0xd5cc,0xd5d3,0x0000,0x0000,0xd5c0,
-0xd5b2,0xd5d2,0xd5c2,0xb1ea,0xb1f7,0x0000,0xd5cb,0xb1f0,
-0x0000,0x0000,0x0000,0xd5ca,0xd5b3,0xb1f8,0x0000,0xb1fa,
-0xd5cd,0xb1fb,0xb1e9,0xd5ba,0xd5cf,0x0000,0x0000,0xb1ef,
-0xb1f9,0xd5bc,0xd5c6,0xd5b7,0xd5bb,0xb1f4,0xd5b6,0xb1e8,
-0xb1f1,0xb1ee,0xd5bf,0xaede,0xd9c0,0xb1eb,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xb1f3,0x0000,0xd9c3,0xd9d9,
-0xd9ce,0xb4d6,0x0000,0xb4d1,0xd9bd,0xb4d2,0xd9cd,0x0000,
-0xd9c6,0xd9d3,0xb4ce,0xd9ab,0xd9d5,0xb4c4,0xd9b3,0xb4c7,
-0xb4c6,0x0000,0xb4d7,0x0000,0xd9ad,0xd9cf,0xd9d0,0xb4c9,
-0xb4c5,0xd9bb,0x0000,0xb4d0,0xd9b6,0x0000,0xd9d1,0xb4cc,
-0xd9c9,0xd9d6,0xd9b0,0xd9b5,0xd9af,0x0000,0xb4cb,0xd9c2,
-0xddde,0xd9b1,0xb4cf,0xd9ba,0xd9d2,0xb4ca,0xd9b7,0xd9b4,
-0xd9c5,0xb4cd,0xb4c3,0xb4d9,0xd9c8,0xd9c7,0x0000,0x0000,
-/* 0x6900 */
-0x0000,0x0000,0x0000,0x0000,0xd9ac,0xb4c8,0xd9d4,0xd9bc,
-0xd9be,0x0000,0xd9cb,0xd9ca,0xd9aa,0xb4d3,0xb4d5,0xd9b2,
-0xd9b9,0xd9c1,0xb4d4,0xd9b8,0xd9c4,0xd9d7,0x0000,0xd9cc,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xd9d8,0x0000,0x0000,
-0x0000,0x0000,0xd9ae,0x0000,0x0000,0x0000,0x0000,0xddf2,
-0xb7a6,0x0000,0xddf0,0xdddb,0xdde0,0xddd9,0x0000,0xddec,
-0xddcb,0xddd2,0x0000,0xddea,0xddf4,0xdddc,0x0000,0xddcf,
-0xdde2,0xdde7,0xddd3,0x0000,0xdde4,0xddd0,0x0000,0x0000,
-0xddd7,0xddd8,0xb7a8,0xddeb,0xdde9,0x0000,0xddcc,0xddee,
-0x0000,0xddef,0xddf1,0xb7ac,0xb7a4,0x0000,0xd5b8,0xddd4,
-0xdde6,0xddd5,0xb7a1,0xb7b1,0xdded,0xb7af,0xb7ab,0xddca,
-0xb7a3,0x0000,0xddcd,0xb7b0,0x0000,0xdddd,0xddc9,0x0000,
-0xb7a9,0xdde1,0xddd1,0xb7aa,0xddda,0xb77e,0xb4d8,0xdde3,
-0xd9bf,0xddce,0x0000,0x0000,0xdde8,0xb7a5,0xdde5,0xb7a2,
-0xdddf,0xb7ad,0xddd6,0xddf3,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xb7a7,0xdec6,0x0000,0x0000,0xb7ae,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xe24a,0xe248,0x0000,
-0xe25e,0xe246,0x0000,0xe258,0xb77d,0xba5f,0xe242,0xe25d,
-0x0000,0xe247,0xe255,0xba64,0xba5d,0x0000,0xe25b,0x0000,
-0xe240,0xe25a,0x0000,0xba6f,0xe251,0xe261,0xba6d,0xe249,
-0xba5e,0xe24b,0xe259,0xba67,0xe244,0xba6b,0xba61,0xe24d,
-0xe243,0xe1fc,0x0000,0xe257,0xba68,0xe260,0xe1fd,0xba65,
-0x0000,0xe253,0x0000,0xba66,0xe245,0xe250,0xe24c,0xe24e,
-0x0000,0xba60,0xe25f,0xba6e,0xe24f,0x0000,0xe262,0x0000,
-0x0000,0xe1fe,0xe254,0xba63,0xba6c,0xba6a,0xe241,0xe256,
-0xba69,0x0000,0x0000,0xba62,0xe252,0x0000,0x0000,0x0000,
-0x0000,0xe25c,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xe5d5,0x0000,0xe5d1,0xe5cd,0xe5e1,0xe5de,
-0xbccd,0x0000,0x0000,0xe5e5,0xe5d4,0xbcd8,0xe5db,0x0000,
-0x0000,0xe5d0,0xe5da,0xbcd5,0xe5ee,0x0000,0xe5eb,0xe5dd,
-0xe5ce,0x0000,0x0000,0xe5e2,0xe5e4,0xbcd1,0xe5d8,0xe5d3,
-0xe5ca,0xbcce,0xbcd6,0x0000,0xe5e7,0xbcd7,0xe5cb,0xe5ed,
-0xe5e0,0xe5e6,0xbcd4,0x0000,0x0000,0xe5e3,0x0000,0xe5ea,
-0x0000,0xbcd9,0x0000,0xbcd3,0xe5dc,0xe5cf,0xe5ef,0xe5cc,
-0xe5e8,0xbcd0,0x0000,0xe5d6,0x0000,0xe5d7,0xbccf,0xbccc,
-0xe5d2,0xbcd2,0x0000,0xbccb,0x0000,0xe5e9,0xe5ec,0xe5d9,
-0xe9ca,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xe9c2,0x0000,0xe9be,0xbef6,0x0000,0x0000,
-0xbeeb,0xbef0,0xbeec,0xe9cc,0xe9d7,0xbeea,0xe9c4,0xe9cd,
-0xe5df,0xe9ce,0x0000,0x0000,0xbef1,0x0000,0xe9dd,0xbef5,
-0xbef8,0xe9c0,0x0000,0xbef4,0x0000,0xe9db,0xe9dc,0xe9d2,
-0xe9d1,0xe9c9,0x0000,0x0000,0xe9d3,0xe9da,0xe9d9,0x0000,
-0xbeef,0xbeed,0xe9cb,0xe9c8,0x0000,0xe9c5,0xe9d8,0xbef7,
-0xe9d6,0xbef3,0xbef2,0x0000,0xe9d0,0x0000,0xe9bf,0xe9c1,
-0xe9c3,0xe9d5,0xe9cf,0xbeee,0x0000,0xe9c6,0x0000,0xe9d4,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xe9c7,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xc0cf,0xed45,
-0xc0c8,0xecf5,0x0000,0xed41,0xc0ca,0xed48,0x0000,0xecfc,
-0x0000,0xecf7,0x0000,0x0000,0xed49,0xecf3,0xecfe,0x0000,
-0xc0d1,0xed44,0xed4a,0xecfd,0xc0c9,0xed40,0xecf4,0xc0d0,
-0x0000,0x0000,0xed47,0xecf9,0xc0cc,0x0000,0xecfb,0xecf8,
-0xc0d2,0xecfa,0xc0cb,0xc0ce,0xed43,0xecf6,0xed46,0x0000,
-0xed42,0x0000,0x0000,0x0000,0xc263,0xefe7,0xc268,0xc269,
-0x0000,0x0000,0x0000,0xc262,0xefe6,0x0000,0xefe3,0xefe4,
-0xc266,0xefde,0xefe2,0xc265,0x0000,0xefdf,0x0000,0x0000,
-0x0000,0x0000,0xc267,0xc264,0x0000,0xefdd,0xefe1,0xefe5,
-0x0000,0x0000,0x0000,0xf251,0xf24e,0xf257,0x0000,0xf256,
-0xf254,0xf24f,0x0000,0xc372,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xf250,0xc371,0xc0cd,0xf253,0xc370,0xf258,0xf252,
-0xf24d,0xefe0,0x0000,0x0000,0x0000,0xc36f,0x0000,0xf24c,
-0xf456,0x0000,0xf455,0xf255,0xc468,0x0000,0xf459,0xf45a,
-0xf454,0xf458,0x0000,0xf453,0x0000,0x0000,0x0000,0x0000,
-0xf5d1,0xf457,0xc4e7,0xc4e5,0xf5cf,0x0000,0x0000,0x0000,
-0xf5d2,0x0000,0xf5ce,0xf5d0,0xc4e6,0x0000,0x0000,0x0000,
-0xf6e5,0xf6e6,0xc576,0xf6e4,0x0000,0x0000,0x0000,0xf7e2,
-0xc5cf,0xf7e0,0xf7e1,0xf8ac,0x0000,0x0000,0xc656,0xf8f3,
-0xf8f1,0xf8f2,0xf8f4,0x0000,0x0000,0x0000,0xf9bb,0x0000,
-0xa4ed,0xa6b8,0x0000,0xaa59,0x0000,0xcce9,0x0000,0x0000,
-0xcf64,0x0000,0x0000,0x0000,0xd1f5,0xd1f7,0x0000,0xd1f6,
-0x0000,0xd1f8,0xb1fd,0xd5d7,0xd1f9,0x0000,0xd5d6,0xd5d8,
-0xd5d9,0xd9da,0xb4db,0xd9db,0xd9dd,0xb4dc,0xb4da,0xd9dc,
-0x0000,0xddfa,0xddf8,0xddf7,0x0000,0xddf6,0xddf5,0xb7b2,
-0xddf9,0xba70,0xe263,0xe265,0xba71,0xe264,0xbcdb,0x0000,
-0xbcda,0xe5f0,0x0000,0x0000,0xe9df,0xe9de,0xe9e0,0x0000,
-0x0000,0xbef9,0x0000,0xed4b,0xc0d3,0x0000,0xefe8,0xc26a,
-0xf259,0xc577,0xa4ee,0xa5bf,0xa6b9,0xa842,0xaa5a,0xaa5b,
-0x0000,0x0000,0xac6e,0x0000,0x0000,0xd1fa,0x0000,0x0000,
-0x0000,0x0000,0xb7b3,0x0000,0x0000,0x0000,0xe6d1,0xbefa,
-0xc26b,0xa4ef,0x0000,0xa6ba,0x0000,0x0000,0xcceb,0xaa5c,
-0xccea,0x0000,0xcf65,0xac6f,0xcf66,0x0000,0xac70,0x0000,
-0xd1fc,0xaeee,0xaeed,0x0000,0xd5de,0xd5dc,0xd5dd,0xd5db,
-0x0000,0xd5da,0x0000,0x0000,0xd9de,0xd9e1,0xb4de,0xd9df,
-0xb4dd,0xd9e0,0x0000,0xddfb,0x0000,0x0000,0xe266,0xe267,
-0xe268,0x0000,0xe5f3,0xe5f2,0xbcdc,0xe5f1,0xe5f4,0xe9e1,
-0x0000,0x0000,0xe9e2,0xe9e3,0x0000,0xed4c,0xc0d4,0xc26c,
-0xf25a,0x0000,0xc4e8,0xc95f,0x0000,0xac71,0xcf67,0xaeef,
-0x0000,0x0000,0xb1fe,0x0000,0xb4df,0xd9e2,0x0000,0xb7b5,
-0xb7b4,0x0000,0x0000,0xe269,0xe26a,0xbcdd,0xbcde,0xe9e5,
-0xe9e4,0xefe9,0xf7e3,0xa4f0,0xc960,0xa5c0,0x0000,0xa843,
-0xcb48,0x0000,0xac72,0xb7b6,0xa4f1,0x0000,0xcf68,0xac73,
-0xcf69,0x0000,0xc0d5,0xa4f2,0x0000,0x0000,0xccec,0x0000,
-0xcf6a,0x0000,0xd242,0xd241,0xd1fe,0x0000,0xd1fd,0xd243,
-0xd240,0x0000,0x0000,0xb240,0xb241,0x0000,0x0000,0xb4e0,
-0xd9e3,0x0000,0xd9e4,0xd9e5,0x0000,0x0000,0x0000,0xde41,
-0xde42,0xde40,0x0000,0xddfd,0xddfe,0xb7b7,0xe26b,0xe5f7,
-0xe5f6,0xe5f5,0xe5f8,0xe9e7,0xe9e6,0xbefb,0xe9e8,0x0000,
-0xc0d6,0xed4d,0x0000,0xefea,0xf25b,0xf6e7,0x0000,0xa4f3,
-0xa5c2,0xa5c1,0x0000,0xaa5d,0xc961,0xc97e,0xa6bb,0x0000,
-0xc9f7,0xcb49,0xcb4a,0xaa5e,0x0000,0xcced,0x0000,0xac74,
-0xcf6b,0xcf6c,0x0000,0xaef0,0xaef4,0xd244,0xaef3,0xaef1,
-0xaef2,0x0000,0xd5df,0xb242,0xb4e3,0x0000,0xb4e1,0xb4e2,
-0xd9e6,0x0000,0x0000,0xba72,0xa4f4,0x0000,0xc9a1,0x0000,
-0xa5c3,0x0000,0x0000,0xc9a4,0x0000,0x0000,0xa5c6,0xc9a3,
-0xa5c5,0xa5c4,0xa844,0xc9a2,0x0000,0x0000,0xc9f8,0x0000,
-0x0000,0x0000,0xc9fc,0xc9fe,0xca40,0xa6c5,0xa6c6,0xc9fb,
-0xa6c1,0x0000,0xc9f9,0x0000,0xc9fd,0xa6c2,0x0000,0xa6bd,
-0x0000,0xa6be,0x0000,0xa6c4,0xc9fa,0xa6bc,0xa845,0xa6bf,
-0xa6c0,0xa6c3,0x0000,0x0000,0x0000,0xcb5b,0xcb59,0xcb4c,
-0xa851,0xcb53,0xa84c,0xcb4d,0x0000,0xcb55,0x0000,0xcb52,
-0xa84f,0xcb51,0xa856,0xcb5a,0xa858,0x0000,0xa85a,0x0000,
-0xcb4b,0x0000,0xa84d,0xcb5c,0x0000,0xa854,0xa857,0x0000,
-0xcd45,0xa847,0xa85e,0xa855,0xcb4e,0xa84a,0xa859,0xcb56,
-0xa848,0xa849,0xcd43,0xcb4f,0xa850,0xa85b,0xcb5d,0xcb50,
-0xa84e,0x0000,0xa853,0xccee,0xa85c,0xcb57,0xa852,0x0000,
-0xa85d,0xa846,0xcb54,0xa84b,0xcb58,0xcd44,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xaa6a,0xaa7a,0xccf5,0xaa71,0x0000,
-0xcd4b,0xaa62,0x0000,0xaa65,0xcd42,0x0000,0xccf3,0xccf7,
-0xaa6d,0xaa6f,0xccfa,0xaa76,0xaa68,0xaa66,0xaa67,0xaa75,
-0xcd47,0xaa70,0xccf9,0xccfb,0xaa6e,0xaa73,0xccfc,0xcd4a,
-0x0000,0xac75,0xaa79,0x0000,0xaa63,0xcd49,0x0000,0xcd4d,
-0xccf8,0xcd4f,0xcd40,0xaa6c,0xccf4,0xaa6b,0xaa7d,0xaa72,
-0x0000,0xccf2,0xcf75,0xaa78,0xaa7c,0xcd41,0xcd46,0x0000,
-0xaa7e,0xaa77,0xaa69,0xaa5f,0x0000,0xaa64,0x0000,0xccf6,
-0xaa60,0xcd4e,0x0000,0xccf0,0xccef,0xccfd,0xccf1,0xaa7b,
-0xaef5,0xaa74,0xccfe,0xaa61,0x0000,0xaca6,0x0000,0x0000,
-0x0000,0xcd4c,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xcf7c,0xcfa1,0x0000,0xcfa4,0xcf77,0x0000,0x0000,0xcfa7,
-0xcfaa,0xcfac,0xcf74,0xac76,0xac7b,0xd249,0xacad,0xcfa5,
-0xcfad,0xcf7b,0xcf73,0x0000,0x0000,0x0000,0xd264,0xac7e,
-0xcfa2,0xcf78,0xcf7a,0xaca5,0x0000,0xcf7d,0xac7d,0xcf70,
-0xcfa8,0x0000,0xcfab,0x0000,0x0000,0xac7a,0x0000,0xaca8,
-0xcf6d,0xacaa,0xac78,0xacae,0xcfa9,0xcf6f,0xacab,0xd25e,
-0xcd48,0xac7c,0xac77,0xcf76,0xcf6e,0xacac,0xaca4,0xcfa3,
-0xaca9,0xaca7,0xcf79,0xaca1,0xcf71,0xaca2,0xaca3,0xcf72,
-0xcfa6,0xac79,0xcf7e,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xd24c,0xaefd,0xaf43,0x0000,0x0000,0x0000,0xd255,0xd25b,
-0xd257,0xd24a,0xd24d,0xd246,0xd247,0xaf4a,0xaefa,0xd256,
-0xd25f,0xaf45,0xaef6,0x0000,0xaf40,0xd24e,0xaf42,0xd24f,
-0xd259,0x0000,0x0000,0x0000,0xaf44,0xd268,0xd248,0xaefc,
-0xaefb,0xaf48,0xd245,0xd266,0xd25a,0xd267,0xd261,0xd253,
-0xd262,0x0000,0xd25c,0xd265,0xd263,0xaf49,0xd254,0xaef9,
-0xaef8,0xaf41,0xaf47,0xd260,0xaf46,0xd251,0xb243,0x0000,
-0xd269,0xd250,0xd24b,0xaefe,0xaf4b,0xaef7,0x0000,0xd258,
-0xd25d,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xb265,0xd5e1,0xd5e5,0x0000,0xb252,0xb250,
-0x0000,0x0000,0xb247,0xd5e3,0xd5e2,0xb25b,0x0000,0xd5e8,
-0xb255,0x0000,0xd5fa,0xd647,0xb244,0xd5f7,0xd5f0,0xb267,
-0xd5e0,0x0000,0xd5fc,0x0000,0xb264,0xb258,0xb263,0xb24e,
-0xd5ec,0xd5fe,0xd5f6,0xb24f,0xb249,0xd645,0x0000,0xd5fd,
-0xd640,0xb251,0xb259,0xd642,0xd5ea,0xd5fb,0xd5ef,0xd644,
-0xb25e,0xb246,0xb25c,0xd5f4,0xd5f2,0xd5f3,0xb253,0xd5ee,
-0xd5ed,0xb248,0xd5e7,0xd646,0xb24a,0xd5f1,0xb268,0x0000,
-0xb262,0xd5e6,0xb25f,0xb25d,0xb266,0xd5f8,0xb261,0xd252,
-0xd5f9,0xb260,0xd641,0xb245,0xd5f5,0xb257,0xd5e9,0xb256,
-0x0000,0xb254,0xb24c,0xb24b,0xd9e7,0xd643,0x0000,0x0000,
-0xd5eb,0x0000,0x0000,0xd9fc,0x0000,0xb24d,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xb541,0xb25a,0xb4ee,0xd9f6,0xb4fc,0x0000,0xd9ea,
-0xb4eb,0xb4e7,0xda49,0xb4ed,0xb4f1,0xb4ec,0xb4f5,0xda4d,
-0xda44,0x0000,0x0000,0xd9f1,0xb4fa,0xb4f4,0xd9fd,0xb4e4,
-0xda4a,0xda43,0xb4e8,0xd9f7,0xb4f7,0xda55,0xda56,0x0000,
-0xb4e5,0xda48,0xb4f9,0xd9fb,0xd9ed,0xd9ee,0xb4fd,0xd9f2,
-0xd9f9,0xd9f3,0x0000,0xb4fb,0xb544,0xd9ef,0xd9e8,0xd9e9,
-0x0000,0xd9eb,0xb4ea,0xd9f8,0x0000,0xb4f8,0xb542,0x0000,
-0x0000,0xd9fa,0xda53,0xda4b,0xb4e6,0xda51,0xb4f2,0x0000,
-0xb4f0,0x0000,0xda57,0xb4ef,0xda41,0xd9f4,0xd9fe,0xb547,
-0xda45,0xda42,0xd9f0,0xb543,0xda4f,0xda4c,0xda54,0xb4e9,
-0xda40,0xb546,0x0000,0xda47,0x0000,0x0000,0xb4f3,0xb4f6,
-0x0000,0xda46,0xb545,0xd9f5,0xd5e4,0x0000,0x0000,0xda50,
-0xda4e,0xda52,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xd9ec,0xb540,0x0000,0x0000,0x0000,0xde61,0xde60,0xde46,
-0xb7bd,0x0000,0xde5f,0xde49,0xde4a,0x0000,0xb7c7,0xde68,
-0xb7c2,0xde5e,0x0000,0xde43,0xb7c8,0xb7be,0xde52,0xde48,
-0xde4b,0xde63,0xb7b8,0xde6a,0xde62,0xb7c1,0xde57,0xb7cc,
-0x0000,0x0000,0xb7cb,0xb7c5,0x0000,0x0000,0xde69,0xb7b9,
-0xde55,0xde4c,0xde59,0xde65,0xb7cd,0x0000,0xb7bb,0xde54,
-0x0000,0xde4d,0xb7c4,0x0000,0xb7c3,0xde50,0xde5a,0xde64,
-0xde47,0xde51,0xb7bc,0xde5b,0xb7c9,0xb7c0,0xde4e,0xb7bf,
-0xde45,0xde53,0xde67,0xb4fe,0xbab0,0xde56,0xe26c,0xde58,
-0xde66,0xb7c6,0xde4f,0xb7ba,0xb7ca,0xbcf0,0xde44,0x0000,
-0xde5d,0x0000,0x0000,0x0000,0xde5c,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xe2aa,0xbaad,0xe27d,0xe2a4,0xbaa2,
-0x0000,0xe26e,0xbaaf,0x0000,0xba77,0xe26d,0xe2b0,0xbab1,
-0xe271,0xe2a3,0x0000,0xe273,0xe2b3,0xe2af,0xba75,0xbaa1,
-0xe653,0xbaae,0xba7d,0xe26f,0x0000,0xe2ae,0xbaa3,0xe2ab,
-0xe2b8,0xe275,0xe27e,0x0000,0x0000,0xe2b6,0xe2ac,0xba7c,
-0x0000,0x0000,0xe27c,0xba76,0xba74,0xbaa8,0x0000,0x0000,
-0xe27a,0xe277,0xe278,0x0000,0xe2b2,0x0000,0xe2b7,0xe2b5,
-0xba7a,0xe2b9,0xba7e,0xbaa7,0x0000,0xe270,0xe5fa,0xe279,
-0x0000,0xba78,0xbaac,0xbaa9,0xba7b,0xe2a5,0xe274,0xbaaa,
-0xe2a7,0xbaa4,0xbaa6,0xba73,0x0000,0xe2a9,0xe2a1,0xe272,
-0xbaa5,0xe2b1,0xe2b4,0xe27b,0xe2a8,0x0000,0xba79,0xbcdf,
-0xe2a6,0xe5f9,0x0000,0xe2ad,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xe276,0xe644,
-0xe64e,0xbce2,0xe64d,0xe659,0xbce4,0xe64b,0x0000,0xe64f,
-0xbcef,0x0000,0xe646,0xbce7,0x0000,0xe652,0xe9f0,0xbcf3,
-0xbcf2,0xe654,0xe643,0xe65e,0xbced,0x0000,0xbce3,0xe657,
-0x0000,0xe65b,0xe660,0xe655,0xe649,0xbce6,0xbce9,0xbcf1,
-0xbcec,0x0000,0xe64c,0xe2a2,0x0000,0x0000,0xe648,0xe65f,
-0xbce8,0x0000,0xbceb,0xe661,0xbce0,0xe656,0xe5fb,0xe65c,
-0xc0df,0x0000,0xe64a,0x0000,0xbce1,0xe645,0xbce5,0xe5fc,
-0xbaab,0xe641,0x0000,0xe65a,0xe642,0xe640,0xbcea,0x0000,
-0xe658,0x0000,0xe5fe,0xe651,0xe650,0xe65d,0xe647,0xbcee,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xe9f3,0x0000,
-0xbf49,0xbefe,0xea40,0xe9eb,0xbf41,0xe9f7,0xbf48,0xbf43,
-0xe9f5,0xed4f,0xe9fb,0xea42,0xe9fa,0xe9e9,0xe9f8,0xea44,
-0xea46,0xbefd,0xea45,0xbf44,0xbf4a,0x0000,0xbf47,0x0000,
-0xe9fe,0xbf46,0xe9f9,0x0000,0xe9ed,0xe9f2,0x0000,0xe9fd,
-0xbf45,0xbf42,0xbefc,0xbf40,0xe9f1,0x0000,0xe5fd,0xe9ec,
-0xe9ef,0xea41,0xe9f4,0xe9ea,0xed4e,0xea43,0xe9ee,0xe9fc,
-0x0000,0x0000,0x0000,0x0000,0xed51,0xc0e3,0x0000,0x0000,
-0xc0d7,0x0000,0x0000,0xc0db,0xed53,0xed59,0xed57,0xc0d9,
-0xc0da,0xc0e1,0xed5a,0xed52,0xc0dc,0x0000,0xed56,0xed55,
-0xed5b,0xc0e2,0x0000,0xc0dd,0xc0e0,0xed54,0xc0e4,0xc0de,
-0xc0e5,0xc0d8,0xed58,0x0000,0xed50,0x0000,0x0000,0xeff7,
-0x0000,0x0000,0xc271,0xeff4,0xeff6,0x0000,0xc26f,0xeff2,
-0xeff3,0xefee,0x0000,0x0000,0xe9f6,0xefef,0xc270,0xefeb,
-0x0000,0xc26d,0xeff8,0xc26e,0xefec,0xefed,0xeff1,0xc273,
-0x0000,0xc272,0x0000,0x0000,0xeff0,0xc378,0xf25f,0xf265,
-0xc379,0xf25c,0xc376,0xc373,0xf267,0xc377,0x0000,0xc374,
-0xf25e,0xf261,0xf262,0xf263,0xf266,0x0000,0xeff5,0xf25d,
-0xc375,0xf264,0xf268,0xf260,0x0000,0x0000,0x0000,0xf45d,
-0xc46a,0xf460,0xc46b,0xf468,0xf45f,0xf45c,0x0000,0xf45e,
-0xf462,0xf465,0xf464,0xf467,0xf45b,0x0000,0xc469,0xf463,
-0xf466,0xf469,0xf461,0xf5d3,0xf5d4,0xf5d8,0xf5d9,0x0000,
-0xf5d6,0xf5d7,0xf5d5,0x0000,0xc4e9,0x0000,0x0000,0x0000,
-0x0000,0xc578,0xf6eb,0x0000,0x0000,0xf6e8,0xf6e9,0xf6ea,
-0xc579,0x0000,0xf7e5,0xf7e4,0x0000,0xf8af,0xc5f4,0xf8ad,
-0xf8b0,0xf8ae,0xf8f5,0xc657,0xc665,0xf9a3,0xf96c,0x0000,
-0xf9a2,0xf9d0,0xf9d1,0xa4f5,0x0000,0x0000,0x0000,0x0000,
-0xa6c7,0xca41,0x0000,0x0000,0xcb5e,0x0000,0xa85f,0x0000,
-0xa862,0x0000,0xcb5f,0x0000,0xa860,0xa861,0x0000,0x0000,
-0x0000,0x0000,0xcd58,0xcd5a,0xcd55,0xcd52,0xcd54,0x0000,
-0x0000,0x0000,0xaaa4,0x0000,0x0000,0x0000,0xaaa2,0x0000,
-0x0000,0xcd56,0xaaa3,0xcd53,0xcd50,0xaaa1,0xcd57,0x0000,
-0xcd51,0xaaa5,0xcd59,0x0000,0x0000,0x0000,0x0000,0xcfaf,
-0x0000,0xcfb3,0x0000,0x0000,0xacb7,0x0000,0x0000,0x0000,
-0x0000,0xcfb6,0x0000,0xacaf,0xacb2,0xacb4,0xacb6,0xacb3,
-0xcfb2,0xcfb1,0x0000,0xacb1,0xcfb4,0xcfb5,0x0000,0xcfae,
-0xacb5,0x0000,0xacb0,0x0000,0x0000,0x0000,0xcfb0,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xd277,0xd278,0xd279,
-0xaf50,0x0000,0xaf4c,0xd26e,0x0000,0xd276,0xd27b,0xaf51,
-0x0000,0xd26c,0xd272,0xd26b,0xd275,0x0000,0x0000,0xd271,
-0xaf4d,0xaf4f,0xd27a,0x0000,0xd26a,0xd26d,0xd273,0x0000,
-0xd274,0xd27c,0xd270,0x0000,0xaf4e,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xb26d,
-0xd64e,0x0000,0x0000,0xd650,0xd64c,0x0000,0xd658,0xd64a,
-0xd657,0xb269,0xd648,0xda5b,0xd652,0xb26c,0x0000,0xd653,
-0xd656,0x0000,0xd65a,0x0000,0xd64f,0x0000,0xd654,0x0000,
-0x0000,0xb26a,0xb26b,0xd659,0xd64d,0xd649,0xd65b,0x0000,
-0xd651,0x0000,0x0000,0xd655,0x0000,0x0000,0x0000,0xd64b,
-0x0000,0xb548,0xb549,0xda65,0xb54f,0x0000,0xda59,0xda62,
-0xda58,0xb54c,0xda60,0xda5e,0x0000,0xda5f,0xb54a,0x0000,
-0xda63,0x0000,0x0000,0x0000,0x0000,0x0000,0xda5c,0xda5a,
-0xb54b,0xda5d,0xda61,0x0000,0x0000,0x0000,0xb54d,0x0000,
-0x0000,0x0000,0xda64,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xde70,0xde77,0xde79,0xdea1,0x0000,0xb7da,0xde6b,
-0x0000,0xb7d2,0x0000,0xde7a,0xb7d7,0xdea2,0xb7ce,0x0000,
-0xde7d,0x0000,0xde6d,0xde7e,0xde6c,0x0000,0xb7dc,0x0000,
-0xde78,0xb7cf,0xdea3,0x0000,0xb7d4,0xde71,0xb7d9,0xde7c,
-0xde6f,0xde76,0xde72,0xde6e,0xb7d1,0xb7d8,0xb7d6,0xb7d3,
-0xb7db,0xb7d0,0xde75,0x0000,0xb7d5,0x0000,0xb54e,0x0000,
-0xde7b,0x0000,0xde73,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xde74,0x0000,0x0000,0xe2c1,0x0000,0xbab4,0x0000,0x0000,
-0xe2bd,0xe2c3,0xe2bf,0x0000,0xbab6,0xe2be,0xe2c2,0xe2ba,
-0x0000,0xe2bc,0xbab5,0x0000,0x0000,0x0000,0x0000,0xe2c0,
-0xe2bb,0x0000,0xbab7,0x0000,0xbab2,0x0000,0x0000,0xe2c4,
-0x0000,0xbab3,0xe667,0xe664,0xe670,0xe66a,0xe66c,0xbcf4,
-0xe666,0xe66e,0x0000,0x0000,0xe66d,0xe66b,0x0000,0xe671,
-0xbcf7,0xe668,0xe66f,0x0000,0xbcf5,0x0000,0x0000,0xe663,
-0xe665,0xbcf6,0xe662,0xe672,0x0000,0xe669,0x0000,0x0000,
-0xea4a,0xbf51,0x0000,0x0000,0xea55,0xea53,0xbf4b,0xea49,
-0xea4c,0xea4d,0xea48,0xbf55,0xbf56,0xea47,0xea56,0xea51,
-0xbf4f,0xbf4c,0xea50,0xea4e,0x0000,0x0000,0xbf52,0xea52,
-0xbf4d,0x0000,0xbf4e,0x0000,0xea4f,0xbf50,0xea4b,0x0000,
-0xea54,0xbf53,0xea57,0xea58,0xbf54,0x0000,0x0000,0xc0e7,
-0xc0ee,0xed5c,0xed62,0x0000,0xed60,0xc0ea,0xc0e9,0xc0e6,
-0xed5e,0x0000,0x0000,0x0000,0xc0ec,0xc0eb,0xc0e8,0x0000,
-0xed61,0xed5d,0xed5f,0x0000,0xc0ed,0x0000,0x0000,0x0000,
-0xc277,0xeffb,0x0000,0xc274,0xc275,0xeffd,0xc276,0xeffa,
-/* 0x7200 */
-0x0000,0xeff9,0xf26c,0xeffc,0x0000,0xf26d,0xc37a,0xf26b,
-0x0000,0x0000,0xf26a,0x0000,0xf269,0xc37b,0x0000,0x0000,
-0xc46c,0x0000,0x0000,0xf46a,0xf46b,0x0000,0x0000,0x0000,
-0x0000,0xf5dc,0xf5db,0xc4ea,0x0000,0xf5da,0xf6ec,0xf6ed,
-0x0000,0x0000,0xf7e6,0xf8b1,0x0000,0x0000,0xf8f6,0xf9bc,
-0xc679,0xf9c6,0xa4f6,0x0000,0xaaa6,0xaaa7,0x0000,0x0000,
-0xacb8,0x0000,0x0000,0x0000,0x0000,0xc0ef,0xa4f7,0x0000,
-0xaaa8,0xaf52,0xb7dd,0xa4f8,0x0000,0xb26e,0xbab8,0xc962,
-0x0000,0xcfb7,0xd27d,0x0000,0xe2c5,0x0000,0xc0f0,0xa4f9,
-0xaaa9,0xcfb8,0xcfb9,0xda66,0xb550,0x0000,0x0000,0xdea4,
-0x0000,0x0000,0xb7de,0xe2c6,0x0000,0x0000,0xbcf8,0x0000,
-0xc37c,0xa4fa,0xda67,0xa4fb,0x0000,0xa6c9,0xca42,0xa6c8,
-0xa865,0xa864,0xa863,0xcb60,0x0000,0x0000,0x0000,0xaaaa,
-0x0000,0xaaab,0xcd5b,0x0000,0xcfba,0x0000,0xcfbd,0xacba,
-0xcfbb,0x0000,0xacb9,0xcfbc,0xacbb,0x0000,0xd2a2,0xd2a1,
-0xd27e,0xaf53,0x0000,0xd65d,0xd65e,0xb26f,0xd65c,0xd65f,
-0xb552,0xb270,0x0000,0x0000,0xb551,0xda6b,0xda6a,0x0000,
-0xda68,0xda69,0x0000,0xda6c,0xdea6,0xdea5,0xdea9,0x0000,
-0xdea8,0xdea7,0xbab9,0xe2c9,0x0000,0xe2c8,0xbaba,0xe2c7,
-0xe673,0x0000,0xe674,0xbcf9,0x0000,0xea59,0xea5a,0x0000,
-0x0000,0xf272,0xc37d,0xf271,0xf270,0xf26e,0xf26f,0xc4eb,
-0xf46c,0xf6ee,0xf8f7,0x0000,0xa4fc,0x0000,0xc9a5,0xa5c7,
-0xc9a6,0x0000,0x0000,0x0000,0xca43,0xca44,0x0000,0x0000,
-0x0000,0x0000,0xcb66,0x0000,0x0000,0xcb62,0x0000,0xcb61,
-0xaaac,0xcb65,0xa867,0xcb63,0xa866,0xcb67,0xcb64,0x0000,
-0x0000,0xcd5f,0xcfbe,0xcd5d,0xcd64,0x0000,0xaaad,0x0000,
-0xaab0,0xcd65,0xcd61,0x0000,0xcd62,0x0000,0xcd5c,0xaaaf,
-0xcd5e,0xaaae,0xcd63,0x0000,0xcd60,0x0000,0x0000,0xcfc2,
-0xacbd,0xacbe,0x0000,0xcfc5,0xcfbf,0x0000,0xcfc4,0x0000,
-0xcfc0,0xacbc,0xcfc3,0xcfc1,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xd2a8,0xd2a5,0x0000,0xd2a7,0xaf58,
-0xaf57,0xaf55,0xd2a4,0xd2a9,0xaf54,0xaf56,0xd2a6,0xd667,
-0xd2a3,0xd2aa,0x0000,0x0000,0x0000,0x0000,0x0000,0xd662,
-0xd666,0x0000,0xd665,0xda6e,0xda79,0x0000,0x0000,0xd668,
-0x0000,0xd663,0xda6d,0xb274,0x0000,0x0000,0xb273,0xd661,
-0xd664,0xb275,0x0000,0xb272,0xb271,0xd660,0xd669,0x0000,
-0x0000,0x0000,0xda70,0xda77,0x0000,0xb554,0xda76,0xda73,
-0x0000,0xb556,0x0000,0x0000,0x0000,0xda75,0x0000,0x0000,
-0xda6f,0xda71,0xda74,0xda72,0xb555,0xda78,0xb553,0xb7df,
-0x0000,0x0000,0xdead,0xdeac,0xdeaa,0x0000,0xb7e2,0xb7e1,
-0xdeae,0x0000,0xdeab,0xe2ca,0xbabb,0xb7e0,0x0000,0x0000,
-0x0000,0xdeb0,0xdeaf,0x0000,0xe2cd,0xe2cb,0xbcfa,0x0000,
-0xbabc,0xe2cc,0xe676,0x0000,0x0000,0x0000,0x0000,0xbcfb,
-0xe675,0xe67e,0xe67d,0xe67b,0x0000,0xe67a,0xe677,0xe678,
-0xe679,0xe67c,0xe6a1,0x0000,0x0000,0xea5f,0xea5c,0xea5d,
-0xbf57,0xea5b,0xea61,0xea60,0xea5e,0x0000,0xed64,0xed65,
-0xc0f1,0x0000,0xc0f2,0xed63,0x0000,0xc279,0xeffe,0xc278,
-0xc37e,0x0000,0xc3a1,0xc46d,0xf46e,0xf46d,0xf5dd,0xf6ef,
-0xc57a,0xf7e8,0xf7e7,0xf7e9,0xa5c8,0xcfc6,0xaf59,0xb276,
-0xd66a,0xa5c9,0xc9a7,0xa4fd,0x0000,0x0000,0xca45,0x0000,
-0x0000,0x0000,0xcb6c,0xcb6a,0xcb6b,0xcb68,0xa868,0xcb69,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xcd6d,0x0000,0xaab3,
-0xcd6b,0xcd67,0xcd6a,0x0000,0xcd66,0xaab5,0xcd69,0x0000,
-0xaab2,0xaab1,0x0000,0xaab4,0xcd6c,0xcd68,0x0000,0x0000,
-0x0000,0x0000,0xacc2,0xacc5,0xcfce,0xcfcd,0xcfcc,0xacbf,
-0xcfd5,0xcfcb,0x0000,0xacc1,0xd2af,0x0000,0xcfd2,0xcfd0,
-0xacc4,0x0000,0xcfc8,0xcfd3,0x0000,0xcfca,0xcfd4,0xcfd1,
-0xcfc9,0x0000,0xacc0,0xcfd6,0xcfc7,0xacc3,0x0000,0x0000,
-0x0000,0x0000,0xd2b4,0xd2ab,0xd2b6,0x0000,0xd2ae,0xd2b9,
-0xd2ba,0xd2ac,0xd2b8,0xd2b5,0xd2b3,0xd2b7,0xaf5f,0x0000,
-0xaf5d,0x0000,0x0000,0xd2b1,0x0000,0xd2ad,0x0000,0xd2b0,
-0xd2bb,0xd2b2,0xaf5e,0xcfcf,0x0000,0xaf5a,0xaf5c,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xd678,0xd66d,0xd66b,0x0000,
-0xd66c,0x0000,0xd673,0x0000,0xd674,0xd670,0xb27b,0xd675,
-0xd672,0xd66f,0x0000,0xb279,0xd66e,0xb277,0xb27a,0xd671,
-0xd679,0xaf5b,0xb278,0xd677,0xd676,0xb27c,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xda7e,0x0000,
-0x0000,0x0000,0xdaa1,0xb560,0x0000,0xdaa7,0x0000,0x0000,
-0xdaa9,0xdaa2,0xb55a,0xdaa6,0xdaa5,0xb55b,0xb561,0x0000,
-0xb562,0xdaa8,0xb558,0xda7d,0xda7b,0xdaa3,0xda7a,0xb55f,
-0xda7c,0xdaa4,0xdaaa,0xb559,0xb55e,0xb55c,0xb55d,0x0000,
-0x0000,0x0000,0xb557,0x0000,0x0000,0x0000,0x0000,0xb7e9,
-0xdeb7,0xb7e8,0xdebb,0x0000,0xdeb1,0x0000,0xdebc,0x0000,
-0x0000,0x0000,0xdeb2,0xdeb3,0x0000,0xdebd,0xdeba,0xdeb8,
-0xdeb9,0xdeb5,0xdeb4,0x0000,0xdebe,0xb7e5,0x0000,0xdeb6,
-0x0000,0xb7ea,0xb7e4,0xb7eb,0xb7ec,0x0000,0xb7e7,0xb7e6,
-0x0000,0x0000,0xe2ce,0xbabe,0xbabd,0x0000,0x0000,0xe2d3,
-0x0000,0xbcfc,0xbabf,0x0000,0x0000,0xbac1,0xe2d4,0xb7e3,
-0xbac0,0xe2d0,0xe2d2,0xe2cf,0x0000,0xe2d1,0x0000,0x0000,
-0x0000,0xe6ab,0x0000,0x0000,0xe6aa,0xe6a7,0xbd40,0xea62,
-0xbd41,0xe6a6,0x0000,0xbcfe,0x0000,0xe6a8,0xe6a5,0xe6a2,
-0xe6a9,0xe6a3,0xe6a4,0xbcfd,0x0000,0x0000,0x0000,0x0000,
-0xed69,0x0000,0xea66,0x0000,0xea65,0xea67,0x0000,0xed66,
-0xbf5a,0x0000,0xea63,0x0000,0xbf58,0x0000,0xbf5c,0xbf5b,
-0xea64,0xea68,0x0000,0xbf59,0x0000,0xed6d,0xc0f5,0xc27a,
-0xc0f6,0xc0f3,0xed6a,0xed68,0x0000,0xed6b,0x0000,0xed6e,
-0xc0f4,0xed6c,0xed67,0x0000,0x0000,0xf042,0xf045,0xf275,
-0xf040,0x0000,0xf46f,0xf046,0x0000,0xc3a2,0xf044,0xc27b,
-0xf041,0xf043,0xf047,0xf276,0x0000,0xf274,0x0000,0x0000,
-0x0000,0x0000,0xc3a3,0xf273,0x0000,0x0000,0x0000,0xc46e,
-0x0000,0x0000,0x0000,0x0000,0xc4ed,0xf6f1,0xc4ec,0xf6f3,
-0xf6f0,0xf6f2,0xc5d0,0xf8b2,0xa5ca,0xcd6e,0xd2bc,0xd2bd,
-0xb27d,0xdebf,0xbf5d,0xc3a4,0xc57b,0xf8b3,0xa5cb,0x0000,
-0xcd6f,0xa260,0x0000,0x0000,0xcfd7,0x0000,0xcfd8,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xd2be,0xd2bf,0xb27e,0xb2a1,
-0x0000,0x0000,0x0000,0xdaab,0x0000,0xdec2,0xdec1,0xdec0,
-0xe2d5,0x0000,0xe2d6,0xe2d7,0xbac2,0x0000,0x0000,0xe6ad,
-0xe6ac,0x0000,0x0000,0xea69,0xbf5e,0xbf5f,0x0000,0xed72,
-0xed6f,0xed70,0xed71,0xf049,0xf048,0xc27c,0xf277,0xf5de,
-0xa5cc,0x0000,0xacc6,0x0000,0xb2a2,0xdec3,0x0000,0xa5cd,
-0x0000,0xd2c0,0xb2a3,0x0000,0x0000,0xb563,0xb564,0x0000,
-0xa5ce,0xa5cf,0xca46,0xa86a,0xa869,0xacc7,0xcfd9,0xdaac,
-0xa5d0,0xa5d1,0xa5d2,0xa5d3,0x0000,0x0000,0x0000,0xa86b,
-0xa86c,0xcb6e,0xcb6d,0x0000,0x0000,0xaab6,0xcd72,0xcd70,
-0xcd71,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xcfda,
-0xcfdb,0x0000,0x0000,0xaccb,0xacc9,0x0000,0xacca,0xacc8,
-0x0000,0x0000,0x0000,0x0000,0xaf60,0x0000,0x0000,0x0000,
-0x0000,0xaf64,0xaf63,0xd2c1,0xaf62,0xaf61,0x0000,0xd2c2,
-0x0000,0x0000,0xb2a6,0xd67b,0xd67a,0xb2a4,0xb2a5,0x0000,
-0x0000,0x0000,0xb566,0xb565,0xdaae,0x0000,0x0000,0xdaad,
-0xb2a7,0x0000,0x0000,0x0000,0x0000,0x0000,0xb7ed,0xdec5,
-0xb7ee,0xdec4,0x0000,0x0000,0x0000,0xe2d8,0xe6ae,0xbd42,
-0xea6a,0x0000,0x0000,0x0000,0xed73,0x0000,0xc3a6,0xc3a5,
-0x0000,0x0000,0xc57c,0xa5d4,0xcd73,0x0000,0x0000,0xb2a8,
-0xe2d9,0xbac3,0x0000,0x0000,0xcb6f,0xcb70,0x0000,0x0000,
-0xcd74,0xaab8,0xaab9,0x0000,0x0000,0xaab7,0x0000,0x0000,
-0x0000,0x0000,0xaccf,0xacd0,0xaccd,0xacce,0x0000,0xcfdc,
-0x0000,0x0000,0xcfdd,0xaccc,0x0000,0x0000,0x0000,0x0000,
-0xd2c3,0x0000,0xaf68,0xaf69,0x0000,0xb2ab,0xd2c9,0x0000,
-0xaf6e,0xaf6c,0xd2ca,0xd2c5,0xaf6b,0xaf6a,0xaf65,0xd2c8,
-0xd2c7,0xd2c4,0xaf6d,0x0000,0xd2c6,0xaf66,0x0000,0xaf67,
-0x0000,0x0000,0xb2ac,0xd6a1,0xd6a2,0xb2ad,0xd67c,0xd67e,
-0xd6a4,0xd6a3,0xd67d,0x0000,0xb2a9,0xb2aa,0x0000,0xdab6,
-0xb56b,0xb56a,0xdab0,0xb568,0x0000,0xdab3,0xb56c,0xdab4,
-0xb56d,0xdab1,0xb567,0xb569,0xdab5,0x0000,0xdab2,0xdaaf,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xded2,0x0000,0xdec7,
-0xb7f0,0xb7f3,0xb7f2,0xb7f7,0xb7f6,0xded3,0xded1,0xdeca,
-0xdece,0xdecd,0xb7f4,0xded0,0xdecc,0xded4,0xdecb,0xb7f5,
-0xb7ef,0xb7f1,0x0000,0xdec9,0x0000,0x0000,0x0000,0x0000,
-0xe2db,0xbac7,0xe2df,0xbac6,0xe2dc,0xbac5,0x0000,0xdec8,
-0xdecf,0xe2de,0x0000,0xbac8,0xe2e0,0xe2dd,0xe2da,0x0000,
-0x0000,0xe6b1,0xe6b5,0xe6b7,0xe6b3,0xe6b2,0xe6b0,0xbd45,
-0xbd43,0xbd48,0xbd49,0xe6b4,0xbd46,0xe6af,0xbd47,0xbac4,
-0xe6b6,0xbd44,0x0000,0x0000,0x0000,0xea6c,0x0000,0xea6b,
-0xea73,0xea6d,0xea72,0xea6f,0xbf60,0xea71,0x0000,0x0000,
-0xbf61,0x0000,0xbf62,0x0000,0xea70,0xea6e,0x0000,0x0000,
-0x0000,0x0000,0xc0f8,0xed74,0x0000,0x0000,0xc0f7,0xed77,
-0xed75,0xed76,0x0000,0x0000,0xc0f9,0x0000,0x0000,0x0000,
-0xf04d,0x0000,0xc2a1,0xf04e,0x0000,0x0000,0xc27d,0xf04f,
-0xc27e,0xf04c,0xf050,0x0000,0xf04a,0x0000,0x0000,0xc3a7,
-0xf278,0xc3a8,0xc46f,0x0000,0xf04b,0xc470,0x0000,0x0000,
-0x0000,0xc4ee,0xf5df,0x0000,0xc57e,0xf6f4,0xc57d,0x0000,
-0xf7ea,0xc5f5,0xc5f6,0x0000,0x0000,0xf9cc,0x0000,0x0000,
-0xacd1,0xcfde,0x0000,0xb56e,0xb56f,0xa5d5,0xa6ca,0xca47,
-0x0000,0xcb71,0xa86d,0x0000,0xaaba,0x0000,0xacd2,0xacd3,
-0xacd4,0xd6a6,0xd2cb,0xaf6f,0x0000,0x0000,0xb2ae,0xd6a5,
-0x0000,0x0000,0xdab8,0xb571,0x0000,0xdab7,0xb570,0x0000,
-0x0000,0xded5,0xbd4a,0xe6bb,0xe6b8,0xe6b9,0xe6ba,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xed78,0x0000,0xf051,0x0000,
-0x0000,0x0000,0xf471,0xf470,0x0000,0xf6f5,0xa5d6,0xcd75,
-0xaf70,0x0000,0x0000,0x0000,0xb572,0xded6,0x0000,0x0000,
-0xe2e1,0x0000,0xbd4b,0xea74,0x0000,0xf052,0xf472,0xa5d7,
-0x0000,0x0000,0xaabb,0xacd7,0xcfdf,0xacd8,0xacd6,0x0000,
-0xacd5,0xd2cc,0xaf71,0x0000,0x0000,0xaf72,0xaf73,0x0000,
-0x0000,0x0000,0xb2b0,0xd6a7,0xb2af,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xdab9,0xb2b1,0xb573,0xded7,0xb7f8,0xb7f9,
-0x0000,0xbac9,0x0000,0xbaca,0xbd4c,0xbf64,0xea75,0xbf63,
-0x0000,0xed79,0xc0fa,0x0000,0xf053,0xf473,0xa5d8,0xa86e,
-0xcd78,0xcd77,0xaabc,0xcd76,0xaabd,0xcd79,0x0000,0xcfe5,
-0xacdb,0xacda,0xcfe7,0xcfe6,0xacdf,0x0000,0xacde,0x0000,
-/* 0x7700 */
-0x0000,0xacd9,0x0000,0xcfe1,0xcfe2,0xcfe3,0x0000,0xace0,
-0xcfe0,0xacdc,0xcfe4,0xacdd,0x0000,0x0000,0x0000,0x0000,
-0xd2cf,0xd2d3,0xd2d1,0xd2d0,0x0000,0xd2d4,0x0000,0x0000,
-0x0000,0xd2d5,0xd2d6,0xd2ce,0x0000,0xd2cd,0x0000,0xaf75,
-0xaf76,0x0000,0xd2d7,0xd2d2,0x0000,0xd6b0,0x0000,0xd2d8,
-0xaf77,0xaf74,0x0000,0x0000,0x0000,0xd6aa,0x0000,0xd6a9,
-0x0000,0xd6ab,0xd6ac,0xd6ae,0xd6ad,0xd6b2,0xb2b5,0xb2b2,
-0xb2b6,0xd6a8,0xb2b7,0xd6b1,0xb2b4,0xd6af,0xb2b3,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xdabc,0xdabe,0xdaba,0xdabb,
-0x0000,0x0000,0xdabf,0xdac1,0xdac2,0xdabd,0xdac0,0xb574,
-0x0000,0x0000,0xdedb,0x0000,0xdee0,0xded8,0xdedc,0x0000,
-0x0000,0xdee1,0xdedd,0xb7fa,0xb843,0x0000,0xb7fd,0xded9,
-0xdeda,0xbace,0xb846,0xb7fe,0x0000,0xb844,0xb7fc,0xdedf,
-0xb845,0xdede,0xb841,0xb7fb,0xb842,0xdee2,0xe2e6,0xe2e8,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xb840,0x0000,0x0000,0xe2e3,0xbacc,0xe2e9,0xbacd,
-0xe2e7,0xe2e2,0xe2e5,0xe2ea,0xbacb,0xe2e4,0x0000,0xbd4e,
-0xe6bf,0xe6be,0x0000,0xbd51,0xbd4f,0xe6bc,0xbd4d,0xe6bd,
-0x0000,0xbd50,0x0000,0x0000,0x0000,0xea7d,0x0000,0xeaa1,
-0x0000,0xea7e,0xea76,0xea7a,0xea79,0xea77,0xbf66,0xbf67,
-0xbf65,0xea78,0xea7b,0xea7c,0x0000,0xbf68,0x0000,0xc140,
-0xeda3,0x0000,0xc0fc,0xed7b,0xc0fe,0xc141,0x0000,0x0000,
-0xc0fd,0xeda2,0xed7c,0xc0fb,0xeda1,0xed7a,0xed7e,0xed7d,
-0x0000,0x0000,0xf055,0xc2a4,0xc2a5,0xc2a2,0x0000,0xc2a3,
-0x0000,0x0000,0xf054,0x0000,0xf27b,0x0000,0x0000,0xc3a9,
-0x0000,0xf279,0xf27a,0x0000,0xf474,0xf477,0xf475,0xf476,
-0xf5e0,0x0000,0x0000,0xc4ef,0xf7eb,0xf8b4,0x0000,0xc5f7,
-0xf8f8,0xf8f9,0xc666,0xa5d9,0xace1,0x0000,0xdac3,0x0000,
-0xdee3,0x0000,0xa5da,0xa86f,0x0000,0xaabe,0x0000,0xcfe8,
-0xcfe9,0xaf78,0x0000,0x0000,0xdac4,0xb575,0xb847,0xc142,
-0xeda4,0xf27c,0xf478,0xa5db,0x0000,0x0000,0x0000,0xcda1,
-0xcd7a,0xcd7c,0xcd7e,0xcd7d,0xcd7b,0xaabf,0x0000,0x0000,
-/* 0x7800 */
-0x0000,0x0000,0xace2,0xcff2,0x0000,0xcfed,0xcfea,0x0000,
-0x0000,0xcff1,0x0000,0x0000,0xace4,0xace5,0xcff0,0xcfef,
-0xcfee,0xcfeb,0xcfec,0xcff3,0xace3,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xaf7c,0x0000,0xafa4,
-0xafa3,0xd2e1,0xd2db,0xd2d9,0x0000,0xafa1,0xd6b9,0xaf7a,
-0xd2de,0xd2e2,0xd2e4,0xd2e0,0xd2da,0xafa2,0xd2df,0xd2dd,
-0xaf79,0xd2e5,0xafa5,0xd2e3,0xaf7d,0xd2dc,0x0000,0xaf7e,
-0xaf7b,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xb2b9,0x0000,0xd6ba,0x0000,0x0000,
-0xd6b3,0xd6b5,0xd6b7,0x0000,0xd6b8,0xd6b6,0xb2ba,0x0000,
-0xd6bb,0x0000,0xd6b4,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xdac8,0xb576,0xdad0,0x0000,
-0xdac5,0x0000,0xdad1,0x0000,0xdac6,0xdac7,0x0000,0x0000,
-0xdacf,0xdace,0xdacb,0xb2b8,0xb577,0xdac9,0xdacc,0xb578,
-0xdacd,0xdaca,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xdeee,0x0000,0xdef2,0xb84e,0x0000,0xe2f0,0xb851,
-0xdef0,0xf9d6,0x0000,0xdeed,0xdee8,0xdeea,0xdeeb,0xdee4,
-0x0000,0xb84d,0x0000,0x0000,0xb84c,0x0000,0xb848,0xdee7,
-0x0000,0xb84f,0x0000,0xb850,0xdee6,0xdee9,0xdef1,0xb84a,
-0xb84b,0xdeef,0xdee5,0x0000,0x0000,0x0000,0xe2f2,0xbad0,
-0xe2f4,0xdeec,0xe2f6,0xbad4,0xe2f7,0xe2f3,0x0000,0xbad1,
-0xe2ef,0xbad3,0xe2ec,0xe2f1,0xe2f5,0xe2ee,0x0000,0x0000,
-0xb849,0x0000,0xe2eb,0xbad2,0xe2ed,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xbd54,0xe6c1,0xbd58,0x0000,0xbd56,0x0000,
-0x0000,0xbacf,0x0000,0xe6c8,0xe6c9,0xbd53,0x0000,0x0000,
-0xe6c7,0xe6ca,0xbd55,0xbd52,0xe6c3,0xe6c0,0xe6c5,0xe6c2,
-0xbd59,0xe6c4,0x0000,0x0000,0xe6c6,0xbd57,0x0000,0x0000,
-0x0000,0x0000,0xbf6a,0xeaa8,0x0000,0xeaa2,0xeaa6,0xeaac,
-0xeaad,0xeaa9,0xeaaa,0xeaa7,0x0000,0xeaa4,0x0000,0xbf6c,
-0xbf69,0xeaa3,0xeaa5,0x0000,0xbf6b,0xeaab,0x0000,0xc146,
-0x0000,0x0000,0xedaa,0xeda5,0xc145,0x0000,0x0000,0xc143,
-0x0000,0xedac,0xc144,0xeda8,0xeda9,0xeda6,0xedad,0xf056,
-/* 0x7900 */
-0x0000,0xc147,0xeda7,0x0000,0xedae,0xedab,0x0000,0x0000,
-0x0000,0xf05a,0x0000,0x0000,0xf057,0x0000,0xc2a6,0x0000,
-0xf05b,0xf05d,0xf05c,0xf058,0xf059,0x0000,0x0000,0xf2a3,
-0x0000,0xc3aa,0x0000,0xf27e,0xf2a2,0xf27d,0xf2a4,0x0000,
-0x0000,0xf2a1,0x0000,0xf47a,0xf47d,0xf479,0xc471,0xf47b,
-0xf47c,0xf47e,0xc472,0xc474,0xc473,0xf5e1,0x0000,0xf5e3,
-0x0000,0xf5e2,0x0000,0x0000,0x0000,0xf6f6,0x0000,0x0000,
-0xf8b5,0xf8fa,0xa5dc,0x0000,0x0000,0xcb72,0xaac0,0xcda3,
-0xaac1,0xaac2,0xcda2,0x0000,0xcff8,0xcff7,0xace6,0xace9,
-0xace8,0xace7,0xcff4,0xcff6,0xcff5,0x0000,0x0000,0xd2e8,
-0xafa7,0xd2ec,0xd2eb,0xd2ea,0xd2e6,0xafa6,0xafaa,0xafad,
-0x0000,0x0000,0xafae,0xd2e7,0xd2e9,0xafac,0xafab,0xafa9,
-0xafa8,0xd6c2,0x0000,0xd6c0,0xd6bc,0xb2bb,0x0000,0xd6bd,
-0xb2bc,0xd6be,0xd6bf,0xd6c1,0x0000,0xb2bd,0x0000,0x0000,
-0xdad5,0x0000,0xdad4,0xdad3,0xdad2,0x0000,0x0000,0x0000,
-0x0000,0xdef6,0xb852,0x0000,0xdef3,0xdef5,0x0000,0xb853,
-0x0000,0xb854,0xdef4,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xe341,0x0000,0xe2f9,0xe2fa,0x0000,0xbad7,0xbad5,0xbad6,
-0xe343,0x0000,0xe342,0xe2fe,0xe2fd,0xe2fc,0xe2fb,0xe340,
-0xe2f8,0x0000,0xe6cb,0xe6d0,0xe6ce,0x0000,0x0000,0x0000,
-0xe6cd,0xe6cc,0xe6cf,0x0000,0xeaae,0x0000,0xbf6d,0xc148,
-0xedb0,0x0000,0xc149,0xedaf,0xf05f,0xf05e,0xc2a7,0x0000,
-0xf2a5,0xc3ab,0xf4a1,0xc5a1,0xf6f7,0x0000,0xf8b7,0xf8b6,
-0xc9a8,0xacea,0xaceb,0xd6c3,0x0000,0xb856,0xa5dd,0xa872,
-0xa871,0xa870,0x0000,0x0000,0x0000,0xcda4,0x0000,0x0000,
-0xaac4,0xaac3,0x0000,0xacee,0x0000,0xcffa,0xcffd,0xcffb,
-0x0000,0xacec,0xaced,0x0000,0x0000,0xcff9,0xcffc,0x0000,
-0xafb5,0x0000,0x0000,0x0000,0xd2f3,0xd2f5,0xd2f4,0xafb2,
-0xd2ef,0x0000,0x0000,0xafb0,0xafaf,0x0000,0xafb3,0xafb1,
-0x0000,0xafb4,0xd2f2,0xd2ed,0xd2ee,0xd2f1,0xd2f0,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xd6c6,0xd6c7,
-0xd6c5,0x0000,0xd6c4,0xb2be,0x0000,0x0000,0x0000,0x0000,
-0xb57d,0x0000,0xdad6,0xdad8,0xdada,0xb57c,0x0000,0x0000,
-0xb57a,0x0000,0xdad7,0xb57b,0xdad9,0xb579,0x0000,0x0000,
-0xdf41,0xdef7,0xdefa,0xdefe,0xb85a,0xdefc,0x0000,0xdefb,
-0xdef8,0xdef9,0xb858,0xdf40,0xb857,0x0000,0xb85c,0xb85b,
-0xb859,0x0000,0xdefd,0x0000,0x0000,0x0000,0xe349,0x0000,
-0xe348,0x0000,0x0000,0xe344,0x0000,0x0000,0xbad8,0xe347,
-0xe346,0xbad9,0x0000,0x0000,0x0000,0x0000,0x0000,0xbd5e,
-0x0000,0xe6d2,0x0000,0xbd5f,0xbd5b,0xbd5d,0x0000,0xbd5a,
-0xbd5c,0x0000,0x0000,0x0000,0xeaaf,0x0000,0xbf70,0xeab1,
-0xeab0,0x0000,0xe345,0xbf72,0xbf71,0xbf6e,0xbf6f,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xedb5,0x0000,0xedb3,0xc14a,
-0xedb4,0x0000,0xedb6,0xedb2,0xedb1,0x0000,0x0000,0xf060,
-0xc2aa,0xc2a8,0xc2a9,0x0000,0x0000,0x0000,0x0000,0xf2a6,
-0xf2a7,0xc3ad,0x0000,0xc3ac,0xf4a3,0xf4a4,0xf4a2,0x0000,
-0xf6f8,0xf6f9,0x0000,0x0000,0xa5de,0xca48,0xa873,0x0000,
-0xcda5,0xaac6,0xaac5,0xcda6,0x0000,0x0000,0xd040,0xacef,
-0xcffe,0xacf0,0x0000,0x0000,0xafb6,0xd2f8,0xd2f6,0xd2fc,
-0xafb7,0xd2f7,0xd2fb,0xd2f9,0xd2fa,0x0000,0x0000,0xd6c8,
-0xd6ca,0x0000,0xb2bf,0x0000,0xd6c9,0xb2c0,0xb5a2,0xb5a1,
-0xb57e,0xdadb,0x0000,0x0000,0x0000,0x0000,0xdf44,0xb85d,
-0xb85e,0x0000,0xdf43,0xdf42,0x0000,0x0000,0x0000,0x0000,
-0xe34a,0xbadb,0xbada,0xe34b,0xe34c,0x0000,0xbd61,0xbd60,
-0x0000,0xeab5,0xe6d3,0xe6d5,0xe6d4,0xeab4,0xeab2,0xeab6,
-0xeab3,0x0000,0xbf73,0x0000,0x0000,0x0000,0xedb7,0xc14b,
-0xedb8,0xedb9,0x0000,0x0000,0xc2ab,0xc2ac,0x0000,0xc475,
-0x0000,0x0000,0xc5d1,0xa5df,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xd041,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xd2fd,0xafb8,0x0000,0x0000,0x0000,0x0000,0x0000,0xb3ba,
-0xb3b9,0x0000,0x0000,0xb5a4,0xdadd,0xb5a3,0xdadc,0x0000,
-0x0000,0x0000,0x0000,0xdf45,0x0000,0xbadc,0xe34d,0xbadd,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xc476,0xf4a5,
-0x0000,0xa6cb,0xaac7,0xcda7,0x0000,0xacf2,0x0000,0xacf1,
-0xd042,0xd043,0x0000,0x0000,0xd340,0xd342,0xafb9,0x0000,
-0xd344,0xd347,0xd345,0x0000,0x0000,0x0000,0xd346,0xd343,
-0xd2fe,0xafba,0xd348,0xd341,0x0000,0x0000,0x0000,0x0000,
-0xd6d3,0xb2c6,0xd6dc,0xb2c3,0x0000,0xd6d5,0xb2c7,0x0000,
-0xb2c1,0x0000,0xd6d0,0xd6dd,0xd6d1,0xd6ce,0xb2c5,0x0000,
-0xb2c2,0x0000,0xd6d4,0xd6d7,0xb2c4,0xd6d8,0xb2c8,0xd6d9,
-0xd6cf,0xd6d6,0xd6da,0xd6d2,0xd6cd,0xd6cb,0x0000,0x0000,
-0xd6db,0x0000,0x0000,0xdadf,0x0000,0x0000,0x0000,0x0000,
-0xdae4,0x0000,0x0000,0x0000,0xdae0,0xdae6,0xb5a7,0xd6cc,
-0xdae1,0xb5a5,0xdade,0xb5ac,0xdae2,0xb5ab,0xdae3,0xb5ad,
-0xb5a8,0xb5ae,0xb5a9,0x0000,0xb5aa,0x0000,0xb5a6,0x0000,
-0xdae5,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xb861,0xdf50,0x0000,0xdf53,0xdf47,0xdf4c,0xdf46,0xb863,
-0x0000,0xdf4a,0x0000,0x0000,0x0000,0xdf48,0xb862,0x0000,
-0xdf4f,0xdf4e,0xdf4b,0xdf4d,0xdf49,0xbae1,0xdf52,0xb85f,
-0xdf51,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xe35d,0x0000,0xbae8,0xe358,0x0000,0xbae7,
-0xe34e,0x0000,0xe350,0xbae0,0xe355,0xe354,0xe357,0xbae5,
-0xe352,0xe351,0x0000,0x0000,0xbae4,0xbadf,0xe353,0xbae2,
-0xe359,0xe35b,0x0000,0xe356,0xe34f,0xbae3,0x0000,0x0000,
-0xbd69,0xbade,0x0000,0x0000,0xe35c,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xe6d9,0xbd62,0x0000,0xe6db,
-0x0000,0xbd63,0x0000,0x0000,0xbd65,0xe6de,0x0000,0xe6d6,
-0xbae6,0xe6dc,0x0000,0x0000,0x0000,0x0000,0xe6d8,0x0000,
-0xb860,0xbd68,0x0000,0x0000,0xbd64,0x0000,0xbd66,0xbd67,
-0x0000,0xbf76,0xe6dd,0xe6d7,0xbd6a,0x0000,0xe6da,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xeac0,0xeabb,0x0000,0x0000,
-0xeac5,0xbf74,0xeabd,0xbf78,0xeac3,0xeaba,0xeab7,0xeac6,
-0xc151,0xbf79,0xeac2,0xeab8,0xbf77,0xeabc,0xbf7b,0xeab9,
-0xeabe,0xbf7a,0xeac1,0xeac4,0x0000,0x0000,0x0000,0x0000,
-0xedcb,0xedcc,0xedbc,0xedc3,0xedc1,0x0000,0x0000,0xc14f,
-0xedc8,0xeabf,0x0000,0xedbf,0x0000,0xedc9,0xc14e,0xedbe,
-0xedbd,0xedc7,0xedc4,0xedc6,0x0000,0xedba,0xedca,0xc14c,
-0x0000,0xedc5,0xedce,0xedc2,0xc150,0xc14d,0xedc0,0xedbb,
-0xedcd,0xbf75,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xf063,0x0000,0x0000,0xf061,0xf067,0xc2b0,0xf065,
-0xf064,0xc2b2,0xf06a,0xc2b1,0x0000,0xf06b,0xf068,0xc2ae,
-0xf069,0xf062,0xc2af,0xc2ad,0xf2ab,0xf066,0x0000,0x0000,
-0xf06c,0x0000,0x0000,0xf2a8,0x0000,0x0000,0x0000,0xc3b2,
-0xc3b0,0xf2aa,0x0000,0xf2ac,0xf2a9,0xc3b1,0xc3ae,0xc3af,
-0xc3b3,0x0000,0x0000,0xc478,0x0000,0xf4aa,0x0000,0xf4a9,
-0xf4a7,0xf4a6,0xf4a8,0x0000,0xc477,0xc479,0x0000,0x0000,
-0xc4f0,0x0000,0x0000,0xf5e5,0xf5e4,0x0000,0x0000,0xf6fa,
-0x0000,0xf6fc,0xf6fe,0xf6fd,0xf6fb,0x0000,0x0000,0xc5a3,
-0xc5a2,0x0000,0x0000,0xc5d3,0xc5d2,0xc5d4,0xf7ed,0xf7ec,
-0x0000,0xf8fb,0xf8b8,0xf8fc,0xc658,0x0000,0xc659,0xf96d,
-0x0000,0x0000,0xc67e,0xa6cc,0x0000,0xcda8,0x0000,0x0000,
-0xd045,0xd046,0xd044,0x0000,0x0000,0xacf3,0x0000,0xd047,
-0xd048,0xd049,0x0000,0x0000,0xd349,0xd34f,0x0000,0x0000,
-0xd34d,0xafbb,0xd34b,0x0000,0xd34c,0xd34e,0x0000,0x0000,
-0x0000,0xd34a,0xb2c9,0x0000,0xd6de,0xb2cb,0xd6e0,0xb2ca,
-0xd6df,0x0000,0x0000,0x0000,0x0000,0x0000,0xdae8,0xb5af,
-0x0000,0xdaea,0xdae7,0xd6e1,0x0000,0xb5b0,0x0000,0xf9db,
-0xdae9,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xdf56,
-0x0000,0xb864,0xdf54,0xb865,0xdf55,0xb866,0x0000,0x0000,
-0x0000,0xbae9,0xe361,0xe35e,0xe360,0xbaea,0xbaeb,0xe35f,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xe6df,0x0000,0x0000,
-0xe6e0,0x0000,0xbd6b,0xe6e2,0xe6e1,0x0000,0xa261,0x0000,
-0xeaca,0xeacb,0xeac7,0x0000,0xeac8,0xbf7c,0xbf7d,0xeac9,
-0x0000,0xc157,0x0000,0x0000,0xc153,0xc158,0xc154,0xc156,
-0xc152,0x0000,0xc155,0x0000,0x0000,0x0000,0x0000,0xc2b3,
-0xedcf,0x0000,0xf2ae,0x0000,0xf2ad,0x0000,0xf4ab,0xc47a,
-0xc47b,0xf741,0xf5e6,0x0000,0xf740,0x0000,0xf8fd,0xf9a4,
-0xa6cd,0x0000,0x0000,0xa874,0x0000,0xcda9,0xaac8,0x0000,
-0xacf6,0xd04c,0xacf4,0xd04a,0xacf9,0xacf5,0xacfa,0xacf8,
-0xd04b,0xacf7,0xafbf,0xafbe,0xd35a,0xafc7,0xd353,0xd359,
-0xafc3,0xd352,0xd358,0xd356,0xafc2,0xafc4,0xd355,0xafbd,
-0xd354,0xafc8,0xafc5,0xafc9,0xafc6,0xd351,0xd350,0xd357,
-0xafc0,0xafbc,0xafc1,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xd6f0,0xd6e9,0x0000,0xb5b5,0xd6e8,0x0000,0xb2cf,0xb2d6,
-0xb2d3,0xb2d9,0xb2d8,0xb2d4,0x0000,0xd6e2,0xd6e5,0x0000,
-0xd6e4,0xb2d0,0xd6e6,0xd6ef,0xb2d1,0xd6e3,0xd6ec,0xd6ed,
-0xb2d2,0xd6ea,0xb2d7,0xb2cd,0xb2d5,0xd6e7,0xb2cc,0xd6eb,
-0x0000,0x0000,0xd6ee,0x0000,0x0000,0x0000,0xdafb,0xdaf2,
-0xb5b2,0xdaf9,0xdaf6,0xdaee,0xdaf7,0xb5b4,0xdaef,0x0000,
-0xdaeb,0x0000,0x0000,0xb86c,0xdaf4,0x0000,0xb5b1,0xdafa,
-0x0000,0xb5b8,0xb5ba,0xdaed,0x0000,0x0000,0xb5b9,0xdaf0,
-0xb5b3,0xdaf8,0xdaf1,0xdaf5,0x0000,0xdaf3,0xb5b6,0xdaec,
-0xb5bb,0xb2ce,0xb5b7,0xb5bc,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xb868,0xdf5d,0xdf5f,0xdf61,0xdf65,0x0000,0xdf5b,
-0xdf59,0xb86a,0x0000,0xdf60,0xdf64,0xdf5c,0xdf58,0x0000,
-0xdf57,0x0000,0x0000,0x0000,0xdf62,0xdf5a,0xdf5e,0xb86b,
-0x0000,0xb869,0xdf66,0xb867,0xdf63,0x0000,0xe372,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xbaee,0xe36a,0xbd78,0xe374,
-0xbaf1,0xe378,0xbaf7,0xe365,0x0000,0x0000,0xe375,0xe362,
-0x0000,0xe377,0xe366,0x0000,0xbafe,0xbafb,0xe376,0xe370,
-0xbaed,0xbaf5,0xbaf4,0x0000,0xbaf3,0xbaf9,0x0000,0xe363,
-0xbafa,0xe371,0xbaf6,0xbaec,0xe373,0xbaef,0xbaf0,0xbaf8,
-0xe368,0xe367,0xe364,0x0000,0xe36c,0xe369,0xe36d,0xbafd,
-0x0000,0xe379,0xbaf2,0xe36e,0xe36f,0x0000,0xe36b,0x0000,
-0x0000,0x0000,0xbafc,0x0000,0x0000,0x0000,0x0000,0xe6e7,
-0xbd70,0xbd79,0xbd75,0xe6e4,0x0000,0xbd72,0xbd76,0xe6f0,
-0xbd6c,0xe6e8,0x0000,0xbd74,0x0000,0x0000,0xe6eb,0xe6e6,
-0xbd73,0xbd77,0xe6e5,0x0000,0xbd71,0x0000,0xe6ef,0xbd6e,
-0xe6ee,0xe6ed,0xbd7a,0xe572,0xbd6d,0x0000,0xe6ec,0xe6e3,
-0x0000,0xbd7b,0xe6ea,0xbd6f,0x0000,0x0000,0x0000,0x0000,
-/* 0x7e00 */
-0x0000,0x0000,0x0000,0xe6e9,0x0000,0x0000,0x0000,0x0000,
-0xbfa2,0xbfa7,0xbf7e,0xead8,0xeacf,0xeadb,0xead3,0xead9,
-0xbfa8,0xbfa1,0xeacc,0xead2,0xeadc,0xead5,0xeada,0xeace,
-0x0000,0x0000,0xead6,0xbfa3,0xead4,0xbfa6,0xbfa5,0xead0,
-0xead1,0xeacd,0xead7,0xbfa4,0xeade,0xeadd,0x0000,0x0000,
-0x0000,0xedda,0xedd6,0xc15f,0x0000,0xedd0,0xc159,0xc169,
-0xeddc,0xc161,0xc15d,0xedd3,0xc164,0xc167,0xedde,0xc15c,
-0xedd5,0xc165,0xede0,0xeddd,0xedd1,0xc160,0xc15a,0xc168,
-0xedd8,0xc163,0xedd2,0xc15e,0xeddf,0xc162,0xc15b,0xedd9,
-0xc166,0xedd7,0x0000,0x0000,0xeddb,0x0000,0x0000,0x0000,
-0xf06e,0xf074,0xc2b9,0xf077,0xc2b4,0xc2b5,0xf06f,0xf076,
-0xf071,0xc2ba,0xc2b7,0x0000,0xf06d,0x0000,0xc2b6,0xf073,
-0xf075,0xc2b8,0xf072,0xf070,0x0000,0x0000,0x0000,0x0000,
-0xf2b8,0xc3b7,0xc3b8,0xc3b4,0x0000,0xc3b5,0x0000,0xf2b4,
-0xf2b2,0x0000,0xf2b6,0xc3ba,0xf2b7,0xf2b0,0xf2af,0xf2b3,
-0xf2b1,0xc3b6,0xf2b5,0xf4ac,0xc47e,0xc47d,0xf4ad,0x0000,
-0xf4af,0xf4ae,0xc4a1,0x0000,0x0000,0x0000,0xf5eb,0xf5e8,
-0xf5e9,0x0000,0xf5e7,0xf5ea,0xc4f2,0xf5ec,0x0000,0xc4f1,
-0x0000,0xf742,0x0000,0xc5d5,0xc5d7,0xf7ee,0xc5d6,0xf8b9,
-0xf940,0xf942,0xf8fe,0xf941,0xc66c,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-/* 0x7f00 */
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xa6ce,0x0000,
-0xacfb,0xd26f,0xafca,0x0000,0x0000,0xb2da,0xdafc,0xdafd,
-0x0000,0x0000,0x0000,0xeadf,0xc16a,0xede1,0x0000,0x0000,
-0xc2bb,0x0000,0xf2ba,0xf2b9,0xc4a2,0xf5ed,0x0000,0xf743,
-0xc5f8,0xca49,0x0000,0x0000,0xaac9,0xa875,0x0000,0x0000,
-0xd04d,0x0000,0x0000,0xd360,0xd35b,0xd35f,0xd35d,0xafcb,
-0xd35e,0xd35c,0x0000,0xd6f1,0x0000,0xdafe,0xdb40,0xdf69,
-0xdf6a,0xb86e,0xb86f,0xdf68,0xdf6b,0xdf67,0xb86d,0x0000,
-0xbb40,0x0000,0xb870,0xe37a,0x0000,0xbd7c,0xe6f1,0xbd7d,
-0x0000,0xbfa9,0xeae2,0xeae0,0xeae1,0xede4,0xede3,0xede2,
-0x0000,0x0000,0x0000,0xf2bb,0x0000,0xc3b9,0xf2bc,0xf744,
-0xc5f9,0xf8ba,0xa6cf,0xaacb,0xaaca,0xd04f,0xacfc,0x0000,
-0x0000,0xd04e,0xd362,0x0000,0xafcc,0xd6f2,0xd361,0x0000,
-0x0000,0x0000,0xb2dc,0xd6f5,0xd6f3,0xd6f4,0xb2db,0x0000,
-0xdb42,0xdb43,0xdb41,0x0000,0xb873,0xdf6d,0xdf6c,0xdf6e,
-0xb872,0xb871,0x0000,0x0000,0xe6f2,0xe6f4,0x0000,0xbd7e,
-0xe6f3,0xeae3,0xbfaa,0xf079,0x0000,0xf078,0xc3bb,0xf2bd,
-0xc3bd,0xc3bc,0xf4b0,0xf5ee,0xc4f3,0xa6d0,0xd050,0xacfd,
-0xd365,0xafce,0xd364,0xd363,0x0000,0xafcd,0x0000,0xd6fb,
-0x0000,0xd6fd,0xd6f6,0xd6f7,0xb2dd,0xd6f8,0xb2de,0xd6fc,
-0xd6f9,0xd6fa,0xb2df,0x0000,0xb5be,0xb5bf,0x0000,0xdb44,
-0x0000,0x0000,0x0000,0xdf6f,0xdf70,0x0000,0xe37e,0xbb43,
-0xbb41,0xbb42,0xe37b,0xe37c,0x0000,0xe37d,0xe6f9,0x0000,
-0xe6fa,0xbda1,0xe6f7,0xe6f6,0xe6f8,0xe6f5,0xbfad,0xeae4,
-0xbfab,0xbfac,0xede6,0xc16b,0xede5,0xefa8,0x0000,0xf07a,
-0xf07b,0xc2bc,0x0000,0xc2bd,0xc16c,0xf2be,0xf2bf,0xf4b1,
-0xc4a3,0xa6d1,0x0000,0xa6d2,0xacfe,0xaacc,0xafcf,0xd051,
-0x0000,0x0000,0x0000,0xb5c0,0xa6d3,0xad41,0xd052,0xd053,
-0xad40,0xad42,0xa6d4,0x0000,0xd054,0xafd1,0xd366,0xafd3,
-0xafd0,0xafd2,0x0000,0xd741,0xb2e0,0x0000,0xd740,0xd6fe,
-0x0000,0xdf71,0x0000,0x0000,0xe3a1,0x0000,0xbda2,0x0000,
-0xbfae,0xeae6,0xeae5,0x0000,0xede7,0x0000,0x0000,0x0000,
-0xf5ef,0x0000,0x0000,0xa6d5,0xcb73,0xcdaa,0xad43,0xd055,
-0x0000,0xd368,0x0000,0x0000,0x0000,0xafd4,0xd367,0xafd5,
-0x0000,0x0000,0x0000,0xd743,0x0000,0x0000,0xb2e2,0xd742,
-0xd744,0x0000,0xb2e1,0x0000,0x0000,0x0000,0x0000,0xdb46,
-0xdb47,0xdb45,0xb5c1,0x0000,0x0000,0x0000,0xb874,0x0000,
-0xb875,0x0000,0xbb45,0x0000,0xe3a3,0xe3a2,0xbb44,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xe6fb,0x0000,0x0000,0xe6fc,
-0x0000,0x0000,0x0000,0x0000,0xeae7,0x0000,0x0000,0xc170,
-0xc16f,0xc16d,0xc16e,0xc171,0x0000,0xf07c,0xc2bf,0xc2be,
-0xf2c0,0xf4b2,0x0000,0x0000,0x0000,0xc5a5,0xc5a4,0xa6d6,
-0x0000,0x0000,0xd1fb,0x0000,0xb877,0xb5c2,0xb876,0xbb46,
-0x0000,0xa6d7,0xc9a9,0xa6d8,0xa6d9,0x0000,0x0000,0xcdab,
-0xcb76,0x0000,0xcb77,0xa877,0x0000,0xcb74,0xa876,0x0000,
-0xa879,0xcb75,0xa87b,0xa87a,0xcb78,0xa878,0x0000,0x0000,
-0x0000,0xaad1,0xaacf,0xcdad,0x0000,0xaace,0x0000,0x0000,
-0x0000,0xaad3,0xaad5,0xaad2,0x0000,0xcdb0,0xcdac,0xaad6,
-0x0000,0xaad0,0xa87c,0x0000,0xaad4,0xcdaf,0x0000,0x0000,
-0xcdae,0x0000,0xaacd,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xd05b,0xad47,0xad48,0xd05d,0x0000,0xd057,
-0xd05a,0xd063,0xd061,0x0000,0xad49,0xd067,0xad4c,0xd064,
-0xd05c,0xd059,0x0000,0x0000,0xdb49,0xd062,0xad44,0xd065,
-0xd056,0xd05f,0xad46,0xad4b,0xd060,0xad4f,0xad4d,0x0000,
-0xd058,0xad4a,0x0000,0xd05e,0xad4e,0xad45,0xd066,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xafda,0x0000,0xafe3,
-0xafd8,0xafd6,0xd36a,0xafde,0xafdb,0xd36c,0x0000,0x0000,
-0xafdd,0xd36b,0xd369,0xd36e,0xafe2,0xafe0,0xdb48,0x0000,
-0xd36f,0xd36d,0xafd7,0x0000,0x0000,0xafd9,0xafdc,0x0000,
-0xafdf,0x0000,0xafe1,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xd74e,0xb2e4,0x0000,
-0xd745,0xd747,0x0000,0xd748,0x0000,0xd750,0xd74c,0xd74a,
-0x0000,0xd74d,0xd751,0xb2e5,0xb2e9,0xd746,0x0000,0xd74f,
-0x0000,0xb2e7,0x0000,0xb2e6,0xd74b,0xd749,0x0000,0xb2e3,
-0xb2e8,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xb5c8,0xdb51,0x0000,0x0000,0xdb4f,0xb5ca,0x0000,
-0x0000,0x0000,0x0000,0xdb4a,0xdfa1,0x0000,0xb5c9,0xdb4e,
-0x0000,0x0000,0xdb4b,0xb5c5,0xb5cb,0xdb50,0xb5c7,0xdb4d,
-0xbb47,0xb5c6,0xdb4c,0xb5cc,0xb5c4,0xb5c3,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xdf77,0xdf75,0x0000,0xdf7b,0x0000,
-0xdf73,0xdfa2,0xdf78,0x0000,0xdf72,0xb87b,0xb8a3,0xdf7d,
-0x0000,0xdf76,0x0000,0xb87e,0x0000,0x0000,0xb87c,0xdf7e,
-0xb879,0xb878,0xdf79,0xb87d,0xb5cd,0x0000,0xdf7c,0xdf74,
-0xb87a,0xb8a1,0xb8a2,0x0000,0x0000,0x0000,0x0000,0xbb4c,
-0xbb48,0x0000,0xbb4d,0xe3a6,0x0000,0x0000,0xe3a5,0xe3a7,
-0xbb4a,0xe3a4,0xbb4b,0xe3aa,0xe3a9,0xe3a8,0x0000,0xbb49,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xe741,0x0000,0xe744,
-0xbda8,0xe743,0xbda7,0xbda3,0xbda4,0xbda5,0xe740,0xe6fe,
-0xbda6,0x0000,0xe742,0xe6fd,0x0000,0x0000,0xeae9,0xeaf3,
-0xbfb1,0xbfb0,0x0000,0xeaed,0xeaef,0x0000,0xeaea,0x0000,
-0xeaee,0xeae8,0xeaf1,0xbfaf,0xeaf0,0xeaec,0x0000,0xeaf2,
-0x0000,0xeaeb,0xc174,0xede8,0xedee,0xc178,0xc17a,0xc177,
-0xc176,0x0000,0xc175,0xc173,0xede9,0xedec,0xc172,0xeded,
-0x0000,0xc179,0xedeb,0x0000,0xedea,0xc2c0,0x0000,0xc2c1,
-0xf0a1,0xf07d,0xf07e,0x0000,0x0000,0xf2c2,0x0000,0xf2c1,
-0xc3be,0xf4b4,0xc4a4,0xf4b3,0x0000,0xf5f0,0xf745,0xc5a6,
-0xf943,0xf944,0xc5d8,0xa6da,0x0000,0xaad7,0xdb52,0xbb4e,
-0xc17b,0xedef,0xa6db,0x0000,0xafe5,0xafe4,0xdb53,0x0000,
-0x0000,0x0000,0xeaf4,0xa6dc,0xad50,0x0000,0x0000,0xdb54,
-0xdb55,0xdb56,0xbb4f,0xbfb2,0xa6dd,0x0000,0xaad8,0xd068,
-0xafe6,0xd370,0xb2ea,0x0000,0xdb57,0xb8a4,0x0000,0xbb50,
-0xbfb3,0xc17c,0xc2c2,0xf4b5,0xa6de,0xaad9,0x0000,0x0000,
-0xafe7,0xd752,0xb5ce,0x0000,0xbb51,0xe3ab,0xe745,0x0000,
-0x0000,0x0000,0x0000,0xa6df,0xb5cf,0xdfa3,0xbb52,0xa6e0,
-0xcdb1,0xd069,0xad51,0x0000,0x0000,0xd372,0x0000,0x0000,
-0xafea,0x0000,0xafe8,0xafe9,0xafeb,0x0000,0x0000,0xd371,
-0x0000,0x0000,0xd757,0xd754,0xd756,0xb2eb,0xb2ed,0xb2ec,
-0xd753,0xb2ee,0xd755,0x0000,0xdb58,0xdb59,0x0000,0xdb5a,
-0xdfa6,0x0000,0xdfa7,0x0000,0xdfa5,0xdfa8,0x0000,0xb8a5,
-0x0000,0xdfa4,0x0000,0xbb53,0x0000,0x0000,0xe74a,0xe746,
-0xe749,0xe74b,0xe748,0xe747,0x0000,0xeaf5,0xeaf6,0xeaf7,
-0xbfb4,0xbfb5,0xedf1,0xedf0,0xedf2,0x0000,0xf0a3,0xf0a2,
-0x0000,0xf2c4,0x0000,0xf2c5,0xf2c3,0x0000,0xc4a5,0x0000,
-0xf4b6,0xf4b7,0x0000,0xf746,0xf7ef,0xf8bb,0xa6e1,0xa87d,
-0x0000,0xc17d,0xa6e2,0x0000,0xd758,0xdb5b,0x0000,0xc641,
-0xca4a,0x0000,0x0000,0x0000,0xca4b,0xca4d,0xa6e3,0xca4e,
-0xca4c,0x0000,0x0000,0xcba2,0xcba3,0xcb7b,0x0000,0x0000,
-0x0000,0x0000,0xcba1,0xa8a1,0x0000,0xa8a2,0xcb7c,0xcb7a,
-0xcb79,0xcb7d,0xa87e,0xcb7e,0xd06a,0x0000,0x0000,0x0000,
-0xcdb6,0xaadc,0xcdb5,0xcdb7,0x0000,0xaadb,0xcdbc,0xaadf,
-0xcdb2,0xcdc0,0xcdc6,0xaae6,0xcdc3,0xaae3,0x0000,0xcdb9,
-0xcdbf,0xcdc1,0x0000,0xcdb4,0xaae2,0xaadd,0xcdba,0xaae4,
-0xaae7,0xaae1,0x0000,0xaada,0xcdbe,0xcdb8,0xcdc5,0xaae9,
-0xaae5,0xaae0,0xcdbd,0xafec,0xcdbb,0xaade,0xaae8,0x0000,
-0xcdb3,0x0000,0xcdc2,0xcdc4,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xad62,0xad5c,0xad64,0xad61,0xd071,0xd074,0xad5d,
-0x0000,0xd06b,0x0000,0xad56,0xad60,0x0000,0xad63,0xad65,
-0xd0a2,0xd077,0x0000,0xad55,0xd0a1,0xad59,0xad57,0xad52,
-0xd06f,0x0000,0xd07e,0xd073,0xd076,0xd0a5,0x0000,0xad66,
-0xd07d,0xad5e,0xd078,0xd0a4,0xd075,0xd079,0xd07c,0x0000,
-0x0000,0xd06d,0xd0a3,0xd07b,0x0000,0x0000,0xd06c,0x0000,
-0xd070,0xad5f,0xad5a,0xad53,0xad58,0xad54,0xad67,0xd06e,
-0xd3a5,0xad5b,0x0000,0x0000,0xd07a,0xce41,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xd3a8,0xaffa,
-0x0000,0xd376,0x0000,0xd3a3,0xd37d,0x0000,0xd3b2,0x0000,
-0xd3aa,0x0000,0xd37e,0x0000,0xd3a9,0xd378,0xd37c,0xd3b5,
-0xaffd,0xd3ad,0xd3a4,0xafed,0xd3b3,0xd374,0x0000,0xd3ac,
-0x0000,0xaffc,0xaff7,0xd373,0xaff5,0xaff4,0xaff9,0xd3ab,
-0xaff1,0xaff8,0xd072,0xdb5c,0xd3a6,0x0000,0x0000,0xd37a,
-0xaffb,0xd37b,0xd3a1,0xaffe,0xd375,0xd3af,0x0000,0xd3ae,
-0xd3b6,0xaff3,0xaff0,0xd3b4,0xd3b0,0xd3a7,0xd3a2,0xaff6,
-0xaff2,0xd377,0xafee,0xd3b1,0xafef,0x0000,0xd379,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xd75e,0xd760,0xd765,0xd779,0xb2fc,
-0xb2f2,0x0000,0xd75d,0xb2fd,0xb2fe,0xd768,0xd76f,0xd775,
-0x0000,0xd762,0x0000,0xd769,0x0000,0x0000,0xb340,0xd777,
-0xd772,0xb2fa,0xb2f8,0xd76e,0xd76a,0xd75c,0xb2ef,0xd761,
-0xd759,0x0000,0xb2f7,0xb2f9,0xd766,0xd763,0xb2f4,0xd773,
-0xb2f1,0xd764,0xd77a,0xd76c,0x0000,0xd76b,0xb2f0,0x0000,
-0xb2fb,0x0000,0xb2f3,0xd75a,0xd75f,0xd770,0xd776,0xb341,
-0xd75b,0xd767,0xd76d,0xb2f6,0x0000,0x0000,0xd778,0xd771,
-0xd774,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xb2f5,0x0000,0xdb6c,
-0xdb60,0xb5d7,0xdb7d,0xdba7,0xdbaa,0xb5d5,0xdb68,0xdba3,
-0xdb69,0xdb77,0xb5e2,0xdb73,0xb5df,0x0000,0xdb74,0xdb5d,
-0x0000,0xdba4,0x0000,0x0000,0xb5e8,0xdba1,0xdb75,0xdbac,
-0xdb70,0xdfc8,0x0000,0xdbaf,0xb5e6,0xdb6e,0xdb7a,0xb5e9,
-0xb5d4,0xdb72,0xdbad,0xdb6b,0xdb64,0xdb6f,0x0000,0xdb63,
-0xdb61,0xb5d0,0xdba5,0xdb6a,0xdba8,0x0000,0xdba9,0xb5d8,
-0xb5dd,0xb5d9,0xb5e1,0xdb7e,0xb5da,0xdb76,0xdb66,0x0000,
-0xb5d2,0xdb5e,0xdba2,0xdbab,0xdb65,0xb5e0,0xdbb0,0xdb71,
-/* 0x8400 */
-0x0000,0xdb6d,0x0000,0xb5d1,0xb5e5,0x0000,0xdb7c,0xb5e7,
-0x0000,0xdb78,0xb5dc,0xb5d6,0xb5de,0xb5d3,0xb5e4,0xdb79,
-0xdb67,0xdb7b,0xdb62,0xdba6,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xdbae,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xdb5f,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xdfc7,0x0000,0xdfdd,0xb855,0xdfcc,0x0000,0xdfca,
-0xdfb5,0xb8a9,0xdfc5,0xdfd9,0xdfc1,0xb8b1,0xdfd8,0xdfbf,
-0xb5e3,0xdfcf,0xdfc0,0xdfd6,0xb8b0,0xb8a8,0x0000,0xdfaa,
-0xdfb2,0x0000,0xdfcb,0xdfc3,0xdfdc,0xdfc6,0xb8b6,0xdfd7,
-0x0000,0xb8ad,0x0000,0xdfc9,0xdfd1,0xdfb6,0xdfd0,0x0000,
-0xdfe1,0xdfb1,0xdfd2,0x0000,0xdfdf,0x0000,0xdfab,0xb5db,
-0x0000,0xdfb9,0xdfb8,0xb8af,0x0000,0xdfbc,0xdfbe,0xdfcd,
-0xdfde,0xb8b2,0x0000,0xb8b3,0x0000,0xdfb0,0xb8ab,0xdfb4,
-0xdfda,0xb8b4,0x0000,0xb8ac,0xb8ae,0xb8b5,0xdfe0,0xdfd3,
-0xdfce,0x0000,0x0000,0xdfbb,0xdfba,0xb8aa,0xdfac,0xb8a7,
-0xdfc4,0xdfad,0xdfc2,0x0000,0x0000,0xdfb7,0xdfdb,0x0000,
-0x0000,0x0000,0xb8a6,0x0000,0x0000,0x0000,0xdfb3,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xdfaf,0xdfd5,0xdfae,
-0xbb60,0xe3d3,0x0000,0x0000,0xe3c2,0x0000,0x0000,0xe3ac,
-0xe3ca,0xbb58,0xe3bb,0xe3c5,0xbb5b,0xe3be,0xbb59,0xe3af,
-0xe3cd,0xe3ae,0xe3c1,0x0000,0xe3ad,0x0000,0x0000,0xe3bf,
-0xe3c8,0xe3c6,0xe3ba,0xe3b5,0xe3b3,0x0000,0xe3b4,0xe3c7,
-0xe3d2,0xe3bc,0xbb5a,0x0000,0xe3b7,0x0000,0xe3cb,0x0000,
-0xbb5d,0xe3b6,0xe3b0,0xe3c0,0xbb61,0x0000,0x0000,0xbb55,
-0xbb5e,0xe3b8,0xe3b2,0x0000,0xbb57,0xdfd4,0xbb56,0xe3c3,
-0x0000,0xbb54,0xbb63,0xbb5c,0xe3c4,0xe3b9,0xe3b1,0xe3cc,
-0xe3bd,0xbb62,0xe3d0,0xbb5f,0xe3cf,0x0000,0xe3c9,0xe3ce,
-0x0000,0x0000,0x0000,0xe3d1,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xe773,
-0xe774,0xe767,0xe766,0xe762,0xbdb4,0x0000,0xbdac,0xe776,
-0xe775,0xdfa9,0xe75f,0xe763,0xe75d,0x0000,0xe770,0xe761,
-0x0000,0xe777,0xe75a,0xe758,0xe764,0xe76e,0xe769,0xbdb6,
-0xe74f,0x0000,0xe76d,0x0000,0x0000,0x0000,0xbdb7,0xdfbd,
-0xe75b,0xe752,0xe755,0xe77b,0xe75c,0xe753,0xe751,0xe74e,
-0x0000,0xbdb0,0xe765,0xbdaf,0xbdb3,0xe760,0xe768,0xbda9,
-0xe778,0xe77c,0xbdab,0x0000,0xe757,0xe76b,0xe76f,0xe754,
-0xe779,0xbdb2,0x0000,0xbdb1,0xe74c,0xbdb5,0xe772,0xe756,
-0xe76a,0xe750,0xe75e,0xe759,0xbdad,0xbdae,0xe76c,0xe77d,
-0xe77a,0xe771,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xe74d,0x0000,0xbdaa,0xeb49,0x0000,
-0xeb40,0xeb43,0x0000,0xbfbb,0xeb45,0xeaf9,0xeb41,0xeb47,
-0xbfb8,0xbfbc,0xbfb6,0x0000,0x0000,0xeafb,0xeb4c,0x0000,
-0x0000,0xeb46,0x0000,0xeafc,0xeb55,0xeb4f,0xeaf8,0xee46,
-0xeafe,0xbfb7,0x0000,0xeb4a,0x0000,0xeb54,0xbfbf,0x0000,
-0xeb51,0xeafd,0xeb44,0xeb48,0xeb42,0xeb56,0xeb53,0xeb50,
-0xbfb9,0xbfba,0xbfbe,0xeafa,0xeb57,0xbfbd,0xeb4d,0x0000,
-0x0000,0xeb4b,0x0000,0x0000,0x0000,0xeb4e,0xee53,0xee40,
-0xee45,0xee52,0xee44,0xedfb,0xee41,0x0000,0xc1a2,0x0000,
-0xedf4,0xee4d,0xee4f,0xedf3,0xc1a1,0xee51,0xee49,0xc1a8,
-0xee50,0xee42,0xc1aa,0xedf9,0xeb52,0xee4a,0xee47,0xedf5,
-0xee55,0xc1a4,0x0000,0x0000,0xc1a5,0xedf7,0xee48,0x0000,
-0xee54,0xee4b,0xedfd,0xc1a7,0xc1a3,0xee4c,0xedfe,0xee56,
-0xedf8,0xee43,0xee4e,0xedfa,0xedfc,0x0000,0xc2cb,0xedf6,
-0xc1a9,0xc2c4,0xc17e,0x0000,0x0000,0x0000,0x0000,0xc1a6,
-0xc2c8,0xf0b3,0x0000,0xf0a9,0xf0a4,0xf0aa,0xf0b4,0xf0b8,
-0xf0b7,0xc2ca,0xc2c9,0x0000,0x0000,0xf0ab,0xf0b9,0xf0ae,
-0xf0a6,0x0000,0xf0a8,0xf0a7,0xf0ad,0xf0b2,0xf0a5,0xf0ac,
-0xf0b1,0xc2c7,0x0000,0xf0af,0x0000,0xc2c5,0xf0b0,0xc2c3,
-0xc2c6,0xf2d5,0xf0b5,0x0000,0x0000,0xc3c2,0x0000,0xf2cd,
-0xf2d1,0xf2c9,0xf2cc,0x0000,0xf2d4,0xc3c0,0xf2d9,0xf2d2,
-0x0000,0xf2ca,0xf2da,0xf2d3,0xc3c3,0xc3c4,0xf2d7,0x0000,
-0xf2cb,0xc3bf,0xc3c1,0xf2c6,0xf2ce,0xf2c8,0x0000,0xf2d8,
-0xf2d6,0xf2c7,0xf2cf,0x0000,0x0000,0x0000,0xf4be,0xc3c5,
-0xf2d0,0xc4a7,0xc4a9,0xc4a6,0x0000,0xf4c3,0xf4bb,0xf4b9,
-0xf4bd,0xf4ba,0x0000,0x0000,0xf4bf,0xf4c1,0xc4aa,0xc4ac,
-0x0000,0xf4c0,0xc4ad,0xc4ab,0xf4c2,0x0000,0x0000,0x0000,
-0x0000,0xc4a8,0x0000,0x0000,0x0000,0x0000,0x0000,0xc4f4,
-0xf5f1,0xf5f7,0xc4f6,0xf4bc,0xf5f6,0x0000,0xf5fd,0xf5f4,
-0xf5fb,0xf5fa,0xf4b8,0xf5f5,0xf0b6,0xf5fe,0xf5f3,0xf5f8,
-0x0000,0xf5fc,0xf5f2,0x0000,0xf74a,0xc4f5,0xf5f9,0x0000,
-0x0000,0xf7f4,0xf74b,0xf749,0xf747,0xf748,0xf74c,0x0000,
-0xc5d9,0xf7f2,0xf7f0,0xf7f5,0xf7f3,0x0000,0xf7f6,0xc5da,
-0xf7f1,0x0000,0x0000,0xf8bc,0x0000,0x0000,0xf945,0xf946,
-0xf947,0x0000,0x0000,0xf9c7,0xf9bd,0xca4f,0xaaea,0x0000,
-0xad68,0x0000,0xd3b8,0xd3b7,0xb040,0xb342,0xd77c,0x0000,
-0x0000,0xd77b,0x0000,0xb5ea,0xb8b8,0x0000,0xb8b7,0xb8b9,
-0x0000,0xe3d4,0xe77e,0xeb58,0xeb5a,0xeb59,0x0000,0xc1ab,
-0xee57,0xf0ba,0xf9a5,0xa6e4,0x0000,0xcdc9,0xcdca,0xcdc8,
-0xcdc7,0xaaeb,0x0000,0xd0a9,0xd0a7,0x0000,0x0000,0xd0a6,
-0x0000,0xad69,0xad6b,0xad6a,0xd0a8,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xd3c4,0xd3c1,0xd3bf,
-0x0000,0x0000,0xb041,0xd3c2,0xb046,0xd3bc,0xd3cb,0x0000,
-0xd3cd,0xd3bd,0x0000,0xb043,0xd3ce,0xd3c9,0xd3bb,0xd3c0,
-0xd3ca,0xd3c6,0xd3c3,0x0000,0xb048,0xd3cc,0xd3be,0x0000,
-0x0000,0xd3c7,0xd3b9,0xb047,0xb044,0xd3c5,0x0000,0xd3c8,
-0xd3ba,0xb045,0xb042,0x0000,0x0000,0x0000,0x0000,0xb34c,
-0xd7a5,0xb34b,0x0000,0xd7a8,0xd7ab,0xb348,0xb346,0xd77e,
-0xd7a9,0xd7a7,0xd7a4,0xd7ac,0xd7ad,0xd7af,0xd7b0,0xd77d,
-0xb345,0xd7a2,0xd7a1,0xd7ae,0xb347,0xd7a3,0xb349,0xb344,
-0xd7a6,0xb34d,0x0000,0xb34a,0xd7aa,0x0000,0x0000,0x0000,
-0xb5f1,0xdbbf,0x0000,0xdbb4,0xb5ee,0x0000,0xdfe7,0xdbbd,
-0xdbb1,0xb5ec,0xdbb6,0xb5ef,0xdbba,0xdbb8,0xb5f2,0xb5eb,
-0x0000,0x0000,0xdbb2,0xdbb5,0xb5f0,0x0000,0xdbb3,0x0000,
-0xdbbe,0xdbbc,0xdbb7,0xdbb9,0xdbbb,0xb5ed,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xdfe8,0xdfee,0xdfe4,
-0xdfea,0xb8ba,0xdfe6,0xb8c0,0x0000,0x0000,0xb8bf,0x0000,
-0xb8be,0xdfed,0xb8c1,0xb8c2,0xdfe3,0xdff0,0xb8c3,0xb8bd,
-0xb8bc,0xdfec,0xb8c4,0xdfe2,0xdfe5,0xdfef,0xdfeb,0x0000,
-0x0000,0xe3f4,0xe3e9,0xb8bb,0x0000,0x0000,0x0000,0x0000,
-0xbb6a,0xe3dd,0xe3f2,0xe3de,0xbb65,0x0000,0xe3db,0x0000,
-0xe3e4,0xe3dc,0xbb67,0xe3d6,0xe3f1,0xbb68,0xe3ee,0xe3ef,
-0xe3d7,0xbb6d,0xe3e6,0x0000,0xe3e0,0xe3e7,0xe3da,0x0000,
-0xe3f3,0xe3eb,0xe3e5,0xe3d5,0xbb69,0xe3ec,0x0000,0xbb6c,
-0xe3f0,0x0000,0xe3ea,0xbb66,0xe3e8,0x0000,0xe3e2,0xbb64,
-0xe3d9,0xe3e1,0xe3ed,0xe3df,0x0000,0x0000,0xe3e3,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xbdc1,0xdfe9,0xe7b2,0xe7bb,
-0xe7b1,0xe7ad,0xe7aa,0xbdc2,0xe7a8,0xbb6b,0xe7a1,0xbdc0,
-0xe7a7,0xbdbf,0xe7ac,0xe7a9,0xe7b9,0xe7b4,0xe7ae,0xe7b3,
-0xbdbb,0xe7ab,0xe7be,0xe7a2,0xe7a3,0xe7ba,0xbdbc,0xe7bf,
-0xbdbe,0xe7c0,0xe7b0,0xe3d8,0xe7b6,0xe7af,0xe7b8,0xe7b5,
-0x0000,0x0000,0x0000,0xe7a6,0xbdb9,0xe7bd,0xbdba,0xe7a4,
-0xbdbd,0xeb64,0xe7b7,0xe7bc,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xeb61,0xbdb8,0xbfc0,0xeb6b,0xeb67,0x0000,0xeb65,
-0xeb60,0xeb6f,0x0000,0x0000,0x0000,0xbfc4,0x0000,0xeb5c,
-0xeb68,0xeb69,0xeb5f,0xeb5e,0xeb6c,0x0000,0xeb62,0xeb5d,
-0xeb63,0x0000,0xeb6e,0xeb5b,0xeb6d,0xeb6a,0xbfc2,0xbfc1,
-0x0000,0x0000,0xbfc3,0xeb66,0xf0cb,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xee59,0xc1b1,0xee5d,0xee5a,0xee61,0xee67,
-0xee5c,0x0000,0xee70,0xc1ae,0xee6a,0xee5f,0xee6b,0xee66,
-0xee6d,0xee5e,0xc1b3,0xc1b2,0xee60,0xee6e,0xee58,0xee6c,
-0xc1ac,0x0000,0xee64,0xee63,0xee68,0xee5b,0xc1b0,0x0000,
-0xc1b4,0xee62,0xee69,0xc1b5,0xee65,0x0000,0x0000,0x0000,
-0x0000,0xc1ad,0xc1af,0xf0c7,0xf0c5,0x0000,0x0000,0xf0cc,
-0xf0c9,0xf0cd,0x0000,0xf0be,0xf0c6,0xf0d1,0xee6f,0xf0c2,
-0xc2cf,0xe7a5,0xf0bd,0xf0ca,0xf0c4,0xf0c1,0xf0bc,0xf0bb,
-0xf0d0,0x0000,0xf0c0,0xf0bf,0xc2cd,0xf0c8,0x0000,0xc2cc,
-0x0000,0x0000,0xc2ce,0xf0c3,0xf0cf,0x0000,0xf2de,0xf2df,
-0x0000,0xc3c9,0xf2dc,0xc3c6,0xf2e4,0x0000,0xc3ca,0xf2e6,
-0xf2db,0xf0ce,0xf2e8,0xf2dd,0x0000,0xc3c7,0xf2e3,0x0000,
-0xf2e5,0xf2e0,0xf2e7,0xf2e2,0xf2e1,0xc3c8,0x0000,0x0000,
-0xf4c5,0xf4c6,0x0000,0xf4c8,0xc4ae,0xc4af,0xf4c9,0xf4c7,
-0x0000,0xf4c4,0x0000,0xf642,0xf645,0xf641,0x0000,0xc4fa,
-0xf643,0xc4f9,0xc4f8,0xc4f7,0xf644,0xf751,0xf74f,0x0000,
-0xf74e,0xf640,0xf750,0xf646,0xf74d,0x0000,0xf7f9,0xf7d7,
-0xf7f7,0xc5db,0xf7f8,0xf7fa,0x0000,0xf8bf,0xc5fa,0xf8be,
-0xf8bd,0xc5fb,0x0000,0xc65a,0xf96e,0xf9a7,0xf9a6,0xf9a8,
-0xa6e5,0xd0aa,0x0000,0xd3cf,0xd3d0,0x0000,0x0000,0x0000,
-0xdbc0,0x0000,0xf647,0xf8c0,0xa6e6,0xad6c,0xd0ab,0x0000,
-0x0000,0x0000,0xd7b1,0xb34e,0x0000,0xdbc2,0xdbc1,0xb5f3,
-0x0000,0xb8c5,0xe7c1,0xbdc3,0x0000,0xbdc4,0x0000,0x0000,
-0x0000,0xbfc5,0xc5fc,0xa6e7,0x0000,0x0000,0x0000,0xd0ac,
-0xaaed,0xd0ae,0xd0ad,0xad6d,0x0000,0xd3d1,0x0000,0xd3d8,
-0xb049,0xd3d6,0xd3d4,0x0000,0xd3db,0xd3d2,0xd3d3,0xb04a,
-0x0000,0xb04e,0x0000,0x0000,0xd3dc,0xb04d,0xd3da,0xd3d7,
-0xd3d5,0xb04b,0xb04c,0xd3d9,0x0000,0x0000,0x0000,0x0000,
-0xb350,0xd7b2,0x0000,0xb355,0xd7c2,0xb354,0xd7c4,0x0000,
-0x0000,0xd7b8,0xb352,0xd7c3,0x0000,0xd7b3,0xb353,0xd7bf,
-0xd7bb,0xd7bd,0xd7b7,0xd7be,0x0000,0x0000,0xb34f,0xd7ba,
-0x0000,0xd7b9,0xd7b5,0x0000,0xd7c0,0x0000,0x0000,0xd7bc,
-0xd7b4,0x0000,0xd7b6,0xb351,0xd7c1,0x0000,0x0000,0x0000,
-0x0000,0xb5f6,0xdbcd,0x0000,0x0000,0x0000,0xdbc9,0xdbcb,
-0xdbc6,0xdbc5,0xdbc3,0x0000,0xdbca,0xdbcc,0xdbc8,0x0000,
-0xdbc7,0xb5f4,0xb5f5,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xdbcf,0xb8cd,0xdff2,0xdff8,0xdff3,0xdff4,0xf9d8,
-0xdff9,0x0000,0xb8cf,0x0000,0xb8c7,0xb8ce,0xdff1,0xdbc4,
-0xb8ca,0xb8c8,0xdff7,0xdff6,0xb8c9,0xb8cb,0xdff5,0xb8c6,
-0x0000,0xb8cc,0x0000,0x0000,0x0000,0x0000,0x0000,0xe3f6,
-0xbb74,0x0000,0x0000,0xe442,0xe441,0x0000,0xe3fb,0xbb76,
-0xe440,0xe3f7,0xe3f8,0xbb6e,0xbb70,0x0000,0xe3fd,0xe3f5,
-0xbb72,0xbb71,0xe3f9,0xe3fe,0xe3fc,0xbb73,0xe3fa,0x0000,
-/* 0x8900 */
-0x0000,0xdbce,0xbb6f,0x0000,0x0000,0xe7c2,0xe7c9,0xbdc6,
-0x0000,0xe7cd,0xbdca,0xe7c5,0xe7c3,0x0000,0xe7cc,0x0000,
-0xbdc5,0xe7cb,0xbdc7,0xbdc8,0xe7c4,0xbdc9,0xe7ca,0xe7c6,
-0xe7c7,0xe7c8,0xbb75,0x0000,0x0000,0x0000,0xeb70,0xeb7c,
-0x0000,0xbfca,0xeb77,0xeb79,0x0000,0xbfc8,0xeb71,0xeb75,
-0x0000,0xeb78,0xbfc6,0xbfc9,0xeb7b,0xeb73,0xeb74,0xeb7a,
-0xeb72,0xeb76,0xbfc7,0xee72,0x0000,0xee71,0xc1b7,0xee77,
-0xc1b9,0x0000,0x0000,0xc1b6,0xee73,0xc1ba,0xee74,0x0000,
-0x0000,0xee75,0xee78,0x0000,0xc1b8,0x0000,0xf0d6,0x0000,
-0x0000,0xf0d9,0x0000,0xf0d3,0xf0d5,0x0000,0x0000,0xf0d4,
-0xf0d7,0xf0d8,0xee76,0xf0d2,0x0000,0x0000,0xc3cd,0xf2ec,
-0xf2ef,0xf2f1,0xf2ea,0xf2eb,0xf2ee,0xf2f0,0xc3ce,0xc3cc,
-0xc3cb,0xf2ed,0xf2e9,0xf4ca,0xc4b0,0x0000,0xf4cb,0x0000,
-0x0000,0xf649,0xc4fb,0xf64b,0xc4fc,0xf648,0xf64a,0xc5a8,
-0x0000,0xf752,0xc5a7,0xf7fd,0xf7fc,0x0000,0xf7fb,0x0000,
-0x0000,0xf948,0xf949,0xf94b,0xf94a,0x0000,0xca50,0xa6e8,
-0x0000,0xad6e,0xd7c5,0xb5f7,0x0000,0xdffa,0xc2d0,0x0000,
-0xf2f2,0x0000,0x0000,0xa8a3,0x0000,0x0000,0x0000,0xb357,
-0x0000,0x0000,0x0000,0xb356,0x0000,0xdbd0,0xb5f8,0xdbd2,
-0xdbd1,0x0000,0x0000,0xdffb,0xb8d0,0xe443,0xe446,0xe445,
-0x0000,0xe444,0xe7ce,0xe7d0,0xe7cf,0x0000,0xbfcc,0x0000,
-0x0000,0x0000,0xbfcb,0x0000,0xc1bb,0xee79,0xee7b,0xee7a,
-0x0000,0x0000,0xc2d1,0x0000,0x0000,0x0000,0xf2f4,0xf2f3,
-0x0000,0xf4cc,0xc4b1,0x0000,0x0000,0xc4fd,0xf754,0xf753,
-0xc65b,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xa8a4,0xd0af,0xad6f,0xd7c8,0xd7c6,0x0000,
-0x0000,0xd7c7,0xdbd4,0xdbd5,0xe043,0xdbd3,0x0000,0xdffc,
-0xe041,0xe040,0xe042,0xb8d1,0xdffe,0xdffd,0xe044,0x0000,
-0xe449,0xe447,0x0000,0xe448,0xe7d3,0xe7d1,0x0000,0x0000,
-0xe7d2,0xeb7d,0xee7c,0xee7d,0xc2d2,0x0000,0xf2f5,0xf4cd,
-0xc4b2,0x0000,0xf64c,0xf755,0xc5a9,0x0000,0xf7fe,0xf94c,
-0xa8a5,0x0000,0xad71,0xad72,0xd0b0,0x0000,0x0000,0xd0b1,
-0xad70,0x0000,0xb054,0x0000,0xb052,0x0000,0xb051,0xb058,
-0xb050,0xb059,0xd3dd,0xb056,0x0000,0xb053,0xb057,0xb055,
-0xb04f,0x0000,0x0000,0xb35f,0x0000,0xb359,0xd7cc,0xb35e,
-0x0000,0x0000,0xb360,0xb35a,0x0000,0xb35b,0x0000,0xd7ca,
-0x0000,0x0000,0xb358,0x0000,0xd7cb,0xb35d,0x0000,0x0000,
-0xd7c9,0xb35c,0x0000,0x0000,0xb644,0x0000,0xb646,0x0000,
-0x0000,0xdbd8,0xb645,0xb5f9,0xb5fd,0x0000,0xb8e4,0xe049,
-0xdbda,0xb5fe,0x0000,0x0000,0xdbdd,0xdbde,0xb643,0x0000,
-0xdbe0,0x0000,0xdbe2,0x0000,0xdbe3,0xdbd7,0xdbd6,0xdbe4,
-0xb642,0xdbe1,0xdbdf,0x0000,0xb640,0xb5fb,0xb647,0xdbdb,
-0xdbdc,0xdbd9,0x0000,0xb641,0x0000,0x0000,0xb5fc,0x0000,
-0xb5fa,0xe048,0xb8df,0xb8da,0x0000,0x0000,0xb8d5,0x0000,
-0xb8e5,0xb8d6,0x0000,0xb8d2,0xb8e1,0xb8de,0xb8e0,0x0000,
-0xb8d7,0xb8dc,0xb8d3,0xb8d4,0xe050,0xe04d,0xe045,0xe04a,
-0x0000,0xb8e2,0xe051,0xb8e3,0xb8d9,0x0000,0x0000,0xe047,
-0x0000,0xe04f,0xe04b,0xe04e,0xe04c,0xb8dd,0xe046,0xb8d8,
-0x0000,0x0000,0x0000,0xe44c,0xbb78,0xbb7b,0x0000,0xe44e,
-0x0000,0xbba5,0xe44d,0xbb7d,0x0000,0xbdcf,0xe44f,0x0000,
-0xbba4,0xe44b,0xbba6,0x0000,0x0000,0x0000,0xbb79,0x0000,
-0xb8db,0xbb7c,0x0000,0xbb7a,0xbb7e,0xbba2,0xbb77,0xbba7,
-0xbba3,0x0000,0xbba1,0xe44a,0x0000,0x0000,0x0000,0x0000,
-0xbdd6,0x0000,0xbdd2,0x0000,0x0000,0x0000,0xbdd9,0x0000,
-0xe7d6,0xbdda,0xe7e2,0xe7db,0xbdcb,0xe7e3,0xe7dd,0xbdd5,
-0xe7de,0x0000,0xbdd4,0xe7e1,0xbdce,0xe7df,0xe7d5,0xbdcd,
-0xebaa,0xbdd3,0x0000,0xbdd0,0x0000,0xbdd8,0x0000,0xe7d4,
-0x0000,0xe7d8,0xbdcc,0xe7d7,0xe7d9,0xe7da,0xbdd7,0xe7dc,
-0xe7e0,0xe7e4,0x0000,0xbddb,0xbfd2,0xeba5,0xebab,0xeba8,
-0xeb7e,0xebac,0xeba1,0x0000,0xeba7,0x0000,0xbfcd,0xbfd3,
-0xebad,0x0000,0x0000,0xbfcf,0x0000,0xbfd9,0xbfd4,0xebaf,
-0xeba9,0xbfd0,0xeba2,0xbfda,0xeba3,0xeba4,0xbfdb,0xbfd8,
-0xbdd1,0x0000,0xbfce,0xebb0,0xbfdc,0x0000,0xbfd5,0xebae,
-0xbfd1,0xbfd6,0xbfd7,0x0000,0xc1c3,0xeea4,0xeead,0xeeaa,
-0xeeac,0x0000,0xc1c0,0xeea5,0x0000,0xeeab,0xc1bc,0xeea7,
-0xc1c4,0xeea3,0xeea8,0xeeaf,0xeba6,0xeea9,0xeea2,0xc1bd,
-0xeea1,0xc1be,0xeeb0,0xc1bf,0xeeae,0xc1c2,0xee7e,0x0000,
-0xc1c1,0x0000,0xeea6,0xf0dc,0xf0ea,0xf0e5,0xf0e7,0xf0db,
-0xc2d3,0x0000,0xf0da,0xc2d6,0xc2d5,0x0000,0xf0e9,0xf0e1,
-0xf0de,0xf0e4,0x0000,0xf0dd,0x0000,0xf0df,0xf0e8,0xf0e6,
-0x0000,0xc2d4,0xf0ed,0xf0eb,0xf0e2,0xf0ec,0xf0e3,0x0000,
-0xf2f9,0xc3cf,0xf341,0x0000,0x0000,0xf64f,0xc3d6,0xf0e0,
-0xf2f7,0xc3d2,0xf2f8,0xf2fd,0x0000,0x0000,0xc3d4,0xc3d5,
-0xf2f6,0xf340,0xf342,0xf2fa,0xf2fc,0xf2fe,0xf2fb,0xf343,
-0xc3d1,0xc3d7,0xc3d3,0x0000,0xc3d0,0xf4d0,0x0000,0xc4b7,
-0xf4ce,0x0000,0x0000,0xf4d2,0x0000,0xf4d3,0xc4b5,0xf4d4,
-0xf4d1,0x0000,0xf4cf,0xc4b8,0xc4b4,0xf4d5,0x0000,0xc4b6,
-0xc4b3,0x0000,0x0000,0x0000,0xc4fe,0x0000,0x0000,0xc540,
-0xf64e,0xf64d,0xf650,0xf651,0x0000,0xc541,0xf756,0xf75b,
-0xc5aa,0x0000,0xf758,0x0000,0xf757,0xf75a,0xf759,0x0000,
-0xf843,0x0000,0xc5dc,0xf842,0xf840,0x0000,0xf841,0x0000,
-0x0000,0x0000,0xc5fe,0xc5fd,0xf8c1,0xf8c2,0xc640,0x0000,
-0xf94d,0xf94e,0xc667,0x0000,0xc66d,0x0000,0xf9a9,0xf9c8,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-/* 0x8c00 */
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xa8a6,
-0x0000,0xd7cd,0x0000,0xd7ce,0xe052,0xe450,0xe7e5,0xc1c6,
-0x0000,0xc1c5,0xf0ee,0xf344,0x0000,0xf844,0xa8a7,0xd3de,
-0xb05a,0xb361,0xe054,0xe053,0xbddc,0xe7e6,0xbddd,0xeeb1,
-0xc2d7,0x0000,0x0000,0x0000,0xc676,0xa8a8,0xcdcb,0xd3df,
-0x0000,0x0000,0xb362,0x0000,0xd7cf,0xd7d0,0x0000,0xdbe5,
-0x0000,0xb648,0xb8e6,0x0000,0xe056,0xe055,0xe057,0x0000,
-0xe451,0xe452,0xbba8,0xbfdd,0xbdde,0xbfde,0x0000,0xeeb5,
-0xeeb2,0xeeb4,0xeeb3,0xc1c7,0x0000,0xf0ef,0xf346,0xf345,
-0xcba4,0xb05c,0xb05b,0xd3e0,0x0000,0xd7d1,0x0000,0x0000,
-0xdbe7,0xdbe6,0xb649,0x0000,0xe059,0xe05a,0xe058,0x0000,
-0x0000,0xb8e8,0xb8e7,0x0000,0xbbaa,0xbba9,0x0000,0xe7e7,
-0xebb3,0xebb1,0xebb2,0xbfdf,0xeeb7,0xeeb6,0x0000,0xf0f2,
-0xf0f1,0xf0f0,0xf347,0x0000,0xf9aa,0xa8a9,0xad73,0x0000,
-0xad74,0xb05d,0xb05e,0xd3e2,0xd3e1,0xd7d2,0x0000,0xb368,
-0xb366,0xb363,0xb367,0xb365,0xb364,0x0000,0x0000,0xb64a,
-0xdbea,0x0000,0xb8ed,0xb64c,0xb651,0xdbec,0xb653,0xb652,
-0xb655,0xdbeb,0xdbe8,0xb64f,0xb64b,0xb64d,0xdbe9,0xb654,
-0xb650,0xb64e,0xb8ef,0xb8ee,0xb8ec,0xb8f0,0x0000,0xb8ea,
-0xb8eb,0x0000,0xb8e9,0x0000,0xe05b,0x0000,0x0000,0xe454,
-0x0000,0xbbac,0xbbad,0xbbab,0x0000,0xe453,0x0000,0xe455,
-0x0000,0xe7ea,0xe7ec,0x0000,0xbde7,0xe7ed,0xbde0,0xe7e9,
-0xbddf,0xbde9,0xbde5,0xbde6,0xbde2,0xe7e8,0xbde1,0xe7ee,
-0xe7eb,0x0000,0xbde8,0x0000,0xbde3,0xbde4,0xebb5,0x0000,
-0xebb7,0xebb6,0x0000,0xebb8,0xbfe0,0xebb4,0x0000,0x0000,
-0xc1cb,0xeeb8,0xc1c8,0xc1cc,0xc1ca,0xc1c9,0xf0f3,0x0000,
-0xf0f6,0x0000,0xf0f5,0x0000,0xf0f4,0xc2d8,0xf348,0xf349,
-0xc3d8,0xf34a,0xc3d9,0x0000,0x0000,0xc4ba,0x0000,0xc4b9,
-0xf652,0x0000,0x0000,0xc542,0xf653,0xf75c,0xc5ab,0xc5ac,
-0x0000,0xf845,0x0000,0xc642,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xa8aa,0x0000,0xb36a,0xb369,
-0xe05c,0xe05d,0x0000,0xbbae,0xebb9,0xbdea,0xebba,0xeeb9,
-0xa8ab,0x0000,0xd0b2,0xad76,0xad75,0x0000,0xd3e3,0xb05f,
-0xd3e4,0xd7d5,0x0000,0xd7d4,0x0000,0xd7d3,0x0000,0x0000,
-0xdbee,0xb658,0x0000,0x0000,0xdbed,0xb657,0x0000,0x0000,
-0x0000,0xdbef,0xb656,0x0000,0xe05f,0xe062,0xe060,0xe061,
-0xe065,0xe05e,0xe066,0xe063,0xe064,0xbbb0,0xe456,0x0000,
-0x0000,0xbbaf,0x0000,0xe7f2,0xe7f0,0x0000,0x0000,0xbdeb,
-0xe7ef,0xe7f1,0x0000,0xbdec,0x0000,0xebbb,0x0000,0xebbc,
-0xc1cd,0x0000,0xf34c,0xf34e,0xf34b,0xf34d,0xf4d6,0xf654,
-0x0000,0x0000,0xf96f,0xa8ac,0xad77,0xd3e5,0xd3e7,0xd3e6,
-0x0000,0xd7d8,0xb36c,0x0000,0xd7d6,0x0000,0xb36b,0xd7d9,
-0x0000,0xd7da,0xd7d7,0x0000,0x0000,0xdbfb,0xb660,0xdbf3,
-0xdbf9,0x0000,0x0000,0xb65b,0xb65e,0xdbf2,0xb659,0xdbf6,
-0xe06c,0xb65d,0x0000,0xdbf1,0x0000,0xdbf7,0xdbf4,0xdbfa,
-0xdbf0,0xdbf8,0xb65c,0xb65f,0xdbf5,0xb65a,0x0000,0xb8f2,
-0xe068,0xb8f1,0xe06f,0xe06e,0xb8f8,0x0000,0xb8f9,0xe070,
-0xb8f3,0xe06d,0xb8f7,0xe072,0xe069,0x0000,0xe06b,0xb8f4,
-0xe067,0xe06a,0xe071,0xb8f5,0xe073,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xb8f6,0x0000,0xbbb1,0xe45b,0xe461,0xe459,
-0xe462,0x0000,0xe458,0xe45d,0xe463,0xe460,0xe45f,0xe45e,
-0x0000,0xe457,0xe45c,0x0000,0x0000,0xe45a,0x0000,0xbdf1,
-0xbdee,0xe7fb,0xe841,0xe843,0xe840,0xe7f8,0xe7fa,0xe845,
-0xe842,0xe7fc,0xe846,0xe7f9,0xe844,0xbdef,0xbdf5,0xbdf3,
-0xe7f3,0xbdf4,0xbdf0,0xe7f4,0xe7f6,0xe7f5,0xe7fd,0xe7fe,
-0x0000,0xbdf2,0x0000,0xbded,0x0000,0x0000,0xe7f7,0x0000,
-0xebc6,0xbfe2,0x0000,0xebbd,0xbfe3,0xbfe6,0xebc2,0x0000,
-0xebbf,0xbfe5,0x0000,0x0000,0xebc3,0xebc4,0xebbe,0xebc7,
-0xebc0,0xebc5,0xbfe4,0x0000,0xbfe1,0xebc1,0x0000,0xeebf,
-0xc1d0,0xc1ce,0xc1d1,0xc1cf,0xeebe,0xeebb,0xeeba,0x0000,
-0xeebd,0x0000,0x0000,0xeebc,0xf145,0xc2de,0xf0fb,0xf0fa,
-0x0000,0xc2d9,0xf141,0xf140,0xf0f7,0xf143,0xf0fc,0xc2dd,
-0xf0f9,0xf142,0xf0f8,0xc2da,0xc2dc,0xf0fd,0xc2db,0xf0fe,
-0x0000,0xf144,0xf352,0x0000,0xc3de,0xf34f,0x0000,0xf353,
-0x0000,0x0000,0xc3db,0xf351,0xc3e0,0x0000,0xc3dd,0x0000,
-0xf350,0x0000,0xc3df,0xf354,0xc3da,0x0000,0x0000,0x0000,
-0x0000,0xc4bc,0xc4be,0x0000,0xf4d9,0xc4bd,0xf4d7,0xc3dc,
-0xf4d8,0xc4bb,0xc543,0xc545,0xf656,0xc544,0xf655,0x0000,
-0xf761,0xc5ad,0xf760,0xc5ae,0xf75e,0xf75d,0xf762,0xf763,
-0xf846,0x0000,0xf75f,0x0000,0x0000,0xf8c6,0xf8c3,0xf8c4,
-0xf8c5,0xc65c,0x0000,0xf951,0xf950,0xf94f,0xf970,0x0000,
-0xf9be,0xf9ab,0xc66e,0xa8ad,0xb060,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xb8fa,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xbdf6,0x0000,0x0000,0xebc8,0x0000,0x0000,
-0xc2df,0x0000,0xf355,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xf9ac,0xa8ae,0xaaee,0xad79,0xad78,0x0000,0xb063,
-0x0000,0xd3e8,0xb061,0xd3e9,0xb062,0x0000,0x0000,0xd7df,
-0xd7db,0x0000,0x0000,0xb36d,0xd7de,0xd7dd,0xd7dc,0xb36e,
-0xd7e0,0xd7e1,0x0000,0x0000,0x0000,0xdc43,0xdc41,0xdc45,
-0xdc46,0xdc4c,0x0000,0xdc48,0xdc4a,0x0000,0xdc42,0xdbfc,
-0x0000,0xdc49,0x0000,0x0000,0xdc4b,0xdc44,0xdc47,0xdbfd,
-0xb662,0xdc40,0xdbfe,0xb661,0xb663,0x0000,0xb8fd,0xe075,
-0xe077,0xe076,0xe07b,0xb8fb,0x0000,0xe078,0xe074,0xe079,
-0xe07a,0xb8fc,0xb8fe,0xe07c,0x0000,0xe467,0xe466,0x0000,
-0xe464,0xe465,0xbbb3,0xbbb5,0xbbb2,0xbbb4,0xe84d,0xe84e,
-0xe849,0x0000,0xe84a,0xbdf8,0xbdfd,0xbdf7,0xbdfe,0xbdf9,
-0xe84b,0x0000,0x0000,0xe84c,0xe848,0xbe40,0xbdfb,0x0000,
-0x0000,0xbdfa,0xbdfc,0x0000,0xe847,0x0000,0xebca,0xbfe8,
-0x0000,0x0000,0xebcc,0xbfea,0xebcf,0xebcb,0xebc9,0xebce,
-0xbfe9,0xebcd,0x0000,0xbfe7,0x0000,0x0000,0xc1d3,0xc1d6,
-0xeec1,0x0000,0xc1d4,0xeec0,0xc1d2,0xc1d5,0xf146,0xf147,
-0xf148,0xc2e0,0x0000,0xf149,0x0000,0xc2e1,0xc3e2,0xf358,
-0xf359,0xf357,0xf356,0xf35a,0xc3e1,0xf4dd,0xf4db,0xf4dc,
-0xf4de,0xf4da,0xf4df,0xf658,0x0000,0xf659,0xf657,0xc546,
-0xf764,0xc5af,0xf765,0xf848,0xf847,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xa8af,0xb664,0x0000,0x0000,0xb940,
-0x0000,0x0000,0x0000,0xbbb6,0x0000,0x0000,0xbfec,0x0000,
-0xbfeb,0x0000,0x0000,0x0000,0x0000,0xc3e3,0xc47c,0xc547,
-0xa8b0,0xb064,0xb941,0x0000,0xf35b,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xcba6,
-0x0000,0x0000,0xa8b1,0x0000,0xa8b4,0xa8b3,0xa8b2,0x0000,
-0x0000,0xcba5,0x0000,0xcdcd,0x0000,0xcdcf,0xaaef,0x0000,
-0x0000,0xaaf1,0xcdcc,0xcdce,0xaaf0,0xcdd1,0xcdd0,0xcdd2,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xd0b6,0xd0b4,0xad7c,0xd0b3,0xada3,0xad7e,0xad7b,0x0000,
-0xada4,0x0000,0xad7d,0xada2,0x0000,0xada1,0xd0b5,0x0000,
-0xad7a,0x0000,0x0000,0x0000,0xb06a,0xd3eb,0xd3f1,0xb067,
-0xb06e,0x0000,0xb069,0xd3ee,0xd3f0,0xb06c,0xd3ea,0xd3ed,
-0xb068,0xb065,0xd3ec,0xb06b,0xd3ef,0xb06d,0xb066,0x0000,
-0x0000,0x0000,0x0000,0xd7e3,0xd7e6,0xb370,0x0000,0xb37a,
-0xb376,0xd7e4,0x0000,0x0000,0xb37e,0xb377,0xb37c,0xb372,
-0x0000,0xb36f,0xb371,0xb37d,0xd7e5,0xb375,0xb378,0xb374,
-0xb379,0xd7e7,0xb37b,0xb373,0xd7e2,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xdc4d,0xb665,0xdc4f,
-0x0000,0xb667,0xb669,0x0000,0xdc4e,0xb666,0xb66a,0x0000,
-0xb668,0x0000,0x0000,0x0000,0xb947,0xe0a3,0xb94f,0xe07e,
-0x0000,0xb950,0xb945,0x0000,0xe0a1,0x0000,0x0000,0xb94a,
-0x0000,0xe0a2,0xb943,0xb942,0x0000,0xb94d,0xb94c,0xb94b,
-0xb949,0xb94e,0xe07d,0xb944,0xb946,0xb948,0x0000,0x0000,
-0xbbb8,0xbbbb,0x0000,0xbbbf,0xbbb9,0xbbbe,0xbbbc,0x0000,
-0xbbb7,0x0000,0xbbbd,0xbbba,0x0000,0x0000,0x0000,0xe852,
-0xbe43,0xbe41,0x0000,0xe853,0x0000,0xbe44,0xbe42,0xe851,
-0xe850,0x0000,0xbff0,0xe84f,0xbfee,0xbfed,0xebd0,0xbe45,
-0xbfef,0xebd1,0xbff2,0xebd2,0xbff1,0xc1d8,0xeec3,0xc1d7,
-0xc1dc,0xc1da,0xc1db,0xc2e3,0xc1d9,0xeec2,0xebd3,0xc2e2,
-0xc2e4,0x0000,0xc3e4,0xc3e5,0x0000,0xf4e0,0x0000,0xc5de,
-0xc5dd,0xa8b6,0x0000,0x0000,0xca55,0xb06f,0x0000,0xca52,
-0xca53,0xca51,0x0000,0xca54,0x0000,0x0000,0xcbaa,0xcba7,
-0xcbac,0xcba8,0xa8b7,0xa8ba,0x0000,0xcba9,0xa8b9,0xcbab,
-0x0000,0x0000,0xa8b8,0x0000,0x0000,0x0000,0x0000,0xcdd5,
-0xcdd7,0xaaf4,0xcdd3,0xcdd6,0xcdd4,0xaaf2,0xaaf5,0x0000,
-0xaaf3,0x0000,0x0000,0x0000,0x0000,0xd0b8,0xd0bc,0xd0b9,
-0x0000,0xada7,0x0000,0xada8,0x0000,0xd0bb,0x0000,0xd0bd,
-0xd0bf,0x0000,0xada5,0xd0be,0x0000,0x0000,0xada6,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xd7ee,0xd0ba,0xd3f2,0xd3fb,
-0xd3f9,0xd3f4,0xd3f5,0xd3fa,0xd3fc,0xb071,0x0000,0xd3f7,
-0xd3f3,0xb070,0xb072,0xd3f6,0xd3fd,0xd3f8,0x0000,0x0000,
-0xb3a1,0xd7f1,0xd7e9,0xd7ef,0xd7f0,0xb3a2,0x0000,0xd7e8,
-0xd7ea,0xd0b7,0xd7ec,0xd7ed,0xd7eb,0xb66c,0x0000,0x0000,
-0x0000,0xdc56,0xebd4,0xdc57,0xdc54,0xb3a3,0xb66e,0xdc53,
-0xdc59,0xdc58,0xb66b,0xdc5c,0xdc52,0xdc5b,0xdc50,0xdc5a,
-0xdc55,0xb66d,0x0000,0xe0aa,0x0000,0xe0a5,0xe0ab,0xe0a6,
-0xe0a4,0xe0a7,0xb951,0x0000,0xe0a9,0x0000,0xe0a8,0xb952,
-0xbbc1,0xbbc0,0xe46e,0xe471,0xe469,0xe46d,0xbbc2,0xe46c,
-0xe46a,0xe470,0xe46b,0xe468,0xe46f,0x0000,0xe859,0xbe48,
-0xf14a,0xe856,0xe857,0xe855,0xdc51,0xbe47,0xe85a,0xe854,
-0xbe46,0xbe49,0xe858,0xebd5,0xbff3,0xebd6,0xebd7,0x0000,
-0xeec4,0xc1dd,0xf14b,0xf14c,0x0000,0x0000,0xf14d,0xf35d,
-0xf35c,0xf4e2,0x0000,0xf4e1,0xf65b,0xf65c,0xf65a,0xf766,
-0xc5b0,0xa8bb,0xadaa,0xada9,0xb075,0xb074,0xd440,0xd441,
-0xd3fe,0x0000,0xb073,0xd7f5,0x0000,0xd7f6,0xd7f2,0xb3a4,
-0xd7f3,0x0000,0xd7f4,0x0000,0x0000,0x0000,0x0000,0xdc5f,
-0xdc61,0xdc5d,0xdc60,0xb66f,0xdc5e,0xb670,0x0000,0x0000,
-0xdd73,0xb955,0xb954,0x0000,0xb953,0x0000,0xe0ac,0xe0ad,
-0x0000,0x0000,0xe473,0xe475,0xbbc6,0xbbc3,0x0000,0xbbc5,
-0xbbc4,0xe474,0xe472,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xe861,0xe85e,0xe85f,0xbe4d,0xe860,0xe85b,0xe85c,0xbe4a,
-0x0000,0xbe4b,0xe85d,0xbe4c,0x0000,0xebdb,0x0000,0xebdc,
-0xebd9,0xebda,0xbff4,0xebd8,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xeec8,0xeec5,0xeec7,0xc1e0,0xeecb,0xc1df,0xeec9,
-0xeecc,0xeeca,0xeec6,0xc1de,0x0000,0xf14f,0x0000,0xf150,
-0xf14e,0x0000,0xf152,0xc2e5,0xc2e6,0xf35f,0xc3e7,0xf151,
-0xf35e,0xc3e6,0xf4e5,0xf4e6,0xc4bf,0xf4e4,0x0000,0xf4e3,
-0x0000,0xf65d,0xc548,0x0000,0xf849,0xf8c8,0xf8c7,0x0000,
-0xc643,0xc65d,0xf8c9,0xf971,0x0000,0xc66f,0xa8bc,0xaaf6,
-0x0000,0xb956,0x0000,0xc4c0,0xa8bd,0xadab,0xb3a5,0xb671,
-0xc2e7,0xaaf7,0x0000,0xd0c1,0xd0c0,0xd442,0x0000,0xb078,
-0xb076,0xb07a,0xd444,0x0000,0xb079,0xb077,0x0000,0x0000,
-0x0000,0x0000,0xd443,0xb3a8,0xd7fc,0x0000,0xb3a7,0xb3a9,
-0xd842,0xb3ab,0xd7fe,0xd840,0xd7f7,0xb3aa,0xd843,0x0000,
-0x0000,0xd7f9,0x0000,0xd7fa,0xd7f8,0xb3a6,0x0000,0xd841,
-0xd7fb,0xd7fd,0x0000,0x0000,0x0000,0xdc6d,0x0000,0xdc6c,
-0xdc6a,0xdc62,0xdc71,0xdc65,0xdc6f,0xdc76,0xdc6e,0xb679,
-0x0000,0xb675,0xdc63,0x0000,0xdc69,0xb677,0x0000,0xdc68,
-0xb678,0xb67a,0xdc6b,0x0000,0xb672,0xb673,0xdc77,0xdc75,
-0x0000,0xdc74,0xdc66,0x0000,0xdc72,0x0000,0xb676,0x0000,
-0x0000,0x0000,0x0000,0xb674,0xdc73,0xdc64,0xdc67,0xdc70,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xe4ba,0xe0b7,0x0000,
-0xe0b0,0xe0c3,0xe0cc,0xe0b3,0xb961,0x0000,0xe0c0,0xb957,
-0xb959,0xb965,0xe0b1,0x0000,0x0000,0xb95a,0xb95c,0xb966,
-0xb95b,0x0000,0x0000,0x0000,0x0000,0xb964,0xe0b9,0x0000,
-0xe0ae,0xb962,0xe0b8,0xb95e,0xe0ca,0xb963,0xe0c8,0xe0bc,
-0xe0c6,0xb960,0xe0af,0xe0c9,0xe0c4,0x0000,0xe0cb,0xb958,
-0x0000,0x0000,0xb967,0xb95d,0x0000,0x0000,0xe0b5,0x0000,
-0xe0bd,0xe0c1,0x0000,0xe0c5,0xb95f,0xe0b4,0xe0b2,0xe0be,
-0x0000,0x0000,0x0000,0x0000,0xe0bb,0xe0ba,0x0000,0xe0bf,
-0xe0c2,0x0000,0xe0c7,0x0000,0x0000,0x0000,0xe478,0x0000,
-0xbbc7,0xe4a4,0xe47a,0xbbcc,0xbbd0,0xe4ad,0xe4b5,0xe4a6,
-0xbbc8,0x0000,0xe4aa,0xe0b6,0x0000,0xbbc9,0xe4b1,0xe4b6,
-0xe4ae,0x0000,0xe4b0,0xe4b9,0xe4b2,0xe47e,0xe4a9,0x0000,
-0x0000,0xbbd1,0x0000,0xbbcd,0xe47c,0xe4ab,0xbbcb,0xe4a5,
-0xbbca,0xe4b3,0xe4a2,0xe479,0xbbce,0xe4b8,0x0000,0x0000,
-0xe47b,0xe4af,0xe4ac,0xe4a7,0xe477,0xe476,0xe4a1,0xe4b4,
-0xbbcf,0xe4b7,0xe47d,0xe4a3,0xbe52,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xbe5a,0xbe55,0xe8a4,0xe8a1,0xe867,0xbe50,
-0x0000,0xf9d7,0x0000,0xbe4f,0xbe56,0x0000,0x0000,0x0000,
-0xe865,0xbe54,0xe871,0xe863,0xe864,0xbe4e,0xe8a3,0xbe58,
-0xe874,0xe879,0xe873,0xebee,0xe86f,0xe877,0xe875,0xe868,
-0xe862,0xe87d,0xbe57,0xe87e,0x0000,0xe878,0x0000,0xe86d,
-0xe86b,0xe866,0x0000,0x0000,0x0000,0xe86e,0xe87b,0xe86a,
-0xe87a,0xe8a2,0x0000,0x0000,0xbe53,0x0000,0xe876,0xe87c,
-0xe872,0xe86c,0xbe51,0x0000,0x0000,0x0000,0xe4a8,0xe870,
-0xbe59,0xe869,0x0000,0x0000,0x0000,0x0000,0x0000,0xebf4,
-0xbff7,0xebf3,0xebf0,0xec44,0xbffb,0x0000,0xec41,0xebf8,
-0xec43,0xebe9,0xebf6,0x0000,0xbffd,0x0000,0xebe1,0x0000,
-0xebdf,0xec42,0x0000,0xec40,0xebfe,0xebed,0xebec,0xebe2,
-0xc040,0x0000,0xebe8,0xebf2,0xebfd,0xc043,0xec45,0x0000,
-0xc1e8,0xc045,0xbffe,0xebe6,0x0000,0xebef,0xebde,0xebe0,
-0xbff5,0xc042,0xbffa,0xebe7,0xebf7,0xebf1,0xc041,0xebdd,
-0xc1e3,0xebf9,0xebfc,0xbffc,0x0000,0xebeb,0xc044,0xbff9,
-0x0000,0x0000,0x0000,0xbff8,0xebf5,0xebfb,0xbff6,0x0000,
-0xebe4,0xebfa,0x0000,0x0000,0xebe5,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xebea,0xeed2,
-0x0000,0xeed7,0xc1e5,0xc1e7,0xeedd,0xc1e1,0xeeec,0xeee3,
-0xeed8,0xeed9,0xeee2,0x0000,0xc1ee,0xeee1,0xeed1,0xeee0,
-0xeed4,0xeeed,0xc1ed,0xc1eb,0xeed5,0x0000,0xeee8,0x0000,
-0xeeda,0xeee7,0x0000,0xeee9,0xeed0,0xc1e6,0x0000,0xeeea,
-0x0000,0x0000,0xeede,0x0000,0xc1ea,0xeedb,0x0000,0x0000,
-0xc1ec,0xeee4,0x0000,0x0000,0x0000,0xc1e4,0xeed6,0xeee5,
-0x0000,0xeedf,0xebe3,0xeee6,0xeed3,0x0000,0xc1e9,0x0000,
-0xeeeb,0x0000,0xc1e2,0xeece,0x0000,0x0000,0x0000,0x0000,
-0xf160,0xf159,0xc2e9,0x0000,0xf154,0xf163,0xf15b,0xeedc,
-0x0000,0xf165,0xf155,0x0000,0xc2e8,0xf15f,0xc2ea,0xc2f2,
-0xc2f0,0xf161,0xc2f1,0xf157,0x0000,0xf158,0xf15d,0xf162,
-0x0000,0xeecd,0xc2eb,0xf16a,0xf167,0xf16b,0xf15e,0xf15a,
-0xf168,0xf36a,0xf15c,0x0000,0xc2ee,0x0000,0xc2ed,0xeecf,
-0xc2ef,0xf164,0xf166,0xc2ec,0xf169,0xf153,0x0000,0xf156,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xf373,0x0000,0xf363,0xc3eb,0xf371,0x0000,0x0000,0xf361,
-0xc3ec,0x0000,0xf36c,0x0000,0xf368,0xc3f1,0xf372,0xf362,
-0xf365,0xc3e9,0xf374,0x0000,0xf36d,0xf370,0xc3ef,0xc3f4,
-0xc3f2,0xf369,0xf364,0x0000,0xc3ed,0xc3ee,0xf360,0xc3ea,
-0x0000,0xc3e8,0xc3f0,0xf36f,0xc3f3,0x0000,0xf36b,0xf375,
-0xc3f5,0x0000,0x0000,0x0000,0xf367,0x0000,0xf36e,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xf4f3,0xf542,0xf4f5,
-0xf4fc,0xf366,0xf4fa,0xf4e9,0xf540,0xc4c3,0xf4ed,0xf4fe,
-0xf4f4,0x0000,0x0000,0xc4c2,0x0000,0x0000,0xf544,0xf4f6,
-0x0000,0xf4fb,0xf4fd,0xf4e7,0xf541,0xf4f2,0xf4f7,0xf4eb,
-0xf4ef,0xf543,0xf4f9,0xf4e8,0xf4ec,0xf4ee,0xf4f8,0x0000,
-0xc4c1,0xf4f1,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xf4ea,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xf4f0,0xf661,0xf666,0xc54f,0xf668,0x0000,0xc549,0x0000,
-0xf664,0xf66a,0xc54e,0xc54a,0x0000,0xc54b,0xf660,0xf667,
-0xc54d,0xf665,0xc54c,0xf65f,0xf663,0xf662,0x0000,0xf65e,
-0xf669,0x0000,0x0000,0x0000,0xc5b1,0xf76d,0xf770,0xf76c,
-0xf76e,0xf76f,0xf769,0xf76a,0xf767,0x0000,0x0000,0xf76b,
-0xf768,0xc5b2,0xc5b3,0x0000,0x0000,0xf84b,0x0000,0xf84d,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xf84c,0xf84e,0x0000,
-0xc5e0,0x0000,0xf84a,0xc5df,0xc5e1,0x0000,0x0000,0x0000,
-0xf8cb,0xf8cc,0xc644,0xf8ca,0x0000,0xf953,0xf952,0xf954,
-0xc65f,0xf955,0xc65e,0xf956,0xf972,0xf975,0xf974,0xc668,
-0xf973,0x0000,0x0000,0x0000,0xc672,0xc670,0xc671,0xc677,
-0xf9c0,0xf9c1,0xf9bf,0xf9c9,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-/* 0x9500 */
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xaaf8,
-0x0000,0x0000,0xd844,0xdc78,0xe8a5,0xf376,0x0000,0x0000,
-0xaaf9,0x0000,0xadac,0xb07b,0x0000,0x0000,0xd845,0x0000,
-0xd846,0xb3ac,0x0000,0xb67d,0xdc7a,0xdc79,0xb6a3,0xb67c,
-0xdc7b,0xb67e,0xb6a2,0xb6a1,0xb67b,0x0000,0x0000,0x0000,
-0xb968,0x0000,0x0000,0xe0d0,0xe0ce,0x0000,0xe0cf,0xe0cd,
-0x0000,0xbbd2,0x0000,0xbbd5,0xbbd7,0xbbd6,0x0000,0x0000,
-0xbbd3,0xbbd4,0x0000,0xe8a7,0xe8a6,0xbe5b,0xe8a8,0x0000,
-0xe8a9,0xbe5c,0x0000,0x0000,0x0000,0xec4d,0xec4b,0xeef3,
-0x0000,0xec49,0xec4a,0xc046,0xec46,0xec4e,0xec48,0xec4c,
-0xeeef,0x0000,0x0000,0xeef1,0x0000,0xeef2,0xc1f3,0xeeee,
-0xc1f2,0xeef0,0xc1ef,0xc1f0,0xc1f1,0xec47,0x0000,0x0000,
-0xc2f5,0xf16e,0xf16c,0xf16d,0xc2f3,0xc2f6,0xc2f4,0x0000,
-0x0000,0x0000,0xf377,0xf378,0xc3f6,0x0000,0xf545,0xf547,
-0xf546,0xc4c4,0xc550,0xf66d,0xf66c,0xf66b,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-/* 0x9600 */
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xaafa,0x0000,0xc9aa,0x0000,
-0xca58,0xa6e9,0xca56,0xca59,0xca57,0x0000,0x0000,0x0000,
-0xcbae,0x0000,0xa8c1,0x0000,0xa8c2,0xcbb0,0xa8bf,0xcbaf,
-0xcbad,0xa8c0,0xa8be,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xcdd8,0xcddb,0xaafd,0xcdda,0xcdd9,0x0000,0xaafc,
-0xaafb,0x0000,0xab40,0xcddc,0xaafe,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xd0c6,0xadae,0xadaf,0xadb0,0xd0c7,0xd0c3,
-0xadad,0xd0c4,0x0000,0xd0c5,0xd0c2,0x0000,0x0000,0x0000,
-0xb0a4,0x0000,0x0000,0xb0a1,0xd445,0xb0a2,0xb0a5,0xd446,
-0x0000,0xb07e,0xb07c,0xb07d,0xb0a3,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xb3ad,0xd849,0xb3b5,0xd848,0x0000,0xd84b,
-0xb3b1,0xd84a,0xb6ab,0xb3af,0xb3b2,0xb3ae,0xb3b3,0xb3b4,
-0xb3b0,0x0000,0x0000,0x0000,0xd847,0xb6a7,0xdc7d,0x0000,
-0xdca3,0x0000,0x0000,0xdca2,0xb6ac,0xb6a8,0xb6a9,0xdc7c,
-0xdc7e,0xdca1,0xb6a4,0xb6a6,0x0000,0xb6aa,0xb6a5,0x0000,
-0x0000,0xe0d3,0xe0d1,0xe0d2,0xb96a,0xb96b,0x0000,0xe0d4,
-0xb969,0xbbd8,0x0000,0xbbda,0xbbd9,0x0000,0xe4bb,0x0000,
-0x0000,0xe4bc,0xe8ab,0x0000,0xe8aa,0x0000,0x0000,0xc047,
-0xc048,0xec4f,0xc049,0x0000,0xeef6,0x0000,0xeef4,0x0000,
-0xeef5,0xc1f4,0x0000,0xf16f,0xc3f7,0x0000,0x0000,0x0000,
-0xc1f5,0xab41,0x0000,0xb0a6,0xd447,0x0000,0x0000,0xd84c,
-0xb3b6,0xb6ad,0xdca4,0xdca6,0xb6af,0xb6ae,0xb6b0,0xb6b1,
-0xdca5,0xb96e,0xb96f,0xb96d,0xbbdb,0xb96c,0xe0d5,0x0000,
-0x0000,0x0000,0xbbdc,0xe8ac,0xec50,0xc04a,0xc1f6,0xf170,
-0xf174,0xc2f9,0xf171,0xc2fa,0xc2f8,0xf175,0xc2fb,0xf173,
-0x0000,0xf379,0xc2f7,0xc3f8,0x0000,0xf8cd,0x0000,0x0000,
-0xab42,0xb3b8,0xb3b7,0x0000,0x0000,0x0000,0x0000,0xb6b2,
-0xdca8,0xdca7,0xb6b3,0x0000,0x0000,0xe0d9,0xb973,0xb970,
-0xe0d8,0xb972,0xe0d6,0xb971,0x0000,0xe0d7,0x0000,0xe4bd,
-0xbbdd,0x0000,0xe8af,0x0000,0xbe5d,0xe8ad,0xbe5e,0xbe5f,
-0xe8ae,0xbe60,0x0000,0xec51,0x0000,0xc04e,0xc04b,0xc050,
-0xec53,0xc04c,0xec52,0xc04f,0x0000,0x0000,0xc04d,0x0000,
-0xeef9,0xeefb,0x0000,0x0000,0xc1f7,0xeefa,0xc1f8,0xeef8,
-0xeef7,0x0000,0xf177,0xf176,0xc2fc,0xf178,0xf37e,0xc3fa,
-0xf37d,0xf37a,0xc3f9,0xf37b,0xf37c,0x0000,0xf548,0xf549,
-0xc4c5,0x0000,0xc553,0x0000,0x0000,0xf66e,0x0000,0x0000,
-0xc551,0xc552,0xf66f,0x0000,0x0000,0xc5b4,0xc5b5,0xf771,
-0x0000,0x0000,0xc645,0xf8cf,0xc647,0x0000,0xf8ce,0xf8d0,
-0xc646,0xf957,0x0000,0xf9ad,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xab43,0x0000,0x0000,0x0000,0xb974,0x0000,
-0xe4be,0x0000,0xe8b0,0xc051,0xc052,0x0000,0xab44,0x0000,
-0xbe61,0xc3fb,0xadb1,0x0000,0x0000,0x0000,0xc053,0x0000,
-0xc5e2,0xadb2,0xd84d,0x0000,0xdca9,0x0000,0xdcab,0x0000,
-0xdcaa,0x0000,0xe0dd,0xe0da,0xb975,0x0000,0xb976,0xe0db,
-0xe0dc,0x0000,0xe4c0,0xe4c5,0xbbde,0xe4bf,0xe4c1,0xe4c8,
-0xe4c3,0xe4c7,0xe4c4,0xe4c2,0xe4c6,0xbbdf,0x0000,0x0000,
-0xe8b3,0x0000,0xe8b1,0xbe63,0x0000,0xbe62,0xe8b2,0xbe64,
-0x0000,0x0000,0x0000,0x0000,0xec56,0x0000,0x0000,0xec55,
-0xc054,0xec54,0xeefc,0x0000,0xeefe,0xef41,0xef40,0x0000,
-0xc1f9,0xeefd,0xf1a1,0xc2fd,0xf17d,0xf1a2,0xc2fe,0x0000,
-0xf17b,0x0000,0xf17e,0xf17c,0xf179,0xc340,0xf17a,0x0000,
-0x0000,0x0000,0x0000,0xf3a1,0x0000,0x0000,0xf3a3,0xf3a2,
-0x0000,0xf54a,0x0000,0xf54b,0x0000,0x0000,0x0000,0xf670,
-0x0000,0xc5b7,0x0000,0xc5b6,0xf84f,0xf850,0xc648,0xf8d1,
-0x0000,0xc669,0x0000,0xadb3,0xb6b4,0xe4ca,0xe4c9,0xe8b5,
-0xe8b4,0x0000,0x0000,0xc1fa,0xef43,0xef42,0xf1a5,0xf1a3,
-0xf1a6,0xf1a4,0x0000,0x0000,0xc3fc,0xf3a4,0xf3a5,0xf3a6,
-0x0000,0xf671,0x0000,0xf772,0x0000,0xf8d2,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xadb4,0x0000,0x0000,
-0xec57,0xef44,0x0000,0xadb5,0x0000,0x0000,0xbbe0,0x0000,
-0xec58,0xc341,0xf1a7,0xc3fd,0x0000,0xf54c,0xf54d,0xc554,
-0xf851,0xadb6,0xb3bb,0xb3bc,0xd84e,0xb6b5,0xb6b6,0xdcac,
-0xb6b7,0x0000,0xb97a,0x0000,0xb97c,0xe0df,0xe0e0,0xe0de,
-0xb977,0xb978,0xb97b,0xb979,0x0000,0x0000,0xe4cb,0xbbe1,
-0xbbe2,0x0000,0x0000,0xe8bc,0xbe67,0xe8b7,0xe8b6,0x0000,
-0xe8bb,0xbe65,0x0000,0x0000,0xc05b,0x0000,0xe8b8,0xe8bd,
-0xe8ba,0xe8b9,0x0000,0xbe66,0x0000,0xc059,0x0000,0xec5a,
-0xc055,0x0000,0xec5b,0x0000,0x0000,0xec59,0x0000,0xc058,
-0xc056,0xc05a,0x0000,0xc057,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xef45,0x0000,0xef4a,0xef46,0xef49,0xc1fb,0x0000,
-0xedd4,0xef48,0xef47,0x0000,0xc344,0xc342,0xc345,0xc343,
-0xf1a8,0xf1a9,0xf1aa,0xc346,0x0000,0x0000,0x0000,0xf3aa,
-0xc440,0xf3a8,0x0000,0xc441,0xf3a7,0xf3a9,0xc3fe,0xf551,
-0xf54e,0x0000,0xf54f,0xf550,0xf672,0xc556,0x0000,0xc555,
-0x0000,0xf774,0xf773,0xc5b8,0x0000,0x0000,0x0000,0xc5e3,
-0xc649,0xc660,0xf958,0xf9ae,0xf9af,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xadb7,0xdcad,0x0000,0x0000,0xe0e1,0xe4cc,0xe4cd,0xbbe3,
-0x0000,0xbbe4,0xe8be,0xbe68,0x0000,0x0000,0xc1fc,0x0000,
-0xf1ab,0x0000,0xc347,0xf3ad,0xc442,0xf3ac,0xf3ae,0xf3ab,
-0xf675,0xf552,0xf553,0x0000,0xc4c6,0x0000,0xf674,0x0000,
-0x0000,0xf673,0x0000,0xf775,0xf9b0,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xadb8,0x0000,0x0000,0x0000,0xadb9,
-0x0000,0x0000,0xb0a7,0xd448,0x0000,0xd84f,0x0000,0xb6b8,
-0x0000,0xb6bb,0xb6b9,0xdcae,0x0000,0xb6bd,0x0000,0xb6ba,
-0x0000,0x0000,0xb6bc,0x0000,0xb97e,0x0000,0xe0e2,0x0000,
-0x0000,0xe0e3,0xe8c0,0x0000,0xb97d,0xb9a1,0xb9a2,0x0000,
-0xe4cf,0x0000,0xe4ce,0xbbe5,0x0000,0xbbe6,0x0000,0xe4d0,
-0xe8bf,0xbbe8,0xbe69,0x0000,0xbbe7,0x0000,0x0000,0x0000,
-0xc05c,0xe8c1,0xbe6b,0xbe6a,0xe8c2,0xe8c5,0xe8c3,0xe8c4,
-0xbe6c,0x0000,0xc061,0xc05f,0x0000,0x0000,0xc05e,0xec5d,
-0x0000,0xc060,0x0000,0x0000,0xec5c,0xef4b,0x0000,0xec5e,
-0xc05d,0xec5f,0xef4e,0xef4c,0xef4d,0xef52,0xc34b,0xef51,
-0xef54,0xef53,0xef50,0xef4f,0x0000,0xc1fd,0x0000,0x0000,
-0x0000,0x0000,0xf1ae,0x0000,0xf1ad,0xc34a,0xc348,0xc349,
-0x0000,0xf1ac,0x0000,0xf3b1,0x0000,0xc443,0x0000,0xf3b0,
-0xf3af,0xc444,0x0000,0xf558,0xf557,0x0000,0xf555,0x0000,
-0xf554,0xc4c8,0xc4c7,0xf559,0xf776,0xc5b9,0xf677,0xc557,
-0xf676,0xf556,0x0000,0xf777,0xc5e4,0x0000,0xc661,0xf959,
-0x0000,0xf9b1,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xadba,0xd850,
-0xef55,0xadbb,0x0000,0x0000,0xe4d2,0xe4d1,0xec60,0x0000,
-0x0000,0xef57,0x0000,0xef56,0x0000,0xc34c,0xf3b2,0xf3b3,
-0xc4c9,0x0000,0x0000,0xf9b2,0xb0a8,0xb6bf,0xb6be,0xe0e4,
-0xe0e6,0xb9a4,0xe0e5,0xb9a3,0xb9a5,0xe0e7,0x0000,0x0000,
-0x0000,0xe4d4,0xe4d6,0xe4d5,0x0000,0xe4d8,0x0000,0x0000,
-0x0000,0xbbe9,0xe4d7,0xe4d3,0x0000,0x0000,0x0000,0xe4d9,
-0x0000,0xe8cc,0x0000,0xe8cf,0xe8d1,0xe8c7,0xe8cb,0xe8c8,
-0xbe6e,0xbe71,0xbe73,0xe8c9,0xe8ca,0xbe72,0xe8cd,0xe8d0,
-0xe8ce,0xbe74,0x0000,0xbe70,0xe8c6,0xbe6d,0x0000,0xbe6f,
-0x0000,0x0000,0xc063,0xec66,0xec64,0xec63,0x0000,0xec69,
-0x0000,0xec68,0xec67,0x0000,0xec62,0xc062,0xec61,0x0000,
-0xec65,0xc064,0x0000,0x0000,0xef5a,0x0000,0xef5e,0xef5b,
-0xef5d,0xef5c,0xef59,0xef5f,0xef62,0xef60,0xef61,0xc240,
-/* 0x9a00 */
-0x0000,0xc1fe,0xef58,0xef63,0xf1b3,0xf1b6,0xf1b8,0xf1b7,
-0x0000,0xf1b1,0xf1b5,0xf1b0,0x0000,0xf1b2,0xc34d,0xf1af,
-0x0000,0xf1b4,0x0000,0x0000,0xf3c0,0xf3b5,0xc445,0x0000,
-0x0000,0xc446,0xf3b4,0xf3b9,0xf3bf,0xf3b7,0xf3be,0x0000,
-0xf3bb,0x0000,0xf3ba,0xf3bd,0xf3b8,0xf3b6,0x0000,0xf3bc,
-0x0000,0xf560,0xf55e,0xc4ca,0xf55d,0xf563,0xf561,0x0000,
-0xc4cb,0xf55c,0xf55a,0x0000,0xf55b,0xc4cd,0xf55f,0xc4cc,
-0xf562,0xf678,0xf67e,0x0000,0x0000,0xf679,0xc55b,0xf6a1,
-0xc55a,0xf67d,0xf67c,0xc559,0xf67b,0xc558,0xf67a,0x0000,
-0xf77d,0xf7a1,0xf77e,0x0000,0xf77b,0xc5bb,0xf778,0xf77c,
-0xf7a3,0x0000,0xf7a2,0xf779,0xf77a,0xc5ba,0xf852,0xc5e7,
-0x0000,0xf853,0xc5e5,0xc5e6,0x0000,0x0000,0xf8d3,0xc64a,
-0xf976,0x0000,0xc66a,0x0000,0xf9b3,0xc66b,0xf9b4,0xf9b5,
-0xf9c3,0xf9c2,0xc67a,0xf9cd,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xb0a9,0x0000,0x0000,0xe0e9,0x0000,0xe0e8,0x0000,0xbbea,
-0xbbeb,0xe4da,0x0000,0xe8d2,0xec6c,0x0000,0x0000,0xbe75,
-0xc065,0xec6a,0x0000,0xec6d,0xc066,0x0000,0xef64,0xec6b,
-0xf1b9,0xc34e,0xf3c1,0x0000,0x0000,0x0000,0xf566,0xf564,
-0x0000,0x0000,0xf565,0x0000,0x0000,0xf6a2,0x0000,0xc55c,
-0xf7a4,0xc5ea,0xc5bc,0xc5e8,0xc5e9,0xf8d4,0xc662,0x0000,
-0xb0aa,0x0000,0x0000,0x0000,0xf1ba,0x0000,0x0000,0xd449,
-0x0000,0xb9a6,0x0000,0xe4db,0x0000,0x0000,0xbbec,0xe4dc,
-0x0000,0x0000,0x0000,0xe8d4,0xe8d3,0xc068,0xbe76,0xbe77,
-0x0000,0xe8d7,0xe8d6,0xe8d5,0x0000,0x0000,0xec6e,0xec71,
-0x0000,0xec70,0xec6f,0xc067,0xef68,0xef66,0xef65,0x0000,
-/* 0x9b00 */
-0x0000,0xef67,0x0000,0xc34f,0xf1bc,0xf1bd,0xc350,0x0000,
-0xf1bb,0x0000,0xf3c3,0xf3c2,0xf3c5,0xc447,0xf3c4,0x0000,
-0xf567,0xf569,0xf568,0x0000,0x0000,0xf6a3,0xf6a6,0xf6a4,
-0xf6a5,0xf7a5,0xc5bd,0x0000,0x0000,0x0000,0xf854,0xf855,
-0xf856,0x0000,0xc64b,0xc663,0xf9b6,0xb0ab,0x0000,0xbe78,
-0xc069,0xf1be,0x0000,0xf7a6,0x0000,0x0000,0xf9c4,0xd44a,
-0x0000,0xc67b,0xb0ac,0xec72,0x0000,0xf1bf,0x0000,0xf3c6,
-0x0000,0x0000,0xf6a7,0xf7a7,0xb0ad,0x0000,0xe4dd,0xe4de,
-0x0000,0xbbed,0xbbee,0xe8d9,0xbe7a,0xbe79,0xe8d8,0x0000,
-0xef69,0x0000,0xf1c0,0xf1c2,0xf1c1,0xc353,0xc352,0xc351,
-0x0000,0xc55e,0xf6a8,0x0000,0xc55d,0xf7a9,0xf7a8,0x0000,
-0xc64c,0xf8d5,0xb3bd,0xe0ea,0x0000,0x0000,0x0000,0xe4e1,
-0xe4df,0xe4e0,0x0000,0x0000,0xe8e2,0x0000,0xe8dd,0xe8da,
-0xe8e1,0x0000,0x0000,0x0000,0xe8e3,0x0000,0x0000,0xbe7c,
-0xe8e0,0xe8dc,0x0000,0x0000,0xe8db,0xe8df,0xe8de,0xbe7b,
-0x0000,0x0000,0xec7d,0xec78,0xec76,0xeca1,0xec77,0x0000,
-0xec73,0x0000,0xec79,0x0000,0x0000,0xec74,0xef72,0xec75,
-0xeca2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xec7c,0xc06a,0xec7b,0xec7a,0x0000,0xec7e,0x0000,0x0000,
-0x0000,0x0000,0xef6a,0xef6d,0x0000,0x0000,0xef6c,0x0000,
-0xef74,0xef6f,0xef73,0x0000,0xef71,0xef70,0xef6e,0x0000,
-0xef6b,0x0000,0xc243,0xc242,0x0000,0xc244,0xc241,0xef75,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xf1c8,0xf1cb,0x0000,
-0xf1c9,0xf1cd,0x0000,0x0000,0x0000,0xf1ce,0x0000,0xf1c6,
-0xc358,0xf1c7,0x0000,0xf1c5,0xf1cc,0x0000,0xf1c4,0xf1c3,
-0xc357,0xc355,0xc354,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xf1ca,0xf3cf,0xf3d5,0xc44a,0xf3d0,
-0x0000,0xf3d3,0xf3d7,0xc44b,0xf3d2,0x0000,0xf3ca,0x0000,
-0xf3c9,0xf3d6,0xf3cd,0x0000,0xf3cb,0xf3d4,0xf3cc,0xc449,
-0xc448,0x0000,0xf3c7,0xf3c8,0xf3d1,0x0000,0x0000,0x0000,
-0xf3ce,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xf56c,
-0xf56f,0x0000,0x0000,0x0000,0x0000,0xc356,0x0000,0x0000,
-/* 0x9c00 */
-0x0000,0x0000,0x0000,0x0000,0x0000,0xf56d,0xf573,0xf571,
-0xf56b,0xf576,0x0000,0xf56a,0x0000,0xc4cf,0xf572,0x0000,
-0x0000,0x0000,0xf56e,0xc4ce,0xf575,0x0000,0x0000,0xf574,
-0x0000,0x0000,0x0000,0x0000,0xf6ab,0xf6aa,0x0000,0x0000,
-0x0000,0xf6b1,0x0000,0xf6ad,0xf6b0,0xc560,0x0000,0x0000,
-0xf6ae,0xf6af,0x0000,0xf6a9,0xf6ac,0xc55f,0x0000,0x0000,
-0x0000,0xc5bf,0xf7b4,0xf7af,0xf7b3,0x0000,0xf7b6,0xf7b2,
-0x0000,0xf7ae,0x0000,0xc5c1,0xf7b1,0xf7b5,0xc5c0,0xf7ac,
-0xf570,0xf7b0,0x0000,0x0000,0xf7ad,0x0000,0xf7aa,0x0000,
-0xf7ab,0xc5be,0xf85a,0xf85c,0xf85f,0xf85b,0xf860,0x0000,
-0xf859,0x0000,0xf857,0x0000,0xc5eb,0xf85d,0xc5ed,0xc5ec,
-0xf858,0xf85e,0x0000,0x0000,0x0000,0x0000,0xf8da,0xc64d,
-0xf8db,0x0000,0xf8d9,0xf8d6,0x0000,0x0000,0xf8d8,0xf8d7,
-0xf95a,0x0000,0x0000,0x0000,0x0000,0xf95c,0xf95b,0x0000,
-0x0000,0xf979,0x0000,0xf978,0xf977,0xf97a,0x0000,0xc673,
-0xc674,0xf9ca,0xf9ce,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xb3be,0xdcaf,0xe0ed,
-0x0000,0xb9a7,0xe0eb,0x0000,0x0000,0xe0ec,0x0000,0x0000,
-0x0000,0xe4e2,0xe4e3,0xbbf1,0xbbef,0xe4e4,0xbbf0,0xe8e8,
-0x0000,0xe8eb,0xe8e5,0xe8ec,0xe8e4,0xe8e6,0x0000,0xe8e7,
-0xe8ea,0x0000,0x0000,0xbea1,0xe8ef,0xe8ee,0xbe7d,0xe8e9,
-0xe8ed,0xbe7e,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xecac,0x0000,0xc06f,0x0000,0xeca7,0xc06b,0x0000,0xeca4,
-0xecaa,0xecad,0x0000,0xc070,0x0000,0xeca9,0xeca6,0xecae,
-0xeca5,0x0000,0xecab,0xc06c,0x0000,0xeca3,0xc06d,0x0000,
-0xc06e,0xeca8,0x0000,0x0000,0x0000,0xefa9,0xef7a,0xef7b,
-0xef7e,0xef7c,0x0000,0xef76,0x0000,0x0000,0xef79,0xefa5,
-0xef7d,0x0000,0x0000,0xc245,0x0000,0xefa7,0xefa4,0xc246,
-0xefa6,0xef77,0xefa2,0xefa3,0x0000,0xefa1,0x0000,0x0000,
-0x0000,0x0000,0xf1d2,0xf1d4,0xf1d7,0x0000,0x0000,0xf1d1,
-0x0000,0xc359,0xf1d9,0xf1d0,0xf1da,0x0000,0xf1d6,0xf1d8,
-0xf1dc,0xf1d5,0xf1dd,0xf1d3,0xf1cf,0xc35a,0x0000,0xf1db,
-0xc35b,0xc44d,0x0000,0x0000,0x0000,0x0000,0x0000,0xef78,
-0xf3f1,0xf3e8,0xc44f,0xf3e4,0xc450,0x0000,0x0000,0xf3ed,
-0xf3e7,0xf3dd,0xc44e,0xf3ea,0xf3e5,0xf3e6,0x0000,0xf3d8,
-0xf3df,0xf3ee,0x0000,0xf3eb,0x0000,0xf3e3,0x0000,0xf3ef,
-0xf3de,0xf3d9,0xf3ec,0x0000,0xf3db,0xf3e9,0xf3e0,0xf3f0,
-0xf3dc,0xc44c,0xf3da,0xf3e1,0xf3e2,0x0000,0x0000,0x0000,
-0xf57d,0x0000,0xf57b,0x0000,0xf5a2,0x0000,0xf5ae,0xf5a5,
-0xf57c,0xf578,0xf5a7,0xf57e,0xf5a3,0xf57a,0xf5aa,0xf577,
-0xf5a1,0xf5a6,0xf5a8,0xf5ab,0xf579,0x0000,0xf5af,0xf5b0,
-0xf5a9,0xf5ad,0xf5a4,0x0000,0xf6c1,0xf6c4,0x0000,0xc561,
-0x0000,0xf6c3,0xf6c8,0xf6c6,0xc562,0xf6bd,0xf6b3,0xf6b2,
-0xc564,0xf6bf,0xf6c0,0xf6bc,0xf6b4,0x0000,0xf6b9,0xf5ac,
-0x0000,0xf6b5,0xc563,0xf6bb,0x0000,0xf6ba,0x0000,0xf6b6,
-0xf6c2,0x0000,0xf6b7,0xf7bb,0xf6c5,0xf6c7,0xf6be,0xf6b8,
-0xf7bc,0xf7be,0xf7b8,0xc5c2,0x0000,0xf7c5,0xf7c3,0xc5c3,
-0xf7c2,0xf7c1,0xf7ba,0xf7b7,0xf7bd,0xf7c6,0xf7b9,0xf7bf,
-0x0000,0xf869,0xf86e,0xf864,0xf867,0xc5ee,0xf86b,0x0000,
-0xf872,0xf7c0,0x0000,0xf865,0xf86f,0xf873,0xf86a,0xf863,
-0xf86d,0x0000,0xf86c,0xf871,0xf870,0xf7c4,0xf868,0xf862,
-0xf866,0xc64e,0xc64f,0xf861,0x0000,0xf8e6,0xf8dd,0xf8e5,
-0xf8e2,0xf8e3,0xf8dc,0xf8df,0xf8e7,0xf8e1,0xf8e0,0xf8de,
-0x0000,0xf8e4,0x0000,0xf95d,0x0000,0xf95e,0x0000,0xf960,
-0xf95f,0xf962,0xf961,0xf97c,0xf97b,0xf9b7,0x0000,0xf9b8,
-0x0000,0xf9c5,0xc678,0xc67c,0x0000,0xf9cf,0xc67d,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xb3bf,0x0000,0x0000,
-0x0000,0xc4d0,0xf6c9,0x0000,0xc650,0xc651,0x0000,0xb3c0,
-0xe0ee,0x0000,0xb9a8,0xe8f0,0x0000,0x0000,0xecb0,0xecb1,
-0xecaf,0xefab,0xefaa,0xc247,0xf1df,0xefac,0xf1de,0x0000,
-0x0000,0xf3f3,0xc451,0xc453,0xf3f2,0x0000,0x0000,0xc452,
-0x0000,0xf5b1,0xf5b3,0xf5b2,0xf6ca,0xc565,0x0000,0xc5ef,
-0xf8e8,0xf963,0x0000,0x0000,0xf9d2,0xb3c1,0x0000,0xe4e5,
-0x0000,0xbea2,0x0000,0x0000,0x0000,0xecb3,0xecb2,0x0000,
-0xefad,0x0000,0x0000,0x0000,0xc454,0xc4d1,0xf7c7,0xf9cb,
-0x0000,0x0000,0x0000,0xb3c2,0xbbf2,0x0000,0xbea3,0x0000,
-0xf3f4,0x0000,0xf874,0xb6c0,0x0000,0x0000,0x0000,0x0000,
-0xefae,0x0000,0x0000,0x0000,0xc664,0xb6c1,0xbea4,0xc248,
-0xf875,0xb6c2,0x0000,0xe8f1,0xc072,0xecb4,0xecb5,0x0000,
-0xc071,0x0000,0xefaf,0xc24c,0xc24a,0xc24b,0xc249,0xf1e0,
-0xc35c,0x0000,0x0000,0x0000,0xf5b5,0xf5b4,0xf5b7,0xf5b6,
-0xc4d2,0x0000,0x0000,0xf6cb,0x0000,0xf6cd,0xf6cc,0xc566,
-0xf7c8,0x0000,0xf876,0xf877,0xc5f0,0xf964,0xf97d,0xc675,
-0x0000,0xdcb0,0xecb6,0xefb0,0xf3f5,0xe0ef,0x0000,0xefb1,
-0xf1e2,0xf1e1,0x0000,0x0000,0x0000,0x0000,0xf878,0xc652,
-0x0000,0xf965,0xf97e,0x0000,0x0000,0x0000,0xb9a9,0xe8f2,
-0xe8f3,0x0000,0xecb7,0xb9aa,0x0000,0xc35d,0xf1e3,0x0000,
-0xf6cf,0xc567,0xf6d0,0xf6ce,0xf879,0x0000,0xf8e9,0x0000,
-0xb9ab,0x0000,0xefb4,0xefb3,0xefb2,0xf1e4,0x0000,0x0000,
-0xf1e8,0xf1e7,0xf1e6,0xf1e5,0xc35e,0xf3f6,0xf5b9,0xc4d3,
-0xf5b8,0xf6d1,0xf7cb,0xf7ca,0xc5c4,0xf7c9,0xf87c,0xf87b,
-0xf87a,0x0000,0x0000,0xbbf3,0x0000,0xecb8,0xc24d,0x0000,
-0xf3f7,0xf3f8,0xf7cc,0xf87d,0x0000,0x0000,0xf8ea,0xf966,
-0xf9b9,0xf9d4,0xbbf4,0xc24e,0xf1e9,0xf3f9,0xf6d2,0xf87e,
-0x0000,0x0000,0xbea6,0x0000,0xefb5,0xf1ea,0xf3fa,0xf3fb,
-0xf3fc,0xf5be,0x0000,0xf5ba,0xc568,0xf5bd,0xf5bc,0xc4d4,
-0xf5bb,0xc4d6,0x0000,0xc4d5,0xf6d4,0xf6d3,0xc569,0xc56a,
-0x0000,0x0000,0xc5c6,0xf7cd,0xc5c5,0x0000,0xf8a3,0xf8a4,
-0xf8a2,0xf8a1,0xc654,0x0000,0xf8eb,0xf8ec,0xf8ed,0xc653,
-0xf967,0xf96a,0xf969,0xf968,0x0000,0x0000,0xf9d3,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xc073,0x0000,0x0000,
-0xc365,0xf5bf,0xf6d5,0x0000,0xc5c7,0xf7ce,0x0000,0x0000,
-0xf9d5,0x0000,0x0000,0x0000,0xc074,0x0000,0x0000,0x0000,
-0xefb6,0x0000,0xf7cf,0x0000,0xf9a1};
-
-static const int ucs_i_big5_table_min = 0x4d00;
-static const int ucs_i_big5_table_max = 0x4d00 + (sizeof (ucs_i_big5_table) / sizeof (unsigned short));
-
-static const unsigned short ucs_pua_big5_table[] = {
-/* 0xf600 */
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xc6a1,0xc6a2,0xc6a3,0xc6a4,0xc6a5,0xc6a6,0xc6a7,
-0xc6a8,0xc6a9,0xc6aa,0xc6ab,0xc6ac,0xc6ad,0xc6ae,0xc6af,
-0xc6b0,0xc6b1,0xc6b2,0xc6b3,0xc6b4,0xc6b5,0xc6b6,0xc6b7,
-0xc6b8,0xc6b9,0xc6ba,0xc6bb,0xc6bc,0xc6bd,0xc6be,0xc6bf,
-0xc6c0,0xc6c1,0xc6c2,0xc6c3,0xc6c4,0xc6c5,0xc6c6,0xc6c7,
-0xc6c8,0xc6c9,0xc6ca,0xc6cb,0xc6cc,0xc6cd,0xc6ce,0xc6cf,
-0xc6d0,0xc6d1,0xc6d2,0xc6d3,0xc6d4,0xc6d5,0xc6d6,0xc6d7,
-0xc6d8,0xc6d9,0xc6da,0xc6db,0xc6dc,0xc6dd,0xc6de,0xc6df,
-0xc6e0,0xc6e1,0xc6e2,0xc6e3,0xc6e4,0xc6e5,0xc6e6,0xc6e7,
-0xc6e8,0xc6e9,0xc6ea,0xc6eb,0xc6ec,0xc6ed,0xc6ee,0xc6ef,
-0xc6f0,0xc6f1,0xc6f2,0xc6f3,0xc6f4,0xc6f5,0xc6f6,0xc6f7,
-0xc6f8,0xc6f9,0xc6fa,0xc6fb,0xc6fc,0xc6fd,0xc6fe,0xc740,
-0xc741,0xc742,0xc743,0xc744,0xc745,0xc746,0xc747,0xc748,
-0xc749,0xc74a,0xc74b,0xc74c,0xc74d,0xc74e,0xc74f,0xc750,
-0xc751,0xc752,0xc753,0xc754,0xc755,0xc756,0xc757,0xc758,
-0xc759,0xc75a,0xc75b,0xc75c,0xc75d,0xc75e,0xc75f,0xc760,
-0xc761,0xc762,0xc763,0xc764,0xc765,0xc766,0xc767,0xc768,
-0xc769,0xc76a,0xc76b,0xc76c,0xc76d,0xc76e,0xc76f,0xc770,
-0xc771,0xc772,0xc773,0xc774,0xc775,0xc776,0xc777,0xc778,
-0xc779,0xc77a,0xc77b,0xc77c,0xc77d,0xc77e,0xc7a1,0xc7a2,
-0xc7a3,0xc7a4,0xc7a5,0xc7a6,0xc7a7,0xc7a8,0xc7a9,0xc7aa,
-0xc7ab,0xc7ac,0xc7ad,0xc7ae,0xc7af,0xc7b0,0xc7b1,0xc7b2,
-0xc7b3,0xc7b4,0xc7b5,0xc7b6,0xc7b7,0xc7b8,0xc7b9,0xc7ba,
-0xc7bb,0xc7bc,0xc7bd,0xc7be,0xc7bf,0xc7c0,0xc7c1,0xc7c2,
-0xc7c3,0xc7c4,0xc7c5,0xc7c6,0xc7c7,0xc7c8,0xc7c9,0xc7ca,
-0xc7cb,0xc7cc,0xc7cd,0xc7ce,0xc7cf,0xc7d0,0xc7d1,0xc7d2,
-0xc7d3,0xc7d4,0xc7d5,0xc7d6,0xc7d7,0xc7d8,0xc7d9,0xc7da,
-0xc7db,0xc7dc,0xc7dd,0xc7de,0xc7df,0xc7e0,0xc7e1,0xc7e2,
-0xc7e3,0xc7e4,0xc7e5,0xc7e6,0xc7e7,0xc7e8,0xc7e9,0xc7ea,
-0xc7eb,0xc7ec,0xc7ed,0xc7ee,0xc7ef,0xc7f0,0xc7f1,0xc7f2,
-0xc7f3,0xc7f4,0xc7f5,0xc7f6,0xc7f7,0xc7f8,0xc7f9,0xc7fa,
-0xc7fb,0xc7fc,0xc7fd,0xc7fe,0xc840,0xc841,0xc842,0xc843,
-0xc844,0xc845,0xc846,0xc847,0xc848,0xc849,0xc84a,0xc84b,
-0xc84c,0xc84d,0xc84e,0xc84f,0xc850,0xc851,0xc852,0xc853,
-0xc854,0xc855,0xc856,0xc857,0xc858,0xc859,0xc85a,0xc85b,
-0xc85c,0xc85d,0xc85e,0xc85f,0xc860,0xc861,0xc862,0xc863,
-0xc864,0xc865,0xc866,0xc867,0xc868,0xc869,0xc86a,0xc86b,
-0xc86c,0xc86d,0xc86e,0xc86f,0xc870,0xc871,0xc872,0xc873,
-0xc874,0xc875,0xc876,0xc877,0xc878,0xc879,0xc87a,0xc87b,
-0xc87c,0xc87d,0xc87e,0xc8a1,0xc8a2,0xc8a3,0xc8a4,0xc8a5,
-0xc8a6,0xc8a7,0xc8a8,0xc8a9,0xc8aa,0xc8ab,0xc8ac,0xc8ad,
-0xc8ae,0xc8af,0xc8b0,0xc8b1,0xc8b2,0xc8b3,0xc8b4,0xc8b5,
-0xc8b6,0xc8b7,0xc8b8,0xc8b9,0xc8ba,0xc8bb,0xc8bc,0xc8bd,
-0xc8be,0xc8bf,0xc8c0,0xc8c1,0xc8c2,0xc8c3,0xc8c4,0xc8c5,
-0xc8c6,0xc8c7,0xc8c8,0xc8c9,0xc8ca,0xc8cb,0xc8cc,0xc8cd,
-0xc8ce,0xc8cf,0xc8d0,0xc8d1,0xc8d2,0xc8d3,0xc8d4,0xc8d5,
-0xc8d6,0xc8d7,0xc8d8,0xc8d9,0xc8da,0xc8db,0xc8dc,0xc8dd,
-0xc8de,0xc8df,0xc8e0,0xc8e1,0xc8e2,0xc8e3,0xc8e4,0xc8e5,
-0xc8e6,0xc8e7,0xc8e8,0xc8e9,0xc8ea,0xc8eb,0xc8ec,0xc8ed,
-0xc8ee,0xc8ef,0xc8f0,0xc8f1,0xc8f2,0xc8f3,0xc8f4,0xc8f5,
-0xc8f6,0xc8f7,0xc8f8,0xc8f9,0xc8fa,0xc8fb,0xc8fc,0xc8fd,
-0xc8fe};
-
-static const int ucs_pua_big5_table_min = 0xf600;
-static const int ucs_pua_big5_table_max = 0xf600 + (sizeof (ucs_pua_big5_table) / sizeof (unsigned short));
-
-static const unsigned short ucs_r1_big5_table[] = {
-/* 0xfa00 */
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xc94a,0xddfc};
-
-static const int ucs_r1_big5_table_min = 0xfa00;
-static const int ucs_r1_big5_table_max = 0xfa00 + (sizeof (ucs_r1_big5_table) / sizeof (unsigned short));
-
-static const unsigned short ucs_r2_big5_table[] = {
-/* 0xfe00 */
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xa14a,0xa157,0x0000,0xa159,0xa15b,0xa15f,0xa160,0xa163,
-0xa164,0xa167,0xa168,0xa16b,0xa16c,0xa16f,0xa170,0xa173,
-0xa174,0xa177,0xa178,0xa17b,0xa17c,0x0000,0x0000,0x0000,
-0x0000,0xa1c6,0xa1c7,0xa1ca,0xa1cb,0xa1c8,0xa1c9,0xa15c,
-0xa14d,0xa14e,0xa14f,0x0000,0xa151,0xa152,0xa153,0xa154,
-0x0000,0xa17d,0xa17e,0xa1a1,0xa1a2,0xa1a3,0xa1a4,0xa1cc,
-0xa1cd,0xa1ce,0xa1de,0xa1df,0xa1e0,0xa1e1,0xa1e2,0x0000,
-0xa242,0xa24c,0xa24d,0xa24e,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-/* 0xff00 */
-0x0000,0xa149,0x0000,0xa1ad,0xa243,0xa248,0xa1ae,0x0000,
-0xa15d,0xa15e,0xa1af,0xa1cf,0xa141,0xa1d0,0xa144,0xa1fe,
-0xa2af,0xa2b0,0xa2b1,0xa2b2,0xa2b3,0xa2b4,0xa2b5,0xa2b6,
-0xa2b7,0xa2b8,0xa147,0xa146,0xa1d5,0xa1d7,0xa1d6,0xa148,
-0xa249,0xa2cf,0xa2d0,0xa2d1,0xa2d2,0xa2d3,0xa2d4,0xa2d5,
-0xa2d6,0xa2d7,0xa2d8,0xa2d9,0xa2da,0xa2db,0xa2dc,0xa2dd,
-0xa2de,0xa2df,0xa2e0,0xa2e1,0xa2e2,0xa2e3,0xa2e4,0xa2e5,
-0xa2e6,0xa2e7,0xa2e8,0x0000,0xa240,0x0000,0x0000,0xa1c4,
-0x0000,0xa2e9,0xa2ea,0xa2eb,0xa2ec,0xa2ed,0xa2ee,0xa2ef,
-0xa2f0,0xa2f1,0xa2f2,0xa2f3,0xa2f4,0xa2f5,0xa2f6,0xa2f7,
-0xa2f8,0xa2f9,0xa2fa,0xa2fb,0xa2fc,0xa2fd,0xa2fe,0xa340,
-0xa341,0xa342,0xa343,0xa161,0xa155,0xa162,0xa1e3,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xa246,0xa247,0x0000,0xa1c3,0x0000,0xa244};
-
-static const int ucs_r2_big5_table_min = 0xfe00;
-static const int ucs_r2_big5_table_max = 0xfe00 + (sizeof (ucs_r2_big5_table) / sizeof (unsigned short));
-
-#endif /* UNICODE_TABLE_BIG5_H */
diff --git a/ext/mbstring/libmbfl/filters/unicode_table_cns11643.h b/ext/mbstring/libmbfl/filters/unicode_table_cns11643.h
deleted file mode 100644
index 0c17e1e616..0000000000
--- a/ext/mbstring/libmbfl/filters/unicode_table_cns11643.h
+++ /dev/null
@@ -1,6149 +0,0 @@
-/*
- * "streamable kanji code filter and converter"
- * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved.
- *
- * LICENSE NOTICES
- *
- * This file is part of "streamable kanji code filter and converter",
- * which is distributed under the terms of GNU Lesser General Public
- * License (version 2) as published by the Free Software Foundation.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with "streamable kanji code filter and converter";
- * if not, write to the Free Software Foundation, Inc., 59 Temple Place,
- * Suite 330, Boston, MA 02111-1307 USA
- *
- * The author of this file: Rui Hirokawa <hirokawa@php.net>
- *
- */
-
-#ifndef UNICODE_TABLE_CNS11643_H
-#define UNICODE_TABLE_CNS11643_H
-
-/*
- * Unicode table
- */
-
-/* CNS11643 -> UCS */
-static const unsigned short cns11643_1_ucs_table[] = {
-0x3000,0xff0c,0x3001,0x3002,0xff0e,0x30fb,0xff1b,0xff1a,
-0xff1f,0xff01,0xfe30,0x2026,0x2025,0xfe50,0xfe51,0xfe52,
-0x00b7,0xfe54,0xfe55,0xfe56,0xfe57,0xfe31,0x2014,0xfe32,
-0x2013,0x0000,0x0000,0x0000,0x0000,0xff08,0xff09,0xfe35,
-0xfe36,0xff5b,0xff5d,0xfe37,0xfe38,0x3014,0x3015,0xfe39,
-0xfe3a,0x3010,0x3011,0xfe3b,0xfe3c,0x300a,0x300b,0xfe3d,
-0xfe3e,0x3008,0x3009,0xfe3f,0xfe40,0x300c,0x300d,0xfe41,
-0xfe42,0x300e,0x300f,0xfe43,0xfe44,0xfe59,0xfe5a,0xfe5b,
-0xfe5c,0xfe5d,0xfe5e,0x2018,0x2019,0x201c,0x201d,0x301d,
-0x301e,0x2032,0x2035,0xff03,0xff06,0xff0a,0x203b,0x00a7,
-0x3003,0x25cb,0x25cf,0x25b3,0x25b2,0x25ce,0x2606,0x2605,
-0x25c7,0x25c6,0x25a1,0x25a0,0x25bd,0x25bc,0x32a3,0x2105,
-0x203e,0x0000,0xff3f,0x0000,0xfe49,0xfe4a,0xfe4d,0xfe4e,
-0xfe4b,0xfe4c,0xfe5f,0xfe60,0xfe61,0xff0b,0xff0d,0x00d7,
-0x00f7,0x00b1,0x221a,0xff1c,0xff1e,0xff1d,0x2266,0x2267,
-0x2260,0x221e,0x2252,0x2261,0xfe62,0xfe63,0xfe64,0xfe66,
-0xfe65,0x223c,0x2229,0x222a,0x22a5,0x2220,0x221f,0x22bf,
-0x33d2,0x33d1,0x222b,0x222e,0x2235,0x2234,0x2640,0x2642,
-0x2641,0x2609,0x2191,0x2193,0x2192,0x2190,0x2196,0x2197,
-0x2199,0x2198,0x2016,0xff5c,0xff0f,0xff3c,0x2215,0xfe68,
-0xff04,0xffe5,0x3012,0xffe0,0xffe1,0xff05,0xff20,0x2103,
-0x2109,0xfe69,0xfe6a,0xfe6b,0x33d5,0x339c,0x339d,0x339e,
-0x33ce,0x33a1,0x338e,0x338f,0x33c4,0x00b0,0x5159,0x515b,
-0x515e,0x515d,0x5161,0x5163,0x55e7,0x74e9,0x7cce,0x2581,
-0x2582,0x2583,0x2584,0x2585,0x2586,0x2587,0x2588,0x258f,
-0x258e,0x258d,0x258c,0x258b,0x258a,0x2589,0x253c,0x2534,
-0x252c,0x2524,0x251c,0x2594,0x2500,0x2502,0x2595,0x250c,
-0x2510,0x2514,0x2518,0x256d,0x256e,0x2570,0x256f,0x2550,
-0x255e,0x256a,0x2561,0x25e2,0x25e3,0x25e5,0x25e4,0x2571,
-0x2572,0x2573,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xff10,0xff11,0xff12,0xff13,0xff14,0xff15,
-0xff16,0xff17,0xff18,0xff19,0x2160,0x2161,0x2162,0x2163,
-0x2164,0x2165,0x2166,0x2167,0x2168,0x2169,0x3021,0x3022,
-0x3023,0x3024,0x3025,0x3026,0x3027,0x3028,0x3029,0x0000,
-0x5344,0x0000,0xff21,0xff22,0xff23,0xff24,0xff25,0xff26,
-0xff27,0xff28,0xff29,0xff2a,0xff2b,0xff2c,0xff2d,0xff2e,
-0xff2f,0xff30,0xff31,0xff32,0xff33,0xff34,0xff35,0xff36,
-0xff37,0xff38,0xff39,0xff3a,0xff41,0xff42,0xff43,0xff44,
-0xff45,0xff46,0xff47,0xff48,0xff49,0xff4a,0xff4b,0xff4c,
-0xff4d,0xff4e,0xff4f,0xff50,0xff51,0xff52,0xff53,0xff54,
-0xff55,0xff56,0xff57,0xff58,0xff59,0xff5a,0x0391,0x0392,
-0x0393,0x0394,0x0395,0x0396,0x0397,0x0398,0x0399,0x039a,
-0x039b,0x039c,0x039d,0x039e,0x039f,0x03a0,0x03a1,0x03a3,
-0x03a4,0x03a5,0x03a6,0x03a7,0x03a8,0x03a9,0x03b1,0x03b2,
-0x03b3,0x03b4,0x03b5,0x03b6,0x03b7,0x03b8,0x03b9,0x03ba,
-0x03bb,0x03bc,0x03bd,0x03be,0x03bf,0x03c0,0x03c1,0x03c3,
-0x03c4,0x03c5,0x03c6,0x03c7,0x03c8,0x03c9,0x3105,0x3106,
-0x3107,0x3108,0x3109,0x310a,0x310b,0x310c,0x310d,0x310e,
-0x310f,0x3110,0x3111,0x3112,0x3113,0x3114,0x3115,0x3116,
-0x3117,0x3118,0x3119,0x311a,0x311b,0x311c,0x311d,0x311e,
-0x311f,0x3120,0x3121,0x3122,0x3123,0x3124,0x3125,0x3126,
-0x3127,0x3128,0x3129,0x02d9,0x02c9,0x02ca,0x02c7,0x02cb,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x2460,0x2461,
-0x2462,0x2463,0x2464,0x2465,0x2466,0x2467,0x2468,0x2469,
-0x2474,0x2475,0x2476,0x2477,0x2478,0x2479,0x247a,0x247b,
-0x247c,0x247d,0x2170,0x2171,0x2172,0x2173,0x2174,0x2175,
-0x2176,0x2177,0x2178,0x2179,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x2400,0x2401,
-0x2402,0x2403,0x2404,0x2405,0x2406,0x2407,0x2408,0x2409,
-0x240a,0x240b,0x240c,0x240d,0x240e,0x240f,0x2410,0x2411,
-0x2412,0x2413,0x2414,0x2415,0x2416,0x2417,0x2418,0x2419,
-0x241a,0x241b,0x241c,0x241d,0x241e,0x241f,0x2421,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x4e00,0x4e59,0x4e01,0x4e03,0x4e43,0x4e5d,
-0x4e86,0x4e8c,0x4eba,0x513f,0x5165,0x516b,0x51e0,0x5200,
-0x5201,0x529b,0x5315,0x5341,0x535c,0x53c8,0x4e09,0x4e0b,
-0x4e08,0x4e0a,0x4e2b,0x4e38,0x51e1,0x4e45,0x4e48,0x4e5f,
-0x4e5e,0x4e8e,0x4ea1,0x5140,0x5203,0x52fa,0x5343,0x53c9,
-0x53e3,0x571f,0x58eb,0x5915,0x5927,0x5973,0x5b50,0x5b51,
-0x5b53,0x5bf8,0x5c0f,0x5c22,0x5c38,0x5c71,0x5ddd,0x5de5,
-0x5df1,0x5df2,0x5df3,0x5dfe,0x5e72,0x5efe,0x5f0b,0x5f13,
-0x624d,0x4e11,0x4e10,0x4e0d,0x4e2d,0x4e30,0x4e39,0x4e4b,
-0x5c39,0x4e88,0x4e91,0x4e95,0x4e92,0x4e94,0x4ea2,0x4ec1,
-0x4ec0,0x4ec3,0x4ec6,0x4ec7,0x4ecd,0x4eca,0x4ecb,0x4ec4,
-0x5143,0x5141,0x5167,0x516d,0x516e,0x516c,0x5197,0x51f6,
-0x5206,0x5207,0x5208,0x52fb,0x52fe,0x52ff,0x5316,0x5339,
-0x5348,0x5347,0x5345,0x535e,0x5384,0x53cb,0x53ca,0x53cd,
-0x58ec,0x5929,0x592b,0x592a,0x592d,0x5b54,0x5c11,0x5c24,
-0x5c3a,0x5c6f,0x5df4,0x5e7b,0x5eff,0x5f14,0x5f15,0x5fc3,
-0x6208,0x6236,0x624b,0x624e,0x652f,0x6587,0x6597,0x65a4,
-0x65b9,0x65e5,0x66f0,0x6708,0x6728,0x6b20,0x6b62,0x6b79,
-0x6bcb,0x6bd4,0x6bdb,0x6c0f,0x6c34,0x706b,0x722a,0x7236,
-0x723b,0x7247,0x7259,0x725b,0x72ac,0x738b,0x4e19,0x4e16,
-0x4e15,0x4e14,0x4e18,0x4e3b,0x4e4d,0x4e4f,0x4e4e,0x4ee5,
-0x4ed8,0x4ed4,0x4ed5,0x4ed6,0x4ed7,0x4ee3,0x4ee4,0x4ed9,
-0x4ede,0x5145,0x5144,0x5189,0x518a,0x51ac,0x51f9,0x51fa,
-0x51f8,0x520a,0x52a0,0x529f,0x5305,0x5306,0x5317,0x531d,
-0x4edf,0x534a,0x5349,0x5361,0x5360,0x536f,0x536e,0x53bb,
-0x53ef,0x53e4,0x53f3,0x53ec,0x53ee,0x53e9,0x53e8,0x53fc,
-0x53f8,0x53f5,0x53eb,0x53e6,0x53ea,0x53f2,0x53f1,0x53f0,
-0x53e5,0x53ed,0x53fb,0x56db,0x56da,0x5916,0x592e,0x5931,
-0x5974,0x5976,0x5b55,0x5b83,0x5c3c,0x5de8,0x5de7,0x5de6,
-0x5e02,0x5e03,0x5e73,0x5e7c,0x5f01,0x5f18,0x5f17,0x5fc5,
-0x620a,0x6253,0x6254,0x6252,0x6251,0x65a5,0x65e6,0x672e,
-0x672c,0x672a,0x672b,0x672d,0x6b63,0x6bcd,0x6c11,0x6c10,
-0x6c38,0x6c41,0x6c40,0x6c3e,0x72af,0x7384,0x7389,0x74dc,
-0x74e6,0x7518,0x751f,0x7528,0x7529,0x7530,0x7531,0x7532,
-0x7533,0x758b,0x767d,0x76ae,0x76bf,0x76ee,0x77db,0x77e2,
-0x77f3,0x793a,0x79be,0x7a74,0x7acb,0x4e1e,0x4e1f,0x4e52,
-0x4e53,0x4e69,0x4e99,0x4ea4,0x4ea6,0x4ea5,0x4eff,0x4f09,
-0x4f19,0x4f0a,0x4f15,0x4f0d,0x4f10,0x4f11,0x4f0f,0x4ef2,
-0x4ef6,0x4efb,0x4ef0,0x4ef3,0x4efd,0x4f01,0x4f0b,0x5149,
-0x5147,0x5146,0x5148,0x5168,0x5171,0x518d,0x51b0,0x5217,
-0x5211,0x5212,0x520e,0x5216,0x52a3,0x5308,0x5321,0x5320,
-0x5370,0x5371,0x5409,0x540f,0x540c,0x540a,0x5410,0x5401,
-0x540b,0x5404,0x5411,0x540d,0x5408,0x5403,0x540e,0x5406,
-0x5412,0x56e0,0x56de,0x56dd,0x5733,0x5730,0x5728,0x572d,
-0x572c,0x572f,0x5729,0x5919,0x591a,0x5937,0x5938,0x5984,
-0x5978,0x5983,0x597d,0x5979,0x5982,0x5981,0x5b57,0x5b58,
-0x5b87,0x5b88,0x5b85,0x5b89,0x5bfa,0x5c16,0x5c79,0x5dde,
-0x5e06,0x5e76,0x5e74,0x5f0f,0x5f1b,0x5fd9,0x5fd6,0x620e,
-0x620c,0x620d,0x6210,0x6263,0x625b,0x6258,0x6536,0x65e9,
-0x65e8,0x65ec,0x65ed,0x66f2,0x66f3,0x6709,0x673d,0x6734,
-0x6731,0x6735,0x6b21,0x6b64,0x6b7b,0x6c16,0x6c5d,0x6c57,
-0x6c59,0x6c5f,0x6c60,0x6c50,0x6c55,0x6c61,0x6c5b,0x6c4d,
-0x6c4e,0x7070,0x725f,0x725d,0x767e,0x7af9,0x7c73,0x7cf8,
-0x7f36,0x7f8a,0x7fbd,0x8001,0x8003,0x800c,0x8012,0x8033,
-0x807f,0x8089,0x808b,0x808c,0x81e3,0x81ea,0x81f3,0x81fc,
-0x820c,0x821b,0x821f,0x826e,0x8272,0x827e,0x866b,0x8840,
-0x884c,0x8863,0x897f,0x9621,0x4e32,0x4ea8,0x4f4d,0x4f4f,
-0x4f47,0x4f57,0x4f5e,0x4f34,0x4f5b,0x4f55,0x4f30,0x4f50,
-0x4f51,0x4f3d,0x4f3a,0x4f38,0x4f43,0x4f54,0x4f3c,0x4f46,
-0x4f63,0x4f5c,0x4f60,0x4f2f,0x4f4e,0x4f36,0x4f59,0x4f5d,
-0x4f48,0x4f5a,0x514c,0x514b,0x514d,0x5175,0x51b6,0x51b7,
-0x5225,0x5224,0x5229,0x522a,0x5228,0x52ab,0x52a9,0x52aa,
-0x52ac,0x5323,0x5373,0x5375,0x541d,0x542d,0x541e,0x543e,
-0x5426,0x544e,0x5427,0x5446,0x5443,0x5433,0x5448,0x5442,
-0x541b,0x5429,0x544a,0x5439,0x543b,0x5438,0x542e,0x5435,
-0x5436,0x5420,0x543c,0x5440,0x5431,0x542b,0x541f,0x542c,
-0x56ea,0x56f0,0x56e4,0x56eb,0x574a,0x5751,0x5740,0x574d,
-0x5747,0x574e,0x573e,0x5750,0x574f,0x573b,0x58ef,0x593e,
-0x599d,0x5992,0x59a8,0x599e,0x59a3,0x5999,0x5996,0x598d,
-0x59a4,0x5993,0x598a,0x59a5,0x5b5d,0x5b5c,0x5b5a,0x5b5b,
-0x5b8c,0x5b8b,0x5b8f,0x5c2c,0x5c40,0x5c41,0x5c3f,0x5c3e,
-0x5c90,0x5c91,0x5c94,0x5c8c,0x5deb,0x5e0c,0x5e8f,0x5e87,
-0x5e8a,0x5ef7,0x5f04,0x5f1f,0x5f64,0x5f62,0x5f77,0x5f79,
-0x5fd8,0x5fcc,0x5fd7,0x5fcd,0x5ff1,0x5feb,0x5ff8,0x5fea,
-0x6212,0x6211,0x6284,0x6297,0x6296,0x6280,0x6276,0x6289,
-0x626d,0x628a,0x627c,0x627e,0x6279,0x6273,0x6292,0x626f,
-0x6298,0x626e,0x6295,0x6293,0x6291,0x6286,0x6539,0x653b,
-0x6538,0x65f1,0x66f4,0x675f,0x674e,0x674f,0x6750,0x6751,
-0x675c,0x6756,0x675e,0x6749,0x6746,0x6760,0x6753,0x6757,
-0x6b65,0x6bcf,0x6c42,0x6c5e,0x6c99,0x6c81,0x6c88,0x6c89,
-0x6c85,0x6c9b,0x6c6a,0x6c7a,0x6c90,0x6c70,0x6c8c,0x6c68,
-0x6c96,0x6c92,0x6c7d,0x6c83,0x6c72,0x6c7e,0x6c74,0x6c86,
-0x6c76,0x6c8d,0x6c94,0x6c98,0x6c82,0x7076,0x707c,0x707d,
-0x7078,0x7262,0x7261,0x7260,0x72c4,0x72c2,0x7396,0x752c,
-0x752b,0x7537,0x7538,0x7682,0x76ef,0x77e3,0x79c1,0x79c0,
-0x79bf,0x7a76,0x7cfb,0x7f55,0x8096,0x8093,0x809d,0x8098,
-0x809b,0x809a,0x80b2,0x826f,0x8292,0x828b,0x828d,0x898b,
-0x89d2,0x8a00,0x8c37,0x8c46,0x8c55,0x8c9d,0x8d64,0x8d70,
-0x8db3,0x8eab,0x8eca,0x8f9b,0x8fb0,0x8fc2,0x8fc6,0x8fc5,
-0x8fc4,0x5de1,0x9091,0x90a2,0x90aa,0x90a6,0x90a3,0x9149,
-0x91c6,0x91cc,0x9632,0x962e,0x9631,0x962a,0x962c,0x4e26,
-0x4e56,0x4e73,0x4e8b,0x4e9b,0x4e9e,0x4eab,0x4eac,0x4f6f,
-0x4f9d,0x4f8d,0x4f73,0x4f7f,0x4f6c,0x4f9b,0x4f8b,0x4f86,
-0x4f83,0x4f70,0x4f75,0x4f88,0x4f69,0x4f7b,0x4f96,0x4f7e,
-0x4f8f,0x4f91,0x4f7a,0x5154,0x5152,0x5155,0x5169,0x5177,
-0x5176,0x5178,0x51bd,0x51fd,0x523b,0x5238,0x5237,0x523a,
-0x5230,0x522e,0x5236,0x5241,0x52be,0x52bb,0x5352,0x5354,
-0x5353,0x5351,0x5366,0x5377,0x5378,0x5379,0x53d6,0x53d4,
-0x53d7,0x5473,0x5475,0x5496,0x5478,0x5495,0x5480,0x547b,
-0x5477,0x5484,0x5492,0x5486,0x547c,0x5490,0x5471,0x5476,
-0x548c,0x549a,0x5462,0x5468,0x548b,0x547d,0x548e,0x56fa,
-0x5783,0x5777,0x576a,0x5769,0x5761,0x5766,0x5764,0x577c,
-0x591c,0x5949,0x5947,0x5948,0x5944,0x5954,0x59be,0x59bb,
-0x59d4,0x59b9,0x59ae,0x59d1,0x59c6,0x59d0,0x59cd,0x59cb,
-0x59d3,0x59ca,0x59af,0x59b3,0x59d2,0x59c5,0x5b5f,0x5b64,
-0x5b63,0x5b97,0x5b9a,0x5b98,0x5b9c,0x5b99,0x5b9b,0x5c1a,
-0x5c48,0x5c45,0x5c46,0x5cb7,0x5ca1,0x5cb8,0x5ca9,0x5cab,
-0x5cb1,0x5cb3,0x5e18,0x5e1a,0x5e16,0x5e15,0x5e1b,0x5e11,
-0x5e78,0x5e9a,0x5e97,0x5e9c,0x5e95,0x5e96,0x5ef6,0x5f26,
-0x5f27,0x5f29,0x5f80,0x5f81,0x5f7f,0x5f7c,0x5fdd,0x5fe0,
-0x5ffd,0x5ff5,0x5fff,0x600f,0x6014,0x602f,0x6035,0x6016,
-0x602a,0x6015,0x6021,0x6027,0x6029,0x602b,0x601b,0x6216,
-0x6215,0x623f,0x623e,0x6240,0x627f,0x62c9,0x62cc,0x62c4,
-0x62bf,0x62c2,0x62b9,0x62d2,0x62db,0x62ab,0x62d3,0x62d4,
-0x62cb,0x62c8,0x62a8,0x62bd,0x62bc,0x62d0,0x62d9,0x62c7,
-0x62cd,0x62b5,0x62da,0x62b1,0x62d8,0x62d6,0x62d7,0x62c6,
-0x62ac,0x62ce,0x653e,0x65a7,0x65bc,0x65fa,0x6614,0x6613,
-0x660c,0x6606,0x6602,0x660e,0x6600,0x660f,0x6615,0x660a,
-0x6607,0x670d,0x670b,0x676d,0x678b,0x6795,0x6771,0x679c,
-0x6773,0x6777,0x6787,0x679d,0x6797,0x676f,0x6770,0x677f,
-0x6789,0x677e,0x6790,0x6775,0x679a,0x6793,0x677c,0x676a,
-0x6772,0x6b23,0x6b66,0x6b67,0x6b7f,0x6c13,0x6c1b,0x6ce3,
-0x6ce8,0x6cf3,0x6cb1,0x6ccc,0x6ce5,0x6cb3,0x6cbd,0x6cbe,
-0x6cbc,0x6ce2,0x6cab,0x6cd5,0x6cd3,0x6cb8,0x6cc4,0x6cb9,
-0x6cc1,0x6cae,0x6cd7,0x6cc5,0x6cf1,0x6cbf,0x6cbb,0x6ce1,
-0x6cdb,0x6cca,0x6cac,0x6cef,0x6cdc,0x6cd6,0x6ce0,0x7095,
-0x708e,0x7092,0x708a,0x7099,0x722c,0x722d,0x7238,0x7248,
-0x7267,0x7269,0x72c0,0x72ce,0x72d9,0x72d7,0x72d0,0x73a9,
-0x73a8,0x739f,0x73ab,0x73a5,0x753d,0x759d,0x7599,0x759a,
-0x7684,0x76c2,0x76f2,0x76f4,0x77e5,0x77fd,0x793e,0x7940,
-0x7941,0x79c9,0x79c8,0x7a7a,0x7a79,0x7afa,0x7cfe,0x7f54,
-0x7f8c,0x7f8b,0x8005,0x80ba,0x80a5,0x80a2,0x80b1,0x80a1,
-0x80ab,0x80a9,0x80b4,0x80aa,0x80af,0x81e5,0x81fe,0x820d,
-0x82b3,0x829d,0x8299,0x82ad,0x82bd,0x829f,0x82b9,0x82b1,
-0x82ac,0x82a5,0x82af,0x82b8,0x82a3,0x82b0,0x82be,0x82b7,
-0x864e,0x8671,0x521d,0x8868,0x8ecb,0x8fce,0x8fd4,0x8fd1,
-0x90b5,0x90b8,0x90b1,0x90b6,0x91c7,0x91d1,0x9577,0x9580,
-0x961c,0x9640,0x963f,0x963b,0x9644,0x9642,0x96b9,0x96e8,
-0x9752,0x975e,0x4e9f,0x4ead,0x4eae,0x4fe1,0x4fb5,0x4faf,
-0x4fbf,0x4fe0,0x4fd1,0x4fcf,0x4fdd,0x4fc3,0x4fb6,0x4fd8,
-0x4fdf,0x4fca,0x4fd7,0x4fae,0x4fd0,0x4fc4,0x4fc2,0x4fda,
-0x4fce,0x4fde,0x4fb7,0x5157,0x5192,0x5191,0x51a0,0x524e,
-0x5243,0x524a,0x524d,0x524c,0x524b,0x5247,0x52c7,0x52c9,
-0x52c3,0x52c1,0x530d,0x5357,0x537b,0x539a,0x53db,0x54ac,
-0x54c0,0x54a8,0x54ce,0x54c9,0x54b8,0x54a6,0x54b3,0x54c7,
-0x54c2,0x54bd,0x54aa,0x54c1,0x54c4,0x54c8,0x54af,0x54ab,
-0x54b1,0x54bb,0x54a9,0x54a7,0x54bf,0x56ff,0x5782,0x578b,
-0x57a0,0x57a3,0x57a2,0x57ce,0x57ae,0x5793,0x5955,0x5951,
-0x594f,0x594e,0x5950,0x59dc,0x59d8,0x59ff,0x59e3,0x59e8,
-0x5a03,0x59e5,0x59ea,0x59da,0x59e6,0x5a01,0x59fb,0x5b69,
-0x5ba3,0x5ba6,0x5ba4,0x5ba2,0x5ba5,0x5c01,0x5c4e,0x5c4f,
-0x5c4d,0x5c4b,0x5cd9,0x5cd2,0x5df7,0x5e1d,0x5e25,0x5e1f,
-0x5e7d,0x5ea0,0x5ea6,0x5efa,0x5f08,0x5f2d,0x5f65,0x5f88,
-0x5f85,0x5f8a,0x5f8b,0x5f87,0x5f8c,0x5f89,0x6012,0x601d,
-0x6020,0x6025,0x600e,0x6028,0x604d,0x6070,0x6068,0x6062,
-0x6046,0x6043,0x606c,0x606b,0x606a,0x6064,0x6241,0x62dc,
-0x6316,0x6309,0x62fc,0x62ed,0x6301,0x62ee,0x62fd,0x6307,
-0x62f1,0x62f7,0x62ef,0x62ec,0x62fe,0x62f4,0x6311,0x6302,
-0x653f,0x6545,0x65ab,0x65bd,0x65e2,0x6625,0x662d,0x6620,
-0x6627,0x662f,0x661f,0x6628,0x6631,0x6624,0x66f7,0x67ff,
-0x67d3,0x67f1,0x67d4,0x67d0,0x67ec,0x67b6,0x67af,0x67f5,
-0x67e9,0x67ef,0x67c4,0x67d1,0x67b4,0x67da,0x67e5,0x67b8,
-0x67cf,0x67de,0x67f3,0x67b0,0x67d9,0x67e2,0x67dd,0x67d2,
-0x6b6a,0x6b83,0x6b86,0x6bb5,0x6bd2,0x6bd7,0x6c1f,0x6cc9,
-0x6d0b,0x6d32,0x6d2a,0x6d41,0x6d25,0x6d0c,0x6d31,0x6d1e,
-0x6d17,0x6d3b,0x6d3d,0x6d3e,0x6d36,0x6d1b,0x6cf5,0x6d39,
-0x6d27,0x6d38,0x6d29,0x6d2e,0x6d35,0x6d0e,0x6d2b,0x70ab,
-0x70ba,0x70b3,0x70ac,0x70af,0x70ad,0x70b8,0x70ae,0x70a4,
-0x7230,0x7272,0x726f,0x7274,0x72e9,0x72e0,0x72e1,0x73b7,
-0x73ca,0x73bb,0x73b2,0x73cd,0x73c0,0x73b3,0x751a,0x752d,
-0x754f,0x754c,0x754e,0x754b,0x75ab,0x75a4,0x75a5,0x75a2,
-0x75a3,0x7678,0x7686,0x7687,0x7688,0x76c8,0x76c6,0x76c3,
-0x76c5,0x7701,0x76f9,0x76f8,0x7709,0x770b,0x76fe,0x76fc,
-0x7707,0x77dc,0x7802,0x7814,0x780c,0x780d,0x7946,0x7949,
-0x7948,0x7947,0x79b9,0x79ba,0x79d1,0x79d2,0x79cb,0x7a7f,
-0x7a81,0x7aff,0x7afd,0x7c7d,0x7d02,0x7d05,0x7d00,0x7d09,
-0x7d07,0x7d04,0x7d06,0x7f38,0x7f8e,0x7fbf,0x8010,0x800d,
-0x8011,0x8036,0x80d6,0x80e5,0x80da,0x80c3,0x80c4,0x80cc,
-0x80e1,0x80db,0x80ce,0x80de,0x80e4,0x80dd,0x81f4,0x8222,
-0x82e7,0x8303,0x8305,0x82e3,0x82db,0x82e6,0x8304,0x82e5,
-0x8302,0x8309,0x82d2,0x82d7,0x82f1,0x8301,0x82dc,0x82d4,
-0x82d1,0x82de,0x82d3,0x82df,0x82ef,0x8306,0x8650,0x8679,
-0x867b,0x867a,0x884d,0x886b,0x8981,0x89d4,0x8a08,0x8a02,
-0x8a03,0x8c9e,0x8ca0,0x8d74,0x8d73,0x8db4,0x8ecd,0x8ecc,
-0x8ff0,0x8fe6,0x8fe2,0x8fea,0x8fe5,0x8fed,0x8feb,0x8fe4,
-0x8fe8,0x90ca,0x90ce,0x90c1,0x90c3,0x914b,0x914a,0x91cd,
-0x9582,0x9650,0x964b,0x964c,0x964d,0x9762,0x9769,0x97cb,
-0x97ed,0x97f3,0x9801,0x98a8,0x98db,0x98df,0x9996,0x9999,
-0x4e58,0x4eb3,0x500c,0x500d,0x5023,0x4fef,0x5026,0x5025,
-0x4ff8,0x5029,0x5016,0x5006,0x503c,0x501f,0x501a,0x5012,
-0x5011,0x4ffa,0x5000,0x5014,0x5028,0x4ff1,0x5021,0x500b,
-0x5019,0x5018,0x4ff3,0x4fee,0x502d,0x502a,0x4ffe,0x502b,
-0x5009,0x517c,0x51a4,0x51a5,0x51a2,0x51cd,0x51cc,0x51c6,
-0x51cb,0x5256,0x525c,0x5254,0x525b,0x525d,0x532a,0x537f,
-0x539f,0x539d,0x53df,0x54e8,0x5510,0x5501,0x5537,0x54fc,
-0x54e5,0x54f2,0x5506,0x54fa,0x5514,0x54e9,0x54ed,0x54e1,
-0x5509,0x54ee,0x54ea,0x54e6,0x5527,0x5507,0x54fd,0x550f,
-0x5703,0x5704,0x57c2,0x57d4,0x57cb,0x57c3,0x5809,0x590f,
-0x5957,0x5958,0x595a,0x5a11,0x5a18,0x5a1c,0x5a1f,0x5a1b,
-0x5a13,0x59ec,0x5a20,0x5a23,0x5a29,0x5a25,0x5a0c,0x5a09,
-0x5b6b,0x5c58,0x5bb0,0x5bb3,0x5bb6,0x5bb4,0x5bae,0x5bb5,
-0x5bb9,0x5bb8,0x5c04,0x5c51,0x5c55,0x5c50,0x5ced,0x5cfd,
-0x5cfb,0x5cea,0x5ce8,0x5cf0,0x5cf6,0x5d01,0x5cf4,0x5dee,
-0x5e2d,0x5e2b,0x5eab,0x5ead,0x5ea7,0x5f31,0x5f92,0x5f91,
-0x5f90,0x6059,0x6063,0x6065,0x6050,0x6055,0x606d,0x6069,
-0x606f,0x6084,0x609f,0x609a,0x608d,0x6094,0x608c,0x6085,
-0x6096,0x6247,0x62f3,0x6308,0x62ff,0x634e,0x633e,0x632f,
-0x6355,0x6342,0x6346,0x634f,0x6349,0x633a,0x6350,0x633d,
-0x632a,0x632b,0x6328,0x634d,0x634c,0x6548,0x6549,0x6599,
-0x65c1,0x65c5,0x6642,0x6649,0x664f,0x6643,0x6652,0x664c,
-0x6645,0x6641,0x66f8,0x6714,0x6715,0x6717,0x6821,0x6838,
-0x6848,0x6846,0x6853,0x6839,0x6842,0x6854,0x6829,0x68b3,
-0x6817,0x684c,0x6851,0x683d,0x67f4,0x6850,0x6840,0x683c,
-0x6843,0x682a,0x6845,0x6813,0x6818,0x6841,0x6b8a,0x6b89,
-0x6bb7,0x6c23,0x6c27,0x6c28,0x6c26,0x6c24,0x6cf0,0x6d6a,
-0x6d95,0x6d88,0x6d87,0x6d66,0x6d78,0x6d77,0x6d59,0x6d93,
-0x6d6c,0x6d89,0x6d6e,0x6d5a,0x6d74,0x6d69,0x6d8c,0x6d8a,
-0x6d79,0x6d85,0x6d65,0x6d94,0x70ca,0x70d8,0x70e4,0x70d9,
-0x70c8,0x70cf,0x7239,0x7279,0x72fc,0x72f9,0x72fd,0x72f8,
-0x72f7,0x7386,0x73ed,0x7409,0x73ee,0x73e0,0x73ea,0x73de,
-0x7554,0x755d,0x755c,0x755a,0x7559,0x75be,0x75c5,0x75c7,
-0x75b2,0x75b3,0x75bd,0x75bc,0x75b9,0x75c2,0x75b8,0x768b,
-0x76b0,0x76ca,0x76cd,0x76ce,0x7729,0x771f,0x7720,0x7728,
-0x77e9,0x7830,0x7827,0x7838,0x781d,0x7834,0x7837,0x7825,
-0x782d,0x7820,0x781f,0x7832,0x7955,0x7950,0x7960,0x795f,
-0x7956,0x795e,0x795d,0x7957,0x795a,0x79e4,0x79e3,0x79e7,
-0x79df,0x79e6,0x79e9,0x79d8,0x7a84,0x7a88,0x7ad9,0x7b06,
-0x7b11,0x7c89,0x7d21,0x7d17,0x7d0b,0x7d0a,0x7d20,0x7d22,
-0x7d14,0x7d10,0x7d15,0x7d1a,0x7d1c,0x7d0d,0x7d19,0x7d1b,
-0x7f3a,0x7f5f,0x7f94,0x7fc5,0x7fc1,0x8006,0x8004,0x8018,
-0x8015,0x8019,0x8017,0x803d,0x803f,0x80f1,0x8102,0x80f0,
-0x8105,0x80ed,0x80f4,0x8106,0x80f8,0x80f3,0x8108,0x80fd,
-0x810a,0x80fc,0x80ef,0x81ed,0x81ec,0x8200,0x8210,0x822a,
-0x822b,0x8228,0x822c,0x82bb,0x832b,0x8352,0x8354,0x834a,
-0x8338,0x8350,0x8349,0x8335,0x8334,0x834f,0x8332,0x8339,
-0x8336,0x8317,0x8340,0x8331,0x8328,0x8343,0x8654,0x868a,
-0x86aa,0x8693,0x86a4,0x86a9,0x868c,0x86a3,0x869c,0x8870,
-0x8877,0x8881,0x8882,0x887d,0x8879,0x8a18,0x8a10,0x8a0e,
-0x8a0c,0x8a15,0x8a0a,0x8a17,0x8a13,0x8a16,0x8a0f,0x8a11,
-0x8c48,0x8c7a,0x8c79,0x8ca1,0x8ca2,0x8d77,0x8eac,0x8ed2,
-0x8ed4,0x8ecf,0x8fb1,0x9001,0x9006,0x8ff7,0x9000,0x8ffa,
-0x8ff4,0x9003,0x8ffd,0x9005,0x8ff8,0x9095,0x90e1,0x90dd,
-0x90e2,0x9152,0x914d,0x914c,0x91d8,0x91dd,0x91d7,0x91dc,
-0x91d9,0x9583,0x9662,0x9663,0x9661,0x965b,0x965d,0x9664,
-0x9658,0x965e,0x96bb,0x98e2,0x99ac,0x9aa8,0x9ad8,0x9b25,
-0x9b32,0x9b3c,0x4e7e,0x507a,0x507d,0x505c,0x5047,0x5043,
-0x504c,0x505a,0x5049,0x5065,0x5076,0x504e,0x5055,0x5075,
-0x5074,0x5077,0x504f,0x500f,0x506f,0x506d,0x515c,0x5195,
-0x51f0,0x526a,0x526f,0x52d2,0x52d9,0x52d8,0x52d5,0x5310,
-0x530f,0x5319,0x533f,0x5340,0x533e,0x53c3,0x66fc,0x5546,
-0x556a,0x5566,0x5544,0x555e,0x5561,0x5543,0x554a,0x5531,
-0x5556,0x554f,0x5555,0x552f,0x5564,0x5538,0x552e,0x555c,
-0x552c,0x5563,0x5533,0x5541,0x5557,0x5708,0x570b,0x5709,
-0x57df,0x5805,0x580a,0x5806,0x57e0,0x57e4,0x57fa,0x5802,
-0x5835,0x57f7,0x57f9,0x5920,0x5962,0x5a36,0x5a41,0x5a49,
-0x5a66,0x5a6a,0x5a40,0x5a3c,0x5a62,0x5a5a,0x5a46,0x5a4a,
-0x5b70,0x5bc7,0x5bc5,0x5bc4,0x5bc2,0x5bbf,0x5bc6,0x5c09,
-0x5c08,0x5c07,0x5c60,0x5c5c,0x5c5d,0x5d07,0x5d06,0x5d0e,
-0x5d1b,0x5d16,0x5d22,0x5d11,0x5d29,0x5d14,0x5d19,0x5d24,
-0x5d27,0x5d17,0x5de2,0x5e38,0x5e36,0x5e33,0x5e37,0x5eb7,
-0x5eb8,0x5eb6,0x5eb5,0x5ebe,0x5f35,0x5f37,0x5f57,0x5f6c,
-0x5f69,0x5f6b,0x5f97,0x5f99,0x5f9e,0x5f98,0x5fa1,0x5fa0,
-0x5f9c,0x607f,0x60a3,0x6089,0x60a0,0x60a8,0x60cb,0x60b4,
-0x60e6,0x60bd,0x60c5,0x60bb,0x60b5,0x60dc,0x60bc,0x60d8,
-0x60d5,0x60c6,0x60df,0x60b8,0x60da,0x60c7,0x621a,0x621b,
-0x6248,0x63a0,0x63a7,0x6372,0x6396,0x63a2,0x63a5,0x6377,
-0x6367,0x6398,0x63aa,0x6371,0x63a9,0x6389,0x6383,0x639b,
-0x636b,0x63a8,0x6384,0x6388,0x6399,0x63a1,0x63ac,0x6392,
-0x638f,0x6380,0x637b,0x6369,0x6368,0x637a,0x655d,0x6556,
-0x6551,0x6559,0x6557,0x555f,0x654f,0x6558,0x6555,0x6554,
-0x659c,0x659b,0x65ac,0x65cf,0x65cb,0x65cc,0x65ce,0x665d,
-0x665a,0x6664,0x6668,0x6666,0x665e,0x66f9,0x52d7,0x671b,
-0x6881,0x68af,0x68a2,0x6893,0x68b5,0x687f,0x6876,0x68b1,
-0x68a7,0x6897,0x68b0,0x6883,0x68c4,0x68ad,0x6886,0x6885,
-0x6894,0x689d,0x68a8,0x689f,0x68a1,0x6882,0x6b32,0x6bba,
-0x6beb,0x6bec,0x6c2b,0x6d8e,0x6dbc,0x6df3,0x6dd9,0x6db2,
-0x6de1,0x6dcc,0x6de4,0x6dfb,0x6dfa,0x6e05,0x6dc7,0x6dcb,
-0x6daf,0x6dd1,0x6dae,0x6dde,0x6df9,0x6db8,0x6df7,0x6df5,
-0x6dc5,0x6dd2,0x6e1a,0x6db5,0x6dda,0x6deb,0x6dd8,0x6dea,
-0x6df1,0x6dee,0x6de8,0x6dc6,0x6dc4,0x6daa,0x6dec,0x6dbf,
-0x6de6,0x70f9,0x7109,0x710a,0x70fd,0x70ef,0x723d,0x727d,
-0x7281,0x731c,0x731b,0x7316,0x7313,0x7319,0x7387,0x7405,
-0x740a,0x7403,0x7406,0x73fe,0x740d,0x74e0,0x74f6,0x74f7,
-0x751c,0x7522,0x7565,0x7566,0x7562,0x7570,0x758f,0x75d4,
-0x75d5,0x75b5,0x75ca,0x75cd,0x768e,0x76d4,0x76d2,0x76db,
-0x7737,0x773e,0x773c,0x7736,0x7738,0x773a,0x786b,0x7843,
-0x784e,0x7965,0x7968,0x796d,0x79fb,0x7a92,0x7a95,0x7b20,
-0x7b28,0x7b1b,0x7b2c,0x7b26,0x7b19,0x7b1e,0x7b2e,0x7c92,
-0x7c97,0x7c95,0x7d46,0x7d43,0x7d71,0x7d2e,0x7d39,0x7d3c,
-0x7d40,0x7d30,0x7d33,0x7d44,0x7d2f,0x7d42,0x7d32,0x7d31,
-0x7f3d,0x7f9e,0x7f9a,0x7fcc,0x7fce,0x7fd2,0x801c,0x804a,
-0x8046,0x812f,0x8116,0x8123,0x812b,0x8129,0x8130,0x8124,
-0x8202,0x8235,0x8237,0x8236,0x8239,0x838e,0x839e,0x8398,
-0x8378,0x83a2,0x8396,0x83bd,0x83ab,0x8392,0x838a,0x8393,
-0x8389,0x83a0,0x8377,0x837b,0x837c,0x8386,0x83a7,0x8655,
-0x5f6a,0x86c7,0x86c0,0x86b6,0x86c4,0x86b5,0x86c6,0x86cb,
-0x86b1,0x86af,0x86c9,0x8853,0x889e,0x8888,0x88ab,0x8892,
-0x8896,0x888d,0x888b,0x8993,0x898f,0x8a2a,0x8a1d,0x8a23,
-0x8a25,0x8a31,0x8a2d,0x8a1f,0x8a1b,0x8a22,0x8c49,0x8c5a,
-0x8ca9,0x8cac,0x8cab,0x8ca8,0x8caa,0x8ca7,0x8d67,0x8d66,
-0x8dbe,0x8dba,0x8edb,0x8edf,0x9019,0x900d,0x901a,0x9017,
-0x9023,0x901f,0x901d,0x9010,0x9015,0x901e,0x9020,0x900f,
-0x9022,0x9016,0x901b,0x9014,0x90e8,0x90ed,0x90fd,0x9157,
-0x91ce,0x91f5,0x91e6,0x91e3,0x91e7,0x91ed,0x91e9,0x9589,
-0x966a,0x9675,0x9673,0x9678,0x9670,0x9674,0x9676,0x9677,
-0x966c,0x96c0,0x96ea,0x96e9,0x7ae0,0x7adf,0x9802,0x9803,
-0x9b5a,0x9ce5,0x9e75,0x9e7f,0x9ea5,0x9ebb,0x50a2,0x508d,
-0x5085,0x5099,0x5091,0x5080,0x5096,0x5098,0x509a,0x6700,
-0x51f1,0x5272,0x5274,0x5275,0x5269,0x52de,0x52dd,0x52db,
-0x535a,0x53a5,0x557b,0x5580,0x55a7,0x557c,0x558a,0x559d,
-0x5598,0x5582,0x559c,0x55aa,0x5594,0x5587,0x558b,0x5583,
-0x55b3,0x55ae,0x559f,0x553e,0x55b2,0x559a,0x55bb,0x55ac,
-0x55b1,0x557e,0x5589,0x55ab,0x5599,0x570d,0x582f,0x582a,
-0x5834,0x5824,0x5830,0x5831,0x5821,0x581d,0x5820,0x58f9,
-0x58fa,0x5960,0x5a77,0x5a9a,0x5a7f,0x5a92,0x5a9b,0x5aa7,
-0x5b73,0x5b71,0x5bd2,0x5bcc,0x5bd3,0x5bd0,0x5c0a,0x5c0b,
-0x5c31,0x5d4c,0x5d50,0x5d34,0x5d47,0x5dfd,0x5e45,0x5e3d,
-0x5e40,0x5e43,0x5e7e,0x5eca,0x5ec1,0x5ec2,0x5ec4,0x5f3c,
-0x5f6d,0x5fa9,0x5faa,0x5fa8,0x60d1,0x60e1,0x60b2,0x60b6,
-0x60e0,0x611c,0x6123,0x60fa,0x6115,0x60f0,0x60fb,0x60f4,
-0x6168,0x60f1,0x610e,0x60f6,0x6109,0x6100,0x6112,0x621f,
-0x6249,0x63a3,0x638c,0x63cf,0x63c0,0x63e9,0x63c9,0x63c6,
-0x63cd,0x63d2,0x63e3,0x63d0,0x63e1,0x63d6,0x63ed,0x63ee,
-0x6376,0x63f4,0x63ea,0x63db,0x6452,0x63da,0x63f9,0x655e,
-0x6566,0x6562,0x6563,0x6591,0x6590,0x65af,0x666e,0x6670,
-0x6674,0x6676,0x666f,0x6691,0x667a,0x667e,0x6677,0x66fe,
-0x66ff,0x671f,0x671d,0x68fa,0x68d5,0x68e0,0x68d8,0x68d7,
-0x6905,0x68df,0x68f5,0x68ee,0x68e7,0x68f9,0x68d2,0x68f2,
-0x68e3,0x68cb,0x68cd,0x690d,0x6912,0x690e,0x68c9,0x68da,
-0x696e,0x68fb,0x6b3e,0x6b3a,0x6b3d,0x6b98,0x6b96,0x6bbc,
-0x6bef,0x6c2e,0x6c2f,0x6c2c,0x6e2f,0x6e38,0x6e54,0x6e21,
-0x6e32,0x6e67,0x6e4a,0x6e20,0x6e25,0x6e23,0x6e1b,0x6e5b,
-0x6e58,0x6e24,0x6e56,0x6e6e,0x6e2d,0x6e26,0x6e6f,0x6e34,
-0x6e4d,0x6e3a,0x6e2c,0x6e43,0x6e1d,0x6e3e,0x6ecb,0x6e89,
-0x6e19,0x6e4e,0x6e63,0x6e44,0x6e72,0x6e69,0x6e5f,0x7119,
-0x711a,0x7126,0x7130,0x7121,0x7136,0x716e,0x711c,0x724c,
-0x7284,0x7280,0x7336,0x7325,0x7334,0x7329,0x743a,0x742a,
-0x7433,0x7422,0x7425,0x7435,0x7436,0x7434,0x742f,0x741b,
-0x7426,0x7428,0x7525,0x7526,0x756b,0x756a,0x75e2,0x75db,
-0x75e3,0x75d9,0x75d8,0x75de,0x75e0,0x767b,0x767c,0x7696,
-0x7693,0x76b4,0x76dc,0x774f,0x77ed,0x785d,0x786c,0x786f,
-0x7a0d,0x7a08,0x7a0b,0x7a05,0x7a00,0x7a98,0x7a97,0x7a96,
-0x7ae5,0x7ae3,0x7b49,0x7b56,0x7b46,0x7b50,0x7b52,0x7b54,
-0x7b4d,0x7b4b,0x7b4f,0x7b51,0x7c9f,0x7ca5,0x7d5e,0x7d50,
-0x7d68,0x7d55,0x7d2b,0x7d6e,0x7d72,0x7d61,0x7d66,0x7d62,
-0x7d70,0x7d73,0x5584,0x7fd4,0x7fd5,0x800b,0x8052,0x8085,
-0x8155,0x8154,0x814b,0x8151,0x814e,0x8139,0x8146,0x813e,
-0x814c,0x8153,0x8174,0x8212,0x821c,0x83e9,0x8403,0x83f8,
-0x840d,0x83e0,0x83c5,0x840b,0x83c1,0x83ef,0x83f1,0x83f4,
-0x8457,0x840a,0x83f0,0x840c,0x83cc,0x83fd,0x83f2,0x83ca,
-0x8438,0x840e,0x8404,0x83dc,0x8407,0x83d4,0x83df,0x865b,
-0x86df,0x86d9,0x86ed,0x86d4,0x86db,0x86e4,0x86d0,0x86de,
-0x8857,0x88c1,0x88c2,0x88b1,0x8983,0x8996,0x8a3b,0x8a60,
-0x8a55,0x8a5e,0x8a3c,0x8a41,0x8a54,0x8a5b,0x8a50,0x8a46,
-0x8a34,0x8a3a,0x8a36,0x8a56,0x8c61,0x8c82,0x8caf,0x8cbc,
-0x8cb3,0x8cbd,0x8cc1,0x8cbb,0x8cc0,0x8cb4,0x8cb7,0x8cb6,
-0x8cbf,0x8cb8,0x8d8a,0x8d85,0x8d81,0x8dce,0x8ddd,0x8dcb,
-0x8dda,0x8dd1,0x8dcc,0x8ddb,0x8dc6,0x8efb,0x8ef8,0x8efc,
-0x8f9c,0x902e,0x9035,0x9031,0x9038,0x9032,0x9036,0x9102,
-0x90f5,0x9109,0x90fe,0x9163,0x9165,0x91cf,0x9214,0x9215,
-0x9223,0x9209,0x921e,0x920d,0x9210,0x9207,0x9211,0x9594,
-0x958f,0x958b,0x9591,0x9593,0x9592,0x958e,0x968a,0x968e,
-0x968b,0x967d,0x9685,0x9686,0x968d,0x9672,0x9684,0x96c1,
-0x96c5,0x96c4,0x96c6,0x96c7,0x96ef,0x96f2,0x97cc,0x9805,
-0x9806,0x9808,0x98e7,0x98ea,0x98ef,0x98e9,0x98f2,0x98ed,
-0x99ae,0x99ad,0x9ec3,0x9ecd,0x9ed1,0x4e82,0x50ad,0x50b5,
-0x50b2,0x50b3,0x50c5,0x50be,0x50ac,0x50b7,0x50bb,0x50af,
-0x50c7,0x527f,0x5277,0x527d,0x52df,0x52e6,0x52e4,0x52e2,
-0x52e3,0x532f,0x55df,0x55e8,0x55d3,0x55e6,0x55ce,0x55dc,
-0x55c7,0x55d1,0x55e3,0x55e4,0x55ef,0x55da,0x55e1,0x55c5,
-0x55c6,0x55e5,0x55c9,0x5712,0x5713,0x585e,0x5851,0x5858,
-0x5857,0x585a,0x5854,0x586b,0x584c,0x586d,0x584a,0x5862,
-0x5852,0x584b,0x5967,0x5ac1,0x5ac9,0x5acc,0x5abe,0x5abd,
-0x5abc,0x5ab3,0x5ac2,0x5ab2,0x5d69,0x5d6f,0x5e4c,0x5e79,
-0x5ec9,0x5ec8,0x5f12,0x5f59,0x5fac,0x5fae,0x611a,0x610f,
-0x6148,0x611f,0x60f3,0x611b,0x60f9,0x6101,0x6108,0x614e,
-0x614c,0x6144,0x614d,0x613e,0x6134,0x6127,0x610d,0x6106,
-0x6137,0x6221,0x6222,0x6413,0x643e,0x641e,0x642a,0x642d,
-0x643d,0x642c,0x640f,0x641c,0x6414,0x640d,0x6436,0x6416,
-0x6417,0x6406,0x656c,0x659f,0x65b0,0x6697,0x6689,0x6687,
-0x6688,0x6696,0x6684,0x6698,0x668d,0x6703,0x6994,0x696d,
-0x695a,0x6977,0x6960,0x6954,0x6975,0x6930,0x6982,0x694a,
-0x6968,0x696b,0x695e,0x6953,0x6979,0x6986,0x695d,0x6963,
-0x695b,0x6b47,0x6b72,0x6bc0,0x6bbf,0x6bd3,0x6bfd,0x6ea2,
-0x6eaf,0x6ed3,0x6eb6,0x6ec2,0x6e90,0x6e9d,0x6ec7,0x6ec5,
-0x6ea5,0x6e98,0x6ebc,0x6eba,0x6eab,0x6ed1,0x6e96,0x6e9c,
-0x6ec4,0x6ed4,0x6eaa,0x6ea7,0x6eb4,0x714e,0x7159,0x7169,
-0x7164,0x7149,0x7167,0x715c,0x716c,0x7166,0x714c,0x7165,
-0x715e,0x7146,0x7168,0x7156,0x723a,0x7252,0x7337,0x7345,
-0x733f,0x733e,0x746f,0x745a,0x7455,0x745f,0x745e,0x7441,
-0x743f,0x7459,0x745b,0x745c,0x7576,0x7578,0x7600,0x75f0,
-0x7601,0x75f2,0x75f1,0x75fa,0x75ff,0x75f4,0x75f3,0x76de,
-0x76df,0x775b,0x776b,0x7766,0x775e,0x7763,0x7779,0x776a,
-0x776c,0x775c,0x7765,0x7768,0x7762,0x77ee,0x788e,0x78b0,
-0x7897,0x7898,0x788c,0x7889,0x787c,0x7891,0x7893,0x787f,
-0x797a,0x797f,0x7981,0x842c,0x79bd,0x7a1c,0x7a1a,0x7a20,
-0x7a14,0x7a1f,0x7a1e,0x7a9f,0x7aa0,0x7b77,0x7bc0,0x7b60,
-0x7b6e,0x7b67,0x7cb1,0x7cb3,0x7cb5,0x7d93,0x7d79,0x7d91,
-0x7d81,0x7d8f,0x7d5b,0x7f6e,0x7f69,0x7f6a,0x7f72,0x7fa9,
-0x7fa8,0x7fa4,0x8056,0x8058,0x8086,0x8084,0x8171,0x8170,
-0x8178,0x8165,0x816e,0x8173,0x816b,0x8179,0x817a,0x8166,
-0x8205,0x8247,0x8482,0x8477,0x843d,0x8431,0x8475,0x8466,
-0x846b,0x8449,0x846c,0x845b,0x843c,0x8435,0x8461,0x8463,
-0x8469,0x846d,0x8446,0x865e,0x865c,0x865f,0x86f9,0x8713,
-0x8708,0x8707,0x8700,0x86fe,0x86fb,0x8702,0x8703,0x8706,
-0x870a,0x8859,0x88df,0x88d4,0x88d9,0x88dc,0x88d8,0x88dd,
-0x88e1,0x88ca,0x88d5,0x88d2,0x899c,0x89e3,0x8a6b,0x8a72,
-0x8a73,0x8a66,0x8a69,0x8a70,0x8a87,0x8a7c,0x8a63,0x8aa0,
-0x8a71,0x8a85,0x8a6d,0x8a62,0x8a6e,0x8a6c,0x8a79,0x8a7b,
-0x8a3e,0x8a68,0x8c62,0x8c8a,0x8c89,0x8cca,0x8cc7,0x8cc8,
-0x8cc4,0x8cb2,0x8cc3,0x8cc2,0x8cc5,0x8de1,0x8ddf,0x8de8,
-0x8def,0x8df3,0x8dfa,0x8dea,0x8de4,0x8de6,0x8eb2,0x8f03,
-0x8f09,0x8efe,0x8f0a,0x8f9f,0x8fb2,0x904b,0x904a,0x9053,
-0x9042,0x9054,0x903c,0x9055,0x9050,0x9047,0x904f,0x904e,
-0x904d,0x9051,0x903e,0x9041,0x9112,0x9117,0x916c,0x916a,
-0x9169,0x91c9,0x9237,0x9257,0x9238,0x923d,0x9240,0x923e,
-0x925b,0x924b,0x9264,0x9251,0x9234,0x9249,0x924d,0x9245,
-0x9239,0x923f,0x925a,0x9598,0x9698,0x9694,0x9695,0x96cd,
-0x96cb,0x96c9,0x96ca,0x96f7,0x96fb,0x96f9,0x96f6,0x9756,
-0x9774,0x9776,0x9810,0x9811,0x9813,0x980a,0x9812,0x980c,
-0x98fc,0x98f4,0x98fd,0x98fe,0x99b3,0x99b1,0x99b4,0x9ae1,
-0x9ce9,0x9e82,0x9f0e,0x9f13,0x9f20,0x50e7,0x50ee,0x50e5,
-0x50d6,0x50ed,0x50da,0x50d5,0x50cf,0x50d1,0x50f1,0x50ce,
-0x50e9,0x5162,0x51f3,0x5283,0x5282,0x5331,0x53ad,0x55fe,
-0x5600,0x561b,0x5617,0x55fd,0x5614,0x5606,0x5609,0x560d,
-0x560e,0x55f7,0x5616,0x561f,0x5608,0x5610,0x55f6,0x5718,
-0x5716,0x5875,0x587e,0x5883,0x5893,0x588a,0x5879,0x5885,
-0x587d,0x58fd,0x5925,0x5922,0x5924,0x596a,0x5969,0x5ae1,
-0x5ae6,0x5ae9,0x5ad7,0x5ad6,0x5ad8,0x5ae3,0x5b75,0x5bde,
-0x5be7,0x5be1,0x5be5,0x5be6,0x5be8,0x5be2,0x5be4,0x5bdf,
-0x5c0d,0x5c62,0x5d84,0x5d87,0x5e5b,0x5e63,0x5e55,0x5e57,
-0x5e54,0x5ed3,0x5ed6,0x5f0a,0x5f46,0x5f70,0x5fb9,0x6147,
-0x613f,0x614b,0x6177,0x6162,0x6163,0x615f,0x615a,0x6158,
-0x6175,0x622a,0x6487,0x6458,0x6454,0x64a4,0x6478,0x645f,
-0x647a,0x6451,0x6467,0x6434,0x646d,0x647b,0x6572,0x65a1,
-0x65d7,0x65d6,0x66a2,0x66a8,0x669d,0x699c,0x69a8,0x6995,
-0x69c1,0x69ae,0x69d3,0x69cb,0x699b,0x69b7,0x69bb,0x69ab,
-0x69b4,0x69d0,0x69cd,0x69ad,0x69cc,0x69a6,0x69c3,0x69a3,
-0x6b49,0x6b4c,0x6c33,0x6f33,0x6f14,0x6efe,0x6f13,0x6ef4,
-0x6f29,0x6f3e,0x6f20,0x6f2c,0x6f0f,0x6f02,0x6f22,0x6eff,
-0x6eef,0x6f06,0x6f31,0x6f38,0x6f32,0x6f23,0x6f15,0x6f2b,
-0x6f2f,0x6f88,0x6f2a,0x6eec,0x6f01,0x6ef2,0x6ecc,0x6ef7,
-0x7194,0x7199,0x717d,0x718a,0x7184,0x7192,0x723e,0x7292,
-0x7296,0x7344,0x7350,0x7464,0x7463,0x746a,0x7470,0x746d,
-0x7504,0x7591,0x7627,0x760d,0x760b,0x7609,0x7613,0x76e1,
-0x76e3,0x7784,0x777d,0x777f,0x7761,0x78c1,0x789f,0x78a7,
-0x78b3,0x78a9,0x78a3,0x798e,0x798f,0x798d,0x7a2e,0x7a31,
-0x7aaa,0x7aa9,0x7aed,0x7aef,0x7ba1,0x7b95,0x7b8b,0x7b75,
-0x7b97,0x7b9d,0x7b94,0x7b8f,0x7bb8,0x7b87,0x7b84,0x7cb9,
-0x7cbd,0x7cbe,0x7dbb,0x7db0,0x7d9c,0x7dbd,0x7dbe,0x7da0,
-0x7dca,0x7db4,0x7db2,0x7db1,0x7dba,0x7da2,0x7dbf,0x7db5,
-0x7db8,0x7dad,0x7dd2,0x7dc7,0x7dac,0x7f70,0x7fe0,0x7fe1,
-0x7fdf,0x805e,0x805a,0x8087,0x8150,0x8180,0x818f,0x8188,
-0x818a,0x817f,0x8182,0x81e7,0x81fa,0x8207,0x8214,0x821e,
-0x824b,0x84c9,0x84bf,0x84c6,0x84c4,0x8499,0x849e,0x84b2,
-0x849c,0x84cb,0x84b8,0x84c0,0x84d3,0x8490,0x84bc,0x84d1,
-0x84ca,0x873f,0x871c,0x873b,0x8722,0x8725,0x8734,0x8718,
-0x8755,0x8737,0x8729,0x88f3,0x8902,0x88f4,0x88f9,0x88f8,
-0x88fd,0x88e8,0x891a,0x88ef,0x8aa6,0x8a8c,0x8a9e,0x8aa3,
-0x8a8d,0x8aa1,0x8a93,0x8aa4,0x8aaa,0x8aa5,0x8aa8,0x8a98,
-0x8a91,0x8a9a,0x8aa7,0x8c6a,0x8c8d,0x8c8c,0x8cd3,0x8cd1,
-0x8cd2,0x8d6b,0x8d99,0x8d95,0x8dfc,0x8f14,0x8f12,0x8f15,
-0x8f13,0x8fa3,0x9060,0x9058,0x905c,0x9063,0x9059,0x905e,
-0x9062,0x905d,0x905b,0x9119,0x9118,0x911e,0x9175,0x9178,
-0x9177,0x9174,0x9278,0x92ac,0x9280,0x9285,0x9298,0x9296,
-0x927b,0x9293,0x929c,0x92a8,0x927c,0x9291,0x95a1,0x95a8,
-0x95a9,0x95a3,0x95a5,0x95a4,0x9699,0x969c,0x969b,0x96cc,
-0x96d2,0x9700,0x977c,0x9785,0x97f6,0x9817,0x9818,0x98af,
-0x98b1,0x9903,0x9905,0x990c,0x9909,0x99c1,0x9aaf,0x9ab0,
-0x9ae6,0x9b41,0x9b42,0x9cf4,0x9cf6,0x9cf3,0x9ebc,0x9f3b,
-0x9f4a,0x5104,0x5100,0x50fb,0x50f5,0x50f9,0x5102,0x5108,
-0x5109,0x5105,0x51dc,0x5287,0x5288,0x5289,0x528d,0x528a,
-0x52f0,0x53b2,0x562e,0x563b,0x5639,0x5632,0x563f,0x5634,
-0x5629,0x5653,0x564e,0x5657,0x5674,0x5636,0x562f,0x5630,
-0x5880,0x589f,0x589e,0x58b3,0x589c,0x58ae,0x58a9,0x58a6,
-0x596d,0x5b09,0x5afb,0x5b0b,0x5af5,0x5b0c,0x5b08,0x5bee,
-0x5bec,0x5be9,0x5beb,0x5c64,0x5c65,0x5d9d,0x5d94,0x5e62,
-0x5e5f,0x5e61,0x5ee2,0x5eda,0x5edf,0x5edd,0x5ee3,0x5ee0,
-0x5f48,0x5f71,0x5fb7,0x5fb5,0x6176,0x6167,0x616e,0x615d,
-0x6155,0x6182,0x617c,0x6170,0x616b,0x617e,0x61a7,0x6190,
-0x61ab,0x618e,0x61ac,0x619a,0x61a4,0x6194,0x61ae,0x622e,
-0x6469,0x646f,0x6479,0x649e,0x64b2,0x6488,0x6490,0x64b0,
-0x64a5,0x6493,0x6495,0x64a9,0x6492,0x64ae,0x64ad,0x64ab,
-0x649a,0x64ac,0x6499,0x64a2,0x64b3,0x6575,0x6577,0x6578,
-0x66ae,0x66ab,0x66b4,0x66b1,0x6a23,0x6a1f,0x69e8,0x6a01,
-0x6a1e,0x6a19,0x69fd,0x6a21,0x6a13,0x6a0a,0x69f3,0x6a02,
-0x6a05,0x69ed,0x6a11,0x6b50,0x6b4e,0x6ba4,0x6bc5,0x6bc6,
-0x6f3f,0x6f7c,0x6f84,0x6f51,0x6f66,0x6f54,0x6f86,0x6f6d,
-0x6f5b,0x6f78,0x6f6e,0x6f8e,0x6f7a,0x6f70,0x6f64,0x6f97,
-0x6f58,0x6ed5,0x6f6f,0x6f60,0x6f5f,0x719f,0x71ac,0x71b1,
-0x71a8,0x7256,0x729b,0x734e,0x7357,0x7469,0x748b,0x7483,
-0x747e,0x7480,0x757f,0x7620,0x7629,0x761f,0x7624,0x7626,
-0x7621,0x7622,0x769a,0x76ba,0x76e4,0x778e,0x7787,0x778c,
-0x7791,0x778b,0x78cb,0x78c5,0x78ba,0x78ca,0x78be,0x78d5,
-0x78bc,0x78d0,0x7a3f,0x7a3c,0x7a40,0x7a3d,0x7a37,0x7a3b,
-0x7aaf,0x7aae,0x7bad,0x7bb1,0x7bc4,0x7bb4,0x7bc6,0x7bc7,
-0x7bc1,0x7ba0,0x7bcc,0x7cca,0x7de0,0x7df4,0x7def,0x7dfb,
-0x7dd8,0x7dec,0x7ddd,0x7de8,0x7de3,0x7dda,0x7dde,0x7de9,
-0x7d9e,0x7dd9,0x7df2,0x7df9,0x7f75,0x7f77,0x7faf,0x7fe9,
-0x8026,0x819b,0x819c,0x819d,0x81a0,0x819a,0x8198,0x8517,
-0x853d,0x851a,0x84ee,0x852c,0x852d,0x8513,0x8511,0x8523,
-0x8521,0x8514,0x84ec,0x8525,0x84ff,0x8506,0x8782,0x8774,
-0x8776,0x8760,0x8766,0x8778,0x8768,0x8759,0x8757,0x874c,
-0x8753,0x885b,0x885d,0x8910,0x8907,0x8912,0x8913,0x8915,
-0x890a,0x8abc,0x8ad2,0x8ac7,0x8ac4,0x8a95,0x8acb,0x8af8,
-0x8ab2,0x8ac9,0x8ac2,0x8abf,0x8ab0,0x8ad6,0x8acd,0x8ab6,
-0x8ab9,0x8adb,0x8c4c,0x8c4e,0x8c6c,0x8ce0,0x8cde,0x8ce6,
-0x8ce4,0x8cec,0x8ced,0x8ce2,0x8ce3,0x8cdc,0x8cea,0x8ce1,
-0x8d6d,0x8d9f,0x8da3,0x8e2b,0x8e10,0x8e1d,0x8e22,0x8e0f,
-0x8e29,0x8e1f,0x8e21,0x8e1e,0x8eba,0x8f1d,0x8f1b,0x8f1f,
-0x8f29,0x8f26,0x8f2a,0x8f1c,0x8f1e,0x8f25,0x9069,0x906e,
-0x9068,0x906d,0x9077,0x9130,0x912d,0x9127,0x9131,0x9187,
-0x9189,0x918b,0x9183,0x92c5,0x92bb,0x92b7,0x92ea,0x92e4,
-0x92c1,0x92b3,0x92bc,0x92d2,0x92c7,0x92f0,0x92b2,0x95ad,
-0x95b1,0x9704,0x9706,0x9707,0x9709,0x9760,0x978d,0x978b,
-0x978f,0x9821,0x982b,0x981c,0x98b3,0x990a,0x9913,0x9912,
-0x9918,0x99dd,0x99d0,0x99df,0x99db,0x99d1,0x99d5,0x99d2,
-0x99d9,0x9ab7,0x9aee,0x9aef,0x9b27,0x9b45,0x9b44,0x9b77,
-0x9b6f,0x9d06,0x9d09,0x9d03,0x9ea9,0x9ebe,0x9ece,0x58a8,
-0x9f52,0x5112,0x5118,0x5114,0x5110,0x5115,0x5180,0x51aa,
-0x51dd,0x5291,0x5293,0x52f3,0x5659,0x566b,0x5679,0x5669,
-0x5664,0x5678,0x566a,0x5668,0x5665,0x5671,0x566f,0x566c,
-0x5662,0x5676,0x58c1,0x58be,0x58c7,0x58c5,0x596e,0x5b1d,
-0x5b34,0x5b78,0x5bf0,0x5c0e,0x5f4a,0x61b2,0x6191,0x61a9,
-0x618a,0x61cd,0x61b6,0x61be,0x61ca,0x61c8,0x6230,0x64c5,
-0x64c1,0x64cb,0x64bb,0x64bc,0x64da,0x64c4,0x64c7,0x64c2,
-0x64cd,0x64bf,0x64d2,0x64d4,0x64be,0x6574,0x66c6,0x66c9,
-0x66b9,0x66c4,0x66c7,0x66b8,0x6a3d,0x6a38,0x6a3a,0x6a59,
-0x6a6b,0x6a58,0x6a39,0x6a44,0x6a62,0x6a61,0x6a4b,0x6a47,
-0x6a35,0x6a5f,0x6a48,0x6b59,0x6b77,0x6c05,0x6fc2,0x6fb1,
-0x6fa1,0x6fc3,0x6fa4,0x6fc1,0x6fa7,0x6fb3,0x6fc0,0x6fb9,
-0x6fb6,0x6fa6,0x6fa0,0x6fb4,0x71be,0x71c9,0x71d0,0x71d2,
-0x71c8,0x71d5,0x71b9,0x71ce,0x71d9,0x71dc,0x71c3,0x71c4,
-0x7368,0x749c,0x74a3,0x7498,0x749f,0x749e,0x74e2,0x750c,
-0x750d,0x7634,0x7638,0x763a,0x76e7,0x76e5,0x77a0,0x779e,
-0x779f,0x77a5,0x78e8,0x78da,0x78ec,0x78e7,0x79a6,0x7a4d,
-0x7a4e,0x7a46,0x7a4c,0x7a4b,0x7aba,0x7bd9,0x7c11,0x7bc9,
-0x7be4,0x7bdb,0x7be1,0x7be9,0x7be6,0x7cd5,0x7cd6,0x7e0a,
-0x7e11,0x7e08,0x7e1b,0x7e23,0x7e1e,0x7e1d,0x7e09,0x7e10,
-0x7f79,0x7fb2,0x7ff0,0x7ff1,0x7fee,0x8028,0x81b3,0x81a9,
-0x81a8,0x81fb,0x8208,0x8258,0x8259,0x854a,0x8559,0x8548,
-0x8568,0x8569,0x8543,0x8549,0x856d,0x856a,0x855e,0x8783,
-0x879f,0x879e,0x87a2,0x878d,0x8861,0x892a,0x8932,0x8925,
-0x892b,0x8921,0x89aa,0x89a6,0x8ae6,0x8afa,0x8aeb,0x8af1,
-0x8b00,0x8adc,0x8ae7,0x8aee,0x8afe,0x8b01,0x8b02,0x8af7,
-0x8aed,0x8af3,0x8af6,0x8afc,0x8c6b,0x8c6d,0x8c93,0x8cf4,
-0x8e44,0x8e31,0x8e34,0x8e42,0x8e39,0x8e35,0x8f3b,0x8f2f,
-0x8f38,0x8f33,0x8fa8,0x8fa6,0x9075,0x9074,0x9078,0x9072,
-0x907c,0x907a,0x9134,0x9192,0x9320,0x9336,0x92f8,0x9333,
-0x932f,0x9322,0x92fc,0x932b,0x9304,0x931a,0x9310,0x9326,
-0x9321,0x9315,0x932e,0x9319,0x95bb,0x96a7,0x96a8,0x96aa,
-0x96d5,0x970e,0x9711,0x9716,0x970d,0x9713,0x970f,0x975b,
-0x975c,0x9766,0x9798,0x9830,0x9838,0x983b,0x9837,0x982d,
-0x9839,0x9824,0x9910,0x9928,0x991e,0x991b,0x9921,0x991a,
-0x99ed,0x99e2,0x99f1,0x9ab8,0x9abc,0x9afb,0x9aed,0x9b28,
-0x9b91,0x9d15,0x9d23,0x9d26,0x9d28,0x9d12,0x9d1b,0x9ed8,
-0x9ed4,0x9f8d,0x9f9c,0x512a,0x511f,0x5121,0x5132,0x52f5,
-0x568e,0x5680,0x5690,0x5685,0x5687,0x568f,0x58d5,0x58d3,
-0x58d1,0x58ce,0x5b30,0x5b2a,0x5b24,0x5b7a,0x5c37,0x5c68,
-0x5dbc,0x5dba,0x5dbd,0x5db8,0x5e6b,0x5f4c,0x5fbd,0x61c9,
-0x61c2,0x61c7,0x61e6,0x61cb,0x6232,0x6234,0x64ce,0x64ca,
-0x64d8,0x64e0,0x64f0,0x64e6,0x64ec,0x64f1,0x64e2,0x64ed,
-0x6582,0x6583,0x66d9,0x66d6,0x6a80,0x6a94,0x6a84,0x6aa2,
-0x6a9c,0x6adb,0x6aa3,0x6a7e,0x6a97,0x6a90,0x6aa0,0x6b5c,
-0x6bae,0x6bda,0x6c08,0x6fd8,0x6ff1,0x6fdf,0x6fe0,0x6fdb,
-0x6fe4,0x6feb,0x6fef,0x6f80,0x6fec,0x6fe1,0x6fe9,0x6fd5,
-0x6fee,0x6ff0,0x71e7,0x71df,0x71ee,0x71e6,0x71e5,0x71ed,
-0x71ec,0x71f4,0x71e0,0x7235,0x7246,0x7370,0x7372,0x74a9,
-0x74b0,0x74a6,0x74a8,0x7646,0x7642,0x764c,0x76ea,0x77b3,
-0x77aa,0x77b0,0x77ac,0x77a7,0x77ad,0x77ef,0x78f7,0x78fa,
-0x78f4,0x78ef,0x7901,0x79a7,0x79aa,0x7a57,0x7abf,0x7c07,
-0x7c0d,0x7bfe,0x7bf7,0x7c0c,0x7be0,0x7ce0,0x7cdc,0x7cde,
-0x7ce2,0x7cdf,0x7cd9,0x7cdd,0x7e2e,0x7e3e,0x7e46,0x7e37,
-0x7e32,0x7e43,0x7e2b,0x7e3d,0x7e31,0x7e45,0x7e41,0x7e34,
-0x7e39,0x7e48,0x7e35,0x7e3f,0x7e2f,0x7f44,0x7ff3,0x7ffc,
-0x8071,0x8072,0x8070,0x806f,0x8073,0x81c6,0x81c3,0x81ba,
-0x81c2,0x81c0,0x81bf,0x81bd,0x81c9,0x81be,0x81e8,0x8209,
-0x8271,0x85aa,0x8584,0x857e,0x859c,0x8591,0x8594,0x85af,
-0x859b,0x8587,0x85a8,0x858a,0x85a6,0x8667,0x87c0,0x87d1,
-0x87b3,0x87d2,0x87c6,0x87ab,0x87bb,0x87ba,0x87c8,0x87cb,
-0x893b,0x8936,0x8944,0x8938,0x893d,0x89ac,0x8b0e,0x8b17,
-0x8b19,0x8b1b,0x8b0a,0x8b20,0x8b1d,0x8b04,0x8b10,0x8c41,
-0x8c3f,0x8c73,0x8cfa,0x8cfd,0x8cfc,0x8cf8,0x8cfb,0x8da8,
-0x8e49,0x8e4b,0x8e48,0x8e4a,0x8f44,0x8f3e,0x8f42,0x8f45,
-0x8f3f,0x907f,0x907d,0x9084,0x9081,0x9082,0x9080,0x9139,
-0x91a3,0x919e,0x919c,0x934d,0x9382,0x9328,0x9375,0x934a,
-0x9365,0x934b,0x9318,0x937e,0x936c,0x935b,0x9370,0x935a,
-0x9354,0x95ca,0x95cb,0x95cc,0x95c8,0x95c6,0x96b1,0x96b8,
-0x96d6,0x971c,0x971e,0x97a0,0x97d3,0x9846,0x98b6,0x9935,
-0x9a01,0x99ff,0x9bae,0x9bab,0x9baa,0x9bad,0x9d3b,0x9d3f,
-0x9e8b,0x9ecf,0x9ede,0x9edc,0x9edd,0x9edb,0x9f3e,0x9f4b,
-0x53e2,0x5695,0x56ae,0x58d9,0x58d8,0x5b38,0x5f5e,0x61e3,
-0x6233,0x64f4,0x64f2,0x64fe,0x6506,0x64fa,0x64fb,0x64f7,
-0x65b7,0x66dc,0x6726,0x6ab3,0x6aac,0x6ac3,0x6abb,0x6ab8,
-0x6ac2,0x6aae,0x6aaf,0x6b5f,0x6b78,0x6baf,0x7009,0x700b,
-0x6ffe,0x7006,0x6ffa,0x7011,0x700f,0x71fb,0x71fc,0x71fe,
-0x71f8,0x7377,0x7375,0x74a7,0x74bf,0x7515,0x7656,0x7658,
-0x7652,0x77bd,0x77bf,0x77bb,0x77bc,0x790e,0x79ae,0x7a61,
-0x7a62,0x7a60,0x7ac4,0x7ac5,0x7c2b,0x7c27,0x7c2a,0x7c1e,
-0x7c23,0x7c21,0x7ce7,0x7e54,0x7e55,0x7e5e,0x7e5a,0x7e61,
-0x7e52,0x7e59,0x7f48,0x7ff9,0x7ffb,0x8077,0x8076,0x81cd,
-0x81cf,0x820a,0x85cf,0x85a9,0x85cd,0x85d0,0x85c9,0x85b0,
-0x85ba,0x85b9,0x87ef,0x87ec,0x87f2,0x87e0,0x8986,0x89b2,
-0x89f4,0x8b28,0x8b39,0x8b2c,0x8b2b,0x8c50,0x8d05,0x8e59,
-0x8e63,0x8e66,0x8e64,0x8e5f,0x8e55,0x8ec0,0x8f49,0x8f4d,
-0x9087,0x9083,0x9088,0x91ab,0x91ac,0x91d0,0x9394,0x938a,
-0x9396,0x93a2,0x93b3,0x93ae,0x93ac,0x93b0,0x9398,0x939a,
-0x9397,0x95d4,0x95d6,0x95d0,0x95d5,0x96e2,0x96dc,0x96d9,
-0x96db,0x96de,0x9724,0x97a3,0x97a6,0x97ad,0x97f9,0x984d,
-0x984f,0x984c,0x984e,0x9853,0x98ba,0x993e,0x993f,0x993d,
-0x992e,0x99a5,0x9a0e,0x9ac1,0x9b03,0x9b06,0x9b4f,0x9b4e,
-0x9b4d,0x9bca,0x9bc9,0x9bfd,0x9bc8,0x9bc0,0x9d51,0x9d5d,
-0x9d60,0x9ee0,0x9f15,0x9f2c,0x5133,0x56a5,0x56a8,0x58de,
-0x58df,0x58e2,0x5bf5,0x9f90,0x5eec,0x61f2,0x61f7,0x61f6,
-0x61f5,0x6500,0x650f,0x66e0,0x66dd,0x6ae5,0x6add,0x6ada,
-0x6ad3,0x701b,0x701f,0x7028,0x701a,0x701d,0x7015,0x7018,
-0x7206,0x720d,0x7258,0x72a2,0x7378,0x737a,0x74bd,0x74ca,
-0x74e3,0x7587,0x7586,0x765f,0x7661,0x77c7,0x7919,0x79b1,
-0x7a6b,0x7a69,0x7c3e,0x7c3f,0x7c38,0x7c3d,0x7c37,0x7c40,
-0x7e6b,0x7e6d,0x7e79,0x7e69,0x7e6a,0x7e73,0x7f85,0x7fb6,
-0x7fb9,0x7fb8,0x81d8,0x85e9,0x85dd,0x85ea,0x85d5,0x85e4,
-0x85e5,0x85f7,0x87fb,0x8805,0x880d,0x87f9,0x87fe,0x8960,
-0x895f,0x8956,0x895e,0x8b41,0x8b5c,0x8b58,0x8b49,0x8b5a,
-0x8b4e,0x8b4f,0x8b46,0x8b59,0x8d08,0x8d0a,0x8e7c,0x8e72,
-0x8e87,0x8e76,0x8e6c,0x8e7a,0x8e74,0x8f54,0x8f4e,0x8fad,
-0x908a,0x908b,0x91b1,0x91ae,0x93e1,0x93d1,0x93df,0x93c3,
-0x93c8,0x93dc,0x93dd,0x93d6,0x93e2,0x93cd,0x93d8,0x93e4,
-0x93d7,0x93e8,0x95dc,0x96b4,0x96e3,0x972a,0x9727,0x9761,
-0x97dc,0x97fb,0x985e,0x9858,0x985b,0x98bc,0x9945,0x9949,
-0x9a16,0x9a19,0x9b0d,0x9be8,0x9be7,0x9bd6,0x9bdb,0x9d89,
-0x9d61,0x9d72,0x9d6a,0x9d6c,0x9e92,0x9e97,0x9e93,0x9eb4,
-0x52f8,0x56b7,0x56b6,0x56b4,0x56bc,0x58e4,0x5b40,0x5b43,
-0x5b7d,0x5bf6,0x5dc9,0x61f8,0x61fa,0x6518,0x6514,0x6519,
-0x66e6,0x6727,0x6aec,0x703e,0x7030,0x7032,0x7210,0x737b,
-0x74cf,0x7662,0x7665,0x7926,0x792a,0x792c,0x792b,0x7ac7,
-0x7af6,0x7c4c,0x7c43,0x7c4d,0x7cef,0x7cf0,0x8fae,0x7e7d,
-0x7e7c,0x7e82,0x7f4c,0x8000,0x81da,0x8266,0x85fb,0x85f9,
-0x8611,0x85fa,0x8606,0x860b,0x8607,0x860a,0x8814,0x8815,
-0x8964,0x89ba,0x89f8,0x8b70,0x8b6c,0x8b66,0x8b6f,0x8b5f,
-0x8b6b,0x8d0f,0x8d0d,0x8e89,0x8e81,0x8e85,0x8e82,0x91b4,
-0x91cb,0x9418,0x9403,0x93fd,0x95e1,0x9730,0x98c4,0x9952,
-0x9951,0x99a8,0x9a2b,0x9a30,0x9a37,0x9a35,0x9c13,0x9c0d,
-0x9e79,0x9eb5,0x9ee8,0x9f2f,0x9f5f,0x9f63,0x9f61,0x5137,
-0x5138,0x56c1,0x56c0,0x56c2,0x5914,0x5c6c,0x5dcd,0x61fc,
-0x61fe,0x651d,0x651c,0x6595,0x66e9,0x6afb,0x6b04,0x6afa,
-0x6bb2,0x704c,0x721b,0x72a7,0x74d6,0x74d4,0x7669,0x77d3,
-0x7c50,0x7e8f,0x7e8c,0x7fbc,0x8617,0x862d,0x861a,0x8823,
-0x8822,0x8821,0x881f,0x896a,0x896c,0x89bd,0x8b74,0x8b77,
-0x8b7d,0x8d13,0x8e8a,0x8e8d,0x8e8b,0x8f5f,0x8faf,0x91ba,
-0x942e,0x9433,0x9435,0x943a,0x9438,0x9432,0x942b,0x95e2,
-0x9738,0x9739,0x9732,0x97ff,0x9867,0x9865,0x9957,0x9a45,
-0x9a43,0x9a40,0x9a3e,0x9acf,0x9b54,0x9b51,0x9c2d,0x9c25,
-0x9daf,0x9db4,0x9dc2,0x9db8,0x9e9d,0x9eef,0x9f19,0x9f5c,
-0x9f66,0x9f67,0x513c,0x513b,0x56c8,0x56ca,0x56c9,0x5b7f,
-0x5dd4,0x5dd2,0x5f4e,0x61ff,0x6524,0x6b0a,0x6b61,0x7051,
-0x7058,0x7380,0x74e4,0x758a,0x766e,0x766c,0x79b3,0x7c60,
-0x7c5f,0x807e,0x807d,0x81df,0x8972,0x896f,0x89fc,0x8b80,
-0x8d16,0x8d17,0x8e91,0x8e93,0x8f61,0x9148,0x9444,0x9451,
-0x9452,0x973d,0x973e,0x97c3,0x97c1,0x986b,0x9955,0x9a55,
-0x9a4d,0x9ad2,0x9b1a,0x9c49,0x9c31,0x9c3e,0x9c3b,0x9dd3,
-0x9dd7,0x9f34,0x9f6c,0x9f6a,0x9f94,0x56cc,0x5dd6,0x6200,
-0x6523,0x652b,0x652a,0x66ec,0x6b10,0x74da,0x7aca,0x7c64,
-0x7c63,0x7c65,0x7e93,0x7e96,0x7e94,0x81e2,0x8638,0x863f,
-0x8831,0x8b8a,0x9090,0x908f,0x9463,0x9460,0x9464,0x9768,
-0x986f,0x995c,0x9a5a,0x9a5b,0x9a57,0x9ad3,0x9ad4,0x9ad1,
-0x9c54,0x9c57,0x9c56,0x9de5,0x9e9f,0x9ef4,0x56d1,0x58e9,
-0x652c,0x705e,0x7671,0x7672,0x77d7,0x7f50,0x7f88,0x8836,
-0x8839,0x8862,0x8b93,0x8b92,0x8b96,0x8277,0x8d1b,0x91c0,
-0x946a,0x9742,0x9748,0x9744,0x97c6,0x9870,0x9a5f,0x9b22,
-0x9b58,0x9c5f,0x9df9,0x9dfa,0x9e7c,0x9e7d,0x9f07,0x9f77,
-0x9f72,0x5ef3,0x6b16,0x7063,0x7c6c,0x7c6e,0x883b,0x89c0,
-0x8ea1,0x91c1,0x9472,0x9470,0x9871,0x995e,0x9ad6,0x9b23,
-0x9ecc,0x7064,0x77da,0x8b9a,0x9477,0x97c9,0x9a62,0x9a65,
-0x7e9c,0x8b9c,0x8eaa,0x91c5,0x947d,0x947e,0x947c,0x9c77,
-0x9c78,0x9ef7,0x8c54,0x947f,0x9e1a,0x7228,0x9a6a,0x9b31,
-0x9e1b,0x9e1e,0x7c72};
-
-static const int cns11643_1_ucs_table_size = (sizeof(cns11643_1_ucs_table)/sizeof(unsigned short));
-
-static const unsigned short cns11643_2_ucs_table[] = {
-0x4e42,0x4e5c,0x51f5,0x531a,0x5382,0x4e07,0x4e0c,0x4e47,
-0x4e8d,0x56d7,0x5c6e,0x5f73,0x4e0f,0x5187,0x4e0e,0x4e2e,
-0x4e93,0x4ec2,0x4ec9,0x4ec8,0x5198,0x52fc,0x536c,0x53b9,
-0x5720,0x5903,0x592c,0x5c10,0x5dff,0x65e1,0x6bb3,0x6bcc,
-0x6c14,0x723f,0x4e31,0x4e3c,0x4ee8,0x4edc,0x4ee9,0x4ee1,
-0x4edd,0x4eda,0x520c,0x5209,0x531c,0x534c,0x5722,0x5723,
-0x5917,0x592f,0x5b81,0x5b84,0x5c12,0x5c3b,0x5c74,0x5c73,
-0x5e04,0x5e80,0x5e82,0x5fc9,0x6209,0x6250,0x6c15,0x6c36,
-0x6c43,0x6c3f,0x6c3b,0x72ae,0x72b0,0x738a,0x79b8,0x808a,
-0x961e,0x4f0e,0x4f18,0x4f2c,0x4ef5,0x4f14,0x4ef1,0x4f00,
-0x4ef7,0x4f08,0x4f1d,0x4f02,0x4f05,0x4f22,0x4f13,0x4f04,
-0x4ef4,0x4f12,0x51b1,0x5213,0x5210,0x52a6,0x5322,0x531f,
-0x534d,0x538a,0x5407,0x56e1,0x56df,0x572e,0x572a,0x5734,
-0x593c,0x5980,0x597c,0x5985,0x597b,0x597e,0x5977,0x597f,
-0x5b56,0x5c15,0x5c25,0x5c7c,0x5c7a,0x5c7b,0x5c7e,0x5ddf,
-0x5e75,0x5e84,0x5f02,0x5f1a,0x5f74,0x5fd5,0x5fd4,0x5fcf,
-0x625c,0x625e,0x6264,0x6261,0x6266,0x6262,0x6259,0x6260,
-0x625a,0x6265,0x6537,0x65ef,0x65ee,0x673e,0x6739,0x6738,
-0x673b,0x673a,0x673f,0x673c,0x6733,0x6c18,0x6c46,0x6c52,
-0x6c5c,0x6c4f,0x6c4a,0x6c54,0x6c4b,0x6c4c,0x7071,0x725e,
-0x72b4,0x72b5,0x738e,0x752a,0x767f,0x7a75,0x7f51,0x8278,
-0x827c,0x8280,0x827d,0x827f,0x864d,0x897e,0x9099,0x9097,
-0x9098,0x909b,0x9094,0x9622,0x9624,0x9620,0x9623,0x4f56,
-0x4f3b,0x4f62,0x4f49,0x4f53,0x4f64,0x4f3e,0x4f67,0x4f52,
-0x4f5f,0x4f41,0x4f58,0x4f2d,0x4f33,0x4f3f,0x4f61,0x518f,
-0x51b9,0x521c,0x521e,0x5221,0x52ad,0x52ae,0x5309,0x5363,
-0x5372,0x538e,0x538f,0x5430,0x5437,0x542a,0x5454,0x5445,
-0x5419,0x541c,0x5425,0x5418,0x543d,0x544f,0x5441,0x5428,
-0x5424,0x5447,0x56ee,0x56e7,0x56e5,0x5741,0x5745,0x574c,
-0x5749,0x574b,0x5752,0x5906,0x5940,0x59a6,0x5998,0x59a0,
-0x5997,0x598e,0x59a2,0x5990,0x598f,0x59a7,0x59a1,0x5b8e,
-0x5b92,0x5c28,0x5c2a,0x5c8d,0x5c8f,0x5c88,0x5c8b,0x5c89,
-0x5c92,0x5c8a,0x5c86,0x5c93,0x5c95,0x5de0,0x5e0a,0x5e0e,
-0x5e8b,0x5e89,0x5e8c,0x5e88,0x5e8d,0x5f05,0x5f1d,0x5f78,
-0x5f76,0x5fd2,0x5fd1,0x5fd0,0x5fed,0x5fe8,0x5fee,0x5ff3,
-0x5fe1,0x5fe4,0x5fe3,0x5ffa,0x5fef,0x5ff7,0x5ffb,0x6000,
-0x5ff4,0x623a,0x6283,0x628c,0x628e,0x628f,0x6294,0x6287,
-0x6271,0x627b,0x627a,0x6270,0x6281,0x6288,0x6277,0x627d,
-0x6272,0x6274,0x65f0,0x65f4,0x65f3,0x65f2,0x65f5,0x6745,
-0x6747,0x6759,0x6755,0x674c,0x6748,0x675d,0x674d,0x675a,
-0x674b,0x6bd0,0x6c19,0x6c1a,0x6c78,0x6c67,0x6c6b,0x6c84,
-0x6c8b,0x6c8f,0x6c71,0x6c6f,0x6c69,0x6c9a,0x6c6d,0x6c87,
-0x6c95,0x6c9c,0x6c66,0x6c73,0x6c65,0x6c7b,0x6c8e,0x7074,
-0x707a,0x7263,0x72bf,0x72bd,0x72c3,0x72c6,0x72c1,0x72ba,
-0x72c5,0x7395,0x7397,0x7393,0x7394,0x7392,0x753a,0x7539,
-0x7594,0x7595,0x7681,0x793d,0x8034,0x8095,0x8099,0x8090,
-0x8092,0x809c,0x8290,0x828f,0x8285,0x828e,0x8291,0x8293,
-0x828a,0x8283,0x8284,0x8c78,0x8fc9,0x8fbf,0x909f,0x90a1,
-0x90a5,0x909e,0x90a7,0x90a0,0x9630,0x9628,0x962f,0x962d,
-0x4e33,0x4f98,0x4f7c,0x4f85,0x4f7d,0x4f80,0x4f87,0x4f76,
-0x4f74,0x4f89,0x4f84,0x4f77,0x4f4c,0x4f97,0x4f6a,0x4f9a,
-0x4f79,0x4f81,0x4f78,0x4f90,0x4f9c,0x4f94,0x4f9e,0x4f92,
-0x4f82,0x4f95,0x4f6b,0x4f6e,0x519e,0x51bc,0x51be,0x5235,
-0x5232,0x5233,0x5246,0x5231,0x52bc,0x530a,0x530b,0x533c,
-0x5392,0x5394,0x5487,0x547f,0x5481,0x5491,0x5482,0x5488,
-0x546b,0x547a,0x547e,0x5465,0x546c,0x5474,0x5466,0x548d,
-0x546f,0x5461,0x5460,0x5498,0x5463,0x5467,0x5464,0x56f7,
-0x56f9,0x576f,0x5772,0x576d,0x576b,0x5771,0x5770,0x5776,
-0x5780,0x5775,0x577b,0x5773,0x5774,0x5762,0x5768,0x577d,
-0x590c,0x5945,0x59b5,0x59ba,0x59cf,0x59ce,0x59b2,0x59cc,
-0x59c1,0x59b6,0x59bc,0x59c3,0x59d6,0x59b1,0x59bd,0x59c0,
-0x59c8,0x59b4,0x59c7,0x5b62,0x5b65,0x5b93,0x5b95,0x5c44,
-0x5c47,0x5cae,0x5ca4,0x5ca0,0x5cb5,0x5caf,0x5ca8,0x5cac,
-0x5c9f,0x5ca3,0x5cad,0x5ca2,0x5caa,0x5ca7,0x5c9d,0x5ca5,
-0x5cb6,0x5cb0,0x5ca6,0x5e17,0x5e14,0x5e19,0x5f28,0x5f22,
-0x5f23,0x5f24,0x5f54,0x5f82,0x5f7e,0x5f7d,0x5fde,0x5fe5,
-0x602d,0x6026,0x6019,0x6032,0x600b,0x6034,0x600a,0x6017,
-0x6033,0x601a,0x601e,0x602c,0x6022,0x600d,0x6010,0x602e,
-0x6013,0x6011,0x600c,0x6009,0x601c,0x6214,0x623d,0x62ad,
-0x62b4,0x62d1,0x62be,0x62aa,0x62b6,0x62ca,0x62ae,0x62b3,
-0x62af,0x62bb,0x62a9,0x62b0,0x62b8,0x653d,0x65a8,0x65bb,
-0x6609,0x65fc,0x6604,0x6612,0x6608,0x65fb,0x6603,0x660b,
-0x660d,0x6605,0x65fd,0x6611,0x6610,0x66f6,0x670a,0x6785,
-0x676c,0x678e,0x6792,0x6776,0x677b,0x6798,0x6786,0x6784,
-0x6774,0x678d,0x678c,0x677a,0x679f,0x6791,0x6799,0x6783,
-0x677d,0x6781,0x6778,0x6779,0x6794,0x6b25,0x6b80,0x6b7e,
-0x6bde,0x6c1d,0x6c93,0x6cec,0x6ceb,0x6cee,0x6cd9,0x6cb6,
-0x6cd4,0x6cad,0x6ce7,0x6cb7,0x6cd0,0x6cc2,0x6cba,0x6cc3,
-0x6cc6,0x6ced,0x6cf2,0x6cd2,0x6cdd,0x6cb4,0x6c8a,0x6c9d,
-0x6c80,0x6cde,0x6cc0,0x6d30,0x6ccd,0x6cc7,0x6cb0,0x6cf9,
-0x6ccf,0x6ce9,0x6cd1,0x7094,0x7098,0x7085,0x7093,0x7086,
-0x7084,0x7091,0x7096,0x7082,0x709a,0x7083,0x726a,0x72d6,
-0x72cb,0x72d8,0x72c9,0x72dc,0x72d2,0x72d4,0x72da,0x72cc,
-0x72d1,0x73a4,0x73a1,0x73ad,0x73a6,0x73a2,0x73a0,0x73ac,
-0x739d,0x74dd,0x74e8,0x753f,0x7540,0x753e,0x758c,0x7598,
-0x76af,0x76f3,0x76f1,0x76f0,0x76f5,0x77f8,0x77fc,0x77f9,
-0x77fb,0x77fa,0x77f7,0x7942,0x793f,0x79c5,0x7a78,0x7a7b,
-0x7afb,0x7c75,0x7cfd,0x8035,0x808f,0x80ae,0x80a3,0x80b8,
-0x80b5,0x80ad,0x8220,0x82a0,0x82c0,0x82ab,0x829a,0x8298,
-0x829b,0x82b5,0x82a7,0x82ae,0x82bc,0x829e,0x82ba,0x82b4,
-0x82a8,0x82a1,0x82a9,0x82c2,0x82a4,0x82c3,0x82b6,0x82a2,
-0x8670,0x866f,0x866d,0x866e,0x8c56,0x8fd2,0x8fcb,0x8fd3,
-0x8fcd,0x8fd6,0x8fd5,0x8fd7,0x90b2,0x90b4,0x90af,0x90b3,
-0x90b0,0x9639,0x963d,0x963c,0x963a,0x9643,0x4fcd,0x4fc5,
-0x4fd3,0x4fb2,0x4fc9,0x4fcb,0x4fc1,0x4fd4,0x4fdc,0x4fd9,
-0x4fbb,0x4fb3,0x4fdb,0x4fc7,0x4fd6,0x4fba,0x4fc0,0x4fb9,
-0x4fec,0x5244,0x5249,0x52c0,0x52c2,0x533d,0x537c,0x5397,
-0x5396,0x5399,0x5398,0x54ba,0x54a1,0x54ad,0x54a5,0x54cf,
-0x54c3,0x830d,0x54b7,0x54ae,0x54d6,0x54b6,0x54c5,0x54c6,
-0x54a0,0x5470,0x54bc,0x54a2,0x54be,0x5472,0x54de,0x54b0,
-0x57b5,0x579e,0x579f,0x57a4,0x578c,0x5797,0x579d,0x579b,
-0x5794,0x5798,0x578f,0x5799,0x57a5,0x579a,0x5795,0x58f4,
-0x590d,0x5953,0x59e1,0x59de,0x59ee,0x5a00,0x59f1,0x59dd,
-0x59fa,0x59fd,0x59fc,0x59f6,0x59e4,0x59f2,0x59f7,0x59db,
-0x59e9,0x59f3,0x59f5,0x59e0,0x59fe,0x59f4,0x59ed,0x5ba8,
-0x5c4c,0x5cd0,0x5cd8,0x5ccc,0x5cd7,0x5ccb,0x5cdb,0x5cde,
-0x5cda,0x5cc9,0x5cc7,0x5cca,0x5cd6,0x5cd3,0x5cd4,0x5ccf,
-0x5cc8,0x5cc6,0x5cce,0x5cdf,0x5cf8,0x5df9,0x5e21,0x5e22,
-0x5e23,0x5e20,0x5e24,0x5eb0,0x5ea4,0x5ea2,0x5e9b,0x5ea3,
-0x5ea5,0x5f07,0x5f2e,0x5f56,0x5f86,0x6037,0x6039,0x6054,
-0x6072,0x605e,0x6045,0x6053,0x6047,0x6049,0x605b,0x604c,
-0x6040,0x6042,0x605f,0x6024,0x6044,0x6058,0x6066,0x606e,
-0x6242,0x6243,0x62cf,0x630d,0x630b,0x62f5,0x630e,0x6303,
-0x62eb,0x62f9,0x630f,0x630c,0x62f8,0x62f6,0x6300,0x6313,
-0x6314,0x62fa,0x6315,0x62fb,0x62f0,0x6541,0x6543,0x65aa,
-0x65bf,0x6636,0x6621,0x6632,0x6635,0x661c,0x6626,0x6622,
-0x6633,0x662b,0x663a,0x661d,0x6634,0x6639,0x662e,0x670f,
-0x6710,0x67c1,0x67f2,0x67c8,0x67ba,0x67dc,0x67bb,0x67f8,
-0x67d8,0x67c0,0x67b7,0x67c5,0x67eb,0x67e4,0x67df,0x67b5,
-0x67cd,0x67b3,0x67f7,0x67f6,0x67ee,0x67e3,0x67c2,0x67b9,
-0x67ce,0x67e7,0x67f0,0x67b2,0x67fc,0x67c6,0x67ed,0x67cc,
-0x67ae,0x67e6,0x67db,0x67fa,0x67c9,0x67ca,0x67c3,0x67ea,
-0x67cb,0x6b28,0x6b82,0x6b84,0x6bb6,0x6bd6,0x6bd8,0x6be0,
-0x6c20,0x6c21,0x6d28,0x6d34,0x6d2d,0x6d1f,0x6d3c,0x6d3f,
-0x6d12,0x6d0a,0x6cda,0x6d33,0x6d04,0x6d19,0x6d3a,0x6d1a,
-0x6d11,0x6d00,0x6d1d,0x6d42,0x6d01,0x6d18,0x6d37,0x6d03,
-0x6d0f,0x6d40,0x6d07,0x6d20,0x6d2c,0x6d08,0x6d22,0x6d09,
-0x6d10,0x70b7,0x709f,0x70be,0x70b1,0x70b0,0x70a1,0x70b4,
-0x70b5,0x70a9,0x7241,0x7249,0x724a,0x726c,0x7270,0x7273,
-0x726e,0x72ca,0x72e4,0x72e8,0x72eb,0x72df,0x72ea,0x72e6,
-0x72e3,0x7385,0x73cc,0x73c2,0x73c8,0x73c5,0x73b9,0x73b6,
-0x73b5,0x73b4,0x73eb,0x73bf,0x73c7,0x73be,0x73c3,0x73c6,
-0x73b8,0x73cb,0x74ec,0x74ee,0x752e,0x7547,0x7548,0x75a7,
-0x75aa,0x7679,0x76c4,0x7708,0x7703,0x7704,0x7705,0x770a,
-0x76f7,0x76fb,0x76fa,0x77e7,0x77e8,0x7806,0x7811,0x7812,
-0x7805,0x7810,0x780f,0x780e,0x7809,0x7803,0x7813,0x794a,
-0x794c,0x794b,0x7945,0x7944,0x79d5,0x79cd,0x79cf,0x79d6,
-0x79ce,0x7a80,0x7a7e,0x7ad1,0x7b00,0x7b01,0x7c7a,0x7c78,
-0x7c79,0x7c7f,0x7c80,0x7c81,0x7d03,0x7d08,0x7d01,0x7f58,
-0x7f91,0x7f8d,0x7fbe,0x8007,0x800e,0x800f,0x8014,0x8037,
-0x80d8,0x80c7,0x80e0,0x80d1,0x80c8,0x80c2,0x80d0,0x80c5,
-0x80e3,0x80d9,0x80dc,0x80ca,0x80d5,0x80c9,0x80cf,0x80d7,
-0x80e6,0x80cd,0x81ff,0x8221,0x8294,0x82d9,0x82fe,0x82f9,
-0x8307,0x82e8,0x8300,0x82d5,0x833a,0x82eb,0x82d6,0x82f4,
-0x82ec,0x82e1,0x82f2,0x82f5,0x830c,0x82fb,0x82f6,0x82f0,
-0x82ea,0x82e4,0x82e0,0x82fa,0x82f3,0x82ed,0x8677,0x8674,
-0x867c,0x8673,0x8841,0x884e,0x8867,0x886a,0x8869,0x89d3,
-0x8a04,0x8a07,0x8d72,0x8fe3,0x8fe1,0x8fee,0x8fe0,0x90f1,
-0x90bd,0x90bf,0x90d5,0x90c5,0x90be,0x90c7,0x90cb,0x90c8,
-0x91d4,0x91d3,0x9654,0x964f,0x9651,0x9653,0x964a,0x964e,
-0x501e,0x5005,0x5007,0x5013,0x5022,0x5030,0x501b,0x4ff5,
-0x4ff4,0x5033,0x5037,0x502c,0x4ff6,0x4ff7,0x5017,0x501c,
-0x5020,0x5027,0x5035,0x502f,0x5031,0x500e,0x515a,0x5194,
-0x5193,0x51ca,0x51c4,0x51c5,0x51c8,0x51ce,0x5261,0x525a,
-0x5252,0x525e,0x525f,0x5255,0x5262,0x52cd,0x530e,0x539e,
-0x5526,0x54e2,0x5517,0x5512,0x54e7,0x54f3,0x54e4,0x551a,
-0x54ff,0x5504,0x5508,0x54eb,0x5511,0x5505,0x54f1,0x550a,
-0x54fb,0x54f7,0x54f8,0x54e0,0x550e,0x5503,0x550b,0x5701,
-0x5702,0x57cc,0x5832,0x57d5,0x57d2,0x57ba,0x57c6,0x57bd,
-0x57bc,0x57b8,0x57b6,0x57bf,0x57c7,0x57d0,0x57b9,0x57c1,
-0x590e,0x594a,0x5a19,0x5a16,0x5a2d,0x5a2e,0x5a15,0x5a0f,
-0x5a17,0x5a0a,0x5a1e,0x5a33,0x5b6c,0x5ba7,0x5bad,0x5bac,
-0x5c03,0x5c56,0x5c54,0x5cec,0x5cff,0x5cee,0x5cf1,0x5cf7,
-0x5d00,0x5cf9,0x5e29,0x5e28,0x5ea8,0x5eae,0x5eaa,0x5eac,
-0x5f33,0x5f30,0x5f67,0x605d,0x605a,0x6067,0x6041,0x60a2,
-0x6088,0x6080,0x6092,0x6081,0x609d,0x6083,0x6095,0x609b,
-0x6097,0x6087,0x609c,0x608e,0x6219,0x6246,0x62f2,0x6310,
-0x6356,0x632c,0x6344,0x6345,0x6336,0x6343,0x63e4,0x6339,
-0x634b,0x634a,0x633c,0x6329,0x6341,0x6334,0x6358,0x6354,
-0x6359,0x632d,0x6347,0x6333,0x635a,0x6351,0x6338,0x6357,
-0x6340,0x6348,0x654a,0x6546,0x65c6,0x65c3,0x65c4,0x65c2,
-0x664a,0x665f,0x6647,0x6651,0x6712,0x6713,0x681f,0x681a,
-0x6849,0x6832,0x6833,0x683b,0x684b,0x684f,0x6816,0x6831,
-0x681c,0x6835,0x682b,0x682d,0x682f,0x684e,0x6844,0x6834,
-0x681d,0x6812,0x6814,0x6826,0x6828,0x682e,0x684d,0x683a,
-0x6825,0x6820,0x6b2c,0x6b2f,0x6b2d,0x6b31,0x6b34,0x6b6d,
-0x8082,0x6b88,0x6be6,0x6be4,0x6be8,0x6be3,0x6be2,0x6be7,
-0x6c25,0x6d7a,0x6d63,0x6d64,0x6d76,0x6d0d,0x6d61,0x6d92,
-0x6d58,0x6d62,0x6d6d,0x6d6f,0x6d91,0x6d8d,0x6def,0x6d7f,
-0x6d86,0x6d5e,0x6d67,0x6d60,0x6d97,0x6d70,0x6d7c,0x6d5f,
-0x6d82,0x6d98,0x6d2f,0x6d68,0x6d8b,0x6d7e,0x6d80,0x6d84,
-0x6d16,0x6d83,0x6d7b,0x6d7d,0x6d75,0x6d90,0x70dc,0x70d3,
-0x70d1,0x70dd,0x70cb,0x7f39,0x70e2,0x70d7,0x70d2,0x70de,
-0x70e0,0x70d4,0x70cd,0x70c5,0x70c6,0x70c7,0x70da,0x70ce,
-0x70e1,0x7242,0x7278,0x7277,0x7276,0x7300,0x72fa,0x72f4,
-0x72fe,0x72f6,0x72f3,0x72fb,0x7301,0x73d3,0x73d9,0x73e5,
-0x73d6,0x73bc,0x73e7,0x73e3,0x73e9,0x73dc,0x73d2,0x73db,
-0x73d4,0x73dd,0x73da,0x73d7,0x73d8,0x73e8,0x74de,0x74df,
-0x74f4,0x74f5,0x7521,0x755b,0x755f,0x75b0,0x75c1,0x75bb,
-0x75c4,0x75c0,0x75bf,0x75b6,0x75ba,0x768a,0x76c9,0x771d,
-0x771b,0x7710,0x7713,0x7712,0x7723,0x7711,0x7715,0x7719,
-0x771a,0x7722,0x7727,0x7823,0x782c,0x7822,0x7835,0x782f,
-0x7828,0x782e,0x782b,0x7821,0x7829,0x7833,0x782a,0x7831,
-0x7954,0x795b,0x794f,0x795c,0x7953,0x7952,0x7951,0x79eb,
-0x79ec,0x79e0,0x79ee,0x79ed,0x79ea,0x79dc,0x79de,0x79dd,
-0x7a86,0x7a89,0x7a85,0x7a8b,0x7a8c,0x7a8a,0x7a87,0x7ad8,
-0x7b10,0x7b04,0x7b13,0x7b05,0x7b0f,0x7b08,0x7b0a,0x7b0e,
-0x7b09,0x7b12,0x7c84,0x7c91,0x7c8a,0x7c8c,0x7c88,0x7c8d,
-0x7c85,0x7d1e,0x7d1d,0x7d11,0x7d0e,0x7d18,0x7d16,0x7d13,
-0x7d1f,0x7d12,0x7d0f,0x7d0c,0x7f5c,0x7f61,0x7f5e,0x7f60,
-0x7f5d,0x7f5b,0x7f96,0x7f92,0x7fc3,0x7fc2,0x7fc0,0x8016,
-0x803e,0x8039,0x80fa,0x80f2,0x80f9,0x80f5,0x8101,0x80fb,
-0x8100,0x8201,0x822f,0x8225,0x8333,0x832d,0x8344,0x8319,
-0x8351,0x8325,0x8356,0x833f,0x8341,0x8326,0x831c,0x8322,
-0x8342,0x834e,0x831b,0x832a,0x8308,0x833c,0x834d,0x8316,
-0x8324,0x8320,0x8337,0x832f,0x8329,0x8347,0x8345,0x834c,
-0x8353,0x831e,0x832c,0x834b,0x8327,0x8348,0x8653,0x8652,
-0x86a2,0x86a8,0x8696,0x868d,0x8691,0x869e,0x8687,0x8697,
-0x8686,0x868b,0x869a,0x8685,0x86a5,0x8699,0x86a1,0x86a7,
-0x8695,0x8698,0x868e,0x869d,0x8690,0x8694,0x8843,0x8844,
-0x886d,0x8875,0x8876,0x8872,0x8880,0x8871,0x887f,0x886f,
-0x8883,0x887e,0x8874,0x887c,0x8a12,0x8c47,0x8c57,0x8c7b,
-0x8ca4,0x8ca3,0x8d76,0x8d78,0x8db5,0x8db7,0x8db6,0x8ed1,
-0x8ed3,0x8ffe,0x8ff5,0x9002,0x8fff,0x8ffb,0x9004,0x8ffc,
-0x8ff6,0x90d6,0x90e0,0x90d9,0x90da,0x90e3,0x90df,0x90e5,
-0x90d8,0x90db,0x90d7,0x90dc,0x90e4,0x9150,0x914e,0x914f,
-0x91d5,0x91e2,0x91da,0x965c,0x965f,0x96bc,0x98e3,0x9adf,
-0x9b2f,0x4e7f,0x5070,0x506a,0x5061,0x505e,0x5060,0x5053,
-0x504b,0x505d,0x5072,0x5048,0x504d,0x5041,0x505b,0x504a,
-0x5062,0x5015,0x5045,0x505f,0x5069,0x506b,0x5063,0x5064,
-0x5046,0x5040,0x506e,0x5073,0x5057,0x5051,0x51d0,0x526b,
-0x526d,0x526c,0x526e,0x52d6,0x52d3,0x532d,0x539c,0x5575,
-0x5576,0x553c,0x554d,0x5550,0x5534,0x552a,0x5551,0x5562,
-0x5536,0x5535,0x5530,0x5552,0x5545,0x550c,0x5532,0x5565,
-0x554e,0x5539,0x5548,0x552d,0x553b,0x5540,0x554b,0x570a,
-0x5707,0x57fb,0x5814,0x57e2,0x57f6,0x57dc,0x57f4,0x5800,
-0x57ed,0x57fd,0x5808,0x57f8,0x580b,0x57f3,0x57cf,0x5807,
-0x57ee,0x57e3,0x57f2,0x57e5,0x57ec,0x57e1,0x580e,0x57fc,
-0x5810,0x57e7,0x5801,0x580c,0x57f1,0x57e9,0x57f0,0x580d,
-0x5804,0x595c,0x5a60,0x5a58,0x5a55,0x5a67,0x5a5e,0x5a38,
-0x5a35,0x5a6d,0x5a50,0x5a5f,0x5a65,0x5a6c,0x5a53,0x5a64,
-0x5a57,0x5a43,0x5a5d,0x5a52,0x5a44,0x5a5b,0x5a48,0x5a8e,
-0x5a3e,0x5a4d,0x5a39,0x5a4c,0x5a70,0x5a69,0x5a47,0x5a51,
-0x5a56,0x5a42,0x5a5c,0x5b72,0x5b6e,0x5bc1,0x5bc0,0x5c59,
-0x5d1e,0x5d0b,0x5d1d,0x5d1a,0x5d20,0x5d0c,0x5d28,0x5d0d,
-0x5d26,0x5d25,0x5d0f,0x5d30,0x5d12,0x5d23,0x5d1f,0x5d2e,
-0x5e3e,0x5e34,0x5eb1,0x5eb4,0x5eb9,0x5eb2,0x5eb3,0x5f36,
-0x5f38,0x5f9b,0x5f96,0x5f9f,0x608a,0x6090,0x6086,0x60be,
-0x60b0,0x60ba,0x60d3,0x60d4,0x60cf,0x60e4,0x60d9,0x60dd,
-0x60c8,0x60b1,0x60db,0x60b7,0x60ca,0x60bf,0x60c3,0x60cd,
-0x60c0,0x6332,0x6365,0x638a,0x6382,0x637d,0x63bd,0x639e,
-0x63ad,0x639d,0x6397,0x63ab,0x638e,0x636f,0x6387,0x6390,
-0x636e,0x63af,0x6375,0x639c,0x636d,0x63ae,0x637c,0x63a4,
-0x633b,0x639f,0x6378,0x6385,0x6381,0x6391,0x638d,0x6370,
-0x6553,0x65cd,0x6665,0x6661,0x665b,0x6659,0x665c,0x6662,
-0x6718,0x6879,0x6887,0x6890,0x689c,0x686d,0x686e,0x68ae,
-0x68ab,0x6956,0x686f,0x68a3,0x68ac,0x68a9,0x6875,0x6874,
-0x68b2,0x688f,0x6877,0x6892,0x687c,0x686b,0x6872,0x68aa,
-0x6880,0x6871,0x687e,0x689b,0x6896,0x688b,0x68a0,0x6889,
-0x68a4,0x6878,0x687b,0x6891,0x688c,0x688a,0x687d,0x6b36,
-0x6b33,0x6b37,0x6b38,0x6b91,0x6b8f,0x6b8d,0x6b8e,0x6b8c,
-0x6c2a,0x6dc0,0x6dab,0x6db4,0x6db3,0x6e74,0x6dac,0x6de9,
-0x6de2,0x6db7,0x6df6,0x6dd4,0x6e00,0x6dc8,0x6de0,0x6ddf,
-0x6dd6,0x6dbe,0x6de5,0x6ddc,0x6ddd,0x6ddb,0x6df4,0x6dca,
-0x6dbd,0x6ded,0x6df0,0x6dba,0x6dd5,0x6dc2,0x6dcf,0x6dc9,
-0x6dd0,0x6df2,0x6dd3,0x6dfd,0x6dd7,0x6dcd,0x6de3,0x6dbb,
-0x70fa,0x710d,0x70f7,0x7117,0x70f4,0x710c,0x70f0,0x7104,
-0x70f3,0x7110,0x70fc,0x70ff,0x7106,0x7113,0x7100,0x70f8,
-0x70f6,0x710b,0x7102,0x710e,0x727e,0x727b,0x727c,0x727f,
-0x731d,0x7317,0x7307,0x7311,0x7318,0x730a,0x7308,0x72ff,
-0x730f,0x731e,0x7388,0x73f6,0x73f8,0x73f5,0x7404,0x7401,
-0x73fd,0x7407,0x7400,0x73fa,0x73fc,0x73ff,0x740c,0x740b,
-0x73f4,0x7408,0x7564,0x7563,0x75ce,0x75d2,0x75cf,0x75cb,
-0x75cc,0x75d1,0x75d0,0x768f,0x7689,0x76d3,0x7739,0x772f,
-0x772d,0x7731,0x7732,0x7734,0x7733,0x773d,0x7725,0x773b,
-0x7735,0x7848,0x7852,0x7849,0x784d,0x784a,0x784c,0x7826,
-0x7845,0x7850,0x7964,0x7967,0x7969,0x796a,0x7963,0x796b,
-0x7961,0x79bb,0x79fa,0x79f8,0x79f6,0x79f7,0x7a8f,0x7a94,
-0x7a90,0x7b35,0x7b3b,0x7b34,0x7b25,0x7b30,0x7b22,0x7b24,
-0x7b33,0x7b18,0x7b2a,0x7b1d,0x7b31,0x7b2b,0x7b2d,0x7b2f,
-0x7b32,0x7b38,0x7b1a,0x7b23,0x7c94,0x7c98,0x7c96,0x7ca3,
-0x7d35,0x7d3d,0x7d38,0x7d36,0x7d3a,0x7d45,0x7d2c,0x7d29,
-0x7d41,0x7d47,0x7d3e,0x7d3f,0x7d4a,0x7d3b,0x7d28,0x7f63,
-0x7f95,0x7f9c,0x7f9d,0x7f9b,0x7fca,0x7fcb,0x7fcd,0x7fd0,
-0x7fd1,0x7fc7,0x7fcf,0x7fc9,0x801f,0x801e,0x801b,0x8047,
-0x8043,0x8048,0x8118,0x8125,0x8119,0x811b,0x812d,0x811f,
-0x812c,0x811e,0x8121,0x8115,0x8127,0x811d,0x8122,0x8211,
-0x8238,0x8233,0x823a,0x8234,0x8232,0x8274,0x8390,0x83a3,
-0x83a8,0x838d,0x837a,0x8373,0x83a4,0x8374,0x838f,0x8381,
-0x8395,0x8399,0x8375,0x8394,0x83a9,0x837d,0x8383,0x838c,
-0x839d,0x839b,0x83aa,0x838b,0x837e,0x83a5,0x83af,0x8388,
-0x8397,0x83b0,0x837f,0x83a6,0x8387,0x83ae,0x8376,0x8659,
-0x8656,0x86bf,0x86b7,0x86c2,0x86c1,0x86c5,0x86ba,0x86b0,
-0x86c8,0x86b9,0x86b3,0x86b8,0x86cc,0x86b4,0x86bb,0x86bc,
-0x86c3,0x86bd,0x86be,0x8852,0x8889,0x8895,0x88a8,0x88a2,
-0x88aa,0x889a,0x8891,0x88a1,0x889f,0x8898,0x88a7,0x8899,
-0x889b,0x8897,0x88a4,0x88ac,0x888c,0x8893,0x888e,0x8982,
-0x89d6,0x89d9,0x89d5,0x8a30,0x8a27,0x8a2c,0x8a1e,0x8c39,
-0x8c3b,0x8c5c,0x8c5d,0x8c7d,0x8ca5,0x8d7d,0x8d7b,0x8d79,
-0x8dbc,0x8dc2,0x8db9,0x8dbf,0x8dc1,0x8ed8,0x8ede,0x8edd,
-0x8edc,0x8ed7,0x8ee0,0x8ee1,0x9024,0x900b,0x9011,0x901c,
-0x900c,0x9021,0x90ef,0x90ea,0x90f0,0x90f4,0x90f2,0x90f3,
-0x90d4,0x90eb,0x90ec,0x90e9,0x9156,0x9158,0x915a,0x9153,
-0x9155,0x91ec,0x91f4,0x91f1,0x91f3,0x91f8,0x91e4,0x91f9,
-0x91ea,0x91eb,0x91f7,0x91e8,0x91ee,0x957a,0x9586,0x9588,
-0x967c,0x966d,0x966b,0x9671,0x966f,0x96bf,0x976a,0x9804,
-0x98e5,0x9997,0x509b,0x5095,0x5094,0x509e,0x508b,0x50a3,
-0x5083,0x508c,0x508e,0x509d,0x5068,0x509c,0x5092,0x5082,
-0x5087,0x515f,0x51d4,0x5312,0x5311,0x53a4,0x53a7,0x5591,
-0x55a8,0x55a5,0x55ad,0x5577,0x5645,0x55a2,0x5593,0x5588,
-0x558f,0x55b5,0x5581,0x55a3,0x5592,0x55a4,0x557d,0x558c,
-0x55a6,0x557f,0x5595,0x55a1,0x558e,0x570c,0x5829,0x5837,
-0x5819,0x581e,0x5827,0x5823,0x5828,0x57f5,0x5848,0x5825,
-0x581c,0x581b,0x5833,0x583f,0x5836,0x582e,0x5839,0x5838,
-0x582d,0x582c,0x583b,0x5961,0x5aaf,0x5a94,0x5a9f,0x5a7a,
-0x5aa2,0x5a9e,0x5a78,0x5aa6,0x5a7c,0x5aa5,0x5aac,0x5a95,
-0x5aae,0x5a37,0x5a84,0x5a8a,0x5a97,0x5a83,0x5a8b,0x5aa9,
-0x5a7b,0x5a7d,0x5a8c,0x5a9c,0x5a8f,0x5a93,0x5a9d,0x5bea,
-0x5bcd,0x5bcb,0x5bd4,0x5bd1,0x5bca,0x5bce,0x5c0c,0x5c30,
-0x5d37,0x5d43,0x5d6b,0x5d41,0x5d4b,0x5d3f,0x5d35,0x5d51,
-0x5d4e,0x5d55,0x5d33,0x5d3a,0x5d52,0x5d3d,0x5d31,0x5d59,
-0x5d42,0x5d39,0x5d49,0x5d38,0x5d3c,0x5d32,0x5d36,0x5d40,
-0x5d45,0x5e44,0x5e41,0x5f58,0x5fa6,0x5fa5,0x5fab,0x60c9,
-0x60b9,0x60cc,0x60e2,0x60ce,0x60c4,0x6114,0x60f2,0x610a,
-0x6116,0x6105,0x60f5,0x6113,0x60f8,0x60fc,0x60fe,0x60c1,
-0x6103,0x6118,0x611d,0x6110,0x60ff,0x6104,0x610b,0x624a,
-0x6394,0x63b1,0x63b0,0x63ce,0x63e5,0x63e8,0x63ef,0x63c3,
-0x649d,0x63f3,0x63ca,0x63e0,0x63f6,0x63d5,0x63f2,0x63f5,
-0x6461,0x63df,0x63be,0x63dd,0x63dc,0x63c4,0x63d8,0x63d3,
-0x63c2,0x63c7,0x63cc,0x63cb,0x63c8,0x63f0,0x63d7,0x63d9,
-0x6532,0x6567,0x656a,0x6564,0x655c,0x6568,0x6565,0x658c,
-0x659d,0x659e,0x65ae,0x65d0,0x65d2,0x667c,0x666c,0x667b,
-0x6680,0x6671,0x6679,0x666a,0x6672,0x6701,0x690c,0x68d3,
-0x6904,0x68dc,0x692a,0x68ec,0x68ea,0x68f1,0x690f,0x68d6,
-0x68f7,0x68eb,0x68e4,0x68f6,0x6913,0x6910,0x68f3,0x68e1,
-0x6907,0x68cc,0x6908,0x6970,0x68b4,0x6911,0x68ef,0x68c6,
-0x6914,0x68f8,0x68d0,0x68fd,0x68fc,0x68e8,0x690b,0x690a,
-0x6917,0x68ce,0x68c8,0x68dd,0x68de,0x68e6,0x68f4,0x68d1,
-0x6906,0x68d4,0x68e9,0x6915,0x6925,0x68c7,0x6b39,0x6b3b,
-0x6b3f,0x6b3c,0x6b94,0x6b97,0x6b99,0x6b95,0x6bbd,0x6bf0,
-0x6bf2,0x6bf3,0x6c30,0x6dfc,0x6e46,0x6e47,0x6e1f,0x6e49,
-0x6e88,0x6e3c,0x6e3d,0x6e45,0x6e62,0x6e2b,0x6e3f,0x6e41,
-0x6e5d,0x6e73,0x6e1c,0x6e33,0x6e4b,0x6e40,0x6e51,0x6e3b,
-0x6e03,0x6e2e,0x6e5e,0x6e68,0x6e5c,0x6e61,0x6e31,0x6e28,
-0x6e60,0x6e71,0x6e6b,0x6e39,0x6e22,0x6e30,0x6e53,0x6e65,
-0x6e27,0x6e78,0x6e64,0x6e77,0x6e55,0x6e79,0x6e52,0x6e66,
-0x6e35,0x6e36,0x6e5a,0x7120,0x711e,0x712f,0x70fb,0x712e,
-0x7131,0x7123,0x7125,0x7122,0x7132,0x711f,0x7128,0x713a,
-0x711b,0x724b,0x725a,0x7288,0x7289,0x7286,0x7285,0x728b,
-0x7312,0x730b,0x7330,0x7322,0x7331,0x7333,0x7327,0x7332,
-0x732d,0x7326,0x7323,0x7335,0x730c,0x742e,0x742c,0x7430,
-0x742b,0x7416,0x741a,0x7421,0x742d,0x7431,0x7424,0x7423,
-0x741d,0x7429,0x7420,0x7432,0x74fb,0x752f,0x756f,0x756c,
-0x75e7,0x75da,0x75e1,0x75e6,0x75dd,0x75df,0x75e4,0x75d7,
-0x7695,0x7692,0x76da,0x7746,0x7747,0x7744,0x774d,0x7745,
-0x774a,0x774e,0x774b,0x774c,0x77de,0x77ec,0x7860,0x7864,
-0x7865,0x785c,0x786d,0x7871,0x786a,0x786e,0x7870,0x7869,
-0x7868,0x785e,0x7862,0x7974,0x7973,0x7972,0x7970,0x7a02,
-0x7a0a,0x7a03,0x7a0c,0x7a04,0x7a99,0x7ae6,0x7ae4,0x7b4a,
-0x7b47,0x7b44,0x7b48,0x7b4c,0x7b4e,0x7b40,0x7b58,0x7b45,
-0x7ca2,0x7c9e,0x7ca8,0x7ca1,0x7d58,0x7d6f,0x7d63,0x7d53,
-0x7d56,0x7d67,0x7d6a,0x7d4f,0x7d6d,0x7d5c,0x7d6b,0x7d52,
-0x7d54,0x7d69,0x7d51,0x7d5f,0x7d4e,0x7f3e,0x7f3f,0x7f65,
-0x7f66,0x7fa2,0x7fa0,0x7fa1,0x7fd7,0x8051,0x804f,0x8050,
-0x80fe,0x80d4,0x8143,0x814a,0x8152,0x814f,0x8147,0x813d,
-0x814d,0x813a,0x81e6,0x81ee,0x81f7,0x81f8,0x81f9,0x8204,
-0x823c,0x823d,0x823f,0x8275,0x833b,0x83cf,0x83f9,0x8423,
-0x83c0,0x83e8,0x8412,0x83e7,0x83e4,0x83fc,0x83f6,0x8410,
-0x83c6,0x83c8,0x83eb,0x83e3,0x83bf,0x8401,0x83dd,0x83e5,
-0x83d8,0x83ff,0x83e1,0x83cb,0x83ce,0x83d6,0x83f5,0x83c9,
-0x8409,0x840f,0x83de,0x8411,0x8406,0x83c2,0x83f3,0x83d5,
-0x83fa,0x83c7,0x83d1,0x83ea,0x8413,0x839a,0x83c3,0x83ec,
-0x83ee,0x83c4,0x83fb,0x83d7,0x83e2,0x841b,0x83db,0x83fe,
-0x86d8,0x86e2,0x86e6,0x86d3,0x86e3,0x86da,0x86ea,0x86dd,
-0x86eb,0x86dc,0x86ec,0x86e9,0x86d7,0x86e8,0x86d1,0x8848,
-0x8856,0x8855,0x88ba,0x88d7,0x88b9,0x88b8,0x88c0,0x88be,
-0x88b6,0x88bc,0x88b7,0x88bd,0x88b2,0x8901,0x88c9,0x8995,
-0x8998,0x8997,0x89dd,0x89da,0x89db,0x8a4e,0x8a4d,0x8a39,
-0x8a59,0x8a40,0x8a57,0x8a58,0x8a44,0x8a45,0x8a52,0x8a48,
-0x8a51,0x8a4a,0x8a4c,0x8a4f,0x8c5f,0x8c81,0x8c80,0x8cba,
-0x8cbe,0x8cb0,0x8cb9,0x8cb5,0x8d84,0x8d80,0x8d89,0x8dd8,
-0x8dd3,0x8dcd,0x8dc7,0x8dd6,0x8ddc,0x8dcf,0x8dd5,0x8dd9,
-0x8dc8,0x8dd7,0x8dc5,0x8eef,0x8ef7,0x8efa,0x8ef9,0x8ee6,
-0x8eee,0x8ee5,0x8ef5,0x8ee7,0x8ee8,0x8ef6,0x8eeb,0x8ef1,
-0x8eec,0x8ef4,0x8ee9,0x902d,0x9034,0x902f,0x9106,0x912c,
-0x9104,0x90ff,0x90fc,0x9108,0x90f9,0x90fb,0x9101,0x9100,
-0x9107,0x9105,0x9103,0x9161,0x9164,0x915f,0x9162,0x9160,
-0x9201,0x920a,0x9225,0x9203,0x921a,0x9226,0x920f,0x920c,
-0x9200,0x9212,0x91ff,0x91fd,0x9206,0x9204,0x9227,0x9202,
-0x921c,0x9224,0x9219,0x9217,0x9205,0x9216,0x957b,0x958d,
-0x958c,0x9590,0x9687,0x967e,0x9688,0x9689,0x9683,0x9680,
-0x96c2,0x96c8,0x96c3,0x96f1,0x96f0,0x976c,0x9770,0x976e,
-0x9807,0x98a9,0x98eb,0x9ce6,0x9ef9,0x4e83,0x4e84,0x4eb6,
-0x50bd,0x50bf,0x50c6,0x50ae,0x50c4,0x50ca,0x50b4,0x50c8,
-0x50c2,0x50b0,0x50c1,0x50ba,0x50b1,0x50cb,0x50c9,0x50b6,
-0x50b8,0x51d7,0x527a,0x5278,0x527b,0x527c,0x55c3,0x55db,
-0x55cc,0x55d0,0x55cb,0x55ca,0x55dd,0x55c0,0x55d4,0x55c4,
-0x55e9,0x55bf,0x55d2,0x558d,0x55cf,0x55d5,0x55e2,0x55d6,
-0x55c8,0x55f2,0x55cd,0x55d9,0x55c2,0x5714,0x5853,0x5868,
-0x5864,0x584f,0x584d,0x5849,0x586f,0x5855,0x584e,0x585d,
-0x5859,0x5865,0x585b,0x583d,0x5863,0x5871,0x58fc,0x5ac7,
-0x5ac4,0x5acb,0x5aba,0x5ab8,0x5ab1,0x5ab5,0x5ab0,0x5abf,
-0x5ac8,0x5abb,0x5ac6,0x5ab7,0x5ac0,0x5aca,0x5ab4,0x5ab6,
-0x5acd,0x5ab9,0x5a90,0x5bd6,0x5bd8,0x5bd9,0x5c1f,0x5c33,
-0x5d71,0x5d63,0x5d4a,0x5d65,0x5d72,0x5d6c,0x5d5e,0x5d68,
-0x5d67,0x5d62,0x5df0,0x5e4f,0x5e4e,0x5e4a,0x5e4d,0x5e4b,
-0x5ec5,0x5ecc,0x5ec6,0x5ecb,0x5ec7,0x5f40,0x5faf,0x5fad,
-0x60f7,0x6149,0x614a,0x612b,0x6145,0x6136,0x6132,0x612e,
-0x6146,0x612f,0x614f,0x6129,0x6140,0x6220,0x9168,0x6223,
-0x6225,0x6224,0x63c5,0x63f1,0x63eb,0x6410,0x6412,0x6409,
-0x6420,0x6424,0x6433,0x6443,0x641f,0x6415,0x6418,0x6439,
-0x6437,0x6422,0x6423,0x640c,0x6426,0x6430,0x6428,0x6441,
-0x6435,0x642f,0x640a,0x641a,0x6440,0x6425,0x6427,0x640b,
-0x63e7,0x641b,0x642e,0x6421,0x640e,0x656f,0x6592,0x65d3,
-0x6686,0x668c,0x6695,0x6690,0x668b,0x668a,0x6699,0x6694,
-0x6678,0x6720,0x6966,0x695f,0x6938,0x694e,0x6962,0x6971,
-0x693f,0x6945,0x696a,0x6939,0x6942,0x6957,0x6959,0x697a,
-0x6948,0x6949,0x6935,0x696c,0x6933,0x693d,0x6965,0x68f0,
-0x6978,0x6934,0x6969,0x6940,0x696f,0x6944,0x6976,0x6958,
-0x6941,0x6974,0x694c,0x693b,0x694b,0x6937,0x695c,0x694f,
-0x6951,0x6932,0x6952,0x692f,0x697b,0x693c,0x6b46,0x6b45,
-0x6b43,0x6b42,0x6b48,0x6b41,0x6b9b,0x6bfb,0x6bfc,0x6bf9,
-0x6bf7,0x6bf8,0x6e9b,0x6ed6,0x6ec8,0x6e8f,0x6ec0,0x6e9f,
-0x6e93,0x6e94,0x6ea0,0x6eb1,0x6eb9,0x6ec6,0x6ed2,0x6ebd,
-0x6ec1,0x6e9e,0x6ec9,0x6eb7,0x6eb0,0x6ecd,0x6ea6,0x6ecf,
-0x6eb2,0x6ebe,0x6ec3,0x6edc,0x6ed8,0x6e99,0x6e92,0x6e8e,
-0x6e8d,0x6ea4,0x6ea1,0x6ebf,0x6eb3,0x6ed0,0x6eca,0x6e97,
-0x6eae,0x6ea3,0x7147,0x7154,0x7152,0x7163,0x7160,0x7141,
-0x715d,0x7162,0x7172,0x7178,0x716a,0x7161,0x7142,0x7158,
-0x7143,0x714b,0x7170,0x715f,0x7150,0x7153,0x7144,0x714d,
-0x715a,0x724f,0x728d,0x728c,0x7291,0x7290,0x728e,0x733c,
-0x7342,0x733b,0x733a,0x7340,0x734a,0x7349,0x7444,0x744a,
-0x744b,0x7452,0x7451,0x7457,0x7440,0x744f,0x7450,0x744e,
-0x7442,0x7446,0x744d,0x7454,0x74e1,0x74ff,0x74fe,0x74fd,
-0x751d,0x7579,0x7577,0x6983,0x75ef,0x760f,0x7603,0x75f7,
-0x75fe,0x75fc,0x75f9,0x75f8,0x7610,0x75fb,0x75f6,0x75ed,
-0x75f5,0x75fd,0x7699,0x76b5,0x76dd,0x7755,0x775f,0x7760,
-0x7752,0x7756,0x775a,0x7769,0x7767,0x7754,0x7759,0x776d,
-0x77e0,0x7887,0x789a,0x7894,0x788f,0x7884,0x7895,0x7885,
-0x7886,0x78a1,0x7883,0x7879,0x7899,0x7880,0x7896,0x787b,
-0x797c,0x7982,0x797d,0x7979,0x7a11,0x7a18,0x7a19,0x7a12,
-0x7a17,0x7a15,0x7a22,0x7a13,0x7a1b,0x7a10,0x7aa3,0x7aa2,
-0x7a9e,0x7aeb,0x7b66,0x7b64,0x7b6d,0x7b74,0x7b69,0x7b72,
-0x7b65,0x7b73,0x7b71,0x7b70,0x7b61,0x7b78,0x7b76,0x7b63,
-0x7cb2,0x7cb4,0x7caf,0x7d88,0x7d86,0x7d80,0x7d8d,0x7d7f,
-0x7d85,0x7d7a,0x7d8e,0x7d7b,0x7d83,0x7d7c,0x7d8c,0x7d94,
-0x7d84,0x7d7d,0x7d92,0x7f6d,0x7f6b,0x7f67,0x7f68,0x7f6c,
-0x7fa6,0x7fa5,0x7fa7,0x7fdb,0x7fdc,0x8021,0x8164,0x8160,
-0x8177,0x815c,0x8169,0x815b,0x8162,0x8172,0x6721,0x815e,
-0x8176,0x8167,0x816f,0x8144,0x8161,0x821d,0x8249,0x8244,
-0x8240,0x8242,0x8245,0x84f1,0x843f,0x8456,0x8476,0x8479,
-0x848f,0x848d,0x8465,0x8451,0x8440,0x8486,0x8467,0x8430,
-0x844d,0x847d,0x845a,0x8459,0x8474,0x8473,0x845d,0x8507,
-0x845e,0x8437,0x843a,0x8434,0x847a,0x8443,0x8478,0x8432,
-0x8445,0x8429,0x83d9,0x844b,0x842f,0x8442,0x842d,0x845f,
-0x8470,0x8439,0x844e,0x844c,0x8452,0x846f,0x84c5,0x848e,
-0x843b,0x8447,0x8436,0x8433,0x8468,0x847e,0x8444,0x842b,
-0x8460,0x8454,0x846e,0x8450,0x870b,0x8704,0x86f7,0x870c,
-0x86fa,0x86d6,0x86f5,0x874d,0x86f8,0x870e,0x8709,0x8701,
-0x86f6,0x870d,0x8705,0x88d6,0x88cb,0x88cd,0x88ce,0x88de,
-0x88db,0x88da,0x88cc,0x88d0,0x8985,0x899b,0x89df,0x89e5,
-0x89e4,0x89e1,0x89e0,0x89e2,0x89dc,0x89e6,0x8a76,0x8a86,
-0x8a7f,0x8a61,0x8a3f,0x8a77,0x8a82,0x8a84,0x8a75,0x8a83,
-0x8a81,0x8a74,0x8a7a,0x8c3c,0x8c4b,0x8c4a,0x8c65,0x8c64,
-0x8c66,0x8c86,0x8c84,0x8c85,0x8ccc,0x8d68,0x8d69,0x8d91,
-0x8d8c,0x8d8e,0x8d8f,0x8d8d,0x8d93,0x8d94,0x8d90,0x8d92,
-0x8df0,0x8de0,0x8dec,0x8df1,0x8dee,0x8dd0,0x8de9,0x8de3,
-0x8de2,0x8de7,0x8df2,0x8deb,0x8df4,0x8f06,0x8eff,0x8f01,
-0x8f00,0x8f05,0x8f07,0x8f08,0x8f02,0x8f0b,0x9052,0x903f,
-0x9044,0x9049,0x903d,0x9110,0x910d,0x910f,0x9111,0x9116,
-0x9114,0x910b,0x910e,0x916e,0x916f,0x9248,0x9252,0x9230,
-0x923a,0x9266,0x9233,0x9265,0x925e,0x9283,0x922e,0x924a,
-0x9246,0x926d,0x926c,0x924f,0x9260,0x9267,0x926f,0x9236,
-0x9261,0x9270,0x9231,0x9254,0x9263,0x9250,0x9272,0x924e,
-0x9253,0x924c,0x9256,0x9232,0x959f,0x959c,0x959e,0x959b,
-0x9692,0x9693,0x9691,0x9697,0x96ce,0x96fa,0x96fd,0x96f8,
-0x96f5,0x9773,0x9777,0x9778,0x9772,0x980f,0x980d,0x980e,
-0x98ac,0x98f6,0x98f9,0x99af,0x99b2,0x99b0,0x99b5,0x9aad,
-0x9aab,0x9b5b,0x9cea,0x9ced,0x9ce7,0x9e80,0x9efd,0x50e6,
-0x50d4,0x50d7,0x50e8,0x50f3,0x50db,0x50ea,0x50dd,0x50e4,
-0x50d3,0x50ec,0x50f0,0x50ef,0x50e3,0x50e0,0x51d8,0x5280,
-0x5281,0x52e9,0x52eb,0x5330,0x53ac,0x5627,0x5615,0x560c,
-0x5612,0x55fc,0x560f,0x561c,0x5601,0x5613,0x5602,0x55fa,
-0x561d,0x5604,0x55ff,0x55f9,0x5889,0x587c,0x5890,0x5898,
-0x5886,0x5881,0x587f,0x5874,0x588b,0x587a,0x5887,0x5891,
-0x588e,0x5876,0x5882,0x5888,0x587b,0x5894,0x588f,0x58fe,
-0x596b,0x5adc,0x5aee,0x5ae5,0x5ad5,0x5aea,0x5ada,0x5aed,
-0x5aeb,0x5af3,0x5ae2,0x5ae0,0x5adb,0x5aec,0x5ade,0x5add,
-0x5ad9,0x5ae8,0x5adf,0x5b77,0x5be0,0x5be3,0x5c63,0x5d82,
-0x5d80,0x5d7d,0x5d86,0x5d7a,0x5d81,0x5d77,0x5d8a,0x5d89,
-0x5d88,0x5d7e,0x5d7c,0x5d8d,0x5d79,0x5d7f,0x5e58,0x5e59,
-0x5e53,0x5ed8,0x5ed1,0x5ed7,0x5ece,0x5edc,0x5ed5,0x5ed9,
-0x5ed2,0x5ed4,0x5f44,0x5f43,0x5f6f,0x5fb6,0x612c,0x6128,
-0x6141,0x615e,0x6171,0x6173,0x6152,0x6153,0x6172,0x616c,
-0x6180,0x6174,0x6154,0x617a,0x615b,0x6165,0x613b,0x616a,
-0x6161,0x6156,0x6229,0x6227,0x622b,0x642b,0x644d,0x645b,
-0x645d,0x6474,0x6476,0x6472,0x6473,0x647d,0x6475,0x6466,
-0x64a6,0x644e,0x6482,0x645e,0x645c,0x644b,0x6453,0x6460,
-0x6450,0x647f,0x643f,0x646c,0x646b,0x6459,0x6465,0x6477,
-0x6573,0x65a0,0x66a1,0x66a0,0x669f,0x6705,0x6704,0x6722,
-0x69b1,0x69b6,0x69c9,0x69a0,0x69ce,0x6996,0x69b0,0x69ac,
-0x69bc,0x6991,0x6999,0x698e,0x69a7,0x698d,0x69a9,0x69be,
-0x69af,0x69bf,0x69c4,0x69bd,0x69a4,0x69d4,0x69b9,0x69ca,
-0x699a,0x69cf,0x69b3,0x6993,0x69aa,0x69a1,0x699e,0x69d9,
-0x6997,0x6990,0x69c2,0x69b5,0x69a5,0x69c6,0x6b4a,0x6b4d,
-0x6b4b,0x6b9e,0x6b9f,0x6ba0,0x6bc3,0x6bc4,0x6bfe,0x6ece,
-0x6ef5,0x6ef1,0x6f03,0x6f25,0x6ef8,0x6f37,0x6efb,0x6f2e,
-0x6f09,0x6f4e,0x6f19,0x6f1a,0x6f27,0x6f18,0x6f3b,0x6f12,
-0x6eed,0x6f0a,0x6f36,0x6f73,0x6ef9,0x6eee,0x6f2d,0x6f40,
-0x6f30,0x6f3c,0x6f35,0x6eeb,0x6f07,0x6f0e,0x6f43,0x6f05,
-0x6efd,0x6ef6,0x6f39,0x6f1c,0x6efc,0x6f3a,0x6f1f,0x6f0d,
-0x6f1e,0x6f08,0x6f21,0x7187,0x7190,0x7189,0x7180,0x7185,
-0x7182,0x718f,0x717b,0x7186,0x7181,0x7197,0x7244,0x7253,
-0x7297,0x7295,0x7293,0x7343,0x734d,0x7351,0x734c,0x7462,
-0x7473,0x7471,0x7475,0x7472,0x7467,0x746e,0x7500,0x7502,
-0x7503,0x757d,0x7590,0x7616,0x7608,0x760c,0x7615,0x7611,
-0x760a,0x7614,0x76b8,0x7781,0x777c,0x7785,0x7782,0x776e,
-0x7780,0x776f,0x777e,0x7783,0x78b2,0x78aa,0x78b4,0x78ad,
-0x78a8,0x787e,0x78ab,0x789e,0x78a5,0x78a0,0x78ac,0x78a2,
-0x78a4,0x7998,0x798a,0x798b,0x7996,0x7995,0x7994,0x7993,
-0x7997,0x7988,0x7992,0x7990,0x7a2b,0x7a4a,0x7a30,0x7a2f,
-0x7a28,0x7a26,0x7aa8,0x7aab,0x7aac,0x7aee,0x7b88,0x7b9c,
-0x7b8a,0x7b91,0x7b90,0x7b96,0x7b8d,0x7b8c,0x7b9b,0x7b8e,
-0x7b85,0x7b98,0x5284,0x7b99,0x7ba4,0x7b82,0x7cbb,0x7cbf,
-0x7cbc,0x7cba,0x7da7,0x7db7,0x7dc2,0x7da3,0x7daa,0x7dc1,
-0x7dc0,0x7dc5,0x7d9d,0x7dce,0x7dc4,0x7dc6,0x7dcb,0x7dcc,
-0x7daf,0x7db9,0x7d96,0x7dbc,0x7d9f,0x7da6,0x7dae,0x7da9,
-0x7da1,0x7dc9,0x7f73,0x7fe2,0x7fe3,0x7fe5,0x7fde,0x8024,
-0x805d,0x805c,0x8189,0x8186,0x8183,0x8187,0x818d,0x818c,
-0x818b,0x8215,0x8497,0x84a4,0x84a1,0x849f,0x84ba,0x84ce,
-0x84c2,0x84ac,0x84ae,0x84ab,0x84b9,0x84b4,0x84c1,0x84cd,
-0x84aa,0x849a,0x84b1,0x84d0,0x849d,0x84a7,0x84bb,0x84a2,
-0x8494,0x84c7,0x84cc,0x849b,0x84a9,0x84af,0x84a8,0x84d6,
-0x8498,0x84b6,0x84cf,0x84a0,0x84d7,0x84d4,0x84d2,0x84db,
-0x84b0,0x8491,0x8661,0x8733,0x8723,0x8728,0x876b,0x8740,
-0x872e,0x871e,0x8721,0x8719,0x871b,0x8743,0x872c,0x8741,
-0x873e,0x8746,0x8720,0x8732,0x872a,0x872d,0x873c,0x8712,
-0x873a,0x8731,0x8735,0x8742,0x8726,0x8727,0x8738,0x8724,
-0x871a,0x8730,0x8711,0x88f7,0x88e7,0x88f1,0x88f2,0x88fa,
-0x88fe,0x88ee,0x88fc,0x88f6,0x88fb,0x88f0,0x88ec,0x88eb,
-0x899d,0x89a1,0x899f,0x899e,0x89e9,0x89eb,0x89e8,0x8aab,
-0x8a99,0x8a8b,0x8a92,0x8a8f,0x8a96,0x8c3d,0x8c68,0x8c69,
-0x8cd5,0x8ccf,0x8cd7,0x8d96,0x8e09,0x8e02,0x8dff,0x8e0d,
-0x8dfd,0x8e0a,0x8e03,0x8e07,0x8e06,0x8e05,0x8dfe,0x8e00,
-0x8e04,0x8f10,0x8f11,0x8f0e,0x8f0d,0x9123,0x911c,0x9120,
-0x9122,0x911f,0x911d,0x911a,0x9124,0x9121,0x911b,0x917a,
-0x9172,0x9179,0x9173,0x92a5,0x92a4,0x9276,0x929b,0x927a,
-0x92a0,0x9294,0x92aa,0x928d,0x92a6,0x929a,0x92ab,0x9279,
-0x9297,0x927f,0x92a3,0x92ee,0x928e,0x9282,0x9295,0x92a2,
-0x927d,0x9288,0x92a1,0x928a,0x9286,0x928c,0x9299,0x92a7,
-0x927e,0x9287,0x92a9,0x929d,0x928b,0x922d,0x969e,0x96a1,
-0x96ff,0x9758,0x977d,0x977a,0x977e,0x9783,0x9780,0x9782,
-0x977b,0x9784,0x9781,0x977f,0x97ce,0x97cd,0x9816,0x98ad,
-0x98ae,0x9902,0x9900,0x9907,0x999d,0x999c,0x99c3,0x99b9,
-0x99bb,0x99ba,0x99c2,0x99bd,0x99c7,0x9ab1,0x9ae3,0x9ae7,
-0x9b3e,0x9b3f,0x9b60,0x9b61,0x9b5f,0x9cf1,0x9cf2,0x9cf5,
-0x9ea7,0x50ff,0x5103,0x5130,0x50f8,0x5106,0x5107,0x50f6,
-0x50fe,0x510b,0x510c,0x50fd,0x510a,0x528b,0x528c,0x52f1,
-0x52ef,0x5648,0x5642,0x564c,0x5635,0x5641,0x564a,0x5649,
-0x5646,0x5658,0x565a,0x5640,0x5633,0x563d,0x562c,0x563e,
-0x5638,0x562a,0x563a,0x571a,0x58ab,0x589d,0x58b1,0x58a0,
-0x58a3,0x58af,0x58ac,0x58a5,0x58a1,0x58ff,0x5aff,0x5af4,
-0x5afd,0x5af7,0x5af6,0x5b03,0x5af8,0x5b02,0x5af9,0x5b01,
-0x5b07,0x5b05,0x5b0f,0x5c67,0x5d99,0x5d97,0x5d9f,0x5d92,
-0x5da2,0x5d93,0x5d95,0x5da0,0x5d9c,0x5da1,0x5d9a,0x5d9e,
-0x5e69,0x5e5d,0x5e60,0x5e5c,0x7df3,0x5edb,0x5ede,0x5ee1,
-0x5f49,0x5fb2,0x618b,0x6183,0x6179,0x61b1,0x61b0,0x61a2,
-0x6189,0x619b,0x6193,0x61af,0x61ad,0x619f,0x6192,0x61aa,
-0x61a1,0x618d,0x6166,0x61b3,0x622d,0x646e,0x6470,0x6496,
-0x64a0,0x6485,0x6497,0x649c,0x648f,0x648b,0x648a,0x648c,
-0x64a3,0x649f,0x6468,0x64b1,0x6498,0x6576,0x657a,0x6579,
-0x657b,0x65b2,0x65b3,0x66b5,0x66b0,0x66a9,0x66b2,0x66b7,
-0x66aa,0x66af,0x6a00,0x6a06,0x6a17,0x69e5,0x69f8,0x6a15,
-0x69f1,0x69e4,0x6a20,0x69ff,0x69ec,0x69e2,0x6a1b,0x6a1d,
-0x69fe,0x6a27,0x69f2,0x69ee,0x6a14,0x69f7,0x69e7,0x6a40,
-0x6a08,0x69e6,0x69fb,0x6a0d,0x69fc,0x69eb,0x6a09,0x6a04,
-0x6a18,0x6a25,0x6a0f,0x69f6,0x6a26,0x6a07,0x69f4,0x6a16,
-0x6b51,0x6ba5,0x6ba3,0x6ba2,0x6ba6,0x6c01,0x6c00,0x6bff,
-0x6c02,0x6f41,0x6f26,0x6f7e,0x6f87,0x6fc6,0x6f92,0x6f8d,
-0x6f89,0x6f8c,0x6f62,0x6f4f,0x6f85,0x6f5a,0x6f96,0x6f76,
-0x6f6c,0x6f82,0x6f55,0x6f72,0x6f52,0x6f50,0x6f57,0x6f94,
-0x6f93,0x6f5d,0x6f00,0x6f61,0x6f6b,0x6f7d,0x6f67,0x6f90,
-0x6f53,0x6f8b,0x6f69,0x6f7f,0x6f95,0x6f63,0x6f77,0x6f6a,
-0x6f7b,0x71b2,0x71af,0x719b,0x71b0,0x71a0,0x719a,0x71a9,
-0x71b5,0x719d,0x71a5,0x719e,0x71a4,0x71a1,0x71aa,0x719c,
-0x71a7,0x71b3,0x7298,0x729a,0x7358,0x7352,0x735e,0x735f,
-0x7360,0x735d,0x735b,0x7361,0x735a,0x7359,0x7362,0x7487,
-0x7489,0x748a,0x7486,0x7481,0x747d,0x7485,0x7488,0x747c,
-0x7479,0x7508,0x7507,0x757e,0x7625,0x761e,0x7619,0x761d,
-0x761c,0x7623,0x761a,0x7628,0x761b,0x769c,0x769d,0x769e,
-0x769b,0x778d,0x778f,0x7789,0x7788,0x78cd,0x78bb,0x78cf,
-0x78cc,0x78d1,0x78ce,0x78d4,0x78c8,0x78c3,0x78c4,0x78c9,
-0x799a,0x79a1,0x79a0,0x799c,0x79a2,0x799b,0x6b76,0x7a39,
-0x7ab2,0x7ab4,0x7ab3,0x7bb7,0x7bcb,0x7bbe,0x7bac,0x7bce,
-0x7baf,0x7bb9,0x7bca,0x7bb5,0x7cc5,0x7cc8,0x7ccc,0x7ccb,
-0x7df7,0x7ddb,0x7dea,0x7de7,0x7dd7,0x7de1,0x7e03,0x7dfa,
-0x7de6,0x7df6,0x7df1,0x7df0,0x7dee,0x7ddf,0x7f76,0x7fac,
-0x7fb0,0x7fad,0x7fed,0x7feb,0x7fea,0x7fec,0x7fe6,0x7fe8,
-0x8064,0x8067,0x81a3,0x819f,0x819e,0x8195,0x81a2,0x8199,
-0x8197,0x8216,0x824f,0x8253,0x8252,0x8250,0x824e,0x8251,
-0x8524,0x853b,0x850f,0x8500,0x8529,0x850e,0x8509,0x850d,
-0x851f,0x850a,0x8527,0x851c,0x84fb,0x852b,0x84fa,0x8508,
-0x850c,0x84f4,0x852a,0x84f2,0x8515,0x84f7,0x84eb,0x84f3,
-0x84fc,0x8512,0x84ea,0x84e9,0x8516,0x84fe,0x8528,0x851d,
-0x852e,0x8502,0x84fd,0x851e,0x84f6,0x8531,0x8526,0x84e7,
-0x84e8,0x84f0,0x84ef,0x84f9,0x8518,0x8520,0x8530,0x850b,
-0x8519,0x852f,0x8662,0x8756,0x8763,0x8764,0x8777,0x87e1,
-0x8773,0x8758,0x8754,0x875b,0x8752,0x8761,0x875a,0x8751,
-0x875e,0x876d,0x876a,0x8750,0x874e,0x875f,0x875d,0x876f,
-0x876c,0x877a,0x876e,0x875c,0x8765,0x874f,0x877b,0x8775,
-0x8762,0x8767,0x8769,0x885a,0x8905,0x890c,0x8914,0x890b,
-0x8917,0x8918,0x8919,0x8906,0x8916,0x8911,0x890e,0x8909,
-0x89a2,0x89a4,0x89a3,0x89ed,0x89f0,0x89ec,0x8acf,0x8ac6,
-0x8ab8,0x8ad3,0x8ad1,0x8ad4,0x8ad5,0x8abb,0x8ad7,0x8abe,
-0x8ac0,0x8ac5,0x8ad8,0x8ac3,0x8aba,0x8abd,0x8ad9,0x8c3e,
-0x8c4d,0x8c8f,0x8ce5,0x8cdf,0x8cd9,0x8ce8,0x8cda,0x8cdd,
-0x8ce7,0x8da0,0x8d9c,0x8da1,0x8d9b,0x8e20,0x8e23,0x8e25,
-0x8e24,0x8e2e,0x8e15,0x8e1b,0x8e16,0x8e11,0x8e19,0x8e26,
-0x8e27,0x8e14,0x8e12,0x8e18,0x8e13,0x8e1c,0x8e17,0x8e1a,
-0x8f2c,0x8f24,0x8f18,0x8f1a,0x8f20,0x8f23,0x8f16,0x8f17,
-0x9073,0x9070,0x906f,0x9067,0x906b,0x912f,0x912b,0x9129,
-0x912a,0x9132,0x9126,0x912e,0x9185,0x9186,0x918a,0x9181,
-0x9182,0x9184,0x9180,0x92d0,0x92c3,0x92c4,0x92c0,0x92d9,
-0x92b6,0x92cf,0x92f1,0x92df,0x92d8,0x92e9,0x92d7,0x92dd,
-0x92cc,0x92ef,0x92c2,0x92e8,0x92ca,0x92c8,0x92ce,0x92e6,
-0x92cd,0x92d5,0x92c9,0x92e0,0x92de,0x92e7,0x92d1,0x92d3,
-0x92b5,0x92e1,0x9325,0x92c6,0x92b4,0x957c,0x95ac,0x95ab,
-0x95ae,0x95b0,0x96a4,0x96a2,0x96d3,0x9705,0x9708,0x9702,
-0x975a,0x978a,0x978e,0x9788,0x97d0,0x97cf,0x981e,0x981d,
-0x9826,0x9829,0x9828,0x9820,0x981b,0x9827,0x98b2,0x9908,
-0x98fa,0x9911,0x9914,0x9916,0x9917,0x9915,0x99dc,0x99cd,
-0x99cf,0x99d3,0x99d4,0x99ce,0x99c9,0x99d6,0x99d8,0x99cb,
-0x99d7,0x99cc,0x9ab3,0x9aec,0x9aeb,0x9af3,0x9af2,0x9af1,
-0x9b46,0x9b43,0x9b67,0x9b74,0x9b71,0x9b66,0x9b76,0x9b75,
-0x9b70,0x9b68,0x9b64,0x9b6c,0x9cfc,0x9cfa,0x9cfd,0x9cff,
-0x9cf7,0x9d07,0x9d00,0x9cf9,0x9cfb,0x9d08,0x9d05,0x9d04,
-0x9e83,0x9ed3,0x9f0f,0x9f10,0x511c,0x5113,0x5117,0x511a,
-0x5111,0x51de,0x5334,0x53e1,0x5670,0x5660,0x566e,0x5673,
-0x5666,0x5663,0x566d,0x5672,0x565e,0x5677,0x571c,0x571b,
-0x58c8,0x58bd,0x58c9,0x58bf,0x58ba,0x58c2,0x58bc,0x58c6,
-0x5b17,0x5b19,0x5b1b,0x5b21,0x5b14,0x5b13,0x5b10,0x5b16,
-0x5b28,0x5b1a,0x5b20,0x5b1e,0x5bef,0x5dac,0x5db1,0x5da9,
-0x5da7,0x5db5,0x5db0,0x5dae,0x5daa,0x5da8,0x5db2,0x5dad,
-0x5daf,0x5db4,0x5e67,0x5e68,0x5e66,0x5e6f,0x5ee9,0x5ee7,
-0x5ee6,0x5ee8,0x5ee5,0x5f4b,0x5fbc,0x5fbb,0x619d,0x61a8,
-0x6196,0x61c5,0x61b4,0x61c6,0x61c1,0x61cc,0x61ba,0x61bf,
-0x61b8,0x618c,0x64d7,0x64d6,0x64d0,0x64cf,0x64c9,0x64bd,
-0x6489,0x64c3,0x64db,0x64f3,0x64d9,0x6533,0x657f,0x657c,
-0x65a2,0x66c8,0x66be,0x66c0,0x66ca,0x66cb,0x66cf,0x66bd,
-0x66bb,0x66ba,0x66cc,0x6723,0x6a34,0x6a66,0x6a49,0x6a67,
-0x6a32,0x6a68,0x6a3e,0x6a5d,0x6a6d,0x6a76,0x6a5b,0x6a51,
-0x6a28,0x6a5a,0x6a3b,0x6a3f,0x6a41,0x6a6a,0x6a64,0x6a50,
-0x6a4f,0x6a54,0x6a6f,0x6a69,0x6a60,0x6a3c,0x6a5e,0x6a56,
-0x6a55,0x6a4d,0x6a4e,0x6a46,0x6b55,0x6b54,0x6b56,0x6ba7,
-0x6baa,0x6bab,0x6bc8,0x6bc7,0x6c04,0x6c03,0x6c06,0x6fad,
-0x6fcb,0x6fa3,0x6fc7,0x6fbc,0x6fce,0x6fc8,0x6f5e,0x6fc4,
-0x6fbd,0x6f9e,0x6fca,0x6fa8,0x7004,0x6fa5,0x6fae,0x6fba,
-0x6fac,0x6faa,0x6fcf,0x6fbf,0x6fb8,0x6fa2,0x6fc9,0x6fab,
-0x6fcd,0x6faf,0x6fb2,0x6fb0,0x71c5,0x71c2,0x71bf,0x71b8,
-0x71d6,0x71c0,0x71c1,0x71cb,0x71d4,0x71ca,0x71c7,0x71cf,
-0x71bd,0x71d8,0x71bc,0x71c6,0x71da,0x71db,0x729d,0x729e,
-0x7369,0x7366,0x7367,0x736c,0x7365,0x736b,0x736a,0x747f,
-0x749a,0x74a0,0x7494,0x7492,0x7495,0x74a1,0x750b,0x7580,
-0x762f,0x762d,0x7631,0x763d,0x7633,0x763c,0x7635,0x7632,
-0x7630,0x76bb,0x76e6,0x779a,0x779d,0x77a1,0x779c,0x779b,
-0x77a2,0x77a3,0x7795,0x7799,0x7797,0x78dd,0x78e9,0x78e5,
-0x78ea,0x78de,0x78e3,0x78db,0x78e1,0x78e2,0x78ed,0x78df,
-0x78e0,0x79a4,0x7a44,0x7a48,0x7a47,0x7ab6,0x7ab8,0x7ab5,
-0x7ab1,0x7ab7,0x7bde,0x7be3,0x7be7,0x7bdd,0x7bd5,0x7be5,
-0x7bda,0x7be8,0x7bf9,0x7bd4,0x7bea,0x7be2,0x7bdc,0x7beb,
-0x7bd8,0x7bdf,0x7cd2,0x7cd4,0x7cd7,0x7cd0,0x7cd1,0x7e12,
-0x7e21,0x7e17,0x7e0c,0x7e1f,0x7e20,0x7e13,0x7e0e,0x7e1c,
-0x7e15,0x7e1a,0x7e22,0x7e0b,0x7e0f,0x7e16,0x7e0d,0x7e14,
-0x7e25,0x7e24,0x7f43,0x7f7b,0x7f7c,0x7f7a,0x7fb1,0x7fef,
-0x802a,0x8029,0x806c,0x81b1,0x81a6,0x81ae,0x81b9,0x81b5,
-0x81ab,0x81b0,0x81ac,0x81b4,0x81b2,0x81b7,0x81a7,0x81f2,
-0x8255,0x8256,0x8257,0x8556,0x8545,0x856b,0x854d,0x8553,
-0x8561,0x8558,0x8540,0x8546,0x8564,0x8541,0x8562,0x8544,
-0x8551,0x8547,0x8563,0x853e,0x855b,0x8571,0x854e,0x856e,
-0x8575,0x8555,0x8567,0x8560,0x858c,0x8566,0x855d,0x8554,
-0x8565,0x856c,0x8663,0x8665,0x8664,0x87a4,0x879b,0x878f,
-0x8797,0x8793,0x8792,0x8788,0x8781,0x8796,0x8798,0x8779,
-0x8787,0x87a3,0x8785,0x8790,0x8791,0x879d,0x8784,0x8794,
-0x879c,0x879a,0x8789,0x891e,0x8926,0x8930,0x892d,0x892e,
-0x8927,0x8931,0x8922,0x8929,0x8923,0x892f,0x892c,0x891f,
-0x89f1,0x8ae0,0x8ae2,0x8af2,0x8af4,0x8af5,0x8add,0x8b14,
-0x8ae4,0x8adf,0x8af0,0x8ac8,0x8ade,0x8ae1,0x8ae8,0x8aff,
-0x8aef,0x8afb,0x8c91,0x8c92,0x8c90,0x8cf5,0x8cee,0x8cf1,
-0x8cf0,0x8cf3,0x8d6c,0x8d6e,0x8da5,0x8da7,0x8e33,0x8e3e,
-0x8e38,0x8e40,0x8e45,0x8e36,0x8e3c,0x8e3d,0x8e41,0x8e30,
-0x8e3f,0x8ebd,0x8f36,0x8f2e,0x8f35,0x8f32,0x8f39,0x8f37,
-0x8f34,0x9076,0x9079,0x907b,0x9086,0x90fa,0x9133,0x9135,
-0x9136,0x9193,0x9190,0x9191,0x918d,0x918f,0x9327,0x931e,
-0x9308,0x931f,0x9306,0x930f,0x937a,0x9338,0x933c,0x931b,
-0x9323,0x9312,0x9301,0x9346,0x932d,0x930e,0x930d,0x92cb,
-0x931d,0x92fa,0x9313,0x92f9,0x92f7,0x9334,0x9302,0x9324,
-0x92ff,0x9329,0x9339,0x9335,0x932a,0x9314,0x930c,0x930b,
-0x92fe,0x9309,0x9300,0x92fb,0x9316,0x95bc,0x95cd,0x95be,
-0x95b9,0x95ba,0x95b6,0x95bf,0x95b5,0x95bd,0x96a9,0x96d4,
-0x970b,0x9712,0x9710,0x9799,0x9797,0x9794,0x97f0,0x97f8,
-0x9835,0x982f,0x9832,0x9924,0x991f,0x9927,0x9929,0x999e,
-0x99ee,0x99ec,0x99e5,0x99e4,0x99f0,0x99e3,0x99ea,0x99e9,
-0x99e7,0x9ab9,0x9abf,0x9ab4,0x9abb,0x9af6,0x9afa,0x9af9,
-0x9af7,0x9b33,0x9b80,0x9b85,0x9b87,0x9b7c,0x9b7e,0x9b7b,
-0x9b82,0x9b93,0x9b92,0x9b90,0x9b7a,0x9b95,0x9b7d,0x9b88,
-0x9d25,0x9d17,0x9d20,0x9d1e,0x9d14,0x9d29,0x9d1d,0x9d18,
-0x9d22,0x9d10,0x9d19,0x9d1f,0x9e88,0x9e86,0x9e87,0x9eae,
-0x9ead,0x9ed5,0x9ed6,0x9efa,0x9f12,0x9f3d,0x5126,0x5125,
-0x5122,0x5124,0x5120,0x5129,0x52f4,0x5693,0x568c,0x568d,
-0x5686,0x5684,0x5683,0x567e,0x5682,0x567f,0x5681,0x58d6,
-0x58d4,0x58cf,0x58d2,0x5b2d,0x5b25,0x5b32,0x5b23,0x5b2c,
-0x5b27,0x5b26,0x5b2f,0x5b2e,0x5b7b,0x5bf1,0x5bf2,0x5db7,
-0x5e6c,0x5e6a,0x5fbe,0x61c3,0x61b5,0x61bc,0x61e7,0x61e0,
-0x61e5,0x61e4,0x61e8,0x61de,0x64ef,0x64e9,0x64e3,0x64eb,
-0x64e4,0x64e8,0x6581,0x6580,0x65b6,0x65da,0x66d2,0x6a8d,
-0x6a96,0x6a81,0x6aa5,0x6a89,0x6a9f,0x6a9b,0x6aa1,0x6a9e,
-0x6a87,0x6a93,0x6a8e,0x6a95,0x6a83,0x6aa8,0x6aa4,0x6a91,
-0x6a7f,0x6aa6,0x6a9a,0x6a85,0x6a8c,0x6a92,0x6b5b,0x6bad,
-0x6c09,0x6fcc,0x6fa9,0x6ff4,0x6fd4,0x6fe3,0x6fdc,0x6fed,
-0x6fe7,0x6fe6,0x6fde,0x6ff2,0x6fdd,0x6fe2,0x6fe8,0x71e1,
-0x71f1,0x71e8,0x71f2,0x71e4,0x71f0,0x71e2,0x7373,0x736e,
-0x736f,0x7497,0x74b2,0x74ab,0x7490,0x74aa,0x74ad,0x74b1,
-0x74a5,0x74af,0x7510,0x7511,0x7512,0x750f,0x7584,0x7643,
-0x7648,0x7649,0x7647,0x76a4,0x76e9,0x77b5,0x77ab,0x77b2,
-0x77b7,0x77b6,0x77b4,0x77b1,0x77a8,0x77f0,0x78f3,0x78fd,
-0x7902,0x78fb,0x78fc,0x78ff,0x78f2,0x7905,0x78f9,0x78fe,
-0x7904,0x79ab,0x79a8,0x7a5c,0x7a5b,0x7a56,0x7a58,0x7a54,
-0x7a5a,0x7abe,0x7ac0,0x7ac1,0x7c05,0x7c0f,0x7bf2,0x7c00,
-0x7bff,0x7bfb,0x7c0e,0x7bf4,0x7c0b,0x7bf3,0x7c02,0x7c09,
-0x7c03,0x7c01,0x7bf8,0x7bfd,0x7c06,0x7bf0,0x7bf1,0x7c10,
-0x7c0a,0x7ce8,0x7e2d,0x7e3c,0x7e42,0x7e33,0x9848,0x7e38,
-0x7e2a,0x7e49,0x7e40,0x7e47,0x7e29,0x7e4c,0x7e30,0x7e3b,
-0x7e36,0x7e44,0x7e3a,0x7f45,0x7f7f,0x7f7e,0x7f7d,0x7ff4,
-0x7ff2,0x802c,0x81bb,0x81c4,0x81cc,0x81ca,0x81c5,0x81c7,
-0x81bc,0x81e9,0x825b,0x825a,0x825c,0x8583,0x8580,0x858f,
-0x85a7,0x8595,0x85a0,0x858b,0x85a3,0x857b,0x85a4,0x859a,
-0x859e,0x8577,0x857c,0x8589,0x85a1,0x857a,0x8578,0x8557,
-0x858e,0x8596,0x8586,0x858d,0x8599,0x859d,0x8581,0x85a2,
-0x8582,0x8588,0x8585,0x8579,0x8576,0x8598,0x8590,0x859f,
-0x8668,0x87be,0x87aa,0x87ad,0x87c5,0x87b0,0x87ac,0x87b9,
-0x87b5,0x87bc,0x87ae,0x87c9,0x87c3,0x87c2,0x87cc,0x87b7,
-0x87af,0x87c4,0x87ca,0x87b4,0x87b6,0x87bf,0x87b8,0x87bd,
-0x87de,0x87b2,0x8935,0x8933,0x893c,0x893e,0x8941,0x8952,
-0x8937,0x8942,0x89ad,0x89af,0x89ae,0x89f2,0x89f3,0x8b1e,
-0x8b18,0x8b16,0x8b11,0x8b05,0x8b0b,0x8b22,0x8b0f,0x8b12,
-0x8b15,0x8b07,0x8b0d,0x8b08,0x8b06,0x8b1c,0x8b13,0x8b1a,
-0x8c4f,0x8c70,0x8c72,0x8c71,0x8c6f,0x8c95,0x8c94,0x8cf9,
-0x8d6f,0x8e4e,0x8e4d,0x8e53,0x8e50,0x8e4c,0x8e47,0x8f43,
-0x8f40,0x9085,0x907e,0x9138,0x919a,0x91a2,0x919b,0x9199,
-0x919f,0x91a1,0x919d,0x91a0,0x93a1,0x9383,0x93af,0x9364,
-0x9356,0x9347,0x937c,0x9358,0x935c,0x9376,0x9349,0x9350,
-0x9351,0x9360,0x936d,0x938f,0x934c,0x936a,0x9379,0x9357,
-0x9355,0x9352,0x934f,0x9371,0x9377,0x937b,0x9361,0x935e,
-0x9363,0x9367,0x934e,0x9359,0x95c7,0x95c0,0x95c9,0x95c3,
-0x95c5,0x95b7,0x96ae,0x96b0,0x96ac,0x9720,0x971f,0x9718,
-0x971d,0x9719,0x979a,0x97a1,0x979c,0x979e,0x979d,0x97d5,
-0x97d4,0x97f1,0x9841,0x9844,0x984a,0x9849,0x9845,0x9843,
-0x9925,0x992b,0x992c,0x992a,0x9933,0x9932,0x992f,0x992d,
-0x9931,0x9930,0x9998,0x99a3,0x99a1,0x9a02,0x99fa,0x99f4,
-0x99f7,0x99f9,0x99f8,0x99f6,0x99fb,0x99fd,0x99fe,0x99fc,
-0x9a03,0x9abe,0x9afe,0x9afd,0x9b01,0x9afc,0x9b48,0x9b9a,
-0x9ba8,0x9b9e,0x9b9b,0x9ba6,0x9ba1,0x9ba5,0x9ba4,0x9b86,
-0x9ba2,0x9ba0,0x9baf,0x9d33,0x9d41,0x9d67,0x9d36,0x9d2e,
-0x9d2f,0x9d31,0x9d38,0x9d30,0x9d45,0x9d42,0x9d43,0x9d3e,
-0x9d37,0x9d40,0x9d3d,0x7ff5,0x9d2d,0x9e8a,0x9e89,0x9e8d,
-0x9eb0,0x9ec8,0x9eda,0x9efb,0x9eff,0x9f24,0x9f23,0x9f22,
-0x9f54,0x9fa0,0x5131,0x512d,0x512e,0x5698,0x569c,0x5697,
-0x569a,0x569d,0x5699,0x5970,0x5b3c,0x5c69,0x5c6a,0x5dc0,
-0x5e6d,0x5e6e,0x61d8,0x61df,0x61ed,0x61ee,0x61f1,0x61ea,
-0x61f0,0x61eb,0x61d6,0x61e9,0x64ff,0x6504,0x64fd,0x64f8,
-0x6501,0x6503,0x64fc,0x6594,0x65db,0x66da,0x66db,0x66d8,
-0x6ac5,0x6ab9,0x6abd,0x6ae1,0x6ac6,0x6aba,0x6ab6,0x6ab7,
-0x6ac7,0x6ab4,0x6aad,0x6b5e,0x6bc9,0x6c0b,0x7007,0x700c,
-0x700d,0x7001,0x7005,0x7014,0x700e,0x6fff,0x7000,0x6ffb,
-0x7026,0x6ffc,0x6ff7,0x700a,0x7201,0x71ff,0x71f9,0x7203,
-0x71fd,0x7376,0x74b8,0x74c0,0x74b5,0x74c1,0x74be,0x74b6,
-0x74bb,0x74c2,0x7514,0x7513,0x765c,0x7664,0x7659,0x7650,
-0x7653,0x7657,0x765a,0x76a6,0x76bd,0x76ec,0x77c2,0x77ba,
-0x790c,0x7913,0x7914,0x7909,0x7910,0x7912,0x7911,0x79ad,
-0x79ac,0x7a5f,0x7c1c,0x7c29,0x7c19,0x7c20,0x7c1f,0x7c2d,
-0x7c1d,0x7c26,0x7c28,0x7c22,0x7c25,0x7c30,0x7e5c,0x7e50,
-0x7e56,0x7e63,0x7e58,0x7e62,0x7e5f,0x7e51,0x7e60,0x7e57,
-0x7e53,0x7fb5,0x7fb3,0x7ff7,0x7ff8,0x8075,0x81d1,0x81d2,
-0x81d0,0x825f,0x825e,0x85b4,0x85c6,0x85c0,0x85c3,0x85c2,
-0x85b3,0x85b5,0x85bd,0x85c7,0x85c4,0x85bf,0x85cb,0x85ce,
-0x85c8,0x85c5,0x85b1,0x85b6,0x85d2,0x8624,0x85b8,0x85b7,
-0x85be,0x8669,0x87e7,0x87e6,0x87e2,0x87db,0x87eb,0x87ea,
-0x87e5,0x87df,0x87f3,0x87e4,0x87d4,0x87dc,0x87d3,0x87ed,
-0x87d8,0x87e3,0x87d7,0x87d9,0x8801,0x87f4,0x87e8,0x87dd,
-0x8953,0x894b,0x894f,0x894c,0x8946,0x8950,0x8951,0x8949,
-0x8b2a,0x8b27,0x8b23,0x8b33,0x8b30,0x8b35,0x8b47,0x8b2f,
-0x8b3c,0x8b3e,0x8b31,0x8b25,0x8b37,0x8b26,0x8b36,0x8b2e,
-0x8b24,0x8b3b,0x8b3d,0x8b3a,0x8c42,0x8c75,0x8c99,0x8c98,
-0x8c97,0x8cfe,0x8d04,0x8d02,0x8d00,0x8e5c,0x8e62,0x8e60,
-0x8e57,0x8e56,0x8e5e,0x8e65,0x8e67,0x8e5b,0x8e5a,0x8e61,
-0x8e5d,0x8e69,0x8e54,0x8f46,0x8f47,0x8f48,0x8f4b,0x9128,
-0x913a,0x913b,0x913e,0x91a8,0x91a5,0x91a7,0x91af,0x91aa,
-0x93b5,0x938c,0x9392,0x93b7,0x939b,0x939d,0x9389,0x93a7,
-0x938e,0x93aa,0x939e,0x93a6,0x9395,0x9388,0x9399,0x939f,
-0x9380,0x938d,0x93b1,0x9391,0x93b2,0x93a4,0x93a8,0x93b4,
-0x93a3,0x95d2,0x95d3,0x95d1,0x96b3,0x96d7,0x96da,0x5dc2,
-0x96df,0x96d8,0x96dd,0x9723,0x9722,0x9725,0x97ac,0x97ae,
-0x97a8,0x97ab,0x97a4,0x97aa,0x97a2,0x97a5,0x97d7,0x97d9,
-0x97d6,0x97d8,0x97fa,0x9850,0x9851,0x9852,0x98b8,0x9941,
-0x993c,0x993a,0x9a0f,0x9a0b,0x9a09,0x9a0d,0x9a04,0x9a11,
-0x9a0a,0x9a05,0x9a07,0x9a06,0x9ac0,0x9adc,0x9b08,0x9b04,
-0x9b05,0x9b29,0x9b35,0x9b4a,0x9b4c,0x9b4b,0x9bc7,0x9bc6,
-0x9bc3,0x9bbf,0x9bc1,0x9bb5,0x9bb8,0x9bd3,0x9bb6,0x9bc4,
-0x9bb9,0x9bbd,0x9d5c,0x9d53,0x9d4f,0x9d4a,0x9d5b,0x9d4b,
-0x9d59,0x9d56,0x9d4c,0x9d57,0x9d52,0x9d54,0x9d5f,0x9d58,
-0x9d5a,0x9e8e,0x9e8c,0x9edf,0x9f01,0x9f00,0x9f16,0x9f25,
-0x9f2b,0x9f2a,0x9f29,0x9f28,0x9f4c,0x9f55,0x5134,0x5135,
-0x5296,0x52f7,0x53b4,0x56ab,0x56ad,0x56a6,0x56a7,0x56aa,
-0x56ac,0x58da,0x58dd,0x58db,0x5912,0x5b3d,0x5b3e,0x5b3f,
-0x5dc3,0x5e70,0x5fbf,0x61fb,0x6507,0x6510,0x650d,0x6509,
-0x650c,0x650e,0x6584,0x65de,0x65dd,0x66de,0x6ae7,0x6ae0,
-0x6acc,0x6ad1,0x6ad9,0x6acb,0x6adf,0x6adc,0x6ad0,0x6aeb,
-0x6acf,0x6acd,0x6ade,0x6b60,0x6bb0,0x6c0c,0x7019,0x7027,
-0x7020,0x7016,0x702b,0x7021,0x7022,0x7023,0x7029,0x7017,
-0x7024,0x701c,0x720c,0x720a,0x7207,0x7202,0x7205,0x72a5,
-0x72a6,0x72a4,0x72a3,0x72a1,0x74cb,0x74c5,0x74b7,0x74c3,
-0x7516,0x7660,0x77c9,0x77ca,0x77c4,0x77f1,0x791d,0x791b,
-0x7921,0x791c,0x7917,0x791e,0x79b0,0x7a67,0x7a68,0x7c33,
-0x7c3c,0x7c39,0x7c2c,0x7c3b,0x7cec,0x7cea,0x7e76,0x7e75,
-0x7e78,0x7e70,0x7e77,0x7e6f,0x7e7a,0x7e72,0x7e74,0x7e68,
-0x7f4b,0x7f4a,0x7f83,0x7f86,0x7fb7,0x7ffd,0x7ffe,0x8078,
-0x81d7,0x81d5,0x820b,0x8264,0x8261,0x8263,0x85eb,0x85f1,
-0x85ed,0x85d9,0x85e1,0x85e8,0x85da,0x85d7,0x85ec,0x85f2,
-0x85f8,0x85d8,0x85df,0x85e3,0x85dc,0x85d1,0x85f0,0x85e6,
-0x85ef,0x85de,0x85e2,0x8800,0x87fa,0x8803,0x87f6,0x87f7,
-0x8809,0x880c,0x880b,0x8806,0x87fc,0x8808,0x87ff,0x880a,
-0x8802,0x8962,0x895a,0x895b,0x8957,0x8961,0x895c,0x8958,
-0x895d,0x8959,0x8988,0x89b7,0x89b6,0x89f6,0x8b50,0x8b48,
-0x8b4a,0x8b40,0x8b53,0x8b56,0x8b54,0x8b4b,0x8b55,0x8b51,
-0x8b42,0x8b52,0x8b57,0x8c43,0x8c77,0x8c76,0x8c9a,0x8d06,
-0x8d07,0x8d09,0x8dac,0x8daa,0x8dad,0x8dab,0x8e6d,0x8e78,
-0x8e73,0x8e6a,0x8e6f,0x8e7b,0x8ec2,0x8f52,0x8f51,0x8f4f,
-0x8f50,0x8f53,0x8fb4,0x9140,0x913f,0x91b0,0x91ad,0x93de,
-0x93c7,0x93cf,0x93c2,0x93da,0x93d0,0x93f9,0x93ec,0x93cc,
-0x93d9,0x93a9,0x93e6,0x93ca,0x93d4,0x93ee,0x93e3,0x93d5,
-0x93c4,0x93ce,0x93c0,0x93d2,0x93a5,0x93e7,0x957d,0x95da,
-0x95db,0x96e1,0x9729,0x972b,0x972c,0x9728,0x9726,0x97b3,
-0x97b7,0x97b6,0x97dd,0x97de,0x97df,0x985c,0x9859,0x985d,
-0x9857,0x98bf,0x98bd,0x98bb,0x98be,0x9948,0x9947,0x9943,
-0x99a6,0x99a7,0x9a1a,0x9a15,0x9a25,0x9a1d,0x9a24,0x9a1b,
-0x9a22,0x9a20,0x9a27,0x9a23,0x9a1e,0x9a1c,0x9a14,0x9ac2,
-0x9b0b,0x9b0a,0x9b0e,0x9b0c,0x9b37,0x9bea,0x9beb,0x9be0,
-0x9bde,0x9be4,0x9be6,0x9be2,0x9bf0,0x9bd4,0x9bd7,0x9bec,
-0x9bdc,0x9bd9,0x9be5,0x9bd5,0x9be1,0x9bda,0x9d77,0x9d81,
-0x9d8a,0x9d84,0x9d88,0x9d71,0x9d80,0x9d78,0x9d86,0x9d8b,
-0x9d8c,0x9d7d,0x9d6b,0x9d74,0x9d75,0x9d70,0x9d69,0x9d85,
-0x9d73,0x9d7b,0x9d82,0x9d6f,0x9d79,0x9d7f,0x9d87,0x9d68,
-0x9e94,0x9e91,0x9ec0,0x9efc,0x9f2d,0x9f40,0x9f41,0x9f4d,
-0x9f56,0x9f57,0x9f58,0x5337,0x56b2,0x56b5,0x56b3,0x58e3,
-0x5b45,0x5dc6,0x5dc7,0x5eee,0x5eef,0x5fc0,0x5fc1,0x61f9,
-0x6517,0x6516,0x6515,0x6513,0x65df,0x66e8,0x66e3,0x66e4,
-0x6af3,0x6af0,0x6aea,0x6ae8,0x6af9,0x6af1,0x6aee,0x6aef,
-0x703c,0x7035,0x702f,0x7037,0x7034,0x7031,0x7042,0x7038,
-0x703f,0x703a,0x7039,0x702a,0x7040,0x703b,0x7033,0x7041,
-0x7213,0x7214,0x72a8,0x737d,0x737c,0x74ba,0x76ab,0x76aa,
-0x76be,0x76ed,0x77cc,0x77ce,0x77cf,0x77cd,0x77f2,0x7925,
-0x7923,0x7927,0x7928,0x7924,0x7929,0x79b2,0x7a6e,0x7a6c,
-0x7a6d,0x7af7,0x7c49,0x7c48,0x7c4a,0x7c47,0x7c45,0x7cee,
-0x7e7b,0x7e7e,0x7e81,0x7e80,0x7fba,0x7fff,0x8079,0x81db,
-0x81d9,0x8268,0x8269,0x8622,0x85ff,0x8601,0x85fe,0x861b,
-0x8600,0x85f6,0x8604,0x8609,0x8605,0x860c,0x85fd,0x8819,
-0x8810,0x8811,0x8817,0x8813,0x8816,0x8963,0x8966,0x89b9,
-0x89f7,0x8b60,0x8b6a,0x8b5d,0x8b68,0x8b63,0x8b65,0x8b67,
-0x8b6d,0x8dae,0x8e86,0x8e88,0x8e84,0x8f59,0x8f56,0x8f57,
-0x8f55,0x8f58,0x8f5a,0x908d,0x9143,0x9141,0x91b7,0x91b5,
-0x91b2,0x91b3,0x940b,0x9413,0x93fb,0x9420,0x940f,0x9414,
-0x93fe,0x9415,0x9410,0x9428,0x9419,0x940d,0x93f5,0x9400,
-0x93f7,0x9407,0x940e,0x9416,0x9412,0x93fa,0x9409,0x93f8,
-0x943c,0x940a,0x93ff,0x93fc,0x940c,0x93f6,0x9411,0x9406,
-0x95de,0x95e0,0x95df,0x972e,0x972f,0x97b9,0x97bb,0x97fd,
-0x97fe,0x9860,0x9862,0x9863,0x985f,0x98c1,0x98c2,0x9950,
-0x994e,0x9959,0x994c,0x994b,0x9953,0x9a32,0x9a34,0x9a31,
-0x9a2c,0x9a2a,0x9a36,0x9a29,0x9a2e,0x9a38,0x9a2d,0x9ac7,
-0x9aca,0x9ac6,0x9b10,0x9b12,0x9b11,0x9c0b,0x9c08,0x9bf7,
-0x9c05,0x9c12,0x9bf8,0x9c40,0x9c07,0x9c0e,0x9c06,0x9c17,
-0x9c14,0x9c09,0x9d9f,0x9d99,0x9da4,0x9d9d,0x9d92,0x9d98,
-0x9d90,0x9d9b,0x9da0,0x9d94,0x9d9c,0x9daa,0x9d97,0x9da1,
-0x9d9a,0x9da2,0x9da8,0x9d9e,0x9da3,0x9dbf,0x9da9,0x9d96,
-0x9da6,0x9da7,0x9e99,0x9e9b,0x9e9a,0x9ee5,0x9ee4,0x9ee7,
-0x9ee6,0x9f30,0x9f2e,0x9f5b,0x9f60,0x9f5e,0x9f5d,0x9f59,
-0x9f91,0x513a,0x5139,0x5298,0x5297,0x56c3,0x56bd,0x56be,
-0x5b48,0x5b47,0x5dcb,0x5dcf,0x5ef1,0x61fd,0x651b,0x6b02,
-0x6afc,0x6b03,0x6af8,0x6b00,0x7043,0x7044,0x704a,0x7048,
-0x7049,0x7045,0x7046,0x721d,0x721a,0x7219,0x737e,0x7517,
-0x766a,0x77d0,0x792d,0x7931,0x792f,0x7c54,0x7c53,0x7cf2,
-0x7e8a,0x7e87,0x7e88,0x7e8b,0x7e86,0x7e8d,0x7f4d,0x7fbb,
-0x8030,0x81dd,0x8618,0x862a,0x8626,0x861f,0x8623,0x861c,
-0x8619,0x8627,0x862e,0x8621,0x8620,0x8629,0x861e,0x8625,
-0x8829,0x881d,0x881b,0x8820,0x8824,0x881c,0x882b,0x884a,
-0x896d,0x8969,0x896e,0x896b,0x89fa,0x8b79,0x8b78,0x8b45,
-0x8b7a,0x8b7b,0x8d10,0x8d14,0x8daf,0x8e8e,0x8e8c,0x8f5e,
-0x8f5b,0x8f5d,0x9146,0x9144,0x9145,0x91b9,0x943f,0x943b,
-0x9436,0x9429,0x943d,0x9430,0x9439,0x942a,0x9437,0x942c,
-0x9440,0x9431,0x95e5,0x95e4,0x95e3,0x9735,0x973a,0x97bf,
-0x97e1,0x9864,0x98c9,0x98c6,0x98c0,0x9958,0x9956,0x9a39,
-0x9a3d,0x9a46,0x9a44,0x9a42,0x9a41,0x9a3a,0x9a3f,0x9acd,
-0x9b15,0x9b17,0x9b18,0x9b16,0x9b3a,0x9b52,0x9c2b,0x9c1d,
-0x9c1c,0x9c2c,0x9c23,0x9c28,0x9c29,0x9c24,0x9c21,0x9db7,
-0x9db6,0x9dbc,0x9dc1,0x9dc7,0x9dca,0x9dcf,0x9dbe,0x9dc5,
-0x9dc3,0x9dbb,0x9db5,0x9dce,0x9db9,0x9dba,0x9dac,0x9dc8,
-0x9db1,0x9dad,0x9dcc,0x9db3,0x9dcd,0x9db2,0x9e7a,0x9e9c,
-0x9eeb,0x9eee,0x9eed,0x9f1b,0x9f18,0x9f1a,0x9f31,0x9f4e,
-0x9f65,0x9f64,0x9f92,0x4eb9,0x56c6,0x56c5,0x56cb,0x5971,
-0x5b4b,0x5b4c,0x5dd5,0x5dd1,0x5ef2,0x6521,0x6520,0x6526,
-0x6522,0x6b0b,0x6b08,0x6b09,0x6c0d,0x7055,0x7056,0x7057,
-0x7052,0x721e,0x721f,0x72a9,0x737f,0x74d8,0x74d5,0x74d9,
-0x74d7,0x766d,0x76ad,0x7935,0x79b4,0x7a70,0x7a71,0x7c57,
-0x7c5c,0x7c59,0x7c5b,0x7c5a,0x7cf4,0x7cf1,0x7e91,0x7f4f,
-0x7f87,0x81de,0x826b,0x8634,0x8635,0x8633,0x862c,0x8632,
-0x8636,0x882c,0x8828,0x8826,0x882a,0x8825,0x8971,0x89bf,
-0x89be,0x89fb,0x8b7e,0x8b84,0x8b82,0x8b86,0x8b85,0x8b7f,
-0x8d15,0x8e95,0x8e94,0x8e9a,0x8e92,0x8e90,0x8e96,0x8e97,
-0x8f60,0x8f62,0x9147,0x944c,0x9450,0x944a,0x944b,0x944f,
-0x9447,0x9445,0x9448,0x9449,0x9446,0x973f,0x97e3,0x986a,
-0x9869,0x98cb,0x9954,0x995b,0x9a4e,0x9a53,0x9a54,0x9a4c,
-0x9a4f,0x9a48,0x9a4a,0x9a49,0x9a52,0x9a50,0x9ad0,0x9b19,
-0x9b2b,0x9b3b,0x9b56,0x9b55,0x9c46,0x9c48,0x9c3f,0x9c44,
-0x9c39,0x9c33,0x9c41,0x9c3c,0x9c37,0x9c34,0x9c32,0x9c3d,
-0x9c36,0x9ddb,0x9dd2,0x9dde,0x9dda,0x9dcb,0x9dd0,0x9ddc,
-0x9dd1,0x9ddf,0x9de9,0x9dd9,0x9dd8,0x9dd6,0x9df5,0x9dd5,
-0x9ddd,0x9eb6,0x9ef0,0x9f35,0x9f33,0x9f32,0x9f42,0x9f6b,
-0x9f95,0x9fa2,0x513d,0x5299,0x58e8,0x58e7,0x5972,0x5b4d,
-0x5dd8,0x882f,0x5f4f,0x6201,0x6203,0x6204,0x6529,0x6525,
-0x6596,0x66eb,0x6b11,0x6b12,0x6b0f,0x6bca,0x705b,0x705a,
-0x7222,0x7382,0x7381,0x7383,0x7670,0x77d4,0x7c67,0x7c66,
-0x7e95,0x826c,0x863a,0x8640,0x8639,0x863c,0x8631,0x863b,
-0x863e,0x8830,0x8832,0x882e,0x8833,0x8976,0x8974,0x8973,
-0x89fe,0x8b8c,0x8b8e,0x8b8b,0x8b88,0x8c45,0x8d19,0x8e98,
-0x8f64,0x8f63,0x91bc,0x9462,0x9455,0x945d,0x9457,0x945e,
-0x97c4,0x97c5,0x9800,0x9a56,0x9a59,0x9b1e,0x9b1f,0x9b20,
-0x9c52,0x9c58,0x9c50,0x9c4a,0x9c4d,0x9c4b,0x9c55,0x9c59,
-0x9c4c,0x9c4e,0x9dfb,0x9df7,0x9def,0x9de3,0x9deb,0x9df8,
-0x9de4,0x9df6,0x9de1,0x9dee,0x9de6,0x9df2,0x9df0,0x9de2,
-0x9dec,0x9df4,0x9df3,0x9de8,0x9ded,0x9ec2,0x9ed0,0x9ef2,
-0x9ef3,0x9f06,0x9f1c,0x9f38,0x9f37,0x9f36,0x9f43,0x9f4f,
-0x9f71,0x9f70,0x9f6e,0x9f6f,0x56d3,0x56cd,0x5b4e,0x5c6d,
-0x652d,0x66ed,0x66ee,0x6b13,0x705f,0x7061,0x705d,0x7060,
-0x7223,0x74db,0x74e5,0x77d5,0x7938,0x79b7,0x79b6,0x7c6a,
-0x7e97,0x7f89,0x826d,0x8643,0x8838,0x8837,0x8835,0x884b,
-0x8b94,0x8b95,0x8e9e,0x8e9f,0x8ea0,0x8e9d,0x91be,0x91bd,
-0x91c2,0x946b,0x9468,0x9469,0x96e5,0x9746,0x9743,0x9747,
-0x97c7,0x97e5,0x9a5e,0x9ad5,0x9b59,0x9c63,0x9c67,0x9c66,
-0x9c62,0x9c5e,0x9c60,0x9e02,0x9dfe,0x9e07,0x9e03,0x9e06,
-0x9e05,0x9e00,0x9e01,0x9e09,0x9dff,0x9dfd,0x9e04,0x9ea0,
-0x9f1e,0x9f46,0x9f74,0x9f75,0x9f76,0x56d4,0x652e,0x65b8,
-0x6b18,0x6b19,0x6b17,0x6b1a,0x7062,0x7226,0x72aa,0x77d8,
-0x77d9,0x7939,0x7c69,0x7c6b,0x7cf6,0x7e9a,0x7e98,0x7e9b,
-0x7e99,0x81e0,0x81e1,0x8646,0x8647,0x8648,0x8979,0x897a,
-0x897c,0x897b,0x89ff,0x8b98,0x8b99,0x8ea5,0x8ea4,0x8ea3,
-0x946e,0x946d,0x946f,0x9471,0x9473,0x9749,0x9872,0x995f,
-0x9c68,0x9c6e,0x9c6d,0x9e0b,0x9e0d,0x9e10,0x9e0f,0x9e12,
-0x9e11,0x9ea1,0x9ef5,0x9f09,0x9f47,0x9f78,0x9f7b,0x9f7a,
-0x9f79,0x571e,0x7066,0x7c6f,0x883c,0x8db2,0x8ea6,0x91c3,
-0x9474,0x9478,0x9476,0x9475,0x9a60,0x9b2e,0x9c74,0x9c73,
-0x9c71,0x9c75,0x9e14,0x9e13,0x9ef6,0x9f0a,0x9fa4,0x7068,
-0x7065,0x7cf7,0x866a,0x883e,0x883d,0x883f,0x8b9e,0x8c9c,
-0x8ea9,0x8ec9,0x974b,0x9873,0x9874,0x98cc,0x9961,0x99ab,
-0x9a64,0x9a66,0x9a67,0x9b24,0x9e15,0x9e17,0x9f48,0x6207,
-0x6b1e,0x7227,0x864c,0x8ea8,0x9482,0x9480,0x9481,0x9a69,
-0x9a68,0x9e19,0x864b,0x8b9f,0x9483,0x9c79,0x9eb7,0x7675,
-0x9a6b,0x9c7a,0x9e1d,0x7069,0x706a,0x7229,0x9ea4,0x9f7e,
-0x9f49,0x9f98};
-
-static const int cns11643_2_ucs_table_size = (sizeof (cns11643_2_ucs_table) / sizeof (unsigned short));
-
-static const unsigned short cns11643_14_ucs_table[] = {
-0x4e28,0x4e36,0x4e3f,0x4e85,0x4e05,0x4e04,0x5182,0x5196,
-0x5338,0x5369,0x53b6,0x4e2a,0x4e87,0x4e49,0x51e2,0x4e46,
-0x4e8f,0x4ebc,0x4ebe,0x5166,0x51e3,0x5204,0x529c,0x0000,
-0x5902,0x590a,0x5b80,0x5ddb,0x5e7a,0x5e7f,0x5ef4,0x5f50,
-0x5f51,0x5f61,0x961d,0x0000,0x4e63,0x4e62,0x4ea3,0x5185,
-0x4ec5,0x4ecf,0x4ece,0x4ecc,0x5184,0x5186,0x0000,0x0000,
-0x51e4,0x5205,0x529e,0x529d,0x52fd,0x5300,0x533a,0x0000,
-0x5346,0x535d,0x5386,0x53b7,0x0000,0x53cc,0x0000,0x53ce,
-0x5721,0x0000,0x5e00,0x5f0c,0x6237,0x6238,0x6534,0x6535,
-0x65e0,0x0000,0x738d,0x4e97,0x4ee0,0x0000,0x0000,0x4ee7,
-0x0000,0x4ee6,0x0000,0x0000,0x0000,0x0000,0x56d8,0x518b,
-0x518c,0x5199,0x51e5,0x0000,0x520b,0x0000,0x0000,0x5304,
-0x5303,0x5307,0x0000,0x531e,0x535f,0x536d,0x5389,0x53ba,
-0x53d0,0x0000,0x53f6,0x53f7,0x53f9,0x0000,0x53f4,0x0000,
-0x0000,0x5724,0x5904,0x5918,0x5932,0x5930,0x5934,0x0000,
-0x5975,0x0000,0x5b82,0x5bf9,0x5c14,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x5e81,0x5e83,0x5f0d,0x5f52,
-0x0000,0x5fca,0x5fc7,0x6239,0x0000,0x624f,0x65e7,0x672f,
-0x6b7a,0x6c39,0x0000,0x0000,0x6c37,0x6c44,0x6c45,0x738c,
-0x7592,0x7676,0x9093,0x9092,0x0000,0x0000,0x4e21,0x4e20,
-0x4e22,0x4e68,0x4e89,0x4e98,0x4ef9,0x4eef,0x0000,0x0000,
-0x4ef8,0x4f06,0x4f03,0x4efc,0x4eee,0x4f16,0x0000,0x4f28,
-0x4f1c,0x4f07,0x4f1a,0x4efa,0x4f17,0x514a,0x0000,0x5172,
-0x0000,0x51b4,0x51b3,0x51b2,0x0000,0x51e8,0x0000,0x5214,
-0x520f,0x5215,0x5218,0x52a8,0x0000,0x534b,0x534f,0x0000,
-0x5350,0x0000,0x538b,0x0000,0x53be,0x0000,0x53d2,0x5416,
-0x53ff,0x0000,0x5400,0x0000,0x5405,0x5413,0x5415,0x0000,
-0x0000,0x56e3,0x5735,0x5736,0x5731,0x5732,0x58ee,0x5905,
-0x4e54,0x0000,0x5936,0x0000,0x0000,0x0000,0x597a,0x0000,
-0x5986,0x0000,0x0000,0x5b86,0x5f53,0x5c18,0x0000,0x5c3d,
-0x5c78,0x0000,0x0000,0x0000,0x0000,0x5c80,0x0000,0x5e08,
-0x0000,0x0000,0x0000,0x0000,0x5ef5,0x5f0e,0x0000,0x0000,
-0x0000,0x5fd3,0x5fda,0x0000,0x5fdb,0x0000,0x620f,0x625d,
-0x625f,0x6267,0x6257,0x9f50,0x0000,0x65eb,0x65ea,0x0000,
-0x6737,0x0000,0x6732,0x6736,0x6b22,0x6bce,0x0000,0x6c58,
-0x6c51,0x6c77,0x6c3c,0x0000,0x6c5a,0x0000,0x6c53,0x706f,
-0x7072,0x706e,0x0000,0x0000,0x7073,0x72b1,0x72b2,0x0000,
-0x738f,0x0000,0x0000,0x0000,0x793c,0x0000,0x808d,0x808e,
-0x0000,0x827b,0x0000,0x8d71,0x8fb9,0x9096,0x909a,0x0000,
-0x4e24,0x4e71,0x0000,0x4e9c,0x4f45,0x4f4a,0x4f39,0x4f37,
-0x0000,0x4f32,0x4f42,0x0000,0x4f44,0x4f4b,0x0000,0x4f40,
-0x4f35,0x4f31,0x5151,0x0000,0x5150,0x514e,0x0000,0x0000,
-0x519d,0x0000,0x51b5,0x51b8,0x51ec,0x5223,0x5227,0x5226,
-0x521f,0x522b,0x5220,0x52b4,0x52b3,0x0000,0x5325,0x533b,
-0x5374,0x0000,0x0000,0x0000,0x0000,0x0000,0x544d,0x0000,
-0x0000,0x543a,0x0000,0x0000,0x5444,0x544c,0x5423,0x541a,
-0x5432,0x544b,0x5421,0x0000,0x5434,0x5449,0x5450,0x5422,
-0x543f,0x5451,0x545a,0x542f,0x0000,0x56e9,0x56f2,0x56f3,
-0x56ef,0x56ed,0x56ec,0x56e6,0x5748,0x0000,0x5744,0x573f,
-0x573c,0x5753,0x5756,0x0000,0x575f,0x5743,0x5758,0x5757,
-0x0000,0x0000,0x0000,0x5746,0x0000,0x573d,0x0000,0x5742,
-0x5754,0x5755,0x58f1,0x58f2,0x58f0,0x590b,0x9ea6,0x56f1,
-0x593d,0x0000,0x5994,0x598c,0x0000,0x599c,0x0000,0x0000,
-0x599f,0x0000,0x599b,0x0000,0x5989,0x599a,0x0000,0x6588,
-0x0000,0x5b8d,0x0000,0x5bfe,0x5bff,0x5bfd,0x5c2b,0x0000,
-0x5c84,0x5c8e,0x5c9c,0x0000,0x0000,0x5c85,0x5df5,0x5e09,
-0x0000,0x0000,0x5e0b,0x0000,0x5e92,0x5e90,0x5f03,0x0000,
-0x5f1e,0x5f63,0x0000,0x5fe7,0x5ffe,0x5fe6,0x5fdc,0x5fce,
-0x0000,0x5ffc,0x5fdf,0x5fec,0x5ff6,0x0000,0x5ff2,0x5ff0,
-0x5ff9,0x0000,0x6213,0x0000,0x0000,0x623b,0x623c,0x6282,
-0x0000,0x0000,0x0000,0x6278,0x628b,0x0000,0x629e,0x62a5,
-0x629b,0x629c,0x6299,0x628d,0x6285,0x629d,0x6275,0x0000,
-0x0000,0x0000,0x65f6,0x0000,0x0000,0x0000,0x66f5,0x675b,
-0x0000,0x6754,0x6752,0x0000,0x6758,0x6744,0x674a,0x6761,
-0x0000,0x6c7f,0x6c91,0x6c9e,0x0000,0x6c6e,0x6c7c,0x6c9f,
-0x6c75,0x0000,0x6c56,0x6ca2,0x6c79,0x0000,0x6ca1,0x0000,
-0x6caa,0x6ca0,0x0000,0x7079,0x7077,0x707e,0x0000,0x7075,
-0x707b,0x7264,0x0000,0x72bb,0x72bc,0x72c7,0x72b9,0x72be,
-0x72b6,0x0000,0x0000,0x7398,0x0000,0x0000,0x0000,0x0000,
-0x7593,0x7680,0x0000,0x7683,0x76c0,0x76c1,0x0000,0x0000,
-0x77f4,0x77f5,0x0000,0x7acc,0x7acd,0x7cfa,0x809f,0x8091,
-0x8097,0x8094,0x0000,0x8286,0x828c,0x0000,0x8295,0x0000,
-0x866c,0x0000,0x8fb5,0x8fbe,0x8fc7,0x0000,0x8fc1,0x90a9,
-0x90a4,0x0000,0x0000,0x0000,0x90a8,0x9627,0x9626,0x962b,
-0x9633,0x9634,0x9629,0x4e3d,0x0000,0x4e9d,0x4f93,0x4f8a,
-0x0000,0x0000,0x4f6d,0x4f8e,0x4fa0,0x4fa2,0x4fa1,0x4f9f,
-0x4fa3,0x0000,0x4f72,0x0000,0x4f8c,0x5156,0x0000,0x0000,
-0x5190,0x0000,0x0000,0x0000,0x51ed,0x51fe,0x522f,0x0000,
-0x523c,0x5234,0x5239,0x52b9,0x52b5,0x52bf,0x5355,0x0000,
-0x5376,0x537a,0x5393,0x0000,0x53c1,0x53c2,0x53d5,0x5485,
-0x0000,0x545f,0x5493,0x5489,0x5479,0x9efe,0x548f,0x5469,
-0x546d,0x0000,0x5494,0x546a,0x548a,0x0000,0x56fd,0x56fb,
-0x56f8,0x0000,0x56fc,0x56f6,0x5765,0x5781,0x5763,0x5767,
-0x0000,0x576e,0x5778,0x577f,0x0000,0x0000,0x58f3,0x594b,
-0x594c,0x0000,0x0000,0x0000,0x59ad,0x0000,0x59c4,0x0000,
-0x59c2,0x59b0,0x0000,0x0000,0x0000,0x0000,0x59bf,0x0000,
-0x59c9,0x59b8,0x59ac,0x0000,0x0000,0x0000,0x59b7,0x59d7,
-0x0000,0x5b60,0x0000,0x5b96,0x5b9e,0x5b94,0x5b9f,0x5b9d,
-0x0000,0x5c00,0x5c19,0x0000,0x0000,0x5c49,0x5c4a,0x0000,
-0x5cbb,0x5cc1,0x0000,0x0000,0x0000,0x5cb9,0x5c9e,0x5cb4,
-0x5cba,0x5df6,0x5e13,0x5e12,0x5e77,0x0000,0x5e98,0x0000,
-0x5e99,0x5e9d,0x5ef8,0x0000,0x5ef9,0x0000,0x5f06,0x5f21,
-0x0000,0x5f25,0x5f55,0x0000,0x0000,0x0000,0x5f84,0x5f83,
-0x6030,0x6007,0x0000,0x6036,0x0000,0x0000,0x0000,0x5fe9,
-0x603d,0x6008,0x0000,0x0000,0x62ba,0x62b2,0x0000,0x62b7,
-0x62e4,0x62a7,0x0000,0x0000,0x0000,0x62d5,0x62e1,0x62dd,
-0x62a6,0x62c1,0x62c5,0x62c0,0x62df,0x62e0,0x62de,0x0000,
-0x6589,0x0000,0x65a6,0x65ba,0x0000,0x65ff,0x0000,0x6617,
-0x6618,0x6601,0x65fe,0x0000,0x670c,0x0000,0x676b,0x6796,
-0x6782,0x678a,0x0000,0x67a3,0x0000,0x67a2,0x678f,0x0000,
-0x67f9,0x6780,0x6b26,0x6b27,0x6b68,0x6b69,0x0000,0x6b81,
-0x6bb4,0x6bd1,0x0000,0x0000,0x6c1c,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x6c97,0x6c6c,0x6cdf,0x0000,0x6cea,0x0000,
-0x6ce4,0x6cd8,0x6cb2,0x6cce,0x6cc8,0x0000,0x708b,0x7088,
-0x7090,0x708f,0x0000,0x7087,0x7089,0x708d,0x7081,0x0000,
-0x708c,0x0000,0x0000,0x7240,0x0000,0x0000,0x7265,0x7266,
-0x7268,0x0000,0x0000,0x72cd,0x72d3,0x72db,0x0000,0x72cf,
-0x73a7,0x73a3,0x739e,0x0000,0x73af,0x0000,0x0000,0x73aa,
-0x739c,0x0000,0x7542,0x7544,0x753b,0x7541,0x0000,0x759b,
-0x759e,0x0000,0x79c4,0x79c3,0x79c6,0x0000,0x0000,0x79c7,
-0x0000,0x79ca,0x0000,0x0000,0x7acf,0x7c76,0x7c74,0x7cff,
-0x7cfc,0x0000,0x0000,0x7f59,0x80a8,0x0000,0x0000,0x80b0,
-0x0000,0x80b3,0x0000,0x80a4,0x80b6,0x80a7,0x80ac,0x0000,
-0x80a6,0x5367,0x820e,0x82c4,0x833e,0x829c,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x82aa,0x0000,0x82c9,0x0000,0x0000,
-0x82a6,0x82b2,0x0000,0x0000,0x0000,0x8fcc,0x8fd9,0x8fca,
-0x8fd8,0x8fcf,0x90b7,0x0000,0x90ad,0x90b9,0x9637,0x0000,
-0x9641,0x963e,0x96b6,0x9751,0x9763,0x4e57,0x4e79,0x4eb2,
-0x4eb0,0x4eaf,0x4eb1,0x4fd2,0x4fd5,0x0000,0x4fbe,0x4fb8,
-0x4fb0,0x4fb1,0x4fc8,0x0000,0x0000,0x4fc6,0x4fcc,0x4fe5,
-0x4fe3,0x4fb4,0x516a,0x0000,0x519f,0x0000,0x51c1,0x0000,
-0x51c2,0x51c3,0x5245,0x5248,0x0000,0x0000,0x524f,0x0000,
-0x0000,0x52c5,0x52ca,0x52c4,0x5327,0x5358,0x537d,0x0000,
-0x53dd,0x53dc,0x53da,0x53d9,0x54b9,0x0000,0x54d0,0x54b4,
-0x54ca,0x0000,0x54a3,0x54da,0x54a4,0x0000,0x54b2,0x549e,
-0x549f,0x54b5,0x0000,0x0000,0x54cd,0x0000,0x54cc,0x0000,
-0x5700,0x57ac,0x5791,0x578e,0x578d,0x5792,0x57a1,0x5790,
-0x57a6,0x57a8,0x0000,0x579c,0x5796,0x57a7,0x0000,0x0000,
-0x0000,0x0000,0x58f5,0x0000,0x5909,0x5908,0x0000,0x5952,
-0x0000,0x0000,0x59df,0x0000,0x59eb,0x59ef,0x59f0,0x59d5,
-0x5a0d,0x5a04,0x59f9,0x5a02,0x59f8,0x59e2,0x59d9,0x59e7,
-0x5b6a,0x0000,0x0000,0x5bab,0x0000,0x5c1b,0x5c2f,0x0000,
-0x663c,0x0000,0x0000,0x0000,0x5cd1,0x5cdc,0x5ce6,0x5ce1,
-0x5ccd,0x0000,0x5ce2,0x5cdd,0x5ce5,0x5dfb,0x5dfa,0x5e1e,
-0x0000,0x5ea1,0x0000,0x0000,0x5efc,0x5efb,0x5f2f,0x0000,
-0x0000,0x5f66,0x0000,0x0000,0x0000,0x605c,0x0000,0x604e,
-0x6051,0x0000,0x0000,0x6023,0x6031,0x607c,0x6052,0x0000,
-0x6060,0x604a,0x6061,0x0000,0x6218,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x631f,0x6317,0x62ea,0x6321,
-0x6304,0x6305,0x0000,0x6531,0x6544,0x6540,0x0000,0x6542,
-0x65be,0x0000,0x6629,0x661b,0x0000,0x6623,0x662c,0x661a,
-0x6630,0x663b,0x661e,0x6637,0x6638,0x0000,0x670e,0x0000,
-0x0000,0x67e8,0x67d6,0x0000,0x67c7,0x67bc,0x6852,0x67bf,
-0x67d5,0x67fe,0x8363,0x67fb,0x0000,0x67b1,0x6801,0x6805,
-0x6800,0x67d7,0x0000,0x6b2a,0x6b6b,0x0000,0x0000,0x0000,
-0x0000,0x6be1,0x0000,0x0000,0x6d23,0x6cff,0x6d14,0x6d05,
-0x6d13,0x6d06,0x6d21,0x0000,0x6d15,0x6caf,0x6cf4,0x6d02,
-0x6d45,0x0000,0x6d26,0x0000,0x6d44,0x0000,0x6d24,0x70a5,
-0x0000,0x70a3,0x0000,0x70a2,0x70bb,0x70a0,0x70aa,0x0000,
-0x0000,0x70a8,0x70b6,0x70b2,0x70a7,0x0000,0x0000,0x70b9,
-0x722e,0x0000,0x723c,0x0000,0x726d,0x0000,0x0000,0x72e7,
-0x72ed,0x0000,0x72ec,0x72e5,0x72e2,0x0000,0x73c4,0x73bd,
-0x73cf,0x73c9,0x73c1,0x73d0,0x0000,0x73ce,0x74ed,0x74eb,
-0x0000,0x74ef,0x7549,0x7550,0x7546,0x754a,0x0000,0x754d,
-0x75a6,0x0000,0x0000,0x0000,0x75a8,0x0000,0x0000,0x76c7,
-0x76ff,0x0000,0x76fd,0x77e6,0x780a,0x0000,0x7804,0x780b,
-0x7807,0x0000,0x7815,0x7808,0x0000,0x79d3,0x79d4,0x79d0,
-0x79d7,0x7a7c,0x0000,0x0000,0x7a7d,0x7a83,0x7a82,0x0000,
-0x7ad4,0x7ad5,0x7ad3,0x7ad0,0x7ad2,0x7afe,0x7afc,0x7c77,
-0x7c7c,0x7c7b,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x7f8f,0x80d3,0x0000,0x80cb,0x80d2,0x0000,
-0x8109,0x80e2,0x80df,0x80c6,0x0000,0x8224,0x82f7,0x82d8,
-0x82dd,0x0000,0x0000,0x82f8,0x82fc,0x0000,0x0000,0x82e9,
-0x0000,0x82ee,0x0000,0x82d0,0x830e,0x82e2,0x830b,0x82fd,
-0x5179,0x8676,0x0000,0x8678,0x0000,0x0000,0x8675,0x867d,
-0x0000,0x8842,0x8866,0x0000,0x898c,0x8a05,0x0000,0x8a06,
-0x0000,0x8c9f,0x0000,0x8ff1,0x8fe7,0x8fe9,0x8fef,0x90c2,
-0x90bc,0x0000,0x90c6,0x90c0,0x0000,0x0000,0x90cd,0x90c9,
-0x0000,0x90c4,0x0000,0x9581,0x0000,0x9cec,0x5032,0x4ff9,
-0x501d,0x4fff,0x5004,0x4ff0,0x5003,0x0000,0x5002,0x4ffc,
-0x4ff2,0x5024,0x5008,0x5036,0x502e,0x0000,0x5010,0x5038,
-0x5039,0x4ffd,0x5056,0x4ffb,0x51a3,0x51a6,0x51a1,0x0000,
-0x0000,0x51c7,0x51c9,0x5260,0x5264,0x5259,0x5265,0x5267,
-0x5257,0x5263,0x0000,0x5253,0x0000,0x52cf,0x0000,0x52ce,
-0x52d0,0x52d1,0x52cc,0x0000,0x0000,0x0000,0x550d,0x54f4,
-0x0000,0x5513,0x54ef,0x54f5,0x54f9,0x5502,0x5500,0x0000,
-0x0000,0x5518,0x54f0,0x54f6,0x0000,0x0000,0x5519,0x0000,
-0x5705,0x57c9,0x0000,0x57b7,0x57cd,0x0000,0x0000,0x0000,
-0x57be,0x57bb,0x0000,0x57db,0x57c8,0x57c4,0x57c5,0x57d1,
-0x57ca,0x57c0,0x0000,0x0000,0x5a21,0x5a2a,0x0000,0x5a1d,
-0x0000,0x5a0b,0x0000,0x0000,0x0000,0x0000,0x5a22,0x0000,
-0x0000,0x5a24,0x0000,0x5a14,0x5a31,0x0000,0x5a2f,0x5a1a,
-0x5a12,0x0000,0x0000,0x5a26,0x0000,0x0000,0x5bbc,0x5bbb,
-0x5bb7,0x5c05,0x5c06,0x5c52,0x5c53,0x0000,0x0000,0x5cfa,
-0x5ceb,0x0000,0x5cf3,0x5cf5,0x5ce9,0x5cef,0x0000,0x5e2a,
-0x5e30,0x5e2e,0x5e2c,0x5e2f,0x5eaf,0x5ea9,0x0000,0x5efd,
-0x5f32,0x5f8e,0x5f93,0x5f8f,0x604f,0x6099,0x0000,0x607e,
-0x0000,0x6074,0x604b,0x6073,0x6075,0x0000,0x0000,0x6056,
-0x60a9,0x608b,0x60a6,0x0000,0x6093,0x60ae,0x609e,0x60a7,
-0x6245,0x0000,0x0000,0x632e,0x0000,0x6352,0x6330,0x635b,
-0x0000,0x6319,0x631b,0x0000,0x6331,0x635d,0x6337,0x6335,
-0x6353,0x0000,0x635c,0x633f,0x654b,0x0000,0x0000,0x658b,
-0x0000,0x659a,0x6650,0x6646,0x664e,0x6640,0x0000,0x664b,
-0x6648,0x0000,0x6660,0x6644,0x664d,0x0000,0x6837,0x6824,
-0x0000,0x0000,0x681b,0x6836,0x0000,0x682c,0x6819,0x6856,
-0x6847,0x683e,0x681e,0x0000,0x6815,0x6822,0x6827,0x6859,
-0x6858,0x6855,0x6830,0x6823,0x6b2e,0x6b2b,0x6b30,0x6b6c,
-0x0000,0x6b8b,0x0000,0x6be9,0x6bea,0x6be5,0x6d6b,0x0000,
-0x0000,0x6d73,0x6d57,0x0000,0x0000,0x6d5d,0x6d56,0x6d8f,
-0x6d5b,0x6d1c,0x6d9a,0x6d9b,0x6d99,0x0000,0x6d81,0x6d71,
-0x0000,0x0000,0x6d72,0x6d5c,0x6d96,0x70c4,0x70db,0x70cc,
-0x70d0,0x70e3,0x70df,0x0000,0x70d6,0x70ee,0x70d5,0x0000,
-0x0000,0x0000,0x0000,0x727a,0x0000,0x72f5,0x7302,0x0000,
-0x0000,0x73e2,0x73ec,0x73d5,0x73f9,0x73df,0x73e6,0x0000,
-0x0000,0x0000,0x0000,0x73e4,0x73e1,0x74f3,0x0000,0x0000,
-0x0000,0x0000,0x7556,0x7555,0x7558,0x7557,0x755e,0x75c3,
-0x0000,0x0000,0x75b4,0x0000,0x75b1,0x0000,0x0000,0x76cb,
-0x76cc,0x772a,0x0000,0x7716,0x770f,0x0000,0x0000,0x773f,
-0x772b,0x770e,0x7724,0x0000,0x7721,0x7718,0x77dd,0x0000,
-0x0000,0x7824,0x7836,0x0000,0x7958,0x7959,0x0000,0x7962,
-0x79da,0x79d9,0x0000,0x79e1,0x79e5,0x79e8,0x79db,0x0000,
-0x79e2,0x79f0,0x0000,0x0000,0x0000,0x0000,0x7ada,0x7add,
-0x0000,0x7adb,0x7adc,0x0000,0x0000,0x7b0d,0x7b0b,0x7b14,
-0x7c8e,0x7c86,0x0000,0x7c87,0x7c83,0x7c8b,0x0000,0x0000,
-0x0000,0x0000,0x7d24,0x0000,0x0000,0x0000,0x7d25,0x7f62,
-0x7f93,0x7f99,0x7f97,0x0000,0x0000,0x7fc4,0x7fc6,0x800a,
-0x0000,0x0000,0x8040,0x803c,0x803b,0x80f6,0x80ff,0x80ee,
-0x8104,0x8103,0x8107,0x0000,0x0000,0x80f7,0x0000,0x0000,
-0x822d,0x0000,0x8227,0x8229,0x831f,0x8357,0x0000,0x0000,
-0x0000,0x0000,0x8321,0x0000,0x0000,0x8318,0x8358,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x8684,0x869f,0x869b,0x8689,
-0x86a6,0x8692,0x868f,0x86a0,0x884f,0x8878,0x887a,0x886e,
-0x887b,0x8884,0x8873,0x0000,0x0000,0x8a0d,0x8a0b,0x8a19,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x8ff9,0x9009,
-0x9008,0x0000,0x90de,0x9151,0x0000,0x0000,0x91db,0x91df,
-0x91de,0x91d6,0x91e0,0x9585,0x9660,0x9659,0x0000,0x9656,
-0x0000,0x0000,0x96bd,0x0000,0x0000,0x5042,0x5059,0x0000,
-0x5044,0x5066,0x5052,0x5054,0x5071,0x5050,0x507b,0x507c,
-0x5058,0x0000,0x0000,0x5079,0x506c,0x5078,0x51a8,0x51d1,
-0x51cf,0x5268,0x5276,0x52d4,0x0000,0x53a0,0x53c4,0x0000,
-0x5558,0x554c,0x5568,0x0000,0x5549,0x0000,0x0000,0x555d,
-0x5529,0x0000,0x5554,0x5553,0x0000,0x555a,0x0000,0x553a,
-0x553f,0x552b,0x57ea,0x0000,0x57ef,0x0000,0x0000,0x57dd,
-0x57fe,0x0000,0x57de,0x57e6,0x0000,0x57e8,0x57ff,0x5803,
-0x58f7,0x68a6,0x591f,0x0000,0x595b,0x595d,0x595e,0x0000,
-0x0000,0x5a2b,0x0000,0x5a3b,0x0000,0x0000,0x5a61,0x5a3a,
-0x5a6e,0x5a4b,0x5a6b,0x0000,0x0000,0x5a45,0x5a4e,0x5a68,
-0x5a3d,0x5a71,0x5a3f,0x5a6f,0x5a75,0x0000,0x5a73,0x5a2c,
-0x5a59,0x5a54,0x5a4f,0x5a63,0x0000,0x0000,0x5bc8,0x0000,
-0x5bc3,0x0000,0x5c5b,0x5c61,0x0000,0x5d21,0x5d0a,0x5d09,
-0x0000,0x5d2c,0x5d08,0x0000,0x0000,0x5d2a,0x5d15,0x0000,
-0x5d10,0x5d13,0x0000,0x5d2f,0x5d18,0x0000,0x5de3,0x5e39,
-0x5e35,0x5e3a,0x5e32,0x0000,0x0000,0x0000,0x0000,0x5ebb,
-0x5eba,0x5f34,0x5f39,0x0000,0x0000,0x0000,0x0000,0x6098,
-0x0000,0x60d0,0x0000,0x0000,0x0000,0x60d7,0x60aa,0x0000,
-0x60a1,0x60a4,0x0000,0x60ee,0x0000,0x60e7,0x0000,0x0000,
-0x60de,0x0000,0x0000,0x637e,0x638b,0x0000,0x0000,0x6379,
-0x6386,0x6393,0x0000,0x6373,0x636a,0x0000,0x636c,0x0000,
-0x637f,0x0000,0x63b2,0x63ba,0x0000,0x0000,0x6366,0x6374,
-0x0000,0x655a,0x0000,0x654e,0x654d,0x658d,0x658e,0x65ad,
-0x0000,0x65c7,0x65ca,0x0000,0x65c9,0x0000,0x65e3,0x6657,
-0x0000,0x6663,0x6667,0x671a,0x6719,0x6716,0x0000,0x0000,
-0x689e,0x68b6,0x6898,0x6873,0x0000,0x689a,0x688e,0x68b7,
-0x68db,0x68a5,0x686c,0x68c1,0x6884,0x0000,0x0000,0x6895,
-0x687a,0x6899,0x0000,0x68b8,0x68b9,0x6870,0x0000,0x6b35,
-0x0000,0x6b90,0x6bbb,0x6bed,0x0000,0x0000,0x0000,0x6dc1,
-0x6dc3,0x6dce,0x0000,0x0000,0x6dad,0x6e04,0x0000,0x6db9,
-0x0000,0x6de7,0x0000,0x6e08,0x6e06,0x0000,0x6e0a,0x6db0,
-0x0000,0x6df8,0x6e0c,0x0000,0x6db1,0x0000,0x6e02,0x6e07,
-0x6e09,0x6e01,0x6e17,0x6dff,0x6e12,0x0000,0x0000,0x7103,
-0x7107,0x7101,0x70f5,0x70f1,0x7108,0x70f2,0x710f,0x0000,
-0x70fe,0x0000,0x0000,0x0000,0x731a,0x7310,0x730e,0x7402,
-0x73f3,0x0000,0x0000,0x73fb,0x0000,0x0000,0x0000,0x751b,
-0x7523,0x7561,0x7568,0x0000,0x7567,0x75d3,0x0000,0x0000,
-0x7690,0x0000,0x0000,0x76d5,0x76d7,0x76d6,0x7730,0x0000,
-0x7726,0x0000,0x7740,0x0000,0x771e,0x0000,0x0000,0x0000,
-0x7847,0x0000,0x784b,0x7851,0x784f,0x7842,0x7846,0x0000,
-0x796e,0x796c,0x79f2,0x0000,0x79f1,0x79f5,0x79f3,0x79f9,
-0x0000,0x0000,0x0000,0x7a9a,0x7a93,0x7a91,0x7ae1,0x0000,
-0x0000,0x7b21,0x7b1c,0x7b16,0x7b17,0x7b36,0x7b1f,0x0000,
-0x7c93,0x7c99,0x7c9a,0x7c9c,0x0000,0x7d49,0x0000,0x7d34,
-0x7d37,0x0000,0x7d2d,0x0000,0x7d4c,0x0000,0x0000,0x7d48,
-0x0000,0x0000,0x7f3b,0x0000,0x0000,0x0000,0x0000,0x8008,
-0x801a,0x0000,0x801d,0x0000,0x8049,0x8045,0x8044,0x7c9b,
-0x0000,0x0000,0x812a,0x812e,0x0000,0x0000,0x8131,0x0000,
-0x811a,0x8134,0x8117,0x0000,0x0000,0x0000,0x831d,0x8371,
-0x8384,0x8380,0x8372,0x83a1,0x0000,0x8379,0x8391,0x0000,
-0x839f,0x83ad,0x0000,0x0000,0x8323,0x0000,0x8385,0x839c,
-0x83b7,0x8658,0x865a,0x0000,0x8657,0x86b2,0x0000,0x86ae,
-0x0000,0x0000,0x0000,0x8845,0x889c,0x8894,0x88a3,0x888f,
-0x88a5,0x88a9,0x88a6,0x888a,0x88a0,0x8890,0x8992,0x8991,
-0x8994,0x0000,0x8a26,0x8a32,0x8a28,0x0000,0x0000,0x8a1c,
-0x0000,0x8a2b,0x8a20,0x0000,0x8a29,0x0000,0x0000,0x0000,
-0x8a21,0x8c3a,0x0000,0x8c5b,0x8c58,0x8c7c,0x0000,0x8ca6,
-0x8cae,0x8cad,0x8d65,0x0000,0x8d7e,0x0000,0x8d7c,0x8d7f,
-0x8d7a,0x8dbd,0x0000,0x0000,0x8dc0,0x8dbb,0x8ead,0x8eaf,
-0x8ed6,0x0000,0x0000,0x0000,0x0000,0x0000,0x8ed9,0x0000,
-0x0000,0x9012,0x900e,0x9025,0x0000,0x9013,0x90ee,0x0000,
-0x90ab,0x90f7,0x0000,0x9159,0x9154,0x91f2,0x91f0,0x91e5,
-0x91f6,0x0000,0x0000,0x9587,0x0000,0x965a,0x0000,0x0000,
-0x966e,0x0000,0x0000,0x0000,0x9679,0x0000,0x98e1,0x98e6,
-0x0000,0x9ec4,0x9ed2,0x4e80,0x0000,0x4e81,0x508f,0x5097,
-0x5088,0x5089,0x0000,0x0000,0x5081,0x5160,0x0000,0x0000,
-0x5e42,0x51d3,0x0000,0x0000,0x51d2,0x51d6,0x5273,0x0000,
-0x5270,0x0000,0x0000,0x0000,0x53a8,0x53a6,0x53c5,0x5597,
-0x55de,0x0000,0x0000,0x5596,0x55b4,0x0000,0x5585,0x0000,
-0x559b,0x55a0,0x0000,0x5559,0x0000,0x5586,0x0000,0x0000,
-0x55af,0x557a,0x0000,0x0000,0x0000,0x559e,0x0000,0x55a9,
-0x570f,0x570e,0x581a,0x0000,0x581f,0x0000,0x583c,0x5818,
-0x583e,0x5826,0x0000,0x583a,0x0000,0x5822,0x0000,0x58fb,
-0x5963,0x5964,0x0000,0x5aa8,0x5aa3,0x5a82,0x5a88,0x5aa1,
-0x5a85,0x5a98,0x0000,0x5a99,0x0000,0x5a89,0x5a81,0x5a96,
-0x5a80,0x0000,0x0000,0x5a91,0x0000,0x0000,0x0000,0x0000,
-0x5acf,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x5a87,
-0x5aa0,0x0000,0x5a79,0x0000,0x5a86,0x5aab,0x5aaa,0x5aa4,
-0x5a8d,0x5a7e,0x0000,0x5bd5,0x0000,0x0000,0x0000,0x5c1e,
-0x5c5f,0x5c5e,0x5d44,0x5d3e,0x0000,0x5d48,0x5d1c,0x0000,
-0x5d5b,0x5d4d,0x0000,0x0000,0x5d57,0x0000,0x5d53,0x5d4f,
-0x0000,0x5d3b,0x5d46,0x0000,0x0000,0x5e46,0x5e47,0x0000,
-0x5e48,0x5ec0,0x5ebd,0x5ebf,0x0000,0x5f11,0x0000,0x5f3e,
-0x5f3b,0x0000,0x5f3a,0x0000,0x0000,0x0000,0x5fa7,0x0000,
-0x60ea,0x0000,0x6107,0x6122,0x610c,0x0000,0x0000,0x60b3,
-0x60d6,0x60d2,0x0000,0x60e3,0x60e5,0x60e9,0x0000,0x0000,
-0x6111,0x60fd,0x0000,0x0000,0x611e,0x6120,0x6121,0x621e,
-0x0000,0x63e2,0x63de,0x63e6,0x0000,0x0000,0x0000,0x0000,
-0x63f8,0x0000,0x63fe,0x63c1,0x63bf,0x63f7,0x63d1,0x655f,
-0x6560,0x6561,0x0000,0x0000,0x65d1,0x0000,0x0000,0x667d,
-0x666b,0x667f,0x0000,0x0000,0x6673,0x6681,0x666d,0x6669,
-0x0000,0x0000,0x671e,0x68ed,0x0000,0x0000,0x0000,0x0000,
-0x6903,0x0000,0x68fe,0x68e5,0x691e,0x6902,0x0000,0x0000,
-0x6909,0x68ca,0x6900,0x0000,0x6901,0x6918,0x68e2,0x68cf,
-0x0000,0x692e,0x68c5,0x68ff,0x0000,0x691c,0x68c3,0x0000,
-0x6b6f,0x0000,0x6b6e,0x0000,0x6bbe,0x0000,0x6bf4,0x6c2d,
-0x0000,0x6db6,0x6e75,0x6e1e,0x0000,0x6e18,0x0000,0x6e48,
-0x0000,0x6e4f,0x0000,0x6e42,0x6e6a,0x6e70,0x6dfe,0x0000,
-0x0000,0x6e6d,0x0000,0x6e7b,0x6e7e,0x6e59,0x0000,0x6e57,
-0x0000,0x6e80,0x6e50,0x0000,0x6e29,0x6e76,0x6e2a,0x6e4c,
-0x712a,0x0000,0x7135,0x712c,0x7137,0x711d,0x0000,0x0000,
-0x7138,0x0000,0x7134,0x712b,0x7133,0x7127,0x7124,0x0000,
-0x712d,0x7232,0x7283,0x7282,0x7287,0x7306,0x7324,0x7338,
-0x732a,0x732c,0x732b,0x0000,0x732f,0x7328,0x7417,0x0000,
-0x0000,0x7419,0x7438,0x0000,0x741f,0x7414,0x743c,0x73f7,
-0x741c,0x7415,0x7418,0x7439,0x74f9,0x7524,0x0000,0x0000,
-0x0000,0x756e,0x756d,0x7571,0x758e,0x0000,0x75e5,0x0000,
-0x0000,0x0000,0x0000,0x7694,0x76b3,0x0000,0x76d9,0x0000,
-0x7748,0x7749,0x7743,0x0000,0x0000,0x7742,0x77df,0x0000,
-0x7863,0x7876,0x0000,0x785f,0x7866,0x7966,0x7971,0x0000,
-0x0000,0x7976,0x7984,0x7975,0x79ff,0x7a07,0x0000,0x7a0e,
-0x7a09,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x7ae7,
-0x7ae2,0x7b55,0x0000,0x0000,0x7b43,0x7b57,0x7b6c,0x7b42,
-0x7b53,0x0000,0x7b41,0x0000,0x0000,0x7ca7,0x7ca0,0x7ca6,
-0x7ca4,0x7d74,0x0000,0x7d59,0x0000,0x7d60,0x7d57,0x7d6c,
-0x7d7e,0x7d64,0x0000,0x7d5a,0x7d5d,0x0000,0x0000,0x0000,
-0x7d76,0x7d4d,0x7d75,0x0000,0x7fd3,0x7fd6,0x0000,0x0000,
-0x8060,0x804e,0x8145,0x813b,0x0000,0x8148,0x8142,0x8149,
-0x8140,0x8114,0x8141,0x0000,0x81ef,0x81f6,0x8203,0x0000,
-0x83ed,0x0000,0x83da,0x8418,0x83d2,0x8408,0x0000,0x8400,
-0x0000,0x0000,0x0000,0x8417,0x8346,0x8414,0x83d3,0x8405,
-0x841f,0x8402,0x8416,0x83cd,0x83e6,0x0000,0x865d,0x86d5,
-0x86e1,0x0000,0x0000,0x0000,0x0000,0x86ee,0x8847,0x8846,
-0x0000,0x0000,0x88bb,0x0000,0x88bf,0x88b4,0x0000,0x88b5,
-0x0000,0x899a,0x8a43,0x0000,0x0000,0x8a5a,0x0000,0x0000,
-0x0000,0x8a35,0x8a38,0x8a42,0x8a49,0x8a5d,0x8a4b,0x8a3d,
-0x0000,0x0000,0x0000,0x0000,0x8c60,0x8c5e,0x8c7f,0x8c7e,
-0x8c83,0x0000,0x8cb1,0x8d87,0x0000,0x0000,0x8d88,0x8d83,
-0x0000,0x0000,0x8d86,0x8d8b,0x8d82,0x8dca,0x8dd2,0x0000,
-0x0000,0x8dd4,0x8dc9,0x8eb0,0x0000,0x0000,0x0000,0x8ef2,
-0x8ee4,0x8ef3,0x8eea,0x0000,0x8efd,0x0000,0x8f9d,0x902b,
-0x902a,0x0000,0x9028,0x9029,0x902c,0x0000,0x0000,0x903a,
-0x9030,0x9037,0x903b,0x0000,0x910a,0x0000,0x0000,0x0000,
-0x91fe,0x9220,0x0000,0x920b,0x0000,0x9218,0x9222,0x0000,
-0x921b,0x9208,0x0000,0x920e,0x9213,0x0000,0x0000,0x9595,
-0x0000,0x0000,0x0000,0x968c,0x967b,0x967f,0x9681,0x0000,
-0x9682,0x0000,0x0000,0x0000,0x0000,0x0000,0x96ee,0x96ed,
-0x0000,0x96ec,0x975f,0x976f,0x0000,0x976d,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x98f0,0x0000,0x0000,0x0000,
-0x9aa9,0x0000,0x0000,0x9ae0,0x4eb7,0x0000,0x0000,0x50cc,
-0x50bc,0x0000,0x50aa,0x50b9,0x0000,0x50ab,0x50c3,0x50cd,
-0x517e,0x527e,0x5279,0x0000,0x0000,0x52e1,0x52e0,0x52e7,
-0x5380,0x53ab,0x53aa,0x53a9,0x53e0,0x55ea,0x0000,0x55d7,
-0x0000,0x0000,0x55c1,0x5715,0x0000,0x586c,0x0000,0x585c,
-0x5850,0x5861,0x586a,0x5869,0x5856,0x5860,0x5866,0x585f,
-0x5923,0x5966,0x5968,0x0000,0x0000,0x5ace,0x0000,0x5ac5,
-0x5ac3,0x0000,0x0000,0x5ad0,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x5b74,0x5b76,0x5bdc,0x5bd7,0x5bda,0x5bdb,
-0x0000,0x5c20,0x5d6d,0x5d66,0x0000,0x5d64,0x5d6e,0x0000,
-0x5d60,0x5f42,0x5f5a,0x5f6e,0x0000,0x0000,0x6130,0x613a,
-0x612a,0x6143,0x6119,0x6131,0x0000,0x613d,0x0000,0x0000,
-0x0000,0x6408,0x6432,0x6438,0x0000,0x6431,0x0000,0x6419,
-0x0000,0x6411,0x0000,0x0000,0x6429,0x641d,0x0000,0x0000,
-0x0000,0x643c,0x0000,0x6446,0x6447,0x0000,0x0000,0x643a,
-0x6407,0x0000,0x656b,0x0000,0x6570,0x656d,0x0000,0x65e4,
-0x6693,0x0000,0x0000,0x0000,0x0000,0x668f,0x0000,0x0000,
-0x6692,0x0000,0x668e,0x0000,0x6946,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x6931,0x0000,0x0000,0x693e,
-0x0000,0x697c,0x6943,0x0000,0x6973,0x0000,0x6955,0x0000,
-0x0000,0x6985,0x694d,0x6950,0x6947,0x6967,0x6936,0x6964,
-0x6961,0x0000,0x697d,0x6b44,0x6b40,0x6b71,0x6b73,0x6b9c,
-0x0000,0x0000,0x0000,0x6bc1,0x0000,0x6bfa,0x6c31,0x6c32,
-0x0000,0x0000,0x6eb8,0x6ea8,0x0000,0x6e91,0x6ebb,0x0000,
-0x6e9a,0x0000,0x0000,0x6ea9,0x0000,0x0000,0x6eb5,0x6e6c,
-0x6ee8,0x0000,0x6edd,0x6eda,0x6ee6,0x6eac,0x0000,0x0000,
-0x0000,0x6ed9,0x6ee3,0x6ee9,0x6edb,0x0000,0x716f,0x0000,
-0x0000,0x7148,0x0000,0x714a,0x716b,0x0000,0x714f,0x7157,
-0x7174,0x0000,0x0000,0x0000,0x7145,0x7151,0x716d,0x0000,
-0x7251,0x7250,0x724e,0x0000,0x7341,0x0000,0x732e,0x7346,
-0x0000,0x7427,0x0000,0x7448,0x7453,0x743d,0x0000,0x745d,
-0x7456,0x0000,0x741e,0x7447,0x7443,0x7458,0x7449,0x0000,
-0x744c,0x7445,0x743e,0x0000,0x7501,0x751e,0x0000,0x0000,
-0x757a,0x75ee,0x7602,0x7697,0x7698,0x0000,0x0000,0x0000,
-0x775d,0x7764,0x7753,0x7758,0x7882,0x7890,0x788a,0x0000,
-0x787a,0x787d,0x0000,0x788b,0x7878,0x0000,0x0000,0x788d,
-0x7888,0x7892,0x7881,0x797e,0x7983,0x0000,0x0000,0x0000,
-0x7980,0x0000,0x0000,0x0000,0x7a0f,0x0000,0x0000,0x7a1d,
-0x0000,0x7aa1,0x7aa4,0x0000,0x7ae9,0x7aea,0x0000,0x7b62,
-0x7b6b,0x0000,0x7b5e,0x0000,0x7b79,0x0000,0x0000,0x7b6f,
-0x7b68,0x0000,0x0000,0x7cae,0x0000,0x0000,0x0000,0x7cb0,
-0x0000,0x7d90,0x0000,0x7d8a,0x0000,0x7d8b,0x7d99,0x7d95,
-0x0000,0x7d87,0x7d78,0x7d97,0x7d89,0x7d98,0x0000,0x0000,
-0x0000,0x7fa3,0x0000,0x0000,0x0000,0x7fdd,0x8057,0x0000,
-0x8163,0x816a,0x816c,0x0000,0x0000,0x0000,0x815d,0x8175,
-0x0000,0x815f,0x0000,0x817d,0x816d,0x0000,0x0000,0x8241,
-0x844f,0x8484,0x0000,0x847f,0x0000,0x8448,0x842a,0x847b,
-0x8472,0x8464,0x842e,0x845c,0x8453,0x0000,0x8441,0x84c8,
-0x0000,0x8462,0x8480,0x843e,0x8483,0x8471,0x0000,0x844a,
-0x8455,0x8458,0x0000,0x0000,0x0000,0x86fc,0x86fd,0x8715,
-0x0000,0x8716,0x86ff,0x0000,0x0000,0x0000,0x8858,0x88cf,
-0x88e0,0x0000,0x0000,0x0000,0x0000,0x89e7,0x8a6a,0x8a80,
-0x0000,0x8a6f,0x8a65,0x0000,0x8a78,0x8a7d,0x8a88,0x0000,
-0x0000,0x8a64,0x8a7e,0x0000,0x8a67,0x8c63,0x8c88,0x0000,
-0x8ccd,0x0000,0x8cc9,0x0000,0x8ded,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x8eb1,0x0000,0x0000,0x8f04,
-0x8f9e,0x8fa0,0x9043,0x9046,0x9048,0x9045,0x9040,0x904c,
-0x0000,0x0000,0x910c,0x9113,0x9115,0x0000,0x916b,0x9167,
-0x925d,0x9255,0x9235,0x0000,0x9259,0x922f,0x923c,0x928f,
-0x925c,0x926a,0x9262,0x925f,0x926b,0x926e,0x923b,0x9244,
-0x9241,0x959a,0x0000,0x9599,0x0000,0x0000,0x0000,0x968f,
-0x0000,0x9696,0x0000,0x0000,0x0000,0x96f4,0x96fc,0x0000,
-0x9755,0x0000,0x9779,0x0000,0x0000,0x0000,0x97ee,0x97f5,
-0x0000,0x980b,0x0000,0x98f3,0x0000,0x0000,0x98f7,0x98ff,
-0x98f5,0x0000,0x98ec,0x98f1,0x0000,0x0000,0x999a,0x0000,
-0x9ae2,0x9b3d,0x9b5d,0x9ce8,0x0000,0x9ceb,0x9cef,0x9cee,
-0x9e81,0x9f14,0x50d0,0x50d9,0x50dc,0x50d8,0x0000,0x50e1,
-0x50eb,0x0000,0x0000,0x50f4,0x50e2,0x50de,0x0000,0x0000,
-0x0000,0x51f4,0x0000,0x0000,0x0000,0x52ed,0x52ea,0x0000,
-0x5332,0x0000,0x53ae,0x53b0,0x0000,0x55fb,0x5603,0x560b,
-0x0000,0x5607,0x0000,0x55f8,0x0000,0x5628,0x561e,0x0000,
-0x5618,0x5611,0x5651,0x5605,0x5717,0x5892,0x0000,0x588c,
-0x0000,0x5878,0x5884,0x5873,0x58ad,0x5897,0x5895,0x5877,
-0x5872,0x5896,0x588d,0x5910,0x0000,0x596c,0x0000,0x5ae7,
-0x0000,0x5ae4,0x0000,0x0000,0x5aef,0x5626,0x0000,0x0000,
-0x5af0,0x5d7b,0x0000,0x5d83,0x0000,0x0000,0x5d8b,0x5d8c,
-0x0000,0x5d78,0x5e52,0x0000,0x0000,0x5ed0,0x5ecf,0x0000,
-0x5fb3,0x5fb4,0x0000,0x0000,0x0000,0x617b,0x0000,0x616f,
-0x6181,0x613c,0x6142,0x6138,0x6133,0x0000,0x6160,0x6169,
-0x617d,0x6186,0x622c,0x6228,0x0000,0x644c,0x0000,0x6457,
-0x647c,0x0000,0x0000,0x6455,0x6462,0x6471,0x646a,0x6456,
-0x643b,0x6481,0x0000,0x644f,0x647e,0x6464,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x6571,0x0000,0x0000,0x66a5,0x669a,
-0x669c,0x0000,0x66a6,0x0000,0x66a4,0x698f,0x69c5,0x69c8,
-0x6992,0x69b2,0x0000,0x0000,0x0000,0x69e3,0x69c0,0x69d6,
-0x69d1,0x699f,0x69a2,0x69d2,0x0000,0x0000,0x0000,0x69e1,
-0x69d5,0x699d,0x0000,0x0000,0x6998,0x0000,0x6b74,0x6ba1,
-0x0000,0x6ef0,0x6ef3,0x0000,0x0000,0x6f1b,0x6f0c,0x6f1d,
-0x6f34,0x6f28,0x6f17,0x0000,0x6f44,0x6f42,0x6f04,0x6f11,
-0x6efa,0x6f4a,0x7191,0x718e,0x0000,0x718b,0x718d,0x717f,
-0x718c,0x717e,0x717c,0x7183,0x0000,0x7188,0x0000,0x0000,
-0x7294,0x0000,0x7355,0x7353,0x734f,0x7354,0x746c,0x7465,
-0x7466,0x7461,0x746b,0x7468,0x7476,0x0000,0x7460,0x0000,
-0x7474,0x7506,0x760e,0x0000,0x7607,0x0000,0x0000,0x76b9,
-0x0000,0x76b7,0x76e2,0x0000,0x7774,0x7777,0x7776,0x7775,
-0x0000,0x7778,0x7771,0x0000,0x777a,0x715b,0x777b,0x78a6,
-0x78ae,0x78b8,0x0000,0x0000,0x0000,0x78b1,0x78af,0x0000,
-0x7989,0x7987,0x0000,0x0000,0x7a29,0x0000,0x7a2a,0x0000,
-0x7a2d,0x7a2c,0x0000,0x7a32,0x0000,0x7aec,0x7af0,0x7b81,
-0x7b9e,0x7b83,0x0000,0x7b92,0x0000,0x7ba3,0x7b9f,0x7b93,
-0x0000,0x7b86,0x7cb8,0x7cb7,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x7dc8,0x7db6,0x0000,0x7dd1,0x0000,0x7da8,0x7dab,
-0x0000,0x7db3,0x7dcd,0x0000,0x7dcf,0x7da4,0x0000,0x0000,
-0x7f41,0x7f6f,0x7f71,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x8023,0x805b,0x0000,0x8061,0x805f,0x8181,0x0000,
-0x0000,0x8184,0x8213,0x0000,0x824a,0x824c,0x0000,0x0000,
-0x0000,0x84bd,0x8495,0x0000,0x8492,0x84c3,0x0000,0x8496,
-0x84a5,0x84b5,0x84b3,0x84a3,0x84e4,0x84d8,0x84d5,0x0000,
-0x84b7,0x84ad,0x84da,0x8493,0x8736,0x0000,0x0000,0x0000,
-0x873d,0x872b,0x8747,0x8739,0x0000,0x8745,0x871d,0x0000,
-0x88ff,0x88ea,0x0000,0x88f5,0x0000,0x8900,0x88ed,0x8903,
-0x88e9,0x0000,0x0000,0x89ea,0x0000,0x8a9b,0x8a8e,0x8aa2,
-0x0000,0x8a9c,0x8a94,0x8a90,0x8aa9,0x8aac,0x0000,0x8a9f,
-0x0000,0x0000,0x8a9d,0x0000,0x8c67,0x0000,0x0000,0x8cd0,
-0x8cd6,0x8cd4,0x8d98,0x8d9a,0x8d97,0x0000,0x0000,0x0000,
-0x8e0b,0x8e08,0x8e01,0x8eb4,0x8eb3,0x0000,0x8fa1,0x8fa2,
-0x0000,0x905a,0x0000,0x9061,0x905f,0x0000,0x0000,0x9125,
-0x917b,0x9176,0x917c,0x0000,0x9289,0x92f6,0x92b1,0x92ad,
-0x9292,0x9281,0x9284,0x0000,0x92ae,0x9290,0x929e,0x0000,
-0x0000,0x0000,0x95a2,0x95a7,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x96a0,0x969d,0x969f,0x96d0,0x0000,0x96d1,0x0000,
-0x0000,0x9759,0x0000,0x9764,0x0000,0x0000,0x0000,0x9819,
-0x0000,0x9814,0x9815,0x981a,0x0000,0x0000,0x0000,0x0000,
-0x9906,0x0000,0x98f8,0x9901,0x0000,0x99be,0x99bc,0x99b7,
-0x99b6,0x99c0,0x0000,0x99b8,0x0000,0x0000,0x0000,0x99c4,
-0x0000,0x99bf,0x0000,0x9ada,0x9ae4,0x9ae9,0x9ae8,0x9aea,
-0x9ae5,0x0000,0x9b26,0x0000,0x0000,0x9b40,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x9ebd,0x0000,0x0000,
-0x0000,0x0000,0x510e,0x0000,0x50f7,0x0000,0x50fc,0x510d,
-0x5101,0x51da,0x51d9,0x51db,0x5286,0x528e,0x52ee,0x5333,
-0x53b1,0x0000,0x5647,0x562d,0x5654,0x0000,0x564b,0x5652,
-0x5631,0x5644,0x5656,0x5650,0x562b,0x0000,0x564d,0x5637,
-0x564f,0x58a2,0x58b7,0x0000,0x58b2,0x0000,0x58aa,0x58b5,
-0x58b0,0x0000,0x58b4,0x58a4,0x58a7,0x0000,0x5926,0x5afe,
-0x0000,0x5b04,0x0000,0x5afc,0x0000,0x5b06,0x5b0a,0x5afa,
-0x5b0d,0x5b00,0x5b0e,0x0000,0x0000,0x0000,0x5d91,0x0000,
-0x5d8f,0x5d90,0x5d98,0x5da4,0x5d9b,0x5da3,0x5d96,0x5de4,
-0x5e5a,0x0000,0x0000,0x5e5e,0x0000,0x5fb8,0x6157,0x615c,
-0x61a6,0x6195,0x6188,0x0000,0x61a3,0x618f,0x0000,0x6164,
-0x0000,0x6159,0x6178,0x0000,0x6185,0x6187,0x619e,0x0000,
-0x0000,0x6198,0x619c,0x0000,0x0000,0x622f,0x6480,0x649b,
-0x648e,0x648d,0x6494,0x64c6,0x0000,0x64a8,0x6483,0x0000,
-0x64b9,0x6486,0x64b4,0x64af,0x6491,0x0000,0x64aa,0x64a1,
-0x64a7,0x66b6,0x66b3,0x0000,0x66bc,0x66ac,0x0000,0x66ad,
-0x6a0e,0x0000,0x6a1c,0x6a1a,0x0000,0x0000,0x6a0b,0x0000,
-0x69ef,0x6a0c,0x69f0,0x6a22,0x0000,0x69d8,0x0000,0x6a12,
-0x69fa,0x0000,0x6a2a,0x0000,0x6a10,0x0000,0x0000,0x6a29,
-0x69f9,0x69ea,0x6a2c,0x6a24,0x0000,0x69e9,0x6b52,0x6b4f,
-0x6b53,0x0000,0x0000,0x6f10,0x6f65,0x6f75,0x0000,0x0000,
-0x0000,0x0000,0x6fd0,0x0000,0x6f5c,0x6f3d,0x6f71,0x0000,
-0x6f91,0x6f0b,0x6f79,0x6f81,0x6f8f,0x0000,0x6f59,0x6f74,
-0x0000,0x71ae,0x0000,0x71a3,0x71ad,0x0000,0x0000,0x71ab,
-0x71a6,0x71a2,0x0000,0x52f2,0x7257,0x7255,0x7299,0x734b,
-0x747a,0x0000,0x0000,0x0000,0x748c,0x7484,0x0000,0x0000,
-0x7482,0x7493,0x747b,0x0000,0x7509,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x778a,0x0000,0x7790,0x0000,0x78c6,
-0x78d3,0x78c0,0x78d2,0x78c7,0x78c2,0x0000,0x799f,0x799d,
-0x799e,0x0000,0x7a41,0x0000,0x7a38,0x7a3a,0x7a42,0x0000,
-0x0000,0x7a3e,0x7ab0,0x7bae,0x7bb3,0x0000,0x0000,0x7bbf,
-0x0000,0x0000,0x7bcd,0x0000,0x7bb2,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x7cc4,0x7ccd,0x7cc2,0x7cc6,
-0x7cc3,0x7cc9,0x7cc7,0x0000,0x7df8,0x0000,0x7ded,0x7de2,
-0x0000,0x0000,0x0000,0x7ddc,0x7e02,0x7e01,0x0000,0x7dd6,
-0x0000,0x7de4,0x7dfe,0x0000,0x7e00,0x7dfc,0x7dfd,0x0000,
-0x7df5,0x7dff,0x0000,0x7deb,0x7de5,0x7f78,0x7fae,0x7fe7,
-0x0000,0x8065,0x806a,0x8066,0x8068,0x806b,0x8194,0x81a1,
-0x8192,0x8196,0x8193,0x0000,0x0000,0x8501,0x0000,0x84f8,
-0x0000,0x84f5,0x0000,0x8504,0x0000,0x0000,0x0000,0x0000,
-0x851b,0x8503,0x8533,0x8534,0x84ed,0x0000,0x0000,0x8535,
-0x0000,0x8505,0x0000,0x0000,0x0000,0x0000,0x877d,0x0000,
-0x0000,0x0000,0x8771,0x0000,0x885c,0x88e6,0x890f,0x891b,
-0x0000,0x89a9,0x89a5,0x89ee,0x8ab1,0x0000,0x8acc,0x8ace,
-0x0000,0x8ab7,0x0000,0x8ab5,0x8ae9,0x8ab4,0x0000,0x8ab3,
-0x8ac1,0x8aaf,0x8aca,0x8ad0,0x0000,0x0000,0x0000,0x8c8e,
-0x0000,0x0000,0x8ce9,0x8cdb,0x0000,0x8ceb,0x8da4,0x0000,
-0x8da2,0x8d9d,0x0000,0x0000,0x0000,0x0000,0x8e2a,0x8e28,
-0x0000,0x0000,0x8eb8,0x8eb6,0x8eb9,0x8eb7,0x8f22,0x8f2b,
-0x8f27,0x8f19,0x8fa4,0x0000,0x8fb3,0x0000,0x9071,0x906a,
-0x0000,0x0000,0x9188,0x918c,0x92bf,0x92b8,0x92be,0x92dc,
-0x92e5,0x0000,0x0000,0x92d4,0x92d6,0x0000,0x92da,0x92ed,
-0x92f3,0x92db,0x0000,0x92b9,0x92e2,0x92eb,0x95af,0x0000,
-0x95b2,0x95b3,0x0000,0x0000,0x0000,0x96a3,0x96a5,0x0000,
-0x0000,0x0000,0x0000,0x970a,0x0000,0x9787,0x9789,0x978c,
-0x97ef,0x982a,0x9822,0x0000,0x981f,0x0000,0x9919,0x0000,
-0x99ca,0x99da,0x0000,0x0000,0x0000,0x99de,0x99c8,0x99e0,
-0x0000,0x9ab6,0x9ab5,0x0000,0x9af4,0x0000,0x9b6b,0x9b69,
-0x9b72,0x9b63,0x0000,0x9d0d,0x0000,0x9d01,0x9d0c,0x0000,
-0x9cf8,0x0000,0x0000,0x9cfe,0x9d02,0x9e84,0x0000,0x9eab,
-0x9eaa,0x511d,0x5116,0x0000,0x512b,0x511e,0x511b,0x5290,
-0x5294,0x5314,0x0000,0x0000,0x5667,0x0000,0x567b,0x0000,
-0x565f,0x5661,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x58c3,0x58ca,0x58bb,0x58c0,0x58c4,0x5901,0x5b1f,
-0x5b18,0x5b11,0x5b15,0x0000,0x5b12,0x5b1c,0x0000,0x5b22,
-0x5b79,0x5da6,0x0000,0x5db3,0x5dab,0x5eea,0x0000,0x5f5b,
-0x0000,0x0000,0x61b7,0x61ce,0x61b9,0x61bd,0x61cf,0x61c0,
-0x6199,0x6197,0x0000,0x61bb,0x61d0,0x61c4,0x6231,0x0000,
-0x64d3,0x64c0,0x0000,0x0000,0x0000,0x0000,0x64dc,0x64d1,
-0x64c8,0x0000,0x64d5,0x66c3,0x0000,0x0000,0x66bf,0x66c5,
-0x0000,0x66cd,0x66c1,0x6706,0x0000,0x6724,0x6a63,0x6a42,
-0x6a52,0x0000,0x6a43,0x6a33,0x0000,0x6a6c,0x6a57,0x0000,
-0x6a4c,0x6a6e,0x0000,0x0000,0x0000,0x0000,0x0000,0x6a37,
-0x0000,0x6a71,0x6a4a,0x6a36,0x0000,0x6a53,0x0000,0x6a45,
-0x6a70,0x0000,0x0000,0x6a5c,0x6b58,0x6b57,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x6fbb,0x0000,0x0000,0x6fbe,
-0x0000,0x0000,0x0000,0x6fb5,0x6fd3,0x6f9f,0x0000,0x6fb7,
-0x6ff5,0x71b7,0x0000,0x71bb,0x0000,0x71d1,0x0000,0x71ba,
-0x0000,0x71b6,0x71cc,0x0000,0x0000,0x71d3,0x749b,0x0000,
-0x0000,0x7496,0x74a2,0x749d,0x750a,0x750e,0x0000,0x7581,
-0x762c,0x7637,0x7636,0x763b,0x0000,0x76a1,0x0000,0x0000,
-0x7798,0x0000,0x7796,0x0000,0x0000,0x0000,0x78d6,0x78eb,
-0x0000,0x78dc,0x0000,0x79a5,0x79a9,0x9834,0x7a53,0x7a45,
-0x0000,0x7a4f,0x0000,0x7abd,0x7abb,0x7af1,0x0000,0x0000,
-0x7bec,0x7bed,0x0000,0x0000,0x7cd3,0x0000,0x7ce1,0x0000,
-0x7e19,0x0000,0x0000,0x0000,0x7e27,0x7e26,0x0000,0x0000,
-0x806e,0x81af,0x0000,0x0000,0x81ad,0x0000,0x81aa,0x8218,
-0x0000,0x0000,0x0000,0x0000,0x856f,0x854c,0x0000,0x8542,
-0x0000,0x855c,0x8570,0x855f,0x0000,0x855a,0x854b,0x853f,
-0x878a,0x0000,0x878b,0x87a1,0x878e,0x0000,0x0000,0x8799,
-0x885e,0x885f,0x8924,0x89a7,0x8aea,0x8afd,0x8af9,0x8ae3,
-0x8ae5,0x0000,0x0000,0x8aec,0x0000,0x0000,0x0000,0x0000,
-0x8cf2,0x0000,0x8cef,0x0000,0x8da6,0x0000,0x0000,0x0000,
-0x8e3b,0x8e43,0x0000,0x8e32,0x8f31,0x8f30,0x0000,0x8f2d,
-0x8f3c,0x8fa7,0x8fa5,0x0000,0x0000,0x0000,0x9137,0x9195,
-0x918e,0x0000,0x9196,0x0000,0x9345,0x930a,0x0000,0x0000,
-0x92fd,0x9317,0x931c,0x9307,0x9331,0x9332,0x932c,0x9330,
-0x9303,0x9305,0x0000,0x95c2,0x0000,0x95b8,0x0000,0x95c1,
-0x0000,0x0000,0x0000,0x96ab,0x96b7,0x0000,0x0000,0x9715,
-0x9714,0x0000,0x0000,0x970c,0x9717,0x0000,0x9793,0x0000,
-0x97d2,0x0000,0x0000,0x9836,0x9831,0x9833,0x983c,0x982e,
-0x983a,0x0000,0x983d,0x0000,0x98b5,0x9922,0x9923,0x9920,
-0x991c,0x991d,0x0000,0x99a0,0x0000,0x99ef,0x99e8,0x99eb,
-0x0000,0x0000,0x0000,0x99e1,0x99e6,0x0000,0x0000,0x9af8,
-0x9af5,0x0000,0x0000,0x9b83,0x9b94,0x9b84,0x0000,0x9b8b,
-0x9b8f,0x0000,0x9b8c,0x0000,0x9b89,0x0000,0x9b8e,0x0000,
-0x0000,0x0000,0x9d24,0x9d0f,0x0000,0x9d13,0x9d0a,0x0000,
-0x0000,0x0000,0x0000,0x9d2a,0x9d1a,0x0000,0x9d27,0x9d16,
-0x9d21,0x0000,0x9e85,0x9eac,0x9ec6,0x9ec5,0x9ed7,0x9f53,
-0x0000,0x5128,0x5127,0x51df,0x0000,0x5335,0x53b3,0x0000,
-0x568a,0x567d,0x5689,0x0000,0x58cd,0x58d0,0x0000,0x5b2b,
-0x5b33,0x5b29,0x5b35,0x5b31,0x5b37,0x5c36,0x5dbe,0x0000,
-0x5db9,0x0000,0x5dbb,0x0000,0x61e2,0x61db,0x61dd,0x61dc,
-0x61da,0x0000,0x61d9,0x0000,0x0000,0x64df,0x0000,0x0000,
-0x64e1,0x0000,0x64ee,0x0000,0x65b5,0x66d4,0x66d5,0x0000,
-0x66d0,0x66d1,0x66ce,0x66d7,0x0000,0x0000,0x6a7d,0x6a8a,
-0x0000,0x6aa7,0x0000,0x6a99,0x6a82,0x6a88,0x0000,0x0000,
-0x6a86,0x0000,0x6a98,0x6a9d,0x0000,0x0000,0x6a8f,0x0000,
-0x6aaa,0x0000,0x6b5d,0x0000,0x6c0a,0x0000,0x6fd7,0x6fd6,
-0x6fe5,0x0000,0x0000,0x0000,0x6fd9,0x6fda,0x6fea,0x0000,
-0x6ff6,0x0000,0x0000,0x71e3,0x0000,0x71e9,0x0000,0x71eb,
-0x71ef,0x71f3,0x71ea,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x7371,0x0000,0x74ae,0x0000,0x74b3,0x0000,0x74ac,0x0000,
-0x0000,0x7583,0x7645,0x764e,0x7644,0x76a3,0x76a5,0x77a6,
-0x77a4,0x0000,0x77a9,0x77af,0x0000,0x0000,0x0000,0x78f0,
-0x78f8,0x78f1,0x0000,0x7a49,0x0000,0x0000,0x0000,0x7ac2,
-0x7af2,0x7af3,0x7bfa,0x0000,0x7bf6,0x7bfc,0x7c18,0x7c08,
-0x7c12,0x0000,0x0000,0x7cdb,0x7cda,0x0000,0x0000,0x0000,
-0x7e2c,0x7e4d,0x0000,0x0000,0x7f46,0x7ff6,0x802b,0x8074,
-0x81b8,0x81c8,0x0000,0x0000,0x0000,0x8592,0x8593,0x0000,
-0x857f,0x85ab,0x8597,0x0000,0x0000,0x85ac,0x0000,0x0000,
-0x0000,0x87ce,0x0000,0x87cd,0x0000,0x0000,0x87c1,0x87b1,
-0x87c7,0x0000,0x8940,0x0000,0x893f,0x8939,0x0000,0x8943,
-0x0000,0x0000,0x0000,0x89ab,0x0000,0x8b1f,0x8b09,0x8b0c,
-0x0000,0x0000,0x8c40,0x0000,0x8c96,0x0000,0x8cf6,0x8cf7,
-0x0000,0x8e46,0x8e4f,0x0000,0x0000,0x0000,0x8f3d,0x8f41,
-0x9366,0x9378,0x935d,0x9369,0x9374,0x937d,0x936e,0x9372,
-0x9373,0x9362,0x9348,0x9353,0x935f,0x9368,0x0000,0x937f,
-0x936b,0x0000,0x95c4,0x0000,0x96af,0x96ad,0x96b2,0x0000,
-0x0000,0x971a,0x971b,0x0000,0x0000,0x0000,0x0000,0x979b,
-0x979f,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x9840,0x0000,0x9847,0x0000,0x98b7,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x99a2,0x0000,0x0000,0x9a00,0x99f3,
-0x0000,0x0000,0x99f5,0x0000,0x0000,0x9abd,0x9b00,0x9b02,
-0x0000,0x9b34,0x9b49,0x9b9f,0x0000,0x9ba3,0x9bcd,0x9b99,
-0x9b9d,0x0000,0x0000,0x9d39,0x0000,0x9d44,0x0000,0x0000,
-0x9d35,0x0000,0x0000,0x9eaf,0x0000,0x512f,0x0000,0x0000,
-0x9f8e,0x0000,0x569f,0x569b,0x569e,0x5696,0x5694,0x56a0,
-0x0000,0x5b3b,0x0000,0x0000,0x5b3a,0x5dc1,0x5f4d,0x5f5d,
-0x61f3,0x0000,0x0000,0x0000,0x0000,0x64f6,0x64e5,0x64ea,
-0x64e7,0x6505,0x0000,0x64f9,0x0000,0x0000,0x0000,0x6aab,
-0x6aed,0x6ab2,0x6ab0,0x6ab5,0x6abe,0x6ac1,0x6ac8,0x0000,
-0x6ac0,0x6abc,0x6ab1,0x6ac4,0x6abf,0x0000,0x0000,0x7008,
-0x7003,0x6ffd,0x7010,0x7002,0x7013,0x0000,0x71fa,0x7200,
-0x74b9,0x74bc,0x0000,0x765b,0x7651,0x764f,0x76eb,0x77b8,
-0x0000,0x77b9,0x77c1,0x77c0,0x77be,0x790b,0x0000,0x7907,
-0x790a,0x7908,0x0000,0x790d,0x7906,0x7915,0x79af,0x0000,
-0x0000,0x0000,0x7af5,0x0000,0x0000,0x7c2e,0x0000,0x7c1b,
-0x0000,0x7c1a,0x7c24,0x0000,0x0000,0x7ce6,0x7ce3,0x0000,
-0x0000,0x7e5d,0x7e4f,0x7e66,0x7e5b,0x7f47,0x7fb4,0x0000,
-0x0000,0x0000,0x7ffa,0x802e,0x0000,0x0000,0x81ce,0x0000,
-0x0000,0x8219,0x0000,0x0000,0x85cc,0x85b2,0x0000,0x85bb,
-0x85c1,0x0000,0x0000,0x0000,0x87e9,0x87ee,0x87f0,0x87d6,
-0x880e,0x87da,0x8948,0x894a,0x894e,0x894d,0x89b1,0x89b0,
-0x89b3,0x0000,0x8b38,0x8b32,0x0000,0x8b2d,0x0000,0x8b34,
-0x0000,0x8b29,0x8c74,0x0000,0x0000,0x8d03,0x0000,0x0000,
-0x8da9,0x8e58,0x0000,0x0000,0x8ebf,0x8ec1,0x8f4a,0x8fac,
-0x0000,0x9089,0x913d,0x913c,0x91a9,0x93a0,0x0000,0x9390,
-0x0000,0x9393,0x938b,0x93ad,0x93bb,0x93b8,0x0000,0x0000,
-0x939c,0x95d8,0x95d7,0x0000,0x0000,0x0000,0x975d,0x97a9,
-0x97da,0x0000,0x0000,0x0000,0x0000,0x9854,0x0000,0x9855,
-0x984b,0x0000,0x983f,0x98b9,0x0000,0x0000,0x0000,0x0000,
-0x9938,0x9936,0x9940,0x0000,0x993b,0x9939,0x99a4,0x0000,
-0x0000,0x9a08,0x9a0c,0x0000,0x9a10,0x0000,0x9b07,0x0000,
-0x9bd2,0x0000,0x9bc2,0x9bbb,0x9bcc,0x9bcb,0x0000,0x0000,
-0x9d4d,0x9d63,0x9d4e,0x0000,0x9d50,0x9d55,0x0000,0x9d5e,
-0x0000,0x9e90,0x9eb2,0x9eb1,0x0000,0x9eca,0x9f02,0x9f27,
-0x9f26,0x0000,0x56af,0x58e0,0x58dc,0x0000,0x5b39,0x0000,
-0x0000,0x5b7c,0x5bf3,0x0000,0x0000,0x5c6b,0x5dc4,0x650b,
-0x6508,0x650a,0x0000,0x0000,0x65dc,0x0000,0x0000,0x66e1,
-0x66df,0x6ace,0x6ad4,0x6ae3,0x6ad7,0x6ae2,0x0000,0x0000,
-0x0000,0x0000,0x6ad8,0x6ad5,0x6ad2,0x0000,0x0000,0x701e,
-0x702c,0x7025,0x6ff3,0x7204,0x7208,0x7215,0x0000,0x74c4,
-0x74c9,0x74c7,0x74c8,0x76a9,0x77c6,0x77c5,0x7918,0x791a,
-0x7920,0x0000,0x7a66,0x7a64,0x7a6a,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x7c35,0x7c34,0x0000,0x0000,0x7e6c,
-0x0000,0x7e6e,0x7e71,0x0000,0x81d4,0x81d6,0x821a,0x8262,
-0x8265,0x8276,0x85db,0x85d6,0x0000,0x85e7,0x0000,0x0000,
-0x85f4,0x0000,0x87fd,0x87d5,0x8807,0x0000,0x880f,0x87f8,
-0x0000,0x0000,0x8987,0x0000,0x89b5,0x89f5,0x0000,0x8b3f,
-0x8b43,0x8b4c,0x0000,0x8d0b,0x8e6b,0x8e68,0x8e70,0x8e75,
-0x8e77,0x0000,0x8ec3,0x0000,0x93e9,0x93ea,0x93cb,0x93c5,
-0x93c6,0x0000,0x93ed,0x93d3,0x0000,0x93e5,0x0000,0x0000,
-0x93db,0x93eb,0x93e0,0x93c1,0x0000,0x0000,0x95dd,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x97b2,0x97b4,0x97b1,0x97b5,0x97f2,0x0000,0x0000,0x0000,
-0x9856,0x0000,0x0000,0x0000,0x9944,0x0000,0x9a26,0x9a1f,
-0x9a18,0x9a21,0x9a17,0x0000,0x9b09,0x0000,0x0000,0x9bc5,
-0x9bdf,0x0000,0x9be3,0x0000,0x9be9,0x9bee,0x0000,0x0000,
-0x9d66,0x9d7a,0x0000,0x9d6e,0x9d91,0x9d83,0x9d76,0x9d7e,
-0x9d6d,0x0000,0x9e95,0x9ee3,0x0000,0x0000,0x9f03,0x9f04,
-0x0000,0x9f17,0x0000,0x5136,0x0000,0x5336,0x0000,0x5b42,
-0x0000,0x0000,0x5b44,0x5b46,0x5b7e,0x5dca,0x5dc8,0x5dcc,
-0x5ef0,0x0000,0x6585,0x66e5,0x66e7,0x0000,0x0000,0x0000,
-0x6af4,0x0000,0x6ae9,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x703d,0x0000,0x7036,0x0000,0x7216,0x0000,0x7212,0x720f,
-0x7217,0x7211,0x720b,0x0000,0x0000,0x74cd,0x74d0,0x74cc,
-0x74ce,0x74d1,0x0000,0x7589,0x0000,0x7a6f,0x7c4b,0x7c44,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x7e7f,0x8b71,0x0000,
-0x802f,0x807a,0x807b,0x807c,0x0000,0x0000,0x0000,0x85fc,
-0x8610,0x8602,0x0000,0x0000,0x85ee,0x8603,0x0000,0x860d,
-0x8613,0x8608,0x860f,0x8818,0x8812,0x0000,0x0000,0x8967,
-0x8965,0x89bb,0x8b69,0x8b62,0x0000,0x8b6e,0x0000,0x8b61,
-0x0000,0x8b64,0x8b4d,0x8c51,0x0000,0x0000,0x8e83,0x8ec6,
-0x0000,0x941f,0x0000,0x9404,0x9417,0x9408,0x9405,0x0000,
-0x93f3,0x941e,0x9402,0x941a,0x941b,0x9427,0x941c,0x0000,
-0x96b5,0x0000,0x0000,0x9733,0x0000,0x9734,0x9731,0x97b8,
-0x97ba,0x0000,0x97fc,0x0000,0x0000,0x98c3,0x0000,0x994d,
-0x0000,0x9a2f,0x0000,0x0000,0x0000,0x9ac9,0x0000,0x9ac8,
-0x9ac4,0x9b2a,0x9b38,0x9b50,0x0000,0x9c0a,0x9bfb,0x9c04,
-0x9bfc,0x9bfe,0x0000,0x0000,0x0000,0x9c02,0x9bf6,0x9c1b,
-0x9bf9,0x9c15,0x9c10,0x9bff,0x9c00,0x9c0c,0x0000,0x0000,
-0x9d95,0x9da5,0x0000,0x0000,0x0000,0x0000,0x9e98,0x9ec1,
-0x0000,0x9f5a,0x5164,0x56bb,0x0000,0x58e6,0x5b49,0x5bf7,
-0x0000,0x0000,0x5dd0,0x0000,0x5fc2,0x0000,0x6511,0x0000,
-0x6aff,0x6afe,0x6afd,0x0000,0x6b01,0x0000,0x0000,0x704b,
-0x704d,0x7047,0x74d3,0x7668,0x7667,0x0000,0x0000,0x77d1,
-0x7930,0x7932,0x792e,0x0000,0x9f9d,0x7ac9,0x7ac8,0x0000,
-0x7c56,0x7c51,0x0000,0x0000,0x0000,0x7e85,0x7e89,0x7e8e,
-0x7e84,0x0000,0x826a,0x862b,0x862f,0x8628,0x0000,0x8616,
-0x8615,0x861d,0x881a,0x0000,0x0000,0x0000,0x89bc,0x8b75,
-0x8b7c,0x0000,0x8d11,0x8d12,0x8f5c,0x91bb,0x0000,0x93f4,
-0x0000,0x0000,0x942d,0x0000,0x0000,0x96e4,0x9737,0x9736,
-0x9767,0x97be,0x97bd,0x97e2,0x9868,0x9866,0x98c8,0x98ca,
-0x98c7,0x98dc,0x0000,0x994f,0x99a9,0x9a3c,0x0000,0x9a3b,
-0x9ace,0x0000,0x9b14,0x9b53,0x0000,0x9c2e,0x0000,0x9c1f,
-0x0000,0x0000,0x0000,0x0000,0x9db0,0x9dbd,0x0000,0x0000,
-0x9dae,0x9dc4,0x9e7b,0x0000,0x0000,0x9e9e,0x0000,0x9f05,
-0x0000,0x9f69,0x9fa1,0x56c7,0x571d,0x5b4a,0x5dd3,0x0000,
-0x5f72,0x6202,0x0000,0x6235,0x6527,0x651e,0x651f,0x0000,
-0x0000,0x6b07,0x6b06,0x0000,0x0000,0x7054,0x721c,0x7220,
-0x7af8,0x0000,0x7c5d,0x7c58,0x0000,0x7e92,0x7f4e,0x0000,
-0x0000,0x0000,0x8827,0x0000,0x8b81,0x8b83,0x0000,0x8c44,
-0x0000,0x0000,0x0000,0x0000,0x9442,0x944d,0x9454,0x944e,
-0x0000,0x9443,0x0000,0x0000,0x973c,0x9740,0x97c0,0x0000,
-0x0000,0x0000,0x0000,0x995a,0x9a51,0x0000,0x9add,0x0000,
-0x0000,0x9c38,0x0000,0x9c45,0x9c3a,0x0000,0x9c35,0x0000,
-0x0000,0x0000,0x9ef1,0x0000,0x9f93,0x529a,0x0000,0x0000,
-0x8641,0x5dd7,0x0000,0x6528,0x0000,0x0000,0x0000,0x7053,
-0x7059,0x0000,0x7221,0x0000,0x766f,0x7937,0x79b5,0x7c62,
-0x7c5e,0x7cf5,0x0000,0x0000,0x863d,0x0000,0x882d,0x8989,
-0x8b8d,0x8b87,0x8b90,0x8d1a,0x8e99,0x0000,0x0000,0x0000,
-0x945f,0x0000,0x0000,0x9456,0x9461,0x945b,0x945a,0x945c,
-0x9465,0x0000,0x9741,0x0000,0x0000,0x986e,0x986c,0x986d,
-0x0000,0x99aa,0x9a5c,0x9a58,0x9ade,0x0000,0x9c4f,0x9c51,
-0x0000,0x9c53,0x0000,0x0000,0x0000,0x9dfc,0x9f39,0x0000,
-0x513e,0x0000,0x56d2,0x0000,0x5b4f,0x6b14,0x0000,0x7a72,
-0x7a73,0x0000,0x0000,0x0000,0x8b91,0x0000,0x0000,0x91bf,
-0x0000,0x946c,0x0000,0x0000,0x96e6,0x9745,0x0000,0x97c8,
-0x97e4,0x995d,0x0000,0x9b21,0x0000,0x9b2c,0x9b57,0x0000,
-0x0000,0x9c5d,0x9c61,0x9c65,0x9e08,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x9f45,0x0000,0x0000,0x6205,0x66ef,0x6b1b,
-0x6b1d,0x7225,0x7224,0x7c6d,0x0000,0x8642,0x8649,0x0000,
-0x8978,0x898a,0x8b97,0x0000,0x8c9b,0x8d1c,0x0000,0x8ea2,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x9c6c,0x0000,0x9c6f,0x0000,0x9e0e,0x0000,0x9f08,0x9f1d,
-0x9fa3,0x0000,0x0000,0x5f60,0x6b1c,0x0000,0x0000,0x0000,
-0x7cf3,0x0000,0x8b9b,0x8ea7,0x91c4,0x0000,0x947a,0x0000,
-0x0000,0x9a61,0x9a63,0x9ad7,0x9c76,0x0000,0x9fa5,0x0000,
-0x7067,0x0000,0x72ab,0x864a,0x897d,0x8b9d,0x8c53,0x8f65,
-0x947b,0x0000,0x98cd,0x98dd,0x0000,0x9b30,0x9e16,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x96e7,0x9e18,0x9ea2,0x0000,
-0x9f7c,0x0000,0x7e9e,0x9484,0x0000,0x9e1c,0x0000,0x7c71,
-0x97ca,0x0000,0x0000,0x0000,0x9ea3,0x0000,0x9c7b,0x9f97,
-0x0000,0x0000,0x9750,0x0000,0x0000,0x0000,0x5727,0x5c13,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x5fc8,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x6765,0x0000,0x0000,0x52bd,
-0x0000,0x5b66,0x0000,0x65f9,0x6788,0x6ce6,0x6ccb,0x0000,
-0x4fbd,0x5f8d,0x0000,0x6018,0x6048,0x0000,0x6b29,0x70a6,
-0x0000,0x7706,0x0000,0x0000,0x0000,0x5a10,0x5cfc,0x5cfe,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x70c9,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x9579,0x0000,
-0x96ba,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x7b29,0x8128,0x0000,0x8a2e,0x0000,0x0000,0x0000,0x9ad9,
-0x0000,0x582b,0x5845,0x0000,0x63fa,0x0000,0x0000,0x0000,
-0x6e86,0x0000,0x0000,0x0000,0x0000,0x0000,0x5867,0x0000,
-0x5bdd,0x656e,0x0000,0x0000,0x0000,0x8c87,0x0000,0x50d2,
-0x50df,0x0000,0x0000,0x0000,0x0000,0x69ba,0x0000,0x6b9d,
-0x0000,0x8059,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x6f8a,0x0000,
-0x0000,0x7bc3,0x7bc2,0x0000,0x0000,0x0000,0x0000,0x90f6,
-0x0000,0x9823,0x0000,0x0000,0x0000,0x0000,0x0000,0x71cd,
-0x7499,0x0000,0x0000,0x0000,0x0000,0x0000,0x9842,0x0000,
-0x0000,0x0000,0x0000,0x7f84,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x8d0e,0x0000,0x9861,0x0000,0x0000,0x8b73,0x0000,
-0x9c27,0x0000,0x9458,0x77d6,0x9b2d,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x4f66,0x4f68,0x4fe7,0x503f,0x0000,0x50a6,0x510f,
-0x523e,0x5324,0x5365,0x539b,0x517f,0x54cb,0x5573,0x5571,
-0x556b,0x55f4,0x5622,0x5620,0x5692,0x56ba,0x5691,0x56b0,
-0x5759,0x578a,0x580f,0x5812,0x5813,0x5847,0x589b,0x5900,
-0x594d,0x5ad1,0x5ad3,0x5b67,0x5c57,0x5c77,0x5cd5,0x5d75,
-0x5d8e,0x5da5,0x5db6,0x5dbf,0x5e65,0x5ecd,0x5eed,0x5f94,
-0x5f9a,0x5fba,0x6125,0x6150,0x62a3,0x6360,0x6364,0x63b6,
-0x6403,0x64b6,0x651a,0x7a25,0x5c21,0x66e2,0x6702,0x67a4,
-0x67ac,0x6810,0x6806,0x685e,0x685a,0x692c,0x6929,0x6a2d,
-0x6a77,0x6a7a,0x6aca,0x6ae6,0x6af5,0x6b0d,0x6b0e,0x6bdc,
-0x6bdd,0x6bf6,0x6c1e,0x6c63,0x6da5,0x6e0f,0x6e8a,0x6e84,
-0x6e8b,0x6e7c,0x6f4c,0x6f48,0x6f49,0x6f9d,0x6f99,0x6ff8,
-0x702e,0x702d,0x705c,0x79cc,0x70bf,0x70ea,0x70e5,0x7111,
-0x7112,0x713f,0x7139,0x713b,0x713d,0x7177,0x7175,0x7176,
-0x7171,0x7196,0x7193,0x71b4,0x71dd,0x71de,0x720e,0x5911,
-0x7218,0x7347,0x7348,0x73ef,0x7412,0x743b,0x74a4,0x748d,
-0x74b4,0x7673,0x7677,0x76bc,0x7819,0x781b,0x783d,0x7853,
-0x7854,0x7858,0x78b7,0x78d8,0x78ee,0x7922,0x794d,0x7986,
-0x7999,0x79a3,0x79bc,0x7aa7,0x7b37,0x7b59,0x7bd0,0x7c2f,
-0x7c32,0x7c42,0x7c4e,0x7c68,0x7ca9,0x7ced,0x7dd0,0x7e07,
-0x7dd3,0x7e64,0x7f40,0x0000,0x8041,0x8063,0x80bb,0x6711,
-0x6725,0x8248,0x8310,0x8362,0x8312,0x8421,0x841e,0x84e2,
-0x84de,0x84e1,0x8573,0x85d4,0x85f5,0x8637,0x8645,0x8672,
-0x874a,0x87a9,0x87a5,0x87f5,0x8834,0x8850,0x8887,0x8954,
-0x8984,0x8b03,0x8c52,0x8cd8,0x8d0c,0x8d18,0x8db0,0x8ebc,
-0x8ed5,0x8faa,0x909c,0x0000,0x915c,0x922b,0x9221,0x9273,
-0x92f4,0x92f5,0x933f,0x9342,0x9386,0x93be,0x93bc,0x93bd,
-0x93f1,0x93f2,0x93ef,0x9422,0x9423,0x9424,0x9467,0x9466,
-0x9597,0x95ce,0x95e7,0x973b,0x974d,0x98e4,0x9942,0x9b1d,
-0x9b98,0x0000,0x9d49,0x6449,0x5e71,0x5e85,0x61d3,0x990e,
-0x8002,0x781e,0x0000,0x0000,0x5528,0x5572,0x55ba,0x55f0,
-0x55ee,0x56b8,0x56b9,0x56c4,0x8053,0x92b0};
-
-static const int cns11643_14_ucs_table_size = (sizeof(cns11643_14_ucs_table)/sizeof(unsigned short));
-
-/* UCS -> CNS11643 */
-static const unsigned int ucs_a1_cns11643_table[] = {
-/* 0x0000 */
-0x00000,0x00001,0x00002,0x00003,0x00004,0x00005,0x00006,0x00007,
-0x00008,0x00009,0x0000a,0x0000b,0x0000c,0x0000d,0x0000e,0x0000f,
-0x00010,0x00011,0x00012,0x00013,0x00014,0x00015,0x00016,0x00017,
-0x00018,0x00019,0x0001a,0x0001b,0x0001c,0x0001d,0x0001e,0x0001f,
-0x00020,0x00021,0x00022,0x00023,0x00024,0x00025,0x00026,0x00027,
-0x00028,0x00029,0x0002a,0x0002b,0x0002c,0x0002d,0x0002e,0x0002f,
-0x00030,0x00031,0x00032,0x00033,0x00034,0x00035,0x00036,0x00037,
-0x00038,0x00039,0x0003a,0x0003b,0x0003c,0x0003d,0x0003e,0x0003f,
-0x00040,0x00041,0x00042,0x00043,0x00044,0x00045,0x00046,0x00047,
-0x00048,0x00049,0x0004a,0x0004b,0x0004c,0x0004d,0x0004e,0x0004f,
-0x00050,0x00051,0x00052,0x00053,0x00054,0x00055,0x00056,0x00057,
-0x00058,0x00059,0x0005a,0x0005b,0x0005c,0x0005d,0x0005e,0x0005f,
-0x00060,0x00061,0x00062,0x00063,0x00064,0x00065,0x00066,0x00067,
-0x00068,0x00069,0x0006a,0x0006b,0x0006c,0x0006d,0x0006e,0x0006f,
-0x00070,0x00071,0x00072,0x00073,0x00074,0x00075,0x00076,0x00077,
-0x00078,0x00079,0x0007a,0x0007b,0x0007c,0x0007d,0x0007e,0x0007f,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x12170,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x12278,0x12234,0x00000,0x00000,0x00000,0x00000,0x00000,0x12131,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x12232,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x12233,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-/* 0x0100 */
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-/* 0x0200 */
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x1256f,
-0x00000,0x1256d,0x1256e,0x12570,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x1256c,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-/* 0x0300 */
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x12475,0x12476,0x12477,0x12478,0x12479,0x1247a,0x1247b,
-0x1247c,0x1247d,0x1247e,0x12521,0x12522,0x12523,0x12524,0x12525,
-0x12526,0x12527,0x00000,0x12528,0x12529,0x1252a,0x1252b,0x1252c,
-0x1252d,0x1252e,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x1252f,0x12530,0x12531,0x12532,0x12533,0x12534,0x12535,
-0x12536,0x12537,0x12538,0x12539,0x1253a,0x1253b,0x1253c,0x1253d,
-0x1253e,0x1253f,0x00000,0x12540,0x12541,0x12542,0x12543,0x12544,
-0x12545,0x12546};
-
-static const int ucs_a1_cns11643_table_min = 0x0000;
-static const int ucs_a1_cns11643_table_max = 0x0000 + (sizeof (ucs_a1_cns11643_table) / sizeof (unsigned int));
-
-static const unsigned int ucs_a2_cns11643_table[] = {
-/* 0x2000 */
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x12139,0x12137,0x00000,0x1225d,0x00000,
-0x12164,0x12165,0x00000,0x00000,0x12166,0x12167,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x1212d,0x1212c,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x1216a,0x00000,0x00000,0x1216b,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x1216f,0x00000,0x00000,0x12223,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-/* 0x2100 */
-0x00000,0x00000,0x00000,0x1226a,0x00000,0x12222,0x00000,0x00000,
-0x00000,0x1226b,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x1242b,0x1242c,0x1242d,0x1242e,0x1242f,0x12430,0x12431,0x12432,
-0x12433,0x12434,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x12635,0x12636,0x12637,0x12638,0x12639,0x1263a,0x1263b,0x1263c,
-0x1263d,0x1263e,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x12258,0x12255,0x12257,0x12256,0x00000,0x00000,0x12259,0x1225a,
-0x1225c,0x1225b,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-/* 0x2200 */
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x12261,0x00000,0x00000,
-0x00000,0x00000,0x12235,0x00000,0x00000,0x00000,0x1223c,0x12249,
-0x12248,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x12245,0x12246,0x1224d,0x00000,0x00000,0x1224e,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x12250,0x1224f,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x12244,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x1223d,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x1223b,0x1223e,0x00000,0x00000,0x00000,0x00000,0x12239,0x1223a,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x12247,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x1224a,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-/* 0x2300 */
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x14221,0x14222,0x14223,0x14224,0x14225,0x14226,0x14227,0x14228,
-0x14229,0x1422a,0x1422b,0x1422c,0x1422d,0x1422e,0x1422f,0x14230,
-0x14231,0x14232,0x14233,0x14234,0x14235,0x14236,0x14237,0x14238,
-0x14239,0x1423a,0x1423b,0x1423c,0x1423d,0x1423e,0x1423f,0x14240,
-0x00000,0x14241,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x12621,0x12622,0x12623,0x12624,0x12625,0x12626,0x12627,0x12628,
-0x12629,0x1262a,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x1262b,0x1262c,0x1262d,0x1262e,
-0x1262f,0x12630,0x12631,0x12632,0x12633,0x12634,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x12339,0x00000,0x1233a,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x1233c,0x00000,0x00000,0x00000,
-0x1233d,0x00000,0x00000,0x00000,0x1233e,0x00000,0x00000,0x00000,
-0x1233f,0x00000,0x00000,0x00000,0x12337,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x12336,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x12335,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x12334,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x12333,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x12344,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x12345,0x00000,
-0x00000,0x12347,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x12346,0x00000,0x00000,0x12340,0x12341,0x12343,
-0x12342,0x1234c,0x1234d,0x1234e,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x12324,0x12325,0x12326,0x12327,0x12328,0x12329,0x1232a,
-0x1232b,0x12332,0x12331,0x12330,0x1232f,0x1232e,0x1232d,0x1232c,
-0x00000,0x00000,0x00000,0x00000,0x12338,0x1233b,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x1217c,0x1217b,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x12175,0x12174,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x1217e,0x1217d,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x1217a,0x12179,
-0x00000,0x00000,0x00000,0x12172,0x00000,0x00000,0x12176,0x12173,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x12348,0x12349,0x1234b,0x1234a,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-/* 0x2600 */
-0x00000,0x00000,0x00000,0x00000,0x00000,0x12178,0x12177,0x00000,
-0x00000,0x12254,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x12251,0x12253,0x12252};
-
-static const int ucs_a2_cns11643_table_min = 0x2000;
-static const int ucs_a2_cns11643_table_max = 0x2000 + (sizeof (ucs_a1_cns11643_table) / sizeof (unsigned int));
-
-static const unsigned int ucs_a3_cns11643_table[] = {
-/* 0x2f00 */
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x12121,0x12123,0x12124,0x12171,0x00000,0x00000,0x00000,0x00000,
-0x12152,0x12153,0x1214e,0x1214f,0x12156,0x12157,0x1215a,0x1215b,
-0x1214a,0x1214b,0x12265,0x00000,0x12146,0x12147,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x12168,0x12169,0x00000,
-0x00000,0x12435,0x12436,0x12437,0x12438,0x12439,0x1243a,0x1243b,
-0x1243c,0x1243d,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x12126,0x00000,0x00000,0x00000,0x00000,
-/* 0x3100 */
-0x00000,0x00000,0x00000,0x00000,0x00000,0x12547,0x12548,0x12549,
-0x1254a,0x1254b,0x1254c,0x1254d,0x1254e,0x1254f,0x12550,0x12551,
-0x12552,0x12553,0x12554,0x12555,0x12556,0x12557,0x12558,0x12559,
-0x1255a,0x1255b,0x1255c,0x1255d,0x1255e,0x1255f,0x12560,0x12561,
-0x12562,0x12563,0x12564,0x12565,0x12566,0x12567,0x12568,0x12569,
-0x1256a,0x1256b,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-/* 0x3200 */
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x12221,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-/* 0x3300 */
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x12275,0x12276,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x12270,0x12271,0x12272,0x00000,
-0x00000,0x12274,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x12277,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x12273,0x00000,
-0x00000,0x1224c,0x1224b,0x00000,0x00000,0x1226f};
-
-static const int ucs_a3_cns11643_table_min = 0x2f00;
-static const int ucs_a3_cns11643_table_max = 0x2f00 + (sizeof (ucs_a3_cns11643_table) / sizeof (unsigned int));
-
-static const unsigned int ucs_i_cns11643_table[] = {
-/* 0x4d00 */
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x14421,0x14423,0x00000,0x14424,0xe2126,0xe2125,0x00000,0x22126,
-0x14437,0x14435,0x14438,0x14436,0x22127,0x14462,0x2212f,0x2212d,
-0x14461,0x14460,0x00000,0x00000,0x14562,0x14561,0x14560,0x00000,
-0x14563,0x1455f,0x00000,0x00000,0x00000,0x00000,0x14722,0x14723,
-0xe2262,0xe2261,0xe2263,0x00000,0xe243f,0x00000,0x14b64,0x00000,
-0xe2121,0x00000,0xe212c,0x14439,0x00000,0x14463,0x22130,0x00000,
-0x14464,0x22143,0x1486b,0x22531,0x00000,0x00000,0xe2122,0x00000,
-0x1443a,0x14465,0x00000,0x14564,0x22144,0xe2740,0x00000,0xe2123,
-0x00000,0x00000,0x22121,0x14425,0x00000,0x1443c,0xe2130,0x22128,
-0x1443d,0xe212e,0x00000,0x14466,0x00000,0x14565,0x14567,0x14566,
-0x00000,0x00000,0x14724,0x14725,0xe2345,0x00000,0x14b65,0xe2b22,
-0x1537d,0x14422,0x00000,0x00000,0x22122,0x14426,0x1443f,0x1443e,
-0x00000,0x00000,0xe2146,0xe2145,0x00000,0x00000,0x00000,0x00000,
-0xe2264,0x14726,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0xe2440,0x00000,0x14b66,0x00000,0x00000,0x00000,0x00000,
-0x00000,0xe2b23,0x00000,0x00000,0x00000,0x00000,0x15871,0x2334e,
-0xe396c,0xe396e,0x1632a,0x24156,0x24157,0xe2124,0x14427,0xe212d,
-0x14468,0xe2265,0x00000,0x14b67,0x14428,0x22129,0x14440,0xe2131,
-0x00000,0x14469,0x1446b,0x22131,0x1446c,0x1446a,0x00000,0xe216c,
-0xe2266,0x14727,0x00000,0x14b68,0xe2442,0xe2742,0x14b69,0x14f67,
-0x00000,0x14441,0x1446d,0xe2147,0x14728,0x1472a,0x14729,0x00000,
-0x1486c,0x00000,0x00000,0x14b6a,0x14b6b,0x14f68,0x14f69,0xe2b26,
-0xe2b25,0xe2b27,0xe2b24,0x1537e,0x00000,0x00000,0x24158,0xe4033,
-0x00000,0x26d44,0x14429,0x00000,0xe2132,0x00000,0xe2133,0x00000,
-0x1446f,0x1446e,0x22132,0x14470,0x14476,0xe2149,0x14471,0x14472,
-0x22134,0x22133,0x14474,0x14475,0xe214c,0x14473,0xe214b,0xe214a,
-0x00000,0x00000,0x00000,0x00000,0x1456a,0x1456b,0x1456c,0x1456d,
-0x14569,0x14570,0x2214a,0x00000,0x22146,0x22149,0x14571,0x14623,
-0xe216d,0x22148,0x00000,0x1456e,0x1456f,0x14568,0xe2172,0xe2170,
-0x22145,0x22147,0x00000,0x00000,0x00000,0x00000,0xe226f,0xe2268,
-0x14737,0x2216f,0x14734,0x14738,0x22179,0x2216d,0x14735,0x22171,
-0xe226b,0xe2267,0xe2276,0x14736,0xe226e,0x14739,0x00000,0x1472b,
-0x22170,0x1473a,0x22174,0xe226d,0x22178,0x22175,0xe226c,0xe2274,
-0x22172,0x1472c,0x1472e,0x1473b,0x00000,0x14730,0x2216a,0x14733,
-0x14731,0x14732,0x2217a,0x22177,0x2216e,0x1472f,0xe2270,0xe2277,
-0x2216b,0x1472d,0xe2275,0x00000,0xe2273,0x22173,0x00000,0x00000,
-0x00000,0x00000,0x22176,0x00000,0x00000,0x00000,0x00000,0x00000,
-0xe2272,0x00000,0x00000,0x00000,0x2216c,0x22328,0x00000,0x14924,
-0x14875,0xe2450,0xe2448,0x22329,0x14872,0xe244f,0x14926,0xe2446,
-0x1487a,0xe2445,0x14879,0x2227b,0x1487d,0x14878,0x22322,0x2232a,
-0xe244e,0x22326,0xe2449,0x1487b,0xe244b,0xe2443,0x1487e,0x1486f,
-0x14929,0x2227d,0xe2444,0xe244c,0x2253d,0x1486d,0x14925,0x1486e,
-0x14876,0x14877,0x22324,0x2227e,0x1487c,0x14874,0x2227a,0x14870,
-0x22327,0x14927,0x1492a,0x14873,0x14922,0x14928,0x14871,0x22325,
-0x14923,0x2232b,0x2227c,0x14921,0x22321,0x00000,0xe6448,0x22323,
-0xe6449,0x14b79,0x2253f,0x2254b,0x14b71,0xe2747,0x2254c,0x14b6c,
-0x14b76,0x00000,0xe274f,0x14b6f,0x22539,0x14b77,0x22538,0x2253c,
-0x22543,0x22541,0x14c21,0x14b7a,0x22533,0x22535,0x14b7c,0x14b70,
-0x22536,0x22542,0x22549,0x14b75,0x2253b,0x22534,0x14b74,0x22537,
-0x14b78,0x2253a,0xe2744,0x14b73,0xe2751,0x14b6e,0xe2748,0x14b7d,
-0x22544,0x14b7e,0x22548,0xe2743,0x22546,0x2254a,0x14b7b,0x2253e,
-0x22532,0x00000,0x22540,0x14b72,0x22545,0x14b6d,0x22547,0xe274c,
-0xe2749,0xe274b,0xe274a,0xe274d,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x14f78,0x14f6c,
-0xe2b2d,0xe2b2e,0x22922,0x2292a,0xe2b36,0x14f6b,0x14f73,0x15021,
-0xe2b2c,0x22930,0x2292e,0x22929,0x00000,0xe6263,0xe2b2b,0x14f6d,
-0x2292f,0x22925,0x14f7b,0x14f72,0x14f7a,0x2287e,0xe2b32,0x2292c,
-0xe2b2f,0x22923,0x14f76,0x22924,0xe2b33,0x2287d,0x14f7d,0x14f70,
-0x14f79,0x14f6f,0xe2b28,0x22921,0x22926,0xe2b29,0x2292d,0x14f77,
-0x14f74,0x22928,0x14f7c,0x2292b,0x22927,0x14f71,0x14f7e,0x14f75,
-0x14f6e,0x14f6a,0x00000,0xe2b35,0x00000,0xe2b34,0x00000,0xe644a,
-0x00000,0x00000,0x00000,0x00000,0x22931,0x00000,0x1543a,0x15424,
-0xe2f48,0x15434,0xe2f4d,0x15439,0x22d71,0x22d70,0x22d75,0x22d76,
-0x15427,0xe2f44,0x15430,0xe2f58,0xe2f4c,0xe2f56,0x1543d,0xe2f46,
-0x15431,0x00000,0xe2f4b,0xe2f49,0xe2f47,0x22d6a,0x1542a,0x22d6b,
-0xe2f4f,0x1543f,0x00000,0x15436,0x15421,0x15422,0x22d7e,0x15924,
-0xe2f53,0x1542f,0x1542e,0x22d6c,0x15432,0x2335e,0x15429,0x22d77,
-0x15438,0x15437,0x1542d,0x22d6f,0x22d78,0xe2f45,0x22d69,0x1542c,
-0x22d79,0x15435,0x22d6d,0x15423,0xe2f4e,0x15426,0x15425,0x22d7a,
-0x15433,0x15428,0x1543c,0x1543e,0x22d74,0x1543b,0xe2f51,0x22d7c,
-0x22d6e,0x22d7d,0xe2f43,0x22d72,0x00000,0x22d7b,0xe2f50,0x22d73,
-0xe2f54,0xe2f55,0x00000,0x00000,0x1542b,0x00000,0x00000,0xe644b,
-0x23366,0x2335a,0xe343c,0x15876,0xe343f,0x2335f,0x23365,0x15875,
-0x23358,0x15879,0x2335c,0x23355,0x15877,0x23359,0x1587c,0x15923,
-0xe3444,0x2336a,0xe3441,0x23354,0xe3442,0x1587d,0xe2f57,0x23369,
-0xe3447,0xe343d,0x15878,0x2335b,0x15874,0x23356,0x23352,0x23360,
-0x23353,0x23351,0x2335d,0x23363,0x23364,0x1587a,0xe3440,0x00000,
-0x23a3f,0x23361,0x23350,0x23362,0xe344b,0x15926,0x23367,0x15925,
-0x2334f,0xe3443,0x23357,0x23368,0x15921,0x1587e,0x1587b,0x15922,
-0xe344c,0xe344a,0x15872,0xe3445,0xe3446,0x15873,0x00000,0x00000,
-0x15e2e,0xe3975,0x23a42,0x23a3b,0x00000,0x15e2b,0x00000,0x23a43,
-0xe3971,0xe3972,0x00000,0x23a39,0x23a3c,0x15e2a,0x23a3d,0xe396f,
-0x00000,0x15e2d,0x23a41,0x00000,0x23a37,0x23a36,0x15e2f,0xe3970,
-0x15e30,0x15e2c,0x15e31,0x23a35,0x23a40,0x23a3e,0x23a38,0x00000,
-0x00000,0x00000,0x15e29,0x23a3a,0x00000,0x00000,0xe644d,0x00000,
-0x00000,0x00000,0xe4039,0xe403c,0x16331,0x1632b,0x2415c,0x16334,
-0x24162,0x24165,0x1632d,0x1632e,0x2415f,0x1632c,0x24168,0x16332,
-0x24169,0xe403a,0x24164,0x16333,0xe4037,0x24159,0x16330,0x2415a,
-0x00000,0x24163,0x24161,0xe403d,0x2415d,0x1632f,0x2415b,0x16335,
-0x24160,0x24167,0x2415e,0x24166,0xe4036,0xe403e,0x1677c,0x16779,
-0xe456b,0x1677a,0xe634c,0x24921,0x24877,0x16778,0x16775,0x24878,
-0xe456e,0xe456c,0x16777,0x2487b,0xe456d,0x2487d,0xe4576,0xe634d,
-0x24926,0xe4570,0xe4575,0x24925,0x2487e,0x16774,0x24876,0x16772,
-0x24879,0x1677d,0x2487c,0xe4571,0x24922,0x16776,0x16773,0x24924,
-0x24923,0x1677b,0x00000,0x2487a,0xe4574,0x16c23,0x24f54,0xe4b29,
-0x24f51,0x16c24,0x00000,0x16c22,0xe4b2b,0x24f58,0x24f55,0x24f4e,
-0x16c21,0xe4b2d,0x16c25,0x24f4f,0x16b7e,0x16c28,0x24f52,0x24f53,
-0x16c26,0x16c27,0x24f59,0x24f56,0x24f57,0xe4b2c,0xe4b27,0xe644e,
-0x17033,0x25643,0x17030,0x25640,0x17032,0x17034,0xe5031,0x25641,
-0x17031,0x00000,0x25642,0xe5035,0x2563f,0xe5030,0xe5034,0x17341,
-0x25c49,0x17342,0x25c47,0x00000,0x25c48,0x25c46,0x25c45,0xe5441,
-0xe5440,0x25c4a,0x17340,0xe5033,0x00000,0x26144,0x26145,0xe5752,
-0x24f50,0x26143,0x17343,0x1782b,0x26537,0x26538,0xe5c32,0x17a62,
-0x17a63,0x26b4f,0x26b4e,0x17b58,0x17b57,0x26e7d,0xe606f,0x1442a,
-0x14442,0x14478,0x00000,0x14477,0x14573,0x14572,0x1473e,0x1473d,
-0x1473f,0x1473c,0xe2278,0x1492c,0x1492b,0x1492d,0xe2454,0x00000,
-0xe2453,0xe2451,0x14c23,0x00000,0x14c22,0x14c24,0xe2752,0x15022,
-0x00000,0x12279,0x22e21,0x1227a,0x15927,0x1227c,0x1227b,0x23a44,
-0xe3976,0x1227d,0x1677e,0x1227e,0xe5e25,0x1442b,0xe2134,0x14479,
-0x14740,0x14c25,0xe2b37,0x1442c,0x1447c,0x1447a,0x1447b,0x00000,
-0x00000,0x14741,0xe227a,0x00000,0x00000,0x1492e,0x14c27,0x14c26,
-0x14c28,0xe2e7b,0x00000,0x00000,0x15440,0x00000,0xe403f,0xe6453,
-0x17035,0x00000,0xe2127,0x00000,0xe214d,0xe2148,0xe214e,0x2212e,
-0x00000,0x14574,0x14575,0xe2178,0xe2179,0x14742,0x00000,0x2232c,
-0xe2755,0x15024,0x15023,0x22e23,0x22e22,0x15928,0xe2128,0x1447d,
-0x22135,0xe217a,0x00000,0x00000,0x00000,0xe2457,0x2254d,0xe2b39,
-0x15025,0xe2f5b,0x15443,0xe2f59,0x15441,0x15442,0xe2f5a,0x00000,
-0xe344d,0x00000,0x17036,0x00000,0x14576,0x00000,0x00000,0x00000,
-0x14743,0x2217b,0xe227e,0xe227d,0xe227c,0xe2459,0x1492f,0x14930,
-0xe245a,0x2232d,0x00000,0x00000,0x2254e,0x14c29,0x2254f,0x00000,
-0x00000,0xe2b3b,0xe2b3d,0xe2b3e,0x22e25,0x22e26,0x15446,0xe2f5e,
-0x22e27,0xe2f5f,0x22e24,0x15447,0x15445,0x15444,0x22e28,0xe344f,
-0x2336b,0xe344e,0xe397d,0xe397a,0x23a45,0x00000,0xe397e,0x2416a,
-0x24927,0xe4b2f,0xe4b2e,0xe4b30,0x16c29,0x17037,0x25644,0xe5442,
-0x1442d,0x1443b,0xe212f,0xe2135,0xe2151,0xe217b,0x00000,0x00000,
-0xe2322,0x00000,0x00000,0x00000,0xe245b,0xe2759,0x00000,0x00000,
-0x15929,0x15e33,0x00000,0x16821,0xe457a,0x22123,0x1447e,0x00000,
-0x14579,0x14577,0x14578,0x00000,0x00000,0x14c2a,0xe275a,0x00000,
-0x1442e,0x1442f,0x00000,0x14443,0xe2136,0xe2152,0x14521,0x14522,
-0x14523,0x2214c,0x1457a,0xe217d,0x2214b,0x00000,0x14747,0xe2325,
-0x2217d,0x14745,0x14746,0x2217c,0xe2324,0xe2326,0x14748,0x14744,
-0xe2327,0x00000,0x00000,0x00000,0x2232e,0x14f4f,0x2232f,0xe245f,
-0xe2461,0x22330,0x00000,0xe245c,0x14932,0x14931,0xe245e,0xe245d,
-0x14935,0x14933,0x14934,0xe2460,0x00000,0x00000,0x14c30,0xe275b,
-0x14c2f,0x22554,0x22551,0x22552,0xe275e,0x22550,0x14c31,0x14c2d,
-0x14c2c,0xe275f,0x14c2e,0x14c2b,0xe275d,0x00000,0xe644f,0x00000,
-0x00000,0x14c32,0x00000,0x15027,0x22932,0xe2b3f,0x22553,0x1502c,
-0xe2b40,0x22933,0x15028,0x1502b,0x1502a,0x15029,0x15026,0xe2b43,
-0x00000,0x00000,0x22e2b,0xe2f68,0x1544a,0x22e2e,0x15448,0xe2f65,
-0x00000,0xe2f62,0x22e2a,0x1544b,0x15449,0x1544c,0x22e2c,0x22e2d,
-0xe2f60,0x22e29,0x22e2f,0xe2f66,0xe2f61,0xe2f63,0x00000,0xe2f64,
-0xe3450,0x15e37,0x1592a,0x2336c,0x2336e,0x2336d,0x2336f,0x1592b,
-0xe3a23,0x00000,0x15e34,0xe3a21,0x15e35,0x15e36,0xe3451,0x16337,
-0x2416c,0xe4041,0x2416b,0x2416d,0x2416e,0x16338,0xe4040,0x16336,
-0x24928,0x24929,0x16823,0x16822,0x24c61,0x00000,0xe4b31,0x16c2a,
-0x16c2b,0x16c2c,0x16c2e,0x24f5a,0x24f5b,0x16c2d,0xe4b32,0x00000,
-0xe5036,0x17038,0x00000,0x17039,0xe5037,0x00000,0x26539,0x26b51,
-0x26b50,0x26e7e,0xe602c,0x14430,0xe2137,0xe2154,0xe2153,0x1457c,
-0x1457b,0x00000,0x00000,0x14749,0x00000,0x00000,0x2217e,0x00000,
-0xe2328,0x14937,0x14938,0x14936,0x14939,0x22331,0x22332,0x00000,
-0x00000,0x00000,0x00000,0xe2463,0xe2462,0xe2761,0x00000,0x00000,
-0x00000,0xe2760,0x00000,0x14c34,0x22555,0xe625a,0x14c33,0xe2762,
-0x22934,0x15030,0x22935,0x1502f,0xe2b48,0xe2b46,0x00000,0x1502d,
-0x00000,0x1502e,0xe2b47,0x00000,0xe2f6f,0x22e30,0xe2f6c,0xe2f6a,
-0xe2f6d,0xe2f6e,0x1592c,0x23371,0xe3452,0x1592f,0x23370,0x15b2b,
-0x1592e,0x1592d,0x00000,0x15e3a,0x00000,0x15e39,0x15e38,0x16339,
-0xe4045,0xe4044,0x1633c,0x1633d,0x1633b,0x00000,0x1633a,0xe4046,
-0x00000,0x2492a,0xe4621,0x2492b,0x00000,0xe457e,0xe4b33,0x24f5d,
-0x16c2f,0x24f5c,0xe4d2c,0x1703a,0x25c4b,0x17344,0x00000,0x2653a,
-0x17961,0x00000,0x14444,0x14524,0x22136,0xe2155,0x14525,0x14526,
-0xe2156,0x00000,0x00000,0xe2223,0xe2222,0x1457d,0x1457e,0xe2224,
-0x1474a,0x22333,0x22556,0x22557,0x00000,0x15031,0x22e31,0x15931,
-0x15930,0x23a47,0x23a46,0x00000,0xe5038,0x14431,0x14527,0x14621,
-0x00000,0x15932,0x22124,0x00000,0x2214d,0x14622,0xe2226,0x22222,
-0x1474c,0x1474b,0x22221,0x1493a,0xe6450,0xe2465,0x00000,0xe2b49,
-0x00000,0x00000,0x1544d,0x00000,0x00000,0x23372,0x00000,0x1633e,
-0x2492c,0x16824,0xe4623,0xe4b34,0x25645,0xe5444,0xe5c34,0x2686a,
-0xe2129,0x14528,0xe2157,0xe2466,0x22558,0x22936,0x15935,0x15933,
-0x15934,0x14432,0x00000,0x14445,0x1243f,0x1452b,0xe2159,0x1452a,
-0x14529,0x14625,0x14624,0xe232a,0x2214e,0x22223,0x00000,0xe232b,
-0xe232d,0x14c38,0x14c35,0x14c37,0x14c36,0xe2763,0x00000,0x15032,
-0xe2b4a,0x00000,0x15e3b,0x00000,0x14433,0xe215a,0x1452c,0xe2227,
-0x14627,0x14626,0x00000,0x22334,0x00000,0xe6451,0x14c39,0xe2a5c,
-0x00000,0xe212a,0x00000,0x00000,0x22137,0xe2228,0x14629,0x14628,
-0x1474d,0x1474e,0x22335,0x1493b,0xe2467,0x1493c,0xe2765,0x14c3a,
-0x14c3b,0x14c3c,0xe2766,0x15033,0x22937,0xe2b4b,0x00000,0x1544e,
-0xe4047,0x00000,0x22125,0x00000,0x1452d,0x00000,0xe215b,0x00000,
-0x00000,0xe2229,0x22224,0xe232f,0x00000,0x00000,0x22336,0x22337,
-0x00000,0x00000,0x22559,0xe2767,0x2255a,0x00000,0x22939,0x22938,
-0x2293b,0x2293a,0x15034,0xe6452,0x23373,0x15450,0x22e32,0x1544f,
-0xe3454,0x00000,0x00000,0x00000,0x23a48,0x15e3c,0xe3a28,0x23a49,
-0xe3a27,0xe404a,0xe4049,0xe4048,0x2492d,0x16825,0xe4625,0x00000,
-0xe4626,0xe4b35,0x16c30,0xe5445,0x2653b,0x00000,0xe212b,0xe215c,
-0x00000,0x22138,0xe222a,0x1462a,0x00000,0x00000,0xe2331,0x00000,
-0x00000,0xe2769,0xe276a,0x15936,0xe3455,0xe3a29,0x00000,0x00000,
-0x14434,0x14446,0x1452f,0x1452e,0xe215e,0x14530,0xe2160,0x00000,
-0xe222b,0x00000,0xe2333,0x00000,0x14c3e,0xe276b,0x14c3d,0x14c3f,
-0x00000,0xe2b50,0xe2b4f,0x15035,0xe2b4e,0xe2b4d,0x00000,0x15451,
-0xe404b,0x25646,0x1763b,0x14447,0x1462c,0x1463b,0x14636,0x00000,
-0x14631,0x14630,0x14637,0x14635,0x1462e,0x1463c,0x1462f,0x1462b,
-0x1463a,0x14639,0x14638,0x1462d,0xe2231,0x14634,0xe222d,0xe222e,
-0x14633,0xe222f,0x00000,0x1463d,0x14632,0x00000,0x00000,0xe2335,
-0xe2337,0x14754,0x00000,0x1475a,0x14756,0xe2339,0x1475c,0x22225,
-0x14759,0x1474f,0x14752,0x14755,0x14751,0x14758,0x1475b,0x14750,
-0x14753,0x14757,0x1475d,0xe233a,0x00000,0xe233b,0xe2334,0x00000,
-0x22340,0x2233d,0xe2476,0x14949,0x2233e,0x1493d,0x1493f,0x14957,
-0x14952,0xe2479,0xe247e,0xe2475,0x22345,0x2233f,0x14941,0x14943,
-0x22344,0x1494a,0x2233a,0x14956,0x14958,0x1493e,0x1494f,0xe2524,
-0x22338,0x14955,0xe2477,0x14946,0xe247b,0x14950,0x14951,0x22339,
-0x1494e,0x1494c,0xe2470,0x1494d,0x14953,0x22341,0x14940,0xe2521,
-0x14954,0x22343,0x14948,0x14945,0xe2473,0x2233c,0x14944,0x22346,
-0x14947,0xe247c,0x1494b,0xe2478,0xe2474,0xe246d,0x14942,0x22342,
-0xe247d,0xe2522,0x00000,0x00000,0x2233b,0x00000,0x00000,0x00000,
-0x00000,0x00000,0xe2523,0x00000,0x00000,0x00000,0x00000,0xe276e,
-0x2256b,0x2256a,0x14c51,0x2256d,0x2256f,0x22564,0x22567,0x2256e,
-0x14c52,0xe2774,0xe2778,0x22561,0x22565,0xe2775,0x00000,0x22569,
-0x2294a,0x14c4d,0x2294e,0x14c40,0x22566,0x14c41,0x14c4e,0x14c47,
-0x14c43,0xe2771,0x22562,0x14c46,0x14c4b,0x14c54,0x22563,0x2255c,
-0x14c45,0x2255d,0x2255f,0x00000,0x14c48,0xe276c,0x14c4a,0x2255b,
-0x22560,0xe2770,0xe2779,0x14c53,0x14c4f,0x22568,0x14c55,0xe2773,
-0x14c4c,0x2255e,0x14c49,0xe276f,0xe2777,0x14c44,0x14c42,0x00000,
-0x2256c,0x00000,0x14c50,0x00000,0x00000,0x00000,0xe2b5c,0xe2b5d,
-0x22949,0x2293d,0x2294c,0xe2b57,0xe2b59,0x2293f,0x1503c,0x1504a,
-0x15038,0x15049,0x15041,0x15046,0x15036,0x2293e,0x22944,0x15045,
-0x22950,0x15047,0xe2b5b,0x1503d,0xe2b54,0xe2b5e,0x22946,0x22943,
-0x1503b,0xe2b51,0x2293c,0x15048,0x2294b,0x15040,0x2294d,0x1504b,
-0x15037,0x15042,0x1503f,0x22941,0x15043,0x22947,0x22948,0x1503e,
-0x15044,0x1503a,0xe2b55,0xe6454,0xe2b63,0xe2b61,0x15039,0x22940,
-0xe2b53,0x00000,0x00000,0x00000,0x00000,0x00000,0x22945,0x00000,
-0x00000,0x00000,0xe2b58,0x00000,0x00000,0x00000,0x2294f,0x00000,
-0x22e46,0x1545e,0x22e34,0x00000,0x22e39,0x15457,0x15462,0x22e37,
-0x15452,0x1545c,0x15461,0x22e3e,0x00000,0x1545d,0x15460,0xe2f77,
-0xe3021,0x22e41,0x15458,0x22e38,0xe2f74,0xe2f78,0xe3022,0x22e44,
-0x22e45,0xe2f79,0x1545a,0x22e43,0x15456,0x15465,0x00000,0x22e3b,
-0xe2f7b,0x15454,0xe2f7a,0x22e48,0x22e3c,0x22e40,0x15459,0x15464,
-0x22e3d,0x1545f,0x22e42,0x22e49,0x23424,0xe2f73,0x22e47,0x15466,
-0x15453,0x22e3f,0x22e36,0xe2f76,0x1545b,0x00000,0x00000,0x22e35,
-0xe2f7e,0xe3025,0x22e3a,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x22e33,0x15463,
-0xe6721,0xe345f,0x2337a,0xe3468,0x15949,0x2342a,0x15947,0x15944,
-0x23421,0x15940,0x23425,0x1594b,0x23379,0x2337e,0x2337d,0x15455,
-0x15946,0x23428,0xe3466,0x2342b,0x23376,0x00000,0x15e4e,0xe3467,
-0x2342c,0x1594c,0x00000,0x1593e,0x1593b,0x23423,0x15938,0x00000,
-0x23429,0xe345b,0x1593f,0x2342d,0xe3458,0x23377,0x23427,0x15942,
-0x23378,0x2337b,0x23422,0xe3462,0xe3461,0x15943,0x15941,0x1594d,
-0xe3457,0xe3a36,0xe3464,0x00000,0x15948,0xe345e,0x1593c,0x15a76,
-0x00000,0x1593d,0x2337c,0x1594a,0x15945,0x23426,0x1593a,0x00000,
-0xe3459,0x00000,0x15939,0xe6457,0x00000,0x00000,0x00000,0x00000,
-0x00000,0xe6456,0xe6722,0xe6455,0x00000,0x23374,0x23375,0x23a4e,
-0x00000,0x00000,0xe3a3c,0x15e3d,0x15e40,0x23a59,0x15e54,0x23a5c,
-0x15e3e,0x23a55,0x15e44,0x15e4a,0x16143,0xe3a31,0xe3a38,0x15e48,
-0x23a52,0x15e55,0x15e41,0x15e49,0x23a5a,0x2417c,0x23a5f,0x23a53,
-0x00000,0x23a4a,0x23a57,0x23a51,0x15e47,0x23a5d,0xe3a2e,0xe3a2a,
-0x15e43,0x15e57,0x15e50,0xe3a33,0x15e45,0x15e42,0xe3a40,0x15e4d,
-0xe3a34,0x23a5e,0x23a50,0x23a56,0x23a58,0x23a4c,0x23a5b,0x15e3f,
-0x23a4b,0xe3a42,0x15e46,0x15e56,0x15e52,0x23a4d,0x15e4c,0xe3a3b,
-0x00000,0x15e53,0x15e4f,0x15e4b,0xe3a2f,0x23a54,0x00000,0x00000,
-0x00000,0x00000,0xe6723,0x15e51,0x00000,0x00000,0x00000,0x2417a,
-0x24176,0xe4051,0x24227,0x2416f,0x24178,0x1634c,0x1634d,0x16345,
-0x24223,0x1634f,0x24174,0x24173,0x24171,0x24225,0x16343,0x2417d,
-0x24172,0x16346,0x2417b,0x16341,0x24177,0x2417e,0x24222,0xe404e,
-0x00000,0x24226,0x1634a,0x24170,0x16344,0x24175,0xe3a2b,0x1633f,
-0x00000,0x1634b,0x24221,0x16347,0x16348,0x1634e,0x16342,0x12321,
-0x16340,0x24179,0xe404c,0x00000,0x00000,0x00000,0xe6725,0x16349,
-0xe6724,0x00000,0x24224,0x00000,0xe6458,0x00000,0x16835,0x16830,
-0xe462e,0x2493c,0x24938,0xe4628,0x24932,0x1682a,0x16826,0x2493b,
-0x16827,0x24935,0x24937,0xe4629,0x2493a,0xe4636,0x1682c,0xe462c,
-0x16833,0x1682d,0x00000,0xe462a,0x24930,0x1682e,0x1682f,0x24933,
-0x16834,0xe4634,0x24931,0x24936,0x1682b,0x2492f,0x16831,0x16829,
-0xe4633,0x00000,0x00000,0x16828,0x24934,0x24939,0xe4631,0x16832,
-0xe645a,0x00000,0xe6459,0x00000,0x00000,0x00000,0xe4650,0x2492e,
-0xe4630,0x16c37,0x24f6e,0xe4b41,0x24f6b,0xe4b38,0x16c31,0x16c3d,
-0x16c3e,0xe4b3d,0x16c34,0x24f69,0x16c36,0x24f61,0x16c3c,0xe4b44,
-0x24f6d,0x16c33,0x24f6f,0x16c32,0x00000,0x24f6a,0x24f6c,0x16c35,
-0x24f68,0x24f62,0x24f5f,0x00000,0xe4b3e,0x23a4f,0x24f65,0xe4b37,
-0x24f5e,0x24f64,0x24f63,0xe4b3b,0x24f60,0xe4b43,0x16c39,0xe4b45,
-0xe4b40,0xe4635,0xe4b3c,0x16c38,0xe4b39,0x00000,0xe4b3f,0x16c3a,
-0x24f66,0x1703b,0x24f67,0x00000,0x00000,0x00000,0x2564f,0xe503f,
-0x25648,0xe5040,0x17047,0x2564c,0x1703f,0x17043,0x2564b,0xe503b,
-0x17042,0x1703e,0x17041,0x1703c,0x17046,0x2564d,0x25649,0x17045,
-0x25647,0x17044,0x2564e,0x2564a,0x16c3b,0x00000,0x17048,0x25650,
-0x17040,0x1703d,0x00000,0xe503d,0x00000,0xe5448,0x25c52,0x25c54,
-0x17346,0x25c55,0x25c53,0x25c51,0x25c50,0x17348,0x25c4f,0x17349,
-0x00000,0xe5449,0xe5447,0x00000,0x25c4d,0x25c4e,0x17345,0x1734a,
-0x17347,0xe645d,0xe645b,0x25c4c,0xe575b,0x1763c,0xe575a,0x26148,
-0x26146,0x2614b,0x26149,0xe5758,0x26147,0x2614a,0xe5759,0xe5757,
-0xe575c,0x00000,0x00000,0x00000,0x00000,0x1782c,0x2653e,0x2653f,
-0x1782d,0x00000,0x26540,0x2653c,0x26541,0x2653d,0x1763d,0xe5a2d,
-0xe645e,0x00000,0x2686b,0x2686d,0x17964,0x2686c,0x17963,0x17962,
-0xe6726,0xe6727,0xe645c,0xe5e26,0x17965,0x26b53,0x26b54,0x00000,
-0x17a65,0x17a64,0x17a66,0x26b52,0xe6728,0x26d46,0x26d45,0xe5f40,
-0x17b59,0x17b5b,0x17b5a,0x26d47,0x17c34,0x27034,0x00000,0x00000,
-0x00000,0x17c5d,0xe6071,0x27033,0x2707c,0x00000,0x00000,0x2212a,
-0xe2177,0x00000,0x1463f,0x1463e,0x00000,0x14760,0x1475f,0x22227,
-0x1475e,0x22226,0x00000,0xe233e,0x1495b,0x22349,0xe252c,0x22348,
-0x00000,0xe2526,0x14959,0x1495c,0xe252b,0xe252a,0x22347,0xe2529,
-0x1495a,0xe2548,0xe2527,0xe2528,0x00000,0x00000,0xe2822,0x22570,
-0xe277d,0x22571,0x14c56,0xe277c,0xe2821,0xe277b,0x00000,0x1504c,
-0xe2b65,0x22e4a,0x22e4b,0x15467,0x15468,0xe3027,0x00000,0x2342f,
-0x1594e,0x15950,0x2342e,0x1594f,0x23a60,0x15e58,0xe3a44,0xe3a43,
-0x00000,0x00000,0x16350,0x16351,0x24228,0xe4052,0x16837,0xe4637,
-0x16836,0x00000,0x24f70,0x25652,0x25651,0xe5f41,0x2715a,0x14448,
-0x22139,0xe2161,0x2214f,0x22150,0xe2234,0x00000,0x00000,0xe6249,
-0x14763,0x14767,0x22229,0x00000,0x14765,0x14764,0x22228,0x14766,
-0x14762,0xe2341,0xe2342,0x14761,0x2222a,0xe233f,0xe2340,0x00000,
-0x00000,0x00000,0x00000,0x14966,0xe2531,0xe253e,0x14963,0xe2530,
-0x1495f,0x2234a,0xe2540,0xe2536,0xe252f,0x2234b,0xe253c,0x14961,
-0xe252d,0x2234d,0x1495d,0x2234e,0x2234c,0x14960,0x14962,0x14965,
-0x14964,0x1495e,0x2234f,0xe2532,0xe2541,0xe2542,0xe2533,0xe2538,
-0xe2537,0xe645f,0x00000,0x00000,0x00000,0x00000,0x00000,0xe2535,
-0x00000,0x14c5b,0x2257e,0xe2825,0x14c5d,0xe2823,0x14c5c,0xe2826,
-0x22621,0x14c5a,0x14c59,0x22575,0x00000,0x22574,0xe2828,0x22572,
-0x22577,0x22576,0x22573,0x2257c,0x2257d,0x2257a,0x22578,0x14c58,
-0xe2829,0x00000,0x00000,0x2257b,0x14c5e,0x22622,0x00000,0xe282a,
-0x22579,0xe2824,0x1504d,0x14c57,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0xe6460,0x1504e,0x22955,0xe2b69,0xe2b68,0x2295b,
-0xe2b6c,0xe2b67,0xe2b6a,0x15054,0x22959,0x2295f,0xe2b71,0x22956,
-0x2295a,0x2295c,0x2295e,0x22958,0xe2b70,0x22957,0x22952,0x22953,
-0x1504f,0xe2b6b,0x15051,0x15050,0x22954,0x2295d,0xe2b6d,0xe2b72,
-0xe2b6e,0x00000,0x00000,0x00000,0xe2b66,0x00000,0x15053,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x22951,0x22e55,0xe302a,
-0x22e54,0x22e59,0x22e50,0xe3030,0x22e53,0x22e52,0xe302f,0x22e56,
-0xe3038,0x22e5a,0x15469,0x1546c,0xe3034,0xe3035,0x22e51,0x22e57,
-0xe3033,0xe3028,0xe3037,0x1546b,0x22e4c,0xe302b,0x15052,0x2343d,
-0x22e58,0xe3036,0x22e4f,0x00000,0x1546a,0x22e4e,0x00000,0x00000,
-0x00000,0x00000,0x00000,0xe3032,0x23434,0xe346e,0xe3471,0x15951,
-0x15955,0x23444,0x23432,0x23440,0x15956,0x23442,0xe3472,0x23448,
-0xe3474,0x2344c,0xe3469,0x00000,0x23443,0x23437,0x2343f,0xe346b,
-0x2344d,0x2344b,0x23441,0x2343c,0x23435,0x23a68,0x23433,0x1595a,
-0x2343a,0x1595b,0x15957,0x23430,0x23446,0x23438,0xe346f,0xe3475,
-0x23436,0x23449,0x15958,0xe3476,0x2344f,0x15952,0x15954,0x2343e,
-0x23439,0x1546d,0x15953,0x2343b,0x2344a,0x2344e,0x23445,0xe6461,
-0x23447,0x00000,0xe6462,0xe6463,0x23431,0x00000,0x00000,0x00000,
-0xe3a4a,0x23a63,0xe3a45,0x23a6c,0x23a6b,0x15e60,0x23a64,0xe3a47,
-0x15e61,0x15e5f,0xe3a50,0x23a66,0x15e5c,0x23a6a,0xe3a4c,0x23a65,
-0x23a67,0x23a61,0x15e5a,0xe6336,0x23a74,0x23a73,0x23a70,0x15e59,
-0x15e5d,0x15e5e,0x22e4d,0x23a6d,0x15e5b,0x15959,0x23a6f,0x23a62,
-0x23a72,0x23a71,0xe3a4e,0x23a75,0xe3a49,0x24236,0xe3a4b,0x23a6e,
-0x00000,0x00000,0x00000,0x00000,0x00000,0xe6337,0x00000,0xe6464,
-0x23a69,0x2422e,0x1635b,0x1635e,0x16359,0x2422d,0x24231,0x2422c,
-0xe4057,0x16353,0x1635d,0x24229,0x16357,0x24230,0xe405b,0x16355,
-0x16354,0x24233,0x16356,0x24235,0xe4056,0x24232,0x16352,0xe405e,
-0xe405c,0xe4058,0x1635c,0x24237,0x2422b,0x24234,0xe405d,0xe6343,
-0x2422a,0xe405a,0xe4059,0x16358,0xe4054,0x1635a,0x00000,0x2422f,
-0x00000,0x24238,0xe4643,0xe463e,0x24944,0x16838,0x2494a,0xe4642,
-0xe463c,0x1683d,0x24946,0x2494d,0x2493e,0x1683f,0x16839,0x24943,
-0x16c3f,0x24942,0x2494b,0x1683a,0xe463d,0x1683e,0x24941,0x24947,
-0x2494c,0x2493d,0x1683c,0x24945,0xe463a,0xe4645,0x24949,0x2494f,
-0x2493f,0x24948,0xe4638,0x1683b,0x2494e,0xe4641,0xe4644,0xe4640,
-0x24940,0x00000,0x00000,0xe6465,0x16c43,0x24f72,0x16c41,0x16c40,
-0x24f74,0x24f79,0xe4b46,0x24f75,0xe4b50,0x24f78,0x16c46,0xe4b51,
-0x1702e,0x16c45,0xe4b4b,0x24f71,0x24f77,0xe463f,0x16c44,0x24f76,
-0xe4b4d,0x24f73,0xe4b49,0x16c42,0xe4b4f,0xe4b4c,0x00000,0xe4b47,
-0x00000,0x00000,0x25657,0xe504a,0x25659,0x25654,0x1704a,0x25656,
-0xe504b,0x17049,0x25658,0xe5048,0xe504c,0x1704c,0x2565a,0x1704b,
-0x25653,0x25655,0xe5049,0x00000,0x00000,0xe544b,0x1734e,0x25c58,
-0xe544c,0x1734d,0x25c59,0x1734c,0x25c57,0x1734b,0x25c56,0x00000,
-0x1763f,0x1763e,0x26542,0x26544,0xe5a2f,0x26543,0x1782e,0x1782f,
-0xe5a2e,0x00000,0x17830,0x2686e,0x17966,0x00000,0xe5e28,0x26f22,
-0x26f21,0x17c5e,0x00000,0x14449,0x14531,0x00000,0xe2343,0x14967,
-0xe2545,0xe2543,0xe2544,0xe282d,0x22960,0xe2b77,0x00000,0xe3477,
-0x00000,0x15e62,0x15e63,0xe3a52,0x24239,0x16840,0x24950,0x24f7a,
-0xe6466,0xe504d,0xe2139,0x2213a,0xe2235,0xe2344,0x22350,0x00000,
-0xe2b7a,0xe2b79,0xe213a,0xe2546,0x22623,0x22961,0x22e5b,0x1546e,
-0xe4646,0xe6560,0x26545,0x00000,0x17a67,0x1444a,0x14640,0x22151,
-0xe2236,0x14768,0x14769,0x00000,0x14c5f,0x00000,0x00000,0xe3479,
-0x1595c,0x00000,0x16842,0xe405f,0x16843,0x16841,0xe4b53,0x1444b,
-0x00000,0x14532,0x14534,0x14533,0x2213b,0x14535,0x14641,0x22152,
-0xe2238,0x14642,0xe2237,0x00000,0xe2239,0x00000,0xe2347,0x1476a,
-0x1476b,0x00000,0x00000,0x00000,0x2222b,0xe2549,0x14968,0x00000,
-0x22351,0x00000,0x00000,0x00000,0x14c63,0x22624,0x00000,0x14c61,
-0x14c62,0x14c60,0x22e5c,0xe282e,0xe282f,0xe6467,0x15058,0x15057,
-0x15059,0x15056,0xe2b7c,0x22962,0x14c64,0x15055,0x00000,0x1546f,
-0x15470,0x00000,0x15471,0xe347b,0x23450,0xe347c,0xe347d,0x00000,
-0x15e64,0x23a76,0x1595d,0xe3a53,0xe3a54,0x00000,0xe4060,0x1635f,
-0xe4061,0x16845,0x16844,0x24951,0xe4648,0x16c47,0x1704d,0x00000,
-0x2614c,0x26d48,0x26f23,0x1444c,0x14643,0xe223b,0x14644,0x22231,
-0x1476d,0x14770,0xe234b,0x2222f,0x2222d,0x1476f,0x22230,0x22232,
-0x2222c,0x14772,0x14771,0x1476e,0x1476c,0x2222e,0xe234d,0x00000,
-0x00000,0xe2555,0x14973,0x00000,0xe254c,0x14970,0x22356,0x22359,
-0x22358,0x00000,0x1496a,0x14972,0xe254b,0x00000,0x1496f,0x22355,
-0x22353,0x1496e,0xe2556,0xe2553,0xe254e,0x14969,0x1496c,0xe2551,
-0x22354,0x2235b,0x22357,0x1496d,0x14971,0x14974,0x22352,0x2235a,
-0x1496b,0x00000,0x00000,0x00000,0xe2841,0xe2833,0x14c69,0x14c71,
-0xe2838,0x22630,0x22629,0x14c72,0x22634,0x22625,0x2262c,0xe2845,
-0xe2840,0x14c68,0x22626,0x14c66,0x2262d,0x22631,0x14c65,0xe283d,
-0x22632,0x2262b,0xe2837,0x2262e,0xe2835,0x14c74,0x14c6b,0x22635,
-0x22633,0xe283f,0x14c70,0x14c6e,0x2262a,0x14c6d,0x22628,0x22627,
-0x14c6c,0x14c6a,0x14c73,0x14c6f,0x14c67,0xe2c26,0x2262f,0xe2846,
-0x1505b,0xe2c2d,0x15062,0x22970,0x1505a,0x22968,0x22964,0xe2c21,
-0x22974,0x22963,0xe2c2c,0x1505d,0x2296d,0x15060,0x15063,0xe2c2e,
-0x1505e,0x22971,0x15061,0xe2c23,0x15478,0x22977,0x22965,0xe2c24,
-0xe2c25,0x22967,0x2296e,0x22972,0x22976,0x22973,0x2296c,0x2296f,
-0xe2c2b,0xe2c29,0x22969,0x15065,0x2296b,0x2296a,0x22975,0x1505c,
-0x22966,0x15064,0xe2c2a,0x1505f,0xe2c28,0x00000,0x00000,0x00000,
-0x00000,0x1547e,0x22e64,0xe3040,0x1547d,0xe2c27,0x00000,0x22e62,
-0xe6270,0x15472,0xe304f,0x15477,0xe304a,0x22e61,0x22e5e,0x22e63,
-0x15473,0x22e5d,0xe304e,0x15476,0x15474,0xe303e,0x22e65,0x15475,
-0x15479,0xe303b,0xe3045,0x1547a,0xe3048,0x1547c,0xe3052,0x00000,
-0x00000,0x1547b,0xe303c,0xe3522,0xe3538,0x22e5f,0x22e60,0xe304d,
-0x00000,0xe304b,0x00000,0x22e66,0x00000,0x23457,0x1595e,0x23b26,
-0x23456,0x23469,0xe3528,0xe3524,0x15964,0xe3531,0x23467,0xe3533,
-0x15963,0x1595f,0x23470,0x23460,0x23463,0xe352e,0x15967,0x2346d,
-0x23465,0x15960,0x15968,0xe352a,0x2346a,0x23468,0xe352f,0xe353b,
-0x23459,0x2346e,0x23462,0x2345d,0xe353a,0x23453,0x2346f,0x2345f,
-0x23452,0xe3539,0x15966,0x23464,0x23471,0x23461,0x23455,0x2345a,
-0x23451,0xe3527,0x15965,0xe353c,0x2345e,0x2345b,0x15961,0x23454,
-0xe3530,0x2346c,0x15962,0xe352b,0x2345c,0x23458,0xe3529,0xe3534,
-0x2346b,0xe3532,0x00000,0xe3537,0x00000,0xe3535,0x00000,0x15e65,
-0x23a7d,0xe3a75,0x23a7a,0x23b2d,0x23b21,0x23b2e,0xe3a7c,0x15e67,
-0xe3a63,0xe3a61,0xe3a58,0x23b2a,0x23b27,0xe3a5b,0xe3a77,0xe3a72,
-0xe3a59,0xe3a60,0x23b28,0x23b2b,0x23b2f,0xe3a7b,0x23466,0x23b31,
-0x2424d,0xe3a66,0x15e68,0x23b32,0x23a78,0x23b24,0xe3a62,0x23b29,
-0xe3a5c,0xe3a5e,0x15e66,0x15e69,0x23b30,0x23b33,0x23a7c,0x23a79,
-0xe3a73,0xe3a5a,0x23a7b,0xe3a57,0xe3a7a,0x23b22,0x23a7e,0x15e6a,
-0xe3a56,0x23b2c,0xe3a79,0xe3a78,0x23b23,0x00000,0x23b25,0x23a77,
-0x24241,0x2423f,0x16368,0x16366,0x24249,0x24240,0x2424a,0x24246,
-0x2423e,0x2424c,0x2423d,0x24244,0x16365,0x16364,0x16363,0x24242,
-0x24247,0x16360,0x16367,0xe4067,0x2423b,0xe4066,0x24245,0x2423a,
-0x24243,0x16361,0x24248,0x2423c,0x16362,0x2424b,0xe4064,0xe3a6b,
-0xe406a,0xe6468,0x00000,0xe6469,0x00000,0x24955,0x1684a,0x16849,
-0x1684b,0x24961,0x24957,0x2495d,0x24952,0x24960,0x2495f,0x24963,
-0x2495c,0x16846,0x2495b,0x1684c,0xe464c,0x24954,0x16847,0xe464a,
-0x24962,0x16848,0x24956,0x24959,0x2495e,0x24958,0x24953,0xe464f,
-0xe4653,0x00000,0x00000,0x2495a,0x24f7c,0x16c4b,0x25021,0x24f7e,
-0x25023,0x25025,0xe4b5c,0x16c49,0xe4b58,0x24f7d,0xe4b54,0x24f7b,
-0xe4b5e,0x25026,0x25024,0x25022,0xe4b56,0x25028,0xe4b5a,0x25027,
-0x16c4d,0x16c48,0xe4b5b,0x16c4a,0x16c4c,0xe4b5d,0xe4b5f,0x25029,
-0x25661,0xe5050,0xe5053,0x25660,0x2565f,0xe5051,0x25662,0x2565b,
-0xe504f,0x2565c,0x25664,0x2565d,0xe5054,0x1704e,0x25666,0xe504e,
-0x25665,0x2565e,0xe5056,0x25c5d,0x17351,0x25c5b,0x25c60,0x25c5f,
-0x25663,0xe5450,0x17350,0xe544e,0x25c5e,0x25c5a,0x25c62,0x25c61,
-0x1734f,0xe5452,0x25c5c,0xe544f,0x1704f,0xe5451,0x00000,0xe5453,
-0x17640,0xe5a31,0xe5761,0xe575e,0x2614d,0x26546,0x26547,0x26548,
-0x17967,0x00000,0xe5c36,0x17968,0xe5c39,0x2686f,0xe5c3a,0x26b56,
-0x26b55,0xe5e29,0xe5f42,0x26d49,0x26d4a,0x26f24,0x27035,0xe6073,
-0x1444d,0x1444e,0x00000,0x1444f,0x14536,0x14645,0x22233,0x14773,
-0x14774,0x00000,0x14977,0x14978,0x14976,0x14975,0x00000,0x14c75,
-0xe2848,0x00000,0x22636,0x14c77,0x14c76,0x22637,0xe625c,0xe646a,
-0x00000,0x15066,0xe2c2f,0x15521,0x22e67,0x00000,0x23473,0x00000,
-0x15969,0x15e6c,0x23472,0x15e6b,0xe4071,0x1684d,0xe4072,0x24964,
-0x17050,0xe5057,0x17352,0x25c63,0xe5a34,0x17969,0xe5c3b,0x17b5c,
-0xe213b,0x22153,0xe223d,0x14646,0x22154,0x14777,0xe2350,0x14775,
-0x14776,0x14778,0x00000,0x1497a,0x14979,0xe255a,0x2235c,0x1497b,
-0x00000,0x00000,0x2235d,0x22638,0xe284c,0x22639,0xe284a,0x14c78,
-0x14c7a,0x14c7c,0x14c79,0x14c7d,0x14c7b,0xe284e,0xe284b,0xe284d,
-0x00000,0x00000,0x1506a,0x15067,0x15069,0x1506b,0x15068,0x22e68,
-0x22978,0x00000,0x00000,0xe2c32,0x22e6a,0x22e69,0x15527,0x00000,
-0x15523,0x00000,0x00000,0x15524,0x15526,0x15528,0x15525,0xe3057,
-0x1552a,0x15529,0x00000,0xe3056,0xe3055,0x00000,0x00000,0x1596e,
-0x23475,0x23474,0x1596d,0xe3541,0x1596c,0x1596b,0x1596f,0x1596a,
-0xe353f,0x00000,0x23b39,0x23b36,0x15e6e,0x23b35,0x23b3a,0x00000,
-0x15e70,0x23b38,0x15e6d,0x15e6f,0x23b37,0xe3a7e,0x2424e,0xe4074,
-0x2424f,0x24250,0xe4075,0xe4076,0xe4073,0xe6345,0x1684e,0x16856,
-0x24965,0x16850,0x16854,0x24966,0x16855,0x16851,0x16852,0x1684f,
-0x16853,0x16c50,0x23b34,0x16c51,0x16c4f,0x00000,0x16c4e,0x25667,
-0x17051,0x25c64,0x25c65,0xe5a35,0x00000,0x17831,0x1796a,0xe5e2a,
-0x14450,0xe223e,0x14779,0x00000,0x00000,0xe255e,0xe255c,0xe255d,
-0xe2850,0x1506c,0x00000,0x22e6b,0x1552b,0xe3058,0xe3059,0x15972,
-0x15971,0x15970,0x15e71,0x15e72,0x23b3b,0x16857,0x17052,0x14451,
-0x2213c,0x14537,0x22155,0xe624a,0xe223f,0x22234,0x1477a,0x00000,
-0xe2352,0xe2851,0x14c7e,0xe2c34,0x00000,0x00000,0xe3b24,0x24251,
-0xe4078,0xe6525,0x14452,0x00000,0x14538,0x22235,0x00000,0x00000,
-0x2235e,0x00000,0x2235f,0xe255f,0x1497c,0x00000,0x00000,0xe2c35,
-0x23b3c,0x15e73,0x00000,0x24252,0x00000,0x00000,0xe5454,0x17353,
-0x14453,0x14467,0x14539,0x22156,0x14647,0xe2354,0x14a22,0x14a21,
-0x1497d,0x1497e,0x00000,0x00000,0x2263a,0x14d22,0x14d23,0x2263b,
-0x14d21,0xe2854,0xe2855,0x15070,0x22979,0x1506f,0x1506d,0x1506e,
-0x1552e,0x1552c,0xe305a,0xe305b,0x22e6d,0x1552d,0x22e6c,0xe646b,
-0x15522,0x23476,0x00000,0xe3543,0x15974,0x15975,0xe3b26,0xe3b25,
-0x15973,0xe3544,0x16858,0x24967,0x16c52,0x16c53,0x00000,0x2502a,
-0x17354,0x2614e,0x2614f,0xe5a38,0x17a68,0x27036,0x2212b,0x1453a,
-0x00000,0x14454,0x00000,0x22158,0x22157,0x00000,0x00000,0xe646c,
-0xe2355,0x1477b,0x22237,0x22238,0x22236,0x00000,0x22239,0x00000,
-0xe235a,0x00000,0x00000,0x00000,0xe2561,0xe2566,0x22367,0x00000,
-0x22362,0x22364,0x22366,0x22363,0x14a26,0x22360,0xe2562,0x22361,
-0x14a23,0x14a24,0x22365,0x22368,0x14a25,0x22369,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0xe2563,0x22649,0xe285d,0x22643,
-0x2263e,0x14d25,0x22646,0x22644,0x2263d,0x2264a,0x2264d,0x22648,
-0x22641,0x14d27,0x22647,0x14d28,0x22642,0x22645,0x2263c,0x22640,
-0x2264c,0x14d29,0x00000,0x14d2a,0xe285e,0x2263f,0x2264b,0x14d24,
-0x14d26,0xe285c,0xe285f,0xe2857,0x00000,0x00000,0x00000,0x00000,
-0x00000,0xe2858,0x00000,0x00000,0x00000,0x00000,0x22a2c,0x22a25,
-0x22a2b,0x22a24,0x22a26,0x2297e,0x2297c,0xe2c3f,0x22a2d,0x22a2a,
-0x2297a,0xe2c3b,0x15072,0x22a28,0x22a29,0xe646d,0x22a27,0x2297d,
-0x2297b,0x15071,0x22a23,0x22a21,0xe2c3c,0xe2c42,0x22a22,0x22a2e,
-0x00000,0xe2c3e,0xe2c41,0x00000,0x00000,0xe2c43,0xe2c3d,0x00000,
-0x15533,0xe3063,0x15532,0xe305f,0x22e6e,0x1552f,0x22e70,0xe3064,
-0x15534,0x22e71,0x00000,0xe3061,0x15537,0xe3062,0x15535,0x22e72,
-0x22a2f,0x22e74,0xe305e,0x15531,0xe6271,0x15530,0xe6272,0x22e6f,
-0x22e73,0x15536,0x00000,0x00000,0x00000,0x00000,0x15977,0x15976,
-0xe354b,0xe3548,0xe3547,0x23478,0x2347c,0x2347e,0x15978,0x23523,
-0xe3551,0x1597c,0x23525,0xe3552,0x1597e,0xe354f,0x1597a,0x15a24,
-0xe3555,0x15a21,0x2347a,0x15979,0xe3b2b,0x23479,0x23477,0x23527,
-0x2347b,0xe3546,0x1597b,0x23526,0x15a22,0x23522,0x23521,0x15a23,
-0x2347d,0x1597d,0xe354e,0x00000,0xe354a,0x00000,0x23528,0xe3554,
-0x23524,0x23b4b,0x23b52,0x23b47,0x15e76,0x23b43,0x23b53,0x23b3d,
-0x23b50,0x23b4e,0x23b48,0xe3b36,0x23b51,0x23b4a,0xe3b28,0x23b42,
-0x23b54,0x23b40,0x23b4d,0x23b3e,0xe3b27,0x23b55,0xe3b37,0x15e77,
-0xe3b2a,0x23b4f,0x24255,0x23b41,0x15e74,0xe3b2e,0x23b45,0xe3b34,
-0x15e75,0x23b44,0x23b49,0xe3b33,0x00000,0x23b46,0x00000,0xe3b31,
-0x00000,0x23b4c,0x00000,0xe3b2d,0x00000,0x00000,0x24259,0x00000,
-0xe4121,0x00000,0x2425c,0x24254,0xe407c,0x24256,0xe407a,0x2425b,
-0x2425a,0x16369,0x00000,0x23b3f,0x24258,0xe4079,0xe407d,0x1636a,
-0x00000,0x24253,0x24257,0x00000,0x00000,0xe646e,0x00000,0x2496e,
-0xe465c,0x24975,0x2496c,0xe4654,0x24973,0x2496a,0x24972,0x24976,
-0x24969,0x2496d,0x24968,0xe4656,0x16859,0x00000,0x2496b,0x1685a,
-0x24971,0x24970,0x2496f,0xe4659,0xe465a,0x24974,0xe646f,0xe4b65,
-0xe4b66,0xe4b63,0x2502e,0x25030,0x16c55,0x25031,0xe4b6b,0x2502c,
-0xe4b67,0x2502b,0x25035,0xe4b69,0x25033,0x16c54,0x25036,0x2502d,
-0x25032,0x25034,0x2502f,0xe4b6a,0xe4b68,0xe6470,0xe5058,0x2566b,
-0x25670,0x2566a,0x2566f,0xe505b,0x25668,0x25672,0x2566e,0x25673,
-0x2566d,0x25669,0x25671,0xe505a,0x25674,0x2566c,0xe6471,0x25c66,
-0x17358,0xe5457,0x17356,0xe5459,0x17355,0x17357,0xe5455,0xe6472,
-0x26150,0xe5762,0x2643e,0x26549,0xe5a39,0x00000,0x26870,0x26871,
-0xe5c3d,0x1796b,0xe5c3c,0x26b57,0xe5c3e,0x17a69,0x00000,0x26b58,
-0xe5e2d,0x26d4c,0x17b5e,0xe5f43,0x17b5d,0x26d4b,0x17c35,0xe6030,
-0x26f25,0x00000,0x00000,0xe213c,0x00000,0x14455,0x1477c,0x2223a,
-0x2236a,0x14b56,0x15a25,0xe3557,0xe4b6c,0x14456,0x1464a,0x14649,
-0x14648,0x00000,0x00000,0x14a27,0x00000,0x00000,0x15538,0x00000,
-0x2425d,0x14457,0x14458,0x14459,0x1453b,0xe2567,0xe2860,0x15073,
-0x00000,0x22a30,0xe2c45,0xe2c44,0x00000,0x15e78,0x1445a,0x2213d,
-0xe2163,0x00000,0x1464b,0x1464c,0x22159,0x00000,0x1477d,0x00000,
-0xe235c,0xe2568,0x2236b,0xe256b,0x14a28,0x00000,0x2236c,0x00000,
-0x00000,0x14d30,0xe2862,0xe2861,0x2264f,0x14d2e,0x14d2d,0x2264e,
-0x14d2b,0x22650,0x14d2c,0x14d2f,0x00000,0x15074,0xe2c46,0x15076,
-0x22a34,0x22a31,0x22a32,0x22a33,0x22a35,0x15075,0x00000,0x00000,
-0x22e76,0x22e75,0xe3066,0x1553a,0xe3069,0x15539,0xe3068,0xe306a,
-0xe3067,0x00000,0xe355b,0x15a28,0x2352a,0xe3559,0x15a27,0x15a29,
-0x15a26,0xe3558,0xe355a,0x00000,0x00000,0x15e7a,0x23529,0x00000,
-0x15e7b,0x23b57,0xe3979,0x15e7c,0x23b56,0x15e79,0xe3b3a,0xe3b3b,
-0xe3b3d,0x00000,0x24260,0x24262,0x1636b,0x24261,0x2425f,0x2425e,
-0x00000,0x00000,0xe465d,0x24979,0x1685f,0x1685d,0x00000,0x1685e,
-0x24977,0x24978,0xe4b6d,0x1685b,0x2503a,0x25038,0xe4b70,0x16c57,
-0x25039,0x16c58,0x16c56,0x1685c,0x00000,0xe6473,0x25677,0x25675,
-0x25676,0x25037,0x25c68,0x17359,0x25c67,0x26151,0x26152,0x25678,
-0x2654a,0xe6677,0x1445b,0x1464d,0x14821,0x2223b,0x1477e,0xe2863,
-0x14d31,0x1636c,0xe213d,0x1453c,0x1464e,0x15077,0x15e7d,0xe213e,
-0x2215a,0xe2247,0x2215b,0xe2248,0x2223c,0xe6678,0x00000,0x14a2a,
-0x22370,0x2236e,0x14a2b,0x2236d,0x2236f,0x22371,0x00000,0x14a29,
-0xe256e,0x00000,0xe256d,0x00000,0x00000,0x14d35,0x14d36,0x14d33,
-0xe2865,0xe2867,0x14d32,0x22a39,0x14d34,0xe2868,0x00000,0x00000,
-0x15078,0xe2c48,0x22a38,0x22a3a,0x22a37,0x22a3b,0x15079,0x1553d,
-0x22e77,0xe306c,0x22e79,0x1553b,0x22e7a,0x1553c,0x22e78,0xe306b,
-0x22a36,0x2352b,0x2352e,0x2352f,0x2352c,0x15a2d,0x15a2c,0x15a2a,
-0x15a2b,0x2352d,0xe3561,0xe3560,0x00000,0xe3b3f,0x15a2e,0xe3b40,
-0xe3b3e,0x15f21,0x15f22,0x00000,0x15f23,0x24263,0x24265,0x24267,
-0x1636e,0x1636d,0x15e7e,0x24266,0x24264,0xe6474,0x2497d,0xe4661,
-0xe4660,0x2497b,0x24a23,0x16860,0x24a24,0x24a21,0x16861,0x2497c,
-0x2497a,0x24a22,0x16c5a,0x2503c,0x2497e,0x16c5c,0x2503d,0x16c5b,
-0x16c5e,0x2503e,0x16c59,0x16c5d,0x00000,0x2567d,0x2567b,0x2567a,
-0x2567c,0x25679,0xe505c,0x00000,0x17833,0xe6475,0x26872,0x26873,
-0xe5c3f,0x26b59,0x26d4d,0x17d22,0xe213f,0xe2361,0x14d37,0x14a2c,
-0xe2869,0xe286b,0x1507a,0xe2c4c,0xe2c4b,0xe306e,0x1445c,0x1453d,
-/* 0x5f00 */
-0x00000,0x1464f,0x2223d,0xe256f,0x14a2d,0x22372,0xe286d,0x22a3c,
-0x1507b,0x00000,0x16862,0x1445d,0xe2164,0xe2249,0xe2362,0x14822,
-0x00000,0xe3b42,0x1636f,0x1445e,0x1453e,0x1453f,0x00000,0x14651,
-0x14650,0x00000,0x2223e,0x14823,0x00000,0x22373,0xe2571,0x14a2e,
-0x00000,0xe286e,0x22652,0x22653,0x22654,0xe2870,0x14d38,0x14d39,
-0x22651,0x14d3a,0x00000,0x00000,0x00000,0x1507c,0x22a3d,0xe2c4d,
-0x22e7c,0x1553e,0xe306f,0x22e7b,0xe3562,0x15a2f,0x23530,0x15a30,
-0x23531,0xe3563,0xe3b47,0xe3b45,0x15f24,0x00000,0xe3b44,0x00000,
-0x24268,0x00000,0xe4122,0x24a26,0x24a25,0x00000,0x16863,0x00000,
-0x16c5f,0x2503f,0x17053,0x2567e,0x1735a,0xe5763,0x17b5f,0x26f27,
-0xe2140,0xe2141,0xe224a,0xe2351,0x22655,0xe2871,0x22a3e,0x15a31,
-0x23b58,0x16370,0xe4123,0xe505e,0x00000,0xe5764,0x17641,0x00000,
-0xe6164,0xe2142,0x14a30,0xe2572,0x14a2f,0x1507d,0xe2c50,0x22e7d,
-0x00000,0x15a33,0x15d29,0x15a34,0x15a32,0x15f25,0xe4124,0x24a27,
-0x16864,0x16c60,0xe5f45,0x2212c,0x2223f,0x00000,0x22375,0x14a31,
-0x22374,0x14a32,0x00000,0x00000,0x14d3e,0x22658,0x22657,0x14d3d,
-0x14d3b,0x14d3c,0x22656,0xe2876,0xe2875,0x15121,0x22a3f,0x15124,
-0x1507e,0x15126,0x15122,0x15123,0x15125,0xe6264,0xe3070,0xe3072,
-0x15541,0x15540,0x1553f,0xe3071,0xe6476,0x00000,0x23533,0x15a35,
-0x15a38,0x15a36,0xe6477,0x23532,0x15a3b,0x00000,0x15a37,0x23534,
-0x15a3a,0x15a39,0x00000,0x00000,0x00000,0x23b5a,0x23b59,0xe3b4b,
-0x15f28,0x15f26,0x15f27,0x23b5b,0x16371,0x2426a,0x16372,0x24269,
-0x00000,0x00000,0x25040,0xe4663,0xe4664,0x16c62,0x24a28,0x16c61,
-0xe4b72,0x16865,0xe6478,0x25722,0x25721,0x1735b,0x25c69,0x2654b,
-0x26874,0x26875,0xe5e2f,0x14540,0x00000,0x14652,0x00000,0xe224d,
-0xe6251,0x2215c,0xe224c,0x00000,0x14a34,0x14a36,0xe2578,0x22242,
-0x22378,0x22377,0x22376,0xe2366,0x22241,0x22240,0x14825,0x14a35,
-0x14a33,0x14824,0xe2367,0xe2369,0xe2577,0x14d3f,0x22659,0xe257b,
-0x14d40,0x2237d,0x00000,0x22421,0x2237e,0x2265a,0xe2576,0xe2574,
-0x2237a,0xe287e,0x14a3a,0x14a38,0xe257c,0x22379,0x2237b,0x22423,
-0xe2622,0x14a37,0xe2621,0x2237c,0x22427,0x14d42,0xe257d,0x22424,
-0x14a39,0xe2623,0x22422,0x22425,0xe257a,0x14d41,0xe2575,0x14d43,
-0x22426,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0xe2878,
-0xe2922,0x2266e,0x22661,0x2265f,0x2266d,0x22668,0x1512b,0x14d44,
-0x22669,0x2266c,0x15127,0x2266b,0x14d45,0x14d4a,0x14d48,0x22662,
-0xe6266,0x2265d,0x22664,0x14d4f,0x2266f,0x15128,0x22665,0x00000,
-0x15129,0x14d4b,0x22667,0xe2c5a,0x22a4e,0x1512a,0x2265c,0x14d4c,
-0x1512c,0x14d4d,0x14d49,0x14d4e,0x22666,0x2265b,0x2266a,0x14d46,
-0xe2877,0xe2c5b,0x2265e,0x22663,0x22660,0x14d47,0xe287a,0x22a40,
-0x00000,0x22a41,0x00000,0x00000,0x00000,0xe2921,0x00000,0x00000,
-0x22a4b,0x22f23,0x22a4c,0x15132,0x22a4f,0x22a45,0x15131,0x22a47,
-0xe6267,0x22a48,0xe2c60,0xe3079,0x22a4a,0x1512d,0xe2c56,0xe3073,
-0x15545,0xe2c57,0xe2c5d,0x22a46,0x22a42,0x15546,0xe307e,0x00000,
-0x22a50,0x15542,0x22f21,0x22a49,0xe2c54,0x22e7e,0x22a44,0x22a4d,
-0xe2c5f,0xe2c61,0x15130,0x15543,0x15136,0x15544,0x22a51,0x22f22,
-0x1512f,0x15548,0x15135,0x15134,0x15133,0x15547,0x22a52,0x15549,
-0x1512e,0x00000,0x22a43,0xe307a,0xe3078,0xe307b,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0xe2c5c,0x00000,0xe3076,0x15a3c,
-0x22f26,0x22f28,0x00000,0x22f2a,0x1554a,0x15550,0x23537,0x22f2e,
-0x22f25,0x15a3e,0x23535,0xe3122,0x1554f,0x1554d,0x22f30,0x00000,
-0x23536,0x00000,0x22f27,0xe3125,0x1554e,0x22f2b,0x15551,0x22f2d,
-0xe3568,0xe3074,0x1554c,0x22f2c,0x22f2f,0x22f29,0xe3127,0x1554b,
-0x15a3f,0xe3571,0x22f24,0x15a3d,0xe3572,0x00000,0xe3123,0xe3128,
-0x15a40,0xe3121,0xe356f,0x00000,0x00000,0x00000,0xe3126,0x00000,
-0x23539,0x23542,0x15f2b,0xe3b54,0x15a42,0x15a47,0x15f2c,0x23544,
-0x15a4e,0x23b5d,0x2353a,0x15a46,0x15a49,0x15a44,0x23538,0x23546,
-0x23549,0x23b6c,0x00000,0x23547,0x23b61,0x15a45,0x15a4c,0x15a50,
-0x23541,0x23b5c,0x23545,0x15a41,0x23b5e,0x23548,0x23b60,0x2353d,
-0xe356a,0x15f29,0xe3b56,0x2353b,0x2353c,0x15a4b,0xe3b55,0xe356e,
-0x15a4a,0x2353f,0x15a4f,0x23543,0x15a48,0x23540,0xe3579,0x15a4d,
-0x15f2d,0x15f2a,0x23b5f,0xe3b58,0x2353e,0xe3b59,0x15a43,0xe3576,
-0x00000,0xe3b5a,0xe3b4d,0x00000,0x00000,0x00000,0xe3574,0x00000,
-0x15f32,0x15f36,0x23b63,0x16377,0x15f34,0x23b67,0x15f38,0x2426b,
-0x23b69,0x16379,0x15f30,0x15f33,0x23b6a,0xe3b5e,0x23b6b,0x23b71,
-0x15f3a,0x1637a,0x00000,0x23b6d,0x23b72,0x23b66,0x16426,0xe3b4f,
-0x1637b,0x15f39,0x23b64,0x23b73,0xe3b51,0x16425,0x15f37,0x16374,
-0x23b70,0xe3b5d,0x15f3b,0x23b68,0x23b62,0x15f31,0x23b65,0x00000,
-0x23b6e,0xe412b,0x16373,0x16378,0x15f2e,0x23b6f,0xe3b61,0x16376,
-0xe3b62,0xe3b63,0xe3b50,0x15f2f,0x00000,0xe6479,0x00000,0x16424,
-0x24a2a,0x24276,0xe4129,0x2426e,0x24a29,0x00000,0x24272,0x24274,
-0xe4127,0xe412c,0x24271,0xe466f,0x16423,0x00000,0x24270,0x16427,
-0xe466e,0x00000,0xe4128,0x24a39,0xe466c,0xe412e,0x16422,0x16867,
-0x24277,0x24a2b,0xe466d,0xe412a,0x1637e,0x2426f,0x24273,0x16866,
-0x16375,0x2426c,0x2426d,0x16868,0x1637d,0x16421,0x1637c,0x24275,
-0xe647a,0x00000,0x24a2f,0x24a30,0x24a35,0x16c67,0x24a3c,0xe4b73,
-0x1686e,0xe4b7e,0x1686d,0x24a37,0xe4b74,0x16c66,0x24a2c,0x1686c,
-0xe4671,0x24a3b,0x1686a,0x1686b,0xe4b7c,0x24a38,0x25051,0x16c64,
-0x15f35,0xe4672,0x24a3a,0x16c6b,0x24a32,0x00000,0x16c65,0xe466a,
-0x16c6a,0x24a2d,0x24a31,0x24a2e,0x24a34,0x1686f,0x16c63,0x16869,
-0xe4c21,0x25043,0x24a36,0xe4668,0x16c69,0xe4673,0x16c6c,0x00000,
-0x24a33,0xe466b,0x16c68,0x25042,0x00000,0xe4c23,0xe4674,0xe4c24,
-0xe4b77,0x25047,0x17057,0x25041,0x2572e,0x25050,0x16c70,0xe4b7a,
-0x16c6e,0x17055,0x2504d,0x25049,0x16c74,0xe4b76,0x25725,0xe5068,
-0xe4c28,0xe5067,0x16c72,0x25048,0xe4c29,0x25723,0xe4c25,0x2504c,
-0x00000,0x2504f,0x25046,0xe4b79,0x16c73,0x00000,0xe4b75,0x16c6d,
-0x25724,0x17056,0x2504e,0x16c6f,0x16c71,0x2504b,0x16c75,0x2504a,
-0x25045,0x25044,0x17054,0x25052,0x25727,0x25c6b,0x17059,0xe5061,
-0x2572d,0xe5063,0x2572b,0xe506a,0x25c6c,0xe5064,0x1705a,0x2572c,
-0xe5066,0x25729,0x1735d,0x25c6a,0xe506c,0x25726,0x25728,0x1735e,
-0x1705c,0x1735c,0x1705b,0x17360,0x2572a,0x17058,0xe5062,0xe5065,
-0xe506b,0x00000,0x00000,0xe6679,0x00000,0x00000,0x2615b,0x00000,
-0x26153,0xe5461,0xe545f,0xe545c,0xe545e,0xe545d,0x25c72,0x26154,
-0x25c6e,0x00000,0xe545b,0x17642,0x25c70,0x25c6f,0x1735f,0x25c6d,
-0x25c71,0x2615c,0x26158,0x2615a,0x00000,0x26155,0x26156,0x00000,
-0x26159,0x26157,0x17834,0xe5765,0x00000,0x17837,0x17836,0x17835,
-0x1796c,0x26876,0x1796d,0x2654c,0x17a6a,0x26b5a,0x17a6b,0x17b60,
-0x17c36,0x26f28,0xe5f46,0x26f29,0x26f2a,0xe613e,0x00000,0x2722a,
-0x14541,0x2215d,0x14653,0x00000,0x14827,0x14828,0x14826,0xe236b,
-0x14829,0x14a3c,0x14a3b,0xe2625,0x22670,0x14d51,0x14d50,0x00000,
-0xe2c63,0x22f31,0x15a51,0x15a52,0x00000,0x00000,0xe3b64,0x15f3c,
-0x24278,0x16428,0x16429,0x2427a,0x2427c,0x2427b,0x00000,0x24a3e,
-0xe4676,0x24a3d,0x16870,0x24a3f,0xe4675,0x25053,0x16c76,0xe4c2c,
-0x1705d,0xe506d,0x17361,0x17643,0x17362,0xe5f48,0x14542,0xe2165,
-0xe2166,0xe224e,0x22428,0xe2628,0xe2629,0x22671,0x14d53,0x14d52,
-0x14d54,0x15137,0x22a53,0x22a54,0x00000,0xe3129,0x22f32,0x15552,
-0x15a53,0x15f3d,0x23b74,0x14543,0x00000,0x1445f,0x14544,0xe2250,
-0x2215e,0x14657,0x14656,0x14654,0x14655,0x00000,0x00000,0xe236f,
-0x1482c,0x22249,0x2224b,0x1482b,0x22243,0xe236c,0x22244,0xe236d,
-0x2224a,0x22246,0x22248,0x1482a,0x22245,0x2224c,0x22247,0xe236e,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x14a43,0x14a4c,0x14a4a,
-0x22432,0x2242f,0x22437,0x14a48,0x22438,0xe2639,0x14a41,0x22435,
-0xe262e,0x14a47,0x22431,0x22430,0x14a45,0x22436,0x14a46,0x14d55,
-0x14a40,0x22433,0xe262a,0x22429,0x14a3d,0xe2637,0x14a50,0x2242e,
-0x22434,0x14a42,0x14a44,0xe262f,0x2242a,0xe2636,0x2242b,0x2242c,
-0x00000,0x14a4f,0x14a49,0x14a4e,0x2242d,0x14a4d,0x14a3f,0x14a3e,
-0x14a4b,0xe2635,0x00000,0xe2633,0xe2634,0xe2638,0xe2631,0x00000,
-0x00000,0x00000,0x00000,0xe647b,0x00000,0xe2632,0xe2931,0xe292a,
-0x14d63,0x2267d,0x22676,0x14d5e,0x14d71,0x22672,0x22679,0x2267b,
-0x2267e,0x14d6c,0xe2926,0x2267a,0x22673,0x14d6a,0x22677,0xe2928,
-0x22721,0x14d5b,0xe2925,0x2267c,0x14d65,0x14d64,0x22675,0x14d59,
-0xe2934,0xe2932,0x14d5a,0x00000,0x14d58,0xe2933,0x14d70,0x14d68,
-0x14d62,0x14d56,0x22678,0x14d61,0x14d57,0x14d69,0x14d72,0x22a55,
-0x14d66,0x22674,0x14d5c,0x14d5f,0x14d60,0xe292e,0x14d6e,0x14d6f,
-0x14d6d,0x14d67,0x14d6b,0x14d5d,0x15138,0xe2930,0xe2937,0xe2935,
-0xe2936,0xe292f,0x00000,0x00000,0xe2929,0x00000,0x00000,0x00000,
-0x00000,0x00000,0xe2c6d,0x22a5b,0x15144,0x1513c,0x1513e,0x15143,
-0x22a67,0x15141,0x22f33,0x15553,0x15146,0x22a58,0x22a60,0x15142,
-0x22a5f,0x22a5c,0x22a64,0x22a66,0x1513b,0x1513f,0x15145,0x15555,
-0x22a61,0x1513d,0x15148,0x22a5a,0xe2c6f,0xe2c70,0x00000,0x15140,
-0x15554,0x1513a,0x00000,0x22a57,0x22a5e,0x22a56,0x22a59,0x22a5d,
-0x22f34,0x15147,0x00000,0x22a62,0x22a63,0x22a65,0x15139,0xe2c6c,
-0x00000,0xe3132,0x00000,0xe3133,0x00000,0x00000,0x00000,0xe2c6b,
-0x00000,0xe2c6e,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x15563,0x22f40,0x15561,0x15562,0x22f36,0x22f46,0xe312c,0x15558,
-0xe312f,0xe3135,0x2354a,0x22f48,0x22f42,0xe3138,0x22f39,0xe3137,
-0x22f4b,0x22f3c,0x1555e,0x23561,0x22f3f,0x15560,0x15557,0xe313c,
-0x22f4d,0x22f41,0x1555a,0x22f3a,0x22f37,0x22f38,0x1555b,0x22f47,
-0x22f4e,0x1555d,0x22f3e,0x22f3d,0x15565,0x15564,0x15556,0x1555c,
-0x1555f,0x22f4a,0xe312e,0xe3139,0x22f44,0x15559,0x22f35,0x22f4c,
-0x22f43,0x22f45,0x22f49,0xe3130,0xe313b,0xe3136,0x00000,0x00000,
-0xe647c,0x00000,0x00000,0x00000,0xe647d,0x2354b,0xe3631,0x15a5b,
-0x15a6f,0x15a6e,0xe3627,0x15a63,0xe3629,0x2355d,0x23559,0x23556,
-0x23568,0x15a5e,0x15a56,0xe3626,0xe3632,0x2355b,0x15f4d,0x15a5a,
-0x23563,0xe3622,0x15a70,0x15a6d,0x2355f,0x2354e,0xe357c,0xe362b,
-0x15a6c,0x23565,0x2354d,0x15a61,0x15a65,0x23564,0xe3623,0x23557,
-0x15a66,0x15a60,0x2354c,0xe357d,0x15f3f,0x23567,0x23555,0x15a6b,
-0x23558,0x23566,0x15a6a,0xe3624,0x23b75,0x00000,0x15a57,0x23553,
-0x15a5c,0x15a67,0x00000,0x15a62,0x2355c,0x23552,0x23550,0x23562,
-0x15a54,0x15a68,0x15a58,0x15f3e,0x23560,0x15a59,0x00000,0x15a55,
-0x15a64,0x15a5f,0x15a5d,0x23554,0x15a69,0x23551,0x2355e,0x2355a,
-0x23b77,0x23b76,0xe362d,0x00000,0x00000,0x00000,0xe647e,0x00000,
-0x00000,0x00000,0xe362e,0x00000,0x00000,0x2354f,0x23c29,0xe3b71,
-0x15f41,0xe3b70,0x23c2f,0x23b7c,0x23c2c,0x2427d,0x15f44,0x23c30,
-0x23c33,0x15f43,0x23c21,0x23c32,0x23c31,0x15f45,0x23b78,0x15f40,
-0x15f48,0xe3b73,0x15f46,0x23c2e,0x00000,0x23c24,0x15f4a,0x23c35,
-0x23c2d,0x23c36,0x15f52,0x15f50,0x23c2b,0x23c2a,0xe3b67,0x23c28,
-0x23c22,0x15f49,0xe3b66,0x15f47,0x22f3b,0x23b79,0xe3b68,0x2433d,
-0x23b7a,0x15f42,0x15f4f,0x24321,0x00000,0x15f4b,0x15f4c,0x23b7b,
-0x23c34,0x2427e,0x23c25,0x23b7e,0x15f4e,0x23c26,0x23c23,0xe3b72,
-0xe3b6d,0x15f53,0xe6339,0x00000,0x00000,0x00000,0xe3b6f,0x00000,
-/* 0x6400 */
-0x00000,0x00000,0x00000,0xe6521,0x00000,0x00000,0x16438,0xe4149,
-0xe4132,0x24324,0x24337,0x2433c,0x24330,0x16434,0x24341,0x16431,
-0x24322,0xe413a,0x24323,0x1642a,0x16433,0x2432a,0x16436,0x16437,
-0x2432b,0xe4138,0x24338,0x2433e,0x16432,0xe413e,0x1642c,0x24329,
-0x24325,0x24340,0x2432e,0x2432f,0x24326,0x2433a,0x24331,0x2433b,
-0x24333,0xe413d,0x1642d,0x24a40,0x16430,0x1642e,0x2433f,0x24336,
-0x24332,0xe4136,0xe4133,0x24327,0x1687a,0x24335,0x16435,0x2432d,
-0xe4134,0x2432c,0xe4148,0xe4725,0xe4142,0x1642f,0x1642b,0x24a55,
-0x24339,0x24334,0x00000,0x24328,0x00000,0x00000,0xe4144,0xe4145,
-0x00000,0xe6676,0x00000,0x24a50,0xe4678,0x24a41,0x24a4c,0xe4728,
-0x24a53,0x16878,0x15f51,0x24a51,0x16873,0xe467e,0xe4724,0xe467a,
-0x16872,0x24a58,0x00000,0x24a42,0x24a4f,0x24a43,0x24a4e,0x16876,
-0x24a52,0x23c27,0xe4721,0x00000,0xe472a,0x24a59,0x24a4a,0x16879,
-0x25061,0x16c77,0xe4723,0x24a57,0x24a56,0x1687b,0x25054,0x16c78,
-0x25055,0xe4722,0x24a46,0x24a47,0x24a44,0x24a49,0x24a45,0x24a5a,
-0x16875,0x16c79,0x16877,0x1687c,0xe467b,0x24a48,0xe4729,0x24a54,
-0xe4c2d,0xe4726,0x24a4d,0xe4c35,0x00000,0x25058,0xe4c38,0x16871,
-0x16c7c,0x25735,0x2505d,0x2505c,0x2505e,0xe4c30,0xe4c2f,0x2505b,
-0x16c7d,0xe4c3b,0x16d25,0x16d22,0xe4c31,0x16d23,0x25056,0x25059,
-0x25063,0x16d2b,0x16d29,0xe4c2e,0x2505a,0x23b7d,0x16c7a,0x25060,
-0x25057,0xe4c3e,0x16d2c,0x2505f,0x16874,0x16d21,0x24a4b,0xe4c3f,
-0xe4c34,0x16d24,0xe4c3d,0x16d28,0x16d2a,0x16d27,0x16d26,0xe4c3a,
-0x16c7e,0x25062,0x16c7b,0x16d2d,0xe4c39,0x00000,0xe6522,0x00000,
-0x00000,0xe4c37,0x00000,0x17061,0x17062,0x25734,0x1706b,0x17068,
-0xe5070,0x1705f,0x17066,0x25736,0x17064,0x1705e,0xe4c32,0x17065,
-0xe5077,0x25733,0x17364,0x17060,0x00000,0x17067,0x17363,0x25732,
-0x25731,0xe5076,0x17069,0xe506f,0x1706a,0xe5079,0x25730,0x2572f,
-0x17365,0x25739,0x17063,0x25737,0xe5075,0x00000,0x00000,0xe5464,
-0x17366,0xe5467,0x1736b,0x25c75,0x25c77,0xe576b,0x17368,0xe576d,
-0x25c78,0x25c74,0xe576c,0x25c76,0x17369,0x1736c,0xe5469,0x25c73,
-0x17367,0x1736a,0x17645,0x25738,0x17644,0x00000,0xe576a,0x1764a,
-0x26160,0xe5770,0x17648,0x17649,0x26163,0x2615f,0x17646,0x2615d,
-0x17838,0x26161,0x00000,0x26162,0x2615e,0xe576e,0x17647,0x2654d,
-0xe5a3b,0x26550,0xe5a3c,0xe5a3a,0x26551,0x2654f,0x26552,0x17839,
-0x2654e,0xe5e31,0x00000,0x2687a,0x1796f,0x26879,0x26878,0x26877,
-0x1796e,0x17970,0xe6523,0x26b5b,0x17a6d,0x17a6c,0xe5f4a,0xe5f4b,
-0x26d4f,0x26d4e,0x26d51,0x17c37,0x17b61,0x26f2c,0x26d50,0xe5f49,
-0xe6032,0x26f2b,0x17c39,0x17c38,0x17c5f,0x27037,0x2707d,0x14545,
-0x00000,0xe2c72,0x23c37,0x2573a,0xe2167,0xe2168,0x1482d,0x2224d,
-0x14a53,0x14a51,0x00000,0x14a52,0x00000,0x22722,0x14d73,0x15149,
-0xe2c74,0x22a68,0xe2c76,0x22a69,0xe2c73,0x1514a,0x22f50,0x00000,
-0x15566,0x15567,0x22f4f,0xe313d,0x00000,0xe3637,0xe3636,0x15a77,
-0x00000,0x15a73,0x00000,0x23569,0x15a7a,0x15a79,0x15a72,0x15a75,
-0x15a78,0x15a74,0xe3634,0x00000,0x23c3b,0x15a71,0x15f54,0xe3b74,
-0xe3b75,0xe3b76,0x15f56,0x15f57,0x23c3a,0x23c3d,0x15f55,0x23c38,
-0x23c3c,0x00000,0x23c39,0xe414b,0x16439,0xe414e,0xe6346,0x24342,
-0xe414d,0xe4730,0x1687d,0x24a5b,0x1706c,0x16d2e,0x25064,0x16d2f,
-0x16d30,0x25066,0x25065,0x25067,0x2573c,0x00000,0x00000,0x2573b,
-0x25c7a,0x25c79,0x1736d,0x1736e,0x26553,0xe5c41,0x00000,0x14546,
-0xe2558,0xe2939,0x00000,0xe3140,0x23c3e,0xe3638,0xe3639,0x00000,
-0x15f59,0x15f58,0x24343,0x00000,0x26164,0x17a6e,0x26f2d,0x14547,
-0x00000,0x15568,0xe3142,0x15a7c,0x15a7b,0x23c3f,0x23c40,0x1643a,
-0x24a5c,0x1687e,0x2573d,0x00000,0x14548,0x14658,0xe293b,0x14d74,
-0x22723,0x00000,0x22a6a,0x1514b,0x15a7d,0xe363a,0x23c41,0x15f5a,
-0x1643b,0x00000,0x25068,0x25069,0x00000,0xe546b,0x25c7b,0x1764b,
-0x2707e,0x14549,0xe293c,0x22724,0x14d75,0x1514c,0xe2c77,0x22a6b,
-0x00000,0x15569,0x22f54,0x22f52,0x22f53,0x1556a,0x22f51,0xe363c,
-0x00000,0xe363f,0xe363d,0x15b21,0x15b22,0x2356a,0x15b23,0x15a7e,
-0x23c42,0xe3b79,0x23c43,0x24344,0x00000,0x00000,0x16922,0x16921,
-0x00000,0x00000,0x25c7c,0x26165,0xe5a3f,0x26555,0x26554,0x2687b,
-0xe2169,0x2213e,0x1514d,0xe3641,0xe4150,0x1454a,0x14659,0xe2251,
-0x1482f,0x1482e,0xe2373,0xe2372,0x14830,0x14831,0x2224f,0x2224e,
-0x22439,0x14a54,0x2243c,0x2243b,0x2243a,0x2243d,0xe263d,0x00000,
-0x00000,0xe625e,0x14d76,0x2272a,0x22726,0x2272f,0xe2943,0xe293e,
-0x14d7d,0xe2942,0x14d7b,0x2272b,0x22727,0x2272e,0x14d7a,0x14e23,
-0x22729,0x22725,0x14e22,0x2272c,0x14d79,0x2272d,0x14d7c,0x14d7e,
-0x22731,0x22730,0x22728,0x14d78,0x14d77,0x14e21,0x00000,0xe2940,
-0xe2941,0x00000,0xe2c7e,0xe2c7a,0x22a70,0x22a76,0xe2d23,0x15153,
-0x15150,0x22a6d,0x22a72,0xe2c7c,0x15156,0x1514e,0x22a71,0x15151,
-0x15154,0xe2c79,0x00000,0x22a74,0xe2c7d,0x1514f,0x22a79,0x15152,
-0xe2d21,0x15155,0x22a6e,0x22a73,0x22a77,0x22a6f,0x22a6c,0xe2d24,
-0xe2d25,0x22a78,0x22a75,0xe2d22,0xe2c37,0x00000,0x00000,0x00000,
-0xe3146,0x15572,0x1556b,0x1556e,0xe314c,0x15571,0xe3144,0x22f57,
-0xe3149,0x1556c,0x22f55,0xe3148,0x15570,0xe314d,0xe3145,0x1556d,
-0xe3143,0x22f58,0x1556f,0x00000,0x00000,0x00000,0x00000,0xe3642,
-0x00000,0x2356e,0x15b25,0x2356d,0x2356f,0x15b24,0x15b29,0x22f56,
-0xe314b,0x2356c,0x23570,0xe3644,0x15b26,0x2356b,0x15b28,0xe3645,
-0x15b27,0xe3c26,0x23c4a,0xe3b7d,0x23c45,0xe3c25,0x15f5b,0x15f5f,
-0x15f5c,0x23c48,0x23c4b,0xe3c23,0x15f5d,0x00000,0x15f5e,0x15f63,
-0x2434d,0x23c49,0x15f61,0x23c46,0x23c44,0xe3b7c,0x15f62,0xe3b7e,
-0x23c47,0xe3c24,0x00000,0x00000,0x16441,0x00000,0x24345,0x1643e,
-0x1643f,0x1643d,0x2434a,0x24349,0x24346,0x16443,0xe415b,0xe4156,
-0x24348,0x15f60,0xe4159,0xe4151,0x2434c,0x24347,0x16440,0x1643c,
-0x16442,0x2434b,0xe4734,0x00000,0xe4735,0x16925,0x00000,0x24a5f,
-0x24a5e,0x24a5d,0x16923,0x00000,0xe4739,0xe4733,0xe4737,0x00000,
-0x16924,0x2506c,0x2506f,0x16d32,0xe4c44,0xe4c46,0x16d31,0x25070,
-0x2506b,0x16d34,0x2506d,0xe4c41,0x16d33,0x2506a,0xe4c40,0x2506e,
-0x17072,0x1706f,0x25746,0x25745,0xe4c43,0x25744,0x2573f,0xe507d,
-0x25740,0xe5123,0x00000,0xe507a,0x17070,0xe507e,0x1706d,0x17071,
-0x2573e,0x1706e,0x25741,0x25742,0x25747,0xe5122,0xe5471,0x25743,
-0xe546f,0xe5470,0x25c7d,0x00000,0xe546c,0xe546d,0x17370,0xe5472,
-0x26168,0x1736f,0x26166,0x26167,0x1764c,0x1783b,0x26556,0xe5a43,
-0x1783a,0xe5a42,0xe6526,0x2687d,0x2687e,0xe5c42,0x17971,0xe5c43,
-0x2687c,0x17a6f,0x00000,0x26f2e,0x17c3a,0x27038,0x27039,0xe613f,
-0x1454b,0x00000,0x14832,0x14833,0x14a55,0xe2641,0x22732,0x15157,
-0x15573,0x15b2a,0x00000,0x00000,0x15937,0x00000,0x15f64,0x15f65,
-0x15e32,0x23c4c,0xe6527,0x16444,0x24a61,0x24a60,0xe5124,0x00000,
-0x1454c,0x14834,0x22733,0x14e25,0xe2945,0x14e24,0xe2d27,0x22a7a,
-0x22a7b,0xe6632,0x22f59,0x22f5a,0x15574,0x15575,0xe3648,0x15576,
-0x23571,0xe3647,0xe3646,0x15b2c,0x00000,0x15f67,0xe3c29,0x15f66,
-0x2434e,0x24641,0x24a62,0x25748,0xe5126,0xe6633,0x1764d,0x17972,
-0x1454d,0x00000,0x1465c,0x1465d,0x1465b,0x1465e,0x1465a,0xe2252,
-0x00000,0x14837,0xe2377,0x22257,0x14836,0x14838,0xe2378,0xe2375,
-0x22252,0x22251,0x22254,0x22253,0x22256,0x14835,0x22250,0x22255,
-0x00000,0x00000,0x00000,0x00000,0xe2648,0x2243e,0x14a5f,0x2243f,
-0x22443,0x14a5e,0xe2649,0x22447,0x22442,0x22445,0x14a57,0x14a58,
-0x14a59,0x14a5a,0xe2645,0x14a61,0xe2644,0x22441,0x14a5c,0x14a62,
-0xe2647,0x22440,0x22446,0xe2642,0x14a5b,0x22444,0x14a5d,0x14a56,
-0x14a60,0xe264a,0x00000,0x00000,0x00000,0xe6257,0x00000,0x00000,
-0x00000,0x00000,0x14e3a,0xe2947,0x22735,0x14e26,0x00000,0x14e30,
-0x14e31,0x14e29,0x14e3b,0x14e2b,0x2273d,0x14e36,0x22738,0x14e2c,
-0x22747,0x22748,0x22740,0x22739,0x14e39,0x22745,0x14e34,0x14e32,
-0xe2952,0x22746,0xe2949,0x22744,0x2273c,0x22734,0x2273b,0x14e2d,
-0xe625f,0x14e33,0xe294a,0x14e27,0x2273f,0x2273e,0x22736,0xe294f,
-0x14e35,0x22742,0x22737,0x14e38,0x22749,0x14e28,0xe2948,0x14e2f,
-0x2273a,0x22743,0x14e37,0x00000,0x14e2a,0x14e2e,0x00000,0x22741,
-0x00000,0x00000,0xe294e,0xe294c,0xe6528,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0xe6529,0x00000,0x22b3d,0x1515f,
-0x1516c,0xe2d36,0x22b38,0x22b2e,0x15165,0x22b2c,0x1515e,0x22b27,
-0x15168,0x22b34,0x22b21,0x22b23,0xe2d2e,0x00000,0x00000,0xe2d30,
-0x22b26,0x22a7c,0x22b33,0x22b43,0x15163,0x22b28,0x22b3a,0xe2d2d,
-0x22a7e,0x22b41,0x22b42,0x22b45,0x22b3c,0x22b2d,0x22b35,0x15169,
-0x1515c,0x15164,0x15170,0x15159,0x1515b,0xe2d31,0xe2d2b,0xe2d3a,
-0x22b25,0x1516d,0x15166,0x22b3f,0x22b22,0x1516f,0x1516a,0x22b2b,
-0x00000,0x00000,0x1516e,0x22b32,0x22b2a,0x15167,0x22b3e,0x22b36,
-0xe2d2a,0x15161,0x22b44,0x22b29,0x1515d,0x22b3b,0x22b31,0x15162,
-0x22b37,0x1515a,0x22a7d,0x1516b,0x15627,0x15160,0x22b30,0x22b2f,
-0x22b24,0xe2951,0x22b40,0xe2d34,0x22b39,0x00000,0xe2d32,0x15158,
-0xe2d39,0xe2d37,0x00000,0x00000,0x00000,0xe2d38,0xe652b,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0xe652a,0x00000,0x22f6e,0x1562e,0x22f6f,0xe315d,0x22f63,0x15623,
-0x1562f,0xe3157,0x22f5c,0xe3153,0x22f65,0x22f6d,0xe315b,0x22f5b,
-0x22f76,0x15577,0xe315e,0xe3164,0xe3150,0x22f75,0x22f70,0xe315f,
-0x22f71,0x15621,0x1562c,0x22f67,0xe3156,0x22f68,0x22f72,0x22f69,
-0xe3163,0x22f64,0x22f5e,0x22f5f,0x22f6c,0x22f66,0xe3154,0xe314f,
-0x15578,0x1557c,0x22f74,0x22f60,0x1562a,0x15626,0xe315a,0x00000,
-0x15629,0x15630,0x1557d,0x1562b,0x22f6b,0x1562d,0x1557a,0xe3159,
-0x15579,0x22f5d,0x00000,0x22f61,0x15624,0x22f73,0x22f6a,0x22f62,
-0x15628,0x15625,0xe2d2f,0x1557b,0x1557e,0xe3162,0xe3158,0x00000,
-0xe3161,0xe3160,0xe652d,0x00000,0x00000,0x00000,0xe652c,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x23628,0xe3655,0x23576,0x23577,0x2357b,
-0xe3660,0x2362c,0x23629,0xe364e,0x23622,0x23621,0x15b33,0x23625,
-0x23634,0x23572,0xe365b,0x23635,0x23627,0x23639,0x2362d,0x15b32,
-0x2362b,0x15b2d,0x15b42,0x15b38,0xe3657,0x15b3c,0x15b3b,0x23573,
-0x00000,0x23632,0x23638,0x23630,0x23637,0x00000,0xe3651,0x23624,
-0x23574,0x23636,0x23626,0x15b30,0x15b3d,0xe365a,0x2362f,0x15b36,
-0xe364d,0xe365c,0xe3650,0x2362e,0x23575,0x15b3e,0xe364b,0x15b40,
-0x23631,0x15b41,0x15b2f,0x2357c,0x23633,0xe3654,0xe3478,0x15b35,
-0x15b3f,0x2357e,0x2362a,0x23579,0x2357d,0x15b3a,0x23578,0x15b2e,
-0x15b37,0x15b34,0x23623,0x15622,0x23c63,0x15b31,0xe364c,0xe3652,
-0xe365e,0xe365f,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0xe3656,0x00000,0xe3c45,0x15b39,0xe3c41,0x23c66,0x23c7c,
-0x23c71,0x15f7b,0xe3c38,0x15f76,0x23c60,0x15f77,0x23c70,0xe3c3e,
-0x23c69,0x23c76,0x15f73,0x23c4e,0x23c78,0x15f69,0x23c56,0x15f6c,
-0x15f6b,0x00000,0x15f7c,0xe3653,0x23c50,0x23c72,0x23c73,0x15f6e,
-0x15f6a,0x23c5e,0xe3c3d,0x15f75,0x23c59,0xe3c32,0x23c74,0x15f71,
-0x23c6c,0x23c79,0x23c53,0x23c58,0x23c52,0xe3c2a,0x15f70,0x23c65,
-0x24364,0x23c54,0x15f74,0x23c5d,0x23c75,0x15f6f,0x23c5a,0x23c57,
-0x23c68,0x15f72,0x15f68,0x15f7e,0x23c6b,0x23c6a,0xe3c31,0xe3c42,
-0xe3c39,0xe3c3b,0xe3c34,0xe3c2f,0x23c4f,0x15f6d,0x23c77,0x23c5f,
-0x23c61,0xe3c37,0x23c6e,0x23c6d,0x23c4d,0x15f78,0x15f7a,0x23c55,
-0x23c5c,0x23c64,0x15f79,0x23c5b,0x23c67,0x23c7a,0x00000,0x23c6f,
-0xe3c3c,0x00000,0x00000,0x00000,0xe3c44,0x00000,0xe3c33,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x23c7b,0x00000,0x00000,
-0x00000,0xe652f,0x23c51,0x00000,0xe652e,0x00000,0xe3c40,0x24378,
-0x1644c,0xe4165,0x24376,0x24361,0x24366,0x2435f,0xe4177,0x24372,
-0x24351,0x24358,0x00000,0x24370,0x2437a,0x24362,0xe4168,0x24355,
-0x24368,0x2436d,0x24359,0xe416b,0x2436a,0x24356,0xe415d,0xe4175,
-0x2435d,0x2435e,0x1644e,0x24371,0x2436f,0xe4173,0x24352,0x24374,
-0xe4174,0x24375,0x24377,0x16452,0x1644a,0xe416f,0x2357a,0x2435a,
-0x2436c,0x2435b,0x16447,0x16457,0x24373,0x16455,0x16451,0x24350,
-0x16449,0xe4179,0x24353,0x16456,0xe4178,0x24363,0x2434f,0xe4176,
-0x1644f,0x24367,0x24357,0x16450,0x24360,0x16446,0x15f7d,0x24369,
-0x23c62,0x24354,0x00000,0xe416d,0x2436e,0x1644b,0x2436b,0x16448,
-0x24365,0x16453,0x2435c,0x24379,0xe416a,0xe417b,0x00000,0x00000,
-0x00000,0x00000,0x1644d,0x2452c,0x00000,0xe4172,0x16454,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x24a70,0x24a6e,0xe473a,
-0x24b26,0x24a6c,0xe473d,0x24a7e,0x16445,0x16928,0x24a68,0x24b25,
-0xe4751,0x24a6d,0x24a7b,0x1692d,0x16926,0xe474e,0x24b23,0xe4746,
-0x24a66,0x24b22,0xe4747,0x16938,0x24a77,0x24b29,0x16936,0x24a6f,
-0x16927,0x24a71,0x24b21,0x16930,0x24a6a,0x16934,0x1692a,0x24a73,
-0x24a69,0x24a63,0xe473e,0x24a7d,0x16931,0x24b28,0x24a64,0x1692e,
-0x00000,0x24a79,0xe6352,0x1692f,0x24a6b,0x24a76,0x24a72,0x24a74,
-0xe4743,0x16929,0x24b27,0x16937,0x24a75,0xe473b,0x24b2a,0x00000,
-0xe473c,0x24a65,0x24a7a,0x1692c,0x16935,0x16933,0x24a67,0x24a7c,
-0x16932,0xe4745,0xe4748,0x1692b,0x24a78,0xe474d,0xe4744,0x00000,
-0xe4c54,0x24b24,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0xe474c,0x2507c,0xe4742,0x25078,0x25074,0x2512a,0x25127,
-0x16d37,0xe4c64,0xe4c60,0x2512e,0x2507b,0x16d42,0x25124,0xe4c4f,
-0xe4c51,0x25077,0x25123,0x16d3f,0x25137,0x00000,0x25134,0x25126,
-0x25075,0xe4c5f,0xe4c57,0x2512b,0x2512d,0x16d3b,0x25121,0x2507a,
-0x25071,0x16d38,0x16d40,0x00000,0x25130,0x16d41,0x25072,0x25136,
-0x25129,0x2512f,0x16d3e,0xe4c4d,0xe4c50,0x2512c,0xe4c47,0x25133,
-0xe4c5b,0x16d43,0xe4c56,0x16d3d,0x25125,0x25076,0x25138,0x25073,
-0x25131,0x16d3a,0xe4c4a,0x2507d,0xe4c49,0x2507e,0x16d39,0x16d36,
-0x25079,0x16d3c,0xe4c52,0x16d35,0xe4c62,0x25132,0x25135,0x25122,
-0x25755,0xe4c5e,0xe4c59,0x00000,0xe4c61,0xe6530,0x00000,0x00000,
-0x00000,0x00000,0x2574d,0xe512c,0x25749,0x17121,0xe513c,0xe5138,
-0x17074,0x17079,0x17075,0x25757,0x25762,0x17073,0x2574f,0x25758,
-0x25128,0x25759,0xe5128,0xe512b,0x1707a,0xe5140,0x25768,0x1707e,
-0x17123,0x2574b,0xe513b,0x1707d,0xe5131,0x25766,0x25767,0x2575d,
-0x2575c,0x25754,0xe5129,0xe513e,0x2575e,0x25765,0x25764,0xe512f,
-0x17078,0x17076,0x25756,0x25753,0xe5144,0x25750,0x25763,0x17122,
-0x25761,0x1707c,0x1707b,0xe5127,0x2575b,0x00000,0x2574a,0x2574c,
-0x2574e,0x25760,0x2575a,0x17077,0xe512e,0x25751,0xe5132,0x2575f,
-0xe5141,0xe513a,0x00000,0x00000,0x00000,0x00000,0x25752,0xe6531,
-0x00000,0x00000,0xe6532,0x00000,0x00000,0xe5475,0x17378,0x25d31,
-0x17371,0x25d22,0xe547b,0x25d2d,0x17373,0x25d34,0xe5521,0x25d29,
-0xe547c,0x25d24,0xe5476,0x00000,0x25d35,0x25c7e,0x25d2b,0xe5527,
-0x1737a,0x25d30,0x25d36,0x25d2a,0x17372,0x25d2c,0x25d21,0x17379,
-0xe5523,0xe547a,0x25d33,0x25d26,0x17375,0xe5524,0x25d28,0x25d25,
-0x1737b,0x25d27,0x17374,0x17377,0x25d2f,0x25d23,0x25d32,0xe5478,
-0x25d2e,0x00000,0xe5529,0xe5774,0x1764f,0x26173,0x17654,0x17655,
-0xe5777,0xe5821,0xe5776,0x1764e,0x26172,0xe5778,0x2616f,0x26170,
-0x17652,0x2616a,0x2616e,0x17651,0xe577e,0x2616b,0xe5779,0xe5823,
-0xe577d,0xe577a,0x17653,0x17650,0xe5822,0x26169,0x2616d,0x26171,
-0xe577b,0x00000,0xe6533,0x2655c,0x26559,0x26562,0xe5a44,0x26561,
-0x2655f,0x2655a,0xe5a4f,0x1783f,0xe5a45,0xe5a4e,0x00000,0xe5a47,
-0xe5a4d,0x2655b,0x1783e,0x17376,0x2655e,0x1783d,0x26563,0x2655d,
-0x26558,0x2616c,0xe5a48,0xe5a46,0x00000,0x1783c,0xe6534,0x26557,
-0x26924,0xe5c49,0x26923,0x26560,0x17973,0xe5775,0x26927,0x26928,
-0x26922,0x26926,0x00000,0x26921,0xe5c47,0xe6535,0x00000,0x00000,
-0x26b5f,0x26925,0x17a72,0x17a70,0x26b5d,0xe5e35,0xe5e34,0xe5e33,
-0x26b60,0xe5e37,0x26b5c,0x26b5e,0x17a71,0x00000,0xe5f4f,0xe5f4e,
-0x26d53,0x26d54,0x17b62,0x26d52,0x00000,0xe6536,0xe6537,0x26f31,
-0x17c3b,0x26f2f,0x26f30,0x2703a,0xe6074,0x00000,0x17d23,0x27123,
-0x27121,0x27122,0x27124,0xe6140,0xe6165,0xe6141,0x2722b,0x00000,
-0x1454e,0x14839,0xe2379,0x14e3c,0x00000,0x2274a,0xe2953,0xe2954,
-0x22b46,0xe6269,0xe2d3c,0xe3166,0x22f77,0x22f79,0xe3165,0x22f78,
-0xe3167,0x22f7a,0x15b43,0x2363b,0x22f7b,0xe3662,0x2363a,0x2363c,
-0x2363d,0x23c7d,0x16022,0x23c7e,0x23d22,0x16023,0x16021,0x23d21,
-0xe417d,0x24422,0x2437e,0x2437d,0xe417c,0x2437c,0x2437b,0x16458,
-0x24421,0x16939,0x24b2b,0x24b2d,0x1693a,0x24b2c,0x16d45,0xe4c66,
-0x16d44,0x25139,0xe4c65,0xe4c67,0x2576a,0x25769,0x2576b,0xe5146,
-0xe5145,0x17124,0x00000,0x25d37,0x1737c,0xe552b,0x26174,0x17656,
-0x26564,0x17b63,0x1454f,0x1465f,0x1483a,0x14a63,0x14e3d,0x14e3e,
-0xe2955,0xe2956,0x15171,0xe2d3d,0xe3168,0x22f7c,0xe3c49,0xe3c47,
-0x00000,0xe417e,0x16459,0xe4221,0xe4753,0x00000,0x25259,0x17125,
-0x17657,0x14550,0xe2253,0x1483b,0x00000,0x00000,0x2274c,0x14e3f,
-0x2274b,0xe2958,0x22b47,0x15172,0x22b48,0x00000,0x15173,0x00000,
-0x22f7e,0x15632,0x15631,0xe316a,0x23642,0x23640,0x23641,0x2363f,
-0xe3664,0x2363e,0x00000,0x00000,0x23d23,0x23d26,0x16025,0x23d24,
-0x16024,0x23d25,0x00000,0x24423,0xe4222,0xe6354,0x24b2e,0x24b2f,
-0x24b30,0xe4754,0x2513c,0x2513b,0x16d46,0x2513a,0x2513d,0x2576c,
-0x00000,0x00000,0x2576d,0x2576e,0x00000,0x25d38,0x1737d,0x17658,
-0x26565,0x00000,0x17a73,0x2213f,0xe2959,0x15174,0x22b49,0x15633,
-0x00000,0x00000,0x15b44,0xe3665,0x16026,0x23d27,0xe3c4b,0x1645b,
-0x1645a,0xe4226,0x00000,0x24b31,0x24b32,0x16d47,0x16d48,0x25770,
-0x2576f,0x26175,0x26f32,0x14551,0x22140,0x14660,0xe237a,0x14a64,
-0x22448,0xe295a,0x15175,0x1645c,0x14552,0x00000,0x22b4a,0x15176,
-0x22b4b,0x00000,0x1737e,0x14553,0xe6538,0xe6539,0x2274d,0x00000,
-0x22b4c,0xe2d42,0x23025,0x23024,0x23022,0xe316e,0x23021,0x23026,
-0x23023,0xe316c,0xe316d,0x15b45,0x15b46,0xe3666,0x00000,0x16027,
-0x23d28,0x00000,0x23d29,0x23d2a,0xe3c4d,0x00000,0xe653a,0x24427,
-0x24428,0x24426,0xe4228,0x24424,0x24425,0x1645d,0x24b33,0x25140,
-0x2513f,0x2513e,0x25141,0x25772,0x25771,0x17126,0x25773,0x00000,
-0x17421,0x25d39,0xe552d,0x26176,0x26566,0x26d55,0x00000,0x14554,
-0x14662,0x14661,0x00000,0x14e40,0x22141,0x2215f,0x1483c,0x00000,
-0x22258,0x22449,0x2244a,0x14e41,0xe295d,0x2274e,0xe653b,0x15177,
-0x22b4d,0x22b4e,0x00000,0x15634,0x15638,0x23027,0x15637,0x15635,
-0x15636,0x00000,0x23643,0x15b47,0x1602a,0xe3c4e,0x16028,0x16029,
-0x23d2b,0xe4229,0xe422a,0x1693b,0x14555,0x00000,0x22160,0xe2257,
-0x14663,0xe2254,0x00000,0x22163,0xe2421,0x00000,0x14666,0x22162,
-0x14665,0x14664,0x14a65,0x22161,0xe2258,0xe2259,0x22259,0x00000,
-0x00000,0x00000,0x2225d,0x2225f,0x22260,0x14846,0x14847,0x2225c,
-0x14842,0xe237d,0x2225a,0xe2425,0x2225e,0x14843,0xe2655,0x1483e,
-0xe237c,0x1483f,0xe2423,0x14845,0x2225b,0x1483d,0x14a66,0x14840,
-0x14841,0x14844,0x00000,0xe653c,0x00000,0x2245b,0x22459,0x2244c,
-0x14a72,0x22453,0x14a6d,0x2244d,0xe2964,0x22455,0xe2650,0x22452,
-0x14a70,0x22451,0x14a77,0x2245a,0x14a79,0xe2653,0x14a7b,0xe237e,
-0x2244b,0xe2657,0x14a6e,0x2245c,0xe2651,0x14a75,0x14a78,0xe264c,
-0x22765,0x14a68,0x14b21,0x14a76,0x2244e,0x14a6b,0x14a7a,0x22456,
-0x14a69,0x14a6a,0x22763,0x2244f,0x14a71,0x14a7c,0x2245d,0x22450,
-0x14a6f,0xe264d,0x14a74,0x2274f,0x14a7d,0x22457,0x14a73,0xe2963,
-0x14a7e,0x14a67,0x22454,0x14a6c,0x22458,0x22764,0xe264e,0xe2652,
-0xe265c,0xe2659,0xe2656,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0xe265b,0x14e4d,0x14e5d,0x22756,0x14e54,0xe2d4e,
-0x2276b,0x14e45,0xe296b,0x14e48,0x22762,0x00000,0x22754,0x22758,
-0x14e50,0x14e52,0x2275b,0x14e59,0x14e4b,0x14e49,0x14e4a,0x14e58,
-0x22767,0x14e53,0x2275a,0x2275c,0x14e51,0x14e56,0x2275d,0x2276a,
-0xe296d,0x15178,0x14e5c,0xe6261,0x14e46,0x22769,0xe296c,0x2276d,
-0x22759,0x2276f,0x22760,0x14e4f,0x22755,0x14e4e,0x14e60,0x14e55,
-0xe296a,0x22753,0x22b57,0x14e5b,0x14e5f,0x22761,0x22766,0xe2965,
-0x14e61,0x14e5a,0x14e4c,0x14e42,0xe2969,0x14e47,0xe6260,0x22757,
-0x14e43,0x2276e,0xe2967,0x22751,0x22750,0x2275e,0x22752,0x14e5e,
-0x15639,0x14e57,0x2275f,0x14e44,0xe2d4f,0x15229,0x00000,0x00000,
-0x00000,0x2276c,0x00000,0x00000,0x00000,0x00000,0x00000,0xe2d46,
-0x22b5e,0x22b61,0xe2d50,0x22b64,0x22b59,0xe2d48,0xe2d4a,0x22b67,
-0x22b6a,0x22b6c,0x22b56,0x15179,0x1517e,0x2302c,0x15230,0x22b65,
-0x22b6d,0x22b5d,0x22b55,0xe2d49,0xe2d47,0xe2d4d,0x23047,0x15223,
-0x22b62,0x22b5a,0x22b5c,0x15228,0xe317a,0x22b5f,0x15222,0x22b52,
-0x22b68,0xe2d4b,0x22b6b,0xe2d45,0xe2d57,0x1517d,0xe2d53,0x1522b,
-0x22b4f,0x1522d,0x1517b,0x15231,0x22b69,0x22b51,0x1522e,0x23041,
-0x22768,0x15221,0x1517a,0x22b58,0x22b50,0x1522f,0x15227,0x22b63,
-0x1522c,0x1522a,0x22b5b,0x15224,0x22b53,0x15225,0x15226,0x22b54,
-0x22b66,0x1517c,0x22b60,0x00000,0xe2d55,0xe2d51,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0xe3177,0xe3173,
-0x2302f,0x15641,0x15646,0xe3179,0xe3226,0xe3176,0x23038,0x2303e,
-0x2303a,0x2302d,0x23030,0x23029,0x2302a,0x1564d,0x1563e,0x23039,
-0x23042,0x15648,0x1563a,0xe316f,0x15643,0x23031,0x15645,0x23032,
-0x2303c,0xe3222,0xe3225,0xe3172,0x15647,0x2304b,0x2302b,0x15640,
-0x1563f,0x1564b,0x23028,0x23049,0x2303d,0x2304a,0x23044,0x23036,
-0x23045,0xe3221,0x2303f,0x23048,0x23046,0x1564c,0x23037,0x1563d,
-0x1563c,0x15644,0x1564a,0x23043,0x15649,0x23034,0x15b48,0xe3178,
-0x2304c,0x23033,0x2302e,0x15642,0x1564e,0x1563b,0xe3227,0x2303b,
-0x23040,0xe317d,0xe317b,0xe317c,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0xe653d,0x00000,0x00000,
-0x00000,0x00000,0x15b6a,0x23645,0x23649,0xe366f,0x15b57,0x15b55,
-0xe367a,0xe3721,0x15b4c,0x23647,0x23646,0x15b60,0xe3c50,0x2364c,
-0x15b5a,0xe3672,0x2365e,0x2366a,0x15b49,0x2365b,0x23654,0x15b6c,
-0x23644,0xe366a,0x23660,0xe366b,0x15b69,0x15b5d,0x15b68,0x15b53,
-0x23650,0x23662,0x2365a,0x15b54,0x15b4e,0x23668,0xe366c,0x23661,
-0x23663,0x15b56,0x15b5e,0x23665,0x2364e,0x2365f,0x23653,0x23667,
-0x15b63,0x15b4b,0x15b61,0x23658,0x23656,0x23657,0x15b58,0x23652,
-0x23651,0x15b4d,0x2364b,0x23669,0x15b4f,0x23655,0x15b6d,0xe3674,
-0x15b67,0x2364a,0x15b64,0x15b62,0x15b6b,0x2365c,0x15b66,0x23035,
-0x2365d,0x15b65,0x23664,0x15b4a,0x23659,0x15b5c,0x2364d,0x15b5b,
-0xe367c,0x15b59,0x15b51,0x15b50,0x23d2c,0x23666,0xe3c5d,0xe3728,
-0x2364f,0xe3726,0xe3723,0x23d41,0xe3670,0x15b52,0xe3677,0xe3724,
-0xe3676,0xe3725,0xe3679,0x00000,0xe367d,0x00000,0x00000,0xe653e,
-0x00000,0x00000,0xe3729,0x00000,0x00000,0x00000,0x00000,0xe3727,
-0xe3c54,0x16047,0x15b5f,0x16035,0x23d3b,0x16043,0xe3c52,0x23d2f,
-0x16032,0x1602e,0x23d4d,0x16034,0x16038,0x16033,0x1603c,0x23d51,
-0x23d48,0xe3c6b,0xe3c6d,0x23d36,0x16041,0x1603b,0x23d42,0x1602b,
-0x23d4e,0x23d47,0x1602f,0x23d3c,0x1603e,0x23d59,0x23d5a,0x00000,
-0x1602c,0x23d4c,0x16040,0x23d40,0x23d32,0x23d33,0x16044,0x23d37,
-0x23d3e,0x23d38,0xe3c5a,0x16042,0x1604a,0x23d34,0x23d2d,0x23d2e,
-0xe3c56,0x23d30,0x16031,0x23d3d,0xe3c6e,0x1603f,0x16048,0xe3c58,
-0xe3c69,0x23d3f,0x23d57,0x23d4f,0x1602d,0x23d55,0x16039,0xe3c66,
-0x16037,0xe3c64,0x23d5b,0x16036,0x23d45,0x23d39,0x23d43,0x1604d,
-0x23d49,0x23d46,0x23d35,0x16049,0x23d53,0x23d50,0x23d58,0x16030,
-0x23d44,0x1604c,0xe3c5b,0x23d4b,0xe423a,0xe3c60,0x1603a,0x1603d,
-0xe3c5c,0x23d4a,0x1604b,0x23d3a,0x23648,0xe3c51,0xe3c6c,0x23d54,
-0x23d52,0x23d56,0x00000,0xe3c62,0xe6542,0x00000,0xe3c63,0x00000,
-0xe3c68,0x00000,0x00000,0x00000,0xe6540,0x00000,0xe633d,0x00000,
-0x23d31,0x16046,0xe653f,0xe6541,0x00000,0x24447,0x24446,0x2442c,
-0x16463,0xe4230,0x24445,0x2442f,0x24430,0x00000,0x1646d,0x2444e,
-0x16468,0x24444,0xe4233,0x24429,0x1646e,0x16464,0x24438,0x2442e,
-0x24431,0x24449,0x1645e,0x24450,0x24448,0x16467,0x2443d,0x16472,
-0xe422e,0xe4236,0x16471,0x1646b,0xe4240,0x00000,0x2444f,0x1645f,
-0x2443b,0x24432,0x2443f,0x2444b,0x16473,0xe4239,0x16461,0x2443a,
-0xe422d,0x24433,0x1646a,0xe4231,0x16469,0x24436,0x24440,0x2444a,
-0x2442d,0x24437,0x16462,0x24441,0x1646f,0x16466,0x24434,0x16465,
-0x2442b,0x24439,0x2444d,0x16045,0x16957,0x2443c,0x24b34,0x2443e,
-0x2444c,0x1646c,0x24435,0x16460,0x16470,0x16d5a,0x2442a,0x00000,
-0x24443,0xe4244,0xe423e,0xe4247,0x24442,0xe423d,0x00000,0x00000,
-0x00000,0x00000,0x00000,0xe4245,0x00000,0x00000,0xe423f,0x00000,
-0xe423b,0xe4246,0x00000,0x24b50,0x16954,0x24b45,0x24b4a,0x16949,
-0xe4756,0x24b36,0x16956,0xe4757,0x16940,0x24b35,0x24b56,0x16958,
-0x24b39,0x24b49,0xe4765,0x24b3b,0x24b59,0x24b55,0x1693e,0x16948,
-0x2515b,0x16955,0x16946,0x24b37,0xe4763,0x24b54,0x1694a,0x24b51,
-0x24b5e,0x24b3d,0x24b46,0xe4c78,0xe475b,0x24b5c,0x24b52,0x16945,
-0xe4c6a,0xe4764,0x24b44,0x1693f,0x1693d,0x1694f,0x00000,0xe475f,
-0x24b42,0x24b3f,0x24b40,0xe475a,0x24b58,0xe475c,0x24b5d,0x24b5b,
-0x16943,0x24b5f,0x16947,0x1694e,0x00000,0x24b38,0x25143,0x24b41,
-0xe475e,0x16941,0x16953,0x16950,0x16944,0x24b4b,0x24b3c,0x16951,
-0x24b4d,0x1694b,0x1694d,0x1693c,0xe475d,0x24b4f,0x24b47,0x24b3a,
-0x1694c,0x24b57,0x24b5a,0x24b43,0x24b4e,0xe4c74,0x16942,0x16d49,
-0x24b4c,0x25142,0xe4762,0x24b53,0xe4761,0x00000,0x00000,0x00000,
-0xe6544,0xe6545,0xe4766,0x00000,0xe6543,0x00000,0x24b3e,0x2514c,
-0x25156,0x16d4c,0x25155,0x25161,0x16d4e,0x25153,0x00000,0x25157,
-0x16d59,0xe4c7d,0x2514e,0x16d51,0xe4c73,0x2515a,0x2577b,0x16d5d,
-0x16d5c,0x2515c,0x2514b,0x25166,0x16d57,0xe4c6b,0x16d4d,0x2515f,
-0x00000,0x25163,0x25168,0x2515d,0x25151,0x16d50,0x16d53,0x16d5b,
-0x16d56,0xe4c75,0x25154,0x24b48,0xe4c7e,0xe4c6c,0x25150,0x25167,
-0x16d52,0xe4c79,0x16d55,0x25169,0x16d4a,0x2515e,0x25144,0x25164,
-0x1742a,0xe4c7a,0x25152,0x00000,0x16d4b,0x2514d,0x16d4f,0x25145,
-0x16952,0x25149,0xe6363,0x25162,0x2514a,0x25148,0x16d54,0xe4c7b,
-0x25160,0xe4c77,0x25147,0x25159,0x25158,0x25165,0x2514f,0x16d58,
-0x00000,0xe6547,0x00000,0x00000,0x00000,0xe6546,0x2577e,0xe5156,
-0x17133,0x17129,0x2582c,0x25776,0x1712b,0x25824,0x17132,0x1712d,
-0x25822,0x25d3b,0x25828,0x2582e,0x25827,0x25774,0x25825,0x25830,
-0x25832,0x17128,0x25831,0x1712e,0x17134,0xe5154,0x17131,0xe5158,
-0x2582b,0x17130,0x25826,0xe514d,0x25778,0x2577d,0xe5150,0x2582a,
-0x1712f,0x1712c,0x17127,0x1712a,0x2577c,0x00000,0x25146,0x25777,
-0x2577a,0x2582d,0x25821,0x25775,0x25d3a,0x2582f,0x25779,0x25829,
-0xe4c71,0x00000,0x00000,0xe5155,0x25d3d,0x1742e,0xe5530,0xe552f,
-0x17422,0xe5535,0xe5536,0x17426,0x25d3f,0x25d45,0x25d43,0x17424,
-0x17425,0x1742c,0x25d46,0x25d3e,0x17427,0xe5531,0x25d42,0x25d41,
-0x25d47,0x1742d,0xe5537,0x17428,0x1742b,0x25d40,0x1742f,0x17429,
-0x17430,0x17423,0x25d44,0xe5a55,0x25d3c,0xe5159,0xe5539,0x26225,
-0xe6548,0x00000,0x1765d,0x26222,0x26224,0xe5828,0x1765b,0x2617e,
-0x26221,0x2617a,0xe582a,0xe5827,0x25823,0x2617b,0x1765c,0x26177,
-0xe5826,0x17659,0x26226,0x1765a,0x26178,0x26179,0x2617d,0x1765f,
-0xe5829,0x1765e,0x00000,0xe582b,0x2617c,0x17845,0x2656a,0x26570,
-0x17846,0x26567,0x17843,0x17840,0x26572,0x17844,0xe5a52,0x17841,
-0x26569,0x2656c,0x2656d,0x2656e,0x26571,0xe5a54,0x26223,0x26568,
-0x17842,0x2656f,0x26934,0x2656b,0xe5a53,0xe654a,0xe6549,0x2692b,
-0x17975,0x2692e,0x17976,0x26937,0x2692d,0x2692a,0xe5c51,0x2692c,
-0x26930,0x26933,0x26932,0x26936,0x26929,0xe5c4f,0x17974,0x26931,
-0x26935,0x26938,0x2692f,0x26b61,0x26b62,0x26b66,0x26b67,0xe5e3c,
-0x26b64,0x26b65,0x26b63,0xe5e3a,0x17a74,0xe5e3b,0x00000,0x00000,
-0x00000,0x17b64,0x26d59,0xe6036,0xe5f52,0x26d56,0x26d57,0x26d58,
-0x17b65,0xe6037,0x26f34,0x26f33,0xe654b,0x2703d,0x17c60,0x2703b,
-0x2703e,0x2703c,0x27125,0x17d24,0x17d32,0x27171,0x2715b,0xe6179,
-0x27170,0x2723e,0x2723f,0x14556,0x00000,0x00000,0xe2428,0xe2426,
-0x14848,0x22261,0xe2427,0xe242b,0x2245e,0xe2662,0x14b22,0xe265f,
-0x14b25,0xe265e,0x2245f,0xe2663,0x14b23,0x14b24,0xe2660,0x00000,
-0x00000,0xe2977,0x22778,0x2277a,0x22775,0x22772,0x22774,0xe2974,
-0xe2970,0xe2975,0x14e65,0xe296f,0xe2979,0xe2976,0x14e63,0xe2972,
-0xe2971,0x22776,0x14e64,0x22773,0x22770,0x14e62,0x22777,0x00000,
-0x22771,0x14e66,0x22779,0x00000,0x00000,0x00000,0x00000,0x22b6f,
-0xe2d5e,0x22b73,0xe2d5c,0xe2d5a,0x1523a,0xe2d58,0xe626a,0xe2d65,
-0xe2d62,0x22b76,0xe2d5f,0x15232,0x15235,0x15237,0x15239,0x15236,
-0x22b72,0x22b71,0xe2d64,0x15234,0x22b74,0x22b75,0xe2d63,0x22b6e,
-0x15238,0xe2d68,0x15233,0xe2d5d,0x00000,0x00000,0x22b70,0xe654d,
-0x00000,0x00000,0x00000,0x00000,0xe3228,0x2305a,0x2305b,0x2305c,
-0x15653,0xe6279,0x1564f,0x23051,0xe322a,0x23059,0x2305e,0x15654,
-0xe322b,0x2304f,0x23055,0x2304e,0x23058,0xe3231,0xe322f,0x23054,
-0x15650,0x15652,0x2305d,0xe3229,0x2304d,0x23050,0x23056,0xe322d,
-0x23057,0x2305f,0x23053,0xe322c,0x15651,0xe654f,0x00000,0x00000,
-0x00000,0x00000,0xe654e,0x00000,0x00000,0x00000,0xe3230,0x15b72,
-0x23671,0xe3730,0xe3732,0x23673,0x2366f,0xe372f,0x2367b,0x2366d,
-0x2367a,0x15b6e,0x2366b,0x23d5f,0x23675,0x15b71,0xe3735,0x23676,
-0x23679,0xe372e,0x2367d,0xe372c,0x23672,0x00000,0x23677,0xe372d,
-0xe3731,0x15b6f,0x15b70,0x2367c,0x23670,0x2366c,0x2367e,0xe3733,
-0x23674,0xe6550,0xe6551,0x23678,0x00000,0x00000,0x00000,0x2366e,
-0x00000,0x1604e,0x1604f,0x23d69,0x16055,0xe3c74,0x23d5d,0x23d66,
-0x23d5c,0x16052,0x23d64,0x23d62,0xe3c7d,0x23d63,0x16050,0xe3c7c,
-0x23d67,0x00000,0xe3c6f,0xe3c7a,0xe3c72,0xe3d21,0x23d60,0x23d5e,
-0x16051,0x23d61,0x23d65,0xe3c7b,0xe3c79,0xe3c71,0x16053,0xe3c73,
-0xe3c77,0xe6553,0x23d68,0xe6554,0x00000,0xe6555,0x00000,0xe6552,
-0x00000,0x24456,0x2445d,0x2445f,0x24465,0xe4257,0x16522,0x24451,
-0xe424c,0x16478,0xe424e,0x24460,0x1647d,0x24466,0x16474,0xe4251,
-0x24463,0xe4258,0x24453,0x24464,0x24452,0x00000,0x16524,0xe4252,
-0x2445e,0x16475,0x24467,0xe483c,0x1647a,0x24457,0x16521,0x24462,
-0x24455,0x2445c,0x24458,0x24454,0x16477,0x1647e,0x1647c,0x16479,
-0x16523,0x16476,0x2445b,0xe424f,0x1647b,0xe4259,0x16054,0xe4249,
-0x24461,0xe6559,0x24459,0x00000,0xe4253,0xe6557,0xe6558,0xe6556,
-0x2445a,0x00000,0x00000,0x24b67,0xe476f,0x1695b,0xe476e,0xe476c,
-0x24b63,0x24b69,0x24b65,0xe4770,0x1695d,0x24b64,0x24b68,0x24b60,
-0xe4772,0x24b62,0x1695c,0xe476a,0xe476d,0xe476b,0xe4768,0x24b66,
-0x24b61,0xe4767,0x1695e,0xe655b,0x16959,0x00000,0xe655a,0x24b6a,
-0x00000,0x1695a,0x2516f,0x2516c,0x25178,0x25172,0x25174,0x16d5e,
-0x2516e,0x25176,0xe4d2a,0xe4d24,0x25175,0x25173,0xe4d29,0x25179,
-0x16d61,0x25170,0x25177,0xe4d28,0x16d5f,0xe4d25,0xe4d22,0x2516b,
-0x2516d,0x16d60,0x2516a,0x2517a,0xe655c,0x25171,0xe5162,0xe515a,
-0x25836,0x1713b,0xe5160,0xe515c,0x25841,0x2583f,0x17135,0x25835,
-0x25838,0x25839,0x25834,0x1713f,0x17140,0x25833,0x25842,0x2583d,
-0x17139,0x17136,0x2583c,0x2583a,0xe5163,0xe6374,0x1713c,0x2583e,
-0x17137,0xe515e,0x17138,0xe5166,0x2583b,0x1713a,0x25837,0x00000,
-0x25840,0x1713d,0x25843,0x25844,0x1713e,0xe655d,0xe655e,0x17432,
-0x17439,0x25d48,0x25d4e,0xe553c,0x25d4c,0x17435,0x17434,0x17431,
-0x25d4a,0xe553e,0xe5543,0xe5540,0x17437,0x17436,0x17433,0xe5541,
-0x25d4d,0x25d49,0x25d4b,0xe5542,0x17438,0x00000,0x00000,0x00000,
-0x17663,0x26229,0xe582d,0x17660,0x17661,0x2622b,0x17662,0x26228,
-0xe582e,0x26227,0x26576,0x2622a,0xe5a56,0x26577,0x17847,0x26575,
-0xe5a57,0x00000,0x26574,0xe5c59,0x26573,0x17848,0xe655f,0xe5c56,
-0x17977,0xe5c58,0xe5c55,0x26939,0x2693a,0xe5a58,0xe5c53,0xe5c57,
-0xe6561,0x26b6a,0x26b69,0x17a75,0xe5f53,0x26b68,0x26d5a,0x26d5b,
-0xe5f54,0xe6039,0x26f35,0x2703f,0xe6143,0xe6142,0x27126,0x2722c,
-0x17d46,0x27240,0x14557,0x00000,0x14e67,0x14e68,0xe2d69,0x00000,
-0x1523b,0x00000,0xe3d22,0x00000,0x00000,0x1743a,0x14558,0x00000,
-0x14e69,0x15655,0x16525,0x14559,0xe2d6b,0x15b73,0x1695f,0x22142,
-0xe297c,0x22b77,0x23060,0x00000,0x24b6b,0x00000,0x1743b,0x1455a,
-0x14e6a,0x22b78,0x22b79,0x23d6a,0x16056,0x00000,0xe425d,0x24468,
-0xe425c,0xe425b,0x16526,0x24b6c,0x00000,0xe4d2e,0x16d62,0xe4d2d,
-0x17849,0x1455b,0x23d6b,0x1455c,0x00000,0x1484a,0x22262,0x14849,
-0x14b28,0x14b27,0x14b26,0x22460,0xe2664,0xe2a21,0xe2a22,0x14e6b,
-0xe2a23,0x14e6c,0x2277b,0x00000,0x22b7a,0xe2d6d,0x22b7d,0x1523d,
-0x22b7b,0x00000,0x1523c,0x22b7c,0x1523e,0x00000,0x23063,0x23062,
-0x23061,0x15656,0xe3236,0x23722,0x23723,0x15b74,0x23721,0x23724,
-0x16058,0x15b75,0xe3d24,0xe3d23,0x16057,0x23d6f,0x23d6e,0xe3d25,
-0x23d6c,0x23d6d,0x00000,0x23d70,0x2446a,0x24469,0x2446d,0x00000,
-0x2446c,0x2446b,0x16960,0x24b6f,0xe4775,0x24b6e,0x16961,0x24b6d,
-0x2517b,0xe4d2f,0x2517c,0x16d63,0x00000,0x25845,0x25846,0x00000,
-0x00000,0x2657c,0x1784a,0x2657b,0x2657a,0x26578,0x26579,0x17a76,
-0x2693b,0x26d5c,0x27127,0xe617b,0x1455d,0x00000,0x22164,0x14667,
-0x22165,0xe242c,0xe242d,0x00000,0x22263,0x22264,0xe266b,0x00000,
-0x00000,0xe2669,0x22466,0xe2666,0xe2667,0x22462,0xe266a,0x22461,
-0x14e6d,0x22465,0x14b2a,0x22463,0x14b29,0x22467,0x22464,0xe2668,
-0x00000,0x22821,0x22b7e,0x2277d,0x22826,0xe2a26,0x14e6e,0xe2a2a,
-0x14e71,0x22827,0x22823,0xe2a27,0x22824,0x00000,0x2277c,0x14e70,
-0x2277e,0x14e6f,0x22825,0xe2a28,0x22822,0x00000,0x00000,0x22c24,
-0x15240,0x15241,0xe2d75,0x22c27,0x22c21,0xe2d74,0x22c26,0xe2d70,
-0x22c22,0x1523f,0x22c25,0x22c23,0xe2d73,0xe2d71,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x23069,0x23066,0xe3238,0x23068,0x1565b,
-0x1565a,0x15658,0x23065,0x2306a,0x15657,0x15659,0x23067,0x2372c,
-0x23064,0x2306b,0xe3239,0x00000,0x00000,0x00000,0xe3d26,0x23727,
-0x2372b,0x00000,0x2372a,0x23d72,0x23d7d,0x00000,0xe373b,0x2372d,
-0xe373a,0x23728,0x23d71,0x15b79,0x00000,0x00000,0x15b78,0x23726,
-0x23729,0x15b7a,0xe3739,0x15b77,0x15b76,0x23725,0x2372e,0x00000,
-0x00000,0x00000,0x23d74,0x23d7b,0xe3d27,0x1605a,0x23d7a,0x23d77,
-0xe3d2e,0x1605c,0xe3d29,0xe3d2b,0xe3d2a,0x23d79,0xe4261,0xe3d2d,
-0x23d73,0x23d75,0x23d78,0x23d76,0x1605b,0x23d7c,0x16059,0x16527,
-0xe3d28,0x00000,0x24471,0x24470,0x2446e,0x00000,0x1652a,0x16529,
-0x24472,0xe425f,0x2446f,0x24b70,0x16962,0x16528,0xe4262,0xe6562,
-0xe6563,0x24474,0x24473,0xe4d30,0x24b73,0x24b71,0x16d64,0xe4779,
-0x16963,0x24b72,0x2517e,0xe4778,0xe477a,0xe4777,0x00000,0x16d65,
-0x2517d,0x25228,0x25227,0x25225,0x00000,0x25224,0x25221,0x25222,
-0x25223,0x25226,0x25229,0x00000,0x00000,0x2584b,0x25848,0x25849,
-0x17141,0x25847,0x2584d,0x2584c,0x2584a,0x00000,0x25d50,0x25d51,
-0x1743c,0xe5549,0x1743d,0x25d4f,0x00000,0x17665,0x2622c,0x17664,
-0x1784b,0x00000,0x1784c,0x17978,0x2693d,0x2693c,0x26b6b,0x26d5d,
-0x17b66,0x26f37,0x26f36,0x26f38,0x14668,0x22c28,0x1565c,0x15b7b,
-0x2372f,0x14669,0x22166,0x1455e,0xe225a,0xe216b,0x22265,0xe242f,
-0x00000,0x00000,0x2246c,0x2246a,0x2246b,0x22468,0x14b2b,0x22469,
-0xe266e,0x00000,0x00000,0x00000,0xe2a33,0x2282f,0xe2a2d,0x14e74,
-0x2282d,0x22829,0x2282c,0xe2a2c,0x22828,0x14e76,0x2282b,0xe2a2b,
-0x14e73,0x14e72,0xe2a32,0x14e75,0x2282e,0x2282a,0x00000,0xe2a2f,
-0x00000,0x00000,0x15245,0x15248,0x22c30,0x22c2f,0x22c2e,0x15242,
-0x22c37,0x22c2d,0x00000,0x15244,0x23070,0xe2d78,0x22c34,0x22c32,
-0x15247,0xe2d7b,0x22c2a,0x22c35,0xe2d77,0x22c2c,0x22c36,0x22c33,
-0x22c2b,0xe2d7a,0x15243,0x22c38,0x22c29,0x15246,0xe2d7e,0xe2d79,
-0xe2d7c,0x00000,0x23075,0x2306c,0x23077,0xe323e,0x2306f,0x2307a,
-0x2307b,0x2306d,0x23079,0x23076,0x23074,0x23078,0x15662,0xe3240,
-0x15660,0xe3247,0xe323c,0x23072,0xe3246,0x2306e,0xe3241,0x23071,
-0x2307c,0x23073,0x15661,0x22c31,0xe323d,0x1565d,0x1565f,0xe6564,
-0x00000,0x00000,0x00000,0xe373d,0x2373d,0x23732,0x23730,0xe3d38,
-0x23731,0xe323f,0x23738,0xe3740,0x23739,0x23735,0x15c22,0x2373a,
-0x23737,0x23734,0xe373c,0x15b7e,0x23733,0x15b7c,0x15c21,0x23736,
-0x2373e,0x1565e,0x15b7d,0x2373c,0x2373b,0x15c23,0x00000,0x00000,
-0x00000,0x00000,0xe6565,0x00000,0xe3d36,0xe3d3a,0x23e24,0xe3d2f,
-0xe3d3b,0xe3d32,0x23e25,0x16066,0xe3d39,0x23e2b,0xe426d,0xe3d35,
-0x23e2d,0x23e26,0x16060,0x23e2a,0x23e29,0x16061,0x16067,0xe4264,
-0x16068,0x23e2c,0x1605e,0x23e23,0x23e21,0x23e27,0x23d7e,0x16065,
-0x23e22,0x23e28,0x23e2e,0x1605f,0x16064,0x16062,0x16063,0x00000,
-0xe3d33,0xe3d3c,0x1605d,0xe6566,0xe3d37,0xe4268,0xe4275,0x16531,
-0x2447b,0x16530,0x24521,0xe426f,0x24475,0xe4274,0x24522,0xe426e,
-0xe4266,0xe4271,0x24476,0x24477,0xe4273,0x24523,0x2447e,0x2447c,
-0x2447d,0x24479,0x24478,0xe4267,0x24524,0x1652d,0xe426b,0x2447a,
-0xe4270,0x16532,0x1652c,0x16533,0x16534,0xe426a,0x1652f,0x1652e,
-0xe4825,0xe477e,0x24b74,0x16965,0x16964,0xe477c,0xe477d,0x24b79,
-0xe4822,0x16d66,0x16966,0xe4821,0xe477b,0x16968,0x24b7a,0x1652b,
-0x16967,0x24b76,0x24b78,0x24b75,0xe4827,0x24b77,0xe4823,0x00000,
-0x00000,0x25233,0xe4d31,0xe4d3b,0x25232,0x2522f,0x16d69,0x2584e,
-0x16d6a,0x2522e,0xe4d39,0x16d68,0xe4d36,0x25230,0x2522d,0x2522a,
-0x25231,0x2522b,0x2522c,0x16d67,0xe4d35,0xe6568,0x00000,0x00000,
-0x25d55,0x00000,0x25852,0xe4d3a,0x25851,0x25853,0xe516a,0x25d52,
-0x17144,0xe6375,0x2584f,0xe5167,0x17142,0xe516c,0x17146,0x17145,
-0x25850,0x25854,0xe516b,0x17143,0xe6567,0x25d59,0x17440,0x17666,
-0x17441,0x1743e,0x25d56,0x25d54,0xe554f,0x25d57,0xe554b,0x25d5a,
-0x1743f,0x25d58,0x25d53,0xe554d,0xe6569,0x2622f,0x26232,0x26621,
-0x2622d,0xe582f,0x2693e,0x26233,0xe5830,0x1784d,0x26231,0x17667,
-0x2622e,0x26230,0x26234,0x26622,0xe5a5a,0x2657e,0x00000,0xe5a5c,
-0xe5a5d,0xe5a5b,0x1784e,0x2657d,0xe5c5e,0xe5c5c,0xe5c5f,0x17979,
-0xe5c5d,0xe5c60,0x00000,0xe5e3d,0x17a78,0x26d5f,0x17a77,0x26d61,
-0x26d5e,0x26d60,0x17c3c,0x27040,0x1466a,0x22830,0x2307d,0x2307e,
-0x15c24,0x24525,0x17147,0x1784f,0x17b67,0x27041,0x1466b,0x00000,
-0x22831,0x12322,0x00000,0xe2e22,0x22c39,0xe2e21,0x22c3a,0xe2e24,
-0x00000,0x00000,0x00000,0xe3248,0x23121,0x23122,0x15c25,0x15c26,
-0x00000,0xe3d3d,0x00000,0x23e2f,0x00000,0x24528,0x24527,0x24526,
-0x24b7b,0xe4277,0x24b7c,0x24b7d,0x16969,0x00000,0xe4828,0x25235,
-0x25234,0xe4d3d,0xe516d,0x25855,0x17148,0x17149,0xe516e,0x25d5e,
-0x25d5b,0x25d5c,0x25d5d,0x26236,0x26235,0x17668,0x26623,0x26b6c,
-0x1466c,0x00000,0x15249,0xe3744,0x15c27,0x24529,0xe4278,0x1466d,
-0x00000,0x23123,0x15c28,0xe3745,0xe3d3e,0x16069,0x1606a,0x00000,
-0x1466e,0x1466f,0x22266,0x14b2d,0x14b2c,0x1524a,0x22c3b,0x23e30,
-0x14670,0x14671,0x14672,0x14673,0x00000,0x00000,0x00000,0x14b2e,
-0x14b2f,0x2246e,0x2246d,0xe2a37,0x00000,0x14e77,0x22834,0x22832,
-0x22833,0xe2a38,0xe2a35,0x00000,0xe2a36,0x00000,0xe2e27,0x22c3c,
-0x22c3d,0xe2e25,0xe2e28,0x1524e,0x1524c,0xe2e2a,0x1524d,0x1524b,
-0xe2e26,0x00000,0x00000,0x00000,0x15663,0xe324e,0xe324d,0xe3250,
-0xe324f,0x15667,0x15666,0x23124,0x15665,0x15664,0xe3251,0x23125,
-0x00000,0xe3746,0x15c2b,0x23740,0x2373f,0x15c29,0x15c2a,0xe3749,
-0xe3747,0x00000,0x1606c,0x1606b,0x23e32,0xe3d43,0xe3d42,0x23e31,
-0x15c2c,0xe3d44,0x00000,0x00000,0x00000,0x00000,0x16535,0x2452b,
-0x16536,0x2452a,0xe427b,0x00000,0x00000,0x24b7e,0x25236,0x16d6b,
-0x25856,0xe5170,0x00000,0xe5552,0x25d5f,0x00000,0x17851,0x17850,
-0x00000,0xe5c62,0x17b68,0x14674,0x22835,0x00000,0xe3d45,0x15c2d,
-0x24c21,0x1696a,0xe225b,0xe2673,0x2246f,0x22470,0x00000,0x00000,
-0x22836,0x14e79,0x14e7a,0xe2a3a,0x00000,0x14e78,0xe2a3b,0x00000,
-0x00000,0x00000,0x15252,0x15253,0x15250,0x15251,0xe2e2b,0x22c3e,
-0xe2e2f,0x00000,0x22c3f,0x1524f,0x00000,0x00000,0x00000,0x00000,
-0x23126,0xe3257,0x1566b,0x1566c,0xe3255,0x15c30,0x2312c,0x00000,
-0x15671,0x1566f,0x2312d,0x23128,0x1566e,0x1566d,0x15668,0x2312b,
-0x2312a,0x23127,0x15670,0xe3252,0x23129,0x15669,0x00000,0x1566a,
-0x00000,0x00000,0x15c31,0x23744,0x23745,0x15c32,0x23741,0x23743,
-0x23747,0x23746,0x23742,0xe374a,0x15c2e,0x15c2f,0x00000,0x23e3a,
-0x16071,0x16070,0x23e34,0x1606e,0x00000,0x23e37,0x16072,0x23e38,
-0x16073,0x23e35,0x1606d,0x1606f,0x23e39,0xe3d47,0x23e36,0x23e33,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x24538,0xe427c,0x2452d,
-0x16538,0x1653b,0x1653a,0x1653f,0x1653e,0x24539,0x24537,0x24530,
-0x24534,0x24533,0x1653c,0x24536,0x24532,0x2453a,0x24531,0x1653d,
-0x16537,0x16539,0xe427d,0x2452f,0x00000,0x00000,0x00000,0xe482b,
-0x24c23,0x1696e,0x24c27,0x1696d,0x24c24,0x1696c,0xe4829,0x2452e,
-0x24535,0x24c26,0x00000,0x1696f,0x24c28,0x24c25,0x24c22,0x00000,
-0x00000,0x25239,0x2523d,0x2523f,0x2523b,0x2523a,0x25238,0x16d6e,
-0x16d6c,0x16d71,0x16d72,0x2523c,0x16d6f,0x25237,0x16d70,0x1696b,
-0x2523e,0x16d6d,0x00000,0x00000,0xe5171,0x25858,0x00000,0x25857,
-0x2585f,0x25859,0x2585e,0x2585b,0x1714a,0x2585d,0xe5173,0xe5172,
-0x1714b,0x00000,0x1714c,0xe5174,0x2585c,0x2585a,0x00000,0x00000,
-0x00000,0x00000,0x17443,0x25d60,0xe5555,0xe5553,0x17442,0x25d63,
-0x25d61,0x25d62,0x00000,0x00000,0x17444,0x00000,0xe5554,0xe5834,
-0x2623a,0xe5833,0x1766b,0x2623b,0x00000,0x00000,0x17669,0x2623c,
-0x1766a,0x26239,0x2623d,0xe5832,0x26237,0x00000,0x00000,0x17852,
-0x26624,0x17853,0x1797a,0x00000,0x26238,0x1797b,0x00000,0xe5e3f,
-0xe5e3e,0x17a79,0x26b6d,0x00000,0x17b6a,0x26d62,0x17b69,0xe603b,
-0x26f39,0x17c61,0x17c62,0xe656a,0x00000,0x2723a,0xe225c,0xe656b,
-0x15254,0x22c40,0x00000,0x16074,0x16075,0x14675,0x1484b,0x22267,
-0xe2674,0x22471,0x14b30,0xe2676,0x14e7b,0x00000,0x15255,0x15256,
-0x15257,0x23749,0x2312e,0x15672,0x00000,0x00000,0x15c33,0x23748,
-0xe374d,0x00000,0x23e3c,0x16077,0xe3d4c,0x23e3b,0x16076,0xe427e,
-0xe4321,0x2453b,0x16d73,0x25243,0x25240,0x25241,0x25242,0x00000,
-0x00000,0xe5176,0x00000,0xe5556,0x25d64,0xe5557,0x2623e,0x00000,
-0x00000,0xe5a5e,0x26940,0x2693f,0x00000,0x26d63,0x14676,0x22837,
-0x15673,0x00000,0x00000,0xe3d4d,0x16078,0x2453c,0x00000,0xe4830,
-0x24c29,0xe482e,0x16d74,0x25860,0xe656c,0x2623f,0x26941,0x14677,
-0xe2677,0xe2678,0x14e7c,0x1525a,0x22c41,0x1525b,0x15259,0xe2e32,
-0x15258,0x2312f,0x15674,0xe325a,0xe325b,0x15675,0x15676,0x00000,
-0x00000,0x00000,0x15c35,0x2374a,0x15c34,0xe3750,0xe3752,0xe3751,
-0x00000,0xe3d4f,0x23e3d,0x15c36,0x16079,0x2453d,0x16540,0x16541,
-0x00000,0x16970,0xe4831,0x16971,0x16d75,0x1714e,0x25861,0x1714d,
-0x00000,0x25d65,0x17445,0xe5835,0x26240,0x26942,0x14678,0x14b31,
-0x2283a,0x22839,0x14e7d,0x22838,0x14e7e,0x2283b,0x00000,0x22c47,
-0x1525e,0x1525d,0x22c49,0x22c48,0x15262,0xe2e35,0x15261,0xe2e33,
-/* 0x7700 */
-0x00000,0x1525c,0x00000,0x22c43,0x22c44,0x22c45,0xe626c,0x15263,
-0x22c42,0x1525f,0x22c46,0x15260,0x00000,0x00000,0xe3264,0xe325f,
-0x23132,0x23136,0x23134,0x23133,0x00000,0x23137,0xe325e,0x00000,
-0xe3268,0x23138,0x23139,0x23131,0x00000,0x23130,0xe3759,0x15678,
-0x15679,0xe3267,0x2313a,0x23135,0xe3265,0x23753,0xe3755,0x2313b,
-0x1567a,0x15677,0xe325c,0xe3263,0x00000,0x2374d,0x00000,0x2374c,
-0xe3753,0x2374e,0x2374f,0x23751,0x23750,0x23755,0x15c3a,0x15c37,
-0x15c3b,0x2374b,0x15c3c,0x23754,0x15c39,0x23752,0x15c38,0xe3262,
-0xe3757,0x00000,0xe3d56,0xe3d53,0x23e40,0x23e42,0x23e3e,0x23e3f,
-0xe3d51,0xe3d52,0x23e43,0x23e45,0x23e46,0x23e41,0x23e44,0x1607a,
-0x00000,0x00000,0x24541,0xe4327,0x24546,0x2453e,0x24542,0x00000,
-0xe4328,0x24547,0x24543,0x16542,0x1654a,0xe4325,0x16545,0x2453f,
-0x24540,0x16975,0x1654d,0x16546,0xe4326,0x1654b,0x16544,0x24545,
-0x1654c,0x24544,0x16548,0x16543,0x16549,0x24548,0x24c2e,0x24c30,
-0x00000,0xe4839,0x00000,0x00000,0xe4833,0xe4836,0xe4835,0xe4834,
-0xe4838,0x16547,0xe483b,0xe483d,0x24c2b,0x16973,0x24c31,0x16974,
-0x24c2f,0x24c2a,0x24c2d,0x24c32,0x16972,0x24c2c,0x00000,0x16d77,
-0x25247,0x25246,0xe4d44,0x16d7a,0x16d78,0x25244,0x16d76,0x25245,
-0xe4d46,0x16d79,0x00000,0x00000,0x00000,0x25869,0xe517b,0x2586b,
-0xe5179,0x2586a,0x25862,0x25866,0x25865,0x25863,0x17150,0x17151,
-0x1714f,0x25864,0x25867,0x25868,0xe5559,0x17152,0xe5558,0x1744a,
-0x25d6d,0xe555b,0x17447,0x25d67,0x17449,0x1744b,0x00000,0xe555c,
-0x17448,0x25d6c,0x25d68,0x17446,0x25d6b,0x25d66,0x25d6a,0x25d69,
-0xe5836,0xe5838,0x26242,0x1766e,0x1766f,0x1766c,0xe583b,0x1766d,
-0xe583a,0xe5839,0x26241,0x00000,0x26627,0xe5a60,0xe5a5f,0x17854,
-0x00000,0x26625,0x26626,0x00000,0x26943,0x26946,0x26944,0x26945,
-0x26b6e,0xe5e42,0x00000,0x17a7a,0x26f3a,0x27042,0xe6432,0x17c63,
-0x27128,0x27129,0x17d33,0x14679,0x15264,0xe3269,0x23e47,0xe3d57,
-0x24549,0x00000,0x1467a,0x14b32,0x00000,0x14f21,0xe2e36,0x22c4a,
-0x22c4b,0x1567b,0x00000,0x00000,0x23e48,0x1607b,0x1654e,0x1744c,
-0x25d6e,0x26628,0x26947,0x1467b,0xe267b,0xe267c,0x00000,0x22841,
-0x2283c,0x2283e,0x22840,0x2283f,0x2283d,0x14f22,0x00000,0x00000,
-/* 0x7800 */
-0x00000,0x00000,0x15265,0x22c54,0xe2e39,0x22c4f,0x22c4c,0xe2e3b,
-0xe2e3e,0x22c53,0xe2e37,0xe2e3a,0x15267,0x15268,0x22c52,0x22c51,
-0x22c50,0x22c4d,0x22c4e,0x22c55,0x15266,0xe2e3d,0x00000,0x00000,
-0x00000,0xe656d,0x00000,0xe656e,0x00000,0x15721,0xe667c,0x15727,
-0x15726,0x23144,0x2313e,0x2313c,0xe326c,0x15724,0x2375c,0x1567d,
-0x23141,0x23145,0x23147,0x23143,0x2313d,0x15725,0x23142,0x23140,
-0x1567c,0x23148,0x15728,0x23146,0x15722,0x2313f,0xe326d,0x15723,
-0x1567e,0x00000,0x00000,0x00000,0x00000,0xe656f,0x00000,0x00000,
-0x00000,0x00000,0xe3762,0x15c3e,0x00000,0x2375d,0xe3763,0xe375d,
-0x23756,0x23758,0x2375a,0xe375f,0x2375b,0x23759,0x15c3f,0xe3761,
-0x2375e,0xe3760,0x23757,0xe6570,0xe6571,0x00000,0x00000,0x00000,
-0xe6572,0x00000,0x00000,0x00000,0x23e4c,0x1607c,0x23e54,0xe3d5c,
-0x23e49,0x00000,0x23e55,0xe3d59,0x23e4a,0x23e4b,0xe3d5d,0x00000,
-0x23e53,0x23e52,0x23e4f,0x15c3d,0x1607d,0x23e4d,0x23e50,0x1607e,
-0x23e51,0x23e4e,0x00000,0x00000,0x00000,0x00000,0xe3d5a,0x00000,
-0xe4331,0x24554,0xe432d,0x24558,0x16555,0xe432e,0x24c38,0x16558,
-0x24556,0xe4337,0xe4329,0x24553,0x2454e,0x24550,0x24551,0x2454a,
-0xe4335,0x16554,0xe432b,0xe4330,0x16553,0xe4334,0x1654f,0x2454d,
-0xe432a,0x16556,0xe4336,0x16557,0x2454c,0x2454f,0x24557,0x16551,
-0x16552,0x24555,0x2454b,0x00000,0x00000,0x00000,0x24c3a,0x16977,
-0x24c3c,0x24552,0x24c3e,0x1697b,0x24c3f,0x24c3b,0xe483e,0x16978,
-0x24c37,0x1697a,0x24c34,0x24c39,0x24c3d,0x24c36,0xe483f,0xe4845,
-0x16550,0xe4844,0x24c33,0x16979,0x24c35,0x00000,0x00000,0xe6573,
-0xe4840,0x00000,0x16d7d,0x25249,0x16e23,0x00000,0x16e21,0x00000,
-0xe4d4a,0x16976,0xe4d4d,0x25250,0x25251,0x16d7c,0xe4d48,0xe4d4c,
-0x2524f,0x25252,0x16d7e,0x16d7b,0x2524b,0x25248,0x2524d,0x2524a,
-0x16e24,0x2524c,0xe4d4b,0xe4d49,0x2524e,0x16e22,0xe5221,0x00000,
-0xe6574,0x00000,0x17154,0x25872,0xe5224,0x2586c,0x25870,0x25876,
-0x25877,0x25873,0x25874,0x25871,0x00000,0x2586e,0x00000,0x17156,
-0x17153,0x2586d,0x2586f,0xe5222,0x17155,0x25875,0xe6575,0x17450,
-0xe5560,0xe5562,0x25d75,0x25d6f,0x1744f,0x00000,0x00000,0x1744d,
-0xe5561,0x25d77,0x1744e,0x25d72,0x25d73,0x25d70,0x25d78,0x25d74,
-/* 0x7900 */
-0x00000,0x17451,0x25d71,0x00000,0x25d79,0x25d76,0xe5843,0xe583e,
-0xe5840,0x26246,0xe583f,0xe583c,0x26243,0xe5842,0x17670,0x00000,
-0x26247,0x26249,0x26248,0x26244,0x26245,0xe5844,0x00000,0x2662d,
-0xe5a61,0x17855,0xe5a62,0x2662a,0x2662c,0x26629,0x2662e,0x00000,
-0xe5a63,0x2662b,0xe6576,0x26949,0x2694c,0x26948,0x1797c,0x2694a,
-0x2694b,0x2694d,0x1797d,0x17a21,0x1797e,0x26b6f,0xe5e45,0x26b71,
-0xe5e43,0x26b70,0xe5e44,0x00000,0x00000,0x26d64,0x00000,0xe603c,
-0x27043,0x2712a,0x1467c,0x00000,0xe2433,0x22472,0x14f23,0x22843,
-0x14f24,0x14f25,0x22842,0x00000,0x22c5a,0x22c59,0x15269,0x1526c,
-0x1526b,0x1526a,0x22c56,0x22c58,0x22c57,0xe6577,0x00000,0x2314b,
-0x1572a,0x2314f,0x2314e,0x2314d,0x23149,0x15729,0x1572d,0x15730,
-0xe326f,0xe3270,0x15731,0x2314a,0x2314c,0x1572f,0x1572e,0x1572c,
-0x1572b,0x23765,0xe3272,0x23763,0x2375f,0x15c40,0xe3d5e,0x23760,
-0x15c41,0x23761,0x23762,0x23764,0xe3766,0x15c42,0xe3765,0x00000,
-0x23e59,0xe3d5f,0x23e58,0x23e57,0x23e56,0xe3d64,0xe3d62,0x00000,
-0x00000,0x2455c,0x16559,0x00000,0x24559,0x2455b,0xe4338,0x1655a,
-0xe433d,0x1655b,0x2455a,0xe4339,0xe3d63,0x00000,0xe6578,0xe4848,
-0x24c48,0xe4847,0x24c41,0x24c42,0x00000,0x1697e,0x1697c,0x1697d,
-0x24c4a,0x00000,0x24c49,0x24c46,0x24c45,0x24c44,0x24c43,0x24c47,
-0x24c40,0xe6579,0x25253,0x25258,0x25256,0xe4d50,0xe4d51,0xe4d4f,
-0x25255,0x25254,0x25257,0xe657a,0x25878,0xe5226,0x17157,0x17452,
-0x25d7b,0xe5227,0x17453,0x25d7a,0x2624b,0x2624a,0x17671,0xe5845,
-0x2662f,0x17856,0x2694e,0x17b6b,0x26d65,0xe603d,0x27045,0x27044,
-0x22167,0x1526d,0x1526e,0x23766,0xe657b,0x1655d,0x1467d,0x14b35,
-0x14b34,0x14b33,0x00000,0xe2a3e,0xe2a3d,0x22844,0xe2a3f,0xe2a42,
-0x14f27,0x14f26,0xe2a44,0x15271,0xe654c,0x22c5c,0x22c5f,0x22c5d,
-0xe2e42,0x1526f,0x15270,0xe2e40,0xe2e41,0x22c5b,0x22c5e,0xe2e43,
-0x15738,0xe3274,0xe3273,0xe3279,0x23156,0x23158,0x23157,0x15735,
-0x23152,0xe3276,0xe327b,0x15733,0x15732,0xe3277,0x15736,0x15734,
-0xe3278,0x15737,0x23155,0x23150,0x23151,0x23154,0x23153,0x00000,
-0xe327c,0xe3769,0xe3767,0xe376b,0x00000,0xe376a,0x23769,0x2376a,
-0x23768,0xe376c,0x23767,0x15c43,0x00000,0x00000,0x00000,0xe3d65,
-0x16125,0x00000,0x23e5a,0x23e5c,0x23e5e,0x16124,0x00000,0xe3d66,
-0x16122,0xe3d69,0x23e5b,0x16123,0x23e5d,0x16121,0xe3d68,0xe4341,
-0x24566,0x2455d,0x24560,0x24564,0x16561,0x24562,0x00000,0x24561,
-0x2455e,0x2455f,0x1655f,0x24565,0x1655e,0xe4344,0x16563,0x16562,
-0x16560,0x00000,0x24563,0x00000,0x00000,0xe6524,0x24c50,0x00000,
-0x24c4f,0xe484b,0xe484d,0x24c4b,0xe4850,0xe484f,0x16a21,0x24c4e,
-0x24c4d,0x16a22,0xe4852,0x00000,0x00000,0x00000,0x00000,0x16e29,
-0xe4d55,0x2525a,0xe4d56,0x16e2a,0x16e26,0x16e28,0xe4d5a,0x16e25,
-0x16e27,0xe4d53,0xe4d57,0x00000,0x25879,0xe522a,0x1715a,0x2587b,
-0x2587a,0xe5564,0x24c4c,0x1715c,0x1715b,0x17158,0x17159,0xe522c,
-0x00000,0x00000,0x00000,0xe5229,0x25e22,0x00000,0x25d7e,0x17454,
-0x25e21,0x00000,0x25e23,0x25d7d,0x25d7c,0x00000,0x00000,0x2624c,
-0x17674,0x17672,0x17673,0x00000,0xe5a66,0x00000,0xe5a65,0x26630,
-0x26631,0x17858,0xe5a67,0x17857,0x26950,0x26951,0x2694f,0xe5c64,
-0x26d66,0x26d67,0xe6076,0xe6077,0x1467e,0x22268,0x14b36,0x00000,
-0x22845,0x14f29,0x14f28,0x22846,0xe2e44,0xe2e47,0x22c61,0x15272,
-0x22c60,0x15273,0xe2e49,0xe2e48,0x15739,0x2315b,0x23159,0x2315f,
-0x1573a,0x2315a,0x2315e,0x2315c,0x2315d,0x00000,0x00000,0x2376b,
-0x2376d,0xe3772,0x15c44,0xe3771,0x2376c,0x15c45,0x16128,0x16127,
-0x16126,0x23e5f,0xe3770,0x00000,0x00000,0x00000,0x24569,0x16564,
-0x16565,0xe4346,0x24568,0x24567,0xe4347,0x00000,0x00000,0xe657c,
-0x24c51,0x16a24,0x16a23,0x24c52,0x24c53,0x00000,0x16e2c,0x16e2b,
-0xe4d5b,0x25921,0x2525b,0x2525d,0x2525c,0x2587e,0x2587c,0x25922,
-0x2587d,0x00000,0x1715d,0xe522f,0x00000,0xe522e,0x25e24,0x17455,
-0x25e25,0x25e26,0xe5568,0x00000,0x17675,0x17676,0x00000,0x17a22,
-0xe5e49,0xe5e48,0x17c3d,0x14721,0xe267e,0xe2721,0x00000,0xe2a47,
-0xe2e4e,0x22c62,0xe2e4f,0xe2e4d,0xe2e4b,0xe2e4c,0x00000,0x00000,
-0x23160,0x1573b,0xe3323,0xe3326,0xe3327,0xe3324,0x00000,0x15d7e,
-0x15d7d,0xe3773,0xe3d71,0x1612a,0x23e61,0x16129,0x23e60,0xe3d70,
-0x00000,0xe4349,0xe434a,0x2456a,0xe4854,0x16a25,0x24c54,0x16a26,
-0xe4855,0xe5230,0xe5569,0xe556a,0x00000,0xe5849,0x17a23,0x26952,
-0xe5f55,0x1484c,0x14f2a,0x22847,0xe2e51,0x15275,0xe2e50,0x15274,
-0x22c63,0x22c64,0x00000,0x00000,0x23162,0x23164,0x1573c,0x00000,
-0x23166,0x23169,0x23167,0xe332b,0x00000,0xe332a,0x23168,0x23165,
-0x23161,0x1573d,0x2316a,0x23163,0xe332c,0x00000,0xe3778,0xe3779,
-0x23776,0x15c4b,0x23821,0x15c48,0xe3777,0x23778,0x15c4c,0xe377b,
-0x15c46,0xe3776,0x23773,0x23822,0x23774,0x23771,0x15c4a,0x00000,
-0x15c47,0xe632d,0x23777,0x2377a,0x15c49,0x2377b,0x15c4d,0x2377c,
-0x23772,0x23779,0x2377d,0x23775,0x23770,0x2376e,0xe377a,0xe657d,
-0x2377e,0x00000,0x00000,0x2376f,0x00000,0x00000,0x00000,0x00000,
-0x23e68,0xe3d7b,0xe3d78,0xe3d75,0x23e64,0x23e6a,0x1612d,0x23e63,
-0x23e65,0x1612b,0x23e62,0x16132,0x23e66,0x16131,0x23e67,0x16133,
-0x1612e,0x16134,0x1612f,0xe3d79,0x16130,0xe3d72,0x1612c,0xe3d76,
-0x23e69,0xe657e,0x00000,0x00000,0x00000,0x00000,0xe434f,0x00000,
-0x16568,0x24575,0xe434c,0x24578,0x2456c,0x24571,0x2456b,0x1656a,
-0xe4355,0x2456f,0x00000,0xe434d,0xe3d77,0x2456d,0x16569,0xe4354,
-0x24574,0x24573,0x24570,0x24572,0x2456e,0x16a2a,0x24577,0x16566,
-0x24576,0xe4351,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0xe4856,0x24c64,0xe4858,0x16a31,0x24c5f,0xe4860,0x16a30,
-0x24c55,0x00000,0x24c57,0x16a29,0x24c5c,0x24c5b,0x24c5e,0x16a2e,
-0x24c59,0x24c58,0xe485a,0xe485e,0x16a2d,0x16a28,0x24c5a,0x16a2b,
-0x24c60,0x24c62,0x00000,0x24c5d,0x24c56,0x16a2c,0xe4857,0xe485d,
-0x16e34,0x16a27,0x00000,0xe485c,0x24c63,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x25261,0x16e2d,0xe4d5c,0x25263,
-0x00000,0x16e2e,0xe4d65,0xe4d5d,0x16e30,0x25266,0x00000,0x2525e,
-0x16a2f,0x25264,0x00000,0x00000,0x00000,0x00000,0x25260,0xe4d60,
-0x16567,0x16e33,0xe6367,0xe6366,0x16e2f,0x00000,0x16e31,0x16e32,
-0x00000,0x17160,0x25265,0x2525f,0x16e35,0xe4d63,0x25262,0x00000,
-0xe6621,0x00000,0x00000,0x00000,0x2592c,0x25927,0x00000,0x00000,
-0x25931,0x1715e,0x25929,0x17162,0x2592f,0x25926,0x25923,0x25932,
-0x1745b,0x17163,0x2592e,0x25924,0x17161,0x25928,0x17165,0x25925,
-0x2592a,0x17164,0x2592d,0x25930,0xe5233,0xe5234,0x00000,0x00000,
-0x25e38,0x25e39,0x25e29,0x25e30,0x25e2e,0x00000,0xe556d,0x17459,
-0x25e35,0x2592b,0xe556b,0x25e2c,0xe556e,0x25e36,0x17458,0x25e2b,
-0x25e2a,0x25e34,0x25e31,0x25e33,0x00000,0x25e27,0x25e37,0x17456,
-0xe5570,0x25e32,0x25e3b,0x25e2f,0x1745a,0x17457,0x25e2d,0x25e28,
-0x25e3a,0x1715f,0xe5571,0x00000,0x00000,0x00000,0x00000,0x00000,
-0xe556f,0x2624f,0xe5850,0xe584e,0x2624d,0x26253,0x1767a,0x26251,
-0x26250,0x1767c,0x26256,0x1767b,0xe5851,0x26257,0x26254,0x17678,
-0x26255,0x2624e,0x17679,0x17677,0x26635,0x26252,0xe584c,0xe6622,
-0x26258,0x00000,0xe6623,0x26632,0xe5a6f,0xe5a6e,0x00000,0x1785d,
-0x1785b,0x26634,0x00000,0x26636,0x26633,0x1785c,0x17859,0x1785a,
-0x1785e,0x00000,0xe6624,0x17a25,0xe5c66,0x26957,0x00000,0x26956,
-0x26954,0x26953,0x26955,0xe5c65,0x17a24,0x17a26,0xe6625,0x00000,
-0x17a7b,0xe5e4c,0x00000,0x26b73,0x26b72,0x00000,0xe5e4b,0x26d68,
-0xe5f58,0x26d6a,0x26d6c,0x26d6b,0x26d69,0xe5f57,0xe603f,0x17b6d,
-0x17b6c,0x00000,0xe603e,0x17c3f,0x17c3e,0x17c40,0x26f3c,0x26f3b,
-0xe6626,0x2712b,0x27046,0x2712c,0x17d25,0xe6144,0x17d26,0x2715c,
-0x00000,0xe623a,0x17d4b,0x1484d,0xe2a49,0x22848,0xe2a48,0xe2e52,
-0x22c66,0x22c67,0x22c65,0xe2e54,0xe2e53,0x15276,0x00000,0x22c68,
-0x22c69,0x22c6a,0x00000,0xe3331,0x2316b,0x23171,0xe332e,0xe3330,
-0x2316f,0x1573e,0x2316d,0xe3332,0x2316e,0x23170,0xe332d,0x00000,
-0x00000,0x2316c,0x15c4e,0xe377d,0x23823,0x15c50,0x23825,0x15c4f,
-0x23824,0xe377e,0xe3821,0xe383e,0xe3822,0x00000,0x23e6c,0x16135,
-0xe3e21,0x23e6e,0x23e6b,0x23826,0xe3e23,0x16136,0xe3e22,0xe3d7e,
-0x23e6d,0xe6627,0x00000,0x00000,0x00000,0x00000,0xe4358,0x2457b,
-0xe435c,0x1656b,0x24579,0x1656c,0x2457a,0x1656d,0x00000,0xe4862,
-0xe4861,0x16a32,0x24c68,0x24c65,0x24c67,0x16a33,0x16a34,0x24c66,
-0x00000,0x00000,0xe4d6f,0xe4d71,0xe4d6d,0x25267,0xe4d70,0xe4d73,
-0x25268,0xe4d72,0x16e36,0x2526a,0x25269,0xe4d6e,0x12323,0x00000,
-0x25936,0x25937,0x25933,0xe5237,0x25934,0x17166,0x17167,0x25935,
-0x00000,0x17461,0xe5575,0xe5574,0x1745d,0x17462,0x1745e,0x17460,
-0x1745c,0xe5239,0x1745f,0xe5855,0x00000,0x00000,0xe5854,0x1767d,
-0x25e3c,0x00000,0x26638,0x00000,0x26637,0xe6628,0x26958,0x17a27,
-0x17a28,0x26d6e,0x26b74,0xe6169,0x26d6d,0xe6040,0x2712d,0x27172,
-0x1484e,0x00000,0xe2722,0x14b37,0xe2a4b,0x22849,0x14f2b,0xe2a4a,
-0x15279,0x22c6d,0x15277,0x22c6b,0x1527c,0x15278,0x1527d,0x1527b,
-0x22c6c,0x1527a,0x15742,0x15741,0x2317c,0x1574a,0x23175,0x2317b,
-0x15746,0x23174,0x2317a,0x23178,0x15745,0x15747,0x23177,0x15740,
-0x23176,0x1574b,0x15748,0x1574c,0x15749,0x23173,0x23172,0x23179,
-0x15743,0x1573f,0x15744,0x00000,0xe3337,0xe333b,0x00000,0x00000,
-0x23835,0x2382e,0x00000,0x1613b,0x2382d,0xe3829,0x15c54,0x15c5b,
-0x15c58,0x15c5e,0x15c5d,0x15c59,0xe3826,0x23827,0x2382a,0xe3827,
-0x23829,0x15c55,0x2382b,0x23834,0x15c56,0x23828,0x23831,0x23832,
-0x15c57,0x2382f,0x15c5c,0x15c52,0x15c5a,0x2382c,0x15c51,0x23830,
-0xe382e,0xe3824,0x23833,0x00000,0xe382b,0xe3e34,0x23f21,0x23e76,
-0x16138,0x23e7d,0x23e7a,0x23e72,0x23e7b,0x1613a,0x23e73,0xe3e29,
-0x23e6f,0xe3e26,0xe3e2e,0x16573,0x23e78,0xe3e2f,0x16137,0x23e7e,
-0xe3e28,0x1613e,0x16140,0x23e71,0xe3e2c,0x00000,0x1613f,0x23e74,
-0x16139,0x23e7c,0x23e75,0x23e79,0xe3e2a,0x23e77,0x1613c,0x23e70,
-0x16141,0x15c53,0x1613d,0x16142,0xe3e24,0xe3e35,0xe3e33,0x00000,
-0xe4367,0x1656f,0x24624,0x24626,0x24628,0x2462c,0xe3e2b,0x24622,
-0x2457e,0x16571,0x00000,0x24627,0x2462b,0x24623,0x2457d,0xe4366,
-0x2457c,0xe4369,0xe4360,0xe4362,0x24629,0x24621,0x24625,0x16572,
-0xe435e,0x16570,0x2462d,0x1656e,0x2462a,0xe4364,0x24c79,0xe4368,
-0xe436a,0xe4363,0x00000,0x00000,0x16a37,0x24c71,0x16e43,0x24c7b,
-0x16a3a,0x24d21,0x16a40,0x24c6c,0xe4874,0x00000,0x24c7c,0x24c69,
-0xe486d,0x24c7e,0x24c6d,0xe486e,0x16a47,0x16a44,0x24c7d,0x24c77,
-0x16a36,0x16a3e,0x16a3d,0xe4870,0x16a3c,0x16a42,0xe4869,0x24c6a,
-0x16a43,0x24c78,0x16a3f,0x16a35,0x24c7a,0x16a38,0x16a39,0x16a41,
-0x24c6f,0x24c6e,0x24c6b,0x00000,0x24c73,0x24c70,0x24c74,0x16a46,
-0xe4868,0x24d22,0x16a3b,0x24c75,0x24c76,0xe4871,0x24c72,0xe4873,
-0xe6629,0xe486b,0x16a45,0xe662b,0x00000,0x00000,0xe4e22,0x2526f,
-0x16e3b,0x16e44,0x16e40,0x2526c,0xe4d7c,0x16e3d,0x16e41,0x25278,
-0x16e37,0x25270,0xe4d78,0x16e3f,0xe4e24,0xe4e2f,0x25273,0x2526e,
-0x16e3e,0x16e42,0x2526d,0xe4e2e,0x16e3c,0xe4d77,0x25277,0x16e39,
-0x25276,0x25275,0x16e45,0x2503b,0x16e38,0xe4e2b,0x25274,0x2526b,
-0xe4d75,0x16e46,0x25272,0x16e3a,0xe4e28,0xe4e29,0xe4e25,0xe4e2c,
-0xe4e27,0xe4d7e,0xe4d7d,0x25271,0x00000,0x00000,0x00000,0xe662a,
-0x1716a,0x1716f,0x17168,0x25944,0x2593b,0x25947,0x2593f,0x25945,
-0x17170,0x17169,0x25938,0x2593e,0x25948,0x25941,0x25946,0x2593a,
-0x00000,0xe523b,0x25942,0x1716b,0x25940,0x1716e,0x1716d,0x2593c,
-0x2593d,0x25939,0x25943,0x1716c,0x2594a,0x25949,0xe5240,0xe523f,
-0x00000,0x25e47,0x25e43,0x17469,0xe5579,0x25e3d,0x17463,0x17473,
-0x25e49,0x1746b,0x17467,0x25e40,0x1746e,0x17471,0x25e4b,0x17466,
-0x25e42,0x1746f,0x25e4d,0x25e4a,0x25e3e,0x1746a,0x17464,0x17472,
-0x25e45,0x1746d,0x25e3f,0x17468,0x25e4c,0x1746c,0x17465,0x25e46,
-0x17470,0x25e44,0x00000,0x00000,0x25e48,0xe557a,0x00000,0xe5859,
-0x2625a,0x26260,0x17725,0x26263,0x1767e,0x17721,0x2625b,0x26262,
-0x2625d,0x17726,0x17723,0xe585b,0x26259,0xe5858,0x17722,0x2625f,
-0x26261,0x17724,0x2625e,0x2625c,0xe662c,0x00000,0xe585a,0x00000,
-0x26642,0x17862,0x17863,0x1785f,0xe5a72,0x17860,0xe5a74,0x2663e,
-0x2663c,0xe5a75,0x26640,0x17864,0x26641,0x2663a,0x26639,0x2663d,
-0x2663b,0x17861,0x2663f,0x26959,0x17a2b,0x17a2a,0x2695a,0xe5c6c,
-0x2695c,0x2695b,0x17a2c,0x00000,0xe5e53,0xe5e50,0x26b79,0x26b76,
-0x26b77,0xe5e51,0x26b75,0x26b78,0x17a7d,0x26b7a,0xe5e52,0x17a7c,
-0x00000,0x26d6f,0xe5f5a,0x17c41,0x17c43,0x26f3d,0x17c42,0x27047,
-0x2712f,0x27131,0x2712e,0x27130,0x17d39,0x00000,0xe6235,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-/* 0x7f00 */
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x1484f,0x00000,
-0x1527e,0x23052,0x1574d,0xe3831,0x00000,0x15c5f,0x23f22,0x23f23,
-0xe662d,0xe4877,0x00000,0x2594b,0x17474,0x25e4e,0xe557d,0xe585c,
-0x17727,0x00000,0x26644,0x26643,0x17a2d,0x26b7b,0xe5f5b,0x26d70,
-0x17c64,0x22269,0x00000,0x00000,0x14f2c,0x14b38,0x00000,0x00000,
-0x22c6e,0xe2a4e,0x00000,0x23224,0x2317d,0x23223,0x23221,0x1574e,
-0x23222,0x2317e,0xe333c,0x23836,0x00000,0x23f24,0x23f25,0x24630,
-0x24631,0x16575,0x16576,0x2462f,0x24632,0x2462e,0x16574,0xe4878,
-0x16a48,0xe4879,0x16577,0x24d23,0x00000,0x16e47,0x25279,0x16e48,
-0xe4e30,0x17171,0x2594e,0x2594c,0x2594d,0x25e51,0x25e50,0x25e4f,
-0x00000,0x00000,0x00000,0x26645,0xe6422,0x17865,0x26646,0x26d71,
-0x17c65,0x27048,0x14850,0x14f2e,0x14f2d,0x22c70,0x15321,0xe2e5d,
-0x00000,0x22c6f,0x23226,0xe333d,0x1574f,0x23837,0x23225,0xe333f,
-0x00000,0xe333e,0x15c61,0x2383a,0x23838,0x23839,0x15c60,0x00000,
-0x23f27,0x23f28,0x23f26,0xe436e,0x1657a,0x24634,0x24633,0x24635,
-0x16579,0x16578,0x00000,0x00000,0x2527a,0x2527c,0xe4e31,0x16e49,
-0x2527b,0x2594f,0x17172,0x26265,0xe585d,0x26264,0x17866,0x26647,
-0x17868,0x17867,0x2695d,0x26b7c,0x17a7e,0x14851,0x22c71,0x15322,
-0x23229,0x15751,0x23228,0x23227,0xe3342,0x15750,0xe3343,0x23840,
-0x00000,0x23842,0x2383b,0x2383c,0x15c62,0x2383d,0x15c63,0x23841,
-0x2383e,0x2383f,0x15c64,0xe3e37,0x16144,0x16145,0xe3e38,0x23f29,
-0x00000,0x00000,0x00000,0x24636,0x24637,0xe4372,0x24d27,0x16a4b,
-0x16a49,0x16a4a,0x24d24,0x24d25,0x00000,0x24d26,0x25323,0xe4e32,
-0x25324,0x16e4a,0x25321,0x2527e,0x25322,0x2527d,0x17175,0x25950,
-0x17173,0x17174,0x25e53,0x17475,0x25e52,0x26134,0xe557e,0x26266,
-0x26267,0x17728,0xe5861,0x17729,0x17476,0x26648,0x26649,0x2695e,
-0x17a2e,0x14852,0xe667b,0x14853,0x15753,0x14f2f,0x15752,0x22c72,
-0xe3836,0x00000,0xe3344,0x16146,0x14854,0x15324,0x22c73,0x22c74,
-0x15323,0x15325,0x14855,0x00000,0x22c75,0x15755,0x2322a,0x15757,
-0x15754,0x15756,0xe3837,0x23845,0x15c65,0xe3839,0x23844,0x23843,
-0x00000,0x24638,0x00000,0xe4922,0x24d28,0x00000,0x16e4b,0x00000,
-0x17176,0x25952,0x25951,0xe5621,0x25e54,0x00000,0xe5862,0xe5c6f,
-0x26b7d,0x00000,0x00000,0x14856,0x22473,0x2284a,0x15326,0x22c76,
-0x00000,0x2322c,0x00000,0xe3349,0xe3348,0x15758,0x2322b,0x15759,
-0xe3347,0xe662f,0x00000,0x23847,0xe383d,0xe383c,0x15c67,0x23846,
-0x23848,0xe383b,0x15c66,0x00000,0x00000,0x00000,0xe3e3c,0x23f2b,
-0x23f2c,0x23f2a,0x16147,0xe6729,0x00000,0x00000,0x1657b,0xe4373,
-0x1657c,0xe6356,0x16a4d,0xe4923,0x24d2a,0x24d29,0x16a4c,0xe4926,
-0xe3e3b,0xe4925,0x00000,0xe6630,0x25325,0xe4e34,0xe4e36,0x25326,
-0xe4e37,0x00000,0xe4e35,0xe4e38,0x25953,0x00000,0xe5243,0x1747a,
-0x17479,0x17477,0x17478,0x1747b,0xe5622,0x26268,0x1772b,0x1772a,
-0x2664a,0x2695f,0xe5c70,0xe5c71,0xe5c72,0x17b6f,0x17b6e,0x14857,
-0x00000,0x00000,0x22f7d,0x00000,0x1657e,0x16148,0x1657d,0x16a4e,
-0x00000,0x14858,0x22168,0x14859,0x1485a,0xe2435,0xe2436,0x2284b,
-0x22476,0xe2724,0x22477,0x14b3a,0xe2726,0x22474,0x14b39,0xe2725,
-0x14b3c,0x22475,0x14b3e,0x14b3d,0x22478,0x14b3b,0x00000,0xe2723,
-0x00000,0x14f34,0x14f32,0x2284d,0xe2a56,0x14f31,0xe2a5b,0xe2a58,
-0xe2a4f,0x14f36,0x14f38,0x14f35,0xe2a59,0x22850,0x2284c,0x14f39,
-0xe2a52,0x14f33,0x14b3f,0xe2a54,0x14f37,0x2284f,0xe2a57,0x00000,
-0x2284e,0x00000,0x14f30,0xe6631,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x22c7c,0x1532a,0x1532b,0x22c7e,0xe2e66,0x22c78,
-0x22c7b,0x22d26,0x22d24,0xe2e60,0x1532c,0x22d2a,0x1532f,0x22d27,
-0x22c7d,0x22c7a,0xe2e61,0xe2e5e,0x23f2e,0x22d25,0x15327,0x22d28,
-0x22c77,0x22d22,0x15329,0x1532e,0x22d23,0x15332,0x15330,0xe2e65,
-0x22c79,0x1532d,0xe2e64,0x22d21,0x15331,0x15328,0x22d29,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x1575e,0xe334c,0x15767,
-0x1575c,0x1575a,0x2322e,0x15762,0x1575f,0x23230,0xe334a,0xe3352,
-0x15761,0x2322f,0x2322d,0x23232,0x15766,0x15764,0x23f2d,0xe334b,
-0x23233,0x23231,0x1575b,0xe334e,0xe334d,0x1575d,0x15760,0xe334f,
-0x15763,0xe2e63,0x15765,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0xe3e44,0x23852,0x15c69,0xe3849,
-0x23849,0x2384b,0xe3847,0x2384c,0x00000,0x23854,0x23850,0x2384e,
-0x00000,0x23851,0x23855,0x15c6a,0x15c6e,0x2384a,0x00000,0x23853,
-0xe632e,0x15c6c,0xe3841,0x15c6b,0x2384f,0x2384d,0xe3842,0x15c68,
-0x15c6d,0xe3845,0x00000,0x00000,0xe3848,0x00000,0x00000,0x00000,
-0x00000,0x1614e,0x23f36,0xe3e3e,0x00000,0x23f34,0x16150,0x00000,
-0xe3e43,0xe3e45,0xe3e41,0x23f2f,0x24646,0xe3e3d,0x1614f,0x23f33,
-0xe3e40,0xe3e42,0x23f30,0x1614b,0x16151,0x23f35,0x1614d,0x23f32,
-0x16a4f,0x1614c,0x23f31,0x16152,0x1614a,0x16149,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x2463e,0x2463c,0xe437b,0x24642,0xe437e,
-0x2463a,0x24647,0x2463f,0xe4375,0x24639,0x16624,0x1662a,0x24644,
-0x00000,0x2463d,0xe4376,0x16627,0xe4377,0xe4423,0x16625,0x24645,
-0x16622,0x16621,0x24640,0x16626,0x16153,0xe437c,0x24643,0x2463b,
-0x16623,0x16628,0x16629,0x00000,0x00000,0xe4422,0x00000,0x16a54,
-0x16a50,0xe4927,0x16a55,0x24d2d,0xe492a,0x00000,0x24d2c,0x24d2e,
-0x16a52,0x24d2b,0x16a53,0x24d31,0x24d30,0x24d2f,0x00000,0x16a51,
-0x00000,0x00000,0xe4e3b,0xe4e3d,0xe4e39,0x2532a,0xe4e3c,0x2532d,
-0x16e51,0x2532c,0x16e50,0x16e4c,0x16e4d,0x16e4e,0x25329,0x25328,
-0x16e4f,0xe4e3a,0x2532b,0x25327,0x00000,0x00000,0x25955,0x2595f,
-0x17179,0x17178,0xe5249,0x25959,0x2595b,0xe5247,0x25956,0xe5244,
-0x2595a,0x25954,0x2595d,0x17177,0x2595c,0x25958,0x00000,0x2595e,
-0xe5623,0x25957,0x1747e,0x25e55,0x25e5b,0x17524,0x17526,0x17523,
-0x17522,0x00000,0x17521,0x1747d,0x25e56,0x25e59,0x1747c,0x25e5a,
-0xe5624,0x17525,0x25e58,0x00000,0x25e57,0x1772c,0xe5865,0x1772d,
-0x2626b,0x26269,0x2626a,0x00000,0xe5a77,0x2664c,0xe5a78,0x2664b,
-0x17869,0x26961,0x17a2f,0x26960,0x00000,0x26b7e,0x26d72,0x17b70,
-0x27132,0x27133,0x17c44,0x1485b,0x00000,0x14f3a,0x23f37,0x16a56,
-0x17527,0x25e5c,0x1485c,0x00000,0x15769,0x15768,0x23f38,0xe3e47,
-0x00000,0x00000,0x25960,0x1485d,0x15333,0x00000,0xe3e48,0x23f39,
-0x23f3a,0x23f3b,0x16a57,0x1717a,0x1485e,0x00000,0x14f3b,0x22d2b,
-0x1576a,0x23234,0x15c6f,0xe3e49,0x23f3c,0x1662b,0x00000,0x16a58,
-0x1717b,0x17528,0x1772e,0x2664d,0x1485f,0x14f3c,0xe2a5d,0x00000,
-0x1576b,0x23856,0x16154,0xe492b,0x16a59,0x24d32,0x2532e,0x00000,
-0xe524a,0xe5868,0xe5a79,0x14860,0x16155,0x24648,0x16a5a,0x14861,
-0x22851,0x22d2c,0x15334,0x00000,0xe2e68,0x23236,0x00000,0xe3357,
-0x1576e,0xe3358,0x1576c,0x1576d,0x1576f,0xe3355,0x00000,0x23235,
-0x00000,0x00000,0x2385b,0x23858,0x2385a,0x15c70,0x15c72,0x15c71,
-0x23857,0x15c73,0x23859,0x00000,0x23f3d,0x23f3e,0x00000,0x23f3f,
-0x2464b,0xe4426,0x2464c,0x00000,0x2464a,0x2464d,0x00000,0x1662c,
-0xe6634,0x24649,0xe492d,0x16a5b,0xe492e,0x00000,0x25333,0x2532f,
-0x25332,0x25334,0x25331,0x25330,0x00000,0x25961,0x25962,0x25963,
-0x1717c,0x1717d,0x25e5e,0x25e5d,0x25e5f,0x00000,0x2626d,0x2626c,
-0x00000,0x2664f,0xe5a7a,0x26650,0x2664e,0xe5a7b,0x17a30,0x00000,
-0x26962,0x26963,0xe5e55,0x26d73,0x26f3e,0x27049,0x14862,0x14b40,
-0x00000,0x17529,0x14863,0x00000,0x2385c,0x23f40,0xe5a7c,0x17c6c,
-0x2226a,0x00000,0x00000,0xe2438,0x2226b,0x2226d,0x14864,0x2226e,
-0x2226c,0x00000,0x00000,0x22522,0x22523,0x2247b,0xe2728,0x00000,
-0x00000,0x00000,0x22521,0x14b42,0xe2729,0x14b43,0x2247c,0x2247a,
-0x22479,0x2247d,0x14b41,0x2247e,0x22d2d,0xe272b,0x00000,0x00000,
-0x22856,0x14f3f,0x22855,0x22857,0xe2a60,0x14f3e,0x2285c,0x14f42,
-0x22852,0x22860,0x22866,0x14f49,0x22863,0x14f46,0xe2a6b,0x22859,
-0x2285f,0x22861,0xe2a66,0x22854,0x14f45,0x14f40,0x2285a,0x14f47,
-0x14f4a,0x14f44,0xe2a6c,0x14f3d,0x2285e,0x22858,0x22865,0x14f4c,
-0x14f48,0x14f43,0x2285d,0x15770,0x2285b,0x14f41,0x14f4b,0x00000,
-0x22853,0x00000,0x22862,0x22864,0xe2a5e,0x00000,0x00000,0x00000,
-0x00000,0xe2a68,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0xe2e76,0x15345,0x1533f,0x15347,0x15344,0x22d34,0x22d37,0x15340,
-0xe2e6a,0x22d2e,0x00000,0x15339,0x15343,0xe2e6b,0x15346,0x15348,
-0x22d43,0x22d3a,0xe2e78,0x15338,0x22d42,0x1533c,0x1533a,0x15335,
-0x22d32,0xe2e72,0x22d41,0x22d36,0x22d39,0x22d46,0xe2e74,0x15349,
-0x22d40,0x15341,0x22d3b,0x22d45,0x22d38,0x22d3c,0x22d3f,0xe2e69,
-0xe2e6e,0x22d30,0x22d44,0x22d3e,0xe2e6f,0xe2e7a,0x22d2f,0x00000,
-0x22d33,0x15342,0x1533d,0x15336,0x1533b,0x15337,0x1534a,0x22d31,
-0x23247,0x1533e,0x00000,0xe2e79,0x22d3d,0x22942,0xe2e77,0x00000,
-0xe6635,0x00000,0xe6637,0x00000,0x00000,0x00000,0x2324a,0x1577e,
-0xe3362,0x2323a,0x00000,0x23245,0x23241,0xe384d,0x23254,0xe3359,
-0x2324c,0xe335f,0x23242,0xe385b,0x2324b,0x2323c,0x23240,0x23257,
-0x15823,0x2324f,0x23246,0x15771,0x23255,0x23238,0x00000,0x2324e,
-0x00000,0x15822,0x1577b,0x23237,0x15779,0x15778,0x1577d,0x2324d,
-0x15775,0x1577c,0x22d35,0x23f41,0x23248,0x00000,0xe2a5f,0x2323e,
-0x15821,0x2323f,0x23243,0x15824,0x23239,0x23251,0xe3e57,0x23250,
-0x23258,0x15777,0x15774,0x23256,0x23252,0x23249,0x23244,0x1577a,
-0x15776,0x2323b,0x15772,0x23253,0x15773,0x00000,0x2323d,0xe335a,
-0xe3363,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0xe6636,0xe2d33,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0xe384e,0xe3851,0x23862,0x23864,0x23869,0x2387d,0x15d23,
-0x15c77,0xe3854,0x23861,0x15d24,0x15d25,0x2386c,0x23873,0x23879,
-0xe3850,0x23866,0x00000,0x2386d,0xe384f,0xe385d,0x15d26,0x2387b,
-0x23876,0x15d21,0x15c7d,0x23872,0x2386e,0x23860,0x15c74,0x23865,
-0x2385d,0xe3855,0x15c7c,0x15c7e,0x2386a,0x23867,0x15c79,0x23877,
-0x15c76,0x23868,0x23f6a,0x23870,0xe385e,0x2386f,0x15c75,0xe3857,
-0x15d22,0xe3852,0x15c78,0x2385e,0x23863,0x23874,0x2387a,0x15d27,
-0x2385f,0x2386b,0x23871,0x15c7b,0x00000,0xe3858,0x2387c,0x23875,
-0x23878,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0xe385f,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x15c7a,0x00000,0x23f51,
-0x23f45,0x1615d,0x23f62,0x23f6b,0x23f6e,0x1615b,0x23f4d,0x23f66,
-0x23f4e,0x23f5c,0x16168,0x23f58,0x16165,0xe3e5e,0x23f59,0x23f42,
-0x00000,0x23f67,0xe3e4f,0xe3e59,0x1616e,0x23f64,0x23f5a,0x23f70,
-0x23f55,0x2466d,0xe3e4d,0x23f73,0x1616c,0x23f53,0x23f5f,0x1616f,
-0x1615a,0x23f57,0x23f71,0x23f50,0x23f49,0x23f54,0xe3e5f,0x23f48,
-0x23f46,0x16156,0x23f68,0x23f4f,0x23f6c,0xe3e4b,0x23f6d,0x1615e,
-0x16163,0x1615f,0x16167,0x23f63,0x16160,0x23f5b,0x23f4b,0x00000,
-0x16158,0x23f43,0x23f65,0x23f6f,0x23f4a,0x16166,0x23f74,0x23f56,
-0xe3e52,0x23f52,0xe3e5c,0x16157,0x1616b,0xe3e5a,0x23f61,0x1616d,
-0xe3e50,0x23f5d,0x16162,0x1615c,0x16164,0x16159,0x1616a,0x23f5e,
-0x23f4c,0x23f60,0x23f47,0x23f69,0xe3e58,0x00000,0xe3e5d,0xe3e56,
-0xe3e4e,0x00000,0x00000,0x23f72,0x00000,0x00000,0xe6639,0xe3e5b,
-0x00000,0xe6638,0x00000,0x23f44,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x2466c,0xe442d,0x24724,0x1655c,0x24671,0xe4431,0x2466f,
-0x2465a,0x16630,0x2466a,0x2467e,0x24666,0x16638,0x2467d,0x24664,
-0x16169,0x24674,0x24665,0x2467b,0x16637,0x1662f,0xe443a,0x2464f,
-0x24657,0xe4435,0x24670,0x24668,0x24723,0x2466b,0x1663d,0x2467c,
-0xe442c,0x16634,0xe443e,0x2466e,0x24676,0x2465b,0x24675,0xe4427,
-0x24728,0x24656,0x24677,0xe4433,0x24726,0xe443f,0x24650,0x16161,
-0xe4440,0x2465e,0x2465d,0x16636,0xe4432,0x24661,0x24663,0x24672,
-0x24725,0x16639,0xe4438,0x1663a,0xe4430,0x24655,0x16632,0x24659,
-0x24721,0x1663b,0x00000,0x16633,0x16635,0x1663c,0x24727,0x24678,
-0x24673,0xe443c,0xe442f,0x24660,0x2465f,0x16631,0x24651,0x1662e,
-0x24669,0x24652,0x24667,0xe442e,0x00000,0x2465c,0x24722,0xe442a,
-0xe4439,0x00000,0x1662d,0xe443b,0xe4428,0x00000,0x24658,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x24654,0x2467a,0x24653,
-0x16a68,0x24d5a,0xe4935,0xe4944,0x24d49,0xe4933,0xe4938,0x24d33,
-0x24d51,0x16a60,0x24d42,0x24d4c,0x16a63,0x24d45,0x16a61,0x24d36,
-0x24d54,0x24d35,0x24d48,0xe493c,0x24d34,0xe4939,0x00000,0x24d46,
-0x24d4f,0x24d4d,0x24d41,0x24d3c,0x24d3a,0xe4942,0x24d3b,0x24d4e,
-0x24d59,0x24d43,0x16a62,0xe493b,0x24d3e,0xe493a,0x24d52,0xe4941,
-0x16a65,0x24d3d,0x24d37,0x24d47,0x16a69,0xe4932,0x00000,0x16a5d,
-0x16a66,0x24d3f,0x24d39,0xe4936,0x16a5f,0x24679,0x16a5e,0x24d4a,
-0xe4436,0x16a5c,0x16a6b,0x16a64,0x24d4b,0x24d40,0x24d38,0x24d53,
-0x24d44,0x16a6a,0x24d57,0x16a67,0x24d56,0xe493f,0x24d50,0x24d55,
-0xe493e,0x00000,0xe4943,0x24d58,0x00000,0x00000,0xe663b,0x00000,
-0x00000,0xe663c,0xe663a,0x00000,0xe493d,0x00000,0x00000,0x2535c,
-0x2535d,0x25350,0x2534f,0x2534b,0x16e5d,0xe4e4f,0x16e55,0x2535f,
-0x2535e,0x2464e,0x25348,0x2534c,0x25346,0xe4e44,0x25359,0x2534a,
-0xe4e42,0x25360,0x25343,0x25341,0x2534d,0x25357,0x25352,0x16e5f,
-0x25338,0xe4e40,0x25356,0xe4e4c,0xe4e46,0xe4e54,0x16e60,0x24662,
-0x25344,0x2533b,0x2533e,0x25364,0x25345,0x2533c,0x2533a,0x25337,
-0x00000,0x16e59,0x2534e,0x16e58,0x16e5c,0x25349,0x25351,0x16e52,
-0x25361,0x25365,0x16e54,0xe4e4b,0x25340,0x25354,0x25358,0x2533d,
-0x25362,0x16e5b,0x00000,0x16e5a,0x25335,0x16e5e,0x2535b,0x2533f,
-0x25353,0x25339,0x25347,0x25342,0x16e56,0x16e57,0x25355,0x25366,
-0x25363,0x2535a,0x00000,0xe4e4d,0xe4e4e,0xe4e52,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x25336,0x00000,0x16e53,0x25974,0xe525a,
-0x2596b,0x2596e,0xe5252,0x17225,0x25970,0x25965,0x2596c,0x25972,
-0x17222,0x17226,0x1717e,0xe5259,0xe5250,0x25967,0x25977,0x00000,
-0x00000,0x25971,0x00000,0x25968,0x25a22,0x2597a,0x25964,0x25e72,
-0x2596a,0x17221,0xe5258,0x25975,0xe5254,0x25a21,0x17229,0xe5256,
-0x2597c,0x25969,0x2596f,0x25973,0x2596d,0x25a23,0x2597e,0x2597b,
-0x17223,0x17224,0x17228,0x25966,0x25a24,0x17227,0x25978,0xe524f,
-0xe5255,0x25976,0x00000,0xe663d,0x00000,0x25979,0x25f21,0x25e6c,
-0x25e71,0x25e7e,0x25e70,0x25e68,0x25e6d,0x00000,0x1752c,0xe562b,
-0x25e61,0x25e79,0x25e7b,0x25e60,0x1752b,0x25e7d,0x25e75,0x17532,
-0x25e7c,0x25e6e,0x17534,0x25e66,0x2597d,0x25e76,0x25e73,0x25e62,
-0x25f23,0x1752e,0xe5628,0xe5629,0x1752f,0x25e64,0x25e74,0xe562d,
-0x25f22,0x25e77,0x25e6a,0x17531,0x1752d,0x25e78,0x25e6b,0x25f24,
-0x25e65,0x25e6f,0x25e7a,0x25e67,0x25e69,0x00000,0x17535,0x25e63,
-0x17533,0x17730,0x1752a,0xe562c,0xe5630,0x00000,0x00000,0x17530,
-0x17734,0x2627d,0xe586c,0x26273,0x2626e,0x26274,0x2627e,0x26324,
-0x26323,0x17736,0x17735,0xe586e,0x00000,0x26275,0x26325,0x26278,
-0x26270,0xe586f,0x26272,0x26271,0x26277,0x2627c,0x2626f,0x26276,
-0x2627b,0x17733,0x00000,0x26279,0xe586b,0x17731,0x2627a,0x1772f,
-0x17732,0x26660,0x26321,0x00000,0xe663e,0x1786d,0xe5a7e,0x26658,
-0x2665c,0x26654,0x26657,0xe5a7d,0x2665f,0x1786b,0x26664,0x2665d,
-0x00000,0x26655,0x26665,0x2665e,0x1786e,0x1786f,0x26662,0xe5b22,
-0x26656,0x1786a,0x1786c,0x26651,0x26659,0x26653,0xe5c7b,0x26663,
-0x26661,0x26652,0x2665a,0x00000,0xe5b25,0xe663f,0x2696a,0x17870,
-0x2665b,0x17a32,0x17a34,0x17a31,0xe5c76,0x2696f,0x26967,0x26965,
-0x26969,0x26966,0xe5c78,0xe5c7c,0x2696b,0x2696d,0x17a35,0x17a37,
-0xe5d22,0x2696c,0x17a38,0x17a36,0x2696e,0xe5c7e,0x00000,0xe5d23,
-0xe5c77,0x17a33,0x00000,0xe5d21,0x00000,0xe5e5b,0xe5e5a,0x17b21,
-0x26c21,0x26c27,0x17b23,0x26968,0x26c26,0xe5e5c,0x26c2d,0x26c24,
-0x26c2b,0x26c2a,0x26964,0x26c25,0x26322,0x26c2e,0x26c23,0x26c28,
-0xe5e58,0x26c2c,0x26c22,0xe5e56,0x26d77,0x17b22,0x26c29,0xe5e57,
-0x00000,0x26f43,0x26d78,0x26d76,0x26d74,0x26d75,0x26d79,0xe6640,
-0x17c45,0x26f41,0x26f3f,0x26f44,0x26f42,0xe6043,0x26f45,0x17c46,
-0x26f40,0xe602f,0xe6146,0x2704a,0x00000,0xe6641,0x27134,0x27135,
-0x27136,0xe6147,0xe617c,0x27235,0x2722d,0x2226f,0x14f4d,0x00000,
-0x1534b,0x00000,0x2325a,0x23259,0x15825,0x15d28,0x23921,0xe3863,
-0xe3860,0x2387e,0xe3861,0x16170,0x1663f,0xe3e61,0x1663e,0x16640,
-0x00000,0x24d5b,0x25367,0x25a25,0x25a27,0x25a26,0x00000,0x17536,
-0x25f25,0x26326,0x27173,0x14865,0xe272d,0x22869,0x2286a,0x22868,
-0x22867,0x14f4e,0xe6642,0x22d4a,0x22d48,0xe2f23,0xe2e7c,0x22d47,
-0xe2e7e,0x1534c,0x1534e,0x1534d,0x22d49,0xe2f24,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0xe3369,0x23266,0x23263,0x23261,
-0x00000,0xe336c,0x15826,0x23264,0x1582b,0x2325e,0x2326d,0xe336f,
-0x2326f,0x2325f,0xe336e,0x15828,0x23270,0x2326b,0x2325d,0x23262,
-0x2326c,0x23268,0x23265,0xe336b,0x1582d,0x2326e,0x23260,0xe336a,
-0xe3370,0x23269,0x2325b,0x1582c,0x15829,0x23267,0xe336d,0x2326a,
-0x2325c,0x1582a,0x15827,0x00000,0x00000,0x00000,0xe3866,0x15d32,
-0x23928,0x15d31,0xe3864,0x2392b,0x2392e,0x15d2e,0x15d2c,0x23923,
-0x2392c,0x2392a,0x23927,0x2392f,0x23930,0x23932,0x23933,0x23922,
-0x15d2b,0x23925,0x23924,0x23931,0x15d2d,0x23926,0x15d2f,0x15d2a,
-0x23929,0x15d33,0x00000,0x15d30,0x2392d,0x00000,0x00000,0x00000,
-0x16177,0x24025,0x00000,0x23f78,0x16174,0xe3e62,0x2472e,0x24023,
-0x23f75,0x16172,0x23f7a,0x16175,0x23f7e,0x23f7c,0x16178,0x16171,
-0x00000,0xe3e63,0x23f76,0x23f79,0x16176,0x00000,0x23f77,0x00000,
-0x24024,0x24022,0x23f7b,0x23f7d,0x24021,0x16173,0xe3e68,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x2472f,0x24735,0x2472b,
-0x24731,0x16641,0x2472d,0x16647,0xe4444,0xe4445,0x16646,0xe4449,
-0x16645,0x24734,0x16648,0x16649,0x2472a,0x24737,0x1664a,0x16644,
-0x16643,0x24733,0x1664b,0x24729,0x2472c,0x24736,0x24732,0x00000,
-0x00000,0x24d7b,0x24d70,0x16642,0x00000,0xe4446,0xe4448,0x00000,
-0x16a72,0x24d64,0x24d79,0x24d65,0x16a6d,0xe494f,0x24d62,0x00000,
-0x24d6b,0x24d63,0x16a6f,0x24d5d,0x24d78,0x16a70,0x24d75,0x24d76,
-0x24d5e,0x16a75,0x24d6d,0xe494a,0x24d67,0x24d6e,0x24d61,0x00000,
-0x24d7a,0x24d72,0x24d6c,0x24d5c,0x16a71,0x24d73,0xe4945,0x16a74,
-0x24d77,0xe494c,0x24d71,0x16a6e,0x24d6f,0xe4949,0x24d69,0x16a6c,
-0x24d60,0x24d68,0x24d74,0x24d66,0x00000,0xe494e,0x24d6a,0xe494b,
-0x00000,0x00000,0xe6643,0x00000,0x16e6a,0x24730,0x25379,0x25424,
-0x25378,0x25374,0x25371,0x16e6b,0x2536f,0x16a73,0x25368,0x16e69,
-0x2536e,0x16e68,0x25373,0x25370,0x25422,0x2537b,0x25375,0x2537a,
-0x16e64,0x25372,0x25427,0x25369,0x2536a,0x25423,0x16e65,0x25428,
-0x16e67,0x25429,0x25377,0x24d5f,0x2537d,0x25376,0x25421,0x2537c,
-0x00000,0xe4e5d,0x00000,0x2536d,0x16e62,0x25426,0x16e63,0x2536b,
-0x16e66,0x25a32,0x2537e,0x25425,0x00000,0xe4e59,0x00000,0x00000,
-0x00000,0x25a2f,0x16e61,0x1722a,0x25a39,0x25a35,0x00000,0x25a33,
-0x25a2e,0x25a3d,0xe525b,0xe525d,0x00000,0x1722e,0xe525f,0x25a2a,
-0x25a36,0x25a37,0x25a2d,0x25a2c,0x25a3a,0x00000,0x25a30,0x25a2b,
-0x25a31,0xe5262,0x25a3c,0x25a29,0x25a3b,0x25a38,0x1722c,0x1722b,
-0x00000,0xe525e,0x1722d,0x25a34,0x25a28,0xe6645,0x00000,0x00000,
-0x00000,0xe6644,0x25f27,0x1753c,0x25f2b,0x25f28,0x25f2f,0x25f35,
-0x25f2a,0xe563a,0x25f3e,0x17539,0x25f38,0x25f2d,0x25f39,0x25f34,
-0x25f3b,0x25f2c,0x1753e,0x1753d,0x25f2e,0x25f3c,0x25f26,0x25f3a,
-0x17537,0xe5639,0x25f32,0x25f31,0x25f36,0x25f29,0x1753b,0xe563b,
-0x1753f,0x25f30,0x25f37,0x17540,0x25f33,0xe5636,0xe5634,0x00000,
-0x00000,0x17538,0x1753a,0x26333,0x26331,0xe5b28,0xe5876,0x26337,
-0x26335,0x26338,0xe5878,0x2632a,0x26332,0x2633c,0x25f3d,0x2632e,
-0x1773a,0x2536c,0x26329,0x26336,0x26330,0x2632d,0x26328,0x26327,
-0x2633b,0xe5873,0x2632c,0x2632b,0x17738,0x26334,0xe5874,0x17737,
-0xe5875,0x00000,0x17739,0x2632f,0x2633a,0xe6646,0x26669,0x2666a,
-0xe5b2c,0x17874,0x26667,0x17871,0x2666f,0xe5b27,0x17875,0x26671,
-0x26666,0x26339,0x26673,0x26668,0x00000,0x17872,0x2666e,0xe5b29,
-0x26670,0x2666b,0x26672,0x2666d,0x2666c,0x17873,0xe5877,0xe5b2b,
-0x26971,0x26972,0xe5d25,0x26974,0x17a39,0x17a3a,0x26975,0x26973,
-0xe5d24,0x26970,0xe5e5d,0x26c31,0x26c34,0x26c30,0x00000,0x17b27,
-0x26c32,0x17b26,0x17b25,0x17b24,0x26c33,0x26d7e,0x26d7c,0xe5f5f,
-0x26d7b,0x26c2f,0x26d7d,0x26c35,0x26d7a,0xe6045,0x26f48,0x26f26,
-0x26f46,0x17c47,0x26f47,0x26f49,0xe6647,0x2704d,0x17c66,0x2704c,
-0x2704b,0x17c67,0x00000,0x17d27,0x2715d,0x27175,0x27174,0x27176,
-0x14866,0x22d4b,0xe2f26,0x23271,0x23272,0xe386a,0xe3e6a,0xe3e69,
-0x24026,0x00000,0x26c36,0x2704e,0x14867,0x1534f,0x22d4c,0xe3371,
-0xe6648,0x00000,0x23934,0x15d34,0x00000,0x24028,0x24027,0x16179,
-0xe444d,0x1664c,0x2542a,0x16e6c,0xe4e5f,0x16e6d,0xe5263,0xe5264,
-0x00000,0x1722f,0x17c68,0x14868,0x00000,0x00000,0xe2f27,0x22d4d,
-0x14f50,0x22d4f,0x22d4e,0x15350,0x00000,0x23273,0xe3374,0x2327a,
-0x1582e,0x23278,0x23276,0xe3377,0x2327d,0x23274,0x23275,0x1582f,
-0xe3372,0x15833,0xe3373,0xe3375,0x2327e,0x15832,0x2327c,0x23279,
-0x23277,0x15830,0x15831,0x2327b,0xe3376,0x00000,0x00000,0xe6649,
-0x15d36,0x23935,0xe3872,0x15d3b,0x23945,0x15d3a,0x23947,0xe386e,
-0xe3874,0x2393b,0x15d38,0x23946,0xe386c,0x23936,0x15d39,0x23942,
-0x2393e,0x23940,0x2393a,0x23941,0xe386b,0x00000,0x15d35,0x2393d,
-0xe3873,0x2393c,0x23938,0xe386d,0x23943,0xe386f,0xe3871,0x2393f,
-0x23937,0xe3870,0x23939,0x15d37,0x23944,0x00000,0x00000,0x00000,
-0x00000,0x1617c,0x24033,0x00000,0xe3e70,0xe3e72,0x2402f,0x24031,
-0x2402c,0x2402b,0x24029,0xe3e6d,0x24030,0x24032,0x2402e,0xe3e6f,
-0x2402d,0x1617a,0x1617b,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x24035,0x16654,0x24739,0x2473f,0x2473a,0x2473b,0xe444e,
-0x24740,0x00000,0x16656,0x00000,0x1664e,0x16655,0x24738,0x2402a,
-0x16651,0x1664f,0x2473e,0x2473d,0x16650,0x16652,0x2473c,0x1664d,
-0xe444f,0x16653,0x00000,0x00000,0x00000,0x00000,0xe4e60,0x24d7d,
-0x16a7c,0xe4959,0xe4952,0x24e2a,0x24e29,0xe4957,0x24e24,0x16a7e,
-0x24e28,0x24d7e,0x24e21,0x16a76,0x16a78,0xe4954,0x24e26,0x24d7c,
-0x16a7a,0x16a79,0x24e22,0x24e27,0x24e25,0x16a7b,0x24e23,0xe4951,
-0xe4956,0x24034,0x16a77,0xe4958,0x00000,0x2542b,0x25432,0x16e6f,
-0x00000,0x25436,0x16e73,0x2542e,0x2542c,0x00000,0x25435,0xe4e61,
-0x16e6e,0x25434,0x16e70,0x16e71,0x2542d,0x16e72,0x25433,0x2542f,
-0x25430,0x25431,0x16a7d,0xe4e62,0x00000,0x00000,0x25a3e,0x25a4a,
-0x00000,0x17234,0x25a45,0x25a47,0xe5265,0x17232,0x25a3f,0x25a43,
-0x00000,0x25a46,0x17230,0x17233,0x25a49,0x25a41,0x25a42,0x25a48,
-0x25a40,0x25a44,0x17231,0x25f40,0x00000,0x25f3f,0x17542,0x25f45,
-0x17544,0xe5640,0x00000,0x17541,0x25f41,0x17545,0x25f42,0xe563f,
-0xe563d,0x25f43,0x25f46,0xe5642,0x17543,0x00000,0x26341,0x00000,
-0xe5879,0x26344,0xe587a,0x2633e,0x26340,0xe587c,0xe587b,0x2633f,
-0x26342,0x26343,0x25f44,0x2633d,0xe664a,0x00000,0x17878,0x26677,
-0x2667a,0x2667c,0x26675,0x26676,0x26679,0x2667b,0x17879,0x17877,
-0x17876,0x26678,0x26674,0x26976,0x17a3b,0xe5d29,0x26977,0xe5d28,
-0x00000,0x26c38,0x17b28,0x26c3a,0x17b29,0x26c37,0x26c39,0x17b72,
-0x00000,0x26e21,0x17b71,0x26f4c,0x26f4b,0x00000,0x26f4a,0x00000,
-0xe6149,0x27137,0x27138,0x2713a,0x27139,0xe617d,0x22270,0x14869,
-0x00000,0x15351,0x23948,0x1617d,0xe664b,0x24741,0x1773b,0xe5b2f,
-0x2667d,0xe6046,0xe614a,0x14b44,0xe2f29,0x00000,0x00000,0x15d3d,
-0x00000,0xe3876,0xe3875,0x15d3c,0xe3877,0x24036,0x1617e,0x24038,
-0x24037,0x00000,0xe3e74,0x24742,0x16657,0x24e2b,0x24e2e,0x24e2d,
-0x00000,0x24e2c,0x25437,0x25439,0x25438,0xe4e65,0x17236,0xe5266,
-0x00000,0xe4e64,0x17235,0xe5646,0x17546,0x25f47,0x25f49,0x25f48,
-0xe587e,0xe587d,0x1773c,0xe5921,0x00000,0xe5b31,0x26721,0x2667e,
-0x00000,0x26978,0x17a3c,0xe5d2a,0xe5e61,0x17b2a,0x26e23,0x26e22,
-0x17d28,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x14b45,0x22d50,0x15352,0x2394b,0x23949,0x00000,
-0x00000,0x2394a,0x2403a,0x2403b,0x24749,0x24039,0x00000,0x24743,
-0x24747,0x24746,0x24748,0x16658,0x24745,0x24744,0x2474a,0xe4454,
-0x24e31,0x24e2f,0xe495c,0x24e30,0x2543c,0x2543a,0xe4e66,0x00000,
-0x2543b,0x25a4b,0x25f4a,0x25f4b,0x1773d,0xe5b32,0x26722,0x26979,
-0x17a3d,0x00000,0x26c3b,0x26e24,0x17b73,0x00000,0x26f4d,0x2713b,
-0x14b46,0x00000,0x15354,0x15355,0x22d51,0xe2f2a,0xe2f2c,0x22d52,
-0x15353,0x00000,0x15839,0xe337b,0x15837,0xe337a,0x15836,0x1583d,
-0x15835,0x1583e,0x23321,0x1583b,0x00000,0x15838,0x1583c,0x1583a,
-0x15834,0xe337c,0x00000,0x15d45,0xe387e,0x15d3f,0x2394f,0x15d44,
-0xe3923,0xe3929,0x15d46,0x15d40,0x00000,0x15d41,0xe3879,0x2394d,
-0xe387b,0xe3925,0x15d3e,0xe3922,0x2394e,0x15d43,0xe6330,0x00000,
-0x2394c,0x15d42,0xe387a,0x00000,0x1622b,0xe3e7c,0x1622d,0x00000,
-0xe3e7d,0x2403e,0x1622c,0x16221,0x16225,0xe3f24,0x1666b,0x2474f,
-0x24040,0x16226,0xe3e7e,0xe3e75,0x24043,0x24044,0x1622a,0x00000,
-0x24046,0xe3f21,0x24048,0xe3f23,0x24049,0x2403d,0x2403c,0x2404a,
-0x16229,0x24047,0x24045,0x00000,0x16227,0x16223,0x1622e,0x24041,
-0x24042,0x2403f,0xe3e78,0x16228,0x00000,0xe3f22,0x16224,0x00000,
-0x16222,0x2474e,0x16666,0x16661,0xe4460,0xe4459,0x1665c,0xe4463,
-0x1666c,0x1665d,0xe4455,0x16659,0x16668,0x16665,0x16667,0xe4458,
-0x1665e,0x16663,0x1665a,0x1665b,0x24756,0x24753,0x2474b,0x24750,
-0xe445b,0x16669,0x24757,0x1666a,0x16660,0xe445c,0xe4461,0x2474d,
-0xe4456,0x24755,0x24751,0x24754,0x24752,0x16664,0x2474c,0x1665f,
-0xe445d,0x00000,0x00000,0x24e34,0x16b22,0x16b25,0xe495f,0x24e36,
-0xe4964,0x16b2d,0x24e35,0x16b27,0xe4963,0x16e78,0x24e37,0x00000,
-0x16b2c,0x24e33,0x16b2e,0xe495e,0xe4962,0xe496b,0x16b23,0xe4968,
-0x16662,0x16b26,0xe4960,0x16b24,0x16b28,0x16b2a,0x16b21,0x16b2f,
-0x16b2b,0xe4965,0x16b29,0x24e32,0xe4966,0x00000,0x00000,0xe4e74,
-0x16f21,0xe4e67,0x16e7b,0xe4e72,0xe4e70,0xe4e6e,0x16f24,0xe4e6c,
-0x2543f,0x16f25,0x2544b,0x25444,0x16e74,0x2544c,0x25446,0x16e7e,
-0x25447,0xe4e73,0x16e7d,0x2544a,0x16e77,0x25448,0x2543e,0x16e76,
-0x25a56,0x16e7c,0xe4e75,0x16e79,0xe4e69,0x16f23,0xe4e6a,0x2543d,
-0xe4e76,0x25441,0x16e75,0x25440,0x25442,0x25443,0x16f22,0x25445,
-0x25449,0x2544d,0x00000,0x16f26,0x1723c,0x25a51,0x25a57,0x25a54,
-0x25a4c,0x25a58,0x25a4d,0xe526a,0x25a53,0xe526b,0x17237,0x1723d,
-0x25a59,0xe4e6f,0xe5267,0x17239,0xe526e,0x17243,0x1723e,0x25a5b,
-0x25a55,0x1723a,0x25a4e,0x17244,0x25a4f,0x25a50,0x17245,0x17242,
-0x16e7a,0xe5269,0x17238,0x25a5c,0x17246,0xe5268,0x1723f,0x25a5a,
-0x1723b,0x17240,0x17241,0xe664c,0x1754e,0x25f50,0x25f59,0x25f56,
-0x25f58,0xe5649,0x1754b,0x25f51,0xe564a,0x25f57,0x17547,0x25f53,
-0x1754f,0x25f4f,0x25f54,0x25f5b,0x25a52,0x25f55,0x25f4e,0x17548,
-0x25f4d,0x17549,0x25f5c,0x1754a,0x25f5a,0x1754d,0x25f4c,0xe5648,
-0x1754c,0x00000,0x25f52,0x26347,0x26355,0x26350,0x26352,0x26346,
-0x1773e,0xe592a,0x26345,0x17741,0x17740,0xe5926,0x26354,0x2634c,
-0x26349,0x2634f,0xe5924,0x26348,0xe5928,0x2634a,0x26353,0x26351,
-0xe5923,0x1773f,0x26358,0x26356,0x2634d,0x26357,0x2634e,0xe5b34,
-0x26726,0x1787a,0x2672d,0xe5b35,0x00000,0x26c3e,0x17923,0x2634b,
-0x26724,0x1787d,0x26725,0x2672a,0xe5b36,0xe5d33,0x17921,0x17922,
-0x26723,0x2672c,0x2672e,0x26727,0x26729,0x2672b,0x26728,0x2672f,
-0x1787c,0x17924,0x1787e,0x00000,0x1787b,0x2697c,0x00000,0x17a42,
-0x2697a,0xe5d30,0xe5d2c,0x2697e,0xe5d32,0x26a21,0x17a40,0x26a22,
-0x2697d,0xe5d2b,0x2697b,0x17a43,0x17a3f,0x26a23,0xe5d2e,0x17a41,
-0x17a3e,0xe5c6d,0x00000,0xe642d,0x17b2b,0xe5e62,0x00000,0x17b2c,
-0x26c3d,0x26c3c,0x26c3f,0x26c40,0xe5e63,0x17b2d,0x26e25,0x26e2a,
-0x17b74,0xe5f61,0x26e27,0xe5f62,0x26e26,0x26e29,0x26e28,0xe6048,
-0x26f51,0x00000,0x17c48,0x26f50,0x26f4e,0xe6047,0x26f4f,0x00000,
-0xe6049,0xe607b,0x17c6a,0x17c69,0x2704f,0x27050,0x17c6b,0xe614b,
-0x2713c,0x2713d,0x17d34,0xe616b,0x17d3a,0xe617e,0x27177,0x27236,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-/* 0x8c00 */
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x14b47,
-0x00000,0x23950,0xe392a,0x23951,0x24758,0x24e38,0x2544e,0x17551,
-0xe564d,0x17550,0x26359,0x26730,0xe5f64,0x26f52,0x14b48,0x23322,
-0x1583f,0x15d47,0x2475a,0x24759,0x16f27,0x2544f,0x16f28,0x25f5d,
-0x17742,0xe5d34,0xe664d,0xe6221,0x17d43,0x14b49,0x2286b,0x23323,
-0xe392d,0x00000,0x15d48,0xe392c,0x23952,0x23953,0xe3f2a,0x2404b,
-0xe3f29,0x1622f,0x1666d,0xe4464,0x2475c,0x2475b,0x2475d,0xe496d,
-0x24e39,0x24e3a,0x16b30,0x17247,0x16f29,0x17248,0x00000,0x25f61,
-0x25f5e,0x25f60,0x25f5f,0x17552,0xe592b,0x2635a,0x26732,0x26731,
-0x22524,0x15841,0x15840,0x23324,0xe392e,0x23954,0xe3f2c,0xe3f2b,
-0x2404d,0x2404c,0x16230,0xe3f2d,0x2475f,0x24760,0x2475e,0xe634a,
-0xe4465,0x1666f,0x1666e,0x00000,0x16b32,0x16b31,0xe4e7a,0x25450,
-0x25a5f,0x25a5d,0x25a5e,0x17249,0x25f63,0x25f62,0xe564f,0x2635d,
-0x2635c,0x2635b,0x26733,0xe614d,0x27178,0x14b4a,0x15356,0xe2f2e,
-0x15357,0x15842,0x15843,0x23326,0x23325,0x23955,0xe3930,0x15d4e,
-0x15d4c,0x15d49,0x15d4d,0x15d4b,0x15d4a,0xe3932,0xe3931,0x16231,
-0x24050,0xe3f2f,0x16674,0x16233,0x16238,0x24052,0x1623a,0x16239,
-0x1623c,0x24051,0x2404e,0x16236,0x16232,0x16234,0x2404f,0x1623b,
-0x16237,0x16235,0x16676,0x16675,0x16673,0x16677,0x00000,0x16671,
-0x16672,0xe4469,0x16670,0x00000,0x24761,0xe4467,0x00000,0x24e3c,
-0xe4970,0x16b34,0x16b35,0x16b33,0xe4972,0x24e3b,0xe4971,0x24e3d,
-0xe664e,0x25453,0x25455,0xe4e7e,0x16f32,0x25456,0x16f2b,0x25452,
-0x16f2a,0x16f34,0x16f30,0x16f31,0x16f2d,0x25451,0x16f2c,0x25457,
-0x25454,0xe4e7d,0x16f33,0xe4f22,0x16f2e,0x16f2f,0x25a61,0xe5275,
-0x25a63,0x25a62,0xe5273,0x25a64,0x1724a,0x25a60,0xe5651,0xe5652,
-0x17556,0x25f64,0x17553,0x17557,0x17555,0x17554,0x2635e,0x00000,
-0x26361,0x00000,0x26360,0xe592e,0x2635f,0x17743,0x26734,0x26735,
-0x17925,0x26736,0x17926,0xe5b38,0xe664f,0x17a45,0xe6428,0x17a44,
-0x26c41,0xe5e65,0xe5e66,0x17b2e,0x26c42,0x26e2b,0x17b75,0x17b76,
-0xe6650,0x26f53,0xe604a,0x17c6d,0xe614e,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x14b4b,0xe3933,0x15d50,0x15d4f,
-0x24762,0x24763,0x00000,0x16b36,0x25a65,0x16f35,0x25a66,0x25f65,
-0x14b4c,0xe243a,0x22d53,0x15359,0x15358,0x00000,0x23327,0x15844,
-0x23328,0x23958,0xe3939,0x23957,0xe3937,0x23956,0xe3935,0xe3938,
-0x24054,0x1623f,0xe3f39,0xe3f34,0x24053,0x1623e,0xe3f37,0xe3f30,
-0xe3f33,0x24055,0x1623d,0xe3f38,0x24765,0x24768,0x24766,0x24767,
-0x2476b,0x24764,0x2476c,0x24769,0x2476a,0x16b38,0x24e3e,0xe4975,
-0xe4973,0x16b37,0xe4974,0x2545b,0x25459,0xe4f26,0x00000,0x16f36,
-0x25458,0x2545a,0xe4f25,0x16f37,0xe4f23,0x25a67,0xe5277,0x25a68,
-0x17558,0xe5931,0x26738,0x2673a,0x26737,0x26739,0x26a24,0x26c43,
-0xe6651,0x00000,0x2715e,0x14b4d,0x1535a,0x23329,0x2332b,0x2332a,
-0x00000,0x2395b,0x15d52,0xe393e,0x23959,0xe393a,0x15d51,0x2395c,
-0xe393d,0x2395d,0x2395a,0x00000,0x00000,0x24061,0x16247,0x24059,
-0x2405f,0xe3f3f,0xe3f3a,0x16242,0x16245,0x24058,0x16240,0x2405c,
-0x24772,0x16244,0xe3f3b,0x24057,0xe3f3e,0x2405d,0x2405a,0x24060,
-0x24056,0x2405e,0x16243,0x16246,0x2405b,0x16241,0x00000,0x16679,
-0x2476e,0x16678,0x24775,0x24774,0x16721,0x00000,0x16722,0x24776,
-0x1667a,0x24773,0x1667e,0x24778,0x2476f,0xe446b,0x24771,0x1667b,
-0x2476d,0x24770,0x24777,0x1667c,0x24779,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x1667d,0x00000,0x16b39,0x24e43,0x24e49,0x24e41,
-0x24e4a,0xe497b,0x24e40,0x24e45,0x24e4b,0x24e48,0x24e47,0x24e46,
-0xe497a,0x24e3f,0x24e44,0xe4979,0x00000,0x24e42,0x00000,0x16f3c,
-0x16f39,0x25464,0x25469,0x2546b,0x25468,0x25461,0x25463,0x2546d,
-0x2546a,0x25465,0x2546e,0x25462,0x2546c,0x16f3a,0x16f40,0x16f3e,
-0x2545c,0x16f3f,0x16f3b,0x2545d,0x2545f,0x2545e,0x25466,0x25467,
-0xe4f2c,0x16f3d,0xe4f2b,0x16f38,0x00000,0x00000,0x25460,0x00000,
-0x25a72,0x1724c,0xe527e,0x25a69,0x1724d,0x17250,0x25a6e,0x00000,
-0x25a6b,0x1724f,0x00000,0xe527b,0x25a6f,0x25a70,0x25a6a,0x25a73,
-0x25a6c,0x25a71,0x1724e,0xe527c,0x1724b,0x25a6d,0xe5654,0x25f6b,
-0x1755b,0x17559,0x1755c,0x1755a,0x25f6a,0x25f67,0x25f66,0xe5655,
-0x25f69,0x00000,0x00000,0x25f68,0x2636f,0x17749,0x26366,0x26365,
-0xe5932,0x17744,0x2636b,0x2636a,0x26362,0x2636d,0x26367,0x17748,
-0x26364,0x2636c,0x26363,0x17745,0x17747,0x26368,0x17746,0x26369,
-0xe5b3a,0x2636e,0x2673e,0xe5b39,0x1792b,0x2673b,0x00000,0x2673f,
-0xe5b3b,0x00000,0x17928,0x2673d,0x1792d,0xe5b3c,0x1792a,0xe5b3d,
-0x2673c,0x00000,0x1792c,0x26740,0x17927,0x00000,0x00000,0x00000,
-0x00000,0x17a47,0x17a49,0xe5d37,0x26a27,0x17a48,0x26a25,0x17929,
-0x26a26,0x17a46,0x17b2f,0x17b31,0x26c45,0x17b30,0x26c44,0x00000,
-0x26e30,0x17b77,0x26e2f,0x17b78,0x26e2d,0x26e2c,0x26e31,0x26e32,
-0x26f54,0xe604b,0x26e2e,0x00000,0x00000,0x27054,0x27051,0x27052,
-0x27053,0x17d29,0xe6150,0x27140,0x2713f,0x2713e,0x2715f,0xe616c,
-0x2722e,0x27179,0x17d3b,0x14b4e,0x15845,0xe393f,0x00000,0xe3940,
-0xe3f40,0xe4473,0x16723,0xe497d,0xe497c,0x00000,0xe4f30,0xe4f32,
-0xe4f2f,0xe4f31,0x16f41,0x00000,0xe6652,0x25a74,0x00000,0xe5935,
-0x1774a,0xe5936,0x26741,0xe5b3f,0x00000,0x00000,0xe5d38,0x00000,
-0x00000,0x2717a,0x14b4f,0x14f51,0x1535c,0x1535b,0x00000,0x15848,
-0x00000,0x2332c,0x15846,0x2332d,0x15847,0xe6653,0xe3941,0x23962,
-0x2395e,0xe3947,0x00000,0x15d53,0x23961,0x23960,0x2395f,0x15d54,
-0x23963,0x23964,0x00000,0x00000,0xe3f45,0x24068,0x24066,0x2406a,
-0x2406b,0x24071,0xe3f47,0x2406d,0x2406f,0x00000,0x24067,0x24062,
-0x00000,0x2406e,0xe3f44,0xe3f46,0x24070,0x24069,0x2406c,0x24063,
-0x16249,0x24065,0x24064,0x16248,0x1624a,0xe3f49,0x16726,0x2477b,
-0x2477d,0x2477c,0x24823,0x16724,0xe4476,0x2477e,0x2477a,0x24821,
-0x24822,0x16725,0x16727,0x24824,0x00000,0x24e4f,0x24e4e,0x00000,
-0x24e4c,0x24e4d,0x16b3b,0x16b3d,0x16b3a,0x16b3c,0x25475,0x25476,
-0x25471,0xe4f36,0x25472,0x16f43,0x16f48,0x16f42,0x16f49,0x16f44,
-0x25473,0x00000,0xe4f33,0x25474,0x25470,0x16f4a,0x16f46,0xe4f35,
-0x00000,0x16f45,0x16f47,0xe4f34,0x2546f,0xe5324,0x25a76,0x17252,
-0xe5322,0xe5321,0x25a78,0x17254,0x25a7b,0x25a77,0x25a75,0x25a7a,
-0x17253,0x25a79,0x00000,0x17251,0xe5325,0xe5659,0x1755e,0x17561,
-0x25f6d,0xe565a,0x1755f,0x25f6c,0x1755d,0x17560,0x26370,0x26371,
-0x26372,0x1774b,0xe5937,0x26373,0x00000,0x1774c,0x1792f,0x26744,
-0x26745,0x26743,0x26742,0x26746,0x1792e,0x26a2b,0x26a29,0x26a2a,
-0x26a2c,0x26a28,0x26a2d,0x26c47,0xe5e67,0x26c48,0x26c46,0x17b32,
-0x26e33,0x17b79,0x26e34,0x26f56,0x26f55,0xe6222,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x14b50,0x1624b,0xe3f4b,0xe4477,0x16728,
-0xe4478,0xe4a21,0xe4a22,0x16b3e,0xe4f37,0xe5327,0x17256,0xe5326,
-0x17255,0x00000,0xe6654,0x00000,0xe5938,0x17930,0x17a29,0x17b33,
-0x14b51,0x15849,0x16729,0xe4f39,0x26747,0xe272f,0x00000,0x00000,
-0x00000,0xe243b,0x00000,0x00000,0x00000,0x00000,0xe2730,0x22526,
-0x00000,0xe2733,0x14b52,0x00000,0x14b55,0x14b54,0x14b53,0xe2731,
-0x00000,0x22525,0xe2a72,0x2286d,0xe2a70,0x2286f,0x14f52,0xe2a74,
-0x00000,0x14f54,0x2286c,0x2286e,0x14f53,0x22871,0x22870,0x22872,
-0xe2a73,0xe2a71,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x22d57,0x22d55,0x1535f,0x22d54,0x15364,0x15361,0x1535e,0xe2f31,
-0x15365,0xe2f32,0x15360,0x15363,0x00000,0x15362,0x22d56,0xe2f33,
-0x1535d,0xe2f30,0x00000,0x00000,0x1584f,0x2332f,0x23335,0x1584c,
-0x15853,0xe3425,0x1584e,0x23332,0x23334,0x15851,0x2332e,0x23331,
-0x1584d,0x1584a,0x23330,0x15850,0x23333,0x15852,0x1584b,0x00000,
-0xe3427,0xe3426,0x00000,0x23966,0x23969,0x15d56,0xe394b,0x15d60,
-0x15d5c,0x23967,0xe394a,0xe394e,0x15d64,0x15d5d,0x15d62,0x15d58,
-0x00000,0x15d55,0x15d57,0x15d63,0x23968,0x15d5b,0x15d5e,0x15d5a,
-0x15d5f,0x2396a,0x15d61,0x15d59,0x23965,0xe394c,0x00000,0x00000,
-0xe3f4f,0xe3f50,0xe3f4d,0xe3f4c,0xe3f51,0x24072,0x1624c,0x24074,
-0xe3f55,0x1624e,0x16250,0x00000,0x24073,0x1624d,0x16251,0xe3f56,
-0x1624f,0x00000,0xe3f54,0xe3f57,0x1672f,0x24829,0x16737,0x24826,
-0xe447d,0x16738,0x1672d,0xe4479,0x24827,0xe447c,0xe447a,0x16732,
-0xe447b,0x24828,0x1672b,0x1672a,0xe447e,0x16735,0x16734,0x16733,
-0x16731,0x16736,0x24825,0x1672c,0x1672e,0x16730,0x00000,0x00000,
-0x16b40,0x16b43,0xe4a24,0x16b47,0x16b41,0x16b46,0x16b44,0xe4a27,
-0x16b3f,0xe4a26,0x16b45,0x16b42,0x00000,0x00000,0x00000,0x2547a,
-0x16f4d,0x16f4b,0xe4f3c,0x2547b,0x00000,0x16f4e,0x16f4c,0x25479,
-0x25478,0xe4f3b,0x1725a,0x25477,0x17258,0x17257,0x25a7c,0x16f4f,
-0x17259,0x25a7d,0x1725c,0x25a7e,0x1725b,0x17563,0x25f6f,0x17562,
-0x17567,0x17565,0x17566,0x1774e,0x17564,0x25f6e,0x25b21,0x1774d,
-0x1774f,0xe593a,0x17931,0x17932,0x00000,0x26a2e,0x00000,0x17c4a,
-0x17c49,0x14b57,0xe225e,0xe225d,0x22275,0x15854,0xe243c,0x22272,
-0x22273,0x22271,0xe243d,0x22274,0xe6655,0x00000,0x2252a,0x22527,
-0x2252c,0x22528,0x14b58,0x14b5b,0xe2735,0x22529,0x14b5a,0x2252b,
-0xe2739,0xe2734,0x14b59,0xe3951,0x00000,0xe2a77,0x00000,0x22875,
-0x22877,0x14f57,0x22873,0x22876,0x22874,0x14f55,0x14f58,0xe2a75,
-0x14f56,0xe2a78,0x00000,0x00000,0xe2f35,0x22d59,0x22d5d,0x22d5a,
-0xe2f38,0x15368,0xe2f34,0x15369,0xe2f3e,0x22d5c,0xe2f37,0x22d5e,
-0x22d60,0xe2f3c,0x15366,0x22d5f,0x00000,0xe2f3b,0x15367,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x23971,0x22d5b,0x23336,0x2333f,
-0x2333d,0x23338,0x23339,0x2333e,0x23340,0x15856,0xe3429,0x2333b,
-0x23337,0x15855,0x15857,0x2333a,0x23341,0x2333c,0x00000,0x00000,
-0x15d65,0x23974,0x2396c,0x23972,0x23973,0x15d66,0xe394f,0x2396b,
-0x2396d,0x22d58,0x2396f,0x23970,0x2396e,0x16253,0xe636c,0xe3952,
-0x00000,0x2407b,0x25b22,0x2407c,0x24079,0x15d67,0x16255,0x24078,
-0x2407e,0x2407d,0x16252,0x24123,0x24077,0x24122,0x24075,0x24121,
-0x2407a,0x16254,0xe3f59,0x24830,0xe4523,0x2482b,0x24831,0x2482c,
-0x2482a,0x2482d,0x16739,0xe4524,0x2482f,0xe4525,0x2482e,0x1673a,
-0x16b49,0x16b48,0x24e56,0x24e59,0x24e51,0x24e55,0x16b4a,0x24e54,
-0x24e52,0x24e58,0x24e53,0x24e50,0x24e57,0xe4a2a,0x25523,0x16f52,
-0x26374,0x2547e,0x25521,0x2547d,0x24076,0x16f51,0x25524,0x2547c,
-0x16f50,0x16f53,0x25522,0x25b23,0x1725d,0x25b24,0x25b25,0xe532b,
-0x25f70,0x17568,0x26375,0x26376,0xe593c,0xe593b,0x26377,0x26749,
-0x26748,0x26a30,0x00000,0x26a2f,0x26c4a,0x26c4b,0x26c49,0x26e35,
-0x17b7a,0x14b5c,0x1536b,0x1536a,0x1585a,0x15859,0x23343,0x23344,
-0x23342,0xe342a,0x15858,0x23978,0xe3955,0x23979,0x23975,0x15d68,
-0x23976,0xe3954,0x23977,0x00000,0xe6657,0x00000,0x00000,0x24126,
-0x24128,0x24124,0x24127,0x16256,0x24125,0x16257,0x00000,0xe4528,
-0x24279,0x1673d,0x1673c,0xe4527,0x1673b,0x00000,0x24832,0x24833,
-0x00000,0x00000,0x24e5b,0x24e5d,0x16b4e,0x16b4b,0xe4a2c,0x16b4d,
-0x16b4c,0x24e5c,0x24e5a,0xe4a2b,0xe4a2d,0x00000,0x00000,0x00000,
-0x2552b,0x25528,0x25529,0x16f57,0x2552a,0x25525,0x25526,0x16f54,
-0xe4f3f,0x16f55,0x25527,0x16f56,0xe4f40,0x25b29,0xe532d,0x25b2a,
-0x25b27,0x25b28,0x1725e,0x25b26,0x00000,0xe532c,0xe532f,0x00000,
-0x00000,0x25f74,0x25f71,0x25f73,0x1756b,0x25f77,0x1756a,0x25f75,
-0x25f78,0x25f76,0x25f72,0x17569,0x00000,0x26379,0x00000,0x2637a,
-0x26378,0xe593d,0x2637c,0x17750,0x17751,0x2674b,0x17934,0x2637b,
-0x2674a,0x17933,0x26a33,0x26a34,0x17a4a,0x26a32,0x00000,0x26a31,
-0x00000,0x26c4c,0x17b34,0xe5e68,0x26f57,0x27056,0x27055,0xe607e,
-0x17c6e,0x17d2a,0x27057,0x27160,0xe616d,0x17d3c,0x14b5d,0x14f59,
-0x00000,0x1673e,0x00000,0x17a4b,0x14b5e,0x1536c,0x15d69,0x16258,
-0x17752,0x14f5a,0x00000,0x22d62,0x22d61,0x23345,0xe3430,0x1585d,
-0x1585b,0x1585f,0x23347,0xe342d,0x1585e,0x1585c,0xe342f,0xe342e,
-0xe3431,0x00000,0x23346,0x15d6c,0x23a21,0xe3958,0x15d6b,0x15d6d,
-0x23a26,0x15d6f,0x23a23,0x23a24,0x2397a,0x15d6e,0x23a27,0x00000,
-0xe3957,0x2397c,0xe3956,0x2397d,0x2397b,0x15d6a,0xe3959,0x23a25,
-0x2397e,0x23a22,0x00000,0x00000,0x00000,0x24134,0xe3f5d,0x24133,
-0x24131,0x24129,0x24138,0x2412c,0x24136,0x2413d,0x24135,0x16260,
-0xe3f66,0x1625c,0x2412a,0xe3f60,0x24130,0x1625e,0xe3f68,0x2412f,
-0x1625f,0x16261,0x24132,0xe3f69,0x16259,0x1625a,0x2413e,0x2413c,
-0xe3f62,0x2413b,0x2412d,0xe3f65,0x24139,0x00000,0x1625d,0x00000,
-0xe3f5e,0xe6659,0xe3f63,0x1625b,0x2413a,0x2412b,0x2412e,0x24137,
-0x00000,0x00000,0x00000,0xe6658,0x00000,0x24f22,0x2483d,0xe452e,
-0x24836,0x24849,0x24852,0x24839,0x16749,0xe452b,0x24846,0x1673f,
-0x16741,0x1674d,0x24837,0xe4537,0xe452f,0x16742,0x16744,0x1674e,
-0x16743,0xe4539,0x00000,0x00000,0xe4538,0x1674c,0x2483f,0x00000,
-0x24834,0x1674a,0x2483e,0x16746,0x24850,0x1674b,0x2484e,0x24842,
-0x2484c,0x16748,0x24835,0x2484f,0x2484a,0xe452a,0x24851,0x16740,
-0x00000,0xe452d,0x1674f,0x16745,0xe4531,0xe4529,0x2483b,0xe4534,
-0x24843,0x24847,0xe4533,0x2484b,0x16747,0x2483a,0x24838,0x24844,
-0x00000,0x00000,0xe4532,0xe4535,0x24841,0x24840,0xe4536,0x24845,
-0x24848,0x00000,0x2484d,0xe665a,0x00000,0x00000,0x24e60,0x00000,
-0x16b4f,0x24e6a,0x24e62,0x16b55,0x16b59,0x24e73,0x24e7b,0x24e6c,
-0x16b51,0xe4a34,0x24e70,0x2483c,0xe4a35,0x16b52,0x24e77,0x24e7c,
-0x24e74,0xe4a2f,0x24e76,0x24f21,0x24e78,0x24e66,0x24e6f,0xe4530,
-0xe4a38,0x16b5a,0xe4a33,0x16b56,0x24e64,0x24e71,0x16b54,0x24e6b,
-0x16b53,0x24e79,0x24e68,0x24e61,0x16b57,0x24e7e,0xe4a39,0x00000,
-0x24e63,0x24e75,0x24e72,0x24e6d,0x24e5f,0x24e5e,0x24e67,0x24e7a,
-0x16b58,0x24e7d,0x24e65,0x24e69,0x16b50,0xe4a32,0xe4a37,0x00000,
-0xe672a,0xe4a31,0x16f63,0x16f5e,0x2554d,0x25549,0x25531,0x16f5a,
-0xe4f42,0xe4f50,0x00000,0x16f59,0x16f5f,0x00000,0xe4f43,0xe4f41,
-0x2552f,0x16f5d,0x2553b,0x2552d,0x2552e,0x16f58,0x2554c,0x16f61,
-0x2553e,0x25543,0x2553d,0x25b3c,0x25539,0x25541,0x2553f,0x25532,
-0x2552c,0x25547,0x16f60,0x25548,0xe4f48,0x25542,0xe4f49,0x25537,
-0x25535,0x25530,0xe4f4b,0xe4f4e,0xe4f44,0x25538,0x25545,0x25534,
-0x25544,0x2554a,0xe4f51,0x00000,0x16f5c,0xe4f45,0x25540,0x25546,
-0x2553c,0x25536,0x16f5b,0xe4f52,0x00000,0xe4f4c,0x24e6e,0x2553a,
-0x16f62,0x25533,0x00000,0xe4f4d,0xe665b,0xe665c,0xe4a30,0x25b41,
-0x17261,0x25b40,0x25b3e,0x25b50,0x17265,0xe5335,0x25b4d,0x25b45,
-0x25b4f,0x25b37,0x25b43,0xe533d,0x17267,0xe533e,0x25b2f,0xe5338,
-0x25b2d,0x25b4e,0xe5332,0x25b4c,0x25b4b,0x25b3b,0x25b3a,0x25b30,
-0x17269,0x00000,0x25b36,0x25b3f,0x25b4a,0x1726c,0x25b51,0xe5336,
-0x17573,0x1726e,0x17268,0x25b34,0xe5337,0x25b3d,0x25b2c,0x25b2e,
-0x1725f,0x1726b,0x17264,0x25b35,0x25b44,0x2554b,0x1726a,0x25b2b,
-0x1756e,0x25b46,0x25b49,0x17266,0xe533b,0x25b39,0x1726d,0x17263,
-0xe533c,0xe5339,0xe533a,0x17262,0x25b42,0x25b48,0x17260,0x00000,
-0x25b32,0x25b47,0x00000,0x00000,0x25b33,0x00000,0x00000,0xe665d,
-0x00000,0x00000,0xe665e,0x00000,0x00000,0xe5331,0x25b38,0x25f7e,
-0xe5665,0x26025,0x17570,0x17572,0x2602b,0x1756c,0x26039,0x26031,
-0x26026,0x26027,0x26030,0xe5666,0x17579,0x2602f,0x25f7d,0x2602e,
-0x26022,0x2603a,0x17578,0x17576,0x26023,0xe565d,0x26036,0xe5667,
-0x26028,0x26035,0xe5664,0x26037,0x25f7c,0x17571,0xe565b,0x26038,
-0xe5668,0xe565e,0x2602c,0xe566b,0x17575,0x26029,0xe5661,0x00000,
-0x17577,0x26032,0xe5662,0xe5663,0xe565f,0x1756f,0x26024,0x26033,
-0xe565c,0x2602d,0x25b31,0x26034,0x26021,0xe5660,0x17574,0xe566a,
-0x2642f,0x00000,0x1756d,0x25f7a,0x00000,0x00000,0xe665f,0x00000,
-0x2642c,0x26425,0x17754,0xe5943,0x2637e,0x26430,0x26427,0x2602a,
-0xe5940,0x26432,0x26421,0xe5942,0x17753,0x2642b,0x17755,0x1775d,
-0x1775b,0x2642d,0x1775c,0x26423,0xe5949,0x26424,0x26429,0x2642e,
-0xe593e,0x25f79,0x17756,0x26437,0x26434,0x26761,0x2642a,0x26426,
-0x26435,0x26756,0x26428,0x00000,0x17759,0xe5944,0x17758,0x25f7b,
-0x1775a,0x26431,0x26433,0x17757,0x26436,0x2637d,0x00000,0x26422,
-0xe5946,0x00000,0x00000,0xe5945,0xe6661,0xe6662,0xe6660,0x00000,
-0x2675f,0xe5b50,0x2674f,0x17938,0x2675d,0xe5b44,0xe5b45,0x2674d,
-0x17939,0x00000,0x26758,0xe5b43,0x26754,0x1793e,0x2675e,0x2674e,
-0x26751,0x17936,0x26760,0xe5b48,0x26759,0x2675c,0x1793c,0x17941,
-0x1793f,0x26755,0x26750,0xe5b4d,0x1793a,0x1793b,0x2674c,0x17937,
-0xe5b4f,0x17935,0x1793d,0x2675b,0x17940,0xe5b4a,0x26757,0x26762,
-0x17942,0xe5b41,0xe5b42,0xe5b4e,0x26753,0xe5b47,0x2675a,0xe6665,
-0x00000,0xe6663,0xe6664,0xe5d41,0xe5e6a,0x26a41,0x26a50,0x26a43,
-0x26a4a,0x26752,0x26a48,0x26a37,0x26a4e,0x17a4e,0x26a3b,0x26a4d,
-0x26a42,0x00000,0xe5d43,0x17a4d,0xe5d3c,0xe5d3f,0x26a52,0x26a44,
-0xe5d3e,0x26a49,0x26a4c,0x26a35,0x26a4f,0x26a40,0x26a45,0x26a39,
-0x26a3d,0x26a51,0x26a47,0x26a36,0x26a3a,0x26a3c,0x26a46,0xe5d3d,
-0x17a4c,0x26a3f,0xe5d44,0xe5d45,0xe5d47,0x00000,0xe5d42,0xe5d3a,
-0x26a38,0x00000,0xe6666,0xe6667,0xe6668,0x00000,0x00000,0xe5d46,
-0x26a3e,0x26c50,0x26c54,0x17b3b,0x26c56,0xe5e6d,0x17b35,0x00000,
-0x26c52,0x26c58,0x17b3a,0x17b36,0x00000,0x17b37,0x26c4f,0x26c55,
-0x17b39,0x26c53,0x17b38,0x26c4e,0x26a4b,0x26c51,0x00000,0x26c4d,
-0x26c57,0x00000,0xe5f69,0xe5f6e,0x17b7b,0x26e3c,0x26e3f,0x26e3b,
-0x26e3d,0x26e3e,0x26e38,0x26e39,0x26e36,0xe5f6a,0xe5f6c,0x26e3a,
-0x26e37,0x17b7c,0x17b7d,0x00000,0xe5f6b,0x26f59,0xe6052,0x26f5b,
-0xe6431,0x00000,0xe6055,0xe6054,0xe6056,0x26f5a,0x26f5c,0xe604f,
-0x17c4c,0xe6053,0x26f58,0x17c4b,0x17c4d,0xe6057,0xe666a,0xe6669,
-0x27059,0x2705a,0x17c6f,0x27058,0xe6122,0x27142,0x27141,0x27143,
-0x17d2c,0x27144,0x17d2b,0x27145,0x27161,0x27164,0x27163,0x17d35,
-0x27162,0x00000,0xe616f,0xe6223,0x17d3f,0x17d3d,0x17d3e,0x17d44,
-0x27230,0x27231,0x2722f,0x27237,0xe6236,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-/* 0x9500 */
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x14f5b,
-0x00000,0xe6323,0x23a28,0x2413f,0x2554e,0x26763,0x00000,0x00000,
-0x14f5c,0xe2f40,0x1536d,0x15860,0x00000,0xe3432,0x23a29,0xe395c,
-0x23a2a,0x15d70,0x00000,0x16264,0x24141,0x24140,0x16268,0x16263,
-0x24142,0x16265,0x16267,0x16266,0x16262,0xe3f6c,0x00000,0xe666b,
-0x16750,0xe453c,0xe453a,0x24856,0x24854,0x00000,0x24855,0x24853,
-0x00000,0x16b5b,0xe4a3d,0x16b5e,0x16b60,0x16b5f,0x00000,0xe4a3e,
-0x16b5c,0x16b5d,0x00000,0x25550,0x2554f,0x16f64,0x25551,0xe4f53,
-0x25552,0x16f65,0xe4f55,0xe4f56,0x00000,0x25b59,0x25b57,0x26040,
-0xe5342,0x25b55,0x25b56,0x1726f,0x25b52,0x25b5a,0x25b54,0x25b58,
-0x2603c,0xe5344,0xe5340,0x2603e,0xe566d,0x2603f,0x1757e,0x2603b,
-0x1757d,0x2603d,0x1757a,0x1757b,0x1757c,0x25b53,0xe666c,0x00000,
-0x17760,0x2643a,0x26438,0x26439,0x1775e,0x17761,0x1775f,0xe594b,
-0xe594a,0x00000,0x26764,0x26765,0x17943,0xe5b53,0x26a53,0x26a55,
-0x26a54,0x17a4f,0x17b3c,0x26c5b,0x26c5a,0x26c59,0x00000,0xe666d,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-/* 0x9600 */
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x14f5d,0xe2143,0x22169,0x00000,
-0x22278,0x1486a,0x22276,0x22279,0x22277,0x00000,0xe273b,0xe273a,
-0x2252e,0xe273f,0x14b62,0xe273c,0x14b63,0x22530,0x14b60,0x2252f,
-0x2252d,0x14b61,0x14b5f,0xe273d,0xe273e,0x00000,0x00000,0xe2a79,
-0x00000,0x22878,0x2287b,0x14f60,0x2287a,0x22879,0xe2a7c,0x14f5f,
-0x14f5e,0xe2a7b,0x14f62,0x2287c,0x14f61,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x22d67,0x1536f,0x15370,0x15371,0x22d68,0x22d64,
-0x1536e,0x22d65,0x00000,0x22d66,0x22d63,0x00000,0xe3436,0x00000,
-0x15867,0xe3434,0xe395e,0x15864,0x23348,0x15865,0x15868,0x23349,
-0xe3433,0x15863,0x15861,0x15862,0x15866,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x15d71,0x23a2d,0x15d79,0x23a2c,0xe3961,0x23a2f,
-0x15d75,0x23a2e,0x16270,0x15d73,0x15d76,0x15d72,0x15d77,0x15d78,
-0x15d74,0xe3965,0x00000,0xe3f71,0x23a2b,0x1626c,0x24144,0xe3f72,
-0x24148,0xe3f73,0xe3f75,0x24147,0x16271,0x1626d,0x1626e,0x24143,
-0x24145,0x24146,0x16269,0x1626b,0xe3f70,0x1626f,0x1626a,0xe4540,
-0x00000,0x24859,0x24857,0x24858,0x16752,0x16753,0xe4542,0x2485a,
-0x16751,0x16b61,0x00000,0x16b63,0x16b62,0xe4a45,0x24f23,0xe4a46,
-0xe4a44,0x24f24,0x25554,0xe4f5a,0x25553,0xe4f5b,0x00000,0x17270,
-0x17271,0x25b5b,0x17272,0xe5348,0x26043,0xe5670,0x26041,0xe566f,
-0x26042,0x17621,0xe5671,0x2643b,0x17944,0xe5d49,0xe2a7d,0xe5349,
-0x17622,0x14f63,0xe6325,0x15869,0x2334a,0xe3439,0x00000,0x23a30,
-0x15d7a,0x16272,0x24149,0x2414b,0x16274,0x16273,0x16275,0x16276,
-0x2414a,0x16756,0x16757,0x16755,0x16b64,0x16754,0x2485b,0x00000,
-0xe4a47,0xe4a49,0x16b65,0x25555,0x25b5c,0x17273,0x17623,0x2643c,
-0x26440,0x17764,0x2643d,0x17765,0x17763,0x26441,0x17766,0x2643f,
-0x00000,0x26766,0x17762,0x17945,0xe5e70,0x2705b,0xe6125,0xe622f,
-0x14f64,0x15d7c,0x15d7b,0x00000,0xe3f7e,0xe3f7c,0xe3f7b,0x16277,
-0x2414d,0x2414c,0x16278,0x00000,0xe4546,0x2485f,0x1675b,0x16758,
-0x2485e,0x1675a,0x2485c,0x16759,0xe4547,0x2485d,0x00000,0x24f25,
-0x16b66,0x00000,0x25558,0x00000,0x16f66,0x25556,0x16f67,0x16f68,
-0x25557,0x16f69,0xe4f60,0x25b5d,0xe5350,0x17277,0x17274,0x17279,
-0x25b5f,0x17275,0x25b5e,0x17278,0xe534d,0xe534c,0x17276,0xe5351,
-0x26046,0x26048,0xe5674,0xe5675,0x17624,0x26047,0x17625,0x26045,
-0x26044,0x00000,0x26443,0x26442,0x17767,0x26444,0x2676b,0x17947,
-0x2676a,0x26767,0x17946,0x26768,0x26769,0x00000,0x26a56,0x26a57,
-0x17a50,0xe5d4f,0x17b3f,0xe5d4c,0xe5d4e,0x26c5c,0xe5e72,0xe5e71,
-0x17b3d,0x17b3e,0x26c5d,0xe666e,0xe5f71,0x17b7e,0x17c21,0x26e40,
-0xe5f72,0xe6059,0x17c70,0x2705d,0x17c72,0xe6126,0x2705c,0x2705e,
-0x17c71,0x27146,0x00000,0x2717b,0x00000,0xe666f,0x00000,0x00000,
-0xe6245,0xe2a7e,0x14f65,0x00000,0x00000,0xe4549,0x1675c,0x00000,
-0x24f26,0xe4a4c,0x25559,0x1727a,0x1727b,0xe594f,0x14f66,0xe4021,
-0x16f6a,0x17948,0x15372,0xe2b21,0xe4a4e,0x00000,0x1727c,0xe5e73,
-0x17c4e,0x15373,0x23a31,0x00000,0x2414e,0xe4024,0x24150,0xe4022,
-0x2414f,0x00000,0x24863,0x24860,0x1675d,0x00000,0x1675e,0x24861,
-0x24862,0xe454b,0x24f28,0x24f2d,0x16b67,0x24f27,0x24f29,0x24f30,
-0x24f2b,0x24f2f,0x24f2c,0x24f2a,0x24f2e,0x16b68,0x00000,0xe4f62,
-0x2555c,0xe4f63,0x2555a,0x16f6c,0xe4f64,0x16f6b,0x2555b,0x16f6d,
-0x00000,0x00000,0x00000,0xe5353,0x25b62,0x00000,0x00000,0x25b61,
-0x1727d,0x25b60,0x26049,0xe567a,0x2604b,0x2604d,0x2604c,0xe567b,
-0x17626,0x2604a,0x2644b,0x17768,0x26449,0x2644c,0x17769,0x00000,
-0x26447,0xe5950,0x2644a,0x26448,0x26445,0x1776a,0x26446,0x00000,
-0x00000,0xe5b5f,0xe5b5d,0x2676c,0xe5b5e,0xe5b60,0x2676e,0x2676d,
-0xe5d50,0x26a58,0xe5d51,0x26a59,0x00000,0xe5e75,0xe5e74,0x26c5e,
-0xe5f73,0x17c23,0x00000,0x17c22,0x26f5d,0x26f5e,0x17c73,0x2705f,
-0xe6128,0x17d36,0xe623b,0x15374,0x16279,0x24f32,0x24f31,0x2555e,
-0x2555d,0x00000,0xe5355,0x17627,0x2604f,0x2604e,0x2644f,0x2644d,
-0x26450,0x2644e,0xe5951,0x00000,0x17949,0x2676f,0x26770,0x26771,
-0x00000,0x26c5f,0xe5e76,0x26e41,0xe6129,0x27060,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x15375,0xe454f,0xe4f65,
-0x25b63,0x26050,0xe5b61,0x15376,0x00000,0xe4550,0x16b69,0x00000,
-0x25b64,0x1776b,0x26451,0x1794a,0xe5d53,0x26a5a,0x26a5b,0x17b40,
-0x26f5f,0x15377,0x15e21,0x15e22,0x23a32,0x1627a,0x1627b,0x24151,
-0x1627c,0x00000,0x16762,0xe4552,0x16764,0x24865,0x24866,0x24864,
-0x1675f,0x16760,0x16763,0x16761,0xe4a54,0xe4a55,0x24f33,0x16b6a,
-0x16b6b,0xe4a52,0xe4a56,0x25565,0x16f70,0x25560,0x2555f,0xe4f69,
-0x25564,0x16f6e,0xe4f67,0xe636e,0x17326,0x00000,0x25561,0x25566,
-0x25563,0x25562,0xe4f66,0x16f6f,0x00000,0x17324,0xe535c,0x25b66,
-0x1727e,0xe5359,0x25b67,0xe535a,0xe5228,0x25b65,0xe5358,0x17323,
-0x17321,0x17325,0xe535d,0x17322,0xe535b,0xe535f,0x00000,0xe595b,
-0xe5726,0x26051,0xe637b,0x26056,0x26052,0x26055,0x17628,0xe5728,
-0x25e41,0x26054,0x26053,0xe5959,0x1776e,0x1776c,0x1776f,0x1776d,
-0x26452,0x26453,0x26454,0x17770,0xe5956,0xe5958,0xe5b65,0x26775,
-0x1794c,0x26773,0x00000,0x1794d,0x26772,0x26774,0x1794b,0x26a5f,
-0x26a5c,0xe642a,0x26a5d,0x26a5e,0x26c60,0x17b42,0xe5e78,0x17b41,
-0xe5e77,0x26e43,0x26e42,0x17c24,0xe605d,0xe605e,0xe605c,0x17c4f,
-0x17c74,0x17d2d,0x27147,0x2717c,0x2717d,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x15378,0x24152,0x00000,0x00000,0x24867,0x24f34,0x24f35,0x16b6c,
-0x00000,0x16b6d,0x25567,0x16f71,0x00000,0xe5361,0x17629,0xe572a,
-0x26455,0xe595c,0x17771,0x26778,0x1794e,0x26777,0x26779,0x26776,
-0x26c63,0x26a60,0x26a61,0xe5d56,0x17a51,0x00000,0x26c62,0xe5e7b,
-0xe5e79,0x26c61,0xe5e7a,0x26e44,0x2717e,0xe6225,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x15379,0xe5e7c,0xe6226,0x00000,0x1537a,
-0x00000,0xe3967,0x1586a,0x2334b,0xe6670,0x23a33,0xe3968,0x1627d,
-0x00000,0x16322,0x1627e,0x24153,0xe455b,0x16324,0x00000,0x16321,
-0xe402b,0xe455c,0x16323,0xe4554,0x16766,0xe4559,0x24868,0xe4557,
-0xe4a5d,0x24869,0x25569,0x00000,0x16765,0x16767,0x16768,0xe4558,
-0x24f37,0xe4a5e,0x24f36,0x16b6e,0x00000,0x16b6f,0xe4a5b,0x24f38,
-0x25568,0x16b71,0x16f72,0x00000,0x16b70,0x00000,0xe667a,0x00000,
-0x17327,0x2556a,0x16f74,0x16f73,0x2556b,0x2556e,0x2556c,0x2556d,
-0x16f75,0xe4f6b,0x1732c,0x1732a,0xe5365,0xe5366,0x17329,0x25b69,
-0xe5364,0x1732b,0xe5362,0xe5363,0x25b68,0x26057,0x00000,0x25b6a,
-0x17328,0x25b6b,0x2605a,0x26058,0x26059,0x2605e,0x17775,0x2605d,
-0x26060,0x2605f,0x2605c,0x2605b,0x00000,0x1762a,0xe5962,0x00000,
-0xe5961,0xe5966,0x26458,0xe5965,0x26457,0x17774,0x17772,0x17773,
-0xe5963,0x26456,0xe6671,0x2677c,0xe5b69,0x1794f,0x00000,0x2677b,
-0x2677a,0x17950,0x00000,0x26a66,0x26a65,0xe5d58,0x26a63,0xe5e7e,
-0x26a62,0x17a53,0x17a52,0x26a67,0x26e45,0x17c25,0x26c65,0x17b43,
-0x26c64,0x26a64,0xe5f78,0x26e46,0x17c50,0xe612a,0x17d2e,0x27148,
-0x00000,0x27221,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x1537b,0x23a34,
-0x26061,0x1537c,0xe455f,0x00000,0x24f3a,0x24f39,0x25b6c,0x00000,
-0xe5368,0x26063,0xe5730,0x26062,0xe5967,0x17776,0x2677d,0x2677e,
-0x17a54,0xe5f21,0xe6060,0x27222,0x1586b,0x16326,0x16325,0x2486a,
-0x2486c,0x1676a,0x2486b,0x16769,0x1676b,0x2486d,0xe4a63,0xe4a62,
-0xe4a66,0x24f3c,0x24f3e,0x24f3d,0xe4a61,0x24f40,0xe4a60,0xe4a6c,
-0xe4a64,0x16b72,0x24f3f,0x24f3b,0xe4a6a,0x00000,0x00000,0x24f41,
-0xe4f73,0x25575,0xe4f6d,0x25578,0x2557a,0x25570,0x25574,0x25571,
-0x16f77,0x16f7a,0x16f7c,0x25572,0x25573,0x16f7b,0x25576,0x25579,
-0x25577,0x16f7d,0xe4f6e,0x16f79,0x2556f,0x16f76,0xe4f72,0x16f78,
-0xe4f74,0xe5370,0x1732e,0x25b72,0x25b70,0x25b6f,0xe5371,0x25b75,
-0xe536b,0x25b74,0x25b73,0xe536c,0x25b6e,0x1732d,0x25b6d,0xe536a,
-0x25b71,0x1732f,0x00000,0xe5734,0x26066,0xe5737,0x2606a,0x26067,
-0x26069,0x26068,0x26065,0x2606b,0x2606e,0x2606c,0x2606d,0x1762c,
-0xe5733,0x1762b,0x26064,0x2606f,0x2645d,0x26460,0x26462,0x26461,
-0xe596a,0x2645b,0x2645f,0x2645a,0xe596b,0x2645c,0x17777,0x26459,
-0xe596d,0x2645e,0x00000,0x00000,0x2682d,0x26822,0x17951,0xe5b6f,
-0xe5b6d,0x17952,0x26821,0x26826,0x2682c,0x26824,0x2682b,0xe5b6c,
-0x26828,0xe5b6e,0x26827,0x2682a,0x26825,0x26823,0xe5b6b,0x26829,
-0x00000,0x26a6e,0x26a6c,0x17a55,0x26a6b,0x26a71,0x26a6f,0xe5d5a,
-0x17a56,0x26a6a,0x26a68,0x00000,0x26a69,0x17a58,0x26a6d,0x17a57,
-0x26a70,0x26c66,0x26c6c,0xe5f24,0xe5f22,0x26c67,0x17b47,0x26c6d,
-0x17b46,0x26c6b,0x26c6a,0x17b45,0x26c69,0x17b44,0x26c68,0x00000,
-0x26e4c,0x26e4e,0x26e4d,0x00000,0x26e4a,0x17c27,0x26e47,0x26e4b,
-0x26e50,0xe5f79,0x26e4f,0x26e48,0x26e49,0x17c26,0x26f60,0x17c53,
-0xe6062,0x26f61,0x17c51,0x17c52,0xe6061,0x00000,0x27061,0x17c75,
-0x27165,0xe6172,0x17d37,0xe6173,0x27223,0x17d38,0x27224,0x27225,
-0x27233,0x27232,0x17d47,0x2723b,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x1586c,0xe402f,0x00000,0x2486f,0x00000,0x2486e,0x00000,0x16b73,
-0x16b74,0x24f42,0x00000,0x2557b,0x25b78,0xe4f77,0xe4f76,0x16f7e,
-0x17330,0x25b76,0x00000,0x25b79,0x17331,0xe573a,0x26070,0x25b77,
-0x26463,0x17778,0x2682e,0x00000,0xe5d61,0x00000,0x26a74,0x26a72,
-0xe5d60,0xe5d5e,0x26a73,0x00000,0x00000,0x26c6e,0xe5f25,0x17b48,
-0x26e51,0x17c56,0x17c28,0x17c54,0x17c55,0x27062,0x17d2f,0xe6174,
-0x1586d,0xe6334,0xe4a6e,0x00000,0x26464,0xe5f7b,0xe6063,0x2334c,
-0xe4032,0x1676c,0xe4561,0x24f43,0xe4a6f,0xe4a73,0x16b75,0x24f44,
-0xe4a71,0xe4a70,0xe4a72,0x2557d,0x2557c,0x17333,0x17021,0x17022,
-0x00000,0x25622,0x25621,0x2557e,0xe4f79,0xe5375,0x25b7a,0x25b7d,
-0xe5374,0x25b7c,0x25b7b,0x17332,0x26074,0x26072,0x26071,0x00000,
-0xe573b,0x26073,0xe573c,0x17779,0x26466,0x26467,0x1777a,0xe596f,
-0x26465,0xe5b71,0x26830,0x2682f,0x26832,0x17953,0x26831,0x00000,
-0x26a75,0x26a77,0x26a76,0x00000,0xe5f27,0x26c6f,0x26c72,0x26c70,
-0x26c71,0x26e52,0x17c29,0x00000,0x00000,0xe6672,0x26f62,0x26f63,
-0x26f64,0xe612c,0x17c76,0x17d30,0x27226,0x1586e,0xe4a75,0x17023,
-0x17334,0x26468,0xe5d62,0x26e53,0xe612e,0xe6433,0x27166,0x2334d,
-0xe6228,0x17d48,0x1586f,0x25b7e,0xe573e,0x26469,0x00000,0x26833,
-0xe5d63,0x00000,0x26c73,0x26e54,0x15870,0xe4562,0x24f45,0x24f46,
-0xe4a78,0x16b76,0x16b77,0x25624,0x17025,0x17024,0x25623,0x00000,
-0x26075,0xe573f,0x2646a,0x2646c,0x2646b,0x1777d,0x1777c,0x1777b,
-0xe5d64,0x17b4a,0x26c74,0xe5f28,0x17b49,0x26e56,0x26e55,0xe612f,
-0x17c77,0x27063,0x15e23,0x24870,0x00000,0xe4563,0x00000,0x24f49,
-0x24f47,0x24f48,0x00000,0xe4f7e,0x2562d,0x00000,0x25628,0x25625,
-0x2562c,0xe4f7c,0x00000,0xe4f7b,0x2562e,0x00000,0x00000,0x17027,
-0x2562b,0x25627,0xe4f7d,0x00000,0x25626,0x2562a,0x25629,0x17026,
-0x00000,0x00000,0x25c2b,0x25c26,0x25c24,0x25c2d,0x25c25,0x00000,
-0x25c21,0x00000,0x25c27,0xe5378,0xe537a,0x25c22,0x2607e,0x25c23,
-0x25c2e,0xe5423,0x00000,0xe537c,0xe5421,0x00000,0xe5425,0xe537d,
-0x25c2a,0x17335,0x25c29,0x25c28,0xe5379,0x25c2c,0x00000,0x00000,
-0xe6673,0xe5744,0x26076,0x26079,0x00000,0xe5745,0x26078,0xe5740,
-0x26122,0x2607b,0x26121,0xe5742,0x2607d,0x2607c,0x2607a,0x00000,
-0x26077,0x00000,0x1762f,0x1762e,0x00000,0x17630,0x1762d,0x26123,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x26472,0x26475,0x00000,
-0x26473,0x26477,0x00000,0xe5974,0x00000,0x26478,0x00000,0x26470,
-0x17824,0x26471,0xe5973,0x2646f,0x26476,0xe5b74,0x2646e,0x2646d,
-0x17823,0x17821,0x1777e,0xe5976,0xe5975,0xe5743,0x00000,0x00000,
-0x00000,0x00000,0xe5971,0x26474,0x2683c,0x26842,0x17956,0x2683d,
-0x00000,0x26840,0x26844,0x17957,0x2683f,0x00000,0x26837,0xe5b75,
-0x26836,0x26843,0x2683a,0xe5b77,0x26838,0x26841,0x26839,0x17955,
-0x17954,0xe5b79,0x26834,0x26835,0x2683e,0x00000,0xe5b7a,0x00000,
-0x2683b,0x00000,0x00000,0x00000,0x00000,0x00000,0xe5d6f,0x26a7a,
-0x26a7d,0xe5d71,0x00000,0xe5d67,0xe5d69,0x17822,0xe5d6a,0xe5d74,
-0xe5d75,0x00000,0xe5d6e,0x00000,0xe5d68,0x26a7b,0x26b23,0x26b21,
-0x26a79,0x26b26,0xe5d66,0x26a78,0xe5d76,0x17a5a,0x26b22,0x00000,
-0xe5d73,0x00000,0x26a7c,0x17a59,0x26b25,0xe5d72,0x00000,0x26b24,
-0x00000,0x00000,0x00000,0xe5d70,0x26c77,0x26c76,0x00000,0xe5f2c,
-0x00000,0x26c7d,0x00000,0x26c79,0x26c7c,0x17b4c,0x00000,0xe642f,
-0x26c7a,0x26c7b,0x00000,0x26c75,0x26c78,0x17b4b,0xe5f2a,0x00000,
-0x00000,0x17c2b,0x26e61,0x26e5c,0x26e60,0xe6025,0x26e63,0x26e5f,
-0xe5f7e,0x26e5b,0xe6023,0x17c2d,0x26e5e,0x26e62,0x17c2c,0x26e59,
-0x26a7e,0x26e5d,0x00000,0x00000,0x26e5a,0xe6022,0x26e57,0x00000,
-0x26e58,0x17c2a,0x26f68,0x26f6a,0x26f6d,0x26f69,0x26f6e,0xe6065,
-0x26f67,0xe6066,0x26f65,0xe6068,0x17c57,0x26f6b,0x17c59,0x17c58,
-0x26f66,0x26f6c,0x00000,0x00000,0x00000,0xe6132,0x27068,0x17c78,
-0x27069,0xe6133,0x27067,0x27064,0x00000,0xe6134,0x27066,0x27065,
-0x27149,0x00000,0x00000,0x00000,0xe6159,0x2714b,0x2714a,0xe615b,
-0x00000,0x27169,0x00000,0x27168,0x27167,0x2716a,0xe6175,0x17d40,
-0x17d41,0x27238,0x2723c,0xe6241,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x15e24,0x24154,0x24873,
-0xe4564,0x1676d,0x24871,0xe4566,0xe2f42,0x24872,0xe4568,0xe4567,
-0x00000,0x24f4a,0x24f4b,0x16b7a,0x16b78,0x24f4c,0x16b79,0x25633,
-0xe5027,0x25636,0x25630,0x25637,0x2562f,0x25631,0xe502a,0x25632,
-0x25635,0xe5024,0xe502b,0x1702a,0x2563a,0x25639,0x17028,0x25634,
-0x25638,0x17029,0xe542d,0x00000,0xe5025,0xe5022,0x00000,0xe542a,
-0x25c38,0x00000,0x1733a,0xe542c,0x25c33,0x17336,0xe5436,0x25c30,
-0x25c36,0x25c39,0xe5433,0x1733b,0x00000,0x25c35,0x25c32,0x25c3a,
-0x25c31,0xe5437,0x25c37,0x17337,0xe5429,0x25c2f,0x17338,0xe5435,
-0x17339,0x25c34,0xe5432,0x00000,0x00000,0x26135,0x26128,0x26129,
-0x2612c,0x2612a,0x00000,0x26124,0x00000,0xe574d,0x26127,0x26131,
-0x2612b,0xe5748,0x00000,0x17631,0x00000,0x26133,0x26130,0x17632,
-0x26132,0x26125,0x2612e,0x2612f,0xe574a,0x2612d,0x00000,0x00000,
-0x00000,0xe6675,0x2647c,0x2647e,0x26523,0xe5979,0xe597b,0x2647b,
-0xe597d,0x17825,0x26525,0x2647a,0x26526,0xe597e,0x26522,0x26524,
-0x26528,0x26521,0x26529,0x2647d,0x26479,0x17826,0xe5a22,0x26527,
-0x17827,0x17959,0x00000,0xe597a,0x00000,0x00000,0xe5b7d,0x26126,
-0x2685e,0x26855,0x1795b,0x26851,0x1795c,0xe5c27,0xe5c22,0x2685a,
-0x26854,0x2684a,0x1795a,0x26857,0x26852,0x26853,0xe5c25,0x26845,
-0x2684c,0x2685b,0xe5b7e,0x26858,0x00000,0x26850,0xe5c26,0x2685c,
-0x2684b,0x26846,0x26859,0xe5c24,0x26848,0x26856,0x2684d,0x2685d,
-0x26849,0x17958,0x26847,0x2684e,0x2684f,0x00000,0x00000,0x00000,
-0x26b2d,0xe5c23,0x26b2b,0x00000,0x26b30,0xe5d79,0x26b3c,0x26b33,
-0x26b2c,0x26b28,0x26b35,0x26b2e,0x26b31,0x26b2a,0x26b38,0x26b27,
-0x26b2f,0x26b34,0x26b36,0x26b39,0x26b29,0xe5d7a,0x26b3d,0x26b3e,
-0x26b37,0x26b3b,0x26b32,0x00000,0x26d2f,0x26d32,0xe5f35,0x17b4d,
-0xe5f31,0x26d31,0x26d36,0x26d34,0x17b4e,0x26d2b,0x26d21,0x26c7e,
-0x17b50,0x26d2d,0x26d2e,0x26d2a,0x26d22,0xe5f32,0x26d27,0x26b3a,
-0x00000,0x26d23,0x17b4f,0x26d29,0xe5f36,0x26d28,0x00000,0x26d24,
-0x26d30,0x00000,0x26d25,0x26e68,0x26d33,0x26d35,0x26d2c,0x26d26,
-0x26e69,0x26e6b,0x26e65,0x17c2e,0x00000,0x26e72,0x26e70,0x17c2f,
-0x26e6f,0x26e6e,0x26e67,0x26e64,0x26e6a,0x26e73,0x26e66,0x26e6c,
-0x00000,0x26f77,0x26f7c,0x26f72,0x26f75,0x17c5a,0x26f79,0x00000,
-0x27022,0x26e6d,0x00000,0x26f73,0x26f7d,0x27023,0x26f78,0x26f71,
-0x26f7b,0x00000,0x26f7a,0x27021,0x26f7e,0x26e71,0x26f76,0x26f70,
-0x26f74,0x17c79,0x17c7a,0x26f6f,0xe606c,0x27074,0x2706b,0x27073,
-0x27070,0x27071,0x2706a,0x2706d,0x27075,0x2706f,0x2706e,0x2706c,
-0xe6135,0x27072,0x00000,0x2714c,0x00000,0x2714d,0xe615d,0x2714f,
-0x2714e,0x27151,0x27150,0x2716c,0x2716b,0x27227,0xe6229,0x27228,
-0xe6230,0x27234,0x17d45,0x17d49,0xe6238,0x2723d,0x17d4a,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x15e25,0x00000,0x00000,
-0x00000,0x17a5b,0x26d37,0xe5f37,0x17c7b,0x17c7c,0x00000,0x15e26,
-0x24874,0xe4569,0x1676e,0x2563b,0xe502c,0xe5439,0x25c3c,0x25c3d,
-0x25c3b,0x26137,0x26136,0x17633,0x2652b,0x26138,0x2652a,0x00000,
-0xe5a24,0x26860,0x1795d,0x1795f,0x2685f,0xe5c29,0x00000,0x1795e,
-0xe5e21,0x26b3f,0x26b41,0x26b40,0x26d38,0x17b51,0xe5f3a,0x17c5b,
-0x27076,0x27152,0xe6231,0xe623f,0x27241,0x15e27,0xe2547,0x24f4d,
-0x00000,0x1702b,0xe502f,0xe502e,0xe543a,0x25c3f,0x25c3e,0xe5750,
-0x26139,0xe5a26,0xe5a25,0x00000,0x17960,0x17a5c,0x26e74,0x27239,
-0x00000,0x00000,0x00000,0x15e28,0x16b7b,0xe4b22,0x1702c,0x00000,
-0x26861,0xe5e22,0x27024,0x16327,0xe396a,0xe543c,0xe543b,0x00000,
-0x2613a,0x00000,0xe5a28,0x00000,0x17d31,0x16328,0x1702d,0x17634,
-0x27025,0x16329,0xe396b,0x2563c,0x1733d,0x25c40,0x25c41,0xe543d,
-0x1733c,0x00000,0x2613b,0x17638,0x17636,0x17637,0x17635,0x2652c,
-0x17828,0x00000,0x00000,0xe5c2a,0x26b43,0x26b42,0x26b45,0x26b44,
-0x17a5d,0x00000,0x00000,0x26d39,0x00000,0x26d3b,0x26d3a,0x17b52,
-0x26e75,0xe6029,0x27026,0x27027,0x17c5c,0x27153,0x2716d,0x17d42,
-0x00000,0x24155,0x25c42,0x2613c,0x26862,0x24875,0xe2772,0x2613d,
-0x2652e,0x2652d,0xe5a29,0xe5c2d,0xe5c2e,0xe5f3c,0x27028,0x17c7d,
-0xe615f,0x27154,0x2716e,0x00000,0x00000,0x00000,0x1676f,0x2563d,
-0x2563e,0x00000,0x25c43,0x16770,0xe456a,0x17829,0x2652f,0xe5c30,
-0x26d3d,0x17b53,0x26d3e,0x26d3c,0x27029,0xe6160,0x27077,0x00000,
-0x16771,0x00000,0x26140,0x2613f,0x2613e,0x26530,0xe5a2b,0xe5a2a,
-0x26534,0x26533,0x26532,0x26531,0x1782a,0x26863,0x26b47,0x17a5e,
-0x26b46,0x26d3f,0x26e78,0x26e77,0x17c30,0x26e76,0x2702c,0x2702b,
-0x2702a,0xe606d,0x00000,0x16b7c,0x00000,0x25c44,0x17639,0x00000,
-0x26864,0x26865,0x26e79,0x2702d,0x00000,0xe613b,0x27078,0x27155,
-0x27229,0x27243,0x16b7d,0x1763a,0x26535,0x26866,0x26d40,0x2702e,
-0xe2370,0x00000,0x1702f,0xe543e,0x26141,0x26536,0x26867,0x26868,
-0x26869,0x26b4c,0xe5e24,0x26b48,0x17b54,0x26b4b,0x26b4a,0x17a5f,
-0x26b49,0x17a61,0x00000,0x17a60,0x26d42,0x26d41,0x17b55,0x17b56,
-0x00000,0xe5f3e,0x17c32,0x26e7a,0x17c31,0x00000,0x27031,0x27032,
-0x27030,0x2702f,0x17d21,0x00000,0x27079,0x2707a,0x2707b,0x17c7e,
-0x27156,0x27159,0x27158,0x27157,0xe6233,0x00000,0x27242,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x1733e,0xe5755,0x00000,
-0x17832,0x26b4d,0x26d43,0xe602b,0x17c33,0x26e7b,0x00000,0xe6242,
-0x27244,0x00000,0x00000,0x00000,0x1733f,0xe5e47,0x00000,0x00000,
-0x26142,0xe5f3f,0x26e7c,0xe6161,0x2716f,0xe6177};
-
-static const int ucs_i_cns11643_table_min = 0x4d00;
-static const int ucs_i_cns11643_table_max = 0x4d00 + (sizeof (ucs_i_cns11643_table) / sizeof (unsigned int));
-
-static const unsigned int ucs_r_cns11643_table[] = {
-/* 0xfe00 */
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x1212b,0x12136,0x12138,0x00000,0x00000,0x12140,0x12141,0x12144,
-0x12145,0x12148,0x12149,0x1214c,0x1214d,0x12150,0x12151,0x12154,
-0x12155,0x12158,0x12159,0x1215c,0x1215d,0x00000,0x00000,0x00000,
-0x00000,0x12227,0x12228,0x1222b,0x1222c,0x12229,0x1222a,0x00000,
-0x1212e,0x1212f,0x12130,0x00000,0x12132,0x12133,0x12134,0x12135,
-0x00000,0x1215e,0x1215f,0x12160,0x12161,0x12162,0x12163,0x1222d,
-0x1222e,0x1222f,0x1223f,0x12240,0x12241,0x12243,0x12242,0x00000,
-0x12262,0x1226c,0x1226d,0x1226e,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-/* 0xff00 */
-0x00000,0x1212a,0x00000,0x1216c,0x12263,0x12268,0x1216d,0x00000,
-0x1213e,0x1213f,0x1216e,0x12230,0x12122,0x12231,0x12125,0x1225f,
-0x12421,0x12422,0x12423,0x12424,0x12425,0x12426,0x12427,0x12428,
-0x12429,0x1242a,0x12128,0x12127,0x12236,0x12238,0x12237,0x12129,
-0x12269,0x12441,0x12442,0x12443,0x12444,0x12445,0x12446,0x12447,
-0x12448,0x12449,0x1244a,0x1244b,0x1244c,0x1244d,0x1244e,0x1244f,
-0x12450,0x12451,0x12452,0x12453,0x12454,0x12455,0x12456,0x12457,
-0x12458,0x12459,0x1245a,0x00000,0x12260,0x00000,0x00000,0x12225,
-0x00000,0x1245b,0x1245c,0x1245d,0x1245e,0x1245f,0x12460,0x12461,
-0x12462,0x12463,0x12464,0x12465,0x12466,0x12467,0x12468,0x12469,
-0x1246a,0x1246b,0x1246c,0x1246d,0x1246e,0x1246f,0x12470,0x12471,
-0x12472,0x12473,0x12474,0x12142,0x1225e,0x12143,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,
-0x12266,0x12267,0x00000,0x00000,0x00000,0x12264};
-
-static const int ucs_r_cns11643_table_min = 0xfe00;
-static const int ucs_r_cns11643_table_max = 0xfe00 + (sizeof (ucs_r_cns11643_table) / sizeof (unsigned int));
-
-
-#endif /* UNICODE_TABLE_CNS11643_H */
diff --git a/ext/mbstring/libmbfl/filters/unicode_table_cp1251.h b/ext/mbstring/libmbfl/filters/unicode_table_cp1251.h
deleted file mode 100644
index 99ec985b36..0000000000
--- a/ext/mbstring/libmbfl/filters/unicode_table_cp1251.h
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * "streamable kanji code filter and converter"
- * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved.
- *
- * LICENSE NOTICES
- *
- * This file is part of "streamable kanji code filter and converter",
- * which is distributed under the terms of GNU Lesser General Public
- * License (version 2) as published by the Free Software Foundation.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with "streamable kanji code filter and converter";
- * if not, write to the Free Software Foundation, Inc., 59 Temple Place,
- * Suite 330, Boston, MA 02111-1307 USA
- *
- * The authors of this file: PHP3 internationalization team
- * You can contact the primary author 金本 茂 <sgk@happysize.co.jp>.
- *
- */
-
-#ifndef UNICODE_TABLE_CP1251_H
-
-/* cp1251 to Unicode table */
-static const unsigned short cp1251_ucs_table[] = {
- 0x0402, 0x0403, 0x201a, 0x0453, 0x201e, 0x2026, 0x2020, 0x2021,
- 0x20ac, 0x2030, 0x0409, 0x2039, 0x040a, 0x040c, 0x040b, 0x040f,
- 0x0452, 0x2018, 0x2019, 0x201c, 0x201d, 0x2022, 0x2013, 0x2014,
- 0x003f, 0x2122, 0x0459, 0x203a, 0x045a, 0x045c, 0x045b, 0x045f,
- 0x00a0, 0x040e, 0x045e, 0x0408, 0x00a4, 0x0490, 0x00a6, 0x00a7,
- 0x0401, 0x00a9, 0x0404, 0x00ab, 0x00ac, 0x00ad, 0x00ae, 0x0407,
- 0x00b0, 0x00b1, 0x0406, 0x0456, 0x0491, 0x00b5, 0x00b6, 0x00b7,
- 0x0451, 0x2116, 0x0454, 0x00bb, 0x0458, 0x0405, 0x0455, 0x0457,
- 0x0410, 0x0411, 0x0412, 0x0413, 0x0414, 0x0415, 0x0416, 0x0417,
- 0x0418, 0x0419, 0x041a, 0x041b, 0x041c, 0x041d, 0x041e, 0x041f,
- 0x0420, 0x0421, 0x0422, 0x0423, 0x0424, 0x0425, 0x0426, 0x0427,
- 0x0428, 0x0429, 0x042a, 0x042b, 0x042c, 0x042d, 0x042e, 0x042f,
- 0x0430, 0x0431, 0x0432, 0x0433, 0x0434, 0x0435, 0x0436, 0x0437,
- 0x0438, 0x0439, 0x043a, 0x043b, 0x043c, 0x043d, 0x043e, 0x043f,
- 0x0440, 0x0441, 0x0442, 0x0443, 0x0444, 0x0445, 0x0446, 0x0447,
- 0x0448, 0x0449, 0x044a, 0x044b, 0x044c, 0x044d, 0x044e, 0x044f
-};
-static const int cp1251_ucs_table_min = 0x80;
-static const int cp1251_ucs_table_len = (sizeof (cp1251_ucs_table) / sizeof (unsigned short));
-static const int cp1251_ucs_table_max = 0x80 + (sizeof (cp1251_ucs_table) / sizeof (unsigned short));
-
-#endif /* UNICODE_TABLE_CP1251_H */
diff --git a/ext/mbstring/libmbfl/filters/unicode_table_cp1252.h b/ext/mbstring/libmbfl/filters/unicode_table_cp1252.h
deleted file mode 100644
index 8a33920f11..0000000000
--- a/ext/mbstring/libmbfl/filters/unicode_table_cp1252.h
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * "streamable kanji code filter and converter"
- * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved.
- *
- * LICENSE NOTICES
- *
- * This file is part of "streamable kanji code filter and converter",
- * which is distributed under the terms of GNU Lesser General Public
- * License (version 2) as published by the Free Software Foundation.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with "streamable kanji code filter and converter";
- * if not, write to the Free Software Foundation, Inc., 59 Temple Place,
- * Suite 330, Boston, MA 02111-1307 USA
- *
- * The authors of this file: PHP3 internationalization team
- * You can contact the primary author 金本 茂 <sgk@happysize.co.jp>.
- *
- */
-
-#ifndef UNICODE_TABLE_CP1252_H
-#define UNICODE_TABLE_CP1252_H
-
-/* Windows CodePage 1252 - it's the same as iso-8859-1 but
- * defines extra symbols in the range 0x80-0x9f.
- * This table differs from the rest of the unicode tables below
- * as it only covers this range, while the rest cover 0xa0 onwards */
-
-static const unsigned short cp1252_ucs_table[] = {
- 0x20ac,0xfffe,0x201a,0x0192,0x201e,0x2026,0x2020,0x2021,
- 0x02c6,0x2030,0x0160,0x2039,0x0152,0xfffe,0x017d,0xfffe,
- 0xfffe,0x2018,0x2019,0x201c,0x201d,0x2022,0x2013,0x2014,
- 0x02dc,0x2122,0x0161,0x203a,0x0153,0xfffe,0x017e,0x0178
-};
-#endif /* UNICODE_TABLE_CP1252_H */
diff --git a/ext/mbstring/libmbfl/filters/unicode_table_cp866.h b/ext/mbstring/libmbfl/filters/unicode_table_cp866.h
deleted file mode 100644
index 567493276f..0000000000
--- a/ext/mbstring/libmbfl/filters/unicode_table_cp866.h
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * "streamable kanji code filter and converter"
- * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved.
- *
- * LICENSE NOTICES
- *
- * This file is part of "streamable kanji code filter and converter",
- * which is distributed under the terms of GNU Lesser General Public
- * License (version 2) as published by the Free Software Foundation.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with "streamable kanji code filter and converter";
- * if not, write to the Free Software Foundation, Inc., 59 Temple Place,
- * Suite 330, Boston, MA 02111-1307 USA
- *
- * The original author of this file: Den V. Tsopa <tdv@edisoft.ru>
- *
- */
-
-#ifndef UNICODE_TABLE_CP866_H
-#define UNICODE_TABLE_CP866_H
-
-/* cp866_DOSCyrillicRussian to Unicode table */
-static const unsigned short cp866_ucs_table[] = {
- 0x0410, 0x0411, 0x0412, 0x0413, 0x0414, 0x0415, 0x0416, 0x0417,
- 0x0418, 0x0419, 0x041a, 0x041b, 0x041c, 0x041d, 0x041e, 0x041f,
- 0x0420, 0x0421, 0x0422, 0x0423, 0x0424, 0x0425, 0x0426, 0x0427,
- 0x0428, 0x0429, 0x042a, 0x042b, 0x042c, 0x042d, 0x042e, 0x042f,
- 0x0430, 0x0431, 0x0432, 0x0433, 0x0434, 0x0435, 0x0436, 0x0437,
- 0x0438, 0x0439, 0x043a, 0x043b, 0x043c, 0x043d, 0x043e, 0x043f,
- 0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x2561, 0x2562, 0x2556,
- 0x2555, 0x2563, 0x2551, 0x2557, 0x255d, 0x255c, 0x255b, 0x2510,
- 0x2514, 0x2534, 0x252c, 0x251c, 0x2500, 0x253c, 0x255e, 0x255f,
- 0x255a, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256c, 0x2567,
- 0x2568, 0x2564, 0x2565, 0x2559, 0x2558, 0x2552, 0x2553, 0x256b,
- 0x256a, 0x2518, 0x250c, 0x2588, 0x2584, 0x258c, 0x2590, 0x2580,
- 0x0440, 0x0441, 0x0442, 0x0443, 0x0444, 0x0445, 0x0446, 0x0447,
- 0x0448, 0x0449, 0x044a, 0x044b, 0x044c, 0x044d, 0x044e, 0x044f,
- 0x0401, 0x0451, 0x0404, 0x0454, 0x0407, 0x0457, 0x040e, 0x045e,
- 0x00b0, 0x2219, 0x00b7, 0x221a, 0x2116, 0x00a4, 0x25a0, 0x00a0
-};
-static const int cp866_ucs_table_min = 0x80;
-static const int cp866_ucs_table_len = (sizeof (cp866_ucs_table) / sizeof (unsigned short));
-static const int cp866_ucs_table_max = 0x80 + (sizeof (cp866_ucs_table) / sizeof (unsigned short));
-
-#endif /* UNICODE_TABLE_CP866_H */
diff --git a/ext/mbstring/libmbfl/filters/unicode_table_cp932_ext.h b/ext/mbstring/libmbfl/filters/unicode_table_cp932_ext.h
deleted file mode 100644
index c948dfa16b..0000000000
--- a/ext/mbstring/libmbfl/filters/unicode_table_cp932_ext.h
+++ /dev/null
@@ -1,170 +0,0 @@
-/*
- * "streamable kanji code filter and converter"
- * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved.
- *
- * LICENSE NOTICES
- *
- * This file is part of "streamable kanji code filter and converter",
- * which is distributed under the terms of GNU Lesser General Public
- * License (version 2) as published by the Free Software Foundation.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with "streamable kanji code filter and converter";
- * if not, write to the Free Software Foundation, Inc., 59 Temple Place,
- * Suite 330, Boston, MA 02111-1307 USA
- *
- * The author of this file: Rui Hirokawa <hirokawa@php.net>
- *
- */
-
-#ifndef UNICODE_TABLE_CP932_EXT_H
-#define UNICODE_TABLE_CP932_EXT_H
-
-static const unsigned short cp932ext1_ucs_table[] = {
- /* ku 13 */
- 0x2460,0x2461,0x2462,0x2463,0x2464,0x2465,0x2466,0x2467,
- 0x2468,0x2469,0x246A,0x246B,0x246C,0x246D,0x246E,0x246F,
- 0x2470,0x2471,0x2472,0x2473,0x2160,0x2161,0x2162,0x2163,
- 0x2164,0x2165,0x2166,0x2167,0x2168,0x2169,0x0000,0x3349,
- 0x3314,0x3322,0x334D,0x3318,0x3327,0x3303,0x3336,0x3351,
- 0x3357,0x330D,0x3326,0x3323,0x332B,0x334A,0x333B,0x339C,
- 0x339D,0x339E,0x338E,0x338F,0x33C4,0x33A1,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x337B,0x301D,
- 0x301F,0x2116,0x33CD,0x2121,0x32A4,0x32A5,0x32A6,0x32A7,
- 0x32A8,0x3231,0x3232,0x3239,0x337E,0x337D,0x337C,0x2252,
- 0x2261,0x222B,0x222E,0x2211,0x221A,0x22A5,0x2220,0x221F,
- 0x22BF,0x2235,0x2229,0x222A,0x0000,0x0000
-};
-static const int cp932ext1_ucs_table_min = (13 - 1)*94;
-static const int cp932ext1_ucs_table_max = (13 - 1)*94 + (sizeof (cp932ext1_ucs_table) / sizeof (unsigned short));
-
-static const unsigned short cp932ext2_ucs_table[] = {
- /* ku 89 */
- 0x7E8A,0x891C,0x9348,0x9288,0x84DC,0x4FC9,0x70BB,0x6631,
- 0x68C8,0x92F9,0x66FB,0x5F45,0x4E28,0x4EE1,0x4EFC,0x4F00,
- 0x4F03,0x4F39,0x4F56,0x4F92,0x4F8A,0x4F9A,0x4F94,0x4FCD,
- 0x5040,0x5022,0x4FFF,0x501E,0x5046,0x5070,0x5042,0x5094,
- 0x50F4,0x50D8,0x514A,0x5164,0x519D,0x51BE,0x51EC,0x5215,
- 0x529C,0x52A6,0x52C0,0x52DB,0x5300,0x5307,0x5324,0x5372,
- 0x5393,0x53B2,0x53DD,0xFA0E,0x549C,0x548A,0x54A9,0x54FF,
- 0x5586,0x5759,0x5765,0x57AC,0x57C8,0x57C7,0xFA0F,0xFA10,
- 0x589E,0x58B2,0x590B,0x5953,0x595B,0x595D,0x5963,0x59A4,
- 0x59BA,0x5B56,0x5BC0,0x752F,0x5BD8,0x5BEC,0x5C1E,0x5CA6,
- 0x5CBA,0x5CF5,0x5D27,0x5D53,0xFA11,0x5D42,0x5D6D,0x5DB8,
- 0x5DB9,0x5DD0,0x5F21,0x5F34,0x5F67,0x5FB7,
-
- /* ku 90 */
- 0x5FDE,0x605D,0x6085,0x608A,0x60DE,0x60D5,0x6120,0x60F2,
- 0x6111,0x6137,0x6130,0x6198,0x6213,0x62A6,0x63F5,0x6460,
- 0x649D,0x64CE,0x654E,0x6600,0x6615,0x663B,0x6609,0x662E,
- 0x661E,0x6624,0x6665,0x6657,0x6659,0xFA12,0x6673,0x6699,
- 0x66A0,0x66B2,0x66BF,0x66FA,0x670E,0xF929,0x6766,0x67BB,
- 0x6852,0x67C0,0x6801,0x6844,0x68CF,0xFA13,0x6968,0xFA14,
- 0x6998,0x69E2,0x6A30,0x6A6B,0x6A46,0x6A73,0x6A7E,0x6AE2,
- 0x6AE4,0x6BD6,0x6C3F,0x6C5C,0x6C86,0x6C6F,0x6CDA,0x6D04,
- 0x6D87,0x6D6F,0x6D96,0x6DAC,0x6DCF,0x6DF8,0x6DF2,0x6DFC,
- 0x6E39,0x6E5C,0x6E27,0x6E3C,0x6EBF,0x6F88,0x6FB5,0x6FF5,
- 0x7005,0x7007,0x7028,0x7085,0x70AB,0x710F,0x7104,0x715C,
- 0x7146,0x7147,0xFA15,0x71C1,0x71FE,0x72B1,
-
- /* ku 91 */
- 0x72BE,0x7324,0xFA16,0x7377,0x73BD,0x73C9,0x73D6,0x73E3,
- 0x73D2,0x7407,0x73F5,0x7426,0x742A,0x7429,0x742E,0x7462,
- 0x7489,0x749F,0x7501,0x756F,0x7682,0x769C,0x769E,0x769B,
- 0x76A6,0xFA17,0x7746,0x52AF,0x7821,0x784E,0x7864,0x787A,
- 0x7930,0xFA18,0xFA19,0xFA1A,0x7994,0xFA1B,0x799B,0x7AD1,
- 0x7AE7,0xFA1C,0x7AEB,0x7B9E,0xFA1D,0x7D48,0x7D5C,0x7DB7,
- 0x7DA0,0x7DD6,0x7E52,0x7F47,0x7FA1,0xFA1E,0x8301,0x8362,
- 0x837F,0x83C7,0x83F6,0x8448,0x84B4,0x8553,0x8559,0x856B,
- 0xFA1F,0x85B0,0xFA20,0xFA21,0x8807,0x88F5,0x8A12,0x8A37,
- 0x8A79,0x8AA7,0x8ABE,0x8ADF,0xFA22,0x8AF6,0x8B53,0x8B7F,
- 0x8CF0,0x8CF4,0x8D12,0x8D76,0xFA23,0x8ECF,0xFA24,0xFA25,
- 0x9067,0x90DE,0xFA26,0x9115,0x9127,0x91DA,
-
- /* ku 92 */
- 0x91D7,0x91DE,0x91ED,0x91EE,0x91E4,0x91E5,0x9206,0x9210,
- 0x920A,0x923A,0x9240,0x923C,0x924E,0x9259,0x9251,0x9239,
- 0x9267,0x92A7,0x9277,0x9278,0x92E7,0x92D7,0x92D9,0x92D0,
- 0xFA27,0x92D5,0x92E0,0x92D3,0x9325,0x9321,0x92FB,0xFA28,
- 0x931E,0x92FF,0x931D,0x9302,0x9370,0x9357,0x93A4,0x93C6,
- 0x93DE,0x93F8,0x9431,0x9445,0x9448,0x9592,0xF9DC,0xFA29,
- 0x969D,0x96AF,0x9733,0x973B,0x9743,0x974D,0x974F,0x9751,
- 0x9755,0x9857,0x9865,0xFA2A,0xFA2B,0x9927,0xFA2C,0x999E,
- 0x9A4E,0x9AD9,0x9ADC,0x9B75,0x9B72,0x9B8F,0x9BB1,0x9BBB,
- 0x9C00,0x9D70,0x9D6B,0xFA2D,0x9E19,0x9ED1,0x0000,0x0000,
- 0x2170,0x2171,0x2172,0x2173,0x2174,0x2175,0x2176,0x2177,
- 0x2178,0x2179,0xFFE2,0xFFE4,0xFF07,0xFF02
-};
-static const int cp932ext2_ucs_table_min = (89 - 1)*94;
-static const int cp932ext2_ucs_table_max = (89 - 1)*94 + (sizeof (cp932ext2_ucs_table) / sizeof (unsigned short));
-
-static const unsigned short cp932ext3_ucs_table[] = {
- /* ku 115 */
- 0x2170,0x2171,0x2172,0x2173,0x2174,0x2175,0x2176,0x2177,
- 0x2178,0x2179,0x2160,0x2161,0x2162,0x2163,0x2164,0x2165,
- 0x2166,0x2167,0x2168,0x2169,0xFFE2,0xFFE4,0xFF07,0xFF02,
- 0x3231,0x2116,0x2121,0x2235,0x7E8A,0x891C,0x9348,0x9288,
- 0x84DC,0x4FC9,0x70BB,0x6631,0x68C8,0x92F9,0x66FB,0x5F45,
- 0x4E28,0x4EE1,0x4EFC,0x4F00,0x4F03,0x4F39,0x4F56,0x4F92,
- 0x4F8A,0x4F9A,0x4F94,0x4FCD,0x5040,0x5022,0x4FFF,0x501E,
- 0x5046,0x5070,0x5042,0x5094,0x50F4,0x50D8,0x514A,0x5164,
- 0x519D,0x51BE,0x51EC,0x5215,0x529C,0x52A6,0x52C0,0x52DB,
- 0x5300,0x5307,0x5324,0x5372,0x5393,0x53B2,0x53DD,0xFA0E,
- 0x549C,0x548A,0x54A9,0x54FF,0x5586,0x5759,0x5765,0x57AC,
- 0x57C8,0x57C7,0xFA0F,0xFA10,0x589E,0x58B2,
-
- /* ku 116 */
- 0x590B,0x5953,0x595B,0x595D,0x5963,0x59A4,0x59BA,0x5B56,
- 0x5BC0,0x752F,0x5BD8,0x5BEC,0x5C1E,0x5CA6,0x5CBA,0x5CF5,
- 0x5D27,0x5D53,0xFA11,0x5D42,0x5D6D,0x5DB8,0x5DB9,0x5DD0,
- 0x5F21,0x5F34,0x5F67,0x5FB7,0x5FDE,0x605D,0x6085,0x608A,
- 0x60DE,0x60D5,0x6120,0x60F2,0x6111,0x6137,0x6130,0x6198,
- 0x6213,0x62A6,0x63F5,0x6460,0x649D,0x64CE,0x654E,0x6600,
- 0x6615,0x663B,0x6609,0x662E,0x661E,0x6624,0x6665,0x6657,
- 0x6659,0xFA12,0x6673,0x6699,0x66A0,0x66B2,0x66BF,0x66FA,
- 0x670E,0xF929,0x6766,0x67BB,0x6852,0x67C0,0x6801,0x6844,
- 0x68CF,0xFA13,0x6968,0xFA14,0x6998,0x69E2,0x6A30,0x6A6B,
- 0x6A46,0x6A73,0x6A7E,0x6AE2,0x6AE4,0x6BD6,0x6C3F,0x6C5C,
- 0x6C86,0x6C6F,0x6CDA,0x6D04,0x6D87,0x6D6F,
-
- /* ku 117 */
- 0x6D96,0x6DAC,0x6DCF,0x6DF8,0x6DF2,0x6DFC,0x6E39,0x6E5C,
- 0x6E27,0x6E3C,0x6EBF,0x6F88,0x6FB5,0x6FF5,0x7005,0x7007,
- 0x7028,0x7085,0x70AB,0x710F,0x7104,0x715C,0x7146,0x7147,
- 0xFA15,0x71C1,0x71FE,0x72B1,0x72BE,0x7324,0xFA16,0x7377,
- 0x73BD,0x73C9,0x73D6,0x73E3,0x73D2,0x7407,0x73F5,0x7426,
- 0x742A,0x7429,0x742E,0x7462,0x7489,0x749F,0x7501,0x756F,
- 0x7682,0x769C,0x769E,0x769B,0x76A6,0xFA17,0x7746,0x52AF,
- 0x7821,0x784E,0x7864,0x787A,0x7930,0xFA18,0xFA19,0xFA1A,
- 0x7994,0xFA1B,0x799B,0x7AD1,0x7AE7,0xFA1C,0x7AEB,0x7B9E,
- 0xFA1D,0x7D48,0x7D5C,0x7DB7,0x7DA0,0x7DD6,0x7E52,0x7F47,
- 0x7FA1,0xFA1E,0x8301,0x8362,0x837F,0x83C7,0x83F6,0x8448,
- 0x84B4,0x8553,0x8559,0x856B,0xFA1F,0x85B0,
-
- /* ku 118 */
- 0xFA20,0xFA21,0x8807,0x88F5,0x8A12,0x8A37,0x8A79,0x8AA7,
- 0x8ABE,0x8ADF,0xFA22,0x8AF6,0x8B53,0x8B7F,0x8CF0,0x8CF4,
- 0x8D12,0x8D76,0xFA23,0x8ECF,0xFA24,0xFA25,0x9067,0x90DE,
- 0xFA26,0x9115,0x9127,0x91DA,0x91D7,0x91DE,0x91ED,0x91EE,
- 0x91E4,0x91E5,0x9206,0x9210,0x920A,0x923A,0x9240,0x923C,
- 0x924E,0x9259,0x9251,0x9239,0x9267,0x92A7,0x9277,0x9278,
- 0x92E7,0x92D7,0x92D9,0x92D0,0xFA27,0x92D5,0x92E0,0x92D3,
- 0x9325,0x9321,0x92FB,0xFA28,0x931E,0x92FF,0x931D,0x9302,
- 0x9370,0x9357,0x93A4,0x93C6,0x93DE,0x93F8,0x9431,0x9445,
- 0x9448,0x9592,0xF9DC,0xFA29,0x969D,0x96AF,0x9733,0x973B,
- 0x9743,0x974D,0x974F,0x9751,0x9755,0x9857,0x9865,0xFA2A,
- 0xFA2B,0x9927,0xFA2C,0x999E,0x9A4E,0x9AD9,
-
- /* ku 119 */
- 0x9ADC,0x9B75,0x9B72,0x9B8F,0x9BB1,0x9BBB,0x9C00,0x9D70,
- 0x9D6B,0xFA2D,0x9E19,0x9ED1
-};
-static const int cp932ext3_ucs_table_min = (115 - 1)*94;
-static const int cp932ext3_ucs_table_max = (115 - 1)*94 + (sizeof (cp932ext3_ucs_table) / sizeof (unsigned short));
-
-#endif /* UNICODE_TABLE_CP932_EXT_H */
diff --git a/ext/mbstring/libmbfl/filters/unicode_table_cp936.h b/ext/mbstring/libmbfl/filters/unicode_table_cp936.h
deleted file mode 100644
index aa024d1a45..0000000000
--- a/ext/mbstring/libmbfl/filters/unicode_table_cp936.h
+++ /dev/null
@@ -1,6489 +0,0 @@
-/*
- * "streamable kanji code filter and converter"
- * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved.
- *
- * LICENSE NOTICES
- *
- * This file is part of "streamable kanji code filter and converter",
- * which is distributed under the terms of GNU Lesser General Public
- * License (version 2) as published by the Free Software Foundation.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with "streamable kanji code filter and converter";
- * if not, write to the Free Software Foundation, Inc., 59 Temple Place,
- * Suite 330, Boston, MA 02111-1307 USA
- *
- * The author of this file: Rui Hirokawa <hirokawa@php.net>
- *
- */
-
-#ifndef UNICODE_TABLE_CP936_H
-#define UNICODE_TABLE_CP936_H
-
-/*
- * Unicode table
- */
-
-static const unsigned short cp936_ucs_table[] = {
-/* 0x8100 */
-0x4e02,0x4e04,0x4e05,0x4e06,0x4e0f,0x4e12,0x4e17,0x4e1f,
-0x4e20,0x4e21,0x4e23,0x4e26,0x4e29,0x4e2e,0x4e2f,0x4e31,
-0x4e33,0x4e35,0x4e37,0x4e3c,0x4e40,0x4e41,0x4e42,0x4e44,
-0x4e46,0x4e4a,0x4e51,0x4e55,0x4e57,0x4e5a,0x4e5b,0x4e62,
-0x4e63,0x4e64,0x4e65,0x4e67,0x4e68,0x4e6a,0x4e6b,0x4e6c,
-0x4e6d,0x4e6e,0x4e6f,0x4e72,0x4e74,0x4e75,0x4e76,0x4e77,
-0x4e78,0x4e79,0x4e7a,0x4e7b,0x4e7c,0x4e7d,0x4e7f,0x4e80,
-0x4e81,0x4e82,0x4e83,0x4e84,0x4e85,0x4e87,0x4e8a,0x0000,
-0x4e90,0x4e96,0x4e97,0x4e99,0x4e9c,0x4e9d,0x4e9e,0x4ea3,
-0x4eaa,0x4eaf,0x4eb0,0x4eb1,0x4eb4,0x4eb6,0x4eb7,0x4eb8,
-0x4eb9,0x4ebc,0x4ebd,0x4ebe,0x4ec8,0x4ecc,0x4ecf,0x4ed0,
-0x4ed2,0x4eda,0x4edb,0x4edc,0x4ee0,0x4ee2,0x4ee6,0x4ee7,
-0x4ee9,0x4eed,0x4eee,0x4eef,0x4ef1,0x4ef4,0x4ef8,0x4ef9,
-0x4efa,0x4efc,0x4efe,0x4f00,0x4f02,0x4f03,0x4f04,0x4f05,
-0x4f06,0x4f07,0x4f08,0x4f0b,0x4f0c,0x4f12,0x4f13,0x4f14,
-0x4f15,0x4f16,0x4f1c,0x4f1d,0x4f21,0x4f23,0x4f28,0x4f29,
-0x4f2c,0x4f2d,0x4f2e,0x4f31,0x4f33,0x4f35,0x4f37,0x4f39,
-0x4f3b,0x4f3e,0x4f3f,0x4f40,0x4f41,0x4f42,0x4f44,0x4f45,
-0x4f47,0x4f48,0x4f49,0x4f4a,0x4f4b,0x4f4c,0x4f52,0x4f54,
-0x4f56,0x4f61,0x4f62,0x4f66,0x4f68,0x4f6a,0x4f6b,0x4f6d,
-0x4f6e,0x4f71,0x4f72,0x4f75,0x4f77,0x4f78,0x4f79,0x4f7a,
-0x4f7d,0x4f80,0x4f81,0x4f82,0x4f85,0x4f86,0x4f87,0x4f8a,
-0x4f8c,0x4f8e,0x4f90,0x4f92,0x4f93,0x4f95,0x4f96,0x4f98,
-0x4f99,0x4f9a,0x4f9c,0x4f9e,0x4f9f,0x4fa1,0x4fa2,0x0000,
-/* 0x8200 */
-0x4fa4,0x4fab,0x4fad,0x4fb0,0x4fb1,0x4fb2,0x4fb3,0x4fb4,
-0x4fb6,0x4fb7,0x4fb8,0x4fb9,0x4fba,0x4fbb,0x4fbc,0x4fbd,
-0x4fbe,0x4fc0,0x4fc1,0x4fc2,0x4fc6,0x4fc7,0x4fc8,0x4fc9,
-0x4fcb,0x4fcc,0x4fcd,0x4fd2,0x4fd3,0x4fd4,0x4fd5,0x4fd6,
-0x4fd9,0x4fdb,0x4fe0,0x4fe2,0x4fe4,0x4fe5,0x4fe7,0x4feb,
-0x4fec,0x4ff0,0x4ff2,0x4ff4,0x4ff5,0x4ff6,0x4ff7,0x4ff9,
-0x4ffb,0x4ffc,0x4ffd,0x4fff,0x5000,0x5001,0x5002,0x5003,
-0x5004,0x5005,0x5006,0x5007,0x5008,0x5009,0x500a,0x0000,
-0x500b,0x500e,0x5010,0x5011,0x5013,0x5015,0x5016,0x5017,
-0x501b,0x501d,0x501e,0x5020,0x5022,0x5023,0x5024,0x5027,
-0x502b,0x502f,0x5030,0x5031,0x5032,0x5033,0x5034,0x5035,
-0x5036,0x5037,0x5038,0x5039,0x503b,0x503d,0x503f,0x5040,
-0x5041,0x5042,0x5044,0x5045,0x5046,0x5049,0x504a,0x504b,
-0x504d,0x5050,0x5051,0x5052,0x5053,0x5054,0x5056,0x5057,
-0x5058,0x5059,0x505b,0x505d,0x505e,0x505f,0x5060,0x5061,
-0x5062,0x5063,0x5064,0x5066,0x5067,0x5068,0x5069,0x506a,
-0x506b,0x506d,0x506e,0x506f,0x5070,0x5071,0x5072,0x5073,
-0x5074,0x5075,0x5078,0x5079,0x507a,0x507c,0x507d,0x5081,
-0x5082,0x5083,0x5084,0x5086,0x5087,0x5089,0x508a,0x508b,
-0x508c,0x508e,0x508f,0x5090,0x5091,0x5092,0x5093,0x5094,
-0x5095,0x5096,0x5097,0x5098,0x5099,0x509a,0x509b,0x509c,
-0x509d,0x509e,0x509f,0x50a0,0x50a1,0x50a2,0x50a4,0x50a6,
-0x50aa,0x50ab,0x50ad,0x50ae,0x50af,0x50b0,0x50b1,0x50b3,
-0x50b4,0x50b5,0x50b6,0x50b7,0x50b8,0x50b9,0x50bc,0x0000,
-/* 0x8300 */
-0x50bd,0x50be,0x50bf,0x50c0,0x50c1,0x50c2,0x50c3,0x50c4,
-0x50c5,0x50c6,0x50c7,0x50c8,0x50c9,0x50ca,0x50cb,0x50cc,
-0x50cd,0x50ce,0x50d0,0x50d1,0x50d2,0x50d3,0x50d4,0x50d5,
-0x50d7,0x50d8,0x50d9,0x50db,0x50dc,0x50dd,0x50de,0x50df,
-0x50e0,0x50e1,0x50e2,0x50e3,0x50e4,0x50e5,0x50e8,0x50e9,
-0x50ea,0x50eb,0x50ef,0x50f0,0x50f1,0x50f2,0x50f4,0x50f6,
-0x50f7,0x50f8,0x50f9,0x50fa,0x50fc,0x50fd,0x50fe,0x50ff,
-0x5100,0x5101,0x5102,0x5103,0x5104,0x5105,0x5108,0x0000,
-0x5109,0x510a,0x510c,0x510d,0x510e,0x510f,0x5110,0x5111,
-0x5113,0x5114,0x5115,0x5116,0x5117,0x5118,0x5119,0x511a,
-0x511b,0x511c,0x511d,0x511e,0x511f,0x5120,0x5122,0x5123,
-0x5124,0x5125,0x5126,0x5127,0x5128,0x5129,0x512a,0x512b,
-0x512c,0x512d,0x512e,0x512f,0x5130,0x5131,0x5132,0x5133,
-0x5134,0x5135,0x5136,0x5137,0x5138,0x5139,0x513a,0x513b,
-0x513c,0x513d,0x513e,0x5142,0x5147,0x514a,0x514c,0x514e,
-0x514f,0x5150,0x5152,0x5153,0x5157,0x5158,0x5159,0x515b,
-0x515d,0x515e,0x515f,0x5160,0x5161,0x5163,0x5164,0x5166,
-0x5167,0x5169,0x516a,0x516f,0x5172,0x517a,0x517e,0x517f,
-0x5183,0x5184,0x5186,0x5187,0x518a,0x518b,0x518e,0x518f,
-0x5190,0x5191,0x5193,0x5194,0x5198,0x519a,0x519d,0x519e,
-0x519f,0x51a1,0x51a3,0x51a6,0x51a7,0x51a8,0x51a9,0x51aa,
-0x51ad,0x51ae,0x51b4,0x51b8,0x51b9,0x51ba,0x51be,0x51bf,
-0x51c1,0x51c2,0x51c3,0x51c5,0x51c8,0x51ca,0x51cd,0x51ce,
-0x51d0,0x51d2,0x51d3,0x51d4,0x51d5,0x51d6,0x51d7,0x0000,
-/* 0x8400 */
-0x51d8,0x51d9,0x51da,0x51dc,0x51de,0x51df,0x51e2,0x51e3,
-0x51e5,0x51e6,0x51e7,0x51e8,0x51e9,0x51ea,0x51ec,0x51ee,
-0x51f1,0x51f2,0x51f4,0x51f7,0x51fe,0x5204,0x5205,0x5209,
-0x520b,0x520c,0x520f,0x5210,0x5213,0x5214,0x5215,0x521c,
-0x521e,0x521f,0x5221,0x5222,0x5223,0x5225,0x5226,0x5227,
-0x522a,0x522c,0x522f,0x5231,0x5232,0x5234,0x5235,0x523c,
-0x523e,0x5244,0x5245,0x5246,0x5247,0x5248,0x5249,0x524b,
-0x524e,0x524f,0x5252,0x5253,0x5255,0x5257,0x5258,0x0000,
-0x5259,0x525a,0x525b,0x525d,0x525f,0x5260,0x5262,0x5263,
-0x5264,0x5266,0x5268,0x526b,0x526c,0x526d,0x526e,0x5270,
-0x5271,0x5273,0x5274,0x5275,0x5276,0x5277,0x5278,0x5279,
-0x527a,0x527b,0x527c,0x527e,0x5280,0x5283,0x5284,0x5285,
-0x5286,0x5287,0x5289,0x528a,0x528b,0x528c,0x528d,0x528e,
-0x528f,0x5291,0x5292,0x5294,0x5295,0x5296,0x5297,0x5298,
-0x5299,0x529a,0x529c,0x52a4,0x52a5,0x52a6,0x52a7,0x52ae,
-0x52af,0x52b0,0x52b4,0x52b5,0x52b6,0x52b7,0x52b8,0x52b9,
-0x52ba,0x52bb,0x52bc,0x52bd,0x52c0,0x52c1,0x52c2,0x52c4,
-0x52c5,0x52c6,0x52c8,0x52ca,0x52cc,0x52cd,0x52ce,0x52cf,
-0x52d1,0x52d3,0x52d4,0x52d5,0x52d7,0x52d9,0x52da,0x52db,
-0x52dc,0x52dd,0x52de,0x52e0,0x52e1,0x52e2,0x52e3,0x52e5,
-0x52e6,0x52e7,0x52e8,0x52e9,0x52ea,0x52eb,0x52ec,0x52ed,
-0x52ee,0x52ef,0x52f1,0x52f2,0x52f3,0x52f4,0x52f5,0x52f6,
-0x52f7,0x52f8,0x52fb,0x52fc,0x52fd,0x5301,0x5302,0x5303,
-0x5304,0x5307,0x5309,0x530a,0x530b,0x530c,0x530e,0x0000,
-/* 0x8500 */
-0x5311,0x5312,0x5313,0x5314,0x5318,0x531b,0x531c,0x531e,
-0x531f,0x5322,0x5324,0x5325,0x5327,0x5328,0x5329,0x532b,
-0x532c,0x532d,0x532f,0x5330,0x5331,0x5332,0x5333,0x5334,
-0x5335,0x5336,0x5337,0x5338,0x533c,0x533d,0x5340,0x5342,
-0x5344,0x5346,0x534b,0x534c,0x534d,0x5350,0x5354,0x5358,
-0x5359,0x535b,0x535d,0x5365,0x5368,0x536a,0x536c,0x536d,
-0x5372,0x5376,0x5379,0x537b,0x537c,0x537d,0x537e,0x5380,
-0x5381,0x5383,0x5387,0x5388,0x538a,0x538e,0x538f,0x0000,
-0x5390,0x5391,0x5392,0x5393,0x5394,0x5396,0x5397,0x5399,
-0x539b,0x539c,0x539e,0x53a0,0x53a1,0x53a4,0x53a7,0x53aa,
-0x53ab,0x53ac,0x53ad,0x53af,0x53b0,0x53b1,0x53b2,0x53b3,
-0x53b4,0x53b5,0x53b7,0x53b8,0x53b9,0x53ba,0x53bc,0x53bd,
-0x53be,0x53c0,0x53c3,0x53c4,0x53c5,0x53c6,0x53c7,0x53ce,
-0x53cf,0x53d0,0x53d2,0x53d3,0x53d5,0x53da,0x53dc,0x53dd,
-0x53de,0x53e1,0x53e2,0x53e7,0x53f4,0x53fa,0x53fe,0x53ff,
-0x5400,0x5402,0x5405,0x5407,0x540b,0x5414,0x5418,0x5419,
-0x541a,0x541c,0x5422,0x5424,0x5425,0x542a,0x5430,0x5433,
-0x5436,0x5437,0x543a,0x543d,0x543f,0x5441,0x5442,0x5444,
-0x5445,0x5447,0x5449,0x544c,0x544d,0x544e,0x544f,0x5451,
-0x545a,0x545d,0x545e,0x545f,0x5460,0x5461,0x5463,0x5465,
-0x5467,0x5469,0x546a,0x546b,0x546c,0x546d,0x546e,0x546f,
-0x5470,0x5474,0x5479,0x547a,0x547e,0x547f,0x5481,0x5483,
-0x5485,0x5487,0x5488,0x5489,0x548a,0x548d,0x5491,0x5493,
-0x5497,0x5498,0x549c,0x549e,0x549f,0x54a0,0x54a1,0x0000,
-/* 0x8600 */
-0x54a2,0x54a5,0x54ae,0x54b0,0x54b2,0x54b5,0x54b6,0x54b7,
-0x54b9,0x54ba,0x54bc,0x54be,0x54c3,0x54c5,0x54ca,0x54cb,
-0x54d6,0x54d8,0x54db,0x54e0,0x54e1,0x54e2,0x54e3,0x54e4,
-0x54eb,0x54ec,0x54ef,0x54f0,0x54f1,0x54f4,0x54f5,0x54f6,
-0x54f7,0x54f8,0x54f9,0x54fb,0x54fe,0x5500,0x5502,0x5503,
-0x5504,0x5505,0x5508,0x550a,0x550b,0x550c,0x550d,0x550e,
-0x5512,0x5513,0x5515,0x5516,0x5517,0x5518,0x5519,0x551a,
-0x551c,0x551d,0x551e,0x551f,0x5521,0x5525,0x5526,0x0000,
-0x5528,0x5529,0x552b,0x552d,0x5532,0x5534,0x5535,0x5536,
-0x5538,0x5539,0x553a,0x553b,0x553d,0x5540,0x5542,0x5545,
-0x5547,0x5548,0x554b,0x554c,0x554d,0x554e,0x554f,0x5551,
-0x5552,0x5553,0x5554,0x5557,0x5558,0x5559,0x555a,0x555b,
-0x555d,0x555e,0x555f,0x5560,0x5562,0x5563,0x5568,0x5569,
-0x556b,0x556f,0x5570,0x5571,0x5572,0x5573,0x5574,0x5579,
-0x557a,0x557d,0x557f,0x5585,0x5586,0x558c,0x558d,0x558e,
-0x5590,0x5592,0x5593,0x5595,0x5596,0x5597,0x559a,0x559b,
-0x559e,0x55a0,0x55a1,0x55a2,0x55a3,0x55a4,0x55a5,0x55a6,
-0x55a8,0x55a9,0x55aa,0x55ab,0x55ac,0x55ad,0x55ae,0x55af,
-0x55b0,0x55b2,0x55b4,0x55b6,0x55b8,0x55ba,0x55bc,0x55bf,
-0x55c0,0x55c1,0x55c2,0x55c3,0x55c6,0x55c7,0x55c8,0x55ca,
-0x55cb,0x55ce,0x55cf,0x55d0,0x55d5,0x55d7,0x55d8,0x55d9,
-0x55da,0x55db,0x55de,0x55e0,0x55e2,0x55e7,0x55e9,0x55ed,
-0x55ee,0x55f0,0x55f1,0x55f4,0x55f6,0x55f8,0x55f9,0x55fa,
-0x55fb,0x55fc,0x55ff,0x5602,0x5603,0x5604,0x5605,0x0000,
-/* 0x8700 */
-0x5606,0x5607,0x560a,0x560b,0x560d,0x5610,0x5611,0x5612,
-0x5613,0x5614,0x5615,0x5616,0x5617,0x5619,0x561a,0x561c,
-0x561d,0x5620,0x5621,0x5622,0x5625,0x5626,0x5628,0x5629,
-0x562a,0x562b,0x562e,0x562f,0x5630,0x5633,0x5635,0x5637,
-0x5638,0x563a,0x563c,0x563d,0x563e,0x5640,0x5641,0x5642,
-0x5643,0x5644,0x5645,0x5646,0x5647,0x5648,0x5649,0x564a,
-0x564b,0x564f,0x5650,0x5651,0x5652,0x5653,0x5655,0x5656,
-0x565a,0x565b,0x565d,0x565e,0x565f,0x5660,0x5661,0x0000,
-0x5663,0x5665,0x5666,0x5667,0x566d,0x566e,0x566f,0x5670,
-0x5672,0x5673,0x5674,0x5675,0x5677,0x5678,0x5679,0x567a,
-0x567d,0x567e,0x567f,0x5680,0x5681,0x5682,0x5683,0x5684,
-0x5687,0x5688,0x5689,0x568a,0x568b,0x568c,0x568d,0x5690,
-0x5691,0x5692,0x5694,0x5695,0x5696,0x5697,0x5698,0x5699,
-0x569a,0x569b,0x569c,0x569d,0x569e,0x569f,0x56a0,0x56a1,
-0x56a2,0x56a4,0x56a5,0x56a6,0x56a7,0x56a8,0x56a9,0x56aa,
-0x56ab,0x56ac,0x56ad,0x56ae,0x56b0,0x56b1,0x56b2,0x56b3,
-0x56b4,0x56b5,0x56b6,0x56b8,0x56b9,0x56ba,0x56bb,0x56bd,
-0x56be,0x56bf,0x56c0,0x56c1,0x56c2,0x56c3,0x56c4,0x56c5,
-0x56c6,0x56c7,0x56c8,0x56c9,0x56cb,0x56cc,0x56cd,0x56ce,
-0x56cf,0x56d0,0x56d1,0x56d2,0x56d3,0x56d5,0x56d6,0x56d8,
-0x56d9,0x56dc,0x56e3,0x56e5,0x56e6,0x56e7,0x56e8,0x56e9,
-0x56ea,0x56ec,0x56ee,0x56ef,0x56f2,0x56f3,0x56f6,0x56f7,
-0x56f8,0x56fb,0x56fc,0x5700,0x5701,0x5702,0x5705,0x5707,
-0x570b,0x570c,0x570d,0x570e,0x570f,0x5710,0x5711,0x0000,
-/* 0x8800 */
-0x5712,0x5713,0x5714,0x5715,0x5716,0x5717,0x5718,0x5719,
-0x571a,0x571b,0x571d,0x571e,0x5720,0x5721,0x5722,0x5724,
-0x5725,0x5726,0x5727,0x572b,0x5731,0x5732,0x5734,0x5735,
-0x5736,0x5737,0x5738,0x573c,0x573d,0x573f,0x5741,0x5743,
-0x5744,0x5745,0x5746,0x5748,0x5749,0x574b,0x5752,0x5753,
-0x5754,0x5755,0x5756,0x5758,0x5759,0x5762,0x5763,0x5765,
-0x5767,0x576c,0x576e,0x5770,0x5771,0x5772,0x5774,0x5775,
-0x5778,0x5779,0x577a,0x577d,0x577e,0x577f,0x5780,0x0000,
-0x5781,0x5787,0x5788,0x5789,0x578a,0x578d,0x578e,0x578f,
-0x5790,0x5791,0x5794,0x5795,0x5796,0x5797,0x5798,0x5799,
-0x579a,0x579c,0x579d,0x579e,0x579f,0x57a5,0x57a8,0x57aa,
-0x57ac,0x57af,0x57b0,0x57b1,0x57b3,0x57b5,0x57b6,0x57b7,
-0x57b9,0x57ba,0x57bb,0x57bc,0x57bd,0x57be,0x57bf,0x57c0,
-0x57c1,0x57c4,0x57c5,0x57c6,0x57c7,0x57c8,0x57c9,0x57ca,
-0x57cc,0x57cd,0x57d0,0x57d1,0x57d3,0x57d6,0x57d7,0x57db,
-0x57dc,0x57de,0x57e1,0x57e2,0x57e3,0x57e5,0x57e6,0x57e7,
-0x57e8,0x57e9,0x57ea,0x57eb,0x57ec,0x57ee,0x57f0,0x57f1,
-0x57f2,0x57f3,0x57f5,0x57f6,0x57f7,0x57fb,0x57fc,0x57fe,
-0x57ff,0x5801,0x5803,0x5804,0x5805,0x5808,0x5809,0x580a,
-0x580c,0x580e,0x580f,0x5810,0x5812,0x5813,0x5814,0x5816,
-0x5817,0x5818,0x581a,0x581b,0x581c,0x581d,0x581f,0x5822,
-0x5823,0x5825,0x5826,0x5827,0x5828,0x5829,0x582b,0x582c,
-0x582d,0x582e,0x582f,0x5831,0x5832,0x5833,0x5834,0x5836,
-0x5837,0x5838,0x5839,0x583a,0x583b,0x583c,0x583d,0x0000,
-/* 0x8900 */
-0x583e,0x583f,0x5840,0x5841,0x5842,0x5843,0x5845,0x5846,
-0x5847,0x5848,0x5849,0x584a,0x584b,0x584e,0x584f,0x5850,
-0x5852,0x5853,0x5855,0x5856,0x5857,0x5859,0x585a,0x585b,
-0x585c,0x585d,0x585f,0x5860,0x5861,0x5862,0x5863,0x5864,
-0x5866,0x5867,0x5868,0x5869,0x586a,0x586d,0x586e,0x586f,
-0x5870,0x5871,0x5872,0x5873,0x5874,0x5875,0x5876,0x5877,
-0x5878,0x5879,0x587a,0x587b,0x587c,0x587d,0x587f,0x5882,
-0x5884,0x5886,0x5887,0x5888,0x588a,0x588b,0x588c,0x0000,
-0x588d,0x588e,0x588f,0x5890,0x5891,0x5894,0x5895,0x5896,
-0x5897,0x5898,0x589b,0x589c,0x589d,0x58a0,0x58a1,0x58a2,
-0x58a3,0x58a4,0x58a5,0x58a6,0x58a7,0x58aa,0x58ab,0x58ac,
-0x58ad,0x58ae,0x58af,0x58b0,0x58b1,0x58b2,0x58b3,0x58b4,
-0x58b5,0x58b6,0x58b7,0x58b8,0x58b9,0x58ba,0x58bb,0x58bd,
-0x58be,0x58bf,0x58c0,0x58c2,0x58c3,0x58c4,0x58c6,0x58c7,
-0x58c8,0x58c9,0x58ca,0x58cb,0x58cc,0x58cd,0x58ce,0x58cf,
-0x58d0,0x58d2,0x58d3,0x58d4,0x58d6,0x58d7,0x58d8,0x58d9,
-0x58da,0x58db,0x58dc,0x58dd,0x58de,0x58df,0x58e0,0x58e1,
-0x58e2,0x58e3,0x58e5,0x58e6,0x58e7,0x58e8,0x58e9,0x58ea,
-0x58ed,0x58ef,0x58f1,0x58f2,0x58f4,0x58f5,0x58f7,0x58f8,
-0x58fa,0x58fb,0x58fc,0x58fd,0x58fe,0x58ff,0x5900,0x5901,
-0x5903,0x5905,0x5906,0x5908,0x5909,0x590a,0x590b,0x590c,
-0x590e,0x5910,0x5911,0x5912,0x5913,0x5917,0x5918,0x591b,
-0x591d,0x591e,0x5920,0x5921,0x5922,0x5923,0x5926,0x5928,
-0x592c,0x5930,0x5932,0x5933,0x5935,0x5936,0x593b,0x0000,
-/* 0x8a00 */
-0x593d,0x593e,0x593f,0x5940,0x5943,0x5945,0x5946,0x594a,
-0x594c,0x594d,0x5950,0x5952,0x5953,0x5959,0x595b,0x595c,
-0x595d,0x595e,0x595f,0x5961,0x5963,0x5964,0x5966,0x5967,
-0x5968,0x5969,0x596a,0x596b,0x596c,0x596d,0x596e,0x596f,
-0x5970,0x5971,0x5972,0x5975,0x5977,0x597a,0x597b,0x597c,
-0x597e,0x597f,0x5980,0x5985,0x5989,0x598b,0x598c,0x598e,
-0x598f,0x5990,0x5991,0x5994,0x5995,0x5998,0x599a,0x599b,
-0x599c,0x599d,0x599f,0x59a0,0x59a1,0x59a2,0x59a6,0x0000,
-0x59a7,0x59ac,0x59ad,0x59b0,0x59b1,0x59b3,0x59b4,0x59b5,
-0x59b6,0x59b7,0x59b8,0x59ba,0x59bc,0x59bd,0x59bf,0x59c0,
-0x59c1,0x59c2,0x59c3,0x59c4,0x59c5,0x59c7,0x59c8,0x59c9,
-0x59cc,0x59cd,0x59ce,0x59cf,0x59d5,0x59d6,0x59d9,0x59db,
-0x59de,0x59df,0x59e0,0x59e1,0x59e2,0x59e4,0x59e6,0x59e7,
-0x59e9,0x59ea,0x59eb,0x59ed,0x59ee,0x59ef,0x59f0,0x59f1,
-0x59f2,0x59f3,0x59f4,0x59f5,0x59f6,0x59f7,0x59f8,0x59fa,
-0x59fc,0x59fd,0x59fe,0x5a00,0x5a02,0x5a0a,0x5a0b,0x5a0d,
-0x5a0e,0x5a0f,0x5a10,0x5a12,0x5a14,0x5a15,0x5a16,0x5a17,
-0x5a19,0x5a1a,0x5a1b,0x5a1d,0x5a1e,0x5a21,0x5a22,0x5a24,
-0x5a26,0x5a27,0x5a28,0x5a2a,0x5a2b,0x5a2c,0x5a2d,0x5a2e,
-0x5a2f,0x5a30,0x5a33,0x5a35,0x5a37,0x5a38,0x5a39,0x5a3a,
-0x5a3b,0x5a3d,0x5a3e,0x5a3f,0x5a41,0x5a42,0x5a43,0x5a44,
-0x5a45,0x5a47,0x5a48,0x5a4b,0x5a4c,0x5a4d,0x5a4e,0x5a4f,
-0x5a50,0x5a51,0x5a52,0x5a53,0x5a54,0x5a56,0x5a57,0x5a58,
-0x5a59,0x5a5b,0x5a5c,0x5a5d,0x5a5e,0x5a5f,0x5a60,0x0000,
-/* 0x8b00 */
-0x5a61,0x5a63,0x5a64,0x5a65,0x5a66,0x5a68,0x5a69,0x5a6b,
-0x5a6c,0x5a6d,0x5a6e,0x5a6f,0x5a70,0x5a71,0x5a72,0x5a73,
-0x5a78,0x5a79,0x5a7b,0x5a7c,0x5a7d,0x5a7e,0x5a80,0x5a81,
-0x5a82,0x5a83,0x5a84,0x5a85,0x5a86,0x5a87,0x5a88,0x5a89,
-0x5a8a,0x5a8b,0x5a8c,0x5a8d,0x5a8e,0x5a8f,0x5a90,0x5a91,
-0x5a93,0x5a94,0x5a95,0x5a96,0x5a97,0x5a98,0x5a99,0x5a9c,
-0x5a9d,0x5a9e,0x5a9f,0x5aa0,0x5aa1,0x5aa2,0x5aa3,0x5aa4,
-0x5aa5,0x5aa6,0x5aa7,0x5aa8,0x5aa9,0x5aab,0x5aac,0x0000,
-0x5aad,0x5aae,0x5aaf,0x5ab0,0x5ab1,0x5ab4,0x5ab6,0x5ab7,
-0x5ab9,0x5aba,0x5abb,0x5abc,0x5abd,0x5abf,0x5ac0,0x5ac3,
-0x5ac4,0x5ac5,0x5ac6,0x5ac7,0x5ac8,0x5aca,0x5acb,0x5acd,
-0x5ace,0x5acf,0x5ad0,0x5ad1,0x5ad3,0x5ad5,0x5ad7,0x5ad9,
-0x5ada,0x5adb,0x5add,0x5ade,0x5adf,0x5ae2,0x5ae4,0x5ae5,
-0x5ae7,0x5ae8,0x5aea,0x5aec,0x5aed,0x5aee,0x5aef,0x5af0,
-0x5af2,0x5af3,0x5af4,0x5af5,0x5af6,0x5af7,0x5af8,0x5af9,
-0x5afa,0x5afb,0x5afc,0x5afd,0x5afe,0x5aff,0x5b00,0x5b01,
-0x5b02,0x5b03,0x5b04,0x5b05,0x5b06,0x5b07,0x5b08,0x5b0a,
-0x5b0b,0x5b0c,0x5b0d,0x5b0e,0x5b0f,0x5b10,0x5b11,0x5b12,
-0x5b13,0x5b14,0x5b15,0x5b18,0x5b19,0x5b1a,0x5b1b,0x5b1c,
-0x5b1d,0x5b1e,0x5b1f,0x5b20,0x5b21,0x5b22,0x5b23,0x5b24,
-0x5b25,0x5b26,0x5b27,0x5b28,0x5b29,0x5b2a,0x5b2b,0x5b2c,
-0x5b2d,0x5b2e,0x5b2f,0x5b30,0x5b31,0x5b33,0x5b35,0x5b36,
-0x5b38,0x5b39,0x5b3a,0x5b3b,0x5b3c,0x5b3d,0x5b3e,0x5b3f,
-0x5b41,0x5b42,0x5b43,0x5b44,0x5b45,0x5b46,0x5b47,0x0000,
-/* 0x8c00 */
-0x5b48,0x5b49,0x5b4a,0x5b4b,0x5b4c,0x5b4d,0x5b4e,0x5b4f,
-0x5b52,0x5b56,0x5b5e,0x5b60,0x5b61,0x5b67,0x5b68,0x5b6b,
-0x5b6d,0x5b6e,0x5b6f,0x5b72,0x5b74,0x5b76,0x5b77,0x5b78,
-0x5b79,0x5b7b,0x5b7c,0x5b7e,0x5b7f,0x5b82,0x5b86,0x5b8a,
-0x5b8d,0x5b8e,0x5b90,0x5b91,0x5b92,0x5b94,0x5b96,0x5b9f,
-0x5ba7,0x5ba8,0x5ba9,0x5bac,0x5bad,0x5bae,0x5baf,0x5bb1,
-0x5bb2,0x5bb7,0x5bba,0x5bbb,0x5bbc,0x5bc0,0x5bc1,0x5bc3,
-0x5bc8,0x5bc9,0x5bca,0x5bcb,0x5bcd,0x5bce,0x5bcf,0x0000,
-0x5bd1,0x5bd4,0x5bd5,0x5bd6,0x5bd7,0x5bd8,0x5bd9,0x5bda,
-0x5bdb,0x5bdc,0x5be0,0x5be2,0x5be3,0x5be6,0x5be7,0x5be9,
-0x5bea,0x5beb,0x5bec,0x5bed,0x5bef,0x5bf1,0x5bf2,0x5bf3,
-0x5bf4,0x5bf5,0x5bf6,0x5bf7,0x5bfd,0x5bfe,0x5c00,0x5c02,
-0x5c03,0x5c05,0x5c07,0x5c08,0x5c0b,0x5c0c,0x5c0d,0x5c0e,
-0x5c10,0x5c12,0x5c13,0x5c17,0x5c19,0x5c1b,0x5c1e,0x5c1f,
-0x5c20,0x5c21,0x5c23,0x5c26,0x5c28,0x5c29,0x5c2a,0x5c2b,
-0x5c2d,0x5c2e,0x5c2f,0x5c30,0x5c32,0x5c33,0x5c35,0x5c36,
-0x5c37,0x5c43,0x5c44,0x5c46,0x5c47,0x5c4c,0x5c4d,0x5c52,
-0x5c53,0x5c54,0x5c56,0x5c57,0x5c58,0x5c5a,0x5c5b,0x5c5c,
-0x5c5d,0x5c5f,0x5c62,0x5c64,0x5c67,0x5c68,0x5c69,0x5c6a,
-0x5c6b,0x5c6c,0x5c6d,0x5c70,0x5c72,0x5c73,0x5c74,0x5c75,
-0x5c76,0x5c77,0x5c78,0x5c7b,0x5c7c,0x5c7d,0x5c7e,0x5c80,
-0x5c83,0x5c84,0x5c85,0x5c86,0x5c87,0x5c89,0x5c8a,0x5c8b,
-0x5c8e,0x5c8f,0x5c92,0x5c93,0x5c95,0x5c9d,0x5c9e,0x5c9f,
-0x5ca0,0x5ca1,0x5ca4,0x5ca5,0x5ca6,0x5ca7,0x5ca8,0x0000,
-/* 0x8d00 */
-0x5caa,0x5cae,0x5caf,0x5cb0,0x5cb2,0x5cb4,0x5cb6,0x5cb9,
-0x5cba,0x5cbb,0x5cbc,0x5cbe,0x5cc0,0x5cc2,0x5cc3,0x5cc5,
-0x5cc6,0x5cc7,0x5cc8,0x5cc9,0x5cca,0x5ccc,0x5ccd,0x5cce,
-0x5ccf,0x5cd0,0x5cd1,0x5cd3,0x5cd4,0x5cd5,0x5cd6,0x5cd7,
-0x5cd8,0x5cda,0x5cdb,0x5cdc,0x5cdd,0x5cde,0x5cdf,0x5ce0,
-0x5ce2,0x5ce3,0x5ce7,0x5ce9,0x5ceb,0x5cec,0x5cee,0x5cef,
-0x5cf1,0x5cf2,0x5cf3,0x5cf4,0x5cf5,0x5cf6,0x5cf7,0x5cf8,
-0x5cf9,0x5cfa,0x5cfc,0x5cfd,0x5cfe,0x5cff,0x5d00,0x0000,
-0x5d01,0x5d04,0x5d05,0x5d08,0x5d09,0x5d0a,0x5d0b,0x5d0c,
-0x5d0d,0x5d0f,0x5d10,0x5d11,0x5d12,0x5d13,0x5d15,0x5d17,
-0x5d18,0x5d19,0x5d1a,0x5d1c,0x5d1d,0x5d1f,0x5d20,0x5d21,
-0x5d22,0x5d23,0x5d25,0x5d28,0x5d2a,0x5d2b,0x5d2c,0x5d2f,
-0x5d30,0x5d31,0x5d32,0x5d33,0x5d35,0x5d36,0x5d37,0x5d38,
-0x5d39,0x5d3a,0x5d3b,0x5d3c,0x5d3f,0x5d40,0x5d41,0x5d42,
-0x5d43,0x5d44,0x5d45,0x5d46,0x5d48,0x5d49,0x5d4d,0x5d4e,
-0x5d4f,0x5d50,0x5d51,0x5d52,0x5d53,0x5d54,0x5d55,0x5d56,
-0x5d57,0x5d59,0x5d5a,0x5d5c,0x5d5e,0x5d5f,0x5d60,0x5d61,
-0x5d62,0x5d63,0x5d64,0x5d65,0x5d66,0x5d67,0x5d68,0x5d6a,
-0x5d6d,0x5d6e,0x5d70,0x5d71,0x5d72,0x5d73,0x5d75,0x5d76,
-0x5d77,0x5d78,0x5d79,0x5d7a,0x5d7b,0x5d7c,0x5d7d,0x5d7e,
-0x5d7f,0x5d80,0x5d81,0x5d83,0x5d84,0x5d85,0x5d86,0x5d87,
-0x5d88,0x5d89,0x5d8a,0x5d8b,0x5d8c,0x5d8d,0x5d8e,0x5d8f,
-0x5d90,0x5d91,0x5d92,0x5d93,0x5d94,0x5d95,0x5d96,0x5d97,
-0x5d98,0x5d9a,0x5d9b,0x5d9c,0x5d9e,0x5d9f,0x5da0,0x0000,
-/* 0x8e00 */
-0x5da1,0x5da2,0x5da3,0x5da4,0x5da5,0x5da6,0x5da7,0x5da8,
-0x5da9,0x5daa,0x5dab,0x5dac,0x5dad,0x5dae,0x5daf,0x5db0,
-0x5db1,0x5db2,0x5db3,0x5db4,0x5db5,0x5db6,0x5db8,0x5db9,
-0x5dba,0x5dbb,0x5dbc,0x5dbd,0x5dbe,0x5dbf,0x5dc0,0x5dc1,
-0x5dc2,0x5dc3,0x5dc4,0x5dc6,0x5dc7,0x5dc8,0x5dc9,0x5dca,
-0x5dcb,0x5dcc,0x5dce,0x5dcf,0x5dd0,0x5dd1,0x5dd2,0x5dd3,
-0x5dd4,0x5dd5,0x5dd6,0x5dd7,0x5dd8,0x5dd9,0x5dda,0x5ddc,
-0x5ddf,0x5de0,0x5de3,0x5de4,0x5dea,0x5dec,0x5ded,0x0000,
-0x5df0,0x5df5,0x5df6,0x5df8,0x5df9,0x5dfa,0x5dfb,0x5dfc,
-0x5dff,0x5e00,0x5e04,0x5e07,0x5e09,0x5e0a,0x5e0b,0x5e0d,
-0x5e0e,0x5e12,0x5e13,0x5e17,0x5e1e,0x5e1f,0x5e20,0x5e21,
-0x5e22,0x5e23,0x5e24,0x5e25,0x5e28,0x5e29,0x5e2a,0x5e2b,
-0x5e2c,0x5e2f,0x5e30,0x5e32,0x5e33,0x5e34,0x5e35,0x5e36,
-0x5e39,0x5e3a,0x5e3e,0x5e3f,0x5e40,0x5e41,0x5e43,0x5e46,
-0x5e47,0x5e48,0x5e49,0x5e4a,0x5e4b,0x5e4d,0x5e4e,0x5e4f,
-0x5e50,0x5e51,0x5e52,0x5e53,0x5e56,0x5e57,0x5e58,0x5e59,
-0x5e5a,0x5e5c,0x5e5d,0x5e5f,0x5e60,0x5e63,0x5e64,0x5e65,
-0x5e66,0x5e67,0x5e68,0x5e69,0x5e6a,0x5e6b,0x5e6c,0x5e6d,
-0x5e6e,0x5e6f,0x5e70,0x5e71,0x5e75,0x5e77,0x5e79,0x5e7e,
-0x5e81,0x5e82,0x5e83,0x5e85,0x5e88,0x5e89,0x5e8c,0x5e8d,
-0x5e8e,0x5e92,0x5e98,0x5e9b,0x5e9d,0x5ea1,0x5ea2,0x5ea3,
-0x5ea4,0x5ea8,0x5ea9,0x5eaa,0x5eab,0x5eac,0x5eae,0x5eaf,
-0x5eb0,0x5eb1,0x5eb2,0x5eb4,0x5eba,0x5ebb,0x5ebc,0x5ebd,
-0x5ebf,0x5ec0,0x5ec1,0x5ec2,0x5ec3,0x5ec4,0x5ec5,0x0000,
-/* 0x8f00 */
-0x5ec6,0x5ec7,0x5ec8,0x5ecb,0x5ecc,0x5ecd,0x5ece,0x5ecf,
-0x5ed0,0x5ed4,0x5ed5,0x5ed7,0x5ed8,0x5ed9,0x5eda,0x5edc,
-0x5edd,0x5ede,0x5edf,0x5ee0,0x5ee1,0x5ee2,0x5ee3,0x5ee4,
-0x5ee5,0x5ee6,0x5ee7,0x5ee9,0x5eeb,0x5eec,0x5eed,0x5eee,
-0x5eef,0x5ef0,0x5ef1,0x5ef2,0x5ef3,0x5ef5,0x5ef8,0x5ef9,
-0x5efb,0x5efc,0x5efd,0x5f05,0x5f06,0x5f07,0x5f09,0x5f0c,
-0x5f0d,0x5f0e,0x5f10,0x5f12,0x5f14,0x5f16,0x5f19,0x5f1a,
-0x5f1c,0x5f1d,0x5f1e,0x5f21,0x5f22,0x5f23,0x5f24,0x0000,
-0x5f28,0x5f2b,0x5f2c,0x5f2e,0x5f30,0x5f32,0x5f33,0x5f34,
-0x5f35,0x5f36,0x5f37,0x5f38,0x5f3b,0x5f3d,0x5f3e,0x5f3f,
-0x5f41,0x5f42,0x5f43,0x5f44,0x5f45,0x5f46,0x5f47,0x5f48,
-0x5f49,0x5f4a,0x5f4b,0x5f4c,0x5f4d,0x5f4e,0x5f4f,0x5f51,
-0x5f54,0x5f59,0x5f5a,0x5f5b,0x5f5c,0x5f5e,0x5f5f,0x5f60,
-0x5f63,0x5f65,0x5f67,0x5f68,0x5f6b,0x5f6e,0x5f6f,0x5f72,
-0x5f74,0x5f75,0x5f76,0x5f78,0x5f7a,0x5f7d,0x5f7e,0x5f7f,
-0x5f83,0x5f86,0x5f8d,0x5f8e,0x5f8f,0x5f91,0x5f93,0x5f94,
-0x5f96,0x5f9a,0x5f9b,0x5f9d,0x5f9e,0x5f9f,0x5fa0,0x5fa2,
-0x5fa3,0x5fa4,0x5fa5,0x5fa6,0x5fa7,0x5fa9,0x5fab,0x5fac,
-0x5faf,0x5fb0,0x5fb1,0x5fb2,0x5fb3,0x5fb4,0x5fb6,0x5fb8,
-0x5fb9,0x5fba,0x5fbb,0x5fbe,0x5fbf,0x5fc0,0x5fc1,0x5fc2,
-0x5fc7,0x5fc8,0x5fca,0x5fcb,0x5fce,0x5fd3,0x5fd4,0x5fd5,
-0x5fda,0x5fdb,0x5fdc,0x5fde,0x5fdf,0x5fe2,0x5fe3,0x5fe5,
-0x5fe6,0x5fe8,0x5fe9,0x5fec,0x5fef,0x5ff0,0x5ff2,0x5ff3,
-0x5ff4,0x5ff6,0x5ff7,0x5ff9,0x5ffa,0x5ffc,0x6007,0x0000,
-/* 0x9000 */
-0x6008,0x6009,0x600b,0x600c,0x6010,0x6011,0x6013,0x6017,
-0x6018,0x601a,0x601e,0x601f,0x6022,0x6023,0x6024,0x602c,
-0x602d,0x602e,0x6030,0x6031,0x6032,0x6033,0x6034,0x6036,
-0x6037,0x6038,0x6039,0x603a,0x603d,0x603e,0x6040,0x6044,
-0x6045,0x6046,0x6047,0x6048,0x6049,0x604a,0x604c,0x604e,
-0x604f,0x6051,0x6053,0x6054,0x6056,0x6057,0x6058,0x605b,
-0x605c,0x605e,0x605f,0x6060,0x6061,0x6065,0x6066,0x606e,
-0x6071,0x6072,0x6074,0x6075,0x6077,0x607e,0x6080,0x0000,
-0x6081,0x6082,0x6085,0x6086,0x6087,0x6088,0x608a,0x608b,
-0x608e,0x608f,0x6090,0x6091,0x6093,0x6095,0x6097,0x6098,
-0x6099,0x609c,0x609e,0x60a1,0x60a2,0x60a4,0x60a5,0x60a7,
-0x60a9,0x60aa,0x60ae,0x60b0,0x60b3,0x60b5,0x60b6,0x60b7,
-0x60b9,0x60ba,0x60bd,0x60be,0x60bf,0x60c0,0x60c1,0x60c2,
-0x60c3,0x60c4,0x60c7,0x60c8,0x60c9,0x60cc,0x60cd,0x60ce,
-0x60cf,0x60d0,0x60d2,0x60d3,0x60d4,0x60d6,0x60d7,0x60d9,
-0x60db,0x60de,0x60e1,0x60e2,0x60e3,0x60e4,0x60e5,0x60ea,
-0x60f1,0x60f2,0x60f5,0x60f7,0x60f8,0x60fb,0x60fc,0x60fd,
-0x60fe,0x60ff,0x6102,0x6103,0x6104,0x6105,0x6107,0x610a,
-0x610b,0x610c,0x6110,0x6111,0x6112,0x6113,0x6114,0x6116,
-0x6117,0x6118,0x6119,0x611b,0x611c,0x611d,0x611e,0x6121,
-0x6122,0x6125,0x6128,0x6129,0x612a,0x612c,0x612d,0x612e,
-0x612f,0x6130,0x6131,0x6132,0x6133,0x6134,0x6135,0x6136,
-0x6137,0x6138,0x6139,0x613a,0x613b,0x613c,0x613d,0x613e,
-0x6140,0x6141,0x6142,0x6143,0x6144,0x6145,0x6146,0x0000,
-/* 0x9100 */
-0x6147,0x6149,0x614b,0x614d,0x614f,0x6150,0x6152,0x6153,
-0x6154,0x6156,0x6157,0x6158,0x6159,0x615a,0x615b,0x615c,
-0x615e,0x615f,0x6160,0x6161,0x6163,0x6164,0x6165,0x6166,
-0x6169,0x616a,0x616b,0x616c,0x616d,0x616e,0x616f,0x6171,
-0x6172,0x6173,0x6174,0x6176,0x6178,0x6179,0x617a,0x617b,
-0x617c,0x617d,0x617e,0x617f,0x6180,0x6181,0x6182,0x6183,
-0x6184,0x6185,0x6186,0x6187,0x6188,0x6189,0x618a,0x618c,
-0x618d,0x618f,0x6190,0x6191,0x6192,0x6193,0x6195,0x0000,
-0x6196,0x6197,0x6198,0x6199,0x619a,0x619b,0x619c,0x619e,
-0x619f,0x61a0,0x61a1,0x61a2,0x61a3,0x61a4,0x61a5,0x61a6,
-0x61aa,0x61ab,0x61ad,0x61ae,0x61af,0x61b0,0x61b1,0x61b2,
-0x61b3,0x61b4,0x61b5,0x61b6,0x61b8,0x61b9,0x61ba,0x61bb,
-0x61bc,0x61bd,0x61bf,0x61c0,0x61c1,0x61c3,0x61c4,0x61c5,
-0x61c6,0x61c7,0x61c9,0x61cc,0x61cd,0x61ce,0x61cf,0x61d0,
-0x61d3,0x61d5,0x61d6,0x61d7,0x61d8,0x61d9,0x61da,0x61db,
-0x61dc,0x61dd,0x61de,0x61df,0x61e0,0x61e1,0x61e2,0x61e3,
-0x61e4,0x61e5,0x61e7,0x61e8,0x61e9,0x61ea,0x61eb,0x61ec,
-0x61ed,0x61ee,0x61ef,0x61f0,0x61f1,0x61f2,0x61f3,0x61f4,
-0x61f6,0x61f7,0x61f8,0x61f9,0x61fa,0x61fb,0x61fc,0x61fd,
-0x61fe,0x6200,0x6201,0x6202,0x6203,0x6204,0x6205,0x6207,
-0x6209,0x6213,0x6214,0x6219,0x621c,0x621d,0x621e,0x6220,
-0x6223,0x6226,0x6227,0x6228,0x6229,0x622b,0x622d,0x622f,
-0x6230,0x6231,0x6232,0x6235,0x6236,0x6238,0x6239,0x623a,
-0x623b,0x623c,0x6242,0x6244,0x6245,0x6246,0x624a,0x0000,
-/* 0x9200 */
-0x624f,0x6250,0x6255,0x6256,0x6257,0x6259,0x625a,0x625c,
-0x625d,0x625e,0x625f,0x6260,0x6261,0x6262,0x6264,0x6265,
-0x6268,0x6271,0x6272,0x6274,0x6275,0x6277,0x6278,0x627a,
-0x627b,0x627d,0x6281,0x6282,0x6283,0x6285,0x6286,0x6287,
-0x6288,0x628b,0x628c,0x628d,0x628e,0x628f,0x6290,0x6294,
-0x6299,0x629c,0x629d,0x629e,0x62a3,0x62a6,0x62a7,0x62a9,
-0x62aa,0x62ad,0x62ae,0x62af,0x62b0,0x62b2,0x62b3,0x62b4,
-0x62b6,0x62b7,0x62b8,0x62ba,0x62be,0x62c0,0x62c1,0x0000,
-0x62c3,0x62cb,0x62cf,0x62d1,0x62d5,0x62dd,0x62de,0x62e0,
-0x62e1,0x62e4,0x62ea,0x62eb,0x62f0,0x62f2,0x62f5,0x62f8,
-0x62f9,0x62fa,0x62fb,0x6300,0x6303,0x6304,0x6305,0x6306,
-0x630a,0x630b,0x630c,0x630d,0x630f,0x6310,0x6312,0x6313,
-0x6314,0x6315,0x6317,0x6318,0x6319,0x631c,0x6326,0x6327,
-0x6329,0x632c,0x632d,0x632e,0x6330,0x6331,0x6333,0x6334,
-0x6335,0x6336,0x6337,0x6338,0x633b,0x633c,0x633e,0x633f,
-0x6340,0x6341,0x6344,0x6347,0x6348,0x634a,0x6351,0x6352,
-0x6353,0x6354,0x6356,0x6357,0x6358,0x6359,0x635a,0x635b,
-0x635c,0x635d,0x6360,0x6364,0x6365,0x6366,0x6368,0x636a,
-0x636b,0x636c,0x636f,0x6370,0x6372,0x6373,0x6374,0x6375,
-0x6378,0x6379,0x637c,0x637d,0x637e,0x637f,0x6381,0x6383,
-0x6384,0x6385,0x6386,0x638b,0x638d,0x6391,0x6393,0x6394,
-0x6395,0x6397,0x6399,0x639a,0x639b,0x639c,0x639d,0x639e,
-0x639f,0x63a1,0x63a4,0x63a6,0x63ab,0x63af,0x63b1,0x63b2,
-0x63b5,0x63b6,0x63b9,0x63bb,0x63bd,0x63bf,0x63c0,0x0000,
-/* 0x9300 */
-0x63c1,0x63c2,0x63c3,0x63c5,0x63c7,0x63c8,0x63ca,0x63cb,
-0x63cc,0x63d1,0x63d3,0x63d4,0x63d5,0x63d7,0x63d8,0x63d9,
-0x63da,0x63db,0x63dc,0x63dd,0x63df,0x63e2,0x63e4,0x63e5,
-0x63e6,0x63e7,0x63e8,0x63eb,0x63ec,0x63ee,0x63ef,0x63f0,
-0x63f1,0x63f3,0x63f5,0x63f7,0x63f9,0x63fa,0x63fb,0x63fc,
-0x63fe,0x6403,0x6404,0x6406,0x6407,0x6408,0x6409,0x640a,
-0x640d,0x640e,0x6411,0x6412,0x6415,0x6416,0x6417,0x6418,
-0x6419,0x641a,0x641d,0x641f,0x6422,0x6423,0x6424,0x0000,
-0x6425,0x6427,0x6428,0x6429,0x642b,0x642e,0x642f,0x6430,
-0x6431,0x6432,0x6433,0x6435,0x6436,0x6437,0x6438,0x6439,
-0x643b,0x643c,0x643e,0x6440,0x6442,0x6443,0x6449,0x644b,
-0x644c,0x644d,0x644e,0x644f,0x6450,0x6451,0x6453,0x6455,
-0x6456,0x6457,0x6459,0x645a,0x645b,0x645c,0x645d,0x645f,
-0x6460,0x6461,0x6462,0x6463,0x6464,0x6465,0x6466,0x6468,
-0x646a,0x646b,0x646c,0x646e,0x646f,0x6470,0x6471,0x6472,
-0x6473,0x6474,0x6475,0x6476,0x6477,0x647b,0x647c,0x647d,
-0x647e,0x647f,0x6480,0x6481,0x6483,0x6486,0x6488,0x6489,
-0x648a,0x648b,0x648c,0x648d,0x648e,0x648f,0x6490,0x6493,
-0x6494,0x6497,0x6498,0x649a,0x649b,0x649c,0x649d,0x649f,
-0x64a0,0x64a1,0x64a2,0x64a3,0x64a5,0x64a6,0x64a7,0x64a8,
-0x64aa,0x64ab,0x64af,0x64b1,0x64b2,0x64b3,0x64b4,0x64b6,
-0x64b9,0x64bb,0x64bd,0x64be,0x64bf,0x64c1,0x64c3,0x64c4,
-0x64c6,0x64c7,0x64c8,0x64c9,0x64ca,0x64cb,0x64cc,0x64cf,
-0x64d1,0x64d3,0x64d4,0x64d5,0x64d6,0x64d9,0x64da,0x0000,
-/* 0x9400 */
-0x64db,0x64dc,0x64dd,0x64df,0x64e0,0x64e1,0x64e3,0x64e5,
-0x64e7,0x64e8,0x64e9,0x64ea,0x64eb,0x64ec,0x64ed,0x64ee,
-0x64ef,0x64f0,0x64f1,0x64f2,0x64f3,0x64f4,0x64f5,0x64f6,
-0x64f7,0x64f8,0x64f9,0x64fa,0x64fb,0x64fc,0x64fd,0x64fe,
-0x64ff,0x6501,0x6502,0x6503,0x6504,0x6505,0x6506,0x6507,
-0x6508,0x650a,0x650b,0x650c,0x650d,0x650e,0x650f,0x6510,
-0x6511,0x6513,0x6514,0x6515,0x6516,0x6517,0x6519,0x651a,
-0x651b,0x651c,0x651d,0x651e,0x651f,0x6520,0x6521,0x0000,
-0x6522,0x6523,0x6524,0x6526,0x6527,0x6528,0x6529,0x652a,
-0x652c,0x652d,0x6530,0x6531,0x6532,0x6533,0x6537,0x653a,
-0x653c,0x653d,0x6540,0x6541,0x6542,0x6543,0x6544,0x6546,
-0x6547,0x654a,0x654b,0x654d,0x654e,0x6550,0x6552,0x6553,
-0x6554,0x6557,0x6558,0x655a,0x655c,0x655f,0x6560,0x6561,
-0x6564,0x6565,0x6567,0x6568,0x6569,0x656a,0x656d,0x656e,
-0x656f,0x6571,0x6573,0x6575,0x6576,0x6578,0x6579,0x657a,
-0x657b,0x657c,0x657d,0x657e,0x657f,0x6580,0x6581,0x6582,
-0x6583,0x6584,0x6585,0x6586,0x6588,0x6589,0x658a,0x658d,
-0x658e,0x658f,0x6592,0x6594,0x6595,0x6596,0x6598,0x659a,
-0x659d,0x659e,0x65a0,0x65a2,0x65a3,0x65a6,0x65a8,0x65aa,
-0x65ac,0x65ae,0x65b1,0x65b2,0x65b3,0x65b4,0x65b5,0x65b6,
-0x65b7,0x65b8,0x65ba,0x65bb,0x65be,0x65bf,0x65c0,0x65c2,
-0x65c7,0x65c8,0x65c9,0x65ca,0x65cd,0x65d0,0x65d1,0x65d3,
-0x65d4,0x65d5,0x65d8,0x65d9,0x65da,0x65db,0x65dc,0x65dd,
-0x65de,0x65df,0x65e1,0x65e3,0x65e4,0x65ea,0x65eb,0x0000,
-/* 0x9500 */
-0x65f2,0x65f3,0x65f4,0x65f5,0x65f8,0x65f9,0x65fb,0x65fc,
-0x65fd,0x65fe,0x65ff,0x6601,0x6604,0x6605,0x6607,0x6608,
-0x6609,0x660b,0x660d,0x6610,0x6611,0x6612,0x6616,0x6617,
-0x6618,0x661a,0x661b,0x661c,0x661e,0x6621,0x6622,0x6623,
-0x6624,0x6626,0x6629,0x662a,0x662b,0x662c,0x662e,0x6630,
-0x6632,0x6633,0x6637,0x6638,0x6639,0x663a,0x663b,0x663d,
-0x663f,0x6640,0x6642,0x6644,0x6645,0x6646,0x6647,0x6648,
-0x6649,0x664a,0x664d,0x664e,0x6650,0x6651,0x6658,0x0000,
-0x6659,0x665b,0x665c,0x665d,0x665e,0x6660,0x6662,0x6663,
-0x6665,0x6667,0x6669,0x666a,0x666b,0x666c,0x666d,0x6671,
-0x6672,0x6673,0x6675,0x6678,0x6679,0x667b,0x667c,0x667d,
-0x667f,0x6680,0x6681,0x6683,0x6685,0x6686,0x6688,0x6689,
-0x668a,0x668b,0x668d,0x668e,0x668f,0x6690,0x6692,0x6693,
-0x6694,0x6695,0x6698,0x6699,0x669a,0x669b,0x669c,0x669e,
-0x669f,0x66a0,0x66a1,0x66a2,0x66a3,0x66a4,0x66a5,0x66a6,
-0x66a9,0x66aa,0x66ab,0x66ac,0x66ad,0x66af,0x66b0,0x66b1,
-0x66b2,0x66b3,0x66b5,0x66b6,0x66b7,0x66b8,0x66ba,0x66bb,
-0x66bc,0x66bd,0x66bf,0x66c0,0x66c1,0x66c2,0x66c3,0x66c4,
-0x66c5,0x66c6,0x66c7,0x66c8,0x66c9,0x66ca,0x66cb,0x66cc,
-0x66cd,0x66ce,0x66cf,0x66d0,0x66d1,0x66d2,0x66d3,0x66d4,
-0x66d5,0x66d6,0x66d7,0x66d8,0x66da,0x66de,0x66df,0x66e0,
-0x66e1,0x66e2,0x66e3,0x66e4,0x66e5,0x66e7,0x66e8,0x66ea,
-0x66eb,0x66ec,0x66ed,0x66ee,0x66ef,0x66f1,0x66f5,0x66f6,
-0x66f8,0x66fa,0x66fb,0x66fd,0x6701,0x6702,0x6703,0x0000,
-/* 0x9600 */
-0x6704,0x6705,0x6706,0x6707,0x670c,0x670e,0x670f,0x6711,
-0x6712,0x6713,0x6716,0x6718,0x6719,0x671a,0x671c,0x671e,
-0x6720,0x6721,0x6722,0x6723,0x6724,0x6725,0x6727,0x6729,
-0x672e,0x6730,0x6732,0x6733,0x6736,0x6737,0x6738,0x6739,
-0x673b,0x673c,0x673e,0x673f,0x6741,0x6744,0x6745,0x6747,
-0x674a,0x674b,0x674d,0x6752,0x6754,0x6755,0x6757,0x6758,
-0x6759,0x675a,0x675b,0x675d,0x6762,0x6763,0x6764,0x6766,
-0x6767,0x676b,0x676c,0x676e,0x6771,0x6774,0x6776,0x0000,
-0x6778,0x6779,0x677a,0x677b,0x677d,0x6780,0x6782,0x6783,
-0x6785,0x6786,0x6788,0x678a,0x678c,0x678d,0x678e,0x678f,
-0x6791,0x6792,0x6793,0x6794,0x6796,0x6799,0x679b,0x679f,
-0x67a0,0x67a1,0x67a4,0x67a6,0x67a9,0x67ac,0x67ae,0x67b1,
-0x67b2,0x67b4,0x67b9,0x67ba,0x67bb,0x67bc,0x67bd,0x67be,
-0x67bf,0x67c0,0x67c2,0x67c5,0x67c6,0x67c7,0x67c8,0x67c9,
-0x67ca,0x67cb,0x67cc,0x67cd,0x67ce,0x67d5,0x67d6,0x67d7,
-0x67db,0x67df,0x67e1,0x67e3,0x67e4,0x67e6,0x67e7,0x67e8,
-0x67ea,0x67eb,0x67ed,0x67ee,0x67f2,0x67f5,0x67f6,0x67f7,
-0x67f8,0x67f9,0x67fa,0x67fb,0x67fc,0x67fe,0x6801,0x6802,
-0x6803,0x6804,0x6806,0x680d,0x6810,0x6812,0x6814,0x6815,
-0x6818,0x6819,0x681a,0x681b,0x681c,0x681e,0x681f,0x6820,
-0x6822,0x6823,0x6824,0x6825,0x6826,0x6827,0x6828,0x682b,
-0x682c,0x682d,0x682e,0x682f,0x6830,0x6831,0x6834,0x6835,
-0x6836,0x683a,0x683b,0x683f,0x6847,0x684b,0x684d,0x684f,
-0x6852,0x6856,0x6857,0x6858,0x6859,0x685a,0x685b,0x0000,
-/* 0x9700 */
-0x685c,0x685d,0x685e,0x685f,0x686a,0x686c,0x686d,0x686e,
-0x686f,0x6870,0x6871,0x6872,0x6873,0x6875,0x6878,0x6879,
-0x687a,0x687b,0x687c,0x687d,0x687e,0x687f,0x6880,0x6882,
-0x6884,0x6887,0x6888,0x6889,0x688a,0x688b,0x688c,0x688d,
-0x688e,0x6890,0x6891,0x6892,0x6894,0x6895,0x6896,0x6898,
-0x6899,0x689a,0x689b,0x689c,0x689d,0x689e,0x689f,0x68a0,
-0x68a1,0x68a3,0x68a4,0x68a5,0x68a9,0x68aa,0x68ab,0x68ac,
-0x68ae,0x68b1,0x68b2,0x68b4,0x68b6,0x68b7,0x68b8,0x0000,
-0x68b9,0x68ba,0x68bb,0x68bc,0x68bd,0x68be,0x68bf,0x68c1,
-0x68c3,0x68c4,0x68c5,0x68c6,0x68c7,0x68c8,0x68ca,0x68cc,
-0x68ce,0x68cf,0x68d0,0x68d1,0x68d3,0x68d4,0x68d6,0x68d7,
-0x68d9,0x68db,0x68dc,0x68dd,0x68de,0x68df,0x68e1,0x68e2,
-0x68e4,0x68e5,0x68e6,0x68e7,0x68e8,0x68e9,0x68ea,0x68eb,
-0x68ec,0x68ed,0x68ef,0x68f2,0x68f3,0x68f4,0x68f6,0x68f7,
-0x68f8,0x68fb,0x68fd,0x68fe,0x68ff,0x6900,0x6902,0x6903,
-0x6904,0x6906,0x6907,0x6908,0x6909,0x690a,0x690c,0x690f,
-0x6911,0x6913,0x6914,0x6915,0x6916,0x6917,0x6918,0x6919,
-0x691a,0x691b,0x691c,0x691d,0x691e,0x6921,0x6922,0x6923,
-0x6925,0x6926,0x6927,0x6928,0x6929,0x692a,0x692b,0x692c,
-0x692e,0x692f,0x6931,0x6932,0x6933,0x6935,0x6936,0x6937,
-0x6938,0x693a,0x693b,0x693c,0x693e,0x6940,0x6941,0x6943,
-0x6944,0x6945,0x6946,0x6947,0x6948,0x6949,0x694a,0x694b,
-0x694c,0x694d,0x694e,0x694f,0x6950,0x6951,0x6952,0x6953,
-0x6955,0x6956,0x6958,0x6959,0x695b,0x695c,0x695f,0x0000,
-/* 0x9800 */
-0x6961,0x6962,0x6964,0x6965,0x6967,0x6968,0x6969,0x696a,
-0x696c,0x696d,0x696f,0x6970,0x6972,0x6973,0x6974,0x6975,
-0x6976,0x697a,0x697b,0x697d,0x697e,0x697f,0x6981,0x6983,
-0x6985,0x698a,0x698b,0x698c,0x698e,0x698f,0x6990,0x6991,
-0x6992,0x6993,0x6996,0x6997,0x6999,0x699a,0x699d,0x699e,
-0x699f,0x69a0,0x69a1,0x69a2,0x69a3,0x69a4,0x69a5,0x69a6,
-0x69a9,0x69aa,0x69ac,0x69ae,0x69af,0x69b0,0x69b2,0x69b3,
-0x69b5,0x69b6,0x69b8,0x69b9,0x69ba,0x69bc,0x69bd,0x0000,
-0x69be,0x69bf,0x69c0,0x69c2,0x69c3,0x69c4,0x69c5,0x69c6,
-0x69c7,0x69c8,0x69c9,0x69cb,0x69cd,0x69cf,0x69d1,0x69d2,
-0x69d3,0x69d5,0x69d6,0x69d7,0x69d8,0x69d9,0x69da,0x69dc,
-0x69dd,0x69de,0x69e1,0x69e2,0x69e3,0x69e4,0x69e5,0x69e6,
-0x69e7,0x69e8,0x69e9,0x69ea,0x69eb,0x69ec,0x69ee,0x69ef,
-0x69f0,0x69f1,0x69f3,0x69f4,0x69f5,0x69f6,0x69f7,0x69f8,
-0x69f9,0x69fa,0x69fb,0x69fc,0x69fe,0x6a00,0x6a01,0x6a02,
-0x6a03,0x6a04,0x6a05,0x6a06,0x6a07,0x6a08,0x6a09,0x6a0b,
-0x6a0c,0x6a0d,0x6a0e,0x6a0f,0x6a10,0x6a11,0x6a12,0x6a13,
-0x6a14,0x6a15,0x6a16,0x6a19,0x6a1a,0x6a1b,0x6a1c,0x6a1d,
-0x6a1e,0x6a20,0x6a22,0x6a23,0x6a24,0x6a25,0x6a26,0x6a27,
-0x6a29,0x6a2b,0x6a2c,0x6a2d,0x6a2e,0x6a30,0x6a32,0x6a33,
-0x6a34,0x6a36,0x6a37,0x6a38,0x6a39,0x6a3a,0x6a3b,0x6a3c,
-0x6a3f,0x6a40,0x6a41,0x6a42,0x6a43,0x6a45,0x6a46,0x6a48,
-0x6a49,0x6a4a,0x6a4b,0x6a4c,0x6a4d,0x6a4e,0x6a4f,0x6a51,
-0x6a52,0x6a53,0x6a54,0x6a55,0x6a56,0x6a57,0x6a5a,0x0000,
-/* 0x9900 */
-0x6a5c,0x6a5d,0x6a5e,0x6a5f,0x6a60,0x6a62,0x6a63,0x6a64,
-0x6a66,0x6a67,0x6a68,0x6a69,0x6a6a,0x6a6b,0x6a6c,0x6a6d,
-0x6a6e,0x6a6f,0x6a70,0x6a72,0x6a73,0x6a74,0x6a75,0x6a76,
-0x6a77,0x6a78,0x6a7a,0x6a7b,0x6a7d,0x6a7e,0x6a7f,0x6a81,
-0x6a82,0x6a83,0x6a85,0x6a86,0x6a87,0x6a88,0x6a89,0x6a8a,
-0x6a8b,0x6a8c,0x6a8d,0x6a8f,0x6a92,0x6a93,0x6a94,0x6a95,
-0x6a96,0x6a98,0x6a99,0x6a9a,0x6a9b,0x6a9c,0x6a9d,0x6a9e,
-0x6a9f,0x6aa1,0x6aa2,0x6aa3,0x6aa4,0x6aa5,0x6aa6,0x0000,
-0x6aa7,0x6aa8,0x6aaa,0x6aad,0x6aae,0x6aaf,0x6ab0,0x6ab1,
-0x6ab2,0x6ab3,0x6ab4,0x6ab5,0x6ab6,0x6ab7,0x6ab8,0x6ab9,
-0x6aba,0x6abb,0x6abc,0x6abd,0x6abe,0x6abf,0x6ac0,0x6ac1,
-0x6ac2,0x6ac3,0x6ac4,0x6ac5,0x6ac6,0x6ac7,0x6ac8,0x6ac9,
-0x6aca,0x6acb,0x6acc,0x6acd,0x6ace,0x6acf,0x6ad0,0x6ad1,
-0x6ad2,0x6ad3,0x6ad4,0x6ad5,0x6ad6,0x6ad7,0x6ad8,0x6ad9,
-0x6ada,0x6adb,0x6adc,0x6add,0x6ade,0x6adf,0x6ae0,0x6ae1,
-0x6ae2,0x6ae3,0x6ae4,0x6ae5,0x6ae6,0x6ae7,0x6ae8,0x6ae9,
-0x6aea,0x6aeb,0x6aec,0x6aed,0x6aee,0x6aef,0x6af0,0x6af1,
-0x6af2,0x6af3,0x6af4,0x6af5,0x6af6,0x6af7,0x6af8,0x6af9,
-0x6afa,0x6afb,0x6afc,0x6afd,0x6afe,0x6aff,0x6b00,0x6b01,
-0x6b02,0x6b03,0x6b04,0x6b05,0x6b06,0x6b07,0x6b08,0x6b09,
-0x6b0a,0x6b0b,0x6b0c,0x6b0d,0x6b0e,0x6b0f,0x6b10,0x6b11,
-0x6b12,0x6b13,0x6b14,0x6b15,0x6b16,0x6b17,0x6b18,0x6b19,
-0x6b1a,0x6b1b,0x6b1c,0x6b1d,0x6b1e,0x6b1f,0x6b25,0x6b26,
-0x6b28,0x6b29,0x6b2a,0x6b2b,0x6b2c,0x6b2d,0x6b2e,0x0000,
-/* 0x9a00 */
-0x6b2f,0x6b30,0x6b31,0x6b33,0x6b34,0x6b35,0x6b36,0x6b38,
-0x6b3b,0x6b3c,0x6b3d,0x6b3f,0x6b40,0x6b41,0x6b42,0x6b44,
-0x6b45,0x6b48,0x6b4a,0x6b4b,0x6b4d,0x6b4e,0x6b4f,0x6b50,
-0x6b51,0x6b52,0x6b53,0x6b54,0x6b55,0x6b56,0x6b57,0x6b58,
-0x6b5a,0x6b5b,0x6b5c,0x6b5d,0x6b5e,0x6b5f,0x6b60,0x6b61,
-0x6b68,0x6b69,0x6b6b,0x6b6c,0x6b6d,0x6b6e,0x6b6f,0x6b70,
-0x6b71,0x6b72,0x6b73,0x6b74,0x6b75,0x6b76,0x6b77,0x6b78,
-0x6b7a,0x6b7d,0x6b7e,0x6b7f,0x6b80,0x6b85,0x6b88,0x0000,
-0x6b8c,0x6b8e,0x6b8f,0x6b90,0x6b91,0x6b94,0x6b95,0x6b97,
-0x6b98,0x6b99,0x6b9c,0x6b9d,0x6b9e,0x6b9f,0x6ba0,0x6ba2,
-0x6ba3,0x6ba4,0x6ba5,0x6ba6,0x6ba7,0x6ba8,0x6ba9,0x6bab,
-0x6bac,0x6bad,0x6bae,0x6baf,0x6bb0,0x6bb1,0x6bb2,0x6bb6,
-0x6bb8,0x6bb9,0x6bba,0x6bbb,0x6bbc,0x6bbd,0x6bbe,0x6bc0,
-0x6bc3,0x6bc4,0x6bc6,0x6bc7,0x6bc8,0x6bc9,0x6bca,0x6bcc,
-0x6bce,0x6bd0,0x6bd1,0x6bd8,0x6bda,0x6bdc,0x6bdd,0x6bde,
-0x6bdf,0x6be0,0x6be2,0x6be3,0x6be4,0x6be5,0x6be6,0x6be7,
-0x6be8,0x6be9,0x6bec,0x6bed,0x6bee,0x6bf0,0x6bf1,0x6bf2,
-0x6bf4,0x6bf6,0x6bf7,0x6bf8,0x6bfa,0x6bfb,0x6bfc,0x6bfe,
-0x6bff,0x6c00,0x6c01,0x6c02,0x6c03,0x6c04,0x6c08,0x6c09,
-0x6c0a,0x6c0b,0x6c0c,0x6c0e,0x6c12,0x6c17,0x6c1c,0x6c1d,
-0x6c1e,0x6c20,0x6c23,0x6c25,0x6c2b,0x6c2c,0x6c2d,0x6c31,
-0x6c33,0x6c36,0x6c37,0x6c39,0x6c3a,0x6c3b,0x6c3c,0x6c3e,
-0x6c3f,0x6c43,0x6c44,0x6c45,0x6c48,0x6c4b,0x6c4c,0x6c4d,
-0x6c4e,0x6c4f,0x6c51,0x6c52,0x6c53,0x6c56,0x6c58,0x0000,
-/* 0x9b00 */
-0x6c59,0x6c5a,0x6c62,0x6c63,0x6c65,0x6c66,0x6c67,0x6c6b,
-0x6c6c,0x6c6d,0x6c6e,0x6c6f,0x6c71,0x6c73,0x6c75,0x6c77,
-0x6c78,0x6c7a,0x6c7b,0x6c7c,0x6c7f,0x6c80,0x6c84,0x6c87,
-0x6c8a,0x6c8b,0x6c8d,0x6c8e,0x6c91,0x6c92,0x6c95,0x6c96,
-0x6c97,0x6c98,0x6c9a,0x6c9c,0x6c9d,0x6c9e,0x6ca0,0x6ca2,
-0x6ca8,0x6cac,0x6caf,0x6cb0,0x6cb4,0x6cb5,0x6cb6,0x6cb7,
-0x6cba,0x6cc0,0x6cc1,0x6cc2,0x6cc3,0x6cc6,0x6cc7,0x6cc8,
-0x6ccb,0x6ccd,0x6cce,0x6ccf,0x6cd1,0x6cd2,0x6cd8,0x0000,
-0x6cd9,0x6cda,0x6cdc,0x6cdd,0x6cdf,0x6ce4,0x6ce6,0x6ce7,
-0x6ce9,0x6cec,0x6ced,0x6cf2,0x6cf4,0x6cf9,0x6cff,0x6d00,
-0x6d02,0x6d03,0x6d05,0x6d06,0x6d08,0x6d09,0x6d0a,0x6d0d,
-0x6d0f,0x6d10,0x6d11,0x6d13,0x6d14,0x6d15,0x6d16,0x6d18,
-0x6d1c,0x6d1d,0x6d1f,0x6d20,0x6d21,0x6d22,0x6d23,0x6d24,
-0x6d26,0x6d28,0x6d29,0x6d2c,0x6d2d,0x6d2f,0x6d30,0x6d34,
-0x6d36,0x6d37,0x6d38,0x6d3a,0x6d3f,0x6d40,0x6d42,0x6d44,
-0x6d49,0x6d4c,0x6d50,0x6d55,0x6d56,0x6d57,0x6d58,0x6d5b,
-0x6d5d,0x6d5f,0x6d61,0x6d62,0x6d64,0x6d65,0x6d67,0x6d68,
-0x6d6b,0x6d6c,0x6d6d,0x6d70,0x6d71,0x6d72,0x6d73,0x6d75,
-0x6d76,0x6d79,0x6d7a,0x6d7b,0x6d7d,0x6d7e,0x6d7f,0x6d80,
-0x6d81,0x6d83,0x6d84,0x6d86,0x6d87,0x6d8a,0x6d8b,0x6d8d,
-0x6d8f,0x6d90,0x6d92,0x6d96,0x6d97,0x6d98,0x6d99,0x6d9a,
-0x6d9c,0x6da2,0x6da5,0x6dac,0x6dad,0x6db0,0x6db1,0x6db3,
-0x6db4,0x6db6,0x6db7,0x6db9,0x6dba,0x6dbb,0x6dbc,0x6dbd,
-0x6dbe,0x6dc1,0x6dc2,0x6dc3,0x6dc8,0x6dc9,0x6dca,0x0000,
-/* 0x9c00 */
-0x6dcd,0x6dce,0x6dcf,0x6dd0,0x6dd2,0x6dd3,0x6dd4,0x6dd5,
-0x6dd7,0x6dda,0x6ddb,0x6ddc,0x6ddf,0x6de2,0x6de3,0x6de5,
-0x6de7,0x6de8,0x6de9,0x6dea,0x6ded,0x6def,0x6df0,0x6df2,
-0x6df4,0x6df5,0x6df6,0x6df8,0x6dfa,0x6dfd,0x6dfe,0x6dff,
-0x6e00,0x6e01,0x6e02,0x6e03,0x6e04,0x6e06,0x6e07,0x6e08,
-0x6e09,0x6e0b,0x6e0f,0x6e12,0x6e13,0x6e15,0x6e18,0x6e19,
-0x6e1b,0x6e1c,0x6e1e,0x6e1f,0x6e22,0x6e26,0x6e27,0x6e28,
-0x6e2a,0x6e2c,0x6e2e,0x6e30,0x6e31,0x6e33,0x6e35,0x0000,
-0x6e36,0x6e37,0x6e39,0x6e3b,0x6e3c,0x6e3d,0x6e3e,0x6e3f,
-0x6e40,0x6e41,0x6e42,0x6e45,0x6e46,0x6e47,0x6e48,0x6e49,
-0x6e4a,0x6e4b,0x6e4c,0x6e4f,0x6e50,0x6e51,0x6e52,0x6e55,
-0x6e57,0x6e59,0x6e5a,0x6e5c,0x6e5d,0x6e5e,0x6e60,0x6e61,
-0x6e62,0x6e63,0x6e64,0x6e65,0x6e66,0x6e67,0x6e68,0x6e69,
-0x6e6a,0x6e6c,0x6e6d,0x6e6f,0x6e70,0x6e71,0x6e72,0x6e73,
-0x6e74,0x6e75,0x6e76,0x6e77,0x6e78,0x6e79,0x6e7a,0x6e7b,
-0x6e7c,0x6e7d,0x6e80,0x6e81,0x6e82,0x6e84,0x6e87,0x6e88,
-0x6e8a,0x6e8b,0x6e8c,0x6e8d,0x6e8e,0x6e91,0x6e92,0x6e93,
-0x6e94,0x6e95,0x6e96,0x6e97,0x6e99,0x6e9a,0x6e9b,0x6e9d,
-0x6e9e,0x6ea0,0x6ea1,0x6ea3,0x6ea4,0x6ea6,0x6ea8,0x6ea9,
-0x6eab,0x6eac,0x6ead,0x6eae,0x6eb0,0x6eb3,0x6eb5,0x6eb8,
-0x6eb9,0x6ebc,0x6ebe,0x6ebf,0x6ec0,0x6ec3,0x6ec4,0x6ec5,
-0x6ec6,0x6ec8,0x6ec9,0x6eca,0x6ecc,0x6ecd,0x6ece,0x6ed0,
-0x6ed2,0x6ed6,0x6ed8,0x6ed9,0x6edb,0x6edc,0x6edd,0x6ee3,
-0x6ee7,0x6eea,0x6eeb,0x6eec,0x6eed,0x6eee,0x6eef,0x0000,
-/* 0x9d00 */
-0x6ef0,0x6ef1,0x6ef2,0x6ef3,0x6ef5,0x6ef6,0x6ef7,0x6ef8,
-0x6efa,0x6efb,0x6efc,0x6efd,0x6efe,0x6eff,0x6f00,0x6f01,
-0x6f03,0x6f04,0x6f05,0x6f07,0x6f08,0x6f0a,0x6f0b,0x6f0c,
-0x6f0d,0x6f0e,0x6f10,0x6f11,0x6f12,0x6f16,0x6f17,0x6f18,
-0x6f19,0x6f1a,0x6f1b,0x6f1c,0x6f1d,0x6f1e,0x6f1f,0x6f21,
-0x6f22,0x6f23,0x6f25,0x6f26,0x6f27,0x6f28,0x6f2c,0x6f2e,
-0x6f30,0x6f32,0x6f34,0x6f35,0x6f37,0x6f38,0x6f39,0x6f3a,
-0x6f3b,0x6f3c,0x6f3d,0x6f3f,0x6f40,0x6f41,0x6f42,0x0000,
-0x6f43,0x6f44,0x6f45,0x6f48,0x6f49,0x6f4a,0x6f4c,0x6f4e,
-0x6f4f,0x6f50,0x6f51,0x6f52,0x6f53,0x6f54,0x6f55,0x6f56,
-0x6f57,0x6f59,0x6f5a,0x6f5b,0x6f5d,0x6f5f,0x6f60,0x6f61,
-0x6f63,0x6f64,0x6f65,0x6f67,0x6f68,0x6f69,0x6f6a,0x6f6b,
-0x6f6c,0x6f6f,0x6f70,0x6f71,0x6f73,0x6f75,0x6f76,0x6f77,
-0x6f79,0x6f7b,0x6f7d,0x6f7e,0x6f7f,0x6f80,0x6f81,0x6f82,
-0x6f83,0x6f85,0x6f86,0x6f87,0x6f8a,0x6f8b,0x6f8f,0x6f90,
-0x6f91,0x6f92,0x6f93,0x6f94,0x6f95,0x6f96,0x6f97,0x6f98,
-0x6f99,0x6f9a,0x6f9b,0x6f9d,0x6f9e,0x6f9f,0x6fa0,0x6fa2,
-0x6fa3,0x6fa4,0x6fa5,0x6fa6,0x6fa8,0x6fa9,0x6faa,0x6fab,
-0x6fac,0x6fad,0x6fae,0x6faf,0x6fb0,0x6fb1,0x6fb2,0x6fb4,
-0x6fb5,0x6fb7,0x6fb8,0x6fba,0x6fbb,0x6fbc,0x6fbd,0x6fbe,
-0x6fbf,0x6fc1,0x6fc3,0x6fc4,0x6fc5,0x6fc6,0x6fc7,0x6fc8,
-0x6fca,0x6fcb,0x6fcc,0x6fcd,0x6fce,0x6fcf,0x6fd0,0x6fd3,
-0x6fd4,0x6fd5,0x6fd6,0x6fd7,0x6fd8,0x6fd9,0x6fda,0x6fdb,
-0x6fdc,0x6fdd,0x6fdf,0x6fe2,0x6fe3,0x6fe4,0x6fe5,0x0000,
-/* 0x9e00 */
-0x6fe6,0x6fe7,0x6fe8,0x6fe9,0x6fea,0x6feb,0x6fec,0x6fed,
-0x6ff0,0x6ff1,0x6ff2,0x6ff3,0x6ff4,0x6ff5,0x6ff6,0x6ff7,
-0x6ff8,0x6ff9,0x6ffa,0x6ffb,0x6ffc,0x6ffd,0x6ffe,0x6fff,
-0x7000,0x7001,0x7002,0x7003,0x7004,0x7005,0x7006,0x7007,
-0x7008,0x7009,0x700a,0x700b,0x700c,0x700d,0x700e,0x700f,
-0x7010,0x7012,0x7013,0x7014,0x7015,0x7016,0x7017,0x7018,
-0x7019,0x701c,0x701d,0x701e,0x701f,0x7020,0x7021,0x7022,
-0x7024,0x7025,0x7026,0x7027,0x7028,0x7029,0x702a,0x0000,
-0x702b,0x702c,0x702d,0x702e,0x702f,0x7030,0x7031,0x7032,
-0x7033,0x7034,0x7036,0x7037,0x7038,0x703a,0x703b,0x703c,
-0x703d,0x703e,0x703f,0x7040,0x7041,0x7042,0x7043,0x7044,
-0x7045,0x7046,0x7047,0x7048,0x7049,0x704a,0x704b,0x704d,
-0x704e,0x7050,0x7051,0x7052,0x7053,0x7054,0x7055,0x7056,
-0x7057,0x7058,0x7059,0x705a,0x705b,0x705c,0x705d,0x705f,
-0x7060,0x7061,0x7062,0x7063,0x7064,0x7065,0x7066,0x7067,
-0x7068,0x7069,0x706a,0x706e,0x7071,0x7072,0x7073,0x7074,
-0x7077,0x7079,0x707a,0x707b,0x707d,0x7081,0x7082,0x7083,
-0x7084,0x7086,0x7087,0x7088,0x708b,0x708c,0x708d,0x708f,
-0x7090,0x7091,0x7093,0x7097,0x7098,0x709a,0x709b,0x709e,
-0x709f,0x70a0,0x70a1,0x70a2,0x70a3,0x70a4,0x70a5,0x70a6,
-0x70a7,0x70a8,0x70a9,0x70aa,0x70b0,0x70b2,0x70b4,0x70b5,
-0x70b6,0x70ba,0x70be,0x70bf,0x70c4,0x70c5,0x70c6,0x70c7,
-0x70c9,0x70cb,0x70cc,0x70cd,0x70ce,0x70cf,0x70d0,0x70d1,
-0x70d2,0x70d3,0x70d4,0x70d5,0x70d6,0x70d7,0x70da,0x0000,
-/* 0x9f00 */
-0x70dc,0x70dd,0x70de,0x70e0,0x70e1,0x70e2,0x70e3,0x70e5,
-0x70ea,0x70ee,0x70f0,0x70f1,0x70f2,0x70f3,0x70f4,0x70f5,
-0x70f6,0x70f8,0x70fa,0x70fb,0x70fc,0x70fe,0x70ff,0x7100,
-0x7101,0x7102,0x7103,0x7104,0x7105,0x7106,0x7107,0x7108,
-0x710b,0x710c,0x710d,0x710e,0x710f,0x7111,0x7112,0x7114,
-0x7117,0x711b,0x711c,0x711d,0x711e,0x711f,0x7120,0x7121,
-0x7122,0x7123,0x7124,0x7125,0x7127,0x7128,0x7129,0x712a,
-0x712b,0x712c,0x712d,0x712e,0x7132,0x7133,0x7134,0x0000,
-0x7135,0x7137,0x7138,0x7139,0x713a,0x713b,0x713c,0x713d,
-0x713e,0x713f,0x7140,0x7141,0x7142,0x7143,0x7144,0x7146,
-0x7147,0x7148,0x7149,0x714b,0x714d,0x714f,0x7150,0x7151,
-0x7152,0x7153,0x7154,0x7155,0x7156,0x7157,0x7158,0x7159,
-0x715a,0x715b,0x715d,0x715f,0x7160,0x7161,0x7162,0x7163,
-0x7165,0x7169,0x716a,0x716b,0x716c,0x716d,0x716f,0x7170,
-0x7171,0x7174,0x7175,0x7176,0x7177,0x7179,0x717b,0x717c,
-0x717e,0x717f,0x7180,0x7181,0x7182,0x7183,0x7185,0x7186,
-0x7187,0x7188,0x7189,0x718b,0x718c,0x718d,0x718e,0x7190,
-0x7191,0x7192,0x7193,0x7195,0x7196,0x7197,0x719a,0x719b,
-0x719c,0x719d,0x719e,0x71a1,0x71a2,0x71a3,0x71a4,0x71a5,
-0x71a6,0x71a7,0x71a9,0x71aa,0x71ab,0x71ad,0x71ae,0x71af,
-0x71b0,0x71b1,0x71b2,0x71b4,0x71b6,0x71b7,0x71b8,0x71ba,
-0x71bb,0x71bc,0x71bd,0x71be,0x71bf,0x71c0,0x71c1,0x71c2,
-0x71c4,0x71c5,0x71c6,0x71c7,0x71c8,0x71c9,0x71ca,0x71cb,
-0x71cc,0x71cd,0x71cf,0x71d0,0x71d1,0x71d2,0x71d3,0x0000,
-/* 0xa000 */
-0x71d6,0x71d7,0x71d8,0x71d9,0x71da,0x71db,0x71dc,0x71dd,
-0x71de,0x71df,0x71e1,0x71e2,0x71e3,0x71e4,0x71e6,0x71e8,
-0x71e9,0x71ea,0x71eb,0x71ec,0x71ed,0x71ef,0x71f0,0x71f1,
-0x71f2,0x71f3,0x71f4,0x71f5,0x71f6,0x71f7,0x71f8,0x71fa,
-0x71fb,0x71fc,0x71fd,0x71fe,0x71ff,0x7200,0x7201,0x7202,
-0x7203,0x7204,0x7205,0x7207,0x7208,0x7209,0x720a,0x720b,
-0x720c,0x720d,0x720e,0x720f,0x7210,0x7211,0x7212,0x7213,
-0x7214,0x7215,0x7216,0x7217,0x7218,0x7219,0x721a,0x0000,
-0x721b,0x721c,0x721e,0x721f,0x7220,0x7221,0x7222,0x7223,
-0x7224,0x7225,0x7226,0x7227,0x7229,0x722b,0x722d,0x722e,
-0x722f,0x7232,0x7233,0x7234,0x723a,0x723c,0x723e,0x7240,
-0x7241,0x7242,0x7243,0x7244,0x7245,0x7246,0x7249,0x724a,
-0x724b,0x724e,0x724f,0x7250,0x7251,0x7253,0x7254,0x7255,
-0x7257,0x7258,0x725a,0x725c,0x725e,0x7260,0x7263,0x7264,
-0x7265,0x7268,0x726a,0x726b,0x726c,0x726d,0x7270,0x7271,
-0x7273,0x7274,0x7276,0x7277,0x7278,0x727b,0x727c,0x727d,
-0x7282,0x7283,0x7285,0x7286,0x7287,0x7288,0x7289,0x728c,
-0x728e,0x7290,0x7291,0x7293,0x7294,0x7295,0x7296,0x7297,
-0x7298,0x7299,0x729a,0x729b,0x729c,0x729d,0x729e,0x72a0,
-0x72a1,0x72a2,0x72a3,0x72a4,0x72a5,0x72a6,0x72a7,0x72a8,
-0x72a9,0x72aa,0x72ab,0x72ae,0x72b1,0x72b2,0x72b3,0x72b5,
-0x72ba,0x72bb,0x72bc,0x72bd,0x72be,0x72bf,0x72c0,0x72c5,
-0x72c6,0x72c7,0x72c9,0x72ca,0x72cb,0x72cc,0x72cf,0x72d1,
-0x72d3,0x72d4,0x72d5,0x72d6,0x72d8,0x72da,0x72db,0x0000,
-/* 0xa100 */
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x3000,0x3001,0x3002,0x00b7,0x02c9,0x02c7,0x00a8,
-0x3003,0x3005,0x2014,0xff5e,0x2016,0x2026,0x2018,0x2019,
-0x201c,0x201d,0x3014,0x3015,0x3008,0x3009,0x300a,0x300b,
-0x300c,0x300d,0x300e,0x300f,0x3016,0x3017,0x3010,0x3011,
-0x00b1,0x00d7,0x00f7,0x2236,0x2227,0x2228,0x2211,0x220f,
-0x222a,0x2229,0x2208,0x2237,0x221a,0x22a5,0x2225,0x2220,
-0x2312,0x2299,0x222b,0x222e,0x2261,0x224c,0x2248,0x223d,
-0x221d,0x2260,0x226e,0x226f,0x2264,0x2265,0x221e,0x2235,
-0x2234,0x2642,0x2640,0x00b0,0x2032,0x2033,0x2103,0xff04,
-0x00a4,0xffe0,0xffe1,0x2030,0x00a7,0x2116,0x2606,0x2605,
-0x25cb,0x25cf,0x25ce,0x25c7,0x25c6,0x25a1,0x25a0,0x25b3,
-0x25b2,0x203b,0x2192,0x2190,0x2191,0x2193,0x3013,0x0000,
-/* 0xa200 */
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x2170,0x2171,0x2172,0x2173,0x2174,0x2175,0x2176,
-0x2177,0x2178,0x2179,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x2488,0x2489,0x248a,0x248b,0x248c,0x248d,0x248e,
-0x248f,0x2490,0x2491,0x2492,0x2493,0x2494,0x2495,0x2496,
-0x2497,0x2498,0x2499,0x249a,0x249b,0x2474,0x2475,0x2476,
-0x2477,0x2478,0x2479,0x247a,0x247b,0x247c,0x247d,0x247e,
-0x247f,0x2480,0x2481,0x2482,0x2483,0x2484,0x2485,0x2486,
-0x2487,0x2460,0x2461,0x2462,0x2463,0x2464,0x2465,0x2466,
-0x2467,0x2468,0x2469,0x0000,0x0000,0x3220,0x3221,0x3222,
-0x3223,0x3224,0x3225,0x3226,0x3227,0x3228,0x3229,0x0000,
-0x0000,0x2160,0x2161,0x2162,0x2163,0x2164,0x2165,0x2166,
-0x2167,0x2168,0x2169,0x216a,0x216b,0x0000,0x0000,0x0000,
-/* 0xa300 */
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xff01,0xff02,0xff03,0xffe5,0xff05,0xff06,0xff07,
-0xff08,0xff09,0xff0a,0xff0b,0xff0c,0xff0d,0xff0e,0xff0f,
-0xff10,0xff11,0xff12,0xff13,0xff14,0xff15,0xff16,0xff17,
-0xff18,0xff19,0xff1a,0xff1b,0xff1c,0xff1d,0xff1e,0xff1f,
-0xff20,0xff21,0xff22,0xff23,0xff24,0xff25,0xff26,0xff27,
-0xff28,0xff29,0xff2a,0xff2b,0xff2c,0xff2d,0xff2e,0xff2f,
-0xff30,0xff31,0xff32,0xff33,0xff34,0xff35,0xff36,0xff37,
-0xff38,0xff39,0xff3a,0xff3b,0xff3c,0xff3d,0xff3e,0xff3f,
-0xff40,0xff41,0xff42,0xff43,0xff44,0xff45,0xff46,0xff47,
-0xff48,0xff49,0xff4a,0xff4b,0xff4c,0xff4d,0xff4e,0xff4f,
-0xff50,0xff51,0xff52,0xff53,0xff54,0xff55,0xff56,0xff57,
-0xff58,0xff59,0xff5a,0xff5b,0xff5c,0xff5d,0xffe3,0x0000,
-/* 0xa400 */
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x3041,0x3042,0x3043,0x3044,0x3045,0x3046,0x3047,
-0x3048,0x3049,0x304a,0x304b,0x304c,0x304d,0x304e,0x304f,
-0x3050,0x3051,0x3052,0x3053,0x3054,0x3055,0x3056,0x3057,
-0x3058,0x3059,0x305a,0x305b,0x305c,0x305d,0x305e,0x305f,
-0x3060,0x3061,0x3062,0x3063,0x3064,0x3065,0x3066,0x3067,
-0x3068,0x3069,0x306a,0x306b,0x306c,0x306d,0x306e,0x306f,
-0x3070,0x3071,0x3072,0x3073,0x3074,0x3075,0x3076,0x3077,
-0x3078,0x3079,0x307a,0x307b,0x307c,0x307d,0x307e,0x307f,
-0x3080,0x3081,0x3082,0x3083,0x3084,0x3085,0x3086,0x3087,
-0x3088,0x3089,0x308a,0x308b,0x308c,0x308d,0x308e,0x308f,
-0x3090,0x3091,0x3092,0x3093,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-/* 0xa500 */
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x30a1,0x30a2,0x30a3,0x30a4,0x30a5,0x30a6,0x30a7,
-0x30a8,0x30a9,0x30aa,0x30ab,0x30ac,0x30ad,0x30ae,0x30af,
-0x30b0,0x30b1,0x30b2,0x30b3,0x30b4,0x30b5,0x30b6,0x30b7,
-0x30b8,0x30b9,0x30ba,0x30bb,0x30bc,0x30bd,0x30be,0x30bf,
-0x30c0,0x30c1,0x30c2,0x30c3,0x30c4,0x30c5,0x30c6,0x30c7,
-0x30c8,0x30c9,0x30ca,0x30cb,0x30cc,0x30cd,0x30ce,0x30cf,
-0x30d0,0x30d1,0x30d2,0x30d3,0x30d4,0x30d5,0x30d6,0x30d7,
-0x30d8,0x30d9,0x30da,0x30db,0x30dc,0x30dd,0x30de,0x30df,
-0x30e0,0x30e1,0x30e2,0x30e3,0x30e4,0x30e5,0x30e6,0x30e7,
-0x30e8,0x30e9,0x30ea,0x30eb,0x30ec,0x30ed,0x30ee,0x30ef,
-0x30f0,0x30f1,0x30f2,0x30f3,0x30f4,0x30f5,0x30f6,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-/* 0xa600 */
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0391,0x0392,0x0393,0x0394,0x0395,0x0396,0x0397,
-0x0398,0x0399,0x039a,0x039b,0x039c,0x039d,0x039e,0x039f,
-0x03a0,0x03a1,0x03a3,0x03a4,0x03a5,0x03a6,0x03a7,0x03a8,
-0x03a9,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x03b1,0x03b2,0x03b3,0x03b4,0x03b5,0x03b6,0x03b7,
-0x03b8,0x03b9,0x03ba,0x03bb,0x03bc,0x03bd,0x03be,0x03bf,
-0x03c0,0x03c1,0x03c3,0x03c4,0x03c5,0x03c6,0x03c7,0x03c8,
-0x03c9,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xfe35,0xfe36,0xfe39,0xfe3a,0xfe3f,0xfe40,0xfe3d,0xfe3e,
-0xfe41,0xfe42,0xfe43,0xfe44,0x0000,0x0000,0xfe3b,0xfe3c,
-0xfe37,0xfe38,0xfe31,0x0000,0xfe33,0xfe34,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-/* 0xa700 */
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0410,0x0411,0x0412,0x0413,0x0414,0x0415,0x0401,
-0x0416,0x0417,0x0418,0x0419,0x041a,0x041b,0x041c,0x041d,
-0x041e,0x041f,0x0420,0x0421,0x0422,0x0423,0x0424,0x0425,
-0x0426,0x0427,0x0428,0x0429,0x042a,0x042b,0x042c,0x042d,
-0x042e,0x042f,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0430,0x0431,0x0432,0x0433,0x0434,0x0435,0x0451,
-0x0436,0x0437,0x0438,0x0439,0x043a,0x043b,0x043c,0x043d,
-0x043e,0x043f,0x0440,0x0441,0x0442,0x0443,0x0444,0x0445,
-0x0446,0x0447,0x0448,0x0449,0x044a,0x044b,0x044c,0x044d,
-0x044e,0x044f,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-/* 0xa800 */
-0x02ca,0x02cb,0x02d9,0x2013,0x2015,0x2025,0x2035,0x2105,
-0x2109,0x2196,0x2197,0x2198,0x2199,0x2215,0x221f,0x2223,
-0x2252,0x2266,0x2267,0x22bf,0x2550,0x2551,0x2552,0x2553,
-0x2554,0x2555,0x2556,0x2557,0x2558,0x2559,0x255a,0x255b,
-0x255c,0x255d,0x255e,0x255f,0x2560,0x2561,0x2562,0x2563,
-0x2564,0x2565,0x2566,0x2567,0x2568,0x2569,0x256a,0x256b,
-0x256c,0x256d,0x256e,0x256f,0x2570,0x2571,0x2572,0x2573,
-0x2581,0x2582,0x2583,0x2584,0x2585,0x2586,0x2587,0x0000,
-0x2588,0x2589,0x258a,0x258b,0x258c,0x258d,0x258e,0x258f,
-0x2593,0x2594,0x2595,0x25bc,0x25bd,0x25e2,0x25e3,0x25e4,
-0x25e5,0x2609,0x2295,0x3012,0x301d,0x301e,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0101,0x00e1,0x01ce,0x00e0,0x0113,0x00e9,0x011b,
-0x00e8,0x012b,0x00ed,0x01d0,0x00ec,0x014d,0x00f3,0x01d2,
-0x00f2,0x016b,0x00fa,0x01d4,0x00f9,0x01d6,0x01d8,0x01da,
-0x01dc,0x00fc,0x00ea,0x0251,0x0000,0x0144,0x0148,0x0000,
-0x0261,0x0000,0x0000,0x0000,0x0000,0x3105,0x3106,0x3107,
-0x3108,0x3109,0x310a,0x310b,0x310c,0x310d,0x310e,0x310f,
-0x3110,0x3111,0x3112,0x3113,0x3114,0x3115,0x3116,0x3117,
-0x3118,0x3119,0x311a,0x311b,0x311c,0x311d,0x311e,0x311f,
-0x3120,0x3121,0x3122,0x3123,0x3124,0x3125,0x3126,0x3127,
-0x3128,0x3129,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-/* 0xa900 */
-0x3021,0x3022,0x3023,0x3024,0x3025,0x3026,0x3027,0x3028,
-0x3029,0x32a3,0x338e,0x338f,0x339c,0x339d,0x339e,0x33a1,
-0x33c4,0x33ce,0x33d1,0x33d2,0x33d5,0xfe30,0xffe2,0xffe4,
-0x0000,0x2121,0x3231,0x0000,0x2010,0x0000,0x0000,0x0000,
-0x30fc,0x309b,0x309c,0x30fd,0x30fe,0x3006,0x309d,0x309e,
-0xfe49,0xfe4a,0xfe4b,0xfe4c,0xfe4d,0xfe4e,0xfe4f,0xfe50,
-0xfe51,0xfe52,0xfe54,0xfe55,0xfe56,0xfe57,0xfe59,0xfe5a,
-0xfe5b,0xfe5c,0xfe5d,0xfe5e,0xfe5f,0xfe60,0xfe61,0x0000,
-0xfe62,0xfe63,0xfe64,0xfe65,0xfe66,0xfe68,0xfe69,0xfe6a,
-0xfe6b,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x3007,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x2500,0x2501,0x2502,0x2503,
-0x2504,0x2505,0x2506,0x2507,0x2508,0x2509,0x250a,0x250b,
-0x250c,0x250d,0x250e,0x250f,0x2510,0x2511,0x2512,0x2513,
-0x2514,0x2515,0x2516,0x2517,0x2518,0x2519,0x251a,0x251b,
-0x251c,0x251d,0x251e,0x251f,0x2520,0x2521,0x2522,0x2523,
-0x2524,0x2525,0x2526,0x2527,0x2528,0x2529,0x252a,0x252b,
-0x252c,0x252d,0x252e,0x252f,0x2530,0x2531,0x2532,0x2533,
-0x2534,0x2535,0x2536,0x2537,0x2538,0x2539,0x253a,0x253b,
-0x253c,0x253d,0x253e,0x253f,0x2540,0x2541,0x2542,0x2543,
-0x2544,0x2545,0x2546,0x2547,0x2548,0x2549,0x254a,0x254b,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-/* 0xaa00 */
-0x72dc,0x72dd,0x72df,0x72e2,0x72e3,0x72e4,0x72e5,0x72e6,
-0x72e7,0x72ea,0x72eb,0x72f5,0x72f6,0x72f9,0x72fd,0x72fe,
-0x72ff,0x7300,0x7302,0x7304,0x7305,0x7306,0x7307,0x7308,
-0x7309,0x730b,0x730c,0x730d,0x730f,0x7310,0x7311,0x7312,
-0x7314,0x7318,0x7319,0x731a,0x731f,0x7320,0x7323,0x7324,
-0x7326,0x7327,0x7328,0x732d,0x732f,0x7330,0x7332,0x7333,
-0x7335,0x7336,0x733a,0x733b,0x733c,0x733d,0x7340,0x7341,
-0x7342,0x7343,0x7344,0x7345,0x7346,0x7347,0x7348,0x0000,
-0x7349,0x734a,0x734b,0x734c,0x734e,0x734f,0x7351,0x7353,
-0x7354,0x7355,0x7356,0x7358,0x7359,0x735a,0x735b,0x735c,
-0x735d,0x735e,0x735f,0x7361,0x7362,0x7363,0x7364,0x7365,
-0x7366,0x7367,0x7368,0x7369,0x736a,0x736b,0x736e,0x7370,
-0x7371,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-/* 0xab00 */
-0x7372,0x7373,0x7374,0x7375,0x7376,0x7377,0x7378,0x7379,
-0x737a,0x737b,0x737c,0x737d,0x737f,0x7380,0x7381,0x7382,
-0x7383,0x7385,0x7386,0x7388,0x738a,0x738c,0x738d,0x738f,
-0x7390,0x7392,0x7393,0x7394,0x7395,0x7397,0x7398,0x7399,
-0x739a,0x739c,0x739d,0x739e,0x73a0,0x73a1,0x73a3,0x73a4,
-0x73a5,0x73a6,0x73a7,0x73a8,0x73aa,0x73ac,0x73ad,0x73b1,
-0x73b4,0x73b5,0x73b6,0x73b8,0x73b9,0x73bc,0x73bd,0x73be,
-0x73bf,0x73c1,0x73c3,0x73c4,0x73c5,0x73c6,0x73c7,0x0000,
-0x73cb,0x73cc,0x73ce,0x73d2,0x73d3,0x73d4,0x73d5,0x73d6,
-0x73d7,0x73d8,0x73da,0x73db,0x73dc,0x73dd,0x73df,0x73e1,
-0x73e2,0x73e3,0x73e4,0x73e6,0x73e8,0x73ea,0x73eb,0x73ec,
-0x73ee,0x73ef,0x73f0,0x73f1,0x73f3,0x73f4,0x73f5,0x73f6,
-0x73f7,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-/* 0xac00 */
-0x73f8,0x73f9,0x73fa,0x73fb,0x73fc,0x73fd,0x73fe,0x73ff,
-0x7400,0x7401,0x7402,0x7404,0x7407,0x7408,0x740b,0x740c,
-0x740d,0x740e,0x7411,0x7412,0x7413,0x7414,0x7415,0x7416,
-0x7417,0x7418,0x7419,0x741c,0x741d,0x741e,0x741f,0x7420,
-0x7421,0x7423,0x7424,0x7427,0x7429,0x742b,0x742d,0x742f,
-0x7431,0x7432,0x7437,0x7438,0x7439,0x743a,0x743b,0x743d,
-0x743e,0x743f,0x7440,0x7442,0x7443,0x7444,0x7445,0x7446,
-0x7447,0x7448,0x7449,0x744a,0x744b,0x744c,0x744d,0x0000,
-0x744e,0x744f,0x7450,0x7451,0x7452,0x7453,0x7454,0x7456,
-0x7458,0x745d,0x7460,0x7461,0x7462,0x7463,0x7464,0x7465,
-0x7466,0x7467,0x7468,0x7469,0x746a,0x746b,0x746c,0x746e,
-0x746f,0x7471,0x7472,0x7473,0x7474,0x7475,0x7478,0x7479,
-0x747a,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-/* 0xad00 */
-0x747b,0x747c,0x747d,0x747f,0x7482,0x7484,0x7485,0x7486,
-0x7488,0x7489,0x748a,0x748c,0x748d,0x748f,0x7491,0x7492,
-0x7493,0x7494,0x7495,0x7496,0x7497,0x7498,0x7499,0x749a,
-0x749b,0x749d,0x749f,0x74a0,0x74a1,0x74a2,0x74a3,0x74a4,
-0x74a5,0x74a6,0x74aa,0x74ab,0x74ac,0x74ad,0x74ae,0x74af,
-0x74b0,0x74b1,0x74b2,0x74b3,0x74b4,0x74b5,0x74b6,0x74b7,
-0x74b8,0x74b9,0x74bb,0x74bc,0x74bd,0x74be,0x74bf,0x74c0,
-0x74c1,0x74c2,0x74c3,0x74c4,0x74c5,0x74c6,0x74c7,0x0000,
-0x74c8,0x74c9,0x74ca,0x74cb,0x74cc,0x74cd,0x74ce,0x74cf,
-0x74d0,0x74d1,0x74d3,0x74d4,0x74d5,0x74d6,0x74d7,0x74d8,
-0x74d9,0x74da,0x74db,0x74dd,0x74df,0x74e1,0x74e5,0x74e7,
-0x74e8,0x74e9,0x74ea,0x74eb,0x74ec,0x74ed,0x74f0,0x74f1,
-0x74f2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-/* 0xae00 */
-0x74f3,0x74f5,0x74f8,0x74f9,0x74fa,0x74fb,0x74fc,0x74fd,
-0x74fe,0x7500,0x7501,0x7502,0x7503,0x7505,0x7506,0x7507,
-0x7508,0x7509,0x750a,0x750b,0x750c,0x750e,0x7510,0x7512,
-0x7514,0x7515,0x7516,0x7517,0x751b,0x751d,0x751e,0x7520,
-0x7521,0x7522,0x7523,0x7524,0x7526,0x7527,0x752a,0x752e,
-0x7534,0x7536,0x7539,0x753c,0x753d,0x753f,0x7541,0x7542,
-0x7543,0x7544,0x7546,0x7547,0x7549,0x754a,0x754d,0x7550,
-0x7551,0x7552,0x7553,0x7555,0x7556,0x7557,0x7558,0x0000,
-0x755d,0x755e,0x755f,0x7560,0x7561,0x7562,0x7563,0x7564,
-0x7567,0x7568,0x7569,0x756b,0x756c,0x756d,0x756e,0x756f,
-0x7570,0x7571,0x7573,0x7575,0x7576,0x7577,0x757a,0x757b,
-0x757c,0x757d,0x757e,0x7580,0x7581,0x7582,0x7584,0x7585,
-0x7587,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-/* 0xaf00 */
-0x7588,0x7589,0x758a,0x758c,0x758d,0x758e,0x7590,0x7593,
-0x7595,0x7598,0x759b,0x759c,0x759e,0x75a2,0x75a6,0x75a7,
-0x75a8,0x75a9,0x75aa,0x75ad,0x75b6,0x75b7,0x75ba,0x75bb,
-0x75bf,0x75c0,0x75c1,0x75c6,0x75cb,0x75cc,0x75ce,0x75cf,
-0x75d0,0x75d1,0x75d3,0x75d7,0x75d9,0x75da,0x75dc,0x75dd,
-0x75df,0x75e0,0x75e1,0x75e5,0x75e9,0x75ec,0x75ed,0x75ee,
-0x75ef,0x75f2,0x75f3,0x75f5,0x75f6,0x75f7,0x75f8,0x75fa,
-0x75fb,0x75fd,0x75fe,0x7602,0x7604,0x7606,0x7607,0x0000,
-0x7608,0x7609,0x760b,0x760d,0x760e,0x760f,0x7611,0x7612,
-0x7613,0x7614,0x7616,0x761a,0x761c,0x761d,0x761e,0x7621,
-0x7623,0x7627,0x7628,0x762c,0x762e,0x762f,0x7631,0x7632,
-0x7636,0x7637,0x7639,0x763a,0x763b,0x763d,0x7641,0x7642,
-0x7644,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-/* 0xb000 */
-0x7645,0x7646,0x7647,0x7648,0x7649,0x764a,0x764b,0x764e,
-0x764f,0x7650,0x7651,0x7652,0x7653,0x7655,0x7657,0x7658,
-0x7659,0x765a,0x765b,0x765d,0x765f,0x7660,0x7661,0x7662,
-0x7664,0x7665,0x7666,0x7667,0x7668,0x7669,0x766a,0x766c,
-0x766d,0x766e,0x7670,0x7671,0x7672,0x7673,0x7674,0x7675,
-0x7676,0x7677,0x7679,0x767a,0x767c,0x767f,0x7680,0x7681,
-0x7683,0x7685,0x7689,0x768a,0x768c,0x768d,0x768f,0x7690,
-0x7692,0x7694,0x7695,0x7697,0x7698,0x769a,0x769b,0x0000,
-0x769c,0x769d,0x769e,0x769f,0x76a0,0x76a1,0x76a2,0x76a3,
-0x76a5,0x76a6,0x76a7,0x76a8,0x76a9,0x76aa,0x76ab,0x76ac,
-0x76ad,0x76af,0x76b0,0x76b3,0x76b5,0x76b6,0x76b7,0x76b8,
-0x76b9,0x76ba,0x76bb,0x76bc,0x76bd,0x76be,0x76c0,0x76c1,
-0x76c3,0x554a,0x963f,0x57c3,0x6328,0x54ce,0x5509,0x54c0,
-0x7691,0x764c,0x853c,0x77ee,0x827e,0x788d,0x7231,0x9698,
-0x978d,0x6c28,0x5b89,0x4ffa,0x6309,0x6697,0x5cb8,0x80fa,
-0x6848,0x80ae,0x6602,0x76ce,0x51f9,0x6556,0x71ac,0x7ff1,
-0x8884,0x50b2,0x5965,0x61ca,0x6fb3,0x82ad,0x634c,0x6252,
-0x53ed,0x5427,0x7b06,0x516b,0x75a4,0x5df4,0x62d4,0x8dcb,
-0x9776,0x628a,0x8019,0x575d,0x9738,0x7f62,0x7238,0x767d,
-0x67cf,0x767e,0x6446,0x4f70,0x8d25,0x62dc,0x7a17,0x6591,
-0x73ed,0x642c,0x6273,0x822c,0x9881,0x677f,0x7248,0x626e,
-0x62cc,0x4f34,0x74e3,0x534a,0x529e,0x7eca,0x90a6,0x5e2e,
-0x6886,0x699c,0x8180,0x7ed1,0x68d2,0x78c5,0x868c,0x9551,
-0x508d,0x8c24,0x82de,0x80de,0x5305,0x8912,0x5265,0x0000,
-/* 0xb100 */
-0x76c4,0x76c7,0x76c9,0x76cb,0x76cc,0x76d3,0x76d5,0x76d9,
-0x76da,0x76dc,0x76dd,0x76de,0x76e0,0x76e1,0x76e2,0x76e3,
-0x76e4,0x76e6,0x76e7,0x76e8,0x76e9,0x76ea,0x76eb,0x76ec,
-0x76ed,0x76f0,0x76f3,0x76f5,0x76f6,0x76f7,0x76fa,0x76fb,
-0x76fd,0x76ff,0x7700,0x7702,0x7703,0x7705,0x7706,0x770a,
-0x770c,0x770e,0x770f,0x7710,0x7711,0x7712,0x7713,0x7714,
-0x7715,0x7716,0x7717,0x7718,0x771b,0x771c,0x771d,0x771e,
-0x7721,0x7723,0x7724,0x7725,0x7727,0x772a,0x772b,0x0000,
-0x772c,0x772e,0x7730,0x7731,0x7732,0x7733,0x7734,0x7739,
-0x773b,0x773d,0x773e,0x773f,0x7742,0x7744,0x7745,0x7746,
-0x7748,0x7749,0x774a,0x774b,0x774c,0x774d,0x774e,0x774f,
-0x7752,0x7753,0x7754,0x7755,0x7756,0x7757,0x7758,0x7759,
-0x775c,0x8584,0x96f9,0x4fdd,0x5821,0x9971,0x5b9d,0x62b1,
-0x62a5,0x66b4,0x8c79,0x9c8d,0x7206,0x676f,0x7891,0x60b2,
-0x5351,0x5317,0x8f88,0x80cc,0x8d1d,0x94a1,0x500d,0x72c8,
-0x5907,0x60eb,0x7119,0x88ab,0x5954,0x82ef,0x672c,0x7b28,
-0x5d29,0x7ef7,0x752d,0x6cf5,0x8e66,0x8ff8,0x903c,0x9f3b,
-0x6bd4,0x9119,0x7b14,0x5f7c,0x78a7,0x84d6,0x853d,0x6bd5,
-0x6bd9,0x6bd6,0x5e01,0x5e87,0x75f9,0x95ed,0x655d,0x5f0a,
-0x5fc5,0x8f9f,0x58c1,0x81c2,0x907f,0x965b,0x97ad,0x8fb9,
-0x7f16,0x8d2c,0x6241,0x4fbf,0x53d8,0x535e,0x8fa8,0x8fa9,
-0x8fab,0x904d,0x6807,0x5f6a,0x8198,0x8868,0x9cd6,0x618b,
-0x522b,0x762a,0x5f6c,0x658c,0x6fd2,0x6ee8,0x5bbe,0x6448,
-0x5175,0x51b0,0x67c4,0x4e19,0x79c9,0x997c,0x70b3,0x0000,
-/* 0xb200 */
-0x775d,0x775e,0x775f,0x7760,0x7764,0x7767,0x7769,0x776a,
-0x776d,0x776e,0x776f,0x7770,0x7771,0x7772,0x7773,0x7774,
-0x7775,0x7776,0x7777,0x7778,0x777a,0x777b,0x777c,0x7781,
-0x7782,0x7783,0x7786,0x7787,0x7788,0x7789,0x778a,0x778b,
-0x778f,0x7790,0x7793,0x7794,0x7795,0x7796,0x7797,0x7798,
-0x7799,0x779a,0x779b,0x779c,0x779d,0x779e,0x77a1,0x77a3,
-0x77a4,0x77a6,0x77a8,0x77ab,0x77ad,0x77ae,0x77af,0x77b1,
-0x77b2,0x77b4,0x77b6,0x77b7,0x77b8,0x77b9,0x77ba,0x0000,
-0x77bc,0x77be,0x77c0,0x77c1,0x77c2,0x77c3,0x77c4,0x77c5,
-0x77c6,0x77c7,0x77c8,0x77c9,0x77ca,0x77cb,0x77cc,0x77ce,
-0x77cf,0x77d0,0x77d1,0x77d2,0x77d3,0x77d4,0x77d5,0x77d6,
-0x77d8,0x77d9,0x77da,0x77dd,0x77de,0x77df,0x77e0,0x77e1,
-0x77e4,0x75c5,0x5e76,0x73bb,0x83e0,0x64ad,0x62e8,0x94b5,
-0x6ce2,0x535a,0x52c3,0x640f,0x94c2,0x7b94,0x4f2f,0x5e1b,
-0x8236,0x8116,0x818a,0x6e24,0x6cca,0x9a73,0x6355,0x535c,
-0x54fa,0x8865,0x57e0,0x4e0d,0x5e03,0x6b65,0x7c3f,0x90e8,
-0x6016,0x64e6,0x731c,0x88c1,0x6750,0x624d,0x8d22,0x776c,
-0x8e29,0x91c7,0x5f69,0x83dc,0x8521,0x9910,0x53c2,0x8695,
-0x6b8b,0x60ed,0x60e8,0x707f,0x82cd,0x8231,0x4ed3,0x6ca7,
-0x85cf,0x64cd,0x7cd9,0x69fd,0x66f9,0x8349,0x5395,0x7b56,
-0x4fa7,0x518c,0x6d4b,0x5c42,0x8e6d,0x63d2,0x53c9,0x832c,
-0x8336,0x67e5,0x78b4,0x643d,0x5bdf,0x5c94,0x5dee,0x8be7,
-0x62c6,0x67f4,0x8c7a,0x6400,0x63ba,0x8749,0x998b,0x8c17,
-0x7f20,0x94f2,0x4ea7,0x9610,0x98a4,0x660c,0x7316,0x0000,
-/* 0xb300 */
-0x77e6,0x77e8,0x77ea,0x77ef,0x77f0,0x77f1,0x77f2,0x77f4,
-0x77f5,0x77f7,0x77f9,0x77fa,0x77fb,0x77fc,0x7803,0x7804,
-0x7805,0x7806,0x7807,0x7808,0x780a,0x780b,0x780e,0x780f,
-0x7810,0x7813,0x7815,0x7819,0x781b,0x781e,0x7820,0x7821,
-0x7822,0x7824,0x7828,0x782a,0x782b,0x782e,0x782f,0x7831,
-0x7832,0x7833,0x7835,0x7836,0x783d,0x783f,0x7841,0x7842,
-0x7843,0x7844,0x7846,0x7848,0x7849,0x784a,0x784b,0x784d,
-0x784f,0x7851,0x7853,0x7854,0x7858,0x7859,0x785a,0x0000,
-0x785b,0x785c,0x785e,0x785f,0x7860,0x7861,0x7862,0x7863,
-0x7864,0x7865,0x7866,0x7867,0x7868,0x7869,0x786f,0x7870,
-0x7871,0x7872,0x7873,0x7874,0x7875,0x7876,0x7878,0x7879,
-0x787a,0x787b,0x787d,0x787e,0x787f,0x7880,0x7881,0x7882,
-0x7883,0x573a,0x5c1d,0x5e38,0x957f,0x507f,0x80a0,0x5382,
-0x655e,0x7545,0x5531,0x5021,0x8d85,0x6284,0x949e,0x671d,
-0x5632,0x6f6e,0x5de2,0x5435,0x7092,0x8f66,0x626f,0x64a4,
-0x63a3,0x5f7b,0x6f88,0x90f4,0x81e3,0x8fb0,0x5c18,0x6668,
-0x5ff1,0x6c89,0x9648,0x8d81,0x886c,0x6491,0x79f0,0x57ce,
-0x6a59,0x6210,0x5448,0x4e58,0x7a0b,0x60e9,0x6f84,0x8bda,
-0x627f,0x901e,0x9a8b,0x79e4,0x5403,0x75f4,0x6301,0x5319,
-0x6c60,0x8fdf,0x5f1b,0x9a70,0x803b,0x9f7f,0x4f88,0x5c3a,
-0x8d64,0x7fc5,0x65a5,0x70bd,0x5145,0x51b2,0x866b,0x5d07,
-0x5ba0,0x62bd,0x916c,0x7574,0x8e0c,0x7a20,0x6101,0x7b79,
-0x4ec7,0x7ef8,0x7785,0x4e11,0x81ed,0x521d,0x51fa,0x6a71,
-0x53a8,0x8e87,0x9504,0x96cf,0x6ec1,0x9664,0x695a,0x0000,
-/* 0xb400 */
-0x7884,0x7885,0x7886,0x7888,0x788a,0x788b,0x788f,0x7890,
-0x7892,0x7894,0x7895,0x7896,0x7899,0x789d,0x789e,0x78a0,
-0x78a2,0x78a4,0x78a6,0x78a8,0x78a9,0x78aa,0x78ab,0x78ac,
-0x78ad,0x78ae,0x78af,0x78b5,0x78b6,0x78b7,0x78b8,0x78ba,
-0x78bb,0x78bc,0x78bd,0x78bf,0x78c0,0x78c2,0x78c3,0x78c4,
-0x78c6,0x78c7,0x78c8,0x78cc,0x78cd,0x78ce,0x78cf,0x78d1,
-0x78d2,0x78d3,0x78d6,0x78d7,0x78d8,0x78da,0x78db,0x78dc,
-0x78dd,0x78de,0x78df,0x78e0,0x78e1,0x78e2,0x78e3,0x0000,
-0x78e4,0x78e5,0x78e6,0x78e7,0x78e9,0x78ea,0x78eb,0x78ed,
-0x78ee,0x78ef,0x78f0,0x78f1,0x78f3,0x78f5,0x78f6,0x78f8,
-0x78f9,0x78fb,0x78fc,0x78fd,0x78fe,0x78ff,0x7900,0x7902,
-0x7903,0x7904,0x7906,0x7907,0x7908,0x7909,0x790a,0x790b,
-0x790c,0x7840,0x50a8,0x77d7,0x6410,0x89e6,0x5904,0x63e3,
-0x5ddd,0x7a7f,0x693d,0x4f20,0x8239,0x5598,0x4e32,0x75ae,
-0x7a97,0x5e62,0x5e8a,0x95ef,0x521b,0x5439,0x708a,0x6376,
-0x9524,0x5782,0x6625,0x693f,0x9187,0x5507,0x6df3,0x7eaf,
-0x8822,0x6233,0x7ef0,0x75b5,0x8328,0x78c1,0x96cc,0x8f9e,
-0x6148,0x74f7,0x8bcd,0x6b64,0x523a,0x8d50,0x6b21,0x806a,
-0x8471,0x56f1,0x5306,0x4ece,0x4e1b,0x51d1,0x7c97,0x918b,
-0x7c07,0x4fc3,0x8e7f,0x7be1,0x7a9c,0x6467,0x5d14,0x50ac,
-0x8106,0x7601,0x7cb9,0x6dec,0x7fe0,0x6751,0x5b58,0x5bf8,
-0x78cb,0x64ae,0x6413,0x63aa,0x632b,0x9519,0x642d,0x8fbe,
-0x7b54,0x7629,0x6253,0x5927,0x5446,0x6b79,0x50a3,0x6234,
-0x5e26,0x6b86,0x4ee3,0x8d37,0x888b,0x5f85,0x902e,0x0000,
-/* 0xb500 */
-0x790d,0x790e,0x790f,0x7910,0x7911,0x7912,0x7914,0x7915,
-0x7916,0x7917,0x7918,0x7919,0x791a,0x791b,0x791c,0x791d,
-0x791f,0x7920,0x7921,0x7922,0x7923,0x7925,0x7926,0x7927,
-0x7928,0x7929,0x792a,0x792b,0x792c,0x792d,0x792e,0x792f,
-0x7930,0x7931,0x7932,0x7933,0x7935,0x7936,0x7937,0x7938,
-0x7939,0x793d,0x793f,0x7942,0x7943,0x7944,0x7945,0x7947,
-0x794a,0x794b,0x794c,0x794d,0x794e,0x794f,0x7950,0x7951,
-0x7952,0x7954,0x7955,0x7958,0x7959,0x7961,0x7963,0x0000,
-0x7964,0x7966,0x7969,0x796a,0x796b,0x796c,0x796e,0x7970,
-0x7971,0x7972,0x7973,0x7974,0x7975,0x7976,0x7979,0x797b,
-0x797c,0x797d,0x797e,0x797f,0x7982,0x7983,0x7986,0x7987,
-0x7988,0x7989,0x798b,0x798c,0x798d,0x798e,0x7990,0x7991,
-0x7992,0x6020,0x803d,0x62c5,0x4e39,0x5355,0x90f8,0x63b8,
-0x80c6,0x65e6,0x6c2e,0x4f46,0x60ee,0x6de1,0x8bde,0x5f39,
-0x86cb,0x5f53,0x6321,0x515a,0x8361,0x6863,0x5200,0x6363,
-0x8e48,0x5012,0x5c9b,0x7977,0x5bfc,0x5230,0x7a3b,0x60bc,
-0x9053,0x76d7,0x5fb7,0x5f97,0x7684,0x8e6c,0x706f,0x767b,
-0x7b49,0x77aa,0x51f3,0x9093,0x5824,0x4f4e,0x6ef4,0x8fea,
-0x654c,0x7b1b,0x72c4,0x6da4,0x7fdf,0x5ae1,0x62b5,0x5e95,
-0x5730,0x8482,0x7b2c,0x5e1d,0x5f1f,0x9012,0x7f14,0x98a0,
-0x6382,0x6ec7,0x7898,0x70b9,0x5178,0x975b,0x57ab,0x7535,
-0x4f43,0x7538,0x5e97,0x60e6,0x5960,0x6dc0,0x6bbf,0x7889,
-0x53fc,0x96d5,0x51cb,0x5201,0x6389,0x540a,0x9493,0x8c03,
-0x8dcc,0x7239,0x789f,0x8776,0x8fed,0x8c0d,0x53e0,0x0000,
-/* 0xb600 */
-0x7993,0x7994,0x7995,0x7996,0x7997,0x7998,0x7999,0x799b,
-0x799c,0x799d,0x799e,0x799f,0x79a0,0x79a1,0x79a2,0x79a3,
-0x79a4,0x79a5,0x79a6,0x79a8,0x79a9,0x79aa,0x79ab,0x79ac,
-0x79ad,0x79ae,0x79af,0x79b0,0x79b1,0x79b2,0x79b4,0x79b5,
-0x79b6,0x79b7,0x79b8,0x79bc,0x79bf,0x79c2,0x79c4,0x79c5,
-0x79c7,0x79c8,0x79ca,0x79cc,0x79ce,0x79cf,0x79d0,0x79d3,
-0x79d4,0x79d6,0x79d7,0x79d9,0x79da,0x79db,0x79dc,0x79dd,
-0x79de,0x79e0,0x79e1,0x79e2,0x79e5,0x79e8,0x79ea,0x0000,
-0x79ec,0x79ee,0x79f1,0x79f2,0x79f3,0x79f4,0x79f5,0x79f6,
-0x79f7,0x79f9,0x79fa,0x79fc,0x79fe,0x79ff,0x7a01,0x7a04,
-0x7a05,0x7a07,0x7a08,0x7a09,0x7a0a,0x7a0c,0x7a0f,0x7a10,
-0x7a11,0x7a12,0x7a13,0x7a15,0x7a16,0x7a18,0x7a19,0x7a1b,
-0x7a1c,0x4e01,0x76ef,0x53ee,0x9489,0x9876,0x9f0e,0x952d,
-0x5b9a,0x8ba2,0x4e22,0x4e1c,0x51ac,0x8463,0x61c2,0x52a8,
-0x680b,0x4f97,0x606b,0x51bb,0x6d1e,0x515c,0x6296,0x6597,
-0x9661,0x8c46,0x9017,0x75d8,0x90fd,0x7763,0x6bd2,0x728a,
-0x72ec,0x8bfb,0x5835,0x7779,0x8d4c,0x675c,0x9540,0x809a,
-0x5ea6,0x6e21,0x5992,0x7aef,0x77ed,0x953b,0x6bb5,0x65ad,
-0x7f0e,0x5806,0x5151,0x961f,0x5bf9,0x58a9,0x5428,0x8e72,
-0x6566,0x987f,0x56e4,0x949d,0x76fe,0x9041,0x6387,0x54c6,
-0x591a,0x593a,0x579b,0x8eb2,0x6735,0x8dfa,0x8235,0x5241,
-0x60f0,0x5815,0x86fe,0x5ce8,0x9e45,0x4fc4,0x989d,0x8bb9,
-0x5a25,0x6076,0x5384,0x627c,0x904f,0x9102,0x997f,0x6069,
-0x800c,0x513f,0x8033,0x5c14,0x9975,0x6d31,0x4e8c,0x0000,
-/* 0xb700 */
-0x7a1d,0x7a1f,0x7a21,0x7a22,0x7a24,0x7a25,0x7a26,0x7a27,
-0x7a28,0x7a29,0x7a2a,0x7a2b,0x7a2c,0x7a2d,0x7a2e,0x7a2f,
-0x7a30,0x7a31,0x7a32,0x7a34,0x7a35,0x7a36,0x7a38,0x7a3a,
-0x7a3e,0x7a40,0x7a41,0x7a42,0x7a43,0x7a44,0x7a45,0x7a47,
-0x7a48,0x7a49,0x7a4a,0x7a4b,0x7a4c,0x7a4d,0x7a4e,0x7a4f,
-0x7a50,0x7a52,0x7a53,0x7a54,0x7a55,0x7a56,0x7a58,0x7a59,
-0x7a5a,0x7a5b,0x7a5c,0x7a5d,0x7a5e,0x7a5f,0x7a60,0x7a61,
-0x7a62,0x7a63,0x7a64,0x7a65,0x7a66,0x7a67,0x7a68,0x0000,
-0x7a69,0x7a6a,0x7a6b,0x7a6c,0x7a6d,0x7a6e,0x7a6f,0x7a71,
-0x7a72,0x7a73,0x7a75,0x7a7b,0x7a7c,0x7a7d,0x7a7e,0x7a82,
-0x7a85,0x7a87,0x7a89,0x7a8a,0x7a8b,0x7a8c,0x7a8e,0x7a8f,
-0x7a90,0x7a93,0x7a94,0x7a99,0x7a9a,0x7a9b,0x7a9e,0x7aa1,
-0x7aa2,0x8d30,0x53d1,0x7f5a,0x7b4f,0x4f10,0x4e4f,0x9600,
-0x6cd5,0x73d0,0x85e9,0x5e06,0x756a,0x7ffb,0x6a0a,0x77fe,
-0x9492,0x7e41,0x51e1,0x70e6,0x53cd,0x8fd4,0x8303,0x8d29,
-0x72af,0x996d,0x6cdb,0x574a,0x82b3,0x65b9,0x80aa,0x623f,
-0x9632,0x59a8,0x4eff,0x8bbf,0x7eba,0x653e,0x83f2,0x975e,
-0x5561,0x98de,0x80a5,0x532a,0x8bfd,0x5420,0x80ba,0x5e9f,
-0x6cb8,0x8d39,0x82ac,0x915a,0x5429,0x6c1b,0x5206,0x7eb7,
-0x575f,0x711a,0x6c7e,0x7c89,0x594b,0x4efd,0x5fff,0x6124,
-0x7caa,0x4e30,0x5c01,0x67ab,0x8702,0x5cf0,0x950b,0x98ce,
-0x75af,0x70fd,0x9022,0x51af,0x7f1d,0x8bbd,0x5949,0x51e4,
-0x4f5b,0x5426,0x592b,0x6577,0x80a4,0x5b75,0x6276,0x62c2,
-0x8f90,0x5e45,0x6c1f,0x7b26,0x4f0f,0x4fd8,0x670d,0x0000,
-/* 0xb800 */
-0x7aa3,0x7aa4,0x7aa7,0x7aa9,0x7aaa,0x7aab,0x7aae,0x7aaf,
-0x7ab0,0x7ab1,0x7ab2,0x7ab4,0x7ab5,0x7ab6,0x7ab7,0x7ab8,
-0x7ab9,0x7aba,0x7abb,0x7abc,0x7abd,0x7abe,0x7ac0,0x7ac1,
-0x7ac2,0x7ac3,0x7ac4,0x7ac5,0x7ac6,0x7ac7,0x7ac8,0x7ac9,
-0x7aca,0x7acc,0x7acd,0x7ace,0x7acf,0x7ad0,0x7ad1,0x7ad2,
-0x7ad3,0x7ad4,0x7ad5,0x7ad7,0x7ad8,0x7ada,0x7adb,0x7adc,
-0x7add,0x7ae1,0x7ae2,0x7ae4,0x7ae7,0x7ae8,0x7ae9,0x7aea,
-0x7aeb,0x7aec,0x7aee,0x7af0,0x7af1,0x7af2,0x7af3,0x0000,
-0x7af4,0x7af5,0x7af6,0x7af7,0x7af8,0x7afb,0x7afc,0x7afe,
-0x7b00,0x7b01,0x7b02,0x7b05,0x7b07,0x7b09,0x7b0c,0x7b0d,
-0x7b0e,0x7b10,0x7b12,0x7b13,0x7b16,0x7b17,0x7b18,0x7b1a,
-0x7b1c,0x7b1d,0x7b1f,0x7b21,0x7b22,0x7b23,0x7b27,0x7b29,
-0x7b2d,0x6d6e,0x6daa,0x798f,0x88b1,0x5f17,0x752b,0x629a,
-0x8f85,0x4fef,0x91dc,0x65a7,0x812f,0x8151,0x5e9c,0x8150,
-0x8d74,0x526f,0x8986,0x8d4b,0x590d,0x5085,0x4ed8,0x961c,
-0x7236,0x8179,0x8d1f,0x5bcc,0x8ba3,0x9644,0x5987,0x7f1a,
-0x5490,0x5676,0x560e,0x8be5,0x6539,0x6982,0x9499,0x76d6,
-0x6e89,0x5e72,0x7518,0x6746,0x67d1,0x7aff,0x809d,0x8d76,
-0x611f,0x79c6,0x6562,0x8d63,0x5188,0x521a,0x94a2,0x7f38,
-0x809b,0x7eb2,0x5c97,0x6e2f,0x6760,0x7bd9,0x768b,0x9ad8,
-0x818f,0x7f94,0x7cd5,0x641e,0x9550,0x7a3f,0x544a,0x54e5,
-0x6b4c,0x6401,0x6208,0x9e3d,0x80f3,0x7599,0x5272,0x9769,
-0x845b,0x683c,0x86e4,0x9601,0x9694,0x94ec,0x4e2a,0x5404,
-0x7ed9,0x6839,0x8ddf,0x8015,0x66f4,0x5e9a,0x7fb9,0x0000,
-/* 0xb900 */
-0x7b2f,0x7b30,0x7b32,0x7b34,0x7b35,0x7b36,0x7b37,0x7b39,
-0x7b3b,0x7b3d,0x7b3f,0x7b40,0x7b41,0x7b42,0x7b43,0x7b44,
-0x7b46,0x7b48,0x7b4a,0x7b4d,0x7b4e,0x7b53,0x7b55,0x7b57,
-0x7b59,0x7b5c,0x7b5e,0x7b5f,0x7b61,0x7b63,0x7b64,0x7b65,
-0x7b66,0x7b67,0x7b68,0x7b69,0x7b6a,0x7b6b,0x7b6c,0x7b6d,
-0x7b6f,0x7b70,0x7b73,0x7b74,0x7b76,0x7b78,0x7b7a,0x7b7c,
-0x7b7d,0x7b7f,0x7b81,0x7b82,0x7b83,0x7b84,0x7b86,0x7b87,
-0x7b88,0x7b89,0x7b8a,0x7b8b,0x7b8c,0x7b8e,0x7b8f,0x0000,
-0x7b91,0x7b92,0x7b93,0x7b96,0x7b98,0x7b99,0x7b9a,0x7b9b,
-0x7b9e,0x7b9f,0x7ba0,0x7ba3,0x7ba4,0x7ba5,0x7bae,0x7baf,
-0x7bb0,0x7bb2,0x7bb3,0x7bb5,0x7bb6,0x7bb7,0x7bb9,0x7bba,
-0x7bbb,0x7bbc,0x7bbd,0x7bbe,0x7bbf,0x7bc0,0x7bc2,0x7bc3,
-0x7bc4,0x57c2,0x803f,0x6897,0x5de5,0x653b,0x529f,0x606d,
-0x9f9a,0x4f9b,0x8eac,0x516c,0x5bab,0x5f13,0x5de9,0x6c5e,
-0x62f1,0x8d21,0x5171,0x94a9,0x52fe,0x6c9f,0x82df,0x72d7,
-0x57a2,0x6784,0x8d2d,0x591f,0x8f9c,0x83c7,0x5495,0x7b8d,
-0x4f30,0x6cbd,0x5b64,0x59d1,0x9f13,0x53e4,0x86ca,0x9aa8,
-0x8c37,0x80a1,0x6545,0x987e,0x56fa,0x96c7,0x522e,0x74dc,
-0x5250,0x5be1,0x6302,0x8902,0x4e56,0x62d0,0x602a,0x68fa,
-0x5173,0x5b98,0x51a0,0x89c2,0x7ba1,0x9986,0x7f50,0x60ef,
-0x704c,0x8d2f,0x5149,0x5e7f,0x901b,0x7470,0x89c4,0x572d,
-0x7845,0x5f52,0x9f9f,0x95fa,0x8f68,0x9b3c,0x8be1,0x7678,
-0x6842,0x67dc,0x8dea,0x8d35,0x523d,0x8f8a,0x6eda,0x68cd,
-0x9505,0x90ed,0x56fd,0x679c,0x88f9,0x8fc7,0x54c8,0x0000,
-/* 0xba00 */
-0x7bc5,0x7bc8,0x7bc9,0x7bca,0x7bcb,0x7bcd,0x7bce,0x7bcf,
-0x7bd0,0x7bd2,0x7bd4,0x7bd5,0x7bd6,0x7bd7,0x7bd8,0x7bdb,
-0x7bdc,0x7bde,0x7bdf,0x7be0,0x7be2,0x7be3,0x7be4,0x7be7,
-0x7be8,0x7be9,0x7beb,0x7bec,0x7bed,0x7bef,0x7bf0,0x7bf2,
-0x7bf3,0x7bf4,0x7bf5,0x7bf6,0x7bf8,0x7bf9,0x7bfa,0x7bfb,
-0x7bfd,0x7bff,0x7c00,0x7c01,0x7c02,0x7c03,0x7c04,0x7c05,
-0x7c06,0x7c08,0x7c09,0x7c0a,0x7c0d,0x7c0e,0x7c10,0x7c11,
-0x7c12,0x7c13,0x7c14,0x7c15,0x7c17,0x7c18,0x7c19,0x0000,
-0x7c1a,0x7c1b,0x7c1c,0x7c1d,0x7c1e,0x7c20,0x7c21,0x7c22,
-0x7c23,0x7c24,0x7c25,0x7c28,0x7c29,0x7c2b,0x7c2c,0x7c2d,
-0x7c2e,0x7c2f,0x7c30,0x7c31,0x7c32,0x7c33,0x7c34,0x7c35,
-0x7c36,0x7c37,0x7c39,0x7c3a,0x7c3b,0x7c3c,0x7c3d,0x7c3e,
-0x7c42,0x9ab8,0x5b69,0x6d77,0x6c26,0x4ea5,0x5bb3,0x9a87,
-0x9163,0x61a8,0x90af,0x97e9,0x542b,0x6db5,0x5bd2,0x51fd,
-0x558a,0x7f55,0x7ff0,0x64bc,0x634d,0x65f1,0x61be,0x608d,
-0x710a,0x6c57,0x6c49,0x592f,0x676d,0x822a,0x58d5,0x568e,
-0x8c6a,0x6beb,0x90dd,0x597d,0x8017,0x53f7,0x6d69,0x5475,
-0x559d,0x8377,0x83cf,0x6838,0x79be,0x548c,0x4f55,0x5408,
-0x76d2,0x8c89,0x9602,0x6cb3,0x6db8,0x8d6b,0x8910,0x9e64,
-0x8d3a,0x563f,0x9ed1,0x75d5,0x5f88,0x72e0,0x6068,0x54fc,
-0x4ea8,0x6a2a,0x8861,0x6052,0x8f70,0x54c4,0x70d8,0x8679,
-0x9e3f,0x6d2a,0x5b8f,0x5f18,0x7ea2,0x5589,0x4faf,0x7334,
-0x543c,0x539a,0x5019,0x540e,0x547c,0x4e4e,0x5ffd,0x745a,
-0x58f6,0x846b,0x80e1,0x8774,0x72d0,0x7cca,0x6e56,0x0000,
-/* 0xbb00 */
-0x7c43,0x7c44,0x7c45,0x7c46,0x7c47,0x7c48,0x7c49,0x7c4a,
-0x7c4b,0x7c4c,0x7c4e,0x7c4f,0x7c50,0x7c51,0x7c52,0x7c53,
-0x7c54,0x7c55,0x7c56,0x7c57,0x7c58,0x7c59,0x7c5a,0x7c5b,
-0x7c5c,0x7c5d,0x7c5e,0x7c5f,0x7c60,0x7c61,0x7c62,0x7c63,
-0x7c64,0x7c65,0x7c66,0x7c67,0x7c68,0x7c69,0x7c6a,0x7c6b,
-0x7c6c,0x7c6d,0x7c6e,0x7c6f,0x7c70,0x7c71,0x7c72,0x7c75,
-0x7c76,0x7c77,0x7c78,0x7c79,0x7c7a,0x7c7e,0x7c7f,0x7c80,
-0x7c81,0x7c82,0x7c83,0x7c84,0x7c85,0x7c86,0x7c87,0x0000,
-0x7c88,0x7c8a,0x7c8b,0x7c8c,0x7c8d,0x7c8e,0x7c8f,0x7c90,
-0x7c93,0x7c94,0x7c96,0x7c99,0x7c9a,0x7c9b,0x7ca0,0x7ca1,
-0x7ca3,0x7ca6,0x7ca7,0x7ca8,0x7ca9,0x7cab,0x7cac,0x7cad,
-0x7caf,0x7cb0,0x7cb4,0x7cb5,0x7cb6,0x7cb7,0x7cb8,0x7cba,
-0x7cbb,0x5f27,0x864e,0x552c,0x62a4,0x4e92,0x6caa,0x6237,
-0x82b1,0x54d7,0x534e,0x733e,0x6ed1,0x753b,0x5212,0x5316,
-0x8bdd,0x69d0,0x5f8a,0x6000,0x6dee,0x574f,0x6b22,0x73af,
-0x6853,0x8fd8,0x7f13,0x6362,0x60a3,0x5524,0x75ea,0x8c62,
-0x7115,0x6da3,0x5ba6,0x5e7b,0x8352,0x614c,0x9ec4,0x78fa,
-0x8757,0x7c27,0x7687,0x51f0,0x60f6,0x714c,0x6643,0x5e4c,
-0x604d,0x8c0e,0x7070,0x6325,0x8f89,0x5fbd,0x6062,0x86d4,
-0x56de,0x6bc1,0x6094,0x6167,0x5349,0x60e0,0x6666,0x8d3f,
-0x79fd,0x4f1a,0x70e9,0x6c47,0x8bb3,0x8bf2,0x7ed8,0x8364,
-0x660f,0x5a5a,0x9b42,0x6d51,0x6df7,0x8c41,0x6d3b,0x4f19,
-0x706b,0x83b7,0x6216,0x60d1,0x970d,0x8d27,0x7978,0x51fb,
-0x573e,0x57fa,0x673a,0x7578,0x7a3d,0x79ef,0x7b95,0x0000,
-/* 0xbc00 */
-0x7cbf,0x7cc0,0x7cc2,0x7cc3,0x7cc4,0x7cc6,0x7cc9,0x7ccb,
-0x7cce,0x7ccf,0x7cd0,0x7cd1,0x7cd2,0x7cd3,0x7cd4,0x7cd8,
-0x7cda,0x7cdb,0x7cdd,0x7cde,0x7ce1,0x7ce2,0x7ce3,0x7ce4,
-0x7ce5,0x7ce6,0x7ce7,0x7ce9,0x7cea,0x7ceb,0x7cec,0x7ced,
-0x7cee,0x7cf0,0x7cf1,0x7cf2,0x7cf3,0x7cf4,0x7cf5,0x7cf6,
-0x7cf7,0x7cf9,0x7cfa,0x7cfc,0x7cfd,0x7cfe,0x7cff,0x7d00,
-0x7d01,0x7d02,0x7d03,0x7d04,0x7d05,0x7d06,0x7d07,0x7d08,
-0x7d09,0x7d0b,0x7d0c,0x7d0d,0x7d0e,0x7d0f,0x7d10,0x0000,
-0x7d11,0x7d12,0x7d13,0x7d14,0x7d15,0x7d16,0x7d17,0x7d18,
-0x7d19,0x7d1a,0x7d1b,0x7d1c,0x7d1d,0x7d1e,0x7d1f,0x7d21,
-0x7d23,0x7d24,0x7d25,0x7d26,0x7d28,0x7d29,0x7d2a,0x7d2c,
-0x7d2d,0x7d2e,0x7d30,0x7d31,0x7d32,0x7d33,0x7d34,0x7d35,
-0x7d36,0x808c,0x9965,0x8ff9,0x6fc0,0x8ba5,0x9e21,0x59ec,
-0x7ee9,0x7f09,0x5409,0x6781,0x68d8,0x8f91,0x7c4d,0x96c6,
-0x53ca,0x6025,0x75be,0x6c72,0x5373,0x5ac9,0x7ea7,0x6324,
-0x51e0,0x810a,0x5df1,0x84df,0x6280,0x5180,0x5b63,0x4f0e,
-0x796d,0x5242,0x60b8,0x6d4e,0x5bc4,0x5bc2,0x8ba1,0x8bb0,
-0x65e2,0x5fcc,0x9645,0x5993,0x7ee7,0x7eaa,0x5609,0x67b7,
-0x5939,0x4f73,0x5bb6,0x52a0,0x835a,0x988a,0x8d3e,0x7532,
-0x94be,0x5047,0x7a3c,0x4ef7,0x67b6,0x9a7e,0x5ac1,0x6b7c,
-0x76d1,0x575a,0x5c16,0x7b3a,0x95f4,0x714e,0x517c,0x80a9,
-0x8270,0x5978,0x7f04,0x8327,0x68c0,0x67ec,0x78b1,0x7877,
-0x62e3,0x6361,0x7b80,0x4fed,0x526a,0x51cf,0x8350,0x69db,
-0x9274,0x8df5,0x8d31,0x89c1,0x952e,0x7bad,0x4ef6,0x0000,
-/* 0xbd00 */
-0x7d37,0x7d38,0x7d39,0x7d3a,0x7d3b,0x7d3c,0x7d3d,0x7d3e,
-0x7d3f,0x7d40,0x7d41,0x7d42,0x7d43,0x7d44,0x7d45,0x7d46,
-0x7d47,0x7d48,0x7d49,0x7d4a,0x7d4b,0x7d4c,0x7d4d,0x7d4e,
-0x7d4f,0x7d50,0x7d51,0x7d52,0x7d53,0x7d54,0x7d55,0x7d56,
-0x7d57,0x7d58,0x7d59,0x7d5a,0x7d5b,0x7d5c,0x7d5d,0x7d5e,
-0x7d5f,0x7d60,0x7d61,0x7d62,0x7d63,0x7d64,0x7d65,0x7d66,
-0x7d67,0x7d68,0x7d69,0x7d6a,0x7d6b,0x7d6c,0x7d6d,0x7d6f,
-0x7d70,0x7d71,0x7d72,0x7d73,0x7d74,0x7d75,0x7d76,0x0000,
-0x7d78,0x7d79,0x7d7a,0x7d7b,0x7d7c,0x7d7d,0x7d7e,0x7d7f,
-0x7d80,0x7d81,0x7d82,0x7d83,0x7d84,0x7d85,0x7d86,0x7d87,
-0x7d88,0x7d89,0x7d8a,0x7d8b,0x7d8c,0x7d8d,0x7d8e,0x7d8f,
-0x7d90,0x7d91,0x7d92,0x7d93,0x7d94,0x7d95,0x7d96,0x7d97,
-0x7d98,0x5065,0x8230,0x5251,0x996f,0x6e10,0x6e85,0x6da7,
-0x5efa,0x50f5,0x59dc,0x5c06,0x6d46,0x6c5f,0x7586,0x848b,
-0x6868,0x5956,0x8bb2,0x5320,0x9171,0x964d,0x8549,0x6912,
-0x7901,0x7126,0x80f6,0x4ea4,0x90ca,0x6d47,0x9a84,0x5a07,
-0x56bc,0x6405,0x94f0,0x77eb,0x4fa5,0x811a,0x72e1,0x89d2,
-0x997a,0x7f34,0x7ede,0x527f,0x6559,0x9175,0x8f7f,0x8f83,
-0x53eb,0x7a96,0x63ed,0x63a5,0x7686,0x79f8,0x8857,0x9636,
-0x622a,0x52ab,0x8282,0x6854,0x6770,0x6377,0x776b,0x7aed,
-0x6d01,0x7ed3,0x89e3,0x59d0,0x6212,0x85c9,0x82a5,0x754c,
-0x501f,0x4ecb,0x75a5,0x8beb,0x5c4a,0x5dfe,0x7b4b,0x65a4,
-0x91d1,0x4eca,0x6d25,0x895f,0x7d27,0x9526,0x4ec5,0x8c28,
-0x8fdb,0x9773,0x664b,0x7981,0x8fd1,0x70ec,0x6d78,0x0000,
-/* 0xbe00 */
-0x7d99,0x7d9a,0x7d9b,0x7d9c,0x7d9d,0x7d9e,0x7d9f,0x7da0,
-0x7da1,0x7da2,0x7da3,0x7da4,0x7da5,0x7da7,0x7da8,0x7da9,
-0x7daa,0x7dab,0x7dac,0x7dad,0x7daf,0x7db0,0x7db1,0x7db2,
-0x7db3,0x7db4,0x7db5,0x7db6,0x7db7,0x7db8,0x7db9,0x7dba,
-0x7dbb,0x7dbc,0x7dbd,0x7dbe,0x7dbf,0x7dc0,0x7dc1,0x7dc2,
-0x7dc3,0x7dc4,0x7dc5,0x7dc6,0x7dc7,0x7dc8,0x7dc9,0x7dca,
-0x7dcb,0x7dcc,0x7dcd,0x7dce,0x7dcf,0x7dd0,0x7dd1,0x7dd2,
-0x7dd3,0x7dd4,0x7dd5,0x7dd6,0x7dd7,0x7dd8,0x7dd9,0x0000,
-0x7dda,0x7ddb,0x7ddc,0x7ddd,0x7dde,0x7ddf,0x7de0,0x7de1,
-0x7de2,0x7de3,0x7de4,0x7de5,0x7de6,0x7de7,0x7de8,0x7de9,
-0x7dea,0x7deb,0x7dec,0x7ded,0x7dee,0x7def,0x7df0,0x7df1,
-0x7df2,0x7df3,0x7df4,0x7df5,0x7df6,0x7df7,0x7df8,0x7df9,
-0x7dfa,0x5c3d,0x52b2,0x8346,0x5162,0x830e,0x775b,0x6676,
-0x9cb8,0x4eac,0x60ca,0x7cbe,0x7cb3,0x7ecf,0x4e95,0x8b66,
-0x666f,0x9888,0x9759,0x5883,0x656c,0x955c,0x5f84,0x75c9,
-0x9756,0x7adf,0x7ade,0x51c0,0x70af,0x7a98,0x63ea,0x7a76,
-0x7ea0,0x7396,0x97ed,0x4e45,0x7078,0x4e5d,0x9152,0x53a9,
-0x6551,0x65e7,0x81fc,0x8205,0x548e,0x5c31,0x759a,0x97a0,
-0x62d8,0x72d9,0x75bd,0x5c45,0x9a79,0x83ca,0x5c40,0x5480,
-0x77e9,0x4e3e,0x6cae,0x805a,0x62d2,0x636e,0x5de8,0x5177,
-0x8ddd,0x8e1e,0x952f,0x4ff1,0x53e5,0x60e7,0x70ac,0x5267,
-0x6350,0x9e43,0x5a1f,0x5026,0x7737,0x5377,0x7ee2,0x6485,
-0x652b,0x6289,0x6398,0x5014,0x7235,0x89c9,0x51b3,0x8bc0,
-0x7edd,0x5747,0x83cc,0x94a7,0x519b,0x541b,0x5cfb,0x0000,
-/* 0xbf00 */
-0x7dfb,0x7dfc,0x7dfd,0x7dfe,0x7dff,0x7e00,0x7e01,0x7e02,
-0x7e03,0x7e04,0x7e05,0x7e06,0x7e07,0x7e08,0x7e09,0x7e0a,
-0x7e0b,0x7e0c,0x7e0d,0x7e0e,0x7e0f,0x7e10,0x7e11,0x7e12,
-0x7e13,0x7e14,0x7e15,0x7e16,0x7e17,0x7e18,0x7e19,0x7e1a,
-0x7e1b,0x7e1c,0x7e1d,0x7e1e,0x7e1f,0x7e20,0x7e21,0x7e22,
-0x7e23,0x7e24,0x7e25,0x7e26,0x7e27,0x7e28,0x7e29,0x7e2a,
-0x7e2b,0x7e2c,0x7e2d,0x7e2e,0x7e2f,0x7e30,0x7e31,0x7e32,
-0x7e33,0x7e34,0x7e35,0x7e36,0x7e37,0x7e38,0x7e39,0x0000,
-0x7e3a,0x7e3c,0x7e3d,0x7e3e,0x7e3f,0x7e40,0x7e42,0x7e43,
-0x7e44,0x7e45,0x7e46,0x7e48,0x7e49,0x7e4a,0x7e4b,0x7e4c,
-0x7e4d,0x7e4e,0x7e4f,0x7e50,0x7e51,0x7e52,0x7e53,0x7e54,
-0x7e55,0x7e56,0x7e57,0x7e58,0x7e59,0x7e5a,0x7e5b,0x7e5c,
-0x7e5d,0x4fca,0x7ae3,0x6d5a,0x90e1,0x9a8f,0x5580,0x5496,
-0x5361,0x54af,0x5f00,0x63e9,0x6977,0x51ef,0x6168,0x520a,
-0x582a,0x52d8,0x574e,0x780d,0x770b,0x5eb7,0x6177,0x7ce0,
-0x625b,0x6297,0x4ea2,0x7095,0x8003,0x62f7,0x70e4,0x9760,
-0x5777,0x82db,0x67ef,0x68f5,0x78d5,0x9897,0x79d1,0x58f3,
-0x54b3,0x53ef,0x6e34,0x514b,0x523b,0x5ba2,0x8bfe,0x80af,
-0x5543,0x57a6,0x6073,0x5751,0x542d,0x7a7a,0x6050,0x5b54,
-0x63a7,0x62a0,0x53e3,0x6263,0x5bc7,0x67af,0x54ed,0x7a9f,
-0x82e6,0x9177,0x5e93,0x88e4,0x5938,0x57ae,0x630e,0x8de8,
-0x80ef,0x5757,0x7b77,0x4fa9,0x5feb,0x5bbd,0x6b3e,0x5321,
-0x7b50,0x72c2,0x6846,0x77ff,0x7736,0x65f7,0x51b5,0x4e8f,
-0x76d4,0x5cbf,0x7aa5,0x8475,0x594e,0x9b41,0x5080,0x0000,
-/* 0xc000 */
-0x7e5e,0x7e5f,0x7e60,0x7e61,0x7e62,0x7e63,0x7e64,0x7e65,
-0x7e66,0x7e67,0x7e68,0x7e69,0x7e6a,0x7e6b,0x7e6c,0x7e6d,
-0x7e6e,0x7e6f,0x7e70,0x7e71,0x7e72,0x7e73,0x7e74,0x7e75,
-0x7e76,0x7e77,0x7e78,0x7e79,0x7e7a,0x7e7b,0x7e7c,0x7e7d,
-0x7e7e,0x7e7f,0x7e80,0x7e81,0x7e83,0x7e84,0x7e85,0x7e86,
-0x7e87,0x7e88,0x7e89,0x7e8a,0x7e8b,0x7e8c,0x7e8d,0x7e8e,
-0x7e8f,0x7e90,0x7e91,0x7e92,0x7e93,0x7e94,0x7e95,0x7e96,
-0x7e97,0x7e98,0x7e99,0x7e9a,0x7e9c,0x7e9d,0x7e9e,0x0000,
-0x7eae,0x7eb4,0x7ebb,0x7ebc,0x7ed6,0x7ee4,0x7eec,0x7ef9,
-0x7f0a,0x7f10,0x7f1e,0x7f37,0x7f39,0x7f3b,0x7f3c,0x7f3d,
-0x7f3e,0x7f3f,0x7f40,0x7f41,0x7f43,0x7f46,0x7f47,0x7f48,
-0x7f49,0x7f4a,0x7f4b,0x7f4c,0x7f4d,0x7f4e,0x7f4f,0x7f52,
-0x7f53,0x9988,0x6127,0x6e83,0x5764,0x6606,0x6346,0x56f0,
-0x62ec,0x6269,0x5ed3,0x9614,0x5783,0x62c9,0x5587,0x8721,
-0x814a,0x8fa3,0x5566,0x83b1,0x6765,0x8d56,0x84dd,0x5a6a,
-0x680f,0x62e6,0x7bee,0x9611,0x5170,0x6f9c,0x8c30,0x63fd,
-0x89c8,0x61d2,0x7f06,0x70c2,0x6ee5,0x7405,0x6994,0x72fc,
-0x5eca,0x90ce,0x6717,0x6d6a,0x635e,0x52b3,0x7262,0x8001,
-0x4f6c,0x59e5,0x916a,0x70d9,0x6d9d,0x52d2,0x4e50,0x96f7,
-0x956d,0x857e,0x78ca,0x7d2f,0x5121,0x5792,0x64c2,0x808b,
-0x7c7b,0x6cea,0x68f1,0x695e,0x51b7,0x5398,0x68a8,0x7281,
-0x9ece,0x7bf1,0x72f8,0x79bb,0x6f13,0x7406,0x674e,0x91cc,
-0x9ca4,0x793c,0x8389,0x8354,0x540f,0x6817,0x4e3d,0x5389,
-0x52b1,0x783e,0x5386,0x5229,0x5088,0x4f8b,0x4fd0,0x0000,
-/* 0xc100 */
-0x7f56,0x7f59,0x7f5b,0x7f5c,0x7f5d,0x7f5e,0x7f60,0x7f63,
-0x7f64,0x7f65,0x7f66,0x7f67,0x7f6b,0x7f6c,0x7f6d,0x7f6f,
-0x7f70,0x7f73,0x7f75,0x7f76,0x7f77,0x7f78,0x7f7a,0x7f7b,
-0x7f7c,0x7f7d,0x7f7f,0x7f80,0x7f82,0x7f83,0x7f84,0x7f85,
-0x7f86,0x7f87,0x7f88,0x7f89,0x7f8b,0x7f8d,0x7f8f,0x7f90,
-0x7f91,0x7f92,0x7f93,0x7f95,0x7f96,0x7f97,0x7f98,0x7f99,
-0x7f9b,0x7f9c,0x7fa0,0x7fa2,0x7fa3,0x7fa5,0x7fa6,0x7fa8,
-0x7fa9,0x7faa,0x7fab,0x7fac,0x7fad,0x7fae,0x7fb1,0x0000,
-0x7fb3,0x7fb4,0x7fb5,0x7fb6,0x7fb7,0x7fba,0x7fbb,0x7fbe,
-0x7fc0,0x7fc2,0x7fc3,0x7fc4,0x7fc6,0x7fc7,0x7fc8,0x7fc9,
-0x7fcb,0x7fcd,0x7fcf,0x7fd0,0x7fd1,0x7fd2,0x7fd3,0x7fd6,
-0x7fd7,0x7fd9,0x7fda,0x7fdb,0x7fdc,0x7fdd,0x7fde,0x7fe2,
-0x7fe3,0x75e2,0x7acb,0x7c92,0x6ca5,0x96b6,0x529b,0x7483,
-0x54e9,0x4fe9,0x8054,0x83b2,0x8fde,0x9570,0x5ec9,0x601c,
-0x6d9f,0x5e18,0x655b,0x8138,0x94fe,0x604b,0x70bc,0x7ec3,
-0x7cae,0x51c9,0x6881,0x7cb1,0x826f,0x4e24,0x8f86,0x91cf,
-0x667e,0x4eae,0x8c05,0x64a9,0x804a,0x50da,0x7597,0x71ce,
-0x5be5,0x8fbd,0x6f66,0x4e86,0x6482,0x9563,0x5ed6,0x6599,
-0x5217,0x88c2,0x70c8,0x52a3,0x730e,0x7433,0x6797,0x78f7,
-0x9716,0x4e34,0x90bb,0x9cde,0x6dcb,0x51db,0x8d41,0x541d,
-0x62ce,0x73b2,0x83f1,0x96f6,0x9f84,0x94c3,0x4f36,0x7f9a,
-0x51cc,0x7075,0x9675,0x5cad,0x9886,0x53e6,0x4ee4,0x6e9c,
-0x7409,0x69b4,0x786b,0x998f,0x7559,0x5218,0x7624,0x6d41,
-0x67f3,0x516d,0x9f99,0x804b,0x5499,0x7b3c,0x7abf,0x0000,
-/* 0xc200 */
-0x7fe4,0x7fe7,0x7fe8,0x7fea,0x7feb,0x7fec,0x7fed,0x7fef,
-0x7ff2,0x7ff4,0x7ff5,0x7ff6,0x7ff7,0x7ff8,0x7ff9,0x7ffa,
-0x7ffd,0x7ffe,0x7fff,0x8002,0x8007,0x8008,0x8009,0x800a,
-0x800e,0x800f,0x8011,0x8013,0x801a,0x801b,0x801d,0x801e,
-0x801f,0x8021,0x8023,0x8024,0x802b,0x802c,0x802d,0x802e,
-0x802f,0x8030,0x8032,0x8034,0x8039,0x803a,0x803c,0x803e,
-0x8040,0x8041,0x8044,0x8045,0x8047,0x8048,0x8049,0x804e,
-0x804f,0x8050,0x8051,0x8053,0x8055,0x8056,0x8057,0x0000,
-0x8059,0x805b,0x805c,0x805d,0x805e,0x805f,0x8060,0x8061,
-0x8062,0x8063,0x8064,0x8065,0x8066,0x8067,0x8068,0x806b,
-0x806c,0x806d,0x806e,0x806f,0x8070,0x8072,0x8073,0x8074,
-0x8075,0x8076,0x8077,0x8078,0x8079,0x807a,0x807b,0x807c,
-0x807d,0x9686,0x5784,0x62e2,0x9647,0x697c,0x5a04,0x6402,
-0x7bd3,0x6f0f,0x964b,0x82a6,0x5362,0x9885,0x5e90,0x7089,
-0x63b3,0x5364,0x864f,0x9c81,0x9e93,0x788c,0x9732,0x8def,
-0x8d42,0x9e7f,0x6f5e,0x7984,0x5f55,0x9646,0x622e,0x9a74,
-0x5415,0x94dd,0x4fa3,0x65c5,0x5c65,0x5c61,0x7f15,0x8651,
-0x6c2f,0x5f8b,0x7387,0x6ee4,0x7eff,0x5ce6,0x631b,0x5b6a,
-0x6ee6,0x5375,0x4e71,0x63a0,0x7565,0x62a1,0x8f6e,0x4f26,
-0x4ed1,0x6ca6,0x7eb6,0x8bba,0x841d,0x87ba,0x7f57,0x903b,
-0x9523,0x7ba9,0x9aa1,0x88f8,0x843d,0x6d1b,0x9a86,0x7edc,
-0x5988,0x9ebb,0x739b,0x7801,0x8682,0x9a6c,0x9a82,0x561b,
-0x5417,0x57cb,0x4e70,0x9ea6,0x5356,0x8fc8,0x8109,0x7792,
-0x9992,0x86ee,0x6ee1,0x8513,0x66fc,0x6162,0x6f2b,0x0000,
-/* 0xc300 */
-0x807e,0x8081,0x8082,0x8085,0x8088,0x808a,0x808d,0x808e,
-0x808f,0x8090,0x8091,0x8092,0x8094,0x8095,0x8097,0x8099,
-0x809e,0x80a3,0x80a6,0x80a7,0x80a8,0x80ac,0x80b0,0x80b3,
-0x80b5,0x80b6,0x80b8,0x80b9,0x80bb,0x80c5,0x80c7,0x80c8,
-0x80c9,0x80ca,0x80cb,0x80cf,0x80d0,0x80d1,0x80d2,0x80d3,
-0x80d4,0x80d5,0x80d8,0x80df,0x80e0,0x80e2,0x80e3,0x80e6,
-0x80ee,0x80f5,0x80f7,0x80f9,0x80fb,0x80fe,0x80ff,0x8100,
-0x8101,0x8103,0x8104,0x8105,0x8107,0x8108,0x810b,0x0000,
-0x810c,0x8115,0x8117,0x8119,0x811b,0x811c,0x811d,0x811f,
-0x8120,0x8121,0x8122,0x8123,0x8124,0x8125,0x8126,0x8127,
-0x8128,0x8129,0x812a,0x812b,0x812d,0x812e,0x8130,0x8133,
-0x8134,0x8135,0x8137,0x8139,0x813a,0x813b,0x813c,0x813d,
-0x813f,0x8c29,0x8292,0x832b,0x76f2,0x6c13,0x5fd9,0x83bd,
-0x732b,0x8305,0x951a,0x6bdb,0x77db,0x94c6,0x536f,0x8302,
-0x5192,0x5e3d,0x8c8c,0x8d38,0x4e48,0x73ab,0x679a,0x6885,
-0x9176,0x9709,0x7164,0x6ca1,0x7709,0x5a92,0x9541,0x6bcf,
-0x7f8e,0x6627,0x5bd0,0x59b9,0x5a9a,0x95e8,0x95f7,0x4eec,
-0x840c,0x8499,0x6aac,0x76df,0x9530,0x731b,0x68a6,0x5b5f,
-0x772f,0x919a,0x9761,0x7cdc,0x8ff7,0x8c1c,0x5f25,0x7c73,
-0x79d8,0x89c5,0x6ccc,0x871c,0x5bc6,0x5e42,0x68c9,0x7720,
-0x7ef5,0x5195,0x514d,0x52c9,0x5a29,0x7f05,0x9762,0x82d7,
-0x63cf,0x7784,0x85d0,0x79d2,0x6e3a,0x5e99,0x5999,0x8511,
-0x706d,0x6c11,0x62bf,0x76bf,0x654f,0x60af,0x95fd,0x660e,
-0x879f,0x9e23,0x94ed,0x540d,0x547d,0x8c2c,0x6478,0x0000,
-/* 0xc400 */
-0x8140,0x8141,0x8142,0x8143,0x8144,0x8145,0x8147,0x8149,
-0x814d,0x814e,0x814f,0x8152,0x8156,0x8157,0x8158,0x815b,
-0x815c,0x815d,0x815e,0x815f,0x8161,0x8162,0x8163,0x8164,
-0x8166,0x8168,0x816a,0x816b,0x816c,0x816f,0x8172,0x8173,
-0x8175,0x8176,0x8177,0x8178,0x8181,0x8183,0x8184,0x8185,
-0x8186,0x8187,0x8189,0x818b,0x818c,0x818d,0x818e,0x8190,
-0x8192,0x8193,0x8194,0x8195,0x8196,0x8197,0x8199,0x819a,
-0x819e,0x819f,0x81a0,0x81a1,0x81a2,0x81a4,0x81a5,0x0000,
-0x81a7,0x81a9,0x81ab,0x81ac,0x81ad,0x81ae,0x81af,0x81b0,
-0x81b1,0x81b2,0x81b4,0x81b5,0x81b6,0x81b7,0x81b8,0x81b9,
-0x81bc,0x81bd,0x81be,0x81bf,0x81c4,0x81c5,0x81c7,0x81c8,
-0x81c9,0x81cb,0x81cd,0x81ce,0x81cf,0x81d0,0x81d1,0x81d2,
-0x81d3,0x6479,0x8611,0x6a21,0x819c,0x78e8,0x6469,0x9b54,
-0x62b9,0x672b,0x83ab,0x58a8,0x9ed8,0x6cab,0x6f20,0x5bde,
-0x964c,0x8c0b,0x725f,0x67d0,0x62c7,0x7261,0x4ea9,0x59c6,
-0x6bcd,0x5893,0x66ae,0x5e55,0x52df,0x6155,0x6728,0x76ee,
-0x7766,0x7267,0x7a46,0x62ff,0x54ea,0x5450,0x94a0,0x90a3,
-0x5a1c,0x7eb3,0x6c16,0x4e43,0x5976,0x8010,0x5948,0x5357,
-0x7537,0x96be,0x56ca,0x6320,0x8111,0x607c,0x95f9,0x6dd6,
-0x5462,0x9981,0x5185,0x5ae9,0x80fd,0x59ae,0x9713,0x502a,
-0x6ce5,0x5c3c,0x62df,0x4f60,0x533f,0x817b,0x9006,0x6eba,
-0x852b,0x62c8,0x5e74,0x78be,0x64b5,0x637b,0x5ff5,0x5a18,
-0x917f,0x9e1f,0x5c3f,0x634f,0x8042,0x5b7d,0x556e,0x954a,
-0x954d,0x6d85,0x60a8,0x67e0,0x72de,0x51dd,0x5b81,0x0000,
-/* 0xc500 */
-0x81d4,0x81d5,0x81d6,0x81d7,0x81d8,0x81d9,0x81da,0x81db,
-0x81dc,0x81dd,0x81de,0x81df,0x81e0,0x81e1,0x81e2,0x81e4,
-0x81e5,0x81e6,0x81e8,0x81e9,0x81eb,0x81ee,0x81ef,0x81f0,
-0x81f1,0x81f2,0x81f5,0x81f6,0x81f7,0x81f8,0x81f9,0x81fa,
-0x81fd,0x81ff,0x8203,0x8207,0x8208,0x8209,0x820a,0x820b,
-0x820e,0x820f,0x8211,0x8213,0x8215,0x8216,0x8217,0x8218,
-0x8219,0x821a,0x821d,0x8220,0x8224,0x8225,0x8226,0x8227,
-0x8229,0x822e,0x8232,0x823a,0x823c,0x823d,0x823f,0x0000,
-0x8240,0x8241,0x8242,0x8243,0x8245,0x8246,0x8248,0x824a,
-0x824c,0x824d,0x824e,0x8250,0x8251,0x8252,0x8253,0x8254,
-0x8255,0x8256,0x8257,0x8259,0x825b,0x825c,0x825d,0x825e,
-0x8260,0x8261,0x8262,0x8263,0x8264,0x8265,0x8266,0x8267,
-0x8269,0x62e7,0x6cde,0x725b,0x626d,0x94ae,0x7ebd,0x8113,
-0x6d53,0x519c,0x5f04,0x5974,0x52aa,0x6012,0x5973,0x6696,
-0x8650,0x759f,0x632a,0x61e6,0x7cef,0x8bfa,0x54e6,0x6b27,
-0x9e25,0x6bb4,0x85d5,0x5455,0x5076,0x6ca4,0x556a,0x8db4,
-0x722c,0x5e15,0x6015,0x7436,0x62cd,0x6392,0x724c,0x5f98,
-0x6e43,0x6d3e,0x6500,0x6f58,0x76d8,0x78d0,0x76fc,0x7554,
-0x5224,0x53db,0x4e53,0x5e9e,0x65c1,0x802a,0x80d6,0x629b,
-0x5486,0x5228,0x70ae,0x888d,0x8dd1,0x6ce1,0x5478,0x80da,
-0x57f9,0x88f4,0x8d54,0x966a,0x914d,0x4f69,0x6c9b,0x55b7,
-0x76c6,0x7830,0x62a8,0x70f9,0x6f8e,0x5f6d,0x84ec,0x68da,
-0x787c,0x7bf7,0x81a8,0x670b,0x9e4f,0x6367,0x78b0,0x576f,
-0x7812,0x9739,0x6279,0x62ab,0x5288,0x7435,0x6bd7,0x0000,
-/* 0xc600 */
-0x826a,0x826b,0x826c,0x826d,0x8271,0x8275,0x8276,0x8277,
-0x8278,0x827b,0x827c,0x8280,0x8281,0x8283,0x8285,0x8286,
-0x8287,0x8289,0x828c,0x8290,0x8293,0x8294,0x8295,0x8296,
-0x829a,0x829b,0x829e,0x82a0,0x82a2,0x82a3,0x82a7,0x82b2,
-0x82b5,0x82b6,0x82ba,0x82bb,0x82bc,0x82bf,0x82c0,0x82c2,
-0x82c3,0x82c5,0x82c6,0x82c9,0x82d0,0x82d6,0x82d9,0x82da,
-0x82dd,0x82e2,0x82e7,0x82e8,0x82e9,0x82ea,0x82ec,0x82ed,
-0x82ee,0x82f0,0x82f2,0x82f3,0x82f5,0x82f6,0x82f8,0x0000,
-0x82fa,0x82fc,0x82fd,0x82fe,0x82ff,0x8300,0x830a,0x830b,
-0x830d,0x8310,0x8312,0x8313,0x8316,0x8318,0x8319,0x831d,
-0x831e,0x831f,0x8320,0x8321,0x8322,0x8323,0x8324,0x8325,
-0x8326,0x8329,0x832a,0x832e,0x8330,0x8332,0x8337,0x833b,
-0x833d,0x5564,0x813e,0x75b2,0x76ae,0x5339,0x75de,0x50fb,
-0x5c41,0x8b6c,0x7bc7,0x504f,0x7247,0x9a97,0x98d8,0x6f02,
-0x74e2,0x7968,0x6487,0x77a5,0x62fc,0x9891,0x8d2b,0x54c1,
-0x8058,0x4e52,0x576a,0x82f9,0x840d,0x5e73,0x51ed,0x74f6,
-0x8bc4,0x5c4f,0x5761,0x6cfc,0x9887,0x5a46,0x7834,0x9b44,
-0x8feb,0x7c95,0x5256,0x6251,0x94fa,0x4ec6,0x8386,0x8461,
-0x83e9,0x84b2,0x57d4,0x6734,0x5703,0x666e,0x6d66,0x8c31,
-0x66dd,0x7011,0x671f,0x6b3a,0x6816,0x621a,0x59bb,0x4e03,
-0x51c4,0x6f06,0x67d2,0x6c8f,0x5176,0x68cb,0x5947,0x6b67,
-0x7566,0x5d0e,0x8110,0x9f50,0x65d7,0x7948,0x7941,0x9a91,
-0x8d77,0x5c82,0x4e5e,0x4f01,0x542f,0x5951,0x780c,0x5668,
-0x6c14,0x8fc4,0x5f03,0x6c7d,0x6ce3,0x8bab,0x6390,0x0000,
-/* 0xc700 */
-0x833e,0x833f,0x8341,0x8342,0x8344,0x8345,0x8348,0x834a,
-0x834b,0x834c,0x834d,0x834e,0x8353,0x8355,0x8356,0x8357,
-0x8358,0x8359,0x835d,0x8362,0x8370,0x8371,0x8372,0x8373,
-0x8374,0x8375,0x8376,0x8379,0x837a,0x837e,0x837f,0x8380,
-0x8381,0x8382,0x8383,0x8384,0x8387,0x8388,0x838a,0x838b,
-0x838c,0x838d,0x838f,0x8390,0x8391,0x8394,0x8395,0x8396,
-0x8397,0x8399,0x839a,0x839d,0x839f,0x83a1,0x83a2,0x83a3,
-0x83a4,0x83a5,0x83a6,0x83a7,0x83ac,0x83ad,0x83ae,0x0000,
-0x83af,0x83b5,0x83bb,0x83be,0x83bf,0x83c2,0x83c3,0x83c4,
-0x83c6,0x83c8,0x83c9,0x83cb,0x83cd,0x83ce,0x83d0,0x83d1,
-0x83d2,0x83d3,0x83d5,0x83d7,0x83d9,0x83da,0x83db,0x83de,
-0x83e2,0x83e3,0x83e4,0x83e6,0x83e7,0x83e8,0x83eb,0x83ec,
-0x83ed,0x6070,0x6d3d,0x7275,0x6266,0x948e,0x94c5,0x5343,
-0x8fc1,0x7b7e,0x4edf,0x8c26,0x4e7e,0x9ed4,0x94b1,0x94b3,
-0x524d,0x6f5c,0x9063,0x6d45,0x8c34,0x5811,0x5d4c,0x6b20,
-0x6b49,0x67aa,0x545b,0x8154,0x7f8c,0x5899,0x8537,0x5f3a,
-0x62a2,0x6a47,0x9539,0x6572,0x6084,0x6865,0x77a7,0x4e54,
-0x4fa8,0x5de7,0x9798,0x64ac,0x7fd8,0x5ced,0x4fcf,0x7a8d,
-0x5207,0x8304,0x4e14,0x602f,0x7a83,0x94a6,0x4fb5,0x4eb2,
-0x79e6,0x7434,0x52e4,0x82b9,0x64d2,0x79bd,0x5bdd,0x6c81,
-0x9752,0x8f7b,0x6c22,0x503e,0x537f,0x6e05,0x64ce,0x6674,
-0x6c30,0x60c5,0x9877,0x8bf7,0x5e86,0x743c,0x7a77,0x79cb,
-0x4e18,0x90b1,0x7403,0x6c42,0x56da,0x914b,0x6cc5,0x8d8b,
-0x533a,0x86c6,0x66f2,0x8eaf,0x5c48,0x9a71,0x6e20,0x0000,
-/* 0xc800 */
-0x83ee,0x83ef,0x83f3,0x83f4,0x83f5,0x83f6,0x83f7,0x83fa,
-0x83fb,0x83fc,0x83fe,0x83ff,0x8400,0x8402,0x8405,0x8407,
-0x8408,0x8409,0x840a,0x8410,0x8412,0x8413,0x8414,0x8415,
-0x8416,0x8417,0x8419,0x841a,0x841b,0x841e,0x841f,0x8420,
-0x8421,0x8422,0x8423,0x8429,0x842a,0x842b,0x842c,0x842d,
-0x842e,0x842f,0x8430,0x8432,0x8433,0x8434,0x8435,0x8436,
-0x8437,0x8439,0x843a,0x843b,0x843e,0x843f,0x8440,0x8441,
-0x8442,0x8443,0x8444,0x8445,0x8447,0x8448,0x8449,0x0000,
-0x844a,0x844b,0x844c,0x844d,0x844e,0x844f,0x8450,0x8452,
-0x8453,0x8454,0x8455,0x8456,0x8458,0x845d,0x845e,0x845f,
-0x8460,0x8462,0x8464,0x8465,0x8466,0x8467,0x8468,0x846a,
-0x846e,0x846f,0x8470,0x8472,0x8474,0x8477,0x8479,0x847b,
-0x847c,0x53d6,0x5a36,0x9f8b,0x8da3,0x53bb,0x5708,0x98a7,
-0x6743,0x919b,0x6cc9,0x5168,0x75ca,0x62f3,0x72ac,0x5238,
-0x529d,0x7f3a,0x7094,0x7638,0x5374,0x9e4a,0x69b7,0x786e,
-0x96c0,0x88d9,0x7fa4,0x7136,0x71c3,0x5189,0x67d3,0x74e4,
-0x58e4,0x6518,0x56b7,0x8ba9,0x9976,0x6270,0x7ed5,0x60f9,
-0x70ed,0x58ec,0x4ec1,0x4eba,0x5fcd,0x97e7,0x4efb,0x8ba4,
-0x5203,0x598a,0x7eab,0x6254,0x4ecd,0x65e5,0x620e,0x8338,
-0x84c9,0x8363,0x878d,0x7194,0x6eb6,0x5bb9,0x7ed2,0x5197,
-0x63c9,0x67d4,0x8089,0x8339,0x8815,0x5112,0x5b7a,0x5982,
-0x8fb1,0x4e73,0x6c5d,0x5165,0x8925,0x8f6f,0x962e,0x854a,
-0x745e,0x9510,0x95f0,0x6da6,0x82e5,0x5f31,0x6492,0x6d12,
-0x8428,0x816e,0x9cc3,0x585e,0x8d5b,0x4e09,0x53c1,0x0000,
-/* 0xc900 */
-0x847d,0x847e,0x847f,0x8480,0x8481,0x8483,0x8484,0x8485,
-0x8486,0x848a,0x848d,0x848f,0x8490,0x8491,0x8492,0x8493,
-0x8494,0x8495,0x8496,0x8498,0x849a,0x849b,0x849d,0x849e,
-0x849f,0x84a0,0x84a2,0x84a3,0x84a4,0x84a5,0x84a6,0x84a7,
-0x84a8,0x84a9,0x84aa,0x84ab,0x84ac,0x84ad,0x84ae,0x84b0,
-0x84b1,0x84b3,0x84b5,0x84b6,0x84b7,0x84bb,0x84bc,0x84be,
-0x84c0,0x84c2,0x84c3,0x84c5,0x84c6,0x84c7,0x84c8,0x84cb,
-0x84cc,0x84ce,0x84cf,0x84d2,0x84d4,0x84d5,0x84d7,0x0000,
-0x84d8,0x84d9,0x84da,0x84db,0x84dc,0x84de,0x84e1,0x84e2,
-0x84e4,0x84e7,0x84e8,0x84e9,0x84ea,0x84eb,0x84ed,0x84ee,
-0x84ef,0x84f1,0x84f2,0x84f3,0x84f4,0x84f5,0x84f6,0x84f7,
-0x84f8,0x84f9,0x84fa,0x84fb,0x84fd,0x84fe,0x8500,0x8501,
-0x8502,0x4f1e,0x6563,0x6851,0x55d3,0x4e27,0x6414,0x9a9a,
-0x626b,0x5ac2,0x745f,0x8272,0x6da9,0x68ee,0x50e7,0x838e,
-0x7802,0x6740,0x5239,0x6c99,0x7eb1,0x50bb,0x5565,0x715e,
-0x7b5b,0x6652,0x73ca,0x82eb,0x6749,0x5c71,0x5220,0x717d,
-0x886b,0x95ea,0x9655,0x64c5,0x8d61,0x81b3,0x5584,0x6c55,
-0x6247,0x7f2e,0x5892,0x4f24,0x5546,0x8d4f,0x664c,0x4e0a,
-0x5c1a,0x88f3,0x68a2,0x634e,0x7a0d,0x70e7,0x828d,0x52fa,
-0x97f6,0x5c11,0x54e8,0x90b5,0x7ecd,0x5962,0x8d4a,0x86c7,
-0x820c,0x820d,0x8d66,0x6444,0x5c04,0x6151,0x6d89,0x793e,
-0x8bbe,0x7837,0x7533,0x547b,0x4f38,0x8eab,0x6df1,0x5a20,
-0x7ec5,0x795e,0x6c88,0x5ba1,0x5a76,0x751a,0x80be,0x614e,
-0x6e17,0x58f0,0x751f,0x7525,0x7272,0x5347,0x7ef3,0x0000,
-/* 0xca00 */
-0x8503,0x8504,0x8505,0x8506,0x8507,0x8508,0x8509,0x850a,
-0x850b,0x850d,0x850e,0x850f,0x8510,0x8512,0x8514,0x8515,
-0x8516,0x8518,0x8519,0x851b,0x851c,0x851d,0x851e,0x8520,
-0x8522,0x8523,0x8524,0x8525,0x8526,0x8527,0x8528,0x8529,
-0x852a,0x852d,0x852e,0x852f,0x8530,0x8531,0x8532,0x8533,
-0x8534,0x8535,0x8536,0x853e,0x853f,0x8540,0x8541,0x8542,
-0x8544,0x8545,0x8546,0x8547,0x854b,0x854c,0x854d,0x854e,
-0x854f,0x8550,0x8551,0x8552,0x8553,0x8554,0x8555,0x0000,
-0x8557,0x8558,0x855a,0x855b,0x855c,0x855d,0x855f,0x8560,
-0x8561,0x8562,0x8563,0x8565,0x8566,0x8567,0x8569,0x856a,
-0x856b,0x856c,0x856d,0x856e,0x856f,0x8570,0x8571,0x8573,
-0x8575,0x8576,0x8577,0x8578,0x857c,0x857d,0x857f,0x8580,
-0x8581,0x7701,0x76db,0x5269,0x80dc,0x5723,0x5e08,0x5931,
-0x72ee,0x65bd,0x6e7f,0x8bd7,0x5c38,0x8671,0x5341,0x77f3,
-0x62fe,0x65f6,0x4ec0,0x98df,0x8680,0x5b9e,0x8bc6,0x53f2,
-0x77e2,0x4f7f,0x5c4e,0x9a76,0x59cb,0x5f0f,0x793a,0x58eb,
-0x4e16,0x67ff,0x4e8b,0x62ed,0x8a93,0x901d,0x52bf,0x662f,
-0x55dc,0x566c,0x9002,0x4ed5,0x4f8d,0x91ca,0x9970,0x6c0f,
-0x5e02,0x6043,0x5ba4,0x89c6,0x8bd5,0x6536,0x624b,0x9996,
-0x5b88,0x5bff,0x6388,0x552e,0x53d7,0x7626,0x517d,0x852c,
-0x67a2,0x68b3,0x6b8a,0x6292,0x8f93,0x53d4,0x8212,0x6dd1,
-0x758f,0x4e66,0x8d4e,0x5b70,0x719f,0x85af,0x6691,0x66d9,
-0x7f72,0x8700,0x9ecd,0x9f20,0x5c5e,0x672f,0x8ff0,0x6811,
-0x675f,0x620d,0x7ad6,0x5885,0x5eb6,0x6570,0x6f31,0x0000,
-/* 0xcb00 */
-0x8582,0x8583,0x8586,0x8588,0x8589,0x858a,0x858b,0x858c,
-0x858d,0x858e,0x8590,0x8591,0x8592,0x8593,0x8594,0x8595,
-0x8596,0x8597,0x8598,0x8599,0x859a,0x859d,0x859e,0x859f,
-0x85a0,0x85a1,0x85a2,0x85a3,0x85a5,0x85a6,0x85a7,0x85a9,
-0x85ab,0x85ac,0x85ad,0x85b1,0x85b2,0x85b3,0x85b4,0x85b5,
-0x85b6,0x85b8,0x85ba,0x85bb,0x85bc,0x85bd,0x85be,0x85bf,
-0x85c0,0x85c2,0x85c3,0x85c4,0x85c5,0x85c6,0x85c7,0x85c8,
-0x85ca,0x85cb,0x85cc,0x85cd,0x85ce,0x85d1,0x85d2,0x0000,
-0x85d4,0x85d6,0x85d7,0x85d8,0x85d9,0x85da,0x85db,0x85dd,
-0x85de,0x85df,0x85e0,0x85e1,0x85e2,0x85e3,0x85e5,0x85e6,
-0x85e7,0x85e8,0x85ea,0x85eb,0x85ec,0x85ed,0x85ee,0x85ef,
-0x85f0,0x85f1,0x85f2,0x85f3,0x85f4,0x85f5,0x85f6,0x85f7,
-0x85f8,0x6055,0x5237,0x800d,0x6454,0x8870,0x7529,0x5e05,
-0x6813,0x62f4,0x971c,0x53cc,0x723d,0x8c01,0x6c34,0x7761,
-0x7a0e,0x542e,0x77ac,0x987a,0x821c,0x8bf4,0x7855,0x6714,
-0x70c1,0x65af,0x6495,0x5636,0x601d,0x79c1,0x53f8,0x4e1d,
-0x6b7b,0x8086,0x5bfa,0x55e3,0x56db,0x4f3a,0x4f3c,0x9972,
-0x5df3,0x677e,0x8038,0x6002,0x9882,0x9001,0x5b8b,0x8bbc,
-0x8bf5,0x641c,0x8258,0x64de,0x55fd,0x82cf,0x9165,0x4fd7,
-0x7d20,0x901f,0x7c9f,0x50f3,0x5851,0x6eaf,0x5bbf,0x8bc9,
-0x8083,0x9178,0x849c,0x7b97,0x867d,0x968b,0x968f,0x7ee5,
-0x9ad3,0x788e,0x5c81,0x7a57,0x9042,0x96a7,0x795f,0x5b59,
-0x635f,0x7b0b,0x84d1,0x68ad,0x5506,0x7f29,0x7410,0x7d22,
-0x9501,0x6240,0x584c,0x4ed6,0x5b83,0x5979,0x5854,0x0000,
-/* 0xcc00 */
-0x85f9,0x85fa,0x85fc,0x85fd,0x85fe,0x8600,0x8601,0x8602,
-0x8603,0x8604,0x8606,0x8607,0x8608,0x8609,0x860a,0x860b,
-0x860c,0x860d,0x860e,0x860f,0x8610,0x8612,0x8613,0x8614,
-0x8615,0x8617,0x8618,0x8619,0x861a,0x861b,0x861c,0x861d,
-0x861e,0x861f,0x8620,0x8621,0x8622,0x8623,0x8624,0x8625,
-0x8626,0x8628,0x862a,0x862b,0x862c,0x862d,0x862e,0x862f,
-0x8630,0x8631,0x8632,0x8633,0x8634,0x8635,0x8636,0x8637,
-0x8639,0x863a,0x863b,0x863d,0x863e,0x863f,0x8640,0x0000,
-0x8641,0x8642,0x8643,0x8644,0x8645,0x8646,0x8647,0x8648,
-0x8649,0x864a,0x864b,0x864c,0x8652,0x8653,0x8655,0x8656,
-0x8657,0x8658,0x8659,0x865b,0x865c,0x865d,0x865f,0x8660,
-0x8661,0x8663,0x8664,0x8665,0x8666,0x8667,0x8668,0x8669,
-0x866a,0x736d,0x631e,0x8e4b,0x8e0f,0x80ce,0x82d4,0x62ac,
-0x53f0,0x6cf0,0x915e,0x592a,0x6001,0x6c70,0x574d,0x644a,
-0x8d2a,0x762b,0x6ee9,0x575b,0x6a80,0x75f0,0x6f6d,0x8c2d,
-0x8c08,0x5766,0x6bef,0x8892,0x78b3,0x63a2,0x53f9,0x70ad,
-0x6c64,0x5858,0x642a,0x5802,0x68e0,0x819b,0x5510,0x7cd6,
-0x5018,0x8eba,0x6dcc,0x8d9f,0x70eb,0x638f,0x6d9b,0x6ed4,
-0x7ee6,0x8404,0x6843,0x9003,0x6dd8,0x9676,0x8ba8,0x5957,
-0x7279,0x85e4,0x817e,0x75bc,0x8a8a,0x68af,0x5254,0x8e22,
-0x9511,0x63d0,0x9898,0x8e44,0x557c,0x4f53,0x66ff,0x568f,
-0x60d5,0x6d95,0x5243,0x5c49,0x5929,0x6dfb,0x586b,0x7530,
-0x751c,0x606c,0x8214,0x8146,0x6311,0x6761,0x8fe2,0x773a,
-0x8df3,0x8d34,0x94c1,0x5e16,0x5385,0x542c,0x70c3,0x0000,
-/* 0xcd00 */
-0x866d,0x866f,0x8670,0x8672,0x8673,0x8674,0x8675,0x8676,
-0x8677,0x8678,0x8683,0x8684,0x8685,0x8686,0x8687,0x8688,
-0x8689,0x868e,0x868f,0x8690,0x8691,0x8692,0x8694,0x8696,
-0x8697,0x8698,0x8699,0x869a,0x869b,0x869e,0x869f,0x86a0,
-0x86a1,0x86a2,0x86a5,0x86a6,0x86ab,0x86ad,0x86ae,0x86b2,
-0x86b3,0x86b7,0x86b8,0x86b9,0x86bb,0x86bc,0x86bd,0x86be,
-0x86bf,0x86c1,0x86c2,0x86c3,0x86c5,0x86c8,0x86cc,0x86cd,
-0x86d2,0x86d3,0x86d5,0x86d6,0x86d7,0x86da,0x86dc,0x0000,
-0x86dd,0x86e0,0x86e1,0x86e2,0x86e3,0x86e5,0x86e6,0x86e7,
-0x86e8,0x86ea,0x86eb,0x86ec,0x86ef,0x86f5,0x86f6,0x86f7,
-0x86fa,0x86fb,0x86fc,0x86fd,0x86ff,0x8701,0x8704,0x8705,
-0x8706,0x870b,0x870c,0x870e,0x870f,0x8710,0x8711,0x8714,
-0x8716,0x6c40,0x5ef7,0x505c,0x4ead,0x5ead,0x633a,0x8247,
-0x901a,0x6850,0x916e,0x77b3,0x540c,0x94dc,0x5f64,0x7ae5,
-0x6876,0x6345,0x7b52,0x7edf,0x75db,0x5077,0x6295,0x5934,
-0x900f,0x51f8,0x79c3,0x7a81,0x56fe,0x5f92,0x9014,0x6d82,
-0x5c60,0x571f,0x5410,0x5154,0x6e4d,0x56e2,0x63a8,0x9893,
-0x817f,0x8715,0x892a,0x9000,0x541e,0x5c6f,0x81c0,0x62d6,
-0x6258,0x8131,0x9e35,0x9640,0x9a6e,0x9a7c,0x692d,0x59a5,
-0x62d3,0x553e,0x6316,0x54c7,0x86d9,0x6d3c,0x5a03,0x74e6,
-0x889c,0x6b6a,0x5916,0x8c4c,0x5f2f,0x6e7e,0x73a9,0x987d,
-0x4e38,0x70f7,0x5b8c,0x7897,0x633d,0x665a,0x7696,0x60cb,
-0x5b9b,0x5a49,0x4e07,0x8155,0x6c6a,0x738b,0x4ea1,0x6789,
-0x7f51,0x5f80,0x65fa,0x671b,0x5fd8,0x5984,0x5a01,0x0000,
-/* 0xce00 */
-0x8719,0x871b,0x871d,0x871f,0x8720,0x8724,0x8726,0x8727,
-0x8728,0x872a,0x872b,0x872c,0x872d,0x872f,0x8730,0x8732,
-0x8733,0x8735,0x8736,0x8738,0x8739,0x873a,0x873c,0x873d,
-0x8740,0x8741,0x8742,0x8743,0x8744,0x8745,0x8746,0x874a,
-0x874b,0x874d,0x874f,0x8750,0x8751,0x8752,0x8754,0x8755,
-0x8756,0x8758,0x875a,0x875b,0x875c,0x875d,0x875e,0x875f,
-0x8761,0x8762,0x8766,0x8767,0x8768,0x8769,0x876a,0x876b,
-0x876c,0x876d,0x876f,0x8771,0x8772,0x8773,0x8775,0x0000,
-0x8777,0x8778,0x8779,0x877a,0x877f,0x8780,0x8781,0x8784,
-0x8786,0x8787,0x8789,0x878a,0x878c,0x878e,0x878f,0x8790,
-0x8791,0x8792,0x8794,0x8795,0x8796,0x8798,0x8799,0x879a,
-0x879b,0x879c,0x879d,0x879e,0x87a0,0x87a1,0x87a2,0x87a3,
-0x87a4,0x5dcd,0x5fae,0x5371,0x97e6,0x8fdd,0x6845,0x56f4,
-0x552f,0x60df,0x4e3a,0x6f4d,0x7ef4,0x82c7,0x840e,0x59d4,
-0x4f1f,0x4f2a,0x5c3e,0x7eac,0x672a,0x851a,0x5473,0x754f,
-0x80c3,0x5582,0x9b4f,0x4f4d,0x6e2d,0x8c13,0x5c09,0x6170,
-0x536b,0x761f,0x6e29,0x868a,0x6587,0x95fb,0x7eb9,0x543b,
-0x7a33,0x7d0a,0x95ee,0x55e1,0x7fc1,0x74ee,0x631d,0x8717,
-0x6da1,0x7a9d,0x6211,0x65a1,0x5367,0x63e1,0x6c83,0x5deb,
-0x545c,0x94a8,0x4e4c,0x6c61,0x8bec,0x5c4b,0x65e0,0x829c,
-0x68a7,0x543e,0x5434,0x6bcb,0x6b66,0x4e94,0x6342,0x5348,
-0x821e,0x4f0d,0x4fae,0x575e,0x620a,0x96fe,0x6664,0x7269,
-0x52ff,0x52a1,0x609f,0x8bef,0x6614,0x7199,0x6790,0x897f,
-0x7852,0x77fd,0x6670,0x563b,0x5438,0x9521,0x727a,0x0000,
-/* 0xcf00 */
-0x87a5,0x87a6,0x87a7,0x87a9,0x87aa,0x87ae,0x87b0,0x87b1,
-0x87b2,0x87b4,0x87b6,0x87b7,0x87b8,0x87b9,0x87bb,0x87bc,
-0x87be,0x87bf,0x87c1,0x87c2,0x87c3,0x87c4,0x87c5,0x87c7,
-0x87c8,0x87c9,0x87cc,0x87cd,0x87ce,0x87cf,0x87d0,0x87d4,
-0x87d5,0x87d6,0x87d7,0x87d8,0x87d9,0x87da,0x87dc,0x87dd,
-0x87de,0x87df,0x87e1,0x87e2,0x87e3,0x87e4,0x87e6,0x87e7,
-0x87e8,0x87e9,0x87eb,0x87ec,0x87ed,0x87ef,0x87f0,0x87f1,
-0x87f2,0x87f3,0x87f4,0x87f5,0x87f6,0x87f7,0x87f8,0x0000,
-0x87fa,0x87fb,0x87fc,0x87fd,0x87ff,0x8800,0x8801,0x8802,
-0x8804,0x8805,0x8806,0x8807,0x8808,0x8809,0x880b,0x880c,
-0x880d,0x880e,0x880f,0x8810,0x8811,0x8812,0x8814,0x8817,
-0x8818,0x8819,0x881a,0x881c,0x881d,0x881e,0x881f,0x8820,
-0x8823,0x7a00,0x606f,0x5e0c,0x6089,0x819d,0x5915,0x60dc,
-0x7184,0x70ef,0x6eaa,0x6c50,0x7280,0x6a84,0x88ad,0x5e2d,
-0x4e60,0x5ab3,0x559c,0x94e3,0x6d17,0x7cfb,0x9699,0x620f,
-0x7ec6,0x778e,0x867e,0x5323,0x971e,0x8f96,0x6687,0x5ce1,
-0x4fa0,0x72ed,0x4e0b,0x53a6,0x590f,0x5413,0x6380,0x9528,
-0x5148,0x4ed9,0x9c9c,0x7ea4,0x54b8,0x8d24,0x8854,0x8237,
-0x95f2,0x6d8e,0x5f26,0x5acc,0x663e,0x9669,0x73b0,0x732e,
-0x53bf,0x817a,0x9985,0x7fa1,0x5baa,0x9677,0x9650,0x7ebf,
-0x76f8,0x53a2,0x9576,0x9999,0x7bb1,0x8944,0x6e58,0x4e61,
-0x7fd4,0x7965,0x8be6,0x60f3,0x54cd,0x4eab,0x9879,0x5df7,
-0x6a61,0x50cf,0x5411,0x8c61,0x8427,0x785d,0x9704,0x524a,
-0x54ee,0x56a3,0x9500,0x6d88,0x5bb5,0x6dc6,0x6653,0x0000,
-/* 0xd000 */
-0x8824,0x8825,0x8826,0x8827,0x8828,0x8829,0x882a,0x882b,
-0x882c,0x882d,0x882e,0x882f,0x8830,0x8831,0x8833,0x8834,
-0x8835,0x8836,0x8837,0x8838,0x883a,0x883b,0x883d,0x883e,
-0x883f,0x8841,0x8842,0x8843,0x8846,0x8847,0x8848,0x8849,
-0x884a,0x884b,0x884e,0x884f,0x8850,0x8851,0x8852,0x8853,
-0x8855,0x8856,0x8858,0x885a,0x885b,0x885c,0x885d,0x885e,
-0x885f,0x8860,0x8866,0x8867,0x886a,0x886d,0x886f,0x8871,
-0x8873,0x8874,0x8875,0x8876,0x8878,0x8879,0x887a,0x0000,
-0x887b,0x887c,0x8880,0x8883,0x8886,0x8887,0x8889,0x888a,
-0x888c,0x888e,0x888f,0x8890,0x8891,0x8893,0x8894,0x8895,
-0x8897,0x8898,0x8899,0x889a,0x889b,0x889d,0x889e,0x889f,
-0x88a0,0x88a1,0x88a3,0x88a5,0x88a6,0x88a7,0x88a8,0x88a9,
-0x88aa,0x5c0f,0x5b5d,0x6821,0x8096,0x5578,0x7b11,0x6548,
-0x6954,0x4e9b,0x6b47,0x874e,0x978b,0x534f,0x631f,0x643a,
-0x90aa,0x659c,0x80c1,0x8c10,0x5199,0x68b0,0x5378,0x87f9,
-0x61c8,0x6cc4,0x6cfb,0x8c22,0x5c51,0x85aa,0x82af,0x950c,
-0x6b23,0x8f9b,0x65b0,0x5ffb,0x5fc3,0x4fe1,0x8845,0x661f,
-0x8165,0x7329,0x60fa,0x5174,0x5211,0x578b,0x5f62,0x90a2,
-0x884c,0x9192,0x5e78,0x674f,0x6027,0x59d3,0x5144,0x51f6,
-0x80f8,0x5308,0x6c79,0x96c4,0x718a,0x4f11,0x4fee,0x7f9e,
-0x673d,0x55c5,0x9508,0x79c0,0x8896,0x7ee3,0x589f,0x620c,
-0x9700,0x865a,0x5618,0x987b,0x5f90,0x8bb8,0x84c4,0x9157,
-0x53d9,0x65ed,0x5e8f,0x755c,0x6064,0x7d6e,0x5a7f,0x7eea,
-0x7eed,0x8f69,0x55a7,0x5ba3,0x60ac,0x65cb,0x7384,0x0000,
-/* 0xd100 */
-0x88ac,0x88ae,0x88af,0x88b0,0x88b2,0x88b3,0x88b4,0x88b5,
-0x88b6,0x88b8,0x88b9,0x88ba,0x88bb,0x88bd,0x88be,0x88bf,
-0x88c0,0x88c3,0x88c4,0x88c7,0x88c8,0x88ca,0x88cb,0x88cc,
-0x88cd,0x88cf,0x88d0,0x88d1,0x88d3,0x88d6,0x88d7,0x88da,
-0x88db,0x88dc,0x88dd,0x88de,0x88e0,0x88e1,0x88e6,0x88e7,
-0x88e9,0x88ea,0x88eb,0x88ec,0x88ed,0x88ee,0x88ef,0x88f2,
-0x88f5,0x88f6,0x88f7,0x88fa,0x88fb,0x88fd,0x88ff,0x8900,
-0x8901,0x8903,0x8904,0x8905,0x8906,0x8907,0x8908,0x0000,
-0x8909,0x890b,0x890c,0x890d,0x890e,0x890f,0x8911,0x8914,
-0x8915,0x8916,0x8917,0x8918,0x891c,0x891d,0x891e,0x891f,
-0x8920,0x8922,0x8923,0x8924,0x8926,0x8927,0x8928,0x8929,
-0x892c,0x892d,0x892e,0x892f,0x8931,0x8932,0x8933,0x8935,
-0x8937,0x9009,0x7663,0x7729,0x7eda,0x9774,0x859b,0x5b66,
-0x7a74,0x96ea,0x8840,0x52cb,0x718f,0x5faa,0x65ec,0x8be2,
-0x5bfb,0x9a6f,0x5de1,0x6b89,0x6c5b,0x8bad,0x8baf,0x900a,
-0x8fc5,0x538b,0x62bc,0x9e26,0x9e2d,0x5440,0x4e2b,0x82bd,
-0x7259,0x869c,0x5d16,0x8859,0x6daf,0x96c5,0x54d1,0x4e9a,
-0x8bb6,0x7109,0x54bd,0x9609,0x70df,0x6df9,0x76d0,0x4e25,
-0x7814,0x8712,0x5ca9,0x5ef6,0x8a00,0x989c,0x960e,0x708e,
-0x6cbf,0x5944,0x63a9,0x773c,0x884d,0x6f14,0x8273,0x5830,
-0x71d5,0x538c,0x781a,0x96c1,0x5501,0x5f66,0x7130,0x5bb4,
-0x8c1a,0x9a8c,0x6b83,0x592e,0x9e2f,0x79e7,0x6768,0x626c,
-0x4f6f,0x75a1,0x7f8a,0x6d0b,0x9633,0x6c27,0x4ef0,0x75d2,
-0x517b,0x6837,0x6f3e,0x9080,0x8170,0x5996,0x7476,0x0000,
-/* 0xd200 */
-0x8938,0x8939,0x893a,0x893b,0x893c,0x893d,0x893e,0x893f,
-0x8940,0x8942,0x8943,0x8945,0x8946,0x8947,0x8948,0x8949,
-0x894a,0x894b,0x894c,0x894d,0x894e,0x894f,0x8950,0x8951,
-0x8952,0x8953,0x8954,0x8955,0x8956,0x8957,0x8958,0x8959,
-0x895a,0x895b,0x895c,0x895d,0x8960,0x8961,0x8962,0x8963,
-0x8964,0x8965,0x8967,0x8968,0x8969,0x896a,0x896b,0x896c,
-0x896d,0x896e,0x896f,0x8970,0x8971,0x8972,0x8973,0x8974,
-0x8975,0x8976,0x8977,0x8978,0x8979,0x897a,0x897c,0x0000,
-0x897d,0x897e,0x8980,0x8982,0x8984,0x8985,0x8987,0x8988,
-0x8989,0x898a,0x898b,0x898c,0x898d,0x898e,0x898f,0x8990,
-0x8991,0x8992,0x8993,0x8994,0x8995,0x8996,0x8997,0x8998,
-0x8999,0x899a,0x899b,0x899c,0x899d,0x899e,0x899f,0x89a0,
-0x89a1,0x6447,0x5c27,0x9065,0x7a91,0x8c23,0x59da,0x54ac,
-0x8200,0x836f,0x8981,0x8000,0x6930,0x564e,0x8036,0x7237,
-0x91ce,0x51b6,0x4e5f,0x9875,0x6396,0x4e1a,0x53f6,0x66f3,
-0x814b,0x591c,0x6db2,0x4e00,0x58f9,0x533b,0x63d6,0x94f1,
-0x4f9d,0x4f0a,0x8863,0x9890,0x5937,0x9057,0x79fb,0x4eea,
-0x80f0,0x7591,0x6c82,0x5b9c,0x59e8,0x5f5d,0x6905,0x8681,
-0x501a,0x5df2,0x4e59,0x77e3,0x4ee5,0x827a,0x6291,0x6613,
-0x9091,0x5c79,0x4ebf,0x5f79,0x81c6,0x9038,0x8084,0x75ab,
-0x4ea6,0x88d4,0x610f,0x6bc5,0x5fc6,0x4e49,0x76ca,0x6ea2,
-0x8be3,0x8bae,0x8c0a,0x8bd1,0x5f02,0x7ffc,0x7fcc,0x7ece,
-0x8335,0x836b,0x56e0,0x6bb7,0x97f3,0x9634,0x59fb,0x541f,
-0x94f6,0x6deb,0x5bc5,0x996e,0x5c39,0x5f15,0x9690,0x0000,
-/* 0xd300 */
-0x89a2,0x89a3,0x89a4,0x89a5,0x89a6,0x89a7,0x89a8,0x89a9,
-0x89aa,0x89ab,0x89ac,0x89ad,0x89ae,0x89af,0x89b0,0x89b1,
-0x89b2,0x89b3,0x89b4,0x89b5,0x89b6,0x89b7,0x89b8,0x89b9,
-0x89ba,0x89bb,0x89bc,0x89bd,0x89be,0x89bf,0x89c0,0x89c3,
-0x89cd,0x89d3,0x89d4,0x89d5,0x89d7,0x89d8,0x89d9,0x89db,
-0x89dd,0x89df,0x89e0,0x89e1,0x89e2,0x89e4,0x89e7,0x89e8,
-0x89e9,0x89ea,0x89ec,0x89ed,0x89ee,0x89f0,0x89f1,0x89f2,
-0x89f4,0x89f5,0x89f6,0x89f7,0x89f8,0x89f9,0x89fa,0x0000,
-0x89fb,0x89fc,0x89fd,0x89fe,0x89ff,0x8a01,0x8a02,0x8a03,
-0x8a04,0x8a05,0x8a06,0x8a08,0x8a09,0x8a0a,0x8a0b,0x8a0c,
-0x8a0d,0x8a0e,0x8a0f,0x8a10,0x8a11,0x8a12,0x8a13,0x8a14,
-0x8a15,0x8a16,0x8a17,0x8a18,0x8a19,0x8a1a,0x8a1b,0x8a1c,
-0x8a1d,0x5370,0x82f1,0x6a31,0x5a74,0x9e70,0x5e94,0x7f28,
-0x83b9,0x8424,0x8425,0x8367,0x8747,0x8fce,0x8d62,0x76c8,
-0x5f71,0x9896,0x786c,0x6620,0x54df,0x62e5,0x4f63,0x81c3,
-0x75c8,0x5eb8,0x96cd,0x8e0a,0x86f9,0x548f,0x6cf3,0x6d8c,
-0x6c38,0x607f,0x52c7,0x7528,0x5e7d,0x4f18,0x60a0,0x5fe7,
-0x5c24,0x7531,0x90ae,0x94c0,0x72b9,0x6cb9,0x6e38,0x9149,
-0x6709,0x53cb,0x53f3,0x4f51,0x91c9,0x8bf1,0x53c8,0x5e7c,
-0x8fc2,0x6de4,0x4e8e,0x76c2,0x6986,0x865e,0x611a,0x8206,
-0x4f59,0x4fde,0x903e,0x9c7c,0x6109,0x6e1d,0x6e14,0x9685,
-0x4e88,0x5a31,0x96e8,0x4e0e,0x5c7f,0x79b9,0x5b87,0x8bed,
-0x7fbd,0x7389,0x57df,0x828b,0x90c1,0x5401,0x9047,0x55bb,
-0x5cea,0x5fa1,0x6108,0x6b32,0x72f1,0x80b2,0x8a89,0x0000,
-/* 0xd400 */
-0x8a1e,0x8a1f,0x8a20,0x8a21,0x8a22,0x8a23,0x8a24,0x8a25,
-0x8a26,0x8a27,0x8a28,0x8a29,0x8a2a,0x8a2b,0x8a2c,0x8a2d,
-0x8a2e,0x8a2f,0x8a30,0x8a31,0x8a32,0x8a33,0x8a34,0x8a35,
-0x8a36,0x8a37,0x8a38,0x8a39,0x8a3a,0x8a3b,0x8a3c,0x8a3d,
-0x8a3f,0x8a40,0x8a41,0x8a42,0x8a43,0x8a44,0x8a45,0x8a46,
-0x8a47,0x8a49,0x8a4a,0x8a4b,0x8a4c,0x8a4d,0x8a4e,0x8a4f,
-0x8a50,0x8a51,0x8a52,0x8a53,0x8a54,0x8a55,0x8a56,0x8a57,
-0x8a58,0x8a59,0x8a5a,0x8a5b,0x8a5c,0x8a5d,0x8a5e,0x0000,
-0x8a5f,0x8a60,0x8a61,0x8a62,0x8a63,0x8a64,0x8a65,0x8a66,
-0x8a67,0x8a68,0x8a69,0x8a6a,0x8a6b,0x8a6c,0x8a6d,0x8a6e,
-0x8a6f,0x8a70,0x8a71,0x8a72,0x8a73,0x8a74,0x8a75,0x8a76,
-0x8a77,0x8a78,0x8a7a,0x8a7b,0x8a7c,0x8a7d,0x8a7e,0x8a7f,
-0x8a80,0x6d74,0x5bd3,0x88d5,0x9884,0x8c6b,0x9a6d,0x9e33,
-0x6e0a,0x51a4,0x5143,0x57a3,0x8881,0x539f,0x63f4,0x8f95,
-0x56ed,0x5458,0x5706,0x733f,0x6e90,0x7f18,0x8fdc,0x82d1,
-0x613f,0x6028,0x9662,0x66f0,0x7ea6,0x8d8a,0x8dc3,0x94a5,
-0x5cb3,0x7ca4,0x6708,0x60a6,0x9605,0x8018,0x4e91,0x90e7,
-0x5300,0x9668,0x5141,0x8fd0,0x8574,0x915d,0x6655,0x97f5,
-0x5b55,0x531d,0x7838,0x6742,0x683d,0x54c9,0x707e,0x5bb0,
-0x8f7d,0x518d,0x5728,0x54b1,0x6512,0x6682,0x8d5e,0x8d43,
-0x810f,0x846c,0x906d,0x7cdf,0x51ff,0x85fb,0x67a3,0x65e9,
-0x6fa1,0x86a4,0x8e81,0x566a,0x9020,0x7682,0x7076,0x71e5,
-0x8d23,0x62e9,0x5219,0x6cfd,0x8d3c,0x600e,0x589e,0x618e,
-0x66fe,0x8d60,0x624e,0x55b3,0x6e23,0x672d,0x8f67,0x0000,
-/* 0xd500 */
-0x8a81,0x8a82,0x8a83,0x8a84,0x8a85,0x8a86,0x8a87,0x8a88,
-0x8a8b,0x8a8c,0x8a8d,0x8a8e,0x8a8f,0x8a90,0x8a91,0x8a92,
-0x8a94,0x8a95,0x8a96,0x8a97,0x8a98,0x8a99,0x8a9a,0x8a9b,
-0x8a9c,0x8a9d,0x8a9e,0x8a9f,0x8aa0,0x8aa1,0x8aa2,0x8aa3,
-0x8aa4,0x8aa5,0x8aa6,0x8aa7,0x8aa8,0x8aa9,0x8aaa,0x8aab,
-0x8aac,0x8aad,0x8aae,0x8aaf,0x8ab0,0x8ab1,0x8ab2,0x8ab3,
-0x8ab4,0x8ab5,0x8ab6,0x8ab7,0x8ab8,0x8ab9,0x8aba,0x8abb,
-0x8abc,0x8abd,0x8abe,0x8abf,0x8ac0,0x8ac1,0x8ac2,0x0000,
-0x8ac3,0x8ac4,0x8ac5,0x8ac6,0x8ac7,0x8ac8,0x8ac9,0x8aca,
-0x8acb,0x8acc,0x8acd,0x8ace,0x8acf,0x8ad0,0x8ad1,0x8ad2,
-0x8ad3,0x8ad4,0x8ad5,0x8ad6,0x8ad7,0x8ad8,0x8ad9,0x8ada,
-0x8adb,0x8adc,0x8add,0x8ade,0x8adf,0x8ae0,0x8ae1,0x8ae2,
-0x8ae3,0x94e1,0x95f8,0x7728,0x6805,0x69a8,0x548b,0x4e4d,
-0x70b8,0x8bc8,0x6458,0x658b,0x5b85,0x7a84,0x503a,0x5be8,
-0x77bb,0x6be1,0x8a79,0x7c98,0x6cbe,0x76cf,0x65a9,0x8f97,
-0x5d2d,0x5c55,0x8638,0x6808,0x5360,0x6218,0x7ad9,0x6e5b,
-0x7efd,0x6a1f,0x7ae0,0x5f70,0x6f33,0x5f20,0x638c,0x6da8,
-0x6756,0x4e08,0x5e10,0x8d26,0x4ed7,0x80c0,0x7634,0x969c,
-0x62db,0x662d,0x627e,0x6cbc,0x8d75,0x7167,0x7f69,0x5146,
-0x8087,0x53ec,0x906e,0x6298,0x54f2,0x86f0,0x8f99,0x8005,
-0x9517,0x8517,0x8fd9,0x6d59,0x73cd,0x659f,0x771f,0x7504,
-0x7827,0x81fb,0x8d1e,0x9488,0x4fa6,0x6795,0x75b9,0x8bca,
-0x9707,0x632f,0x9547,0x9635,0x84b8,0x6323,0x7741,0x5f81,
-0x72f0,0x4e89,0x6014,0x6574,0x62ef,0x6b63,0x653f,0x0000,
-/* 0xd600 */
-0x8ae4,0x8ae5,0x8ae6,0x8ae7,0x8ae8,0x8ae9,0x8aea,0x8aeb,
-0x8aec,0x8aed,0x8aee,0x8aef,0x8af0,0x8af1,0x8af2,0x8af3,
-0x8af4,0x8af5,0x8af6,0x8af7,0x8af8,0x8af9,0x8afa,0x8afb,
-0x8afc,0x8afd,0x8afe,0x8aff,0x8b00,0x8b01,0x8b02,0x8b03,
-0x8b04,0x8b05,0x8b06,0x8b08,0x8b09,0x8b0a,0x8b0b,0x8b0c,
-0x8b0d,0x8b0e,0x8b0f,0x8b10,0x8b11,0x8b12,0x8b13,0x8b14,
-0x8b15,0x8b16,0x8b17,0x8b18,0x8b19,0x8b1a,0x8b1b,0x8b1c,
-0x8b1d,0x8b1e,0x8b1f,0x8b20,0x8b21,0x8b22,0x8b23,0x0000,
-0x8b24,0x8b25,0x8b27,0x8b28,0x8b29,0x8b2a,0x8b2b,0x8b2c,
-0x8b2d,0x8b2e,0x8b2f,0x8b30,0x8b31,0x8b32,0x8b33,0x8b34,
-0x8b35,0x8b36,0x8b37,0x8b38,0x8b39,0x8b3a,0x8b3b,0x8b3c,
-0x8b3d,0x8b3e,0x8b3f,0x8b40,0x8b41,0x8b42,0x8b43,0x8b44,
-0x8b45,0x5e27,0x75c7,0x90d1,0x8bc1,0x829d,0x679d,0x652f,
-0x5431,0x8718,0x77e5,0x80a2,0x8102,0x6c41,0x4e4b,0x7ec7,
-0x804c,0x76f4,0x690d,0x6b96,0x6267,0x503c,0x4f84,0x5740,
-0x6307,0x6b62,0x8dbe,0x53ea,0x65e8,0x7eb8,0x5fd7,0x631a,
-0x63b7,0x81f3,0x81f4,0x7f6e,0x5e1c,0x5cd9,0x5236,0x667a,
-0x79e9,0x7a1a,0x8d28,0x7099,0x75d4,0x6ede,0x6cbb,0x7a92,
-0x4e2d,0x76c5,0x5fe0,0x949f,0x8877,0x7ec8,0x79cd,0x80bf,
-0x91cd,0x4ef2,0x4f17,0x821f,0x5468,0x5dde,0x6d32,0x8bcc,
-0x7ca5,0x8f74,0x8098,0x5e1a,0x5492,0x76b1,0x5b99,0x663c,
-0x9aa4,0x73e0,0x682a,0x86db,0x6731,0x732a,0x8bf8,0x8bdb,
-0x9010,0x7af9,0x70db,0x716e,0x62c4,0x77a9,0x5631,0x4e3b,
-0x8457,0x67f1,0x52a9,0x86c0,0x8d2e,0x94f8,0x7b51,0x0000,
-/* 0xd700 */
-0x8b46,0x8b47,0x8b48,0x8b49,0x8b4a,0x8b4b,0x8b4c,0x8b4d,
-0x8b4e,0x8b4f,0x8b50,0x8b51,0x8b52,0x8b53,0x8b54,0x8b55,
-0x8b56,0x8b57,0x8b58,0x8b59,0x8b5a,0x8b5b,0x8b5c,0x8b5d,
-0x8b5e,0x8b5f,0x8b60,0x8b61,0x8b62,0x8b63,0x8b64,0x8b65,
-0x8b67,0x8b68,0x8b69,0x8b6a,0x8b6b,0x8b6d,0x8b6e,0x8b6f,
-0x8b70,0x8b71,0x8b72,0x8b73,0x8b74,0x8b75,0x8b76,0x8b77,
-0x8b78,0x8b79,0x8b7a,0x8b7b,0x8b7c,0x8b7d,0x8b7e,0x8b7f,
-0x8b80,0x8b81,0x8b82,0x8b83,0x8b84,0x8b85,0x8b86,0x0000,
-0x8b87,0x8b88,0x8b89,0x8b8a,0x8b8b,0x8b8c,0x8b8d,0x8b8e,
-0x8b8f,0x8b90,0x8b91,0x8b92,0x8b93,0x8b94,0x8b95,0x8b96,
-0x8b97,0x8b98,0x8b99,0x8b9a,0x8b9b,0x8b9c,0x8b9d,0x8b9e,
-0x8b9f,0x8bac,0x8bb1,0x8bbb,0x8bc7,0x8bd0,0x8bea,0x8c09,
-0x8c1e,0x4f4f,0x6ce8,0x795d,0x9a7b,0x6293,0x722a,0x62fd,
-0x4e13,0x7816,0x8f6c,0x64b0,0x8d5a,0x7bc6,0x6869,0x5e84,
-0x88c5,0x5986,0x649e,0x58ee,0x72b6,0x690e,0x9525,0x8ffd,
-0x8d58,0x5760,0x7f00,0x8c06,0x51c6,0x6349,0x62d9,0x5353,
-0x684c,0x7422,0x8301,0x914c,0x5544,0x7740,0x707c,0x6d4a,
-0x5179,0x54a8,0x8d44,0x59ff,0x6ecb,0x6dc4,0x5b5c,0x7d2b,
-0x4ed4,0x7c7d,0x6ed3,0x5b50,0x81ea,0x6e0d,0x5b57,0x9b03,
-0x68d5,0x8e2a,0x5b97,0x7efc,0x603b,0x7eb5,0x90b9,0x8d70,
-0x594f,0x63cd,0x79df,0x8db3,0x5352,0x65cf,0x7956,0x8bc5,
-0x963b,0x7ec4,0x94bb,0x7e82,0x5634,0x9189,0x6700,0x7f6a,
-0x5c0a,0x9075,0x6628,0x5de6,0x4f50,0x67de,0x505a,0x4f5c,
-0x5750,0x5ea7,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-/* 0xd800 */
-0x8c38,0x8c39,0x8c3a,0x8c3b,0x8c3c,0x8c3d,0x8c3e,0x8c3f,
-0x8c40,0x8c42,0x8c43,0x8c44,0x8c45,0x8c48,0x8c4a,0x8c4b,
-0x8c4d,0x8c4e,0x8c4f,0x8c50,0x8c51,0x8c52,0x8c53,0x8c54,
-0x8c56,0x8c57,0x8c58,0x8c59,0x8c5b,0x8c5c,0x8c5d,0x8c5e,
-0x8c5f,0x8c60,0x8c63,0x8c64,0x8c65,0x8c66,0x8c67,0x8c68,
-0x8c69,0x8c6c,0x8c6d,0x8c6e,0x8c6f,0x8c70,0x8c71,0x8c72,
-0x8c74,0x8c75,0x8c76,0x8c77,0x8c7b,0x8c7c,0x8c7d,0x8c7e,
-0x8c7f,0x8c80,0x8c81,0x8c83,0x8c84,0x8c86,0x8c87,0x0000,
-0x8c88,0x8c8b,0x8c8d,0x8c8e,0x8c8f,0x8c90,0x8c91,0x8c92,
-0x8c93,0x8c95,0x8c96,0x8c97,0x8c99,0x8c9a,0x8c9b,0x8c9c,
-0x8c9d,0x8c9e,0x8c9f,0x8ca0,0x8ca1,0x8ca2,0x8ca3,0x8ca4,
-0x8ca5,0x8ca6,0x8ca7,0x8ca8,0x8ca9,0x8caa,0x8cab,0x8cac,
-0x8cad,0x4e8d,0x4e0c,0x5140,0x4e10,0x5eff,0x5345,0x4e15,
-0x4e98,0x4e1e,0x9b32,0x5b6c,0x5669,0x4e28,0x79ba,0x4e3f,
-0x5315,0x4e47,0x592d,0x723b,0x536e,0x6c10,0x56df,0x80e4,
-0x9997,0x6bd3,0x777e,0x9f17,0x4e36,0x4e9f,0x9f10,0x4e5c,
-0x4e69,0x4e93,0x8288,0x5b5b,0x556c,0x560f,0x4ec4,0x538d,
-0x539d,0x53a3,0x53a5,0x53ae,0x9765,0x8d5d,0x531a,0x53f5,
-0x5326,0x532e,0x533e,0x8d5c,0x5366,0x5363,0x5202,0x5208,
-0x520e,0x522d,0x5233,0x523f,0x5240,0x524c,0x525e,0x5261,
-0x525c,0x84af,0x527d,0x5282,0x5281,0x5290,0x5293,0x5182,
-0x7f54,0x4ebb,0x4ec3,0x4ec9,0x4ec2,0x4ee8,0x4ee1,0x4eeb,
-0x4ede,0x4f1b,0x4ef3,0x4f22,0x4f64,0x4ef5,0x4f25,0x4f27,
-0x4f09,0x4f2b,0x4f5e,0x4f67,0x6538,0x4f5a,0x4f5d,0x0000,
-/* 0xd900 */
-0x8cae,0x8caf,0x8cb0,0x8cb1,0x8cb2,0x8cb3,0x8cb4,0x8cb5,
-0x8cb6,0x8cb7,0x8cb8,0x8cb9,0x8cba,0x8cbb,0x8cbc,0x8cbd,
-0x8cbe,0x8cbf,0x8cc0,0x8cc1,0x8cc2,0x8cc3,0x8cc4,0x8cc5,
-0x8cc6,0x8cc7,0x8cc8,0x8cc9,0x8cca,0x8ccb,0x8ccc,0x8ccd,
-0x8cce,0x8ccf,0x8cd0,0x8cd1,0x8cd2,0x8cd3,0x8cd4,0x8cd5,
-0x8cd6,0x8cd7,0x8cd8,0x8cd9,0x8cda,0x8cdb,0x8cdc,0x8cdd,
-0x8cde,0x8cdf,0x8ce0,0x8ce1,0x8ce2,0x8ce3,0x8ce4,0x8ce5,
-0x8ce6,0x8ce7,0x8ce8,0x8ce9,0x8cea,0x8ceb,0x8cec,0x0000,
-0x8ced,0x8cee,0x8cef,0x8cf0,0x8cf1,0x8cf2,0x8cf3,0x8cf4,
-0x8cf5,0x8cf6,0x8cf7,0x8cf8,0x8cf9,0x8cfa,0x8cfb,0x8cfc,
-0x8cfd,0x8cfe,0x8cff,0x8d00,0x8d01,0x8d02,0x8d03,0x8d04,
-0x8d05,0x8d06,0x8d07,0x8d08,0x8d09,0x8d0a,0x8d0b,0x8d0c,
-0x8d0d,0x4f5f,0x4f57,0x4f32,0x4f3d,0x4f76,0x4f74,0x4f91,
-0x4f89,0x4f83,0x4f8f,0x4f7e,0x4f7b,0x4faa,0x4f7c,0x4fac,
-0x4f94,0x4fe6,0x4fe8,0x4fea,0x4fc5,0x4fda,0x4fe3,0x4fdc,
-0x4fd1,0x4fdf,0x4ff8,0x5029,0x504c,0x4ff3,0x502c,0x500f,
-0x502e,0x502d,0x4ffe,0x501c,0x500c,0x5025,0x5028,0x507e,
-0x5043,0x5055,0x5048,0x504e,0x506c,0x507b,0x50a5,0x50a7,
-0x50a9,0x50ba,0x50d6,0x5106,0x50ed,0x50ec,0x50e6,0x50ee,
-0x5107,0x510b,0x4edd,0x6c3d,0x4f58,0x4f65,0x4fce,0x9fa0,
-0x6c46,0x7c74,0x516e,0x5dfd,0x9ec9,0x9998,0x5181,0x5914,
-0x52f9,0x530d,0x8a07,0x5310,0x51eb,0x5919,0x5155,0x4ea0,
-0x5156,0x4eb3,0x886e,0x88a4,0x4eb5,0x8114,0x88d2,0x7980,
-0x5b34,0x8803,0x7fb8,0x51ab,0x51b1,0x51bd,0x51bc,0x0000,
-/* 0xda00 */
-0x8d0e,0x8d0f,0x8d10,0x8d11,0x8d12,0x8d13,0x8d14,0x8d15,
-0x8d16,0x8d17,0x8d18,0x8d19,0x8d1a,0x8d1b,0x8d1c,0x8d20,
-0x8d51,0x8d52,0x8d57,0x8d5f,0x8d65,0x8d68,0x8d69,0x8d6a,
-0x8d6c,0x8d6e,0x8d6f,0x8d71,0x8d72,0x8d78,0x8d79,0x8d7a,
-0x8d7b,0x8d7c,0x8d7d,0x8d7e,0x8d7f,0x8d80,0x8d82,0x8d83,
-0x8d86,0x8d87,0x8d88,0x8d89,0x8d8c,0x8d8d,0x8d8e,0x8d8f,
-0x8d90,0x8d92,0x8d93,0x8d95,0x8d96,0x8d97,0x8d98,0x8d99,
-0x8d9a,0x8d9b,0x8d9c,0x8d9d,0x8d9e,0x8da0,0x8da1,0x0000,
-0x8da2,0x8da4,0x8da5,0x8da6,0x8da7,0x8da8,0x8da9,0x8daa,
-0x8dab,0x8dac,0x8dad,0x8dae,0x8daf,0x8db0,0x8db2,0x8db6,
-0x8db7,0x8db9,0x8dbb,0x8dbd,0x8dc0,0x8dc1,0x8dc2,0x8dc5,
-0x8dc7,0x8dc8,0x8dc9,0x8dca,0x8dcd,0x8dd0,0x8dd2,0x8dd3,
-0x8dd4,0x51c7,0x5196,0x51a2,0x51a5,0x8ba0,0x8ba6,0x8ba7,
-0x8baa,0x8bb4,0x8bb5,0x8bb7,0x8bc2,0x8bc3,0x8bcb,0x8bcf,
-0x8bce,0x8bd2,0x8bd3,0x8bd4,0x8bd6,0x8bd8,0x8bd9,0x8bdc,
-0x8bdf,0x8be0,0x8be4,0x8be8,0x8be9,0x8bee,0x8bf0,0x8bf3,
-0x8bf6,0x8bf9,0x8bfc,0x8bff,0x8c00,0x8c02,0x8c04,0x8c07,
-0x8c0c,0x8c0f,0x8c11,0x8c12,0x8c14,0x8c15,0x8c16,0x8c19,
-0x8c1b,0x8c18,0x8c1d,0x8c1f,0x8c20,0x8c21,0x8c25,0x8c27,
-0x8c2a,0x8c2b,0x8c2e,0x8c2f,0x8c32,0x8c33,0x8c35,0x8c36,
-0x5369,0x537a,0x961d,0x9622,0x9621,0x9631,0x962a,0x963d,
-0x963c,0x9642,0x9649,0x9654,0x965f,0x9667,0x966c,0x9672,
-0x9674,0x9688,0x968d,0x9697,0x96b0,0x9097,0x909b,0x909d,
-0x9099,0x90ac,0x90a1,0x90b4,0x90b3,0x90b6,0x90ba,0x0000,
-/* 0xdb00 */
-0x8dd5,0x8dd8,0x8dd9,0x8ddc,0x8de0,0x8de1,0x8de2,0x8de5,
-0x8de6,0x8de7,0x8de9,0x8ded,0x8dee,0x8df0,0x8df1,0x8df2,
-0x8df4,0x8df6,0x8dfc,0x8dfe,0x8dff,0x8e00,0x8e01,0x8e02,
-0x8e03,0x8e04,0x8e06,0x8e07,0x8e08,0x8e0b,0x8e0d,0x8e0e,
-0x8e10,0x8e11,0x8e12,0x8e13,0x8e15,0x8e16,0x8e17,0x8e18,
-0x8e19,0x8e1a,0x8e1b,0x8e1c,0x8e20,0x8e21,0x8e24,0x8e25,
-0x8e26,0x8e27,0x8e28,0x8e2b,0x8e2d,0x8e30,0x8e32,0x8e33,
-0x8e34,0x8e36,0x8e37,0x8e38,0x8e3b,0x8e3c,0x8e3e,0x0000,
-0x8e3f,0x8e43,0x8e45,0x8e46,0x8e4c,0x8e4d,0x8e4e,0x8e4f,
-0x8e50,0x8e53,0x8e54,0x8e55,0x8e56,0x8e57,0x8e58,0x8e5a,
-0x8e5b,0x8e5c,0x8e5d,0x8e5e,0x8e5f,0x8e60,0x8e61,0x8e62,
-0x8e63,0x8e64,0x8e65,0x8e67,0x8e68,0x8e6a,0x8e6b,0x8e6e,
-0x8e71,0x90b8,0x90b0,0x90cf,0x90c5,0x90be,0x90d0,0x90c4,
-0x90c7,0x90d3,0x90e6,0x90e2,0x90dc,0x90d7,0x90db,0x90eb,
-0x90ef,0x90fe,0x9104,0x9122,0x911e,0x9123,0x9131,0x912f,
-0x9139,0x9143,0x9146,0x520d,0x5942,0x52a2,0x52ac,0x52ad,
-0x52be,0x54ff,0x52d0,0x52d6,0x52f0,0x53df,0x71ee,0x77cd,
-0x5ef4,0x51f5,0x51fc,0x9b2f,0x53b6,0x5f01,0x755a,0x5def,
-0x574c,0x57a9,0x57a1,0x587e,0x58bc,0x58c5,0x58d1,0x5729,
-0x572c,0x572a,0x5733,0x5739,0x572e,0x572f,0x575c,0x573b,
-0x5742,0x5769,0x5785,0x576b,0x5786,0x577c,0x577b,0x5768,
-0x576d,0x5776,0x5773,0x57ad,0x57a4,0x578c,0x57b2,0x57cf,
-0x57a7,0x57b4,0x5793,0x57a0,0x57d5,0x57d8,0x57da,0x57d9,
-0x57d2,0x57b8,0x57f4,0x57ef,0x57f8,0x57e4,0x57dd,0x0000,
-/* 0xdc00 */
-0x8e73,0x8e75,0x8e77,0x8e78,0x8e79,0x8e7a,0x8e7b,0x8e7d,
-0x8e7e,0x8e80,0x8e82,0x8e83,0x8e84,0x8e86,0x8e88,0x8e89,
-0x8e8a,0x8e8b,0x8e8c,0x8e8d,0x8e8e,0x8e91,0x8e92,0x8e93,
-0x8e95,0x8e96,0x8e97,0x8e98,0x8e99,0x8e9a,0x8e9b,0x8e9d,
-0x8e9f,0x8ea0,0x8ea1,0x8ea2,0x8ea3,0x8ea4,0x8ea5,0x8ea6,
-0x8ea7,0x8ea8,0x8ea9,0x8eaa,0x8ead,0x8eae,0x8eb0,0x8eb1,
-0x8eb3,0x8eb4,0x8eb5,0x8eb6,0x8eb7,0x8eb8,0x8eb9,0x8ebb,
-0x8ebc,0x8ebd,0x8ebe,0x8ebf,0x8ec0,0x8ec1,0x8ec2,0x0000,
-0x8ec3,0x8ec4,0x8ec5,0x8ec6,0x8ec7,0x8ec8,0x8ec9,0x8eca,
-0x8ecb,0x8ecc,0x8ecd,0x8ecf,0x8ed0,0x8ed1,0x8ed2,0x8ed3,
-0x8ed4,0x8ed5,0x8ed6,0x8ed7,0x8ed8,0x8ed9,0x8eda,0x8edb,
-0x8edc,0x8edd,0x8ede,0x8edf,0x8ee0,0x8ee1,0x8ee2,0x8ee3,
-0x8ee4,0x580b,0x580d,0x57fd,0x57ed,0x5800,0x581e,0x5819,
-0x5844,0x5820,0x5865,0x586c,0x5881,0x5889,0x589a,0x5880,
-0x99a8,0x9f19,0x61ff,0x8279,0x827d,0x827f,0x828f,0x828a,
-0x82a8,0x8284,0x828e,0x8291,0x8297,0x8299,0x82ab,0x82b8,
-0x82be,0x82b0,0x82c8,0x82ca,0x82e3,0x8298,0x82b7,0x82ae,
-0x82cb,0x82cc,0x82c1,0x82a9,0x82b4,0x82a1,0x82aa,0x829f,
-0x82c4,0x82ce,0x82a4,0x82e1,0x8309,0x82f7,0x82e4,0x830f,
-0x8307,0x82dc,0x82f4,0x82d2,0x82d8,0x830c,0x82fb,0x82d3,
-0x8311,0x831a,0x8306,0x8314,0x8315,0x82e0,0x82d5,0x831c,
-0x8351,0x835b,0x835c,0x8308,0x8392,0x833c,0x8334,0x8331,
-0x839b,0x835e,0x832f,0x834f,0x8347,0x8343,0x835f,0x8340,
-0x8317,0x8360,0x832d,0x833a,0x8333,0x8366,0x8365,0x0000,
-/* 0xdd00 */
-0x8ee5,0x8ee6,0x8ee7,0x8ee8,0x8ee9,0x8eea,0x8eeb,0x8eec,
-0x8eed,0x8eee,0x8eef,0x8ef0,0x8ef1,0x8ef2,0x8ef3,0x8ef4,
-0x8ef5,0x8ef6,0x8ef7,0x8ef8,0x8ef9,0x8efa,0x8efb,0x8efc,
-0x8efd,0x8efe,0x8eff,0x8f00,0x8f01,0x8f02,0x8f03,0x8f04,
-0x8f05,0x8f06,0x8f07,0x8f08,0x8f09,0x8f0a,0x8f0b,0x8f0c,
-0x8f0d,0x8f0e,0x8f0f,0x8f10,0x8f11,0x8f12,0x8f13,0x8f14,
-0x8f15,0x8f16,0x8f17,0x8f18,0x8f19,0x8f1a,0x8f1b,0x8f1c,
-0x8f1d,0x8f1e,0x8f1f,0x8f20,0x8f21,0x8f22,0x8f23,0x0000,
-0x8f24,0x8f25,0x8f26,0x8f27,0x8f28,0x8f29,0x8f2a,0x8f2b,
-0x8f2c,0x8f2d,0x8f2e,0x8f2f,0x8f30,0x8f31,0x8f32,0x8f33,
-0x8f34,0x8f35,0x8f36,0x8f37,0x8f38,0x8f39,0x8f3a,0x8f3b,
-0x8f3c,0x8f3d,0x8f3e,0x8f3f,0x8f40,0x8f41,0x8f42,0x8f43,
-0x8f44,0x8368,0x831b,0x8369,0x836c,0x836a,0x836d,0x836e,
-0x83b0,0x8378,0x83b3,0x83b4,0x83a0,0x83aa,0x8393,0x839c,
-0x8385,0x837c,0x83b6,0x83a9,0x837d,0x83b8,0x837b,0x8398,
-0x839e,0x83a8,0x83ba,0x83bc,0x83c1,0x8401,0x83e5,0x83d8,
-0x5807,0x8418,0x840b,0x83dd,0x83fd,0x83d6,0x841c,0x8438,
-0x8411,0x8406,0x83d4,0x83df,0x840f,0x8403,0x83f8,0x83f9,
-0x83ea,0x83c5,0x83c0,0x8426,0x83f0,0x83e1,0x845c,0x8451,
-0x845a,0x8459,0x8473,0x8487,0x8488,0x847a,0x8489,0x8478,
-0x843c,0x8446,0x8469,0x8476,0x848c,0x848e,0x8431,0x846d,
-0x84c1,0x84cd,0x84d0,0x84e6,0x84bd,0x84d3,0x84ca,0x84bf,
-0x84ba,0x84e0,0x84a1,0x84b9,0x84b4,0x8497,0x84e5,0x84e3,
-0x850c,0x750d,0x8538,0x84f0,0x8539,0x851f,0x853a,0x0000,
-/* 0xde00 */
-0x8f45,0x8f46,0x8f47,0x8f48,0x8f49,0x8f4a,0x8f4b,0x8f4c,
-0x8f4d,0x8f4e,0x8f4f,0x8f50,0x8f51,0x8f52,0x8f53,0x8f54,
-0x8f55,0x8f56,0x8f57,0x8f58,0x8f59,0x8f5a,0x8f5b,0x8f5c,
-0x8f5d,0x8f5e,0x8f5f,0x8f60,0x8f61,0x8f62,0x8f63,0x8f64,
-0x8f65,0x8f6a,0x8f80,0x8f8c,0x8f92,0x8f9d,0x8fa0,0x8fa1,
-0x8fa2,0x8fa4,0x8fa5,0x8fa6,0x8fa7,0x8faa,0x8fac,0x8fad,
-0x8fae,0x8faf,0x8fb2,0x8fb3,0x8fb4,0x8fb5,0x8fb7,0x8fb8,
-0x8fba,0x8fbb,0x8fbc,0x8fbf,0x8fc0,0x8fc3,0x8fc6,0x0000,
-0x8fc9,0x8fca,0x8fcb,0x8fcc,0x8fcd,0x8fcf,0x8fd2,0x8fd6,
-0x8fd7,0x8fda,0x8fe0,0x8fe1,0x8fe3,0x8fe7,0x8fec,0x8fef,
-0x8ff1,0x8ff2,0x8ff4,0x8ff5,0x8ff6,0x8ffa,0x8ffb,0x8ffc,
-0x8ffe,0x8fff,0x9007,0x9008,0x900c,0x900e,0x9013,0x9015,
-0x9018,0x8556,0x853b,0x84ff,0x84fc,0x8559,0x8548,0x8568,
-0x8564,0x855e,0x857a,0x77a2,0x8543,0x8572,0x857b,0x85a4,
-0x85a8,0x8587,0x858f,0x8579,0x85ae,0x859c,0x8585,0x85b9,
-0x85b7,0x85b0,0x85d3,0x85c1,0x85dc,0x85ff,0x8627,0x8605,
-0x8629,0x8616,0x863c,0x5efe,0x5f08,0x593c,0x5941,0x8037,
-0x5955,0x595a,0x5958,0x530f,0x5c22,0x5c25,0x5c2c,0x5c34,
-0x624c,0x626a,0x629f,0x62bb,0x62ca,0x62da,0x62d7,0x62ee,
-0x6322,0x62f6,0x6339,0x634b,0x6343,0x63ad,0x63f6,0x6371,
-0x637a,0x638e,0x63b4,0x636d,0x63ac,0x638a,0x6369,0x63ae,
-0x63bc,0x63f2,0x63f8,0x63e0,0x63ff,0x63c4,0x63de,0x63ce,
-0x6452,0x63c6,0x63be,0x6445,0x6441,0x640b,0x641b,0x6420,
-0x640c,0x6426,0x6421,0x645e,0x6484,0x646d,0x6496,0x0000,
-/* 0xdf00 */
-0x9019,0x901c,0x9023,0x9024,0x9025,0x9027,0x9028,0x9029,
-0x902a,0x902b,0x902c,0x9030,0x9031,0x9032,0x9033,0x9034,
-0x9037,0x9039,0x903a,0x903d,0x903f,0x9040,0x9043,0x9045,
-0x9046,0x9048,0x9049,0x904a,0x904b,0x904c,0x904e,0x9054,
-0x9055,0x9056,0x9059,0x905a,0x905c,0x905d,0x905e,0x905f,
-0x9060,0x9061,0x9064,0x9066,0x9067,0x9069,0x906a,0x906b,
-0x906c,0x906f,0x9070,0x9071,0x9072,0x9073,0x9076,0x9077,
-0x9078,0x9079,0x907a,0x907b,0x907c,0x907e,0x9081,0x0000,
-0x9084,0x9085,0x9086,0x9087,0x9089,0x908a,0x908c,0x908d,
-0x908e,0x908f,0x9090,0x9092,0x9094,0x9096,0x9098,0x909a,
-0x909c,0x909e,0x909f,0x90a0,0x90a4,0x90a5,0x90a7,0x90a8,
-0x90a9,0x90ab,0x90ad,0x90b2,0x90b7,0x90bc,0x90bd,0x90bf,
-0x90c0,0x647a,0x64b7,0x64b8,0x6499,0x64ba,0x64c0,0x64d0,
-0x64d7,0x64e4,0x64e2,0x6509,0x6525,0x652e,0x5f0b,0x5fd2,
-0x7519,0x5f11,0x535f,0x53f1,0x53fd,0x53e9,0x53e8,0x53fb,
-0x5412,0x5416,0x5406,0x544b,0x5452,0x5453,0x5454,0x5456,
-0x5443,0x5421,0x5457,0x5459,0x5423,0x5432,0x5482,0x5494,
-0x5477,0x5471,0x5464,0x549a,0x549b,0x5484,0x5476,0x5466,
-0x549d,0x54d0,0x54ad,0x54c2,0x54b4,0x54d2,0x54a7,0x54a6,
-0x54d3,0x54d4,0x5472,0x54a3,0x54d5,0x54bb,0x54bf,0x54cc,
-0x54d9,0x54da,0x54dc,0x54a9,0x54aa,0x54a4,0x54dd,0x54cf,
-0x54de,0x551b,0x54e7,0x5520,0x54fd,0x5514,0x54f3,0x5522,
-0x5523,0x550f,0x5511,0x5527,0x552a,0x5567,0x558f,0x55b5,
-0x5549,0x556d,0x5541,0x5555,0x553f,0x5550,0x553c,0x0000,
-/* 0xe000 */
-0x90c2,0x90c3,0x90c6,0x90c8,0x90c9,0x90cb,0x90cc,0x90cd,
-0x90d2,0x90d4,0x90d5,0x90d6,0x90d8,0x90d9,0x90da,0x90de,
-0x90df,0x90e0,0x90e3,0x90e4,0x90e5,0x90e9,0x90ea,0x90ec,
-0x90ee,0x90f0,0x90f1,0x90f2,0x90f3,0x90f5,0x90f6,0x90f7,
-0x90f9,0x90fa,0x90fb,0x90fc,0x90ff,0x9100,0x9101,0x9103,
-0x9105,0x9106,0x9107,0x9108,0x9109,0x910a,0x910b,0x910c,
-0x910d,0x910e,0x910f,0x9110,0x9111,0x9112,0x9113,0x9114,
-0x9115,0x9116,0x9117,0x9118,0x911a,0x911b,0x911c,0x0000,
-0x911d,0x911f,0x9120,0x9121,0x9124,0x9125,0x9126,0x9127,
-0x9128,0x9129,0x912a,0x912b,0x912c,0x912d,0x912e,0x9130,
-0x9132,0x9133,0x9134,0x9135,0x9136,0x9137,0x9138,0x913a,
-0x913b,0x913c,0x913d,0x913e,0x913f,0x9140,0x9141,0x9142,
-0x9144,0x5537,0x5556,0x5575,0x5576,0x5577,0x5533,0x5530,
-0x555c,0x558b,0x55d2,0x5583,0x55b1,0x55b9,0x5588,0x5581,
-0x559f,0x557e,0x55d6,0x5591,0x557b,0x55df,0x55bd,0x55be,
-0x5594,0x5599,0x55ea,0x55f7,0x55c9,0x561f,0x55d1,0x55eb,
-0x55ec,0x55d4,0x55e6,0x55dd,0x55c4,0x55ef,0x55e5,0x55f2,
-0x55f3,0x55cc,0x55cd,0x55e8,0x55f5,0x55e4,0x8f94,0x561e,
-0x5608,0x560c,0x5601,0x5624,0x5623,0x55fe,0x5600,0x5627,
-0x562d,0x5658,0x5639,0x5657,0x562c,0x564d,0x5662,0x5659,
-0x565c,0x564c,0x5654,0x5686,0x5664,0x5671,0x566b,0x567b,
-0x567c,0x5685,0x5693,0x56af,0x56d4,0x56d7,0x56dd,0x56e1,
-0x56f5,0x56eb,0x56f9,0x56ff,0x5704,0x570a,0x5709,0x571c,
-0x5e0f,0x5e19,0x5e14,0x5e11,0x5e31,0x5e3b,0x5e3c,0x0000,
-/* 0xe100 */
-0x9145,0x9147,0x9148,0x9151,0x9153,0x9154,0x9155,0x9156,
-0x9158,0x9159,0x915b,0x915c,0x915f,0x9160,0x9166,0x9167,
-0x9168,0x916b,0x916d,0x9173,0x917a,0x917b,0x917c,0x9180,
-0x9181,0x9182,0x9183,0x9184,0x9186,0x9188,0x918a,0x918e,
-0x918f,0x9193,0x9194,0x9195,0x9196,0x9197,0x9198,0x9199,
-0x919c,0x919d,0x919e,0x919f,0x91a0,0x91a1,0x91a4,0x91a5,
-0x91a6,0x91a7,0x91a8,0x91a9,0x91ab,0x91ac,0x91b0,0x91b1,
-0x91b2,0x91b3,0x91b6,0x91b7,0x91b8,0x91b9,0x91bb,0x0000,
-0x91bc,0x91bd,0x91be,0x91bf,0x91c0,0x91c1,0x91c2,0x91c3,
-0x91c4,0x91c5,0x91c6,0x91c8,0x91cb,0x91d0,0x91d2,0x91d3,
-0x91d4,0x91d5,0x91d6,0x91d7,0x91d8,0x91d9,0x91da,0x91db,
-0x91dd,0x91de,0x91df,0x91e0,0x91e1,0x91e2,0x91e3,0x91e4,
-0x91e5,0x5e37,0x5e44,0x5e54,0x5e5b,0x5e5e,0x5e61,0x5c8c,
-0x5c7a,0x5c8d,0x5c90,0x5c96,0x5c88,0x5c98,0x5c99,0x5c91,
-0x5c9a,0x5c9c,0x5cb5,0x5ca2,0x5cbd,0x5cac,0x5cab,0x5cb1,
-0x5ca3,0x5cc1,0x5cb7,0x5cc4,0x5cd2,0x5ce4,0x5ccb,0x5ce5,
-0x5d02,0x5d03,0x5d27,0x5d26,0x5d2e,0x5d24,0x5d1e,0x5d06,
-0x5d1b,0x5d58,0x5d3e,0x5d34,0x5d3d,0x5d6c,0x5d5b,0x5d6f,
-0x5d5d,0x5d6b,0x5d4b,0x5d4a,0x5d69,0x5d74,0x5d82,0x5d99,
-0x5d9d,0x8c73,0x5db7,0x5dc5,0x5f73,0x5f77,0x5f82,0x5f87,
-0x5f89,0x5f8c,0x5f95,0x5f99,0x5f9c,0x5fa8,0x5fad,0x5fb5,
-0x5fbc,0x8862,0x5f61,0x72ad,0x72b0,0x72b4,0x72b7,0x72b8,
-0x72c3,0x72c1,0x72ce,0x72cd,0x72d2,0x72e8,0x72ef,0x72e9,
-0x72f2,0x72f4,0x72f7,0x7301,0x72f3,0x7303,0x72fa,0x0000,
-/* 0xe200 */
-0x91e6,0x91e7,0x91e8,0x91e9,0x91ea,0x91eb,0x91ec,0x91ed,
-0x91ee,0x91ef,0x91f0,0x91f1,0x91f2,0x91f3,0x91f4,0x91f5,
-0x91f6,0x91f7,0x91f8,0x91f9,0x91fa,0x91fb,0x91fc,0x91fd,
-0x91fe,0x91ff,0x9200,0x9201,0x9202,0x9203,0x9204,0x9205,
-0x9206,0x9207,0x9208,0x9209,0x920a,0x920b,0x920c,0x920d,
-0x920e,0x920f,0x9210,0x9211,0x9212,0x9213,0x9214,0x9215,
-0x9216,0x9217,0x9218,0x9219,0x921a,0x921b,0x921c,0x921d,
-0x921e,0x921f,0x9220,0x9221,0x9222,0x9223,0x9224,0x0000,
-0x9225,0x9226,0x9227,0x9228,0x9229,0x922a,0x922b,0x922c,
-0x922d,0x922e,0x922f,0x9230,0x9231,0x9232,0x9233,0x9234,
-0x9235,0x9236,0x9237,0x9238,0x9239,0x923a,0x923b,0x923c,
-0x923d,0x923e,0x923f,0x9240,0x9241,0x9242,0x9243,0x9244,
-0x9245,0x72fb,0x7317,0x7313,0x7321,0x730a,0x731e,0x731d,
-0x7315,0x7322,0x7339,0x7325,0x732c,0x7338,0x7331,0x7350,
-0x734d,0x7357,0x7360,0x736c,0x736f,0x737e,0x821b,0x5925,
-0x98e7,0x5924,0x5902,0x9963,0x9967,0x9968,0x9969,0x996a,
-0x996b,0x996c,0x9974,0x9977,0x997d,0x9980,0x9984,0x9987,
-0x998a,0x998d,0x9990,0x9991,0x9993,0x9994,0x9995,0x5e80,
-0x5e91,0x5e8b,0x5e96,0x5ea5,0x5ea0,0x5eb9,0x5eb5,0x5ebe,
-0x5eb3,0x8d53,0x5ed2,0x5ed1,0x5edb,0x5ee8,0x5eea,0x81ba,
-0x5fc4,0x5fc9,0x5fd6,0x5fcf,0x6003,0x5fee,0x6004,0x5fe1,
-0x5fe4,0x5ffe,0x6005,0x6006,0x5fea,0x5fed,0x5ff8,0x6019,
-0x6035,0x6026,0x601b,0x600f,0x600d,0x6029,0x602b,0x600a,
-0x603f,0x6021,0x6078,0x6079,0x607b,0x607a,0x6042,0x0000,
-/* 0xe300 */
-0x9246,0x9247,0x9248,0x9249,0x924a,0x924b,0x924c,0x924d,
-0x924e,0x924f,0x9250,0x9251,0x9252,0x9253,0x9254,0x9255,
-0x9256,0x9257,0x9258,0x9259,0x925a,0x925b,0x925c,0x925d,
-0x925e,0x925f,0x9260,0x9261,0x9262,0x9263,0x9264,0x9265,
-0x9266,0x9267,0x9268,0x9269,0x926a,0x926b,0x926c,0x926d,
-0x926e,0x926f,0x9270,0x9271,0x9272,0x9273,0x9275,0x9276,
-0x9277,0x9278,0x9279,0x927a,0x927b,0x927c,0x927d,0x927e,
-0x927f,0x9280,0x9281,0x9282,0x9283,0x9284,0x9285,0x0000,
-0x9286,0x9287,0x9288,0x9289,0x928a,0x928b,0x928c,0x928d,
-0x928f,0x9290,0x9291,0x9292,0x9293,0x9294,0x9295,0x9296,
-0x9297,0x9298,0x9299,0x929a,0x929b,0x929c,0x929d,0x929e,
-0x929f,0x92a0,0x92a1,0x92a2,0x92a3,0x92a4,0x92a5,0x92a6,
-0x92a7,0x606a,0x607d,0x6096,0x609a,0x60ad,0x609d,0x6083,
-0x6092,0x608c,0x609b,0x60ec,0x60bb,0x60b1,0x60dd,0x60d8,
-0x60c6,0x60da,0x60b4,0x6120,0x6126,0x6115,0x6123,0x60f4,
-0x6100,0x610e,0x612b,0x614a,0x6175,0x61ac,0x6194,0x61a7,
-0x61b7,0x61d4,0x61f5,0x5fdd,0x96b3,0x95e9,0x95eb,0x95f1,
-0x95f3,0x95f5,0x95f6,0x95fc,0x95fe,0x9603,0x9604,0x9606,
-0x9608,0x960a,0x960b,0x960c,0x960d,0x960f,0x9612,0x9615,
-0x9616,0x9617,0x9619,0x961a,0x4e2c,0x723f,0x6215,0x6c35,
-0x6c54,0x6c5c,0x6c4a,0x6ca3,0x6c85,0x6c90,0x6c94,0x6c8c,
-0x6c68,0x6c69,0x6c74,0x6c76,0x6c86,0x6ca9,0x6cd0,0x6cd4,
-0x6cad,0x6cf7,0x6cf8,0x6cf1,0x6cd7,0x6cb2,0x6ce0,0x6cd6,
-0x6cfa,0x6ceb,0x6cee,0x6cb1,0x6cd3,0x6cef,0x6cfe,0x0000,
-/* 0xe400 */
-0x92a8,0x92a9,0x92aa,0x92ab,0x92ac,0x92ad,0x92af,0x92b0,
-0x92b1,0x92b2,0x92b3,0x92b4,0x92b5,0x92b6,0x92b7,0x92b8,
-0x92b9,0x92ba,0x92bb,0x92bc,0x92bd,0x92be,0x92bf,0x92c0,
-0x92c1,0x92c2,0x92c3,0x92c4,0x92c5,0x92c6,0x92c7,0x92c9,
-0x92ca,0x92cb,0x92cc,0x92cd,0x92ce,0x92cf,0x92d0,0x92d1,
-0x92d2,0x92d3,0x92d4,0x92d5,0x92d6,0x92d7,0x92d8,0x92d9,
-0x92da,0x92db,0x92dc,0x92dd,0x92de,0x92df,0x92e0,0x92e1,
-0x92e2,0x92e3,0x92e4,0x92e5,0x92e6,0x92e7,0x92e8,0x0000,
-0x92e9,0x92ea,0x92eb,0x92ec,0x92ed,0x92ee,0x92ef,0x92f0,
-0x92f1,0x92f2,0x92f3,0x92f4,0x92f5,0x92f6,0x92f7,0x92f8,
-0x92f9,0x92fa,0x92fb,0x92fc,0x92fd,0x92fe,0x92ff,0x9300,
-0x9301,0x9302,0x9303,0x9304,0x9305,0x9306,0x9307,0x9308,
-0x9309,0x6d39,0x6d27,0x6d0c,0x6d43,0x6d48,0x6d07,0x6d04,
-0x6d19,0x6d0e,0x6d2b,0x6d4d,0x6d2e,0x6d35,0x6d1a,0x6d4f,
-0x6d52,0x6d54,0x6d33,0x6d91,0x6d6f,0x6d9e,0x6da0,0x6d5e,
-0x6d93,0x6d94,0x6d5c,0x6d60,0x6d7c,0x6d63,0x6e1a,0x6dc7,
-0x6dc5,0x6dde,0x6e0e,0x6dbf,0x6de0,0x6e11,0x6de6,0x6ddd,
-0x6dd9,0x6e16,0x6dab,0x6e0c,0x6dae,0x6e2b,0x6e6e,0x6e4e,
-0x6e6b,0x6eb2,0x6e5f,0x6e86,0x6e53,0x6e54,0x6e32,0x6e25,
-0x6e44,0x6edf,0x6eb1,0x6e98,0x6ee0,0x6f2d,0x6ee2,0x6ea5,
-0x6ea7,0x6ebd,0x6ebb,0x6eb7,0x6ed7,0x6eb4,0x6ecf,0x6e8f,
-0x6ec2,0x6e9f,0x6f62,0x6f46,0x6f47,0x6f24,0x6f15,0x6ef9,
-0x6f2f,0x6f36,0x6f4b,0x6f74,0x6f2a,0x6f09,0x6f29,0x6f89,
-0x6f8d,0x6f8c,0x6f78,0x6f72,0x6f7c,0x6f7a,0x6fd1,0x0000,
-/* 0xe500 */
-0x930a,0x930b,0x930c,0x930d,0x930e,0x930f,0x9310,0x9311,
-0x9312,0x9313,0x9314,0x9315,0x9316,0x9317,0x9318,0x9319,
-0x931a,0x931b,0x931c,0x931d,0x931e,0x931f,0x9320,0x9321,
-0x9322,0x9323,0x9324,0x9325,0x9326,0x9327,0x9328,0x9329,
-0x932a,0x932b,0x932c,0x932d,0x932e,0x932f,0x9330,0x9331,
-0x9332,0x9333,0x9334,0x9335,0x9336,0x9337,0x9338,0x9339,
-0x933a,0x933b,0x933c,0x933d,0x933f,0x9340,0x9341,0x9342,
-0x9343,0x9344,0x9345,0x9346,0x9347,0x9348,0x9349,0x0000,
-0x934a,0x934b,0x934c,0x934d,0x934e,0x934f,0x9350,0x9351,
-0x9352,0x9353,0x9354,0x9355,0x9356,0x9357,0x9358,0x9359,
-0x935a,0x935b,0x935c,0x935d,0x935e,0x935f,0x9360,0x9361,
-0x9362,0x9363,0x9364,0x9365,0x9366,0x9367,0x9368,0x9369,
-0x936b,0x6fc9,0x6fa7,0x6fb9,0x6fb6,0x6fc2,0x6fe1,0x6fee,
-0x6fde,0x6fe0,0x6fef,0x701a,0x7023,0x701b,0x7039,0x7035,
-0x704f,0x705e,0x5b80,0x5b84,0x5b95,0x5b93,0x5ba5,0x5bb8,
-0x752f,0x9a9e,0x6434,0x5be4,0x5bee,0x8930,0x5bf0,0x8e47,
-0x8b07,0x8fb6,0x8fd3,0x8fd5,0x8fe5,0x8fee,0x8fe4,0x8fe9,
-0x8fe6,0x8ff3,0x8fe8,0x9005,0x9004,0x900b,0x9026,0x9011,
-0x900d,0x9016,0x9021,0x9035,0x9036,0x902d,0x902f,0x9044,
-0x9051,0x9052,0x9050,0x9068,0x9058,0x9062,0x905b,0x66b9,
-0x9074,0x907d,0x9082,0x9088,0x9083,0x908b,0x5f50,0x5f57,
-0x5f56,0x5f58,0x5c3b,0x54ab,0x5c50,0x5c59,0x5b71,0x5c63,
-0x5c66,0x7fbc,0x5f2a,0x5f29,0x5f2d,0x8274,0x5f3c,0x9b3b,
-0x5c6e,0x5981,0x5983,0x598d,0x59a9,0x59aa,0x59a3,0x0000,
-/* 0xe600 */
-0x936c,0x936d,0x936e,0x936f,0x9370,0x9371,0x9372,0x9373,
-0x9374,0x9375,0x9376,0x9377,0x9378,0x9379,0x937a,0x937b,
-0x937c,0x937d,0x937e,0x937f,0x9380,0x9381,0x9382,0x9383,
-0x9384,0x9385,0x9386,0x9387,0x9388,0x9389,0x938a,0x938b,
-0x938c,0x938d,0x938e,0x9390,0x9391,0x9392,0x9393,0x9394,
-0x9395,0x9396,0x9397,0x9398,0x9399,0x939a,0x939b,0x939c,
-0x939d,0x939e,0x939f,0x93a0,0x93a1,0x93a2,0x93a3,0x93a4,
-0x93a5,0x93a6,0x93a7,0x93a8,0x93a9,0x93aa,0x93ab,0x0000,
-0x93ac,0x93ad,0x93ae,0x93af,0x93b0,0x93b1,0x93b2,0x93b3,
-0x93b4,0x93b5,0x93b6,0x93b7,0x93b8,0x93b9,0x93ba,0x93bb,
-0x93bc,0x93bd,0x93be,0x93bf,0x93c0,0x93c1,0x93c2,0x93c3,
-0x93c4,0x93c5,0x93c6,0x93c7,0x93c8,0x93c9,0x93cb,0x93cc,
-0x93cd,0x5997,0x59ca,0x59ab,0x599e,0x59a4,0x59d2,0x59b2,
-0x59af,0x59d7,0x59be,0x5a05,0x5a06,0x59dd,0x5a08,0x59e3,
-0x59d8,0x59f9,0x5a0c,0x5a09,0x5a32,0x5a34,0x5a11,0x5a23,
-0x5a13,0x5a40,0x5a67,0x5a4a,0x5a55,0x5a3c,0x5a62,0x5a75,
-0x80ec,0x5aaa,0x5a9b,0x5a77,0x5a7a,0x5abe,0x5aeb,0x5ab2,
-0x5ad2,0x5ad4,0x5ab8,0x5ae0,0x5ae3,0x5af1,0x5ad6,0x5ae6,
-0x5ad8,0x5adc,0x5b09,0x5b17,0x5b16,0x5b32,0x5b37,0x5b40,
-0x5c15,0x5c1c,0x5b5a,0x5b65,0x5b73,0x5b51,0x5b53,0x5b62,
-0x9a75,0x9a77,0x9a78,0x9a7a,0x9a7f,0x9a7d,0x9a80,0x9a81,
-0x9a85,0x9a88,0x9a8a,0x9a90,0x9a92,0x9a93,0x9a96,0x9a98,
-0x9a9b,0x9a9c,0x9a9d,0x9a9f,0x9aa0,0x9aa2,0x9aa3,0x9aa5,
-0x9aa7,0x7e9f,0x7ea1,0x7ea3,0x7ea5,0x7ea8,0x7ea9,0x0000,
-/* 0xe700 */
-0x93ce,0x93cf,0x93d0,0x93d1,0x93d2,0x93d3,0x93d4,0x93d5,
-0x93d7,0x93d8,0x93d9,0x93da,0x93db,0x93dc,0x93dd,0x93de,
-0x93df,0x93e0,0x93e1,0x93e2,0x93e3,0x93e4,0x93e5,0x93e6,
-0x93e7,0x93e8,0x93e9,0x93ea,0x93eb,0x93ec,0x93ed,0x93ee,
-0x93ef,0x93f0,0x93f1,0x93f2,0x93f3,0x93f4,0x93f5,0x93f6,
-0x93f7,0x93f8,0x93f9,0x93fa,0x93fb,0x93fc,0x93fd,0x93fe,
-0x93ff,0x9400,0x9401,0x9402,0x9403,0x9404,0x9405,0x9406,
-0x9407,0x9408,0x9409,0x940a,0x940b,0x940c,0x940d,0x0000,
-0x940e,0x940f,0x9410,0x9411,0x9412,0x9413,0x9414,0x9415,
-0x9416,0x9417,0x9418,0x9419,0x941a,0x941b,0x941c,0x941d,
-0x941e,0x941f,0x9420,0x9421,0x9422,0x9423,0x9424,0x9425,
-0x9426,0x9427,0x9428,0x9429,0x942a,0x942b,0x942c,0x942d,
-0x942e,0x7ead,0x7eb0,0x7ebe,0x7ec0,0x7ec1,0x7ec2,0x7ec9,
-0x7ecb,0x7ecc,0x7ed0,0x7ed4,0x7ed7,0x7edb,0x7ee0,0x7ee1,
-0x7ee8,0x7eeb,0x7eee,0x7eef,0x7ef1,0x7ef2,0x7f0d,0x7ef6,
-0x7efa,0x7efb,0x7efe,0x7f01,0x7f02,0x7f03,0x7f07,0x7f08,
-0x7f0b,0x7f0c,0x7f0f,0x7f11,0x7f12,0x7f17,0x7f19,0x7f1c,
-0x7f1b,0x7f1f,0x7f21,0x7f22,0x7f23,0x7f24,0x7f25,0x7f26,
-0x7f27,0x7f2a,0x7f2b,0x7f2c,0x7f2d,0x7f2f,0x7f30,0x7f31,
-0x7f32,0x7f33,0x7f35,0x5e7a,0x757f,0x5ddb,0x753e,0x9095,
-0x738e,0x7391,0x73ae,0x73a2,0x739f,0x73cf,0x73c2,0x73d1,
-0x73b7,0x73b3,0x73c0,0x73c9,0x73c8,0x73e5,0x73d9,0x987c,
-0x740a,0x73e9,0x73e7,0x73de,0x73ba,0x73f2,0x740f,0x742a,
-0x745b,0x7426,0x7425,0x7428,0x7430,0x742e,0x742c,0x0000,
-/* 0xe800 */
-0x942f,0x9430,0x9431,0x9432,0x9433,0x9434,0x9435,0x9436,
-0x9437,0x9438,0x9439,0x943a,0x943b,0x943c,0x943d,0x943f,
-0x9440,0x9441,0x9442,0x9443,0x9444,0x9445,0x9446,0x9447,
-0x9448,0x9449,0x944a,0x944b,0x944c,0x944d,0x944e,0x944f,
-0x9450,0x9451,0x9452,0x9453,0x9454,0x9455,0x9456,0x9457,
-0x9458,0x9459,0x945a,0x945b,0x945c,0x945d,0x945e,0x945f,
-0x9460,0x9461,0x9462,0x9463,0x9464,0x9465,0x9466,0x9467,
-0x9468,0x9469,0x946a,0x946c,0x946d,0x946e,0x946f,0x0000,
-0x9470,0x9471,0x9472,0x9473,0x9474,0x9475,0x9476,0x9477,
-0x9478,0x9479,0x947a,0x947b,0x947c,0x947d,0x947e,0x947f,
-0x9480,0x9481,0x9482,0x9483,0x9484,0x9491,0x9496,0x9498,
-0x94c7,0x94cf,0x94d3,0x94d4,0x94da,0x94e6,0x94fb,0x951c,
-0x9520,0x741b,0x741a,0x7441,0x745c,0x7457,0x7455,0x7459,
-0x7477,0x746d,0x747e,0x749c,0x748e,0x7480,0x7481,0x7487,
-0x748b,0x749e,0x74a8,0x74a9,0x7490,0x74a7,0x74d2,0x74ba,
-0x97ea,0x97eb,0x97ec,0x674c,0x6753,0x675e,0x6748,0x6769,
-0x67a5,0x6787,0x676a,0x6773,0x6798,0x67a7,0x6775,0x67a8,
-0x679e,0x67ad,0x678b,0x6777,0x677c,0x67f0,0x6809,0x67d8,
-0x680a,0x67e9,0x67b0,0x680c,0x67d9,0x67b5,0x67da,0x67b3,
-0x67dd,0x6800,0x67c3,0x67b8,0x67e2,0x680e,0x67c1,0x67fd,
-0x6832,0x6833,0x6860,0x6861,0x684e,0x6862,0x6844,0x6864,
-0x6883,0x681d,0x6855,0x6866,0x6841,0x6867,0x6840,0x683e,
-0x684a,0x6849,0x6829,0x68b5,0x688f,0x6874,0x6877,0x6893,
-0x686b,0x68c2,0x696e,0x68fc,0x691f,0x6920,0x68f9,0x0000,
-/* 0xe900 */
-0x9527,0x9533,0x953d,0x9543,0x9548,0x954b,0x9555,0x955a,
-0x9560,0x956e,0x9574,0x9575,0x9577,0x9578,0x9579,0x957a,
-0x957b,0x957c,0x957d,0x957e,0x9580,0x9581,0x9582,0x9583,
-0x9584,0x9585,0x9586,0x9587,0x9588,0x9589,0x958a,0x958b,
-0x958c,0x958d,0x958e,0x958f,0x9590,0x9591,0x9592,0x9593,
-0x9594,0x9595,0x9596,0x9597,0x9598,0x9599,0x959a,0x959b,
-0x959c,0x959d,0x959e,0x959f,0x95a0,0x95a1,0x95a2,0x95a3,
-0x95a4,0x95a5,0x95a6,0x95a7,0x95a8,0x95a9,0x95aa,0x0000,
-0x95ab,0x95ac,0x95ad,0x95ae,0x95af,0x95b0,0x95b1,0x95b2,
-0x95b3,0x95b4,0x95b5,0x95b6,0x95b7,0x95b8,0x95b9,0x95ba,
-0x95bb,0x95bc,0x95bd,0x95be,0x95bf,0x95c0,0x95c1,0x95c2,
-0x95c3,0x95c4,0x95c5,0x95c6,0x95c7,0x95c8,0x95c9,0x95ca,
-0x95cb,0x6924,0x68f0,0x690b,0x6901,0x6957,0x68e3,0x6910,
-0x6971,0x6939,0x6960,0x6942,0x695d,0x6984,0x696b,0x6980,
-0x6998,0x6978,0x6934,0x69cc,0x6987,0x6988,0x69ce,0x6989,
-0x6966,0x6963,0x6979,0x699b,0x69a7,0x69bb,0x69ab,0x69ad,
-0x69d4,0x69b1,0x69c1,0x69ca,0x69df,0x6995,0x69e0,0x698d,
-0x69ff,0x6a2f,0x69ed,0x6a17,0x6a18,0x6a65,0x69f2,0x6a44,
-0x6a3e,0x6aa0,0x6a50,0x6a5b,0x6a35,0x6a8e,0x6a79,0x6a3d,
-0x6a28,0x6a58,0x6a7c,0x6a91,0x6a90,0x6aa9,0x6a97,0x6aab,
-0x7337,0x7352,0x6b81,0x6b82,0x6b87,0x6b84,0x6b92,0x6b93,
-0x6b8d,0x6b9a,0x6b9b,0x6ba1,0x6baa,0x8f6b,0x8f6d,0x8f71,
-0x8f72,0x8f73,0x8f75,0x8f76,0x8f78,0x8f77,0x8f79,0x8f7a,
-0x8f7c,0x8f7e,0x8f81,0x8f82,0x8f84,0x8f87,0x8f8b,0x0000,
-/* 0xea00 */
-0x95cc,0x95cd,0x95ce,0x95cf,0x95d0,0x95d1,0x95d2,0x95d3,
-0x95d4,0x95d5,0x95d6,0x95d7,0x95d8,0x95d9,0x95da,0x95db,
-0x95dc,0x95dd,0x95de,0x95df,0x95e0,0x95e1,0x95e2,0x95e3,
-0x95e4,0x95e5,0x95e6,0x95e7,0x95ec,0x95ff,0x9607,0x9613,
-0x9618,0x961b,0x961e,0x9620,0x9623,0x9624,0x9625,0x9626,
-0x9627,0x9628,0x9629,0x962b,0x962c,0x962d,0x962f,0x9630,
-0x9637,0x9638,0x9639,0x963a,0x963e,0x9641,0x9643,0x964a,
-0x964e,0x964f,0x9651,0x9652,0x9653,0x9656,0x9657,0x0000,
-0x9658,0x9659,0x965a,0x965c,0x965d,0x965e,0x9660,0x9663,
-0x9665,0x9666,0x966b,0x966d,0x966e,0x966f,0x9670,0x9671,
-0x9673,0x9678,0x9679,0x967a,0x967b,0x967c,0x967d,0x967e,
-0x967f,0x9680,0x9681,0x9682,0x9683,0x9684,0x9687,0x9689,
-0x968a,0x8f8d,0x8f8e,0x8f8f,0x8f98,0x8f9a,0x8ece,0x620b,
-0x6217,0x621b,0x621f,0x6222,0x6221,0x6225,0x6224,0x622c,
-0x81e7,0x74ef,0x74f4,0x74ff,0x750f,0x7511,0x7513,0x6534,
-0x65ee,0x65ef,0x65f0,0x660a,0x6619,0x6772,0x6603,0x6615,
-0x6600,0x7085,0x66f7,0x661d,0x6634,0x6631,0x6636,0x6635,
-0x8006,0x665f,0x6654,0x6641,0x664f,0x6656,0x6661,0x6657,
-0x6677,0x6684,0x668c,0x66a7,0x669d,0x66be,0x66db,0x66dc,
-0x66e6,0x66e9,0x8d32,0x8d33,0x8d36,0x8d3b,0x8d3d,0x8d40,
-0x8d45,0x8d46,0x8d48,0x8d49,0x8d47,0x8d4d,0x8d55,0x8d59,
-0x89c7,0x89ca,0x89cb,0x89cc,0x89ce,0x89cf,0x89d0,0x89d1,
-0x726e,0x729f,0x725d,0x7266,0x726f,0x727e,0x727f,0x7284,
-0x728b,0x728d,0x728f,0x7292,0x6308,0x6332,0x63b0,0x0000,
-/* 0xeb00 */
-0x968c,0x968e,0x9691,0x9692,0x9693,0x9695,0x9696,0x969a,
-0x969b,0x969d,0x969e,0x969f,0x96a0,0x96a1,0x96a2,0x96a3,
-0x96a4,0x96a5,0x96a6,0x96a8,0x96a9,0x96aa,0x96ab,0x96ac,
-0x96ad,0x96ae,0x96af,0x96b1,0x96b2,0x96b4,0x96b5,0x96b7,
-0x96b8,0x96ba,0x96bb,0x96bf,0x96c2,0x96c3,0x96c8,0x96ca,
-0x96cb,0x96d0,0x96d1,0x96d3,0x96d4,0x96d6,0x96d7,0x96d8,
-0x96d9,0x96da,0x96db,0x96dc,0x96dd,0x96de,0x96df,0x96e1,
-0x96e2,0x96e3,0x96e4,0x96e5,0x96e6,0x96e7,0x96eb,0x0000,
-0x96ec,0x96ed,0x96ee,0x96f0,0x96f1,0x96f2,0x96f4,0x96f5,
-0x96f8,0x96fa,0x96fb,0x96fc,0x96fd,0x96ff,0x9702,0x9703,
-0x9705,0x970a,0x970b,0x970c,0x9710,0x9711,0x9712,0x9714,
-0x9715,0x9717,0x9718,0x9719,0x971a,0x971b,0x971d,0x971f,
-0x9720,0x643f,0x64d8,0x8004,0x6bea,0x6bf3,0x6bfd,0x6bf5,
-0x6bf9,0x6c05,0x6c07,0x6c06,0x6c0d,0x6c15,0x6c18,0x6c19,
-0x6c1a,0x6c21,0x6c29,0x6c24,0x6c2a,0x6c32,0x6535,0x6555,
-0x656b,0x724d,0x7252,0x7256,0x7230,0x8662,0x5216,0x809f,
-0x809c,0x8093,0x80bc,0x670a,0x80bd,0x80b1,0x80ab,0x80ad,
-0x80b4,0x80b7,0x80e7,0x80e8,0x80e9,0x80ea,0x80db,0x80c2,
-0x80c4,0x80d9,0x80cd,0x80d7,0x6710,0x80dd,0x80eb,0x80f1,
-0x80f4,0x80ed,0x810d,0x810e,0x80f2,0x80fc,0x6715,0x8112,
-0x8c5a,0x8136,0x811e,0x812c,0x8118,0x8132,0x8148,0x814c,
-0x8153,0x8174,0x8159,0x815a,0x8171,0x8160,0x8169,0x817c,
-0x817d,0x816d,0x8167,0x584d,0x5ab5,0x8188,0x8182,0x8191,
-0x6ed5,0x81a3,0x81aa,0x81cc,0x6726,0x81ca,0x81bb,0x0000,
-/* 0xec00 */
-0x9721,0x9722,0x9723,0x9724,0x9725,0x9726,0x9727,0x9728,
-0x9729,0x972b,0x972c,0x972e,0x972f,0x9731,0x9733,0x9734,
-0x9735,0x9736,0x9737,0x973a,0x973b,0x973c,0x973d,0x973f,
-0x9740,0x9741,0x9742,0x9743,0x9744,0x9745,0x9746,0x9747,
-0x9748,0x9749,0x974a,0x974b,0x974c,0x974d,0x974e,0x974f,
-0x9750,0x9751,0x9754,0x9755,0x9757,0x9758,0x975a,0x975c,
-0x975d,0x975f,0x9763,0x9764,0x9766,0x9767,0x9768,0x976a,
-0x976b,0x976c,0x976d,0x976e,0x976f,0x9770,0x9771,0x0000,
-0x9772,0x9775,0x9777,0x9778,0x9779,0x977a,0x977b,0x977d,
-0x977e,0x977f,0x9780,0x9781,0x9782,0x9783,0x9784,0x9786,
-0x9787,0x9788,0x9789,0x978a,0x978c,0x978e,0x978f,0x9790,
-0x9793,0x9795,0x9796,0x9797,0x9799,0x979a,0x979b,0x979c,
-0x979d,0x81c1,0x81a6,0x6b24,0x6b37,0x6b39,0x6b43,0x6b46,
-0x6b59,0x98d1,0x98d2,0x98d3,0x98d5,0x98d9,0x98da,0x6bb3,
-0x5f40,0x6bc2,0x89f3,0x6590,0x9f51,0x6593,0x65bc,0x65c6,
-0x65c4,0x65c3,0x65cc,0x65ce,0x65d2,0x65d6,0x7080,0x709c,
-0x7096,0x709d,0x70bb,0x70c0,0x70b7,0x70ab,0x70b1,0x70e8,
-0x70ca,0x7110,0x7113,0x7116,0x712f,0x7131,0x7173,0x715c,
-0x7168,0x7145,0x7172,0x714a,0x7178,0x717a,0x7198,0x71b3,
-0x71b5,0x71a8,0x71a0,0x71e0,0x71d4,0x71e7,0x71f9,0x721d,
-0x7228,0x706c,0x7118,0x7166,0x71b9,0x623e,0x623d,0x6243,
-0x6248,0x6249,0x793b,0x7940,0x7946,0x7949,0x795b,0x795c,
-0x7953,0x795a,0x7962,0x7957,0x7960,0x796f,0x7967,0x797a,
-0x7985,0x798a,0x799a,0x79a7,0x79b3,0x5fd1,0x5fd0,0x0000,
-/* 0xed00 */
-0x979e,0x979f,0x97a1,0x97a2,0x97a4,0x97a5,0x97a6,0x97a7,
-0x97a8,0x97a9,0x97aa,0x97ac,0x97ae,0x97b0,0x97b1,0x97b3,
-0x97b5,0x97b6,0x97b7,0x97b8,0x97b9,0x97ba,0x97bb,0x97bc,
-0x97bd,0x97be,0x97bf,0x97c0,0x97c1,0x97c2,0x97c3,0x97c4,
-0x97c5,0x97c6,0x97c7,0x97c8,0x97c9,0x97ca,0x97cb,0x97cc,
-0x97cd,0x97ce,0x97cf,0x97d0,0x97d1,0x97d2,0x97d3,0x97d4,
-0x97d5,0x97d6,0x97d7,0x97d8,0x97d9,0x97da,0x97db,0x97dc,
-0x97dd,0x97de,0x97df,0x97e0,0x97e1,0x97e2,0x97e3,0x0000,
-0x97e4,0x97e5,0x97e8,0x97ee,0x97ef,0x97f0,0x97f1,0x97f2,
-0x97f4,0x97f7,0x97f8,0x97f9,0x97fa,0x97fb,0x97fc,0x97fd,
-0x97fe,0x97ff,0x9800,0x9801,0x9802,0x9803,0x9804,0x9805,
-0x9806,0x9807,0x9808,0x9809,0x980a,0x980b,0x980c,0x980d,
-0x980e,0x603c,0x605d,0x605a,0x6067,0x6041,0x6059,0x6063,
-0x60ab,0x6106,0x610d,0x615d,0x61a9,0x619d,0x61cb,0x61d1,
-0x6206,0x8080,0x807f,0x6c93,0x6cf6,0x6dfc,0x77f6,0x77f8,
-0x7800,0x7809,0x7817,0x7818,0x7811,0x65ab,0x782d,0x781c,
-0x781d,0x7839,0x783a,0x783b,0x781f,0x783c,0x7825,0x782c,
-0x7823,0x7829,0x784e,0x786d,0x7856,0x7857,0x7826,0x7850,
-0x7847,0x784c,0x786a,0x789b,0x7893,0x789a,0x7887,0x789c,
-0x78a1,0x78a3,0x78b2,0x78b9,0x78a5,0x78d4,0x78d9,0x78c9,
-0x78ec,0x78f2,0x7905,0x78f4,0x7913,0x7924,0x791e,0x7934,
-0x9f9b,0x9ef9,0x9efb,0x9efc,0x76f1,0x7704,0x770d,0x76f9,
-0x7707,0x7708,0x771a,0x7722,0x7719,0x772d,0x7726,0x7735,
-0x7738,0x7750,0x7751,0x7747,0x7743,0x775a,0x7768,0x0000,
-/* 0xee00 */
-0x980f,0x9810,0x9811,0x9812,0x9813,0x9814,0x9815,0x9816,
-0x9817,0x9818,0x9819,0x981a,0x981b,0x981c,0x981d,0x981e,
-0x981f,0x9820,0x9821,0x9822,0x9823,0x9824,0x9825,0x9826,
-0x9827,0x9828,0x9829,0x982a,0x982b,0x982c,0x982d,0x982e,
-0x982f,0x9830,0x9831,0x9832,0x9833,0x9834,0x9835,0x9836,
-0x9837,0x9838,0x9839,0x983a,0x983b,0x983c,0x983d,0x983e,
-0x983f,0x9840,0x9841,0x9842,0x9843,0x9844,0x9845,0x9846,
-0x9847,0x9848,0x9849,0x984a,0x984b,0x984c,0x984d,0x0000,
-0x984e,0x984f,0x9850,0x9851,0x9852,0x9853,0x9854,0x9855,
-0x9856,0x9857,0x9858,0x9859,0x985a,0x985b,0x985c,0x985d,
-0x985e,0x985f,0x9860,0x9861,0x9862,0x9863,0x9864,0x9865,
-0x9866,0x9867,0x9868,0x9869,0x986a,0x986b,0x986c,0x986d,
-0x986e,0x7762,0x7765,0x777f,0x778d,0x777d,0x7780,0x778c,
-0x7791,0x779f,0x77a0,0x77b0,0x77b5,0x77bd,0x753a,0x7540,
-0x754e,0x754b,0x7548,0x755b,0x7572,0x7579,0x7583,0x7f58,
-0x7f61,0x7f5f,0x8a48,0x7f68,0x7f74,0x7f71,0x7f79,0x7f81,
-0x7f7e,0x76cd,0x76e5,0x8832,0x9485,0x9486,0x9487,0x948b,
-0x948a,0x948c,0x948d,0x948f,0x9490,0x9494,0x9497,0x9495,
-0x949a,0x949b,0x949c,0x94a3,0x94a4,0x94ab,0x94aa,0x94ad,
-0x94ac,0x94af,0x94b0,0x94b2,0x94b4,0x94b6,0x94b7,0x94b8,
-0x94b9,0x94ba,0x94bc,0x94bd,0x94bf,0x94c4,0x94c8,0x94c9,
-0x94ca,0x94cb,0x94cc,0x94cd,0x94ce,0x94d0,0x94d1,0x94d2,
-0x94d5,0x94d6,0x94d7,0x94d9,0x94d8,0x94db,0x94de,0x94df,
-0x94e0,0x94e2,0x94e4,0x94e5,0x94e7,0x94e8,0x94ea,0x0000,
-/* 0xef00 */
-0x986f,0x9870,0x9871,0x9872,0x9873,0x9874,0x988b,0x988e,
-0x9892,0x9895,0x9899,0x98a3,0x98a8,0x98a9,0x98aa,0x98ab,
-0x98ac,0x98ad,0x98ae,0x98af,0x98b0,0x98b1,0x98b2,0x98b3,
-0x98b4,0x98b5,0x98b6,0x98b7,0x98b8,0x98b9,0x98ba,0x98bb,
-0x98bc,0x98bd,0x98be,0x98bf,0x98c0,0x98c1,0x98c2,0x98c3,
-0x98c4,0x98c5,0x98c6,0x98c7,0x98c8,0x98c9,0x98ca,0x98cb,
-0x98cc,0x98cd,0x98cf,0x98d0,0x98d4,0x98d6,0x98d7,0x98db,
-0x98dc,0x98dd,0x98e0,0x98e1,0x98e2,0x98e3,0x98e4,0x0000,
-0x98e5,0x98e6,0x98e9,0x98ea,0x98eb,0x98ec,0x98ed,0x98ee,
-0x98ef,0x98f0,0x98f1,0x98f2,0x98f3,0x98f4,0x98f5,0x98f6,
-0x98f7,0x98f8,0x98f9,0x98fa,0x98fb,0x98fc,0x98fd,0x98fe,
-0x98ff,0x9900,0x9901,0x9902,0x9903,0x9904,0x9905,0x9906,
-0x9907,0x94e9,0x94eb,0x94ee,0x94ef,0x94f3,0x94f4,0x94f5,
-0x94f7,0x94f9,0x94fc,0x94fd,0x94ff,0x9503,0x9502,0x9506,
-0x9507,0x9509,0x950a,0x950d,0x950e,0x950f,0x9512,0x9513,
-0x9514,0x9515,0x9516,0x9518,0x951b,0x951d,0x951e,0x951f,
-0x9522,0x952a,0x952b,0x9529,0x952c,0x9531,0x9532,0x9534,
-0x9536,0x9537,0x9538,0x953c,0x953e,0x953f,0x9542,0x9535,
-0x9544,0x9545,0x9546,0x9549,0x954c,0x954e,0x954f,0x9552,
-0x9553,0x9554,0x9556,0x9557,0x9558,0x9559,0x955b,0x955e,
-0x955f,0x955d,0x9561,0x9562,0x9564,0x9565,0x9566,0x9567,
-0x9568,0x9569,0x956a,0x956b,0x956c,0x956f,0x9571,0x9572,
-0x9573,0x953a,0x77e7,0x77ec,0x96c9,0x79d5,0x79ed,0x79e3,
-0x79eb,0x7a06,0x5d47,0x7a03,0x7a02,0x7a1e,0x7a14,0x0000,
-/* 0xf000 */
-0x9908,0x9909,0x990a,0x990b,0x990c,0x990e,0x990f,0x9911,
-0x9912,0x9913,0x9914,0x9915,0x9916,0x9917,0x9918,0x9919,
-0x991a,0x991b,0x991c,0x991d,0x991e,0x991f,0x9920,0x9921,
-0x9922,0x9923,0x9924,0x9925,0x9926,0x9927,0x9928,0x9929,
-0x992a,0x992b,0x992c,0x992d,0x992f,0x9930,0x9931,0x9932,
-0x9933,0x9934,0x9935,0x9936,0x9937,0x9938,0x9939,0x993a,
-0x993b,0x993c,0x993d,0x993e,0x993f,0x9940,0x9941,0x9942,
-0x9943,0x9944,0x9945,0x9946,0x9947,0x9948,0x9949,0x0000,
-0x994a,0x994b,0x994c,0x994d,0x994e,0x994f,0x9950,0x9951,
-0x9952,0x9953,0x9956,0x9957,0x9958,0x9959,0x995a,0x995b,
-0x995c,0x995d,0x995e,0x995f,0x9960,0x9961,0x9962,0x9964,
-0x9966,0x9973,0x9978,0x9979,0x997b,0x997e,0x9982,0x9983,
-0x9989,0x7a39,0x7a37,0x7a51,0x9ecf,0x99a5,0x7a70,0x7688,
-0x768e,0x7693,0x7699,0x76a4,0x74de,0x74e0,0x752c,0x9e20,
-0x9e22,0x9e28,0x9e29,0x9e2a,0x9e2b,0x9e2c,0x9e32,0x9e31,
-0x9e36,0x9e38,0x9e37,0x9e39,0x9e3a,0x9e3e,0x9e41,0x9e42,
-0x9e44,0x9e46,0x9e47,0x9e48,0x9e49,0x9e4b,0x9e4c,0x9e4e,
-0x9e51,0x9e55,0x9e57,0x9e5a,0x9e5b,0x9e5c,0x9e5e,0x9e63,
-0x9e66,0x9e67,0x9e68,0x9e69,0x9e6a,0x9e6b,0x9e6c,0x9e71,
-0x9e6d,0x9e73,0x7592,0x7594,0x7596,0x75a0,0x759d,0x75ac,
-0x75a3,0x75b3,0x75b4,0x75b8,0x75c4,0x75b1,0x75b0,0x75c3,
-0x75c2,0x75d6,0x75cd,0x75e3,0x75e8,0x75e6,0x75e4,0x75eb,
-0x75e7,0x7603,0x75f1,0x75fc,0x75ff,0x7610,0x7600,0x7605,
-0x760c,0x7617,0x760a,0x7625,0x7618,0x7615,0x7619,0x0000,
-/* 0xf100 */
-0x998c,0x998e,0x999a,0x999b,0x999c,0x999d,0x999e,0x999f,
-0x99a0,0x99a1,0x99a2,0x99a3,0x99a4,0x99a6,0x99a7,0x99a9,
-0x99aa,0x99ab,0x99ac,0x99ad,0x99ae,0x99af,0x99b0,0x99b1,
-0x99b2,0x99b3,0x99b4,0x99b5,0x99b6,0x99b7,0x99b8,0x99b9,
-0x99ba,0x99bb,0x99bc,0x99bd,0x99be,0x99bf,0x99c0,0x99c1,
-0x99c2,0x99c3,0x99c4,0x99c5,0x99c6,0x99c7,0x99c8,0x99c9,
-0x99ca,0x99cb,0x99cc,0x99cd,0x99ce,0x99cf,0x99d0,0x99d1,
-0x99d2,0x99d3,0x99d4,0x99d5,0x99d6,0x99d7,0x99d8,0x0000,
-0x99d9,0x99da,0x99db,0x99dc,0x99dd,0x99de,0x99df,0x99e0,
-0x99e1,0x99e2,0x99e3,0x99e4,0x99e5,0x99e6,0x99e7,0x99e8,
-0x99e9,0x99ea,0x99eb,0x99ec,0x99ed,0x99ee,0x99ef,0x99f0,
-0x99f1,0x99f2,0x99f3,0x99f4,0x99f5,0x99f6,0x99f7,0x99f8,
-0x99f9,0x761b,0x763c,0x7622,0x7620,0x7640,0x762d,0x7630,
-0x763f,0x7635,0x7643,0x763e,0x7633,0x764d,0x765e,0x7654,
-0x765c,0x7656,0x766b,0x766f,0x7fca,0x7ae6,0x7a78,0x7a79,
-0x7a80,0x7a86,0x7a88,0x7a95,0x7aa6,0x7aa0,0x7aac,0x7aa8,
-0x7aad,0x7ab3,0x8864,0x8869,0x8872,0x887d,0x887f,0x8882,
-0x88a2,0x88c6,0x88b7,0x88bc,0x88c9,0x88e2,0x88ce,0x88e3,
-0x88e5,0x88f1,0x891a,0x88fc,0x88e8,0x88fe,0x88f0,0x8921,
-0x8919,0x8913,0x891b,0x890a,0x8934,0x892b,0x8936,0x8941,
-0x8966,0x897b,0x758b,0x80e5,0x76b2,0x76b4,0x77dc,0x8012,
-0x8014,0x8016,0x801c,0x8020,0x8022,0x8025,0x8026,0x8027,
-0x8029,0x8028,0x8031,0x800b,0x8035,0x8043,0x8046,0x804d,
-0x8052,0x8069,0x8071,0x8983,0x9878,0x9880,0x9883,0x0000,
-/* 0xf200 */
-0x99fa,0x99fb,0x99fc,0x99fd,0x99fe,0x99ff,0x9a00,0x9a01,
-0x9a02,0x9a03,0x9a04,0x9a05,0x9a06,0x9a07,0x9a08,0x9a09,
-0x9a0a,0x9a0b,0x9a0c,0x9a0d,0x9a0e,0x9a0f,0x9a10,0x9a11,
-0x9a12,0x9a13,0x9a14,0x9a15,0x9a16,0x9a17,0x9a18,0x9a19,
-0x9a1a,0x9a1b,0x9a1c,0x9a1d,0x9a1e,0x9a1f,0x9a20,0x9a21,
-0x9a22,0x9a23,0x9a24,0x9a25,0x9a26,0x9a27,0x9a28,0x9a29,
-0x9a2a,0x9a2b,0x9a2c,0x9a2d,0x9a2e,0x9a2f,0x9a30,0x9a31,
-0x9a32,0x9a33,0x9a34,0x9a35,0x9a36,0x9a37,0x9a38,0x0000,
-0x9a39,0x9a3a,0x9a3b,0x9a3c,0x9a3d,0x9a3e,0x9a3f,0x9a40,
-0x9a41,0x9a42,0x9a43,0x9a44,0x9a45,0x9a46,0x9a47,0x9a48,
-0x9a49,0x9a4a,0x9a4b,0x9a4c,0x9a4d,0x9a4e,0x9a4f,0x9a50,
-0x9a51,0x9a52,0x9a53,0x9a54,0x9a55,0x9a56,0x9a57,0x9a58,
-0x9a59,0x9889,0x988c,0x988d,0x988f,0x9894,0x989a,0x989b,
-0x989e,0x989f,0x98a1,0x98a2,0x98a5,0x98a6,0x864d,0x8654,
-0x866c,0x866e,0x867f,0x867a,0x867c,0x867b,0x86a8,0x868d,
-0x868b,0x86ac,0x869d,0x86a7,0x86a3,0x86aa,0x8693,0x86a9,
-0x86b6,0x86c4,0x86b5,0x86ce,0x86b0,0x86ba,0x86b1,0x86af,
-0x86c9,0x86cf,0x86b4,0x86e9,0x86f1,0x86f2,0x86ed,0x86f3,
-0x86d0,0x8713,0x86de,0x86f4,0x86df,0x86d8,0x86d1,0x8703,
-0x8707,0x86f8,0x8708,0x870a,0x870d,0x8709,0x8723,0x873b,
-0x871e,0x8725,0x872e,0x871a,0x873e,0x8748,0x8734,0x8731,
-0x8729,0x8737,0x873f,0x8782,0x8722,0x877d,0x877e,0x877b,
-0x8760,0x8770,0x874c,0x876e,0x878b,0x8753,0x8763,0x877c,
-0x8764,0x8759,0x8765,0x8793,0x87af,0x87a8,0x87d2,0x0000,
-/* 0xf300 */
-0x9a5a,0x9a5b,0x9a5c,0x9a5d,0x9a5e,0x9a5f,0x9a60,0x9a61,
-0x9a62,0x9a63,0x9a64,0x9a65,0x9a66,0x9a67,0x9a68,0x9a69,
-0x9a6a,0x9a6b,0x9a72,0x9a83,0x9a89,0x9a8d,0x9a8e,0x9a94,
-0x9a95,0x9a99,0x9aa6,0x9aa9,0x9aaa,0x9aab,0x9aac,0x9aad,
-0x9aae,0x9aaf,0x9ab2,0x9ab3,0x9ab4,0x9ab5,0x9ab9,0x9abb,
-0x9abd,0x9abe,0x9abf,0x9ac3,0x9ac4,0x9ac6,0x9ac7,0x9ac8,
-0x9ac9,0x9aca,0x9acd,0x9ace,0x9acf,0x9ad0,0x9ad2,0x9ad4,
-0x9ad5,0x9ad6,0x9ad7,0x9ad9,0x9ada,0x9adb,0x9adc,0x0000,
-0x9add,0x9ade,0x9ae0,0x9ae2,0x9ae3,0x9ae4,0x9ae5,0x9ae7,
-0x9ae8,0x9ae9,0x9aea,0x9aec,0x9aee,0x9af0,0x9af1,0x9af2,
-0x9af3,0x9af4,0x9af5,0x9af6,0x9af7,0x9af8,0x9afa,0x9afc,
-0x9afd,0x9afe,0x9aff,0x9b00,0x9b01,0x9b02,0x9b04,0x9b05,
-0x9b06,0x87c6,0x8788,0x8785,0x87ad,0x8797,0x8783,0x87ab,
-0x87e5,0x87ac,0x87b5,0x87b3,0x87cb,0x87d3,0x87bd,0x87d1,
-0x87c0,0x87ca,0x87db,0x87ea,0x87e0,0x87ee,0x8816,0x8813,
-0x87fe,0x880a,0x881b,0x8821,0x8839,0x883c,0x7f36,0x7f42,
-0x7f44,0x7f45,0x8210,0x7afa,0x7afd,0x7b08,0x7b03,0x7b04,
-0x7b15,0x7b0a,0x7b2b,0x7b0f,0x7b47,0x7b38,0x7b2a,0x7b19,
-0x7b2e,0x7b31,0x7b20,0x7b25,0x7b24,0x7b33,0x7b3e,0x7b1e,
-0x7b58,0x7b5a,0x7b45,0x7b75,0x7b4c,0x7b5d,0x7b60,0x7b6e,
-0x7b7b,0x7b62,0x7b72,0x7b71,0x7b90,0x7ba6,0x7ba7,0x7bb8,
-0x7bac,0x7b9d,0x7ba8,0x7b85,0x7baa,0x7b9c,0x7ba2,0x7bab,
-0x7bb4,0x7bd1,0x7bc1,0x7bcc,0x7bdd,0x7bda,0x7be5,0x7be6,
-0x7bea,0x7c0c,0x7bfe,0x7bfc,0x7c0f,0x7c16,0x7c0b,0x0000,
-/* 0xf400 */
-0x9b07,0x9b09,0x9b0a,0x9b0b,0x9b0c,0x9b0d,0x9b0e,0x9b10,
-0x9b11,0x9b12,0x9b14,0x9b15,0x9b16,0x9b17,0x9b18,0x9b19,
-0x9b1a,0x9b1b,0x9b1c,0x9b1d,0x9b1e,0x9b20,0x9b21,0x9b22,
-0x9b24,0x9b25,0x9b26,0x9b27,0x9b28,0x9b29,0x9b2a,0x9b2b,
-0x9b2c,0x9b2d,0x9b2e,0x9b30,0x9b31,0x9b33,0x9b34,0x9b35,
-0x9b36,0x9b37,0x9b38,0x9b39,0x9b3a,0x9b3d,0x9b3e,0x9b3f,
-0x9b40,0x9b46,0x9b4a,0x9b4b,0x9b4c,0x9b4e,0x9b50,0x9b52,
-0x9b53,0x9b55,0x9b56,0x9b57,0x9b58,0x9b59,0x9b5a,0x0000,
-0x9b5b,0x9b5c,0x9b5d,0x9b5e,0x9b5f,0x9b60,0x9b61,0x9b62,
-0x9b63,0x9b64,0x9b65,0x9b66,0x9b67,0x9b68,0x9b69,0x9b6a,
-0x9b6b,0x9b6c,0x9b6d,0x9b6e,0x9b6f,0x9b70,0x9b71,0x9b72,
-0x9b73,0x9b74,0x9b75,0x9b76,0x9b77,0x9b78,0x9b79,0x9b7a,
-0x9b7b,0x7c1f,0x7c2a,0x7c26,0x7c38,0x7c41,0x7c40,0x81fe,
-0x8201,0x8202,0x8204,0x81ec,0x8844,0x8221,0x8222,0x8223,
-0x822d,0x822f,0x8228,0x822b,0x8238,0x823b,0x8233,0x8234,
-0x823e,0x8244,0x8249,0x824b,0x824f,0x825a,0x825f,0x8268,
-0x887e,0x8885,0x8888,0x88d8,0x88df,0x895e,0x7f9d,0x7f9f,
-0x7fa7,0x7faf,0x7fb0,0x7fb2,0x7c7c,0x6549,0x7c91,0x7c9d,
-0x7c9c,0x7c9e,0x7ca2,0x7cb2,0x7cbc,0x7cbd,0x7cc1,0x7cc7,
-0x7ccc,0x7ccd,0x7cc8,0x7cc5,0x7cd7,0x7ce8,0x826e,0x66a8,
-0x7fbf,0x7fce,0x7fd5,0x7fe5,0x7fe1,0x7fe6,0x7fe9,0x7fee,
-0x7ff3,0x7cf8,0x7d77,0x7da6,0x7dae,0x7e47,0x7e9b,0x9eb8,
-0x9eb4,0x8d73,0x8d84,0x8d94,0x8d91,0x8db1,0x8d67,0x8d6d,
-0x8c47,0x8c49,0x914a,0x9150,0x914e,0x914f,0x9164,0x0000,
-/* 0xf500 */
-0x9b7c,0x9b7d,0x9b7e,0x9b7f,0x9b80,0x9b81,0x9b82,0x9b83,
-0x9b84,0x9b85,0x9b86,0x9b87,0x9b88,0x9b89,0x9b8a,0x9b8b,
-0x9b8c,0x9b8d,0x9b8e,0x9b8f,0x9b90,0x9b91,0x9b92,0x9b93,
-0x9b94,0x9b95,0x9b96,0x9b97,0x9b98,0x9b99,0x9b9a,0x9b9b,
-0x9b9c,0x9b9d,0x9b9e,0x9b9f,0x9ba0,0x9ba1,0x9ba2,0x9ba3,
-0x9ba4,0x9ba5,0x9ba6,0x9ba7,0x9ba8,0x9ba9,0x9baa,0x9bab,
-0x9bac,0x9bad,0x9bae,0x9baf,0x9bb0,0x9bb1,0x9bb2,0x9bb3,
-0x9bb4,0x9bb5,0x9bb6,0x9bb7,0x9bb8,0x9bb9,0x9bba,0x0000,
-0x9bbb,0x9bbc,0x9bbd,0x9bbe,0x9bbf,0x9bc0,0x9bc1,0x9bc2,
-0x9bc3,0x9bc4,0x9bc5,0x9bc6,0x9bc7,0x9bc8,0x9bc9,0x9bca,
-0x9bcb,0x9bcc,0x9bcd,0x9bce,0x9bcf,0x9bd0,0x9bd1,0x9bd2,
-0x9bd3,0x9bd4,0x9bd5,0x9bd6,0x9bd7,0x9bd8,0x9bd9,0x9bda,
-0x9bdb,0x9162,0x9161,0x9170,0x9169,0x916f,0x917d,0x917e,
-0x9172,0x9174,0x9179,0x918c,0x9185,0x9190,0x918d,0x9191,
-0x91a2,0x91a3,0x91aa,0x91ad,0x91ae,0x91af,0x91b5,0x91b4,
-0x91ba,0x8c55,0x9e7e,0x8db8,0x8deb,0x8e05,0x8e59,0x8e69,
-0x8db5,0x8dbf,0x8dbc,0x8dba,0x8dc4,0x8dd6,0x8dd7,0x8dda,
-0x8dde,0x8dce,0x8dcf,0x8ddb,0x8dc6,0x8dec,0x8df7,0x8df8,
-0x8de3,0x8df9,0x8dfb,0x8de4,0x8e09,0x8dfd,0x8e14,0x8e1d,
-0x8e1f,0x8e2c,0x8e2e,0x8e23,0x8e2f,0x8e3a,0x8e40,0x8e39,
-0x8e35,0x8e3d,0x8e31,0x8e49,0x8e41,0x8e42,0x8e51,0x8e52,
-0x8e4a,0x8e70,0x8e76,0x8e7c,0x8e6f,0x8e74,0x8e85,0x8e8f,
-0x8e94,0x8e90,0x8e9c,0x8e9e,0x8c78,0x8c82,0x8c8a,0x8c85,
-0x8c98,0x8c94,0x659b,0x89d6,0x89de,0x89da,0x89dc,0x0000,
-/* 0xf600 */
-0x9bdc,0x9bdd,0x9bde,0x9bdf,0x9be0,0x9be1,0x9be2,0x9be3,
-0x9be4,0x9be5,0x9be6,0x9be7,0x9be8,0x9be9,0x9bea,0x9beb,
-0x9bec,0x9bed,0x9bee,0x9bef,0x9bf0,0x9bf1,0x9bf2,0x9bf3,
-0x9bf4,0x9bf5,0x9bf6,0x9bf7,0x9bf8,0x9bf9,0x9bfa,0x9bfb,
-0x9bfc,0x9bfd,0x9bfe,0x9bff,0x9c00,0x9c01,0x9c02,0x9c03,
-0x9c04,0x9c05,0x9c06,0x9c07,0x9c08,0x9c09,0x9c0a,0x9c0b,
-0x9c0c,0x9c0d,0x9c0e,0x9c0f,0x9c10,0x9c11,0x9c12,0x9c13,
-0x9c14,0x9c15,0x9c16,0x9c17,0x9c18,0x9c19,0x9c1a,0x0000,
-0x9c1b,0x9c1c,0x9c1d,0x9c1e,0x9c1f,0x9c20,0x9c21,0x9c22,
-0x9c23,0x9c24,0x9c25,0x9c26,0x9c27,0x9c28,0x9c29,0x9c2a,
-0x9c2b,0x9c2c,0x9c2d,0x9c2e,0x9c2f,0x9c30,0x9c31,0x9c32,
-0x9c33,0x9c34,0x9c35,0x9c36,0x9c37,0x9c38,0x9c39,0x9c3a,
-0x9c3b,0x89e5,0x89eb,0x89ef,0x8a3e,0x8b26,0x9753,0x96e9,
-0x96f3,0x96ef,0x9706,0x9701,0x9708,0x970f,0x970e,0x972a,
-0x972d,0x9730,0x973e,0x9f80,0x9f83,0x9f85,0x9f86,0x9f87,
-0x9f88,0x9f89,0x9f8a,0x9f8c,0x9efe,0x9f0b,0x9f0d,0x96b9,
-0x96bc,0x96bd,0x96ce,0x96d2,0x77bf,0x96e0,0x928e,0x92ae,
-0x92c8,0x933e,0x936a,0x93ca,0x938f,0x943e,0x946b,0x9c7f,
-0x9c82,0x9c85,0x9c86,0x9c87,0x9c88,0x7a23,0x9c8b,0x9c8e,
-0x9c90,0x9c91,0x9c92,0x9c94,0x9c95,0x9c9a,0x9c9b,0x9c9e,
-0x9c9f,0x9ca0,0x9ca1,0x9ca2,0x9ca3,0x9ca5,0x9ca6,0x9ca7,
-0x9ca8,0x9ca9,0x9cab,0x9cad,0x9cae,0x9cb0,0x9cb1,0x9cb2,
-0x9cb3,0x9cb4,0x9cb5,0x9cb6,0x9cb7,0x9cba,0x9cbb,0x9cbc,
-0x9cbd,0x9cc4,0x9cc5,0x9cc6,0x9cc7,0x9cca,0x9ccb,0x0000,
-/* 0xf700 */
-0x9c3c,0x9c3d,0x9c3e,0x9c3f,0x9c40,0x9c41,0x9c42,0x9c43,
-0x9c44,0x9c45,0x9c46,0x9c47,0x9c48,0x9c49,0x9c4a,0x9c4b,
-0x9c4c,0x9c4d,0x9c4e,0x9c4f,0x9c50,0x9c51,0x9c52,0x9c53,
-0x9c54,0x9c55,0x9c56,0x9c57,0x9c58,0x9c59,0x9c5a,0x9c5b,
-0x9c5c,0x9c5d,0x9c5e,0x9c5f,0x9c60,0x9c61,0x9c62,0x9c63,
-0x9c64,0x9c65,0x9c66,0x9c67,0x9c68,0x9c69,0x9c6a,0x9c6b,
-0x9c6c,0x9c6d,0x9c6e,0x9c6f,0x9c70,0x9c71,0x9c72,0x9c73,
-0x9c74,0x9c75,0x9c76,0x9c77,0x9c78,0x9c79,0x9c7a,0x0000,
-0x9c7b,0x9c7d,0x9c7e,0x9c80,0x9c83,0x9c84,0x9c89,0x9c8a,
-0x9c8c,0x9c8f,0x9c93,0x9c96,0x9c97,0x9c98,0x9c99,0x9c9d,
-0x9caa,0x9cac,0x9caf,0x9cb9,0x9cbe,0x9cbf,0x9cc0,0x9cc1,
-0x9cc2,0x9cc8,0x9cc9,0x9cd1,0x9cd2,0x9cda,0x9cdb,0x9ce0,
-0x9ce1,0x9ccc,0x9ccd,0x9cce,0x9ccf,0x9cd0,0x9cd3,0x9cd4,
-0x9cd5,0x9cd7,0x9cd8,0x9cd9,0x9cdc,0x9cdd,0x9cdf,0x9ce2,
-0x977c,0x9785,0x9791,0x9792,0x9794,0x97af,0x97ab,0x97a3,
-0x97b2,0x97b4,0x9ab1,0x9ab0,0x9ab7,0x9e58,0x9ab6,0x9aba,
-0x9abc,0x9ac1,0x9ac0,0x9ac5,0x9ac2,0x9acb,0x9acc,0x9ad1,
-0x9b45,0x9b43,0x9b47,0x9b49,0x9b48,0x9b4d,0x9b51,0x98e8,
-0x990d,0x992e,0x9955,0x9954,0x9adf,0x9ae1,0x9ae6,0x9aef,
-0x9aeb,0x9afb,0x9aed,0x9af9,0x9b08,0x9b0f,0x9b13,0x9b1f,
-0x9b23,0x9ebd,0x9ebe,0x7e3b,0x9e82,0x9e87,0x9e88,0x9e8b,
-0x9e92,0x93d6,0x9e9d,0x9e9f,0x9edb,0x9edc,0x9edd,0x9ee0,
-0x9edf,0x9ee2,0x9ee9,0x9ee7,0x9ee5,0x9eea,0x9eef,0x9f22,
-0x9f2c,0x9f2f,0x9f39,0x9f37,0x9f3d,0x9f3e,0x9f44,0x0000,
-/* 0xf800 */
-0x9ce3,0x9ce4,0x9ce5,0x9ce6,0x9ce7,0x9ce8,0x9ce9,0x9cea,
-0x9ceb,0x9cec,0x9ced,0x9cee,0x9cef,0x9cf0,0x9cf1,0x9cf2,
-0x9cf3,0x9cf4,0x9cf5,0x9cf6,0x9cf7,0x9cf8,0x9cf9,0x9cfa,
-0x9cfb,0x9cfc,0x9cfd,0x9cfe,0x9cff,0x9d00,0x9d01,0x9d02,
-0x9d03,0x9d04,0x9d05,0x9d06,0x9d07,0x9d08,0x9d09,0x9d0a,
-0x9d0b,0x9d0c,0x9d0d,0x9d0e,0x9d0f,0x9d10,0x9d11,0x9d12,
-0x9d13,0x9d14,0x9d15,0x9d16,0x9d17,0x9d18,0x9d19,0x9d1a,
-0x9d1b,0x9d1c,0x9d1d,0x9d1e,0x9d1f,0x9d20,0x9d21,0x0000,
-0x9d22,0x9d23,0x9d24,0x9d25,0x9d26,0x9d27,0x9d28,0x9d29,
-0x9d2a,0x9d2b,0x9d2c,0x9d2d,0x9d2e,0x9d2f,0x9d30,0x9d31,
-0x9d32,0x9d33,0x9d34,0x9d35,0x9d36,0x9d37,0x9d38,0x9d39,
-0x9d3a,0x9d3b,0x9d3c,0x9d3d,0x9d3e,0x9d3f,0x9d40,0x9d41,
-0x9d42,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-/* 0xf900 */
-0x9d43,0x9d44,0x9d45,0x9d46,0x9d47,0x9d48,0x9d49,0x9d4a,
-0x9d4b,0x9d4c,0x9d4d,0x9d4e,0x9d4f,0x9d50,0x9d51,0x9d52,
-0x9d53,0x9d54,0x9d55,0x9d56,0x9d57,0x9d58,0x9d59,0x9d5a,
-0x9d5b,0x9d5c,0x9d5d,0x9d5e,0x9d5f,0x9d60,0x9d61,0x9d62,
-0x9d63,0x9d64,0x9d65,0x9d66,0x9d67,0x9d68,0x9d69,0x9d6a,
-0x9d6b,0x9d6c,0x9d6d,0x9d6e,0x9d6f,0x9d70,0x9d71,0x9d72,
-0x9d73,0x9d74,0x9d75,0x9d76,0x9d77,0x9d78,0x9d79,0x9d7a,
-0x9d7b,0x9d7c,0x9d7d,0x9d7e,0x9d7f,0x9d80,0x9d81,0x0000,
-0x9d82,0x9d83,0x9d84,0x9d85,0x9d86,0x9d87,0x9d88,0x9d89,
-0x9d8a,0x9d8b,0x9d8c,0x9d8d,0x9d8e,0x9d8f,0x9d90,0x9d91,
-0x9d92,0x9d93,0x9d94,0x9d95,0x9d96,0x9d97,0x9d98,0x9d99,
-0x9d9a,0x9d9b,0x9d9c,0x9d9d,0x9d9e,0x9d9f,0x9da0,0x9da1,
-0x9da2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-/* 0xfa00 */
-0x9da3,0x9da4,0x9da5,0x9da6,0x9da7,0x9da8,0x9da9,0x9daa,
-0x9dab,0x9dac,0x9dad,0x9dae,0x9daf,0x9db0,0x9db1,0x9db2,
-0x9db3,0x9db4,0x9db5,0x9db6,0x9db7,0x9db8,0x9db9,0x9dba,
-0x9dbb,0x9dbc,0x9dbd,0x9dbe,0x9dbf,0x9dc0,0x9dc1,0x9dc2,
-0x9dc3,0x9dc4,0x9dc5,0x9dc6,0x9dc7,0x9dc8,0x9dc9,0x9dca,
-0x9dcb,0x9dcc,0x9dcd,0x9dce,0x9dcf,0x9dd0,0x9dd1,0x9dd2,
-0x9dd3,0x9dd4,0x9dd5,0x9dd6,0x9dd7,0x9dd8,0x9dd9,0x9dda,
-0x9ddb,0x9ddc,0x9ddd,0x9dde,0x9ddf,0x9de0,0x9de1,0x0000,
-0x9de2,0x9de3,0x9de4,0x9de5,0x9de6,0x9de7,0x9de8,0x9de9,
-0x9dea,0x9deb,0x9dec,0x9ded,0x9dee,0x9def,0x9df0,0x9df1,
-0x9df2,0x9df3,0x9df4,0x9df5,0x9df6,0x9df7,0x9df8,0x9df9,
-0x9dfa,0x9dfb,0x9dfc,0x9dfd,0x9dfe,0x9dff,0x9e00,0x9e01,
-0x9e02,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-/* 0xfb00 */
-0x9e03,0x9e04,0x9e05,0x9e06,0x9e07,0x9e08,0x9e09,0x9e0a,
-0x9e0b,0x9e0c,0x9e0d,0x9e0e,0x9e0f,0x9e10,0x9e11,0x9e12,
-0x9e13,0x9e14,0x9e15,0x9e16,0x9e17,0x9e18,0x9e19,0x9e1a,
-0x9e1b,0x9e1c,0x9e1d,0x9e1e,0x9e24,0x9e27,0x9e2e,0x9e30,
-0x9e34,0x9e3b,0x9e3c,0x9e40,0x9e4d,0x9e50,0x9e52,0x9e53,
-0x9e54,0x9e56,0x9e59,0x9e5d,0x9e5f,0x9e60,0x9e61,0x9e62,
-0x9e65,0x9e6e,0x9e6f,0x9e72,0x9e74,0x9e75,0x9e76,0x9e77,
-0x9e78,0x9e79,0x9e7a,0x9e7b,0x9e7c,0x9e7d,0x9e80,0x0000,
-0x9e81,0x9e83,0x9e84,0x9e85,0x9e86,0x9e89,0x9e8a,0x9e8c,
-0x9e8d,0x9e8e,0x9e8f,0x9e90,0x9e91,0x9e94,0x9e95,0x9e96,
-0x9e97,0x9e98,0x9e99,0x9e9a,0x9e9b,0x9e9c,0x9e9e,0x9ea0,
-0x9ea1,0x9ea2,0x9ea3,0x9ea4,0x9ea5,0x9ea7,0x9ea8,0x9ea9,
-0x9eaa,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-/* 0xfc00 */
-0x9eab,0x9eac,0x9ead,0x9eae,0x9eaf,0x9eb0,0x9eb1,0x9eb2,
-0x9eb3,0x9eb5,0x9eb6,0x9eb7,0x9eb9,0x9eba,0x9ebc,0x9ebf,
-0x9ec0,0x9ec1,0x9ec2,0x9ec3,0x9ec5,0x9ec6,0x9ec7,0x9ec8,
-0x9eca,0x9ecb,0x9ecc,0x9ed0,0x9ed2,0x9ed3,0x9ed5,0x9ed6,
-0x9ed7,0x9ed9,0x9eda,0x9ede,0x9ee1,0x9ee3,0x9ee4,0x9ee6,
-0x9ee8,0x9eeb,0x9eec,0x9eed,0x9eee,0x9ef0,0x9ef1,0x9ef2,
-0x9ef3,0x9ef4,0x9ef5,0x9ef6,0x9ef7,0x9ef8,0x9efa,0x9efd,
-0x9eff,0x9f00,0x9f01,0x9f02,0x9f03,0x9f04,0x9f05,0x0000,
-0x9f06,0x9f07,0x9f08,0x9f09,0x9f0a,0x9f0c,0x9f0f,0x9f11,
-0x9f12,0x9f14,0x9f15,0x9f16,0x9f18,0x9f1a,0x9f1b,0x9f1c,
-0x9f1d,0x9f1e,0x9f1f,0x9f21,0x9f23,0x9f24,0x9f25,0x9f26,
-0x9f27,0x9f28,0x9f29,0x9f2a,0x9f2b,0x9f2d,0x9f2e,0x9f30,
-0x9f31,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-/* 0xfd00 */
-0x9f32,0x9f33,0x9f34,0x9f35,0x9f36,0x9f38,0x9f3a,0x9f3c,
-0x9f3f,0x9f40,0x9f41,0x9f42,0x9f43,0x9f45,0x9f46,0x9f47,
-0x9f48,0x9f49,0x9f4a,0x9f4b,0x9f4c,0x9f4d,0x9f4e,0x9f4f,
-0x9f52,0x9f53,0x9f54,0x9f55,0x9f56,0x9f57,0x9f58,0x9f59,
-0x9f5a,0x9f5b,0x9f5c,0x9f5d,0x9f5e,0x9f5f,0x9f60,0x9f61,
-0x9f62,0x9f63,0x9f64,0x9f65,0x9f66,0x9f67,0x9f68,0x9f69,
-0x9f6a,0x9f6b,0x9f6c,0x9f6d,0x9f6e,0x9f6f,0x9f70,0x9f71,
-0x9f72,0x9f73,0x9f74,0x9f75,0x9f76,0x9f77,0x9f78,0x0000,
-0x9f79,0x9f7a,0x9f7b,0x9f7c,0x9f7d,0x9f7e,0x9f81,0x9f82,
-0x9f8d,0x9f8e,0x9f8f,0x9f90,0x9f91,0x9f92,0x9f93,0x9f94,
-0x9f95,0x9f96,0x9f97,0x9f98,0x9f9c,0x9f9d,0x9f9e,0x9fa1,
-0x9fa2,0x9fa3,0x9fa4,0x9fa5,0xf92c,0xf979,0xf995,0xf9e7,
-0xf9f1,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-/* 0xfe00 */
-0xfa0c,0xfa0d,0xfa0e,0xfa0f,0xfa11,0xfa13,0xfa14,0xfa18,
-0xfa1f,0xfa20,0xfa21,0xfa23,0xfa24,0xfa27,0xfa28,0xfa29};
-
-static const int cp936_ucs_table_size = (sizeof(cp936_ucs_table)/sizeof(unsigned short));
-
-
-/* UCS -> CP936 */
-static const unsigned short ucs_a1_cp936_table[] = {
-0x0000,0x0001,0x0002,0x0003,0x0004,0x0005,0x0006,0x0007,
-0x0008,0x0009,0x000a,0x000b,0x000c,0x000d,0x000e,0x000f,
-0x0010,0x0011,0x0012,0x0013,0x0014,0x0015,0x0016,0x0017,
-0x0018,0x0019,0x001a,0x001b,0x001c,0x001d,0x001e,0x001f,
-0x0020,0x0021,0x0022,0x0023,0x0024,0x0025,0x0026,0x0027,
-0x0028,0x0029,0x002a,0x002b,0x002c,0x002d,0x002e,0x002f,
-0x0030,0x0031,0x0032,0x0033,0x0034,0x0035,0x0036,0x0037,
-0x0038,0x0039,0x003a,0x003b,0x003c,0x003d,0x003e,0x003f,
-0x0040,0x0041,0x0042,0x0043,0x0044,0x0045,0x0046,0x0047,
-0x0048,0x0049,0x004a,0x004b,0x004c,0x004d,0x004e,0x004f,
-0x0050,0x0051,0x0052,0x0053,0x0054,0x0055,0x0056,0x0057,
-0x0058,0x0059,0x005a,0x005b,0x005c,0x005d,0x005e,0x005f,
-0x0060,0x0061,0x0062,0x0063,0x0064,0x0065,0x0066,0x0067,
-0x0068,0x0069,0x006a,0x006b,0x006c,0x006d,0x006e,0x006f,
-0x0070,0x0071,0x0072,0x0073,0x0074,0x0075,0x0076,0x0077,
-0x0078,0x0079,0x007a,0x007b,0x007c,0x007d,0x007e,0x007f,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xa1e8,0x0000,0x0000,0xa1ec,
-0xa1a7,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xa1e3,0xa1c0,0x0000,0x0000,0x0000,0x0000,0x0000,0xa1a4,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xa1c1,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xa8a4,0xa8a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xa8a8,0xa8a6,0xa8ba,0x0000,0xa8ac,0xa8aa,0x0000,0x0000,
-0x0000,0x0000,0xa8b0,0xa8ae,0x0000,0x0000,0x0000,0xa1c2,
-0x0000,0xa8b4,0xa8b2,0x0000,0xa8b9,0x0000,0x0000,0x0000,
-/* 0x0100 */
-0x0000,0xa8a1,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xa8a5,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xa8a7,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xa8a9,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xa8bd,0x0000,0x0000,0x0000,
-0xa8be,0x0000,0x0000,0x0000,0x0000,0xa8ad,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xa8b1,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xa8a3,0x0000,
-0xa8ab,0x0000,0xa8af,0x0000,0xa8b3,0x0000,0xa8b5,0x0000,
-0xa8b6,0x0000,0xa8b7,0x0000,0xa8b8,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-/* 0x0200 */
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xa8bb,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xa8c0,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xa1a6,
-0x0000,0xa1a5,0xa840,0xa841,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xa842,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-/* 0x0300 */
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xa6a1,0xa6a2,0xa6a3,0xa6a4,0xa6a5,0xa6a6,0xa6a7,
-0xa6a8,0xa6a9,0xa6aa,0xa6ab,0xa6ac,0xa6ad,0xa6ae,0xa6af,
-0xa6b0,0xa6b1,0x0000,0xa6b2,0xa6b3,0xa6b4,0xa6b5,0xa6b6,
-0xa6b7,0xa6b8,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xa6c1,0xa6c2,0xa6c3,0xa6c4,0xa6c5,0xa6c6,0xa6c7,
-0xa6c8,0xa6c9,0xa6ca,0xa6cb,0xa6cc,0xa6cd,0xa6ce,0xa6cf,
-0xa6d0,0xa6d1,0x0000,0xa6d2,0xa6d3,0xa6d4,0xa6d5,0xa6d6,
-0xa6d7,0xa6d8,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-/* 0x0400 */
-0x0000,0xa7a7,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xa7a1,0xa7a2,0xa7a3,0xa7a4,0xa7a5,0xa7a6,0xa7a8,0xa7a9,
-0xa7aa,0xa7ab,0xa7ac,0xa7ad,0xa7ae,0xa7af,0xa7b0,0xa7b1,
-0xa7b2,0xa7b3,0xa7b4,0xa7b5,0xa7b6,0xa7b7,0xa7b8,0xa7b9,
-0xa7ba,0xa7bb,0xa7bc,0xa7bd,0xa7be,0xa7bf,0xa7c0,0xa7c1,
-0xa7d1,0xa7d2,0xa7d3,0xa7d4,0xa7d5,0xa7d6,0xa7d8,0xa7d9,
-0xa7da,0xa7db,0xa7dc,0xa7dd,0xa7de,0xa7df,0xa7e0,0xa7e1,
-0xa7e2,0xa7e3,0xa7e4,0xa7e5,0xa7e6,0xa7e7,0xa7e8,0xa7e9,
-0xa7ea,0xa7eb,0xa7ec,0xa7ed,0xa7ee,0xa7ef,0xa7f0,0xa7f1,
-0x0000,0xa7d7};
-
-static const int ucs_a1_cp936_table_min = 0x0000;
-static const int ucs_a1_cp936_table_max = 0x0000 + (sizeof (ucs_a1_cp936_table) / sizeof (unsigned short));
-
-/* 0x2000 */
-static const unsigned short ucs_a2_cp936_table[] = {
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xa95c,0x0000,0x0000,0xa843,0xa1aa,0xa844,0xa1ac,0x0000,
-0xa1ae,0xa1af,0x0000,0x0000,0xa1b0,0xa1b1,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xa845,0xa1ad,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xa1eb,0x0000,0xa1e4,0xa1e5,0x0000,0xa846,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xa1f9,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0080,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-/* 0x2100 */
-0x0000,0x0000,0x0000,0xa1e6,0x0000,0xa847,0x0000,0x0000,
-0x0000,0xa848,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xa1ed,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xa959,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xa2f1,0xa2f2,0xa2f3,0xa2f4,0xa2f5,0xa2f6,0xa2f7,0xa2f8,
-0xa2f9,0xa2fa,0xa2fb,0xa2fc,0x0000,0x0000,0x0000,0x0000,
-0xa2a1,0xa2a2,0xa2a3,0xa2a4,0xa2a5,0xa2a6,0xa2a7,0xa2a8,
-0xa2a9,0xa2aa,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xa1fb,0xa1fc,0xa1fa,0xa1fd,0x0000,0x0000,0xa849,0xa84a,
-0xa84b,0xa84c,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-/* 0x2200 */
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xa1ca,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xa1c7,
-0x0000,0xa1c6,0x0000,0x0000,0x0000,0xa84d,0x0000,0x0000,
-0x0000,0x0000,0xa1cc,0x0000,0x0000,0xa1d8,0xa1de,0xa84e,
-0xa1cf,0x0000,0x0000,0xa84f,0x0000,0xa1ce,0x0000,0xa1c4,
-0xa1c5,0xa1c9,0xa1c8,0xa1d2,0x0000,0x0000,0xa1d3,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xa1e0,0xa1df,0xa1c3,0xa1cb,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xa1d7,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xa1d6,0x0000,0x0000,0x0000,0xa1d5,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xa850,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xa1d9,0xa1d4,0x0000,0x0000,0xa1dc,0xa1dd,0xa851,0xa852,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xa1da,0xa1db,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xa892,0x0000,0x0000,
-0x0000,0xa1d1,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xa1cd,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xa853,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-/* 0x2300 */
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xa1d0,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-/* 0x2400 */
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xa2d9,0xa2da,0xa2db,0xa2dc,0xa2dd,0xa2de,0xa2df,0xa2e0,
-0xa2e1,0xa2e2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xa2c5,0xa2c6,0xa2c7,0xa2c8,
-0xa2c9,0xa2ca,0xa2cb,0xa2cc,0xa2cd,0xa2ce,0xa2cf,0xa2d0,
-0xa2d1,0xa2d2,0xa2d3,0xa2d4,0xa2d5,0xa2d6,0xa2d7,0xa2d8,
-0xa2b1,0xa2b2,0xa2b3,0xa2b4,0xa2b5,0xa2b6,0xa2b7,0xa2b8,
-0xa2b9,0xa2ba,0xa2bb,0xa2bc,0xa2bd,0xa2be,0xa2bf,0xa2c0,
-0xa2c1,0xa2c2,0xa2c3,0xa2c4,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-/* 0x2500 */
-0xa9a4,0xa9a5,0xa9a6,0xa9a7,0xa9a8,0xa9a9,0xa9aa,0xa9ab,
-0xa9ac,0xa9ad,0xa9ae,0xa9af,0xa9b0,0xa9b1,0xa9b2,0xa9b3,
-0xa9b4,0xa9b5,0xa9b6,0xa9b7,0xa9b8,0xa9b9,0xa9ba,0xa9bb,
-0xa9bc,0xa9bd,0xa9be,0xa9bf,0xa9c0,0xa9c1,0xa9c2,0xa9c3,
-0xa9c4,0xa9c5,0xa9c6,0xa9c7,0xa9c8,0xa9c9,0xa9ca,0xa9cb,
-0xa9cc,0xa9cd,0xa9ce,0xa9cf,0xa9d0,0xa9d1,0xa9d2,0xa9d3,
-0xa9d4,0xa9d5,0xa9d6,0xa9d7,0xa9d8,0xa9d9,0xa9da,0xa9db,
-0xa9dc,0xa9dd,0xa9de,0xa9df,0xa9e0,0xa9e1,0xa9e2,0xa9e3,
-0xa9e4,0xa9e5,0xa9e6,0xa9e7,0xa9e8,0xa9e9,0xa9ea,0xa9eb,
-0xa9ec,0xa9ed,0xa9ee,0xa9ef,0x0000,0x0000,0x0000,0x0000,
-0xa854,0xa855,0xa856,0xa857,0xa858,0xa859,0xa85a,0xa85b,
-0xa85c,0xa85d,0xa85e,0xa85f,0xa860,0xa861,0xa862,0xa863,
-0xa864,0xa865,0xa866,0xa867,0xa868,0xa869,0xa86a,0xa86b,
-0xa86c,0xa86d,0xa86e,0xa86f,0xa870,0xa871,0xa872,0xa873,
-0xa874,0xa875,0xa876,0xa877,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xa878,0xa879,0xa87a,0xa87b,0xa87c,0xa87d,0xa87e,
-0xa880,0xa881,0xa882,0xa883,0xa884,0xa885,0xa886,0xa887,
-0x0000,0x0000,0x0000,0xa888,0xa889,0xa88a,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xa1f6,0xa1f5,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xa1f8,0xa1f7,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xa88b,0xa88c,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xa1f4,0xa1f3,
-0x0000,0x0000,0x0000,0xa1f0,0x0000,0x0000,0xa1f2,0xa1f1,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xa88d,0xa88e,0xa88f,0xa890,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-/* 0x2600 */
-0x0000,0x0000,0x0000,0x0000,0x0000,0xa1ef,0xa1ee,0x0000,
-0x0000,0xa891,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xa1e2,0x0000,0xa1e1,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000
-};
-static const int ucs_a2_cp936_table_min = 0x2000;
-static const int ucs_a2_cp936_table_max = 0x2000 + (sizeof (ucs_a2_cp936_table) / sizeof (unsigned short));
-
-static const unsigned short ucs_a3_cp936_table[] = {
-/* 0x2f00 */
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xa1a1,0xa1a2,0xa1a3,0xa1a8,0x0000,0xa1a9,0xa965,0xa996,
-0xa1b4,0xa1b5,0xa1b6,0xa1b7,0xa1b8,0xa1b9,0xa1ba,0xa1bb,
-0xa1be,0xa1bf,0xa893,0xa1fe,0xa1b2,0xa1b3,0xa1bc,0xa1bd,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xa894,0xa895,0x0000,
-0x0000,0xa940,0xa941,0xa942,0xa943,0xa944,0xa945,0xa946,
-0xa947,0xa948,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xa4a1,0xa4a2,0xa4a3,0xa4a4,0xa4a5,0xa4a6,0xa4a7,
-0xa4a8,0xa4a9,0xa4aa,0xa4ab,0xa4ac,0xa4ad,0xa4ae,0xa4af,
-0xa4b0,0xa4b1,0xa4b2,0xa4b3,0xa4b4,0xa4b5,0xa4b6,0xa4b7,
-0xa4b8,0xa4b9,0xa4ba,0xa4bb,0xa4bc,0xa4bd,0xa4be,0xa4bf,
-0xa4c0,0xa4c1,0xa4c2,0xa4c3,0xa4c4,0xa4c5,0xa4c6,0xa4c7,
-0xa4c8,0xa4c9,0xa4ca,0xa4cb,0xa4cc,0xa4cd,0xa4ce,0xa4cf,
-0xa4d0,0xa4d1,0xa4d2,0xa4d3,0xa4d4,0xa4d5,0xa4d6,0xa4d7,
-0xa4d8,0xa4d9,0xa4da,0xa4db,0xa4dc,0xa4dd,0xa4de,0xa4df,
-0xa4e0,0xa4e1,0xa4e2,0xa4e3,0xa4e4,0xa4e5,0xa4e6,0xa4e7,
-0xa4e8,0xa4e9,0xa4ea,0xa4eb,0xa4ec,0xa4ed,0xa4ee,0xa4ef,
-0xa4f0,0xa4f1,0xa4f2,0xa4f3,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xa961,0xa962,0xa966,0xa967,0x0000,
-0x0000,0xa5a1,0xa5a2,0xa5a3,0xa5a4,0xa5a5,0xa5a6,0xa5a7,
-0xa5a8,0xa5a9,0xa5aa,0xa5ab,0xa5ac,0xa5ad,0xa5ae,0xa5af,
-0xa5b0,0xa5b1,0xa5b2,0xa5b3,0xa5b4,0xa5b5,0xa5b6,0xa5b7,
-0xa5b8,0xa5b9,0xa5ba,0xa5bb,0xa5bc,0xa5bd,0xa5be,0xa5bf,
-0xa5c0,0xa5c1,0xa5c2,0xa5c3,0xa5c4,0xa5c5,0xa5c6,0xa5c7,
-0xa5c8,0xa5c9,0xa5ca,0xa5cb,0xa5cc,0xa5cd,0xa5ce,0xa5cf,
-0xa5d0,0xa5d1,0xa5d2,0xa5d3,0xa5d4,0xa5d5,0xa5d6,0xa5d7,
-0xa5d8,0xa5d9,0xa5da,0xa5db,0xa5dc,0xa5dd,0xa5de,0xa5df,
-0xa5e0,0xa5e1,0xa5e2,0xa5e3,0xa5e4,0xa5e5,0xa5e6,0xa5e7,
-0xa5e8,0xa5e9,0xa5ea,0xa5eb,0xa5ec,0xa5ed,0xa5ee,0xa5ef,
-0xa5f0,0xa5f1,0xa5f2,0xa5f3,0xa5f4,0xa5f5,0xa5f6,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xa960,0xa963,0xa964,0x0000,
-/* 0x3100 */
-0x0000,0x0000,0x0000,0x0000,0x0000,0xa8c5,0xa8c6,0xa8c7,
-0xa8c8,0xa8c9,0xa8ca,0xa8cb,0xa8cc,0xa8cd,0xa8ce,0xa8cf,
-0xa8d0,0xa8d1,0xa8d2,0xa8d3,0xa8d4,0xa8d5,0xa8d6,0xa8d7,
-0xa8d8,0xa8d9,0xa8da,0xa8db,0xa8dc,0xa8dd,0xa8de,0xa8df,
-0xa8e0,0xa8e1,0xa8e2,0xa8e3,0xa8e4,0xa8e5,0xa8e6,0xa8e7,
-0xa8e8,0xa8e9,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-/* 0x3200 */
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xa2e5,0xa2e6,0xa2e7,0xa2e8,0xa2e9,0xa2ea,0xa2eb,0xa2ec,
-0xa2ed,0xa2ee,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xa95a,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xa949,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-/* 0x3300 */
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xa94a,0xa94b,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xa94c,0xa94d,0xa94e,0x0000,
-0x0000,0xa94f,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xa950,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xa951,0x0000,
-0x0000,0xa952,0xa953,0x0000,0x0000,0xa954,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000
-};
-
-static const int ucs_a3_cp936_table_min = 0x2f00;
-static const int ucs_a3_cp936_table_max = 0x2f00 + (sizeof (ucs_a3_cp936_table) / sizeof (unsigned short));
-
-/* 4d00h CJK Unified Ideographs (+ Extension A) */
-static const unsigned short ucs_i_cp936_table[] = {
-/* 0x4d00 */
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xd2bb,0xb6a1,0x8140,0xc6df,0x8141,0x8142,0x8143,0xcdf2,
-0xd5c9,0xc8fd,0xc9cf,0xcfc2,0xd8a2,0xb2bb,0xd3eb,0x8144,
-0xd8a4,0xb3f3,0x8145,0xd7a8,0xc7d2,0xd8a7,0xcac0,0x8146,
-0xc7f0,0xb1fb,0xd2b5,0xb4d4,0xb6ab,0xcbbf,0xd8a9,0x8147,
-0x8148,0x8149,0xb6aa,0x814a,0xc1bd,0xd1cf,0x814b,0xc9a5,
-0xd8ad,0x814c,0xb8f6,0xd1be,0xe3dc,0xd6d0,0x814d,0x814e,
-0xb7e1,0x814f,0xb4ae,0x8150,0xc1d9,0x8151,0xd8bc,0x8152,
-0xcde8,0xb5a4,0xceaa,0xd6f7,0x8153,0xc0f6,0xbed9,0xd8af,
-0x8154,0x8155,0x8156,0xc4cb,0x8157,0xbec3,0x8158,0xd8b1,
-0xc3b4,0xd2e5,0x8159,0xd6ae,0xceda,0xd5a7,0xbaf5,0xb7a6,
-0xc0d6,0x815a,0xc6b9,0xc5d2,0xc7c7,0x815b,0xb9d4,0x815c,
-0xb3cb,0xd2d2,0x815d,0x815e,0xd8bf,0xbec5,0xc6f2,0xd2b2,
-0xcfb0,0xcfe7,0x815f,0x8160,0x8161,0x8162,0xcae9,0x8163,
-0x8164,0xd8c0,0x8165,0x8166,0x8167,0x8168,0x8169,0x816a,
-0xc2f2,0xc2d2,0x816b,0xc8e9,0x816c,0x816d,0x816e,0x816f,
-0x8170,0x8171,0x8172,0x8173,0x8174,0x8175,0xc7ac,0x8176,
-0x8177,0x8178,0x8179,0x817a,0x817b,0x817c,0xc1cb,0x817d,
-0xd3e8,0xd5f9,0x817e,0xcac2,0xb6fe,0xd8a1,0xd3da,0xbff7,
-0x8180,0xd4c6,0xbba5,0xd8c1,0xcee5,0xbeae,0x8181,0x8182,
-0xd8a8,0x8183,0xd1c7,0xd0a9,0x8184,0x8185,0x8186,0xd8bd,
-0xd9ef,0xcdf6,0xbfba,0x8187,0xbdbb,0xbaa5,0xd2e0,0xb2fa,
-0xbae0,0xc4b6,0x8188,0xcfed,0xbea9,0xcda4,0xc1c1,0x8189,
-0x818a,0x818b,0xc7d7,0xd9f1,0x818c,0xd9f4,0x818d,0x818e,
-0x818f,0x8190,0xc8cb,0xd8e9,0x8191,0x8192,0x8193,0xd2da,
-0xcab2,0xc8ca,0xd8ec,0xd8ea,0xd8c6,0xbdf6,0xc6cd,0xb3f0,
-0x8194,0xd8eb,0xbdf1,0xbde9,0x8195,0xc8d4,0xb4d3,0x8196,
-0x8197,0xc2d8,0x8198,0xb2d6,0xd7d0,0xcacb,0xcbfb,0xd5cc,
-0xb8b6,0xcfc9,0x8199,0x819a,0x819b,0xd9da,0xd8f0,0xc7aa,
-0x819c,0xd8ee,0x819d,0xb4fa,0xc1ee,0xd2d4,0x819e,0x819f,
-0xd8ed,0x81a0,0xd2c7,0xd8ef,0xc3c7,0x81a1,0x81a2,0x81a3,
-0xd1f6,0x81a4,0xd6d9,0xd8f2,0x81a5,0xd8f5,0xbcfe,0xbcdb,
-0x81a6,0x81a7,0x81a8,0xc8ce,0x81a9,0xb7dd,0x81aa,0xb7c2,
-0x81ab,0xc6f3,0x81ac,0x81ad,0x81ae,0x81af,0x81b0,0x81b1,
-0x81b2,0xd8f8,0xd2c1,0x81b3,0x81b4,0xcee9,0xbcbf,0xb7fc,
-0xb7a5,0xd0dd,0x81b5,0x81b6,0x81b7,0x81b8,0x81b9,0xd6da,
-0xd3c5,0xbbef,0xbbe1,0xd8f1,0x81ba,0x81bb,0xc9a1,0xceb0,
-0xb4ab,0x81bc,0xd8f3,0x81bd,0xc9cb,0xd8f6,0xc2d7,0xd8f7,
-0x81be,0x81bf,0xceb1,0xd8f9,0x81c0,0x81c1,0x81c2,0xb2ae,
-0xb9c0,0x81c3,0xd9a3,0x81c4,0xb0e9,0x81c5,0xc1e6,0x81c6,
-0xc9ec,0x81c7,0xcbc5,0x81c8,0xcbc6,0xd9a4,0x81c9,0x81ca,
-0x81cb,0x81cc,0x81cd,0xb5e8,0x81ce,0x81cf,0xb5ab,0x81d0,
-0x81d1,0x81d2,0x81d3,0x81d4,0x81d5,0xcebb,0xb5cd,0xd7a1,
-0xd7f4,0xd3d3,0x81d6,0xcce5,0x81d7,0xbace,0x81d8,0xd9a2,
-0xd9dc,0xd3e0,0xd8fd,0xb7f0,0xd7f7,0xd8fe,0xd8fa,0xd9a1,
-0xc4e3,0x81d9,0x81da,0xd3b6,0xd8f4,0xd9dd,0x81db,0xd8fb,
-0x81dc,0xc5e5,0x81dd,0x81de,0xc0d0,0x81df,0x81e0,0xd1f0,
-0xb0db,0x81e1,0x81e2,0xbcd1,0xd9a6,0x81e3,0xd9a5,0x81e4,
-0x81e5,0x81e6,0x81e7,0xd9ac,0xd9ae,0x81e8,0xd9ab,0xcab9,
-0x81e9,0x81ea,0x81eb,0xd9a9,0xd6b6,0x81ec,0x81ed,0x81ee,
-0xb3de,0xd9a8,0x81ef,0xc0fd,0x81f0,0xcacc,0x81f1,0xd9aa,
-0x81f2,0xd9a7,0x81f3,0x81f4,0xd9b0,0x81f5,0x81f6,0xb6b1,
-0x81f7,0x81f8,0x81f9,0xb9a9,0x81fa,0xd2c0,0x81fb,0x81fc,
-0xcfc0,0x81fd,0x81fe,0xc2c2,0x8240,0xbdc4,0xd5ec,0xb2e0,
-0xc7c8,0xbfeb,0xd9ad,0x8241,0xd9af,0x8242,0xceea,0xbaee,
-0x8243,0x8244,0x8245,0x8246,0x8247,0xc7d6,0x8248,0x8249,
-0x824a,0x824b,0x824c,0x824d,0x824e,0x824f,0x8250,0xb1e3,
-0x8251,0x8252,0x8253,0xb4d9,0xb6ed,0xd9b4,0x8254,0x8255,
-0x8256,0x8257,0xbfa1,0x8258,0x8259,0x825a,0xd9de,0xc7ce,
-0xc0fe,0xd9b8,0x825b,0x825c,0x825d,0x825e,0x825f,0xcbd7,
-0xb7fd,0x8260,0xd9b5,0x8261,0xd9b7,0xb1a3,0xd3e1,0xd9b9,
-0x8262,0xd0c5,0x8263,0xd9b6,0x8264,0x8265,0xd9b1,0x8266,
-0xd9b2,0xc1a9,0xd9b3,0x8267,0x8268,0xbcf3,0xd0de,0xb8a9,
-0x8269,0xbee3,0x826a,0xd9bd,0x826b,0x826c,0x826d,0x826e,
-0xd9ba,0x826f,0xb0b3,0x8270,0x8271,0x8272,0xd9c2,0x8273,
-0x8274,0x8275,0x8276,0x8277,0x8278,0x8279,0x827a,0x827b,
-0x827c,0x827d,0x827e,0x8280,0xd9c4,0xb1b6,0x8281,0xd9bf,
-0x8282,0x8283,0xb5b9,0x8284,0xbef3,0x8285,0x8286,0x8287,
-0xccc8,0xbaf2,0xd2d0,0x8288,0xd9c3,0x8289,0x828a,0xbde8,
-0x828b,0xb3ab,0x828c,0x828d,0x828e,0xd9c5,0xbeeb,0x828f,
-0xd9c6,0xd9bb,0xc4df,0x8290,0xd9be,0xd9c1,0xd9c0,0x8291,
-0x8292,0x8293,0x8294,0x8295,0x8296,0x8297,0x8298,0x8299,
-0x829a,0x829b,0xd5ae,0x829c,0xd6b5,0x829d,0xc7e3,0x829e,
-0x829f,0x82a0,0x82a1,0xd9c8,0x82a2,0x82a3,0x82a4,0xbcd9,
-0xd9ca,0x82a5,0x82a6,0x82a7,0xd9bc,0x82a8,0xd9cb,0xc6ab,
-0x82a9,0x82aa,0x82ab,0x82ac,0x82ad,0xd9c9,0x82ae,0x82af,
-0x82b0,0x82b1,0xd7f6,0x82b2,0xcda3,0x82b3,0x82b4,0x82b5,
-0x82b6,0x82b7,0x82b8,0x82b9,0x82ba,0xbda1,0x82bb,0x82bc,
-0x82bd,0x82be,0x82bf,0x82c0,0xd9cc,0x82c1,0x82c2,0x82c3,
-0x82c4,0x82c5,0x82c6,0x82c7,0x82c8,0x82c9,0xc5bc,0xcdb5,
-0x82ca,0x82cb,0x82cc,0xd9cd,0x82cd,0x82ce,0xd9c7,0xb3a5,
-0xbffe,0x82cf,0x82d0,0x82d1,0x82d2,0xb8b5,0x82d3,0x82d4,
-0xc0fc,0x82d5,0x82d6,0x82d7,0x82d8,0xb0f8,0x82d9,0x82da,
-0x82db,0x82dc,0x82dd,0x82de,0x82df,0x82e0,0x82e1,0x82e2,
-0x82e3,0x82e4,0x82e5,0x82e6,0x82e7,0x82e8,0x82e9,0x82ea,
-0x82eb,0x82ec,0x82ed,0xb4f6,0x82ee,0xd9ce,0x82ef,0xd9cf,
-0xb4a2,0xd9d0,0x82f0,0x82f1,0xb4df,0x82f2,0x82f3,0x82f4,
-0x82f5,0x82f6,0xb0c1,0x82f7,0x82f8,0x82f9,0x82fa,0x82fb,
-0x82fc,0x82fd,0xd9d1,0xc9b5,0x82fe,0x8340,0x8341,0x8342,
-0x8343,0x8344,0x8345,0x8346,0x8347,0x8348,0x8349,0x834a,
-0x834b,0x834c,0x834d,0x834e,0x834f,0x8350,0x8351,0xcff1,
-0x8352,0x8353,0x8354,0x8355,0x8356,0x8357,0xd9d2,0x8358,
-0x8359,0x835a,0xc1c5,0x835b,0x835c,0x835d,0x835e,0x835f,
-0x8360,0x8361,0x8362,0x8363,0x8364,0x8365,0xd9d6,0xc9ae,
-0x8366,0x8367,0x8368,0x8369,0xd9d5,0xd9d4,0xd9d7,0x836a,
-0x836b,0x836c,0x836d,0xcbdb,0x836e,0xbda9,0x836f,0x8370,
-0x8371,0x8372,0x8373,0xc6a7,0x8374,0x8375,0x8376,0x8377,
-0x8378,0x8379,0x837a,0x837b,0x837c,0x837d,0xd9d3,0xd9d8,
-0x837e,0x8380,0x8381,0xd9d9,0x8382,0x8383,0x8384,0x8385,
-0x8386,0x8387,0xc8e5,0x8388,0x8389,0x838a,0x838b,0x838c,
-0x838d,0x838e,0x838f,0x8390,0x8391,0x8392,0x8393,0x8394,
-0x8395,0xc0dc,0x8396,0x8397,0x8398,0x8399,0x839a,0x839b,
-0x839c,0x839d,0x839e,0x839f,0x83a0,0x83a1,0x83a2,0x83a3,
-0x83a4,0x83a5,0x83a6,0x83a7,0x83a8,0x83a9,0x83aa,0x83ab,
-0x83ac,0x83ad,0x83ae,0x83af,0x83b0,0x83b1,0x83b2,0xb6f9,
-0xd8a3,0xd4ca,0x83b3,0xd4aa,0xd0d6,0xb3e4,0xd5d7,0x83b4,
-0xcfc8,0xb9e2,0x83b5,0xbfcb,0x83b6,0xc3e2,0x83b7,0x83b8,
-0x83b9,0xb6d2,0x83ba,0x83bb,0xcdc3,0xd9ee,0xd9f0,0x83bc,
-0x83bd,0x83be,0xb5b3,0x83bf,0xb6b5,0x83c0,0x83c1,0x83c2,
-0x83c3,0x83c4,0xbea4,0x83c5,0x83c6,0xc8eb,0x83c7,0x83c8,
-0xc8ab,0x83c9,0x83ca,0xb0cb,0xb9ab,0xc1f9,0xd9e2,0x83cb,
-0xc0bc,0xb9b2,0x83cc,0xb9d8,0xd0cb,0xb1f8,0xc6e4,0xbedf,
-0xb5e4,0xd7c8,0x83cd,0xd1f8,0xbce6,0xcade,0x83ce,0x83cf,
-0xbcbd,0xd9e6,0xd8e7,0x83d0,0x83d1,0xc4da,0x83d2,0x83d3,
-0xb8d4,0xc8bd,0x83d4,0x83d5,0xb2e1,0xd4d9,0x83d6,0x83d7,
-0x83d8,0x83d9,0xc3b0,0x83da,0x83db,0xc3e1,0xdaa2,0xc8df,
-0x83dc,0xd0b4,0x83dd,0xbefc,0xc5a9,0x83de,0x83df,0x83e0,
-0xb9da,0x83e1,0xdaa3,0x83e2,0xd4a9,0xdaa4,0x83e3,0x83e4,
-0x83e5,0x83e6,0x83e7,0xd9fb,0xb6ac,0x83e8,0x83e9,0xb7eb,
-0xb1f9,0xd9fc,0xb3e5,0xbef6,0x83ea,0xbff6,0xd2b1,0xc0e4,
-0x83eb,0x83ec,0x83ed,0xb6b3,0xd9fe,0xd9fd,0x83ee,0x83ef,
-0xbebb,0x83f0,0x83f1,0x83f2,0xc6e0,0x83f3,0xd7bc,0xdaa1,
-0x83f4,0xc1b9,0x83f5,0xb5f2,0xc1e8,0x83f6,0x83f7,0xbcf5,
-0x83f8,0xb4d5,0x83f9,0x83fa,0x83fb,0x83fc,0x83fd,0x83fe,
-0x8440,0x8441,0x8442,0xc1dd,0x8443,0xc4fd,0x8444,0x8445,
-0xbcb8,0xb7b2,0x8446,0x8447,0xb7ef,0x8448,0x8449,0x844a,
-0x844b,0x844c,0x844d,0xd9ec,0x844e,0xc6be,0x844f,0xbfad,
-0xbbcb,0x8450,0x8451,0xb5ca,0x8452,0xdbc9,0xd0d7,0x8453,
-0xcdb9,0xb0bc,0xb3f6,0xbbf7,0xdbca,0xbaaf,0x8454,0xd4e4,
-0xb5b6,0xb5f3,0xd8d6,0xc8d0,0x8455,0x8456,0xb7d6,0xc7d0,
-0xd8d7,0x8457,0xbfaf,0x8458,0x8459,0xdbbb,0xd8d8,0x845a,
-0x845b,0xd0cc,0xbbae,0x845c,0x845d,0x845e,0xebbe,0xc1d0,
-0xc1f5,0xd4f2,0xb8d5,0xb4b4,0x845f,0xb3f5,0x8460,0x8461,
-0xc9be,0x8462,0x8463,0x8464,0xc5d0,0x8465,0x8466,0x8467,
-0xc5d9,0xc0fb,0x8468,0xb1f0,0x8469,0xd8d9,0xb9ce,0x846a,
-0xb5bd,0x846b,0x846c,0xd8da,0x846d,0x846e,0xd6c6,0xcba2,
-0xc8af,0xc9b2,0xb4cc,0xbfcc,0x846f,0xb9f4,0x8470,0xd8db,
-0xd8dc,0xb6e7,0xbcc1,0xccea,0x8471,0x8472,0x8473,0x8474,
-0x8475,0x8476,0xcff7,0x8477,0xd8dd,0xc7b0,0x8478,0x8479,
-0xb9d0,0xbda3,0x847a,0x847b,0xccde,0x847c,0xc6ca,0x847d,
-0x847e,0x8480,0x8481,0x8482,0xd8e0,0x8483,0xd8de,0x8484,
-0x8485,0xd8df,0x8486,0x8487,0x8488,0xb0fe,0x8489,0xbee7,
-0x848a,0xcaa3,0xbcf4,0x848b,0x848c,0x848d,0x848e,0xb8b1,
-0x848f,0x8490,0xb8ee,0x8491,0x8492,0x8493,0x8494,0x8495,
-0x8496,0x8497,0x8498,0x8499,0x849a,0xd8e2,0x849b,0xbdcb,
-0x849c,0xd8e4,0xd8e3,0x849d,0x849e,0x849f,0x84a0,0x84a1,
-0xc5fc,0x84a2,0x84a3,0x84a4,0x84a5,0x84a6,0x84a7,0x84a8,
-0xd8e5,0x84a9,0x84aa,0xd8e6,0x84ab,0x84ac,0x84ad,0x84ae,
-0x84af,0x84b0,0x84b1,0xc1a6,0x84b2,0xc8b0,0xb0ec,0xb9a6,
-0xbcd3,0xcef1,0xdbbd,0xc1d3,0x84b3,0x84b4,0x84b5,0x84b6,
-0xb6af,0xd6fa,0xc5ac,0xbdd9,0xdbbe,0xdbbf,0x84b7,0x84b8,
-0x84b9,0xc0f8,0xbea2,0xc0cd,0x84ba,0x84bb,0x84bc,0x84bd,
-0x84be,0x84bf,0x84c0,0x84c1,0x84c2,0x84c3,0xdbc0,0xcac6,
-0x84c4,0x84c5,0x84c6,0xb2aa,0x84c7,0x84c8,0x84c9,0xd3c2,
-0x84ca,0xc3e3,0x84cb,0xd1ab,0x84cc,0x84cd,0x84ce,0x84cf,
-0xdbc2,0x84d0,0xc0d5,0x84d1,0x84d2,0x84d3,0xdbc3,0x84d4,
-0xbfb1,0x84d5,0x84d6,0x84d7,0x84d8,0x84d9,0x84da,0xc4bc,
-0x84db,0x84dc,0x84dd,0x84de,0xc7da,0x84df,0x84e0,0x84e1,
-0x84e2,0x84e3,0x84e4,0x84e5,0x84e6,0x84e7,0x84e8,0x84e9,
-0xdbc4,0x84ea,0x84eb,0x84ec,0x84ed,0x84ee,0x84ef,0x84f0,
-0x84f1,0xd9e8,0xc9d7,0x84f2,0x84f3,0x84f4,0xb9b4,0xcef0,
-0xd4c8,0x84f5,0x84f6,0x84f7,0x84f8,0xb0fc,0xb4d2,0x84f9,
-0xd0d9,0x84fa,0x84fb,0x84fc,0x84fd,0xd9e9,0x84fe,0xdecb,
-0xd9eb,0x8540,0x8541,0x8542,0x8543,0xd8b0,0xbbaf,0xb1b1,
-0x8544,0xb3d7,0xd8ce,0x8545,0x8546,0xd4d1,0x8547,0x8548,
-0xbdb3,0xbfef,0x8549,0xcfbb,0x854a,0x854b,0xd8d0,0x854c,
-0x854d,0x854e,0xb7cb,0x854f,0x8550,0x8551,0xd8d1,0x8552,
-0x8553,0x8554,0x8555,0x8556,0x8557,0x8558,0x8559,0x855a,
-0x855b,0xc6a5,0xc7f8,0xd2bd,0x855c,0x855d,0xd8d2,0xc4e4,
-0x855e,0xcaae,0x855f,0xc7a7,0x8560,0xd8a6,0x8561,0xc9fd,
-0xcee7,0xbbdc,0xb0eb,0x8562,0x8563,0x8564,0xbbaa,0xd0ad,
-0x8565,0xb1b0,0xd7e4,0xd7bf,0x8566,0xb5a5,0xc2f4,0xc4cf,
-0x8567,0x8568,0xb2a9,0x8569,0xb2b7,0x856a,0xb1e5,0xdfb2,
-0xd5bc,0xbfa8,0xc2ac,0xd8d5,0xc2b1,0x856b,0xd8d4,0xced4,
-0x856c,0xdae0,0x856d,0xcec0,0x856e,0x856f,0xd8b4,0xc3ae,
-0xd3a1,0xcea3,0x8570,0xbcb4,0xc8b4,0xc2d1,0x8571,0xbeed,
-0xd0b6,0x8572,0xdae1,0x8573,0x8574,0x8575,0x8576,0xc7e4,
-0x8577,0x8578,0xb3a7,0x8579,0xb6f2,0xccfc,0xc0fa,0x857a,
-0x857b,0xc0f7,0x857c,0xd1b9,0xd1e1,0xd8c7,0x857d,0x857e,
-0x8580,0x8581,0x8582,0x8583,0x8584,0xb2de,0x8585,0x8586,
-0xc0e5,0x8587,0xbaf1,0x8588,0x8589,0xd8c8,0x858a,0xd4ad,
-0x858b,0x858c,0xcfe1,0xd8c9,0x858d,0xd8ca,0xcfc3,0x858e,
-0xb3f8,0xbec7,0x858f,0x8590,0x8591,0x8592,0xd8cb,0x8593,
-0x8594,0x8595,0x8596,0x8597,0x8598,0x8599,0xdbcc,0x859a,
-0x859b,0x859c,0x859d,0xc8a5,0x859e,0x859f,0x85a0,0xcfd8,
-0x85a1,0xc8fe,0xb2ce,0x85a2,0x85a3,0x85a4,0x85a5,0x85a6,
-0xd3d6,0xb2e6,0xbcb0,0xd3d1,0xcbab,0xb7b4,0x85a7,0x85a8,
-0x85a9,0xb7a2,0x85aa,0x85ab,0xcae5,0x85ac,0xc8a1,0xcadc,
-0xb1e4,0xd0f0,0x85ad,0xc5d1,0x85ae,0x85af,0x85b0,0xdbc5,
-0xb5fe,0x85b1,0x85b2,0xbfda,0xb9c5,0xbee4,0xc1ed,0x85b3,
-0xdfb6,0xdfb5,0xd6bb,0xbdd0,0xd5d9,0xb0c8,0xb6a3,0xbfc9,
-0xcca8,0xdfb3,0xcab7,0xd3d2,0x85b4,0xd8cf,0xd2b6,0xbac5,
-0xcbbe,0xccbe,0x85b5,0xdfb7,0xb5f0,0xdfb4,0x85b6,0x85b7,
-0x85b8,0xd3f5,0x85b9,0xb3d4,0xb8f7,0x85ba,0xdfba,0x85bb,
-0xbacf,0xbcaa,0xb5f5,0x85bc,0xcdac,0xc3fb,0xbaf3,0xc0f4,
-0xcdc2,0xcff2,0xdfb8,0xcfc5,0x85bd,0xc2c0,0xdfb9,0xc2f0,
-0x85be,0x85bf,0x85c0,0xbefd,0x85c1,0xc1df,0xcdcc,0xd2f7,
-0xb7cd,0xdfc1,0x85c2,0xdfc4,0x85c3,0x85c4,0xb7f1,0xb0c9,
-0xb6d6,0xb7d4,0x85c5,0xbaac,0xccfd,0xbfd4,0xcbb1,0xc6f4,
-0x85c6,0xd6a8,0xdfc5,0x85c7,0xcee2,0xb3b3,0x85c8,0x85c9,
-0xcefc,0xb4b5,0x85ca,0xcec7,0xbaf0,0x85cb,0xcee1,0x85cc,
-0xd1bd,0x85cd,0x85ce,0xdfc0,0x85cf,0x85d0,0xb4f4,0x85d1,
-0xb3ca,0x85d2,0xb8e6,0xdfbb,0x85d3,0x85d4,0x85d5,0x85d6,
-0xc4c5,0x85d7,0xdfbc,0xdfbd,0xdfbe,0xc5bb,0xdfbf,0xdfc2,
-0xd4b1,0xdfc3,0x85d8,0xc7ba,0xced8,0x85d9,0x85da,0x85db,
-0x85dc,0x85dd,0xc4d8,0x85de,0xdfca,0x85df,0xdfcf,0x85e0,
-0xd6dc,0x85e1,0x85e2,0x85e3,0x85e4,0x85e5,0x85e6,0x85e7,
-0x85e8,0xdfc9,0xdfda,0xceb6,0x85e9,0xbac7,0xdfce,0xdfc8,
-0xc5de,0x85ea,0x85eb,0xc9eb,0xbaf4,0xc3fc,0x85ec,0x85ed,
-0xbed7,0x85ee,0xdfc6,0x85ef,0xdfcd,0x85f0,0xc5d8,0x85f1,
-0x85f2,0x85f3,0x85f4,0xd5a6,0xbacd,0x85f5,0xbecc,0xd3bd,
-0xb8c0,0x85f6,0xd6e4,0x85f7,0xdfc7,0xb9be,0xbfa7,0x85f8,
-0x85f9,0xc1fc,0xdfcb,0xdfcc,0x85fa,0xdfd0,0x85fb,0x85fc,
-0x85fd,0x85fe,0x8640,0xdfdb,0xdfe5,0x8641,0xdfd7,0xdfd6,
-0xd7c9,0xdfe3,0xdfe4,0xe5eb,0xd2a7,0xdfd2,0x8642,0xbfa9,
-0x8643,0xd4db,0x8644,0xbfc8,0xdfd4,0x8645,0x8646,0x8647,
-0xcfcc,0x8648,0x8649,0xdfdd,0x864a,0xd1ca,0x864b,0xdfde,
-0xb0a7,0xc6b7,0xdfd3,0x864c,0xbae5,0x864d,0xb6df,0xcddb,
-0xb9fe,0xd4d5,0x864e,0x864f,0xdfdf,0xcfec,0xb0a5,0xdfe7,
-0xdfd1,0xd1c6,0xdfd5,0xdfd8,0xdfd9,0xdfdc,0x8650,0xbba9,
-0x8651,0xdfe0,0xdfe1,0x8652,0xdfe2,0xdfe6,0xdfe8,0xd3b4,
-0x8653,0x8654,0x8655,0x8656,0x8657,0xb8e7,0xc5b6,0xdfea,
-0xc9da,0xc1a8,0xc4c4,0x8658,0x8659,0xbfde,0xcff8,0x865a,
-0x865b,0x865c,0xd5dc,0xdfee,0x865d,0x865e,0x865f,0x8660,
-0x8661,0x8662,0xb2b8,0x8663,0xbadf,0xdfec,0x8664,0xdbc1,
-0x8665,0xd1e4,0x8666,0x8667,0x8668,0x8669,0xcbf4,0xb4bd,
-0x866a,0xb0a6,0x866b,0x866c,0x866d,0x866e,0x866f,0xdff1,
-0xccc6,0xdff2,0x8670,0x8671,0xdfed,0x8672,0x8673,0x8674,
-0x8675,0x8676,0x8677,0xdfe9,0x8678,0x8679,0x867a,0x867b,
-0xdfeb,0x867c,0xdfef,0xdff0,0xbbbd,0x867d,0x867e,0xdff3,
-0x8680,0x8681,0xdff4,0x8682,0xbba3,0x8683,0xcadb,0xcea8,
-0xe0a7,0xb3aa,0x8684,0xe0a6,0x8685,0x8686,0x8687,0xe0a1,
-0x8688,0x8689,0x868a,0x868b,0xdffe,0x868c,0xcdd9,0xdffc,
-0x868d,0xdffa,0x868e,0xbfd0,0xd7c4,0x868f,0xc9cc,0x8690,
-0x8691,0xdff8,0xb0a1,0x8692,0x8693,0x8694,0x8695,0x8696,
-0xdffd,0x8697,0x8698,0x8699,0x869a,0xdffb,0xe0a2,0x869b,
-0x869c,0x869d,0x869e,0x869f,0xe0a8,0x86a0,0x86a1,0x86a2,
-0x86a3,0xb7c8,0x86a4,0x86a5,0xc6a1,0xc9b6,0xc0b2,0xdff5,
-0x86a6,0x86a7,0xc5be,0x86a8,0xd8c4,0xdff9,0xc4f6,0x86a9,
-0x86aa,0x86ab,0x86ac,0x86ad,0x86ae,0xe0a3,0xe0a4,0xe0a5,
-0xd0a5,0x86af,0x86b0,0xe0b4,0xcce4,0x86b1,0xe0b1,0x86b2,
-0xbfa6,0xe0af,0xceb9,0xe0ab,0xc9c6,0x86b3,0x86b4,0xc0ae,
-0xe0ae,0xbaed,0xbab0,0xe0a9,0x86b5,0x86b6,0x86b7,0xdff6,
-0x86b8,0xe0b3,0x86b9,0x86ba,0xe0b8,0x86bb,0x86bc,0x86bd,
-0xb4ad,0xe0b9,0x86be,0x86bf,0xcfb2,0xbac8,0x86c0,0xe0b0,
-0x86c1,0x86c2,0x86c3,0x86c4,0x86c5,0x86c6,0x86c7,0xd0fa,
-0x86c8,0x86c9,0x86ca,0x86cb,0x86cc,0x86cd,0x86ce,0x86cf,
-0x86d0,0xe0ac,0x86d1,0xd4fb,0x86d2,0xdff7,0x86d3,0xc5e7,
-0x86d4,0xe0ad,0x86d5,0xd3f7,0x86d6,0xe0b6,0xe0b7,0x86d7,
-0x86d8,0x86d9,0x86da,0x86db,0xe0c4,0xd0e1,0x86dc,0x86dd,
-0x86de,0xe0bc,0x86df,0x86e0,0xe0c9,0xe0ca,0x86e1,0x86e2,
-0x86e3,0xe0be,0xe0aa,0xc9a4,0xe0c1,0x86e4,0xe0b2,0x86e5,
-0x86e6,0x86e7,0x86e8,0x86e9,0xcac8,0xe0c3,0x86ea,0xe0b5,
-0x86eb,0xcecb,0x86ec,0xcbc3,0xe0cd,0xe0c6,0xe0c2,0x86ed,
-0xe0cb,0x86ee,0xe0ba,0xe0bf,0xe0c0,0x86ef,0x86f0,0xe0c5,
-0x86f1,0x86f2,0xe0c7,0xe0c8,0x86f3,0xe0cc,0x86f4,0xe0bb,
-0x86f5,0x86f6,0x86f7,0x86f8,0x86f9,0xcbd4,0xe0d5,0x86fa,
-0xe0d6,0xe0d2,0x86fb,0x86fc,0x86fd,0x86fe,0x8740,0x8741,
-0xe0d0,0xbcce,0x8742,0x8743,0xe0d1,0x8744,0xb8c2,0xd8c5,
-0x8745,0x8746,0x8747,0x8748,0x8749,0x874a,0x874b,0x874c,
-0xd0ea,0x874d,0x874e,0xc2ef,0x874f,0x8750,0xe0cf,0xe0bd,
-0x8751,0x8752,0x8753,0xe0d4,0xe0d3,0x8754,0x8755,0xe0d7,
-0x8756,0x8757,0x8758,0x8759,0xe0dc,0xe0d8,0x875a,0x875b,
-0x875c,0xd6f6,0xb3b0,0x875d,0xd7ec,0x875e,0xcbbb,0x875f,
-0x8760,0xe0da,0x8761,0xcefb,0x8762,0x8763,0x8764,0xbad9,
-0x8765,0x8766,0x8767,0x8768,0x8769,0x876a,0x876b,0x876c,
-0x876d,0x876e,0x876f,0x8770,0xe0e1,0xe0dd,0xd2ad,0x8771,
-0x8772,0x8773,0x8774,0x8775,0xe0e2,0x8776,0x8777,0xe0db,
-0xe0d9,0xe0df,0x8778,0x8779,0xe0e0,0x877a,0x877b,0x877c,
-0x877d,0x877e,0xe0de,0x8780,0xe0e4,0x8781,0x8782,0x8783,
-0xc6f7,0xd8ac,0xd4eb,0xe0e6,0xcac9,0x8784,0x8785,0x8786,
-0x8787,0xe0e5,0x8788,0x8789,0x878a,0x878b,0xb8c1,0x878c,
-0x878d,0x878e,0x878f,0xe0e7,0xe0e8,0x8790,0x8791,0x8792,
-0x8793,0x8794,0x8795,0x8796,0x8797,0xe0e9,0xe0e3,0x8798,
-0x8799,0x879a,0x879b,0x879c,0x879d,0x879e,0xbabf,0xcce7,
-0x879f,0x87a0,0x87a1,0xe0ea,0x87a2,0x87a3,0x87a4,0x87a5,
-0x87a6,0x87a7,0x87a8,0x87a9,0x87aa,0x87ab,0x87ac,0x87ad,
-0x87ae,0x87af,0x87b0,0xcff9,0x87b1,0x87b2,0x87b3,0x87b4,
-0x87b5,0x87b6,0x87b7,0x87b8,0x87b9,0x87ba,0x87bb,0xe0eb,
-0x87bc,0x87bd,0x87be,0x87bf,0x87c0,0x87c1,0x87c2,0xc8c2,
-0x87c3,0x87c4,0x87c5,0x87c6,0xbdc0,0x87c7,0x87c8,0x87c9,
-0x87ca,0x87cb,0x87cc,0x87cd,0x87ce,0x87cf,0x87d0,0x87d1,
-0x87d2,0x87d3,0xc4d2,0x87d4,0x87d5,0x87d6,0x87d7,0x87d8,
-0x87d9,0x87da,0x87db,0x87dc,0xe0ec,0x87dd,0x87de,0xe0ed,
-0x87df,0x87e0,0xc7f4,0xcbc4,0x87e1,0xe0ee,0xbbd8,0xd8b6,
-0xd2f2,0xe0ef,0xcdc5,0x87e2,0xb6da,0x87e3,0x87e4,0x87e5,
-0x87e6,0x87e7,0x87e8,0xe0f1,0x87e9,0xd4b0,0x87ea,0x87eb,
-0xc0a7,0xb4d1,0x87ec,0x87ed,0xcea7,0xe0f0,0x87ee,0x87ef,
-0x87f0,0xe0f2,0xb9cc,0x87f1,0x87f2,0xb9fa,0xcdbc,0xe0f3,
-0x87f3,0x87f4,0x87f5,0xc6d4,0xe0f4,0x87f6,0xd4b2,0x87f7,
-0xc8a6,0xe0f6,0xe0f5,0x87f8,0x87f9,0x87fa,0x87fb,0x87fc,
-0x87fd,0x87fe,0x8840,0x8841,0x8842,0x8843,0x8844,0x8845,
-0x8846,0x8847,0x8848,0x8849,0xe0f7,0x884a,0x884b,0xcdc1,
-0x884c,0x884d,0x884e,0xcaa5,0x884f,0x8850,0x8851,0x8852,
-0xd4da,0xdbd7,0xdbd9,0x8853,0xdbd8,0xb9e7,0xdbdc,0xdbdd,
-0xb5d8,0x8854,0x8855,0xdbda,0x8856,0x8857,0x8858,0x8859,
-0x885a,0xdbdb,0xb3a1,0xdbdf,0x885b,0x885c,0xbbf8,0x885d,
-0xd6b7,0x885e,0xdbe0,0x885f,0x8860,0x8861,0x8862,0xbef9,
-0x8863,0x8864,0xb7bb,0x8865,0xdbd0,0xccae,0xbfb2,0xbbb5,
-0xd7f8,0xbfd3,0x8866,0x8867,0x8868,0x8869,0x886a,0xbfe9,
-0x886b,0x886c,0xbce1,0xccb3,0xdbde,0xb0d3,0xceeb,0xb7d8,
-0xd7b9,0xc6c2,0x886d,0x886e,0xc0a4,0x886f,0xccb9,0x8870,
-0xdbe7,0xdbe1,0xc6ba,0xdbe3,0x8871,0xdbe8,0x8872,0xc5f7,
-0x8873,0x8874,0x8875,0xdbea,0x8876,0x8877,0xdbe9,0xbfc0,
-0x8878,0x8879,0x887a,0xdbe6,0xdbe5,0x887b,0x887c,0x887d,
-0x887e,0x8880,0xb4b9,0xc0ac,0xc2a2,0xdbe2,0xdbe4,0x8881,
-0x8882,0x8883,0x8884,0xd0cd,0xdbed,0x8885,0x8886,0x8887,
-0x8888,0x8889,0xc0dd,0xdbf2,0x888a,0x888b,0x888c,0x888d,
-0x888e,0x888f,0x8890,0xb6e2,0x8891,0x8892,0x8893,0x8894,
-0xdbf3,0xdbd2,0xb9b8,0xd4ab,0xdbec,0x8895,0xbfd1,0xdbf0,
-0x8896,0xdbd1,0x8897,0xb5e6,0x8898,0xdbeb,0xbfe5,0x8899,
-0x889a,0x889b,0xdbee,0x889c,0xdbf1,0x889d,0x889e,0x889f,
-0xdbf9,0x88a0,0x88a1,0x88a2,0x88a3,0x88a4,0x88a5,0x88a6,
-0x88a7,0x88a8,0xb9a1,0xb0a3,0x88a9,0x88aa,0x88ab,0x88ac,
-0x88ad,0x88ae,0x88af,0xc2f1,0x88b0,0x88b1,0xb3c7,0xdbef,
-0x88b2,0x88b3,0xdbf8,0x88b4,0xc6d2,0xdbf4,0x88b5,0x88b6,
-0xdbf5,0xdbf7,0xdbf6,0x88b7,0x88b8,0xdbfe,0x88b9,0xd3f2,
-0xb2ba,0x88ba,0x88bb,0x88bc,0xdbfd,0x88bd,0x88be,0x88bf,
-0x88c0,0x88c1,0x88c2,0x88c3,0x88c4,0xdca4,0x88c5,0xdbfb,
-0x88c6,0x88c7,0x88c8,0x88c9,0xdbfa,0x88ca,0x88cb,0x88cc,
-0xdbfc,0xc5e0,0xbbf9,0x88cd,0x88ce,0xdca3,0x88cf,0x88d0,
-0xdca5,0x88d1,0xccc3,0x88d2,0x88d3,0x88d4,0xb6d1,0xddc0,
-0x88d5,0x88d6,0x88d7,0xdca1,0x88d8,0xdca2,0x88d9,0x88da,
-0x88db,0xc7b5,0x88dc,0x88dd,0x88de,0xb6e9,0x88df,0x88e0,
-0x88e1,0xdca7,0x88e2,0x88e3,0x88e4,0x88e5,0xdca6,0x88e6,
-0xdca9,0xb1a4,0x88e7,0x88e8,0xb5cc,0x88e9,0x88ea,0x88eb,
-0x88ec,0x88ed,0xbfb0,0x88ee,0x88ef,0x88f0,0x88f1,0x88f2,
-0xd1df,0x88f3,0x88f4,0x88f5,0x88f6,0xb6c2,0x88f7,0x88f8,
-0x88f9,0x88fa,0x88fb,0x88fc,0x88fd,0x88fe,0x8940,0x8941,
-0x8942,0x8943,0x8944,0x8945,0xdca8,0x8946,0x8947,0x8948,
-0x8949,0x894a,0x894b,0x894c,0xcbfa,0xebf3,0x894d,0x894e,
-0x894f,0xcbdc,0x8950,0x8951,0xcbfe,0x8952,0x8953,0x8954,
-0xccc1,0x8955,0x8956,0x8957,0x8958,0x8959,0xc8fb,0x895a,
-0x895b,0x895c,0x895d,0x895e,0x895f,0xdcaa,0x8960,0x8961,
-0x8962,0x8963,0x8964,0xccee,0xdcab,0x8965,0x8966,0x8967,
-0x8968,0x8969,0x896a,0x896b,0x896c,0x896d,0x896e,0x896f,
-0x8970,0x8971,0x8972,0x8973,0x8974,0x8975,0xdbd3,0x8976,
-0xdcaf,0xdcac,0x8977,0xbeb3,0x8978,0xcafb,0x8979,0x897a,
-0x897b,0xdcad,0x897c,0x897d,0x897e,0x8980,0x8981,0x8982,
-0x8983,0x8984,0xc9ca,0xc4b9,0x8985,0x8986,0x8987,0x8988,
-0x8989,0xc7bd,0xdcae,0x898a,0x898b,0x898c,0xd4f6,0xd0e6,
-0x898d,0x898e,0x898f,0x8990,0x8991,0x8992,0x8993,0x8994,
-0xc4ab,0xb6d5,0x8995,0x8996,0x8997,0x8998,0x8999,0x899a,
-0x899b,0x899c,0x899d,0x899e,0x899f,0x89a0,0x89a1,0x89a2,
-0x89a3,0x89a4,0x89a5,0x89a6,0xdbd4,0x89a7,0x89a8,0x89a9,
-0x89aa,0xb1da,0x89ab,0x89ac,0x89ad,0xdbd5,0x89ae,0x89af,
-0x89b0,0x89b1,0x89b2,0x89b3,0x89b4,0x89b5,0x89b6,0x89b7,
-0x89b8,0xdbd6,0x89b9,0x89ba,0x89bb,0xbabe,0x89bc,0x89bd,
-0x89be,0x89bf,0x89c0,0x89c1,0x89c2,0x89c3,0x89c4,0x89c5,
-0x89c6,0x89c7,0x89c8,0x89c9,0xc8c0,0x89ca,0x89cb,0x89cc,
-0x89cd,0x89ce,0x89cf,0xcabf,0xc8c9,0x89d0,0xd7b3,0x89d1,
-0xc9f9,0x89d2,0x89d3,0xbfc7,0x89d4,0x89d5,0xbaf8,0x89d6,
-0x89d7,0xd2bc,0x89d8,0x89d9,0x89da,0x89db,0x89dc,0x89dd,
-0x89de,0x89df,0xe2ba,0x89e0,0xb4a6,0x89e1,0x89e2,0xb1b8,
-0x89e3,0x89e4,0x89e5,0x89e6,0x89e7,0xb8b4,0x89e8,0xcfc4,
-0x89e9,0x89ea,0x89eb,0x89ec,0xd9e7,0xcfa6,0xcde2,0x89ed,
-0x89ee,0xd9ed,0xb6e0,0x89ef,0xd2b9,0x89f0,0x89f1,0xb9bb,
-0x89f2,0x89f3,0x89f4,0x89f5,0xe2b9,0xe2b7,0x89f6,0xb4f3,
-0x89f7,0xccec,0xccab,0xb7f2,0x89f8,0xd8b2,0xd1eb,0xbabb,
-0x89f9,0xcaa7,0x89fa,0x89fb,0xcdb7,0x89fc,0x89fd,0xd2c4,
-0xbfe4,0xbcd0,0xb6e1,0x89fe,0xdec5,0x8a40,0x8a41,0x8a42,
-0x8a43,0xdec6,0xdbbc,0x8a44,0xd1d9,0x8a45,0x8a46,0xc6e6,
-0xc4ce,0xb7ee,0x8a47,0xb7dc,0x8a48,0x8a49,0xbffc,0xd7e0,
-0x8a4a,0xc6f5,0x8a4b,0x8a4c,0xb1bc,0xdec8,0xbdb1,0xccd7,
-0xdeca,0x8a4d,0xdec9,0x8a4e,0x8a4f,0x8a50,0x8a51,0x8a52,
-0xb5ec,0x8a53,0xc9dd,0x8a54,0x8a55,0xb0c2,0x8a56,0x8a57,
-0x8a58,0x8a59,0x8a5a,0x8a5b,0x8a5c,0x8a5d,0x8a5e,0x8a5f,
-0x8a60,0x8a61,0x8a62,0xc5ae,0xc5ab,0x8a63,0xc4cc,0x8a64,
-0xbce9,0xcbfd,0x8a65,0x8a66,0x8a67,0xbac3,0x8a68,0x8a69,
-0x8a6a,0xe5f9,0xc8e7,0xe5fa,0xcdfd,0x8a6b,0xd7b1,0xb8be,
-0xc2e8,0x8a6c,0xc8d1,0x8a6d,0x8a6e,0xe5fb,0x8a6f,0x8a70,
-0x8a71,0x8a72,0xb6ca,0xbccb,0x8a73,0x8a74,0xd1fd,0xe6a1,
-0x8a75,0xc3ee,0x8a76,0x8a77,0x8a78,0x8a79,0xe6a4,0x8a7a,
-0x8a7b,0x8a7c,0x8a7d,0xe5fe,0xe6a5,0xcdd7,0x8a7e,0x8a80,
-0xb7c1,0xe5fc,0xe5fd,0xe6a3,0x8a81,0x8a82,0xc4dd,0xe6a8,
-0x8a83,0x8a84,0xe6a7,0x8a85,0x8a86,0x8a87,0x8a88,0x8a89,
-0x8a8a,0xc3c3,0x8a8b,0xc6de,0x8a8c,0x8a8d,0xe6aa,0x8a8e,
-0x8a8f,0x8a90,0x8a91,0x8a92,0x8a93,0x8a94,0xc4b7,0x8a95,
-0x8a96,0x8a97,0xe6a2,0xcabc,0x8a98,0x8a99,0x8a9a,0x8a9b,
-0xbde3,0xb9c3,0xe6a6,0xd0d5,0xceaf,0x8a9c,0x8a9d,0xe6a9,
-0xe6b0,0x8a9e,0xd2a6,0x8a9f,0xbdaa,0xe6ad,0x8aa0,0x8aa1,
-0x8aa2,0x8aa3,0x8aa4,0xe6af,0x8aa5,0xc0d1,0x8aa6,0x8aa7,
-0xd2cc,0x8aa8,0x8aa9,0x8aaa,0xbca7,0x8aab,0x8aac,0x8aad,
-0x8aae,0x8aaf,0x8ab0,0x8ab1,0x8ab2,0x8ab3,0x8ab4,0x8ab5,
-0x8ab6,0xe6b1,0x8ab7,0xd2f6,0x8ab8,0x8ab9,0x8aba,0xd7cb,
-0x8abb,0xcdfe,0x8abc,0xcdde,0xc2a6,0xe6ab,0xe6ac,0xbdbf,
-0xe6ae,0xe6b3,0x8abd,0x8abe,0xe6b2,0x8abf,0x8ac0,0x8ac1,
-0x8ac2,0xe6b6,0x8ac3,0xe6b8,0x8ac4,0x8ac5,0x8ac6,0x8ac7,
-0xc4ef,0x8ac8,0x8ac9,0x8aca,0xc4c8,0x8acb,0x8acc,0xbeea,
-0xc9ef,0x8acd,0x8ace,0xe6b7,0x8acf,0xb6f0,0x8ad0,0x8ad1,
-0x8ad2,0xc3e4,0x8ad3,0x8ad4,0x8ad5,0x8ad6,0x8ad7,0x8ad8,
-0x8ad9,0xd3e9,0xe6b4,0x8ada,0xe6b5,0x8adb,0xc8a2,0x8adc,
-0x8add,0x8ade,0x8adf,0x8ae0,0xe6bd,0x8ae1,0x8ae2,0x8ae3,
-0xe6b9,0x8ae4,0x8ae5,0x8ae6,0x8ae7,0x8ae8,0xc6c5,0x8ae9,
-0x8aea,0xcdf1,0xe6bb,0x8aeb,0x8aec,0x8aed,0x8aee,0x8aef,
-0x8af0,0x8af1,0x8af2,0x8af3,0x8af4,0xe6bc,0x8af5,0x8af6,
-0x8af7,0x8af8,0xbbe9,0x8af9,0x8afa,0x8afb,0x8afc,0x8afd,
-0x8afe,0x8b40,0xe6be,0x8b41,0x8b42,0x8b43,0x8b44,0xe6ba,
-0x8b45,0x8b46,0xc0b7,0x8b47,0x8b48,0x8b49,0x8b4a,0x8b4b,
-0x8b4c,0x8b4d,0x8b4e,0x8b4f,0xd3a4,0xe6bf,0xc9f4,0xe6c3,
-0x8b50,0x8b51,0xe6c4,0x8b52,0x8b53,0x8b54,0x8b55,0xd0f6,
-0x8b56,0x8b57,0x8b58,0x8b59,0x8b5a,0x8b5b,0x8b5c,0x8b5d,
-0x8b5e,0x8b5f,0x8b60,0x8b61,0x8b62,0x8b63,0x8b64,0x8b65,
-0x8b66,0x8b67,0xc3bd,0x8b68,0x8b69,0x8b6a,0x8b6b,0x8b6c,
-0x8b6d,0x8b6e,0xc3c4,0xe6c2,0x8b6f,0x8b70,0x8b71,0x8b72,
-0x8b73,0x8b74,0x8b75,0x8b76,0x8b77,0x8b78,0x8b79,0x8b7a,
-0x8b7b,0x8b7c,0xe6c1,0x8b7d,0x8b7e,0x8b80,0x8b81,0x8b82,
-0x8b83,0x8b84,0xe6c7,0xcfb1,0x8b85,0xebf4,0x8b86,0x8b87,
-0xe6ca,0x8b88,0x8b89,0x8b8a,0x8b8b,0x8b8c,0xe6c5,0x8b8d,
-0x8b8e,0xbcde,0xc9a9,0x8b8f,0x8b90,0x8b91,0x8b92,0x8b93,
-0x8b94,0xbcb5,0x8b95,0x8b96,0xcfd3,0x8b97,0x8b98,0x8b99,
-0x8b9a,0x8b9b,0xe6c8,0x8b9c,0xe6c9,0x8b9d,0xe6ce,0x8b9e,
-0xe6d0,0x8b9f,0x8ba0,0x8ba1,0xe6d1,0x8ba2,0x8ba3,0x8ba4,
-0xe6cb,0xb5d5,0x8ba5,0xe6cc,0x8ba6,0x8ba7,0xe6cf,0x8ba8,
-0x8ba9,0xc4db,0x8baa,0xe6c6,0x8bab,0x8bac,0x8bad,0x8bae,
-0x8baf,0xe6cd,0x8bb0,0x8bb1,0x8bb2,0x8bb3,0x8bb4,0x8bb5,
-0x8bb6,0x8bb7,0x8bb8,0x8bb9,0x8bba,0x8bbb,0x8bbc,0x8bbd,
-0x8bbe,0x8bbf,0x8bc0,0x8bc1,0x8bc2,0x8bc3,0x8bc4,0x8bc5,
-0x8bc6,0xe6d2,0x8bc7,0x8bc8,0x8bc9,0x8bca,0x8bcb,0x8bcc,
-0x8bcd,0x8bce,0x8bcf,0x8bd0,0x8bd1,0x8bd2,0xe6d4,0xe6d3,
-0x8bd3,0x8bd4,0x8bd5,0x8bd6,0x8bd7,0x8bd8,0x8bd9,0x8bda,
-0x8bdb,0x8bdc,0x8bdd,0x8bde,0x8bdf,0x8be0,0x8be1,0x8be2,
-0x8be3,0x8be4,0x8be5,0x8be6,0x8be7,0x8be8,0x8be9,0x8bea,
-0x8beb,0x8bec,0xe6d5,0x8bed,0xd9f8,0x8bee,0x8bef,0xe6d6,
-0x8bf0,0x8bf1,0x8bf2,0x8bf3,0x8bf4,0x8bf5,0x8bf6,0x8bf7,
-0xe6d7,0x8bf8,0x8bf9,0x8bfa,0x8bfb,0x8bfc,0x8bfd,0x8bfe,
-0x8c40,0x8c41,0x8c42,0x8c43,0x8c44,0x8c45,0x8c46,0x8c47,
-0xd7d3,0xe6dd,0x8c48,0xe6de,0xbfd7,0xd4d0,0x8c49,0xd7d6,
-0xb4e6,0xcbef,0xe6da,0xd8c3,0xd7ce,0xd0a2,0x8c4a,0xc3cf,
-0x8c4b,0x8c4c,0xe6df,0xbcbe,0xb9c2,0xe6db,0xd1a7,0x8c4d,
-0x8c4e,0xbaa2,0xc2cf,0x8c4f,0xd8ab,0x8c50,0x8c51,0x8c52,
-0xcaeb,0xe5ee,0x8c53,0xe6dc,0x8c54,0xb7f5,0x8c55,0x8c56,
-0x8c57,0x8c58,0xc8e6,0x8c59,0x8c5a,0xc4f5,0x8c5b,0x8c5c,
-0xe5b2,0xc4fe,0x8c5d,0xcbfc,0xe5b3,0xd5ac,0x8c5e,0xd3ee,
-0xcad8,0xb0b2,0x8c5f,0xcbce,0xcdea,0x8c60,0x8c61,0xbaea,
-0x8c62,0x8c63,0x8c64,0xe5b5,0x8c65,0xe5b4,0x8c66,0xd7da,
-0xb9d9,0xd6e6,0xb6a8,0xcdf0,0xd2cb,0xb1a6,0xcab5,0x8c67,
-0xb3e8,0xc9f3,0xbfcd,0xd0fb,0xcad2,0xe5b6,0xbbc2,0x8c68,
-0x8c69,0x8c6a,0xcfdc,0xb9ac,0x8c6b,0x8c6c,0x8c6d,0x8c6e,
-0xd4d7,0x8c6f,0x8c70,0xbaa6,0xd1e7,0xcffc,0xbcd2,0x8c71,
-0xe5b7,0xc8dd,0x8c72,0x8c73,0x8c74,0xbfed,0xb1f6,0xcbde,
-0x8c75,0x8c76,0xbcc5,0x8c77,0xbcc4,0xd2fa,0xc3dc,0xbfdc,
-0x8c78,0x8c79,0x8c7a,0x8c7b,0xb8bb,0x8c7c,0x8c7d,0x8c7e,
-0xc3c2,0x8c80,0xbaae,0xd4a2,0x8c81,0x8c82,0x8c83,0x8c84,
-0x8c85,0x8c86,0x8c87,0x8c88,0x8c89,0xc7de,0xc4af,0xb2ec,
-0x8c8a,0xb9d1,0x8c8b,0x8c8c,0xe5bb,0xc1c8,0x8c8d,0x8c8e,
-0xd5af,0x8c8f,0x8c90,0x8c91,0x8c92,0x8c93,0xe5bc,0x8c94,
-0xe5be,0x8c95,0x8c96,0x8c97,0x8c98,0x8c99,0x8c9a,0x8c9b,
-0xb4e7,0xb6d4,0xcbc2,0xd1b0,0xb5bc,0x8c9c,0x8c9d,0xcad9,
-0x8c9e,0xb7e2,0x8c9f,0x8ca0,0xc9e4,0x8ca1,0xbdab,0x8ca2,
-0x8ca3,0xcebe,0xd7f0,0x8ca4,0x8ca5,0x8ca6,0x8ca7,0xd0a1,
-0x8ca8,0xc9d9,0x8ca9,0x8caa,0xb6fb,0xe6d8,0xbce2,0x8cab,
-0xb3be,0x8cac,0xc9d0,0x8cad,0xe6d9,0xb3a2,0x8cae,0x8caf,
-0x8cb0,0x8cb1,0xdecc,0x8cb2,0xd3c8,0xdecd,0x8cb3,0xd2a2,
-0x8cb4,0x8cb5,0x8cb6,0x8cb7,0xdece,0x8cb8,0x8cb9,0x8cba,
-0x8cbb,0xbecd,0x8cbc,0x8cbd,0xdecf,0x8cbe,0x8cbf,0x8cc0,
-0xcaac,0xd2fc,0xb3df,0xe5ea,0xc4e1,0xbea1,0xceb2,0xc4f2,
-0xbed6,0xc6a8,0xb2e3,0x8cc1,0x8cc2,0xbed3,0x8cc3,0x8cc4,
-0xc7fc,0xcceb,0xbdec,0xcedd,0x8cc5,0x8cc6,0xcaba,0xc6c1,
-0xe5ec,0xd0bc,0x8cc7,0x8cc8,0x8cc9,0xd5b9,0x8cca,0x8ccb,
-0x8ccc,0xe5ed,0x8ccd,0x8cce,0x8ccf,0x8cd0,0xcaf4,0x8cd1,
-0xcdc0,0xc2c5,0x8cd2,0xe5ef,0x8cd3,0xc2c4,0xe5f0,0x8cd4,
-0x8cd5,0x8cd6,0x8cd7,0x8cd8,0x8cd9,0x8cda,0xe5f8,0xcdcd,
-0x8cdb,0xc9bd,0x8cdc,0x8cdd,0x8cde,0x8cdf,0x8ce0,0x8ce1,
-0x8ce2,0xd2d9,0xe1a8,0x8ce3,0x8ce4,0x8ce5,0x8ce6,0xd3ec,
-0x8ce7,0xcbea,0xc6f1,0x8ce8,0x8ce9,0x8cea,0x8ceb,0x8cec,
-0xe1ac,0x8ced,0x8cee,0x8cef,0xe1a7,0xe1a9,0x8cf0,0x8cf1,
-0xe1aa,0xe1af,0x8cf2,0x8cf3,0xb2ed,0x8cf4,0xe1ab,0xb8da,
-0xe1ad,0xe1ae,0xe1b0,0xb5ba,0xe1b1,0x8cf5,0x8cf6,0x8cf7,
-0x8cf8,0x8cf9,0xe1b3,0xe1b8,0x8cfa,0x8cfb,0x8cfc,0x8cfd,
-0x8cfe,0xd1d2,0x8d40,0xe1b6,0xe1b5,0xc1eb,0x8d41,0x8d42,
-0x8d43,0xe1b7,0x8d44,0xd4c0,0x8d45,0xe1b2,0x8d46,0xe1ba,
-0xb0b6,0x8d47,0x8d48,0x8d49,0x8d4a,0xe1b4,0x8d4b,0xbff9,
-0x8d4c,0xe1b9,0x8d4d,0x8d4e,0xe1bb,0x8d4f,0x8d50,0x8d51,
-0x8d52,0x8d53,0x8d54,0xe1be,0x8d55,0x8d56,0x8d57,0x8d58,
-0x8d59,0x8d5a,0xe1bc,0x8d5b,0x8d5c,0x8d5d,0x8d5e,0x8d5f,
-0x8d60,0xd6c5,0x8d61,0x8d62,0x8d63,0x8d64,0x8d65,0x8d66,
-0x8d67,0xcfbf,0x8d68,0x8d69,0xe1bd,0xe1bf,0xc2cd,0x8d6a,
-0xb6eb,0x8d6b,0xd3f8,0x8d6c,0x8d6d,0xc7cd,0x8d6e,0x8d6f,
-0xb7e5,0x8d70,0x8d71,0x8d72,0x8d73,0x8d74,0x8d75,0x8d76,
-0x8d77,0x8d78,0x8d79,0xbefe,0x8d7a,0x8d7b,0x8d7c,0x8d7d,
-0x8d7e,0x8d80,0xe1c0,0xe1c1,0x8d81,0x8d82,0xe1c7,0xb3e7,
-0x8d83,0x8d84,0x8d85,0x8d86,0x8d87,0x8d88,0xc6e9,0x8d89,
-0x8d8a,0x8d8b,0x8d8c,0x8d8d,0xb4de,0x8d8e,0xd1c2,0x8d8f,
-0x8d90,0x8d91,0x8d92,0xe1c8,0x8d93,0x8d94,0xe1c6,0x8d95,
-0x8d96,0x8d97,0x8d98,0x8d99,0xe1c5,0x8d9a,0xe1c3,0xe1c2,
-0x8d9b,0xb1c0,0x8d9c,0x8d9d,0x8d9e,0xd5b8,0xe1c4,0x8d9f,
-0x8da0,0x8da1,0x8da2,0x8da3,0xe1cb,0x8da4,0x8da5,0x8da6,
-0x8da7,0x8da8,0x8da9,0x8daa,0x8dab,0xe1cc,0xe1ca,0x8dac,
-0x8dad,0x8dae,0x8daf,0x8db0,0x8db1,0x8db2,0x8db3,0xeffa,
-0x8db4,0x8db5,0xe1d3,0xe1d2,0xc7b6,0x8db6,0x8db7,0x8db8,
-0x8db9,0x8dba,0x8dbb,0x8dbc,0x8dbd,0x8dbe,0x8dbf,0x8dc0,
-0xe1c9,0x8dc1,0x8dc2,0xe1ce,0x8dc3,0xe1d0,0x8dc4,0x8dc5,
-0x8dc6,0x8dc7,0x8dc8,0x8dc9,0x8dca,0x8dcb,0x8dcc,0x8dcd,
-0x8dce,0xe1d4,0x8dcf,0xe1d1,0xe1cd,0x8dd0,0x8dd1,0xe1cf,
-0x8dd2,0x8dd3,0x8dd4,0x8dd5,0xe1d5,0x8dd6,0x8dd7,0x8dd8,
-0x8dd9,0x8dda,0x8ddb,0x8ddc,0x8ddd,0x8dde,0x8ddf,0x8de0,
-0x8de1,0x8de2,0xe1d6,0x8de3,0x8de4,0x8de5,0x8de6,0x8de7,
-0x8de8,0x8de9,0x8dea,0x8deb,0x8dec,0x8ded,0x8dee,0x8def,
-0x8df0,0x8df1,0x8df2,0x8df3,0x8df4,0x8df5,0x8df6,0x8df7,
-0x8df8,0xe1d7,0x8df9,0x8dfa,0x8dfb,0xe1d8,0x8dfc,0x8dfd,
-0x8dfe,0x8e40,0x8e41,0x8e42,0x8e43,0x8e44,0x8e45,0x8e46,
-0x8e47,0x8e48,0x8e49,0x8e4a,0x8e4b,0x8e4c,0x8e4d,0x8e4e,
-0x8e4f,0x8e50,0x8e51,0x8e52,0x8e53,0x8e54,0x8e55,0xe1da,
-0x8e56,0x8e57,0x8e58,0x8e59,0x8e5a,0x8e5b,0x8e5c,0x8e5d,
-0x8e5e,0x8e5f,0x8e60,0x8e61,0x8e62,0xe1db,0x8e63,0x8e64,
-0x8e65,0x8e66,0x8e67,0x8e68,0x8e69,0xcea1,0x8e6a,0x8e6b,
-0x8e6c,0x8e6d,0x8e6e,0x8e6f,0x8e70,0x8e71,0x8e72,0x8e73,
-0x8e74,0x8e75,0x8e76,0xe7dd,0x8e77,0xb4a8,0xd6dd,0x8e78,
-0x8e79,0xd1b2,0xb3b2,0x8e7a,0x8e7b,0xb9a4,0xd7f3,0xc7c9,
-0xbede,0xb9ae,0x8e7c,0xced7,0x8e7d,0x8e7e,0xb2ee,0xdbcf,
-0x8e80,0xbcba,0xd2d1,0xcbc8,0xb0cd,0x8e81,0x8e82,0xcfef,
-0x8e83,0x8e84,0x8e85,0x8e86,0x8e87,0xd9e3,0xbded,0x8e88,
-0x8e89,0xb1d2,0xcad0,0xb2bc,0x8e8a,0xcba7,0xb7ab,0x8e8b,
-0xcaa6,0x8e8c,0x8e8d,0x8e8e,0xcfa3,0x8e8f,0x8e90,0xe0f8,
-0xd5ca,0xe0fb,0x8e91,0x8e92,0xe0fa,0xc5c1,0xccfb,0x8e93,
-0xc1b1,0xe0f9,0xd6e3,0xb2af,0xd6c4,0xb5db,0x8e94,0x8e95,
-0x8e96,0x8e97,0x8e98,0x8e99,0x8e9a,0x8e9b,0xb4f8,0xd6a1,
-0x8e9c,0x8e9d,0x8e9e,0x8e9f,0x8ea0,0xcfaf,0xb0ef,0x8ea1,
-0x8ea2,0xe0fc,0x8ea3,0x8ea4,0x8ea5,0x8ea6,0x8ea7,0xe1a1,
-0xb3a3,0x8ea8,0x8ea9,0xe0fd,0xe0fe,0xc3b1,0x8eaa,0x8eab,
-0x8eac,0x8ead,0xc3dd,0x8eae,0xe1a2,0xb7f9,0x8eaf,0x8eb0,
-0x8eb1,0x8eb2,0x8eb3,0x8eb4,0xbbcf,0x8eb5,0x8eb6,0x8eb7,
-0x8eb8,0x8eb9,0x8eba,0x8ebb,0xe1a3,0xc4bb,0x8ebc,0x8ebd,
-0x8ebe,0x8ebf,0x8ec0,0xe1a4,0x8ec1,0x8ec2,0xe1a5,0x8ec3,
-0x8ec4,0xe1a6,0xb4b1,0x8ec5,0x8ec6,0x8ec7,0x8ec8,0x8ec9,
-0x8eca,0x8ecb,0x8ecc,0x8ecd,0x8ece,0x8ecf,0x8ed0,0x8ed1,
-0x8ed2,0x8ed3,0xb8c9,0xc6bd,0xc4ea,0x8ed4,0xb2a2,0x8ed5,
-0xd0d2,0x8ed6,0xe7db,0xbbc3,0xd3d7,0xd3c4,0x8ed7,0xb9e3,
-0xe2cf,0x8ed8,0x8ed9,0x8eda,0xd7af,0x8edb,0xc7ec,0xb1d3,
-0x8edc,0x8edd,0xb4b2,0xe2d1,0x8ede,0x8edf,0x8ee0,0xd0f2,
-0xc2ae,0xe2d0,0x8ee1,0xbfe2,0xd3a6,0xb5d7,0xe2d2,0xb5ea,
-0x8ee2,0xc3ed,0xb8fd,0x8ee3,0xb8ae,0x8ee4,0xc5d3,0xb7cf,
-0xe2d4,0x8ee5,0x8ee6,0x8ee7,0x8ee8,0xe2d3,0xb6c8,0xd7f9,
-0x8ee9,0x8eea,0x8eeb,0x8eec,0x8eed,0xcda5,0x8eee,0x8eef,
-0x8ef0,0x8ef1,0x8ef2,0xe2d8,0x8ef3,0xe2d6,0xcafc,0xbfb5,
-0xd3b9,0xe2d5,0x8ef4,0x8ef5,0x8ef6,0x8ef7,0xe2d7,0x8ef8,
-0x8ef9,0x8efa,0x8efb,0x8efc,0x8efd,0x8efe,0x8f40,0x8f41,
-0x8f42,0xc1ae,0xc0c8,0x8f43,0x8f44,0x8f45,0x8f46,0x8f47,
-0x8f48,0xe2db,0xe2da,0xc0aa,0x8f49,0x8f4a,0xc1ce,0x8f4b,
-0x8f4c,0x8f4d,0x8f4e,0xe2dc,0x8f4f,0x8f50,0x8f51,0x8f52,
-0x8f53,0x8f54,0x8f55,0x8f56,0x8f57,0x8f58,0x8f59,0x8f5a,
-0xe2dd,0x8f5b,0xe2de,0x8f5c,0x8f5d,0x8f5e,0x8f5f,0x8f60,
-0x8f61,0x8f62,0x8f63,0x8f64,0xdbc8,0x8f65,0xd1d3,0xcda2,
-0x8f66,0x8f67,0xbda8,0x8f68,0x8f69,0x8f6a,0xdec3,0xd8a5,
-0xbfaa,0xdbcd,0xd2ec,0xc6fa,0xc5aa,0x8f6b,0x8f6c,0x8f6d,
-0xdec4,0x8f6e,0xb1d7,0xdfae,0x8f6f,0x8f70,0x8f71,0xcabd,
-0x8f72,0xdfb1,0x8f73,0xb9ad,0x8f74,0xd2fd,0x8f75,0xb8a5,
-0xbaeb,0x8f76,0x8f77,0xb3da,0x8f78,0x8f79,0x8f7a,0xb5dc,
-0xd5c5,0x8f7b,0x8f7c,0x8f7d,0x8f7e,0xc3d6,0xcfd2,0xbba1,
-0x8f80,0xe5f3,0xe5f2,0x8f81,0x8f82,0xe5f4,0x8f83,0xcde4,
-0x8f84,0xc8f5,0x8f85,0x8f86,0x8f87,0x8f88,0x8f89,0x8f8a,
-0x8f8b,0xb5af,0xc7bf,0x8f8c,0xe5f6,0x8f8d,0x8f8e,0x8f8f,
-0xecb0,0x8f90,0x8f91,0x8f92,0x8f93,0x8f94,0x8f95,0x8f96,
-0x8f97,0x8f98,0x8f99,0x8f9a,0x8f9b,0x8f9c,0x8f9d,0x8f9e,
-0xe5e6,0x8f9f,0xb9e9,0xb5b1,0x8fa0,0xc2bc,0xe5e8,0xe5e7,
-0xe5e9,0x8fa1,0x8fa2,0x8fa3,0x8fa4,0xd2cd,0x8fa5,0x8fa6,
-0x8fa7,0xe1ea,0xd0ce,0x8fa8,0xcdae,0x8fa9,0xd1e5,0x8faa,
-0x8fab,0xb2ca,0xb1eb,0x8fac,0xb1f2,0xc5ed,0x8fad,0x8fae,
-0xd5c3,0xd3b0,0x8faf,0xe1dc,0x8fb0,0x8fb1,0x8fb2,0xe1dd,
-0x8fb3,0xd2db,0x8fb4,0xb3b9,0xb1cb,0x8fb5,0x8fb6,0x8fb7,
-0xcdf9,0xd5f7,0xe1de,0x8fb8,0xbeb6,0xb4fd,0x8fb9,0xe1df,
-0xbadc,0xe1e0,0xbbb2,0xc2c9,0xe1e1,0x8fba,0x8fbb,0x8fbc,
-0xd0ec,0x8fbd,0xcdbd,0x8fbe,0x8fbf,0xe1e2,0x8fc0,0xb5c3,
-0xc5c7,0xe1e3,0x8fc1,0x8fc2,0xe1e4,0x8fc3,0x8fc4,0x8fc5,
-0x8fc6,0xd3f9,0x8fc7,0x8fc8,0x8fc9,0x8fca,0x8fcb,0x8fcc,
-0xe1e5,0x8fcd,0xd1ad,0x8fce,0x8fcf,0xe1e6,0xcea2,0x8fd0,
-0x8fd1,0x8fd2,0x8fd3,0x8fd4,0x8fd5,0xe1e7,0x8fd6,0xb5c2,
-0x8fd7,0x8fd8,0x8fd9,0x8fda,0xe1e8,0xbbd5,0x8fdb,0x8fdc,
-0x8fdd,0x8fde,0x8fdf,0xd0c4,0xe2e0,0xb1d8,0xd2e4,0x8fe0,
-0x8fe1,0xe2e1,0x8fe2,0x8fe3,0xbcc9,0xc8cc,0x8fe4,0xe2e3,
-0xecfe,0xecfd,0xdfaf,0x8fe5,0x8fe6,0x8fe7,0xe2e2,0xd6be,
-0xcdfc,0xc3a6,0x8fe8,0x8fe9,0x8fea,0xe3c3,0x8feb,0x8fec,
-0xd6d2,0xe2e7,0x8fed,0x8fee,0xe2e8,0x8fef,0x8ff0,0xd3c7,
-0x8ff1,0x8ff2,0xe2ec,0xbfec,0x8ff3,0xe2ed,0xe2e5,0x8ff4,
-0x8ff5,0xb3c0,0x8ff6,0x8ff7,0x8ff8,0xc4ee,0x8ff9,0x8ffa,
-0xe2ee,0x8ffb,0x8ffc,0xd0c3,0x8ffd,0xbaf6,0xe2e9,0xb7de,
-0xbbb3,0xccac,0xcbcb,0xe2e4,0xe2e6,0xe2ea,0xe2eb,0x8ffe,
-0x9040,0x9041,0xe2f7,0x9042,0x9043,0xe2f4,0xd4f5,0xe2f3,
-0x9044,0x9045,0xc5ad,0x9046,0xd5fa,0xc5c2,0xb2c0,0x9047,
-0x9048,0xe2ef,0x9049,0xe2f2,0xc1af,0xcbbc,0x904a,0x904b,
-0xb5a1,0xe2f9,0x904c,0x904d,0x904e,0xbcb1,0xe2f1,0xd0d4,
-0xd4b9,0xe2f5,0xb9d6,0xe2f6,0x904f,0x9050,0x9051,0xc7d3,
-0x9052,0x9053,0x9054,0x9055,0x9056,0xe2f0,0x9057,0x9058,
-0x9059,0x905a,0x905b,0xd7dc,0xeda1,0x905c,0x905d,0xe2f8,
-0x905e,0xeda5,0xe2fe,0xcad1,0x905f,0x9060,0x9061,0x9062,
-0x9063,0x9064,0x9065,0xc1b5,0x9066,0xbbd0,0x9067,0x9068,
-0xbfd6,0x9069,0xbae3,0x906a,0x906b,0xcba1,0x906c,0x906d,
-0x906e,0xeda6,0xeda3,0x906f,0x9070,0xeda2,0x9071,0x9072,
-0x9073,0x9074,0xbbd6,0xeda7,0xd0f4,0x9075,0x9076,0xeda4,
-0xbade,0xb6f7,0xe3a1,0xb6b2,0xccf1,0xb9a7,0x9077,0xcfa2,
-0xc7a1,0x9078,0x9079,0xbfd2,0x907a,0x907b,0xb6f1,0x907c,
-0xe2fa,0xe2fb,0xe2fd,0xe2fc,0xc4d5,0xe3a2,0x907d,0xd3c1,
-0x907e,0x9080,0x9081,0xe3a7,0xc7c4,0x9082,0x9083,0x9084,
-0x9085,0xcfa4,0x9086,0x9087,0xe3a9,0xbab7,0x9088,0x9089,
-0x908a,0x908b,0xe3a8,0x908c,0xbbda,0x908d,0xe3a3,0x908e,
-0x908f,0x9090,0xe3a4,0xe3aa,0x9091,0xe3a6,0x9092,0xcef2,
-0xd3c6,0x9093,0x9094,0xbbbc,0x9095,0x9096,0xd4c3,0x9097,
-0xc4fa,0x9098,0x9099,0xeda8,0xd0fc,0xe3a5,0x909a,0xc3f5,
-0x909b,0xe3ad,0xb1af,0x909c,0xe3b2,0x909d,0x909e,0x909f,
-0xbcc2,0x90a0,0x90a1,0xe3ac,0xb5bf,0x90a2,0x90a3,0x90a4,
-0x90a5,0x90a6,0x90a7,0x90a8,0x90a9,0xc7e9,0xe3b0,0x90aa,
-0x90ab,0x90ac,0xbeaa,0xcdef,0x90ad,0x90ae,0x90af,0x90b0,
-0x90b1,0xbbf3,0x90b2,0x90b3,0x90b4,0xcce8,0x90b5,0x90b6,
-0xe3af,0x90b7,0xe3b1,0x90b8,0xcfa7,0xe3ae,0x90b9,0xcea9,
-0xbbdd,0x90ba,0x90bb,0x90bc,0x90bd,0x90be,0xb5eb,0xbee5,
-0xb2d2,0xb3cd,0x90bf,0xb1b9,0xe3ab,0xb2d1,0xb5ac,0xb9df,
-0xb6e8,0x90c0,0x90c1,0xcfeb,0xe3b7,0x90c2,0xbbcc,0x90c3,
-0x90c4,0xc8c7,0xd0ca,0x90c5,0x90c6,0x90c7,0x90c8,0x90c9,
-0xe3b8,0xb3ee,0x90ca,0x90cb,0x90cc,0x90cd,0xeda9,0x90ce,
-0xd3fa,0xd3e4,0x90cf,0x90d0,0x90d1,0xedaa,0xe3b9,0xd2e2,
-0x90d2,0x90d3,0x90d4,0x90d5,0x90d6,0xe3b5,0x90d7,0x90d8,
-0x90d9,0x90da,0xd3de,0x90db,0x90dc,0x90dd,0x90de,0xb8d0,
-0xe3b3,0x90df,0x90e0,0xe3b6,0xb7df,0x90e1,0xe3b4,0xc0a2,
-0x90e2,0x90e3,0x90e4,0xe3ba,0x90e5,0x90e6,0x90e7,0x90e8,
-0x90e9,0x90ea,0x90eb,0x90ec,0x90ed,0x90ee,0x90ef,0x90f0,
-0x90f1,0x90f2,0x90f3,0x90f4,0x90f5,0x90f6,0x90f7,0xd4b8,
-0x90f8,0x90f9,0x90fa,0x90fb,0x90fc,0x90fd,0x90fe,0x9140,
-0xb4c8,0x9141,0xe3bb,0x9142,0xbbc5,0x9143,0xc9f7,0x9144,
-0x9145,0xc9e5,0x9146,0x9147,0x9148,0xc4bd,0x9149,0x914a,
-0x914b,0x914c,0x914d,0x914e,0x914f,0xedab,0x9150,0x9151,
-0x9152,0x9153,0xc2fd,0x9154,0x9155,0x9156,0x9157,0xbbdb,
-0xbfae,0x9158,0x9159,0x915a,0x915b,0x915c,0x915d,0x915e,
-0xcebf,0x915f,0x9160,0x9161,0x9162,0xe3bc,0x9163,0xbfb6,
-0x9164,0x9165,0x9166,0x9167,0x9168,0x9169,0x916a,0x916b,
-0x916c,0x916d,0x916e,0x916f,0x9170,0x9171,0x9172,0x9173,
-0x9174,0x9175,0x9176,0xb1ef,0x9177,0x9178,0xd4f7,0x9179,
-0x917a,0x917b,0x917c,0x917d,0xe3be,0x917e,0x9180,0x9181,
-0x9182,0x9183,0x9184,0x9185,0x9186,0xedad,0x9187,0x9188,
-0x9189,0x918a,0x918b,0x918c,0x918d,0x918e,0x918f,0xe3bf,
-0xbaa9,0xedac,0x9190,0x9191,0xe3bd,0x9192,0x9193,0x9194,
-0x9195,0x9196,0x9197,0x9198,0x9199,0x919a,0x919b,0xe3c0,
-0x919c,0x919d,0x919e,0x919f,0x91a0,0x91a1,0xbab6,0x91a2,
-0x91a3,0x91a4,0xb6ae,0x91a5,0x91a6,0x91a7,0x91a8,0x91a9,
-0xd0b8,0x91aa,0xb0c3,0xedae,0x91ab,0x91ac,0x91ad,0x91ae,
-0x91af,0xedaf,0xc0c1,0x91b0,0xe3c1,0x91b1,0x91b2,0x91b3,
-0x91b4,0x91b5,0x91b6,0x91b7,0x91b8,0x91b9,0x91ba,0x91bb,
-0x91bc,0x91bd,0x91be,0x91bf,0x91c0,0x91c1,0xc5b3,0x91c2,
-0x91c3,0x91c4,0x91c5,0x91c6,0x91c7,0x91c8,0x91c9,0x91ca,
-0x91cb,0x91cc,0x91cd,0x91ce,0x91cf,0xe3c2,0x91d0,0x91d1,
-0x91d2,0x91d3,0x91d4,0x91d5,0x91d6,0x91d7,0x91d8,0xdcb2,
-0x91d9,0x91da,0x91db,0x91dc,0x91dd,0x91de,0xedb0,0x91df,
-0xb8ea,0x91e0,0xceec,0xeaa7,0xd0e7,0xcaf9,0xc8d6,0xcfb7,
-0xb3c9,0xced2,0xbde4,0x91e1,0x91e2,0xe3de,0xbbf2,0xeaa8,
-0xd5bd,0x91e3,0xc6dd,0xeaa9,0x91e4,0x91e5,0x91e6,0xeaaa,
-0x91e7,0xeaac,0xeaab,0x91e8,0xeaae,0xeaad,0x91e9,0x91ea,
-0x91eb,0x91ec,0xbdd8,0x91ed,0xeaaf,0x91ee,0xc2be,0x91ef,
-0x91f0,0x91f1,0x91f2,0xb4c1,0xb4f7,0x91f3,0x91f4,0xbba7,
-0x91f5,0x91f6,0x91f7,0x91f8,0x91f9,0xece6,0xece5,0xb7bf,
-0xcbf9,0xb1e2,0x91fa,0xece7,0x91fb,0x91fc,0x91fd,0xc9c8,
-0xece8,0xece9,0x91fe,0xcad6,0xded0,0xb2c5,0xd4fa,0x9240,
-0x9241,0xc6cb,0xb0c7,0xb4f2,0xc8d3,0x9242,0x9243,0x9244,
-0xcdd0,0x9245,0x9246,0xbfb8,0x9247,0x9248,0x9249,0x924a,
-0x924b,0x924c,0x924d,0xbfdb,0x924e,0x924f,0xc7a4,0xd6b4,
-0x9250,0xc0a9,0xded1,0xc9a8,0xd1ef,0xc5a4,0xb0e7,0xb3b6,
-0xc8c5,0x9251,0x9252,0xb0e2,0x9253,0x9254,0xb7f6,0x9255,
-0x9256,0xc5fa,0x9257,0x9258,0xb6f3,0x9259,0xd5d2,0xb3d0,
-0xbcbc,0x925a,0x925b,0x925c,0xb3ad,0x925d,0x925e,0x925f,
-0x9260,0xbef1,0xb0d1,0x9261,0x9262,0x9263,0x9264,0x9265,
-0x9266,0xd2d6,0xcae3,0xd7a5,0x9267,0xcdb6,0xb6b6,0xbfb9,
-0xd5db,0x9268,0xb8a7,0xc5d7,0x9269,0x926a,0x926b,0xded2,
-0xbfd9,0xc2d5,0xc7c0,0x926c,0xbba4,0xb1a8,0x926d,0x926e,
-0xc5ea,0x926f,0x9270,0xc5fb,0xcca7,0x9271,0x9272,0x9273,
-0x9274,0xb1a7,0x9275,0x9276,0x9277,0xb5d6,0x9278,0x9279,
-0x927a,0xc4a8,0x927b,0xded3,0xd1ba,0xb3e9,0x927c,0xc3f2,
-0x927d,0x927e,0xb7f7,0x9280,0xd6f4,0xb5a3,0xb2f0,0xc4b4,
-0xc4e9,0xc0ad,0xded4,0x9281,0xb0e8,0xc5c4,0xc1e0,0x9282,
-0xb9d5,0x9283,0xbedc,0xcdd8,0xb0ce,0x9284,0xcdcf,0xded6,
-0xbed0,0xd7be,0xded5,0xd5d0,0xb0dd,0x9285,0x9286,0xc4e2,
-0x9287,0x9288,0xc2a3,0xbcf0,0x9289,0xd3b5,0xc0b9,0xc5a1,
-0xb2a6,0xd4f1,0x928a,0x928b,0xc0a8,0xcac3,0xded7,0xd5fc,
-0x928c,0xb9b0,0x928d,0xc8ad,0xcba9,0x928e,0xded9,0xbfbd,
-0x928f,0x9290,0x9291,0x9292,0xc6b4,0xd7a7,0xcab0,0xc4c3,
-0x9293,0xb3d6,0xb9d2,0x9294,0x9295,0x9296,0x9297,0xd6b8,
-0xeafc,0xb0b4,0x9298,0x9299,0x929a,0x929b,0xbfe6,0x929c,
-0x929d,0xccf4,0x929e,0x929f,0x92a0,0x92a1,0xcdda,0x92a2,
-0x92a3,0x92a4,0xd6bf,0xc2ce,0x92a5,0xcece,0xcca2,0xd0ae,
-0xc4d3,0xb5b2,0xded8,0xd5f5,0xbcb7,0xbbd3,0x92a6,0x92a7,
-0xb0a4,0x92a8,0xc5b2,0xb4ec,0x92a9,0x92aa,0x92ab,0xd5f1,
-0x92ac,0x92ad,0xeafd,0x92ae,0x92af,0x92b0,0x92b1,0x92b2,
-0x92b3,0xdeda,0xcda6,0x92b4,0x92b5,0xcdec,0x92b6,0x92b7,
-0x92b8,0x92b9,0xcee6,0xdedc,0x92ba,0xcdb1,0xc0a6,0x92bb,
-0x92bc,0xd7bd,0x92bd,0xdedb,0xb0c6,0xbab4,0xc9d3,0xc4f3,
-0xbee8,0x92be,0x92bf,0x92c0,0x92c1,0xb2b6,0x92c2,0x92c3,
-0x92c4,0x92c5,0x92c6,0x92c7,0x92c8,0x92c9,0xc0cc,0xcbf0,
-0x92ca,0xbcf1,0xbbbb,0xb5b7,0x92cb,0x92cc,0x92cd,0xc5f5,
-0x92ce,0xdee6,0x92cf,0x92d0,0x92d1,0xdee3,0xbedd,0x92d2,
-0x92d3,0xdedf,0x92d4,0x92d5,0x92d6,0x92d7,0xb4b7,0xbddd,
-0x92d8,0x92d9,0xdee0,0xc4ed,0x92da,0x92db,0x92dc,0x92dd,
-0xcfc6,0x92de,0xb5e0,0x92df,0x92e0,0x92e1,0x92e2,0xb6de,
-0xcada,0xb5f4,0xdee5,0x92e3,0xd5c6,0x92e4,0xdee1,0xcccd,
-0xc6fe,0x92e5,0xc5c5,0x92e6,0x92e7,0x92e8,0xd2b4,0x92e9,
-0xbef2,0x92ea,0x92eb,0x92ec,0x92ed,0x92ee,0x92ef,0x92f0,
-0xc2d3,0x92f1,0xccbd,0xb3b8,0x92f2,0xbdd3,0x92f3,0xbfd8,
-0xcdc6,0xd1da,0xb4eb,0x92f4,0xdee4,0xdedd,0xdee7,0x92f5,
-0xeafe,0x92f6,0x92f7,0xc2b0,0xdee2,0x92f8,0x92f9,0xd6c0,
-0xb5a7,0x92fa,0xb2f4,0x92fb,0xdee8,0x92fc,0xdef2,0x92fd,
-0x92fe,0x9340,0x9341,0x9342,0xdeed,0x9343,0xdef1,0x9344,
-0x9345,0xc8e0,0x9346,0x9347,0x9348,0xd7e1,0xdeef,0xc3e8,
-0xcce1,0x9349,0xb2e5,0x934a,0x934b,0x934c,0xd2be,0x934d,
-0x934e,0x934f,0x9350,0x9351,0x9352,0x9353,0xdeee,0x9354,
-0xdeeb,0xced5,0x9355,0xb4a7,0x9356,0x9357,0x9358,0x9359,
-0x935a,0xbfab,0xbebe,0x935b,0x935c,0xbdd2,0x935d,0x935e,
-0x935f,0x9360,0xdee9,0x9361,0xd4ae,0x9362,0xdede,0x9363,
-0xdeea,0x9364,0x9365,0x9366,0x9367,0xc0bf,0x9368,0xdeec,
-0xb2f3,0xb8e9,0xc2a7,0x9369,0x936a,0xbdc1,0x936b,0x936c,
-0x936d,0x936e,0x936f,0xdef5,0xdef8,0x9370,0x9371,0xb2ab,
-0xb4a4,0x9372,0x9373,0xb4ea,0xc9a6,0x9374,0x9375,0x9376,
-0x9377,0x9378,0x9379,0xdef6,0xcbd1,0x937a,0xb8e3,0x937b,
-0xdef7,0xdefa,0x937c,0x937d,0x937e,0x9380,0xdef9,0x9381,
-0x9382,0x9383,0xccc2,0x9384,0xb0e1,0xb4ee,0x9385,0x9386,
-0x9387,0x9388,0x9389,0x938a,0xe5ba,0x938b,0x938c,0x938d,
-0x938e,0x938f,0xd0af,0x9390,0x9391,0xb2eb,0x9392,0xeba1,
-0x9393,0xdef4,0x9394,0x9395,0xc9e3,0xdef3,0xb0da,0xd2a1,
-0xb1f7,0x9396,0xccaf,0x9397,0x9398,0x9399,0x939a,0x939b,
-0x939c,0x939d,0xdef0,0x939e,0xcba4,0x939f,0x93a0,0x93a1,
-0xd5aa,0x93a2,0x93a3,0x93a4,0x93a5,0x93a6,0xdefb,0x93a7,
-0x93a8,0x93a9,0x93aa,0x93ab,0x93ac,0x93ad,0x93ae,0xb4dd,
-0x93af,0xc4a6,0x93b0,0x93b1,0x93b2,0xdefd,0x93b3,0x93b4,
-0x93b5,0x93b6,0x93b7,0x93b8,0x93b9,0x93ba,0x93bb,0x93bc,
-0xc3fe,0xc4a1,0xdfa1,0x93bd,0x93be,0x93bf,0x93c0,0x93c1,
-0x93c2,0x93c3,0xc1cc,0x93c4,0xdefc,0xbeef,0x93c5,0xc6b2,
-0x93c6,0x93c7,0x93c8,0x93c9,0x93ca,0x93cb,0x93cc,0x93cd,
-0x93ce,0xb3c5,0xc8f6,0x93cf,0x93d0,0xcbba,0xdefe,0x93d1,
-0x93d2,0xdfa4,0x93d3,0x93d4,0x93d5,0x93d6,0xd7b2,0x93d7,
-0x93d8,0x93d9,0x93da,0x93db,0xb3b7,0x93dc,0x93dd,0x93de,
-0x93df,0xc1c3,0x93e0,0x93e1,0xc7cb,0xb2a5,0xb4e9,0x93e2,
-0xd7ab,0x93e3,0x93e4,0x93e5,0x93e6,0xc4ec,0x93e7,0xdfa2,
-0xdfa3,0x93e8,0xdfa5,0x93e9,0xbab3,0x93ea,0x93eb,0x93ec,
-0xdfa6,0x93ed,0xc0de,0x93ee,0x93ef,0xc9c3,0x93f0,0x93f1,
-0x93f2,0x93f3,0x93f4,0x93f5,0x93f6,0xb2d9,0xc7e6,0x93f7,
-0xdfa7,0x93f8,0xc7dc,0x93f9,0x93fa,0x93fb,0x93fc,0xdfa8,
-0xeba2,0x93fd,0x93fe,0x9440,0x9441,0x9442,0xcbd3,0x9443,
-0x9444,0x9445,0xdfaa,0x9446,0xdfa9,0x9447,0xb2c1,0x9448,
-0x9449,0x944a,0x944b,0x944c,0x944d,0x944e,0x944f,0x9450,
-0x9451,0x9452,0x9453,0x9454,0x9455,0x9456,0x9457,0x9458,
-0x9459,0x945a,0x945b,0x945c,0x945d,0x945e,0x945f,0x9460,
-0xc5ca,0x9461,0x9462,0x9463,0x9464,0x9465,0x9466,0x9467,
-0x9468,0xdfab,0x9469,0x946a,0x946b,0x946c,0x946d,0x946e,
-0x946f,0x9470,0xd4dc,0x9471,0x9472,0x9473,0x9474,0x9475,
-0xc8c1,0x9476,0x9477,0x9478,0x9479,0x947a,0x947b,0x947c,
-0x947d,0x947e,0x9480,0x9481,0x9482,0xdfac,0x9483,0x9484,
-0x9485,0x9486,0x9487,0xbef0,0x9488,0x9489,0xdfad,0xd6a7,
-0x948a,0x948b,0x948c,0x948d,0xeab7,0xebb6,0xcad5,0x948e,
-0xd8fc,0xb8c4,0x948f,0xb9a5,0x9490,0x9491,0xb7c5,0xd5fe,
-0x9492,0x9493,0x9494,0x9495,0x9496,0xb9ca,0x9497,0x9498,
-0xd0a7,0xf4cd,0x9499,0x949a,0xb5d0,0x949b,0x949c,0xc3f4,
-0x949d,0xbec8,0x949e,0x949f,0x94a0,0xebb7,0xb0bd,0x94a1,
-0x94a2,0xbdcc,0x94a3,0xc1b2,0x94a4,0xb1d6,0xb3a8,0x94a5,
-0x94a6,0x94a7,0xb8d2,0xc9a2,0x94a8,0x94a9,0xb6d8,0x94aa,
-0x94ab,0x94ac,0x94ad,0xebb8,0xbeb4,0x94ae,0x94af,0x94b0,
-0xcafd,0x94b1,0xc7c3,0x94b2,0xd5fb,0x94b3,0x94b4,0xb7f3,
-0x94b5,0x94b6,0x94b7,0x94b8,0x94b9,0x94ba,0x94bb,0x94bc,
-0x94bd,0x94be,0x94bf,0x94c0,0x94c1,0x94c2,0x94c3,0xcec4,
-0x94c4,0x94c5,0x94c6,0xd5ab,0xb1f3,0x94c7,0x94c8,0x94c9,
-0xecb3,0xb0df,0x94ca,0xecb5,0x94cb,0x94cc,0x94cd,0xb6b7,
-0x94ce,0xc1cf,0x94cf,0xf5fa,0xd0b1,0x94d0,0x94d1,0xd5e5,
-0x94d2,0xced3,0x94d3,0x94d4,0xbdef,0xb3e2,0x94d5,0xb8ab,
-0x94d6,0xd5b6,0x94d7,0xedbd,0x94d8,0xb6cf,0x94d9,0xcbb9,
-0xd0c2,0x94da,0x94db,0x94dc,0x94dd,0x94de,0x94df,0x94e0,
-0x94e1,0xb7bd,0x94e2,0x94e3,0xecb6,0xcaa9,0x94e4,0x94e5,
-0x94e6,0xc5d4,0x94e7,0xecb9,0xecb8,0xc2c3,0xecb7,0x94e8,
-0x94e9,0x94ea,0x94eb,0xd0fd,0xecba,0x94ec,0xecbb,0xd7e5,
-0x94ed,0x94ee,0xecbc,0x94ef,0x94f0,0x94f1,0xecbd,0xc6ec,
-0x94f2,0x94f3,0x94f4,0x94f5,0x94f6,0x94f7,0x94f8,0x94f9,
-0xcede,0x94fa,0xbcc8,0x94fb,0x94fc,0xc8d5,0xb5a9,0xbec9,
-0xd6bc,0xd4e7,0x94fd,0x94fe,0xd1ae,0xd0f1,0xeab8,0xeab9,
-0xeaba,0xbab5,0x9540,0x9541,0x9542,0x9543,0xcab1,0xbff5,
-0x9544,0x9545,0xcdfa,0x9546,0x9547,0x9548,0x9549,0x954a,
-0xeac0,0x954b,0xb0ba,0xeabe,0x954c,0x954d,0xc0a5,0x954e,
-0x954f,0x9550,0xeabb,0x9551,0xb2fd,0x9552,0xc3f7,0xbbe8,
-0x9553,0x9554,0x9555,0xd2d7,0xcef4,0xeabf,0x9556,0x9557,
-0x9558,0xeabc,0x9559,0x955a,0x955b,0xeac3,0x955c,0xd0c7,
-0xd3b3,0x955d,0x955e,0x955f,0x9560,0xb4ba,0x9561,0xc3c1,
-0xd7f2,0x9562,0x9563,0x9564,0x9565,0xd5d1,0x9566,0xcac7,
-0x9567,0xeac5,0x9568,0x9569,0xeac4,0xeac7,0xeac6,0x956a,
-0x956b,0x956c,0x956d,0x956e,0xd6e7,0x956f,0xcfd4,0x9570,
-0x9571,0xeacb,0x9572,0xbbce,0x9573,0x9574,0x9575,0x9576,
-0x9577,0x9578,0x9579,0xbdfa,0xc9ce,0x957a,0x957b,0xeacc,
-0x957c,0x957d,0xc9b9,0xcffe,0xeaca,0xd4ce,0xeacd,0xeacf,
-0x957e,0x9580,0xcded,0x9581,0x9582,0x9583,0x9584,0xeac9,
-0x9585,0xeace,0x9586,0x9587,0xceee,0x9588,0xbbde,0x9589,
-0xb3bf,0x958a,0x958b,0x958c,0x958d,0x958e,0xc6d5,0xbeb0,
-0xcefa,0x958f,0x9590,0x9591,0xc7e7,0x9592,0xbea7,0xead0,
-0x9593,0x9594,0xd6c7,0x9595,0x9596,0x9597,0xc1c0,0x9598,
-0x9599,0x959a,0xd4dd,0x959b,0xead1,0x959c,0x959d,0xcfbe,
-0x959e,0x959f,0x95a0,0x95a1,0xead2,0x95a2,0x95a3,0x95a4,
-0x95a5,0xcaee,0x95a6,0x95a7,0x95a8,0x95a9,0xc5af,0xb0b5,
-0x95aa,0x95ab,0x95ac,0x95ad,0x95ae,0xead4,0x95af,0x95b0,
-0x95b1,0x95b2,0x95b3,0x95b4,0x95b5,0x95b6,0x95b7,0xead3,
-0xf4df,0x95b8,0x95b9,0x95ba,0x95bb,0x95bc,0xc4ba,0x95bd,
-0x95be,0x95bf,0x95c0,0x95c1,0xb1a9,0x95c2,0x95c3,0x95c4,
-0x95c5,0xe5df,0x95c6,0x95c7,0x95c8,0x95c9,0xead5,0x95ca,
-0x95cb,0x95cc,0x95cd,0x95ce,0x95cf,0x95d0,0x95d1,0x95d2,
-0x95d3,0x95d4,0x95d5,0x95d6,0x95d7,0x95d8,0x95d9,0x95da,
-0x95db,0x95dc,0x95dd,0x95de,0x95df,0x95e0,0x95e1,0x95e2,
-0x95e3,0xcaef,0x95e4,0xead6,0xead7,0xc6d8,0x95e5,0x95e6,
-0x95e7,0x95e8,0x95e9,0x95ea,0x95eb,0x95ec,0xead8,0x95ed,
-0x95ee,0xead9,0x95ef,0x95f0,0x95f1,0x95f2,0x95f3,0x95f4,
-0xd4bb,0x95f5,0xc7fa,0xd2b7,0xb8fc,0x95f6,0x95f7,0xeac2,
-0x95f8,0xb2dc,0x95f9,0x95fa,0xc2fc,0x95fb,0xd4f8,0xcce6,
-0xd7ee,0x95fc,0x95fd,0x95fe,0x9640,0x9641,0x9642,0x9643,
-0xd4c2,0xd3d0,0xebc3,0xc5f3,0x9644,0xb7fe,0x9645,0x9646,
-0xebd4,0x9647,0x9648,0x9649,0xcbb7,0xebde,0x964a,0xc0ca,
-0x964b,0x964c,0x964d,0xcdfb,0x964e,0xb3af,0x964f,0xc6da,
-0x9650,0x9651,0x9652,0x9653,0x9654,0x9655,0xebfc,0x9656,
-0xc4be,0x9657,0xceb4,0xc4a9,0xb1be,0xd4fd,0x9658,0xcaf5,
-0x9659,0xd6ec,0x965a,0x965b,0xc6d3,0xb6e4,0x965c,0x965d,
-0x965e,0x965f,0xbbfa,0x9660,0x9661,0xd0e0,0x9662,0x9663,
-0xc9b1,0x9664,0xd4d3,0xc8a8,0x9665,0x9666,0xb8cb,0x9667,
-0xe8be,0xc9bc,0x9668,0x9669,0xe8bb,0x966a,0xc0ee,0xd0d3,
-0xb2c4,0xb4e5,0x966b,0xe8bc,0x966c,0x966d,0xd5c8,0x966e,
-0x966f,0x9670,0x9671,0x9672,0xb6c5,0x9673,0xe8bd,0xcaf8,
-0xb8dc,0xccf5,0x9674,0x9675,0x9676,0xc0b4,0x9677,0x9678,
-0xd1ee,0xe8bf,0xe8c2,0x9679,0x967a,0xbabc,0x967b,0xb1ad,
-0xbddc,0x967c,0xeabd,0xe8c3,0x967d,0xe8c6,0x967e,0xe8cb,
-0x9680,0x9681,0x9682,0x9683,0xe8cc,0x9684,0xcbc9,0xb0e5,
-0x9685,0xbcab,0x9686,0x9687,0xb9b9,0x9688,0x9689,0xe8c1,
-0x968a,0xcdf7,0x968b,0xe8ca,0x968c,0x968d,0x968e,0x968f,
-0xcef6,0x9690,0x9691,0x9692,0x9693,0xd5ed,0x9694,0xc1d6,
-0xe8c4,0x9695,0xc3b6,0x9696,0xb9fb,0xd6a6,0xe8c8,0x9697,
-0x9698,0x9699,0xcae0,0xd4e6,0x969a,0xe8c0,0x969b,0xe8c5,
-0xe8c7,0x969c,0xc7b9,0xb7e3,0x969d,0xe8c9,0x969e,0xbfdd,
-0xe8d2,0x969f,0x96a0,0xe8d7,0x96a1,0xe8d5,0xbcdc,0xbccf,
-0xe8db,0x96a2,0x96a3,0x96a4,0x96a5,0x96a6,0x96a7,0x96a8,
-0x96a9,0xe8de,0x96aa,0xe8da,0xb1fa,0x96ab,0x96ac,0x96ad,
-0x96ae,0x96af,0x96b0,0x96b1,0x96b2,0x96b3,0x96b4,0xb0d8,
-0xc4b3,0xb8cc,0xc6e2,0xc8be,0xc8e1,0x96b5,0x96b6,0x96b7,
-0xe8cf,0xe8d4,0xe8d6,0x96b8,0xb9f1,0xe8d8,0xd7f5,0x96b9,
-0xc4fb,0x96ba,0xe8dc,0x96bb,0x96bc,0xb2e9,0x96bd,0x96be,
-0x96bf,0xe8d1,0x96c0,0x96c1,0xbced,0x96c2,0x96c3,0xbfc2,
-0xe8cd,0xd6f9,0x96c4,0xc1f8,0xb2f1,0x96c5,0x96c6,0x96c7,
-0x96c8,0x96c9,0x96ca,0x96cb,0x96cc,0xe8df,0x96cd,0xcac1,
-0xe8d9,0x96ce,0x96cf,0x96d0,0x96d1,0xd5a4,0x96d2,0xb1ea,
-0xd5bb,0xe8ce,0xe8d0,0xb6b0,0xe8d3,0x96d3,0xe8dd,0xc0b8,
-0x96d4,0xcaf7,0x96d5,0xcba8,0x96d6,0x96d7,0xc6dc,0xc0f5,
-0x96d8,0x96d9,0x96da,0x96db,0x96dc,0xe8e9,0x96dd,0x96de,
-0x96df,0xd0a3,0x96e0,0x96e1,0x96e2,0x96e3,0x96e4,0x96e5,
-0x96e6,0xe8f2,0xd6ea,0x96e7,0x96e8,0x96e9,0x96ea,0x96eb,
-0x96ec,0x96ed,0xe8e0,0xe8e1,0x96ee,0x96ef,0x96f0,0xd1f9,
-0xbacb,0xb8f9,0x96f1,0x96f2,0xb8f1,0xd4d4,0xe8ef,0x96f3,
-0xe8ee,0xe8ec,0xb9f0,0xccd2,0xe8e6,0xcea6,0xbff2,0x96f4,
-0xb0b8,0xe8f1,0xe8f0,0x96f5,0xd7c0,0x96f6,0xe8e4,0x96f7,
-0xcda9,0xc9a3,0x96f8,0xbbb8,0xbddb,0xe8ea,0x96f9,0x96fa,
-0x96fb,0x96fc,0x96fd,0x96fe,0x9740,0x9741,0x9742,0x9743,
-0xe8e2,0xe8e3,0xe8e5,0xb5b5,0xe8e7,0xc7c5,0xe8eb,0xe8ed,
-0xbdb0,0xd7ae,0x9744,0xe8f8,0x9745,0x9746,0x9747,0x9748,
-0x9749,0x974a,0x974b,0x974c,0xe8f5,0x974d,0xcdb0,0xe8f6,
-0x974e,0x974f,0x9750,0x9751,0x9752,0x9753,0x9754,0x9755,
-0x9756,0xc1ba,0x9757,0xe8e8,0x9758,0xc3b7,0xb0f0,0x9759,
-0x975a,0x975b,0x975c,0x975d,0x975e,0x975f,0x9760,0xe8f4,
-0x9761,0x9762,0x9763,0xe8f7,0x9764,0x9765,0x9766,0xb9a3,
-0x9767,0x9768,0x9769,0x976a,0x976b,0x976c,0x976d,0x976e,
-0x976f,0x9770,0xc9d2,0x9771,0x9772,0x9773,0xc3ce,0xcee0,
-0xc0e6,0x9774,0x9775,0x9776,0x9777,0xcbf3,0x9778,0xccdd,
-0xd0b5,0x9779,0x977a,0xcae1,0x977b,0xe8f3,0x977c,0x977d,
-0x977e,0x9780,0x9781,0x9782,0x9783,0x9784,0x9785,0x9786,
-0xbcec,0x9787,0xe8f9,0x9788,0x9789,0x978a,0x978b,0x978c,
-0x978d,0xc3de,0x978e,0xc6e5,0x978f,0xb9f7,0x9790,0x9791,
-0x9792,0x9793,0xb0f4,0x9794,0x9795,0xd7d8,0x9796,0x9797,
-0xbcac,0x9798,0xc5ef,0x9799,0x979a,0x979b,0x979c,0x979d,
-0xccc4,0x979e,0x979f,0xe9a6,0x97a0,0x97a1,0x97a2,0x97a3,
-0x97a4,0x97a5,0x97a6,0x97a7,0x97a8,0x97a9,0xc9ad,0x97aa,
-0xe9a2,0xc0e2,0x97ab,0x97ac,0x97ad,0xbfc3,0x97ae,0x97af,
-0x97b0,0xe8fe,0xb9d7,0x97b1,0xe8fb,0x97b2,0x97b3,0x97b4,
-0x97b5,0xe9a4,0x97b6,0x97b7,0x97b8,0xd2ce,0x97b9,0x97ba,
-0x97bb,0x97bc,0x97bd,0xe9a3,0x97be,0xd6b2,0xd7b5,0x97bf,
-0xe9a7,0x97c0,0xbdb7,0x97c1,0x97c2,0x97c3,0x97c4,0x97c5,
-0x97c6,0x97c7,0x97c8,0x97c9,0x97ca,0x97cb,0x97cc,0xe8fc,
-0xe8fd,0x97cd,0x97ce,0x97cf,0xe9a1,0x97d0,0x97d1,0x97d2,
-0x97d3,0x97d4,0x97d5,0x97d6,0x97d7,0xcdd6,0x97d8,0x97d9,
-0xd2ac,0x97da,0x97db,0x97dc,0xe9b2,0x97dd,0x97de,0x97df,
-0x97e0,0xe9a9,0x97e1,0x97e2,0x97e3,0xb4aa,0x97e4,0xb4bb,
-0x97e5,0x97e6,0xe9ab,0x97e7,0x97e8,0x97e9,0x97ea,0x97eb,
-0x97ec,0x97ed,0x97ee,0x97ef,0x97f0,0x97f1,0x97f2,0x97f3,
-0x97f4,0x97f5,0x97f6,0x97f7,0xd0a8,0x97f8,0x97f9,0xe9a5,
-0x97fa,0x97fb,0xb3fe,0x97fc,0x97fd,0xe9ac,0xc0e3,0x97fe,
-0xe9aa,0x9840,0x9841,0xe9b9,0x9842,0x9843,0xe9b8,0x9844,
-0x9845,0x9846,0x9847,0xe9ae,0x9848,0x9849,0xe8fa,0x984a,
-0x984b,0xe9a8,0x984c,0x984d,0x984e,0x984f,0x9850,0xbfac,
-0xe9b1,0xe9ba,0x9851,0x9852,0xc2a5,0x9853,0x9854,0x9855,
-0xe9af,0x9856,0xb8c5,0x9857,0xe9ad,0x9858,0xd3dc,0xe9b4,
-0xe9b5,0xe9b7,0x9859,0x985a,0x985b,0xe9c7,0x985c,0x985d,
-0x985e,0x985f,0x9860,0x9861,0xc0c6,0xe9c5,0x9862,0x9863,
-0xe9b0,0x9864,0x9865,0xe9bb,0xb0f1,0x9866,0x9867,0x9868,
-0x9869,0x986a,0x986b,0x986c,0x986d,0x986e,0x986f,0xe9bc,
-0xd5a5,0x9870,0x9871,0xe9be,0x9872,0xe9bf,0x9873,0x9874,
-0x9875,0xe9c1,0x9876,0x9877,0xc1f1,0x9878,0x9879,0xc8b6,
-0x987a,0x987b,0x987c,0xe9bd,0x987d,0x987e,0x9880,0x9881,
-0x9882,0xe9c2,0x9883,0x9884,0x9885,0x9886,0x9887,0x9888,
-0x9889,0x988a,0xe9c3,0x988b,0xe9b3,0x988c,0xe9b6,0x988d,
-0xbbb1,0x988e,0x988f,0x9890,0xe9c0,0x9891,0x9892,0x9893,
-0x9894,0x9895,0x9896,0xbcf7,0x9897,0x9898,0x9899,0xe9c4,
-0xe9c6,0x989a,0x989b,0x989c,0x989d,0x989e,0x989f,0x98a0,
-0x98a1,0x98a2,0x98a3,0x98a4,0x98a5,0xe9ca,0x98a6,0x98a7,
-0x98a8,0x98a9,0xe9ce,0x98aa,0x98ab,0x98ac,0x98ad,0x98ae,
-0x98af,0x98b0,0x98b1,0x98b2,0x98b3,0xb2db,0x98b4,0xe9c8,
-0x98b5,0x98b6,0x98b7,0x98b8,0x98b9,0x98ba,0x98bb,0x98bc,
-0x98bd,0x98be,0xb7ae,0x98bf,0x98c0,0x98c1,0x98c2,0x98c3,
-0x98c4,0x98c5,0x98c6,0x98c7,0x98c8,0x98c9,0x98ca,0xe9cb,
-0xe9cc,0x98cb,0x98cc,0x98cd,0x98ce,0x98cf,0x98d0,0xd5c1,
-0x98d1,0xc4a3,0x98d2,0x98d3,0x98d4,0x98d5,0x98d6,0x98d7,
-0xe9d8,0x98d8,0xbae1,0x98d9,0x98da,0x98db,0x98dc,0xe9c9,
-0x98dd,0xd3a3,0x98de,0x98df,0x98e0,0xe9d4,0x98e1,0x98e2,
-0x98e3,0x98e4,0x98e5,0x98e6,0x98e7,0xe9d7,0xe9d0,0x98e8,
-0x98e9,0x98ea,0x98eb,0x98ec,0xe9cf,0x98ed,0x98ee,0xc7c1,
-0x98ef,0x98f0,0x98f1,0x98f2,0x98f3,0x98f4,0x98f5,0x98f6,
-0xe9d2,0x98f7,0x98f8,0x98f9,0x98fa,0x98fb,0x98fc,0x98fd,
-0xe9d9,0xb3c8,0x98fe,0xe9d3,0x9940,0x9941,0x9942,0x9943,
-0x9944,0xcff0,0x9945,0x9946,0x9947,0xe9cd,0x9948,0x9949,
-0x994a,0x994b,0x994c,0x994d,0x994e,0x994f,0x9950,0x9951,
-0x9952,0xb3f7,0x9953,0x9954,0x9955,0x9956,0x9957,0x9958,
-0x9959,0xe9d6,0x995a,0x995b,0xe9da,0x995c,0x995d,0x995e,
-0xccb4,0x995f,0x9960,0x9961,0xcfad,0x9962,0x9963,0x9964,
-0x9965,0x9966,0x9967,0x9968,0x9969,0x996a,0xe9d5,0x996b,
-0xe9dc,0xe9db,0x996c,0x996d,0x996e,0x996f,0x9970,0xe9de,
-0x9971,0x9972,0x9973,0x9974,0x9975,0x9976,0x9977,0x9978,
-0xe9d1,0x9979,0x997a,0x997b,0x997c,0x997d,0x997e,0x9980,
-0x9981,0xe9dd,0x9982,0xe9df,0xc3ca,0x9983,0x9984,0x9985,
-0x9986,0x9987,0x9988,0x9989,0x998a,0x998b,0x998c,0x998d,
-0x998e,0x998f,0x9990,0x9991,0x9992,0x9993,0x9994,0x9995,
-0x9996,0x9997,0x9998,0x9999,0x999a,0x999b,0x999c,0x999d,
-0x999e,0x999f,0x99a0,0x99a1,0x99a2,0x99a3,0x99a4,0x99a5,
-0x99a6,0x99a7,0x99a8,0x99a9,0x99aa,0x99ab,0x99ac,0x99ad,
-0x99ae,0x99af,0x99b0,0x99b1,0x99b2,0x99b3,0x99b4,0x99b5,
-0x99b6,0x99b7,0x99b8,0x99b9,0x99ba,0x99bb,0x99bc,0x99bd,
-0x99be,0x99bf,0x99c0,0x99c1,0x99c2,0x99c3,0x99c4,0x99c5,
-0x99c6,0x99c7,0x99c8,0x99c9,0x99ca,0x99cb,0x99cc,0x99cd,
-0x99ce,0x99cf,0x99d0,0x99d1,0x99d2,0x99d3,0x99d4,0x99d5,
-0x99d6,0x99d7,0x99d8,0x99d9,0x99da,0x99db,0x99dc,0x99dd,
-0x99de,0x99df,0x99e0,0x99e1,0x99e2,0x99e3,0x99e4,0x99e5,
-0x99e6,0x99e7,0x99e8,0x99e9,0x99ea,0x99eb,0x99ec,0x99ed,
-0x99ee,0x99ef,0x99f0,0x99f1,0x99f2,0x99f3,0x99f4,0x99f5,
-0xc7b7,0xb4ce,0xbbb6,0xd0c0,0xeca3,0x99f6,0x99f7,0xc5b7,
-0x99f8,0x99f9,0x99fa,0x99fb,0x99fc,0x99fd,0x99fe,0x9a40,
-0x9a41,0x9a42,0xd3fb,0x9a43,0x9a44,0x9a45,0x9a46,0xeca4,
-0x9a47,0xeca5,0xc6db,0x9a48,0x9a49,0x9a4a,0xbfee,0x9a4b,
-0x9a4c,0x9a4d,0x9a4e,0xeca6,0x9a4f,0x9a50,0xeca7,0xd0aa,
-0x9a51,0xc7b8,0x9a52,0x9a53,0xb8e8,0x9a54,0x9a55,0x9a56,
-0x9a57,0x9a58,0x9a59,0x9a5a,0x9a5b,0x9a5c,0x9a5d,0x9a5e,
-0x9a5f,0xeca8,0x9a60,0x9a61,0x9a62,0x9a63,0x9a64,0x9a65,
-0x9a66,0x9a67,0xd6b9,0xd5fd,0xb4cb,0xb2bd,0xcee4,0xc6e7,
-0x9a68,0x9a69,0xcde1,0x9a6a,0x9a6b,0x9a6c,0x9a6d,0x9a6e,
-0x9a6f,0x9a70,0x9a71,0x9a72,0x9a73,0x9a74,0x9a75,0x9a76,
-0x9a77,0xb4f5,0x9a78,0xcbc0,0xbcdf,0x9a79,0x9a7a,0x9a7b,
-0x9a7c,0xe9e2,0xe9e3,0xd1ea,0xe9e5,0x9a7d,0xb4f9,0xe9e4,
-0x9a7e,0xd1b3,0xcae2,0xb2d0,0x9a80,0xe9e8,0x9a81,0x9a82,
-0x9a83,0x9a84,0xe9e6,0xe9e7,0x9a85,0x9a86,0xd6b3,0x9a87,
-0x9a88,0x9a89,0xe9e9,0xe9ea,0x9a8a,0x9a8b,0x9a8c,0x9a8d,
-0x9a8e,0xe9eb,0x9a8f,0x9a90,0x9a91,0x9a92,0x9a93,0x9a94,
-0x9a95,0x9a96,0xe9ec,0x9a97,0x9a98,0x9a99,0x9a9a,0x9a9b,
-0x9a9c,0x9a9d,0x9a9e,0xecaf,0xc5b9,0xb6ce,0x9a9f,0xd2f3,
-0x9aa0,0x9aa1,0x9aa2,0x9aa3,0x9aa4,0x9aa5,0x9aa6,0xb5ee,
-0x9aa7,0xbbd9,0xecb1,0x9aa8,0x9aa9,0xd2e3,0x9aaa,0x9aab,
-0x9aac,0x9aad,0x9aae,0xcee3,0x9aaf,0xc4b8,0x9ab0,0xc3bf,
-0x9ab1,0x9ab2,0xb6be,0xd8b9,0xb1c8,0xb1cf,0xb1d1,0xc5fe,
-0x9ab3,0xb1d0,0x9ab4,0xc3ab,0x9ab5,0x9ab6,0x9ab7,0x9ab8,
-0x9ab9,0xd5b1,0x9aba,0x9abb,0x9abc,0x9abd,0x9abe,0x9abf,
-0x9ac0,0x9ac1,0xeba4,0xbac1,0x9ac2,0x9ac3,0x9ac4,0xccba,
-0x9ac5,0x9ac6,0x9ac7,0xeba5,0x9ac8,0xeba7,0x9ac9,0x9aca,
-0x9acb,0xeba8,0x9acc,0x9acd,0x9ace,0xeba6,0x9acf,0x9ad0,
-0x9ad1,0x9ad2,0x9ad3,0x9ad4,0x9ad5,0xeba9,0xebab,0xebaa,
-0x9ad6,0x9ad7,0x9ad8,0x9ad9,0x9ada,0xebac,0x9adb,0xcacf,
-0xd8b5,0xc3f1,0x9adc,0xc3a5,0xc6f8,0xebad,0xc4ca,0x9add,
-0xebae,0xebaf,0xebb0,0xb7d5,0x9ade,0x9adf,0x9ae0,0xb7fa,
-0x9ae1,0xebb1,0xc7e2,0x9ae2,0xebb3,0x9ae3,0xbaa4,0xd1f5,
-0xb0b1,0xebb2,0xebb4,0x9ae4,0x9ae5,0x9ae6,0xb5aa,0xc2c8,
-0xc7e8,0x9ae7,0xebb5,0x9ae8,0xcbae,0xe3df,0x9ae9,0x9aea,
-0xd3c0,0x9aeb,0x9aec,0x9aed,0x9aee,0xd9db,0x9aef,0x9af0,
-0xcda1,0xd6ad,0xc7f3,0x9af1,0x9af2,0x9af3,0xd9e0,0xbbe3,
-0x9af4,0xbaba,0xe3e2,0x9af5,0x9af6,0x9af7,0x9af8,0x9af9,
-0xcfab,0x9afa,0x9afb,0x9afc,0xe3e0,0xc9c7,0x9afd,0xbab9,
-0x9afe,0x9b40,0x9b41,0xd1b4,0xe3e1,0xc8ea,0xb9af,0xbdad,
-0xb3d8,0xcedb,0x9b42,0x9b43,0xccc0,0x9b44,0x9b45,0x9b46,
-0xe3e8,0xe3e9,0xcdf4,0x9b47,0x9b48,0x9b49,0x9b4a,0x9b4b,
-0xccad,0x9b4c,0xbcb3,0x9b4d,0xe3ea,0x9b4e,0xe3eb,0x9b4f,
-0x9b50,0xd0da,0x9b51,0x9b52,0x9b53,0xc6fb,0xb7da,0x9b54,
-0x9b55,0xc7df,0xd2ca,0xced6,0x9b56,0xe3e4,0xe3ec,0x9b57,
-0xc9f2,0xb3c1,0x9b58,0x9b59,0xe3e7,0x9b5a,0x9b5b,0xc6e3,
-0xe3e5,0x9b5c,0x9b5d,0xedb3,0xe3e6,0x9b5e,0x9b5f,0x9b60,
-0x9b61,0xc9b3,0x9b62,0xc5e6,0x9b63,0x9b64,0x9b65,0xb9b5,
-0x9b66,0xc3bb,0x9b67,0xe3e3,0xc5bd,0xc1a4,0xc2d9,0xb2d7,
-0x9b68,0xe3ed,0xbba6,0xc4ad,0x9b69,0xe3f0,0xbeda,0x9b6a,
-0x9b6b,0xe3fb,0xe3f5,0xbad3,0x9b6c,0x9b6d,0x9b6e,0x9b6f,
-0xb7d0,0xd3cd,0x9b70,0xd6ce,0xd5d3,0xb9c1,0xd5b4,0xd1d8,
-0x9b71,0x9b72,0x9b73,0x9b74,0xd0b9,0xc7f6,0x9b75,0x9b76,
-0x9b77,0xc8aa,0xb2b4,0x9b78,0xc3da,0x9b79,0x9b7a,0x9b7b,
-0xe3ee,0x9b7c,0x9b7d,0xe3fc,0xe3ef,0xb7a8,0xe3f7,0xe3f4,
-0x9b7e,0x9b80,0x9b81,0xb7ba,0x9b82,0x9b83,0xc5a2,0x9b84,
-0xe3f6,0xc5dd,0xb2a8,0xc6fc,0x9b85,0xc4e0,0x9b86,0x9b87,
-0xd7a2,0x9b88,0xc0e1,0xe3f9,0x9b89,0x9b8a,0xe3fa,0xe3fd,
-0xcca9,0xe3f3,0x9b8b,0xd3be,0x9b8c,0xb1c3,0xedb4,0xe3f1,
-0xe3f2,0x9b8d,0xe3f8,0xd0ba,0xc6c3,0xd4f3,0xe3fe,0x9b8e,
-0x9b8f,0xbde0,0x9b90,0x9b91,0xe4a7,0x9b92,0x9b93,0xe4a6,
-0x9b94,0x9b95,0x9b96,0xd1f3,0xe4a3,0x9b97,0xe4a9,0x9b98,
-0x9b99,0x9b9a,0xc8f7,0x9b9b,0x9b9c,0x9b9d,0x9b9e,0xcfb4,
-0x9b9f,0xe4a8,0xe4ae,0xc2e5,0x9ba0,0x9ba1,0xb6b4,0x9ba2,
-0x9ba3,0x9ba4,0x9ba5,0x9ba6,0x9ba7,0xbdf2,0x9ba8,0xe4a2,
-0x9ba9,0x9baa,0xbae9,0xe4aa,0x9bab,0x9bac,0xe4ac,0x9bad,
-0x9bae,0xb6fd,0xd6de,0xe4b2,0x9baf,0xe4ad,0x9bb0,0x9bb1,
-0x9bb2,0xe4a1,0x9bb3,0xbbee,0xcddd,0xc7a2,0xc5c9,0x9bb4,
-0x9bb5,0xc1f7,0x9bb6,0xe4a4,0x9bb7,0xc7b3,0xbdac,0xbdbd,
-0xe4a5,0x9bb8,0xd7c7,0xb2e2,0x9bb9,0xe4ab,0xbcc3,0xe4af,
-0x9bba,0xbbeb,0xe4b0,0xc5a8,0xe4b1,0x9bbb,0x9bbc,0x9bbd,
-0x9bbe,0xd5e3,0xbfa3,0x9bbf,0xe4ba,0x9bc0,0xe4b7,0x9bc1,
-0xe4bb,0x9bc2,0x9bc3,0xe4bd,0x9bc4,0x9bc5,0xc6d6,0x9bc6,
-0x9bc7,0xbac6,0xc0cb,0x9bc8,0x9bc9,0x9bca,0xb8a1,0xe4b4,
-0x9bcb,0x9bcc,0x9bcd,0x9bce,0xd4a1,0x9bcf,0x9bd0,0xbaa3,
-0xbdfe,0x9bd1,0x9bd2,0x9bd3,0xe4bc,0x9bd4,0x9bd5,0x9bd6,
-0x9bd7,0x9bd8,0xcdbf,0x9bd9,0x9bda,0xc4f9,0x9bdb,0x9bdc,
-0xcffb,0xc9e6,0x9bdd,0x9bde,0xd3bf,0x9bdf,0xcfd1,0x9be0,
-0x9be1,0xe4b3,0x9be2,0xe4b8,0xe4b9,0xcce9,0x9be3,0x9be4,
-0x9be5,0x9be6,0x9be7,0xccce,0x9be8,0xc0d4,0xe4b5,0xc1b0,
-0xe4b6,0xced0,0x9be9,0xbbc1,0xb5d3,0x9bea,0xc8f3,0xbda7,
-0xd5c7,0xc9ac,0xb8a2,0xe4ca,0x9beb,0x9bec,0xe4cc,0xd1c4,
-0x9bed,0x9bee,0xd2ba,0x9bef,0x9bf0,0xbaad,0x9bf1,0x9bf2,
-0xbad4,0x9bf3,0x9bf4,0x9bf5,0x9bf6,0x9bf7,0x9bf8,0xe4c3,
-0xb5ed,0x9bf9,0x9bfa,0x9bfb,0xd7cd,0xe4c0,0xcffd,0xe4bf,
-0x9bfc,0x9bfd,0x9bfe,0xc1dc,0xccca,0x9c40,0x9c41,0x9c42,
-0x9c43,0xcae7,0x9c44,0x9c45,0x9c46,0x9c47,0xc4d7,0x9c48,
-0xccd4,0xe4c8,0x9c49,0x9c4a,0x9c4b,0xe4c7,0xe4c1,0x9c4c,
-0xe4c4,0xb5ad,0x9c4d,0x9c4e,0xd3d9,0x9c4f,0xe4c6,0x9c50,
-0x9c51,0x9c52,0x9c53,0xd2f9,0xb4e3,0x9c54,0xbbb4,0x9c55,
-0x9c56,0xc9ee,0x9c57,0xb4be,0x9c58,0x9c59,0x9c5a,0xbbec,
-0x9c5b,0xd1cd,0x9c5c,0xcced,0xedb5,0x9c5d,0x9c5e,0x9c5f,
-0x9c60,0x9c61,0x9c62,0x9c63,0x9c64,0xc7e5,0x9c65,0x9c66,
-0x9c67,0x9c68,0xd4a8,0x9c69,0xe4cb,0xd7d5,0xe4c2,0x9c6a,
-0xbda5,0xe4c5,0x9c6b,0x9c6c,0xd3e6,0x9c6d,0xe4c9,0xc9f8,
-0x9c6e,0x9c6f,0xe4be,0x9c70,0x9c71,0xd3e5,0x9c72,0x9c73,
-0xc7fe,0xb6c9,0x9c74,0xd4fc,0xb2b3,0xe4d7,0x9c75,0x9c76,
-0x9c77,0xcec2,0x9c78,0xe4cd,0x9c79,0xcebc,0x9c7a,0xb8db,
-0x9c7b,0x9c7c,0xe4d6,0x9c7d,0xbfca,0x9c7e,0x9c80,0x9c81,
-0xd3ce,0x9c82,0xc3ec,0x9c83,0x9c84,0x9c85,0x9c86,0x9c87,
-0x9c88,0x9c89,0x9c8a,0xc5c8,0xe4d8,0x9c8b,0x9c8c,0x9c8d,
-0x9c8e,0x9c8f,0x9c90,0x9c91,0x9c92,0xcdc4,0xe4cf,0x9c93,
-0x9c94,0x9c95,0x9c96,0xe4d4,0xe4d5,0x9c97,0xbafe,0x9c98,
-0xcfe6,0x9c99,0x9c9a,0xd5bf,0x9c9b,0x9c9c,0x9c9d,0xe4d2,
-0x9c9e,0x9c9f,0x9ca0,0x9ca1,0x9ca2,0x9ca3,0x9ca4,0x9ca5,
-0x9ca6,0x9ca7,0x9ca8,0xe4d0,0x9ca9,0x9caa,0xe4ce,0x9cab,
-0x9cac,0x9cad,0x9cae,0x9caf,0x9cb0,0x9cb1,0x9cb2,0x9cb3,
-0x9cb4,0x9cb5,0x9cb6,0x9cb7,0x9cb8,0x9cb9,0xcde5,0xcaaa,
-0x9cba,0x9cbb,0x9cbc,0xc0a3,0x9cbd,0xbda6,0xe4d3,0x9cbe,
-0x9cbf,0xb8c8,0x9cc0,0x9cc1,0x9cc2,0x9cc3,0x9cc4,0xe4e7,
-0xd4b4,0x9cc5,0x9cc6,0x9cc7,0x9cc8,0x9cc9,0x9cca,0x9ccb,
-0xe4db,0x9ccc,0x9ccd,0x9cce,0xc1ef,0x9ccf,0x9cd0,0xe4e9,
-0x9cd1,0x9cd2,0xd2e7,0x9cd3,0x9cd4,0xe4df,0x9cd5,0xe4e0,
-0x9cd6,0x9cd7,0xcfaa,0x9cd8,0x9cd9,0x9cda,0x9cdb,0xcbdd,
-0x9cdc,0xe4da,0xe4d1,0x9cdd,0xe4e5,0x9cde,0xc8dc,0xe4e3,
-0x9cdf,0x9ce0,0xc4e7,0xe4e2,0x9ce1,0xe4e1,0x9ce2,0x9ce3,
-0x9ce4,0xb3fc,0xe4e8,0x9ce5,0x9ce6,0x9ce7,0x9ce8,0xb5e1,
-0x9ce9,0x9cea,0x9ceb,0xd7cc,0x9cec,0x9ced,0x9cee,0xe4e6,
-0x9cef,0xbbac,0x9cf0,0xd7d2,0xcccf,0xebf8,0x9cf1,0xe4e4,
-0x9cf2,0x9cf3,0xb9f6,0x9cf4,0x9cf5,0x9cf6,0xd6cd,0xe4d9,
-0xe4dc,0xc2fa,0xe4de,0x9cf7,0xc2cb,0xc0c4,0xc2d0,0x9cf8,
-0xb1f5,0xccb2,0x9cf9,0x9cfa,0x9cfb,0x9cfc,0x9cfd,0x9cfe,
-0x9d40,0x9d41,0x9d42,0x9d43,0xb5ce,0x9d44,0x9d45,0x9d46,
-0x9d47,0xe4ef,0x9d48,0x9d49,0x9d4a,0x9d4b,0x9d4c,0x9d4d,
-0x9d4e,0x9d4f,0xc6af,0x9d50,0x9d51,0x9d52,0xc6e1,0x9d53,
-0x9d54,0xe4f5,0x9d55,0x9d56,0x9d57,0x9d58,0x9d59,0xc2a9,
-0x9d5a,0x9d5b,0x9d5c,0xc0ec,0xd1dd,0xe4ee,0x9d5d,0x9d5e,
-0x9d5f,0x9d60,0x9d61,0x9d62,0x9d63,0x9d64,0x9d65,0x9d66,
-0xc4ae,0x9d67,0x9d68,0x9d69,0xe4ed,0x9d6a,0x9d6b,0x9d6c,
-0x9d6d,0xe4f6,0xe4f4,0xc2fe,0x9d6e,0xe4dd,0x9d6f,0xe4f0,
-0x9d70,0xcafe,0x9d71,0xd5c4,0x9d72,0x9d73,0xe4f1,0x9d74,
-0x9d75,0x9d76,0x9d77,0x9d78,0x9d79,0x9d7a,0xd1fa,0x9d7b,
-0x9d7c,0x9d7d,0x9d7e,0x9d80,0x9d81,0x9d82,0xe4eb,0xe4ec,
-0x9d83,0x9d84,0x9d85,0xe4f2,0x9d86,0xceab,0x9d87,0x9d88,
-0x9d89,0x9d8a,0x9d8b,0x9d8c,0x9d8d,0x9d8e,0x9d8f,0x9d90,
-0xc5cb,0x9d91,0x9d92,0x9d93,0xc7b1,0x9d94,0xc2ba,0x9d95,
-0x9d96,0x9d97,0xe4ea,0x9d98,0x9d99,0x9d9a,0xc1ca,0x9d9b,
-0x9d9c,0x9d9d,0x9d9e,0x9d9f,0x9da0,0xccb6,0xb3b1,0x9da1,
-0x9da2,0x9da3,0xe4fb,0x9da4,0xe4f3,0x9da5,0x9da6,0x9da7,
-0xe4fa,0x9da8,0xe4fd,0x9da9,0xe4fc,0x9daa,0x9dab,0x9dac,
-0x9dad,0x9dae,0x9daf,0x9db0,0xb3ce,0x9db1,0x9db2,0x9db3,
-0xb3ba,0xe4f7,0x9db4,0x9db5,0xe4f9,0xe4f8,0xc5ec,0x9db6,
-0x9db7,0x9db8,0x9db9,0x9dba,0x9dbb,0x9dbc,0x9dbd,0x9dbe,
-0x9dbf,0x9dc0,0x9dc1,0x9dc2,0xc0bd,0x9dc3,0x9dc4,0x9dc5,
-0x9dc6,0xd4e8,0x9dc7,0x9dc8,0x9dc9,0x9dca,0x9dcb,0xe5a2,
-0x9dcc,0x9dcd,0x9dce,0x9dcf,0x9dd0,0x9dd1,0x9dd2,0x9dd3,
-0x9dd4,0x9dd5,0x9dd6,0xb0c4,0x9dd7,0x9dd8,0xe5a4,0x9dd9,
-0x9dda,0xe5a3,0x9ddb,0x9ddc,0x9ddd,0x9dde,0x9ddf,0x9de0,
-0xbca4,0x9de1,0xe5a5,0x9de2,0x9de3,0x9de4,0x9de5,0x9de6,
-0x9de7,0xe5a1,0x9de8,0x9de9,0x9dea,0x9deb,0x9dec,0x9ded,
-0x9dee,0xe4fe,0xb1f4,0x9def,0x9df0,0x9df1,0x9df2,0x9df3,
-0x9df4,0x9df5,0x9df6,0x9df7,0x9df8,0x9df9,0xe5a8,0x9dfa,
-0xe5a9,0xe5a6,0x9dfb,0x9dfc,0x9dfd,0x9dfe,0x9e40,0x9e41,
-0x9e42,0x9e43,0x9e44,0x9e45,0x9e46,0x9e47,0xe5a7,0xe5aa,
-0x9e48,0x9e49,0x9e4a,0x9e4b,0x9e4c,0x9e4d,0x9e4e,0x9e4f,
-0x9e50,0x9e51,0x9e52,0x9e53,0x9e54,0x9e55,0x9e56,0x9e57,
-0x9e58,0x9e59,0x9e5a,0x9e5b,0x9e5c,0x9e5d,0x9e5e,0x9e5f,
-0x9e60,0x9e61,0x9e62,0x9e63,0x9e64,0x9e65,0x9e66,0x9e67,
-0x9e68,0xc6d9,0x9e69,0x9e6a,0x9e6b,0x9e6c,0x9e6d,0x9e6e,
-0x9e6f,0x9e70,0xe5ab,0xe5ad,0x9e71,0x9e72,0x9e73,0x9e74,
-0x9e75,0x9e76,0x9e77,0xe5ac,0x9e78,0x9e79,0x9e7a,0x9e7b,
-0x9e7c,0x9e7d,0x9e7e,0x9e80,0x9e81,0x9e82,0x9e83,0x9e84,
-0x9e85,0x9e86,0x9e87,0x9e88,0x9e89,0xe5af,0x9e8a,0x9e8b,
-0x9e8c,0xe5ae,0x9e8d,0x9e8e,0x9e8f,0x9e90,0x9e91,0x9e92,
-0x9e93,0x9e94,0x9e95,0x9e96,0x9e97,0x9e98,0x9e99,0x9e9a,
-0x9e9b,0x9e9c,0x9e9d,0x9e9e,0xb9e0,0x9e9f,0x9ea0,0xe5b0,
-0x9ea1,0x9ea2,0x9ea3,0x9ea4,0x9ea5,0x9ea6,0x9ea7,0x9ea8,
-0x9ea9,0x9eaa,0x9eab,0x9eac,0x9ead,0x9eae,0xe5b1,0x9eaf,
-0x9eb0,0x9eb1,0x9eb2,0x9eb3,0x9eb4,0x9eb5,0x9eb6,0x9eb7,
-0x9eb8,0x9eb9,0x9eba,0xbbf0,0xece1,0xc3f0,0x9ebb,0xb5c6,
-0xbbd2,0x9ebc,0x9ebd,0x9ebe,0x9ebf,0xc1e9,0xd4ee,0x9ec0,
-0xbec4,0x9ec1,0x9ec2,0x9ec3,0xd7c6,0x9ec4,0xd4d6,0xb2d3,
-0xecbe,0x9ec5,0x9ec6,0x9ec7,0x9ec8,0xeac1,0x9ec9,0x9eca,
-0x9ecb,0xc2af,0xb4b6,0x9ecc,0x9ecd,0x9ece,0xd1d7,0x9ecf,
-0x9ed0,0x9ed1,0xb3b4,0x9ed2,0xc8b2,0xbfbb,0xecc0,0x9ed3,
-0x9ed4,0xd6cb,0x9ed5,0x9ed6,0xecbf,0xecc1,0x9ed7,0x9ed8,
-0x9ed9,0x9eda,0x9edb,0x9edc,0x9edd,0x9ede,0x9edf,0x9ee0,
-0x9ee1,0x9ee2,0x9ee3,0xecc5,0xbee6,0xccbf,0xc5da,0xbebc,
-0x9ee4,0xecc6,0x9ee5,0xb1fe,0x9ee6,0x9ee7,0x9ee8,0xecc4,
-0xd5a8,0xb5e3,0x9ee9,0xecc2,0xc1b6,0xb3e3,0x9eea,0x9eeb,
-0xecc3,0xcbb8,0xc0c3,0xccfe,0x9eec,0x9eed,0x9eee,0x9eef,
-0xc1d2,0x9ef0,0xecc8,0x9ef1,0x9ef2,0x9ef3,0x9ef4,0x9ef5,
-0x9ef6,0x9ef7,0x9ef8,0x9ef9,0x9efa,0x9efb,0x9efc,0x9efd,
-0xbae6,0xc0d3,0x9efe,0xd6f2,0x9f40,0x9f41,0x9f42,0xd1cc,
-0x9f43,0x9f44,0x9f45,0x9f46,0xbfbe,0x9f47,0xb7b3,0xc9d5,
-0xecc7,0xbbe2,0x9f48,0xcccc,0xbdfd,0xc8c8,0x9f49,0xcfa9,
-0x9f4a,0x9f4b,0x9f4c,0x9f4d,0x9f4e,0x9f4f,0x9f50,0xcde9,
-0x9f51,0xc5eb,0x9f52,0x9f53,0x9f54,0xb7e9,0x9f55,0x9f56,
-0x9f57,0x9f58,0x9f59,0x9f5a,0x9f5b,0x9f5c,0x9f5d,0x9f5e,
-0x9f5f,0xd1c9,0xbab8,0x9f60,0x9f61,0x9f62,0x9f63,0x9f64,
-0xecc9,0x9f65,0x9f66,0xecca,0x9f67,0xbbc0,0xeccb,0x9f68,
-0xece2,0xb1ba,0xb7d9,0x9f69,0x9f6a,0x9f6b,0x9f6c,0x9f6d,
-0x9f6e,0x9f6f,0x9f70,0x9f71,0x9f72,0x9f73,0xbdb9,0x9f74,
-0x9f75,0x9f76,0x9f77,0x9f78,0x9f79,0x9f7a,0x9f7b,0xeccc,
-0xd1e6,0xeccd,0x9f7c,0x9f7d,0x9f7e,0x9f80,0xc8bb,0x9f81,
-0x9f82,0x9f83,0x9f84,0x9f85,0x9f86,0x9f87,0x9f88,0x9f89,
-0x9f8a,0x9f8b,0x9f8c,0x9f8d,0x9f8e,0xecd1,0x9f8f,0x9f90,
-0x9f91,0x9f92,0xecd3,0x9f93,0xbbcd,0x9f94,0xbce5,0x9f95,
-0x9f96,0x9f97,0x9f98,0x9f99,0x9f9a,0x9f9b,0x9f9c,0x9f9d,
-0x9f9e,0x9f9f,0x9fa0,0x9fa1,0xeccf,0x9fa2,0xc9b7,0x9fa3,
-0x9fa4,0x9fa5,0x9fa6,0x9fa7,0xc3ba,0x9fa8,0xece3,0xd5d5,
-0xecd0,0x9fa9,0x9faa,0x9fab,0x9fac,0x9fad,0xd6f3,0x9fae,
-0x9faf,0x9fb0,0xecd2,0xecce,0x9fb1,0x9fb2,0x9fb3,0x9fb4,
-0xecd4,0x9fb5,0xecd5,0x9fb6,0x9fb7,0xc9bf,0x9fb8,0x9fb9,
-0x9fba,0x9fbb,0x9fbc,0x9fbd,0xcfa8,0x9fbe,0x9fbf,0x9fc0,
-0x9fc1,0x9fc2,0xd0dc,0x9fc3,0x9fc4,0x9fc5,0x9fc6,0xd1ac,
-0x9fc7,0x9fc8,0x9fc9,0x9fca,0xc8db,0x9fcb,0x9fcc,0x9fcd,
-0xecd6,0xcef5,0x9fce,0x9fcf,0x9fd0,0x9fd1,0x9fd2,0xcaec,
-0xecda,0x9fd3,0x9fd4,0x9fd5,0x9fd6,0x9fd7,0x9fd8,0x9fd9,
-0xecd9,0x9fda,0x9fdb,0x9fdc,0xb0be,0x9fdd,0x9fde,0x9fdf,
-0x9fe0,0x9fe1,0x9fe2,0xecd7,0x9fe3,0xecd8,0x9fe4,0x9fe5,
-0x9fe6,0xece4,0x9fe7,0x9fe8,0x9fe9,0x9fea,0x9feb,0x9fec,
-0x9fed,0x9fee,0x9fef,0xc8bc,0x9ff0,0x9ff1,0x9ff2,0x9ff3,
-0x9ff4,0x9ff5,0x9ff6,0x9ff7,0x9ff8,0x9ff9,0xc1c7,0x9ffa,
-0x9ffb,0x9ffc,0x9ffd,0x9ffe,0xecdc,0xd1e0,0xa040,0xa041,
-0xa042,0xa043,0xa044,0xa045,0xa046,0xa047,0xa048,0xa049,
-0xecdb,0xa04a,0xa04b,0xa04c,0xa04d,0xd4ef,0xa04e,0xecdd,
-0xa04f,0xa050,0xa051,0xa052,0xa053,0xa054,0xdbc6,0xa055,
-0xa056,0xa057,0xa058,0xa059,0xa05a,0xa05b,0xa05c,0xa05d,
-0xa05e,0xecde,0xa05f,0xa060,0xa061,0xa062,0xa063,0xa064,
-0xa065,0xa066,0xa067,0xa068,0xa069,0xa06a,0xb1ac,0xa06b,
-0xa06c,0xa06d,0xa06e,0xa06f,0xa070,0xa071,0xa072,0xa073,
-0xa074,0xa075,0xa076,0xa077,0xa078,0xa079,0xa07a,0xa07b,
-0xa07c,0xa07d,0xa07e,0xa080,0xa081,0xecdf,0xa082,0xa083,
-0xa084,0xa085,0xa086,0xa087,0xa088,0xa089,0xa08a,0xa08b,
-0xece0,0xa08c,0xd7a6,0xa08d,0xc5c0,0xa08e,0xa08f,0xa090,
-0xebbc,0xb0ae,0xa091,0xa092,0xa093,0xbef4,0xb8b8,0xd2af,
-0xb0d6,0xb5f9,0xa094,0xd8b3,0xa095,0xcbac,0xa096,0xe3dd,
-0xa097,0xa098,0xa099,0xa09a,0xa09b,0xa09c,0xa09d,0xc6ac,
-0xb0e6,0xa09e,0xa09f,0xa0a0,0xc5c6,0xebb9,0xa0a1,0xa0a2,
-0xa0a3,0xa0a4,0xebba,0xa0a5,0xa0a6,0xa0a7,0xebbb,0xa0a8,
-0xa0a9,0xd1c0,0xa0aa,0xc5a3,0xa0ab,0xeaf2,0xa0ac,0xc4b2,
-0xa0ad,0xc4b5,0xc0ce,0xa0ae,0xa0af,0xa0b0,0xeaf3,0xc4c1,
-0xa0b1,0xceef,0xa0b2,0xa0b3,0xa0b4,0xa0b5,0xeaf0,0xeaf4,
-0xa0b6,0xa0b7,0xc9fc,0xa0b8,0xa0b9,0xc7a3,0xa0ba,0xa0bb,
-0xa0bc,0xccd8,0xcefe,0xa0bd,0xa0be,0xa0bf,0xeaf5,0xeaf6,
-0xcfac,0xc0e7,0xa0c0,0xa0c1,0xeaf7,0xa0c2,0xa0c3,0xa0c4,
-0xa0c5,0xa0c6,0xb6bf,0xeaf8,0xa0c7,0xeaf9,0xa0c8,0xeafa,
-0xa0c9,0xa0ca,0xeafb,0xa0cb,0xa0cc,0xa0cd,0xa0ce,0xa0cf,
-0xa0d0,0xa0d1,0xa0d2,0xa0d3,0xa0d4,0xa0d5,0xa0d6,0xeaf1,
-0xa0d7,0xa0d8,0xa0d9,0xa0da,0xa0db,0xa0dc,0xa0dd,0xa0de,
-0xa0df,0xa0e0,0xa0e1,0xa0e2,0xc8ae,0xe1eb,0xa0e3,0xb7b8,
-0xe1ec,0xa0e4,0xa0e5,0xa0e6,0xe1ed,0xa0e7,0xd7b4,0xe1ee,
-0xe1ef,0xd3cc,0xa0e8,0xa0e9,0xa0ea,0xa0eb,0xa0ec,0xa0ed,
-0xa0ee,0xe1f1,0xbff1,0xe1f0,0xb5d2,0xa0ef,0xa0f0,0xa0f1,
-0xb1b7,0xa0f2,0xa0f3,0xa0f4,0xa0f5,0xe1f3,0xe1f2,0xa0f6,
-0xbafc,0xa0f7,0xe1f4,0xa0f8,0xa0f9,0xa0fa,0xa0fb,0xb9b7,
-0xa0fc,0xbed1,0xa0fd,0xa0fe,0xaa40,0xaa41,0xc4fc,0xaa42,
-0xbadd,0xbdc6,0xaa43,0xaa44,0xaa45,0xaa46,0xaa47,0xaa48,
-0xe1f5,0xe1f7,0xaa49,0xaa4a,0xb6c0,0xcfc1,0xcaa8,0xe1f6,
-0xd5f8,0xd3fc,0xe1f8,0xe1fc,0xe1f9,0xaa4b,0xaa4c,0xe1fa,
-0xc0ea,0xaa4d,0xe1fe,0xe2a1,0xc0c7,0xaa4e,0xaa4f,0xaa50,
-0xaa51,0xe1fb,0xaa52,0xe1fd,0xaa53,0xaa54,0xaa55,0xaa56,
-0xaa57,0xaa58,0xe2a5,0xaa59,0xaa5a,0xaa5b,0xc1d4,0xaa5c,
-0xaa5d,0xaa5e,0xaa5f,0xe2a3,0xaa60,0xe2a8,0xb2fe,0xe2a2,
-0xaa61,0xaa62,0xaa63,0xc3cd,0xb2c2,0xe2a7,0xe2a6,0xaa64,
-0xaa65,0xe2a4,0xe2a9,0xaa66,0xaa67,0xe2ab,0xaa68,0xaa69,
-0xaa6a,0xd0c9,0xd6ed,0xc3a8,0xe2ac,0xaa6b,0xcfd7,0xaa6c,
-0xaa6d,0xe2ae,0xaa6e,0xaa6f,0xbaef,0xaa70,0xaa71,0xe9e0,
-0xe2ad,0xe2aa,0xaa72,0xaa73,0xaa74,0xaa75,0xbbab,0xd4b3,
-0xaa76,0xaa77,0xaa78,0xaa79,0xaa7a,0xaa7b,0xaa7c,0xaa7d,
-0xaa7e,0xaa80,0xaa81,0xaa82,0xaa83,0xe2b0,0xaa84,0xaa85,
-0xe2af,0xaa86,0xe9e1,0xaa87,0xaa88,0xaa89,0xaa8a,0xe2b1,
-0xaa8b,0xaa8c,0xaa8d,0xaa8e,0xaa8f,0xaa90,0xaa91,0xaa92,
-0xe2b2,0xaa93,0xaa94,0xaa95,0xaa96,0xaa97,0xaa98,0xaa99,
-0xaa9a,0xaa9b,0xaa9c,0xaa9d,0xe2b3,0xcca1,0xaa9e,0xe2b4,
-0xaa9f,0xaaa0,0xab40,0xab41,0xab42,0xab43,0xab44,0xab45,
-0xab46,0xab47,0xab48,0xab49,0xab4a,0xab4b,0xe2b5,0xab4c,
-0xab4d,0xab4e,0xab4f,0xab50,0xd0fe,0xab51,0xab52,0xc2ca,
-0xab53,0xd3f1,0xab54,0xcdf5,0xab55,0xab56,0xe7e0,0xab57,
-0xab58,0xe7e1,0xab59,0xab5a,0xab5b,0xab5c,0xbec1,0xab5d,
-0xab5e,0xab5f,0xab60,0xc2ea,0xab61,0xab62,0xab63,0xe7e4,
-0xab64,0xab65,0xe7e3,0xab66,0xab67,0xab68,0xab69,0xab6a,
-0xab6b,0xcde6,0xab6c,0xc3b5,0xab6d,0xab6e,0xe7e2,0xbbb7,
-0xcfd6,0xab6f,0xc1e1,0xe7e9,0xab70,0xab71,0xab72,0xe7e8,
-0xab73,0xab74,0xe7f4,0xb2a3,0xab75,0xab76,0xab77,0xab78,
-0xe7ea,0xab79,0xe7e6,0xab7a,0xab7b,0xab7c,0xab7d,0xab7e,
-0xe7ec,0xe7eb,0xc9ba,0xab80,0xab81,0xd5e4,0xab82,0xe7e5,
-0xb7a9,0xe7e7,0xab83,0xab84,0xab85,0xab86,0xab87,0xab88,
-0xab89,0xe7ee,0xab8a,0xab8b,0xab8c,0xab8d,0xe7f3,0xab8e,
-0xd6e9,0xab8f,0xab90,0xab91,0xab92,0xe7ed,0xab93,0xe7f2,
-0xab94,0xe7f1,0xab95,0xab96,0xab97,0xb0e0,0xab98,0xab99,
-0xab9a,0xab9b,0xe7f5,0xab9c,0xab9d,0xab9e,0xab9f,0xaba0,
-0xac40,0xac41,0xac42,0xac43,0xac44,0xac45,0xac46,0xac47,
-0xac48,0xac49,0xac4a,0xc7f2,0xac4b,0xc0c5,0xc0ed,0xac4c,
-0xac4d,0xc1f0,0xe7f0,0xac4e,0xac4f,0xac50,0xac51,0xe7f6,
-0xcbf6,0xac52,0xac53,0xac54,0xac55,0xac56,0xac57,0xac58,
-0xac59,0xac5a,0xe8a2,0xe8a1,0xac5b,0xac5c,0xac5d,0xac5e,
-0xac5f,0xac60,0xd7c1,0xac61,0xac62,0xe7fa,0xe7f9,0xac63,
-0xe7fb,0xac64,0xe7f7,0xac65,0xe7fe,0xac66,0xe7fd,0xac67,
-0xe7fc,0xac68,0xac69,0xc1d5,0xc7d9,0xc5fd,0xc5c3,0xac6a,
-0xac6b,0xac6c,0xac6d,0xac6e,0xc7ed,0xac6f,0xac70,0xac71,
-0xac72,0xe8a3,0xac73,0xac74,0xac75,0xac76,0xac77,0xac78,
-0xac79,0xac7a,0xac7b,0xac7c,0xac7d,0xac7e,0xac80,0xac81,
-0xac82,0xac83,0xac84,0xac85,0xac86,0xe8a6,0xac87,0xe8a5,
-0xac88,0xe8a7,0xbaf7,0xe7f8,0xe8a4,0xac89,0xc8f0,0xc9aa,
-0xac8a,0xac8b,0xac8c,0xac8d,0xac8e,0xac8f,0xac90,0xac91,
-0xac92,0xac93,0xac94,0xac95,0xac96,0xe8a9,0xac97,0xac98,
-0xb9e5,0xac99,0xac9a,0xac9b,0xac9c,0xac9d,0xd1fe,0xe8a8,
-0xac9e,0xac9f,0xaca0,0xad40,0xad41,0xad42,0xe8aa,0xad43,
-0xe8ad,0xe8ae,0xad44,0xc1a7,0xad45,0xad46,0xad47,0xe8af,
-0xad48,0xad49,0xad4a,0xe8b0,0xad4b,0xad4c,0xe8ac,0xad4d,
-0xe8b4,0xad4e,0xad4f,0xad50,0xad51,0xad52,0xad53,0xad54,
-0xad55,0xad56,0xad57,0xad58,0xe8ab,0xad59,0xe8b1,0xad5a,
-0xad5b,0xad5c,0xad5d,0xad5e,0xad5f,0xad60,0xad61,0xe8b5,
-0xe8b2,0xe8b3,0xad62,0xad63,0xad64,0xad65,0xad66,0xad67,
-0xad68,0xad69,0xad6a,0xad6b,0xad6c,0xad6d,0xad6e,0xad6f,
-0xad70,0xad71,0xe8b7,0xad72,0xad73,0xad74,0xad75,0xad76,
-0xad77,0xad78,0xad79,0xad7a,0xad7b,0xad7c,0xad7d,0xad7e,
-0xad80,0xad81,0xad82,0xad83,0xad84,0xad85,0xad86,0xad87,
-0xad88,0xad89,0xe8b6,0xad8a,0xad8b,0xad8c,0xad8d,0xad8e,
-0xad8f,0xad90,0xad91,0xad92,0xb9cf,0xad93,0xf0ac,0xad94,
-0xf0ad,0xad95,0xc6b0,0xb0ea,0xc8bf,0xad96,0xcddf,0xad97,
-0xad98,0xad99,0xad9a,0xad9b,0xad9c,0xad9d,0xcecd,0xeab1,
-0xad9e,0xad9f,0xada0,0xae40,0xeab2,0xae41,0xc6bf,0xb4c9,
-0xae42,0xae43,0xae44,0xae45,0xae46,0xae47,0xae48,0xeab3,
-0xae49,0xae4a,0xae4b,0xae4c,0xd5e7,0xae4d,0xae4e,0xae4f,
-0xae50,0xae51,0xae52,0xae53,0xae54,0xddf9,0xae55,0xeab4,
-0xae56,0xeab5,0xae57,0xeab6,0xae58,0xae59,0xae5a,0xae5b,
-0xb8ca,0xdfb0,0xc9f5,0xae5c,0xccf0,0xae5d,0xae5e,0xc9fa,
-0xae5f,0xae60,0xae61,0xae62,0xae63,0xc9fb,0xae64,0xae65,
-0xd3c3,0xcba6,0xae66,0xb8a6,0xf0ae,0xb1c2,0xae67,0xe5b8,
-0xccef,0xd3c9,0xbcd7,0xc9ea,0xae68,0xb5e7,0xae69,0xc4d0,
-0xb5e9,0xae6a,0xeeae,0xbbad,0xae6b,0xae6c,0xe7de,0xae6d,
-0xeeaf,0xae6e,0xae6f,0xae70,0xae71,0xb3a9,0xae72,0xae73,
-0xeeb2,0xae74,0xae75,0xeeb1,0xbde7,0xae76,0xeeb0,0xceb7,
-0xae77,0xae78,0xae79,0xae7a,0xc5cf,0xae7b,0xae7c,0xae7d,
-0xae7e,0xc1f4,0xdbce,0xeeb3,0xd0f3,0xae80,0xae81,0xae82,
-0xae83,0xae84,0xae85,0xae86,0xae87,0xc2d4,0xc6e8,0xae88,
-0xae89,0xae8a,0xb7ac,0xae8b,0xae8c,0xae8d,0xae8e,0xae8f,
-0xae90,0xae91,0xeeb4,0xae92,0xb3eb,0xae93,0xae94,0xae95,
-0xbbfb,0xeeb5,0xae96,0xae97,0xae98,0xae99,0xae9a,0xe7dc,
-0xae9b,0xae9c,0xae9d,0xeeb6,0xae9e,0xae9f,0xbdae,0xaea0,
-0xaf40,0xaf41,0xaf42,0xf1e2,0xaf43,0xaf44,0xaf45,0xcae8,
-0xaf46,0xd2c9,0xf0da,0xaf47,0xf0db,0xaf48,0xf0dc,0xc1c6,
-0xaf49,0xb8ed,0xbece,0xaf4a,0xaf4b,0xf0de,0xaf4c,0xc5b1,
-0xf0dd,0xd1f1,0xaf4d,0xf0e0,0xb0cc,0xbdea,0xaf4e,0xaf4f,
-0xaf50,0xaf51,0xaf52,0xd2df,0xf0df,0xaf53,0xb4af,0xb7e8,
-0xf0e6,0xf0e5,0xc6a3,0xf0e1,0xf0e2,0xb4c3,0xaf54,0xaf55,
-0xf0e3,0xd5ee,0xaf56,0xaf57,0xccdb,0xbed2,0xbcb2,0xaf58,
-0xaf59,0xaf5a,0xf0e8,0xf0e7,0xf0e4,0xb2a1,0xaf5b,0xd6a2,
-0xd3b8,0xbeb7,0xc8ac,0xaf5c,0xaf5d,0xf0ea,0xaf5e,0xaf5f,
-0xaf60,0xaf61,0xd1f7,0xaf62,0xd6cc,0xbadb,0xf0e9,0xaf63,
-0xb6bb,0xaf64,0xaf65,0xcdb4,0xaf66,0xaf67,0xc6a6,0xaf68,
-0xaf69,0xaf6a,0xc1a1,0xf0eb,0xf0ee,0xaf6b,0xf0ed,0xf0f0,
-0xf0ec,0xaf6c,0xbbbe,0xf0ef,0xaf6d,0xaf6e,0xaf6f,0xaf70,
-0xccb5,0xf0f2,0xaf71,0xaf72,0xb3d5,0xaf73,0xaf74,0xaf75,
-0xaf76,0xb1d4,0xaf77,0xaf78,0xf0f3,0xaf79,0xaf7a,0xf0f4,
-0xf0f6,0xb4e1,0xaf7b,0xf0f1,0xaf7c,0xf0f7,0xaf7d,0xaf7e,
-0xaf80,0xaf81,0xf0fa,0xaf82,0xf0f8,0xaf83,0xaf84,0xaf85,
-0xf0f5,0xaf86,0xaf87,0xaf88,0xaf89,0xf0fd,0xaf8a,0xf0f9,
-0xf0fc,0xf0fe,0xaf8b,0xf1a1,0xaf8c,0xaf8d,0xaf8e,0xcec1,
-0xf1a4,0xaf8f,0xf1a3,0xaf90,0xc1f6,0xf0fb,0xcadd,0xaf91,
-0xaf92,0xb4f1,0xb1f1,0xccb1,0xaf93,0xf1a6,0xaf94,0xaf95,
-0xf1a7,0xaf96,0xaf97,0xf1ac,0xd5ce,0xf1a9,0xaf98,0xaf99,
-0xc8b3,0xaf9a,0xaf9b,0xaf9c,0xf1a2,0xaf9d,0xf1ab,0xf1a8,
-0xf1a5,0xaf9e,0xaf9f,0xf1aa,0xafa0,0xb040,0xb041,0xb042,
-0xb043,0xb044,0xb045,0xb046,0xb0a9,0xf1ad,0xb047,0xb048,
-0xb049,0xb04a,0xb04b,0xb04c,0xf1af,0xb04d,0xf1b1,0xb04e,
-0xb04f,0xb050,0xb051,0xb052,0xf1b0,0xb053,0xf1ae,0xb054,
-0xb055,0xb056,0xb057,0xd1a2,0xb058,0xb059,0xb05a,0xb05b,
-0xb05c,0xb05d,0xb05e,0xf1b2,0xb05f,0xb060,0xb061,0xf1b3,
-0xb062,0xb063,0xb064,0xb065,0xb066,0xb067,0xb068,0xb069,
-0xb9ef,0xb06a,0xb06b,0xb5c7,0xb06c,0xb0d7,0xb0d9,0xb06d,
-0xb06e,0xb06f,0xd4ed,0xb070,0xb5c4,0xb071,0xbdd4,0xbbca,
-0xf0a7,0xb072,0xb073,0xb8de,0xb074,0xb075,0xf0a8,0xb076,
-0xb077,0xb0a8,0xb078,0xf0a9,0xb079,0xb07a,0xcdee,0xb07b,
-0xb07c,0xf0aa,0xb07d,0xb07e,0xb080,0xb081,0xb082,0xb083,
-0xb084,0xb085,0xb086,0xb087,0xf0ab,0xb088,0xb089,0xb08a,
-0xb08b,0xb08c,0xb08d,0xb08e,0xb08f,0xb090,0xc6a4,0xb091,
-0xb092,0xd6e5,0xf1e4,0xb093,0xf1e5,0xb094,0xb095,0xb096,
-0xb097,0xb098,0xb099,0xb09a,0xb09b,0xb09c,0xb09d,0xc3f3,
-0xb09e,0xb09f,0xd3db,0xb0a0,0xb140,0xd6d1,0xc5e8,0xb141,
-0xd3af,0xb142,0xd2e6,0xb143,0xb144,0xeec1,0xb0bb,0xd5b5,
-0xd1ce,0xbce0,0xbad0,0xb145,0xbff8,0xb146,0xb8c7,0xb5c1,
-0xc5cc,0xb147,0xb148,0xcaa2,0xb149,0xb14a,0xb14b,0xc3cb,
-0xb14c,0xb14d,0xb14e,0xb14f,0xb150,0xeec2,0xb151,0xb152,
-0xb153,0xb154,0xb155,0xb156,0xb157,0xb158,0xc4bf,0xb6a2,
-0xb159,0xedec,0xc3a4,0xb15a,0xd6b1,0xb15b,0xb15c,0xb15d,
-0xcfe0,0xedef,0xb15e,0xb15f,0xc5ce,0xb160,0xb6dc,0xb161,
-0xb162,0xcaa1,0xb163,0xb164,0xeded,0xb165,0xb166,0xedf0,
-0xedf1,0xc3bc,0xb167,0xbfb4,0xb168,0xedee,0xb169,0xb16a,
-0xb16b,0xb16c,0xb16d,0xb16e,0xb16f,0xb170,0xb171,0xb172,
-0xb173,0xedf4,0xedf2,0xb174,0xb175,0xb176,0xb177,0xd5e6,
-0xc3df,0xb178,0xedf3,0xb179,0xb17a,0xb17b,0xedf6,0xb17c,
-0xd5a3,0xd1a3,0xb17d,0xb17e,0xb180,0xedf5,0xb181,0xc3d0,
-0xb182,0xb183,0xb184,0xb185,0xb186,0xedf7,0xbff4,0xbeec,
-0xedf8,0xb187,0xccf7,0xb188,0xd1db,0xb189,0xb18a,0xb18b,
-0xd7c5,0xd5f6,0xb18c,0xedfc,0xb18d,0xb18e,0xb18f,0xedfb,
-0xb190,0xb191,0xb192,0xb193,0xb194,0xb195,0xb196,0xb197,
-0xedf9,0xedfa,0xb198,0xb199,0xb19a,0xb19b,0xb19c,0xb19d,
-0xb19e,0xb19f,0xedfd,0xbea6,0xb1a0,0xb240,0xb241,0xb242,
-0xb243,0xcbaf,0xeea1,0xb6bd,0xb244,0xeea2,0xc4c0,0xb245,
-0xedfe,0xb246,0xb247,0xbdde,0xb2c7,0xb248,0xb249,0xb24a,
-0xb24b,0xb24c,0xb24d,0xb24e,0xb24f,0xb250,0xb251,0xb252,
-0xb253,0xb6c3,0xb254,0xb255,0xb256,0xeea5,0xd8ba,0xeea3,
-0xeea6,0xb257,0xb258,0xb259,0xc3e9,0xb3f2,0xb25a,0xb25b,
-0xb25c,0xb25d,0xb25e,0xb25f,0xeea7,0xeea4,0xcfb9,0xb260,
-0xb261,0xeea8,0xc2f7,0xb262,0xb263,0xb264,0xb265,0xb266,
-0xb267,0xb268,0xb269,0xb26a,0xb26b,0xb26c,0xb26d,0xeea9,
-0xeeaa,0xb26e,0xdeab,0xb26f,0xb270,0xc6b3,0xb271,0xc7c6,
-0xb272,0xd6f5,0xb5c9,0xb273,0xcbb2,0xb274,0xb275,0xb276,
-0xeeab,0xb277,0xb278,0xcdab,0xb279,0xeeac,0xb27a,0xb27b,
-0xb27c,0xb27d,0xb27e,0xd5b0,0xb280,0xeead,0xb281,0xf6c4,
-0xb282,0xb283,0xb284,0xb285,0xb286,0xb287,0xb288,0xb289,
-0xb28a,0xb28b,0xb28c,0xb28d,0xb28e,0xdbc7,0xb28f,0xb290,
-0xb291,0xb292,0xb293,0xb294,0xb295,0xb296,0xb297,0xb4a3,
-0xb298,0xb299,0xb29a,0xc3ac,0xf1e6,0xb29b,0xb29c,0xb29d,
-0xb29e,0xb29f,0xcab8,0xd2d3,0xb2a0,0xd6aa,0xb340,0xeff2,
-0xb341,0xbed8,0xb342,0xbdc3,0xeff3,0xb6cc,0xb0ab,0xb343,
-0xb344,0xb345,0xb346,0xcaaf,0xb347,0xb348,0xedb6,0xb349,
-0xedb7,0xb34a,0xb34b,0xb34c,0xb34d,0xcef9,0xb7af,0xbff3,
-0xedb8,0xc2eb,0xc9b0,0xb34e,0xb34f,0xb350,0xb351,0xb352,
-0xb353,0xedb9,0xb354,0xb355,0xc6f6,0xbfb3,0xb356,0xb357,
-0xb358,0xedbc,0xc5f8,0xb359,0xd1d0,0xb35a,0xd7a9,0xedba,
-0xedbb,0xb35b,0xd1e2,0xb35c,0xedbf,0xedc0,0xb35d,0xedc4,
-0xb35e,0xb35f,0xb360,0xedc8,0xb361,0xedc6,0xedce,0xd5e8,
-0xb362,0xedc9,0xb363,0xb364,0xedc7,0xedbe,0xb365,0xb366,
-0xc5e9,0xb367,0xb368,0xb369,0xc6c6,0xb36a,0xb36b,0xc9e9,
-0xd4d2,0xedc1,0xedc2,0xedc3,0xedc5,0xb36c,0xc0f9,0xb36d,
-0xb4a1,0xb36e,0xb36f,0xb370,0xb371,0xb9e8,0xb372,0xedd0,
-0xb373,0xb374,0xb375,0xb376,0xedd1,0xb377,0xedca,0xb378,
-0xedcf,0xb379,0xcef8,0xb37a,0xb37b,0xcbb6,0xedcc,0xedcd,
-0xb37c,0xb37d,0xb37e,0xb380,0xb381,0xcff5,0xb382,0xb383,
-0xb384,0xb385,0xb386,0xb387,0xb388,0xb389,0xb38a,0xb38b,
-0xb38c,0xb38d,0xedd2,0xc1f2,0xd3b2,0xedcb,0xc8b7,0xb38e,
-0xb38f,0xb390,0xb391,0xb392,0xb393,0xb394,0xb395,0xbcef,
-0xb396,0xb397,0xb398,0xb399,0xc5f0,0xb39a,0xb39b,0xb39c,
-0xb39d,0xb39e,0xb39f,0xb3a0,0xb440,0xb441,0xb442,0xedd6,
-0xb443,0xb5ef,0xb444,0xb445,0xc2b5,0xb0ad,0xcbe9,0xb446,
-0xb447,0xb1ae,0xb448,0xedd4,0xb449,0xb44a,0xb44b,0xcdeb,
-0xb5e2,0xb44c,0xedd5,0xedd3,0xedd7,0xb44d,0xb44e,0xb5fa,
-0xb44f,0xedd8,0xb450,0xedd9,0xb451,0xeddc,0xb452,0xb1cc,
-0xb453,0xb454,0xb455,0xb456,0xb457,0xb458,0xb459,0xb45a,
-0xc5f6,0xbcee,0xedda,0xccbc,0xb2ea,0xb45b,0xb45c,0xb45d,
-0xb45e,0xeddb,0xb45f,0xb460,0xb461,0xb462,0xc4eb,0xb463,
-0xb464,0xb4c5,0xb465,0xb466,0xb467,0xb0f5,0xb468,0xb469,
-0xb46a,0xeddf,0xc0da,0xb4e8,0xb46b,0xb46c,0xb46d,0xb46e,
-0xc5cd,0xb46f,0xb470,0xb471,0xeddd,0xbfc4,0xb472,0xb473,
-0xb474,0xedde,0xb475,0xb476,0xb477,0xb478,0xb479,0xb47a,
-0xb47b,0xb47c,0xb47d,0xb47e,0xb480,0xb481,0xb482,0xb483,
-0xc4a5,0xb484,0xb485,0xb486,0xede0,0xb487,0xb488,0xb489,
-0xb48a,0xb48b,0xede1,0xb48c,0xede3,0xb48d,0xb48e,0xc1d7,
-0xb48f,0xb490,0xbbc7,0xb491,0xb492,0xb493,0xb494,0xb495,
-0xb496,0xbdb8,0xb497,0xb498,0xb499,0xede2,0xb49a,0xb49b,
-0xb49c,0xb49d,0xb49e,0xb49f,0xb4a0,0xb540,0xb541,0xb542,
-0xb543,0xb544,0xb545,0xede4,0xb546,0xb547,0xb548,0xb549,
-0xb54a,0xb54b,0xb54c,0xb54d,0xb54e,0xb54f,0xede6,0xb550,
-0xb551,0xb552,0xb553,0xb554,0xede5,0xb555,0xb556,0xb557,
-0xb558,0xb559,0xb55a,0xb55b,0xb55c,0xb55d,0xb55e,0xb55f,
-0xb560,0xb561,0xb562,0xb563,0xede7,0xb564,0xb565,0xb566,
-0xb567,0xb568,0xcabe,0xecea,0xc0f1,0xb569,0xc9e7,0xb56a,
-0xeceb,0xc6ee,0xb56b,0xb56c,0xb56d,0xb56e,0xecec,0xb56f,
-0xc6ed,0xeced,0xb570,0xb571,0xb572,0xb573,0xb574,0xb575,
-0xb576,0xb577,0xb578,0xecf0,0xb579,0xb57a,0xd7e6,0xecf3,
-0xb57b,0xb57c,0xecf1,0xecee,0xecef,0xd7a3,0xc9f1,0xcbee,
-0xecf4,0xb57d,0xecf2,0xb57e,0xb580,0xcfe9,0xb581,0xecf6,
-0xc6b1,0xb582,0xb583,0xb584,0xb585,0xbcc0,0xb586,0xecf5,
-0xb587,0xb588,0xb589,0xb58a,0xb58b,0xb58c,0xb58d,0xb5bb,
-0xbbf6,0xb58e,0xecf7,0xb58f,0xb590,0xb591,0xb592,0xb593,
-0xd9f7,0xbdfb,0xb594,0xb595,0xc2bb,0xecf8,0xb596,0xb597,
-0xb598,0xb599,0xecf9,0xb59a,0xb59b,0xb59c,0xb59d,0xb8a3,
-0xb59e,0xb59f,0xb5a0,0xb640,0xb641,0xb642,0xb643,0xb644,
-0xb645,0xb646,0xecfa,0xb647,0xb648,0xb649,0xb64a,0xb64b,
-0xb64c,0xb64d,0xb64e,0xb64f,0xb650,0xb651,0xb652,0xecfb,
-0xb653,0xb654,0xb655,0xb656,0xb657,0xb658,0xb659,0xb65a,
-0xb65b,0xb65c,0xb65d,0xecfc,0xb65e,0xb65f,0xb660,0xb661,
-0xb662,0xd3ed,0xd8ae,0xc0eb,0xb663,0xc7dd,0xbacc,0xb664,
-0xd0e3,0xcbbd,0xb665,0xcdba,0xb666,0xb667,0xb8d1,0xb668,
-0xb669,0xb1fc,0xb66a,0xc7ef,0xb66b,0xd6d6,0xb66c,0xb66d,
-0xb66e,0xbfc6,0xc3eb,0xb66f,0xb670,0xeff5,0xb671,0xb672,
-0xc3d8,0xb673,0xb674,0xb675,0xb676,0xb677,0xb678,0xd7e2,
-0xb679,0xb67a,0xb67b,0xeff7,0xb3d3,0xb67c,0xc7d8,0xd1ed,
-0xb67d,0xd6c8,0xb67e,0xeff8,0xb680,0xeff6,0xb681,0xbbfd,
-0xb3c6,0xb682,0xb683,0xb684,0xb685,0xb686,0xb687,0xb688,
-0xbdd5,0xb689,0xb68a,0xd2c6,0xb68b,0xbbe0,0xb68c,0xb68d,
-0xcfa1,0xb68e,0xeffc,0xeffb,0xb68f,0xb690,0xeff9,0xb691,
-0xb692,0xb693,0xb694,0xb3cc,0xb695,0xc9d4,0xcbb0,0xb696,
-0xb697,0xb698,0xb699,0xb69a,0xeffe,0xb69b,0xb69c,0xb0de,
-0xb69d,0xb69e,0xd6c9,0xb69f,0xb6a0,0xb740,0xeffd,0xb741,
-0xb3ed,0xb742,0xb743,0xf6d5,0xb744,0xb745,0xb746,0xb747,
-0xb748,0xb749,0xb74a,0xb74b,0xb74c,0xb74d,0xb74e,0xb74f,
-0xb750,0xb751,0xb752,0xcec8,0xb753,0xb754,0xb755,0xf0a2,
-0xb756,0xf0a1,0xb757,0xb5be,0xbcda,0xbbfc,0xb758,0xb8e5,
-0xb759,0xb75a,0xb75b,0xb75c,0xb75d,0xb75e,0xc4c2,0xb75f,
-0xb760,0xb761,0xb762,0xb763,0xb764,0xb765,0xb766,0xb767,
-0xb768,0xf0a3,0xb769,0xb76a,0xb76b,0xb76c,0xb76d,0xcbeb,
-0xb76e,0xb76f,0xb770,0xb771,0xb772,0xb773,0xb774,0xb775,
-0xb776,0xb777,0xb778,0xb779,0xb77a,0xb77b,0xb77c,0xb77d,
-0xb77e,0xb780,0xb781,0xb782,0xb783,0xb784,0xb785,0xb786,
-0xf0a6,0xb787,0xb788,0xb789,0xd1a8,0xb78a,0xbebf,0xc7ee,
-0xf1b6,0xf1b7,0xbfd5,0xb78b,0xb78c,0xb78d,0xb78e,0xb4a9,
-0xf1b8,0xcdbb,0xb78f,0xc7d4,0xd5ad,0xb790,0xf1b9,0xb791,
-0xf1ba,0xb792,0xb793,0xb794,0xb795,0xc7cf,0xb796,0xb797,
-0xb798,0xd2a4,0xd6cf,0xb799,0xb79a,0xf1bb,0xbdd1,0xb4b0,
-0xbebd,0xb79b,0xb79c,0xb79d,0xb4dc,0xced1,0xb79e,0xbfdf,
-0xf1bd,0xb79f,0xb7a0,0xb840,0xb841,0xbffa,0xf1bc,0xb842,
-0xf1bf,0xb843,0xb844,0xb845,0xf1be,0xf1c0,0xb846,0xb847,
-0xb848,0xb849,0xb84a,0xf1c1,0xb84b,0xb84c,0xb84d,0xb84e,
-0xb84f,0xb850,0xb851,0xb852,0xb853,0xb854,0xb855,0xc1fe,
-0xb856,0xb857,0xb858,0xb859,0xb85a,0xb85b,0xb85c,0xb85d,
-0xb85e,0xb85f,0xb860,0xc1a2,0xb861,0xb862,0xb863,0xb864,
-0xb865,0xb866,0xb867,0xb868,0xb869,0xb86a,0xcafa,0xb86b,
-0xb86c,0xd5be,0xb86d,0xb86e,0xb86f,0xb870,0xbeba,0xbeb9,
-0xd5c2,0xb871,0xb872,0xbfa2,0xb873,0xcdaf,0xf1b5,0xb874,
-0xb875,0xb876,0xb877,0xb878,0xb879,0xbddf,0xb87a,0xb6cb,
-0xb87b,0xb87c,0xb87d,0xb87e,0xb880,0xb881,0xb882,0xb883,
-0xb884,0xd6f1,0xf3c3,0xb885,0xb886,0xf3c4,0xb887,0xb8cd,
-0xb888,0xb889,0xb88a,0xf3c6,0xf3c7,0xb88b,0xb0ca,0xb88c,
-0xf3c5,0xb88d,0xf3c9,0xcbf1,0xb88e,0xb88f,0xb890,0xf3cb,
-0xb891,0xd0a6,0xb892,0xb893,0xb1ca,0xf3c8,0xb894,0xb895,
-0xb896,0xf3cf,0xb897,0xb5d1,0xb898,0xb899,0xf3d7,0xb89a,
-0xf3d2,0xb89b,0xb89c,0xb89d,0xf3d4,0xf3d3,0xb7fb,0xb89e,
-0xb1bf,0xb89f,0xf3ce,0xf3ca,0xb5da,0xb8a0,0xf3d0,0xb940,
-0xb941,0xf3d1,0xb942,0xf3d5,0xb943,0xb944,0xb945,0xb946,
-0xf3cd,0xb947,0xbce3,0xb948,0xc1fd,0xb949,0xf3d6,0xb94a,
-0xb94b,0xb94c,0xb94d,0xb94e,0xb94f,0xf3da,0xb950,0xf3cc,
-0xb951,0xb5c8,0xb952,0xbdee,0xf3dc,0xb953,0xb954,0xb7a4,
-0xbff0,0xd6fe,0xcdb2,0xb955,0xb4f0,0xb956,0xb2df,0xb957,
-0xf3d8,0xb958,0xf3d9,0xc9b8,0xb959,0xf3dd,0xb95a,0xb95b,
-0xf3de,0xb95c,0xf3e1,0xb95d,0xb95e,0xb95f,0xb960,0xb961,
-0xb962,0xb963,0xb964,0xb965,0xb966,0xb967,0xf3df,0xb968,
-0xb969,0xf3e3,0xf3e2,0xb96a,0xb96b,0xf3db,0xb96c,0xbfea,
-0xb96d,0xb3ef,0xb96e,0xf3e0,0xb96f,0xb970,0xc7a9,0xb971,
-0xbcf2,0xb972,0xb973,0xb974,0xb975,0xf3eb,0xb976,0xb977,
-0xb978,0xb979,0xb97a,0xb97b,0xb97c,0xb9bf,0xb97d,0xb97e,
-0xf3e4,0xb980,0xb981,0xb982,0xb2ad,0xbbfe,0xb983,0xcbe3,
-0xb984,0xb985,0xb986,0xb987,0xf3ed,0xf3e9,0xb988,0xb989,
-0xb98a,0xb9dc,0xf3ee,0xb98b,0xb98c,0xb98d,0xf3e5,0xf3e6,
-0xf3ea,0xc2e1,0xf3ec,0xf3ef,0xf3e8,0xbcfd,0xb98e,0xb98f,
-0xb990,0xcfe4,0xb991,0xb992,0xf3f0,0xb993,0xb994,0xb995,
-0xf3e7,0xb996,0xb997,0xb998,0xb999,0xb99a,0xb99b,0xb99c,
-0xb99d,0xf3f2,0xb99e,0xb99f,0xb9a0,0xba40,0xd7ad,0xc6aa,
-0xba41,0xba42,0xba43,0xba44,0xf3f3,0xba45,0xba46,0xba47,
-0xba48,0xf3f1,0xba49,0xc2a8,0xba4a,0xba4b,0xba4c,0xba4d,
-0xba4e,0xb8dd,0xf3f5,0xba4f,0xba50,0xf3f4,0xba51,0xba52,
-0xba53,0xb4db,0xba54,0xba55,0xba56,0xf3f6,0xf3f7,0xba57,
-0xba58,0xba59,0xf3f8,0xba5a,0xba5b,0xba5c,0xc0ba,0xba5d,
-0xba5e,0xc0e9,0xba5f,0xba60,0xba61,0xba62,0xba63,0xc5f1,
-0xba64,0xba65,0xba66,0xba67,0xf3fb,0xba68,0xf3fa,0xba69,
-0xba6a,0xba6b,0xba6c,0xba6d,0xba6e,0xba6f,0xba70,0xb4d8,
-0xba71,0xba72,0xba73,0xf3fe,0xf3f9,0xba74,0xba75,0xf3fc,
-0xba76,0xba77,0xba78,0xba79,0xba7a,0xba7b,0xf3fd,0xba7c,
-0xba7d,0xba7e,0xba80,0xba81,0xba82,0xba83,0xba84,0xf4a1,
-0xba85,0xba86,0xba87,0xba88,0xba89,0xba8a,0xf4a3,0xbbc9,
-0xba8b,0xba8c,0xf4a2,0xba8d,0xba8e,0xba8f,0xba90,0xba91,
-0xba92,0xba93,0xba94,0xba95,0xba96,0xba97,0xba98,0xba99,
-0xf4a4,0xba9a,0xba9b,0xba9c,0xba9d,0xba9e,0xba9f,0xb2be,
-0xf4a6,0xf4a5,0xbaa0,0xbb40,0xbb41,0xbb42,0xbb43,0xbb44,
-0xbb45,0xbb46,0xbb47,0xbb48,0xbb49,0xbcae,0xbb4a,0xbb4b,
-0xbb4c,0xbb4d,0xbb4e,0xbb4f,0xbb50,0xbb51,0xbb52,0xbb53,
-0xbb54,0xbb55,0xbb56,0xbb57,0xbb58,0xbb59,0xbb5a,0xbb5b,
-0xbb5c,0xbb5d,0xbb5e,0xbb5f,0xbb60,0xbb61,0xbb62,0xbb63,
-0xbb64,0xbb65,0xbb66,0xbb67,0xbb68,0xbb69,0xbb6a,0xbb6b,
-0xbb6c,0xbb6d,0xbb6e,0xc3d7,0xd9e1,0xbb6f,0xbb70,0xbb71,
-0xbb72,0xbb73,0xbb74,0xc0e0,0xf4cc,0xd7d1,0xbb75,0xbb76,
-0xbb77,0xbb78,0xbb79,0xbb7a,0xbb7b,0xbb7c,0xbb7d,0xbb7e,
-0xbb80,0xb7db,0xbb81,0xbb82,0xbb83,0xbb84,0xbb85,0xbb86,
-0xbb87,0xf4ce,0xc1a3,0xbb88,0xbb89,0xc6c9,0xbb8a,0xb4d6,
-0xd5b3,0xbb8b,0xbb8c,0xbb8d,0xf4d0,0xf4cf,0xf4d1,0xcbda,
-0xbb8e,0xbb8f,0xf4d2,0xbb90,0xd4c1,0xd6e0,0xbb91,0xbb92,
-0xbb93,0xbb94,0xb7e0,0xbb95,0xbb96,0xbb97,0xc1b8,0xbb98,
-0xbb99,0xc1bb,0xf4d3,0xbeac,0xbb9a,0xbb9b,0xbb9c,0xbb9d,
-0xbb9e,0xb4e2,0xbb9f,0xbba0,0xf4d4,0xf4d5,0xbeab,0xbc40,
-0xbc41,0xf4d6,0xbc42,0xbc43,0xbc44,0xf4db,0xbc45,0xf4d7,
-0xf4da,0xbc46,0xbafd,0xbc47,0xf4d8,0xf4d9,0xbc48,0xbc49,
-0xbc4a,0xbc4b,0xbc4c,0xbc4d,0xbc4e,0xb8e2,0xccc7,0xf4dc,
-0xbc4f,0xb2da,0xbc50,0xbc51,0xc3d3,0xbc52,0xbc53,0xd4e3,
-0xbfb7,0xbc54,0xbc55,0xbc56,0xbc57,0xbc58,0xbc59,0xbc5a,
-0xf4dd,0xbc5b,0xbc5c,0xbc5d,0xbc5e,0xbc5f,0xbc60,0xc5b4,
-0xbc61,0xbc62,0xbc63,0xbc64,0xbc65,0xbc66,0xbc67,0xbc68,
-0xf4e9,0xbc69,0xbc6a,0xcfb5,0xbc6b,0xbc6c,0xbc6d,0xbc6e,
-0xbc6f,0xbc70,0xbc71,0xbc72,0xbc73,0xbc74,0xbc75,0xbc76,
-0xbc77,0xbc78,0xcec9,0xbc79,0xbc7a,0xbc7b,0xbc7c,0xbc7d,
-0xbc7e,0xbc80,0xbc81,0xbc82,0xbc83,0xbc84,0xbc85,0xbc86,
-0xbc87,0xbc88,0xbc89,0xbc8a,0xbc8b,0xbc8c,0xbc8d,0xbc8e,
-0xcbd8,0xbc8f,0xcbf7,0xbc90,0xbc91,0xbc92,0xbc93,0xbdf4,
-0xbc94,0xbc95,0xbc96,0xd7cf,0xbc97,0xbc98,0xbc99,0xc0db,
-0xbc9a,0xbc9b,0xbc9c,0xbc9d,0xbc9e,0xbc9f,0xbca0,0xbd40,
-0xbd41,0xbd42,0xbd43,0xbd44,0xbd45,0xbd46,0xbd47,0xbd48,
-0xbd49,0xbd4a,0xbd4b,0xbd4c,0xbd4d,0xbd4e,0xbd4f,0xbd50,
-0xbd51,0xbd52,0xbd53,0xbd54,0xbd55,0xbd56,0xbd57,0xbd58,
-0xbd59,0xbd5a,0xbd5b,0xbd5c,0xbd5d,0xbd5e,0xbd5f,0xbd60,
-0xbd61,0xbd62,0xbd63,0xbd64,0xbd65,0xbd66,0xbd67,0xbd68,
-0xbd69,0xbd6a,0xbd6b,0xbd6c,0xbd6d,0xbd6e,0xbd6f,0xbd70,
-0xbd71,0xbd72,0xbd73,0xbd74,0xbd75,0xbd76,0xd0f5,0xbd77,
-0xbd78,0xbd79,0xbd7a,0xbd7b,0xbd7c,0xbd7d,0xbd7e,0xf4ea,
-0xbd80,0xbd81,0xbd82,0xbd83,0xbd84,0xbd85,0xbd86,0xbd87,
-0xbd88,0xbd89,0xbd8a,0xbd8b,0xbd8c,0xbd8d,0xbd8e,0xbd8f,
-0xbd90,0xbd91,0xbd92,0xbd93,0xbd94,0xbd95,0xbd96,0xbd97,
-0xbd98,0xbd99,0xbd9a,0xbd9b,0xbd9c,0xbd9d,0xbd9e,0xbd9f,
-0xbda0,0xbe40,0xbe41,0xbe42,0xbe43,0xbe44,0xbe45,0xbe46,
-0xbe47,0xbe48,0xbe49,0xbe4a,0xbe4b,0xbe4c,0xf4eb,0xbe4d,
-0xbe4e,0xbe4f,0xbe50,0xbe51,0xbe52,0xbe53,0xf4ec,0xbe54,
-0xbe55,0xbe56,0xbe57,0xbe58,0xbe59,0xbe5a,0xbe5b,0xbe5c,
-0xbe5d,0xbe5e,0xbe5f,0xbe60,0xbe61,0xbe62,0xbe63,0xbe64,
-0xbe65,0xbe66,0xbe67,0xbe68,0xbe69,0xbe6a,0xbe6b,0xbe6c,
-0xbe6d,0xbe6e,0xbe6f,0xbe70,0xbe71,0xbe72,0xbe73,0xbe74,
-0xbe75,0xbe76,0xbe77,0xbe78,0xbe79,0xbe7a,0xbe7b,0xbe7c,
-0xbe7d,0xbe7e,0xbe80,0xbe81,0xbe82,0xbe83,0xbe84,0xbe85,
-0xbe86,0xbe87,0xbe88,0xbe89,0xbe8a,0xbe8b,0xbe8c,0xbe8d,
-0xbe8e,0xbe8f,0xbe90,0xbe91,0xbe92,0xbe93,0xbe94,0xbe95,
-0xbe96,0xbe97,0xbe98,0xbe99,0xbe9a,0xbe9b,0xbe9c,0xbe9d,
-0xbe9e,0xbe9f,0xbea0,0xbf40,0xbf41,0xbf42,0xbf43,0xbf44,
-0xbf45,0xbf46,0xbf47,0xbf48,0xbf49,0xbf4a,0xbf4b,0xbf4c,
-0xbf4d,0xbf4e,0xbf4f,0xbf50,0xbf51,0xbf52,0xbf53,0xbf54,
-0xbf55,0xbf56,0xbf57,0xbf58,0xbf59,0xbf5a,0xbf5b,0xbf5c,
-0xbf5d,0xbf5e,0xbf5f,0xbf60,0xbf61,0xbf62,0xbf63,0xbf64,
-0xbf65,0xbf66,0xbf67,0xbf68,0xbf69,0xbf6a,0xbf6b,0xbf6c,
-0xbf6d,0xbf6e,0xbf6f,0xbf70,0xbf71,0xbf72,0xbf73,0xbf74,
-0xbf75,0xbf76,0xbf77,0xbf78,0xbf79,0xbf7a,0xbf7b,0xbf7c,
-0xbf7d,0xbf7e,0xbf80,0xf7e3,0xbf81,0xbf82,0xbf83,0xbf84,
-0xbf85,0xb7b1,0xbf86,0xbf87,0xbf88,0xbf89,0xbf8a,0xf4ed,
-0xbf8b,0xbf8c,0xbf8d,0xbf8e,0xbf8f,0xbf90,0xbf91,0xbf92,
-0xbf93,0xbf94,0xbf95,0xbf96,0xbf97,0xbf98,0xbf99,0xbf9a,
-0xbf9b,0xbf9c,0xbf9d,0xbf9e,0xbf9f,0xbfa0,0xc040,0xc041,
-0xc042,0xc043,0xc044,0xc045,0xc046,0xc047,0xc048,0xc049,
-0xc04a,0xc04b,0xc04c,0xc04d,0xc04e,0xc04f,0xc050,0xc051,
-0xc052,0xc053,0xc054,0xc055,0xc056,0xc057,0xc058,0xc059,
-0xc05a,0xc05b,0xc05c,0xc05d,0xc05e,0xc05f,0xc060,0xc061,
-0xc062,0xc063,0xd7eb,0xc064,0xc065,0xc066,0xc067,0xc068,
-0xc069,0xc06a,0xc06b,0xc06c,0xc06d,0xc06e,0xc06f,0xc070,
-0xc071,0xc072,0xc073,0xc074,0xc075,0xc076,0xc077,0xc078,
-0xc079,0xc07a,0xc07b,0xf4ee,0xc07c,0xc07d,0xc07e,0xe6f9,
-0xbec0,0xe6fa,0xbaec,0xe6fb,0xcfcb,0xe6fc,0xd4bc,0xbcb6,
-0xe6fd,0xe6fe,0xbccd,0xc8d2,0xceb3,0xe7a1,0xc080,0xb4bf,
-0xe7a2,0xc9b4,0xb8d9,0xc4c9,0xc081,0xd7dd,0xc2da,0xb7d7,
-0xd6bd,0xcec6,0xb7c4,0xc082,0xc083,0xc5a6,0xe7a3,0xcfdf,
-0xe7a4,0xe7a5,0xe7a6,0xc1b7,0xd7e9,0xc9f0,0xcfb8,0xd6af,
-0xd6d5,0xe7a7,0xb0ed,0xe7a8,0xe7a9,0xc9dc,0xd2ef,0xbead,
-0xe7aa,0xb0f3,0xc8de,0xbde1,0xe7ab,0xc8c6,0xc084,0xe7ac,
-0xbbe6,0xb8f8,0xd1a4,0xe7ad,0xc2e7,0xbef8,0xbdca,0xcdb3,
-0xe7ae,0xe7af,0xbeee,0xd0e5,0xc085,0xcbe7,0xccd0,0xbccc,
-0xe7b0,0xbca8,0xd0f7,0xe7b1,0xc086,0xd0f8,0xe7b2,0xe7b3,
-0xb4c2,0xe7b4,0xe7b5,0xc9fe,0xceac,0xc3e0,0xe7b7,0xb1c1,
-0xb3f1,0xc087,0xe7b8,0xe7b9,0xd7db,0xd5c0,0xe7ba,0xc2cc,
-0xd7ba,0xe7bb,0xe7bc,0xe7bd,0xbcea,0xc3e5,0xc0c2,0xe7be,
-0xe7bf,0xbca9,0xc088,0xe7c0,0xe7c1,0xe7b6,0xb6d0,0xe7c2,
-0xc089,0xe7c3,0xe7c4,0xbbba,0xb5de,0xc2c6,0xb1e0,0xe7c5,
-0xd4b5,0xe7c6,0xb8bf,0xe7c8,0xe7c7,0xb7ec,0xc08a,0xe7c9,
-0xb2f8,0xe7ca,0xe7cb,0xe7cc,0xe7cd,0xe7ce,0xe7cf,0xe7d0,
-0xd3a7,0xcbf5,0xe7d1,0xe7d2,0xe7d3,0xe7d4,0xc9c9,0xe7d5,
-0xe7d6,0xe7d7,0xe7d8,0xe7d9,0xbdc9,0xe7da,0xf3be,0xc08b,
-0xb8d7,0xc08c,0xc8b1,0xc08d,0xc08e,0xc08f,0xc090,0xc091,
-0xc092,0xc093,0xf3bf,0xc094,0xf3c0,0xf3c1,0xc095,0xc096,
-0xc097,0xc098,0xc099,0xc09a,0xc09b,0xc09c,0xc09d,0xc09e,
-0xb9de,0xcdf8,0xc09f,0xc0a0,0xd8e8,0xbab1,0xc140,0xc2de,
-0xeeb7,0xc141,0xb7a3,0xc142,0xc143,0xc144,0xc145,0xeeb9,
-0xc146,0xeeb8,0xb0d5,0xc147,0xc148,0xc149,0xc14a,0xc14b,
-0xeebb,0xd5d6,0xd7ef,0xc14c,0xc14d,0xc14e,0xd6c3,0xc14f,
-0xc150,0xeebd,0xcaf0,0xc151,0xeebc,0xc152,0xc153,0xc154,
-0xc155,0xeebe,0xc156,0xc157,0xc158,0xc159,0xeec0,0xc15a,
-0xc15b,0xeebf,0xc15c,0xc15d,0xc15e,0xc15f,0xc160,0xc161,
-0xc162,0xc163,0xd1f2,0xc164,0xc7bc,0xc165,0xc3c0,0xc166,
-0xc167,0xc168,0xc169,0xc16a,0xb8e1,0xc16b,0xc16c,0xc16d,
-0xc16e,0xc16f,0xc1e7,0xc170,0xc171,0xf4c6,0xd0df,0xf4c7,
-0xc172,0xcfdb,0xc173,0xc174,0xc8ba,0xc175,0xc176,0xf4c8,
-0xc177,0xc178,0xc179,0xc17a,0xc17b,0xc17c,0xc17d,0xf4c9,
-0xf4ca,0xc17e,0xf4cb,0xc180,0xc181,0xc182,0xc183,0xc184,
-0xd9fa,0xb8fe,0xc185,0xc186,0xe5f1,0xd3f0,0xc187,0xf4e0,
-0xc188,0xcecc,0xc189,0xc18a,0xc18b,0xb3e1,0xc18c,0xc18d,
-0xc18e,0xc18f,0xf1b4,0xc190,0xd2ee,0xc191,0xf4e1,0xc192,
-0xc193,0xc194,0xc195,0xc196,0xcfe8,0xf4e2,0xc197,0xc198,
-0xc7cc,0xc199,0xc19a,0xc19b,0xc19c,0xc19d,0xc19e,0xb5d4,
-0xb4e4,0xf4e4,0xc19f,0xc1a0,0xc240,0xf4e3,0xf4e5,0xc241,
-0xc242,0xf4e6,0xc243,0xc244,0xc245,0xc246,0xf4e7,0xc247,
-0xbab2,0xb0bf,0xc248,0xf4e8,0xc249,0xc24a,0xc24b,0xc24c,
-0xc24d,0xc24e,0xc24f,0xb7ad,0xd2ed,0xc250,0xc251,0xc252,
-0xd2ab,0xc0cf,0xc253,0xbfbc,0xeba3,0xd5df,0xeac8,0xc254,
-0xc255,0xc256,0xc257,0xf1f3,0xb6f8,0xcba3,0xc258,0xc259,
-0xc4cd,0xc25a,0xf1e7,0xc25b,0xf1e8,0xb8fb,0xf1e9,0xbac4,
-0xd4c5,0xb0d2,0xc25c,0xc25d,0xf1ea,0xc25e,0xc25f,0xc260,
-0xf1eb,0xc261,0xf1ec,0xc262,0xc263,0xf1ed,0xf1ee,0xf1ef,
-0xf1f1,0xf1f0,0xc5d5,0xc264,0xc265,0xc266,0xc267,0xc268,
-0xc269,0xf1f2,0xc26a,0xb6fa,0xc26b,0xf1f4,0xd2ae,0xdec7,
-0xcbca,0xc26c,0xc26d,0xb3dc,0xc26e,0xb5a2,0xc26f,0xb9a2,
-0xc270,0xc271,0xc4f4,0xf1f5,0xc272,0xc273,0xf1f6,0xc274,
-0xc275,0xc276,0xc1c4,0xc1fb,0xd6b0,0xf1f7,0xc277,0xc278,
-0xc279,0xc27a,0xf1f8,0xc27b,0xc1aa,0xc27c,0xc27d,0xc27e,
-0xc6b8,0xc280,0xbedb,0xc281,0xc282,0xc283,0xc284,0xc285,
-0xc286,0xc287,0xc288,0xc289,0xc28a,0xc28b,0xc28c,0xc28d,
-0xc28e,0xf1f9,0xb4cf,0xc28f,0xc290,0xc291,0xc292,0xc293,
-0xc294,0xf1fa,0xc295,0xc296,0xc297,0xc298,0xc299,0xc29a,
-0xc29b,0xc29c,0xc29d,0xc29e,0xc29f,0xc2a0,0xc340,0xedb2,
-0xedb1,0xc341,0xc342,0xcbe0,0xd2de,0xc343,0xcbc1,0xd5d8,
-0xc344,0xc8e2,0xc345,0xc0df,0xbca1,0xc346,0xc347,0xc348,
-0xc349,0xc34a,0xc34b,0xebc1,0xc34c,0xc34d,0xd0a4,0xc34e,
-0xd6e2,0xc34f,0xb6c7,0xb8d8,0xebc0,0xb8ce,0xc350,0xebbf,
-0xb3a6,0xb9c9,0xd6ab,0xc351,0xb7f4,0xb7ca,0xc352,0xc353,
-0xc354,0xbce7,0xb7be,0xebc6,0xc355,0xebc7,0xb0b9,0xbfcf,
-0xc356,0xebc5,0xd3fd,0xc357,0xebc8,0xc358,0xc359,0xebc9,
-0xc35a,0xc35b,0xb7ce,0xc35c,0xebc2,0xebc4,0xc9f6,0xd6d7,
-0xd5cd,0xd0b2,0xebcf,0xceb8,0xebd0,0xc35d,0xb5a8,0xc35e,
-0xc35f,0xc360,0xc361,0xc362,0xb1b3,0xebd2,0xcca5,0xc363,
-0xc364,0xc365,0xc366,0xc367,0xc368,0xc369,0xc5d6,0xebd3,
-0xc36a,0xebd1,0xc5df,0xebce,0xcaa4,0xebd5,0xb0fb,0xc36b,
-0xc36c,0xbafa,0xc36d,0xc36e,0xd8b7,0xf1e3,0xc36f,0xebca,
-0xebcb,0xebcc,0xebcd,0xebd6,0xe6c0,0xebd9,0xc370,0xbfe8,
-0xd2c8,0xebd7,0xebdc,0xb8ec,0xebd8,0xc371,0xbdba,0xc372,
-0xd0d8,0xc373,0xb0b7,0xc374,0xebdd,0xc4dc,0xc375,0xc376,
-0xc377,0xc378,0xd6ac,0xc379,0xc37a,0xc37b,0xb4e0,0xc37c,
-0xc37d,0xc2f6,0xbcb9,0xc37e,0xc380,0xebda,0xebdb,0xd4e0,
-0xc6ea,0xc4d4,0xebdf,0xc5a7,0xd9f5,0xc381,0xb2b1,0xc382,
-0xebe4,0xc383,0xbdc5,0xc384,0xc385,0xc386,0xebe2,0xc387,
-0xc388,0xc389,0xc38a,0xc38b,0xc38c,0xc38d,0xc38e,0xc38f,
-0xc390,0xc391,0xc392,0xc393,0xebe3,0xc394,0xc395,0xb8ac,
-0xc396,0xcdd1,0xebe5,0xc397,0xc398,0xc399,0xebe1,0xc39a,
-0xc1b3,0xc39b,0xc39c,0xc39d,0xc39e,0xc39f,0xc6a2,0xc3a0,
-0xc440,0xc441,0xc442,0xc443,0xc444,0xc445,0xccf3,0xc446,
-0xebe6,0xc447,0xc0b0,0xd2b8,0xebe7,0xc448,0xc449,0xc44a,
-0xb8af,0xb8ad,0xc44b,0xebe8,0xc7bb,0xcdf3,0xc44c,0xc44d,
-0xc44e,0xebea,0xebeb,0xc44f,0xc450,0xc451,0xc452,0xc453,
-0xebed,0xc454,0xc455,0xc456,0xc457,0xd0c8,0xc458,0xebf2,
-0xc459,0xebee,0xc45a,0xc45b,0xc45c,0xebf1,0xc8f9,0xc45d,
-0xd1fc,0xebec,0xc45e,0xc45f,0xebe9,0xc460,0xc461,0xc462,
-0xc463,0xb8b9,0xcfd9,0xc4e5,0xebef,0xebf0,0xccda,0xcdc8,
-0xb0f2,0xc464,0xebf6,0xc465,0xc466,0xc467,0xc468,0xc469,
-0xebf5,0xc46a,0xb2b2,0xc46b,0xc46c,0xc46d,0xc46e,0xb8e0,
-0xc46f,0xebf7,0xc470,0xc471,0xc472,0xc473,0xc474,0xc475,
-0xb1ec,0xc476,0xc477,0xccc5,0xc4a4,0xcfa5,0xc478,0xc479,
-0xc47a,0xc47b,0xc47c,0xebf9,0xc47d,0xc47e,0xeca2,0xc480,
-0xc5f2,0xc481,0xebfa,0xc482,0xc483,0xc484,0xc485,0xc486,
-0xc487,0xc488,0xc489,0xc9c5,0xc48a,0xc48b,0xc48c,0xc48d,
-0xc48e,0xc48f,0xe2df,0xebfe,0xc490,0xc491,0xc492,0xc493,
-0xcdce,0xeca1,0xb1db,0xd3b7,0xc494,0xc495,0xd2dc,0xc496,
-0xc497,0xc498,0xebfd,0xc499,0xebfb,0xc49a,0xc49b,0xc49c,
-0xc49d,0xc49e,0xc49f,0xc4a0,0xc540,0xc541,0xc542,0xc543,
-0xc544,0xc545,0xc546,0xc547,0xc548,0xc549,0xc54a,0xc54b,
-0xc54c,0xc54d,0xc54e,0xb3bc,0xc54f,0xc550,0xc551,0xeab0,
-0xc552,0xc553,0xd7d4,0xc554,0xf4ab,0xb3f4,0xc555,0xc556,
-0xc557,0xc558,0xc559,0xd6c1,0xd6c2,0xc55a,0xc55b,0xc55c,
-0xc55d,0xc55e,0xc55f,0xd5e9,0xbeca,0xc560,0xf4a7,0xc561,
-0xd2a8,0xf4a8,0xf4a9,0xc562,0xf4aa,0xbecb,0xd3df,0xc563,
-0xc564,0xc565,0xc566,0xc567,0xc9e0,0xc9e1,0xc568,0xc569,
-0xf3c2,0xc56a,0xcae6,0xc56b,0xccf2,0xc56c,0xc56d,0xc56e,
-0xc56f,0xc570,0xc571,0xe2b6,0xcbb4,0xc572,0xcee8,0xd6db,
-0xc573,0xf4ad,0xf4ae,0xf4af,0xc574,0xc575,0xc576,0xc577,
-0xf4b2,0xc578,0xbabd,0xf4b3,0xb0e3,0xf4b0,0xc579,0xf4b1,
-0xbda2,0xb2d5,0xc57a,0xf4b6,0xf4b7,0xb6e6,0xb2b0,0xcfcf,
-0xf4b4,0xb4ac,0xc57b,0xf4b5,0xc57c,0xc57d,0xf4b8,0xc57e,
-0xc580,0xc581,0xc582,0xc583,0xf4b9,0xc584,0xc585,0xcda7,
-0xc586,0xf4ba,0xc587,0xf4bb,0xc588,0xc589,0xc58a,0xf4bc,
-0xc58b,0xc58c,0xc58d,0xc58e,0xc58f,0xc590,0xc591,0xc592,
-0xcbd2,0xc593,0xf4bd,0xc594,0xc595,0xc596,0xc597,0xf4be,
-0xc598,0xc599,0xc59a,0xc59b,0xc59c,0xc59d,0xc59e,0xc59f,
-0xf4bf,0xc5a0,0xc640,0xc641,0xc642,0xc643,0xf4de,0xc1bc,
-0xbce8,0xc644,0xc9ab,0xd1de,0xe5f5,0xc645,0xc646,0xc647,
-0xc648,0xdcb3,0xd2d5,0xc649,0xc64a,0xdcb4,0xb0ac,0xdcb5,
-0xc64b,0xc64c,0xbdda,0xc64d,0xdcb9,0xc64e,0xc64f,0xc650,
-0xd8c2,0xc651,0xdcb7,0xd3f3,0xc652,0xc9d6,0xdcba,0xdcb6,
-0xc653,0xdcbb,0xc3a2,0xc654,0xc655,0xc656,0xc657,0xdcbc,
-0xdcc5,0xdcbd,0xc658,0xc659,0xcedf,0xd6a5,0xc65a,0xdccf,
-0xc65b,0xdccd,0xc65c,0xc65d,0xdcd2,0xbde6,0xc2ab,0xc65e,
-0xdcb8,0xdccb,0xdcce,0xdcbe,0xb7d2,0xb0c5,0xdcc7,0xd0be,
-0xdcc1,0xbba8,0xc65f,0xb7bc,0xdccc,0xc660,0xc661,0xdcc6,
-0xdcbf,0xc7db,0xc662,0xc663,0xc664,0xd1bf,0xdcc0,0xc665,
-0xc666,0xdcca,0xc667,0xc668,0xdcd0,0xc669,0xc66a,0xcead,
-0xdcc2,0xc66b,0xdcc3,0xdcc8,0xdcc9,0xb2d4,0xdcd1,0xcbd5,
-0xc66c,0xd4b7,0xdcdb,0xdcdf,0xcca6,0xdce6,0xc66d,0xc3e7,
-0xdcdc,0xc66e,0xc66f,0xbfc1,0xdcd9,0xc670,0xb0fa,0xb9b6,
-0xdce5,0xdcd3,0xc671,0xdcc4,0xdcd6,0xc8f4,0xbfe0,0xc672,
-0xc673,0xc674,0xc675,0xc9bb,0xc676,0xc677,0xc678,0xb1bd,
-0xc679,0xd3a2,0xc67a,0xc67b,0xdcda,0xc67c,0xc67d,0xdcd5,
-0xc67e,0xc6bb,0xc680,0xdcde,0xc681,0xc682,0xc683,0xc684,
-0xc685,0xd7c2,0xc3af,0xb7b6,0xc7d1,0xc3a9,0xdce2,0xdcd8,
-0xdceb,0xdcd4,0xc686,0xc687,0xdcdd,0xc688,0xbea5,0xdcd7,
-0xc689,0xdce0,0xc68a,0xc68b,0xdce3,0xdce4,0xc68c,0xdcf8,
-0xc68d,0xc68e,0xdce1,0xdda2,0xdce7,0xc68f,0xc690,0xc691,
-0xc692,0xc693,0xc694,0xc695,0xc696,0xc697,0xc698,0xbceb,
-0xb4c4,0xc699,0xc69a,0xc3a3,0xb2e7,0xdcfa,0xc69b,0xdcf2,
-0xc69c,0xdcef,0xc69d,0xdcfc,0xdcee,0xd2f0,0xb2e8,0xc69e,
-0xc8d7,0xc8e3,0xdcfb,0xc69f,0xdced,0xc6a0,0xc740,0xc741,
-0xdcf7,0xc742,0xc743,0xdcf5,0xc744,0xc745,0xbea3,0xdcf4,
-0xc746,0xb2dd,0xc747,0xc748,0xc749,0xc74a,0xc74b,0xdcf3,
-0xbcf6,0xdce8,0xbbc4,0xc74c,0xc0f3,0xc74d,0xc74e,0xc74f,
-0xc750,0xc751,0xbcd4,0xdce9,0xdcea,0xc752,0xdcf1,0xdcf6,
-0xdcf9,0xb5b4,0xc753,0xc8d9,0xbbe7,0xdcfe,0xdcfd,0xd3ab,
-0xdda1,0xdda3,0xdda5,0xd2f1,0xdda4,0xdda6,0xdda7,0xd2a9,
-0xc754,0xc755,0xc756,0xc757,0xc758,0xc759,0xc75a,0xbac9,
-0xdda9,0xc75b,0xc75c,0xddb6,0xddb1,0xddb4,0xc75d,0xc75e,
-0xc75f,0xc760,0xc761,0xc762,0xc763,0xddb0,0xc6ce,0xc764,
-0xc765,0xc0f2,0xc766,0xc767,0xc768,0xc769,0xc9af,0xc76a,
-0xc76b,0xc76c,0xdcec,0xddae,0xc76d,0xc76e,0xc76f,0xc770,
-0xddb7,0xc771,0xc772,0xdcf0,0xddaf,0xc773,0xddb8,0xc774,
-0xddac,0xc775,0xc776,0xc777,0xc778,0xc779,0xc77a,0xc77b,
-0xddb9,0xddb3,0xddad,0xc4aa,0xc77c,0xc77d,0xc77e,0xc780,
-0xdda8,0xc0b3,0xc1ab,0xddaa,0xddab,0xc781,0xddb2,0xbbf1,
-0xddb5,0xd3a8,0xddba,0xc782,0xddbb,0xc3a7,0xc783,0xc784,
-0xddd2,0xddbc,0xc785,0xc786,0xc787,0xddd1,0xc788,0xb9bd,
-0xc789,0xc78a,0xbed5,0xc78b,0xbefa,0xc78c,0xc78d,0xbaca,
-0xc78e,0xc78f,0xc790,0xc791,0xddca,0xc792,0xddc5,0xc793,
-0xddbf,0xc794,0xc795,0xc796,0xb2cb,0xddc3,0xc797,0xddcb,
-0xb2a4,0xddd5,0xc798,0xc799,0xc79a,0xddbe,0xc79b,0xc79c,
-0xc79d,0xc6d0,0xddd0,0xc79e,0xc79f,0xc7a0,0xc840,0xc841,
-0xddd4,0xc1e2,0xb7c6,0xc842,0xc843,0xc844,0xc845,0xc846,
-0xddce,0xddcf,0xc847,0xc848,0xc849,0xddc4,0xc84a,0xc84b,
-0xc84c,0xddbd,0xc84d,0xddcd,0xccd1,0xc84e,0xddc9,0xc84f,
-0xc850,0xc851,0xc852,0xddc2,0xc3c8,0xc6bc,0xceae,0xddcc,
-0xc853,0xddc8,0xc854,0xc855,0xc856,0xc857,0xc858,0xc859,
-0xddc1,0xc85a,0xc85b,0xc85c,0xddc6,0xc2dc,0xc85d,0xc85e,
-0xc85f,0xc860,0xc861,0xc862,0xd3a9,0xd3aa,0xddd3,0xcff4,
-0xc8f8,0xc863,0xc864,0xc865,0xc866,0xc867,0xc868,0xc869,
-0xc86a,0xdde6,0xc86b,0xc86c,0xc86d,0xc86e,0xc86f,0xc870,
-0xddc7,0xc871,0xc872,0xc873,0xdde0,0xc2e4,0xc874,0xc875,
-0xc876,0xc877,0xc878,0xc879,0xc87a,0xc87b,0xdde1,0xc87c,
-0xc87d,0xc87e,0xc880,0xc881,0xc882,0xc883,0xc884,0xc885,
-0xc886,0xddd7,0xc887,0xc888,0xc889,0xc88a,0xc88b,0xd6f8,
-0xc88c,0xddd9,0xddd8,0xb8f0,0xddd6,0xc88d,0xc88e,0xc88f,
-0xc890,0xc6cf,0xc891,0xb6ad,0xc892,0xc893,0xc894,0xc895,
-0xc896,0xdde2,0xc897,0xbaf9,0xd4e1,0xdde7,0xc898,0xc899,
-0xc89a,0xb4d0,0xc89b,0xddda,0xc89c,0xbffb,0xdde3,0xc89d,
-0xdddf,0xc89e,0xdddd,0xc89f,0xc8a0,0xc940,0xc941,0xc942,
-0xc943,0xc944,0xb5d9,0xc945,0xc946,0xc947,0xc948,0xdddb,
-0xdddc,0xddde,0xc949,0xbdaf,0xdde4,0xc94a,0xdde5,0xc94b,
-0xc94c,0xc94d,0xc94e,0xc94f,0xc950,0xc951,0xc952,0xddf5,
-0xc953,0xc3c9,0xc954,0xc955,0xcbe2,0xc956,0xc957,0xc958,
-0xc959,0xddf2,0xc95a,0xc95b,0xc95c,0xc95d,0xc95e,0xc95f,
-0xc960,0xc961,0xc962,0xc963,0xc964,0xc965,0xc966,0xd8e1,
-0xc967,0xc968,0xc6d1,0xc969,0xddf4,0xc96a,0xc96b,0xc96c,
-0xd5f4,0xddf3,0xddf0,0xc96d,0xc96e,0xddec,0xc96f,0xddef,
-0xc970,0xdde8,0xc971,0xc972,0xd0ee,0xc973,0xc974,0xc975,
-0xc976,0xc8d8,0xddee,0xc977,0xc978,0xdde9,0xc979,0xc97a,
-0xddea,0xcbf2,0xc97b,0xdded,0xc97c,0xc97d,0xb1cd,0xc97e,
-0xc980,0xc981,0xc982,0xc983,0xc984,0xc0b6,0xc985,0xbcbb,
-0xddf1,0xc986,0xc987,0xddf7,0xc988,0xddf6,0xddeb,0xc989,
-0xc98a,0xc98b,0xc98c,0xc98d,0xc5ee,0xc98e,0xc98f,0xc990,
-0xddfb,0xc991,0xc992,0xc993,0xc994,0xc995,0xc996,0xc997,
-0xc998,0xc999,0xc99a,0xc99b,0xdea4,0xc99c,0xc99d,0xdea3,
-0xc99e,0xc99f,0xc9a0,0xca40,0xca41,0xca42,0xca43,0xca44,
-0xca45,0xca46,0xca47,0xca48,0xddf8,0xca49,0xca4a,0xca4b,
-0xca4c,0xc3ef,0xca4d,0xc2fb,0xca4e,0xca4f,0xca50,0xd5e1,
-0xca51,0xca52,0xceb5,0xca53,0xca54,0xca55,0xca56,0xddfd,
-0xca57,0xb2cc,0xca58,0xca59,0xca5a,0xca5b,0xca5c,0xca5d,
-0xca5e,0xca5f,0xca60,0xc4e8,0xcadf,0xca61,0xca62,0xca63,
-0xca64,0xca65,0xca66,0xca67,0xca68,0xca69,0xca6a,0xc7be,
-0xddfa,0xddfc,0xddfe,0xdea2,0xb0aa,0xb1ce,0xca6b,0xca6c,
-0xca6d,0xca6e,0xca6f,0xdeac,0xca70,0xca71,0xca72,0xca73,
-0xdea6,0xbdb6,0xc8ef,0xca74,0xca75,0xca76,0xca77,0xca78,
-0xca79,0xca7a,0xca7b,0xca7c,0xca7d,0xca7e,0xdea1,0xca80,
-0xca81,0xdea5,0xca82,0xca83,0xca84,0xca85,0xdea9,0xca86,
-0xca87,0xca88,0xca89,0xca8a,0xdea8,0xca8b,0xca8c,0xca8d,
-0xdea7,0xca8e,0xca8f,0xca90,0xca91,0xca92,0xca93,0xca94,
-0xca95,0xca96,0xdead,0xca97,0xd4cc,0xca98,0xca99,0xca9a,
-0xca9b,0xdeb3,0xdeaa,0xdeae,0xca9c,0xca9d,0xc0d9,0xca9e,
-0xca9f,0xcaa0,0xcb40,0xcb41,0xb1a1,0xdeb6,0xcb42,0xdeb1,
-0xcb43,0xcb44,0xcb45,0xcb46,0xcb47,0xcb48,0xcb49,0xdeb2,
-0xcb4a,0xcb4b,0xcb4c,0xcb4d,0xcb4e,0xcb4f,0xcb50,0xcb51,
-0xcb52,0xcb53,0xcb54,0xd1a6,0xdeb5,0xcb55,0xcb56,0xcb57,
-0xcb58,0xcb59,0xcb5a,0xcb5b,0xdeaf,0xcb5c,0xcb5d,0xcb5e,
-0xdeb0,0xcb5f,0xd0bd,0xcb60,0xcb61,0xcb62,0xdeb4,0xcaed,
-0xdeb9,0xcb63,0xcb64,0xcb65,0xcb66,0xcb67,0xcb68,0xdeb8,
-0xcb69,0xdeb7,0xcb6a,0xcb6b,0xcb6c,0xcb6d,0xcb6e,0xcb6f,
-0xcb70,0xdebb,0xcb71,0xcb72,0xcb73,0xcb74,0xcb75,0xcb76,
-0xcb77,0xbde5,0xcb78,0xcb79,0xcb7a,0xcb7b,0xcb7c,0xb2d8,
-0xc3ea,0xcb7d,0xcb7e,0xdeba,0xcb80,0xc5ba,0xcb81,0xcb82,
-0xcb83,0xcb84,0xcb85,0xcb86,0xdebc,0xcb87,0xcb88,0xcb89,
-0xcb8a,0xcb8b,0xcb8c,0xcb8d,0xccd9,0xcb8e,0xcb8f,0xcb90,
-0xcb91,0xb7aa,0xcb92,0xcb93,0xcb94,0xcb95,0xcb96,0xcb97,
-0xcb98,0xcb99,0xcb9a,0xcb9b,0xcb9c,0xcb9d,0xcb9e,0xcb9f,
-0xcba0,0xcc40,0xcc41,0xd4e5,0xcc42,0xcc43,0xcc44,0xdebd,
-0xcc45,0xcc46,0xcc47,0xcc48,0xcc49,0xdebf,0xcc4a,0xcc4b,
-0xcc4c,0xcc4d,0xcc4e,0xcc4f,0xcc50,0xcc51,0xcc52,0xcc53,
-0xcc54,0xc4a2,0xcc55,0xcc56,0xcc57,0xcc58,0xdec1,0xcc59,
-0xcc5a,0xcc5b,0xcc5c,0xcc5d,0xcc5e,0xcc5f,0xcc60,0xcc61,
-0xcc62,0xcc63,0xcc64,0xcc65,0xcc66,0xcc67,0xcc68,0xdebe,
-0xcc69,0xdec0,0xcc6a,0xcc6b,0xcc6c,0xcc6d,0xcc6e,0xcc6f,
-0xcc70,0xcc71,0xcc72,0xcc73,0xcc74,0xcc75,0xcc76,0xcc77,
-0xd5ba,0xcc78,0xcc79,0xcc7a,0xdec2,0xcc7b,0xcc7c,0xcc7d,
-0xcc7e,0xcc80,0xcc81,0xcc82,0xcc83,0xcc84,0xcc85,0xcc86,
-0xcc87,0xcc88,0xcc89,0xcc8a,0xcc8b,0xf2ae,0xbba2,0xc2b2,
-0xc5b0,0xc2c7,0xcc8c,0xcc8d,0xf2af,0xcc8e,0xcc8f,0xcc90,
-0xcc91,0xcc92,0xd0e9,0xcc93,0xcc94,0xcc95,0xd3dd,0xcc96,
-0xcc97,0xcc98,0xebbd,0xcc99,0xcc9a,0xcc9b,0xcc9c,0xcc9d,
-0xcc9e,0xcc9f,0xcca0,0xb3e6,0xf2b0,0xcd40,0xf2b1,0xcd41,
-0xcd42,0xcaad,0xcd43,0xcd44,0xcd45,0xcd46,0xcd47,0xcd48,
-0xcd49,0xbae7,0xf2b3,0xf2b5,0xf2b4,0xcbe4,0xcfba,0xf2b2,
-0xcab4,0xd2cf,0xc2ec,0xcd4a,0xcd4b,0xcd4c,0xcd4d,0xcd4e,
-0xcd4f,0xcd50,0xcec3,0xf2b8,0xb0f6,0xf2b7,0xcd51,0xcd52,
-0xcd53,0xcd54,0xcd55,0xf2be,0xcd56,0xb2cf,0xcd57,0xcd58,
-0xcd59,0xcd5a,0xcd5b,0xcd5c,0xd1c1,0xf2ba,0xcd5d,0xcd5e,
-0xcd5f,0xcd60,0xcd61,0xf2bc,0xd4e9,0xcd62,0xcd63,0xf2bb,
-0xf2b6,0xf2bf,0xf2bd,0xcd64,0xf2b9,0xcd65,0xcd66,0xf2c7,
-0xf2c4,0xf2c6,0xcd67,0xcd68,0xf2ca,0xf2c2,0xf2c0,0xcd69,
-0xcd6a,0xcd6b,0xf2c5,0xcd6c,0xcd6d,0xcd6e,0xcd6f,0xcd70,
-0xd6fb,0xcd71,0xcd72,0xcd73,0xf2c1,0xcd74,0xc7f9,0xc9df,
-0xcd75,0xf2c8,0xb9c6,0xb5b0,0xcd76,0xcd77,0xf2c3,0xf2c9,
-0xf2d0,0xf2d6,0xcd78,0xcd79,0xbbd7,0xcd7a,0xcd7b,0xcd7c,
-0xf2d5,0xcddc,0xcd7d,0xd6eb,0xcd7e,0xcd80,0xf2d2,0xf2d4,
-0xcd81,0xcd82,0xcd83,0xcd84,0xb8f2,0xcd85,0xcd86,0xcd87,
-0xcd88,0xf2cb,0xcd89,0xcd8a,0xcd8b,0xf2ce,0xc2f9,0xcd8c,
-0xd5dd,0xf2cc,0xf2cd,0xf2cf,0xf2d3,0xcd8d,0xcd8e,0xcd8f,
-0xf2d9,0xd3bc,0xcd90,0xcd91,0xcd92,0xcd93,0xb6ea,0xcd94,
-0xcaf1,0xcd95,0xb7e4,0xf2d7,0xcd96,0xcd97,0xcd98,0xf2d8,
-0xf2da,0xf2dd,0xf2db,0xcd99,0xcd9a,0xf2dc,0xcd9b,0xcd9c,
-0xcd9d,0xcd9e,0xd1d1,0xf2d1,0xcd9f,0xcdc9,0xcda0,0xcecf,
-0xd6a9,0xce40,0xf2e3,0xce41,0xc3db,0xce42,0xf2e0,0xce43,
-0xce44,0xc0af,0xf2ec,0xf2de,0xce45,0xf2e1,0xce46,0xce47,
-0xce48,0xf2e8,0xce49,0xce4a,0xce4b,0xce4c,0xf2e2,0xce4d,
-0xce4e,0xf2e7,0xce4f,0xce50,0xf2e6,0xce51,0xce52,0xf2e9,
-0xce53,0xce54,0xce55,0xf2df,0xce56,0xce57,0xf2e4,0xf2ea,
-0xce58,0xce59,0xce5a,0xce5b,0xce5c,0xce5d,0xce5e,0xd3ac,
-0xf2e5,0xb2f5,0xce5f,0xce60,0xf2f2,0xce61,0xd0ab,0xce62,
-0xce63,0xce64,0xce65,0xf2f5,0xce66,0xce67,0xce68,0xbbc8,
-0xce69,0xf2f9,0xce6a,0xce6b,0xce6c,0xce6d,0xce6e,0xce6f,
-0xf2f0,0xce70,0xce71,0xf2f6,0xf2f8,0xf2fa,0xce72,0xce73,
-0xce74,0xce75,0xce76,0xce77,0xce78,0xce79,0xf2f3,0xce7a,
-0xf2f1,0xce7b,0xce7c,0xce7d,0xbafb,0xce7e,0xb5fb,0xce80,
-0xce81,0xce82,0xce83,0xf2ef,0xf2f7,0xf2ed,0xf2ee,0xce84,
-0xce85,0xce86,0xf2eb,0xf3a6,0xce87,0xf3a3,0xce88,0xce89,
-0xf3a2,0xce8a,0xce8b,0xf2f4,0xce8c,0xc8da,0xce8d,0xce8e,
-0xce8f,0xce90,0xce91,0xf2fb,0xce92,0xce93,0xce94,0xf3a5,
-0xce95,0xce96,0xce97,0xce98,0xce99,0xce9a,0xce9b,0xc3f8,
-0xce9c,0xce9d,0xce9e,0xce9f,0xcea0,0xcf40,0xcf41,0xcf42,
-0xf2fd,0xcf43,0xcf44,0xf3a7,0xf3a9,0xf3a4,0xcf45,0xf2fc,
-0xcf46,0xcf47,0xcf48,0xf3ab,0xcf49,0xf3aa,0xcf4a,0xcf4b,
-0xcf4c,0xcf4d,0xc2dd,0xcf4e,0xcf4f,0xf3ae,0xcf50,0xcf51,
-0xf3b0,0xcf52,0xcf53,0xcf54,0xcf55,0xcf56,0xf3a1,0xcf57,
-0xcf58,0xcf59,0xf3b1,0xf3ac,0xcf5a,0xcf5b,0xcf5c,0xcf5d,
-0xcf5e,0xf3af,0xf2fe,0xf3ad,0xcf5f,0xcf60,0xcf61,0xcf62,
-0xcf63,0xcf64,0xcf65,0xf3b2,0xcf66,0xcf67,0xcf68,0xcf69,
-0xf3b4,0xcf6a,0xcf6b,0xcf6c,0xcf6d,0xf3a8,0xcf6e,0xcf6f,
-0xcf70,0xcf71,0xf3b3,0xcf72,0xcf73,0xcf74,0xf3b5,0xcf75,
-0xcf76,0xcf77,0xcf78,0xcf79,0xcf7a,0xcf7b,0xcf7c,0xcf7d,
-0xcf7e,0xd0b7,0xcf80,0xcf81,0xcf82,0xcf83,0xf3b8,0xcf84,
-0xcf85,0xcf86,0xcf87,0xd9f9,0xcf88,0xcf89,0xcf8a,0xcf8b,
-0xcf8c,0xcf8d,0xf3b9,0xcf8e,0xcf8f,0xcf90,0xcf91,0xcf92,
-0xcf93,0xcf94,0xcf95,0xf3b7,0xcf96,0xc8e4,0xf3b6,0xcf97,
-0xcf98,0xcf99,0xcf9a,0xf3ba,0xcf9b,0xcf9c,0xcf9d,0xcf9e,
-0xcf9f,0xf3bb,0xb4c0,0xcfa0,0xd040,0xd041,0xd042,0xd043,
-0xd044,0xd045,0xd046,0xd047,0xd048,0xd049,0xd04a,0xd04b,
-0xd04c,0xd04d,0xeec3,0xd04e,0xd04f,0xd050,0xd051,0xd052,
-0xd053,0xf3bc,0xd054,0xd055,0xf3bd,0xd056,0xd057,0xd058,
-0xd1aa,0xd059,0xd05a,0xd05b,0xf4ac,0xd0c6,0xd05c,0xd05d,
-0xd05e,0xd05f,0xd060,0xd061,0xd0d0,0xd1dc,0xd062,0xd063,
-0xd064,0xd065,0xd066,0xd067,0xcfce,0xd068,0xd069,0xbdd6,
-0xd06a,0xd1c3,0xd06b,0xd06c,0xd06d,0xd06e,0xd06f,0xd070,
-0xd071,0xbae2,0xe1e9,0xd2c2,0xf1c2,0xb2b9,0xd072,0xd073,
-0xb1ed,0xf1c3,0xd074,0xc9c0,0xb3c4,0xd075,0xd9f2,0xd076,
-0xcba5,0xd077,0xf1c4,0xd078,0xd079,0xd07a,0xd07b,0xd6d4,
-0xd07c,0xd07d,0xd07e,0xd080,0xd081,0xf1c5,0xf4c0,0xf1c6,
-0xd082,0xd4ac,0xf1c7,0xd083,0xb0c0,0xf4c1,0xd084,0xd085,
-0xf4c2,0xd086,0xd087,0xb4fc,0xd088,0xc5db,0xd089,0xd08a,
-0xd08b,0xd08c,0xccbb,0xd08d,0xd08e,0xd08f,0xd0e4,0xd090,
-0xd091,0xd092,0xd093,0xd094,0xcde0,0xd095,0xd096,0xd097,
-0xd098,0xd099,0xf1c8,0xd09a,0xd9f3,0xd09b,0xd09c,0xd09d,
-0xd09e,0xd09f,0xd0a0,0xb1bb,0xd140,0xcfae,0xd141,0xd142,
-0xd143,0xb8a4,0xd144,0xd145,0xd146,0xd147,0xd148,0xf1ca,
-0xd149,0xd14a,0xd14b,0xd14c,0xf1cb,0xd14d,0xd14e,0xd14f,
-0xd150,0xb2c3,0xc1d1,0xd151,0xd152,0xd7b0,0xf1c9,0xd153,
-0xd154,0xf1cc,0xd155,0xd156,0xd157,0xd158,0xf1ce,0xd159,
-0xd15a,0xd15b,0xd9f6,0xd15c,0xd2e1,0xd4a3,0xd15d,0xd15e,
-0xf4c3,0xc8b9,0xd15f,0xd160,0xd161,0xd162,0xd163,0xf4c4,
-0xd164,0xd165,0xf1cd,0xf1cf,0xbfe3,0xf1d0,0xd166,0xd167,
-0xf1d4,0xd168,0xd169,0xd16a,0xd16b,0xd16c,0xd16d,0xd16e,
-0xf1d6,0xf1d1,0xd16f,0xc9d1,0xc5e1,0xd170,0xd171,0xd172,
-0xc2e3,0xb9fc,0xd173,0xd174,0xf1d3,0xd175,0xf1d5,0xd176,
-0xd177,0xd178,0xb9d3,0xd179,0xd17a,0xd17b,0xd17c,0xd17d,
-0xd17e,0xd180,0xf1db,0xd181,0xd182,0xd183,0xd184,0xd185,
-0xbad6,0xd186,0xb0fd,0xf1d9,0xd187,0xd188,0xd189,0xd18a,
-0xd18b,0xf1d8,0xf1d2,0xf1da,0xd18c,0xd18d,0xd18e,0xd18f,
-0xd190,0xf1d7,0xd191,0xd192,0xd193,0xc8ec,0xd194,0xd195,
-0xd196,0xd197,0xcdca,0xf1dd,0xd198,0xd199,0xd19a,0xd19b,
-0xe5bd,0xd19c,0xd19d,0xd19e,0xf1dc,0xd19f,0xf1de,0xd1a0,
-0xd240,0xd241,0xd242,0xd243,0xd244,0xd245,0xd246,0xd247,
-0xd248,0xf1df,0xd249,0xd24a,0xcfe5,0xd24b,0xd24c,0xd24d,
-0xd24e,0xd24f,0xd250,0xd251,0xd252,0xd253,0xd254,0xd255,
-0xd256,0xd257,0xd258,0xd259,0xd25a,0xd25b,0xd25c,0xd25d,
-0xd25e,0xd25f,0xd260,0xd261,0xd262,0xd263,0xf4c5,0xbdf3,
-0xd264,0xd265,0xd266,0xd267,0xd268,0xd269,0xf1e0,0xd26a,
-0xd26b,0xd26c,0xd26d,0xd26e,0xd26f,0xd270,0xd271,0xd272,
-0xd273,0xd274,0xd275,0xd276,0xd277,0xd278,0xd279,0xd27a,
-0xd27b,0xd27c,0xd27d,0xf1e1,0xd27e,0xd280,0xd281,0xcef7,
-0xd282,0xd2aa,0xd283,0xf1fb,0xd284,0xd285,0xb8b2,0xd286,
-0xd287,0xd288,0xd289,0xd28a,0xd28b,0xd28c,0xd28d,0xd28e,
-0xd28f,0xd290,0xd291,0xd292,0xd293,0xd294,0xd295,0xd296,
-0xd297,0xd298,0xd299,0xd29a,0xd29b,0xd29c,0xd29d,0xd29e,
-0xd29f,0xd2a0,0xd340,0xd341,0xd342,0xd343,0xd344,0xd345,
-0xd346,0xd347,0xd348,0xd349,0xd34a,0xd34b,0xd34c,0xd34d,
-0xd34e,0xd34f,0xd350,0xd351,0xd352,0xd353,0xd354,0xd355,
-0xd356,0xd357,0xd358,0xd359,0xd35a,0xd35b,0xd35c,0xd35d,
-0xd35e,0xbcfb,0xb9db,0xd35f,0xb9e6,0xc3d9,0xcad3,0xeae8,
-0xc0c0,0xbef5,0xeae9,0xeaea,0xeaeb,0xd360,0xeaec,0xeaed,
-0xeaee,0xeaef,0xbdc7,0xd361,0xd362,0xd363,0xf5fb,0xd364,
-0xd365,0xd366,0xf5fd,0xd367,0xf5fe,0xd368,0xf5fc,0xd369,
-0xd36a,0xd36b,0xd36c,0xbde2,0xd36d,0xf6a1,0xb4a5,0xd36e,
-0xd36f,0xd370,0xd371,0xf6a2,0xd372,0xd373,0xd374,0xf6a3,
-0xd375,0xd376,0xd377,0xecb2,0xd378,0xd379,0xd37a,0xd37b,
-0xd37c,0xd37d,0xd37e,0xd380,0xd381,0xd382,0xd383,0xd384,
-0xd1d4,0xd385,0xd386,0xd387,0xd388,0xd389,0xd38a,0xd9ea,
-0xd38b,0xd38c,0xd38d,0xd38e,0xd38f,0xd390,0xd391,0xd392,
-0xd393,0xd394,0xd395,0xd396,0xd397,0xd398,0xd399,0xd39a,
-0xd39b,0xd39c,0xd39d,0xd39e,0xd39f,0xd3a0,0xd440,0xd441,
-0xd442,0xd443,0xd444,0xd445,0xd446,0xd447,0xd448,0xd449,
-0xd44a,0xd44b,0xd44c,0xd44d,0xd44e,0xd44f,0xd450,0xd451,
-0xd452,0xd453,0xd454,0xd455,0xd456,0xd457,0xd458,0xd459,
-0xd45a,0xd45b,0xd45c,0xd45d,0xd45e,0xd45f,0xf6a4,0xd460,
-0xd461,0xd462,0xd463,0xd464,0xd465,0xd466,0xd467,0xd468,
-0xeeba,0xd469,0xd46a,0xd46b,0xd46c,0xd46d,0xd46e,0xd46f,
-0xd470,0xd471,0xd472,0xd473,0xd474,0xd475,0xd476,0xd477,
-0xd478,0xd479,0xd47a,0xd47b,0xd47c,0xd47d,0xd47e,0xd480,
-0xd481,0xd482,0xd483,0xd484,0xd485,0xd486,0xd487,0xd488,
-0xd489,0xd48a,0xd48b,0xd48c,0xd48d,0xd48e,0xd48f,0xd490,
-0xd491,0xd492,0xd493,0xd494,0xd495,0xd496,0xd497,0xd498,
-0xd499,0xd5b2,0xd49a,0xd49b,0xd49c,0xd49d,0xd49e,0xd49f,
-0xd4a0,0xd540,0xd541,0xd542,0xd543,0xd544,0xd545,0xd546,
-0xd547,0xd3fe,0xccdc,0xd548,0xd549,0xd54a,0xd54b,0xd54c,
-0xd54d,0xd54e,0xd54f,0xcac4,0xd550,0xd551,0xd552,0xd553,
-0xd554,0xd555,0xd556,0xd557,0xd558,0xd559,0xd55a,0xd55b,
-0xd55c,0xd55d,0xd55e,0xd55f,0xd560,0xd561,0xd562,0xd563,
-0xd564,0xd565,0xd566,0xd567,0xd568,0xd569,0xd56a,0xd56b,
-0xd56c,0xd56d,0xd56e,0xd56f,0xd570,0xd571,0xd572,0xd573,
-0xd574,0xd575,0xd576,0xd577,0xd578,0xd579,0xd57a,0xd57b,
-0xd57c,0xd57d,0xd57e,0xd580,0xd581,0xd582,0xd583,0xd584,
-0xd585,0xd586,0xd587,0xd588,0xd589,0xd58a,0xd58b,0xd58c,
-0xd58d,0xd58e,0xd58f,0xd590,0xd591,0xd592,0xd593,0xd594,
-0xd595,0xd596,0xd597,0xd598,0xd599,0xd59a,0xd59b,0xd59c,
-0xd59d,0xd59e,0xd59f,0xd5a0,0xd640,0xd641,0xd642,0xd643,
-0xd644,0xd645,0xd646,0xd647,0xd648,0xd649,0xd64a,0xd64b,
-0xd64c,0xd64d,0xd64e,0xd64f,0xd650,0xd651,0xd652,0xd653,
-0xd654,0xd655,0xd656,0xd657,0xd658,0xd659,0xd65a,0xd65b,
-0xd65c,0xd65d,0xd65e,0xd65f,0xd660,0xd661,0xd662,0xe5c0,
-0xd663,0xd664,0xd665,0xd666,0xd667,0xd668,0xd669,0xd66a,
-0xd66b,0xd66c,0xd66d,0xd66e,0xd66f,0xd670,0xd671,0xd672,
-0xd673,0xd674,0xd675,0xd676,0xd677,0xd678,0xd679,0xd67a,
-0xd67b,0xd67c,0xd67d,0xd67e,0xd680,0xd681,0xf6a5,0xd682,
-0xd683,0xd684,0xd685,0xd686,0xd687,0xd688,0xd689,0xd68a,
-0xd68b,0xd68c,0xd68d,0xd68e,0xd68f,0xd690,0xd691,0xd692,
-0xd693,0xd694,0xd695,0xd696,0xd697,0xd698,0xd699,0xd69a,
-0xd69b,0xd69c,0xd69d,0xd69e,0xd69f,0xd6a0,0xd740,0xd741,
-0xd742,0xd743,0xd744,0xd745,0xd746,0xd747,0xd748,0xd749,
-0xd74a,0xd74b,0xd74c,0xd74d,0xd74e,0xd74f,0xd750,0xd751,
-0xd752,0xd753,0xd754,0xd755,0xd756,0xd757,0xd758,0xd759,
-0xd75a,0xd75b,0xd75c,0xd75d,0xd75e,0xd75f,0xbeaf,0xd760,
-0xd761,0xd762,0xd763,0xd764,0xc6a9,0xd765,0xd766,0xd767,
-0xd768,0xd769,0xd76a,0xd76b,0xd76c,0xd76d,0xd76e,0xd76f,
-0xd770,0xd771,0xd772,0xd773,0xd774,0xd775,0xd776,0xd777,
-0xd778,0xd779,0xd77a,0xd77b,0xd77c,0xd77d,0xd77e,0xd780,
-0xd781,0xd782,0xd783,0xd784,0xd785,0xd786,0xd787,0xd788,
-0xd789,0xd78a,0xd78b,0xd78c,0xd78d,0xd78e,0xd78f,0xd790,
-0xd791,0xd792,0xd793,0xd794,0xd795,0xd796,0xd797,0xd798,
-0xdaa5,0xbcc6,0xb6a9,0xb8bc,0xc8cf,0xbca5,0xdaa6,0xdaa7,
-0xccd6,0xc8c3,0xdaa8,0xc6fd,0xd799,0xd1b5,0xd2e9,0xd1b6,
-0xbcc7,0xd79a,0xbdb2,0xbbe4,0xdaa9,0xdaaa,0xd1c8,0xdaab,
-0xd0ed,0xb6ef,0xc2db,0xd79b,0xcbcf,0xb7ed,0xc9e8,0xb7c3,
-0xbef7,0xd6a4,0xdaac,0xdaad,0xc6c0,0xd7e7,0xcab6,0xd79c,
-0xd5a9,0xcbdf,0xd5ef,0xdaae,0xd6df,0xb4ca,0xdab0,0xdaaf,
-0xd79d,0xd2eb,0xdab1,0xdab2,0xdab3,0xcad4,0xdab4,0xcaab,
-0xdab5,0xdab6,0xb3cf,0xd6ef,0xdab7,0xbbb0,0xb5ae,0xdab8,
-0xdab9,0xb9ee,0xd1af,0xd2e8,0xdaba,0xb8c3,0xcfea,0xb2ef,
-0xdabb,0xdabc,0xd79e,0xbdeb,0xcedc,0xd3ef,0xdabd,0xcef3,
-0xdabe,0xd3d5,0xbbe5,0xdabf,0xcbb5,0xcbd0,0xdac0,0xc7eb,
-0xd6ee,0xdac1,0xc5b5,0xb6c1,0xdac2,0xb7cc,0xbfce,0xdac3,
-0xdac4,0xcbad,0xdac5,0xb5f7,0xdac6,0xc1c2,0xd7bb,0xdac7,
-0xccb8,0xd79f,0xd2ea,0xc4b1,0xdac8,0xb5fd,0xbbd1,0xdac9,
-0xd0b3,0xdaca,0xdacb,0xcebd,0xdacc,0xdacd,0xdace,0xb2f7,
-0xdad1,0xdacf,0xd1e8,0xdad0,0xc3d5,0xdad2,0xd7a0,0xdad3,
-0xdad4,0xdad5,0xd0bb,0xd2a5,0xb0f9,0xdad6,0xc7ab,0xdad7,
-0xbdf7,0xc3a1,0xdad8,0xdad9,0xc3fd,0xccb7,0xdada,0xdadb,
-0xc0be,0xc6d7,0xdadc,0xdadd,0xc7b4,0xdade,0xdadf,0xb9c8,
-0xd840,0xd841,0xd842,0xd843,0xd844,0xd845,0xd846,0xd847,
-0xd848,0xbbed,0xd849,0xd84a,0xd84b,0xd84c,0xb6b9,0xf4f8,
-0xd84d,0xf4f9,0xd84e,0xd84f,0xcde3,0xd850,0xd851,0xd852,
-0xd853,0xd854,0xd855,0xd856,0xd857,0xf5b9,0xd858,0xd859,
-0xd85a,0xd85b,0xebe0,0xd85c,0xd85d,0xd85e,0xd85f,0xd860,
-0xd861,0xcff3,0xbbbf,0xd862,0xd863,0xd864,0xd865,0xd866,
-0xd867,0xd868,0xbac0,0xd4a5,0xd869,0xd86a,0xd86b,0xd86c,
-0xd86d,0xd86e,0xd86f,0xe1d9,0xd870,0xd871,0xd872,0xd873,
-0xf5f4,0xb1aa,0xb2f2,0xd874,0xd875,0xd876,0xd877,0xd878,
-0xd879,0xd87a,0xf5f5,0xd87b,0xd87c,0xf5f7,0xd87d,0xd87e,
-0xd880,0xbad1,0xf5f6,0xd881,0xc3b2,0xd882,0xd883,0xd884,
-0xd885,0xd886,0xd887,0xd888,0xf5f9,0xd889,0xd88a,0xd88b,
-0xf5f8,0xd88c,0xd88d,0xd88e,0xd88f,0xd890,0xd891,0xd892,
-0xd893,0xd894,0xd895,0xd896,0xd897,0xd898,0xd899,0xd89a,
-0xd89b,0xd89c,0xd89d,0xd89e,0xd89f,0xd8a0,0xd940,0xd941,
-0xd942,0xd943,0xd944,0xd945,0xd946,0xd947,0xd948,0xd949,
-0xd94a,0xd94b,0xd94c,0xd94d,0xd94e,0xd94f,0xd950,0xd951,
-0xd952,0xd953,0xd954,0xd955,0xd956,0xd957,0xd958,0xd959,
-0xd95a,0xd95b,0xd95c,0xd95d,0xd95e,0xd95f,0xd960,0xd961,
-0xd962,0xd963,0xd964,0xd965,0xd966,0xd967,0xd968,0xd969,
-0xd96a,0xd96b,0xd96c,0xd96d,0xd96e,0xd96f,0xd970,0xd971,
-0xd972,0xd973,0xd974,0xd975,0xd976,0xd977,0xd978,0xd979,
-0xd97a,0xd97b,0xd97c,0xd97d,0xd97e,0xd980,0xd981,0xd982,
-0xd983,0xd984,0xd985,0xd986,0xd987,0xd988,0xd989,0xd98a,
-0xd98b,0xd98c,0xd98d,0xd98e,0xd98f,0xd990,0xd991,0xd992,
-0xd993,0xd994,0xd995,0xd996,0xd997,0xd998,0xd999,0xd99a,
-0xd99b,0xd99c,0xd99d,0xd99e,0xd99f,0xd9a0,0xda40,0xda41,
-0xda42,0xda43,0xda44,0xda45,0xda46,0xda47,0xda48,0xda49,
-0xda4a,0xda4b,0xda4c,0xda4d,0xda4e,0xb1b4,0xd5ea,0xb8ba,
-0xda4f,0xb9b1,0xb2c6,0xd4f0,0xcfcd,0xb0dc,0xd5cb,0xbbf5,
-0xd6ca,0xb7b7,0xccb0,0xc6b6,0xb1e1,0xb9ba,0xd6fc,0xb9e1,
-0xb7a1,0xbcfa,0xeada,0xeadb,0xccf9,0xb9f3,0xeadc,0xb4fb,
-0xc3b3,0xb7d1,0xbad8,0xeadd,0xd4f4,0xeade,0xbcd6,0xbbdf,
-0xeadf,0xc1de,0xc2b8,0xd4df,0xd7ca,0xeae0,0xeae1,0xeae4,
-0xeae2,0xeae3,0xc9de,0xb8b3,0xb6c4,0xeae5,0xcaea,0xc9cd,
-0xb4cd,0xda50,0xda51,0xe2d9,0xc5e2,0xeae6,0xc0b5,0xda52,
-0xd7b8,0xeae7,0xd7ac,0xc8fc,0xd8d3,0xd8cd,0xd4de,0xda53,
-0xd4f9,0xc9c4,0xd3ae,0xb8d3,0xb3e0,0xda54,0xc9e2,0xf4f6,
-0xda55,0xda56,0xda57,0xbad5,0xda58,0xf4f7,0xda59,0xda5a,
-0xd7df,0xda5b,0xda5c,0xf4f1,0xb8b0,0xd5d4,0xb8cf,0xc6f0,
-0xda5d,0xda5e,0xda5f,0xda60,0xda61,0xda62,0xda63,0xda64,
-0xda65,0xb3c3,0xda66,0xda67,0xf4f2,0xb3ac,0xda68,0xda69,
-0xda6a,0xda6b,0xd4bd,0xc7f7,0xda6c,0xda6d,0xda6e,0xda6f,
-0xda70,0xf4f4,0xda71,0xda72,0xf4f3,0xda73,0xda74,0xda75,
-0xda76,0xda77,0xda78,0xda79,0xda7a,0xda7b,0xda7c,0xcccb,
-0xda7d,0xda7e,0xda80,0xc8a4,0xda81,0xda82,0xda83,0xda84,
-0xda85,0xda86,0xda87,0xda88,0xda89,0xda8a,0xda8b,0xda8c,
-0xda8d,0xf4f5,0xda8e,0xd7e3,0xc5bf,0xf5c0,0xda8f,0xda90,
-0xf5bb,0xda91,0xf5c3,0xda92,0xf5c2,0xda93,0xd6ba,0xf5c1,
-0xda94,0xda95,0xda96,0xd4be,0xf5c4,0xda97,0xf5cc,0xda98,
-0xda99,0xda9a,0xda9b,0xb0cf,0xb5f8,0xda9c,0xf5c9,0xf5ca,
-0xda9d,0xc5dc,0xda9e,0xda9f,0xdaa0,0xdb40,0xf5c5,0xf5c6,
-0xdb41,0xdb42,0xf5c7,0xf5cb,0xdb43,0xbee0,0xf5c8,0xb8fa,
-0xdb44,0xdb45,0xdb46,0xf5d0,0xf5d3,0xdb47,0xdb48,0xdb49,
-0xbfe7,0xdb4a,0xb9f2,0xf5bc,0xf5cd,0xdb4b,0xdb4c,0xc2b7,
-0xdb4d,0xdb4e,0xdb4f,0xccf8,0xdb50,0xbcf9,0xdb51,0xf5ce,
-0xf5cf,0xf5d1,0xb6e5,0xf5d2,0xdb52,0xf5d5,0xdb53,0xdb54,
-0xdb55,0xdb56,0xdb57,0xdb58,0xdb59,0xf5bd,0xdb5a,0xdb5b,
-0xdb5c,0xf5d4,0xd3bb,0xdb5d,0xb3ec,0xdb5e,0xdb5f,0xcca4,
-0xdb60,0xdb61,0xdb62,0xdb63,0xf5d6,0xdb64,0xdb65,0xdb66,
-0xdb67,0xdb68,0xdb69,0xdb6a,0xdb6b,0xf5d7,0xbee1,0xf5d8,
-0xdb6c,0xdb6d,0xccdf,0xf5db,0xdb6e,0xdb6f,0xdb70,0xdb71,
-0xdb72,0xb2c8,0xd7d9,0xdb73,0xf5d9,0xdb74,0xf5da,0xf5dc,
-0xdb75,0xf5e2,0xdb76,0xdb77,0xdb78,0xf5e0,0xdb79,0xdb7a,
-0xdb7b,0xf5df,0xf5dd,0xdb7c,0xdb7d,0xf5e1,0xdb7e,0xdb80,
-0xf5de,0xf5e4,0xf5e5,0xdb81,0xcce3,0xdb82,0xdb83,0xe5bf,
-0xb5b8,0xf5e3,0xf5e8,0xcca3,0xdb84,0xdb85,0xdb86,0xdb87,
-0xdb88,0xf5e6,0xf5e7,0xdb89,0xdb8a,0xdb8b,0xdb8c,0xdb8d,
-0xdb8e,0xf5be,0xdb8f,0xdb90,0xdb91,0xdb92,0xdb93,0xdb94,
-0xdb95,0xdb96,0xdb97,0xdb98,0xdb99,0xdb9a,0xb1c4,0xdb9b,
-0xdb9c,0xf5bf,0xdb9d,0xdb9e,0xb5c5,0xb2e4,0xdb9f,0xf5ec,
-0xf5e9,0xdba0,0xb6d7,0xdc40,0xf5ed,0xdc41,0xf5ea,0xdc42,
-0xdc43,0xdc44,0xdc45,0xdc46,0xf5eb,0xdc47,0xdc48,0xb4da,
-0xdc49,0xd4ea,0xdc4a,0xdc4b,0xdc4c,0xf5ee,0xdc4d,0xb3f9,
-0xdc4e,0xdc4f,0xdc50,0xdc51,0xdc52,0xdc53,0xdc54,0xf5ef,
-0xf5f1,0xdc55,0xdc56,0xdc57,0xf5f0,0xdc58,0xdc59,0xdc5a,
-0xdc5b,0xdc5c,0xdc5d,0xdc5e,0xf5f2,0xdc5f,0xf5f3,0xdc60,
-0xdc61,0xdc62,0xdc63,0xdc64,0xdc65,0xdc66,0xdc67,0xdc68,
-0xdc69,0xdc6a,0xdc6b,0xc9ed,0xb9aa,0xdc6c,0xdc6d,0xc7fb,
-0xdc6e,0xdc6f,0xb6e3,0xdc70,0xdc71,0xdc72,0xdc73,0xdc74,
-0xdc75,0xdc76,0xccc9,0xdc77,0xdc78,0xdc79,0xdc7a,0xdc7b,
-0xdc7c,0xdc7d,0xdc7e,0xdc80,0xdc81,0xdc82,0xdc83,0xdc84,
-0xdc85,0xdc86,0xdc87,0xdc88,0xdc89,0xdc8a,0xeaa6,0xdc8b,
-0xdc8c,0xdc8d,0xdc8e,0xdc8f,0xdc90,0xdc91,0xdc92,0xdc93,
-0xdc94,0xdc95,0xdc96,0xdc97,0xdc98,0xdc99,0xdc9a,0xdc9b,
-0xdc9c,0xdc9d,0xdc9e,0xdc9f,0xdca0,0xdd40,0xdd41,0xdd42,
-0xdd43,0xdd44,0xdd45,0xdd46,0xdd47,0xdd48,0xdd49,0xdd4a,
-0xdd4b,0xdd4c,0xdd4d,0xdd4e,0xdd4f,0xdd50,0xdd51,0xdd52,
-0xdd53,0xdd54,0xdd55,0xdd56,0xdd57,0xdd58,0xdd59,0xdd5a,
-0xdd5b,0xdd5c,0xdd5d,0xdd5e,0xdd5f,0xdd60,0xdd61,0xdd62,
-0xdd63,0xdd64,0xdd65,0xdd66,0xdd67,0xdd68,0xdd69,0xdd6a,
-0xdd6b,0xdd6c,0xdd6d,0xdd6e,0xdd6f,0xdd70,0xdd71,0xdd72,
-0xdd73,0xdd74,0xdd75,0xdd76,0xdd77,0xdd78,0xdd79,0xdd7a,
-0xdd7b,0xdd7c,0xdd7d,0xdd7e,0xdd80,0xdd81,0xdd82,0xdd83,
-0xdd84,0xdd85,0xdd86,0xdd87,0xdd88,0xdd89,0xdd8a,0xdd8b,
-0xdd8c,0xdd8d,0xdd8e,0xdd8f,0xdd90,0xdd91,0xdd92,0xdd93,
-0xdd94,0xdd95,0xdd96,0xdd97,0xdd98,0xdd99,0xdd9a,0xdd9b,
-0xdd9c,0xdd9d,0xdd9e,0xdd9f,0xdda0,0xde40,0xde41,0xde42,
-0xde43,0xde44,0xde45,0xde46,0xde47,0xde48,0xde49,0xde4a,
-0xde4b,0xde4c,0xde4d,0xde4e,0xde4f,0xde50,0xde51,0xde52,
-0xde53,0xde54,0xde55,0xde56,0xde57,0xde58,0xde59,0xde5a,
-0xde5b,0xde5c,0xde5d,0xde5e,0xde5f,0xde60,0xb3b5,0xd4fe,
-0xb9ec,0xd0f9,0xde61,0xe9ed,0xd7aa,0xe9ee,0xc2d6,0xc8ed,
-0xbae4,0xe9ef,0xe9f0,0xe9f1,0xd6e1,0xe9f2,0xe9f3,0xe9f5,
-0xe9f4,0xe9f6,0xe9f7,0xc7e1,0xe9f8,0xd4d8,0xe9f9,0xbdce,
-0xde62,0xe9fa,0xe9fb,0xbdcf,0xe9fc,0xb8a8,0xc1be,0xe9fd,
-0xb1b2,0xbbd4,0xb9f5,0xe9fe,0xde63,0xeaa1,0xeaa2,0xeaa3,
-0xb7f8,0xbcad,0xde64,0xcae4,0xe0ce,0xd4af,0xcfbd,0xd5b7,
-0xeaa4,0xd5de,0xeaa5,0xd0c1,0xb9bc,0xde65,0xb4c7,0xb1d9,
-0xde66,0xde67,0xde68,0xc0b1,0xde69,0xde6a,0xde6b,0xde6c,
-0xb1e6,0xb1e7,0xde6d,0xb1e8,0xde6e,0xde6f,0xde70,0xde71,
-0xb3bd,0xc8e8,0xde72,0xde73,0xde74,0xde75,0xe5c1,0xde76,
-0xde77,0xb1df,0xde78,0xde79,0xde7a,0xc1c9,0xb4ef,0xde7b,
-0xde7c,0xc7a8,0xd3d8,0xde7d,0xc6f9,0xd1b8,0xde7e,0xb9fd,
-0xc2f5,0xde80,0xde81,0xde82,0xde83,0xde84,0xd3ad,0xde85,
-0xd4cb,0xbdfc,0xde86,0xe5c2,0xb7b5,0xe5c3,0xde87,0xde88,
-0xbbb9,0xd5e2,0xde89,0xbdf8,0xd4b6,0xcea5,0xc1ac,0xb3d9,
-0xde8a,0xde8b,0xccf6,0xde8c,0xe5c6,0xe5c4,0xe5c8,0xde8d,
-0xe5ca,0xe5c7,0xb5cf,0xc6c8,0xde8e,0xb5fc,0xe5c5,0xde8f,
-0xcaf6,0xde90,0xde91,0xe5c9,0xde92,0xde93,0xde94,0xc3d4,
-0xb1c5,0xbca3,0xde95,0xde96,0xde97,0xd7b7,0xde98,0xde99,
-0xcdcb,0xcbcd,0xcaca,0xccd3,0xe5cc,0xe5cb,0xc4e6,0xde9a,
-0xde9b,0xd1a1,0xd1b7,0xe5cd,0xde9c,0xe5d0,0xde9d,0xcdb8,
-0xd6f0,0xe5cf,0xb5dd,0xde9e,0xcdbe,0xde9f,0xe5d1,0xb6ba,
-0xdea0,0xdf40,0xcda8,0xb9e4,0xdf41,0xcac5,0xb3d1,0xcbd9,
-0xd4ec,0xe5d2,0xb7ea,0xdf42,0xdf43,0xdf44,0xe5ce,0xdf45,
-0xdf46,0xdf47,0xdf48,0xdf49,0xdf4a,0xe5d5,0xb4fe,0xe5d6,
-0xdf4b,0xdf4c,0xdf4d,0xdf4e,0xdf4f,0xe5d3,0xe5d4,0xdf50,
-0xd2dd,0xdf51,0xdf52,0xc2df,0xb1c6,0xdf53,0xd3e2,0xdf54,
-0xdf55,0xb6dd,0xcbec,0xdf56,0xe5d7,0xdf57,0xdf58,0xd3f6,
-0xdf59,0xdf5a,0xdf5b,0xdf5c,0xdf5d,0xb1e9,0xdf5e,0xb6f4,
-0xe5da,0xe5d8,0xe5d9,0xb5c0,0xdf5f,0xdf60,0xdf61,0xd2c5,
-0xe5dc,0xdf62,0xdf63,0xe5de,0xdf64,0xdf65,0xdf66,0xdf67,
-0xdf68,0xdf69,0xe5dd,0xc7b2,0xdf6a,0xd2a3,0xdf6b,0xdf6c,
-0xe5db,0xdf6d,0xdf6e,0xdf6f,0xdf70,0xd4e2,0xd5da,0xdf71,
-0xdf72,0xdf73,0xdf74,0xdf75,0xe5e0,0xd7f1,0xdf76,0xdf77,
-0xdf78,0xdf79,0xdf7a,0xdf7b,0xdf7c,0xe5e1,0xdf7d,0xb1dc,
-0xd1fb,0xdf7e,0xe5e2,0xe5e4,0xdf80,0xdf81,0xdf82,0xdf83,
-0xe5e3,0xdf84,0xdf85,0xe5e5,0xdf86,0xdf87,0xdf88,0xdf89,
-0xdf8a,0xd2d8,0xdf8b,0xb5cb,0xdf8c,0xe7df,0xdf8d,0xdaf5,
-0xdf8e,0xdaf8,0xdf8f,0xdaf6,0xdf90,0xdaf7,0xdf91,0xdf92,
-0xdf93,0xdafa,0xd0cf,0xc4c7,0xdf94,0xdf95,0xb0ee,0xdf96,
-0xdf97,0xdf98,0xd0b0,0xdf99,0xdaf9,0xdf9a,0xd3ca,0xbaaa,
-0xdba2,0xc7f1,0xdf9b,0xdafc,0xdafb,0xc9db,0xdafd,0xdf9c,
-0xdba1,0xd7de,0xdafe,0xc1da,0xdf9d,0xdf9e,0xdba5,0xdf9f,
-0xdfa0,0xd3f4,0xe040,0xe041,0xdba7,0xdba4,0xe042,0xdba8,
-0xe043,0xe044,0xbdbc,0xe045,0xe046,0xe047,0xc0c9,0xdba3,
-0xdba6,0xd6a3,0xe048,0xdba9,0xe049,0xe04a,0xe04b,0xdbad,
-0xe04c,0xe04d,0xe04e,0xdbae,0xdbac,0xbac2,0xe04f,0xe050,
-0xe051,0xbfa4,0xdbab,0xe052,0xe053,0xe054,0xdbaa,0xd4c7,
-0xb2bf,0xe055,0xe056,0xdbaf,0xe057,0xb9f9,0xe058,0xdbb0,
-0xe059,0xe05a,0xe05b,0xe05c,0xb3bb,0xe05d,0xe05e,0xe05f,
-0xb5a6,0xe060,0xe061,0xe062,0xe063,0xb6bc,0xdbb1,0xe064,
-0xe065,0xe066,0xb6f5,0xe067,0xdbb2,0xe068,0xe069,0xe06a,
-0xe06b,0xe06c,0xe06d,0xe06e,0xe06f,0xe070,0xe071,0xe072,
-0xe073,0xe074,0xe075,0xe076,0xe077,0xe078,0xe079,0xe07a,
-0xe07b,0xb1c9,0xe07c,0xe07d,0xe07e,0xe080,0xdbb4,0xe081,
-0xe082,0xe083,0xdbb3,0xdbb5,0xe084,0xe085,0xe086,0xe087,
-0xe088,0xe089,0xe08a,0xe08b,0xe08c,0xe08d,0xe08e,0xdbb7,
-0xe08f,0xdbb6,0xe090,0xe091,0xe092,0xe093,0xe094,0xe095,
-0xe096,0xdbb8,0xe097,0xe098,0xe099,0xe09a,0xe09b,0xe09c,
-0xe09d,0xe09e,0xe09f,0xdbb9,0xe0a0,0xe140,0xdbba,0xe141,
-0xe142,0xd3cf,0xf4fa,0xc7f5,0xd7c3,0xc5e4,0xf4fc,0xf4fd,
-0xf4fb,0xe143,0xbec6,0xe144,0xe145,0xe146,0xe147,0xd0ef,
-0xe148,0xe149,0xb7d3,0xe14a,0xe14b,0xd4cd,0xccaa,0xe14c,
-0xe14d,0xf5a2,0xf5a1,0xbaa8,0xf4fe,0xcbd6,0xe14e,0xe14f,
-0xe150,0xf5a4,0xc0d2,0xe151,0xb3ea,0xe152,0xcdaa,0xf5a5,
-0xf5a3,0xbdb4,0xf5a8,0xe153,0xf5a9,0xbdcd,0xc3b8,0xbfe1,
-0xcbe1,0xf5aa,0xe154,0xe155,0xe156,0xf5a6,0xf5a7,0xc4f0,
-0xe157,0xe158,0xe159,0xe15a,0xe15b,0xf5ac,0xe15c,0xb4bc,
-0xe15d,0xd7ed,0xe15e,0xb4d7,0xf5ab,0xf5ae,0xe15f,0xe160,
-0xf5ad,0xf5af,0xd0d1,0xe161,0xe162,0xe163,0xe164,0xe165,
-0xe166,0xe167,0xc3d1,0xc8a9,0xe168,0xe169,0xe16a,0xe16b,
-0xe16c,0xe16d,0xf5b0,0xf5b1,0xe16e,0xe16f,0xe170,0xe171,
-0xe172,0xe173,0xf5b2,0xe174,0xe175,0xf5b3,0xf5b4,0xf5b5,
-0xe176,0xe177,0xe178,0xe179,0xf5b7,0xf5b6,0xe17a,0xe17b,
-0xe17c,0xe17d,0xf5b8,0xe17e,0xe180,0xe181,0xe182,0xe183,
-0xe184,0xe185,0xe186,0xe187,0xe188,0xe189,0xe18a,0xb2c9,
-0xe18b,0xd3d4,0xcacd,0xe18c,0xc0ef,0xd6d8,0xd2b0,0xc1bf,
-0xe18d,0xbdf0,0xe18e,0xe18f,0xe190,0xe191,0xe192,0xe193,
-0xe194,0xe195,0xe196,0xe197,0xb8aa,0xe198,0xe199,0xe19a,
-0xe19b,0xe19c,0xe19d,0xe19e,0xe19f,0xe1a0,0xe240,0xe241,
-0xe242,0xe243,0xe244,0xe245,0xe246,0xe247,0xe248,0xe249,
-0xe24a,0xe24b,0xe24c,0xe24d,0xe24e,0xe24f,0xe250,0xe251,
-0xe252,0xe253,0xe254,0xe255,0xe256,0xe257,0xe258,0xe259,
-0xe25a,0xe25b,0xe25c,0xe25d,0xe25e,0xe25f,0xe260,0xe261,
-0xe262,0xe263,0xe264,0xe265,0xe266,0xe267,0xe268,0xe269,
-0xe26a,0xe26b,0xe26c,0xe26d,0xe26e,0xe26f,0xe270,0xe271,
-0xe272,0xe273,0xe274,0xe275,0xe276,0xe277,0xe278,0xe279,
-0xe27a,0xe27b,0xe27c,0xe27d,0xe27e,0xe280,0xe281,0xe282,
-0xe283,0xe284,0xe285,0xe286,0xe287,0xe288,0xe289,0xe28a,
-0xe28b,0xe28c,0xe28d,0xe28e,0xe28f,0xe290,0xe291,0xe292,
-0xe293,0xe294,0xe295,0xe296,0xe297,0xe298,0xe299,0xe29a,
-0xe29b,0xe29c,0xe29d,0xe29e,0xe29f,0xe2a0,0xe340,0xe341,
-0xe342,0xe343,0xe344,0xe345,0xe346,0xe347,0xe348,0xe349,
-0xe34a,0xe34b,0xe34c,0xe34d,0xe34e,0xe34f,0xe350,0xe351,
-0xe352,0xe353,0xe354,0xe355,0xe356,0xe357,0xe358,0xe359,
-0xe35a,0xe35b,0xe35c,0xe35d,0xe35e,0xe35f,0xe360,0xe361,
-0xe362,0xe363,0xe364,0xe365,0xe366,0xe367,0xe368,0xe369,
-0xe36a,0xe36b,0xe36c,0xe36d,0xbcf8,0xe36e,0xe36f,0xe370,
-0xe371,0xe372,0xe373,0xe374,0xe375,0xe376,0xe377,0xe378,
-0xe379,0xe37a,0xe37b,0xe37c,0xe37d,0xe37e,0xe380,0xe381,
-0xe382,0xe383,0xe384,0xe385,0xe386,0xe387,0xf6c6,0xe388,
-0xe389,0xe38a,0xe38b,0xe38c,0xe38d,0xe38e,0xe38f,0xe390,
-0xe391,0xe392,0xe393,0xe394,0xe395,0xe396,0xe397,0xe398,
-0xe399,0xe39a,0xe39b,0xe39c,0xe39d,0xe39e,0xe39f,0xe3a0,
-0xe440,0xe441,0xe442,0xe443,0xe444,0xe445,0xf6c7,0xe446,
-0xe447,0xe448,0xe449,0xe44a,0xe44b,0xe44c,0xe44d,0xe44e,
-0xe44f,0xe450,0xe451,0xe452,0xe453,0xe454,0xe455,0xe456,
-0xe457,0xe458,0xe459,0xe45a,0xe45b,0xe45c,0xe45d,0xe45e,
-0xf6c8,0xe45f,0xe460,0xe461,0xe462,0xe463,0xe464,0xe465,
-0xe466,0xe467,0xe468,0xe469,0xe46a,0xe46b,0xe46c,0xe46d,
-0xe46e,0xe46f,0xe470,0xe471,0xe472,0xe473,0xe474,0xe475,
-0xe476,0xe477,0xe478,0xe479,0xe47a,0xe47b,0xe47c,0xe47d,
-0xe47e,0xe480,0xe481,0xe482,0xe483,0xe484,0xe485,0xe486,
-0xe487,0xe488,0xe489,0xe48a,0xe48b,0xe48c,0xe48d,0xe48e,
-0xe48f,0xe490,0xe491,0xe492,0xe493,0xe494,0xe495,0xe496,
-0xe497,0xe498,0xe499,0xe49a,0xe49b,0xe49c,0xe49d,0xe49e,
-0xe49f,0xe4a0,0xe540,0xe541,0xe542,0xe543,0xe544,0xe545,
-0xe546,0xe547,0xe548,0xe549,0xe54a,0xe54b,0xe54c,0xe54d,
-0xe54e,0xe54f,0xe550,0xe551,0xe552,0xe553,0xe554,0xe555,
-0xe556,0xe557,0xe558,0xe559,0xe55a,0xe55b,0xe55c,0xe55d,
-0xe55e,0xe55f,0xe560,0xe561,0xe562,0xe563,0xe564,0xe565,
-0xe566,0xe567,0xe568,0xe569,0xe56a,0xe56b,0xe56c,0xe56d,
-0xe56e,0xe56f,0xe570,0xe571,0xe572,0xe573,0xf6c9,0xe574,
-0xe575,0xe576,0xe577,0xe578,0xe579,0xe57a,0xe57b,0xe57c,
-0xe57d,0xe57e,0xe580,0xe581,0xe582,0xe583,0xe584,0xe585,
-0xe586,0xe587,0xe588,0xe589,0xe58a,0xe58b,0xe58c,0xe58d,
-0xe58e,0xe58f,0xe590,0xe591,0xe592,0xe593,0xe594,0xe595,
-0xe596,0xe597,0xe598,0xe599,0xe59a,0xe59b,0xe59c,0xe59d,
-0xe59e,0xe59f,0xf6ca,0xe5a0,0xe640,0xe641,0xe642,0xe643,
-0xe644,0xe645,0xe646,0xe647,0xe648,0xe649,0xe64a,0xe64b,
-0xe64c,0xe64d,0xe64e,0xe64f,0xe650,0xe651,0xe652,0xe653,
-0xe654,0xe655,0xe656,0xe657,0xe658,0xe659,0xe65a,0xe65b,
-0xe65c,0xe65d,0xe65e,0xe65f,0xe660,0xe661,0xe662,0xf6cc,
-0xe663,0xe664,0xe665,0xe666,0xe667,0xe668,0xe669,0xe66a,
-0xe66b,0xe66c,0xe66d,0xe66e,0xe66f,0xe670,0xe671,0xe672,
-0xe673,0xe674,0xe675,0xe676,0xe677,0xe678,0xe679,0xe67a,
-0xe67b,0xe67c,0xe67d,0xe67e,0xe680,0xe681,0xe682,0xe683,
-0xe684,0xe685,0xe686,0xe687,0xe688,0xe689,0xe68a,0xe68b,
-0xe68c,0xe68d,0xe68e,0xe68f,0xe690,0xe691,0xe692,0xe693,
-0xe694,0xe695,0xe696,0xe697,0xe698,0xe699,0xe69a,0xe69b,
-0xe69c,0xe69d,0xf6cb,0xe69e,0xe69f,0xe6a0,0xe740,0xe741,
-0xe742,0xe743,0xe744,0xe745,0xe746,0xe747,0xf7e9,0xe748,
-0xe749,0xe74a,0xe74b,0xe74c,0xe74d,0xe74e,0xe74f,0xe750,
-0xe751,0xe752,0xe753,0xe754,0xe755,0xe756,0xe757,0xe758,
-0xe759,0xe75a,0xe75b,0xe75c,0xe75d,0xe75e,0xe75f,0xe760,
-0xe761,0xe762,0xe763,0xe764,0xe765,0xe766,0xe767,0xe768,
-0xe769,0xe76a,0xe76b,0xe76c,0xe76d,0xe76e,0xe76f,0xe770,
-0xe771,0xe772,0xe773,0xe774,0xe775,0xe776,0xe777,0xe778,
-0xe779,0xe77a,0xe77b,0xe77c,0xe77d,0xe77e,0xe780,0xe781,
-0xe782,0xe783,0xe784,0xe785,0xe786,0xe787,0xe788,0xe789,
-0xe78a,0xe78b,0xe78c,0xe78d,0xe78e,0xe78f,0xe790,0xe791,
-0xe792,0xe793,0xe794,0xe795,0xe796,0xe797,0xe798,0xe799,
-0xe79a,0xe79b,0xe79c,0xe79d,0xe79e,0xe79f,0xe7a0,0xe840,
-0xe841,0xe842,0xe843,0xe844,0xe845,0xe846,0xe847,0xe848,
-0xe849,0xe84a,0xe84b,0xe84c,0xe84d,0xe84e,0xf6cd,0xe84f,
-0xe850,0xe851,0xe852,0xe853,0xe854,0xe855,0xe856,0xe857,
-0xe858,0xe859,0xe85a,0xe85b,0xe85c,0xe85d,0xe85e,0xe85f,
-0xe860,0xe861,0xe862,0xe863,0xe864,0xe865,0xe866,0xe867,
-0xe868,0xe869,0xe86a,0xe86b,0xe86c,0xe86d,0xe86e,0xe86f,
-0xe870,0xe871,0xe872,0xe873,0xe874,0xe875,0xe876,0xe877,
-0xe878,0xe879,0xe87a,0xf6ce,0xe87b,0xe87c,0xe87d,0xe87e,
-0xe880,0xe881,0xe882,0xe883,0xe884,0xe885,0xe886,0xe887,
-0xe888,0xe889,0xe88a,0xe88b,0xe88c,0xe88d,0xe88e,0xe88f,
-0xe890,0xe891,0xe892,0xe893,0xe894,0xeec4,0xeec5,0xeec6,
-0xd5eb,0xb6a4,0xeec8,0xeec7,0xeec9,0xeeca,0xc7a5,0xeecb,
-0xeecc,0xe895,0xb7b0,0xb5f6,0xeecd,0xeecf,0xe896,0xeece,
-0xe897,0xb8c6,0xeed0,0xeed1,0xeed2,0xb6db,0xb3ae,0xd6d3,
-0xc4c6,0xb1b5,0xb8d6,0xeed3,0xeed4,0xd4bf,0xc7d5,0xbefb,
-0xced9,0xb9b3,0xeed6,0xeed5,0xeed8,0xeed7,0xc5a5,0xeed9,
-0xeeda,0xc7ae,0xeedb,0xc7af,0xeedc,0xb2a7,0xeedd,0xeede,
-0xeedf,0xeee0,0xeee1,0xd7ea,0xeee2,0xeee3,0xbcd8,0xeee4,
-0xd3cb,0xccfa,0xb2ac,0xc1e5,0xeee5,0xc7a6,0xc3ad,0xe898,
-0xeee6,0xeee7,0xeee8,0xeee9,0xeeea,0xeeeb,0xeeec,0xe899,
-0xeeed,0xeeee,0xeeef,0xe89a,0xe89b,0xeef0,0xeef1,0xeef2,
-0xeef4,0xeef3,0xe89c,0xeef5,0xcdad,0xc2c1,0xeef6,0xeef7,
-0xeef8,0xd5a1,0xeef9,0xcfb3,0xeefa,0xeefb,0xe89d,0xeefc,
-0xeefd,0xefa1,0xeefe,0xefa2,0xb8f5,0xc3fa,0xefa3,0xefa4,
-0xbdc2,0xd2bf,0xb2f9,0xefa5,0xefa6,0xefa7,0xd2f8,0xefa8,
-0xd6fd,0xefa9,0xc6cc,0xe89e,0xefaa,0xefab,0xc1b4,0xefac,
-0xcffa,0xcbf8,0xefae,0xefad,0xb3fa,0xb9f8,0xefaf,0xefb0,
-0xd0e2,0xefb1,0xefb2,0xb7e6,0xd0bf,0xefb3,0xefb4,0xefb5,
-0xc8f1,0xcce0,0xefb6,0xefb7,0xefb8,0xefb9,0xefba,0xd5e0,
-0xefbb,0xb4ed,0xc3aa,0xefbc,0xe89f,0xefbd,0xefbe,0xefbf,
-0xe8a0,0xcefd,0xefc0,0xc2e0,0xb4b8,0xd7b6,0xbdf5,0xe940,
-0xcfc7,0xefc3,0xefc1,0xefc2,0xefc4,0xb6a7,0xbcfc,0xbee2,
-0xc3cc,0xefc5,0xefc6,0xe941,0xefc7,0xefcf,0xefc8,0xefc9,
-0xefca,0xc7c2,0xeff1,0xb6cd,0xefcb,0xe942,0xefcc,0xefcd,
-0xb6c6,0xc3be,0xefce,0xe943,0xefd0,0xefd1,0xefd2,0xd5f2,
-0xe944,0xefd3,0xc4f7,0xe945,0xefd4,0xc4f8,0xefd5,0xefd6,
-0xb8e4,0xb0f7,0xefd7,0xefd8,0xefd9,0xe946,0xefda,0xefdb,
-0xefdc,0xefdd,0xe947,0xefde,0xbeb5,0xefe1,0xefdf,0xefe0,
-0xe948,0xefe2,0xefe3,0xc1cd,0xefe4,0xefe5,0xefe6,0xefe7,
-0xefe8,0xefe9,0xefea,0xefeb,0xefec,0xc0d8,0xe949,0xefed,
-0xc1ad,0xefee,0xefef,0xeff0,0xe94a,0xe94b,0xcfe2,0xe94c,
-0xe94d,0xe94e,0xe94f,0xe950,0xe951,0xe952,0xe953,0xb3a4,
-0xe954,0xe955,0xe956,0xe957,0xe958,0xe959,0xe95a,0xe95b,
-0xe95c,0xe95d,0xe95e,0xe95f,0xe960,0xe961,0xe962,0xe963,
-0xe964,0xe965,0xe966,0xe967,0xe968,0xe969,0xe96a,0xe96b,
-0xe96c,0xe96d,0xe96e,0xe96f,0xe970,0xe971,0xe972,0xe973,
-0xe974,0xe975,0xe976,0xe977,0xe978,0xe979,0xe97a,0xe97b,
-0xe97c,0xe97d,0xe97e,0xe980,0xe981,0xe982,0xe983,0xe984,
-0xe985,0xe986,0xe987,0xe988,0xe989,0xe98a,0xe98b,0xe98c,
-0xe98d,0xe98e,0xe98f,0xe990,0xe991,0xe992,0xe993,0xe994,
-0xe995,0xe996,0xe997,0xe998,0xe999,0xe99a,0xe99b,0xe99c,
-0xe99d,0xe99e,0xe99f,0xe9a0,0xea40,0xea41,0xea42,0xea43,
-0xea44,0xea45,0xea46,0xea47,0xea48,0xea49,0xea4a,0xea4b,
-0xea4c,0xea4d,0xea4e,0xea4f,0xea50,0xea51,0xea52,0xea53,
-0xea54,0xea55,0xea56,0xea57,0xea58,0xea59,0xea5a,0xea5b,
-0xc3c5,0xe3c5,0xc9c1,0xe3c6,0xea5c,0xb1d5,0xceca,0xb4b3,
-0xc8f2,0xe3c7,0xcfd0,0xe3c8,0xbce4,0xe3c9,0xe3ca,0xc3c6,
-0xd5a2,0xc4d6,0xb9eb,0xcec5,0xe3cb,0xc3f6,0xe3cc,0xea5d,
-0xb7a7,0xb8f3,0xbad2,0xe3cd,0xe3ce,0xd4c4,0xe3cf,0xea5e,
-0xe3d0,0xd1cb,0xe3d1,0xe3d2,0xe3d3,0xe3d4,0xd1d6,0xe3d5,
-0xb2fb,0xc0bb,0xe3d6,0xea5f,0xc0ab,0xe3d7,0xe3d8,0xe3d9,
-0xea60,0xe3da,0xe3db,0xea61,0xb8b7,0xdae2,0xea62,0xb6d3,
-0xea63,0xdae4,0xdae3,0xea64,0xea65,0xea66,0xea67,0xea68,
-0xea69,0xea6a,0xdae6,0xea6b,0xea6c,0xea6d,0xc8ee,0xea6e,
-0xea6f,0xdae5,0xb7c0,0xd1f4,0xd2f5,0xd5f3,0xbdd7,0xea70,
-0xea71,0xea72,0xea73,0xd7e8,0xdae8,0xdae7,0xea74,0xb0a2,
-0xcdd3,0xea75,0xdae9,0xea76,0xb8bd,0xbcca,0xc2bd,0xc2a4,
-0xb3c2,0xdaea,0xea77,0xc2aa,0xc4b0,0xbdb5,0xea78,0xea79,
-0xcfde,0xea7a,0xea7b,0xea7c,0xdaeb,0xc9c2,0xea7d,0xea7e,
-0xea80,0xea81,0xea82,0xb1dd,0xea83,0xea84,0xea85,0xdaec,
-0xea86,0xb6b8,0xd4ba,0xea87,0xb3fd,0xea88,0xea89,0xdaed,
-0xd4c9,0xcfd5,0xc5e3,0xea8a,0xdaee,0xea8b,0xea8c,0xea8d,
-0xea8e,0xea8f,0xdaef,0xea90,0xdaf0,0xc1ea,0xccd5,0xcfdd,
-0xea91,0xea92,0xea93,0xea94,0xea95,0xea96,0xea97,0xea98,
-0xea99,0xea9a,0xea9b,0xea9c,0xea9d,0xd3e7,0xc2a1,0xea9e,
-0xdaf1,0xea9f,0xeaa0,0xcbe5,0xeb40,0xdaf2,0xeb41,0xcbe6,
-0xd2fe,0xeb42,0xeb43,0xeb44,0xb8f4,0xeb45,0xeb46,0xdaf3,
-0xb0af,0xcfb6,0xeb47,0xeb48,0xd5cf,0xeb49,0xeb4a,0xeb4b,
-0xeb4c,0xeb4d,0xeb4e,0xeb4f,0xeb50,0xeb51,0xeb52,0xcbed,
-0xeb53,0xeb54,0xeb55,0xeb56,0xeb57,0xeb58,0xeb59,0xeb5a,
-0xdaf4,0xeb5b,0xeb5c,0xe3c4,0xeb5d,0xeb5e,0xc1a5,0xeb5f,
-0xeb60,0xf6bf,0xeb61,0xeb62,0xf6c0,0xf6c1,0xc4d1,0xeb63,
-0xc8b8,0xd1e3,0xeb64,0xeb65,0xd0db,0xd1c5,0xbcaf,0xb9cd,
-0xeb66,0xeff4,0xeb67,0xeb68,0xb4c6,0xd3ba,0xf6c2,0xb3fb,
-0xeb69,0xeb6a,0xf6c3,0xeb6b,0xeb6c,0xb5f1,0xeb6d,0xeb6e,
-0xeb6f,0xeb70,0xeb71,0xeb72,0xeb73,0xeb74,0xeb75,0xeb76,
-0xf6c5,0xeb77,0xeb78,0xeb79,0xeb7a,0xeb7b,0xeb7c,0xeb7d,
-0xd3ea,0xf6a7,0xd1a9,0xeb7e,0xeb80,0xeb81,0xeb82,0xf6a9,
-0xeb83,0xeb84,0xeb85,0xf6a8,0xeb86,0xeb87,0xc1e3,0xc0d7,
-0xeb88,0xb1a2,0xeb89,0xeb8a,0xeb8b,0xeb8c,0xceed,0xeb8d,
-0xd0e8,0xf6ab,0xeb8e,0xeb8f,0xcff6,0xeb90,0xf6aa,0xd5f0,
-0xf6ac,0xc3b9,0xeb91,0xeb92,0xeb93,0xbbf4,0xf6ae,0xf6ad,
-0xeb94,0xeb95,0xeb96,0xc4de,0xeb97,0xeb98,0xc1d8,0xeb99,
-0xeb9a,0xeb9b,0xeb9c,0xeb9d,0xcbaa,0xeb9e,0xcfbc,0xeb9f,
-0xeba0,0xec40,0xec41,0xec42,0xec43,0xec44,0xec45,0xec46,
-0xec47,0xec48,0xf6af,0xec49,0xec4a,0xf6b0,0xec4b,0xec4c,
-0xf6b1,0xec4d,0xc2b6,0xec4e,0xec4f,0xec50,0xec51,0xec52,
-0xb0d4,0xc5f9,0xec53,0xec54,0xec55,0xec56,0xf6b2,0xec57,
-0xec58,0xec59,0xec5a,0xec5b,0xec5c,0xec5d,0xec5e,0xec5f,
-0xec60,0xec61,0xec62,0xec63,0xec64,0xec65,0xec66,0xec67,
-0xec68,0xec69,0xc7e0,0xf6a6,0xec6a,0xec6b,0xbeb8,0xec6c,
-0xec6d,0xbeb2,0xec6e,0xb5e5,0xec6f,0xec70,0xb7c7,0xec71,
-0xbfbf,0xc3d2,0xc3e6,0xec72,0xec73,0xd8cc,0xec74,0xec75,
-0xec76,0xb8ef,0xec77,0xec78,0xec79,0xec7a,0xec7b,0xec7c,
-0xec7d,0xec7e,0xec80,0xbdf9,0xd1a5,0xec81,0xb0d0,0xec82,
-0xec83,0xec84,0xec85,0xec86,0xf7b0,0xec87,0xec88,0xec89,
-0xec8a,0xec8b,0xec8c,0xec8d,0xec8e,0xf7b1,0xec8f,0xec90,
-0xec91,0xec92,0xec93,0xd0ac,0xec94,0xb0b0,0xec95,0xec96,
-0xec97,0xf7b2,0xf7b3,0xec98,0xf7b4,0xec99,0xec9a,0xec9b,
-0xc7ca,0xec9c,0xec9d,0xec9e,0xec9f,0xeca0,0xed40,0xed41,
-0xbecf,0xed42,0xed43,0xf7b7,0xed44,0xed45,0xed46,0xed47,
-0xed48,0xed49,0xed4a,0xf7b6,0xed4b,0xb1de,0xed4c,0xf7b5,
-0xed4d,0xed4e,0xf7b8,0xed4f,0xf7b9,0xed50,0xed51,0xed52,
-0xed53,0xed54,0xed55,0xed56,0xed57,0xed58,0xed59,0xed5a,
-0xed5b,0xed5c,0xed5d,0xed5e,0xed5f,0xed60,0xed61,0xed62,
-0xed63,0xed64,0xed65,0xed66,0xed67,0xed68,0xed69,0xed6a,
-0xed6b,0xed6c,0xed6d,0xed6e,0xed6f,0xed70,0xed71,0xed72,
-0xed73,0xed74,0xed75,0xed76,0xed77,0xed78,0xed79,0xed7a,
-0xed7b,0xed7c,0xed7d,0xed7e,0xed80,0xed81,0xcea4,0xc8cd,
-0xed82,0xbaab,0xe8b8,0xe8b9,0xe8ba,0xbec2,0xed83,0xed84,
-0xed85,0xed86,0xed87,0xd2f4,0xed88,0xd4cf,0xc9d8,0xed89,
-0xed8a,0xed8b,0xed8c,0xed8d,0xed8e,0xed8f,0xed90,0xed91,
-0xed92,0xed93,0xed94,0xed95,0xed96,0xed97,0xed98,0xed99,
-0xed9a,0xed9b,0xed9c,0xed9d,0xed9e,0xed9f,0xeda0,0xee40,
-0xee41,0xee42,0xee43,0xee44,0xee45,0xee46,0xee47,0xee48,
-0xee49,0xee4a,0xee4b,0xee4c,0xee4d,0xee4e,0xee4f,0xee50,
-0xee51,0xee52,0xee53,0xee54,0xee55,0xee56,0xee57,0xee58,
-0xee59,0xee5a,0xee5b,0xee5c,0xee5d,0xee5e,0xee5f,0xee60,
-0xee61,0xee62,0xee63,0xee64,0xee65,0xee66,0xee67,0xee68,
-0xee69,0xee6a,0xee6b,0xee6c,0xee6d,0xee6e,0xee6f,0xee70,
-0xee71,0xee72,0xee73,0xee74,0xee75,0xee76,0xee77,0xee78,
-0xee79,0xee7a,0xee7b,0xee7c,0xee7d,0xee7e,0xee80,0xee81,
-0xee82,0xee83,0xee84,0xee85,0xee86,0xee87,0xee88,0xee89,
-0xee8a,0xee8b,0xee8c,0xee8d,0xee8e,0xee8f,0xee90,0xee91,
-0xee92,0xee93,0xee94,0xee95,0xee96,0xee97,0xee98,0xee99,
-0xee9a,0xee9b,0xee9c,0xee9d,0xee9e,0xee9f,0xeea0,0xef40,
-0xef41,0xef42,0xef43,0xef44,0xef45,0xd2b3,0xb6a5,0xc7ea,
-0xf1fc,0xcfee,0xcbb3,0xd0eb,0xe7ef,0xcde7,0xb9cb,0xb6d9,
-0xf1fd,0xb0e4,0xcbcc,0xf1fe,0xd4a4,0xc2ad,0xc1ec,0xc6c4,
-0xbeb1,0xf2a1,0xbcd5,0xef46,0xf2a2,0xf2a3,0xef47,0xf2a4,
-0xd2c3,0xc6b5,0xef48,0xcdc7,0xf2a5,0xef49,0xd3b1,0xbfc5,
-0xcce2,0xef4a,0xf2a6,0xf2a7,0xd1d5,0xb6ee,0xf2a8,0xf2a9,
-0xb5df,0xf2aa,0xf2ab,0xef4b,0xb2fc,0xf2ac,0xf2ad,0xc8a7,
-0xef4c,0xef4d,0xef4e,0xef4f,0xef50,0xef51,0xef52,0xef53,
-0xef54,0xef55,0xef56,0xef57,0xef58,0xef59,0xef5a,0xef5b,
-0xef5c,0xef5d,0xef5e,0xef5f,0xef60,0xef61,0xef62,0xef63,
-0xef64,0xef65,0xef66,0xef67,0xef68,0xef69,0xef6a,0xef6b,
-0xef6c,0xef6d,0xef6e,0xef6f,0xef70,0xef71,0xb7e7,0xef72,
-0xef73,0xeca9,0xecaa,0xecab,0xef74,0xecac,0xef75,0xef76,
-0xc6ae,0xecad,0xecae,0xef77,0xef78,0xef79,0xb7c9,0xcab3,
-0xef7a,0xef7b,0xef7c,0xef7d,0xef7e,0xef80,0xef81,0xe2b8,
-0xf7cf,0xef82,0xef83,0xef84,0xef85,0xef86,0xef87,0xef88,
-0xef89,0xef8a,0xef8b,0xef8c,0xef8d,0xef8e,0xef8f,0xef90,
-0xef91,0xef92,0xef93,0xef94,0xef95,0xef96,0xef97,0xef98,
-0xef99,0xef9a,0xef9b,0xef9c,0xef9d,0xef9e,0xef9f,0xefa0,
-0xf040,0xf041,0xf042,0xf043,0xf044,0xf7d0,0xf045,0xf046,
-0xb2cd,0xf047,0xf048,0xf049,0xf04a,0xf04b,0xf04c,0xf04d,
-0xf04e,0xf04f,0xf050,0xf051,0xf052,0xf053,0xf054,0xf055,
-0xf056,0xf057,0xf058,0xf059,0xf05a,0xf05b,0xf05c,0xf05d,
-0xf05e,0xf05f,0xf060,0xf061,0xf062,0xf063,0xf7d1,0xf064,
-0xf065,0xf066,0xf067,0xf068,0xf069,0xf06a,0xf06b,0xf06c,
-0xf06d,0xf06e,0xf06f,0xf070,0xf071,0xf072,0xf073,0xf074,
-0xf075,0xf076,0xf077,0xf078,0xf079,0xf07a,0xf07b,0xf07c,
-0xf07d,0xf07e,0xf080,0xf081,0xf082,0xf083,0xf084,0xf085,
-0xf086,0xf087,0xf088,0xf089,0xf7d3,0xf7d2,0xf08a,0xf08b,
-0xf08c,0xf08d,0xf08e,0xf08f,0xf090,0xf091,0xf092,0xf093,
-0xf094,0xf095,0xf096,0xe2bb,0xf097,0xbca2,0xf098,0xe2bc,
-0xe2bd,0xe2be,0xe2bf,0xe2c0,0xe2c1,0xb7b9,0xd2fb,0xbda4,
-0xcace,0xb1a5,0xcbc7,0xf099,0xe2c2,0xb6fc,0xc8c4,0xe2c3,
-0xf09a,0xf09b,0xbdc8,0xf09c,0xb1fd,0xe2c4,0xf09d,0xb6f6,
-0xe2c5,0xc4d9,0xf09e,0xf09f,0xe2c6,0xcfda,0xb9dd,0xe2c7,
-0xc0a1,0xf0a0,0xe2c8,0xb2f6,0xf140,0xe2c9,0xf141,0xc1f3,
-0xe2ca,0xe2cb,0xc2f8,0xe2cc,0xe2cd,0xe2ce,0xcad7,0xd8b8,
-0xd9e5,0xcfe3,0xf142,0xf143,0xf144,0xf145,0xf146,0xf147,
-0xf148,0xf149,0xf14a,0xf14b,0xf14c,0xf0a5,0xf14d,0xf14e,
-0xdcb0,0xf14f,0xf150,0xf151,0xf152,0xf153,0xf154,0xf155,
-0xf156,0xf157,0xf158,0xf159,0xf15a,0xf15b,0xf15c,0xf15d,
-0xf15e,0xf15f,0xf160,0xf161,0xf162,0xf163,0xf164,0xf165,
-0xf166,0xf167,0xf168,0xf169,0xf16a,0xf16b,0xf16c,0xf16d,
-0xf16e,0xf16f,0xf170,0xf171,0xf172,0xf173,0xf174,0xf175,
-0xf176,0xf177,0xf178,0xf179,0xf17a,0xf17b,0xf17c,0xf17d,
-0xf17e,0xf180,0xf181,0xf182,0xf183,0xf184,0xf185,0xf186,
-0xf187,0xf188,0xf189,0xf18a,0xf18b,0xf18c,0xf18d,0xf18e,
-0xf18f,0xf190,0xf191,0xf192,0xf193,0xf194,0xf195,0xf196,
-0xf197,0xf198,0xf199,0xf19a,0xf19b,0xf19c,0xf19d,0xf19e,
-0xf19f,0xf1a0,0xf240,0xf241,0xf242,0xf243,0xf244,0xf245,
-0xf246,0xf247,0xf248,0xf249,0xf24a,0xf24b,0xf24c,0xf24d,
-0xf24e,0xf24f,0xf250,0xf251,0xf252,0xf253,0xf254,0xf255,
-0xf256,0xf257,0xf258,0xf259,0xf25a,0xf25b,0xf25c,0xf25d,
-0xf25e,0xf25f,0xf260,0xf261,0xf262,0xf263,0xf264,0xf265,
-0xf266,0xf267,0xf268,0xf269,0xf26a,0xf26b,0xf26c,0xf26d,
-0xf26e,0xf26f,0xf270,0xf271,0xf272,0xf273,0xf274,0xf275,
-0xf276,0xf277,0xf278,0xf279,0xf27a,0xf27b,0xf27c,0xf27d,
-0xf27e,0xf280,0xf281,0xf282,0xf283,0xf284,0xf285,0xf286,
-0xf287,0xf288,0xf289,0xf28a,0xf28b,0xf28c,0xf28d,0xf28e,
-0xf28f,0xf290,0xf291,0xf292,0xf293,0xf294,0xf295,0xf296,
-0xf297,0xf298,0xf299,0xf29a,0xf29b,0xf29c,0xf29d,0xf29e,
-0xf29f,0xf2a0,0xf340,0xf341,0xf342,0xf343,0xf344,0xf345,
-0xf346,0xf347,0xf348,0xf349,0xf34a,0xf34b,0xf34c,0xf34d,
-0xf34e,0xf34f,0xf350,0xf351,0xc2ed,0xd4a6,0xcdd4,0xd1b1,
-0xb3db,0xc7fd,0xf352,0xb2b5,0xc2bf,0xe6e0,0xcabb,0xe6e1,
-0xe6e2,0xbed4,0xe6e3,0xd7a4,0xcdd5,0xe6e5,0xbcdd,0xe6e4,
-0xe6e6,0xe6e7,0xc2ee,0xf353,0xbdbe,0xe6e8,0xc2e6,0xbaa7,
-0xe6e9,0xf354,0xe6ea,0xb3d2,0xd1e9,0xf355,0xf356,0xbfa5,
-0xe6eb,0xc6ef,0xe6ec,0xe6ed,0xf357,0xf358,0xe6ee,0xc6ad,
-0xe6ef,0xf359,0xc9a7,0xe6f0,0xe6f1,0xe6f2,0xe5b9,0xe6f3,
-0xe6f4,0xc2e2,0xe6f5,0xe6f6,0xd6e8,0xe6f7,0xf35a,0xe6f8,
-0xb9c7,0xf35b,0xf35c,0xf35d,0xf35e,0xf35f,0xf360,0xf361,
-0xf7bb,0xf7ba,0xf362,0xf363,0xf364,0xf365,0xf7be,0xf7bc,
-0xbaa1,0xf366,0xf7bf,0xf367,0xf7c0,0xf368,0xf369,0xf36a,
-0xf7c2,0xf7c1,0xf7c4,0xf36b,0xf36c,0xf7c3,0xf36d,0xf36e,
-0xf36f,0xf370,0xf371,0xf7c5,0xf7c6,0xf372,0xf373,0xf374,
-0xf375,0xf7c7,0xf376,0xcbe8,0xf377,0xf378,0xf379,0xf37a,
-0xb8df,0xf37b,0xf37c,0xf37d,0xf37e,0xf380,0xf381,0xf7d4,
-0xf382,0xf7d5,0xf383,0xf384,0xf385,0xf386,0xf7d6,0xf387,
-0xf388,0xf389,0xf38a,0xf7d8,0xf38b,0xf7da,0xf38c,0xf7d7,
-0xf38d,0xf38e,0xf38f,0xf390,0xf391,0xf392,0xf393,0xf394,
-0xf395,0xf7db,0xf396,0xf7d9,0xf397,0xf398,0xf399,0xf39a,
-0xf39b,0xf39c,0xf39d,0xd7d7,0xf39e,0xf39f,0xf3a0,0xf440,
-0xf7dc,0xf441,0xf442,0xf443,0xf444,0xf445,0xf446,0xf7dd,
-0xf447,0xf448,0xf449,0xf7de,0xf44a,0xf44b,0xf44c,0xf44d,
-0xf44e,0xf44f,0xf450,0xf451,0xf452,0xf453,0xf454,0xf7df,
-0xf455,0xf456,0xf457,0xf7e0,0xf458,0xf459,0xf45a,0xf45b,
-0xf45c,0xf45d,0xf45e,0xf45f,0xf460,0xf461,0xf462,0xdbcb,
-0xf463,0xf464,0xd8aa,0xf465,0xf466,0xf467,0xf468,0xf469,
-0xf46a,0xf46b,0xf46c,0xe5f7,0xb9ed,0xf46d,0xf46e,0xf46f,
-0xf470,0xbffd,0xbbea,0xf7c9,0xc6c7,0xf7c8,0xf471,0xf7ca,
-0xf7cc,0xf7cb,0xf472,0xf473,0xf474,0xf7cd,0xf475,0xceba,
-0xf476,0xf7ce,0xf477,0xf478,0xc4a7,0xf479,0xf47a,0xf47b,
-0xf47c,0xf47d,0xf47e,0xf480,0xf481,0xf482,0xf483,0xf484,
-0xf485,0xf486,0xf487,0xf488,0xf489,0xf48a,0xf48b,0xf48c,
-0xf48d,0xf48e,0xf48f,0xf490,0xf491,0xf492,0xf493,0xf494,
-0xf495,0xf496,0xf497,0xf498,0xf499,0xf49a,0xf49b,0xf49c,
-0xf49d,0xf49e,0xf49f,0xf4a0,0xf540,0xf541,0xf542,0xf543,
-0xf544,0xf545,0xf546,0xf547,0xf548,0xf549,0xf54a,0xf54b,
-0xf54c,0xf54d,0xf54e,0xf54f,0xf550,0xf551,0xf552,0xf553,
-0xf554,0xf555,0xf556,0xf557,0xf558,0xf559,0xf55a,0xf55b,
-0xf55c,0xf55d,0xf55e,0xf55f,0xf560,0xf561,0xf562,0xf563,
-0xf564,0xf565,0xf566,0xf567,0xf568,0xf569,0xf56a,0xf56b,
-0xf56c,0xf56d,0xf56e,0xf56f,0xf570,0xf571,0xf572,0xf573,
-0xf574,0xf575,0xf576,0xf577,0xf578,0xf579,0xf57a,0xf57b,
-0xf57c,0xf57d,0xf57e,0xf580,0xf581,0xf582,0xf583,0xf584,
-0xf585,0xf586,0xf587,0xf588,0xf589,0xf58a,0xf58b,0xf58c,
-0xf58d,0xf58e,0xf58f,0xf590,0xf591,0xf592,0xf593,0xf594,
-0xf595,0xf596,0xf597,0xf598,0xf599,0xf59a,0xf59b,0xf59c,
-0xf59d,0xf59e,0xf59f,0xf5a0,0xf640,0xf641,0xf642,0xf643,
-0xf644,0xf645,0xf646,0xf647,0xf648,0xf649,0xf64a,0xf64b,
-0xf64c,0xf64d,0xf64e,0xf64f,0xf650,0xf651,0xf652,0xf653,
-0xf654,0xf655,0xf656,0xf657,0xf658,0xf659,0xf65a,0xf65b,
-0xf65c,0xf65d,0xf65e,0xf65f,0xf660,0xf661,0xf662,0xf663,
-0xf664,0xf665,0xf666,0xf667,0xf668,0xf669,0xf66a,0xf66b,
-0xf66c,0xf66d,0xf66e,0xf66f,0xf670,0xf671,0xf672,0xf673,
-0xf674,0xf675,0xf676,0xf677,0xf678,0xf679,0xf67a,0xf67b,
-0xf67c,0xf67d,0xf67e,0xf680,0xf681,0xf682,0xf683,0xf684,
-0xf685,0xf686,0xf687,0xf688,0xf689,0xf68a,0xf68b,0xf68c,
-0xf68d,0xf68e,0xf68f,0xf690,0xf691,0xf692,0xf693,0xf694,
-0xf695,0xf696,0xf697,0xf698,0xf699,0xf69a,0xf69b,0xf69c,
-0xf69d,0xf69e,0xf69f,0xf6a0,0xf740,0xf741,0xf742,0xf743,
-0xf744,0xf745,0xf746,0xf747,0xf748,0xf749,0xf74a,0xf74b,
-0xf74c,0xf74d,0xf74e,0xf74f,0xf750,0xf751,0xf752,0xf753,
-0xf754,0xf755,0xf756,0xf757,0xf758,0xf759,0xf75a,0xf75b,
-0xf75c,0xf75d,0xf75e,0xf75f,0xf760,0xf761,0xf762,0xf763,
-0xf764,0xf765,0xf766,0xf767,0xf768,0xf769,0xf76a,0xf76b,
-0xf76c,0xf76d,0xf76e,0xf76f,0xf770,0xf771,0xf772,0xf773,
-0xf774,0xf775,0xf776,0xf777,0xf778,0xf779,0xf77a,0xf77b,
-0xf77c,0xf77d,0xf77e,0xf780,0xd3e3,0xf781,0xf782,0xf6cf,
-0xf783,0xc2b3,0xf6d0,0xf784,0xf785,0xf6d1,0xf6d2,0xf6d3,
-0xf6d4,0xf786,0xf787,0xf6d6,0xf788,0xb1ab,0xf6d7,0xf789,
-0xf6d8,0xf6d9,0xf6da,0xf78a,0xf6db,0xf6dc,0xf78b,0xf78c,
-0xf78d,0xf78e,0xf6dd,0xf6de,0xcfca,0xf78f,0xf6df,0xf6e0,
-0xf6e1,0xf6e2,0xf6e3,0xf6e4,0xc0f0,0xf6e5,0xf6e6,0xf6e7,
-0xf6e8,0xf6e9,0xf790,0xf6ea,0xf791,0xf6eb,0xf6ec,0xf792,
-0xf6ed,0xf6ee,0xf6ef,0xf6f0,0xf6f1,0xf6f2,0xf6f3,0xf6f4,
-0xbea8,0xf793,0xf6f5,0xf6f6,0xf6f7,0xf6f8,0xf794,0xf795,
-0xf796,0xf797,0xf798,0xc8fa,0xf6f9,0xf6fa,0xf6fb,0xf6fc,
-0xf799,0xf79a,0xf6fd,0xf6fe,0xf7a1,0xf7a2,0xf7a3,0xf7a4,
-0xf7a5,0xf79b,0xf79c,0xf7a6,0xf7a7,0xf7a8,0xb1ee,0xf7a9,
-0xf7aa,0xf7ab,0xf79d,0xf79e,0xf7ac,0xf7ad,0xc1db,0xf7ae,
-0xf79f,0xf7a0,0xf7af,0xf840,0xf841,0xf842,0xf843,0xf844,
-0xf845,0xf846,0xf847,0xf848,0xf849,0xf84a,0xf84b,0xf84c,
-0xf84d,0xf84e,0xf84f,0xf850,0xf851,0xf852,0xf853,0xf854,
-0xf855,0xf856,0xf857,0xf858,0xf859,0xf85a,0xf85b,0xf85c,
-0xf85d,0xf85e,0xf85f,0xf860,0xf861,0xf862,0xf863,0xf864,
-0xf865,0xf866,0xf867,0xf868,0xf869,0xf86a,0xf86b,0xf86c,
-0xf86d,0xf86e,0xf86f,0xf870,0xf871,0xf872,0xf873,0xf874,
-0xf875,0xf876,0xf877,0xf878,0xf879,0xf87a,0xf87b,0xf87c,
-0xf87d,0xf87e,0xf880,0xf881,0xf882,0xf883,0xf884,0xf885,
-0xf886,0xf887,0xf888,0xf889,0xf88a,0xf88b,0xf88c,0xf88d,
-0xf88e,0xf88f,0xf890,0xf891,0xf892,0xf893,0xf894,0xf895,
-0xf896,0xf897,0xf898,0xf899,0xf89a,0xf89b,0xf89c,0xf89d,
-0xf89e,0xf89f,0xf8a0,0xf940,0xf941,0xf942,0xf943,0xf944,
-0xf945,0xf946,0xf947,0xf948,0xf949,0xf94a,0xf94b,0xf94c,
-0xf94d,0xf94e,0xf94f,0xf950,0xf951,0xf952,0xf953,0xf954,
-0xf955,0xf956,0xf957,0xf958,0xf959,0xf95a,0xf95b,0xf95c,
-0xf95d,0xf95e,0xf95f,0xf960,0xf961,0xf962,0xf963,0xf964,
-0xf965,0xf966,0xf967,0xf968,0xf969,0xf96a,0xf96b,0xf96c,
-0xf96d,0xf96e,0xf96f,0xf970,0xf971,0xf972,0xf973,0xf974,
-0xf975,0xf976,0xf977,0xf978,0xf979,0xf97a,0xf97b,0xf97c,
-0xf97d,0xf97e,0xf980,0xf981,0xf982,0xf983,0xf984,0xf985,
-0xf986,0xf987,0xf988,0xf989,0xf98a,0xf98b,0xf98c,0xf98d,
-0xf98e,0xf98f,0xf990,0xf991,0xf992,0xf993,0xf994,0xf995,
-0xf996,0xf997,0xf998,0xf999,0xf99a,0xf99b,0xf99c,0xf99d,
-0xf99e,0xf99f,0xf9a0,0xfa40,0xfa41,0xfa42,0xfa43,0xfa44,
-0xfa45,0xfa46,0xfa47,0xfa48,0xfa49,0xfa4a,0xfa4b,0xfa4c,
-0xfa4d,0xfa4e,0xfa4f,0xfa50,0xfa51,0xfa52,0xfa53,0xfa54,
-0xfa55,0xfa56,0xfa57,0xfa58,0xfa59,0xfa5a,0xfa5b,0xfa5c,
-0xfa5d,0xfa5e,0xfa5f,0xfa60,0xfa61,0xfa62,0xfa63,0xfa64,
-0xfa65,0xfa66,0xfa67,0xfa68,0xfa69,0xfa6a,0xfa6b,0xfa6c,
-0xfa6d,0xfa6e,0xfa6f,0xfa70,0xfa71,0xfa72,0xfa73,0xfa74,
-0xfa75,0xfa76,0xfa77,0xfa78,0xfa79,0xfa7a,0xfa7b,0xfa7c,
-0xfa7d,0xfa7e,0xfa80,0xfa81,0xfa82,0xfa83,0xfa84,0xfa85,
-0xfa86,0xfa87,0xfa88,0xfa89,0xfa8a,0xfa8b,0xfa8c,0xfa8d,
-0xfa8e,0xfa8f,0xfa90,0xfa91,0xfa92,0xfa93,0xfa94,0xfa95,
-0xfa96,0xfa97,0xfa98,0xfa99,0xfa9a,0xfa9b,0xfa9c,0xfa9d,
-0xfa9e,0xfa9f,0xfaa0,0xfb40,0xfb41,0xfb42,0xfb43,0xfb44,
-0xfb45,0xfb46,0xfb47,0xfb48,0xfb49,0xfb4a,0xfb4b,0xfb4c,
-0xfb4d,0xfb4e,0xfb4f,0xfb50,0xfb51,0xfb52,0xfb53,0xfb54,
-0xfb55,0xfb56,0xfb57,0xfb58,0xfb59,0xfb5a,0xfb5b,0xc4f1,
-0xf0af,0xbca6,0xf0b0,0xc3f9,0xfb5c,0xc5b8,0xd1bb,0xfb5d,
-0xf0b1,0xf0b2,0xf0b3,0xf0b4,0xf0b5,0xd1bc,0xfb5e,0xd1ec,
-0xfb5f,0xf0b7,0xf0b6,0xd4a7,0xfb60,0xcdd2,0xf0b8,0xf0ba,
-0xf0b9,0xf0bb,0xf0bc,0xfb61,0xfb62,0xb8eb,0xf0bd,0xbae8,
-0xfb63,0xf0be,0xf0bf,0xbee9,0xf0c0,0xb6ec,0xf0c1,0xf0c2,
-0xf0c3,0xf0c4,0xc8b5,0xf0c5,0xf0c6,0xfb64,0xf0c7,0xc5f4,
-0xfb65,0xf0c8,0xfb66,0xfb67,0xfb68,0xf0c9,0xfb69,0xf0ca,
-0xf7bd,0xfb6a,0xf0cb,0xf0cc,0xf0cd,0xfb6b,0xf0ce,0xfb6c,
-0xfb6d,0xfb6e,0xfb6f,0xf0cf,0xbad7,0xfb70,0xf0d0,0xf0d1,
-0xf0d2,0xf0d3,0xf0d4,0xf0d5,0xf0d6,0xf0d8,0xfb71,0xfb72,
-0xd3a5,0xf0d7,0xfb73,0xf0d9,0xfb74,0xfb75,0xfb76,0xfb77,
-0xfb78,0xfb79,0xfb7a,0xfb7b,0xfb7c,0xfb7d,0xf5ba,0xc2b9,
-0xfb7e,0xfb80,0xf7e4,0xfb81,0xfb82,0xfb83,0xfb84,0xf7e5,
-0xf7e6,0xfb85,0xfb86,0xf7e7,0xfb87,0xfb88,0xfb89,0xfb8a,
-0xfb8b,0xfb8c,0xf7e8,0xc2b4,0xfb8d,0xfb8e,0xfb8f,0xfb90,
-0xfb91,0xfb92,0xfb93,0xfb94,0xfb95,0xf7ea,0xfb96,0xf7eb,
-0xfb97,0xfb98,0xfb99,0xfb9a,0xfb9b,0xfb9c,0xc2f3,0xfb9d,
-0xfb9e,0xfb9f,0xfba0,0xfc40,0xfc41,0xfc42,0xfc43,0xfc44,
-0xfc45,0xfc46,0xfc47,0xfc48,0xf4f0,0xfc49,0xfc4a,0xfc4b,
-0xf4ef,0xfc4c,0xfc4d,0xc2e9,0xfc4e,0xf7e1,0xf7e2,0xfc4f,
-0xfc50,0xfc51,0xfc52,0xfc53,0xbbc6,0xfc54,0xfc55,0xfc56,
-0xfc57,0xd9e4,0xfc58,0xfc59,0xfc5a,0xcaf2,0xc0e8,0xf0a4,
-0xfc5b,0xbada,0xfc5c,0xfc5d,0xc7ad,0xfc5e,0xfc5f,0xfc60,
-0xc4ac,0xfc61,0xfc62,0xf7ec,0xf7ed,0xf7ee,0xfc63,0xf7f0,
-0xf7ef,0xfc64,0xf7f1,0xfc65,0xfc66,0xf7f4,0xfc67,0xf7f3,
-0xfc68,0xf7f2,0xf7f5,0xfc69,0xfc6a,0xfc6b,0xfc6c,0xf7f6,
-0xfc6d,0xfc6e,0xfc6f,0xfc70,0xfc71,0xfc72,0xfc73,0xfc74,
-0xfc75,0xede9,0xfc76,0xedea,0xedeb,0xfc77,0xf6bc,0xfc78,
-0xfc79,0xfc7a,0xfc7b,0xfc7c,0xfc7d,0xfc7e,0xfc80,0xfc81,
-0xfc82,0xfc83,0xfc84,0xf6bd,0xfc85,0xf6be,0xb6a6,0xfc86,
-0xd8be,0xfc87,0xfc88,0xb9c4,0xfc89,0xfc8a,0xfc8b,0xd8bb,
-0xfc8c,0xdcb1,0xfc8d,0xfc8e,0xfc8f,0xfc90,0xfc91,0xfc92,
-0xcaf3,0xfc93,0xf7f7,0xfc94,0xfc95,0xfc96,0xfc97,0xfc98,
-0xfc99,0xfc9a,0xfc9b,0xfc9c,0xf7f8,0xfc9d,0xfc9e,0xf7f9,
-0xfc9f,0xfca0,0xfd40,0xfd41,0xfd42,0xfd43,0xfd44,0xf7fb,
-0xfd45,0xf7fa,0xfd46,0xb1c7,0xfd47,0xf7fc,0xf7fd,0xfd48,
-0xfd49,0xfd4a,0xfd4b,0xfd4c,0xf7fe,0xfd4d,0xfd4e,0xfd4f,
-0xfd50,0xfd51,0xfd52,0xfd53,0xfd54,0xfd55,0xfd56,0xfd57,
-0xc6eb,0xecb4,0xfd58,0xfd59,0xfd5a,0xfd5b,0xfd5c,0xfd5d,
-0xfd5e,0xfd5f,0xfd60,0xfd61,0xfd62,0xfd63,0xfd64,0xfd65,
-0xfd66,0xfd67,0xfd68,0xfd69,0xfd6a,0xfd6b,0xfd6c,0xfd6d,
-0xfd6e,0xfd6f,0xfd70,0xfd71,0xfd72,0xfd73,0xfd74,0xfd75,
-0xfd76,0xfd77,0xfd78,0xfd79,0xfd7a,0xfd7b,0xfd7c,0xfd7d,
-0xfd7e,0xfd80,0xfd81,0xfd82,0xfd83,0xfd84,0xfd85,0xb3dd,
-0xf6b3,0xfd86,0xfd87,0xf6b4,0xc1e4,0xf6b5,0xf6b6,0xf6b7,
-0xf6b8,0xf6b9,0xf6ba,0xc8a3,0xf6bb,0xfd88,0xfd89,0xfd8a,
-0xfd8b,0xfd8c,0xfd8d,0xfd8e,0xfd8f,0xfd90,0xfd91,0xfd92,
-0xfd93,0xc1fa,0xb9a8,0xede8,0xfd94,0xfd95,0xfd96,0xb9ea,
-0xd9df,0xfd97,0xfd98,0xfd99,0xfd9a,0xfd9b,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000
-}; /* 9fffh */
-static const int ucs_i_cp936_table_min = 0x4d00;
-static const int ucs_i_cp936_table_max = 0x4d00 + (sizeof (ucs_i_cp936_table) / sizeof (unsigned short));
-
-
-
-/* 0xf900 CJK Compatibility Ideographs */
-static const unsigned short ucs_ci_cp936_table[] = {
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xfd9c,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xfd9d,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xfd9e,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xfd9f,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xfda0,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-/* 0xfa00 */
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xfe40,0xfe41,0xfe42,0xfe43,
-0x0000,0xfe44,0x0000,0xfe45,0xfe46,0x0000,0x0000,0x0000,
-0xfe47,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xfe48,
-0xfe49,0xfe4a,0x0000,0xfe4b,0xfe4c,0x0000,0x0000,0xfe4d,
-0xfe4e,0xfe4f,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000};
-static const int ucs_ci_cp936_table_min = 0xf900;
-static const int ucs_ci_cp936_table_max = 0xf900 + (sizeof (ucs_ci_cp936_table) / sizeof (unsigned short));
-
-
- /* FE30h CJK Compatibility Forms */
-static const unsigned short ucs_cf_cp936_table[] = {
-0xa955,0xa6f2,0x0000,0xa6f4,0xa6f5,0xa6e0,0xa6e1,0xa6f0,
-0xa6f1,0xa6e2,0xa6e3,0xa6ee,0xa6ef,0xa6e6,0xa6e7,0xa6e4,
-0xa6e5,0xa6e8,0xa6e9,0xa6ea,0xa6eb,0x0000,0x0000,0x0000,
-0x0000,0xa968,0xa969,0xa96a,0xa96b,0xa96c,0xa96d,0xa96e};
-
-static const int ucs_cf_cp936_table_min = 0xfe30;
-static const int ucs_cf_cp936_table_max = 0xfe30 + (sizeof (ucs_cf_cp936_table) / sizeof (unsigned short));
-
-
- /* FE50h Small Form Variants */
-static const unsigned short ucs_sfv_cp936_table[] = {
-0xa96f,0xa970,0xa971,0x0000,0xa972,0xa973,0xa974,0xa975,
-0x0000,0xa976,0xa977,0xa978,0xa979,0xa97a,0xa97b,0xa97c,
-0xa97d,0xa97e,0xa980,0xa981,0xa982,0xa983,0xa984,0x0000,
-0xa985,0xa986,0xa987,0xa988,0x0000,0x0000,0x0000,0x0000};
-
-static const int ucs_sfv_cp936_table_min = 0xfe50;
-static const int ucs_sfv_cp936_table_max = 0xfe50 + (sizeof (ucs_sfv_cp936_table) / sizeof (unsigned short));
-
- /* FF00h Halfwidth and Fullwidth Forms */
-static const unsigned short ucs_hff_cp936_table[] = {
-0x0000,0xa3a1,0xa3a2,0xa3a3,0xa1e7,0xa3a5,0xa3a6,0xa3a7,
-0xa3a8,0xa3a9,0xa3aa,0xa3ab,0xa3ac,0xa3ad,0xa3ae,0xa3af,
-0xa3b0,0xa3b1,0xa3b2,0xa3b3,0xa3b4,0xa3b5,0xa3b6,0xa3b7,
-0xa3b8,0xa3b9,0xa3ba,0xa3bb,0xa3bc,0xa3bd,0xa3be,0xa3bf,
-0xa3c0,0xa3c1,0xa3c2,0xa3c3,0xa3c4,0xa3c5,0xa3c6,0xa3c7,
-0xa3c8,0xa3c9,0xa3ca,0xa3cb,0xa3cc,0xa3cd,0xa3ce,0xa3cf,
-0xa3d0,0xa3d1,0xa3d2,0xa3d3,0xa3d4,0xa3d5,0xa3d6,0xa3d7,
-0xa3d8,0xa3d9,0xa3da,0xa3db,0xa3dc,0xa3dd,0xa3de,0xa3df,
-0xa3e0,0xa3e1,0xa3e2,0xa3e3,0xa3e4,0xa3e5,0xa3e6,0xa3e7,
-0xa3e8,0xa3e9,0xa3ea,0xa3eb,0xa3ec,0xa3ed,0xa3ee,0xa3ef,
-0xa3f0,0xa3f1,0xa3f2,0xa3f3,0xa3f4,0xa3f5,0xa3f6,0xa3f7,
-0xa3f8,0xa3f9,0xa3fa,0xa3fb,0xa3fc,0xa3fd,0xa1ab,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xa1e9,0xa1ea,0xa956,0xa3fe,0xa957,0xa3a4,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000
-};
-static const int ucs_hff_cp936_table_min = 0xff00;
-static const int ucs_hff_cp936_table_max = 0xff00 + (sizeof (ucs_hff_cp936_table) / sizeof (unsigned short));
-
-#endif /* UNICODE_TABLE_CP936_H */
diff --git a/ext/mbstring/libmbfl/filters/unicode_table_iso8859_10.h b/ext/mbstring/libmbfl/filters/unicode_table_iso8859_10.h
deleted file mode 100644
index 0de0d17eb4..0000000000
--- a/ext/mbstring/libmbfl/filters/unicode_table_iso8859_10.h
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * "streamable kanji code filter and converter"
- * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved.
- *
- * LICENSE NOTICES
- *
- * This file is part of "streamable kanji code filter and converter",
- * which is distributed under the terms of GNU Lesser General Public
- * License (version 2) as published by the Free Software Foundation.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with "streamable kanji code filter and converter";
- * if not, write to the Free Software Foundation, Inc., 59 Temple Place,
- * Suite 330, Boston, MA 02111-1307 USA
- *
- * The authors of this file: PHP3 internationalization team
- * You can contact the primary author 金本 茂 <sgk@happysize.co.jp>.
- *
- */
-
-#ifndef UNICODE_TABLE_ISO8859_10_H
-#define UNICODE_TABLE_ISO8859_10_H
-
-static const unsigned short iso8859_10_ucs_table[] = {
- 0x00A0,0x0104,0x0112,0x0122,0x0124,0x0128,0x0136,0x00A7,
- 0x013B,0x0110,0x0160,0x0166,0x017D,0x00AD,0x016A,0x014A,
- 0x00B0,0x0105,0x0113,0x0123,0x012B,0x0129,0x0137,0x00B7,
- 0x013C,0x0111,0x0161,0x0167,0x017E,0x2015,0x016B,0x014B,
- 0x0100,0x00C1,0x00C2,0x00C3,0x00C4,0x00C5,0x00C6,0x012E,
- 0x010C,0x00C9,0x0118,0x00CB,0x0116,0x00CD,0x00CE,0x00CF,
- 0x00D0,0x0145,0x014C,0x00D3,0x00D4,0x00D5,0x00D6,0x0168,
- 0x00D8,0x0172,0x00DA,0x00DB,0x00DC,0x00DD,0x00DE,0x00DF,
- 0x0101,0x00E1,0x00E2,0x00E3,0x00E4,0x00E5,0x00E6,0x012F,
- 0x010D,0x00E9,0x0119,0x00EB,0x0117,0x00ED,0x00EE,0x00EF,
- 0x00F0,0x0146,0x014D,0x00F3,0x00F4,0x00F5,0x00F6,0x0169,
- 0x00F8,0x0173,0x00FA,0x00FB,0x00FC,0x00FD,0x00FE,0x0138
-};
-
-#endif /* UNICODE_TABLE_ISO8859_10_H */
diff --git a/ext/mbstring/libmbfl/filters/unicode_table_iso8859_13.h b/ext/mbstring/libmbfl/filters/unicode_table_iso8859_13.h
deleted file mode 100644
index ee69310bdb..0000000000
--- a/ext/mbstring/libmbfl/filters/unicode_table_iso8859_13.h
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * "streamable kanji code filter and converter"
- * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved.
- *
- * LICENSE NOTICES
- *
- * This file is part of "streamable kanji code filter and converter",
- * which is distributed under the terms of GNU Lesser General Public
- * License (version 2) as published by the Free Software Foundation.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with "streamable kanji code filter and converter";
- * if not, write to the Free Software Foundation, Inc., 59 Temple Place,
- * Suite 330, Boston, MA 02111-1307 USA
- *
- * The authors of this file: PHP3 internationalization team
- * You can contact the primary author 金本 茂 <sgk@happysize.co.jp>.
- *
- */
-
-#ifndef UNICODE_TABLE_ISO8859_13_H
-#define UNICODE_TABLE_ISO8859_13_H
-
-static const unsigned short iso8859_13_ucs_table[] = {
- 0x00A0,0x201D,0x00A2,0x00A3,0x00A4,0x201E,0x00A6,0x00A7,
- 0x00D8,0x00A9,0x0156,0x00AB,0x00AC,0x00AD,0x00AE,0x00C6,
- 0x00B0,0x00B1,0x00B2,0x00B3,0x201C,0x00B5,0x00B6,0x00B7,
- 0x00F8,0x00B9,0x0157,0x00BB,0x00BC,0x00BD,0x00BE,0x00E6,
- 0x0104,0x012E,0x0100,0x0106,0x00C4,0x00C5,0x0118,0x0112,
- 0x010C,0x00C9,0x0179,0x0116,0x0122,0x0136,0x012A,0x013B,
- 0x0160,0x0143,0x0145,0x00D3,0x014C,0x00D5,0x00D6,0x00D7,
- 0x0172,0x0141,0x015A,0x016A,0x00DC,0x017B,0x017D,0x00DF,
- 0x0105,0x012F,0x0101,0x0107,0x00E4,0x00E5,0x0119,0x0113,
- 0x010D,0x00E9,0x017A,0x0117,0x0123,0x0137,0x012B,0x013C,
- 0x0161,0x0144,0x0146,0x00F3,0x014D,0x00F5,0x00F6,0x00F7,
- 0x0173,0x0142,0x015B,0x016B,0x00FC,0x017C,0x017E,0x2019
-};
-
-#endif /* UNICODE_TABLE_ISO8859_13_H */
diff --git a/ext/mbstring/libmbfl/filters/unicode_table_iso8859_14.h b/ext/mbstring/libmbfl/filters/unicode_table_iso8859_14.h
deleted file mode 100644
index f0633963ff..0000000000
--- a/ext/mbstring/libmbfl/filters/unicode_table_iso8859_14.h
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * "streamable kanji code filter and converter"
- * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved.
- *
- * LICENSE NOTICES
- *
- * This file is part of "streamable kanji code filter and converter",
- * which is distributed under the terms of GNU Lesser General Public
- * License (version 2) as published by the Free Software Foundation.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with "streamable kanji code filter and converter";
- * if not, write to the Free Software Foundation, Inc., 59 Temple Place,
- * Suite 330, Boston, MA 02111-1307 USA
- *
- * The authors of this file: PHP3 internationalization team
- * You can contact the primary author 金本 茂 <sgk@happysize.co.jp>.
- *
- */
-
-#ifndef UNICODE_TABLE_ISO8859_14_H
-#define UNICODE_TABLE_ISO8859_14_H
-
-static const unsigned short iso8859_14_ucs_table[] = {
- 0x00A0,0x1E02,0x1E03,0x00A3,0x010A,0x010B,0x1E0A,0x00A7,
- 0x1E80,0x00A9,0x1E82,0x1E0B,0x1EF2,0x00AD,0x00AE,0x0178,
- 0x1E1E,0x1E1F,0x0120,0x0121,0x1E40,0x1E41,0x00B6,0x1E56,
- 0x1E81,0x1E57,0x1E83,0x1E60,0x1EF3,0x1E84,0x1E85,0x1E61,
- 0x00C0,0x00C1,0x00C2,0x00C3,0x00C4,0x00C5,0x00C6,0x00C7,
- 0x00C8,0x00C9,0x00CA,0x00CB,0x00CC,0x00CD,0x00CE,0x00CF,
- 0x0174,0x00D1,0x00D2,0x00D3,0x00D4,0x00D5,0x00D6,0x1E6A,
- 0x00D8,0x00D9,0x00DA,0x00DB,0x00DC,0x00DD,0x0176,0x00DF,
- 0x00E0,0x00E1,0x00E2,0x00E3,0x00E4,0x00E5,0x00E6,0x00E7,
- 0x00E8,0x00E9,0x00EA,0x00EB,0x00EC,0x00ED,0x00EE,0x00EF,
- 0x0175,0x00F1,0x00F2,0x00F3,0x00F4,0x00F5,0x00F6,0x1E6B,
- 0x00F8,0x00F9,0x00FA,0x00FB,0x00FC,0x00FD,0x0177,0x00FF
-};
-
-#endif /* UNICODE_TABLE_ISO8859_14_H */
diff --git a/ext/mbstring/libmbfl/filters/unicode_table_iso8859_15.h b/ext/mbstring/libmbfl/filters/unicode_table_iso8859_15.h
deleted file mode 100644
index ab2f1a82b6..0000000000
--- a/ext/mbstring/libmbfl/filters/unicode_table_iso8859_15.h
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * "streamable kanji code filter and converter"
- * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved.
- *
- * LICENSE NOTICES
- *
- * This file is part of "streamable kanji code filter and converter",
- * which is distributed under the terms of GNU Lesser General Public
- * License (version 2) as published by the Free Software Foundation.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with "streamable kanji code filter and converter";
- * if not, write to the Free Software Foundation, Inc., 59 Temple Place,
- * Suite 330, Boston, MA 02111-1307 USA
- *
- * The authors of this file: PHP3 internationalization team
- * You can contact the primary author 金本 茂 <sgk@happysize.co.jp>.
- *
- */
-
-#ifndef UNICODE_TABLE_ISO8859_15_H
-#define UNICODE_TABLE_ISO8859_15_H
-
-static const unsigned short iso8859_15_ucs_table[] = {
- 0x00A0,0x00A1,0x00A2,0x00A3,0x20AC,0x00A5,0x0160,0x00A7,
- 0x0161,0x00A9,0x00AA,0x00AB,0x00AC,0x00AD,0x00AE,0x00AF,
- 0x00B0,0x00B1,0x00B2,0x00B3,0x017D,0x00B5,0x00B6,0x00B7,
- 0x017E,0x00B9,0x00BA,0x00BB,0x0152,0x0153,0x0178,0x00BF,
- 0x00C0,0x00C1,0x00C2,0x00C3,0x00C4,0x00C5,0x00C6,0x00C7,
- 0x00C8,0x00C9,0x00CA,0x00CB,0x00CC,0x00CD,0x00CE,0x00CF,
- 0x00D0,0x00D1,0x00D2,0x00D3,0x00D4,0x00D5,0x00D6,0x00D7,
- 0x00D8,0x00D9,0x00DA,0x00DB,0x00DC,0x00DD,0x00DE,0x00DF,
- 0x00E0,0x00E1,0x00E2,0x00E3,0x00E4,0x00E5,0x00E6,0x00E7,
- 0x00E8,0x00E9,0x00EA,0x00EB,0x00EC,0x00ED,0x00EE,0x00EF,
- 0x00F0,0x00F1,0x00F2,0x00F3,0x00F4,0x00F5,0x00F6,0x00F7,
- 0x00F8,0x00F9,0x00FA,0x00FB,0x00FC,0x00FD,0x00FE,0x00FF
-};
-
-#endif /* UNICODE_TABLE_ISO8859_15_H */
diff --git a/ext/mbstring/libmbfl/filters/unicode_table_iso8859_2.h b/ext/mbstring/libmbfl/filters/unicode_table_iso8859_2.h
deleted file mode 100644
index 148fdbfff5..0000000000
--- a/ext/mbstring/libmbfl/filters/unicode_table_iso8859_2.h
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * "streamable kanji code filter and converter"
- * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved.
- *
- * LICENSE NOTICES
- *
- * This file is part of "streamable kanji code filter and converter",
- * which is distributed under the terms of GNU Lesser General Public
- * License (version 2) as published by the Free Software Foundation.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with "streamable kanji code filter and converter";
- * if not, write to the Free Software Foundation, Inc., 59 Temple Place,
- * Suite 330, Boston, MA 02111-1307 USA
- *
- * The authors of this file: PHP3 internationalization team
- * You can contact the primary author 金本 茂 <sgk@happysize.co.jp>.
- *
- */
-
-#ifndef UNICODE_TABLE_ISO8859_2_H
-#define UNICODE_TABLE_ISO8859_2_H
-
-static const unsigned short iso8859_2_ucs_table[] = {
- 0x00A0,0x0104,0x02D8,0x0141,0x00A4,0x013D,0x015A,0x00A7,
- 0x00A8,0x0160,0x015E,0x0164,0x0179,0x00AD,0x017D,0x017B,
- 0x00B0,0x0105,0x02DB,0x0142,0x00B4,0x013E,0x015B,0x02C7,
- 0x00B8,0x0161,0x015F,0x0165,0x017A,0x02DD,0x017E,0x017C,
- 0x0154,0x00C1,0x00C2,0x0102,0x00C4,0x0139,0x0106,0x00C7,
- 0x010C,0x00C9,0x0118,0x00CB,0x011A,0x00CD,0x00CE,0x010E,
- 0x0110,0x0143,0x0147,0x00D3,0x00D4,0x0150,0x00D6,0x00D7,
- 0x0158,0x016E,0x00DA,0x0170,0x00DC,0x00DD,0x0162,0x00DF,
- 0x0155,0x00E1,0x00E2,0x0103,0x00E4,0x013A,0x0107,0x00E7,
- 0x010D,0x00E9,0x0119,0x00EB,0x011B,0x00ED,0x00EE,0x010F,
- 0x0111,0x0144,0x0148,0x00F3,0x00F4,0x0151,0x00F6,0x00F7,
- 0x0159,0x016F,0x00FA,0x0171,0x00FC,0x00FD,0x0163,0x02D9
-};
-
-
-#endif /* UNICODE_TABLE_ISO8859_2_H */
diff --git a/ext/mbstring/libmbfl/filters/unicode_table_iso8859_3.h b/ext/mbstring/libmbfl/filters/unicode_table_iso8859_3.h
deleted file mode 100644
index 40aa5d635a..0000000000
--- a/ext/mbstring/libmbfl/filters/unicode_table_iso8859_3.h
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * "streamable kanji code filter and converter"
- * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved.
- *
- * LICENSE NOTICES
- *
- * This file is part of "streamable kanji code filter and converter",
- * which is distributed under the terms of GNU Lesser General Public
- * License (version 2) as published by the Free Software Foundation.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with "streamable kanji code filter and converter";
- * if not, write to the Free Software Foundation, Inc., 59 Temple Place,
- * Suite 330, Boston, MA 02111-1307 USA
- *
- * The authors of this file: PHP3 internationalization team
- * You can contact the primary author 金本 茂 <sgk@happysize.co.jp>.
- *
- */
-#ifndef UNICODE_TABLE_ISO8859_3_H
-#define UNICODE_TABLE_ISO8859_3_H
-
-static const unsigned short iso8859_3_ucs_table[] = {
- 0x00A0,0x0126,0x02D8,0x00A3,0x00A4,0x0000,0x0124,0x00A7,
- 0x00A8,0x0130,0x015E,0x011E,0x0134,0x00AD,0x0000,0x017B,
- 0x00B0,0x0127,0x00B2,0x00B3,0x00B4,0x00B5,0x0125,0x00B7,
- 0x00B8,0x0131,0x015F,0x011F,0x0135,0x00BD,0x0000,0x017C,
- 0x00C0,0x00C1,0x00C2,0x0000,0x00C4,0x010A,0x0108,0x00C7,
- 0x00C8,0x00C9,0x00CA,0x00CB,0x00CC,0x00CD,0x00CE,0x00CF,
- 0x0000,0x00D1,0x00D2,0x00D3,0x00D4,0x0120,0x00D6,0x00D7,
- 0x011C,0x00D9,0x00DA,0x00DB,0x00DC,0x016C,0x015C,0x00DF,
- 0x00E0,0x00E1,0x00E2,0x0000,0x00E4,0x010B,0x0109,0x00E7,
- 0x00E8,0x00E9,0x00EA,0x00EB,0x00EC,0x00ED,0x00EE,0x00EF,
- 0x0000,0x00F1,0x00F2,0x00F3,0x00F4,0x0121,0x00F6,0x00F7,
- 0x011D,0x00F9,0x00FA,0x00FB,0x00FC,0x016D,0x015D,0x02D9
-};
-
-#endif /* UNICODE_TABLE_ISO8859_3_H */
diff --git a/ext/mbstring/libmbfl/filters/unicode_table_iso8859_4.h b/ext/mbstring/libmbfl/filters/unicode_table_iso8859_4.h
deleted file mode 100644
index 4aaa276c00..0000000000
--- a/ext/mbstring/libmbfl/filters/unicode_table_iso8859_4.h
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * "streamable kanji code filter and converter"
- * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved.
- *
- * LICENSE NOTICES
- *
- * This file is part of "streamable kanji code filter and converter",
- * which is distributed under the terms of GNU Lesser General Public
- * License (version 2) as published by the Free Software Foundation.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with "streamable kanji code filter and converter";
- * if not, write to the Free Software Foundation, Inc., 59 Temple Place,
- * Suite 330, Boston, MA 02111-1307 USA
- *
- * The authors of this file: PHP3 internationalization team
- * You can contact the primary author 金本 茂 <sgk@happysize.co.jp>.
- *
- */
-
-#ifndef UNICODE_TABLE_ISO8859_4_H
-#define UNICODE_TABLE_ISO8859_4_H
-
-static const unsigned short iso8859_4_ucs_table[] = {
- 0x00A0,0x0104,0x0138,0x0156,0x00A4,0x0128,0x013B,0x00A7,
- 0x00A8,0x0160,0x0112,0x0122,0x0166,0x00AD,0x017D,0x00AF,
- 0x00B0,0x0105,0x02DB,0x0157,0x00B4,0x0129,0x013C,0x02C7,
- 0x00B8,0x0161,0x0113,0x0123,0x0167,0x014A,0x017E,0x014B,
- 0x0100,0x00C1,0x00C2,0x00C3,0x00C4,0x00C5,0x00C6,0x012E,
- 0x010C,0x00C9,0x0118,0x00CB,0x0116,0x00CD,0x00CE,0x012A,
- 0x0110,0x0145,0x014C,0x0136,0x00D4,0x00D5,0x00D6,0x00D7,
- 0x00D8,0x0172,0x00DA,0x00DB,0x00DC,0x0168,0x016A,0x00DF,
- 0x0101,0x00E1,0x00E2,0x00E3,0x00E4,0x00E5,0x00E6,0x012F,
- 0x010D,0x00E9,0x0119,0x00EB,0x0117,0x00ED,0x00EE,0x012B,
- 0x0111,0x0146,0x014D,0x0137,0x00F4,0x00F5,0x00F6,0x00F7,
- 0x00F8,0x0173,0x00FA,0x00FB,0x00FC,0x0169,0x016B,0x02D9
-};
-
-#endif /* UNICODE_TABLE_ISO8859_4_H */
diff --git a/ext/mbstring/libmbfl/filters/unicode_table_iso8859_5.h b/ext/mbstring/libmbfl/filters/unicode_table_iso8859_5.h
deleted file mode 100644
index 58fc0e2ada..0000000000
--- a/ext/mbstring/libmbfl/filters/unicode_table_iso8859_5.h
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * "streamable kanji code filter and converter"
- * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved.
- *
- * LICENSE NOTICES
- *
- * This file is part of "streamable kanji code filter and converter",
- * which is distributed under the terms of GNU Lesser General Public
- * License (version 2) as published by the Free Software Foundation.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with "streamable kanji code filter and converter";
- * if not, write to the Free Software Foundation, Inc., 59 Temple Place,
- * Suite 330, Boston, MA 02111-1307 USA
- *
- * The authors of this file: PHP3 internationalization team
- * You can contact the primary author 金本 茂 <sgk@happysize.co.jp>.
- *
- */
-
-#ifndef UNICODE_TABLE_ISO8859_5_H
-#define UNICODE_TABLE_ISO8859_5_H
-
-static const unsigned short iso8859_5_ucs_table[] = {
- 0x00A0,0x0401,0x0402,0x0403,0x0404,0x0405,0x0406,0x0407,
- 0x0408,0x0409,0x040A,0x040B,0x040C,0x00AD,0x040E,0x040F,
- 0x0410,0x0411,0x0412,0x0413,0x0414,0x0415,0x0416,0x0417,
- 0x0418,0x0419,0x041A,0x041B,0x041C,0x041D,0x041E,0x041F,
- 0x0420,0x0421,0x0422,0x0423,0x0424,0x0425,0x0426,0x0427,
- 0x0428,0x0429,0x042A,0x042B,0x042C,0x042D,0x042E,0x042F,
- 0x0430,0x0431,0x0432,0x0433,0x0434,0x0435,0x0436,0x0437,
- 0x0438,0x0439,0x043A,0x043B,0x043C,0x043D,0x043E,0x043F,
- 0x0440,0x0441,0x0442,0x0443,0x0444,0x0445,0x0446,0x0447,
- 0x0448,0x0449,0x044A,0x044B,0x044C,0x044D,0x044E,0x044F,
- 0x2116,0x0451,0x0452,0x0453,0x0454,0x0455,0x0456,0x0457,
- 0x0458,0x0459,0x045A,0x045B,0x045C,0x00A7,0x045E,0x045F
-};
-
-#endif /* UNICODE_TABLE_ISO8859_5_H */
diff --git a/ext/mbstring/libmbfl/filters/unicode_table_iso8859_6.h b/ext/mbstring/libmbfl/filters/unicode_table_iso8859_6.h
deleted file mode 100644
index 9dba3ad895..0000000000
--- a/ext/mbstring/libmbfl/filters/unicode_table_iso8859_6.h
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * "streamable kanji code filter and converter"
- * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved.
- *
- * LICENSE NOTICES
- *
- * This file is part of "streamable kanji code filter and converter",
- * which is distributed under the terms of GNU Lesser General Public
- * License (version 2) as published by the Free Software Foundation.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with "streamable kanji code filter and converter";
- * if not, write to the Free Software Foundation, Inc., 59 Temple Place,
- * Suite 330, Boston, MA 02111-1307 USA
- *
- * The authors of this file: PHP3 internationalization team
- * You can contact the primary author 金本 茂 <sgk@happysize.co.jp>.
- *
- */
-
-#ifndef UNICODE_TABLE_ISO8859_6_H
-#define UNICODE_TABLE_ISO8859_6_H
-
-static const unsigned short iso8859_6_ucs_table[] = {
- 0x00A0,0x0000,0x0000,0x0000,0x00A4,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x060C,0x00AD,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x061B,0x0000,0x0000,0x0000,0x061F,
- 0x0000,0x0621,0x0622,0x0623,0x0624,0x0625,0x0626,0x0627,
- 0x0628,0x0629,0x062A,0x062B,0x062C,0x062D,0x062E,0x062F,
- 0x0630,0x0631,0x0632,0x0633,0x0634,0x0635,0x0636,0x0637,
- 0x0638,0x0639,0x063A,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0640,0x0641,0x0642,0x0643,0x0644,0x0645,0x0646,0x0647,
- 0x0648,0x0649,0x064A,0x064B,0x064C,0x064D,0x064E,0x064F,
- 0x0650,0x0651,0x0652,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x060C,0x00AD,0x0000,0x0000
-};
-
-#endif /* UNICODE_TABLE_ISO8859_6_H */
diff --git a/ext/mbstring/libmbfl/filters/unicode_table_iso8859_7.h b/ext/mbstring/libmbfl/filters/unicode_table_iso8859_7.h
deleted file mode 100644
index 0dfde9bb84..0000000000
--- a/ext/mbstring/libmbfl/filters/unicode_table_iso8859_7.h
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * "streamable kanji code filter and converter"
- * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved.
- *
- * LICENSE NOTICES
- *
- * This file is part of "streamable kanji code filter and converter",
- * which is distributed under the terms of GNU Lesser General Public
- * License (version 2) as published by the Free Software Foundation.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with "streamable kanji code filter and converter";
- * if not, write to the Free Software Foundation, Inc., 59 Temple Place,
- * Suite 330, Boston, MA 02111-1307 USA
- *
- * The authors of this file: PHP3 internationalization team
- * You can contact the primary author 金本 茂 <sgk@happysize.co.jp>.
- *
- */
-
-#ifndef UNICODE_TABLE_ISO8859_7_H
-#define UNICODE_TABLE_ISO8859_7_H
-
-static const unsigned short iso8859_7_ucs_table[] = {
- 0x00A0,0x2018,0x2019,0x00A3,0x0000,0x0000,0x00A6,0x00A7,
- 0x00A8,0x00A9,0x0000,0x00AB,0x00AC,0x00AD,0x0000,0x2015,
- 0x00B0,0x00B1,0x00B2,0x00B3,0x0384,0x0385,0x0386,0x00B7,
- 0x0388,0x0389,0x038A,0x00BB,0x038C,0x00BD,0x038E,0x038F,
- 0x0390,0x0391,0x0392,0x0393,0x0394,0x0395,0x0396,0x0397,
- 0x0398,0x0399,0x039A,0x039B,0x039C,0x039D,0x039E,0x039F,
- 0x03A0,0x03A1,0x0000,0x03A3,0x03A4,0x03A5,0x03A6,0x03A7,
- 0x03A8,0x03A9,0x03AA,0x03AB,0x03AC,0x03AD,0x03AE,0x03AF,
- 0x03B0,0x03B1,0x03B2,0x03B3,0x03B4,0x03B5,0x03B6,0x03B7,
- 0x03B8,0x03B9,0x03BA,0x03BB,0x03BC,0x03BD,0x03BE,0x03BF,
- 0x03C0,0x03C1,0x03C2,0x03C3,0x03C4,0x03C5,0x03C6,0x03C7,
- 0x03C8,0x03C9,0x03CA,0x03CB,0x03CC,0x03CD,0x03CE,0x0000
-};
-
-#endif /* UNICODE_TABLE_ISO8859_7_H */
diff --git a/ext/mbstring/libmbfl/filters/unicode_table_iso8859_8.h b/ext/mbstring/libmbfl/filters/unicode_table_iso8859_8.h
deleted file mode 100644
index 756004f913..0000000000
--- a/ext/mbstring/libmbfl/filters/unicode_table_iso8859_8.h
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * "streamable kanji code filter and converter"
- * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved.
- *
- * LICENSE NOTICES
- *
- * This file is part of "streamable kanji code filter and converter",
- * which is distributed under the terms of GNU Lesser General Public
- * License (version 2) as published by the Free Software Foundation.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with "streamable kanji code filter and converter";
- * if not, write to the Free Software Foundation, Inc., 59 Temple Place,
- * Suite 330, Boston, MA 02111-1307 USA
- *
- * The authors of this file: PHP3 internationalization team
- * You can contact the primary author 金本 茂 <sgk@happysize.co.jp>.
- *
- */
-
-#ifndef UNICODE_TABLE_ISO8859_8_H
-#define UNICODE_TABLE_ISO8859_8_H
-
-static const unsigned short iso8859_8_ucs_table[] = {
- 0x00A0,0x0000,0x00A2,0x00A3,0x00A4,0x00A5,0x00A6,0x00A7,
- 0x00A8,0x00A9,0x00D7,0x00AB,0x00AC,0x00AD,0x00AE,0x203E,
- 0x00B0,0x00B1,0x00B2,0x00B3,0x00B4,0x00B5,0x00B6,0x00B7,
- 0x00B8,0x00B9,0x00F7,0x00BB,0x00BC,0x00BD,0x00BE,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x2017,
- 0x05D0,0x05D1,0x05D2,0x05D3,0x05D4,0x05D5,0x05D6,0x05D7,
- 0x05D8,0x05D9,0x05DA,0x05DB,0x05DC,0x05DD,0x05DE,0x05DF,
- 0x05E0,0x05E1,0x05E2,0x05E3,0x05E4,0x05E5,0x05E6,0x05E7,
- 0x05E8,0x05E9,0x05EA,0x0000,0x0000,0x0000,0x0000,0x0000
-};
-
-#endif /* UNICODE_TABLE_ISO8859_8_H */
diff --git a/ext/mbstring/libmbfl/filters/unicode_table_iso8859_9.h b/ext/mbstring/libmbfl/filters/unicode_table_iso8859_9.h
deleted file mode 100644
index f39e83f45e..0000000000
--- a/ext/mbstring/libmbfl/filters/unicode_table_iso8859_9.h
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * "streamable kanji code filter and converter"
- * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved.
- *
- * LICENSE NOTICES
- *
- * This file is part of "streamable kanji code filter and converter",
- * which is distributed under the terms of GNU Lesser General Public
- * License (version 2) as published by the Free Software Foundation.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with "streamable kanji code filter and converter";
- * if not, write to the Free Software Foundation, Inc., 59 Temple Place,
- * Suite 330, Boston, MA 02111-1307 USA
- *
- * The authors of this file: PHP3 internationalization team
- * You can contact the primary author 金本 茂 <sgk@happysize.co.jp>.
- *
- */
-
-#ifndef UNICODE_TABLE_ISO8859_9_H
-#define UNICODE_TABLE_ISO8859_9_H
-
-static const unsigned short iso8859_9_ucs_table[] = {
- 0x00A0,0x00A1,0x00A2,0x00A3,0x00A4,0x00A5,0x00A6,0x00A7,
- 0x00A8,0x00A9,0x00AA,0x00AB,0x00AC,0x00AD,0x00AE,0x00AF,
- 0x00B0,0x00B1,0x00B2,0x00B3,0x00B4,0x00B5,0x00B6,0x00B7,
- 0x00B8,0x00B9,0x00BA,0x00BB,0x00BC,0x00BD,0x00BE,0x00BF,
- 0x00C0,0x00C1,0x00C2,0x00C3,0x00C4,0x00C5,0x00C6,0x00C7,
- 0x00C8,0x00C9,0x00CA,0x00CB,0x00CC,0x00CD,0x00CE,0x00CF,
- 0x011E,0x00D1,0x00D2,0x00D3,0x00D4,0x00D5,0x00D6,0x00D7,
- 0x00D8,0x00D9,0x00DA,0x00DB,0x00DC,0x0130,0x015E,0x00DF,
- 0x00E0,0x00E1,0x00E2,0x00E3,0x00E4,0x00E5,0x00E6,0x00E7,
- 0x00E8,0x00E9,0x00EA,0x00EB,0x00EC,0x00ED,0x00EE,0x00EF,
- 0x011F,0x00F1,0x00F2,0x00F3,0x00F4,0x00F5,0x00F6,0x00F7,
- 0x00F8,0x00F9,0x00FA,0x00FB,0x00FC,0x0131,0x015F,0x00FF
-};
-
-#endif /* UNICODE_TABLE_ISO8859_9_H */
diff --git a/ext/mbstring/libmbfl/filters/unicode_table_jis.h b/ext/mbstring/libmbfl/filters/unicode_table_jis.h
deleted file mode 100644
index 5671c4e851..0000000000
--- a/ext/mbstring/libmbfl/filters/unicode_table_jis.h
+++ /dev/null
@@ -1,5847 +0,0 @@
-/*
- * "streamable kanji code filter and converter"
- * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved.
- *
- * LICENSE NOTICES
- *
- * This file is part of "streamable kanji code filter and converter",
- * which is distributed under the terms of GNU Lesser General Public
- * License (version 2) as published by the Free Software Foundation.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with "streamable kanji code filter and converter";
- * if not, write to the Free Software Foundation, Inc., 59 Temple Place,
- * Suite 330, Boston, MA 02111-1307 USA
- *
- * The authors of this file: PHP3 internationalization team
- * You can contact the primary authors; 金本 茂 <sgk@happysize.co.jp>,
- * Tsukada Takuya <tsukada@fminn.nagano.nagano.jp>.
- *
- */
-
-#ifndef UNICODE_TABLE_JIS_H
-#define UNICODE_TABLE_JIS_H
-
-/*
- * Unicode table
- */
-static const unsigned short jisx0208_ucs_table[] = {
- /* ku 1 */
- 0x3000,0x3001,0x3002,0xFF0C,0xFF0E,0x30FB,0xFF1A,0xFF1B,
- 0xFF1F,0xFF01,0x309B,0x309C,0x00B4,0xFF40,0x00A8,0xFF3E,
- 0xFFE3,0xFF3F,0x30FD,0x30FE,0x309D,0x309E,0x3003,0x4EDD,
- 0x3005,0x3006,0x3007,0x30FC,0x2015,0x2010,0xFF0F,0xFF3C,
- 0x301C,0x2016,0xFF5C,0x2026,0x2025,0x2018,0x2019,0x201C,
- 0x201D,0xFF08,0xFF09,0x3014,0x3015,0xFF3B,0xFF3D,0xFF5B,
- 0xFF5D,0x3008,0x3009,0x300A,0x300B,0x300C,0x300D,0x300E,
- 0x300F,0x3010,0x3011,0xFF0B,0x2212,0x00B1,0x00D7,0x00F7,
- 0xFF1D,0x2260,0xFF1C,0xFF1E,0x2266,0x2267,0x221E,0x2234,
- 0x2642,0x2640,0x00B0,0x2032,0x2033,0x2103,0xFFE5,0xFF04,
- 0x00A2,0x00A3,0xFF05,0xFF03,0xFF06,0xFF0A,0xFF20,0x00A7,
- 0x2606,0x2605,0x25CB,0x25CF,0x25CE,0x25C7,
-
- /* ku 2 */
- 0x25C6,0x25A1,0x25A0,0x25B3,0x25B2,0x25BD,0x25BC,0x203B,
- 0x3012,0x2192,0x2190,0x2191,0x2193,0x3013,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x2208,0x220B,0x2286,0x2287,0x2282,0x2283,0x222A,
- 0x2229,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x2227,0x2228,0x00AC,0x21D2,0x21D4,0x2200,0x2203,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x2220,0x22A5,0x2312,0x2202,0x2207,
- 0x2261,0x2252,0x226A,0x226B,0x221A,0x223D,0x221D,0x2235,
- 0x222B,0x222C,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x212B,0x2030,0x266F,0x266D,0x266A,0x2020,0x2021,
- 0x00B6,0x0000,0x0000,0x0000,0x0000,0x25EF,
-
- /* ku 3 */
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xFF10,
- 0xFF11,0xFF12,0xFF13,0xFF14,0xFF15,0xFF16,0xFF17,0xFF18,
- 0xFF19,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0xFF21,0xFF22,0xFF23,0xFF24,0xFF25,0xFF26,0xFF27,0xFF28,
- 0xFF29,0xFF2A,0xFF2B,0xFF2C,0xFF2D,0xFF2E,0xFF2F,0xFF30,
- 0xFF31,0xFF32,0xFF33,0xFF34,0xFF35,0xFF36,0xFF37,0xFF38,
- 0xFF39,0xFF3A,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0xFF41,0xFF42,0xFF43,0xFF44,0xFF45,0xFF46,0xFF47,0xFF48,
- 0xFF49,0xFF4A,0xFF4B,0xFF4C,0xFF4D,0xFF4E,0xFF4F,0xFF50,
- 0xFF51,0xFF52,0xFF53,0xFF54,0xFF55,0xFF56,0xFF57,0xFF58,
- 0xFF59,0xFF5A,0x0000,0x0000,0x0000,0x0000,
-
- /* ku 4 */
- 0x3041,0x3042,0x3043,0x3044,0x3045,0x3046,0x3047,0x3048,
- 0x3049,0x304A,0x304B,0x304C,0x304D,0x304E,0x304F,0x3050,
- 0x3051,0x3052,0x3053,0x3054,0x3055,0x3056,0x3057,0x3058,
- 0x3059,0x305A,0x305B,0x305C,0x305D,0x305E,0x305F,0x3060,
- 0x3061,0x3062,0x3063,0x3064,0x3065,0x3066,0x3067,0x3068,
- 0x3069,0x306A,0x306B,0x306C,0x306D,0x306E,0x306F,0x3070,
- 0x3071,0x3072,0x3073,0x3074,0x3075,0x3076,0x3077,0x3078,
- 0x3079,0x307A,0x307B,0x307C,0x307D,0x307E,0x307F,0x3080,
- 0x3081,0x3082,0x3083,0x3084,0x3085,0x3086,0x3087,0x3088,
- 0x3089,0x308A,0x308B,0x308C,0x308D,0x308E,0x308F,0x3090,
- 0x3091,0x3092,0x3093,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-
- /* ku 5 */
- 0x30A1,0x30A2,0x30A3,0x30A4,0x30A5,0x30A6,0x30A7,0x30A8,
- 0x30A9,0x30AA,0x30AB,0x30AC,0x30AD,0x30AE,0x30AF,0x30B0,
- 0x30B1,0x30B2,0x30B3,0x30B4,0x30B5,0x30B6,0x30B7,0x30B8,
- 0x30B9,0x30BA,0x30BB,0x30BC,0x30BD,0x30BE,0x30BF,0x30C0,
- 0x30C1,0x30C2,0x30C3,0x30C4,0x30C5,0x30C6,0x30C7,0x30C8,
- 0x30C9,0x30CA,0x30CB,0x30CC,0x30CD,0x30CE,0x30CF,0x30D0,
- 0x30D1,0x30D2,0x30D3,0x30D4,0x30D5,0x30D6,0x30D7,0x30D8,
- 0x30D9,0x30DA,0x30DB,0x30DC,0x30DD,0x30DE,0x30DF,0x30E0,
- 0x30E1,0x30E2,0x30E3,0x30E4,0x30E5,0x30E6,0x30E7,0x30E8,
- 0x30E9,0x30EA,0x30EB,0x30EC,0x30ED,0x30EE,0x30EF,0x30F0,
- 0x30F1,0x30F2,0x30F3,0x30F4,0x30F5,0x30F6,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-
- /* ku 6 */
- 0x0391,0x0392,0x0393,0x0394,0x0395,0x0396,0x0397,0x0398,
- 0x0399,0x039A,0x039B,0x039C,0x039D,0x039E,0x039F,0x03A0,
- 0x03A1,0x03A3,0x03A4,0x03A5,0x03A6,0x03A7,0x03A8,0x03A9,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x03B1,0x03B2,0x03B3,0x03B4,0x03B5,0x03B6,0x03B7,0x03B8,
- 0x03B9,0x03BA,0x03BB,0x03BC,0x03BD,0x03BE,0x03BF,0x03C0,
- 0x03C1,0x03C3,0x03C4,0x03C5,0x03C6,0x03C7,0x03C8,0x03C9,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-
- /* ku 7 */
- 0x0410,0x0411,0x0412,0x0413,0x0414,0x0415,0x0401,0x0416,
- 0x0417,0x0418,0x0419,0x041A,0x041B,0x041C,0x041D,0x041E,
- 0x041F,0x0420,0x0421,0x0422,0x0423,0x0424,0x0425,0x0426,
- 0x0427,0x0428,0x0429,0x042A,0x042B,0x042C,0x042D,0x042E,
- 0x042F,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0430,0x0431,0x0432,0x0433,0x0434,0x0435,0x0451,0x0436,
- 0x0437,0x0438,0x0439,0x043A,0x043B,0x043C,0x043D,0x043E,
- 0x043F,0x0440,0x0441,0x0442,0x0443,0x0444,0x0445,0x0446,
- 0x0447,0x0448,0x0449,0x044A,0x044B,0x044C,0x044D,0x044E,
- 0x044F,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-
- /* ku 8 */
- 0x2500,0x2502,0x250C,0x2510,0x2518,0x2514,0x251C,0x252C,
- 0x2524,0x2534,0x253C,0x2501,0x2503,0x250F,0x2513,0x251B,
- 0x2517,0x2523,0x2533,0x252B,0x253B,0x254B,0x2520,0x252F,
- 0x2528,0x2537,0x253F,0x251D,0x2530,0x2525,0x2538,0x2542,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-
- /* ku 9 */
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-
- /* ku 10 */
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-
- /* ku 11 */
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-
- /* ku 12 */
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-
- /* ku 13 */
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-
- /* ku 14 */
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-
- /* ku 15 */
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-
- /* ku 16 */
- 0x4E9C,0x5516,0x5A03,0x963F,0x54C0,0x611B,0x6328,0x59F6,
- 0x9022,0x8475,0x831C,0x7A50,0x60AA,0x63E1,0x6E25,0x65ED,
- 0x8466,0x82A6,0x9BF5,0x6893,0x5727,0x65A1,0x6271,0x5B9B,
- 0x59D0,0x867B,0x98F4,0x7D62,0x7DBE,0x9B8E,0x6216,0x7C9F,
- 0x88B7,0x5B89,0x5EB5,0x6309,0x6697,0x6848,0x95C7,0x978D,
- 0x674F,0x4EE5,0x4F0A,0x4F4D,0x4F9D,0x5049,0x56F2,0x5937,
- 0x59D4,0x5A01,0x5C09,0x60DF,0x610F,0x6170,0x6613,0x6905,
- 0x70BA,0x754F,0x7570,0x79FB,0x7DAD,0x7DEF,0x80C3,0x840E,
- 0x8863,0x8B02,0x9055,0x907A,0x533B,0x4E95,0x4EA5,0x57DF,
- 0x80B2,0x90C1,0x78EF,0x4E00,0x58F1,0x6EA2,0x9038,0x7A32,
- 0x8328,0x828B,0x9C2F,0x5141,0x5370,0x54BD,0x54E1,0x56E0,
- 0x59FB,0x5F15,0x98F2,0x6DEB,0x80E4,0x852D,
-
- /* ku 17 */
- 0x9662,0x9670,0x96A0,0x97FB,0x540B,0x53F3,0x5B87,0x70CF,
- 0x7FBD,0x8FC2,0x96E8,0x536F,0x9D5C,0x7ABA,0x4E11,0x7893,
- 0x81FC,0x6E26,0x5618,0x5504,0x6B1D,0x851A,0x9C3B,0x59E5,
- 0x53A9,0x6D66,0x74DC,0x958F,0x5642,0x4E91,0x904B,0x96F2,
- 0x834F,0x990C,0x53E1,0x55B6,0x5B30,0x5F71,0x6620,0x66F3,
- 0x6804,0x6C38,0x6CF3,0x6D29,0x745B,0x76C8,0x7A4E,0x9834,
- 0x82F1,0x885B,0x8A60,0x92ED,0x6DB2,0x75AB,0x76CA,0x99C5,
- 0x60A6,0x8B01,0x8D8A,0x95B2,0x698E,0x53AD,0x5186,0x5712,
- 0x5830,0x5944,0x5BB4,0x5EF6,0x6028,0x63A9,0x63F4,0x6CBF,
- 0x6F14,0x708E,0x7114,0x7159,0x71D5,0x733F,0x7E01,0x8276,
- 0x82D1,0x8597,0x9060,0x925B,0x9D1B,0x5869,0x65BC,0x6C5A,
- 0x7525,0x51F9,0x592E,0x5965,0x5F80,0x5FDC,
-
- /* ku 18 */
- 0x62BC,0x65FA,0x6A2A,0x6B27,0x6BB4,0x738B,0x7FC1,0x8956,
- 0x9D2C,0x9D0E,0x9EC4,0x5CA1,0x6C96,0x837B,0x5104,0x5C4B,
- 0x61B6,0x81C6,0x6876,0x7261,0x4E59,0x4FFA,0x5378,0x6069,
- 0x6E29,0x7A4F,0x97F3,0x4E0B,0x5316,0x4EEE,0x4F55,0x4F3D,
- 0x4FA1,0x4F73,0x52A0,0x53EF,0x5609,0x590F,0x5AC1,0x5BB6,
- 0x5BE1,0x79D1,0x6687,0x679C,0x67B6,0x6B4C,0x6CB3,0x706B,
- 0x73C2,0x798D,0x79BE,0x7A3C,0x7B87,0x82B1,0x82DB,0x8304,
- 0x8377,0x83EF,0x83D3,0x8766,0x8AB2,0x5629,0x8CA8,0x8FE6,
- 0x904E,0x971E,0x868A,0x4FC4,0x5CE8,0x6211,0x7259,0x753B,
- 0x81E5,0x82BD,0x86FE,0x8CC0,0x96C5,0x9913,0x99D5,0x4ECB,
- 0x4F1A,0x89E3,0x56DE,0x584A,0x58CA,0x5EFB,0x5FEB,0x602A,
- 0x6094,0x6062,0x61D0,0x6212,0x62D0,0x6539,
-
- /* ku 19 */
- 0x9B41,0x6666,0x68B0,0x6D77,0x7070,0x754C,0x7686,0x7D75,
- 0x82A5,0x87F9,0x958B,0x968E,0x8C9D,0x51F1,0x52BE,0x5916,
- 0x54B3,0x5BB3,0x5D16,0x6168,0x6982,0x6DAF,0x788D,0x84CB,
- 0x8857,0x8A72,0x93A7,0x9AB8,0x6D6C,0x99A8,0x86D9,0x57A3,
- 0x67FF,0x86CE,0x920E,0x5283,0x5687,0x5404,0x5ED3,0x62E1,
- 0x64B9,0x683C,0x6838,0x6BBB,0x7372,0x78BA,0x7A6B,0x899A,
- 0x89D2,0x8D6B,0x8F03,0x90ED,0x95A3,0x9694,0x9769,0x5B66,
- 0x5CB3,0x697D,0x984D,0x984E,0x639B,0x7B20,0x6A2B,0x6A7F,
- 0x68B6,0x9C0D,0x6F5F,0x5272,0x559D,0x6070,0x62EC,0x6D3B,
- 0x6E07,0x6ED1,0x845B,0x8910,0x8F44,0x4E14,0x9C39,0x53F6,
- 0x691B,0x6A3A,0x9784,0x682A,0x515C,0x7AC3,0x84B2,0x91DC,
- 0x938C,0x565B,0x9D28,0x6822,0x8305,0x8431,
-
- /* ku 20 */
- 0x7CA5,0x5208,0x82C5,0x74E6,0x4E7E,0x4F83,0x51A0,0x5BD2,
- 0x520A,0x52D8,0x52E7,0x5DFB,0x559A,0x582A,0x59E6,0x5B8C,
- 0x5B98,0x5BDB,0x5E72,0x5E79,0x60A3,0x611F,0x6163,0x61BE,
- 0x63DB,0x6562,0x67D1,0x6853,0x68FA,0x6B3E,0x6B53,0x6C57,
- 0x6F22,0x6F97,0x6F45,0x74B0,0x7518,0x76E3,0x770B,0x7AFF,
- 0x7BA1,0x7C21,0x7DE9,0x7F36,0x7FF0,0x809D,0x8266,0x839E,
- 0x89B3,0x8ACC,0x8CAB,0x9084,0x9451,0x9593,0x9591,0x95A2,
- 0x9665,0x97D3,0x9928,0x8218,0x4E38,0x542B,0x5CB8,0x5DCC,
- 0x73A9,0x764C,0x773C,0x5CA9,0x7FEB,0x8D0B,0x96C1,0x9811,
- 0x9854,0x9858,0x4F01,0x4F0E,0x5371,0x559C,0x5668,0x57FA,
- 0x5947,0x5B09,0x5BC4,0x5C90,0x5E0C,0x5E7E,0x5FCC,0x63EE,
- 0x673A,0x65D7,0x65E2,0x671F,0x68CB,0x68C4,
-
- /* ku 21 */
- 0x6A5F,0x5E30,0x6BC5,0x6C17,0x6C7D,0x757F,0x7948,0x5B63,
- 0x7A00,0x7D00,0x5FBD,0x898F,0x8A18,0x8CB4,0x8D77,0x8ECC,
- 0x8F1D,0x98E2,0x9A0E,0x9B3C,0x4E80,0x507D,0x5100,0x5993,
- 0x5B9C,0x622F,0x6280,0x64EC,0x6B3A,0x72A0,0x7591,0x7947,
- 0x7FA9,0x87FB,0x8ABC,0x8B70,0x63AC,0x83CA,0x97A0,0x5409,
- 0x5403,0x55AB,0x6854,0x6A58,0x8A70,0x7827,0x6775,0x9ECD,
- 0x5374,0x5BA2,0x811A,0x8650,0x9006,0x4E18,0x4E45,0x4EC7,
- 0x4F11,0x53CA,0x5438,0x5BAE,0x5F13,0x6025,0x6551,0x673D,
- 0x6C42,0x6C72,0x6CE3,0x7078,0x7403,0x7A76,0x7AAE,0x7B08,
- 0x7D1A,0x7CFE,0x7D66,0x65E7,0x725B,0x53BB,0x5C45,0x5DE8,
- 0x62D2,0x62E0,0x6319,0x6E20,0x865A,0x8A31,0x8DDD,0x92F8,
- 0x6F01,0x79A6,0x9B5A,0x4EA8,0x4EAB,0x4EAC,
-
- /* ku 22 */
- 0x4F9B,0x4FA0,0x50D1,0x5147,0x7AF6,0x5171,0x51F6,0x5354,
- 0x5321,0x537F,0x53EB,0x55AC,0x5883,0x5CE1,0x5F37,0x5F4A,
- 0x602F,0x6050,0x606D,0x631F,0x6559,0x6A4B,0x6CC1,0x72C2,
- 0x72ED,0x77EF,0x80F8,0x8105,0x8208,0x854E,0x90F7,0x93E1,
- 0x97FF,0x9957,0x9A5A,0x4EF0,0x51DD,0x5C2D,0x6681,0x696D,
- 0x5C40,0x66F2,0x6975,0x7389,0x6850,0x7C81,0x50C5,0x52E4,
- 0x5747,0x5DFE,0x9326,0x65A4,0x6B23,0x6B3D,0x7434,0x7981,
- 0x79BD,0x7B4B,0x7DCA,0x82B9,0x83CC,0x887F,0x895F,0x8B39,
- 0x8FD1,0x91D1,0x541F,0x9280,0x4E5D,0x5036,0x53E5,0x533A,
- 0x72D7,0x7396,0x77E9,0x82E6,0x8EAF,0x99C6,0x99C8,0x99D2,
- 0x5177,0x611A,0x865E,0x55B0,0x7A7A,0x5076,0x5BD3,0x9047,
- 0x9685,0x4E32,0x6ADB,0x91E7,0x5C51,0x5C48,
-
- /* ku 23 */
- 0x6398,0x7A9F,0x6C93,0x9774,0x8F61,0x7AAA,0x718A,0x9688,
- 0x7C82,0x6817,0x7E70,0x6851,0x936C,0x52F2,0x541B,0x85AB,
- 0x8A13,0x7FA4,0x8ECD,0x90E1,0x5366,0x8888,0x7941,0x4FC2,
- 0x50BE,0x5211,0x5144,0x5553,0x572D,0x73EA,0x578B,0x5951,
- 0x5F62,0x5F84,0x6075,0x6176,0x6167,0x61A9,0x63B2,0x643A,
- 0x656C,0x666F,0x6842,0x6E13,0x7566,0x7A3D,0x7CFB,0x7D4C,
- 0x7D99,0x7E4B,0x7F6B,0x830E,0x834A,0x86CD,0x8A08,0x8A63,
- 0x8B66,0x8EFD,0x981A,0x9D8F,0x82B8,0x8FCE,0x9BE8,0x5287,
- 0x621F,0x6483,0x6FC0,0x9699,0x6841,0x5091,0x6B20,0x6C7A,
- 0x6F54,0x7A74,0x7D50,0x8840,0x8A23,0x6708,0x4EF6,0x5039,
- 0x5026,0x5065,0x517C,0x5238,0x5263,0x55A7,0x570F,0x5805,
- 0x5ACC,0x5EFA,0x61B2,0x61F8,0x62F3,0x6372,
-
- /* ku 24 */
- 0x691C,0x6A29,0x727D,0x72AC,0x732E,0x7814,0x786F,0x7D79,
- 0x770C,0x80A9,0x898B,0x8B19,0x8CE2,0x8ED2,0x9063,0x9375,
- 0x967A,0x9855,0x9A13,0x9E78,0x5143,0x539F,0x53B3,0x5E7B,
- 0x5F26,0x6E1B,0x6E90,0x7384,0x73FE,0x7D43,0x8237,0x8A00,
- 0x8AFA,0x9650,0x4E4E,0x500B,0x53E4,0x547C,0x56FA,0x59D1,
- 0x5B64,0x5DF1,0x5EAB,0x5F27,0x6238,0x6545,0x67AF,0x6E56,
- 0x72D0,0x7CCA,0x88B4,0x80A1,0x80E1,0x83F0,0x864E,0x8A87,
- 0x8DE8,0x9237,0x96C7,0x9867,0x9F13,0x4E94,0x4E92,0x4F0D,
- 0x5348,0x5449,0x543E,0x5A2F,0x5F8C,0x5FA1,0x609F,0x68A7,
- 0x6A8E,0x745A,0x7881,0x8A9E,0x8AA4,0x8B77,0x9190,0x4E5E,
- 0x9BC9,0x4EA4,0x4F7C,0x4FAF,0x5019,0x5016,0x5149,0x516C,
- 0x529F,0x52B9,0x52FE,0x539A,0x53E3,0x5411,
-
- /* ku 25 */
- 0x540E,0x5589,0x5751,0x57A2,0x597D,0x5B54,0x5B5D,0x5B8F,
- 0x5DE5,0x5DE7,0x5DF7,0x5E78,0x5E83,0x5E9A,0x5EB7,0x5F18,
- 0x6052,0x614C,0x6297,0x62D8,0x63A7,0x653B,0x6602,0x6643,
- 0x66F4,0x676D,0x6821,0x6897,0x69CB,0x6C5F,0x6D2A,0x6D69,
- 0x6E2F,0x6E9D,0x7532,0x7687,0x786C,0x7A3F,0x7CE0,0x7D05,
- 0x7D18,0x7D5E,0x7DB1,0x8015,0x8003,0x80AF,0x80B1,0x8154,
- 0x818F,0x822A,0x8352,0x884C,0x8861,0x8B1B,0x8CA2,0x8CFC,
- 0x90CA,0x9175,0x9271,0x783F,0x92FC,0x95A4,0x964D,0x9805,
- 0x9999,0x9AD8,0x9D3B,0x525B,0x52AB,0x53F7,0x5408,0x58D5,
- 0x62F7,0x6FE0,0x8C6A,0x8F5F,0x9EB9,0x514B,0x523B,0x544A,
- 0x56FD,0x7A40,0x9177,0x9D60,0x9ED2,0x7344,0x6F09,0x8170,
- 0x7511,0x5FFD,0x60DA,0x9AA8,0x72DB,0x8FBC,
-
- /* ku 26 */
- 0x6B64,0x9803,0x4ECA,0x56F0,0x5764,0x58BE,0x5A5A,0x6068,
- 0x61C7,0x660F,0x6606,0x6839,0x68B1,0x6DF7,0x75D5,0x7D3A,
- 0x826E,0x9B42,0x4E9B,0x4F50,0x53C9,0x5506,0x5D6F,0x5DE6,
- 0x5DEE,0x67FB,0x6C99,0x7473,0x7802,0x8A50,0x9396,0x88DF,
- 0x5750,0x5EA7,0x632B,0x50B5,0x50AC,0x518D,0x6700,0x54C9,
- 0x585E,0x59BB,0x5BB0,0x5F69,0x624D,0x63A1,0x683D,0x6B73,
- 0x6E08,0x707D,0x91C7,0x7280,0x7815,0x7826,0x796D,0x658E,
- 0x7D30,0x83DC,0x88C1,0x8F09,0x969B,0x5264,0x5728,0x6750,
- 0x7F6A,0x8CA1,0x51B4,0x5742,0x962A,0x583A,0x698A,0x80B4,
- 0x54B2,0x5D0E,0x57FC,0x7895,0x9DFA,0x4F5C,0x524A,0x548B,
- 0x643E,0x6628,0x6714,0x67F5,0x7A84,0x7B56,0x7D22,0x932F,
- 0x685C,0x9BAD,0x7B39,0x5319,0x518A,0x5237,
-
- /* ku 27 */
- 0x5BDF,0x62F6,0x64AE,0x64E6,0x672D,0x6BBA,0x85A9,0x96D1,
- 0x7690,0x9BD6,0x634C,0x9306,0x9BAB,0x76BF,0x6652,0x4E09,
- 0x5098,0x53C2,0x5C71,0x60E8,0x6492,0x6563,0x685F,0x71E6,
- 0x73CA,0x7523,0x7B97,0x7E82,0x8695,0x8B83,0x8CDB,0x9178,
- 0x9910,0x65AC,0x66AB,0x6B8B,0x4ED5,0x4ED4,0x4F3A,0x4F7F,
- 0x523A,0x53F8,0x53F2,0x55E3,0x56DB,0x58EB,0x59CB,0x59C9,
- 0x59FF,0x5B50,0x5C4D,0x5E02,0x5E2B,0x5FD7,0x601D,0x6307,
- 0x652F,0x5B5C,0x65AF,0x65BD,0x65E8,0x679D,0x6B62,0x6B7B,
- 0x6C0F,0x7345,0x7949,0x79C1,0x7CF8,0x7D19,0x7D2B,0x80A2,
- 0x8102,0x81F3,0x8996,0x8A5E,0x8A69,0x8A66,0x8A8C,0x8AEE,
- 0x8CC7,0x8CDC,0x96CC,0x98FC,0x6B6F,0x4E8B,0x4F3C,0x4F8D,
- 0x5150,0x5B57,0x5BFA,0x6148,0x6301,0x6642,
-
- /* ku 28 */
- 0x6B21,0x6ECB,0x6CBB,0x723E,0x74BD,0x75D4,0x78C1,0x793A,
- 0x800C,0x8033,0x81EA,0x8494,0x8F9E,0x6C50,0x9E7F,0x5F0F,
- 0x8B58,0x9D2B,0x7AFA,0x8EF8,0x5B8D,0x96EB,0x4E03,0x53F1,
- 0x57F7,0x5931,0x5AC9,0x5BA4,0x6089,0x6E7F,0x6F06,0x75BE,
- 0x8CEA,0x5B9F,0x8500,0x7BE0,0x5072,0x67F4,0x829D,0x5C61,
- 0x854A,0x7E1E,0x820E,0x5199,0x5C04,0x6368,0x8D66,0x659C,
- 0x716E,0x793E,0x7D17,0x8005,0x8B1D,0x8ECA,0x906E,0x86C7,
- 0x90AA,0x501F,0x52FA,0x5C3A,0x6753,0x707C,0x7235,0x914C,
- 0x91C8,0x932B,0x82E5,0x5BC2,0x5F31,0x60F9,0x4E3B,0x53D6,
- 0x5B88,0x624B,0x6731,0x6B8A,0x72E9,0x73E0,0x7A2E,0x816B,
- 0x8DA3,0x9152,0x9996,0x5112,0x53D7,0x546A,0x5BFF,0x6388,
- 0x6A39,0x7DAC,0x9700,0x56DA,0x53CE,0x5468,
-
- /* ku 29 */
- 0x5B97,0x5C31,0x5DDE,0x4FEE,0x6101,0x62FE,0x6D32,0x79C0,
- 0x79CB,0x7D42,0x7E4D,0x7FD2,0x81ED,0x821F,0x8490,0x8846,
- 0x8972,0x8B90,0x8E74,0x8F2F,0x9031,0x914B,0x916C,0x96C6,
- 0x919C,0x4EC0,0x4F4F,0x5145,0x5341,0x5F93,0x620E,0x67D4,
- 0x6C41,0x6E0B,0x7363,0x7E26,0x91CD,0x9283,0x53D4,0x5919,
- 0x5BBF,0x6DD1,0x795D,0x7E2E,0x7C9B,0x587E,0x719F,0x51FA,
- 0x8853,0x8FF0,0x4FCA,0x5CFB,0x6625,0x77AC,0x7AE3,0x821C,
- 0x99FF,0x51C6,0x5FAA,0x65EC,0x696F,0x6B89,0x6DF3,0x6E96,
- 0x6F64,0x76FE,0x7D14,0x5DE1,0x9075,0x9187,0x9806,0x51E6,
- 0x521D,0x6240,0x6691,0x66D9,0x6E1A,0x5EB6,0x7DD2,0x7F72,
- 0x66F8,0x85AF,0x85F7,0x8AF8,0x52A9,0x53D9,0x5973,0x5E8F,
- 0x5F90,0x6055,0x92E4,0x9664,0x50B7,0x511F,
-
- /* ku 30 */
- 0x52DD,0x5320,0x5347,0x53EC,0x54E8,0x5546,0x5531,0x5617,
- 0x5968,0x59BE,0x5A3C,0x5BB5,0x5C06,0x5C0F,0x5C11,0x5C1A,
- 0x5E84,0x5E8A,0x5EE0,0x5F70,0x627F,0x6284,0x62DB,0x638C,
- 0x6377,0x6607,0x660C,0x662D,0x6676,0x677E,0x68A2,0x6A1F,
- 0x6A35,0x6CBC,0x6D88,0x6E09,0x6E58,0x713C,0x7126,0x7167,
- 0x75C7,0x7701,0x785D,0x7901,0x7965,0x79F0,0x7AE0,0x7B11,
- 0x7CA7,0x7D39,0x8096,0x83D6,0x848B,0x8549,0x885D,0x88F3,
- 0x8A1F,0x8A3C,0x8A54,0x8A73,0x8C61,0x8CDE,0x91A4,0x9266,
- 0x937E,0x9418,0x969C,0x9798,0x4E0A,0x4E08,0x4E1E,0x4E57,
- 0x5197,0x5270,0x57CE,0x5834,0x58CC,0x5B22,0x5E38,0x60C5,
- 0x64FE,0x6761,0x6756,0x6D44,0x72B6,0x7573,0x7A63,0x84B8,
- 0x8B72,0x91B8,0x9320,0x5631,0x57F4,0x98FE,
-
- /* ku 31 */
- 0x62ED,0x690D,0x6B96,0x71ED,0x7E54,0x8077,0x8272,0x89E6,
- 0x98DF,0x8755,0x8FB1,0x5C3B,0x4F38,0x4FE1,0x4FB5,0x5507,
- 0x5A20,0x5BDD,0x5BE9,0x5FC3,0x614E,0x632F,0x65B0,0x664B,
- 0x68EE,0x699B,0x6D78,0x6DF1,0x7533,0x75B9,0x771F,0x795E,
- 0x79E6,0x7D33,0x81E3,0x82AF,0x85AA,0x89AA,0x8A3A,0x8EAB,
- 0x8F9B,0x9032,0x91DD,0x9707,0x4EBA,0x4EC1,0x5203,0x5875,
- 0x58EC,0x5C0B,0x751A,0x5C3D,0x814E,0x8A0A,0x8FC5,0x9663,
- 0x976D,0x7B25,0x8ACF,0x9808,0x9162,0x56F3,0x53A8,0x9017,
- 0x5439,0x5782,0x5E25,0x63A8,0x6C34,0x708A,0x7761,0x7C8B,
- 0x7FE0,0x8870,0x9042,0x9154,0x9310,0x9318,0x968F,0x745E,
- 0x9AC4,0x5D07,0x5D69,0x6570,0x67A2,0x8DA8,0x96DB,0x636E,
- 0x6749,0x6919,0x83C5,0x9817,0x96C0,0x88FE,
-
- /* ku 32 */
- 0x6F84,0x647A,0x5BF8,0x4E16,0x702C,0x755D,0x662F,0x51C4,
- 0x5236,0x52E2,0x59D3,0x5F81,0x6027,0x6210,0x653F,0x6574,
- 0x661F,0x6674,0x68F2,0x6816,0x6B63,0x6E05,0x7272,0x751F,
- 0x76DB,0x7CBE,0x8056,0x58F0,0x88FD,0x897F,0x8AA0,0x8A93,
- 0x8ACB,0x901D,0x9192,0x9752,0x9759,0x6589,0x7A0E,0x8106,
- 0x96BB,0x5E2D,0x60DC,0x621A,0x65A5,0x6614,0x6790,0x77F3,
- 0x7A4D,0x7C4D,0x7E3E,0x810A,0x8CAC,0x8D64,0x8DE1,0x8E5F,
- 0x78A9,0x5207,0x62D9,0x63A5,0x6442,0x6298,0x8A2D,0x7A83,
- 0x7BC0,0x8AAC,0x96EA,0x7D76,0x820C,0x8749,0x4ED9,0x5148,
- 0x5343,0x5360,0x5BA3,0x5C02,0x5C16,0x5DDD,0x6226,0x6247,
- 0x64B0,0x6813,0x6834,0x6CC9,0x6D45,0x6D17,0x67D3,0x6F5C,
- 0x714E,0x717D,0x65CB,0x7A7F,0x7BAD,0x7DDA,
-
- /* ku 33 */
- 0x7E4A,0x7FA8,0x817A,0x821B,0x8239,0x85A6,0x8A6E,0x8CCE,
- 0x8DF5,0x9078,0x9077,0x92AD,0x9291,0x9583,0x9BAE,0x524D,
- 0x5584,0x6F38,0x7136,0x5168,0x7985,0x7E55,0x81B3,0x7CCE,
- 0x564C,0x5851,0x5CA8,0x63AA,0x66FE,0x66FD,0x695A,0x72D9,
- 0x758F,0x758E,0x790E,0x7956,0x79DF,0x7C97,0x7D20,0x7D44,
- 0x8607,0x8A34,0x963B,0x9061,0x9F20,0x50E7,0x5275,0x53CC,
- 0x53E2,0x5009,0x55AA,0x58EE,0x594F,0x723D,0x5B8B,0x5C64,
- 0x531D,0x60E3,0x60F3,0x635C,0x6383,0x633F,0x63BB,0x64CD,
- 0x65E9,0x66F9,0x5DE3,0x69CD,0x69FD,0x6F15,0x71E5,0x4E89,
- 0x75E9,0x76F8,0x7A93,0x7CDF,0x7DCF,0x7D9C,0x8061,0x8349,
- 0x8358,0x846C,0x84BC,0x85FB,0x88C5,0x8D70,0x9001,0x906D,
- 0x9397,0x971C,0x9A12,0x50CF,0x5897,0x618E,
-
- /* ku 34 */
- 0x81D3,0x8535,0x8D08,0x9020,0x4FC3,0x5074,0x5247,0x5373,
- 0x606F,0x6349,0x675F,0x6E2C,0x8DB3,0x901F,0x4FD7,0x5C5E,
- 0x8CCA,0x65CF,0x7D9A,0x5352,0x8896,0x5176,0x63C3,0x5B58,
- 0x5B6B,0x5C0A,0x640D,0x6751,0x905C,0x4ED6,0x591A,0x592A,
- 0x6C70,0x8A51,0x553E,0x5815,0x59A5,0x60F0,0x6253,0x67C1,
- 0x8235,0x6955,0x9640,0x99C4,0x9A28,0x4F53,0x5806,0x5BFE,
- 0x8010,0x5CB1,0x5E2F,0x5F85,0x6020,0x614B,0x6234,0x66FF,
- 0x6CF0,0x6EDE,0x80CE,0x817F,0x82D4,0x888B,0x8CB8,0x9000,
- 0x902E,0x968A,0x9EDB,0x9BDB,0x4EE3,0x53F0,0x5927,0x7B2C,
- 0x918D,0x984C,0x9DF9,0x6EDD,0x7027,0x5353,0x5544,0x5B85,
- 0x6258,0x629E,0x62D3,0x6CA2,0x6FEF,0x7422,0x8A17,0x9438,
- 0x6FC1,0x8AFE,0x8338,0x51E7,0x86F8,0x53EA,
-
- /* ku 35 */
- 0x53E9,0x4F46,0x9054,0x8FB0,0x596A,0x8131,0x5DFD,0x7AEA,
- 0x8FBF,0x68DA,0x8C37,0x72F8,0x9C48,0x6A3D,0x8AB0,0x4E39,
- 0x5358,0x5606,0x5766,0x62C5,0x63A2,0x65E6,0x6B4E,0x6DE1,
- 0x6E5B,0x70AD,0x77ED,0x7AEF,0x7BAA,0x7DBB,0x803D,0x80C6,
- 0x86CB,0x8A95,0x935B,0x56E3,0x58C7,0x5F3E,0x65AD,0x6696,
- 0x6A80,0x6BB5,0x7537,0x8AC7,0x5024,0x77E5,0x5730,0x5F1B,
- 0x6065,0x667A,0x6C60,0x75F4,0x7A1A,0x7F6E,0x81F4,0x8718,
- 0x9045,0x99B3,0x7BC9,0x755C,0x7AF9,0x7B51,0x84C4,0x9010,
- 0x79E9,0x7A92,0x8336,0x5AE1,0x7740,0x4E2D,0x4EF2,0x5B99,
- 0x5FE0,0x62BD,0x663C,0x67F1,0x6CE8,0x866B,0x8877,0x8A3B,
- 0x914E,0x92F3,0x99D0,0x6A17,0x7026,0x732A,0x82E7,0x8457,
- 0x8CAF,0x4E01,0x5146,0x51CB,0x558B,0x5BF5,
-
- /* ku 36 */
- 0x5E16,0x5E33,0x5E81,0x5F14,0x5F35,0x5F6B,0x5FB4,0x61F2,
- 0x6311,0x66A2,0x671D,0x6F6E,0x7252,0x753A,0x773A,0x8074,
- 0x8139,0x8178,0x8776,0x8ABF,0x8ADC,0x8D85,0x8DF3,0x929A,
- 0x9577,0x9802,0x9CE5,0x52C5,0x6357,0x76F4,0x6715,0x6C88,
- 0x73CD,0x8CC3,0x93AE,0x9673,0x6D25,0x589C,0x690E,0x69CC,
- 0x8FFD,0x939A,0x75DB,0x901A,0x585A,0x6802,0x63B4,0x69FB,
- 0x4F43,0x6F2C,0x67D8,0x8FBB,0x8526,0x7DB4,0x9354,0x693F,
- 0x6F70,0x576A,0x58F7,0x5B2C,0x7D2C,0x722A,0x540A,0x91E3,
- 0x9DB4,0x4EAD,0x4F4E,0x505C,0x5075,0x5243,0x8C9E,0x5448,
- 0x5824,0x5B9A,0x5E1D,0x5E95,0x5EAD,0x5EF7,0x5F1F,0x608C,
- 0x62B5,0x633A,0x63D0,0x68AF,0x6C40,0x7887,0x798E,0x7A0B,
- 0x7DE0,0x8247,0x8A02,0x8AE6,0x8E44,0x9013,
-
- /* ku 37 */
- 0x90B8,0x912D,0x91D8,0x9F0E,0x6CE5,0x6458,0x64E2,0x6575,
- 0x6EF4,0x7684,0x7B1B,0x9069,0x93D1,0x6EBA,0x54F2,0x5FB9,
- 0x64A4,0x8F4D,0x8FED,0x9244,0x5178,0x586B,0x5929,0x5C55,
- 0x5E97,0x6DFB,0x7E8F,0x751C,0x8CBC,0x8EE2,0x985B,0x70B9,
- 0x4F1D,0x6BBF,0x6FB1,0x7530,0x96FB,0x514E,0x5410,0x5835,
- 0x5857,0x59AC,0x5C60,0x5F92,0x6597,0x675C,0x6E21,0x767B,
- 0x83DF,0x8CED,0x9014,0x90FD,0x934D,0x7825,0x783A,0x52AA,
- 0x5EA6,0x571F,0x5974,0x6012,0x5012,0x515A,0x51AC,0x51CD,
- 0x5200,0x5510,0x5854,0x5858,0x5957,0x5B95,0x5CF6,0x5D8B,
- 0x60BC,0x6295,0x642D,0x6771,0x6843,0x68BC,0x68DF,0x76D7,
- 0x6DD8,0x6E6F,0x6D9B,0x706F,0x71C8,0x5F53,0x75D8,0x7977,
- 0x7B49,0x7B54,0x7B52,0x7CD6,0x7D71,0x5230,
-
- /* ku 38 */
- 0x8463,0x8569,0x85E4,0x8A0E,0x8B04,0x8C46,0x8E0F,0x9003,
- 0x900F,0x9419,0x9676,0x982D,0x9A30,0x95D8,0x50CD,0x52D5,
- 0x540C,0x5802,0x5C0E,0x61A7,0x649E,0x6D1E,0x77B3,0x7AE5,
- 0x80F4,0x8404,0x9053,0x9285,0x5CE0,0x9D07,0x533F,0x5F97,
- 0x5FB3,0x6D9C,0x7279,0x7763,0x79BF,0x7BE4,0x6BD2,0x72EC,
- 0x8AAD,0x6803,0x6A61,0x51F8,0x7A81,0x6934,0x5C4A,0x9CF6,
- 0x82EB,0x5BC5,0x9149,0x701E,0x5678,0x5C6F,0x60C7,0x6566,
- 0x6C8C,0x8C5A,0x9041,0x9813,0x5451,0x66C7,0x920D,0x5948,
- 0x90A3,0x5185,0x4E4D,0x51EA,0x8599,0x8B0E,0x7058,0x637A,
- 0x934B,0x6962,0x99B4,0x7E04,0x7577,0x5357,0x6960,0x8EDF,
- 0x96E3,0x6C5D,0x4E8C,0x5C3C,0x5F10,0x8FE9,0x5302,0x8CD1,
- 0x8089,0x8679,0x5EFF,0x65E5,0x4E73,0x5165,
-
- /* ku 39 */
- 0x5982,0x5C3F,0x97EE,0x4EFB,0x598A,0x5FCD,0x8A8D,0x6FE1,
- 0x79B0,0x7962,0x5BE7,0x8471,0x732B,0x71B1,0x5E74,0x5FF5,
- 0x637B,0x649A,0x71C3,0x7C98,0x4E43,0x5EFC,0x4E4B,0x57DC,
- 0x56A2,0x60A9,0x6FC3,0x7D0D,0x80FD,0x8133,0x81BF,0x8FB2,
- 0x8997,0x86A4,0x5DF4,0x628A,0x64AD,0x8987,0x6777,0x6CE2,
- 0x6D3E,0x7436,0x7834,0x5A46,0x7F75,0x82AD,0x99AC,0x4FF3,
- 0x5EC3,0x62DD,0x6392,0x6557,0x676F,0x76C3,0x724C,0x80CC,
- 0x80BA,0x8F29,0x914D,0x500D,0x57F9,0x5A92,0x6885,0x6973,
- 0x7164,0x72FD,0x8CB7,0x58F2,0x8CE0,0x966A,0x9019,0x877F,
- 0x79E4,0x77E7,0x8429,0x4F2F,0x5265,0x535A,0x62CD,0x67CF,
- 0x6CCA,0x767D,0x7B94,0x7C95,0x8236,0x8584,0x8FEB,0x66DD,
- 0x6F20,0x7206,0x7E1B,0x83AB,0x99C1,0x9EA6,
-
- /* ku 40 */
- 0x51FD,0x7BB1,0x7872,0x7BB8,0x8087,0x7B48,0x6AE8,0x5E61,
- 0x808C,0x7551,0x7560,0x516B,0x9262,0x6E8C,0x767A,0x9197,
- 0x9AEA,0x4F10,0x7F70,0x629C,0x7B4F,0x95A5,0x9CE9,0x567A,
- 0x5859,0x86E4,0x96BC,0x4F34,0x5224,0x534A,0x53CD,0x53DB,
- 0x5E06,0x642C,0x6591,0x677F,0x6C3E,0x6C4E,0x7248,0x72AF,
- 0x73ED,0x7554,0x7E41,0x822C,0x85E9,0x8CA9,0x7BC4,0x91C6,
- 0x7169,0x9812,0x98EF,0x633D,0x6669,0x756A,0x76E4,0x78D0,
- 0x8543,0x86EE,0x532A,0x5351,0x5426,0x5983,0x5E87,0x5F7C,
- 0x60B2,0x6249,0x6279,0x62AB,0x6590,0x6BD4,0x6CCC,0x75B2,
- 0x76AE,0x7891,0x79D8,0x7DCB,0x7F77,0x80A5,0x88AB,0x8AB9,
- 0x8CBB,0x907F,0x975E,0x98DB,0x6A0B,0x7C38,0x5099,0x5C3E,
- 0x5FAE,0x6787,0x6BD8,0x7435,0x7709,0x7F8E,
-
- /* ku 41 */
- 0x9F3B,0x67CA,0x7A17,0x5339,0x758B,0x9AED,0x5F66,0x819D,
- 0x83F1,0x8098,0x5F3C,0x5FC5,0x7562,0x7B46,0x903C,0x6867,
- 0x59EB,0x5A9B,0x7D10,0x767E,0x8B2C,0x4FF5,0x5F6A,0x6A19,
- 0x6C37,0x6F02,0x74E2,0x7968,0x8868,0x8A55,0x8C79,0x5EDF,
- 0x63CF,0x75C5,0x79D2,0x82D7,0x9328,0x92F2,0x849C,0x86ED,
- 0x9C2D,0x54C1,0x5F6C,0x658C,0x6D5C,0x7015,0x8CA7,0x8CD3,
- 0x983B,0x654F,0x74F6,0x4E0D,0x4ED8,0x57E0,0x592B,0x5A66,
- 0x5BCC,0x51A8,0x5E03,0x5E9C,0x6016,0x6276,0x6577,0x65A7,
- 0x666E,0x6D6E,0x7236,0x7B26,0x8150,0x819A,0x8299,0x8B5C,
- 0x8CA0,0x8CE6,0x8D74,0x961C,0x9644,0x4FAE,0x64AB,0x6B66,
- 0x821E,0x8461,0x856A,0x90E8,0x5C01,0x6953,0x98A8,0x847A,
- 0x8557,0x4F0F,0x526F,0x5FA9,0x5E45,0x670D,
-
- /* ku 42 */
- 0x798F,0x8179,0x8907,0x8986,0x6DF5,0x5F17,0x6255,0x6CB8,
- 0x4ECF,0x7269,0x9B92,0x5206,0x543B,0x5674,0x58B3,0x61A4,
- 0x626E,0x711A,0x596E,0x7C89,0x7CDE,0x7D1B,0x96F0,0x6587,
- 0x805E,0x4E19,0x4F75,0x5175,0x5840,0x5E63,0x5E73,0x5F0A,
- 0x67C4,0x4E26,0x853D,0x9589,0x965B,0x7C73,0x9801,0x50FB,
- 0x58C1,0x7656,0x78A7,0x5225,0x77A5,0x8511,0x7B86,0x504F,
- 0x5909,0x7247,0x7BC7,0x7DE8,0x8FBA,0x8FD4,0x904D,0x4FBF,
- 0x52C9,0x5A29,0x5F01,0x97AD,0x4FDD,0x8217,0x92EA,0x5703,
- 0x6355,0x6B69,0x752B,0x88DC,0x8F14,0x7A42,0x52DF,0x5893,
- 0x6155,0x620A,0x66AE,0x6BCD,0x7C3F,0x83E9,0x5023,0x4FF8,
- 0x5305,0x5446,0x5831,0x5949,0x5B9D,0x5CF0,0x5CEF,0x5D29,
- 0x5E96,0x62B1,0x6367,0x653E,0x65B9,0x670B,
-
- /* ku 43 */
- 0x6CD5,0x6CE1,0x70F9,0x7832,0x7E2B,0x80DE,0x82B3,0x840C,
- 0x84EC,0x8702,0x8912,0x8A2A,0x8C4A,0x90A6,0x92D2,0x98FD,
- 0x9CF3,0x9D6C,0x4E4F,0x4EA1,0x508D,0x5256,0x574A,0x59A8,
- 0x5E3D,0x5FD8,0x5FD9,0x623F,0x66B4,0x671B,0x67D0,0x68D2,
- 0x5192,0x7D21,0x80AA,0x81A8,0x8B00,0x8C8C,0x8CBF,0x927E,
- 0x9632,0x5420,0x982C,0x5317,0x50D5,0x535C,0x58A8,0x64B2,
- 0x6734,0x7267,0x7766,0x7A46,0x91E6,0x52C3,0x6CA1,0x6B86,
- 0x5800,0x5E4C,0x5954,0x672C,0x7FFB,0x51E1,0x76C6,0x6469,
- 0x78E8,0x9B54,0x9EBB,0x57CB,0x59B9,0x6627,0x679A,0x6BCE,
- 0x54E9,0x69D9,0x5E55,0x819C,0x6795,0x9BAA,0x67FE,0x9C52,
- 0x685D,0x4EA6,0x4FE3,0x53C8,0x62B9,0x672B,0x6CAB,0x8FC4,
- 0x4FAD,0x7E6D,0x9EBF,0x4E07,0x6162,0x6E80,
-
- /* ku 44 */
- 0x6F2B,0x8513,0x5473,0x672A,0x9B45,0x5DF3,0x7B95,0x5CAC,
- 0x5BC6,0x871C,0x6E4A,0x84D1,0x7A14,0x8108,0x5999,0x7C8D,
- 0x6C11,0x7720,0x52D9,0x5922,0x7121,0x725F,0x77DB,0x9727,
- 0x9D61,0x690B,0x5A7F,0x5A18,0x51A5,0x540D,0x547D,0x660E,
- 0x76DF,0x8FF7,0x9298,0x9CF4,0x59EA,0x725D,0x6EC5,0x514D,
- 0x68C9,0x7DBF,0x7DEC,0x9762,0x9EBA,0x6478,0x6A21,0x8302,
- 0x5984,0x5B5F,0x6BDB,0x731B,0x76F2,0x7DB2,0x8017,0x8499,
- 0x5132,0x6728,0x9ED9,0x76EE,0x6762,0x52FF,0x9905,0x5C24,
- 0x623B,0x7C7E,0x8CB0,0x554F,0x60B6,0x7D0B,0x9580,0x5301,
- 0x4E5F,0x51B6,0x591C,0x723A,0x8036,0x91CE,0x5F25,0x77E2,
- 0x5384,0x5F79,0x7D04,0x85AC,0x8A33,0x8E8D,0x9756,0x67F3,
- 0x85AE,0x9453,0x6109,0x6108,0x6CB9,0x7652,
-
- /* ku 45 */
- 0x8AED,0x8F38,0x552F,0x4F51,0x512A,0x52C7,0x53CB,0x5BA5,
- 0x5E7D,0x60A0,0x6182,0x63D6,0x6709,0x67DA,0x6E67,0x6D8C,
- 0x7336,0x7337,0x7531,0x7950,0x88D5,0x8A98,0x904A,0x9091,
- 0x90F5,0x96C4,0x878D,0x5915,0x4E88,0x4F59,0x4E0E,0x8A89,
- 0x8F3F,0x9810,0x50AD,0x5E7C,0x5996,0x5BB9,0x5EB8,0x63DA,
- 0x63FA,0x64C1,0x66DC,0x694A,0x69D8,0x6D0B,0x6EB6,0x7194,
- 0x7528,0x7AAF,0x7F8A,0x8000,0x8449,0x84C9,0x8981,0x8B21,
- 0x8E0A,0x9065,0x967D,0x990A,0x617E,0x6291,0x6B32,0x6C83,
- 0x6D74,0x7FCC,0x7FFC,0x6DC0,0x7F85,0x87BA,0x88F8,0x6765,
- 0x83B1,0x983C,0x96F7,0x6D1B,0x7D61,0x843D,0x916A,0x4E71,
- 0x5375,0x5D50,0x6B04,0x6FEB,0x85CD,0x862D,0x89A7,0x5229,
- 0x540F,0x5C65,0x674E,0x68A8,0x7406,0x7483,
-
- /* ku 46 */
- 0x75E2,0x88CF,0x88E1,0x91CC,0x96E2,0x9678,0x5F8B,0x7387,
- 0x7ACB,0x844E,0x63A0,0x7565,0x5289,0x6D41,0x6E9C,0x7409,
- 0x7559,0x786B,0x7C92,0x9686,0x7ADC,0x9F8D,0x4FB6,0x616E,
- 0x65C5,0x865C,0x4E86,0x4EAE,0x50DA,0x4E21,0x51CC,0x5BEE,
- 0x6599,0x6881,0x6DBC,0x731F,0x7642,0x77AD,0x7A1C,0x7CE7,
- 0x826F,0x8AD2,0x907C,0x91CF,0x9675,0x9818,0x529B,0x7DD1,
- 0x502B,0x5398,0x6797,0x6DCB,0x71D0,0x7433,0x81E8,0x8F2A,
- 0x96A3,0x9C57,0x9E9F,0x7460,0x5841,0x6D99,0x7D2F,0x985E,
- 0x4EE4,0x4F36,0x4F8B,0x51B7,0x52B1,0x5DBA,0x601C,0x73B2,
- 0x793C,0x82D3,0x9234,0x96B7,0x96F6,0x970A,0x9E97,0x9F62,
- 0x66A6,0x6B74,0x5217,0x52A3,0x70C8,0x88C2,0x5EC9,0x604B,
- 0x6190,0x6F23,0x7149,0x7C3E,0x7DF4,0x806F,
-
- /* ku 47 */
- 0x84EE,0x9023,0x932C,0x5442,0x9B6F,0x6AD3,0x7089,0x8CC2,
- 0x8DEF,0x9732,0x52B4,0x5A41,0x5ECA,0x5F04,0x6717,0x697C,
- 0x6994,0x6D6A,0x6F0F,0x7262,0x72FC,0x7BED,0x8001,0x807E,
- 0x874B,0x90CE,0x516D,0x9E93,0x7984,0x808B,0x9332,0x8AD6,
- 0x502D,0x548C,0x8A71,0x6B6A,0x8CC4,0x8107,0x60D1,0x67A0,
- 0x9DF2,0x4E99,0x4E98,0x9C10,0x8A6B,0x85C1,0x8568,0x6900,
- 0x6E7E,0x7897,0x8155,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-
- /* ku 48 */
- 0x5F0C,0x4E10,0x4E15,0x4E2A,0x4E31,0x4E36,0x4E3C,0x4E3F,
- 0x4E42,0x4E56,0x4E58,0x4E82,0x4E85,0x8C6B,0x4E8A,0x8212,
- 0x5F0D,0x4E8E,0x4E9E,0x4E9F,0x4EA0,0x4EA2,0x4EB0,0x4EB3,
- 0x4EB6,0x4ECE,0x4ECD,0x4EC4,0x4EC6,0x4EC2,0x4ED7,0x4EDE,
- 0x4EED,0x4EDF,0x4EF7,0x4F09,0x4F5A,0x4F30,0x4F5B,0x4F5D,
- 0x4F57,0x4F47,0x4F76,0x4F88,0x4F8F,0x4F98,0x4F7B,0x4F69,
- 0x4F70,0x4F91,0x4F6F,0x4F86,0x4F96,0x5118,0x4FD4,0x4FDF,
- 0x4FCE,0x4FD8,0x4FDB,0x4FD1,0x4FDA,0x4FD0,0x4FE4,0x4FE5,
- 0x501A,0x5028,0x5014,0x502A,0x5025,0x5005,0x4F1C,0x4FF6,
- 0x5021,0x5029,0x502C,0x4FFE,0x4FEF,0x5011,0x5006,0x5043,
- 0x5047,0x6703,0x5055,0x5050,0x5048,0x505A,0x5056,0x506C,
- 0x5078,0x5080,0x509A,0x5085,0x50B4,0x50B2,
-
- /* ku 49 */
- 0x50C9,0x50CA,0x50B3,0x50C2,0x50D6,0x50DE,0x50E5,0x50ED,
- 0x50E3,0x50EE,0x50F9,0x50F5,0x5109,0x5101,0x5102,0x5116,
- 0x5115,0x5114,0x511A,0x5121,0x513A,0x5137,0x513C,0x513B,
- 0x513F,0x5140,0x5152,0x514C,0x5154,0x5162,0x7AF8,0x5169,
- 0x516A,0x516E,0x5180,0x5182,0x56D8,0x518C,0x5189,0x518F,
- 0x5191,0x5193,0x5195,0x5196,0x51A4,0x51A6,0x51A2,0x51A9,
- 0x51AA,0x51AB,0x51B3,0x51B1,0x51B2,0x51B0,0x51B5,0x51BD,
- 0x51C5,0x51C9,0x51DB,0x51E0,0x8655,0x51E9,0x51ED,0x51F0,
- 0x51F5,0x51FE,0x5204,0x520B,0x5214,0x520E,0x5227,0x522A,
- 0x522E,0x5233,0x5239,0x524F,0x5244,0x524B,0x524C,0x525E,
- 0x5254,0x526A,0x5274,0x5269,0x5273,0x527F,0x527D,0x528D,
- 0x5294,0x5292,0x5271,0x5288,0x5291,0x8FA8,
-
- /* ku 50 */
- 0x8FA7,0x52AC,0x52AD,0x52BC,0x52B5,0x52C1,0x52CD,0x52D7,
- 0x52DE,0x52E3,0x52E6,0x98ED,0x52E0,0x52F3,0x52F5,0x52F8,
- 0x52F9,0x5306,0x5308,0x7538,0x530D,0x5310,0x530F,0x5315,
- 0x531A,0x5323,0x532F,0x5331,0x5333,0x5338,0x5340,0x5346,
- 0x5345,0x4E17,0x5349,0x534D,0x51D6,0x535E,0x5369,0x536E,
- 0x5918,0x537B,0x5377,0x5382,0x5396,0x53A0,0x53A6,0x53A5,
- 0x53AE,0x53B0,0x53B6,0x53C3,0x7C12,0x96D9,0x53DF,0x66FC,
- 0x71EE,0x53EE,0x53E8,0x53ED,0x53FA,0x5401,0x543D,0x5440,
- 0x542C,0x542D,0x543C,0x542E,0x5436,0x5429,0x541D,0x544E,
- 0x548F,0x5475,0x548E,0x545F,0x5471,0x5477,0x5470,0x5492,
- 0x547B,0x5480,0x5476,0x5484,0x5490,0x5486,0x54C7,0x54A2,
- 0x54B8,0x54A5,0x54AC,0x54C4,0x54C8,0x54A8,
-
- /* ku 51 */
- 0x54AB,0x54C2,0x54A4,0x54BE,0x54BC,0x54D8,0x54E5,0x54E6,
- 0x550F,0x5514,0x54FD,0x54EE,0x54ED,0x54FA,0x54E2,0x5539,
- 0x5540,0x5563,0x554C,0x552E,0x555C,0x5545,0x5556,0x5557,
- 0x5538,0x5533,0x555D,0x5599,0x5580,0x54AF,0x558A,0x559F,
- 0x557B,0x557E,0x5598,0x559E,0x55AE,0x557C,0x5583,0x55A9,
- 0x5587,0x55A8,0x55DA,0x55C5,0x55DF,0x55C4,0x55DC,0x55E4,
- 0x55D4,0x5614,0x55F7,0x5616,0x55FE,0x55FD,0x561B,0x55F9,
- 0x564E,0x5650,0x71DF,0x5634,0x5636,0x5632,0x5638,0x566B,
- 0x5664,0x562F,0x566C,0x566A,0x5686,0x5680,0x568A,0x56A0,
- 0x5694,0x568F,0x56A5,0x56AE,0x56B6,0x56B4,0x56C2,0x56BC,
- 0x56C1,0x56C3,0x56C0,0x56C8,0x56CE,0x56D1,0x56D3,0x56D7,
- 0x56EE,0x56F9,0x5700,0x56FF,0x5704,0x5709,
-
- /* ku 52 */
- 0x5708,0x570B,0x570D,0x5713,0x5718,0x5716,0x55C7,0x571C,
- 0x5726,0x5737,0x5738,0x574E,0x573B,0x5740,0x574F,0x5769,
- 0x57C0,0x5788,0x5761,0x577F,0x5789,0x5793,0x57A0,0x57B3,
- 0x57A4,0x57AA,0x57B0,0x57C3,0x57C6,0x57D4,0x57D2,0x57D3,
- 0x580A,0x57D6,0x57E3,0x580B,0x5819,0x581D,0x5872,0x5821,
- 0x5862,0x584B,0x5870,0x6BC0,0x5852,0x583D,0x5879,0x5885,
- 0x58B9,0x589F,0x58AB,0x58BA,0x58DE,0x58BB,0x58B8,0x58AE,
- 0x58C5,0x58D3,0x58D1,0x58D7,0x58D9,0x58D8,0x58E5,0x58DC,
- 0x58E4,0x58DF,0x58EF,0x58FA,0x58F9,0x58FB,0x58FC,0x58FD,
- 0x5902,0x590A,0x5910,0x591B,0x68A6,0x5925,0x592C,0x592D,
- 0x5932,0x5938,0x593E,0x7AD2,0x5955,0x5950,0x594E,0x595A,
- 0x5958,0x5962,0x5960,0x5967,0x596C,0x5969,
-
- /* ku 53 */
- 0x5978,0x5981,0x599D,0x4F5E,0x4FAB,0x59A3,0x59B2,0x59C6,
- 0x59E8,0x59DC,0x598D,0x59D9,0x59DA,0x5A25,0x5A1F,0x5A11,
- 0x5A1C,0x5A09,0x5A1A,0x5A40,0x5A6C,0x5A49,0x5A35,0x5A36,
- 0x5A62,0x5A6A,0x5A9A,0x5ABC,0x5ABE,0x5ACB,0x5AC2,0x5ABD,
- 0x5AE3,0x5AD7,0x5AE6,0x5AE9,0x5AD6,0x5AFA,0x5AFB,0x5B0C,
- 0x5B0B,0x5B16,0x5B32,0x5AD0,0x5B2A,0x5B36,0x5B3E,0x5B43,
- 0x5B45,0x5B40,0x5B51,0x5B55,0x5B5A,0x5B5B,0x5B65,0x5B69,
- 0x5B70,0x5B73,0x5B75,0x5B78,0x6588,0x5B7A,0x5B80,0x5B83,
- 0x5BA6,0x5BB8,0x5BC3,0x5BC7,0x5BC9,0x5BD4,0x5BD0,0x5BE4,
- 0x5BE6,0x5BE2,0x5BDE,0x5BE5,0x5BEB,0x5BF0,0x5BF6,0x5BF3,
- 0x5C05,0x5C07,0x5C08,0x5C0D,0x5C13,0x5C20,0x5C22,0x5C28,
- 0x5C38,0x5C39,0x5C41,0x5C46,0x5C4E,0x5C53,
-
- /* ku 54 */
- 0x5C50,0x5C4F,0x5B71,0x5C6C,0x5C6E,0x4E62,0x5C76,0x5C79,
- 0x5C8C,0x5C91,0x5C94,0x599B,0x5CAB,0x5CBB,0x5CB6,0x5CBC,
- 0x5CB7,0x5CC5,0x5CBE,0x5CC7,0x5CD9,0x5CE9,0x5CFD,0x5CFA,
- 0x5CED,0x5D8C,0x5CEA,0x5D0B,0x5D15,0x5D17,0x5D5C,0x5D1F,
- 0x5D1B,0x5D11,0x5D14,0x5D22,0x5D1A,0x5D19,0x5D18,0x5D4C,
- 0x5D52,0x5D4E,0x5D4B,0x5D6C,0x5D73,0x5D76,0x5D87,0x5D84,
- 0x5D82,0x5DA2,0x5D9D,0x5DAC,0x5DAE,0x5DBD,0x5D90,0x5DB7,
- 0x5DBC,0x5DC9,0x5DCD,0x5DD3,0x5DD2,0x5DD6,0x5DDB,0x5DEB,
- 0x5DF2,0x5DF5,0x5E0B,0x5E1A,0x5E19,0x5E11,0x5E1B,0x5E36,
- 0x5E37,0x5E44,0x5E43,0x5E40,0x5E4E,0x5E57,0x5E54,0x5E5F,
- 0x5E62,0x5E64,0x5E47,0x5E75,0x5E76,0x5E7A,0x9EBC,0x5E7F,
- 0x5EA0,0x5EC1,0x5EC2,0x5EC8,0x5ED0,0x5ECF,
-
- /* ku 55 */
- 0x5ED6,0x5EE3,0x5EDD,0x5EDA,0x5EDB,0x5EE2,0x5EE1,0x5EE8,
- 0x5EE9,0x5EEC,0x5EF1,0x5EF3,0x5EF0,0x5EF4,0x5EF8,0x5EFE,
- 0x5F03,0x5F09,0x5F5D,0x5F5C,0x5F0B,0x5F11,0x5F16,0x5F29,
- 0x5F2D,0x5F38,0x5F41,0x5F48,0x5F4C,0x5F4E,0x5F2F,0x5F51,
- 0x5F56,0x5F57,0x5F59,0x5F61,0x5F6D,0x5F73,0x5F77,0x5F83,
- 0x5F82,0x5F7F,0x5F8A,0x5F88,0x5F91,0x5F87,0x5F9E,0x5F99,
- 0x5F98,0x5FA0,0x5FA8,0x5FAD,0x5FBC,0x5FD6,0x5FFB,0x5FE4,
- 0x5FF8,0x5FF1,0x5FDD,0x60B3,0x5FFF,0x6021,0x6060,0x6019,
- 0x6010,0x6029,0x600E,0x6031,0x601B,0x6015,0x602B,0x6026,
- 0x600F,0x603A,0x605A,0x6041,0x606A,0x6077,0x605F,0x604A,
- 0x6046,0x604D,0x6063,0x6043,0x6064,0x6042,0x606C,0x606B,
- 0x6059,0x6081,0x608D,0x60E7,0x6083,0x609A,
-
- /* ku 56 */
- 0x6084,0x609B,0x6096,0x6097,0x6092,0x60A7,0x608B,0x60E1,
- 0x60B8,0x60E0,0x60D3,0x60B4,0x5FF0,0x60BD,0x60C6,0x60B5,
- 0x60D8,0x614D,0x6115,0x6106,0x60F6,0x60F7,0x6100,0x60F4,
- 0x60FA,0x6103,0x6121,0x60FB,0x60F1,0x610D,0x610E,0x6147,
- 0x613E,0x6128,0x6127,0x614A,0x613F,0x613C,0x612C,0x6134,
- 0x613D,0x6142,0x6144,0x6173,0x6177,0x6158,0x6159,0x615A,
- 0x616B,0x6174,0x616F,0x6165,0x6171,0x615F,0x615D,0x6153,
- 0x6175,0x6199,0x6196,0x6187,0x61AC,0x6194,0x619A,0x618A,
- 0x6191,0x61AB,0x61AE,0x61CC,0x61CA,0x61C9,0x61F7,0x61C8,
- 0x61C3,0x61C6,0x61BA,0x61CB,0x7F79,0x61CD,0x61E6,0x61E3,
- 0x61F6,0x61FA,0x61F4,0x61FF,0x61FD,0x61FC,0x61FE,0x6200,
- 0x6208,0x6209,0x620D,0x620C,0x6214,0x621B,
-
- /* ku 57 */
- 0x621E,0x6221,0x622A,0x622E,0x6230,0x6232,0x6233,0x6241,
- 0x624E,0x625E,0x6263,0x625B,0x6260,0x6268,0x627C,0x6282,
- 0x6289,0x627E,0x6292,0x6293,0x6296,0x62D4,0x6283,0x6294,
- 0x62D7,0x62D1,0x62BB,0x62CF,0x62FF,0x62C6,0x64D4,0x62C8,
- 0x62DC,0x62CC,0x62CA,0x62C2,0x62C7,0x629B,0x62C9,0x630C,
- 0x62EE,0x62F1,0x6327,0x6302,0x6308,0x62EF,0x62F5,0x6350,
- 0x633E,0x634D,0x641C,0x634F,0x6396,0x638E,0x6380,0x63AB,
- 0x6376,0x63A3,0x638F,0x6389,0x639F,0x63B5,0x636B,0x6369,
- 0x63BE,0x63E9,0x63C0,0x63C6,0x63E3,0x63C9,0x63D2,0x63F6,
- 0x63C4,0x6416,0x6434,0x6406,0x6413,0x6426,0x6436,0x651D,
- 0x6417,0x6428,0x640F,0x6467,0x646F,0x6476,0x644E,0x652A,
- 0x6495,0x6493,0x64A5,0x64A9,0x6488,0x64BC,
-
- /* ku 58 */
- 0x64DA,0x64D2,0x64C5,0x64C7,0x64BB,0x64D8,0x64C2,0x64F1,
- 0x64E7,0x8209,0x64E0,0x64E1,0x62AC,0x64E3,0x64EF,0x652C,
- 0x64F6,0x64F4,0x64F2,0x64FA,0x6500,0x64FD,0x6518,0x651C,
- 0x6505,0x6524,0x6523,0x652B,0x6534,0x6535,0x6537,0x6536,
- 0x6538,0x754B,0x6548,0x6556,0x6555,0x654D,0x6558,0x655E,
- 0x655D,0x6572,0x6578,0x6582,0x6583,0x8B8A,0x659B,0x659F,
- 0x65AB,0x65B7,0x65C3,0x65C6,0x65C1,0x65C4,0x65CC,0x65D2,
- 0x65DB,0x65D9,0x65E0,0x65E1,0x65F1,0x6772,0x660A,0x6603,
- 0x65FB,0x6773,0x6635,0x6636,0x6634,0x661C,0x664F,0x6644,
- 0x6649,0x6641,0x665E,0x665D,0x6664,0x6667,0x6668,0x665F,
- 0x6662,0x6670,0x6683,0x6688,0x668E,0x6689,0x6684,0x6698,
- 0x669D,0x66C1,0x66B9,0x66C9,0x66BE,0x66BC,
-
- /* ku 59 */
- 0x66C4,0x66B8,0x66D6,0x66DA,0x66E0,0x663F,0x66E6,0x66E9,
- 0x66F0,0x66F5,0x66F7,0x670F,0x6716,0x671E,0x6726,0x6727,
- 0x9738,0x672E,0x673F,0x6736,0x6741,0x6738,0x6737,0x6746,
- 0x675E,0x6760,0x6759,0x6763,0x6764,0x6789,0x6770,0x67A9,
- 0x677C,0x676A,0x678C,0x678B,0x67A6,0x67A1,0x6785,0x67B7,
- 0x67EF,0x67B4,0x67EC,0x67B3,0x67E9,0x67B8,0x67E4,0x67DE,
- 0x67DD,0x67E2,0x67EE,0x67B9,0x67CE,0x67C6,0x67E7,0x6A9C,
- 0x681E,0x6846,0x6829,0x6840,0x684D,0x6832,0x684E,0x68B3,
- 0x682B,0x6859,0x6863,0x6877,0x687F,0x689F,0x688F,0x68AD,
- 0x6894,0x689D,0x689B,0x6883,0x6AAE,0x68B9,0x6874,0x68B5,
- 0x68A0,0x68BA,0x690F,0x688D,0x687E,0x6901,0x68CA,0x6908,
- 0x68D8,0x6922,0x6926,0x68E1,0x690C,0x68CD,
-
- /* ku 60 */
- 0x68D4,0x68E7,0x68D5,0x6936,0x6912,0x6904,0x68D7,0x68E3,
- 0x6925,0x68F9,0x68E0,0x68EF,0x6928,0x692A,0x691A,0x6923,
- 0x6921,0x68C6,0x6979,0x6977,0x695C,0x6978,0x696B,0x6954,
- 0x697E,0x696E,0x6939,0x6974,0x693D,0x6959,0x6930,0x6961,
- 0x695E,0x695D,0x6981,0x696A,0x69B2,0x69AE,0x69D0,0x69BF,
- 0x69C1,0x69D3,0x69BE,0x69CE,0x5BE8,0x69CA,0x69DD,0x69BB,
- 0x69C3,0x69A7,0x6A2E,0x6991,0x69A0,0x699C,0x6995,0x69B4,
- 0x69DE,0x69E8,0x6A02,0x6A1B,0x69FF,0x6B0A,0x69F9,0x69F2,
- 0x69E7,0x6A05,0x69B1,0x6A1E,0x69ED,0x6A14,0x69EB,0x6A0A,
- 0x6A12,0x6AC1,0x6A23,0x6A13,0x6A44,0x6A0C,0x6A72,0x6A36,
- 0x6A78,0x6A47,0x6A62,0x6A59,0x6A66,0x6A48,0x6A38,0x6A22,
- 0x6A90,0x6A8D,0x6AA0,0x6A84,0x6AA2,0x6AA3,
-
- /* ku 61 */
- 0x6A97,0x8617,0x6ABB,0x6AC3,0x6AC2,0x6AB8,0x6AB3,0x6AAC,
- 0x6ADE,0x6AD1,0x6ADF,0x6AAA,0x6ADA,0x6AEA,0x6AFB,0x6B05,
- 0x8616,0x6AFA,0x6B12,0x6B16,0x9B31,0x6B1F,0x6B38,0x6B37,
- 0x76DC,0x6B39,0x98EE,0x6B47,0x6B43,0x6B49,0x6B50,0x6B59,
- 0x6B54,0x6B5B,0x6B5F,0x6B61,0x6B78,0x6B79,0x6B7F,0x6B80,
- 0x6B84,0x6B83,0x6B8D,0x6B98,0x6B95,0x6B9E,0x6BA4,0x6BAA,
- 0x6BAB,0x6BAF,0x6BB2,0x6BB1,0x6BB3,0x6BB7,0x6BBC,0x6BC6,
- 0x6BCB,0x6BD3,0x6BDF,0x6BEC,0x6BEB,0x6BF3,0x6BEF,0x9EBE,
- 0x6C08,0x6C13,0x6C14,0x6C1B,0x6C24,0x6C23,0x6C5E,0x6C55,
- 0x6C62,0x6C6A,0x6C82,0x6C8D,0x6C9A,0x6C81,0x6C9B,0x6C7E,
- 0x6C68,0x6C73,0x6C92,0x6C90,0x6CC4,0x6CF1,0x6CD3,0x6CBD,
- 0x6CD7,0x6CC5,0x6CDD,0x6CAE,0x6CB1,0x6CBE,
-
- /* ku 62 */
- 0x6CBA,0x6CDB,0x6CEF,0x6CD9,0x6CEA,0x6D1F,0x884D,0x6D36,
- 0x6D2B,0x6D3D,0x6D38,0x6D19,0x6D35,0x6D33,0x6D12,0x6D0C,
- 0x6D63,0x6D93,0x6D64,0x6D5A,0x6D79,0x6D59,0x6D8E,0x6D95,
- 0x6FE4,0x6D85,0x6DF9,0x6E15,0x6E0A,0x6DB5,0x6DC7,0x6DE6,
- 0x6DB8,0x6DC6,0x6DEC,0x6DDE,0x6DCC,0x6DE8,0x6DD2,0x6DC5,
- 0x6DFA,0x6DD9,0x6DE4,0x6DD5,0x6DEA,0x6DEE,0x6E2D,0x6E6E,
- 0x6E2E,0x6E19,0x6E72,0x6E5F,0x6E3E,0x6E23,0x6E6B,0x6E2B,
- 0x6E76,0x6E4D,0x6E1F,0x6E43,0x6E3A,0x6E4E,0x6E24,0x6EFF,
- 0x6E1D,0x6E38,0x6E82,0x6EAA,0x6E98,0x6EC9,0x6EB7,0x6ED3,
- 0x6EBD,0x6EAF,0x6EC4,0x6EB2,0x6ED4,0x6ED5,0x6E8F,0x6EA5,
- 0x6EC2,0x6E9F,0x6F41,0x6F11,0x704C,0x6EEC,0x6EF8,0x6EFE,
- 0x6F3F,0x6EF2,0x6F31,0x6EEF,0x6F32,0x6ECC,
-
- /* ku 63 */
- 0x6F3E,0x6F13,0x6EF7,0x6F86,0x6F7A,0x6F78,0x6F81,0x6F80,
- 0x6F6F,0x6F5B,0x6FF3,0x6F6D,0x6F82,0x6F7C,0x6F58,0x6F8E,
- 0x6F91,0x6FC2,0x6F66,0x6FB3,0x6FA3,0x6FA1,0x6FA4,0x6FB9,
- 0x6FC6,0x6FAA,0x6FDF,0x6FD5,0x6FEC,0x6FD4,0x6FD8,0x6FF1,
- 0x6FEE,0x6FDB,0x7009,0x700B,0x6FFA,0x7011,0x7001,0x700F,
- 0x6FFE,0x701B,0x701A,0x6F74,0x701D,0x7018,0x701F,0x7030,
- 0x703E,0x7032,0x7051,0x7063,0x7099,0x7092,0x70AF,0x70F1,
- 0x70AC,0x70B8,0x70B3,0x70AE,0x70DF,0x70CB,0x70DD,0x70D9,
- 0x7109,0x70FD,0x711C,0x7119,0x7165,0x7155,0x7188,0x7166,
- 0x7162,0x714C,0x7156,0x716C,0x718F,0x71FB,0x7184,0x7195,
- 0x71A8,0x71AC,0x71D7,0x71B9,0x71BE,0x71D2,0x71C9,0x71D4,
- 0x71CE,0x71E0,0x71EC,0x71E7,0x71F5,0x71FC,
-
- /* ku 64 */
- 0x71F9,0x71FF,0x720D,0x7210,0x721B,0x7228,0x722D,0x722C,
- 0x7230,0x7232,0x723B,0x723C,0x723F,0x7240,0x7246,0x724B,
- 0x7258,0x7274,0x727E,0x7282,0x7281,0x7287,0x7292,0x7296,
- 0x72A2,0x72A7,0x72B9,0x72B2,0x72C3,0x72C6,0x72C4,0x72CE,
- 0x72D2,0x72E2,0x72E0,0x72E1,0x72F9,0x72F7,0x500F,0x7317,
- 0x730A,0x731C,0x7316,0x731D,0x7334,0x732F,0x7329,0x7325,
- 0x733E,0x734E,0x734F,0x9ED8,0x7357,0x736A,0x7368,0x7370,
- 0x7378,0x7375,0x737B,0x737A,0x73C8,0x73B3,0x73CE,0x73BB,
- 0x73C0,0x73E5,0x73EE,0x73DE,0x74A2,0x7405,0x746F,0x7425,
- 0x73F8,0x7432,0x743A,0x7455,0x743F,0x745F,0x7459,0x7441,
- 0x745C,0x7469,0x7470,0x7463,0x746A,0x7476,0x747E,0x748B,
- 0x749E,0x74A7,0x74CA,0x74CF,0x74D4,0x73F1,
-
- /* ku 65 */
- 0x74E0,0x74E3,0x74E7,0x74E9,0x74EE,0x74F2,0x74F0,0x74F1,
- 0x74F8,0x74F7,0x7504,0x7503,0x7505,0x750C,0x750E,0x750D,
- 0x7515,0x7513,0x751E,0x7526,0x752C,0x753C,0x7544,0x754D,
- 0x754A,0x7549,0x755B,0x7546,0x755A,0x7569,0x7564,0x7567,
- 0x756B,0x756D,0x7578,0x7576,0x7586,0x7587,0x7574,0x758A,
- 0x7589,0x7582,0x7594,0x759A,0x759D,0x75A5,0x75A3,0x75C2,
- 0x75B3,0x75C3,0x75B5,0x75BD,0x75B8,0x75BC,0x75B1,0x75CD,
- 0x75CA,0x75D2,0x75D9,0x75E3,0x75DE,0x75FE,0x75FF,0x75FC,
- 0x7601,0x75F0,0x75FA,0x75F2,0x75F3,0x760B,0x760D,0x7609,
- 0x761F,0x7627,0x7620,0x7621,0x7622,0x7624,0x7634,0x7630,
- 0x763B,0x7647,0x7648,0x7646,0x765C,0x7658,0x7661,0x7662,
- 0x7668,0x7669,0x766A,0x7667,0x766C,0x7670,
-
- /* ku 66 */
- 0x7672,0x7676,0x7678,0x767C,0x7680,0x7683,0x7688,0x768B,
- 0x768E,0x7696,0x7693,0x7699,0x769A,0x76B0,0x76B4,0x76B8,
- 0x76B9,0x76BA,0x76C2,0x76CD,0x76D6,0x76D2,0x76DE,0x76E1,
- 0x76E5,0x76E7,0x76EA,0x862F,0x76FB,0x7708,0x7707,0x7704,
- 0x7729,0x7724,0x771E,0x7725,0x7726,0x771B,0x7737,0x7738,
- 0x7747,0x775A,0x7768,0x776B,0x775B,0x7765,0x777F,0x777E,
- 0x7779,0x778E,0x778B,0x7791,0x77A0,0x779E,0x77B0,0x77B6,
- 0x77B9,0x77BF,0x77BC,0x77BD,0x77BB,0x77C7,0x77CD,0x77D7,
- 0x77DA,0x77DC,0x77E3,0x77EE,0x77FC,0x780C,0x7812,0x7926,
- 0x7820,0x792A,0x7845,0x788E,0x7874,0x7886,0x787C,0x789A,
- 0x788C,0x78A3,0x78B5,0x78AA,0x78AF,0x78D1,0x78C6,0x78CB,
- 0x78D4,0x78BE,0x78BC,0x78C5,0x78CA,0x78EC,
-
- /* ku 67 */
- 0x78E7,0x78DA,0x78FD,0x78F4,0x7907,0x7912,0x7911,0x7919,
- 0x792C,0x792B,0x7940,0x7960,0x7957,0x795F,0x795A,0x7955,
- 0x7953,0x797A,0x797F,0x798A,0x799D,0x79A7,0x9F4B,0x79AA,
- 0x79AE,0x79B3,0x79B9,0x79BA,0x79C9,0x79D5,0x79E7,0x79EC,
- 0x79E1,0x79E3,0x7A08,0x7A0D,0x7A18,0x7A19,0x7A20,0x7A1F,
- 0x7980,0x7A31,0x7A3B,0x7A3E,0x7A37,0x7A43,0x7A57,0x7A49,
- 0x7A61,0x7A62,0x7A69,0x9F9D,0x7A70,0x7A79,0x7A7D,0x7A88,
- 0x7A97,0x7A95,0x7A98,0x7A96,0x7AA9,0x7AC8,0x7AB0,0x7AB6,
- 0x7AC5,0x7AC4,0x7ABF,0x9083,0x7AC7,0x7ACA,0x7ACD,0x7ACF,
- 0x7AD5,0x7AD3,0x7AD9,0x7ADA,0x7ADD,0x7AE1,0x7AE2,0x7AE6,
- 0x7AED,0x7AF0,0x7B02,0x7B0F,0x7B0A,0x7B06,0x7B33,0x7B18,
- 0x7B19,0x7B1E,0x7B35,0x7B28,0x7B36,0x7B50,
-
- /* ku 68 */
- 0x7B7A,0x7B04,0x7B4D,0x7B0B,0x7B4C,0x7B45,0x7B75,0x7B65,
- 0x7B74,0x7B67,0x7B70,0x7B71,0x7B6C,0x7B6E,0x7B9D,0x7B98,
- 0x7B9F,0x7B8D,0x7B9C,0x7B9A,0x7B8B,0x7B92,0x7B8F,0x7B5D,
- 0x7B99,0x7BCB,0x7BC1,0x7BCC,0x7BCF,0x7BB4,0x7BC6,0x7BDD,
- 0x7BE9,0x7C11,0x7C14,0x7BE6,0x7BE5,0x7C60,0x7C00,0x7C07,
- 0x7C13,0x7BF3,0x7BF7,0x7C17,0x7C0D,0x7BF6,0x7C23,0x7C27,
- 0x7C2A,0x7C1F,0x7C37,0x7C2B,0x7C3D,0x7C4C,0x7C43,0x7C54,
- 0x7C4F,0x7C40,0x7C50,0x7C58,0x7C5F,0x7C64,0x7C56,0x7C65,
- 0x7C6C,0x7C75,0x7C83,0x7C90,0x7CA4,0x7CAD,0x7CA2,0x7CAB,
- 0x7CA1,0x7CA8,0x7CB3,0x7CB2,0x7CB1,0x7CAE,0x7CB9,0x7CBD,
- 0x7CC0,0x7CC5,0x7CC2,0x7CD8,0x7CD2,0x7CDC,0x7CE2,0x9B3B,
- 0x7CEF,0x7CF2,0x7CF4,0x7CF6,0x7CFA,0x7D06,
-
- /* ku 69 */
- 0x7D02,0x7D1C,0x7D15,0x7D0A,0x7D45,0x7D4B,0x7D2E,0x7D32,
- 0x7D3F,0x7D35,0x7D46,0x7D73,0x7D56,0x7D4E,0x7D72,0x7D68,
- 0x7D6E,0x7D4F,0x7D63,0x7D93,0x7D89,0x7D5B,0x7D8F,0x7D7D,
- 0x7D9B,0x7DBA,0x7DAE,0x7DA3,0x7DB5,0x7DC7,0x7DBD,0x7DAB,
- 0x7E3D,0x7DA2,0x7DAF,0x7DDC,0x7DB8,0x7D9F,0x7DB0,0x7DD8,
- 0x7DDD,0x7DE4,0x7DDE,0x7DFB,0x7DF2,0x7DE1,0x7E05,0x7E0A,
- 0x7E23,0x7E21,0x7E12,0x7E31,0x7E1F,0x7E09,0x7E0B,0x7E22,
- 0x7E46,0x7E66,0x7E3B,0x7E35,0x7E39,0x7E43,0x7E37,0x7E32,
- 0x7E3A,0x7E67,0x7E5D,0x7E56,0x7E5E,0x7E59,0x7E5A,0x7E79,
- 0x7E6A,0x7E69,0x7E7C,0x7E7B,0x7E83,0x7DD5,0x7E7D,0x8FAE,
- 0x7E7F,0x7E88,0x7E89,0x7E8C,0x7E92,0x7E90,0x7E93,0x7E94,
- 0x7E96,0x7E8E,0x7E9B,0x7E9C,0x7F38,0x7F3A,
-
- /* ku 70 */
- 0x7F45,0x7F4C,0x7F4D,0x7F4E,0x7F50,0x7F51,0x7F55,0x7F54,
- 0x7F58,0x7F5F,0x7F60,0x7F68,0x7F69,0x7F67,0x7F78,0x7F82,
- 0x7F86,0x7F83,0x7F88,0x7F87,0x7F8C,0x7F94,0x7F9E,0x7F9D,
- 0x7F9A,0x7FA3,0x7FAF,0x7FB2,0x7FB9,0x7FAE,0x7FB6,0x7FB8,
- 0x8B71,0x7FC5,0x7FC6,0x7FCA,0x7FD5,0x7FD4,0x7FE1,0x7FE6,
- 0x7FE9,0x7FF3,0x7FF9,0x98DC,0x8006,0x8004,0x800B,0x8012,
- 0x8018,0x8019,0x801C,0x8021,0x8028,0x803F,0x803B,0x804A,
- 0x8046,0x8052,0x8058,0x805A,0x805F,0x8062,0x8068,0x8073,
- 0x8072,0x8070,0x8076,0x8079,0x807D,0x807F,0x8084,0x8086,
- 0x8085,0x809B,0x8093,0x809A,0x80AD,0x5190,0x80AC,0x80DB,
- 0x80E5,0x80D9,0x80DD,0x80C4,0x80DA,0x80D6,0x8109,0x80EF,
- 0x80F1,0x811B,0x8129,0x8123,0x812F,0x814B,
-
- /* ku 71 */
- 0x968B,0x8146,0x813E,0x8153,0x8151,0x80FC,0x8171,0x816E,
- 0x8165,0x8166,0x8174,0x8183,0x8188,0x818A,0x8180,0x8182,
- 0x81A0,0x8195,0x81A4,0x81A3,0x815F,0x8193,0x81A9,0x81B0,
- 0x81B5,0x81BE,0x81B8,0x81BD,0x81C0,0x81C2,0x81BA,0x81C9,
- 0x81CD,0x81D1,0x81D9,0x81D8,0x81C8,0x81DA,0x81DF,0x81E0,
- 0x81E7,0x81FA,0x81FB,0x81FE,0x8201,0x8202,0x8205,0x8207,
- 0x820A,0x820D,0x8210,0x8216,0x8229,0x822B,0x8238,0x8233,
- 0x8240,0x8259,0x8258,0x825D,0x825A,0x825F,0x8264,0x8262,
- 0x8268,0x826A,0x826B,0x822E,0x8271,0x8277,0x8278,0x827E,
- 0x828D,0x8292,0x82AB,0x829F,0x82BB,0x82AC,0x82E1,0x82E3,
- 0x82DF,0x82D2,0x82F4,0x82F3,0x82FA,0x8393,0x8303,0x82FB,
- 0x82F9,0x82DE,0x8306,0x82DC,0x8309,0x82D9,
-
- /* ku 72 */
- 0x8335,0x8334,0x8316,0x8332,0x8331,0x8340,0x8339,0x8350,
- 0x8345,0x832F,0x832B,0x8317,0x8318,0x8385,0x839A,0x83AA,
- 0x839F,0x83A2,0x8396,0x8323,0x838E,0x8387,0x838A,0x837C,
- 0x83B5,0x8373,0x8375,0x83A0,0x8389,0x83A8,0x83F4,0x8413,
- 0x83EB,0x83CE,0x83FD,0x8403,0x83D8,0x840B,0x83C1,0x83F7,
- 0x8407,0x83E0,0x83F2,0x840D,0x8422,0x8420,0x83BD,0x8438,
- 0x8506,0x83FB,0x846D,0x842A,0x843C,0x855A,0x8484,0x8477,
- 0x846B,0x84AD,0x846E,0x8482,0x8469,0x8446,0x842C,0x846F,
- 0x8479,0x8435,0x84CA,0x8462,0x84B9,0x84BF,0x849F,0x84D9,
- 0x84CD,0x84BB,0x84DA,0x84D0,0x84C1,0x84C6,0x84D6,0x84A1,
- 0x8521,0x84FF,0x84F4,0x8517,0x8518,0x852C,0x851F,0x8515,
- 0x8514,0x84FC,0x8540,0x8563,0x8558,0x8548,
-
- /* ku 73 */
- 0x8541,0x8602,0x854B,0x8555,0x8580,0x85A4,0x8588,0x8591,
- 0x858A,0x85A8,0x856D,0x8594,0x859B,0x85EA,0x8587,0x859C,
- 0x8577,0x857E,0x8590,0x85C9,0x85BA,0x85CF,0x85B9,0x85D0,
- 0x85D5,0x85DD,0x85E5,0x85DC,0x85F9,0x860A,0x8613,0x860B,
- 0x85FE,0x85FA,0x8606,0x8622,0x861A,0x8630,0x863F,0x864D,
- 0x4E55,0x8654,0x865F,0x8667,0x8671,0x8693,0x86A3,0x86A9,
- 0x86AA,0x868B,0x868C,0x86B6,0x86AF,0x86C4,0x86C6,0x86B0,
- 0x86C9,0x8823,0x86AB,0x86D4,0x86DE,0x86E9,0x86EC,0x86DF,
- 0x86DB,0x86EF,0x8712,0x8706,0x8708,0x8700,0x8703,0x86FB,
- 0x8711,0x8709,0x870D,0x86F9,0x870A,0x8734,0x873F,0x8737,
- 0x873B,0x8725,0x8729,0x871A,0x8760,0x875F,0x8778,0x874C,
- 0x874E,0x8774,0x8757,0x8768,0x876E,0x8759,
-
- /* ku 74 */
- 0x8753,0x8763,0x876A,0x8805,0x87A2,0x879F,0x8782,0x87AF,
- 0x87CB,0x87BD,0x87C0,0x87D0,0x96D6,0x87AB,0x87C4,0x87B3,
- 0x87C7,0x87C6,0x87BB,0x87EF,0x87F2,0x87E0,0x880F,0x880D,
- 0x87FE,0x87F6,0x87F7,0x880E,0x87D2,0x8811,0x8816,0x8815,
- 0x8822,0x8821,0x8831,0x8836,0x8839,0x8827,0x883B,0x8844,
- 0x8842,0x8852,0x8859,0x885E,0x8862,0x886B,0x8881,0x887E,
- 0x889E,0x8875,0x887D,0x88B5,0x8872,0x8882,0x8897,0x8892,
- 0x88AE,0x8899,0x88A2,0x888D,0x88A4,0x88B0,0x88BF,0x88B1,
- 0x88C3,0x88C4,0x88D4,0x88D8,0x88D9,0x88DD,0x88F9,0x8902,
- 0x88FC,0x88F4,0x88E8,0x88F2,0x8904,0x890C,0x890A,0x8913,
- 0x8943,0x891E,0x8925,0x892A,0x892B,0x8941,0x8944,0x893B,
- 0x8936,0x8938,0x894C,0x891D,0x8960,0x895E,
-
- /* ku 75 */
- 0x8966,0x8964,0x896D,0x896A,0x896F,0x8974,0x8977,0x897E,
- 0x8983,0x8988,0x898A,0x8993,0x8998,0x89A1,0x89A9,0x89A6,
- 0x89AC,0x89AF,0x89B2,0x89BA,0x89BD,0x89BF,0x89C0,0x89DA,
- 0x89DC,0x89DD,0x89E7,0x89F4,0x89F8,0x8A03,0x8A16,0x8A10,
- 0x8A0C,0x8A1B,0x8A1D,0x8A25,0x8A36,0x8A41,0x8A5B,0x8A52,
- 0x8A46,0x8A48,0x8A7C,0x8A6D,0x8A6C,0x8A62,0x8A85,0x8A82,
- 0x8A84,0x8AA8,0x8AA1,0x8A91,0x8AA5,0x8AA6,0x8A9A,0x8AA3,
- 0x8AC4,0x8ACD,0x8AC2,0x8ADA,0x8AEB,0x8AF3,0x8AE7,0x8AE4,
- 0x8AF1,0x8B14,0x8AE0,0x8AE2,0x8AF7,0x8ADE,0x8ADB,0x8B0C,
- 0x8B07,0x8B1A,0x8AE1,0x8B16,0x8B10,0x8B17,0x8B20,0x8B33,
- 0x97AB,0x8B26,0x8B2B,0x8B3E,0x8B28,0x8B41,0x8B4C,0x8B4F,
- 0x8B4E,0x8B49,0x8B56,0x8B5B,0x8B5A,0x8B6B,
-
- /* ku 76 */
- 0x8B5F,0x8B6C,0x8B6F,0x8B74,0x8B7D,0x8B80,0x8B8C,0x8B8E,
- 0x8B92,0x8B93,0x8B96,0x8B99,0x8B9A,0x8C3A,0x8C41,0x8C3F,
- 0x8C48,0x8C4C,0x8C4E,0x8C50,0x8C55,0x8C62,0x8C6C,0x8C78,
- 0x8C7A,0x8C82,0x8C89,0x8C85,0x8C8A,0x8C8D,0x8C8E,0x8C94,
- 0x8C7C,0x8C98,0x621D,0x8CAD,0x8CAA,0x8CBD,0x8CB2,0x8CB3,
- 0x8CAE,0x8CB6,0x8CC8,0x8CC1,0x8CE4,0x8CE3,0x8CDA,0x8CFD,
- 0x8CFA,0x8CFB,0x8D04,0x8D05,0x8D0A,0x8D07,0x8D0F,0x8D0D,
- 0x8D10,0x9F4E,0x8D13,0x8CCD,0x8D14,0x8D16,0x8D67,0x8D6D,
- 0x8D71,0x8D73,0x8D81,0x8D99,0x8DC2,0x8DBE,0x8DBA,0x8DCF,
- 0x8DDA,0x8DD6,0x8DCC,0x8DDB,0x8DCB,0x8DEA,0x8DEB,0x8DDF,
- 0x8DE3,0x8DFC,0x8E08,0x8E09,0x8DFF,0x8E1D,0x8E1E,0x8E10,
- 0x8E1F,0x8E42,0x8E35,0x8E30,0x8E34,0x8E4A,
-
- /* ku 77 */
- 0x8E47,0x8E49,0x8E4C,0x8E50,0x8E48,0x8E59,0x8E64,0x8E60,
- 0x8E2A,0x8E63,0x8E55,0x8E76,0x8E72,0x8E7C,0x8E81,0x8E87,
- 0x8E85,0x8E84,0x8E8B,0x8E8A,0x8E93,0x8E91,0x8E94,0x8E99,
- 0x8EAA,0x8EA1,0x8EAC,0x8EB0,0x8EC6,0x8EB1,0x8EBE,0x8EC5,
- 0x8EC8,0x8ECB,0x8EDB,0x8EE3,0x8EFC,0x8EFB,0x8EEB,0x8EFE,
- 0x8F0A,0x8F05,0x8F15,0x8F12,0x8F19,0x8F13,0x8F1C,0x8F1F,
- 0x8F1B,0x8F0C,0x8F26,0x8F33,0x8F3B,0x8F39,0x8F45,0x8F42,
- 0x8F3E,0x8F4C,0x8F49,0x8F46,0x8F4E,0x8F57,0x8F5C,0x8F62,
- 0x8F63,0x8F64,0x8F9C,0x8F9F,0x8FA3,0x8FAD,0x8FAF,0x8FB7,
- 0x8FDA,0x8FE5,0x8FE2,0x8FEA,0x8FEF,0x9087,0x8FF4,0x9005,
- 0x8FF9,0x8FFA,0x9011,0x9015,0x9021,0x900D,0x901E,0x9016,
- 0x900B,0x9027,0x9036,0x9035,0x9039,0x8FF8,
-
- /* ku 78 */
- 0x904F,0x9050,0x9051,0x9052,0x900E,0x9049,0x903E,0x9056,
- 0x9058,0x905E,0x9068,0x906F,0x9076,0x96A8,0x9072,0x9082,
- 0x907D,0x9081,0x9080,0x908A,0x9089,0x908F,0x90A8,0x90AF,
- 0x90B1,0x90B5,0x90E2,0x90E4,0x6248,0x90DB,0x9102,0x9112,
- 0x9119,0x9132,0x9130,0x914A,0x9156,0x9158,0x9163,0x9165,
- 0x9169,0x9173,0x9172,0x918B,0x9189,0x9182,0x91A2,0x91AB,
- 0x91AF,0x91AA,0x91B5,0x91B4,0x91BA,0x91C0,0x91C1,0x91C9,
- 0x91CB,0x91D0,0x91D6,0x91DF,0x91E1,0x91DB,0x91FC,0x91F5,
- 0x91F6,0x921E,0x91FF,0x9214,0x922C,0x9215,0x9211,0x925E,
- 0x9257,0x9245,0x9249,0x9264,0x9248,0x9295,0x923F,0x924B,
- 0x9250,0x929C,0x9296,0x9293,0x929B,0x925A,0x92CF,0x92B9,
- 0x92B7,0x92E9,0x930F,0x92FA,0x9344,0x932E,
-
- /* ku 79 */
- 0x9319,0x9322,0x931A,0x9323,0x933A,0x9335,0x933B,0x935C,
- 0x9360,0x937C,0x936E,0x9356,0x93B0,0x93AC,0x93AD,0x9394,
- 0x93B9,0x93D6,0x93D7,0x93E8,0x93E5,0x93D8,0x93C3,0x93DD,
- 0x93D0,0x93C8,0x93E4,0x941A,0x9414,0x9413,0x9403,0x9407,
- 0x9410,0x9436,0x942B,0x9435,0x9421,0x943A,0x9441,0x9452,
- 0x9444,0x945B,0x9460,0x9462,0x945E,0x946A,0x9229,0x9470,
- 0x9475,0x9477,0x947D,0x945A,0x947C,0x947E,0x9481,0x947F,
- 0x9582,0x9587,0x958A,0x9594,0x9596,0x9598,0x9599,0x95A0,
- 0x95A8,0x95A7,0x95AD,0x95BC,0x95BB,0x95B9,0x95BE,0x95CA,
- 0x6FF6,0x95C3,0x95CD,0x95CC,0x95D5,0x95D4,0x95D6,0x95DC,
- 0x95E1,0x95E5,0x95E2,0x9621,0x9628,0x962E,0x962F,0x9642,
- 0x964C,0x964F,0x964B,0x9677,0x965C,0x965E,
-
- /* ku 80 */
- 0x965D,0x965F,0x9666,0x9672,0x966C,0x968D,0x9698,0x9695,
- 0x9697,0x96AA,0x96A7,0x96B1,0x96B2,0x96B0,0x96B4,0x96B6,
- 0x96B8,0x96B9,0x96CE,0x96CB,0x96C9,0x96CD,0x894D,0x96DC,
- 0x970D,0x96D5,0x96F9,0x9704,0x9706,0x9708,0x9713,0x970E,
- 0x9711,0x970F,0x9716,0x9719,0x9724,0x972A,0x9730,0x9739,
- 0x973D,0x973E,0x9744,0x9746,0x9748,0x9742,0x9749,0x975C,
- 0x9760,0x9764,0x9766,0x9768,0x52D2,0x976B,0x9771,0x9779,
- 0x9785,0x977C,0x9781,0x977A,0x9786,0x978B,0x978F,0x9790,
- 0x979C,0x97A8,0x97A6,0x97A3,0x97B3,0x97B4,0x97C3,0x97C6,
- 0x97C8,0x97CB,0x97DC,0x97ED,0x9F4F,0x97F2,0x7ADF,0x97F6,
- 0x97F5,0x980F,0x980C,0x9838,0x9824,0x9821,0x9837,0x983D,
- 0x9846,0x984F,0x984B,0x986B,0x986F,0x9870,
-
- /* ku 81 */
- 0x9871,0x9874,0x9873,0x98AA,0x98AF,0x98B1,0x98B6,0x98C4,
- 0x98C3,0x98C6,0x98E9,0x98EB,0x9903,0x9909,0x9912,0x9914,
- 0x9918,0x9921,0x991D,0x991E,0x9924,0x9920,0x992C,0x992E,
- 0x993D,0x993E,0x9942,0x9949,0x9945,0x9950,0x994B,0x9951,
- 0x9952,0x994C,0x9955,0x9997,0x9998,0x99A5,0x99AD,0x99AE,
- 0x99BC,0x99DF,0x99DB,0x99DD,0x99D8,0x99D1,0x99ED,0x99EE,
- 0x99F1,0x99F2,0x99FB,0x99F8,0x9A01,0x9A0F,0x9A05,0x99E2,
- 0x9A19,0x9A2B,0x9A37,0x9A45,0x9A42,0x9A40,0x9A43,0x9A3E,
- 0x9A55,0x9A4D,0x9A5B,0x9A57,0x9A5F,0x9A62,0x9A65,0x9A64,
- 0x9A69,0x9A6B,0x9A6A,0x9AAD,0x9AB0,0x9ABC,0x9AC0,0x9ACF,
- 0x9AD1,0x9AD3,0x9AD4,0x9ADE,0x9ADF,0x9AE2,0x9AE3,0x9AE6,
- 0x9AEF,0x9AEB,0x9AEE,0x9AF4,0x9AF1,0x9AF7,
-
- /* ku 82 */
- 0x9AFB,0x9B06,0x9B18,0x9B1A,0x9B1F,0x9B22,0x9B23,0x9B25,
- 0x9B27,0x9B28,0x9B29,0x9B2A,0x9B2E,0x9B2F,0x9B32,0x9B44,
- 0x9B43,0x9B4F,0x9B4D,0x9B4E,0x9B51,0x9B58,0x9B74,0x9B93,
- 0x9B83,0x9B91,0x9B96,0x9B97,0x9B9F,0x9BA0,0x9BA8,0x9BB4,
- 0x9BC0,0x9BCA,0x9BB9,0x9BC6,0x9BCF,0x9BD1,0x9BD2,0x9BE3,
- 0x9BE2,0x9BE4,0x9BD4,0x9BE1,0x9C3A,0x9BF2,0x9BF1,0x9BF0,
- 0x9C15,0x9C14,0x9C09,0x9C13,0x9C0C,0x9C06,0x9C08,0x9C12,
- 0x9C0A,0x9C04,0x9C2E,0x9C1B,0x9C25,0x9C24,0x9C21,0x9C30,
- 0x9C47,0x9C32,0x9C46,0x9C3E,0x9C5A,0x9C60,0x9C67,0x9C76,
- 0x9C78,0x9CE7,0x9CEC,0x9CF0,0x9D09,0x9D08,0x9CEB,0x9D03,
- 0x9D06,0x9D2A,0x9D26,0x9DAF,0x9D23,0x9D1F,0x9D44,0x9D15,
- 0x9D12,0x9D41,0x9D3F,0x9D3E,0x9D46,0x9D48,
-
- /* ku 83 */
- 0x9D5D,0x9D5E,0x9D64,0x9D51,0x9D50,0x9D59,0x9D72,0x9D89,
- 0x9D87,0x9DAB,0x9D6F,0x9D7A,0x9D9A,0x9DA4,0x9DA9,0x9DB2,
- 0x9DC4,0x9DC1,0x9DBB,0x9DB8,0x9DBA,0x9DC6,0x9DCF,0x9DC2,
- 0x9DD9,0x9DD3,0x9DF8,0x9DE6,0x9DED,0x9DEF,0x9DFD,0x9E1A,
- 0x9E1B,0x9E1E,0x9E75,0x9E79,0x9E7D,0x9E81,0x9E88,0x9E8B,
- 0x9E8C,0x9E92,0x9E95,0x9E91,0x9E9D,0x9EA5,0x9EA9,0x9EB8,
- 0x9EAA,0x9EAD,0x9761,0x9ECC,0x9ECE,0x9ECF,0x9ED0,0x9ED4,
- 0x9EDC,0x9EDE,0x9EDD,0x9EE0,0x9EE5,0x9EE8,0x9EEF,0x9EF4,
- 0x9EF6,0x9EF7,0x9EF9,0x9EFB,0x9EFC,0x9EFD,0x9F07,0x9F08,
- 0x76B7,0x9F15,0x9F21,0x9F2C,0x9F3E,0x9F4A,0x9F52,0x9F54,
- 0x9F63,0x9F5F,0x9F60,0x9F61,0x9F66,0x9F67,0x9F6C,0x9F6A,
- 0x9F77,0x9F72,0x9F76,0x9F95,0x9F9C,0x9FA0,
-
- /* ku 84 */
- 0x582F,0x69C7,0x9059,0x7464,0x51DC,0x7199
-};
-
-static const int jisx0208_ucs_table_size = (sizeof (jisx0208_ucs_table) / sizeof (unsigned short));
-
-static const unsigned short jisx0212_ucs_table[] = {
- /* ku 1 */
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-
- /* ku 2 */
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x02D8,0x02C7,
- 0x00B8,0x02D9,0x02DD,0x00AF,0x02DB,0x02DA,0x007E,0x0384,
- 0x0385,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x00A1,0x00A6,0x00BF,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x00BA,0x00AA,0x00A9,0x00AE,0x2122,0x00A4,
- 0x2116,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-
- /* ku 3 */
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-
- /* ku 4 */
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-
- /* ku 5 */
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-
- /* ku 6 */
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0386,0x0388,0x0389,0x038A,0x03AA,0x0000,0x038C,0x0000,
- 0x038E,0x03AB,0x0000,0x038F,0x0000,0x0000,0x0000,0x0000,
- 0x03AC,0x03AD,0x03AE,0x03AF,0x03CA,0x0390,0x03CC,0x03C2,
- 0x03CD,0x03CB,0x03B0,0x03CE,0x0000,0x0000,
-
- /* ku 7 */
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0402,0x0403,0x0404,0x0405,0x0406,0x0407,0x0408,
- 0x0409,0x040A,0x040B,0x040C,0x040E,0x040F,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0452,0x0453,0x0454,0x0455,0x0456,0x0457,0x0458,
- 0x0459,0x045A,0x045B,0x045C,0x045E,0x045F,
-
- /* ku 8 */
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-
- /* ku 9 */
- 0x00C6,0x0110,0x0000,0x0126,0x0000,0x0132,0x0000,0x0141,
- 0x013F,0x0000,0x014A,0x00D8,0x0152,0x0000,0x0166,0x00DE,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x00E6,0x0111,0x00F0,0x0127,0x0131,0x0133,0x0138,0x0142,
- 0x0140,0x0149,0x014B,0x00F8,0x0153,0x00DF,0x0167,0x00FE,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-
- /* ku 10 */
- 0x00C1,0x00C0,0x00C4,0x00C2,0x0102,0x01CD,0x0100,0x0104,
- 0x00C5,0x00C3,0x0106,0x0108,0x010C,0x00C7,0x010A,0x010E,
- 0x00C9,0x00C8,0x00CB,0x00CA,0x011A,0x0116,0x0112,0x0118,
- 0x0000,0x011C,0x011E,0x0122,0x0120,0x0124,0x00CD,0x00CC,
- 0x00CF,0x00CE,0x01CF,0x0130,0x012A,0x012E,0x0128,0x0134,
- 0x0136,0x0139,0x013D,0x013B,0x0143,0x0147,0x0145,0x00D1,
- 0x00D3,0x00D2,0x00D6,0x00D4,0x01D1,0x0150,0x014C,0x00D5,
- 0x0154,0x0158,0x0156,0x015A,0x015C,0x0160,0x015E,0x0164,
- 0x0162,0x00DA,0x00D9,0x00DC,0x00DB,0x016C,0x01D3,0x0170,
- 0x016A,0x0172,0x016E,0x0168,0x01D7,0x01DB,0x01D9,0x01D5,
- 0x0174,0x00DD,0x0178,0x0176,0x0179,0x017D,0x017B,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-
- /* ku 11 */
- 0x00E1,0x00E0,0x00E4,0x00E2,0x0103,0x01CE,0x0101,0x0105,
- 0x00E5,0x00E3,0x0107,0x0109,0x010D,0x00E7,0x010B,0x010F,
- 0x00E9,0x00E8,0x00EB,0x00EA,0x011B,0x0117,0x0113,0x0119,
- 0x01F5,0x011D,0x011F,0x0000,0x0121,0x0125,0x00ED,0x00EC,
- 0x00EF,0x00EE,0x01D0,0x0000,0x012B,0x012F,0x0129,0x0135,
- 0x0137,0x013A,0x013E,0x013C,0x0144,0x0148,0x0146,0x00F1,
- 0x00F3,0x00F2,0x00F6,0x00F4,0x01D2,0x0151,0x014D,0x00F5,
- 0x0155,0x0159,0x0157,0x015B,0x015D,0x0161,0x015F,0x0165,
- 0x0163,0x00FA,0x00F9,0x00FC,0x00FB,0x016D,0x01D4,0x0171,
- 0x016B,0x0173,0x016F,0x0169,0x01D8,0x01DC,0x01DA,0x01D6,
- 0x0175,0x00FD,0x00FF,0x0177,0x017A,0x017E,0x017C,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-
- /* ku 12 */
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-
- /* ku 13 */
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-
- /* ku 14 */
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-
- /* ku 15 */
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-
- /* ku 16 */
- 0x4E02,0x4E04,0x4E05,0x4E0C,0x4E12,0x4E1F,0x4E23,0x4E24,
- 0x4E28,0x4E2B,0x4E2E,0x4E2F,0x4E30,0x4E35,0x4E40,0x4E41,
- 0x4E44,0x4E47,0x4E51,0x4E5A,0x4E5C,0x4E63,0x4E68,0x4E69,
- 0x4E74,0x4E75,0x4E79,0x4E7F,0x4E8D,0x4E96,0x4E97,0x4E9D,
- 0x4EAF,0x4EB9,0x4EC3,0x4ED0,0x4EDA,0x4EDB,0x4EE0,0x4EE1,
- 0x4EE2,0x4EE8,0x4EEF,0x4EF1,0x4EF3,0x4EF5,0x4EFD,0x4EFE,
- 0x4EFF,0x4F00,0x4F02,0x4F03,0x4F08,0x4F0B,0x4F0C,0x4F12,
- 0x4F15,0x4F16,0x4F17,0x4F19,0x4F2E,0x4F31,0x4F60,0x4F33,
- 0x4F35,0x4F37,0x4F39,0x4F3B,0x4F3E,0x4F40,0x4F42,0x4F48,
- 0x4F49,0x4F4B,0x4F4C,0x4F52,0x4F54,0x4F56,0x4F58,0x4F5F,
- 0x4F63,0x4F6A,0x4F6C,0x4F6E,0x4F71,0x4F77,0x4F78,0x4F79,
- 0x4F7A,0x4F7D,0x4F7E,0x4F81,0x4F82,0x4F84,
-
- /* ku 17 */
- 0x4F85,0x4F89,0x4F8A,0x4F8C,0x4F8E,0x4F90,0x4F92,0x4F93,
- 0x4F94,0x4F97,0x4F99,0x4F9A,0x4F9E,0x4F9F,0x4FB2,0x4FB7,
- 0x4FB9,0x4FBB,0x4FBC,0x4FBD,0x4FBE,0x4FC0,0x4FC1,0x4FC5,
- 0x4FC6,0x4FC8,0x4FC9,0x4FCB,0x4FCC,0x4FCD,0x4FCF,0x4FD2,
- 0x4FDC,0x4FE0,0x4FE2,0x4FF0,0x4FF2,0x4FFC,0x4FFD,0x4FFF,
- 0x5000,0x5001,0x5004,0x5007,0x500A,0x500C,0x500E,0x5010,
- 0x5013,0x5017,0x5018,0x501B,0x501C,0x501D,0x501E,0x5022,
- 0x5027,0x502E,0x5030,0x5032,0x5033,0x5035,0x5040,0x5041,
- 0x5042,0x5045,0x5046,0x504A,0x504C,0x504E,0x5051,0x5052,
- 0x5053,0x5057,0x5059,0x505F,0x5060,0x5062,0x5063,0x5066,
- 0x5067,0x506A,0x506D,0x5070,0x5071,0x503B,0x5081,0x5083,
- 0x5084,0x5086,0x508A,0x508E,0x508F,0x5090,
-
- /* ku 18 */
- 0x5092,0x5093,0x5094,0x5096,0x509B,0x509C,0x509E,0x509F,
- 0x50A0,0x50A1,0x50A2,0x50AA,0x50AF,0x50B0,0x50B9,0x50BA,
- 0x50BD,0x50C0,0x50C3,0x50C4,0x50C7,0x50CC,0x50CE,0x50D0,
- 0x50D3,0x50D4,0x50D8,0x50DC,0x50DD,0x50DF,0x50E2,0x50E4,
- 0x50E6,0x50E8,0x50E9,0x50EF,0x50F1,0x50F6,0x50FA,0x50FE,
- 0x5103,0x5106,0x5107,0x5108,0x510B,0x510C,0x510D,0x510E,
- 0x50F2,0x5110,0x5117,0x5119,0x511B,0x511C,0x511D,0x511E,
- 0x5123,0x5127,0x5128,0x512C,0x512D,0x512F,0x5131,0x5133,
- 0x5134,0x5135,0x5138,0x5139,0x5142,0x514A,0x514F,0x5153,
- 0x5155,0x5157,0x5158,0x515F,0x5164,0x5166,0x517E,0x5183,
- 0x5184,0x518B,0x518E,0x5198,0x519D,0x51A1,0x51A3,0x51AD,
- 0x51B8,0x51BA,0x51BC,0x51BE,0x51BF,0x51C2,
-
- /* ku 19 */
- 0x51C8,0x51CF,0x51D1,0x51D2,0x51D3,0x51D5,0x51D8,0x51DE,
- 0x51E2,0x51E5,0x51EE,0x51F2,0x51F3,0x51F4,0x51F7,0x5201,
- 0x5202,0x5205,0x5212,0x5213,0x5215,0x5216,0x5218,0x5222,
- 0x5228,0x5231,0x5232,0x5235,0x523C,0x5245,0x5249,0x5255,
- 0x5257,0x5258,0x525A,0x525C,0x525F,0x5260,0x5261,0x5266,
- 0x526E,0x5277,0x5278,0x5279,0x5280,0x5282,0x5285,0x528A,
- 0x528C,0x5293,0x5295,0x5296,0x5297,0x5298,0x529A,0x529C,
- 0x52A4,0x52A5,0x52A6,0x52A7,0x52AF,0x52B0,0x52B6,0x52B7,
- 0x52B8,0x52BA,0x52BB,0x52BD,0x52C0,0x52C4,0x52C6,0x52C8,
- 0x52CC,0x52CF,0x52D1,0x52D4,0x52D6,0x52DB,0x52DC,0x52E1,
- 0x52E5,0x52E8,0x52E9,0x52EA,0x52EC,0x52F0,0x52F1,0x52F4,
- 0x52F6,0x52F7,0x5300,0x5303,0x530A,0x530B,
-
- /* ku 20 */
- 0x530C,0x5311,0x5313,0x5318,0x531B,0x531C,0x531E,0x531F,
- 0x5325,0x5327,0x5328,0x5329,0x532B,0x532C,0x532D,0x5330,
- 0x5332,0x5335,0x533C,0x533D,0x533E,0x5342,0x534C,0x534B,
- 0x5359,0x535B,0x5361,0x5363,0x5365,0x536C,0x536D,0x5372,
- 0x5379,0x537E,0x5383,0x5387,0x5388,0x538E,0x5393,0x5394,
- 0x5399,0x539D,0x53A1,0x53A4,0x53AA,0x53AB,0x53AF,0x53B2,
- 0x53B4,0x53B5,0x53B7,0x53B8,0x53BA,0x53BD,0x53C0,0x53C5,
- 0x53CF,0x53D2,0x53D3,0x53D5,0x53DA,0x53DD,0x53DE,0x53E0,
- 0x53E6,0x53E7,0x53F5,0x5402,0x5413,0x541A,0x5421,0x5427,
- 0x5428,0x542A,0x542F,0x5431,0x5434,0x5435,0x5443,0x5444,
- 0x5447,0x544D,0x544F,0x545E,0x5462,0x5464,0x5466,0x5467,
- 0x5469,0x546B,0x546D,0x546E,0x5474,0x547F,
-
- /* ku 21 */
- 0x5481,0x5483,0x5485,0x5488,0x5489,0x548D,0x5491,0x5495,
- 0x5496,0x549C,0x549F,0x54A1,0x54A6,0x54A7,0x54A9,0x54AA,
- 0x54AD,0x54AE,0x54B1,0x54B7,0x54B9,0x54BA,0x54BB,0x54BF,
- 0x54C6,0x54CA,0x54CD,0x54CE,0x54E0,0x54EA,0x54EC,0x54EF,
- 0x54F6,0x54FC,0x54FE,0x54FF,0x5500,0x5501,0x5505,0x5508,
- 0x5509,0x550C,0x550D,0x550E,0x5515,0x552A,0x552B,0x5532,
- 0x5535,0x5536,0x553B,0x553C,0x553D,0x5541,0x5547,0x5549,
- 0x554A,0x554D,0x5550,0x5551,0x5558,0x555A,0x555B,0x555E,
- 0x5560,0x5561,0x5564,0x5566,0x557F,0x5581,0x5582,0x5586,
- 0x5588,0x558E,0x558F,0x5591,0x5592,0x5593,0x5594,0x5597,
- 0x55A3,0x55A4,0x55AD,0x55B2,0x55BF,0x55C1,0x55C3,0x55C6,
- 0x55C9,0x55CB,0x55CC,0x55CE,0x55D1,0x55D2,
-
- /* ku 22 */
- 0x55D3,0x55D7,0x55D8,0x55DB,0x55DE,0x55E2,0x55E9,0x55F6,
- 0x55FF,0x5605,0x5608,0x560A,0x560D,0x560E,0x560F,0x5610,
- 0x5611,0x5612,0x5619,0x562C,0x5630,0x5633,0x5635,0x5637,
- 0x5639,0x563B,0x563C,0x563D,0x563F,0x5640,0x5641,0x5643,
- 0x5644,0x5646,0x5649,0x564B,0x564D,0x564F,0x5654,0x565E,
- 0x5660,0x5661,0x5662,0x5663,0x5666,0x5669,0x566D,0x566F,
- 0x5671,0x5672,0x5675,0x5684,0x5685,0x5688,0x568B,0x568C,
- 0x5695,0x5699,0x569A,0x569D,0x569E,0x569F,0x56A6,0x56A7,
- 0x56A8,0x56A9,0x56AB,0x56AC,0x56AD,0x56B1,0x56B3,0x56B7,
- 0x56BE,0x56C5,0x56C9,0x56CA,0x56CB,0x56CF,0x56D0,0x56CC,
- 0x56CD,0x56D9,0x56DC,0x56DD,0x56DF,0x56E1,0x56E4,0x56E5,
- 0x56E6,0x56E7,0x56E8,0x56F1,0x56EB,0x56ED,
-
- /* ku 23 */
- 0x56F6,0x56F7,0x5701,0x5702,0x5707,0x570A,0x570C,0x5711,
- 0x5715,0x571A,0x571B,0x571D,0x5720,0x5722,0x5723,0x5724,
- 0x5725,0x5729,0x572A,0x572C,0x572E,0x572F,0x5733,0x5734,
- 0x573D,0x573E,0x573F,0x5745,0x5746,0x574C,0x574D,0x5752,
- 0x5762,0x5765,0x5767,0x5768,0x576B,0x576D,0x576E,0x576F,
- 0x5770,0x5771,0x5773,0x5774,0x5775,0x5777,0x5779,0x577A,
- 0x577B,0x577C,0x577E,0x5781,0x5783,0x578C,0x5794,0x5797,
- 0x5799,0x579A,0x579C,0x579D,0x579E,0x579F,0x57A1,0x5795,
- 0x57A7,0x57A8,0x57A9,0x57AC,0x57B8,0x57BD,0x57C7,0x57C8,
- 0x57CC,0x57CF,0x57D5,0x57DD,0x57DE,0x57E4,0x57E6,0x57E7,
- 0x57E9,0x57ED,0x57F0,0x57F5,0x57F6,0x57F8,0x57FD,0x57FE,
- 0x57FF,0x5803,0x5804,0x5808,0x5809,0x57E1,
-
- /* ku 24 */
- 0x580C,0x580D,0x581B,0x581E,0x581F,0x5820,0x5826,0x5827,
- 0x582D,0x5832,0x5839,0x583F,0x5849,0x584C,0x584D,0x584F,
- 0x5850,0x5855,0x585F,0x5861,0x5864,0x5867,0x5868,0x5878,
- 0x587C,0x587F,0x5880,0x5881,0x5887,0x5888,0x5889,0x588A,
- 0x588C,0x588D,0x588F,0x5890,0x5894,0x5896,0x589D,0x58A0,
- 0x58A1,0x58A2,0x58A6,0x58A9,0x58B1,0x58B2,0x58C4,0x58BC,
- 0x58C2,0x58C8,0x58CD,0x58CE,0x58D0,0x58D2,0x58D4,0x58D6,
- 0x58DA,0x58DD,0x58E1,0x58E2,0x58E9,0x58F3,0x5905,0x5906,
- 0x590B,0x590C,0x5912,0x5913,0x5914,0x8641,0x591D,0x5921,
- 0x5923,0x5924,0x5928,0x592F,0x5930,0x5933,0x5935,0x5936,
- 0x593F,0x5943,0x5946,0x5952,0x5953,0x5959,0x595B,0x595D,
- 0x595E,0x595F,0x5961,0x5963,0x596B,0x596D,
-
- /* ku 25 */
- 0x596F,0x5972,0x5975,0x5976,0x5979,0x597B,0x597C,0x598B,
- 0x598C,0x598E,0x5992,0x5995,0x5997,0x599F,0x59A4,0x59A7,
- 0x59AD,0x59AE,0x59AF,0x59B0,0x59B3,0x59B7,0x59BA,0x59BC,
- 0x59C1,0x59C3,0x59C4,0x59C8,0x59CA,0x59CD,0x59D2,0x59DD,
- 0x59DE,0x59DF,0x59E3,0x59E4,0x59E7,0x59EE,0x59EF,0x59F1,
- 0x59F2,0x59F4,0x59F7,0x5A00,0x5A04,0x5A0C,0x5A0D,0x5A0E,
- 0x5A12,0x5A13,0x5A1E,0x5A23,0x5A24,0x5A27,0x5A28,0x5A2A,
- 0x5A2D,0x5A30,0x5A44,0x5A45,0x5A47,0x5A48,0x5A4C,0x5A50,
- 0x5A55,0x5A5E,0x5A63,0x5A65,0x5A67,0x5A6D,0x5A77,0x5A7A,
- 0x5A7B,0x5A7E,0x5A8B,0x5A90,0x5A93,0x5A96,0x5A99,0x5A9C,
- 0x5A9E,0x5A9F,0x5AA0,0x5AA2,0x5AA7,0x5AAC,0x5AB1,0x5AB2,
- 0x5AB3,0x5AB5,0x5AB8,0x5ABA,0x5ABB,0x5ABF,
-
- /* ku 26 */
- 0x5AC4,0x5AC6,0x5AC8,0x5ACF,0x5ADA,0x5ADC,0x5AE0,0x5AE5,
- 0x5AEA,0x5AEE,0x5AF5,0x5AF6,0x5AFD,0x5B00,0x5B01,0x5B08,
- 0x5B17,0x5B34,0x5B19,0x5B1B,0x5B1D,0x5B21,0x5B25,0x5B2D,
- 0x5B38,0x5B41,0x5B4B,0x5B4C,0x5B52,0x5B56,0x5B5E,0x5B68,
- 0x5B6E,0x5B6F,0x5B7C,0x5B7D,0x5B7E,0x5B7F,0x5B81,0x5B84,
- 0x5B86,0x5B8A,0x5B8E,0x5B90,0x5B91,0x5B93,0x5B94,0x5B96,
- 0x5BA8,0x5BA9,0x5BAC,0x5BAD,0x5BAF,0x5BB1,0x5BB2,0x5BB7,
- 0x5BBA,0x5BBC,0x5BC0,0x5BC1,0x5BCD,0x5BCF,0x5BD6,0x5BD7,
- 0x5BD8,0x5BD9,0x5BDA,0x5BE0,0x5BEF,0x5BF1,0x5BF4,0x5BFD,
- 0x5C0C,0x5C17,0x5C1E,0x5C1F,0x5C23,0x5C26,0x5C29,0x5C2B,
- 0x5C2C,0x5C2E,0x5C30,0x5C32,0x5C35,0x5C36,0x5C59,0x5C5A,
- 0x5C5C,0x5C62,0x5C63,0x5C67,0x5C68,0x5C69,
-
- /* ku 27 */
- 0x5C6D,0x5C70,0x5C74,0x5C75,0x5C7A,0x5C7B,0x5C7C,0x5C7D,
- 0x5C87,0x5C88,0x5C8A,0x5C8F,0x5C92,0x5C9D,0x5C9F,0x5CA0,
- 0x5CA2,0x5CA3,0x5CA6,0x5CAA,0x5CB2,0x5CB4,0x5CB5,0x5CBA,
- 0x5CC9,0x5CCB,0x5CD2,0x5CDD,0x5CD7,0x5CEE,0x5CF1,0x5CF2,
- 0x5CF4,0x5D01,0x5D06,0x5D0D,0x5D12,0x5D2B,0x5D23,0x5D24,
- 0x5D26,0x5D27,0x5D31,0x5D34,0x5D39,0x5D3D,0x5D3F,0x5D42,
- 0x5D43,0x5D46,0x5D48,0x5D55,0x5D51,0x5D59,0x5D4A,0x5D5F,
- 0x5D60,0x5D61,0x5D62,0x5D64,0x5D6A,0x5D6D,0x5D70,0x5D79,
- 0x5D7A,0x5D7E,0x5D7F,0x5D81,0x5D83,0x5D88,0x5D8A,0x5D92,
- 0x5D93,0x5D94,0x5D95,0x5D99,0x5D9B,0x5D9F,0x5DA0,0x5DA7,
- 0x5DAB,0x5DB0,0x5DB4,0x5DB8,0x5DB9,0x5DC3,0x5DC7,0x5DCB,
- 0x5DD0,0x5DCE,0x5DD8,0x5DD9,0x5DE0,0x5DE4,
-
- /* ku 28 */
- 0x5DE9,0x5DF8,0x5DF9,0x5E00,0x5E07,0x5E0D,0x5E12,0x5E14,
- 0x5E15,0x5E18,0x5E1F,0x5E20,0x5E2E,0x5E28,0x5E32,0x5E35,
- 0x5E3E,0x5E4B,0x5E50,0x5E49,0x5E51,0x5E56,0x5E58,0x5E5B,
- 0x5E5C,0x5E5E,0x5E68,0x5E6A,0x5E6B,0x5E6C,0x5E6D,0x5E6E,
- 0x5E70,0x5E80,0x5E8B,0x5E8E,0x5EA2,0x5EA4,0x5EA5,0x5EA8,
- 0x5EAA,0x5EAC,0x5EB1,0x5EB3,0x5EBD,0x5EBE,0x5EBF,0x5EC6,
- 0x5ECC,0x5ECB,0x5ECE,0x5ED1,0x5ED2,0x5ED4,0x5ED5,0x5EDC,
- 0x5EDE,0x5EE5,0x5EEB,0x5F02,0x5F06,0x5F07,0x5F08,0x5F0E,
- 0x5F19,0x5F1C,0x5F1D,0x5F21,0x5F22,0x5F23,0x5F24,0x5F28,
- 0x5F2B,0x5F2C,0x5F2E,0x5F30,0x5F34,0x5F36,0x5F3B,0x5F3D,
- 0x5F3F,0x5F40,0x5F44,0x5F45,0x5F47,0x5F4D,0x5F50,0x5F54,
- 0x5F58,0x5F5B,0x5F60,0x5F63,0x5F64,0x5F67,
-
- /* ku 29 */
- 0x5F6F,0x5F72,0x5F74,0x5F75,0x5F78,0x5F7A,0x5F7D,0x5F7E,
- 0x5F89,0x5F8D,0x5F8F,0x5F96,0x5F9C,0x5F9D,0x5FA2,0x5FA7,
- 0x5FAB,0x5FA4,0x5FAC,0x5FAF,0x5FB0,0x5FB1,0x5FB8,0x5FC4,
- 0x5FC7,0x5FC8,0x5FC9,0x5FCB,0x5FD0,0x5FD1,0x5FD2,0x5FD3,
- 0x5FD4,0x5FDE,0x5FE1,0x5FE2,0x5FE8,0x5FE9,0x5FEA,0x5FEC,
- 0x5FED,0x5FEE,0x5FEF,0x5FF2,0x5FF3,0x5FF6,0x5FFA,0x5FFC,
- 0x6007,0x600A,0x600D,0x6013,0x6014,0x6017,0x6018,0x601A,
- 0x601F,0x6024,0x602D,0x6033,0x6035,0x6040,0x6047,0x6048,
- 0x6049,0x604C,0x6051,0x6054,0x6056,0x6057,0x605D,0x6061,
- 0x6067,0x6071,0x607E,0x607F,0x6082,0x6086,0x6088,0x608A,
- 0x608E,0x6091,0x6093,0x6095,0x6098,0x609D,0x609E,0x60A2,
- 0x60A4,0x60A5,0x60A8,0x60B0,0x60B1,0x60B7,
-
- /* ku 30 */
- 0x60BB,0x60BE,0x60C2,0x60C4,0x60C8,0x60C9,0x60CA,0x60CB,
- 0x60CE,0x60CF,0x60D4,0x60D5,0x60D9,0x60DB,0x60DD,0x60DE,
- 0x60E2,0x60E5,0x60F2,0x60F5,0x60F8,0x60FC,0x60FD,0x6102,
- 0x6107,0x610A,0x610C,0x6110,0x6111,0x6112,0x6113,0x6114,
- 0x6116,0x6117,0x6119,0x611C,0x611E,0x6122,0x612A,0x612B,
- 0x6130,0x6131,0x6135,0x6136,0x6137,0x6139,0x6141,0x6145,
- 0x6146,0x6149,0x615E,0x6160,0x616C,0x6172,0x6178,0x617B,
- 0x617C,0x617F,0x6180,0x6181,0x6183,0x6184,0x618B,0x618D,
- 0x6192,0x6193,0x6197,0x6198,0x619C,0x619D,0x619F,0x61A0,
- 0x61A5,0x61A8,0x61AA,0x61AD,0x61B8,0x61B9,0x61BC,0x61C0,
- 0x61C1,0x61C2,0x61CE,0x61CF,0x61D5,0x61DC,0x61DD,0x61DE,
- 0x61DF,0x61E1,0x61E2,0x61E7,0x61E9,0x61E5,
-
- /* ku 31 */
- 0x61EC,0x61ED,0x61EF,0x6201,0x6203,0x6204,0x6207,0x6213,
- 0x6215,0x621C,0x6220,0x6222,0x6223,0x6227,0x6229,0x622B,
- 0x6239,0x623D,0x6242,0x6243,0x6244,0x6246,0x624C,0x6250,
- 0x6251,0x6252,0x6254,0x6256,0x625A,0x625C,0x6264,0x626D,
- 0x626F,0x6273,0x627A,0x627D,0x628D,0x628E,0x628F,0x6290,
- 0x62A6,0x62A8,0x62B3,0x62B6,0x62B7,0x62BA,0x62BE,0x62BF,
- 0x62C4,0x62CE,0x62D5,0x62D6,0x62DA,0x62EA,0x62F2,0x62F4,
- 0x62FC,0x62FD,0x6303,0x6304,0x630A,0x630B,0x630D,0x6310,
- 0x6313,0x6316,0x6318,0x6329,0x632A,0x632D,0x6335,0x6336,
- 0x6339,0x633C,0x6341,0x6342,0x6343,0x6344,0x6346,0x634A,
- 0x634B,0x634E,0x6352,0x6353,0x6354,0x6358,0x635B,0x6365,
- 0x6366,0x636C,0x636D,0x6371,0x6374,0x6375,
-
- /* ku 32 */
- 0x6378,0x637C,0x637D,0x637F,0x6382,0x6384,0x6387,0x638A,
- 0x6390,0x6394,0x6395,0x6399,0x639A,0x639E,0x63A4,0x63A6,
- 0x63AD,0x63AE,0x63AF,0x63BD,0x63C1,0x63C5,0x63C8,0x63CE,
- 0x63D1,0x63D3,0x63D4,0x63D5,0x63DC,0x63E0,0x63E5,0x63EA,
- 0x63EC,0x63F2,0x63F3,0x63F5,0x63F8,0x63F9,0x6409,0x640A,
- 0x6410,0x6412,0x6414,0x6418,0x641E,0x6420,0x6422,0x6424,
- 0x6425,0x6429,0x642A,0x642F,0x6430,0x6435,0x643D,0x643F,
- 0x644B,0x644F,0x6451,0x6452,0x6453,0x6454,0x645A,0x645B,
- 0x645C,0x645D,0x645F,0x6460,0x6461,0x6463,0x646D,0x6473,
- 0x6474,0x647B,0x647D,0x6485,0x6487,0x648F,0x6490,0x6491,
- 0x6498,0x6499,0x649B,0x649D,0x649F,0x64A1,0x64A3,0x64A6,
- 0x64A8,0x64AC,0x64B3,0x64BD,0x64BE,0x64BF,
-
- /* ku 33 */
- 0x64C4,0x64C9,0x64CA,0x64CB,0x64CC,0x64CE,0x64D0,0x64D1,
- 0x64D5,0x64D7,0x64E4,0x64E5,0x64E9,0x64EA,0x64ED,0x64F0,
- 0x64F5,0x64F7,0x64FB,0x64FF,0x6501,0x6504,0x6508,0x6509,
- 0x650A,0x650F,0x6513,0x6514,0x6516,0x6519,0x651B,0x651E,
- 0x651F,0x6522,0x6526,0x6529,0x652E,0x6531,0x653A,0x653C,
- 0x653D,0x6543,0x6547,0x6549,0x6550,0x6552,0x6554,0x655F,
- 0x6560,0x6567,0x656B,0x657A,0x657D,0x6581,0x6585,0x658A,
- 0x6592,0x6595,0x6598,0x659D,0x65A0,0x65A3,0x65A6,0x65AE,
- 0x65B2,0x65B3,0x65B4,0x65BF,0x65C2,0x65C8,0x65C9,0x65CE,
- 0x65D0,0x65D4,0x65D6,0x65D8,0x65DF,0x65F0,0x65F2,0x65F4,
- 0x65F5,0x65F9,0x65FE,0x65FF,0x6600,0x6604,0x6608,0x6609,
- 0x660D,0x6611,0x6612,0x6615,0x6616,0x661D,
-
- /* ku 34 */
- 0x661E,0x6621,0x6622,0x6623,0x6624,0x6626,0x6629,0x662A,
- 0x662B,0x662C,0x662E,0x6630,0x6631,0x6633,0x6639,0x6637,
- 0x6640,0x6645,0x6646,0x664A,0x664C,0x6651,0x664E,0x6657,
- 0x6658,0x6659,0x665B,0x665C,0x6660,0x6661,0x66FB,0x666A,
- 0x666B,0x666C,0x667E,0x6673,0x6675,0x667F,0x6677,0x6678,
- 0x6679,0x667B,0x6680,0x667C,0x668B,0x668C,0x668D,0x6690,
- 0x6692,0x6699,0x669A,0x669B,0x669C,0x669F,0x66A0,0x66A4,
- 0x66AD,0x66B1,0x66B2,0x66B5,0x66BB,0x66BF,0x66C0,0x66C2,
- 0x66C3,0x66C8,0x66CC,0x66CE,0x66CF,0x66D4,0x66DB,0x66DF,
- 0x66E8,0x66EB,0x66EC,0x66EE,0x66FA,0x6705,0x6707,0x670E,
- 0x6713,0x6719,0x671C,0x6720,0x6722,0x6733,0x673E,0x6745,
- 0x6747,0x6748,0x674C,0x6754,0x6755,0x675D,
-
- /* ku 35 */
- 0x6766,0x676C,0x676E,0x6774,0x6776,0x677B,0x6781,0x6784,
- 0x678E,0x678F,0x6791,0x6793,0x6796,0x6798,0x6799,0x679B,
- 0x67B0,0x67B1,0x67B2,0x67B5,0x67BB,0x67BC,0x67BD,0x67F9,
- 0x67C0,0x67C2,0x67C3,0x67C5,0x67C8,0x67C9,0x67D2,0x67D7,
- 0x67D9,0x67DC,0x67E1,0x67E6,0x67F0,0x67F2,0x67F6,0x67F7,
- 0x6852,0x6814,0x6819,0x681D,0x681F,0x6828,0x6827,0x682C,
- 0x682D,0x682F,0x6830,0x6831,0x6833,0x683B,0x683F,0x6844,
- 0x6845,0x684A,0x684C,0x6855,0x6857,0x6858,0x685B,0x686B,
- 0x686E,0x686F,0x6870,0x6871,0x6872,0x6875,0x6879,0x687A,
- 0x687B,0x687C,0x6882,0x6884,0x6886,0x6888,0x6896,0x6898,
- 0x689A,0x689C,0x68A1,0x68A3,0x68A5,0x68A9,0x68AA,0x68AE,
- 0x68B2,0x68BB,0x68C5,0x68C8,0x68CC,0x68CF,
-
- /* ku 36 */
- 0x68D0,0x68D1,0x68D3,0x68D6,0x68D9,0x68DC,0x68DD,0x68E5,
- 0x68E8,0x68EA,0x68EB,0x68EC,0x68ED,0x68F0,0x68F1,0x68F5,
- 0x68F6,0x68FB,0x68FC,0x68FD,0x6906,0x6909,0x690A,0x6910,
- 0x6911,0x6913,0x6916,0x6917,0x6931,0x6933,0x6935,0x6938,
- 0x693B,0x6942,0x6945,0x6949,0x694E,0x6957,0x695B,0x6963,
- 0x6964,0x6965,0x6966,0x6968,0x6969,0x696C,0x6970,0x6971,
- 0x6972,0x697A,0x697B,0x697F,0x6980,0x698D,0x6992,0x6996,
- 0x6998,0x69A1,0x69A5,0x69A6,0x69A8,0x69AB,0x69AD,0x69AF,
- 0x69B7,0x69B8,0x69BA,0x69BC,0x69C5,0x69C8,0x69D1,0x69D6,
- 0x69D7,0x69E2,0x69E5,0x69EE,0x69EF,0x69F1,0x69F3,0x69F5,
- 0x69FE,0x6A00,0x6A01,0x6A03,0x6A0F,0x6A11,0x6A15,0x6A1A,
- 0x6A1D,0x6A20,0x6A24,0x6A28,0x6A30,0x6A32,
-
- /* ku 37 */
- 0x6A34,0x6A37,0x6A3B,0x6A3E,0x6A3F,0x6A45,0x6A46,0x6A49,
- 0x6A4A,0x6A4E,0x6A50,0x6A51,0x6A52,0x6A55,0x6A56,0x6A5B,
- 0x6A64,0x6A67,0x6A6A,0x6A71,0x6A73,0x6A7E,0x6A81,0x6A83,
- 0x6A86,0x6A87,0x6A89,0x6A8B,0x6A91,0x6A9B,0x6A9D,0x6A9E,
- 0x6A9F,0x6AA5,0x6AAB,0x6AAF,0x6AB0,0x6AB1,0x6AB4,0x6ABD,
- 0x6ABE,0x6ABF,0x6AC6,0x6AC9,0x6AC8,0x6ACC,0x6AD0,0x6AD4,
- 0x6AD5,0x6AD6,0x6ADC,0x6ADD,0x6AE4,0x6AE7,0x6AEC,0x6AF0,
- 0x6AF1,0x6AF2,0x6AFC,0x6AFD,0x6B02,0x6B03,0x6B06,0x6B07,
- 0x6B09,0x6B0F,0x6B10,0x6B11,0x6B17,0x6B1B,0x6B1E,0x6B24,
- 0x6B28,0x6B2B,0x6B2C,0x6B2F,0x6B35,0x6B36,0x6B3B,0x6B3F,
- 0x6B46,0x6B4A,0x6B4D,0x6B52,0x6B56,0x6B58,0x6B5D,0x6B60,
- 0x6B67,0x6B6B,0x6B6E,0x6B70,0x6B75,0x6B7D,
-
- /* ku 38 */
- 0x6B7E,0x6B82,0x6B85,0x6B97,0x6B9B,0x6B9F,0x6BA0,0x6BA2,
- 0x6BA3,0x6BA8,0x6BA9,0x6BAC,0x6BAD,0x6BAE,0x6BB0,0x6BB8,
- 0x6BB9,0x6BBD,0x6BBE,0x6BC3,0x6BC4,0x6BC9,0x6BCC,0x6BD6,
- 0x6BDA,0x6BE1,0x6BE3,0x6BE6,0x6BE7,0x6BEE,0x6BF1,0x6BF7,
- 0x6BF9,0x6BFF,0x6C02,0x6C04,0x6C05,0x6C09,0x6C0D,0x6C0E,
- 0x6C10,0x6C12,0x6C19,0x6C1F,0x6C26,0x6C27,0x6C28,0x6C2C,
- 0x6C2E,0x6C33,0x6C35,0x6C36,0x6C3A,0x6C3B,0x6C3F,0x6C4A,
- 0x6C4B,0x6C4D,0x6C4F,0x6C52,0x6C54,0x6C59,0x6C5B,0x6C5C,
- 0x6C6B,0x6C6D,0x6C6F,0x6C74,0x6C76,0x6C78,0x6C79,0x6C7B,
- 0x6C85,0x6C86,0x6C87,0x6C89,0x6C94,0x6C95,0x6C97,0x6C98,
- 0x6C9C,0x6C9F,0x6CB0,0x6CB2,0x6CB4,0x6CC2,0x6CC6,0x6CCD,
- 0x6CCF,0x6CD0,0x6CD1,0x6CD2,0x6CD4,0x6CD6,
-
- /* ku 39 */
- 0x6CDA,0x6CDC,0x6CE0,0x6CE7,0x6CE9,0x6CEB,0x6CEC,0x6CEE,
- 0x6CF2,0x6CF4,0x6D04,0x6D07,0x6D0A,0x6D0E,0x6D0F,0x6D11,
- 0x6D13,0x6D1A,0x6D26,0x6D27,0x6D28,0x6C67,0x6D2E,0x6D2F,
- 0x6D31,0x6D39,0x6D3C,0x6D3F,0x6D57,0x6D5E,0x6D5F,0x6D61,
- 0x6D65,0x6D67,0x6D6F,0x6D70,0x6D7C,0x6D82,0x6D87,0x6D91,
- 0x6D92,0x6D94,0x6D96,0x6D97,0x6D98,0x6DAA,0x6DAC,0x6DB4,
- 0x6DB7,0x6DB9,0x6DBD,0x6DBF,0x6DC4,0x6DC8,0x6DCA,0x6DCE,
- 0x6DCF,0x6DD6,0x6DDB,0x6DDD,0x6DDF,0x6DE0,0x6DE2,0x6DE5,
- 0x6DE9,0x6DEF,0x6DF0,0x6DF4,0x6DF6,0x6DFC,0x6E00,0x6E04,
- 0x6E1E,0x6E22,0x6E27,0x6E32,0x6E36,0x6E39,0x6E3B,0x6E3C,
- 0x6E44,0x6E45,0x6E48,0x6E49,0x6E4B,0x6E4F,0x6E51,0x6E52,
- 0x6E53,0x6E54,0x6E57,0x6E5C,0x6E5D,0x6E5E,
-
- /* ku 40 */
- 0x6E62,0x6E63,0x6E68,0x6E73,0x6E7B,0x6E7D,0x6E8D,0x6E93,
- 0x6E99,0x6EA0,0x6EA7,0x6EAD,0x6EAE,0x6EB1,0x6EB3,0x6EBB,
- 0x6EBF,0x6EC0,0x6EC1,0x6EC3,0x6EC7,0x6EC8,0x6ECA,0x6ECD,
- 0x6ECE,0x6ECF,0x6EEB,0x6EED,0x6EEE,0x6EF9,0x6EFB,0x6EFD,
- 0x6F04,0x6F08,0x6F0A,0x6F0C,0x6F0D,0x6F16,0x6F18,0x6F1A,
- 0x6F1B,0x6F26,0x6F29,0x6F2A,0x6F2F,0x6F30,0x6F33,0x6F36,
- 0x6F3B,0x6F3C,0x6F2D,0x6F4F,0x6F51,0x6F52,0x6F53,0x6F57,
- 0x6F59,0x6F5A,0x6F5D,0x6F5E,0x6F61,0x6F62,0x6F68,0x6F6C,
- 0x6F7D,0x6F7E,0x6F83,0x6F87,0x6F88,0x6F8B,0x6F8C,0x6F8D,
- 0x6F90,0x6F92,0x6F93,0x6F94,0x6F96,0x6F9A,0x6F9F,0x6FA0,
- 0x6FA5,0x6FA6,0x6FA7,0x6FA8,0x6FAE,0x6FAF,0x6FB0,0x6FB5,
- 0x6FB6,0x6FBC,0x6FC5,0x6FC7,0x6FC8,0x6FCA,
-
- /* ku 41 */
- 0x6FDA,0x6FDE,0x6FE8,0x6FE9,0x6FF0,0x6FF5,0x6FF9,0x6FFC,
- 0x6FFD,0x7000,0x7005,0x7006,0x7007,0x700D,0x7017,0x7020,
- 0x7023,0x702F,0x7034,0x7037,0x7039,0x703C,0x7043,0x7044,
- 0x7048,0x7049,0x704A,0x704B,0x7054,0x7055,0x705D,0x705E,
- 0x704E,0x7064,0x7065,0x706C,0x706E,0x7075,0x7076,0x707E,
- 0x7081,0x7085,0x7086,0x7094,0x7095,0x7096,0x7097,0x7098,
- 0x709B,0x70A4,0x70AB,0x70B0,0x70B1,0x70B4,0x70B7,0x70CA,
- 0x70D1,0x70D3,0x70D4,0x70D5,0x70D6,0x70D8,0x70DC,0x70E4,
- 0x70FA,0x7103,0x7104,0x7105,0x7106,0x7107,0x710B,0x710C,
- 0x710F,0x711E,0x7120,0x712B,0x712D,0x712F,0x7130,0x7131,
- 0x7138,0x7141,0x7145,0x7146,0x7147,0x714A,0x714B,0x7150,
- 0x7152,0x7157,0x715A,0x715C,0x715E,0x7160,
-
- /* ku 42 */
- 0x7168,0x7179,0x7180,0x7185,0x7187,0x718C,0x7192,0x719A,
- 0x719B,0x71A0,0x71A2,0x71AF,0x71B0,0x71B2,0x71B3,0x71BA,
- 0x71BF,0x71C0,0x71C1,0x71C4,0x71CB,0x71CC,0x71D3,0x71D6,
- 0x71D9,0x71DA,0x71DC,0x71F8,0x71FE,0x7200,0x7207,0x7208,
- 0x7209,0x7213,0x7217,0x721A,0x721D,0x721F,0x7224,0x722B,
- 0x722F,0x7234,0x7238,0x7239,0x7241,0x7242,0x7243,0x7245,
- 0x724E,0x724F,0x7250,0x7253,0x7255,0x7256,0x725A,0x725C,
- 0x725E,0x7260,0x7263,0x7268,0x726B,0x726E,0x726F,0x7271,
- 0x7277,0x7278,0x727B,0x727C,0x727F,0x7284,0x7289,0x728D,
- 0x728E,0x7293,0x729B,0x72A8,0x72AD,0x72AE,0x72B1,0x72B4,
- 0x72BE,0x72C1,0x72C7,0x72C9,0x72CC,0x72D5,0x72D6,0x72D8,
- 0x72DF,0x72E5,0x72F3,0x72F4,0x72FA,0x72FB,
-
- /* ku 43 */
- 0x72FE,0x7302,0x7304,0x7305,0x7307,0x730B,0x730D,0x7312,
- 0x7313,0x7318,0x7319,0x731E,0x7322,0x7324,0x7327,0x7328,
- 0x732C,0x7331,0x7332,0x7335,0x733A,0x733B,0x733D,0x7343,
- 0x734D,0x7350,0x7352,0x7356,0x7358,0x735D,0x735E,0x735F,
- 0x7360,0x7366,0x7367,0x7369,0x736B,0x736C,0x736E,0x736F,
- 0x7371,0x7377,0x7379,0x737C,0x7380,0x7381,0x7383,0x7385,
- 0x7386,0x738E,0x7390,0x7393,0x7395,0x7397,0x7398,0x739C,
- 0x739E,0x739F,0x73A0,0x73A2,0x73A5,0x73A6,0x73AA,0x73AB,
- 0x73AD,0x73B5,0x73B7,0x73B9,0x73BC,0x73BD,0x73BF,0x73C5,
- 0x73C6,0x73C9,0x73CB,0x73CC,0x73CF,0x73D2,0x73D3,0x73D6,
- 0x73D9,0x73DD,0x73E1,0x73E3,0x73E6,0x73E7,0x73E9,0x73F4,
- 0x73F5,0x73F7,0x73F9,0x73FA,0x73FB,0x73FD,
-
- /* ku 44 */
- 0x73FF,0x7400,0x7401,0x7404,0x7407,0x740A,0x7411,0x741A,
- 0x741B,0x7424,0x7426,0x7428,0x7429,0x742A,0x742B,0x742C,
- 0x742D,0x742E,0x742F,0x7430,0x7431,0x7439,0x7440,0x7443,
- 0x7444,0x7446,0x7447,0x744B,0x744D,0x7451,0x7452,0x7457,
- 0x745D,0x7462,0x7466,0x7467,0x7468,0x746B,0x746D,0x746E,
- 0x7471,0x7472,0x7480,0x7481,0x7485,0x7486,0x7487,0x7489,
- 0x748F,0x7490,0x7491,0x7492,0x7498,0x7499,0x749A,0x749C,
- 0x749F,0x74A0,0x74A1,0x74A3,0x74A6,0x74A8,0x74A9,0x74AA,
- 0x74AB,0x74AE,0x74AF,0x74B1,0x74B2,0x74B5,0x74B9,0x74BB,
- 0x74BF,0x74C8,0x74C9,0x74CC,0x74D0,0x74D3,0x74D8,0x74DA,
- 0x74DB,0x74DE,0x74DF,0x74E4,0x74E8,0x74EA,0x74EB,0x74EF,
- 0x74F4,0x74FA,0x74FB,0x74FC,0x74FF,0x7506,
-
- /* ku 45 */
- 0x7512,0x7516,0x7517,0x7520,0x7521,0x7524,0x7527,0x7529,
- 0x752A,0x752F,0x7536,0x7539,0x753D,0x753E,0x753F,0x7540,
- 0x7543,0x7547,0x7548,0x754E,0x7550,0x7552,0x7557,0x755E,
- 0x755F,0x7561,0x756F,0x7571,0x7579,0x757A,0x757B,0x757C,
- 0x757D,0x757E,0x7581,0x7585,0x7590,0x7592,0x7593,0x7595,
- 0x7599,0x759C,0x75A2,0x75A4,0x75B4,0x75BA,0x75BF,0x75C0,
- 0x75C1,0x75C4,0x75C6,0x75CC,0x75CE,0x75CF,0x75D7,0x75DC,
- 0x75DF,0x75E0,0x75E1,0x75E4,0x75E7,0x75EC,0x75EE,0x75EF,
- 0x75F1,0x75F9,0x7600,0x7602,0x7603,0x7604,0x7607,0x7608,
- 0x760A,0x760C,0x760F,0x7612,0x7613,0x7615,0x7616,0x7619,
- 0x761B,0x761C,0x761D,0x761E,0x7623,0x7625,0x7626,0x7629,
- 0x762D,0x7632,0x7633,0x7635,0x7638,0x7639,
-
- /* ku 46 */
- 0x763A,0x763C,0x764A,0x7640,0x7641,0x7643,0x7644,0x7645,
- 0x7649,0x764B,0x7655,0x7659,0x765F,0x7664,0x7665,0x766D,
- 0x766E,0x766F,0x7671,0x7674,0x7681,0x7685,0x768C,0x768D,
- 0x7695,0x769B,0x769C,0x769D,0x769F,0x76A0,0x76A2,0x76A3,
- 0x76A4,0x76A5,0x76A6,0x76A7,0x76A8,0x76AA,0x76AD,0x76BD,
- 0x76C1,0x76C5,0x76C9,0x76CB,0x76CC,0x76CE,0x76D4,0x76D9,
- 0x76E0,0x76E6,0x76E8,0x76EC,0x76F0,0x76F1,0x76F6,0x76F9,
- 0x76FC,0x7700,0x7706,0x770A,0x770E,0x7712,0x7714,0x7715,
- 0x7717,0x7719,0x771A,0x771C,0x7722,0x7728,0x772D,0x772E,
- 0x772F,0x7734,0x7735,0x7736,0x7739,0x773D,0x773E,0x7742,
- 0x7745,0x7746,0x774A,0x774D,0x774E,0x774F,0x7752,0x7756,
- 0x7757,0x775C,0x775E,0x775F,0x7760,0x7762,
-
- /* ku 47 */
- 0x7764,0x7767,0x776A,0x776C,0x7770,0x7772,0x7773,0x7774,
- 0x777A,0x777D,0x7780,0x7784,0x778C,0x778D,0x7794,0x7795,
- 0x7796,0x779A,0x779F,0x77A2,0x77A7,0x77AA,0x77AE,0x77AF,
- 0x77B1,0x77B5,0x77BE,0x77C3,0x77C9,0x77D1,0x77D2,0x77D5,
- 0x77D9,0x77DE,0x77DF,0x77E0,0x77E4,0x77E6,0x77EA,0x77EC,
- 0x77F0,0x77F1,0x77F4,0x77F8,0x77FB,0x7805,0x7806,0x7809,
- 0x780D,0x780E,0x7811,0x781D,0x7821,0x7822,0x7823,0x782D,
- 0x782E,0x7830,0x7835,0x7837,0x7843,0x7844,0x7847,0x7848,
- 0x784C,0x784E,0x7852,0x785C,0x785E,0x7860,0x7861,0x7863,
- 0x7864,0x7868,0x786A,0x786E,0x787A,0x787E,0x788A,0x788F,
- 0x7894,0x7898,0x78A1,0x789D,0x789E,0x789F,0x78A4,0x78A8,
- 0x78AC,0x78AD,0x78B0,0x78B1,0x78B2,0x78B3,
-
- /* ku 48 */
- 0x78BB,0x78BD,0x78BF,0x78C7,0x78C8,0x78C9,0x78CC,0x78CE,
- 0x78D2,0x78D3,0x78D5,0x78D6,0x78E4,0x78DB,0x78DF,0x78E0,
- 0x78E1,0x78E6,0x78EA,0x78F2,0x78F3,0x7900,0x78F6,0x78F7,
- 0x78FA,0x78FB,0x78FF,0x7906,0x790C,0x7910,0x791A,0x791C,
- 0x791E,0x791F,0x7920,0x7925,0x7927,0x7929,0x792D,0x7931,
- 0x7934,0x7935,0x793B,0x793D,0x793F,0x7944,0x7945,0x7946,
- 0x794A,0x794B,0x794F,0x7951,0x7954,0x7958,0x795B,0x795C,
- 0x7967,0x7969,0x796B,0x7972,0x7979,0x797B,0x797C,0x797E,
- 0x798B,0x798C,0x7991,0x7993,0x7994,0x7995,0x7996,0x7998,
- 0x799B,0x799C,0x79A1,0x79A8,0x79A9,0x79AB,0x79AF,0x79B1,
- 0x79B4,0x79B8,0x79BB,0x79C2,0x79C4,0x79C7,0x79C8,0x79CA,
- 0x79CF,0x79D4,0x79D6,0x79DA,0x79DD,0x79DE,
-
- /* ku 49 */
- 0x79E0,0x79E2,0x79E5,0x79EA,0x79EB,0x79ED,0x79F1,0x79F8,
- 0x79FC,0x7A02,0x7A03,0x7A07,0x7A09,0x7A0A,0x7A0C,0x7A11,
- 0x7A15,0x7A1B,0x7A1E,0x7A21,0x7A27,0x7A2B,0x7A2D,0x7A2F,
- 0x7A30,0x7A34,0x7A35,0x7A38,0x7A39,0x7A3A,0x7A44,0x7A45,
- 0x7A47,0x7A48,0x7A4C,0x7A55,0x7A56,0x7A59,0x7A5C,0x7A5D,
- 0x7A5F,0x7A60,0x7A65,0x7A67,0x7A6A,0x7A6D,0x7A75,0x7A78,
- 0x7A7E,0x7A80,0x7A82,0x7A85,0x7A86,0x7A8A,0x7A8B,0x7A90,
- 0x7A91,0x7A94,0x7A9E,0x7AA0,0x7AA3,0x7AAC,0x7AB3,0x7AB5,
- 0x7AB9,0x7ABB,0x7ABC,0x7AC6,0x7AC9,0x7ACC,0x7ACE,0x7AD1,
- 0x7ADB,0x7AE8,0x7AE9,0x7AEB,0x7AEC,0x7AF1,0x7AF4,0x7AFB,
- 0x7AFD,0x7AFE,0x7B07,0x7B14,0x7B1F,0x7B23,0x7B27,0x7B29,
- 0x7B2A,0x7B2B,0x7B2D,0x7B2E,0x7B2F,0x7B30,
-
- /* ku 50 */
- 0x7B31,0x7B34,0x7B3D,0x7B3F,0x7B40,0x7B41,0x7B47,0x7B4E,
- 0x7B55,0x7B60,0x7B64,0x7B66,0x7B69,0x7B6A,0x7B6D,0x7B6F,
- 0x7B72,0x7B73,0x7B77,0x7B84,0x7B89,0x7B8E,0x7B90,0x7B91,
- 0x7B96,0x7B9B,0x7B9E,0x7BA0,0x7BA5,0x7BAC,0x7BAF,0x7BB0,
- 0x7BB2,0x7BB5,0x7BB6,0x7BBA,0x7BBB,0x7BBC,0x7BBD,0x7BC2,
- 0x7BC5,0x7BC8,0x7BCA,0x7BD4,0x7BD6,0x7BD7,0x7BD9,0x7BDA,
- 0x7BDB,0x7BE8,0x7BEA,0x7BF2,0x7BF4,0x7BF5,0x7BF8,0x7BF9,
- 0x7BFA,0x7BFC,0x7BFE,0x7C01,0x7C02,0x7C03,0x7C04,0x7C06,
- 0x7C09,0x7C0B,0x7C0C,0x7C0E,0x7C0F,0x7C19,0x7C1B,0x7C20,
- 0x7C25,0x7C26,0x7C28,0x7C2C,0x7C31,0x7C33,0x7C34,0x7C36,
- 0x7C39,0x7C3A,0x7C46,0x7C4A,0x7C55,0x7C51,0x7C52,0x7C53,
- 0x7C59,0x7C5A,0x7C5B,0x7C5C,0x7C5D,0x7C5E,
-
- /* ku 51 */
- 0x7C61,0x7C63,0x7C67,0x7C69,0x7C6D,0x7C6E,0x7C70,0x7C72,
- 0x7C79,0x7C7C,0x7C7D,0x7C86,0x7C87,0x7C8F,0x7C94,0x7C9E,
- 0x7CA0,0x7CA6,0x7CB0,0x7CB6,0x7CB7,0x7CBA,0x7CBB,0x7CBC,
- 0x7CBF,0x7CC4,0x7CC7,0x7CC8,0x7CC9,0x7CCD,0x7CCF,0x7CD3,
- 0x7CD4,0x7CD5,0x7CD7,0x7CD9,0x7CDA,0x7CDD,0x7CE6,0x7CE9,
- 0x7CEB,0x7CF5,0x7D03,0x7D07,0x7D08,0x7D09,0x7D0F,0x7D11,
- 0x7D12,0x7D13,0x7D16,0x7D1D,0x7D1E,0x7D23,0x7D26,0x7D2A,
- 0x7D2D,0x7D31,0x7D3C,0x7D3D,0x7D3E,0x7D40,0x7D41,0x7D47,
- 0x7D48,0x7D4D,0x7D51,0x7D53,0x7D57,0x7D59,0x7D5A,0x7D5C,
- 0x7D5D,0x7D65,0x7D67,0x7D6A,0x7D70,0x7D78,0x7D7A,0x7D7B,
- 0x7D7F,0x7D81,0x7D82,0x7D83,0x7D85,0x7D86,0x7D88,0x7D8B,
- 0x7D8C,0x7D8D,0x7D91,0x7D96,0x7D97,0x7D9D,
-
- /* ku 52 */
- 0x7D9E,0x7DA6,0x7DA7,0x7DAA,0x7DB3,0x7DB6,0x7DB7,0x7DB9,
- 0x7DC2,0x7DC3,0x7DC4,0x7DC5,0x7DC6,0x7DCC,0x7DCD,0x7DCE,
- 0x7DD7,0x7DD9,0x7E00,0x7DE2,0x7DE5,0x7DE6,0x7DEA,0x7DEB,
- 0x7DED,0x7DF1,0x7DF5,0x7DF6,0x7DF9,0x7DFA,0x7E08,0x7E10,
- 0x7E11,0x7E15,0x7E17,0x7E1C,0x7E1D,0x7E20,0x7E27,0x7E28,
- 0x7E2C,0x7E2D,0x7E2F,0x7E33,0x7E36,0x7E3F,0x7E44,0x7E45,
- 0x7E47,0x7E4E,0x7E50,0x7E52,0x7E58,0x7E5F,0x7E61,0x7E62,
- 0x7E65,0x7E6B,0x7E6E,0x7E6F,0x7E73,0x7E78,0x7E7E,0x7E81,
- 0x7E86,0x7E87,0x7E8A,0x7E8D,0x7E91,0x7E95,0x7E98,0x7E9A,
- 0x7E9D,0x7E9E,0x7F3C,0x7F3B,0x7F3D,0x7F3E,0x7F3F,0x7F43,
- 0x7F44,0x7F47,0x7F4F,0x7F52,0x7F53,0x7F5B,0x7F5C,0x7F5D,
- 0x7F61,0x7F63,0x7F64,0x7F65,0x7F66,0x7F6D,
-
- /* ku 53 */
- 0x7F71,0x7F7D,0x7F7E,0x7F7F,0x7F80,0x7F8B,0x7F8D,0x7F8F,
- 0x7F90,0x7F91,0x7F96,0x7F97,0x7F9C,0x7FA1,0x7FA2,0x7FA6,
- 0x7FAA,0x7FAD,0x7FB4,0x7FBC,0x7FBF,0x7FC0,0x7FC3,0x7FC8,
- 0x7FCE,0x7FCF,0x7FDB,0x7FDF,0x7FE3,0x7FE5,0x7FE8,0x7FEC,
- 0x7FEE,0x7FEF,0x7FF2,0x7FFA,0x7FFD,0x7FFE,0x7FFF,0x8007,
- 0x8008,0x800A,0x800D,0x800E,0x800F,0x8011,0x8013,0x8014,
- 0x8016,0x801D,0x801E,0x801F,0x8020,0x8024,0x8026,0x802C,
- 0x802E,0x8030,0x8034,0x8035,0x8037,0x8039,0x803A,0x803C,
- 0x803E,0x8040,0x8044,0x8060,0x8064,0x8066,0x806D,0x8071,
- 0x8075,0x8081,0x8088,0x808E,0x809C,0x809E,0x80A6,0x80A7,
- 0x80AB,0x80B8,0x80B9,0x80C8,0x80CD,0x80CF,0x80D2,0x80D4,
- 0x80D5,0x80D7,0x80D8,0x80E0,0x80ED,0x80EE,
-
- /* ku 54 */
- 0x80F0,0x80F2,0x80F3,0x80F6,0x80F9,0x80FA,0x80FE,0x8103,
- 0x810B,0x8116,0x8117,0x8118,0x811C,0x811E,0x8120,0x8124,
- 0x8127,0x812C,0x8130,0x8135,0x813A,0x813C,0x8145,0x8147,
- 0x814A,0x814C,0x8152,0x8157,0x8160,0x8161,0x8167,0x8168,
- 0x8169,0x816D,0x816F,0x8177,0x8181,0x8190,0x8184,0x8185,
- 0x8186,0x818B,0x818E,0x8196,0x8198,0x819B,0x819E,0x81A2,
- 0x81AE,0x81B2,0x81B4,0x81BB,0x81CB,0x81C3,0x81C5,0x81CA,
- 0x81CE,0x81CF,0x81D5,0x81D7,0x81DB,0x81DD,0x81DE,0x81E1,
- 0x81E4,0x81EB,0x81EC,0x81F0,0x81F1,0x81F2,0x81F5,0x81F6,
- 0x81F8,0x81F9,0x81FD,0x81FF,0x8200,0x8203,0x820F,0x8213,
- 0x8214,0x8219,0x821A,0x821D,0x8221,0x8222,0x8228,0x8232,
- 0x8234,0x823A,0x8243,0x8244,0x8245,0x8246,
-
- /* ku 55 */
- 0x824B,0x824E,0x824F,0x8251,0x8256,0x825C,0x8260,0x8263,
- 0x8267,0x826D,0x8274,0x827B,0x827D,0x827F,0x8280,0x8281,
- 0x8283,0x8284,0x8287,0x8289,0x828A,0x828E,0x8291,0x8294,
- 0x8296,0x8298,0x829A,0x829B,0x82A0,0x82A1,0x82A3,0x82A4,
- 0x82A7,0x82A8,0x82A9,0x82AA,0x82AE,0x82B0,0x82B2,0x82B4,
- 0x82B7,0x82BA,0x82BC,0x82BE,0x82BF,0x82C6,0x82D0,0x82D5,
- 0x82DA,0x82E0,0x82E2,0x82E4,0x82E8,0x82EA,0x82ED,0x82EF,
- 0x82F6,0x82F7,0x82FD,0x82FE,0x8300,0x8301,0x8307,0x8308,
- 0x830A,0x830B,0x8354,0x831B,0x831D,0x831E,0x831F,0x8321,
- 0x8322,0x832C,0x832D,0x832E,0x8330,0x8333,0x8337,0x833A,
- 0x833C,0x833D,0x8342,0x8343,0x8344,0x8347,0x834D,0x834E,
- 0x8351,0x8355,0x8356,0x8357,0x8370,0x8378,
-
- /* ku 56 */
- 0x837D,0x837F,0x8380,0x8382,0x8384,0x8386,0x838D,0x8392,
- 0x8394,0x8395,0x8398,0x8399,0x839B,0x839C,0x839D,0x83A6,
- 0x83A7,0x83A9,0x83AC,0x83BE,0x83BF,0x83C0,0x83C7,0x83C9,
- 0x83CF,0x83D0,0x83D1,0x83D4,0x83DD,0x8353,0x83E8,0x83EA,
- 0x83F6,0x83F8,0x83F9,0x83FC,0x8401,0x8406,0x840A,0x840F,
- 0x8411,0x8415,0x8419,0x83AD,0x842F,0x8439,0x8445,0x8447,
- 0x8448,0x844A,0x844D,0x844F,0x8451,0x8452,0x8456,0x8458,
- 0x8459,0x845A,0x845C,0x8460,0x8464,0x8465,0x8467,0x846A,
- 0x8470,0x8473,0x8474,0x8476,0x8478,0x847C,0x847D,0x8481,
- 0x8485,0x8492,0x8493,0x8495,0x849E,0x84A6,0x84A8,0x84A9,
- 0x84AA,0x84AF,0x84B1,0x84B4,0x84BA,0x84BD,0x84BE,0x84C0,
- 0x84C2,0x84C7,0x84C8,0x84CC,0x84CF,0x84D3,
-
- /* ku 57 */
- 0x84DC,0x84E7,0x84EA,0x84EF,0x84F0,0x84F1,0x84F2,0x84F7,
- 0x8532,0x84FA,0x84FB,0x84FD,0x8502,0x8503,0x8507,0x850C,
- 0x850E,0x8510,0x851C,0x851E,0x8522,0x8523,0x8524,0x8525,
- 0x8527,0x852A,0x852B,0x852F,0x8533,0x8534,0x8536,0x853F,
- 0x8546,0x854F,0x8550,0x8551,0x8552,0x8553,0x8556,0x8559,
- 0x855C,0x855D,0x855E,0x855F,0x8560,0x8561,0x8562,0x8564,
- 0x856B,0x856F,0x8579,0x857A,0x857B,0x857D,0x857F,0x8581,
- 0x8585,0x8586,0x8589,0x858B,0x858C,0x858F,0x8593,0x8598,
- 0x859D,0x859F,0x85A0,0x85A2,0x85A5,0x85A7,0x85B4,0x85B6,
- 0x85B7,0x85B8,0x85BC,0x85BD,0x85BE,0x85BF,0x85C2,0x85C7,
- 0x85CA,0x85CB,0x85CE,0x85AD,0x85D8,0x85DA,0x85DF,0x85E0,
- 0x85E6,0x85E8,0x85ED,0x85F3,0x85F6,0x85FC,
-
- /* ku 58 */
- 0x85FF,0x8600,0x8604,0x8605,0x860D,0x860E,0x8610,0x8611,
- 0x8612,0x8618,0x8619,0x861B,0x861E,0x8621,0x8627,0x8629,
- 0x8636,0x8638,0x863A,0x863C,0x863D,0x8640,0x8642,0x8646,
- 0x8652,0x8653,0x8656,0x8657,0x8658,0x8659,0x865D,0x8660,
- 0x8661,0x8662,0x8663,0x8664,0x8669,0x866C,0x866F,0x8675,
- 0x8676,0x8677,0x867A,0x868D,0x8691,0x8696,0x8698,0x869A,
- 0x869C,0x86A1,0x86A6,0x86A7,0x86A8,0x86AD,0x86B1,0x86B3,
- 0x86B4,0x86B5,0x86B7,0x86B8,0x86B9,0x86BF,0x86C0,0x86C1,
- 0x86C3,0x86C5,0x86D1,0x86D2,0x86D5,0x86D7,0x86DA,0x86DC,
- 0x86E0,0x86E3,0x86E5,0x86E7,0x8688,0x86FA,0x86FC,0x86FD,
- 0x8704,0x8705,0x8707,0x870B,0x870E,0x870F,0x8710,0x8713,
- 0x8714,0x8719,0x871E,0x871F,0x8721,0x8723,
-
- /* ku 59 */
- 0x8728,0x872E,0x872F,0x8731,0x8732,0x8739,0x873A,0x873C,
- 0x873D,0x873E,0x8740,0x8743,0x8745,0x874D,0x8758,0x875D,
- 0x8761,0x8764,0x8765,0x876F,0x8771,0x8772,0x877B,0x8783,
- 0x8784,0x8785,0x8786,0x8787,0x8788,0x8789,0x878B,0x878C,
- 0x8790,0x8793,0x8795,0x8797,0x8798,0x8799,0x879E,0x87A0,
- 0x87A3,0x87A7,0x87AC,0x87AD,0x87AE,0x87B1,0x87B5,0x87BE,
- 0x87BF,0x87C1,0x87C8,0x87C9,0x87CA,0x87CE,0x87D5,0x87D6,
- 0x87D9,0x87DA,0x87DC,0x87DF,0x87E2,0x87E3,0x87E4,0x87EA,
- 0x87EB,0x87ED,0x87F1,0x87F3,0x87F8,0x87FA,0x87FF,0x8801,
- 0x8803,0x8806,0x8809,0x880A,0x880B,0x8810,0x8819,0x8812,
- 0x8813,0x8814,0x8818,0x881A,0x881B,0x881C,0x881E,0x881F,
- 0x8828,0x882D,0x882E,0x8830,0x8832,0x8835,
-
- /* ku 60 */
- 0x883A,0x883C,0x8841,0x8843,0x8845,0x8848,0x8849,0x884A,
- 0x884B,0x884E,0x8851,0x8855,0x8856,0x8858,0x885A,0x885C,
- 0x885F,0x8860,0x8864,0x8869,0x8871,0x8879,0x887B,0x8880,
- 0x8898,0x889A,0x889B,0x889C,0x889F,0x88A0,0x88A8,0x88AA,
- 0x88BA,0x88BD,0x88BE,0x88C0,0x88CA,0x88CB,0x88CC,0x88CD,
- 0x88CE,0x88D1,0x88D2,0x88D3,0x88DB,0x88DE,0x88E7,0x88EF,
- 0x88F0,0x88F1,0x88F5,0x88F7,0x8901,0x8906,0x890D,0x890E,
- 0x890F,0x8915,0x8916,0x8918,0x8919,0x891A,0x891C,0x8920,
- 0x8926,0x8927,0x8928,0x8930,0x8931,0x8932,0x8935,0x8939,
- 0x893A,0x893E,0x8940,0x8942,0x8945,0x8946,0x8949,0x894F,
- 0x8952,0x8957,0x895A,0x895B,0x895C,0x8961,0x8962,0x8963,
- 0x896B,0x896E,0x8970,0x8973,0x8975,0x897A,
-
- /* ku 61 */
- 0x897B,0x897C,0x897D,0x8989,0x898D,0x8990,0x8994,0x8995,
- 0x899B,0x899C,0x899F,0x89A0,0x89A5,0x89B0,0x89B4,0x89B5,
- 0x89B6,0x89B7,0x89BC,0x89D4,0x89D5,0x89D6,0x89D7,0x89D8,
- 0x89E5,0x89E9,0x89EB,0x89ED,0x89F1,0x89F3,0x89F6,0x89F9,
- 0x89FD,0x89FF,0x8A04,0x8A05,0x8A07,0x8A0F,0x8A11,0x8A12,
- 0x8A14,0x8A15,0x8A1E,0x8A20,0x8A22,0x8A24,0x8A26,0x8A2B,
- 0x8A2C,0x8A2F,0x8A35,0x8A37,0x8A3D,0x8A3E,0x8A40,0x8A43,
- 0x8A45,0x8A47,0x8A49,0x8A4D,0x8A4E,0x8A53,0x8A56,0x8A57,
- 0x8A58,0x8A5C,0x8A5D,0x8A61,0x8A65,0x8A67,0x8A75,0x8A76,
- 0x8A77,0x8A79,0x8A7A,0x8A7B,0x8A7E,0x8A7F,0x8A80,0x8A83,
- 0x8A86,0x8A8B,0x8A8F,0x8A90,0x8A92,0x8A96,0x8A97,0x8A99,
- 0x8A9F,0x8AA7,0x8AA9,0x8AAE,0x8AAF,0x8AB3,
-
- /* ku 62 */
- 0x8AB6,0x8AB7,0x8ABB,0x8ABE,0x8AC3,0x8AC6,0x8AC8,0x8AC9,
- 0x8ACA,0x8AD1,0x8AD3,0x8AD4,0x8AD5,0x8AD7,0x8ADD,0x8ADF,
- 0x8AEC,0x8AF0,0x8AF4,0x8AF5,0x8AF6,0x8AFC,0x8AFF,0x8B05,
- 0x8B06,0x8B0B,0x8B11,0x8B1C,0x8B1E,0x8B1F,0x8B0A,0x8B2D,
- 0x8B30,0x8B37,0x8B3C,0x8B42,0x8B43,0x8B44,0x8B45,0x8B46,
- 0x8B48,0x8B52,0x8B53,0x8B54,0x8B59,0x8B4D,0x8B5E,0x8B63,
- 0x8B6D,0x8B76,0x8B78,0x8B79,0x8B7C,0x8B7E,0x8B81,0x8B84,
- 0x8B85,0x8B8B,0x8B8D,0x8B8F,0x8B94,0x8B95,0x8B9C,0x8B9E,
- 0x8B9F,0x8C38,0x8C39,0x8C3D,0x8C3E,0x8C45,0x8C47,0x8C49,
- 0x8C4B,0x8C4F,0x8C51,0x8C53,0x8C54,0x8C57,0x8C58,0x8C5B,
- 0x8C5D,0x8C59,0x8C63,0x8C64,0x8C66,0x8C68,0x8C69,0x8C6D,
- 0x8C73,0x8C75,0x8C76,0x8C7B,0x8C7E,0x8C86,
-
- /* ku 63 */
- 0x8C87,0x8C8B,0x8C90,0x8C92,0x8C93,0x8C99,0x8C9B,0x8C9C,
- 0x8CA4,0x8CB9,0x8CBA,0x8CC5,0x8CC6,0x8CC9,0x8CCB,0x8CCF,
- 0x8CD6,0x8CD5,0x8CD9,0x8CDD,0x8CE1,0x8CE8,0x8CEC,0x8CEF,
- 0x8CF0,0x8CF2,0x8CF5,0x8CF7,0x8CF8,0x8CFE,0x8CFF,0x8D01,
- 0x8D03,0x8D09,0x8D12,0x8D17,0x8D1B,0x8D65,0x8D69,0x8D6C,
- 0x8D6E,0x8D7F,0x8D82,0x8D84,0x8D88,0x8D8D,0x8D90,0x8D91,
- 0x8D95,0x8D9E,0x8D9F,0x8DA0,0x8DA6,0x8DAB,0x8DAC,0x8DAF,
- 0x8DB2,0x8DB5,0x8DB7,0x8DB9,0x8DBB,0x8DC0,0x8DC5,0x8DC6,
- 0x8DC7,0x8DC8,0x8DCA,0x8DCE,0x8DD1,0x8DD4,0x8DD5,0x8DD7,
- 0x8DD9,0x8DE4,0x8DE5,0x8DE7,0x8DEC,0x8DF0,0x8DBC,0x8DF1,
- 0x8DF2,0x8DF4,0x8DFD,0x8E01,0x8E04,0x8E05,0x8E06,0x8E0B,
- 0x8E11,0x8E14,0x8E16,0x8E20,0x8E21,0x8E22,
-
- /* ku 64 */
- 0x8E23,0x8E26,0x8E27,0x8E31,0x8E33,0x8E36,0x8E37,0x8E38,
- 0x8E39,0x8E3D,0x8E40,0x8E41,0x8E4B,0x8E4D,0x8E4E,0x8E4F,
- 0x8E54,0x8E5B,0x8E5C,0x8E5D,0x8E5E,0x8E61,0x8E62,0x8E69,
- 0x8E6C,0x8E6D,0x8E6F,0x8E70,0x8E71,0x8E79,0x8E7A,0x8E7B,
- 0x8E82,0x8E83,0x8E89,0x8E90,0x8E92,0x8E95,0x8E9A,0x8E9B,
- 0x8E9D,0x8E9E,0x8EA2,0x8EA7,0x8EA9,0x8EAD,0x8EAE,0x8EB3,
- 0x8EB5,0x8EBA,0x8EBB,0x8EC0,0x8EC1,0x8EC3,0x8EC4,0x8EC7,
- 0x8ECF,0x8ED1,0x8ED4,0x8EDC,0x8EE8,0x8EEE,0x8EF0,0x8EF1,
- 0x8EF7,0x8EF9,0x8EFA,0x8EED,0x8F00,0x8F02,0x8F07,0x8F08,
- 0x8F0F,0x8F10,0x8F16,0x8F17,0x8F18,0x8F1E,0x8F20,0x8F21,
- 0x8F23,0x8F25,0x8F27,0x8F28,0x8F2C,0x8F2D,0x8F2E,0x8F34,
- 0x8F35,0x8F36,0x8F37,0x8F3A,0x8F40,0x8F41,
-
- /* ku 65 */
- 0x8F43,0x8F47,0x8F4F,0x8F51,0x8F52,0x8F53,0x8F54,0x8F55,
- 0x8F58,0x8F5D,0x8F5E,0x8F65,0x8F9D,0x8FA0,0x8FA1,0x8FA4,
- 0x8FA5,0x8FA6,0x8FB5,0x8FB6,0x8FB8,0x8FBE,0x8FC0,0x8FC1,
- 0x8FC6,0x8FCA,0x8FCB,0x8FCD,0x8FD0,0x8FD2,0x8FD3,0x8FD5,
- 0x8FE0,0x8FE3,0x8FE4,0x8FE8,0x8FEE,0x8FF1,0x8FF5,0x8FF6,
- 0x8FFB,0x8FFE,0x9002,0x9004,0x9008,0x900C,0x9018,0x901B,
- 0x9028,0x9029,0x902F,0x902A,0x902C,0x902D,0x9033,0x9034,
- 0x9037,0x903F,0x9043,0x9044,0x904C,0x905B,0x905D,0x9062,
- 0x9066,0x9067,0x906C,0x9070,0x9074,0x9079,0x9085,0x9088,
- 0x908B,0x908C,0x908E,0x9090,0x9095,0x9097,0x9098,0x9099,
- 0x909B,0x90A0,0x90A1,0x90A2,0x90A5,0x90B0,0x90B2,0x90B3,
- 0x90B4,0x90B6,0x90BD,0x90CC,0x90BE,0x90C3,
-
- /* ku 66 */
- 0x90C4,0x90C5,0x90C7,0x90C8,0x90D5,0x90D7,0x90D8,0x90D9,
- 0x90DC,0x90DD,0x90DF,0x90E5,0x90D2,0x90F6,0x90EB,0x90EF,
- 0x90F0,0x90F4,0x90FE,0x90FF,0x9100,0x9104,0x9105,0x9106,
- 0x9108,0x910D,0x9110,0x9114,0x9116,0x9117,0x9118,0x911A,
- 0x911C,0x911E,0x9120,0x9125,0x9122,0x9123,0x9127,0x9129,
- 0x912E,0x912F,0x9131,0x9134,0x9136,0x9137,0x9139,0x913A,
- 0x913C,0x913D,0x9143,0x9147,0x9148,0x914F,0x9153,0x9157,
- 0x9159,0x915A,0x915B,0x9161,0x9164,0x9167,0x916D,0x9174,
- 0x9179,0x917A,0x917B,0x9181,0x9183,0x9185,0x9186,0x918A,
- 0x918E,0x9191,0x9193,0x9194,0x9195,0x9198,0x919E,0x91A1,
- 0x91A6,0x91A8,0x91AC,0x91AD,0x91AE,0x91B0,0x91B1,0x91B2,
- 0x91B3,0x91B6,0x91BB,0x91BC,0x91BD,0x91BF,
-
- /* ku 67 */
- 0x91C2,0x91C3,0x91C5,0x91D3,0x91D4,0x91D7,0x91D9,0x91DA,
- 0x91DE,0x91E4,0x91E5,0x91E9,0x91EA,0x91EC,0x91ED,0x91EE,
- 0x91EF,0x91F0,0x91F1,0x91F7,0x91F9,0x91FB,0x91FD,0x9200,
- 0x9201,0x9204,0x9205,0x9206,0x9207,0x9209,0x920A,0x920C,
- 0x9210,0x9212,0x9213,0x9216,0x9218,0x921C,0x921D,0x9223,
- 0x9224,0x9225,0x9226,0x9228,0x922E,0x922F,0x9230,0x9233,
- 0x9235,0x9236,0x9238,0x9239,0x923A,0x923C,0x923E,0x9240,
- 0x9242,0x9243,0x9246,0x9247,0x924A,0x924D,0x924E,0x924F,
- 0x9251,0x9258,0x9259,0x925C,0x925D,0x9260,0x9261,0x9265,
- 0x9267,0x9268,0x9269,0x926E,0x926F,0x9270,0x9275,0x9276,
- 0x9277,0x9278,0x9279,0x927B,0x927C,0x927D,0x927F,0x9288,
- 0x9289,0x928A,0x928D,0x928E,0x9292,0x9297,
-
- /* ku 68 */
- 0x9299,0x929F,0x92A0,0x92A4,0x92A5,0x92A7,0x92A8,0x92AB,
- 0x92AF,0x92B2,0x92B6,0x92B8,0x92BA,0x92BB,0x92BC,0x92BD,
- 0x92BF,0x92C0,0x92C1,0x92C2,0x92C3,0x92C5,0x92C6,0x92C7,
- 0x92C8,0x92CB,0x92CC,0x92CD,0x92CE,0x92D0,0x92D3,0x92D5,
- 0x92D7,0x92D8,0x92D9,0x92DC,0x92DD,0x92DF,0x92E0,0x92E1,
- 0x92E3,0x92E5,0x92E7,0x92E8,0x92EC,0x92EE,0x92F0,0x92F9,
- 0x92FB,0x92FF,0x9300,0x9302,0x9308,0x930D,0x9311,0x9314,
- 0x9315,0x931C,0x931D,0x931E,0x931F,0x9321,0x9324,0x9325,
- 0x9327,0x9329,0x932A,0x9333,0x9334,0x9336,0x9337,0x9347,
- 0x9348,0x9349,0x9350,0x9351,0x9352,0x9355,0x9357,0x9358,
- 0x935A,0x935E,0x9364,0x9365,0x9367,0x9369,0x936A,0x936D,
- 0x936F,0x9370,0x9371,0x9373,0x9374,0x9376,
-
- /* ku 69 */
- 0x937A,0x937D,0x937F,0x9380,0x9381,0x9382,0x9388,0x938A,
- 0x938B,0x938D,0x938F,0x9392,0x9395,0x9398,0x939B,0x939E,
- 0x93A1,0x93A3,0x93A4,0x93A6,0x93A8,0x93AB,0x93B4,0x93B5,
- 0x93B6,0x93BA,0x93A9,0x93C1,0x93C4,0x93C5,0x93C6,0x93C7,
- 0x93C9,0x93CA,0x93CB,0x93CC,0x93CD,0x93D3,0x93D9,0x93DC,
- 0x93DE,0x93DF,0x93E2,0x93E6,0x93E7,0x93F9,0x93F7,0x93F8,
- 0x93FA,0x93FB,0x93FD,0x9401,0x9402,0x9404,0x9408,0x9409,
- 0x940D,0x940E,0x940F,0x9415,0x9416,0x9417,0x941F,0x942E,
- 0x942F,0x9431,0x9432,0x9433,0x9434,0x943B,0x943F,0x943D,
- 0x9443,0x9445,0x9448,0x944A,0x944C,0x9455,0x9459,0x945C,
- 0x945F,0x9461,0x9463,0x9468,0x946B,0x946D,0x946E,0x946F,
- 0x9471,0x9472,0x9484,0x9483,0x9578,0x9579,
-
- /* ku 70 */
- 0x957E,0x9584,0x9588,0x958C,0x958D,0x958E,0x959D,0x959E,
- 0x959F,0x95A1,0x95A6,0x95A9,0x95AB,0x95AC,0x95B4,0x95B6,
- 0x95BA,0x95BD,0x95BF,0x95C6,0x95C8,0x95C9,0x95CB,0x95D0,
- 0x95D1,0x95D2,0x95D3,0x95D9,0x95DA,0x95DD,0x95DE,0x95DF,
- 0x95E0,0x95E4,0x95E6,0x961D,0x961E,0x9622,0x9624,0x9625,
- 0x9626,0x962C,0x9631,0x9633,0x9637,0x9638,0x9639,0x963A,
- 0x963C,0x963D,0x9641,0x9652,0x9654,0x9656,0x9657,0x9658,
- 0x9661,0x966E,0x9674,0x967B,0x967C,0x967E,0x967F,0x9681,
- 0x9682,0x9683,0x9684,0x9689,0x9691,0x9696,0x969A,0x969D,
- 0x969F,0x96A4,0x96A5,0x96A6,0x96A9,0x96AE,0x96AF,0x96B3,
- 0x96BA,0x96CA,0x96D2,0x5DB2,0x96D8,0x96DA,0x96DD,0x96DE,
- 0x96DF,0x96E9,0x96EF,0x96F1,0x96FA,0x9702,
-
- /* ku 71 */
- 0x9703,0x9705,0x9709,0x971A,0x971B,0x971D,0x9721,0x9722,
- 0x9723,0x9728,0x9731,0x9733,0x9741,0x9743,0x974A,0x974E,
- 0x974F,0x9755,0x9757,0x9758,0x975A,0x975B,0x9763,0x9767,
- 0x976A,0x976E,0x9773,0x9776,0x9777,0x9778,0x977B,0x977D,
- 0x977F,0x9780,0x9789,0x9795,0x9796,0x9797,0x9799,0x979A,
- 0x979E,0x979F,0x97A2,0x97AC,0x97AE,0x97B1,0x97B2,0x97B5,
- 0x97B6,0x97B8,0x97B9,0x97BA,0x97BC,0x97BE,0x97BF,0x97C1,
- 0x97C4,0x97C5,0x97C7,0x97C9,0x97CA,0x97CC,0x97CD,0x97CE,
- 0x97D0,0x97D1,0x97D4,0x97D7,0x97D8,0x97D9,0x97DD,0x97DE,
- 0x97E0,0x97DB,0x97E1,0x97E4,0x97EF,0x97F1,0x97F4,0x97F7,
- 0x97F8,0x97FA,0x9807,0x980A,0x9819,0x980D,0x980E,0x9814,
- 0x9816,0x981C,0x981E,0x9820,0x9823,0x9826,
-
- /* ku 72 */
- 0x982B,0x982E,0x982F,0x9830,0x9832,0x9833,0x9835,0x9825,
- 0x983E,0x9844,0x9847,0x984A,0x9851,0x9852,0x9853,0x9856,
- 0x9857,0x9859,0x985A,0x9862,0x9863,0x9865,0x9866,0x986A,
- 0x986C,0x98AB,0x98AD,0x98AE,0x98B0,0x98B4,0x98B7,0x98B8,
- 0x98BA,0x98BB,0x98BF,0x98C2,0x98C5,0x98C8,0x98CC,0x98E1,
- 0x98E3,0x98E5,0x98E6,0x98E7,0x98EA,0x98F3,0x98F6,0x9902,
- 0x9907,0x9908,0x9911,0x9915,0x9916,0x9917,0x991A,0x991B,
- 0x991C,0x991F,0x9922,0x9926,0x9927,0x992B,0x9931,0x9932,
- 0x9933,0x9934,0x9935,0x9939,0x993A,0x993B,0x993C,0x9940,
- 0x9941,0x9946,0x9947,0x9948,0x994D,0x994E,0x9954,0x9958,
- 0x9959,0x995B,0x995C,0x995E,0x995F,0x9960,0x999B,0x999D,
- 0x999F,0x99A6,0x99B0,0x99B1,0x99B2,0x99B5,
-
- /* ku 73 */
- 0x99B9,0x99BA,0x99BD,0x99BF,0x99C3,0x99C9,0x99D3,0x99D4,
- 0x99D9,0x99DA,0x99DC,0x99DE,0x99E7,0x99EA,0x99EB,0x99EC,
- 0x99F0,0x99F4,0x99F5,0x99F9,0x99FD,0x99FE,0x9A02,0x9A03,
- 0x9A04,0x9A0B,0x9A0C,0x9A10,0x9A11,0x9A16,0x9A1E,0x9A20,
- 0x9A22,0x9A23,0x9A24,0x9A27,0x9A2D,0x9A2E,0x9A33,0x9A35,
- 0x9A36,0x9A38,0x9A47,0x9A41,0x9A44,0x9A4A,0x9A4B,0x9A4C,
- 0x9A4E,0x9A51,0x9A54,0x9A56,0x9A5D,0x9AAA,0x9AAC,0x9AAE,
- 0x9AAF,0x9AB2,0x9AB4,0x9AB5,0x9AB6,0x9AB9,0x9ABB,0x9ABE,
- 0x9ABF,0x9AC1,0x9AC3,0x9AC6,0x9AC8,0x9ACE,0x9AD0,0x9AD2,
- 0x9AD5,0x9AD6,0x9AD7,0x9ADB,0x9ADC,0x9AE0,0x9AE4,0x9AE5,
- 0x9AE7,0x9AE9,0x9AEC,0x9AF2,0x9AF3,0x9AF5,0x9AF9,0x9AFA,
- 0x9AFD,0x9AFF,0x9B00,0x9B01,0x9B02,0x9B03,
-
- /* ku 74 */
- 0x9B04,0x9B05,0x9B08,0x9B09,0x9B0B,0x9B0C,0x9B0D,0x9B0E,
- 0x9B10,0x9B12,0x9B16,0x9B19,0x9B1B,0x9B1C,0x9B20,0x9B26,
- 0x9B2B,0x9B2D,0x9B33,0x9B34,0x9B35,0x9B37,0x9B39,0x9B3A,
- 0x9B3D,0x9B48,0x9B4B,0x9B4C,0x9B55,0x9B56,0x9B57,0x9B5B,
- 0x9B5E,0x9B61,0x9B63,0x9B65,0x9B66,0x9B68,0x9B6A,0x9B6B,
- 0x9B6C,0x9B6D,0x9B6E,0x9B73,0x9B75,0x9B77,0x9B78,0x9B79,
- 0x9B7F,0x9B80,0x9B84,0x9B85,0x9B86,0x9B87,0x9B89,0x9B8A,
- 0x9B8B,0x9B8D,0x9B8F,0x9B90,0x9B94,0x9B9A,0x9B9D,0x9B9E,
- 0x9BA6,0x9BA7,0x9BA9,0x9BAC,0x9BB0,0x9BB1,0x9BB2,0x9BB7,
- 0x9BB8,0x9BBB,0x9BBC,0x9BBE,0x9BBF,0x9BC1,0x9BC7,0x9BC8,
- 0x9BCE,0x9BD0,0x9BD7,0x9BD8,0x9BDD,0x9BDF,0x9BE5,0x9BE7,
- 0x9BEA,0x9BEB,0x9BEF,0x9BF3,0x9BF7,0x9BF8,
-
- /* ku 75 */
- 0x9BF9,0x9BFA,0x9BFD,0x9BFF,0x9C00,0x9C02,0x9C0B,0x9C0F,
- 0x9C11,0x9C16,0x9C18,0x9C19,0x9C1A,0x9C1C,0x9C1E,0x9C22,
- 0x9C23,0x9C26,0x9C27,0x9C28,0x9C29,0x9C2A,0x9C31,0x9C35,
- 0x9C36,0x9C37,0x9C3D,0x9C41,0x9C43,0x9C44,0x9C45,0x9C49,
- 0x9C4A,0x9C4E,0x9C4F,0x9C50,0x9C53,0x9C54,0x9C56,0x9C58,
- 0x9C5B,0x9C5D,0x9C5E,0x9C5F,0x9C63,0x9C69,0x9C6A,0x9C5C,
- 0x9C6B,0x9C68,0x9C6E,0x9C70,0x9C72,0x9C75,0x9C77,0x9C7B,
- 0x9CE6,0x9CF2,0x9CF7,0x9CF9,0x9D0B,0x9D02,0x9D11,0x9D17,
- 0x9D18,0x9D1C,0x9D1D,0x9D1E,0x9D2F,0x9D30,0x9D32,0x9D33,
- 0x9D34,0x9D3A,0x9D3C,0x9D45,0x9D3D,0x9D42,0x9D43,0x9D47,
- 0x9D4A,0x9D53,0x9D54,0x9D5F,0x9D63,0x9D62,0x9D65,0x9D69,
- 0x9D6A,0x9D6B,0x9D70,0x9D76,0x9D77,0x9D7B,
-
- /* ku 76 */
- 0x9D7C,0x9D7E,0x9D83,0x9D84,0x9D86,0x9D8A,0x9D8D,0x9D8E,
- 0x9D92,0x9D93,0x9D95,0x9D96,0x9D97,0x9D98,0x9DA1,0x9DAA,
- 0x9DAC,0x9DAE,0x9DB1,0x9DB5,0x9DB9,0x9DBC,0x9DBF,0x9DC3,
- 0x9DC7,0x9DC9,0x9DCA,0x9DD4,0x9DD5,0x9DD6,0x9DD7,0x9DDA,
- 0x9DDE,0x9DDF,0x9DE0,0x9DE5,0x9DE7,0x9DE9,0x9DEB,0x9DEE,
- 0x9DF0,0x9DF3,0x9DF4,0x9DFE,0x9E0A,0x9E02,0x9E07,0x9E0E,
- 0x9E10,0x9E11,0x9E12,0x9E15,0x9E16,0x9E19,0x9E1C,0x9E1D,
- 0x9E7A,0x9E7B,0x9E7C,0x9E80,0x9E82,0x9E83,0x9E84,0x9E85,
- 0x9E87,0x9E8E,0x9E8F,0x9E96,0x9E98,0x9E9B,0x9E9E,0x9EA4,
- 0x9EA8,0x9EAC,0x9EAE,0x9EAF,0x9EB0,0x9EB3,0x9EB4,0x9EB5,
- 0x9EC6,0x9EC8,0x9ECB,0x9ED5,0x9EDF,0x9EE4,0x9EE7,0x9EEC,
- 0x9EED,0x9EEE,0x9EF0,0x9EF1,0x9EF2,0x9EF5,
-
- /* ku 77 */
- 0x9EF8,0x9EFF,0x9F02,0x9F03,0x9F09,0x9F0F,0x9F10,0x9F11,
- 0x9F12,0x9F14,0x9F16,0x9F17,0x9F19,0x9F1A,0x9F1B,0x9F1F,
- 0x9F22,0x9F26,0x9F2A,0x9F2B,0x9F2F,0x9F31,0x9F32,0x9F34,
- 0x9F37,0x9F39,0x9F3A,0x9F3C,0x9F3D,0x9F3F,0x9F41,0x9F43,
- 0x9F44,0x9F45,0x9F46,0x9F47,0x9F53,0x9F55,0x9F56,0x9F57,
- 0x9F58,0x9F5A,0x9F5D,0x9F5E,0x9F68,0x9F69,0x9F6D,0x9F6E,
- 0x9F6F,0x9F70,0x9F71,0x9F73,0x9F75,0x9F7A,0x9F7D,0x9F8F,
- 0x9F90,0x9F91,0x9F92,0x9F94,0x9F96,0x9F97,0x9F9E,0x9FA1,
- 0x9FA2,0x9FA3,0x9FA5
-};
-
-static const int jisx0212_ucs_table_size = (sizeof (jisx0212_ucs_table) / sizeof (unsigned short));
-
-static const unsigned short ucs_a1_jis_table[] = {
- /* 0000h */
- 0x0000,0x0001,0x0002,0x0003,0x0004,0x0005,0x0006,0x0007,
- 0x0008,0x0009,0x000A,0x000B,0x000C,0x000D,0x000E,0x000F,
- 0x0010,0x0011,0x0012,0x0013,0x0014,0x0015,0x0016,0x0017,
- 0x0018,0x0019,0x001A,0x001B,0x001C,0x001D,0x001E,0x001F,
- 0x0020,0x0021,0x0022,0x0023,0x0024,0x0025,0x0026,0x0027,
- 0x0028,0x0029,0x002A,0x002B,0x002C,0x002D,0x002E,0x002F,
- 0x0030,0x0031,0x0032,0x0033,0x0034,0x0035,0x0036,0x0037,
- 0x0038,0x0039,0x003A,0x003B,0x003C,0x003D,0x003E,0x003F,
- 0x0040,0x0041,0x0042,0x0043,0x0044,0x0045,0x0046,0x0047,
- 0x0048,0x0049,0x004A,0x004B,0x004C,0x004D,0x004E,0x004F,
- 0x0050,0x0051,0x0052,0x0053,0x0054,0x0055,0x0056,0x0057,
- 0x0058,0x0059,0x005A,0x005B,0x005C,0x005D,0x005E,0x005F,
- 0x0060,0x0061,0x0062,0x0063,0x0064,0x0065,0x0066,0x0067,
- 0x0068,0x0069,0x006A,0x006B,0x006C,0x006D,0x006E,0x006F,
- 0x0070,0x0071,0x0072,0x0073,0x0074,0x0075,0x0076,0x0077,
- 0x0078,0x0079,0x007A,0x007B,0x007C,0x007D,0x007E,0x007F,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0xA2C2,0x2171,0x2172,0xA2F0,0x0000,0xA2C3,0x2178,
- 0x212F,0xA2ED,0xA2EC,0x0000,0x224C,0x0000,0xA2EE,0xA2B4,
- 0x216B,0x215E,0x0000,0x0000,0x212D,0x0000,0x2279,0x0000,
- 0xA2B1,0x0000,0xA2EB,0x0000,0x0000,0x0000,0x0000,0xA2C4,
- 0xAAA2,0xAAA1,0xAAA4,0xAAAA,0xAAA3,0xAAA9,0xA9A1,0xAAAE,
- 0xAAB2,0xAAB1,0xAAB4,0xAAB3,0xAAC0,0xAABF,0xAAC2,0xAAC1,
- 0x0000,0xAAD0,0xAAD2,0xAAD1,0xAAD4,0xAAD8,0xAAD3,0x215F,
- 0xA9AC,0xAAE3,0xAAE2,0xAAE5,0xAAE4,0xAAF2,0xA9B0,0xA9CE,
- 0xABA2,0xABA1,0xABA4,0xABAA,0xABA3,0xABA9,0xA9C1,0xABAE,
- 0xABB2,0xABB1,0xABB4,0xABB3,0xABC0,0xABBF,0xABC2,0xABC1,
- 0xA9C3,0xABD0,0xABD2,0xABD1,0xABD4,0xABD8,0xABD3,0x2160,
- 0xA9CC,0xABE3,0xABE2,0xABE5,0xABE4,0xABF2,0xA9D0,0xABF3,
-
- /* 0100h */
- 0xAAA7,0xABA7,0xAAA5,0xABA5,0xAAA8,0xABA8,0xAAAB,0xABAB,
- 0xAAAC,0xABAC,0xAAAF,0xABAF,0xAAAD,0xABAD,0xAAB0,0xABB0,
- 0xA9A2,0xA9C2,0xAAB7,0xABB7,0x0000,0x0000,0xAAB6,0xABB6,
- 0xAAB8,0xABB8,0xAAB5,0xABB5,0xAABA,0xABBA,0xAABB,0xABBB,
- 0xAABD,0xABBD,0xAABC,0x0000,0xAABE,0xABBE,0xA9A4,0xA9C4,
- 0xAAC7,0xABC7,0xAAC5,0xABC5,0x0000,0x0000,0xAAC6,0xABC6,
- 0xAAC4,0xA9C5,0xA9A6,0xA9C6,0xAAC8,0xABC8,0xAAC9,0xABC9,
- 0xA9C7,0xAACA,0xABCA,0xAACC,0xABCC,0xAACB,0xABCB,0xA9A9,
- 0xA9C9,0xA9A8,0xA9C8,0xAACD,0xABCD,0xAACF,0xABCF,0xAACE,
- 0xABCE,0xA9CA,0xA9AB,0xA9CB,0xAAD7,0xABD7,0x0000,0x0000,
- 0xAAD6,0xABD6,0xA9AD,0xA9CD,0xAAD9,0xABD9,0xAADB,0xABDB,
- 0xAADA,0xABDA,0xAADC,0xABDC,0xAADD,0xABDD,0xAADF,0xABDF,
- 0xAADE,0xABDE,0xAAE1,0xABE1,0xAAE0,0xABE0,0xA9AF,0xA9CF,
- 0xAAEC,0xABEC,0xAAE9,0xABE9,0xAAE6,0xABE6,0xAAEB,0xABEB,
- 0xAAE8,0xABE8,0xAAEA,0xABEA,0xAAF1,0xABF1,0xAAF4,0xABF4,
- 0xAAF3,0xAAF5,0xABF5,0xAAF7,0xABF7,0xAAF6,0xABF6,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0xAAA6,0xABA6,0xAAC3,
- 0xABC3,0xAAD5,0xABD5,0xAAE7,0xABE7,0xAAF0,0xABF0,0xAAED,
- 0xABED,0xAAEF,0xABEF,0xAAEE,0xABEE,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0xABB9,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-
- /* 0200h */
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xA2B0,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0xA2AF,0xA2B2,0xA2B6,0xA2B5,0x0000,0xA2B3,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-
- /* 0300h */
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0xA2B8,0xA2B9,0xA6E1,0x0000,
- 0xA6E2,0xA6E3,0xA6E4,0x0000,0xA6E7,0x0000,0xA6E9,0xA6EC,
- 0xA6F6,0x2621,0x2622,0x2623,0x2624,0x2625,0x2626,0x2627,
- 0x2628,0x2629,0x262A,0x262B,0x262C,0x262D,0x262E,0x262F,
- 0x2630,0x2631,0x0000,0x2632,0x2633,0x2634,0x2635,0x2636,
- 0x2637,0x2638,0xA6E5,0xA6EA,0xA6F1,0xA6F2,0xA6F3,0xA6F4,
- 0xA6FB,0x2641,0x2642,0x2643,0x2644,0x2645,0x2646,0x2647,
- 0x2648,0x2649,0x264A,0x264B,0x264C,0x264D,0x264E,0x264F,
- 0x2650,0x2651,0xA6F8,0x2652,0x2653,0x2654,0x2655,0x2656,
- 0x2657,0x2658,0xA6F5,0xA6FA,0xA6F7,0xA6F9,0xA6FC,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-
- /* 0400h */
- 0x0000,0x2727,0xA7C2,0xA7C3,0xA7C4,0xA7C5,0xA7C6,0xA7C7,
- 0xA7C8,0xA7C9,0xA7CA,0xA7CB,0xA7CC,0x0000,0xA7CD,0xA7CE,
- 0x2721,0x2722,0x2723,0x2724,0x2725,0x2726,0x2728,0x2729,
- 0x272A,0x272B,0x272C,0x272D,0x272E,0x272F,0x2730,0x2731,
- 0x2732,0x2733,0x2734,0x2735,0x2736,0x2737,0x2738,0x2739,
- 0x273A,0x273B,0x273C,0x273D,0x273E,0x273F,0x2740,0x2741,
- 0x2751,0x2752,0x2753,0x2754,0x2755,0x2756,0x2758,0x2759,
- 0x275A,0x275B,0x275C,0x275D,0x275E,0x275F,0x2760,0x2761,
- 0x2762,0x2763,0x2764,0x2765,0x2766,0x2767,0x2768,0x2769,
- 0x276A,0x276B,0x276C,0x276D,0x276E,0x276F,0x2770,0x2771,
- 0x0000,0x2757,0xA7F2,0xA7F3,0xA7F4,0xA7F5,0xA7F6,0xA7F7,
- 0xA7F8,0xA7F9,0xA7FA,0xA7FB,0xA7FC,0x0000,0xA7FD,0xA7FE
-};
-static const int ucs_a1_jis_table_min = 0x0000;
-static const int ucs_a1_jis_table_max = 0x0000 + (sizeof (ucs_a1_jis_table) / sizeof (unsigned short));
-
-
-static const unsigned short ucs_a2_jis_table[] = {
- /* 2000h */
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x213E,0x0000,0x0000,0x0000,0x0000,0x213D,0x2142,0x0000,
- 0x2146,0x2147,0x0000,0x0000,0x2148,0x2149,0x0000,0x0000,
- 0x2277,0x2278,0x0000,0x0000,0x0000,0x2145,0x2144,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x2273,0x0000,0x216C,0x216D,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x2228,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-
- /* 2100h */
- 0x0000,0x0000,0x0000,0x216E,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xA2F1,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0xA2EF,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x2272,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x222B,0x222C,0x222A,0x222D,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x224D,0x0000,0x224E,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-
- /* 2200h */
- 0x224F,0x0000,0x225F,0x2250,0x0000,0x0000,0x0000,0x2260,
- 0x223A,0x0000,0x0000,0x223B,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x215D,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x2265,0x0000,0x0000,0x2267,0x2167,0x0000,
- 0x225C,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x224A,
- 0x224B,0x2241,0x2240,0x2269,0x226A,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x2168,0x2268,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x2266,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x2262,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x2162,0x2261,0x0000,0x0000,0x0000,0x0000,0x2165,0x2166,
- 0x0000,0x0000,0x2263,0x2264,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x223E,0x223F,0x0000,0x0000,0x223C,0x223D,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x225D,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-
- /* 2300h */
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x225E,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-
- /* 2400h */
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-
- /* 2500h */
- 0x2821,0x282C,0x2822,0x282D,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x2823,0x0000,0x0000,0x282E,
- 0x2824,0x0000,0x0000,0x282F,0x2826,0x0000,0x0000,0x2831,
- 0x2825,0x0000,0x0000,0x2830,0x2827,0x283C,0x0000,0x0000,
- 0x2837,0x0000,0x0000,0x2832,0x2829,0x283E,0x0000,0x0000,
- 0x2839,0x0000,0x0000,0x2834,0x2828,0x0000,0x0000,0x2838,
- 0x283D,0x0000,0x0000,0x2833,0x282A,0x0000,0x0000,0x283A,
- 0x283F,0x0000,0x0000,0x2835,0x282B,0x0000,0x0000,0x283B,
- 0x0000,0x0000,0x2840,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x2836,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x2223,0x2222,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x2225,0x2224,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x2227,0x2226,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x2221,0x217E,
- 0x0000,0x0000,0x0000,0x217B,0x0000,0x0000,0x217D,0x217C,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x227E,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-
- /* 2600h */
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x217A,0x2179,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x216A,0x0000,0x2169,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x2276,0x0000,0x0000,0x2275,0x0000,0x2274,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-
- /* 2700h */
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-
- /* 2800h */
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-
- /* 2900h */
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-
- /* 2A00h */
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-
- /* 2B00h */
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-
- /* 2C00h */
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-
- /* 2D00h */
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-
- /* 2E00h */
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-
- /* 2F00h */
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-
- /* 3000h */
- 0x2121,0x2122,0x2123,0x2137,0x0000,0x2139,0x213A,0x213B,
- 0x2152,0x2153,0x2154,0x2155,0x2156,0x2157,0x2158,0x2159,
- 0x215A,0x215B,0x2229,0x222E,0x214C,0x214D,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x2141,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x2421,0x2422,0x2423,0x2424,0x2425,0x2426,0x2427,
- 0x2428,0x2429,0x242A,0x242B,0x242C,0x242D,0x242E,0x242F,
- 0x2430,0x2431,0x2432,0x2433,0x2434,0x2435,0x2436,0x2437,
- 0x2438,0x2439,0x243A,0x243B,0x243C,0x243D,0x243E,0x243F,
- 0x2440,0x2441,0x2442,0x2443,0x2444,0x2445,0x2446,0x2447,
- 0x2448,0x2449,0x244A,0x244B,0x244C,0x244D,0x244E,0x244F,
- 0x2450,0x2451,0x2452,0x2453,0x2454,0x2455,0x2456,0x2457,
- 0x2458,0x2459,0x245A,0x245B,0x245C,0x245D,0x245E,0x245F,
- 0x2460,0x2461,0x2462,0x2463,0x2464,0x2465,0x2466,0x2467,
- 0x2468,0x2469,0x246A,0x246B,0x246C,0x246D,0x246E,0x246F,
- 0x2470,0x2471,0x2472,0x2473,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x212B,0x212C,0x2135,0x2136,0x0000,
- 0x0000,0x2521,0x2522,0x2523,0x2524,0x2525,0x2526,0x2527,
- 0x2528,0x2529,0x252A,0x252B,0x252C,0x252D,0x252E,0x252F,
- 0x2530,0x2531,0x2532,0x2533,0x2534,0x2535,0x2536,0x2537,
- 0x2538,0x2539,0x253A,0x253B,0x253C,0x253D,0x253E,0x253F,
- 0x2540,0x2541,0x2542,0x2543,0x2544,0x2545,0x2546,0x2547,
- 0x2548,0x2549,0x254A,0x254B,0x254C,0x254D,0x254E,0x254F,
- 0x2550,0x2551,0x2552,0x2553,0x2554,0x2555,0x2556,0x2557,
- 0x2558,0x2559,0x255A,0x255B,0x255C,0x255D,0x255E,0x255F,
- 0x2560,0x2561,0x2562,0x2563,0x2564,0x2565,0x2566,0x2567,
- 0x2568,0x2569,0x256A,0x256B,0x256C,0x256D,0x256E,0x256F,
- 0x2570,0x2571,0x2572,0x2573,0x2574,0x2575,0x2576,0x0000,
- 0x0000,0x0000,0x0000,0x2126,0x213C,0x2133,0x2134,0x0000
-};
-static const int ucs_a2_jis_table_min = 0x2000;
-static const int ucs_a2_jis_table_max = 0x2000 + (sizeof (ucs_a2_jis_table) / sizeof (unsigned short));
-
-
-static const unsigned short ucs_i_jis_table[] = {
- /* 4E00h */
- 0x306C,0x437A,0xB0A1,0x3C37,0xB0A2,0xB0A3,0x0000,0x4B7C,
- 0x3E66,0x3B30,0x3E65,0x323C,0xB0A4,0x4954,0x4D3F,0x0000,
- 0x5022,0x312F,0xB0A5,0x0000,0x336E,0x5023,0x4024,0x5242,
- 0x3556,0x4A3A,0x0000,0x0000,0x0000,0x0000,0x3E67,0xB0A6,
- 0x0000,0x4E3E,0x0000,0xB0A7,0xB0A8,0x0000,0x4A42,0x0000,
- 0xB0A9,0x0000,0x5024,0xB0AA,0x0000,0x4366,0xB0AB,0xB0AC,
- 0xB0AD,0x5025,0x367A,0x0000,0x0000,0xB0AE,0x5026,0x0000,
- 0x345D,0x4330,0x0000,0x3C67,0x5027,0x0000,0x0000,0x5028,
- 0xB0AF,0xB0B0,0x5029,0x4735,0xB0B1,0x3557,0x0000,0xB0B2,
- 0x0000,0x0000,0x0000,0x4737,0x0000,0x4663,0x3843,0x4B33,
- 0x0000,0xB0B3,0x0000,0x0000,0x0000,0x6949,0x502A,0x3E68,
- 0x502B,0x3235,0xB0B4,0x0000,0xB0B5,0x3665,0x3870,0x4C69,
- 0x0000,0x0000,0x5626,0xB0B6,0x0000,0x0000,0x0000,0x0000,
- 0xB0B7,0xB0B8,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x4D70,0x0000,0x467D,0xB0B9,0xB0BA,0x0000,0x0000,
- 0x0000,0xB0BB,0x0000,0x0000,0x0000,0x0000,0x3425,0xB0BC,
- 0x3535,0x0000,0x502C,0x0000,0x0000,0x502D,0x4E3B,0x0000,
- 0x4D3D,0x4168,0x502F,0x3B76,0x4673,0xB0BD,0x5032,0x0000,
- 0x0000,0x313E,0x385F,0x0000,0x385E,0x3066,0xB0BE,0xB0BF,
- 0x4F4B,0x4F4A,0x0000,0x3A33,0x3021,0xB0C0,0x5033,0x5034,
- 0x5035,0x4B34,0x5036,0x0000,0x3872,0x3067,0x4B72,0x0000,
- 0x357C,0x0000,0x0000,0x357D,0x357E,0x4462,0x4E3C,0xB0C1,
- 0x5037,0x0000,0x0000,0x5038,0x0000,0x0000,0x5039,0x0000,
- 0x0000,0xB0C2,0x3F4D,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x3D3A,0x3F4E,0x503E,0xB0C3,0x503C,0x0000,0x503D,0x3558,
- 0x0000,0x0000,0x3A23,0x3270,0x0000,0x503B,0x503A,0x4A29,
- 0xB0C4,0x0000,0x0000,0x0000,0x3B46,0x3B45,0x423E,0x503F,
- 0x4955,0x4067,0xB0C5,0xB0C6,0x0000,0x2138,0x5040,0x5042,
- 0xB0C7,0xB0C8,0xB0C9,0x4265,0x4E61,0x304A,0x0000,0x0000,
- 0xB0CA,0x0000,0x0000,0x0000,0x0000,0x5041,0x323E,0xB0CB,
- 0x3644,0xB0CC,0x4367,0xB0CD,0x0000,0xB0CE,0x376F,0x5043,
- 0x0000,0x0000,0x0000,0x4724,0x0000,0xB0CF,0xB0D0,0xB0D1,
-
- /* 4F00h */
- 0xB0D2,0x346B,0xB0D3,0xB0D4,0x0000,0x0000,0x0000,0x0000,
- 0xB0D5,0x5044,0x304B,0xB0D6,0xB0D7,0x3860,0x346C,0x497A,
- 0x4832,0x3559,0xB0D8,0x0000,0x0000,0xB0D9,0xB0DA,0xB0DB,
- 0x0000,0xB0DC,0x3271,0x0000,0x5067,0x4541,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xB0DD,0x476C,
- 0x5046,0xB0DE,0x0000,0xB0E0,0x483C,0xB0E1,0x4E62,0xB0E2,
- 0x3F2D,0xB0E3,0x3B47,0xB0E4,0x3B77,0x3240,0xB0E5,0x0000,
- 0xB0E6,0x0000,0xB0E7,0x4451,0x0000,0x0000,0x4322,0x504A,
- 0xB0E8,0xB0E9,0x0000,0xB0EA,0xB0EB,0x304C,0x4463,0x3D3B,
- 0x3A34,0x4D24,0xB0EC,0x424E,0xB0ED,0x323F,0xB0EE,0x5049,
- 0xB0EF,0x4D3E,0x5045,0x5047,0x3A6E,0x5048,0x5524,0xB0F0,
- 0xB0DF,0x0000,0x0000,0xB0F1,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x5050,0xB0F2,0x0000,0xB0F3,0x0000,0xB0F4,0x5053,
- 0x5051,0xB0F5,0x0000,0x3242,0x0000,0x4A3B,0x504B,0xB0F6,
- 0xB0F7,0xB0F8,0xB0F9,0x504F,0x3873,0xB0FA,0xB0FB,0x3B48,
- 0x0000,0xB0FC,0xB0FD,0x3426,0xB0FE,0xB1A1,0x5054,0x0000,
- 0x504C,0xB1A2,0xB1A3,0x4E63,0xB1A4,0x3B78,0xB1A5,0x504D,
- 0xB1A6,0x5052,0xB1A7,0xB1A8,0xB1A9,0x0000,0x5055,0xB1AA,
- 0x504E,0xB1AB,0xB1AC,0x3621,0x0000,0x304D,0xB1AD,0xB1AE,
- 0x3622,0x3241,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x5525,0x0000,0x4B79,0x496E,0x3874,
- 0x0000,0x0000,0xB1AF,0x0000,0x0000,0x3F2F,0x4E37,0xB1B0,
- 0x0000,0xB1B1,0x0000,0xB1B2,0xB1B3,0xB1B4,0xB1B5,0x4A58,
- 0xB1B6,0xB1B7,0x3738,0x4225,0x3264,0xB1B8,0xB1B9,0x0000,
- 0xB1BA,0xB1BB,0x3D53,0xB1BC,0xB1BD,0xB1BE,0x5059,0xB1BF,
- 0x505E,0x505C,0xB1C0,0x0000,0x5057,0x0000,0x0000,0x422F,
- 0x505A,0x0000,0x505D,0x505B,0xB1C1,0x4A5D,0x0000,0x5058,
- 0xB1C2,0x3F2E,0xB1C3,0x4B73,0x505F,0x5060,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x3D24,0x506D,
- 0xB1C4,0x0000,0xB1C5,0x4750,0x0000,0x4936,0x5068,0x0000,
- 0x4A70,0x0000,0x3236,0x0000,0xB1C6,0xB1C7,0x506C,0xB1C8,
-
- /* 5000h */
- 0xB1C9,0xB1CA,0x0000,0x0000,0xB1CB,0x5066,0x506F,0xB1CC,
- 0x0000,0x4152,0xB1CD,0x3844,0xB1CE,0x475C,0xB1CF,0x6047,
- 0xB1D0,0x506E,0x455D,0xB1D1,0x5063,0x0000,0x3876,0xB1D2,
- 0xB1D3,0x3875,0x5061,0xB1D4,0xB1D5,0xB1D6,0xB1D7,0x3C5A,
- 0x0000,0x5069,0xB1D8,0x4A6F,0x434D,0x5065,0x3771,0xB1D9,
- 0x5062,0x506A,0x5064,0x4E51,0x506B,0x4F41,0xB1DA,0x0000,
- 0xB1DB,0x0000,0xB1DC,0xB1DD,0x0000,0xB1DE,0x3666,0x0000,
- 0x0000,0x3770,0x0000,0xB1F6,0x0000,0x0000,0x0000,0x0000,
- 0xB1DF,0xB1E0,0xB1E1,0x5070,0x0000,0xB1E2,0xB1E3,0x5071,
- 0x5075,0x304E,0xB1E4,0x0000,0xB1E5,0x0000,0xB1E6,0x4A50,
- 0x5074,0xB1E7,0xB1E8,0xB1E9,0x0000,0x5073,0x5077,0xB1EA,
- 0x0000,0xB1EB,0x5076,0x0000,0x4464,0x0000,0x0000,0xB1EC,
- 0xB1ED,0x0000,0xB1EE,0xB1EF,0x0000,0x3772,0xB1F0,0xB1F1,
- 0x0000,0x0000,0xB1F2,0x0000,0x5078,0xB1F3,0x0000,0x0000,
- 0xB1F4,0xB1F5,0x3C45,0x0000,0x4226,0x4465,0x3676,0x0000,
- 0x5079,0x0000,0x0000,0x0000,0x0000,0x3536,0x0000,0x0000,
- 0x507A,0xB1F7,0x0000,0xB1F8,0xB1F9,0x507C,0xB1FA,0x0000,
- 0x0000,0x0000,0xB1FB,0x0000,0x0000,0x4B35,0xB1FC,0xB1FD,
- 0xB1FE,0x3766,0xB2A1,0xB2A2,0xB2A3,0x0000,0xB2A4,0x0000,
- 0x3B31,0x4877,0x507B,0xB2A5,0xB2A6,0x0000,0xB2A7,0xB2A8,
- 0xB2A9,0xB2AA,0xB2AB,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0xB2AC,0x0000,0x3A45,0x4D43,0x0000,0xB2AD,
- 0xB2AE,0x0000,0x507E,0x5123,0x507D,0x3A44,0x0000,0x3D7D,
- 0x0000,0xB2AF,0xB2B0,0x0000,0x0000,0xB2B1,0x3739,0x0000,
- 0xB2B2,0x0000,0x5124,0xB2B3,0xB2B4,0x364F,0x0000,0xB2B5,
- 0x0000,0x5121,0x5122,0x0000,0xB2B6,0x462F,0xB2B7,0x417C,
- 0xB2B8,0x3623,0x0000,0xB2B9,0xB2BA,0x4B4D,0x5125,0x0000,
- 0xB2BB,0x0000,0x4E3D,0x0000,0xB2BC,0xB2BD,0x5126,0xB2BE,
- 0x0000,0x0000,0xB2BF,0x5129,0xB2C0,0x5127,0xB2C1,0x414E,
- 0xB2C2,0xB2C3,0x0000,0x0000,0x0000,0x5128,0x512A,0xB2C4,
- 0x0000,0xB2C5,0xB2D1,0x0000,0x0000,0x512C,0xB2C6,0x0000,
- 0x0000,0x512B,0xB2C7,0x4A48,0x0000,0x0000,0xB2C8,0x0000,
-
- /* 5100h */
- 0x3537,0x512E,0x512F,0xB2C9,0x322F,0x0000,0xB2CA,0xB2CB,
- 0xB2CC,0x512D,0x0000,0xB2CD,0xB2CE,0xB2CF,0xB2D0,0x0000,
- 0xB2D2,0x0000,0x3C74,0x0000,0x5132,0x5131,0x5130,0xB2D3,
- 0x5056,0xB2D4,0x5133,0xB2D5,0xB2D6,0xB2D7,0xB2D8,0x3D7E,
- 0x0000,0x5134,0x0000,0xB2D9,0x0000,0x0000,0x0000,0xB2DA,
- 0xB2DB,0x0000,0x4D25,0x0000,0xB2DC,0xB2DD,0x0000,0xB2DE,
- 0x0000,0xB2DF,0x4C59,0xB2E0,0xB2E1,0xB2E2,0x0000,0x5136,
- 0xB2E3,0xB2E4,0x5135,0x5138,0x5137,0x0000,0x0000,0x5139,
- 0x513A,0x3074,0xB2E5,0x3835,0x373B,0x3D3C,0x437B,0x3624,
- 0x4068,0x3877,0xB2E6,0x396E,0x513C,0x4C48,0x4546,0xB2E7,
- 0x3B79,0x0000,0x513B,0xB2E8,0x513D,0xB2E9,0x0000,0xB2EA,
- 0xB2EB,0x0000,0x455E,0x0000,0x3375,0x0000,0x0000,0xB2EC,
- 0x0000,0x0000,0x513E,0x0000,0xB2ED,0x467E,0xB2EE,0x0000,
- 0x4134,0x5140,0x5141,0x482C,0x3878,0x4F3B,0x5142,0x0000,
- 0x0000,0x3626,0x0000,0x0000,0x0000,0x4A3C,0x4236,0x3671,
- 0x4535,0x0000,0x0000,0x0000,0x3773,0x0000,0xB2EF,0x0000,
- 0x5143,0x0000,0x5144,0xB2F0,0xB2F1,0x4662,0x315F,0x0000,
- 0x0000,0x5147,0x3A7D,0xB2F2,0x5146,0x3A46,0xB2F3,0x5148,
- 0x666E,0x5149,0x4B41,0x514A,0x0000,0x514B,0x514C,0x3E69,
- 0xB2F4,0x3C4C,0x0000,0x0000,0x0000,0xB2F5,0x0000,0x0000,
- 0x3427,0xB2F6,0x514F,0xB2F7,0x514D,0x4C3D,0x514E,0x0000,
- 0x495A,0x5150,0x5151,0x5152,0x455F,0xB2F8,0x0000,0x0000,
- 0x5156,0x5154,0x5155,0x5153,0x3A63,0x5157,0x4C6A,0x4E64,
- 0xB2F9,0x0000,0xB2FA,0x0000,0xB2FB,0x5158,0xB2FC,0xB2FD,
- 0x0000,0x0000,0xB2FE,0x0000,0x4028,0x5159,0x3D5A,0x0000,
- 0xB3A1,0x515A,0x0000,0x437C,0x4E3F,0x4560,0x0000,0xB3A2,
- 0x0000,0xB3A3,0xB3A4,0xB3A5,0x0000,0xB3A6,0x5245,0x0000,
- 0xB3A7,0x0000,0x0000,0x515B,0x7425,0x3645,0xB3A8,0x0000,
- 0x515C,0x4B5E,0xB3A9,0x0000,0x0000,0xB3AA,0x3D68,0x427C,
- 0x0000,0x515E,0x4664,0x0000,0x0000,0x515F,0xB3AB,0x0000,
- 0x5160,0x332E,0xB3AC,0xB3AD,0xB3AE,0x5161,0x3627,0xB3AF,
- 0x464C,0x317A,0x3D50,0x0000,0x0000,0x4821,0x5162,0x0000,
-
- /* 5200h */
- 0x4561,0xB3B0,0xB3B1,0x3F4F,0x5163,0xB3B2,0x4A2C,0x405A,
- 0x3422,0x0000,0x3429,0x5164,0x0000,0x0000,0x5166,0x0000,
- 0x0000,0x373A,0xB3B3,0xB3B4,0x5165,0xB3B5,0xB3B6,0x4E73,
- 0xB3B7,0x0000,0x0000,0x0000,0x0000,0x3D69,0x0000,0x0000,
- 0x0000,0x0000,0xB3B8,0x0000,0x483D,0x4A4C,0x0000,0x5167,
- 0xB3B9,0x4D78,0x5168,0x0000,0x0000,0x0000,0x5169,0x0000,
- 0x457E,0xB3BA,0xB3BB,0x516A,0x0000,0xB3BC,0x4029,0x3A7E,
- 0x3774,0x516B,0x3B49,0x396F,0xB3BD,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x4466,0x516D,0xB3BE,0x0000,0x4227,
- 0x0000,0xB3BF,0x3A6F,0x516E,0x516F,0x4130,0x0000,0x516C,
- 0x0000,0x0000,0x0000,0x0000,0x5171,0xB3C0,0x4B36,0xB3C1,
- 0xB3C2,0x0000,0xB3C3,0x3964,0xB3C4,0x0000,0x5170,0xB3C5,
- 0xB3C6,0xB3C7,0x0000,0x3775,0x3A5E,0x476D,0xB3C8,0x0000,
- 0x0000,0x5174,0x5172,0x0000,0x0000,0x0000,0xB3C9,0x497B,
- 0x3E6A,0x517B,0x3364,0x5175,0x5173,0x414F,0x0000,0xB3CA,
- 0xB3CB,0xB3CC,0x0000,0x0000,0x0000,0x5177,0x0000,0x5176,
- 0xB3CD,0x0000,0xB3CE,0x3344,0x0000,0xB3CF,0x0000,0x3760,
- 0x517C,0x4E2D,0xB3D0,0x0000,0xB3D1,0x5178,0x0000,0x0000,
- 0x0000,0x517D,0x517A,0xB3D2,0x5179,0xB3D3,0xB3D4,0xB3D5,
- 0xB3D6,0x0000,0xB3D7,0x4E4F,0xB3D8,0x0000,0x0000,0x3879,
- 0x3243,0x0000,0x0000,0x4E74,0xB3D9,0xB3DA,0xB3DB,0xB3DC,
- 0x0000,0x3D75,0x4558,0x3965,0x5222,0x5223,0x0000,0xB3DD,
- 0xB3DE,0x4E65,0x0000,0x0000,0x4F2B,0x5225,0xB3DF,0xB3E0,
- 0xB3E1,0x387A,0xB3E2,0xB3E3,0x5224,0xB3E4,0x332F,0x0000,
- 0xB3E5,0x5226,0x0000,0x4B56,0xB3E6,0x443C,0xB3E7,0x4D26,
- 0xB3E8,0x4A59,0x0000,0x0000,0xB3E9,0x5227,0x0000,0xB3EA,
- 0x0000,0xB3EB,0x7055,0x0000,0xB3EC,0x4630,0xB3ED,0x5228,
- 0x342A,0x4C33,0x0000,0xB3EE,0xB3EF,0x3E21,0x5229,0x4A67,
- 0x522D,0xB3F0,0x402A,0x522A,0x3650,0xB3F1,0x522B,0x342B,
- 0xB3F2,0xB3F3,0xB3F4,0x0000,0xB3F5,0x0000,0x0000,0x0000,
- 0xB3F6,0xB3F7,0x372E,0x522E,0xB3F8,0x522F,0xB3F9,0xB3FA,
- 0x5230,0x5231,0x3C5B,0x0000,0x0000,0x0000,0x387B,0x4C5E,
-
- /* 5300h */
- 0xB3FB,0x4C68,0x4677,0xB3FC,0x0000,0x4A71,0x5232,0x0000,
- 0x5233,0x0000,0xB3FD,0xB3FE,0xB4A1,0x5235,0x0000,0x5237,
- 0x5236,0xB4A2,0x0000,0xB4A3,0x0000,0x5238,0x323D,0x4B4C,
- 0xB4A4,0x3A7C,0x5239,0xB4A5,0xB4A6,0x4159,0xB4A7,0xB4A8,
- 0x3E22,0x3629,0x0000,0x523A,0x0000,0xB4A9,0x0000,0xB4AA,
- 0xB4AB,0xB4AC,0x485B,0xB4AD,0xB4AE,0xB4AF,0x0000,0x523B,
- 0xB4B0,0x523C,0xB4B1,0x523D,0x0000,0xB4B2,0x0000,0x0000,
- 0x523E,0x4924,0x3668,0x3065,0xB4B3,0xB4B4,0xB4B5,0x463F,
- 0x523F,0x3D3D,0xB4B6,0x4069,0x0000,0x5241,0x5240,0x3E23,
- 0x3861,0x5243,0x483E,0xB4B8,0xB4B7,0x5244,0x0000,0x0000,
- 0x0000,0x485C,0x4234,0x426E,0x3628,0x0000,0x0000,0x466E,
- 0x4331,0xB4B9,0x476E,0xB4BA,0x4B4E,0x0000,0x5246,0x0000,
- 0x406A,0xB4BB,0x0000,0xB4BC,0x0000,0xB4BD,0x3735,0x0000,
- 0x0000,0x5247,0x0000,0x0000,0xB4BE,0xB4BF,0x5248,0x312C,
- 0x3075,0x346D,0xB4C0,0x4228,0x3551,0x4D71,0x0000,0x524B,
- 0x3237,0xB4C1,0x0000,0x524A,0x0000,0x0000,0xB4C2,0x362A,
- 0x0000,0x0000,0x524C,0xB4C3,0x4C71,0x0000,0x0000,0xB4C4,
- 0xB4C5,0x0000,0x0000,0x0000,0x0000,0x0000,0xB4C6,0x0000,
- 0x0000,0x0000,0x0000,0xB4C7,0xB4C8,0x0000,0x524D,0x0000,
- 0x4E52,0xB4C9,0x387C,0x0000,0x0000,0xB4CA,0x0000,0x3836,
- 0x524E,0xB4CB,0x0000,0x0000,0xB4CC,0x5250,0x524F,0x0000,
- 0x3F5F,0x3139,0xB4CD,0xB4CE,0x0000,0x315E,0x5251,0xB4CF,
- 0x5252,0x0000,0xB4D0,0x3837,0xB4D1,0xB4D2,0x5253,0xB4D3,
- 0xB4D4,0x0000,0xB4D5,0x356E,0x0000,0xB4D6,0x0000,0x0000,
- 0xB4D7,0x0000,0x3B32,0x5254,0x0000,0xB4D8,0x0000,0x0000,
- 0x4B74,0x3A35,0x355A,0x4D27,0x4150,0x483F,0x3C7D,0xB4D9,
- 0x0000,0x0000,0xB4DA,0xB4DB,0x3D47,0xB4DC,0x3C68,0x3C75,
- 0x0000,0x3D76,0xB4DD,0x4840,0x0000,0xB4DE,0xB4DF,0x5257,
- 0xB4E0,0x3143,0x4151,0x387D,0x3845,0x3667,0xB4E1,0xB4E2,
- 0x525B,0x4321,0x427E,0x362B,0x3E24,0x525C,0x525A,0x3244,
- 0x4266,0x3C38,0x3B4B,0x3126,0x0000,0xB4E3,0x3370,0x3966,
- 0x3B4A,0x0000,0x525D,0x0000,0x0000,0x0000,0x0000,0x0000,
-
- /* 5400h */
- 0x0000,0x525E,0xB4E4,0x3549,0x3346,0x0000,0x0000,0x0000,
- 0x3967,0x3548,0x445F,0x3125,0x4631,0x4C3E,0x3921,0x4D79,
- 0x4547,0x387E,0x0000,0xB4E5,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0xB4E6,0x372F,0x0000,0x5267,0x0000,0x3663,
- 0x4B4A,0xB4E7,0x0000,0x0000,0x0000,0x0000,0x485D,0xB4E8,
- 0xB4E9,0x5266,0xB4EA,0x345E,0x5261,0x5262,0x5264,0xB4EB,
- 0x0000,0xB4EC,0x0000,0x0000,0xB4ED,0xB4EE,0x5265,0x0000,
- 0x355B,0x3F61,0x0000,0x4A2D,0x5263,0x525F,0x3863,0x0000,
- 0x5260,0x0000,0x4F24,0xB4EF,0xB4F0,0x0000,0x4A72,0xB4F1,
- 0x4468,0x3862,0x3970,0x0000,0x0000,0xB4F2,0x5268,0xB4F3,
- 0x0000,0x465D,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xB4F4,0x526C,
- 0x0000,0x0000,0xB4F5,0x0000,0xB4F6,0x0000,0xB4F7,0xB4F8,
- 0x3C7E,0xB4F9,0x3C76,0xB4FA,0x0000,0xB4FB,0xB4FC,0x0000,
- 0x526F,0x526D,0x0000,0x4C23,0xB4FD,0x526A,0x5273,0x526E,
- 0x0000,0x0000,0x0000,0x5271,0x3846,0x4C3F,0x0000,0xB4FE,
- 0x5272,0xB5A1,0x0000,0xB5A2,0x5274,0xB5A3,0x5276,0x0000,
- 0xB5A4,0xB5A5,0x0000,0x3A70,0x4F42,0xB5A6,0x526B,0x5269,
- 0x5275,0xB5A7,0x5270,0x0000,0x0000,0xB5A8,0xB5A9,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0xB5AA,0x0000,0x0000,0xB5AB,
- 0x0000,0xB5AC,0x5278,0x0000,0x5323,0x527A,0xB5AD,0xB5AE,
- 0x527E,0xB5AF,0xB5B0,0x5321,0x527B,0xB5B1,0xB5B2,0x533E,
- 0x0000,0xB5B3,0x3A69,0x3331,0x0000,0x0000,0x0000,0xB5B4,
- 0x5279,0xB5B5,0xB5B6,0xB5B7,0x5325,0x3076,0x5324,0xB5B8,
- 0x3025,0x494A,0x5322,0x0000,0x527C,0x0000,0xB5B9,0x5277,
- 0x527D,0x3A48,0xB5BA,0x0000,0x0000,0xB5BB,0xB5BC,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x5326,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0xB5BD,0x3077,0x532F,0x0000,0x0000,0x5327,0x5328,0x0000,
- 0x3E25,0x4B69,0xB5BE,0x0000,0xB5BF,0x532D,0x532C,0xB5C0,
- 0x0000,0x0000,0x452F,0x0000,0x0000,0x0000,0xB5C1,0x0000,
- 0x0000,0x0000,0x532E,0x0000,0xB5C2,0x532B,0xB5C3,0xB5C4,
-
- /* 5500h */
- 0xB5C5,0xB5C6,0x0000,0x0000,0x3134,0xB5C7,0x3A36,0x3F30,
- 0xB5C8,0xB5C9,0x0000,0x0000,0xB5CA,0xB5CB,0xB5CC,0x5329,
- 0x4562,0x0000,0x0000,0x0000,0x532A,0xB5CD,0x3022,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0xB5CE,0xB5CF,0x0000,0x0000,0x5334,0x4D23,
- 0x0000,0x3E27,0xB5D0,0x533A,0x0000,0xB5D1,0xB5D2,0x0000,
- 0x5339,0x5330,0x0000,0xB5D3,0xB5D4,0xB5D5,0x4243,0x0000,
- 0x5331,0xB5D6,0x0000,0x0000,0x426F,0x5336,0x3E26,0xB5D7,
- 0x0000,0xB5D8,0xB5D9,0x0000,0x5333,0xB5DA,0x0000,0x4C64,
- 0xB5DB,0xB5DC,0x0000,0x373C,0x0000,0x0000,0x5337,0x5338,
- 0xB5DD,0x0000,0xB5DE,0xB5DF,0x5335,0x533B,0xB5E0,0x0000,
- 0xB5E1,0xB5E2,0x0000,0x5332,0xB5E3,0x0000,0xB5E4,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x5341,0x5346,0x0000,0x5342,0xB5E5,
- 0x533D,0xB5E6,0xB5E7,0x5347,0x4131,0x0000,0xB5E8,0x5349,
- 0xB5E9,0x3922,0x533F,0x437D,0x0000,0x0000,0xB5EA,0xB5EB,
- 0x0000,0xB5EC,0xB5ED,0xB5EE,0xB5EF,0x0000,0x0000,0xB5F0,
- 0x5343,0x533C,0x342D,0x0000,0x346E,0x3365,0x5344,0x5340,
- 0x0000,0x0000,0x0000,0xB5F1,0xB5F2,0x0000,0x0000,0x3776,
- 0x534A,0x5348,0x4153,0x354A,0x362C,0xB5F3,0x5345,0x0000,
- 0x3674,0x0000,0xB5F4,0x0000,0x0000,0x0000,0x3144,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xB5F5,
- 0x0000,0xB5F6,0x0000,0xB5F7,0x534E,0x534C,0xB5F8,0x5427,
- 0x0000,0xB5F9,0x0000,0xB5FA,0xB5FB,0x0000,0xB5FC,0x0000,
- 0x0000,0xB5FD,0xB5FE,0xB6A1,0x5351,0x0000,0x0000,0xB6A2,
- 0xB6A3,0x0000,0x534B,0xB6A4,0x534F,0x0000,0xB6A5,0x534D,
- 0x0000,0x0000,0xB6A6,0x3B4C,0x5350,0x0000,0x0000,0x0000,
- 0x0000,0xB6A7,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xB6A8,0x5353,
- 0x0000,0x5358,0x0000,0x0000,0x0000,0x5356,0x5355,0xB6A9,
-
- /* 5600h */
- 0x0000,0x0000,0x0000,0x0000,0x0000,0xB6AA,0x4332,0x0000,
- 0xB6AB,0x3245,0xB6AC,0x0000,0x0000,0xB6AD,0xB6AE,0xB6AF,
- 0xB6B0,0xB6B1,0xB6B2,0x0000,0x5352,0x0000,0x5354,0x3E28,
- 0x3133,0xB6B3,0x0000,0x5357,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x325E,0x0000,0x0000,0xB6B4,0x0000,0x0000,0x5362,
- 0xB6B5,0x3E7C,0x535E,0xB6B6,0x535C,0xB6B7,0x535D,0xB6B8,
- 0x535F,0xB6B9,0x0000,0xB6BA,0xB6BB,0xB6BC,0x0000,0xB6BD,
- 0xB6BE,0xB6BF,0x313D,0xB6C0,0xB6C1,0x0000,0xB6C2,0x0000,
- 0x0000,0xB6C3,0x0000,0xB6C4,0x4139,0xB6C5,0x5359,0xB6C6,
- 0x535A,0x0000,0x0000,0x0000,0xB6C7,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x337A,0x0000,0x0000,0xB6C8,0x0000,
- 0xB6C9,0xB6CA,0xB6CB,0xB6CC,0x5361,0x0000,0xB6CD,0x0000,
- 0x346F,0xB6CE,0x5364,0x5360,0x5363,0xB6CF,0x0000,0xB6D0,
- 0x0000,0xB6D1,0xB6D2,0x0000,0x4A2E,0xB6D3,0x0000,0x0000,
- 0x4655,0x0000,0x4838,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x5366,0x0000,0x0000,0x0000,0xB6D4,0xB6D5,0x5365,0x3345,
- 0xB6D6,0x0000,0x5367,0xB6D7,0xB6D8,0x0000,0x0000,0x536A,
- 0x0000,0x0000,0x0000,0x0000,0x5369,0xB6D9,0x0000,0x0000,
- 0x0000,0xB6DA,0xB6DB,0x0000,0x0000,0xB6DC,0xB6DD,0xB6DE,
- 0x5368,0x0000,0x4739,0x0000,0x0000,0x536B,0xB6DF,0xB6E0,
- 0xB6E1,0xB6E2,0x0000,0xB6E3,0xB6E4,0xB6E5,0x536C,0x0000,
- 0x0000,0xB6E6,0x0000,0xB6E7,0x536E,0x0000,0x536D,0xB6E8,
- 0x0000,0x0000,0x0000,0x0000,0x5370,0x0000,0xB6E9,0x0000,
- 0x5373,0x5371,0x536F,0x5372,0x0000,0xB6EA,0x0000,0x0000,
- 0x5374,0xB6EB,0xB6EC,0xB6ED,0xB6F0,0xB6F1,0x5375,0xB6EE,
- 0xB6EF,0x5376,0x0000,0x5377,0x0000,0x0000,0x0000,0x5378,
- 0x5145,0xB6F2,0x3C7C,0x3B4D,0xB6F3,0xB6F4,0x3273,0xB6F5,
- 0x3078,0xB6F6,0x0000,0x4344,0xB6F7,0xB6F8,0xB6F9,0xB6FA,
- 0xB6FB,0x0000,0x0000,0xB6FD,0x0000,0xB6FE,0x5379,0x0000,
- 0x3A24,0xB6FC,0x304F,0x3F5E,0x0000,0x0000,0xB7A1,0xB7A2,
- 0x0000,0x537A,0x3847,0x0000,0x0000,0x3971,0x0000,0x537C,
-
- /* 5700h */
- 0x537B,0xB7A3,0xB7A4,0x4A60,0x537D,0x0000,0x0000,0xB7A5,
- 0x5421,0x537E,0xB7A6,0x5422,0xB7A7,0x5423,0x0000,0x3777,
- 0x0000,0xB7A8,0x3160,0x5424,0x0000,0xB7A9,0x5426,0x0000,
- 0x5425,0x0000,0xB7AA,0xB7AB,0x5428,0xB7AC,0x0000,0x455A,
- 0xB7AD,0x0000,0xB7AE,0xB7AF,0xB7B0,0xB7B1,0x5429,0x3035,
- 0x3A5F,0xB7B2,0xB7B3,0x0000,0xB7B4,0x373D,0xB7B5,0xB7B6,
- 0x434F,0x0000,0x0000,0xB7B7,0xB7B8,0x0000,0x0000,0x542A,
- 0x542B,0x0000,0x0000,0x542D,0x0000,0xB7B9,0xB7BA,0xB7BB,
- 0x542E,0x0000,0x3A64,0x0000,0x0000,0xB7BC,0xB7BD,0x3651,
- 0x0000,0x0000,0x4B37,0x0000,0xB7BE,0xB7BF,0x542C,0x542F,
- 0x3A41,0x3923,0xB7C0,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x5433,0xB7C1,0x0000,0x3A25,0xB7C2,0x4333,0xB7C3,
- 0xB7C4,0x5430,0x445A,0xB7C5,0x0000,0xB7C6,0xB7C7,0xB7C8,
- 0xB7C9,0xB7CA,0x0000,0xB7CB,0xB7CC,0xB7CD,0x0000,0xB7CE,
- 0x0000,0xB7CF,0xB7D0,0xB7D1,0xB7D2,0x0000,0xB7D3,0x5434,
- 0x0000,0xB7D4,0x3F62,0xB7D5,0x0000,0x0000,0x0000,0x0000,
- 0x5432,0x5435,0x0000,0x373F,0xB7D6,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x5436,0xB7D7,0xB7E0,0x0000,0xB7D8,
- 0x0000,0xB7D9,0xB7DA,0x0000,0xB7DB,0xB7DC,0xB7DD,0xB7DE,
- 0x5437,0xB7DF,0x3924,0x3340,0x5439,0x0000,0x0000,0xB7E1,
- 0xB7E2,0xB7E3,0x543A,0x0000,0xB7E4,0x0000,0x0000,0x0000,
- 0x543B,0x0000,0x0000,0x5438,0x0000,0x0000,0x0000,0x0000,
- 0xB7E5,0x0000,0x0000,0x0000,0x0000,0xB7E6,0x0000,0x0000,
- 0x5431,0x0000,0x0000,0x543C,0x0000,0x0000,0x543D,0xB7E7,
- 0xB7E8,0x0000,0x0000,0x4B64,0xB7E9,0x0000,0x3E6B,0xB7EA,
- 0x0000,0x0000,0x543F,0x5440,0x543E,0xB7EB,0x5442,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x4738,0xB7EC,0xB7ED,0x3068,
- 0x4956,0xB7FE,0x0000,0x5443,0xB7EE,0x0000,0xB7EF,0xB7F0,
- 0x0000,0xB7F1,0x0000,0x0000,0x0000,0xB7F2,0x0000,0x0000,
- 0xB7F3,0x0000,0x0000,0x0000,0x3E7D,0xB7F4,0xB7F5,0x3C39,
- 0xB7F6,0x475D,0x3470,0x0000,0x3A6B,0xB7F7,0xB7F8,0xB7F9,
-
- /* 5800h */
- 0x4B59,0x0000,0x4632,0xB7FA,0xB7FB,0x3778,0x424F,0x0000,
- 0xB7FC,0xB7FD,0x5441,0x5444,0xB8A1,0xB8A2,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x4244,0x0000,0x0000,
- 0x0000,0x5445,0x0000,0xB8A3,0x0000,0x5446,0xB8A4,0xB8A5,
- 0xB8A6,0x5448,0x0000,0x0000,0x4469,0x0000,0xB8A7,0xB8A8,
- 0x0000,0x0000,0x342E,0x0000,0x0000,0xB8A9,0x0000,0x7421,
- 0x3161,0x4A73,0xB8AA,0x0000,0x3E6C,0x4548,0x0000,0x0000,
- 0x0000,0xB8AB,0x3A66,0x0000,0x0000,0x544E,0x0000,0xB8AC,
- 0x4A3D,0x4E5D,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0xB8AD,0x3274,0x544A,0xB8AE,0xB8AF,0x0000,0xB8B0,
- 0xB8B1,0x413A,0x544D,0x0000,0x4563,0xB8B2,0x0000,0x4549,
- 0x4564,0x4839,0x444D,0x0000,0x0000,0x0000,0x3A49,0xB8B3,
- 0x0000,0xB8B4,0x5449,0x0000,0xB8B5,0x0000,0x0000,0xB8B6,
- 0xB8B7,0x3176,0x0000,0x4536,0x0000,0x0000,0x0000,0x0000,
- 0x544B,0x0000,0x5447,0x0000,0x0000,0x3F50,0x0000,0x0000,
- 0xB8B8,0x544F,0x0000,0x0000,0xB8B9,0x0000,0x3D4E,0xB8BA,
- 0xB8BB,0xB8BC,0x0000,0x362D,0x0000,0x5450,0x0000,0xB8BD,
- 0xB8BE,0xB8BF,0xB8C0,0x0000,0xB8C1,0xB8C2,0x0000,0xB8C3,
- 0xB8C4,0x0000,0x0000,0x4A68,0xB8C5,0x0000,0xB8C6,0x417D,
- 0x0000,0x0000,0x0000,0x0000,0x4446,0xB8C7,0x0000,0x5452,
- 0xB8C8,0xB8C9,0xB8CA,0x0000,0x0000,0x0000,0xB8CB,0x0000,
- 0x4B4F,0xB8CC,0x0000,0x5453,0x0000,0x0000,0x5458,0x0000,
- 0x0000,0xB8CD,0xB8CE,0x4A2F,0x0000,0x0000,0x0000,0x0000,
- 0x5457,0x5451,0x5454,0x5456,0xB8D0,0x0000,0x3A26,0x0000,
- 0x0000,0x4A49,0xB8D1,0x0000,0xB8CF,0x5459,0x0000,0x4345,
- 0xB8D2,0x0000,0x3275,0x0000,0x3E6D,0xB8D3,0xB8D4,0x0000,
- 0xB8D5,0x545B,0xB8D6,0x545A,0xB8D7,0x3968,0xB8D8,0x545C,
- 0x545E,0x545D,0xB8D9,0x0000,0x5460,0xB8DA,0x5455,0x5462,
- 0x0000,0xB8DB,0xB8DC,0x0000,0x5461,0x545F,0x0000,0x0000,
- 0x0000,0xB8DD,0x0000,0x3B4E,0x3F51,0x0000,0x4154,0x5463,
- 0x403C,0x306D,0x4764,0xB8DE,0x0000,0x0000,0x0000,0x445B,
- 0x0000,0x5465,0x5464,0x5466,0x5467,0x5468,0x0000,0x0000,
-
- /* 5900h */
- 0x0000,0x0000,0x5469,0x0000,0x0000,0xB8DF,0xB8E0,0x0000,
- 0x0000,0x4A51,0x546A,0xB8E1,0xB8E2,0x0000,0x0000,0x3246,
- 0x546B,0x0000,0xB8E3,0xB8E4,0xB8E5,0x4D3C,0x3330,0x0000,
- 0x5249,0x3D48,0x423F,0x546C,0x4C6B,0xB8E7,0x0000,0x0000,
- 0x0000,0xB8E8,0x4C34,0xB8E9,0xB8EA,0x546E,0x0000,0x4267,
- 0xB8EB,0x4537,0x4240,0x4957,0x546F,0x5470,0x317B,0xB8EC,
- 0xB8ED,0x3C3A,0x5471,0xB8EE,0x0000,0xB8EF,0xB8F0,0x3050,
- 0x5472,0x0000,0x0000,0x0000,0x0000,0x0000,0x5473,0xB8F1,
- 0x0000,0x0000,0x0000,0xB8F2,0x3162,0x0000,0xB8F3,0x3471,
- 0x4660,0x4A74,0x0000,0x0000,0x0000,0x0000,0x5477,0x4155,
- 0x5476,0x3740,0xB8F4,0xB8F5,0x4B5B,0x5475,0x0000,0x4565,
- 0x5479,0xB8F6,0x5478,0xB8F7,0x0000,0xB8F8,0xB8F9,0xB8FA,
- 0x547B,0xB8FB,0x547A,0xB8FC,0x0000,0x317C,0x0000,0x547C,
- 0x3E29,0x547E,0x4325,0xB8FD,0x547D,0xB8FE,0x4A33,0xB9A1,
- 0x0000,0x0000,0xB9A2,0x3D77,0x455B,0xB9A3,0xB9A4,0x0000,
- 0x5521,0xB9A5,0x0000,0xB9A6,0xB9A7,0x3925,0x0000,0x0000,
- 0x0000,0x5522,0x4721,0x485E,0x4C51,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x4725,0xB9A8,0xB9A9,0x552B,0xB9AA,0x0000,
- 0x0000,0x0000,0xB9AB,0x3538,0x0000,0xB9AC,0x4D45,0xB9AD,
- 0x0000,0x4C2F,0x0000,0x562C,0x0000,0x5523,0x0000,0xB9AE,
- 0x0000,0x0000,0x0000,0x5526,0xB9AF,0x4245,0x0000,0xB9B0,
- 0x4B38,0x0000,0x0000,0x0000,0x454A,0xB9B1,0xB9B2,0xB9B3,
- 0xB9B4,0x0000,0x5527,0xB9B5,0x0000,0x0000,0x0000,0xB9B6,
- 0x0000,0x4B65,0xB9B7,0x3A4A,0xB9B8,0x0000,0x3E2A,0x0000,
- 0x0000,0xB9B9,0x0000,0xB9BA,0xB9BB,0x0000,0x5528,0x0000,
- 0xB9BC,0x3B50,0xB9BD,0x3B4F,0x0000,0xB9BE,0x0000,0x0000,
- 0x3039,0x3848,0xB9BF,0x402B,0x3051,0x0000,0x0000,0x0000,
- 0x0000,0x552C,0x552D,0x0000,0x552A,0xB9C0,0xB9C1,0xB9C2,
- 0x0000,0x0000,0x0000,0xB9C3,0xB9C4,0x3138,0x342F,0xB9C5,
- 0x5529,0x0000,0x4C45,0x4931,0x0000,0x0000,0xB9C6,0xB9C7,
- 0x0000,0xB9C8,0xB9C9,0x0000,0xB9CA,0x0000,0x3028,0xB9CB,
- 0x0000,0x0000,0x0000,0x3079,0x0000,0x0000,0x0000,0x3B51,
-
- /* 5A00h */
- 0xB9CC,0x3052,0x0000,0x3023,0xB9CD,0x0000,0x0000,0x0000,
- 0x0000,0x5532,0x0000,0x0000,0xB9CE,0xB9CF,0xB9D0,0x0000,
- 0x0000,0x5530,0xB9D1,0xB9D2,0x0000,0x0000,0x0000,0x0000,
- 0x4C3C,0x0000,0x5533,0x0000,0x5531,0x0000,0xB9D3,0x552F,
- 0x3F31,0x0000,0x0000,0xB9D4,0xB9D5,0x552E,0x0000,0xB9D6,
- 0xB9D7,0x4A5A,0xB9D8,0x0000,0x0000,0xB9D9,0x0000,0x3864,
- 0xB9DA,0x0000,0x0000,0x0000,0x0000,0x5537,0x5538,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x3E2B,0x0000,0x0000,0x0000,
- 0x5534,0x4F2C,0x0000,0x0000,0xB9DB,0xB9DC,0x474C,0xB9DD,
- 0xB9DE,0x5536,0x0000,0x0000,0xB9DF,0x0000,0x0000,0x0000,
- 0xB9E0,0x0000,0x0000,0x0000,0x0000,0xB9E1,0x0000,0x0000,
- 0x0000,0x0000,0x3A27,0x0000,0x0000,0x0000,0xB9E2,0x0000,
- 0x0000,0x0000,0x5539,0xB9E3,0x0000,0xB9E4,0x4958,0xB9E5,
- 0x0000,0x0000,0x553A,0x0000,0x5535,0xB9E6,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xB9E7,
- 0x0000,0x0000,0xB9E8,0xB9E9,0x0000,0x0000,0xB9EA,0x4C3B,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0xB9EB,0x0000,0x0000,0x0000,0x0000,
- 0xB9EC,0x0000,0x475E,0xB9ED,0x0000,0x0000,0xB9EE,0x0000,
- 0x0000,0xB9EF,0x553B,0x4932,0xB9F0,0x0000,0xB9F1,0xB9F2,
- 0xB9F3,0x0000,0xB9F4,0x0000,0x0000,0x0000,0x0000,0xB9F5,
- 0x0000,0x0000,0x0000,0x0000,0xB9F6,0x0000,0x0000,0x0000,
- 0x0000,0xB9F7,0xB9F8,0xB9F9,0x0000,0xB9FA,0x0000,0x0000,
- 0xB9FB,0x0000,0xB9FC,0xB9FD,0x553C,0x5540,0x553D,0xB9FE,
- 0x0000,0x3247,0x553F,0x0000,0xBAA1,0x0000,0xBAA2,0x0000,
- 0xBAA3,0x3C3B,0x0000,0x553E,0x3779,0x0000,0x0000,0xBAA4,
- 0x554C,0x0000,0x0000,0x0000,0x0000,0x0000,0x5545,0x5542,
- 0x0000,0x0000,0xBAA5,0x0000,0xBAA6,0x0000,0x0000,0x0000,
- 0xBAA7,0x4364,0x0000,0x5541,0x0000,0xBAA8,0x5543,0x0000,
- 0x0000,0x5544,0xBAA9,0x0000,0x0000,0x0000,0xBAAA,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0xBAAB,0xBAAC,0x0000,
- 0x0000,0x0000,0x5546,0x5547,0x0000,0xBAAD,0x0000,0x0000,
-
- /* 5B00h */
- 0xBAAE,0xBAAF,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0xBAB0,0x3472,0x0000,0x5549,0x5548,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x554A,0xBAB1,
- 0x0000,0xBAB3,0x0000,0xBAB4,0x0000,0xBAB5,0x0000,0x0000,
- 0x0000,0xBAB6,0x3E6E,0x0000,0x0000,0xBAB7,0x0000,0x0000,
- 0x0000,0x0000,0x554D,0x0000,0x445C,0xBAB8,0x0000,0x0000,
- 0x3145,0x0000,0x554B,0x0000,0xBAB2,0x0000,0x554E,0x0000,
- 0xBAB9,0x0000,0x0000,0x0000,0x0000,0x0000,0x554F,0x0000,
- 0x5552,0xBABA,0x0000,0x5550,0x0000,0x5551,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0xBABB,0xBABC,0x0000,0x0000,0x0000,
- 0x3B52,0x5553,0xBABD,0x0000,0x3926,0x5554,0xBABE,0x3B7A,
- 0x4238,0x0000,0x5555,0x5556,0x3B5A,0x3927,0xBABF,0x4C52,
- 0x0000,0x0000,0x0000,0x3528,0x3849,0x5557,0x3358,0x0000,
- 0xBAC0,0x5558,0x0000,0x4239,0x0000,0x0000,0xBAC1,0xBAC2,
- 0x5559,0x5623,0x0000,0x555A,0x0000,0x555B,0x0000,0x0000,
- 0x555C,0x0000,0x555E,0x0000,0xBAC3,0xBAC4,0xBAC5,0xBAC6,
- 0x555F,0xBAC7,0x0000,0x5560,0xBAC8,0x4270,0xBAC9,0x3127,
- 0x3C69,0x3042,0xBACA,0x4157,0x3430,0x3C35,0xBACB,0x3928,
- 0xBACC,0xBACD,0x0000,0xBACE,0xBACF,0x4566,0xBAD0,0x3D21,
- 0x3431,0x4368,0x446A,0x3038,0x3539,0x4A75,0x0000,0x3C42,
- 0x0000,0x0000,0x3552,0x406B,0x3C3C,0x4D28,0x5561,0x0000,
- 0xBAD1,0xBAD2,0x0000,0x0000,0xBAD3,0xBAD4,0x355C,0xBAD5,
- 0x3A4B,0xBAD6,0xBAD7,0x3332,0x3163,0x3E2C,0x3248,0xBAD8,
- 0x5562,0x4D46,0xBAD9,0x0000,0xBADA,0x0000,0x0000,0x3D49,
- 0xBADB,0xBADC,0x3C64,0x5563,0x3473,0x4652,0x4C29,0x5564,
- 0x0000,0x5565,0x0000,0x0000,0x4959,0xBADD,0x0000,0xBADE,
- 0x5567,0x0000,0x3428,0x3677,0x5566,0x0000,0xBADF,0xBAE0,
- 0xBAE1,0xBAE2,0xBAE3,0x3432,0x0000,0x3F32,0x556B,0x3B21,
- 0xBAE4,0x3249,0x556A,0x0000,0x5568,0x556C,0x5569,0x472B,
- 0x5C4D,0x3F33,0x0000,0x556D,0x0000,0x0000,0x4E40,0xBAE5,
- 0x556E,0xBAE6,0x0000,0x5570,0xBAE7,0x437E,0x556F,0x0000,
- 0x4023,0x0000,0x3B7B,0x0000,0x0000,0xBAE8,0x4250,0x3C77,
-
- /* 5C00h */
- 0x0000,0x4975,0x406C,0x0000,0x3C4D,0x5571,0x3E2D,0x5572,
- 0x5573,0x3053,0x423A,0x3F52,0xBAE9,0x5574,0x4633,0x3E2E,
- 0x0000,0x3E2F,0x0000,0x5575,0x0000,0x0000,0x406D,0xBAEA,
- 0x0000,0x0000,0x3E30,0x0000,0x0000,0x0000,0xBAEB,0xBAEC,
- 0x5576,0x0000,0x5577,0xBAED,0x4C60,0x0000,0xBAEE,0x0000,
- 0x5578,0xBAEF,0x0000,0xBAF0,0xBAF1,0x3646,0xBAF2,0x0000,
- 0xBAF3,0x3D22,0xBAF4,0x0000,0x0000,0xBAF5,0xBAF6,0x0000,
- 0x5579,0x557A,0x3C5C,0x3F2C,0x4674,0x3F54,0x4878,0x4722,
- 0x3649,0x557B,0x0000,0x0000,0x0000,0x356F,0x557C,0x0000,
- 0x367E,0x0000,0x464F,0x3230,0x0000,0x3B53,0x557D,0x5622,
- 0x5621,0x367D,0x0000,0x557E,0x0000,0x4538,0x0000,0x0000,
- 0x0000,0xBAF7,0xBAF8,0x0000,0xBAF9,0x0000,0x4230,0x0000,
- 0x454B,0x3C48,0xBAFA,0xBAFB,0x4158,0x4D7A,0x0000,0xBAFC,
- 0xBAFD,0xBAFE,0x0000,0x0000,0x5624,0xBBA1,0x5625,0x4656,
- 0xBBA2,0x3B33,0x0000,0x0000,0xBBA3,0xBBA4,0x5627,0x0000,
- 0x0000,0x5628,0xBBA5,0xBBA6,0xBBA7,0xBBA8,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xBBA9,
- 0xBBAA,0x0000,0xBBAB,0x0000,0x5629,0x0000,0x0000,0xBBAC,
- 0x3474,0x562A,0xBBAD,0x0000,0x562B,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0xBBAE,0x0000,0xBBAF,
- 0xBBB0,0x322C,0xBBB1,0xBBB2,0x0000,0x0000,0xBBB3,0x0000,
- 0x413B,0x3464,0xBBB4,0x562D,0x4C28,0x0000,0x0000,0x0000,
- 0x0000,0x4252,0xBBB5,0x3359,0xBBB6,0xBBB7,0x562F,0x5631,
- 0x345F,0x0000,0xBBB8,0x562E,0x5630,0x0000,0x5633,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x5632,0x0000,0x5634,
- 0x0000,0xBBB9,0x0000,0xBBBA,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0xBBBB,0x0000,0x0000,0x0000,0x0000,0xBBBD,
- 0x0000,0x5635,0x0000,0x0000,0x0000,0xBBBC,0x0000,0x0000,
- 0x463D,0x362E,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x3265,0x5636,0x563B,0x0000,0x0000,0x5639,0xBBBE,0x4A77,
- 0x4A76,0xBBBF,0xBBC0,0x0000,0xBBC1,0x0000,0x4567,0x0000,
- 0x0000,0x0000,0x5638,0x3D54,0x0000,0x5637,0x0000,0x0000,
-
- /* 5D00h */
- 0x0000,0xBBC2,0x0000,0x0000,0x0000,0x0000,0xBBC3,0x3F72,
- 0x0000,0x0000,0x0000,0x563C,0x0000,0xBBC4,0x3A6A,0x0000,
- 0x0000,0x5642,0xBBC5,0x0000,0x5643,0x563D,0x3333,0x563E,
- 0x5647,0x5646,0x5645,0x5641,0x0000,0x0000,0x0000,0x5640,
- 0x0000,0x0000,0x5644,0xBBC7,0xBBC8,0x0000,0xBBC9,0xBBCA,
- 0x0000,0x4A78,0x0000,0xBBC6,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0xBBCB,0x0000,0x0000,0xBBCC,0x0000,0x0000,0x0000,
- 0x0000,0xBBCD,0x0000,0x0000,0x0000,0xBBCE,0x0000,0xBBCF,
- 0x0000,0x0000,0xBBD0,0xBBD1,0x0000,0x0000,0xBBD2,0x0000,
- 0xBBD3,0x0000,0xBBD7,0x564B,0x5648,0x0000,0x564A,0x0000,
- 0x4D72,0xBBD5,0x5649,0x0000,0x0000,0xBBD4,0x0000,0x0000,
- 0x0000,0xBBD6,0x0000,0x0000,0x563F,0x0000,0x0000,0xBBD8,
- 0xBBD9,0xBBDA,0xBBDB,0x0000,0xBBDC,0x0000,0x0000,0x0000,
- 0x0000,0x3F73,0xBBDD,0x0000,0x564C,0xBBDE,0x0000,0x3A37,
- 0xBBDF,0x0000,0x0000,0x564D,0x0000,0x0000,0x564E,0x0000,
- 0x0000,0xBBE0,0xBBE1,0x0000,0x0000,0x0000,0xBBE2,0xBBE3,
- 0x0000,0xBBE4,0x5651,0xBBE5,0x5650,0x0000,0x0000,0x564F,
- 0xBBE6,0x0000,0xBBE7,0x4568,0x563A,0x0000,0x0000,0x0000,
- 0x5657,0x0000,0xBBE8,0xBBE9,0xBBEA,0xBBEB,0x0000,0x0000,
- 0x0000,0xBBEC,0x0000,0xBBED,0x0000,0x5653,0x0000,0xBBEE,
- 0xBBEF,0x0000,0x5652,0x0000,0x0000,0x0000,0x0000,0xBBF0,
- 0x0000,0x0000,0x0000,0xBBF1,0x5654,0x0000,0x5655,0x0000,
- 0xBBF2,0x0000,0xE6F4,0x0000,0xBBF3,0x0000,0x0000,0x5658,
- 0xBBF4,0xBBF5,0x4E66,0x0000,0x5659,0x5656,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0xBBF6,0x0000,0x0000,0x0000,0xBBF7,
- 0x0000,0x565A,0x0000,0xBBF8,0x3460,0x565B,0xBBFA,0x0000,
- 0xBBF9,0x0000,0x565D,0x565C,0x0000,0x0000,0x565E,0x0000,
- 0xBBFB,0xBBFC,0x0000,0x565F,0x0000,0x406E,0x3D23,0x0000,
- 0xBBFD,0x3D64,0x0000,0x4163,0xBBFE,0x3929,0x3A38,0x392A,
- 0x3570,0xBCA1,0x0000,0x5660,0x0000,0x0000,0x3A39,0x0000,
- 0x0000,0x384A,0x5661,0x4C26,0x4743,0x5662,0x0000,0x392B,
- 0xBCA2,0xBCA3,0x0000,0x342C,0x0000,0x4327,0x3652,0x0000,
-
- /* 5E00h */
- 0xBCA4,0x0000,0x3B54,0x495B,0x0000,0x0000,0x4841,0xBCA5,
- 0x0000,0x0000,0x0000,0x5663,0x3475,0xBCA6,0x0000,0x0000,
- 0x0000,0x5666,0xBCA7,0x0000,0xBCA8,0xBCA9,0x4421,0x0000,
- 0xBCAA,0x5665,0x5664,0x5667,0x0000,0x446B,0x0000,0xBCAB,
- 0xBCAC,0x0000,0x0000,0x0000,0x0000,0x3F63,0x0000,0x0000,
- 0xBCAE,0x0000,0x0000,0x3B55,0x0000,0x404A,0xBCAD,0x4253,
- 0x3522,0x0000,0xBCAF,0x4422,0x0000,0xBCB0,0x5668,0x5669,
- 0x3E6F,0x0000,0x0000,0x0000,0x0000,0x4B39,0xBCB1,0x0000,
- 0x566C,0x0000,0x0000,0x566B,0x566A,0x497D,0x0000,0x5673,
- 0x0000,0xBCB4,0x0000,0xBCB2,0x4B5A,0x0000,0x566D,0x0000,
- 0xBCB3,0xBCB5,0x0000,0x0000,0x566F,0x4B6B,0xBCB6,0x566E,
- 0xBCB7,0x0000,0x0000,0xBCB8,0xBCB9,0x0000,0xBCBA,0x5670,
- 0x0000,0x4828,0x5671,0x4A3E,0x5672,0x0000,0x0000,0x0000,
- 0xBCBB,0x0000,0xBCBC,0xBCBD,0xBCBE,0xBCBF,0xBCC0,0x0000,
- 0xBCC1,0x0000,0x3433,0x4A3F,0x472F,0x5674,0x5675,0x0000,
- 0x392C,0x3434,0x5676,0x3838,0x4D44,0x4D29,0x3476,0x5678,
- 0xBCC2,0x4423,0x0000,0x392D,0x3E31,0x0000,0x0000,0x485F,
- 0x0000,0x0000,0x3E32,0xBCC3,0x0000,0x0000,0xBCC4,0x3D78,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x446C,0x4A79,0x4539,
- 0x0000,0x0000,0x392E,0x0000,0x495C,0x0000,0x0000,0x0000,
- 0x5679,0x0000,0xBCC5,0x0000,0xBCC6,0xBCC7,0x4559,0x3A42,
- 0xBCC8,0x0000,0xBCC9,0x384B,0xBCCA,0x446D,0x0000,0x0000,
- 0x0000,0xBCCB,0x0000,0xBCCC,0x0000,0x3043,0x3D6E,0x392F,
- 0x4D47,0x0000,0x0000,0x0000,0x0000,0xBCCD,0xBCCE,0xBCCF,
- 0x0000,0x567A,0x567B,0x4751,0x0000,0x0000,0xBCD0,0x0000,
- 0x567C,0x4E77,0x4F2D,0xBCD2,0xBCD1,0x0000,0xBCD3,0x567E,
- 0x567D,0xBCD4,0xBCD5,0x3347,0xBCD6,0xBCD7,0x5721,0x0000,
- 0x0000,0x0000,0x5724,0x5725,0xBCD8,0x5723,0xBCD9,0x4940,
- 0x3E33,0x5727,0x5726,0x5722,0x0000,0xBCDA,0x0000,0x0000,
- 0x5728,0x5729,0x0000,0xBCDB,0x572A,0x0000,0x0000,0x0000,
- 0x572D,0x572B,0x0000,0x572C,0x572E,0x0000,0x3164,0x446E,
- 0x572F,0x0000,0x377A,0x3276,0x4736,0x0000,0x5730,0x467B,
-
- /* 5F00h */
- 0x0000,0x4A5B,0xBCDC,0x5731,0x4F2E,0x0000,0xBCDD,0xBCDE,
- 0xBCDF,0x5732,0x4A40,0x5735,0x5021,0x5031,0xBCE0,0x3C30,
- 0x4675,0x5736,0x0000,0x355D,0x4424,0x307A,0x5737,0x4A26,
- 0x3930,0xBCE1,0x0000,0x4350,0xBCE2,0xBCE3,0x0000,0x446F,
- 0x0000,0xBCE4,0xBCE5,0xBCE6,0xBCE7,0x4C6F,0x3839,0x384C,
- 0xBCE8,0x5738,0x0000,0xBCE9,0xBCEA,0x5739,0xBCEB,0x573F,
- 0xBCEC,0x3C65,0x0000,0x0000,0xBCED,0x4425,0xBCEE,0x362F,
- 0x573A,0x0000,0x0000,0xBCEF,0x492B,0xBCF0,0x4346,0xBCF1,
- 0xBCF2,0x573B,0x0000,0x0000,0xBCF3,0xBCF4,0x0000,0xBCF5,
- 0x573C,0x0000,0x3630,0x0000,0x573D,0xBCF6,0x573E,0x0000,
- 0xBCF7,0x5740,0x0000,0x4576,0xBCF8,0x0000,0x5741,0x5742,
- 0xBCF9,0x5743,0x0000,0xBCFA,0x5734,0x5733,0x0000,0x0000,
- 0xBCFB,0x5744,0x3741,0xBCFC,0xBCFD,0x0000,0x4927,0xBCFE,
- 0x0000,0x3A4C,0x4937,0x4426,0x494B,0x5745,0x0000,0xBDA1,
- 0x3E34,0x3146,0xBDA2,0x5746,0xBDA3,0xBDA4,0x0000,0x5747,
- 0xBDA5,0x4C72,0xBDA6,0x0000,0x4860,0xBDA7,0xBDA8,0x574A,
- 0x317D,0x402C,0x5749,0x5748,0x3742,0x4254,0x0000,0x574E,
- 0x574C,0xBDA9,0x574B,0x4E27,0x3865,0xBDAA,0x0000,0xBDAB,
- 0x3D79,0x574D,0x454C,0x3D3E,0x0000,0x0000,0xBDAC,0x4640,
- 0x5751,0x5750,0x0000,0x0000,0xBDAD,0xBDAE,0x574F,0x0000,
- 0x5752,0x3866,0xBDAF,0x0000,0xBDB2,0x0000,0x0000,0xBDB0,
- 0x5753,0x497C,0x3D5B,0xBDB1,0xBDB3,0x5754,0x4879,0xBDB4,
- 0xBDB5,0xBDB6,0x0000,0x4641,0x4427,0x0000,0x0000,0x0000,
- 0xBDB7,0x4530,0x0000,0x0000,0x5755,0x352B,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x3F34,0xBDB8,0x492C,0x0000,0xBDB9,
- 0xBDBA,0xBDBB,0x0000,0xBDBC,0x3477,0x4726,0x0000,0x0000,
- 0xBDBD,0xBDBE,0xBDBF,0xBDC0,0xBDC1,0x0000,0x5756,0x3B56,
- 0x4B3A,0x4B3B,0x0000,0x0000,0x317E,0x575B,0xBDC2,0x0000,
- 0x4369,0xBDC3,0xBDC4,0x0000,0x5758,0x0000,0x0000,0x0000,
- 0xBDC5,0xBDC6,0xBDC7,0x3277,0xBDC8,0xBDC9,0xBDCA,0xBDCB,
- 0x582D,0x575A,0xBDCC,0xBDCD,0x0000,0x4730,0xBDCE,0x0000,
- 0x5759,0x0000,0xBDCF,0x5757,0xBDD0,0x397A,0x0000,0x575D,
-
- /* 6000h */
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xBDD1,
- 0x0000,0x0000,0xBDD2,0x0000,0x0000,0xBDD3,0x5763,0x5769,
- 0x5761,0x0000,0x455C,0xBDD4,0xBDD5,0x5766,0x495D,0xBDD6,
- 0xBDD7,0x5760,0xBDD8,0x5765,0x4E67,0x3B57,0x0000,0xBDD9,
- 0x4255,0x575E,0x0000,0x0000,0xBDDA,0x355E,0x5768,0x402D,
- 0x3165,0x5762,0x3278,0x5767,0x0000,0xBDDB,0x0000,0x3631,
- 0x0000,0x5764,0x0000,0xBDDC,0x0000,0xBDDD,0x0000,0x0000,
- 0x0000,0x0000,0x576A,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0xBDDE,0x576C,0x5776,0x5774,0x0000,0x0000,0x5771,0xBDDF,
- 0xBDE0,0xBDE1,0x5770,0x4E78,0xBDE2,0x5772,0x0000,0x0000,
- 0x3632,0xBDE3,0x3931,0x0000,0xBDE4,0x3D7A,0xBDE5,0xBDE6,
- 0x0000,0x5779,0x576B,0x0000,0x0000,0xBDE7,0x0000,0x576F,
- 0x575F,0xBDE8,0x327A,0x5773,0x5775,0x4351,0x0000,0xBDE9,
- 0x3A28,0x3238,0x576D,0x5778,0x5777,0x3633,0x0000,0x4229,
- 0x3366,0xBDEA,0x0000,0x0000,0x0000,0x3743,0x0000,0x576E,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xBDEB,0xBDEC,
- 0x0000,0x577A,0xBDED,0x577D,0x5821,0x0000,0xBDEE,0x0000,
- 0xBDEF,0x3C3D,0xBDF0,0x5827,0x4470,0x577B,0xBDF1,0x0000,
- 0x0000,0xBDF2,0x5825,0xBDF3,0x3279,0xBDF4,0x5823,0x5824,
- 0xBDF5,0x0000,0x577E,0x5822,0x0000,0xBDF6,0xBDF7,0x3867,
- 0x4D2A,0x0000,0xBDF8,0x3435,0xBDF9,0xBDFA,0x3159,0x5826,
- 0xBDFB,0x473A,0x302D,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0xBDFC,0xBDFD,0x4861,0x575C,0x582C,0x5830,0x4C65,0xBDFE,
- 0x5829,0x0000,0x0000,0xBEA1,0x4569,0x582E,0xBEA2,0x0000,
- 0x0000,0x0000,0xBEA3,0x0000,0xBEA4,0x3E70,0x582F,0x4657,
- 0xBEA5,0xBEA6,0xBEA7,0xBEA8,0x0000,0x0000,0xBEA9,0xBEAA,
- 0x0000,0x4F47,0x0000,0x582B,0xBEAB,0xBEAC,0x0000,0x0000,
- 0x5831,0xBEAD,0x397B,0xBEAE,0x404B,0xBEAF,0xBEB0,0x3054,
- 0x582A,0x5828,0xBEB1,0x415A,0x0000,0xBEB2,0x0000,0x577C,
- 0x3B34,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x4246,0x583D,0xBEB3,0x415B,0x5838,0xBEB4,0x5835,0x5836,
- 0xBEB5,0x3C66,0x5839,0x583C,0xBEB6,0xBEB7,0x0000,0x0000,
-
- /* 6100h */
- 0x5837,0x3D25,0xBEB8,0x583A,0x0000,0x0000,0x5834,0xBEB9,
- 0x4C7C,0x4C7B,0xBEBA,0x0000,0xBEBB,0x583E,0x583F,0x3055,
- 0xBEBC,0xBEBD,0xBEBE,0xBEBF,0xBEC0,0x5833,0xBEC1,0xBEC2,
- 0x0000,0xBEC3,0x3672,0x3026,0xBEC4,0x0000,0xBEC5,0x3436,
- 0x0000,0x583B,0xBEC6,0x0000,0x0000,0x0000,0x0000,0x5843,
- 0x5842,0x0000,0xBEC7,0xBEC8,0x5847,0x0000,0x0000,0x0000,
- 0xBEC9,0xBECA,0x0000,0x0000,0x5848,0xBECB,0xBECC,0xBECD,
- 0x0000,0xBECE,0x0000,0x0000,0x5846,0x5849,0x5841,0x5845,
- 0x0000,0xBECF,0x584A,0x0000,0x584B,0xBED0,0xBED1,0x5840,
- 0x3B7C,0xBED2,0x5844,0x4256,0x3932,0x5832,0x3F35,0x0000,
- 0x0000,0x0000,0x0000,0x5858,0x0000,0x4A69,0x0000,0x0000,
- 0x584E,0x584F,0x5850,0x0000,0x0000,0x5857,0xBED3,0x5856,
- 0xBED4,0x0000,0x4B7D,0x3437,0x0000,0x5854,0x0000,0x3745,
- 0x3334,0x0000,0x0000,0x5851,0xBED5,0x0000,0x4E38,0x5853,
- 0x3056,0x5855,0xBED6,0x584C,0x5852,0x5859,0x3744,0x584D,
- 0xBED7,0x0000,0x0000,0xBED8,0xBED9,0x0000,0x4D5D,0xBEDA,
- 0xBEDB,0xBEDC,0x4D2B,0xBEDD,0xBEDE,0x0000,0x0000,0x585C,
- 0x0000,0x0000,0x5860,0xBEDF,0x0000,0xBEE0,0x417E,0x0000,
- 0x4E79,0x5861,0xBEE1,0xBEE2,0x585E,0x0000,0x585B,0xBEE3,
- 0xBEE4,0x585A,0x585F,0x0000,0xBEE5,0xBEE6,0x0000,0xBEE7,
- 0xBEE8,0x0000,0x0000,0x0000,0x4A30,0xBEE9,0x0000,0x4634,
- 0xBEEA,0x3746,0xBEEB,0x5862,0x585D,0xBEEC,0x5863,0x0000,
- 0x0000,0x0000,0x377B,0x0000,0x0000,0x0000,0x3231,0x0000,
- 0xBEED,0xBEEE,0x586B,0x0000,0xBEEF,0x0000,0x3438,0x0000,
- 0xBEF0,0xBEF1,0xBEF2,0x5869,0x0000,0x0000,0x586A,0x3A29,
- 0x5868,0x5866,0x5865,0x586C,0x5864,0x586E,0xBEF3,0xBEF4,
- 0x327B,0x0000,0x0000,0x0000,0x0000,0xBEF5,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0xBEF6,0xBEF7,0xBEF8,0xBEF9,
- 0x0000,0xBEFA,0xBEFB,0x5870,0x0000,0xBEFE,0x586F,0xBEFC,
- 0x0000,0xBEFD,0x0000,0x0000,0xBFA1,0xBFA2,0x0000,0xBFA3,
- 0x0000,0x0000,0x4428,0x0000,0x5873,0x0000,0x5871,0x5867,
- 0x377C,0x0000,0x5872,0x0000,0x5876,0x5875,0x5877,0x5874,
-
- /* 6200h */
- 0x5878,0xBFA4,0x0000,0xBFA5,0xBFA6,0x0000,0x0000,0xBFA7,
- 0x5879,0x587A,0x4A6A,0x0000,0x587C,0x587B,0x3D3F,0x0000,
- 0x402E,0x3266,0x327C,0xBFA8,0x587D,0xBFA9,0x303F,0x0000,
- 0x0000,0x0000,0x404C,0x587E,0xBFAA,0x6C43,0x5921,0x3761,
- 0xBFAB,0x5922,0xBFAC,0xBFAD,0x0000,0x0000,0x406F,0xBFAE,
- 0x0000,0xBFAF,0x5923,0xBFB0,0x0000,0x0000,0x5924,0x353A,
- 0x5925,0x0000,0x5926,0x5927,0x4257,0x0000,0x0000,0x0000,
- 0x384D,0xBFB1,0x0000,0x4C61,0x0000,0xBFB2,0x0000,0x4B3C,
- 0x3D6A,0x5928,0xBFB3,0xBFB4,0xBFB5,0x0000,0xBFB6,0x4070,
- 0x6E3D,0x4862,0x0000,0x3C6A,0xBFB7,0x3A4D,0x5929,0x0000,
- 0xBFB8,0xBFB9,0xBFBA,0x4247,0xBFBB,0x4A27,0xBFBC,0x0000,
- 0x4271,0x0000,0xBFBD,0x592C,0xBFBE,0x0000,0x592A,0x0000,
- 0x592D,0x0000,0x0000,0x592B,0xBFBF,0x0000,0x0000,0x0000,
- 0x592E,0x0000,0x0000,0x0000,0x0000,0xBFC0,0x4A31,0xBFC1,
- 0x0000,0x3037,0x0000,0xBFC2,0x0000,0x0000,0x495E,0x0000,
- 0x0000,0x4863,0xBFC3,0x0000,0x592F,0xBFC4,0x5932,0x3E35,
- 0x353B,0x0000,0x5930,0x5937,0x3E36,0x0000,0x0000,0x0000,
- 0x0000,0x5931,0x4744,0x0000,0x0000,0xBFC5,0xBFC6,0xBFC7,
- 0xBFC8,0x4D5E,0x5933,0x5934,0x5938,0x456A,0x5935,0x3933,
- 0x405E,0x0000,0x0000,0x5946,0x4834,0x0000,0x4272,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xBFC9,0x0000,
- 0xBFCA,0x0000,0x0000,0x4864,0x5A2D,0x0000,0x0000,0x0000,
- 0x0000,0x4A7A,0x0000,0xBFCB,0x0000,0x4471,0xBFCC,0xBFCD,
- 0x0000,0x4B75,0xBFCE,0x593B,0x3221,0x436A,0xBFCF,0xBFD0,
- 0x0000,0x0000,0x5944,0x0000,0xBFD1,0x4334,0x593E,0x5945,
- 0x5940,0x5947,0x5943,0x0000,0x5942,0x476F,0xBFD2,0x593C,
- 0x327D,0x593A,0x3571,0x4273,0x5936,0xBFD3,0xBFD4,0x5939,
- 0x3934,0x405B,0xBFD5,0x3E37,0x5941,0x4752,0x0000,0x0000,
- 0x3572,0x3348,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0xBFD6,0x0000,0x3367,0x3F21,0x5949,0x594E,
- 0x0000,0x594A,0xBFD7,0x377D,0xBFD8,0x594F,0x3B22,0x3969,
- 0x0000,0x0000,0x0000,0x0000,0xBFD9,0xBFDA,0x3D26,0x593D,
-
- /* 6300h */
- 0x0000,0x3B7D,0x594C,0xBFDB,0xBFDC,0x0000,0x0000,0x3B58,
- 0x594D,0x3044,0xBFDD,0xBFDE,0x5948,0xBFDF,0x0000,0x0000,
- 0xBFE0,0x4429,0x0000,0xBFE1,0x0000,0x0000,0xBFE2,0x0000,
- 0xBFE3,0x3573,0x0000,0x0000,0x0000,0x0000,0x0000,0x3634,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x594B,
- 0x3027,0xBFE4,0xBFE5,0x3A43,0x0000,0xBFE6,0x0000,0x3F36,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0xBFE7,0xBFE8,0x0000,
- 0x0000,0xBFE9,0x4472,0x0000,0xBFEA,0x4854,0x5951,0x415E,
- 0x0000,0xBFEB,0xBFEC,0xBFED,0xBFEE,0x0000,0xBFEF,0x0000,
- 0x0000,0x422A,0xBFF0,0xBFF1,0x3B2B,0x5952,0xBFF2,0x5954,
- 0x5950,0x0000,0xBFF3,0xBFF4,0xBFF5,0x4A61,0x0000,0x443D,
- 0xBFF6,0x0000,0x0000,0xBFF7,0x415C,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0xBFF8,0xBFF9,0x4A7B,
- 0x3C4E,0x5960,0x0000,0x595F,0xBFFA,0xBFFB,0x3F78,0x0000,
- 0x0000,0xBFFC,0x377E,0x0000,0xBFFD,0xBFFE,0x5959,0x3E39,
- 0xC0A1,0x0000,0x4668,0x4731,0xC0A2,0xC0A3,0x0000,0xC0A4,
- 0x5957,0x0000,0xC0A5,0x415D,0xC0A6,0x0000,0x0000,0xC0A7,
- 0x3C78,0x595C,0xC0A8,0x0000,0x3E38,0x0000,0x5956,0x595B,
- 0xC0A9,0x0000,0x4753,0x0000,0xC0AA,0xC0AB,0x5955,0x0000,
- 0x3721,0xC0AC,0xC0AD,0x335D,0x0000,0x0000,0xC0AE,0x595D,
- 0x4E2B,0x3A4E,0x4335,0x595A,0xC0AF,0x405C,0xC0B0,0x3935,
- 0x3F64,0x3166,0x413C,0x5958,0x3545,0xC0B1,0xC0B2,0xC0B3,
- 0x0000,0x0000,0x3747,0x0000,0x444F,0x595E,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x415F,0x0000,0xC0B4,0x5961,0x0000,
- 0x5963,0xC0B5,0x0000,0x4237,0x5969,0xC0B6,0x5964,0x0000,
- 0xC0B7,0x5966,0x0000,0x0000,0x0000,0x0000,0xC0B8,0x4941,
- 0x4473,0xC0B9,0x5967,0xC0BA,0xC0BB,0xC0BC,0x4D2C,0x0000,
- 0x0000,0x0000,0x4D48,0x3439,0xC0BD,0x0000,0x0000,0x0000,
- 0xC0BE,0x302E,0x0000,0x5965,0x0000,0xC0BF,0x0000,0x0000,
- 0x0000,0x5962,0xC0C0,0x0000,0xC0C1,0x0000,0x3478,0x0000,
- 0x0000,0x0000,0xC0C2,0xC0C3,0x3167,0xC0C4,0x5968,0x0000,
- 0xC0C5,0xC0C6,0x4D49,0x0000,0x0000,0x0000,0x0000,0x0000,
-
- /* 6400h */
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x596C,0x0000,
- 0x0000,0xC0C7,0xC0C8,0x0000,0x0000,0x423B,0x0000,0x5973,
- 0xC0C9,0x0000,0xC0CA,0x596D,0xC0CB,0x0000,0x596A,0x5971,
- 0xC0CC,0x0000,0x0000,0x0000,0x5953,0x0000,0xC0CD,0x0000,
- 0xC0CE,0x0000,0xC0CF,0x0000,0xC0D0,0xC0D1,0x596E,0x0000,
- 0x5972,0xC0D2,0xC0D3,0x0000,0x4842,0x456B,0x0000,0xC0D4,
- 0xC0D5,0x0000,0x0000,0x0000,0x596B,0xC0D6,0x596F,0x0000,
- 0x0000,0x0000,0x3748,0x0000,0x0000,0xC0D7,0x3A71,0xC0D8,
- 0x0000,0x0000,0x405D,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0xC0D9,0x0000,0x0000,0x5977,0xC0DA,
- 0x0000,0xC0DB,0xC0DC,0xC0DD,0xC0DE,0x0000,0x0000,0x0000,
- 0x4526,0x0000,0xC0DF,0xC0E0,0xC0E1,0xC0E2,0x0000,0xC0E3,
- 0xC0E4,0xC0E5,0x0000,0xC0E6,0x0000,0x0000,0x0000,0x5974,
- 0x0000,0x4B60,0x0000,0x0000,0x0000,0xC0E7,0x0000,0x5975,
- 0x0000,0x0000,0x0000,0xC0E8,0xC0E9,0x0000,0x5976,0x0000,
- 0x4C4E,0x0000,0x4022,0xC0EA,0x0000,0xC0EB,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x3762,0x0000,0xC0EC,0x0000,0xC0ED,
- 0x597D,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xC0EE,
- 0xC0EF,0xC0F0,0x3B35,0x597A,0x0000,0x5979,0x0000,0x0000,
- 0xC0F1,0xC0F2,0x4732,0xC0F3,0x0000,0xC0F4,0x4635,0xC0F5,
- 0x0000,0xC0F6,0x0000,0xC0F7,0x4531,0x597B,0xC0F8,0x0000,
- 0xC0F9,0x597C,0x0000,0x496F,0xC0FA,0x4745,0x3B23,0x0000,
- 0x4071,0x0000,0x4B50,0xC0FB,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x3349,0x0000,0x5A25,0x597E,0xC0FC,0xC0FD,0xC0FE,
- 0x0000,0x4D4A,0x5A27,0x0000,0xC1A1,0x5A23,0x0000,0x5A24,
- 0x0000,0xC1A2,0xC1A3,0xC1A4,0xC1A5,0x4160,0xC1A6,0x0000,
- 0xC1A7,0xC1A8,0x5A22,0x0000,0x593F,0xC1A9,0x0000,0xC1AA,
- 0x5A26,0x0000,0x5A21,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x5A2B,0x5A2C,0x4527,0x5A2E,0xC1AB,0xC1AC,0x3B24,0x5A29,
- 0x0000,0xC1AD,0xC1AE,0x0000,0x353C,0xC1AF,0x0000,0x5A2F,
- 0xC1B0,0x5A28,0x5A33,0x0000,0x5A32,0xC1B1,0x5A31,0xC1B2,
- 0x0000,0x0000,0x5A34,0xC1B3,0x0000,0x5A36,0x3E71,0xC1B4,
-
- /* 6500h */
- 0x5A35,0xC1B5,0x0000,0x0000,0xC1B6,0x5A39,0x0000,0x0000,
- 0xC1B7,0xC1B8,0xC1B9,0x0000,0x0000,0x0000,0x0000,0xC1BA,
- 0x0000,0x0000,0x0000,0xC1BB,0xC1BC,0x0000,0xC1BD,0x0000,
- 0x5A37,0xC1BE,0x0000,0xC1BF,0x5A38,0x5970,0xC1C0,0xC1C1,
- 0x0000,0x0000,0xC1C2,0x5A3B,0x5A3A,0x0000,0xC1C3,0x0000,
- 0x0000,0xC1C4,0x5978,0x5A3C,0x5A30,0x0000,0xC1C5,0x3B59,
- 0x0000,0xC1C6,0x0000,0x0000,0x5A3D,0x5A3E,0x5A40,0x5A3F,
- 0x5A41,0x327E,0xC1C7,0x3936,0xC1C8,0xC1C9,0x4A7C,0x402F,
- 0x0000,0x0000,0x0000,0xC1CA,0x0000,0x384E,0x0000,0xC1CB,
- 0x5A43,0xC1CC,0x0000,0x0000,0x0000,0x5A46,0x0000,0x4952,
- 0xC1CD,0x355F,0xC1CE,0x0000,0xC1CF,0x5A45,0x5A44,0x4754,
- 0x5A47,0x3635,0x0000,0x0000,0x0000,0x5A49,0x5A48,0xC1D0,
- 0xC1D1,0x0000,0x343A,0x3B36,0x0000,0x0000,0x4658,0xC1D2,
- 0x0000,0x0000,0x0000,0xC1D3,0x3749,0x0000,0x0000,0x0000,
- 0x3F74,0x0000,0x5A4A,0x0000,0x4030,0x4528,0x0000,0x495F,
- 0x5A4B,0x0000,0xC1D4,0x0000,0x0000,0xC1D5,0x0000,0x0000,
- 0x0000,0xC1D6,0x5A4C,0x5A4D,0x0000,0xC1D7,0x0000,0x4A38,
- 0x555D,0x4046,0xC1D8,0x0000,0x494C,0x0000,0x3A58,0x0000,
- 0x4865,0x4843,0xC1D9,0x0000,0x0000,0xC1DA,0x0000,0x454D,
- 0xC1DB,0x4E41,0x0000,0x5A4F,0x3C50,0xC1DC,0x0000,0x5A50,
- 0xC1DD,0x3036,0x0000,0xC1DE,0x3654,0x404D,0xC1DF,0x4960,
- 0x0000,0x0000,0x0000,0x5A51,0x3B42,0x4347,0xC1E0,0x3B5B,
- 0x3F37,0x0000,0xC1E1,0xC1E2,0xC1E3,0x0000,0x0000,0x5A52,
- 0x0000,0x4A7D,0x0000,0x0000,0x3177,0x3B5C,0x0000,0xC1E4,
- 0x0000,0x5A55,0xC1E5,0x5A53,0x5A56,0x4E39,0x5A54,0x0000,
- 0xC1E6,0xC1E7,0x0000,0x407B,0x5A57,0x0000,0xC1E8,0x4232,
- 0xC1E9,0x0000,0x5A58,0x0000,0xC1EA,0x0000,0xC1EB,0x347A,
- 0xC1EC,0x5A5A,0x0000,0x5A59,0x0000,0x0000,0x0000,0xC1ED,
- 0x5A5B,0x5A5C,0x347B,0x0000,0x0000,0x467C,0x4336,0x356C,
- 0x3B5D,0x4161,0x0000,0x0000,0x3D5C,0x3030,0x0000,0x0000,
- 0xC1EE,0x5A5D,0xC1EF,0x0000,0xC1F0,0xC1F1,0x0000,0x0000,
- 0x0000,0xC1F2,0x3222,0x5A61,0x0000,0x0000,0xC1F3,0xC1F4,
-
- /* 6600h */
- 0xC1F5,0x0000,0x3937,0x5A60,0xC1F6,0x0000,0x3A2B,0x3E3A,
- 0xC1F7,0xC1F8,0x5A5F,0x0000,0x3E3B,0xC1F9,0x4C40,0x3A2A,
- 0x0000,0xC1FA,0xC1FB,0x3057,0x404E,0xC1FC,0xC1FD,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x5A66,0xC1FE,0xC2A1,0x4031,
- 0x3147,0xC2A2,0xC2A3,0xC2A4,0xC2A5,0x3D55,0xC2A6,0x4B66,
- 0x3A72,0xC2A7,0xC2A8,0xC2A9,0xC2AA,0x3E3C,0xC2AB,0x4027,
- 0xC2AC,0xC2AD,0x0000,0xC2AE,0x5A65,0x5A63,0x5A64,0xC2B0,
- 0x0000,0xC2AF,0x0000,0x0000,0x436B,0x0000,0x0000,0x5B26,
- 0xC2B1,0x5A6A,0x3B7E,0x3938,0x5A68,0xC2B2,0xC2B3,0x0000,
- 0x0000,0x5A69,0xC2B4,0x3F38,0xC2B5,0x0000,0xC2B7,0x5A67,
- 0x0000,0xC2B6,0x3B2F,0x0000,0x0000,0x0000,0x0000,0xC2B8,
- 0xC2B9,0xC2BA,0x0000,0xC2BB,0xC2BC,0x5A6C,0x5A6B,0x5A70,
- 0xC2BD,0xC2BE,0x5A71,0x0000,0x5A6D,0x0000,0x3322,0x5A6E,
- 0x5A6F,0x4855,0xC2C0,0xC2C1,0xC2C2,0x0000,0x4961,0x374A,
- 0x5A72,0x0000,0x0000,0xC2C4,0x4032,0xC2C5,0x3E3D,0xC2C7,
- 0xC2C8,0xC2C9,0x4352,0xC2CA,0xC2CC,0x0000,0xC2C3,0xC2C6,
- 0xC2CB,0x3647,0x0000,0x5A73,0x5A77,0x0000,0x0000,0x324B,
- 0x5A74,0x5A76,0x0000,0xC2CD,0xC2CE,0xC2CF,0x5A75,0x0000,
- 0xC2D0,0x3D6B,0xC2D1,0x0000,0x0000,0x0000,0x4348,0x3045,
- 0x5A78,0xC2D2,0xC2D3,0xC2D4,0xC2D5,0x5A79,0x0000,0xC2D6,
- 0xC2D7,0x0000,0x442A,0x0000,0xC2D8,0x0000,0x4E71,0x0000,
- 0x0000,0x0000,0x0000,0x3B43,0x0000,0xC2D9,0x4A6B,0x0000,
- 0x0000,0xC2DA,0xC2DB,0x0000,0x4B3D,0xC2DC,0x0000,0x0000,
- 0x5B22,0x5A7B,0x0000,0xC2DD,0x5A7E,0x0000,0x5A7D,0xC2DE,
- 0xC2DF,0x5A7A,0xC2E0,0xC2E1,0x5B21,0x0000,0x0000,0x465E,
- 0xC2E2,0x5A7C,0x0000,0x0000,0xC2E3,0x0000,0xC2E4,0xC2E5,
- 0x0000,0x0000,0x0000,0x0000,0xC2E6,0x0000,0x5B23,0x0000,
- 0x0000,0x3D6C,0x5B24,0xC2E7,0x4D4B,0x4778,0x0000,0xC2E8,
- 0x5B25,0x0000,0x0000,0x0000,0x0000,0x0000,0x5B27,0x0000,
- 0xC2E9,0x5B28,0x0000,0xC2EA,0xC2EB,0x0000,0xC2EC,0x0000,
- 0x5B29,0x0000,0x364A,0x3148,0x3939,0x5B2A,0x0000,0x5B2B,
- 0x3D71,0x4162,0xC2ED,0xC2BF,0x5258,0x413E,0x413D,0x4258,
-
- /* 6700h */
- 0x3A47,0x0000,0x0000,0x5072,0x0000,0xC2EE,0x0000,0xC2EF,
- 0x376E,0x4D2D,0x0000,0x4A7E,0x0000,0x497E,0xC2F0,0x5B2C,
- 0x0000,0x0000,0x0000,0xC2F1,0x3A73,0x443F,0x5B2D,0x4F2F,
- 0x0000,0xC2F2,0x0000,0x4B3E,0xC2F3,0x442B,0x5B2E,0x347C,
- 0xC2F4,0x0000,0xC2F5,0x0000,0x0000,0x0000,0x5B2F,0x5B30,
- 0x4C5A,0x0000,0x4C24,0x4B76,0x4B5C,0x3B25,0x5B32,0x0000,
- 0x0000,0x3C6B,0x0000,0xC2F6,0x4B51,0x0000,0x5B34,0x5B37,
- 0x5B36,0x0000,0x3479,0x0000,0x0000,0x3560,0xC2F7,0x5B33,
- 0x0000,0x5B35,0x0000,0x0000,0x0000,0xC2F8,0x5B38,0xC2F9,
- 0xC2FA,0x3F79,0x0000,0x0000,0xC2FB,0x0000,0x4D7B,0x3049,
- 0x3A60,0x423C,0x0000,0x3C5D,0xC2FC,0xC2FD,0x3E73,0x0000,
- 0x0000,0x5B3B,0x0000,0x0000,0x454E,0xC2FE,0x5B39,0x422B,
- 0x5B3A,0x3E72,0x4C5D,0x5B3C,0x5B3D,0x4D68,0xC3A1,0x0000,
- 0x0000,0x0000,0x5B42,0x0000,0xC3A2,0x393A,0xC3A3,0x4755,
- 0x5B3F,0x456C,0x5A5E,0x5A62,0xC3A4,0x354F,0xC3A5,0x4747,
- 0x0000,0x0000,0x0000,0xC3A6,0x5B41,0x0000,0x3E3E,0x4844,
- 0x0000,0xC3A7,0x0000,0x0000,0xC3A8,0x5B47,0x0000,0x487A,
- 0x0000,0x5B3E,0x0000,0x5B44,0x5B43,0x0000,0xC3A9,0xC3AA,
- 0x404F,0xC3AB,0x0000,0xC3AC,0x0000,0x4B6D,0xC3AD,0x4E53,
- 0xC3AE,0xC3AF,0x4B67,0xC3B0,0x324C,0x3B5E,0x0000,0x0000,
- 0x4F48,0x5B46,0x3F75,0x0000,0x0000,0x0000,0x5B45,0x0000,
- 0x0000,0x5B40,0x0000,0x0000,0x0000,0x0000,0x0000,0x384F,
- 0xC3B1,0xC3B2,0xC3B3,0x5B4C,0x5B4A,0xC3B4,0x324D,0x5B48,
- 0x5B4E,0x5B54,0x0000,0xC3B5,0xC3B6,0xC3B7,0x0000,0x0000,
- 0xC3B9,0x4248,0xC3BA,0xC3BB,0x4A41,0xC3BC,0x5B56,0x0000,
- 0xC3BD,0xC3BE,0x4922,0x0000,0x0000,0x0000,0x5B55,0x4770,
- 0x4B3F,0x343B,0xC3BF,0x4077,0x3D40,0x0000,0x0000,0xC3C0,
- 0x4453,0xC3C1,0x4D2E,0x0000,0xC3C2,0x5B51,0x5B50,0x0000,
- 0x0000,0xC3C3,0x5B52,0x0000,0x5B4F,0x0000,0xC3C4,0x5B57,
- 0x0000,0x5B4D,0x0000,0x0000,0x5B4B,0x0000,0x5B53,0x5B49,
- 0xC3C5,0x436C,0xC3C6,0x4C78,0x3C46,0x3A74,0xC3C7,0xC3C8,
- 0x0000,0xC3B8,0x0000,0x3A3A,0x0000,0x0000,0x4B6F,0x3341,
-
- /* 6800h */
- 0x0000,0x0000,0x444E,0x464A,0x3149,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x4072,0xC3CA,0x0000,0x4034,0x372A,
- 0x0000,0xC3CB,0x0000,0x0000,0x0000,0xC3CC,0x5B59,0xC3CD,
- 0x0000,0x393B,0x337C,0x0000,0x0000,0x0000,0x0000,0xC3CF,
- 0xC3CE,0x5B5B,0x3374,0x5B61,0xC3D0,0xC3D1,0x0000,0xC3D2,
- 0xC3D3,0xC3D4,0x5B5E,0xC3D5,0x4073,0x0000,0x0000,0x0000,
- 0x334B,0x3A2C,0x0000,0xC3D6,0x334A,0x3A4F,0x0000,0xC3D7,
- 0x5B5C,0x3765,0x374B,0x456D,0xC3D8,0xC3D9,0x5B5A,0x0000,
- 0x3046,0x0000,0xC3DA,0x0000,0xC3DB,0x5B5D,0x5B5F,0x0000,
- 0x364D,0x372C,0xC3C9,0x343C,0x354B,0xC3DC,0x0000,0xC3DD,
- 0xC3DE,0x5B62,0x0000,0xC3DF,0x3A79,0x4B71,0x0000,0x3B37,
- 0x0000,0x0000,0x0000,0x5B63,0x0000,0x0000,0x0000,0x4930,
- 0x0000,0x0000,0x0000,0xC3E0,0x0000,0x0000,0xC3E1,0xC3E2,
- 0xC3E3,0xC3E4,0xC3E5,0x0000,0x5B6F,0xC3E6,0x3233,0x5B64,
- 0x0000,0xC3E7,0xC3E8,0xC3E9,0xC3EA,0x0000,0x5B75,0x5B65,
- 0x0000,0x4E42,0xC3EB,0x5B6C,0xC3EC,0x475F,0xC3ED,0x0000,
- 0xC3EE,0x0000,0x0000,0x0000,0x0000,0x5B74,0x0000,0x5B67,
- 0x0000,0x0000,0x0000,0x3034,0x5B69,0x0000,0xC3EF,0x393C,
- 0xC3F0,0x0000,0xC3F1,0x5B6B,0xC3F2,0x5B6A,0x0000,0x5B66,
- 0x5B71,0xC3F3,0x3E3F,0xC3F4,0x0000,0xC3F5,0x546D,0x3868,
- 0x4D7C,0xC3F6,0xC3F7,0x0000,0x0000,0x5B68,0xC3F8,0x4474,
- 0x3323,0x3A2D,0xC3F9,0x5B60,0x0000,0x5B70,0x3361,0x0000,
- 0x0000,0x5B6E,0x5B72,0xC3FA,0x456E,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x347E,0xC3FB,0x5C32,0x0000,
- 0xC3FC,0x4C49,0x5B77,0x347D,0xC3FD,0x5B7E,0x0000,0xC3FE,
- 0xC4A1,0xC4A2,0x4B40,0xC4A3,0x5C21,0x5C23,0xC4A4,0x5C27,
- 0x5B79,0xC4A5,0x432A,0x0000,0xC4A6,0xC4A7,0x0000,0x456F,
- 0x5C2B,0x5B7C,0x0000,0x5C28,0x0000,0xC4A8,0x0000,0x5C22,
- 0xC4A9,0x0000,0xC4AA,0xC4AB,0xC4AC,0xC4AD,0x3F39,0x5C2C,
- 0xC4AE,0xC4AF,0x4033,0x0000,0x0000,0xC4B0,0xC4B1,0x0000,
- 0x0000,0x5C2A,0x343D,0xC4B2,0xC4B3,0xC4B4,0x0000,0x0000,
-
- /* 6900h */
- 0x4F50,0x5B76,0x0000,0x0000,0x5C26,0x3058,0xC4B5,0x0000,
- 0x5B78,0xC4B6,0xC4B7,0x4C3A,0x5B7D,0x3F22,0x4447,0x5B73,
- 0xC4B8,0xC4B9,0x5C25,0xC4BA,0x0000,0x0000,0xC4BB,0xC4BC,
- 0x0000,0x3F7A,0x5C2F,0x3371,0x3821,0x0000,0x0000,0x0000,
- 0x0000,0x5C31,0x5B7A,0x5C30,0x0000,0x5C29,0x5B7B,0x0000,
- 0x5C2D,0x0000,0x5C2E,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x5C3F,0xC4BD,0x0000,0xC4BE,0x464E,0xC4BF,0x5C24,0x0000,
- 0xC4C0,0x5C3B,0x0000,0xC4C1,0x0000,0x5C3D,0x0000,0x4458,
- 0x0000,0x0000,0xC4C2,0x0000,0x0000,0xC4C3,0x0000,0x0000,
- 0x0000,0xC4C4,0x4D4C,0x0000,0x0000,0x0000,0xC4C5,0x0000,
- 0x0000,0x0000,0x0000,0x4976,0x5C38,0x424A,0x0000,0xC4C6,
- 0x0000,0x5C3E,0x413F,0xC4C7,0x5C35,0x5C42,0x5C41,0x0000,
- 0x466F,0x5C40,0x466A,0xC4C8,0xC4C9,0xC4CA,0xC4CB,0x0000,
- 0xC4CC,0xC4CD,0x5C44,0x5C37,0xC4CE,0x3648,0x5C3A,0x3D5D,
- 0xC4CF,0xC4D0,0xC4D1,0x4760,0x5C3C,0x364B,0x0000,0x5C34,
- 0x5C36,0x5C33,0xC4D2,0xC4D3,0x4F30,0x335A,0x5C39,0xC4D4,
- 0xC4D5,0x5C43,0x3335,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x3A67,0x0000,0x0000,0xC4D6,0x315D,0x0000,
- 0x0000,0x5C54,0xC4D7,0x0000,0x4F31,0x5C57,0xC4D8,0x0000,
- 0xC4D9,0x0000,0x0000,0x3F3A,0x5C56,0x0000,0x0000,0x0000,
- 0x5C55,0xC4DA,0x0000,0x0000,0x0000,0xC4DB,0xC4DC,0x5C52,
- 0xC4DD,0x0000,0x0000,0xC4DE,0x0000,0xC4DF,0x5C46,0xC4E0,
- 0x0000,0x5C63,0x5C45,0x0000,0x5C58,0x0000,0x0000,0xC4E1,
- 0xC4E2,0x0000,0xC4E3,0x5C50,0xC4E4,0x0000,0x5C4B,0x5C48,
- 0x0000,0x5C49,0x0000,0x5C51,0x0000,0xC4E5,0x0000,0x7422,
- 0xC4E6,0x0000,0x5C4E,0x393D,0x4448,0x4164,0x5C4C,0x0000,
- 0x5C47,0xC4E7,0x0000,0x5C4A,0x0000,0x0000,0xC4E8,0xC4E9,
- 0x4D4D,0x4B6A,0x0000,0x0000,0x0000,0x5C4F,0x5C59,0x0000,
- 0x0000,0x0000,0xC4EA,0x0000,0x0000,0xC4EB,0x0000,0x5C61,
- 0x5C5A,0x0000,0x0000,0x5C67,0x0000,0x5C65,0xC4EC,0xC4ED,
- 0x0000,0xC4EE,0x5C60,0xC4EF,0x0000,0xC4F0,0x0000,0x0000,
- 0x0000,0x5C5F,0x0000,0x4450,0x0000,0x4165,0xC4F1,0x5C5D,
-
- /* 6A00h */
- 0xC4F2,0xC4F3,0x5C5B,0xC4F4,0x0000,0x5C62,0x0000,0x0000,
- 0x0000,0x0000,0x5C68,0x4875,0x5C6E,0x0000,0x0000,0xC4F5,
- 0x0000,0xC4F6,0x5C69,0x5C6C,0x5C66,0xC4F7,0x0000,0x4374,
- 0x0000,0x4938,0xC4F8,0x5C5C,0x0000,0xC4F9,0x5C64,0x3E40,
- 0xC4FA,0x4C4F,0x5C78,0x5C6B,0xC4FB,0x0000,0x0000,0x0000,
- 0xC4FC,0x3822,0x3223,0x335F,0x0000,0x0000,0x5C53,0x0000,
- 0xC4FD,0x0000,0xC4FE,0x0000,0xC5A1,0x3E41,0x5C70,0xC5A2,
- 0x5C77,0x3C79,0x3372,0xC5A3,0x0000,0x432E,0xC5A4,0xC5A5,
- 0x0000,0x0000,0x0000,0x0000,0x5C6D,0xC5A6,0xC5A7,0x5C72,
- 0x5C76,0xC5A8,0xC5A9,0x3636,0x0000,0x0000,0xC5AA,0x0000,
- 0xC5AB,0xC5AC,0xC5AD,0x0000,0x0000,0xC5AE,0xC5AF,0x0000,
- 0x354C,0x5C74,0x0000,0xC5B0,0x0000,0x0000,0x0000,0x3521,
- 0x0000,0x464B,0x5C73,0x0000,0xC5B1,0x0000,0x5C75,0xC5B2,
- 0x0000,0x0000,0xC5B3,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0xC5B4,0x5C6F,0xC5B5,0x0000,0x0000,0x0000,0x0000,
- 0x5C71,0x0000,0x0000,0x0000,0x0000,0x0000,0xC5B6,0x3360,
- 0x4349,0xC5B7,0x0000,0xC5B8,0x5C7C,0x0000,0xC5B9,0xC5BA,
- 0x0000,0xC5BB,0x0000,0xC5BC,0x0000,0x5C7A,0x3869,0x0000,
- 0x5C79,0xC5BD,0x0000,0x0000,0x0000,0x0000,0x0000,0x5D21,
- 0x0000,0x0000,0x0000,0xC5BE,0x5B58,0xC5BF,0xC5C0,0xC5C1,
- 0x5C7B,0x0000,0x5C7D,0x5C7E,0x0000,0xC5C2,0x0000,0x0000,
- 0x0000,0x0000,0x5D2C,0xC5C3,0x5D28,0x0000,0x5B6D,0xC5C4,
- 0xC5C5,0xC5C6,0x0000,0x5D27,0xC5C7,0x0000,0x0000,0x0000,
- 0x5D26,0x0000,0x0000,0x5D23,0x0000,0xC5C8,0xC5C9,0xC5CA,
- 0x0000,0x5C6A,0x5D25,0x5D24,0x0000,0x0000,0xC5CB,0x0000,
- 0xC5CD,0xC5CC,0x0000,0x0000,0xC5CE,0x0000,0x0000,0x0000,
- 0xC5CF,0x5D2A,0x0000,0x4F26,0xC5D0,0xC5D1,0xC5D2,0x0000,
- 0x0000,0x0000,0x5D2D,0x367B,0xC5D3,0xC5D4,0x5D29,0x5D2B,
- 0x0000,0x0000,0x0000,0x0000,0xC5D5,0x0000,0x0000,0xC5D6,
- 0x4827,0x0000,0x5D2E,0x0000,0xC5D7,0x0000,0x0000,0x0000,
- 0xC5D8,0xC5D9,0xC5DA,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x5D32,0x5D2F,0xC5DB,0xC5DC,0x0000,0x0000,
-
- /* 6B00h */
- 0x0000,0x0000,0xC5DD,0xC5DE,0x4D73,0x5D30,0xC5DF,0xC5E0,
- 0x0000,0xC5E1,0x5C5E,0x0000,0x0000,0x0000,0x0000,0xC5E2,
- 0xC5E3,0xC5E4,0x5D33,0x0000,0x0000,0x0000,0x5D34,0xC5E5,
- 0x0000,0x0000,0x0000,0xC5E6,0x0000,0x3135,0xC5E7,0x5D36,
- 0x3767,0x3C21,0x0000,0x3655,0xC5E8,0x0000,0x0000,0x3224,
- 0xC5E9,0x0000,0x0000,0xC5EA,0xC5EB,0x0000,0x0000,0xC5EC,
- 0x0000,0x0000,0x4D5F,0x0000,0x0000,0xC5ED,0xC5EE,0x5D38,
- 0x5D37,0x5D3A,0x353D,0xC5EF,0x0000,0x3656,0x343E,0xC5F0,
- 0x0000,0x0000,0x0000,0x5D3D,0x0000,0x0000,0xC5F1,0x5D3C,
- 0x0000,0x5D3E,0xC5F2,0x0000,0x324E,0xC5F3,0x4337,0x0000,
- 0x5D3F,0x0000,0xC5F4,0x343F,0x5D41,0x0000,0xC5F5,0x0000,
- 0xC5F6,0x5D40,0x0000,0x5D42,0x0000,0xC5F7,0x0000,0x5D43,
- 0xC5F8,0x5D44,0x3B5F,0x4035,0x3A21,0x0000,0x4970,0xC5F9,
- 0x0000,0x4A62,0x4F44,0xC5FA,0x0000,0x0000,0xC5FB,0x3B75,
- 0xC5FC,0x0000,0x0000,0x3A50,0x4E72,0xC5FD,0x0000,0x0000,
- 0x5D45,0x5D46,0x0000,0x3B60,0x0000,0xC5FE,0xC6A1,0x5D47,
- 0x5D48,0x0000,0xC6A2,0x5D4A,0x5D49,0xC6A3,0x4B58,0x0000,
- 0x0000,0x3D5E,0x3C6C,0x3B44,0x0000,0x5D4B,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x5D4D,0x3F23,0xC6A4,
- 0x5D4C,0x0000,0x0000,0xC6A5,0x0000,0x0000,0x5D4E,0xC6A6,
- 0xC6A7,0x0000,0xC6A8,0xC6A9,0x5D4F,0x0000,0x0000,0x0000,
- 0xC6AA,0xC6AB,0x5D50,0x5D51,0xC6AC,0xC6AD,0xC6AE,0x5D52,
- 0xC6AF,0x5D54,0x5D53,0x5D55,0x3225,0x434A,0x0000,0x5D56,
- 0xC6B0,0xC6B1,0x3B26,0x334C,0x5D57,0xC6B2,0xC6B3,0x4542,
- 0x544C,0x0000,0x0000,0xC6B4,0xC6B5,0x3523,0x5D58,0x0000,
- 0x0000,0xC6B6,0x0000,0x5D59,0xC6B7,0x4A6C,0x4B68,0x0000,
- 0x0000,0x0000,0x4647,0x5D5A,0x4866,0x0000,0xC6B8,0x0000,
- 0x487B,0x0000,0xC6B9,0x4C53,0x0000,0x0000,0x0000,0x5D5B,
- 0x0000,0xC6BA,0x0000,0xC6BB,0x0000,0x0000,0xC6BC,0xC6BD,
- 0x0000,0x0000,0x0000,0x5D5D,0x5D5C,0x0000,0xC6BE,0x5D5F,
- 0x0000,0xC6BF,0x0000,0x5D5E,0x0000,0x0000,0x0000,0xC6C0,
- 0x0000,0xC6C1,0x0000,0x0000,0x0000,0x0000,0x0000,0xC6C2,
-
- /* 6C00h */
- 0x0000,0x0000,0xC6C3,0x0000,0xC6C4,0xC6C5,0x0000,0x0000,
- 0x5D61,0xC6C6,0x0000,0x0000,0x0000,0xC6C7,0xC6C8,0x3B61,
- 0xC6C9,0x4C31,0xC6CA,0x5D62,0x5D63,0x0000,0x0000,0x3524,
- 0x0000,0xC6CB,0x0000,0x5D64,0x0000,0x0000,0x0000,0xC6CC,
- 0x0000,0x0000,0x0000,0x5D66,0x5D65,0x0000,0xC6CD,0xC6CE,
- 0xC6CF,0x0000,0x0000,0x0000,0xC6D0,0x0000,0xC6D1,0x0000,
- 0x0000,0x0000,0x0000,0xC6D2,0x3F65,0xC6D3,0xC6D4,0x4939,
- 0x314A,0x0000,0xC6D5,0xC6D6,0x0000,0x0000,0x4845,0xC6D7,
- 0x4475,0x3D41,0x3561,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0xC6D8,0xC6D9,0x0000,0xC6DA,0x4846,0xC6DB,
- 0x3C2E,0x0000,0xC6DC,0x0000,0xC6DD,0x5D68,0x0000,0x3440,
- 0x0000,0xC6DE,0x3178,0xC6DF,0xC6E0,0x4672,0x5D67,0x393E,
- 0x4353,0x0000,0x5D69,0x0000,0x0000,0x0000,0x0000,0xC7B6,
- 0x5D71,0x0000,0x5D6A,0xC6E1,0x0000,0xC6E2,0x0000,0xC6E3,
- 0x4241,0x0000,0x3562,0x5D72,0xC6E4,0x0000,0xC6E5,0x0000,
- 0xC6E6,0xC6E7,0x3768,0xC6E8,0x0000,0x3525,0x5D70,0x0000,
- 0x0000,0x5D6E,0x5D6B,0x4D60,0x0000,0xC6E9,0xC6EA,0xC6EB,
- 0x4440,0xC6EC,0x0000,0x0000,0x4659,0x5D6C,0x0000,0x0000,
- 0x5D74,0x0000,0x5D73,0x3723,0xC6ED,0xC6EE,0x322D,0xC6EF,
- 0xC6F0,0x3A3B,0x5D6D,0x5D6F,0xC6F1,0x0000,0x0000,0xC6F2,
- 0x0000,0x4B57,0x4274,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x4B77,0x0000,0x0000,0x5D7C,0x0000,
- 0xC6F3,0x5D7D,0xC6F4,0x324F,0xC6F5,0x0000,0x0000,0x0000,
- 0x4A28,0x4C7D,0x5E21,0x3C23,0x3E42,0x5D78,0x5D7E,0x3168,
- 0x0000,0x3637,0xC6F6,0x0000,0x5D75,0x5D7A,0xC6F7,0x0000,
- 0x0000,0x4074,0x4771,0x0000,0x4867,0xC6F8,0x0000,0xC6F9,
- 0xC6FA,0xC6FB,0xC6FC,0x5D77,0xC6FD,0x4B21,0xC6FE,0x5D79,
- 0x0000,0x5E24,0xC7A1,0x5E22,0xC7A2,0x5D7B,0x0000,0x0000,
- 0xC7A3,0x4B22,0x4748,0x3563,0x0000,0x4525,0x0000,0xC7A4,
- 0x436D,0xC7A5,0x5E25,0xC7A6,0xC7A7,0x0000,0xC7A8,0x5E23,
- 0x4259,0x5D76,0xC7A9,0x314B,0xC7AA,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-
- /* 6D00h */
- 0x0000,0x0000,0x0000,0x0000,0xC7AB,0x0000,0x0000,0xC7AC,
- 0x0000,0x0000,0xC7AD,0x4D4E,0x5E30,0x0000,0xC7AE,0xC7AF,
- 0x0000,0xC7B0,0x5E2F,0xC7B1,0x0000,0x0000,0x0000,0x4076,
- 0x0000,0x5E2C,0xC7B2,0x4D6C,0x0000,0x0000,0x4636,0x5E26,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x4445,0xC7B3,0xC7B4,
- 0xC7B5,0x314C,0x393F,0x5E29,0x0000,0x0000,0xC7B7,0xC7B8,
- 0x0000,0xC7B9,0x3D27,0x5E2E,0x0000,0x5E2D,0x5E28,0x0000,
- 0x5E2B,0xC7BA,0x0000,0x3368,0xC7BB,0x5E2A,0x4749,0xC7BC,
- 0x0000,0x4E2E,0x0000,0x0000,0x3E74,0x4075,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xC7BD,
- 0x0000,0x5E36,0x5E34,0x0000,0x494D,0x0000,0xC7BE,0xC7BF,
- 0x0000,0xC7C0,0x0000,0x5E31,0x5E33,0xC7C1,0x313A,0xC7C2,
- 0x0000,0x3940,0x4F32,0x0000,0x333D,0x0000,0x4962,0xC7C3,
- 0xC7C4,0x0000,0x0000,0x0000,0x4D61,0x0000,0x0000,0x3324,
- 0x3F3B,0x5E35,0x0000,0x0000,0xC7C5,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0xC7C6,0x0000,0x0000,0x5E3A,0x0000,0xC7C7,
- 0x3E43,0x0000,0x0000,0x0000,0x4D30,0x0000,0x5E37,0x0000,
- 0x0000,0xC7C8,0xC7C9,0x5E32,0xC7CA,0x5E38,0xC7CB,0xC7CC,
- 0xC7CD,0x4E5E,0x0000,0x4573,0x4642,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0xC7CE,0x0000,0xC7CF,0x0000,0x0000,0x3336,
- 0x0000,0x0000,0x3155,0x0000,0xC7D0,0x5E3E,0x0000,0xC7D1,
- 0x5E41,0xC7D2,0x0000,0x0000,0x4E43,0xC7D3,0x0000,0xC7D4,
- 0x4D64,0x0000,0x0000,0x0000,0xC7D5,0x5E48,0x5E42,0x5E3F,
- 0xC7D6,0x0000,0xC7D7,0x4E54,0x5E45,0x0000,0xC7D8,0xC7D9,
- 0x0000,0x3D4A,0x5E47,0x0000,0x0000,0x5E4C,0xC7DA,0x0000,
- 0x4571,0x5E4A,0x0000,0xC7DB,0x0000,0xC7DC,0x5E44,0xC7DD,
- 0xC7DE,0x4338,0xC7DF,0x0000,0x5E4B,0xC7E0,0x5E40,0x0000,
- 0x5E46,0xC7E1,0x5E4D,0x307C,0x5E43,0x0000,0x5E4E,0xC7E2,
- 0xC7E3,0x3F3C,0x0000,0x3D5F,0xC7E4,0x4A25,0xC7E5,0x3A2E,
- 0x0000,0x5E3B,0x5E49,0x453A,0xC7E6,0x0000,0x0000,0x0000,
-
- /* 6E00h */
- 0xC7E7,0x0000,0x0000,0x0000,0xC7E8,0x4036,0x0000,0x3369,
- 0x3A51,0x3E44,0x5E3D,0x3D42,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x374C,0x0000,0x5E3C,0x0000,0x0000,
- 0x0000,0x5E52,0x3D6D,0x383A,0x0000,0x5E61,0xC7E9,0x5E5B,
- 0x3574,0x454F,0xC7EA,0x5E56,0x5E5F,0x302F,0x3132,0xC7EB,
- 0x0000,0x3239,0x0000,0x5E58,0x422C,0x5E4F,0x5E51,0x3941,
- 0x0000,0x0000,0xC7EC,0x0000,0x0000,0x0000,0xC7ED,0x0000,
- 0x5E62,0xC7EE,0x5E5D,0xC7EF,0xC7F0,0x0000,0x5E55,0x0000,
- 0x0000,0x0000,0x0000,0x5E5C,0xC7F1,0xC7F2,0x0000,0x0000,
- 0xC7F3,0xC7F4,0x4C2B,0xC7F5,0x0000,0x5E5A,0x5E5E,0xC7F6,
- 0x0000,0xC7F7,0xC7F8,0xC7F9,0xC7FA,0x0000,0x3850,0xC7FB,
- 0x3E45,0x0000,0x0000,0x4339,0xC7FC,0xC7FD,0xC7FE,0x5E54,
- 0x0000,0x0000,0xC8A1,0xC8A2,0x0000,0x0000,0x0000,0x4D2F,
- 0xC8A3,0x0000,0x0000,0x5E57,0x0000,0x0000,0x5E50,0x4572,
- 0x0000,0x0000,0x5E53,0xC8A4,0x0000,0x0000,0x5E59,0x0000,
- 0x0000,0x0000,0x0000,0xC8A5,0x0000,0xC8A6,0x4F51,0x3C3E,
- 0x4B7E,0x0000,0x5E63,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x482E,0xC8A7,0x0000,0x5E6F,
- 0x383B,0x0000,0x0000,0xC8A8,0x0000,0x0000,0x3D60,0x0000,
- 0x5E65,0xC8A9,0x0000,0x0000,0x4E2F,0x3942,0x0000,0x5E72,
- 0xC8AA,0x0000,0x306E,0x0000,0x0000,0x5E70,0x0000,0xC8AB,
- 0x0000,0x0000,0x5E64,0x0000,0x0000,0xC8AC,0xC8AD,0x5E6A,
- 0x0000,0xC8AE,0x5E6C,0xC8AF,0x0000,0x0000,0x4D4F,0x5E67,
- 0x0000,0x0000,0x452E,0xC8B0,0x0000,0x5E69,0x0000,0xC8B1,
- 0xC8B2,0xC8B3,0x5E71,0xC8B4,0x5E6B,0x4C47,0x0000,0xC8B5,
- 0xC8B6,0x5E66,0xC8B7,0x3C22,0x5E7E,0xC8B8,0xC8B9,0xC8BA,
- 0x0000,0x336A,0x0000,0x5E68,0x5E6D,0x5E6E,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x426C,0x425A,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0xC8BB,0x5E76,0xC8BC,0xC8BD,0x5E7C,
- 0x0000,0x0000,0x5E7A,0x0000,0x4529,0x0000,0x0000,0x5F23,
- 0x5E77,0xC8BE,0x0000,0xC8BF,0x0000,0xC8C0,0x5E78,0x5E60,
-
- /* 6F00h */
- 0x0000,0x3579,0x493A,0x0000,0xC8C1,0x0000,0x3C3F,0x0000,
- 0xC8C2,0x3977,0xC8C3,0x0000,0xC8C4,0xC8C5,0x0000,0x4F33,
- 0x0000,0x5E74,0x0000,0x5F22,0x3169,0x4166,0xC8C6,0x0000,
- 0xC8C7,0x0000,0xC8C8,0xC8C9,0x0000,0x0000,0x0000,0x0000,
- 0x4779,0x0000,0x3441,0x4E7A,0x0000,0x0000,0xC8CA,0x0000,
- 0x0000,0xC8CB,0xC8CC,0x4C21,0x4452,0xC8D3,0x0000,0xC8CD,
- 0xC8CE,0x5E7B,0x5E7D,0xC8CF,0x0000,0x0000,0xC8D0,0x0000,
- 0x4132,0x0000,0x0000,0xC8D1,0xC8D2,0x0000,0x5F21,0x5E79,
- 0x0000,0x5E73,0x0000,0x0000,0x0000,0x3443,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xC8D4,
- 0x0000,0xC8D5,0xC8D6,0xC8D7,0x3769,0x0000,0x0000,0xC8D8,
- 0x5F2F,0xC8D9,0xC8DA,0x5F2A,0x4078,0xC8DB,0xC8DC,0x3363,
- 0x0000,0xC8DD,0xC8DE,0x0000,0x3D61,0x0000,0x5F33,0x0000,
- 0xC8DF,0x0000,0x0000,0x0000,0xC8E0,0x5F2C,0x442C,0x5F29,
- 0x4459,0x0000,0x0000,0x0000,0x5F4C,0x0000,0x0000,0x0000,
- 0x5F26,0x0000,0x5F25,0x0000,0x5F2E,0xC8E1,0xC8E2,0x0000,
- 0x5F28,0x5F27,0x5F2D,0xC8E3,0x4021,0x0000,0x5F24,0xC8E4,
- 0xC8E5,0x0000,0x0000,0xC8E6,0xC8E7,0xC8E8,0x5F30,0x0000,
- 0xC8E9,0x5F31,0xC8EA,0xC8EB,0xC8EC,0x0000,0xC8ED,0x3442,
- 0x0000,0x0000,0xC8EE,0x0000,0x0000,0x0000,0x0000,0xC8EF,
- 0xC8F0,0x5F36,0x0000,0x5F35,0x5F37,0xC8F1,0xC8F2,0xC8F3,
- 0xC8F4,0x0000,0x5F3A,0x0000,0x0000,0x0000,0xC8F5,0xC8F6,
- 0xC8F7,0x4543,0x0000,0x5F34,0x0000,0xC8F8,0xC8F9,0x0000,
- 0x0000,0x5F38,0x0000,0x0000,0xC8FA,0x0000,0x0000,0x0000,
- 0x3763,0x4279,0x5F32,0x473B,0x0000,0xC8FB,0x5F39,0xC8FC,
- 0xC8FD,0x0000,0xC8FE,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x5F3E,0x5F3C,0x0000,0x0000,
- 0x5F3F,0x0000,0xC9A1,0x5F42,0x0000,0x0000,0xC9A2,0x5F3B,
- 0x396A,0x4728,0x0000,0x0000,0x5E39,0x0000,0x0000,0x0000,
- 0xC9A3,0xC9A4,0x0000,0x4D74,0x5F3D,0x0000,0x5F41,0x4275,
- 0xC9A5,0x5F40,0x0000,0x5F2B,0x0000,0xC9A6,0x6F69,0x0000,
- 0x0000,0xC9A7,0x5F45,0x0000,0xC9A8,0xC9A9,0x5F49,0x0000,
-
- /* 7000h */
- 0xC9AA,0x5F47,0x0000,0x0000,0x0000,0xC9AB,0xC9AC,0xC9AD,
- 0x0000,0x5F43,0x0000,0x5F44,0x0000,0xC9AE,0x0000,0x5F48,
- 0x0000,0x5F46,0x0000,0x0000,0x0000,0x494E,0x0000,0xC9AF,
- 0x5F4E,0x0000,0x5F4B,0x5F4A,0x0000,0x5F4D,0x4654,0x5F4F,
- 0xC9B0,0x0000,0x0000,0xC9B1,0x0000,0x0000,0x4375,0x426D,
- 0x0000,0x0000,0x0000,0x0000,0x4025,0x0000,0x0000,0xC9B2,
- 0x5F50,0x0000,0x5F52,0x0000,0xC9B3,0x0000,0x0000,0xC9B4,
- 0x0000,0xC9B5,0x0000,0x0000,0xC9B6,0x0000,0x5F51,0x0000,
- 0x0000,0x0000,0x0000,0xC9B7,0xC9B8,0x0000,0x0000,0x0000,
- 0xC9B9,0xC9BA,0xC9BB,0xC9BC,0x5E75,0x0000,0xC9C1,0x0000,
- 0x0000,0x5F53,0x0000,0x0000,0xC9BD,0xC9BE,0x0000,0x0000,
- 0x4667,0x0000,0x0000,0x0000,0x0000,0xC9BF,0xC9C0,0x0000,
- 0x0000,0x0000,0x0000,0x5F54,0xC9C2,0xC9C3,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x3250,0xC9C4,0x0000,0xC9C5,0x4574,
- 0x3325,0x0000,0x0000,0x0000,0x0000,0xC9C6,0xC9C7,0x0000,
- 0x3564,0x0000,0x0000,0x0000,0x3C5E,0x3A52,0xC9C8,0x0000,
- 0x0000,0xC9C9,0x0000,0x0000,0x0000,0xC9CA,0xC9CB,0x0000,
- 0x0000,0x4F27,0x3F66,0x0000,0x0000,0x0000,0x316A,0x0000,
- 0x0000,0x0000,0x5F56,0x0000,0xC9CC,0xC9CD,0xC9CE,0xC9CF,
- 0xC9D0,0x5F55,0x0000,0xC9D1,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0xC9D2,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0xC9D3,0x5F59,0x433A,0x5F5C,0x5F57,
- 0xC9D4,0xC9D5,0x0000,0x5F5B,0xC9D6,0x0000,0x0000,0xC9D7,
- 0x5F5A,0x4540,0x3059,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x4E75,0x0000,0xC9D8,0x5F5E,0x0000,0x0000,0x0000,0x3128,
- 0x0000,0xC9D9,0x0000,0xC9DA,0xC9DB,0xC9DC,0xC9DD,0x0000,
- 0xC9DE,0x5F60,0x0000,0x0000,0xC9DF,0x5F5F,0x0000,0x5F5D,
- 0x0000,0x0000,0x0000,0x0000,0xC9E0,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x5F58,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x4B23,0xC9E1,0x0000,0x0000,0x5F62,0x0000,0x0000,
-
- /* 7100h */
- 0x0000,0x0000,0x0000,0xC9E2,0xC9E3,0xC9E4,0xC9E5,0xC9E6,
- 0x0000,0x5F61,0x0000,0xC9E7,0xC9E8,0x0000,0x0000,0xC9E9,
- 0x0000,0x0000,0x0000,0x0000,0x316B,0x0000,0x0000,0x0000,
- 0x0000,0x5F64,0x4A32,0x0000,0x5F63,0x0000,0xC9EA,0x0000,
- 0xC9EB,0x4C35,0x0000,0x0000,0x0000,0x0000,0x3E47,0x0000,
- 0x0000,0x0000,0x0000,0xC9EC,0x0000,0xC9ED,0x0000,0xC9EE,
- 0xC9EF,0xC9F0,0x0000,0x0000,0x0000,0x0000,0x4133,0x0000,
- 0xC9F1,0x0000,0x0000,0x0000,0x3E46,0x0000,0x0000,0x0000,
- 0x0000,0xC9F2,0x0000,0x0000,0x0000,0xC9F3,0xC9F4,0xC9F5,
- 0x0000,0x4E7B,0xC9F6,0xC9F7,0x5F6A,0x0000,0x4079,0x0000,
- 0xC9F8,0x0000,0xC9F9,0x0000,0x0000,0x5F66,0x5F6B,0xC9FA,
- 0x0000,0x316C,0xC9FB,0x0000,0xC9FC,0x0000,0xC9FD,0x0000,
- 0xC9FE,0x0000,0x5F69,0x0000,0x4761,0x5F65,0x5F68,0x3E48,
- 0xCAA1,0x4851,0x0000,0x0000,0x5F6C,0x0000,0x3C51,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0xCAA2,0x0000,0x0000,0x0000,0x407A,0x0000,0x0000,
- 0xCAA3,0x0000,0x0000,0x0000,0x5F6F,0xCAA4,0x0000,0xCAA5,
- 0x5F67,0x0000,0x3727,0x0000,0xCAA6,0x0000,0x0000,0x5F6D,
- 0x0000,0x0000,0xCAA7,0x0000,0x4D50,0x5F70,0x0000,0x0000,
- 0x0000,0x7426,0xCAA8,0xCAA9,0x0000,0x0000,0x0000,0x3D4F,
- 0xCAAA,0x0000,0xCAAB,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x5F71,0x0000,0x0000,0x0000,0x5F72,0x0000,0x0000,0xCAAC,
- 0xCAAD,0x472E,0xCAAE,0xCAAF,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x5F74,0xCAB0,0x0000,0x0000,0x0000,0x5F75,0xCAB1,
- 0xCAB2,0xCAB3,0x0000,0x4733,0xCAB4,0x0000,0x0000,0x0000,
- 0x4575,0x5F77,0x0000,0xCAB5,0xCAB6,0x0000,0x5F79,0x0000,
- 0x4E55,0x0000,0x5F76,0xCAB7,0x5F78,0x316D,0xCAB8,0x5F73,
- 0x0000,0xCAB9,0xCABA,0x0000,0xCABB,0x0000,0x0000,0x535B,
- 0x5F7A,0x0000,0x0000,0x0000,0x0000,0x4167,0x3B38,0x5F7C,
- 0x0000,0x0000,0x0000,0x0000,0x5F7B,0x3F24,0x5259,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x5F7D,0x0000,0x0000,
- 0xCABC,0x6021,0x0000,0x5F6E,0x5F7E,0x0000,0xCABD,0x6022,
-
- /* 7200h */
- 0xCABE,0x0000,0x0000,0x0000,0x0000,0x0000,0x477A,0xCABF,
- 0xCAC0,0xCAC1,0x0000,0x0000,0x0000,0x6023,0x0000,0x0000,
- 0x6024,0x0000,0x0000,0xCAC2,0x0000,0x0000,0x0000,0xCAC3,
- 0x0000,0x0000,0xCAC4,0x6025,0x0000,0xCAC5,0x0000,0xCAC6,
- 0x0000,0x0000,0x0000,0x0000,0xCAC7,0x0000,0x0000,0x0000,
- 0x6026,0x0000,0x445E,0xCAC8,0x6028,0x6027,0x0000,0xCAC9,
- 0x6029,0x0000,0x602A,0x0000,0xCACA,0x3C5F,0x4963,0x0000,
- 0xCACB,0xCACC,0x4C6C,0x602B,0x602C,0x4156,0x3C24,0x602D,
- 0x602E,0xCACD,0xCACE,0xCACF,0x0000,0xCAD0,0x602F,0x4A52,
- 0x4847,0x0000,0x0000,0x6030,0x4757,0x0000,0xCAD1,0xCAD2,
- 0xCAD3,0x0000,0x442D,0xCAD4,0x0000,0xCAD5,0xCAD6,0x0000,
- 0x6031,0x3267,0xCAD7,0x356D,0xCAD8,0x4C46,0xCAD9,0x4C36,
- 0xCADA,0x3234,0x4F34,0xCADB,0x0000,0x0000,0x0000,0x4B52,
- 0xCADC,0x4A2A,0x0000,0xCADD,0x0000,0x0000,0xCADE,0xCADF,
- 0x0000,0xCAE0,0x4037,0x0000,0x6032,0x0000,0x0000,0xCAE1,
- 0xCAE2,0x4643,0x0000,0xCAE3,0xCAE4,0x3823,0x6033,0xCAE5,
- 0x3A54,0x6035,0x6034,0x0000,0xCAE6,0x0000,0x0000,0x6036,
- 0x0000,0xCAE7,0x0000,0x0000,0x0000,0xCAE8,0xCAE9,0x0000,
- 0x0000,0x0000,0x6037,0xCAEA,0x0000,0x0000,0x6038,0x0000,
- 0x0000,0x0000,0x0000,0xCAEB,0x0000,0x0000,0x0000,0x0000,
- 0x353E,0x0000,0x6039,0x0000,0x0000,0x0000,0x0000,0x603A,
- 0xCAEC,0x0000,0x0000,0x0000,0x3824,0xCAED,0xCAEE,0x4848,
- 0x0000,0xCAEF,0x603C,0x0000,0xCAF0,0x0000,0x3E75,0x0000,
- 0x0000,0x603B,0x0000,0x0000,0x0000,0x0000,0xCAF1,0x0000,
- 0x0000,0xCAF2,0x3638,0x603D,0x603F,0x0000,0x603E,0xCAF3,
- 0x0000,0xCAF4,0x0000,0x0000,0xCAF5,0x0000,0x6040,0x0000,
- 0x3851,0x0000,0x6041,0x0000,0x0000,0xCAF6,0xCAF7,0x3669,
- 0xCAF8,0x4140,0x0000,0x397D,0x0000,0x0000,0x0000,0xCAF9,
- 0x6043,0x6044,0x6042,0x0000,0x0000,0xCAFA,0x0000,0x0000,
- 0x0000,0x3C6D,0x0000,0x0000,0x4648,0x3639,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0xCAFB,0xCAFC,0x0000,0x0000,0x6046,
- 0x432C,0x6045,0xCAFD,0xCAFE,0x4F35,0x4762,0xCBA1,0x0000,
-
- /* 7300h */
- 0x0000,0x0000,0xCBA2,0x0000,0xCBA3,0xCBA4,0x0000,0xCBA5,
- 0x0000,0x0000,0x6049,0xCBA6,0x0000,0xCBA7,0x0000,0x0000,
- 0x0000,0x0000,0xCBA8,0xCBA9,0x0000,0x0000,0x604B,0x6048,
- 0xCBAA,0xCBAB,0x0000,0x4C54,0x604A,0x604C,0xCBAC,0x4E44,
- 0x0000,0x0000,0xCBAD,0x0000,0xCBAE,0x6050,0x0000,0xCBAF,
- 0xCBB0,0x604F,0x4376,0x472D,0xCBB1,0x0000,0x3825,0x604E,
- 0x0000,0xCBB2,0xCBB3,0x0000,0x604D,0xCBB4,0x4D31,0x4D32,
- 0x0000,0x0000,0xCBB5,0xCBB6,0x0000,0xCBB7,0x6051,0x316E,
- 0x0000,0x0000,0x0000,0xCBB8,0x3976,0x3B62,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0xCBB9,0x6052,0x6053,
- 0xCBBA,0x0000,0xCBBB,0x0000,0x0000,0x0000,0xCBBC,0x6055,
- 0xCBBD,0x0000,0x0000,0x0000,0x0000,0xCBBE,0xCBBF,0xCBC0,
- 0xCBC1,0x0000,0x0000,0x3D43,0x0000,0x0000,0xCBC2,0xCBC3,
- 0x6057,0xCBC4,0x6056,0xCBC5,0xCBC6,0x0000,0xCBC7,0xCBC8,
- 0x6058,0xCBC9,0x334D,0x0000,0x0000,0x605A,0x0000,0xCBCA,
- 0x6059,0xCBCB,0x605C,0x605B,0xCBCC,0x0000,0x0000,0x0000,
- 0xCBCD,0xCBCE,0x0000,0xCBCF,0x383C,0xCBD0,0xCBD1,0x4E28,
- 0x0000,0x364C,0x0000,0x3226,0x0000,0x0000,0xCBD2,0x0000,
- 0xCBD3,0x0000,0x0000,0xCBD4,0x0000,0xCBD5,0x366A,0xCBD6,
- 0xCBD7,0x0000,0x0000,0x0000,0xCBD8,0x0000,0xCBD9,0xCBDA,
- 0xCBDB,0x0000,0xCBDC,0x0000,0x0000,0xCBDD,0xCBDE,0x0000,
- 0x0000,0x3461,0xCBDF,0xCBE0,0x0000,0xCBE1,0x0000,0x0000,
- 0x0000,0x0000,0x4E68,0x605E,0x0000,0xCBE2,0x0000,0xCBE3,
- 0x0000,0xCBE4,0x0000,0x6060,0xCBE5,0xCBE6,0x0000,0xCBE7,
- 0x6061,0x0000,0x3251,0x0000,0x0000,0xCBE8,0xCBE9,0x0000,
- 0x605D,0xCBEA,0x3B39,0xCBEB,0xCBEC,0x4441,0x605F,0xCBED,
- 0x0000,0x0000,0xCBEE,0xCBEF,0x0000,0x0000,0xCBF0,0x0000,
- 0x0000,0xCBF1,0x0000,0x0000,0x0000,0xCBF2,0x6064,0x0000,
- 0x3C6E,0xCBF3,0x0000,0xCBF4,0x0000,0x6062,0xCBF5,0xCBF6,
- 0x0000,0xCBF7,0x373E,0x0000,0x0000,0x4849,0x6063,0x0000,
- 0x0000,0x607E,0x0000,0x0000,0xCBF8,0xCBF9,0x0000,0xCBFA,
- 0x6069,0xCBFB,0xCBFC,0xCBFD,0x0000,0xCBFE,0x383D,0xCCA1,
-
- /* 7400h */
- 0xCCA2,0xCCA3,0x0000,0x3565,0xCCA4,0x6066,0x4D7D,0xCCA5,
- 0x0000,0x4E30,0xCCA6,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0xCCA7,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0xCCA8,0xCCA9,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x4276,0x0000,0xCCAA,0x6068,0xCCAB,0x0000,
- 0xCCAC,0xCCAD,0xCCAE,0xCCAF,0xCCB0,0xCCB1,0xCCB2,0xCCB3,
- 0xCCB4,0xCCB5,0x606A,0x4E56,0x3657,0x487C,0x474A,0x0000,
- 0x0000,0xCCB6,0x606B,0x0000,0x0000,0x0000,0x0000,0x606D,
- 0xCCB7,0x6070,0x0000,0xCCB8,0xCCB9,0x0000,0xCCBA,0xCCBB,
- 0x0000,0x0000,0x0000,0xCCBC,0x0000,0xCCBD,0x0000,0x0000,
- 0x0000,0xCCBE,0xCCBF,0x0000,0x0000,0x606C,0x0000,0xCCC0,
- 0x0000,0x606F,0x386A,0x314D,0x6071,0xCCC1,0x3F70,0x606E,
- 0x4E5C,0x0000,0xCCC2,0x6074,0x7424,0x0000,0xCCC3,0xCCC4,
- 0xCCC5,0x6072,0x6075,0xCCC6,0x0000,0xCCC7,0xCCC8,0x6067,
- 0x6073,0xCCC9,0xCCCA,0x3A3C,0x0000,0x0000,0x6076,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x6077,0x0000,
- 0xCCCB,0xCCCC,0x0000,0x4D7E,0x0000,0xCCCD,0xCCCE,0xCCCF,
- 0x0000,0xCCD0,0x0000,0x6078,0x0000,0x0000,0x0000,0xCCD1,
- 0xCCD2,0xCCD3,0xCCD4,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0xCCD5,0xCCD6,0xCCD7,0x0000,0xCCD8,0x0000,0x6079,0xCCD9,
- 0xCCDA,0xCCDB,0x6065,0xCCDC,0x0000,0x0000,0xCCDD,0x607A,
- 0xCCDE,0xCCDF,0xCCE0,0xCCE1,0x0000,0x0000,0xCCE2,0xCCE3,
- 0x3444,0xCCE4,0xCCE5,0x0000,0x0000,0xCCE6,0x0000,0x0000,
- 0x0000,0xCCE7,0x0000,0xCCE8,0x0000,0x3C25,0x0000,0xCCE9,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0xCCEA,0xCCEB,0x607B,0x0000,0xCCEC,0x0000,0x0000,0x607C,
- 0xCCED,0x0000,0x0000,0xCCEE,0x607D,0x0000,0x0000,0x0000,
- 0xCCEF,0x0000,0xCCF0,0xCCF1,0x313B,0x0000,0xCCF2,0xCCF3,
- 0x6121,0x0000,0x493B,0x6122,0xCCF4,0x0000,0x3424,0x6123,
- 0xCCF5,0x6124,0xCCF6,0xCCF7,0x0000,0x0000,0x6125,0xCCF8,
- 0x6127,0x6128,0x6126,0x0000,0xCCF9,0x0000,0x4953,0x612A,
- 0x6129,0x0000,0xCCFA,0xCCFB,0xCCFC,0x0000,0x0000,0xCCFD,
-
- /* 7500h */
- 0x0000,0x0000,0x0000,0x612C,0x612B,0x612D,0xCCFE,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x612E,0x6130,0x612F,0x0000,
- 0x0000,0x3979,0xCDA1,0x6132,0x0000,0x6131,0xCDA2,0xCDA3,
- 0x3445,0x0000,0x3F53,0x0000,0x453C,0x0000,0x6133,0x4038,
- 0xCDA4,0xCDA5,0x0000,0x3B3A,0xCDA6,0x3179,0x6134,0xCDA7,
- 0x4D51,0xCDA8,0xCDA9,0x4A63,0x6135,0x0000,0x0000,0xCDAA,
- 0x4544,0x4D33,0x3943,0x3F3D,0x0000,0x0000,0xCDAB,0x434B,
- 0x5234,0xCDAC,0x442E,0x3268,0x6136,0xCDAD,0xCDAE,0xCDAF,
- 0xCDB0,0x0000,0x0000,0xCDB1,0x6137,0x0000,0x613C,0xCDB2,
- 0xCDB3,0x613A,0x6139,0x5A42,0x3326,0x6138,0xCDB4,0x305A,
- 0xCDB5,0x482A,0xCDB6,0x0000,0x484A,0x0000,0x0000,0xCDB7,
- 0x0000,0x4E31,0x613D,0x613B,0x435C,0x4026,0xCDB8,0xCDB9,
- 0x482B,0xCDBA,0x492D,0x0000,0x613F,0x4E2C,0x374D,0x6140,
- 0x0000,0x613E,0x4856,0x6141,0x0000,0x6142,0x0000,0xCDBB,
- 0x305B,0xCDBC,0x0000,0x3E76,0x6147,0x0000,0x6144,0x466D,
- 0x6143,0xCDBD,0xCDBE,0xCDBF,0xCDC0,0xCDC1,0xCDC2,0x3526,
- 0x0000,0xCDC3,0x614A,0x0000,0x0000,0xCDC4,0x6145,0x6146,
- 0x0000,0x6149,0x6148,0x4925,0x0000,0x0000,0x4142,0x4141,
- 0xCDC5,0x353F,0xCDC6,0xCDC7,0x614B,0xCDC8,0x0000,0x0000,
- 0x0000,0xCDC9,0x614C,0x0000,0xCDCA,0x614D,0x0000,0x0000,
- 0x0000,0x0000,0xCDCB,0x614F,0xCDCC,0x614E,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x3156,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x6157,0x4868,0x6151,0xCDCD,0x6153,0x0000,0x0000,
- 0x6155,0x3F3E,0xCDCE,0x0000,0x6156,0x6154,0x3C40,0xCDCF,
- 0xCDD0,0xCDD1,0x6150,0x6152,0xCDD2,0x4942,0xCDD3,0x3E49,
- 0x0000,0x0000,0x6159,0x0000,0xCDD4,0x6158,0xCDD5,0xCDD6,
- 0x0000,0x0000,0x615A,0x0000,0x3C26,0x3A2F,0x0000,0xCDD7,
- 0x4577,0x615B,0x0000,0x444B,0xCDD8,0x0000,0x615D,0xCDD9,
- 0xCDDA,0xCDDB,0x4E21,0x615C,0xCDDC,0x0000,0x0000,0xCDDD,
- 0x0000,0x4169,0x0000,0x0000,0xCDDE,0x0000,0xCDDF,0xCDE0,
- 0x6162,0xCDE1,0x6164,0x6165,0x4354,0x0000,0x0000,0x0000,
- 0x0000,0xCDE2,0x6163,0x0000,0x6160,0x0000,0x615E,0x615F,
-
- /* 7600h */
- 0xCDE3,0x6161,0xCDE4,0xCDE5,0xCDE6,0x0000,0x0000,0xCDE7,
- 0xCDE8,0x6168,0xCDE9,0x6166,0xCDEA,0x6167,0x0000,0xCDEB,
- 0x0000,0x0000,0xCDEC,0xCDED,0x0000,0xCDEE,0xCDEF,0x0000,
- 0x0000,0xCDF0,0x0000,0xCDF1,0xCDF2,0xCDF3,0xCDF4,0x6169,
- 0x616B,0x616C,0x616D,0xCDF5,0x616E,0xCDF6,0xCDF7,0x616A,
- 0x0000,0xCDF8,0x0000,0x0000,0x0000,0xCDF9,0x0000,0x0000,
- 0x6170,0x0000,0xCDFA,0xCDFB,0x616F,0xCDFC,0x0000,0x0000,
- 0xCDFD,0xCDFE,0xCEA1,0x6171,0xCEA2,0x0000,0x0000,0x0000,
- 0xCEA4,0xCEA5,0x4E45,0xCEA6,0xCEA7,0xCEA8,0x6174,0x6172,
- 0x6173,0xCEA9,0xCEA3,0xCEAA,0x3462,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x4C7E,0x0000,0x0000,0xCEAB,0x4A4A,0x0000,
- 0x6176,0xCEAC,0x0000,0x0000,0x6175,0x0000,0x0000,0xCEAD,
- 0x0000,0x6177,0x6178,0x0000,0xCEAE,0xCEAF,0x0000,0x617C,
- 0x6179,0x617A,0x617B,0x0000,0x617D,0xCEB0,0xCEB1,0xCEB2,
- 0x617E,0xCEB3,0x6221,0x0000,0xCEB4,0x0000,0x6222,0x0000,
- 0x6223,0x0000,0x482F,0x4550,0x6224,0x4772,0x4934,0x0000,
- 0x6225,0xCEB5,0x0000,0x6226,0x452A,0xCEB6,0x3327,0x3944,
- 0x6227,0x0000,0x0000,0x6228,0xCEB7,0xCEB8,0x6229,0x0000,
- 0x3B29,0x0000,0x0000,0x622B,0x0000,0xCEB9,0x622A,0x0000,
- 0x0000,0x622C,0x622D,0xCEBA,0xCEBB,0xCEBC,0x0000,0xCEBD,
- 0xCEBE,0x0000,0xCEBF,0xCEC0,0xCEC1,0xCEC2,0xCEC3,0xCEC4,
- 0xCEC5,0x0000,0xCEC6,0x0000,0x0000,0xCEC7,0x4869,0x0000,
- 0x622E,0x0000,0x0000,0x0000,0x622F,0x0000,0x0000,0x7369,
- 0x6230,0x6231,0x6232,0x0000,0x0000,0xCEC8,0x0000,0x3B2E,
- 0x0000,0xCEC9,0x6233,0x4756,0x0000,0xCECA,0x4B5F,0x0000,
- 0x314E,0xCECB,0x3157,0xCECC,0xCECD,0x6234,0xCECE,0x0000,
- 0x0000,0x0000,0x6236,0x0000,0xCECF,0x0000,0x6235,0x4570,
- 0x0000,0xCED0,0x0000,0x4039,0x5D39,0x0000,0x6237,0x4C41,
- 0xCED1,0x6238,0x0000,0x3446,0x4857,0x6239,0xCED2,0x623A,
- 0xCED3,0x0000,0x623B,0x0000,0xCED4,0x0000,0x4C5C,0x0000,
- 0xCED5,0xCED6,0x4C55,0x0000,0x443E,0x0000,0xCED7,0x0000,
- 0x416A,0xCED8,0x0000,0x623D,0xCED9,0x0000,0x3D62,0x0000,
-
- /* 7700h */
- 0xCEDA,0x3E4A,0x0000,0x0000,0x6240,0x0000,0xCEDB,0x623F,
- 0x623E,0x487D,0xCEDC,0x3447,0x3829,0x0000,0xCEDD,0x0000,
- 0x0000,0x0000,0xCEDE,0x0000,0xCEDF,0xCEE0,0x0000,0xCEE1,
- 0x0000,0xCEE2,0xCEE3,0x6246,0xCEE4,0x0000,0x6243,0x3F3F,
- 0x4C32,0x0000,0xCEE5,0x0000,0x6242,0x6244,0x6245,0x0000,
- 0xCEE6,0x6241,0x0000,0x0000,0x0000,0xCEE7,0xCEE8,0xCEE9,
- 0x0000,0x0000,0x0000,0x0000,0xCEEA,0xCEEB,0xCEEC,0x6247,
- 0x6248,0xCEED,0x442F,0x0000,0x3463,0xCEEE,0xCEEF,0x0000,
- 0x4365,0x0000,0xCEF0,0x0000,0x0000,0xCEF1,0xCEF2,0x6249,
- 0x0000,0x0000,0xCEF3,0x0000,0x0000,0xCEF4,0xCEF5,0xCEF6,
- 0x0000,0x0000,0xCEF7,0x0000,0x0000,0x0000,0xCEF8,0xCEF9,
- 0x0000,0x0000,0x624A,0x624D,0xCEFA,0x0000,0xCEFB,0xCEFC,
- 0xCEFD,0x3F67,0xCEFE,0x4644,0xCFA1,0x624E,0x4B53,0xCFA2,
- 0x624B,0x0000,0xCFA3,0x624C,0xCFA4,0x0000,0x0000,0x0000,
- 0xCFA5,0x0000,0xCFA6,0xCFA7,0xCFA8,0x0000,0x0000,0x0000,
- 0x0000,0x6251,0xCFA9,0x0000,0x0000,0xCFAA,0x6250,0x624F,
- 0xCFAB,0x0000,0x0000,0x0000,0xCFAC,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x6253,0xCFAD,0xCFAE,0x6252,0x0000,
- 0x0000,0x6254,0x0000,0x0000,0xCFAF,0xCFB0,0xCFB1,0x0000,
- 0x0000,0x0000,0xCFB2,0x0000,0x0000,0x0000,0x6256,0xCFB3,
- 0x6255,0x0000,0xCFB4,0x0000,0x0000,0x4A4D,0x0000,0xCFB5,
- 0x0000,0x0000,0xCFB6,0x0000,0x3D56,0x4E46,0xCFB7,0xCFB8,
- 0x6257,0xCFB9,0x0000,0x4637,0x0000,0xCFBA,0x6258,0x0000,
- 0x0000,0x6259,0x0000,0x625D,0x625B,0x625C,0xCFBB,0x625A,
- 0x0000,0x0000,0x0000,0xCFBC,0x0000,0x0000,0x0000,0x625E,
- 0x0000,0xCFBD,0x0000,0x0000,0x0000,0x625F,0x0000,0x0000,
- 0x0000,0xCFBE,0xCFBF,0x0000,0x0000,0xCFC0,0x0000,0x6260,
- 0x0000,0xCFC1,0x6261,0x4C37,0x6262,0x0000,0xCFC2,0xCFC3,
- 0xCFC4,0x0000,0x4C70,0x6263,0xCFC5,0x434E,0xCFC6,0x476A,
- 0x0000,0x366B,0xCFC7,0x0000,0xCFC8,0x433B,0x6264,0x363A,
- 0xCFC9,0xCFCA,0x0000,0x4050,0xCFCB,0x0000,0x0000,0x0000,
- 0xCFCC,0x0000,0x0000,0xCFCD,0x6265,0x0000,0x0000,0x0000,
-
- /* 7800h */
- 0x0000,0x0000,0x3A3D,0x0000,0x0000,0xCFCE,0xCFCF,0x0000,
- 0x0000,0xCFD0,0x0000,0x0000,0x6266,0xCFD1,0xCFD2,0x0000,
- 0x0000,0xCFD3,0x6267,0x0000,0x3826,0x3A55,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0xCFD4,0x0000,0x0000,
- 0x6269,0xCFD5,0xCFD6,0xCFD7,0x0000,0x4556,0x3A56,0x354E,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0xCFD8,0xCFD9,0x0000,
- 0xCFDA,0x0000,0x4B24,0x0000,0x474B,0xCFDB,0x0000,0xCFDC,
- 0x0000,0x0000,0x4557,0x0000,0x0000,0x0000,0x0000,0x395C,
- 0x0000,0x0000,0x0000,0xCFDD,0xCFDE,0x626B,0x0000,0xCFDF,
- 0xCFE0,0x0000,0x0000,0x0000,0xCFE1,0x0000,0xCFE2,0x0000,
- 0x0000,0x0000,0xCFE3,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0xCFE4,0x3E4B,0xCFE5,0x0000,
- 0xCFE6,0xCFE7,0x0000,0xCFE8,0xCFE9,0x0000,0x0000,0x0000,
- 0xCFEA,0x0000,0xCFEB,0x4E32,0x3945,0x0000,0xCFEC,0x3827,
- 0x0000,0x0000,0x4823,0x0000,0x626D,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0xCFED,0x0000,0x626F,0x0000,0xCFEE,0x0000,
- 0x0000,0x386B,0x0000,0x0000,0x0000,0x0000,0x626E,0x4476,
- 0x0000,0x0000,0xCFEF,0x0000,0x6271,0x3337,0x626C,0xCFF0,
- 0x0000,0x486A,0x0000,0x3130,0xCFF1,0x3A6C,0x0000,0x4F52,
- 0xCFF2,0x0000,0x6270,0x0000,0x0000,0xCFF4,0xCFF5,0xCFF6,
- 0x0000,0xCFF3,0x0000,0x6272,0xCFF7,0x0000,0x0000,0x4A4B,
- 0xCFF8,0x4059,0x6274,0x0000,0xCFF9,0xCFFA,0x0000,0x6275,
- 0xCFFB,0xCFFC,0xCFFD,0xCFFE,0x0000,0x6273,0x0000,0x0000,
- 0x0000,0x0000,0x334E,0xD0A1,0x627B,0xD0A2,0x627A,0xD0A3,
- 0x0000,0x3C27,0x0000,0x0000,0x0000,0x627C,0x6277,0xD0A4,
- 0xD0A5,0xD0A6,0x627D,0x6278,0xD0A7,0x0000,0xD0A8,0x0000,
- 0x4858,0x6276,0xD0A9,0xD0AA,0x6279,0xD0AB,0xD0AC,0x0000,
- 0x0000,0x0000,0x6322,0xD0AE,0x0000,0x0000,0x0000,0xD0AF,
- 0xD0B0,0xD0B1,0x0000,0x0000,0xD0AD,0x0000,0xD0B2,0x6321,
- 0x4B61,0x0000,0xD0B3,0x0000,0x627E,0x0000,0x0000,0x306B,
- 0x0000,0x0000,0xD0B4,0xD0B5,0x6324,0x0000,0xD0B7,0xD0B8,
- 0x0000,0x0000,0xD0B9,0xD0BA,0x0000,0x6323,0x0000,0xD0BB,
-
- /* 7900h */
- 0xD0B6,0x3E4C,0x0000,0x0000,0x0000,0x0000,0xD0BC,0x6325,
- 0x0000,0x0000,0x0000,0x0000,0xD0BD,0x0000,0x4143,0x0000,
- 0xD0BE,0x6327,0x6326,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x6328,0xD0BF,0x0000,0xD0C0,0x0000,0xD0C1,0xD0C2,
- 0xD0C3,0x0000,0x0000,0x0000,0x0000,0xD0C4,0x6268,0xD0C5,
- 0x0000,0xD0C6,0x626A,0x632A,0x6329,0xD0C7,0x0000,0x0000,
- 0x0000,0xD0C8,0x0000,0x0000,0xD0C9,0xD0CA,0x0000,0x0000,
- 0x0000,0x0000,0x3C28,0xD0CB,0x4E69,0xD0CC,0x3C52,0xD0CD,
- 0x632B,0x3737,0x0000,0x0000,0xD0CE,0xD0CF,0xD0D0,0x3540,
- 0x3527,0x3B63,0xD0D1,0xD0D2,0x0000,0x0000,0x0000,0xD0D3,
- 0x4D34,0xD0D4,0x0000,0x6331,0xD0D5,0x6330,0x4144,0x632D,
- 0xD0D6,0x0000,0x632F,0xD0D7,0xD0D8,0x3D4B,0x3F40,0x632E,
- 0x632C,0x0000,0x472A,0x0000,0x0000,0x3E4D,0x0000,0xD0D9,
- 0x493C,0xD0DA,0x0000,0xD0DB,0x0000,0x3A57,0x0000,0x0000,
- 0x0000,0x0000,0xD0DC,0x0000,0x0000,0x0000,0x0000,0x4578,
- 0x0000,0xD0DD,0x6332,0xD0DE,0xD0DF,0x0000,0xD0E0,0x6333,
- 0x6349,0x3658,0x0000,0x0000,0x4F3D,0x4135,0x0000,0x0000,
- 0x0000,0x0000,0x6334,0xD0E1,0xD0E2,0x3252,0x4477,0x4A21,
- 0x0000,0xD0E3,0x0000,0xD0E4,0xD0E5,0xD0E6,0xD0E7,0x0000,
- 0xD0E8,0x0000,0x0000,0xD0E9,0xD0EA,0x6335,0x0000,0x0000,
- 0x0000,0xD0EB,0x0000,0x0000,0x0000,0x0000,0x357A,0x6336,
- 0xD0EC,0xD0ED,0x6338,0xD0EE,0x0000,0x0000,0x6339,0xD0EF,
- 0x4729,0xD0F0,0x0000,0x633A,0xD0F1,0x0000,0x0000,0x0000,
- 0xD0F2,0x633B,0x633C,0xD0F3,0x0000,0x3659,0x3253,0x4645,
- 0x3D28,0x3B64,0xD0F4,0x0000,0xD0F5,0x0000,0x0000,0xD0F6,
- 0xD0F7,0x633D,0xD0F8,0x3D29,0x0000,0x0000,0x0000,0xD0F9,
- 0x0000,0x324A,0x4943,0x0000,0xD0FA,0x633E,0xD0FB,0x0000,
- 0x486B,0x0000,0xD0FC,0x0000,0x0000,0xD0FD,0xD0FE,0x4145,
- 0xD1A1,0x6341,0xD1A2,0x6342,0x4769,0xD1A3,0x3F41,0x633F,
- 0x0000,0x4361,0xD1A4,0xD1A5,0x6340,0xD1A6,0x0000,0x0000,
- 0x3E4E,0xD1A7,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0xD1A8,0x0000,0x0000,0x305C,0xD1A9,0x0000,0x0000,0x0000,
-
- /* 7A00h */
- 0x3529,0x0000,0xD1AA,0xD1AB,0x0000,0x0000,0x0000,0xD1AC,
- 0x6343,0xD1AD,0xD1AE,0x4478,0xD1AF,0x6344,0x4047,0x0000,
- 0x0000,0xD1B0,0x0000,0x0000,0x4C2D,0xD1B1,0x0000,0x4923,
- 0x6345,0x6346,0x4355,0xD1B2,0x4E47,0x0000,0xD1B3,0x6348,
- 0x6347,0xD1B4,0x0000,0x0000,0x0000,0x0000,0x0000,0xD1B5,
- 0x0000,0x0000,0x0000,0xD1B6,0x0000,0xD1B7,0x3C6F,0xD1B8,
- 0xD1B9,0x634A,0x3070,0x0000,0xD1BA,0xD1BB,0x0000,0x634D,
- 0xD1BC,0xD1BD,0xD1BE,0x634B,0x3254,0x374E,0x634C,0x3946,
- 0x3972,0x0000,0x4A66,0x634E,0xD1BF,0xD1C0,0x4B54,0xD1C1,
- 0xD1C2,0x6350,0x0000,0x0000,0xD1C3,0x4051,0x314F,0x323A,
- 0x302C,0x0000,0x0000,0x0000,0x0000,0xD1C4,0xD1C5,0x634F,
- 0x0000,0xD1C6,0x0000,0x0000,0xD1C7,0xD1C8,0x0000,0xD1C9,
- 0xD1CA,0x6351,0x6352,0x3E77,0x0000,0xD1CB,0x0000,0xD1CC,
- 0x0000,0x6353,0xD1CD,0x334F,0x0000,0xD1CE,0x0000,0x0000,
- 0x6355,0x0000,0x0000,0x0000,0x376A,0xD1CF,0x3566,0x0000,
- 0xD1D0,0x6356,0x3675,0x0000,0x0000,0x6357,0xD1D1,0x407C,
- 0xD1D2,0x464D,0xD1D3,0x4060,0x3A75,0xD1D4,0xD1D5,0x0000,
- 0x6358,0x0000,0xD1D6,0xD1D7,0x0000,0x0000,0x0000,0x0000,
- 0xD1D8,0xD1D9,0x4362,0x416B,0xD1DA,0x635A,0x635C,0x6359,
- 0x635B,0x0000,0x0000,0x0000,0x0000,0x0000,0xD1DB,0x3722,
- 0xD1DC,0x0000,0x0000,0xD1DD,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x635D,0x3726,0x0000,0xD1DE,0x0000,0x3567,0x4D52,
- 0x635F,0x0000,0x0000,0xD1DF,0x0000,0xD1E0,0x6360,0x0000,
- 0x0000,0xD1E1,0x312E,0xD1E2,0xD1E3,0x0000,0x0000,0x6363,
- 0x0000,0x0000,0x0000,0x3376,0x6362,0x6361,0xD1E4,0x6365,
- 0x635E,0xD1E5,0x6366,0x4E29,0xD1E6,0x6367,0xD1E7,0x6368,
- 0x0000,0xD1E8,0x5474,0x636A,0x0000,0x6369,0x0000,0x0000,
- 0x0000,0x636B,0x636C,0xD1E9,0x4E35,0x636D,0x0000,0x706F,
- 0x3E4F,0x636E,0x636F,0x3D57,0x0000,0x4638,0x6370,0x0000,
- 0xD1EA,0xD1EB,0x4328,0xD1EC,0xD1ED,0x6371,0x0000,0x433C,
- 0x6372,0xD1EE,0x0000,0x0000,0xD1EF,0x0000,0x3625,0x0000,
- 0x513F,0x435D,0x3C33,0xD1F0,0x0000,0xD1F1,0xD1F2,0x3448,
-
- /* 7B00h */
- 0x0000,0x0000,0x6373,0x0000,0x6422,0x0000,0x6376,0xD1F3,
- 0x3568,0x0000,0x6375,0x6424,0x0000,0x0000,0x0000,0x6374,
- 0x0000,0x3E50,0x0000,0x0000,0xD1F4,0x0000,0x0000,0x0000,
- 0x6378,0x6379,0x0000,0x452B,0x0000,0x0000,0x637A,0xD1F5,
- 0x335E,0x0000,0x0000,0xD1F6,0x0000,0x3F5A,0x4964,0xD1F7,
- 0x637C,0xD1F8,0xD1F9,0xD1FA,0x4268,0xD1FB,0xD1FC,0xD1FD,
- 0xD1FE,0xD2A1,0x0000,0x6377,0xD2A2,0x637B,0x637D,0x0000,
- 0x0000,0x3A7B,0x0000,0x0000,0x0000,0xD2A3,0x0000,0xD2A4,
- 0xD2A5,0xD2A6,0x0000,0x0000,0x0000,0x6426,0x492E,0xD2A7,
- 0x4826,0x4579,0x0000,0x365A,0x6425,0x6423,0xD2A8,0x4835,
- 0x637E,0x435E,0x457B,0x0000,0x457A,0xD2A9,0x3A76,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x6438,0x0000,0x0000,
- 0xD2AA,0x0000,0x0000,0x0000,0xD2AB,0x6428,0xD2AC,0x642A,
- 0x0000,0xD2AD,0xD2AE,0x0000,0x642D,0xD2AF,0x642E,0xD2B0,
- 0x642B,0x642C,0xD2B1,0xD2B2,0x6429,0x6427,0x0000,0xD2B3,
- 0x0000,0x0000,0x6421,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0xD2B4,0x0000,0x4A4F,0x3255,
- 0x0000,0xD2B5,0x0000,0x6435,0x0000,0x6432,0xD2B6,0x6437,
- 0xD2B7,0xD2B8,0x6436,0x0000,0x4773,0x4C27,0xD2B9,0x3B3B,
- 0x6430,0x6439,0x6434,0xD2BA,0x6433,0x642F,0xD2BB,0x6431,
- 0xD2BC,0x3449,0x0000,0x0000,0x0000,0xD2BD,0x0000,0x0000,
- 0x0000,0x0000,0x433D,0x0000,0xD2BE,0x407D,0x0000,0xD2BF,
- 0xD2C0,0x4822,0xD2C1,0x0000,0x643E,0xD2C2,0xD2C3,0x0000,
- 0x4824,0x0000,0xD2C4,0xD2C5,0xD2C6,0xD2C7,0x0000,0x0000,
- 0x4061,0x643B,0xD2C8,0x0000,0x484F,0xD2C9,0x643F,0x4A53,
- 0xD2CA,0x435B,0xD2CB,0x643A,0x643C,0x0000,0x0000,0x643D,
- 0x0000,0x0000,0x0000,0x0000,0xD2CC,0x0000,0xD2CD,0xD2CE,
- 0x0000,0xD2CF,0xD2D0,0xD2D1,0x0000,0x6440,0x0000,0x0000,
- 0x3C44,0x0000,0x0000,0x0000,0x4646,0x6445,0x6444,0x0000,
- 0xD2D2,0x6441,0xD2D3,0x0000,0x0000,0x4F36,0x0000,0x0000,
- 0x0000,0x0000,0xD2D4,0x644A,0xD2D5,0xD2D6,0x644E,0x644B,
- 0xD2D7,0xD2D8,0xD2D9,0x0000,0xD2DA,0x0000,0xD2DB,0x0000,
-
- /* 7C00h */
- 0x6447,0xD2DC,0xD2DD,0xD2DE,0xD2DF,0x0000,0xD2E0,0x6448,
- 0x0000,0xD2E1,0x0000,0xD2E2,0xD2E3,0x644D,0xD2E4,0xD2E5,
- 0x0000,0x6442,0x5255,0x6449,0x6443,0x0000,0x0000,0x644C,
- 0x0000,0xD2E6,0x0000,0xD2E7,0x0000,0x0000,0x0000,0x6452,
- 0xD2E8,0x344A,0x0000,0x644F,0x0000,0xD2E9,0xD2EA,0x6450,
- 0xD2EB,0x0000,0x6451,0x6454,0xD2EC,0x0000,0x0000,0x0000,
- 0x0000,0xD2ED,0x0000,0xD2EE,0xD2EF,0x0000,0xD2F0,0x6453,
- 0x4876,0xD2F1,0xD2F2,0x0000,0x0000,0x6455,0x4E7C,0x4A6D,
- 0x645A,0x0000,0x0000,0x6457,0x0000,0x0000,0xD2F3,0x0000,
- 0x0000,0x0000,0xD2F4,0x0000,0x6456,0x4052,0x0000,0x6459,
- 0x645B,0xD2F6,0xD2F7,0xD2F8,0x6458,0xD2F5,0x645F,0x0000,
- 0x645C,0xD2F9,0xD2FA,0xD2FB,0xD2FC,0xD2FD,0xD2FE,0x645D,
- 0x6446,0xD3A1,0x0000,0xD3A2,0x645E,0x6460,0x0000,0xD3A3,
- 0x0000,0xD3A4,0x0000,0x0000,0x6461,0xD3A5,0xD3A6,0x0000,
- 0xD3A7,0x0000,0xD3A8,0x4A46,0x0000,0x6462,0x0000,0x0000,
- 0x0000,0xD3A9,0x0000,0x0000,0xD3AA,0xD3AB,0x4C62,0x0000,
- 0x0000,0x364E,0x3729,0x6463,0x0000,0x0000,0xD3AC,0xD3AD,
- 0x0000,0x4A34,0x0000,0x3F68,0x0000,0x4C30,0x0000,0xD3AE,
- 0x6464,0x0000,0x4E33,0x0000,0xD3AF,0x4774,0x0000,0x4146,
- 0x4734,0x0000,0x0000,0x3D4D,0x0000,0x0000,0xD3B0,0x3040,
- 0xD3B1,0x6469,0x6467,0x0000,0x6465,0x3421,0xD3B2,0x3E51,
- 0x646A,0x0000,0x0000,0x6468,0x0000,0x6466,0x646E,0x0000,
- 0xD3B3,0x646D,0x646C,0x646B,0x0000,0x0000,0xD3B4,0xD3B5,
- 0x0000,0x646F,0xD3B6,0xD3B7,0xD3B8,0x6470,0x403A,0xD3B9,
- 0x6471,0x0000,0x6473,0x0000,0xD3BA,0x6472,0x0000,0xD3BB,
- 0xD3BC,0xD3BD,0x3852,0x0000,0x0000,0xD3BE,0x4138,0xD3BF,
- 0x0000,0x0000,0x6475,0xD3C0,0xD3C1,0xD3C2,0x457C,0xD3C3,
- 0x6474,0xD3C4,0xD3C5,0x0000,0x6476,0xD3C6,0x4A35,0x416C,
- 0x3947,0x0000,0x6477,0x0000,0x0000,0x0000,0xD3C7,0x4E48,
- 0x0000,0xD3C8,0x0000,0xD3C9,0x0000,0x0000,0x0000,0x6479,
- 0x0000,0x0000,0x647A,0x0000,0x647B,0xD3CA,0x647C,0x0000,
- 0x3B65,0x0000,0x647D,0x374F,0x0000,0x0000,0x356A,0x0000,
-
- /* 7D00h */
- 0x352A,0x0000,0x6521,0xD3CB,0x4C73,0x3948,0x647E,0xD3CC,
- 0xD3CD,0xD3CE,0x6524,0x4C66,0x0000,0x473C,0x0000,0xD3CF,
- 0x4933,0xD3D0,0xD3D1,0xD3D2,0x3D63,0x6523,0xD3D3,0x3C53,
- 0x3949,0x3B66,0x3569,0x4A36,0x6522,0xD3D4,0xD3D5,0x0000,
- 0x4147,0x4B42,0x3A77,0xD3D6,0x0000,0x0000,0xD3D7,0x0000,
- 0x0000,0x0000,0xD3D8,0x3B67,0x445D,0xD3D9,0x6527,0x4E5F,
- 0x3A59,0xD3DA,0x6528,0x3F42,0x0000,0x652A,0x0000,0x0000,
- 0x0000,0x3E52,0x3A30,0x0000,0xD3DB,0xD3DC,0xD3DD,0x6529,
- 0xD3DE,0xD3DF,0x3D2A,0x383E,0x4148,0x6525,0x652B,0xD3E0,
- 0xD3E1,0x0000,0x0000,0x6526,0x3750,0xD3E2,0x652E,0x6532,
- 0x376B,0xD3E3,0x0000,0xD3E4,0x0000,0x0000,0x652D,0xD3E5,
- 0x0000,0xD3E6,0xD3E7,0x6536,0xD3E8,0xD3E9,0x394A,0x0000,
- 0x0000,0x4D6D,0x303C,0x6533,0x0000,0xD3EA,0x356B,0xD3EB,
- 0x6530,0x0000,0xD3EC,0x0000,0x0000,0x0000,0x6531,0x0000,
- 0xD3ED,0x457D,0x652F,0x652C,0x0000,0x3328,0x4064,0x0000,
- 0xD3EE,0x3828,0xD3EF,0xD3F0,0x0000,0x6538,0x0000,0xD3F1,
- 0x0000,0xD3F2,0xD3F3,0xD3F4,0x0000,0xD3F5,0xD3F6,0x0000,
- 0xD3F7,0x6535,0x0000,0xD3F8,0xD3F9,0xD3FA,0x0000,0x6537,
- 0x0000,0xD3FB,0x0000,0x6534,0x0000,0x0000,0xD3FC,0xD3FD,
- 0x0000,0x3751,0x4233,0x6539,0x416E,0xD3FE,0xD4A1,0x6546,
- 0x0000,0x0000,0x6542,0x653C,0x0000,0x0000,0xD4A2,0xD4A3,
- 0x0000,0x0000,0xD4A4,0x6540,0x3C7A,0x305D,0x653B,0x6543,
- 0x6547,0x394B,0x4C56,0xD4A5,0x4456,0x653D,0xD4A6,0xD4A7,
- 0x6545,0xD4A8,0x653A,0x433E,0x0000,0x653F,0x303D,0x4C4A,
- 0x0000,0x0000,0xD4A9,0xD4AA,0xD4AB,0xD4AC,0xD4AD,0x653E,
- 0x0000,0x0000,0x365B,0x486C,0xD4AE,0xD4AF,0xD4B0,0x416D,
- 0x0000,0x4E50,0x3D6F,0x0000,0x0000,0x656E,0x0000,0xD4B1,
- 0x6548,0xD4B2,0x407E,0x0000,0x6544,0x6549,0x654B,0x0000,
- 0x4479,0x654E,0xD4B4,0x0000,0x654A,0xD4B5,0xD4B6,0x0000,
- 0x4A54,0x344B,0xD4B7,0xD4B8,0x4C4B,0xD4B9,0x0000,0x305E,
- 0x0000,0xD4BA,0x654D,0x0000,0x4E7D,0xD4BB,0xD4BC,0x0000,
- 0x0000,0xD4BD,0xD4BE,0x654C,0x0000,0x0000,0x0000,0x0000,
-
- /* 7E00h */
- 0xD4B3,0x316F,0x0000,0x0000,0x466C,0x654F,0x0000,0x0000,
- 0xD4BF,0x6556,0x6550,0x6557,0x0000,0x0000,0x0000,0x0000,
- 0xD4C0,0xD4C1,0x6553,0x0000,0x0000,0xD4C2,0x0000,0xD4C3,
- 0x0000,0x0000,0x0000,0x477B,0xD4C4,0xD4C5,0x3C4A,0x6555,
- 0xD4C6,0x6552,0x6558,0x6551,0x0000,0x0000,0x3D44,0xD4C7,
- 0xD4C8,0x0000,0x0000,0x4B25,0xD4C9,0xD4CA,0x3D4C,0xD4CB,
- 0x0000,0x6554,0x6560,0xD4CC,0x0000,0x655C,0xD4CD,0x655F,
- 0x0000,0x655D,0x6561,0x655B,0x0000,0x6541,0x4053,0xD4CE,
- 0x0000,0x484B,0x0000,0x655E,0xD4CF,0xD4D0,0x6559,0xD4D1,
- 0x0000,0x0000,0x4121,0x3752,0x0000,0x3D2B,0xD4D2,0x0000,
- 0xD4D3,0x0000,0xD4D4,0x0000,0x3F25,0x4136,0x6564,0x0000,
- 0xD4D5,0x6566,0x6567,0x0000,0x0000,0x6563,0x6565,0xD4D6,
- 0x0000,0xD4D7,0xD4D8,0x0000,0x0000,0xD4D9,0x655A,0x6562,
- 0x0000,0x656A,0x6569,0xD4DA,0x0000,0x4B7A,0xD4DB,0xD4DC,
- 0x372B,0x0000,0x0000,0xD4DD,0x0000,0x0000,0x0000,0x0000,
- 0xD4DE,0x6568,0x0000,0x656C,0x656B,0x656F,0xD4DF,0x6571,
- 0x0000,0xD4E0,0x3B3C,0x656D,0x0000,0x0000,0xD4E1,0xD4E2,
- 0x6572,0x6573,0xD4E3,0x0000,0x6574,0xD4E4,0x657A,0x453B,
- 0x6576,0xD4E5,0x6575,0x6577,0x6578,0xD4E6,0x6579,0x0000,
- 0xD4E7,0x0000,0xD4E8,0x657B,0x657C,0xD4E9,0xD4EA,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-
- /* 7F00h */
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x344C,0x0000,
- 0x657D,0x0000,0x657E,0xD4EC,0xD4EB,0xD4ED,0xD4EE,0xD4EF,
- 0x0000,0x0000,0x0000,0xD4F0,0xD4F1,0x6621,0x0000,0xD4F2,
- 0x0000,0x0000,0x0000,0x0000,0x6622,0x6623,0x6624,0xD4F3,
- 0x6625,0x6626,0xD4F4,0xD4F5,0x6628,0x6627,0x0000,0x0000,
- 0x6629,0x0000,0x0000,0xD4F6,0xD4F7,0xD4F8,0x0000,0x662A,
- 0x662B,0xD4F9,0x0000,0xD4FA,0xD4FB,0xD4FC,0xD4FD,0x662E,
- 0x662C,0x662D,0x3A61,0x3753,0x0000,0xD4FE,0x4356,0x0000,
- 0x4833,0xD5A1,0x3D70,0x0000,0x0000,0x474D,0x0000,0x486D,
- 0x662F,0x586D,0x0000,0x0000,0x0000,0xD5A2,0xD5A3,0xD5A4,
- 0xD5A5,0x0000,0x6630,0x6632,0x0000,0x4D65,0x6631,0x6634,
- 0x6633,0x0000,0x4D53,0xD5A6,0x6635,0xD5A7,0x487E,0xD5A8,
- 0xD5A9,0xD5AA,0x0000,0x0000,0x6636,0x0000,0xD5AB,0xD5AC,
- 0x0000,0x0000,0x6639,0x0000,0xD5AD,0x6638,0x6637,0x0000,
- 0x0000,0xD5AE,0xD5AF,0x663A,0x3732,0x0000,0xD5B0,0x0000,
- 0x4122,0x3541,0xD5B1,0x0000,0x0000,0xD5B2,0x663E,0x663B,
- 0x0000,0x0000,0x663C,0x0000,0xD5B3,0x0000,0x663F,0x0000,
- 0x6640,0x663D,0x0000,0x0000,0xD5B4,0x3129,0x0000,0xD5B5,
- 0xD5B6,0x3227,0x0000,0xD5B7,0x0000,0x6642,0x6643,0x0000,
- 0xD5B8,0x0000,0x6644,0x0000,0x4D62,0x0000,0xD5B9,0xD5BA,
- 0x0000,0x0000,0x3D2C,0x0000,0x6646,0x6645,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0xD5BB,0x0000,0x0000,0x0000,0xD5BC,
- 0x3F69,0x6647,0x0000,0xD5BD,0x0000,0xD5BE,0x6648,0x0000,
- 0xD5BF,0x6649,0x0000,0x3465,0xD5C0,0x0000,0xD5C1,0xD5C2,
- 0x344D,0x0000,0xD5C3,0x664A,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x664B,0xD5C4,0x4B5D,0x4D63,0xD5C5,0xD5C6,0xD5C7,
-
- /* 8000h */
- 0x4D54,0x4F37,0x0000,0x394D,0x664E,0x3C54,0x664D,0xD5C8,
- 0xD5C9,0x0000,0xD5CA,0x664F,0x3C29,0xD5CB,0xD5CC,0xD5CD,
- 0x4251,0xD5CE,0x6650,0xD5CF,0xD5D0,0x394C,0xD5D1,0x4C57,
- 0x6651,0x6652,0x0000,0x0000,0x6653,0xD5D2,0xD5D3,0xD5D4,
- 0xD5D5,0x6654,0x0000,0x0000,0xD5D6,0x0000,0xD5D7,0x0000,
- 0x6655,0x0000,0x0000,0x0000,0xD5D8,0x0000,0xD5D9,0x0000,
- 0xD5DA,0x0000,0x0000,0x3C2A,0xD5DB,0xD5DC,0x4C6D,0xD5DD,
- 0x0000,0xD5DE,0xD5DF,0x6657,0xD5E0,0x433F,0xD5E1,0x6656,
- 0xD5E2,0x0000,0x0000,0x0000,0xD5E3,0x0000,0x6659,0x0000,
- 0x0000,0x0000,0x6658,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x665A,0x0000,0x0000,0x0000,0x403B,0x0000,
- 0x665B,0x0000,0x665C,0x0000,0x0000,0x0000,0x4A39,0x665D,
- 0xD5E4,0x416F,0x665E,0x0000,0xD5E5,0x0000,0xD5E6,0x0000,
- 0x665F,0x0000,0x0000,0x0000,0x0000,0xD5E7,0x0000,0x4E7E,
- 0x6662,0xD5E8,0x6661,0x6660,0x4430,0xD5E9,0x6663,0x3F26,
- 0x0000,0x6664,0x0000,0x0000,0x0000,0x6665,0x4F38,0x6666,
- 0x0000,0xD5EA,0x0000,0x0000,0x6667,0x6669,0x6668,0x4825,
- 0xD5EB,0x4679,0x0000,0x4F3E,0x4829,0x0000,0xD5EC,0x0000,
- 0x0000,0x0000,0x0000,0x666B,0x0000,0x0000,0x3E53,0x0000,
- 0x492A,0x0000,0x666C,0x666A,0xD5ED,0x344E,0xD5EE,0x0000,
- 0x0000,0x3854,0x3B68,0x0000,0x0000,0x486E,0xD5EF,0xD5F0,
- 0x0000,0x382A,0x4B43,0xD5F1,0x666F,0x666D,0x0000,0x394E,
- 0x0000,0x394F,0x3069,0x0000,0x3A68,0x0000,0x0000,0x0000,
- 0xD5F2,0xD5F3,0x4759,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x305F,0x6674,0x0000,0x4340,0x0000,
- 0xD5F4,0x0000,0x0000,0x0000,0x4758,0xD5F5,0x425B,0xD5F6,
- 0x0000,0x0000,0xD5F7,0x0000,0xD5F8,0xD5F9,0x6676,0xD5FA,
- 0xD5FB,0x6672,0x6675,0x6670,0x0000,0x6673,0x4B26,0x0000,
- 0xD5FC,0x3855,0x0000,0x0000,0x307D,0x6671,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0xD5FD,0xD5FE,0x6678,
- 0xD6A1,0x6679,0xD6A2,0xD6A3,0x4639,0x0000,0xD6A4,0x0000,
- 0x363B,0xD6A5,0xD6A6,0x0000,0x6726,0x473D,0xD6A7,0x0000,
-
- /* 8100h */
- 0x0000,0x0000,0x3B69,0xD6A8,0x0000,0x363C,0x4048,0x4F46,
- 0x4C2E,0x6677,0x4054,0xD6A9,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xD6AA,0xD6AB,
- 0xD6AC,0x0000,0x3553,0x667A,0xD6AD,0x0000,0xD6AE,0x0000,
- 0xD6AF,0x0000,0x0000,0x667C,0xD6B0,0x0000,0x0000,0xD6B1,
- 0x0000,0x667B,0x0000,0x0000,0xD6B2,0x0000,0x0000,0x667D,
- 0xD6B3,0x4326,0x0000,0x473E,0x0000,0xD6B4,0x0000,0x0000,
- 0x0000,0x4431,0xD6B5,0x0000,0xD6B6,0x0000,0x6723,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0xD6B7,0x6722,0xD6B8,
- 0x0000,0x0000,0xD6B9,0x667E,0xD6BA,0x0000,0x3F55,0x0000,
- 0x4965,0x6725,0xD6BB,0x6724,0x3950,0x4F53,0x0000,0xD6BC,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x6735,
- 0xD6BD,0xD6BE,0x0000,0x0000,0x0000,0x6729,0x672A,0xD6BF,
- 0xD6C0,0xD6C1,0x0000,0x3C70,0x0000,0xD6C2,0x6728,0xD6C3,
- 0x3978,0x6727,0x0000,0x0000,0x672B,0x0000,0x0000,0xD6C4,
- 0x4432,0x4A22,0x4123,0x0000,0x0000,0x0000,0x0000,0x425C,
- 0x672F,0xD6C5,0x6730,0x672C,0xD6C7,0xD6C8,0xD6C9,0x0000,
- 0x672D,0x0000,0x672E,0xD6CA,0x0000,0x0000,0xD6CB,0x3951,
- 0xD6C6,0x0000,0x0000,0x6736,0x0000,0x6732,0xD6CC,0x0000,
- 0xD6CD,0x0000,0x4966,0xD6CE,0x4B6C,0x4928,0xD6CF,0x0000,
- 0x6731,0x0000,0xD6D0,0x6734,0x6733,0x0000,0x0000,0x0000,
- 0x4B44,0x6737,0x0000,0x0000,0x0000,0x0000,0xD6D1,0x0000,
- 0x6738,0x0000,0xD6D2,0x4137,0xD6D3,0x6739,0x0000,0x0000,
- 0x673B,0x0000,0x673F,0xD6D4,0x0000,0x673C,0x673A,0x473F,
- 0x673D,0x0000,0x673E,0xD6D6,0x0000,0xD6D7,0x3232,0x0000,
- 0x6745,0x6740,0xD6D8,0xD6D5,0x0000,0x6741,0xD6D9,0xD6DA,
- 0x0000,0x6742,0x0000,0x4221,0x0000,0xD6DB,0x0000,0xD6DC,
- 0x6744,0x6743,0x6746,0xD6DD,0x0000,0xD6DE,0xD6DF,0x6747,
- 0x6748,0xD6E0,0x0000,0x3F43,0xD6E1,0x3269,0x0000,0x6749,
- 0x4E57,0x0000,0x3C2B,0xD6E2,0xD6E3,0x3D2D,0x0000,0x0000,
- 0xD6E4,0xD6E5,0xD6E6,0x3B6A,0x4357,0xD6E7,0xD6E8,0x0000,
- 0xD6E9,0xD6EA,0x674A,0x674B,0x3131,0xD6EB,0x674C,0xD6EC,
-
- /* 8200h */
- 0xD6ED,0x674D,0x674E,0xD6EE,0x0000,0x674F,0x0000,0x6750,
- 0x363D,0x5A2A,0x6751,0x0000,0x4065,0x6752,0x3C4B,0xD6EF,
- 0x6753,0x0000,0x5030,0xD6F0,0xD6F1,0x0000,0x6754,0x4A5E,
- 0x345C,0xD6F2,0xD6F3,0x4124,0x3D58,0xD6F4,0x4971,0x3D2E,
- 0x0000,0xD6F5,0xD6F6,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0xD6F7,0x6755,0x3952,0x6756,0x484C,0x0000,0x6764,0x0000,
- 0x0000,0x0000,0xD6F8,0x6758,0xD6F9,0x4249,0x4775,0x383F,
- 0x6757,0x4125,0xD6FA,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x6759,0x0000,0x0000,0xD6FB,0xD6FC,0xD6FD,0xD6FE,0x447A,
- 0x0000,0x0000,0x0000,0xD7A1,0x0000,0x0000,0xD7A2,0xD7A3,
- 0x0000,0xD7A4,0x0000,0x0000,0x0000,0x0000,0xD7A5,0x0000,
- 0x675B,0x675A,0x675D,0x0000,0xD7A6,0x675C,0x0000,0x675E,
- 0xD7A7,0x0000,0x6760,0xD7A8,0x675F,0x0000,0x344F,0xD7A9,
- 0x6761,0x0000,0x6762,0x6763,0x0000,0xD7AA,0x3A31,0x4E49,
- 0x0000,0x6765,0x3F27,0x0000,0xD7AB,0x0000,0x3170,0x6766,
- 0x6767,0x0000,0x0000,0xD7AC,0x0000,0xD7AD,0x6768,0xD7AE,
- 0xD7AF,0xD7B0,0x0000,0xD7B1,0xD7B2,0x0000,0x0000,0xD7B3,
- 0x0000,0xD7B4,0xD7B5,0x3072,0x0000,0x6769,0xD7B6,0x0000,
- 0x0000,0xD7B7,0x676A,0x0000,0xD7B8,0x0000,0xD7B9,0x0000,
- 0xD7BA,0x4967,0xD7BB,0xD7BC,0x0000,0x3C47,0x0000,0x676C,
- 0xD7BD,0xD7BE,0x0000,0xD7BF,0xD7C0,0x3329,0x3032,0xD7C1,
- 0xD7C2,0xD7C3,0xD7C4,0x676B,0x676E,0x474E,0xD7C5,0x3F44,
- 0xD7C6,0x3256,0xD7C7,0x4B27,0xD7C8,0x0000,0x0000,0xD7C9,
- 0x375D,0x365C,0xD7CA,0x676D,0xD7CB,0x326A,0xD7CC,0xD7CD,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x3423,0xD7CE,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0xD7CF,0x3171,0x6772,0x4E6A,0x425D,0xD7D0,0x0000,0x4944,
- 0x0000,0x677E,0xD7D1,0x3257,0x677C,0x0000,0x677A,0x6771,
- 0xD7D2,0x676F,0xD7D3,0x6770,0xD7D4,0x3C63,0x366C,0x4377,
- 0xD7D5,0x0000,0xD7D6,0x4651,0x0000,0xD7D7,0x0000,0xD7D8,
- 0x0000,0x3151,0x0000,0x6774,0x6773,0x0000,0xD7D9,0xD7DA,
- 0x0000,0x6779,0x6775,0x6778,0x0000,0xD7DB,0xD7DC,0x0000,
-
- /* 8300h */
- 0xD7DD,0xD7DE,0x4C50,0x6777,0x3258,0x337D,0x677B,0xD7DF,
- 0xD7E0,0x677D,0xD7E1,0xD7E2,0x0000,0x0000,0x3754,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x6823,0x682C,
- 0x682D,0x0000,0x0000,0xD7E4,0x302B,0xD7E5,0xD7E6,0xD7E7,
- 0x0000,0xD7E8,0xD7E9,0x6834,0x0000,0x0000,0x0000,0x0000,
- 0x3071,0x0000,0x0000,0x682B,0xD7EA,0xD7EB,0xD7EC,0x682A,
- 0xD7ED,0x6825,0x6824,0xD7EE,0x6822,0x6821,0x4363,0xD7EF,
- 0x427B,0x6827,0xD7F0,0x0000,0xD7F1,0xD7F2,0x0000,0x0000,
- 0x6826,0x0000,0xD7F3,0xD7F4,0xD7F5,0x6829,0x0000,0xD7F6,
- 0x0000,0x4170,0x3755,0x0000,0x0000,0xD7F7,0xD7F8,0x3141,
- 0x6828,0xD7F9,0x3953,0xD8BE,0xD7E3,0xD7FA,0xD7FB,0xD7FC,
- 0x4171,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0xD7FD,0x0000,0x0000,0x683A,0x0000,0x683B,0x0000,0x3259,
- 0xD7FE,0x0000,0x0000,0x322E,0x6838,0xD8A1,0x0000,0xD8A2,
- 0xD8A3,0x0000,0xD8A4,0x0000,0xD8A5,0x682E,0xD8A6,0x6836,
- 0x0000,0x683D,0x6837,0x0000,0x0000,0xD8A7,0x6835,0x0000,
- 0x0000,0x0000,0xD8A8,0x6776,0xD8A9,0xD8AA,0x6833,0x0000,
- 0xD8AB,0xD8AC,0x682F,0xD8AD,0xD8AE,0xD8AF,0x3450,0x6831,
- 0x683C,0x0000,0x6832,0x0000,0x0000,0x0000,0xD8B0,0xD8B1,
- 0x683E,0xD8B2,0x6830,0x477C,0xD8B3,0xD8CC,0x0000,0x0000,
- 0x0000,0x4D69,0x0000,0x0000,0x0000,0x6839,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x684F,0xD8B4,0xD8B5,
- 0xD8B6,0x6847,0x0000,0x0000,0x0000,0x3F7B,0x0000,0xD8B7,
- 0x0000,0xD8B8,0x3546,0x0000,0x365D,0x0000,0x6842,0xD8B9,
- 0xD8BA,0xD8BB,0x0000,0x325B,0xD8BC,0x0000,0x3E54,0x0000,
- 0x6845,0x0000,0x0000,0x0000,0x3A5A,0xD8BD,0x0000,0x4551,
- 0x684A,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0xD8BF,0x4A6E,0xD8C0,0x6841,0x0000,0x0000,0x0000,0x325A,
- 0x3856,0x4929,0x684B,0x0000,0x683F,0x0000,0xD8C1,0x6848,
- 0xD8C2,0xD8C3,0x0000,0x6852,0xD8C4,0x6843,0x0000,0x0000,
-
- /* 8400h */
- 0x0000,0xD8C5,0x0000,0x6844,0x463A,0x0000,0xD8C6,0x6849,
- 0x0000,0x0000,0xD8C7,0x6846,0x4B28,0x684C,0x3060,0xD8C8,
- 0x0000,0xD8C9,0x0000,0x6840,0x0000,0xD8CA,0x0000,0x0000,
- 0x0000,0xD8CB,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x684E,0x0000,0x684D,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x476B,0x6854,0x0000,0x685F,0x0000,0x0000,0xD8CD,
- 0x0000,0x337E,0x0000,0x0000,0x0000,0x6862,0x0000,0x0000,
- 0x6850,0xD8CE,0x0000,0x0000,0x6855,0x4D6E,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0xD8CF,0x685E,0xD8D0,
- 0xD8D1,0x4D55,0xD8D2,0x0000,0x0000,0xD8D3,0x4E2A,0xD8D4,
- 0x0000,0xD8D5,0xD8D6,0x0000,0x0000,0x0000,0xD8D7,0x4378,
- 0xD8D8,0xD8D9,0xD8DA,0x336B,0xD8DB,0x0000,0x0000,0x0000,
- 0xD8DC,0x4972,0x6864,0x4621,0xD8DD,0xD8DE,0x3031,0xD8DF,
- 0x0000,0x685D,0xD8E0,0x6859,0x4172,0x6853,0x685B,0x6860,
- 0xD8E1,0x472C,0x0000,0xD8E2,0xD8E3,0x302A,0xD8E4,0x6858,
- 0xD8E5,0x6861,0x4978,0x0000,0xD8E6,0xD8E7,0x0000,0x0000,
- 0x0000,0xD8E8,0x685C,0x0000,0x6857,0xD8E9,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x3E55,0x0000,0x0000,0x0000,0x0000,
- 0x3D2F,0x0000,0xD8EA,0xD8EB,0x3C2C,0xD8EC,0x0000,0x0000,
- 0x0000,0x4C58,0x0000,0x0000,0x4947,0x0000,0xD8ED,0x6867,
- 0x0000,0x6870,0x0000,0x0000,0x0000,0x0000,0xD8EE,0x0000,
- 0xD8EF,0xD8F0,0xD8F1,0x0000,0x0000,0x685A,0x0000,0xD8F2,
- 0x0000,0xD8F3,0x3377,0x0000,0xD8F4,0x0000,0x0000,0x0000,
- 0x3E78,0x6865,0xD8F5,0x686A,0x4173,0xD8F6,0xD8F7,0x6866,
- 0xD8F8,0x686D,0xD8F9,0x0000,0x435F,0x0000,0x686E,0xD8FA,
- 0xD8FB,0x4D56,0x6863,0x3338,0xD8FC,0x6869,0x0000,0xD8FD,
- 0x686C,0x4C2C,0x0000,0xD8FE,0x0000,0x0000,0x686F,0x0000,
- 0x0000,0x6868,0x686B,0x0000,0xD9A1,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xD9A2,
- 0x0000,0x0000,0xD9A3,0x0000,0x4B29,0x0000,0x4F21,0xD9A4,
- 0xD9A5,0xD9A6,0xD9A7,0x0000,0x6873,0x0000,0x0000,0xD9A8,
- 0x0000,0x0000,0xD9AA,0xD9AB,0x687A,0xD9AC,0x0000,0x6872,
-
- /* 8500h */
- 0x3C43,0x0000,0xD9AD,0xD9AE,0x0000,0x0000,0x6851,0xD9AF,
- 0x0000,0x0000,0x0000,0x0000,0xD9B0,0x0000,0xD9B1,0x0000,
- 0xD9B2,0x4A4E,0x0000,0x4C22,0x6879,0x6878,0x0000,0x6874,
- 0x6875,0x0000,0x3136,0x0000,0xD9B3,0x0000,0xD9B4,0x6877,
- 0x0000,0x6871,0xD9B5,0xD9B6,0xD9B7,0xD9B8,0x4455,0xD9B9,
- 0x0000,0x0000,0xD9BA,0xD9BB,0x6876,0x307E,0x0000,0xD9BC,
- 0x0000,0x0000,0xD9A9,0xD9BD,0xD9BE,0x4222,0xD9BF,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x4A43,0x0000,0xD9C0,
- 0x687B,0x6921,0x0000,0x4859,0x0000,0x0000,0xD9C1,0x0000,
- 0x687E,0x3E56,0x3C49,0x6923,0x0000,0x0000,0x363E,0xD9C2,
- 0xD9C3,0xD9C4,0xD9C5,0xD9C6,0x0000,0x6924,0xD9C7,0x4979,
- 0x687D,0xD9C8,0x6856,0x0000,0xD9C9,0xD9CA,0xD9CB,0xD9CC,
- 0xD9CD,0xD9CE,0xD9CF,0x687C,0xD9D0,0x0000,0x0000,0x0000,
- 0x4F4F,0x4622,0x4973,0xD9D1,0x0000,0x692B,0x0000,0xD9D2,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x6931,
- 0x0000,0xD9D3,0xD9D4,0xD9D5,0x0000,0xD9D6,0x6932,0xD9D7,
- 0x6925,0xD9D8,0x0000,0x0000,0x4776,0xD9D9,0xD9DA,0x692F,
- 0x6927,0xD9DB,0x6929,0xD9DC,0xD9DD,0x0000,0x0000,0xD9DE,
- 0x6933,0x6928,0x0000,0xD9DF,0x692C,0x0000,0x0000,0x3172,
- 0xD9E0,0x4665,0x0000,0x692D,0x6930,0xD9E1,0x0000,0xD9E2,
- 0xD9E3,0x0000,0xD9E4,0x0000,0x6926,0xD9E5,0x4126,0xD9E6,
- 0x692A,0x3B27,0x3F45,0x3730,0x4C74,0xD9F4,0x4C79,0x3D72,
- 0x0000,0x0000,0x0000,0x0000,0xD9E7,0x0000,0xD9E8,0xD9E9,
- 0xD9EA,0x6937,0x6935,0x0000,0xD9EB,0xD9EC,0xD9ED,0xD9EE,
- 0x0000,0x4F4E,0xD9EF,0x0000,0x0000,0x0000,0x0000,0xD9F0,
- 0x0000,0x6934,0xD9F1,0xD9F2,0x0000,0x4D75,0xD9F3,0x6936,
- 0x6938,0x0000,0x0000,0x0000,0x0000,0x6939,0x0000,0x0000,
- 0xD9F5,0x0000,0xD9F6,0x0000,0x693C,0x693A,0x0000,0xD9F7,
- 0xD9F8,0x0000,0x0000,0x0000,0x4623,0x693B,0xD9F9,0x0000,
- 0xD9FA,0x484D,0x692E,0x0000,0x0000,0xD9FB,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0xD9FC,0x0000,0x0000,0xD9FD,0x3D73,
- 0x0000,0x693D,0x6942,0x4174,0xD9FE,0x0000,0x6941,0xDAA1,
-
- /* 8600h */
- 0xDAA2,0x0000,0x6922,0x0000,0xDAA3,0xDAA4,0x6943,0x4149,
- 0x0000,0x0000,0x693E,0x6940,0x0000,0xDAA5,0xDAA6,0x0000,
- 0xDAA7,0xDAA8,0xDAA9,0x693F,0x0000,0x0000,0x5D31,0x5D22,
- 0xDAAA,0xDAAB,0x6945,0xDAAC,0x0000,0x0000,0xDAAD,0x0000,
- 0x0000,0xDAAE,0x6944,0x0000,0x0000,0x0000,0x0000,0xDAAF,
- 0x0000,0xDAB0,0x0000,0x0000,0x0000,0x4D76,0x0000,0x623C,
- 0x6946,0x0000,0x0000,0x0000,0x0000,0x0000,0xDAB1,0x0000,
- 0xDAB2,0x0000,0xDAB3,0x0000,0xDAB4,0xDAB5,0x0000,0x6947,
- 0xDAB6,0xB8E6,0xDAB7,0x0000,0x0000,0x0000,0xDAB8,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x6948,0x3857,0x0000,
- 0x3554,0x0000,0xDAB9,0xDABA,0x694A,0x515D,0xDABB,0xDABC,
- 0xDABD,0xDABE,0x3575,0x0000,0x4E3A,0xDABF,0x3673,0x694B,
- 0xDAC0,0xDAC1,0xDAC2,0xDAC3,0xDAC4,0x0000,0x0000,0x694C,
- 0x0000,0xDAC5,0x0000,0x436E,0xDAC6,0x0000,0x0000,0xDAC7,
- 0x0000,0x694D,0x0000,0x0000,0x0000,0xDAC8,0xDAC9,0xDACA,
- 0x0000,0x467A,0xDACB,0x303A,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0xDAED,0x0000,0x3263,0x6952,0x6953,0xDACC,0x0000,0x0000,
- 0x0000,0xDACD,0x0000,0x694E,0x0000,0x3B3D,0xDACE,0x0000,
- 0xDACF,0x0000,0xDAD0,0x0000,0xDAD1,0x0000,0x0000,0x0000,
- 0x0000,0xDAD2,0x0000,0x694F,0x4742,0x0000,0xDAD3,0xDAD4,
- 0xDAD5,0x6950,0x6951,0x695B,0x0000,0xDAD6,0x0000,0x6955,
- 0x6958,0xDAD7,0x0000,0xDAD8,0xDAD9,0xDADA,0x6954,0xDADB,
- 0xDADC,0xDADD,0x0000,0x0000,0x0000,0x0000,0x0000,0xDADE,
- 0xDADF,0xDAE0,0x0000,0xDAE1,0x6956,0xDAE2,0x6957,0x3C58,
- 0x0000,0x6959,0x0000,0x4341,0x0000,0x3756,0x3342,0x0000,
- 0x0000,0xDAE3,0xDAE4,0x0000,0x695C,0xDAE5,0x0000,0xDAE6,
- 0x0000,0x333F,0xDAE7,0x6961,0xDAE8,0x0000,0x695D,0x6960,
- 0xDAE9,0x0000,0x0000,0xDAEA,0x483A,0xDAEB,0x0000,0xDAEC,
- 0x0000,0x695E,0x0000,0x0000,0x695F,0x4948,0x485A,0x6962,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x427D,0x696C,0xDAEE,0x6968,0xDAEF,0xDAF0,0x326B,0x0000,
-
- /* 8700h */
- 0x6966,0x0000,0x4B2A,0x6967,0xDAF1,0xDAF2,0x6964,0xDAF3,
- 0x6965,0x696A,0x696D,0xDAF4,0x0000,0x696B,0xDAF5,0xDAF6,
- 0xDAF7,0x6969,0x6963,0xDAF8,0xDAF9,0x0000,0x0000,0x0000,
- 0x4358,0xDAFA,0x6974,0x0000,0x4C2A,0x0000,0xDAFB,0xDAFC,
- 0x0000,0xDAFD,0x0000,0xDAFE,0x0000,0x6972,0x0000,0x0000,
- 0xDBA1,0x6973,0x0000,0x0000,0x0000,0x0000,0xDBA2,0xDBA3,
- 0x0000,0xDBA4,0xDBA5,0x0000,0x696E,0x0000,0x0000,0x6970,
- 0x0000,0xDBA6,0xDBA7,0x6971,0xDBA8,0xDBA9,0xDBAA,0x696F,
- 0xDBAB,0x0000,0x0000,0xDBAC,0x0000,0xDBAD,0x0000,0x0000,
- 0x0000,0x4066,0x0000,0x4F39,0x6978,0xDBAE,0x6979,0x0000,
- 0x0000,0x0000,0x0000,0x6A21,0x0000,0x3F2A,0x0000,0x697B,
- 0xDBAF,0x697E,0x0000,0x0000,0x0000,0xDBB0,0x0000,0x6976,
- 0x6975,0xDBB1,0x0000,0x6A22,0xDBB2,0xDBB3,0x325C,0x0000,
- 0x697C,0x0000,0x6A23,0x0000,0x0000,0x0000,0x697D,0xDBB4,
- 0x0000,0xDBB5,0xDBB6,0x0000,0x697A,0x0000,0x4433,0x0000,
- 0x6977,0x0000,0x0000,0xDBB7,0x0000,0x0000,0x0000,0x4768,
- 0x0000,0x0000,0x6A27,0xDBB8,0xDBB9,0xDBBA,0xDBBB,0xDBBC,
- 0xDBBD,0xDBBE,0x0000,0xDBBF,0xDBC0,0x4D3B,0x0000,0x0000,
- 0xDBC1,0x0000,0x0000,0xDBC2,0x0000,0xDBC3,0x0000,0xDBC4,
- 0xDBC5,0xDBC6,0x0000,0x0000,0x0000,0x0000,0xDBC7,0x6A26,
- 0xDBC8,0x0000,0x6A25,0xDBC9,0x0000,0x0000,0x0000,0xDBCA,
- 0x0000,0x0000,0x0000,0x6A2E,0xDBCB,0xDBCC,0xDBCD,0x6A28,
- 0x0000,0xDBCE,0x0000,0x6A30,0x0000,0xDBCF,0x0000,0x0000,
- 0x0000,0x0000,0x4D66,0x6A33,0x0000,0x6A2A,0xDBD0,0xDBD1,
- 0x6A2B,0xDBD2,0x0000,0x0000,0x6A2F,0x0000,0x6A32,0x6A31,
- 0xDBD3,0xDBD4,0xDBD5,0x6A29,0x0000,0x0000,0xDBD6,0x0000,
- 0x6A2C,0x0000,0x6A3D,0x0000,0x0000,0xDBD7,0xDBD8,0x0000,
- 0x0000,0xDBD9,0xDBDA,0x0000,0xDBDB,0x0000,0x0000,0xDBDC,
- 0x6A36,0x0000,0xDBDD,0xDBDE,0xDBDF,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0xDBE0,0xDBE1,0x0000,0xDBE2,0x0000,0x6A34,
- 0x0000,0xDBE3,0x6A35,0xDBE4,0x0000,0x0000,0x6A3A,0x6A3B,
- 0xDBE5,0x332A,0xDBE6,0x3542,0x0000,0x0000,0x6A39,0xDBE7,
-
- /* 8800h */
- 0x0000,0xDBE8,0x0000,0xDBE9,0x0000,0x6A24,0xDBEA,0x0000,
- 0x0000,0xDBEB,0xDBEC,0xDBED,0x0000,0x6A38,0x6A3C,0x6A37,
- 0xDBEE,0x6A3E,0xDBF0,0xDBF1,0xDBF2,0x6A40,0x6A3F,0x0000,
- 0xDBF3,0xDBEF,0xDBF4,0xDBF5,0xDBF6,0x0000,0xDBF7,0xDBF8,
- 0x0000,0x6A42,0x6A41,0x695A,0x0000,0x0000,0x0000,0x6A46,
- 0xDBF9,0x0000,0x0000,0x0000,0x0000,0xDBFA,0xDBFB,0x0000,
- 0xDBFC,0x6A43,0xDBFD,0x0000,0x0000,0xDBFE,0x6A44,0x0000,
- 0x0000,0x6A45,0xDCA1,0x6A47,0xDCA2,0x0000,0x0000,0x0000,
- 0x376C,0xDCA3,0x6A49,0xDCA4,0x6A48,0xDCA5,0x3D30,0x0000,
- 0xDCA6,0xDCA7,0xDCA8,0xDCA9,0x3954,0x5E27,0xDCAA,0x0000,
- 0x0000,0xDCAB,0x6A4A,0x3D51,0x0000,0xDCAC,0xDCAD,0x3339,
- 0xDCAE,0x6A4B,0xDCAF,0x3152,0xDCB0,0x3E57,0x6A4C,0xDCB1,
- 0xDCB2,0x3955,0x6A4D,0x3061,0xDCB3,0x0000,0x0000,0x0000,
- 0x493D,0xDCB4,0x0000,0x6A4E,0x0000,0x0000,0x0000,0x0000,
- 0x3F6A,0xDCB5,0x6A55,0x0000,0x0000,0x6A52,0x0000,0x436F,
- 0x0000,0xDCB6,0x0000,0xDCB7,0x0000,0x6A53,0x6A50,0x365E,
- 0xDCB8,0x6A4F,0x6A56,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x3736,0x0000,0x0000,0x425E,0x0000,0x6A5C,0x0000,0x0000,
- 0x0000,0x0000,0x6A58,0x0000,0x0000,0x0000,0x4235,0x6A57,
- 0xDCB9,0x6A5A,0xDCBA,0xDCBB,0xDCBC,0x0000,0x6A51,0xDCBD,
- 0xDCBE,0x0000,0x6A5B,0x0000,0x6A5D,0x0000,0x0000,0x0000,
- 0xDCBF,0x0000,0xDCC0,0x486F,0x0000,0x0000,0x6A59,0x0000,
- 0x6A5E,0x6A60,0x0000,0x0000,0x3853,0x6A54,0x0000,0x3041,
- 0x0000,0x0000,0xDCC1,0x0000,0x0000,0xDCC2,0xDCC3,0x6A5F,
- 0xDCC4,0x3A5B,0x4E76,0x6A61,0x6A62,0x4175,0x0000,0x0000,
- 0x0000,0x0000,0xDCC5,0xDCC6,0xDCC7,0xDCC8,0xDCC9,0x4E22,
- 0x0000,0xDCCA,0xDCCB,0xDCCC,0x6A63,0x4D35,0x0000,0x0000,
- 0x6A64,0x6A65,0x0000,0xDCCD,0x4A64,0x6A66,0xDCCE,0x3A40,
- 0x0000,0x4E23,0x0000,0x0000,0x0000,0x0000,0x0000,0xDCCF,
- 0x6A6B,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xDCD0,
- 0xDCD1,0xDCD2,0x6A6C,0x3E58,0x6A6A,0xDCD3,0x0000,0xDCD4,
- 0x4D67,0x6A67,0x0000,0x0000,0x6A69,0x403D,0x3F7E,0x0000,
-
- /* 8900h */
- 0x0000,0xDCD5,0x6A68,0x0000,0x6A6D,0x0000,0xDCD6,0x4A23,
- 0x0000,0x0000,0x6A6F,0x0000,0x6A6E,0xDCD7,0xDCD8,0xDCD9,
- 0x336C,0x0000,0x4B2B,0x6A70,0x0000,0xDCDA,0xDCDB,0x0000,
- 0xDCDC,0xDCDD,0xDCDE,0x0000,0xDCDF,0x6A7C,0x6A72,0x0000,
- 0xDCE0,0x0000,0x0000,0x0000,0x0000,0x6A73,0xDCE1,0xDCE2,
- 0xDCE3,0x0000,0x6A74,0x6A75,0x0000,0x0000,0x0000,0x0000,
- 0xDCE4,0xDCE5,0xDCE6,0x0000,0x0000,0xDCE7,0x6A79,0x0000,
- 0x6A7A,0xDCE8,0xDCE9,0x6A78,0x0000,0x0000,0xDCEA,0x0000,
- 0xDCEB,0x6A76,0xDCEC,0x6A71,0x6A77,0xDCED,0xDCEE,0x0000,
- 0x0000,0xDCEF,0x0000,0x0000,0x6A7B,0x7037,0x0000,0xDCF0,
- 0x0000,0x0000,0xDCF1,0x0000,0x0000,0x0000,0x3228,0xDCF2,
- 0x0000,0x0000,0xDCF3,0xDCF4,0xDCF5,0x0000,0x6A7E,0x365F,
- 0x6A7D,0xDCF6,0xDCF7,0xDCF8,0x6B22,0x0000,0x6B21,0x0000,
- 0x0000,0x0000,0x6B24,0xDCF9,0x0000,0x6B23,0xDCFA,0x6B25,
- 0xDCFB,0x0000,0x3D31,0xDCFC,0x6B26,0xDCFD,0x0000,0x6B27,
- 0x0000,0x0000,0xDCFE,0xDDA1,0xDDA2,0xDDA3,0x6B28,0x403E,
- 0x0000,0x4D57,0x0000,0x6B29,0x0000,0x0000,0x4A24,0x4746,
- 0x6B2A,0xDDA4,0x6B2B,0x382B,0x0000,0xDDA5,0x0000,0x352C,
- 0xDDA6,0x0000,0x0000,0x6B2C,0xDDA7,0xDDA8,0x3B6B,0x4741,
- 0x6B2D,0x0000,0x3350,0xDDA9,0xDDAA,0x0000,0x0000,0xDDAB,
- 0xDDAC,0x6B2E,0x0000,0x0000,0x0000,0xDDAD,0x6B30,0x4D77,
- 0x0000,0x6B2F,0x3F46,0x0000,0x6B31,0x0000,0x0000,0x6B32,
- 0xDDAE,0x0000,0x6B33,0x3451,0xDDAF,0xDDB0,0xDDB1,0xDDB2,
- 0x0000,0x0000,0x6B34,0x0000,0xDDB3,0x6B35,0x0000,0x6B36,
- 0x6B37,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x3351,0x0000,0xDDB4,0xDDB5,0xDDB6,0xDDB7,
- 0xDDB8,0x0000,0x6B38,0x0000,0x6B39,0x6B3A,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x3272,0x0000,0xDDB9,0x3F28,0x6B3B,
- 0x0000,0xDDBA,0x0000,0xDDBB,0x0000,0xDDBC,0x0000,0x0000,
- 0x0000,0xDDBD,0x0000,0xDDBE,0x6B3C,0x0000,0xDDBF,0x0000,
- 0x6B3D,0xDDC0,0x0000,0x0000,0x0000,0xDDC1,0x0000,0xDDC2,
-
- /* 8A00h */
- 0x3840,0x0000,0x447B,0x6B3E,0xDDC3,0xDDC4,0x0000,0xDDC5,
- 0x3757,0x0000,0x3F56,0x0000,0x6B41,0x0000,0x4624,0xDDC6,
- 0x6B40,0xDDC7,0xDDC8,0x3731,0xDDC9,0xDDCA,0x6B3F,0x4277,
- 0x352D,0x0000,0x0000,0x6B42,0x0000,0x6B43,0xDDCB,0x3E59,
- 0xDDCC,0x0000,0xDDCD,0x376D,0xDDCE,0x6B44,0xDDCF,0x0000,
- 0x0000,0x0000,0x4B2C,0xDDD0,0xDDD1,0x405F,0x0000,0xDDD2,
- 0x0000,0x3576,0x0000,0x4C75,0x414A,0xDDD3,0x6B45,0xDDD4,
- 0x0000,0x0000,0x3F47,0x4370,0x3E5A,0xDDD5,0xDDD6,0x0000,
- 0xDDD7,0x6B46,0x0000,0xDDD8,0x0000,0xDDD9,0x6B49,0xDDDA,
- 0x6B4A,0xDDDB,0x0000,0x0000,0x0000,0xDDDC,0xDDDD,0x0000,
- 0x3A3E,0x4242,0x6B48,0xDDDE,0x3E5B,0x493E,0xDDDF,0xDDE0,
- 0xDDE1,0x0000,0x0000,0x6B47,0xDDE2,0xDDE3,0x3B6C,0x0000,
- 0x3153,0xDDE4,0x6B4E,0x3758,0x0000,0xDDE5,0x3B6E,0xDDE6,
- 0x0000,0x3B6D,0x0000,0x4F4D,0x6B4D,0x6B4C,0x4127,0x0000,
- 0x354D,0x4F43,0x333A,0x3E5C,0x0000,0xDDE7,0xDDE8,0xDDE9,
- 0x0000,0xDDEA,0xDDEB,0xDDEC,0x6B4B,0x0000,0xDDED,0xDDEE,
- 0xDDEF,0x0000,0x6B50,0xDDF0,0x6B51,0x6B4F,0xDDF1,0x3858,
- 0x0000,0x4D40,0x0000,0xDDF2,0x3B6F,0x4727,0x0000,0xDDF3,
- 0xDDF4,0x6B54,0xDDF5,0x4040,0x0000,0x4342,0xDDF6,0xDDF7,
- 0x4D36,0xDDF8,0x6B57,0x0000,0x0000,0x0000,0x386C,0xDDF9,
- 0x403F,0x6B53,0x0000,0x6B58,0x386D,0x6B55,0x6B56,0xDDFA,
- 0x6B52,0xDDFB,0x0000,0x0000,0x4062,0x4649,0xDDFC,0xDDFD,
- 0x432F,0x0000,0x325D,0xDDFE,0x0000,0x0000,0xDEA1,0xDEA2,
- 0x0000,0x4870,0x0000,0xDEA3,0x3543,0x0000,0xDEA4,0x4434,
- 0x0000,0x0000,0x6B5B,0xDEA5,0x6B59,0x0000,0xDEA6,0x434C,
- 0xDEA7,0xDEA8,0xDEA9,0x4041,0x3452,0x6B5A,0x0000,0x3F5B,
- 0x0000,0xDEAA,0x4E4A,0xDEAB,0xDEAC,0xDEAD,0x4F40,0xDEAE,
- 0x0000,0x0000,0x6B5C,0x6B67,0x4435,0xDEAF,0x6B66,0xDEB0,
- 0x6B63,0x6B6B,0x6B64,0x0000,0x6B60,0x0000,0x447C,0x6B5F,
- 0x0000,0x0000,0x0000,0x6B5D,0xDEB1,0x4D21,0x3B70,0x0000,
- 0xDEB2,0x6B61,0x0000,0x6B5E,0xDEB3,0xDEB4,0xDEB5,0x6B65,
- 0x3D74,0x0000,0x3841,0x0000,0xDEB6,0x0000,0x427A,0xDEB7,
-
- /* 8B00h */
- 0x4B45,0x315A,0x3062,0x0000,0x4625,0xDEB8,0xDEB9,0x6B69,
- 0x0000,0x0000,0xDEBF,0xDEBA,0x6B68,0x0000,0x4666,0x0000,
- 0x6B6D,0xDEBB,0x0000,0x0000,0x6B62,0x0000,0x6B6C,0x6B6E,
- 0x0000,0x382C,0x6B6A,0x3956,0xDEBC,0x3C55,0xDEBD,0xDEBE,
- 0x6B6F,0x4D58,0x0000,0x0000,0x0000,0x0000,0x6B72,0x0000,
- 0x6B75,0x0000,0x0000,0x6B73,0x4935,0xDEC0,0x0000,0x0000,
- 0xDEC1,0x0000,0x0000,0x6B70,0x0000,0x0000,0x0000,0xDEC2,
- 0x0000,0x3660,0x0000,0x0000,0xDEC3,0x0000,0x6B74,0x0000,
- 0x0000,0x6B76,0xDEC4,0xDEC5,0xDEC6,0xDEC7,0xDEC8,0x0000,
- 0xDEC9,0x6B7A,0x0000,0x0000,0x6B77,0xDECE,0x6B79,0x6B78,
- 0x0000,0x0000,0xDECA,0xDECB,0xDECC,0x0000,0x6B7B,0x0000,
- 0x3C31,0xDECD,0x6B7D,0x6B7C,0x4968,0x0000,0xDECF,0x6C21,
- 0x0000,0x0000,0x0000,0xDED0,0x0000,0x0000,0x3759,0x0000,
- 0x0000,0x0000,0x0000,0x6B7E,0x6C22,0xDED1,0x0000,0x6C23,
- 0x3544,0x6641,0x3E79,0x0000,0x6C24,0x0000,0xDED2,0x386E,
- 0xDED3,0xDED4,0x0000,0x0000,0xDED5,0x6C25,0xDED6,0x0000,
- 0x6C26,0xDED7,0x0000,0x3B3E,0xDED8,0xDED9,0x0000,0x0000,
- 0x0000,0x0000,0x5A4E,0xDEDA,0x6C27,0xDEDB,0x6C28,0xDEDC,
- 0x3D32,0x0000,0x6C29,0x6C2A,0xDEDD,0xDEDE,0x6C2B,0x0000,
- 0x0000,0x6C2C,0x6C2D,0x0000,0xDEDF,0x0000,0xDEE0,0xDEE1,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-
- /* 8C00h */
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x432B,
- 0xDEE2,0xDEE3,0x6C2E,0x0000,0x0000,0xDEE4,0xDEE5,0x6C30,
- 0x0000,0x6C2F,0x0000,0x0000,0x0000,0xDEE6,0x4626,0xDEE7,
- 0x6C31,0xDEE8,0x4B2D,0xDEE9,0x6C32,0x0000,0x6C33,0xDEEA,
- 0x6C34,0xDEEB,0x0000,0xDEEC,0xDEED,0x6C35,0x0000,0xDEEE,
- 0xDEEF,0xDEF2,0x465A,0xDEF0,0x0000,0xDEF1,0x0000,0x0000,
- 0x0000,0x3E5D,0x6C36,0xDEF3,0xDEF4,0x0000,0xDEF5,0x0000,
- 0xDEF6,0xDEF7,0x396B,0x502E,0x6C37,0xDEF8,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0xDEF9,0x0000,0xDEFA,0xDEFB,0x0000,
- 0x6C38,0x493F,0x6C39,0xDEFC,0x6C41,0x0000,0xDEFD,0x0000,
- 0x0000,0x0000,0x6C3A,0x0000,0x0000,0x6C3C,0xDEFE,0xDFA1,
- 0x0000,0x6C3B,0x6C3D,0xDFA2,0x4B46,0x6C3E,0x6C3F,0x0000,
- 0xDFA3,0x0000,0xDFA4,0xDFA5,0x6C40,0x0000,0x0000,0x0000,
- 0x6C42,0xDFA6,0x0000,0xDFA7,0xDFA8,0x332D,0x4467,0x0000,
- 0x4969,0x3A62,0x3957,0x0000,0xDFA9,0x0000,0x0000,0x494F,
- 0x325F,0x484E,0x6C45,0x3453,0x4055,0x6C44,0x6C49,0x4379,
- 0x4C63,0x0000,0x6C47,0x6C48,0x352E,0x0000,0x6C4A,0x4763,
- 0x425F,0xDFAA,0xDFAB,0x4871,0x453D,0x6C46,0x0000,0x4B47,
- 0x326C,0x6C4C,0x4F28,0x4442,0x4F45,0xDFAC,0xDFAD,0x3B71,
- 0x6C4B,0xDFAE,0x4231,0xDFAF,0x0000,0x6C5C,0x4128,0xDFB0,
- 0x0000,0x4678,0x0000,0x4950,0x0000,0xDFB2,0xDFB1,0x0000,
- 0x0000,0xDFB3,0x6C4F,0x3B3F,0x3B72,0xDFB4,0x3E5E,0x0000,
- 0x4765,0xDFB5,0x382D,0x6C4E,0x6C4D,0x0000,0x496A,0x0000,
- 0xDFB6,0x0000,0x3C41,0x0000,0xDFB7,0x4552,0x0000,0xDFB8,
- 0xDFB9,0x0000,0xDFBA,0x0000,0x0000,0xDFBB,0x0000,0xDFBC,
- 0xDFBD,0x0000,0x6C51,0x6C52,0x3958,0x6C50,0xDFBE,0xDFBF,
-
- /* 8D00h */
- 0x0000,0xDFC0,0x0000,0xDFC1,0x6C53,0x6C54,0x0000,0x6C56,
- 0x4223,0xDFC2,0x6C55,0x3466,0x0000,0x6C58,0x0000,0x6C57,
- 0x6C59,0x0000,0xDFC3,0x6C5B,0x6C5D,0x0000,0x6C5E,0xDFC4,
- 0x0000,0x0000,0x0000,0xDFC5,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x4056,0xDFC6,0x3C4F,0x6C5F,
- 0x0000,0xDFC7,0x0000,0x3352,0xDFC8,0x6C60,0xDFC9,0x0000,
- 0x4176,0x6C61,0x0000,0x6C62,0x496B,0x0000,0x0000,0x352F,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xDFCA,
- 0x0000,0x6C63,0xDFCB,0x0000,0xDFCC,0x4436,0x0000,0x0000,
- 0xDFCD,0x0000,0x315B,0x0000,0x0000,0xDFCE,0x0000,0x0000,
- 0xDFCF,0xDFD0,0x0000,0x0000,0x0000,0xDFD1,0x0000,0x0000,
- 0x0000,0x6C64,0x0000,0x0000,0x0000,0x0000,0xDFD2,0xDFD3,
- 0xDFD4,0x0000,0x0000,0x3C71,0x0000,0x0000,0xDFD5,0x0000,
- 0x3F76,0x0000,0x0000,0xDFD6,0xDFD7,0x0000,0x0000,0xDFD8,
- 0x0000,0x0000,0xDFD9,0x422D,0x0000,0xDFDA,0x0000,0xDFDB,
- 0x0000,0xDFDC,0x6C67,0xDFDD,0xDFEF,0x0000,0x6C66,0x0000,
- 0xDFDE,0x0000,0x6C65,0x0000,0x0000,0xDFDF,0xDFE0,0xDFE1,
- 0xDFE2,0x0000,0xDFE3,0x6C6D,0x6C6B,0x0000,0xDFE4,0x6C68,
- 0x0000,0xDFE5,0x0000,0x0000,0xDFE6,0xDFE7,0x6C6A,0xDFE8,
- 0x0000,0xDFE9,0x6C69,0x6C6C,0x0000,0x3577,0x0000,0x6C70,
- 0x0000,0x4057,0x0000,0x6C71,0xDFEA,0xDFEB,0x0000,0xDFEC,
- 0x3859,0x0000,0x6C6E,0x6C6F,0xDFED,0x0000,0x0000,0x4F29,
- 0xDFEE,0xDFF0,0xDFF1,0x4437,0xDFF2,0x4129,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x6C72,0xDFF3,0x0000,0x6C75,
-
- /* 8E00h */
- 0x0000,0xDFF4,0x0000,0x0000,0xDFF5,0xDFF6,0xDFF7,0x0000,
- 0x6C73,0x6C74,0x4D59,0xDFF8,0x0000,0x0000,0x0000,0x4627,
- 0x6C78,0xDFF9,0x0000,0x0000,0xDFFA,0x0000,0xDFFB,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x6C76,0x6C77,0x6C79,
- 0xDFFC,0xDFFD,0xDFFE,0xE0A1,0x0000,0x0000,0xE0A2,0xE0A3,
- 0x0000,0x0000,0x6D29,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x6C7C,0xE0A4,0x0000,0xE0A5,0x6C7D,0x6C7B,0xE0A6,0xE0A7,
- 0xE0A8,0xE0A9,0x0000,0x0000,0x0000,0xE0AA,0x0000,0x0000,
- 0xE0AB,0xE0AC,0x6C7A,0x0000,0x447D,0x0000,0x0000,0x6D21,
- 0x6D25,0x6D22,0x6C7E,0xE0AD,0x6D23,0xE0AE,0xE0AF,0xE0B0,
- 0x6D24,0x0000,0x0000,0x0000,0xE0B1,0x6D2B,0x0000,0x0000,
- 0x0000,0x6D26,0x0000,0xE0B2,0xE0B3,0xE0B4,0xE0B5,0x4058,
- 0x6D28,0xE0B6,0xE0B7,0x6D2A,0x6D27,0x0000,0x0000,0x0000,
- 0x0000,0xE0B8,0x0000,0x0000,0xE0B9,0xE0BA,0x0000,0xE0BB,
- 0xE0BC,0xE0BD,0x6D2D,0x0000,0x3D33,0x0000,0x6D2C,0x0000,
- 0x0000,0xE0BE,0xE0BF,0xE0C0,0x6D2E,0x0000,0x0000,0x0000,
- 0x0000,0x6D2F,0xE0C1,0xE0C2,0x6D32,0x6D31,0x0000,0x6D30,
- 0x0000,0xE0C3,0x6D34,0x6D33,0x0000,0x4C76,0x0000,0x0000,
- 0xE0C4,0x6D36,0xE0C5,0x6D35,0x6D37,0xE0C6,0x0000,0x0000,
- 0x0000,0x6D38,0xE0C7,0xE0C8,0x0000,0xE0C9,0xE0CA,0x0000,
- 0x0000,0x6D3A,0xE0CB,0x0000,0x0000,0x0000,0x0000,0xE0CC,
- 0x0000,0xE0CD,0x6D39,0x3F48,0x6D3B,0xE0CE,0xE0CF,0x366D,
- 0x6D3C,0x6D3E,0x0000,0xE0D0,0x0000,0xE0D1,0x0000,0x0000,
- 0x0000,0x0000,0xE0D2,0xE0D3,0x0000,0x0000,0x6D3F,0x0000,
- 0xE0D4,0xE0D5,0x0000,0xE0D6,0xE0D7,0x6D40,0x6D3D,0xE0D8,
- 0x6D41,0x0000,0x3C56,0x6D42,0x3530,0x3733,0x0000,0xE0D9,
- 0x0000,0xE0DA,0x382E,0x0000,0xE0DB,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x6D43,0xE0DC,0x0000,0x0000,0x4670,
- 0x0000,0x0000,0x453E,0x6D44,0x0000,0x0000,0x0000,0x0000,
- 0xE0DD,0x0000,0x0000,0x6D47,0x0000,0xE0E4,0xE0DE,0x0000,
- 0xE0DF,0xE0E0,0x0000,0x0000,0x0000,0x0000,0x0000,0xE0E1,
- 0x3C34,0xE0E2,0xE0E3,0x6D46,0x6D45,0x375A,0x6D48,0x0000,
-
- /* 8F00h */
- 0xE0E5,0x0000,0xE0E6,0x3353,0x0000,0x6D4A,0x0000,0xE0E7,
- 0xE0E8,0x3A5C,0x6D49,0x0000,0x6D52,0x0000,0x0000,0xE0E9,
- 0xE0EA,0x0000,0x6D4C,0x6D4E,0x4A65,0x6D4B,0xE0EB,0xE0EC,
- 0xE0ED,0x6D4D,0x0000,0x6D51,0x6D4F,0x3531,0xE0EE,0x6D50,
- 0xE0EF,0xE0F0,0x0000,0xE0F1,0x0000,0xE0F2,0x6D53,0xE0F3,
- 0xE0F4,0x475A,0x4E58,0x0000,0xE0F5,0xE0F6,0xE0F7,0x3D34,
- 0x0000,0x0000,0x0000,0x6D54,0xE0F8,0xE0F9,0xE0FA,0xE0FB,
- 0x4D22,0x6D56,0xE0FC,0x6D55,0x0000,0x0000,0x6D59,0x4D41,
- 0xE0FD,0xE0FE,0x6D58,0xE1A1,0x336D,0x6D57,0x6D5C,0xE1A2,
- 0x0000,0x6D5B,0x0000,0x0000,0x6D5A,0x4532,0x6D5D,0xE1A3,
- 0x0000,0xE1A4,0xE1A5,0xE1A6,0xE1A7,0xE1A8,0x0000,0x6D5E,
- 0xE1A9,0x0000,0x0000,0x0000,0x6D5F,0xE1AA,0xE1AB,0x396C,
- 0x0000,0x3725,0x6D60,0x6D61,0x6D62,0xE1AC,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x3F49,0x6D63,0xE1AD,0x3C2D,0x6D64,
- 0xE1AE,0xE1AF,0x0000,0x6D65,0xE1B0,0xE1B1,0xE1B2,0x5221,
- 0x517E,0x0000,0x0000,0x0000,0x0000,0x6D66,0x6570,0x6D67,
- 0x4324,0x3F2B,0x4740,0x0000,0x0000,0xE1B3,0xE1B4,0x6D68,
- 0xE1B5,0x0000,0x4A55,0x4454,0x397E,0x0000,0xE1B6,0x4329,
- 0xE1B7,0xE1B8,0x312A,0x0000,0x4B78,0x3F57,0xE1B9,0x0000,
- 0x0000,0x0000,0xE1BA,0xE1BB,0x0000,0xE1BC,0x375E,0x0000,
- 0xE1BD,0x3661,0xE1BE,0xE1BF,0x4A56,0xE1C0,0x0000,0x0000,
- 0x0000,0x0000,0x6D69,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0xE1C1,0x0000,0x6D6B,0xE1C2,0xE1C3,0x6D6A,0x3260,0x0000,
- 0xE1C4,0x4676,0x6D6C,0x4777,0x0000,0x4533,0xE1C5,0x6D6D,
- 0x3D52,0xE1C6,0x0000,0x0000,0x6D6F,0xE1C7,0xE1C8,0x4C42,
- 0x6D7E,0x6D71,0x6D72,0xE1C9,0x0000,0x4449,0xE1CA,0x0000,
-
- /* 9000h */
- 0x4260,0x4177,0xE1CB,0x4628,0xE1CC,0x6D70,0x3555,0x0000,
- 0xE1CD,0x0000,0x0000,0x6D79,0xE1CE,0x6D76,0x6E25,0x4629,
- 0x4360,0x6D73,0x0000,0x447E,0x4553,0x6D74,0x6D78,0x3F60,
- 0xE1CF,0x4767,0x444C,0xE1D0,0x0000,0x4042,0x6D77,0x422E,
- 0x4224,0x6D75,0x3029,0x4F22,0x0000,0x0000,0x0000,0x6D7A,
- 0xE1D1,0xE1D2,0xE1D4,0x0000,0xE1D5,0xE1D6,0x4261,0xE1D3,
- 0x0000,0x3D35,0x3F4A,0xE1D7,0xE1D8,0x6D7C,0x6D7B,0xE1D9,
- 0x306F,0x6D7D,0x0000,0x0000,0x492F,0x0000,0x6E27,0xE1DA,
- 0x0000,0x465B,0x3F6B,0xE1DB,0xE1DC,0x4359,0x0000,0x3678,
- 0x0000,0x6E26,0x4D37,0x313F,0xE1DD,0x4A57,0x3261,0x6E21,
- 0x6E22,0x6E23,0x6E24,0x463B,0x4323,0x3063,0x6E28,0x0000,
- 0x6E29,0x7423,0x0000,0xE1DE,0x423D,0xE1DF,0x6E2A,0x0000,
- 0x3173,0x414C,0xE1E0,0x382F,0x0000,0x4D5A,0xE1E1,0xE1E2,
- 0x6E2B,0x452C,0x0000,0x0000,0xE1E3,0x4178,0x3C57,0x6E2C,
- 0xE1E4,0x0000,0x6E2F,0x0000,0xE1E5,0x3D65,0x6E2D,0x412B,
- 0x412A,0xE1E6,0x3064,0x0000,0x4E4B,0x6E31,0x0000,0x4872,
- 0x6E33,0x6E32,0x6E30,0x6364,0x3454,0xE1E7,0x0000,0x6D6E,
- 0xE1E8,0x6E35,0x6E34,0xE1E9,0xE1EA,0x0000,0xE1EB,0x6E36,
- 0xE1EC,0x4D38,0x0000,0x0000,0x0000,0xE1ED,0x0000,0xE1EE,
- 0xE1EF,0xE1F0,0x0000,0xE1F1,0x0000,0x0000,0x0000,0x0000,
- 0xE1F2,0xE1F3,0xE1F4,0x4661,0x0000,0xE1F5,0x4B2E,0x0000,
- 0x6E37,0x0000,0x3C59,0x0000,0x0000,0x0000,0x0000,0x6E38,
- 0xE1F6,0x6E39,0xE1F7,0xE1F8,0xE1F9,0x6E3A,0xE1FA,0x0000,
- 0x4521,0x0000,0x0000,0x0000,0x0000,0xE1FB,0xE1FD,0x0000,
- 0x0000,0x306A,0x0000,0xE1FE,0xE2A1,0xE2A2,0x0000,0xE2A3,
- 0xE2A4,0x0000,0x3959,0x0000,0xE1FC,0x0000,0x4F3A,0x0000,
- 0x0000,0x0000,0xE2AD,0x0000,0x0000,0xE2A5,0x0000,0xE2A6,
- 0xE2A7,0xE2A8,0x0000,0x6E3E,0xE2A9,0xE2AA,0x0000,0xE2AB,
- 0x0000,0x3734,0x6E3B,0x0000,0x6E3C,0xE2AC,0x0000,0x0000,
- 0x4974,0x0000,0x0000,0xE2AF,0x0000,0x3354,0x0000,0xE2B0,
- 0xE2B1,0x0000,0x0000,0x0000,0xE2B2,0x4D39,0xE2AE,0x363F,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x4554,0xE2B3,0xE2B4,
-
- /* 9100h */
- 0xE2B5,0x0000,0x6E3F,0x0000,0xE2B6,0xE2B7,0xE2B8,0x0000,
- 0xE2B9,0x0000,0x0000,0x0000,0x0000,0xE2BA,0x0000,0x0000,
- 0xE2BB,0x0000,0x6E40,0x0000,0xE2BC,0x0000,0xE2BD,0xE2BE,
- 0xE2BF,0x6E41,0xE2C0,0x0000,0xE2C1,0x0000,0xE2C2,0x0000,
- 0xE2C3,0x0000,0xE2C5,0xE2C6,0x0000,0xE2C4,0x0000,0xE2C7,
- 0x0000,0xE2C8,0x0000,0x0000,0x0000,0x4522,0xE2C9,0xE2CA,
- 0x6E43,0xE2CB,0x6E42,0x0000,0xE2CC,0x0000,0xE2CD,0xE2CE,
- 0x0000,0xE2CF,0xE2D0,0x0000,0xE2D1,0xE2D2,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0xE2D3,0x0000,0x0000,0x0000,0xE2D4,
- 0xE2D5,0x4653,0x6E44,0x3D36,0x3C60,0x475B,0x4371,0xE2D6,
- 0x0000,0x0000,0x3C72,0xE2D7,0x3F6C,0x0000,0x6E45,0xE2D8,
- 0x6E46,0xE2D9,0xE2DA,0xE2DB,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0xE2DC,0x3F5D,0x6E47,0xE2DD,0x6E48,0x0000,0xE2DE,
- 0x0000,0x6E49,0x4D6F,0x0000,0x3D37,0xE2DF,0x0000,0x0000,
- 0x0000,0x0000,0x6E4B,0x6E4A,0xE2E0,0x395A,0x0000,0x3973,
- 0x3B40,0xE2E1,0xE2E2,0xE2E3,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0xE2E4,0x6E4E,0xE2E5,0x0000,0xE2E6,0xE2E7,0x3D66,
- 0x0000,0x6E4D,0xE2E8,0x6E4C,0x0000,0x4269,0xE2E9,0x0000,
- 0x386F,0xE2EA,0x4043,0xE2EB,0xE2EC,0xE2ED,0x0000,0x4830,
- 0xE2EE,0x0000,0x0000,0x0000,0x3D39,0x0000,0xE2EF,0x0000,
- 0x0000,0xE2F0,0x6E4F,0x0000,0x3E5F,0x0000,0xE2F1,0x0000,
- 0xE2F2,0x0000,0x6E52,0x6E50,0xE2F3,0xE2F4,0xE2F5,0x6E51,
- 0xE2F6,0xE2F7,0xE2F8,0xE2F9,0x6E54,0x6E53,0xE2FA,0x0000,
- 0x3E7A,0x0000,0x6E55,0xE2FB,0xE2FC,0xE2FD,0x0000,0xE2FE,
- 0x6E56,0x6E57,0xE3A1,0xE3A2,0x0000,0xE3A3,0x4850,0x3A53,
- 0x3C61,0x6E58,0x0000,0x6E59,0x4E24,0x3D45,0x4C6E,0x4E4C,
- 0x6E5A,0x3662,0x0000,0xE3A4,0xE3A5,0x0000,0x6E5B,0xE3A6,
- 0x4523,0xE3A7,0xE3A8,0x6E5E,0x3378,0x3F4B,0xE3A9,0x6E5C,
- 0x0000,0x6E5D,0x0000,0x4460,0xE3AA,0xE3AB,0x4B55,0x367C,
- 0x0000,0xE3AC,0xE3AD,0x0000,0xE3AE,0xE3AF,0xE3B0,0xE3B1,
- 0xE3B2,0xE3B3,0x0000,0x0000,0x0000,0x6E60,0x6E61,0xE3B4,
- 0x0000,0xE3B5,0x0000,0xE3B6,0x6E5F,0xE3B7,0x0000,0x6E63,
-
- /* 9200h */
- 0xE3B8,0xE3B9,0x0000,0x0000,0xE3BA,0xE3BB,0xE3BC,0xE3BD,
- 0x0000,0xE3BE,0xE3BF,0x0000,0xE3C0,0x465F,0x3343,0x0000,
- 0xE3C1,0x6E67,0xE3C2,0xE3C3,0x6E64,0x6E66,0xE3C4,0x0000,
- 0xE3C5,0x0000,0x0000,0x0000,0xE3C6,0xE3C7,0x6E62,0x0000,
- 0x0000,0x0000,0x0000,0xE3C8,0xE3C9,0xE3CA,0xE3CB,0x0000,
- 0xE3CC,0x6F4F,0x0000,0x0000,0x6E65,0x0000,0xE3CD,0xE3CE,
- 0xE3CF,0x0000,0x0000,0xE3D0,0x4E6B,0xE3D1,0xE3D2,0x385A,
- 0xE3D3,0xE3D4,0xE3D5,0x0000,0xE3D6,0x0000,0xE3D7,0x6E6F,
- 0xE3D8,0x0000,0xE3D9,0xE3DA,0x4534,0x6E6A,0xE3DB,0xE3DC,
- 0x6E6D,0x6E6B,0xE3DD,0x6E70,0x0000,0xE3DE,0xE3DF,0xE3E0,
- 0x6E71,0xE3E1,0x0000,0x0000,0x0000,0x0000,0x0000,0x6E69,
- 0xE3E2,0xE3E3,0x6E76,0x3174,0xE3E4,0xE3E5,0x6E68,0x0000,
- 0xE3E6,0xE3E7,0x482D,0x0000,0x6E6C,0xE3E8,0x3E60,0xE3E9,
- 0xE3EA,0xE3EB,0x0000,0x0000,0x0000,0x0000,0xE3EC,0xE3ED,
- 0xE3EE,0x395B,0x0000,0x0000,0x0000,0xE3EF,0xE3F0,0xE3F1,
- 0xE3F2,0xE3F3,0x0000,0xE3F4,0xE3F5,0xE3F6,0x4B48,0xE3F7,
- 0x3664,0x0000,0x0000,0x3D46,0x0000,0x463C,0x0000,0x0000,
- 0xE3F8,0xE3F9,0xE3FA,0x0000,0x0000,0xE3FB,0xE3FC,0x0000,
- 0x0000,0x412D,0xE3FD,0x6E74,0x0000,0x6E6E,0x6E73,0xE3FE,
- 0x4C43,0xE4A1,0x4438,0x6E75,0x6E72,0x0000,0x0000,0xE4A2,
- 0xE4A3,0x0000,0x0000,0x0000,0xE4A4,0xE4A5,0x0000,0xE4A6,
- 0xE4A7,0x0000,0x0000,0xE4A8,0x0000,0x412C,0x0000,0xE4A9,
- 0x0000,0x0000,0xE4AA,0x0000,0x0000,0x0000,0xE4AB,0x6E79,
- 0xE4AC,0x6E78,0xE4AD,0xE4AE,0xE4AF,0xE4B0,0x0000,0xE4B1,
- 0xE4B2,0xE4B3,0xE4B4,0xE4B5,0x0000,0xE4B6,0xE4B7,0xE4B8,
- 0xE4B9,0x0000,0x0000,0xE4BA,0xE4BB,0xE4BC,0xE4BD,0x6E77,
- 0xE4BE,0x0000,0x4B2F,0xE4BF,0x0000,0xE4C0,0x0000,0xE4C1,
- 0xE4C2,0xE4C3,0x0000,0x0000,0xE4C4,0xE4C5,0x0000,0xE4C6,
- 0xE4C7,0xE4C8,0x0000,0xE4C9,0x3D7B,0xE4CA,0x0000,0xE4CB,
- 0xE4CC,0x6E7A,0x4A5F,0x0000,0xE4CD,0x3154,0xE4CE,0x0000,
- 0xE4CF,0x0000,0x4946,0x4372,0x0000,0x0000,0x0000,0x0000,
- 0x3578,0xE4D0,0x6E7C,0xE4D1,0x395D,0x0000,0x0000,0xE4D2,
-
- /* 9300h */
- 0xE4D3,0x0000,0xE4D4,0x0000,0x0000,0x0000,0x3B2C,0x0000,
- 0xE4D5,0x0000,0x0000,0x0000,0x0000,0xE4D6,0x0000,0x6E7B,
- 0x3F6D,0xE4D7,0x0000,0x0000,0xE4D8,0xE4D9,0x0000,0x0000,
- 0x3F6E,0x6F21,0x6F23,0x0000,0xE4DA,0xE4DB,0xE4DC,0xE4DD,
- 0x3E7B,0xE4DE,0x6F22,0x6F24,0xE4DF,0xE4E0,0x3653,0xE4E1,
- 0x4945,0xE4E2,0xE4E3,0x3C62,0x4F23,0x0000,0x6E7E,0x3A78,
- 0x0000,0x0000,0x4F3F,0xE4E4,0xE4E5,0x6F26,0xE4E6,0xE4E7,
- 0x0000,0x0000,0x6F25,0x6F27,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x6E7D,0x0000,0x0000,0xE4E8,
- 0xE4E9,0xE4EA,0x0000,0x4669,0x0000,0x4555,0x0000,0x0000,
- 0xE4EB,0xE4EC,0xE4ED,0x0000,0x4457,0xE4EE,0x6F2C,0xE4EF,
- 0xE4F0,0x0000,0xE4F1,0x4343,0x6F28,0x0000,0xE4F2,0x0000,
- 0x6F29,0x0000,0x0000,0x0000,0xE4F3,0xE4F4,0x0000,0xE4F5,
- 0x0000,0xE4F6,0xE4F7,0x0000,0x372D,0xE4F8,0x6F2B,0xE4F9,
- 0xE4FA,0xE4FB,0x0000,0xE4FC,0xE4FD,0x3830,0xE4FE,0x0000,
- 0x0000,0x0000,0xE5A1,0x0000,0x6F2A,0xE5A2,0x3E61,0xE5A3,
- 0xE5A4,0xE5A5,0xE5A6,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0xE5A7,0x0000,0xE5A8,0xE5A9,0x3379,0xE5AA,0x0000,0xE5AB,
- 0x0000,0x0000,0xE5AC,0x0000,0x6F30,0xE5AD,0x3A3F,0x4179,
- 0xE5AE,0x0000,0x444A,0xE5AF,0x0000,0x0000,0xE5B0,0x0000,
- 0x0000,0xE5B1,0x0000,0xE5B2,0xE5B3,0x0000,0xE5B4,0x333B,
- 0xE5B5,0xE5BB,0x0000,0xE5B6,0x6F2E,0x6F2F,0x4443,0x0000,
- 0x6F2D,0x0000,0x0000,0x0000,0xE5B7,0xE5B8,0xE5B9,0x0000,
- 0x0000,0x6F31,0xE5BA,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0xE5BC,0x0000,0x6F37,0xE5BD,0xE5BE,0xE5BF,0xE5C0,
- 0x6F3A,0xE5C1,0xE5C2,0xE5C3,0xE5C4,0xE5C5,0x0000,0x0000,
- 0x6F39,0x452D,0x0000,0xE5C6,0x0000,0x0000,0x6F32,0x6F33,
- 0x6F36,0xE5C7,0x0000,0x0000,0xE5C8,0x6F38,0xE5C9,0xE5CA,
- 0x0000,0x3640,0xE5CB,0x0000,0x6F3B,0x6F35,0xE5CC,0xE5CD,
- 0x6F34,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xE5CF,
- 0xE5D0,0xE5CE,0xE5D1,0xE5D2,0x0000,0xE5D3,0x0000,0x0000,
-
- /* 9400h */
- 0x0000,0xE5D4,0xE5D5,0x6F3F,0xE5D6,0x0000,0x0000,0x6F40,
- 0xE5D7,0xE5D8,0x0000,0x0000,0x0000,0xE5D9,0xE5DA,0xE5DB,
- 0x6F41,0x0000,0x0000,0x6F3E,0x6F3D,0xE5DC,0xE5DD,0xE5DE,
- 0x3E62,0x462A,0x6F3C,0x0000,0x0000,0x0000,0x0000,0xE5DF,
- 0x0000,0x6F45,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x6F43,0x0000,0x0000,0xE5E0,0xE5E1,
- 0x0000,0xE5E2,0xE5E3,0xE5E4,0xE5E5,0x6F44,0x6F42,0x0000,
- 0x4278,0x0000,0x6F46,0xE5E6,0x0000,0xE5E8,0x0000,0xE5E7,
- 0x0000,0x6F47,0x0000,0xE5E9,0x6F49,0xE5EA,0x0000,0x0000,
- 0xE5EB,0x0000,0xE5EC,0x0000,0xE5ED,0x0000,0x0000,0x0000,
- 0x0000,0x3455,0x6F48,0x4C7A,0x0000,0xE5EE,0x0000,0x0000,
- 0x0000,0xE5EF,0x6F54,0x6F4A,0xE5F0,0x0000,0x6F4D,0xE5F1,
- 0x6F4B,0xE5F2,0x6F4C,0xE5F3,0x0000,0x0000,0x0000,0x0000,
- 0xE5F4,0x0000,0x6F4E,0xE5F5,0x0000,0xE5F6,0xE5F7,0xE5F8,
- 0x6F50,0xE5F9,0xE5FA,0x0000,0x0000,0x6F51,0x0000,0x6F52,
- 0x0000,0x0000,0x0000,0x0000,0x6F55,0x6F53,0x6F56,0x6F58,
- 0x0000,0x6F57,0x0000,0xE5FC,0xE5FB,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-
- /* 9500h */
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x4439,
- 0xE5FD,0xE5FE,0x0000,0x0000,0x0000,0x0000,0xE6A1,0x0000,
- 0x4C67,0x0000,0x6F59,0x412E,0xE6A2,0x0000,0x0000,0x6F5A,
- 0xE6A3,0x4A44,0x6F5B,0x332B,0xE6A4,0xE6A5,0xE6A6,0x313C,
- 0x0000,0x3457,0x0000,0x3456,0x6F5C,0x0000,0x6F5D,0x0000,
- 0x6F5E,0x6F5F,0x0000,0x0000,0x0000,0xE6A7,0xE6A8,0xE6A9,
- 0x6F60,0xE6AA,0x3458,0x3355,0x395E,0x4836,0xE6AB,0x6F62,
- 0x6F61,0xE6AC,0x0000,0xE6AD,0xE6AE,0x6F63,0x0000,0x0000,
- 0x0000,0x0000,0x315C,0x0000,0xE6AF,0x0000,0xE6B0,0x0000,
- 0x0000,0x6F66,0xE6B1,0x6F65,0x6F64,0xE6B2,0x6F67,0xE6B3,
- 0x0000,0x0000,0x0000,0x6F6A,0x0000,0x0000,0xE6B4,0x3047,
- 0xE6B5,0xE6B6,0x6F68,0xE6B7,0x6F6C,0x6F6B,0x0000,0x0000,
- 0xE6B8,0xE6B9,0xE6BA,0xE6BB,0x6F6E,0x6F6D,0x6F6F,0x0000,
- 0x462E,0xE6BC,0xE6BD,0x0000,0x6F70,0xE6BE,0xE6BF,0xE6C0,
- 0xE6C1,0x6F71,0x6F73,0x0000,0xE6C2,0x6F72,0xE6C3,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-
- /* 9600h */
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x496C,0xE6C4,0xE6C5,0x0000,
- 0x0000,0x6F74,0xE6C6,0x0000,0xE6C7,0xE6C8,0xE6C9,0x0000,
- 0x6F75,0x0000,0x3A65,0x0000,0xE6CA,0x0000,0x6F76,0x6F77,
- 0x0000,0xE6CB,0x4B49,0xE6CC,0x0000,0x0000,0x0000,0xE6CD,
- 0xE6CE,0xE6CF,0xE6D0,0x414B,0xE6D1,0xE6D2,0x0000,0x3024,
- 0x424B,0xE6D3,0x6F78,0x0000,0x496D,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x6F7B,0x6F79,0x395F,0x0000,0x6F7A,
- 0x3842,0x0000,0xE6D4,0x0000,0xE6D5,0x0000,0xE6D6,0xE6D7,
- 0xE6D8,0x0000,0x0000,0x4A45,0x6F7D,0x7021,0x6F7E,0x7022,
- 0x0000,0xE6D9,0x3121,0x3F58,0x3D7C,0x3459,0x7023,0x0000,
- 0x0000,0x0000,0x4766,0x0000,0x7025,0x0000,0xE6DA,0x0000,
- 0x3122,0x0000,0x7024,0x4444,0xE6DB,0x4E4D,0x462B,0x6F7C,
- 0x4E26,0x0000,0x3831,0xE6DC,0xE6DD,0x4D5B,0xE6DE,0xE6DF,
- 0x0000,0xE6E0,0xE6E1,0xE6E2,0xE6E3,0x3679,0x4E34,0x0000,
- 0x3728,0xE6E4,0x4262,0x6721,0x0000,0x7026,0x332C,0x3F6F,
- 0x0000,0xE6E5,0x0000,0x0000,0x3356,0x7028,0xE6E6,0x7029,
- 0x7027,0x3764,0xE6E7,0x3A5D,0x3E63,0xE6E8,0x0000,0xE6E9,
- 0x3123,0x0000,0x0000,0x4E59,0xE6EA,0xE6EB,0xE6EC,0x702B,
- 0x6E2E,0xE6ED,0x702A,0x0000,0x0000,0x0000,0xE6EE,0xE6EF,
- 0x702E,0x702C,0x702D,0xE6F0,0x702F,0x0000,0x7030,0x4E6C,
- 0x7031,0x7032,0xE6F1,0x4049,0x483B,0x0000,0x0000,0x0000,
- 0x3F7D,0x3467,0x0000,0x0000,0x4D3A,0x326D,0x3D38,0x385B,
- 0x0000,0x7035,0xE6F2,0x7034,0x3B73,0x7036,0x7033,0x0000,
- 0x0000,0x3B28,0xE6F3,0x0000,0x0000,0x703A,0x6A2D,0x0000,
- 0xE6F5,0x5256,0xE6F6,0x3F77,0x7038,0xE6F7,0xE6F8,0xE6F9,
- 0x0000,0x0000,0x4E25,0x4671,0x0000,0x0000,0x0000,0x0000,
- 0x312B,0xE6FA,0x4063,0x3C36,0x0000,0x0000,0x0000,0xE6FB,
- 0x4A37,0xE6FC,0x3140,0x0000,0x0000,0x0000,0x4E6D,0x4D6B,
- 0x0000,0x703B,0xE6FD,0x4545,0x0000,0x0000,0x0000,0x0000,
-
- /* 9700h */
- 0x3C7B,0x0000,0xE6FE,0xE7A1,0x703C,0xE7A2,0x703D,0x3F4C,
- 0x703E,0xE7A3,0x4E6E,0x0000,0x0000,0x7039,0x7040,0x7042,
- 0x0000,0x7041,0x0000,0x703F,0x0000,0x0000,0x7043,0x0000,
- 0x0000,0x7044,0xE7A4,0xE7A5,0x417A,0xE7A6,0x3262,0x0000,
- 0x0000,0xE7A7,0xE7A8,0xE7A9,0x7045,0x0000,0x0000,0x4C38,
- 0xE7AA,0x0000,0x7046,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x7047,0xE7AB,0x4F2A,0xE7AC,0x0000,0x0000,0x0000,0x0000,
- 0x5B31,0x7048,0x0000,0x0000,0x0000,0x7049,0x704A,0x0000,
- 0x0000,0xE7AD,0x704E,0xE7AE,0x704B,0x0000,0x704C,0x0000,
- 0x704D,0x704F,0xE7AF,0x0000,0x0000,0x0000,0xE7B0,0xE7B1,
- 0x0000,0x0000,0x4044,0x0000,0x0000,0xE7B2,0x4C77,0xE7B3,
- 0xE7B4,0x4045,0xE7B5,0xE7B6,0x7050,0x0000,0x4873,0x0000,
- 0x7051,0x7353,0x4C4C,0xE7B7,0x7052,0x0000,0x7053,0xE7B8,
- 0x7054,0x3357,0xE7B9,0x7056,0x0000,0x3F59,0xE7BA,0x0000,
- 0x0000,0x7057,0x0000,0xE7BB,0x3724,0x0000,0xE7BC,0xE7BD,
- 0xE7BE,0x7058,0x705C,0xE7BF,0x705A,0xE7C0,0x0000,0xE7C1,
- 0xE7C2,0x705B,0x0000,0x0000,0x3373,0x7059,0x705D,0x0000,
- 0x0000,0xE7C3,0x0000,0x705E,0x0000,0x3048,0x0000,0x705F,
- 0x7060,0x0000,0x0000,0x0000,0x0000,0xE7C4,0xE7C5,0xE7C6,
- 0x3E64,0xE7C7,0xE7C8,0x0000,0x7061,0x0000,0xE7C9,0xE7CA,
- 0x3547,0x0000,0xE7CB,0x7064,0x0000,0x0000,0x7063,0x0000,
- 0x7062,0x0000,0x0000,0x6B71,0xE7CC,0x4A5C,0xE7CD,0x0000,
- 0x0000,0xE7CE,0xE7CF,0x7065,0x7066,0xE7D0,0xE7D1,0x0000,
- 0xE7D2,0xE7D3,0xE7D4,0x0000,0xE7D5,0x0000,0xE7D6,0xE7D7,
- 0x0000,0xE7D8,0x0000,0x7067,0xE7D9,0xE7DA,0x7068,0xE7DB,
- 0x7069,0xE7DC,0xE7DD,0x706A,0xE7DE,0xE7DF,0xE7E0,0x0000,
- 0xE7E1,0xE7E2,0x0000,0x345A,0xE7E3,0x0000,0x0000,0xE7E4,
- 0xE7E5,0xE7E6,0x0000,0xE7EA,0x706B,0xE7E7,0xE7E8,0x0000,
- 0xE7E9,0xE7EB,0x0000,0x0000,0xE7EC,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x706C,0x4723,0xE7ED,
- 0x0000,0xE7EE,0x706E,0x323B,0xE7EF,0x7071,0x7070,0xE7F0,
- 0xE7F1,0x0000,0xE7F2,0x3124,0x0000,0x0000,0x0000,0x3641,
-
- /* 9800h */
- 0x0000,0x4A47,0x443A,0x3A22,0x0000,0x3960,0x3D67,0xE7F3,
- 0x3F5C,0x0000,0xE7F4,0x0000,0x7073,0xE7F6,0xE7F7,0x7072,
- 0x4D42,0x3468,0x4852,0x465C,0xE7F8,0x0000,0xE7F9,0x3F7C,
- 0x4E4E,0xE7F5,0x375B,0x0000,0xE7FA,0x0000,0xE7FB,0x0000,
- 0xE7FC,0x7076,0x0000,0xE7FD,0x7075,0xE8A8,0xE7FE,0x0000,
- 0x0000,0x0000,0x0000,0xE8A1,0x4B4B,0x462C,0xE8A2,0xE8A3,
- 0xE8A4,0x0000,0xE8A5,0xE8A6,0x3150,0xE8A7,0x0000,0x7077,
- 0x7074,0x0000,0x0000,0x4951,0x4D6A,0x7078,0xE8A9,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0xE8AA,0x0000,0x7079,0xE8AB,
- 0x0000,0x0000,0xE8AC,0x707B,0x426A,0x335B,0x335C,0x707A,
- 0x0000,0xE8AD,0xE8AE,0xE8AF,0x3469,0x3832,0xE8B0,0xE8B1,
- 0x346A,0xE8B2,0xE8B3,0x453F,0x0000,0x0000,0x4E60,0x0000,
- 0x0000,0x0000,0xE8B4,0xE8B5,0x0000,0xE8B6,0xE8B7,0x385C,
- 0x0000,0x0000,0xE8B8,0x707C,0xE8B9,0x0000,0x0000,0x707D,
- 0x707E,0x7121,0x0000,0x7123,0x7122,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x4977,0x0000,0x7124,0xE8BA,0x0000,0xE8BB,0xE8BC,0x7125,
- 0xE8BD,0x7126,0x0000,0x0000,0xE8BE,0x0000,0x7127,0xE8BF,
- 0xE8C0,0x0000,0xE8C1,0xE8C2,0x0000,0x0000,0x0000,0xE8C3,
- 0x0000,0x0000,0xE8C4,0x7129,0x7128,0xE8C5,0x712A,0x0000,
- 0xE8C6,0x0000,0x0000,0x0000,0xE8C7,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x4874,0x664C,0x0000,0x0000,0x3F29,
- 0x0000,0xE8C8,0x3532,0xE8C9,0x0000,0xE8CA,0xE8CB,0xE8CC,
- 0x0000,0x712B,0xE8CD,0x712C,0x0000,0x522C,0x5D3B,0x4853,
- 0x0000,0x0000,0x307B,0xE8CE,0x303B,0x0000,0xE8CF,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x3B74,0x4B30,0x3E7E,0x0000,
-
- /* 9900h */
- 0x0000,0x0000,0xE8D0,0x712D,0x0000,0x4C5F,0x0000,0xE8D1,
- 0xE8D2,0x712E,0x4D5C,0x0000,0x3142,0x0000,0x0000,0x0000,
- 0x3B41,0xE8D3,0x712F,0x326E,0x7130,0xE8D4,0xE8D5,0xE8D6,
- 0x7131,0x0000,0xE8D7,0xE8D8,0xE8D9,0x7133,0x7134,0xE8DA,
- 0x7136,0x7132,0xE8DB,0x0000,0x7135,0x0000,0xE8DC,0xE8DD,
- 0x345B,0x0000,0x0000,0xE8DE,0x7137,0x0000,0x7138,0x0000,
- 0x0000,0xE8DF,0xE8E0,0xE8E1,0xE8E2,0xE8E3,0x0000,0x0000,
- 0x0000,0xE8E4,0xE8E5,0xE8E6,0xE8E7,0x7139,0x713A,0x0000,
- 0xE8E8,0xE8E9,0x713B,0x0000,0x0000,0x713D,0xE8EA,0xE8EB,
- 0xE8EC,0x713C,0x0000,0x713F,0x7142,0xE8ED,0xE8EE,0x0000,
- 0x713E,0x7140,0x7141,0x0000,0xE8EF,0x7143,0x0000,0x3642,
- 0xE8F0,0xE8F1,0x0000,0xE8F2,0xE8F3,0x0000,0xE8F4,0xE8F5,
- 0xE8F6,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x3C73,0x7144,
- 0x7145,0x3961,0x0000,0xE8F7,0x0000,0xE8F8,0x0000,0xE8F9,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x7146,0xE8FA,0x0000,
- 0x333E,0x0000,0x0000,0x0000,0x474F,0x7147,0x7148,0x0000,
- 0xE8FB,0xE8FC,0xE8FD,0x435A,0x466B,0xE8FE,0x0000,0x0000,
- 0x0000,0xE9A1,0xE9A2,0x0000,0x7149,0xE9A3,0x0000,0xE9A4,
- 0x0000,0x477D,0x0000,0xE9A5,0x424C,0x3158,0x366E,0x0000,
- 0x366F,0xE9A6,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x4373,0x714E,0x3670,0xE9A7,0xE9A8,0x326F,0x0000,0x0000,
- 0x714D,0xE9A9,0xE9AA,0x714B,0xE9AB,0x714C,0xE9AC,0x714A,
- 0x0000,0x0000,0x7158,0x0000,0x0000,0x0000,0x0000,0xE9AD,
- 0x0000,0x0000,0xE9AE,0xE9AF,0xE9B0,0x714F,0x7150,0x0000,
- 0xE9B1,0x7151,0x7152,0x0000,0xE9B2,0xE9B3,0x0000,0x0000,
- 0x7154,0xE9B4,0x0000,0x7153,0x0000,0xE9B5,0xE9B6,0x3D59,
-
- /* 9A00h */
- 0x0000,0x7155,0xE9B7,0xE9B8,0xE9B9,0x7157,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0xE9BA,0xE9BB,0x0000,0x3533,0x7156,
- 0xE9BC,0xE9BD,0x417B,0x3833,0x0000,0x0000,0xE9BE,0x0000,
- 0x0000,0x7159,0x0000,0x0000,0x0000,0x0000,0xE9BF,0x0000,
- 0xE9C0,0x0000,0xE9C1,0xE9C2,0xE9C3,0x0000,0x0000,0xE9C4,
- 0x424D,0x0000,0x0000,0x715A,0x0000,0xE9C5,0xE9C6,0x0000,
- 0x462D,0x0000,0x0000,0xE9C7,0x0000,0xE9C8,0xE9C9,0x715B,
- 0xE9CA,0x0000,0x0000,0x0000,0x0000,0x0000,0x7160,0x0000,
- 0x715E,0xE9CC,0x715D,0x715F,0xE9CD,0x715C,0x0000,0xE9CB,
- 0x0000,0x0000,0xE9CE,0xE9CF,0xE9D0,0x7162,0xE9D1,0x0000,
- 0x0000,0xE9D2,0x0000,0x0000,0xE9D3,0x7161,0xE9D4,0x7164,
- 0x0000,0x0000,0x3643,0x7163,0x0000,0xE9D5,0x0000,0x7165,
- 0x0000,0x0000,0x7166,0x0000,0x7168,0x7167,0x0000,0x0000,
- 0x0000,0x7169,0x716B,0x716A,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x397C,0x0000,0xE9D6,0x0000,0xE9D7,0x716C,0xE9D8,0xE9D9,
- 0x716D,0x0000,0xE9DA,0x0000,0xE9DB,0xE9DC,0xE9DD,0x0000,
- 0x333C,0xE9DE,0x0000,0xE9DF,0x716E,0x0000,0xE9E0,0xE9E1,
- 0x716F,0xE9E2,0x0000,0xE9E3,0x3F71,0x0000,0xE9E4,0x0000,
- 0xE9E5,0x0000,0x0000,0x0000,0x0000,0x0000,0xE9E6,0x7170,
- 0xE9E7,0x7171,0xE9E8,0x7172,0x7173,0xE9E9,0xE9EA,0xE9EB,
- 0x3962,0x0000,0x0000,0xE9EC,0xE9ED,0x0000,0x7174,0x7175,
- 0xE9EE,0x0000,0x7176,0x7177,0xE9EF,0xE9F0,0x7178,0xE9F1,
- 0x0000,0xE9F2,0x4831,0x717A,0xE9F3,0x4926,0x717B,0x7179,
- 0x0000,0x717D,0xE9F4,0xE9F5,0x717C,0xE9F6,0x0000,0x717E,
- 0x0000,0xE9F7,0xE9F8,0x7221,0x0000,0xE9F9,0x0000,0xE9FA,
-
- /* 9B00h */
- 0xE9FB,0xE9FC,0xE9FD,0xE9FE,0xEAA1,0xEAA2,0x7222,0x0000,
- 0xEAA3,0xEAA4,0x0000,0xEAA5,0xEAA6,0xEAA7,0xEAA8,0x0000,
- 0xEAA9,0x0000,0xEAAA,0x0000,0x0000,0x0000,0xEAAB,0x0000,
- 0x7223,0xEAAC,0x7224,0xEAAD,0xEAAE,0x0000,0x0000,0x7225,
- 0xEAAF,0x0000,0x7226,0x7227,0x0000,0x7228,0xEAB0,0x7229,
- 0x722A,0x722B,0x722C,0xEAB1,0x0000,0xEAB2,0x722D,0x722E,
- 0x0000,0x5D35,0x722F,0xEAB3,0xEAB4,0xEAB5,0x0000,0xEAB6,
- 0x0000,0xEAB7,0xEAB8,0x6478,0x3534,0xEAB9,0x0000,0x0000,
- 0x0000,0x3321,0x3A32,0x7231,0x7230,0x4C25,0x0000,0x0000,
- 0xEABA,0x0000,0x0000,0xEABB,0xEABC,0x7233,0x7234,0x7232,
- 0x0000,0x7235,0x0000,0x0000,0x4B62,0xEABD,0xEABE,0xEABF,
- 0x7236,0x0000,0x357B,0xEAC0,0x0000,0x0000,0xEAC1,0x0000,
- 0x0000,0xEAC2,0x0000,0xEAC3,0x0000,0xEAC4,0xEAC5,0x0000,
- 0xEAC6,0x0000,0xEAC7,0xEAC8,0xEAC9,0xEACA,0xEACB,0x4F25,
- 0x0000,0x0000,0x0000,0xEACC,0x7237,0xEACD,0x0000,0xEACE,
- 0xEACF,0xEAD0,0x0000,0x0000,0x0000,0x0000,0x0000,0xEAD1,
- 0xEAD2,0x0000,0x0000,0x7239,0xEAD3,0xEAD4,0xEAD5,0xEAD6,
- 0x0000,0xEAD7,0xEAD8,0xEAD9,0x0000,0xEADA,0x303E,0xEADB,
- 0xEADC,0x723A,0x4A2B,0x7238,0xEADD,0x0000,0x723B,0x723C,
- 0x0000,0x0000,0xEADE,0x0000,0x0000,0xEADF,0xEAE0,0x723D,
- 0x723E,0x0000,0x0000,0x0000,0x0000,0x0000,0xEAE1,0xEAE2,
- 0x723F,0xEAE3,0x4B6E,0x3B2D,0xEAE4,0x3A7A,0x412F,0x0000,
- 0xEAE5,0xEAE6,0xEAE7,0x0000,0x7240,0x0000,0x0000,0xEAE8,
- 0xEAE9,0x7243,0x0000,0xEAEA,0xEAEB,0x0000,0xEAEC,0xEAED,
- 0x7241,0xEAEE,0x0000,0x0000,0x0000,0x0000,0x7244,0xEAEF,
- 0xEAF0,0x3871,0x7242,0x0000,0x0000,0x0000,0xEAF1,0x7245,
- 0xEAF2,0x7246,0x7247,0x0000,0x724B,0x0000,0x3B2A,0xEAF3,
- 0xEAF4,0x0000,0x0000,0x4264,0x0000,0xEAF5,0x0000,0xEAF6,
- 0x0000,0x724C,0x7249,0x7248,0x724A,0xEAF7,0x0000,0xEAF8,
- 0x375F,0x0000,0xEAF9,0xEAFA,0x0000,0x0000,0x0000,0xEAFB,
- 0x7250,0x724F,0x724E,0xEAFC,0x0000,0x3033,0x0000,0xEAFD,
- 0xEAFE,0xEBA1,0xEBA2,0x0000,0x0000,0xEBA3,0x0000,0xEBA4,
-
- /* 9C00h */
- 0xEBA5,0x0000,0xEBA6,0x0000,0x725A,0x0000,0x7256,0x0000,
- 0x7257,0x7253,0x7259,0xEBA7,0x7255,0x3362,0x0000,0xEBA8,
- 0x4F4C,0xEBA9,0x7258,0x7254,0x7252,0x7251,0xEBAA,0x0000,
- 0xEBAB,0xEBAC,0xEBAD,0x725C,0xEBAE,0x0000,0xEBAF,0x0000,
- 0x0000,0x725F,0xEBB0,0xEBB1,0x725E,0x725D,0xEBB2,0xEBB3,
- 0xEBB4,0xEBB5,0xEBB6,0x0000,0x0000,0x4949,0x725B,0x3073,
- 0x7260,0xEBB7,0x7262,0x0000,0x0000,0xEBB8,0xEBB9,0xEBBA,
- 0x0000,0x336F,0x724D,0x3137,0x0000,0xEBBB,0x7264,0x0000,
- 0x0000,0xEBBC,0x0000,0xEBBD,0xEBBE,0xEBBF,0x7263,0x7261,
- 0x432D,0xEBC0,0xEBC1,0x0000,0x0000,0x0000,0xEBC2,0xEBC3,
- 0xEBC4,0x0000,0x4B70,0xEBC5,0xEBC6,0x0000,0xEBC7,0x4E5A,
- 0xEBC8,0x0000,0x7265,0xEBC9,0xEBD0,0xEBCA,0xEBCB,0xEBCC,
- 0x7266,0x0000,0x0000,0xEBCD,0x0000,0x0000,0x0000,0x7267,
- 0xEBD2,0xEBCE,0xEBCF,0xEBD1,0x0000,0x0000,0xEBD3,0x0000,
- 0xEBD4,0x0000,0xEBD5,0x0000,0x0000,0xEBD6,0x7268,0xEBD7,
- 0x7269,0x0000,0x0000,0xEBD8,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x443B,0xEBD9,0x726A,
- 0x0000,0x4837,0x0000,0x726F,0x726B,0x0000,0x0000,0x0000,
- 0x726C,0x0000,0xEBDA,0x4B31,0x4C44,0x0000,0x4650,0xEBDB,
- 0x0000,0xEBDC,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-
- /* 9D00h */
- 0x0000,0x0000,0xEBDE,0x7270,0x0000,0x0000,0x7271,0x463E,
- 0x726E,0x726D,0x0000,0xEBDD,0x0000,0x0000,0x322A,0x0000,
- 0x0000,0xEBDF,0x7279,0x0000,0x0000,0x7278,0x0000,0xEBE0,
- 0xEBE1,0x0000,0x0000,0x3175,0xEBE2,0xEBE3,0xEBE4,0x7276,
- 0x0000,0x0000,0x0000,0x7275,0x0000,0x0000,0x7273,0x0000,
- 0x337B,0x0000,0x7272,0x3C32,0x3229,0x0000,0x0000,0xEBE5,
- 0xEBE6,0x0000,0xEBE7,0xEBE8,0xEBE9,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0xEBEA,0x3963,0xEBEB,0xEBED,0x727C,0x727B,
- 0x0000,0x727A,0xEBEE,0xEBEF,0x7277,0xEBEC,0x727D,0xEBF0,
- 0x727E,0x0000,0xEBF1,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x7325,0x7324,0x0000,0xEBF2,0xEBF3,0x0000,0x0000,0x0000,
- 0x0000,0x7326,0x0000,0x0000,0x312D,0x7321,0x7322,0xEBF4,
- 0x3974,0x4C39,0xEBF6,0xEBF5,0x7323,0xEBF7,0x0000,0x0000,
- 0x0000,0xEBF8,0xEBF9,0xEBFA,0x4B32,0x0000,0x0000,0x732B,
- 0xEBFB,0x0000,0x7327,0x0000,0x0000,0x0000,0xEBFC,0xEBFD,
- 0x0000,0x0000,0x732C,0xEBFE,0xECA1,0x0000,0xECA2,0x0000,
- 0x0000,0x0000,0x0000,0xECA3,0xECA4,0x0000,0xECA5,0x7329,
- 0x0000,0x7328,0xECA6,0x0000,0x0000,0xECA7,0xECA8,0x375C,
- 0x0000,0x0000,0xECA9,0xECAA,0x0000,0xECAB,0xECAC,0xECAD,
- 0xECAE,0x0000,0x732D,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0xECAF,0x0000,0x0000,0x732E,0x0000,0x0000,0x0000,
- 0x0000,0x732F,0xECB0,0x732A,0xECB1,0x0000,0xECB2,0x7274,
- 0x0000,0xECB3,0x7330,0x0000,0x4461,0xECB4,0x0000,0x0000,
- 0x7334,0xECB5,0x7335,0x7333,0xECB6,0x0000,0x0000,0xECB7,
- 0x0000,0x7332,0x7338,0xECB8,0x7331,0x0000,0x7336,0xECB9,
- 0x0000,0xECBA,0xECBB,0x0000,0x0000,0x0000,0x0000,0x7337,
- 0x0000,0x0000,0x0000,0x733A,0xECBC,0xECBD,0xECBE,0xECBF,
- 0x0000,0x7339,0xECC0,0x0000,0x0000,0x0000,0xECC1,0xECC2,
- 0xECC3,0x0000,0x0000,0x0000,0x0000,0xECC4,0x733C,0xECC5,
- 0x0000,0xECC6,0x0000,0xECC7,0x0000,0x733D,0xECC8,0x733E,
- 0xECC9,0x0000,0x4F49,0xECCA,0xECCB,0x0000,0x0000,0x0000,
- 0x733B,0x426B,0x3A6D,0x0000,0x0000,0x733F,0xECCC,0x0000,
-
- /* 9E00h */
- 0x0000,0x0000,0xECCE,0x0000,0x0000,0x0000,0x0000,0xECCF,
- 0x0000,0x0000,0xECCD,0x0000,0x0000,0x0000,0xECD0,0x0000,
- 0xECD1,0xECD2,0xECD3,0x0000,0x0000,0xECD4,0xECD5,0x0000,
- 0x0000,0xECD6,0x7340,0x7341,0xECD7,0xECD8,0x7342,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x7343,0x0000,0x0000,
- 0x3834,0x7344,0xECD9,0xECDA,0xECDB,0x7345,0x0000,0x3C2F,
- 0xECDC,0x7346,0xECDD,0xECDE,0xECDF,0xECE0,0x0000,0xECE1,
- 0x7347,0x0000,0x0000,0x7348,0x7349,0x0000,0xECE2,0xECE3,
- 0x0000,0x734C,0x734A,0x4F3C,0x0000,0x734B,0xECE4,0x4E6F,
- 0xECE5,0x0000,0x0000,0xECE6,0x0000,0x734D,0xECE7,0x4E5B,
- 0x0000,0x0000,0x0000,0x0000,0xECE8,0x734E,0x477E,0x0000,
- 0xECE9,0x734F,0x7351,0x0000,0xECEA,0x7352,0xECEB,0xECEC,
- 0xECED,0x0000,0x0000,0xECEE,0xECEF,0xECF0,0x0000,0x0000,
- 0x7350,0x396D,0x4C4D,0x4B63,0x5677,0x0000,0x5D60,0x4B7B,
- 0x0000,0x0000,0x0000,0x0000,0x322B,0x0000,0xECF1,0x0000,
- 0xECF2,0x0000,0x0000,0xECF3,0x7354,0x3550,0x7355,0x7356,
- 0x7357,0x0000,0x3975,0x0000,0x7358,0xECF4,0x0000,0x0000,
- 0x6054,0x4C5B,0x0000,0x4263,0x7359,0x735B,0x735A,0xECF5,
- 0x735C,0x0000,0x0000,0x0000,0xECF6,0x735D,0x0000,0xECF7,
- 0x735E,0x0000,0x0000,0x0000,0xECF8,0xECF9,0xECFA,0x735F,
- 0xECFB,0xECFC,0xECFD,0x0000,0x7360,0xECFE,0x7361,0x7362,
- 0xEDA1,0x7363,0x0000,0x7364,0x7365,0x7366,0x0000,0xEDA2,
-
- /* 9F00h */
- 0x0000,0x0000,0xEDA3,0xEDA4,0x0000,0x0000,0x0000,0x7367,
- 0x7368,0xEDA5,0x0000,0x0000,0x0000,0x0000,0x4524,0xEDA6,
- 0xEDA7,0xEDA8,0xEDA9,0x385D,0xEDAA,0x736A,0xEDAB,0xEDAC,
- 0x0000,0xEDAD,0xEDAE,0xEDAF,0x0000,0x0000,0x0000,0xEDB0,
- 0x414D,0x736B,0xEDB1,0x0000,0x0000,0x0000,0xEDB2,0x0000,
- 0x0000,0x0000,0xEDB3,0xEDB4,0x736C,0x0000,0x0000,0xEDB5,
- 0x0000,0xEDB6,0xEDB7,0x0000,0xEDB8,0x0000,0x0000,0xEDB9,
- 0x0000,0xEDBA,0xEDBB,0x4921,0xEDBC,0xEDBD,0x736D,0xEDBE,
- 0x0000,0xEDBF,0x0000,0xEDC0,0xEDC1,0xEDC2,0xEDC3,0xEDC4,
- 0x0000,0x0000,0x736E,0x6337,0x0000,0x0000,0x6C5A,0x706D,
- 0x0000,0x0000,0x736F,0xEDC5,0x7370,0xEDC6,0xEDC7,0xEDC8,
- 0xEDC9,0x0000,0xEDCA,0x0000,0x0000,0xEDCB,0xEDCC,0x7372,
- 0x7373,0x7374,0x4E70,0x7371,0x0000,0x0000,0x7375,0x7376,
- 0xEDCD,0xEDCE,0x7378,0x0000,0x7377,0xEDCF,0xEDD0,0xEDD1,
- 0xEDD2,0xEDD3,0x737A,0xEDD4,0x0000,0xEDD5,0x737B,0x7379,
- 0x0000,0x0000,0xEDD6,0x0000,0x0000,0xEDD7,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x4E36,0x0000,0xEDD8,
- 0xEDD9,0xEDDA,0xEDDB,0x0000,0xEDDC,0x737C,0xEDDD,0xEDDE,
- 0x0000,0x0000,0x0000,0x0000,0x737D,0x6354,0xEDDF,0x0000,
- 0x737E,0xEDE0,0xEDE1,0xEDE2,0x0000,0xEDE3,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000
-};
-static const int ucs_i_jis_table_min = 0x4E00;
-static const int ucs_i_jis_table_max = 0x4E00 + (sizeof (ucs_i_jis_table) / sizeof (unsigned short));
-
-
-static const unsigned short ucs_r_jis_table[] = {
- /* FF00h */
- 0x0000,0x212A,0x0000,0x2174,0x2170,0x2173,0x2175,0x0000,
- 0x214A,0x214B,0x2176,0x215C,0x2124,0x0000,0x2125,0x213F,
- 0x2330,0x2331,0x2332,0x2333,0x2334,0x2335,0x2336,0x2337,
- 0x2338,0x2339,0x2127,0x2128,0x2163,0x2161,0x2164,0x2129,
- 0x2177,0x2341,0x2342,0x2343,0x2344,0x2345,0x2346,0x2347,
- 0x2348,0x2349,0x234A,0x234B,0x234C,0x234D,0x234E,0x234F,
- 0x2350,0x2351,0x2352,0x2353,0x2354,0x2355,0x2356,0x2357,
- 0x2358,0x2359,0x235A,0x214E,0x2140,0x214F,0x2130,0x2132,
- 0x212E,0x2361,0x2362,0x2363,0x2364,0x2365,0x2366,0x2367,
- 0x2368,0x2369,0x236A,0x236B,0x236C,0x236D,0x236E,0x236F,
- 0x2370,0x2371,0x2372,0x2373,0x2374,0x2375,0x2376,0x2377,
- 0x2378,0x2379,0x237A,0x2150,0x2143,0x2151,0x0000,0x0000,
- 0x0000,0x00A1,0x00A2,0x00A3,0x00A4,0x00A5,0x00A6,0x00A7,
- 0x00A8,0x00A9,0x00AA,0x00AB,0x00AC,0x00AD,0x00AE,0x00AF,
- 0x00B0,0x00B1,0x00B2,0x00B3,0x00B4,0x00B5,0x00B6,0x00B7,
- 0x00B8,0x00B9,0x00BA,0x00BB,0x00BC,0x00BD,0x00BE,0x00BF,
- 0x00C0,0x00C1,0x00C2,0x00C3,0x00C4,0x00C5,0x00C6,0x00C7,
- 0x00C8,0x00C9,0x00CA,0x00CB,0x00CC,0x00CD,0x00CE,0x00CF,
- 0x00D0,0x00D1,0x00D2,0x00D3,0x00D4,0x00D5,0x00D6,0x00D7,
- 0x00D8,0x00D9,0x00DA,0x00DB,0x00DC,0x00DD,0x00DE,0x00DF,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x2131,0x0000,0x216F
-};
-static const int ucs_r_jis_table_min = 0xFF00;
-static const int ucs_r_jis_table_max = 0xFF00 + (sizeof (ucs_r_jis_table) / sizeof (unsigned short));
-
-#endif /* UNICODE_TABLE_JIS_H */
diff --git a/ext/mbstring/libmbfl/filters/unicode_table_koi8r.h b/ext/mbstring/libmbfl/filters/unicode_table_koi8r.h
deleted file mode 100644
index ad3a68cd3d..0000000000
--- a/ext/mbstring/libmbfl/filters/unicode_table_koi8r.h
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * "streamable kanji code filter and converter"
- * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved.
- *
- * LICENSE NOTICES
- *
- * This file is part of "streamable kanji code filter and converter",
- * which is distributed under the terms of GNU Lesser General Public
- * License (version 2) as published by the Free Software Foundation.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with "streamable kanji code filter and converter";
- * if not, write to the Free Software Foundation, Inc., 59 Temple Place,
- * Suite 330, Boston, MA 02111-1307 USA
- *
- * The original author of this file: Den V. Tsopa <tdv@edisoft.ru>
- *
- */
-
-#ifndef UNICODE_TABLE_KOI8R_H
-#define UNICODE_TABLE_KOI8R_H
-
-/* KOI8-R (RFC1489) to Unicode */
-static const unsigned short koi8r_ucs_table[] = {
- 0x2500, 0x2502, 0x250c, 0x2510, 0x2514, 0x2518, 0x251c, 0x2524,
- 0x252c, 0x2534, 0x253c, 0x2580, 0x2584, 0x2588, 0x258c, 0x2590,
- 0x2591, 0x2592, 0x2593, 0x2320, 0x25a0, 0x2219, 0x221a, 0x2248,
- 0x2264, 0x2265, 0x00a0, 0x2321, 0x00b0, 0x00b2, 0x00b7, 0x00f7,
- 0x2550, 0x2551, 0x2552, 0x0451, 0x2553, 0x2554, 0x2555, 0x2556,
- 0x2557, 0x2558, 0x2559, 0x255a, 0x255b, 0x255c, 0x255d, 0x255e,
- 0x255f, 0x2560, 0x2561, 0x0401, 0x2562, 0x2563, 0x2564, 0x2565,
- 0x2566, 0x2567, 0x2568, 0x2569, 0x256a, 0x256b, 0x256c, 0x00a9,
- 0x044e, 0x0430, 0x0431, 0x0446, 0x0434, 0x0435, 0x0444, 0x0433,
- 0x0445, 0x0438, 0x0439, 0x043a, 0x043b, 0x043c, 0x043d, 0x043e,
- 0x043f, 0x044f, 0x0440, 0x0441, 0x0442, 0x0443, 0x0436, 0x0432,
- 0x044c, 0x044b, 0x0437, 0x0448, 0x044d, 0x0449, 0x0447, 0x044a,
- 0x042e, 0x0410, 0x0411, 0x0426, 0x0414, 0x0415, 0x0424, 0x0413,
- 0x0425, 0x0418, 0x0419, 0x041a, 0x041b, 0x041c, 0x041d, 0x041e,
- 0x041f, 0x042f, 0x0420, 0x0421, 0x0422, 0x0423, 0x0416, 0x0412,
- 0x042c, 0x042b, 0x0417, 0x0428, 0x042d, 0x0429, 0x0427, 0x042a
-};
-static const int koi8r_ucs_table_min = 0x80;
-static const int koi8r_ucs_table_len = (sizeof (koi8r_ucs_table) / sizeof (unsigned short));
-static const int koi8r_ucs_table_max = 0x80 + (sizeof (koi8r_ucs_table) / sizeof (unsigned short));
-
-
-
-#endif /* UNNICODE_TABLE_KOI8R_H */
diff --git a/ext/mbstring/libmbfl/filters/unicode_table_uhc.h b/ext/mbstring/libmbfl/filters/unicode_table_uhc.h
deleted file mode 100644
index 802e120e08..0000000000
--- a/ext/mbstring/libmbfl/filters/unicode_table_uhc.h
+++ /dev/null
@@ -1,7186 +0,0 @@
-/*
- * "streamable kanji code filter and converter"
- * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved.
- *
- * LICENSE NOTICES
- *
- * This file is part of "streamable kanji code filter and converter",
- * which is distributed under the terms of GNU Lesser General Public
- * License (version 2) as published by the Free Software Foundation.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with "streamable kanji code filter and converter";
- * if not, write to the Free Software Foundation, Inc., 59 Temple Place,
- * Suite 330, Boston, MA 02111-1307 USA
- *
- * The author of this file: Rui Hirokawa <hirokawa@php.net>
- *
- */
-
-#ifndef UNICODE_TABLE_UHC_H
-#define UNICODE_TABLE_UHC_H
-
-/*
- * Unicode table
- */
-
-static const unsigned short uhc1_ucs_table[] = {
-0xac02,0xac03,0xac05,0xac06,0xac0b,0xac0c,0xac0d,0xac0e,
-0xac0f,0xac18,0xac1e,0xac1f,0xac21,0xac22,0xac23,0xac25,
-0xac26,0xac27,0xac28,0xac29,0xac2a,0xac2b,0xac2e,0xac32,
-0xac33,0xac34,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xac35,0xac36,0xac37,0xac3a,0xac3b,0xac3d,0xac3e,0xac3f,
-0xac41,0xac42,0xac43,0xac44,0xac45,0xac46,0xac47,0xac48,
-0xac49,0xac4a,0xac4c,0xac4e,0xac4f,0xac50,0xac51,0xac52,
-0xac53,0xac55,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xac56,0xac57,0xac59,0xac5a,0xac5b,0xac5d,0xac5e,0xac5f,
-0xac60,0xac61,0xac62,0xac63,0xac64,0xac65,0xac66,0xac67,
-0xac68,0xac69,0xac6a,0xac6b,0xac6c,0xac6d,0xac6e,0xac6f,
-0xac72,0xac73,0xac75,0xac76,0xac79,0xac7b,0xac7c,0xac7d,
-0xac7e,0xac7f,0xac82,0xac87,0xac88,0xac8d,0xac8e,0xac8f,
-0xac91,0xac92,0xac93,0xac95,0xac96,0xac97,0xac98,0xac99,
-0xac9a,0xac9b,0xac9e,0xaca2,0xaca3,0xaca4,0xaca5,0xaca6,
-0xaca7,0xacab,0xacad,0xacae,0xacb1,0xacb2,0xacb3,0xacb4,
-0xacb5,0xacb6,0xacb7,0xacba,0xacbe,0xacbf,0xacc0,0xacc2,
-0xacc3,0xacc5,0xacc6,0xacc7,0xacc9,0xacca,0xaccb,0xaccd,
-0xacce,0xaccf,0xacd0,0xacd1,0xacd2,0xacd3,0xacd4,0xacd6,
-0xacd8,0xacd9,0xacda,0xacdb,0xacdc,0xacdd,0xacde,0xacdf,
-0xace2,0xace3,0xace5,0xace6,0xace9,0xaceb,0xaced,0xacee,
-0xacf2,0xacf4,0xacf7,0xacf8,0xacf9,0xacfa,0xacfb,0xacfe,
-0xacff,0xad01,0xad02,0xad03,0xad05,0xad07,0xad08,0xad09,
-0xad0a,0xad0b,0xad0e,0xad10,0xad12,0xad13,0xad14,0xad15,
-0xad16,0xad17,0xad19,0xad1a,0xad1b,0xad1d,0xad1e,0xad1f,
-0xad21,0xad22,0xad23,0xad24,0xad25,0xad26,0xad27,0xad28,
-0xad2a,0xad2b,0xad2e,0xad2f,0xad30,0xad31,0xad32,0xad33,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xad36,0xad37,
-0xad39,0xad3a,0xad3b,0xad3d,0xad3e,0xad3f,0xad40,0xad41,
-0xad42,0xad43,0xad46,0xad48,0xad4a,0xad4b,0xad4c,0xad4d,
-0xad4e,0xad4f,0xad51,0xad52,0xad53,0xad55,0xad56,0xad57,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xad59,0xad5a,
-0xad5b,0xad5c,0xad5d,0xad5e,0xad5f,0xad60,0xad62,0xad64,
-0xad65,0xad66,0xad67,0xad68,0xad69,0xad6a,0xad6b,0xad6e,
-0xad6f,0xad71,0xad72,0xad77,0xad78,0xad79,0xad7a,0xad7e,
-0xad80,0xad83,0xad84,0xad85,0xad86,0xad87,0xad8a,0xad8b,
-0xad8d,0xad8e,0xad8f,0xad91,0xad92,0xad93,0xad94,0xad95,
-0xad96,0xad97,0xad98,0xad99,0xad9a,0xad9b,0xad9e,0xad9f,
-0xada0,0xada1,0xada2,0xada3,0xada5,0xada6,0xada7,0xada8,
-0xada9,0xadaa,0xadab,0xadac,0xadad,0xadae,0xadaf,0xadb0,
-0xadb1,0xadb2,0xadb3,0xadb4,0xadb5,0xadb6,0xadb8,0xadb9,
-0xadba,0xadbb,0xadbc,0xadbd,0xadbe,0xadbf,0xadc2,0xadc3,
-0xadc5,0xadc6,0xadc7,0xadc9,0xadca,0xadcb,0xadcc,0xadcd,
-0xadce,0xadcf,0xadd2,0xadd4,0xadd5,0xadd6,0xadd7,0xadd8,
-0xadd9,0xadda,0xaddb,0xaddd,0xadde,0xaddf,0xade1,0xade2,
-0xade3,0xade5,0xade6,0xade7,0xade8,0xade9,0xadea,0xadeb,
-0xadec,0xaded,0xadee,0xadef,0xadf0,0xadf1,0xadf2,0xadf3,
-0xadf4,0xadf5,0xadf6,0xadf7,0xadfa,0xadfb,0xadfd,0xadfe,
-0xae02,0xae03,0xae04,0xae05,0xae06,0xae07,0xae0a,0xae0c,
-0xae0e,0xae0f,0xae10,0xae11,0xae12,0xae13,0xae15,0xae16,
-0xae17,0xae18,0xae19,0xae1a,0xae1b,0xae1c,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xae1d,0xae1e,0xae1f,0xae20,
-0xae21,0xae22,0xae23,0xae24,0xae25,0xae26,0xae27,0xae28,
-0xae29,0xae2a,0xae2b,0xae2c,0xae2d,0xae2e,0xae2f,0xae32,
-0xae33,0xae35,0xae36,0xae39,0xae3b,0xae3c,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xae3d,0xae3e,0xae3f,0xae42,
-0xae44,0xae47,0xae48,0xae49,0xae4b,0xae4f,0xae51,0xae52,
-0xae53,0xae55,0xae57,0xae58,0xae59,0xae5a,0xae5b,0xae5e,
-0xae62,0xae63,0xae64,0xae66,0xae67,0xae6a,0xae6b,0xae6d,
-0xae6e,0xae6f,0xae71,0xae72,0xae73,0xae74,0xae75,0xae76,
-0xae77,0xae7a,0xae7e,0xae7f,0xae80,0xae81,0xae82,0xae83,
-0xae86,0xae87,0xae88,0xae89,0xae8a,0xae8b,0xae8d,0xae8e,
-0xae8f,0xae90,0xae91,0xae92,0xae93,0xae94,0xae95,0xae96,
-0xae97,0xae98,0xae99,0xae9a,0xae9b,0xae9c,0xae9d,0xae9e,
-0xae9f,0xaea0,0xaea1,0xaea2,0xaea3,0xaea4,0xaea5,0xaea6,
-0xaea7,0xaea8,0xaea9,0xaeaa,0xaeab,0xaeac,0xaead,0xaeae,
-0xaeaf,0xaeb0,0xaeb1,0xaeb2,0xaeb3,0xaeb4,0xaeb5,0xaeb6,
-0xaeb7,0xaeb8,0xaeb9,0xaeba,0xaebb,0xaebf,0xaec1,0xaec2,
-0xaec3,0xaec5,0xaec6,0xaec7,0xaec8,0xaec9,0xaeca,0xaecb,
-0xaece,0xaed2,0xaed3,0xaed4,0xaed5,0xaed6,0xaed7,0xaeda,
-0xaedb,0xaedd,0xaede,0xaedf,0xaee0,0xaee1,0xaee2,0xaee3,
-0xaee4,0xaee5,0xaee6,0xaee7,0xaee9,0xaeea,0xaeec,0xaeee,
-0xaeef,0xaef0,0xaef1,0xaef2,0xaef3,0xaef5,0xaef6,0xaef7,
-0xaef9,0xaefa,0xaefb,0xaefd,0xaefe,0xaeff,0xaf00,0xaf01,
-0xaf02,0xaf03,0xaf04,0xaf05,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xaf06,0xaf09,0xaf0a,0xaf0b,0xaf0c,0xaf0e,
-0xaf0f,0xaf11,0xaf12,0xaf13,0xaf14,0xaf15,0xaf16,0xaf17,
-0xaf18,0xaf19,0xaf1a,0xaf1b,0xaf1c,0xaf1d,0xaf1e,0xaf1f,
-0xaf20,0xaf21,0xaf22,0xaf23,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xaf24,0xaf25,0xaf26,0xaf27,0xaf28,0xaf29,
-0xaf2a,0xaf2b,0xaf2e,0xaf2f,0xaf31,0xaf33,0xaf35,0xaf36,
-0xaf37,0xaf38,0xaf39,0xaf3a,0xaf3b,0xaf3e,0xaf40,0xaf44,
-0xaf45,0xaf46,0xaf47,0xaf4a,0xaf4b,0xaf4c,0xaf4d,0xaf4e,
-0xaf4f,0xaf51,0xaf52,0xaf53,0xaf54,0xaf55,0xaf56,0xaf57,
-0xaf58,0xaf59,0xaf5a,0xaf5b,0xaf5e,0xaf5f,0xaf60,0xaf61,
-0xaf62,0xaf63,0xaf66,0xaf67,0xaf68,0xaf69,0xaf6a,0xaf6b,
-0xaf6c,0xaf6d,0xaf6e,0xaf6f,0xaf70,0xaf71,0xaf72,0xaf73,
-0xaf74,0xaf75,0xaf76,0xaf77,0xaf78,0xaf7a,0xaf7b,0xaf7c,
-0xaf7d,0xaf7e,0xaf7f,0xaf81,0xaf82,0xaf83,0xaf85,0xaf86,
-0xaf87,0xaf89,0xaf8a,0xaf8b,0xaf8c,0xaf8d,0xaf8e,0xaf8f,
-0xaf92,0xaf93,0xaf94,0xaf96,0xaf97,0xaf98,0xaf99,0xaf9a,
-0xaf9b,0xaf9d,0xaf9e,0xaf9f,0xafa0,0xafa1,0xafa2,0xafa3,
-0xafa4,0xafa5,0xafa6,0xafa7,0xafa8,0xafa9,0xafaa,0xafab,
-0xafac,0xafad,0xafae,0xafaf,0xafb0,0xafb1,0xafb2,0xafb3,
-0xafb4,0xafb5,0xafb6,0xafb7,0xafba,0xafbb,0xafbd,0xafbe,
-0xafbf,0xafc1,0xafc2,0xafc3,0xafc4,0xafc5,0xafc6,0xafca,
-0xafcc,0xafcf,0xafd0,0xafd1,0xafd2,0xafd3,0xafd5,0xafd6,
-0xafd7,0xafd8,0xafd9,0xafda,0xafdb,0xafdd,0xafde,0xafdf,
-0xafe0,0xafe1,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xafe2,0xafe3,0xafe4,0xafe5,0xafe6,0xafe7,0xafea,0xafeb,
-0xafec,0xafed,0xafee,0xafef,0xaff2,0xaff3,0xaff5,0xaff6,
-0xaff7,0xaff9,0xaffa,0xaffb,0xaffc,0xaffd,0xaffe,0xafff,
-0xb002,0xb003,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xb005,0xb006,0xb007,0xb008,0xb009,0xb00a,0xb00b,0xb00d,
-0xb00e,0xb00f,0xb011,0xb012,0xb013,0xb015,0xb016,0xb017,
-0xb018,0xb019,0xb01a,0xb01b,0xb01e,0xb01f,0xb020,0xb021,
-0xb022,0xb023,0xb024,0xb025,0xb026,0xb027,0xb029,0xb02a,
-0xb02b,0xb02c,0xb02d,0xb02e,0xb02f,0xb030,0xb031,0xb032,
-0xb033,0xb034,0xb035,0xb036,0xb037,0xb038,0xb039,0xb03a,
-0xb03b,0xb03c,0xb03d,0xb03e,0xb03f,0xb040,0xb041,0xb042,
-0xb043,0xb046,0xb047,0xb049,0xb04b,0xb04d,0xb04f,0xb050,
-0xb051,0xb052,0xb056,0xb058,0xb05a,0xb05b,0xb05c,0xb05e,
-0xb05f,0xb060,0xb061,0xb062,0xb063,0xb064,0xb065,0xb066,
-0xb067,0xb068,0xb069,0xb06a,0xb06b,0xb06c,0xb06d,0xb06e,
-0xb06f,0xb070,0xb071,0xb072,0xb073,0xb074,0xb075,0xb076,
-0xb077,0xb078,0xb079,0xb07a,0xb07b,0xb07e,0xb07f,0xb081,
-0xb082,0xb083,0xb085,0xb086,0xb087,0xb088,0xb089,0xb08a,
-0xb08b,0xb08e,0xb090,0xb092,0xb093,0xb094,0xb095,0xb096,
-0xb097,0xb09b,0xb09d,0xb09e,0xb0a3,0xb0a4,0xb0a5,0xb0a6,
-0xb0a7,0xb0aa,0xb0b0,0xb0b2,0xb0b6,0xb0b7,0xb0b9,0xb0ba,
-0xb0bb,0xb0bd,0xb0be,0xb0bf,0xb0c0,0xb0c1,0xb0c2,0xb0c3,
-0xb0c6,0xb0ca,0xb0cb,0xb0cc,0xb0cd,0xb0ce,0xb0cf,0xb0d2,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xb0d3,0xb0d5,
-0xb0d6,0xb0d7,0xb0d9,0xb0da,0xb0db,0xb0dc,0xb0dd,0xb0de,
-0xb0df,0xb0e1,0xb0e2,0xb0e3,0xb0e4,0xb0e6,0xb0e7,0xb0e8,
-0xb0e9,0xb0ea,0xb0eb,0xb0ec,0xb0ed,0xb0ee,0xb0ef,0xb0f0,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xb0f1,0xb0f2,
-0xb0f3,0xb0f4,0xb0f5,0xb0f6,0xb0f7,0xb0f8,0xb0f9,0xb0fa,
-0xb0fb,0xb0fc,0xb0fd,0xb0fe,0xb0ff,0xb100,0xb101,0xb102,
-0xb103,0xb104,0xb105,0xb106,0xb107,0xb10a,0xb10d,0xb10e,
-0xb10f,0xb111,0xb114,0xb115,0xb116,0xb117,0xb11a,0xb11e,
-0xb11f,0xb120,0xb121,0xb122,0xb126,0xb127,0xb129,0xb12a,
-0xb12b,0xb12d,0xb12e,0xb12f,0xb130,0xb131,0xb132,0xb133,
-0xb136,0xb13a,0xb13b,0xb13c,0xb13d,0xb13e,0xb13f,0xb142,
-0xb143,0xb145,0xb146,0xb147,0xb149,0xb14a,0xb14b,0xb14c,
-0xb14d,0xb14e,0xb14f,0xb152,0xb153,0xb156,0xb157,0xb159,
-0xb15a,0xb15b,0xb15d,0xb15e,0xb15f,0xb161,0xb162,0xb163,
-0xb164,0xb165,0xb166,0xb167,0xb168,0xb169,0xb16a,0xb16b,
-0xb16c,0xb16d,0xb16e,0xb16f,0xb170,0xb171,0xb172,0xb173,
-0xb174,0xb175,0xb176,0xb177,0xb17a,0xb17b,0xb17d,0xb17e,
-0xb17f,0xb181,0xb183,0xb184,0xb185,0xb186,0xb187,0xb18a,
-0xb18c,0xb18e,0xb18f,0xb190,0xb191,0xb195,0xb196,0xb197,
-0xb199,0xb19a,0xb19b,0xb19d,0xb19e,0xb19f,0xb1a0,0xb1a1,
-0xb1a2,0xb1a3,0xb1a4,0xb1a5,0xb1a6,0xb1a7,0xb1a9,0xb1aa,
-0xb1ab,0xb1ac,0xb1ad,0xb1ae,0xb1af,0xb1b0,0xb1b1,0xb1b2,
-0xb1b3,0xb1b4,0xb1b5,0xb1b6,0xb1b7,0xb1b8,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xb1b9,0xb1ba,0xb1bb,0xb1bc,
-0xb1bd,0xb1be,0xb1bf,0xb1c0,0xb1c1,0xb1c2,0xb1c3,0xb1c4,
-0xb1c5,0xb1c6,0xb1c7,0xb1c8,0xb1c9,0xb1ca,0xb1cb,0xb1cd,
-0xb1ce,0xb1cf,0xb1d1,0xb1d2,0xb1d3,0xb1d5,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xb1d6,0xb1d7,0xb1d8,0xb1d9,
-0xb1da,0xb1db,0xb1de,0xb1e0,0xb1e1,0xb1e2,0xb1e3,0xb1e4,
-0xb1e5,0xb1e6,0xb1e7,0xb1ea,0xb1eb,0xb1ed,0xb1ee,0xb1ef,
-0xb1f1,0xb1f2,0xb1f3,0xb1f4,0xb1f5,0xb1f6,0xb1f7,0xb1f8,
-0xb1fa,0xb1fc,0xb1fe,0xb1ff,0xb200,0xb201,0xb202,0xb203,
-0xb206,0xb207,0xb209,0xb20a,0xb20d,0xb20e,0xb20f,0xb210,
-0xb211,0xb212,0xb213,0xb216,0xb218,0xb21a,0xb21b,0xb21c,
-0xb21d,0xb21e,0xb21f,0xb221,0xb222,0xb223,0xb224,0xb225,
-0xb226,0xb227,0xb228,0xb229,0xb22a,0xb22b,0xb22c,0xb22d,
-0xb22e,0xb22f,0xb230,0xb231,0xb232,0xb233,0xb235,0xb236,
-0xb237,0xb238,0xb239,0xb23a,0xb23b,0xb23d,0xb23e,0xb23f,
-0xb240,0xb241,0xb242,0xb243,0xb244,0xb245,0xb246,0xb247,
-0xb248,0xb249,0xb24a,0xb24b,0xb24c,0xb24d,0xb24e,0xb24f,
-0xb250,0xb251,0xb252,0xb253,0xb254,0xb255,0xb256,0xb257,
-0xb259,0xb25a,0xb25b,0xb25d,0xb25e,0xb25f,0xb261,0xb262,
-0xb263,0xb264,0xb265,0xb266,0xb267,0xb26a,0xb26b,0xb26c,
-0xb26d,0xb26e,0xb26f,0xb270,0xb271,0xb272,0xb273,0xb276,
-0xb277,0xb278,0xb279,0xb27a,0xb27b,0xb27d,0xb27e,0xb27f,
-0xb280,0xb281,0xb282,0xb283,0xb286,0xb287,0xb288,0xb28a,
-0xb28b,0xb28c,0xb28d,0xb28e,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xb28f,0xb292,0xb293,0xb295,0xb296,0xb297,
-0xb29b,0xb29c,0xb29d,0xb29e,0xb29f,0xb2a2,0xb2a4,0xb2a7,
-0xb2a8,0xb2a9,0xb2ab,0xb2ad,0xb2ae,0xb2af,0xb2b1,0xb2b2,
-0xb2b3,0xb2b5,0xb2b6,0xb2b7,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xb2b8,0xb2b9,0xb2ba,0xb2bb,0xb2bc,0xb2bd,
-0xb2be,0xb2bf,0xb2c0,0xb2c1,0xb2c2,0xb2c3,0xb2c4,0xb2c5,
-0xb2c6,0xb2c7,0xb2ca,0xb2cb,0xb2cd,0xb2ce,0xb2cf,0xb2d1,
-0xb2d3,0xb2d4,0xb2d5,0xb2d6,0xb2d7,0xb2da,0xb2dc,0xb2de,
-0xb2df,0xb2e0,0xb2e1,0xb2e3,0xb2e7,0xb2e9,0xb2ea,0xb2f0,
-0xb2f1,0xb2f2,0xb2f6,0xb2fc,0xb2fd,0xb2fe,0xb302,0xb303,
-0xb305,0xb306,0xb307,0xb309,0xb30a,0xb30b,0xb30c,0xb30d,
-0xb30e,0xb30f,0xb312,0xb316,0xb317,0xb318,0xb319,0xb31a,
-0xb31b,0xb31d,0xb31e,0xb31f,0xb320,0xb321,0xb322,0xb323,
-0xb324,0xb325,0xb326,0xb327,0xb328,0xb329,0xb32a,0xb32b,
-0xb32c,0xb32d,0xb32e,0xb32f,0xb330,0xb331,0xb332,0xb333,
-0xb334,0xb335,0xb336,0xb337,0xb338,0xb339,0xb33a,0xb33b,
-0xb33c,0xb33d,0xb33e,0xb33f,0xb340,0xb341,0xb342,0xb343,
-0xb344,0xb345,0xb346,0xb347,0xb348,0xb349,0xb34a,0xb34b,
-0xb34c,0xb34d,0xb34e,0xb34f,0xb350,0xb351,0xb352,0xb353,
-0xb357,0xb359,0xb35a,0xb35d,0xb360,0xb361,0xb362,0xb363,
-0xb366,0xb368,0xb36a,0xb36c,0xb36d,0xb36f,0xb372,0xb373,
-0xb375,0xb376,0xb377,0xb379,0xb37a,0xb37b,0xb37c,0xb37d,
-0xb37e,0xb37f,0xb382,0xb386,0xb387,0xb388,0xb389,0xb38a,
-0xb38b,0xb38d,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xb38e,0xb38f,0xb391,0xb392,0xb393,0xb395,0xb396,0xb397,
-0xb398,0xb399,0xb39a,0xb39b,0xb39c,0xb39d,0xb39e,0xb39f,
-0xb3a2,0xb3a3,0xb3a4,0xb3a5,0xb3a6,0xb3a7,0xb3a9,0xb3aa,
-0xb3ab,0xb3ad,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xb3ae,0xb3af,0xb3b0,0xb3b1,0xb3b2,0xb3b3,0xb3b4,0xb3b5,
-0xb3b6,0xb3b7,0xb3b8,0xb3b9,0xb3ba,0xb3bb,0xb3bc,0xb3bd,
-0xb3be,0xb3bf,0xb3c0,0xb3c1,0xb3c2,0xb3c3,0xb3c6,0xb3c7,
-0xb3c9,0xb3ca,0xb3cd,0xb3cf,0xb3d1,0xb3d2,0xb3d3,0xb3d6,
-0xb3d8,0xb3da,0xb3dc,0xb3de,0xb3df,0xb3e1,0xb3e2,0xb3e3,
-0xb3e5,0xb3e6,0xb3e7,0xb3e9,0xb3ea,0xb3eb,0xb3ec,0xb3ed,
-0xb3ee,0xb3ef,0xb3f0,0xb3f1,0xb3f2,0xb3f3,0xb3f4,0xb3f5,
-0xb3f6,0xb3f7,0xb3f8,0xb3f9,0xb3fa,0xb3fb,0xb3fd,0xb3fe,
-0xb3ff,0xb400,0xb401,0xb402,0xb403,0xb404,0xb405,0xb406,
-0xb407,0xb408,0xb409,0xb40a,0xb40b,0xb40c,0xb40d,0xb40e,
-0xb40f,0xb411,0xb412,0xb413,0xb414,0xb415,0xb416,0xb417,
-0xb419,0xb41a,0xb41b,0xb41d,0xb41e,0xb41f,0xb421,0xb422,
-0xb423,0xb424,0xb425,0xb426,0xb427,0xb42a,0xb42c,0xb42d,
-0xb42e,0xb42f,0xb430,0xb431,0xb432,0xb433,0xb435,0xb436,
-0xb437,0xb438,0xb439,0xb43a,0xb43b,0xb43c,0xb43d,0xb43e,
-0xb43f,0xb440,0xb441,0xb442,0xb443,0xb444,0xb445,0xb446,
-0xb447,0xb448,0xb449,0xb44a,0xb44b,0xb44c,0xb44d,0xb44e,
-0xb44f,0xb452,0xb453,0xb455,0xb456,0xb457,0xb459,0xb45a,
-0xb45b,0xb45c,0xb45d,0xb45e,0xb45f,0xb462,0xb464,0xb466,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xb467,0xb468,
-0xb469,0xb46a,0xb46b,0xb46d,0xb46e,0xb46f,0xb470,0xb471,
-0xb472,0xb473,0xb474,0xb475,0xb476,0xb477,0xb478,0xb479,
-0xb47a,0xb47b,0xb47c,0xb47d,0xb47e,0xb47f,0xb481,0xb482,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xb483,0xb484,
-0xb485,0xb486,0xb487,0xb489,0xb48a,0xb48b,0xb48c,0xb48d,
-0xb48e,0xb48f,0xb490,0xb491,0xb492,0xb493,0xb494,0xb495,
-0xb496,0xb497,0xb498,0xb499,0xb49a,0xb49b,0xb49c,0xb49e,
-0xb49f,0xb4a0,0xb4a1,0xb4a2,0xb4a3,0xb4a5,0xb4a6,0xb4a7,
-0xb4a9,0xb4aa,0xb4ab,0xb4ad,0xb4ae,0xb4af,0xb4b0,0xb4b1,
-0xb4b2,0xb4b3,0xb4b4,0xb4b6,0xb4b8,0xb4ba,0xb4bb,0xb4bc,
-0xb4bd,0xb4be,0xb4bf,0xb4c1,0xb4c2,0xb4c3,0xb4c5,0xb4c6,
-0xb4c7,0xb4c9,0xb4ca,0xb4cb,0xb4cc,0xb4cd,0xb4ce,0xb4cf,
-0xb4d1,0xb4d2,0xb4d3,0xb4d4,0xb4d6,0xb4d7,0xb4d8,0xb4d9,
-0xb4da,0xb4db,0xb4de,0xb4df,0xb4e1,0xb4e2,0xb4e5,0xb4e7,
-0xb4e8,0xb4e9,0xb4ea,0xb4eb,0xb4ee,0xb4f0,0xb4f2,0xb4f3,
-0xb4f4,0xb4f5,0xb4f6,0xb4f7,0xb4f9,0xb4fa,0xb4fb,0xb4fc,
-0xb4fd,0xb4fe,0xb4ff,0xb500,0xb501,0xb502,0xb503,0xb504,
-0xb505,0xb506,0xb507,0xb508,0xb509,0xb50a,0xb50b,0xb50c,
-0xb50d,0xb50e,0xb50f,0xb510,0xb511,0xb512,0xb513,0xb516,
-0xb517,0xb519,0xb51a,0xb51d,0xb51e,0xb51f,0xb520,0xb521,
-0xb522,0xb523,0xb526,0xb52b,0xb52c,0xb52d,0xb52e,0xb52f,
-0xb532,0xb533,0xb535,0xb536,0xb537,0xb539,0xb53a,0xb53b,
-0xb53c,0xb53d,0xb53e,0xb53f,0xb542,0xb546,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xb547,0xb548,0xb549,0xb54a,
-0xb54e,0xb54f,0xb551,0xb552,0xb553,0xb555,0xb556,0xb557,
-0xb558,0xb559,0xb55a,0xb55b,0xb55e,0xb562,0xb563,0xb564,
-0xb565,0xb566,0xb567,0xb568,0xb569,0xb56a,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xb56b,0xb56c,0xb56d,0xb56e,
-0xb56f,0xb570,0xb571,0xb572,0xb573,0xb574,0xb575,0xb576,
-0xb577,0xb578,0xb579,0xb57a,0xb57b,0xb57c,0xb57d,0xb57e,
-0xb57f,0xb580,0xb581,0xb582,0xb583,0xb584,0xb585,0xb586,
-0xb587,0xb588,0xb589,0xb58a,0xb58b,0xb58c,0xb58d,0xb58e,
-0xb58f,0xb590,0xb591,0xb592,0xb593,0xb594,0xb595,0xb596,
-0xb597,0xb598,0xb599,0xb59a,0xb59b,0xb59c,0xb59d,0xb59e,
-0xb59f,0xb5a2,0xb5a3,0xb5a5,0xb5a6,0xb5a7,0xb5a9,0xb5ac,
-0xb5ad,0xb5ae,0xb5af,0xb5b2,0xb5b6,0xb5b7,0xb5b8,0xb5b9,
-0xb5ba,0xb5be,0xb5bf,0xb5c1,0xb5c2,0xb5c3,0xb5c5,0xb5c6,
-0xb5c7,0xb5c8,0xb5c9,0xb5ca,0xb5cb,0xb5ce,0xb5d2,0xb5d3,
-0xb5d4,0xb5d5,0xb5d6,0xb5d7,0xb5d9,0xb5da,0xb5db,0xb5dc,
-0xb5dd,0xb5de,0xb5df,0xb5e0,0xb5e1,0xb5e2,0xb5e3,0xb5e4,
-0xb5e5,0xb5e6,0xb5e7,0xb5e8,0xb5e9,0xb5ea,0xb5eb,0xb5ed,
-0xb5ee,0xb5ef,0xb5f0,0xb5f1,0xb5f2,0xb5f3,0xb5f4,0xb5f5,
-0xb5f6,0xb5f7,0xb5f8,0xb5f9,0xb5fa,0xb5fb,0xb5fc,0xb5fd,
-0xb5fe,0xb5ff,0xb600,0xb601,0xb602,0xb603,0xb604,0xb605,
-0xb606,0xb607,0xb608,0xb609,0xb60a,0xb60b,0xb60c,0xb60d,
-0xb60e,0xb60f,0xb612,0xb613,0xb615,0xb616,0xb617,0xb619,
-0xb61a,0xb61b,0xb61c,0xb61d,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xb61e,0xb61f,0xb620,0xb621,0xb622,0xb623,
-0xb624,0xb626,0xb627,0xb628,0xb629,0xb62a,0xb62b,0xb62d,
-0xb62e,0xb62f,0xb630,0xb631,0xb632,0xb633,0xb635,0xb636,
-0xb637,0xb638,0xb639,0xb63a,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xb63b,0xb63c,0xb63d,0xb63e,0xb63f,0xb640,
-0xb641,0xb642,0xb643,0xb644,0xb645,0xb646,0xb647,0xb649,
-0xb64a,0xb64b,0xb64c,0xb64d,0xb64e,0xb64f,0xb650,0xb651,
-0xb652,0xb653,0xb654,0xb655,0xb656,0xb657,0xb658,0xb659,
-0xb65a,0xb65b,0xb65c,0xb65d,0xb65e,0xb65f,0xb660,0xb661,
-0xb662,0xb663,0xb665,0xb666,0xb667,0xb669,0xb66a,0xb66b,
-0xb66c,0xb66d,0xb66e,0xb66f,0xb670,0xb671,0xb672,0xb673,
-0xb674,0xb675,0xb676,0xb677,0xb678,0xb679,0xb67a,0xb67b,
-0xb67c,0xb67d,0xb67e,0xb67f,0xb680,0xb681,0xb682,0xb683,
-0xb684,0xb685,0xb686,0xb687,0xb688,0xb689,0xb68a,0xb68b,
-0xb68c,0xb68d,0xb68e,0xb68f,0xb690,0xb691,0xb692,0xb693,
-0xb694,0xb695,0xb696,0xb697,0xb698,0xb699,0xb69a,0xb69b,
-0xb69e,0xb69f,0xb6a1,0xb6a2,0xb6a3,0xb6a5,0xb6a6,0xb6a7,
-0xb6a8,0xb6a9,0xb6aa,0xb6ad,0xb6ae,0xb6af,0xb6b0,0xb6b2,
-0xb6b3,0xb6b4,0xb6b5,0xb6b6,0xb6b7,0xb6b8,0xb6b9,0xb6ba,
-0xb6bb,0xb6bc,0xb6bd,0xb6be,0xb6bf,0xb6c0,0xb6c1,0xb6c2,
-0xb6c3,0xb6c4,0xb6c5,0xb6c6,0xb6c7,0xb6c8,0xb6c9,0xb6ca,
-0xb6cb,0xb6cc,0xb6cd,0xb6ce,0xb6cf,0xb6d0,0xb6d1,0xb6d2,
-0xb6d3,0xb6d5,0xb6d6,0xb6d7,0xb6d8,0xb6d9,0xb6da,0xb6db,
-0xb6dc,0xb6dd,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xb6de,0xb6df,0xb6e0,0xb6e1,0xb6e2,0xb6e3,0xb6e4,0xb6e5,
-0xb6e6,0xb6e7,0xb6e8,0xb6e9,0xb6ea,0xb6eb,0xb6ec,0xb6ed,
-0xb6ee,0xb6ef,0xb6f1,0xb6f2,0xb6f3,0xb6f5,0xb6f6,0xb6f7,
-0xb6f9,0xb6fa,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xb6fb,0xb6fc,0xb6fd,0xb6fe,0xb6ff,0xb702,0xb703,0xb704,
-0xb706,0xb707,0xb708,0xb709,0xb70a,0xb70b,0xb70c,0xb70d,
-0xb70e,0xb70f,0xb710,0xb711,0xb712,0xb713,0xb714,0xb715,
-0xb716,0xb717,0xb718,0xb719,0xb71a,0xb71b,0xb71c,0xb71d,
-0xb71e,0xb71f,0xb720,0xb721,0xb722,0xb723,0xb724,0xb725,
-0xb726,0xb727,0xb72a,0xb72b,0xb72d,0xb72e,0xb731,0xb732,
-0xb733,0xb734,0xb735,0xb736,0xb737,0xb73a,0xb73c,0xb73d,
-0xb73e,0xb73f,0xb740,0xb741,0xb742,0xb743,0xb745,0xb746,
-0xb747,0xb749,0xb74a,0xb74b,0xb74d,0xb74e,0xb74f,0xb750,
-0xb751,0xb752,0xb753,0xb756,0xb757,0xb758,0xb759,0xb75a,
-0xb75b,0xb75c,0xb75d,0xb75e,0xb75f,0xb761,0xb762,0xb763,
-0xb765,0xb766,0xb767,0xb769,0xb76a,0xb76b,0xb76c,0xb76d,
-0xb76e,0xb76f,0xb772,0xb774,0xb776,0xb777,0xb778,0xb779,
-0xb77a,0xb77b,0xb77e,0xb77f,0xb781,0xb782,0xb783,0xb785,
-0xb786,0xb787,0xb788,0xb789,0xb78a,0xb78b,0xb78e,0xb793,
-0xb794,0xb795,0xb79a,0xb79b,0xb79d,0xb79e,0xb79f,0xb7a1,
-0xb7a2,0xb7a3,0xb7a4,0xb7a5,0xb7a6,0xb7a7,0xb7aa,0xb7ae,
-0xb7af,0xb7b0,0xb7b1,0xb7b2,0xb7b3,0xb7b6,0xb7b7,0xb7b9,
-0xb7ba,0xb7bb,0xb7bc,0xb7bd,0xb7be,0xb7bf,0xb7c0,0xb7c1,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xb7c2,0xb7c3,
-0xb7c4,0xb7c5,0xb7c6,0xb7c8,0xb7ca,0xb7cb,0xb7cc,0xb7cd,
-0xb7ce,0xb7cf,0xb7d0,0xb7d1,0xb7d2,0xb7d3,0xb7d4,0xb7d5,
-0xb7d6,0xb7d7,0xb7d8,0xb7d9,0xb7da,0xb7db,0xb7dc,0xb7dd,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xb7de,0xb7df,
-0xb7e0,0xb7e1,0xb7e2,0xb7e3,0xb7e4,0xb7e5,0xb7e6,0xb7e7,
-0xb7e8,0xb7e9,0xb7ea,0xb7eb,0xb7ee,0xb7ef,0xb7f1,0xb7f2,
-0xb7f3,0xb7f5,0xb7f6,0xb7f7,0xb7f8,0xb7f9,0xb7fa,0xb7fb,
-0xb7fe,0xb802,0xb803,0xb804,0xb805,0xb806,0xb80a,0xb80b,
-0xb80d,0xb80e,0xb80f,0xb811,0xb812,0xb813,0xb814,0xb815,
-0xb816,0xb817,0xb81a,0xb81c,0xb81e,0xb81f,0xb820,0xb821,
-0xb822,0xb823,0xb826,0xb827,0xb829,0xb82a,0xb82b,0xb82d,
-0xb82e,0xb82f,0xb830,0xb831,0xb832,0xb833,0xb836,0xb83a,
-0xb83b,0xb83c,0xb83d,0xb83e,0xb83f,0xb841,0xb842,0xb843,
-0xb845,0xb846,0xb847,0xb848,0xb849,0xb84a,0xb84b,0xb84c,
-0xb84d,0xb84e,0xb84f,0xb850,0xb852,0xb854,0xb855,0xb856,
-0xb857,0xb858,0xb859,0xb85a,0xb85b,0xb85e,0xb85f,0xb861,
-0xb862,0xb863,0xb865,0xb866,0xb867,0xb868,0xb869,0xb86a,
-0xb86b,0xb86e,0xb870,0xb872,0xb873,0xb874,0xb875,0xb876,
-0xb877,0xb879,0xb87a,0xb87b,0xb87d,0xb87e,0xb87f,0xb880,
-0xb881,0xb882,0xb883,0xb884,0xb885,0xb886,0xb887,0xb888,
-0xb889,0xb88a,0xb88b,0xb88c,0xb88e,0xb88f,0xb890,0xb891,
-0xb892,0xb893,0xb894,0xb895,0xb896,0xb897,0xb898,0xb899,
-0xb89a,0xb89b,0xb89c,0xb89d,0xb89e,0xb89f,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xb8a0,0xb8a1,0xb8a2,0xb8a3,
-0xb8a4,0xb8a5,0xb8a6,0xb8a7,0xb8a9,0xb8aa,0xb8ab,0xb8ac,
-0xb8ad,0xb8ae,0xb8af,0xb8b1,0xb8b2,0xb8b3,0xb8b5,0xb8b6,
-0xb8b7,0xb8b9,0xb8ba,0xb8bb,0xb8bc,0xb8bd,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xb8be,0xb8bf,0xb8c2,0xb8c4,
-0xb8c6,0xb8c7,0xb8c8,0xb8c9,0xb8ca,0xb8cb,0xb8cd,0xb8ce,
-0xb8cf,0xb8d1,0xb8d2,0xb8d3,0xb8d5,0xb8d6,0xb8d7,0xb8d8,
-0xb8d9,0xb8da,0xb8db,0xb8dc,0xb8de,0xb8e0,0xb8e2,0xb8e3,
-0xb8e4,0xb8e5,0xb8e6,0xb8e7,0xb8ea,0xb8eb,0xb8ed,0xb8ee,
-0xb8ef,0xb8f1,0xb8f2,0xb8f3,0xb8f4,0xb8f5,0xb8f6,0xb8f7,
-0xb8fa,0xb8fc,0xb8fe,0xb8ff,0xb900,0xb901,0xb902,0xb903,
-0xb905,0xb906,0xb907,0xb908,0xb909,0xb90a,0xb90b,0xb90c,
-0xb90d,0xb90e,0xb90f,0xb910,0xb911,0xb912,0xb913,0xb914,
-0xb915,0xb916,0xb917,0xb919,0xb91a,0xb91b,0xb91c,0xb91d,
-0xb91e,0xb91f,0xb921,0xb922,0xb923,0xb924,0xb925,0xb926,
-0xb927,0xb928,0xb929,0xb92a,0xb92b,0xb92c,0xb92d,0xb92e,
-0xb92f,0xb930,0xb931,0xb932,0xb933,0xb934,0xb935,0xb936,
-0xb937,0xb938,0xb939,0xb93a,0xb93b,0xb93e,0xb93f,0xb941,
-0xb942,0xb943,0xb945,0xb946,0xb947,0xb948,0xb949,0xb94a,
-0xb94b,0xb94d,0xb94e,0xb950,0xb952,0xb953,0xb954,0xb955,
-0xb956,0xb957,0xb95a,0xb95b,0xb95d,0xb95e,0xb95f,0xb961,
-0xb962,0xb963,0xb964,0xb965,0xb966,0xb967,0xb96a,0xb96c,
-0xb96e,0xb96f,0xb970,0xb971,0xb972,0xb973,0xb976,0xb977,
-0xb979,0xb97a,0xb97b,0xb97d,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xb97e,0xb97f,0xb980,0xb981,0xb982,0xb983,
-0xb986,0xb988,0xb98b,0xb98c,0xb98f,0xb990,0xb991,0xb992,
-0xb993,0xb994,0xb995,0xb996,0xb997,0xb998,0xb999,0xb99a,
-0xb99b,0xb99c,0xb99d,0xb99e,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xb99f,0xb9a0,0xb9a1,0xb9a2,0xb9a3,0xb9a4,
-0xb9a5,0xb9a6,0xb9a7,0xb9a8,0xb9a9,0xb9aa,0xb9ab,0xb9ae,
-0xb9af,0xb9b1,0xb9b2,0xb9b3,0xb9b5,0xb9b6,0xb9b7,0xb9b8,
-0xb9b9,0xb9ba,0xb9bb,0xb9be,0xb9c0,0xb9c2,0xb9c3,0xb9c4,
-0xb9c5,0xb9c6,0xb9c7,0xb9ca,0xb9cb,0xb9cd,0xb9d3,0xb9d4,
-0xb9d5,0xb9d6,0xb9d7,0xb9da,0xb9dc,0xb9df,0xb9e0,0xb9e2,
-0xb9e6,0xb9e7,0xb9e9,0xb9ea,0xb9eb,0xb9ed,0xb9ee,0xb9ef,
-0xb9f0,0xb9f1,0xb9f2,0xb9f3,0xb9f6,0xb9fb,0xb9fc,0xb9fd,
-0xb9fe,0xb9ff,0xba02,0xba03,0xba04,0xba05,0xba06,0xba07,
-0xba09,0xba0a,0xba0b,0xba0c,0xba0d,0xba0e,0xba0f,0xba10,
-0xba11,0xba12,0xba13,0xba14,0xba16,0xba17,0xba18,0xba19,
-0xba1a,0xba1b,0xba1c,0xba1d,0xba1e,0xba1f,0xba20,0xba21,
-0xba22,0xba23,0xba24,0xba25,0xba26,0xba27,0xba28,0xba29,
-0xba2a,0xba2b,0xba2c,0xba2d,0xba2e,0xba2f,0xba30,0xba31,
-0xba32,0xba33,0xba34,0xba35,0xba36,0xba37,0xba3a,0xba3b,
-0xba3d,0xba3e,0xba3f,0xba41,0xba43,0xba44,0xba45,0xba46,
-0xba47,0xba4a,0xba4c,0xba4f,0xba50,0xba51,0xba52,0xba56,
-0xba57,0xba59,0xba5a,0xba5b,0xba5d,0xba5e,0xba5f,0xba60,
-0xba61,0xba62,0xba63,0xba66,0xba6a,0xba6b,0xba6c,0xba6d,
-0xba6e,0xba6f,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xba72,0xba73,0xba75,0xba76,0xba77,0xba79,0xba7a,0xba7b,
-0xba7c,0xba7d,0xba7e,0xba7f,0xba80,0xba81,0xba82,0xba86,
-0xba88,0xba89,0xba8a,0xba8b,0xba8d,0xba8e,0xba8f,0xba90,
-0xba91,0xba92,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xba93,0xba94,0xba95,0xba96,0xba97,0xba98,0xba99,0xba9a,
-0xba9b,0xba9c,0xba9d,0xba9e,0xba9f,0xbaa0,0xbaa1,0xbaa2,
-0xbaa3,0xbaa4,0xbaa5,0xbaa6,0xbaa7,0xbaaa,0xbaad,0xbaae,
-0xbaaf,0xbab1,0xbab3,0xbab4,0xbab5,0xbab6,0xbab7,0xbaba,
-0xbabc,0xbabe,0xbabf,0xbac0,0xbac1,0xbac2,0xbac3,0xbac5,
-0xbac6,0xbac7,0xbac9,0xbaca,0xbacb,0xbacc,0xbacd,0xbace,
-0xbacf,0xbad0,0xbad1,0xbad2,0xbad3,0xbad4,0xbad5,0xbad6,
-0xbad7,0xbada,0xbadb,0xbadc,0xbadd,0xbade,0xbadf,0xbae0,
-0xbae1,0xbae2,0xbae3,0xbae4,0xbae5,0xbae6,0xbae7,0xbae8,
-0xbae9,0xbaea,0xbaeb,0xbaec,0xbaed,0xbaee,0xbaef,0xbaf0,
-0xbaf1,0xbaf2,0xbaf3,0xbaf4,0xbaf5,0xbaf6,0xbaf7,0xbaf8,
-0xbaf9,0xbafa,0xbafb,0xbafd,0xbafe,0xbaff,0xbb01,0xbb02,
-0xbb03,0xbb05,0xbb06,0xbb07,0xbb08,0xbb09,0xbb0a,0xbb0b,
-0xbb0c,0xbb0e,0xbb10,0xbb12,0xbb13,0xbb14,0xbb15,0xbb16,
-0xbb17,0xbb19,0xbb1a,0xbb1b,0xbb1d,0xbb1e,0xbb1f,0xbb21,
-0xbb22,0xbb23,0xbb24,0xbb25,0xbb26,0xbb27,0xbb28,0xbb2a,
-0xbb2c,0xbb2d,0xbb2e,0xbb2f,0xbb30,0xbb31,0xbb32,0xbb33,
-0xbb37,0xbb39,0xbb3a,0xbb3f,0xbb40,0xbb41,0xbb42,0xbb43,
-0xbb46,0xbb48,0xbb4a,0xbb4b,0xbb4c,0xbb4e,0xbb51,0xbb52,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xbb53,0xbb55,
-0xbb56,0xbb57,0xbb59,0xbb5a,0xbb5b,0xbb5c,0xbb5d,0xbb5e,
-0xbb5f,0xbb60,0xbb62,0xbb64,0xbb65,0xbb66,0xbb67,0xbb68,
-0xbb69,0xbb6a,0xbb6b,0xbb6d,0xbb6e,0xbb6f,0xbb70,0xbb71,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xbb72,0xbb73,
-0xbb74,0xbb75,0xbb76,0xbb77,0xbb78,0xbb79,0xbb7a,0xbb7b,
-0xbb7c,0xbb7d,0xbb7e,0xbb7f,0xbb80,0xbb81,0xbb82,0xbb83,
-0xbb84,0xbb85,0xbb86,0xbb87,0xbb89,0xbb8a,0xbb8b,0xbb8d,
-0xbb8e,0xbb8f,0xbb91,0xbb92,0xbb93,0xbb94,0xbb95,0xbb96,
-0xbb97,0xbb98,0xbb99,0xbb9a,0xbb9b,0xbb9c,0xbb9d,0xbb9e,
-0xbb9f,0xbba0,0xbba1,0xbba2,0xbba3,0xbba5,0xbba6,0xbba7,
-0xbba9,0xbbaa,0xbbab,0xbbad,0xbbae,0xbbaf,0xbbb0,0xbbb1,
-0xbbb2,0xbbb3,0xbbb5,0xbbb6,0xbbb8,0xbbb9,0xbbba,0xbbbb,
-0xbbbc,0xbbbd,0xbbbe,0xbbbf,0xbbc1,0xbbc2,0xbbc3,0xbbc5,
-0xbbc6,0xbbc7,0xbbc9,0xbbca,0xbbcb,0xbbcc,0xbbcd,0xbbce,
-0xbbcf,0xbbd1,0xbbd2,0xbbd4,0xbbd5,0xbbd6,0xbbd7,0xbbd8,
-0xbbd9,0xbbda,0xbbdb,0xbbdc,0xbbdd,0xbbde,0xbbdf,0xbbe0,
-0xbbe1,0xbbe2,0xbbe3,0xbbe4,0xbbe5,0xbbe6,0xbbe7,0xbbe8,
-0xbbe9,0xbbea,0xbbeb,0xbbec,0xbbed,0xbbee,0xbbef,0xbbf0,
-0xbbf1,0xbbf2,0xbbf3,0xbbf4,0xbbf5,0xbbf6,0xbbf7,0xbbfa,
-0xbbfb,0xbbfd,0xbbfe,0xbc01,0xbc03,0xbc04,0xbc05,0xbc06,
-0xbc07,0xbc0a,0xbc0e,0xbc10,0xbc12,0xbc13,0xbc19,0xbc1a,
-0xbc20,0xbc21,0xbc22,0xbc23,0xbc26,0xbc28,0xbc2a,0xbc2b,
-0xbc2c,0xbc2e,0xbc2f,0xbc32,0xbc33,0xbc35,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xbc36,0xbc37,0xbc39,0xbc3a,
-0xbc3b,0xbc3c,0xbc3d,0xbc3e,0xbc3f,0xbc42,0xbc46,0xbc47,
-0xbc48,0xbc4a,0xbc4b,0xbc4e,0xbc4f,0xbc51,0xbc52,0xbc53,
-0xbc54,0xbc55,0xbc56,0xbc57,0xbc58,0xbc59,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xbc5a,0xbc5b,0xbc5c,0xbc5e,
-0xbc5f,0xbc60,0xbc61,0xbc62,0xbc63,0xbc64,0xbc65,0xbc66,
-0xbc67,0xbc68,0xbc69,0xbc6a,0xbc6b,0xbc6c,0xbc6d,0xbc6e,
-0xbc6f,0xbc70,0xbc71,0xbc72,0xbc73,0xbc74,0xbc75,0xbc76,
-0xbc77,0xbc78,0xbc79,0xbc7a,0xbc7b,0xbc7c,0xbc7d,0xbc7e,
-0xbc7f,0xbc80,0xbc81,0xbc82,0xbc83,0xbc86,0xbc87,0xbc89,
-0xbc8a,0xbc8d,0xbc8f,0xbc90,0xbc91,0xbc92,0xbc93,0xbc96,
-0xbc98,0xbc9b,0xbc9c,0xbc9d,0xbc9e,0xbc9f,0xbca2,0xbca3,
-0xbca5,0xbca6,0xbca9,0xbcaa,0xbcab,0xbcac,0xbcad,0xbcae,
-0xbcaf,0xbcb2,0xbcb6,0xbcb7,0xbcb8,0xbcb9,0xbcba,0xbcbb,
-0xbcbe,0xbcbf,0xbcc1,0xbcc2,0xbcc3,0xbcc5,0xbcc6,0xbcc7,
-0xbcc8,0xbcc9,0xbcca,0xbccb,0xbccc,0xbcce,0xbcd2,0xbcd3,
-0xbcd4,0xbcd6,0xbcd7,0xbcd9,0xbcda,0xbcdb,0xbcdd,0xbcde,
-0xbcdf,0xbce0,0xbce1,0xbce2,0xbce3,0xbce4,0xbce5,0xbce6,
-0xbce7,0xbce8,0xbce9,0xbcea,0xbceb,0xbcec,0xbced,0xbcee,
-0xbcef,0xbcf0,0xbcf1,0xbcf2,0xbcf3,0xbcf7,0xbcf9,0xbcfa,
-0xbcfb,0xbcfd,0xbcfe,0xbcff,0xbd00,0xbd01,0xbd02,0xbd03,
-0xbd06,0xbd08,0xbd0a,0xbd0b,0xbd0c,0xbd0d,0xbd0e,0xbd0f,
-0xbd11,0xbd12,0xbd13,0xbd15,0xbd16,0xbd17,0xbd18,0xbd19,
-0xbd1a,0xbd1b,0xbd1c,0xbd1d,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xbd1e,0xbd1f,0xbd20,0xbd21,0xbd22,0xbd23,
-0xbd25,0xbd26,0xbd27,0xbd28,0xbd29,0xbd2a,0xbd2b,0xbd2d,
-0xbd2e,0xbd2f,0xbd30,0xbd31,0xbd32,0xbd33,0xbd34,0xbd35,
-0xbd36,0xbd37,0xbd38,0xbd39,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xbd3a,0xbd3b,0xbd3c,0xbd3d,0xbd3e,0xbd3f,
-0xbd41,0xbd42,0xbd43,0xbd44,0xbd45,0xbd46,0xbd47,0xbd4a,
-0xbd4b,0xbd4d,0xbd4e,0xbd4f,0xbd51,0xbd52,0xbd53,0xbd54,
-0xbd55,0xbd56,0xbd57,0xbd5a,0xbd5b,0xbd5c,0xbd5d,0xbd5e,
-0xbd5f,0xbd60,0xbd61,0xbd62,0xbd63,0xbd65,0xbd66,0xbd67,
-0xbd69,0xbd6a,0xbd6b,0xbd6c,0xbd6d,0xbd6e,0xbd6f,0xbd70,
-0xbd71,0xbd72,0xbd73,0xbd74,0xbd75,0xbd76,0xbd77,0xbd78,
-0xbd79,0xbd7a,0xbd7b,0xbd7c,0xbd7d,0xbd7e,0xbd7f,0xbd82,
-0xbd83,0xbd85,0xbd86,0xbd8b,0xbd8c,0xbd8d,0xbd8e,0xbd8f,
-0xbd92,0xbd94,0xbd96,0xbd97,0xbd98,0xbd9b,0xbd9d,0xbd9e,
-0xbd9f,0xbda0,0xbda1,0xbda2,0xbda3,0xbda5,0xbda6,0xbda7,
-0xbda8,0xbda9,0xbdaa,0xbdab,0xbdac,0xbdad,0xbdae,0xbdaf,
-0xbdb1,0xbdb2,0xbdb3,0xbdb4,0xbdb5,0xbdb6,0xbdb7,0xbdb9,
-0xbdba,0xbdbb,0xbdbc,0xbdbd,0xbdbe,0xbdbf,0xbdc0,0xbdc1,
-0xbdc2,0xbdc3,0xbdc4,0xbdc5,0xbdc6,0xbdc7,0xbdc8,0xbdc9,
-0xbdca,0xbdcb,0xbdcc,0xbdcd,0xbdce,0xbdcf,0xbdd0,0xbdd1,
-0xbdd2,0xbdd3,0xbdd6,0xbdd7,0xbdd9,0xbdda,0xbddb,0xbddd,
-0xbdde,0xbddf,0xbde0,0xbde1,0xbde2,0xbde3,0xbde4,0xbde5,
-0xbde6,0xbde7,0xbde8,0xbdea,0xbdeb,0xbdec,0xbded,0xbdee,
-0xbdef,0xbdf1,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xbdf2,0xbdf3,0xbdf5,0xbdf6,0xbdf7,0xbdf9,0xbdfa,0xbdfb,
-0xbdfc,0xbdfd,0xbdfe,0xbdff,0xbe01,0xbe02,0xbe04,0xbe06,
-0xbe07,0xbe08,0xbe09,0xbe0a,0xbe0b,0xbe0e,0xbe0f,0xbe11,
-0xbe12,0xbe13,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xbe15,0xbe16,0xbe17,0xbe18,0xbe19,0xbe1a,0xbe1b,0xbe1e,
-0xbe20,0xbe21,0xbe22,0xbe23,0xbe24,0xbe25,0xbe26,0xbe27,
-0xbe28,0xbe29,0xbe2a,0xbe2b,0xbe2c,0xbe2d,0xbe2e,0xbe2f,
-0xbe30,0xbe31,0xbe32,0xbe33,0xbe34,0xbe35,0xbe36,0xbe37,
-0xbe38,0xbe39,0xbe3a,0xbe3b,0xbe3c,0xbe3d,0xbe3e,0xbe3f,
-0xbe40,0xbe41,0xbe42,0xbe43,0xbe46,0xbe47,0xbe49,0xbe4a,
-0xbe4b,0xbe4d,0xbe4f,0xbe50,0xbe51,0xbe52,0xbe53,0xbe56,
-0xbe58,0xbe5c,0xbe5d,0xbe5e,0xbe5f,0xbe62,0xbe63,0xbe65,
-0xbe66,0xbe67,0xbe69,0xbe6b,0xbe6c,0xbe6d,0xbe6e,0xbe6f,
-0xbe72,0xbe76,0xbe77,0xbe78,0xbe79,0xbe7a,0xbe7e,0xbe7f,
-0xbe81,0xbe82,0xbe83,0xbe85,0xbe86,0xbe87,0xbe88,0xbe89,
-0xbe8a,0xbe8b,0xbe8e,0xbe92,0xbe93,0xbe94,0xbe95,0xbe96,
-0xbe97,0xbe9a,0xbe9b,0xbe9c,0xbe9d,0xbe9e,0xbe9f,0xbea0,
-0xbea1,0xbea2,0xbea3,0xbea4,0xbea5,0xbea6,0xbea7,0xbea9,
-0xbeaa,0xbeab,0xbeac,0xbead,0xbeae,0xbeaf,0xbeb0,0xbeb1,
-0xbeb2,0xbeb3,0xbeb4,0xbeb5,0xbeb6,0xbeb7,0xbeb8,0xbeb9,
-0xbeba,0xbebb,0xbebc,0xbebd,0xbebe,0xbebf,0xbec0,0xbec1,
-0xbec2,0xbec3,0xbec4,0xbec5,0xbec6,0xbec7,0xbec8,0xbec9,
-0xbeca,0xbecb,0xbecc,0xbecd,0xbece,0xbecf,0xbed2,0xbed3,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xbed5,0xbed6,
-0xbed9,0xbeda,0xbedb,0xbedc,0xbedd,0xbede,0xbedf,0xbee1,
-0xbee2,0xbee6,0xbee7,0xbee8,0xbee9,0xbeea,0xbeeb,0xbeed,
-0xbeee,0xbeef,0xbef0,0xbef1,0xbef2,0xbef3,0xbef4,0xbef5,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xbef6,0xbef7,
-0xbef8,0xbef9,0xbefa,0xbefb,0xbefc,0xbefd,0xbefe,0xbeff,
-0xbf00,0xbf02,0xbf03,0xbf04,0xbf05,0xbf06,0xbf07,0xbf0a,
-0xbf0b,0xbf0c,0xbf0d,0xbf0e,0xbf0f,0xbf10,0xbf11,0xbf12,
-0xbf13,0xbf14,0xbf15,0xbf16,0xbf17,0xbf1a,0xbf1e,0xbf1f,
-0xbf20,0xbf21,0xbf22,0xbf23,0xbf24,0xbf25,0xbf26,0xbf27,
-0xbf28,0xbf29,0xbf2a,0xbf2b,0xbf2c,0xbf2d,0xbf2e,0xbf2f,
-0xbf30,0xbf31,0xbf32,0xbf33,0xbf34,0xbf35,0xbf36,0xbf37,
-0xbf38,0xbf39,0xbf3a,0xbf3b,0xbf3c,0xbf3d,0xbf3e,0xbf3f,
-0xbf42,0xbf43,0xbf45,0xbf46,0xbf47,0xbf49,0xbf4a,0xbf4b,
-0xbf4c,0xbf4d,0xbf4e,0xbf4f,0xbf52,0xbf53,0xbf54,0xbf56,
-0xbf57,0xbf58,0xbf59,0xbf5a,0xbf5b,0xbf5c,0xbf5d,0xbf5e,
-0xbf5f,0xbf60,0xbf61,0xbf62,0xbf63,0xbf64,0xbf65,0xbf66,
-0xbf67,0xbf68,0xbf69,0xbf6a,0xbf6b,0xbf6c,0xbf6d,0xbf6e,
-0xbf6f,0xbf70,0xbf71,0xbf72,0xbf73,0xbf74,0xbf75,0xbf76,
-0xbf77,0xbf78,0xbf79,0xbf7a,0xbf7b,0xbf7c,0xbf7d,0xbf7e,
-0xbf7f,0xbf80,0xbf81,0xbf82,0xbf83,0xbf84,0xbf85,0xbf86,
-0xbf87,0xbf88,0xbf89,0xbf8a,0xbf8b,0xbf8c,0xbf8d,0xbf8e,
-0xbf8f,0xbf90,0xbf91,0xbf92,0xbf93,0xbf95,0xbf96,0xbf97,
-0xbf98,0xbf99,0xbf9a,0xbf9b,0xbf9c,0xbf9d,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xbf9e,0xbf9f,0xbfa0,0xbfa1,
-0xbfa2,0xbfa3,0xbfa4,0xbfa5,0xbfa6,0xbfa7,0xbfa8,0xbfa9,
-0xbfaa,0xbfab,0xbfac,0xbfad,0xbfae,0xbfaf,0xbfb1,0xbfb2,
-0xbfb3,0xbfb4,0xbfb5,0xbfb6,0xbfb7,0xbfb8,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xbfb9,0xbfba,0xbfbb,0xbfbc,
-0xbfbd,0xbfbe,0xbfbf,0xbfc0,0xbfc1,0xbfc2,0xbfc3,0xbfc4,
-0xbfc6,0xbfc7,0xbfc8,0xbfc9,0xbfca,0xbfcb,0xbfce,0xbfcf,
-0xbfd1,0xbfd2,0xbfd3,0xbfd5,0xbfd6,0xbfd7,0xbfd8,0xbfd9,
-0xbfda,0xbfdb,0xbfdd,0xbfde,0xbfe0,0xbfe2,0xbfe3,0xbfe4,
-0xbfe5,0xbfe6,0xbfe7,0xbfe8,0xbfe9,0xbfea,0xbfeb,0xbfec,
-0xbfed,0xbfee,0xbfef,0xbff0,0xbff1,0xbff2,0xbff3,0xbff4,
-0xbff5,0xbff6,0xbff7,0xbff8,0xbff9,0xbffa,0xbffb,0xbffc,
-0xbffd,0xbffe,0xbfff,0xc000,0xc001,0xc002,0xc003,0xc004,
-0xc005,0xc006,0xc007,0xc008,0xc009,0xc00a,0xc00b,0xc00c,
-0xc00d,0xc00e,0xc00f,0xc010,0xc011,0xc012,0xc013,0xc014,
-0xc015,0xc016,0xc017,0xc018,0xc019,0xc01a,0xc01b,0xc01c,
-0xc01d,0xc01e,0xc01f,0xc020,0xc021,0xc022,0xc023,0xc024,
-0xc025,0xc026,0xc027,0xc028,0xc029,0xc02a,0xc02b,0xc02c,
-0xc02d,0xc02e,0xc02f,0xc030,0xc031,0xc032,0xc033,0xc034,
-0xc035,0xc036,0xc037,0xc038,0xc039,0xc03a,0xc03b,0xc03d,
-0xc03e,0xc03f,0xc040,0xc041,0xc042,0xc043,0xc044,0xc045,
-0xc046,0xc047,0xc048,0xc049,0xc04a,0xc04b,0xc04c,0xc04d,
-0xc04e,0xc04f,0xc050,0xc052,0xc053,0xc054,0xc055,0xc056,
-0xc057,0xc059,0xc05a,0xc05b,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xc05d,0xc05e,0xc05f,0xc061,0xc062,0xc063,
-0xc064,0xc065,0xc066,0xc067,0xc06a,0xc06b,0xc06c,0xc06d,
-0xc06e,0xc06f,0xc070,0xc071,0xc072,0xc073,0xc074,0xc075,
-0xc076,0xc077,0xc078,0xc079,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xc07a,0xc07b,0xc07c,0xc07d,0xc07e,0xc07f,
-0xc080,0xc081,0xc082,0xc083,0xc084,0xc085,0xc086,0xc087,
-0xc088,0xc089,0xc08a,0xc08b,0xc08c,0xc08d,0xc08e,0xc08f,
-0xc092,0xc093,0xc095,0xc096,0xc097,0xc099,0xc09a,0xc09b,
-0xc09c,0xc09d,0xc09e,0xc09f,0xc0a2,0xc0a4,0xc0a6,0xc0a7,
-0xc0a8,0xc0a9,0xc0aa,0xc0ab,0xc0ae,0xc0b1,0xc0b2,0xc0b7,
-0xc0b8,0xc0b9,0xc0ba,0xc0bb,0xc0be,0xc0c2,0xc0c3,0xc0c4,
-0xc0c6,0xc0c7,0xc0ca,0xc0cb,0xc0cd,0xc0ce,0xc0cf,0xc0d1,
-0xc0d2,0xc0d3,0xc0d4,0xc0d5,0xc0d6,0xc0d7,0xc0da,0xc0de,
-0xc0df,0xc0e0,0xc0e1,0xc0e2,0xc0e3,0xc0e6,0xc0e7,0xc0e9,
-0xc0ea,0xc0eb,0xc0ed,0xc0ee,0xc0ef,0xc0f0,0xc0f1,0xc0f2,
-0xc0f3,0xc0f6,0xc0f8,0xc0fa,0xc0fb,0xc0fc,0xc0fd,0xc0fe,
-0xc0ff,0xc101,0xc102,0xc103,0xc105,0xc106,0xc107,0xc109,
-0xc10a,0xc10b,0xc10c,0xc10d,0xc10e,0xc10f,0xc111,0xc112,
-0xc113,0xc114,0xc116,0xc117,0xc118,0xc119,0xc11a,0xc11b,
-0xc121,0xc122,0xc125,0xc128,0xc129,0xc12a,0xc12b,0xc12e,
-0xc132,0xc133,0xc134,0xc135,0xc137,0xc13a,0xc13b,0xc13d,
-0xc13e,0xc13f,0xc141,0xc142,0xc143,0xc144,0xc145,0xc146,
-0xc147,0xc14a,0xc14e,0xc14f,0xc150,0xc151,0xc152,0xc153,
-0xc156,0xc157,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xc159,0xc15a,0xc15b,0xc15d,0xc15e,0xc15f,0xc160,0xc161,
-0xc162,0xc163,0xc166,0xc16a,0xc16b,0xc16c,0xc16d,0xc16e,
-0xc16f,0xc171,0xc172,0xc173,0xc175,0xc176,0xc177,0xc179,
-0xc17a,0xc17b,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xc17c,0xc17d,0xc17e,0xc17f,0xc180,0xc181,0xc182,0xc183,
-0xc184,0xc186,0xc187,0xc188,0xc189,0xc18a,0xc18b,0xc18f,
-0xc191,0xc192,0xc193,0xc195,0xc197,0xc198,0xc199,0xc19a,
-0xc19b,0xc19e,0xc1a0,0xc1a2,0xc1a3,0xc1a4,0xc1a6,0xc1a7,
-0xc1aa,0xc1ab,0xc1ad,0xc1ae,0xc1af,0xc1b1,0xc1b2,0xc1b3,
-0xc1b4,0xc1b5,0xc1b6,0xc1b7,0xc1b8,0xc1b9,0xc1ba,0xc1bb,
-0xc1bc,0xc1be,0xc1bf,0xc1c0,0xc1c1,0xc1c2,0xc1c3,0xc1c5,
-0xc1c6,0xc1c7,0xc1c9,0xc1ca,0xc1cb,0xc1cd,0xc1ce,0xc1cf,
-0xc1d0,0xc1d1,0xc1d2,0xc1d3,0xc1d5,0xc1d6,0xc1d9,0xc1da,
-0xc1db,0xc1dc,0xc1dd,0xc1de,0xc1df,0xc1e1,0xc1e2,0xc1e3,
-0xc1e5,0xc1e6,0xc1e7,0xc1e9,0xc1ea,0xc1eb,0xc1ec,0xc1ed,
-0xc1ee,0xc1ef,0xc1f2,0xc1f4,0xc1f5,0xc1f6,0xc1f7,0xc1f8,
-0xc1f9,0xc1fa,0xc1fb,0xc1fe,0xc1ff,0xc201,0xc202,0xc203,
-0xc205,0xc206,0xc207,0xc208,0xc209,0xc20a,0xc20b,0xc20e,
-0xc210,0xc212,0xc213,0xc214,0xc215,0xc216,0xc217,0xc21a,
-0xc21b,0xc21d,0xc21e,0xc221,0xc222,0xc223,0xc224,0xc225,
-0xc226,0xc227,0xc22a,0xc22c,0xc22e,0xc230,0xc233,0xc235,
-0xc236,0xc237,0xc238,0xc239,0xc23a,0xc23b,0xc23c,0xc23d,
-0xc23e,0xc23f,0xc240,0xc241,0xc242,0xc243,0xc244,0xc245,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xc246,0xc247,
-0xc249,0xc24a,0xc24b,0xc24c,0xc24d,0xc24e,0xc24f,0xc252,
-0xc253,0xc255,0xc256,0xc257,0xc259,0xc25a,0xc25b,0xc25c,
-0xc25d,0xc25e,0xc25f,0xc261,0xc262,0xc263,0xc264,0xc266,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xc267,0xc268,
-0xc269,0xc26a,0xc26b,0xc26e,0xc26f,0xc271,0xc272,0xc273,
-0xc275,0xc276,0xc277,0xc278,0xc279,0xc27a,0xc27b,0xc27e,
-0xc280,0xc282,0xc283,0xc284,0xc285,0xc286,0xc287,0xc28a,
-0xc28b,0xc28c,0xc28d,0xc28e,0xc28f,0xc291,0xc292,0xc293,
-0xc294,0xc295,0xc296,0xc297,0xc299,0xc29a,0xc29c,0xc29e,
-0xc29f,0xc2a0,0xc2a1,0xc2a2,0xc2a3,0xc2a6,0xc2a7,0xc2a9,
-0xc2aa,0xc2ab,0xc2ae,0xc2af,0xc2b0,0xc2b1,0xc2b2,0xc2b3,
-0xc2b6,0xc2b8,0xc2ba,0xc2bb,0xc2bc,0xc2bd,0xc2be,0xc2bf,
-0xc2c0,0xc2c1,0xc2c2,0xc2c3,0xc2c4,0xc2c5,0xc2c6,0xc2c7,
-0xc2c8,0xc2c9,0xc2ca,0xc2cb,0xc2cc,0xc2cd,0xc2ce,0xc2cf,
-0xc2d0,0xc2d1,0xc2d2,0xc2d3,0xc2d4,0xc2d5,0xc2d6,0xc2d7,
-0xc2d8,0xc2d9,0xc2da,0xc2db,0xc2de,0xc2df,0xc2e1,0xc2e2,
-0xc2e5,0xc2e6,0xc2e7,0xc2e8,0xc2e9,0xc2ea,0xc2ee,0xc2f0,
-0xc2f2,0xc2f3,0xc2f4,0xc2f5,0xc2f7,0xc2fa,0xc2fd,0xc2fe,
-0xc2ff,0xc301,0xc302,0xc303,0xc304,0xc305,0xc306,0xc307,
-0xc30a,0xc30b,0xc30e,0xc30f,0xc310,0xc311,0xc312,0xc316,
-0xc317,0xc319,0xc31a,0xc31b,0xc31d,0xc31e,0xc31f,0xc320,
-0xc321,0xc322,0xc323,0xc326,0xc327,0xc32a,0xc32b,0xc32c,
-0xc32d,0xc32e,0xc32f,0xc330,0xc331,0xc332,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xc333,0xc334,0xc335,0xc336,
-0xc337,0xc338,0xc339,0xc33a,0xc33b,0xc33c,0xc33d,0xc33e,
-0xc33f,0xc340,0xc341,0xc342,0xc343,0xc344,0xc346,0xc347,
-0xc348,0xc349,0xc34a,0xc34b,0xc34c,0xc34d,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xc34e,0xc34f,0xc350,0xc351,
-0xc352,0xc353,0xc354,0xc355,0xc356,0xc357,0xc358,0xc359,
-0xc35a,0xc35b,0xc35c,0xc35d,0xc35e,0xc35f,0xc360,0xc361,
-0xc362,0xc363,0xc364,0xc365,0xc366,0xc367,0xc36a,0xc36b,
-0xc36d,0xc36e,0xc36f,0xc371,0xc373,0xc374,0xc375,0xc376,
-0xc377,0xc37a,0xc37b,0xc37e,0xc37f,0xc380,0xc381,0xc382,
-0xc383,0xc385,0xc386,0xc387,0xc389,0xc38a,0xc38b,0xc38d,
-0xc38e,0xc38f,0xc390,0xc391,0xc392,0xc393,0xc394,0xc395,
-0xc396,0xc397,0xc398,0xc399,0xc39a,0xc39b,0xc39c,0xc39d,
-0xc39e,0xc39f,0xc3a0,0xc3a1,0xc3a2,0xc3a3,0xc3a4,0xc3a5,
-0xc3a6,0xc3a7,0xc3a8,0xc3a9,0xc3aa,0xc3ab,0xc3ac,0xc3ad,
-0xc3ae,0xc3af,0xc3b0,0xc3b1,0xc3b2,0xc3b3,0xc3b4,0xc3b5,
-0xc3b6,0xc3b7,0xc3b8,0xc3b9,0xc3ba,0xc3bb,0xc3bc,0xc3bd,
-0xc3be,0xc3bf,0xc3c1,0xc3c2,0xc3c3,0xc3c4,0xc3c5,0xc3c6,
-0xc3c7,0xc3c8,0xc3c9,0xc3ca,0xc3cb,0xc3cc,0xc3cd,0xc3ce,
-0xc3cf,0xc3d0,0xc3d1,0xc3d2,0xc3d3,0xc3d4,0xc3d5,0xc3d6,
-0xc3d7,0xc3da,0xc3db,0xc3dd,0xc3de,0xc3e1,0xc3e3,0xc3e4,
-0xc3e5,0xc3e6,0xc3e7,0xc3ea,0xc3eb,0xc3ec,0xc3ee,0xc3ef,
-0xc3f0,0xc3f1,0xc3f2,0xc3f3,0xc3f6,0xc3f7,0xc3f9,0xc3fa,
-0xc3fb,0xc3fc,0xc3fd,0xc3fe,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xc3ff,0xc400,0xc401,0xc402,0xc403,0xc404,
-0xc405,0xc406,0xc407,0xc409,0xc40a,0xc40b,0xc40c,0xc40d,
-0xc40e,0xc40f,0xc411,0xc412,0xc413,0xc414,0xc415,0xc416,
-0xc417,0xc418,0xc419,0xc41a,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xc41b,0xc41c,0xc41d,0xc41e,0xc41f,0xc420,
-0xc421,0xc422,0xc423,0xc425,0xc426,0xc427,0xc428,0xc429,
-0xc42a,0xc42b,0xc42d,0xc42e,0xc42f,0xc431,0xc432,0xc433,
-0xc435,0xc436,0xc437,0xc438,0xc439,0xc43a,0xc43b,0xc43e,
-0xc43f,0xc440,0xc441,0xc442,0xc443,0xc444,0xc445,0xc446,
-0xc447,0xc449,0xc44a,0xc44b,0xc44c,0xc44d,0xc44e,0xc44f,
-0xc450,0xc451,0xc452,0xc453,0xc454,0xc455,0xc456,0xc457,
-0xc458,0xc459,0xc45a,0xc45b,0xc45c,0xc45d,0xc45e,0xc45f,
-0xc460,0xc461,0xc462,0xc463,0xc466,0xc467,0xc469,0xc46a,
-0xc46b,0xc46d,0xc46e,0xc46f,0xc470,0xc471,0xc472,0xc473,
-0xc476,0xc477,0xc478,0xc47a,0xc47b,0xc47c,0xc47d,0xc47e,
-0xc47f,0xc481,0xc482,0xc483,0xc484,0xc485,0xc486,0xc487,
-0xc488,0xc489,0xc48a,0xc48b,0xc48c,0xc48d,0xc48e,0xc48f,
-0xc490,0xc491,0xc492,0xc493,0xc495,0xc496,0xc497,0xc498,
-0xc499,0xc49a,0xc49b,0xc49d,0xc49e,0xc49f,0xc4a0,0xc4a1,
-0xc4a2,0xc4a3,0xc4a4,0xc4a5,0xc4a6,0xc4a7,0xc4a8,0xc4a9,
-0xc4aa,0xc4ab,0xc4ac,0xc4ad,0xc4ae,0xc4af,0xc4b0,0xc4b1,
-0xc4b2,0xc4b3,0xc4b4,0xc4b5,0xc4b6,0xc4b7,0xc4b9,0xc4ba,
-0xc4bb,0xc4bd,0xc4be,0xc4bf,0xc4c0,0xc4c1,0xc4c2,0xc4c3,
-0xc4c4,0xc4c5,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xc4c6,0xc4c7,0xc4c8,0xc4c9,0xc4ca,0xc4cb,0xc4cc,0xc4cd,
-0xc4ce,0xc4cf,0xc4d0,0xc4d1,0xc4d2,0xc4d3,0xc4d4,0xc4d5,
-0xc4d6,0xc4d7,0xc4d8,0xc4d9,0xc4da,0xc4db,0xc4dc,0xc4dd,
-0xc4de,0xc4df,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xc4e0,0xc4e1,0xc4e2,0xc4e3,0xc4e4,0xc4e5,0xc4e6,0xc4e7,
-0xc4e8,0xc4ea,0xc4eb,0xc4ec,0xc4ed,0xc4ee,0xc4ef,0xc4f2,
-0xc4f3,0xc4f5,0xc4f6,0xc4f7,0xc4f9,0xc4fb,0xc4fc,0xc4fd,
-0xc4fe,0xc502,0xc503,0xc504,0xc505,0xc506,0xc507,0xc508,
-0xc509,0xc50a,0xc50b,0xc50d,0xc50e,0xc50f,0xc511,0xc512,
-0xc513,0xc515,0xc516,0xc517,0xc518,0xc519,0xc51a,0xc51b,
-0xc51d,0xc51e,0xc51f,0xc520,0xc521,0xc522,0xc523,0xc524,
-0xc525,0xc526,0xc527,0xc52a,0xc52b,0xc52d,0xc52e,0xc52f,
-0xc531,0xc532,0xc533,0xc534,0xc535,0xc536,0xc537,0xc53a,
-0xc53c,0xc53e,0xc53f,0xc540,0xc541,0xc542,0xc543,0xc546,
-0xc547,0xc54b,0xc54f,0xc550,0xc551,0xc552,0xc556,0xc55a,
-0xc55b,0xc55c,0xc55f,0xc562,0xc563,0xc565,0xc566,0xc567,
-0xc569,0xc56a,0xc56b,0xc56c,0xc56d,0xc56e,0xc56f,0xc572,
-0xc576,0xc577,0xc578,0xc579,0xc57a,0xc57b,0xc57e,0xc57f,
-0xc581,0xc582,0xc583,0xc585,0xc586,0xc588,0xc589,0xc58a,
-0xc58b,0xc58e,0xc590,0xc592,0xc593,0xc594,0xc596,0xc599,
-0xc59a,0xc59b,0xc59d,0xc59e,0xc59f,0xc5a1,0xc5a2,0xc5a3,
-0xc5a4,0xc5a5,0xc5a6,0xc5a7,0xc5a8,0xc5aa,0xc5ab,0xc5ac,
-0xc5ad,0xc5ae,0xc5af,0xc5b0,0xc5b1,0xc5b2,0xc5b3,0xc5b6,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xc5b7,0xc5ba,
-0xc5bf,0xc5c0,0xc5c1,0xc5c2,0xc5c3,0xc5cb,0xc5cd,0xc5cf,
-0xc5d2,0xc5d3,0xc5d5,0xc5d6,0xc5d7,0xc5d9,0xc5da,0xc5db,
-0xc5dc,0xc5dd,0xc5de,0xc5df,0xc5e2,0xc5e4,0xc5e6,0xc5e7,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xc5e8,0xc5e9,
-0xc5ea,0xc5eb,0xc5ef,0xc5f1,0xc5f2,0xc5f3,0xc5f5,0xc5f8,
-0xc5f9,0xc5fa,0xc5fb,0xc602,0xc603,0xc604,0xc609,0xc60a,
-0xc60b,0xc60d,0xc60e,0xc60f,0xc611,0xc612,0xc613,0xc614,
-0xc615,0xc616,0xc617,0xc61a,0xc61d,0xc61e,0xc61f,0xc620,
-0xc621,0xc622,0xc623,0xc626,0xc627,0xc629,0xc62a,0xc62b,
-0xc62f,0xc631,0xc632,0xc636,0xc638,0xc63a,0xc63c,0xc63d,
-0xc63e,0xc63f,0xc642,0xc643,0xc645,0xc646,0xc647,0xc649,
-0xc64a,0xc64b,0xc64c,0xc64d,0xc64e,0xc64f,0xc652,0xc656,
-0xc657,0xc658,0xc659,0xc65a,0xc65b,0xc65e,0xc65f,0xc661,
-0xc662,0xc663,0xc664,0xc665,0xc666,0xc667,0xc668,0xc669,
-0xc66a,0xc66b,0xc66d,0xc66e,0xc670,0xc672,0xc673,0xc674,
-0xc675,0xc676,0xc677,0xc67a,0xc67b,0xc67d,0xc67e,0xc67f,
-0xc681,0xc682,0xc683,0xc684,0xc685,0xc686,0xc687,0xc68a,
-0xc68c,0xc68e,0xc68f,0xc690,0xc691,0xc692,0xc693,0xc696,
-0xc697,0xc699,0xc69a,0xc69b,0xc69d,0xc69e,0xc69f,0xc6a0,
-0xc6a1,0xc6a2,0xc6a3,0xc6a6,0xc6a8,0xc6aa,0xc6ab,0xc6ac,
-0xc6ad,0xc6ae,0xc6af,0xc6b2,0xc6b3,0xc6b5,0xc6b6,0xc6b7,
-0xc6bb,0xc6bc,0xc6bd,0xc6be,0xc6bf,0xc6c2,0xc6c4,0xc6c6,
-0xc6c7,0xc6c8,0xc6c9,0xc6ca,0xc6cb,0xc6ce,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xc6cf,0xc6d1,0xc6d2,0xc6d3,
-0xc6d5,0xc6d6,0xc6d7,0xc6d8,0xc6d9,0xc6da,0xc6db,0xc6de,
-0xc6df,0xc6e2,0xc6e3,0xc6e4,0xc6e5,0xc6e6,0xc6e7,0xc6ea,
-0xc6eb,0xc6ed,0xc6ee,0xc6ef,0xc6f1,0xc6f2,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xc6f3,0xc6f4,0xc6f5,0xc6f6,
-0xc6f7,0xc6fa,0xc6fb,0xc6fc,0xc6fe,0xc6ff,0xc700,0xc701,
-0xc702,0xc703,0xc706,0xc707,0xc709,0xc70a,0xc70b,0xc70d,
-0xc70e,0xc70f,0xc710,0xc711,0xc712,0xc713,0xc716,0xc718,
-0xc71a,0xc71b,0xc71c,0xc71d,0xc71e,0xc71f,0xc722,0xc723,
-0xc725,0xc726,0xc727,0xc729,0xc72a,0xc72b,0xc72c,0xc72d,
-0xc72e,0xc72f,0xc732,0xc734,0xc736,0xc738,0xc739,0xc73a,
-0xc73b,0xc73e,0xc73f,0xc741,0xc742,0xc743,0xc745,0xc746,
-0xc747,0xc748,0xc749,0xc74b,0xc74e,0xc750,0xc759,0xc75a,
-0xc75b,0xc75d,0xc75e,0xc75f,0xc761,0xc762,0xc763,0xc764,
-0xc765,0xc766,0xc767,0xc769,0xc76a,0xc76c,0xc76d,0xc76e,
-0xc76f,0xc770,0xc771,0xc772,0xc773,0xc776,0xc777,0xc779,
-0xc77a,0xc77b,0xc77f,0xc780,0xc781,0xc782,0xc786,0xc78b,
-0xc78c,0xc78d,0xc78f,0xc792,0xc793,0xc795,0xc799,0xc79b,
-0xc79c,0xc79d,0xc79e,0xc79f,0xc7a2,0xc7a7,0xc7a8,0xc7a9,
-0xc7aa,0xc7ab,0xc7ae,0xc7af,0xc7b1,0xc7b2,0xc7b3,0xc7b5,
-0xc7b6,0xc7b7,0xc7b8,0xc7b9,0xc7ba,0xc7bb,0xc7be,0xc7c2,
-0xc7c3,0xc7c4,0xc7c5,0xc7c6,0xc7c7,0xc7ca,0xc7cb,0xc7cd,
-0xc7cf,0xc7d1,0xc7d2,0xc7d3,0xc7d4,0xc7d5,0xc7d6,0xc7d7,
-0xc7d9,0xc7da,0xc7db,0xc7dc,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xc7de,0xc7df,0xc7e0,0xc7e1,0xc7e2,0xc7e3,
-0xc7e5,0xc7e6,0xc7e7,0xc7e9,0xc7ea,0xc7eb,0xc7ed,0xc7ee,
-0xc7ef,0xc7f0,0xc7f1,0xc7f2,0xc7f3,0xc7f4,0xc7f5,0xc7f6,
-0xc7f7,0xc7f8,0xc7f9,0xc7fa,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xc7fb,0xc7fc,0xc7fd,0xc7fe,0xc7ff,0xc802,
-0xc803,0xc805,0xc806,0xc807,0xc809,0xc80b,0xc80c,0xc80d,
-0xc80e,0xc80f,0xc812,0xc814,0xc817,0xc818,0xc819,0xc81a,
-0xc81b,0xc81e,0xc81f,0xc821,0xc822,0xc823,0xc825,0xc826,
-0xc827,0xc828,0xc829,0xc82a,0xc82b,0xc82e,0xc830,0xc832,
-0xc833,0xc834,0xc835,0xc836,0xc837,0xc839,0xc83a,0xc83b,
-0xc83d,0xc83e,0xc83f,0xc841,0xc842,0xc843,0xc844,0xc845,
-0xc846,0xc847,0xc84a,0xc84b,0xc84e,0xc84f,0xc850,0xc851,
-0xc852,0xc853,0xc855,0xc856,0xc857,0xc858,0xc859,0xc85a,
-0xc85b,0xc85c,0xc85d,0xc85e,0xc85f,0xc860,0xc861,0xc862,
-0xc863,0xc864,0xc865,0xc866,0xc867,0xc868,0xc869,0xc86a,
-0xc86b,0xc86c,0xc86d,0xc86e,0xc86f,0xc872,0xc873,0xc875,
-0xc876,0xc877,0xc879,0xc87b,0xc87c,0xc87d,0xc87e,0xc87f,
-0xc882,0xc884,0xc888,0xc889,0xc88a,0xc88e,0xc88f,0xc890,
-0xc891,0xc892,0xc893,0xc895,0xc896,0xc897,0xc898,0xc899,
-0xc89a,0xc89b,0xc89c,0xc89e,0xc8a0,0xc8a2,0xc8a3,0xc8a4
-};
-
-static const int uhc1_ucs_table_size = (sizeof(uhc1_ucs_table)/sizeof(unsigned short));
-
-static const unsigned short uhc2_ucs_table[] = {
-0xc8a5,0xc8a6,0xc8a7,0xc8a9,0xc8aa,0xc8ab,0xc8ac,0xc8ad,
-0xc8ae,0xc8af,0xc8b0,0xc8b1,0xc8b2,0xc8b3,0xc8b4,0xc8b5,
-0xc8b6,0xc8b7,0xc8b8,0xc8b9,0xc8ba,0xc8bb,0xc8be,0xc8bf,
-0xc8c0,0xc8c1,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xc8c2,0xc8c3,0xc8c5,0xc8c6,0xc8c7,0xc8c9,0xc8ca,0xc8cb,
-0xc8cd,0xc8ce,0xc8cf,0xc8d0,0xc8d1,0xc8d2,0xc8d3,0xc8d6,
-0xc8d8,0xc8da,0xc8db,0xc8dc,0xc8dd,0xc8de,0xc8df,0xc8e2,
-0xc8e3,0xc8e5,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xc8e6,0xc8e7,0xc8e8,0xc8e9,0xc8ea,0xc8eb,0xc8ec,0xc8ed,
-0xc8ee,0xc8ef,0xc8f0,0xc8f1,0xc8f2,0xc8f3,0xc8f4,0xc8f6,
-0xc8f7,0xc8f8,0xc8f9,0xc8fa,0xc8fb,0xc8fe,0xc8ff,0xc901,
-0xc902,0xc903,0xc907,0xc908,0xc909,0xc90a,0xc90b,0xc90e,
-0x3000,0x3001,0x3002,0x00b7,0x2025,0x2026,0x00a8,0x3003,
-0x00ad,0x2015,0x2225,0xff3c,0x223c,0x2018,0x2019,0x201c,
-0x201d,0x3014,0x3015,0x3008,0x3009,0x300a,0x300b,0x300c,
-0x300d,0x300e,0x300f,0x3010,0x3011,0x00b1,0x00d7,0x00f7,
-0x2260,0x2264,0x2265,0x221e,0x2234,0x00b0,0x2032,0x2033,
-0x2103,0x212b,0xffe0,0xffe1,0xffe5,0x2642,0x2640,0x2220,
-0x22a5,0x2312,0x2202,0x2207,0x2261,0x2252,0x00a7,0x203b,
-0x2606,0x2605,0x25cb,0x25cf,0x25ce,0x25c7,0x25c6,0x25a1,
-0x25a0,0x25b3,0x25b2,0x25bd,0x25bc,0x2192,0x2190,0x2191,
-0x2193,0x2194,0x3013,0x226a,0x226b,0x221a,0x223d,0x221d,
-0x2235,0x222b,0x222c,0x2208,0x220b,0x2286,0x2287,0x2282,
-0x2283,0x222a,0x2229,0x2227,0x2228,0xffe2,0xc910,0xc912,
-0xc913,0xc914,0xc915,0xc916,0xc917,0xc919,0xc91a,0xc91b,
-0xc91c,0xc91d,0xc91e,0xc91f,0xc920,0xc921,0xc922,0xc923,
-0xc924,0xc925,0xc926,0xc927,0xc928,0xc929,0xc92a,0xc92b,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xc92d,0xc92e,
-0xc92f,0xc930,0xc931,0xc932,0xc933,0xc935,0xc936,0xc937,
-0xc938,0xc939,0xc93a,0xc93b,0xc93c,0xc93d,0xc93e,0xc93f,
-0xc940,0xc941,0xc942,0xc943,0xc944,0xc945,0xc946,0xc947,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xc948,0xc949,
-0xc94a,0xc94b,0xc94c,0xc94d,0xc94e,0xc94f,0xc952,0xc953,
-0xc955,0xc956,0xc957,0xc959,0xc95a,0xc95b,0xc95c,0xc95d,
-0xc95e,0xc95f,0xc962,0xc964,0xc965,0xc966,0xc967,0xc968,
-0xc969,0xc96a,0xc96b,0xc96d,0xc96e,0xc96f,0x21d2,0x21d4,
-0x2200,0x2203,0x00b4,0xff5e,0x02c7,0x02d8,0x02dd,0x02da,
-0x02d9,0x00b8,0x02db,0x00a1,0x00bf,0x02d0,0x222e,0x2211,
-0x220f,0x00a4,0x2109,0x2030,0x25c1,0x25c0,0x25b7,0x25b6,
-0x2664,0x2660,0x2661,0x2665,0x2667,0x2663,0x2299,0x25c8,
-0x25a3,0x25d0,0x25d1,0x2592,0x25a4,0x25a5,0x25a8,0x25a7,
-0x25a6,0x25a9,0x2668,0x260f,0x260e,0x261c,0x261e,0x00b6,
-0x2020,0x2021,0x2195,0x2197,0x2199,0x2196,0x2198,0x266d,
-0x2669,0x266a,0x266c,0x327f,0x321c,0x2116,0x33c7,0x2122,
-0x33c2,0x33d8,0x2121,0x20ac,0x00ae,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xc971,0xc972,0xc973,0xc975,
-0xc976,0xc977,0xc978,0xc979,0xc97a,0xc97b,0xc97d,0xc97e,
-0xc97f,0xc980,0xc981,0xc982,0xc983,0xc984,0xc985,0xc986,
-0xc987,0xc98a,0xc98b,0xc98d,0xc98e,0xc98f,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xc991,0xc992,0xc993,0xc994,
-0xc995,0xc996,0xc997,0xc99a,0xc99c,0xc99e,0xc99f,0xc9a0,
-0xc9a1,0xc9a2,0xc9a3,0xc9a4,0xc9a5,0xc9a6,0xc9a7,0xc9a8,
-0xc9a9,0xc9aa,0xc9ab,0xc9ac,0xc9ad,0xc9ae,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xc9af,0xc9b0,0xc9b1,0xc9b2,
-0xc9b3,0xc9b4,0xc9b5,0xc9b6,0xc9b7,0xc9b8,0xc9b9,0xc9ba,
-0xc9bb,0xc9bc,0xc9bd,0xc9be,0xc9bf,0xc9c2,0xc9c3,0xc9c5,
-0xc9c6,0xc9c9,0xc9cb,0xc9cc,0xc9cd,0xc9ce,0xc9cf,0xc9d2,
-0xc9d4,0xc9d7,0xc9d8,0xc9db,0xff01,0xff02,0xff03,0xff04,
-0xff05,0xff06,0xff07,0xff08,0xff09,0xff0a,0xff0b,0xff0c,
-0xff0d,0xff0e,0xff0f,0xff10,0xff11,0xff12,0xff13,0xff14,
-0xff15,0xff16,0xff17,0xff18,0xff19,0xff1a,0xff1b,0xff1c,
-0xff1d,0xff1e,0xff1f,0xff20,0xff21,0xff22,0xff23,0xff24,
-0xff25,0xff26,0xff27,0xff28,0xff29,0xff2a,0xff2b,0xff2c,
-0xff2d,0xff2e,0xff2f,0xff30,0xff31,0xff32,0xff33,0xff34,
-0xff35,0xff36,0xff37,0xff38,0xff39,0xff3a,0xff3b,0xffe6,
-0xff3d,0xff3e,0xff3f,0xff40,0xff41,0xff42,0xff43,0xff44,
-0xff45,0xff46,0xff47,0xff48,0xff49,0xff4a,0xff4b,0xff4c,
-0xff4d,0xff4e,0xff4f,0xff50,0xff51,0xff52,0xff53,0xff54,
-0xff55,0xff56,0xff57,0xff58,0xff59,0xff5a,0xff5b,0xff5c,
-0xff5d,0xffe3,0xc9de,0xc9df,0xc9e1,0xc9e3,0xc9e5,0xc9e6,
-0xc9e8,0xc9e9,0xc9ea,0xc9eb,0xc9ee,0xc9f2,0xc9f3,0xc9f4,
-0xc9f5,0xc9f6,0xc9f7,0xc9fa,0xc9fb,0xc9fd,0xc9fe,0xc9ff,
-0xca01,0xca02,0xca03,0xca04,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xca05,0xca06,0xca07,0xca0a,0xca0e,0xca0f,
-0xca10,0xca11,0xca12,0xca13,0xca15,0xca16,0xca17,0xca19,
-0xca1a,0xca1b,0xca1c,0xca1d,0xca1e,0xca1f,0xca20,0xca21,
-0xca22,0xca23,0xca24,0xca25,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xca26,0xca27,0xca28,0xca2a,0xca2b,0xca2c,
-0xca2d,0xca2e,0xca2f,0xca30,0xca31,0xca32,0xca33,0xca34,
-0xca35,0xca36,0xca37,0xca38,0xca39,0xca3a,0xca3b,0xca3c,
-0xca3d,0xca3e,0xca3f,0xca40,0xca41,0xca42,0xca43,0xca44,
-0xca45,0xca46,0x3131,0x3132,0x3133,0x3134,0x3135,0x3136,
-0x3137,0x3138,0x3139,0x313a,0x313b,0x313c,0x313d,0x313e,
-0x313f,0x3140,0x3141,0x3142,0x3143,0x3144,0x3145,0x3146,
-0x3147,0x3148,0x3149,0x314a,0x314b,0x314c,0x314d,0x314e,
-0x314f,0x3150,0x3151,0x3152,0x3153,0x3154,0x3155,0x3156,
-0x3157,0x3158,0x3159,0x315a,0x315b,0x315c,0x315d,0x315e,
-0x315f,0x3160,0x3161,0x3162,0x3163,0x3164,0x3165,0x3166,
-0x3167,0x3168,0x3169,0x316a,0x316b,0x316c,0x316d,0x316e,
-0x316f,0x3170,0x3171,0x3172,0x3173,0x3174,0x3175,0x3176,
-0x3177,0x3178,0x3179,0x317a,0x317b,0x317c,0x317d,0x317e,
-0x317f,0x3180,0x3181,0x3182,0x3183,0x3184,0x3185,0x3186,
-0x3187,0x3188,0x3189,0x318a,0x318b,0x318c,0x318d,0x318e,
-0xca47,0xca48,0xca49,0xca4a,0xca4b,0xca4e,0xca4f,0xca51,
-0xca52,0xca53,0xca55,0xca56,0xca57,0xca58,0xca59,0xca5a,
-0xca5b,0xca5e,0xca62,0xca63,0xca64,0xca65,0xca66,0xca67,
-0xca69,0xca6a,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xca6b,0xca6c,0xca6d,0xca6e,0xca6f,0xca70,0xca71,0xca72,
-0xca73,0xca74,0xca75,0xca76,0xca77,0xca78,0xca79,0xca7a,
-0xca7b,0xca7c,0xca7e,0xca7f,0xca80,0xca81,0xca82,0xca83,
-0xca85,0xca86,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xca87,0xca88,0xca89,0xca8a,0xca8b,0xca8c,0xca8d,0xca8e,
-0xca8f,0xca90,0xca91,0xca92,0xca93,0xca94,0xca95,0xca96,
-0xca97,0xca99,0xca9a,0xca9b,0xca9c,0xca9d,0xca9e,0xca9f,
-0xcaa0,0xcaa1,0xcaa2,0xcaa3,0xcaa4,0xcaa5,0xcaa6,0xcaa7,
-0x2170,0x2171,0x2172,0x2173,0x2174,0x2175,0x2176,0x2177,
-0x2178,0x2179,0x0000,0x0000,0x0000,0x0000,0x0000,0x2160,
-0x2161,0x2162,0x2163,0x2164,0x2165,0x2166,0x2167,0x2168,
-0x2169,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0391,0x0392,0x0393,0x0394,0x0395,0x0396,0x0397,0x0398,
-0x0399,0x039a,0x039b,0x039c,0x039d,0x039e,0x039f,0x03a0,
-0x03a1,0x03a3,0x03a4,0x03a5,0x03a6,0x03a7,0x03a8,0x03a9,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x03b1,0x03b2,0x03b3,0x03b4,0x03b5,0x03b6,0x03b7,0x03b8,
-0x03b9,0x03ba,0x03bb,0x03bc,0x03bd,0x03be,0x03bf,0x03c0,
-0x03c1,0x03c3,0x03c4,0x03c5,0x03c6,0x03c7,0x03c8,0x03c9,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xcaa8,0xcaa9,
-0xcaaa,0xcaab,0xcaac,0xcaad,0xcaae,0xcaaf,0xcab0,0xcab1,
-0xcab2,0xcab3,0xcab4,0xcab5,0xcab6,0xcab7,0xcab8,0xcab9,
-0xcaba,0xcabb,0xcabe,0xcabf,0xcac1,0xcac2,0xcac3,0xcac5,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xcac6,0xcac7,
-0xcac8,0xcac9,0xcaca,0xcacb,0xcace,0xcad0,0xcad2,0xcad4,
-0xcad5,0xcad6,0xcad7,0xcada,0xcadb,0xcadc,0xcadd,0xcade,
-0xcadf,0xcae1,0xcae2,0xcae3,0xcae4,0xcae5,0xcae6,0xcae7,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xcae8,0xcae9,
-0xcaea,0xcaeb,0xcaed,0xcaee,0xcaef,0xcaf0,0xcaf1,0xcaf2,
-0xcaf3,0xcaf5,0xcaf6,0xcaf7,0xcaf8,0xcaf9,0xcafa,0xcafb,
-0xcafc,0xcafd,0xcafe,0xcaff,0xcb00,0xcb01,0xcb02,0xcb03,
-0xcb04,0xcb05,0xcb06,0xcb07,0xcb09,0xcb0a,0x2500,0x2502,
-0x250c,0x2510,0x2518,0x2514,0x251c,0x252c,0x2524,0x2534,
-0x253c,0x2501,0x2503,0x250f,0x2513,0x251b,0x2517,0x2523,
-0x2533,0x252b,0x253b,0x254b,0x2520,0x252f,0x2528,0x2537,
-0x253f,0x251d,0x2530,0x2525,0x2538,0x2542,0x2512,0x2511,
-0x251a,0x2519,0x2516,0x2515,0x250e,0x250d,0x251e,0x251f,
-0x2521,0x2522,0x2526,0x2527,0x2529,0x252a,0x252d,0x252e,
-0x2531,0x2532,0x2535,0x2536,0x2539,0x253a,0x253d,0x253e,
-0x2540,0x2541,0x2543,0x2544,0x2545,0x2546,0x2547,0x2548,
-0x2549,0x254a,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xcb0b,0xcb0c,0xcb0d,0xcb0e,
-0xcb0f,0xcb11,0xcb12,0xcb13,0xcb15,0xcb16,0xcb17,0xcb19,
-0xcb1a,0xcb1b,0xcb1c,0xcb1d,0xcb1e,0xcb1f,0xcb22,0xcb23,
-0xcb24,0xcb25,0xcb26,0xcb27,0xcb28,0xcb29,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xcb2a,0xcb2b,0xcb2c,0xcb2d,
-0xcb2e,0xcb2f,0xcb30,0xcb31,0xcb32,0xcb33,0xcb34,0xcb35,
-0xcb36,0xcb37,0xcb38,0xcb39,0xcb3a,0xcb3b,0xcb3c,0xcb3d,
-0xcb3e,0xcb3f,0xcb40,0xcb42,0xcb43,0xcb44,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xcb45,0xcb46,0xcb47,0xcb4a,
-0xcb4b,0xcb4d,0xcb4e,0xcb4f,0xcb51,0xcb52,0xcb53,0xcb54,
-0xcb55,0xcb56,0xcb57,0xcb5a,0xcb5b,0xcb5c,0xcb5e,0xcb5f,
-0xcb60,0xcb61,0xcb62,0xcb63,0xcb65,0xcb66,0xcb67,0xcb68,
-0xcb69,0xcb6a,0xcb6b,0xcb6c,0x3395,0x3396,0x3397,0x2113,
-0x3398,0x33c4,0x33a3,0x33a4,0x33a5,0x33a6,0x3399,0x339a,
-0x339b,0x339c,0x339d,0x339e,0x339f,0x33a0,0x33a1,0x33a2,
-0x33ca,0x338d,0x338e,0x338f,0x33cf,0x3388,0x3389,0x33c8,
-0x33a7,0x33a8,0x33b0,0x33b1,0x33b2,0x33b3,0x33b4,0x33b5,
-0x33b6,0x33b7,0x33b8,0x33b9,0x3380,0x3381,0x3382,0x3383,
-0x3384,0x33ba,0x33bb,0x33bc,0x33bd,0x33be,0x33bf,0x3390,
-0x3391,0x3392,0x3393,0x3394,0x2126,0x33c0,0x33c1,0x338a,
-0x338b,0x338c,0x33d6,0x33c5,0x33ad,0x33ae,0x33af,0x33db,
-0x33a9,0x33aa,0x33ab,0x33ac,0x33dd,0x33d0,0x33d3,0x33c3,
-0x33c9,0x33dc,0x33c6,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xcb6d,0xcb6e,0xcb6f,0xcb70,0xcb71,0xcb72,
-0xcb73,0xcb74,0xcb75,0xcb76,0xcb77,0xcb7a,0xcb7b,0xcb7c,
-0xcb7d,0xcb7e,0xcb7f,0xcb80,0xcb81,0xcb82,0xcb83,0xcb84,
-0xcb85,0xcb86,0xcb87,0xcb88,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xcb89,0xcb8a,0xcb8b,0xcb8c,0xcb8d,0xcb8e,
-0xcb8f,0xcb90,0xcb91,0xcb92,0xcb93,0xcb94,0xcb95,0xcb96,
-0xcb97,0xcb98,0xcb99,0xcb9a,0xcb9b,0xcb9d,0xcb9e,0xcb9f,
-0xcba0,0xcba1,0xcba2,0xcba3,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xcba4,0xcba5,0xcba6,0xcba7,0xcba8,0xcba9,
-0xcbaa,0xcbab,0xcbac,0xcbad,0xcbae,0xcbaf,0xcbb0,0xcbb1,
-0xcbb2,0xcbb3,0xcbb4,0xcbb5,0xcbb6,0xcbb7,0xcbb9,0xcbba,
-0xcbbb,0xcbbc,0xcbbd,0xcbbe,0xcbbf,0xcbc0,0xcbc1,0xcbc2,
-0xcbc3,0xcbc4,0x00c6,0x00d0,0x00aa,0x0126,0x0000,0x0132,
-0x0000,0x013f,0x0141,0x00d8,0x0152,0x00ba,0x00de,0x0166,
-0x014a,0x0000,0x3260,0x3261,0x3262,0x3263,0x3264,0x3265,
-0x3266,0x3267,0x3268,0x3269,0x326a,0x326b,0x326c,0x326d,
-0x326e,0x326f,0x3270,0x3271,0x3272,0x3273,0x3274,0x3275,
-0x3276,0x3277,0x3278,0x3279,0x327a,0x327b,0x24d0,0x24d1,
-0x24d2,0x24d3,0x24d4,0x24d5,0x24d6,0x24d7,0x24d8,0x24d9,
-0x24da,0x24db,0x24dc,0x24dd,0x24de,0x24df,0x24e0,0x24e1,
-0x24e2,0x24e3,0x24e4,0x24e5,0x24e6,0x24e7,0x24e8,0x24e9,
-0x2460,0x2461,0x2462,0x2463,0x2464,0x2465,0x2466,0x2467,
-0x2468,0x2469,0x246a,0x246b,0x246c,0x246d,0x246e,0x00bd,
-0x2153,0x2154,0x00bc,0x00be,0x215b,0x215c,0x215d,0x215e,
-0xcbc5,0xcbc6,0xcbc7,0xcbc8,0xcbc9,0xcbca,0xcbcb,0xcbcc,
-0xcbcd,0xcbce,0xcbcf,0xcbd0,0xcbd1,0xcbd2,0xcbd3,0xcbd5,
-0xcbd6,0xcbd7,0xcbd8,0xcbd9,0xcbda,0xcbdb,0xcbdc,0xcbdd,
-0xcbde,0xcbdf,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xcbe0,0xcbe1,0xcbe2,0xcbe3,0xcbe5,0xcbe6,0xcbe8,0xcbea,
-0xcbeb,0xcbec,0xcbed,0xcbee,0xcbef,0xcbf0,0xcbf1,0xcbf2,
-0xcbf3,0xcbf4,0xcbf5,0xcbf6,0xcbf7,0xcbf8,0xcbf9,0xcbfa,
-0xcbfb,0xcbfc,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xcbfd,0xcbfe,0xcbff,0xcc00,0xcc01,0xcc02,0xcc03,0xcc04,
-0xcc05,0xcc06,0xcc07,0xcc08,0xcc09,0xcc0a,0xcc0b,0xcc0e,
-0xcc0f,0xcc11,0xcc12,0xcc13,0xcc15,0xcc16,0xcc17,0xcc18,
-0xcc19,0xcc1a,0xcc1b,0xcc1e,0xcc1f,0xcc20,0xcc23,0xcc24,
-0x00e6,0x0111,0x00f0,0x0127,0x0131,0x0133,0x0138,0x0140,
-0x0142,0x00f8,0x0153,0x00df,0x00fe,0x0167,0x014b,0x0149,
-0x3200,0x3201,0x3202,0x3203,0x3204,0x3205,0x3206,0x3207,
-0x3208,0x3209,0x320a,0x320b,0x320c,0x320d,0x320e,0x320f,
-0x3210,0x3211,0x3212,0x3213,0x3214,0x3215,0x3216,0x3217,
-0x3218,0x3219,0x321a,0x321b,0x249c,0x249d,0x249e,0x249f,
-0x24a0,0x24a1,0x24a2,0x24a3,0x24a4,0x24a5,0x24a6,0x24a7,
-0x24a8,0x24a9,0x24aa,0x24ab,0x24ac,0x24ad,0x24ae,0x24af,
-0x24b0,0x24b1,0x24b2,0x24b3,0x24b4,0x24b5,0x2474,0x2475,
-0x2476,0x2477,0x2478,0x2479,0x247a,0x247b,0x247c,0x247d,
-0x247e,0x247f,0x2480,0x2481,0x2482,0x00b9,0x00b2,0x00b3,
-0x2074,0x207f,0x2081,0x2082,0x2083,0x2084,0xcc25,0xcc26,
-0xcc2a,0xcc2b,0xcc2d,0xcc2f,0xcc31,0xcc32,0xcc33,0xcc34,
-0xcc35,0xcc36,0xcc37,0xcc3a,0xcc3f,0xcc40,0xcc41,0xcc42,
-0xcc43,0xcc46,0xcc47,0xcc49,0xcc4a,0xcc4b,0xcc4d,0xcc4e,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xcc4f,0xcc50,
-0xcc51,0xcc52,0xcc53,0xcc56,0xcc5a,0xcc5b,0xcc5c,0xcc5d,
-0xcc5e,0xcc5f,0xcc61,0xcc62,0xcc63,0xcc65,0xcc67,0xcc69,
-0xcc6a,0xcc6b,0xcc6c,0xcc6d,0xcc6e,0xcc6f,0xcc71,0xcc72,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xcc73,0xcc74,
-0xcc76,0xcc77,0xcc78,0xcc79,0xcc7a,0xcc7b,0xcc7c,0xcc7d,
-0xcc7e,0xcc7f,0xcc80,0xcc81,0xcc82,0xcc83,0xcc84,0xcc85,
-0xcc86,0xcc87,0xcc88,0xcc89,0xcc8a,0xcc8b,0xcc8c,0xcc8d,
-0xcc8e,0xcc8f,0xcc90,0xcc91,0xcc92,0xcc93,0x3041,0x3042,
-0x3043,0x3044,0x3045,0x3046,0x3047,0x3048,0x3049,0x304a,
-0x304b,0x304c,0x304d,0x304e,0x304f,0x3050,0x3051,0x3052,
-0x3053,0x3054,0x3055,0x3056,0x3057,0x3058,0x3059,0x305a,
-0x305b,0x305c,0x305d,0x305e,0x305f,0x3060,0x3061,0x3062,
-0x3063,0x3064,0x3065,0x3066,0x3067,0x3068,0x3069,0x306a,
-0x306b,0x306c,0x306d,0x306e,0x306f,0x3070,0x3071,0x3072,
-0x3073,0x3074,0x3075,0x3076,0x3077,0x3078,0x3079,0x307a,
-0x307b,0x307c,0x307d,0x307e,0x307f,0x3080,0x3081,0x3082,
-0x3083,0x3084,0x3085,0x3086,0x3087,0x3088,0x3089,0x308a,
-0x308b,0x308c,0x308d,0x308e,0x308f,0x3090,0x3091,0x3092,
-0x3093,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xcc94,0xcc95,0xcc96,0xcc97,
-0xcc9a,0xcc9b,0xcc9d,0xcc9e,0xcc9f,0xcca1,0xcca2,0xcca3,
-0xcca4,0xcca5,0xcca6,0xcca7,0xccaa,0xccae,0xccaf,0xccb0,
-0xccb1,0xccb2,0xccb3,0xccb6,0xccb7,0xccb9,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xccba,0xccbb,0xccbd,0xccbe,
-0xccbf,0xccc0,0xccc1,0xccc2,0xccc3,0xccc6,0xccc8,0xccca,
-0xcccb,0xcccc,0xcccd,0xccce,0xcccf,0xccd1,0xccd2,0xccd3,
-0xccd5,0xccd6,0xccd7,0xccd8,0xccd9,0xccda,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xccdb,0xccdc,0xccdd,0xccde,
-0xccdf,0xcce0,0xcce1,0xcce2,0xcce3,0xcce5,0xcce6,0xcce7,
-0xcce8,0xcce9,0xccea,0xcceb,0xcced,0xccee,0xccef,0xccf1,
-0xccf2,0xccf3,0xccf4,0xccf5,0xccf6,0xccf7,0xccf8,0xccf9,
-0xccfa,0xccfb,0xccfc,0xccfd,0x30a1,0x30a2,0x30a3,0x30a4,
-0x30a5,0x30a6,0x30a7,0x30a8,0x30a9,0x30aa,0x30ab,0x30ac,
-0x30ad,0x30ae,0x30af,0x30b0,0x30b1,0x30b2,0x30b3,0x30b4,
-0x30b5,0x30b6,0x30b7,0x30b8,0x30b9,0x30ba,0x30bb,0x30bc,
-0x30bd,0x30be,0x30bf,0x30c0,0x30c1,0x30c2,0x30c3,0x30c4,
-0x30c5,0x30c6,0x30c7,0x30c8,0x30c9,0x30ca,0x30cb,0x30cc,
-0x30cd,0x30ce,0x30cf,0x30d0,0x30d1,0x30d2,0x30d3,0x30d4,
-0x30d5,0x30d6,0x30d7,0x30d8,0x30d9,0x30da,0x30db,0x30dc,
-0x30dd,0x30de,0x30df,0x30e0,0x30e1,0x30e2,0x30e3,0x30e4,
-0x30e5,0x30e6,0x30e7,0x30e8,0x30e9,0x30ea,0x30eb,0x30ec,
-0x30ed,0x30ee,0x30ef,0x30f0,0x30f1,0x30f2,0x30f3,0x30f4,
-0x30f5,0x30f6,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xccfe,0xccff,0xcd00,0xcd02,0xcd03,0xcd04,
-0xcd05,0xcd06,0xcd07,0xcd0a,0xcd0b,0xcd0d,0xcd0e,0xcd0f,
-0xcd11,0xcd12,0xcd13,0xcd14,0xcd15,0xcd16,0xcd17,0xcd1a,
-0xcd1c,0xcd1e,0xcd1f,0xcd20,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xcd21,0xcd22,0xcd23,0xcd25,0xcd26,0xcd27,
-0xcd29,0xcd2a,0xcd2b,0xcd2d,0xcd2e,0xcd2f,0xcd30,0xcd31,
-0xcd32,0xcd33,0xcd34,0xcd35,0xcd36,0xcd37,0xcd38,0xcd3a,
-0xcd3b,0xcd3c,0xcd3d,0xcd3e,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xcd3f,0xcd40,0xcd41,0xcd42,0xcd43,0xcd44,
-0xcd45,0xcd46,0xcd47,0xcd48,0xcd49,0xcd4a,0xcd4b,0xcd4c,
-0xcd4d,0xcd4e,0xcd4f,0xcd50,0xcd51,0xcd52,0xcd53,0xcd54,
-0xcd55,0xcd56,0xcd57,0xcd58,0xcd59,0xcd5a,0xcd5b,0xcd5d,
-0xcd5e,0xcd5f,0x0410,0x0411,0x0412,0x0413,0x0414,0x0415,
-0x0401,0x0416,0x0417,0x0418,0x0419,0x041a,0x041b,0x041c,
-0x041d,0x041e,0x041f,0x0420,0x0421,0x0422,0x0423,0x0424,
-0x0425,0x0426,0x0427,0x0428,0x0429,0x042a,0x042b,0x042c,
-0x042d,0x042e,0x042f,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0430,0x0431,0x0432,0x0433,0x0434,0x0435,
-0x0451,0x0436,0x0437,0x0438,0x0439,0x043a,0x043b,0x043c,
-0x043d,0x043e,0x043f,0x0440,0x0441,0x0442,0x0443,0x0444,
-0x0445,0x0446,0x0447,0x0448,0x0449,0x044a,0x044b,0x044c,
-0x044d,0x044e,0x044f,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xcd61,0xcd62,0xcd63,0xcd65,0xcd66,0xcd67,0xcd68,0xcd69,
-0xcd6a,0xcd6b,0xcd6e,0xcd70,0xcd72,0xcd73,0xcd74,0xcd75,
-0xcd76,0xcd77,0xcd79,0xcd7a,0xcd7b,0xcd7c,0xcd7d,0xcd7e,
-0xcd7f,0xcd80,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xcd81,0xcd82,0xcd83,0xcd84,0xcd85,0xcd86,0xcd87,0xcd89,
-0xcd8a,0xcd8b,0xcd8c,0xcd8d,0xcd8e,0xcd8f,0xcd90,0xcd91,
-0xcd92,0xcd93,0xcd96,0xcd97,0xcd99,0xcd9a,0xcd9b,0xcd9d,
-0xcd9e,0xcd9f,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xcda0,0xcda1,0xcda2,0xcda3,0xcda6,0xcda8,0xcdaa,0xcdab,
-0xcdac,0xcdad,0xcdae,0xcdaf,0xcdb1,0xcdb2,0xcdb3,0xcdb4,
-0xcdb5,0xcdb6,0xcdb7,0xcdb8,0xcdb9,0xcdba,0xcdbb,0xcdbc,
-0xcdbd,0xcdbe,0xcdbf,0xcdc0,0xcdc1,0xcdc2,0xcdc3,0xcdc5,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xcdc6,0xcdc7,
-0xcdc8,0xcdc9,0xcdca,0xcdcb,0xcdcd,0xcdce,0xcdcf,0xcdd1,
-0xcdd2,0xcdd3,0xcdd4,0xcdd5,0xcdd6,0xcdd7,0xcdd8,0xcdd9,
-0xcdda,0xcddb,0xcddc,0xcddd,0xcdde,0xcddf,0xcde0,0xcde1,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xcde2,0xcde3,
-0xcde4,0xcde5,0xcde6,0xcde7,0xcde9,0xcdea,0xcdeb,0xcded,
-0xcdee,0xcdef,0xcdf1,0xcdf2,0xcdf3,0xcdf4,0xcdf5,0xcdf6,
-0xcdf7,0xcdfa,0xcdfc,0xcdfe,0xcdff,0xce00,0xce01,0xce02,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xce03,0xce05,
-0xce06,0xce07,0xce09,0xce0a,0xce0b,0xce0d,0xce0e,0xce0f,
-0xce10,0xce11,0xce12,0xce13,0xce15,0xce16,0xce17,0xce18,
-0xce1a,0xce1b,0xce1c,0xce1d,0xce1e,0xce1f,0xce22,0xce23,
-0xce25,0xce26,0xce27,0xce29,0xce2a,0xce2b,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xce2c,0xce2d,0xce2e,0xce2f,
-0xce32,0xce34,0xce36,0xce37,0xce38,0xce39,0xce3a,0xce3b,
-0xce3c,0xce3d,0xce3e,0xce3f,0xce40,0xce41,0xce42,0xce43,
-0xce44,0xce45,0xce46,0xce47,0xce48,0xce49,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xce4a,0xce4b,0xce4c,0xce4d,
-0xce4e,0xce4f,0xce50,0xce51,0xce52,0xce53,0xce54,0xce55,
-0xce56,0xce57,0xce5a,0xce5b,0xce5d,0xce5e,0xce62,0xce63,
-0xce64,0xce65,0xce66,0xce67,0xce6a,0xce6c,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xce6e,0xce6f,0xce70,0xce71,
-0xce72,0xce73,0xce76,0xce77,0xce79,0xce7a,0xce7b,0xce7d,
-0xce7e,0xce7f,0xce80,0xce81,0xce82,0xce83,0xce86,0xce88,
-0xce8a,0xce8b,0xce8c,0xce8d,0xce8e,0xce8f,0xce92,0xce93,
-0xce95,0xce96,0xce97,0xce99,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xce9a,0xce9b,0xce9c,0xce9d,0xce9e,0xce9f,
-0xcea2,0xcea6,0xcea7,0xcea8,0xcea9,0xceaa,0xceab,0xceae,
-0xceaf,0xceb0,0xceb1,0xceb2,0xceb3,0xceb4,0xceb5,0xceb6,
-0xceb7,0xceb8,0xceb9,0xceba,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xcebb,0xcebc,0xcebd,0xcebe,0xcebf,0xcec0,
-0xcec2,0xcec3,0xcec4,0xcec5,0xcec6,0xcec7,0xcec8,0xcec9,
-0xceca,0xcecb,0xcecc,0xcecd,0xcece,0xcecf,0xced0,0xced1,
-0xced2,0xced3,0xced4,0xced5,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xced6,0xced7,0xced8,0xced9,0xceda,0xcedb,
-0xcedc,0xcedd,0xcede,0xcedf,0xcee0,0xcee1,0xcee2,0xcee3,
-0xcee6,0xcee7,0xcee9,0xceea,0xceed,0xceee,0xceef,0xcef0,
-0xcef1,0xcef2,0xcef3,0xcef6,0xcefa,0xcefb,0xcefc,0xcefd,
-0xcefe,0xceff,0xac00,0xac01,0xac04,0xac07,0xac08,0xac09,
-0xac0a,0xac10,0xac11,0xac12,0xac13,0xac14,0xac15,0xac16,
-0xac17,0xac19,0xac1a,0xac1b,0xac1c,0xac1d,0xac20,0xac24,
-0xac2c,0xac2d,0xac2f,0xac30,0xac31,0xac38,0xac39,0xac3c,
-0xac40,0xac4b,0xac4d,0xac54,0xac58,0xac5c,0xac70,0xac71,
-0xac74,0xac77,0xac78,0xac7a,0xac80,0xac81,0xac83,0xac84,
-0xac85,0xac86,0xac89,0xac8a,0xac8b,0xac8c,0xac90,0xac94,
-0xac9c,0xac9d,0xac9f,0xaca0,0xaca1,0xaca8,0xaca9,0xacaa,
-0xacac,0xacaf,0xacb0,0xacb8,0xacb9,0xacbb,0xacbc,0xacbd,
-0xacc1,0xacc4,0xacc8,0xaccc,0xacd5,0xacd7,0xace0,0xace1,
-0xace4,0xace7,0xace8,0xacea,0xacec,0xacef,0xacf0,0xacf1,
-0xacf3,0xacf5,0xacf6,0xacfc,0xacfd,0xad00,0xad04,0xad06,
-0xcf02,0xcf03,0xcf05,0xcf06,0xcf07,0xcf09,0xcf0a,0xcf0b,
-0xcf0c,0xcf0d,0xcf0e,0xcf0f,0xcf12,0xcf14,0xcf16,0xcf17,
-0xcf18,0xcf19,0xcf1a,0xcf1b,0xcf1d,0xcf1e,0xcf1f,0xcf21,
-0xcf22,0xcf23,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xcf25,0xcf26,0xcf27,0xcf28,0xcf29,0xcf2a,0xcf2b,0xcf2e,
-0xcf32,0xcf33,0xcf34,0xcf35,0xcf36,0xcf37,0xcf39,0xcf3a,
-0xcf3b,0xcf3c,0xcf3d,0xcf3e,0xcf3f,0xcf40,0xcf41,0xcf42,
-0xcf43,0xcf44,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xcf45,0xcf46,0xcf47,0xcf48,0xcf49,0xcf4a,0xcf4b,0xcf4c,
-0xcf4d,0xcf4e,0xcf4f,0xcf50,0xcf51,0xcf52,0xcf53,0xcf56,
-0xcf57,0xcf59,0xcf5a,0xcf5b,0xcf5d,0xcf5e,0xcf5f,0xcf60,
-0xcf61,0xcf62,0xcf63,0xcf66,0xcf68,0xcf6a,0xcf6b,0xcf6c,
-0xad0c,0xad0d,0xad0f,0xad11,0xad18,0xad1c,0xad20,0xad29,
-0xad2c,0xad2d,0xad34,0xad35,0xad38,0xad3c,0xad44,0xad45,
-0xad47,0xad49,0xad50,0xad54,0xad58,0xad61,0xad63,0xad6c,
-0xad6d,0xad70,0xad73,0xad74,0xad75,0xad76,0xad7b,0xad7c,
-0xad7d,0xad7f,0xad81,0xad82,0xad88,0xad89,0xad8c,0xad90,
-0xad9c,0xad9d,0xada4,0xadb7,0xadc0,0xadc1,0xadc4,0xadc8,
-0xadd0,0xadd1,0xadd3,0xaddc,0xade0,0xade4,0xadf8,0xadf9,
-0xadfc,0xadff,0xae00,0xae01,0xae08,0xae09,0xae0b,0xae0d,
-0xae14,0xae30,0xae31,0xae34,0xae37,0xae38,0xae3a,0xae40,
-0xae41,0xae43,0xae45,0xae46,0xae4a,0xae4c,0xae4d,0xae4e,
-0xae50,0xae54,0xae56,0xae5c,0xae5d,0xae5f,0xae60,0xae61,
-0xae65,0xae68,0xae69,0xae6c,0xae70,0xae78,0xcf6d,0xcf6e,
-0xcf6f,0xcf72,0xcf73,0xcf75,0xcf76,0xcf77,0xcf79,0xcf7a,
-0xcf7b,0xcf7c,0xcf7d,0xcf7e,0xcf7f,0xcf81,0xcf82,0xcf83,
-0xcf84,0xcf86,0xcf87,0xcf88,0xcf89,0xcf8a,0xcf8b,0xcf8d,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xcf8e,0xcf8f,
-0xcf90,0xcf91,0xcf92,0xcf93,0xcf94,0xcf95,0xcf96,0xcf97,
-0xcf98,0xcf99,0xcf9a,0xcf9b,0xcf9c,0xcf9d,0xcf9e,0xcf9f,
-0xcfa0,0xcfa2,0xcfa3,0xcfa4,0xcfa5,0xcfa6,0xcfa7,0xcfa9,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xcfaa,0xcfab,
-0xcfac,0xcfad,0xcfae,0xcfaf,0xcfb1,0xcfb2,0xcfb3,0xcfb4,
-0xcfb5,0xcfb6,0xcfb7,0xcfb8,0xcfb9,0xcfba,0xcfbb,0xcfbc,
-0xcfbd,0xcfbe,0xcfbf,0xcfc0,0xcfc1,0xcfc2,0xcfc3,0xcfc5,
-0xcfc6,0xcfc7,0xcfc8,0xcfc9,0xcfca,0xcfcb,0xae79,0xae7b,
-0xae7c,0xae7d,0xae84,0xae85,0xae8c,0xaebc,0xaebd,0xaebe,
-0xaec0,0xaec4,0xaecc,0xaecd,0xaecf,0xaed0,0xaed1,0xaed8,
-0xaed9,0xaedc,0xaee8,0xaeeb,0xaeed,0xaef4,0xaef8,0xaefc,
-0xaf07,0xaf08,0xaf0d,0xaf10,0xaf2c,0xaf2d,0xaf30,0xaf32,
-0xaf34,0xaf3c,0xaf3d,0xaf3f,0xaf41,0xaf42,0xaf43,0xaf48,
-0xaf49,0xaf50,0xaf5c,0xaf5d,0xaf64,0xaf65,0xaf79,0xaf80,
-0xaf84,0xaf88,0xaf90,0xaf91,0xaf95,0xaf9c,0xafb8,0xafb9,
-0xafbc,0xafc0,0xafc7,0xafc8,0xafc9,0xafcb,0xafcd,0xafce,
-0xafd4,0xafdc,0xafe8,0xafe9,0xaff0,0xaff1,0xaff4,0xaff8,
-0xb000,0xb001,0xb004,0xb00c,0xb010,0xb014,0xb01c,0xb01d,
-0xb028,0xb044,0xb045,0xb048,0xb04a,0xb04c,0xb04e,0xb053,
-0xb054,0xb055,0xb057,0xb059,0xcfcc,0xcfcd,0xcfce,0xcfcf,
-0xcfd0,0xcfd1,0xcfd2,0xcfd3,0xcfd4,0xcfd5,0xcfd6,0xcfd7,
-0xcfd8,0xcfd9,0xcfda,0xcfdb,0xcfdc,0xcfdd,0xcfde,0xcfdf,
-0xcfe2,0xcfe3,0xcfe5,0xcfe6,0xcfe7,0xcfe9,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xcfea,0xcfeb,0xcfec,0xcfed,
-0xcfee,0xcfef,0xcff2,0xcff4,0xcff6,0xcff7,0xcff8,0xcff9,
-0xcffa,0xcffb,0xcffd,0xcffe,0xcfff,0xd001,0xd002,0xd003,
-0xd005,0xd006,0xd007,0xd008,0xd009,0xd00a,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xd00b,0xd00c,0xd00d,0xd00e,
-0xd00f,0xd010,0xd012,0xd013,0xd014,0xd015,0xd016,0xd017,
-0xd019,0xd01a,0xd01b,0xd01c,0xd01d,0xd01e,0xd01f,0xd020,
-0xd021,0xd022,0xd023,0xd024,0xd025,0xd026,0xd027,0xd028,
-0xd029,0xd02a,0xd02b,0xd02c,0xb05d,0xb07c,0xb07d,0xb080,
-0xb084,0xb08c,0xb08d,0xb08f,0xb091,0xb098,0xb099,0xb09a,
-0xb09c,0xb09f,0xb0a0,0xb0a1,0xb0a2,0xb0a8,0xb0a9,0xb0ab,
-0xb0ac,0xb0ad,0xb0ae,0xb0af,0xb0b1,0xb0b3,0xb0b4,0xb0b5,
-0xb0b8,0xb0bc,0xb0c4,0xb0c5,0xb0c7,0xb0c8,0xb0c9,0xb0d0,
-0xb0d1,0xb0d4,0xb0d8,0xb0e0,0xb0e5,0xb108,0xb109,0xb10b,
-0xb10c,0xb110,0xb112,0xb113,0xb118,0xb119,0xb11b,0xb11c,
-0xb11d,0xb123,0xb124,0xb125,0xb128,0xb12c,0xb134,0xb135,
-0xb137,0xb138,0xb139,0xb140,0xb141,0xb144,0xb148,0xb150,
-0xb151,0xb154,0xb155,0xb158,0xb15c,0xb160,0xb178,0xb179,
-0xb17c,0xb180,0xb182,0xb188,0xb189,0xb18b,0xb18d,0xb192,
-0xb193,0xb194,0xb198,0xb19c,0xb1a8,0xb1cc,0xb1d0,0xb1d4,
-0xb1dc,0xb1dd,0xd02e,0xd02f,0xd030,0xd031,0xd032,0xd033,
-0xd036,0xd037,0xd039,0xd03a,0xd03b,0xd03d,0xd03e,0xd03f,
-0xd040,0xd041,0xd042,0xd043,0xd046,0xd048,0xd04a,0xd04b,
-0xd04c,0xd04d,0xd04e,0xd04f,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xd051,0xd052,0xd053,0xd055,0xd056,0xd057,
-0xd059,0xd05a,0xd05b,0xd05c,0xd05d,0xd05e,0xd05f,0xd061,
-0xd062,0xd063,0xd064,0xd065,0xd066,0xd067,0xd068,0xd069,
-0xd06a,0xd06b,0xd06e,0xd06f,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xd071,0xd072,0xd073,0xd075,0xd076,0xd077,
-0xd078,0xd079,0xd07a,0xd07b,0xd07e,0xd07f,0xd080,0xd082,
-0xd083,0xd084,0xd085,0xd086,0xd087,0xd088,0xd089,0xd08a,
-0xd08b,0xd08c,0xd08d,0xd08e,0xd08f,0xd090,0xd091,0xd092,
-0xd093,0xd094,0xb1df,0xb1e8,0xb1e9,0xb1ec,0xb1f0,0xb1f9,
-0xb1fb,0xb1fd,0xb204,0xb205,0xb208,0xb20b,0xb20c,0xb214,
-0xb215,0xb217,0xb219,0xb220,0xb234,0xb23c,0xb258,0xb25c,
-0xb260,0xb268,0xb269,0xb274,0xb275,0xb27c,0xb284,0xb285,
-0xb289,0xb290,0xb291,0xb294,0xb298,0xb299,0xb29a,0xb2a0,
-0xb2a1,0xb2a3,0xb2a5,0xb2a6,0xb2aa,0xb2ac,0xb2b0,0xb2b4,
-0xb2c8,0xb2c9,0xb2cc,0xb2d0,0xb2d2,0xb2d8,0xb2d9,0xb2db,
-0xb2dd,0xb2e2,0xb2e4,0xb2e5,0xb2e6,0xb2e8,0xb2eb,0xb2ec,
-0xb2ed,0xb2ee,0xb2ef,0xb2f3,0xb2f4,0xb2f5,0xb2f7,0xb2f8,
-0xb2f9,0xb2fa,0xb2fb,0xb2ff,0xb300,0xb301,0xb304,0xb308,
-0xb310,0xb311,0xb313,0xb314,0xb315,0xb31c,0xb354,0xb355,
-0xb356,0xb358,0xb35b,0xb35c,0xb35e,0xb35f,0xb364,0xb365,
-0xd095,0xd096,0xd097,0xd098,0xd099,0xd09a,0xd09b,0xd09c,
-0xd09d,0xd09e,0xd09f,0xd0a0,0xd0a1,0xd0a2,0xd0a3,0xd0a6,
-0xd0a7,0xd0a9,0xd0aa,0xd0ab,0xd0ad,0xd0ae,0xd0af,0xd0b0,
-0xd0b1,0xd0b2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xd0b3,0xd0b6,0xd0b8,0xd0ba,0xd0bb,0xd0bc,0xd0bd,0xd0be,
-0xd0bf,0xd0c2,0xd0c3,0xd0c5,0xd0c6,0xd0c7,0xd0ca,0xd0cb,
-0xd0cc,0xd0cd,0xd0ce,0xd0cf,0xd0d2,0xd0d6,0xd0d7,0xd0d8,
-0xd0d9,0xd0da,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xd0db,0xd0de,0xd0df,0xd0e1,0xd0e2,0xd0e3,0xd0e5,0xd0e6,
-0xd0e7,0xd0e8,0xd0e9,0xd0ea,0xd0eb,0xd0ee,0xd0f2,0xd0f3,
-0xd0f4,0xd0f5,0xd0f6,0xd0f7,0xd0f9,0xd0fa,0xd0fb,0xd0fc,
-0xd0fd,0xd0fe,0xd0ff,0xd100,0xd101,0xd102,0xd103,0xd104,
-0xb367,0xb369,0xb36b,0xb36e,0xb370,0xb371,0xb374,0xb378,
-0xb380,0xb381,0xb383,0xb384,0xb385,0xb38c,0xb390,0xb394,
-0xb3a0,0xb3a1,0xb3a8,0xb3ac,0xb3c4,0xb3c5,0xb3c8,0xb3cb,
-0xb3cc,0xb3ce,0xb3d0,0xb3d4,0xb3d5,0xb3d7,0xb3d9,0xb3db,
-0xb3dd,0xb3e0,0xb3e4,0xb3e8,0xb3fc,0xb410,0xb418,0xb41c,
-0xb420,0xb428,0xb429,0xb42b,0xb434,0xb450,0xb451,0xb454,
-0xb458,0xb460,0xb461,0xb463,0xb465,0xb46c,0xb480,0xb488,
-0xb49d,0xb4a4,0xb4a8,0xb4ac,0xb4b5,0xb4b7,0xb4b9,0xb4c0,
-0xb4c4,0xb4c8,0xb4d0,0xb4d5,0xb4dc,0xb4dd,0xb4e0,0xb4e3,
-0xb4e4,0xb4e6,0xb4ec,0xb4ed,0xb4ef,0xb4f1,0xb4f8,0xb514,
-0xb515,0xb518,0xb51b,0xb51c,0xb524,0xb525,0xb527,0xb528,
-0xb529,0xb52a,0xb530,0xb531,0xb534,0xb538,0xd105,0xd106,
-0xd107,0xd108,0xd109,0xd10a,0xd10b,0xd10c,0xd10e,0xd10f,
-0xd110,0xd111,0xd112,0xd113,0xd114,0xd115,0xd116,0xd117,
-0xd118,0xd119,0xd11a,0xd11b,0xd11c,0xd11d,0xd11e,0xd11f,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xd120,0xd121,
-0xd122,0xd123,0xd124,0xd125,0xd126,0xd127,0xd128,0xd129,
-0xd12a,0xd12b,0xd12c,0xd12d,0xd12e,0xd12f,0xd132,0xd133,
-0xd135,0xd136,0xd137,0xd139,0xd13b,0xd13c,0xd13d,0xd13e,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xd13f,0xd142,
-0xd146,0xd147,0xd148,0xd149,0xd14a,0xd14b,0xd14e,0xd14f,
-0xd151,0xd152,0xd153,0xd155,0xd156,0xd157,0xd158,0xd159,
-0xd15a,0xd15b,0xd15e,0xd160,0xd162,0xd163,0xd164,0xd165,
-0xd166,0xd167,0xd169,0xd16a,0xd16b,0xd16d,0xb540,0xb541,
-0xb543,0xb544,0xb545,0xb54b,0xb54c,0xb54d,0xb550,0xb554,
-0xb55c,0xb55d,0xb55f,0xb560,0xb561,0xb5a0,0xb5a1,0xb5a4,
-0xb5a8,0xb5aa,0xb5ab,0xb5b0,0xb5b1,0xb5b3,0xb5b4,0xb5b5,
-0xb5bb,0xb5bc,0xb5bd,0xb5c0,0xb5c4,0xb5cc,0xb5cd,0xb5cf,
-0xb5d0,0xb5d1,0xb5d8,0xb5ec,0xb610,0xb611,0xb614,0xb618,
-0xb625,0xb62c,0xb634,0xb648,0xb664,0xb668,0xb69c,0xb69d,
-0xb6a0,0xb6a4,0xb6ab,0xb6ac,0xb6b1,0xb6d4,0xb6f0,0xb6f4,
-0xb6f8,0xb700,0xb701,0xb705,0xb728,0xb729,0xb72c,0xb72f,
-0xb730,0xb738,0xb739,0xb73b,0xb744,0xb748,0xb74c,0xb754,
-0xb755,0xb760,0xb764,0xb768,0xb770,0xb771,0xb773,0xb775,
-0xb77c,0xb77d,0xb780,0xb784,0xb78c,0xb78d,0xb78f,0xb790,
-0xb791,0xb792,0xb796,0xb797,0xd16e,0xd16f,0xd170,0xd171,
-0xd172,0xd173,0xd174,0xd175,0xd176,0xd177,0xd178,0xd179,
-0xd17a,0xd17b,0xd17d,0xd17e,0xd17f,0xd180,0xd181,0xd182,
-0xd183,0xd185,0xd186,0xd187,0xd189,0xd18a,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xd18b,0xd18c,0xd18d,0xd18e,
-0xd18f,0xd190,0xd191,0xd192,0xd193,0xd194,0xd195,0xd196,
-0xd197,0xd198,0xd199,0xd19a,0xd19b,0xd19c,0xd19d,0xd19e,
-0xd19f,0xd1a2,0xd1a3,0xd1a5,0xd1a6,0xd1a7,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xd1a9,0xd1aa,0xd1ab,0xd1ac,
-0xd1ad,0xd1ae,0xd1af,0xd1b2,0xd1b4,0xd1b6,0xd1b7,0xd1b8,
-0xd1b9,0xd1bb,0xd1bd,0xd1be,0xd1bf,0xd1c1,0xd1c2,0xd1c3,
-0xd1c4,0xd1c5,0xd1c6,0xd1c7,0xd1c8,0xd1c9,0xd1ca,0xd1cb,
-0xd1cc,0xd1cd,0xd1ce,0xd1cf,0xb798,0xb799,0xb79c,0xb7a0,
-0xb7a8,0xb7a9,0xb7ab,0xb7ac,0xb7ad,0xb7b4,0xb7b5,0xb7b8,
-0xb7c7,0xb7c9,0xb7ec,0xb7ed,0xb7f0,0xb7f4,0xb7fc,0xb7fd,
-0xb7ff,0xb800,0xb801,0xb807,0xb808,0xb809,0xb80c,0xb810,
-0xb818,0xb819,0xb81b,0xb81d,0xb824,0xb825,0xb828,0xb82c,
-0xb834,0xb835,0xb837,0xb838,0xb839,0xb840,0xb844,0xb851,
-0xb853,0xb85c,0xb85d,0xb860,0xb864,0xb86c,0xb86d,0xb86f,
-0xb871,0xb878,0xb87c,0xb88d,0xb8a8,0xb8b0,0xb8b4,0xb8b8,
-0xb8c0,0xb8c1,0xb8c3,0xb8c5,0xb8cc,0xb8d0,0xb8d4,0xb8dd,
-0xb8df,0xb8e1,0xb8e8,0xb8e9,0xb8ec,0xb8f0,0xb8f8,0xb8f9,
-0xb8fb,0xb8fd,0xb904,0xb918,0xb920,0xb93c,0xb93d,0xb940,
-0xb944,0xb94c,0xb94f,0xb951,0xb958,0xb959,0xb95c,0xb960,
-0xb968,0xb969,0xd1d0,0xd1d1,0xd1d2,0xd1d3,0xd1d4,0xd1d5,
-0xd1d6,0xd1d7,0xd1d9,0xd1da,0xd1db,0xd1dc,0xd1dd,0xd1de,
-0xd1df,0xd1e0,0xd1e1,0xd1e2,0xd1e3,0xd1e4,0xd1e5,0xd1e6,
-0xd1e7,0xd1e8,0xd1e9,0xd1ea,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xd1eb,0xd1ec,0xd1ed,0xd1ee,0xd1ef,0xd1f0,
-0xd1f1,0xd1f2,0xd1f3,0xd1f5,0xd1f6,0xd1f7,0xd1f9,0xd1fa,
-0xd1fb,0xd1fc,0xd1fd,0xd1fe,0xd1ff,0xd200,0xd201,0xd202,
-0xd203,0xd204,0xd205,0xd206,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xd208,0xd20a,0xd20b,0xd20c,0xd20d,0xd20e,
-0xd20f,0xd211,0xd212,0xd213,0xd214,0xd215,0xd216,0xd217,
-0xd218,0xd219,0xd21a,0xd21b,0xd21c,0xd21d,0xd21e,0xd21f,
-0xd220,0xd221,0xd222,0xd223,0xd224,0xd225,0xd226,0xd227,
-0xd228,0xd229,0xb96b,0xb96d,0xb974,0xb975,0xb978,0xb97c,
-0xb984,0xb985,0xb987,0xb989,0xb98a,0xb98d,0xb98e,0xb9ac,
-0xb9ad,0xb9b0,0xb9b4,0xb9bc,0xb9bd,0xb9bf,0xb9c1,0xb9c8,
-0xb9c9,0xb9cc,0xb9ce,0xb9cf,0xb9d0,0xb9d1,0xb9d2,0xb9d8,
-0xb9d9,0xb9db,0xb9dd,0xb9de,0xb9e1,0xb9e3,0xb9e4,0xb9e5,
-0xb9e8,0xb9ec,0xb9f4,0xb9f5,0xb9f7,0xb9f8,0xb9f9,0xb9fa,
-0xba00,0xba01,0xba08,0xba15,0xba38,0xba39,0xba3c,0xba40,
-0xba42,0xba48,0xba49,0xba4b,0xba4d,0xba4e,0xba53,0xba54,
-0xba55,0xba58,0xba5c,0xba64,0xba65,0xba67,0xba68,0xba69,
-0xba70,0xba71,0xba74,0xba78,0xba83,0xba84,0xba85,0xba87,
-0xba8c,0xbaa8,0xbaa9,0xbaab,0xbaac,0xbab0,0xbab2,0xbab8,
-0xbab9,0xbabb,0xbabd,0xbac4,0xbac8,0xbad8,0xbad9,0xbafc,
-0xd22a,0xd22b,0xd22e,0xd22f,0xd231,0xd232,0xd233,0xd235,
-0xd236,0xd237,0xd238,0xd239,0xd23a,0xd23b,0xd23e,0xd240,
-0xd242,0xd243,0xd244,0xd245,0xd246,0xd247,0xd249,0xd24a,
-0xd24b,0xd24c,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xd24d,0xd24e,0xd24f,0xd250,0xd251,0xd252,0xd253,0xd254,
-0xd255,0xd256,0xd257,0xd258,0xd259,0xd25a,0xd25b,0xd25d,
-0xd25e,0xd25f,0xd260,0xd261,0xd262,0xd263,0xd265,0xd266,
-0xd267,0xd268,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xd269,0xd26a,0xd26b,0xd26c,0xd26d,0xd26e,0xd26f,0xd270,
-0xd271,0xd272,0xd273,0xd274,0xd275,0xd276,0xd277,0xd278,
-0xd279,0xd27a,0xd27b,0xd27c,0xd27d,0xd27e,0xd27f,0xd282,
-0xd283,0xd285,0xd286,0xd287,0xd289,0xd28a,0xd28b,0xd28c,
-0xbb00,0xbb04,0xbb0d,0xbb0f,0xbb11,0xbb18,0xbb1c,0xbb20,
-0xbb29,0xbb2b,0xbb34,0xbb35,0xbb36,0xbb38,0xbb3b,0xbb3c,
-0xbb3d,0xbb3e,0xbb44,0xbb45,0xbb47,0xbb49,0xbb4d,0xbb4f,
-0xbb50,0xbb54,0xbb58,0xbb61,0xbb63,0xbb6c,0xbb88,0xbb8c,
-0xbb90,0xbba4,0xbba8,0xbbac,0xbbb4,0xbbb7,0xbbc0,0xbbc4,
-0xbbc8,0xbbd0,0xbbd3,0xbbf8,0xbbf9,0xbbfc,0xbbff,0xbc00,
-0xbc02,0xbc08,0xbc09,0xbc0b,0xbc0c,0xbc0d,0xbc0f,0xbc11,
-0xbc14,0xbc15,0xbc16,0xbc17,0xbc18,0xbc1b,0xbc1c,0xbc1d,
-0xbc1e,0xbc1f,0xbc24,0xbc25,0xbc27,0xbc29,0xbc2d,0xbc30,
-0xbc31,0xbc34,0xbc38,0xbc40,0xbc41,0xbc43,0xbc44,0xbc45,
-0xbc49,0xbc4c,0xbc4d,0xbc50,0xbc5d,0xbc84,0xbc85,0xbc88,
-0xbc8b,0xbc8c,0xbc8e,0xbc94,0xbc95,0xbc97,0xd28d,0xd28e,
-0xd28f,0xd292,0xd293,0xd294,0xd296,0xd297,0xd298,0xd299,
-0xd29a,0xd29b,0xd29d,0xd29e,0xd29f,0xd2a1,0xd2a2,0xd2a3,
-0xd2a5,0xd2a6,0xd2a7,0xd2a8,0xd2a9,0xd2aa,0xd2ab,0xd2ad,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xd2ae,0xd2af,
-0xd2b0,0xd2b2,0xd2b3,0xd2b4,0xd2b5,0xd2b6,0xd2b7,0xd2ba,
-0xd2bb,0xd2bd,0xd2be,0xd2c1,0xd2c3,0xd2c4,0xd2c5,0xd2c6,
-0xd2c7,0xd2ca,0xd2cc,0xd2cd,0xd2ce,0xd2cf,0xd2d0,0xd2d1,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xd2d2,0xd2d3,
-0xd2d5,0xd2d6,0xd2d7,0xd2d9,0xd2da,0xd2db,0xd2dd,0xd2de,
-0xd2df,0xd2e0,0xd2e1,0xd2e2,0xd2e3,0xd2e6,0xd2e7,0xd2e8,
-0xd2e9,0xd2ea,0xd2eb,0xd2ec,0xd2ed,0xd2ee,0xd2ef,0xd2f2,
-0xd2f3,0xd2f5,0xd2f6,0xd2f7,0xd2f9,0xd2fa,0xbc99,0xbc9a,
-0xbca0,0xbca1,0xbca4,0xbca7,0xbca8,0xbcb0,0xbcb1,0xbcb3,
-0xbcb4,0xbcb5,0xbcbc,0xbcbd,0xbcc0,0xbcc4,0xbccd,0xbccf,
-0xbcd0,0xbcd1,0xbcd5,0xbcd8,0xbcdc,0xbcf4,0xbcf5,0xbcf6,
-0xbcf8,0xbcfc,0xbd04,0xbd05,0xbd07,0xbd09,0xbd10,0xbd14,
-0xbd24,0xbd2c,0xbd40,0xbd48,0xbd49,0xbd4c,0xbd50,0xbd58,
-0xbd59,0xbd64,0xbd68,0xbd80,0xbd81,0xbd84,0xbd87,0xbd88,
-0xbd89,0xbd8a,0xbd90,0xbd91,0xbd93,0xbd95,0xbd99,0xbd9a,
-0xbd9c,0xbda4,0xbdb0,0xbdb8,0xbdd4,0xbdd5,0xbdd8,0xbddc,
-0xbde9,0xbdf0,0xbdf4,0xbdf8,0xbe00,0xbe03,0xbe05,0xbe0c,
-0xbe0d,0xbe10,0xbe14,0xbe1c,0xbe1d,0xbe1f,0xbe44,0xbe45,
-0xbe48,0xbe4c,0xbe4e,0xbe54,0xbe55,0xbe57,0xbe59,0xbe5a,
-0xbe5b,0xbe60,0xbe61,0xbe64,0xd2fb,0xd2fc,0xd2fd,0xd2fe,
-0xd2ff,0xd302,0xd304,0xd306,0xd307,0xd308,0xd309,0xd30a,
-0xd30b,0xd30f,0xd311,0xd312,0xd313,0xd315,0xd317,0xd318,
-0xd319,0xd31a,0xd31b,0xd31e,0xd322,0xd323,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xd324,0xd326,0xd327,0xd32a,
-0xd32b,0xd32d,0xd32e,0xd32f,0xd331,0xd332,0xd333,0xd334,
-0xd335,0xd336,0xd337,0xd33a,0xd33e,0xd33f,0xd340,0xd341,
-0xd342,0xd343,0xd346,0xd347,0xd348,0xd349,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xd34a,0xd34b,0xd34c,0xd34d,
-0xd34e,0xd34f,0xd350,0xd351,0xd352,0xd353,0xd354,0xd355,
-0xd356,0xd357,0xd358,0xd359,0xd35a,0xd35b,0xd35c,0xd35d,
-0xd35e,0xd35f,0xd360,0xd361,0xd362,0xd363,0xd364,0xd365,
-0xd366,0xd367,0xd368,0xd369,0xbe68,0xbe6a,0xbe70,0xbe71,
-0xbe73,0xbe74,0xbe75,0xbe7b,0xbe7c,0xbe7d,0xbe80,0xbe84,
-0xbe8c,0xbe8d,0xbe8f,0xbe90,0xbe91,0xbe98,0xbe99,0xbea8,
-0xbed0,0xbed1,0xbed4,0xbed7,0xbed8,0xbee0,0xbee3,0xbee4,
-0xbee5,0xbeec,0xbf01,0xbf08,0xbf09,0xbf18,0xbf19,0xbf1b,
-0xbf1c,0xbf1d,0xbf40,0xbf41,0xbf44,0xbf48,0xbf50,0xbf51,
-0xbf55,0xbf94,0xbfb0,0xbfc5,0xbfcc,0xbfcd,0xbfd0,0xbfd4,
-0xbfdc,0xbfdf,0xbfe1,0xc03c,0xc051,0xc058,0xc05c,0xc060,
-0xc068,0xc069,0xc090,0xc091,0xc094,0xc098,0xc0a0,0xc0a1,
-0xc0a3,0xc0a5,0xc0ac,0xc0ad,0xc0af,0xc0b0,0xc0b3,0xc0b4,
-0xc0b5,0xc0b6,0xc0bc,0xc0bd,0xc0bf,0xc0c0,0xc0c1,0xc0c5,
-0xc0c8,0xc0c9,0xc0cc,0xc0d0,0xc0d8,0xc0d9,0xc0db,0xc0dc,
-0xc0dd,0xc0e4,0xd36a,0xd36b,0xd36c,0xd36d,0xd36e,0xd36f,
-0xd370,0xd371,0xd372,0xd373,0xd374,0xd375,0xd376,0xd377,
-0xd378,0xd379,0xd37a,0xd37b,0xd37e,0xd37f,0xd381,0xd382,
-0xd383,0xd385,0xd386,0xd387,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xd388,0xd389,0xd38a,0xd38b,0xd38e,0xd392,
-0xd393,0xd394,0xd395,0xd396,0xd397,0xd39a,0xd39b,0xd39d,
-0xd39e,0xd39f,0xd3a1,0xd3a2,0xd3a3,0xd3a4,0xd3a5,0xd3a6,
-0xd3a7,0xd3aa,0xd3ac,0xd3ae,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xd3af,0xd3b0,0xd3b1,0xd3b2,0xd3b3,0xd3b5,
-0xd3b6,0xd3b7,0xd3b9,0xd3ba,0xd3bb,0xd3bd,0xd3be,0xd3bf,
-0xd3c0,0xd3c1,0xd3c2,0xd3c3,0xd3c6,0xd3c7,0xd3ca,0xd3cb,
-0xd3cc,0xd3cd,0xd3ce,0xd3cf,0xd3d1,0xd3d2,0xd3d3,0xd3d4,
-0xd3d5,0xd3d6,0xc0e5,0xc0e8,0xc0ec,0xc0f4,0xc0f5,0xc0f7,
-0xc0f9,0xc100,0xc104,0xc108,0xc110,0xc115,0xc11c,0xc11d,
-0xc11e,0xc11f,0xc120,0xc123,0xc124,0xc126,0xc127,0xc12c,
-0xc12d,0xc12f,0xc130,0xc131,0xc136,0xc138,0xc139,0xc13c,
-0xc140,0xc148,0xc149,0xc14b,0xc14c,0xc14d,0xc154,0xc155,
-0xc158,0xc15c,0xc164,0xc165,0xc167,0xc168,0xc169,0xc170,
-0xc174,0xc178,0xc185,0xc18c,0xc18d,0xc18e,0xc190,0xc194,
-0xc196,0xc19c,0xc19d,0xc19f,0xc1a1,0xc1a5,0xc1a8,0xc1a9,
-0xc1ac,0xc1b0,0xc1bd,0xc1c4,0xc1c8,0xc1cc,0xc1d4,0xc1d7,
-0xc1d8,0xc1e0,0xc1e4,0xc1e8,0xc1f0,0xc1f1,0xc1f3,0xc1fc,
-0xc1fd,0xc200,0xc204,0xc20c,0xc20d,0xc20f,0xc211,0xc218,
-0xc219,0xc21c,0xc21f,0xc220,0xc228,0xc229,0xc22b,0xc22d,
-0xd3d7,0xd3d9,0xd3da,0xd3db,0xd3dc,0xd3dd,0xd3de,0xd3df,
-0xd3e0,0xd3e2,0xd3e4,0xd3e5,0xd3e6,0xd3e7,0xd3e8,0xd3e9,
-0xd3ea,0xd3eb,0xd3ee,0xd3ef,0xd3f1,0xd3f2,0xd3f3,0xd3f5,
-0xd3f6,0xd3f7,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xd3f8,0xd3f9,0xd3fa,0xd3fb,0xd3fe,0xd400,0xd402,0xd403,
-0xd404,0xd405,0xd406,0xd407,0xd409,0xd40a,0xd40b,0xd40c,
-0xd40d,0xd40e,0xd40f,0xd410,0xd411,0xd412,0xd413,0xd414,
-0xd415,0xd416,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xd417,0xd418,0xd419,0xd41a,0xd41b,0xd41c,0xd41e,0xd41f,
-0xd420,0xd421,0xd422,0xd423,0xd424,0xd425,0xd426,0xd427,
-0xd428,0xd429,0xd42a,0xd42b,0xd42c,0xd42d,0xd42e,0xd42f,
-0xd430,0xd431,0xd432,0xd433,0xd434,0xd435,0xd436,0xd437,
-0xc22f,0xc231,0xc232,0xc234,0xc248,0xc250,0xc251,0xc254,
-0xc258,0xc260,0xc265,0xc26c,0xc26d,0xc270,0xc274,0xc27c,
-0xc27d,0xc27f,0xc281,0xc288,0xc289,0xc290,0xc298,0xc29b,
-0xc29d,0xc2a4,0xc2a5,0xc2a8,0xc2ac,0xc2ad,0xc2b4,0xc2b5,
-0xc2b7,0xc2b9,0xc2dc,0xc2dd,0xc2e0,0xc2e3,0xc2e4,0xc2eb,
-0xc2ec,0xc2ed,0xc2ef,0xc2f1,0xc2f6,0xc2f8,0xc2f9,0xc2fb,
-0xc2fc,0xc300,0xc308,0xc309,0xc30c,0xc30d,0xc313,0xc314,
-0xc315,0xc318,0xc31c,0xc324,0xc325,0xc328,0xc329,0xc345,
-0xc368,0xc369,0xc36c,0xc370,0xc372,0xc378,0xc379,0xc37c,
-0xc37d,0xc384,0xc388,0xc38c,0xc3c0,0xc3d8,0xc3d9,0xc3dc,
-0xc3df,0xc3e0,0xc3e2,0xc3e8,0xc3e9,0xc3ed,0xc3f4,0xc3f5,
-0xc3f8,0xc408,0xc410,0xc424,0xc42c,0xc430,0xd438,0xd439,
-0xd43a,0xd43b,0xd43c,0xd43d,0xd43e,0xd43f,0xd441,0xd442,
-0xd443,0xd445,0xd446,0xd447,0xd448,0xd449,0xd44a,0xd44b,
-0xd44c,0xd44d,0xd44e,0xd44f,0xd450,0xd451,0xd452,0xd453,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xd454,0xd455,
-0xd456,0xd457,0xd458,0xd459,0xd45a,0xd45b,0xd45d,0xd45e,
-0xd45f,0xd461,0xd462,0xd463,0xd465,0xd466,0xd467,0xd468,
-0xd469,0xd46a,0xd46b,0xd46c,0xd46e,0xd470,0xd471,0xd472,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xd473,0xd474,
-0xd475,0xd476,0xd477,0xd47a,0xd47b,0xd47d,0xd47e,0xd481,
-0xd483,0xd484,0xd485,0xd486,0xd487,0xd48a,0xd48c,0xd48e,
-0xd48f,0xd490,0xd491,0xd492,0xd493,0xd495,0xd496,0xd497,
-0xd498,0xd499,0xd49a,0xd49b,0xd49c,0xd49d,0xc434,0xc43c,
-0xc43d,0xc448,0xc464,0xc465,0xc468,0xc46c,0xc474,0xc475,
-0xc479,0xc480,0xc494,0xc49c,0xc4b8,0xc4bc,0xc4e9,0xc4f0,
-0xc4f1,0xc4f4,0xc4f8,0xc4fa,0xc4ff,0xc500,0xc501,0xc50c,
-0xc510,0xc514,0xc51c,0xc528,0xc529,0xc52c,0xc530,0xc538,
-0xc539,0xc53b,0xc53d,0xc544,0xc545,0xc548,0xc549,0xc54a,
-0xc54c,0xc54d,0xc54e,0xc553,0xc554,0xc555,0xc557,0xc558,
-0xc559,0xc55d,0xc55e,0xc560,0xc561,0xc564,0xc568,0xc570,
-0xc571,0xc573,0xc574,0xc575,0xc57c,0xc57d,0xc580,0xc584,
-0xc587,0xc58c,0xc58d,0xc58f,0xc591,0xc595,0xc597,0xc598,
-0xc59c,0xc5a0,0xc5a9,0xc5b4,0xc5b5,0xc5b8,0xc5b9,0xc5bb,
-0xc5bc,0xc5bd,0xc5be,0xc5c4,0xc5c5,0xc5c6,0xc5c7,0xc5c8,
-0xc5c9,0xc5ca,0xc5cc,0xc5ce,0xd49e,0xd49f,0xd4a0,0xd4a1,
-0xd4a2,0xd4a3,0xd4a4,0xd4a5,0xd4a6,0xd4a7,0xd4a8,0xd4aa,
-0xd4ab,0xd4ac,0xd4ad,0xd4ae,0xd4af,0xd4b0,0xd4b1,0xd4b2,
-0xd4b3,0xd4b4,0xd4b5,0xd4b6,0xd4b7,0xd4b8,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xd4b9,0xd4ba,0xd4bb,0xd4bc,
-0xd4bd,0xd4be,0xd4bf,0xd4c0,0xd4c1,0xd4c2,0xd4c3,0xd4c4,
-0xd4c5,0xd4c6,0xd4c7,0xd4c8,0xd4c9,0xd4ca,0xd4cb,0xd4cd,
-0xd4ce,0xd4cf,0xd4d1,0xd4d2,0xd4d3,0xd4d5,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xd4d6,0xd4d7,0xd4d8,0xd4d9,
-0xd4da,0xd4db,0xd4dd,0xd4de,0xd4e0,0xd4e1,0xd4e2,0xd4e3,
-0xd4e4,0xd4e5,0xd4e6,0xd4e7,0xd4e9,0xd4ea,0xd4eb,0xd4ed,
-0xd4ee,0xd4ef,0xd4f1,0xd4f2,0xd4f3,0xd4f4,0xd4f5,0xd4f6,
-0xd4f7,0xd4f9,0xd4fa,0xd4fc,0xc5d0,0xc5d1,0xc5d4,0xc5d8,
-0xc5e0,0xc5e1,0xc5e3,0xc5e5,0xc5ec,0xc5ed,0xc5ee,0xc5f0,
-0xc5f4,0xc5f6,0xc5f7,0xc5fc,0xc5fd,0xc5fe,0xc5ff,0xc600,
-0xc601,0xc605,0xc606,0xc607,0xc608,0xc60c,0xc610,0xc618,
-0xc619,0xc61b,0xc61c,0xc624,0xc625,0xc628,0xc62c,0xc62d,
-0xc62e,0xc630,0xc633,0xc634,0xc635,0xc637,0xc639,0xc63b,
-0xc640,0xc641,0xc644,0xc648,0xc650,0xc651,0xc653,0xc654,
-0xc655,0xc65c,0xc65d,0xc660,0xc66c,0xc66f,0xc671,0xc678,
-0xc679,0xc67c,0xc680,0xc688,0xc689,0xc68b,0xc68d,0xc694,
-0xc695,0xc698,0xc69c,0xc6a4,0xc6a5,0xc6a7,0xc6a9,0xc6b0,
-0xc6b1,0xc6b4,0xc6b8,0xc6b9,0xc6ba,0xc6c0,0xc6c1,0xc6c3,
-0xc6c5,0xc6cc,0xc6cd,0xc6d0,0xc6d4,0xc6dc,0xc6dd,0xc6e0,
-0xc6e1,0xc6e8,0xd4fe,0xd4ff,0xd500,0xd501,0xd502,0xd503,
-0xd505,0xd506,0xd507,0xd509,0xd50a,0xd50b,0xd50d,0xd50e,
-0xd50f,0xd510,0xd511,0xd512,0xd513,0xd516,0xd518,0xd519,
-0xd51a,0xd51b,0xd51c,0xd51d,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xd51e,0xd51f,0xd520,0xd521,0xd522,0xd523,
-0xd524,0xd525,0xd526,0xd527,0xd528,0xd529,0xd52a,0xd52b,
-0xd52c,0xd52d,0xd52e,0xd52f,0xd530,0xd531,0xd532,0xd533,
-0xd534,0xd535,0xd536,0xd537,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xd538,0xd539,0xd53a,0xd53b,0xd53e,0xd53f,
-0xd541,0xd542,0xd543,0xd545,0xd546,0xd547,0xd548,0xd549,
-0xd54a,0xd54b,0xd54e,0xd550,0xd552,0xd553,0xd554,0xd555,
-0xd556,0xd557,0xd55a,0xd55b,0xd55d,0xd55e,0xd55f,0xd561,
-0xd562,0xd563,0xc6e9,0xc6ec,0xc6f0,0xc6f8,0xc6f9,0xc6fd,
-0xc704,0xc705,0xc708,0xc70c,0xc714,0xc715,0xc717,0xc719,
-0xc720,0xc721,0xc724,0xc728,0xc730,0xc731,0xc733,0xc735,
-0xc737,0xc73c,0xc73d,0xc740,0xc744,0xc74a,0xc74c,0xc74d,
-0xc74f,0xc751,0xc752,0xc753,0xc754,0xc755,0xc756,0xc757,
-0xc758,0xc75c,0xc760,0xc768,0xc76b,0xc774,0xc775,0xc778,
-0xc77c,0xc77d,0xc77e,0xc783,0xc784,0xc785,0xc787,0xc788,
-0xc789,0xc78a,0xc78e,0xc790,0xc791,0xc794,0xc796,0xc797,
-0xc798,0xc79a,0xc7a0,0xc7a1,0xc7a3,0xc7a4,0xc7a5,0xc7a6,
-0xc7ac,0xc7ad,0xc7b0,0xc7b4,0xc7bc,0xc7bd,0xc7bf,0xc7c0,
-0xc7c1,0xc7c8,0xc7c9,0xc7cc,0xc7ce,0xc7d0,0xc7d8,0xc7dd,
-0xc7e4,0xc7e8,0xc7ec,0xc800,0xc801,0xc804,0xc808,0xc80a,
-0xd564,0xd566,0xd567,0xd56a,0xd56c,0xd56e,0xd56f,0xd570,
-0xd571,0xd572,0xd573,0xd576,0xd577,0xd579,0xd57a,0xd57b,
-0xd57d,0xd57e,0xd57f,0xd580,0xd581,0xd582,0xd583,0xd586,
-0xd58a,0xd58b,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xd58c,0xd58d,0xd58e,0xd58f,0xd591,0xd592,0xd593,0xd594,
-0xd595,0xd596,0xd597,0xd598,0xd599,0xd59a,0xd59b,0xd59c,
-0xd59d,0xd59e,0xd59f,0xd5a0,0xd5a1,0xd5a2,0xd5a3,0xd5a4,
-0xd5a6,0xd5a7,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xd5a8,0xd5a9,0xd5aa,0xd5ab,0xd5ac,0xd5ad,0xd5ae,0xd5af,
-0xd5b0,0xd5b1,0xd5b2,0xd5b3,0xd5b4,0xd5b5,0xd5b6,0xd5b7,
-0xd5b8,0xd5b9,0xd5ba,0xd5bb,0xd5bc,0xd5bd,0xd5be,0xd5bf,
-0xd5c0,0xd5c1,0xd5c2,0xd5c3,0xd5c4,0xd5c5,0xd5c6,0xd5c7,
-0xc810,0xc811,0xc813,0xc815,0xc816,0xc81c,0xc81d,0xc820,
-0xc824,0xc82c,0xc82d,0xc82f,0xc831,0xc838,0xc83c,0xc840,
-0xc848,0xc849,0xc84c,0xc84d,0xc854,0xc870,0xc871,0xc874,
-0xc878,0xc87a,0xc880,0xc881,0xc883,0xc885,0xc886,0xc887,
-0xc88b,0xc88c,0xc88d,0xc894,0xc89d,0xc89f,0xc8a1,0xc8a8,
-0xc8bc,0xc8bd,0xc8c4,0xc8c8,0xc8cc,0xc8d4,0xc8d5,0xc8d7,
-0xc8d9,0xc8e0,0xc8e1,0xc8e4,0xc8f5,0xc8fc,0xc8fd,0xc900,
-0xc904,0xc905,0xc906,0xc90c,0xc90d,0xc90f,0xc911,0xc918,
-0xc92c,0xc934,0xc950,0xc951,0xc954,0xc958,0xc960,0xc961,
-0xc963,0xc96c,0xc970,0xc974,0xc97c,0xc988,0xc989,0xc98c,
-0xc990,0xc998,0xc999,0xc99b,0xc99d,0xc9c0,0xc9c1,0xc9c4,
-0xc9c7,0xc9c8,0xc9ca,0xc9d0,0xc9d1,0xc9d3,0xd5ca,0xd5cb,
-0xd5cd,0xd5ce,0xd5cf,0xd5d1,0xd5d3,0xd5d4,0xd5d5,0xd5d6,
-0xd5d7,0xd5da,0xd5dc,0xd5de,0xd5df,0xd5e0,0xd5e1,0xd5e2,
-0xd5e3,0xd5e6,0xd5e7,0xd5e9,0xd5ea,0xd5eb,0xd5ed,0xd5ee,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xd5ef,0xd5f0,
-0xd5f1,0xd5f2,0xd5f3,0xd5f6,0xd5f8,0xd5fa,0xd5fb,0xd5fc,
-0xd5fd,0xd5fe,0xd5ff,0xd602,0xd603,0xd605,0xd606,0xd607,
-0xd609,0xd60a,0xd60b,0xd60c,0xd60d,0xd60e,0xd60f,0xd612,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xd616,0xd617,
-0xd618,0xd619,0xd61a,0xd61b,0xd61d,0xd61e,0xd61f,0xd621,
-0xd622,0xd623,0xd625,0xd626,0xd627,0xd628,0xd629,0xd62a,
-0xd62b,0xd62c,0xd62e,0xd62f,0xd630,0xd631,0xd632,0xd633,
-0xd634,0xd635,0xd636,0xd637,0xd63a,0xd63b,0xc9d5,0xc9d6,
-0xc9d9,0xc9da,0xc9dc,0xc9dd,0xc9e0,0xc9e2,0xc9e4,0xc9e7,
-0xc9ec,0xc9ed,0xc9ef,0xc9f0,0xc9f1,0xc9f8,0xc9f9,0xc9fc,
-0xca00,0xca08,0xca09,0xca0b,0xca0c,0xca0d,0xca14,0xca18,
-0xca29,0xca4c,0xca4d,0xca50,0xca54,0xca5c,0xca5d,0xca5f,
-0xca60,0xca61,0xca68,0xca7d,0xca84,0xca98,0xcabc,0xcabd,
-0xcac0,0xcac4,0xcacc,0xcacd,0xcacf,0xcad1,0xcad3,0xcad8,
-0xcad9,0xcae0,0xcaec,0xcaf4,0xcb08,0xcb10,0xcb14,0xcb18,
-0xcb20,0xcb21,0xcb41,0xcb48,0xcb49,0xcb4c,0xcb50,0xcb58,
-0xcb59,0xcb5d,0xcb64,0xcb78,0xcb79,0xcb9c,0xcbb8,0xcbd4,
-0xcbe4,0xcbe7,0xcbe9,0xcc0c,0xcc0d,0xcc10,0xcc14,0xcc1c,
-0xcc1d,0xcc21,0xcc22,0xcc27,0xcc28,0xcc29,0xcc2c,0xcc2e,
-0xcc30,0xcc38,0xcc39,0xcc3b,0xd63d,0xd63e,0xd63f,0xd641,
-0xd642,0xd643,0xd644,0xd646,0xd647,0xd64a,0xd64c,0xd64e,
-0xd64f,0xd650,0xd652,0xd653,0xd656,0xd657,0xd659,0xd65a,
-0xd65b,0xd65d,0xd65e,0xd65f,0xd660,0xd661,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xd662,0xd663,0xd664,0xd665,
-0xd666,0xd668,0xd66a,0xd66b,0xd66c,0xd66d,0xd66e,0xd66f,
-0xd672,0xd673,0xd675,0xd676,0xd677,0xd678,0xd679,0xd67a,
-0xd67b,0xd67c,0xd67d,0xd67e,0xd67f,0xd680,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xd681,0xd682,0xd684,0xd686,
-0xd687,0xd688,0xd689,0xd68a,0xd68b,0xd68e,0xd68f,0xd691,
-0xd692,0xd693,0xd695,0xd696,0xd697,0xd698,0xd699,0xd69a,
-0xd69b,0xd69c,0xd69e,0xd6a0,0xd6a2,0xd6a3,0xd6a4,0xd6a5,
-0xd6a6,0xd6a7,0xd6a9,0xd6aa,0xcc3c,0xcc3d,0xcc3e,0xcc44,
-0xcc45,0xcc48,0xcc4c,0xcc54,0xcc55,0xcc57,0xcc58,0xcc59,
-0xcc60,0xcc64,0xcc66,0xcc68,0xcc70,0xcc75,0xcc98,0xcc99,
-0xcc9c,0xcca0,0xcca8,0xcca9,0xccab,0xccac,0xccad,0xccb4,
-0xccb5,0xccb8,0xccbc,0xccc4,0xccc5,0xccc7,0xccc9,0xccd0,
-0xccd4,0xcce4,0xccec,0xccf0,0xcd01,0xcd08,0xcd09,0xcd0c,
-0xcd10,0xcd18,0xcd19,0xcd1b,0xcd1d,0xcd24,0xcd28,0xcd2c,
-0xcd39,0xcd5c,0xcd60,0xcd64,0xcd6c,0xcd6d,0xcd6f,0xcd71,
-0xcd78,0xcd88,0xcd94,0xcd95,0xcd98,0xcd9c,0xcda4,0xcda5,
-0xcda7,0xcda9,0xcdb0,0xcdc4,0xcdcc,0xcdd0,0xcde8,0xcdec,
-0xcdf0,0xcdf8,0xcdf9,0xcdfb,0xcdfd,0xce04,0xce08,0xce0c,
-0xce14,0xce19,0xce20,0xce21,0xce24,0xce28,0xce30,0xce31,
-0xce33,0xce35,0xd6ab,0xd6ad,0xd6ae,0xd6af,0xd6b1,0xd6b2,
-0xd6b3,0xd6b4,0xd6b5,0xd6b6,0xd6b7,0xd6b8,0xd6ba,0xd6bc,
-0xd6bd,0xd6be,0xd6bf,0xd6c0,0xd6c1,0xd6c2,0xd6c3,0xd6c6,
-0xd6c7,0xd6c9,0xd6ca,0xd6cb,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xd6cd,0xd6ce,0xd6cf,0xd6d0,0xd6d2,0xd6d3,
-0xd6d5,0xd6d6,0xd6d8,0xd6da,0xd6db,0xd6dc,0xd6dd,0xd6de,
-0xd6df,0xd6e1,0xd6e2,0xd6e3,0xd6e5,0xd6e6,0xd6e7,0xd6e9,
-0xd6ea,0xd6eb,0xd6ec,0xd6ed,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xd6ee,0xd6ef,0xd6f1,0xd6f2,0xd6f3,0xd6f4,
-0xd6f6,0xd6f7,0xd6f8,0xd6f9,0xd6fa,0xd6fb,0xd6fe,0xd6ff,
-0xd701,0xd702,0xd703,0xd705,0xd706,0xd707,0xd708,0xd709,
-0xd70a,0xd70b,0xd70c,0xd70d,0xd70e,0xd70f,0xd710,0xd712,
-0xd713,0xd714,0xce58,0xce59,0xce5c,0xce5f,0xce60,0xce61,
-0xce68,0xce69,0xce6b,0xce6d,0xce74,0xce75,0xce78,0xce7c,
-0xce84,0xce85,0xce87,0xce89,0xce90,0xce91,0xce94,0xce98,
-0xcea0,0xcea1,0xcea3,0xcea4,0xcea5,0xceac,0xcead,0xcec1,
-0xcee4,0xcee5,0xcee8,0xceeb,0xceec,0xcef4,0xcef5,0xcef7,
-0xcef8,0xcef9,0xcf00,0xcf01,0xcf04,0xcf08,0xcf10,0xcf11,
-0xcf13,0xcf15,0xcf1c,0xcf20,0xcf24,0xcf2c,0xcf2d,0xcf2f,
-0xcf30,0xcf31,0xcf38,0xcf54,0xcf55,0xcf58,0xcf5c,0xcf64,
-0xcf65,0xcf67,0xcf69,0xcf70,0xcf71,0xcf74,0xcf78,0xcf80,
-0xcf85,0xcf8c,0xcfa1,0xcfa8,0xcfb0,0xcfc4,0xcfe0,0xcfe1,
-0xcfe4,0xcfe8,0xcff0,0xcff1,0xcff3,0xcff5,0xcffc,0xd000,
-0xd004,0xd011,0xd018,0xd02d,0xd034,0xd035,0xd038,0xd03c,
-0xd715,0xd716,0xd717,0xd71a,0xd71b,0xd71d,0xd71e,0xd71f,
-0xd721,0xd722,0xd723,0xd724,0xd725,0xd726,0xd727,0xd72a,
-0xd72c,0xd72e,0xd72f,0xd730,0xd731,0xd732,0xd733,0xd736,
-0xd737,0xd739,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xd73a,0xd73b,0xd73d,0xd73e,0xd73f,0xd740,0xd741,0xd742,
-0xd743,0xd745,0xd746,0xd748,0xd74a,0xd74b,0xd74c,0xd74d,
-0xd74e,0xd74f,0xd752,0xd753,0xd755,0xd75a,0xd75b,0xd75c,
-0xd75d,0xd75e,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xd75f,0xd762,0xd764,0xd766,0xd767,0xd768,0xd76a,0xd76b,
-0xd76d,0xd76e,0xd76f,0xd771,0xd772,0xd773,0xd775,0xd776,
-0xd777,0xd778,0xd779,0xd77a,0xd77b,0xd77e,0xd77f,0xd780,
-0xd782,0xd783,0xd784,0xd785,0xd786,0xd787,0xd78a,0xd78b,
-0xd044,0xd045,0xd047,0xd049,0xd050,0xd054,0xd058,0xd060,
-0xd06c,0xd06d,0xd070,0xd074,0xd07c,0xd07d,0xd081,0xd0a4,
-0xd0a5,0xd0a8,0xd0ac,0xd0b4,0xd0b5,0xd0b7,0xd0b9,0xd0c0,
-0xd0c1,0xd0c4,0xd0c8,0xd0c9,0xd0d0,0xd0d1,0xd0d3,0xd0d4,
-0xd0d5,0xd0dc,0xd0dd,0xd0e0,0xd0e4,0xd0ec,0xd0ed,0xd0ef,
-0xd0f0,0xd0f1,0xd0f8,0xd10d,0xd130,0xd131,0xd134,0xd138,
-0xd13a,0xd140,0xd141,0xd143,0xd144,0xd145,0xd14c,0xd14d,
-0xd150,0xd154,0xd15c,0xd15d,0xd15f,0xd161,0xd168,0xd16c,
-0xd17c,0xd184,0xd188,0xd1a0,0xd1a1,0xd1a4,0xd1a8,0xd1b0,
-0xd1b1,0xd1b3,0xd1b5,0xd1ba,0xd1bc,0xd1c0,0xd1d8,0xd1f4,
-0xd1f8,0xd207,0xd209,0xd210,0xd22c,0xd22d,0xd230,0xd234,
-0xd23c,0xd23d,0xd23f,0xd241,0xd248,0xd25c,0xd78d,0xd78e,
-0xd78f,0xd791,0xd792,0xd793,0xd794,0xd795,0xd796,0xd797,
-0xd79a,0xd79c,0xd79e,0xd79f,0xd7a0,0xd7a1,0xd7a2,0xd7a3,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xd264,0xd280,
-0xd281,0xd284,0xd288,0xd290,0xd291,0xd295,0xd29c,0xd2a0,
-0xd2a4,0xd2ac,0xd2b1,0xd2b8,0xd2b9,0xd2bc,0xd2bf,0xd2c0,
-0xd2c2,0xd2c8,0xd2c9,0xd2cb,0xd2d4,0xd2d8,0xd2dc,0xd2e4,
-0xd2e5,0xd2f0,0xd2f1,0xd2f4,0xd2f8,0xd300,0xd301,0xd303,
-0xd305,0xd30c,0xd30d,0xd30e,0xd310,0xd314,0xd316,0xd31c,
-0xd31d,0xd31f,0xd320,0xd321,0xd325,0xd328,0xd329,0xd32c,
-0xd330,0xd338,0xd339,0xd33b,0xd33c,0xd33d,0xd344,0xd345,
-0xd37c,0xd37d,0xd380,0xd384,0xd38c,0xd38d,0xd38f,0xd390,
-0xd391,0xd398,0xd399,0xd39c,0xd3a0,0xd3a8,0xd3a9,0xd3ab,
-0xd3ad,0xd3b4,0xd3b8,0xd3bc,0xd3c4,0xd3c5,0xd3c8,0xd3c9,
-0xd3d0,0xd3d8,0xd3e1,0xd3e3,0xd3ec,0xd3ed,0xd3f0,0xd3f4,
-0xd3fc,0xd3fd,0xd3ff,0xd401};
-
-static const int uhc2_ucs_table_size = (sizeof(uhc2_ucs_table)/sizeof(unsigned short));
-
-static const unsigned short uhc3_ucs_table[] = {
-0xd408,0xd41d,0xd440,0xd444,0xd45c,0xd460,0xd464,0xd46d,
-0xd46f,0xd478,0xd479,0xd47c,0xd47f,0xd480,0xd482,0xd488,
-0xd489,0xd48b,0xd48d,0xd494,0xd4a9,0xd4cc,0xd4d0,0xd4d4,
-0xd4dc,0xd4df,0xd4e8,0xd4ec,0xd4f0,0xd4f8,0xd4fb,0xd4fd,
-0xd504,0xd508,0xd50c,0xd514,0xd515,0xd517,0xd53c,0xd53d,
-0xd540,0xd544,0xd54c,0xd54d,0xd54f,0xd551,0xd558,0xd559,
-0xd55c,0xd560,0xd565,0xd568,0xd569,0xd56b,0xd56d,0xd574,
-0xd575,0xd578,0xd57c,0xd584,0xd585,0xd587,0xd588,0xd589,
-0xd590,0xd5a5,0xd5c8,0xd5c9,0xd5cc,0xd5d0,0xd5d2,0xd5d8,
-0xd5d9,0xd5db,0xd5dd,0xd5e4,0xd5e5,0xd5e8,0xd5ec,0xd5f4,
-0xd5f5,0xd5f7,0xd5f9,0xd600,0xd601,0xd604,0xd608,0xd610,
-0xd611,0xd613,0xd614,0xd615,0xd61c,0xd620,0xd624,0xd62d,
-0xd638,0xd639,0xd63c,0xd640,0xd645,0xd648,0xd649,0xd64b,
-0xd64d,0xd651,0xd654,0xd655,0xd658,0xd65c,0xd667,0xd669,
-0xd670,0xd671,0xd674,0xd683,0xd685,0xd68c,0xd68d,0xd690,
-0xd694,0xd69d,0xd69f,0xd6a1,0xd6a8,0xd6ac,0xd6b0,0xd6b9,
-0xd6bb,0xd6c4,0xd6c5,0xd6c8,0xd6cc,0xd6d1,0xd6d4,0xd6d7,
-0xd6d9,0xd6e0,0xd6e4,0xd6e8,0xd6f0,0xd6f5,0xd6fc,0xd6fd,
-0xd700,0xd704,0xd711,0xd718,0xd719,0xd71c,0xd720,0xd728,
-0xd729,0xd72b,0xd72d,0xd734,0xd735,0xd738,0xd73c,0xd744,
-0xd747,0xd749,0xd750,0xd751,0xd754,0xd756,0xd757,0xd758,
-0xd759,0xd760,0xd761,0xd763,0xd765,0xd769,0xd76c,0xd770,
-0xd774,0xd77c,0xd77d,0xd781,0xd788,0xd789,0xd78c,0xd790,
-0xd798,0xd799,0xd79b,0xd79d,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x4f3d,0x4f73,0x5047,0x50f9,0x52a0,0x53ef,
-0x5475,0x54e5,0x5609,0x5ac1,0x5bb6,0x6687,0x67b6,0x67b7,
-0x67ef,0x6b4c,0x73c2,0x75c2,0x7a3c,0x82db,0x8304,0x8857,
-0x8888,0x8a36,0x8cc8,0x8dcf,0x8efb,0x8fe6,0x99d5,0x523b,
-0x5374,0x5404,0x606a,0x6164,0x6bbc,0x73cf,0x811a,0x89ba,
-0x89d2,0x95a3,0x4f83,0x520a,0x58be,0x5978,0x59e6,0x5e72,
-0x5e79,0x61c7,0x63c0,0x6746,0x67ec,0x687f,0x6f97,0x764e,
-0x770b,0x78f5,0x7a08,0x7aff,0x7c21,0x809d,0x826e,0x8271,
-0x8aeb,0x9593,0x4e6b,0x559d,0x66f7,0x6e34,0x78a3,0x7aed,
-0x845b,0x8910,0x874e,0x97a8,0x52d8,0x574e,0x582a,0x5d4c,
-0x611f,0x61be,0x6221,0x6562,0x67d1,0x6a44,0x6e1b,0x7518,
-0x75b3,0x76e3,0x77b0,0x7d3a,0x90af,0x9451,0x9452,0x9f95,
-0x5323,0x5cac,0x7532,0x80db,0x9240,0x9598,0x525b,0x5808,
-0x59dc,0x5ca1,0x5d17,0x5eb7,0x5f3a,0x5f4a,0x6177,0x6c5f,
-0x757a,0x7586,0x7ce0,0x7d73,0x7db1,0x7f8c,0x8154,0x8221,
-0x8591,0x8941,0x8b1b,0x92fc,0x964d,0x9c47,0x4ecb,0x4ef7,
-0x500b,0x51f1,0x584f,0x6137,0x613e,0x6168,0x6539,0x69ea,
-0x6f11,0x75a5,0x7686,0x76d6,0x7b87,0x82a5,0x84cb,0xf900,
-0x93a7,0x958b,0x5580,0x5ba2,0x5751,0xf901,0x7cb3,0x7fb9,
-0x91b5,0x5028,0x53bb,0x5c45,0x5de8,0x62d2,0x636e,0x64da,
-0x64e7,0x6e20,0x70ac,0x795b,0x8ddd,0x8e1e,0xf902,0x907d,
-0x9245,0x92f8,0x4e7e,0x4ef6,0x5065,0x5dfe,0x5efa,0x6106,
-0x6957,0x8171,0x8654,0x8e47,0x9375,0x9a2b,0x4e5e,0x5091,
-0x6770,0x6840,0x5109,0x528d,0x5292,0x6aa2,0x77bc,0x9210,
-0x9ed4,0x52ab,0x602f,0x8ff2,0x5048,0x61a9,0x63ed,0x64ca,
-0x683c,0x6a84,0x6fc0,0x8188,0x89a1,0x9694,0x5805,0x727d,
-0x72ac,0x7504,0x7d79,0x7e6d,0x80a9,0x898b,0x8b74,0x9063,
-0x9d51,0x6289,0x6c7a,0x6f54,0x7d50,0x7f3a,0x8a23,0x517c,
-0x614a,0x7b9d,0x8b19,0x9257,0x938c,0x4eac,0x4fd3,0x501e,
-0x50be,0x5106,0x52c1,0x52cd,0x537f,0x5770,0x5883,0x5e9a,
-0x5f91,0x6176,0x61ac,0x64ce,0x656c,0x666f,0x66bb,0x66f4,
-0x6897,0x6d87,0x7085,0x70f1,0x749f,0x74a5,0x74ca,0x75d9,
-0x786c,0x78ec,0x7adf,0x7af6,0x7d45,0x7d93,0x8015,0x803f,
-0x811b,0x8396,0x8b66,0x8f15,0x9015,0x93e1,0x9803,0x9838,
-0x9a5a,0x9be8,0x4fc2,0x5553,0x583a,0x5951,0x5b63,0x5c46,
-0x60b8,0x6212,0x6842,0x68b0,0x68e8,0x6eaa,0x754c,0x7678,
-0x78ce,0x7a3d,0x7cfb,0x7e6b,0x7e7c,0x8a08,0x8aa1,0x8c3f,
-0x968e,0x9dc4,0x53e4,0x53e9,0x544a,0x5471,0x56fa,0x59d1,
-0x5b64,0x5c3b,0x5eab,0x62f7,0x6537,0x6545,0x6572,0x66a0,
-0x67af,0x69c1,0x6cbd,0x75fc,0x7690,0x777e,0x7a3f,0x7f94,
-0x8003,0x80a1,0x818f,0x82e6,0x82fd,0x83f0,0x85c1,0x8831,
-0x88b4,0x8aa5,0xf903,0x8f9c,0x932e,0x96c7,0x9867,0x9ad8,
-0x9f13,0x54ed,0x659b,0x66f2,0x688f,0x7a40,0x8c37,0x9d60,
-0x56f0,0x5764,0x5d11,0x6606,0x68b1,0x68cd,0x6efe,0x7428,
-0x889e,0x9be4,0x6c68,0xf904,0x9aa8,0x4f9b,0x516c,0x5171,
-0x529f,0x5b54,0x5de5,0x6050,0x606d,0x62f1,0x63a7,0x653b,
-0x73d9,0x7a7a,0x86a3,0x8ca2,0x978f,0x4e32,0x5be1,0x6208,
-0x679c,0x74dc,0x79d1,0x83d3,0x8a87,0x8ab2,0x8de8,0x904e,
-0x934b,0x9846,0x5ed3,0x69e8,0x85ff,0x90ed,0xf905,0x51a0,
-0x5b98,0x5bec,0x6163,0x68fa,0x6b3e,0x704c,0x742f,0x74d8,
-0x7ba1,0x7f50,0x83c5,0x89c0,0x8cab,0x95dc,0x9928,0x522e,
-0x605d,0x62ec,0x9002,0x4f8a,0x5149,0x5321,0x58d9,0x5ee3,
-0x66e0,0x6d38,0x709a,0x72c2,0x73d6,0x7b50,0x80f1,0x945b,
-0x5366,0x639b,0x7f6b,0x4e56,0x5080,0x584a,0x58de,0x602a,
-0x6127,0x62d0,0x69d0,0x9b41,0x5b8f,0x7d18,0x80b1,0x8f5f,
-0x4ea4,0x50d1,0x54ac,0x55ac,0x5b0c,0x5da0,0x5de7,0x652a,
-0x654e,0x6821,0x6a4b,0x72e1,0x768e,0x77ef,0x7d5e,0x7ff9,
-0x81a0,0x854e,0x86df,0x8f03,0x8f4e,0x90ca,0x9903,0x9a55,
-0x9bab,0x4e18,0x4e45,0x4e5d,0x4ec7,0x4ff1,0x5177,0x52fe,
-0x5340,0x53e3,0x53e5,0x548e,0x5614,0x5775,0x57a2,0x5bc7,
-0x5d87,0x5ed0,0x61fc,0x62d8,0x6551,0x67b8,0x67e9,0x69cb,
-0x6b50,0x6bc6,0x6bec,0x6c42,0x6e9d,0x7078,0x72d7,0x7396,
-0x7403,0x77bf,0x77e9,0x7a76,0x7d7f,0x8009,0x81fc,0x8205,
-0x820a,0x82df,0x8862,0x8b33,0x8cfc,0x8ec0,0x9011,0x90b1,
-0x9264,0x92b6,0x99d2,0x9a45,0x9ce9,0x9dd7,0x9f9c,0x570b,
-0x5c40,0x83ca,0x97a0,0x97ab,0x9eb4,0x541b,0x7a98,0x7fa4,
-0x88d9,0x8ecd,0x90e1,0x5800,0x5c48,0x6398,0x7a9f,0x5bae,
-0x5f13,0x7a79,0x7aae,0x828e,0x8eac,0x5026,0x5238,0x52f8,
-0x5377,0x5708,0x62f3,0x6372,0x6b0a,0x6dc3,0x7737,0x53a5,
-0x7357,0x8568,0x8e76,0x95d5,0x673a,0x6ac3,0x6f70,0x8a6d,
-0x8ecc,0x994b,0xf906,0x6677,0x6b78,0x8cb4,0x9b3c,0xf907,
-0x53eb,0x572d,0x594e,0x63c6,0x69fb,0x73ea,0x7845,0x7aba,
-0x7ac5,0x7cfe,0x8475,0x898f,0x8d73,0x9035,0x95a8,0x52fb,
-0x5747,0x7547,0x7b60,0x83cc,0x921e,0xf908,0x6a58,0x514b,
-0x524b,0x5287,0x621f,0x68d8,0x6975,0x9699,0x50c5,0x52a4,
-0x52e4,0x61c3,0x65a4,0x6839,0x69ff,0x747e,0x7b4b,0x82b9,
-0x83eb,0x89b2,0x8b39,0x8fd1,0x9949,0xf909,0x4eca,0x5997,
-0x64d2,0x6611,0x6a8e,0x7434,0x7981,0x79bd,0x82a9,0x887e,
-0x887f,0x895f,0xf90a,0x9326,0x4f0b,0x53ca,0x6025,0x6271,
-0x6c72,0x7d1a,0x7d66,0x4e98,0x5162,0x77dc,0x80af,0x4f01,
-0x4f0e,0x5176,0x5180,0x55dc,0x5668,0x573b,0x57fa,0x57fc,
-0x5914,0x5947,0x5993,0x5bc4,0x5c90,0x5d0e,0x5df1,0x5e7e,
-0x5fcc,0x6280,0x65d7,0x65e3,0x671e,0x671f,0x675e,0x68cb,
-0x68c4,0x6a5f,0x6b3a,0x6c23,0x6c7d,0x6c82,0x6dc7,0x7398,
-0x7426,0x742a,0x7482,0x74a3,0x7578,0x757f,0x7881,0x78ef,
-0x7941,0x7947,0x7948,0x797a,0x7b95,0x7d00,0x7dba,0x7f88,
-0x8006,0x802d,0x808c,0x8a18,0x8b4f,0x8c48,0x8d77,0x9321,
-0x9324,0x98e2,0x9951,0x9a0e,0x9a0f,0x9a65,0x9e92,0x7dca,
-0x4f76,0x5409,0x62ee,0x6854,0x91d1,0x55ab,0x513a,0xf90b,
-0xf90c,0x5a1c,0x61e6,0xf90d,0x62cf,0x62ff,0xf90e,0xf90f,
-0xf910,0xf911,0xf912,0xf913,0x90a3,0xf914,0xf915,0xf916,
-0xf917,0xf918,0x8afe,0xf919,0xf91a,0xf91b,0xf91c,0x6696,
-0xf91d,0x7156,0xf91e,0xf91f,0x96e3,0xf920,0x634f,0x637a,
-0x5357,0xf921,0x678f,0x6960,0x6e73,0xf922,0x7537,0xf923,
-0xf924,0xf925,0x7d0d,0xf926,0xf927,0x8872,0x56ca,0x5a18,
-0xf928,0xf929,0xf92a,0xf92b,0xf92c,0x4e43,0xf92d,0x5167,
-0x5948,0x67f0,0x8010,0xf92e,0x5973,0x5e74,0x649a,0x79ca,
-0x5ff5,0x606c,0x62c8,0x637b,0x5be7,0x5bd7,0x52aa,0xf92f,
-0x5974,0x5f29,0x6012,0xf930,0xf931,0xf932,0x7459,0xf933,
-0xf934,0xf935,0xf936,0xf937,0xf938,0x99d1,0xf939,0xf93a,
-0xf93b,0xf93c,0xf93d,0xf93e,0xf93f,0xf940,0xf941,0xf942,
-0xf943,0x6fc3,0xf944,0xf945,0x81bf,0x8fb2,0x60f1,0xf946,
-0xf947,0x8166,0xf948,0xf949,0x5c3f,0xf94a,0xf94b,0xf94c,
-0xf94d,0xf94e,0xf94f,0xf950,0xf951,0x5ae9,0x8a25,0x677b,
-0x7d10,0xf952,0xf953,0xf954,0xf955,0xf956,0xf957,0x80fd,
-0xf958,0xf959,0x5c3c,0x6ce5,0x533f,0x6eba,0x591a,0x8336,
-0x4e39,0x4eb6,0x4f46,0x55ae,0x5718,0x58c7,0x5f56,0x65b7,
-0x65e6,0x6a80,0x6bb5,0x6e4d,0x77ed,0x7aef,0x7c1e,0x7dde,
-0x86cb,0x8892,0x9132,0x935b,0x64bb,0x6fbe,0x737a,0x75b8,
-0x9054,0x5556,0x574d,0x61ba,0x64d4,0x66c7,0x6de1,0x6e5b,
-0x6f6d,0x6fb9,0x75f0,0x8043,0x81bd,0x8541,0x8983,0x8ac7,
-0x8b5a,0x931f,0x6c93,0x7553,0x7b54,0x8e0f,0x905d,0x5510,
-0x5802,0x5858,0x5e62,0x6207,0x649e,0x68e0,0x7576,0x7cd6,
-0x87b3,0x9ee8,0x4ee3,0x5788,0x576e,0x5927,0x5c0d,0x5cb1,
-0x5e36,0x5f85,0x6234,0x64e1,0x73b3,0x81fa,0x888b,0x8cb8,
-0x968a,0x9edb,0x5b85,0x5fb7,0x60b3,0x5012,0x5200,0x5230,
-0x5716,0x5835,0x5857,0x5c0e,0x5c60,0x5cf6,0x5d8b,0x5ea6,
-0x5f92,0x60bc,0x6311,0x6389,0x6417,0x6843,0x68f9,0x6ac2,
-0x6dd8,0x6e21,0x6ed4,0x6fe4,0x71fe,0x76dc,0x7779,0x79b1,
-0x7a3b,0x8404,0x89a9,0x8ced,0x8df3,0x8e48,0x9003,0x9014,
-0x9053,0x90fd,0x934d,0x9676,0x97dc,0x6bd2,0x7006,0x7258,
-0x72a2,0x7368,0x7763,0x79bf,0x7be4,0x7e9b,0x8b80,0x58a9,
-0x60c7,0x6566,0x65fd,0x66be,0x6c8c,0x711e,0x71c9,0x8c5a,
-0x9813,0x4e6d,0x7a81,0x4edd,0x51ac,0x51cd,0x52d5,0x540c,
-0x61a7,0x6771,0x6850,0x68df,0x6d1e,0x6f7c,0x75bc,0x77b3,
-0x7ae5,0x80f4,0x8463,0x9285,0x515c,0x6597,0x675c,0x6793,
-0x75d8,0x7ac7,0x8373,0xf95a,0x8c46,0x9017,0x982d,0x5c6f,
-0x81c0,0x829a,0x9041,0x906f,0x920d,0x5f97,0x5d9d,0x6a59,
-0x71c8,0x767b,0x7b49,0x85e4,0x8b04,0x9127,0x9a30,0x5587,
-0x61f6,0xf95b,0x7669,0x7f85,0x863f,0x87ba,0x88f8,0x908f,
-0xf95c,0x6d1b,0x70d9,0x73de,0x7d61,0x843d,0xf95d,0x916a,
-0x99f1,0xf95e,0x4e82,0x5375,0x6b04,0x6b12,0x703e,0x721b,
-0x862d,0x9e1e,0x524c,0x8fa3,0x5d50,0x64e5,0x652c,0x6b16,
-0x6feb,0x7c43,0x7e9c,0x85cd,0x8964,0x89bd,0x62c9,0x81d8,
-0x881f,0x5eca,0x6717,0x6d6a,0x72fc,0x7405,0x746f,0x8782,
-0x90de,0x4f86,0x5d0d,0x5fa0,0x840a,0x51b7,0x63a0,0x7565,
-0x4eae,0x5006,0x5169,0x51c9,0x6881,0x6a11,0x7cae,0x7cb1,
-0x7ce7,0x826f,0x8ad2,0x8f1b,0x91cf,0x4fb6,0x5137,0x52f5,
-0x5442,0x5eec,0x616e,0x623e,0x65c5,0x6ada,0x6ffe,0x792a,
-0x85dc,0x8823,0x95ad,0x9a62,0x9a6a,0x9e97,0x9ece,0x529b,
-0x66c6,0x6b77,0x701d,0x792b,0x8f62,0x9742,0x6190,0x6200,
-0x6523,0x6f23,0x7149,0x7489,0x7df4,0x806f,0x84ee,0x8f26,
-0x9023,0x934a,0x51bd,0x5217,0x52a3,0x6d0c,0x70c8,0x88c2,
-0x5ec9,0x6582,0x6bae,0x6fc2,0x7c3e,0x7375,0x4ee4,0x4f36,
-0x56f9,0xf95f,0x5cba,0x5dba,0x601c,0x73b2,0x7b2d,0x7f9a,
-0x7fce,0x8046,0x901e,0x9234,0x96f6,0x9748,0x9818,0x9f61,
-0x4f8b,0x6fa7,0x79ae,0x91b4,0x96b7,0x52de,0xf960,0x6488,
-0x64c4,0x6ad3,0x6f5e,0x7018,0x7210,0x76e7,0x8001,0x8606,
-0x865c,0x8def,0x8f05,0x9732,0x9b6f,0x9dfa,0x9e75,0x788c,
-0x797f,0x7da0,0x83c9,0x9304,0x9e7f,0x9e93,0x8ad6,0x58df,
-0x5f04,0x6727,0x7027,0x74cf,0x7c60,0x807e,0x5121,0x7028,
-0x7262,0x78ca,0x8cc2,0x8cda,0x8cf4,0x96f7,0x4e86,0x50da,
-0x5bee,0x5ed6,0x6599,0x71ce,0x7642,0x77ad,0x804a,0x84fc,
-0x907c,0x9b27,0x9f8d,0x58d8,0x5a41,0x5c62,0x6a13,0x6dda,
-0x6f0f,0x763b,0x7d2f,0x7e37,0x851e,0x8938,0x93e4,0x964b,
-0x5289,0x65d2,0x67f3,0x69b4,0x6d41,0x6e9c,0x700f,0x7409,
-0x7460,0x7559,0x7624,0x786b,0x8b2c,0x985e,0x516d,0x622e,
-0x9678,0x4f96,0x502b,0x5d19,0x6dea,0x7db8,0x8f2a,0x5f8b,
-0x6144,0x6817,0xf961,0x9686,0x52d2,0x808b,0x51dc,0x51cc,
-0x695e,0x7a1c,0x7dbe,0x83f1,0x9675,0x4fda,0x5229,0x5398,
-0x540f,0x550e,0x5c65,0x60a7,0x674e,0x68a8,0x6d6c,0x7281,
-0x72f8,0x7406,0x7483,0xf962,0x75e2,0x7c6c,0x7f79,0x7fb8,
-0x8389,0x88cf,0x88e1,0x91cc,0x91d0,0x96e2,0x9bc9,0x541d,
-0x6f7e,0x71d0,0x7498,0x85fa,0x8eaa,0x96a3,0x9c57,0x9e9f,
-0x6797,0x6dcb,0x7433,0x81e8,0x9716,0x782c,0x7acb,0x7b20,
-0x7c92,0x6469,0x746a,0x75f2,0x78bc,0x78e8,0x99ac,0x9b54,
-0x9ebb,0x5bde,0x5e55,0x6f20,0x819c,0x83ab,0x9088,0x4e07,
-0x534d,0x5a29,0x5dd2,0x5f4e,0x6162,0x633d,0x6669,0x66fc,
-0x6eff,0x6f2b,0x7063,0x779e,0x842c,0x8513,0x883b,0x8f13,
-0x9945,0x9c3b,0x551c,0x62b9,0x672b,0x6cab,0x8309,0x896a,
-0x977a,0x4ea1,0x5984,0x5fd8,0x5fd9,0x671b,0x7db2,0x7f54,
-0x8292,0x832b,0x83bd,0x8f1e,0x9099,0x57cb,0x59b9,0x5a92,
-0x5bd0,0x6627,0x679a,0x6885,0x6bcf,0x7164,0x7f75,0x8cb7,
-0x8ce3,0x9081,0x9b45,0x8108,0x8c8a,0x964c,0x9a40,0x9ea5,
-0x5b5f,0x6c13,0x731b,0x76f2,0x76df,0x840c,0x51aa,0x8993,
-0x514d,0x5195,0x52c9,0x68c9,0x6c94,0x7704,0x7720,0x7dbf,
-0x7dec,0x9762,0x9eb5,0x6ec5,0x8511,0x51a5,0x540d,0x547d,
-0x660e,0x669d,0x6927,0x6e9f,0x76bf,0x7791,0x8317,0x84c2,
-0x879f,0x9169,0x9298,0x9cf4,0x8882,0x4fae,0x5192,0x52df,
-0x59c6,0x5e3d,0x6155,0x6478,0x6479,0x66ae,0x67d0,0x6a21,
-0x6bcd,0x6bdb,0x725f,0x7261,0x7441,0x7738,0x77db,0x8017,
-0x82bc,0x8305,0x8b00,0x8b28,0x8c8c,0x6728,0x6c90,0x7267,
-0x76ee,0x7766,0x7a46,0x9da9,0x6b7f,0x6c92,0x5922,0x6726,
-0x8499,0x536f,0x5893,0x5999,0x5edf,0x63cf,0x6634,0x6773,
-0x6e3a,0x732b,0x7ad7,0x82d7,0x9328,0x52d9,0x5deb,0x61ae,
-0x61cb,0x620a,0x62c7,0x64ab,0x65e0,0x6959,0x6b66,0x6bcb,
-0x7121,0x73f7,0x755d,0x7e46,0x821e,0x8302,0x856a,0x8aa3,
-0x8cbf,0x9727,0x9d61,0x58a8,0x9ed8,0x5011,0x520e,0x543b,
-0x554f,0x6587,0x6c76,0x7d0a,0x7d0b,0x805e,0x868a,0x9580,
-0x96ef,0x52ff,0x6c95,0x7269,0x5473,0x5a9a,0x5c3e,0x5d4b,
-0x5f4c,0x5fae,0x672a,0x68b6,0x6963,0x6e3c,0x6e44,0x7709,
-0x7c73,0x7f8e,0x8587,0x8b0e,0x8ff7,0x9761,0x9ef4,0x5cb7,
-0x60b6,0x610d,0x61ab,0x654f,0x65fb,0x65fc,0x6c11,0x6cef,
-0x739f,0x73c9,0x7de1,0x9594,0x5bc6,0x871c,0x8b10,0x525d,
-0x535a,0x62cd,0x640f,0x64b2,0x6734,0x6a38,0x6cca,0x73c0,
-0x749e,0x7b94,0x7c95,0x7e1b,0x818a,0x8236,0x8584,0x8feb,
-0x96f9,0x99c1,0x4f34,0x534a,0x53cd,0x53db,0x62cc,0x642c,
-0x6500,0x6591,0x69c3,0x6cee,0x6f58,0x73ed,0x7554,0x7622,
-0x76e4,0x76fc,0x78d0,0x78fb,0x792c,0x7d46,0x822c,0x87e0,
-0x8fd4,0x9812,0x98ef,0x52c3,0x62d4,0x64a5,0x6e24,0x6f51,
-0x767c,0x8dcb,0x91b1,0x9262,0x9aee,0x9b43,0x5023,0x508d,
-0x574a,0x59a8,0x5c28,0x5e47,0x5f77,0x623f,0x653e,0x65b9,
-0x65c1,0x6609,0x678b,0x699c,0x6ec2,0x78c5,0x7d21,0x80aa,
-0x8180,0x822b,0x82b3,0x84a1,0x868c,0x8a2a,0x8b17,0x90a6,
-0x9632,0x9f90,0x500d,0x4ff3,0xf963,0x57f9,0x5f98,0x62dc,
-0x6392,0x676f,0x6e43,0x7119,0x76c3,0x80cc,0x80da,0x88f4,
-0x88f5,0x8919,0x8ce0,0x8f29,0x914d,0x966a,0x4f2f,0x4f70,
-0x5e1b,0x67cf,0x6822,0x767d,0x767e,0x9b44,0x5e61,0x6a0a,
-0x7169,0x71d4,0x756a,0xf964,0x7e41,0x8543,0x85e9,0x98dc,
-0x4f10,0x7b4f,0x7f70,0x95a5,0x51e1,0x5e06,0x68b5,0x6c3e,
-0x6c4e,0x6cdb,0x72af,0x7bc4,0x8303,0x6cd5,0x743a,0x50fb,
-0x5288,0x58c1,0x64d8,0x6a97,0x74a7,0x7656,0x78a7,0x8617,
-0x95e2,0x9739,0xf965,0x535e,0x5f01,0x8b8a,0x8fa8,0x8faf,
-0x908a,0x5225,0x77a5,0x9c49,0x9f08,0x4e19,0x5002,0x5175,
-0x5c5b,0x5e77,0x661e,0x663a,0x67c4,0x68c5,0x70b3,0x7501,
-0x75c5,0x79c9,0x7add,0x8f27,0x9920,0x9a08,0x4fdd,0x5821,
-0x5831,0x5bf6,0x666e,0x6b65,0x6d11,0x6e7a,0x6f7d,0x73e4,
-0x752b,0x83e9,0x88dc,0x8913,0x8b5c,0x8f14,0x4f0f,0x50d5,
-0x5310,0x535c,0x5b93,0x5fa9,0x670d,0x798f,0x8179,0x832f,
-0x8514,0x8907,0x8986,0x8f39,0x8f3b,0x99a5,0x9c12,0x672c,
-0x4e76,0x4ff8,0x5949,0x5c01,0x5cef,0x5cf0,0x6367,0x68d2,
-0x70fd,0x71a2,0x742b,0x7e2b,0x84ec,0x8702,0x9022,0x92d2,
-0x9cf3,0x4e0d,0x4ed8,0x4fef,0x5085,0x5256,0x526f,0x5426,
-0x5490,0x57e0,0x592b,0x5a66,0x5b5a,0x5b75,0x5bcc,0x5e9c,
-0xf966,0x6276,0x6577,0x65a7,0x6d6e,0x6ea5,0x7236,0x7b26,
-0x7c3f,0x7f36,0x8150,0x8151,0x819a,0x8240,0x8299,0x83a9,
-0x8a03,0x8ca0,0x8ce6,0x8cfb,0x8d74,0x8dba,0x90e8,0x91dc,
-0x961c,0x9644,0x99d9,0x9ce7,0x5317,0x5206,0x5429,0x5674,
-0x58b3,0x5954,0x596e,0x5fff,0x61a4,0x626e,0x6610,0x6c7e,
-0x711a,0x76c6,0x7c89,0x7cde,0x7d1b,0x82ac,0x8cc1,0x96f0,
-0xf967,0x4f5b,0x5f17,0x5f7f,0x62c2,0x5d29,0x670b,0x68da,
-0x787c,0x7e43,0x9d6c,0x4e15,0x5099,0x5315,0x532a,0x5351,
-0x5983,0x5a62,0x5e87,0x60b2,0x618a,0x6249,0x6279,0x6590,
-0x6787,0x69a7,0x6bd4,0x6bd6,0x6bd7,0x6bd8,0x6cb8,0xf968,
-0x7435,0x75fa,0x7812,0x7891,0x79d5,0x79d8,0x7c83,0x7dcb,
-0x7fe1,0x80a5,0x813e,0x81c2,0x83f2,0x871a,0x88e8,0x8ab9,
-0x8b6c,0x8cbb,0x9119,0x975e,0x98db,0x9f3b,0x56ac,0x5b2a,
-0x5f6c,0x658c,0x6ab3,0x6baf,0x6d5c,0x6ff1,0x7015,0x725d,
-0x73ad,0x8ca7,0x8cd3,0x983b,0x6191,0x6c37,0x8058,0x9a01,
-0x4e4d,0x4e8b,0x4e9b,0x4ed5,0x4f3a,0x4f3c,0x4f7f,0x4fdf,
-0x50ff,0x53f2,0x53f8,0x5506,0x55e3,0x56db,0x58eb,0x5962,
-0x5a11,0x5beb,0x5bfa,0x5c04,0x5df3,0x5e2b,0x5f99,0x601d,
-0x6368,0x659c,0x65af,0x67f6,0x67fb,0x68ad,0x6b7b,0x6c99,
-0x6cd7,0x6e23,0x7009,0x7345,0x7802,0x793e,0x7940,0x7960,
-0x79c1,0x7be9,0x7d17,0x7d72,0x8086,0x820d,0x838e,0x84d1,
-0x86c7,0x88df,0x8a50,0x8a5e,0x8b1d,0x8cdc,0x8d66,0x8fad,
-0x90aa,0x98fc,0x99df,0x9e9d,0x524a,0xf969,0x6714,0xf96a,
-0x5098,0x522a,0x5c71,0x6563,0x6c55,0x73ca,0x7523,0x759d,
-0x7b97,0x849c,0x9178,0x9730,0x4e77,0x6492,0x6bba,0x715e,
-0x85a9,0x4e09,0xf96b,0x6749,0x68ee,0x6e17,0x829f,0x8518,
-0x886b,0x63f7,0x6f81,0x9212,0x98af,0x4e0a,0x50b7,0x50cf,
-0x511f,0x5546,0x55aa,0x5617,0x5b40,0x5c19,0x5ce0,0x5e38,
-0x5e8a,0x5ea0,0x5ec2,0x60f3,0x6851,0x6a61,0x6e58,0x723d,
-0x7240,0x72c0,0x76f8,0x7965,0x7bb1,0x7fd4,0x88f3,0x89f4,
-0x8a73,0x8c61,0x8cde,0x971c,0x585e,0x74bd,0x8cfd,0x55c7,
-0xf96c,0x7a61,0x7d22,0x8272,0x7272,0x751f,0x7525,0xf96d,
-0x7b19,0x5885,0x58fb,0x5dbc,0x5e8f,0x5eb6,0x5f90,0x6055,
-0x6292,0x637f,0x654d,0x6691,0x66d9,0x66f8,0x6816,0x68f2,
-0x7280,0x745e,0x7b6e,0x7d6e,0x7dd6,0x7f72,0x80e5,0x8212,
-0x85af,0x897f,0x8a93,0x901d,0x92e4,0x9ecd,0x9f20,0x5915,
-0x596d,0x5e2d,0x60dc,0x6614,0x6673,0x6790,0x6c50,0x6dc5,
-0x6f5f,0x77f3,0x78a9,0x84c6,0x91cb,0x932b,0x4ed9,0x50ca,
-0x5148,0x5584,0x5b0b,0x5ba3,0x6247,0x657e,0x65cb,0x6e32,
-0x717d,0x7401,0x7444,0x7487,0x74bf,0x766c,0x79aa,0x7dda,
-0x7e55,0x7fa8,0x817a,0x81b3,0x8239,0x861a,0x87ec,0x8a75,
-0x8de3,0x9078,0x9291,0x9425,0x994d,0x9bae,0x5368,0x5c51,
-0x6954,0x6cc4,0x6d29,0x6e2b,0x820c,0x859b,0x893b,0x8a2d,
-0x8aaa,0x96ea,0x9f67,0x5261,0x66b9,0x6bb2,0x7e96,0x87fe,
-0x8d0d,0x9583,0x965d,0x651d,0x6d89,0x71ee,0xf96e,0x57ce,
-0x59d3,0x5bac,0x6027,0x60fa,0x6210,0x661f,0x665f,0x7329,
-0x73f9,0x76db,0x7701,0x7b6c,0x8056,0x8072,0x8165,0x8aa0,
-0x9192,0x4e16,0x52e2,0x6b72,0x6d17,0x7a05,0x7b39,0x7d30,
-0xf96f,0x8cb0,0x53ec,0x562f,0x5851,0x5bb5,0x5c0f,0x5c11,
-0x5de2,0x6240,0x6383,0x6414,0x662d,0x68b3,0x6cbc,0x6d88,
-0x6eaf,0x701f,0x70a4,0x71d2,0x7526,0x758f,0x758e,0x7619,
-0x7b11,0x7be0,0x7c2b,0x7d20,0x7d39,0x852c,0x856d,0x8607,
-0x8a34,0x900d,0x9061,0x90b5,0x92b7,0x97f6,0x9a37,0x4fd7,
-0x5c6c,0x675f,0x6d91,0x7c9f,0x7e8c,0x8b16,0x8d16,0x901f,
-0x5b6b,0x5dfd,0x640d,0x84c0,0x905c,0x98e1,0x7387,0x5b8b,
-0x609a,0x677e,0x6dde,0x8a1f,0x8aa6,0x9001,0x980c,0x5237,
-0xf970,0x7051,0x788e,0x9396,0x8870,0x91d7,0x4fee,0x53d7,
-0x55fd,0x56da,0x5782,0x58fd,0x5ac2,0x5b88,0x5cab,0x5cc0,
-0x5e25,0x6101,0x620d,0x624b,0x6388,0x641c,0x6536,0x6578,
-0x6a39,0x6b8a,0x6c34,0x6d19,0x6f31,0x71e7,0x72e9,0x7378,
-0x7407,0x74b2,0x7626,0x7761,0x79c0,0x7a57,0x7aea,0x7cb9,
-0x7d8f,0x7dac,0x7e61,0x7f9e,0x8129,0x8331,0x8490,0x84da,
-0x85ea,0x8896,0x8ab0,0x8b90,0x8f38,0x9042,0x9083,0x916c,
-0x9296,0x92b9,0x968b,0x96a7,0x96a8,0x96d6,0x9700,0x9808,
-0x9996,0x9ad3,0x9b1a,0x53d4,0x587e,0x5919,0x5b70,0x5bbf,
-0x6dd1,0x6f5a,0x719f,0x7421,0x74b9,0x8085,0x83fd,0x5de1,
-0x5f87,0x5faa,0x6042,0x65ec,0x6812,0x696f,0x6a53,0x6b89,
-0x6d35,0x6df3,0x73e3,0x76fe,0x77ac,0x7b4d,0x7d14,0x8123,
-0x821c,0x8340,0x84f4,0x8563,0x8a62,0x8ac4,0x9187,0x931e,
-0x9806,0x99b4,0x620c,0x8853,0x8ff0,0x9265,0x5d07,0x5d27,
-0x5d69,0x745f,0x819d,0x8768,0x6fd5,0x62fe,0x7fd2,0x8936,
-0x8972,0x4e1e,0x4e58,0x50e7,0x52dd,0x5347,0x627f,0x6607,
-0x7e69,0x8805,0x965e,0x4f8d,0x5319,0x5636,0x59cb,0x5aa4,
-0x5c38,0x5c4e,0x5c4d,0x5e02,0x5f11,0x6043,0x65bd,0x662f,
-0x6642,0x67be,0x67f4,0x731c,0x77e2,0x793a,0x7fc5,0x8494,
-0x84cd,0x8996,0x8a66,0x8a69,0x8ae1,0x8c55,0x8c7a,0x57f4,
-0x5bd4,0x5f0f,0x606f,0x62ed,0x690d,0x6b96,0x6e5c,0x7184,
-0x7bd2,0x8755,0x8b58,0x8efe,0x98df,0x98fe,0x4f38,0x4f81,
-0x4fe1,0x547b,0x5a20,0x5bb8,0x613c,0x65b0,0x6668,0x71fc,
-0x7533,0x795e,0x7d33,0x814e,0x81e3,0x8398,0x85aa,0x85ce,
-0x8703,0x8a0a,0x8eab,0x8f9b,0xf971,0x8fc5,0x5931,0x5ba4,
-0x5be6,0x6089,0x5be9,0x5c0b,0x5fc3,0x6c81,0xf972,0x6df1,
-0x700b,0x751a,0x82af,0x8af6,0x4ec0,0x5341,0xf973,0x96d9,
-0x6c0f,0x4e9e,0x4fc4,0x5152,0x555e,0x5a25,0x5ce8,0x6211,
-0x7259,0x82bd,0x83aa,0x86fe,0x8859,0x8a1d,0x963f,0x96c5,
-0x9913,0x9d09,0x9d5d,0x580a,0x5cb3,0x5dbd,0x5e44,0x60e1,
-0x6115,0x63e1,0x6a02,0x6e25,0x9102,0x9354,0x984e,0x9c10,
-0x9f77,0x5b89,0x5cb8,0x6309,0x664f,0x6848,0x773c,0x96c1,
-0x978d,0x9854,0x9b9f,0x65a1,0x8b01,0x8ecb,0x95bc,0x5535,
-0x5ca9,0x5dd6,0x5eb5,0x6697,0x764c,0x83f4,0x95c7,0x58d3,
-0x62bc,0x72ce,0x9d28,0x4ef0,0x592e,0x600f,0x663b,0x6b83,
-0x79e7,0x9d26,0x5393,0x54c0,0x57c3,0x5d16,0x611b,0x66d6,
-0x6daf,0x788d,0x827e,0x9698,0x9744,0x5384,0x627c,0x6396,
-0x6db2,0x7e0a,0x814b,0x984d,0x6afb,0x7f4c,0x9daf,0x9e1a,
-0x4e5f,0x503b,0x51b6,0x591c,0x60f9,0x63f6,0x6930,0x723a,
-0x8036,0xf974,0x91ce,0x5f31,0xf975,0xf976,0x7d04,0x82e5,
-0x846f,0x84bb,0x85e5,0x8e8d,0xf977,0x4f6f,0xf978,0xf979,
-0x58e4,0x5b43,0x6059,0x63da,0x6518,0x656d,0x6698,0xf97a,
-0x694a,0x6a23,0x6d0b,0x7001,0x716c,0x75d2,0x760d,0x79b3,
-0x7a70,0xf97b,0x7f8a,0xf97c,0x8944,0xf97d,0x8b93,0x91c0,
-0x967d,0xf97e,0x990a,0x5704,0x5fa1,0x65bc,0x6f01,0x7600,
-0x79a6,0x8a9e,0x99ad,0x9b5a,0x9f6c,0x5104,0x61b6,0x6291,
-0x6a8d,0x81c6,0x5043,0x5830,0x5f66,0x7109,0x8a00,0x8afa,
-0x5b7c,0x8616,0x4ffa,0x513c,0x56b4,0x5944,0x63a9,0x6df9,
-0x5daa,0x696d,0x5186,0x4e88,0x4f59,0xf97f,0xf980,0xf981,
-0x5982,0xf982,0xf983,0x6b5f,0x6c5d,0xf984,0x74b5,0x7916,
-0xf985,0x8207,0x8245,0x8339,0x8f3f,0x8f5d,0xf986,0x9918,
-0xf987,0xf988,0xf989,0x4ea6,0xf98a,0x57df,0x5f79,0x6613,
-0xf98b,0xf98c,0x75ab,0x7e79,0x8b6f,0xf98d,0x9006,0x9a5b,
-0x56a5,0x5827,0x59f8,0x5a1f,0x5bb4,0xf98e,0x5ef6,0xf98f,
-0xf990,0x6350,0x633b,0xf991,0x693d,0x6c87,0x6cbf,0x6d8e,
-0x6d93,0x6df5,0x6f14,0xf992,0x70df,0x7136,0x7159,0xf993,
-0x71c3,0x71d5,0xf994,0x784f,0x786f,0xf995,0x7b75,0x7de3,
-0xf996,0x7e2f,0xf997,0x884d,0x8edf,0xf998,0xf999,0xf99a,
-0x925b,0xf99b,0x9cf6,0xf99c,0xf99d,0xf99e,0x6085,0x6d85,
-0xf99f,0x71b1,0xf9a0,0xf9a1,0x95b1,0x53ad,0xf9a2,0xf9a3,
-0xf9a4,0x67d3,0xf9a5,0x708e,0x7130,0x7430,0x8276,0x82d2,
-0xf9a6,0x95bb,0x9ae5,0x9e7d,0x66c4,0xf9a7,0x71c1,0x8449,
-0xf9a8,0xf9a9,0x584b,0xf9aa,0xf9ab,0x5db8,0x5f71,0xf9ac,
-0x6620,0x668e,0x6979,0x69ae,0x6c38,0x6cf3,0x6e36,0x6f41,
-0x6fda,0x701b,0x702f,0x7150,0x71df,0x7370,0xf9ad,0x745b,
-0xf9ae,0x74d4,0x76c8,0x7a4e,0x7e93,0xf9af,0xf9b0,0x82f1,
-0x8a60,0x8fce,0xf9b1,0x9348,0xf9b2,0x9719,0xf9b3,0xf9b4,
-0x4e42,0x502a,0xf9b5,0x5208,0x53e1,0x66f3,0x6c6d,0x6fca,
-0x730a,0x777f,0x7a62,0x82ae,0x85dd,0x8602,0xf9b6,0x88d4,
-0x8a63,0x8b7d,0x8c6b,0xf9b7,0x92b3,0xf9b8,0x9713,0x9810,
-0x4e94,0x4f0d,0x4fc9,0x50b2,0x5348,0x543e,0x5433,0x55da,
-0x5862,0x58ba,0x5967,0x5a1b,0x5be4,0x609f,0xf9b9,0x61ca,
-0x6556,0x65ff,0x6664,0x68a7,0x6c5a,0x6fb3,0x70cf,0x71ac,
-0x7352,0x7b7d,0x8708,0x8aa4,0x9c32,0x9f07,0x5c4b,0x6c83,
-0x7344,0x7389,0x923a,0x6eab,0x7465,0x761f,0x7a69,0x7e15,
-0x860a,0x5140,0x58c5,0x64c1,0x74ee,0x7515,0x7670,0x7fc1,
-0x9095,0x96cd,0x9954,0x6e26,0x74e6,0x7aa9,0x7aaa,0x81e5,
-0x86d9,0x8778,0x8a1b,0x5a49,0x5b8c,0x5b9b,0x68a1,0x6900,
-0x6d63,0x73a9,0x7413,0x742c,0x7897,0x7de9,0x7feb,0x8118,
-0x8155,0x839e,0x8c4c,0x962e,0x9811,0x66f0,0x5f80,0x65fa,
-0x6789,0x6c6a,0x738b,0x502d,0x5a03,0x6b6a,0x77ee,0x5916,
-0x5d6c,0x5dcd,0x7325,0x754f,0xf9ba,0xf9bb,0x50e5,0x51f9,
-0x582f,0x592d,0x5996,0x59da,0x5be5,0xf9bc,0xf9bd,0x5da2,
-0x62d7,0x6416,0x6493,0x64fe,0xf9be,0x66dc,0xf9bf,0x6a48,
-0xf9c0,0x71ff,0x7464,0xf9c1,0x7a88,0x7aaf,0x7e47,0x7e5e,
-0x8000,0x8170,0xf9c2,0x87ef,0x8981,0x8b20,0x9059,0xf9c3,
-0x9080,0x9952,0x617e,0x6b32,0x6d74,0x7e1f,0x8925,0x8fb1,
-0x4fd1,0x50ad,0x5197,0x52c7,0x57c7,0x5889,0x5bb9,0x5eb8,
-0x6142,0x6995,0x6d8c,0x6e67,0x6eb6,0x7194,0x7462,0x7528,
-0x752c,0x8073,0x8338,0x84c9,0x8e0a,0x9394,0x93de,0xf9c4,
-0x4e8e,0x4f51,0x5076,0x512a,0x53c8,0x53cb,0x53f3,0x5b87,
-0x5bd3,0x5c24,0x611a,0x6182,0x65f4,0x725b,0x7397,0x7440,
-0x76c2,0x7950,0x7991,0x79b9,0x7d06,0x7fbd,0x828b,0x85d5,
-0x865e,0x8fc2,0x9047,0x90f5,0x91ea,0x9685,0x96e8,0x96e9,
-0x52d6,0x5f67,0x65ed,0x6631,0x682f,0x715c,0x7a36,0x90c1,
-0x980a,0x4e91,0xf9c5,0x6a52,0x6b9e,0x6f90,0x7189,0x8018,
-0x82b8,0x8553,0x904b,0x9695,0x96f2,0x97fb,0x851a,0x9b31,
-0x4e90,0x718a,0x96c4,0x5143,0x539f,0x54e1,0x5713,0x5712,
-0x57a3,0x5a9b,0x5ac4,0x5bc3,0x6028,0x613f,0x63f4,0x6c85,
-0x6d39,0x6e72,0x6e90,0x7230,0x733f,0x7457,0x82d1,0x8881,
-0x8f45,0x9060,0xf9c6,0x9662,0x9858,0x9d1b,0x6708,0x8d8a,
-0x925e,0x4f4d,0x5049,0x50de,0x5371,0x570d,0x59d4,0x5a01,
-0x5c09,0x6170,0x6690,0x6e2d,0x7232,0x744b,0x7def,0x80c3,
-0x840e,0x8466,0x853f,0x875f,0x885b,0x8918,0x8b02,0x9055,
-0x97cb,0x9b4f,0x4e73,0x4f91,0x5112,0x516a,0xf9c7,0x552f,
-0x55a9,0x5b7a,0x5ba5,0x5e7c,0x5e7d,0x5ebe,0x60a0,0x60df,
-0x6108,0x6109,0x63c4,0x6538,0x6709,0xf9c8,0x67d4,0x67da,
-0xf9c9,0x6961,0x6962,0x6cb9,0x6d27,0xf9ca,0x6e38,0xf9cb,
-0x6fe1,0x7336,0x7337,0xf9cc,0x745c,0x7531,0xf9cd,0x7652,
-0xf9ce,0xf9cf,0x7dad,0x81fe,0x8438,0x88d5,0x8a98,0x8adb,
-0x8aed,0x8e30,0x8e42,0x904a,0x903e,0x907a,0x9149,0x91c9,
-0x936e,0xf9d0,0xf9d1,0x5809,0xf9d2,0x6bd3,0x8089,0x80b2,
-0xf9d3,0xf9d4,0x5141,0x596b,0x5c39,0xf9d5,0xf9d6,0x6f64,
-0x73a7,0x80e4,0x8d07,0xf9d7,0x9217,0x958f,0xf9d8,0xf9d9,
-0xf9da,0xf9db,0x807f,0x620e,0x701c,0x7d68,0x878d,0xf9dc,
-0x57a0,0x6069,0x6147,0x6bb7,0x8abe,0x9280,0x96b1,0x4e59,
-0x541f,0x6deb,0x852d,0x9670,0x97f3,0x98ee,0x63d6,0x6ce3,
-0x9091,0x51dd,0x61c9,0x81ba,0x9df9,0x4f9d,0x501a,0x5100,
-0x5b9c,0x610f,0x61ff,0x64ec,0x6905,0x6bc5,0x7591,0x77e3,
-0x7fa9,0x8264,0x858f,0x87fb,0x8863,0x8abc,0x8b70,0x91ab,
-0x4e8c,0x4ee5,0x4f0a,0xf9dd,0xf9de,0x5937,0x59e8,0xf9df,
-0x5df2,0x5f1b,0x5f5b,0x6021,0xf9e0,0xf9e1,0xf9e2,0xf9e3,
-0x723e,0x73e5,0xf9e4,0x7570,0x75cd,0xf9e5,0x79fb,0xf9e6,
-0x800c,0x8033,0x8084,0x82e1,0x8351,0xf9e7,0xf9e8,0x8cbd,
-0x8cb3,0x9087,0xf9e9,0xf9ea,0x98f4,0x990c,0xf9eb,0xf9ec,
-0x7037,0x76ca,0x7fca,0x7fcc,0x7ffc,0x8b1a,0x4eba,0x4ec1,
-0x5203,0x5370,0xf9ed,0x54bd,0x56e0,0x59fb,0x5bc5,0x5f15,
-0x5fcd,0x6e6e,0xf9ee,0xf9ef,0x7d6a,0x8335,0xf9f0,0x8693,
-0x8a8d,0xf9f1,0x976d,0x9777,0xf9f2,0xf9f3,0x4e00,0x4f5a,
-0x4f7e,0x58f9,0x65e5,0x6ea2,0x9038,0x93b0,0x99b9,0x4efb,
-0x58ec,0x598a,0x59d9,0x6041,0xf9f4,0xf9f5,0x7a14,0xf9f6,
-0x834f,0x8cc3,0x5165,0x5344,0xf9f7,0xf9f8,0xf9f9,0x4ecd,
-0x5269,0x5b55,0x82bf,0x4ed4,0x523a,0x54a8,0x59c9,0x59ff,
-0x5b50,0x5b57,0x5b5c,0x6063,0x6148,0x6ecb,0x7099,0x716e,
-0x7386,0x74f7,0x75b5,0x78c1,0x7d2b,0x8005,0x81ea,0x8328,
-0x8517,0x85c9,0x8aee,0x8cc7,0x96cc,0x4f5c,0x52fa,0x56bc,
-0x65ab,0x6628,0x707c,0x70b8,0x7235,0x7dbd,0x828d,0x914c,
-0x96c0,0x9d72,0x5b71,0x68e7,0x6b98,0x6f7a,0x76de,0x5c91,
-0x66ab,0x6f5b,0x7bb4,0x7c2a,0x8836,0x96dc,0x4e08,0x4ed7,
-0x5320,0x5834,0x58bb,0x58ef,0x596c,0x5c07,0x5e33,0x5e84,
-0x5f35,0x638c,0x66b2,0x6756,0x6a1f,0x6aa3,0x6b0c,0x6f3f,
-0x7246,0xf9fa,0x7350,0x748b,0x7ae0,0x7ca7,0x8178,0x81df,
-0x81e7,0x838a,0x846c,0x8523,0x8594,0x85cf,0x88dd,0x8d13,
-0x91ac,0x9577,0x969c,0x518d,0x54c9,0x5728,0x5bb0,0x624d,
-0x6750,0x683d,0x6893,0x6e3d,0x6ed3,0x707d,0x7e21,0x88c1,
-0x8ca1,0x8f09,0x9f4b,0x9f4e,0x722d,0x7b8f,0x8acd,0x931a,
-0x4f47,0x4f4e,0x5132,0x5480,0x59d0,0x5e95,0x62b5,0x6775,
-0x696e,0x6a17,0x6cae,0x6e1a,0x72d9,0x732a,0x75bd,0x7bb8,
-0x7d35,0x82e7,0x83f9,0x8457,0x85f7,0x8a5b,0x8caf,0x8e87,
-0x9019,0x90b8,0x96ce,0x9f5f,0x52e3,0x540a,0x5ae1,0x5bc2,
-0x6458,0x6575,0x6ef4,0x72c4,0xf9fb,0x7684,0x7a4d,0x7b1b,
-0x7c4d,0x7e3e,0x7fdf,0x837b,0x8b2b,0x8cca,0x8d64,0x8de1,
-0x8e5f,0x8fea,0x8ff9,0x9069,0x93d1,0x4f43,0x4f7a,0x50b3,
-0x5168,0x5178,0x524d,0x526a,0x5861,0x587c,0x5960,0x5c08,
-0x5c55,0x5edb,0x609b,0x6230,0x6813,0x6bbf,0x6c08,0x6fb1,
-0x714e,0x7420,0x7530,0x7538,0x7551,0x7672,0x7b4c,0x7b8b,
-0x7bad,0x7bc6,0x7e8f,0x8a6e,0x8f3e,0x8f49,0x923f,0x9293,
-0x9322,0x942b,0x96fb,0x985a,0x986b,0x991e,0x5207,0x622a,
-0x6298,0x6d59,0x7664,0x7aca,0x7bc0,0x7d76,0x5360,0x5cbe,
-0x5e97,0x6f38,0x70b9,0x7c98,0x9711,0x9b8e,0x9ede,0x63a5,
-0x647a,0x8776,0x4e01,0x4e95,0x4ead,0x505c,0x5075,0x5448,
-0x59c3,0x5b9a,0x5e40,0x5ead,0x5ef7,0x5f81,0x60c5,0x633a,
-0x653f,0x6574,0x65cc,0x6676,0x6678,0x67fe,0x6968,0x6a89,
-0x6b63,0x6c40,0x6dc0,0x6de8,0x6e1f,0x6e5e,0x701e,0x70a1,
-0x738e,0x73fd,0x753a,0x775b,0x7887,0x798e,0x7a0b,0x7a7d,
-0x7cbe,0x7d8e,0x8247,0x8a02,0x8aea,0x8c9e,0x912d,0x914a,
-0x91d8,0x9266,0x92cc,0x9320,0x9706,0x9756,0x975c,0x9802,
-0x9f0e,0x5236,0x5291,0x557c,0x5824,0x5e1d,0x5f1f,0x608c,
-0x63d0,0x68af,0x6fdf,0x796d,0x7b2c,0x81cd,0x85ba,0x88fd,
-0x8af8,0x8e44,0x918d,0x9664,0x969b,0x973d,0x984c,0x9f4a,
-0x4fce,0x5146,0x51cb,0x52a9,0x5632,0x5f14,0x5f6b,0x63aa,
-0x64cd,0x65e9,0x6641,0x66fa,0x66f9,0x671d,0x689d,0x68d7,
-0x69fd,0x6f15,0x6f6e,0x7167,0x71e5,0x722a,0x74aa,0x773a,
-0x7956,0x795a,0x79df,0x7a20,0x7a95,0x7c97,0x7cdf,0x7d44,
-0x7e70,0x8087,0x85fb,0x86a4,0x8a54,0x8abf,0x8d99,0x8e81,
-0x9020,0x906d,0x91e3,0x963b,0x96d5,0x9ce5,0x65cf,0x7c07,
-0x8db3,0x93c3,0x5b58,0x5c0a,0x5352,0x62d9,0x731d,0x5027,
-0x5b97,0x5f9e,0x60b0,0x616b,0x68d5,0x6dd9,0x742e,0x7a2e,
-0x7d42,0x7d9c,0x7e31,0x816b,0x8e2a,0x8e35,0x937e,0x9418,
-0x4f50,0x5750,0x5de6,0x5ea7,0x632b,0x7f6a,0x4e3b,0x4f4f,
-0x4f8f,0x505a,0x59dd,0x80c4,0x546a,0x5468,0x55fe,0x594f,
-0x5b99,0x5dde,0x5eda,0x665d,0x6731,0x67f1,0x682a,0x6ce8,
-0x6d32,0x6e4a,0x6f8d,0x70b7,0x73e0,0x7587,0x7c4c,0x7d02,
-0x7d2c,0x7da2,0x821f,0x86db,0x8a3b,0x8a85,0x8d70,0x8e8a,
-0x8f33,0x9031,0x914e,0x9152,0x9444,0x99d0,0x7af9,0x7ca5,
-0x4fca,0x5101,0x51c6,0x57c8,0x5bef,0x5cfb,0x6659,0x6a3d,
-0x6d5a,0x6e96,0x6fec,0x710c,0x756f,0x7ae3,0x8822,0x9021,
-0x9075,0x96cb,0x99ff,0x8301,0x4e2d,0x4ef2,0x8846,0x91cd,
-0x537d,0x6adb,0x696b,0x6c41,0x847a,0x589e,0x618e,0x66fe,
-0x62ef,0x70dd,0x7511,0x75c7,0x7e52,0x84b8,0x8b49,0x8d08,
-0x4e4b,0x53ea,0x54ab,0x5730,0x5740,0x5fd7,0x6301,0x6307,
-0x646f,0x652f,0x65e8,0x667a,0x679d,0x67b3,0x6b62,0x6c60,
-0x6c9a,0x6f2c,0x77e5,0x7825,0x7949,0x7957,0x7d19,0x80a2,
-0x8102,0x81f3,0x829d,0x82b7,0x8718,0x8a8c,0xf9fc,0x8d04,
-0x8dbe,0x9072,0x76f4,0x7a19,0x7a37,0x7e54,0x8077,0x5507,
-0x55d4,0x5875,0x632f,0x6422,0x6649,0x664b,0x686d,0x699b,
-0x6b84,0x6d25,0x6eb1,0x73cd,0x7468,0x74a1,0x755b,0x75b9,
-0x76e1,0x771e,0x778b,0x79e6,0x7e09,0x7e1d,0x81fb,0x852f,
-0x8897,0x8a3a,0x8cd1,0x8eeb,0x8fb0,0x9032,0x93ad,0x9663,
-0x9673,0x9707,0x4f84,0x53f1,0x59ea,0x5ac9,0x5e19,0x684e,
-0x74c6,0x75be,0x79e9,0x7a92,0x81a3,0x86ed,0x8cea,0x8dcc,
-0x8fed,0x659f,0x6715,0xf9fd,0x57f7,0x6f57,0x7ddd,0x8f2f,
-0x93f6,0x96c6,0x5fb5,0x61f2,0x6f84,0x4e14,0x4f98,0x501f,
-0x53c9,0x55df,0x5d6f,0x5dee,0x6b21,0x6b64,0x78cb,0x7b9a,
-0xf9fe,0x8e49,0x8eca,0x906e,0x6349,0x643e,0x7740,0x7a84,
-0x932f,0x947f,0x9f6a,0x64b0,0x6faf,0x71e6,0x74a8,0x74da,
-0x7ac4,0x7c12,0x7e82,0x7cb2,0x7e98,0x8b9a,0x8d0a,0x947d,
-0x9910,0x994c,0x5239,0x5bdf,0x64e6,0x672d,0x7d2e,0x50ed,
-0x53c3,0x5879,0x6158,0x6159,0x61fa,0x65ac,0x7ad9,0x8b92,
-0x8b96,0x5009,0x5021,0x5275,0x5531,0x5a3c,0x5ee0,0x5f70,
-0x6134,0x655e,0x660c,0x6636,0x66a2,0x69cd,0x6ec4,0x6f32,
-0x7316,0x7621,0x7a93,0x8139,0x8259,0x83d6,0x84bc,0x50b5,
-0x57f0,0x5bc0,0x5be8,0x5f69,0x63a1,0x7826,0x7db5,0x83dc,
-0x8521,0x91c7,0x91f5,0x518a,0x67f5,0x7b56,0x8cac,0x51c4,
-0x59bb,0x60bd,0x8655,0x501c,0xf9ff,0x5254,0x5c3a,0x617d,
-0x621a,0x62d3,0x64f2,0x65a5,0x6ecc,0x7620,0x810a,0x8e60,
-0x965f,0x96bb,0x4edf,0x5343,0x5598,0x5929,0x5ddd,0x64c5,
-0x6cc9,0x6dfa,0x7394,0x7a7f,0x821b,0x85a6,0x8ce4,0x8e10,
-0x9077,0x91e7,0x95e1,0x9621,0x97c6,0x51f8,0x54f2,0x5586,
-0x5fb9,0x64a4,0x6f88,0x7db4,0x8f1f,0x8f4d,0x9435,0x50c9,
-0x5c16,0x6cbe,0x6dfb,0x751b,0x77bb,0x7c3d,0x7c64,0x8a79,
-0x8ac2,0x581e,0x59be,0x5e16,0x6377,0x7252,0x758a,0x776b,
-0x8adc,0x8cbc,0x8f12,0x5ef3,0x6674,0x6df8,0x807d,0x83c1,
-0x8acb,0x9751,0x9bd6,0xfa00,0x5243,0x66ff,0x6d95,0x6eef,
-0x7de0,0x8ae6,0x902e,0x905e,0x9ad4,0x521d,0x527f,0x54e8,
-0x6194,0x6284,0x62db,0x68a2,0x6912,0x695a,0x6a35,0x7092,
-0x7126,0x785d,0x7901,0x790e,0x79d2,0x7a0d,0x8096,0x8278,
-0x82d5,0x8349,0x8549,0x8c82,0x8d85,0x9162,0x918b,0x91ae,
-0x4fc3,0x56d1,0x71ed,0x77d7,0x8700,0x89f8,0x5bf8,0x5fd6,
-0x6751,0x90a8,0x53e2,0x585a,0x5bf5,0x60a4,0x6181,0x6460,
-0x7e3d,0x8070,0x8525,0x9283,0x64ae,0x50ac,0x5d14,0x6700,
-0x589c,0x62bd,0x63a8,0x690e,0x6978,0x6a1e,0x6e6b,0x76ba,
-0x79cb,0x82bb,0x8429,0x8acf,0x8da8,0x8ffd,0x9112,0x914b,
-0x919c,0x9310,0x9318,0x939a,0x96db,0x9a36,0x9c0d,0x4e11,
-0x755c,0x795d,0x7afa,0x7b51,0x7bc9,0x7e2e,0x84c4,0x8e59,
-0x8e74,0x8ef8,0x9010,0x6625,0x693f,0x7443,0x51fa,0x672e,
-0x9edc,0x5145,0x5fe0,0x6c96,0x87f2,0x885d,0x8877,0x60b4,
-0x81b5,0x8403,0x8d05,0x53d6,0x5439,0x5634,0x5a36,0x5c31,
-0x708a,0x7fe0,0x805a,0x8106,0x81ed,0x8da3,0x9189,0x9a5f,
-0x9df2,0x5074,0x4ec4,0x53a0,0x60fb,0x6e2c,0x5c64,0x4f88,
-0x5024,0x55e4,0x5cd9,0x5e5f,0x6065,0x6894,0x6cbb,0x6dc4,
-0x71be,0x75d4,0x75f4,0x7661,0x7a1a,0x7a49,0x7dc7,0x7dfb,
-0x7f6e,0x81f4,0x86a9,0x8f1c,0x96c9,0x99b3,0x9f52,0x5247,
-0x52c5,0x98ed,0x89aa,0x4e03,0x67d2,0x6f06,0x4fb5,0x5be2,
-0x6795,0x6c88,0x6d78,0x741b,0x7827,0x91dd,0x937c,0x87c4,
-0x79e4,0x7a31,0x5feb,0x4ed6,0x54a4,0x553e,0x58ae,0x59a5,
-0x60f0,0x6253,0x62d6,0x6736,0x6955,0x8235,0x9640,0x99b1,
-0x99dd,0x502c,0x5353,0x5544,0x577c,0xfa01,0x6258,0xfa02,
-0x64e2,0x666b,0x67dd,0x6fc1,0x6fef,0x7422,0x7438,0x8a17,
-0x9438,0x5451,0x5606,0x5766,0x5f48,0x619a,0x6b4e,0x7058,
-0x70ad,0x7dbb,0x8a95,0x596a,0x812b,0x63a2,0x7708,0x803d,
-0x8caa,0x5854,0x642d,0x69bb,0x5b95,0x5e11,0x6e6f,0xfa03,
-0x8569,0x514c,0x53f0,0x592a,0x6020,0x614b,0x6b86,0x6c70,
-0x6cf0,0x7b1e,0x80ce,0x82d4,0x8dc6,0x90b0,0x98b1,0xfa04,
-0x64c7,0x6fa4,0x6491,0x6504,0x514e,0x5410,0x571f,0x8a0e,
-0x615f,0x6876,0xfa05,0x75db,0x7b52,0x7d71,0x901a,0x5806,
-0x69cc,0x817f,0x892a,0x9000,0x9839,0x5078,0x5957,0x59ac,
-0x6295,0x900f,0x9b2a,0x615d,0x7279,0x95d6,0x5761,0x5a46,
-0x5df4,0x628a,0x64ad,0x64fa,0x6777,0x6ce2,0x6d3e,0x722c,
-0x7436,0x7834,0x7f77,0x82ad,0x8ddb,0x9817,0x5224,0x5742,
-0x677f,0x7248,0x74e3,0x8ca9,0x8fa6,0x9211,0x962a,0x516b,
-0x53ed,0x634c,0x4f69,0x5504,0x6096,0x6557,0x6c9b,0x6d7f,
-0x724c,0x72fd,0x7a17,0x8987,0x8c9d,0x5f6d,0x6f8e,0x70f9,
-0x81a8,0x610e,0x4fbf,0x504f,0x6241,0x7247,0x7bc7,0x7de8,
-0x7fe9,0x904d,0x97ad,0x9a19,0x8cb6,0x576a,0x5e73,0x67b0,
-0x840d,0x8a55,0x5420,0x5b16,0x5e63,0x5ee2,0x5f0a,0x6583,
-0x80ba,0x853d,0x9589,0x965b,0x4f48,0x5305,0x530d,0x530f,
-0x5486,0x54fa,0x5703,0x5e03,0x6016,0x629b,0x62b1,0x6355,
-0xfa06,0x6ce1,0x6d66,0x75b1,0x7832,0x80de,0x812f,0x82de,
-0x8461,0x84b2,0x888d,0x8912,0x900b,0x92ea,0x98fd,0x9b91,
-0x5e45,0x66b4,0x66dd,0x7011,0x7206,0xfa07,0x4ff5,0x527d,
-0x5f6a,0x6153,0x6753,0x6a19,0x6f02,0x74e2,0x7968,0x8868,
-0x8c79,0x98c7,0x98c4,0x9a43,0x54c1,0x7a1f,0x6953,0x8af7,
-0x8c4a,0x98a8,0x99ae,0x5f7c,0x62ab,0x75b2,0x76ae,0x88ab,
-0x907f,0x9642,0x5339,0x5f3c,0x5fc5,0x6ccc,0x73cc,0x7562,
-0x758b,0x7b46,0x82fe,0x999d,0x4e4f,0x903c,0x4e0b,0x4f55,
-0x53a6,0x590f,0x5ec8,0x6630,0x6cb3,0x7455,0x8377,0x8766,
-0x8cc0,0x9050,0x971e,0x9c15,0x58d1,0x5b78,0x8650,0x8b14,
-0x9db4,0x5bd2,0x6068,0x608d,0x65f1,0x6c57,0x6f22,0x6fa3,
-0x701a,0x7f55,0x7ff0,0x9591,0x9592,0x9650,0x97d3,0x5272,
-0x8f44,0x51fd,0x542b,0x54b8,0x5563,0x558a,0x6abb,0x6db5,
-0x7dd8,0x8266,0x929c,0x9677,0x9e79,0x5408,0x54c8,0x76d2,
-0x86e4,0x95a4,0x95d4,0x965c,0x4ea2,0x4f09,0x59ee,0x5ae6,
-0x5df7,0x6052,0x6297,0x676d,0x6841,0x6c86,0x6e2f,0x7f38,
-0x809b,0x822a,0xfa08,0xfa09,0x9805,0x4ea5,0x5055,0x54b3,
-0x5793,0x595a,0x5b69,0x5bb3,0x61c8,0x6977,0x6d77,0x7023,
-0x87f9,0x89e3,0x8a72,0x8ae7,0x9082,0x99ed,0x9ab8,0x52be,
-0x6838,0x5016,0x5e78,0x674f,0x8347,0x884c,0x4eab,0x5411,
-0x56ae,0x73e6,0x9115,0x97ff,0x9909,0x9957,0x9999,0x5653,
-0x589f,0x865b,0x8a31,0x61b2,0x6af6,0x737b,0x8ed2,0x6b47,
-0x96aa,0x9a57,0x5955,0x7200,0x8d6b,0x9769,0x4fd4,0x5cf4,
-0x5f26,0x61f8,0x665b,0x6ceb,0x70ab,0x7384,0x73b9,0x73fe,
-0x7729,0x774d,0x7d43,0x7d62,0x7e23,0x8237,0x8852,0xfa0a,
-0x8ce2,0x9249,0x986f,0x5b51,0x7a74,0x8840,0x9801,0x5acc,
-0x4fe0,0x5354,0x593e,0x5cfd,0x633e,0x6d79,0x72f9,0x8105,
-0x8107,0x83a2,0x92cf,0x9830,0x4ea8,0x5144,0x5211,0x578b,
-0x5f62,0x6cc2,0x6ece,0x7005,0x7050,0x70af,0x7192,0x73e9,
-0x7469,0x834a,0x87a2,0x8861,0x9008,0x90a2,0x93a3,0x99a8,
-0x516e,0x5f57,0x60e0,0x6167,0x66b3,0x8559,0x8e4a,0x91af,
-0x978b,0x4e4e,0x4e92,0x547c,0x58d5,0x58fa,0x597d,0x5cb5,
-0x5f27,0x6236,0x6248,0x660a,0x6667,0x6beb,0x6d69,0x6dcf,
-0x6e56,0x6ef8,0x6f94,0x6fe0,0x6fe9,0x705d,0x72d0,0x7425,
-0x745a,0x74e0,0x7693,0x795c,0x7cca,0x7e1e,0x80e1,0x82a6,
-0x846b,0x84bf,0x864e,0x865f,0x8774,0x8b77,0x8c6a,0x93ac,
-0x9800,0x9865,0x60d1,0x6216,0x9177,0x5a5a,0x660f,0x6df7,
-0x6e3e,0x743f,0x9b42,0x5ffd,0x60da,0x7b0f,0x54c4,0x5f18,
-0x6c5e,0x6cd3,0x6d2a,0x70d8,0x7d05,0x8679,0x8a0c,0x9d3b,
-0x5316,0x548c,0x5b05,0x6a3a,0x706b,0x7575,0x798d,0x79be,
-0x82b1,0x83ef,0x8a71,0x8b41,0x8ca8,0x9774,0xfa0b,0x64f4,
-0x652b,0x78ba,0x78bb,0x7a6b,0x4e38,0x559a,0x5950,0x5ba6,
-0x5e7b,0x60a3,0x63db,0x6b61,0x6665,0x6853,0x6e19,0x7165,
-0x74b0,0x7d08,0x9084,0x9a69,0x9c25,0x6d3b,0x6ed1,0x733e,
-0x8c41,0x95ca,0x51f0,0x5e4c,0x5fa8,0x604d,0x60f6,0x6130,
-0x614c,0x6643,0x6644,0x69a5,0x6cc1,0x6e5f,0x6ec9,0x6f62,
-0x714c,0x749c,0x7687,0x7bc1,0x7c27,0x8352,0x8757,0x9051,
-0x968d,0x9ec3,0x532f,0x56de,0x5efb,0x5f8a,0x6062,0x6094,
-0x61f7,0x6666,0x6703,0x6a9c,0x6dee,0x6fae,0x7070,0x736a,
-0x7e6a,0x81be,0x8334,0x86d4,0x8aa8,0x8cc4,0x5283,0x7372,
-0x5b96,0x6a6b,0x9404,0x54ee,0x5686,0x5b5d,0x6548,0x6585,
-0x66c9,0x689f,0x6d8d,0x6dc6,0x723b,0x80b4,0x9175,0x9a4d,
-0x4faf,0x5019,0x539a,0x540e,0x543c,0x5589,0x55c5,0x5e3f,
-0x5f8c,0x673d,0x7166,0x73dd,0x9005,0x52db,0x52f3,0x5864,
-0x58ce,0x7104,0x718f,0x71fb,0x85b0,0x8a13,0x6688,0x85a8,
-0x55a7,0x6684,0x714a,0x8431,0x5349,0x5599,0x6bc1,0x5f59,
-0x5fbd,0x63ee,0x6689,0x7147,0x8af1,0x8f1d,0x9ebe,0x4f11,
-0x643a,0x70cb,0x7566,0x8667,0x6064,0x8b4e,0x9df8,0x5147,
-0x51f6,0x5308,0x6d36,0x80f8,0x9ed1,0x6615,0x6b23,0x7098,
-0x75d5,0x5403,0x5c79,0x7d07,0x8a16,0x6b20,0x6b3d,0x6b46,
-0x5438,0x6070,0x6d3d,0x7fd5,0x8208,0x50d6,0x51de,0x559c,
-0x566b,0x56cd,0x59ec,0x5b09,0x5e0c,0x6199,0x6198,0x6231,
-0x665e,0x66e6,0x7199,0x71b9,0x71ba,0x72a7,0x79a7,0x7a00,
-0x7fb2,0x8a70};
-
-static const int uhc3_ucs_table_size = (sizeof(uhc3_ucs_table)/sizeof(unsigned short));
-
-/* UCS -> UHC */
-static const unsigned short ucs_a1_uhc_table[] = {
-0x0000,0x0001,0x0002,0x0003,0x0004,0x0005,0x0006,0x0007,
-0x0008,0x0009,0x000a,0x000b,0x000c,0x000d,0x000e,0x000f,
-0x0010,0x0011,0x0012,0x0013,0x0014,0x0015,0x0016,0x0017,
-0x0018,0x0019,0x001a,0x001b,0x001c,0x001d,0x001e,0x001f,
-0x0020,0x0021,0x0022,0x0023,0x0024,0x0025,0x0026,0x0027,
-0x0028,0x0029,0x002a,0x002b,0x002c,0x002d,0x002e,0x002f,
-0x0030,0x0031,0x0032,0x0033,0x0034,0x0035,0x0036,0x0037,
-0x0038,0x0039,0x003a,0x003b,0x003c,0x003d,0x003e,0x003f,
-0x0040,0x0041,0x0042,0x0043,0x0044,0x0045,0x0046,0x0047,
-0x0048,0x0049,0x004a,0x004b,0x004c,0x004d,0x004e,0x004f,
-0x0050,0x0051,0x0052,0x0053,0x0054,0x0055,0x0056,0x0057,
-0x0058,0x0059,0x005a,0x005b,0x005c,0x005d,0x005e,0x005f,
-0x0060,0x0061,0x0062,0x0063,0x0064,0x0065,0x0066,0x0067,
-0x0068,0x0069,0x006a,0x006b,0x006c,0x006d,0x006e,0x006f,
-0x0070,0x0071,0x0072,0x0073,0x0074,0x0075,0x0076,0x0077,
-0x0078,0x0079,0x007a,0x007b,0x007c,0x007d,0x007e,0x007f,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xa2ae,0x0000,0x0000,0xa2b4,0x0000,0x0000,0xa1d7,
-0xa1a7,0x0000,0xa8a3,0x0000,0x0000,0xa1a9,0xa2e7,0x0000,
-0xa1c6,0xa1be,0xa9f7,0xa9f8,0xa2a5,0x0000,0xa2d2,0xa1a4,
-0xa2ac,0xa9f6,0xa8ac,0x0000,0xa8f9,0xa8f6,0xa8fa,0xa2af,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xa8a1,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xa8a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xa1bf,
-0xa8aa,0x0000,0x0000,0x0000,0x0000,0x0000,0xa8ad,0xa9ac,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xa9a1,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xa9a3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xa1c0,
-0xa9aa,0x0000,0x0000,0x0000,0x0000,0x0000,0xa9ad,0x0000,
-/* 0x0100 */
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xa9a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xa8a4,0xa9a4,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xa9a5,0xa8a6,0xa9a6,0x0000,0x0000,0x0000,0x0000,
-0xa9a7,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xa8a8,
-0xa9a8,0xa8a9,0xa9a9,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xa9b0,0xa8af,0xa9af,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xa8ab,0xa9ab,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xa8ae,0xa9ae,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-/* 0x0200 */
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xa2a7,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xa2b0,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xa2a8,0xa2ab,0xa2aa,0xa2ad,0x0000,0xa2a9,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-/* 0x0300 */
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xa5c1,0xa5c2,0xa5c3,0xa5c4,0xa5c5,0xa5c6,0xa5c7,
-0xa5c8,0xa5c9,0xa5ca,0xa5cb,0xa5cc,0xa5cd,0xa5ce,0xa5cf,
-0xa5d0,0xa5d1,0x0000,0xa5d2,0xa5d3,0xa5d4,0xa5d5,0xa5d6,
-0xa5d7,0xa5d8,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xa5e1,0xa5e2,0xa5e3,0xa5e4,0xa5e5,0xa5e6,0xa5e7,
-0xa5e8,0xa5e9,0xa5ea,0xa5eb,0xa5ec,0xa5ed,0xa5ee,0xa5ef,
-0xa5f0,0xa5f1,0x0000,0xa5f2,0xa5f3,0xa5f4,0xa5f5,0xa5f6,
-0xa5f7,0xa5f8,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-/* 0x0400 */
-0x0000,0xaca7,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xaca1,0xaca2,0xaca3,0xaca4,0xaca5,0xaca6,0xaca8,0xaca9,
-0xacaa,0xacab,0xacac,0xacad,0xacae,0xacaf,0xacb0,0xacb1,
-0xacb2,0xacb3,0xacb4,0xacb5,0xacb6,0xacb7,0xacb8,0xacb9,
-0xacba,0xacbb,0xacbc,0xacbd,0xacbe,0xacbf,0xacc0,0xacc1,
-0xacd1,0xacd2,0xacd3,0xacd4,0xacd5,0xacd6,0xacd8,0xacd9,
-0xacda,0xacdb,0xacdc,0xacdd,0xacde,0xacdf,0xace0,0xace1,
-0xace2,0xace3,0xace4,0xace5,0xace6,0xace7,0xace8,0xace9,
-0xacea,0xaceb,0xacec,0xaced,0xacee,0xacef,0xacf0,0xacf1,
-0x0000,0xacd7};
-
-static const int ucs_a1_uhc_table_min = 0x0000;
-static const int ucs_a1_uhc_table_max = 0x0000 + (sizeof(ucs_a1_uhc_table)/sizeof(unsigned short));
-
-static const unsigned short ucs_a2_uhc_table[] = {
-/* 0x2000 */
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xa1aa,0x0000,0x0000,
-0xa1ae,0xa1af,0x0000,0x0000,0xa1b0,0xa1b1,0x0000,0x0000,
-0xa2d3,0xa2d4,0x0000,0x0000,0x0000,0xa1a5,0xa1a6,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xa2b6,0x0000,0xa1c7,0xa1c8,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xa1d8,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xa9f9,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xa9fa,
-0x0000,0xa9fb,0xa9fc,0xa9fd,0xa9fe,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xa2e6,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-/* 0x2100 */
-0x0000,0x0000,0x0000,0xa1c9,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xa2b5,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xa7a4,0x0000,0x0000,0xa2e0,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xa2e5,0xa2e2,0x0000,0x0000,0x0000,0xa7d9,0x0000,
-0x0000,0x0000,0x0000,0xa1ca,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xa8f7,0xa8f8,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xa8fb,0xa8fc,0xa8fd,0xa8fe,0x0000,
-0xa5b0,0xa5b1,0xa5b2,0xa5b3,0xa5b4,0xa5b5,0xa5b6,0xa5b7,
-0xa5b8,0xa5b9,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xa5a1,0xa5a2,0xa5a3,0xa5a4,0xa5a5,0xa5a6,0xa5a7,0xa5a8,
-0xa5a9,0xa5aa,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xa1e7,0xa1e8,0xa1e6,0xa1e9,0xa1ea,0xa2d5,0xa2d8,0xa2d6,
-0xa2d9,0xa2d7,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xa2a1,0x0000,0xa2a2,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xa2a3,0x0000,0xa1d3,0xa2a4,0x0000,0x0000,0x0000,0xa1d4,
-0xa1f4,0x0000,0x0000,0xa1f5,0x0000,0x0000,0x0000,0xa2b3,
-0x0000,0xa2b2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xa1ee,0x0000,0x0000,0xa1f0,0xa1c4,0x0000,
-0xa1d0,0x0000,0x0000,0x0000,0x0000,0xa1ab,0x0000,0xa1fc,
-0xa1fd,0xa1fb,0xa1fa,0xa1f2,0xa1f3,0x0000,0xa2b1,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xa1c5,0xa1f1,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xa1ad,0xa1ef,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xa1d6,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xa1c1,0xa1d5,0x0000,0x0000,0xa1c2,0xa1c3,0x0000,0x0000,
-0x0000,0x0000,0xa1ec,0xa1ed,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xa1f8,0xa1f9,0x0000,0x0000,0xa1f6,0xa1f7,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xa2c1,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xa1d1,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-/* 0x2300 */
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xa1d2,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-/* 0x2400 */
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xa8e7,0xa8e8,0xa8e9,0xa8ea,0xa8eb,0xa8ec,0xa8ed,0xa8ee,
-0xa8ef,0xa8f0,0xa8f1,0xa8f2,0xa8f3,0xa8f4,0xa8f5,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xa9e7,0xa9e8,0xa9e9,0xa9ea,
-0xa9eb,0xa9ec,0xa9ed,0xa9ee,0xa9ef,0xa9f0,0xa9f1,0xa9f2,
-0xa9f3,0xa9f4,0xa9f5,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xa9cd,0xa9ce,0xa9cf,0xa9d0,
-0xa9d1,0xa9d2,0xa9d3,0xa9d4,0xa9d5,0xa9d6,0xa9d7,0xa9d8,
-0xa9d9,0xa9da,0xa9db,0xa9dc,0xa9dd,0xa9de,0xa9df,0xa9e0,
-0xa9e1,0xa9e2,0xa9e3,0xa9e4,0xa9e5,0xa9e6,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xa8cd,0xa8ce,0xa8cf,0xa8d0,0xa8d1,0xa8d2,0xa8d3,0xa8d4,
-0xa8d5,0xa8d6,0xa8d7,0xa8d8,0xa8d9,0xa8da,0xa8db,0xa8dc,
-0xa8dd,0xa8de,0xa8df,0xa8e0,0xa8e1,0xa8e2,0xa8e3,0xa8e4,
-0xa8e5,0xa8e6,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xa6a1,0xa6ac,0xa6a2,0xa6ad,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xa6a3,0xa6c8,0xa6c7,0xa6ae,
-0xa6a4,0xa6c2,0xa6c1,0xa6af,0xa6a6,0xa6c6,0xa6c5,0xa6b1,
-0xa6a5,0xa6c4,0xa6c3,0xa6b0,0xa6a7,0xa6bc,0xa6c9,0xa6ca,
-0xa6b7,0xa6cb,0xa6cc,0xa6b2,0xa6a9,0xa6be,0xa6cd,0xa6ce,
-0xa6b9,0xa6cf,0xa6d0,0xa6b4,0xa6a8,0xa6d1,0xa6d2,0xa6b8,
-0xa6bd,0xa6d3,0xa6d4,0xa6b3,0xa6aa,0xa6d5,0xa6d6,0xa6ba,
-0xa6bf,0xa6d7,0xa6d8,0xa6b5,0xa6ab,0xa6d9,0xa6da,0xa6bb,
-0xa6db,0xa6dc,0xa6c0,0xa6dd,0xa6de,0xa6df,0xa6e0,0xa6e1,
-0xa6e2,0xa6e3,0xa6e4,0xa6b6,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xa2c6,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xa1e1,0xa1e0,0x0000,0xa2c3,0xa2c7,0xa2c8,0xa2cb,0xa2ca,
-0xa2c9,0xa2cc,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xa1e3,0xa1e2,0x0000,0x0000,0xa2ba,0xa2b9,
-0x0000,0x0000,0x0000,0x0000,0xa1e5,0xa1e4,0x0000,0x0000,
-0xa2b8,0xa2b7,0x0000,0x0000,0x0000,0x0000,0xa1df,0xa1de,
-0xa2c2,0x0000,0x0000,0xa1db,0x0000,0x0000,0xa1dd,0xa1dc,
-0xa2c4,0xa2c5,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-/* 0x2600 */
-0x0000,0x0000,0x0000,0x0000,0x0000,0xa1da,0xa1d9,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xa2cf,0xa2ce,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xa2d0,0x0000,0xa2d1,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xa1cf,0x0000,0xa1ce,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xa2bc,0xa2bd,0x0000,0xa2c0,0xa2bb,0xa2be,0x0000,0xa2bf,
-0xa2cd,0xa2db,0xa2dc,0x0000,0xa2dd,0xa2da};
-
-static const int ucs_a2_uhc_table_min = 0x2000;
-static const int ucs_a2_uhc_table_max = 0x2000 + (sizeof(ucs_a2_uhc_table)/sizeof(unsigned short));
-
-static const unsigned short ucs_a3_uhc_table[] = {
-/* 0x2f00 */
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xa1a1,0xa1a2,0xa1a3,0xa1a8,0x0000,0x0000,0x0000,0x0000,
-0xa1b4,0xa1b5,0xa1b6,0xa1b7,0xa1b8,0xa1b9,0xa1ba,0xa1bb,
-0xa1bc,0xa1bd,0x0000,0xa1eb,0xa1b2,0xa1b3,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xaaa1,0xaaa2,0xaaa3,0xaaa4,0xaaa5,0xaaa6,0xaaa7,
-0xaaa8,0xaaa9,0xaaaa,0xaaab,0xaaac,0xaaad,0xaaae,0xaaaf,
-0xaab0,0xaab1,0xaab2,0xaab3,0xaab4,0xaab5,0xaab6,0xaab7,
-0xaab8,0xaab9,0xaaba,0xaabb,0xaabc,0xaabd,0xaabe,0xaabf,
-0xaac0,0xaac1,0xaac2,0xaac3,0xaac4,0xaac5,0xaac6,0xaac7,
-0xaac8,0xaac9,0xaaca,0xaacb,0xaacc,0xaacd,0xaace,0xaacf,
-0xaad0,0xaad1,0xaad2,0xaad3,0xaad4,0xaad5,0xaad6,0xaad7,
-0xaad8,0xaad9,0xaada,0xaadb,0xaadc,0xaadd,0xaade,0xaadf,
-0xaae0,0xaae1,0xaae2,0xaae3,0xaae4,0xaae5,0xaae6,0xaae7,
-0xaae8,0xaae9,0xaaea,0xaaeb,0xaaec,0xaaed,0xaaee,0xaaef,
-0xaaf0,0xaaf1,0xaaf2,0xaaf3,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xaba1,0xaba2,0xaba3,0xaba4,0xaba5,0xaba6,0xaba7,
-0xaba8,0xaba9,0xabaa,0xabab,0xabac,0xabad,0xabae,0xabaf,
-0xabb0,0xabb1,0xabb2,0xabb3,0xabb4,0xabb5,0xabb6,0xabb7,
-0xabb8,0xabb9,0xabba,0xabbb,0xabbc,0xabbd,0xabbe,0xabbf,
-0xabc0,0xabc1,0xabc2,0xabc3,0xabc4,0xabc5,0xabc6,0xabc7,
-0xabc8,0xabc9,0xabca,0xabcb,0xabcc,0xabcd,0xabce,0xabcf,
-0xabd0,0xabd1,0xabd2,0xabd3,0xabd4,0xabd5,0xabd6,0xabd7,
-0xabd8,0xabd9,0xabda,0xabdb,0xabdc,0xabdd,0xabde,0xabdf,
-0xabe0,0xabe1,0xabe2,0xabe3,0xabe4,0xabe5,0xabe6,0xabe7,
-0xabe8,0xabe9,0xabea,0xabeb,0xabec,0xabed,0xabee,0xabef,
-0xabf0,0xabf1,0xabf2,0xabf3,0xabf4,0xabf5,0xabf6,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-/* 0x3100 */
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xa4a1,0xa4a2,0xa4a3,0xa4a4,0xa4a5,0xa4a6,0xa4a7,
-0xa4a8,0xa4a9,0xa4aa,0xa4ab,0xa4ac,0xa4ad,0xa4ae,0xa4af,
-0xa4b0,0xa4b1,0xa4b2,0xa4b3,0xa4b4,0xa4b5,0xa4b6,0xa4b7,
-0xa4b8,0xa4b9,0xa4ba,0xa4bb,0xa4bc,0xa4bd,0xa4be,0xa4bf,
-0xa4c0,0xa4c1,0xa4c2,0xa4c3,0xa4c4,0xa4c5,0xa4c6,0xa4c7,
-0xa4c8,0xa4c9,0xa4ca,0xa4cb,0xa4cc,0xa4cd,0xa4ce,0xa4cf,
-0xa4d0,0xa4d1,0xa4d2,0xa4d3,0xa4d4,0xa4d5,0xa4d6,0xa4d7,
-0xa4d8,0xa4d9,0xa4da,0xa4db,0xa4dc,0xa4dd,0xa4de,0xa4df,
-0xa4e0,0xa4e1,0xa4e2,0xa4e3,0xa4e4,0xa4e5,0xa4e6,0xa4e7,
-0xa4e8,0xa4e9,0xa4ea,0xa4eb,0xa4ec,0xa4ed,0xa4ee,0xa4ef,
-0xa4f0,0xa4f1,0xa4f2,0xa4f3,0xa4f4,0xa4f5,0xa4f6,0xa4f7,
-0xa4f8,0xa4f9,0xa4fa,0xa4fb,0xa4fc,0xa4fd,0xa4fe,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xa9b1,0xa9b2,0xa9b3,0xa9b4,0xa9b5,0xa9b6,0xa9b7,0xa9b8,
-0xa9b9,0xa9ba,0xa9bb,0xa9bc,0xa9bd,0xa9be,0xa9bf,0xa9c0,
-0xa9c1,0xa9c2,0xa9c3,0xa9c4,0xa9c5,0xa9c6,0xa9c7,0xa9c8,
-0xa9c9,0xa9ca,0xa9cb,0xa9cc,0xa2df,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xa8b1,0xa8b2,0xa8b3,0xa8b4,0xa8b5,0xa8b6,0xa8b7,0xa8b8,
-0xa8b9,0xa8ba,0xa8bb,0xa8bc,0xa8bd,0xa8be,0xa8bf,0xa8c0,
-0xa8c1,0xa8c2,0xa8c3,0xa8c4,0xa8c5,0xa8c6,0xa8c7,0xa8c8,
-0xa8c9,0xa8ca,0xa8cb,0xa8cc,0x0000,0x0000,0x0000,0xa2de,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-/* 0x3300 */
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xa7c9,0xa7ca,0xa7cb,0xa7cc,0xa7cd,0x0000,0x0000,0x0000,
-0xa7ba,0xa7bb,0xa7dc,0xa7dd,0xa7de,0xa7b6,0xa7b7,0xa7b8,
-0xa7d4,0xa7d5,0xa7d6,0xa7d7,0xa7d8,0xa7a1,0xa7a2,0xa7a3,
-0xa7a5,0xa7ab,0xa7ac,0xa7ad,0xa7ae,0xa7af,0xa7b0,0xa7b1,
-0xa7b2,0xa7b3,0xa7b4,0xa7a7,0xa7a8,0xa7a9,0xa7aa,0xa7bd,
-0xa7be,0xa7e5,0xa7e6,0xa7e7,0xa7e8,0xa7e1,0xa7e2,0xa7e3,
-0xa7bf,0xa7c0,0xa7c1,0xa7c2,0xa7c3,0xa7c4,0xa7c5,0xa7c6,
-0xa7c7,0xa7c8,0xa7ce,0xa7cf,0xa7d0,0xa7d1,0xa7d2,0xa7d3,
-0xa7da,0xa7db,0xa2e3,0xa7ec,0xa7a6,0xa7e0,0xa7ef,0xa2e1,
-0xa7bc,0xa7ed,0xa7b5,0x0000,0x0000,0x0000,0x0000,0xa7b9,
-0xa7ea,0x0000,0x0000,0xa7eb,0x0000,0x0000,0xa7df,0x0000,
-0xa2e4,0x0000,0x0000,0xa7e4,0xa7ee,0xa7e9};
-
-static const int ucs_a3_uhc_table_min = 0x2f00;
-static const int ucs_a3_uhc_table_max = 0x2f00 + (sizeof(ucs_a3_uhc_table)/sizeof(unsigned short));
-
-static const unsigned short ucs_i_uhc_table[] = {
-/* 0x4d00 */
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xece9,0xefcb,0x0000,0xf6d2,0x0000,0x0000,0x0000,0xd8b2,
-0xeddb,0xdfb2,0xdfbe,0xf9bb,0x0000,0xdcf4,0x0000,0x0000,
-0x0000,0xf5e4,0x0000,0x0000,0xf3a6,0xdde0,0xe1a6,0x0000,
-0xcef8,0xdcb0,0x0000,0x0000,0x0000,0x0000,0xe3aa,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xf1e9,0x0000,0x0000,
-0x0000,0x0000,0xcdfa,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xfcaf,0xd3a1,0x0000,0xf1ab,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xe7d1,0xd2ac,0x0000,0xcef9,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xf1fd,0x0000,0xdebf,0xfbba,0xf9b9,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xced2,0x0000,
-0xe3ab,0xebe0,0x0000,0x0000,0x0000,0xcefa,0xcbf7,0xe5a5,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xcae1,0x0000,0xd4cc,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xeae1,0x0000,0x0000,0xdce3,0xdfad,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xcbeb,0x0000,
-0x0000,0x0000,0xd5af,0x0000,0x0000,0x0000,0xd6f5,0x0000,
-0xe5f8,0x0000,0x0000,0xdec0,0xeca3,0x0000,0xe9cd,0x0000,
-0xeaa7,0xe9f6,0xfbbb,0x0000,0xe7e9,0xefcc,0x0000,0x0000,
-0xd0e6,0x0000,0x0000,0xdec1,0x0000,0x0000,0xe4ac,0x0000,
-0x0000,0xd8cc,0xf9f1,0x0000,0xcedf,0xfaa4,0xe6b2,0x0000,
-0xfafb,0x0000,0x0000,0xfabd,0xccc8,0xefcd,0xd5d5,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xd3a2,0x0000,
-0x0000,0x0000,0xecd1,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xe4a7,0xecd2,0x0000,0x0000,0xf6b1,0x0000,0x0000,0xcefb,
-0x0000,0x0000,0xd0d1,0xcbbf,0x0000,0xeda4,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xeda8,0xdec2,0xf6e2,0xeddc,
-0xdcf5,0xe0b9,0x0000,0x0000,0x0000,0xd4ce,0x0000,0xf4b5,
-0x0000,0x0000,0x0000,0xd3db,0xd6b5,0xeca4,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xe4e6,0x0000,0xf1ea,0x0000,0x0000,0x0000,0xcbec,0xcbc0,
-0x0000,0x0000,0x0000,0xecf2,0x0000,0x0000,0x0000,0x0000,
-/* 0x4f00 */
-0x0000,0xd0ea,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xf9f2,0xeca5,0xd0df,0x0000,0xe7ea,0xd0eb,0xdcd1,
-0xdbe9,0xfdcc,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xdbd7,
-0x0000,0x0000,0x0000,0x0000,0xdae1,0x0000,0xd6b6,0x0000,
-0xe3df,0x0000,0xdec3,0x0000,0xdec4,0xcaa1,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xeeec,0x0000,0x0000,0xd3a3,0xeeb7,
-0xf8cf,0x0000,0x0000,0x0000,0x0000,0xeac8,0xeeb8,0xf1ac,
-0xf1a5,0xe9ce,0x0000,0x0000,0x0000,0xf9bc,0x0000,0x0000,
-0x0000,0xe5f9,0xecea,0xddd6,0xedc2,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xf8a5,0x0000,0x0000,0x0000,0x0000,0x0000,0xe5ba,
-0xdbd8,0x0000,0x0000,0xcaa2,0x0000,0x0000,0xd1cd,0x0000,
-0x0000,0x0000,0xeeed,0x0000,0x0000,0x0000,0xeceb,0xdec5,
-0x0000,0xe3e0,0x0000,0xcac9,0xf2e9,0x0000,0xd5ce,0x0000,
-0xf6b6,0x0000,0xcec2,0xd6c7,0x0000,0xe3b4,0x0000,0xf1ad,
-0x0000,0xeae2,0x0000,0x0000,0x0000,0x0000,0xd7c2,0x0000,
-0xf3a7,0x0000,0x0000,0xcdea,0x0000,0xebee,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xd9b2,0xfda5,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xf6d5,0xd5e2,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xf8b5,
-0x0000,0x0000,0xccf5,0xf5b5,0xe4ad,0x0000,0x0000,0x0000,
-0x0000,0xe7eb,0xf1d5,0x0000,0x0000,0x0000,0xf0bb,0x0000,
-0x0000,0xe9b5,0x0000,0xccc9,0xfad5,0x0000,0x0000,0xe1d4,
-0x0000,0x0000,0xd7d6,0x0000,0x0000,0xdcc1,0x0000,0xdec6,
-0xfaef,0xe3e1,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xe1f3,0xdcf6,
-0x0000,0xcefc,0x0000,0xdbc4,0x0000,0xf8f1,0x0000,0x0000,
-0xdce4,0x0000,0xe5ef,0x0000,0x0000,0x0000,0x0000,0x0000,
-/* 0x5000 */
-0x0000,0x0000,0xdcb1,0x0000,0x0000,0x0000,0xd5d6,0x0000,
-0x0000,0xf3da,0x0000,0xcbc1,0x0000,0xdbc3,0x0000,0x0000,
-0x0000,0xd9fa,0xd3ee,0x0000,0x0000,0x0000,0xfab8,0x0000,
-0x0000,0xfda6,0xebef,0x0000,0xf4a6,0x0000,0xccca,0xf3a8,
-0x0000,0xf3db,0x0000,0xdba7,0xf6b7,0x0000,0xcfe6,0xf0f2,
-0xcbda,0x0000,0xe7d2,0xd7c3,0xf6f0,0xe8de,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xe5a6,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xe5e7,0x0000,0x0000,0x0000,0xcaa3,
-0xcca7,0xeac9,0x0000,0x0000,0x0000,0x0000,0x0000,0xf8b6,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xfaa5,0x0000,0x0000,
-0x0000,0x0000,0xf1ae,0x0000,0xefce,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xcbed,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xf6b0,0xefcf,0xe9cf,0x0000,
-0xf7de,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xced3,0x0000,0x0000,0x0000,0x0000,0xdcf7,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xdba8,0x0000,0x0000,
-0x0000,0xcbf8,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xdfa1,0xdde1,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xf5ca,0xe9b6,0x0000,0x0000,
-0x0000,0x0000,0xe7ec,0xeeee,0x0000,0xf3f0,0x0000,0xdfbf,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xcccb,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xd0c1,0x0000,0x0000,
-0x0000,0xf4d2,0xe0ba,0x0000,0x0000,0x0000,0x0000,0xdfc0,
-0x0000,0xcee0,0x0000,0x0000,0x0000,0xdcd2,0xfdea,0x0000,
-0x0000,0x0000,0xd6f6,0x0000,0x0000,0x0000,0xeaca,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xe8e9,0x0000,0xe3ac,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xf3d0,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xcaa4,0x0000,0xdbf8,0x0000,0x0000,0x0000,0xdec7,
-0xebf0,0xf1d6,0x0000,0x0000,0xe5e2,0x0000,0xcccc,0x0000,
-0x0000,0xcbfb,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xeae3,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xdfc1,
-0x0000,0xd6ed,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xe9d0,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xeeb9,0x0000,0x0000,0x0000,0x0000,0xd5e3,
-0x0000,0x0000,0xd1d3,0x0000,0xe5f0,0x0000,0x0000,0x0000,
-0xe8b4,0xebc3,0x0000,0xeaaa,0xfafc,0xf5f6,0xf0bc,0xfdd4,
-0xe0bb,0xcec3,0x0000,0xd0ba,0xf7ba,0xd8f3,0xf7cd,0x0000,
-0x0000,0x0000,0xe4ae,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xd4df,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xd0e7,0x0000,0x0000,0xecfd,0x0000,0xd2ae,
-0xeeef,0xd5d7,0xeae4,0xf8a2,0xcdeb,0xd7bf,0xfbb1,0x0000,
-0x0000,0xcdec,0x0000,0x0000,0x0000,0xdcb2,0xd0ec,0xcefd,
-0xeef0,0x0000,0x0000,0x0000,0xccc2,0x0000,0x0000,0x0000,
-0xd0ed,0x0000,0x0000,0x0000,0x0000,0x0000,0xe5f7,0x0000,
-0x0000,0x0000,0xf3fc,0x0000,0x0000,0xeea2,0x0000,0x0000,
-0x0000,0x0000,0xd9b3,0x0000,0x0000,0xd8f4,0x0000,0xe9b7,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xceae,0x0000,0x0000,0x0000,0x0000,0xd9a2,0x0000,0x0000,
-0x0000,0x0000,0xd8f1,0x0000,0xd4cf,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xe5a7,0xd5d2,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xd6a9,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xf4a2,0x0000,0xf1d7,0x0000,
-0x0000,0xd5d8,0x0000,0xf0bd,0xd7d0,0xd4d0,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xd7cf,0xebea,0xfdeb,0x0000,
-0x0000,0xdbed,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xfcc5,0xcbc2,0x0000,0x0000,0x0000,0x0000,0xfdd5,0x0000,
-0xf4c8,0xe8ea,0xf5f3,0x0000,0x0000,0xf9de,0x0000,0x0000,
-0xd3ef,0x0000,0x0000,0xecd3,0x0000,0x0000,0xddc2,0xefb7,
-0xe7d4,0x0000,0xcaca,0x0000,0x0000,0x0000,0xd9fb,0x0000,
-0x0000,0xfafd,0x0000,0x0000,0x0000,0x0000,0x0000,0xd6aa,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xf4f8,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xf7f7,0xdcac,0x0000,0x0000,
-0x0000,0xd7d7,0xdfa2,0x0000,0x0000,0x0000,0xcebe,0x0000,
-0xd3f0,0x0000,0x0000,0x0000,0x0000,0x0000,0xf0a4,0xe1ec,
-0xcfe7,0xf3cb,0xeda9,0xcabe,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xf4ef,0x0000,0x0000,0x0000,0xf6ce,
-0x0000,0x0000,0xdefb,0xd0bb,0xd5b7,0xeef1,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xf4a8,0x0000,0xdcf8,0x0000,
-0x0000,0x0000,0x0000,0xcba7,0x0000,0xdace,0x0000,0x0000,
-0x0000,0xe0e6,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xeda5,0xeef2,0x0000,0x0000,0x0000,0x0000,0xdcf9,
-0x0000,0x0000,0xf9dc,0x0000,0x0000,0xf3dc,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xf8f2,0x0000,0xf4f9,
-0x0000,0x0000,0x0000,0xfcf1,0x0000,0x0000,0x0000,0xd0bc,
-0xdbf9,0xd7b1,0x0000,0x0000,0x0000,0xcbfc,0x0000,0x0000,
-0x0000,0xf0a5,0xcbfd,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xd5f4,0x0000,0x0000,0x0000,0xcded,
-0xcaa5,0x0000,0x0000,0xd6ab,0xd0c2,0x0000,0x0000,0x0000,
-0x0000,0xf0be,0xd2bd,0xcca4,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xfab6,0x0000,
-0x0000,0xcccd,0x0000,0xdafa,0x0000,0xf6cf,0x0000,0xe9b8,
-0x0000,0xd8f5,0x0000,0x0000,0x0000,0xccce,0x0000,0x0000,
-0x0000,0x0000,0xd7cd,0x0000,0x0000,0xd4d1,0xe9ed,0x0000,
-0xcaeb,0xd9e2,0x0000,0xfdb2,0x0000,0xe3ad,0xd6cc,0xd9b4,
-0x0000,0x0000,0xe1a7,0xeed3,0xd0c3,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xfdb3,0x0000,0xd5e4,0x0000,0x0000,
-0xcfe8,0x0000,0xedc3,0xd0b2,0x0000,0x0000,0xcefe,0xdaa8,
-/* 0x5300 */
-0x0000,0x0000,0x0000,0x0000,0x0000,0xf8d0,0x0000,0x0000,
-0xfdd6,0x0000,0x0000,0x0000,0x0000,0xf8d1,0x0000,0xf8d2,
-0xdcd3,0x0000,0x0000,0x0000,0x0000,0xdde2,0xfbf9,0xddc1,
-0x0000,0xe3b5,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xeddd,0xcec4,0x0000,0xcba1,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xdde3,0x0000,0x0000,0x0000,0x0000,0xfcdd,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xf9af,0x0000,0x0000,0x0000,0x0000,0x0000,0xd2fb,
-0xcfa1,0xe4a8,0x0000,0xf4b6,0xecfe,0x0000,0x0000,0xe3ae,
-0xe7ed,0xfdc1,0xdae2,0x0000,0x0000,0xd8b3,0x0000,0x0000,
-0x0000,0xdde4,0xf0ef,0xf6f1,0xfaf0,0x0000,0x0000,0xd1f5,
-0x0000,0x0000,0xdacf,0x0000,0xdcd4,0x0000,0xdca6,0x0000,
-0xefbf,0x0000,0x0000,0x0000,0x0000,0x0000,0xcecf,0x0000,
-0xe0d9,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xd9d6,
-0xecd4,0xeacb,0x0000,0x0000,0xcabf,0xd5b0,0x0000,0xcfe9,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xf1ed,0x0000,0xcccf,
-0x0000,0x0000,0x0000,0x0000,0xe4f8,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xe4ed,0x0000,0x0000,0x0000,0x0000,
-0xd7d8,0x0000,0xfda7,0x0000,0x0000,0x0000,0x0000,0xeaab,
-0xf6b2,0x0000,0x0000,0x0000,0x0000,0xcff0,0xf9bd,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xe6f4,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xcbdb,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xf3d1,0x0000,0x0000,0x0000,0x0000,
-0xe9d1,0xf3a9,0xd0e0,0xe9d2,0x0000,0xdae3,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xe2d2,0x0000,0xf6a2,0xe1f4,
-0x0000,0x0000,0x0000,0xdae4,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xe7d5,0xf5bf,0xcfa2,0xcdaf,0xcfa3,0x0000,0x0000,
-0x0000,0xcdb0,0xf1fe,0xd0a3,0xe1af,0xf8a3,0x0000,0xcaa6,
-0xf7bb,0xf2ea,0xdec8,0xe9d3,0x0000,0x0000,0x0000,0x0000,
-0xdec9,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-/* 0x5400 */
-0x0000,0x0000,0x0000,0xfdde,0xcac0,0x0000,0x0000,0x0000,
-0xf9ea,0xd1ce,0xeed4,0x0000,0xd4d2,0xd9a3,0xfda8,0xd7d9,
-0xf7ce,0xfabe,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xcfd6,0x0000,0xd7f0,0x0000,0xebe1,
-0xf8c5,0x0000,0x0000,0x0000,0x0000,0x0000,0xdcfa,0x0000,
-0x0000,0xddc3,0x0000,0xf9df,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xe7ef,0x0000,0x0000,0x0000,0x0000,
-0xfde5,0xf6a3,0x0000,0xd9fc,0xfda9,0x0000,0xe7ee,0x0000,
-0x0000,0x0000,0xd5e5,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xefd0,0x0000,0xcdb1,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xf7a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xf1b2,0x0000,0xf1b1,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xcdb2,0x0000,0xdaab,0x0000,0xcaa7,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xe3e2,0xfbbc,0xd9a4,0x0000,0x0000,
-0xeeba,0x0000,0x0000,0x0000,0x0000,0x0000,0xf8d3,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xfbfa,0x0000,0xcfa4,0x0000,
-0xdcfb,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xf6e3,0x0000,0x0000,0x0000,
-0xedaa,0x0000,0x0000,0xf2a1,0xcee1,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xfaa6,0x0000,0x0000,0x0000,0x0000,
-0xf9e0,0x0000,0x0000,0x0000,0x0000,0xecd6,0x0000,0x0000,
-0xe4ee,0xf9a1,0x0000,0x0000,0xfbef,0x0000,0x0000,0x0000,
-0xf9eb,0xeea3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xeaac,0x0000,0x0000,0x0000,0xcaa8,0x0000,0x0000,
-0xf4fa,0x0000,0x0000,0x0000,0x0000,0xcdd6,0xfcf6,0x0000,
-0x0000,0x0000,0xf4c9,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xf8d4,0x0000,0x0000,0x0000,0x0000,0x0000,
-/* 0x5500 */
-0x0000,0x0000,0x0000,0x0000,0xf8a6,0x0000,0xdeca,0xf2c6,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xd7da,0x0000,
-0xd3d0,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xd8c5,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xeae6,
-0x0000,0xf3dd,0x0000,0x0000,0x0000,0xe4da,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xf6e4,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xf6f2,0x0000,0xdfc2,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xd9fd,
-0x0000,0x0000,0x0000,0xccf6,0x0000,0x0000,0xd3ba,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xe4af,0x0000,
-0x0000,0x0000,0x0000,0xf9e1,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xf0a6,0x0000,0x0000,0x0000,
-0xcbd3,0x0000,0x0000,0x0000,0xe0bc,0x0000,0xf4ca,0xd4fa,
-0x0000,0xfdaa,0xf9e2,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xf4b7,0xfdc2,0xfcb0,0x0000,0xfdec,0xcae2,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xfdbd,
-0x0000,0xeae7,0xdfc3,0xd1d2,0xcee2,0x0000,0xd3a4,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xfdab,0x0000,0xdfe0,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xf2c7,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xe7f0,0x0000,0xd0ee,0x0000,0x0000,0xf3aa,
-0x0000,0x0000,0x0000,0xdecb,0xf6b8,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xe1f5,0xf1b3,0x0000,
-/* 0x5600 */
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xf7a3,0x0000,
-0x0000,0xcaa9,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xcfa5,0x0000,0x0000,0xdfc4,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xe1b0,
-0x0000,0x0000,0xf0bf,0x0000,0xf6a4,0x0000,0xe3b6,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xfac6,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xd0ef,0x0000,0x0000,0xfded,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xddc4,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xfcf7,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xe6bf,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xdead,0x0000,0xfabf,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xe5f1,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xedc4,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xd2a5,0x0000,0x0000,0xfdee,0x0000,0x0000,
-0x0000,0xf5b6,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xe1f6,0xdecc,0x0000,0x0000,0xfcde,0x0000,
-0xecd7,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xcddd,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xd6b7,0xcdb3,0x0000,0x0000,0x0000,0x0000,0x0000,
-/* 0x5700 */
-0x0000,0x0000,0x0000,0xf8d5,0xe5d8,0x0000,0x0000,0x0000,
-0xcfea,0x0000,0x0000,0xcfd0,0x0000,0xeacc,0x0000,0x0000,
-0x0000,0x0000,0xeaae,0xeaad,0x0000,0x0000,0xd3f1,0x0000,
-0xd3a5,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xf7cf,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xeea4,0x0000,0x0000,0x0000,0x0000,0xd0a4,0x0000,0x0000,
-0xf2a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xd0f0,0x0000,0x0000,0x0000,0x0000,
-0xf2a3,0x0000,0xf7f8,0x0000,0x0000,0x0000,0x0000,0xd0b3,
-0x0000,0x0000,0xdba9,0x0000,0x0000,0xd3bb,0xcaec,0x0000,
-0xf1a6,0xcbd5,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xf7e7,0x0000,0x0000,0xcdde,0x0000,0xf7a4,0x0000,
-0x0000,0x0000,0xf8c0,0x0000,0x0000,0x0000,0xd3dd,0x0000,
-0xccd0,0x0000,0x0000,0x0000,0x0000,0xcfa6,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xf6f3,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xe1f7,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xd3dc,0x0000,0x0000,0xfafe,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xfaa7,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xebd9,0x0000,0xcfa7,0xeaaf,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xe4ef,0x0000,0x0000,0x0000,0xe9b9,
-0xf1d8,0x0000,0x0000,0xd8d8,0x0000,0x0000,0xe0f2,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xe6b4,
-0xdcfc,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xf3f1,0x0000,0x0000,0x0000,0xe3d0,0x0000,0x0000,0xf2fb,
-0x0000,0xdbc6,0xd0f1,0x0000,0xd0f2,0x0000,0x0000,0x0000,
-0xcfdc,0x0000,0xd3d1,0x0000,0x0000,0xccb1,0xf7d8,0x0000,
-0xcba8,0xebbc,0xe4be,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xf4dc,0x0000,
-0x0000,0xdcc2,0x0000,0x0000,0xf0a7,0x0000,0x0000,0xe6c0,
-0x0000,0x0000,0xcaed,0x0000,0x0000,0x0000,0x0000,0xe8eb,
-0xe5e8,0xdcc3,0x0000,0x0000,0xedde,0xd3f2,0x0000,0x0000,
-0x0000,0x0000,0xccf7,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xced4,0xe7ab,0x0000,0x0000,0x0000,0xcbc3,
-0x0000,0xe1b1,0x0000,0x0000,0xf7b2,0x0000,0x0000,0xd3f3,
-0xd3d2,0x0000,0xf5c0,0x0000,0x0000,0x0000,0xdfdd,0x0000,
-0x0000,0xeef3,0xe7f1,0x0000,0xfdb4,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xf2c8,0x0000,0x0000,
-0x0000,0xf3d2,0x0000,0x0000,0xeef4,0x0000,0xe2d3,0x0000,
-0x0000,0x0000,0x0000,0xccd1,0x0000,0xdfea,0x0000,0x0000,
-0x0000,0xe9ba,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xd9d7,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xf5cd,0x0000,0xf1f2,0xfac7,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xd9f8,0xd4c2,0x0000,0x0000,0x0000,0x0000,0xf6e5,0x0000,
-0x0000,0x0000,0x0000,0xddc5,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xe7f2,0xeddf,0x0000,0x0000,0xcacb,0x0000,
-0x0000,0xdbfa,0x0000,0x0000,0x0000,0xe8b5,0x0000,0xd3a6,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xfdb5,0x0000,
-0x0000,0xf9c9,0x0000,0xe4e2,0x0000,0xfbbd,0x0000,0x0000,
-0xd7a4,0xcec5,0x0000,0x0000,0x0000,0x0000,0xced5,0xd6e6,
-0x0000,0x0000,0x0000,0x0000,0xe5bd,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xdecd,0xecf3,0x0000,0x0000,0xede0,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xecec,0xfbbe,0xdfeb,0x0000,0xe1f8,0x0000,0x0000,
-/* 0x5900 */
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xf9be,
-0x0000,0x0000,0x0000,0x0000,0xd0f3,0xe0aa,0xe8e2,0x0000,
-0x0000,0xe2d4,0xd2fd,0x0000,0xe5a8,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xd9d3,0x0000,0x0000,0x0000,0x0000,0xd3de,
-0x0000,0xf4b8,0xf7bc,0xdcfd,0x0000,0xe8ec,0xe4e7,0x0000,
-0x0000,0xe3f7,0x0000,0x0000,0x0000,0x0000,0x0000,0xeca8,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xfaf1,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xe5f2,0x0000,0x0000,0xd0f4,
-0xd2af,0xdce5,0x0000,0x0000,0x0000,0x0000,0xd0a5,0xf1b4,
-0xfcb1,0xccf8,0x0000,0x0000,0xddc6,0xfad1,0x0000,0xf7df,
-0x0000,0x0000,0xfaa8,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xeef5,0x0000,0xdece,0x0000,0x0000,0x0000,0x0000,0xe7f3,
-0x0000,0x0000,0xf7ac,0xebc4,0xede1,0xe0ab,0xddc7,0x0000,
-0x0000,0x0000,0x0000,0xd2b3,0xd2bf,0x0000,0x0000,0x0000,
-0xcacc,0x0000,0x0000,0x0000,0x0000,0xfbbf,0x0000,0x0000,
-0x0000,0x0000,0xe5fd,0xdde5,0xd8cd,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xecf4,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xd0f5,0x0000,0x0000,0xe8ed,0xd0d2,
-0x0000,0xd9d8,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xf6e6,0x0000,0x0000,
-0xdbaa,0x0000,0x0000,0x0000,0xf7e0,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xd8d9,0x0000,0xf4a3,0x0000,0x0000,0xf4dd,0x0000,
-0x0000,0x0000,0x0000,0xefd1,0x0000,0x0000,0xd9b5,0x0000,
-0x0000,0xedab,0x0000,0xe3b7,0x0000,0x0000,0x0000,0x0000,
-0xeebb,0xcdb4,0x0000,0xe0f3,0xeacd,0x0000,0x0000,0x0000,
-0x0000,0xecf5,0xe8ee,0x0000,0xcba9,0xf1af,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xcacd,0x0000,
-0xeca9,0x0000,0xf2eb,0x0000,0xfdef,0x0000,0xf9f3,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xe6c1,0x0000,0x0000,0xecd8,0x0000,0x0000,0x0000,0xedac,
-/* 0x5a00 */
-0x0000,0xeace,0x0000,0xe8df,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xdecf,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xd2a6,0x0000,0x0000,0xe7f4,0xd1d6,0x0000,0x0000,0xe6c2,
-0xe3e3,0x0000,0x0000,0x0000,0x0000,0xe4b0,0x0000,0x0000,
-0x0000,0xd8b4,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xf6a5,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xf3de,0x0000,0x0000,0x0000,
-0x0000,0xd7a5,0x0000,0x0000,0x0000,0x0000,0xf7e8,0x0000,
-0x0000,0xe8c6,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xfbe6,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xdde6,0x0000,0x0000,0x0000,0xdcfe,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xd8da,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xdaac,0xeab0,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xe3b8,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xcaaa,0xe1f9,0x0000,0xeab1,0x0000,0x0000,0x0000,
-0x0000,0xf2ec,0x0000,0x0000,0xfaee,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xeed5,0x0000,0x0000,0x0000,0x0000,0xf9f4,0x0000,
-0x0000,0xd2ec,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-/* 0x5b00 */
-0x0000,0x0000,0x0000,0x0000,0x0000,0xfbfb,0x0000,0x0000,
-0x0000,0xfdf0,0x0000,0xe0bd,0xcee3,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xf8c6,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xdeae,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xdfc5,0x0000,0x0000,0xe5be,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xedad,0xfaea,0x0000,0x0000,0xcdee,0xeda6,0x0000,0xedae,
-0xf0ed,0x0000,0xdda1,0x0000,0xedaf,0xfcf8,0x0000,0xd8eb,
-0x0000,0x0000,0x0000,0xccf9,0xcdb5,0x0000,0x0000,0x0000,
-0x0000,0xfaa9,0x0000,0xe1dd,0x0000,0x0000,0x0000,0x0000,
-0xe2d5,0xedcf,0x0000,0x0000,0x0000,0xdda2,0x0000,0x0000,
-0xf9ca,0x0000,0xeae8,0x0000,0xe5ed,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xd3eb,0x0000,0xe9d4,
-0xe1fa,0xe4cc,0x0000,0xe1e4,0xe8c7,0x0000,0x0000,0xcedb,
-0x0000,0x0000,0x0000,0xdcd5,0x0000,0xf7b5,0xfcf3,0xf0f3,
-0xceaf,0xf1b5,0xefd2,0xe8c8,0xebf1,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xcbd4,0xe0be,0xe3f8,0xeae9,0xfcb2,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xe0f4,0x0000,0xcfe0,0x0000,
-0xeea5,0x0000,0x0000,0xfaaa,0xe6c3,0xe1b2,0xcaab,0x0000,
-0xe3e4,0xe9bb,0x0000,0x0000,0x0000,0x0000,0x0000,0xe2d6,
-0xf3f2,0x0000,0xeed6,0xeab2,0xd0f6,0xecd9,0xdacb,0xcfa8,
-0x0000,0x0000,0x0000,0x0000,0xdda3,0x0000,0x0000,0x0000,
-0xd8db,0x0000,0xf9ce,0xe9d5,0xe3d1,0x0000,0x0000,0xd2bc,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xd8ac,0xf3cc,
-0x0000,0xcdfb,0xf6d6,0x0000,0xe7f5,0xe8ef,0xe3f9,0xd2bb,
-0xf3f3,0xe3fb,0x0000,0xded0,0xceb0,0x0000,0xd6f7,0xf1d9,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xf5c1,0xdcc4,0x0000,
-0xf5bb,0x0000,0xded1,0x0000,0x0000,0x0000,0x0000,0x0000,
-/* 0x5c00 */
-0x0000,0xdce6,0x0000,0x0000,0xded2,0x0000,0x0000,0xede2,
-0xeef6,0xeacf,0xf0ee,0xe3fc,0x0000,0xd3df,0xd3f4,0xe1b3,
-0x0000,0xe1b4,0x0000,0x0000,0x0000,0x0000,0xf4d3,0x0000,
-0x0000,0xdfc6,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xe9d6,0x0000,0x0000,0x0000,
-0xdbab,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xf6a6,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xe3b9,0xebc5,0xf4a9,0xcdb6,0xd2f9,0x0000,0xdaad,0xd2e3,
-0xcfd1,0x0000,0x0000,0x0000,0x0000,0xcbdc,0xccfa,0x0000,
-0xcfdd,0x0000,0x0000,0xe8a9,0x0000,0xe3bb,0xe3ba,0x0000,
-0x0000,0xe0da,0x0000,0x0000,0x0000,0xeef7,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xdcb3,0x0000,0x0000,0x0000,0x0000,
-0xd3f5,0x0000,0xd7a6,0x0000,0xf6b5,0xd7db,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xe1d5,0x0000,0x0000,0xd4ea,
-0x0000,0xdfa3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xfddf,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xd0f7,0xedd4,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xcbaa,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xe4db,0x0000,0xe1fb,0xcba2,0x0000,0x0000,0x0000,
-0x0000,0xd3e0,0x0000,0xe4bf,0x0000,0xfbc0,0x0000,0xdabe,
-0xe4cd,0x0000,0xd6b9,0x0000,0x0000,0x0000,0xefc0,0x0000,
-0xe1fc,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xf6b9,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xdfc7,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xe4b1,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xdce7,
-0xdce8,0x0000,0x0000,0x0000,0xfad6,0x0000,0xd3f6,0x0000,
-0x0000,0x0000,0x0000,0xf1da,0x0000,0xfaf2,0x0000,0x0000,
-/* 0x5d00 */
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xe2fd,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xd5cf,0xd0f8,0x0000,
-0x0000,0xcddf,0x0000,0x0000,0xf5cb,0x0000,0xe4f0,0xcbab,
-0x0000,0xd7c4,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xe2fe,
-0x0000,0xddda,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xdaae,0xcaee,0x0000,0x0000,0x0000,
-0xd5b9,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xe3a1,0x0000,0x0000,0xe8e3,0x0000,0x0000,0xf3ab,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xcfa9,
-0x0000,0x0000,0x0000,0xd3f7,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xd4f1,0x0000,0x0000,
-0xcee4,0x0000,0xe8f2,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xe5f5,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xe7ae,0x0000,0xd6ba,0x0000,0xdfec,0xe4c0,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xe8e4,0x0000,0x0000,
-0x0000,0x0000,0xd8b5,0x0000,0x0000,0x0000,0xe4dc,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xf4b9,0xf1b6,0x0000,
-0x0000,0xe2de,0xe1b5,0x0000,0x0000,0xcdef,0xf1a7,0xcee5,
-0xcbdd,0x0000,0x0000,0xd9e3,0x0000,0x0000,0xf3ac,0x0000,
-0x0000,0xd0f9,0xecab,0xded3,0xf7e9,0x0000,0x0000,0xf9f5,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xe1de,0xcbee,0x0000,
-/* 0x5e00 */
-0x0000,0x0000,0xe3bc,0xf8d6,0x0000,0x0000,0xdbee,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xfdf1,0x0000,0x0000,0x0000,
-0x0000,0xf7b6,0x0000,0x0000,0x0000,0x0000,0xf4de,0x0000,
-0x0000,0xf2ed,0x0000,0xdbd9,0x0000,0xf0a8,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xe1fd,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xded4,0x0000,0xe0ac,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xede3,0x0000,0x0000,0xd3e1,0x0000,
-0xdfc8,0x0000,0x0000,0x0000,0x0000,0xd9b6,0x0000,0xfdac,
-0xefd3,0x0000,0x0000,0x0000,0xe4c1,0xf8eb,0x0000,0xdbac,
-0x0000,0x0000,0x0000,0x0000,0xfcc6,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xd8ad,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xf6ba,
-0x0000,0xdbdf,0xd3d3,0xf8c7,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xcace,0xf8c1,0xd2b4,0x0000,0x0000,0xdcb4,
-0xfab9,0xcacf,0x0000,0xfcb3,0xeaea,0xeaeb,0xd0fa,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xede4,0x0000,0x0000,0xdde7,
-0x0000,0x0000,0xdfc9,0x0000,0x0000,0x0000,0x0000,0xdfed,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xeebc,0x0000,0xefc1,
-0x0000,0x0000,0xccd2,0x0000,0xdda4,0x0000,0x0000,0x0000,
-0xdfca,0x0000,0x0000,0x0000,0x0000,0x0000,0xd3f8,0xf1a8,
-0x0000,0x0000,0x0000,0xcdb7,0x0000,0xefd4,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xe4dd,0xdfee,0xcbac,
-0xe9bc,0x0000,0x0000,0x0000,0x0000,0x0000,0xeaec,0x0000,
-0x0000,0x0000,0xdfcb,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xf9bf,0xd6af,0xd5c6,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xcfaa,0x0000,0x0000,0xcea9,0x0000,0x0000,0xd6f8,0x0000,
-0x0000,0x0000,0xf1b7,0xeef8,0x0000,0x0000,0x0000,0xd9d9,
-0xf3df,0x0000,0xf8c8,0xcec6,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xd5e6,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xf4e6,0x0000,0x0000,0xe6c5,0xefd5,
-0x0000,0x0000,0xcbef,0xfcdf,0x0000,0x0000,0x0000,0x0000,
-/* 0x5f00 */
-0x0000,0xdca7,0x0000,0x0000,0xd6e7,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xf8c9,0x0000,0x0000,0x0000,0x0000,0xe3d2,
-0x0000,0xe3bd,0x0000,0xcfe1,0xf0c0,0xecda,0x0000,0xddd7,
-0xfbf0,0x0000,0x0000,0xecac,0x0000,0x0000,0x0000,0xf0a9,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xfad7,0xfbc1,
-0x0000,0xd2c0,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xe5b0,0x0000,0x0000,0x0000,0xede5,0x0000,0x0000,
-0x0000,0x0000,0xcbad,0x0000,0xf9b0,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xf7a5,0x0000,0xcbae,0x0000,0xdaaf,0x0000,0xd8b6,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xd3a7,0xfbb2,
-0x0000,0xfdc4,0x0000,0xecad,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xfba1,0x0000,0x0000,0x0000,0xe5e9,0xe9ee,
-0x0000,0xf3f4,0xf8f3,0xf0c1,0xdeaf,0xf8b0,0x0000,0x0000,
-0xf3e0,0xe7af,0x0000,0x0000,0x0000,0x0000,0x0000,0xdbad,
-0x0000,0xe6b5,0x0000,0x0000,0xf9a8,0x0000,0x0000,0xddd8,
-0xe8d9,0xefd6,0x0000,0x0000,0x0000,0xd3e2,0x0000,0xe2df,
-0x0000,0x0000,0xfce0,0xd7c8,0xfdad,0x0000,0x0000,0x0000,
-0xdfef,0xccd3,0xd3f9,0x0000,0x0000,0x0000,0x0000,0xd4f0,
-0xdbc7,0xded5,0x0000,0x0000,0x0000,0x0000,0xf0f4,0x0000,
-0xd5d0,0xe5d9,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xfcc7,0xdcd6,0xe2e0,0x0000,0x0000,0x0000,0xdab0,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xf3a3,0x0000,0xd3ec,
-0x0000,0xf4cb,0x0000,0x0000,0x0000,0xfdc5,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xe3fd,0x0000,0xf9b1,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xd0fb,0xecdb,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xf5bc,0xf2a4,
-0xd8ce,0xd8cf,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xf5f7,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xf6e1,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xd2b7,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xfbec,0x0000,0xddc8,
-/* 0x6000 */
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xe4e8,
-0x0000,0x0000,0xd2c1,0x0000,0x0000,0x0000,0xf8d7,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xd6bb,0xded6,0x0000,0x0000,
-0xf7bd,0xecae,0x0000,0x0000,0x0000,0xd0e1,0x0000,0xe0f5,
-0xeab3,0x0000,0xced6,0x0000,0x0000,0x0000,0x0000,0xcca5,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xecf6,0xe2e1,0xe3be,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xfcc8,0x0000,0x0000,
-0xcdf0,0x0000,0xf9f6,0x0000,0x0000,0xdff0,0x0000,0x0000,
-0x0000,0xe5bf,0x0000,0x0000,0x0000,0xcebf,0x0000,0x0000,
-0x0000,0x0000,0xfce1,0xedb0,0xfdd1,0xf6bb,0x0000,0x0000,
-0xf9cf,0xebda,0xcac1,0x0000,0xd2b8,0xcdf1,0x0000,0xe3d3,
-0xfde6,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xe6ed,0x0000,0x0000,
-0x0000,0xe3fa,0x0000,0x0000,0xf0aa,0xf9d0,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xfce2,0x0000,0xf8a7,0x0000,
-0x0000,0x0000,0xe1e5,0xeef9,0x0000,0x0000,0x0000,0xe7f6,
-0xeaed,0x0000,0x0000,0xfcb4,0xf5c2,0x0000,0x0000,0xd7dc,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xf0f5,0x0000,0xdde8,0xd3ed,0xf5fc,0x0000,0xdabf,0x0000,
-0xccfb,0x0000,0x0000,0x0000,0xd3fa,0xf4a4,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xefd7,0x0000,0xd4c3,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xfbe3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xfbed,0x0000,0xe0ad,0x0000,0x0000,0xeaee,
-0xfbb3,0xe4c2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xf6e7,0xd2dd,0x0000,0xdfcc,0x0000,0x0000,0xfcc9,0x0000,
-0x0000,0xe5a9,0xe0f6,0xf6b3,0x0000,0x0000,0x0000,0x0000,
-/* 0x6100 */
-0x0000,0xe1fe,0x0000,0x0000,0x0000,0x0000,0xcbf0,0x0000,
-0xeaef,0xeaf0,0x0000,0x0000,0x0000,0xdac0,0xf8b4,0xebf2,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xe4c3,0x0000,0x0000,
-0x0000,0x0000,0xe9d7,0xe4f1,0x0000,0x0000,0x0000,0xcaef,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xced7,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xfcca,0x0000,0x0000,0x0000,0xf3e1,0x0000,0x0000,0xcbc4,
-0x0000,0x0000,0x0000,0x0000,0xe3e5,0x0000,0xcbc5,0xeab4,
-0x0000,0x0000,0xe9bd,0x0000,0xd7c9,0x0000,0x0000,0xebdb,
-0xedb1,0x0000,0xccc3,0xf7be,0xfccb,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xf8f4,0x0000,0xd9b7,0x0000,0x0000,
-0xf3d3,0xf3d4,0x0000,0x0000,0x0000,0xf7e4,0x0000,0xf7d1,
-0x0000,0x0000,0xd8b7,0xceb1,0xcac2,0x0000,0x0000,0xfbb4,
-0xcbc6,0x0000,0x0000,0xf0f6,0x0000,0x0000,0xd5e7,0x0000,
-0xead0,0x0000,0x0000,0x0000,0x0000,0x0000,0xccd4,0xcbaf,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xf4aa,0xe9af,0x0000,
-0x0000,0xf5c3,0xe9d8,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xdde9,0x0000,0x0000,0x0000,0xf1f3,0x0000,
-0xd5fb,0xdebb,0x0000,0x0000,0xf4fb,0x0000,0x0000,0x0000,
-0xfdf3,0xfdf2,0xf7a6,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xddc9,0x0000,0x0000,0xd4d3,
-0x0000,0xcca8,0x0000,0xdac1,0xccd5,0x0000,0xd9e4,0x0000,
-0x0000,0x0000,0xfaca,0x0000,0x0000,0x0000,0xe5e3,0x0000,
-0x0000,0x0000,0xd3bc,0x0000,0x0000,0x0000,0xcaf0,0x0000,
-0x0000,0x0000,0x0000,0xd0c4,0x0000,0x0000,0x0000,0xcad0,
-0xfaab,0xebeb,0xe7f8,0xd9e5,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xd1d7,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xf3a4,0x0000,0x0000,0x0000,0xd4fb,0xfce3,
-0xfad8,0x0000,0xf3d5,0x0000,0xcfab,0x0000,0x0000,0xebf3,
-0xd5fc,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xd3d4,
-0xcdfc,0x0000,0xd9e6,0x0000,0xe2f9,0xe2a1,0xebd4,0x0000,
-0xe0f7,0xe4b2,0xccfc,0x0000,0x0000,0x0000,0xfbe4,0x0000,
-0x0000,0x0000,0xf4ab,0x0000,0x0000,0x0000,0x0000,0xd0bd,
-0x0000,0xcaf1,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xefb8,0x0000,0x0000,0x0000,0xd7c0,0x0000,
-0xeefa,0xfdf4,0x0000,0x0000,0xd3e3,0x0000,0xfbc2,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xd5e8,0xdbae,
-0xe1b6,0xf8b7,0x0000,0x0000,0x0000,0x0000,0x0000,0xe0bf,
-0xfbc3,0xddea,0x0000,0xe2a2,0x0000,0xeea6,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xf6e8,0x0000,0x0000,0x0000,0x0000,
-0xf6f5,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xddca,0x0000,
-0x0000,0xd0e2,0x0000,0x0000,0x0000,0x0000,0xdda6,0x0000,
-0x0000,0xddeb,0x0000,0x0000,0xe4f9,0x0000,0x0000,0xe3af,
-0xd0fc,0x0000,0x0000,0x0000,0xf4fc,0x0000,0x0000,0x0000,
-0x0000,0xccbc,0xf7ea,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xe5e4,0xdff1,0x0000,0x0000,0xf7e1,0x0000,0xf9f7,
-0xefb9,0x0000,0x0000,0xf8d8,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xf9a9,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xf8d9,0x0000,0x0000,0x0000,0xeebd,0x0000,0x0000,
-0x0000,0xd8c6,0x0000,0x0000,0xe4e3,0xf5ce,0x0000,0x0000,
-0x0000,0x0000,0xddd9,0x0000,0x0000,0x0000,0x0000,0xd9e7,
-0xd2b9,0xd5c3,0x0000,0x0000,0xdae5,0xdad0,0x0000,0xd1d9,
-0xced8,0x0000,0xcbde,0xf4ac,0xdafb,0x0000,0xf6e9,0xe8f3,
-0xcfac,0xf0f0,0x0000,0xf4fd,0xdbc8,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xcec0,0xe3d4,0xd1cf,0xf1f5,
-0x0000,0xcdf2,0x0000,0xcfeb,0x0000,0x0000,0x0000,0xcdb8,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xe3a6,0xd1da,
-/* 0x6300 */
-0x0000,0xf2a5,0x0000,0x0000,0x0000,0x0000,0x0000,0xf2a6,
-0x0000,0xe4ce,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xd3fb,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xf1a9,0x0000,0x0000,0x0000,0xf2c9,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xefd8,0xe6c9,0x0000,0xd8b8,0xfaf3,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xf3b5,0x0000,0x0000,0xf8a4,0x0000,0x0000,0xd1f3,
-0xe6c8,0x0000,0x0000,0x0000,0x0000,0xf8da,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xdce9,
-0xded7,0x0000,0x0000,0x0000,0x0000,0x0000,0xcbdf,0x0000,
-0x0000,0x0000,0xcfec,0x0000,0x0000,0x0000,0x0000,0xf4df,
-0x0000,0x0000,0xd1f4,0xd2ba,0x0000,0x0000,0x0000,0xdff2,
-0x0000,0x0000,0x0000,0xe1b7,0x0000,0x0000,0x0000,0x0000,
-0xe2a3,0xd3fc,0x0000,0x0000,0xede6,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xdbc9,0x0000,0x0000,0x0000,0xe4fa,0x0000,
-0xcfde,0x0000,0x0000,0xced0,0x0000,0x0000,0x0000,0x0000,
-0xd5d3,0xf3f5,0xf7ae,0x0000,0x0000,0xefc8,0x0000,0xcdf3,
-0xf5cf,0xe5f3,0xf0c2,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xcad1,0x0000,0x0000,0x0000,0xeaf1,0x0000,0xd0a6,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xd9da,
-0xf0ab,0x0000,0x0000,0x0000,0x0000,0x0000,0xebe7,0x0000,
-0x0000,0x0000,0xe5c0,0xfcb5,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xe4c4,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xcca9,0xfdc6,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xeab5,0x0000,0xe5aa,0xdfba,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-/* 0x6400 */
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xe1df,0x0000,0xdad1,
-0x0000,0x0000,0x0000,0x0000,0xe1b8,0x0000,0xe8f4,0xd3fd,
-0x0000,0x0000,0x0000,0x0000,0xe2a4,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xf2ca,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xdae6,0xf7b3,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xfdcd,0x0000,0x0000,0x0000,0xf3b6,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xeed7,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xf5c4,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xd8a4,0x0000,0x0000,0x0000,0x0000,0x0000,0xf2a7,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xd9b8,0xd9b9,0xefc9,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xd6ce,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xf7cb,0xdfae,0xe8f5,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xd2b5,0x0000,0x0000,0x0000,0xd3d5,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xf4cc,0xdafc,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xd9e8,0x0000,0xf7eb,0xf5c9,0x0000,
-0xf3bc,0x0000,0xdad2,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xd3b5,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xe8b6,0x0000,0x0000,0xd6cf,0xf4ba,0x0000,0xf7c9,
-0x0000,0x0000,0xccaa,0x0000,0x0000,0xf0c3,0xccd6,0x0000,
-0x0000,0x0000,0xd0d3,0x0000,0xd3bd,0x0000,0x0000,0x0000,
-0xdbfb,0x0000,0xcbe0,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xd3e4,0xf6f7,0x0000,0x0000,0xd5ba,0xf3cd,0xcbe1,
-0x0000,0x0000,0x0000,0x0000,0xebf4,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xf4ad,0x0000,0xfcaa,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xf7ec,0x0000,0x0000,0x0000,0xe8f6,0x0000,
-0xdae7,0x0000,0x0000,0x0000,0xf7cc,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xe5c1,0x0000,0x0000,0x0000,0x0000,0xe0ee,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xd5fd,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xcee6,0xfcab,0xd5bb,0x0000,0x0000,0xf2a8,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xe2a5,0xcdb9,
-0xeaf2,0xcbc7,0x0000,0xcdf4,0x0000,0x0000,0xdbaf,0xefd9,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xcdba,0x0000,0x0000,
-0xfcf9,0x0000,0x0000,0x0000,0x0000,0xdff3,0xcee7,0xdac2,
-0x0000,0xcfad,0x0000,0x0000,0x0000,0x0000,0xe7f9,0xf8a8,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xf3e2,0x0000,
-0x0000,0x0000,0xcaf2,0xdfa4,0x0000,0x0000,0xd4c4,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xccd7,0xe5c2,0x0000,0x0000,
-0x0000,0x0000,0xcdbb,0x0000,0xefda,0xeed8,0x0000,0xdda7,
-0xe2a6,0x0000,0x0000,0x0000,0x0000,0x0000,0xe0c0,0x0000,
-0x0000,0x0000,0xd6b0,0xf8ca,0x0000,0xfcfa,0x0000,0xd9fe,
-0x0000,0x0000,0x0000,0x0000,0xdeb0,0x0000,0x0000,0x0000,
-0xddec,0xdae8,0x0000,0x0000,0x0000,0x0000,0x0000,0xd4e0,
-0x0000,0xd6f9,0x0000,0xcdd7,0xded8,0x0000,0x0000,0xf2f8,
-0x0000,0xe4d6,0x0000,0x0000,0xd0c5,0xf4ae,0x0000,0xdda8,
-0x0000,0x0000,0x0000,0xedc5,0xf3d6,0x0000,0x0000,0xded9,
-0xe3e6,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xd3a8,
-0x0000,0xdbb0,0x0000,0x0000,0xe5da,0xe3bf,0x0000,0x0000,
-0x0000,0xdbb1,0x0000,0x0000,0x0000,0xd5e9,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xe0c1,0xefdb,0x0000,0x0000,0xf0e9,
-0x0000,0x0000,0xd7b2,0x0000,0x0000,0x0000,0x0000,0xd0fd,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xd9e9,0x0000,0x0000,0xd0fe,0x0000,0xeced,0xd3a9,0x0000,
-0xf2a9,0xf0c4,0x0000,0x0000,0xe2e2,0xe9ef,0x0000,0x0000,
-0x0000,0xf9d1,0x0000,0x0000,0xe9d9,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xe8da,0xdac3,0xdac4,0xd4c5,0x0000,0xe7fa,
-/* 0x6600 */
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xcde0,0xe3b0,
-0x0000,0xdbb2,0xfbc4,0x0000,0xf3e3,0x0000,0xd9a5,0xfbe7,
-0xddcb,0xd0d4,0x0000,0xe6b6,0xe0ae,0xfdda,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xdcb5,0xe0f8,
-0xe7b1,0x0000,0x0000,0x0000,0x0000,0xf5f0,0x0000,0xd8dc,
-0xedc6,0x0000,0x0000,0x0000,0x0000,0xe1b9,0x0000,0xe3c0,
-0xf9c0,0xe9f0,0x0000,0x0000,0xd9db,0x0000,0xf3e4,0x0000,
-0x0000,0x0000,0xdcb6,0xe4e9,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xf0c5,0xe3c1,0xfccc,0xfccd,0x0000,0x0000,0x0000,
-0x0000,0xf2cb,0x0000,0xf2cc,0x0000,0x0000,0x0000,0xe4cf,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xf1db,0x0000,0xfad9,0x0000,0xf1b8,0xfdf5,0xe0f9,
-0x0000,0x0000,0x0000,0x0000,0xe7fb,0xfcb7,0xfce4,0xfbc5,
-0xe3e7,0xd8b9,0x0000,0xf6f8,0x0000,0x0000,0xdcc5,0xccd8,
-0x0000,0x0000,0x0000,0xe0af,0xf4e7,0x0000,0xefdc,0xcffc,
-0xefdd,0x0000,0xf2aa,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xfdbe,0x0000,0x0000,0xcaac,
-0xfdbb,0xfdc7,0x0000,0x0000,0x0000,0x0000,0xe7b2,0x0000,
-0xead1,0xdff4,0x0000,0x0000,0x0000,0x0000,0xd1ec,0xe4de,
-0xe5c3,0x0000,0x0000,0x0000,0x0000,0xd9a6,0x0000,0x0000,
-0xcdbc,0x0000,0xf3e5,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xedd5,0x0000,0x0000,0xd9ba,0x0000,
-0x0000,0x0000,0xede7,0xfbb5,0xf8ec,0x0000,0x0000,0x0000,
-0x0000,0xe0e7,0x0000,0xccd9,0x0000,0x0000,0xd4c6,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xe7a5,0x0000,0xd5f5,0xd3be,
-0x0000,0xfcfb,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xe4f2,0x0000,
-0x0000,0xdff5,0x0000,0x0000,0xe8f8,0xf8ed,0x0000,0x0000,
-0xcec7,0x0000,0x0000,0x0000,0x0000,0x0000,0xfdf6,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xe8d8,0x0000,0xcdd8,0xe7d6,0xccda,0x0000,0x0000,0xcae3,
-0xdff6,0xf0c7,0xf0c6,0x0000,0xd8ba,0x0000,0xf1f4,0xf4f0,
-0xf5cc,0x0000,0x0000,0xfce5,0x0000,0x0000,0x0000,0x0000,
-0xeac5,0xeaf3,0x0000,0xdddb,0x0000,0xdcd7,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xdefd,0xf2f9,0x0000,0xd5c7,
-0x0000,0x0000,0x0000,0xd8d0,0x0000,0xf0c8,0xd1a1,0xd1a2,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xd9d4,0xd6e8,
-0xd9ca,0x0000,0xdab1,0xd8c7,0xdce2,0xf3ce,0xf5f4,0x0000,
-0x0000,0xf1b9,0x0000,0x0000,0xdad3,0x0000,0xf6ea,0x0000,
-0x0000,0x0000,0xcff5,0x0000,0x0000,0xfdae,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xcad2,0x0000,
-0x0000,0xdfb4,0x0000,0x0000,0x0000,0x0000,0xd7dd,0xfaba,
-0xeea7,0xf5bd,0x0000,0xf8f5,0x0000,0x0000,0xede8,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xd4e1,0x0000,0xd1a3,0xe1d6,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xf9f8,0x0000,0xdbca,
-0xcbf9,0xd4d4,0x0000,0xd9dc,0x0000,0xeebe,0x0000,0xf7ed,
-0x0000,0x0000,0x0000,0xd2ee,0x0000,0x0000,0xe1e6,0xf7f9,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xdded,
-0x0000,0xe8db,0x0000,0xdbb3,0x0000,0x0000,0x0000,0xd1f7,
-0xe0b0,0x0000,0x0000,0xd4e2,0x0000,0xf6d7,0x0000,0xd7f9,
-0x0000,0x0000,0xd8dd,0x0000,0xcdfd,0xf2ab,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xcdbd,
-0xf8c2,0x0000,0x0000,0xf2ac,0x0000,0x0000,0xcaad,0xcaae,
-0xcfae,0x0000,0x0000,0x0000,0x0000,0x0000,0xe3c2,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xdcb7,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xdbda,
-0xd9bb,0xcaf3,0xf6d3,0xe6f8,0xeaf5,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xeaf6,0x0000,0x0000,0xf6f9,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xcfaf,0x0000,0x0000,0xcad3,0x0000,0x0000,0xcaaf,
-0xd2b0,0xf1ba,0x0000,0xd7b3,0xe3c3,0xf3fd,0xdeda,0x0000,
-0x0000,0x0000,0x0000,0xdedb,0x0000,0x0000,0xefde,0x0000,
-/* 0x6800 */
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xe2e3,0xeefb,0x0000,0x0000,0xdff7,0xd7ca,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xcee8,0xdbdb,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xf1bb,0x0000,0x0000,0x0000,0x0000,0xe9f1,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xfab7,0xd0c6,0x0000,0x0000,0xccab,0xeea8,0x0000,0x0000,
-0xcbfa,0xf9f9,0xccfd,0xd3fe,0x0000,0x0000,0x0000,0x0000,
-0xe4d0,0x0000,0x0000,0x0000,0x0000,0x0000,0xf2ee,0x0000,
-0xd4d5,0xdfcd,0x0000,0xfcb8,0xd1d0,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xf2cd,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xf7d2,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xcad4,
-0x0000,0xd5d9,0x0000,0x0000,0x0000,0xd8de,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xcdd9,
-0x0000,0x0000,0x0000,0xeea9,0xf6bc,0x0000,0x0000,0xccdb,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xf0c9,0x0000,0xfcfc,
-0x0000,0xe8c9,0xf4fe,0x0000,0x0000,0x0000,0x0000,0xe7fc,
-0xd7de,0x0000,0x0000,0x0000,0x0000,0xdedc,0x0000,0xf0ac,
-0xccfe,0xcde1,0x0000,0xe1ba,0x0000,0xdbef,0xdab2,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xd1a5,0xdcb8,0x0000,0x0000,
-0x0000,0xd8f6,0x0000,0xd1a4,0x0000,0xcde2,0x0000,0x0000,
-0x0000,0x0000,0xdcea,0x0000,0x0000,0xf0f7,0x0000,0xf0ca,
-0xd0be,0x0000,0xdddc,0x0000,0x0000,0x0000,0x0000,0xd4d6,
-0xd3d6,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xedd0,
-0xcda1,0x0000,0x0000,0x0000,0x0000,0x0000,0xdfb5,0x0000,
-0x0000,0x0000,0xdff8,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xd4a1,0xceb2,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xe8ca,0x0000,0x0000,0x0000,0x0000,0xebf5,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xe3d5,0xf5d0,0x0000,
-0x0000,0x0000,0xf5a1,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xd9a7,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xe5ab,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xe6cb,0x0000,0xf5f1,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xe5c5,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xf9a3,0xe0db,0xf6eb,0x0000,0xcbf1,
-0x0000,0xd9ea,0xf5a2,0x0000,0x0000,0x0000,0xd7d1,0x0000,
-0xd1f8,0xeaf8,0xeaf9,0xdab3,0x0000,0x0000,0x0000,0x0000,
-0xefdf,0x0000,0x0000,0xf1ef,0x0000,0xe5f6,0xeebf,0xe2e4,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xd0bf,0x0000,0xfaac,
-0xf5d1,0xe7b3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xe9be,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xf2ce,0xdbb4,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xfcce,0x0000,0xddee,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xe7b4,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xd7b4,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xf7b4,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xcdbe,0x0000,0xdae9,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xcfb0,0xf7d9,0xf3e6,0x0000,0x0000,
-0xced9,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xceaa,0x0000,0xcbc8,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xd0a7,0x0000,0xf0cb,0x0000,0xd0c7,
-/* 0x6a00 */
-0x0000,0x0000,0xe4c5,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xdbe0,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xd5da,0x0000,0xd7a7,0x0000,0x0000,0x0000,0xeec0,
-0x0000,0xf8f6,0x0000,0x0000,0x0000,0x0000,0xf5d2,0xede9,
-0x0000,0xd9bc,0x0000,0xe5c6,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xf5a3,0x0000,0x0000,
-0xdad4,0xe2a7,0xfbfc,0x0000,0x0000,0xf1dc,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xcaf4,0x0000,0x0000,0x0000,
-0xe8fa,0x0000,0x0000,0xcee9,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xe9f8,0xe2e5,0x0000,0x0000,0x0000,0x0000,
-0xd0b9,0xd4f2,0x0000,0x0000,0x0000,0x0000,0x0000,0xd1a6,
-0x0000,0xdfce,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xfcf4,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xd3aa,0x0000,0x0000,0x0000,0xccac,0x0000,0x0000,0x0000,
-0x0000,0xefe0,0x0000,0x0000,0x0000,0xe5e5,0xd0d5,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xdbfc,
-0x0000,0x0000,0x0000,0x0000,0xfce6,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xcbfe,0xedea,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xdeb1,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xf9e3,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xd4a2,0xcff6,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xd6d0,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xd5ea,0xf1ee,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xfacb,0x0000,
-0x0000,0x0000,0x0000,0xe5a1,0x0000,0x0000,0x0000,0x0000,
-/* 0x6b00 */
-0x0000,0x0000,0x0000,0x0000,0xd5b1,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xcfed,0x0000,0xedeb,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xd5b2,0x0000,0x0000,0x0000,0xd5bc,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xfde2,0xf3ad,0x0000,0xfddb,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xe9b0,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xd1a7,0x0000,0x0000,0xfde3,0xceb3,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xfde4,0xface,
-0x0000,0x0000,0x0000,0x0000,0xcab0,0x0000,0xf7a7,0x0000,
-0xcfb1,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xe6a2,
-0x0000,0xfcb6,0xf2ad,0xefe1,0xf3ae,0xdcc6,0xd9eb,0x0000,
-0x0000,0x0000,0xe8e0,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xe1a8,0x0000,0x0000,0x0000,0x0000,0xd5f6,
-0xcffd,0x0000,0x0000,0xdedd,0x0000,0x0000,0x0000,0xd9d1,
-0x0000,0x0000,0x0000,0xe4ea,0xf2cf,0x0000,0xf7bf,0x0000,
-0x0000,0xe2e6,0xe2a8,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xe3d6,0x0000,
-0xedd1,0x0000,0x0000,0x0000,0x0000,0x0000,0xe9f9,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xd6b1,0xdeb2,
-0x0000,0x0000,0xe0e8,0x0000,0x0000,0xd3ab,0x0000,0xebdc,
-0x0000,0x0000,0xdfaf,0x0000,0xcac3,0x0000,0x0000,0xeefc,
-0x0000,0xfdc3,0x0000,0x0000,0x0000,0xebf6,0xcfb2,0x0000,
-0x0000,0x0000,0x0000,0xd9ec,0x0000,0xd9bd,0x0000,0xd8df,
-0x0000,0x0000,0xd4b8,0xebbe,0xddef,0x0000,0xddf0,0xddf1,
-0xddf2,0x0000,0x0000,0xd9be,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xfbc6,0xcfb3,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-/* 0x6c00 */
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xeefd,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xe4ab,
-0x0000,0xdac5,0x0000,0xd8ec,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xd1a8,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xe2a9,0x0000,0x0000,0xdebc,
-0xe7b5,0x0000,0x0000,0x0000,0x0000,0x0000,0xdbf0,0x0000,
-0xefe2,0xf1f0,0xcfb4,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xdbf1,0x0000,
-0xe0b1,0x0000,0x0000,0x0000,0x0000,0xdfa5,0x0000,0xf9d2,
-0x0000,0x0000,0xe7fd,0x0000,0x0000,0xe6a3,0xfbf1,0xcbb0,
-0xf2ae,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xcde7,0x0000,0xe8dc,0x0000,0x0000,0xe7d7,0x0000,0x0000,
-0xf7c0,0x0000,0xd0e3,0x0000,0x0000,0x0000,0xdaa1,0x0000,
-0x0000,0x0000,0xccbd,0x0000,0x0000,0xd1a9,0xddcc,0x0000,
-0x0000,0xe3fe,0xd1aa,0xe8aa,0x0000,0xeab6,0xf9fa,0xe6cc,
-0xf6d8,0x0000,0x0000,0x0000,0xd4c7,0x0000,0x0000,0x0000,
-0xd9cb,0x0000,0xd9d2,0xd3cb,0xd8f7,0xdaa9,0xf5f8,0x0000,
-0x0000,0xdede,0xf2af,0xf8a9,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xd8c8,0x0000,0x0000,0xeec1,0x0000,
-0x0000,0x0000,0x0000,0xf9c1,0x0000,0x0000,0x0000,0x0000,
-0xddf3,0xeafa,0x0000,0xf6bd,0xe1bb,0xcdbf,0xf4d4,0xe6cd,
-0x0000,0xfccf,0xfba2,0x0000,0xe0dc,0x0000,0x0000,0x0000,
-0x0000,0xf4bb,0xdad5,0x0000,0xf9b2,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xfbf2,0x0000,0xdbf6,0x0000,0xdedf,
-0x0000,0x0000,0x0000,0xdbf2,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xf8dc,0xf7ee,0xebe8,0x0000,0xd2fa,0x0000,0x0000,
-0xf1bc,0x0000,0x0000,0xfada,0x0000,0x0000,0xdaea,0xdac6,
-0xf7c1,0x0000,0x0000,0xe7b6,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-/* 0x6d00 */
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xe5c7,0xd6ac,0x0000,0x0000,0x0000,
-0x0000,0xdcc7,0x0000,0x0000,0x0000,0x0000,0x0000,0xe1a9,
-0x0000,0xe2aa,0x0000,0xd5a6,0x0000,0x0000,0xd4d7,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xf2d0,0x0000,0xeafb,
-0x0000,0xe0dd,0xfbf3,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xf1bd,0x0000,0x0000,0xe2e7,0xfdd7,0x0000,
-0xcec8,0xeab7,0x0000,0xfcc0,0x0000,0xfde7,0xf7ef,0x0000,
-0x0000,0xd7b5,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xefba,0xf1dd,0x0000,0xdeb3,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xe8cb,0x0000,0x0000,0xf8dd,0x0000,
-0x0000,0xfbc7,0xd5c8,0x0000,0xd7df,0x0000,0xdda9,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xe9b1,0x0000,0x0000,0xfaad,
-0xf6d9,0xfaf4,0x0000,0x0000,0x0000,0x0000,0x0000,0xf8aa,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xe6ee,0x0000,0xccdc,
-0xe1bc,0xe0ef,0x0000,0x0000,0xe9bf,0xfcfd,0xe6ce,0x0000,
-0x0000,0xe1d7,0x0000,0xe6cf,0x0000,0xf4f1,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xe4f3,
-0x0000,0x0000,0xe4fb,0x0000,0x0000,0xf9e4,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xefe3,0x0000,0x0000,0xcfee,0xf6be,0xe0b2,0xfcfe,0xd1ab,
-0x0000,0x0000,0x0000,0xd7fa,0x0000,0x0000,0x0000,0xfbc8,
-0x0000,0xe2d7,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xd4a3,0xf0f8,0xd7a8,0x0000,0x0000,0x0000,0xe1e7,0x0000,
-0x0000,0xd3bf,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xefe4,0x0000,0xd7c5,0xebe2,0x0000,0x0000,0xfce7,0x0000,
-0x0000,0xe4a2,0x0000,0xe2e8,0x0000,0xe6d0,0x0000,0xfbe8,
-0xf4e8,0xe5f4,0xf4bc,0xf4d5,0x0000,0x0000,0x0000,0x0000,
-/* 0x6e00 */
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xdfb6,
-0x0000,0xfcb9,0xeec2,0xcaf5,0x0000,0x0000,0x0000,0xefe5,
-0xcbe2,0xd4a4,0x0000,0xdee0,0xdafd,0xe4c6,0xe8be,0x0000,
-0x0000,0x0000,0x0000,0xe0de,0xf6b4,0xead2,0x0000,0xf9fb,
-0x0000,0x0000,0xe0c2,0x0000,0xcae4,0x0000,0xe7b7,0x0000,
-0xeafd,0x0000,0xd9dd,0x0000,0xdab4,0xeeaa,0xfbe9,0x0000,
-0x0000,0x0000,0x0000,0xdbcb,0xdab5,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xf1be,0x0000,0x0000,0xd3ac,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xfbc9,0x0000,
-0xdfcf,0x0000,0x0000,0xd3c0,0xe3d7,0x0000,0xefe6,0xfcd0,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xe9c0,
-0x0000,0x0000,0x0000,0xf5d3,0x0000,0x0000,0xecdc,0xf7b7,
-0x0000,0x0000,0xeab8,0xd1f9,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xdcc8,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xeab9,0x0000,0x0000,0x0000,0x0000,0x0000,0xf1de,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xd7b6,0xcfb5,0x0000,0xd9a8,
-0x0000,0x0000,0xecee,0x0000,0x0000,0xddaa,0x0000,0x0000,
-0x0000,0x0000,0xcda2,0xe8ae,0x0000,0x0000,0x0000,0xe1bd,
-0x0000,0xf2d1,0x0000,0x0000,0x0000,0x0000,0xe9c1,0x0000,
-0x0000,0x0000,0xd2fc,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xdbb5,0x0000,0xf3e7,0xd8fe,0x0000,0x0000,
-0x0000,0xfcd1,0x0000,0xedb2,0xf4af,0x0000,0xfba3,0x0000,
-0x0000,0xfcc1,0x0000,0xeeab,0xd4a5,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xf4f2,
-0x0000,0x0000,0x0000,0x0000,0xeed9,0x0000,0x0000,0x0000,
-0xfbca,0x0000,0x0000,0x0000,0x0000,0x0000,0xcde3,0xd8bb,
-/* 0x6f00 */
-0x0000,0xe5db,0xf8f7,0x0000,0x0000,0x0000,0xf6d4,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xd7a9,
-0x0000,0xcbc9,0x0000,0x0000,0xe6d1,0xf0cc,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xd8ae,0x0000,0xf9d3,0xd5fe,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xd8bc,0xf2b0,0x0000,0x0000,0x0000,
-0x0000,0xe2ab,0xf3e8,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xefc2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xedec,
-0x0000,0xe7b8,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xdafe,0x0000,0x0000,0xccbe,0x0000,0x0000,0xf2fc,
-0xdaeb,0x0000,0xe2d8,0xedd6,0x0000,0x0000,0xd6d1,0xe0b3,
-0x0000,0x0000,0xfcd2,0x0000,0xebc8,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xd3c1,0xf0cd,0x0000,
-0xcff7,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xedd2,0x0000,0xd4d8,0xdcc9,0xd7f1,0x0000,
-0x0000,0xdfbb,0x0000,0x0000,0xf3a5,0x0000,0x0000,0x0000,
-0xf4cd,0x0000,0x0000,0x0000,0x0000,0xf1bf,0xf8b1,0x0000,
-0xe9fa,0x0000,0x0000,0x0000,0xfbcb,0x0000,0x0000,0xcad5,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xf9d4,0xf7ca,0x0000,0x0000,0xd6c8,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xfce8,0xf3bd,
-0x0000,0xeefe,0x0000,0xe7fe,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xd3c2,0x0000,0x0000,0x0000,0x0000,0xd3b6,0x0000,
-0xccad,0xf6fa,0xd6b2,0xd2d8,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xe7d8,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xe3a5,0x0000,0x0000,
-0x0000,0x0000,0xe7b9,0x0000,0x0000,0x0000,0x0000,0xf0ad,
-0xfbcc,0xeba1,0x0000,0x0000,0xd4a6,0x0000,0x0000,0x0000,
-0x0000,0xfbcd,0x0000,0xd5bd,0xf1df,0x0000,0x0000,0xf6fb,
-0x0000,0xdeb4,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xd5eb,0x0000,
-/* 0x7000 */
-0x0000,0xe5c8,0x0000,0x0000,0x0000,0xfba4,0xd4b9,0x0000,
-0x0000,0xdee1,0x0000,0xe4a3,0x0000,0x0000,0x0000,0xd7b7,
-0x0000,0xf8ee,0x0000,0x0000,0x0000,0xdeb5,0x0000,0x0000,
-0xd6d2,0x0000,0xf9d5,0xe7ba,0xebd5,0xd5f7,0xefe7,0xe1be,
-0x0000,0x0000,0x0000,0xfaae,0x0000,0x0000,0x0000,0xd6e9,
-0xd6ee,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xe7bb,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xeccb,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xd5b3,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xceb4,0x0000,0x0000,0x0000,
-0xfba5,0xe1ee,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xf7a8,0x0000,0x0000,0x0000,0x0000,0xfbce,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xd8bd,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xfbfd,0x0000,0x0000,0x0000,0x0000,
-0xfce9,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xcfb6,0x0000,0x0000,0x0000,0xedc7,0xeeac,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xccdd,0x0000,0x0000,
-0x0000,0x0000,0xf6a7,0x0000,0x0000,0x0000,0xe6fa,0x0000,
-0x0000,0x0000,0xf5a4,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xfddc,0xedb3,0xcec9,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xefe8,0x0000,0x0000,0xe1bf,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xfadb,0xcbe3,0xf7a9,0x0000,0xfba6,
-0x0000,0x0000,0x0000,0xdcb9,0x0000,0x0000,0x0000,0xf1c0,
-0xedc8,0xefc3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xd6ad,0x0000,0x0000,0xfdce,0x0000,0x0000,0x0000,0xe8a1,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xfbf4,0xd5a7,0x0000,0x0000,0x0000,0xf1f6,0x0000,0xe6d3,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xccde,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xf8b2,0x0000,0x0000,0x0000,0xdceb,0x0000,0x0000,
-/* 0x7100 */
-0x0000,0x0000,0x0000,0x0000,0xfdb6,0x0000,0x0000,0x0000,
-0x0000,0xe5ea,0x0000,0x0000,0xf1e0,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xdbcc,0xddcd,0x0000,0x0000,0x0000,0xd4c8,0x0000,
-0x0000,0xd9ed,0x0000,0x0000,0x0000,0x0000,0xf5a5,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xe6fb,0x0000,0x0000,0x0000,0x0000,0x0000,0xe6d4,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xfdc8,
-0x0000,0xd6a1,0xfdbf,0x0000,0xfcd3,0x0000,0xefa1,0x0000,
-0xe7bc,0x0000,0x0000,0x0000,0x0000,0x0000,0xd1ee,0x0000,
-0x0000,0xe6d5,0x0000,0x0000,0xe9f2,0x0000,0xdfb0,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xd8e0,0xfcba,0xfdaf,0xf0ce,
-0x0000,0xdbe1,0x0000,0x0000,0xe5c9,0x0000,0xedb4,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xe0c3,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xe3d8,0x0000,0x0000,0x0000,
-0x0000,0xe9fb,0xeaa8,0x0000,0x0000,0x0000,0x0000,0xfdb7,
-0x0000,0x0000,0xfba7,0x0000,0xe9c2,0x0000,0x0000,0x0000,
-0x0000,0xfdf7,0x0000,0x0000,0x0000,0x0000,0x0000,0xe2d9,
-0x0000,0x0000,0xdcec,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xe8a2,0x0000,0x0000,0x0000,
-0x0000,0xe6f0,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xfdf8,0xfdf9,0x0000,0x0000,0x0000,0xf6bf,0x0000,
-0x0000,0xe7a7,0x0000,0xe6d7,0x0000,0x0000,0x0000,0x0000,
-0xd4f3,0xd4c9,0x0000,0x0000,0x0000,0x0000,0xd6fa,0x0000,
-0xd7f2,0x0000,0xe1c0,0x0000,0xdbe2,0xe6d8,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xe7bd,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xf0cf,0xf3be,0xe2ac,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xf5b7,0xe0f0,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xfdb8,0xe3e8,0x0000,0xd4a7,0xe8fc,
-0xfad2,0x0000,0x0000,0x0000,0x0000,0x0000,0xf8ef,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xd6d3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xd5b4,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xf0d0,0x0000,0xf7f0,0xeeb3,0x0000,0x0000,
-0xeaba,0x0000,0xead3,0x0000,0x0000,0xedc9,0xddab,0x0000,
-0x0000,0x0000,0xe5ac,0xfda1,0x0000,0xdfd0,0xecb3,0x0000,
-0xdfd1,0x0000,0x0000,0x0000,0x0000,0x0000,0xeded,0xf8b8,
-0xf7fa,0x0000,0x0000,0x0000,0xf8ab,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xf4e0,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xd4ba,0xe4b3,0x0000,0xe9da,0x0000,0xdeb6,0x0000,0xd9bf,
-0x0000,0xd9c0,0xd6ef,0x0000,0x0000,0x0000,0x0000,0xd9cc,
-0x0000,0xdaaa,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xdfe5,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xf7e5,0x0000,0x0000,0x0000,0xccb2,0x0000,0x0000,
-0xdff9,0xd7e0,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xd4bb,0x0000,0x0000,0x0000,0x0000,0xfdfa,
-0x0000,0x0000,0x0000,0x0000,0xccb3,0x0000,0x0000,0xdbf3,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xdfd2,0x0000,0xceca,0x0000,0xeeda,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xe4e4,0x0000,
-0xfbcf,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xcfb7,
-0x0000,0xeec3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xceea,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xe2ad,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xd7e1,0xfaf5,0x0000,0x0000,0xd5c9,0xf8ac,0x0000,0x0000,
-/* 0x7300 */
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xe7d9,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xf3e9,0x0000,
-0x0000,0x0000,0x0000,0xd8ed,0xe3c4,0xf0f1,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xe8e5,0x0000,0x0000,
-0x0000,0xe0fa,0xeec4,0xd9de,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xeba2,0xeba3,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xfcc2,0xeabb,
-0x0000,0x0000,0x0000,0x0000,0xe8ab,0xdee2,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xedef,0x0000,0xe8a3,0x0000,0x0000,0x0000,0x0000,0xcff1,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xd4bc,0x0000,0xfcea,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xe7be,0x0000,0xfcf2,0x0000,0x0000,0xd6b4,0x0000,0x0000,
-0xe2ae,0x0000,0xd3b7,0xfacc,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xfadc,0x0000,0xedb5,0xe1e3,
-0x0000,0xe8ac,0x0000,0xe8dd,0x0000,0x0000,0xefe9,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xf4bd,0x0000,0xcfb8,0xe9db,
-0xd1ac,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xdac7,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xebc9,
-0x0000,0xe8cc,0x0000,0x0000,0x0000,0xdeb7,0x0000,0x0000,
-0x0000,0x0000,0xd6bc,0xd3e5,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xfadd,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xdad6,0x0000,0xcab1,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xdac8,0xdfa6,0x0000,0xf9b3,0xf2d2,0x0000,0xcac4,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xcecb,0x0000,
-0x0000,0xcdf5,0x0000,0x0000,0x0000,0xfdb0,0xd5a8,0x0000,
-0xf1c1,0x0000,0x0000,0xe2e9,0xdcca,0xecb4,0xfac0,0x0000,
-0x0000,0xfba8,0xd0a8,0x0000,0x0000,0xdaec,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xd9ee,
-0x0000,0xe0fb,0x0000,0x0000,0x0000,0xefea,0xfade,0x0000,
-/* 0x7400 */
-0x0000,0xe0c4,0x0000,0xcfb9,0x0000,0xd5ca,0xd7e2,0xe2af,
-0x0000,0xd7b8,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xe8cd,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xf6da,0x0000,0x0000,0x0000,0x0000,
-0xefa2,0xe2da,0xf6fc,0x0000,0x0000,0xfbd0,0xd1ad,0x0000,
-0xcde4,0x0000,0xd1ae,0xdced,0xe8ce,0x0000,0xf0f9,0xceb5,
-0xe6fc,0x0000,0x0000,0xd7fb,0xd0d6,0xddf5,0xf7f1,0x0000,
-0xf6fd,0x0000,0xdbf7,0x0000,0x0000,0x0000,0x0000,0xfbea,
-0xe9dc,0xd9c1,0x0000,0xf5f2,0xe0c5,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xead4,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xf9c2,0x0000,0xeabc,
-0x0000,0xd2c5,0xfbd1,0xe7c0,0xeba5,0x0000,0xdffa,0xe3a2,
-0xd7b9,0x0000,0xe9c3,0x0000,0xe8fd,0xe8af,0x0000,0x0000,
-0xf2d3,0xfba9,0xd8a5,0x0000,0x0000,0x0000,0x0000,0xd5cb,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xd0c8,0x0000,
-0x0000,0x0000,0xd1af,0xd7e3,0x0000,0x0000,0x0000,0xe0c6,
-0x0000,0xd6a2,0x0000,0xedf0,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xd7f3,0x0000,0x0000,0x0000,0xfcd4,0x0000,0xdad7,0xccdf,
-0x0000,0xf2d4,0x0000,0xd1b0,0x0000,0xcce0,0x0000,0xdbfd,
-0xf3bf,0x0000,0xf0d1,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xfcbb,0x0000,0xe2b0,0x0000,0x0000,0xe6a5,0x0000,0x0000,
-0x0000,0xe2db,0x0000,0x0000,0x0000,0xdfde,0x0000,0xe0c7,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xf2ef,0x0000,
-0x0000,0x0000,0xcce1,0x0000,0x0000,0x0000,0x0000,0xd6ea,
-0x0000,0x0000,0x0000,0x0000,0xe7c2,0x0000,0x0000,0x0000,
-0xceb6,0x0000,0xf3c0,0x0000,0xcdfe,0x0000,0x0000,0x0000,
-0xfbd2,0x0000,0xf8f8,0xf7fb,0x0000,0x0000,0xe8bf,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xe8b7,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xedb6,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-/* 0x7500 */
-0x0000,0xdcba,0x0000,0x0000,0xccb4,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xf1f7,0x0000,0x0000,0x0000,0xe8b8,0x0000,0x0000,
-0xcaf6,0x0000,0xe4a4,0xf4d6,0x0000,0x0000,0x0000,0xdfe6,
-0x0000,0x0000,0x0000,0xdfa7,0x0000,0xdfe7,0xe1c1,0x0000,
-0xe9c4,0x0000,0x0000,0xdccb,0xe9c5,0x0000,0x0000,0x0000,
-0xefa3,0xeba6,0xcba3,0xe3e9,0x0000,0x0000,0x0000,0xd1fb,
-0xefa4,0x0000,0xefeb,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xd0b4,
-0x0000,0x0000,0x0000,0x0000,0xcda3,0x0000,0x0000,0xe8e6,
-0x0000,0xefa5,0x0000,0xd3cc,0xdaed,0x0000,0x0000,0x0000,
-0x0000,0xd7ba,0x0000,0xf2d5,0xf5e5,0xd9ef,0x0000,0x0000,
-0x0000,0x0000,0xf9b4,0x0000,0x0000,0xd5d4,0xfdcf,0x0000,
-0x0000,0x0000,0xdbe3,0x0000,0x0000,0x0000,0x0000,0xf1e1,
-0xecb6,0x0000,0x0000,0x0000,0x0000,0xfbfe,0xd3d7,0x0000,
-0xd1b1,0x0000,0xcbb1,0x0000,0x0000,0x0000,0x0000,0xd1b2,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xcbb2,0xf1c2,
-0x0000,0x0000,0xf4e1,0xf9b5,0x0000,0x0000,0xe1c3,0xe1c2,
-0x0000,0xebf7,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xdfa8,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xcbca,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xe6b9,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xf8de,0xf9aa,0xcaf7,0x0000,0xedb7,0x0000,0x0000,
-0xd3b8,0xf2d6,0x0000,0x0000,0xd4d9,0xeec5,0xf2f0,0x0000,
-0x0000,0x0000,0xcab2,0x0000,0x0000,0xdcbb,0x0000,0xf1f8,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xecb7,0x0000,0x0000,
-0x0000,0x0000,0xe5ca,0x0000,0xf6c0,0xfddd,0x0000,0x0000,
-0xd4e3,0xcce2,0x0000,0xf7d4,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xd7e5,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xd3c3,0x0000,0xd8a6,0x0000,0xf6c1,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xddf6,0x0000,0xcdc0,0x0000,0x0000,0x0000,
-0xe5dc,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xe5cb,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xe1c4,0x0000,0x0000,0x0000,0x0000,0x0000,0xe8b0,
-0xf4b0,0xf3ea,0xdaee,0x0000,0xd7bb,0x0000,0xe2b1,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xd7aa,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xd6fb,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xe4df,0x0000,0xcad6,0x0000,
-0x0000,0x0000,0xeba8,0x0000,0x0000,0x0000,0xdbfe,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xf6c2,0x0000,0x0000,0xefbb,0x0000,0x0000,0x0000,
-0x0000,0xd4fd,0x0000,0x0000,0xe0c8,0x0000,0x0000,0x0000,
-0xe8b9,0x0000,0xefa6,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xcda4,0x0000,0x0000,0xd4f4,0xdba1,0xdbdc,0xdbdd,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xeedc,0x0000,0xcbcb,0xfcd5,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xceeb,0x0000,
-0xcdc1,0x0000,0x0000,0xfbd3,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xf9ab,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xf5d4,0x0000,0x0000,0x0000,0x0000,0xd9a9,
-0x0000,0x0000,0xe9dd,0xdbcd,0x0000,0x0000,0xddce,0x0000,
-0xe7c3,0x0000,0xeccc,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xf9ec,0x0000,0x0000,0x0000,0xcbcc,0x0000,
-0x0000,0x0000,0x0000,0xe0fc,0xd4a8,0x0000,0xedd3,0xd8ef,
-0x0000,0xf2d7,0x0000,0xcaf8,0xdaef,0x0000,0x0000,0xd6d4,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xd9cd,0x0000,
-0x0000,0x0000,0xd8ee,0x0000,0xf2c1,0x0000,0x0000,0x0000,
-0xdfd3,0x0000,0x0000,0x0000,0xdaf0,0x0000,0xe2ea,0x0000,
-/* 0x7700 */
-0x0000,0xe0fd,0x0000,0x0000,0xd8f8,0x0000,0x0000,0x0000,
-0xf7af,0xdab6,0x0000,0xcad7,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xf2d8,0x0000,
-0xd8f9,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xfadf,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xcfef,
-0xd9c2,0x0000,0xf0d2,0x0000,0xe4d1,0x0000,0x0000,0x0000,
-0xf3b7,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xfae0,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xefec,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xe2b2,0x0000,0xd4bd,0x0000,0x0000,0xd9ce,0x0000,
-0x0000,0x0000,0x0000,0xf4e2,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xd4a9,0x0000,0x0000,0x0000,0x0000,0xcdc2,0xe7da,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xf2d9,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xd9aa,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xd8be,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xdcad,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xe2eb,0xd6fc,0x0000,0x0000,
-0xcaf9,0x0000,0x0000,0xd4da,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xf4d7,0xcca1,0x0000,0x0000,0xcfba,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xf5b8,
-0x0000,0x0000,0x0000,0xd9c3,0xd0e8,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xe3c5,0xebf8,0x0000,0xf2b1,0x0000,0x0000,
-0x0000,0xcfbb,0x0000,0x0000,0x0000,0xd3ad,0xe8e1,0xceec,
-0x0000,0x0000,0x0000,0xe0b4,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-/* 0x7800 */
-0x0000,0x0000,0xdee3,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xddf7,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xf2b2,0xf3f6,0xf6db,
-0x0000,0x0000,0x0000,0x0000,0xd7fe,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xf8df,0x0000,0xf7f2,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xd0a9,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xe6da,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xf5a6,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xd7bc,0xcce3,0x0000,0x0000,0xe6db,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xdddd,0x0000,0x0000,0x0000,
-0x0000,0xd1b3,0x0000,0x0000,0x0000,0x0000,0x0000,0xefed,
-0x0000,0x0000,0x0000,0x0000,0xd6de,0xe4f4,0xe1ef,0x0000,
-0x0000,0xddf8,0x0000,0x0000,0x0000,0x0000,0x0000,0xe8cf,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xcae5,0x0000,0x0000,0x0000,0xdca1,
-0x0000,0xe0b5,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xfcac,0xfcad,0xd8a7,0x0000,0x0000,0x0000,
-0x0000,0xedb8,0x0000,0x0000,0x0000,0xdbb6,0x0000,0x0000,
-0x0000,0x0000,0xd6f0,0xf3af,0x0000,0x0000,0xcda5,0x0000,
-0xdaf1,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xd8a8,0x0000,0x0000,0x0000,0xcce4,0x0000,0x0000,0xd1b4,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xcad8,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xdaf2,0x0000,0x0000,0x0000,0x0000,
-/* 0x7900 */
-0x0000,0xf5a7,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xf5a8,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xe6a6,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xd5ec,0xd5f8,0xdaf3,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xe3c6,0x0000,0x0000,0x0000,0xdee4,0x0000,
-0xdee5,0xd1b5,0x0000,0x0000,0x0000,0x0000,0x0000,0xd1b6,
-0xd1b7,0xf2b3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xe9de,0x0000,0x0000,0x0000,0x0000,0x0000,0xf0d3,0xf2b4,
-0x0000,0x0000,0xf0d4,0xcbe4,0xfbd4,0xf5e6,0xe3ea,0x0000,
-0xdee6,0x0000,0x0000,0x0000,0x0000,0xdfd4,0x0000,0x0000,
-0xf8f9,0x0000,0x0000,0x0000,0x0000,0xf0ae,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xd1b8,0x0000,0x0000,0x0000,0x0000,0xd6df,
-0x0000,0xd0d7,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xfca1,0xefee,0xdcd8,
-0x0000,0xe9df,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xe5dd,0xfdfb,
-0x0000,0x0000,0xe0c9,0x0000,0x0000,0x0000,0xd6c9,0x0000,
-0x0000,0xd4aa,0x0000,0xe5cc,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xe9e0,0x0000,0x0000,0x0000,0xd0d8,0xfca2,0xd4be,
-0xe2b3,0xdee7,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xdcbc,0xd2b6,0xf5d5,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xcea1,0xf5a9,0x0000,0x0000,0xddf9,0x0000,0x0000,
-0xddfa,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xf0d5,
-0x0000,0x0000,0x0000,0x0000,0xf6df,0x0000,0xf2da,0xe4eb,
-0x0000,0xf2f1,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xecb9,0x0000,0x0000,0x0000,0x0000,
-0xfdfc,0x0000,0x0000,0x0000,0x0000,0xe1aa,0x0000,0x0000,
-0xcad9,0x0000,0x0000,0xefef,0x0000,0xf5aa,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xecf9,0x0000,0x0000,0xf8ad,
-0x0000,0xf2c2,0xf6c3,0x0000,0xd7d2,0x0000,0x0000,0xf9a2,
-0xf0d6,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xf0fa,0x0000,
-0x0000,0xf6e0,0x0000,0x0000,0x0000,0x0000,0xe9f3,0xf2c3,
-0x0000,0x0000,0x0000,0xd4ab,0xcab3,0xcda6,0x0000,0xcdc3,
-0xcdda,0x0000,0x0000,0x0000,0x0000,0x0000,0xd9cf,0x0000,
-0x0000,0xf6c4,0x0000,0x0000,0x0000,0xeedd,0xe7c4,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xe2b4,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xdfe2,0xe7db,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xe8b1,0x0000,0xfcae,0x0000,0x0000,0x0000,0x0000,
-0xe5cd,0x0000,0x0000,0x0000,0xfaeb,0x0000,0xcfbc,0x0000,
-0x0000,0xcfe2,0xcdf6,0x0000,0x0000,0xeff0,0x0000,0xf4be,
-0x0000,0xd4cd,0x0000,0x0000,0xf3b8,0x0000,0x0000,0x0000,
-0xe9a1,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xf2f2,0xf3eb,0x0000,0xf0d7,0x0000,0x0000,
-0xcfd7,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xcfdf,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xe8c0,0xe8c1,0x0000,0x0000,0x0000,0xcfe3,0xe9a2,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xd0aa,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xf3c1,0xd0ab,0x0000,0xd4e4,
-0x0000,0x0000,0xefbc,0xd8a1,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xd9df,
-0x0000,0xf3d7,0x0000,0x0000,0x0000,0xdcbd,0x0000,0xcce5,
-0xedf1,0x0000,0x0000,0xf1e2,0x0000,0xd4db,0x0000,0x0000,
-0x0000,0x0000,0xe2b5,0x0000,0x0000,0xcae6,0x0000,0xd3ae,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xcce6,0x0000,
-0x0000,0xf1d3,0xf5e7,0x0000,0x0000,0x0000,0x0000,0xcada,
-/* 0x7b00 */
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xfbee,
-0x0000,0xe1c5,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xdfe9,0x0000,0xeede,0x0000,0x0000,0xf7c2,0x0000,
-0xd8a2,0x0000,0x0000,0x0000,0x0000,0x0000,0xddac,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xf0af,0xd6bd,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xe1ab,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xf9b6,0x0000,
-0x0000,0xd4f5,0x0000,0xd0c9,0xefa7,0xe2ec,0x0000,0xdbea,
-0xcecc,0xf5e8,0xf7d5,0x0000,0xd3cd,0x0000,0xf3fe,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xd0b5,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xe0fe,0x0000,0xdffb,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xe6dd,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xe8a4,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xcbcd,
-0x0000,0x0000,0x0000,0xefa8,0x0000,0x0000,0x0000,0xeeb4,
-0x0000,0x0000,0x0000,0x0000,0xdad8,0xd1b9,0x0000,0xdfa9,
-0x0000,0x0000,0xf3b0,0x0000,0x0000,0xccc4,0x0000,0x0000,
-0x0000,0xceb7,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xefa9,0x0000,0x0000,
-0x0000,0xdfd5,0x0000,0x0000,0xedd7,0x0000,0x0000,0x0000,
-0xeec6,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xefbd,0xfcd6,0x0000,0x0000,0xdbf4,0x0000,0xefaa,0xf8b9,
-0x0000,0xf5e9,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xe3d9,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xe1c6,0x0000,0x0000,0x0000,0xd4bf,0x0000,0x0000,0x0000,
-0x0000,0xdee8,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-/* 0x7c00 */
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xf0ea,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xf3c2,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xd3af,0x0000,
-0x0000,0xcadb,0x0000,0x0000,0x0000,0x0000,0x0000,0xfcd7,
-0x0000,0x0000,0xedd8,0xe1c7,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xf4d8,0xd6b3,0xddad,
-0x0000,0x0000,0x0000,0xd5be,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xf1c3,0xeedf,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xd6eb,0x0000,0x0000,0x0000,0xf4d9,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xd7e6,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xdab7,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xddfb,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xddcf,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xd8a3,0x0000,0x0000,0xdad9,0x0000,0xf0d8,
-0xefc4,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xe1d8,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xf1d4,0x0000,0xedf2,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xd5db,0x0000,
-0x0000,0xd5dc,0xf3c4,0xcbd7,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xe2b6,0x0000,0x0000,0x0000,0x0000,0xeff1,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xfbd5,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xd3d8,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xddd0,0xf0d9,
-0xcbb3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xd5dd,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xcda7,0x0000,0x0000,0xd0ac,0x0000,
-0xd1ba,0x0000,0xf1c4,0x0000,0xe5b3,0xfbf5,0xe9e1,0xfde0,
-0xfcbc,0x0000,0xdaa2,0xdaa3,0x0000,0xd2a1,0x0000,0x0000,
-0xd2ef,0x0000,0x0000,0x0000,0xe2ed,0x0000,0x0000,0xdee9,
-0xcedc,0xf2b5,0xd0e4,0xddd1,0x0000,0x0000,0x0000,0x0000,
-0xe1c8,0xdbb7,0xdfe3,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xedb9,0xf1c5,0x0000,0xf3cf,0xd7ab,
-0xe1ac,0x0000,0x0000,0xe3eb,0x0000,0xeec7,0x0000,0x0000,
-0x0000,0xe1c9,0xcafa,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xf0fb,0xfae1,0xf0da,0xcce7,0xdaf4,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xccbf,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xceed,0x0000,
-0x0000,0xd5a9,0xfae2,0x0000,0x0000,0x0000,0xd0e5,0x0000,
-0xebd6,0x0000,0xecdf,0x0000,0x0000,0x0000,0xdffc,0x0000,
-0x0000,0xf7d6,0xdeea,0xcbb4,0x0000,0x0000,0xefbe,0x0000,
-0x0000,0xccb5,0x0000,0x0000,0x0000,0x0000,0x0000,0xcfbd,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xeff2,0xe2b7,
-0x0000,0x0000,0x0000,0xcce8,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xf0fc,0x0000,0x0000,0x0000,
-0xd6e0,0x0000,0xf1c6,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xe2b8,0xebab,0x0000,0x0000,
-0x0000,0xcbb5,0xd8d1,0x0000,0xf4ce,0xf3f7,0x0000,0x0000,
-0xd7c6,0x0000,0xd1bb,0xf7aa,0x0000,0xedca,0xd7d3,0xd8fa,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xf6c5,
-0x0000,0x0000,0xd1cc,0xddfc,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xdffd,0x0000,
-0xf9e5,0x0000,0xe0ca,0x0000,0x0000,0xf2fd,0xd3b0,0x0000,
-0xf4f3,0xdac9,0x0000,0xe6de,0x0000,0x0000,0x0000,0x0000,
-0xf8ba,0xe8d0,0x0000,0x0000,0xd8fb,0x0000,0x0000,0xead5,
-0x0000,0x0000,0x0000,0x0000,0xd6a3,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xf6c6,0x0000,0x0000,0x0000,0x0000,
-/* 0x7e00 */
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xf2db,0xe4fc,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xe8b2,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xdada,0x0000,0xf2dc,0xfbd6,0xe9b2,
-0x0000,0xeead,0x0000,0xfae3,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xdcee,0x0000,0x0000,0xf5ea,0xe6e0,
-0x0000,0xf0fd,0x0000,0x0000,0x0000,0x0000,0x0000,0xd7ac,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xf5c5,0xeee0,0x0000,
-0x0000,0xdbe5,0x0000,0xddde,0x0000,0x0000,0xd9f0,0xe9a3,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xf1f9,0x0000,0xf2c4,0xe0cb,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xe9a4,0x0000,
-0x0000,0xe2b9,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xe3b1,0xfceb,0xcda8,0x0000,0xccb6,0x0000,0x0000,
-0xf0db,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xe6ba,0x0000,0x0000,0xcda9,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xf3c3,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xe1d9,0x0000,0x0000,0xefab,
-0x0000,0x0000,0x0000,0xe7c5,0x0000,0x0000,0xe0e9,0x0000,
-0xf3c5,0x0000,0x0000,0xd4c0,0xd5bf,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-/* 0x7f00 */
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xddae,0x0000,
-0xf9fc,0x0000,0xccc0,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xe5a2,0x0000,0x0000,0x0000,
-0xceb8,0x0000,0x0000,0x0000,0xd8d2,0xf9d6,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xf1aa,0xced1,0x0000,0x0000,0xf6c7,0x0000,
-0xdbeb,0x0000,0xdffe,0x0000,0x0000,0xd8e1,0x0000,0xf7f3,
-0x0000,0xd7e7,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xd4fe,0x0000,0x0000,
-0xd1bc,0x0000,0xe5cf,0x0000,0xcbb6,0x0000,0xdab8,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xcdc4,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xd6be,0x0000,0x0000,0x0000,0xe2ba,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xcfd8,0x0000,0x0000,0x0000,
-0xe0cc,0xebf9,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xfdfd,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xd7e8,0xcbd8,0x0000,0x0000,0x0000,0xe9e2,0x0000,0x0000,
-0x0000,0xe8ba,0x0000,0x0000,0x0000,0xe3c7,0x0000,0x0000,
-0x0000,0x0000,0xeccd,0x0000,0xecce,0x0000,0xd6bf,0x0000,
-0x0000,0x0000,0xe3a7,0x0000,0xdfd6,0xfde8,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xeee1,
-0xf6a8,0xddfd,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xf8bb,0x0000,0xe8d1,0x0000,0x0000,0x0000,0x0000,
-0xf9d7,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xceee,0x0000,0x0000,0xeccf,0x0000,0x0000,0x0000,
-0xe9a5,0xd6d5,0x0000,0xcdc5,0x0000,0xedba,0xd1bd,0x0000,
-0x0000,0xcfbe,0x0000,0x0000,0xecbb,0x0000,0x0000,0x0000,
-0xd2b1,0x0000,0x0000,0x0000,0x0000,0xcce9,0x0000,0xd9c4,
-0xe9fc,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xd1be,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xecbc,0x0000,0x0000,0xe5ad,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xf7b0,0x0000,0xccea,
-0x0000,0x0000,0x0000,0xd3c4,0x0000,0x0000,0xd6c0,0x0000,
-0x0000,0x0000,0xd6fd,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xe1a1,0x0000,
-0xdebd,0x0000,0xf6a9,0x0000,0x0000,0x0000,0xdaa4,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xd6a4,
-0xf5c6,0x0000,0xe1a2,0xe9c6,0x0000,0x0000,0x0000,0xf2c5,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xf4e9,0xd6ec,0xebd3,
-0x0000,0x0000,0x0000,0x0000,0xecbd,0xe2dc,0xdeeb,0xf0dc,
-0x0000,0xebbf,0x0000,0xd7ce,0xd1bf,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xf5ab,0x0000,
-0x0000,0x0000,0x0000,0xf9fd,0x0000,0xcadc,0x0000,0x0000,
-0x0000,0xcdc6,0xf2b6,0x0000,0x0000,0xddfe,0x0000,0x0000,
-0x0000,0xccb7,0xdbb8,0x0000,0x0000,0x0000,0x0000,0xd0e9,
-0x0000,0xcedd,0xebc0,0x0000,0xfda2,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xf8cb,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xead6,0xf1b0,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xdbce,0x0000,0xf7c3,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xdbcf,0xcba4,0x0000,0x0000,0xf8e0,0x0000,
-0x0000,0xfbd7,0x0000,0x0000,0xebca,0xe0a1,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xcecd,0x0000,0x0000,0xd4dc,0x0000,0x0000,0x0000,
-0xfdd8,0x0000,0x0000,0x0000,0x0000,0xd2f6,0x0000,0x0000,
-/* 0x8100 */
-0x0000,0x0000,0xf2b7,0x0000,0x0000,0xfaf6,0xf6aa,0xfaf7,
-0xd8e6,0x0000,0xf4b1,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xe8d2,0x0000,0xcac5,0xcceb,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xe2ee,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xe2bb,0x0000,0xf7ad,0x0000,0x0000,0x0000,0xf8e1,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xf3ec,0x0000,0x0000,0x0000,0x0000,0xdea1,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xe4fd,0x0000,0x0000,0xe3ec,0x0000,
-0xddaf,0xddb0,0x0000,0x0000,0xcbb7,0xe8d3,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xe1a3,0xd2e0,0x0000,
-0x0000,0x0000,0x0000,0xf0fe,0x0000,0x0000,0x0000,0x0000,
-0xe9a6,0xcbf2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xedf3,0xdcd9,0xe0cd,0x0000,0x0000,0x0000,0x0000,0xf7da,
-0xdbb9,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xccae,0x0000,0xdadb,0x0000,0x0000,0x0000,0x0000,0xcdc7,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xddb1,0x0000,0xd8af,0xe3a3,0x0000,0x0000,
-0xceef,0x0000,0x0000,0xf2f3,0x0000,0x0000,0x0000,0x0000,
-0xf8b3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xe0ce,0x0000,0xf5fd,0x0000,0x0000,
-0x0000,0x0000,0xebec,0x0000,0x0000,0xd3c5,0xfcec,0xd2db,
-0xd4eb,0x0000,0xdea2,0x0000,0x0000,0x0000,0xe5e6,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xf0b0,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xd5c4,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xedf4,
-0x0000,0x0000,0x0000,0xe3ed,0x0000,0xe8c2,0x0000,0xedf5,
-0xd7fc,0x0000,0xedbb,0x0000,0x0000,0xf6ab,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xf2b8,0xf6c8,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xd3e6,0xf2dd,0xcfbf,0x0000,0xebac,0x0000,
-/* 0x8200 */
-0x0000,0x0000,0x0000,0x0000,0x0000,0xcfc0,0x0000,0xe6a8,
-0xfde9,0x0000,0xcfc1,0x0000,0xe0df,0xdeec,0x0000,0x0000,
-0x0000,0x0000,0xe0a2,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xf4bf,0xe2ef,0x0000,0xd9f1,0xf1c7,
-0x0000,0xcbb8,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xf9fe,0xdbba,0xdaf5,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xf6ec,0xdadc,0xfae4,
-0x0000,0xe0cf,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xddb2,0x0000,0x0000,0x0000,0x0000,0xe6a9,0x0000,0xeff3,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xf3ed,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xebfa,0x0000,0xf9e6,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xcadd,0xd5de,
-0x0000,0xcade,0xdfe4,0x0000,0x0000,0x0000,0xe6fd,0x0000,
-0xf5ac,0x0000,0x0000,0x0000,0x0000,0x0000,0xe4f5,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xe9e3,0x0000,0xedcb,0xcfe4,0x0000,
-0x0000,0x0000,0xd8d3,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xddb3,0xd4ec,0x0000,0x0000,0xf2b9,0x0000,0xdfb7,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xcbce,0xfbd8,0x0000,
-0x0000,0xd0d9,0x0000,0x0000,0xddd2,0xf7f4,0xe7dc,0xe4a5,
-0x0000,0xfca3,0x0000,0xdbbb,0x0000,0x0000,0x0000,0xf2ba,
-0xe9fd,0xd0ca,0x0000,0xf5d6,0xd9c5,0xe4b4,0x0000,0xeda7,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xeabd,0xe6fe,0x0000,0xf7c4,0xf5ad,0x0000,0xd9e0,
-0x0000,0x0000,0x0000,0xcab4,0x0000,0x0000,0xf8e2,0xcfc2,
-0x0000,0xecbe,0x0000,0x0000,0x0000,0xe5b4,0xcdc8,0xeec8,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xe7c8,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xcdc9,0xf9b7,0x0000,
-/* 0x8300 */
-0x0000,0xf1e8,0xd9f2,0xdbf5,0xcab5,0xd9c6,0x0000,0x0000,
-0x0000,0xd8c9,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xd9ab,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xedbc,0x0000,0x0000,0xd8d4,0x0000,0x0000,0x0000,0xdcda,
-0x0000,0xe2bc,0x0000,0x0000,0xfced,0xece0,0xd2fe,0x0000,
-0xe9c7,0xe6aa,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xe2f0,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xfabb,
-0x0000,0xf5ae,0xfbaa,0x0000,0x0000,0x0000,0x0000,0xecfb,
-0x0000,0xecbf,0xfcd8,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xd4e5,0x0000,0x0000,0x0000,0xf9c3,
-0x0000,0x0000,0x0000,0xeee2,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xd7e9,0xedf6,0x0000,0x0000,0x0000,0xdeed,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xccec,0x0000,
-0xe3ee,0x0000,0x0000,0x0000,0x0000,0x0000,0xe8d4,0x0000,
-0x0000,0x0000,0xfaf8,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xddb4,0xe4b5,0xd8b0,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xd8d5,0x0000,0x0000,
-0x0000,0xf4ea,0x0000,0x0000,0x0000,0xceb9,0x0000,0x0000,
-0x0000,0xd6e1,0xcfd2,0x0000,0xd0b6,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xcea2,0x0000,0x0000,0xf3ee,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xf3f8,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xdccc,0x0000,0xd0cb,0x0000,0x0000,0x0000,0xfca4,
-0xcdca,0xd7d4,0xdea3,0x0000,0xe4e0,0x0000,0x0000,0x0000,
-0x0000,0xeec9,0x0000,0x0000,0x0000,0xe2dd,0x0000,0x0000,
-/* 0x8400 */
-0x0000,0x0000,0x0000,0xf5fe,0xd4ac,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xd5d1,0x0000,0xd8f0,0xf8c3,0xead7,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xf5d7,0x0000,0x0000,0xd8bf,0x0000,0x0000,0x0000,
-0x0000,0xfdc0,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xebad,0x0000,0x0000,0x0000,0x0000,0xd5aa,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xe7a8,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xeeca,
-0x0000,0x0000,0x0000,0xcae7,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xf8e3,0x0000,0xd4dd,0x0000,0x0000,0xead8,0x0000,
-0x0000,0x0000,0x0000,0xfbd9,0xedf7,0x0000,0x0000,0xe5b5,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xd0ad,0x0000,0x0000,
-0x0000,0x0000,0xf1f1,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xe2bd,0x0000,0x0000,0x0000,0xe3c8,0x0000,0x0000,0x0000,
-0x0000,0xd9d5,0x0000,0x0000,0xdfaa,0x0000,0x0000,0x0000,
-0x0000,0xdbbc,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xf8e4,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xf1fa,0x0000,0x0000,0xe5b6,0xf3ef,0x0000,0x0000,0xfbda,
-0xe1e0,0x0000,0xd9ac,0x0000,0xf5eb,0x0000,0xe0b6,0x0000,
-0x0000,0xe9c8,0x0000,0xcbcf,0x0000,0xe3c9,0x0000,0x0000,
-0x0000,0xdeee,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xe2be,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xdcef,0x0000,0xd6a5,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xe2f1,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xd6fe,0x0000,0x0000,0x0000,
-/* 0x8500 */
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xd9a1,0x0000,0xd8c0,0xdcdb,0x0000,0x0000,0xedbd,
-0xdfb8,0x0000,0xeaa5,0x0000,0x0000,0x0000,0xd7ad,0x0000,
-0x0000,0xf3f9,0x0000,0xedf8,0x0000,0xf5c7,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xe1ca,0xebe3,0x0000,0xf2de,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xf8cc,0x0000,0xead9,
-0x0000,0xd3c6,0x0000,0xdbe6,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xf5af,0x0000,0x0000,0x0000,0x0000,0xcef0,0x0000,
-0x0000,0x0000,0x0000,0xe9fe,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xfbb6,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xe2f2,0x0000,0x0000,0x0000,0x0000,
-0xcff2,0xf7b9,0xd9f3,0x0000,0x0000,0xe1cb,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xdadd,0x0000,0x0000,0xdab9,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xebfb,
-0x0000,0xcbb9,0x0000,0x0000,0xedf9,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xe0e0,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xf4c0,0x0000,
-0xfdbc,0xdfb1,0xe3ef,0x0000,0x0000,0x0000,0x0000,0xe0a3,
-0xfdb9,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xf0b1,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xcdcb,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xedbe,0x0000,0x0000,0x0000,0xd5c0,0xe3f0,0xedfa,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xe9e4,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xd5ed,0xe7dd,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xd4f6,0xe5b7,0x0000,0x0000,
-0x0000,0xdbe7,0xe2bf,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xeecb,
-0x0000,0x0000,0xd7f4,0xf0dd,0x0000,0x0000,0x0000,0xceab,
-/* 0x8600 */
-0x0000,0x0000,0xe7de,0x0000,0x0000,0x0000,0xd6d6,0xe1cc,
-0x0000,0x0000,0xe8b3,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xe5ee,0xdca2,
-0x0000,0x0000,0xe0d0,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xd5b5,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xd5a1,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xfbdb,0x0000,
-0xf9cb,0x0000,0x0000,0x0000,0xcbf3,0xf4a5,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xfac8,0xd6d7,0x0000,0xe9e5,0xfbdc,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xfdd0,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xfbf6,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xdaa5,0x0000,0xdbbd,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xece2,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xcdf7,0xf0de,0x0000,0x0000,0x0000,
-0x0000,0xf6c9,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xdeef,
-0x0000,0x0000,0x0000,0xd3b1,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xfcee,0x0000,0x0000,0x0000,
-0x0000,0xe8c3,0x0000,0xf1c8,0x0000,0x0000,0x0000,0xcef1,
-0x0000,0x0000,0x0000,0x0000,0xf9ed,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xf2f4,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xe4b6,0x0000,
-0xf5b9,0x0000,0xdcf0,0xe3f1,0x0000,0x0000,0x0000,0x0000,
-0xe8a5,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xf2bb,0x0000,0xdea4,0x0000,0xdacc,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xcae9,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xe3da,0x0000,0xfcd9,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xeada,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xf9c4,0x0000,
-0xe3a4,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xfbdd,0x0000,0xefca,0x0000,
-0xe8c4,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xd5cc,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xebd7,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xd9ad,
-0x0000,0x0000,0xfbab,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xd3d9,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xd5a2,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xf6de,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xdaf6,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xe0d1,0x0000,0x0000,0xe9a8,
-0x0000,0x0000,0xf5f9,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xfaaf,0x0000,0xebfc,0x0000,0x0000,0xe0ea,0x0000,
-/* 0x8800 */
-0x0000,0x0000,0x0000,0x0000,0x0000,0xe3b2,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xd5c5,
-0x0000,0x0000,0xf1e3,0xd5ee,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xcdcc,0x0000,0x0000,0x0000,0x0000,0xedd9,0x0000,
-0x0000,0x0000,0x0000,0xd8c1,0x0000,0x0000,0x0000,0x0000,
-0xfaec,0x0000,0x0000,0x0000,0x0000,0x0000,0xf1eb,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xfabc,0xe6e2,0x0000,0x0000,
-0x0000,0x0000,0xfae5,0xe2fa,0x0000,0x0000,0x0000,0xcab6,
-0x0000,0xe4b7,0x0000,0xeadb,0x0000,0xf5fa,0x0000,0x0000,
-0x0000,0xfbac,0xcfc3,0xebfd,0x0000,0x0000,0x0000,0x0000,
-0xf8fa,0x0000,0x0000,0xdfb9,0x0000,0x0000,0x0000,0x0000,
-0xe1f1,0x0000,0xd2a4,0x0000,0x0000,0x0000,0x0000,0xf5fb,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xd0da,0xd0db,
-0x0000,0xeabe,0xd9b1,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xcab7,0x0000,0x0000,0xd3e7,0x0000,0xf8e5,0x0000,0x0000,
-0x0000,0x0000,0xd3b2,0x0000,0x0000,0x0000,0xe2c0,0xf2df,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xcde5,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xf9ac,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xcdcd,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xeeae,0xd6ae,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xd7ea,
-0x0000,0x0000,0x0000,0x0000,0xe7e0,0xebae,0x0000,0x0000,
-0x0000,0xcfd9,0x0000,0x0000,0xdccd,0xedfb,0x0000,0xdef0,
-0x0000,0xd7eb,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xdea5,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xdfd7,0xdbd0,0xdbd1,0x0000,0x0000,
-0xd5a3,0x0000,0x0000,0x0000,0x0000,0xf0b2,0x0000,0x0000,
-/* 0x8900 */
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xdcdc,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xcae8,0x0000,0xf8e6,0xdcce,0x0000,0x0000,0x0000,0x0000,
-0xeadc,0xdbd2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xe9b3,0x0000,0x0000,
-0x0000,0x0000,0xf7db,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xe3a8,0x0000,
-0xd7ae,0x0000,0x0000,0xe0e1,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xcbba,0x0000,0x0000,0xe5d1,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xd0dc,
-0x0000,0x0000,0x0000,0x0000,0xd5c1,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xd8ca,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xe3a9,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xe0a4,
-0x0000,0xe9a9,0x0000,0xd3c7,0x0000,0x0000,0xdcdd,0xf8ae,
-0x0000,0x0000,0x0000,0xccb8,0x0000,0x0000,0x0000,0xd0ae,
-0x0000,0x0000,0x0000,0xd8f2,0x0000,0x0000,0xe3ca,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xccaf,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xd4ad,0xf6d1,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xd0cc,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xcac6,0x0000,0x0000,0xd5c2,0x0000,0x0000,
-0xceba,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xcac7,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xfab0,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xdfd8,0x0000,0x0000,0x0000,
-0xf5ba,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xe5eb,0x0000,0xeff4,0xddb5,0x0000,0x0000,0x0000,0x0000,
-0xcdaa,0x0000,0xe3f2,0x0000,0xfbf7,0x0000,0xf7d0,0x0000,
-0x0000,0x0000,0x0000,0xfdba,0x0000,0x0000,0xfde1,0xf6fe,
-0xd1c0,0x0000,0x0000,0xe8c5,0x0000,0xe4b8,0x0000,0xe1e8,
-0x0000,0x0000,0x0000,0xccc1,0x0000,0xd2ed,0x0000,0x0000,
-0x0000,0x0000,0xdbbe,0x0000,0x0000,0xe0e2,0x0000,0x0000,
-0x0000,0xfac9,0x0000,0x0000,0xe1cd,0x0000,0xcab8,0x0000,
-0x0000,0x0000,0xf2e0,0xf1c9,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xdef1,0x0000,0x0000,0x0000,0xf0df,0xf8c4,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xeecc,0x0000,0x0000,0xdef2,0x0000,
-0xe7c9,0x0000,0xe2f3,0xe7e1,0x0000,0x0000,0xe3cb,0x0000,
-0x0000,0xe3cc,0x0000,0x0000,0x0000,0xcff8,0xefac,0x0000,
-0xfdfe,0xfca5,0xfab1,0xdfd9,0x0000,0xe0d2,0x0000,0x0000,
-0x0000,0xf4da,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xf1ca,0x0000,0xcea3,
-0x0000,0x0000,0x0000,0x0000,0xf2bc,0xece3,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xe0a5,0x0000,0xf7ab,0x0000,0x0000,
-0xebaf,0x0000,0x0000,0x0000,0x0000,0x0000,0xe5de,0x0000,
-0xe1a4,0xcdab,0x0000,0xd9f4,0xe8a6,0xcdce,0xe1e9,0x0000,
-0xfcef,0x0000,0xe0e3,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xe2c1,0x0000,0xcea4,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xdea6,0x0000,0x0000,0xebfe,0x0000,0xebdd,0xf0e0,
-0x0000,0x0000,0xf4db,0x0000,0xe2f4,0x0000,0x0000,0xd3c8,
-0x0000,0x0000,0x0000,0xf4eb,0x0000,0xeeb5,0x0000,0xf5d8,
-0x0000,0x0000,0xd5df,0x0000,0x0000,0x0000,0xd6e5,0x0000,
-0x0000,0x0000,0x0000,0xebb0,0xf4e3,0x0000,0x0000,0x0000,
-0x0000,0xe3cd,0x0000,0x0000,0x0000,0x0000,0xf4f4,0xfab2,
-0x0000,0x0000,0xeff5,0xcadf,0x0000,0xebb1,0xedbf,0x0000,
-0x0000,0xfdc9,0x0000,0x0000,0x0000,0x0000,0xe4a6,0xf9a4,
-0xf0b3,0x0000,0xe5ec,0x0000,0x0000,0x0000,0xd1e7,0x0000,
-0xd9c7,0xe4d7,0xeadd,0x0000,0xd4f7,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xdaba,0x0000,
-0xdacd,0x0000,0x0000,0x0000,0xf9cc,0x0000,0xe1da,0xdbbf,
-0x0000,0xccc5,0xecd0,0xcbbb,0x0000,0xdef3,0x0000,0x0000,
-0xe9aa,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xd9c8,0x0000,0x0000,0xeee3,0xd7bd,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xcfc4,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xd0cd,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xfca6,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xf1fb,0x0000,0x0000,0x0000,0x0000,0xfdd2,0xd1c1,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xe3db,0x0000,0xd3c9,0x0000,0xdccf,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xcced,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xdea7,0x0000,0x0000,0xe6bb,
-0xeca1,0x0000,0x0000,0x0000,0xccb9,0x0000,0x0000,0xfbde,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xe7e2,0x0000,0x0000,
-0xd4c1,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xdca8,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xe2c2,0x0000,0xf3d8,0xe5d3,0x0000,0x0000,0xf3d9,0x0000,
-0x0000,0x0000,0xf3c6,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-/* 0x8c00 */
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xcddb,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xcdac,
-0x0000,0xfcc3,0x0000,0x0000,0x0000,0x0000,0xd4e7,0x0000,
-0xd1c2,0x0000,0xf9a5,0x0000,0xe8d5,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xe3ce,0x0000,0x0000,
-0x0000,0x0000,0xd4ca,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xdfda,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xfbdf,0xe7e3,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xf8fb,0xe3cf,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xf5b0,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xd8e7,0x0000,0xd9c9,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xf8af,0xeff6,0x0000,
-0xddb6,0xeeaf,0xcdf8,0x0000,0x0000,0x0000,0x0000,0xdeb8,
-0xfca7,0xf7fc,0xf7b1,0xcebb,0xf4a1,0x0000,0x0000,0xeecd,
-0xe1ae,0x0000,0x0000,0xecc3,0xcffe,0x0000,0xf8bf,0xd8e2,
-0xd3e8,0x0000,0x0000,0xdea8,0xf4e4,0xecc2,0x0000,0xd9f5,
-0xf9c5,0xddd3,0xd6f1,0xecfc,0xfcf0,0x0000,0x0000,0xedc0,
-0xcab9,0x0000,0xeee4,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xf2e1,0x0000,0xdeb9,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xd6f2,0x0000,0xdef4,0x0000,0xdfdb,0x0000,
-0xdbd3,0x0000,0xfae7,0xd8e3,0xf4c1,0x0000,0xddb7,0x0000,
-0x0000,0x0000,0xf2f5,0x0000,0x0000,0xd4ae,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xd6f3,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xddb8,0xcfc5,0xdfdf,0x0000,0x0000,
-/* 0x8d00 */
-0x0000,0x0000,0x0000,0x0000,0xf2be,0xf6a1,0x0000,0xebcb,
-0xf1fc,0x0000,0xf3c7,0x0000,0x0000,0xe0eb,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xedfc,0x0000,0x0000,0xe1db,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xeee5,0x0000,0xdef5,0x0000,
-0x0000,0x0000,0x0000,0xfad3,0x0000,0x0000,0x0000,0x0000,
-0xf1cb,0x0000,0x0000,0xd0af,0xddb9,0x0000,0x0000,0xd1c3,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xf5b1,0x0000,0x0000,
-0x0000,0x0000,0xeac6,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xf0e1,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xf6ac,0x0000,0x0000,0x0000,0x0000,
-0xf5d9,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xf0eb,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xddba,0x0000,0x0000,0x0000,0xf2bf,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xf7c5,0x0000,
-0x0000,0x0000,0x0000,0xdba2,0xf2f6,0x0000,0x0000,0xcaba,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xf7f5,0x0000,0xcbe5,0x0000,0x0000,
-0x0000,0xeee6,0x0000,0xe0d3,0x0000,0x0000,0x0000,0x0000,
-0xcea5,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xd6d8,
-0x0000,0x0000,0x0000,0xd4af,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-/* 0x8e00 */
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xe9c9,0x0000,0x0000,0x0000,0x0000,0xd3ce,
-0xf4c2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xcbe6,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xf1a1,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xebb2,0x0000,0x0000,0x0000,0x0000,0xf1a2,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xebb3,0x0000,0xf0b4,0x0000,0x0000,0xcbf4,
-0xd4b0,0xf3b2,0xfbb7,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xf5ec,0x0000,0x0000,0x0000,0x0000,0x0000,0xeee7,
-0xf4b2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xf5ed,0x0000,0xcff3,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xf0e2,0x0000,0x0000,0x0000,0x0000,0x0000,0xeece,
-0x0000,0x0000,0xf1cc,0x0000,0x0000,0xe5b8,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xd7f5,0xe3f3,0xcfe5,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xcfc6,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xf3b3,0xe4d8,0xcff9,0xcfda,0x0000,0x0000,
-0x0000,0x0000,0xfacd,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xe6e3,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xf2e2,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xf5ee,0x0000,0x0000,0xcabb,0x0000,0x0000,0xe3dc,0x0000,
-/* 0x8f00 */
-0x0000,0x0000,0x0000,0xcef2,0x0000,0xd6d9,0x0000,0x0000,
-0x0000,0xeeb0,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xf4e5,0xd8c2,0xdcd0,0xccee,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xd5e0,0xf6ca,0xfdca,0xd8d6,0xf4cf,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xd6a6,0xdcbe,
-0x0000,0xdbd4,0xd7c7,0x0000,0x0000,0x0000,0x0000,0xf2fe,
-0x0000,0x0000,0x0000,0xf1cd,0x0000,0x0000,0x0000,0x0000,
-0xe2c3,0xdcde,0x0000,0xdcdf,0x0000,0x0000,0xefad,0xe6ab,
-0x0000,0x0000,0x0000,0x0000,0xf9dd,0xeabf,0x0000,0x0000,
-0x0000,0xefae,0x0000,0x0000,0x0000,0xf4d0,0xcef3,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xe6ac,0x0000,0xcede,
-0x0000,0x0000,0xd5f9,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xe3f4,0xcdd0,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xd5b8,0x0000,0x0000,0xf7fd,0x0000,
-0xdca9,0x0000,0x0000,0x0000,0x0000,0xdef6,0x0000,0xdcaa,
-0xf2e3,0xe9b4,0xd2dc,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xe9e6,0x0000,0x0000,0xe3f6,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xe7ca,0x0000,
-0x0000,0xd0ce,0x0000,0x0000,0xdaf7,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xcabc,0x0000,
-0x0000,0x0000,0xeee8,0xdade,0x0000,0xf2f7,0x0000,0x0000,
-0xe2fb,0x0000,0xcca6,0x0000,0x0000,0x0000,0x0000,0xdabb,
-0x0000,0xeee9,0x0000,0x0000,0x0000,0xf5da,0x0000,0x0000,
-0xf7dc,0xe1ea,0xcec1,0xd4b1,0x0000,0xfdb1,0xe6bd,0x0000,
-0xfbad,0x0000,0x0000,0xf8e7,0x0000,0xe1ce,0x0000,0xf7e2,
-0xf5ef,0xcfc7,0x0000,0x0000,0xd4b2,0xccef,0x0000,0xd4e8,
-0x0000,0xeecf,0xf7d7,0x0000,0x0000,0xe0a6,0xd6c1,0xe1dc,
-0xf0e3,0xf1e4,0xdcf1,0xd6a7,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xf4f5,0x0000,
-0x0000,0xf1ce,0xf2e4,0x0000,0x0000,0xd0b0,0x0000,0x0000,
-0xecef,0x0000,0x0000,0x0000,0xf9ba,0x0000,0xebb5,0x0000,
-0x0000,0xd4ed,0xe2c4,0x0000,0x0000,0x0000,0x0000,0xe9e7,
-0x0000,0x0000,0xebb4,0xeaa1,0x0000,0xf8bc,0xcea6,0x0000,
-0xf9c6,0xfcda,0x0000,0xd4b3,0xd3b9,0xeade,0x0000,0x0000,
-0x0000,0xe9ab,0x0000,0x0000,0xe1e1,0xd3cf,0xf4f6,0x0000,
-0xeac0,0xe1cf,0x0000,0xccba,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xeeea,0x0000,0x0000,0x0000,0xf0e4,0xf3b4,0xd4ee,
-0x0000,0x0000,0xf2c0,0x0000,0x0000,0xf1e5,0x0000,0xf4c3,
-0xe0d4,0x0000,0xebb6,0x0000,0xd7a1,0xcbe8,0x0000,0xf9ad,
-0xe9ad,0xd8e4,0xfab3,0xe2c5,0xfcbd,0x0000,0x0000,0xecc4,
-0xd8b1,0x0000,0xdcab,0x0000,0x0000,0x0000,0x0000,0xd5a4,
-0x0000,0xebe9,0x0000,0x0000,0x0000,0xe8bb,0x0000,0x0000,
-0x0000,0xd8d7,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xfbae,0xd1e1,0x0000,0x0000,0xdbc0,0x0000,
-0xf5be,0x0000,0xdef7,0x0000,0x0000,0x0000,0x0000,0xcafb,
-0xf7c6,0xcfc8,0x0000,0x0000,0x0000,0xe1d0,0x0000,0x0000,
-0xeed0,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xe9f4,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xcef4,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xd5cd,0x0000,
-0x0000,0xcfdb,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xddbb,0x0000,0x0000,0x0000,0x0000,0xceac,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xe9e8,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xd4b4,0x0000,0x0000,
-/* 0x9100 */
-0x0000,0x0000,0xe4c7,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xf5db,0x0000,0x0000,0xfac1,0x0000,0x0000,
-0x0000,0xdea9,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xd4f8,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xeff7,0x0000,0x0000,
-0x0000,0x0000,0xd3b3,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xebb7,0xeff8,0xf5dc,0xedcc,0xdbd5,0xf1cf,0x0000,
-0x0000,0x0000,0xf1d0,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xf5b2,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xd9ae,0xd5ac,0x0000,0xe2c6,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xfda3,0x0000,0xfbe5,
-0xdfab,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xe2f5,
-0x0000,0xf6ad,0x0000,0xf5b3,0x0000,0xf0b5,0x0000,0x0000,
-0x0000,0x0000,0xe1a5,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xf5dd,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xeca2,0xedfd,0x0000,0xf5b4,0xfbb8,
-0x0000,0xdba3,0x0000,0x0000,0xd6ca,0xcbd9,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xe5d4,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xf3fa,
-0x0000,0xebb8,0x0000,0xe0b7,0xd7ec,0xf1ec,0xe5af,0xd5e1,
-0xd7ed,0xd1d1,0x0000,0x0000,0x0000,0x0000,0x0000,0xe1f2,
-0xeff9,0x0000,0x0000,0x0000,0xddbc,0xf6dc,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xf0e5,0x0000,0x0000,0x0000,0xf4c4,
-0x0000,0x0000,0xe9e9,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xf3fb,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-/* 0x9200 */
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xd4ef,0x0000,0x0000,
-0xcca2,0xf7fe,0xdfbc,0x0000,0x0000,0x0000,0x0000,0xebcd,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xd0b7,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xd6c2,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xe8ad,0x0000,0x0000,0x0000,0x0000,0xefaf,
-0xcba5,0x0000,0x0000,0x0000,0x0000,0xcbe9,0x0000,0x0000,
-0x0000,0xfae8,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xccc6,
-0x0000,0x0000,0x0000,0xe6e7,0x0000,0x0000,0xeac7,0x0000,
-0x0000,0x0000,0xdba4,0x0000,0xcfc9,0xe2fc,0xeffa,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xebde,0x0000,0x0000,0xf5c8,0x0000,0xd4de,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xe0d5,0x0000,0xefb0,0x0000,0x0000,0xe2c7,0x0000,
-0xd9af,0x0000,0x0000,0x0000,0xf9e7,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xe7e5,0x0000,0x0000,0xcfca,0xe1d1,
-0x0000,0xe2c8,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xeffb,0x0000,0x0000,0xfaf9,
-0x0000,0x0000,0xdcf2,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xe0a7,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xf8e8,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xcbea,0x0000,0x0000,0x0000,0xcbbc,0x0000,0x0000,0x0000,
-/* 0x9300 */
-0x0000,0x0000,0x0000,0x0000,0xd6e2,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xf5de,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xf5df,0x0000,0xeeb6,0x0000,0x0000,0x0000,0xe2f6,0xd3ca,
-0xeffc,0xd1c4,0xefb1,0x0000,0xd1c5,0x0000,0xd0de,0x0000,
-0xd9e1,0x0000,0x0000,0xe0b8,0x0000,0x0000,0xcdd1,0xf3b9,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xe7cc,0x0000,0xd6a8,0xcea7,0x0000,0xd4b5,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xe4c8,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xd3b4,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xebb9,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xcbf5,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xf6dd,0x0000,0xf1a3,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xccc7,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xe9ca,0x0000,0xe1f0,0x0000,
-0x0000,0x0000,0xf5e0,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xfbaf,0x0000,0x0000,0x0000,0xcbd1,
-0x0000,0x0000,0x0000,0x0000,0xfbe0,0xf2e5,0x0000,0x0000,
-0xecf0,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xf0ec,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xeeeb,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xe9cb,0x0000,
-0x0000,0xccf0,0x0000,0x0000,0xd7af,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xf3a1,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-/* 0x9400 */
-0x0000,0x0000,0x0000,0x0000,0xfcf5,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xf1a4,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xe0d6,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xefb2,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xf4d1,0x0000,0x0000,
-0xf7a1,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xf1d1,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xcafc,0xcafd,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xcece,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xf3c8,0x0000,0xf3ba,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-/* 0x9500 */
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xedfe,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xdaa6,0x0000,0x0000,0xe0ec,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xf8cd,0x0000,0xcbd2,0x0000,0x0000,0x0000,0xebce,
-0x0000,0xf9d8,0xf9d9,0xcae0,0xdaca,0x0000,0x0000,0x0000,
-0xcba6,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xcac8,0xf9ee,0xdbec,0x0000,0x0000,
-0xd0b1,0x0000,0x0000,0x0000,0x0000,0xd5ef,0x0000,0x0000,
-0x0000,0xe6f3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xe7a2,0xe4d9,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xe4e1,
-0x0000,0x0000,0xfcc4,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xf9ef,0xcff4,0xf7e6,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xcebc,0x0000,0x0000,0x0000,
-0x0000,0xf4c5,0xdca3,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-/* 0x9600 */
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xddbd,0x0000,0x0000,0x0000,
-0x0000,0xf4c6,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xf8a1,0x0000,0x0000,0x0000,0xe8d6,0x0000,
-0x0000,0x0000,0xdbc1,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xf0e6,0x0000,0x0000,0x0000,0xe4b9,
-0xf6ed,0x0000,0xf9ae,0x0000,0xddbe,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xd7b0,0xd8e8,0xcbbd,0x0000,0x0000,
-0xf9da,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xf8ce,0xf9f0,0xe0ed,0xe3b3,0xf4b3,
-0x0000,0x0000,0xeac2,0xf2e6,0xf0b6,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xdbd6,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xebe4,0x0000,0x0000,0xf2e7,0x0000,0xd7d5,0xd4b6,0xf9e8,
-0xd7c1,0x0000,0x0000,0x0000,0x0000,0xe5d5,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xe9ea,0xd7cc,0x0000,
-0x0000,0x0000,0xd3e9,0xe2c9,0x0000,0xfcdb,0xcdad,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xccb0,0xeaa2,0x0000,0x0000,
-0xe4f6,0xd0c0,0x0000,0xf0b7,0xeea1,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xd7f6,0x0000,0x0000,0x0000,0xe2ca,
-0xe2cb,0x0000,0xfacf,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xebdf,0x0000,0x0000,0x0000,0x0000,0x0000,0xd6cb,
-0x0000,0x0000,0x0000,0xf4b4,0x0000,0x0000,0x0000,0x0000,
-0xedcd,0xe4d2,0x0000,0x0000,0xeaa9,0xe4ba,0xf3a2,0xcdd2,
-0x0000,0xf6cb,0x0000,0xf1e6,0xedc1,0xe8bc,0xeed1,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xf0e7,0xe2cc,0x0000,
-0x0000,0xe4aa,0x0000,0xf5e1,0xedda,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xd7ee,0xd1f1,0x0000,0x0000,0x0000,0x0000,
-0xe9eb,0xe9ec,0xe0e4,0x0000,0x0000,0x0000,0x0000,0xdaa7,
-0xddd4,0x0000,0xeaa3,0x0000,0x0000,0x0000,0xd6c3,0xd6f4,
-0x0000,0xdadf,0x0000,0xefb3,0x0000,0x0000,0x0000,0x0000,
-0xe2cd,0x0000,0x0000,0x0000,0x0000,0x0000,0xeffd,0xf2e8,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xefc5,0x0000,0xe7e7,0x0000,0x0000,0xd7fd,0x0000,
-0x0000,0xe7ce,0x0000,0x0000,0xdfdc,0x0000,0xf9c7,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xd9f6,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xdfac,0x0000,0xd6da,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xdca4,0x0000,0x0000,0x0000,0xf0b8,0x0000,0x0000,
-0x0000,0x0000,0xd5fa,0x0000,0xe4f7,0x0000,0x0000,0x0000,
-0xd6c4,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xf4ec,0x0000,0x0000,0x0000,0x0000,0xeffe,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xf0a1,0x0000,0xdeaa,0x0000,
-0x0000,0xdabc,0xd8fc,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xfad4,0x0000,0x0000,0x0000,0xece5,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xfca8,0x0000,0x0000,0xece6,
-0x0000,0x0000,0xd8cb,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xfbb9,0x0000,0xe4d3,0x0000,0xcdf9,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xcfd3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xcaea,0x0000,0x0000,0xcfd4,0x0000,0xf8bd,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xf4c7,0x0000,
-0x0000,0x0000,0x0000,0xeadf,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xf9db,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xd4b7,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xebe5,0x0000,0x0000,0xe1d2,0x0000,
-0x0000,0x0000,0x0000,0xeaa4,0x0000,0x0000,0x0000,0xfac2,
-0xfbe1,0xfaed,0xf0a2,0xccf1,0x0000,0xfaa3,0xe2f7,0x0000,
-0xe2ce,0x0000,0xe9f5,0x0000,0xe1eb,0x0000,0x0000,0x0000,
-0xe7e8,0xe8d7,0xdaf8,0xd4cb,0x0000,0x0000,0x0000,0xf7f6,
-0xd6c5,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xd4e9,0x0000,0x0000,
-0xfafa,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xccf2,0xf7dd,0x0000,0xdeba,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xcea8,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xf0b9,0xe4fe,0xe4c9,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xe4d4,0x0000,0x0000,0x0000,
-0xeac3,0x0000,0xefb4,0x0000,0x0000,0x0000,0xd7be,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xfbe2,0x0000,0xcdd3,
-0x0000,0x0000,0x0000,0xefb5,0x0000,0x0000,0x0000,0xfae9,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xf9a6,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xdfbd,
-0x0000,0xf7c7,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xf8fd,0x0000,0x0000,0xf8fc,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xdeab,0xdbe8,0x0000,0x0000,0xe3dd,
-0x0000,0xe1e2,0xd1c6,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xf6d0,0xebe6,0xdaf9,
-0x0000,0x0000,0x0000,0x0000,0xecc7,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xdef8,0xf8e9,0xe3de,0x0000,
-/* 0x9900 */
-0x0000,0x0000,0x0000,0xcef5,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xfac3,0xe5d7,0x0000,0xecc8,0x0000,0x0000,0x0000,
-0xf3c9,0x0000,0x0000,0xe4bb,0x0000,0x0000,0x0000,0x0000,
-0xe6ae,0x0000,0x0000,0x0000,0x0000,0x0000,0xefb6,0x0000,
-0xdcbf,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xcebd,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xd8c3,0x0000,0x0000,
-0x0000,0xd0cf,0x0000,0xcffa,0xf3ca,0xe0d7,0x0000,0x0000,
-0x0000,0xd1c7,0xe9ae,0x0000,0xe8bd,0x0000,0x0000,0xfac4,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xe2cf,0x0000,
-0x0000,0xfac5,0x0000,0x0000,0x0000,0xf9b8,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xdce0,0x0000,0x0000,
-0xfbb0,0x0000,0x0000,0x0000,0xd8a9,0xe5df,0xf9a7,0x0000,
-0x0000,0xf6ee,0x0000,0xf6cc,0xe2f8,0x0000,0x0000,0x0000,
-0x0000,0xecf1,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xdae0,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xf1d2,0xd2cc,0xcfcb,0x0000,0x0000,0xcabd,0x0000,0x0000,
-0x0000,0xddbf,0x0000,0x0000,0x0000,0xf6ef,0x0000,0xdef9,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xfab4,0x0000,0x0000,
-0x0000,0xd5ad,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xf1e7,
-/* 0x9a00 */
-0x0000,0xdebe,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xdcc0,0x0000,0x0000,0x0000,0x0000,0x0000,0xd1c8,0xd1c9,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xf8be,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xcbf6,0x0000,0x0000,0x0000,0x0000,
-0xd4f9,0x0000,0x0000,0x0000,0x0000,0x0000,0xf5e2,0xe1d3,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xd8e9,0x0000,0x0000,0xf8fe,0x0000,0xcfcc,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xfda4,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xcef6,0x0000,0xfad0,
-0x0000,0x0000,0xccf3,0xe6be,0x0000,0x0000,0x0000,0xf6ae,
-0x0000,0x0000,0xd5f0,0x0000,0x0000,0xd1ca,0x0000,0x0000,
-0x0000,0xfcbe,0xd5f1,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xcde9,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xfab5,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xe2d0,0xf4f7,0x0000,0x0000,0x0000,
-0xcdd4,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xe7a3,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xdba5,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-/* 0x9b00 */
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xe2d1,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xd7a2,
-0x0000,0x0000,0xf7e3,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xeaa6,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xd0a1,0x0000,0x0000,0x0000,
-0x0000,0xceda,0xfbeb,0xdba6,0xdbde,0xd8e5,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xeae0,
-0x0000,0x0000,0x0000,0x0000,0xd8aa,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xe5e0,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xd6db,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xefc6,0x0000,
-0x0000,0xf8ea,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xe4d5,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xcef7,0x0000,0x0000,0xe0d8,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xd7ef,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xf4ed,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xcde6,0x0000,0x0000,0x0000,
-0xccf4,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-/* 0x9c00 */
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xf5e3,0x0000,0x0000,
-0xe4ca,0x0000,0xdce1,0x0000,0x0000,0xf9c8,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xfcbf,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xe8a7,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xd8c4,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xcbbe,
-0x0000,0xdcae,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xd7f7,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xf0e8,0x0000,0xddc0,
-0x0000,0xcfcd,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xdcf3,0xd9b0,0x0000,0xe6e9,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-/* 0x9d00 */
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xe4bc,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xeac4,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xe4ec,0x0000,
-0xe4e5,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xfbf8,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xccbb,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xe4bd,0x0000,0x0000,
-0xcddc,0xd9f7,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xdddf,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xedce,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0xd9d0,0x0000,0x0000,0x0000,0x0000,0x0000,0xe5a3,
-0x0000,0x0000,0x0000,0x0000,0xf9cd,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xcdae,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xcfce,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xf6af,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xfdd3,0xebed,0xd6dc,0x0000,0x0000,0x0000,0x0000,0x0000,
-/* 0x9e00 */
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xe5a4,0x0000,0x0000,0x0000,0xd5b6,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xd6dd,0x0000,0x0000,
-0x0000,0xf9e9,0x0000,0x0000,0x0000,0xe7a4,0x0000,0xd6e3,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xd1cb,0xd6e4,0x0000,0x0000,0x0000,0xd5f2,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xdefa,0x0000,0xd7f8,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xd8ea,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xcfd5,0xd8fd,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xd8ab,0x0000,0x0000,0xfdcb,0x0000,
-0x0000,0x0000,0x0000,0xfcdc,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xe0a8,0xd5f3,0x0000,
-0x0000,0xfdd9,0x0000,0x0000,0xcca3,0x0000,0x0000,0x0000,
-0xd9f9,0x0000,0x0000,0xd3ea,0xf5f5,0x0000,0xefc7,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xd3da,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xdabd,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-/* 0x9f00 */
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xe8a8,
-0xdcaf,0x0000,0x0000,0x0000,0x0000,0x0000,0xf0a3,0x0000,
-0x0000,0x0000,0x0000,0xcdd5,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xe0a9,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0xdeac,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0xf0ba,0xeeb1,0x0000,0x0000,0xeeb2,0x0000,
-0x0000,0x0000,0xf6cd,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xeed2,
-0x0000,0xd6c6,0x0000,0x0000,0x0000,0x0000,0x0000,0xe0e5,
-0x0000,0x0000,0xf3bb,0x0000,0xe5e1,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xe4cb,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0xd7a3,0x0000,0x0000,
-0xdbc2,0x0000,0x0000,0x0000,0x0000,0xcafe,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0xcfcf};
-
-static const int ucs_i_uhc_table_min = 0x4d00;
-static const int ucs_i_uhc_table_max = 0x4d00 + (sizeof(ucs_i_uhc_table)/sizeof(unsigned short));
-
-static const unsigned short ucs_s_uhc_table[] = {
-/* 0xab00 */
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xb0a1,0xb0a2,0x8141,0x8142,0xb0a3,0x8143,0x8144,0xb0a4,
-0xb0a5,0xb0a6,0xb0a7,0x8145,0x8146,0x8147,0x8148,0x8149,
-0xb0a8,0xb0a9,0xb0aa,0xb0ab,0xb0ac,0xb0ad,0xb0ae,0xb0af,
-0x814a,0xb0b0,0xb0b1,0xb0b2,0xb0b3,0xb0b4,0x814b,0x814c,
-0xb0b5,0x814d,0x814e,0x814f,0xb0b6,0x8150,0x8151,0x8152,
-0x8153,0x8154,0x8155,0x8156,0xb0b7,0xb0b8,0x8157,0xb0b9,
-0xb0ba,0xb0bb,0x8158,0x8159,0x815a,0x8161,0x8162,0x8163,
-0xb0bc,0xb0bd,0x8164,0x8165,0xb0be,0x8166,0x8167,0x8168,
-0xb0bf,0x8169,0x816a,0x816b,0x816c,0x816d,0x816e,0x816f,
-0x8170,0x8171,0x8172,0xb0c0,0x8173,0xb0c1,0x8174,0x8175,
-0x8176,0x8177,0x8178,0x8179,0xb0c2,0x817a,0x8181,0x8182,
-0xb0c3,0x8183,0x8184,0x8185,0xb0c4,0x8186,0x8187,0x8188,
-0x8189,0x818a,0x818b,0x818c,0x818d,0x818e,0x818f,0x8190,
-0x8191,0x8192,0x8193,0x8194,0x8195,0x8196,0x8197,0x8198,
-0xb0c5,0xb0c6,0x8199,0x819a,0xb0c7,0x819b,0x819c,0xb0c8,
-0xb0c9,0x819d,0xb0ca,0x819e,0x819f,0x81a0,0x81a1,0x81a2,
-0xb0cb,0xb0cc,0x81a3,0xb0cd,0xb0ce,0xb0cf,0xb0d0,0x81a4,
-0x81a5,0xb0d1,0xb0d2,0xb0d3,0xb0d4,0x81a6,0x81a7,0x81a8,
-0xb0d5,0x81a9,0x81aa,0x81ab,0xb0d6,0x81ac,0x81ad,0x81ae,
-0x81af,0x81b0,0x81b1,0x81b2,0xb0d7,0xb0d8,0x81b3,0xb0d9,
-0xb0da,0xb0db,0x81b4,0x81b5,0x81b6,0x81b7,0x81b8,0x81b9,
-0xb0dc,0xb0dd,0xb0de,0x81ba,0xb0df,0x81bb,0x81bc,0xb0e0,
-0xb0e1,0x81bd,0x81be,0x81bf,0x81c0,0x81c1,0x81c2,0x81c3,
-0xb0e2,0xb0e3,0x81c4,0xb0e4,0xb0e5,0xb0e6,0x81c5,0x81c6,
-0x81c7,0xb0e7,0x81c8,0x81c9,0xb0e8,0x81ca,0x81cb,0x81cc,
-0xb0e9,0x81cd,0x81ce,0x81cf,0xb0ea,0x81d0,0x81d1,0x81d2,
-0x81d3,0x81d4,0x81d5,0x81d6,0x81d7,0xb0eb,0x81d8,0xb0ec,
-0x81d9,0x81da,0x81db,0x81dc,0x81dd,0x81de,0x81df,0x81e0,
-0xb0ed,0xb0ee,0x81e1,0x81e2,0xb0ef,0x81e3,0x81e4,0xb0f0,
-0xb0f1,0x81e5,0xb0f2,0x81e6,0xb0f3,0x81e7,0x81e8,0xb0f4,
-0xb0f5,0xb0f6,0x81e9,0xb0f7,0x81ea,0xb0f8,0xb0f9,0x81eb,
-0x81ec,0x81ed,0x81ee,0x81ef,0xb0fa,0xb0fb,0x81f0,0x81f1,
-/* 0xad00 */
-0xb0fc,0x81f2,0x81f3,0x81f4,0xb0fd,0x81f5,0xb0fe,0x81f6,
-0x81f7,0x81f8,0x81f9,0x81fa,0xb1a1,0xb1a2,0x81fb,0xb1a3,
-0x81fc,0xb1a4,0x81fd,0x81fe,0x8241,0x8242,0x8243,0x8244,
-0xb1a5,0x8245,0x8246,0x8247,0xb1a6,0x8248,0x8249,0x824a,
-0xb1a7,0x824b,0x824c,0x824d,0x824e,0x824f,0x8250,0x8251,
-0x8252,0xb1a8,0x8253,0x8254,0xb1a9,0xb1aa,0x8255,0x8256,
-0x8257,0x8258,0x8259,0x825a,0xb1ab,0xb1ac,0x8261,0x8262,
-0xb1ad,0x8263,0x8264,0x8265,0xb1ae,0x8266,0x8267,0x8268,
-0x8269,0x826a,0x826b,0x826c,0xb1af,0xb1b0,0x826d,0xb1b1,
-0x826e,0xb1b2,0x826f,0x8270,0x8271,0x8272,0x8273,0x8274,
-0xb1b3,0x8275,0x8276,0x8277,0xb1b4,0x8278,0x8279,0x827a,
-0xb1b5,0x8281,0x8282,0x8283,0x8284,0x8285,0x8286,0x8287,
-0x8288,0xb1b6,0x8289,0xb1b7,0x828a,0x828b,0x828c,0x828d,
-0x828e,0x828f,0x8290,0x8291,0xb1b8,0xb1b9,0x8292,0x8293,
-0xb1ba,0x8294,0x8295,0xb1bb,0xb1bc,0xb1bd,0xb1be,0x8296,
-0x8297,0x8298,0x8299,0xb1bf,0xb1c0,0xb1c1,0x829a,0xb1c2,
-0x829b,0xb1c3,0xb1c4,0x829c,0x829d,0x829e,0x829f,0x82a0,
-0xb1c5,0xb1c6,0x82a1,0x82a2,0xb1c7,0x82a3,0x82a4,0x82a5,
-0xb1c8,0x82a6,0x82a7,0x82a8,0x82a9,0x82aa,0x82ab,0x82ac,
-0x82ad,0x82ae,0x82af,0x82b0,0xb1c9,0xb1ca,0x82b1,0x82b2,
-0x82b3,0x82b4,0x82b5,0x82b6,0xb1cb,0x82b7,0x82b8,0x82b9,
-0x82ba,0x82bb,0x82bc,0x82bd,0x82be,0x82bf,0x82c0,0x82c1,
-0x82c2,0x82c3,0x82c4,0x82c5,0x82c6,0x82c7,0x82c8,0xb1cc,
-0x82c9,0x82ca,0x82cb,0x82cc,0x82cd,0x82ce,0x82cf,0x82d0,
-0xb1cd,0xb1ce,0x82d1,0x82d2,0xb1cf,0x82d3,0x82d4,0x82d5,
-0xb1d0,0x82d6,0x82d7,0x82d8,0x82d9,0x82da,0x82db,0x82dc,
-0xb1d1,0xb1d2,0x82dd,0xb1d3,0x82de,0x82df,0x82e0,0x82e1,
-0x82e2,0x82e3,0x82e4,0x82e5,0xb1d4,0x82e6,0x82e7,0x82e8,
-0xb1d5,0x82e9,0x82ea,0x82eb,0xb1d6,0x82ec,0x82ed,0x82ee,
-0x82ef,0x82f0,0x82f1,0x82f2,0x82f3,0x82f4,0x82f5,0x82f6,
-0x82f7,0x82f8,0x82f9,0x82fa,0x82fb,0x82fc,0x82fd,0x82fe,
-0xb1d7,0xb1d8,0x8341,0x8342,0xb1d9,0x8343,0x8344,0xb1da,
-/* 0xae00 */
-0xb1db,0xb1dc,0x8345,0x8346,0x8347,0x8348,0x8349,0x834a,
-0xb1dd,0xb1de,0x834b,0xb1df,0x834c,0xb1e0,0x834d,0x834e,
-0x834f,0x8350,0x8351,0x8352,0xb1e1,0x8353,0x8354,0x8355,
-0x8356,0x8357,0x8358,0x8359,0x835a,0x8361,0x8362,0x8363,
-0x8364,0x8365,0x8366,0x8367,0x8368,0x8369,0x836a,0x836b,
-0x836c,0x836d,0x836e,0x836f,0x8370,0x8371,0x8372,0x8373,
-0xb1e2,0xb1e3,0x8374,0x8375,0xb1e4,0x8376,0x8377,0xb1e5,
-0xb1e6,0x8378,0xb1e7,0x8379,0x837a,0x8381,0x8382,0x8383,
-0xb1e8,0xb1e9,0x8384,0xb1ea,0x8385,0xb1eb,0xb1ec,0x8386,
-0x8387,0x8388,0xb1ed,0x8389,0xb1ee,0xb1ef,0xb1f0,0x838a,
-0xb1f1,0x838b,0x838c,0x838d,0xb1f2,0x838e,0xb1f3,0x838f,
-0x8390,0x8391,0x8392,0x8393,0xb1f4,0xb1f5,0x8394,0xb1f6,
-0xb1f7,0xb1f8,0x8395,0x8396,0x8397,0xb1f9,0x8398,0x8399,
-0xb1fa,0xb1fb,0x839a,0x839b,0xb1fc,0x839c,0x839d,0x839e,
-0xb1fd,0x839f,0x83a0,0x83a1,0x83a2,0x83a3,0x83a4,0x83a5,
-0xb1fe,0xb2a1,0x83a6,0xb2a2,0xb2a3,0xb2a4,0x83a7,0x83a8,
-0x83a9,0x83aa,0x83ab,0x83ac,0xb2a5,0xb2a6,0x83ad,0x83ae,
-0x83af,0x83b0,0x83b1,0x83b2,0xb2a7,0x83b3,0x83b4,0x83b5,
-0x83b6,0x83b7,0x83b8,0x83b9,0x83ba,0x83bb,0x83bc,0x83bd,
-0x83be,0x83bf,0x83c0,0x83c1,0x83c2,0x83c3,0x83c4,0x83c5,
-0x83c6,0x83c7,0x83c8,0x83c9,0x83ca,0x83cb,0x83cc,0x83cd,
-0x83ce,0x83cf,0x83d0,0x83d1,0x83d2,0x83d3,0x83d4,0x83d5,
-0x83d6,0x83d7,0x83d8,0x83d9,0x83da,0x83db,0x83dc,0x83dd,
-0x83de,0x83df,0x83e0,0x83e1,0xb2a8,0xb2a9,0xb2aa,0x83e2,
-0xb2ab,0x83e3,0x83e4,0x83e5,0xb2ac,0x83e6,0x83e7,0x83e8,
-0x83e9,0x83ea,0x83eb,0x83ec,0xb2ad,0xb2ae,0x83ed,0xb2af,
-0xb2b0,0xb2b1,0x83ee,0x83ef,0x83f0,0x83f1,0x83f2,0x83f3,
-0xb2b2,0xb2b3,0x83f4,0x83f5,0xb2b4,0x83f6,0x83f7,0x83f8,
-0x83f9,0x83fa,0x83fb,0x83fc,0x83fd,0x83fe,0x8441,0x8442,
-0xb2b5,0x8443,0x8444,0xb2b6,0x8445,0xb2b7,0x8446,0x8447,
-0x8448,0x8449,0x844a,0x844b,0xb2b8,0x844c,0x844d,0x844e,
-0xb2b9,0x844f,0x8450,0x8451,0xb2ba,0x8452,0x8453,0x8454,
-/* 0xaf00 */
-0x8455,0x8456,0x8457,0x8458,0x8459,0x845a,0x8461,0xb2bb,
-0xb2bc,0x8462,0x8463,0x8464,0x8465,0xb2bd,0x8466,0x8467,
-0xb2be,0x8468,0x8469,0x846a,0x846b,0x846c,0x846d,0x846e,
-0x846f,0x8470,0x8471,0x8472,0x8473,0x8474,0x8475,0x8476,
-0x8477,0x8478,0x8479,0x847a,0x8481,0x8482,0x8483,0x8484,
-0x8485,0x8486,0x8487,0x8488,0xb2bf,0xb2c0,0x8489,0x848a,
-0xb2c1,0x848b,0xb2c2,0x848c,0xb2c3,0x848d,0x848e,0x848f,
-0x8490,0x8491,0x8492,0x8493,0xb2c4,0xb2c5,0x8494,0xb2c6,
-0x8495,0xb2c7,0xb2c8,0xb2c9,0x8496,0x8497,0x8498,0x8499,
-0xb2ca,0xb2cb,0x849a,0x849b,0x849c,0x849d,0x849e,0x849f,
-0xb2cc,0x84a0,0x84a1,0x84a2,0x84a3,0x84a4,0x84a5,0x84a6,
-0x84a7,0x84a8,0x84a9,0x84aa,0xb2cd,0xb2ce,0x84ab,0x84ac,
-0x84ad,0x84ae,0x84af,0x84b0,0xb2cf,0xb2d0,0x84b1,0x84b2,
-0x84b3,0x84b4,0x84b5,0x84b6,0x84b7,0x84b8,0x84b9,0x84ba,
-0x84bb,0x84bc,0x84bd,0x84be,0x84bf,0x84c0,0x84c1,0x84c2,
-0x84c3,0xb2d1,0x84c4,0x84c5,0x84c6,0x84c7,0x84c8,0x84c9,
-0xb2d2,0x84ca,0x84cb,0x84cc,0xb2d3,0x84cd,0x84ce,0x84cf,
-0xb2d4,0x84d0,0x84d1,0x84d2,0x84d3,0x84d4,0x84d5,0x84d6,
-0xb2d5,0xb2d6,0x84d7,0x84d8,0x84d9,0xb2d7,0x84da,0x84db,
-0x84dc,0x84dd,0x84de,0x84df,0xb2d8,0x84e0,0x84e1,0x84e2,
-0x84e3,0x84e4,0x84e5,0x84e6,0x84e7,0x84e8,0x84e9,0x84ea,
-0x84eb,0x84ec,0x84ed,0x84ee,0x84ef,0x84f0,0x84f1,0x84f2,
-0x84f3,0x84f4,0x84f5,0x84f6,0x84f7,0x84f8,0x84f9,0x84fa,
-0xb2d9,0xb2da,0x84fb,0x84fc,0xb2db,0x84fd,0x84fe,0x8541,
-0xb2dc,0x8542,0x8543,0x8544,0x8545,0x8546,0x8547,0xb2dd,
-0xb2de,0xb2df,0x8548,0xb2e0,0x8549,0xb2e1,0xb2e2,0x854a,
-0x854b,0x854c,0x854d,0x854e,0xb2e3,0x854f,0x8550,0x8551,
-0x8552,0x8553,0x8554,0x8555,0xb2e4,0x8556,0x8557,0x8558,
-0x8559,0x855a,0x8561,0x8562,0x8563,0x8564,0x8565,0x8566,
-0xb2e5,0xb2e6,0x8567,0x8568,0x8569,0x856a,0x856b,0x856c,
-0xb2e7,0xb2e8,0x856d,0x856e,0xb2e9,0x856f,0x8570,0x8571,
-0xb2ea,0x8572,0x8573,0x8574,0x8575,0x8576,0x8577,0x8578,
-/* 0xb000 */
-0xb2eb,0xb2ec,0x8579,0x857a,0xb2ed,0x8581,0x8582,0x8583,
-0x8584,0x8585,0x8586,0x8587,0xb2ee,0x8588,0x8589,0x858a,
-0xb2ef,0x858b,0x858c,0x858d,0xb2f0,0x858e,0x858f,0x8590,
-0x8591,0x8592,0x8593,0x8594,0xb2f1,0xb2f2,0x8595,0x8596,
-0x8597,0x8598,0x8599,0x859a,0x859b,0x859c,0x859d,0x859e,
-0xb2f3,0x859f,0x85a0,0x85a1,0x85a2,0x85a3,0x85a4,0x85a5,
-0x85a6,0x85a7,0x85a8,0x85a9,0x85aa,0x85ab,0x85ac,0x85ad,
-0x85ae,0x85af,0x85b0,0x85b1,0x85b2,0x85b3,0x85b4,0x85b5,
-0x85b6,0x85b7,0x85b8,0x85b9,0xb2f4,0xb2f5,0x85ba,0x85bb,
-0xb2f6,0x85bc,0xb2f7,0x85bd,0xb2f8,0x85be,0xb2f9,0x85bf,
-0x85c0,0x85c1,0x85c2,0xb2fa,0xb2fb,0xb2fc,0x85c3,0xb2fd,
-0x85c4,0xb2fe,0x85c5,0x85c6,0x85c7,0xb3a1,0x85c8,0x85c9,
-0x85ca,0x85cb,0x85cc,0x85cd,0x85ce,0x85cf,0x85d0,0x85d1,
-0x85d2,0x85d3,0x85d4,0x85d5,0x85d6,0x85d7,0x85d8,0x85d9,
-0x85da,0x85db,0x85dc,0x85dd,0x85de,0x85df,0x85e0,0x85e1,
-0x85e2,0x85e3,0x85e4,0x85e5,0xb3a2,0xb3a3,0x85e6,0x85e7,
-0xb3a4,0x85e8,0x85e9,0x85ea,0xb3a5,0x85eb,0x85ec,0x85ed,
-0x85ee,0x85ef,0x85f0,0x85f1,0xb3a6,0xb3a7,0x85f2,0xb3a8,
-0x85f3,0xb3a9,0x85f4,0x85f5,0x85f6,0x85f7,0x85f8,0x85f9,
-0xb3aa,0xb3ab,0xb3ac,0x85fa,0xb3ad,0x85fb,0x85fc,0xb3ae,
-0xb3af,0xb3b0,0xb3b1,0x85fd,0x85fe,0x8641,0x8642,0x8643,
-0xb3b2,0xb3b3,0x8644,0xb3b4,0xb3b5,0xb3b6,0xb3b7,0xb3b8,
-0x8645,0xb3b9,0x8646,0xb3ba,0xb3bb,0xb3bc,0x8647,0x8648,
-0xb3bd,0x8649,0x864a,0x864b,0xb3be,0x864c,0x864d,0x864e,
-0x864f,0x8650,0x8651,0x8652,0xb3bf,0xb3c0,0x8653,0xb3c1,
-0xb3c2,0xb3c3,0x8654,0x8655,0x8656,0x8657,0x8658,0x8659,
-0xb3c4,0xb3c5,0x865a,0x8661,0xb3c6,0x8662,0x8663,0x8664,
-0xb3c7,0x8665,0x8666,0x8667,0x8668,0x8669,0x866a,0x866b,
-0xb3c8,0x866c,0x866d,0x866e,0x866f,0xb3c9,0x8670,0x8671,
-0x8672,0x8673,0x8674,0x8675,0x8676,0x8677,0x8678,0x8679,
-0x867a,0x8681,0x8682,0x8683,0x8684,0x8685,0x8686,0x8687,
-0x8688,0x8689,0x868a,0x868b,0x868c,0x868d,0x868e,0x868f,
-/* 0xb100 */
-0x8690,0x8691,0x8692,0x8693,0x8694,0x8695,0x8696,0x8697,
-0xb3ca,0xb3cb,0x8698,0xb3cc,0xb3cd,0x8699,0x869a,0x869b,
-0xb3ce,0x869c,0xb3cf,0xb3d0,0x869d,0x869e,0x869f,0x86a0,
-0xb3d1,0xb3d2,0x86a1,0xb3d3,0xb3d4,0xb3d5,0x86a2,0x86a3,
-0x86a4,0x86a5,0x86a6,0xb3d6,0xb3d7,0xb3d8,0x86a7,0x86a8,
-0xb3d9,0x86a9,0x86aa,0x86ab,0xb3da,0x86ac,0x86ad,0x86ae,
-0x86af,0x86b0,0x86b1,0x86b2,0xb3db,0xb3dc,0x86b3,0xb3dd,
-0xb3de,0xb3df,0x86b4,0x86b5,0x86b6,0x86b7,0x86b8,0x86b9,
-0xb3e0,0xb3e1,0x86ba,0x86bb,0xb3e2,0x86bc,0x86bd,0x86be,
-0xb3e3,0x86bf,0x86c0,0x86c1,0x86c2,0x86c3,0x86c4,0x86c5,
-0xb3e4,0xb3e5,0x86c6,0x86c7,0xb3e6,0xb3e7,0x86c8,0x86c9,
-0xb3e8,0x86ca,0x86cb,0x86cc,0xb3e9,0x86cd,0x86ce,0x86cf,
-0xb3ea,0x86d0,0x86d1,0x86d2,0x86d3,0x86d4,0x86d5,0x86d6,
-0x86d7,0x86d8,0x86d9,0x86da,0x86db,0x86dc,0x86dd,0x86de,
-0x86df,0x86e0,0x86e1,0x86e2,0x86e3,0x86e4,0x86e5,0x86e6,
-0xb3eb,0xb3ec,0x86e7,0x86e8,0xb3ed,0x86e9,0x86ea,0x86eb,
-0xb3ee,0x86ec,0xb3ef,0x86ed,0x86ee,0x86ef,0x86f0,0x86f1,
-0xb3f0,0xb3f1,0x86f2,0xb3f2,0x86f3,0xb3f3,0x86f4,0x86f5,
-0x86f6,0x86f7,0xb3f4,0xb3f5,0xb3f6,0x86f8,0x86f9,0x86fa,
-0xb3f7,0x86fb,0x86fc,0x86fd,0xb3f8,0x86fe,0x8741,0x8742,
-0x8743,0x8744,0x8745,0x8746,0x8747,0x8748,0x8749,0x874a,
-0xb3f9,0x874b,0x874c,0x874d,0x874e,0x874f,0x8750,0x8751,
-0x8752,0x8753,0x8754,0x8755,0x8756,0x8757,0x8758,0x8759,
-0x875a,0x8761,0x8762,0x8763,0x8764,0x8765,0x8766,0x8767,
-0x8768,0x8769,0x876a,0x876b,0x876c,0x876d,0x876e,0x876f,
-0x8770,0x8771,0x8772,0x8773,0xb3fa,0x8774,0x8775,0x8776,
-0xb3fb,0x8777,0x8778,0x8779,0xb3fc,0x877a,0x8781,0x8782,
-0x8783,0x8784,0x8785,0x8786,0xb3fd,0xb3fe,0x8787,0xb4a1,
-0x8788,0x8789,0x878a,0x878b,0x878c,0x878d,0x878e,0x878f,
-0xb4a2,0xb4a3,0x8790,0x8791,0xb4a4,0x8792,0x8793,0x8794,
-0xb4a5,0x8795,0x8796,0x8797,0x8798,0x8799,0x879a,0x879b,
-0x879c,0xb4a6,0x879d,0xb4a7,0x879e,0xb4a8,0x879f,0x87a0,
-/* 0xb200 */
-0x87a1,0x87a2,0x87a3,0x87a4,0xb4a9,0xb4aa,0x87a5,0x87a6,
-0xb4ab,0x87a7,0x87a8,0xb4ac,0xb4ad,0x87a9,0x87aa,0x87ab,
-0x87ac,0x87ad,0x87ae,0x87af,0xb4ae,0xb4af,0x87b0,0xb4b0,
-0x87b1,0xb4b1,0x87b2,0x87b3,0x87b4,0x87b5,0x87b6,0x87b7,
-0xb4b2,0x87b8,0x87b9,0x87ba,0x87bb,0x87bc,0x87bd,0x87be,
-0x87bf,0x87c0,0x87c1,0x87c2,0x87c3,0x87c4,0x87c5,0x87c6,
-0x87c7,0x87c8,0x87c9,0x87ca,0xb4b3,0x87cb,0x87cc,0x87cd,
-0x87ce,0x87cf,0x87d0,0x87d1,0xb4b4,0x87d2,0x87d3,0x87d4,
-0x87d5,0x87d6,0x87d7,0x87d8,0x87d9,0x87da,0x87db,0x87dc,
-0x87dd,0x87de,0x87df,0x87e0,0x87e1,0x87e2,0x87e3,0x87e4,
-0x87e5,0x87e6,0x87e7,0x87e8,0x87e9,0x87ea,0x87eb,0x87ec,
-0xb4b5,0x87ed,0x87ee,0x87ef,0xb4b6,0x87f0,0x87f1,0x87f2,
-0xb4b7,0x87f3,0x87f4,0x87f5,0x87f6,0x87f7,0x87f8,0x87f9,
-0xb4b8,0xb4b9,0x87fa,0x87fb,0x87fc,0x87fd,0x87fe,0x8841,
-0x8842,0x8843,0x8844,0x8845,0xb4ba,0xb4bb,0x8846,0x8847,
-0x8848,0x8849,0x884a,0x884b,0xb4bc,0x884c,0x884d,0x884e,
-0x884f,0x8850,0x8851,0x8852,0xb4bd,0xb4be,0x8853,0x8854,
-0x8855,0xb4bf,0x8856,0x8857,0x8858,0x8859,0x885a,0x8861,
-0xb4c0,0xb4c1,0x8862,0x8863,0xb4c2,0x8864,0x8865,0x8866,
-0xb4c3,0xb4c4,0xb4c5,0x8867,0x8868,0x8869,0x886a,0x886b,
-0xb4c6,0xb4c7,0x886c,0xb4c8,0x886d,0xb4c9,0xb4ca,0x886e,
-0x886f,0x8870,0xb4cb,0x8871,0xb4cc,0x8872,0x8873,0x8874,
-0xb4cd,0x8875,0x8876,0x8877,0xb4ce,0x8878,0x8879,0x887a,
-0x8881,0x8882,0x8883,0x8884,0x8885,0x8886,0x8887,0x8888,
-0x8889,0x888a,0x888b,0x888c,0x888d,0x888e,0x888f,0x8890,
-0xb4cf,0xb4d0,0x8891,0x8892,0xb4d1,0x8893,0x8894,0x8895,
-0xb4d2,0x8896,0xb4d3,0x8897,0x8898,0x8899,0x889a,0x889b,
-0xb4d4,0xb4d5,0x889c,0xb4d6,0x889d,0xb4d7,0x889e,0x889f,
-0x88a0,0x88a1,0xb4d8,0x88a2,0xb4d9,0xb4da,0xb4db,0x88a3,
-0xb4dc,0x88a4,0x88a5,0xb4dd,0xb4de,0xb4df,0xb4e0,0xb4e1,
-0x88a6,0x88a7,0x88a8,0xb4e2,0xb4e3,0xb4e4,0x88a9,0xb4e5,
-0xb4e6,0xb4e7,0xb4e8,0xb4e9,0x88aa,0x88ab,0x88ac,0xb4ea,
-/* 0xb300 */
-0xb4eb,0xb4ec,0x88ad,0x88ae,0xb4ed,0x88af,0x88b0,0x88b1,
-0xb4ee,0x88b2,0x88b3,0x88b4,0x88b5,0x88b6,0x88b7,0x88b8,
-0xb4ef,0xb4f0,0x88b9,0xb4f1,0xb4f2,0xb4f3,0x88ba,0x88bb,
-0x88bc,0x88bd,0x88be,0x88bf,0xb4f4,0x88c0,0x88c1,0x88c2,
-0x88c3,0x88c4,0x88c5,0x88c6,0x88c7,0x88c8,0x88c9,0x88ca,
-0x88cb,0x88cc,0x88cd,0x88ce,0x88cf,0x88d0,0x88d1,0x88d2,
-0x88d3,0x88d4,0x88d5,0x88d6,0x88d7,0x88d8,0x88d9,0x88da,
-0x88db,0x88dc,0x88dd,0x88de,0x88df,0x88e0,0x88e1,0x88e2,
-0x88e3,0x88e4,0x88e5,0x88e6,0x88e7,0x88e8,0x88e9,0x88ea,
-0x88eb,0x88ec,0x88ed,0x88ee,0x88ef,0x88f0,0x88f1,0x88f2,
-0x88f3,0x88f4,0x88f5,0x88f6,0xb4f5,0xb4f6,0xb4f7,0x88f7,
-0xb4f8,0x88f8,0x88f9,0xb4f9,0xb4fa,0x88fa,0xb4fb,0xb4fc,
-0x88fb,0x88fc,0x88fd,0x88fe,0xb4fd,0xb4fe,0x8941,0xb5a1,
-0x8942,0xb5a2,0x8943,0xb5a3,0x8944,0x8945,0xb5a4,0x8946,
-0xb5a5,0xb5a6,0x8947,0x8948,0xb5a7,0x8949,0x894a,0x894b,
-0xb5a8,0x894c,0x894d,0x894e,0x894f,0x8950,0x8951,0x8952,
-0xb5a9,0xb5aa,0x8953,0xb5ab,0xb5ac,0xb5ad,0x8954,0x8955,
-0x8956,0x8957,0x8958,0x8959,0xb5ae,0x895a,0x8961,0x8962,
-0xb5af,0x8963,0x8964,0x8965,0xb5b0,0x8966,0x8967,0x8968,
-0x8969,0x896a,0x896b,0x896c,0x896d,0x896e,0x896f,0x8970,
-0xb5b1,0xb5b2,0x8971,0x8972,0x8973,0x8974,0x8975,0x8976,
-0xb5b3,0x8977,0x8978,0x8979,0xb5b4,0x897a,0x8981,0x8982,
-0x8983,0x8984,0x8985,0x8986,0x8987,0x8988,0x8989,0x898a,
-0x898b,0x898c,0x898d,0x898e,0x898f,0x8990,0x8991,0x8992,
-0x8993,0x8994,0x8995,0x8996,0xb5b5,0xb5b6,0x8997,0x8998,
-0xb5b7,0x8999,0x899a,0xb5b8,0xb5b9,0x899b,0xb5ba,0x899c,
-0xb5bb,0x899d,0x899e,0x899f,0xb5bc,0xb5bd,0x89a0,0xb5be,
-0x89a1,0xb5bf,0x89a2,0xb5c0,0x89a3,0xb5c1,0x89a4,0x89a5,
-0xb5c2,0x89a6,0x89a7,0x89a8,0xb5c3,0x89a9,0x89aa,0x89ab,
-0xb5c4,0x89ac,0x89ad,0x89ae,0x89af,0x89b0,0x89b1,0x89b2,
-0x89b3,0x89b4,0x89b5,0x89b6,0x89b7,0x89b8,0x89b9,0x89ba,
-0x89bb,0x89bc,0x89bd,0x89be,0xb5c5,0x89bf,0x89c0,0x89c1,
-/* 0xb400 */
-0x89c2,0x89c3,0x89c4,0x89c5,0x89c6,0x89c7,0x89c8,0x89c9,
-0x89ca,0x89cb,0x89cc,0x89cd,0x89ce,0x89cf,0x89d0,0x89d1,
-0xb5c6,0x89d2,0x89d3,0x89d4,0x89d5,0x89d6,0x89d7,0x89d8,
-0xb5c7,0x89d9,0x89da,0x89db,0xb5c8,0x89dc,0x89dd,0x89de,
-0xb5c9,0x89df,0x89e0,0x89e1,0x89e2,0x89e3,0x89e4,0x89e5,
-0xb5ca,0xb5cb,0x89e6,0xb5cc,0x89e7,0x89e8,0x89e9,0x89ea,
-0x89eb,0x89ec,0x89ed,0x89ee,0xb5cd,0x89ef,0x89f0,0x89f1,
-0x89f2,0x89f3,0x89f4,0x89f5,0x89f6,0x89f7,0x89f8,0x89f9,
-0x89fa,0x89fb,0x89fc,0x89fd,0x89fe,0x8a41,0x8a42,0x8a43,
-0x8a44,0x8a45,0x8a46,0x8a47,0x8a48,0x8a49,0x8a4a,0x8a4b,
-0xb5ce,0xb5cf,0x8a4c,0x8a4d,0xb5d0,0x8a4e,0x8a4f,0x8a50,
-0xb5d1,0x8a51,0x8a52,0x8a53,0x8a54,0x8a55,0x8a56,0x8a57,
-0xb5d2,0xb5d3,0x8a58,0xb5d4,0x8a59,0xb5d5,0x8a5a,0x8a61,
-0x8a62,0x8a63,0x8a64,0x8a65,0xb5d6,0x8a66,0x8a67,0x8a68,
-0x8a69,0x8a6a,0x8a6b,0x8a6c,0x8a6d,0x8a6e,0x8a6f,0x8a70,
-0x8a71,0x8a72,0x8a73,0x8a74,0x8a75,0x8a76,0x8a77,0x8a78,
-0xb5d7,0x8a79,0x8a7a,0x8a81,0x8a82,0x8a83,0x8a84,0x8a85,
-0xb5d8,0x8a86,0x8a87,0x8a88,0x8a89,0x8a8a,0x8a8b,0x8a8c,
-0x8a8d,0x8a8e,0x8a8f,0x8a90,0x8a91,0x8a92,0x8a93,0x8a94,
-0x8a95,0x8a96,0x8a97,0x8a98,0x8a99,0xb5d9,0x8a9a,0x8a9b,
-0x8a9c,0x8a9d,0x8a9e,0x8a9f,0xb5da,0x8aa0,0x8aa1,0x8aa2,
-0xb5db,0x8aa3,0x8aa4,0x8aa5,0xb5dc,0x8aa6,0x8aa7,0x8aa8,
-0x8aa9,0x8aaa,0x8aab,0x8aac,0x8aad,0xb5dd,0x8aae,0xb5de,
-0x8aaf,0xb5df,0x8ab0,0x8ab1,0x8ab2,0x8ab3,0x8ab4,0x8ab5,
-0xb5e0,0x8ab6,0x8ab7,0x8ab8,0xb5e1,0x8ab9,0x8aba,0x8abb,
-0xb5e2,0x8abc,0x8abd,0x8abe,0x8abf,0x8ac0,0x8ac1,0x8ac2,
-0xb5e3,0x8ac3,0x8ac4,0x8ac5,0x8ac6,0xb5e4,0x8ac7,0x8ac8,
-0x8ac9,0x8aca,0x8acb,0x8acc,0xb5e5,0xb5e6,0x8acd,0x8ace,
-0xb5e7,0x8acf,0x8ad0,0xb5e8,0xb5e9,0x8ad1,0xb5ea,0x8ad2,
-0x8ad3,0x8ad4,0x8ad5,0x8ad6,0xb5eb,0xb5ec,0x8ad7,0xb5ed,
-0x8ad8,0xb5ee,0x8ad9,0x8ada,0x8adb,0x8adc,0x8add,0x8ade,
-0xb5ef,0x8adf,0x8ae0,0x8ae1,0x8ae2,0x8ae3,0x8ae4,0x8ae5,
-/* 0xb500 */
-0x8ae6,0x8ae7,0x8ae8,0x8ae9,0x8aea,0x8aeb,0x8aec,0x8aed,
-0x8aee,0x8aef,0x8af0,0x8af1,0x8af2,0x8af3,0x8af4,0x8af5,
-0x8af6,0x8af7,0x8af8,0x8af9,0xb5f0,0xb5f1,0x8afa,0x8afb,
-0xb5f2,0x8afc,0x8afd,0xb5f3,0xb5f4,0x8afe,0x8b41,0x8b42,
-0x8b43,0x8b44,0x8b45,0x8b46,0xb5f5,0xb5f6,0x8b47,0xb5f7,
-0xb5f8,0xb5f9,0xb5fa,0x8b48,0x8b49,0x8b4a,0x8b4b,0x8b4c,
-0xb5fb,0xb5fc,0x8b4d,0x8b4e,0xb5fd,0x8b4f,0x8b50,0x8b51,
-0xb5fe,0x8b52,0x8b53,0x8b54,0x8b55,0x8b56,0x8b57,0x8b58,
-0xb6a1,0xb6a2,0x8b59,0xb6a3,0xb6a4,0xb6a5,0x8b5a,0x8b61,
-0x8b62,0x8b63,0x8b64,0xb6a6,0xb6a7,0xb6a8,0x8b65,0x8b66,
-0xb6a9,0x8b67,0x8b68,0x8b69,0xb6aa,0x8b6a,0x8b6b,0x8b6c,
-0x8b6d,0x8b6e,0x8b6f,0x8b70,0xb6ab,0xb6ac,0x8b71,0xb6ad,
-0xb6ae,0xb6af,0x8b72,0x8b73,0x8b74,0x8b75,0x8b76,0x8b77,
-0x8b78,0x8b79,0x8b7a,0x8b81,0x8b82,0x8b83,0x8b84,0x8b85,
-0x8b86,0x8b87,0x8b88,0x8b89,0x8b8a,0x8b8b,0x8b8c,0x8b8d,
-0x8b8e,0x8b8f,0x8b90,0x8b91,0x8b92,0x8b93,0x8b94,0x8b95,
-0x8b96,0x8b97,0x8b98,0x8b99,0x8b9a,0x8b9b,0x8b9c,0x8b9d,
-0x8b9e,0x8b9f,0x8ba0,0x8ba1,0x8ba2,0x8ba3,0x8ba4,0x8ba5,
-0x8ba6,0x8ba7,0x8ba8,0x8ba9,0x8baa,0x8bab,0x8bac,0x8bad,
-0x8bae,0x8baf,0x8bb0,0x8bb1,0x8bb2,0x8bb3,0x8bb4,0x8bb5,
-0xb6b0,0xb6b1,0x8bb6,0x8bb7,0xb6b2,0x8bb8,0x8bb9,0x8bba,
-0xb6b3,0x8bbb,0xb6b4,0xb6b5,0x8bbc,0x8bbd,0x8bbe,0x8bbf,
-0xb6b6,0xb6b7,0x8bc0,0xb6b8,0xb6b9,0xb6ba,0x8bc1,0x8bc2,
-0x8bc3,0x8bc4,0x8bc5,0xb6bb,0xb6bc,0xb6bd,0x8bc6,0x8bc7,
-0xb6be,0x8bc8,0x8bc9,0x8bca,0xb6bf,0x8bcb,0x8bcc,0x8bcd,
-0x8bce,0x8bcf,0x8bd0,0x8bd1,0xb6c0,0xb6c1,0x8bd2,0xb6c2,
-0xb6c3,0xb6c4,0x8bd3,0x8bd4,0x8bd5,0x8bd6,0x8bd7,0x8bd8,
-0xb6c5,0x8bd9,0x8bda,0x8bdb,0x8bdc,0x8bdd,0x8bde,0x8bdf,
-0x8be0,0x8be1,0x8be2,0x8be3,0x8be4,0x8be5,0x8be6,0x8be7,
-0x8be8,0x8be9,0x8bea,0x8beb,0xb6c6,0x8bec,0x8bed,0x8bee,
-0x8bef,0x8bf0,0x8bf1,0x8bf2,0x8bf3,0x8bf4,0x8bf5,0x8bf6,
-0x8bf7,0x8bf8,0x8bf9,0x8bfa,0x8bfb,0x8bfc,0x8bfd,0x8bfe,
-/* 0xb600 */
-0x8c41,0x8c42,0x8c43,0x8c44,0x8c45,0x8c46,0x8c47,0x8c48,
-0x8c49,0x8c4a,0x8c4b,0x8c4c,0x8c4d,0x8c4e,0x8c4f,0x8c50,
-0xb6c7,0xb6c8,0x8c51,0x8c52,0xb6c9,0x8c53,0x8c54,0x8c55,
-0xb6ca,0x8c56,0x8c57,0x8c58,0x8c59,0x8c5a,0x8c61,0x8c62,
-0x8c63,0x8c64,0x8c65,0x8c66,0x8c67,0xb6cb,0x8c68,0x8c69,
-0x8c6a,0x8c6b,0x8c6c,0x8c6d,0xb6cc,0x8c6e,0x8c6f,0x8c70,
-0x8c71,0x8c72,0x8c73,0x8c74,0xb6cd,0x8c75,0x8c76,0x8c77,
-0x8c78,0x8c79,0x8c7a,0x8c81,0x8c82,0x8c83,0x8c84,0x8c85,
-0x8c86,0x8c87,0x8c88,0x8c89,0x8c8a,0x8c8b,0x8c8c,0x8c8d,
-0xb6ce,0x8c8e,0x8c8f,0x8c90,0x8c91,0x8c92,0x8c93,0x8c94,
-0x8c95,0x8c96,0x8c97,0x8c98,0x8c99,0x8c9a,0x8c9b,0x8c9c,
-0x8c9d,0x8c9e,0x8c9f,0x8ca0,0x8ca1,0x8ca2,0x8ca3,0x8ca4,
-0x8ca5,0x8ca6,0x8ca7,0x8ca8,0xb6cf,0x8ca9,0x8caa,0x8cab,
-0xb6d0,0x8cac,0x8cad,0x8cae,0x8caf,0x8cb0,0x8cb1,0x8cb2,
-0x8cb3,0x8cb4,0x8cb5,0x8cb6,0x8cb7,0x8cb8,0x8cb9,0x8cba,
-0x8cbb,0x8cbc,0x8cbd,0x8cbe,0x8cbf,0x8cc0,0x8cc1,0x8cc2,
-0x8cc3,0x8cc4,0x8cc5,0x8cc6,0x8cc7,0x8cc8,0x8cc9,0x8cca,
-0x8ccb,0x8ccc,0x8ccd,0x8cce,0x8ccf,0x8cd0,0x8cd1,0x8cd2,
-0x8cd3,0x8cd4,0x8cd5,0x8cd6,0x8cd7,0x8cd8,0x8cd9,0x8cda,
-0x8cdb,0x8cdc,0x8cdd,0x8cde,0xb6d1,0xb6d2,0x8cdf,0x8ce0,
-0xb6d3,0x8ce1,0x8ce2,0x8ce3,0xb6d4,0x8ce4,0x8ce5,0x8ce6,
-0x8ce7,0x8ce8,0x8ce9,0xb6d5,0xb6d6,0x8cea,0x8ceb,0x8cec,
-0x8ced,0xb6d7,0x8cee,0x8cef,0x8cf0,0x8cf1,0x8cf2,0x8cf3,
-0x8cf4,0x8cf5,0x8cf6,0x8cf7,0x8cf8,0x8cf9,0x8cfa,0x8cfb,
-0x8cfc,0x8cfd,0x8cfe,0x8d41,0x8d42,0x8d43,0x8d44,0x8d45,
-0x8d46,0x8d47,0x8d48,0x8d49,0x8d4a,0x8d4b,0x8d4c,0x8d4d,
-0x8d4e,0x8d4f,0x8d50,0x8d51,0xb6d8,0x8d52,0x8d53,0x8d54,
-0x8d55,0x8d56,0x8d57,0x8d58,0x8d59,0x8d5a,0x8d61,0x8d62,
-0x8d63,0x8d64,0x8d65,0x8d66,0x8d67,0x8d68,0x8d69,0x8d6a,
-0x8d6b,0x8d6c,0x8d6d,0x8d6e,0x8d6f,0x8d70,0x8d71,0x8d72,
-0xb6d9,0x8d73,0x8d74,0x8d75,0xb6da,0x8d76,0x8d77,0x8d78,
-0xb6db,0x8d79,0x8d7a,0x8d81,0x8d82,0x8d83,0x8d84,0x8d85,
-/* 0xb700 */
-0xb6dc,0xb6dd,0x8d86,0x8d87,0x8d88,0xb6de,0x8d89,0x8d8a,
-0x8d8b,0x8d8c,0x8d8d,0x8d8e,0x8d8f,0x8d90,0x8d91,0x8d92,
-0x8d93,0x8d94,0x8d95,0x8d96,0x8d97,0x8d98,0x8d99,0x8d9a,
-0x8d9b,0x8d9c,0x8d9d,0x8d9e,0x8d9f,0x8da0,0x8da1,0x8da2,
-0x8da3,0x8da4,0x8da5,0x8da6,0x8da7,0x8da8,0x8da9,0x8daa,
-0xb6df,0xb6e0,0x8dab,0x8dac,0xb6e1,0x8dad,0x8dae,0xb6e2,
-0xb6e3,0x8daf,0x8db0,0x8db1,0x8db2,0x8db3,0x8db4,0x8db5,
-0xb6e4,0xb6e5,0x8db6,0xb6e6,0x8db7,0x8db8,0x8db9,0x8dba,
-0x8dbb,0x8dbc,0x8dbd,0x8dbe,0xb6e7,0x8dbf,0x8dc0,0x8dc1,
-0xb6e8,0x8dc2,0x8dc3,0x8dc4,0xb6e9,0x8dc5,0x8dc6,0x8dc7,
-0x8dc8,0x8dc9,0x8dca,0x8dcb,0xb6ea,0xb6eb,0x8dcc,0x8dcd,
-0x8dce,0x8dcf,0x8dd0,0x8dd1,0x8dd2,0x8dd3,0x8dd4,0x8dd5,
-0xb6ec,0x8dd6,0x8dd7,0x8dd8,0xb6ed,0x8dd9,0x8dda,0x8ddb,
-0xb6ee,0x8ddc,0x8ddd,0x8dde,0x8ddf,0x8de0,0x8de1,0x8de2,
-0xb6ef,0xb6f0,0x8de3,0xb6f1,0x8de4,0xb6f2,0x8de5,0x8de6,
-0x8de7,0x8de8,0x8de9,0x8dea,0xb6f3,0xb6f4,0x8deb,0x8dec,
-0xb6f5,0x8ded,0x8dee,0x8def,0xb6f6,0x8df0,0x8df1,0x8df2,
-0x8df3,0x8df4,0x8df5,0x8df6,0xb6f7,0xb6f8,0x8df7,0xb6f9,
-0xb6fa,0xb6fb,0xb6fc,0x8df8,0x8df9,0x8dfa,0xb6fd,0xb6fe,
-0xb7a1,0xb7a2,0x8dfb,0x8dfc,0xb7a3,0x8dfd,0x8dfe,0x8e41,
-0xb7a4,0x8e42,0x8e43,0x8e44,0x8e45,0x8e46,0x8e47,0x8e48,
-0xb7a5,0xb7a6,0x8e49,0xb7a7,0xb7a8,0xb7a9,0x8e4a,0x8e4b,
-0x8e4c,0x8e4d,0x8e4e,0x8e4f,0xb7aa,0xb7ab,0x8e50,0x8e51,
-0xb7ac,0x8e52,0x8e53,0x8e54,0x8e55,0x8e56,0x8e57,0x8e58,
-0x8e59,0x8e5a,0x8e61,0x8e62,0x8e63,0x8e64,0x8e65,0xb7ad,
-0x8e66,0xb7ae,0x8e67,0x8e68,0x8e69,0x8e6a,0x8e6b,0x8e6c,
-0x8e6d,0x8e6e,0x8e6f,0x8e70,0x8e71,0x8e72,0x8e73,0x8e74,
-0x8e75,0x8e76,0x8e77,0x8e78,0x8e79,0x8e7a,0x8e81,0x8e82,
-0x8e83,0x8e84,0x8e85,0x8e86,0x8e87,0x8e88,0x8e89,0x8e8a,
-0x8e8b,0x8e8c,0x8e8d,0x8e8e,0xb7af,0xb7b0,0x8e8f,0x8e90,
-0xb7b1,0x8e91,0x8e92,0x8e93,0xb7b2,0x8e94,0x8e95,0x8e96,
-0x8e97,0x8e98,0x8e99,0x8e9a,0xb7b3,0xb7b4,0x8e9b,0xb7b5,
-/* 0xb800 */
-0xb7b6,0xb7b7,0x8e9c,0x8e9d,0x8e9e,0x8e9f,0x8ea0,0xb7b8,
-0xb7b9,0xb7ba,0x8ea1,0x8ea2,0xb7bb,0x8ea3,0x8ea4,0x8ea5,
-0xb7bc,0x8ea6,0x8ea7,0x8ea8,0x8ea9,0x8eaa,0x8eab,0x8eac,
-0xb7bd,0xb7be,0x8ead,0xb7bf,0x8eae,0xb7c0,0x8eaf,0x8eb0,
-0x8eb1,0x8eb2,0x8eb3,0x8eb4,0xb7c1,0xb7c2,0x8eb5,0x8eb6,
-0xb7c3,0x8eb7,0x8eb8,0x8eb9,0xb7c4,0x8eba,0x8ebb,0x8ebc,
-0x8ebd,0x8ebe,0x8ebf,0x8ec0,0xb7c5,0xb7c6,0x8ec1,0xb7c7,
-0xb7c8,0xb7c9,0x8ec2,0x8ec3,0x8ec4,0x8ec5,0x8ec6,0x8ec7,
-0xb7ca,0x8ec8,0x8ec9,0x8eca,0xb7cb,0x8ecb,0x8ecc,0x8ecd,
-0x8ece,0x8ecf,0x8ed0,0x8ed1,0x8ed2,0x8ed3,0x8ed4,0x8ed5,
-0x8ed6,0xb7cc,0x8ed7,0xb7cd,0x8ed8,0x8ed9,0x8eda,0x8edb,
-0x8edc,0x8edd,0x8ede,0x8edf,0xb7ce,0xb7cf,0x8ee0,0x8ee1,
-0xb7d0,0x8ee2,0x8ee3,0x8ee4,0xb7d1,0x8ee5,0x8ee6,0x8ee7,
-0x8ee8,0x8ee9,0x8eea,0x8eeb,0xb7d2,0xb7d3,0x8eec,0xb7d4,
-0x8eed,0xb7d5,0x8eee,0x8eef,0x8ef0,0x8ef1,0x8ef2,0x8ef3,
-0xb7d6,0x8ef4,0x8ef5,0x8ef6,0xb7d7,0x8ef7,0x8ef8,0x8ef9,
-0x8efa,0x8efb,0x8efc,0x8efd,0x8efe,0x8f41,0x8f42,0x8f43,
-0x8f44,0x8f45,0x8f46,0x8f47,0x8f48,0xb7d8,0x8f49,0x8f4a,
-0x8f4b,0x8f4c,0x8f4d,0x8f4e,0x8f4f,0x8f50,0x8f51,0x8f52,
-0x8f53,0x8f54,0x8f55,0x8f56,0x8f57,0x8f58,0x8f59,0x8f5a,
-0x8f61,0x8f62,0x8f63,0x8f64,0x8f65,0x8f66,0x8f67,0x8f68,
-0xb7d9,0x8f69,0x8f6a,0x8f6b,0x8f6c,0x8f6d,0x8f6e,0x8f6f,
-0xb7da,0x8f70,0x8f71,0x8f72,0xb7db,0x8f73,0x8f74,0x8f75,
-0xb7dc,0x8f76,0x8f77,0x8f78,0x8f79,0x8f7a,0x8f81,0x8f82,
-0xb7dd,0xb7de,0x8f83,0xb7df,0x8f84,0xb7e0,0x8f85,0x8f86,
-0x8f87,0x8f88,0x8f89,0x8f8a,0xb7e1,0x8f8b,0x8f8c,0x8f8d,
-0xb7e2,0x8f8e,0x8f8f,0x8f90,0xb7e3,0x8f91,0x8f92,0x8f93,
-0x8f94,0x8f95,0x8f96,0x8f97,0x8f98,0xb7e4,0x8f99,0xb7e5,
-0x8f9a,0xb7e6,0x8f9b,0x8f9c,0x8f9d,0x8f9e,0x8f9f,0x8fa0,
-0xb7e7,0xb7e8,0x8fa1,0x8fa2,0xb7e9,0x8fa3,0x8fa4,0x8fa5,
-0xb7ea,0x8fa6,0x8fa7,0x8fa8,0x8fa9,0x8faa,0x8fab,0x8fac,
-0xb7eb,0xb7ec,0x8fad,0xb7ed,0x8fae,0xb7ee,0x8faf,0x8fb0,
-/* 0xb900 */
-0x8fb1,0x8fb2,0x8fb3,0x8fb4,0xb7ef,0x8fb5,0x8fb6,0x8fb7,
-0x8fb8,0x8fb9,0x8fba,0x8fbb,0x8fbc,0x8fbd,0x8fbe,0x8fbf,
-0x8fc0,0x8fc1,0x8fc2,0x8fc3,0x8fc4,0x8fc5,0x8fc6,0x8fc7,
-0xb7f0,0x8fc8,0x8fc9,0x8fca,0x8fcb,0x8fcc,0x8fcd,0x8fce,
-0xb7f1,0x8fcf,0x8fd0,0x8fd1,0x8fd2,0x8fd3,0x8fd4,0x8fd5,
-0x8fd6,0x8fd7,0x8fd8,0x8fd9,0x8fda,0x8fdb,0x8fdc,0x8fdd,
-0x8fde,0x8fdf,0x8fe0,0x8fe1,0x8fe2,0x8fe3,0x8fe4,0x8fe5,
-0x8fe6,0x8fe7,0x8fe8,0x8fe9,0xb7f2,0xb7f3,0x8fea,0x8feb,
-0xb7f4,0x8fec,0x8fed,0x8fee,0xb7f5,0x8fef,0x8ff0,0x8ff1,
-0x8ff2,0x8ff3,0x8ff4,0x8ff5,0xb7f6,0x8ff6,0x8ff7,0xb7f7,
-0x8ff8,0xb7f8,0x8ff9,0x8ffa,0x8ffb,0x8ffc,0x8ffd,0x8ffe,
-0xb7f9,0xb7fa,0x9041,0x9042,0xb7fb,0x9043,0x9044,0x9045,
-0xb7fc,0x9046,0x9047,0x9048,0x9049,0x904a,0x904b,0x904c,
-0xb7fd,0xb7fe,0x904d,0xb8a1,0x904e,0xb8a2,0x904f,0x9050,
-0x9051,0x9052,0x9053,0x9054,0xb8a3,0xb8a4,0x9055,0x9056,
-0xb8a5,0x9057,0x9058,0x9059,0xb8a6,0x905a,0x9061,0x9062,
-0x9063,0x9064,0x9065,0x9066,0xb8a7,0xb8a8,0x9067,0xb8a9,
-0x9068,0xb8aa,0xb8ab,0x9069,0x906a,0xb8ac,0xb8ad,0x906b,
-0x906c,0x906d,0x906e,0x906f,0x9070,0x9071,0x9072,0x9073,
-0x9074,0x9075,0x9076,0x9077,0x9078,0x9079,0x907a,0x9081,
-0x9082,0x9083,0x9084,0x9085,0x9086,0x9087,0x9088,0x9089,
-0x908a,0x908b,0x908c,0x908d,0xb8ae,0xb8af,0x908e,0x908f,
-0xb8b0,0x9090,0x9091,0x9092,0xb8b1,0x9093,0x9094,0x9095,
-0x9096,0x9097,0x9098,0x9099,0xb8b2,0xb8b3,0x909a,0xb8b4,
-0x909b,0xb8b5,0x909c,0x909d,0x909e,0x909f,0x90a0,0x90a1,
-0xb8b6,0xb8b7,0x90a2,0x90a3,0xb8b8,0x90a4,0xb8b9,0xb8ba,
-0xb8bb,0xb8bc,0xb8bd,0x90a5,0x90a6,0x90a7,0x90a8,0x90a9,
-0xb8be,0xb8bf,0x90aa,0xb8c0,0x90ab,0xb8c1,0xb8c2,0x90ac,
-0x90ad,0xb8c3,0x90ae,0xb8c4,0xb8c5,0xb8c6,0x90af,0x90b0,
-0xb8c7,0x90b1,0x90b2,0x90b3,0xb8c8,0x90b4,0x90b5,0x90b6,
-0x90b7,0x90b8,0x90b9,0x90ba,0xb8c9,0xb8ca,0x90bb,0xb8cb,
-0xb8cc,0xb8cd,0xb8ce,0x90bc,0x90bd,0x90be,0x90bf,0x90c0,
-/* 0xba00 */
-0xb8cf,0xb8d0,0x90c1,0x90c2,0x90c3,0x90c4,0x90c5,0x90c6,
-0xb8d1,0x90c7,0x90c8,0x90c9,0x90ca,0x90cb,0x90cc,0x90cd,
-0x90ce,0x90cf,0x90d0,0x90d1,0x90d2,0xb8d2,0x90d3,0x90d4,
-0x90d5,0x90d6,0x90d7,0x90d8,0x90d9,0x90da,0x90db,0x90dc,
-0x90dd,0x90de,0x90df,0x90e0,0x90e1,0x90e2,0x90e3,0x90e4,
-0x90e5,0x90e6,0x90e7,0x90e8,0x90e9,0x90ea,0x90eb,0x90ec,
-0x90ed,0x90ee,0x90ef,0x90f0,0x90f1,0x90f2,0x90f3,0x90f4,
-0xb8d3,0xb8d4,0x90f5,0x90f6,0xb8d5,0x90f7,0x90f8,0x90f9,
-0xb8d6,0x90fa,0xb8d7,0x90fb,0x90fc,0x90fd,0x90fe,0x9141,
-0xb8d8,0xb8d9,0x9142,0xb8da,0x9143,0xb8db,0xb8dc,0x9144,
-0x9145,0x9146,0x9147,0xb8dd,0xb8de,0xb8df,0x9148,0x9149,
-0xb8e0,0x914a,0x914b,0x914c,0xb8e1,0x914d,0x914e,0x914f,
-0x9150,0x9151,0x9152,0x9153,0xb8e2,0xb8e3,0x9154,0xb8e4,
-0xb8e5,0xb8e6,0x9155,0x9156,0x9157,0x9158,0x9159,0x915a,
-0xb8e7,0xb8e8,0x9161,0x9162,0xb8e9,0x9163,0x9164,0x9165,
-0xb8ea,0x9166,0x9167,0x9168,0x9169,0x916a,0x916b,0x916c,
-0x916d,0x916e,0x916f,0xb8eb,0xb8ec,0xb8ed,0x9170,0xb8ee,
-0x9171,0x9172,0x9173,0x9174,0xb8ef,0x9175,0x9176,0x9177,
-0x9178,0x9179,0x917a,0x9181,0x9182,0x9183,0x9184,0x9185,
-0x9186,0x9187,0x9188,0x9189,0x918a,0x918b,0x918c,0x918d,
-0x918e,0x918f,0x9190,0x9191,0x9192,0x9193,0x9194,0x9195,
-0xb8f0,0xb8f1,0x9196,0xb8f2,0xb8f3,0x9197,0x9198,0x9199,
-0xb8f4,0x919a,0xb8f5,0x919b,0x919c,0x919d,0x919e,0x919f,
-0xb8f6,0xb8f7,0x91a0,0xb8f8,0x91a1,0xb8f9,0x91a2,0x91a3,
-0x91a4,0x91a5,0x91a6,0x91a7,0xb8fa,0x91a8,0x91a9,0x91aa,
-0xb8fb,0x91ab,0x91ac,0x91ad,0x91ae,0x91af,0x91b0,0x91b1,
-0x91b2,0x91b3,0x91b4,0x91b5,0x91b6,0x91b7,0x91b8,0x91b9,
-0xb8fc,0xb8fd,0x91ba,0x91bb,0x91bc,0x91bd,0x91be,0x91bf,
-0x91c0,0x91c1,0x91c2,0x91c3,0x91c4,0x91c5,0x91c6,0x91c7,
-0x91c8,0x91c9,0x91ca,0x91cb,0x91cc,0x91cd,0x91ce,0x91cf,
-0x91d0,0x91d1,0x91d2,0x91d3,0x91d4,0x91d5,0x91d6,0x91d7,
-0x91d8,0x91d9,0x91da,0x91db,0xb8fe,0x91dc,0x91dd,0x91de,
-/* 0xbb00 */
-0xb9a1,0x91df,0x91e0,0x91e1,0xb9a2,0x91e2,0x91e3,0x91e4,
-0x91e5,0x91e6,0x91e7,0x91e8,0x91e9,0xb9a3,0x91ea,0xb9a4,
-0x91eb,0xb9a5,0x91ec,0x91ed,0x91ee,0x91ef,0x91f0,0x91f1,
-0xb9a6,0x91f2,0x91f3,0x91f4,0xb9a7,0x91f5,0x91f6,0x91f7,
-0xb9a8,0x91f8,0x91f9,0x91fa,0x91fb,0x91fc,0x91fd,0x91fe,
-0x9241,0xb9a9,0x9242,0xb9aa,0x9243,0x9244,0x9245,0x9246,
-0x9247,0x9248,0x9249,0x924a,0xb9ab,0xb9ac,0xb9ad,0x924b,
-0xb9ae,0x924c,0x924d,0xb9af,0xb9b0,0xb9b1,0xb9b2,0x924e,
-0x924f,0x9250,0x9251,0x9252,0xb9b3,0xb9b4,0x9253,0xb9b5,
-0x9254,0xb9b6,0x9255,0x9256,0x9257,0xb9b7,0x9258,0xb9b8,
-0xb9b9,0x9259,0x925a,0x9261,0xb9ba,0x9262,0x9263,0x9264,
-0xb9bb,0x9265,0x9266,0x9267,0x9268,0x9269,0x926a,0x926b,
-0x926c,0xb9bc,0x926d,0xb9bd,0x926e,0x926f,0x9270,0x9271,
-0x9272,0x9273,0x9274,0x9275,0xb9be,0x9276,0x9277,0x9278,
-0x9279,0x927a,0x9281,0x9282,0x9283,0x9284,0x9285,0x9286,
-0x9287,0x9288,0x9289,0x928a,0x928b,0x928c,0x928d,0x928e,
-0x928f,0x9290,0x9291,0x9292,0x9293,0x9294,0x9295,0x9296,
-0xb9bf,0x9297,0x9298,0x9299,0xb9c0,0x929a,0x929b,0x929c,
-0xb9c1,0x929d,0x929e,0x929f,0x92a0,0x92a1,0x92a2,0x92a3,
-0x92a4,0x92a5,0x92a6,0x92a7,0x92a8,0x92a9,0x92aa,0x92ab,
-0x92ac,0x92ad,0x92ae,0x92af,0xb9c2,0x92b0,0x92b1,0x92b2,
-0xb9c3,0x92b3,0x92b4,0x92b5,0xb9c4,0x92b6,0x92b7,0x92b8,
-0x92b9,0x92ba,0x92bb,0x92bc,0xb9c5,0x92bd,0x92be,0xb9c6,
-0x92bf,0x92c0,0x92c1,0x92c2,0x92c3,0x92c4,0x92c5,0x92c6,
-0xb9c7,0x92c7,0x92c8,0x92c9,0xb9c8,0x92ca,0x92cb,0x92cc,
-0xb9c9,0x92cd,0x92ce,0x92cf,0x92d0,0x92d1,0x92d2,0x92d3,
-0xb9ca,0x92d4,0x92d5,0xb9cb,0x92d6,0x92d7,0x92d8,0x92d9,
-0x92da,0x92db,0x92dc,0x92dd,0x92de,0x92df,0x92e0,0x92e1,
-0x92e2,0x92e3,0x92e4,0x92e5,0x92e6,0x92e7,0x92e8,0x92e9,
-0x92ea,0x92eb,0x92ec,0x92ed,0x92ee,0x92ef,0x92f0,0x92f1,
-0x92f2,0x92f3,0x92f4,0x92f5,0x92f6,0x92f7,0x92f8,0x92f9,
-0xb9cc,0xb9cd,0x92fa,0x92fb,0xb9ce,0x92fc,0x92fd,0xb9cf,
-/* 0xbc00 */
-0xb9d0,0x92fe,0xb9d1,0x9341,0x9342,0x9343,0x9344,0x9345,
-0xb9d2,0xb9d3,0x9346,0xb9d4,0xb9d5,0xb9d6,0x9347,0xb9d7,
-0x9348,0xb9d8,0x9349,0x934a,0xb9d9,0xb9da,0xb9db,0xb9dc,
-0xb9dd,0x934b,0x934c,0xb9de,0xb9df,0xb9e0,0xb9e1,0xb9e2,
-0x934d,0x934e,0x934f,0x9350,0xb9e3,0xb9e4,0x9351,0xb9e5,
-0x9352,0xb9e6,0x9353,0x9354,0x9355,0xb9e7,0x9356,0x9357,
-0xb9e8,0xb9e9,0x9358,0x9359,0xb9ea,0x935a,0x9361,0x9362,
-0xb9eb,0x9363,0x9364,0x9365,0x9366,0x9367,0x9368,0x9369,
-0xb9ec,0xb9ed,0x936a,0xb9ee,0xb9ef,0xb9f0,0x936b,0x936c,
-0x936d,0xb9f1,0x936e,0x936f,0xb9f2,0xb9f3,0x9370,0x9371,
-0xb9f4,0x9372,0x9373,0x9374,0x9375,0x9376,0x9377,0x9378,
-0x9379,0x937a,0x9381,0x9382,0x9383,0xb9f5,0x9384,0x9385,
-0x9386,0x9387,0x9388,0x9389,0x938a,0x938b,0x938c,0x938d,
-0x938e,0x938f,0x9390,0x9391,0x9392,0x9393,0x9394,0x9395,
-0x9396,0x9397,0x9398,0x9399,0x939a,0x939b,0x939c,0x939d,
-0x939e,0x939f,0x93a0,0x93a1,0x93a2,0x93a3,0x93a4,0x93a5,
-0x93a6,0x93a7,0x93a8,0x93a9,0xb9f6,0xb9f7,0x93aa,0x93ab,
-0xb9f8,0x93ac,0x93ad,0xb9f9,0xb9fa,0x93ae,0xb9fb,0x93af,
-0x93b0,0x93b1,0x93b2,0x93b3,0xb9fc,0xb9fd,0x93b4,0xb9fe,
-0x93b5,0xbaa1,0xbaa2,0x93b6,0x93b7,0x93b8,0x93b9,0x93ba,
-0xbaa3,0xbaa4,0x93bb,0x93bc,0xbaa5,0x93bd,0x93be,0xbaa6,
-0xbaa7,0x93bf,0x93c0,0x93c1,0x93c2,0x93c3,0x93c4,0x93c5,
-0xbaa8,0xbaa9,0x93c6,0xbaaa,0xbaab,0xbaac,0x93c7,0x93c8,
-0x93c9,0x93ca,0x93cb,0x93cc,0xbaad,0xbaae,0x93cd,0x93ce,
-0xbaaf,0x93cf,0x93d0,0x93d1,0xbab0,0x93d2,0x93d3,0x93d4,
-0x93d5,0x93d6,0x93d7,0x93d8,0x93d9,0xbab1,0x93da,0xbab2,
-0xbab3,0xbab4,0x93db,0x93dc,0x93dd,0xbab5,0x93de,0x93df,
-0xbab6,0x93e0,0x93e1,0x93e2,0xbab7,0x93e3,0x93e4,0x93e5,
-0x93e6,0x93e7,0x93e8,0x93e9,0x93ea,0x93eb,0x93ec,0x93ed,
-0x93ee,0x93ef,0x93f0,0x93f1,0x93f2,0x93f3,0x93f4,0x93f5,
-0x93f6,0x93f7,0x93f8,0x93f9,0xbab8,0xbab9,0xbaba,0x93fa,
-0xbabb,0x93fb,0x93fc,0x93fd,0xbabc,0x93fe,0x9441,0x9442,
-/* 0xbd00 */
-0x9443,0x9444,0x9445,0x9446,0xbabd,0xbabe,0x9447,0xbabf,
-0x9448,0xbac0,0x9449,0x944a,0x944b,0x944c,0x944d,0x944e,
-0xbac1,0x944f,0x9450,0x9451,0xbac2,0x9452,0x9453,0x9454,
-0x9455,0x9456,0x9457,0x9458,0x9459,0x945a,0x9461,0x9462,
-0x9463,0x9464,0x9465,0x9466,0xbac3,0x9467,0x9468,0x9469,
-0x946a,0x946b,0x946c,0x946d,0xbac4,0x946e,0x946f,0x9470,
-0x9471,0x9472,0x9473,0x9474,0x9475,0x9476,0x9477,0x9478,
-0x9479,0x947a,0x9481,0x9482,0x9483,0x9484,0x9485,0x9486,
-0xbac5,0x9487,0x9488,0x9489,0x948a,0x948b,0x948c,0x948d,
-0xbac6,0xbac7,0x948e,0x948f,0xbac8,0x9490,0x9491,0x9492,
-0xbac9,0x9493,0x9494,0x9495,0x9496,0x9497,0x9498,0x9499,
-0xbaca,0xbacb,0x949a,0x949b,0x949c,0x949d,0x949e,0x949f,
-0x94a0,0x94a1,0x94a2,0x94a3,0xbacc,0x94a4,0x94a5,0x94a6,
-0xbacd,0x94a7,0x94a8,0x94a9,0x94aa,0x94ab,0x94ac,0x94ad,
-0x94ae,0x94af,0x94b0,0x94b1,0x94b2,0x94b3,0x94b4,0x94b5,
-0x94b6,0x94b7,0x94b8,0x94b9,0x94ba,0x94bb,0x94bc,0x94bd,
-0xbace,0xbacf,0x94be,0x94bf,0xbad0,0x94c0,0x94c1,0xbad1,
-0xbad2,0xbad3,0xbad4,0x94c2,0x94c3,0x94c4,0x94c5,0x94c6,
-0xbad5,0xbad6,0x94c7,0xbad7,0x94c8,0xbad8,0x94c9,0x94ca,
-0x94cb,0xbad9,0xbada,0x94cc,0xbadb,0x94cd,0x94ce,0x94cf,
-0x94d0,0x94d1,0x94d2,0x94d3,0xbadc,0x94d4,0x94d5,0x94d6,
-0x94d7,0x94d8,0x94d9,0x94da,0x94db,0x94dc,0x94dd,0x94de,
-0xbadd,0x94df,0x94e0,0x94e1,0x94e2,0x94e3,0x94e4,0x94e5,
-0xbade,0x94e6,0x94e7,0x94e8,0x94e9,0x94ea,0x94eb,0x94ec,
-0x94ed,0x94ee,0x94ef,0x94f0,0x94f1,0x94f2,0x94f3,0x94f4,
-0x94f5,0x94f6,0x94f7,0x94f8,0x94f9,0x94fa,0x94fb,0x94fc,
-0x94fd,0x94fe,0x9541,0x9542,0xbadf,0xbae0,0x9543,0x9544,
-0xbae1,0x9545,0x9546,0x9547,0xbae2,0x9548,0x9549,0x954a,
-0x954b,0x954c,0x954d,0x954e,0x954f,0x9550,0x9551,0x9552,
-0x9553,0xbae3,0x9554,0x9555,0x9556,0x9557,0x9558,0x9559,
-0xbae4,0x955a,0x9561,0x9562,0xbae5,0x9563,0x9564,0x9565,
-0xbae6,0x9566,0x9567,0x9568,0x9569,0x956a,0x956b,0x956c,
-/* 0xbe00 */
-0xbae7,0x956d,0x956e,0xbae8,0x956f,0xbae9,0x9570,0x9571,
-0x9572,0x9573,0x9574,0x9575,0xbaea,0xbaeb,0x9576,0x9577,
-0xbaec,0x9578,0x9579,0x957a,0xbaed,0x9581,0x9582,0x9583,
-0x9584,0x9585,0x9586,0x9587,0xbaee,0xbaef,0x9588,0xbaf0,
-0x9589,0x958a,0x958b,0x958c,0x958d,0x958e,0x958f,0x9590,
-0x9591,0x9592,0x9593,0x9594,0x9595,0x9596,0x9597,0x9598,
-0x9599,0x959a,0x959b,0x959c,0x959d,0x959e,0x959f,0x95a0,
-0x95a1,0x95a2,0x95a3,0x95a4,0x95a5,0x95a6,0x95a7,0x95a8,
-0x95a9,0x95aa,0x95ab,0x95ac,0xbaf1,0xbaf2,0x95ad,0x95ae,
-0xbaf3,0x95af,0x95b0,0x95b1,0xbaf4,0x95b2,0xbaf5,0x95b3,
-0x95b4,0x95b5,0x95b6,0x95b7,0xbaf6,0xbaf7,0x95b8,0xbaf8,
-0x95b9,0xbaf9,0xbafa,0xbafb,0x95ba,0x95bb,0x95bc,0x95bd,
-0xbafc,0xbafd,0x95be,0x95bf,0xbafe,0x95c0,0x95c1,0x95c2,
-0xbba1,0x95c3,0xbba2,0x95c4,0x95c5,0x95c6,0x95c7,0x95c8,
-0xbba3,0xbba4,0x95c9,0xbba5,0xbba6,0xbba7,0x95ca,0x95cb,
-0x95cc,0x95cd,0x95ce,0xbba8,0xbba9,0xbbaa,0x95cf,0x95d0,
-0xbbab,0x95d1,0x95d2,0x95d3,0xbbac,0x95d4,0x95d5,0x95d6,
-0x95d7,0x95d8,0x95d9,0x95da,0xbbad,0xbbae,0x95db,0xbbaf,
-0xbbb0,0xbbb1,0x95dc,0x95dd,0x95de,0x95df,0x95e0,0x95e1,
-0xbbb2,0xbbb3,0x95e2,0x95e3,0x95e4,0x95e5,0x95e6,0x95e7,
-0x95e8,0x95e9,0x95ea,0x95eb,0x95ec,0x95ed,0x95ee,0x95ef,
-0xbbb4,0x95f0,0x95f1,0x95f2,0x95f3,0x95f4,0x95f5,0x95f6,
-0x95f7,0x95f8,0x95f9,0x95fa,0x95fb,0x95fc,0x95fd,0x95fe,
-0x9641,0x9642,0x9643,0x9644,0x9645,0x9646,0x9647,0x9648,
-0x9649,0x964a,0x964b,0x964c,0x964d,0x964e,0x964f,0x9650,
-0x9651,0x9652,0x9653,0x9654,0x9655,0x9656,0x9657,0x9658,
-0xbbb5,0xbbb6,0x9659,0x965a,0xbbb7,0x9661,0x9662,0xbbb8,
-0xbbb9,0x9663,0x9664,0x9665,0x9666,0x9667,0x9668,0x9669,
-0xbbba,0x966a,0x966b,0xbbbb,0xbbbc,0xbbbd,0x966c,0x966d,
-0x966e,0x966f,0x9670,0x9671,0xbbbe,0x9672,0x9673,0x9674,
-0x9675,0x9676,0x9677,0x9678,0x9679,0x967a,0x9681,0x9682,
-0x9683,0x9684,0x9685,0x9686,0x9687,0x9688,0x9689,0x968a,
-/* 0xbf00 */
-0x968b,0xbbbf,0x968c,0x968d,0x968e,0x968f,0x9690,0x9691,
-0xbbc0,0xbbc1,0x9692,0x9693,0x9694,0x9695,0x9696,0x9697,
-0x9698,0x9699,0x969a,0x969b,0x969c,0x969d,0x969e,0x969f,
-0xbbc2,0xbbc3,0x96a0,0xbbc4,0xbbc5,0xbbc6,0x96a1,0x96a2,
-0x96a3,0x96a4,0x96a5,0x96a6,0x96a7,0x96a8,0x96a9,0x96aa,
-0x96ab,0x96ac,0x96ad,0x96ae,0x96af,0x96b0,0x96b1,0x96b2,
-0x96b3,0x96b4,0x96b5,0x96b6,0x96b7,0x96b8,0x96b9,0x96ba,
-0x96bb,0x96bc,0x96bd,0x96be,0x96bf,0x96c0,0x96c1,0x96c2,
-0xbbc7,0xbbc8,0x96c3,0x96c4,0xbbc9,0x96c5,0x96c6,0x96c7,
-0xbbca,0x96c8,0x96c9,0x96ca,0x96cb,0x96cc,0x96cd,0x96ce,
-0xbbcb,0xbbcc,0x96cf,0x96d0,0x96d1,0xbbcd,0x96d2,0x96d3,
-0x96d4,0x96d5,0x96d6,0x96d7,0x96d8,0x96d9,0x96da,0x96db,
-0x96dc,0x96dd,0x96de,0x96df,0x96e0,0x96e1,0x96e2,0x96e3,
-0x96e4,0x96e5,0x96e6,0x96e7,0x96e8,0x96e9,0x96ea,0x96eb,
-0x96ec,0x96ed,0x96ee,0x96ef,0x96f0,0x96f1,0x96f2,0x96f3,
-0x96f4,0x96f5,0x96f6,0x96f7,0x96f8,0x96f9,0x96fa,0x96fb,
-0x96fc,0x96fd,0x96fe,0x9741,0x9742,0x9743,0x9744,0x9745,
-0x9746,0x9747,0x9748,0x9749,0x974a,0x974b,0x974c,0x974d,
-0x974e,0x974f,0x9750,0x9751,0xbbce,0x9752,0x9753,0x9754,
-0x9755,0x9756,0x9757,0x9758,0x9759,0x975a,0x9761,0x9762,
-0x9763,0x9764,0x9765,0x9766,0x9767,0x9768,0x9769,0x976a,
-0x976b,0x976c,0x976d,0x976e,0x976f,0x9770,0x9771,0x9772,
-0xbbcf,0x9773,0x9774,0x9775,0x9776,0x9777,0x9778,0x9779,
-0x977a,0x9781,0x9782,0x9783,0x9784,0x9785,0x9786,0x9787,
-0x9788,0x9789,0x978a,0x978b,0x978c,0xbbd0,0x978d,0x978e,
-0x978f,0x9790,0x9791,0x9792,0xbbd1,0xbbd2,0x9793,0x9794,
-0xbbd3,0x9795,0x9796,0x9797,0xbbd4,0x9798,0x9799,0x979a,
-0x979b,0x979c,0x979d,0x979e,0xbbd5,0x979f,0x97a0,0xbbd6,
-0x97a1,0xbbd7,0x97a2,0x97a3,0x97a4,0x97a5,0x97a6,0x97a7,
-0x97a8,0x97a9,0x97aa,0x97ab,0x97ac,0x97ad,0x97ae,0x97af,
-0x97b0,0x97b1,0x97b2,0x97b3,0x97b4,0x97b5,0x97b6,0x97b7,
-0x97b8,0x97b9,0x97ba,0x97bb,0x97bc,0x97bd,0x97be,0x97bf,
-/* 0xc000 */
-0x97c0,0x97c1,0x97c2,0x97c3,0x97c4,0x97c5,0x97c6,0x97c7,
-0x97c8,0x97c9,0x97ca,0x97cb,0x97cc,0x97cd,0x97ce,0x97cf,
-0x97d0,0x97d1,0x97d2,0x97d3,0x97d4,0x97d5,0x97d6,0x97d7,
-0x97d8,0x97d9,0x97da,0x97db,0x97dc,0x97dd,0x97de,0x97df,
-0x97e0,0x97e1,0x97e2,0x97e3,0x97e4,0x97e5,0x97e6,0x97e7,
-0x97e8,0x97e9,0x97ea,0x97eb,0x97ec,0x97ed,0x97ee,0x97ef,
-0x97f0,0x97f1,0x97f2,0x97f3,0x97f4,0x97f5,0x97f6,0x97f7,
-0x97f8,0x97f9,0x97fa,0x97fb,0xbbd8,0x97fc,0x97fd,0x97fe,
-0x9841,0x9842,0x9843,0x9844,0x9845,0x9846,0x9847,0x9848,
-0x9849,0x984a,0x984b,0x984c,0x984d,0x984e,0x984f,0x9850,
-0x9851,0xbbd9,0x9852,0x9853,0x9854,0x9855,0x9856,0x9857,
-0xbbda,0x9858,0x9859,0x985a,0xbbdb,0x9861,0x9862,0x9863,
-0xbbdc,0x9864,0x9865,0x9866,0x9867,0x9868,0x9869,0x986a,
-0xbbdd,0xbbde,0x986b,0x986c,0x986d,0x986e,0x986f,0x9870,
-0x9871,0x9872,0x9873,0x9874,0x9875,0x9876,0x9877,0x9878,
-0x9879,0x987a,0x9881,0x9882,0x9883,0x9884,0x9885,0x9886,
-0x9887,0x9888,0x9889,0x988a,0x988b,0x988c,0x988d,0x988e,
-0x988f,0x9890,0x9891,0x9892,0x9893,0x9894,0x9895,0x9896,
-0xbbdf,0xbbe0,0x9897,0x9898,0xbbe1,0x9899,0x989a,0x989b,
-0xbbe2,0x989c,0x989d,0x989e,0x989f,0x98a0,0x98a1,0x98a2,
-0xbbe3,0xbbe4,0x98a3,0xbbe5,0x98a4,0xbbe6,0x98a5,0x98a6,
-0x98a7,0x98a8,0x98a9,0x98aa,0xbbe7,0xbbe8,0x98ab,0xbbe9,
-0xbbea,0x98ac,0x98ad,0xbbeb,0xbbec,0xbbed,0xbbee,0x98ae,
-0x98af,0x98b0,0x98b1,0x98b2,0xbbef,0xbbf0,0x98b3,0xbbf1,
-0xbbf2,0xbbf3,0x98b4,0x98b5,0x98b6,0xbbf4,0x98b7,0x98b8,
-0xbbf5,0xbbf6,0x98b9,0x98ba,0xbbf7,0x98bb,0x98bc,0x98bd,
-0xbbf8,0x98be,0x98bf,0x98c0,0x98c1,0x98c2,0x98c3,0x98c4,
-0xbbf9,0xbbfa,0x98c5,0xbbfb,0xbbfc,0xbbfd,0x98c6,0x98c7,
-0x98c8,0x98c9,0x98ca,0x98cb,0xbbfe,0xbca1,0x98cc,0x98cd,
-0xbca2,0x98ce,0x98cf,0x98d0,0xbca3,0x98d1,0x98d2,0x98d3,
-0x98d4,0x98d5,0x98d6,0x98d7,0xbca4,0xbca5,0x98d8,0xbca6,
-0x98d9,0xbca7,0x98da,0x98db,0x98dc,0x98dd,0x98de,0x98df,
-/* 0xc100 */
-0xbca8,0x98e0,0x98e1,0x98e2,0xbca9,0x98e3,0x98e4,0x98e5,
-0xbcaa,0x98e6,0x98e7,0x98e8,0x98e9,0x98ea,0x98eb,0x98ec,
-0xbcab,0x98ed,0x98ee,0x98ef,0x98f0,0xbcac,0x98f1,0x98f2,
-0x98f3,0x98f4,0x98f5,0x98f6,0xbcad,0xbcae,0xbcaf,0xbcb0,
-0xbcb1,0x98f7,0x98f8,0xbcb2,0xbcb3,0x98f9,0xbcb4,0xbcb5,
-0x98fa,0x98fb,0x98fc,0x98fd,0xbcb6,0xbcb7,0x98fe,0xbcb8,
-0xbcb9,0xbcba,0x9941,0x9942,0x9943,0x9944,0xbcbb,0x9945,
-0xbcbc,0xbcbd,0x9946,0x9947,0xbcbe,0x9948,0x9949,0x994a,
-0xbcbf,0x994b,0x994c,0x994d,0x994e,0x994f,0x9950,0x9951,
-0xbcc0,0xbcc1,0x9952,0xbcc2,0xbcc3,0xbcc4,0x9953,0x9954,
-0x9955,0x9956,0x9957,0x9958,0xbcc5,0xbcc6,0x9959,0x995a,
-0xbcc7,0x9961,0x9962,0x9963,0xbcc8,0x9964,0x9965,0x9966,
-0x9967,0x9968,0x9969,0x996a,0xbcc9,0xbcca,0x996b,0xbccb,
-0xbccc,0xbccd,0x996c,0x996d,0x996e,0x996f,0x9970,0x9971,
-0xbcce,0x9972,0x9973,0x9974,0xbccf,0x9975,0x9976,0x9977,
-0xbcd0,0x9978,0x9979,0x997a,0x9981,0x9982,0x9983,0x9984,
-0x9985,0x9986,0x9987,0x9988,0x9989,0xbcd1,0x998a,0x998b,
-0x998c,0x998d,0x998e,0x998f,0xbcd2,0xbcd3,0xbcd4,0x9990,
-0xbcd5,0x9991,0x9992,0x9993,0xbcd6,0x9994,0xbcd7,0x9995,
-0x9996,0x9997,0x9998,0x9999,0xbcd8,0xbcd9,0x999a,0xbcda,
-0x999b,0xbcdb,0x999c,0x999d,0x999e,0xbcdc,0x999f,0x99a0,
-0xbcdd,0xbcde,0x99a1,0x99a2,0xbcdf,0x99a3,0x99a4,0x99a5,
-0xbce0,0x99a6,0x99a7,0x99a8,0x99a9,0x99aa,0x99ab,0x99ac,
-0x99ad,0x99ae,0x99af,0x99b0,0x99b1,0xbce1,0x99b2,0x99b3,
-0x99b4,0x99b5,0x99b6,0x99b7,0xbce2,0x99b8,0x99b9,0x99ba,
-0xbce3,0x99bb,0x99bc,0x99bd,0xbce4,0x99be,0x99bf,0x99c0,
-0x99c1,0x99c2,0x99c3,0x99c4,0xbce5,0x99c5,0x99c6,0xbce6,
-0xbce7,0x99c7,0x99c8,0x99c9,0x99ca,0x99cb,0x99cc,0x99cd,
-0xbce8,0x99ce,0x99cf,0x99d0,0xbce9,0x99d1,0x99d2,0x99d3,
-0xbcea,0x99d4,0x99d5,0x99d6,0x99d7,0x99d8,0x99d9,0x99da,
-0xbceb,0xbcec,0x99db,0xbced,0x99dc,0x99dd,0x99de,0x99df,
-0x99e0,0x99e1,0x99e2,0x99e3,0xbcee,0xbcef,0x99e4,0x99e5,
-/* 0xc200 */
-0xbcf0,0x99e6,0x99e7,0x99e8,0xbcf1,0x99e9,0x99ea,0x99eb,
-0x99ec,0x99ed,0x99ee,0x99ef,0xbcf2,0xbcf3,0x99f0,0xbcf4,
-0x99f1,0xbcf5,0x99f2,0x99f3,0x99f4,0x99f5,0x99f6,0x99f7,
-0xbcf6,0xbcf7,0x99f8,0x99f9,0xbcf8,0x99fa,0x99fb,0xbcf9,
-0xbcfa,0x99fc,0x99fd,0x99fe,0x9a41,0x9a42,0x9a43,0x9a44,
-0xbcfb,0xbcfc,0x9a45,0xbcfd,0x9a46,0xbcfe,0x9a47,0xbda1,
-0x9a48,0xbda2,0xbda3,0x9a49,0xbda4,0x9a4a,0x9a4b,0x9a4c,
-0x9a4d,0x9a4e,0x9a4f,0x9a50,0x9a51,0x9a52,0x9a53,0x9a54,
-0x9a55,0x9a56,0x9a57,0x9a58,0x9a59,0x9a5a,0x9a61,0x9a62,
-0xbda5,0x9a63,0x9a64,0x9a65,0x9a66,0x9a67,0x9a68,0x9a69,
-0xbda6,0xbda7,0x9a6a,0x9a6b,0xbda8,0x9a6c,0x9a6d,0x9a6e,
-0xbda9,0x9a6f,0x9a70,0x9a71,0x9a72,0x9a73,0x9a74,0x9a75,
-0xbdaa,0x9a76,0x9a77,0x9a78,0x9a79,0xbdab,0x9a7a,0x9a81,
-0x9a82,0x9a83,0x9a84,0x9a85,0xbdac,0xbdad,0x9a86,0x9a87,
-0xbdae,0x9a88,0x9a89,0x9a8a,0xbdaf,0x9a8b,0x9a8c,0x9a8d,
-0x9a8e,0x9a8f,0x9a90,0x9a91,0xbdb0,0xbdb1,0x9a92,0xbdb2,
-0x9a93,0xbdb3,0x9a94,0x9a95,0x9a96,0x9a97,0x9a98,0x9a99,
-0xbdb4,0xbdb5,0x9a9a,0x9a9b,0x9a9c,0x9a9d,0x9a9e,0x9a9f,
-0xbdb6,0x9aa0,0x9aa1,0x9aa2,0x9aa3,0x9aa4,0x9aa5,0x9aa6,
-0xbdb7,0x9aa7,0x9aa8,0xbdb8,0x9aa9,0xbdb9,0x9aaa,0x9aab,
-0x9aac,0x9aad,0x9aae,0x9aaf,0xbdba,0xbdbb,0x9ab0,0x9ab1,
-0xbdbc,0x9ab2,0x9ab3,0x9ab4,0xbdbd,0xbdbe,0x9ab5,0x9ab6,
-0x9ab7,0x9ab8,0x9ab9,0x9aba,0xbdbf,0xbdc0,0x9abb,0xbdc1,
-0x9abc,0xbdc2,0x9abd,0x9abe,0x9abf,0x9ac0,0x9ac1,0x9ac2,
-0x9ac3,0x9ac4,0x9ac5,0x9ac6,0x9ac7,0x9ac8,0x9ac9,0x9aca,
-0x9acb,0x9acc,0x9acd,0x9ace,0x9acf,0x9ad0,0x9ad1,0x9ad2,
-0x9ad3,0x9ad4,0x9ad5,0x9ad6,0x9ad7,0x9ad8,0x9ad9,0x9ada,
-0x9adb,0x9adc,0x9add,0x9ade,0xbdc3,0xbdc4,0x9adf,0x9ae0,
-0xbdc5,0x9ae1,0x9ae2,0xbdc6,0xbdc7,0x9ae3,0x9ae4,0x9ae5,
-0x9ae6,0x9ae7,0x9ae8,0xbdc8,0xbdc9,0xbdca,0x9ae9,0xbdcb,
-0x9aea,0xbdcc,0x9aeb,0x9aec,0x9aed,0x9aee,0xbdcd,0x9aef,
-0xbdce,0xbdcf,0x9af0,0xbdd0,0xbdd1,0x9af1,0x9af2,0x9af3,
-/* 0xc300 */
-0xbdd2,0x9af4,0x9af5,0x9af6,0x9af7,0x9af8,0x9af9,0x9afa,
-0xbdd3,0xbdd4,0x9afb,0x9afc,0xbdd5,0xbdd6,0x9afd,0x9afe,
-0x9b41,0x9b42,0x9b43,0xbdd7,0xbdd8,0xbdd9,0x9b44,0x9b45,
-0xbdda,0x9b46,0x9b47,0x9b48,0xbddb,0x9b49,0x9b4a,0x9b4b,
-0x9b4c,0x9b4d,0x9b4e,0x9b4f,0xbddc,0xbddd,0x9b50,0x9b51,
-0xbdde,0xbddf,0x9b52,0x9b53,0x9b54,0x9b55,0x9b56,0x9b57,
-0x9b58,0x9b59,0x9b5a,0x9b61,0x9b62,0x9b63,0x9b64,0x9b65,
-0x9b66,0x9b67,0x9b68,0x9b69,0x9b6a,0x9b6b,0x9b6c,0x9b6d,
-0x9b6e,0x9b6f,0x9b70,0x9b71,0x9b72,0xbde0,0x9b73,0x9b74,
-0x9b75,0x9b76,0x9b77,0x9b78,0x9b79,0x9b7a,0x9b81,0x9b82,
-0x9b83,0x9b84,0x9b85,0x9b86,0x9b87,0x9b88,0x9b89,0x9b8a,
-0x9b8b,0x9b8c,0x9b8d,0x9b8e,0x9b8f,0x9b90,0x9b91,0x9b92,
-0x9b93,0x9b94,0x9b95,0x9b96,0x9b97,0x9b98,0x9b99,0x9b9a,
-0xbde1,0xbde2,0x9b9b,0x9b9c,0xbde3,0x9b9d,0x9b9e,0x9b9f,
-0xbde4,0x9ba0,0xbde5,0x9ba1,0x9ba2,0x9ba3,0x9ba4,0x9ba5,
-0xbde6,0xbde7,0x9ba6,0x9ba7,0xbde8,0xbde9,0x9ba8,0x9ba9,
-0x9baa,0x9bab,0x9bac,0x9bad,0xbdea,0x9bae,0x9baf,0x9bb0,
-0xbdeb,0x9bb1,0x9bb2,0x9bb3,0xbdec,0x9bb4,0x9bb5,0x9bb6,
-0x9bb7,0x9bb8,0x9bb9,0x9bba,0x9bbb,0x9bbc,0x9bbd,0x9bbe,
-0x9bbf,0x9bc0,0x9bc1,0x9bc2,0x9bc3,0x9bc4,0x9bc5,0x9bc6,
-0x9bc7,0x9bc8,0x9bc9,0x9bca,0x9bcb,0x9bcc,0x9bcd,0x9bce,
-0x9bcf,0x9bd0,0x9bd1,0x9bd2,0x9bd3,0x9bd4,0x9bd5,0x9bd6,
-0x9bd7,0x9bd8,0x9bd9,0x9bda,0x9bdb,0x9bdc,0x9bdd,0x9bde,
-0x9bdf,0x9be0,0x9be1,0x9be2,0x9be3,0x9be4,0x9be5,0x9be6,
-0xbded,0x9be7,0x9be8,0x9be9,0x9bea,0x9beb,0x9bec,0x9bed,
-0x9bee,0x9bef,0x9bf0,0x9bf1,0x9bf2,0x9bf3,0x9bf4,0x9bf5,
-0x9bf6,0x9bf7,0x9bf8,0x9bf9,0x9bfa,0x9bfb,0x9bfc,0x9bfd,
-0xbdee,0xbdef,0x9bfe,0x9c41,0xbdf0,0x9c42,0x9c43,0xbdf1,
-0xbdf2,0x9c44,0xbdf3,0x9c45,0x9c46,0x9c47,0x9c48,0x9c49,
-0xbdf4,0xbdf5,0x9c4a,0x9c4b,0x9c4c,0xbdf6,0x9c4d,0x9c4e,
-0x9c4f,0x9c50,0x9c51,0x9c52,0xbdf7,0xbdf8,0x9c53,0x9c54,
-0xbdf9,0x9c55,0x9c56,0x9c57,0x9c58,0x9c59,0x9c5a,0x9c61,
-/* 0xc400 */
-0x9c62,0x9c63,0x9c64,0x9c65,0x9c66,0x9c67,0x9c68,0x9c69,
-0xbdfa,0x9c6a,0x9c6b,0x9c6c,0x9c6d,0x9c6e,0x9c6f,0x9c70,
-0xbdfb,0x9c71,0x9c72,0x9c73,0x9c74,0x9c75,0x9c76,0x9c77,
-0x9c78,0x9c79,0x9c7a,0x9c81,0x9c82,0x9c83,0x9c84,0x9c85,
-0x9c86,0x9c87,0x9c88,0x9c89,0xbdfc,0x9c8a,0x9c8b,0x9c8c,
-0x9c8d,0x9c8e,0x9c8f,0x9c90,0xbdfd,0x9c91,0x9c92,0x9c93,
-0xbdfe,0x9c94,0x9c95,0x9c96,0xbea1,0x9c97,0x9c98,0x9c99,
-0x9c9a,0x9c9b,0x9c9c,0x9c9d,0xbea2,0xbea3,0x9c9e,0x9c9f,
-0x9ca0,0x9ca1,0x9ca2,0x9ca3,0x9ca4,0x9ca5,0x9ca6,0x9ca7,
-0xbea4,0x9ca8,0x9ca9,0x9caa,0x9cab,0x9cac,0x9cad,0x9cae,
-0x9caf,0x9cb0,0x9cb1,0x9cb2,0x9cb3,0x9cb4,0x9cb5,0x9cb6,
-0x9cb7,0x9cb8,0x9cb9,0x9cba,0x9cbb,0x9cbc,0x9cbd,0x9cbe,
-0x9cbf,0x9cc0,0x9cc1,0x9cc2,0xbea5,0xbea6,0x9cc3,0x9cc4,
-0xbea7,0x9cc5,0x9cc6,0x9cc7,0xbea8,0x9cc8,0x9cc9,0x9cca,
-0x9ccb,0x9ccc,0x9ccd,0x9cce,0xbea9,0xbeaa,0x9ccf,0x9cd0,
-0x9cd1,0xbeab,0x9cd2,0x9cd3,0x9cd4,0x9cd5,0x9cd6,0x9cd7,
-0xbeac,0x9cd8,0x9cd9,0x9cda,0x9cdb,0x9cdc,0x9cdd,0x9cde,
-0x9cdf,0x9ce0,0x9ce1,0x9ce2,0x9ce3,0x9ce4,0x9ce5,0x9ce6,
-0x9ce7,0x9ce8,0x9ce9,0x9cea,0xbead,0x9ceb,0x9cec,0x9ced,
-0x9cee,0x9cef,0x9cf0,0x9cf1,0xbeae,0x9cf2,0x9cf3,0x9cf4,
-0x9cf5,0x9cf6,0x9cf7,0x9cf8,0x9cf9,0x9cfa,0x9cfb,0x9cfc,
-0x9cfd,0x9cfe,0x9d41,0x9d42,0x9d43,0x9d44,0x9d45,0x9d46,
-0x9d47,0x9d48,0x9d49,0x9d4a,0x9d4b,0x9d4c,0x9d4d,0x9d4e,
-0xbeaf,0x9d4f,0x9d50,0x9d51,0xbeb0,0x9d52,0x9d53,0x9d54,
-0x9d55,0x9d56,0x9d57,0x9d58,0x9d59,0x9d5a,0x9d61,0x9d62,
-0x9d63,0x9d64,0x9d65,0x9d66,0x9d67,0x9d68,0x9d69,0x9d6a,
-0x9d6b,0x9d6c,0x9d6d,0x9d6e,0x9d6f,0x9d70,0x9d71,0x9d72,
-0x9d73,0x9d74,0x9d75,0x9d76,0x9d77,0x9d78,0x9d79,0x9d7a,
-0x9d81,0x9d82,0x9d83,0x9d84,0x9d85,0x9d86,0x9d87,0x9d88,
-0x9d89,0xbeb1,0x9d8a,0x9d8b,0x9d8c,0x9d8d,0x9d8e,0x9d8f,
-0xbeb2,0xbeb3,0x9d90,0x9d91,0xbeb4,0x9d92,0x9d93,0x9d94,
-0xbeb5,0x9d95,0xbeb6,0x9d96,0x9d97,0x9d98,0x9d99,0xbeb7,
-/* 0xc500 */
-0xbeb8,0xbeb9,0x9d9a,0x9d9b,0x9d9c,0x9d9d,0x9d9e,0x9d9f,
-0x9da0,0x9da1,0x9da2,0x9da3,0xbeba,0x9da4,0x9da5,0x9da6,
-0xbebb,0x9da7,0x9da8,0x9da9,0xbebc,0x9daa,0x9dab,0x9dac,
-0x9dad,0x9dae,0x9daf,0x9db0,0xbebd,0x9db1,0x9db2,0x9db3,
-0x9db4,0x9db5,0x9db6,0x9db7,0x9db8,0x9db9,0x9dba,0x9dbb,
-0xbebe,0xbebf,0x9dbc,0x9dbd,0xbec0,0x9dbe,0x9dbf,0x9dc0,
-0xbec1,0x9dc1,0x9dc2,0x9dc3,0x9dc4,0x9dc5,0x9dc6,0x9dc7,
-0xbec2,0xbec3,0x9dc8,0xbec4,0x9dc9,0xbec5,0x9dca,0x9dcb,
-0x9dcc,0x9dcd,0x9dce,0x9dcf,0xbec6,0xbec7,0x9dd0,0x9dd1,
-0xbec8,0xbec9,0xbeca,0x9dd2,0xbecb,0xbecc,0xbecd,0x9dd3,
-0x9dd4,0x9dd5,0x9dd6,0xbece,0xbecf,0xbed0,0x9dd7,0xbed1,
-0xbed2,0xbed3,0x9dd8,0x9dd9,0x9dda,0xbed4,0xbed5,0x9ddb,
-0xbed6,0xbed7,0x9ddc,0x9ddd,0xbed8,0x9dde,0x9ddf,0x9de0,
-0xbed9,0x9de1,0x9de2,0x9de3,0x9de4,0x9de5,0x9de6,0x9de7,
-0xbeda,0xbedb,0x9de8,0xbedc,0xbedd,0xbede,0x9de9,0x9dea,
-0x9deb,0x9dec,0x9ded,0x9dee,0xbedf,0xbee0,0x9def,0x9df0,
-0xbee1,0x9df1,0x9df2,0x9df3,0xbee2,0x9df4,0x9df5,0xbee3,
-0x9df6,0x9df7,0x9df8,0x9df9,0xbee4,0xbee5,0x9dfa,0xbee6,
-0x9dfb,0xbee7,0x9dfc,0x9dfd,0x9dfe,0xbee8,0x9e41,0xbee9,
-0xbeea,0x9e42,0x9e43,0x9e44,0xbeeb,0x9e45,0x9e46,0x9e47,
-0xbeec,0x9e48,0x9e49,0x9e4a,0x9e4b,0x9e4c,0x9e4d,0x9e4e,
-0x9e4f,0xbeed,0x9e50,0x9e51,0x9e52,0x9e53,0x9e54,0x9e55,
-0x9e56,0x9e57,0x9e58,0x9e59,0xbeee,0xbeef,0x9e5a,0x9e61,
-0xbef0,0xbef1,0x9e62,0xbef2,0xbef3,0xbef4,0xbef5,0x9e63,
-0x9e64,0x9e65,0x9e66,0x9e67,0xbef6,0xbef7,0xbef8,0xbef9,
-0xbefa,0xbefb,0xbefc,0x9e68,0xbefd,0x9e69,0xbefe,0x9e6a,
-0xbfa1,0xbfa2,0x9e6b,0x9e6c,0xbfa3,0x9e6d,0x9e6e,0x9e6f,
-0xbfa4,0x9e70,0x9e71,0x9e72,0x9e73,0x9e74,0x9e75,0x9e76,
-0xbfa5,0xbfa6,0x9e77,0xbfa7,0x9e78,0xbfa8,0x9e79,0x9e7a,
-0x9e81,0x9e82,0x9e83,0x9e84,0xbfa9,0xbfaa,0xbfab,0x9e85,
-0xbfac,0x9e86,0x9e87,0x9e88,0xbfad,0x9e89,0xbfae,0xbfaf,
-0x9e8a,0x9e8b,0x9e8c,0x9e8d,0xbfb0,0xbfb1,0xbfb2,0xbfb3,
-/* 0xc600 */
-0xbfb4,0xbfb5,0x9e8e,0x9e8f,0x9e90,0xbfb6,0xbfb7,0xbfb8,
-0xbfb9,0x9e91,0x9e92,0x9e93,0xbfba,0x9e94,0x9e95,0x9e96,
-0xbfbb,0x9e97,0x9e98,0x9e99,0x9e9a,0x9e9b,0x9e9c,0x9e9d,
-0xbfbc,0xbfbd,0x9e9e,0xbfbe,0xbfbf,0x9e9f,0x9ea0,0x9ea1,
-0x9ea2,0x9ea3,0x9ea4,0x9ea5,0xbfc0,0xbfc1,0x9ea6,0x9ea7,
-0xbfc2,0x9ea8,0x9ea9,0x9eaa,0xbfc3,0xbfc4,0xbfc5,0x9eab,
-0xbfc6,0x9eac,0x9ead,0xbfc7,0xbfc8,0xbfc9,0x9eae,0xbfca,
-0x9eaf,0xbfcb,0x9eb0,0xbfcc,0x9eb1,0x9eb2,0x9eb3,0x9eb4,
-0xbfcd,0xbfce,0x9eb5,0x9eb6,0xbfcf,0x9eb7,0x9eb8,0x9eb9,
-0xbfd0,0x9eba,0x9ebb,0x9ebc,0x9ebd,0x9ebe,0x9ebf,0x9ec0,
-0xbfd1,0xbfd2,0x9ec1,0xbfd3,0xbfd4,0xbfd5,0x9ec2,0x9ec3,
-0x9ec4,0x9ec5,0x9ec6,0x9ec7,0xbfd6,0xbfd7,0x9ec8,0x9ec9,
-0xbfd8,0x9eca,0x9ecb,0x9ecc,0x9ecd,0x9ece,0x9ecf,0x9ed0,
-0x9ed1,0x9ed2,0x9ed3,0x9ed4,0xbfd9,0x9ed5,0x9ed6,0xbfda,
-0x9ed7,0xbfdb,0x9ed8,0x9ed9,0x9eda,0x9edb,0x9edc,0x9edd,
-0xbfdc,0xbfdd,0x9ede,0x9edf,0xbfde,0x9ee0,0x9ee1,0x9ee2,
-0xbfdf,0x9ee3,0x9ee4,0x9ee5,0x9ee6,0x9ee7,0x9ee8,0x9ee9,
-0xbfe0,0xbfe1,0x9eea,0xbfe2,0x9eeb,0xbfe3,0x9eec,0x9eed,
-0x9eee,0x9eef,0x9ef0,0x9ef1,0xbfe4,0xbfe5,0x9ef2,0x9ef3,
-0xbfe6,0x9ef4,0x9ef5,0x9ef6,0xbfe7,0x9ef7,0x9ef8,0x9ef9,
-0x9efa,0x9efb,0x9efc,0x9efd,0xbfe8,0xbfe9,0x9efe,0xbfea,
-0x9f41,0xbfeb,0x9f42,0x9f43,0x9f44,0x9f45,0x9f46,0x9f47,
-0xbfec,0xbfed,0x9f48,0x9f49,0xbfee,0x9f4a,0x9f4b,0x9f4c,
-0xbfef,0xbff0,0xbff1,0x9f4d,0x9f4e,0x9f4f,0x9f50,0x9f51,
-0xbff2,0xbff3,0x9f52,0xbff4,0x9f53,0xbff5,0x9f54,0x9f55,
-0x9f56,0x9f57,0x9f58,0x9f59,0xbff6,0xbff7,0x9f5a,0x9f61,
-0xbff8,0x9f62,0x9f63,0x9f64,0xbff9,0x9f65,0x9f66,0x9f67,
-0x9f68,0x9f69,0x9f6a,0x9f6b,0xbffa,0xbffb,0x9f6c,0x9f6d,
-0xbffc,0xbffd,0x9f6e,0x9f6f,0x9f70,0x9f71,0x9f72,0x9f73,
-0xbffe,0xc0a1,0x9f74,0x9f75,0xc0a2,0x9f76,0x9f77,0x9f78,
-0xc0a3,0x9f79,0x9f7a,0x9f81,0x9f82,0x9f83,0x9f84,0x9f85,
-0xc0a4,0xc0a5,0x9f86,0x9f87,0x9f88,0xc0a6,0x9f89,0x9f8a,
-/* 0xc700 */
-0x9f8b,0x9f8c,0x9f8d,0x9f8e,0xc0a7,0xc0a8,0x9f8f,0x9f90,
-0xc0a9,0x9f91,0x9f92,0x9f93,0xc0aa,0x9f94,0x9f95,0x9f96,
-0x9f97,0x9f98,0x9f99,0x9f9a,0xc0ab,0xc0ac,0x9f9b,0xc0ad,
-0x9f9c,0xc0ae,0x9f9d,0x9f9e,0x9f9f,0x9fa0,0x9fa1,0x9fa2,
-0xc0af,0xc0b0,0x9fa3,0x9fa4,0xc0b1,0x9fa5,0x9fa6,0x9fa7,
-0xc0b2,0x9fa8,0x9fa9,0x9faa,0x9fab,0x9fac,0x9fad,0x9fae,
-0xc0b3,0xc0b4,0x9faf,0xc0b5,0x9fb0,0xc0b6,0x9fb1,0xc0b7,
-0x9fb2,0x9fb3,0x9fb4,0x9fb5,0xc0b8,0xc0b9,0x9fb6,0x9fb7,
-0xc0ba,0x9fb8,0x9fb9,0x9fba,0xc0bb,0x9fbb,0x9fbc,0x9fbd,
-0x9fbe,0x9fbf,0xc0bc,0x9fc0,0xc0bd,0xc0be,0x9fc1,0xc0bf,
-0x9fc2,0xc0c0,0xc0c1,0xc0c2,0xc0c3,0xc0c4,0xc0c5,0xc0c6,
-0xc0c7,0x9fc3,0x9fc4,0x9fc5,0xc0c8,0x9fc6,0x9fc7,0x9fc8,
-0xc0c9,0x9fc9,0x9fca,0x9fcb,0x9fcc,0x9fcd,0x9fce,0x9fcf,
-0xc0ca,0x9fd0,0x9fd1,0xc0cb,0x9fd2,0x9fd3,0x9fd4,0x9fd5,
-0x9fd6,0x9fd7,0x9fd8,0x9fd9,0xc0cc,0xc0cd,0x9fda,0x9fdb,
-0xc0ce,0x9fdc,0x9fdd,0x9fde,0xc0cf,0xc0d0,0xc0d1,0x9fdf,
-0x9fe0,0x9fe1,0x9fe2,0xc0d2,0xc0d3,0xc0d4,0x9fe3,0xc0d5,
-0xc0d6,0xc0d7,0xc0d8,0x9fe4,0x9fe5,0x9fe6,0xc0d9,0x9fe7,
-0xc0da,0xc0db,0x9fe8,0x9fe9,0xc0dc,0x9fea,0xc0dd,0xc0de,
-0xc0df,0x9feb,0xc0e0,0x9fec,0x9fed,0x9fee,0x9fef,0x9ff0,
-0xc0e1,0xc0e2,0x9ff1,0xc0e3,0xc0e4,0xc0e5,0xc0e6,0x9ff2,
-0x9ff3,0x9ff4,0x9ff5,0x9ff6,0xc0e7,0xc0e8,0x9ff7,0x9ff8,
-0xc0e9,0x9ff9,0x9ffa,0x9ffb,0xc0ea,0x9ffc,0x9ffd,0x9ffe,
-0xa041,0xa042,0xa043,0xa044,0xc0eb,0xc0ec,0xa045,0xc0ed,
-0xc0ee,0xc0ef,0xa046,0xa047,0xa048,0xa049,0xa04a,0xa04b,
-0xc0f0,0xc0f1,0xa04c,0xa04d,0xc0f2,0xa04e,0xc0f3,0xa04f,
-0xc0f4,0xa050,0xa051,0xa052,0xa053,0xa054,0xa055,0xa056,
-0xc0f5,0xa057,0xa058,0xa059,0xa05a,0xc0f6,0xa061,0xa062,
-0xa063,0xa064,0xa065,0xa066,0xc0f7,0xa067,0xa068,0xa069,
-0xc0f8,0xa06a,0xa06b,0xa06c,0xc0f9,0xa06d,0xa06e,0xa06f,
-0xa070,0xa071,0xa072,0xa073,0xa074,0xa075,0xa076,0xa077,
-0xa078,0xa079,0xa07a,0xa081,0xa082,0xa083,0xa084,0xa085,
-/* 0xc800 */
-0xc0fa,0xc0fb,0xa086,0xa087,0xc0fc,0xa088,0xa089,0xa08a,
-0xc0fd,0xa08b,0xc0fe,0xa08c,0xa08d,0xa08e,0xa08f,0xa090,
-0xc1a1,0xc1a2,0xa091,0xc1a3,0xa092,0xc1a4,0xc1a5,0xa093,
-0xa094,0xa095,0xa096,0xa097,0xc1a6,0xc1a7,0xa098,0xa099,
-0xc1a8,0xa09a,0xa09b,0xa09c,0xc1a9,0xa09d,0xa09e,0xa09f,
-0xa0a0,0xa0a1,0xa0a2,0xa0a3,0xc1aa,0xc1ab,0xa0a4,0xc1ac,
-0xa0a5,0xc1ad,0xa0a6,0xa0a7,0xa0a8,0xa0a9,0xa0aa,0xa0ab,
-0xc1ae,0xa0ac,0xa0ad,0xa0ae,0xc1af,0xa0af,0xa0b0,0xa0b1,
-0xc1b0,0xa0b2,0xa0b3,0xa0b4,0xa0b5,0xa0b6,0xa0b7,0xa0b8,
-0xc1b1,0xc1b2,0xa0b9,0xa0ba,0xc1b3,0xc1b4,0xa0bb,0xa0bc,
-0xa0bd,0xa0be,0xa0bf,0xa0c0,0xc1b5,0xa0c1,0xa0c2,0xa0c3,
-0xa0c4,0xa0c5,0xa0c6,0xa0c7,0xa0c8,0xa0c9,0xa0ca,0xa0cb,
-0xa0cc,0xa0cd,0xa0ce,0xa0cf,0xa0d0,0xa0d1,0xa0d2,0xa0d3,
-0xa0d4,0xa0d5,0xa0d6,0xa0d7,0xa0d8,0xa0d9,0xa0da,0xa0db,
-0xc1b6,0xc1b7,0xa0dc,0xa0dd,0xc1b8,0xa0de,0xa0df,0xa0e0,
-0xc1b9,0xa0e1,0xc1ba,0xa0e2,0xa0e3,0xa0e4,0xa0e5,0xa0e6,
-0xc1bb,0xc1bc,0xa0e7,0xc1bd,0xa0e8,0xc1be,0xc1bf,0xc1c0,
-0xa0e9,0xa0ea,0xa0eb,0xc1c1,0xc1c2,0xc1c3,0xa0ec,0xa0ed,
-0xa0ee,0xa0ef,0xa0f0,0xa0f1,0xc1c4,0xa0f2,0xa0f3,0xa0f4,
-0xa0f5,0xa0f6,0xa0f7,0xa0f8,0xa0f9,0xc1c5,0xa0fa,0xc1c6,
-0xa0fb,0xc1c7,0xa0fc,0xa0fd,0xa0fe,0xa141,0xa142,0xa143,
-0xc1c8,0xa144,0xa145,0xa146,0xa147,0xa148,0xa149,0xa14a,
-0xa14b,0xa14c,0xa14d,0xa14e,0xa14f,0xa150,0xa151,0xa152,
-0xa153,0xa154,0xa155,0xa156,0xc1c9,0xc1ca,0xa157,0xa158,
-0xa159,0xa15a,0xa161,0xa162,0xc1cb,0xa163,0xa164,0xa165,
-0xc1cc,0xa166,0xa167,0xa168,0xc1cd,0xa169,0xa16a,0xa16b,
-0xa16c,0xa16d,0xa16e,0xa16f,0xc1ce,0xc1cf,0xa170,0xc1d0,
-0xa171,0xc1d1,0xa172,0xa173,0xa174,0xa175,0xa176,0xa177,
-0xc1d2,0xc1d3,0xa178,0xa179,0xc1d4,0xa17a,0xa181,0xa182,
-0xa183,0xa184,0xa185,0xa186,0xa187,0xa188,0xa189,0xa18a,
-0xa18b,0xa18c,0xa18d,0xa18e,0xa18f,0xc1d5,0xa190,0xa191,
-0xa192,0xa193,0xa194,0xa195,0xc1d6,0xc1d7,0xa196,0xa197,
-/* 0xc900 */
-0xc1d8,0xa198,0xa199,0xa19a,0xc1d9,0xc1da,0xc1db,0xa19b,
-0xa19c,0xa19d,0xa19e,0xa19f,0xc1dc,0xc1dd,0xa1a0,0xc1de,
-0xa241,0xc1df,0xa242,0xa243,0xa244,0xa245,0xa246,0xa247,
-0xc1e0,0xa248,0xa249,0xa24a,0xa24b,0xa24c,0xa24d,0xa24e,
-0xa24f,0xa250,0xa251,0xa252,0xa253,0xa254,0xa255,0xa256,
-0xa257,0xa258,0xa259,0xa25a,0xc1e1,0xa261,0xa262,0xa263,
-0xa264,0xa265,0xa266,0xa267,0xc1e2,0xa268,0xa269,0xa26a,
-0xa26b,0xa26c,0xa26d,0xa26e,0xa26f,0xa270,0xa271,0xa272,
-0xa273,0xa274,0xa275,0xa276,0xa277,0xa278,0xa279,0xa27a,
-0xa281,0xa282,0xa283,0xa284,0xa285,0xa286,0xa287,0xa288,
-0xc1e3,0xc1e4,0xa289,0xa28a,0xc1e5,0xa28b,0xa28c,0xa28d,
-0xc1e6,0xa28e,0xa28f,0xa290,0xa291,0xa292,0xa293,0xa294,
-0xc1e7,0xc1e8,0xa295,0xc1e9,0xa296,0xa297,0xa298,0xa299,
-0xa29a,0xa29b,0xa29c,0xa29d,0xc1ea,0xa29e,0xa29f,0xa2a0,
-0xc1eb,0xa341,0xa342,0xa343,0xc1ec,0xa344,0xa345,0xa346,
-0xa347,0xa348,0xa349,0xa34a,0xc1ed,0xa34b,0xa34c,0xa34d,
-0xa34e,0xa34f,0xa350,0xa351,0xa352,0xa353,0xa354,0xa355,
-0xc1ee,0xc1ef,0xa356,0xa357,0xc1f0,0xa358,0xa359,0xa35a,
-0xc1f1,0xa361,0xa362,0xa363,0xa364,0xa365,0xa366,0xa367,
-0xc1f2,0xc1f3,0xa368,0xc1f4,0xa369,0xc1f5,0xa36a,0xa36b,
-0xa36c,0xa36d,0xa36e,0xa36f,0xa370,0xa371,0xa372,0xa373,
-0xa374,0xa375,0xa376,0xa377,0xa378,0xa379,0xa37a,0xa381,
-0xa382,0xa383,0xa384,0xa385,0xa386,0xa387,0xa388,0xa389,
-0xa38a,0xa38b,0xa38c,0xa38d,0xa38e,0xa38f,0xa390,0xa391,
-0xc1f6,0xc1f7,0xa392,0xa393,0xc1f8,0xa394,0xa395,0xc1f9,
-0xc1fa,0xa396,0xc1fb,0xa397,0xa398,0xa399,0xa39a,0xa39b,
-0xc1fc,0xc1fd,0xa39c,0xc1fe,0xa39d,0xc2a1,0xc2a2,0xa39e,
-0xa39f,0xc2a3,0xc2a4,0xa3a0,0xc2a5,0xc2a6,0xa441,0xa442,
-0xc2a7,0xa443,0xc2a8,0xa444,0xc2a9,0xa445,0xa446,0xc2aa,
-0xa447,0xa448,0xa449,0xa44a,0xc2ab,0xc2ac,0xa44b,0xc2ad,
-0xc2ae,0xc2af,0xa44c,0xa44d,0xa44e,0xa44f,0xa450,0xa451,
-0xc2b0,0xc2b1,0xa452,0xa453,0xc2b2,0xa454,0xa455,0xa456,
-/* 0xca00 */
-0xc2b3,0xa457,0xa458,0xa459,0xa45a,0xa461,0xa462,0xa463,
-0xc2b4,0xc2b5,0xa464,0xc2b6,0xc2b7,0xc2b8,0xa465,0xa466,
-0xa467,0xa468,0xa469,0xa46a,0xc2b9,0xa46b,0xa46c,0xa46d,
-0xc2ba,0xa46e,0xa46f,0xa470,0xa471,0xa472,0xa473,0xa474,
-0xa475,0xa476,0xa477,0xa478,0xa479,0xa47a,0xa481,0xa482,
-0xa483,0xc2bb,0xa484,0xa485,0xa486,0xa487,0xa488,0xa489,
-0xa48a,0xa48b,0xa48c,0xa48d,0xa48e,0xa48f,0xa490,0xa491,
-0xa492,0xa493,0xa494,0xa495,0xa496,0xa497,0xa498,0xa499,
-0xa49a,0xa49b,0xa49c,0xa49d,0xa49e,0xa49f,0xa4a0,0xa541,
-0xa542,0xa543,0xa544,0xa545,0xc2bc,0xc2bd,0xa546,0xa547,
-0xc2be,0xa548,0xa549,0xa54a,0xc2bf,0xa54b,0xa54c,0xa54d,
-0xa54e,0xa54f,0xa550,0xa551,0xc2c0,0xc2c1,0xa552,0xc2c2,
-0xc2c3,0xc2c4,0xa553,0xa554,0xa555,0xa556,0xa557,0xa558,
-0xc2c5,0xa559,0xa55a,0xa561,0xa562,0xa563,0xa564,0xa565,
-0xa566,0xa567,0xa568,0xa569,0xa56a,0xa56b,0xa56c,0xa56d,
-0xa56e,0xa56f,0xa570,0xa571,0xa572,0xc2c6,0xa573,0xa574,
-0xa575,0xa576,0xa577,0xa578,0xc2c7,0xa579,0xa57a,0xa581,
-0xa582,0xa583,0xa584,0xa585,0xa586,0xa587,0xa588,0xa589,
-0xa58a,0xa58b,0xa58c,0xa58d,0xa58e,0xa58f,0xa590,0xa591,
-0xc2c8,0xa592,0xa593,0xa594,0xa595,0xa596,0xa597,0xa598,
-0xa599,0xa59a,0xa59b,0xa59c,0xa59d,0xa59e,0xa59f,0xa5a0,
-0xa641,0xa642,0xa643,0xa644,0xa645,0xa646,0xa647,0xa648,
-0xa649,0xa64a,0xa64b,0xa64c,0xa64d,0xa64e,0xa64f,0xa650,
-0xa651,0xa652,0xa653,0xa654,0xc2c9,0xc2ca,0xa655,0xa656,
-0xc2cb,0xa657,0xa658,0xa659,0xc2cc,0xa65a,0xa661,0xa662,
-0xa663,0xa664,0xa665,0xa666,0xc2cd,0xc2ce,0xa667,0xc2cf,
-0xa668,0xc2d0,0xa669,0xc2d1,0xa66a,0xa66b,0xa66c,0xa66d,
-0xc2d2,0xc2d3,0xa66e,0xa66f,0xa670,0xa671,0xa672,0xa673,
-0xc2d4,0xa674,0xa675,0xa676,0xa677,0xa678,0xa679,0xa67a,
-0xa681,0xa682,0xa683,0xa684,0xc2d5,0xa685,0xa686,0xa687,
-0xa688,0xa689,0xa68a,0xa68b,0xc2d6,0xa68c,0xa68d,0xa68e,
-0xa68f,0xa690,0xa691,0xa692,0xa693,0xa694,0xa695,0xa696,
-/* 0xcb00 */
-0xa697,0xa698,0xa699,0xa69a,0xa69b,0xa69c,0xa69d,0xa69e,
-0xc2d7,0xa69f,0xa6a0,0xa741,0xa742,0xa743,0xa744,0xa745,
-0xc2d8,0xa746,0xa747,0xa748,0xc2d9,0xa749,0xa74a,0xa74b,
-0xc2da,0xa74c,0xa74d,0xa74e,0xa74f,0xa750,0xa751,0xa752,
-0xc2db,0xc2dc,0xa753,0xa754,0xa755,0xa756,0xa757,0xa758,
-0xa759,0xa75a,0xa761,0xa762,0xa763,0xa764,0xa765,0xa766,
-0xa767,0xa768,0xa769,0xa76a,0xa76b,0xa76c,0xa76d,0xa76e,
-0xa76f,0xa770,0xa771,0xa772,0xa773,0xa774,0xa775,0xa776,
-0xa777,0xc2dd,0xa778,0xa779,0xa77a,0xa781,0xa782,0xa783,
-0xc2de,0xc2df,0xa784,0xa785,0xc2e0,0xa786,0xa787,0xa788,
-0xc2e1,0xa789,0xa78a,0xa78b,0xa78c,0xa78d,0xa78e,0xa78f,
-0xc2e2,0xc2e3,0xa790,0xa791,0xa792,0xc2e4,0xa793,0xa794,
-0xa795,0xa796,0xa797,0xa798,0xc2e5,0xa799,0xa79a,0xa79b,
-0xa79c,0xa79d,0xa79e,0xa79f,0xa7a0,0xa841,0xa842,0xa843,
-0xa844,0xa845,0xa846,0xa847,0xa848,0xa849,0xa84a,0xa84b,
-0xc2e6,0xc2e7,0xa84c,0xa84d,0xa84e,0xa84f,0xa850,0xa851,
-0xa852,0xa853,0xa854,0xa855,0xa856,0xa857,0xa858,0xa859,
-0xa85a,0xa861,0xa862,0xa863,0xa864,0xa865,0xa866,0xa867,
-0xa868,0xa869,0xa86a,0xa86b,0xa86c,0xa86d,0xa86e,0xa86f,
-0xa870,0xa871,0xa872,0xa873,0xc2e8,0xa874,0xa875,0xa876,
-0xa877,0xa878,0xa879,0xa87a,0xa881,0xa882,0xa883,0xa884,
-0xa885,0xa886,0xa887,0xa888,0xa889,0xa88a,0xa88b,0xa88c,
-0xa88d,0xa88e,0xa88f,0xa890,0xa891,0xa892,0xa893,0xa894,
-0xc2e9,0xa895,0xa896,0xa897,0xa898,0xa899,0xa89a,0xa89b,
-0xa89c,0xa89d,0xa89e,0xa89f,0xa8a0,0xa941,0xa942,0xa943,
-0xa944,0xa945,0xa946,0xa947,0xa948,0xa949,0xa94a,0xa94b,
-0xa94c,0xa94d,0xa94e,0xa94f,0xc2ea,0xa950,0xa951,0xa952,
-0xa953,0xa954,0xa955,0xa956,0xa957,0xa958,0xa959,0xa95a,
-0xa961,0xa962,0xa963,0xa964,0xc2eb,0xa965,0xa966,0xc2ec,
-0xa967,0xc2ed,0xa968,0xa969,0xa96a,0xa96b,0xa96c,0xa96d,
-0xa96e,0xa96f,0xa970,0xa971,0xa972,0xa973,0xa974,0xa975,
-0xa976,0xa977,0xa978,0xa979,0xa97a,0xa981,0xa982,0xa983,
-/* 0xcc00 */
-0xa984,0xa985,0xa986,0xa987,0xa988,0xa989,0xa98a,0xa98b,
-0xa98c,0xa98d,0xa98e,0xa98f,0xc2ee,0xc2ef,0xa990,0xa991,
-0xc2f0,0xa992,0xa993,0xa994,0xc2f1,0xa995,0xa996,0xa997,
-0xa998,0xa999,0xa99a,0xa99b,0xc2f2,0xc2f3,0xa99c,0xa99d,
-0xa99e,0xc2f4,0xc2f5,0xa99f,0xa9a0,0xaa41,0xaa42,0xc2f6,
-0xc2f7,0xc2f8,0xaa43,0xaa44,0xc2f9,0xaa45,0xc2fa,0xaa46,
-0xc2fb,0xaa47,0xaa48,0xaa49,0xaa4a,0xaa4b,0xaa4c,0xaa4d,
-0xc2fc,0xc2fd,0xaa4e,0xc2fe,0xc3a1,0xc3a2,0xc3a3,0xaa4f,
-0xaa50,0xaa51,0xaa52,0xaa53,0xc3a4,0xc3a5,0xaa54,0xaa55,
-0xc3a6,0xaa56,0xaa57,0xaa58,0xc3a7,0xaa59,0xaa5a,0xaa61,
-0xaa62,0xaa63,0xaa64,0xaa65,0xc3a8,0xc3a9,0xaa66,0xc3aa,
-0xc3ab,0xc3ac,0xaa67,0xaa68,0xaa69,0xaa6a,0xaa6b,0xaa6c,
-0xc3ad,0xaa6d,0xaa6e,0xaa6f,0xc3ae,0xaa70,0xc3af,0xaa71,
-0xc3b0,0xaa72,0xaa73,0xaa74,0xaa75,0xaa76,0xaa77,0xaa78,
-0xc3b1,0xaa79,0xaa7a,0xaa81,0xaa82,0xc3b2,0xaa83,0xaa84,
-0xaa85,0xaa86,0xaa87,0xaa88,0xaa89,0xaa8a,0xaa8b,0xaa8c,
-0xaa8d,0xaa8e,0xaa8f,0xaa90,0xaa91,0xaa92,0xaa93,0xaa94,
-0xaa95,0xaa96,0xaa97,0xaa98,0xaa99,0xaa9a,0xaa9b,0xaa9c,
-0xaa9d,0xaa9e,0xaa9f,0xaaa0,0xab41,0xab42,0xab43,0xab44,
-0xc3b3,0xc3b4,0xab45,0xab46,0xc3b5,0xab47,0xab48,0xab49,
-0xc3b6,0xab4a,0xab4b,0xab4c,0xab4d,0xab4e,0xab4f,0xab50,
-0xc3b7,0xc3b8,0xab51,0xc3b9,0xc3ba,0xc3bb,0xab52,0xab53,
-0xab54,0xab55,0xab56,0xab57,0xc3bc,0xc3bd,0xab58,0xab59,
-0xc3be,0xab5a,0xab61,0xab62,0xc3bf,0xab63,0xab64,0xab65,
-0xab66,0xab67,0xab68,0xab69,0xc3c0,0xc3c1,0xab6a,0xc3c2,
-0xab6b,0xc3c3,0xab6c,0xab6d,0xab6e,0xab6f,0xab70,0xab71,
-0xc3c4,0xab72,0xab73,0xab74,0xc3c5,0xab75,0xab76,0xab77,
-0xab78,0xab79,0xab7a,0xab81,0xab82,0xab83,0xab84,0xab85,
-0xab86,0xab87,0xab88,0xab89,0xc3c6,0xab8a,0xab8b,0xab8c,
-0xab8d,0xab8e,0xab8f,0xab90,0xc3c7,0xab91,0xab92,0xab93,
-0xc3c8,0xab94,0xab95,0xab96,0xab97,0xab98,0xab99,0xab9a,
-0xab9b,0xab9c,0xab9d,0xab9e,0xab9f,0xaba0,0xac41,0xac42,
-/* 0xcd00 */
-0xac43,0xc3c9,0xac44,0xac45,0xac46,0xac47,0xac48,0xac49,
-0xc3ca,0xc3cb,0xac4a,0xac4b,0xc3cc,0xac4c,0xac4d,0xac4e,
-0xc3cd,0xac4f,0xac50,0xac51,0xac52,0xac53,0xac54,0xac55,
-0xc3ce,0xc3cf,0xac56,0xc3d0,0xac57,0xc3d1,0xac58,0xac59,
-0xac5a,0xac61,0xac62,0xac63,0xc3d2,0xac64,0xac65,0xac66,
-0xc3d3,0xac67,0xac68,0xac69,0xc3d4,0xac6a,0xac6b,0xac6c,
-0xac6d,0xac6e,0xac6f,0xac70,0xac71,0xac72,0xac73,0xac74,
-0xac75,0xc3d5,0xac76,0xac77,0xac78,0xac79,0xac7a,0xac81,
-0xac82,0xac83,0xac84,0xac85,0xac86,0xac87,0xac88,0xac89,
-0xac8a,0xac8b,0xac8c,0xac8d,0xac8e,0xac8f,0xac90,0xac91,
-0xac92,0xac93,0xac94,0xac95,0xac96,0xac97,0xac98,0xac99,
-0xac9a,0xac9b,0xac9c,0xac9d,0xc3d6,0xac9e,0xac9f,0xaca0,
-0xc3d7,0xad41,0xad42,0xad43,0xc3d8,0xad44,0xad45,0xad46,
-0xad47,0xad48,0xad49,0xad4a,0xc3d9,0xc3da,0xad4b,0xc3db,
-0xad4c,0xc3dc,0xad4d,0xad4e,0xad4f,0xad50,0xad51,0xad52,
-0xc3dd,0xad53,0xad54,0xad55,0xad56,0xad57,0xad58,0xad59,
-0xad5a,0xad61,0xad62,0xad63,0xad64,0xad65,0xad66,0xad67,
-0xc3de,0xad68,0xad69,0xad6a,0xad6b,0xad6c,0xad6d,0xad6e,
-0xad6f,0xad70,0xad71,0xad72,0xc3df,0xc3e0,0xad73,0xad74,
-0xc3e1,0xad75,0xad76,0xad77,0xc3e2,0xad78,0xad79,0xad7a,
-0xad81,0xad82,0xad83,0xad84,0xc3e3,0xc3e4,0xad85,0xc3e5,
-0xad86,0xc3e6,0xad87,0xad88,0xad89,0xad8a,0xad8b,0xad8c,
-0xc3e7,0xad8d,0xad8e,0xad8f,0xad90,0xad91,0xad92,0xad93,
-0xad94,0xad95,0xad96,0xad97,0xad98,0xad99,0xad9a,0xad9b,
-0xad9c,0xad9d,0xad9e,0xad9f,0xc3e8,0xada0,0xae41,0xae42,
-0xae43,0xae44,0xae45,0xae46,0xc3e9,0xae47,0xae48,0xae49,
-0xc3ea,0xae4a,0xae4b,0xae4c,0xae4d,0xae4e,0xae4f,0xae50,
-0xae51,0xae52,0xae53,0xae54,0xae55,0xae56,0xae57,0xae58,
-0xae59,0xae5a,0xae61,0xae62,0xae63,0xae64,0xae65,0xae66,
-0xc3eb,0xae67,0xae68,0xae69,0xc3ec,0xae6a,0xae6b,0xae6c,
-0xc3ed,0xae6d,0xae6e,0xae6f,0xae70,0xae71,0xae72,0xae73,
-0xc3ee,0xc3ef,0xae74,0xc3f0,0xae75,0xc3f1,0xae76,0xae77,
-/* 0xce00 */
-0xae78,0xae79,0xae7a,0xae81,0xc3f2,0xae82,0xae83,0xae84,
-0xc3f3,0xae85,0xae86,0xae87,0xc3f4,0xae88,0xae89,0xae8a,
-0xae8b,0xae8c,0xae8d,0xae8e,0xc3f5,0xae8f,0xae90,0xae91,
-0xae92,0xc3f6,0xae93,0xae94,0xae95,0xae96,0xae97,0xae98,
-0xc3f7,0xc3f8,0xae99,0xae9a,0xc3f9,0xae9b,0xae9c,0xae9d,
-0xc3fa,0xae9e,0xae9f,0xaea0,0xaf41,0xaf42,0xaf43,0xaf44,
-0xc3fb,0xc3fc,0xaf45,0xc3fd,0xaf46,0xc3fe,0xaf47,0xaf48,
-0xaf49,0xaf4a,0xaf4b,0xaf4c,0xaf4d,0xaf4e,0xaf4f,0xaf50,
-0xaf51,0xaf52,0xaf53,0xaf54,0xaf55,0xaf56,0xaf57,0xaf58,
-0xaf59,0xaf5a,0xaf61,0xaf62,0xaf63,0xaf64,0xaf65,0xaf66,
-0xaf67,0xaf68,0xaf69,0xaf6a,0xaf6b,0xaf6c,0xaf6d,0xaf6e,
-0xc4a1,0xc4a2,0xaf6f,0xaf70,0xc4a3,0xaf71,0xaf72,0xc4a4,
-0xc4a5,0xc4a6,0xaf73,0xaf74,0xaf75,0xaf76,0xaf77,0xaf78,
-0xc4a7,0xc4a8,0xaf79,0xc4a9,0xaf7a,0xc4aa,0xaf81,0xaf82,
-0xaf83,0xaf84,0xaf85,0xaf86,0xc4ab,0xc4ac,0xaf87,0xaf88,
-0xc4ad,0xaf89,0xaf8a,0xaf8b,0xc4ae,0xaf8c,0xaf8d,0xaf8e,
-0xaf8f,0xaf90,0xaf91,0xaf92,0xc4af,0xc4b0,0xaf93,0xc4b1,
-0xaf94,0xc4b2,0xaf95,0xaf96,0xaf97,0xaf98,0xaf99,0xaf9a,
-0xc4b3,0xc4b4,0xaf9b,0xaf9c,0xc4b5,0xaf9d,0xaf9e,0xaf9f,
-0xc4b6,0xafa0,0xb041,0xb042,0xb043,0xb044,0xb045,0xb046,
-0xc4b7,0xc4b8,0xb047,0xc4b9,0xc4ba,0xc4bb,0xb048,0xb049,
-0xb04a,0xb04b,0xb04c,0xb04d,0xc4bc,0xc4bd,0xb04e,0xb04f,
-0xb050,0xb051,0xb052,0xb053,0xb054,0xb055,0xb056,0xb057,
-0xb058,0xb059,0xb05a,0xb061,0xb062,0xb063,0xb064,0xb065,
-0xb066,0xc4be,0xb067,0xb068,0xb069,0xb06a,0xb06b,0xb06c,
-0xb06d,0xb06e,0xb06f,0xb070,0xb071,0xb072,0xb073,0xb074,
-0xb075,0xb076,0xb077,0xb078,0xb079,0xb07a,0xb081,0xb082,
-0xb083,0xb084,0xb085,0xb086,0xb087,0xb088,0xb089,0xb08a,
-0xb08b,0xb08c,0xb08d,0xb08e,0xc4bf,0xc4c0,0xb08f,0xb090,
-0xc4c1,0xb091,0xb092,0xc4c2,0xc4c3,0xb093,0xb094,0xb095,
-0xb096,0xb097,0xb098,0xb099,0xc4c4,0xc4c5,0xb09a,0xc4c6,
-0xc4c7,0xc4c8,0xb09b,0xb09c,0xb09d,0xb09e,0xb09f,0xb0a0,
-/* 0xcf00 */
-0xc4c9,0xc4ca,0xb141,0xb142,0xc4cb,0xb143,0xb144,0xb145,
-0xc4cc,0xb146,0xb147,0xb148,0xb149,0xb14a,0xb14b,0xb14c,
-0xc4cd,0xc4ce,0xb14d,0xc4cf,0xb14e,0xc4d0,0xb14f,0xb150,
-0xb151,0xb152,0xb153,0xb154,0xc4d1,0xb155,0xb156,0xb157,
-0xc4d2,0xb158,0xb159,0xb15a,0xc4d3,0xb161,0xb162,0xb163,
-0xb164,0xb165,0xb166,0xb167,0xc4d4,0xc4d5,0xb168,0xc4d6,
-0xc4d7,0xc4d8,0xb169,0xb16a,0xb16b,0xb16c,0xb16d,0xb16e,
-0xc4d9,0xb16f,0xb170,0xb171,0xb172,0xb173,0xb174,0xb175,
-0xb176,0xb177,0xb178,0xb179,0xb17a,0xb181,0xb182,0xb183,
-0xb184,0xb185,0xb186,0xb187,0xb188,0xb189,0xb18a,0xb18b,
-0xb18c,0xb18d,0xb18e,0xb18f,0xc4da,0xc4db,0xb190,0xb191,
-0xc4dc,0xb192,0xb193,0xb194,0xc4dd,0xb195,0xb196,0xb197,
-0xb198,0xb199,0xb19a,0xb19b,0xc4de,0xc4df,0xb19c,0xc4e0,
-0xb19d,0xc4e1,0xb19e,0xb19f,0xb1a0,0xb241,0xb242,0xb243,
-0xc4e2,0xc4e3,0xb244,0xb245,0xc4e4,0xb246,0xb247,0xb248,
-0xc4e5,0xb249,0xb24a,0xb24b,0xb24c,0xb24d,0xb24e,0xb24f,
-0xc4e6,0xb250,0xb251,0xb252,0xb253,0xc4e7,0xb254,0xb255,
-0xb256,0xb257,0xb258,0xb259,0xc4e8,0xb25a,0xb261,0xb262,
-0xb263,0xb264,0xb265,0xb266,0xb267,0xb268,0xb269,0xb26a,
-0xb26b,0xb26c,0xb26d,0xb26e,0xb26f,0xb270,0xb271,0xb272,
-0xb273,0xc4e9,0xb274,0xb275,0xb276,0xb277,0xb278,0xb279,
-0xc4ea,0xb27a,0xb281,0xb282,0xb283,0xb284,0xb285,0xb286,
-0xc4eb,0xb287,0xb288,0xb289,0xb28a,0xb28b,0xb28c,0xb28d,
-0xb28e,0xb28f,0xb290,0xb291,0xb292,0xb293,0xb294,0xb295,
-0xb296,0xb297,0xb298,0xb299,0xc4ec,0xb29a,0xb29b,0xb29c,
-0xb29d,0xb29e,0xb29f,0xb2a0,0xb341,0xb342,0xb343,0xb344,
-0xb345,0xb346,0xb347,0xb348,0xb349,0xb34a,0xb34b,0xb34c,
-0xb34d,0xb34e,0xb34f,0xb350,0xb351,0xb352,0xb353,0xb354,
-0xc4ed,0xc4ee,0xb355,0xb356,0xc4ef,0xb357,0xb358,0xb359,
-0xc4f0,0xb35a,0xb361,0xb362,0xb363,0xb364,0xb365,0xb366,
-0xc4f1,0xc4f2,0xb367,0xc4f3,0xb368,0xc4f4,0xb369,0xb36a,
-0xb36b,0xb36c,0xb36d,0xb36e,0xc4f5,0xb36f,0xb370,0xb371,
-/* 0xd000 */
-0xc4f6,0xb372,0xb373,0xb374,0xc4f7,0xb375,0xb376,0xb377,
-0xb378,0xb379,0xb37a,0xb381,0xb382,0xb383,0xb384,0xb385,
-0xb386,0xc4f8,0xb387,0xb388,0xb389,0xb38a,0xb38b,0xb38c,
-0xc4f9,0xb38d,0xb38e,0xb38f,0xb390,0xb391,0xb392,0xb393,
-0xb394,0xb395,0xb396,0xb397,0xb398,0xb399,0xb39a,0xb39b,
-0xb39c,0xb39d,0xb39e,0xb39f,0xb3a0,0xc4fa,0xb441,0xb442,
-0xb443,0xb444,0xb445,0xb446,0xc4fb,0xc4fc,0xb447,0xb448,
-0xc4fd,0xb449,0xb44a,0xb44b,0xc4fe,0xb44c,0xb44d,0xb44e,
-0xb44f,0xb450,0xb451,0xb452,0xc5a1,0xc5a2,0xb453,0xc5a3,
-0xb454,0xc5a4,0xb455,0xb456,0xb457,0xb458,0xb459,0xb45a,
-0xc5a5,0xb461,0xb462,0xb463,0xc5a6,0xb464,0xb465,0xb466,
-0xc5a7,0xb467,0xb468,0xb469,0xb46a,0xb46b,0xb46c,0xb46d,
-0xc5a8,0xb46e,0xb46f,0xb470,0xb471,0xb472,0xb473,0xb474,
-0xb475,0xb476,0xb477,0xb478,0xc5a9,0xc5aa,0xb479,0xb47a,
-0xc5ab,0xb481,0xb482,0xb483,0xc5ac,0xb484,0xb485,0xb486,
-0xb487,0xb488,0xb489,0xb48a,0xc5ad,0xc5ae,0xb48b,0xb48c,
-0xb48d,0xc5af,0xb48e,0xb48f,0xb490,0xb491,0xb492,0xb493,
-0xb494,0xb495,0xb496,0xb497,0xb498,0xb499,0xb49a,0xb49b,
-0xb49c,0xb49d,0xb49e,0xb49f,0xb4a0,0xb541,0xb542,0xb543,
-0xb544,0xb545,0xb546,0xb547,0xb548,0xb549,0xb54a,0xb54b,
-0xb54c,0xb54d,0xb54e,0xb54f,0xc5b0,0xc5b1,0xb550,0xb551,
-0xc5b2,0xb552,0xb553,0xb554,0xc5b3,0xb555,0xb556,0xb557,
-0xb558,0xb559,0xb55a,0xb561,0xc5b4,0xc5b5,0xb562,0xc5b6,
-0xb563,0xc5b7,0xb564,0xb565,0xb566,0xb567,0xb568,0xb569,
-0xc5b8,0xc5b9,0xb56a,0xb56b,0xc5ba,0xb56c,0xb56d,0xb56e,
-0xc5bb,0xc5bc,0xb56f,0xb570,0xb571,0xb572,0xb573,0xb574,
-0xc5bd,0xc5be,0xb575,0xc5bf,0xc5c0,0xc5c1,0xb576,0xb577,
-0xb578,0xb579,0xb57a,0xb581,0xc5c2,0xc5c3,0xb582,0xb583,
-0xc5c4,0xb584,0xb585,0xb586,0xc5c5,0xb587,0xb588,0xb589,
-0xb58a,0xb58b,0xb58c,0xb58d,0xc5c6,0xc5c7,0xb58e,0xc5c8,
-0xc5c9,0xc5ca,0xb58f,0xb590,0xb591,0xb592,0xb593,0xb594,
-0xc5cb,0xb595,0xb596,0xb597,0xb598,0xb599,0xb59a,0xb59b,
-/* 0xd100 */
-0xb59c,0xb59d,0xb59e,0xb59f,0xb5a0,0xb641,0xb642,0xb643,
-0xb644,0xb645,0xb646,0xb647,0xb648,0xc5cc,0xb649,0xb64a,
-0xb64b,0xb64c,0xb64d,0xb64e,0xb64f,0xb650,0xb651,0xb652,
-0xb653,0xb654,0xb655,0xb656,0xb657,0xb658,0xb659,0xb65a,
-0xb661,0xb662,0xb663,0xb664,0xb665,0xb666,0xb667,0xb668,
-0xb669,0xb66a,0xb66b,0xb66c,0xb66d,0xb66e,0xb66f,0xb670,
-0xc5cd,0xc5ce,0xb671,0xb672,0xc5cf,0xb673,0xb674,0xb675,
-0xc5d0,0xb676,0xc5d1,0xb677,0xb678,0xb679,0xb67a,0xb681,
-0xc5d2,0xc5d3,0xb682,0xc5d4,0xc5d5,0xc5d6,0xb683,0xb684,
-0xb685,0xb686,0xb687,0xb688,0xc5d7,0xc5d8,0xb689,0xb68a,
-0xc5d9,0xb68b,0xb68c,0xb68d,0xc5da,0xb68e,0xb68f,0xb690,
-0xb691,0xb692,0xb693,0xb694,0xc5db,0xc5dc,0xb695,0xc5dd,
-0xb696,0xc5de,0xb697,0xb698,0xb699,0xb69a,0xb69b,0xb69c,
-0xc5df,0xb69d,0xb69e,0xb69f,0xc5e0,0xb6a0,0xb741,0xb742,
-0xb743,0xb744,0xb745,0xb746,0xb747,0xb748,0xb749,0xb74a,
-0xb74b,0xb74c,0xb74d,0xb74e,0xc5e1,0xb74f,0xb750,0xb751,
-0xb752,0xb753,0xb754,0xb755,0xc5e2,0xb756,0xb757,0xb758,
-0xc5e3,0xb759,0xb75a,0xb761,0xb762,0xb763,0xb764,0xb765,
-0xb766,0xb767,0xb768,0xb769,0xb76a,0xb76b,0xb76c,0xb76d,
-0xb76e,0xb76f,0xb770,0xb771,0xb772,0xb773,0xb774,0xb775,
-0xc5e4,0xc5e5,0xb776,0xb777,0xc5e6,0xb778,0xb779,0xb77a,
-0xc5e7,0xb781,0xb782,0xb783,0xb784,0xb785,0xb786,0xb787,
-0xc5e8,0xc5e9,0xb788,0xc5ea,0xb789,0xc5eb,0xb78a,0xb78b,
-0xb78c,0xb78d,0xc5ec,0xb78e,0xc5ed,0xb78f,0xb790,0xb791,
-0xc5ee,0xb792,0xb793,0xb794,0xb795,0xb796,0xb797,0xb798,
-0xb799,0xb79a,0xb79b,0xb79c,0xb79d,0xb79e,0xb79f,0xb7a0,
-0xb841,0xb842,0xb843,0xb844,0xb845,0xb846,0xb847,0xb848,
-0xc5ef,0xb849,0xb84a,0xb84b,0xb84c,0xb84d,0xb84e,0xb84f,
-0xb850,0xb851,0xb852,0xb853,0xb854,0xb855,0xb856,0xb857,
-0xb858,0xb859,0xb85a,0xb861,0xb862,0xb863,0xb864,0xb865,
-0xb866,0xb867,0xb868,0xb869,0xc5f0,0xb86a,0xb86b,0xb86c,
-0xc5f1,0xb86d,0xb86e,0xb86f,0xb870,0xb871,0xb872,0xb873,
-/* 0xd200 */
-0xb874,0xb875,0xb876,0xb877,0xb878,0xb879,0xb87a,0xc5f2,
-0xb881,0xc5f3,0xb882,0xb883,0xb884,0xb885,0xb886,0xb887,
-0xc5f4,0xb888,0xb889,0xb88a,0xb88b,0xb88c,0xb88d,0xb88e,
-0xb88f,0xb890,0xb891,0xb892,0xb893,0xb894,0xb895,0xb896,
-0xb897,0xb898,0xb899,0xb89a,0xb89b,0xb89c,0xb89d,0xb89e,
-0xb89f,0xb8a0,0xb941,0xb942,0xc5f5,0xc5f6,0xb943,0xb944,
-0xc5f7,0xb945,0xb946,0xb947,0xc5f8,0xb948,0xb949,0xb94a,
-0xb94b,0xb94c,0xb94d,0xb94e,0xc5f9,0xc5fa,0xb94f,0xc5fb,
-0xb950,0xc5fc,0xb951,0xb952,0xb953,0xb954,0xb955,0xb956,
-0xc5fd,0xb957,0xb958,0xb959,0xb95a,0xb961,0xb962,0xb963,
-0xb964,0xb965,0xb966,0xb967,0xb968,0xb969,0xb96a,0xb96b,
-0xb96c,0xb96d,0xb96e,0xb96f,0xc5fe,0xb970,0xb971,0xb972,
-0xb973,0xb974,0xb975,0xb976,0xc6a1,0xb977,0xb978,0xb979,
-0xb97a,0xb981,0xb982,0xb983,0xb984,0xb985,0xb986,0xb987,
-0xb988,0xb989,0xb98a,0xb98b,0xb98c,0xb98d,0xb98e,0xb98f,
-0xb990,0xb991,0xb992,0xb993,0xb994,0xb995,0xb996,0xb997,
-0xc6a2,0xc6a3,0xb998,0xb999,0xc6a4,0xb99a,0xb99b,0xb99c,
-0xc6a5,0xb99d,0xb99e,0xb99f,0xb9a0,0xba41,0xba42,0xba43,
-0xc6a6,0xc6a7,0xba44,0xba45,0xba46,0xc6a8,0xba47,0xba48,
-0xba49,0xba4a,0xba4b,0xba4c,0xc6a9,0xba4d,0xba4e,0xba4f,
-0xc6aa,0xba50,0xba51,0xba52,0xc6ab,0xba53,0xba54,0xba55,
-0xba56,0xba57,0xba58,0xba59,0xc6ac,0xba5a,0xba61,0xba62,
-0xba63,0xc6ad,0xba64,0xba65,0xba66,0xba67,0xba68,0xba69,
-0xc6ae,0xc6af,0xba6a,0xba6b,0xc6b0,0xba6c,0xba6d,0xc6b1,
-0xc6b2,0xba6e,0xc6b3,0xba6f,0xba70,0xba71,0xba72,0xba73,
-0xc6b4,0xc6b5,0xba74,0xc6b6,0xba75,0xba76,0xba77,0xba78,
-0xba79,0xba7a,0xba81,0xba82,0xc6b7,0xba83,0xba84,0xba85,
-0xc6b8,0xba86,0xba87,0xba88,0xc6b9,0xba89,0xba8a,0xba8b,
-0xba8c,0xba8d,0xba8e,0xba8f,0xc6ba,0xc6bb,0xba90,0xba91,
-0xba92,0xba93,0xba94,0xba95,0xba96,0xba97,0xba98,0xba99,
-0xc6bc,0xc6bd,0xba9a,0xba9b,0xc6be,0xba9c,0xba9d,0xba9e,
-0xc6bf,0xba9f,0xbaa0,0xbb41,0xbb42,0xbb43,0xbb44,0xbb45,
-/* 0xd300 */
-0xc6c0,0xc6c1,0xbb46,0xc6c2,0xbb47,0xc6c3,0xbb48,0xbb49,
-0xbb4a,0xbb4b,0xbb4c,0xbb4d,0xc6c4,0xc6c5,0xc6c6,0xbb4e,
-0xc6c7,0xbb4f,0xbb50,0xbb51,0xc6c8,0xbb52,0xc6c9,0xbb53,
-0xbb54,0xbb55,0xbb56,0xbb57,0xc6ca,0xc6cb,0xbb58,0xc6cc,
-0xc6cd,0xc6ce,0xbb59,0xbb5a,0xbb61,0xc6cf,0xbb62,0xbb63,
-0xc6d0,0xc6d1,0xbb64,0xbb65,0xc6d2,0xbb66,0xbb67,0xbb68,
-0xc6d3,0xbb69,0xbb6a,0xbb6b,0xbb6c,0xbb6d,0xbb6e,0xbb6f,
-0xc6d4,0xc6d5,0xbb70,0xc6d6,0xc6d7,0xc6d8,0xbb71,0xbb72,
-0xbb73,0xbb74,0xbb75,0xbb76,0xc6d9,0xc6da,0xbb77,0xbb78,
-0xbb79,0xbb7a,0xbb81,0xbb82,0xbb83,0xbb84,0xbb85,0xbb86,
-0xbb87,0xbb88,0xbb89,0xbb8a,0xbb8b,0xbb8c,0xbb8d,0xbb8e,
-0xbb8f,0xbb90,0xbb91,0xbb92,0xbb93,0xbb94,0xbb95,0xbb96,
-0xbb97,0xbb98,0xbb99,0xbb9a,0xbb9b,0xbb9c,0xbb9d,0xbb9e,
-0xbb9f,0xbba0,0xbc41,0xbc42,0xbc43,0xbc44,0xbc45,0xbc46,
-0xbc47,0xbc48,0xbc49,0xbc4a,0xbc4b,0xbc4c,0xbc4d,0xbc4e,
-0xbc4f,0xbc50,0xbc51,0xbc52,0xc6db,0xc6dc,0xbc53,0xbc54,
-0xc6dd,0xbc55,0xbc56,0xbc57,0xc6de,0xbc58,0xbc59,0xbc5a,
-0xbc61,0xbc62,0xbc63,0xbc64,0xc6df,0xc6e0,0xbc65,0xc6e1,
-0xc6e2,0xc6e3,0xbc66,0xbc67,0xbc68,0xbc69,0xbc6a,0xbc6b,
-0xc6e4,0xc6e5,0xbc6c,0xbc6d,0xc6e6,0xbc6e,0xbc6f,0xbc70,
-0xc6e7,0xbc71,0xbc72,0xbc73,0xbc74,0xbc75,0xbc76,0xbc77,
-0xc6e8,0xc6e9,0xbc78,0xc6ea,0xbc79,0xc6eb,0xbc7a,0xbc81,
-0xbc82,0xbc83,0xbc84,0xbc85,0xc6ec,0xbc86,0xbc87,0xbc88,
-0xc6ed,0xbc89,0xbc8a,0xbc8b,0xc6ee,0xbc8c,0xbc8d,0xbc8e,
-0xbc8f,0xbc90,0xbc91,0xbc92,0xc6ef,0xc6f0,0xbc93,0xbc94,
-0xc6f1,0xc6f2,0xbc95,0xbc96,0xbc97,0xbc98,0xbc99,0xbc9a,
-0xc6f3,0xbc9b,0xbc9c,0xbc9d,0xbc9e,0xbc9f,0xbca0,0xbd41,
-0xc6f4,0xbd42,0xbd43,0xbd44,0xbd45,0xbd46,0xbd47,0xbd48,
-0xbd49,0xc6f5,0xbd4a,0xc6f6,0xbd4b,0xbd4c,0xbd4d,0xbd4e,
-0xbd4f,0xbd50,0xbd51,0xbd52,0xc6f7,0xc6f8,0xbd53,0xbd54,
-0xc6f9,0xbd55,0xbd56,0xbd57,0xc6fa,0xbd58,0xbd59,0xbd5a,
-0xbd61,0xbd62,0xbd63,0xbd64,0xc6fb,0xc6fc,0xbd65,0xc6fd,
-/* 0xd400 */
-0xbd66,0xc6fe,0xbd67,0xbd68,0xbd69,0xbd6a,0xbd6b,0xbd6c,
-0xc7a1,0xbd6d,0xbd6e,0xbd6f,0xbd70,0xbd71,0xbd72,0xbd73,
-0xbd74,0xbd75,0xbd76,0xbd77,0xbd78,0xbd79,0xbd7a,0xbd81,
-0xbd82,0xbd83,0xbd84,0xbd85,0xbd86,0xc7a2,0xbd87,0xbd88,
-0xbd89,0xbd8a,0xbd8b,0xbd8c,0xbd8d,0xbd8e,0xbd8f,0xbd90,
-0xbd91,0xbd92,0xbd93,0xbd94,0xbd95,0xbd96,0xbd97,0xbd98,
-0xbd99,0xbd9a,0xbd9b,0xbd9c,0xbd9d,0xbd9e,0xbd9f,0xbda0,
-0xbe41,0xbe42,0xbe43,0xbe44,0xbe45,0xbe46,0xbe47,0xbe48,
-0xc7a3,0xbe49,0xbe4a,0xbe4b,0xc7a4,0xbe4c,0xbe4d,0xbe4e,
-0xbe4f,0xbe50,0xbe51,0xbe52,0xbe53,0xbe54,0xbe55,0xbe56,
-0xbe57,0xbe58,0xbe59,0xbe5a,0xbe61,0xbe62,0xbe63,0xbe64,
-0xbe65,0xbe66,0xbe67,0xbe68,0xc7a5,0xbe69,0xbe6a,0xbe6b,
-0xc7a6,0xbe6c,0xbe6d,0xbe6e,0xc7a7,0xbe6f,0xbe70,0xbe71,
-0xbe72,0xbe73,0xbe74,0xbe75,0xbe76,0xc7a8,0xbe77,0xc7a9,
-0xbe78,0xbe79,0xbe7a,0xbe81,0xbe82,0xbe83,0xbe84,0xbe85,
-0xc7aa,0xc7ab,0xbe86,0xbe87,0xc7ac,0xbe88,0xbe89,0xc7ad,
-0xc7ae,0xbe8a,0xc7af,0xbe8b,0xbe8c,0xbe8d,0xbe8e,0xbe8f,
-0xc7b0,0xc7b1,0xbe90,0xc7b2,0xbe91,0xc7b3,0xbe92,0xbe93,
-0xbe94,0xbe95,0xbe96,0xbe97,0xc7b4,0xbe98,0xbe99,0xbe9a,
-0xbe9b,0xbe9c,0xbe9d,0xbe9e,0xbe9f,0xbea0,0xbf41,0xbf42,
-0xbf43,0xbf44,0xbf45,0xbf46,0xbf47,0xbf48,0xbf49,0xbf4a,
-0xbf4b,0xc7b5,0xbf4c,0xbf4d,0xbf4e,0xbf4f,0xbf50,0xbf51,
-0xbf52,0xbf53,0xbf54,0xbf55,0xbf56,0xbf57,0xbf58,0xbf59,
-0xbf5a,0xbf61,0xbf62,0xbf63,0xbf64,0xbf65,0xbf66,0xbf67,
-0xbf68,0xbf69,0xbf6a,0xbf6b,0xbf6c,0xbf6d,0xbf6e,0xbf6f,
-0xbf70,0xbf71,0xbf72,0xbf73,0xc7b6,0xbf74,0xbf75,0xbf76,
-0xc7b7,0xbf77,0xbf78,0xbf79,0xc7b8,0xbf7a,0xbf81,0xbf82,
-0xbf83,0xbf84,0xbf85,0xbf86,0xc7b9,0xbf87,0xbf88,0xc7ba,
-0xbf89,0xbf8a,0xbf8b,0xbf8c,0xbf8d,0xbf8e,0xbf8f,0xbf90,
-0xc7bb,0xbf91,0xbf92,0xbf93,0xc7bc,0xbf94,0xbf95,0xbf96,
-0xc7bd,0xbf97,0xbf98,0xbf99,0xbf9a,0xbf9b,0xbf9c,0xbf9d,
-0xc7be,0xbf9e,0xbf9f,0xc7bf,0xbfa0,0xc7c0,0xc041,0xc042,
-/* 0xd500 */
-0xc043,0xc044,0xc045,0xc046,0xc7c1,0xc047,0xc048,0xc049,
-0xc7c2,0xc04a,0xc04b,0xc04c,0xc7c3,0xc04d,0xc04e,0xc04f,
-0xc050,0xc051,0xc052,0xc053,0xc7c4,0xc7c5,0xc054,0xc7c6,
-0xc055,0xc056,0xc057,0xc058,0xc059,0xc05a,0xc061,0xc062,
-0xc063,0xc064,0xc065,0xc066,0xc067,0xc068,0xc069,0xc06a,
-0xc06b,0xc06c,0xc06d,0xc06e,0xc06f,0xc070,0xc071,0xc072,
-0xc073,0xc074,0xc075,0xc076,0xc077,0xc078,0xc079,0xc07a,
-0xc081,0xc082,0xc083,0xc084,0xc7c7,0xc7c8,0xc085,0xc086,
-0xc7c9,0xc087,0xc088,0xc089,0xc7ca,0xc08a,0xc08b,0xc08c,
-0xc08d,0xc08e,0xc08f,0xc090,0xc7cb,0xc7cc,0xc091,0xc7cd,
-0xc092,0xc7ce,0xc093,0xc094,0xc095,0xc096,0xc097,0xc098,
-0xc7cf,0xc7d0,0xc099,0xc09a,0xc7d1,0xc09b,0xc09c,0xc09d,
-0xc7d2,0xc09e,0xc09f,0xc0a0,0xc141,0xc7d3,0xc142,0xc143,
-0xc7d4,0xc7d5,0xc144,0xc7d6,0xc145,0xc7d7,0xc146,0xc147,
-0xc148,0xc149,0xc14a,0xc14b,0xc7d8,0xc7d9,0xc14c,0xc14d,
-0xc7da,0xc14e,0xc14f,0xc150,0xc7db,0xc151,0xc152,0xc153,
-0xc154,0xc155,0xc156,0xc157,0xc7dc,0xc7dd,0xc158,0xc7de,
-0xc7df,0xc7e0,0xc159,0xc15a,0xc161,0xc162,0xc163,0xc164,
-0xc7e1,0xc165,0xc166,0xc167,0xc168,0xc169,0xc16a,0xc16b,
-0xc16c,0xc16d,0xc16e,0xc16f,0xc170,0xc171,0xc172,0xc173,
-0xc174,0xc175,0xc176,0xc177,0xc178,0xc7e2,0xc179,0xc17a,
-0xc181,0xc182,0xc183,0xc184,0xc185,0xc186,0xc187,0xc188,
-0xc189,0xc18a,0xc18b,0xc18c,0xc18d,0xc18e,0xc18f,0xc190,
-0xc191,0xc192,0xc193,0xc194,0xc195,0xc196,0xc197,0xc198,
-0xc199,0xc19a,0xc19b,0xc19c,0xc19d,0xc19e,0xc19f,0xc1a0,
-0xc7e3,0xc7e4,0xc241,0xc242,0xc7e5,0xc243,0xc244,0xc245,
-0xc7e6,0xc246,0xc7e7,0xc247,0xc248,0xc249,0xc24a,0xc24b,
-0xc7e8,0xc7e9,0xc24c,0xc7ea,0xc24d,0xc7eb,0xc24e,0xc24f,
-0xc250,0xc251,0xc252,0xc253,0xc7ec,0xc7ed,0xc254,0xc255,
-0xc7ee,0xc256,0xc257,0xc258,0xc7ef,0xc259,0xc25a,0xc261,
-0xc262,0xc263,0xc264,0xc265,0xc7f0,0xc7f1,0xc266,0xc7f2,
-0xc267,0xc7f3,0xc268,0xc269,0xc26a,0xc26b,0xc26c,0xc26d,
-/* 0xd600 */
-0xc7f4,0xc7f5,0xc26e,0xc26f,0xc7f6,0xc270,0xc271,0xc272,
-0xc7f7,0xc273,0xc274,0xc275,0xc276,0xc277,0xc278,0xc279,
-0xc7f8,0xc7f9,0xc27a,0xc7fa,0xc7fb,0xc7fc,0xc281,0xc282,
-0xc283,0xc284,0xc285,0xc286,0xc7fd,0xc287,0xc288,0xc289,
-0xc7fe,0xc28a,0xc28b,0xc28c,0xc8a1,0xc28d,0xc28e,0xc28f,
-0xc290,0xc291,0xc292,0xc293,0xc294,0xc8a2,0xc295,0xc296,
-0xc297,0xc298,0xc299,0xc29a,0xc29b,0xc29c,0xc29d,0xc29e,
-0xc8a3,0xc8a4,0xc29f,0xc2a0,0xc8a5,0xc341,0xc342,0xc343,
-0xc8a6,0xc344,0xc345,0xc346,0xc347,0xc8a7,0xc348,0xc349,
-0xc8a8,0xc8a9,0xc34a,0xc8aa,0xc34b,0xc8ab,0xc34c,0xc34d,
-0xc34e,0xc8ac,0xc34f,0xc350,0xc8ad,0xc8ae,0xc351,0xc352,
-0xc8af,0xc353,0xc354,0xc355,0xc8b0,0xc356,0xc357,0xc358,
-0xc359,0xc35a,0xc361,0xc362,0xc363,0xc364,0xc365,0xc8b1,
-0xc366,0xc8b2,0xc367,0xc368,0xc369,0xc36a,0xc36b,0xc36c,
-0xc8b3,0xc8b4,0xc36d,0xc36e,0xc8b5,0xc36f,0xc370,0xc371,
-0xc372,0xc373,0xc374,0xc375,0xc376,0xc377,0xc378,0xc379,
-0xc37a,0xc381,0xc382,0xc8b6,0xc383,0xc8b7,0xc384,0xc385,
-0xc386,0xc387,0xc388,0xc389,0xc8b8,0xc8b9,0xc38a,0xc38b,
-0xc8ba,0xc38c,0xc38d,0xc38e,0xc8bb,0xc38f,0xc390,0xc391,
-0xc392,0xc393,0xc394,0xc395,0xc396,0xc8bc,0xc397,0xc8bd,
-0xc398,0xc8be,0xc399,0xc39a,0xc39b,0xc39c,0xc39d,0xc39e,
-0xc8bf,0xc39f,0xc3a0,0xc441,0xc8c0,0xc442,0xc443,0xc444,
-0xc8c1,0xc445,0xc446,0xc447,0xc448,0xc449,0xc44a,0xc44b,
-0xc44c,0xc8c2,0xc44d,0xc8c3,0xc44e,0xc44f,0xc450,0xc451,
-0xc452,0xc453,0xc454,0xc455,0xc8c4,0xc8c5,0xc456,0xc457,
-0xc8c6,0xc458,0xc459,0xc45a,0xc8c7,0xc461,0xc462,0xc463,
-0xc464,0xc8c8,0xc465,0xc466,0xc8c9,0xc467,0xc468,0xc8ca,
-0xc469,0xc8cb,0xc46a,0xc46b,0xc46c,0xc46d,0xc46e,0xc46f,
-0xc8cc,0xc470,0xc471,0xc472,0xc8cd,0xc473,0xc474,0xc475,
-0xc8ce,0xc476,0xc477,0xc478,0xc479,0xc47a,0xc481,0xc482,
-0xc8cf,0xc483,0xc484,0xc485,0xc486,0xc8d0,0xc487,0xc488,
-0xc489,0xc48a,0xc48b,0xc48c,0xc8d1,0xc8d2,0xc48d,0xc48e,
-/* 0xd700 */
-0xc8d3,0xc48f,0xc490,0xc491,0xc8d4,0xc492,0xc493,0xc494,
-0xc495,0xc496,0xc497,0xc498,0xc499,0xc49a,0xc49b,0xc49c,
-0xc49d,0xc8d5,0xc49e,0xc49f,0xc4a0,0xc541,0xc542,0xc543,
-0xc8d6,0xc8d7,0xc544,0xc545,0xc8d8,0xc546,0xc547,0xc548,
-0xc8d9,0xc549,0xc54a,0xc54b,0xc54c,0xc54d,0xc54e,0xc54f,
-0xc8da,0xc8db,0xc550,0xc8dc,0xc551,0xc8dd,0xc552,0xc553,
-0xc554,0xc555,0xc556,0xc557,0xc8de,0xc8df,0xc558,0xc559,
-0xc8e0,0xc55a,0xc561,0xc562,0xc8e1,0xc563,0xc564,0xc565,
-0xc566,0xc567,0xc568,0xc569,0xc8e2,0xc56a,0xc56b,0xc8e3,
-0xc56c,0xc8e4,0xc56d,0xc56e,0xc56f,0xc570,0xc571,0xc572,
-0xc8e5,0xc8e6,0xc573,0xc574,0xc8e7,0xc575,0xc8e8,0xc8e9,
-0xc8ea,0xc8eb,0xc576,0xc577,0xc578,0xc579,0xc57a,0xc581,
-0xc8ec,0xc8ed,0xc582,0xc8ee,0xc583,0xc8ef,0xc584,0xc585,
-0xc586,0xc8f0,0xc587,0xc588,0xc8f1,0xc589,0xc58a,0xc58b,
-0xc8f2,0xc58c,0xc58d,0xc58e,0xc8f3,0xc58f,0xc590,0xc591,
-0xc592,0xc593,0xc594,0xc595,0xc8f4,0xc8f5,0xc596,0xc597,
-0xc598,0xc8f6,0xc599,0xc59a,0xc59b,0xc59c,0xc59d,0xc59e,
-0xc8f7,0xc8f8,0xc59f,0xc5a0,0xc8f9,0xc641,0xc642,0xc643,
-0xc8fa,0xc644,0xc645,0xc646,0xc647,0xc648,0xc649,0xc64a,
-0xc8fb,0xc8fc,0xc64b,0xc8fd,0xc64c,0xc8fe,0xc64d,0xc64e,
-0xc64f,0xc650,0xc651,0xc652};
-
-
-static const int ucs_s_uhc_table_min = 0xab00;
-static const int ucs_s_uhc_table_max = 0xab00 + (sizeof(ucs_s_uhc_table)/sizeof(unsigned short));
-
-static const unsigned short ucs_r1_uhc_table[] = {
-/* 0xf800 */
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xcbd0,0xcbd6,0xcbe7,0xcdcf,0xcde8,0xcead,0xcffb,0xd0a2,
-0xd0b8,0xd0d0,0xd0dd,0xd1d4,0xd1d5,0xd1d8,0xd1db,0xd1dc,
-0xd1dd,0xd1de,0xd1df,0xd1e0,0xd1e2,0xd1e3,0xd1e4,0xd1e5,
-0xd1e6,0xd1e8,0xd1e9,0xd1ea,0xd1eb,0xd1ed,0xd1ef,0xd1f0,
-0xd1f2,0xd1f6,0xd1fa,0xd1fc,0xd1fd,0xd1fe,0xd2a2,0xd2a3,
-0xd2a7,0xd2a8,0xd2a9,0xd2aa,0xd2ab,0xd2ad,0xd2b2,0xd2be,
-0xd2c2,0xd2c3,0xd2c4,0xd2c6,0xd2c7,0xd2c8,0xd2c9,0xd2ca,
-0xd2cb,0xd2cd,0xd2ce,0xd2cf,0xd2d0,0xd2d1,0xd2d2,0xd2d3,
-0xd2d4,0xd2d5,0xd2d6,0xd2d7,0xd2d9,0xd2da,0xd2de,0xd2df,
-0xd2e1,0xd2e2,0xd2e4,0xd2e5,0xd2e6,0xd2e7,0xd2e8,0xd2e9,
-0xd2ea,0xd2eb,0xd2f0,0xd2f1,0xd2f2,0xd2f3,0xd2f4,0xd2f5,
-0xd2f7,0xd2f8,0xd4e6,0xd4fc,0xd5a5,0xd5ab,0xd5ae,0xd6b8,
-0xd6cd,0xd7cb,0xd7e4,0xdbc5,0xdbe4,0xdca5,0xdda5,0xddd5,
-0xddf4,0xdefc,0xdefe,0xdfb3,0xdfe1,0xdfe8,0xe0f1,0xe1ad,
-0xe1ed,0xe3f5,0xe4a1,0xe4a9,0xe5ae,0xe5b1,0xe5b2,0xe5b9,
-0xe5bb,0xe5bc,0xe5c4,0xe5ce,0xe5d0,0xe5d2,0xe5d6,0xe5fa,
-0xe5fb,0xe5fc,0xe5fe,0xe6a1,0xe6a4,0xe6a7,0xe6ad,0xe6af,
-0xe6b0,0xe6b1,0xe6b3,0xe6b7,0xe6b8,0xe6bc,0xe6c4,0xe6c6,
-0xe6c7,0xe6ca,0xe6d2,0xe6d6,0xe6d9,0xe6dc,0xe6df,0xe6e1,
-0xe6e4,0xe6e5,0xe6e6,0xe6e8,0xe6ea,0xe6eb,0xe6ec,0xe6ef,
-0xe6f1,0xe6f2,0xe6f5,0xe6f6,0xe6f7,0xe6f9,0xe7a1,0xe7a6,
-0xe7a9,0xe7aa,0xe7ac,0xe7ad,0xe7b0,0xe7bf,0xe7c1,0xe7c6,
-0xe7c7,0xe7cb,0xe7cd,0xe7cf,0xe7d0,0xe7d3,0xe7df,0xe7e4,
-0xe7e6,0xe7f7,0xe8e7,0xe8e8,0xe8f0,0xe8f1,0xe8f7,0xe8f9,
-0xe8fb,0xe8fe,0xe9a7,0xe9ac,0xe9cc,0xe9f7,0xeac1,0xeae5,
-0xeaf4,0xeaf7,0xeafc,0xeafe,0xeba4,0xeba7,0xeba9,0xebaa,
-0xebba,0xebbb,0xebbd,0xebc1,0xebc2,0xebc6,0xebc7,0xebcc,
-0xebcf,0xebd0,0xebd1,0xebd2,0xebd8,0xeca6,0xeca7,0xecaa,
-0xecaf,0xecb0,0xecb1,0xecb2,0xecb5,0xecb8,0xecba,0xecc0,
-0xecc1,0xecc5,0xecc6,0xecc9,0xecca,0xecd5,0xecdd,0xecde,
-0xece1,0xece4,0xece7,0xece8,0xecf7,0xecf8,0xecfa,0xeda1,
-0xeda2,0xeda3,0xedee,0xeedb,0xf2bd,0xf2fa,0xf3b1,0xf4a7,
-0xf4ee,0xf6f4,0xf6f6,0xf7b8,0xf7c8,0xf7d3,0xf8db,0xf8f0,
-0xfaa1,0xfaa2,0xfae6,0xfca9};
-
-static const int ucs_r1_uhc_table_min = 0xf800;
-static const int ucs_r1_uhc_table_max = 0xf800 + (sizeof(ucs_r1_uhc_table)/sizeof(unsigned short));
-
-static const unsigned short ucs_r2_uhc_table[] = {
-/* 0xff00 */
-0x0000,0xa3a1,0xa3a2,0xa3a3,0xa3a4,0xa3a5,0xa3a6,0xa3a7,
-0xa3a8,0xa3a9,0xa3aa,0xa3ab,0xa3ac,0xa3ad,0xa3ae,0xa3af,
-0xa3b0,0xa3b1,0xa3b2,0xa3b3,0xa3b4,0xa3b5,0xa3b6,0xa3b7,
-0xa3b8,0xa3b9,0xa3ba,0xa3bb,0xa3bc,0xa3bd,0xa3be,0xa3bf,
-0xa3c0,0xa3c1,0xa3c2,0xa3c3,0xa3c4,0xa3c5,0xa3c6,0xa3c7,
-0xa3c8,0xa3c9,0xa3ca,0xa3cb,0xa3cc,0xa3cd,0xa3ce,0xa3cf,
-0xa3d0,0xa3d1,0xa3d2,0xa3d3,0xa3d4,0xa3d5,0xa3d6,0xa3d7,
-0xa3d8,0xa3d9,0xa3da,0xa3db,0xa1ac,0xa3dd,0xa3de,0xa3df,
-0xa3e0,0xa3e1,0xa3e2,0xa3e3,0xa3e4,0xa3e5,0xa3e6,0xa3e7,
-0xa3e8,0xa3e9,0xa3ea,0xa3eb,0xa3ec,0xa3ed,0xa3ee,0xa3ef,
-0xa3f0,0xa3f1,0xa3f2,0xa3f3,0xa3f4,0xa3f5,0xa3f6,0xa3f7,
-0xa3f8,0xa3f9,0xa3fa,0xa3fb,0xa3fc,0xa3fd,0xa2a6,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
-0xa1cb,0xa1cc,0xa1fe,0xa3fe,0x0000,0xa1cd,0xa3dc};
-
-static const int ucs_r2_uhc_table_min = 0xff00;
-static const int ucs_r2_uhc_table_max = 0xff00 + (sizeof (ucs_r2_uhc_table) / sizeof (unsigned short));
-
-
-
-
-#endif /* UNICODE_TABLE_UHC_H */
diff --git a/ext/mbstring/libmbfl/libmbfl.dsp b/ext/mbstring/libmbfl/libmbfl.dsp
deleted file mode 100644
index bf3fe06557..0000000000
--- a/ext/mbstring/libmbfl/libmbfl.dsp
+++ /dev/null
@@ -1,763 +0,0 @@
-# Microsoft Developer Studio Project File - Name="libmbfl" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=libmbfl - Win32 Debug
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "libmbfl.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "libmbfl.mak" CFG="libmbfl - Win32 Debug"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "libmbfl - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "libmbfl - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "libmbfl - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release"
-# PROP Intermediate_Dir "Release"
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LIBMBFL_EXPORTS" /YX /FD /c
-# ADD CPP /nologo /MT /W3 /GX /O2 /I "mbfl" /I "." /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LIBMBFL_EXPORTS" /D "HAVE_CONFIG_H" /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x411 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386
-# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386
-
-!ELSEIF "$(CFG)" == "libmbfl - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug"
-# PROP Intermediate_Dir "Debug"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LIBMBFL_EXPORTS" /YX /FD /GZ /c
-# ADD CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /I "mbfl" /I "." /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LIBMBFL_EXPORTS" /D "MBFL_DLL_EXPORT" /D HAVE_CONFIG_H=1 /YX /FD /GZ /c
-# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x411 /d "_DEBUG"
-# ADD RSC /l 0x411 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
-
-!ENDIF
-
-# Begin Target
-
-# Name "libmbfl - Win32 Release"
-# Name "libmbfl - Win32 Debug"
-# Begin Group "Source Files"
-
-# PROP Default_Filter "vc6"
-# Begin Source File
-
-SOURCE=.\filters\html_entities.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\mbfl\mbfilter.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\filters\mbfilter_7bit.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\mbfl\mbfilter_8bit.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\filters\mbfilter_ascii.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\filters\mbfilter_base64.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\filters\mbfilter_big5.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\filters\mbfilter_byte2.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\filters\mbfilter_byte4.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\filters\mbfilter_cp1251.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\filters\mbfilter_cp1252.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\filters\mbfilter_cp866.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\filters\mbfilter_cp932.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\filters\mbfilter_cp936.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\filters\mbfilter_euc_cn.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\filters\mbfilter_euc_jp.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\filters\mbfilter_euc_jp_win.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\filters\mbfilter_euc_kr.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\filters\mbfilter_euc_tw.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\filters\mbfilter_htmlent.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\filters\mbfilter_hz.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\filters\mbfilter_iso2022_kr.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\filters\mbfilter_iso8859_1.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\filters\mbfilter_iso8859_10.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\filters\mbfilter_iso8859_13.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\filters\mbfilter_iso8859_14.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\filters\mbfilter_iso8859_15.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\filters\mbfilter_iso8859_2.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\filters\mbfilter_iso8859_3.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\filters\mbfilter_iso8859_4.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\filters\mbfilter_iso8859_5.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\filters\mbfilter_iso8859_6.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\filters\mbfilter_iso8859_7.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\filters\mbfilter_iso8859_8.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\filters\mbfilter_iso8859_9.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\filters\mbfilter_jis.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\filters\mbfilter_koi8r.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\mbfl\mbfilter_pass.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\filters\mbfilter_qprint.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\filters\mbfilter_sjis.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\filters\mbfilter_ucs2.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\filters\mbfilter_ucs4.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\filters\mbfilter_uhc.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\filters\mbfilter_utf16.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\filters\mbfilter_utf32.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\filters\mbfilter_utf7.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\filters\mbfilter_utf7imap.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\filters\mbfilter_utf8.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\filters\mbfilter_uuencode.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\mbfl\mbfilter_wchar.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\mbfl\mbfl_allocators.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\mbfl\mbfl_convert.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\mbfl\mbfl_encoding.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\mbfl\mbfl_filter_output.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\mbfl\mbfl_ident.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\mbfl\mbfl_language.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\mbfl\mbfl_memory_device.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\mbfl\mbfl_string.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\nls\nls_de.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\nls\nls_en.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\nls\nls_ja.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\nls\nls_kr.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\nls\nls_neutral.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\nls\nls_ru.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\nls\nls_uni.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\nls\nls_zh.c
-# End Source File
-# End Group
-# Begin Group "Header Files"
-
-# PROP Default_Filter "h;hpp;hxx;hm;inl"
-# Begin Source File
-
-SOURCE=.\config.h.vc6
-
-!IF "$(CFG)" == "libmbfl - Win32 Release"
-
-# Begin Custom Build
-InputDir=.
-InputPath=.\config.h.vc6
-
-"$(InputDir)\config.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- copy $(InputDir)\config.h.vc6 "$(InputDir)\config.h"
-
-# End Custom Build
-
-!ELSEIF "$(CFG)" == "libmbfl - Win32 Debug"
-
-# Begin Custom Build
-InputDir=.
-InputPath=.\config.h.vc6
-
-"$(InputDir)\config.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- copy $(InputDir)\config.h.vc6 "$(InputDir)\config.h"
-
-# End Custom Build
-
-!ENDIF
-
-# End Source File
-# Begin Source File
-
-SOURCE=.\filters\cp932_table.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\filters\html_entities.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\mbfl\mbfilter.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\filters\mbfilter_7bit.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\mbfl\mbfilter_8bit.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\filters\mbfilter_ascii.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\filters\mbfilter_base64.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\filters\mbfilter_big5.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\filters\mbfilter_byte2.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\filters\mbfilter_byte4.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\filters\mbfilter_cp1251.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\filters\mbfilter_cp1252.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\filters\mbfilter_cp866.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\filters\mbfilter_cp932.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\filters\mbfilter_cp936.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\filters\mbfilter_euc_cn.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\filters\mbfilter_euc_jp.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\filters\mbfilter_euc_jp_win.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\filters\mbfilter_euc_kr.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\filters\mbfilter_euc_tw.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\filters\mbfilter_htmlent.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\filters\mbfilter_hz.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\filters\mbfilter_iso2022_kr.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\filters\mbfilter_iso8859_1.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\filters\mbfilter_iso8859_10.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\filters\mbfilter_iso8859_13.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\filters\mbfilter_iso8859_14.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\filters\mbfilter_iso8859_15.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\filters\mbfilter_iso8859_2.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\filters\mbfilter_iso8859_3.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\filters\mbfilter_iso8859_4.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\filters\mbfilter_iso8859_5.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\filters\mbfilter_iso8859_6.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\filters\mbfilter_iso8859_7.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\filters\mbfilter_iso8859_8.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\filters\mbfilter_iso8859_9.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\filters\mbfilter_jis.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\filters\mbfilter_koi8r.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\mbfl\mbfilter_pass.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\filters\mbfilter_qprint.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\filters\mbfilter_sjis.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\filters\mbfilter_ucs2.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\filters\mbfilter_ucs4.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\filters\mbfilter_uhc.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\filters\mbfilter_utf16.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\filters\mbfilter_utf32.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\filters\mbfilter_utf7.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\filters\mbfilter_utf7imap.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\filters\mbfilter_utf8.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\filters\mbfilter_uuencode.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\mbfl\mbfilter_wchar.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\mbfl\mbfl_allocators.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\mbfl\mbfl_consts.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\mbfl\mbfl_convert.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\mbfl\mbfl_encoding.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\mbfl\mbfl_filter_output.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\mbfl\mbfl_ident.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\mbfl\mbfl_language.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\mbfl\mbfl_memory_device.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\mbfl\mbfl_string.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\nls\nls_de.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\nls\nls_en.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\nls\nls_ja.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\nls\nls_kr.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\nls\nls_neutral.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\nls\nls_ru.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\nls\nls_uni.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\nls\nls_zh.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\filters\unicode_prop.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\filters\unicode_table_big5.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\filters\unicode_table_cns11643.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\filters\unicode_table_cp1251.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\filters\unicode_table_cp1252.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\filters\unicode_table_cp866.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\filters\unicode_table_cp932_ext.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\filters\unicode_table_cp936.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\filters\unicode_table_iso8859_10.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\filters\unicode_table_iso8859_13.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\filters\unicode_table_iso8859_14.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\filters\unicode_table_iso8859_15.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\filters\unicode_table_iso8859_2.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\filters\unicode_table_iso8859_3.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\filters\unicode_table_iso8859_4.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\filters\unicode_table_iso8859_5.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\filters\unicode_table_iso8859_6.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\filters\unicode_table_iso8859_7.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\filters\unicode_table_iso8859_8.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\filters\unicode_table_iso8859_9.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\filters\unicode_table_jis.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\filters\unicode_table_koi8r.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\filters\unicode_table_uhc.h
-# End Source File
-# End Group
-# Begin Group "Resource Files"
-
-# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
-# Begin Source File
-
-SOURCE=.\mbfl.rc
-# End Source File
-# End Group
-# End Target
-# End Project
diff --git a/ext/mbstring/libmbfl/libmbfl.dsw b/ext/mbstring/libmbfl/libmbfl.dsw
deleted file mode 100644
index 69e7bf1b9d..0000000000
--- a/ext/mbstring/libmbfl/libmbfl.dsw
+++ /dev/null
@@ -1,29 +0,0 @@
-Microsoft Developer Studio Workspace File, Format Version 6.00
-# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE!
-
-###############################################################################
-
-Project: "libmbfl"=".\libmbfl.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-}}}
-
-###############################################################################
-
-Global:
-
-Package=<5>
-{{{
-}}}
-
-Package=<3>
-{{{
-}}}
-
-###############################################################################
-
diff --git a/ext/mbstring/libmbfl/mbfl.def b/ext/mbstring/libmbfl/mbfl.def
deleted file mode 100644
index e6844f5f88..0000000000
--- a/ext/mbstring/libmbfl/mbfl.def
+++ /dev/null
@@ -1,80 +0,0 @@
-LIBRARY mbfl.dll
-
-DESCRIPTION "streamable kanji code filter"
-
-EXPORTS
- _mbfl_buffer_converter_new @1
- _mbfl_buffer_converter_delete @2
- _mbfl_buffer_converter_reset @3
- _mbfl_buffer_converter_illegal_mode @4
- _mbfl_buffer_converter_illegal_substchar @5
- _mbfl_buffer_converter_strncat @6
- _mbfl_buffer_converter_feed @7
- _mbfl_buffer_converter_flush @8
- _mbfl_buffer_converter_getbuffer @9
- _mbfl_buffer_converter_result @10
- _mbfl_buffer_converter_feed_result @11
- _mbfl_encoding_detector_new @12
- _mbfl_encoding_detector_delete @13
- _mbfl_encoding_detector_feed @14
- _mbfl_encoding_detector_judge @15
- _mbfl_convert_encoding @16
- _mbfl_identify_encoding @17
- _mbfl_identify_encoding_name @18
- _mbfl_identify_encoding_no @19
- _mbfl_strlen @20
- _mbfl_oddlen @21
- _mbfl_strpos @22
- _mbfl_substr_count @23
- _mbfl_substr @24
- _mbfl_strcut @25
- _mbfl_strwidth @26
- _mbfl_strimwidth @27
- _mbfl_mime_header_encode @28
- _mbfl_mime_header_decode @29
- _mbfl_html_numeric_entity @30
- _mbfl_ja_jp_hantozen @31
- ___mbfl_allocators @32
- _mbfl_convert_filter_list @33
- _mbfl_convert_filter_new @34
- _mbfl_convert_filter_delete @35
- _mbfl_convert_filter_feed @36
- _mbfl_convert_filter_flush @37
- _mbfl_convert_filter_reset @38
- _mbfl_convert_filter_copy @39
- _mbfl_filt_conv_illegal_output @40
- _mbfl_convert_filter_select_vtbl @41
- _mbfl_convert_filter_get_vtbl @42
- _mbfl_filt_conv_common_ctor @43
- _mbfl_filt_conv_common_flush @44
- _mbfl_filt_conv_common_dtor @45
- _mbfl_encoding_8bit @46
- _mbfl_encoding_pass @47
- _mbfl_encoding_wchar @48
- _mbfl_name2encoding @49
- _mbfl_no2encoding @50
- _mbfl_name2no_encoding @51
- _mbfl_no_encoding2name @52
- _mbfl_no2preferred_mime_name @53
- _mbfl_is_support_encoding @54
- _mbfl_filter_output_pipe @55
- _mbfl_filter_output_null @56
- _mbfl_name2language @57
- _mbfl_no2language @58
- _mbfl_name2no_language @59
- _mbfl_no_language2name @60
- _mbfl_memory_device_init @61
- _mbfl_memory_device_realloc @62
- _mbfl_memory_device_clear @63
- _mbfl_memory_device_reset @64
- _mbfl_memory_device_result @65
- _mbfl_memory_device_output @66
- _mbfl_memory_device_output2 @67
- _mbfl_memory_device_output4 @68
- _mbfl_memory_device_strcat @69
- _mbfl_memory_device_devcat @70
- _mbfl_wchar_device_init @71
- _mbfl_wchar_device_output @72
- _mbfl_string_init @73
- _mbfl_string_init_set @74
- _mbfl_string_clear @75
diff --git a/ext/mbstring/libmbfl/mbfl.rc b/ext/mbstring/libmbfl/mbfl.rc
deleted file mode 100644
index 655e61893a..0000000000
--- a/ext/mbstring/libmbfl/mbfl.rc
+++ /dev/null
@@ -1,24 +0,0 @@
-/* $Id$ */
-1 VERSIONINFO
-FILEVERSION 1,1,0,0
-PRODUCTVERSION 1,1,0,0
-FILEFLAGSMASK 0
-FILEOS 0x40000
-FILETYPE 1
-{
- BLOCK "StringFileInfo"
- {
- BLOCK "040904E4"
- {
- VALUE "CompanyName", "-\0"
- VALUE "FileDescription", "streamable kanji code filter\0"
- VALUE "FileVersion", "1.1.0\0"
- VALUE "InternalName", "mbfl\0"
- VALUE "LegalCopyright", "GNU Lesser Public License Version 2.0\0"
- VALUE "OriginalFilename", "mbfl.dll\0"
- VALUE "ProductName", "mbfl\0"
- VALUE "ProductVersion", "1.1.0\0"
- }
- }
-}
-
diff --git a/ext/mbstring/libmbfl/mbfl/Makefile.am b/ext/mbstring/libmbfl/mbfl/Makefile.am
deleted file mode 100644
index 6f817feba2..0000000000
--- a/ext/mbstring/libmbfl/mbfl/Makefile.am
+++ /dev/null
@@ -1,15 +0,0 @@
-EXTRA_DIST=Makefile.bcc32
-lib_LTLIBRARIES=libmbfl.la
-libmbfl_la_SOURCES=mbfilter.c mbfl_string.c mbfl_language.c mbfl_encoding.c mbfl_convert.c mbfl_ident.c mbfl_memory_device.c mbfl_allocators.c mbfl_filter_output.c mbfilter_pass.c mbfilter_wchar.c mbfilter_8bit.c
-libmbfl_filters_la=../filters/libmbfl_filters.la
-libmbfl_nls_la=../nls/libmbfl_nls.la
-libmbfl_la_LIBADD=$(libmbfl_filters_la) $(libmbfl_nls_la)
-libmbfl_la_LDFLAGS=-version-info $(SHLIB_VERSION)
-libmbfl_includedir=$(includedir)/mbfl
-libmbfl_include_HEADERS=mbfilter.h mbfl_consts.h mbfl_encoding.h mbfl_language.h mbfl_string.h mbfl_convert.h mbfl_ident.h mbfl_memory_device.h mbfl_allocators.h mbfl_defs.h mbfl_filter_output.h mbfilter_pass.h mbfilter_wchar.h mbfilter_8bit.h
-
-$(libmbfl_filters_la):
- $(MAKE) -C `dirname $(libmbfl_filters_la)`
-
-$(libmbfl_nls_la):
- $(MAKE) -C `dirname $(libmbfl_nls_la)`
diff --git a/ext/mbstring/libmbfl/mbfl/Makefile.bcc32 b/ext/mbstring/libmbfl/mbfl/Makefile.bcc32
deleted file mode 100644
index 5d43e6a6f4..0000000000
--- a/ext/mbstring/libmbfl/mbfl/Makefile.bcc32
+++ /dev/null
@@ -1,7 +0,0 @@
-!include ..\rules.mak.bcc32
-OBJS=mbfilter.obj mbfilter_8bit.obj mbfilter_pass.obj mbfilter_wchar.obj mbfl_allocators.obj mbfl_convert.obj mbfl_encoding.obj mbfl_filter_output.obj mbfl_ident.obj mbfl_language.obj mbfl_memory_device.obj mbfl_string.obj
-
-all: $(OBJS)
-
-clean:
- @for %i in ($(OBJS)) do @if exist %i del %i
diff --git a/ext/mbstring/libmbfl/mbfl/mbfilter.c b/ext/mbstring/libmbfl/mbfl/mbfilter.c
deleted file mode 100644
index 7984f30931..0000000000
--- a/ext/mbstring/libmbfl/mbfl/mbfilter.c
+++ /dev/null
@@ -1,2703 +0,0 @@
-/*
- * charset=UTF-8
- * vim600: encoding=utf-8
- */
-
-/*
- * "streamable kanji code filter and converter"
- *
- * Copyright (c) 1998,1999,2000,2001 HappySize, Inc. All rights reserved.
- *
- * This software is released under the GNU Lesser General Public License.
- * (Version 2.1, February 1999)
- * Please read the following detail of the licence (in japanese).
- *
- * ◆使用許諾æ¡ä»¶â—†
- *
- * ã“ã®ã‚½ãƒ•ãƒˆã‚¦ã‚§ã‚¢ã¯æ ªå¼ä¼šç¤¾ãƒãƒƒãƒ”ーサイズã«ã‚ˆã£ã¦é–‹ç™ºã•ã‚Œã¾ã—ãŸã€‚æ ªå¼ä¼šç¤¾ãƒãƒƒ
- * ピーサイズã¯ã€è‘—作権法ãŠã‚ˆã³ä¸‡å›½è‘—作権æ¡ç´„ã®å®šã‚ã«ã‚ˆã‚Šã€ã“ã®ã‚½ãƒ•ãƒˆã‚¦ã‚§ã‚¢ã«é–¢
- * ã™ã‚‹ã™ã¹ã¦ã®æ¨©åˆ©ã‚’ç•™ä¿ã™ã‚‹æ¨©åˆ©ã‚’æŒã¡ã€ã“ã“ã«è¡Œä½¿ã—ã¾ã™ã€‚æ ªå¼ä¼šç¤¾ãƒãƒƒãƒ”ーサイ
- * ズã¯ä»¥ä¸‹ã«æ˜Žè¨˜ã—ãŸæ¡ä»¶ã«å¾“ã£ã¦ã€ã“ã®ã‚½ãƒ•ãƒˆã‚¦ã‚§ã‚¢ã‚’使用ã™ã‚‹æŽ’ä»–çš„ã§ã¯ãªã„権利
- * ã‚’ãŠå®¢æ§˜ã«è¨±è«¾ã—ã¾ã™ã€‚何人ãŸã‚Šã¨ã‚‚ã€ä»¥ä¸‹ã®æ¡ä»¶ã«åã—ã¦ã“ã®ã‚½ãƒ•ãƒˆã‚¦ã‚§ã‚¢ã‚’使用
- * ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。
- *
- * ã“ã®ã‚½ãƒ•ãƒˆã‚¦ã‚§ã‚¢ã‚’「GNU Lesser General Public License (Version 2.1, February
- * 1999)ã€ã«ç¤ºã•ã‚ŒãŸæ¡ä»¶ã§ä½¿ç”¨ã™ã‚‹ã“ã¨ã‚’ã€å…¨ã¦ã®æ–¹ã«è¨±è«¾ã—ã¾ã™ã€‚「GNU Lesser
- * General Public Licenseã€ã‚’満ãŸã•ãªã„使用ã«ã¯ã€æ ªå¼ä¼šç¤¾ãƒãƒƒãƒ”ーサイズã‹ã‚‰æ›¸é¢
- * ã«ã‚ˆã‚‹è¨±è«¾ã‚’å¾—ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚
- *
- * 「GNU Lesser General Public Licenseã€ã®å…¨æ–‡ã¯ä»¥ä¸‹ã®ã‚¦ã‚§ãƒ–ページã‹ã‚‰å–å¾—ã§ã
- * ã¾ã™ã€‚「GNU Lesser General Public Licenseã€ã¨ã¯ã€ã“ã‚Œã¾ã§Library General
- * Public Licenseã¨å‘¼ã°ã‚Œã¦ã„ãŸã‚‚ã®ã§ã™ã€‚
- * http://www.gnu.org/ --- GNUウェブサイト
- * http://www.gnu.org/copyleft/lesser.html --- ライセンス文é¢
- * ã“ã®ãƒ©ã‚¤ã‚»ãƒ³ã‚¹ã®å†…容ãŒã‚ã‹ã‚‰ãªã„æ–¹ã€å®ˆã‚Œãªã„æ–¹ã«ã¯ä½¿ç”¨ã‚’許諾ã—ã¾ã›ã‚“。
- *
- * ã—ã‹ã—ãªãŒã‚‰ã€å½“社ã¨GNUプロジェクトã¨ã®ç‰¹å®šã®é–¢ä¿‚を示唆ã¾ãŸã¯ä¸»å¼µã™ã‚‹ã‚‚ã®ã§
- * ã¯ã‚ã‚Šã¾ã›ã‚“。
- *
- * â—†ä¿è¨¼å†…容◆
- *
- * ã“ã®ã‚½ãƒ•ãƒˆã‚¦ã‚§ã‚¢ã¯ã€æœŸå¾…ã•ã‚ŒãŸå‹•ä½œãƒ»æ©Ÿèƒ½ãƒ»æ€§èƒ½ã‚’æŒã¤ã“ã¨ã‚’目標ã¨ã—ã¦è¨­è¨ˆã•ã‚Œ
- * 開発ã•ã‚Œã¦ã„ã¾ã™ãŒã€ã“れをä¿è¨¼ã™ã‚‹ã‚‚ã®ã§ã¯ã‚ã‚Šã¾ã›ã‚“。ã“ã®ã‚½ãƒ•ãƒˆã‚¦ã‚§ã‚¢ã¯ã€Œã“
- * ã®ã¾ã¾ã€ã®çŠ¶æ…‹ã§æä¾›ã•ã‚Œã¦ãŠã‚Šã€ãŸã¨ãˆã°ã“ã®ã‚½ãƒ•ãƒˆã‚¦ã‚§ã‚¢ã®æœ‰ç”¨æ€§ãªã„ã—特定ã®
- * 目的ã«åˆè‡´ã™ã‚‹ã“ã¨ã¨ã„ã£ãŸã€ä½•ã‚‰ã‹ã®ä¿è¨¼å†…容ãŒã€æ˜Žç¤ºã•ã‚ŒãŸã‚Šæš—é»™ã«ç¤ºã•ã‚Œã¦ã„
- * ã‚‹å ´åˆã§ã‚ã£ã¦ã‚‚ã€ãã®ä¿è¨¼ã¯ç„¡åŠ¹ã§ã™ã€‚ã“ã®ã‚½ãƒ•ãƒˆã‚¦ã‚§ã‚¢ã‚’使用ã—ãŸçµæžœãªã„ã—使
- * 用ã—ãªã‹ã£ãŸçµæžœã«ã‚ˆã£ã¦ã€ç›´æŽ¥ã‚ã‚‹ã„ã¯é–“接ã«å—ã‘ãŸèº«ä½“çš„ãªå‚·å®³ã€è²¡ç”£ä¸Šã®æ害
- * ã€ãƒ‡ãƒ¼ã‚¿ã®æ失ã‚ã‚‹ã„ã¯ãã®ä»–ã®å…¨ã¦ã®æ害ã«ã¤ã„ã¦ã¯ã€ãã®æ害ã®å¯èƒ½æ€§ãŒä½¿ç”¨è€…
- * ã€å½“社ã‚ã‚‹ã„ã¯ç¬¬ä¸‰è€…ã«ã‚ˆã£ã¦è­¦å‘Šã•ã‚Œã¦ã„ãŸå ´åˆã§ã‚ã£ã¦ã‚‚ã€å½“社ã¯ãã®æ害ã®è³ 
- * å„ŸãŠã‚ˆã³è£œå¡«ã‚’è¡Œã„ã¾ã›ã‚“。ã“ã®è¦å®šã¯ä»–ã®å…¨ã¦ã®ã€æ›¸é¢ä¸Šã¾ãŸã¯æ›¸é¢ã«ç„¡ã„ä¿è¨¼ãƒ»
- * 契約・è¦å®šã«å„ªå…ˆã—ã¾ã™ã€‚
- *
- * ◆著作権者ã®é€£çµ¡å…ˆãŠã‚ˆã³ä½¿ç”¨æ¡ä»¶ã«ã¤ã„ã¦ã®å•ã„åˆã‚ã›å…ˆâ—†
- *
- * 〒102-0073
- * æ±äº¬éƒ½åƒä»£ç”°åŒºä¹æ®µåŒ—1-13-5日本地所第一ビル4F
- * æ ªå¼ä¼šç¤¾ãƒãƒƒãƒ”ーサイズ
- * Phone: 03-3512-3655, Fax: 03-3512-3656
- * Email: sales@happysize.co.jp
- * Web: http://happysize.com/
- *
- * ◆著者◆
- *
- * 金本 茂 <sgk@happysize.co.jp>
- *
- * ◆履歴◆
- *
- * 1998/11/10 sgk implementation in C++
- * 1999/4/25 sgk Cã§æ›¸ããªãŠã—。
- * 1999/4/26 sgk 入力フィルタを実装。漢字コードを推定ã—ãªãŒã‚‰ãƒ•ã‚£ãƒ«ã‚¿ã‚’追加。
- * 1999/6/?? Unicodeサãƒãƒ¼ãƒˆã€‚
- * 1999/6/22 sgk ライセンスをLGPLã«å¤‰æ›´ã€‚
- *
- */
-
-/*
- * Unicode support
- *
- * Portions copyright (c) 1999,2000,2001 by the PHP3 internationalization team.
- * All rights reserved.
- *
- */
-
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <stddef.h>
-
-#ifdef HAVE_STRING_H
-#include <string.h>
-#endif
-
-#ifdef HAVE_STRINGS_H
-#include <strings.h>
-#endif
-
-#ifdef HAVE_STDDEF_H
-#include <stddef.h>
-#endif
-
-#include "mbfilter.h"
-#include "mbfl_filter_output.h"
-#include "mbfilter_pass.h"
-
-/* hex character table "0123456789ABCDEF" */
-static char mbfl_hexchar_table[] = {
- 0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x41,0x42,0x43,0x44,0x45,0x46
-};
-
-
-
-/*
- * encoding filter
- */
-#define CK(statement) do { if ((statement) < 0) return (-1); } while (0)
-
-
-/*
- * buffering converter
- */
-mbfl_buffer_converter *
-mbfl_buffer_converter_new(
- enum mbfl_no_encoding from,
- enum mbfl_no_encoding to,
- int buf_initsz)
-{
- mbfl_buffer_converter *convd;
-
- /* allocate */
- convd = (mbfl_buffer_converter*)mbfl_malloc(sizeof (mbfl_buffer_converter));
- if (convd == NULL) {
- return NULL;
- }
-
- /* initialize */
- convd->from = mbfl_no2encoding(from);
- convd->to = mbfl_no2encoding(to);
- if (convd->from == NULL) {
- convd->from = &mbfl_encoding_pass;
- }
- if (convd->to == NULL) {
- convd->to = &mbfl_encoding_pass;
- }
-
- /* create convert filter */
- convd->filter1 = NULL;
- convd->filter2 = NULL;
- if (mbfl_convert_filter_get_vtbl(convd->from->no_encoding, convd->to->no_encoding) != NULL) {
- convd->filter1 = mbfl_convert_filter_new(convd->from->no_encoding, convd->to->no_encoding, mbfl_memory_device_output, 0, &convd->device);
- } else {
- convd->filter2 = mbfl_convert_filter_new(mbfl_no_encoding_wchar, convd->to->no_encoding, mbfl_memory_device_output, 0, &convd->device);
- if (convd->filter2 != NULL) {
- convd->filter1 = mbfl_convert_filter_new(convd->from->no_encoding, mbfl_no_encoding_wchar, (int (*)(int, void*))convd->filter2->filter_function, NULL, convd->filter2);
- if (convd->filter1 == NULL) {
- mbfl_convert_filter_delete(convd->filter2);
- }
- }
- }
- if (convd->filter1 == NULL) {
- return NULL;
- }
-
- mbfl_memory_device_init(&convd->device, buf_initsz, buf_initsz/4);
-
- return convd;
-}
-
-void
-mbfl_buffer_converter_delete(mbfl_buffer_converter *convd)
-{
- if (convd != NULL) {
- if (convd->filter1) {
- mbfl_convert_filter_delete(convd->filter1);
- }
- if (convd->filter2) {
- mbfl_convert_filter_delete(convd->filter2);
- }
- mbfl_memory_device_clear(&convd->device);
- mbfl_free((void*)convd);
- }
-}
-
-void
-mbfl_buffer_converter_reset(mbfl_buffer_converter *convd)
-{
- mbfl_memory_device_reset(&convd->device);
-}
-
-int
-mbfl_buffer_converter_illegal_mode(mbfl_buffer_converter *convd, int mode)
-{
- if (convd != NULL) {
- if (convd->filter2 != NULL) {
- convd->filter2->illegal_mode = mode;
- } else if (convd->filter1 != NULL) {
- convd->filter1->illegal_mode = mode;
- } else {
- return 0;
- }
- }
-
- return 1;
-}
-
-int
-mbfl_buffer_converter_illegal_substchar(mbfl_buffer_converter *convd, int substchar)
-{
- if (convd != NULL) {
- if (convd->filter2 != NULL) {
- convd->filter2->illegal_substchar = substchar;
- } else if (convd->filter1 != NULL) {
- convd->filter1->illegal_substchar = substchar;
- } else {
- return 0;
- }
- }
-
- return 1;
-}
-
-int
-mbfl_buffer_converter_strncat(mbfl_buffer_converter *convd, const unsigned char *p, int n)
-{
- mbfl_convert_filter *filter;
- int (*filter_function)(int c, mbfl_convert_filter *filter);
-
- if (convd != NULL && p != NULL) {
- filter = convd->filter1;
- if (filter != NULL) {
- filter_function = filter->filter_function;
- while (n > 0) {
- if ((*filter_function)(*p++, filter) < 0) {
- break;
- }
- n--;
- }
- }
- }
-
- return n;
-}
-
-int
-mbfl_buffer_converter_feed(mbfl_buffer_converter *convd, mbfl_string *string)
-{
- int n;
- unsigned char *p;
- mbfl_convert_filter *filter;
- int (*filter_function)(int c, mbfl_convert_filter *filter);
-
- if (convd == NULL || string == NULL) {
- return -1;
- }
- mbfl_memory_device_realloc(&convd->device, convd->device.pos + string->len, string->len/4);
- /* feed data */
- n = string->len;
- p = string->val;
- filter = convd->filter1;
- if (filter != NULL) {
- filter_function = filter->filter_function;
- while (n > 0) {
- if ((*filter_function)(*p++, filter) < 0) {
- return -1;
- }
- n--;
- }
- }
-
- return 0;
-}
-
-int
-mbfl_buffer_converter_flush(mbfl_buffer_converter *convd)
-{
- if (convd == NULL) {
- return -1;
- }
-
- if (convd->filter1 != NULL) {
- mbfl_convert_filter_flush(convd->filter1);
- }
- if (convd->filter2 != NULL) {
- mbfl_convert_filter_flush(convd->filter2);
- }
-
- return 0;
-}
-
-mbfl_string *
-mbfl_buffer_converter_getbuffer(mbfl_buffer_converter *convd, mbfl_string *result)
-{
- if (convd != NULL && result != NULL && convd->device.buffer != NULL) {
- result->no_encoding = convd->to->no_encoding;
- result->val = convd->device.buffer;
- result->len = convd->device.pos;
- } else {
- result = NULL;
- }
-
- return result;
-}
-
-mbfl_string *
-mbfl_buffer_converter_result(mbfl_buffer_converter *convd, mbfl_string *result)
-{
- if (convd == NULL || result == NULL) {
- return NULL;
- }
- result->no_encoding = convd->to->no_encoding;
- return mbfl_memory_device_result(&convd->device, result);
-}
-
-mbfl_string *
-mbfl_buffer_converter_feed_result(mbfl_buffer_converter *convd, mbfl_string *string,
- mbfl_string *result)
-{
- if (convd == NULL || string == NULL || result == NULL) {
- return NULL;
- }
- mbfl_buffer_converter_feed(convd, string);
- if (convd->filter1 != NULL) {
- mbfl_convert_filter_flush(convd->filter1);
- }
- if (convd->filter2 != NULL) {
- mbfl_convert_filter_flush(convd->filter2);
- }
- result->no_encoding = convd->to->no_encoding;
- return mbfl_memory_device_result(&convd->device, result);
-}
-
-
-/*
- * encoding detector
- */
-mbfl_encoding_detector *
-mbfl_encoding_detector_new(enum mbfl_no_encoding *elist, int elistsz)
-{
- mbfl_encoding_detector *identd;
-
- int i, num;
- mbfl_identify_filter *filter;
-
- if (elist == NULL || elistsz <= 0) {
- return NULL;
- }
-
- /* allocate */
- identd = (mbfl_encoding_detector*)mbfl_malloc(sizeof(mbfl_encoding_detector));
- if (identd == NULL) {
- return NULL;
- }
- identd->filter_list = (mbfl_identify_filter **)mbfl_calloc(elistsz, sizeof(mbfl_identify_filter *));
- if (identd->filter_list == NULL) {
- mbfl_free(identd);
- return NULL;
- }
-
- /* create filters */
- i = 0;
- num = 0;
- while (i < elistsz) {
- filter = mbfl_identify_filter_new(elist[i]);
- if (filter != NULL) {
- identd->filter_list[num] = filter;
- num++;
- }
- i++;
- }
- identd->filter_list_size = num;
-
- return identd;
-}
-
-void
-mbfl_encoding_detector_delete(mbfl_encoding_detector *identd)
-{
- int i;
-
- if (identd != NULL) {
- if (identd->filter_list != NULL) {
- i = identd->filter_list_size;
- while (i > 0) {
- i--;
- mbfl_identify_filter_delete(identd->filter_list[i]);
- }
- mbfl_free((void *)identd->filter_list);
- }
- mbfl_free((void *)identd);
- }
-}
-
-int
-mbfl_encoding_detector_feed(mbfl_encoding_detector *identd, mbfl_string *string)
-{
- int i, n, num, bad, res;
- unsigned char *p;
- mbfl_identify_filter *filter;
-
- res = 0;
- /* feed data */
- if (identd != NULL && string != NULL && string->val != NULL) {
- num = identd->filter_list_size;
- n = string->len;
- p = string->val;
- while (n > 0) {
- i = 0;
- bad = 0;
- while (i < num) {
- filter = identd->filter_list[i];
- (*filter->filter_function)(*p, filter);
- if (filter->flag) {
- bad++;
- }
- i++;
- }
- if ((num - 1) <= bad) {
- res = 1;
- break;
- }
- p++;
- n--;
- }
- }
-
- return res;
-}
-
-enum mbfl_no_encoding mbfl_encoding_detector_judge(mbfl_encoding_detector *identd)
-{
- mbfl_identify_filter *filter;
- enum mbfl_no_encoding encoding;
- int n;
-
- /* judge */
- encoding = mbfl_no_encoding_invalid;
- if (identd != NULL) {
- n = identd->filter_list_size - 1;
- while (n >= 0) {
- filter = identd->filter_list[n];
- if (!filter->flag) {
- encoding = filter->encoding->no_encoding;
- }
- n--;
- }
- }
-
- return encoding;
-}
-
-
-/*
- * encoding converter
- */
-mbfl_string *
-mbfl_convert_encoding(
- mbfl_string *string,
- mbfl_string *result,
- enum mbfl_no_encoding toenc)
-{
- int n;
- unsigned char *p;
- const mbfl_encoding *encoding;
- mbfl_memory_device device;
- mbfl_convert_filter *filter1;
- mbfl_convert_filter *filter2;
-
- /* initialize */
- encoding = mbfl_no2encoding(toenc);
- if (encoding == NULL || string == NULL || result == NULL) {
- return NULL;
- }
-
- filter1 = NULL;
- filter2 = NULL;
- if (mbfl_convert_filter_get_vtbl(string->no_encoding, toenc) != NULL) {
- filter1 = mbfl_convert_filter_new(string->no_encoding, toenc, mbfl_memory_device_output, 0, &device);
- } else {
- filter2 = mbfl_convert_filter_new(mbfl_no_encoding_wchar, toenc, mbfl_memory_device_output, 0, &device);
- if (filter2 != NULL) {
- filter1 = mbfl_convert_filter_new(string->no_encoding, mbfl_no_encoding_wchar, (int (*)(int, void*))filter2->filter_function, NULL, filter2);
- if (filter1 == NULL) {
- mbfl_convert_filter_delete(filter2);
- }
- }
- }
- if (filter1 == NULL) {
- return NULL;
- }
-
- if (filter2 != NULL) {
- filter2->illegal_mode = MBFL_OUTPUTFILTER_ILLEGAL_MODE_CHAR;
- filter2->illegal_substchar = 0x3f; /* '?' */
- }
-
- mbfl_memory_device_init(&device, string->len, (string->len >> 2) + 8);
-
- /* feed data */
- n = string->len;
- p = string->val;
- if (p != NULL) {
- while (n > 0) {
- if ((*filter1->filter_function)(*p++, filter1) < 0) {
- break;
- }
- n--;
- }
- }
-
- mbfl_convert_filter_flush(filter1);
- mbfl_convert_filter_delete(filter1);
- if (filter2 != NULL) {
- mbfl_convert_filter_flush(filter2);
- mbfl_convert_filter_delete(filter2);
- }
-
- return mbfl_memory_device_result(&device, result);
-}
-
-
-/*
- * identify encoding
- */
-const mbfl_encoding *
-mbfl_identify_encoding(mbfl_string *string, enum mbfl_no_encoding *elist, int elistsz, int strict)
-{
- int i, n, num, bad;
- unsigned char *p;
- mbfl_identify_filter *flist, *filter;
- const mbfl_encoding *encoding;
-
- /* flist is an array of mbfl_identify_filter instances */
- flist = (mbfl_identify_filter *)mbfl_calloc(elistsz, sizeof(mbfl_identify_filter));
- if (flist == NULL) {
- return NULL;
- }
-
- num = 0;
- if (elist != NULL) {
- for (i = 0; i < elistsz; i++) {
- if (!mbfl_identify_filter_init(&flist[num], elist[i])) {
- num++;
- }
- }
- }
-
- /* feed data */
- n = string->len;
- p = string->val;
-
- if (p != NULL) {
- bad = 0;
- while (n > 0) {
- for (i = 0; i < num; i++) {
- filter = &flist[i];
- (*filter->filter_function)(*p, filter);
- if (filter->flag) {
- bad++;
- }
- }
- if ((num - 1) <= bad && !strict) {
- break;
- }
- p++;
- n--;
- }
- }
-
- /* judge */
- encoding = NULL;
-
- for (i = 0; i < num; i++) {
- filter = &flist[i];
- if (!filter->flag) {
- encoding = filter->encoding;
- break;
- }
- }
-
- /* cleanup */
- /* dtors should be called in reverse order */
- i = num; while (--i >= 0) {
- mbfl_identify_filter_cleanup(&flist[i]);
- }
-
- mbfl_free((void *)flist);
-
- return encoding;
-}
-
-const char*
-mbfl_identify_encoding_name(mbfl_string *string, enum mbfl_no_encoding *elist, int elistsz, int strict)
-{
- const mbfl_encoding *encoding;
-
- encoding = mbfl_identify_encoding(string, elist, elistsz, strict);
- if (encoding != NULL &&
- encoding->no_encoding > mbfl_no_encoding_charset_min &&
- encoding->no_encoding < mbfl_no_encoding_charset_max) {
- return encoding->name;
- } else {
- return NULL;
- }
-}
-
-const enum mbfl_no_encoding
-mbfl_identify_encoding_no(mbfl_string *string, enum mbfl_no_encoding *elist, int elistsz)
-{
- const mbfl_encoding *encoding;
-
- encoding = mbfl_identify_encoding(string, elist, elistsz, 0);
- if (encoding != NULL &&
- encoding->no_encoding > mbfl_no_encoding_charset_min &&
- encoding->no_encoding < mbfl_no_encoding_charset_max) {
- return encoding->no_encoding;
- } else {
- return mbfl_no_encoding_invalid;
- }
-}
-
-
-/*
- * strlen
- */
-static int
-filter_count_output(int c, void *data)
-{
- (*(int *)data)++;
- return c;
-}
-
-int
-mbfl_strlen(mbfl_string *string)
-{
- int len, n, m, k;
- unsigned char *p;
- const unsigned char *mbtab;
- const mbfl_encoding *encoding;
-
- encoding = mbfl_no2encoding(string->no_encoding);
- if (encoding == NULL || string == NULL) {
- return -1;
- }
-
- len = 0;
- if (encoding->flag & MBFL_ENCTYPE_SBCS) {
- len = string->len;
- } else if (encoding->flag & (MBFL_ENCTYPE_WCS2BE | MBFL_ENCTYPE_WCS2LE)) {
- len = string->len/2;
- } else if (encoding->flag & (MBFL_ENCTYPE_WCS4BE | MBFL_ENCTYPE_WCS4LE)) {
- len = string->len/4;
- } else if (encoding->mblen_table != NULL) {
- mbtab = encoding->mblen_table;
- n = 0;
- p = string->val;
- k = string->len;
- /* count */
- if (p != NULL) {
- while (n < k) {
- m = mbtab[*p];
- n += m;
- p += m;
- len++;
- };
- }
- } else {
- /* wchar filter */
- mbfl_convert_filter *filter = mbfl_convert_filter_new(
- string->no_encoding,
- mbfl_no_encoding_wchar,
- filter_count_output, 0, &len);
- if (filter == NULL) {
- return -1;
- }
- /* count */
- n = string->len;
- p = string->val;
- if (p != NULL) {
- while (n > 0) {
- (*filter->filter_function)(*p++, filter);
- n--;
- }
- }
- mbfl_convert_filter_delete(filter);
- }
-
- return len;
-}
-
-
-/*
- * strpos
- */
-struct collector_strpos_data {
- mbfl_convert_filter *next_filter;
- mbfl_wchar_device needle;
- int needle_len;
- int start;
- int output;
- int found_pos;
- int needle_pos;
- int matched_pos;
-};
-
-static int
-collector_strpos(int c, void* data)
-{
- int *p, *h, *m, n;
- struct collector_strpos_data *pc = (struct collector_strpos_data*)data;
-
- if (pc->output >= pc->start) {
- if (c == (int)pc->needle.buffer[pc->needle_pos]) {
- if (pc->needle_pos == 0) {
- pc->found_pos = pc->output; /* found position */
- }
- pc->needle_pos++; /* needle pointer */
- if (pc->needle_pos >= pc->needle_len) {
- pc->matched_pos = pc->found_pos; /* matched position */
- pc->needle_pos--;
- goto retry;
- }
- } else if (pc->needle_pos != 0) {
-retry:
- h = (int *)pc->needle.buffer;
- h++;
- for (;;) {
- pc->found_pos++;
- p = h;
- m = pc->needle.buffer;
- n = pc->needle_pos - 1;
- while (n > 0 && *p == *m) {
- n--;
- p++;
- m++;
- }
- if (n <= 0) {
- if (*m != c) {
- pc->needle_pos = 0;
- }
- break;
- } else {
- h++;
- pc->needle_pos--;
- }
- }
- }
- }
-
- pc->output++;
- return c;
-}
-
-/*
- * oddlen
- */
-int
-mbfl_oddlen(mbfl_string *string)
-{
- int len, n, m, k;
- unsigned char *p;
- const unsigned char *mbtab;
- const mbfl_encoding *encoding;
-
-
- if (string == NULL) {
- return -1;
- }
- encoding = mbfl_no2encoding(string->no_encoding);
- if (encoding == NULL) {
- return -1;
- }
-
- len = 0;
- if (encoding->flag & MBFL_ENCTYPE_SBCS) {
- return 0;
- } else if (encoding->flag & (MBFL_ENCTYPE_WCS2BE | MBFL_ENCTYPE_WCS2LE)) {
- return len % 2;
- } else if (encoding->flag & (MBFL_ENCTYPE_WCS4BE | MBFL_ENCTYPE_WCS4LE)) {
- return len % 4;
- } else if (encoding->mblen_table != NULL) {
- mbtab = encoding->mblen_table;
- n = 0;
- p = string->val;
- k = string->len;
- /* count */
- if (p != NULL) {
- while (n < k) {
- m = mbtab[*p];
- n += m;
- p += m;
- };
- }
- return n-k;
- } else {
- /* how can i do ? */
- return 0;
- }
- /* NOT REACHED */
-}
-
-int
-mbfl_strpos(
- mbfl_string *haystack,
- mbfl_string *needle,
- int offset,
- int reverse)
-{
- int n, result;
- unsigned char *p;
- mbfl_convert_filter *filter;
- struct collector_strpos_data pc;
-
- if (haystack == NULL || needle == 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--;
- }
- }
- 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;
- }
- /* 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;
- }
- pc.start = offset;
- pc.output = 0;
- pc.needle_pos = 0;
- pc.found_pos = 0;
- pc.matched_pos = -1;
-
- /* feed data */
- p = haystack->val;
- n = haystack->len;
- if (p != NULL) {
- while (n > 0) {
- if ((*filter->filter_function)(*p++, filter) < 0) {
- pc.matched_pos = -4;
- break;
- }
- if (pc.matched_pos >= 0 && !reverse) {
- break;
- }
- n--;
- }
- }
- mbfl_convert_filter_flush(filter);
- result = pc.matched_pos;
- mbfl_convert_filter_delete(filter);
- mbfl_wchar_device_clear(&pc.needle);
-
- return result;
-}
-
-/*
- * substr_count
- */
-
-int
-mbfl_substr_count(
- mbfl_string *haystack,
- mbfl_string *needle
- )
-{
- int n, result = 0;
- unsigned char *p;
- mbfl_convert_filter *filter;
- struct collector_strpos_data pc;
-
- if (haystack == NULL || needle == 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--;
- }
- }
- 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;
- }
- /* 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;
- }
- pc.start = 0;
- pc.output = 0;
- pc.needle_pos = 0;
- pc.found_pos = 0;
- pc.matched_pos = -1;
-
- /* feed data */
- p = haystack->val;
- n = haystack->len;
- if (p != NULL) {
- while (n > 0) {
- if ((*filter->filter_function)(*p++, filter) < 0) {
- pc.matched_pos = -4;
- break;
- }
- if (pc.matched_pos >= 0) {
- ++result;
- pc.matched_pos = -1;
- }
- n--;
- }
- }
- mbfl_convert_filter_flush(filter);
- mbfl_convert_filter_delete(filter);
- mbfl_wchar_device_clear(&pc.needle);
-
- return result;
-}
-
-/*
- * substr
- */
-struct collector_substr_data {
- mbfl_convert_filter *next_filter;
- int start;
- int stop;
- int output;
-};
-
-static int
-collector_substr(int c, void* data)
-{
- struct collector_substr_data *pc = (struct collector_substr_data*)data;
-
- if (pc->output >= pc->stop) {
- return -1;
- }
-
- if (pc->output >= pc->start) {
- (*pc->next_filter->filter_function)(c, pc->next_filter);
- }
-
- pc->output++;
-
- return c;
-}
-
-mbfl_string *
-mbfl_substr(
- mbfl_string *string,
- mbfl_string *result,
- int from,
- int length)
-{
- const mbfl_encoding *encoding;
- int n, m, k, len, start, end;
- unsigned char *p, *w;
- const unsigned char *mbtab;
-
- encoding = mbfl_no2encoding(string->no_encoding);
- if (encoding == NULL || string == NULL || result == NULL) {
- return NULL;
- }
- mbfl_string_init(result);
- result->no_language = string->no_language;
- result->no_encoding = string->no_encoding;
-
- if ((encoding->flag & (MBFL_ENCTYPE_SBCS | MBFL_ENCTYPE_WCS2BE | MBFL_ENCTYPE_WCS2LE | MBFL_ENCTYPE_WCS4BE | MBFL_ENCTYPE_WCS4LE)) ||
- encoding->mblen_table != NULL) {
- len = string->len;
- start = from;
- end = from + length;
- if (encoding->flag & (MBFL_ENCTYPE_WCS2BE | MBFL_ENCTYPE_MWC2LE)) {
- start *= 2;
- end = start + length*2;
- } else if (encoding->flag & (MBFL_ENCTYPE_WCS4BE | MBFL_ENCTYPE_MWC4LE)) {
- start *= 4;
- end = start + length*4;
- } else if (encoding->mblen_table != NULL) {
- mbtab = encoding->mblen_table;
- start = 0;
- end = 0;
- n = 0;
- k = 0;
- p = string->val;
- if (p != NULL) {
- /* search start position */
- while (k <= from) {
- start = n;
- if (n >= len) {
- break;
- }
- m = mbtab[*p];
- n += m;
- p += m;
- k++;
- }
- /* detect end position */
- k = 0;
- end = start;
- while (k < length) {
- end = n;
- if (n >= len) {
- break;
- }
- m = mbtab[*p];
- n += m;
- p += m;
- k++;
- }
- }
- }
-
- if (start > len) {
- start = len;
- }
- if (start < 0) {
- start = 0;
- }
- if (end > len) {
- end = len;
- }
- if (end < 0) {
- end = 0;
- }
- if (start > end) {
- start = end;
- }
-
- /* allocate memory and copy */
- n = end - start;
- result->len = 0;
- result->val = w = (unsigned char*)mbfl_malloc((n + 8)*sizeof(unsigned char));
- if (w != NULL) {
- p = string->val;
- if (p != NULL) {
- p += start;
- result->len = n;
- while (n > 0) {
- *w++ = *p++;
- n--;
- }
- }
- *w++ = '\0';
- *w++ = '\0';
- *w++ = '\0';
- *w = '\0';
- } else {
- result = NULL;
- }
- } else {
- mbfl_memory_device device;
- struct collector_substr_data pc;
- mbfl_convert_filter *decoder;
- mbfl_convert_filter *encoder;
-
- mbfl_memory_device_init(&device, length + 1, 0);
- mbfl_string_init(result);
- result->no_language = string->no_language;
- result->no_encoding = string->no_encoding;
- /* output code filter */
- decoder = mbfl_convert_filter_new(
- mbfl_no_encoding_wchar,
- string->no_encoding,
- mbfl_memory_device_output, 0, &device);
- /* wchar filter */
- encoder = mbfl_convert_filter_new(
- string->no_encoding,
- mbfl_no_encoding_wchar,
- collector_substr, 0, &pc);
- if (decoder == NULL || encoder == NULL) {
- mbfl_convert_filter_delete(encoder);
- mbfl_convert_filter_delete(decoder);
- return NULL;
- }
- pc.next_filter = decoder;
- pc.start = from;
- pc.stop = from + length;
- pc.output = 0;
-
- /* feed data */
- p = string->val;
- n = string->len;
- if (p != NULL) {
- while (n > 0) {
- if ((*encoder->filter_function)(*p++, encoder) < 0) {
- break;
- }
- n--;
- }
- }
-
- mbfl_convert_filter_flush(encoder);
- mbfl_convert_filter_flush(decoder);
- result = mbfl_memory_device_result(&device, result);
- mbfl_convert_filter_delete(encoder);
- mbfl_convert_filter_delete(decoder);
- }
-
- return result;
-}
-
-
-/*
- * strcut
- */
-mbfl_string *
-mbfl_strcut(
- mbfl_string *string,
- mbfl_string *result,
- int from,
- int length)
-{
- const mbfl_encoding *encoding;
- int n, m, k, len, start, end;
- unsigned char *p, *w;
- const unsigned char *mbtab;
- mbfl_memory_device device;
- mbfl_convert_filter *encoder, *encoder_tmp, *decoder, *decoder_tmp;
-
- encoding = mbfl_no2encoding(string->no_encoding);
- if (encoding == NULL || string == NULL || result == NULL) {
- return NULL;
- }
- mbfl_string_init(result);
- result->no_language = string->no_language;
- result->no_encoding = string->no_encoding;
-
- if ((encoding->flag & (MBFL_ENCTYPE_SBCS | MBFL_ENCTYPE_WCS2BE | MBFL_ENCTYPE_WCS2LE | MBFL_ENCTYPE_WCS4BE | MBFL_ENCTYPE_WCS4LE)) ||
- encoding->mblen_table != NULL) {
- len = string->len;
- start = from;
- end = from + length;
- if (encoding->flag & (MBFL_ENCTYPE_WCS2BE | MBFL_ENCTYPE_WCS2LE)) {
- start /= 2;
- start *= 2;
- end = length/2;
- end *= 2;
- end += start;
- } else if (encoding->flag & (MBFL_ENCTYPE_WCS4BE | MBFL_ENCTYPE_WCS4LE)) {
- start /= 4;
- start *= 4;
- end = length/4;
- end *= 4;
- end += start;
- } else if (encoding->mblen_table != NULL) {
- mbtab = encoding->mblen_table;
- start = 0;
- end = 0;
- n = 0;
- p = string->val;
- if (p != NULL) {
- /* search start position */
- for (;;) {
- m = mbtab[*p];
- n += m;
- p += m;
- if (n > from) {
- break;
- }
- start = n;
- }
- /* search end position */
- k = start + length;
- if (k >= (int)string->len) {
- end = string->len;
- } else {
- end = start;
- while (n <= k) {
- end = n;
- m = mbtab[*p];
- n += m;
- p += m;
- }
- }
- }
- }
-
- if (start > len) {
- start = len;
- }
- if (start < 0) {
- start = 0;
- }
- if (end > len) {
- end = len;
- }
- if (end < 0) {
- end = 0;
- }
- if (start > end) {
- start = end;
- }
- /* allocate memory and copy string */
- n = end - start;
- result->len = 0;
- result->val = w = (unsigned char*)mbfl_malloc((n + 8)*sizeof(unsigned char));
- if (w != NULL) {
- result->len = n;
- p = &(string->val[start]);
- while (n > 0) {
- *w++ = *p++;
- n--;
- }
- *w++ = '\0';
- *w++ = '\0';
- *w++ = '\0';
- *w = '\0';
- } else {
- result = NULL;
- }
- } else {
- /* wchar filter */
- encoder = mbfl_convert_filter_new(
- string->no_encoding,
- mbfl_no_encoding_wchar,
- mbfl_filter_output_null, 0, 0);
- encoder_tmp = mbfl_convert_filter_new(
- string->no_encoding,
- mbfl_no_encoding_wchar,
- mbfl_filter_output_null, 0, 0);
- /* output code filter */
- decoder = mbfl_convert_filter_new(
- mbfl_no_encoding_wchar,
- string->no_encoding,
- mbfl_memory_device_output, 0, &device);
- decoder_tmp = mbfl_convert_filter_new(
- mbfl_no_encoding_wchar,
- string->no_encoding,
- mbfl_memory_device_output, 0, &device);
- if (encoder == NULL || encoder_tmp == NULL || decoder == NULL || decoder_tmp == NULL) {
- mbfl_convert_filter_delete(encoder);
- mbfl_convert_filter_delete(encoder_tmp);
- mbfl_convert_filter_delete(decoder);
- mbfl_convert_filter_delete(decoder_tmp);
- return NULL;
- }
- mbfl_memory_device_init(&device, length + 8, 0);
- k = 0;
- n = 0;
- p = string->val;
- if (p != NULL) {
- /* seartch start position */
- while (n < from) {
- (*encoder->filter_function)(*p++, encoder);
- n++;
- }
- /* output a little shorter than "length" */
- encoder->output_function = mbfl_filter_output_pipe;
- encoder->data = decoder;
- k = length - 20;
- len = string->len;
- while (n < len && device.pos < k) {
- (*encoder->filter_function)(*p++, encoder);
- n++;
- }
- /* detect end position */
- for (;;) {
- /* backup current state */
- k = device.pos;
- mbfl_convert_filter_copy(encoder, encoder_tmp);
- mbfl_convert_filter_copy(decoder, decoder_tmp);
- if (n >= len) {
- break;
- }
- /* feed 1byte and flush */
- (*encoder->filter_function)(*p, encoder);
- (*encoder->filter_flush)(encoder);
- (*decoder->filter_flush)(decoder);
- if (device.pos > length) {
- break;
- }
- /* restore filter and re-feed data */
- device.pos = k;
- mbfl_convert_filter_copy(encoder_tmp, encoder);
- mbfl_convert_filter_copy(decoder_tmp, decoder);
- (*encoder->filter_function)(*p, encoder);
- p++;
- n++;
- }
- device.pos = k;
- mbfl_convert_filter_copy(encoder_tmp, encoder);
- mbfl_convert_filter_copy(decoder_tmp, decoder);
- mbfl_convert_filter_flush(encoder);
- mbfl_convert_filter_flush(decoder);
- }
- result = mbfl_memory_device_result(&device, result);
- mbfl_convert_filter_delete(encoder);
- mbfl_convert_filter_delete(encoder_tmp);
- mbfl_convert_filter_delete(decoder);
- mbfl_convert_filter_delete(decoder_tmp);
- }
-
- return result;
-}
-
-
-/*
- * strwidth
- */
-static int
-filter_count_width(int c, void* data)
-{
- if (c >= 0x20) {
- if (c < 0x2000 || (c > 0xff60 && c < 0xffa0)) {
- (*(int *)data)++;
- } else {
- (*(int *)data) += 2;
- }
- }
-
- return c;
-}
-
-int
-mbfl_strwidth(mbfl_string *string)
-{
- int len, n;
- unsigned char *p;
- mbfl_convert_filter *filter;
-
- len = 0;
- if (string->len > 0 && string->val != NULL) {
- /* wchar filter */
- filter = mbfl_convert_filter_new(
- string->no_encoding,
- mbfl_no_encoding_wchar,
- filter_count_width, 0, &len);
- if (filter == NULL) {
- mbfl_convert_filter_delete(filter);
- return -1;
- }
-
- /* feed data */
- p = string->val;
- n = string->len;
- while (n > 0) {
- (*filter->filter_function)(*p++, filter);
- n--;
- }
-
- mbfl_convert_filter_flush(filter);
- mbfl_convert_filter_delete(filter);
- }
-
- return len;
-}
-
-
-/*
- * strimwidth
- */
-struct collector_strimwidth_data {
- mbfl_convert_filter *decoder;
- mbfl_convert_filter *decoder_backup;
- mbfl_memory_device device;
- int from;
- int width;
- int outwidth;
- int outchar;
- int status;
- int endpos;
-};
-
-static int
-collector_strimwidth(int c, void* data)
-{
- struct collector_strimwidth_data *pc = (struct collector_strimwidth_data*)data;
-
- switch (pc->status) {
- case 10:
- (*pc->decoder->filter_function)(c, pc->decoder);
- break;
- default:
- if (pc->outchar >= pc->from) {
- if (c >= 0x20) {
- if (c < 0x2000 || (c > 0xff60 && c < 0xffa0)) {
- pc->outwidth++;
- } else {
- pc->outwidth += 2;
- }
- }
- if (pc->outwidth > pc->width) {
- if (pc->status == 0) {
- pc->endpos = pc->device.pos;
- mbfl_convert_filter_copy(pc->decoder, pc->decoder_backup);
- }
- pc->status++;
- (*pc->decoder->filter_function)(c, pc->decoder);
- c = -1;
- } else {
- (*pc->decoder->filter_function)(c, pc->decoder);
- }
- }
- pc->outchar++;
- break;
- }
-
- return c;
-}
-
-mbfl_string *
-mbfl_strimwidth(
- mbfl_string *string,
- mbfl_string *marker,
- mbfl_string *result,
- int from,
- int width)
-{
- struct collector_strimwidth_data pc;
- mbfl_convert_filter *encoder;
- int n, mkwidth;
- unsigned char *p;
-
- if (string == NULL || result == NULL) {
- return NULL;
- }
- mbfl_string_init(result);
- result->no_language = string->no_language;
- result->no_encoding = string->no_encoding;
- mbfl_memory_device_init(&pc.device, width, 0);
-
- /* output code filter */
- pc.decoder = mbfl_convert_filter_new(
- mbfl_no_encoding_wchar,
- string->no_encoding,
- mbfl_memory_device_output, 0, &pc.device);
- pc.decoder_backup = mbfl_convert_filter_new(
- mbfl_no_encoding_wchar,
- string->no_encoding,
- mbfl_memory_device_output, 0, &pc.device);
- /* wchar filter */
- encoder = mbfl_convert_filter_new(
- string->no_encoding,
- mbfl_no_encoding_wchar,
- collector_strimwidth, 0, &pc);
- if (pc.decoder == NULL || pc.decoder_backup == NULL || encoder == NULL) {
- mbfl_convert_filter_delete(encoder);
- mbfl_convert_filter_delete(pc.decoder);
- mbfl_convert_filter_delete(pc.decoder_backup);
- return NULL;
- }
- mkwidth = 0;
- if (marker) {
- mkwidth = mbfl_strwidth(marker);
- }
- pc.from = from;
- pc.width = width - mkwidth;
- pc.outwidth = 0;
- pc.outchar = 0;
- pc.status = 0;
- pc.endpos = 0;
-
- /* feed data */
- p = string->val;
- n = string->len;
- if (p != NULL) {
- while (n > 0) {
- n--;
- if ((*encoder->filter_function)(*p++, encoder) < 0) {
- break;
- }
- }
- mbfl_convert_filter_flush(encoder);
- if (pc.status != 0 && mkwidth > 0) {
- pc.width += mkwidth;
- while (n > 0) {
- if ((*encoder->filter_function)(*p++, encoder) < 0) {
- break;
- }
- n--;
- }
- mbfl_convert_filter_flush(encoder);
- if (pc.status != 1) {
- pc.status = 10;
- pc.device.pos = pc.endpos;
- mbfl_convert_filter_copy(pc.decoder_backup, pc.decoder);
- mbfl_convert_filter_reset(encoder, marker->no_encoding, mbfl_no_encoding_wchar);
- p = marker->val;
- n = marker->len;
- while (n > 0) {
- if ((*encoder->filter_function)(*p++, encoder) < 0) {
- break;
- }
- n--;
- }
- mbfl_convert_filter_flush(encoder);
- }
- } else if (pc.status != 0) {
- pc.device.pos = pc.endpos;
- mbfl_convert_filter_copy(pc.decoder_backup, pc.decoder);
- }
- mbfl_convert_filter_flush(pc.decoder);
- }
- result = mbfl_memory_device_result(&pc.device, result);
- mbfl_convert_filter_delete(encoder);
- mbfl_convert_filter_delete(pc.decoder);
- mbfl_convert_filter_delete(pc.decoder_backup);
-
- return result;
-}
-
-
-
-/*
- * convert Hankaku and Zenkaku
- */
-struct collector_hantozen_data {
- mbfl_convert_filter *next_filter;
- int mode;
- int status;
- int cache;
-};
-
-static const unsigned char hankana2zenkata_table[64] = {
- 0x00,0x02,0x0C,0x0D,0x01,0xFB,0xF2,0xA1,0xA3,0xA5,
- 0xA7,0xA9,0xE3,0xE5,0xE7,0xC3,0xFC,0xA2,0xA4,0xA6,
- 0xA8,0xAA,0xAB,0xAD,0xAF,0xB1,0xB3,0xB5,0xB7,0xB9,
- 0xBB,0xBD,0xBF,0xC1,0xC4,0xC6,0xC8,0xCA,0xCB,0xCC,
- 0xCD,0xCE,0xCF,0xD2,0xD5,0xD8,0xDB,0xDE,0xDF,0xE0,
- 0xE1,0xE2,0xE4,0xE6,0xE8,0xE9,0xEA,0xEB,0xEC,0xED,
- 0xEF,0xF3,0x9B,0x9C
-};
-static const unsigned char hankana2zenhira_table[64] = {
- 0x00,0x02,0x0C,0x0D,0x01,0xFB,0x92,0x41,0x43,0x45,
- 0x47,0x49,0x83,0x85,0x87,0x63,0xFC,0x42,0x44,0x46,
- 0x48,0x4A,0x4B,0x4D,0x4F,0x51,0x53,0x55,0x57,0x59,
- 0x5B,0x5D,0x5F,0x61,0x64,0x66,0x68,0x6A,0x6B,0x6C,
- 0x6D,0x6E,0x6F,0x72,0x75,0x78,0x7B,0x7E,0x7F,0x80,
- 0x81,0x82,0x84,0x86,0x88,0x89,0x8A,0x8B,0x8C,0x8D,
- 0x8F,0x93,0x9B,0x9C
-};
-static const unsigned char zenkana2hankana_table[84][2] = {
- {0x67,0x00},{0x71,0x00},{0x68,0x00},{0x72,0x00},{0x69,0x00},
- {0x73,0x00},{0x6A,0x00},{0x74,0x00},{0x6B,0x00},{0x75,0x00},
- {0x76,0x00},{0x76,0x9E},{0x77,0x00},{0x77,0x9E},{0x78,0x00},
- {0x78,0x9E},{0x79,0x00},{0x79,0x9E},{0x7A,0x00},{0x7A,0x9E},
- {0x7B,0x00},{0x7B,0x9E},{0x7C,0x00},{0x7C,0x9E},{0x7D,0x00},
- {0x7D,0x9E},{0x7E,0x00},{0x7E,0x9E},{0x7F,0x00},{0x7F,0x9E},
- {0x80,0x00},{0x80,0x9E},{0x81,0x00},{0x81,0x9E},{0x6F,0x00},
- {0x82,0x00},{0x82,0x9E},{0x83,0x00},{0x83,0x9E},{0x84,0x00},
- {0x84,0x9E},{0x85,0x00},{0x86,0x00},{0x87,0x00},{0x88,0x00},
- {0x89,0x00},{0x8A,0x00},{0x8A,0x9E},{0x8A,0x9F},{0x8B,0x00},
- {0x8B,0x9E},{0x8B,0x9F},{0x8C,0x00},{0x8C,0x9E},{0x8C,0x9F},
- {0x8D,0x00},{0x8D,0x9E},{0x8D,0x9F},{0x8E,0x00},{0x8E,0x9E},
- {0x8E,0x9F},{0x8F,0x00},{0x90,0x00},{0x91,0x00},{0x92,0x00},
- {0x93,0x00},{0x6C,0x00},{0x94,0x00},{0x6D,0x00},{0x95,0x00},
- {0x6E,0x00},{0x96,0x00},{0x97,0x00},{0x98,0x00},{0x99,0x00},
- {0x9A,0x00},{0x9B,0x00},{0x9C,0x00},{0x9C,0x00},{0x72,0x00},
- {0x74,0x00},{0x66,0x00},{0x9D,0x00},{0x73,0x9E}
-};
-
-static int
-collector_hantozen(int c, void* data)
-{
- int s, mode, n;
- struct collector_hantozen_data *pc = (struct collector_hantozen_data*)data;
-
- s = c;
- mode = pc->mode;
-
- if (mode & 0xf) { /* hankaku to zenkaku */
- if ((mode & 0x1) && c >= 0x21 && c <= 0x7d && c != 0x22 && c != 0x27 && c != 0x5c) { /* all except <"> <'> <\> <~> */
- s = c + 0xfee0;
- } else if ((mode & 0x2) && ((c >= 0x41 && c <= 0x5a) || (c >= 0x61 && c <= 0x7a))) { /* alpha */
- s = c + 0xfee0;
- } else if ((mode & 0x4) && c >= 0x30 && c <= 0x39) { /* num */
- s = c + 0xfee0;
- } else if ((mode & 0x8) && c == 0x20) { /* spase */
- s = 0x3000;
- }
- }
-
- if (mode & 0xf0) { /* zenkaku to hankaku */
- if ((mode & 0x10) && c >= 0xff01 && c <= 0xff5d && c != 0xff02 && c != 0xff07 && c!= 0xff3c) { /* all except <"> <'> <\> <~> */
- s = c - 0xfee0;
- } else if ((mode & 0x20) && ((c >= 0xff21 && c <= 0xff3a) || (c >= 0xff41 && c <= 0xff5a))) { /* alpha */
- s = c - 0xfee0;
- } else if ((mode & 0x40) && (c >= 0xff10 && c <= 0xff19)) { /* num */
- s = c - 0xfee0;
- } else if ((mode & 0x80) && (c == 0x3000)) { /* spase */
- s = 0x20;
- } else if ((mode & 0x10) && (c == 0x2212)) { /* MINUS SIGN */
- s = 0x2d;
- }
- }
-
- if (mode & 0x300) { /* hankaku kana to zenkaku kana */
- if ((mode & 0x100) && (mode & 0x800)) { /* hankaku kana to zenkaku katakana and glue voiced sound mark */
- if (c >= 0xff61 && c <= 0xff9f) {
- if (pc->status) {
- n = (pc->cache - 0xff60) & 0x3f;
- if (c == 0xff9e && ((n >= 22 && n <= 36) || (n >= 42 && n <= 46))) {
- pc->status = 0;
- s = 0x3001 + hankana2zenkata_table[n];
- } else if (c == 0xff9e && n == 19) {
- pc->status = 0;
- s = 0x30f4;
- } else if (c == 0xff9f && (n >= 42 && n <= 46)) {
- pc->status = 0;
- s = 0x3002 + hankana2zenkata_table[n];
- } else {
- pc->status = 1;
- pc->cache = c;
- s = 0x3000 + hankana2zenkata_table[n];
- }
- } else {
- pc->status = 1;
- pc->cache = c;
- return c;
- }
- } else {
- if (pc->status) {
- n = (pc->cache - 0xff60) & 0x3f;
- pc->status = 0;
- (*pc->next_filter->filter_function)(0x3000 + hankana2zenkata_table[n], pc->next_filter);
- }
- }
- } else if ((mode & 0x200) && (mode & 0x800)) { /* hankaku kana to zenkaku hirangana and glue voiced sound mark */
- if (c >= 0xff61 && c <= 0xff9f) {
- if (pc->status) {
- n = (pc->cache - 0xff60) & 0x3f;
- if (c == 0xff9e && ((n >= 22 && n <= 36) || (n >= 42 && n <= 46))) {
- pc->status = 0;
- s = 0x3001 + hankana2zenhira_table[n];
- } else if (c == 0xff9f && (n >= 42 && n <= 46)) {
- pc->status = 0;
- s = 0x3002 + hankana2zenhira_table[n];
- } else {
- pc->status = 1;
- pc->cache = c;
- s = 0x3000 + hankana2zenhira_table[n];
- }
- } else {
- pc->status = 1;
- pc->cache = c;
- return c;
- }
- } else {
- if (pc->status) {
- n = (pc->cache - 0xff60) & 0x3f;
- pc->status = 0;
- (*pc->next_filter->filter_function)(0x3000 + hankana2zenhira_table[n], pc->next_filter);
- }
- }
- } else if ((mode & 0x100) && c >= 0xff61 && c <= 0xff9f) { /* hankaku kana to zenkaku katakana */
- s = 0x3000 + hankana2zenkata_table[c - 0xff60];
- } else if ((mode & 0x200) && c >= 0xff61 && c <= 0xff9f) { /* hankaku kana to zenkaku hirangana */
- s = 0x3000 + hankana2zenhira_table[c - 0xff60];
- }
- }
-
- if (mode & 0x3000) { /* Zenkaku kana to hankaku kana */
- if ((mode & 0x1000) && c >= 0x30a1 && c <= 0x30f4) { /* Zenkaku katakana to hankaku kana */
- n = c - 0x30a1;
- if (zenkana2hankana_table[n][1] != 0) {
- (*pc->next_filter->filter_function)(0xff00 + zenkana2hankana_table[n][0], pc->next_filter);
- s = 0xff00 + zenkana2hankana_table[n][1];
- } else {
- s = 0xff00 + zenkana2hankana_table[n][0];
- }
- } else if ((mode & 0x2000) && c >= 0x3041 && c <= 0x3093) { /* Zenkaku hirangana to hankaku kana */
- n = c - 0x3041;
- if (zenkana2hankana_table[n][1] != 0) {
- (*pc->next_filter->filter_function)(0xff00 + zenkana2hankana_table[n][0], pc->next_filter);
- s = 0xff00 + zenkana2hankana_table[n][1];
- } else {
- s = 0xff00 + zenkana2hankana_table[n][0];
- }
- } else if (c == 0x3001) {
- s = 0xff64; /* HALFWIDTH IDEOGRAPHIC COMMA */
- } else if (c == 0x3002) {
- s = 0xff61; /* HALFWIDTH IDEOGRAPHIC FULL STOP */
- } else if (c == 0x300c) {
- s = 0xff62; /* HALFWIDTH LEFT CORNER BRACKET */
- } else if (c == 0x300d) {
- s = 0xff63; /* HALFWIDTH RIGHT CORNER BRACKET */
- } else if (c == 0x309b) {
- s = 0xff9e; /* HALFWIDTH KATAKANA VOICED SOUND MARK */
- } else if (c == 0x309c) {
- s = 0xff9f; /* HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK */
- } else if (c == 0x30fc) {
- s = 0xff70; /* HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK */
- } else if (c == 0x30fb) {
- s = 0xff65; /* HALFWIDTH KATAKANA MIDDLE DOT */
- }
- } else if (mode & 0x30000) {
- if ((mode & 0x10000) && c >= 0x3041 && c <= 0x3093) { /* Zenkaku hirangana to Zenkaku katakana */
- s = c + 0x60;
- } else if ((mode & 0x20000) && c >= 0x30a1 && c <= 0x30f3) { /* Zenkaku katakana to Zenkaku hirangana */
- s = c - 0x60;
- }
- }
-
- if (mode & 0x100000) { /* special ascii to symbol */
- if (c == 0x5c) {
- s = 0xffe5; /* FULLWIDTH YEN SIGN */
- } else if (c == 0xa5) { /* YEN SIGN */
- s = 0xffe5; /* FULLWIDTH YEN SIGN */
- } else if (c == 0x7e) {
- s = 0xffe3; /* FULLWIDTH MACRON */
- } else if (c == 0x203e) { /* OVERLINE */
- s = 0xffe3; /* FULLWIDTH MACRON */
- } else if (c == 0x27) {
- s = 0x2019; /* RIGHT SINGLE QUOTATION MARK */
- } else if (c == 0x22) {
- s = 0x201d; /* RIGHT DOUBLE QUOTATION MARK */
- }
- } else if (mode & 0x200000) { /* special symbol to ascii */
- if (c == 0xffe5) { /* FULLWIDTH YEN SIGN */
- s = 0x5c;
- } else if (c == 0xff3c) { /* FULLWIDTH REVERSE SOLIDUS */
- s = 0x5c;
- } else if (c == 0xffe3) { /* FULLWIDTH MACRON */
- s = 0x7e;
- } else if (c == 0x203e) { /* OVERLINE */
- s = 0x7e;
- } else if (c == 0x2018) { /* LEFT SINGLE QUOTATION MARK*/
- s = 0x27;
- } else if (c == 0x2019) { /* RIGHT SINGLE QUOTATION MARK */
- s = 0x27;
- } else if (c == 0x201c) { /* LEFT DOUBLE QUOTATION MARK */
- s = 0x22;
- } else if (c == 0x201d) { /* RIGHT DOUBLE QUOTATION MARK */
- s = 0x22;
- }
- }
-
- if (mode & 0x400000) { /* special ascii to symbol */
- if (c == 0x5c) {
- s = 0xff3c; /* FULLWIDTH REVERSE SOLIDUS */
- } else if (c == 0x7e) {
- s = 0xff5e; /* FULLWIDTH TILDE */
- } else if (c == 0x27) {
- s = 0xff07; /* FULLWIDTH APOSTROPHE */
- } else if (c == 0x22) {
- s = 0xff02; /* FULLWIDTH QUOTATION MARK */
- }
- } else if (mode & 0x800000) { /* special symbol to ascii */
- if (c == 0xff3c) { /* FULLWIDTH REVERSE SOLIDUS */
- s = 0x5c;
- } else if (c == 0xff5e) { /* FULLWIDTH TILDE */
- s = 0x7e;
- } else if (c == 0xff07) { /* FULLWIDTH APOSTROPHE */
- s = 0x27;
- } else if (c == 0xff02) { /* FULLWIDTH QUOTATION MARK */
- s = 0x22;
- }
- }
-
- return (*pc->next_filter->filter_function)(s, pc->next_filter);
-}
-
-static int
-collector_hantozen_flush(struct collector_hantozen_data *pc)
-{
- int ret, n;
-
- ret = 0;
- if (pc->status) {
- n = (pc->cache - 0xff60) & 0x3f;
- if (pc->mode & 0x100) { /* hankaku kana to zenkaku katakana */
- ret = (*pc->next_filter->filter_function)(0x3000 + hankana2zenkata_table[n], pc->next_filter);
- } else if (pc->mode & 0x200) { /* hankaku kana to zenkaku hirangana */
- ret = (*pc->next_filter->filter_function)(0x3000 + hankana2zenhira_table[n], pc->next_filter);
- }
- pc->status = 0;
- }
-
- return ret;
-}
-
-mbfl_string *
-mbfl_ja_jp_hantozen(
- mbfl_string *string,
- mbfl_string *result,
- int mode)
-{
- int n;
- unsigned char *p;
- const mbfl_encoding *encoding;
- mbfl_memory_device device;
- struct collector_hantozen_data pc;
- mbfl_convert_filter *decoder;
- mbfl_convert_filter *encoder;
-
- /* initialize */
- if (string == NULL || result == NULL) {
- return NULL;
- }
- encoding = mbfl_no2encoding(string->no_encoding);
- if (encoding == NULL) {
- return NULL;
- }
- mbfl_memory_device_init(&device, string->len, 0);
- mbfl_string_init(result);
- result->no_language = string->no_language;
- result->no_encoding = string->no_encoding;
- decoder = mbfl_convert_filter_new(
- mbfl_no_encoding_wchar,
- string->no_encoding,
- mbfl_memory_device_output, 0, &device);
- encoder = mbfl_convert_filter_new(
- string->no_encoding,
- mbfl_no_encoding_wchar,
- collector_hantozen, 0, &pc);
- if (decoder == NULL || encoder == NULL) {
- mbfl_convert_filter_delete(encoder);
- mbfl_convert_filter_delete(decoder);
- return NULL;
- }
- pc.next_filter = decoder;
- pc.mode = mode;
- pc.status = 0;
- pc.cache = 0;
-
- /* feed data */
- p = string->val;
- n = string->len;
- if (p != NULL) {
- while (n > 0) {
- if ((*encoder->filter_function)(*p++, encoder) < 0) {
- break;
- }
- n--;
- }
- }
-
- mbfl_convert_filter_flush(encoder);
- collector_hantozen_flush(&pc);
- mbfl_convert_filter_flush(decoder);
- result = mbfl_memory_device_result(&device, result);
- mbfl_convert_filter_delete(encoder);
- mbfl_convert_filter_delete(decoder);
-
- return result;
-}
-
-
-/*
- * MIME header encode
- */
-struct mime_header_encoder_data {
- mbfl_convert_filter *conv1_filter;
- mbfl_convert_filter *block_filter;
- mbfl_convert_filter *conv2_filter;
- mbfl_convert_filter *conv2_filter_backup;
- mbfl_convert_filter *encod_filter;
- mbfl_convert_filter *encod_filter_backup;
- mbfl_memory_device outdev;
- mbfl_memory_device tmpdev;
- int status1;
- int status2;
- int prevpos;
- int linehead;
- int firstindent;
- int encnamelen;
- int lwsplen;
- char encname[128];
- char lwsp[16];
-};
-
-static int
-mime_header_encoder_block_collector(int c, void *data)
-{
- int n;
- struct mime_header_encoder_data *pe = (struct mime_header_encoder_data *)data;
-
- switch (pe->status2) {
- case 1: /* encoded word */
- pe->prevpos = pe->outdev.pos;
- mbfl_convert_filter_copy(pe->conv2_filter, pe->conv2_filter_backup);
- mbfl_convert_filter_copy(pe->encod_filter, pe->encod_filter_backup);
- (*pe->conv2_filter->filter_function)(c, pe->conv2_filter);
- (*pe->conv2_filter->filter_flush)(pe->conv2_filter);
- (*pe->encod_filter->filter_flush)(pe->encod_filter);
- n = pe->outdev.pos - pe->linehead + pe->firstindent;
- pe->outdev.pos = pe->prevpos;
- mbfl_convert_filter_copy(pe->conv2_filter_backup, pe->conv2_filter);
- mbfl_convert_filter_copy(pe->encod_filter_backup, pe->encod_filter);
- if (n >= 74) {
- (*pe->conv2_filter->filter_flush)(pe->conv2_filter);
- (*pe->encod_filter->filter_flush)(pe->encod_filter);
- mbfl_memory_device_strncat(&pe->outdev, "\x3f\x3d", 2); /* ?= */
- mbfl_memory_device_strncat(&pe->outdev, pe->lwsp, pe->lwsplen);
- pe->linehead = pe->outdev.pos;
- pe->firstindent = 0;
- mbfl_memory_device_strncat(&pe->outdev, pe->encname, pe->encnamelen);
- c = (*pe->conv2_filter->filter_function)(c, pe->conv2_filter);
- } else {
- c = (*pe->conv2_filter->filter_function)(c, pe->conv2_filter);
- }
- break;
-
- default:
- mbfl_memory_device_strncat(&pe->outdev, pe->encname, pe->encnamelen);
- c = (*pe->conv2_filter->filter_function)(c, pe->conv2_filter);
- pe->status2 = 1;
- break;
- }
-
- return c;
-}
-
-static int
-mime_header_encoder_collector(int c, void *data)
-{
- int n;
- struct mime_header_encoder_data *pe = (struct mime_header_encoder_data *)data;
-
- switch (pe->status1) {
- case 11: /* encoded word */
- (*pe->block_filter->filter_function)(c, pe->block_filter);
- break;
-
- default: /* ASCII */
- if (c >= 0x21 && c < 0x7f) { /* ASCII exclude SPACE and CTLs */
- mbfl_memory_device_output(c, &pe->tmpdev);
- pe->status1 = 1;
- } else if (pe->status1 == 0 && c == 0x20) { /* repeat SPACE */
- mbfl_memory_device_output(c, &pe->tmpdev);
- } else {
- if (pe->tmpdev.pos < 74 && c == 0x20) {
- n = pe->outdev.pos - pe->linehead + pe->tmpdev.pos + pe->firstindent;
- if (n > 74) {
- mbfl_memory_device_strncat(&pe->outdev, pe->lwsp, pe->lwsplen); /* LWSP */
- pe->linehead = pe->outdev.pos;
- pe->firstindent = 0;
- } else if (pe->outdev.pos > 0) {
- mbfl_memory_device_output(0x20, &pe->outdev);
- }
- mbfl_memory_device_devcat(&pe->outdev, &pe->tmpdev);
- mbfl_memory_device_reset(&pe->tmpdev);
- pe->status1 = 0;
- } else {
- n = pe->outdev.pos - pe->linehead + pe->encnamelen + pe->firstindent;
- if (n > 60) {
- mbfl_memory_device_strncat(&pe->outdev, pe->lwsp, pe->lwsplen); /* LWSP */
- pe->linehead = pe->outdev.pos;
- pe->firstindent = 0;
- } else if (pe->outdev.pos > 0) {
- mbfl_memory_device_output(0x20, &pe->outdev);
- }
- mbfl_convert_filter_devcat(pe->block_filter, &pe->tmpdev);
- mbfl_memory_device_reset(&pe->tmpdev);
- (*pe->block_filter->filter_function)(c, pe->block_filter);
- pe->status1 = 11;
- }
- }
- break;
- }
-
- return c;
-}
-
-mbfl_string *
-mime_header_encoder_result(struct mime_header_encoder_data *pe, mbfl_string *result)
-{
- if (pe->status1 >= 10) {
- (*pe->conv2_filter->filter_flush)(pe->conv2_filter);
- (*pe->encod_filter->filter_flush)(pe->encod_filter);
- mbfl_memory_device_strncat(&pe->outdev, "\x3f\x3d", 2); /* ?= */
- } else if (pe->tmpdev.pos > 0) {
- if (pe->outdev.pos > 0) {
- if ((pe->outdev.pos - pe->linehead + pe->tmpdev.pos) > 74) {
- mbfl_memory_device_strncat(&pe->outdev, pe->lwsp, pe->lwsplen);
- } else {
- mbfl_memory_device_output(0x20, &pe->outdev);
- }
- }
- mbfl_memory_device_devcat(&pe->outdev, &pe->tmpdev);
- }
- mbfl_memory_device_reset(&pe->tmpdev);
- pe->prevpos = 0;
- pe->linehead = 0;
- pe->status1 = 0;
- pe->status2 = 0;
-
- return mbfl_memory_device_result(&pe->outdev, result);
-}
-
-struct mime_header_encoder_data*
-mime_header_encoder_new(
- enum mbfl_no_encoding incode,
- enum mbfl_no_encoding outcode,
- enum mbfl_no_encoding transenc)
-{
- int n;
- const char *s;
- const mbfl_encoding *outencoding;
- struct mime_header_encoder_data *pe;
-
- /* get output encoding and check MIME charset name */
- outencoding = mbfl_no2encoding(outcode);
- if (outencoding == NULL || outencoding->mime_name == NULL || outencoding->mime_name[0] == '\0') {
- return NULL;
- }
-
- pe = (struct mime_header_encoder_data*)mbfl_malloc(sizeof(struct mime_header_encoder_data));
- if (pe == NULL) {
- return NULL;
- }
-
- mbfl_memory_device_init(&pe->outdev, 0, 0);
- mbfl_memory_device_init(&pe->tmpdev, 0, 0);
- pe->prevpos = 0;
- pe->linehead = 0;
- pe->firstindent = 0;
- pe->status1 = 0;
- pe->status2 = 0;
-
- /* make the encoding description string exp. "=?ISO-2022-JP?B?" */
- n = 0;
- pe->encname[n++] = 0x3d;
- pe->encname[n++] = 0x3f;
- s = outencoding->mime_name;
- while (*s) {
- pe->encname[n++] = *s++;
- }
- pe->encname[n++] = 0x3f;
- if (transenc == mbfl_no_encoding_qprint) {
- pe->encname[n++] = 0x51;
- } else {
- pe->encname[n++] = 0x42;
- transenc = mbfl_no_encoding_base64;
- }
- pe->encname[n++] = 0x3f;
- pe->encname[n] = '\0';
- pe->encnamelen = n;
-
- n = 0;
- pe->lwsp[n++] = 0x0d;
- pe->lwsp[n++] = 0x0a;
- pe->lwsp[n++] = 0x20;
- pe->lwsp[n] = '\0';
- pe->lwsplen = n;
-
- /* transfer encode filter */
- pe->encod_filter = mbfl_convert_filter_new(outcode, transenc, mbfl_memory_device_output, 0, &(pe->outdev));
- pe->encod_filter_backup = mbfl_convert_filter_new(outcode, transenc, mbfl_memory_device_output, 0, &(pe->outdev));
-
- /* Output code filter */
- pe->conv2_filter = mbfl_convert_filter_new(mbfl_no_encoding_wchar, outcode, mbfl_filter_output_pipe, 0, pe->encod_filter);
- pe->conv2_filter_backup = mbfl_convert_filter_new(mbfl_no_encoding_wchar, outcode, mbfl_filter_output_pipe, 0, pe->encod_filter);
-
- /* encoded block filter */
- pe->block_filter = mbfl_convert_filter_new(mbfl_no_encoding_wchar, mbfl_no_encoding_wchar, mime_header_encoder_block_collector, 0, pe);
-
- /* Input code filter */
- pe->conv1_filter = mbfl_convert_filter_new(incode, mbfl_no_encoding_wchar, mime_header_encoder_collector, 0, pe);
-
- if (pe->encod_filter == NULL ||
- pe->encod_filter_backup == NULL ||
- pe->conv2_filter == NULL ||
- pe->conv2_filter_backup == NULL ||
- pe->conv1_filter == NULL) {
- mime_header_encoder_delete(pe);
- return NULL;
- }
-
- if (transenc == mbfl_no_encoding_qprint) {
- pe->encod_filter->status |= MBFL_QPRINT_STS_MIME_HEADER;
- pe->encod_filter_backup->status |= MBFL_QPRINT_STS_MIME_HEADER;
- } else {
- pe->encod_filter->status |= MBFL_BASE64_STS_MIME_HEADER;
- pe->encod_filter_backup->status |= MBFL_BASE64_STS_MIME_HEADER;
- }
-
- return pe;
-}
-
-void
-mime_header_encoder_delete(struct mime_header_encoder_data *pe)
-{
- if (pe) {
- mbfl_convert_filter_delete(pe->conv1_filter);
- mbfl_convert_filter_delete(pe->block_filter);
- mbfl_convert_filter_delete(pe->conv2_filter);
- mbfl_convert_filter_delete(pe->conv2_filter_backup);
- mbfl_convert_filter_delete(pe->encod_filter);
- mbfl_convert_filter_delete(pe->encod_filter_backup);
- mbfl_memory_device_clear(&pe->outdev);
- mbfl_memory_device_clear(&pe->tmpdev);
- mbfl_free((void*)pe);
- }
-}
-
-int
-mime_header_encoder_feed(int c, struct mime_header_encoder_data *pe)
-{
- return (*pe->conv1_filter->filter_function)(c, pe->conv1_filter);
-}
-
-mbfl_string *
-mbfl_mime_header_encode(
- mbfl_string *string,
- mbfl_string *result,
- enum mbfl_no_encoding outcode,
- enum mbfl_no_encoding encoding,
- const char *linefeed,
- int indent)
-{
- int n;
- unsigned char *p;
- struct mime_header_encoder_data *pe;
-
- mbfl_string_init(result);
- result->no_language = string->no_language;
- result->no_encoding = mbfl_no_encoding_ascii;
-
- pe = mime_header_encoder_new(string->no_encoding, outcode, encoding);
- if (pe == NULL) {
- return NULL;
- }
-
- if (linefeed != NULL) {
- n = 0;
- while (*linefeed && n < 8) {
- pe->lwsp[n++] = *linefeed++;
- }
- pe->lwsp[n++] = 0x20;
- pe->lwsp[n] = '\0';
- pe->lwsplen = n;
- }
- if (indent > 0 && indent < 74) {
- pe->firstindent = indent;
- }
-
- n = string->len;
- p = string->val;
- while (n > 0) {
- (*pe->conv1_filter->filter_function)(*p++, pe->conv1_filter);
- n--;
- }
-
- result = mime_header_encoder_result(pe, result);
- mime_header_encoder_delete(pe);
-
- return result;
-}
-
-
-/*
- * MIME header decode
- */
-struct mime_header_decoder_data {
- mbfl_convert_filter *deco_filter;
- mbfl_convert_filter *conv1_filter;
- mbfl_convert_filter *conv2_filter;
- mbfl_memory_device outdev;
- mbfl_memory_device tmpdev;
- int cspos;
- int status;
- enum mbfl_no_encoding encoding;
- enum mbfl_no_encoding incode;
- enum mbfl_no_encoding outcode;
-};
-
-static int
-mime_header_decoder_collector(int c, void* data)
-{
- const mbfl_encoding *encoding;
- struct mime_header_decoder_data *pd = (struct mime_header_decoder_data*)data;
-
- switch (pd->status) {
- case 1:
- if (c == 0x3f) { /* ? */
- mbfl_memory_device_output(c, &pd->tmpdev);
- pd->cspos = pd->tmpdev.pos;
- pd->status = 2;
- } else {
- mbfl_convert_filter_devcat(pd->conv1_filter, &pd->tmpdev);
- mbfl_memory_device_reset(&pd->tmpdev);
- if (c == 0x3d) { /* = */
- mbfl_memory_device_output(c, &pd->tmpdev);
- } else if (c == 0x0d || c == 0x0a) { /* CR or LF */
- pd->status = 9;
- } else {
- (*pd->conv1_filter->filter_function)(c, pd->conv1_filter);
- pd->status = 0;
- }
- }
- break;
- case 2: /* store charset string */
- if (c == 0x3f) { /* ? */
- /* identify charset */
- mbfl_memory_device_output('\0', &pd->tmpdev);
- encoding = mbfl_name2encoding((const char *)&pd->tmpdev.buffer[pd->cspos]);
- if (encoding != NULL) {
- pd->incode = encoding->no_encoding;
- pd->status = 3;
- }
- mbfl_memory_device_unput(&pd->tmpdev);
- mbfl_memory_device_output(c, &pd->tmpdev);
- } else {
- mbfl_memory_device_output(c, &pd->tmpdev);
- if (pd->tmpdev.pos > 100) { /* too long charset string */
- pd->status = 0;
- } else if (c == 0x0d || c == 0x0a) { /* CR or LF */
- mbfl_memory_device_unput(&pd->tmpdev);
- pd->status = 9;
- }
- if (pd->status != 2) {
- mbfl_convert_filter_devcat(pd->conv1_filter, &pd->tmpdev);
- mbfl_memory_device_reset(&pd->tmpdev);
- }
- }
- break;
- case 3: /* identify encoding */
- mbfl_memory_device_output(c, &pd->tmpdev);
- if (c == 0x42 || c == 0x62) { /* 'B' or 'b' */
- pd->encoding = mbfl_no_encoding_base64;
- pd->status = 4;
- } else if (c == 0x51 || c == 0x71) { /* 'Q' or 'q' */
- pd->encoding = mbfl_no_encoding_qprint;
- pd->status = 4;
- } else {
- if (c == 0x0d || c == 0x0a) { /* CR or LF */
- mbfl_memory_device_unput(&pd->tmpdev);
- pd->status = 9;
- } else {
- pd->status = 0;
- }
- mbfl_convert_filter_devcat(pd->conv1_filter, &pd->tmpdev);
- mbfl_memory_device_reset(&pd->tmpdev);
- }
- break;
- case 4: /* reset filter */
- mbfl_memory_device_output(c, &pd->tmpdev);
- if (c == 0x3f) { /* ? */
- /* charset convert filter */
- mbfl_convert_filter_reset(pd->conv1_filter, pd->incode, mbfl_no_encoding_wchar);
- /* decode filter */
- mbfl_convert_filter_reset(pd->deco_filter, pd->encoding, mbfl_no_encoding_8bit);
- pd->status = 5;
- } else {
- if (c == 0x0d || c == 0x0a) { /* CR or LF */
- mbfl_memory_device_unput(&pd->tmpdev);
- pd->status = 9;
- } else {
- pd->status = 0;
- }
- mbfl_convert_filter_devcat(pd->conv1_filter, &pd->tmpdev);
- }
- mbfl_memory_device_reset(&pd->tmpdev);
- break;
- case 5: /* encoded block */
- if (c == 0x3f) { /* ? */
- pd->status = 6;
- } else {
- (*pd->deco_filter->filter_function)(c, pd->deco_filter);
- }
- break;
- case 6: /* check end position */
- if (c == 0x3d) { /* = */
- /* flush and reset filter */
- (*pd->deco_filter->filter_flush)(pd->deco_filter);
- (*pd->conv1_filter->filter_flush)(pd->conv1_filter);
- mbfl_convert_filter_reset(pd->conv1_filter, mbfl_no_encoding_ascii, mbfl_no_encoding_wchar);
- pd->status = 7;
- } else {
- (*pd->deco_filter->filter_function)(0x3f, pd->deco_filter);
- if (c != 0x3f) { /* ? */
- (*pd->deco_filter->filter_function)(c, pd->deco_filter);
- pd->status = 5;
- }
- }
- break;
- case 7: /* after encoded block */
- if (c == 0x0d || c == 0x0a) { /* CR LF */
- pd->status = 8;
- } else {
- mbfl_memory_device_output(c, &pd->tmpdev);
- if (c == 0x3d) { /* = */
- pd->status = 1;
- } else if (c != 0x20 && c != 0x09) { /* not space */
- mbfl_convert_filter_devcat(pd->conv1_filter, &pd->tmpdev);
- mbfl_memory_device_reset(&pd->tmpdev);
- pd->status = 0;
- }
- }
- break;
- case 8: /* folding */
- case 9: /* folding */
- if (c != 0x0d && c != 0x0a && c != 0x20 && c != 0x09) {
- if (c == 0x3d) { /* = */
- if (pd->status == 8) {
- mbfl_memory_device_output(0x20, &pd->tmpdev); /* SPACE */
- } else {
- (*pd->conv1_filter->filter_function)(0x20, pd->conv1_filter);
- }
- mbfl_memory_device_output(c, &pd->tmpdev);
- pd->status = 1;
- } else {
- mbfl_memory_device_output(0x20, &pd->tmpdev);
- mbfl_memory_device_output(c, &pd->tmpdev);
- mbfl_convert_filter_devcat(pd->conv1_filter, &pd->tmpdev);
- mbfl_memory_device_reset(&pd->tmpdev);
- pd->status = 0;
- }
- }
- break;
- default: /* non encoded block */
- if (c == 0x0d || c == 0x0a) { /* CR LF */
- pd->status = 9;
- } else if (c == 0x3d) { /* = */
- mbfl_memory_device_output(c, &pd->tmpdev);
- pd->status = 1;
- } else {
- (*pd->conv1_filter->filter_function)(c, pd->conv1_filter);
- }
- break;
- }
-
- return c;
-}
-
-mbfl_string *
-mime_header_decoder_result(struct mime_header_decoder_data *pd, mbfl_string *result)
-{
- switch (pd->status) {
- case 1:
- case 2:
- case 3:
- case 4:
- case 7:
- case 8:
- case 9:
- mbfl_convert_filter_devcat(pd->conv1_filter, &pd->tmpdev);
- break;
- case 5:
- case 6:
- (*pd->deco_filter->filter_flush)(pd->deco_filter);
- (*pd->conv1_filter->filter_flush)(pd->conv1_filter);
- break;
- }
- (*pd->conv2_filter->filter_flush)(pd->conv2_filter);
- mbfl_memory_device_reset(&pd->tmpdev);
- pd->status = 0;
-
- return mbfl_memory_device_result(&pd->outdev, result);
-}
-
-struct mime_header_decoder_data*
-mime_header_decoder_new(enum mbfl_no_encoding outcode)
-{
- struct mime_header_decoder_data *pd;
-
- pd = (struct mime_header_decoder_data*)mbfl_malloc(sizeof(struct mime_header_decoder_data));
- if (pd == NULL) {
- return NULL;
- }
-
- mbfl_memory_device_init(&pd->outdev, 0, 0);
- mbfl_memory_device_init(&pd->tmpdev, 0, 0);
- pd->cspos = 0;
- pd->status = 0;
- pd->encoding = mbfl_no_encoding_pass;
- pd->incode = mbfl_no_encoding_ascii;
- pd->outcode = outcode;
- /* charset convert filter */
- pd->conv2_filter = mbfl_convert_filter_new(mbfl_no_encoding_wchar, pd->outcode, mbfl_memory_device_output, 0, &pd->outdev);
- pd->conv1_filter = mbfl_convert_filter_new(pd->incode, mbfl_no_encoding_wchar, mbfl_filter_output_pipe, 0, pd->conv2_filter);
- /* decode filter */
- pd->deco_filter = mbfl_convert_filter_new(pd->encoding, mbfl_no_encoding_8bit, mbfl_filter_output_pipe, 0, pd->conv1_filter);
-
- if (pd->conv1_filter == NULL || pd->conv2_filter == NULL || pd->deco_filter == NULL) {
- mime_header_decoder_delete(pd);
- return NULL;
- }
-
- return pd;
-}
-
-void
-mime_header_decoder_delete(struct mime_header_decoder_data *pd)
-{
- if (pd) {
- mbfl_convert_filter_delete(pd->conv2_filter);
- mbfl_convert_filter_delete(pd->conv1_filter);
- mbfl_convert_filter_delete(pd->deco_filter);
- mbfl_memory_device_clear(&pd->outdev);
- mbfl_memory_device_clear(&pd->tmpdev);
- mbfl_free((void*)pd);
- }
-}
-
-int
-mime_header_decoder_feed(int c, struct mime_header_decoder_data *pd)
-{
- return mime_header_decoder_collector(c, pd);
-}
-
-mbfl_string *
-mbfl_mime_header_decode(
- mbfl_string *string,
- mbfl_string *result,
- enum mbfl_no_encoding outcode)
-{
- int n;
- unsigned char *p;
- struct mime_header_decoder_data *pd;
-
- mbfl_string_init(result);
- result->no_language = string->no_language;
- result->no_encoding = outcode;
-
- pd = mime_header_decoder_new(outcode);
- if (pd == NULL) {
- return NULL;
- }
-
- /* feed data */
- n = string->len;
- p = string->val;
- while (n > 0) {
- mime_header_decoder_collector(*p++, pd);
- n--;
- }
-
- result = mime_header_decoder_result(pd, result);
- mime_header_decoder_delete(pd);
-
- return result;
-}
-
-
-
-/*
- * convert HTML numeric entity
- */
-struct collector_htmlnumericentity_data {
- mbfl_convert_filter *decoder;
- int status;
- int cache;
- int digit;
- int *convmap;
- int mapsize;
-};
-
-static int
-collector_encode_htmlnumericentity(int c, void *data)
-{
- struct collector_htmlnumericentity_data *pc = (struct collector_htmlnumericentity_data *)data;
- int f, n, s, r, d, size, *mapelm;
-
- size = pc->mapsize;
- f = 0;
- n = 0;
- while (n < size) {
- mapelm = &(pc->convmap[n*4]);
- if (c >= mapelm[0] && c <= mapelm[1]) {
- s = (c + mapelm[2]) & mapelm[3];
- if (s >= 0) {
- (*pc->decoder->filter_function)(0x26, pc->decoder); /* '&' */
- (*pc->decoder->filter_function)(0x23, pc->decoder); /* '#' */
- r = 100000000;
- s %= r;
- while (r > 0) {
- d = s/r;
- if (d || f) {
- f = 1;
- s %= r;
- (*pc->decoder->filter_function)(mbfl_hexchar_table[d], pc->decoder);
- }
- r /= 10;
- }
- if (!f) {
- f = 1;
- (*pc->decoder->filter_function)(mbfl_hexchar_table[0], pc->decoder);
- }
- (*pc->decoder->filter_function)(0x3b, pc->decoder); /* ';' */
- }
- }
- if (f) {
- break;
- }
- n++;
- }
- if (!f) {
- (*pc->decoder->filter_function)(c, pc->decoder);
- }
-
- return c;
-}
-
-static int
-collector_decode_htmlnumericentity(int c, void *data)
-{
- struct collector_htmlnumericentity_data *pc = (struct collector_htmlnumericentity_data *)data;
- int f, n, s, r, d, size, *mapelm;
-
- switch (pc->status) {
- case 1:
- if (c == 0x23) { /* '#' */
- pc->status = 2;
- } else {
- pc->status = 0;
- (*pc->decoder->filter_function)(0x26, pc->decoder); /* '&' */
- (*pc->decoder->filter_function)(c, pc->decoder);
- }
- break;
- case 2:
- if (c >= 0x30 && c <= 0x39) { /* '0' - '9' */
- pc->cache = c - 0x30;
- pc->status = 3;
- pc->digit = 1;
- } else {
- pc->status = 0;
- (*pc->decoder->filter_function)(0x26, pc->decoder); /* '&' */
- (*pc->decoder->filter_function)(0x23, pc->decoder); /* '#' */
- (*pc->decoder->filter_function)(c, pc->decoder);
- }
- break;
- case 3:
- s = 0;
- f = 0;
- if (c >= 0x30 && c <= 0x39) { /* '0' - '9' */
- if (pc->digit > 9) {
- pc->status = 0;
- s = pc->cache;
- f = 1;
- } else {
- s = pc->cache*10 + c - 0x30;
- pc->cache = s;
- pc->digit++;
- }
- } else {
- pc->status = 0;
- s = pc->cache;
- f = 1;
- n = 0;
- size = pc->mapsize;
- while (n < size) {
- mapelm = &(pc->convmap[n*4]);
- d = s - mapelm[2];
- if (d >= mapelm[0] && d <= mapelm[1]) {
- f = 0;
- (*pc->decoder->filter_function)(d, pc->decoder);
- if (c != 0x3b) { /* ';' */
- (*pc->decoder->filter_function)(c, pc->decoder);
- }
- break;
- }
- n++;
- }
- }
- if (f) {
- (*pc->decoder->filter_function)(0x26, pc->decoder); /* '&' */
- (*pc->decoder->filter_function)(0x23, pc->decoder); /* '#' */
- r = 1;
- n = pc->digit;
- while (n > 0) {
- r *= 10;
- n--;
- }
- s %= r;
- r /= 10;
- while (r > 0) {
- d = s/r;
- s %= r;
- r /= 10;
- (*pc->decoder->filter_function)(mbfl_hexchar_table[d], pc->decoder);
- }
- (*pc->decoder->filter_function)(c, pc->decoder);
- }
- break;
- default:
- if (c == 0x26) { /* '&' */
- pc->status = 1;
- } else {
- (*pc->decoder->filter_function)(c, pc->decoder);
- }
- break;
- }
-
- return c;
-}
-
-mbfl_string *
-mbfl_html_numeric_entity(
- mbfl_string *string,
- mbfl_string *result,
- int *convmap,
- int mapsize,
- int type)
-{
- struct collector_htmlnumericentity_data pc;
- mbfl_memory_device device;
- mbfl_convert_filter *encoder;
- int n;
- unsigned char *p;
-
- if (string == NULL || result == NULL) {
- return NULL;
- }
- mbfl_string_init(result);
- result->no_language = string->no_language;
- result->no_encoding = string->no_encoding;
- mbfl_memory_device_init(&device, string->len, 0);
-
- /* output code filter */
- pc.decoder = mbfl_convert_filter_new(
- mbfl_no_encoding_wchar,
- string->no_encoding,
- mbfl_memory_device_output, 0, &device);
- /* wchar filter */
- if (type == 0) {
- encoder = mbfl_convert_filter_new(
- string->no_encoding,
- mbfl_no_encoding_wchar,
- collector_encode_htmlnumericentity, 0, &pc);
- } else {
- encoder = mbfl_convert_filter_new(
- string->no_encoding,
- mbfl_no_encoding_wchar,
- collector_decode_htmlnumericentity, 0, &pc);
- }
- if (pc.decoder == NULL || encoder == NULL) {
- mbfl_convert_filter_delete(encoder);
- mbfl_convert_filter_delete(pc.decoder);
- return NULL;
- }
- pc.status = 0;
- pc.cache = 0;
- pc.digit = 0;
- pc.convmap = convmap;
- pc.mapsize = mapsize;
-
- /* feed data */
- p = string->val;
- n = string->len;
- if (p != NULL) {
- while (n > 0) {
- if ((*encoder->filter_function)(*p++, encoder) < 0) {
- break;
- }
- n--;
- }
- }
- mbfl_convert_filter_flush(encoder);
- mbfl_convert_filter_flush(pc.decoder);
- result = mbfl_memory_device_result(&device, result);
- mbfl_convert_filter_delete(encoder);
- mbfl_convert_filter_delete(pc.decoder);
-
- return result;
-}
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- */
diff --git a/ext/mbstring/libmbfl/mbfl/mbfilter.h b/ext/mbstring/libmbfl/mbfl/mbfilter.h
deleted file mode 100644
index eadae7b3f4..0000000000
--- a/ext/mbstring/libmbfl/mbfl/mbfilter.h
+++ /dev/null
@@ -1,280 +0,0 @@
-/* charset=UTF-8
- * vim: encoding=utf-8:
- * */
-
-/*
- * "streamable kanji code filter and converter"
- *
- * Copyright (c) 1998,1999,2000,2001 HappySize, Inc. All rights reserved.
- *
- * This software is released under the GNU Lesser General Public License.
- * (Version 2.1, February 1999)
- * Please read the following detail of the licence (in japanese).
- *
- * ◆使用許諾æ¡ä»¶â—†
- *
- * ã“ã®ã‚½ãƒ•ãƒˆã‚¦ã‚§ã‚¢ã¯æ ªå¼ä¼šç¤¾ãƒãƒƒãƒ”ーサイズã«ã‚ˆã£ã¦é–‹ç™ºã•ã‚Œã¾ã—ãŸã€‚æ ªå¼ä¼šç¤¾ãƒãƒƒ
- * ピーサイズã¯ã€è‘—作権法ãŠã‚ˆã³ä¸‡å›½è‘—作権æ¡ç´„ã®å®šã‚ã«ã‚ˆã‚Šã€ã“ã®ã‚½ãƒ•ãƒˆã‚¦ã‚§ã‚¢ã«é–¢
- * ã™ã‚‹ã™ã¹ã¦ã®æ¨©åˆ©ã‚’ç•™ä¿ã™ã‚‹æ¨©åˆ©ã‚’æŒã¡ã€ã“ã“ã«è¡Œä½¿ã—ã¾ã™ã€‚æ ªå¼ä¼šç¤¾ãƒãƒƒãƒ”ーサイ
- * ズã¯ä»¥ä¸‹ã«æ˜Žè¨˜ã—ãŸæ¡ä»¶ã«å¾“ã£ã¦ã€ã“ã®ã‚½ãƒ•ãƒˆã‚¦ã‚§ã‚¢ã‚’使用ã™ã‚‹æŽ’ä»–çš„ã§ã¯ãªã„権利
- * ã‚’ãŠå®¢æ§˜ã«è¨±è«¾ã—ã¾ã™ã€‚何人ãŸã‚Šã¨ã‚‚ã€ä»¥ä¸‹ã®æ¡ä»¶ã«åã—ã¦ã“ã®ã‚½ãƒ•ãƒˆã‚¦ã‚§ã‚¢ã‚’使用
- * ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。
- *
- * ã“ã®ã‚½ãƒ•ãƒˆã‚¦ã‚§ã‚¢ã‚’「GNU Lesser General Public License (Version 2.1, February
- * 1999)ã€ã«ç¤ºã•ã‚ŒãŸæ¡ä»¶ã§ä½¿ç”¨ã™ã‚‹ã“ã¨ã‚’ã€å…¨ã¦ã®æ–¹ã«è¨±è«¾ã—ã¾ã™ã€‚「GNU Lesser
- * General Public Licenseã€ã‚’満ãŸã•ãªã„使用ã«ã¯ã€æ ªå¼ä¼šç¤¾ãƒãƒƒãƒ”ーサイズã‹ã‚‰æ›¸é¢
- * ã«ã‚ˆã‚‹è¨±è«¾ã‚’å¾—ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚
- *
- * 「GNU Lesser General Public Licenseã€ã®å…¨æ–‡ã¯ä»¥ä¸‹ã®ã‚¦ã‚§ãƒ–ページã‹ã‚‰å–å¾—ã§ã
- * ã¾ã™ã€‚「GNU Lesser General Public Licenseã€ã¨ã¯ã€ã“ã‚Œã¾ã§Library General
- * Public Licenseã¨å‘¼ã°ã‚Œã¦ã„ãŸã‚‚ã®ã§ã™ã€‚
- * http://www.gnu.org/ --- GNUウェブサイト
- * http://www.gnu.org/copyleft/lesser.html --- ライセンス文é¢
- * ã“ã®ãƒ©ã‚¤ã‚»ãƒ³ã‚¹ã®å†…容ãŒã‚ã‹ã‚‰ãªã„æ–¹ã€å®ˆã‚Œãªã„æ–¹ã«ã¯ä½¿ç”¨ã‚’許諾ã—ã¾ã›ã‚“。
- *
- * ã—ã‹ã—ãªãŒã‚‰ã€å½“社ã¨GNUプロジェクトã¨ã®ç‰¹å®šã®é–¢ä¿‚を示唆ã¾ãŸã¯ä¸»å¼µã™ã‚‹ã‚‚ã®ã§
- * ã¯ã‚ã‚Šã¾ã›ã‚“。
- *
- * â—†ä¿è¨¼å†…容◆
- *
- * ã“ã®ã‚½ãƒ•ãƒˆã‚¦ã‚§ã‚¢ã¯ã€æœŸå¾…ã•ã‚ŒãŸå‹•ä½œãƒ»æ©Ÿèƒ½ãƒ»æ€§èƒ½ã‚’æŒã¤ã“ã¨ã‚’目標ã¨ã—ã¦è¨­è¨ˆã•ã‚Œ
- * 開発ã•ã‚Œã¦ã„ã¾ã™ãŒã€ã“れをä¿è¨¼ã™ã‚‹ã‚‚ã®ã§ã¯ã‚ã‚Šã¾ã›ã‚“。ã“ã®ã‚½ãƒ•ãƒˆã‚¦ã‚§ã‚¢ã¯ã€Œã“
- * ã®ã¾ã¾ã€ã®çŠ¶æ…‹ã§æä¾›ã•ã‚Œã¦ãŠã‚Šã€ãŸã¨ãˆã°ã“ã®ã‚½ãƒ•ãƒˆã‚¦ã‚§ã‚¢ã®æœ‰ç”¨æ€§ãªã„ã—特定ã®
- * 目的ã«åˆè‡´ã™ã‚‹ã“ã¨ã¨ã„ã£ãŸã€ä½•ã‚‰ã‹ã®ä¿è¨¼å†…容ãŒã€æ˜Žç¤ºã•ã‚ŒãŸã‚Šæš—é»™ã«ç¤ºã•ã‚Œã¦ã„
- * ã‚‹å ´åˆã§ã‚ã£ã¦ã‚‚ã€ãã®ä¿è¨¼ã¯ç„¡åŠ¹ã§ã™ã€‚ã“ã®ã‚½ãƒ•ãƒˆã‚¦ã‚§ã‚¢ã‚’使用ã—ãŸçµæžœãªã„ã—使
- * 用ã—ãªã‹ã£ãŸçµæžœã«ã‚ˆã£ã¦ã€ç›´æŽ¥ã‚ã‚‹ã„ã¯é–“接ã«å—ã‘ãŸèº«ä½“çš„ãªå‚·å®³ã€è²¡ç”£ä¸Šã®æ害
- * ã€ãƒ‡ãƒ¼ã‚¿ã®æ失ã‚ã‚‹ã„ã¯ãã®ä»–ã®å…¨ã¦ã®æ害ã«ã¤ã„ã¦ã¯ã€ãã®æ害ã®å¯èƒ½æ€§ãŒä½¿ç”¨è€…
- * ã€å½“社ã‚ã‚‹ã„ã¯ç¬¬ä¸‰è€…ã«ã‚ˆã£ã¦è­¦å‘Šã•ã‚Œã¦ã„ãŸå ´åˆã§ã‚ã£ã¦ã‚‚ã€å½“社ã¯ãã®æ害ã®è³ 
- * å„ŸãŠã‚ˆã³è£œå¡«ã‚’è¡Œã„ã¾ã›ã‚“。ã“ã®è¦å®šã¯ä»–ã®å…¨ã¦ã®ã€æ›¸é¢ä¸Šã¾ãŸã¯æ›¸é¢ã«ç„¡ã„ä¿è¨¼ãƒ»
- * 契約・è¦å®šã«å„ªå…ˆã—ã¾ã™ã€‚
- *
- * ◆著作権者ã®é€£çµ¡å…ˆãŠã‚ˆã³ä½¿ç”¨æ¡ä»¶ã«ã¤ã„ã¦ã®å•ã„åˆã‚ã›å…ˆâ—†
- *
- * 〒102-0073
- * æ±äº¬éƒ½åƒä»£ç”°åŒºä¹æ®µåŒ—1-13-5日本地所第一ビル4F
- * æ ªå¼ä¼šç¤¾ãƒãƒƒãƒ”ーサイズ
- * Phone: 03-3512-3655, Fax: 03-3512-3656
- * Email: sales@happysize.co.jp
- * Web: http://happysize.com/
- *
- * ◆著者◆
- *
- * 金本 茂 <sgk@happysize.co.jp>
- *
- * ◆履歴◆
- *
- * 1998/11/10 sgk implementation in C++
- * 1999/4/25 sgk Cã§æ›¸ããªãŠã—。
- * 1999/4/26 sgk 入力フィルタを実装。漢字コードを推定ã—ãªãŒã‚‰ãƒ•ã‚£ãƒ«ã‚¿ã‚’追加。
- * 1999/6/?? Unicodeサãƒãƒ¼ãƒˆã€‚
- * 1999/6/22 sgk ライセンスをLGPLã«å¤‰æ›´ã€‚
- *
- */
-
-/*
- * Unicode support
- *
- * Portions copyright (c) 1999,2000,2001 by the PHP3 internationalization team.
- * All rights reserved.
- *
- */
-
-/*
- *
- * streamable kanji code filter and converter
- * mbfl : Multi Byte FiLter Liblary
- *
- */
-
-#ifndef MBFL_MBFILTER_H
-#define MBFL_MBFILTER_H
-
-#include "mbfl_defs.h"
-#include "mbfl_consts.h"
-#include "mbfl_allocators.h"
-#include "mbfl_encoding.h"
-#include "mbfl_language.h"
-#include "mbfl_string.h"
-#include "mbfl_convert.h"
-#include "mbfl_ident.h"
-
-/*
- * convert filter
- */
-#define MBFL_OUTPUTFILTER_ILLEGAL_MODE_NONE 0
-#define MBFL_OUTPUTFILTER_ILLEGAL_MODE_CHAR 1
-#define MBFL_OUTPUTFILTER_ILLEGAL_MODE_LONG 2
-
-/*
- * buffering converter
- */
-typedef struct _mbfl_buffer_converter mbfl_buffer_converter;
-
-struct _mbfl_buffer_converter {
- mbfl_convert_filter *filter1;
- mbfl_convert_filter *filter2;
- mbfl_memory_device device;
- const mbfl_encoding *from;
- const mbfl_encoding *to;
-};
-
-MBFLAPI extern mbfl_buffer_converter * mbfl_buffer_converter_new(enum mbfl_no_encoding from, enum mbfl_no_encoding to, int buf_initsz);
-MBFLAPI extern void mbfl_buffer_converter_delete(mbfl_buffer_converter *convd);
-MBFLAPI extern void mbfl_buffer_converter_reset(mbfl_buffer_converter *convd);
-MBFLAPI extern int mbfl_buffer_converter_illegal_mode(mbfl_buffer_converter *convd, int mode);
-MBFLAPI extern int mbfl_buffer_converter_illegal_substchar(mbfl_buffer_converter *convd, int substchar);
-MBFLAPI extern int mbfl_buffer_converter_strncat(mbfl_buffer_converter *convd, const unsigned char *p, int n);
-MBFLAPI extern int mbfl_buffer_converter_feed(mbfl_buffer_converter *convd, mbfl_string *string);
-MBFLAPI extern int mbfl_buffer_converter_flush(mbfl_buffer_converter *convd);
-MBFLAPI extern mbfl_string * mbfl_buffer_converter_getbuffer(mbfl_buffer_converter *convd, mbfl_string *result);
-MBFLAPI extern mbfl_string * mbfl_buffer_converter_result(mbfl_buffer_converter *convd, mbfl_string *result);
-MBFLAPI extern mbfl_string * mbfl_buffer_converter_feed_result(mbfl_buffer_converter *convd, mbfl_string *string, mbfl_string *result);
-
-/*
- * encoding detector
- */
-typedef struct _mbfl_encoding_detector mbfl_encoding_detector;
-
-struct _mbfl_encoding_detector {
- mbfl_identify_filter **filter_list;
- int filter_list_size;
-};
-
-MBFLAPI extern mbfl_encoding_detector * mbfl_encoding_detector_new(enum mbfl_no_encoding *elist, int elistsz);
-MBFLAPI extern void mbfl_encoding_detector_delete(mbfl_encoding_detector *identd);
-MBFLAPI extern int mbfl_encoding_detector_feed(mbfl_encoding_detector *identd, mbfl_string *string);
-MBFLAPI extern enum mbfl_no_encoding mbfl_encoding_detector_judge(mbfl_encoding_detector *identd);
-
-
-/*
- * encoding converter
- */
-MBFLAPI extern mbfl_string *
-mbfl_convert_encoding(mbfl_string *string, mbfl_string *result, enum mbfl_no_encoding toenc);
-
-
-/*
- * identify encoding
- */
-MBFLAPI extern const mbfl_encoding *
-mbfl_identify_encoding(mbfl_string *string, enum mbfl_no_encoding *elist, int elistsz, int strict);
-
-MBFLAPI extern const char *
-mbfl_identify_encoding_name(mbfl_string *string, enum mbfl_no_encoding *elist, int elistsz, int strict);
-
-MBFLAPI extern const enum mbfl_no_encoding
-mbfl_identify_encoding_no(mbfl_string *string, enum mbfl_no_encoding *elist, int elistsz);
-
-/*
- * strlen
- */
-MBFLAPI extern int
-mbfl_strlen(mbfl_string *string);
-
-/*
- * oddlen
- */
-MBFLAPI extern int
-mbfl_oddlen(mbfl_string *string);
-
-/*
- * strpos
- */
-MBFLAPI extern int
-mbfl_strpos(mbfl_string *haystack, mbfl_string *needle, int offset, int reverse);
-
-
-/*
- * substr_count
- */
-MBFLAPI extern int
-mbfl_substr_count(mbfl_string *haystack, mbfl_string *needle);
-
-/*
- * substr
- */
-MBFLAPI extern mbfl_string *
-mbfl_substr(mbfl_string *string, mbfl_string *result, int from, int length);
-
-/*
- * strcut
- */
-MBFLAPI extern mbfl_string *
-mbfl_strcut(mbfl_string *string, mbfl_string *result, int from, int length);
-
-/*
- * strwidth
- */
-MBFLAPI extern int
-mbfl_strwidth(mbfl_string *string);
-
-/*
- * strimwidth
- */
-MBFLAPI extern mbfl_string *
-mbfl_strimwidth(mbfl_string *string, mbfl_string *marker, mbfl_string *result, int from, int width);
-
-/*
- * MIME header encode
- */
-struct mime_header_encoder_data; /* forward declaration */
-
-MBFLAPI extern struct mime_header_encoder_data *
-mime_header_encoder_new(
- enum mbfl_no_encoding incode,
- enum mbfl_no_encoding outcode,
- enum mbfl_no_encoding encoding);
-
-MBFLAPI extern void
-mime_header_encoder_delete(struct mime_header_encoder_data *pe);
-
-MBFLAPI extern int
-mime_header_encoder_feed(int c, struct mime_header_encoder_data *pe);
-
-MBFLAPI extern mbfl_string *
-mime_header_encoder_result(struct mime_header_encoder_data *pe, mbfl_string *result);
-
-MBFLAPI extern mbfl_string *
-mbfl_mime_header_encode(
- mbfl_string *string, mbfl_string *result,
- enum mbfl_no_encoding outcode,
- enum mbfl_no_encoding encoding,
- const char *linefeed,
- int indent);
-
-/*
- * MIME header decode
- */
-struct mime_header_decoder_data; /* forward declaration */
-
-MBFLAPI extern struct mime_header_decoder_data *
-mime_header_decoder_new(enum mbfl_no_encoding outcode);
-
-MBFLAPI extern void
-mime_header_decoder_delete(struct mime_header_decoder_data *pd);
-
-MBFLAPI extern int
-mime_header_decoder_feed(int c, struct mime_header_decoder_data *pd);
-
-MBFLAPI extern mbfl_string *
-mime_header_decoder_result(struct mime_header_decoder_data *pd, mbfl_string *result);
-
-MBFLAPI extern mbfl_string *
-mbfl_mime_header_decode(
- mbfl_string *string,
- mbfl_string *result,
- enum mbfl_no_encoding outcode);
-
-/*
- * convert HTML numeric entity
- */
-MBFLAPI extern mbfl_string *
-mbfl_html_numeric_entity(mbfl_string *string, mbfl_string *result, int *convmap, int mapsize, int type);
-
-/*
- * convert of harfwidth and fullwidth for japanese
- */
-MBFLAPI extern mbfl_string *
-mbfl_ja_jp_hantozen(mbfl_string *string, mbfl_string *result, int mode);
-
-#endif /* MBFL_MBFILTER_H */
diff --git a/ext/mbstring/libmbfl/mbfl/mbfilter_8bit.c b/ext/mbstring/libmbfl/mbfl/mbfilter_8bit.c
deleted file mode 100644
index 9b19479ed6..0000000000
--- a/ext/mbstring/libmbfl/mbfl/mbfilter_8bit.c
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * "streamable kanji code filter and converter"
- * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved.
- *
- * LICENSE NOTICES
- *
- * This file is part of "streamable kanji code filter and converter",
- * which is distributed under the terms of GNU Lesser General Public
- * License (version 2) as published by the Free Software Foundation.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with "streamable kanji code filter and converter";
- * if not, write to the Free Software Foundation, Inc., 59 Temple Place,
- * Suite 330, Boston, MA 02111-1307 USA
- *
- * The author of this file:
- *
- */
-/*
- * The source code included in this files was separated from mbfilter.c
- * by Moriyoshi Koizumi <moriyoshi@php.net> on 20 Dec 2002. The file
- * mbfilter.c is included in this package .
- *
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#ifdef HAVE_STDDEF_H
-#include <stddef.h>
-#endif
-
-#include "mbfilter.h"
-
-static const char *mbfl_encoding_8bit_aliases[] = {"binary", NULL};
-
-const mbfl_encoding mbfl_encoding_8bit = {
- mbfl_no_encoding_8bit,
- "8bit",
- "8bit",
- (const char *(*)[])&mbfl_encoding_8bit_aliases,
- NULL,
- MBFL_ENCTYPE_SBCS
-};
diff --git a/ext/mbstring/libmbfl/mbfl/mbfilter_8bit.h b/ext/mbstring/libmbfl/mbfl/mbfilter_8bit.h
deleted file mode 100644
index a87c564616..0000000000
--- a/ext/mbstring/libmbfl/mbfl/mbfilter_8bit.h
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * "streamable kanji code filter and converter"
- * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved.
- *
- * LICENSE NOTICES
- *
- * This file is part of "streamable kanji code filter and converter",
- * which is distributed under the terms of GNU Lesser General Public
- * License (version 2) as published by the Free Software Foundation.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with "streamable kanji code filter and converter";
- * if not, write to the Free Software Foundation, Inc., 59 Temple Place,
- * Suite 330, Boston, MA 02111-1307 USA
- *
- * The author of this file:
- *
- */
-/*
- * The source code included in this files was separated from mbfilter.c
- * by Moriyoshi Koizumi <moriyoshi@php.net> on 20 Dec 2002. The file
- * mbfilter.c is included in this package .
- *
- */
-
-#ifndef MBFL_MBFILTER_8BIT_H
-#define MBFL_MBFILTER_8BIT_H
-
-#include "mbfl_defs.h"
-#include "mbfilter.h"
-
-MBFLAPI extern const mbfl_encoding mbfl_encoding_8bit;
-
-#endif /* MBFL_MBFILTER_8BIT_H */
diff --git a/ext/mbstring/libmbfl/mbfl/mbfilter_pass.c b/ext/mbstring/libmbfl/mbfl/mbfilter_pass.c
deleted file mode 100644
index b6da879b6e..0000000000
--- a/ext/mbstring/libmbfl/mbfl/mbfilter_pass.c
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- * "streamable kanji code filter and converter"
- * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved.
- *
- * LICENSE NOTICES
- *
- * This file is part of "streamable kanji code filter and converter",
- * which is distributed under the terms of GNU Lesser General Public
- * License (version 2) as published by the Free Software Foundation.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with "streamable kanji code filter and converter";
- * if not, write to the Free Software Foundation, Inc., 59 Temple Place,
- * Suite 330, Boston, MA 02111-1307 USA
- *
- * The author of this file:
- *
- */
-/*
- * The source code included in this files was separated from mbfilter.c
- * by moriyoshi koizumi <moriyoshi@php.net> on 4 dec 2002.
- *
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#ifdef HAVE_STDDEF_H
-#include <stddef.h>
-#endif
-
-#include "mbfilter.h"
-#include "mbfilter_pass.h"
-
-static const char *mbfl_encoding_pass_aliases[] = {"none", NULL};
-
-const mbfl_encoding mbfl_encoding_pass = {
- mbfl_no_encoding_pass,
- "pass",
- NULL,
- (const char *(*)[])&mbfl_encoding_pass_aliases,
- NULL,
- 0
-};
-
-const struct mbfl_convert_vtbl vtbl_pass = {
- mbfl_no_encoding_pass,
- mbfl_no_encoding_pass,
- mbfl_filt_conv_common_ctor,
- mbfl_filt_conv_common_dtor,
- mbfl_filt_conv_pass,
- mbfl_filt_conv_common_flush
-};
-
-int mbfl_filt_conv_pass(int c, mbfl_convert_filter *filter)
-{
- return (*filter->output_function)(c, filter->data);
-}
-
diff --git a/ext/mbstring/libmbfl/mbfl/mbfilter_pass.h b/ext/mbstring/libmbfl/mbfl/mbfilter_pass.h
deleted file mode 100644
index 49d169c668..0000000000
--- a/ext/mbstring/libmbfl/mbfl/mbfilter_pass.h
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * "streamable kanji code filter and converter"
- * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved.
- *
- * LICENSE NOTICES
- *
- * This file is part of "streamable kanji code filter and converter",
- * which is distributed under the terms of GNU Lesser General Public
- * License (version 2) as published by the Free Software Foundation.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with "streamable kanji code filter and converter";
- * if not, write to the Free Software Foundation, Inc., 59 Temple Place,
- * Suite 330, Boston, MA 02111-1307 USA
- *
- * The author of this file:
- *
- */
-/*
- * The source code included in this files was separated from mbfilter.c
- * by moriyoshi koizumi <moriyoshi@php.net> on 4 dec 2002.
- *
- */
-
-#ifndef MBFL_MBFILTER_PASS_H
-#define MBFL_MBFILTER_PASS_H
-
-#include "mbfl_defs.h"
-#include "mbfilter.h"
-
-MBFLAPI extern const mbfl_encoding mbfl_encoding_pass;
-MBFLAPI extern const struct mbfl_convert_vtbl vtbl_pass;
-
-MBFLAPI extern int mbfl_filt_conv_pass(int c, mbfl_convert_filter *filter);
-
-#endif /* MBFL_MBFILTER_PASS_H */
diff --git a/ext/mbstring/libmbfl/mbfl/mbfilter_wchar.c b/ext/mbstring/libmbfl/mbfl/mbfilter_wchar.c
deleted file mode 100644
index 50f7629849..0000000000
--- a/ext/mbstring/libmbfl/mbfl/mbfilter_wchar.c
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * "streamable kanji code filter and converter"
- * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved.
- *
- * LICENSE NOTICES
- *
- * This file is part of "streamable kanji code filter and converter",
- * which is distributed under the terms of GNU Lesser General Public
- * License (version 2) as published by the Free Software Foundation.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with "streamable kanji code filter and converter";
- * if not, write to the Free Software Foundation, Inc., 59 Temple Place,
- * Suite 330, Boston, MA 02111-1307 USA
- *
- * The author of this file:
- *
- */
-/*
- * The source code included in this files was separated from mbfilter.c
- * by Moriyoshi Koizumi <moriyoshi@php.net> on 20 Dec 2002. The file
- * mbfilter.c is included in this package .
- *
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#ifdef HAVE_STDDEF_H
-#include <stddef.h>
-#endif
-
-#include "mbfilter.h"
-
-const mbfl_encoding mbfl_encoding_wchar = {
- mbfl_no_encoding_wchar,
- "wchar",
- NULL,
- NULL,
- NULL,
- MBFL_ENCTYPE_WCS4BE
-};
diff --git a/ext/mbstring/libmbfl/mbfl/mbfilter_wchar.h b/ext/mbstring/libmbfl/mbfl/mbfilter_wchar.h
deleted file mode 100644
index 9e9396a77f..0000000000
--- a/ext/mbstring/libmbfl/mbfl/mbfilter_wchar.h
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * "streamable kanji code filter and converter"
- * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved.
- *
- * LICENSE NOTICES
- *
- * This file is part of "streamable kanji code filter and converter",
- * which is distributed under the terms of GNU Lesser General Public
- * License (version 2) as published by the Free Software Foundation.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with "streamable kanji code filter and converter";
- * if not, write to the Free Software Foundation, Inc., 59 Temple Place,
- * Suite 330, Boston, MA 02111-1307 USA
- *
- * The author of this file:
- *
- */
-/*
- * The source code included in this files was separated from mbfilter.c
- * by Moriyoshi Koizumi <moriyoshi@php.net> on 20 Dec 2002. The file
- * mbfilter.c is included in this package .
- *
- */
-
-#ifndef MBFL_MBFILTER_WCHAR_H
-#define MBFL_MBFILTER_WCHAR_H
-
-#include "mbfl_defs.h"
-#include "mbfilter.h"
-
-MBFLAPI extern const mbfl_encoding mbfl_encoding_wchar;
-
-#endif /* MBFL_MBFILTER_WCHAR_H */
diff --git a/ext/mbstring/libmbfl/mbfl/mbfl_allocators.c b/ext/mbstring/libmbfl/mbfl/mbfl_allocators.c
deleted file mode 100644
index be9d345b06..0000000000
--- a/ext/mbstring/libmbfl/mbfl/mbfl_allocators.c
+++ /dev/null
@@ -1,93 +0,0 @@
-/*
- * "streamable kanji code filter and converter"
- * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved.
- *
- * LICENSE NOTICES
- *
- * This file is part of "streamable kanji code filter and converter",
- * which is distributed under the terms of GNU Lesser General Public
- * License (version 2) as published by the Free Software Foundation.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with "streamable kanji code filter and converter";
- * if not, write to the Free Software Foundation, Inc., 59 Temple Place,
- * Suite 330, Boston, MA 02111-1307 USA
- *
- * The author of this file:
- *
- */
-/*
- * The source code included in this files was separated from mbfilter.c
- * by Moriyoshi Koizumi <moriyoshi@php.net> on 20 Dec 2002. The file
- * mbfilter.c is included in this package .
- *
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#ifdef HAVE_STDLIB_H
-#include <stdlib.h>
-#endif
-
-#ifdef HAVE_MEMORY_H
-#include <memory.h>
-#endif
-
-#ifdef HAVE_STRING_H
-#include <string.h>
-#endif
-
-#ifdef HAVE_STRINGS_H
-#include <strings.h>
-#endif
-
-#ifdef HAVE_STDDEF_H
-#include <stddef.h>
-#endif
-
-#include "mbfl_allocators.h"
-
-static void *__mbfl__malloc(unsigned int);
-static void *__mbfl__realloc(void *, unsigned int);
-static void *__mbfl__calloc(unsigned int, unsigned int);
-static void __mbfl__free(void *);
-
-static mbfl_allocators default_allocators = {
- __mbfl__malloc,
- __mbfl__realloc,
- __mbfl__calloc,
- __mbfl__free,
- __mbfl__malloc,
- __mbfl__realloc,
- __mbfl__free
-};
-
-mbfl_allocators *__mbfl_allocators = &default_allocators;
-
-static void *__mbfl__malloc(unsigned int sz)
-{
- return malloc(sz);
-}
-
-static void *__mbfl__realloc(void *ptr, unsigned int sz)
-{
- return realloc(ptr, sz);
-}
-
-static void *__mbfl__calloc(unsigned int nelems, unsigned int szelem)
-{
- return calloc(nelems, szelem);
-}
-
-static void __mbfl__free(void *ptr)
-{
- free(ptr);
-}
-
diff --git a/ext/mbstring/libmbfl/mbfl/mbfl_allocators.h b/ext/mbstring/libmbfl/mbfl/mbfl_allocators.h
deleted file mode 100644
index a1539f0f37..0000000000
--- a/ext/mbstring/libmbfl/mbfl/mbfl_allocators.h
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- * "streamable kanji code filter and converter"
- * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved.
- *
- * LICENSE NOTICES
- *
- * This file is part of "streamable kanji code filter and converter",
- * which is distributed under the terms of GNU Lesser General Public
- * License (version 2) as published by the Free Software Foundation.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with "streamable kanji code filter and converter";
- * if not, write to the Free Software Foundation, Inc., 59 Temple Place,
- * Suite 330, Boston, MA 02111-1307 USA
- *
- * The author of this file:
- *
- */
-/*
- * The source code included in this files was separated from mbfilter.h
- * by Moriyoshi Koizumi <moriyoshi@php.net> on 20 Dec 2002. The file
- * mbfilter.h is included in this package .
- *
- */
-
-#ifndef MBFL_ALLOCATORS_H
-#define MBFL_ALLOCATORS_H
-
-#include "mbfl_defs.h"
-
-typedef struct _mbfl_allocators {
- void *(*malloc)(unsigned int);
- void *(*realloc)(void *, unsigned int);
- void *(*calloc)(unsigned int, unsigned int);
- void (*free)(void *);
- void *(*pmalloc)(unsigned int);
- void *(*prealloc)(void *, unsigned int);
- void (*pfree)(void *);
-} mbfl_allocators;
-
-MBFLAPI extern mbfl_allocators *__mbfl_allocators;
-
-#define mbfl_malloc (__mbfl_allocators->malloc)
-#define mbfl_realloc (__mbfl_allocators->realloc)
-#define mbfl_calloc (__mbfl_allocators->calloc)
-#define mbfl_free (__mbfl_allocators->free)
-#define mbfl_pmalloc (__mbfl_allocators->pmalloc)
-#define mbfl_prealloc (__mbfl_allocators->preallloc)
-#define mbfl_pfree (__mbfl_allocators->pfree)
-
-#endif /* MBFL_ALLOCATORS_H */
diff --git a/ext/mbstring/libmbfl/mbfl/mbfl_consts.h b/ext/mbstring/libmbfl/mbfl/mbfl_consts.h
deleted file mode 100644
index d907512ec2..0000000000
--- a/ext/mbstring/libmbfl/mbfl/mbfl_consts.h
+++ /dev/null
@@ -1,85 +0,0 @@
-/*
- * "streamable kanji code filter and converter"
- * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved.
- *
- * LICENSE NOTICES
- *
- * This file is part of "streamable kanji code filter and converter",
- * which is distributed under the terms of GNU Lesser General Public
- * License (version 2) as published by the Free Software Foundation.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with "streamable kanji code filter and converter";
- * if not, write to the Free Software Foundation, Inc., 59 Temple Place,
- * Suite 330, Boston, MA 02111-1307 USA
- *
- * The author of this file:
- *
- */
-/*
- * The source code included in this files was separated from mbfilter.h
- * by Moriyoshi Koizumi <moriyoshi@php.net> on 20 Dec 2002. The file
- * mbfilter.h is included in this package .
- *
- */
-
-#ifndef MBFL_CONSTS_H
-#define MBFL_CONSTS_H
-
-#define MBFL_ENCTYPE_SBCS 0x00000001
-#define MBFL_ENCTYPE_MBCS 0x00000002
-#define MBFL_ENCTYPE_WCS2BE 0x00000010
-#define MBFL_ENCTYPE_WCS2LE 0x00000020
-#define MBFL_ENCTYPE_MWC2BE 0x00000040
-#define MBFL_ENCTYPE_MWC2LE 0x00000080
-#define MBFL_ENCTYPE_WCS4BE 0x00000100
-#define MBFL_ENCTYPE_WCS4LE 0x00000200
-#define MBFL_ENCTYPE_MWC4BE 0x00000400
-#define MBFL_ENCTYPE_MWC4LE 0x00000800
-#define MBFL_ENCTYPE_SHFTCODE 0x00001000
-#define MBFL_ENCTYPE_HTML_ENT 0x00002000
-
-/* wchar plane, special charactor */
-#define MBFL_WCSPLANE_MASK 0xffff
-#define MBFL_WCSPLANE_UCS2MAX 0x00010000
-#define MBFL_WCSPLANE_SUPMIN 0x00010000
-#define MBFL_WCSPLANE_SUPMAX 0x00200000
-#define MBFL_WCSPLANE_JIS0208 0x70e10000 /* JIS HEX : 2121h - 7E7Eh */
-#define MBFL_WCSPLANE_JIS0212 0x70e20000 /* JIS HEX : 2121h - 7E7Eh */
-#define MBFL_WCSPLANE_WINCP932 0x70e30000 /* JIS HEX : 2121h - 9898h */
-#define MBFL_WCSPLANE_8859_1 0x70e40000 /* 00h - FFh */
-#define MBFL_WCSPLANE_8859_2 0x70e50000 /* 00h - FFh */
-#define MBFL_WCSPLANE_8859_3 0x70e60000 /* 00h - FFh */
-#define MBFL_WCSPLANE_8859_4 0x70e70000 /* 00h - FFh */
-#define MBFL_WCSPLANE_8859_5 0x70e80000 /* 00h - FFh */
-#define MBFL_WCSPLANE_8859_6 0x70e90000 /* 00h - FFh */
-#define MBFL_WCSPLANE_8859_7 0x70ea0000 /* 00h - FFh */
-#define MBFL_WCSPLANE_8859_8 0x70eb0000 /* 00h - FFh */
-#define MBFL_WCSPLANE_8859_9 0x70ec0000 /* 00h - FFh */
-#define MBFL_WCSPLANE_8859_10 0x70ed0000 /* 00h - FFh */
-#define MBFL_WCSPLANE_8859_13 0x70ee0000 /* 00h - FFh */
-#define MBFL_WCSPLANE_8859_14 0x70ef0000 /* 00h - FFh */
-#define MBFL_WCSPLANE_8859_15 0x70f00000 /* 00h - FFh */
-#define MBFL_WCSPLANE_KSC5601 0x70f10000 /* 2121h - 7E7Eh */
-#define MBFL_WCSPLANE_GB2312 0x70f20000 /* 2121h - 7E7Eh */
-#define MBFL_WCSPLANE_WINCP936 0x70f30000 /* 2121h - 9898h */
-#define MBFL_WCSPLANE_BIG5 0x70f40000 /* 2121h - 9898h */
-#define MBFL_WCSPLANE_CNS11643 0x70f50000 /* 2121h - 9898h */
-#define MBFL_WCSPLANE_UHC 0x70f60000 /* 8141h - fefeh */
-#define MBFL_WCSPLANE_CP1251 0x70f70000
-#define MBFL_WCSPLANE_CP866 0x70f80000
-#define MBFL_WCSPLANE_KOI8R 0x70f90000
-#define MBFL_WCSGROUP_MASK 0xffffff
-#define MBFL_WCSGROUP_UCS4MAX 0x70000000
-#define MBFL_WCSGROUP_WCHARMAX 0x78000000
-#define MBFL_WCSGROUP_THROUGH 0x78000000 /* 000000h - FFFFFFh */
-
-#define MBFL_QPRINT_STS_MIME_HEADER 0x1000000
-#define MBFL_BASE64_STS_MIME_HEADER 0x1000000
-
-#endif /* MBFL_CONSTS_H */
diff --git a/ext/mbstring/libmbfl/mbfl/mbfl_convert.c b/ext/mbstring/libmbfl/mbfl/mbfl_convert.c
deleted file mode 100644
index 9dd27ff595..0000000000
--- a/ext/mbstring/libmbfl/mbfl/mbfl_convert.c
+++ /dev/null
@@ -1,499 +0,0 @@
-/*
- * "streamable kanji code filter and converter"
- * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved.
- *
- * LICENSE NOTICES
- *
- * This file is part of "streamable kanji code filter and converter",
- * which is distributed under the terms of GNU Lesser General Public
- * License (version 2) as published by the Free Software Foundation.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with "streamable kanji code filter and converter";
- * if not, write to the Free Software Foundation, Inc., 59 Temple Place,
- * Suite 330, Boston, MA 02111-1307 USA
- *
- * The author of this file:
- *
- */
-/*
- * The source code included in this files was separated from mbfilter.c
- * by Moriyoshi Koizumi <moriyoshi@php.net> on 20 Dec 2002. The file
- * mbfilter.c is included in this package .
- *
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#ifdef HAVE_STDDEF_H
-#include <stddef.h>
-#endif
-
-#include "mbfl_encoding.h"
-#include "mbfl_allocators.h"
-#include "mbfl_filter_output.h"
-#include "mbfilter_pass.h"
-#include "mbfilter_8bit.h"
-#include "mbfilter_wchar.h"
-
-#include "filters/mbfilter_euc_cn.h"
-#include "filters/mbfilter_hz.h"
-#include "filters/mbfilter_euc_tw.h"
-#include "filters/mbfilter_big5.h"
-#include "filters/mbfilter_uhc.h"
-#include "filters/mbfilter_euc_kr.h"
-#include "filters/mbfilter_iso2022_kr.h"
-#include "filters/mbfilter_sjis.h"
-#include "filters/mbfilter_jis.h"
-#include "filters/mbfilter_euc_jp.h"
-#include "filters/mbfilter_euc_jp_win.h"
-#include "filters/mbfilter_ascii.h"
-#include "filters/mbfilter_koi8r.h"
-#include "filters/mbfilter_cp866.h"
-#include "filters/mbfilter_cp932.h"
-#include "filters/mbfilter_cp936.h"
-#include "filters/mbfilter_cp1251.h"
-#include "filters/mbfilter_cp1252.h"
-#include "filters/mbfilter_iso8859_1.h"
-#include "filters/mbfilter_iso8859_2.h"
-#include "filters/mbfilter_iso8859_3.h"
-#include "filters/mbfilter_iso8859_4.h"
-#include "filters/mbfilter_iso8859_5.h"
-#include "filters/mbfilter_iso8859_6.h"
-#include "filters/mbfilter_iso8859_7.h"
-#include "filters/mbfilter_iso8859_8.h"
-#include "filters/mbfilter_iso8859_9.h"
-#include "filters/mbfilter_iso8859_10.h"
-#include "filters/mbfilter_iso8859_13.h"
-#include "filters/mbfilter_iso8859_14.h"
-#include "filters/mbfilter_iso8859_15.h"
-#include "filters/mbfilter_base64.h"
-#include "filters/mbfilter_qprint.h"
-#include "filters/mbfilter_uuencode.h"
-#include "filters/mbfilter_7bit.h"
-#include "filters/mbfilter_utf7.h"
-#include "filters/mbfilter_utf7imap.h"
-#include "filters/mbfilter_utf8.h"
-#include "filters/mbfilter_utf16.h"
-#include "filters/mbfilter_utf32.h"
-#include "filters/mbfilter_byte2.h"
-#include "filters/mbfilter_byte4.h"
-#include "filters/mbfilter_ucs4.h"
-#include "filters/mbfilter_ucs2.h"
-#include "filters/mbfilter_htmlent.h"
-
-static void mbfl_convert_filter_reset_vtbl(mbfl_convert_filter *filter);
-
-/* hex character table "0123456789ABCDEF" */
-static char mbfl_hexchar_table[] = {
- 0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x41,0x42,0x43,0x44,0x45,0x46
-};
-
-const struct mbfl_convert_vtbl *mbfl_convert_filter_list[] = {
- &vtbl_utf8_wchar,
- &vtbl_wchar_utf8,
- &vtbl_eucjp_wchar,
- &vtbl_wchar_eucjp,
- &vtbl_sjis_wchar,
- &vtbl_wchar_sjis,
- &vtbl_jis_wchar,
- &vtbl_wchar_jis,
- &vtbl_2022jp_wchar,
- &vtbl_wchar_2022jp,
- &vtbl_eucjpwin_wchar,
- &vtbl_wchar_eucjpwin,
- &vtbl_sjiswin_wchar,
- &vtbl_wchar_sjiswin,
- &vtbl_euccn_wchar,
- &vtbl_wchar_euccn,
- &vtbl_cp936_wchar,
- &vtbl_wchar_cp936,
- &vtbl_hz_wchar,
- &vtbl_wchar_hz,
- &vtbl_euctw_wchar,
- &vtbl_wchar_euctw,
- &vtbl_big5_wchar,
- &vtbl_wchar_big5,
- &vtbl_euckr_wchar,
- &vtbl_wchar_euckr,
- &vtbl_uhc_wchar,
- &vtbl_wchar_uhc,
- &vtbl_2022kr_wchar,
- &vtbl_wchar_2022kr,
- &vtbl_cp1251_wchar,
- &vtbl_wchar_cp1251,
- &vtbl_cp866_wchar,
- &vtbl_wchar_cp866,
- &vtbl_koi8r_wchar,
- &vtbl_wchar_koi8r,
- &vtbl_cp1252_wchar,
- &vtbl_wchar_cp1252,
- &vtbl_ascii_wchar,
- &vtbl_wchar_ascii,
- &vtbl_8859_1_wchar,
- &vtbl_wchar_8859_1,
- &vtbl_8859_2_wchar,
- &vtbl_wchar_8859_2,
- &vtbl_8859_3_wchar,
- &vtbl_wchar_8859_3,
- &vtbl_8859_4_wchar,
- &vtbl_wchar_8859_4,
- &vtbl_8859_5_wchar,
- &vtbl_wchar_8859_5,
- &vtbl_8859_6_wchar,
- &vtbl_wchar_8859_6,
- &vtbl_8859_7_wchar,
- &vtbl_wchar_8859_7,
- &vtbl_8859_8_wchar,
- &vtbl_wchar_8859_8,
- &vtbl_8859_9_wchar,
- &vtbl_wchar_8859_9,
- &vtbl_8859_10_wchar,
- &vtbl_wchar_8859_10,
- &vtbl_8859_13_wchar,
- &vtbl_wchar_8859_13,
- &vtbl_8859_14_wchar,
- &vtbl_wchar_8859_14,
- &vtbl_8859_15_wchar,
- &vtbl_wchar_8859_15,
- &vtbl_8bit_b64,
- &vtbl_b64_8bit,
- &vtbl_uuencode_8bit,
- &vtbl_wchar_html,
- &vtbl_html_wchar,
- &vtbl_8bit_qprint,
- &vtbl_qprint_8bit,
- &vtbl_8bit_7bit,
- &vtbl_7bit_8bit,
- &vtbl_utf7_wchar,
- &vtbl_wchar_utf7,
- &vtbl_utf7imap_wchar,
- &vtbl_wchar_utf7imap,
- &vtbl_utf16_wchar,
- &vtbl_wchar_utf16,
- &vtbl_utf16be_wchar,
- &vtbl_wchar_utf16be,
- &vtbl_utf16le_wchar,
- &vtbl_wchar_utf16le,
- &vtbl_utf32_wchar,
- &vtbl_wchar_utf32,
- &vtbl_utf32be_wchar,
- &vtbl_wchar_utf32be,
- &vtbl_utf32le_wchar,
- &vtbl_wchar_utf32le,
- &vtbl_ucs4_wchar,
- &vtbl_wchar_ucs4,
- &vtbl_ucs4be_wchar,
- &vtbl_wchar_ucs4be,
- &vtbl_ucs4le_wchar,
- &vtbl_wchar_ucs4le,
- &vtbl_ucs2_wchar,
- &vtbl_wchar_ucs2,
- &vtbl_ucs2be_wchar,
- &vtbl_wchar_ucs2be,
- &vtbl_ucs2le_wchar,
- &vtbl_wchar_ucs2le,
- &vtbl_byte4be_wchar,
- &vtbl_wchar_byte4be,
- &vtbl_byte4le_wchar,
- &vtbl_wchar_byte4le,
- &vtbl_byte2be_wchar,
- &vtbl_wchar_byte2be,
- &vtbl_byte2le_wchar,
- &vtbl_wchar_byte2le,
- &vtbl_pass,
- NULL
-};
-
-mbfl_convert_filter *
-mbfl_convert_filter_new(
- enum mbfl_no_encoding from,
- enum mbfl_no_encoding to,
- int (*output_function)(int, void* ),
- int (*flush_function)(void*),
- void* data)
-{
- mbfl_convert_filter * filter;
-
- /* allocate */
- filter = (mbfl_convert_filter *)mbfl_malloc(sizeof(mbfl_convert_filter));
- if (filter == NULL) {
- return NULL;
- }
-
- /* encoding structure */
- filter->from = mbfl_no2encoding(from);
- filter->to = mbfl_no2encoding(to);
- if (filter->from == NULL) {
- filter->from = &mbfl_encoding_pass;
- }
- if (filter->to == NULL) {
- filter->to = &mbfl_encoding_pass;
- }
-
- if (output_function != NULL) {
- filter->output_function = output_function;
- } else {
- filter->output_function = mbfl_filter_output_null;
- }
- filter->flush_function = flush_function;
- filter->data = data;
- filter->illegal_mode = MBFL_OUTPUTFILTER_ILLEGAL_MODE_CHAR;
- filter->illegal_substchar = 0x3f; /* '?' */
-
- /* setup the function table */
- mbfl_convert_filter_reset_vtbl(filter);
-
- /* constructor */
- (*filter->filter_ctor)(filter);
-
- return filter;
-}
-
-void
-mbfl_convert_filter_delete(mbfl_convert_filter *filter)
-{
- if (filter) {
- (*filter->filter_dtor)(filter);
- mbfl_free((void*)filter);
- }
-}
-
-int
-mbfl_convert_filter_feed(int c, mbfl_convert_filter *filter)
-{
- return (*filter->filter_function)(c, filter);
-}
-
-int
-mbfl_convert_filter_flush(mbfl_convert_filter *filter)
-{
- (*filter->filter_flush)(filter);
- return (filter->flush_function ? (*filter->flush_function)(filter->data) : 0);
-}
-
-void mbfl_convert_filter_reset(mbfl_convert_filter *filter,
- enum mbfl_no_encoding from, enum mbfl_no_encoding to)
-{
- /* destruct old filter */
- (*filter->filter_dtor)(filter);
-
- /* resset filter member */
- filter->from = mbfl_no2encoding(from);
- filter->to = mbfl_no2encoding(to);
-
- /* set the vtbl */
- mbfl_convert_filter_reset_vtbl(filter);
-
- /* construct new filter */
- (*filter->filter_ctor)(filter);
-}
-
-void
-mbfl_convert_filter_copy(
- mbfl_convert_filter *src,
- mbfl_convert_filter *dist)
-{
- dist->filter_ctor = src->filter_ctor;
- dist->filter_dtor = src->filter_dtor;
- dist->filter_function = src->filter_function;
- dist->filter_flush = src->filter_flush;
- dist->output_function = src->output_function;
- dist->flush_function = src->flush_function;
- dist->data = src->data;
- dist->status = src->status;
- dist->cache = src->cache;
- dist->from = src->from;
- dist->to = src->to;
- dist->illegal_mode = src->illegal_mode;
- dist->illegal_substchar = src->illegal_substchar;
-}
-
-int mbfl_convert_filter_devcat(mbfl_convert_filter *filter, mbfl_memory_device *src)
-{
- int n;
- unsigned char *p;
-
- p = src->buffer;
- n = src->pos;
- while (n > 0) {
- if ((*filter->filter_function)(*p++, filter) < 0) {
- return -1;
- }
- n--;
- }
-
- return n;
-}
-
-int mbfl_convert_filter_strcat(mbfl_convert_filter *filter, const unsigned char *p)
-{
- int c;
-
- while ((c = *p++) != '\0') {
- if ((*filter->filter_function)(c, filter) < 0) {
- return -1;
- }
- }
-
- 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)
-{
- int mode_backup, ret, n, m, r;
-
- ret = 0;
- mode_backup = filter->illegal_mode;
- filter->illegal_mode = MBFL_OUTPUTFILTER_ILLEGAL_MODE_NONE;
- switch (mode_backup) {
- case MBFL_OUTPUTFILTER_ILLEGAL_MODE_CHAR:
- ret = (*filter->filter_function)(filter->illegal_substchar, filter);
- break;
- case MBFL_OUTPUTFILTER_ILLEGAL_MODE_LONG:
- if (c >= 0) {
- if (c < MBFL_WCSGROUP_UCS4MAX) { /* unicode */
- ret = mbfl_convert_filter_strcat(filter, (const unsigned char *)"U+");
- } else {
- if (c < MBFL_WCSGROUP_WCHARMAX) {
- m = c & ~MBFL_WCSPLANE_MASK;
- switch (m) {
- case MBFL_WCSPLANE_JIS0208:
- ret = mbfl_convert_filter_strcat(filter, (const unsigned char *)"JIS+");
- break;
- case MBFL_WCSPLANE_JIS0212:
- ret = mbfl_convert_filter_strcat(filter, (const unsigned char *)"JIS2+");
- break;
- case MBFL_WCSPLANE_WINCP932:
- ret = mbfl_convert_filter_strcat(filter, (const unsigned char *)"W932+");
- break;
- case MBFL_WCSPLANE_8859_1:
- ret = mbfl_convert_filter_strcat(filter, (const unsigned char *)"I8859_1+");
- break;
- default:
- ret = mbfl_convert_filter_strcat(filter, (const unsigned char *)"?+");
- break;
- }
- c &= MBFL_WCSPLANE_MASK;
- } else {
- ret = mbfl_convert_filter_strcat(filter, (const unsigned char *)"BAD+");
- c &= MBFL_WCSGROUP_MASK;
- }
- }
- if (ret >= 0) {
- 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 (m == 0 && ret >= 0) {
- ret = (*filter->filter_function)(mbfl_hexchar_table[0], filter);
- }
- }
- }
- break;
- default:
- break;
- }
- filter->illegal_mode = mode_backup;
-
- return ret;
-}
-
-const struct mbfl_convert_vtbl * mbfl_convert_filter_get_vtbl(enum mbfl_no_encoding from, enum mbfl_no_encoding to)
-{
- const struct mbfl_convert_vtbl *vtbl;
- int i;
-
- if (to == mbfl_no_encoding_base64 ||
- to == mbfl_no_encoding_qprint ||
- 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) {
- to = mbfl_no_encoding_8bit;
- }
-
- i = 0;
- while ((vtbl = mbfl_convert_filter_list[i++]) != NULL){
- if (vtbl->from == from && vtbl->to == to) {
- return vtbl;
- }
- }
-
- return NULL;
-}
-
-
-static void mbfl_convert_filter_reset_vtbl(mbfl_convert_filter *filter)
-{
- const struct mbfl_convert_vtbl *vtbl;
-
- vtbl = mbfl_convert_filter_get_vtbl(filter->from->no_encoding, filter->to->no_encoding);
- if (vtbl == NULL) {
- vtbl = &vtbl_pass;
- }
-
- filter->filter_ctor = vtbl->filter_ctor;
- filter->filter_dtor = vtbl->filter_dtor;
- filter->filter_function = vtbl->filter_function;
- filter->filter_flush = vtbl->filter_flush;
-}
-
-/*
- * commonly used constructor and destructor
- */
-void mbfl_filt_conv_common_ctor(mbfl_convert_filter *filter)
-{
- filter->status = 0;
- filter->cache = 0;
-}
-
-int mbfl_filt_conv_common_flush(mbfl_convert_filter *filter)
-{
- filter->status = 0;
- filter->cache = 0;
- return 0;
-}
-
-void mbfl_filt_conv_common_dtor(mbfl_convert_filter *filter)
-{
- filter->status = 0;
- filter->cache = 0;
-}
-
-
diff --git a/ext/mbstring/libmbfl/mbfl/mbfl_convert.h b/ext/mbstring/libmbfl/mbfl/mbfl_convert.h
deleted file mode 100644
index 0bc06209c1..0000000000
--- a/ext/mbstring/libmbfl/mbfl/mbfl_convert.h
+++ /dev/null
@@ -1,88 +0,0 @@
-/*
- * "streamable kanji code filter and converter"
- * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved.
- *
- * LICENSE NOTICES
- *
- * This file is part of "streamable kanji code filter and converter",
- * which is distributed under the terms of GNU Lesser General Public
- * License (version 2) as published by the Free Software Foundation.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with "streamable kanji code filter and converter";
- * if not, write to the Free Software Foundation, Inc., 59 Temple Place,
- * Suite 330, Boston, MA 02111-1307 USA
- *
- * The author of this file:
- *
- */
-/*
- * The source code included in this files was separated from mbfilter.h
- * by Moriyoshi Koizumi <moriyoshi@php.net> on 20 Dec 2002. The file
- * mbfilter.h is included in this package .
- *
- */
-
-#ifndef MBFL_CONVERT_H
-#define MBFL_CONVERT_H
-
-#include "mbfl_defs.h"
-#include "mbfl_encoding.h"
-#include "mbfl_memory_device.h"
-
-typedef struct _mbfl_convert_filter mbfl_convert_filter;
-
-struct _mbfl_convert_filter {
- void (*filter_ctor)(mbfl_convert_filter *filter);
- void (*filter_dtor)(mbfl_convert_filter *filter);
- int (*filter_function)(int c, mbfl_convert_filter *filter);
- int (*filter_flush)(mbfl_convert_filter *filter);
- int (*output_function)(int c, void *data);
- int (*flush_function)(void *data);
- void *data;
- int status;
- int cache;
- const mbfl_encoding *from;
- const mbfl_encoding *to;
- int illegal_mode;
- int illegal_substchar;
-};
-
-struct mbfl_convert_vtbl {
- enum mbfl_no_encoding from;
- enum mbfl_no_encoding to;
- void (*filter_ctor)(mbfl_convert_filter *filter);
- void (*filter_dtor)(mbfl_convert_filter *filter);
- int (*filter_function)(int c, mbfl_convert_filter *filter);
- int (*filter_flush)(mbfl_convert_filter *filter);
-};
-
-MBFLAPI extern const struct mbfl_convert_vtbl *mbfl_convert_filter_list[];
-
-MBFLAPI extern mbfl_convert_filter *mbfl_convert_filter_new(
- enum mbfl_no_encoding from,
- enum mbfl_no_encoding to,
- int (*output_function)(int, void *),
- int (*flush_function)(void *),
- void *data );
-MBFLAPI extern void mbfl_convert_filter_delete(mbfl_convert_filter *filter);
-MBFLAPI extern int mbfl_convert_filter_feed(int c, mbfl_convert_filter *filter);
-MBFLAPI extern int mbfl_convert_filter_flush(mbfl_convert_filter *filter);
-MBFLAPI extern void mbfl_convert_filter_reset(mbfl_convert_filter *filter, enum mbfl_no_encoding from, enum mbfl_no_encoding to);
-MBFLAPI extern void mbfl_convert_filter_copy(mbfl_convert_filter *src, mbfl_convert_filter *dist);
-MBFLAPI extern int mbfl_filt_conv_illegal_output(int c, mbfl_convert_filter *filter);
-MBFLAPI extern const struct mbfl_convert_vtbl * mbfl_convert_filter_get_vtbl(enum mbfl_no_encoding from, enum mbfl_no_encoding to);
-
-MBFLAPI extern void mbfl_filt_conv_common_ctor(mbfl_convert_filter *filter);
-MBFLAPI extern int mbfl_filt_conv_common_flush(mbfl_convert_filter *filter);
-MBFLAPI extern void mbfl_filt_conv_common_dtor(mbfl_convert_filter *filter);
-
-MBFLAPI extern int mbfl_convert_filter_devcat(mbfl_convert_filter *filter, mbfl_memory_device *src);
-MBFLAPI extern int mbfl_convert_filter_strcat(mbfl_convert_filter *filter, const unsigned char *p);
-
-#endif /* MBFL_CONVERT_H */
diff --git a/ext/mbstring/libmbfl/mbfl/mbfl_defs.h b/ext/mbstring/libmbfl/mbfl/mbfl_defs.h
deleted file mode 100755
index 6816bd39f7..0000000000
--- a/ext/mbstring/libmbfl/mbfl/mbfl_defs.h
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * "streamable kanji code filter and converter"
- * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved.
- *
- * LICENSE NOTICES
- *
- * This file is part of "streamable kanji code filter and converter",
- * which is distributed under the terms of GNU Lesser General Public
- * License (version 2) as published by the Free Software Foundation.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with "streamable kanji code filter and converter";
- * if not, write to the Free Software Foundation, Inc., 59 Temple Place,
- * Suite 330, Boston, MA 02111-1307 USA
- *
- * The author of this file:
- *
- */
-/*
- * The source code included in this files was separated from mbfilter.h
- * by Moriyoshi Koizumi <moriyoshi@php.net> on 20 Dec 2002. The file
- * mbfilter.h is included in this package .
- *
- */
-
-#ifndef MBFL_DEFS_H
-#define MBFL_DEFS_H
-
-#ifndef NULL
-#ifdef __cplusplus
-#define NULL (0L)
-#else
-#define NULL (void *)(0L)
-#endif
-#endif
-
-#ifdef WIN32
-#ifdef MBFL_DLL_EXPORT
-#define MBFLAPI __declspec(dllexport)
-#else
-#define MBFLAPI __declspec(dllimport)
-#endif
-#else
-#define MBFLAPI
-#endif
-
-#endif /* MBFL_DEFS_H */
diff --git a/ext/mbstring/libmbfl/mbfl/mbfl_encoding.c b/ext/mbstring/libmbfl/mbfl/mbfl_encoding.c
deleted file mode 100644
index df279336ce..0000000000
--- a/ext/mbstring/libmbfl/mbfl/mbfl_encoding.c
+++ /dev/null
@@ -1,301 +0,0 @@
-/*
- * "streamable kanji code filter and converter"
- * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved.
- *
- * LICENSE NOTICES
- *
- * This file is part of "streamable kanji code filter and converter",
- * which is distributed under the terms of GNU Lesser General Public
- * License (version 2) as published by the Free Software Foundation.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with "streamable kanji code filter and converter";
- * if not, write to the Free Software Foundation, Inc., 59 Temple Place,
- * Suite 330, Boston, MA 02111-1307 USA
- *
- * The author of this file:
- *
- */
-/*
- * The source code included in this files was separated from mbfilter.c
- * by Moriyoshi Koizumi <moriyoshi@php.net> on 20 Dec 2002. The file
- * mbfilter.c is included in this package .
- *
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#ifdef HAVE_STDDEF_H
-#include <stddef.h>
-#endif
-
-#ifdef HAVE_STRING_H
-#include <string.h>
-#endif
-
-#ifdef HAVE_STRINGS_H
-#include <strings.h>
-#endif
-
-#include "mbfl_encoding.h"
-#include "mbfilter_pass.h"
-#include "mbfilter_8bit.h"
-#include "mbfilter_wchar.h"
-
-#include "filters/mbfilter_euc_cn.h"
-#include "filters/mbfilter_hz.h"
-#include "filters/mbfilter_euc_tw.h"
-#include "filters/mbfilter_big5.h"
-#include "filters/mbfilter_uhc.h"
-#include "filters/mbfilter_euc_kr.h"
-#include "filters/mbfilter_iso2022_kr.h"
-#include "filters/mbfilter_sjis.h"
-#include "filters/mbfilter_jis.h"
-#include "filters/mbfilter_euc_jp.h"
-#include "filters/mbfilter_euc_jp_win.h"
-#include "filters/mbfilter_ascii.h"
-#include "filters/mbfilter_koi8r.h"
-#include "filters/mbfilter_cp866.h"
-#include "filters/mbfilter_cp932.h"
-#include "filters/mbfilter_cp936.h"
-#include "filters/mbfilter_cp1251.h"
-#include "filters/mbfilter_cp1252.h"
-#include "filters/mbfilter_iso8859_1.h"
-#include "filters/mbfilter_iso8859_2.h"
-#include "filters/mbfilter_iso8859_3.h"
-#include "filters/mbfilter_iso8859_4.h"
-#include "filters/mbfilter_iso8859_5.h"
-#include "filters/mbfilter_iso8859_6.h"
-#include "filters/mbfilter_iso8859_7.h"
-#include "filters/mbfilter_iso8859_8.h"
-#include "filters/mbfilter_iso8859_9.h"
-#include "filters/mbfilter_iso8859_10.h"
-#include "filters/mbfilter_iso8859_13.h"
-#include "filters/mbfilter_iso8859_14.h"
-#include "filters/mbfilter_iso8859_15.h"
-#include "filters/mbfilter_base64.h"
-#include "filters/mbfilter_qprint.h"
-#include "filters/mbfilter_uuencode.h"
-#include "filters/mbfilter_7bit.h"
-#include "filters/mbfilter_utf7.h"
-#include "filters/mbfilter_utf7imap.h"
-#include "filters/mbfilter_utf8.h"
-#include "filters/mbfilter_utf16.h"
-#include "filters/mbfilter_utf32.h"
-#include "filters/mbfilter_byte2.h"
-#include "filters/mbfilter_byte4.h"
-#include "filters/mbfilter_ucs4.h"
-#include "filters/mbfilter_ucs2.h"
-#include "filters/mbfilter_htmlent.h"
-
-#ifndef HAVE_STRCASECMP
-#ifdef HAVE_STRICMP
-#define strcasecmp stricmp
-#endif
-#endif
-
-
-static const char *mbfl_encoding_auto_aliases[] = {"unknown", NULL};
-
-static const mbfl_encoding mbfl_encoding_auto = {
- mbfl_no_encoding_auto,
- "auto",
- NULL,
- (const char *(*)[])&mbfl_encoding_auto_aliases,
- NULL,
- 0
-};
-
-static const mbfl_encoding *mbfl_encoding_ptr_list[] = {
- &mbfl_encoding_pass,
- &mbfl_encoding_auto,
- &mbfl_encoding_wchar,
- &mbfl_encoding_byte2be,
- &mbfl_encoding_byte2le,
- &mbfl_encoding_byte4be,
- &mbfl_encoding_byte4le,
- &mbfl_encoding_base64,
- &mbfl_encoding_uuencode,
- &mbfl_encoding_html_ent,
- &mbfl_encoding_qprint,
- &mbfl_encoding_7bit,
- &mbfl_encoding_8bit,
- &mbfl_encoding_ucs4,
- &mbfl_encoding_ucs4be,
- &mbfl_encoding_ucs4le,
- &mbfl_encoding_ucs2,
- &mbfl_encoding_ucs2be,
- &mbfl_encoding_ucs2le,
- &mbfl_encoding_utf32,
- &mbfl_encoding_utf32be,
- &mbfl_encoding_utf32le,
- &mbfl_encoding_utf16,
- &mbfl_encoding_utf16be,
- &mbfl_encoding_utf16le,
- &mbfl_encoding_utf8,
- &mbfl_encoding_utf7,
- &mbfl_encoding_utf7imap,
- &mbfl_encoding_ascii,
- &mbfl_encoding_euc_jp,
- &mbfl_encoding_sjis,
- &mbfl_encoding_eucjp_win,
- &mbfl_encoding_sjis_win,
- &mbfl_encoding_jis,
- &mbfl_encoding_2022jp,
- &mbfl_encoding_cp1252,
- &mbfl_encoding_8859_1,
- &mbfl_encoding_8859_2,
- &mbfl_encoding_8859_3,
- &mbfl_encoding_8859_4,
- &mbfl_encoding_8859_5,
- &mbfl_encoding_8859_6,
- &mbfl_encoding_8859_7,
- &mbfl_encoding_8859_8,
- &mbfl_encoding_8859_9,
- &mbfl_encoding_8859_10,
- &mbfl_encoding_8859_13,
- &mbfl_encoding_8859_14,
- &mbfl_encoding_8859_15,
- &mbfl_encoding_euc_cn,
- &mbfl_encoding_cp936,
- &mbfl_encoding_hz,
- &mbfl_encoding_euc_tw,
- &mbfl_encoding_big5,
- &mbfl_encoding_euc_kr,
- &mbfl_encoding_uhc,
- &mbfl_encoding_2022kr,
- &mbfl_encoding_cp1251,
- &mbfl_encoding_cp866,
- &mbfl_encoding_koi8r,
- NULL
-};
-
-/* encoding resolver */
-const mbfl_encoding *
-mbfl_name2encoding(const char *name)
-{
- const mbfl_encoding *encoding;
- int i, j;
-
- if (name == NULL) {
- return NULL;
- }
-
- i = 0;
- while ((encoding = mbfl_encoding_ptr_list[i++]) != NULL){
- if (strcasecmp(encoding->name, name) == 0) {
- return encoding;
- }
- }
-
- /* serch MIME charset name */
- i = 0;
- while ((encoding = mbfl_encoding_ptr_list[i++]) != NULL) {
- if (encoding->mime_name != NULL) {
- if (strcasecmp(encoding->mime_name, name) == 0) {
- return encoding;
- }
- }
- }
-
- /* serch aliases */
- i = 0;
- while ((encoding = mbfl_encoding_ptr_list[i++]) != NULL) {
- if (encoding->aliases != NULL) {
- j = 0;
- while ((*encoding->aliases)[j] != NULL) {
- if (strcasecmp((*encoding->aliases)[j], name) == 0) {
- return encoding;
- }
- j++;
- }
- }
- }
-
- return NULL;
-}
-
-const mbfl_encoding *
-mbfl_no2encoding(enum mbfl_no_encoding no_encoding)
-{
- const mbfl_encoding *encoding;
- int i;
-
- i = 0;
- while ((encoding = mbfl_encoding_ptr_list[i++]) != NULL){
- if (encoding->no_encoding == no_encoding) {
- return encoding;
- }
- }
-
- return NULL;
-}
-
-enum mbfl_no_encoding
-mbfl_name2no_encoding(const char *name)
-{
- const mbfl_encoding *encoding;
-
- encoding = mbfl_name2encoding(name);
- if (encoding == NULL) {
- return mbfl_no_encoding_invalid;
- } else {
- return encoding->no_encoding;
- }
-}
-
-const char *
-mbfl_no_encoding2name(enum mbfl_no_encoding no_encoding)
-{
- const mbfl_encoding *encoding;
-
- encoding = mbfl_no2encoding(no_encoding);
- if (encoding == NULL) {
- return "";
- } else {
- return encoding->name;
- }
-}
-
-const mbfl_encoding **
-mbfl_get_supported_encodings(void)
-{
- return mbfl_encoding_ptr_list;
-}
-
-const char *
-mbfl_no2preferred_mime_name(enum mbfl_no_encoding no_encoding)
-{
- const mbfl_encoding *encoding;
-
- encoding = mbfl_no2encoding(no_encoding);
- if (encoding != NULL && encoding->mime_name != NULL && encoding->mime_name[0] != '\0') {
- return encoding->mime_name;
- } else {
- return NULL;
- }
-}
-
-int
-mbfl_is_support_encoding(const char *name)
-{
- const mbfl_encoding *encoding;
-
- encoding = mbfl_name2encoding(name);
- if (encoding == NULL) {
- return 0;
- } else {
- return 1;
- }
-}
-
-
-
-
diff --git a/ext/mbstring/libmbfl/mbfl/mbfl_encoding.h b/ext/mbstring/libmbfl/mbfl/mbfl_encoding.h
deleted file mode 100644
index c99af89a02..0000000000
--- a/ext/mbstring/libmbfl/mbfl/mbfl_encoding.h
+++ /dev/null
@@ -1,126 +0,0 @@
-/*
- * "streamable kanji code filter and converter"
- * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved.
- *
- * LICENSE NOTICES
- *
- * This file is part of "streamable kanji code filter and converter",
- * which is distributed under the terms of GNU Lesser General Public
- * License (version 2) as published by the Free Software Foundation.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with "streamable kanji code filter and converter";
- * if not, write to the Free Software Foundation, Inc., 59 Temple Place,
- * Suite 330, Boston, MA 02111-1307 USA
- *
- * The author of this file:
- *
- */
-/*
- * The source code included in this files was separated from mbfilter.h
- * by Moriyoshi Koizumi <moriyoshi@php.net> on 20 Dec 2002. The file
- * mbfilter.h is included in this package .
- *
- */
-
-#ifndef MBFL_ENCODING_H
-#define MBFL_ENCODING_H
-
-#include "mbfl_defs.h"
-
-enum mbfl_no_encoding {
- mbfl_no_encoding_invalid = -1,
- mbfl_no_encoding_pass,
- mbfl_no_encoding_auto,
- mbfl_no_encoding_wchar,
- mbfl_no_encoding_byte2be,
- mbfl_no_encoding_byte2le,
- mbfl_no_encoding_byte4be,
- mbfl_no_encoding_byte4le,
- mbfl_no_encoding_base64,
- mbfl_no_encoding_uuencode,
- mbfl_no_encoding_html_ent,
- mbfl_no_encoding_qprint,
- mbfl_no_encoding_7bit,
- mbfl_no_encoding_8bit,
- mbfl_no_encoding_charset_min,
- mbfl_no_encoding_ucs4,
- mbfl_no_encoding_ucs4be,
- mbfl_no_encoding_ucs4le,
- mbfl_no_encoding_ucs2,
- mbfl_no_encoding_ucs2be,
- mbfl_no_encoding_ucs2le,
- mbfl_no_encoding_utf32,
- mbfl_no_encoding_utf32be,
- mbfl_no_encoding_utf32le,
- mbfl_no_encoding_utf16,
- mbfl_no_encoding_utf16be,
- mbfl_no_encoding_utf16le,
- mbfl_no_encoding_utf8,
- mbfl_no_encoding_utf7,
- mbfl_no_encoding_utf7imap,
- mbfl_no_encoding_ascii,
- mbfl_no_encoding_euc_jp,
- mbfl_no_encoding_sjis,
- mbfl_no_encoding_eucjp_win,
- mbfl_no_encoding_sjis_win,
- mbfl_no_encoding_sjis_mac,
- mbfl_no_encoding_jis,
- mbfl_no_encoding_2022jp,
- mbfl_no_encoding_cp1252,
- mbfl_no_encoding_8859_1,
- mbfl_no_encoding_8859_2,
- mbfl_no_encoding_8859_3,
- mbfl_no_encoding_8859_4,
- mbfl_no_encoding_8859_5,
- mbfl_no_encoding_8859_6,
- mbfl_no_encoding_8859_7,
- mbfl_no_encoding_8859_8,
- mbfl_no_encoding_8859_9,
- mbfl_no_encoding_8859_10,
- mbfl_no_encoding_8859_13,
- mbfl_no_encoding_8859_14,
- mbfl_no_encoding_8859_15,
- mbfl_no_encoding_euc_cn,
- mbfl_no_encoding_cp936,
- mbfl_no_encoding_euc_tw,
- mbfl_no_encoding_big5,
- mbfl_no_encoding_euc_kr,
- mbfl_no_encoding_2022kr,
- mbfl_no_encoding_uhc,
- mbfl_no_encoding_hz,
- mbfl_no_encoding_cp1251,
- mbfl_no_encoding_cp866,
- mbfl_no_encoding_koi8r,
- mbfl_no_encoding_charset_max
-};
-
-typedef enum mbfl_no_encoding mbfl_encoding_id;
-
-/*
- * encoding
- */
-typedef struct _mbfl_encoding {
- enum mbfl_no_encoding no_encoding;
- const char *name;
- const char *mime_name;
- const char *(*aliases)[];
- const unsigned char *mblen_table;
- unsigned int flag;
-} mbfl_encoding;
-
-MBFLAPI extern const mbfl_encoding * mbfl_name2encoding(const char *name);
-MBFLAPI extern const mbfl_encoding * mbfl_no2encoding(enum mbfl_no_encoding no_encoding);
-MBFLAPI extern enum mbfl_no_encoding mbfl_name2no_encoding(const char *name);
-MBFLAPI extern const mbfl_encoding ** mbfl_get_supported_encodings();
-MBFLAPI extern const char * mbfl_no_encoding2name(enum mbfl_no_encoding no_encoding);
-MBFLAPI extern const char * mbfl_no2preferred_mime_name(enum mbfl_no_encoding no_encoding);
-MBFLAPI extern int mbfl_is_support_encoding(const char *name);
-
-
-#endif /* MBFL_ENCODING_H */
diff --git a/ext/mbstring/libmbfl/mbfl/mbfl_filter_output.c b/ext/mbstring/libmbfl/mbfl/mbfl_filter_output.c
deleted file mode 100644
index 2b63478214..0000000000
--- a/ext/mbstring/libmbfl/mbfl/mbfl_filter_output.c
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * "streamable kanji code filter and converter"
- * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved.
- *
- * LICENSE NOTICES
- *
- * This file is part of "streamable kanji code filter and converter",
- * which is distributed under the terms of GNU Lesser General Public
- * License (version 2) as published by the Free Software Foundation.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with "streamable kanji code filter and converter";
- * if not, write to the Free Software Foundation, Inc., 59 Temple Place,
- * Suite 330, Boston, MA 02111-1307 USA
- *
- * The author of this file:
- *
- */
-/*
- * The source code included in this files was separated from mbfilter.c
- * by Moriyoshi Koizumi <moriyoshi@php.net> on 20 Dec 2002. The file
- * mbfilter.c is included in this package .
- *
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "mbfl_convert.h"
-#include "mbfl_filter_output.h"
-
-int mbfl_filter_output_pipe(int c, void* data)
-{
- mbfl_convert_filter *filter = (mbfl_convert_filter*)data;
- return (*filter->filter_function)(c, filter);
-}
-
-int mbfl_filter_output_null(int c, void* data)
-{
- return c;
-}
-
-
diff --git a/ext/mbstring/libmbfl/mbfl/mbfl_filter_output.h b/ext/mbstring/libmbfl/mbfl/mbfl_filter_output.h
deleted file mode 100644
index ce5192935e..0000000000
--- a/ext/mbstring/libmbfl/mbfl/mbfl_filter_output.h
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * "streamable kanji code filter and converter"
- * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved.
- *
- * LICENSE NOTICES
- *
- * This file is part of "streamable kanji code filter and converter",
- * which is distributed under the terms of GNU Lesser General Public
- * License (version 2) as published by the Free Software Foundation.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with "streamable kanji code filter and converter";
- * if not, write to the Free Software Foundation, Inc., 59 Temple Place,
- * Suite 330, Boston, MA 02111-1307 USA
- *
- * The author of this file:
- *
- */
-/*
- * The source code included in this files was separated from mbfilter.h
- * by Moriyoshi Koizumi <moriyoshi@php.net> on 20 Dec 2002. The file
- * mbfilter.h is included in this package .
- *
- */
-
-#ifndef MBFL_FILTER_OUTPUT_H
-#define MBFL_FILTER_OUTPUT_H
-
-MBFLAPI extern int mbfl_filter_output_pipe(int c, void* data);
-MBFLAPI extern int mbfl_filter_output_null(int c, void* data);
-
-#endif /* MBFL_FILTER_OUTPUT_H */
diff --git a/ext/mbstring/libmbfl/mbfl/mbfl_ident.c b/ext/mbstring/libmbfl/mbfl/mbfl_ident.c
deleted file mode 100644
index 619b9cfc10..0000000000
--- a/ext/mbstring/libmbfl/mbfl/mbfl_ident.c
+++ /dev/null
@@ -1,245 +0,0 @@
-/*
- * "streamable kanji code filter and converter"
- * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved.
- *
- * LICENSE NOTICES
- *
- * This file is part of "streamable kanji code filter and converter",
- * which is distributed under the terms of GNU Lesser General Public
- * License (version 2) as published by the Free Software Foundation.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with "streamable kanji code filter and converter";
- * if not, write to the Free Software Foundation, Inc., 59 Temple Place,
- * Suite 330, Boston, MA 02111-1307 USA
- *
- * The author of this file:
- *
- */
-/*
- * The source code included in this files was separated from mbfilter.c
- * by Moriyoshi Koizumi <moriyoshi@php.net> on 20 Dec 2002. The file
- * mbfilter.c is included in this package .
- *
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#ifdef HAVE_STDDEF_H
-#include <stddef.h>
-#endif
-
-#include "mbfl_ident.h"
-#include "mbfl_allocators.h"
-#include "mbfilter_pass.h"
-#include "mbfilter_8bit.h"
-#include "mbfilter_wchar.h"
-
-#include "filters/mbfilter_euc_cn.h"
-#include "filters/mbfilter_hz.h"
-#include "filters/mbfilter_euc_tw.h"
-#include "filters/mbfilter_big5.h"
-#include "filters/mbfilter_uhc.h"
-#include "filters/mbfilter_euc_kr.h"
-#include "filters/mbfilter_iso2022_kr.h"
-#include "filters/mbfilter_sjis.h"
-#include "filters/mbfilter_jis.h"
-#include "filters/mbfilter_euc_jp.h"
-#include "filters/mbfilter_euc_jp_win.h"
-#include "filters/mbfilter_ascii.h"
-#include "filters/mbfilter_koi8r.h"
-#include "filters/mbfilter_cp866.h"
-#include "filters/mbfilter_cp932.h"
-#include "filters/mbfilter_cp936.h"
-#include "filters/mbfilter_cp1251.h"
-#include "filters/mbfilter_cp1252.h"
-#include "filters/mbfilter_iso8859_1.h"
-#include "filters/mbfilter_iso8859_2.h"
-#include "filters/mbfilter_iso8859_3.h"
-#include "filters/mbfilter_iso8859_4.h"
-#include "filters/mbfilter_iso8859_5.h"
-#include "filters/mbfilter_iso8859_6.h"
-#include "filters/mbfilter_iso8859_7.h"
-#include "filters/mbfilter_iso8859_8.h"
-#include "filters/mbfilter_iso8859_9.h"
-#include "filters/mbfilter_iso8859_10.h"
-#include "filters/mbfilter_iso8859_13.h"
-#include "filters/mbfilter_iso8859_14.h"
-#include "filters/mbfilter_iso8859_15.h"
-#include "filters/mbfilter_base64.h"
-#include "filters/mbfilter_qprint.h"
-#include "filters/mbfilter_uuencode.h"
-#include "filters/mbfilter_7bit.h"
-#include "filters/mbfilter_utf7.h"
-#include "filters/mbfilter_utf7imap.h"
-#include "filters/mbfilter_utf8.h"
-#include "filters/mbfilter_utf16.h"
-#include "filters/mbfilter_utf32.h"
-#include "filters/mbfilter_byte2.h"
-#include "filters/mbfilter_byte4.h"
-#include "filters/mbfilter_ucs4.h"
-#include "filters/mbfilter_ucs2.h"
-#include "filters/mbfilter_htmlent.h"
-
-static const struct mbfl_identify_vtbl vtbl_identify_false = {
- mbfl_no_encoding_pass,
- mbfl_filt_ident_false_ctor,
- mbfl_filt_ident_common_dtor,
- mbfl_filt_ident_false };
-
-
-static const struct mbfl_identify_vtbl *mbfl_identify_filter_list[] = {
- &vtbl_identify_utf8,
- &vtbl_identify_utf7,
- &vtbl_identify_ascii,
- &vtbl_identify_eucjp,
- &vtbl_identify_sjis,
- &vtbl_identify_eucjpwin,
- &vtbl_identify_sjiswin,
- &vtbl_identify_jis,
- &vtbl_identify_2022jp,
- &vtbl_identify_euccn,
- &vtbl_identify_cp936,
- &vtbl_identify_hz,
- &vtbl_identify_euctw,
- &vtbl_identify_big5,
- &vtbl_identify_euckr,
- &vtbl_identify_uhc,
- &vtbl_identify_2022kr,
- &vtbl_identify_cp1251,
- &vtbl_identify_cp866,
- &vtbl_identify_koi8r,
- &vtbl_identify_cp1252,
- &vtbl_identify_8859_1,
- &vtbl_identify_8859_2,
- &vtbl_identify_8859_3,
- &vtbl_identify_8859_4,
- &vtbl_identify_8859_5,
- &vtbl_identify_8859_6,
- &vtbl_identify_8859_7,
- &vtbl_identify_8859_8,
- &vtbl_identify_8859_9,
- &vtbl_identify_8859_10,
- &vtbl_identify_8859_13,
- &vtbl_identify_8859_14,
- &vtbl_identify_8859_15,
- &vtbl_identify_false,
- NULL
-};
-
-
-
-/*
- * identify filter
- */
-const struct mbfl_identify_vtbl * mbfl_identify_filter_get_vtbl(enum mbfl_no_encoding encoding)
-{
- const struct mbfl_identify_vtbl * vtbl;
- int i;
-
- i = 0;
- while ((vtbl = mbfl_identify_filter_list[i++]) != NULL) {
- if (vtbl->encoding == encoding) {
- break;
- }
- }
-
- return vtbl;
-}
-
-mbfl_identify_filter *mbfl_identify_filter_new(enum mbfl_no_encoding encoding)
-{
- mbfl_identify_filter *filter;
-
- /* allocate */
- filter = (mbfl_identify_filter *)mbfl_malloc(sizeof(mbfl_identify_filter));
- if (filter == NULL) {
- return NULL;
- }
-
- if (mbfl_identify_filter_init(filter, encoding)) {
- mbfl_free(filter);
- return NULL;
- }
-
- return filter;
-}
-
-int mbfl_identify_filter_init(mbfl_identify_filter *filter, enum mbfl_no_encoding encoding)
-{
- const struct mbfl_identify_vtbl *vtbl;
-
- /* encoding structure */
- filter->encoding = mbfl_no2encoding(encoding);
- if (filter->encoding == NULL) {
- filter->encoding = &mbfl_encoding_pass;
- }
-
- filter->status = 0;
- filter->flag = 0;
- filter->score = 0;
-
- /* setup the function table */
- vtbl = mbfl_identify_filter_get_vtbl(filter->encoding->no_encoding);
- if (vtbl == NULL) {
- vtbl = &vtbl_identify_false;
- }
- filter->filter_ctor = vtbl->filter_ctor;
- filter->filter_dtor = vtbl->filter_dtor;
- filter->filter_function = vtbl->filter_function;
-
- /* constructor */
- (*filter->filter_ctor)(filter);
-
- return 0;
-}
-
-void mbfl_identify_filter_delete(mbfl_identify_filter *filter)
-{
- if (filter == NULL) {
- return;
- }
-
- mbfl_identify_filter_cleanup(filter);
- mbfl_free((void*)filter);
-}
-
-void mbfl_identify_filter_cleanup(mbfl_identify_filter *filter)
-{
- (*filter->filter_dtor)(filter);
-}
-
-void mbfl_filt_ident_common_ctor(mbfl_identify_filter *filter)
-{
- filter->status = 0;
- filter->flag = 0;
-}
-
-void mbfl_filt_ident_common_dtor(mbfl_identify_filter *filter)
-{
- filter->status = 0;
-}
-
-int mbfl_filt_ident_false(int c, mbfl_identify_filter *filter)
-{
- filter->flag = 1; /* bad */
- return c;
-}
-
-void mbfl_filt_ident_false_ctor(mbfl_identify_filter *filter)
-{
- filter->status = 0;
- filter->flag = 1;
-}
-
-int mbfl_filt_ident_true(int c, mbfl_identify_filter *filter)
-{
- return c;
-}
diff --git a/ext/mbstring/libmbfl/mbfl/mbfl_ident.h b/ext/mbstring/libmbfl/mbfl/mbfl_ident.h
deleted file mode 100644
index b0721fc413..0000000000
--- a/ext/mbstring/libmbfl/mbfl/mbfl_ident.h
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
- * "streamable kanji code filter and converter"
- * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved.
- *
- * LICENSE NOTICES
- *
- * This file is part of "streamable kanji code filter and converter",
- * which is distributed under the terms of GNU Lesser General Public
- * License (version 2) as published by the Free Software Foundation.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with "streamable kanji code filter and converter";
- * if not, write to the Free Software Foundation, Inc., 59 Temple Place,
- * Suite 330, Boston, MA 02111-1307 USA
- *
- * The author of this file:
- *
- */
-/*
- * The source code included in this files was separated from mbfilter.h
- * by Moriyoshi Koizumi <moriyoshi@php.net> on 20 Dec 2002. The file
- * mbfilter.h is included in this package .
- *
- */
-
-#ifndef MBFL_IDENT_H
-#define MBFL_IDENT_H
-
-#include "mbfl_defs.h"
-#include "mbfl_encoding.h"
-
-/*
- * identify filter
- */
-typedef struct _mbfl_identify_filter mbfl_identify_filter;
-
-struct _mbfl_identify_filter {
- void (*filter_ctor)(mbfl_identify_filter *filter);
- void (*filter_dtor)(mbfl_identify_filter *filter);
- int (*filter_function)(int c, mbfl_identify_filter *filter);
- int status;
- int flag;
- int score;
- const mbfl_encoding *encoding;
-};
-
-struct mbfl_identify_vtbl {
- enum mbfl_no_encoding encoding;
- void (*filter_ctor)(mbfl_identify_filter *filter);
- void (*filter_dtor)(mbfl_identify_filter *filter);
- int (*filter_function)(int c, mbfl_identify_filter *filter);
-};
-
-MBFLAPI extern const struct mbfl_identify_vtbl * mbfl_identify_filter_get_vtbl(enum mbfl_no_encoding encoding);
-MBFLAPI extern mbfl_identify_filter * mbfl_identify_filter_new(enum mbfl_no_encoding encoding);
-MBFLAPI extern void mbfl_identify_filter_delete(mbfl_identify_filter *filter);
-MBFLAPI extern int mbfl_identify_filter_init(mbfl_identify_filter *filter, enum mbfl_no_encoding encoding);
-MBFLAPI void mbfl_identify_filter_cleanup(mbfl_identify_filter *filter);
-
-MBFLAPI extern void mbfl_filt_ident_common_ctor(mbfl_identify_filter *filter);
-MBFLAPI extern void mbfl_filt_ident_common_dtor(mbfl_identify_filter *filter);
-MBFLAPI extern void mbfl_filt_ident_false_ctor(mbfl_identify_filter *filter);
-
-MBFLAPI extern int mbfl_filt_ident_false(int c, mbfl_identify_filter *filter);
-MBFLAPI extern int mbfl_filt_ident_true(int c, mbfl_identify_filter *filter);
-
-#endif /* MBFL_IDENT_H */
diff --git a/ext/mbstring/libmbfl/mbfl/mbfl_language.c b/ext/mbstring/libmbfl/mbfl/mbfl_language.c
deleted file mode 100644
index be1341ab8c..0000000000
--- a/ext/mbstring/libmbfl/mbfl/mbfl_language.c
+++ /dev/null
@@ -1,165 +0,0 @@
-/*
- * "streamable kanji code filter and converter"
- * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved.
- *
- * LICENSE NOTICES
- *
- * This file is part of "streamable kanji code filter and converter",
- * which is distributed under the terms of GNU Lesser General Public
- * License (version 2) as published by the Free Software Foundation.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with "streamable kanji code filter and converter";
- * if not, write to the Free Software Foundation, Inc., 59 Temple Place,
- * Suite 330, Boston, MA 02111-1307 USA
- *
- * The author of this file:
- *
- */
-/*
- * The source code included in this files was separated from mbfilter.c
- * by Moriyoshi Koizumi <moriyoshi@php.net> on 20 Dec 2002. The file
- * mbfilter.c is included in this package .
- *
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#ifdef HAVE_STDDEF_H
-#include <stddef.h>
-#endif
-
-#ifdef HAVE_STDDEF_H
-#include <stddef.h>
-#endif
-
-#ifdef HAVE_STRING_H
-#include <string.h>
-#endif
-
-#ifdef HAVE_STRINGS_H
-#include <strings.h>
-#endif
-
-#include "mbfl_encoding.h"
-#include "mbfl_language.h"
-
-#include "nls/nls_ja.h"
-#include "nls/nls_kr.h"
-#include "nls/nls_zh.h"
-#include "nls/nls_uni.h"
-#include "nls/nls_de.h"
-#include "nls/nls_ru.h"
-#include "nls/nls_en.h"
-#include "nls/nls_neutral.h"
-
-#ifndef HAVE_STRCASECMP
-#ifdef HAVE_STRICMP
-#define strcasecmp stricmp
-#endif
-#endif
-
-static const mbfl_language *mbfl_language_ptr_table[] = {
- &mbfl_language_uni,
- &mbfl_language_japanese,
- &mbfl_language_korean,
- &mbfl_language_simplified_chinese,
- &mbfl_language_traditional_chinese,
- &mbfl_language_english,
- &mbfl_language_german,
- &mbfl_language_russian,
- &mbfl_language_neutral,
- NULL
-};
-
-/* language resolver */
-const mbfl_language *
-mbfl_name2language(const char *name)
-{
- const mbfl_language *language;
- int i, j;
-
- if (name == NULL) {
- return NULL;
- }
-
- i = 0;
- while ((language = mbfl_language_ptr_table[i++]) != NULL){
- if (strcasecmp(language->name, name) == 0) {
- return language;
- }
- }
-
- i = 0;
- while ((language = mbfl_language_ptr_table[i++]) != NULL){
- if (strcasecmp(language->short_name, name) == 0) {
- return language;
- }
- }
-
- /* serch aliases */
- i = 0;
- while ((language = mbfl_language_ptr_table[i++]) != NULL) {
- if (language->aliases != NULL) {
- j = 0;
- while ((*language->aliases)[j] != NULL) {
- if (strcasecmp((*language->aliases)[j], name) == 0) {
- return language;
- }
- j++;
- }
- }
- }
-
- return NULL;
-}
-
-const mbfl_language *
-mbfl_no2language(enum mbfl_no_language no_language)
-{
- const mbfl_language *language;
- int i;
-
- i = 0;
- while ((language = mbfl_language_ptr_table[i++]) != NULL){
- if (language->no_language == no_language) {
- return language;
- }
- }
-
- return NULL;
-}
-
-enum mbfl_no_language
-mbfl_name2no_language(const char *name)
-{
- const mbfl_language *language;
-
- language = mbfl_name2language(name);
- if (language == NULL) {
- return mbfl_no_language_invalid;
- } else {
- return language->no_language;
- }
-}
-
-const char *
-mbfl_no_language2name(enum mbfl_no_language no_language)
-{
- const mbfl_language *language;
-
- language = mbfl_no2language(no_language);
- if (language == NULL) {
- return "";
- } else {
- return language->name;
- }
-}
-
diff --git a/ext/mbstring/libmbfl/mbfl/mbfl_language.h b/ext/mbstring/libmbfl/mbfl/mbfl_language.h
deleted file mode 100644
index 7a6dfde4b3..0000000000
--- a/ext/mbstring/libmbfl/mbfl/mbfl_language.h
+++ /dev/null
@@ -1,84 +0,0 @@
-/*
- * "streamable kanji code filter and converter"
- * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved.
- *
- * LICENSE NOTICES
- *
- * This file is part of "streamable kanji code filter and converter",
- * which is distributed under the terms of GNU Lesser General Public
- * License (version 2) as published by the Free Software Foundation.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with "streamable kanji code filter and converter";
- * if not, write to the Free Software Foundation, Inc., 59 Temple Place,
- * Suite 330, Boston, MA 02111-1307 USA
- *
- * The author of this file:
- *
- */
-/*
- * The source code included in this files was separated from mbfilter.h
- * by Moriyoshi Koizumi <moriyoshi@php.net> on 20 Dec 2002. The file
- * mbfilter.h is included in this package .
- *
- */
-
-#ifndef MBFL_LANGUAGE_H
-#define MBFL_LANGUAGE_H
-
-#include "mbfl_defs.h"
-#include "mbfl_encoding.h"
-
-enum mbfl_no_language {
- mbfl_no_language_invalid = -1,
- mbfl_no_language_neutral,
- mbfl_no_language_uni,
- mbfl_no_language_min,
- mbfl_no_language_catalan, /* ca */
- mbfl_no_language_danish, /* da */
- mbfl_no_language_german, /* de */
- mbfl_no_language_english, /* en */
- mbfl_no_language_estonian, /* et */
- mbfl_no_language_greek, /* el */
- mbfl_no_language_spanish, /* es */
- mbfl_no_language_french, /* fr */
- mbfl_no_language_italian, /* it */
- mbfl_no_language_japanese, /* ja */
- mbfl_no_language_korean, /* ko */
- mbfl_no_language_dutch, /* nl */
- mbfl_no_language_polish, /* pl */
- mbfl_no_language_portuguese, /* pt */
- mbfl_no_language_swedish, /* sv */
- mbfl_no_language_simplified_chinese, /* zh-cn */
- mbfl_no_language_traditional_chinese, /* zh-tw */
- mbfl_no_language_russian, /* ru */
- mbfl_no_language_max
-};
-
-typedef enum mbfl_no_language mbfl_language_id;
-
-/*
- * language
- */
-typedef struct _mbfl_language {
- enum mbfl_no_language no_language;
- const char *name;
- const char *short_name;
- const char *(*aliases)[];
- enum mbfl_no_encoding mail_charset;
- enum mbfl_no_encoding mail_header_encoding;
- enum mbfl_no_encoding mail_body_encoding;
-} mbfl_language;
-
-MBFLAPI extern const mbfl_language * mbfl_name2language(const char *name);
-MBFLAPI extern const mbfl_language * mbfl_no2language(enum mbfl_no_language no_language);
-MBFLAPI extern enum mbfl_no_language mbfl_name2no_language(const char *name);
-MBFLAPI extern const char * mbfl_no_language2name(enum mbfl_no_language no_language);
-
-
-#endif /* MBFL_LANGUAGE_H */
diff --git a/ext/mbstring/libmbfl/mbfl/mbfl_memory_device.c b/ext/mbstring/libmbfl/mbfl/mbfl_memory_device.c
deleted file mode 100644
index 6d93fa3529..0000000000
--- a/ext/mbstring/libmbfl/mbfl/mbfl_memory_device.c
+++ /dev/null
@@ -1,350 +0,0 @@
-/*
- * "streamable kanji code filter and converter"
- * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved.
- *
- * LICENSE NOTICES
- *
- * This file is part of "streamable kanji code filter and converter",
- * which is distributed under the terms of GNU Lesser General Public
- * License (version 2) as published by the Free Software Foundation.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with "streamable kanji code filter and converter";
- * if not, write to the Free Software Foundation, Inc., 59 Temple Place,
- * Suite 330, Boston, MA 02111-1307 USA
- *
- * The author of this file:
- *
- */
-/*
- * The source code included in this files was separated from mbfilter.c
- * by Moriyoshi Koizumi <moriyoshi@php.net> on 20 Dec 2002. The file
- * mbfilter.c is included in this package .
- *
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#ifdef HAVE_STDDEF_H
-#include <stddef.h>
-#endif
-
-#include "mbfl_allocators.h"
-#include "mbfl_string.h"
-#include "mbfl_memory_device.h"
-
-/*
- * memory device output functions
- */
-void
-mbfl_memory_device_init(mbfl_memory_device *device, int initsz, int allocsz)
-{
- if (device) {
- device->length = 0;
- device->buffer = (unsigned char *)0;
- if (initsz > 0) {
- device->buffer = (unsigned char *)mbfl_malloc(initsz*sizeof(unsigned char));
- if (device->buffer != NULL) {
- device->length = initsz;
- }
- }
- device->pos= 0;
- if (allocsz > MBFL_MEMORY_DEVICE_ALLOC_SIZE) {
- device->allocsz = allocsz;
- } else {
- device->allocsz = MBFL_MEMORY_DEVICE_ALLOC_SIZE;
- }
- }
-}
-
-void
-mbfl_memory_device_realloc(mbfl_memory_device *device, int initsz, int allocsz)
-{
- unsigned char *tmp;
-
- if (device) {
- if (initsz > device->length) {
- tmp = (unsigned char *)mbfl_realloc((void *)device->buffer, initsz*sizeof(unsigned char));
- if (tmp != NULL) {
- device->buffer = tmp;
- device->length = initsz;
- }
- }
- if (allocsz > MBFL_MEMORY_DEVICE_ALLOC_SIZE) {
- device->allocsz = allocsz;
- } else {
- device->allocsz = MBFL_MEMORY_DEVICE_ALLOC_SIZE;
- }
- }
-}
-
-void
-mbfl_memory_device_clear(mbfl_memory_device *device)
-{
- if (device) {
- if (device->buffer) {
- mbfl_free(device->buffer);
- }
- device->buffer = (unsigned char *)0;
- device->length = 0;
- device->pos = 0;
- }
-}
-
-void
-mbfl_memory_device_reset(mbfl_memory_device *device)
-{
- if (device) {
- device->pos = 0;
- }
-}
-
-void
-mbfl_memory_device_unput(mbfl_memory_device *device)
-{
- if (device->pos > 0) {
- device->pos--;
- }
-}
-
-mbfl_string *
-mbfl_memory_device_result(mbfl_memory_device *device, mbfl_string *result)
-{
- if (device && result) {
- result->len = device->pos;
- mbfl_memory_device_output4('\0', device);
- result->val = device->buffer;
- device->buffer = (unsigned char *)0;
- device->length = 0;
- device->pos= 0;
- if (result->val == NULL) {
- result->len = 0;
- result = NULL;
- }
- } else {
- result = NULL;
- }
-
- return result;
-}
-
-int
-mbfl_memory_device_output(int c, void *data)
-{
- mbfl_memory_device *device = (mbfl_memory_device *)data;
-
- if (device->pos >= device->length) {
- /* reallocate buffer */
- int newlen;
- unsigned char *tmp;
-
- newlen = device->length + device->allocsz;
- tmp = (unsigned char *)mbfl_realloc((void *)device->buffer, newlen*sizeof(unsigned char));
- if (tmp == NULL) {
- return -1;
- }
- device->length = newlen;
- device->buffer = tmp;
- }
-
- device->buffer[device->pos++] = (unsigned char)c;
- return c;
-}
-
-int
-mbfl_memory_device_output2(int c, void *data)
-{
- mbfl_memory_device *device = (mbfl_memory_device *)data;
-
- if ((device->pos + 2) >= device->length) {
- /* reallocate buffer */
- int newlen;
- unsigned char *tmp;
-
- newlen = device->length + device->allocsz;
- tmp = (unsigned char *)mbfl_realloc((void *)device->buffer, newlen*sizeof(unsigned char));
- if (tmp == NULL) {
- return -1;
- }
- device->length = newlen;
- device->buffer = tmp;
- }
-
- device->buffer[device->pos++] = (unsigned char)((c >> 8) & 0xff);
- device->buffer[device->pos++] = (unsigned char)(c & 0xff);
-
- return c;
-}
-
-int
-mbfl_memory_device_output4(int c, void* data)
-{
- mbfl_memory_device *device = (mbfl_memory_device *)data;
-
- if ((device->pos + 4) >= device->length) {
- /* reallocate buffer */
- int newlen;
- unsigned char *tmp;
-
- newlen = device->length + device->allocsz;
- tmp = (unsigned char *)mbfl_realloc((void *)device->buffer, newlen*sizeof(unsigned char));
- if (tmp == NULL) {
- return -1;
- }
- device->length = newlen;
- device->buffer = tmp;
- }
-
- device->buffer[device->pos++] = (unsigned char)((c >> 24) & 0xff);
- device->buffer[device->pos++] = (unsigned char)((c >> 16) & 0xff);
- device->buffer[device->pos++] = (unsigned char)((c >> 8) & 0xff);
- device->buffer[device->pos++] = (unsigned char)(c & 0xff);
-
- return c;
-}
-
-int
-mbfl_memory_device_strcat(mbfl_memory_device *device, const char *psrc)
-{
- int len;
- unsigned char *w;
- const unsigned char *p;
-
- len = 0;
- p = psrc;
- while (*p) {
- p++;
- len++;
- }
-
- if ((device->pos + len) >= device->length) {
- /* reallocate buffer */
- int newlen = device->length + (len + MBFL_MEMORY_DEVICE_ALLOC_SIZE)*sizeof(unsigned char);
- unsigned char *tmp = (unsigned char *)mbfl_realloc((void *)device->buffer, newlen*sizeof(unsigned char));
- if (tmp == NULL) {
- return -1;
- }
- device->length = newlen;
- device->buffer = tmp;
- }
-
- p = psrc;
- w = &device->buffer[device->pos];
- device->pos += len;
- while (len > 0) {
- *w++ = *p++;
- len--;
- }
-
- return len;
-}
-
-int
-mbfl_memory_device_strncat(mbfl_memory_device *device, const char *psrc, int len)
-{
- unsigned char *w;
-
- if ((device->pos + len) >= device->length) {
- /* reallocate buffer */
- int newlen = device->length + len + MBFL_MEMORY_DEVICE_ALLOC_SIZE;
- unsigned char *tmp = (unsigned char *)mbfl_realloc((void *)device->buffer, newlen*sizeof(unsigned char));
- if (tmp == NULL) {
- return -1;
- }
- device->length = newlen;
- device->buffer = tmp;
- }
-
- w = &device->buffer[device->pos];
- device->pos += len;
- while (len > 0) {
- *w++ = *psrc++;
- len--;
- }
-
- return len;
-}
-
-int
-mbfl_memory_device_devcat(mbfl_memory_device *dest, mbfl_memory_device *src)
-{
- int n;
- unsigned char *p, *w;
-
- if ((dest->pos + src->pos) >= dest->length) {
- /* reallocate buffer */
- int newlen = dest->length + src->pos + MBFL_MEMORY_DEVICE_ALLOC_SIZE;
- unsigned char *tmp = (unsigned char *)mbfl_realloc((void *)dest->buffer, newlen*sizeof(unsigned char));
- if (tmp == NULL) {
- return -1;
- }
- dest->length = newlen;
- dest->buffer = tmp;
- }
-
- p = src->buffer;
- w = &dest->buffer[dest->pos];
- n = src->pos;
- dest->pos += n;
- while (n > 0) {
- *w++ = *p++;
- n--;
- }
-
- return n;
-}
-
-void
-mbfl_wchar_device_init(mbfl_wchar_device *device)
-{
- if (device) {
- device->buffer = (unsigned int *)0;
- device->length = 0;
- device->pos= 0;
- device->allocsz = MBFL_MEMORY_DEVICE_ALLOC_SIZE;
- }
-}
-
-void
-mbfl_wchar_device_clear(mbfl_wchar_device *device)
-{
- if (device) {
- if (device->buffer) {
- mbfl_free(device->buffer);
- }
- device->buffer = (unsigned int*)0;
- device->length = 0;
- device->pos = 0;
- }
-}
-
-int
-mbfl_wchar_device_output(int c, void *data)
-{
- mbfl_wchar_device *device = (mbfl_wchar_device *)data;
-
- if (device->pos >= device->length) {
- /* reallocate buffer */
- int newlen;
- unsigned int *tmp;
-
- newlen = device->length + device->allocsz;
- tmp = (unsigned int *)mbfl_realloc((void *)device->buffer, newlen*sizeof(int));
- if (tmp == NULL) {
- return -1;
- }
- device->length = newlen;
- device->buffer = tmp;
- }
-
- device->buffer[device->pos++] = c;
-
- return c;
-}
diff --git a/ext/mbstring/libmbfl/mbfl/mbfl_memory_device.h b/ext/mbstring/libmbfl/mbfl/mbfl_memory_device.h
deleted file mode 100644
index a2c1c4089f..0000000000
--- a/ext/mbstring/libmbfl/mbfl/mbfl_memory_device.h
+++ /dev/null
@@ -1,73 +0,0 @@
-/*
- * "streamable kanji code filter and converter"
- * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved.
- *
- * LICENSE NOTICES
- *
- * This file is part of "streamable kanji code filter and converter",
- * which is distributed under the terms of GNU Lesser General Public
- * License (version 2) as published by the Free Software Foundation.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with "streamable kanji code filter and converter";
- * if not, write to the Free Software Foundation, Inc., 59 Temple Place,
- * Suite 330, Boston, MA 02111-1307 USA
- *
- * The author of this file:
- *
- */
-/*
- * The source code included in this files was separated from mbfilter.h
- * by Moriyoshi Koizumi <moriyoshi@php.net> on 20 Dec 2002. The file
- * mbfilter.h is included in this package .
- *
- */
-
-#ifndef MBFL_MEMORY_DEVICE_H
-#define MBFL_MEMORY_DEVICE_H
-
-#include "mbfl_defs.h"
-#include "mbfl_string.h"
-
-#define MBFL_MEMORY_DEVICE_ALLOC_SIZE 64
-
-typedef struct _mbfl_memory_device {
- unsigned char *buffer;
- int length;
- int pos;
- int allocsz;
-} mbfl_memory_device;
-
-typedef struct _mbfl_wchar_device {
- unsigned int *buffer;
- int length;
- int pos;
- int allocsz;
-} mbfl_wchar_device;
-
-MBFLAPI extern void mbfl_memory_device_init(mbfl_memory_device *device, int initsz, int allocsz);
-MBFLAPI extern void mbfl_memory_device_realloc(mbfl_memory_device *device, int initsz, int allocsz);
-MBFLAPI extern void mbfl_memory_device_clear(mbfl_memory_device *device);
-MBFLAPI extern void mbfl_memory_device_reset(mbfl_memory_device *device);
-MBFLAPI extern mbfl_string * mbfl_memory_device_result(mbfl_memory_device *device, mbfl_string *result);
-MBFLAPI extern void mbfl_memory_device_unput(mbfl_memory_device *device);
-MBFLAPI extern int mbfl_memory_device_output(int c, void *data);
-MBFLAPI extern int mbfl_memory_device_output2(int c, void *data);
-MBFLAPI extern int mbfl_memory_device_output4(int c, void *data);
-MBFLAPI extern int mbfl_memory_device_strcat(mbfl_memory_device *device, const char *psrc);
-MBFLAPI extern int mbfl_memory_device_strncat(mbfl_memory_device *device, const char *psrc, int len);
-MBFLAPI extern int mbfl_memory_device_devcat(mbfl_memory_device *dest, mbfl_memory_device *src);
-
-MBFLAPI extern void mbfl_wchar_device_init(mbfl_wchar_device *device);
-MBFLAPI extern int mbfl_wchar_device_output(int c, void *data);
-MBFLAPI extern void mbfl_wchar_device_clear(mbfl_wchar_device *device);
-
-
-
-#endif /* MBFL_MEMORY_DEVICE_H */
-
diff --git a/ext/mbstring/libmbfl/mbfl/mbfl_string.c b/ext/mbstring/libmbfl/mbfl/mbfl_string.c
deleted file mode 100644
index e0351a437b..0000000000
--- a/ext/mbstring/libmbfl/mbfl/mbfl_string.c
+++ /dev/null
@@ -1,79 +0,0 @@
-/*
- * "streamable kanji code filter and converter"
- * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved.
- *
- * LICENSE NOTICES
- *
- * This file is part of "streamable kanji code filter and converter",
- * which is distributed under the terms of GNU Lesser General Public
- * License (version 2) as published by the Free Software Foundation.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with "streamable kanji code filter and converter";
- * if not, write to the Free Software Foundation, Inc., 59 Temple Place,
- * Suite 330, Boston, MA 02111-1307 USA
- *
- * The author of this file:
- *
- */
-/*
- * The source code included in this files was separated from mbfilter.c
- * by Moriyoshi Koizumi <moriyoshi@php.net> on 20 Dec 2002. The file
- * mbfilter.c is included in this package .
- *
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#ifdef HAVE_STDDEF_H
-#include <stddef.h>
-#endif
-
-#include "mbfl_allocators.h"
-#include "mbfl_string.h"
-
-/*
- * string object
- */
-void
-mbfl_string_init(mbfl_string *string)
-{
- if (string) {
- string->no_language = mbfl_no_language_uni;
- string->no_encoding = mbfl_no_encoding_pass;
- string->val = (unsigned char*)NULL;
- string->len = 0;
- }
-}
-
-void
-mbfl_string_init_set(mbfl_string *string, mbfl_language_id no_language, mbfl_encoding_id no_encoding)
-{
- if (string) {
- string->no_language = no_language;
- string->no_encoding = no_encoding;
- string->val = (unsigned char*)NULL;
- string->len = 0;
- }
-}
-
-void
-mbfl_string_clear(mbfl_string *string)
-{
- if (string) {
- if (string->val != (unsigned char*)NULL) {
- mbfl_free(string->val);
- }
- string->val = (unsigned char*)NULL;
- string->len = 0;
- }
-}
-
-
diff --git a/ext/mbstring/libmbfl/mbfl/mbfl_string.h b/ext/mbstring/libmbfl/mbfl/mbfl_string.h
deleted file mode 100644
index d1121319a3..0000000000
--- a/ext/mbstring/libmbfl/mbfl/mbfl_string.h
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- * "streamable kanji code filter and converter"
- * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved.
- *
- * LICENSE NOTICES
- *
- * This file is part of "streamable kanji code filter and converter",
- * which is distributed under the terms of GNU Lesser General Public
- * License (version 2) as published by the Free Software Foundation.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with "streamable kanji code filter and converter";
- * if not, write to the Free Software Foundation, Inc., 59 Temple Place,
- * Suite 330, Boston, MA 02111-1307 USA
- *
- * The author of this file:
- *
- */
-/*
- * The source code included in this files was separated from mbfilter.h
- * by Moriyoshi Koizumi <moriyoshi@php.net> on 20 Dec 2002. The file
- * mbfilter.h is included in this package .
- *
- */
-
-#ifndef MBFL_STRING_H
-#define MBFL_STRING_H
-
-#include "mbfl_defs.h"
-#include "mbfl_encoding.h"
-#include "mbfl_language.h"
-
-/*
- * string object
- */
-typedef struct _mbfl_string {
- enum mbfl_no_language no_language;
- enum mbfl_no_encoding no_encoding;
- unsigned char *val;
- unsigned int len;
-} mbfl_string;
-
-MBFLAPI extern void mbfl_string_init(mbfl_string *string);
-MBFLAPI extern void mbfl_string_init_set(mbfl_string *string, mbfl_language_id no_language, mbfl_encoding_id no_encoding);
-MBFLAPI extern void mbfl_string_clear(mbfl_string *string);
-
-#ifndef NULL
-#define NULL 0
-#endif
-
-#endif /* MBFL_STRING_H */
diff --git a/ext/mbstring/libmbfl/mksbcc32.bat b/ext/mbstring/libmbfl/mksbcc32.bat
deleted file mode 100644
index cdc3dd6ca3..0000000000
--- a/ext/mbstring/libmbfl/mksbcc32.bat
+++ /dev/null
@@ -1,5 +0,0 @@
-@echo off
-cd %2
-%1 -f Makefile.bcc32 %3
-cd ..
-exit
diff --git a/ext/mbstring/libmbfl/nls/Makefile.am b/ext/mbstring/libmbfl/nls/Makefile.am
deleted file mode 100644
index ab2ea9d3cc..0000000000
--- a/ext/mbstring/libmbfl/nls/Makefile.am
+++ /dev/null
@@ -1,5 +0,0 @@
-EXTRA_DIST=Makefile.bcc32
-noinst_LTLIBRARIES=libmbfl_nls.la
-INCLUDES=-I../mbfl
-libmbfl_nls_la_LDFLAGS=-version-info $(SHLIB_VERSION)
-libmbfl_nls_la_SOURCES=nls_ja.c nls_de.c nls_en.c nls_kr.c nls_ru.c nls_zh.c nls_uni.c nls_neutral.c nls_ja.h nls_de.h nls_en.h nls_kr.h nls_ru.h nls_zh.h nls_uni.h nls_neutral.h
diff --git a/ext/mbstring/libmbfl/nls/Makefile.bcc32 b/ext/mbstring/libmbfl/nls/Makefile.bcc32
deleted file mode 100644
index 9dc641a452..0000000000
--- a/ext/mbstring/libmbfl/nls/Makefile.bcc32
+++ /dev/null
@@ -1,8 +0,0 @@
-!include ..\rules.mak.bcc32
-INCLUDES=$(INCLUDES) -I..\mbfl
-OBJS=nls_ja.obj nls_de.obj nls_en.obj nls_kr.obj nls_ru.obj nls_zh.obj nls_uni.obj nls_neutral.obj
-
-all: $(OBJS)
-
-clean:
- @for %i in ($(OBJS)) do @if exist %i del %i
diff --git a/ext/mbstring/libmbfl/nls/nls_de.c b/ext/mbstring/libmbfl/nls/nls_de.c
deleted file mode 100644
index b559e2dee3..0000000000
--- a/ext/mbstring/libmbfl/nls/nls_de.c
+++ /dev/null
@@ -1,23 +0,0 @@
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#ifdef HAVE_STDDEF_H
-#include <stddef.h>
-#endif
-
-#include "mbfilter.h"
-#include "nls_de.h"
-
-static const char *mbfl_language_german_aliases[] = {"Deutsch", NULL};
-
-const mbfl_language mbfl_language_german = {
- mbfl_no_language_german,
- "German",
- "de",
- (const char *(*)[])&mbfl_language_german_aliases,
- mbfl_no_encoding_8859_15,
- mbfl_no_encoding_qprint,
- mbfl_no_encoding_8bit
-};
-
diff --git a/ext/mbstring/libmbfl/nls/nls_de.h b/ext/mbstring/libmbfl/nls/nls_de.h
deleted file mode 100644
index a6c289bfad..0000000000
--- a/ext/mbstring/libmbfl/nls/nls_de.h
+++ /dev/null
@@ -1,8 +0,0 @@
-#ifndef MBFL_NLS_DE_H
-#define MBFL_NLS_DE_H
-
-#include "mbfilter.h"
-
-extern const mbfl_language mbfl_language_german;
-
-#endif /* MBFL_NLS_DE_H */
diff --git a/ext/mbstring/libmbfl/nls/nls_en.c b/ext/mbstring/libmbfl/nls/nls_en.c
deleted file mode 100644
index 0700e4f2c4..0000000000
--- a/ext/mbstring/libmbfl/nls/nls_en.c
+++ /dev/null
@@ -1,21 +0,0 @@
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#ifdef HAVE_STDDEF_H
-#include <stddef.h>
-#endif
-
-#include "mbfilter.h"
-#include "nls_en.h"
-
-const mbfl_language mbfl_language_english = {
- mbfl_no_language_english,
- "English",
- "en",
- NULL,
- mbfl_no_encoding_8859_1,
- mbfl_no_encoding_qprint,
- mbfl_no_encoding_8bit
-};
-
diff --git a/ext/mbstring/libmbfl/nls/nls_en.h b/ext/mbstring/libmbfl/nls/nls_en.h
deleted file mode 100644
index aa9297d5c2..0000000000
--- a/ext/mbstring/libmbfl/nls/nls_en.h
+++ /dev/null
@@ -1,8 +0,0 @@
-#ifndef MBFL_NLS_EN_H
-#define MBFL_NLS_EN_H
-
-#include "mbfilter.h"
-
-extern const mbfl_language mbfl_language_english;
-
-#endif /* MBFL_NLS_EN_H */
diff --git a/ext/mbstring/libmbfl/nls/nls_ja.c b/ext/mbstring/libmbfl/nls/nls_ja.c
deleted file mode 100644
index d5541fa73a..0000000000
--- a/ext/mbstring/libmbfl/nls/nls_ja.c
+++ /dev/null
@@ -1,20 +0,0 @@
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#ifdef HAVE_STDDEF_H
-#include <stddef.h>
-#endif
-
-#include "mbfilter.h"
-#include "nls_ja.h"
-
-const mbfl_language mbfl_language_japanese = {
- mbfl_no_language_japanese,
- "Japanese",
- "ja",
- NULL,
- mbfl_no_encoding_2022jp,
- mbfl_no_encoding_base64,
- mbfl_no_encoding_7bit
-};
diff --git a/ext/mbstring/libmbfl/nls/nls_ja.h b/ext/mbstring/libmbfl/nls/nls_ja.h
deleted file mode 100644
index bf1c9e909c..0000000000
--- a/ext/mbstring/libmbfl/nls/nls_ja.h
+++ /dev/null
@@ -1,8 +0,0 @@
-#ifndef MBFL_NLS_JA_H
-#define MBFL_NLS_JA_H
-
-#include "mbfilter.h"
-
-extern const mbfl_language mbfl_language_japanese;
-
-#endif /* MBFL_NLS_JA_H */
diff --git a/ext/mbstring/libmbfl/nls/nls_kr.c b/ext/mbstring/libmbfl/nls/nls_kr.c
deleted file mode 100644
index afff43af48..0000000000
--- a/ext/mbstring/libmbfl/nls/nls_kr.c
+++ /dev/null
@@ -1,21 +0,0 @@
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#ifdef HAVE_STDDEF_H
-#include <stddef.h>
-#endif
-
-#include "mbfilter.h"
-#include "nls_kr.h"
-
-const mbfl_language mbfl_language_korean = {
- mbfl_no_language_korean,
- "Korean",
- "ko",
- NULL,
- mbfl_no_encoding_2022kr,
- mbfl_no_encoding_base64,
- mbfl_no_encoding_7bit
-};
-
diff --git a/ext/mbstring/libmbfl/nls/nls_kr.h b/ext/mbstring/libmbfl/nls/nls_kr.h
deleted file mode 100644
index 1aeb357d85..0000000000
--- a/ext/mbstring/libmbfl/nls/nls_kr.h
+++ /dev/null
@@ -1,8 +0,0 @@
-#ifndef MBFL_NLS_KR_H
-#define MBFL_NLS_KR_H
-
-#include "mbfilter.h"
-
-extern const mbfl_language mbfl_language_korean;
-
-#endif /* MBFL_NLS_KR_H */
diff --git a/ext/mbstring/libmbfl/nls/nls_neutral.c b/ext/mbstring/libmbfl/nls/nls_neutral.c
deleted file mode 100644
index 87a6a194c3..0000000000
--- a/ext/mbstring/libmbfl/nls/nls_neutral.c
+++ /dev/null
@@ -1,21 +0,0 @@
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#ifdef HAVE_STDDEF_H
-#include <stddef.h>
-#endif
-
-#include "mbfilter.h"
-#include "nls_neutral.h"
-
-const mbfl_language mbfl_language_neutral = {
- mbfl_no_language_neutral,
- "neutral",
- "neutral",
- NULL,
- mbfl_no_encoding_utf8,
- mbfl_no_encoding_base64,
- mbfl_no_encoding_base64
-};
-
diff --git a/ext/mbstring/libmbfl/nls/nls_neutral.h b/ext/mbstring/libmbfl/nls/nls_neutral.h
deleted file mode 100644
index 50c6499a6d..0000000000
--- a/ext/mbstring/libmbfl/nls/nls_neutral.h
+++ /dev/null
@@ -1,8 +0,0 @@
-#ifndef MBFL_NLS_NEUTRAL_H
-#define MBFL_NLS_NEUTRAL_H
-
-#include "mbfilter.h"
-
-extern const mbfl_language mbfl_language_neutral;
-
-#endif /* MBFL_NLS_NEUTRAL_H */
diff --git a/ext/mbstring/libmbfl/nls/nls_ru.c b/ext/mbstring/libmbfl/nls/nls_ru.c
deleted file mode 100644
index 7e4cf9c3b0..0000000000
--- a/ext/mbstring/libmbfl/nls/nls_ru.c
+++ /dev/null
@@ -1,20 +0,0 @@
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#ifdef HAVE_STDDEF_H
-#include <stddef.h>
-#endif
-
-#include "mbfilter.h"
-#include "nls_ru.h"
-
-const mbfl_language mbfl_language_russian = {
- mbfl_no_language_russian,
- "Russian",
- "ru",
- NULL,
- mbfl_no_encoding_koi8r,
- mbfl_no_encoding_qprint,
- mbfl_no_encoding_8bit
-};
diff --git a/ext/mbstring/libmbfl/nls/nls_ru.h b/ext/mbstring/libmbfl/nls/nls_ru.h
deleted file mode 100644
index ba21b9a3d4..0000000000
--- a/ext/mbstring/libmbfl/nls/nls_ru.h
+++ /dev/null
@@ -1,9 +0,0 @@
-#ifndef MBFL_NLS_RU_H
-#define MBFL_NLS_RU_H
-
-#include "mbfilter.h"
-#include "nls_ru.h"
-
-extern const mbfl_language mbfl_language_russian;
-
-#endif /* MBFL_NLS_RU_H */
diff --git a/ext/mbstring/libmbfl/nls/nls_uni.c b/ext/mbstring/libmbfl/nls/nls_uni.c
deleted file mode 100644
index 6a0100105b..0000000000
--- a/ext/mbstring/libmbfl/nls/nls_uni.c
+++ /dev/null
@@ -1,23 +0,0 @@
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#ifdef HAVE_STDDEF_H
-#include <stddef.h>
-#endif
-
-#include "mbfilter.h"
-#include "nls_uni.h"
-
-static const char *mbfl_language_uni_aliases[] = {"universal", NULL};
-
-const mbfl_language mbfl_language_uni = {
- mbfl_no_language_uni,
- "uni",
- "uni",
- (const char *(*)[])&mbfl_language_uni_aliases,
- mbfl_no_encoding_utf8,
- mbfl_no_encoding_base64,
- mbfl_no_encoding_base64
-};
-
diff --git a/ext/mbstring/libmbfl/nls/nls_uni.h b/ext/mbstring/libmbfl/nls/nls_uni.h
deleted file mode 100644
index 1e3f94dc8e..0000000000
--- a/ext/mbstring/libmbfl/nls/nls_uni.h
+++ /dev/null
@@ -1,8 +0,0 @@
-#ifndef MBFL_NLS_UNI_H
-#define MBFL_NLS_UNI_H
-
-#include "mbfilter.h"
-
-extern const mbfl_language mbfl_language_uni;
-
-#endif /* MBFL_NLS_UNI_H */
diff --git a/ext/mbstring/libmbfl/nls/nls_zh.c b/ext/mbstring/libmbfl/nls/nls_zh.c
deleted file mode 100644
index d9a49931ea..0000000000
--- a/ext/mbstring/libmbfl/nls/nls_zh.c
+++ /dev/null
@@ -1,31 +0,0 @@
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#ifdef HAVE_STDDEF_H
-#include <stddef.h>
-#endif
-
-#include "mbfilter.h"
-#include "nls_zh.h"
-
-const mbfl_language mbfl_language_simplified_chinese = {
- mbfl_no_language_simplified_chinese,
- "Simplified Chinese",
- "zh-cn",
- NULL,
- mbfl_no_encoding_hz,
- mbfl_no_encoding_base64,
- mbfl_no_encoding_7bit
-};
-
-const mbfl_language mbfl_language_traditional_chinese = {
- mbfl_no_language_traditional_chinese,
- "Traditional Chinese",
- "zh-tw",
- NULL,
- mbfl_no_encoding_big5,
- mbfl_no_encoding_base64,
- mbfl_no_encoding_8bit
-};
-
diff --git a/ext/mbstring/libmbfl/nls/nls_zh.h b/ext/mbstring/libmbfl/nls/nls_zh.h
deleted file mode 100644
index 218160295f..0000000000
--- a/ext/mbstring/libmbfl/nls/nls_zh.h
+++ /dev/null
@@ -1,9 +0,0 @@
-#ifndef MBFL_NLS_ZH_H
-#define MBFL_NLS_ZH_H
-
-#include "mbfilter.h"
-
-extern const mbfl_language mbfl_language_simplified_chinese;
-extern const mbfl_language mbfl_language_traditional_chinese;
-
-#endif /* MBFL_NLS_ZH_H */
diff --git a/ext/mbstring/libmbfl/rules.mak.bcc32 b/ext/mbstring/libmbfl/rules.mak.bcc32
deleted file mode 100644
index 50fafa96b1..0000000000
--- a/ext/mbstring/libmbfl/rules.mak.bcc32
+++ /dev/null
@@ -1,7 +0,0 @@
-.suffixes .c
-CFLAGS=-DHAVE_CONFIG_H -DMBFL_DLL_EXPORT -DWIN32
-INCLUDES=-I. -I..
-LIBS=import32.lib cw32mt.lib c0d32.obj
-LDFLAGS=-c -Tpd -Gn
-.c.obj:
- bcc32 $(CFLAGS) $(INCLUDES) -c $<
diff --git a/ext/mbstring/libmbfl/tests/sample.c b/ext/mbstring/libmbfl/tests/sample.c
deleted file mode 100644
index 54f809378a..0000000000
--- a/ext/mbstring/libmbfl/tests/sample.c
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- this is a small sample script to use libmbfl.
- Rui Hirokawa <hirokawa@php.net>
-
- this file is encoded in EUC-JP.
- */
-
-#include <stdio.h>
-#include "../mbfl/mbfilter.h"
-
-int main()
-{
- enum mbfl_no_encoding from_encoding, to_encoding;
- enum mbfl_no_language no_language;
- mbfl_buffer_converter *convd = NULL;
- mbfl_string string, result, *ret;
- mbfl_language lang;
- unsigned char input[] = "ÆüËܸìʸ»úÎó"; /* EUC-JP kanji string */
-
- no_language = mbfl_name2no_language("Japanese");
- from_encoding = mbfl_name2no_encoding("EUC-JP");
- to_encoding = mbfl_name2no_encoding("SJIS");
-
- mbfl_string_init(&string);
- mbfl_string_init(&result);
-
- string.no_encoding = from_encoding;
- string.no_language = no_language;
- string.val = (unsigned char *)input;
- string.len = strlen(input);
-
- convd = mbfl_buffer_converter_new(from_encoding, to_encoding, 0);
- ret = mbfl_buffer_converter_feed_result(convd, &string, &result);
- mbfl_buffer_converter_delete(convd);
-
- puts(ret->val);
- return 1;
-}
diff --git a/ext/mbstring/mb_gpc.c b/ext/mbstring/mb_gpc.c
deleted file mode 100644
index a58c63ac56..0000000000
--- a/ext/mbstring/mb_gpc.c
+++ /dev/null
@@ -1,406 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Rui Hirokawa <hirokawa@php.net> |
- | Moriyoshi Koizumi <moriyoshi@php.net> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-/* {{{ includes */
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "php.h"
-#include "php_ini.h"
-#include "php_variables.h"
-#include "mbstring.h"
-#include "ext/standard/php_string.h"
-#include "ext/standard/php_mail.h"
-#include "ext/standard/url.h"
-#include "main/php_output.h"
-#include "ext/standard/info.h"
-
-#include "php_variables.h"
-#include "php_globals.h"
-#include "rfc1867.h"
-#include "php_content_types.h"
-#include "SAPI.h"
-#include "TSRM.h"
-
-#include "mb_gpc.h"
-/* }}} */
-
-#if HAVE_MBSTRING
-
-ZEND_EXTERN_MODULE_GLOBALS(mbstring)
-
-/* {{{ static sapi_post_entry mbstr_post_entries[] */
-static sapi_post_entry mbstr_post_entries[] = {
- { DEFAULT_POST_CONTENT_TYPE, sizeof(DEFAULT_POST_CONTENT_TYPE)-1, sapi_read_standard_form_data, php_mb_post_handler },
- { MULTIPART_CONTENT_TYPE, sizeof(MULTIPART_CONTENT_TYPE)-1, NULL, rfc1867_post_handler },
- { NULL, 0, NULL, NULL }
-};
-/* }}} */
-
-/* {{{ static sapi_post_entry php_post_entries[] */
-static sapi_post_entry php_post_entries[] = {
- { DEFAULT_POST_CONTENT_TYPE, sizeof(DEFAULT_POST_CONTENT_TYPE)-1, sapi_read_standard_form_data, php_std_post_handler },
- { MULTIPART_CONTENT_TYPE, sizeof(MULTIPART_CONTENT_TYPE)-1, NULL, rfc1867_post_handler },
- { NULL, 0, NULL, NULL }
-};
-/* }}} */
-
-/* {{{ int _php_mb_enable_encoding_translation(int flag) */
-int _php_mb_enable_encoding_translation(int flag)
-{
- if (flag) {
- sapi_unregister_post_entry(php_post_entries);
- sapi_register_post_entries(mbstr_post_entries);
- sapi_register_treat_data(mbstr_treat_data);
- } else {
- sapi_unregister_post_entry(mbstr_post_entries);
- sapi_register_post_entries(php_post_entries);
- sapi_register_treat_data(php_default_treat_data);
- }
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ MBSTRING_API SAPI_TREAT_DATA_FUNC(mbstr_treat_data)
- * http input processing */
-MBSTRING_API SAPI_TREAT_DATA_FUNC(mbstr_treat_data)
-{
- char *res = NULL, *separator=NULL;
- const char *c_var;
- pval *array_ptr;
- int free_buffer=0;
-
- switch (arg) {
- case PARSE_POST:
- case PARSE_GET:
- case PARSE_COOKIE:
- ALLOC_ZVAL(array_ptr);
- array_init(array_ptr);
- INIT_PZVAL(array_ptr);
- switch (arg) {
- case PARSE_POST:
- PG(http_globals)[TRACK_VARS_POST] = array_ptr;
- break;
- case PARSE_GET:
- PG(http_globals)[TRACK_VARS_GET] = array_ptr;
- break;
- case PARSE_COOKIE:
- PG(http_globals)[TRACK_VARS_COOKIE] = array_ptr;
- break;
- }
- break;
- default:
- array_ptr=destArray;
- break;
- }
-
- if (arg==PARSE_POST) {
- sapi_handle_post(array_ptr TSRMLS_CC);
- return;
- }
-
- if (arg == PARSE_GET) { /* GET data */
- c_var = SG(request_info).query_string;
- if (c_var && *c_var) {
- res = (char *) estrdup(c_var);
- free_buffer = 1;
- } else {
- free_buffer = 0;
- }
- } else if (arg == PARSE_COOKIE) { /* Cookie data */
- c_var = SG(request_info).cookie_data;
- if (c_var && *c_var) {
- res = (char *) estrdup(c_var);
- free_buffer = 1;
- } else {
- free_buffer = 0;
- }
- } else if (arg == PARSE_STRING) { /* String data */
- res = str;
- free_buffer = 1;
- }
-
- if (!res) {
- return;
- }
-
- switch (arg) {
- case PARSE_POST:
- case PARSE_GET:
- case PARSE_STRING:
- separator = (char *) estrdup(PG(arg_separator).input);
- break;
- case PARSE_COOKIE:
- separator = ";\0";
- break;
- }
-
- switch(arg) {
- case PARSE_POST:
- MBSTRG(http_input_identify_post) = mbfl_no_encoding_invalid;
- break;
- case PARSE_GET:
- MBSTRG(http_input_identify_get) = mbfl_no_encoding_invalid;
- break;
- case PARSE_COOKIE:
- MBSTRG(http_input_identify_cookie) = mbfl_no_encoding_invalid;
- break;
- case PARSE_STRING:
- MBSTRG(http_input_identify_string) = mbfl_no_encoding_invalid;
- break;
- }
-
- _php_mb_encoding_handler_ex(arg, array_ptr, res, separator, 0, 0 TSRMLS_CC);
-
- if (MBSTRG(http_input_identify) != mbfl_no_encoding_invalid) {
- switch(arg){
- case PARSE_POST:
- MBSTRG(http_input_identify_post) = MBSTRG(http_input_identify);
- break;
- case PARSE_GET:
- MBSTRG(http_input_identify_get) = MBSTRG(http_input_identify);
- break;
- case PARSE_COOKIE:
- MBSTRG(http_input_identify_cookie) = MBSTRG(http_input_identify);
- break;
- case PARSE_STRING:
- MBSTRG(http_input_identify_string) = MBSTRG(http_input_identify);
- break;
- }
- }
-
- if (arg != PARSE_COOKIE) {
- efree(separator);
- }
-
- if (free_buffer) {
- efree(res);
- }
-}
-/* }}} */
-
-/* {{{ int _php_mb_encoding_handler_ex() */
-int _php_mb_encoding_handler_ex(int data_type, zval *arg, char *res, char *separator, int force_register_globals, int report_errors TSRMLS_DC)
-{
- char *var, *val, *s1, *s2;
- char *strtok_buf = NULL, **val_list = NULL;
- zval *array_ptr = (zval *) arg;
- int n, num, *len_list = NULL, *elist, elistsz;
- unsigned int val_len, new_val_len;
- enum mbfl_no_encoding from_encoding, to_encoding;
- mbfl_string string, resvar, resval;
- mbfl_encoding_detector *identd = NULL;
- mbfl_buffer_converter *convd = NULL;
- int prev_rg_state = 0;
- int retval = 0;
-
- mbfl_string_init_set(&string, MBSTRG(current_language), MBSTRG(current_internal_encoding));
- mbfl_string_init_set(&resvar, MBSTRG(current_language), MBSTRG(current_internal_encoding));
- mbfl_string_init_set(&resval, MBSTRG(current_language), MBSTRG(current_internal_encoding));
-
- /* register_globals stuff
- * XXX: this feature is going to be deprecated? */
-
- if (force_register_globals) {
- prev_rg_state = PG(register_globals);
- PG(register_globals) = 1;
- }
-
- if (!res || *res == '\0') {
- goto out;
- }
-
- /* count the variables(separators) contained in the "res".
- * separator may contain multiple separator chars.
- * separaror chars are set in php.ini (arg_separator.input)
- */
- num = 1;
- for (s1=res; *s1 != '\0'; s1++) {
- for (s2=separator; *s2 != '\0'; s2++) {
- if (*s1 == *s2) {
- num++;
- }
- }
- }
- num *= 2; /* need space for variable name and value */
-
- val_list = (char **)ecalloc(num, sizeof(char *));
- len_list = (int *)ecalloc(num, sizeof(int));
-
- /* split and decode the query */
- n = 0;
- strtok_buf = NULL;
- var = php_strtok_r(res, separator, &strtok_buf);
- while (var) {
- val = strchr(var, '=');
- if (val) { /* have a value */
- len_list[n] = php_url_decode(var, val-var);
- val_list[n] = var;
- n++;
-
- *val++ = '\0';
- val_list[n] = val;
- len_list[n] = php_url_decode(val, strlen(val));
- } else {
- len_list[n] = php_url_decode(var, strlen(var));
- val_list[n] = var;
- n++;
-
- val_list[n] = "";
- len_list[n] = 0;
- }
- n++;
- var = php_strtok_r(NULL, separator, &strtok_buf);
- }
- num = n; /* make sure to process initilized vars only */
-
- /* initialize converter */
- to_encoding = MBSTRG(current_internal_encoding);
- elist = MBSTRG(http_input_list);
- elistsz = MBSTRG(http_input_list_size);
- if (elistsz <= 0) {
- from_encoding = mbfl_no_encoding_pass;
- } else if (elistsz == 1) {
- from_encoding = *elist;
- } else {
- /* auto detect */
- from_encoding = mbfl_no_encoding_invalid;
- identd = mbfl_encoding_detector_new(elist, elistsz);
- if (identd) {
- n = 0;
- while (n < num) {
- string.val = (unsigned char *)val_list[n];
- string.len = len_list[n];
- if (mbfl_encoding_detector_feed(identd, &string)) {
- break;
- }
- n++;
- }
- from_encoding = mbfl_encoding_detector_judge(identd);
- mbfl_encoding_detector_delete(identd);
- }
- if (from_encoding == mbfl_no_encoding_invalid) {
- if (report_errors) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to detect encoding");
- }
- from_encoding = mbfl_no_encoding_pass;
- }
- }
-
- convd = NULL;
- if (from_encoding != mbfl_no_encoding_pass) {
- convd = mbfl_buffer_converter_new(from_encoding, to_encoding, 0);
- if (convd != NULL) {
- mbfl_buffer_converter_illegal_mode(convd, MBSTRG(current_filter_illegal_mode));
- mbfl_buffer_converter_illegal_substchar(convd, MBSTRG(current_filter_illegal_substchar));
- } else {
- if (report_errors) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to create converter");
- }
- goto out;
- }
- }
-
- /* convert encoding */
- string.no_encoding = from_encoding;
-
- n = 0;
- while (n < num) {
- string.val = (unsigned char *)val_list[n];
- string.len = len_list[n];
- if (convd != NULL && mbfl_buffer_converter_feed_result(convd, &string, &resvar) != NULL) {
- var = (char *)resvar.val;
- } else {
- var = val_list[n];
- }
- n++;
- string.val = val_list[n];
- string.len = len_list[n];
- if (convd != NULL && mbfl_buffer_converter_feed_result(convd, &string, &resval) != NULL) {
- val = resval.val;
- val_len = resval.len;
- } else {
- val = val_list[n];
- val_len = len_list[n];
- }
- n++;
- /* we need val to be emalloc()ed */
- val = estrndup(val, val_len);
- if (sapi_module.input_filter(data_type, var, &val, val_len, &new_val_len TSRMLS_CC)) {
- /* add variable to symbol table */
- php_register_variable_safe(var, val, new_val_len, array_ptr TSRMLS_CC);
- }
- efree(val);
-
- if (convd != NULL){
- mbfl_string_clear(&resvar);
- mbfl_string_clear(&resval);
- }
- }
-
- MBSTRG(http_input_identify) = from_encoding;
- retval = 1;
-
-out:
- /* register_global stuff */
- if (force_register_globals) {
- PG(register_globals) = prev_rg_state;
- }
-
- if (convd != NULL) {
- mbfl_buffer_converter_delete(convd);
- }
- if (val_list != NULL) {
- efree((void *)val_list);
- }
- if (len_list != NULL) {
- efree((void *)len_list);
- }
-
- return retval;
-}
-/* }}} */
-
-/* {{{ SAPI_POST_HANDLER_FUNC(php_mb_post_handler) */
-SAPI_POST_HANDLER_FUNC(php_mb_post_handler)
-{
- MBSTRG(http_input_identify_post) = mbfl_no_encoding_invalid;
-
- _php_mb_encoding_handler_ex(PARSE_POST, arg, SG(request_info).post_data, "&", 0, 0 TSRMLS_CC);
-
- if (MBSTRG(http_input_identify) != mbfl_no_encoding_invalid) {
- MBSTRG(http_input_identify_post) = MBSTRG(http_input_identify);
- }
-}
-/* }}} */
-
-#endif /* HAVE_MBSTRING */
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- * vim600: fdm=marker
- * vim: noet sw=4 ts=4
- */
-
diff --git a/ext/mbstring/mb_gpc.h b/ext/mbstring/mb_gpc.h
deleted file mode 100644
index 9eed896a1c..0000000000
--- a/ext/mbstring/mb_gpc.h
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 2001 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: Rui Hirokawa <hirokawa@php.net> |
- | Moriyoshi Koizumi <moriyoshi@php.net> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-/* {{{ includes */
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "php.h"
-/* }}} */
-
-#if HAVE_MBSTRING
-/* {{{ prototypes */
-SAPI_POST_HANDLER_FUNC(php_mb_post_handler);
-MBSTRING_API SAPI_TREAT_DATA_FUNC(mbstr_treat_data);
-
-int _php_mb_enable_encoding_translation(int flag);
-int _php_mb_encoding_handler_ex(int data_type, zval *arg, char *res, char *separator, int force_register_globals, int report_errors TSRMLS_DC);
-/* }}} */
-#endif /* HAVE_MBSTRING */
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- * vim600: fdm=marker
- * vim: noet sw=4 ts=4
- */
diff --git a/ext/mbstring/mbstring.c b/ext/mbstring/mbstring.c
deleted file mode 100644
index 310f7b6112..0000000000
--- a/ext/mbstring/mbstring.c
+++ /dev/null
@@ -1,3668 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Tsukada Takuya <tsukada@fminn.nagano.nagano.jp> |
- | Rui Hirokawa <hirokawa@php.net> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-/*
- * PHP 4 Multibyte String module "mbstring"
- *
- * History:
- * 2000.5.19 Release php-4.0RC2_jstring-1.0
- * 2001.4.1 Release php4_jstring-1.0.91
- * 2001.4.30 Release php4_jstring-1.1 (contribute to The PHP Group)
- * 2001.5.1 Renamed from jstring to mbstring (hirokawa@php.net)
- */
-
-/*
- * PHP3 Internationalization support program.
- *
- * Copyright (c) 1999,2000 by the PHP3 internationalization team.
- * All rights reserved.
- *
- * See README_PHP3-i18n-ja for more detail.
- *
- * Authors:
- * Hironori Sato <satoh@jpnnet.com>
- * Shigeru Kanemoto <sgk@happysize.co.jp>
- * Tsukada Takuya <tsukada@fminn.nagano.nagano.jp>
- * Rui Hirokawa <rui_hirokawa@ybb.ne.jp>
- */
-
-/* {{{ includes */
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "php.h"
-#include "php_ini.h"
-#include "php_variables.h"
-#include "mbstring.h"
-#include "ext/standard/php_string.h"
-#include "ext/standard/php_mail.h"
-#include "ext/standard/php_smart_str.h"
-#include "ext/standard/url.h"
-#include "main/php_output.h"
-#include "ext/standard/info.h"
-
-#include "libmbfl/mbfl/mbfl_allocators.h"
-
-#include "php_variables.h"
-#include "php_globals.h"
-#include "rfc1867.h"
-#include "php_content_types.h"
-#include "SAPI.h"
-#include "php_unicode.h"
-#include "TSRM.h"
-
-#include "mb_gpc.h"
-
-#ifdef ZEND_MULTIBYTE
-#include "zend_multibyte.h"
-#endif /* ZEND_MULTIBYTE */
-
-#if HAVE_MBSTRING
-/* }}} */
-
-/* {{{ prototypes */
-static void _php_mb_globals_ctor(zend_mbstring_globals *pglobals TSRMLS_DC);
-static void _php_mb_globals_dtor(zend_mbstring_globals *pglobals TSRMLS_DC);
-/* }}} */
-
-/* {{{ php_mb_default_identify_list */
-typedef struct _php_mb_nls_ident_list {
- enum mbfl_no_language lang;
- enum mbfl_no_encoding* list;
- int list_size;
-} php_mb_nls_ident_list;
-
-static const enum mbfl_no_encoding php_mb_default_identify_list_ja[] = {
- mbfl_no_encoding_ascii,
- mbfl_no_encoding_jis,
- mbfl_no_encoding_utf8,
- mbfl_no_encoding_euc_jp,
- mbfl_no_encoding_sjis
-};
-
-static const enum mbfl_no_encoding php_mb_default_identify_list_cn[] = {
- mbfl_no_encoding_ascii,
- mbfl_no_encoding_utf8,
- mbfl_no_encoding_euc_cn,
- mbfl_no_encoding_cp936
-};
-
-static const enum mbfl_no_encoding php_mb_default_identify_list_tw_hk[] = {
- mbfl_no_encoding_ascii,
- mbfl_no_encoding_utf8,
- mbfl_no_encoding_euc_tw,
- mbfl_no_encoding_big5
-};
-
-static const enum mbfl_no_encoding php_mb_default_identify_list_kr[] = {
- mbfl_no_encoding_ascii,
- mbfl_no_encoding_utf8,
- mbfl_no_encoding_euc_kr,
- mbfl_no_encoding_uhc
-};
-
-static const enum mbfl_no_encoding php_mb_default_identify_list_ru[] = {
- mbfl_no_encoding_ascii,
- mbfl_no_encoding_utf8,
- mbfl_no_encoding_koi8r,
- mbfl_no_encoding_cp1251,
- mbfl_no_encoding_cp866
-};
-
-static const enum mbfl_no_encoding php_mb_default_identify_list_neut[] = {
- mbfl_no_encoding_ascii,
- mbfl_no_encoding_utf8
-};
-
-
-php_mb_nls_ident_list php_mb_default_identify_list[] = {
- { mbfl_no_language_japanese, php_mb_default_identify_list_ja, sizeof(php_mb_default_identify_list_ja) / sizeof(php_mb_default_identify_list_ja[0]) },
- { mbfl_no_language_korean, php_mb_default_identify_list_kr, sizeof(php_mb_default_identify_list_kr) / sizeof(php_mb_default_identify_list_kr[0]) },
- { mbfl_no_language_traditional_chinese, php_mb_default_identify_list_tw_hk, sizeof(php_mb_default_identify_list_tw_hk) / sizeof(php_mb_default_identify_list_tw_hk[0]) },
- { mbfl_no_language_simplified_chinese, php_mb_default_identify_list_cn, sizeof(php_mb_default_identify_list_cn) / sizeof(php_mb_default_identify_list_cn[0]) },
- { mbfl_no_language_russian, php_mb_default_identify_list_ru, sizeof(php_mb_default_identify_list_ru) / sizeof(php_mb_default_identify_list_ru[0]) },
- { mbfl_no_language_neutral, php_mb_default_identify_list_neut, sizeof(php_mb_default_identify_list_neut) / sizeof(php_mb_default_identify_list_neut[0]) }
-};
-
-/* }}} */
-
-static
- ZEND_BEGIN_ARG_INFO(third_and_rest_force_ref, 1)
- ZEND_ARG_PASS_INFO(0)
- ZEND_ARG_PASS_INFO(0)
- ZEND_END_ARG_INFO();
-
-/* {{{ mb_overload_def mb_ovld[] */
-static const struct mb_overload_def mb_ovld[] = {
- {MB_OVERLOAD_MAIL, "mail", "mb_send_mail", "mb_orig_mail"},
- {MB_OVERLOAD_STRING, "strlen", "mb_strlen", "mb_orig_strlen"},
- {MB_OVERLOAD_STRING, "strpos", "mb_strpos", "mb_orig_strpos"},
- {MB_OVERLOAD_STRING, "strrpos", "mb_strrpos", "mb_orig_strrpos"},
- {MB_OVERLOAD_STRING, "substr", "mb_substr", "mb_orig_substr"},
- {MB_OVERLOAD_STRING, "strtolower", "mb_strtolower", "mb_orig_strtolower"},
- {MB_OVERLOAD_STRING, "strtoupper", "mb_strtoupper", "mb_orig_strtoupper"},
- {MB_OVERLOAD_STRING, "substr_count", "mb_substr_count", "mb_orig_substr_count"},
-#if HAVE_MBREGEX
- {MB_OVERLOAD_REGEX, "ereg", "mb_ereg", "mb_orig_ereg"},
- {MB_OVERLOAD_REGEX, "eregi", "mb_eregi", "mb_orig_eregi"},
- {MB_OVERLOAD_REGEX, "ereg_replace", "mb_ereg_replace", "mb_orig_ereg_replace"},
- {MB_OVERLOAD_REGEX, "eregi_replace", "mb_eregi_replace", "mb_orig_eregi_replace"},
- {MB_OVERLOAD_REGEX, "split", "mb_split", "mb_orig_split"},
-#endif
- {0, NULL, NULL, NULL}
-};
-/* }}} */
-
-/* {{{ function_entry mbstring_functions[] */
-function_entry mbstring_functions[] = {
- PHP_FE(mb_convert_case, NULL)
- PHP_FE(mb_strtoupper, NULL)
- PHP_FE(mb_strtolower, NULL)
- PHP_FE(mb_language, NULL)
- PHP_FE(mb_internal_encoding, NULL)
- PHP_FE(mb_http_input, NULL)
- PHP_FE(mb_http_output, NULL)
- PHP_FE(mb_detect_order, NULL)
- PHP_FE(mb_substitute_character, NULL)
- PHP_FE(mb_parse_str, second_arg_force_ref)
- PHP_FE(mb_output_handler, NULL)
- PHP_FE(mb_preferred_mime_name, NULL)
- PHP_FE(mb_strlen, NULL)
- PHP_FE(mb_strpos, NULL)
- PHP_FE(mb_strrpos, NULL)
- PHP_FE(mb_substr_count, NULL)
- PHP_FE(mb_substr, NULL)
- PHP_FE(mb_strcut, NULL)
- PHP_FE(mb_strwidth, NULL)
- PHP_FE(mb_strimwidth, NULL)
- PHP_FE(mb_convert_encoding, NULL)
- PHP_FE(mb_detect_encoding, NULL)
- PHP_FE(mb_list_encodings, NULL)
- PHP_FE(mb_convert_kana, NULL)
- PHP_FE(mb_encode_mimeheader, NULL)
- PHP_FE(mb_decode_mimeheader, NULL)
- PHP_FE(mb_convert_variables, third_and_rest_force_ref)
- PHP_FE(mb_encode_numericentity, NULL)
- PHP_FE(mb_decode_numericentity, NULL)
- PHP_FE(mb_send_mail, NULL)
- PHP_FE(mb_get_info, NULL)
-#if HAVE_MBREGEX
- PHP_MBREGEX_FUNCTION_ENTRIES
-#endif
- { NULL, NULL, NULL }
-};
-/* }}} */
-
-/* {{{ zend_module_entry mbstring_module_entry */
-zend_module_entry mbstring_module_entry = {
- STANDARD_MODULE_HEADER,
- "mbstring",
- mbstring_functions,
- PHP_MINIT(mbstring),
- PHP_MSHUTDOWN(mbstring),
- PHP_RINIT(mbstring),
- PHP_RSHUTDOWN(mbstring),
- PHP_MINFO(mbstring),
- NO_VERSION_YET,
- STANDARD_MODULE_PROPERTIES
-};
-/* }}} */
-
-ZEND_DECLARE_MODULE_GLOBALS(mbstring)
-
-#ifdef COMPILE_DL_MBSTRING
-ZEND_GET_MODULE(mbstring)
-# ifdef PHP_WIN32
-# include "zend_arg_defs.c"
-# endif
-#endif
-
-/* {{{ allocators */
-static void *_php_mb_allocators_malloc(unsigned int sz)
-{
- return emalloc(sz);
-}
-
-static void *_php_mb_allocators_realloc(void *ptr, unsigned int sz)
-{
- return erealloc(ptr, sz);
-}
-
-static void *_php_mb_allocators_calloc(unsigned int nelems, unsigned int szelem)
-{
- return ecalloc(nelems, szelem);
-}
-
-static void _php_mb_allocators_free(void *ptr)
-{
- efree(ptr);
-}
-
-static void *_php_mb_allocators_pmalloc(unsigned int sz)
-{
- return pemalloc(sz, 1);
-}
-
-static void *_php_mb_allocators_prealloc(void *ptr, unsigned int sz)
-{
- return perealloc(ptr, sz, 1);
-}
-
-static void _php_mb_allocators_pfree(void *ptr)
-{
- pefree(ptr, 1);
-}
-
-static mbfl_allocators _php_mb_allocators = {
- _php_mb_allocators_malloc,
- _php_mb_allocators_realloc,
- _php_mb_allocators_calloc,
- _php_mb_allocators_free,
- _php_mb_allocators_pmalloc,
- _php_mb_allocators_prealloc,
- _php_mb_allocators_pfree
-};
-/* }}} */
-
-/* {{{ static int php_mb_parse_encoding_list()
- * Return 0 if input contains any illegal encoding, otherwise 1.
- * Even if any illegal encoding is detected the result may contain a list
- * of parsed encodings.
- */
-static int
-php_mb_parse_encoding_list(const char *value, int value_length, enum mbfl_no_encoding **return_list, int *return_size, int persistent TSRMLS_DC)
-{
- int n, l, size, bauto, ret = 1;
- char *p, *p1, *p2, *endp, *tmpstr;
- enum mbfl_no_encoding no_encoding;
- enum mbfl_no_encoding *src, *entry, *list;
-
- list = NULL;
- if (value == NULL || value_length <= 0) {
- if (return_list) {
- *return_list = NULL;
- }
- if (return_size) {
- *return_size = 0;
- }
- return 0;
- } else {
- enum mbfl_no_encoding *identify_list;
- int identify_list_size;
-
- identify_list = MBSTRG(default_detect_order_list);
- identify_list_size = MBSTRG(default_detect_order_list_size);
-
- /* copy the value string for work */
- if (value[0]=='"' && value[value_length-1]=='"' && value_length>2) {
- tmpstr = (char *)estrndup(value+1, value_length-2);
- value_length -= 2;
- }
- else
- tmpstr = (char *)estrndup(value, value_length);
- if (tmpstr == NULL) {
- return 0;
- }
- /* count the number of listed encoding names */
- endp = tmpstr + value_length;
- n = 1;
- p1 = tmpstr;
- while ((p2 = php_memnstr(p1, ",", 1, endp)) != NULL) {
- p1 = p2 + 1;
- n++;
- }
- size = n + identify_list_size;
- /* make list */
- list = (enum mbfl_no_encoding *)pecalloc(size, sizeof(int), persistent);
- if (list != NULL) {
- entry = list;
- n = 0;
- bauto = 0;
- p1 = tmpstr;
- do {
- p2 = p = php_memnstr(p1, ",", 1, endp);
- if (p == NULL) {
- p = endp;
- }
- *p = '\0';
- /* trim spaces */
- while (p1 < p && (*p1 == ' ' || *p1 == '\t')) {
- p1++;
- }
- p--;
- while (p > p1 && (*p == ' ' || *p == '\t')) {
- *p = '\0';
- p--;
- }
- /* convert to the encoding number and check encoding */
- if (strcasecmp(p1, "auto") == 0) {
- if (!bauto) {
- bauto = 1;
- l = identify_list_size;
- src = identify_list;
- while (l > 0) {
- *entry++ = *src++;
- l--;
- n++;
- }
- }
- } else {
- no_encoding = mbfl_name2no_encoding(p1);
- if (no_encoding != mbfl_no_encoding_invalid) {
- *entry++ = no_encoding;
- n++;
- } else {
- ret = 0;
- }
- }
- p1 = p2 + 1;
- } while (n < size && p2 != NULL);
- if (n > 0) {
- if (return_list) {
- *return_list = list;
- } else {
- pefree(list, persistent);
- }
- } else {
- pefree(list, persistent);
- if (return_list) {
- *return_list = NULL;
- }
- ret = 0;
- }
- if (return_size) {
- *return_size = n;
- }
- } else {
- if (return_list) {
- *return_list = NULL;
- }
- if (return_size) {
- *return_size = 0;
- }
- ret = 0;
- }
- efree(tmpstr);
- }
-
- return ret;
-}
-/* }}} */
-
-/* {{{ MBSTRING_API php_mb_check_encoding_list */
-MBSTRING_API int php_mb_check_encoding_list(const char *encoding_list TSRMLS_DC) {
- return php_mb_parse_encoding_list(encoding_list, strlen(encoding_list), NULL, NULL, 0 TSRMLS_CC);
-}
-/* }}} */
-
-/* {{{ static int php_mb_parse_encoding_array()
- * Return 0 if input contains any illegal encoding, otherwise 1.
- * Even if any illegal encoding is detected the result may contain a list
- * of parsed encodings.
- */
-static int
-php_mb_parse_encoding_array(zval *array, enum mbfl_no_encoding **return_list, int *return_size, int persistent TSRMLS_DC)
-{
- zval **hash_entry;
- HashTable *target_hash;
- int i, n, l, size, bauto,ret = 1;
- enum mbfl_no_encoding no_encoding;
- enum mbfl_no_encoding *src, *list, *entry;
-
- list = NULL;
- if (Z_TYPE_P(array) == IS_ARRAY) {
- enum mbfl_no_encoding *identify_list;
- int identify_list_size;
-
- identify_list = MBSTRG(default_detect_order_list);
- identify_list_size = MBSTRG(default_detect_order_list_size);
-
- target_hash = Z_ARRVAL_P(array);
- zend_hash_internal_pointer_reset(target_hash);
- i = zend_hash_num_elements(target_hash);
- size = i + identify_list_size;
- list = (enum mbfl_no_encoding *)pecalloc(size, sizeof(int), persistent);
- if (list != NULL) {
- entry = list;
- bauto = 0;
- n = 0;
- while (i > 0) {
- if (zend_hash_get_current_data(target_hash, (void **) &hash_entry) == FAILURE) {
- break;
- }
- convert_to_string_ex(hash_entry);
- if (strcasecmp(Z_STRVAL_PP(hash_entry), "auto") == 0) {
- if (!bauto) {
- bauto = 1;
- l = identify_list_size;
- src = identify_list;
- while (l > 0) {
- *entry++ = *src++;
- l--;
- n++;
- }
- }
- } else {
- no_encoding = mbfl_name2no_encoding(Z_STRVAL_PP(hash_entry));
- if (no_encoding != mbfl_no_encoding_invalid) {
- *entry++ = no_encoding;
- n++;
- } else {
- ret = 0;
- }
- }
- zend_hash_move_forward(target_hash);
- i--;
- }
- if (n > 0) {
- if (return_list) {
- *return_list = list;
- } else {
- pefree(list, persistent);
- }
- } else {
- pefree(list, persistent);
- if (return_list) {
- *return_list = NULL;
- }
- ret = 0;
- }
- if (return_size) {
- *return_size = n;
- }
- } else {
- if (return_list) {
- *return_list = NULL;
- }
- if (return_size) {
- *return_size = 0;
- }
- ret = 0;
- }
- }
-
- return ret;
-}
-/* }}} */
-
-/* {{{ php_mb_nls_get_default_detect_order_list */
-static int php_mb_nls_get_default_detect_order_list(enum mbfl_no_language lang, enum mbfl_no_encoding **plist, int* plist_size)
-{
- size_t i;
-
- *plist = (enum mbfl_no_encoding *) php_mb_default_identify_list_neut;
- *plist_size = sizeof(php_mb_default_identify_list_neut) / sizeof(php_mb_default_identify_list_neut[0]);
-
- 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_size = php_mb_default_identify_list[i].list_size;
- return 1;
- }
- }
- return 0;
-}
-/* }}} */
-
-/* {{{ php.ini directive handler */
-static PHP_INI_MH(OnUpdate_mbstring_language)
-{
- enum mbfl_no_language no_language;
-
- no_language = mbfl_name2no_language(new_value);
- if (no_language == mbfl_no_language_invalid) {
- return FAILURE;
- }
- MBSTRG(language) = no_language;
- php_mb_nls_get_default_detect_order_list(no_language, &MBSTRG(default_detect_order_list), &MBSTRG(default_detect_order_list_size));
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ static PHP_INI_MH(OnUpdate_mbstring_detect_order) */
-static PHP_INI_MH(OnUpdate_mbstring_detect_order)
-{
- enum mbfl_no_encoding *list;
- int size;
-
- if (php_mb_parse_encoding_list(new_value, new_value_length, &list, &size, 1 TSRMLS_CC)) {
- if (MBSTRG(detect_order_list) != NULL) {
- free(MBSTRG(detect_order_list));
- }
- MBSTRG(detect_order_list) = list;
- MBSTRG(detect_order_list_size) = size;
- } else {
- return FAILURE;
- }
-
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ static PHP_INI_MH(OnUpdate_mbstring_http_input) */
-static PHP_INI_MH(OnUpdate_mbstring_http_input)
-{
- enum mbfl_no_encoding *list;
- int size;
-
- if (php_mb_parse_encoding_list(new_value, new_value_length, &list, &size, 1 TSRMLS_CC)) {
- if (MBSTRG(http_input_list) != NULL) {
- free(MBSTRG(http_input_list));
- }
- MBSTRG(http_input_list) = list;
- MBSTRG(http_input_list_size) = size;
- } else {
- return FAILURE;
- }
-
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ static PHP_INI_MH(OnUpdate_mbstring_http_output) */
-static PHP_INI_MH(OnUpdate_mbstring_http_output)
-{
- enum mbfl_no_encoding no_encoding;
-
- no_encoding = mbfl_name2no_encoding(new_value);
- if (no_encoding != mbfl_no_encoding_invalid) {
- MBSTRG(http_output_encoding) = no_encoding;
- MBSTRG(current_http_output_encoding) = no_encoding;
- } 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)
-{
- enum mbfl_no_encoding no_encoding;
- if (new_value == NULL) {
- return SUCCESS;
- }
-
- no_encoding = mbfl_name2no_encoding(new_value);
- if (no_encoding != mbfl_no_encoding_invalid) {
- 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;
- }
-#endif
-#ifdef ZEND_MULTIBYTE
- zend_multibyte_set_internal_encoding(new_value, new_value_length TSRMLS_CC);
-#endif /* ZEND_MULTIBYTE */
- } else {
- if (new_value != NULL && new_value_length > 0) {
- return FAILURE;
- }
- }
-
- return SUCCESS;
-}
-/* }}} */
-
-#ifdef ZEND_MULTIBYTE
-/* {{{ static PHP_INI_MH(OnUpdate_mbstring_script_encoding) */
-static PHP_INI_MH(OnUpdate_mbstring_script_encoding)
-{
- int *list, size;
-
- if (php_mb_parse_encoding_list(new_value, new_value_length, &list, &size, 1 TSRMLS_CC)) {
- if (MBSTRG(script_encoding_list) != NULL) {
- free(MBSTRG(script_encoding_list));
- }
- MBSTRG(script_encoding_list) = list;
- MBSTRG(script_encoding_list_size) = size;
- } else {
- return FAILURE;
- }
-
- return SUCCESS;
-}
-/* }}} */
-#endif /* ZEND_MULTIBYTE */
-
-/* {{{ static PHP_INI_MH(OnUpdate_mbstring_substitute_character) */
-static PHP_INI_MH(OnUpdate_mbstring_substitute_character)
-{
- if (new_value != NULL) {
- if (strcasecmp("none", new_value) == 0) {
- MBSTRG(filter_illegal_mode) = MBFL_OUTPUTFILTER_ILLEGAL_MODE_NONE;
- } else if (strcasecmp("long", new_value) == 0) {
- MBSTRG(filter_illegal_mode) = MBFL_OUTPUTFILTER_ILLEGAL_MODE_LONG;
- } else {
- MBSTRG(filter_illegal_mode) = MBFL_OUTPUTFILTER_ILLEGAL_MODE_CHAR;
- MBSTRG(filter_illegal_substchar) = zend_atoi(new_value, new_value_length);
- }
- }
-
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ static PHP_INI_MH(OnUpdate_mbstring_encoding_translation) */
-static PHP_INI_MH(OnUpdate_mbstring_encoding_translation)
-{
- if (new_value == NULL) {
- return FAILURE;
- }
-
- OnUpdateBool(entry, new_value, new_value_length, mh_arg1, mh_arg2, mh_arg3, stage TSRMLS_CC);
-
- if (MBSTRG(encoding_translation)){
- _php_mb_enable_encoding_translation(1);
- } else {
- _php_mb_enable_encoding_translation(0);
- }
-
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ 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.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)
- PHP_INI_ENTRY("mbstring.internal_encoding", NULL, PHP_INI_ALL, OnUpdate_mbstring_internal_encoding)
-#ifdef ZEND_MULTIBYTE
- 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_BOOLEAN("mbstring.encoding_translation", "0",
- PHP_INI_SYSTEM | PHP_INI_PERDIR, OnUpdate_mbstring_encoding_translation,
- encoding_translation, zend_mbstring_globals, mbstring_globals)
-PHP_INI_END()
-/* }}} */
-
-/* {{{ module global initialize handler */
-static void _php_mb_globals_ctor(zend_mbstring_globals *pglobals TSRMLS_DC)
-{
- MBSTRG(language) = mbfl_no_language_uni;
- MBSTRG(current_language) = MBSTRG(language);
- MBSTRG(internal_encoding) = mbfl_no_encoding_invalid;
- MBSTRG(current_internal_encoding) = MBSTRG(internal_encoding);
-#ifdef ZEND_MULTIBYTE
- MBSTRG(script_encoding_list) = NULL;
- MBSTRG(script_encoding_list_size) = 0;
-#endif /* ZEND_MULTIBYTE */
- MBSTRG(http_output_encoding) = mbfl_no_encoding_pass;
- MBSTRG(current_http_output_encoding) = mbfl_no_encoding_pass;
- MBSTRG(http_input_identify) = mbfl_no_encoding_invalid;
- MBSTRG(http_input_identify_get) = mbfl_no_encoding_invalid;
- MBSTRG(http_input_identify_post) = mbfl_no_encoding_invalid;
- MBSTRG(http_input_identify_cookie) = mbfl_no_encoding_invalid;
- MBSTRG(http_input_identify_string) = mbfl_no_encoding_invalid;
- MBSTRG(http_input_list) = NULL;
- MBSTRG(http_input_list_size) = 0;
- MBSTRG(detect_order_list) = NULL;
- MBSTRG(detect_order_list_size) = 0;
- MBSTRG(current_detect_order_list) = NULL;
- MBSTRG(current_detect_order_list_size) = 0;
- MBSTRG(default_detect_order_list) = (enum mbfl_no_encoding *) php_mb_default_identify_list_neut;
- MBSTRG(default_detect_order_list_size) = sizeof(php_mb_default_identify_list_neut) / sizeof(php_mb_default_identify_list_neut[0]);
- MBSTRG(filter_illegal_mode) = MBFL_OUTPUTFILTER_ILLEGAL_MODE_CHAR;
- MBSTRG(filter_illegal_substchar) = 0x3f; /* '?' */
- MBSTRG(current_filter_illegal_mode) = MBFL_OUTPUTFILTER_ILLEGAL_MODE_CHAR;
- MBSTRG(current_filter_illegal_substchar) = 0x3f; /* '?' */
- MBSTRG(func_overload) = 0;
- MBSTRG(encoding_translation) = 0;
- pglobals->outconv = NULL;
-#if HAVE_MBREGEX
- _php_mb_regex_globals_ctor(pglobals TSRMLS_CC);
-#endif
-}
-/* }}} */
-
-/* {{{ static void _php_mb_globals_dtor() */
-static void _php_mb_globals_dtor(zend_mbstring_globals *pglobals TSRMLS_DC)
-{
-#if HAVE_MBREGEX
- _php_mb_regex_globals_dtor(pglobals TSRMLS_CC);
-#endif
-}
-/* }}} */
-
-/* {{{ PHP_MINIT_FUNCTION(mbstring) */
-PHP_MINIT_FUNCTION(mbstring)
-{
- __mbfl_allocators = &_php_mb_allocators;
-
-#ifdef ZTS
- ts_allocate_id(&mbstring_globals_id, sizeof(zend_mbstring_globals),
- (ts_allocate_ctor) _php_mb_globals_ctor,
- (ts_allocate_dtor) _php_mb_globals_dtor);
-#else
- _php_mb_globals_ctor(&mbstring_globals TSRMLS_CC);
-#endif
-
- REGISTER_INI_ENTRIES();
-
- if (MBSTRG(encoding_translation)) {
- _php_mb_enable_encoding_translation(1);
- }
-
- REGISTER_LONG_CONSTANT("MB_OVERLOAD_MAIL", MB_OVERLOAD_MAIL, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("MB_OVERLOAD_STRING", MB_OVERLOAD_STRING, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("MB_OVERLOAD_REGEX", MB_OVERLOAD_REGEX, CONST_CS | CONST_PERSISTENT);
-
- REGISTER_LONG_CONSTANT("MB_CASE_UPPER", PHP_UNICODE_CASE_UPPER, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("MB_CASE_LOWER", PHP_UNICODE_CASE_LOWER, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("MB_CASE_TITLE", PHP_UNICODE_CASE_TITLE, CONST_CS | CONST_PERSISTENT);
-
-#if HAVE_MBREGEX
- PHP_MINIT(mb_regex) (INIT_FUNC_ARGS_PASSTHRU);
-#endif
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ PHP_MSHUTDOWN_FUNCTION(mbstring) */
-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 (MBSTRG(encoding_translation)) {
- _php_mb_enable_encoding_translation(0);
- }
-
-#if HAVE_MBREGEX
- PHP_MSHUTDOWN(mb_regex) (INIT_FUNC_ARGS_PASSTHRU);
-#endif
-
-#ifdef ZTS
- ts_free_id(mbstring_globals_id);
-#else
- _php_mb_globals_dtor(&mbstring_globals TSRMLS_CC);
-#endif
-
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ PHP_RINIT_FUNCTION(mbstring) */
-PHP_RINIT_FUNCTION(mbstring)
-{
- int n;
- enum mbfl_no_encoding *list=NULL, *entry;
- zend_function *func, *orig;
- const struct mb_overload_def *p;
-
- MBSTRG(current_language) = MBSTRG(language);
-
- 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_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);
- }
- }
-
- MBSTRG(current_internal_encoding) = MBSTRG(internal_encoding);
- MBSTRG(current_http_output_encoding) = MBSTRG(http_output_encoding);
- MBSTRG(current_filter_illegal_mode) = MBSTRG(filter_illegal_mode);
- MBSTRG(current_filter_illegal_substchar) = MBSTRG(filter_illegal_substchar);
-
- n = 0;
- if (MBSTRG(detect_order_list)) {
- list = MBSTRG(detect_order_list);
- n = MBSTRG(detect_order_list_size);
- }
- if (n <= 0) {
- list = MBSTRG(default_detect_order_list);
- n = MBSTRG(default_detect_order_list_size);
- }
- entry = (enum mbfl_no_encoding *)safe_emalloc(n, sizeof(int), 0);
- MBSTRG(current_detect_order_list) = entry;
- MBSTRG(current_detect_order_list_size) = n;
- while (n > 0) {
- *entry++ = *list++;
- n--;
- }
-
- /* override original function. */
- if (MBSTRG(func_overload)){
- p = &(mb_ovld[0]);
-
- 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_find(EG(function_table), p->ovld_func, strlen(p->ovld_func)+1 , (void **)&func);
-
- if (zend_hash_find(EG(function_table), p->orig_func, strlen(p->orig_func)+1, (void **)&orig) != SUCCESS) {
- php_error_docref("ref.mbstring" TSRMLS_CC, E_WARNING, "mbstring couldn't find function %s.", p->orig_func);
- return FAILURE;
- } else {
- zend_hash_add(EG(function_table), p->save_func, strlen(p->save_func)+1, orig, sizeof(zend_function), NULL);
-
- if (zend_hash_update(EG(function_table), p->orig_func, strlen(p->orig_func)+1, func, sizeof(zend_function),
- NULL) == FAILURE) {
- php_error_docref("ref.mbstring" TSRMLS_CC, E_WARNING, "mbstring couldn't replace function %s.", p->orig_func);
- return FAILURE;
- }
- }
- }
- p++;
- }
- }
-#if HAVE_MBREGEX
- PHP_RINIT(mb_regex) (INIT_FUNC_ARGS_PASSTHRU);
-#endif
-#ifdef ZEND_MULTIBYTE
- php_mb_set_zend_encoding(TSRMLS_C);
-#endif /* ZEND_MULTIBYTE */
-
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ PHP_RSHUTDOWN_FUNCTION(mbstring) */
-PHP_RSHUTDOWN_FUNCTION(mbstring)
-{
- const struct mb_overload_def *p;
- zend_function *orig;
-
- if (MBSTRG(current_detect_order_list) != NULL) {
- efree(MBSTRG(current_detect_order_list));
- MBSTRG(current_detect_order_list) = NULL;
- MBSTRG(current_detect_order_list_size) = 0;
- }
- if (MBSTRG(outconv) != NULL) {
- mbfl_buffer_converter_delete(MBSTRG(outconv));
- MBSTRG(outconv) = NULL;
- }
-
- /* clear http input identification. */
- MBSTRG(http_input_identify) = mbfl_no_encoding_invalid;
- MBSTRG(http_input_identify_post) = mbfl_no_encoding_invalid;
- MBSTRG(http_input_identify_get) = mbfl_no_encoding_invalid;
- MBSTRG(http_input_identify_cookie) = mbfl_no_encoding_invalid;
- MBSTRG(http_input_identify_string) = mbfl_no_encoding_invalid;
-
- /* 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);
- p++;
- }
- }
-
-#if HAVE_MBREGEX
- PHP_RSHUTDOWN(mb_regex) (INIT_FUNC_ARGS_PASSTHRU);
-#endif
-
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ PHP_MINFO_FUNCTION(mbstring) */
-PHP_MINFO_FUNCTION(mbstring)
-{
- php_info_print_table_start();
- php_info_print_table_row(2, "Multibyte Support", "enabled");
- php_info_print_table_row(2, "Multibyte string engine", "libmbfl");
- if (MBSTRG(encoding_translation)) {
- php_info_print_table_row(2, "HTTP input encoding translation", "enabled");
- }
-#if defined(HAVE_MBREGEX)
- {
- char buf[32];
- php_info_print_table_row(2, "Multibyte (japanese) regex support", "enabled");
- sprintf(buf, "%d.%d.%d",
- ONIGURUMA_VERSION_MAJOR,ONIGURUMA_VERSION_MINOR,ONIGURUMA_VERSION_TEENY);
- php_info_print_table_row(2, "Multibyte regex (oniguruma) version", buf);
- }
-#endif
- php_info_print_table_end();
-
- php_info_print_table_start();
- php_info_print_table_header(1, "mbstring extension makes use of \"streamable kanji code filter and converter\", which is distributed under the GNU Lesser General Public License version 2.1.");
- php_info_print_table_end();
-
- DISPLAY_INI_ENTRIES();
-}
-/* }}} */
-
-/* {{{ proto string mb_language([string language])
- Sets the current language or Returns the current language as a string */
-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);
- } else {
- no_language = mbfl_name2no_language(name);
- if (no_language == mbfl_no_language_invalid) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unknown language \"%s\"", name);
- RETURN_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;
- }
- }
-}
-/* }}} */
-
-/* {{{ proto string mb_internal_encoding([string encoding])
- Sets the current internal encoding or Returns the current internal encoding as a string */
-PHP_FUNCTION(mb_internal_encoding)
-{
- char *name = NULL;
- int name_len;
- enum mbfl_no_encoding no_encoding;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|s", &name, &name_len) == FAILURE) {
- RETURN_FALSE;
- }
- if (name == NULL) {
- name = (char *)mbfl_no_encoding2name(MBSTRG(current_internal_encoding));
- if (name != NULL) {
- RETURN_STRING(name, 1);
- } else {
- RETURN_FALSE;
- }
- } 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;
- } else {
- MBSTRG(current_internal_encoding) = no_encoding;
-#ifdef ZEND_MULTIBYTE
- /* TODO: make independent from mbstring.encoding_translation? */
- if (MBSTRG(encoding_translation)) {
- zend_multibyte_set_internal_encoding(name, name_len TSRMLS_CC);
- }
-#endif /* ZEND_MULTIBYTE */
- RETURN_TRUE;
- }
- }
-}
-/* }}} */
-
-/* {{{ proto mixed mb_http_input([string type])
- Returns the input encoding */
-PHP_FUNCTION(mb_http_input)
-{
- char *typ = NULL;
- int typ_len;
- int retname, n;
- char *name, *list, *temp;
- enum mbfl_no_encoding *entry;
- enum mbfl_no_encoding result = mbfl_no_encoding_invalid;
-
- retname = 1;
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|s", &typ, &typ_len) == FAILURE) {
- RETURN_FALSE;
- }
- if (typ == NULL) {
- result = MBSTRG(http_input_identify);
- } else {
- switch (*typ) {
- case 'G':
- case 'g':
- result = MBSTRG(http_input_identify_get);
- break;
- case 'P':
- case 'p':
- result = MBSTRG(http_input_identify_post);
- break;
- case 'C':
- case 'c':
- result = MBSTRG(http_input_identify_cookie);
- break;
- case 'S':
- case 's':
- result = MBSTRG(http_input_identify_string);
- break;
- case 'I':
- case 'i':
- array_init(return_value);
- entry = MBSTRG(http_input_list);
- n = MBSTRG(http_input_list_size);
- while (n > 0) {
- name = (char *)mbfl_no_encoding2name(*entry);
- if (name) {
- add_next_index_string(return_value, name, 1);
- }
- entry++;
- n--;
- }
- retname = 0;
- break;
- case 'L':
- case 'l':
- entry = MBSTRG(http_input_list);
- n = MBSTRG(http_input_list_size);
- list = NULL;
- while (n > 0) {
- name = (char *)mbfl_no_encoding2name(*entry);
- if (name) {
- if (list) {
- temp = list;
- spprintf(&list, 0, "%s,%s", temp, name);
- efree(temp);
- if (!list) {
- break;
- }
- } else {
- list = estrdup(name);
- }
- }
- entry++;
- n--;
- }
- if (!list) {
- RETURN_FALSE;
- }
- RETVAL_STRING(list, 0);
- retname = 0;
- break;
- default:
- result = MBSTRG(http_input_identify);
- break;
- }
- }
-
- if (retname) {
- if (result != mbfl_no_encoding_invalid &&
- (name = (char *)mbfl_no_encoding2name(result)) != NULL) {
- RETVAL_STRING(name, 1);
- } else {
- RETVAL_FALSE;
- }
- }
-}
-/* }}} */
-
-/* {{{ proto string mb_http_output([string encoding])
- Sets the current output_encoding or returns the current output_encoding as a string */
-PHP_FUNCTION(mb_http_output)
-{
- char *name = NULL;
- int name_len;
- enum mbfl_no_encoding no_encoding;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|s", (char **)&name, &name_len) == FAILURE) {
- RETURN_FALSE;
- }
-
- if (name == NULL) {
- name = (char *)mbfl_no_encoding2name(MBSTRG(current_http_output_encoding));
- if (name != NULL) {
- RETURN_STRING(name, 1);
- } else {
- RETURN_FALSE;
- }
- } 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;
- } else {
- MBSTRG(current_http_output_encoding) = no_encoding;
- RETURN_TRUE;
- }
- }
-}
-/* }}} */
-
-/* {{{ proto bool|array mb_detect_order([mixed encoding-list])
- Sets the current detect_order or Return the current detect_order as a array */
-PHP_FUNCTION(mb_detect_order)
-{
- zval **arg1;
- int n, size;
- enum mbfl_no_encoding *list, *entry;
- char *name;
-
- if (ZEND_NUM_ARGS() == 0) {
- array_init(return_value);
- entry = MBSTRG(current_detect_order_list);
- n = MBSTRG(current_detect_order_list_size);
- while (n > 0) {
- name = (char *)mbfl_no_encoding2name(*entry);
- if (name) {
- add_next_index_string(return_value, name, 1);
- }
- entry++;
- n--;
- }
- } else if (ZEND_NUM_ARGS() == 1 && zend_get_parameters_ex(1, &arg1) != FAILURE) {
- list = NULL;
- size = 0;
- switch (Z_TYPE_PP(arg1)) {
- case IS_ARRAY:
- if (!php_mb_parse_encoding_array(*arg1, &list, &size, 0 TSRMLS_CC)) {
- if (list) {
- efree(list);
- }
- RETURN_FALSE;
- }
- break;
- default:
- convert_to_string_ex(arg1);
- if (!php_mb_parse_encoding_list(Z_STRVAL_PP(arg1), Z_STRLEN_PP(arg1), &list, &size, 0 TSRMLS_CC)) {
- if (list) {
- efree(list);
- }
- RETURN_FALSE;
- }
- break;
- }
- if (list == NULL) {
- RETVAL_FALSE;
- } else {
- if (MBSTRG(current_detect_order_list)) {
- efree(MBSTRG(current_detect_order_list));
- }
- MBSTRG(current_detect_order_list) = list;
- MBSTRG(current_detect_order_list_size) = size;
- RETVAL_TRUE;
- }
- } else {
- WRONG_PARAM_COUNT;
- }
-}
-/* }}} */
-
-/* {{{ proto mixed mb_substitute_character([mixed substchar])
- Sets the current substitute_character or returns the current substitute_character */
-PHP_FUNCTION(mb_substitute_character)
-{
- zval **arg1;
-
- if (ZEND_NUM_ARGS() == 0) {
- if (MBSTRG(current_filter_illegal_mode) == MBFL_OUTPUTFILTER_ILLEGAL_MODE_NONE) {
- RETVAL_STRING("none", 1);
- } else if (MBSTRG(current_filter_illegal_mode) == MBFL_OUTPUTFILTER_ILLEGAL_MODE_LONG) {
- RETVAL_STRING("long", 1);
- } else {
- RETVAL_LONG(MBSTRG(current_filter_illegal_substchar));
- }
- } else if (ZEND_NUM_ARGS() == 1 && zend_get_parameters_ex(1, &arg1) != FAILURE) {
- RETVAL_TRUE;
- switch (Z_TYPE_PP(arg1)) {
- case IS_STRING:
- if (strcasecmp("none", Z_STRVAL_PP(arg1)) == 0) {
- MBSTRG(current_filter_illegal_mode) = MBFL_OUTPUTFILTER_ILLEGAL_MODE_NONE;
- } else if (strcasecmp("long", Z_STRVAL_PP(arg1)) == 0) {
- MBSTRG(current_filter_illegal_mode) = MBFL_OUTPUTFILTER_ILLEGAL_MODE_LONG;
- } else {
- convert_to_long_ex(arg1);
- if (Z_LVAL_PP(arg1)< 0xffff && Z_LVAL_PP(arg1)> 0x0) {
- MBSTRG(current_filter_illegal_mode) = MBFL_OUTPUTFILTER_ILLEGAL_MODE_CHAR;
- MBSTRG(current_filter_illegal_substchar) = Z_LVAL_PP(arg1);
- } else {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unknown character.");
- RETVAL_FALSE;
- }
- }
- break;
- default:
- convert_to_long_ex(arg1);
- if (Z_LVAL_PP(arg1)< 0xffff && Z_LVAL_PP(arg1)> 0x0) {
- MBSTRG(current_filter_illegal_mode) = MBFL_OUTPUTFILTER_ILLEGAL_MODE_CHAR;
- MBSTRG(current_filter_illegal_substchar) = Z_LVAL_PP(arg1);
- } else {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unknown character.");
- RETVAL_FALSE;
- }
- break;
- }
- } else {
- WRONG_PARAM_COUNT;
- }
-}
-/* }}} */
-
-/* {{{ proto string mb_preferred_mime_name(string encoding)
- Return the preferred MIME name (charset) as a string */
-PHP_FUNCTION(mb_preferred_mime_name)
-{
- enum mbfl_no_encoding no_encoding;
- char *name = NULL;
- int name_len;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &name, &name_len) == FAILURE) {
- return;
- } 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);
- RETVAL_FALSE;
- } else {
- const char *preferred_name = mbfl_no2preferred_mime_name(no_encoding);
- if (preferred_name == NULL || *preferred_name == '\0') {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "No MIME preferred name corresponding to \"%s\"", name);
- RETVAL_FALSE;
- } else {
- RETVAL_STRING((char *)preferred_name, 1);
- }
- }
- }
-}
-/* }}} */
-
-#define IS_SJIS1(c) ((((c)>=0x81 && (c)<=0x9f) || ((c)>=0xe0 && (c)<=0xf5)) ? 1 : 0)
-#define IS_SJIS2(c) ((((c)>=0x40 && (c)<=0x7e) || ((c)>=0x80 && (c)<=0xfc)) ? 1 : 0)
-
-/* {{{ proto bool mb_parse_str(string encoded_string [, array result])
- Parses GET/POST/COOKIE data and sets global variables */
-PHP_FUNCTION(mb_parse_str)
-{
- zval *track_vars_array;
- char *encstr = NULL, *separator = NULL;
- int encstr_len;
-
- track_vars_array = NULL;
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|z", &encstr, &encstr_len, &track_vars_array) == FAILURE) {
- return;
- }
-
- separator = (char *)estrdup(PG(arg_separator).input);
-
- /* Clear out the array */
- if (track_vars_array != NULL) {
- zval_dtor(track_vars_array);
- array_init(track_vars_array);
- }
-
- encstr = estrndup(encstr, encstr_len);
-
- RETVAL_BOOL(_php_mb_encoding_handler_ex(PARSE_STRING, track_vars_array, encstr, separator, (track_vars_array == NULL), 1 TSRMLS_CC));
-
- if (encstr != NULL) efree(encstr);
- if (separator != NULL) efree(separator);
-}
-/* }}} */
-
-/* {{{ proto string mb_output_handler(string contents, int status)
- Returns string in output buffer converted to the http_output encoding */
-PHP_FUNCTION(mb_output_handler)
-{
- char *arg_string;
- int arg_string_len;
- long arg_status;
- mbfl_string string, result;
- const char *charset;
- char *p;
- enum mbfl_no_encoding encoding;
- int last_feed, len;
- unsigned char send_text_mimetype = 0;
- char *s, *mimetype = NULL;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "sl", &arg_string, &arg_string_len, &arg_status) == FAILURE) {
- return;
- }
-
- encoding = MBSTRG(current_http_output_encoding);
-
- /* start phase only */
- if ((arg_status & PHP_OUTPUT_HANDLER_START) != 0) {
- /* delete the converter just in case. */
- if (MBSTRG(outconv)) {
- mbfl_buffer_converter_delete(MBSTRG(outconv));
- MBSTRG(outconv) = NULL;
- }
- if (encoding == mbfl_no_encoding_pass) {
- RETURN_STRINGL(arg_string, arg_string_len, 1);
- }
-
- /* analyze mime type */
- if (SG(sapi_headers).mimetype &&
- strncmp(SG(sapi_headers).mimetype, "text/", 5) == 0) {
- if ((s = strchr(SG(sapi_headers).mimetype,';')) == NULL){
- mimetype = estrdup(SG(sapi_headers).mimetype);
- } else {
- mimetype = estrndup(SG(sapi_headers).mimetype,s-SG(sapi_headers).mimetype);
- }
- send_text_mimetype = 1;
- } else if (SG(sapi_headers).send_default_content_type) {
- mimetype = SG(default_mimetype) ? SG(default_mimetype) : SAPI_DEFAULT_MIMETYPE;
- }
-
- /* if content-type is not yet set, set it and activate the converter */
- if (SG(sapi_headers).send_default_content_type || send_text_mimetype) {
- charset = mbfl_no2preferred_mime_name(encoding);
- if (charset) {
- len = spprintf( &p, 0, "Content-Type: %s; charset=%s", mimetype, charset );
- if (sapi_add_header(p, len, 0) != FAILURE) {
- SG(sapi_headers).send_default_content_type = 0;
- }
- }
- /* activate the converter */
- MBSTRG(outconv) = mbfl_buffer_converter_new(MBSTRG(current_internal_encoding), encoding, 0);
- if (send_text_mimetype){
- efree(mimetype);
- }
- }
- }
-
- /* just return if the converter is not activated. */
- if (MBSTRG(outconv) == NULL) {
- RETURN_STRINGL(arg_string, arg_string_len, 1);
- }
-
- /* flag */
- last_feed = ((arg_status & PHP_OUTPUT_HANDLER_END) != 0);
- /* mode */
- mbfl_buffer_converter_illegal_mode(MBSTRG(outconv), MBSTRG(current_filter_illegal_mode));
- mbfl_buffer_converter_illegal_substchar(MBSTRG(outconv), MBSTRG(current_filter_illegal_substchar));
-
- /* feed the string */
- mbfl_string_init(&string);
- string.no_language = MBSTRG(current_language);
- string.no_encoding = MBSTRG(current_internal_encoding);
- string.val = (unsigned char *)arg_string;
- string.len = arg_string_len;
- mbfl_buffer_converter_feed(MBSTRG(outconv), &string);
- if (last_feed) {
- mbfl_buffer_converter_flush(MBSTRG(outconv));
- }
- /* get the converter output, and return it */
- mbfl_buffer_converter_result(MBSTRG(outconv), &result);
- RETVAL_STRINGL((char *)result.val, result.len, 0); /* the string is already strdup()'ed */
-
- /* delete the converter if it is the last feed. */
- if (last_feed) {
- mbfl_buffer_converter_delete(MBSTRG(outconv));
- MBSTRG(outconv) = NULL;
- }
-}
-/* }}} */
-
-/* {{{ proto int mb_strlen(string str [, string encoding])
- Get character numbers of a string */
-PHP_FUNCTION(mb_strlen)
-{
- int n;
- mbfl_string string;
- char *enc_name = NULL;
- int enc_name_len;
-
- mbfl_string_init(&string);
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|s", (char **)&string.val, &string.len, &enc_name, &enc_name_len) == FAILURE) {
- RETURN_FALSE;
- }
-
- string.no_language = MBSTRG(current_language);
- if (enc_name == NULL) {
- string.no_encoding = MBSTRG(current_internal_encoding);
- } else {
- string.no_encoding = mbfl_name2no_encoding(enc_name);
- if (string.no_encoding == mbfl_no_encoding_invalid) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unknown encoding \"%s\"", enc_name);
- RETURN_FALSE;
- }
- }
-
- n = mbfl_strlen(&string);
- if (n >= 0) {
- RETVAL_LONG(n);
- } else {
- RETVAL_FALSE;
- }
-}
-/* }}} */
-
-/* {{{ proto int mb_strpos(string haystack, string needle [, int offset [, string encoding]])
- Find position of first occurrence of a string within another */
-PHP_FUNCTION(mb_strpos)
-{
- int n, reverse = 0;
- long offset;
- mbfl_string haystack, needle;
- char *enc_name = NULL;
- int enc_name_len;
-
- mbfl_string_init(&haystack);
- mbfl_string_init(&needle);
- haystack.no_language = MBSTRG(current_language);
- haystack.no_encoding = MBSTRG(current_internal_encoding);
- needle.no_language = MBSTRG(current_language);
- needle.no_encoding = MBSTRG(current_internal_encoding);
- offset = 0;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ss|ls", (char **)&haystack.val, &haystack.len, (char **)&needle.val, &needle.len, &offset, &enc_name, &enc_name_len) == FAILURE) {
- RETURN_FALSE;
- }
-
- if (enc_name != NULL) {
- haystack.no_encoding = needle.no_encoding = mbfl_name2no_encoding(enc_name);
- if (haystack.no_encoding == mbfl_no_encoding_invalid) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unknown encoding \"%s\"", enc_name);
- RETURN_FALSE;
- }
- }
-
- if (offset < 0 || (unsigned long)offset > haystack.len) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Offset is out of range");
- RETURN_FALSE;
- }
- if (needle.len == 0) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Empty needle");
- RETURN_FALSE;
- }
-
- n = mbfl_strpos(&haystack, &needle, offset, reverse);
- if (n >= 0) {
- RETVAL_LONG(n);
- } else {
- switch (-n) {
- case 1:
- break;
- case 2:
- 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.");
- break;
- case 8:
- 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;
- }
- RETVAL_FALSE;
- }
-}
-/* }}} */
-
-/* {{{ proto int mb_strrpos(string haystack, string needle [, string encoding])
- Find the last occurrence of a character in a string within another */
-PHP_FUNCTION(mb_strrpos)
-{
- int n;
- mbfl_string haystack, needle;
- char *enc_name = NULL;
- int enc_name_len;
-
- mbfl_string_init(&haystack);
- mbfl_string_init(&needle);
- haystack.no_language = MBSTRG(current_language);
- haystack.no_encoding = MBSTRG(current_internal_encoding);
- needle.no_language = MBSTRG(current_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) {
- RETURN_FALSE;
- }
-
- if (enc_name != NULL) {
- haystack.no_encoding = needle.no_encoding = mbfl_name2no_encoding(enc_name);
- if (haystack.no_encoding == mbfl_no_encoding_invalid) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unknown encoding \"%s\"", enc_name);
- RETURN_FALSE;
- }
- }
-
- if (haystack.len <= 0) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Empty haystack");
- RETURN_FALSE;
- }
- if (needle.len <= 0) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING,"Empty needle");
- RETURN_FALSE;
- }
- n = mbfl_strpos(&haystack, &needle, 0, 1);
- if (n >= 0) {
- RETVAL_LONG(n);
- } else {
- RETVAL_FALSE;
- }
-}
-/* }}} */
-
-/* {{{ proto int mb_substr_count(string haystack, string needle [, string encoding])
- Count the number of substring occurrences */
-PHP_FUNCTION(mb_substr_count)
-{
- int n;
- mbfl_string haystack, needle;
- char *enc_name = NULL;
- int enc_name_len;
-
- mbfl_string_init(&haystack);
- mbfl_string_init(&needle);
- haystack.no_language = MBSTRG(current_language);
- haystack.no_encoding = MBSTRG(current_internal_encoding);
- needle.no_language = MBSTRG(current_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) {
- return;
- }
-
- if (enc_name != NULL) {
- haystack.no_encoding = needle.no_encoding = mbfl_name2no_encoding(enc_name);
- if (haystack.no_encoding == mbfl_no_encoding_invalid) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unknown encoding \"%s\"", enc_name);
- RETURN_FALSE;
- }
- }
-
- if (needle.len <= 0) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING,"Empty needle");
- RETURN_FALSE;
- }
-
- n = mbfl_substr_count(&haystack, &needle);
- if (n >= 0) {
- RETVAL_LONG(n);
- } else {
- RETVAL_FALSE;
- }
-}
-/* }}} */
-
-/* {{{ proto string mb_substr(string str, int start [, int length [, string encoding]])
- Returns part of a string */
-PHP_FUNCTION(mb_substr)
-{
- zval **arg1, **arg2, **arg3, **arg4;
- int argc, from, len, mblen;
- mbfl_string string, result, *ret;
-
- mbfl_string_init(&string);
- string.no_language = MBSTRG(current_language);
- string.no_encoding = MBSTRG(current_internal_encoding);
-
- argc = ZEND_NUM_ARGS();
- switch (argc) {
- case 2:
- if (zend_get_parameters_ex(2, &arg1, &arg2) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- break;
- case 3:
- if (zend_get_parameters_ex(3, &arg1, &arg2, &arg3) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- break;
- case 4:
- if (zend_get_parameters_ex(4, &arg1, &arg2, &arg3, &arg4) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex(arg4);
- string.no_encoding = mbfl_name2no_encoding(Z_STRVAL_PP(arg4));
- if (string.no_encoding == mbfl_no_encoding_invalid) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unknown encoding \"%s\"", Z_STRVAL_PP(arg4));
- RETURN_FALSE;
- }
- break;
- default:
- WRONG_PARAM_COUNT;
- }
-
- convert_to_string_ex(arg1);
- string.val = (unsigned char *)Z_STRVAL_PP(arg1);
- string.len = Z_STRLEN_PP(arg1);
-
- convert_to_long_ex(arg2);
- from = Z_LVAL_PP(arg2);
- if (argc >= 3) {
- convert_to_long_ex(arg3);
- len = Z_LVAL_PP(arg3);
- } else {
- len = Z_STRLEN_PP(arg1);
- }
-
- /* measures length */
- mblen = 0;
- if (from < 0 || len < 0) {
- mblen = mbfl_strlen(&string);
- }
-
- /* if "from" position is negative, count start position from the end
- * of the string
- */
- if (from < 0) {
- from = mblen + from;
- if (from < 0) {
- from = 0;
- }
- }
-
- /* if "length" position is negative, set it to the length
- * needed to stop that many chars from the end of the string
- */
- if (len < 0) {
- len = (mblen - from) + len;
- if (len < 0) {
- len = 0;
- }
- }
-
- ret = mbfl_substr(&string, &result, from, len);
- if (ret != NULL) {
- RETVAL_STRINGL((char *)ret->val, ret->len, 0); /* the string is already strdup()'ed */
- } else {
- RETVAL_FALSE;
- }
-}
-/* }}} */
-
-/* {{{ proto string mb_strcut(string str, int start [, int length [, string encoding]])
- Returns part of a string */
-PHP_FUNCTION(mb_strcut)
-{
- pval **arg1, **arg2, **arg3, **arg4;
- int argc, from, len;
- mbfl_string string, result, *ret;
-
- mbfl_string_init(&string);
- string.no_language = MBSTRG(current_language);
- string.no_encoding = MBSTRG(current_internal_encoding);
-
- argc = ZEND_NUM_ARGS();
- switch (argc) {
- case 2:
- if (zend_get_parameters_ex(2, &arg1, &arg2) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- break;
- case 3:
- if (zend_get_parameters_ex(3, &arg1, &arg2, &arg3) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- break;
- case 4:
- if (zend_get_parameters_ex(4, &arg1, &arg2, &arg3, &arg4) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex(arg4);
- string.no_encoding = mbfl_name2no_encoding(Z_STRVAL_PP(arg4));
- if (string.no_encoding == mbfl_no_encoding_invalid) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unknown encoding \"%s\"", Z_STRVAL_PP(arg4));
- RETURN_FALSE;
- }
- break;
- default:
- WRONG_PARAM_COUNT;
- }
-
- convert_to_string_ex(arg1);
- string.val = Z_STRVAL_PP(arg1);
- string.len = Z_STRLEN_PP(arg1);
-
- convert_to_long_ex(arg2);
- from = Z_LVAL_PP(arg2);
- if (argc >= 3) {
- convert_to_long_ex(arg3);
- len = Z_LVAL_PP(arg3);
- } else {
- len = Z_STRLEN_PP(arg1);
- }
-
- /* if "from" position is negative, count start position from the end
- * of the string
- */
- if (from < 0) {
- from = Z_STRLEN_PP(arg1) + from;
- if (from < 0) {
- from = 0;
- }
- }
-
- /* if "length" position is negative, set it to the length
- * needed to stop that many chars from the end of the string
- */
- if (len < 0) {
- len = (Z_STRLEN_PP(arg1) - from) + len;
- if (len < 0) {
- len = 0;
- }
- }
-
- ret = mbfl_strcut(&string, &result, from, len);
- if (ret != NULL) {
- RETVAL_STRINGL(ret->val, ret->len, 0); /* the string is already strdup()'ed */
- } else {
- RETVAL_FALSE;
- }
-}
-/* }}} */
-
-/* {{{ proto int mb_strwidth(string str [, string encoding])
- Gets terminal width of a string */
-PHP_FUNCTION(mb_strwidth)
-{
- int n;
- mbfl_string string;
- char *enc_name = NULL;
- int enc_name_len;
-
- mbfl_string_init(&string);
-
- string.no_language = MBSTRG(current_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) {
- return;
- }
-
- if (enc_name != NULL) {
- string.no_encoding = mbfl_name2no_encoding(enc_name);
- if (string.no_encoding == mbfl_no_encoding_invalid) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unknown encoding \"%s\"", enc_name);
- RETURN_FALSE;
- }
- }
-
- n = mbfl_strwidth(&string);
- if (n >= 0) {
- RETVAL_LONG(n);
- } else {
- RETVAL_FALSE;
- }
-}
-/* }}} */
-
-/* {{{ proto string mb_strimwidth(string str, int start, int width [, string trimmarker [, string encoding]])
- Trim the string in terminal width */
-PHP_FUNCTION(mb_strimwidth)
-{
- pval **arg1, **arg2, **arg3, **arg4, **arg5;
- int from, width;
- mbfl_string string, result, marker, *ret;
-
- mbfl_string_init(&string);
- mbfl_string_init(&marker);
- string.no_language = MBSTRG(current_language);
- string.no_encoding = MBSTRG(current_internal_encoding);
- marker.no_language = MBSTRG(current_language);
- marker.no_encoding = MBSTRG(current_internal_encoding);
- marker.val = NULL;
- marker.len = 0;
-
- switch (ZEND_NUM_ARGS()) {
- case 3:
- if (zend_get_parameters_ex(3, &arg1, &arg2, &arg3) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- break;
- case 4:
- if (zend_get_parameters_ex(4, &arg1, &arg2, &arg3, &arg4) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- break;
- case 5:
- if (zend_get_parameters_ex(5, &arg1, &arg2, &arg3, &arg4, &arg5) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex(arg5);
- string.no_encoding = marker.no_encoding = mbfl_name2no_encoding(Z_STRVAL_PP(arg5));
- if (string.no_encoding == mbfl_no_encoding_invalid) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unknown encoding \"%s\"", Z_STRVAL_PP(arg5));
- RETURN_FALSE;
- }
- break;
- default:
- WRONG_PARAM_COUNT;
- }
-
- convert_to_string_ex(arg1);
- string.val = (unsigned char *)Z_STRVAL_PP(arg1);
- string.len = Z_STRLEN_PP(arg1);
-
- convert_to_long_ex(arg2);
- from = Z_LVAL_PP(arg2);
- if (from < 0 || from > Z_STRLEN_PP(arg1)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Start position is out of reange");
- RETURN_FALSE;
- }
-
- convert_to_long_ex(arg3);
- width = Z_LVAL_PP(arg3);
-
- if (width < 0) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Width is negative value");
- RETURN_FALSE;
- }
-
- if (ZEND_NUM_ARGS() >= 4) {
- convert_to_string_ex(arg4);
- marker.val = (unsigned char *)Z_STRVAL_PP(arg4);
- marker.len = Z_STRLEN_PP(arg4);
- }
-
- ret = mbfl_strimwidth(&string, &marker, &result, from, width);
- if (ret != NULL) {
- RETVAL_STRINGL((char *)ret->val, ret->len, 0); /* the string is already strdup()'ed */
- } else {
- RETVAL_FALSE;
- }
-}
-/* }}} */
-
-/* {{{ MBSTRING_API char *php_mb_convert_encoding() */
-MBSTRING_API char * php_mb_convert_encoding(char *input, size_t length, char *_to_encoding, char *_from_encodings, size_t *output_len TSRMLS_DC)
-{
- mbfl_string string, result, *ret;
- enum mbfl_no_encoding from_encoding, to_encoding;
- mbfl_buffer_converter *convd;
- int size, *list;
- char *output=NULL;
-
- if (output_len) {
- *output_len = 0;
- }
- if (!input) {
- return NULL;
- }
- /* new encoding */
- if (_to_encoding && strlen(_to_encoding)) {
- to_encoding = mbfl_name2no_encoding(_to_encoding);
- if (to_encoding == mbfl_no_encoding_invalid) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unknown encoding \"%s\"", _to_encoding);
- return NULL;
- }
- } else {
- to_encoding = MBSTRG(current_internal_encoding);
- }
-
- /* initialize string */
- mbfl_string_init(&string);
- mbfl_string_init(&result);
- from_encoding = MBSTRG(current_internal_encoding);
- string.no_encoding = from_encoding;
- string.no_language = MBSTRG(current_language);
- string.val = (unsigned char *)input;
- string.len = length;
-
- /* pre-conversion encoding */
- if (_from_encodings) {
- list = NULL;
- size = 0;
- php_mb_parse_encoding_list(_from_encodings, strlen(_from_encodings), &list, &size, 0 TSRMLS_CC);
- if (size == 1) {
- from_encoding = *list;
- string.no_encoding = from_encoding;
- } else if (size > 1) {
- /* auto detect */
- from_encoding = mbfl_identify_encoding_no(&string, list, size);
- if (from_encoding != mbfl_no_encoding_invalid) {
- string.no_encoding = from_encoding;
- } else {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to detect character encoding");
- from_encoding = mbfl_no_encoding_pass;
- to_encoding = from_encoding;
- string.no_encoding = from_encoding;
- }
- } else {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Illegal character encoding specified");
- }
- if (list != NULL) {
- efree((void *)list);
- }
- }
-
- /* initialize converter */
- convd = mbfl_buffer_converter_new(from_encoding, to_encoding, string.len);
- if (convd == NULL) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to create character encoding converter");
- return NULL;
- }
- mbfl_buffer_converter_illegal_mode(convd, MBSTRG(current_filter_illegal_mode));
- mbfl_buffer_converter_illegal_substchar(convd, MBSTRG(current_filter_illegal_substchar));
-
- /* do it */
- ret = mbfl_buffer_converter_feed_result(convd, &string, &result);
- if (ret) {
- if (output_len) {
- *output_len = ret->len;
- }
- output = (char *)ret->val;
- }
-
- mbfl_buffer_converter_delete(convd);
- return output;
-}
-/* }}} */
-
-/* {{{ proto string mb_convert_encoding(string str, string to-encoding [, mixed from-encoding])
- Returns converted string in desired encoding */
-PHP_FUNCTION(mb_convert_encoding)
-{
- pval **arg_str, **arg_new, **arg_old;
- int i;
- size_t size, l, n;
- char *_from_encodings, *ret, *s_free = NULL;
-
- zval **hash_entry;
- HashTable *target_hash;
-
- _from_encodings = NULL;
- if (ZEND_NUM_ARGS() == 2) {
- if (zend_get_parameters_ex(2, &arg_str, &arg_new) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- } else if (ZEND_NUM_ARGS() == 3) {
- if (zend_get_parameters_ex(3, &arg_str, &arg_new, &arg_old) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- switch (Z_TYPE_PP(arg_old)) {
- case IS_ARRAY:
-
- target_hash = Z_ARRVAL_PP(arg_old);
- zend_hash_internal_pointer_reset(target_hash);
- i = zend_hash_num_elements(target_hash);
- _from_encodings = NULL;
- while (i > 0) {
- if (zend_hash_get_current_data(target_hash, (void **) &hash_entry) == FAILURE) {
- break;
- }
- convert_to_string_ex(hash_entry);
- if ( _from_encodings) {
- l = strlen(_from_encodings);
- n = strlen(Z_STRVAL_PP(hash_entry));
- _from_encodings = erealloc(_from_encodings, l+n+2);
- strcpy(_from_encodings+l,",");
- strcpy(_from_encodings+l+1,Z_STRVAL_PP(hash_entry));
- } else {
- _from_encodings = estrdup(Z_STRVAL_PP(hash_entry));
- }
- zend_hash_move_forward(target_hash);
- i--;
- }
- if (_from_encodings != NULL && !strlen(_from_encodings)) {
- efree(_from_encodings);
- _from_encodings = NULL;
- }
- s_free = _from_encodings;
- break;
- default:
- convert_to_string_ex(arg_old);
- _from_encodings = Z_STRVAL_PP(arg_old);
- break;
- }
- } else {
- WRONG_PARAM_COUNT;
- }
-
- /* new encoding */
- convert_to_string_ex(arg_str);
- convert_to_string_ex(arg_new);
- ret = php_mb_convert_encoding( Z_STRVAL_PP(arg_str), Z_STRLEN_PP(arg_str), Z_STRVAL_PP(arg_new), _from_encodings, &size TSRMLS_CC);
- if (ret != NULL) {
- RETVAL_STRINGL(ret, size, 0); /* the string is already strdup()'ed */
- } else {
- RETVAL_FALSE;
- }
- if ( s_free) {
- efree(s_free);
- }
-}
-/* }}} */
-
-/* {{{ proto string mb_convert_case(string sourcestring, int mode [, string encoding])
- Returns a case-folded version of sourcestring */
-PHP_FUNCTION(mb_convert_case)
-{
- char *str, *from_encoding = (char*)mbfl_no2preferred_mime_name(MBSTRG(current_internal_encoding));
- int str_len, from_encoding_len;
- long case_mode = 0;
- char *newstr;
- size_t ret_len;
-
- RETVAL_FALSE;
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "sl|s!", &str, &str_len,
- &case_mode, &from_encoding, &from_encoding_len) == FAILURE)
- RETURN_FALSE;
-
- newstr = php_unicode_convert_case(case_mode, str, (size_t) str_len, &ret_len, from_encoding TSRMLS_CC);
-
- if (newstr) {
- RETVAL_STRINGL(newstr, ret_len, 0);
- }
-}
-/* }}} */
-
-/* {{{ proto string mb_strtoupper(string sourcestring [, string encoding])
- * Returns a uppercased version of sourcestring
- */
-PHP_FUNCTION(mb_strtoupper)
-{
- char *str, *from_encoding = (char*)mbfl_no2preferred_mime_name(MBSTRG(current_internal_encoding));
- int str_len, from_encoding_len;
- char *newstr;
- size_t ret_len;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|s!", &str, &str_len,
- &from_encoding, &from_encoding_len) == FAILURE) {
- return;
- }
- newstr = php_unicode_convert_case(PHP_UNICODE_CASE_UPPER, str, (size_t) str_len, &ret_len, from_encoding TSRMLS_CC);
-
- if (newstr) {
- RETURN_STRINGL(newstr, ret_len, 0);
- }
- RETURN_FALSE;
-}
-/* }}} */
-
-/* {{{ proto string mb_strtolower(string sourcestring [, string encoding])
- * Returns a lowercased version of sourcestring
- */
-PHP_FUNCTION(mb_strtolower)
-{
- char *str, *from_encoding = (char*)mbfl_no2preferred_mime_name(MBSTRG(current_internal_encoding));
- int str_len, from_encoding_len;
- char *newstr;
- size_t ret_len;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|s!", &str, &str_len,
- &from_encoding, &from_encoding_len) == FAILURE) {
- return;
- }
- newstr = php_unicode_convert_case(PHP_UNICODE_CASE_LOWER, str, (size_t) str_len, &ret_len, from_encoding TSRMLS_CC);
-
- if (newstr) {
- RETURN_STRINGL(newstr, ret_len, 0);
- }
- RETURN_FALSE;
-}
-/* }}} */
-
-/* {{{ proto string mb_detect_encoding(string str [, mixed encoding_list [, bool strict]])
- Encodings of the given string is returned (as a string) */
-PHP_FUNCTION(mb_detect_encoding)
-{
- pval **arg_str, **arg_list, **arg_strict;
- mbfl_string string;
- const char *ret;
- enum mbfl_no_encoding *elist;
- int size, *list, strict = 0;
-
- if (ZEND_NUM_ARGS() == 1) {
- if (zend_get_parameters_ex(1, &arg_str) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- } else if (ZEND_NUM_ARGS() == 2) {
- if (zend_get_parameters_ex(2, &arg_str, &arg_list) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- } else if (ZEND_NUM_ARGS() == 3) {
- if (zend_get_parameters_ex(3, &arg_str, &arg_list, &arg_strict) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- } else {
- WRONG_PARAM_COUNT;
- }
-
- /* make encoding list */
- list = NULL;
- size = 0;
- if (ZEND_NUM_ARGS() >= 2 && Z_STRVAL_PP(arg_list)) {
- switch (Z_TYPE_PP(arg_list)) {
- case IS_ARRAY:
- if (!php_mb_parse_encoding_array(*arg_list, &list, &size, 0 TSRMLS_CC)) {
- if (list) {
- efree(list);
- size = 0;
- }
- }
- break;
- default:
- convert_to_string_ex(arg_list);
- 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);
- size = 0;
- }
- }
- break;
- }
- if (size <= 0) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Illegal argument");
- }
- }
-
- if (ZEND_NUM_ARGS() == 3) {
- convert_to_long_ex(arg_strict);
- strict = Z_LVAL_PP(arg_strict);
- }
-
- if (size > 0 && list != NULL) {
- elist = list;
- } else {
- elist = MBSTRG(current_detect_order_list);
- size = MBSTRG(current_detect_order_list_size);
- }
-
- convert_to_string_ex(arg_str);
- mbfl_string_init(&string);
- string.no_language = MBSTRG(current_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);
- if (list != NULL) {
- efree((void *)list);
- }
- if (ret != NULL) {
- RETVAL_STRING((char *)ret, 1);
- } else {
- RETVAL_FALSE;
- }
-}
-/* }}} */
-
-/* {{{ proto array mb_list_encodings()
- Returns an array of all supported encodings */
-PHP_FUNCTION(mb_list_encodings)
-{
- const mbfl_encoding **encodings;
- const mbfl_encoding *encoding;
- int i;
-
- array_init(return_value);
- i = 0;
- encodings = mbfl_get_supported_encodings();
- while ((encoding = encodings[i++]) != NULL) {
- add_next_index_string(return_value, (char *) encoding->name, 1);
- }
-}
-/* }}} */
-
-
-/* {{{ proto string mb_encode_mimeheader(string str [, string charset [, string transfer-encoding [, string linefeed]]])
- Converts the string to MIME "encoded-word" in the format of =?charset?(B|Q)?encoded_string?= */
-PHP_FUNCTION(mb_encode_mimeheader)
-{
- enum mbfl_no_encoding charset, transenc;
- mbfl_string string, result, *ret;
- char *charset_name = NULL;
- int charset_name_len;
- char *trans_enc_name = NULL;
- int trans_enc_name_len;
- char *linefeed = "\r\n";
- int linefeed_len;
-
- mbfl_string_init(&string);
- string.no_language = MBSTRG(current_language);
- string.no_encoding = MBSTRG(current_internal_encoding);
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|sss", (char **)&string.val, &string.len, &charset_name, &charset_name_len, &trans_enc_name, &trans_enc_name_len, &linefeed, &linefeed_len) == FAILURE) {
- return;
- }
-
- charset = mbfl_no_encoding_pass;
- transenc = mbfl_no_encoding_base64;
-
- if (charset_name != NULL) {
- charset = mbfl_name2no_encoding(charset_name);
- if (charset == mbfl_no_encoding_invalid) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unknown encoding \"%s\"", charset_name);
- RETURN_FALSE;
- }
- } else {
- const mbfl_language *lang = mbfl_no2language(MBSTRG(current_language));
- if (lang != NULL) {
- charset = lang->mail_charset;
- transenc = lang->mail_header_encoding;
- }
- }
-
- if (trans_enc_name != NULL) {
- if (*trans_enc_name == 'B' || *trans_enc_name == 'b') {
- transenc = mbfl_no_encoding_base64;
- } else if (*trans_enc_name == 'Q' || *trans_enc_name == 'q') {
- transenc = mbfl_no_encoding_qprint;
- }
- }
-
- mbfl_string_init(&result);
- ret = mbfl_mime_header_encode(&string, &result, charset, transenc, linefeed, 0);
- if (ret != NULL) {
- RETVAL_STRINGL((char *)ret->val, ret->len, 0) /* the string is already strdup()'ed */
- } else {
- RETVAL_FALSE;
- }
-}
-/* }}} */
-
-/* {{{ proto string mb_decode_mimeheader(string string)
- Decodes the MIME "encoded-word" in the string */
-PHP_FUNCTION(mb_decode_mimeheader)
-{
- mbfl_string string, result, *ret;
-
- mbfl_string_init(&string);
- string.no_language = MBSTRG(current_language);
- string.no_encoding = MBSTRG(current_internal_encoding);
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", (char **)&string.val, &string.len) == FAILURE) {
- return;
- }
-
- mbfl_string_init(&result);
- ret = mbfl_mime_header_decode(&string, &result, MBSTRG(current_internal_encoding));
- if (ret != NULL) {
- RETVAL_STRINGL((char *)ret->val, ret->len, 0) /* the string is already strdup()'ed */
- } else {
- RETVAL_FALSE;
- }
-}
-/* }}} */
-
-/* {{{ proto string mb_convert_kana(string str [, string option] [, string encoding])
- Conversion between full-width character and half-width character (Japanese) */
-PHP_FUNCTION(mb_convert_kana)
-{
- int opt, i;
- mbfl_string string, result, *ret;
- char *optstr = NULL;
- int optstr_len;
- char *encname = NULL;
- int encname_len;
-
- mbfl_string_init(&string);
- string.no_language = MBSTRG(current_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) {
- return;
- }
-
- /* option */
- if (optstr != NULL) {
- char *p = optstr;
- int n = optstr_len;
- i = 0;
- opt = 0;
- while (i < n) {
- i++;
- switch (*p++) {
- case 'A':
- opt |= 0x1;
- break;
- case 'a':
- opt |= 0x10;
- break;
- case 'R':
- opt |= 0x2;
- break;
- case 'r':
- opt |= 0x20;
- break;
- case 'N':
- opt |= 0x4;
- break;
- case 'n':
- opt |= 0x40;
- break;
- case 'S':
- opt |= 0x8;
- break;
- case 's':
- opt |= 0x80;
- break;
- case 'K':
- opt |= 0x100;
- break;
- case 'k':
- opt |= 0x1000;
- break;
- case 'H':
- opt |= 0x200;
- break;
- case 'h':
- opt |= 0x2000;
- break;
- case 'V':
- opt |= 0x800;
- break;
- case 'C':
- opt |= 0x10000;
- break;
- case 'c':
- opt |= 0x20000;
- break;
- case 'M':
- opt |= 0x100000;
- break;
- case 'm':
- opt |= 0x200000;
- break;
- }
- }
- } else {
- opt = 0x900;
- }
-
- /* encoding */
- if (encname != NULL) {
- string.no_encoding = mbfl_name2no_encoding(encname);
- if (string.no_encoding == mbfl_no_encoding_invalid) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unknown encoding \"%s\"", encname);
- RETURN_FALSE;
- }
- }
-
- ret = mbfl_ja_jp_hantozen(&string, &result, opt);
- if (ret != NULL) {
- RETVAL_STRINGL((char *)ret->val, ret->len, 0); /* the string is already strdup()'ed */
- } else {
- RETVAL_FALSE;
- }
-}
-/* }}} */
-
-#define PHP_MBSTR_STACK_BLOCK_SIZE 32
-
-/* {{{ proto string mb_convert_variables(string to-encoding, mixed from-encoding [, mixed ...])
- Converts the string resource in variables to desired encoding */
-PHP_FUNCTION(mb_convert_variables)
-{
- pval ***args, ***stack, **var, **hash_entry;
- HashTable *target_hash;
- mbfl_string string, result, *ret;
- enum mbfl_no_encoding from_encoding, to_encoding;
- mbfl_encoding_detector *identd;
- mbfl_buffer_converter *convd;
- int n, argc, stack_level, stack_max, elistsz;
- enum mbfl_no_encoding *elist;
- char *name;
- void *ptmp;
-
- argc = ZEND_NUM_ARGS();
- if (argc < 3) {
- WRONG_PARAM_COUNT;
- }
- args = (pval ***)ecalloc(argc, sizeof(pval **));
- if (zend_get_parameters_array_ex(argc, args) == FAILURE) {
- efree((void *)args);
- WRONG_PARAM_COUNT;
- }
-
- /* new encoding */
- convert_to_string_ex(args[0]);
- to_encoding = mbfl_name2no_encoding(Z_STRVAL_PP(args[0]));
- if (to_encoding == mbfl_no_encoding_invalid) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unknown encoding \"%s\"", Z_STRVAL_PP(args[0]));
- efree((void *)args);
- RETURN_FALSE;
- }
-
- /* initialize string */
- mbfl_string_init(&string);
- mbfl_string_init(&result);
- from_encoding = MBSTRG(current_internal_encoding);
- string.no_encoding = from_encoding;
- string.no_language = MBSTRG(current_language);
-
- /* pre-conversion encoding */
- elist = NULL;
- elistsz = 0;
- switch (Z_TYPE_PP(args[1])) {
- case IS_ARRAY:
- php_mb_parse_encoding_array(*args[1], &elist, &elistsz, 0 TSRMLS_CC);
- break;
- default:
- convert_to_string_ex(args[1]);
- php_mb_parse_encoding_list(Z_STRVAL_PP(args[1]), Z_STRLEN_PP(args[1]), &elist, &elistsz, 0 TSRMLS_CC);
- break;
- }
- if (elistsz <= 0) {
- from_encoding = mbfl_no_encoding_pass;
- } else if (elistsz == 1) {
- from_encoding = *elist;
- } else {
- /* auto detect */
- from_encoding = mbfl_no_encoding_invalid;
- stack_max = PHP_MBSTR_STACK_BLOCK_SIZE;
- stack = (pval ***)safe_emalloc(stack_max, sizeof(pval **), 0);
- stack_level = 0;
- identd = mbfl_encoding_detector_new(elist, elistsz);
- if (identd != NULL) {
- n = 2;
- while (n < argc || stack_level > 0) {
- if (stack_level <= 0) {
- var = args[n++];
- if (Z_TYPE_PP(var) == IS_ARRAY || Z_TYPE_PP(var) == IS_OBJECT) {
- target_hash = HASH_OF(*var);
- if (target_hash != NULL) {
- zend_hash_internal_pointer_reset(target_hash);
- }
- }
- } else {
- stack_level--;
- var = stack[stack_level];
- }
- if (Z_TYPE_PP(var) == IS_ARRAY || Z_TYPE_PP(var) == IS_OBJECT) {
- target_hash = HASH_OF(*var);
- if (target_hash != NULL) {
- while (zend_hash_get_current_data(target_hash, (void **) &hash_entry) != FAILURE) {
- zend_hash_move_forward(target_hash);
- if (Z_TYPE_PP(hash_entry) == IS_ARRAY || Z_TYPE_PP(hash_entry) == IS_OBJECT) {
- if (stack_level >= stack_max) {
- stack_max += PHP_MBSTR_STACK_BLOCK_SIZE;
- ptmp = erealloc(stack, sizeof(pval **)*stack_max);
- stack = (pval ***)ptmp;
- }
- stack[stack_level] = var;
- stack_level++;
- var = hash_entry;
- target_hash = HASH_OF(*var);
- if (target_hash != NULL) {
- zend_hash_internal_pointer_reset(target_hash);
- continue;
- }
- } else if (Z_TYPE_PP(hash_entry) == IS_STRING) {
- string.val = (unsigned char *)Z_STRVAL_PP(hash_entry);
- string.len = Z_STRLEN_PP(hash_entry);
- if (mbfl_encoding_detector_feed(identd, &string)) {
- goto detect_end; /* complete detecting */
- }
- }
- }
- }
- } else if (Z_TYPE_PP(var) == IS_STRING) {
- string.val = (unsigned char *)Z_STRVAL_PP(var);
- string.len = Z_STRLEN_PP(var);
- if (mbfl_encoding_detector_feed(identd, &string)) {
- goto detect_end; /* complete detecting */
- }
- }
- }
-detect_end:
- from_encoding = mbfl_encoding_detector_judge(identd);
- mbfl_encoding_detector_delete(identd);
- }
- efree(stack);
-
- if (from_encoding == mbfl_no_encoding_invalid) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to detect encoding");
- from_encoding = mbfl_no_encoding_pass;
- }
- }
- if (elist != NULL) {
- efree((void *)elist);
- }
- /* create converter */
- convd = NULL;
- if (from_encoding != mbfl_no_encoding_pass) {
- convd = mbfl_buffer_converter_new(from_encoding, to_encoding, 0);
- if (convd == NULL) {
- 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));
- }
-
- /* convert */
- if (convd != NULL) {
- stack_max = PHP_MBSTR_STACK_BLOCK_SIZE;
- stack = (pval ***)safe_emalloc(stack_max, sizeof(pval **), 0);
- stack_level = 0;
- n = 2;
- while (n < argc || stack_level > 0) {
- if (stack_level <= 0) {
- var = args[n++];
- if (Z_TYPE_PP(var) == IS_ARRAY || Z_TYPE_PP(var) == IS_OBJECT) {
- target_hash = HASH_OF(*var);
- if (target_hash != NULL) {
- zend_hash_internal_pointer_reset(target_hash);
- }
- }
- } else {
- stack_level--;
- var = stack[stack_level];
- }
- if (Z_TYPE_PP(var) == IS_ARRAY || Z_TYPE_PP(var) == IS_OBJECT) {
- target_hash = HASH_OF(*var);
- if (target_hash != NULL) {
- while (zend_hash_get_current_data(target_hash, (void **) &hash_entry) != FAILURE) {
- zend_hash_move_forward(target_hash);
- if (Z_TYPE_PP(hash_entry) == IS_ARRAY || Z_TYPE_PP(hash_entry) == IS_OBJECT) {
- if (stack_level >= stack_max) {
- stack_max += PHP_MBSTR_STACK_BLOCK_SIZE;
- ptmp = erealloc(stack, sizeof(pval **)*stack_max);
- stack = (pval ***)ptmp;
- }
- stack[stack_level] = var;
- stack_level++;
- var = hash_entry;
- SEPARATE_ZVAL(hash_entry);
- target_hash = HASH_OF(*var);
- if (target_hash != NULL) {
- zend_hash_internal_pointer_reset(target_hash);
- continue;
- }
- } else if (Z_TYPE_PP(hash_entry) == IS_STRING) {
- string.val = (unsigned char *)Z_STRVAL_PP(hash_entry);
- string.len = Z_STRLEN_PP(hash_entry);
- ret = mbfl_buffer_converter_feed_result(convd, &string, &result);
- if (ret != NULL) {
- if ((*hash_entry)->refcount > 1) {
- ZVAL_DELREF(*hash_entry);
- MAKE_STD_ZVAL(*hash_entry);
- } else {
- zval_dtor(*hash_entry);
- }
- ZVAL_STRINGL(*hash_entry, ret->val, ret->len, 0);
- }
- }
- }
- }
- } else if (Z_TYPE_PP(var) == IS_STRING) {
- string.val = (unsigned char *)Z_STRVAL_PP(var);
- string.len = Z_STRLEN_PP(var);
- ret = mbfl_buffer_converter_feed_result(convd, &string, &result);
- if (ret != NULL) {
- zval_dtor(*var);
- ZVAL_STRINGL(*var, ret->val, ret->len, 0);
- }
- }
- }
- efree(stack);
-
- mbfl_buffer_converter_delete(convd);
- }
-
- efree((void *)args);
-
- name = (char *)mbfl_no_encoding2name(from_encoding);
- if (name != NULL) {
- RETURN_STRING(name, 1);
- } else {
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-/* {{{ HTML numeric entity */
-/* {{{ static void php_mb_numericentity_exec() */
-static void
-php_mb_numericentity_exec(INTERNAL_FUNCTION_PARAMETERS, int type)
-{
- pval **arg1, **arg2, **arg3, **hash_entry;
- HashTable *target_hash;
- int argc, i, *convmap, *mapelm, mapsize=0;
- mbfl_string string, result, *ret;
- enum mbfl_no_encoding no_encoding;
-
- argc = ZEND_NUM_ARGS();
- if ((argc == 2 && zend_get_parameters_ex(2, &arg1, &arg2) == FAILURE) ||
- (argc == 3 && zend_get_parameters_ex(3, &arg1, &arg2, &arg3) == FAILURE) ||
- argc < 2 || argc > 3) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_string_ex(arg1);
- mbfl_string_init(&string);
- string.no_language = MBSTRG(current_language);
- string.no_encoding = MBSTRG(current_internal_encoding);
- string.val = (unsigned char *)Z_STRVAL_PP(arg1);
- string.len = Z_STRLEN_PP(arg1);
-
- /* encoding */
- if (argc == 3) {
- convert_to_string_ex(arg3);
- no_encoding = mbfl_name2no_encoding(Z_STRVAL_PP(arg3));
- if (no_encoding == mbfl_no_encoding_invalid) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unknown encoding \"%s\"", Z_STRVAL_PP(arg3));
- RETURN_FALSE;
- } else {
- string.no_encoding = no_encoding;
- }
- }
-
- /* conversion map */
- convmap = NULL;
- if (Z_TYPE_PP(arg2) == IS_ARRAY){
- target_hash = Z_ARRVAL_PP(arg2);
- zend_hash_internal_pointer_reset(target_hash);
- i = zend_hash_num_elements(target_hash);
- if (i > 0) {
- convmap = (int *)safe_emalloc(i, sizeof(int), 0);
- mapelm = convmap;
- mapsize = 0;
- while (i > 0) {
- if (zend_hash_get_current_data(target_hash, (void **) &hash_entry) == FAILURE) {
- break;
- }
- convert_to_long_ex(hash_entry);
- *mapelm++ = Z_LVAL_PP(hash_entry);
- mapsize++;
- i--;
- zend_hash_move_forward(target_hash);
- }
- }
- }
- if (convmap == NULL) {
- RETURN_FALSE;
- }
- mapsize /= 4;
-
- ret = mbfl_html_numeric_entity(&string, &result, convmap, mapsize, type);
- if (ret != NULL) {
- RETVAL_STRINGL((char *)ret->val, ret->len, 0);
- } else {
- RETVAL_FALSE;
- }
- efree((void *)convmap);
-}
-/* }}} */
-
-/* {{{ proto string mb_encode_numericentity(string string, array convmap [, string encoding])
- Converts specified characters to HTML numeric entities */
-PHP_FUNCTION(mb_encode_numericentity)
-{
- php_mb_numericentity_exec(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0);
-}
-/* }}} */
-
-/* {{{ proto string mb_decode_numericentity(string string, array convmap [, string encoding])
- Converts HTML numeric entities to character code */
-PHP_FUNCTION(mb_decode_numericentity)
-{
- php_mb_numericentity_exec(INTERNAL_FUNCTION_PARAM_PASSTHRU, 1);
-}
-/* }}} */
-/* }}} */
-
-/* {{{ proto int mb_send_mail(string to, string subject, string message [, string additional_headers [, string additional_parameters]])
- * Sends an email message with MIME scheme
- */
-#if HAVE_SENDMAIL
-
-#define APPEND_ONE_CHAR(ch) do { \
- if (token.a > 0) { \
- smart_str_appendc(&token, ch); \
- } else {\
- token.len++; \
- } \
-} while (0)
-
-#define SEPARATE_SMART_STR(str) do {\
- if ((str)->a == 0) { \
- char *tmp_ptr; \
- (str)->a = 1; \
- while ((str)->a < (str)->len) { \
- (str)->a <<= 1; \
- } \
- tmp_ptr = emalloc((str)->a + 1); \
- memcpy(tmp_ptr, (str)->c, (str)->len); \
- (str)->c = tmp_ptr; \
- } \
-} while (0)
-
-static void my_smart_str_dtor(smart_str *s)
-{
- if (s->a > 0) {
- smart_str_free(s);
- }
-}
-
-static int _php_mbstr_parse_mail_headers(HashTable *ht, const char *str, size_t str_len)
-{
- const char *ps;
- size_t icnt;
- int state = 0;
- int crlf_state = -1;
-
- smart_str token = { 0, 0, 0 };
- smart_str fld_name = { 0, 0, 0 }, fld_val = { 0, 0, 0 };
-
- ps = str;
- icnt = str_len;
-
- /*
- * C o n t e n t - T y p e : t e x t / h t m l \r\n
- * ^ ^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^^^^^^^^^^^^^^^ ^^^^
- * state 0 1 2 3
- *
- * C o n t e n t - T y p e : t e x t / h t m l \r\n
- * ^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^
- * crlf_state -1 0 1 -1
- *
- */
-
- while (icnt > 0) {
- switch (*ps) {
- case ':':
- if (crlf_state == 1) {
- APPEND_ONE_CHAR('\r');
- }
-
- if (state == 0 || state == 1) {
- fld_name = token;
-
- state = 2;
- } else {
- APPEND_ONE_CHAR(*ps);
- }
-
- crlf_state = 0;
- break;
-
- case '\n':
- if (crlf_state == -1) {
- goto out;
- }
- crlf_state = -1;
- break;
-
- case '\r':
- if (crlf_state == 1) {
- APPEND_ONE_CHAR('\r');
- } else {
- crlf_state = 1;
- }
- break;
-
- case ' ': case '\t':
- if (crlf_state == -1) {
- if (state == 3) {
- /* continuing from the previous line */
- SEPARATE_SMART_STR(&token);
- state = 4;
- } else {
- /* simply skipping this new line */
- state = 5;
- }
- } else {
- if (crlf_state == 1) {
- APPEND_ONE_CHAR('\r');
- }
- if (state == 1 || state == 3) {
- APPEND_ONE_CHAR(*ps);
- }
- }
- crlf_state = 0;
- break;
-
- default:
- switch (state) {
- case 0:
- token.c = (char *)ps;
- token.len = 0;
- token.a = 0;
- state = 1;
- break;
-
- case 2:
- if (crlf_state != -1) {
- token.c = (char *)ps;
- token.len = 0;
- token.a = 0;
-
- state = 3;
- break;
- }
- /* break is missing intentionally */
-
- case 3:
- if (crlf_state == -1) {
- fld_val = token;
-
- if (fld_name.c != NULL && fld_val.c != NULL) {
- char *dummy;
-
- /* FIXME: some locale free implementation is
- * really required here,,, */
- SEPARATE_SMART_STR(&fld_name);
- php_strtoupper(fld_name.c, fld_name.len);
-
- zend_hash_update(ht, (char *)fld_name.c, fld_name.len, &fld_val, sizeof(smart_str), (void **)&dummy);
-
- my_smart_str_dtor(&fld_name);
- }
-
- memset(&fld_name, 0, sizeof(smart_str));
- memset(&fld_val, 0, sizeof(smart_str));
-
- token.c = (char *)ps;
- token.len = 0;
- token.a = 0;
-
- state = 1;
- }
- break;
-
- case 4:
- APPEND_ONE_CHAR(' ');
- state = 3;
- break;
- }
-
- if (crlf_state == 1) {
- APPEND_ONE_CHAR('\r');
- }
-
- APPEND_ONE_CHAR(*ps);
-
- crlf_state = 0;
- break;
- }
- ps++, icnt--;
- }
-out:
- if (state == 2) {
- token.c = "";
- token.len = 0;
- token.a = 0;
-
- state = 3;
- }
- if (state == 3) {
- fld_val = token;
-
- if (fld_name.c != NULL && fld_val.c != NULL) {
- void *dummy;
-
- /* FIXME: some locale free implementation is
- * really required here,,, */
- SEPARATE_SMART_STR(&fld_name);
- php_strtoupper(fld_name.c, fld_name.len);
-
- zend_hash_update(ht, (char *)fld_name.c, fld_name.len, &fld_val, sizeof(smart_str), (void **)&dummy);
-
- my_smart_str_dtor(&fld_name);
- }
- }
- return state;
-}
-
-PHP_FUNCTION(mb_send_mail)
-{
- int n;
- char *to=NULL;
- int to_len;
- char *message=NULL;
- int message_len;
- char *headers=NULL;
- int headers_len;
- char *subject=NULL;
- int subject_len;
- char *extra_cmd=NULL;
- int extra_cmd_len;
- struct {
- int cnt_type:1;
- int cnt_trans_enc:1;
- } suppressed_hdrs = { 0, 0 };
-
- char *message_buf=NULL, *subject_buf=NULL, *p;
- mbfl_string orig_str, conv_str;
- mbfl_string *pstr; /* pointer to mbfl string for return value */
- enum mbfl_no_encoding
- tran_cs, /* transfar text charset */
- head_enc, /* header transfar encoding */
- body_enc; /* body transfar encoding */
- mbfl_memory_device device; /* automatic allocateable buffer for additional header */
- const mbfl_language *lang;
- int err = 0;
- HashTable ht_headers;
- smart_str *s;
- extern void mbfl_memory_device_unput(mbfl_memory_device *device);
-
- /* initialize */
- mbfl_memory_device_init(&device, 0, 0);
- mbfl_string_init(&orig_str);
- mbfl_string_init(&conv_str);
-
- /* character-set, transfer-encoding */
- tran_cs = mbfl_no_encoding_utf8;
- head_enc = mbfl_no_encoding_base64;
- body_enc = mbfl_no_encoding_base64;
- lang = mbfl_no2language(MBSTRG(current_language));
- if (lang != NULL) {
- tran_cs = lang->mail_charset;
- head_enc = lang->mail_header_encoding;
- body_enc = lang->mail_body_encoding;
- }
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "sss|ss", &to, &to_len, &subject, &subject_len, &message, &message_len, &headers, &headers_len, &extra_cmd, &extra_cmd_len) == FAILURE) {
- return;
- }
-
- zend_hash_init(&ht_headers, 0, NULL, (dtor_func_t) my_smart_str_dtor, 0);
-
- if (headers != NULL) {
- _php_mbstr_parse_mail_headers(&ht_headers, headers, headers_len);
- }
-
- if (zend_hash_find(&ht_headers, "CONTENT-TYPE", sizeof("CONTENT-TYPE") - 1, (void **)&s) == SUCCESS) {
- char *tmp;
- char *param_name;
- char *charset = NULL;
-
- SEPARATE_SMART_STR(s);
- smart_str_0(s);
-
- p = strchr(s->c, ';');
-
- if (p != NULL) {
- /* skipping the padded spaces */
- do {
- ++p;
- } while (*p == ' ' || *p == '\t');
-
- if (*p != '\0') {
- if ((param_name = php_strtok_r(p, "= ", &tmp)) != NULL) {
- if (strcasecmp(param_name, "charset") == 0) {
- enum mbfl_no_encoding _tran_cs = tran_cs;
-
- charset = php_strtok_r(NULL, "= ", &tmp);
- if (charset != NULL) {
- _tran_cs = mbfl_name2no_encoding(charset);
- }
-
- if (_tran_cs == mbfl_no_encoding_invalid) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unsupported charset \"%s\" - will be regarded as ascii", charset);
- _tran_cs = mbfl_no_encoding_ascii;
- }
- tran_cs = _tran_cs;
- }
- }
- }
- }
- suppressed_hdrs.cnt_type = 1;
- }
-
- if (zend_hash_find(&ht_headers, "CONTENT-TRANSFER-ENCODING", sizeof("CONTENT-TRANSFER-ENCODING") - 1, (void **)&s) == SUCCESS) {
- enum mbfl_no_encoding _body_enc;
- SEPARATE_SMART_STR(s);
- smart_str_0(s);
-
- _body_enc = mbfl_name2no_encoding(s->c);
- switch (_body_enc) {
- case mbfl_no_encoding_base64:
- case mbfl_no_encoding_7bit:
- case mbfl_no_encoding_8bit:
- body_enc = _body_enc;
- break;
-
- default:
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unsupported transfer encoding \"%s\" - will be regarded as 8bit", s->c);
- body_enc = mbfl_no_encoding_8bit;
- break;
- }
- suppressed_hdrs.cnt_trans_enc = 1;
- }
-
- /* To: */
- if (to == NULL || to_len <= 0) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Missing To: field");
- err = 1;
- }
-
- /* Subject: */
- if (subject != NULL && subject_len >= 0) {
- orig_str.no_language = MBSTRG(current_language);
- orig_str.val = (unsigned char *)subject;
- orig_str.len = subject_len;
- orig_str.no_encoding = MBSTRG(current_internal_encoding);
- if (orig_str.no_encoding == mbfl_no_encoding_invalid
- || orig_str.no_encoding == mbfl_no_encoding_pass) {
- orig_str.no_encoding = mbfl_identify_encoding_no(&orig_str, MBSTRG(current_detect_order_list), MBSTRG(current_detect_order_list_size));
- }
- pstr = mbfl_mime_header_encode(&orig_str, &conv_str, tran_cs, head_enc, "\n", sizeof("Subject: [PHP-jp nnnnnnnn]"));
- if (pstr != NULL) {
- subject_buf = subject = (char *)pstr->val;
- }
- } else {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Missing Subject: field");
- err = 1;
- }
-
- /* message body */
- if (message != NULL) {
- orig_str.no_language = MBSTRG(current_language);
- orig_str.val = message;
- orig_str.len = message_len;
- orig_str.no_encoding = MBSTRG(current_internal_encoding);
-
- if (orig_str.no_encoding == mbfl_no_encoding_invalid
- || orig_str.no_encoding == mbfl_no_encoding_pass) {
- orig_str.no_encoding = mbfl_identify_encoding_no(&orig_str, MBSTRG(current_detect_order_list), MBSTRG(current_detect_order_list_size));
- }
-
- pstr = NULL;
- {
- mbfl_string tmpstr;
-
- if (mbfl_convert_encoding(&orig_str, &tmpstr, tran_cs) != NULL) {
- tmpstr.no_encoding=mbfl_no_encoding_8bit;
- pstr = mbfl_convert_encoding(&tmpstr, &conv_str, body_enc);
- efree(tmpstr.val);
- }
- }
- if (pstr != NULL) {
- message_buf = message = (char *)pstr->val;
- }
- } else {
- /* this is not really an error, so it is allowed. */
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Empty message body");
- message = NULL;
- }
-
- /* other headers */
-#define PHP_MBSTR_MAIL_MIME_HEADER1 "Mime-Version: 1.0"
-#define PHP_MBSTR_MAIL_MIME_HEADER2 "Content-Type: text/plain"
-#define PHP_MBSTR_MAIL_MIME_HEADER3 "; charset="
-#define PHP_MBSTR_MAIL_MIME_HEADER4 "Content-Transfer-Encoding: "
- if (headers != NULL) {
- p = headers;
- n = headers_len;
- mbfl_memory_device_strncat(&device, p, n);
- if (n > 0 && p[n - 1] != '\n') {
- mbfl_memory_device_strncat(&device, "\n", 1);
- }
- }
-
- mbfl_memory_device_strncat(&device, PHP_MBSTR_MAIL_MIME_HEADER1, sizeof(PHP_MBSTR_MAIL_MIME_HEADER1) - 1);
- mbfl_memory_device_strncat(&device, "\n", 1);
-
- if (!suppressed_hdrs.cnt_type) {
- mbfl_memory_device_strncat(&device, PHP_MBSTR_MAIL_MIME_HEADER2, sizeof(PHP_MBSTR_MAIL_MIME_HEADER2) - 1);
-
- p = (char *)mbfl_no2preferred_mime_name(tran_cs);
- if (p != NULL) {
- mbfl_memory_device_strncat(&device, PHP_MBSTR_MAIL_MIME_HEADER3, sizeof(PHP_MBSTR_MAIL_MIME_HEADER3) - 1);
- mbfl_memory_device_strcat(&device, p);
- }
- mbfl_memory_device_strncat(&device, "\n", 1);
- }
- if (!suppressed_hdrs.cnt_trans_enc) {
- mbfl_memory_device_strncat(&device, PHP_MBSTR_MAIL_MIME_HEADER4, sizeof(PHP_MBSTR_MAIL_MIME_HEADER4) - 1);
- p = (char *)mbfl_no2preferred_mime_name(body_enc);
- if (p == NULL) {
- p = "7bit";
- }
- mbfl_memory_device_strcat(&device, p);
- mbfl_memory_device_strncat(&device, "\n", 1);
- }
-
- mbfl_memory_device_unput(&device);
- mbfl_memory_device_output('\0', &device);
- headers = (char *)device.buffer;
-
- if (!err && php_mail(to, subject, message, headers, extra_cmd TSRMLS_CC)) {
- RETVAL_TRUE;
- } else {
- RETVAL_FALSE;
- }
-
- if (subject_buf) {
- efree((void *)subject_buf);
- }
- if (message_buf) {
- efree((void *)message_buf);
- }
- mbfl_memory_device_clear(&device);
- zend_hash_destroy(&ht_headers);
-}
-
-#undef APPEND_ONE_CHAR
-#undef SEPARATE_SMART_STR
-#undef PHP_MBSTR_MAIL_MIME_HEADER1
-#undef PHP_MBSTR_MAIL_MIME_HEADER2
-#undef PHP_MBSTR_MAIL_MIME_HEADER3
-#undef PHP_MBSTR_MAIL_MIME_HEADER4
-
-#else /* HAVE_SENDMAIL */
-
-PHP_FUNCTION(mb_send_mail)
-{
- RETURN_FALSE;
-}
-
-#endif /* HAVE_SENDMAIL */
-
-/* }}} */
-
-/* {{{ proto string mb_get_info([string type])
- Returns the current settings of mbstring */
-PHP_FUNCTION(mb_get_info)
-{
- char *typ = NULL;
- int typ_len;
- char *name;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|s", &typ, &typ_len) == FAILURE) {
- RETURN_FALSE;
- }
-
- if (!strcasecmp("all", typ)) {
- array_init(return_value);
- if ((name = (char *)mbfl_no_encoding2name(MBSTRG(current_internal_encoding))) != NULL) {
- add_assoc_string(return_value, "internal_encoding", name, 1);
- }
- if ((name = (char *)mbfl_no_encoding2name(MBSTRG(http_input_identify))) != NULL) {
- add_assoc_string(return_value, "http_input", name, 1);
- }
- if ((name = (char *)mbfl_no_encoding2name(MBSTRG(current_http_output_encoding))) != NULL) {
- add_assoc_string(return_value, "http_output", name, 1);
- }
- if ((name = (char *)mbfl_no_encoding2name(MBSTRG(func_overload))) != NULL) {
- add_assoc_string(return_value, "func_overload", name, 1);
- }
- } else if (!strcasecmp("internal_encoding", typ)) {
- if ((name = (char *)mbfl_no_encoding2name(MBSTRG(current_internal_encoding))) != NULL) {
- RETVAL_STRING(name, 1);
- }
- } else if (!strcasecmp("http_input", typ)) {
- if ((name = (char *)mbfl_no_encoding2name(MBSTRG(http_input_identify))) != NULL) {
- RETVAL_STRING(name, 1);
- }
- } else if (!strcasecmp("http_output", typ)) {
- if ((name = (char *)mbfl_no_encoding2name(MBSTRG(current_http_output_encoding))) != NULL) {
- RETVAL_STRING(name, 1);
- }
- } else if (!strcasecmp("func_overload", typ)) {
- if ((name = (char *)mbfl_no_encoding2name(MBSTRG(func_overload))) != NULL) {
- RETVAL_STRING(name, 1);
- }
- } else {
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-/* {{{ MBSTRING_API int php_mb_encoding_translation() */
-MBSTRING_API int php_mb_encoding_translation(TSRMLS_D)
-{
- return MBSTRG(encoding_translation);
-}
-/* }}} */
-
-/* {{{ MBSTRING_API size_t php_mb_mbchar_bytes_ex() */
-MBSTRING_API size_t php_mb_mbchar_bytes_ex(const char *s, const mbfl_encoding *enc)
-{
- if (enc != NULL) {
- if (enc->flag & MBFL_ENCTYPE_MBCS) {
- if (enc->mblen_table != NULL) {
- if (s != NULL) return enc->mblen_table[*(unsigned char *)s];
- }
- } else if (enc->flag & (MBFL_ENCTYPE_WCS2BE | MBFL_ENCTYPE_WCS2LE)) {
- return 2;
- } else if (enc->flag & (MBFL_ENCTYPE_WCS4BE | MBFL_ENCTYPE_WCS4LE)) {
- return 4;
- }
- }
- return 1;
-}
-/* }}} */
-
-/* {{{ MBSTRING_API size_t php_mb_mbchar_bytes() */
-MBSTRING_API size_t php_mb_mbchar_bytes(const char *s TSRMLS_DC)
-{
- return php_mb_mbchar_bytes_ex(s,
- mbfl_no2encoding(MBSTRG(internal_encoding)));
-}
-/* }}} */
-
-/* {{{ MBSTRING_API char *php_mb_safe_strrchr_ex() */
-MBSTRING_API char *php_mb_safe_strrchr_ex(const char *s, unsigned int c, size_t nbytes, const mbfl_encoding *enc)
-{
- register const char *p = s;
- char *last=NULL;
-
- if (nbytes == (size_t)-1) {
- size_t nb = 0;
-
- while (*p != '\0') {
- if (nb == 0) {
- if ((unsigned char)*p == (unsigned char)c) {
- last = (char *)p;
- }
- nb = php_mb_mbchar_bytes_ex(p, enc);
- if (nb == 0) {
- return NULL; /* something is going wrong! */
- }
- }
- --nb;
- ++p;
- }
- } else {
- register size_t bcnt = nbytes;
- register size_t nbytes_char;
- while (bcnt > 0) {
- if ((unsigned char)*p == (unsigned char)c) {
- last = (char *)p;
- }
- nbytes_char = php_mb_mbchar_bytes_ex(p, enc);
- if (bcnt < nbytes_char) {
- return NULL;
- }
- p += nbytes_char;
- bcnt -= nbytes_char;
- }
- }
- return last;
-}
-/* }}} */
-
-/* {{{ MBSTRING_API char *php_mb_safe_strrchr() */
-MBSTRING_API char *php_mb_safe_strrchr(const char *s, unsigned int c, size_t nbytes TSRMLS_DC)
-{
- return php_mb_safe_strrchr_ex(s, c, nbytes,
- mbfl_no2encoding(MBSTRG(internal_encoding)));
-}
-/* }}} */
-
-/* {{{ MBSTRING_API char *php_mb_strrchr() */
-MBSTRING_API char *php_mb_strrchr(const char *s, char c TSRMLS_DC)
-{
- return php_mb_safe_strrchr(s, c, -1 TSRMLS_CC);
-}
-/* }}} */
-
-/* {{{ MBSTRING_API size_t php_mb_gpc_mbchar_bytes() */
-MBSTRING_API size_t php_mb_gpc_mbchar_bytes(const char *s TSRMLS_DC)
-{
-
- if (MBSTRG(http_input_identify) != mbfl_no_encoding_invalid){
- return php_mb_mbchar_bytes_ex(s,
- mbfl_no2encoding(MBSTRG(http_input_identify)));
- } else {
- return php_mb_mbchar_bytes_ex(s,
- mbfl_no2encoding(MBSTRG(internal_encoding)));
- }
-}
-/* }}} */
-
-/* {{{ MBSTRING_API int php_mb_gpc_encoding_converter() */
-MBSTRING_API int php_mb_gpc_encoding_converter(char **str, int *len, int num, const char *encoding_to, const char *encoding_from
- TSRMLS_DC)
-{
- int i;
- mbfl_string string, result, *ret = NULL;
- enum mbfl_no_encoding from_encoding, to_encoding;
- mbfl_buffer_converter *convd;
-
- if (encoding_to) {
- /* new encoding */
- to_encoding = mbfl_name2no_encoding(encoding_to);
- if (to_encoding == mbfl_no_encoding_invalid) {
- return -1;
- }
- } else {
- to_encoding = MBSTRG(current_internal_encoding);
- }
- if (encoding_from) {
- /* old encoding */
- from_encoding = mbfl_name2no_encoding(encoding_from);
- if (from_encoding == mbfl_no_encoding_invalid) {
- return -1;
- }
- } else {
- from_encoding = MBSTRG(http_input_identify);
- }
-
- if (from_encoding == mbfl_no_encoding_pass) {
- return 0;
- }
-
- /* initialize string */
- mbfl_string_init(&string);
- mbfl_string_init(&result);
- string.no_encoding = from_encoding;
- string.no_language = MBSTRG(current_language);
-
- for (i=0; i<num; i++){
- string.val = (char*)str[i];
- string.len = len[i];
-
- /* initialize converter */
- convd = mbfl_buffer_converter_new(from_encoding, to_encoding, string.len);
- if (convd == NULL) {
- return -1;
- }
- mbfl_buffer_converter_illegal_mode(convd, MBSTRG(current_filter_illegal_mode));
- mbfl_buffer_converter_illegal_substchar(convd, MBSTRG(current_filter_illegal_substchar));
-
- /* do it */
- ret = mbfl_buffer_converter_feed_result(convd, &string, &result);
- if (ret != NULL) {
- efree(str[i]);
- str[i] = ret->val;
- len[i] = ret->len;
- }
- mbfl_buffer_converter_delete(convd);
- }
-
- return ret ? 0 : -1;
-}
-
-/* {{{ MBSTRING_API int php_mb_gpc_encoding_detector()
- */
-MBSTRING_API int php_mb_gpc_encoding_detector(char **arg_string, int *arg_length, int num, char *arg_list TSRMLS_DC)
-{
- mbfl_string string;
- enum mbfl_no_encoding *elist;
- enum mbfl_no_encoding encoding = mbfl_no_encoding_invalid;
- mbfl_encoding_detector *identd = NULL;
-
- int size;
- enum mbfl_no_encoding *list;
-
- if (MBSTRG(http_input_list_size) == 1 &&
- MBSTRG(http_input_list)[0] == mbfl_no_encoding_pass) {
- MBSTRG(http_input_identify) = mbfl_no_encoding_pass;
- return SUCCESS;
- }
-
- if (MBSTRG(http_input_list_size) == 1 &&
- MBSTRG(http_input_list)[0] != mbfl_no_encoding_auto &&
- mbfl_no_encoding2name(MBSTRG(http_input_list)[0]) != NULL) {
- MBSTRG(http_input_identify) = MBSTRG(http_input_list)[0];
- return SUCCESS;
- }
-
- if (arg_list && strlen(arg_list)>0) {
- /* make encoding list */
- list = NULL;
- size = 0;
- php_mb_parse_encoding_list(arg_list, strlen(arg_list), &list, &size, 0 TSRMLS_CC);
-
- if (size > 0 && list != NULL) {
- elist = list;
- } else {
- elist = MBSTRG(current_detect_order_list);
- size = MBSTRG(current_detect_order_list_size);
- if (size <= 0){
- elist = MBSTRG(default_detect_order_list);
- size = MBSTRG(default_detect_order_list_size);
- }
- }
- } else {
- elist = MBSTRG(current_detect_order_list);
- size = MBSTRG(current_detect_order_list_size);
- if (size <= 0){
- elist = MBSTRG(default_detect_order_list);
- size = MBSTRG(default_detect_order_list_size);
- }
- }
-
- mbfl_string_init(&string);
- string.no_language = MBSTRG(current_language);
-
- identd = mbfl_encoding_detector_new(elist, size);
-
- if (identd) {
- int n = 0;
- while(n < num){
- string.val = (unsigned char *)arg_string[n];
- string.len = arg_length[n];
- if (mbfl_encoding_detector_feed(identd, &string)) {
- break;
- }
- n++;
- }
- encoding = mbfl_encoding_detector_judge(identd);
- mbfl_encoding_detector_delete(identd);
- }
-
- if (encoding != mbfl_no_encoding_invalid) {
- MBSTRG(http_input_identify) = encoding;
- return SUCCESS;
- } else {
- return FAILURE;
- }
-}
-/* }}} */
-
-#ifdef ZEND_MULTIBYTE
-/* {{{ MBSTRING_API int php_mb_set_zend_encoding() */
-MBSTRING_API int php_mb_set_zend_encoding(TSRMLS_D)
-{
- /* 'd better use mbfl_memory_device? */
- char *name, *list = NULL;
- int n, *entry, list_size = 0;
- zend_encoding_detector encoding_detector;
- zend_encoding_converter encoding_converter;
- zend_encoding_oddlen encoding_oddlen;
-
- /* notify script encoding to Zend Engine */
- entry = MBSTRG(script_encoding_list);
- n = MBSTRG(script_encoding_list_size);
- while (n > 0) {
- name = (char *)mbfl_no_encoding2name(*entry);
- if (name) {
- list_size += strlen(name) + 1;
- if (!list) {
- list = (char*)emalloc(list_size);
- *list = (char)NULL;
- } else {
- list = (char*)erealloc(list, list_size);
- strcat(list, ",");
- }
- strcat(list, name);
- }
- entry++;
- n--;
- }
- zend_multibyte_set_script_encoding(list, (list ? strlen(list) : 0) TSRMLS_CC);
- if (list) {
- efree(list);
- }
- encoding_detector = php_mb_encoding_detector;
- encoding_converter = php_mb_encoding_converter;
- encoding_oddlen = php_mb_oddlen;
-
- /* TODO: make independent from mbstring.encoding_translation? */
- if (MBSTRG(encoding_translation)) {
- /* notify internal encoding to Zend Engine */
- name = (char*)mbfl_no_encoding2name(MBSTRG(current_internal_encoding));
- zend_multibyte_set_internal_encoding(name, strlen(name) TSRMLS_CC);
- }
-
- zend_multibyte_set_functions(encoding_detector, encoding_converter, encoding_oddlen TSRMLS_CC);
-
- return 0;
-}
-/* }}} */
-
-/* {{{ char *php_mb_encoding_detector()
- * Interface for Zend Engine
- */
-char* php_mb_encoding_detector(const char *arg_string, int arg_length, char *arg_list TSRMLS_DC)
-{
- mbfl_string string;
- const char *ret;
- enum mbfl_no_encoding *elist;
- int size, *list;
-
- /* make encoding list */
- list = NULL;
- size = 0;
- php_mb_parse_encoding_list(arg_list, strlen(arg_list), &list, &size, 0 TSRMLS_CC);
- if (size <= 0) {
- return NULL;
- }
- if (size > 0 && list != NULL) {
- elist = list;
- } else {
- elist = MBSTRG(current_detect_order_list);
- size = MBSTRG(current_detect_order_list_size);
- }
-
- mbfl_string_init(&string);
- string.no_language = MBSTRG(current_language);
- string.val = (char*)arg_string;
- string.len = arg_length;
- ret = mbfl_identify_encoding_name(&string, elist, size, 0);
- if (list != NULL) {
- efree((void *)list);
- }
- if (ret != NULL) {
- return estrdup(ret);
- } else {
- return NULL;
- }
-}
-/* }}} */
-
-/* {{{ int php_mb_encoding_converter() */
-int php_mb_encoding_converter(char **to, int *to_length, const char *from,
- int from_length, const char *encoding_to, const char *encoding_from
- TSRMLS_DC)
-{
- mbfl_string string, result, *ret;
- enum mbfl_no_encoding from_encoding, to_encoding;
- mbfl_buffer_converter *convd;
-
- /* new encoding */
- to_encoding = mbfl_name2no_encoding(encoding_to);
- if (to_encoding == mbfl_no_encoding_invalid) {
- return -1;
- }
- /* old encoding */
- from_encoding = mbfl_name2no_encoding(encoding_from);
- if (from_encoding == mbfl_no_encoding_invalid) {
- return -1;
- }
- /* initialize string */
- mbfl_string_init(&string);
- mbfl_string_init(&result);
- string.no_encoding = from_encoding;
- string.no_language = MBSTRG(current_language);
- string.val = (char*)from;
- string.len = from_length;
-
- /* initialize converter */
- convd = mbfl_buffer_converter_new(from_encoding, to_encoding, string.len);
- if (convd == NULL) {
- return -1;
- }
- mbfl_buffer_converter_illegal_mode(convd, MBSTRG(current_filter_illegal_mode));
- mbfl_buffer_converter_illegal_substchar(convd, MBSTRG(current_filter_illegal_substchar));
-
- /* do it */
- ret = mbfl_buffer_converter_feed_result(convd, &string, &result);
- if (ret != NULL) {
- *to = ret->val;
- *to_length = ret->len;
- }
- mbfl_buffer_converter_delete(convd);
-
- return ret ? 0 : -1;
-}
-/* }}} */
-
-/* {{{ int php_mb_oddlen()
- * returns number of odd (e.g. appears only first byte of multibyte
- * character) chars
- */
-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_encoding = mbfl_name2no_encoding(encoding);
- mb_string.val = (char*)string;
- mb_string.len = length;
-
- if (mb_string.no_encoding == mbfl_no_encoding_invalid) {
- return 0;
- }
- return mbfl_oddlen(&mb_string);
-}
-/* }}} */
-#endif /* ZEND_MULTIBYTE */
-
-#endif /* HAVE_MBSTRING */
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- * vim600: fdm=marker
- * vim: noet sw=4 ts=4
- */
diff --git a/ext/mbstring/mbstring.dsp b/ext/mbstring/mbstring.dsp
deleted file mode 100644
index 1b678cc2ff..0000000000
--- a/ext/mbstring/mbstring.dsp
+++ /dev/null
@@ -1,1068 +0,0 @@
-# Microsoft Developer Studio Project File - Name="mbstring" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=mbstring - Win32 Debug_TS MBSTRING
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "mbstring.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "mbstring.mak" CFG="mbstring - Win32 Debug_TS MBSTRING"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "mbstring - Win32 Release_TS MBSTRING" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "mbstring - Win32 Debug_TS MBSTRING" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "mbstring - Win32 Release_TS MBSTRING"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "mbstring___Win32_Release_TS_MBSTRING"
-# PROP BASE Intermediate_Dir "mbstring___Win32_Release_TS_MBSTRING"
-# PROP BASE Ignore_Export_Lib 0
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release_TS"
-# PROP Intermediate_Dir "Release_TS"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MD /W3 /GX /O2 /I "..\.." /I "..\..\main" /I "..\..\Zend" /I "..\..\TSRM" /D ZEND_DEBUG=0 /D "_MBCS" /D "_USRDLL" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "COMPILE_DL_MBSTRING" /D ZTS=1 /D "ZEND_WIN32" /D "PHP_WIN32" /D MBSTRING_EXPORTS=1 /D HAVE_MBSTRING=1 /D HAVE_MBREGEX=1 /D HAVE_MBSTR_CN=1 /D HAVE_MBSTR_JA=1 /D HAVE_MBSTR_KR=1 /D HAVE_MBSTR_RU=1 /D HAVE_MBSTR_TW=1 /FR /YX /FD /c
-# ADD CPP /nologo /MD /W3 /GX /O2 /I "..\.." /I "..\..\main" /I "..\..\Zend" /I "..\..\TSRM" /I "libmbfl" /I "libmbfl\mbfl" /D ZEND_DEBUG=0 /D "MBSTRING_EXPORTS" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "COMPILE_DL_MBSTRING" /D ZTS=1 /D "ZEND_WIN32" /D "PHP_WIN32" /D HAVE_MBSTRING=1 /D HAVE_MBSTR_CN=1 /D HAVE_MBSTR_JA=1 /D HAVE_MBSTR_KR=1 /D HAVE_MBSTR_RU=1 /D HAVE_MBSTR_TW=1 /D MBFL_DLL_EXPORT=1 /D NOT_RUBY=1 /D "LIBMBFL_EXPORTS" /D "HAVE_STRICMP" /D "HAVE_CONFIG_H" /D "HAVE_STDLIB_H" /FR /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x407 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 php5ts.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 /out:"..\..\Release_TS/php_mbstring.dll" /libpath:"..\..\Release_TS" /libpath:"..\..\Release_TS_Inline"
-# ADD LINK32 php5ts.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 /out:"..\..\Release_TS/php_mbstring.dll" /libpath:"..\..\Release_TS" /libpath:"..\..\Release_TS_Inline"
-
-!ELSEIF "$(CFG)" == "mbstring - Win32 Debug_TS MBSTRING"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "mbstring___Win32_Debug_TS_MBSTRING"
-# PROP BASE Intermediate_Dir "mbstring___Win32_Debug_TS_MBSTRING"
-# PROP BASE Ignore_Export_Lib 0
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug_TS"
-# PROP Intermediate_Dir "Debug_TS"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "..\.." /I "..\..\main" /I "..\..\Zend" /I "..\..\TSRM" /D ZEND_DEBUG=1 /D "MBSTRING_EXPORTS" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "COMPILE_DL_MBSTRING" /D ZTS=1 /D "ZEND_WIN32" /D "PHP_WIN32" /D MBSTRING_EXPORTS=1 /D HAVE_MBSTRING=1 /D HAVE_MBREGEX=1 /D HAVE_MBSTR_CN=1 /D HAVE_MBSTR_JA=1 /D HAVE_MBSTR_KR=1 /D HAVE_MBSTR_RU=1 /D HAVE_MBSTR_TW=1 /YX /FD /GZ /c
-# ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "..\.." /I "..\..\main" /I "..\..\Zend" /I "..\..\TSRM" /I "libmbfl" /I "libmbfl\mbfl" /I "oniguruma" /D ZEND_DEBUG=1 /D MBSTRING_EXPORTS=1 /D HAVE_STDLIB_H=1 /D HAVE_STRING_H=1 /D "MBSTRING_EXPORTS" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "COMPILE_DL_MBSTRING" /D ZTS=1 /D "ZEND_WIN32" /D "PHP_WIN32" /D HAVE_MBSTRING=1 /D HAVE_MBSTR_CN=1 /D HAVE_MBSTR_JA=1 /D HAVE_MBSTR_KR=1 /D HAVE_MBSTR_RU=1 /D HAVE_MBSTR_TW=1 /D MBFL_DLL_EXPORT=1 /D NOT_RUBY=1 /D "LIBMBFL_EXPORTS" /D "HAVE_STRICMP" /D "HAVE_CONFIG_H" /D "HAVE_STDLIB_H" /FR /YX /FD /GZ /c
-# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x407 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 php5ts_debug.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /out:"..\..\Debug_TS/php_mbstring.dll" /pdbtype:sept /libpath:"..\..\Debug_TS"
-# ADD LINK32 php5ts_debug.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /out:"..\..\Debug_TS/php_mbstring.dll" /pdbtype:sept /libpath:"..\..\Debug_TS"
-
-!ENDIF
-
-# Begin Target
-
-# Name "mbstring - Win32 Release_TS MBSTRING"
-# Name "mbstring - Win32 Debug_TS MBSTRING"
-# Begin Group "Source Files"
-
-# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
-# Begin Source File
-
-SOURCE=.\mb_gpc.c
-
-!IF "$(CFG)" == "mbstring - Win32 Release_TS MBSTRING"
-
-# PROP Intermediate_Dir "Release_TS"
-
-!ELSEIF "$(CFG)" == "mbstring - Win32 Debug_TS MBSTRING"
-
-# PROP Intermediate_Dir "Debug_TS"
-
-!ENDIF
-
-# End Source File
-# Begin Source File
-
-SOURCE=.\mbstring.c
-
-!IF "$(CFG)" == "mbstring - Win32 Release_TS MBSTRING"
-
-# PROP Intermediate_Dir "Release_TS"
-
-!ELSEIF "$(CFG)" == "mbstring - Win32 Debug_TS MBSTRING"
-
-# PROP Intermediate_Dir "Debug_TS"
-
-!ENDIF
-
-# End Source File
-# Begin Source File
-
-SOURCE=.\php_mbregex.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\php_unicode.c
-
-!IF "$(CFG)" == "mbstring - Win32 Release_TS MBSTRING"
-
-# PROP Intermediate_Dir "Release_TS"
-
-!ELSEIF "$(CFG)" == "mbstring - Win32 Debug_TS MBSTRING"
-
-# PROP Intermediate_Dir "Debug_TS"
-
-!ENDIF
-
-# End Source File
-# End Group
-# Begin Group "Header Files"
-
-# PROP Default_Filter "h;hpp;hxx;hm;inl"
-# Begin Source File
-
-SOURCE=.\mb_gpc.h
-
-!IF "$(CFG)" == "mbstring - Win32 Release_TS MBSTRING"
-
-# PROP Intermediate_Dir "Release_TS"
-
-!ELSEIF "$(CFG)" == "mbstring - Win32 Debug_TS MBSTRING"
-
-# PROP Intermediate_Dir "Debug_TS"
-
-!ENDIF
-
-# End Source File
-# Begin Source File
-
-SOURCE=.\mbstring.h
-
-!IF "$(CFG)" == "mbstring - Win32 Release_TS MBSTRING"
-
-# PROP Intermediate_Dir "Release_TS"
-
-!ELSEIF "$(CFG)" == "mbstring - Win32 Debug_TS MBSTRING"
-
-# PROP Intermediate_Dir "Debug_TS"
-
-!ENDIF
-
-# End Source File
-# Begin Source File
-
-SOURCE=.\php_mbregex.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\php_unicode.h
-
-!IF "$(CFG)" == "mbstring - Win32 Release_TS MBSTRING"
-
-# PROP Intermediate_Dir "Release_TS"
-
-!ELSEIF "$(CFG)" == "mbstring - Win32 Debug_TS MBSTRING"
-
-# PROP Intermediate_Dir "Debug_TS"
-
-!ENDIF
-
-# End Source File
-# Begin Source File
-
-SOURCE=.\unicode_data.h
-
-!IF "$(CFG)" == "mbstring - Win32 Release_TS MBSTRING"
-
-# PROP Intermediate_Dir "Release_TS"
-
-!ELSEIF "$(CFG)" == "mbstring - Win32 Debug_TS MBSTRING"
-
-# PROP Intermediate_Dir "Debug_TS"
-
-!ENDIF
-
-# End Source File
-# End Group
-# Begin Group "libmbfl"
-
-# PROP Default_Filter ""
-# Begin Group "Source Files No. 1"
-
-# PROP Default_Filter ""
-# Begin Source File
-
-SOURCE=.\libmbfl\filters\html_entities.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\libmbfl\mbfl\mbfilter.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\libmbfl\filters\mbfilter_7bit.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\libmbfl\mbfl\mbfilter_8bit.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\libmbfl\filters\mbfilter_ascii.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\libmbfl\filters\mbfilter_base64.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\libmbfl\filters\mbfilter_big5.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\libmbfl\filters\mbfilter_byte2.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\libmbfl\filters\mbfilter_byte4.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\libmbfl\filters\mbfilter_cp1251.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\libmbfl\filters\mbfilter_cp1252.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\libmbfl\filters\mbfilter_cp866.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\libmbfl\filters\mbfilter_cp932.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\libmbfl\filters\mbfilter_cp936.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\libmbfl\filters\mbfilter_euc_cn.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\libmbfl\filters\mbfilter_euc_jp.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\libmbfl\filters\mbfilter_euc_jp_win.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\libmbfl\filters\mbfilter_euc_kr.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\libmbfl\filters\mbfilter_euc_tw.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\libmbfl\filters\mbfilter_htmlent.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\libmbfl\filters\mbfilter_hz.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\libmbfl\filters\mbfilter_iso2022_kr.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\libmbfl\filters\mbfilter_iso8859_1.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\libmbfl\filters\mbfilter_iso8859_10.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\libmbfl\filters\mbfilter_iso8859_13.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\libmbfl\filters\mbfilter_iso8859_14.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\libmbfl\filters\mbfilter_iso8859_15.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\libmbfl\filters\mbfilter_iso8859_2.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\libmbfl\filters\mbfilter_iso8859_3.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\libmbfl\filters\mbfilter_iso8859_4.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\libmbfl\filters\mbfilter_iso8859_5.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\libmbfl\filters\mbfilter_iso8859_6.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\libmbfl\filters\mbfilter_iso8859_7.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\libmbfl\filters\mbfilter_iso8859_8.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\libmbfl\filters\mbfilter_iso8859_9.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\libmbfl\filters\mbfilter_jis.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\libmbfl\filters\mbfilter_koi8r.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\libmbfl\mbfl\mbfilter_pass.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\libmbfl\filters\mbfilter_qprint.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\libmbfl\filters\mbfilter_sjis.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\libmbfl\filters\mbfilter_ucs2.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\libmbfl\filters\mbfilter_ucs4.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\libmbfl\filters\mbfilter_uhc.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\libmbfl\filters\mbfilter_utf16.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\libmbfl\filters\mbfilter_utf32.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\libmbfl\filters\mbfilter_utf7.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\libmbfl\filters\mbfilter_utf7imap.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\libmbfl\filters\mbfilter_utf8.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\libmbfl\filters\mbfilter_uuencode.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\libmbfl\mbfl\mbfilter_wchar.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\libmbfl\mbfl\mbfl_allocators.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\libmbfl\mbfl\mbfl_convert.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\libmbfl\mbfl\mbfl_encoding.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\libmbfl\mbfl\mbfl_filter_output.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\libmbfl\mbfl\mbfl_ident.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\libmbfl\mbfl\mbfl_language.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\libmbfl\mbfl\mbfl_memory_device.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\libmbfl\mbfl\mbfl_string.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\libmbfl\nls\nls_de.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\libmbfl\nls\nls_en.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\libmbfl\nls\nls_ja.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\libmbfl\nls\nls_kr.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\libmbfl\nls\nls_neutral.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\libmbfl\nls\nls_ru.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\libmbfl\nls\nls_uni.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\libmbfl\nls\nls_zh.c
-# End Source File
-# End Group
-# Begin Group "Header Files No. 1"
-
-# PROP Default_Filter ""
-# Begin Source File
-
-SOURCE=.\libmbfl\config.h.vc6
-
-!IF "$(CFG)" == "mbstring - Win32 Release_TS MBSTRING"
-
-# Begin Custom Build
-InputDir=.\libmbfl
-InputPath=.\libmbfl\config.h.vc6
-
-"$(InputDir)\config.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- copy $(InputDir)\config.h.vc6 "$(InputDir)\config.h"
-
-# End Custom Build
-
-!ELSEIF "$(CFG)" == "mbstring - Win32 Debug_TS MBSTRING"
-
-# Begin Custom Build
-InputDir=.\libmbfl
-InputPath=.\libmbfl\config.h.vc6
-
-"$(InputDir)\config.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- copy $(InputDir)\config.h.vc6 "$(InputDir)\config.h"
-
-# End Custom Build
-
-!ENDIF
-
-# End Source File
-# Begin Source File
-
-SOURCE=.\libmbfl\filters\cp932_table.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\libmbfl\filters\html_entities.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\libmbfl\mbfl\mbfilter.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\libmbfl\filters\mbfilter_7bit.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\libmbfl\mbfl\mbfilter_8bit.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\libmbfl\filters\mbfilter_ascii.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\libmbfl\filters\mbfilter_base64.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\libmbfl\filters\mbfilter_big5.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\libmbfl\filters\mbfilter_byte2.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\libmbfl\filters\mbfilter_byte4.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\libmbfl\filters\mbfilter_cp1251.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\libmbfl\filters\mbfilter_cp1252.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\libmbfl\filters\mbfilter_cp866.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\libmbfl\filters\mbfilter_cp932.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\libmbfl\filters\mbfilter_cp936.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\libmbfl\filters\mbfilter_euc_cn.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\libmbfl\filters\mbfilter_euc_jp.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\libmbfl\filters\mbfilter_euc_jp_win.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\libmbfl\filters\mbfilter_euc_kr.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\libmbfl\filters\mbfilter_euc_tw.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\libmbfl\filters\mbfilter_htmlent.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\libmbfl\filters\mbfilter_hz.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\libmbfl\filters\mbfilter_iso2022_kr.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\libmbfl\filters\mbfilter_iso8859_1.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\libmbfl\filters\mbfilter_iso8859_10.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\libmbfl\filters\mbfilter_iso8859_13.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\libmbfl\filters\mbfilter_iso8859_14.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\libmbfl\filters\mbfilter_iso8859_15.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\libmbfl\filters\mbfilter_iso8859_2.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\libmbfl\filters\mbfilter_iso8859_3.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\libmbfl\filters\mbfilter_iso8859_4.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\libmbfl\filters\mbfilter_iso8859_5.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\libmbfl\filters\mbfilter_iso8859_6.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\libmbfl\filters\mbfilter_iso8859_7.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\libmbfl\filters\mbfilter_iso8859_8.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\libmbfl\filters\mbfilter_iso8859_9.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\libmbfl\filters\mbfilter_jis.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\libmbfl\filters\mbfilter_koi8r.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\libmbfl\mbfl\mbfilter_pass.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\libmbfl\filters\mbfilter_qprint.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\libmbfl\filters\mbfilter_sjis.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\libmbfl\filters\mbfilter_ucs2.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\libmbfl\filters\mbfilter_ucs4.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\libmbfl\filters\mbfilter_uhc.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\libmbfl\filters\mbfilter_utf16.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\libmbfl\filters\mbfilter_utf32.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\libmbfl\filters\mbfilter_utf7.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\libmbfl\filters\mbfilter_utf7imap.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\libmbfl\filters\mbfilter_utf8.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\libmbfl\filters\mbfilter_uuencode.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\libmbfl\mbfl\mbfilter_wchar.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\libmbfl\mbfl\mbfl_allocators.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\libmbfl\mbfl\mbfl_consts.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\libmbfl\mbfl\mbfl_convert.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\libmbfl\mbfl\mbfl_defs.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\libmbfl\mbfl\mbfl_encoding.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\libmbfl\mbfl\mbfl_filter_output.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\libmbfl\mbfl\mbfl_ident.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\libmbfl\mbfl\mbfl_language.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\libmbfl\mbfl\mbfl_memory_device.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\libmbfl\mbfl\mbfl_string.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\libmbfl\nls\nls_de.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\libmbfl\nls\nls_en.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\libmbfl\nls\nls_ja.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\libmbfl\nls\nls_kr.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\libmbfl\nls\nls_neutral.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\libmbfl\nls\nls_ru.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\libmbfl\nls\nls_uni.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\libmbfl\nls\nls_zh.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\libmbfl\filters\unicode_prop.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\libmbfl\filters\unicode_table_big5.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\libmbfl\filters\unicode_table_cns11643.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\libmbfl\filters\unicode_table_cp1251.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\libmbfl\filters\unicode_table_cp1252.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\libmbfl\filters\unicode_table_cp866.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\libmbfl\filters\unicode_table_cp932_ext.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\libmbfl\filters\unicode_table_cp936.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\libmbfl\filters\unicode_table_iso8859_10.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\libmbfl\filters\unicode_table_iso8859_13.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\libmbfl\filters\unicode_table_iso8859_14.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\libmbfl\filters\unicode_table_iso8859_15.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\libmbfl\filters\unicode_table_iso8859_2.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\libmbfl\filters\unicode_table_iso8859_3.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\libmbfl\filters\unicode_table_iso8859_4.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\libmbfl\filters\unicode_table_iso8859_5.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\libmbfl\filters\unicode_table_iso8859_6.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\libmbfl\filters\unicode_table_iso8859_7.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\libmbfl\filters\unicode_table_iso8859_8.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\libmbfl\filters\unicode_table_iso8859_9.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\libmbfl\filters\unicode_table_jis.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\libmbfl\filters\unicode_table_koi8r.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\libmbfl\filters\unicode_table_uhc.h
-# End Source File
-# End Group
-# End Group
-# Begin Group "oniguruma"
-
-# PROP Default_Filter ""
-# Begin Group "Source Files No. 2"
-
-# PROP Default_Filter ""
-# Begin Source File
-
-SOURCE=.\oniguruma\regcomp.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\oniguruma\regerror.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\oniguruma\regexec.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\oniguruma\reggnu.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\oniguruma\regparse.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\oniguruma\regposerr.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\oniguruma\enc\ascii.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\oniguruma\enc\utf8.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\oniguruma\enc\euc_jp.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\oniguruma\enc\euc_tw.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\oniguruma\enc\euc_kr.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\oniguruma\enc\sjis.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\oniguruma\enc\iso8859_1.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\oniguruma\enc\iso8859_2.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\oniguruma\enc\iso8859_3.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\oniguruma\enc\iso8859_4.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\oniguruma\enc\iso8859_5.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\oniguruma\enc\iso8859_6.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\oniguruma\enc\iso8859_7.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\oniguruma\enc\iso8859_8.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\oniguruma\enc\iso8859_9.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\oniguruma\enc\iso8859_10.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\oniguruma\enc\iso8859_11.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\oniguruma\enc\iso8859_13.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\oniguruma\enc\iso8859_14.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\oniguruma\enc\iso8859_15.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\oniguruma\enc\iso8859_16.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\oniguruma\enc\koi8.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\oniguruma\enc\koi8_r.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\oniguruma\enc\big5.c
-# End Source File
-# End Group
-# Begin Group "Header Files No. 2"
-
-# PROP Default_Filter ""
-# Begin Source File
-
-SOURCE=.\oniguruma\win32\config.h
-
-!IF "$(CFG)" == "mbstring - Win32 Release_TS MBSTRING"
-
-# Begin Custom Build
-InputDir=.\oniguruma\win32
-InputPath=.\oniguruma\win32\config.h
-
-"$(InputDir)\..\config.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- copy $(InputDir)\config.h "$(InputDir)\..\config.h"
-
-# End Custom Build
-
-!ELSEIF "$(CFG)" == "mbstring - Win32 Debug_TS MBSTRING"
-
-# Begin Custom Build
-InputDir=.\oniguruma\win32
-InputPath=.\oniguruma\win32\config.h
-
-"$(InputDir)\..\config.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- copy $(InputDir)\config.h "$(InputDir)\..\config.h"
-
-# End Custom Build
-
-!ENDIF
-
-# End Source File
-# Begin Source File
-
-SOURCE=.\oniguruma\onigposix.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\oniguruma\oniguruma.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\oniguruma\php_compat.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\oniguruma\regint.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\oniguruma\regparse.h
-# End Source File
-# End Group
-# End Group
-# End Target
-# End Project
diff --git a/ext/mbstring/mbstring.h b/ext/mbstring/mbstring.h
deleted file mode 100644
index 023d520cb7..0000000000
--- a/ext/mbstring/mbstring.h
+++ /dev/null
@@ -1,231 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Tsukada Takuya <tsukada@fminn.nagano.nagano.jp> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-/*
- * PHP 4 Multibyte String module "mbstring" (currently only for Japanese)
- *
- * History:
- * 2000.5.19 Release php-4.0RC2_jstring-1.0
- * 2001.4.1 Release php4_jstring-1.0.91
- * 2001.4.30 Release php4-jstring-1.1 (contribute to The PHP Group)
- * 2001.5.1 Renamed from jstring to mbstring (hirokawa@php.net)
- */
-
-/*
- * PHP3 Internationalization support program.
- *
- * Copyright (c) 1999,2000 by the PHP3 internationalization team.
- * All rights reserved.
- *
- * See README_PHP3-i18n-ja for more detail.
- *
- * Authors:
- * Hironori Sato <satoh@jpnnet.com>
- * Shigeru Kanemoto <sgk@happysize.co.jp>
- * Tsukada Takuya <tsukada@fminn.nagano.nagano.jp>
- */
-
-
-#ifndef _MBSTRING_H
-#define _MBSTRING_H
-
-#ifdef COMPILE_DL_MBSTRING
-#undef HAVE_MBSTRING
-#define HAVE_MBSTRING 1
-#endif
-
-#ifdef PHP_WIN32
-# undef MBSTRING_API
-# ifdef MBSTRING_EXPORTS
-# define MBSTRING_API __declspec(dllexport)
-# elif defined(COMPILE_DL_MBSTRING)
-# define MBSTRING_API __declspec(dllimport)
-# else
-# define MBSTRING_API /* nothing special */
-# endif
-#else
-# undef MBSTRING_API
-# define MBSTRING_API /* nothing special */
-#endif
-
-
-#if HAVE_MBSTRING
-
-#include "libmbfl/mbfl/mbfilter.h"
-#include "SAPI.h"
-
-#define PHP_MBSTRING_API 20021024
-
-#if HAVE_MBREGEX
-#include "php_mbregex.h"
-#endif
-
-extern zend_module_entry mbstring_module_entry;
-#define mbstring_module_ptr &mbstring_module_entry
-
-PHP_MINIT_FUNCTION(mbstring);
-PHP_MSHUTDOWN_FUNCTION(mbstring);
-PHP_RINIT_FUNCTION(mbstring);
-PHP_RSHUTDOWN_FUNCTION(mbstring);
-PHP_MINFO_FUNCTION(mbstring);
-
-/* functions in php_unicode.c */
-PHP_FUNCTION(mb_convert_case);
-PHP_FUNCTION(mb_strtoupper);
-PHP_FUNCTION(mb_strtolower);
-
-/* php function registration */
-PHP_FUNCTION(mb_language);
-PHP_FUNCTION(mb_internal_encoding);
-PHP_FUNCTION(mb_http_input);
-PHP_FUNCTION(mb_http_output);
-PHP_FUNCTION(mb_detect_order);
-PHP_FUNCTION(mb_substitute_character);
-PHP_FUNCTION(mb_preferred_mime_name);
-PHP_FUNCTION(mb_parse_str);
-PHP_FUNCTION(mb_output_handler);
-PHP_FUNCTION(mb_strlen);
-PHP_FUNCTION(mb_strpos);
-PHP_FUNCTION(mb_strrpos);
-PHP_FUNCTION(mb_substr_count);
-PHP_FUNCTION(mb_substr);
-PHP_FUNCTION(mb_strcut);
-PHP_FUNCTION(mb_strwidth);
-PHP_FUNCTION(mb_strimwidth);
-PHP_FUNCTION(mb_convert_encoding);
-PHP_FUNCTION(mb_detect_encoding);
-PHP_FUNCTION(mb_list_encodings);
-PHP_FUNCTION(mb_convert_kana);
-PHP_FUNCTION(mb_encode_mimeheader);
-PHP_FUNCTION(mb_decode_mimeheader);
-PHP_FUNCTION(mb_convert_variables);
-PHP_FUNCTION(mb_encode_numericentity);
-PHP_FUNCTION(mb_decode_numericentity);
-PHP_FUNCTION(mb_send_mail);
-PHP_FUNCTION(mb_get_info);
-
-MBSTRING_API int php_mb_encoding_translation(TSRMLS_D);
-
-MBSTRING_API char *php_mb_safe_strrchr_ex(const char *s, unsigned int c,
- size_t nbytes, const mbfl_encoding *enc);
-MBSTRING_API char *php_mb_safe_strrchr(const char *s, unsigned int c,
- size_t nbytes TSRMLS_DC);
-MBSTRING_API char *php_mb_strrchr(const char *s, char c TSRMLS_DC);
-
-MBSTRING_API char * php_mb_convert_encoding(char *input, size_t length,
- char *_to_encoding,
- char *_from_encodings,
- size_t *output_len TSRMLS_DC);
-
-MBSTRING_API int php_mb_check_encoding_list(const char *encoding_list TSRMLS_DC);
-
-MBSTRING_API size_t php_mb_mbchar_bytes_ex(const char *s, const mbfl_encoding *enc);
-MBSTRING_API size_t php_mb_mbchar_bytes(const char *s TSRMLS_DC);
-
-MBSTRING_API size_t php_mb_gpc_mbchar_bytes(const char *s TSRMLS_DC);
-
-MBSTRING_API int php_mb_encoding_detector_ex(const char *arg_string, int arg_length,
- char *arg_list TSRMLS_DC);
-
-MBSTRING_API int php_mb_encoding_converter_ex(char **str, int *len, const char *encoding_to,
- const char *encoding_from TSRMLS_DC);
-MBSTRING_API int php_mb_gpc_encoding_converter(char **str, int *len, int num, const char *encoding_to, const char *encoding_from TSRMLS_DC);
-
-MBSTRING_API int php_mb_gpc_encoding_detector(char **arg_string, int *arg_length, int num, char *arg_list TSRMLS_DC);
-
-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
- enum mbfl_no_encoding *script_encoding_list;
- int script_encoding_list_size;
-#endif /* ZEND_MULTIBYTE */
- enum mbfl_no_encoding http_output_encoding;
- enum mbfl_no_encoding current_http_output_encoding;
- enum mbfl_no_encoding http_input_identify;
- enum mbfl_no_encoding http_input_identify_get;
- enum mbfl_no_encoding http_input_identify_post;
- enum mbfl_no_encoding http_input_identify_cookie;
- enum mbfl_no_encoding http_input_identify_string;
- enum mbfl_no_encoding *http_input_list;
- int http_input_list_size;
- enum mbfl_no_encoding *detect_order_list;
- int detect_order_list_size;
- enum mbfl_no_encoding *current_detect_order_list;
- int current_detect_order_list_size;
- enum mbfl_no_encoding *default_detect_order_list;
- int default_detect_order_list_size;
- int filter_illegal_mode;
- int filter_illegal_substchar;
- int current_filter_illegal_mode;
- int current_filter_illegal_substchar;
- long func_overload;
- zend_bool encoding_translation;
- mbfl_buffer_converter *outconv;
-#if HAVE_MBREGEX && defined(PHP_MBREGEX_GLOBALS)
- PHP_MBREGEX_GLOBALS
-#endif
-ZEND_END_MODULE_GLOBALS(mbstring)
-
-#define MB_OVERLOAD_MAIL 1
-#define MB_OVERLOAD_STRING 2
-#define MB_OVERLOAD_REGEX 4
-
-struct mb_overload_def {
- int type;
- char *orig_func;
- char *ovld_func;
- char *save_func;
-};
-
-#ifdef ZTS
-#define MBSTRG(v) TSRMG(mbstring_globals_id, zend_mbstring_globals *, v)
-#else
-#define MBSTRG(v) (mbstring_globals.v)
-#endif
-
-#ifdef ZEND_MULTIBYTE
-MBSTRING_API int php_mb_set_zend_encoding(TSRMLS_D);
-char* php_mb_encoding_detector(const char *string, int length, char *list
- TSRMLS_DC);
-int php_mb_encoding_converter(char **to, int *to_length, const char *from,
- int from_length, const char *encoding_to, const char *encoding_from
- TSRMLS_DC);
-int php_mb_oddlen(const char *string, int length, const char *encoding TSRMLS_DC);
-#endif /* ZEND_MULTIBYTE */
-
-#else /* HAVE_MBSTRING */
-
-#define mbstring_module_ptr NULL
-
-#endif /* HAVE_MBSTRING */
-
-#define phpext_mbstring_ptr mbstring_module_ptr
-
-#endif /* _MBSTRING_H */
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- */
diff --git a/ext/mbstring/oniguruma/COPYING b/ext/mbstring/oniguruma/COPYING
deleted file mode 100644
index 7913cbf23f..0000000000
--- a/ext/mbstring/oniguruma/COPYING
+++ /dev/null
@@ -1,32 +0,0 @@
-OniGuruma LICENSE
------------------
-
-When this software is partly used or it is distributed with Ruby,
-this of Ruby follows the license of Ruby.
-It follows the BSD license in the case of the one except for it.
-
-/*-
- * Copyright (c) 2002 K.Kosako <kosako@sofnec.co.jp>
- * 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.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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.
- */
diff --git a/ext/mbstring/oniguruma/HISTORY b/ext/mbstring/oniguruma/HISTORY
deleted file mode 100644
index a7a817dd2d..0000000000
--- a/ext/mbstring/oniguruma/HISTORY
+++ /dev/null
@@ -1,887 +0,0 @@
-History
-
-2004/03/04: Version 2.2.4
-
-2004/03/04: [impl] (thanks Moriyoshi Koizumi)
- fix many warning in Win32 VC++ with /W3 option.
-
-2004/03/02: Version 2.2.3
-
-2004/03/02: [bug] (thanks Isao Sonobe)
- return invalid capture region value if capture history
- is used. (OP_MEMORY_END_PUSH_REC bug)
- ex. /\\g<p>(?@<p>\\(\\g<s>\\)){0}(?<s>(?:\\g<p>)*|){0}/
- .match("((())())")
-2004/03/02: [impl] add :nodoc: to onig_stat_print() for RDoc.
-2004/03/02: [impl] don't use ONIG_SOURCE_IS_WRAPPED.
-
-2004/02/27: Version 2.2.2
-
-2004/02/27: [impl] fix the position of onig_stat_print().
-2004/02/27: [impl] define ONIG_RUBY_DEFINE_GLOBAL_FUNCTION() in regint.h
- for ignored by RDoc.
-
-2004/02/26: Version 2.2.1
-
-2004/02/26: [bug] [bugs.php.net:#26677] (thanks behrens)
- invalid definition at onig_error_code_to_str()
- in the case of NOT HAVE_STDARG_PROTOTYPES.
-
-2004/02/25: Version 2.2.0
-
-2004/02/25: [test] success in ruby 1.8.0 (2003-08-08) [i386-mswin32].
-2004/02/24: [test] success in ruby 1.9.0 (2004-02-24) [i686-linux].
-2004/02/24: [bug] undefined IS_BLANK() and IS_GRAPH() was used in
- onigenc_is_code_ctype() in the case of Ruby M17N.
-2004/02/24: [new] support ISO-8859-16. (ONIG_ENCODING_ISO_8859_16)
-2004/02/24: [bug] should not fold match for 0xdf in iso8859_6.c.
-2004/02/24: [new] support ISO-8859-14. (ONIG_ENCODING_ISO_8859_14)
-2004/02/23: [new] support ISO-8859-13. (ONIG_ENCODING_ISO_8859_13)
-2004/02/23: [new] support ISO-8859-10. (ONIG_ENCODING_ISO_8859_10)
-2004/02/20: [bug] fix iso_8859_4_mbc_is_case_ambig().
-2004/02/20: [new] support ISO-8859-9. (ONIG_ENCODING_ISO_8859_9)
-2004/02/19: [bug] correct ctype tables for ISO-8859-3, ISO-8859-4,
- ISO-8859-6, ISO-8859-7, ISO-8859-8, KOI8_R.
-2004/02/18: [bug] wrong replaced name OnigSyntaxGnuOnigex.
-2004/02/17: [spec] check capture status for empty infinite loop.
- [ruby-dev:20224] etc...
- ex. /(?:\1a|())*/.match("a"),
- /(?:()|()|()|(x)|()|())*\2b\5/.match("b")
- add USE_INFINITE_REPEAT_MONOMANIAC_MEM_STATUS_CHECK.
- add OP_NULL_CHECK_END_MEMST, OP_NULL_CHECK_END_MEMST_PUSH.
- add stack type STK_NULL_CHECK_END.
-2004/02/13: [impl] add OnigEncodingEUC_CN to enc/euc_kr.c.
-2004/02/13: [bug] (thanks Simon Strandgaard)
- parsing of nested repeat was invalid.
- ex. /ab{2,3}*/ was /(?:a(?:b{2,3}))*/,
- should be /a(?:b{2,3}*)/
-2004/02/12: [bug] (thanks Simon Strandgaard)
- OP_REPEAT_INC_NG process in match_at() is wrong.
- ex. bad match /a.{0,2}?a/ =~ "0aXXXa0"
-2004/02/12: [bug] (thanks Simon Strandgaard)
- wrong fetch after (?x) option. ex. "(?x)\ta .\n+b"
-2004/02/12: [bug] (thanks Simon Strandgaard)
- [\^] is not a empty char class.
-2004/02/09: [new] add onig_set_syntax_op(), onig_set_syntax_op2(),
- onig_set_syntax_behavior(), onig_set_syntax_options().
-2004/02/06: [dist] add a new target 'site' to Makefile.in.
-2004/02/06: [dist] add index.html.
-2004/02/03: [bug] oniggnu.h was not installed by 'make install'.
-
-2004/02/02: Version 2.1.0
-
-2004/02/02: [test] success in ruby 1.9.0 (2004-02-02) [i686-linux].
-2004/02/02: [test] success in ruby 1.8.0 (2003-08-08) [i386-cygwin].
-2004/02/02: [test] success in ruby 1.8.0 (2003-08-08) [i386-mswin32].
-2004/02/02: [new] support ISO-8859-11. (ONIG_ENCODING_ISO_8859_11)
-2004/02/02: [new] support ISO-8859-5. (ONIG_ENCODING_ISO_8859_5)
-2004/02/02: [impl] should check single byte encoding or not in and_cclass()
- and or_cclass().
-2004/01/30: [dist] add oniggnu.h.
-2004/01/30: [bug] ISO-8859-7 0xb7 (middle dot) is Punct type.
-2004/01/30: [new] support ISO-8859-8. (ONIG_ENCODING_ISO_8859_8)
-2004/01/29: [new] support ISO-8859-7. (ONIG_ENCODING_ISO_8859_7)
-2004/01/29: [new] support ISO-8859-6. (ONIG_ENCODING_ISO_8859_6)
-2004/01/28: [new] support KOI8-R. (ONIG_ENCODING_KOI8_R)
-2004/01/28: [new] support KOI8. (ONIG_ENCODING_KOI8)
-2004/01/27: [dist] rename enc/isotable.c to enc/mktable.c.
-2004/01/27: [new] support ISO-8859-4. (ONIG_ENCODING_ISO_8859_4)
-2004/01/26: [new] support ISO-8859-3. (ONIG_ENCODING_ISO_8859_3)
-2004/01/26: [bug] EncISO_8859_{1,15}_CtypeTable[256] was wrong.
- (0x80 - 0xff is not ASCII)
-2004/01/23: [new] support ISO-8859-2. (ONIG_ENCODING_ISO_8859_2)
-2004/01/23: [dist] add enc/isotable.c.
-2004/01/22; [new] support EUC-TW. (ONIG_ENCODING_EUC_TW)
-2004/01/22: [bug] definition of GET_ALIGNMENT_PAD_SIZE() and
- ALIGNMENT_RIGHT() was wrong.
- type casting should be unsigned int, not int.
-2004/01/22: [impl] add defined(__x86_64) || defined(__x86_64__)
- to unaligned word access condition. (AMD64 ?)
-2004/01/21: [dist] rename enc/eucjp.c to enc/euc_jp.c.
-2004/01/21; [new] support EUC-KR. (ONIG_ENCODING_EUC_KR)
-2004/01/20: [test] success in ruby 1.8.0 (2003-08-08) [i386-cygwin].
-2004/01/20: [dist] change Makefile.in.
-2004/01/20: [spec] add \p{...}, \P{...} in char class.
-2004/01/20: [new] character property operators \p{...}, \P{...}.
- supported in ONIG_SYNTAX_JAVA and ONIG_SYNTAX_PERL.
-2004/01/19: [spec] allow /a{,n}/ as /a{0,n}/. (but don't allow /a{,}/)
-2004/01/19: [dist] rename onigcomp200.h to onigcmpt200.h.
-2004/01/19: [dist] update re.c.168.patch. svn add re.c.181.patch.
-2004/01/16: [dist] update sample/*.c for new API.
-2004/01/16: [dist] add onigcomp200.h. (for old API compatibility)
-2004/01/16: [dist] update documents API, RE and RE.ja.
-2004/01/16: [spec] change prefix REG_ -> ONIG_, regex_ onig_,
- ENC_ -> ONIGENC, enc_ -> onigenc_.
-2004/01/15: [impl] rename ENC_IS_MBC_E_WORD() to ENC_IS_MBC_WORD().
- rename ENC_CTYPE_SUPPORT_LEVEL_SB_ONLY to
- ENC_CTYPE_SUPPORT_LEVEL_SB.
-2004/01/14: [impl] rename UNALIGNED_WORD_ACCESS to
- PLATFORM_UNALIGNED_WORD_ACCESS.
-2004/01/14: [impl] change MATCH_STACK_LIMIT_SIZE value from 200000 to 500000.
-2004/01/13: [impl] remove ENC_CODE_TO_MBC_FIRST(enc,code) in regenc.h.
- remove code_to_mbc_first member in RegCharEncodingType.
-2004/01/13: [impl] remove head byte bitset information in cclass->mbuf.
-2003/12/26: [impl] change macro name ismb_xxxx() in enc/*.c for
- escape conflict.
-
-2003/12/24: Version 2.0.0
-
-2003/12/24: [spec] ignore case option is effective to numbered char.
- ex. /\x61/i =~ "A"
-2003/12/24: [test] success in ruby 1.8.1 (2003-12-24) [i686-linux].
-2003/12/24: [test] success in ruby 1.8.0 (2003-08-08) [i386-cygwin].
-2003/12/24: [test] success in ruby 1.8.0 (2003-08-08) [i386-mswin32].
-2003/12/24: [test] success in regex.c compile test on ruby-m17n.
- (but can't make miniruby because re.c patch fail.)
-2003/12/24: [bug] (thanks H.Miyamoto) /[\W]/ was wrong in 1.9.5.
-2003/12/22: [spec] implement fold match on UTF-8 encoding.
-2003/12/19: [impl] add ctype_support_level and ctype_add_codes() member to
- RegCharEncoding type.
-2003/12/19: [impl] add add_ctype_to_cc() in regparse.c.
-2003/12/19: [impl] add enc_is_code_ctype() in REG_RUBY_M17N case.
-2003/12/19: [impl] change ENC_CODE_TO_MBC() interface.
-2003/12/18: [new] implement fold match. (variable number of char
- match in ignore case mode.)
- ex. German alphabet ess-tsett(U+00DF) match "SS" and "ss".
-2003/12/17: [impl] refactoring of encoding system.
-2003/12/17: [impl] add enc_init() in regenc.c.
-2003/12/17: [new] support Big5. (REG_ENCODING_BIG5)
-2003/12/16: [impl] change CodePoint from unsigned int to unsigned long.
-2003/12/16: [new] support ISO 8859-15. (REG_ENCODING_ISO_8859_15)
-2003/12/16: [impl] change P_() macro definition condition for Win32.
-2003/12/16: [dist] add sample/encode.c
-2003/12/16: [new] support ISO 8859-1. (REG_ENCODING_ISO_8859_1)
-2003/12/15: [impl] rename IS_ENC_XXXX to ENC_IS_XXXX.
-2003/12/15: [impl] rename RegDefaultCharEncoding to EncDefaultCharEncoding.
-2003/12/15: [impl] divide encoding files. (enc/ascii.c, enc/utf8.c etc...)
-2003/12/15: [bug] unexpected infinite loop in regex_snprintf_with_pattern().
- change local var. type char* to UChar*.
-2003/12/15: [impl] remove REG_MBLEN_TABLE[].
-2003/12/15: [spec] rename function prefix regex_get_prev_char_head(),
- regex_get_left_adjust_char_head() and
- regex_get_right_adjust_char_head() to enc_xxxxxx().
-2003/12/15: [impl] rename function prefixes in regenc.h from regex_ to enc_.
-2003/12/12: [impl] remove USE_SBMB_CLASS.
-2003/12/12: [impl] rename mb -> mbc, mblen() to enc_len().
-2003/12/12: [impl] rename WCINT to CodePoint.
-2003/12/11: [impl] delete IS_XXXX() ctype macros from regint.h.
-2003/12/11: [impl] add enc->wc_is_ctype() and RegAsciiCtypeTable[256].
-2003/12/11: [impl] remove RegAsciiCaseAmbigTable.
-2003/12/10: [impl] use ENC_TO_LOWER() for ignore case comparison.
-2003/12/08: [impl] *** re-defined RegCharEncoding in oniguruma.h. ***
-2003/12/08: [impl] add USE_POSIX_REGION_OPTION to regint.h.
-2003/12/08: [impl] add IS_ENC_WORD() to regenc.h.
-2003/12/05: [impl] rename IS_CODE_XXXX() to IS_ENC_XXXX().
-2003/12/05: [impl] delete IS_CODE_WORD() from regenc.h.
-2003/12/04: [spec] rename REG_SYN_OP_BACK_REF to REG_SYN_OP_DECIMAL_BACKREF.
-2003/12/04: [spec] add (REG_SYN_OP_ESC_W_WORD | REG_SYN_OP_ESC_B_WORD_BOUND |
- REG_SYN_OP_ESC_LTGT_WORD_BEGIN_END | REG_SYN_OP_BACK_REF)
- to RegSyntaxGrep.
-2003/12/04: [spec] remove REG_ENCODING_DEFAULT and REGCODE_DEFAULT.
-2003/12/04: [spec] move declarations of regex_get_default_encoding() and
- regex_set_default_encoding() from oniguruma.h to regenc.h.
-2003/12/03: [new] add regex_get_default_encoding() and
- regex_set_default_encoding().
-2003/12/03: [spec] REG_ENCODING_DEFAULT meaning is changed.
- (current default value, not initial default value.)
-2003/12/03: [spec] REGCODE_XXX is obsoleted. use REG_ENCODING_XXX.
-2003/12/02: [memo] alias svnst='svn status | grep -v "^\?"'
-2003/12/02: [spec] move regex_set_default_trans_table() declaration
- from oniguruma.h to regenc.h. (obsoleted API)
-2003/12/02: [impl] move variables RegDefaultCharEncoding, DefaultTransTable and
- AmbiguityTable to regenc.c.
-2003/12/01: [impl] add regex_continuous_sbmb() to regenc.c.
-2003/12/01: [dist] add regenc.h and regenc.c.
-2003/11/18: [dist] change testconv.rb.
-2003/11/18: [bug] (thanks Masaru Tsuda)
- memory leak in parse_subexp().
-2003/11/18: [bug] (thanks Masaru Tsuda)
- memory leak in names_clear() and parse_char_class().
-2003/11/17: [bug] memory leak in parse_char_class().
-2003/11/17: [bug] (thanks Masaru Tsuda)
- OptExactInfo length should not over OPT_EXACT_MAXLEN.
- (concat_opt_exact_info_str())
-
-2003/11/12: Version 1.9.5
-
-2003/11/12: [test] success in ruby 1.8.0 (2003-08-08) [i386-cygwin].
-2003/11/12: [test] success in ruby 1.8.1 (2003-11-11) [i686-linux].
-2003/11/12: [spec] add definition of REG_INEFFECTIVE_META_CHAR.
-2003/11/11: [dist] add a sample program sample/sql.c.
-2003/11/11: [new] add variable meta character.
- regex_set_meta_char()
-2003/11/11: [spec] add syntax op. REG_SYN_OP_VARIABLE_META_CHARS.
-2003/11/11: [spec] rename REG_SYN_OP_ESC_CAPITAL_Q_QUOTE to
- REG_SYN_OP2_ESC_CAPITAL_Q_QUOTE,
- REG_SYN_OP_QMARK_GROUP_EFFECT to
- REG_SYN_OP2_QMARK_GROUP_EFFECT.
-2003/11/06: [impl] define THREAD_PASS as rb_thread_schedule() in Ruby mode.
-2003/11/05: [spec] add syntax behavior REG_SYN_WARN_REDUNDANT_NESTED_REPEAT.
-2003/11/05: [spec] rename REG_SYN_WARN_FOR_CC_OP_NOT_ESCAPED to
- REG_SYN_WARN_CC_OP_NOT_ESCAPED.
-2003/11/04: [new] add regex_set_warn_func() and regex_set_verb_warn_func().
-2003/10/30: [new] add regex_name_to_backref_number().
- (for multiplex definition name, see sample/names.c)
-2003/10/30: [spec] add name_end and reg argument to callback function of
- regex_foreach_name(). (see sample/names.c)
-2003/10/29: [spec] add syntax behavior REG_SYN_ALLOW_MULTIPLEX_DEFINITION_NAME.
- add error code REGERR_MULTIPLEX_DEFINED_NAME.
-2003/10/14: [dist] modify sample/simple.c.
-2003/10/03: [bug] (thanks nobu) [ruby-dev:21472]
- sub-anchor of optimization map info was wrong
- in concat_left_node_opt_info().
- ex. /^(x?y)/ = "xy" fail.
-
-2003/09/17: Version 1.9.4
-
-2003/09/17: [spec] change specification of char-class range in ignore case mode
- follows with Ruby 1.8(2003-09-17).
- ex. /[H-c]/i ==> (H-Z, 0x5b-0x60, a-c)/i
- ==> H-Z, h-z, 0x5b-0x60, a-c, A-C
-2003/09/16: [bug] (thanks Guy Decoux)
- remove env->option == option check in parse_effect().
- change env->option for dynamic option in parse_exp().
- (ex. bad match /(?i)(?-i)a/ =~ "A")
-2003/09/12: [spec] rename REG_SYN_ALLOW_RANGE_OP_IN_CC to
- REG_SYN_ALLOW_DOUBLE_RANGE_OP_IN_CC,
- REG_SYN_ESCAPE_IN_CC to REG_SYN_BACKSLASH_ESCAPE_IN_CC.
-2003/09/11: [bug] change to IS_SYNTAX_OP2 at REG_SYN_OP2_ESC_GNU_BUF_ANCHOR.
-2003/09/09: [spec] rename REG_SYN_OP2_ESC_M_BAR_META to
- REG_SYN_OP2_ESC_CAPITAL_M_BAR_META,
- REG_SYN_OP_ESC_Q_QUOTE to REG_SYN_OP_ESC_CAPITAL_Q_QUOTE,
- REG_SYN_OP_ESC_SUBEXP to REG_SYN_OP_ESC_LPAREN_SUBEXP,
- REG_SYN_OP_ESC_BUF_ANCHOR to REG_SYN_OP_ESC_AZ_BUF_ANCHOR,
- REG_SYN_OP_ESC_GNU_BUF_ANCHOR to
- REG_SYN_OP2_ESC_GNU_BUF_ANCHOR,
- REG_SYN_OP_ESC_CONTROL_CHAR to REG_SYN_OP_ESC_CONTROL_CHARS,
- REG_SYN_OP_ESC_WORD to REG_SYN_OP_ESC_W_WORD,
- REG_SYN_OP_ESC_WORD_BEGIN_END to
- REG_SYN_OP_ESC_LTGT_WORD_BEGIN_END,
- REG_SYN_OP_ESC_WORD_BOUND to REG_SYN_OP_ESC_B_WORD_BOUND,
- REG_SYN_OP_ESC_WHITE_SPACE to REG_SYN_OP_ESC_S_WHITE_SPACE,
- REG_SYN_OP_ESC_DIGIT to REG_SYN_OP_ESC_D_DIGIT,
- REG_SYN_OP_CC to REG_SYN_OP_BRACKET_CC,
- REG_SYN_OP2_CCLASS_SET to REG_SYN_OP2_CCLASS_SET_OP,
- REG_SYN_CONTEXT_INDEP_OPS to
- REG_SYN_CONTEXT_INDEP_REPEAT_OPS,
- REG_SYN_CONTEXT_INVALID_REPEAT_OPS to
- REG_SYN_CONTEXT_INVALID_REPEAT_OPS.
- add REG_SYN_OP_ESC_CAPITAL_G_BEGIN_ANCHOR.
-2003/09/08: [spec] rename REG_SYN_OP_ANYCHAR to REG_SYN_OP_DOT_ANYCHAR,
- REG_SYN_OP_0INF to REG_SYN_OP_ASTERISK_ZERO_INF,
- REG_SYN_OP_ESC_0INF to REG_SYN_OP_ESC_ASTERISK_ZERO_INF,
- REG_SYN_OP_1INF to REG_SYN_OP_PLUS_ONE_INF,
- REG_SYN_OP_ESC_1INF to REG_SYN_OP_ESC_PLUS_ONE_INF,
- REG_SYN_OP_0INF to REG_SYN_OP_QMARK_ZERO_ONE,
- REG_SYN_OP_ESC_0INF to REG_SYN_OP_ESC_QMARK_ZERO_ONE,
- REG_SYN_OP_INTERVAL to REG_SYN_OP_BRACE_INTERVAL,
- REG_SYN_OP_ESC_INTERVAL to REG_SYN_OP_ESC_BRACE_INTERVAL,
- REG_SYN_OP_SUBEXP to REG_SYN_OP_LPAREN_SUBEXP,
- REG_SYN_OP_ALT to REG_SYN_OP_VBAR_ALT,
- REG_SYN_OP_ESC_ALT to REG_SYN_OP_ESC_VBAR_ALT,
- REG_SYN_OP_NON_GREEDY to REG_SYN_OP_QMARK_NON_GREEDY,
- REG_SYN_OP_SUBEXP_EFFECT to REG_SYN_OP_QMARK_GROUP_EFFECT,
- REG_SYN_OP2_POSSESSIVE_{REPEAT,INTERVAL} to
- REG_SYN_OP2_PLUS_POSSESSIVE_{REPEAT,INTERVAL},
- REG_SYN_OP2_SUBEXP_CALL to REG_SYN_OP2_ESC_G_SUBEXP_CALL,
- REG_SYN_OP2_NAMED_GROUP to REG_SYN_OP2_QMARK_LT_NAMED_GROUP
- and REG_SYN_OP2_ESC_K_NAMED_BACKREF.
-2003/09/02: [tune] call reduce_nested_qualifier() after disabling capture for
- no-name group in noname_disable_map().
- ex. /(a+)*(?<name>...)/
-2003/09/02: [impl] include <stdio.h> is forgotten to erase in regcomp.c.
-2003/09/01: [dist] update doc/RE and doc/RE.ja.
-2003/08/26: [bug] (thanks Guy Decoux)
- should not double free node at the case TK_CC_CC_OPEN
- in parse_char_class().
-
-2003/08/19: Version 1.9.3
-
-2003/08/19: [inst] change re.c.180.patch.
-2003/08/19: [impl] rename 'list of captures' to 'capture history'.
-2003/08/19: [dist] add doc/RE.ja. (Japanese)
-2003/08/19: [new] add regex_copy_syntax().
-2003/08/19: [spec] rename REG_SYN_OP2_ATMARK_LIST_OF_CAPTURES to
- REG_SYN_OP2_ATMARK_CAPTURE_HISTORY.
-2003/08/18: [spec] (thanks nobu)
- don't use IMPORT in oniguruma.h and onigposix.h.
-2003/08/18: [impl] (thanks nobu) change error output to stdout in testconv.rb.
-2003/08/18: [inst] (thanks nobu) lacked $(srcdir) in Makefile.in.
-2003/08/18: [bug] REG_MBLEN_TABLE[SJIS][0xFD-0xFF] should be 1.
-2003/08/18: [bug] (thanks nobu) mbctab_sjis[0x80] should be 0.
-2003/08/18: [bug] (thanks nobu)
- single/multi-byte decision was wrong in parse_char_class().
- add regex_wc2mblen().
- should not set fetched to 1 in TK_RAW_BYTE case.
-2003/08/18: [bug] should update BitSet in the case inc_n >= 0
- in add_wc_range_to_buf().
-2003/08/13: [bug] change re.c.180.patch for fix rb_reg_to_s() in re.c.
-2003/08/11: [bug] should clear region->list in regex_region_resize().
-
-2003/08/08: Version 1.9.2
-
-2003/08/08: [test] success in ruby 1.8.0 (2003-08-08) on Windows 2000
- VC++ 6.0 and Cygwin.
-2003/08/08: [impl] don't define macro vsnprintf for WIN32 platform,
- because definition is added in win32\win32.h.
-2003/08/08: [test] success in ruby 1.8.0 and ruby 1.6.8(2003-08-03) on Linux.
-2003/08/08: [dist] change re.c.180.patch and re.c.168.patch.
-2003/08/08: [new] (thanks akr)
- implemented list of captures. (?@...), (?@<name>...)
-2003/08/07: [dist] add sample/listcap.c.
-2003/08/06: [bug] OP_MEMORY_END_PUSH_REC case in match_at().
- renewal of mem_start_stk[] should be after
- STACK_PUSH_MEM_END() call.
-2003/07/29: [new] add regex_get_encoding(), regex_get_options() and
- regex_get_syntax().
-2003/07/25: [spec] (thanks akr)
- change group(...) to shy-group(?:...) if named group is
- used in the pattern.
- add REG_SYN_CAPTURE_ONLY_NAMED_GROUP.
-2003/07/24: [spec] rename REG_OPTION_CAPTURE_ONLY_NAMED_GROUP to
- REG_OPTION_DONT_CAPTURE_GROUP.
- add REG_OPTION_CAPTURE_GROUP.
-2003/07/17: [spec] rename REG_SYN_OP2_NAMED_SUBEXP to REG_SYN_OP2_NAMED_GROUP.
-2003/07/17: [spec] add REGERR_EMPTY_GROUP_NAME.
-2003/07/17: [spec] rename REGERR_INVALID_SUBEXP_NAME
- to REGERR_INVALID_CHAR_IN_GROUP_NAME.
-2003/07/17: [spec] restrict usable chars of group name to alphabet, digit,
- '_' or multibyte-char in fetch_name(). [ruby-dev:20706]
-2003/07/16: [impl] minor change of sample/names.c.
-2003/07/14: [impl] rename USE_NAMED_SUBEXP to USE_NAMED_GROUP.
-2003/07/14: [bug] add fetch_name() for USE_NAMED_SUBEXP off case.
-2003/07/14: [API] add regex_number_of_names().
-2003/07/08: [impl] change error message for undefined group number call.
- 'undefined group reference: /(a)\g<2>/'
- --> 'undefined group <2> reference: /(a)\g<2>/'
-2003/07/08: [dist] modify doc/RE.
-2003/07/07: [impl] OP_SET_OPTION is not needed in compiled code.
- add IS_DYNAMIC_OPTION() to regint.h.
-2003/07/07: [spec] called group should not ignore outside option (?i:...).
- ex. /(?i:(?<n>(a)\2)){0}\g<n>/.match("aA")
- add opcode OP_BACKREFN_IC and OP_BACKREF_MULTI_IC.
- set option status to effect memory in optimize_node_left().
-2003/07/07: [impl] add opcode OP_ANYCHAR_ML, OP_ANYCHAR_ML_STAR and
- OP_ANYCHAR_ML_START_PEEK_NEXT.
-2003/07/07: [bug] (thanks nobu) REG_MBLEN_TABLE[SJIS][0x80] should be 1.
-2003/07/07: [spec] rename REG_SYN_OP_QUOTE to REG_SYN_OP_ESC_Q_QUOTE.
-
-2003/07/04: Version 1.9.1
-
-2003/07/04: [new] add REG_OPTION_CAPTURE_ONLY_NAMED_GROUP. (thanks .NET)
-2003/07/04: [spec] check mbuf member in the case of
- REG_SYN_NOT_NEWLINE_IN_NEGATIVE_CC in parse_char_class().
-2003/07/04: [spec] typo REG_SYN_WARN_FOR_CC_OP_NOT_ESCAPEED.
- should be REG_SYN_WARN_FOR_CC_OP_NOT_ESCAPED.
-2003/07/04: [bug] conflict values on REG_SYN_WARN_FOR_CC_OP_NOT_ESCAPEED and
- REG_SYN_NOT_NEWLINE_IN_NEGATIVE_CC. (thanks nobu)
-2003/07/03: [spec] add REG_SYN_OP_ESC_CONTROL_CHAR flag.
-2003/07/03: [spec] remove REG_SYN_OP_ESC_OCTAL3 and REG_SYN_OP_ESC_X_HEX2
- flag from RegSyntaxGnuRegex.
-2003/07/03: [spec] remove REG_SYN_OP_NON_GREEDY flag from RegSyntaxGnuRegex.
-2003/07/02: [dist] fix doc/RE.
-2003/07/01: [impl] add config flag USE_VARIABLE_SYNTAX.
- (turn off variable syntax on Ruby)
-2003/07/01: [spec] add syntax behavior REG_SYN_DIFFERENT_LEN_ALT_LOOK_BEHIND.
-2003/06/30: [spec] allow different length top-level alternatives
- in look-behind. ex. (?<=abc|abcd), (?<!a|bc)
-2003/06/26: [spec] add option REG_OPTION_NEGATE_SINGLELINE.
-2003/06/26: [spec] should default on REG_OPTION_SINGLELINE
- for REG_SYNTAX_PERL and REG_SYNTAX_JAVA.
-2003/06/26: [impl] add options member to RegStntaxType.
-2003/06/26: [spec] don't change the meaning of '\Z' for REG_OPTION_SINGLELINE.
-2003/06/25: [dist] don't use option REG_NEWLINE for sample/posix.c.
-2003/06/25: [dist] modify testconv.rb.
- should match and convert double quoted string data.
- ex. x(/\ca/, "\001", 0, 1)
-2003/06/25: [impl] add REG_SYN_OP2_ESC_CAPITAL_C_BAR_CONTROL and
- REG_SYN_OP2_ESC_M_BAR_META.
-2003/06/25: [impl] add REG_SYN_OP_ESC_OCTAL3 and REG_SYN_OP_ESC_X_HEX2.
-2003/06/24: [impl] add REG_SYN_OP2_ESC_V_VTAB. (\v is VTAB)
-2003/06/24: [bug] should invert REG_OPTION_SINGLELINE flag
- in REG_SYN_OP2_OPTION_PERL.
-2003/06/24: [impl] add REG_SYN_OP2_OPTION_PERL and REG_SYN_OP2_OPTION_RUBY.
- meaning of (?m) and (?s) are depend on syntax.
-
-2003/06/20: Version 1.9.0
-
-2003/06/20: [spec] \Q...\E is not effective on REG_SYNTAX_RUBY. (thanks akr)
-2003/06/19: [inst] rename regex.h to oniguruma.h.
-2003/06/18: [impl] change REG_EXTERN setting condition. (__CYGWIN__)
-2003/06/18: [bug] return wrong result UTF-8 case in regex_mb2wc().
-2003/06/18: [impl] add REG_SYN_OP2_POSSESSIVE_INTERVAL. a{n,m}+
-2003/06/18: [new] add REG_SYNTAX_JAVA.
-2003/06/18: [spec] add REG_SYN_OP_QUOTE.
-2003/06/18: [spec] add op2 member to RegSyntaxType.
- rename some REG_SYN_OP_XXX to REG_SYN_OP2.
-2003/06/16: [new] Perl-like quotation operator \Q, \E.
-2003/06/16: [spec] should not control ignore case mode by escaped char.
- ex. /\J/i =~ "j", /[\J]/i =~ "j" (same as Perl)
-2003/06/13: [bug] modify onigposix.h.
-2003/06/13: [bug] should use -DIMPORT for link with DLL in win32/Makefile.
-2003/06/13: [dist] add sample/names.c
-2003/06/12: [bug] range should be from - 1 in not_wc_range_buf().
-2003/06/12: [spec] should warn for '-' before '&&' operator in char-class.
-2003/06/12: [new] add REG_SYNTAX_PERL.
-2003/06/12: [spec] add syntax behavior REG_SYN_WARN_FOR_CC_OP_NOT_ESCAPEED.
-2003/06/12: [spec] invalid POSIX bracket should be error. ex. [[:upper :]]
-2003/06/11: [new] char-class in char-class (as Java(TM)).
-2003/06/11: [spec] change AND operator in char-class from &&[..] to &&.
-2003/06/04: [spec] {n,m}+ should not be possessive operator.
- ex. a{3}+ should be (?:a{3})+
-2003/06/03: [bug] should compare strings with min-length in is_not_included().
-2003/06/03: [impl] automatic possessivate optimization. a*b ==> (?>a*)b
- (thanks Jeffrey E. F. Friedl)
-2003/06/02: [impl] remove multibyte-BitSet for OP_CCLASS_MB/OP_CCLASS_MB_NOT.
-2003/05/30: [new] char class intersection operator &&[...] like Java(TM).
- (thanks akr)
-2003/05/30: [bug] should use bbuf_free() for CClassNode in regex_node_free().
-2003/05/29: [bug] wrong usage of syntax REG_SYN_ALLOW_EMPTY_RANGE_IN_CC.
- /[d-a]/ should be error.
-2003/05/28: [impl] optimize stop-backtrack compiled code.
- (/(?>a*)/, /(?>\w+)/ etc...)
- add OP_POP opcode.
-2003/05/28: [new] possessive repeat operator. (?+, *+, ++, {n,m}+)
-2003/05/27: [spec] '-' at beginning of char-class should be warn only if
- it is start of range. (ex. /[--a]/)
-2003/05/27: [spec] should not warn for right bracket at beginning of pattern.
- ex. /]aaa/
-2003/05/27: [spec] change CCEND_ESC_WARN() from VERB_WARNING() to WARNING().
-2003/05/27: [spec] /[]aaa/ should be empty char-class error.
- /[]aaa]/ should be warn for 'without backslash'.
- (add char_exist_check() in regparse.c)
-2003/05/26: [bug] OP_REPEAT in recursive subexp call.
- ex. /(?<n>(a|b\g<n>c){3,5})/.match("baaaaca") => "baaaaca"
- was wrong result. (should be "aaaa")
-2003/05/26: [impl] add num_call member to regex_t.
-2003/05/26: [impl] add repeat_range member to regex_t.
- (for delete upper,lower members from StackType.u.repeat)
-2003/05/26: [bug] change print_names() to external regex_print_names().
-2003/05/26: [tune] change OP_NULL_CHECK_END process in match_at().
-2003/05/26: [spec] change CCEND_ESC_WARN() from WARNING() to VERB_WARNING().
-2003/05/26: [spec] remove POSIXLINE option. (?p:...)
- (be made the same as Ruby.)
-2003/05/22: [spec] use OP_NULL_CHECK_XXX only if repeat is infinite.
- prev. /(?:()|()){0,10}\1\2/ =~ "" ==> FAIL
- now /(?:()|()){0,10}\1\2/ =~ "" ==> MATCH
-
-2003/05/22: [impl] change target_empty setting condition in setup_tree().
-2003/05/19: [impl] avoid zero length repeat optimization. (thanks matz)
- /()*/ ==> /()?/, /()+/ ==> /()/ etc...
-2003/05/19: [impl] minor changes for gcc -Wall. (-DREG_DEBUG_STATISTICS case)
-2003/05/19: [spec] rename regex_foreach_names() to regex_foreach_name().
-2003/05/16: [new] add --with-statistics option to configure.
-2003/05/16: [bug] move RegOpInfo[] definition to regint.h.
-2003/05/16: [new] add regex_version().
-
-2003/05/14: Version 1.8.6
-
-2003/05/14: [bug] use _vsnprintf() on Win32.
-2003/05/14: [spec] define USE_NEWLINE_AT_END_OF_STRING_HAS_EMPTY_LINE.
- (/\n$/ =~ "\n", /\n\Z/ =~ "\n") [ruby-dev:20125]
-2003/05/14: [impl] minor changes for gcc -Wall.
-2003/05/14: [impl] add string.h check in AC_CHECK_HEADERS().
-2003/05/13: [impl] minor changes for gcc -Wall.
-2003/05/13: [impl] add regex_snprintf_with_pattern().
-2003/05/13: [spec] add warning for char class meta character without escape
- in Ruby mode ('[', '-', ']').
-2003/05/13: [impl] define WARNING() and VERB_WARNING() in regint.h.
-2003/05/13: [bug] correct is_code_ascii() for /[[:ascii:]]/.
-2003/05/12: [dist] add regular expression document (doc/RE).
-2003/05/12: [spec] specification of $(END_LINE) was made the same as Ruby 1.8.
- [ruby-dev:20130] (thanks matz)
-2003/05/12: [memo] shifted to Subversion(version 0.21.0) from CVS.
-
-2003/03/19: Version 1.8.5
-
-2003/03/19: [impl] change REG_EXTERN definition. (thanks nobu)
-2003/03/19: [impl] abbreviation for long error_par in regex_error_code_to_str().
-2003/03/18: [dist] change re.c.XXX.patch for GNU regex API changes.
-2003/03/18: [spec] change API regex_new(), regex_recompile() and
- regex_error_code_to_str().
- change API re_compile_pattern() and re_recompile_pattern().
-2003/03/18: [spec] replace REGERR_END_PATTERN_AT_GROUP_{COMMENT|OPTION} to
- REGERR_END_PATTERN_IN_GROUP.
-2003/03/17: [impl] should free err_arg.
-2003/03/17: [bug] mistake(high -> to) in add_wc_range_to_buf().
-2003/03/17: [spec] add err_arg argument to regex_new() and regex_recompile().
- for detail error message. (thanks akr)
-
-2003/03/12: Version 1.8.4
-
-2003/03/12: [tune] use cached value of effect node in get_min_match_length().
-2003/03/12: [bug] escaped alphabet should be TK_RAW_BYTE
- in fetch_token() and fetch_token_in_cc().
-2003/03/12: [spec] change named backref and subexp call format.
- backref: \k<name>, call: \g<name> (thanks akr)
-2003/03/11: [inst] add regparse.[ch] in win32/Makefile.
-2003/03/11: [bug] if UNALIGNED_WORD_ACCESS isn't setted
- then compile error in unset_addr_list_fix(). (thanks knu)
-2003/03/10: [impl] divide regcomp.c to regcomp.c, regparse.c and regparse.h.
-2003/03/10: [bug] should handle multi-byte code name in fetch_name().
-2003/03/10: [spec] remove REGERR_TABLE_FOR_IGNORE_CASE_IS_NOT_SETTED.
-2003/03/10: [spec] support POSIX API option REG_NOSUB.
- add comp_options member to POSIX API regex_t.
-
-2003/03/10: Version 1.8.3
-
-2003/03/10: [bug] can not compile with Ruby 1.6.8.
- (inconsistent st.h with 1.6 and 1.8)
- use hash table on Ruby 1.8 only.
-2003/03/10: [spec] forbid to use '\' in group name.
-2003/03/08: [impl] remove check_backref_number().
-2003/03/08: [bug] called group in 0-repeat should not be eliminated from
- compile code. ex. /(?*n)(?<n>){0}/ (thanks akr)
- add is_refered member to QualifierNode.
-2003/03/07: [impl] use hash table(st.[ch]) for implementation of name table.
- (enable on Ruby in default)
-2003/03/07: [new] add regex_foreach_names().
-2003/03/06: [impl] add member reg->stack_pop_level.
-2003/03/06: [impl] add operator OP_MEMORY_START and member reg->backtrack_mem.
-2003/03/06: [bug] if REG_OPTION_FIND_LONGEST or REG_OPTION_NOT_EMPTY,
- should handle backtrack of MEM_END.
- add OP_MEMORY_END_PUSH and OP_MEMORY_END_PUSH_REC.
-2003/03/06: [impl] rename OP_MEMORY_END_PUSH to OP_MEMORY_END_MARK.
-2003/03/06: [spec] change error messages.
-2003/03/06: [tune] add tiny_pop check in STACK_POP.
-
-2003/03/05: Version 1.8.2
-
-2003/03/05: [impl] use cache info in EFFECT_MEMORY case
- in optimize_node_info().
-2003/03/05: [impl] add EFFECT_MEMORY node reference count check
- in optimize_node_left().
-2003/03/05: [impl] add min-len, max-len, char-len cache in EffectNode.
-2003/03/05: [spec] allow to call in look behind. ex. /(?<=(?*a))/
-2003/03/05: [bug] forgotten N_ANCHOR case in check_backref_number(),
- subexp_inf_recursive_check_trav() etc...
-2003/03/05: [impl] rename USE_ONIGURUMA_EXTENSION to USE_SBMB_CLASS.
-2003/03/04: [impl] add CALL-node info in optimize_node_left().
-2003/03/04: [spec] prohibit left recursion of subexp call. ex. (?<n>|(?*n)a)
- add subexp_inf_recursive_check_trav().
-2003/03/04: [spec] rename REG_SYN_STRICT_CHECK_BACKREF_NUMBER
- to REG_SYN_STRICT_CHECK_BACKREF
-2003/03/03: [bug] /(?<n>a(?*n)|)/ isn't infinite recursion.
- fix N_LIST case in subexp_recursive_check(). (thanks akr)
-2003/03/03: [bug] /(?<n>|(?*n))+/ segmentation fault.
- should re-allocate in unset_addr_list_add(). (thanks akr)
-
-2003/03/01: Version 1.8.1
-
-2003/03/01: [bug] change STACK_GET_MEM_START() and STACK_PUSH_MEM_END().
-2003/03/01: [new] add reg_name_to_group_numbers() to POSIX API.
-2003/03/01: [impl] use OP_MEMORY_END_PUSH in callable subexp compiled code
- only if subexp is recursive.
-2003/03/01: [spec] rename regex_name_to_backrefs() to
- regex_name_to_group_numbers().
-2003/02/28: [impl] use function stack_double() instead of macro.
-2003/02/28: [new] subexp call. (?*name) (thanks akr)
-2003/02/28: [spec] add match stack limit check. (MATCH_STACK_LIMIT_SIZE)
-2003/02/28: [impl] check recursive subexp call.
-2003/02/28: [impl] add opcode OP_MEMORY_END_PUSH for callable subexp.
-2003/02/28: [impl] add opcode OP_CALL, OP_RETURN.
- add stack type STK_CALL_FRAME, STK_RETURN, STK_MEM_END.
-2003/02/26: [spec] add new syntax behavior REG_SYN_STRICT_CHECK_BACKREF_NUMBER.
- if it is setted, then error /(\1)/, /\1(..)/ etc...
-2003/02/26: [spec] if backref number is greater than max group number,
- then return compile error. (REGERR_INVALID_BACKREF_NUMBER)
-2003/02/26: [tune] bad implemented N_ALT case in get_min_match_length().
-2003/02/26: [dist] auto update testc.c and win32/testc.c in dist target.
-2003/02/26: [impl] add -win option to testconv.rb.
-2003/02/25: [spec] allow to assign same name to different group.
- add OP_BACKREF_MULTI.
-2003/02/24: [impl] reduce redundant repeat of empty target.
- ex. /()*/ ==> /()?/, /()+/ ==> /()/, /(?:)+/ ==> //
-2003/02/24: [impl] change condition in regex_is_allow_reverse_match().
-2003/02/24: [impl] convert i(/../, ...) functions in testconv.rb.
-2003/02/24: [impl] change name table struct.
-
-2003/02/22: Version 1.8.0
-
-2003/02/22: [new] named subexp, named back reference. (thanks akr)
- define: (?<name>...), back-ref: \g<name>
-2003/02/22: [impl] use str_node_can_be_split().
-2003/02/21: [dist] add sample/posix.c
-2003/02/21: [spec] rename some error code symbols.
-2003/02/21: [spec] max number of multibyte ranges(255) is small.
- 255 --> 1000. (thanks MoonWolf)
-2003/02/20: [new] supported Basic Regular Expression(BRE) in POSIX API.
- (REG_EXTENDED option: Extended RE)
-2003/02/20: [new] variable syntax.
-
-2003/02/12: Version 1.7.2
-
-2003/02/12: [bug] mismatch /\?a/i.match('?A').
- check raw value in scan_make_node() and scan_backslash().
- (thanks Nobu)
-2003/02/12: [impl] rename 'max_mem' to 'num_mem' in regex_t.
-2003/02/12: [impl] rename 'code' to 'enc' in regex_t.
-2003/02/12: [spec] remove transtable argument in regex_new and regex_recompile.
- remove transtable member in regex_t.
-2003/02/10: [inst] change backup file suffix name from '.orig' to '.ruby_orig'.
- (win32/Makefile)
-2003/02/10: [spec] number check in scan_char_class() ignore-case mode.
- ex. /[\x58-\x64]/i
-2003/02/10: [impl] don't use OP_MEMORY_END_PUSH (and STK_MEM_END).
-2003/02/10: [impl] lift up head_exact value from child qualifier node to parent.
-2003/02/10: [tune] change stack type values.
-2003/02/10: [dist] add HISTORY.
-2003/02/08: [tune] change stack type values.
-2003/02/08: [tune] add STACK_BASE_CHECK().
-2003/02/08: [tune] add STACK_PUSH_ENSURED().
-2003/02/08: [dist] change contents of doc/API.
-2003/02/07: [inst] change backup file suffix name from '.orig' to '.ruby_orig'.
-2003/02/07: [spec] range in char-class should be same spec. with Ruby
- in ignore-case mode. (ex. /[A-c]/i == /[a-c]/i)
- (thanks MoonWolf)
-2003/02/07: [spec] [!--] should be allowed. (thanks MoonWolf)
-2003/02/07: [dist] refresh re.c.180.patch for re.c (2003-02-06).
-
-2003/02/07: Version 1.7.1
-
-2003/02/07: [impl] check first byte of string in ignore-case mode.
- (get_head_exact_node())
-2003/02/07: [impl] remove redundant statements in setup_tree().
-2003/02/06: [new] create Win32 DLL.
-2003/02/06: [impl] use P_() macro for function prototype.
-2003/02/06: [impl] add HAVE_PROTOTYPE, HAVE_STDARG_PROTOTYPES in
- configure.in and config.h.in.
-2003/02/06: [spec] /[0-9-a]/ is allowed as usual char '-' and 'a' in Ruby.
- add USE_BETTER_COMPATIBILITY_FOR_ORIGINAL_REGEX in
- regint.h. (thanks MoonWolf)
-2003/02/06: [spec] rename REG_MBCTYPE_XXXX to REG_ENCODING_XXXX in onigposix.h.
-2003/02/05: [spec] rename MBCTYPE_XXXX to REG_MBCTYPE_XXXX in onigposix.h.
-2003/02/05: [spec] add POSIX API error REG_EONIG_THREAD to onigposix.h.
-2003/02/05: [dist] add .cvsignore file.
-
-2003/02/04: Version 1.7
-
-2003/02/04: [bug] typo miss in regex_region_copy().
-2003/02/04: [impl] change THREAD_PASS macro. (regint.h)
-2003/02/04: [dist] add API document file doc/API.
-2003/02/04: [tune] if sub_anchor has ANCHOR_BEGIN_LINE then
- set REG_OPTIMIZE_EXACT_BM in set_optimize_exact_info().
-2003/02/04: [spec] reimplement regex_clone() and it is obsoleted.
-2003/02/04: [bug] add REGERR_OVER_THREAD_PASS_LIMIT_COUNT
- to regerror.c regposix.c.
-2003/02/03: [bug] Hankaku-Kana may be second byte in Shift_JIS
- regex_is_allow_reverse_match().
-2003/02/03: [impl] add optimization type REG_OPTIMIZE_EXACT_BM_NOT_REV.
- remove exact_allow_reverse_match member in regex_t.
-2003/02/03: [impl] add exact_allow_reverse_match member in regex_t.
-2003/02/03: [impl] compile-search conflict in regex_search() is handled.
-2003/02/01: [tune] decrease regex_region_clear() calling from regex_search().
-2003/02/01: [tune] remove region argument from match_at().
-2003/01/31: [tune] don't use strlen() in regexec() and regcomp().
-2003/01/31: [tune] decrease regex_reduce_chain() calling in regex_search().
-2003/01/31: [bug] STRING_CMP() in regexec.c was wrong in ignore-case.
-2003/01/31: [impl] convert to lower-case char at string compile time.
- change SBTRANSCMP() in regexec.c.
-2003/01/31: [impl] rename TTRANS() to TOLOWER().
-2003/01/30: [bug] .c.o --> .c.obj in win32\Makefile.
-2003/01/30: [impl] add -DNOT_RUBY to Makefile.in.
- NOT_RUBY is refered in regint.h for escape double
- including config.h.
-2003/01/30: [impl] when string hasn't case ambiguity, don't compile
- to ignore case opcode.
-2003/01/29: [impl] add SJIS, UTF-8 test_sb() test.
-2003/01/29: [dist] add INSTALL-RUBY file.
-2003/01/28: [test] success in Cygwin, Ruby 1.8.0 (2003-01-27).
-2003/01/24: [inst] add rback target to Makefile.in.
-2003/01/24: [impl] change SBCMP() -> IS_NEWLINE() in match_at().
-2003/01/23: [impl] add encoding arg to scan_xxxx_number().
-2003/01/23: [impl] rename WCInt to WCINT.
-2003/01/22: [bug] POSIX API regexec() was not thread safe.
- remove region member from POSIX regex_t.
- [new] add search time option REG_OPTION_POSIX_REGION.
- (region argument is treated as regmatch_t[] type)
- speed up regexec().
-2003/01/22: [memo] start CVS entry in my box.
-
-2003/01/21: Version 1.6
-
-2003/01/21: [test] Mac OS X 10.1, Ruby 1.8.0 (2003-01-20)
-2003/01/20: [impl] add UTF-8 check to test.rb. (thanks UENO Katsuhiro)
-2003/01/18: [impl] change REGION_NOTPOS to REG_REGION_NOTPOS in regex.h.
-2003/01/17: [dist] add sample/simple.c.
-2003/01/17: [inst] add configure option --with-rubydir.
-2003/01/17: [bug] bad implemeted POSIX API options.
- default: /./ not match "\n", anchor not match "\n"
- REG_NEWLINE: /./ not match "\n", anchor match "\n"
-2003/01/16: [impl] rewrite POSIX API regexec() for speed up.
-2003/01/16: [impl] add region member to POSIX regex_t struct.
-2003/01/16: [inst] rename library file from 'libregex.a' to 'libonig.a'.
-2003/01/15: [dist] add testc.c to distribution file.
-2003/01/15: [test] success in 'make rtest/ctest/ptest' on Windows 2000.
-2003/01/15: [bug] change '/' to \' in win32/Makefile.
-2003/01/14: [test] success in Ruby make test on Windows 2000.
- VC++6.0, Ruby 1.6.8 (2003-01-12)
-2003/01/14: [inst] change Makefile.in and win32/Makefile.
-2003/01/11: [inst] changes for Win32 platform. (regint.h, reggnu.c, regcomp.c)
-2003/01/11: [dist] add win32 directory. (config.h, Makefile, testc.c)
-2003/01/10: [inst] add onigposix.h to install target. (Makefile.in)
-2003/01/10: [bug] lacked a comma in ESTRING[]. (regposerr.c)
-2003/01/10: [bug] local variable name was wrong. buf -> tbuf (regerror())
-2003/01/10: [spec] remove REG_RUBY_M17N case from onigposix.h and regposix.c.
-
-2003/01/09: Version 1.5
-
-2003/01/09: [inst] replace Ruby re.c.XXX.patch files. (166 -> 168, 172 -> 180)
-2003/01/09: [new] implement POSIX API. (thanks knu)
- (onigposix.h, regposix.c, regposerr.c)
-2003/01/08: [spec] remove REGERR_END_PATTERN_AFTER_BACKSLASH in regex.h.
-2003/01/08: [spec] region arg can be NULL in regex_search() and regex_match().
-
-2003/01/08: Version 1.4
-
-2003/01/08: [inst] add test program converter (test.rb -> testc.c).
-2003/01/08: [bug] move GET_WCINT() from regcomp.c to regint.h.
-2003/01/07: [inst] add new test script (test.rb).
-2002/12/30: [bug] wrong merge in multibyte mode (alt_merge_opt_exact_info()).
-2002/12/28: [inst] add rtest target to Makefile.in.
-2002/12/28: [bug] /\xfe/.match("\xfe") mismatch in multibyte mode.
- add "raw" flag arg to concat_opt_exact_info_str().
-2002/12/25: [bug] check condition was wrong in alt_merge_opt_map_info().
-2002/12/25: [impl] add threshold_len check in regex_search().
-2002/12/23: [bug] prec-read in alternative (/a|(?=z).f/.match("zf") => nil)
-2002/12/23: [bug] \G in alternative (/a|\Gz/.match("bza") => "z").
- add start member in MatchArg. (regexec.c)
-2002/12/21: [impl] **** rewrite all optimization process. ****
-2002/12/16: [impl] remove node subtype EFFECT_EMPTY.
-2002/12/12: [impl] reconstruct node types. (regcomp.c)
-2002/12/11: [impl] add regerror.c
-2002/12/10: [bug] [ruby-dev:19042] (thanks Nobu)
- anchor(\G etc...) influenced outside of "|". (/a|\Gb/)
-2002/11/30: [bug] [ruby-dev:18966] (thanks Nobu)
- char-class(\S, [^\s] etc...) optimize map-info was wrong.
-2002/11/29: [bug] infinite loop on NULL-pointer str search (regex_search()).
- (thanks matz)
-2002/11/29: [bug] change static -> extern (regex_chain_reduce()).
-2002/11/29: [bug] change encoding to RegDefaultCharEncoding
- in re_recompile_pattern(). (adapt to re.c)
-2002/04/24: [spec] USE_ONIGURUMA_EXTENSION is disabled in default.
-2002/04/24: [new] add searching time option: REG_OPTION_NOTBOL/NOTEOL.
- add searching time option argument to regex_search() and
- regex_match(). (prepare for POSIX API)
-2002/04/20: [impl] divide regex.c file into regcomp.c, regexec.c, reggnu.c
- and regint.h.
-2002/04/09: [impl] move IS_MULTILINE() to outside of loop in OP_ANYCHAR_STAR.
-2002/04/08: [impl] don't use OP_REPEAT operator for '??'.
-2002/04/06: [impl] reduce redundant nested repeat operators(?,*,+,??,*?,+?).
- ex. (?:a*)?, (?:a??)* etc..
-2002/04/06: [spec] should not warn for /(?:a?)+?/.
-2002/04/04: [spec] should allow fixed length alternative and repeat pattern
- in look-behind. ex. /(?<=(a|b){3})/ (thanks Guy Decoux)
-2002/04/02: [spec] should warn for /(?:a+)?/ and /(?:a*)??/. (thanks akr)
-
-2002/04/01: Version 1.3
-
-2002/04/01: [dist] add COPYING.
-2002/03/30: [spec] warn redundant nested repeat operator
- in Ruby verbose mode. ex. (?:a*)?
-2002/03/30: [spec] nested repeat operator error check should be
- same with GNU regex. (thanks Guy Decoux)
-2002/03/30: [new] add \x{hexadecimal-wide-char}. (thanks matz)
-2002/03/27: [bug] MBCTYPE_XXX symbol values should be same with GNU regex.
-2002/03/27: [impl] add THREAD_ATOMIC to regex_clone(), regex_init(), regex_end().
-2002/03/25: [spec] if encoding is utf-8, allow combination of singlebyte and
- multibyte code range in char class.
- (cancelled 2002/04/01: for M17N compatibility)
-2002/03/25: [dist] description of the license condition is added to README.
-2002/03/23: [bug] should set all bits of reg->mem_stats,
- if REG_OPTION_FIND_LONGEST or REG_OPTION_NOT_EMPTY.
-2002/03/23: [new] add a new option REG_OPTION_NOT_EMPTY.
-2002/03/20: [spec] allow incompleted left brace as an usual char.
- ex. /{/, /({)/, /a{2,3/ etc...
-2002/03/20: [impl] serialize integer in bytecode.
- (switch by UNALIGNED_WORD_ACCESS in regex.c)
-2002/03/20: [impl] change re_mbcinit() for REG_RUBY_M17N.
-2002/03/19: [impl] word alignment of char class multi-byte code ranges.
-2002/03/19: [impl] replace OP_EXACTMB4N with OP_EXACTMB3N.
-2002/03/19: [bug] OP_CCLASS_MB_NOT process in matchAt() is wrong.
-2002/03/19: [new] add re_mbctab[] for Ruby extension library compatibility.
-2002/03/19: [spec] allow nested repeat operator, if operator is {n,m} type.
-2002/03/19: [new] add REG_IS_PATTERN_ERROR(ecode) in regex.h
-2002/03/18: [spec] /[a-b-c]/ should be error.
-2002/03/18: [bug] /[\w-a]/ should be error. (thanks Guy Decoux)
-2002/03/18: [bug] /[\]/ should be error. (thanks Guy Decoux)
-2002/03/18: [bug] /()*/ etc.. should not be error. (thanks Guy Decoux)
-2002/03/18: [spec] /a{1}*/ should not be error. (thanks Guy Decoux)
-2002/03/18: [bug] ab{2}{3} was interpreded to (?:a(?:b{2})){3}
- (thanks Guy Decoux)
-2002/03/18: [bug] abort /(?i)*a/ etc... (thanks Guy Decoux)
-2002/03/18: [bug] abort /a|*/,/a|{1}/ etc... (thanks Guy Decoux)
-
-2002/03/13: Version 1.2
-
-2002/03/13: [test] success in rubicon/builtin/AllBuiltinTests.rb.
- (thanks rubicon)
-2002/03/13: [bug] OP_EXACTMBN process in matchAt() is wrong.
-2002/03/13: [bug] start argument of BackwardSearchRange() is wrong.
-2002/03/12: [spec] change function name style from CamelCase
- to underline_separation. (includes API)
-2002/03/12: [bug] if pattern has nested null-check, cause infinite loop.
- correct STACK_NULL_CHECK() macro. (thanks Guy Decoux)
-2002/03/11: [bug] it is wrong that four numbers to continue as
- an octal value in scanBackSlash(). ex. /\0111/
- (thanks matz)
-2002/03/11: [new] \k (single-byte word char), \K (multi-byte char).
-2002/03/09: [inst] add two targets to Makefile.in (166 and 172).
-2002/03/09: [spec] decrease REG_MAX_BACKREF_NUM, REG_MAX_REPEAT_NUM
- values.
-2002/03/08: [spec] allow use of "\A"(begin-buf) in look-behind.
-2002/03/08: [impl] add a new opcode OP_PUSH_IF_PEEK_NEXT.
-2002/03/08: [impl] add a new opcode OP_ANYCHAR_STAR_PEEK_NEXT.
-2002/03/07: [spec] prohibit use of capture group "(...)"
- in negative look-behind.
-2002/03/07: [inst] add configure.in, config.h.in, Makefile.in.
-2002/03/07: [impl] call Init_REGEX_STAT() in RegexInit().
-2002/03/07: [spec] less length string match with negative look-behind.
- ex. /(?<!XXX)a/.match("Xa"). (thanks Nobu)
-2002/03/06: [impl] expand repeated string, if expanded length <= 100.
- ex. /(?:abc){10}/
-2002/03/06: [new] add a symbol REG_TRANSTABLE_USE_DEFAULT in regex.h.
-2002/03/06: [impl] rename RegDefaultCharCode to RegDefaultCharEncoding.
-2002/03/06: [bug] if pattern has NULL(\000) char, infinite loop happens
- in ScanMakeNode(). (beware of strchr(). thanks Nobu)
-2002/03/06: [bug] range argument of ForwardSearchRange() is wrong.
- ex. /\A.a/, /\G.a/ mismatched with "aa". (thanks Nobu)
-2002/03/05: [new] add RegexMatch() API. rename regexMatch() to matchAt().
-2002/03/05: [impl] change function definition style.
-2002/03/05: [impl] abolish use of macro symbol which name begin with underline.
-2002/03/04: [bug] make up a break-statement in compileTree().
- (compile error on Mac OS X 10.1.3)
-
-2002/03/04: Version 1.1
-
-2002/03/04: [impl] replace STK_BOTTOM with STK_ALT.
-2002/03/02: [impl] add new opcode OP_FINISH and new stack type
- STK_BOTTOM for (little bit) speed up STACK_POP.
-2002/03/02: [impl] add new opcode OP_EXACT1_IC, OP_EXACTN_IC
- for compile time ignore case check.
- remove opcode OP_EXACT1_RAW, OP_EXACTN_RAW.
-2002/03/02: [impl] add OpTime info to statistical data.
-2002/02/28: [bug] sub_anchor($) in ForwardSearch() and BackwardSearch().
- ex. /$\x0az/.match("\nz")
-2002/02/28: [new] look-behind (?<=pattern), (?<!pattern).
-2002/02/27: [bug] use StackIndex instead of StackType* for realloc problem.
-2002/02/27: [impl] use m17n_codepoint() as mb2wc() in REG_RUBY_M17N.
-2002/02/27: [spec] undefined POSIX bracket /[[:xyz:]]/ should be syntax error.
-2002/02/26: [bug] ex. /$*/, /[a-]/, /((?i)a)b/ (thanks matz)
-
-2002/02/25: Version 1.0 (first release)
-
---
-[bug: bug fix]
-[API: API change/new/delete]
-[new: new feature]
-[spec: specification change]
-[impl: implementation change]
-[tune: tune for speed up]
-[inst: changes for installation]
-[dist: distribution change]
-[test: test]
-[memo: memo]
---
-<create tag>
-svn copy http://localhost/repos/trunk/oniguruma http://localhost/repos/tags/oniguruma/X.X.X -m "onigdXXXXXXXX"
diff --git a/ext/mbstring/oniguruma/README b/ext/mbstring/oniguruma/README
deleted file mode 100644
index 3880423f03..0000000000
--- a/ext/mbstring/oniguruma/README
+++ /dev/null
@@ -1,165 +0,0 @@
-README 2004/02/25
-
-Oniguruma ---- (C) K.Kosako <kosako@sofnec.co.jp>
-
-http://www.ruby-lang.org/cgi-bin/cvsweb.cgi/oniguruma/
-http://www.freebsd.org/cgi/cvsweb.cgi/ports/devel/oniguruma/
-
-Oniguruma is a regular expressions library.
-The characteristics of this library is that different character encoding
-for every regular expression object can be specified.
-
-Supported character encodings:
-
- ASCII, UTF-8,
- EUC-JP, EUC-TW, EUC-KR, EUC-CN,
- Shift_JIS, Big5, KOI8, KOI8-R,
- ISO-8859-1, ISO-8859-2, ISO-8859-3, ISO-8859-4, ISO-8859-5,
- ISO-8859-6, ISO-8859-7, ISO-8859-8, ISO-8859-9, ISO-8859-10,
- ISO-8859-11, ISO-8859-13, ISO-8859-14, ISO-8859-15, ISO-8859-16
-
-
-There are two ways of using of it in this program.
-
- * Built-in regular expression engine of Ruby
- * C library (supported APIs: GNU regex, POSIX, Oniguruma native)
-
-------------------------------------------------------------
-
-Install
-
-(A) Install into Ruby
-
- See INSTALL-RUBY.
-
- (character encodings: ASCII, UTF-8, EUC-JP, Shift_JIS)
-
-
-(B) Install C library
-
- (B-1) Unix and Cygwin platform
-
- 1. ./configure
- 2. make
- 3. make install
-
- (* uninstall: make uninstall)
-
- * test (ASCII/EUC-JP)
- 4. make ctest
-
-
- (B-2) Win32 platform (VC++)
-
- 1. copy win32\Makefile Makefile
- 2. copy win32\config.h config.h
- 3. nmake
-
- onig_s.lib: static link library
- onig.dll: dynamic link library
-
- * test (ASCII/Shift_JIS)
- 4. copy win32\testc.c testc.c
- 5. nmake ctest
-
-
-
-License
-
- When this software is partly used or it is distributed with Ruby,
- this of Ruby follows the license of Ruby.
- It follows the BSD license in the case of the one except for it.
-
-
-
-Regular Expressions
-
- See doc/RE (or doc/RE.ja for Japanese).
-
-
-Sample Programs
-
- sample/simple.c example of the minimum (native API)
- sample/names.c example of the named group callback.
- sample/encode.c example of some encodings.
- sample/listcap.c example of the capture history.
- sample/posix.c POSIX API sample.
- sample/sql.c example of the variable meta characters.
- (SQL-like pattern matching)
-
-
-Source Files
-
- oniguruma.h Oniguruma API header file. (public)
- oniggnu.h GNU regex API header file. (public)
- onigcmpt200.h Oniguruma API backward compatibility header file. (public)
- (for 2.0.0 or more older version)
-
- regenc.h character encodings framework header file.
- regint.h internal definitions
- regparse.h internal definitions for regparse.c and regcomp.c
- regcomp.c compiling and optimization functions
- regenc.c character encodings framework.
- regerror.c error message function
- regex.c source files wrapper for Ruby
- regexec.c search and match functions
- regparse.c parsing functions.
- reggnu.c GNU regex API functions
-
- onigposix.h POSIX API header file. (public)
- regposerr.c POSIX error message function.
- regposix.c POSIX functions.
-
- enc/mktable.c character type table generator.
- enc/ascii.c ASCII encoding.
- enc/iso8859_1.c ISO-8859-1 encoding. (Latin-1)
- enc/iso8859_2.c ISO-8859-2 encoding. (Latin-2)
- enc/iso8859_3.c ISO-8859-3 encoding. (Latin-3)
- enc/iso8859_4.c ISO-8859-4 encoding. (Latin-4)
- enc/iso8859_5.c ISO-8859-5 encoding. (Cyrillic)
- enc/iso8859_6.c ISO-8859-6 encoding. (Arabic)
- enc/iso8859_7.c ISO-8859-7 encoding. (Greek)
- enc/iso8859_8.c ISO-8859-8 encoding. (Hebrew)
- enc/iso8859_9.c ISO-8859-9 encoding. (Latin-5 or Turkish)
- enc/iso8859_10.c ISO-8859-10 encoding. (Latin-6 or Nordic)
- enc/iso8859_11.c ISO-8859-11 encoding. (Thai)
- enc/iso8859_13.c ISO-8859-13 encoding. (Latin-7 or Baltic Rim)
- enc/iso8859_14.c ISO-8859-14 encoding. (Latin-8 or Celtic)
- enc/iso8859_15.c ISO-8859-15 encoding. (Latin-9 or West European with Euro)
- enc/iso8859_16.c ISO-8859-16 encoding.
- (Latin-10 or South-Eastern European with Euro)
- enc/utf8.c UTF-8 encoding.
- enc/euc_jp.c EUC-JP encoding.
- enc/euc_tw.c EUC-TW encoding.
- enc/euc_kr.c EUC-KR, EUC-CN encoding.
- enc/sjis.c Shift_JIS encoding.
- enc/koi8.c KOI8 encoding.
- enc/koi8_r.c KOI8-R encoding.
- enc/big5.c Big5 encoding.
-
-
-
-API differences with Japanized GNU regex(version 0.12) of Ruby
-
- + re_compile_fastmap() is removed.
- + re_recompile_pattern() is added.
- + re_alloc_pattern() is added.
-
-
-ToDo
-
- 1 support 16-bit encodings. (UTF-16)
- 2 different encoding pattern with target.
- (ex. ASCII/UTF-16, UTF-16 BE and UTF-16 LE)
- 3 add enc/name.c (onigenc_get_enc_by_name(name))
-
- ? transmission stopper. (return ONIG_STOP from match_at())
- ? implement syntax behavior ONIG_SYN_CONTEXT_INDEP_ANCHORS.
- ? better acess to hash table (st.c).
- non null-terminated key version st_lookup().
- ? grep-like tool 'onigrep'.
- ? return parse tree of regexp pattern to application.
- ?? /a{n}?/ should be interpreted as /(?:a{n})?/.
- ?? \h hexadecimal digit char ([0-9a-fA-F]), \H not \h.
-
-and I'm thankful to Akinori MUSHA.
diff --git a/ext/mbstring/oniguruma/config.h.in b/ext/mbstring/oniguruma/config.h.in
deleted file mode 100644
index 1a59a45dc0..0000000000
--- a/ext/mbstring/oniguruma/config.h.in
+++ /dev/null
@@ -1,66 +0,0 @@
-/* config.h.in. Generated automatically from configure.in by autoheader. */
-
-/* Define if using alloca.c. */
-#undef C_ALLOCA
-
-/* Define to empty if the keyword does not work. */
-#undef const
-
-/* Define to one of _getb67, GETB67, getb67 for Cray-2 and Cray-YMP systems.
- This function is required for alloca.c support on those systems. */
-#undef CRAY_STACKSEG_END
-
-/* Define if you have alloca, as a function or macro. */
-#undef HAVE_ALLOCA
-
-/* Define if you have <alloca.h> and it should be used (not on Ultrix). */
-#undef HAVE_ALLOCA_H
-
-/* If using the C implementation of alloca, define if you know the
- direction of stack growth for your system; otherwise it will be
- automatically deduced at run-time.
- STACK_DIRECTION > 0 => grows toward higher addresses
- STACK_DIRECTION < 0 => grows toward lower addresses
- STACK_DIRECTION = 0 => direction of growth unknown
- */
-#undef STACK_DIRECTION
-
-/* Define if you have the ANSI C header files. */
-#undef STDC_HEADERS
-
-/* Define if you can safely include both <sys/time.h> and <time.h>. */
-#undef TIME_WITH_SYS_TIME
-
-/* The number of bytes in a int. */
-#undef SIZEOF_INT
-
-/* The number of bytes in a long. */
-#undef SIZEOF_LONG
-
-/* The number of bytes in a short. */
-#undef SIZEOF_SHORT
-
-/* Define if you have the <stdlib.h> header file. */
-#undef HAVE_STDLIB_H
-
-/* Define if you have the <string.h> header file. */
-#undef HAVE_STRING_H
-
-/* Define if you have the <strings.h> header file. */
-#undef HAVE_STRINGS_H
-
-/* Define if you have the <sys/time.h> header file. */
-#undef HAVE_SYS_TIME_H
-
-/* Define if you have the <sys/times.h> header file. */
-#undef HAVE_SYS_TIMES_H
-
-/* Define if you have the <unistd.h> header file. */
-#undef HAVE_UNISTD_H
-
-/* Define if you have the function argument prototype */
-#undef HAVE_PROTOTYPES
-
-/* Define if you have the variable length prototypes and stdarg.h */
-#undef HAVE_STDARG_PROTOTYPES
-
diff --git a/ext/mbstring/oniguruma/enc/ascii.c b/ext/mbstring/oniguruma/enc/ascii.c
deleted file mode 100644
index 44cc78f77c..0000000000
--- a/ext/mbstring/oniguruma/enc/ascii.c
+++ /dev/null
@@ -1,54 +0,0 @@
-/**********************************************************************
-
- ascii.c - Oniguruma (regular expression library)
-
- Copyright (C) 2003-2004 K.Kosako (kosako@sofnec.co.jp)
-
-**********************************************************************/
-#include "regenc.h"
-
-static int
-ascii_code_is_ctype(OnigCodePoint code, unsigned int ctype)
-{
- if (code < 128)
- return ONIGENC_IS_ASCII_CODE_CTYPE(code, ctype);
- else
- return FALSE;
-}
-
-OnigEncodingType OnigEncodingASCII = {
- {
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
- },
- "US-ASCII", /* name */
- 1, /* max byte length */
- FALSE, /* is_fold_match */
- ONIGENC_CTYPE_SUPPORT_LEVEL_SB, /* ctype_support_level */
- TRUE, /* is continuous sb mb codepoint */
- onigenc_single_byte_mbc_to_code,
- onigenc_single_byte_code_to_mbclen,
- onigenc_single_byte_code_to_mbc,
- onigenc_ascii_mbc_to_lower,
- onigenc_ascii_mbc_is_case_ambig,
- ascii_code_is_ctype,
- onigenc_nothing_get_ctype_code_range,
- onigenc_single_byte_left_adjust_char_head,
- onigenc_single_byte_is_allowed_reverse_match,
- onigenc_nothing_get_all_fold_match_code,
- onigenc_nothing_get_fold_match_info
-};
diff --git a/ext/mbstring/oniguruma/enc/big5.c b/ext/mbstring/oniguruma/enc/big5.c
deleted file mode 100644
index 8aad7f5354..0000000000
--- a/ext/mbstring/oniguruma/enc/big5.c
+++ /dev/null
@@ -1,122 +0,0 @@
-/**********************************************************************
-
- big5.c - Oniguruma (regular expression library)
-
- Copyright (C) 2003-2004 K.Kosako (kosako@sofnec.co.jp)
-
-**********************************************************************/
-#include "regenc.h"
-
-static OnigCodePoint
-big5_mbc_to_code(UChar* p, UChar* end)
-{
- return onigenc_mbn_mbc_to_code(ONIG_ENCODING_BIG5, p, end);
-}
-
-static int
-big5_code_to_mbc(OnigCodePoint code, UChar *buf)
-{
- return onigenc_mb2_code_to_mbc(ONIG_ENCODING_BIG5, code, buf);
-}
-
-static int
-big5_mbc_to_lower(UChar* p, UChar* lower)
-{
- return onigenc_mbn_mbc_to_lower(ONIG_ENCODING_BIG5, p, lower);
-}
-
-static int
-big5_code_is_ctype(OnigCodePoint code, unsigned int ctype)
-{
- return onigenc_mb2_code_is_ctype(ONIG_ENCODING_BIG5, code, ctype);
-}
-
-static const char BIG5_CAN_BE_TRAIL_TABLE[256] = {
- 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, 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, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0
-};
-
-#define BIG5_ISMB_FIRST(byte) (OnigEncodingBIG5.len_table[byte] > 1)
-#define BIG5_ISMB_TRAIL(byte) BIG5_CAN_BE_TRAIL_TABLE[(byte)]
-
-static UChar*
-big5_left_adjust_char_head(UChar* start, UChar* s)
-{
- UChar *p;
- int len;
-
- if (s <= start) return s;
- p = s;
-
- if (BIG5_ISMB_TRAIL(*p)) {
- while (p > start) {
- if (! BIG5_ISMB_FIRST(*--p)) {
- p++;
- break;
- }
- }
- }
- len = enc_len(ONIG_ENCODING_BIG5, *p);
- if (p + len > s) return p;
- p += len;
- return p + ((s - p) & ~1);
-}
-
-static int
-big5_is_allowed_reverse_match(UChar* s, UChar* end)
-{
- UChar c = *s;
-
- return (BIG5_ISMB_TRAIL(c) ? FALSE : TRUE);
-}
-
-OnigEncodingType OnigEncodingBIG5 = {
- {
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1
- },
- "Big5", /* name */
- 2, /* max byte length */
- FALSE, /* is_fold_match */
- ONIGENC_CTYPE_SUPPORT_LEVEL_SB, /* ctype_support_level */
- FALSE, /* is continuous sb mb codepoint */
- big5_mbc_to_code,
- onigenc_mb2_code_to_mbclen,
- big5_code_to_mbc,
- big5_mbc_to_lower,
- onigenc_mbn_mbc_is_case_ambig,
- big5_code_is_ctype,
- onigenc_nothing_get_ctype_code_range,
- big5_left_adjust_char_head,
- big5_is_allowed_reverse_match,
- onigenc_nothing_get_all_fold_match_code,
- onigenc_nothing_get_fold_match_info
-};
diff --git a/ext/mbstring/oniguruma/enc/euc_jp.c b/ext/mbstring/oniguruma/enc/euc_jp.c
deleted file mode 100644
index 848016ba5a..0000000000
--- a/ext/mbstring/oniguruma/enc/euc_jp.c
+++ /dev/null
@@ -1,191 +0,0 @@
-/**********************************************************************
-
- euc_jp.c - Oniguruma (regular expression library)
-
- Copyright (C) 2003-2004 K.Kosako (kosako@sofnec.co.jp)
-
-**********************************************************************/
-#include "regenc.h"
-
-#define eucjp_islead(c) ((UChar )((c) - 0xa1) > 0xfe - 0xa1)
-
-static OnigCodePoint
-eucjp_mbc_to_code(UChar* p, UChar* end)
-{
- int c, i, len;
- OnigCodePoint n;
-
- c = *p++;
- len = enc_len(ONIG_ENCODING_EUC_JP, c);
- n = c;
- if (len == 1) return n;
-
- for (i = 1; i < len; i++) {
- if (p >= end) break;
- c = *p++;
- n <<= 8; n += c;
- }
- return n;
-}
-
-static int
-eucjp_code_to_mbclen(OnigCodePoint code)
-{
- if ((code & 0xff0000) != 0) return 3;
- else if ((code & 0xff00) != 0) return 2;
- else return 1;
-}
-
-static int
-eucjp_code_to_mbc_first(OnigCodePoint code)
-{
- int first;
-
- if ((code & 0xff0000) != 0) {
- first = (code >> 16) & 0xff;
- /*
- if (enc_len(ONIG_ENCODING_EUC_JP, first) != 3)
- return ONIGERR_INVALID_WIDE_CHAR_VALUE;
- */
- }
- else if ((code & 0xff00) != 0) {
- first = (code >> 8) & 0xff;
- /*
- if (enc_len(ONIG_ENCODING_EUC_JP, first) != 2)
- return ONIGERR_INVALID_WIDE_CHAR_VALUE;
- */
- }
- else {
- /*
- if (enc_len(ONIG_ENCODING_EUC_JP, code) != 1)
- return ONIGERR_INVALID_WIDE_CHAR_VALUE;
- */
- return (int )code;
- }
- return first;
-}
-
-static int
-eucjp_code_to_mbc(OnigCodePoint code, UChar *buf)
-{
- UChar *p = buf;
-
- if ((code & 0xff0000) != 0) *p++ = (UChar )(((code >> 16) & 0xff));
- if ((code & 0xff00) != 0) *p++ = (UChar )(((code >> 8) & 0xff));
- *p++ = (UChar )(code & 0xff);
-
-#if 1
- if (enc_len(ONIG_ENCODING_EUC_JP, buf[0]) != (p - buf))
- return ONIGERR_INVALID_WIDE_CHAR_VALUE;
-#endif
- return p - buf;
-}
-
-static int
-eucjp_mbc_to_lower(UChar* p, UChar* lower)
-{
- int len;
-
- if (ONIGENC_IS_MBC_ASCII(p)) {
- *lower = ONIGENC_ASCII_CODE_TO_LOWER_CASE(*p);
- return 1;
- }
- else {
- len = enc_len(ONIG_ENCODING_EUC_JP, *p);
- if (lower != p) {
- /* memcpy(lower, p, len); */
- int i;
- for (i = 0; i < len; i++) {
- *lower++ = *p++;
- }
- }
- return len; /* return byte length of converted char to lower */
- }
-}
-
-static int
-eucjp_code_is_ctype(OnigCodePoint code, unsigned int ctype)
-{
- if ((ctype & ONIGENC_CTYPE_WORD) != 0) {
- if (code < 128)
- return ONIGENC_IS_ASCII_CODE_CTYPE(code, ctype);
- else {
- int first = eucjp_code_to_mbc_first(code);
- return (enc_len(ONIG_ENCODING_EUC_JP, first) > 1 ? TRUE : FALSE);
- }
-
- ctype &= ~ONIGENC_CTYPE_WORD;
- if (ctype == 0) return FALSE;
- }
-
- if (code < 128)
- return ONIGENC_IS_ASCII_CODE_CTYPE(code, ctype);
- else
- return FALSE;
-}
-
-static UChar*
-eucjp_left_adjust_char_head(UChar* start, UChar* s)
-{
- /* Assumed in this encoding,
- mb-trail bytes don't mix with single bytes.
- */
- UChar *p;
- int len;
-
- if (s <= start) return s;
- p = s;
-
- while (!eucjp_islead(*p) && p > start) p--;
- len = enc_len(ONIG_ENCODING_EUC_JP, *p);
- if (p + len > s) return p;
- p += len;
- return p + ((s - p) & ~1);
-}
-
-static int
-eucjp_is_allowed_reverse_match(UChar* s, UChar* end)
-{
- UChar c = *s;
- if (c <= 0x7e || c == 0x8e || c == 0x8f)
- return TRUE;
- else
- return FALSE;
-}
-
-OnigEncodingType OnigEncodingEUC_JP = {
- {
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 3,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1
- },
- "EUC-JP", /* name */
- 3, /* max byte length */
- FALSE, /* is_fold_match */
- ONIGENC_CTYPE_SUPPORT_LEVEL_SB, /* ctype_support_level */
- FALSE, /* is continuous sb mb codepoint */
- eucjp_mbc_to_code,
- eucjp_code_to_mbclen,
- eucjp_code_to_mbc,
- eucjp_mbc_to_lower,
- onigenc_mbn_mbc_is_case_ambig,
- eucjp_code_is_ctype,
- onigenc_nothing_get_ctype_code_range,
- eucjp_left_adjust_char_head,
- eucjp_is_allowed_reverse_match,
- onigenc_nothing_get_all_fold_match_code,
- onigenc_nothing_get_fold_match_info
-};
diff --git a/ext/mbstring/oniguruma/enc/euc_kr.c b/ext/mbstring/oniguruma/enc/euc_kr.c
deleted file mode 100644
index 1a0fc996dc..0000000000
--- a/ext/mbstring/oniguruma/enc/euc_kr.c
+++ /dev/null
@@ -1,136 +0,0 @@
-/**********************************************************************
-
- euc_kr.c - Oniguruma (regular expression library)
-
- Copyright (C) 2004 K.Kosako (kosako@sofnec.co.jp)
-
-**********************************************************************/
-#include "regenc.h"
-
-static OnigCodePoint
-euckr_mbc_to_code(UChar* p, UChar* end)
-{
- return onigenc_mbn_mbc_to_code(ONIG_ENCODING_EUC_KR, p, end);
-}
-
-static int
-euckr_code_to_mbc(OnigCodePoint code, UChar *buf)
-{
- return onigenc_mb2_code_to_mbc(ONIG_ENCODING_EUC_KR, code, buf);
-}
-
-static int
-euckr_mbc_to_lower(UChar* p, UChar* lower)
-{
- return onigenc_mbn_mbc_to_lower(ONIG_ENCODING_EUC_KR, p, lower);
-}
-
-static int
-euckr_code_is_ctype(OnigCodePoint code, unsigned int ctype)
-{
- return onigenc_mb2_code_is_ctype(ONIG_ENCODING_EUC_KR, code, ctype);
-}
-
-#define euckr_islead(c) ((c) < 0xa1 || (c) == 0xff)
-
-static UChar*
-euckr_left_adjust_char_head(UChar* start, UChar* s)
-{
- /* Assumed in this encoding,
- mb-trail bytes don't mix with single bytes.
- */
- UChar *p;
- int len;
-
- if (s <= start) return s;
- p = s;
-
- while (!euckr_islead(*p) && p > start) p--;
- len = enc_len(ONIG_ENCODING_EUC_KR, *p);
- if (p + len > s) return p;
- p += len;
- return p + ((s - p) & ~1);
-}
-
-static int
-euckr_is_allowed_reverse_match(UChar* s, UChar* end)
-{
- UChar c = *s;
- if (c <= 0x7e) return TRUE;
- else return FALSE;
-}
-
-OnigEncodingType OnigEncodingEUC_KR = {
- {
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1
- },
- "EUC-KR", /* name */
- 2, /* max byte length */
- FALSE, /* is_fold_match */
- ONIGENC_CTYPE_SUPPORT_LEVEL_SB, /* ctype_support_level */
- FALSE, /* is continuous sb mb codepoint */
- euckr_mbc_to_code,
- onigenc_mb2_code_to_mbclen,
- euckr_code_to_mbc,
- euckr_mbc_to_lower,
- onigenc_mbn_mbc_is_case_ambig,
- euckr_code_is_ctype,
- onigenc_nothing_get_ctype_code_range,
- euckr_left_adjust_char_head,
- euckr_is_allowed_reverse_match,
- onigenc_nothing_get_all_fold_match_code,
- onigenc_nothing_get_fold_match_info
-};
-
-/* Same with OnigEncodingEUC_KR except the name */
-OnigEncodingType OnigEncodingEUC_CN = {
- {
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1
- },
- "EUC-CN", /* name */
- 2, /* max byte length */
- FALSE, /* is_fold_match */
- ONIGENC_CTYPE_SUPPORT_LEVEL_SB, /* ctype_support_level */
- FALSE, /* is continuous sb mb codepoint */
- euckr_mbc_to_code,
- onigenc_mb2_code_to_mbclen,
- euckr_code_to_mbc,
- euckr_mbc_to_lower,
- onigenc_mbn_mbc_is_case_ambig,
- euckr_code_is_ctype,
- onigenc_nothing_get_ctype_code_range,
- euckr_left_adjust_char_head,
- euckr_is_allowed_reverse_match,
- onigenc_nothing_get_all_fold_match_code,
- onigenc_nothing_get_fold_match_info
-};
diff --git a/ext/mbstring/oniguruma/enc/euc_tw.c b/ext/mbstring/oniguruma/enc/euc_tw.c
deleted file mode 100644
index b39a9a5b7a..0000000000
--- a/ext/mbstring/oniguruma/enc/euc_tw.c
+++ /dev/null
@@ -1,98 +0,0 @@
-/**********************************************************************
-
- euc_tw.c - Oniguruma (regular expression library)
-
- Copyright (C) 2004 K.Kosako (kosako@sofnec.co.jp)
-
-**********************************************************************/
-#include "regenc.h"
-
-static OnigCodePoint
-euctw_mbc_to_code(UChar* p, UChar* end)
-{
- return onigenc_mbn_mbc_to_code(ONIG_ENCODING_EUC_TW, p, end);
-}
-
-static int
-euctw_code_to_mbc(OnigCodePoint code, UChar *buf)
-{
- return onigenc_mb4_code_to_mbc(ONIG_ENCODING_EUC_TW, code, buf);
-}
-
-static int
-euctw_mbc_to_lower(UChar* p, UChar* lower)
-{
- return onigenc_mbn_mbc_to_lower(ONIG_ENCODING_EUC_TW, p, lower);
-}
-
-static int
-euctw_code_is_ctype(OnigCodePoint code, unsigned int ctype)
-{
- return onigenc_mb4_code_is_ctype(ONIG_ENCODING_EUC_TW, code, ctype);
-}
-
-#define euctw_islead(c) (((c) < 0xa1 && (c) != 0x8e) || (c) == 0xff)
-
-static UChar*
-euctw_left_adjust_char_head(UChar* start, UChar* s)
-{
- /* Assumed in this encoding,
- mb-trail bytes don't mix with single bytes.
- */
- UChar *p;
- int len;
-
- if (s <= start) return s;
- p = s;
-
- while (!euctw_islead(*p) && p > start) p--;
- len = enc_len(ONIG_ENCODING_EUC_TW, *p);
- if (p + len > s) return p;
- p += len;
- return p + ((s - p) & ~1);
-}
-
-static int
-euctw_is_allowed_reverse_match(UChar* s, UChar* end)
-{
- UChar c = *s;
- if (c <= 0x7e) return TRUE;
- else return FALSE;
-}
-
-OnigEncodingType OnigEncodingEUC_TW = {
- {
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1
- },
- "EUC-TW", /* name */
- 4, /* max byte length */
- FALSE, /* is_fold_match */
- ONIGENC_CTYPE_SUPPORT_LEVEL_SB, /* ctype_support_level */
- FALSE, /* is continuous sb mb codepoint */
- euctw_mbc_to_code,
- onigenc_mb4_code_to_mbclen,
- euctw_code_to_mbc,
- euctw_mbc_to_lower,
- onigenc_mbn_mbc_is_case_ambig,
- euctw_code_is_ctype,
- onigenc_nothing_get_ctype_code_range,
- euctw_left_adjust_char_head,
- euctw_is_allowed_reverse_match,
- onigenc_nothing_get_all_fold_match_code,
- onigenc_nothing_get_fold_match_info
-};
diff --git a/ext/mbstring/oniguruma/enc/iso8859_1.c b/ext/mbstring/oniguruma/enc/iso8859_1.c
deleted file mode 100644
index 662f0e2c07..0000000000
--- a/ext/mbstring/oniguruma/enc/iso8859_1.c
+++ /dev/null
@@ -1,152 +0,0 @@
-/**********************************************************************
-
- iso8859_1.c - Oniguruma (regular expression library)
-
- Copyright (C) 2003-2004 K.Kosako (kosako@sofnec.co.jp)
-
-**********************************************************************/
-#include "regenc.h"
-
-#define ENC_ISO_8859_1_TO_LOWER_CASE(c) EncISO_8859_1_ToLowerCaseTable[c]
-#define ENC_IS_ISO_8859_1_CTYPE(code,ctype) \
- ((EncISO_8859_1_CtypeTable[code] & ctype) != 0)
-
-static UChar EncISO_8859_1_ToLowerCaseTable[256] = {
- '\000', '\001', '\002', '\003', '\004', '\005', '\006', '\007',
- '\010', '\011', '\012', '\013', '\014', '\015', '\016', '\017',
- '\020', '\021', '\022', '\023', '\024', '\025', '\026', '\027',
- '\030', '\031', '\032', '\033', '\034', '\035', '\036', '\037',
- '\040', '\041', '\042', '\043', '\044', '\045', '\046', '\047',
- '\050', '\051', '\052', '\053', '\054', '\055', '\056', '\057',
- '\060', '\061', '\062', '\063', '\064', '\065', '\066', '\067',
- '\070', '\071', '\072', '\073', '\074', '\075', '\076', '\077',
- '\100', '\141', '\142', '\143', '\144', '\145', '\146', '\147',
- '\150', '\151', '\152', '\153', '\154', '\155', '\156', '\157',
- '\160', '\161', '\162', '\163', '\164', '\165', '\166', '\167',
- '\170', '\171', '\172', '\133', '\134', '\135', '\136', '\137',
- '\140', '\141', '\142', '\143', '\144', '\145', '\146', '\147',
- '\150', '\151', '\152', '\153', '\154', '\155', '\156', '\157',
- '\160', '\161', '\162', '\163', '\164', '\165', '\166', '\167',
- '\170', '\171', '\172', '\173', '\174', '\175', '\176', '\177',
- '\200', '\201', '\202', '\203', '\204', '\205', '\206', '\207',
- '\210', '\211', '\212', '\213', '\214', '\215', '\216', '\217',
- '\220', '\221', '\222', '\223', '\224', '\225', '\226', '\227',
- '\230', '\231', '\232', '\233', '\234', '\235', '\236', '\237',
- '\240', '\241', '\242', '\243', '\244', '\245', '\246', '\247',
- '\250', '\251', '\252', '\253', '\254', '\255', '\256', '\257',
- '\260', '\261', '\262', '\263', '\264', '\265', '\266', '\267',
- '\270', '\271', '\272', '\273', '\274', '\275', '\276', '\277',
- '\340', '\341', '\342', '\343', '\344', '\345', '\346', '\347',
- '\350', '\351', '\352', '\353', '\354', '\355', '\356', '\357',
- '\360', '\361', '\362', '\363', '\364', '\365', '\366', '\327',
- '\370', '\371', '\372', '\373', '\374', '\375', '\376', '\337',
- '\340', '\341', '\342', '\343', '\344', '\345', '\346', '\347',
- '\350', '\351', '\352', '\353', '\354', '\355', '\356', '\357',
- '\360', '\361', '\362', '\363', '\364', '\365', '\366', '\367',
- '\370', '\371', '\372', '\373', '\374', '\375', '\376', '\377'
-};
-
-static unsigned short EncISO_8859_1_CtypeTable[256] = {
- 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004,
- 0x1004, 0x1106, 0x1104, 0x1104, 0x1104, 0x1104, 0x1004, 0x1004,
- 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004,
- 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004,
- 0x1142, 0x10d0, 0x10d0, 0x10d0, 0x10d0, 0x10d0, 0x10d0, 0x10d0,
- 0x10d0, 0x10d0, 0x10d0, 0x10d0, 0x10d0, 0x10d0, 0x10d0, 0x10d0,
- 0x1c58, 0x1c58, 0x1c58, 0x1c58, 0x1c58, 0x1c58, 0x1c58, 0x1c58,
- 0x1c58, 0x1c58, 0x10d0, 0x10d0, 0x10d0, 0x10d0, 0x10d0, 0x10d0,
- 0x10d0, 0x1e51, 0x1e51, 0x1e51, 0x1e51, 0x1e51, 0x1e51, 0x1a51,
- 0x1a51, 0x1a51, 0x1a51, 0x1a51, 0x1a51, 0x1a51, 0x1a51, 0x1a51,
- 0x1a51, 0x1a51, 0x1a51, 0x1a51, 0x1a51, 0x1a51, 0x1a51, 0x1a51,
- 0x1a51, 0x1a51, 0x1a51, 0x10d0, 0x10d0, 0x10d0, 0x10d0, 0x18d0,
- 0x10d0, 0x1c71, 0x1c71, 0x1c71, 0x1c71, 0x1c71, 0x1c71, 0x1871,
- 0x1871, 0x1871, 0x1871, 0x1871, 0x1871, 0x1871, 0x1871, 0x1871,
- 0x1871, 0x1871, 0x1871, 0x1871, 0x1871, 0x1871, 0x1871, 0x1871,
- 0x1871, 0x1871, 0x1871, 0x10d0, 0x10d0, 0x10d0, 0x10d0, 0x1004,
- 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004,
- 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004,
- 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004,
- 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004,
- 0x0142, 0x00d0, 0x0050, 0x0050, 0x0050, 0x0050, 0x0050, 0x0050,
- 0x0050, 0x0050, 0x0871, 0x00d0, 0x0050, 0x00d0, 0x0050, 0x0050,
- 0x0050, 0x0050, 0x0850, 0x0850, 0x0050, 0x0871, 0x0050, 0x00d0,
- 0x0050, 0x0850, 0x0871, 0x00d0, 0x0850, 0x0850, 0x0850, 0x00d0,
- 0x0a51, 0x0a51, 0x0a51, 0x0a51, 0x0a51, 0x0a51, 0x0a51, 0x0a51,
- 0x0a51, 0x0a51, 0x0a51, 0x0a51, 0x0a51, 0x0a51, 0x0a51, 0x0a51,
- 0x0a51, 0x0a51, 0x0a51, 0x0a51, 0x0a51, 0x0a51, 0x0a51, 0x0050,
- 0x0a51, 0x0a51, 0x0a51, 0x0a51, 0x0a51, 0x0a51, 0x0a51, 0x0871,
- 0x0871, 0x0871, 0x0871, 0x0871, 0x0871, 0x0871, 0x0871, 0x0871,
- 0x0871, 0x0871, 0x0871, 0x0871, 0x0871, 0x0871, 0x0871, 0x0871,
- 0x0871, 0x0871, 0x0871, 0x0871, 0x0871, 0x0871, 0x0871, 0x0050,
- 0x0871, 0x0871, 0x0871, 0x0871, 0x0871, 0x0871, 0x0871, 0x0871
-};
-
-static int
-iso_8859_1_mbc_to_lower(UChar* p, UChar* lower)
-{
- *lower = ENC_ISO_8859_1_TO_LOWER_CASE(*p);
- return 1; /* return byte length of converted char to lower */
-}
-
-static int
-iso_8859_1_mbc_is_case_ambig(UChar* p)
-{
- int v = (EncISO_8859_1_CtypeTable[*p] &
- (ONIGENC_CTYPE_UPPER | ONIGENC_CTYPE_LOWER));
-
- if ((v | ONIGENC_CTYPE_LOWER) != 0) {
- /* 0xdf, 0xaa, 0xb5, 0xba are lower case letter, but can't convert. */
- if (*p == 0xdf || (*p >= 0xaa && *p <= 0xba))
- return FALSE;
- else
- return TRUE;
- }
-
- return (v != 0 ? TRUE : FALSE);
-}
-
-static int
-iso_8859_1_code_is_ctype(OnigCodePoint code, unsigned int ctype)
-{
- if (code < 256)
- return ENC_IS_ISO_8859_1_CTYPE(code, ctype);
- else
- return FALSE;
-}
-
-OnigEncodingType OnigEncodingISO_8859_1 = {
- {
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
- },
- "ISO-8859-1", /* name */
- 1, /* max byte length */
- TRUE, /* is_fold_match */
- ONIGENC_CTYPE_SUPPORT_LEVEL_SB, /* ctype_support_level */
- TRUE, /* is continuous sb mb codepoint */
- onigenc_single_byte_mbc_to_code,
- onigenc_single_byte_code_to_mbclen,
- onigenc_single_byte_code_to_mbc,
- iso_8859_1_mbc_to_lower,
- iso_8859_1_mbc_is_case_ambig,
- iso_8859_1_code_is_ctype,
- onigenc_nothing_get_ctype_code_range,
- onigenc_single_byte_left_adjust_char_head,
- onigenc_single_byte_is_allowed_reverse_match,
- onigenc_get_all_fold_match_code_ss_0xdf,
- onigenc_get_fold_match_info_ss_0xdf
-};
diff --git a/ext/mbstring/oniguruma/enc/iso8859_10.c b/ext/mbstring/oniguruma/enc/iso8859_10.c
deleted file mode 100644
index ac49303714..0000000000
--- a/ext/mbstring/oniguruma/enc/iso8859_10.c
+++ /dev/null
@@ -1,155 +0,0 @@
-/**********************************************************************
-
- iso8859_10.c - Oniguruma (regular expression library)
-
- Copyright (C) 2004 K.Kosako (kosako@sofnec.co.jp)
-
-**********************************************************************/
-#include "regenc.h"
-
-#define ENC_ISO_8859_10_TO_LOWER_CASE(c) EncISO_8859_10_ToLowerCaseTable[c]
-#define ENC_IS_ISO_8859_10_CTYPE(code,ctype) \
- ((EncISO_8859_10_CtypeTable[code] & ctype) != 0)
-
-static UChar EncISO_8859_10_ToLowerCaseTable[256] = {
- '\000', '\001', '\002', '\003', '\004', '\005', '\006', '\007',
- '\010', '\011', '\012', '\013', '\014', '\015', '\016', '\017',
- '\020', '\021', '\022', '\023', '\024', '\025', '\026', '\027',
- '\030', '\031', '\032', '\033', '\034', '\035', '\036', '\037',
- '\040', '\041', '\042', '\043', '\044', '\045', '\046', '\047',
- '\050', '\051', '\052', '\053', '\054', '\055', '\056', '\057',
- '\060', '\061', '\062', '\063', '\064', '\065', '\066', '\067',
- '\070', '\071', '\072', '\073', '\074', '\075', '\076', '\077',
- '\100', '\141', '\142', '\143', '\144', '\145', '\146', '\147',
- '\150', '\151', '\152', '\153', '\154', '\155', '\156', '\157',
- '\160', '\161', '\162', '\163', '\164', '\165', '\166', '\167',
- '\170', '\171', '\172', '\133', '\134', '\135', '\136', '\137',
- '\140', '\141', '\142', '\143', '\144', '\145', '\146', '\147',
- '\150', '\151', '\152', '\153', '\154', '\155', '\156', '\157',
- '\160', '\161', '\162', '\163', '\164', '\165', '\166', '\167',
- '\170', '\171', '\172', '\173', '\174', '\175', '\176', '\177',
- '\200', '\201', '\202', '\203', '\204', '\205', '\206', '\207',
- '\210', '\211', '\212', '\213', '\214', '\215', '\216', '\217',
- '\220', '\221', '\222', '\223', '\224', '\225', '\226', '\227',
- '\230', '\231', '\232', '\233', '\234', '\235', '\236', '\237',
- '\240', '\261', '\262', '\263', '\264', '\265', '\266', '\247',
- '\270', '\271', '\272', '\273', '\274', '\255', '\276', '\277',
- '\260', '\261', '\262', '\263', '\264', '\265', '\266', '\267',
- '\270', '\271', '\272', '\273', '\274', '\275', '\276', '\277',
- '\340', '\341', '\342', '\343', '\344', '\345', '\346', '\347',
- '\350', '\351', '\352', '\353', '\354', '\355', '\356', '\357',
- '\360', '\361', '\362', '\363', '\364', '\365', '\366', '\367',
- '\370', '\371', '\372', '\373', '\374', '\375', '\376', '\337',
- '\340', '\341', '\342', '\343', '\344', '\345', '\346', '\347',
- '\350', '\351', '\352', '\353', '\354', '\355', '\356', '\357',
- '\360', '\361', '\362', '\363', '\364', '\365', '\366', '\367',
- '\370', '\371', '\372', '\373', '\374', '\375', '\376', '\377'
-};
-
-static unsigned short EncISO_8859_10_CtypeTable[256] = {
- 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004,
- 0x1004, 0x1106, 0x1104, 0x1104, 0x1104, 0x1104, 0x1004, 0x1004,
- 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004,
- 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004,
- 0x1142, 0x10d0, 0x10d0, 0x10d0, 0x10d0, 0x10d0, 0x10d0, 0x10d0,
- 0x10d0, 0x10d0, 0x10d0, 0x10d0, 0x10d0, 0x10d0, 0x10d0, 0x10d0,
- 0x1c58, 0x1c58, 0x1c58, 0x1c58, 0x1c58, 0x1c58, 0x1c58, 0x1c58,
- 0x1c58, 0x1c58, 0x10d0, 0x10d0, 0x10d0, 0x10d0, 0x10d0, 0x10d0,
- 0x10d0, 0x1e51, 0x1e51, 0x1e51, 0x1e51, 0x1e51, 0x1e51, 0x1a51,
- 0x1a51, 0x1a51, 0x1a51, 0x1a51, 0x1a51, 0x1a51, 0x1a51, 0x1a51,
- 0x1a51, 0x1a51, 0x1a51, 0x1a51, 0x1a51, 0x1a51, 0x1a51, 0x1a51,
- 0x1a51, 0x1a51, 0x1a51, 0x10d0, 0x10d0, 0x10d0, 0x10d0, 0x18d0,
- 0x10d0, 0x1c71, 0x1c71, 0x1c71, 0x1c71, 0x1c71, 0x1c71, 0x1871,
- 0x1871, 0x1871, 0x1871, 0x1871, 0x1871, 0x1871, 0x1871, 0x1871,
- 0x1871, 0x1871, 0x1871, 0x1871, 0x1871, 0x1871, 0x1871, 0x1871,
- 0x1871, 0x1871, 0x1871, 0x10d0, 0x10d0, 0x10d0, 0x10d0, 0x1004,
- 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004,
- 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004,
- 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004,
- 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004,
- 0x0142, 0x0a51, 0x0a51, 0x0a51, 0x0a51, 0x0a51, 0x0a51, 0x0050,
- 0x0a51, 0x0a51, 0x0a51, 0x0a51, 0x0a51, 0x00d0, 0x0a51, 0x0a51,
- 0x0050, 0x0871, 0x0871, 0x0871, 0x0871, 0x0871, 0x0871, 0x00d0,
- 0x0871, 0x0871, 0x0871, 0x0871, 0x0871, 0x00d0, 0x0871, 0x0871,
- 0x0a51, 0x0a51, 0x0a51, 0x0a51, 0x0a51, 0x0a51, 0x0a51, 0x0a51,
- 0x0a51, 0x0a51, 0x0a51, 0x0a51, 0x0a51, 0x0a51, 0x0a51, 0x0a51,
- 0x0a51, 0x0a51, 0x0a51, 0x0a51, 0x0a51, 0x0a51, 0x0a51, 0x0a51,
- 0x0a51, 0x0a51, 0x0a51, 0x0a51, 0x0a51, 0x0a51, 0x0a51, 0x0871,
- 0x0871, 0x0871, 0x0871, 0x0871, 0x0871, 0x0871, 0x0871, 0x0871,
- 0x0871, 0x0871, 0x0871, 0x0871, 0x0871, 0x0871, 0x0871, 0x0871,
- 0x0871, 0x0871, 0x0871, 0x0871, 0x0871, 0x0871, 0x0871, 0x0871,
- 0x0871, 0x0871, 0x0871, 0x0871, 0x0871, 0x0871, 0x0871, 0x0871
-};
-
-static int
-iso_8859_10_mbc_to_lower(UChar* p, UChar* lower)
-{
- *lower = ENC_ISO_8859_10_TO_LOWER_CASE(*p);
- return 1; /* return byte length of converted char to lower */
-}
-
-static int
-iso_8859_10_mbc_is_case_ambig(UChar* p)
-{
- int v = (EncISO_8859_10_CtypeTable[*p] &
- (ONIGENC_CTYPE_UPPER | ONIGENC_CTYPE_LOWER));
-
- if ((v | ONIGENC_CTYPE_LOWER) != 0) {
- /* 0xdf is lower case letter, but can't convert. */
- if (*p == 0xdf)
- return FALSE;
- else
- return TRUE;
- }
- else if (v != 0) {
- return TRUE;
- }
-
- return FALSE;
-}
-
-static int
-iso_8859_10_code_is_ctype(OnigCodePoint code, unsigned int ctype)
-{
- if (code < 256)
- return ENC_IS_ISO_8859_10_CTYPE(code, ctype);
- else
- return FALSE;
-}
-
-OnigEncodingType OnigEncodingISO_8859_10 = {
- {
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
- },
- "ISO-8859-10", /* name */
- 1, /* max byte length */
- TRUE, /* is_fold_match */
- ONIGENC_CTYPE_SUPPORT_LEVEL_SB, /* ctype_support_level */
- TRUE, /* is continuous sb mb codepoint */
- onigenc_single_byte_mbc_to_code,
- onigenc_single_byte_code_to_mbclen,
- onigenc_single_byte_code_to_mbc,
- iso_8859_10_mbc_to_lower,
- iso_8859_10_mbc_is_case_ambig,
- iso_8859_10_code_is_ctype,
- onigenc_nothing_get_ctype_code_range,
- onigenc_single_byte_left_adjust_char_head,
- onigenc_single_byte_is_allowed_reverse_match,
- onigenc_get_all_fold_match_code_ss_0xdf,
- onigenc_get_fold_match_info_ss_0xdf
-};
diff --git a/ext/mbstring/oniguruma/enc/iso8859_11.c b/ext/mbstring/oniguruma/enc/iso8859_11.c
deleted file mode 100644
index ebe81d325f..0000000000
--- a/ext/mbstring/oniguruma/enc/iso8859_11.c
+++ /dev/null
@@ -1,92 +0,0 @@
-/**********************************************************************
-
- iso8859_11.c - Oniguruma (regular expression library)
-
- Copyright (C) 2004 K.Kosako (kosako@sofnec.co.jp)
-
-**********************************************************************/
-#include "regenc.h"
-
-#define ENC_IS_ISO_8859_11_CTYPE(code,ctype) \
- ((EncISO_8859_11_CtypeTable[code] & ctype) != 0)
-
-static unsigned short EncISO_8859_11_CtypeTable[256] = {
- 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004,
- 0x1004, 0x1106, 0x1104, 0x1104, 0x1104, 0x1104, 0x1004, 0x1004,
- 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004,
- 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004,
- 0x1142, 0x10d0, 0x10d0, 0x10d0, 0x10d0, 0x10d0, 0x10d0, 0x10d0,
- 0x10d0, 0x10d0, 0x10d0, 0x10d0, 0x10d0, 0x10d0, 0x10d0, 0x10d0,
- 0x1c58, 0x1c58, 0x1c58, 0x1c58, 0x1c58, 0x1c58, 0x1c58, 0x1c58,
- 0x1c58, 0x1c58, 0x10d0, 0x10d0, 0x10d0, 0x10d0, 0x10d0, 0x10d0,
- 0x10d0, 0x1e51, 0x1e51, 0x1e51, 0x1e51, 0x1e51, 0x1e51, 0x1a51,
- 0x1a51, 0x1a51, 0x1a51, 0x1a51, 0x1a51, 0x1a51, 0x1a51, 0x1a51,
- 0x1a51, 0x1a51, 0x1a51, 0x1a51, 0x1a51, 0x1a51, 0x1a51, 0x1a51,
- 0x1a51, 0x1a51, 0x1a51, 0x10d0, 0x10d0, 0x10d0, 0x10d0, 0x18d0,
- 0x10d0, 0x1c71, 0x1c71, 0x1c71, 0x1c71, 0x1c71, 0x1c71, 0x1871,
- 0x1871, 0x1871, 0x1871, 0x1871, 0x1871, 0x1871, 0x1871, 0x1871,
- 0x1871, 0x1871, 0x1871, 0x1871, 0x1871, 0x1871, 0x1871, 0x1871,
- 0x1871, 0x1871, 0x1871, 0x10d0, 0x10d0, 0x10d0, 0x10d0, 0x1004,
- 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004,
- 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004,
- 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004,
- 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004,
- 0x0142, 0x0851, 0x0851, 0x0851, 0x0851, 0x0851, 0x0851, 0x0851,
- 0x0851, 0x0851, 0x0851, 0x0851, 0x0851, 0x0851, 0x0851, 0x0851,
- 0x0851, 0x0851, 0x0851, 0x0851, 0x0851, 0x0851, 0x0851, 0x0851,
- 0x0851, 0x0851, 0x0851, 0x0851, 0x0851, 0x0851, 0x0851, 0x0851,
- 0x0851, 0x0851, 0x0851, 0x0851, 0x0851, 0x0851, 0x0851, 0x0851,
- 0x0851, 0x0851, 0x0851, 0x0851, 0x0851, 0x0851, 0x0851, 0x0851,
- 0x0851, 0x0851, 0x0851, 0x0851, 0x0851, 0x0851, 0x0851, 0x0851,
- 0x0851, 0x0851, 0x0851, 0x0000, 0x0000, 0x0000, 0x0000, 0x0851,
- 0x0851, 0x0851, 0x0851, 0x0851, 0x0851, 0x0851, 0x0851, 0x0851,
- 0x0851, 0x0851, 0x0851, 0x0851, 0x0851, 0x0851, 0x0851, 0x0851,
- 0x0851, 0x0851, 0x0851, 0x0851, 0x0851, 0x0851, 0x0851, 0x0851,
- 0x0851, 0x0851, 0x0851, 0x0851, 0x0000, 0x0000, 0x0000, 0x0000
-};
-
-static int
-iso_8859_11_code_is_ctype(OnigCodePoint code, unsigned int ctype)
-{
- if (code < 256)
- return ENC_IS_ISO_8859_11_CTYPE(code, ctype);
- else
- return FALSE;
-}
-
-OnigEncodingType OnigEncodingISO_8859_11 = {
- {
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
- },
- "ISO-8859-11", /* name */
- 1, /* max byte length */
- FALSE, /* is_fold_match */
- ONIGENC_CTYPE_SUPPORT_LEVEL_SB, /* ctype_support_level */
- TRUE, /* is continuous sb mb codepoint */
- onigenc_single_byte_mbc_to_code,
- onigenc_single_byte_code_to_mbclen,
- onigenc_single_byte_code_to_mbc,
- onigenc_ascii_mbc_to_lower,
- onigenc_ascii_mbc_is_case_ambig,
- iso_8859_11_code_is_ctype,
- onigenc_nothing_get_ctype_code_range,
- onigenc_single_byte_left_adjust_char_head,
- onigenc_single_byte_is_allowed_reverse_match,
- onigenc_nothing_get_all_fold_match_code,
- onigenc_nothing_get_fold_match_info
-};
diff --git a/ext/mbstring/oniguruma/enc/iso8859_13.c b/ext/mbstring/oniguruma/enc/iso8859_13.c
deleted file mode 100644
index 8de7251d2f..0000000000
--- a/ext/mbstring/oniguruma/enc/iso8859_13.c
+++ /dev/null
@@ -1,155 +0,0 @@
-/**********************************************************************
-
- iso8859_13.c - Oniguruma (regular expression library)
-
- Copyright (C) 2004 K.Kosako (kosako@sofnec.co.jp)
-
-**********************************************************************/
-#include "regenc.h"
-
-#define ENC_ISO_8859_13_TO_LOWER_CASE(c) EncISO_8859_13_ToLowerCaseTable[c]
-#define ENC_IS_ISO_8859_13_CTYPE(code,ctype) \
- ((EncISO_8859_13_CtypeTable[code] & ctype) != 0)
-
-static UChar EncISO_8859_13_ToLowerCaseTable[256] = {
- '\000', '\001', '\002', '\003', '\004', '\005', '\006', '\007',
- '\010', '\011', '\012', '\013', '\014', '\015', '\016', '\017',
- '\020', '\021', '\022', '\023', '\024', '\025', '\026', '\027',
- '\030', '\031', '\032', '\033', '\034', '\035', '\036', '\037',
- '\040', '\041', '\042', '\043', '\044', '\045', '\046', '\047',
- '\050', '\051', '\052', '\053', '\054', '\055', '\056', '\057',
- '\060', '\061', '\062', '\063', '\064', '\065', '\066', '\067',
- '\070', '\071', '\072', '\073', '\074', '\075', '\076', '\077',
- '\100', '\141', '\142', '\143', '\144', '\145', '\146', '\147',
- '\150', '\151', '\152', '\153', '\154', '\155', '\156', '\157',
- '\160', '\161', '\162', '\163', '\164', '\165', '\166', '\167',
- '\170', '\171', '\172', '\133', '\134', '\135', '\136', '\137',
- '\140', '\141', '\142', '\143', '\144', '\145', '\146', '\147',
- '\150', '\151', '\152', '\153', '\154', '\155', '\156', '\157',
- '\160', '\161', '\162', '\163', '\164', '\165', '\166', '\167',
- '\170', '\171', '\172', '\173', '\174', '\175', '\176', '\177',
- '\200', '\201', '\202', '\203', '\204', '\205', '\206', '\207',
- '\210', '\211', '\212', '\213', '\214', '\215', '\216', '\217',
- '\220', '\221', '\222', '\223', '\224', '\225', '\226', '\227',
- '\230', '\231', '\232', '\233', '\234', '\235', '\236', '\237',
- '\240', '\241', '\242', '\243', '\244', '\245', '\246', '\247',
- '\270', '\251', '\272', '\253', '\254', '\255', '\256', '\277',
- '\260', '\261', '\262', '\263', '\264', '\265', '\266', '\267',
- '\270', '\271', '\272', '\273', '\274', '\275', '\276', '\277',
- '\340', '\341', '\342', '\343', '\344', '\345', '\346', '\347',
- '\350', '\351', '\352', '\353', '\354', '\355', '\356', '\357',
- '\360', '\361', '\362', '\363', '\364', '\365', '\366', '\327',
- '\370', '\371', '\372', '\373', '\374', '\375', '\376', '\337',
- '\340', '\341', '\342', '\343', '\344', '\345', '\346', '\347',
- '\350', '\351', '\352', '\353', '\354', '\355', '\356', '\357',
- '\360', '\361', '\362', '\363', '\364', '\365', '\366', '\367',
- '\370', '\371', '\372', '\373', '\374', '\375', '\376', '\377'
-};
-
-static unsigned short EncISO_8859_13_CtypeTable[256] = {
- 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004,
- 0x1004, 0x1106, 0x1104, 0x1104, 0x1104, 0x1104, 0x1004, 0x1004,
- 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004,
- 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004,
- 0x1142, 0x10d0, 0x10d0, 0x10d0, 0x10d0, 0x10d0, 0x10d0, 0x10d0,
- 0x10d0, 0x10d0, 0x10d0, 0x10d0, 0x10d0, 0x10d0, 0x10d0, 0x10d0,
- 0x1c58, 0x1c58, 0x1c58, 0x1c58, 0x1c58, 0x1c58, 0x1c58, 0x1c58,
- 0x1c58, 0x1c58, 0x10d0, 0x10d0, 0x10d0, 0x10d0, 0x10d0, 0x10d0,
- 0x10d0, 0x1e51, 0x1e51, 0x1e51, 0x1e51, 0x1e51, 0x1e51, 0x1a51,
- 0x1a51, 0x1a51, 0x1a51, 0x1a51, 0x1a51, 0x1a51, 0x1a51, 0x1a51,
- 0x1a51, 0x1a51, 0x1a51, 0x1a51, 0x1a51, 0x1a51, 0x1a51, 0x1a51,
- 0x1a51, 0x1a51, 0x1a51, 0x10d0, 0x10d0, 0x10d0, 0x10d0, 0x18d0,
- 0x10d0, 0x1c71, 0x1c71, 0x1c71, 0x1c71, 0x1c71, 0x1c71, 0x1871,
- 0x1871, 0x1871, 0x1871, 0x1871, 0x1871, 0x1871, 0x1871, 0x1871,
- 0x1871, 0x1871, 0x1871, 0x1871, 0x1871, 0x1871, 0x1871, 0x1871,
- 0x1871, 0x1871, 0x1871, 0x10d0, 0x10d0, 0x10d0, 0x10d0, 0x1004,
- 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004,
- 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004,
- 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004,
- 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004,
- 0x0142, 0x00d0, 0x0050, 0x0050, 0x0050, 0x00d0, 0x0050, 0x0050,
- 0x0a51, 0x0050, 0x0a51, 0x00d0, 0x0050, 0x00d0, 0x0050, 0x0a51,
- 0x0050, 0x0050, 0x0850, 0x0850, 0x00d0, 0x0871, 0x0050, 0x00d0,
- 0x0871, 0x0850, 0x0871, 0x00d0, 0x0850, 0x0850, 0x0850, 0x0871,
- 0x0a51, 0x0a51, 0x0a51, 0x0a51, 0x0a51, 0x0a51, 0x0a51, 0x0a51,
- 0x0a51, 0x0a51, 0x0a51, 0x0a51, 0x0a51, 0x0a51, 0x0a51, 0x0a51,
- 0x0a51, 0x0a51, 0x0a51, 0x0a51, 0x0a51, 0x0a51, 0x0a51, 0x0050,
- 0x0a51, 0x0a51, 0x0a51, 0x0a51, 0x0a51, 0x0a51, 0x0a51, 0x0871,
- 0x0871, 0x0871, 0x0871, 0x0871, 0x0871, 0x0871, 0x0871, 0x0871,
- 0x0871, 0x0871, 0x0871, 0x0871, 0x0871, 0x0871, 0x0871, 0x0871,
- 0x0871, 0x0871, 0x0871, 0x0871, 0x0871, 0x0871, 0x0871, 0x0050,
- 0x0871, 0x0871, 0x0871, 0x0871, 0x0871, 0x0871, 0x0871, 0x00d0
-};
-
-static int
-iso_8859_13_mbc_to_lower(UChar* p, UChar* lower)
-{
- *lower = ENC_ISO_8859_13_TO_LOWER_CASE(*p);
- return 1; /* return byte length of converted char to lower */
-}
-
-static int
-iso_8859_13_mbc_is_case_ambig(UChar* p)
-{
- int v = (EncISO_8859_13_CtypeTable[*p] &
- (ONIGENC_CTYPE_UPPER | ONIGENC_CTYPE_LOWER));
-
- if ((v | ONIGENC_CTYPE_LOWER) != 0) {
- /* 0xdf is lower case letter, but can't convert. */
- if (*p == 0xdf || *p == 0xb5)
- return FALSE;
- else
- return TRUE;
- }
- else if (v != 0) {
- return TRUE;
- }
-
- return FALSE;
-}
-
-static int
-iso_8859_13_code_is_ctype(OnigCodePoint code, unsigned int ctype)
-{
- if (code < 256)
- return ENC_IS_ISO_8859_13_CTYPE(code, ctype);
- else
- return FALSE;
-}
-
-OnigEncodingType OnigEncodingISO_8859_13 = {
- {
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
- },
- "ISO-8859-13", /* name */
- 1, /* max byte length */
- TRUE, /* is_fold_match */
- ONIGENC_CTYPE_SUPPORT_LEVEL_SB, /* ctype_support_level */
- TRUE, /* is continuous sb mb codepoint */
- onigenc_single_byte_mbc_to_code,
- onigenc_single_byte_code_to_mbclen,
- onigenc_single_byte_code_to_mbc,
- iso_8859_13_mbc_to_lower,
- iso_8859_13_mbc_is_case_ambig,
- iso_8859_13_code_is_ctype,
- onigenc_nothing_get_ctype_code_range,
- onigenc_single_byte_left_adjust_char_head,
- onigenc_single_byte_is_allowed_reverse_match,
- onigenc_get_all_fold_match_code_ss_0xdf,
- onigenc_get_fold_match_info_ss_0xdf
-};
diff --git a/ext/mbstring/oniguruma/enc/iso8859_14.c b/ext/mbstring/oniguruma/enc/iso8859_14.c
deleted file mode 100644
index 333deeba32..0000000000
--- a/ext/mbstring/oniguruma/enc/iso8859_14.c
+++ /dev/null
@@ -1,155 +0,0 @@
-/**********************************************************************
-
- iso8859_14.c - Oniguruma (regular expression library)
-
- Copyright (C) 2004 K.Kosako (kosako@sofnec.co.jp)
-
-**********************************************************************/
-#include "regenc.h"
-
-#define ENC_ISO_8859_14_TO_LOWER_CASE(c) EncISO_8859_14_ToLowerCaseTable[c]
-#define ENC_IS_ISO_8859_14_CTYPE(code,ctype) \
- ((EncISO_8859_14_CtypeTable[code] & ctype) != 0)
-
-static UChar EncISO_8859_14_ToLowerCaseTable[256] = {
- '\000', '\001', '\002', '\003', '\004', '\005', '\006', '\007',
- '\010', '\011', '\012', '\013', '\014', '\015', '\016', '\017',
- '\020', '\021', '\022', '\023', '\024', '\025', '\026', '\027',
- '\030', '\031', '\032', '\033', '\034', '\035', '\036', '\037',
- '\040', '\041', '\042', '\043', '\044', '\045', '\046', '\047',
- '\050', '\051', '\052', '\053', '\054', '\055', '\056', '\057',
- '\060', '\061', '\062', '\063', '\064', '\065', '\066', '\067',
- '\070', '\071', '\072', '\073', '\074', '\075', '\076', '\077',
- '\100', '\141', '\142', '\143', '\144', '\145', '\146', '\147',
- '\150', '\151', '\152', '\153', '\154', '\155', '\156', '\157',
- '\160', '\161', '\162', '\163', '\164', '\165', '\166', '\167',
- '\170', '\171', '\172', '\133', '\134', '\135', '\136', '\137',
- '\140', '\141', '\142', '\143', '\144', '\145', '\146', '\147',
- '\150', '\151', '\152', '\153', '\154', '\155', '\156', '\157',
- '\160', '\161', '\162', '\163', '\164', '\165', '\166', '\167',
- '\170', '\171', '\172', '\173', '\174', '\175', '\176', '\177',
- '\200', '\201', '\202', '\203', '\204', '\205', '\206', '\207',
- '\210', '\211', '\212', '\213', '\214', '\215', '\216', '\217',
- '\220', '\221', '\222', '\223', '\224', '\225', '\226', '\227',
- '\230', '\231', '\232', '\233', '\234', '\235', '\236', '\237',
- '\240', '\242', '\242', '\243', '\245', '\245', '\253', '\247',
- '\270', '\251', '\272', '\253', '\274', '\255', '\256', '\377',
- '\261', '\261', '\263', '\263', '\265', '\265', '\266', '\271',
- '\270', '\271', '\272', '\277', '\274', '\276', '\276', '\277',
- '\340', '\341', '\342', '\343', '\344', '\345', '\346', '\347',
- '\350', '\351', '\352', '\353', '\354', '\355', '\356', '\357',
- '\360', '\361', '\362', '\363', '\364', '\365', '\366', '\367',
- '\370', '\371', '\372', '\373', '\374', '\375', '\376', '\337',
- '\340', '\341', '\342', '\343', '\344', '\345', '\346', '\347',
- '\350', '\351', '\352', '\353', '\354', '\355', '\356', '\357',
- '\360', '\361', '\362', '\363', '\364', '\365', '\366', '\367',
- '\370', '\371', '\372', '\373', '\374', '\375', '\376', '\377'
-};
-
-static unsigned short EncISO_8859_14_CtypeTable[256] = {
- 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004,
- 0x1004, 0x1106, 0x1104, 0x1104, 0x1104, 0x1104, 0x1004, 0x1004,
- 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004,
- 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004,
- 0x1142, 0x10d0, 0x10d0, 0x10d0, 0x10d0, 0x10d0, 0x10d0, 0x10d0,
- 0x10d0, 0x10d0, 0x10d0, 0x10d0, 0x10d0, 0x10d0, 0x10d0, 0x10d0,
- 0x1c58, 0x1c58, 0x1c58, 0x1c58, 0x1c58, 0x1c58, 0x1c58, 0x1c58,
- 0x1c58, 0x1c58, 0x10d0, 0x10d0, 0x10d0, 0x10d0, 0x10d0, 0x10d0,
- 0x10d0, 0x1e51, 0x1e51, 0x1e51, 0x1e51, 0x1e51, 0x1e51, 0x1a51,
- 0x1a51, 0x1a51, 0x1a51, 0x1a51, 0x1a51, 0x1a51, 0x1a51, 0x1a51,
- 0x1a51, 0x1a51, 0x1a51, 0x1a51, 0x1a51, 0x1a51, 0x1a51, 0x1a51,
- 0x1a51, 0x1a51, 0x1a51, 0x10d0, 0x10d0, 0x10d0, 0x10d0, 0x18d0,
- 0x10d0, 0x1c71, 0x1c71, 0x1c71, 0x1c71, 0x1c71, 0x1c71, 0x1871,
- 0x1871, 0x1871, 0x1871, 0x1871, 0x1871, 0x1871, 0x1871, 0x1871,
- 0x1871, 0x1871, 0x1871, 0x1871, 0x1871, 0x1871, 0x1871, 0x1871,
- 0x1871, 0x1871, 0x1871, 0x10d0, 0x10d0, 0x10d0, 0x10d0, 0x1004,
- 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004,
- 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004,
- 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004,
- 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004,
- 0x0142, 0x0a51, 0x0871, 0x0050, 0x0a51, 0x0871, 0x0a51, 0x0050,
- 0x0a51, 0x0050, 0x0a51, 0x0871, 0x0a51, 0x00d0, 0x0050, 0x0a51,
- 0x0a51, 0x0871, 0x0a51, 0x0871, 0x0a51, 0x0871, 0x0050, 0x0a51,
- 0x0871, 0x0871, 0x0871, 0x0a51, 0x0871, 0x0a51, 0x0871, 0x0871,
- 0x0a51, 0x0a51, 0x0a51, 0x0a51, 0x0a51, 0x0a51, 0x0a51, 0x0a51,
- 0x0a51, 0x0a51, 0x0a51, 0x0a51, 0x0a51, 0x0a51, 0x0a51, 0x0a51,
- 0x0a51, 0x0a51, 0x0a51, 0x0a51, 0x0a51, 0x0a51, 0x0a51, 0x0a51,
- 0x0a51, 0x0a51, 0x0a51, 0x0a51, 0x0a51, 0x0a51, 0x0a51, 0x0871,
- 0x0871, 0x0871, 0x0871, 0x0871, 0x0871, 0x0871, 0x0871, 0x0871,
- 0x0871, 0x0871, 0x0871, 0x0871, 0x0871, 0x0871, 0x0871, 0x0871,
- 0x0871, 0x0871, 0x0871, 0x0871, 0x0871, 0x0871, 0x0871, 0x0871,
- 0x0871, 0x0871, 0x0871, 0x0871, 0x0871, 0x0871, 0x0871, 0x0871
-};
-
-static int
-iso_8859_14_mbc_to_lower(UChar* p, UChar* lower)
-{
- *lower = ENC_ISO_8859_14_TO_LOWER_CASE(*p);
- return 1; /* return byte length of converted char to lower */
-}
-
-static int
-iso_8859_14_mbc_is_case_ambig(UChar* p)
-{
- int v = (EncISO_8859_14_CtypeTable[*p] &
- (ONIGENC_CTYPE_UPPER | ONIGENC_CTYPE_LOWER));
-
- if ((v | ONIGENC_CTYPE_LOWER) != 0) {
- /* 0xdf is lower case letter, but can't convert. */
- if (*p == 0xdf)
- return FALSE;
- else
- return TRUE;
- }
- else if (v != 0) {
- return TRUE;
- }
-
- return FALSE;
-}
-
-static int
-iso_8859_14_code_is_ctype(OnigCodePoint code, unsigned int ctype)
-{
- if (code < 256)
- return ENC_IS_ISO_8859_14_CTYPE(code, ctype);
- else
- return FALSE;
-}
-
-OnigEncodingType OnigEncodingISO_8859_14 = {
- {
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
- },
- "ISO-8859-14", /* name */
- 1, /* max byte length */
- TRUE, /* is_fold_match */
- ONIGENC_CTYPE_SUPPORT_LEVEL_SB, /* ctype_support_level */
- TRUE, /* is continuous sb mb codepoint */
- onigenc_single_byte_mbc_to_code,
- onigenc_single_byte_code_to_mbclen,
- onigenc_single_byte_code_to_mbc,
- iso_8859_14_mbc_to_lower,
- iso_8859_14_mbc_is_case_ambig,
- iso_8859_14_code_is_ctype,
- onigenc_nothing_get_ctype_code_range,
- onigenc_single_byte_left_adjust_char_head,
- onigenc_single_byte_is_allowed_reverse_match,
- onigenc_get_all_fold_match_code_ss_0xdf,
- onigenc_get_fold_match_info_ss_0xdf
-};
diff --git a/ext/mbstring/oniguruma/enc/iso8859_15.c b/ext/mbstring/oniguruma/enc/iso8859_15.c
deleted file mode 100644
index 49cb266058..0000000000
--- a/ext/mbstring/oniguruma/enc/iso8859_15.c
+++ /dev/null
@@ -1,155 +0,0 @@
-/**********************************************************************
-
- iso8859_15.c - Oniguruma (regular expression library)
-
- Copyright (C) 2003-2004 K.Kosako (kosako@sofnec.co.jp)
-
-**********************************************************************/
-#include "regenc.h"
-
-/* reference
- http://en.wikipedia.org/wiki/ISO_8859-15
-*/
-
-#define ENC_ISO_8859_15_TO_LOWER_CASE(c) EncISO_8859_15_ToLowerCaseTable[c]
-#define ENC_IS_ISO_8859_15_CTYPE(code,ctype) \
- ((EncISO_8859_15_CtypeTable[code] & ctype) != 0)
-
-static UChar EncISO_8859_15_ToLowerCaseTable[256] = {
- '\000', '\001', '\002', '\003', '\004', '\005', '\006', '\007',
- '\010', '\011', '\012', '\013', '\014', '\015', '\016', '\017',
- '\020', '\021', '\022', '\023', '\024', '\025', '\026', '\027',
- '\030', '\031', '\032', '\033', '\034', '\035', '\036', '\037',
- '\040', '\041', '\042', '\043', '\044', '\045', '\046', '\047',
- '\050', '\051', '\052', '\053', '\054', '\055', '\056', '\057',
- '\060', '\061', '\062', '\063', '\064', '\065', '\066', '\067',
- '\070', '\071', '\072', '\073', '\074', '\075', '\076', '\077',
- '\100', '\141', '\142', '\143', '\144', '\145', '\146', '\147',
- '\150', '\151', '\152', '\153', '\154', '\155', '\156', '\157',
- '\160', '\161', '\162', '\163', '\164', '\165', '\166', '\167',
- '\170', '\171', '\172', '\133', '\134', '\135', '\136', '\137',
- '\140', '\141', '\142', '\143', '\144', '\145', '\146', '\147',
- '\150', '\151', '\152', '\153', '\154', '\155', '\156', '\157',
- '\160', '\161', '\162', '\163', '\164', '\165', '\166', '\167',
- '\170', '\171', '\172', '\173', '\174', '\175', '\176', '\177',
- '\200', '\201', '\202', '\203', '\204', '\205', '\206', '\207',
- '\210', '\211', '\212', '\213', '\214', '\215', '\216', '\217',
- '\220', '\221', '\222', '\223', '\224', '\225', '\226', '\227',
- '\230', '\231', '\232', '\233', '\234', '\235', '\236', '\237',
- '\240', '\241', '\242', '\243', '\244', '\245', '\250', '\247',
- '\250', '\251', '\252', '\253', '\254', '\255', '\256', '\257',
- '\260', '\261', '\262', '\263', '\270', '\265', '\266', '\267',
- '\270', '\271', '\272', '\273', '\275', '\275', '\377', '\277',
- '\340', '\341', '\342', '\343', '\344', '\345', '\346', '\347',
- '\350', '\351', '\352', '\353', '\354', '\355', '\356', '\357',
- '\360', '\361', '\362', '\363', '\364', '\365', '\366', '\327',
- '\370', '\371', '\372', '\373', '\374', '\375', '\376', '\337',
- '\340', '\341', '\342', '\343', '\344', '\345', '\346', '\347',
- '\350', '\351', '\352', '\353', '\354', '\355', '\356', '\357',
- '\360', '\361', '\362', '\363', '\364', '\365', '\366', '\367',
- '\370', '\371', '\372', '\373', '\374', '\375', '\376', '\377'
-};
-
-static unsigned short EncISO_8859_15_CtypeTable[256] = {
- 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004,
- 0x1004, 0x1106, 0x1104, 0x1104, 0x1104, 0x1104, 0x1004, 0x1004,
- 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004,
- 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004,
- 0x1142, 0x10d0, 0x10d0, 0x10d0, 0x10d0, 0x10d0, 0x10d0, 0x10d0,
- 0x10d0, 0x10d0, 0x10d0, 0x10d0, 0x10d0, 0x10d0, 0x10d0, 0x10d0,
- 0x1c58, 0x1c58, 0x1c58, 0x1c58, 0x1c58, 0x1c58, 0x1c58, 0x1c58,
- 0x1c58, 0x1c58, 0x10d0, 0x10d0, 0x10d0, 0x10d0, 0x10d0, 0x10d0,
- 0x10d0, 0x1e51, 0x1e51, 0x1e51, 0x1e51, 0x1e51, 0x1e51, 0x1a51,
- 0x1a51, 0x1a51, 0x1a51, 0x1a51, 0x1a51, 0x1a51, 0x1a51, 0x1a51,
- 0x1a51, 0x1a51, 0x1a51, 0x1a51, 0x1a51, 0x1a51, 0x1a51, 0x1a51,
- 0x1a51, 0x1a51, 0x1a51, 0x10d0, 0x10d0, 0x10d0, 0x10d0, 0x18d0,
- 0x10d0, 0x1c71, 0x1c71, 0x1c71, 0x1c71, 0x1c71, 0x1c71, 0x1871,
- 0x1871, 0x1871, 0x1871, 0x1871, 0x1871, 0x1871, 0x1871, 0x1871,
- 0x1871, 0x1871, 0x1871, 0x1871, 0x1871, 0x1871, 0x1871, 0x1871,
- 0x1871, 0x1871, 0x1871, 0x10d0, 0x10d0, 0x10d0, 0x10d0, 0x1004,
- 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004,
- 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004,
- 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004,
- 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004,
- 0x0142, 0x00d0, 0x0050, 0x0050, 0x0050, 0x0050, 0x0a51, 0x0050,
- 0x0871, 0x0050, 0x0871, 0x00d0, 0x0050, 0x00d0, 0x0050, 0x0050,
- 0x0050, 0x0050, 0x0850, 0x0850, 0x0a51, 0x0871, 0x0050, 0x00d0,
- 0x0871, 0x0850, 0x0871, 0x00d0, 0x0a51, 0x0871, 0x0a51, 0x00d0,
- 0x0a51, 0x0a51, 0x0a51, 0x0a51, 0x0a51, 0x0a51, 0x0a51, 0x0a51,
- 0x0a51, 0x0a51, 0x0a51, 0x0a51, 0x0a51, 0x0a51, 0x0a51, 0x0a51,
- 0x0a51, 0x0a51, 0x0a51, 0x0a51, 0x0a51, 0x0a51, 0x0a51, 0x0050,
- 0x0a51, 0x0a51, 0x0a51, 0x0a51, 0x0a51, 0x0a51, 0x0a51, 0x0871,
- 0x0871, 0x0871, 0x0871, 0x0871, 0x0871, 0x0871, 0x0871, 0x0871,
- 0x0871, 0x0871, 0x0871, 0x0871, 0x0871, 0x0871, 0x0871, 0x0871,
- 0x0871, 0x0871, 0x0871, 0x0871, 0x0871, 0x0871, 0x0871, 0x0050,
- 0x0871, 0x0871, 0x0871, 0x0871, 0x0871, 0x0871, 0x0871, 0x0871
-};
-
-static int
-iso_8859_15_mbc_to_lower(UChar* p, UChar* lower)
-{
- *lower = ENC_ISO_8859_15_TO_LOWER_CASE(*p);
- return 1; /* return byte length of converted char to lower */
-}
-
-static int
-iso_8859_15_mbc_is_case_ambig(UChar* p)
-{
- int v = (EncISO_8859_15_CtypeTable[*p]
- & (ONIGENC_CTYPE_UPPER | ONIGENC_CTYPE_LOWER));
-
- if ((v | ONIGENC_CTYPE_LOWER) != 0) {
- /* 0xdf, 0xaa, 0xb5, 0xba are lower case letter, but can't convert. */
- if (*p == 0xdf || *p == 0xaa || *p == 0xb5 || *p == 0xba)
- return FALSE;
- else
- return TRUE;
- }
- return (v != 0 ? TRUE : FALSE);
-}
-
-static int
-iso_8859_15_code_is_ctype(OnigCodePoint code, unsigned int ctype)
-{
- if (code < 256)
- return ENC_IS_ISO_8859_15_CTYPE(code, ctype);
- else
- return FALSE;
-}
-
-OnigEncodingType OnigEncodingISO_8859_15 = {
- {
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
- },
- "ISO-8859-15", /* name */
- 1, /* max byte length */
- TRUE, /* is_fold_match */
- ONIGENC_CTYPE_SUPPORT_LEVEL_SB, /* ctype_support_level */
- TRUE, /* is continuous sb mb codepoint */
- onigenc_single_byte_mbc_to_code,
- onigenc_single_byte_code_to_mbclen,
- onigenc_single_byte_code_to_mbc,
- iso_8859_15_mbc_to_lower,
- iso_8859_15_mbc_is_case_ambig,
- iso_8859_15_code_is_ctype,
- onigenc_nothing_get_ctype_code_range,
- onigenc_single_byte_left_adjust_char_head,
- onigenc_single_byte_is_allowed_reverse_match,
- onigenc_get_all_fold_match_code_ss_0xdf,
- onigenc_get_fold_match_info_ss_0xdf
-};
diff --git a/ext/mbstring/oniguruma/enc/iso8859_16.c b/ext/mbstring/oniguruma/enc/iso8859_16.c
deleted file mode 100644
index e59ea0f42c..0000000000
--- a/ext/mbstring/oniguruma/enc/iso8859_16.c
+++ /dev/null
@@ -1,155 +0,0 @@
-/**********************************************************************
-
- iso8859_16.c - Oniguruma (regular expression library)
-
- Copyright (C) 2004 K.Kosako (kosako@sofnec.co.jp)
-
-**********************************************************************/
-#include "regenc.h"
-
-#define ENC_ISO_8859_16_TO_LOWER_CASE(c) EncISO_8859_16_ToLowerCaseTable[c]
-#define ENC_IS_ISO_8859_16_CTYPE(code,ctype) \
- ((EncISO_8859_16_CtypeTable[code] & ctype) != 0)
-
-static UChar EncISO_8859_16_ToLowerCaseTable[256] = {
- '\000', '\001', '\002', '\003', '\004', '\005', '\006', '\007',
- '\010', '\011', '\012', '\013', '\014', '\015', '\016', '\017',
- '\020', '\021', '\022', '\023', '\024', '\025', '\026', '\027',
- '\030', '\031', '\032', '\033', '\034', '\035', '\036', '\037',
- '\040', '\041', '\042', '\043', '\044', '\045', '\046', '\047',
- '\050', '\051', '\052', '\053', '\054', '\055', '\056', '\057',
- '\060', '\061', '\062', '\063', '\064', '\065', '\066', '\067',
- '\070', '\071', '\072', '\073', '\074', '\075', '\076', '\077',
- '\100', '\141', '\142', '\143', '\144', '\145', '\146', '\147',
- '\150', '\151', '\152', '\153', '\154', '\155', '\156', '\157',
- '\160', '\161', '\162', '\163', '\164', '\165', '\166', '\167',
- '\170', '\171', '\172', '\133', '\134', '\135', '\136', '\137',
- '\140', '\141', '\142', '\143', '\144', '\145', '\146', '\147',
- '\150', '\151', '\152', '\153', '\154', '\155', '\156', '\157',
- '\160', '\161', '\162', '\163', '\164', '\165', '\166', '\167',
- '\170', '\171', '\172', '\173', '\174', '\175', '\176', '\177',
- '\200', '\201', '\202', '\203', '\204', '\205', '\206', '\207',
- '\210', '\211', '\212', '\213', '\214', '\215', '\216', '\217',
- '\220', '\221', '\222', '\223', '\224', '\225', '\226', '\227',
- '\230', '\231', '\232', '\233', '\234', '\235', '\236', '\237',
- '\240', '\242', '\242', '\263', '\245', '\245', '\250', '\247',
- '\250', '\251', '\272', '\253', '\256', '\255', '\256', '\277',
- '\260', '\261', '\271', '\263', '\270', '\265', '\266', '\267',
- '\270', '\271', '\272', '\273', '\275', '\275', '\377', '\277',
- '\340', '\341', '\342', '\343', '\344', '\345', '\346', '\347',
- '\350', '\351', '\352', '\353', '\354', '\355', '\356', '\357',
- '\360', '\361', '\362', '\363', '\364', '\365', '\366', '\367',
- '\370', '\371', '\372', '\373', '\374', '\375', '\376', '\337',
- '\340', '\341', '\342', '\343', '\344', '\345', '\346', '\347',
- '\350', '\351', '\352', '\353', '\354', '\355', '\356', '\357',
- '\360', '\361', '\362', '\363', '\364', '\365', '\366', '\367',
- '\370', '\371', '\372', '\373', '\374', '\375', '\376', '\377'
-};
-
-static unsigned short EncISO_8859_16_CtypeTable[256] = {
- 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004,
- 0x1004, 0x1106, 0x1104, 0x1104, 0x1104, 0x1104, 0x1004, 0x1004,
- 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004,
- 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004,
- 0x1142, 0x10d0, 0x10d0, 0x10d0, 0x10d0, 0x10d0, 0x10d0, 0x10d0,
- 0x10d0, 0x10d0, 0x10d0, 0x10d0, 0x10d0, 0x10d0, 0x10d0, 0x10d0,
- 0x1c58, 0x1c58, 0x1c58, 0x1c58, 0x1c58, 0x1c58, 0x1c58, 0x1c58,
- 0x1c58, 0x1c58, 0x10d0, 0x10d0, 0x10d0, 0x10d0, 0x10d0, 0x10d0,
- 0x10d0, 0x1e51, 0x1e51, 0x1e51, 0x1e51, 0x1e51, 0x1e51, 0x1a51,
- 0x1a51, 0x1a51, 0x1a51, 0x1a51, 0x1a51, 0x1a51, 0x1a51, 0x1a51,
- 0x1a51, 0x1a51, 0x1a51, 0x1a51, 0x1a51, 0x1a51, 0x1a51, 0x1a51,
- 0x1a51, 0x1a51, 0x1a51, 0x10d0, 0x10d0, 0x10d0, 0x10d0, 0x18d0,
- 0x10d0, 0x1c71, 0x1c71, 0x1c71, 0x1c71, 0x1c71, 0x1c71, 0x1871,
- 0x1871, 0x1871, 0x1871, 0x1871, 0x1871, 0x1871, 0x1871, 0x1871,
- 0x1871, 0x1871, 0x1871, 0x1871, 0x1871, 0x1871, 0x1871, 0x1871,
- 0x1871, 0x1871, 0x1871, 0x10d0, 0x10d0, 0x10d0, 0x10d0, 0x1004,
- 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004,
- 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004,
- 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004,
- 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004,
- 0x0142, 0x0a51, 0x0871, 0x0a51, 0x0050, 0x00d0, 0x0a51, 0x0050,
- 0x0871, 0x0050, 0x0a51, 0x00d0, 0x0a51, 0x00d0, 0x0871, 0x0a51,
- 0x0050, 0x0050, 0x0a51, 0x0871, 0x0a51, 0x00d0, 0x0050, 0x00d0,
- 0x0871, 0x0871, 0x0871, 0x00d0, 0x0a51, 0x0871, 0x0a51, 0x0871,
- 0x0a51, 0x0a51, 0x0a51, 0x0a51, 0x0a51, 0x0a51, 0x0a51, 0x0a51,
- 0x0a51, 0x0a51, 0x0a51, 0x0a51, 0x0a51, 0x0a51, 0x0a51, 0x0a51,
- 0x0a51, 0x0a51, 0x0a51, 0x0a51, 0x0a51, 0x0a51, 0x0a51, 0x0a51,
- 0x0a51, 0x0a51, 0x0a51, 0x0a51, 0x0a51, 0x0a51, 0x0a51, 0x0871,
- 0x0871, 0x0871, 0x0871, 0x0871, 0x0871, 0x0871, 0x0871, 0x0871,
- 0x0871, 0x0871, 0x0871, 0x0871, 0x0871, 0x0871, 0x0871, 0x0871,
- 0x0871, 0x0871, 0x0871, 0x0871, 0x0871, 0x0871, 0x0871, 0x0871,
- 0x0871, 0x0871, 0x0871, 0x0871, 0x0871, 0x0871, 0x0871, 0x0871
-};
-
-static int
-iso_8859_16_mbc_to_lower(UChar* p, UChar* lower)
-{
- *lower = ENC_ISO_8859_16_TO_LOWER_CASE(*p);
- return 1; /* return byte length of converted char to lower */
-}
-
-static int
-iso_8859_16_mbc_is_case_ambig(UChar* p)
-{
- int v = (EncISO_8859_16_CtypeTable[*p] &
- (ONIGENC_CTYPE_UPPER | ONIGENC_CTYPE_LOWER));
-
- if ((v | ONIGENC_CTYPE_LOWER) != 0) {
- /* 0xdf is lower case letter, but can't convert. */
- if (*p == 0xdf)
- return FALSE;
- else
- return TRUE;
- }
- else if (v != 0) {
- return TRUE;
- }
-
- return FALSE;
-}
-
-static int
-iso_8859_16_code_is_ctype(OnigCodePoint code, unsigned int ctype)
-{
- if (code < 256)
- return ENC_IS_ISO_8859_16_CTYPE(code, ctype);
- else
- return FALSE;
-}
-
-OnigEncodingType OnigEncodingISO_8859_16 = {
- {
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
- },
- "ISO-8859-16", /* name */
- 1, /* max byte length */
- TRUE, /* is_fold_match */
- ONIGENC_CTYPE_SUPPORT_LEVEL_SB, /* ctype_support_level */
- TRUE, /* is continuous sb mb codepoint */
- onigenc_single_byte_mbc_to_code,
- onigenc_single_byte_code_to_mbclen,
- onigenc_single_byte_code_to_mbc,
- iso_8859_16_mbc_to_lower,
- iso_8859_16_mbc_is_case_ambig,
- iso_8859_16_code_is_ctype,
- onigenc_nothing_get_ctype_code_range,
- onigenc_single_byte_left_adjust_char_head,
- onigenc_single_byte_is_allowed_reverse_match,
- onigenc_get_all_fold_match_code_ss_0xdf,
- onigenc_get_fold_match_info_ss_0xdf
-};
diff --git a/ext/mbstring/oniguruma/enc/iso8859_2.c b/ext/mbstring/oniguruma/enc/iso8859_2.c
deleted file mode 100644
index 3d6b0a6573..0000000000
--- a/ext/mbstring/oniguruma/enc/iso8859_2.c
+++ /dev/null
@@ -1,152 +0,0 @@
-/**********************************************************************
-
- iso8859_2.c - Oniguruma (regular expression library)
-
- Copyright (C) 2004 K.Kosako (kosako@sofnec.co.jp)
-
-**********************************************************************/
-#include "regenc.h"
-
-#define ENC_ISO_8859_2_TO_LOWER_CASE(c) EncISO_8859_2_ToLowerCaseTable[c]
-#define ENC_IS_ISO_8859_2_CTYPE(code,ctype) \
- ((EncISO_8859_2_CtypeTable[code] & ctype) != 0)
-
-static UChar EncISO_8859_2_ToLowerCaseTable[256] = {
- '\000', '\001', '\002', '\003', '\004', '\005', '\006', '\007',
- '\010', '\011', '\012', '\013', '\014', '\015', '\016', '\017',
- '\020', '\021', '\022', '\023', '\024', '\025', '\026', '\027',
- '\030', '\031', '\032', '\033', '\034', '\035', '\036', '\037',
- '\040', '\041', '\042', '\043', '\044', '\045', '\046', '\047',
- '\050', '\051', '\052', '\053', '\054', '\055', '\056', '\057',
- '\060', '\061', '\062', '\063', '\064', '\065', '\066', '\067',
- '\070', '\071', '\072', '\073', '\074', '\075', '\076', '\077',
- '\100', '\141', '\142', '\143', '\144', '\145', '\146', '\147',
- '\150', '\151', '\152', '\153', '\154', '\155', '\156', '\157',
- '\160', '\161', '\162', '\163', '\164', '\165', '\166', '\167',
- '\170', '\171', '\172', '\133', '\134', '\135', '\136', '\137',
- '\140', '\141', '\142', '\143', '\144', '\145', '\146', '\147',
- '\150', '\151', '\152', '\153', '\154', '\155', '\156', '\157',
- '\160', '\161', '\162', '\163', '\164', '\165', '\166', '\167',
- '\170', '\171', '\172', '\173', '\174', '\175', '\176', '\177',
- '\200', '\201', '\202', '\203', '\204', '\205', '\206', '\207',
- '\210', '\211', '\212', '\213', '\214', '\215', '\216', '\217',
- '\220', '\221', '\222', '\223', '\224', '\225', '\226', '\227',
- '\230', '\231', '\232', '\233', '\234', '\235', '\236', '\237',
- '\240', '\261', '\242', '\263', '\244', '\265', '\266', '\247',
- '\250', '\271', '\272', '\273', '\274', '\255', '\276', '\277',
- '\260', '\261', '\262', '\263', '\264', '\265', '\266', '\267',
- '\270', '\271', '\272', '\273', '\274', '\275', '\276', '\277',
- '\340', '\341', '\342', '\343', '\344', '\345', '\346', '\347',
- '\350', '\351', '\352', '\353', '\354', '\355', '\356', '\357',
- '\360', '\361', '\362', '\363', '\364', '\365', '\366', '\327',
- '\370', '\371', '\372', '\373', '\374', '\375', '\376', '\337',
- '\340', '\341', '\342', '\343', '\344', '\345', '\346', '\347',
- '\350', '\351', '\352', '\353', '\354', '\355', '\356', '\357',
- '\360', '\361', '\362', '\363', '\364', '\365', '\366', '\367',
- '\370', '\371', '\372', '\373', '\374', '\375', '\376', '\377'
-};
-
-static unsigned short EncISO_8859_2_CtypeTable[256] = {
- 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004,
- 0x1004, 0x1106, 0x1104, 0x1104, 0x1104, 0x1104, 0x1004, 0x1004,
- 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004,
- 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004,
- 0x1142, 0x10d0, 0x10d0, 0x10d0, 0x10d0, 0x10d0, 0x10d0, 0x10d0,
- 0x10d0, 0x10d0, 0x10d0, 0x10d0, 0x10d0, 0x10d0, 0x10d0, 0x10d0,
- 0x1c58, 0x1c58, 0x1c58, 0x1c58, 0x1c58, 0x1c58, 0x1c58, 0x1c58,
- 0x1c58, 0x1c58, 0x10d0, 0x10d0, 0x10d0, 0x10d0, 0x10d0, 0x10d0,
- 0x10d0, 0x1e51, 0x1e51, 0x1e51, 0x1e51, 0x1e51, 0x1e51, 0x1a51,
- 0x1a51, 0x1a51, 0x1a51, 0x1a51, 0x1a51, 0x1a51, 0x1a51, 0x1a51,
- 0x1a51, 0x1a51, 0x1a51, 0x1a51, 0x1a51, 0x1a51, 0x1a51, 0x1a51,
- 0x1a51, 0x1a51, 0x1a51, 0x10d0, 0x10d0, 0x10d0, 0x10d0, 0x18d0,
- 0x10d0, 0x1c71, 0x1c71, 0x1c71, 0x1c71, 0x1c71, 0x1c71, 0x1871,
- 0x1871, 0x1871, 0x1871, 0x1871, 0x1871, 0x1871, 0x1871, 0x1871,
- 0x1871, 0x1871, 0x1871, 0x1871, 0x1871, 0x1871, 0x1871, 0x1871,
- 0x1871, 0x1871, 0x1871, 0x10d0, 0x10d0, 0x10d0, 0x10d0, 0x1004,
- 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004,
- 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004,
- 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004,
- 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004,
- 0x0142, 0x0a51, 0x0050, 0x0a51, 0x0050, 0x0a51, 0x0a51, 0x0050,
- 0x0050, 0x0a51, 0x0a51, 0x0a51, 0x0a51, 0x00d0, 0x0a51, 0x0a51,
- 0x0050, 0x0871, 0x0050, 0x0871, 0x0050, 0x0871, 0x0871, 0x0050,
- 0x0050, 0x0871, 0x0871, 0x0871, 0x0871, 0x0050, 0x0871, 0x0871,
- 0x0a51, 0x0a51, 0x0a51, 0x0a51, 0x0a51, 0x0a51, 0x0a51, 0x0a51,
- 0x0a51, 0x0a51, 0x0a51, 0x0a51, 0x0a51, 0x0a51, 0x0a51, 0x0a51,
- 0x0a51, 0x0a51, 0x0a51, 0x0a51, 0x0a51, 0x0a51, 0x0a51, 0x0050,
- 0x0a51, 0x0a51, 0x0a51, 0x0a51, 0x0a51, 0x0a51, 0x0a51, 0x0871,
- 0x0871, 0x0871, 0x0871, 0x0871, 0x0871, 0x0871, 0x0871, 0x0871,
- 0x0871, 0x0871, 0x0871, 0x0871, 0x0871, 0x0871, 0x0871, 0x0871,
- 0x0871, 0x0871, 0x0871, 0x0871, 0x0871, 0x0871, 0x0871, 0x0050,
- 0x0871, 0x0871, 0x0871, 0x0871, 0x0871, 0x0871, 0x0871, 0x0050
-};
-
-static int
-iso_8859_2_mbc_to_lower(UChar* p, UChar* lower)
-{
- *lower = ENC_ISO_8859_2_TO_LOWER_CASE(*p);
- return 1; /* return byte length of converted char to lower */
-}
-
-static int
-iso_8859_2_mbc_is_case_ambig(UChar* p)
-{
- int v = (EncISO_8859_2_CtypeTable[*p] &
- (ONIGENC_CTYPE_UPPER | ONIGENC_CTYPE_LOWER));
-
- if ((v | ONIGENC_CTYPE_LOWER) != 0) {
- /* 0xdf is lower case letter, but can't convert. */
- if (*p == 0xdf)
- return FALSE;
- else
- return TRUE;
- }
-
- return (v != 0 ? TRUE : FALSE);
-}
-
-static int
-iso_8859_2_code_is_ctype(OnigCodePoint code, unsigned int ctype)
-{
- if (code < 256)
- return ENC_IS_ISO_8859_2_CTYPE(code, ctype);
- else
- return FALSE;
-}
-
-OnigEncodingType OnigEncodingISO_8859_2 = {
- {
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
- },
- "ISO-8859-2", /* name */
- 1, /* max byte length */
- TRUE, /* is_fold_match */
- ONIGENC_CTYPE_SUPPORT_LEVEL_SB, /* ctype_support_level */
- TRUE, /* is continuous sb mb codepoint */
- onigenc_single_byte_mbc_to_code,
- onigenc_single_byte_code_to_mbclen,
- onigenc_single_byte_code_to_mbc,
- iso_8859_2_mbc_to_lower,
- iso_8859_2_mbc_is_case_ambig,
- iso_8859_2_code_is_ctype,
- onigenc_nothing_get_ctype_code_range,
- onigenc_single_byte_left_adjust_char_head,
- onigenc_single_byte_is_allowed_reverse_match,
- onigenc_get_all_fold_match_code_ss_0xdf,
- onigenc_get_fold_match_info_ss_0xdf
-};
diff --git a/ext/mbstring/oniguruma/enc/iso8859_3.c b/ext/mbstring/oniguruma/enc/iso8859_3.c
deleted file mode 100644
index 37a3089aab..0000000000
--- a/ext/mbstring/oniguruma/enc/iso8859_3.c
+++ /dev/null
@@ -1,152 +0,0 @@
-/**********************************************************************
-
- iso8859_3.c - Oniguruma (regular expression library)
-
- Copyright (C) 2004 K.Kosako (kosako@sofnec.co.jp)
-
-**********************************************************************/
-#include "regenc.h"
-
-#define ENC_ISO_8859_3_TO_LOWER_CASE(c) EncISO_8859_3_ToLowerCaseTable[c]
-#define ENC_IS_ISO_8859_3_CTYPE(code,ctype) \
- ((EncISO_8859_3_CtypeTable[code] & ctype) != 0)
-
-static UChar EncISO_8859_3_ToLowerCaseTable[256] = {
- '\000', '\001', '\002', '\003', '\004', '\005', '\006', '\007',
- '\010', '\011', '\012', '\013', '\014', '\015', '\016', '\017',
- '\020', '\021', '\022', '\023', '\024', '\025', '\026', '\027',
- '\030', '\031', '\032', '\033', '\034', '\035', '\036', '\037',
- '\040', '\041', '\042', '\043', '\044', '\045', '\046', '\047',
- '\050', '\051', '\052', '\053', '\054', '\055', '\056', '\057',
- '\060', '\061', '\062', '\063', '\064', '\065', '\066', '\067',
- '\070', '\071', '\072', '\073', '\074', '\075', '\076', '\077',
- '\100', '\141', '\142', '\143', '\144', '\145', '\146', '\147',
- '\150', '\151', '\152', '\153', '\154', '\155', '\156', '\157',
- '\160', '\161', '\162', '\163', '\164', '\165', '\166', '\167',
- '\170', '\171', '\172', '\133', '\134', '\135', '\136', '\137',
- '\140', '\141', '\142', '\143', '\144', '\145', '\146', '\147',
- '\150', '\151', '\152', '\153', '\154', '\155', '\156', '\157',
- '\160', '\161', '\162', '\163', '\164', '\165', '\166', '\167',
- '\170', '\171', '\172', '\173', '\174', '\175', '\176', '\177',
- '\200', '\201', '\202', '\203', '\204', '\205', '\206', '\207',
- '\210', '\211', '\212', '\213', '\214', '\215', '\216', '\217',
- '\220', '\221', '\222', '\223', '\224', '\225', '\226', '\227',
- '\230', '\231', '\232', '\233', '\234', '\235', '\236', '\237',
- '\240', '\261', '\242', '\243', '\244', '\245', '\266', '\247',
- '\250', '\271', '\272', '\273', '\274', '\255', '\256', '\277',
- '\260', '\261', '\262', '\263', '\264', '\265', '\266', '\267',
- '\270', '\271', '\272', '\273', '\274', '\275', '\276', '\277',
- '\340', '\341', '\342', '\303', '\344', '\345', '\346', '\347',
- '\350', '\351', '\352', '\353', '\354', '\355', '\356', '\357',
- '\320', '\361', '\362', '\363', '\364', '\365', '\366', '\327',
- '\370', '\371', '\372', '\373', '\374', '\375', '\376', '\337',
- '\340', '\341', '\342', '\343', '\344', '\345', '\346', '\347',
- '\350', '\351', '\352', '\353', '\354', '\355', '\356', '\357',
- '\360', '\361', '\362', '\363', '\364', '\365', '\366', '\367',
- '\370', '\371', '\372', '\373', '\374', '\375', '\376', '\377'
-};
-
-static unsigned short EncISO_8859_3_CtypeTable[256] = {
- 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004,
- 0x1004, 0x1106, 0x1104, 0x1104, 0x1104, 0x1104, 0x1004, 0x1004,
- 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004,
- 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004,
- 0x1142, 0x10d0, 0x10d0, 0x10d0, 0x10d0, 0x10d0, 0x10d0, 0x10d0,
- 0x10d0, 0x10d0, 0x10d0, 0x10d0, 0x10d0, 0x10d0, 0x10d0, 0x10d0,
- 0x1c58, 0x1c58, 0x1c58, 0x1c58, 0x1c58, 0x1c58, 0x1c58, 0x1c58,
- 0x1c58, 0x1c58, 0x10d0, 0x10d0, 0x10d0, 0x10d0, 0x10d0, 0x10d0,
- 0x10d0, 0x1e51, 0x1e51, 0x1e51, 0x1e51, 0x1e51, 0x1e51, 0x1a51,
- 0x1a51, 0x1a51, 0x1a51, 0x1a51, 0x1a51, 0x1a51, 0x1a51, 0x1a51,
- 0x1a51, 0x1a51, 0x1a51, 0x1a51, 0x1a51, 0x1a51, 0x1a51, 0x1a51,
- 0x1a51, 0x1a51, 0x1a51, 0x10d0, 0x10d0, 0x10d0, 0x10d0, 0x18d0,
- 0x10d0, 0x1c71, 0x1c71, 0x1c71, 0x1c71, 0x1c71, 0x1c71, 0x1871,
- 0x1871, 0x1871, 0x1871, 0x1871, 0x1871, 0x1871, 0x1871, 0x1871,
- 0x1871, 0x1871, 0x1871, 0x1871, 0x1871, 0x1871, 0x1871, 0x1871,
- 0x1871, 0x1871, 0x1871, 0x10d0, 0x10d0, 0x10d0, 0x10d0, 0x1004,
- 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004,
- 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004,
- 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004,
- 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004,
- 0x0142, 0x0a51, 0x0050, 0x0050, 0x0050, 0x0000, 0x0a51, 0x0050,
- 0x0050, 0x0a51, 0x0a51, 0x0a51, 0x0a51, 0x00d0, 0x0000, 0x0a51,
- 0x0050, 0x0871, 0x0850, 0x0850, 0x0050, 0x0871, 0x0871, 0x00d0,
- 0x0050, 0x0871, 0x0871, 0x0871, 0x0871, 0x0850, 0x0000, 0x0871,
- 0x0a51, 0x0a51, 0x0a51, 0x0000, 0x0a51, 0x0a51, 0x0a51, 0x0a51,
- 0x0a51, 0x0a51, 0x0a51, 0x0a51, 0x0a51, 0x0a51, 0x0a51, 0x0a51,
- 0x0000, 0x0a51, 0x0a51, 0x0a51, 0x0a51, 0x0a51, 0x0a51, 0x0050,
- 0x0a51, 0x0a51, 0x0a51, 0x0a51, 0x0a51, 0x0a51, 0x0a51, 0x0871,
- 0x0871, 0x0871, 0x0871, 0x0000, 0x0871, 0x0871, 0x0871, 0x0871,
- 0x0871, 0x0871, 0x0871, 0x0871, 0x0871, 0x0871, 0x0871, 0x0871,
- 0x0000, 0x0871, 0x0871, 0x0871, 0x0871, 0x0871, 0x0871, 0x0050,
- 0x0871, 0x0871, 0x0871, 0x0871, 0x0871, 0x0871, 0x0871, 0x0050
-};
-
-static int
-iso_8859_3_mbc_to_lower(UChar* p, UChar* lower)
-{
- *lower = ENC_ISO_8859_3_TO_LOWER_CASE(*p);
- return 1; /* return byte length of converted char to lower */
-}
-
-static int
-iso_8859_3_mbc_is_case_ambig(UChar* p)
-{
- int v = (EncISO_8859_3_CtypeTable[*p] &
- (ONIGENC_CTYPE_UPPER | ONIGENC_CTYPE_LOWER));
-
- if ((v | ONIGENC_CTYPE_LOWER) != 0) {
- /* 0xdf is lower case letter, but can't convert. */
- if (*p == 0xdf || *p == 0xb5)
- return FALSE;
- else
- return TRUE;
- }
-
- return (v != 0 ? TRUE : FALSE);
-}
-
-static int
-iso_8859_3_code_is_ctype(OnigCodePoint code, unsigned int ctype)
-{
- if (code < 256)
- return ENC_IS_ISO_8859_3_CTYPE(code, ctype);
- else
- return FALSE;
-}
-
-OnigEncodingType OnigEncodingISO_8859_3 = {
- {
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
- },
- "ISO-8859-3", /* name */
- 1, /* max byte length */
- TRUE, /* is_fold_match */
- ONIGENC_CTYPE_SUPPORT_LEVEL_SB, /* ctype_support_level */
- TRUE, /* is continuous sb mb codepoint */
- onigenc_single_byte_mbc_to_code,
- onigenc_single_byte_code_to_mbclen,
- onigenc_single_byte_code_to_mbc,
- iso_8859_3_mbc_to_lower,
- iso_8859_3_mbc_is_case_ambig,
- iso_8859_3_code_is_ctype,
- onigenc_nothing_get_ctype_code_range,
- onigenc_single_byte_left_adjust_char_head,
- onigenc_single_byte_is_allowed_reverse_match,
- onigenc_get_all_fold_match_code_ss_0xdf,
- onigenc_get_fold_match_info_ss_0xdf
-};
diff --git a/ext/mbstring/oniguruma/enc/iso8859_4.c b/ext/mbstring/oniguruma/enc/iso8859_4.c
deleted file mode 100644
index 897eec957f..0000000000
--- a/ext/mbstring/oniguruma/enc/iso8859_4.c
+++ /dev/null
@@ -1,155 +0,0 @@
-/**********************************************************************
-
- iso8859_4.c - Oniguruma (regular expression library)
-
- Copyright (C) 2004 K.Kosako (kosako@sofnec.co.jp)
-
-**********************************************************************/
-#include "regenc.h"
-
-#define ENC_ISO_8859_4_TO_LOWER_CASE(c) EncISO_8859_4_ToLowerCaseTable[c]
-#define ENC_IS_ISO_8859_4_CTYPE(code,ctype) \
- ((EncISO_8859_4_CtypeTable[code] & ctype) != 0)
-
-static UChar EncISO_8859_4_ToLowerCaseTable[256] = {
- '\000', '\001', '\002', '\003', '\004', '\005', '\006', '\007',
- '\010', '\011', '\012', '\013', '\014', '\015', '\016', '\017',
- '\020', '\021', '\022', '\023', '\024', '\025', '\026', '\027',
- '\030', '\031', '\032', '\033', '\034', '\035', '\036', '\037',
- '\040', '\041', '\042', '\043', '\044', '\045', '\046', '\047',
- '\050', '\051', '\052', '\053', '\054', '\055', '\056', '\057',
- '\060', '\061', '\062', '\063', '\064', '\065', '\066', '\067',
- '\070', '\071', '\072', '\073', '\074', '\075', '\076', '\077',
- '\100', '\141', '\142', '\143', '\144', '\145', '\146', '\147',
- '\150', '\151', '\152', '\153', '\154', '\155', '\156', '\157',
- '\160', '\161', '\162', '\163', '\164', '\165', '\166', '\167',
- '\170', '\171', '\172', '\133', '\134', '\135', '\136', '\137',
- '\140', '\141', '\142', '\143', '\144', '\145', '\146', '\147',
- '\150', '\151', '\152', '\153', '\154', '\155', '\156', '\157',
- '\160', '\161', '\162', '\163', '\164', '\165', '\166', '\167',
- '\170', '\171', '\172', '\173', '\174', '\175', '\176', '\177',
- '\200', '\201', '\202', '\203', '\204', '\205', '\206', '\207',
- '\210', '\211', '\212', '\213', '\214', '\215', '\216', '\217',
- '\220', '\221', '\222', '\223', '\224', '\225', '\226', '\227',
- '\230', '\231', '\232', '\233', '\234', '\235', '\236', '\237',
- '\240', '\261', '\242', '\263', '\244', '\265', '\266', '\247',
- '\250', '\271', '\272', '\273', '\274', '\255', '\276', '\257',
- '\260', '\261', '\262', '\263', '\264', '\265', '\266', '\267',
- '\270', '\271', '\272', '\273', '\274', '\277', '\276', '\277',
- '\340', '\341', '\342', '\343', '\344', '\345', '\346', '\347',
- '\350', '\351', '\352', '\353', '\354', '\355', '\356', '\357',
- '\360', '\361', '\362', '\363', '\364', '\365', '\366', '\327',
- '\370', '\371', '\372', '\373', '\374', '\375', '\376', '\337',
- '\340', '\341', '\342', '\343', '\344', '\345', '\346', '\347',
- '\350', '\351', '\352', '\353', '\354', '\355', '\356', '\357',
- '\360', '\361', '\362', '\363', '\364', '\365', '\366', '\367',
- '\370', '\371', '\372', '\373', '\374', '\375', '\376', '\377'
-};
-
-static unsigned short EncISO_8859_4_CtypeTable[256] = {
- 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004,
- 0x1004, 0x1106, 0x1104, 0x1104, 0x1104, 0x1104, 0x1004, 0x1004,
- 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004,
- 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004,
- 0x1142, 0x10d0, 0x10d0, 0x10d0, 0x10d0, 0x10d0, 0x10d0, 0x10d0,
- 0x10d0, 0x10d0, 0x10d0, 0x10d0, 0x10d0, 0x10d0, 0x10d0, 0x10d0,
- 0x1c58, 0x1c58, 0x1c58, 0x1c58, 0x1c58, 0x1c58, 0x1c58, 0x1c58,
- 0x1c58, 0x1c58, 0x10d0, 0x10d0, 0x10d0, 0x10d0, 0x10d0, 0x10d0,
- 0x10d0, 0x1e51, 0x1e51, 0x1e51, 0x1e51, 0x1e51, 0x1e51, 0x1a51,
- 0x1a51, 0x1a51, 0x1a51, 0x1a51, 0x1a51, 0x1a51, 0x1a51, 0x1a51,
- 0x1a51, 0x1a51, 0x1a51, 0x1a51, 0x1a51, 0x1a51, 0x1a51, 0x1a51,
- 0x1a51, 0x1a51, 0x1a51, 0x10d0, 0x10d0, 0x10d0, 0x10d0, 0x18d0,
- 0x10d0, 0x1c71, 0x1c71, 0x1c71, 0x1c71, 0x1c71, 0x1c71, 0x1871,
- 0x1871, 0x1871, 0x1871, 0x1871, 0x1871, 0x1871, 0x1871, 0x1871,
- 0x1871, 0x1871, 0x1871, 0x1871, 0x1871, 0x1871, 0x1871, 0x1871,
- 0x1871, 0x1871, 0x1871, 0x10d0, 0x10d0, 0x10d0, 0x10d0, 0x1004,
- 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004,
- 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004,
- 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004,
- 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004,
- 0x0142, 0x0a51, 0x0871, 0x0a51, 0x0050, 0x0a51, 0x0a51, 0x0050,
- 0x0050, 0x0a51, 0x0a51, 0x0a51, 0x0a51, 0x00d0, 0x0a51, 0x0050,
- 0x0050, 0x0871, 0x0050, 0x0871, 0x0050, 0x0871, 0x0871, 0x0050,
- 0x0050, 0x0871, 0x0871, 0x0871, 0x0871, 0x0a51, 0x0871, 0x0871,
- 0x0a51, 0x0a51, 0x0a51, 0x0a51, 0x0a51, 0x0a51, 0x0a51, 0x0a51,
- 0x0a51, 0x0a51, 0x0a51, 0x0a51, 0x0a51, 0x0a51, 0x0a51, 0x0a51,
- 0x0a51, 0x0a51, 0x0a51, 0x0a51, 0x0a51, 0x0a51, 0x0a51, 0x0050,
- 0x0a51, 0x0a51, 0x0a51, 0x0a51, 0x0a51, 0x0a51, 0x0a51, 0x0871,
- 0x0871, 0x0871, 0x0871, 0x0871, 0x0871, 0x0871, 0x0871, 0x0871,
- 0x0871, 0x0871, 0x0871, 0x0871, 0x0871, 0x0871, 0x0871, 0x0871,
- 0x0871, 0x0871, 0x0871, 0x0871, 0x0871, 0x0871, 0x0871, 0x0050,
- 0x0871, 0x0871, 0x0871, 0x0871, 0x0871, 0x0871, 0x0871, 0x0050
-};
-
-static int
-iso_8859_4_mbc_to_lower(UChar* p, UChar* lower)
-{
- *lower = ENC_ISO_8859_4_TO_LOWER_CASE(*p);
- return 1; /* return byte length of converted char to lower */
-}
-
-static int
-iso_8859_4_mbc_is_case_ambig(UChar* p)
-{
- int v = (EncISO_8859_4_CtypeTable[*p] &
- (ONIGENC_CTYPE_UPPER | ONIGENC_CTYPE_LOWER));
-
- if ((v | ONIGENC_CTYPE_LOWER) != 0) {
- /* 0xdf is lower case letter, but can't convert. */
- if (*p == 0xdf || *p == 0xa2)
- return FALSE;
- else
- return TRUE;
- }
- else if (v != 0) {
- return TRUE;
- }
-
- return FALSE;
-}
-
-static int
-iso_8859_4_code_is_ctype(OnigCodePoint code, unsigned int ctype)
-{
- if (code < 256)
- return ENC_IS_ISO_8859_4_CTYPE(code, ctype);
- else
- return FALSE;
-}
-
-OnigEncodingType OnigEncodingISO_8859_4 = {
- {
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
- },
- "ISO-8859-4", /* name */
- 1, /* max byte length */
- TRUE, /* is_fold_match */
- ONIGENC_CTYPE_SUPPORT_LEVEL_SB, /* ctype_support_level */
- TRUE, /* is continuous sb mb codepoint */
- onigenc_single_byte_mbc_to_code,
- onigenc_single_byte_code_to_mbclen,
- onigenc_single_byte_code_to_mbc,
- iso_8859_4_mbc_to_lower,
- iso_8859_4_mbc_is_case_ambig,
- iso_8859_4_code_is_ctype,
- onigenc_nothing_get_ctype_code_range,
- onigenc_single_byte_left_adjust_char_head,
- onigenc_single_byte_is_allowed_reverse_match,
- onigenc_get_all_fold_match_code_ss_0xdf,
- onigenc_get_fold_match_info_ss_0xdf
-};
diff --git a/ext/mbstring/oniguruma/enc/iso8859_5.c b/ext/mbstring/oniguruma/enc/iso8859_5.c
deleted file mode 100644
index 34e0f9db3e..0000000000
--- a/ext/mbstring/oniguruma/enc/iso8859_5.c
+++ /dev/null
@@ -1,144 +0,0 @@
-/**********************************************************************
-
- iso8859_5.c - Oniguruma (regular expression library)
-
- Copyright (C) 2004 K.Kosako (kosako@sofnec.co.jp)
-
-**********************************************************************/
-#include "regenc.h"
-
-#define ENC_ISO_8859_5_TO_LOWER_CASE(c) EncISO_8859_5_ToLowerCaseTable[c]
-#define ENC_IS_ISO_8859_5_CTYPE(code,ctype) \
- ((EncISO_8859_5_CtypeTable[code] & ctype) != 0)
-
-static UChar EncISO_8859_5_ToLowerCaseTable[256] = {
- '\000', '\001', '\002', '\003', '\004', '\005', '\006', '\007',
- '\010', '\011', '\012', '\013', '\014', '\015', '\016', '\017',
- '\020', '\021', '\022', '\023', '\024', '\025', '\026', '\027',
- '\030', '\031', '\032', '\033', '\034', '\035', '\036', '\037',
- '\040', '\041', '\042', '\043', '\044', '\045', '\046', '\047',
- '\050', '\051', '\052', '\053', '\054', '\055', '\056', '\057',
- '\060', '\061', '\062', '\063', '\064', '\065', '\066', '\067',
- '\070', '\071', '\072', '\073', '\074', '\075', '\076', '\077',
- '\100', '\141', '\142', '\143', '\144', '\145', '\146', '\147',
- '\150', '\151', '\152', '\153', '\154', '\155', '\156', '\157',
- '\160', '\161', '\162', '\163', '\164', '\165', '\166', '\167',
- '\170', '\171', '\172', '\133', '\134', '\135', '\136', '\137',
- '\140', '\141', '\142', '\143', '\144', '\145', '\146', '\147',
- '\150', '\151', '\152', '\153', '\154', '\155', '\156', '\157',
- '\160', '\161', '\162', '\163', '\164', '\165', '\166', '\167',
- '\170', '\171', '\172', '\173', '\174', '\175', '\176', '\177',
- '\200', '\201', '\202', '\203', '\204', '\205', '\206', '\207',
- '\210', '\211', '\212', '\213', '\214', '\215', '\216', '\217',
- '\220', '\221', '\222', '\223', '\224', '\225', '\226', '\227',
- '\230', '\231', '\232', '\233', '\234', '\235', '\236', '\237',
- '\240', '\361', '\362', '\363', '\364', '\365', '\366', '\367',
- '\370', '\371', '\372', '\373', '\374', '\255', '\376', '\377',
- '\320', '\321', '\322', '\323', '\324', '\325', '\326', '\327',
- '\330', '\331', '\332', '\333', '\334', '\335', '\336', '\337',
- '\340', '\341', '\342', '\343', '\344', '\345', '\346', '\347',
- '\350', '\351', '\352', '\353', '\354', '\355', '\356', '\357',
- '\320', '\321', '\322', '\323', '\324', '\325', '\326', '\327',
- '\330', '\331', '\332', '\333', '\334', '\335', '\336', '\337',
- '\340', '\341', '\342', '\343', '\344', '\345', '\346', '\347',
- '\350', '\351', '\352', '\353', '\354', '\355', '\356', '\357',
- '\360', '\361', '\362', '\363', '\364', '\365', '\366', '\367',
- '\370', '\371', '\372', '\373', '\374', '\375', '\376', '\377'
-};
-
-static unsigned short EncISO_8859_5_CtypeTable[256] = {
- 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004,
- 0x1004, 0x1106, 0x1104, 0x1104, 0x1104, 0x1104, 0x1004, 0x1004,
- 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004,
- 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004,
- 0x1142, 0x10d0, 0x10d0, 0x10d0, 0x10d0, 0x10d0, 0x10d0, 0x10d0,
- 0x10d0, 0x10d0, 0x10d0, 0x10d0, 0x10d0, 0x10d0, 0x10d0, 0x10d0,
- 0x1c58, 0x1c58, 0x1c58, 0x1c58, 0x1c58, 0x1c58, 0x1c58, 0x1c58,
- 0x1c58, 0x1c58, 0x10d0, 0x10d0, 0x10d0, 0x10d0, 0x10d0, 0x10d0,
- 0x10d0, 0x1e51, 0x1e51, 0x1e51, 0x1e51, 0x1e51, 0x1e51, 0x1a51,
- 0x1a51, 0x1a51, 0x1a51, 0x1a51, 0x1a51, 0x1a51, 0x1a51, 0x1a51,
- 0x1a51, 0x1a51, 0x1a51, 0x1a51, 0x1a51, 0x1a51, 0x1a51, 0x1a51,
- 0x1a51, 0x1a51, 0x1a51, 0x10d0, 0x10d0, 0x10d0, 0x10d0, 0x18d0,
- 0x10d0, 0x1c71, 0x1c71, 0x1c71, 0x1c71, 0x1c71, 0x1c71, 0x1871,
- 0x1871, 0x1871, 0x1871, 0x1871, 0x1871, 0x1871, 0x1871, 0x1871,
- 0x1871, 0x1871, 0x1871, 0x1871, 0x1871, 0x1871, 0x1871, 0x1871,
- 0x1871, 0x1871, 0x1871, 0x10d0, 0x10d0, 0x10d0, 0x10d0, 0x1004,
- 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004,
- 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004,
- 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004,
- 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004,
- 0x0142, 0x0a51, 0x0a51, 0x0a51, 0x0a51, 0x0a51, 0x0a51, 0x0a51,
- 0x0a51, 0x0a51, 0x0a51, 0x0a51, 0x0a51, 0x00d0, 0x0a51, 0x0a51,
- 0x0a51, 0x0a51, 0x0a51, 0x0a51, 0x0a51, 0x0a51, 0x0a51, 0x0a51,
- 0x0a51, 0x0a51, 0x0a51, 0x0a51, 0x0a51, 0x0a51, 0x0a51, 0x0a51,
- 0x0a51, 0x0a51, 0x0a51, 0x0a51, 0x0a51, 0x0a51, 0x0a51, 0x0a51,
- 0x0a51, 0x0a51, 0x0a51, 0x0a51, 0x0a51, 0x0a51, 0x0a51, 0x0a51,
- 0x0871, 0x0871, 0x0871, 0x0871, 0x0871, 0x0871, 0x0871, 0x0871,
- 0x0871, 0x0871, 0x0871, 0x0871, 0x0871, 0x0871, 0x0871, 0x0871,
- 0x0871, 0x0871, 0x0871, 0x0871, 0x0871, 0x0871, 0x0871, 0x0871,
- 0x0871, 0x0871, 0x0871, 0x0871, 0x0871, 0x0871, 0x0871, 0x0871,
- 0x0050, 0x0871, 0x0871, 0x0871, 0x0871, 0x0871, 0x0871, 0x0871,
- 0x0871, 0x0871, 0x0871, 0x0871, 0x0871, 0x0050, 0x0871, 0x0871
-};
-
-static int
-iso_8859_5_mbc_to_lower(UChar* p, UChar* lower)
-{
- *lower = ENC_ISO_8859_5_TO_LOWER_CASE(*p);
- return 1; /* return byte length of converted char to lower */
-}
-
-static int
-iso_8859_5_mbc_is_case_ambig(UChar* p)
-{
- int v = (EncISO_8859_5_CtypeTable[*p] &
- (ONIGENC_CTYPE_UPPER | ONIGENC_CTYPE_LOWER));
-
- return (v != 0 ? TRUE : FALSE);
-}
-
-static int
-iso_8859_5_code_is_ctype(OnigCodePoint code, unsigned int ctype)
-{
- if (code < 256)
- return ENC_IS_ISO_8859_5_CTYPE(code, ctype);
- else
- return FALSE;
-}
-
-OnigEncodingType OnigEncodingISO_8859_5 = {
- {
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
- },
- "ISO-8859-5", /* name */
- 1, /* max byte length */
- FALSE, /* is_fold_match */
- ONIGENC_CTYPE_SUPPORT_LEVEL_SB, /* ctype_support_level */
- TRUE, /* is continuous sb mb codepoint */
- onigenc_single_byte_mbc_to_code,
- onigenc_single_byte_code_to_mbclen,
- onigenc_single_byte_code_to_mbc,
- iso_8859_5_mbc_to_lower,
- iso_8859_5_mbc_is_case_ambig,
- iso_8859_5_code_is_ctype,
- onigenc_nothing_get_ctype_code_range,
- onigenc_single_byte_left_adjust_char_head,
- onigenc_single_byte_is_allowed_reverse_match,
- onigenc_nothing_get_all_fold_match_code,
- onigenc_nothing_get_fold_match_info
-};
diff --git a/ext/mbstring/oniguruma/enc/iso8859_6.c b/ext/mbstring/oniguruma/enc/iso8859_6.c
deleted file mode 100644
index 956e982878..0000000000
--- a/ext/mbstring/oniguruma/enc/iso8859_6.c
+++ /dev/null
@@ -1,92 +0,0 @@
-/**********************************************************************
-
- iso8859_6.c - Oniguruma (regular expression library)
-
- Copyright (C) 2004 K.Kosako (kosako@sofnec.co.jp)
-
-**********************************************************************/
-#include "regenc.h"
-
-#define ENC_IS_ISO_8859_6_CTYPE(code,ctype) \
- ((EncISO_8859_6_CtypeTable[code] & ctype) != 0)
-
-static unsigned short EncISO_8859_6_CtypeTable[256] = {
- 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004,
- 0x1004, 0x1106, 0x1104, 0x1104, 0x1104, 0x1104, 0x1004, 0x1004,
- 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004,
- 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004,
- 0x1142, 0x10d0, 0x10d0, 0x10d0, 0x10d0, 0x10d0, 0x10d0, 0x10d0,
- 0x10d0, 0x10d0, 0x10d0, 0x10d0, 0x10d0, 0x10d0, 0x10d0, 0x10d0,
- 0x1c58, 0x1c58, 0x1c58, 0x1c58, 0x1c58, 0x1c58, 0x1c58, 0x1c58,
- 0x1c58, 0x1c58, 0x10d0, 0x10d0, 0x10d0, 0x10d0, 0x10d0, 0x10d0,
- 0x10d0, 0x1e51, 0x1e51, 0x1e51, 0x1e51, 0x1e51, 0x1e51, 0x1a51,
- 0x1a51, 0x1a51, 0x1a51, 0x1a51, 0x1a51, 0x1a51, 0x1a51, 0x1a51,
- 0x1a51, 0x1a51, 0x1a51, 0x1a51, 0x1a51, 0x1a51, 0x1a51, 0x1a51,
- 0x1a51, 0x1a51, 0x1a51, 0x10d0, 0x10d0, 0x10d0, 0x10d0, 0x18d0,
- 0x10d0, 0x1c71, 0x1c71, 0x1c71, 0x1c71, 0x1c71, 0x1c71, 0x1871,
- 0x1871, 0x1871, 0x1871, 0x1871, 0x1871, 0x1871, 0x1871, 0x1871,
- 0x1871, 0x1871, 0x1871, 0x1871, 0x1871, 0x1871, 0x1871, 0x1871,
- 0x1871, 0x1871, 0x1871, 0x10d0, 0x10d0, 0x10d0, 0x10d0, 0x1004,
- 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004,
- 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004,
- 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004,
- 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004,
- 0x0142, 0x0000, 0x0000, 0x0000, 0x0050, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x00d0, 0x00d0, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x00d0, 0x0000, 0x0000, 0x0000, 0x00d0,
- 0x0000, 0x0851, 0x0851, 0x0851, 0x0851, 0x0851, 0x0851, 0x0851,
- 0x0851, 0x0851, 0x0851, 0x0851, 0x0851, 0x0851, 0x0851, 0x0851,
- 0x0851, 0x0851, 0x0851, 0x0851, 0x0851, 0x0851, 0x0851, 0x0851,
- 0x0851, 0x0851, 0x0851, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0851, 0x0851, 0x0851, 0x0851, 0x0851, 0x0851, 0x0851, 0x0851,
- 0x0851, 0x0851, 0x0851, 0x0851, 0x0851, 0x0851, 0x0851, 0x0851,
- 0x0851, 0x0851, 0x0851, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000
-};
-
-static int
-iso_8859_6_code_is_ctype(OnigCodePoint code, unsigned int ctype)
-{
- if (code < 256)
- return ENC_IS_ISO_8859_6_CTYPE(code, ctype);
- else
- return FALSE;
-}
-
-OnigEncodingType OnigEncodingISO_8859_6 = {
- {
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
- },
- "ISO-8859-6", /* name */
- 1, /* max byte length */
- FALSE, /* is_fold_match */
- ONIGENC_CTYPE_SUPPORT_LEVEL_SB, /* ctype_support_level */
- TRUE, /* is continuous sb mb codepoint */
- onigenc_single_byte_mbc_to_code,
- onigenc_single_byte_code_to_mbclen,
- onigenc_single_byte_code_to_mbc,
- onigenc_ascii_mbc_to_lower,
- onigenc_ascii_mbc_is_case_ambig,
- iso_8859_6_code_is_ctype,
- onigenc_nothing_get_ctype_code_range,
- onigenc_single_byte_left_adjust_char_head,
- onigenc_single_byte_is_allowed_reverse_match,
- onigenc_nothing_get_all_fold_match_code,
- onigenc_nothing_get_fold_match_info
-};
diff --git a/ext/mbstring/oniguruma/enc/iso8859_7.c b/ext/mbstring/oniguruma/enc/iso8859_7.c
deleted file mode 100644
index 1ea225007f..0000000000
--- a/ext/mbstring/oniguruma/enc/iso8859_7.c
+++ /dev/null
@@ -1,151 +0,0 @@
-/**********************************************************************
-
- iso8859_7.c - Oniguruma (regular expression library)
-
- Copyright (C) 2004 K.Kosako (kosako@sofnec.co.jp)
-
-**********************************************************************/
-#include "regenc.h"
-
-#define ENC_ISO_8859_7_TO_LOWER_CASE(c) EncISO_8859_7_ToLowerCaseTable[c]
-#define ENC_IS_ISO_8859_7_CTYPE(code,ctype) \
- ((EncISO_8859_7_CtypeTable[code] & ctype) != 0)
-
-static UChar EncISO_8859_7_ToLowerCaseTable[256] = {
- '\000', '\001', '\002', '\003', '\004', '\005', '\006', '\007',
- '\010', '\011', '\012', '\013', '\014', '\015', '\016', '\017',
- '\020', '\021', '\022', '\023', '\024', '\025', '\026', '\027',
- '\030', '\031', '\032', '\033', '\034', '\035', '\036', '\037',
- '\040', '\041', '\042', '\043', '\044', '\045', '\046', '\047',
- '\050', '\051', '\052', '\053', '\054', '\055', '\056', '\057',
- '\060', '\061', '\062', '\063', '\064', '\065', '\066', '\067',
- '\070', '\071', '\072', '\073', '\074', '\075', '\076', '\077',
- '\100', '\141', '\142', '\143', '\144', '\145', '\146', '\147',
- '\150', '\151', '\152', '\153', '\154', '\155', '\156', '\157',
- '\160', '\161', '\162', '\163', '\164', '\165', '\166', '\167',
- '\170', '\171', '\172', '\133', '\134', '\135', '\136', '\137',
- '\140', '\141', '\142', '\143', '\144', '\145', '\146', '\147',
- '\150', '\151', '\152', '\153', '\154', '\155', '\156', '\157',
- '\160', '\161', '\162', '\163', '\164', '\165', '\166', '\167',
- '\170', '\171', '\172', '\173', '\174', '\175', '\176', '\177',
- '\200', '\201', '\202', '\203', '\204', '\205', '\206', '\207',
- '\210', '\211', '\212', '\213', '\214', '\215', '\216', '\217',
- '\220', '\221', '\222', '\223', '\224', '\225', '\226', '\227',
- '\230', '\231', '\232', '\233', '\234', '\235', '\236', '\237',
- '\240', '\241', '\242', '\243', '\244', '\245', '\246', '\247',
- '\250', '\251', '\252', '\253', '\254', '\255', '\256', '\257',
- '\260', '\261', '\262', '\263', '\264', '\265', '\334', '\267',
- '\335', '\336', '\337', '\273', '\374', '\275', '\375', '\376',
- '\300', '\341', '\342', '\343', '\344', '\345', '\346', '\347',
- '\350', '\351', '\352', '\353', '\354', '\355', '\356', '\357',
- '\360', '\361', '\322', '\363', '\364', '\365', '\366', '\367',
- '\370', '\371', '\372', '\373', '\334', '\335', '\336', '\337',
- '\340', '\341', '\342', '\343', '\344', '\345', '\346', '\347',
- '\350', '\351', '\352', '\353', '\354', '\355', '\356', '\357',
- '\360', '\361', '\362', '\363', '\364', '\365', '\366', '\367',
- '\370', '\371', '\372', '\373', '\374', '\375', '\376', '\377'
-};
-
-static unsigned short EncISO_8859_7_CtypeTable[256] = {
- 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004,
- 0x1004, 0x1106, 0x1104, 0x1104, 0x1104, 0x1104, 0x1004, 0x1004,
- 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004,
- 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004,
- 0x1142, 0x10d0, 0x10d0, 0x10d0, 0x10d0, 0x10d0, 0x10d0, 0x10d0,
- 0x10d0, 0x10d0, 0x10d0, 0x10d0, 0x10d0, 0x10d0, 0x10d0, 0x10d0,
- 0x1c58, 0x1c58, 0x1c58, 0x1c58, 0x1c58, 0x1c58, 0x1c58, 0x1c58,
- 0x1c58, 0x1c58, 0x10d0, 0x10d0, 0x10d0, 0x10d0, 0x10d0, 0x10d0,
- 0x10d0, 0x1e51, 0x1e51, 0x1e51, 0x1e51, 0x1e51, 0x1e51, 0x1a51,
- 0x1a51, 0x1a51, 0x1a51, 0x1a51, 0x1a51, 0x1a51, 0x1a51, 0x1a51,
- 0x1a51, 0x1a51, 0x1a51, 0x1a51, 0x1a51, 0x1a51, 0x1a51, 0x1a51,
- 0x1a51, 0x1a51, 0x1a51, 0x10d0, 0x10d0, 0x10d0, 0x10d0, 0x18d0,
- 0x10d0, 0x1c71, 0x1c71, 0x1c71, 0x1c71, 0x1c71, 0x1c71, 0x1871,
- 0x1871, 0x1871, 0x1871, 0x1871, 0x1871, 0x1871, 0x1871, 0x1871,
- 0x1871, 0x1871, 0x1871, 0x1871, 0x1871, 0x1871, 0x1871, 0x1871,
- 0x1871, 0x1871, 0x1871, 0x10d0, 0x10d0, 0x10d0, 0x10d0, 0x1004,
- 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004,
- 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004,
- 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004,
- 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004,
- 0x0142, 0x00d0, 0x00d0, 0x0050, 0x0000, 0x0000, 0x0050, 0x0050,
- 0x0050, 0x0050, 0x0000, 0x00d0, 0x0050, 0x00d0, 0x0000, 0x00d0,
- 0x0050, 0x0050, 0x0850, 0x0850, 0x0050, 0x0050, 0x0a51, 0x00d0,
- 0x0a51, 0x0a51, 0x0a51, 0x00d0, 0x0a51, 0x0850, 0x0a51, 0x0a51,
- 0x0871, 0x0a51, 0x0a51, 0x0a51, 0x0a51, 0x0a51, 0x0a51, 0x0a51,
- 0x0a51, 0x0a51, 0x0a51, 0x0a51, 0x0a51, 0x0a51, 0x0a51, 0x0a51,
- 0x0a51, 0x0a51, 0x0000, 0x0a51, 0x0a51, 0x0a51, 0x0a51, 0x0a51,
- 0x0a51, 0x0a51, 0x0a51, 0x0a51, 0x0871, 0x0871, 0x0871, 0x0871,
- 0x0871, 0x0871, 0x0871, 0x0871, 0x0871, 0x0871, 0x0871, 0x0871,
- 0x0871, 0x0871, 0x0871, 0x0871, 0x0871, 0x0871, 0x0871, 0x0871,
- 0x0871, 0x0871, 0x0871, 0x0871, 0x0871, 0x0871, 0x0871, 0x0871,
- 0x0871, 0x0871, 0x0871, 0x0871, 0x0871, 0x0871, 0x0871, 0x0000
-};
-
-static int
-iso_8859_7_mbc_to_lower(UChar* p, UChar* lower)
-{
- *lower = ENC_ISO_8859_7_TO_LOWER_CASE(*p);
- return 1; /* return byte length of converted char to lower */
-}
-
-static int
-iso_8859_7_mbc_is_case_ambig(UChar* p)
-{
- int v = (EncISO_8859_7_CtypeTable[*p] &
- (ONIGENC_CTYPE_UPPER | ONIGENC_CTYPE_LOWER));
-
- if ((v | ONIGENC_CTYPE_LOWER) != 0) {
- if (*p == 0xc0 || *p == 0xe0)
- return FALSE;
- else
- return TRUE;
- }
-
- return (v != 0 ? TRUE : FALSE);
-}
-
-static int
-iso_8859_7_code_is_ctype(OnigCodePoint code, unsigned int ctype)
-{
- if (code < 256)
- return ENC_IS_ISO_8859_7_CTYPE(code, ctype);
- else
- return FALSE;
-}
-
-OnigEncodingType OnigEncodingISO_8859_7 = {
- {
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
- },
- "ISO-8859-7", /* name */
- 1, /* max byte length */
- FALSE, /* is_fold_match */
- ONIGENC_CTYPE_SUPPORT_LEVEL_SB, /* ctype_support_level */
- TRUE, /* is continuous sb mb codepoint */
- onigenc_single_byte_mbc_to_code,
- onigenc_single_byte_code_to_mbclen,
- onigenc_single_byte_code_to_mbc,
- iso_8859_7_mbc_to_lower,
- iso_8859_7_mbc_is_case_ambig,
- iso_8859_7_code_is_ctype,
- onigenc_nothing_get_ctype_code_range,
- onigenc_single_byte_left_adjust_char_head,
- onigenc_single_byte_is_allowed_reverse_match,
- onigenc_nothing_get_all_fold_match_code,
- onigenc_nothing_get_fold_match_info
-};
diff --git a/ext/mbstring/oniguruma/enc/iso8859_8.c b/ext/mbstring/oniguruma/enc/iso8859_8.c
deleted file mode 100644
index d87774a832..0000000000
--- a/ext/mbstring/oniguruma/enc/iso8859_8.c
+++ /dev/null
@@ -1,92 +0,0 @@
-/**********************************************************************
-
- iso8859_8.c - Oniguruma (regular expression library)
-
- Copyright (C) 2004 K.Kosako (kosako@sofnec.co.jp)
-
-**********************************************************************/
-#include "regenc.h"
-
-#define ENC_IS_ISO_8859_8_CTYPE(code,ctype) \
- ((EncISO_8859_8_CtypeTable[code] & ctype) != 0)
-
-static unsigned short EncISO_8859_8_CtypeTable[256] = {
- 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004,
- 0x1004, 0x1106, 0x1104, 0x1104, 0x1104, 0x1104, 0x1004, 0x1004,
- 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004,
- 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004,
- 0x1142, 0x10d0, 0x10d0, 0x10d0, 0x10d0, 0x10d0, 0x10d0, 0x10d0,
- 0x10d0, 0x10d0, 0x10d0, 0x10d0, 0x10d0, 0x10d0, 0x10d0, 0x10d0,
- 0x1c58, 0x1c58, 0x1c58, 0x1c58, 0x1c58, 0x1c58, 0x1c58, 0x1c58,
- 0x1c58, 0x1c58, 0x10d0, 0x10d0, 0x10d0, 0x10d0, 0x10d0, 0x10d0,
- 0x10d0, 0x1e51, 0x1e51, 0x1e51, 0x1e51, 0x1e51, 0x1e51, 0x1a51,
- 0x1a51, 0x1a51, 0x1a51, 0x1a51, 0x1a51, 0x1a51, 0x1a51, 0x1a51,
- 0x1a51, 0x1a51, 0x1a51, 0x1a51, 0x1a51, 0x1a51, 0x1a51, 0x1a51,
- 0x1a51, 0x1a51, 0x1a51, 0x10d0, 0x10d0, 0x10d0, 0x10d0, 0x18d0,
- 0x10d0, 0x1c71, 0x1c71, 0x1c71, 0x1c71, 0x1c71, 0x1c71, 0x1871,
- 0x1871, 0x1871, 0x1871, 0x1871, 0x1871, 0x1871, 0x1871, 0x1871,
- 0x1871, 0x1871, 0x1871, 0x1871, 0x1871, 0x1871, 0x1871, 0x1871,
- 0x1871, 0x1871, 0x1871, 0x10d0, 0x10d0, 0x10d0, 0x10d0, 0x1004,
- 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004,
- 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004,
- 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004,
- 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004,
- 0x0142, 0x0000, 0x0050, 0x0050, 0x0050, 0x0050, 0x0050, 0x0050,
- 0x0050, 0x0050, 0x0050, 0x00d0, 0x0050, 0x00d0, 0x0050, 0x0050,
- 0x0050, 0x0050, 0x0850, 0x0850, 0x0050, 0x0871, 0x0050, 0x00d0,
- 0x0050, 0x0850, 0x0050, 0x00d0, 0x0850, 0x0850, 0x0850, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x00d0,
- 0x0851, 0x0851, 0x0851, 0x0851, 0x0851, 0x0851, 0x0851, 0x0851,
- 0x0851, 0x0851, 0x0851, 0x0851, 0x0851, 0x0851, 0x0851, 0x0851,
- 0x0851, 0x0851, 0x0851, 0x0851, 0x0851, 0x0851, 0x0851, 0x0851,
- 0x0851, 0x0851, 0x0851, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000
-};
-
-static int
-iso_8859_8_code_is_ctype(OnigCodePoint code, unsigned int ctype)
-{
- if (code < 256)
- return ENC_IS_ISO_8859_8_CTYPE(code, ctype);
- else
- return FALSE;
-}
-
-OnigEncodingType OnigEncodingISO_8859_8 = {
- {
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
- },
- "ISO-8859-8", /* name */
- 1, /* max byte length */
- FALSE, /* is_fold_match */
- ONIGENC_CTYPE_SUPPORT_LEVEL_SB, /* ctype_support_level */
- TRUE, /* is continuous sb mb codepoint */
- onigenc_single_byte_mbc_to_code,
- onigenc_single_byte_code_to_mbclen,
- onigenc_single_byte_code_to_mbc,
- onigenc_ascii_mbc_to_lower,
- onigenc_ascii_mbc_is_case_ambig,
- iso_8859_8_code_is_ctype,
- onigenc_nothing_get_ctype_code_range,
- onigenc_single_byte_left_adjust_char_head,
- onigenc_single_byte_is_allowed_reverse_match,
- onigenc_nothing_get_all_fold_match_code,
- onigenc_nothing_get_fold_match_info
-};
diff --git a/ext/mbstring/oniguruma/enc/iso8859_9.c b/ext/mbstring/oniguruma/enc/iso8859_9.c
deleted file mode 100644
index 9638b92994..0000000000
--- a/ext/mbstring/oniguruma/enc/iso8859_9.c
+++ /dev/null
@@ -1,152 +0,0 @@
-/**********************************************************************
-
- iso8859_9.c - Oniguruma (regular expression library)
-
- Copyright (C) 2004 K.Kosako (kosako@sofnec.co.jp)
-
-**********************************************************************/
-#include "regenc.h"
-
-#define ENC_ISO_8859_9_TO_LOWER_CASE(c) EncISO_8859_9_ToLowerCaseTable[c]
-#define ENC_IS_ISO_8859_9_CTYPE(code,ctype) \
- ((EncISO_8859_9_CtypeTable[code] & ctype) != 0)
-
-static UChar EncISO_8859_9_ToLowerCaseTable[256] = {
- '\000', '\001', '\002', '\003', '\004', '\005', '\006', '\007',
- '\010', '\011', '\012', '\013', '\014', '\015', '\016', '\017',
- '\020', '\021', '\022', '\023', '\024', '\025', '\026', '\027',
- '\030', '\031', '\032', '\033', '\034', '\035', '\036', '\037',
- '\040', '\041', '\042', '\043', '\044', '\045', '\046', '\047',
- '\050', '\051', '\052', '\053', '\054', '\055', '\056', '\057',
- '\060', '\061', '\062', '\063', '\064', '\065', '\066', '\067',
- '\070', '\071', '\072', '\073', '\074', '\075', '\076', '\077',
- '\100', '\141', '\142', '\143', '\144', '\145', '\146', '\147',
- '\150', '\151', '\152', '\153', '\154', '\155', '\156', '\157',
- '\160', '\161', '\162', '\163', '\164', '\165', '\166', '\167',
- '\170', '\171', '\172', '\133', '\134', '\135', '\136', '\137',
- '\140', '\141', '\142', '\143', '\144', '\145', '\146', '\147',
- '\150', '\151', '\152', '\153', '\154', '\155', '\156', '\157',
- '\160', '\161', '\162', '\163', '\164', '\165', '\166', '\167',
- '\170', '\171', '\172', '\173', '\174', '\175', '\176', '\177',
- '\200', '\201', '\202', '\203', '\204', '\205', '\206', '\207',
- '\210', '\211', '\212', '\213', '\214', '\215', '\216', '\217',
- '\220', '\221', '\222', '\223', '\224', '\225', '\226', '\227',
- '\230', '\231', '\232', '\233', '\234', '\235', '\236', '\237',
- '\240', '\241', '\242', '\243', '\244', '\245', '\246', '\247',
- '\250', '\251', '\252', '\253', '\254', '\255', '\256', '\257',
- '\260', '\261', '\262', '\263', '\264', '\265', '\266', '\267',
- '\270', '\271', '\272', '\273', '\274', '\275', '\276', '\277',
- '\340', '\341', '\342', '\343', '\344', '\345', '\346', '\347',
- '\350', '\351', '\352', '\353', '\354', '\355', '\356', '\357',
- '\360', '\361', '\362', '\363', '\364', '\365', '\366', '\327',
- '\370', '\371', '\372', '\373', '\374', '\335', '\376', '\337',
- '\340', '\341', '\342', '\343', '\344', '\345', '\346', '\347',
- '\350', '\351', '\352', '\353', '\354', '\355', '\356', '\357',
- '\360', '\361', '\362', '\363', '\364', '\365', '\366', '\367',
- '\370', '\371', '\372', '\373', '\374', '\375', '\376', '\377'
-};
-
-static unsigned short EncISO_8859_9_CtypeTable[256] = {
- 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004,
- 0x1004, 0x1106, 0x1104, 0x1104, 0x1104, 0x1104, 0x1004, 0x1004,
- 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004,
- 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004,
- 0x1142, 0x10d0, 0x10d0, 0x10d0, 0x10d0, 0x10d0, 0x10d0, 0x10d0,
- 0x10d0, 0x10d0, 0x10d0, 0x10d0, 0x10d0, 0x10d0, 0x10d0, 0x10d0,
- 0x1c58, 0x1c58, 0x1c58, 0x1c58, 0x1c58, 0x1c58, 0x1c58, 0x1c58,
- 0x1c58, 0x1c58, 0x10d0, 0x10d0, 0x10d0, 0x10d0, 0x10d0, 0x10d0,
- 0x10d0, 0x1e51, 0x1e51, 0x1e51, 0x1e51, 0x1e51, 0x1e51, 0x1a51,
- 0x1a51, 0x1a51, 0x1a51, 0x1a51, 0x1a51, 0x1a51, 0x1a51, 0x1a51,
- 0x1a51, 0x1a51, 0x1a51, 0x1a51, 0x1a51, 0x1a51, 0x1a51, 0x1a51,
- 0x1a51, 0x1a51, 0x1a51, 0x10d0, 0x10d0, 0x10d0, 0x10d0, 0x18d0,
- 0x10d0, 0x1c71, 0x1c71, 0x1c71, 0x1c71, 0x1c71, 0x1c71, 0x1871,
- 0x1871, 0x1871, 0x1871, 0x1871, 0x1871, 0x1871, 0x1871, 0x1871,
- 0x1871, 0x1871, 0x1871, 0x1871, 0x1871, 0x1871, 0x1871, 0x1871,
- 0x1871, 0x1871, 0x1871, 0x10d0, 0x10d0, 0x10d0, 0x10d0, 0x1004,
- 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004,
- 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004,
- 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004,
- 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004,
- 0x0142, 0x00d0, 0x0050, 0x0050, 0x0050, 0x0050, 0x0050, 0x0050,
- 0x0050, 0x0050, 0x0871, 0x00d0, 0x0050, 0x00d0, 0x0050, 0x0050,
- 0x0050, 0x0050, 0x0850, 0x0850, 0x0050, 0x0871, 0x0050, 0x00d0,
- 0x0050, 0x0850, 0x0871, 0x00d0, 0x0850, 0x0850, 0x0850, 0x00d0,
- 0x0a51, 0x0a51, 0x0a51, 0x0a51, 0x0a51, 0x0a51, 0x0a51, 0x0a51,
- 0x0a51, 0x0a51, 0x0a51, 0x0a51, 0x0a51, 0x0a51, 0x0a51, 0x0a51,
- 0x0a51, 0x0a51, 0x0a51, 0x0a51, 0x0a51, 0x0a51, 0x0a51, 0x0050,
- 0x0a51, 0x0a51, 0x0a51, 0x0a51, 0x0a51, 0x0a51, 0x0a51, 0x0871,
- 0x0871, 0x0871, 0x0871, 0x0871, 0x0871, 0x0871, 0x0871, 0x0871,
- 0x0871, 0x0871, 0x0871, 0x0871, 0x0871, 0x0871, 0x0871, 0x0871,
- 0x0871, 0x0871, 0x0871, 0x0871, 0x0871, 0x0871, 0x0871, 0x0050,
- 0x0871, 0x0871, 0x0871, 0x0871, 0x0871, 0x0871, 0x0871, 0x0871
-};
-
-static int
-iso_8859_9_mbc_to_lower(UChar* p, UChar* lower)
-{
- *lower = ENC_ISO_8859_9_TO_LOWER_CASE(*p);
- return 1; /* return byte length of converted char to lower */
-}
-
-static int
-iso_8859_9_mbc_is_case_ambig(UChar* p)
-{
- int v = (EncISO_8859_9_CtypeTable[*p] &
- (ONIGENC_CTYPE_UPPER | ONIGENC_CTYPE_LOWER));
-
- if ((v | ONIGENC_CTYPE_LOWER) != 0) {
- /* 0xdf, 0xaa, 0xb5, 0xba are lower case letter, but can't convert. */
- if (*p == 0xdf || (*p >= 0xaa && *p <= 0xba))
- return FALSE;
- else
- return TRUE;
- }
-
- return (v != 0 ? TRUE : FALSE);
-}
-
-static int
-iso_8859_9_code_is_ctype(OnigCodePoint code, unsigned int ctype)
-{
- if (code < 256)
- return ENC_IS_ISO_8859_9_CTYPE(code, ctype);
- else
- return FALSE;
-}
-
-OnigEncodingType OnigEncodingISO_8859_9 = {
- {
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
- },
- "ISO-8859-9", /* name */
- 1, /* max byte length */
- TRUE, /* is_fold_match */
- ONIGENC_CTYPE_SUPPORT_LEVEL_SB, /* ctype_support_level */
- TRUE, /* is continuous sb mb codepoint */
- onigenc_single_byte_mbc_to_code,
- onigenc_single_byte_code_to_mbclen,
- onigenc_single_byte_code_to_mbc,
- iso_8859_9_mbc_to_lower,
- iso_8859_9_mbc_is_case_ambig,
- iso_8859_9_code_is_ctype,
- onigenc_nothing_get_ctype_code_range,
- onigenc_single_byte_left_adjust_char_head,
- onigenc_single_byte_is_allowed_reverse_match,
- onigenc_get_all_fold_match_code_ss_0xdf,
- onigenc_get_fold_match_info_ss_0xdf
-};
diff --git a/ext/mbstring/oniguruma/enc/koi8.c b/ext/mbstring/oniguruma/enc/koi8.c
deleted file mode 100644
index 9dba2641c9..0000000000
--- a/ext/mbstring/oniguruma/enc/koi8.c
+++ /dev/null
@@ -1,144 +0,0 @@
-/**********************************************************************
-
- koi8.c - Oniguruma (regular expression library)
-
- Copyright (C) 2004 K.Kosako (kosako@sofnec.co.jp)
-
-**********************************************************************/
-#include "regenc.h"
-
-#define ENC_KOI8_TO_LOWER_CASE(c) EncKOI8_ToLowerCaseTable[c]
-#define ENC_IS_KOI8_CTYPE(code,ctype) \
- ((EncKOI8_CtypeTable[code] & ctype) != 0)
-
-static UChar EncKOI8_ToLowerCaseTable[256] = {
- '\000', '\001', '\002', '\003', '\004', '\005', '\006', '\007',
- '\010', '\011', '\012', '\013', '\014', '\015', '\016', '\017',
- '\020', '\021', '\022', '\023', '\024', '\025', '\026', '\027',
- '\030', '\031', '\032', '\033', '\034', '\035', '\036', '\037',
- '\040', '\041', '\042', '\043', '\044', '\045', '\046', '\047',
- '\050', '\051', '\052', '\053', '\054', '\055', '\056', '\057',
- '\060', '\061', '\062', '\063', '\064', '\065', '\066', '\067',
- '\070', '\071', '\072', '\073', '\074', '\075', '\076', '\077',
- '\100', '\141', '\142', '\143', '\144', '\145', '\146', '\147',
- '\150', '\151', '\152', '\153', '\154', '\155', '\156', '\157',
- '\160', '\161', '\162', '\163', '\164', '\165', '\166', '\167',
- '\170', '\171', '\172', '\133', '\134', '\135', '\136', '\137',
- '\140', '\141', '\142', '\143', '\144', '\145', '\146', '\147',
- '\150', '\151', '\152', '\153', '\154', '\155', '\156', '\157',
- '\160', '\161', '\162', '\163', '\164', '\165', '\166', '\167',
- '\170', '\171', '\172', '\173', '\174', '\175', '\176', '\177',
- '\200', '\201', '\202', '\203', '\204', '\205', '\206', '\207',
- '\210', '\211', '\212', '\213', '\214', '\215', '\216', '\217',
- '\220', '\221', '\222', '\223', '\224', '\225', '\226', '\227',
- '\230', '\231', '\232', '\233', '\234', '\235', '\236', '\237',
- '\240', '\241', '\242', '\243', '\244', '\245', '\246', '\247',
- '\250', '\251', '\252', '\253', '\254', '\255', '\256', '\257',
- '\260', '\261', '\262', '\263', '\264', '\265', '\266', '\267',
- '\270', '\271', '\272', '\273', '\274', '\275', '\276', '\277',
- '\300', '\301', '\302', '\303', '\304', '\305', '\306', '\307',
- '\310', '\311', '\312', '\313', '\314', '\315', '\316', '\317',
- '\320', '\321', '\322', '\323', '\324', '\325', '\326', '\327',
- '\330', '\331', '\332', '\333', '\334', '\335', '\336', '\337',
- '\300', '\301', '\302', '\303', '\304', '\305', '\306', '\307',
- '\310', '\311', '\312', '\313', '\314', '\315', '\316', '\317',
- '\320', '\321', '\322', '\323', '\324', '\325', '\326', '\327',
- '\330', '\331', '\332', '\333', '\334', '\335', '\336', '\337'
-};
-
-static unsigned short EncKOI8_CtypeTable[256] = {
- 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004,
- 0x1004, 0x1106, 0x1104, 0x1104, 0x1104, 0x1104, 0x1004, 0x1004,
- 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004,
- 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004,
- 0x1142, 0x10d0, 0x10d0, 0x10d0, 0x10d0, 0x10d0, 0x10d0, 0x10d0,
- 0x10d0, 0x10d0, 0x10d0, 0x10d0, 0x10d0, 0x10d0, 0x10d0, 0x10d0,
- 0x1c58, 0x1c58, 0x1c58, 0x1c58, 0x1c58, 0x1c58, 0x1c58, 0x1c58,
- 0x1c58, 0x1c58, 0x10d0, 0x10d0, 0x10d0, 0x10d0, 0x10d0, 0x10d0,
- 0x10d0, 0x1e51, 0x1e51, 0x1e51, 0x1e51, 0x1e51, 0x1e51, 0x1a51,
- 0x1a51, 0x1a51, 0x1a51, 0x1a51, 0x1a51, 0x1a51, 0x1a51, 0x1a51,
- 0x1a51, 0x1a51, 0x1a51, 0x1a51, 0x1a51, 0x1a51, 0x1a51, 0x1a51,
- 0x1a51, 0x1a51, 0x1a51, 0x10d0, 0x10d0, 0x10d0, 0x10d0, 0x18d0,
- 0x10d0, 0x1c71, 0x1c71, 0x1c71, 0x1c71, 0x1c71, 0x1c71, 0x1871,
- 0x1871, 0x1871, 0x1871, 0x1871, 0x1871, 0x1871, 0x1871, 0x1871,
- 0x1871, 0x1871, 0x1871, 0x1871, 0x1871, 0x1871, 0x1871, 0x1871,
- 0x1871, 0x1871, 0x1871, 0x10d0, 0x10d0, 0x10d0, 0x10d0, 0x1004,
- 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004,
- 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004,
- 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004,
- 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004,
- 0x0142, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0871, 0x0871, 0x0871, 0x0871, 0x0871, 0x0871, 0x0871, 0x0871,
- 0x0871, 0x0871, 0x0871, 0x0871, 0x0871, 0x0871, 0x0871, 0x0871,
- 0x0871, 0x0871, 0x0871, 0x0871, 0x0871, 0x0871, 0x0871, 0x0871,
- 0x0871, 0x0871, 0x0871, 0x0871, 0x0871, 0x0871, 0x0871, 0x0871,
- 0x0a51, 0x0a51, 0x0a51, 0x0a51, 0x0a51, 0x0a51, 0x0a51, 0x0a51,
- 0x0a51, 0x0a51, 0x0a51, 0x0a51, 0x0a51, 0x0a51, 0x0a51, 0x0a51,
- 0x0a51, 0x0a51, 0x0a51, 0x0a51, 0x0a51, 0x0a51, 0x0a51, 0x0a51,
- 0x0a51, 0x0a51, 0x0a51, 0x0a51, 0x0a51, 0x0a51, 0x0a51, 0x0a51
-};
-
-static int
-koi8_mbc_to_lower(UChar* p, UChar* lower)
-{
- *lower = ENC_KOI8_TO_LOWER_CASE(*p);
- return 1; /* return byte length of converted char to lower */
-}
-
-static int
-koi8_mbc_is_case_ambig(UChar* p)
-{
- int v = (EncKOI8_CtypeTable[*p] &
- (ONIGENC_CTYPE_UPPER | ONIGENC_CTYPE_LOWER));
-
- return ((v != 0) ? TRUE : FALSE);
-}
-
-static int
-koi8_code_is_ctype(OnigCodePoint code, unsigned int ctype)
-{
- if (code < 256)
- return ENC_IS_KOI8_CTYPE(code, ctype);
- else
- return FALSE;
-}
-
-OnigEncodingType OnigEncodingKOI8 = {
- {
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
- },
- "KOI8", /* name */
- 1, /* max byte length */
- FALSE, /* is_fold_match */
- ONIGENC_CTYPE_SUPPORT_LEVEL_SB, /* ctype_support_level */
- TRUE, /* is continuous sb mb codepoint */
- onigenc_single_byte_mbc_to_code,
- onigenc_single_byte_code_to_mbclen,
- onigenc_single_byte_code_to_mbc,
- koi8_mbc_to_lower,
- koi8_mbc_is_case_ambig,
- koi8_code_is_ctype,
- onigenc_nothing_get_ctype_code_range,
- onigenc_single_byte_left_adjust_char_head,
- onigenc_single_byte_is_allowed_reverse_match,
- onigenc_nothing_get_all_fold_match_code,
- onigenc_nothing_get_fold_match_info
-};
diff --git a/ext/mbstring/oniguruma/enc/koi8_r.c b/ext/mbstring/oniguruma/enc/koi8_r.c
deleted file mode 100644
index 20e7d73a12..0000000000
--- a/ext/mbstring/oniguruma/enc/koi8_r.c
+++ /dev/null
@@ -1,144 +0,0 @@
-/**********************************************************************
-
- koi8_r.c - Oniguruma (regular expression library)
-
- Copyright (C) 2004 K.Kosako (kosako@sofnec.co.jp)
-
-**********************************************************************/
-#include "regenc.h"
-
-#define ENC_KOI8_R_TO_LOWER_CASE(c) EncKOI8_R_ToLowerCaseTable[c]
-#define ENC_IS_KOI8_R_CTYPE(code,ctype) \
- ((EncKOI8_R_CtypeTable[code] & ctype) != 0)
-
-static UChar EncKOI8_R_ToLowerCaseTable[256] = {
- '\000', '\001', '\002', '\003', '\004', '\005', '\006', '\007',
- '\010', '\011', '\012', '\013', '\014', '\015', '\016', '\017',
- '\020', '\021', '\022', '\023', '\024', '\025', '\026', '\027',
- '\030', '\031', '\032', '\033', '\034', '\035', '\036', '\037',
- '\040', '\041', '\042', '\043', '\044', '\045', '\046', '\047',
- '\050', '\051', '\052', '\053', '\054', '\055', '\056', '\057',
- '\060', '\061', '\062', '\063', '\064', '\065', '\066', '\067',
- '\070', '\071', '\072', '\073', '\074', '\075', '\076', '\077',
- '\100', '\141', '\142', '\143', '\144', '\145', '\146', '\147',
- '\150', '\151', '\152', '\153', '\154', '\155', '\156', '\157',
- '\160', '\161', '\162', '\163', '\164', '\165', '\166', '\167',
- '\170', '\171', '\172', '\133', '\134', '\135', '\136', '\137',
- '\140', '\141', '\142', '\143', '\144', '\145', '\146', '\147',
- '\150', '\151', '\152', '\153', '\154', '\155', '\156', '\157',
- '\160', '\161', '\162', '\163', '\164', '\165', '\166', '\167',
- '\170', '\171', '\172', '\173', '\174', '\175', '\176', '\177',
- '\200', '\201', '\202', '\203', '\204', '\205', '\206', '\207',
- '\210', '\211', '\212', '\213', '\214', '\215', '\216', '\217',
- '\220', '\221', '\222', '\223', '\224', '\225', '\226', '\227',
- '\230', '\231', '\232', '\233', '\234', '\235', '\236', '\237',
- '\240', '\241', '\242', '\243', '\244', '\245', '\246', '\247',
- '\250', '\251', '\252', '\253', '\254', '\255', '\256', '\257',
- '\260', '\261', '\262', '\243', '\264', '\265', '\266', '\267',
- '\270', '\271', '\272', '\273', '\274', '\275', '\276', '\277',
- '\300', '\301', '\302', '\303', '\304', '\305', '\306', '\307',
- '\310', '\311', '\312', '\313', '\314', '\315', '\316', '\317',
- '\320', '\321', '\322', '\323', '\324', '\325', '\326', '\327',
- '\330', '\331', '\332', '\333', '\334', '\335', '\336', '\337',
- '\300', '\301', '\302', '\303', '\304', '\305', '\306', '\307',
- '\310', '\311', '\312', '\313', '\314', '\315', '\316', '\317',
- '\320', '\321', '\322', '\323', '\324', '\325', '\326', '\327',
- '\330', '\331', '\332', '\333', '\334', '\335', '\336', '\337'
-};
-
-static unsigned short EncKOI8_R_CtypeTable[256] = {
- 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004,
- 0x1004, 0x1106, 0x1104, 0x1104, 0x1104, 0x1104, 0x1004, 0x1004,
- 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004,
- 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004,
- 0x1142, 0x10d0, 0x10d0, 0x10d0, 0x10d0, 0x10d0, 0x10d0, 0x10d0,
- 0x10d0, 0x10d0, 0x10d0, 0x10d0, 0x10d0, 0x10d0, 0x10d0, 0x10d0,
- 0x1c58, 0x1c58, 0x1c58, 0x1c58, 0x1c58, 0x1c58, 0x1c58, 0x1c58,
- 0x1c58, 0x1c58, 0x10d0, 0x10d0, 0x10d0, 0x10d0, 0x10d0, 0x10d0,
- 0x10d0, 0x1e51, 0x1e51, 0x1e51, 0x1e51, 0x1e51, 0x1e51, 0x1a51,
- 0x1a51, 0x1a51, 0x1a51, 0x1a51, 0x1a51, 0x1a51, 0x1a51, 0x1a51,
- 0x1a51, 0x1a51, 0x1a51, 0x1a51, 0x1a51, 0x1a51, 0x1a51, 0x1a51,
- 0x1a51, 0x1a51, 0x1a51, 0x10d0, 0x10d0, 0x10d0, 0x10d0, 0x18d0,
- 0x10d0, 0x1c71, 0x1c71, 0x1c71, 0x1c71, 0x1c71, 0x1c71, 0x1871,
- 0x1871, 0x1871, 0x1871, 0x1871, 0x1871, 0x1871, 0x1871, 0x1871,
- 0x1871, 0x1871, 0x1871, 0x1871, 0x1871, 0x1871, 0x1871, 0x1871,
- 0x1871, 0x1871, 0x1871, 0x10d0, 0x10d0, 0x10d0, 0x10d0, 0x1004,
- 0x0050, 0x0050, 0x0050, 0x0050, 0x0050, 0x0050, 0x0050, 0x0050,
- 0x0050, 0x0050, 0x0050, 0x0050, 0x0050, 0x0050, 0x0050, 0x0050,
- 0x0050, 0x0050, 0x0050, 0x0050, 0x0050, 0x0050, 0x0050, 0x0050,
- 0x0050, 0x0050, 0x0142, 0x0050, 0x0050, 0x0850, 0x00d0, 0x0050,
- 0x0050, 0x0050, 0x0050, 0x0871, 0x0050, 0x0050, 0x0050, 0x0050,
- 0x0050, 0x0050, 0x0050, 0x0050, 0x0050, 0x0050, 0x0050, 0x0050,
- 0x0050, 0x0050, 0x0050, 0x0a51, 0x0050, 0x0050, 0x0050, 0x0050,
- 0x0050, 0x0050, 0x0050, 0x0050, 0x0050, 0x0050, 0x0050, 0x0050,
- 0x0871, 0x0871, 0x0871, 0x0871, 0x0871, 0x0871, 0x0871, 0x0871,
- 0x0871, 0x0871, 0x0871, 0x0871, 0x0871, 0x0871, 0x0871, 0x0871,
- 0x0871, 0x0871, 0x0871, 0x0871, 0x0871, 0x0871, 0x0871, 0x0871,
- 0x0871, 0x0871, 0x0871, 0x0871, 0x0871, 0x0871, 0x0871, 0x0871,
- 0x0a51, 0x0a51, 0x0a51, 0x0a51, 0x0a51, 0x0a51, 0x0a51, 0x0a51,
- 0x0a51, 0x0a51, 0x0a51, 0x0a51, 0x0a51, 0x0a51, 0x0a51, 0x0a51,
- 0x0a51, 0x0a51, 0x0a51, 0x0a51, 0x0a51, 0x0a51, 0x0a51, 0x0a51,
- 0x0a51, 0x0a51, 0x0a51, 0x0a51, 0x0a51, 0x0a51, 0x0a51, 0x0a51
-};
-
-static int
-koi8_r_mbc_to_lower(UChar* p, UChar* lower)
-{
- *lower = ENC_KOI8_R_TO_LOWER_CASE(*p);
- return 1; /* return byte length of converted char to lower */
-}
-
-static int
-koi8_r_mbc_is_case_ambig(UChar* p)
-{
- int v = (EncKOI8_R_CtypeTable[*p] &
- (ONIGENC_CTYPE_UPPER | ONIGENC_CTYPE_LOWER));
-
- return ((v != 0) ? TRUE : FALSE);
-}
-
-static int
-koi8_r_code_is_ctype(OnigCodePoint code, unsigned int ctype)
-{
- if (code < 256)
- return ENC_IS_KOI8_R_CTYPE(code, ctype);
- else
- return FALSE;
-}
-
-OnigEncodingType OnigEncodingKOI8_R = {
- {
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
- },
- "KOI8-R", /* name */
- 1, /* max byte length */
- FALSE, /* is_fold_match */
- ONIGENC_CTYPE_SUPPORT_LEVEL_SB, /* ctype_support_level */
- TRUE, /* is continuous sb mb codepoint */
- onigenc_single_byte_mbc_to_code,
- onigenc_single_byte_code_to_mbclen,
- onigenc_single_byte_code_to_mbc,
- koi8_r_mbc_to_lower,
- koi8_r_mbc_is_case_ambig,
- koi8_r_code_is_ctype,
- onigenc_nothing_get_ctype_code_range,
- onigenc_single_byte_left_adjust_char_head,
- onigenc_single_byte_is_allowed_reverse_match,
- onigenc_nothing_get_all_fold_match_code,
- onigenc_nothing_get_fold_match_info
-};
diff --git a/ext/mbstring/oniguruma/enc/mktable.c b/ext/mbstring/oniguruma/enc/mktable.c
deleted file mode 100644
index 67e9a61313..0000000000
--- a/ext/mbstring/oniguruma/enc/mktable.c
+++ /dev/null
@@ -1,1069 +0,0 @@
-/**********************************************************************
-
- mktable.c
-
- Copyright (C) 2004 K.Kosako (kosako@sofnec.co.jp)
-
-**********************************************************************/
-#include <stdio.h>
-
-#define NOT_RUBY
-#include "regenc.h"
-
-#define ISO_8859_1 0
-#define ISO_8859_2 1
-#define ISO_8859_3 2
-#define ISO_8859_4 3
-#define ISO_8859_5 4
-#define ISO_8859_6 5
-#define ISO_8859_7 6
-#define ISO_8859_8 7
-#define ISO_8859_9 8
-#define ISO_8859_10 9
-#define ISO_8859_11 10
-#define ISO_8859_13 11
-#define ISO_8859_14 12
-#define ISO_8859_15 13
-#define ISO_8859_16 14
-#define KOI8 15
-#define KOI8_R 16
-
-typedef struct {
- int num;
- char* name;
-} ENC_INFO;
-
-static ENC_INFO Info[] = {
- { ISO_8859_1, "ISO_8859_1" },
- { ISO_8859_2, "ISO_8859_2" },
- { ISO_8859_3, "ISO_8859_3" },
- { ISO_8859_4, "ISO_8859_4" },
- { ISO_8859_5, "ISO_8859_5" },
- { ISO_8859_6, "ISO_8859_6" },
- { ISO_8859_7, "ISO_8859_7" },
- { ISO_8859_8, "ISO_8859_8" },
- { ISO_8859_9, "ISO_8859_9" },
- { ISO_8859_10, "ISO_8859_10" },
- { ISO_8859_11, "ISO_8859_11" },
- { ISO_8859_13, "ISO_8859_13" },
- { ISO_8859_14, "ISO_8859_14" },
- { ISO_8859_15, "ISO_8859_15" },
- { ISO_8859_16, "ISO_8859_16" },
- { KOI8, "KOI8" },
- { KOI8_R, "KOI8_R" }
-};
-
-
-static int IsAlpha(int enc, int c)
-{
- if (c >= 0x41 && c <= 0x5a) return 1;
- if (c >= 0x61 && c <= 0x7a) return 1;
-
- switch (enc) {
- case ISO_8859_1:
- case ISO_8859_9:
- if (c == 0xaa) return 1;
- if (c == 0xb5) return 1;
- if (c == 0xba) return 1;
- if (c >= 0xc0 && c <= 0xd6) return 1;
- if (c >= 0xd8 && c <= 0xf6) return 1;
- if (c >= 0xf8 && c <= 0xff) return 1;
- break;
-
- case ISO_8859_2:
- if (c == 0xa1 || c == 0xa3) return 1;
- if (c == 0xa5 || c == 0xa6) return 1;
- if (c >= 0xa9 && c <= 0xac) return 1;
- if (c >= 0xae && c <= 0xaf) return 1;
- if (c == 0xb1 || c == 0xb3) return 1;
- if (c == 0xb5 || c == 0xb6) return 1;
- if (c >= 0xb9 && c <= 0xbc) return 1;
- if (c >= 0xbe && c <= 0xbf) return 1;
- if (c >= 0xc0 && c <= 0xd6) return 1;
- if (c >= 0xd8 && c <= 0xf6) return 1;
- if (c >= 0xf8 && c <= 0xfe) return 1;
- break;
-
- case ISO_8859_3:
- if (c == 0xa1) return 1;
- if (c == 0xa6) return 1;
- if (c >= 0xa9 && c <= 0xac) return 1;
- if (c == 0xaf) return 1;
- if (c == 0xb1) return 1;
- if (c == 0xb5 || c == 0xb6) return 1;
- if (c >= 0xb9 && c <= 0xbc) return 1;
- if (c == 0xbf) return 1;
- if (c >= 0xc0 && c <= 0xc2) return 1;
- if (c >= 0xc4 && c <= 0xcf) return 1;
- if (c >= 0xd1 && c <= 0xd6) return 1;
- if (c >= 0xd8 && c <= 0xe2) return 1;
- if (c >= 0xe4 && c <= 0xef) return 1;
- if (c >= 0xf1 && c <= 0xf6) return 1;
- if (c >= 0xf8 && c <= 0xfe) return 1;
- break;
-
- case ISO_8859_4:
- if (c >= 0xa1 && c <= 0xa3) return 1;
- if (c == 0xa5 || c == 0xa6) return 1;
- if (c >= 0xa9 && c <= 0xac) return 1;
- if (c == 0xae) return 1;
- if (c == 0xb1 || c == 0xb3) return 1;
- if (c == 0xb5 || c == 0xb6) return 1;
- if (c >= 0xb9 && c <= 0xbf) return 1;
- if (c >= 0xc0 && c <= 0xd6) return 1;
- if (c >= 0xd8 && c <= 0xf6) return 1;
- if (c >= 0xf8 && c <= 0xfe) return 1;
- break;
-
- case ISO_8859_5:
- if (c >= 0xa1 && c <= 0xcf && c != 0xad) return 1;
- if (c >= 0xd0 && c <= 0xff && c != 0xf0 && c != 0xfd) return 1;
- break;
-
- case ISO_8859_6:
- if (c >= 0xc1 && c <= 0xda) return 1;
- if (c >= 0xe0 && c <= 0xf2) return 1;
- break;
-
- case ISO_8859_7:
- if (c == 0xb6) return 1;
- if (c >= 0xb8 && c <= 0xba) return 1;
- if (c == 0xbc) return 1;
- if (c >= 0xbe && c <= 0xbf) return 1;
- if (c == 0xc0) return 1;
- if (c >= 0xc1 && c <= 0xdb && c != 0xd2) return 1;
- if (c >= 0xdc && c <= 0xfe) return 1;
- break;
-
- case ISO_8859_8:
- if (c == 0xb5) return 1;
- if (c >= 0xe0 && c <= 0xfa) return 1;
- break;
-
- case ISO_8859_10:
- if (c >= 0xa1 && c <= 0xa6) return 1;
- if (c >= 0xa8 && c <= 0xac) return 1;
- if (c == 0xae || c == 0xaf) return 1;
- if (c >= 0xb1 && c <= 0xb6) return 1;
- if (c >= 0xb8 && c <= 0xbc) return 1;
- if (c >= 0xbe && c <= 0xff) return 1;
- break;
-
- case ISO_8859_11:
- if (c >= 0xa1 && c <= 0xda) return 1;
- if (c >= 0xdf && c <= 0xfb) return 1;
- break;
-
- case ISO_8859_13:
- if (c == 0xa8) return 1;
- if (c == 0xaa) return 1;
- if (c == 0xaf) return 1;
- if (c == 0xb5) return 1;
- if (c == 0xb8) return 1;
- if (c == 0xba) return 1;
- if (c >= 0xbf && c <= 0xd6) return 1;
- if (c >= 0xd8 && c <= 0xf6) return 1;
- if (c >= 0xf8 && c <= 0xfe) return 1;
- break;
-
- case ISO_8859_14:
- if (c == 0xa1 || c == 0xa2) return 1;
- if (c == 0xa4 || c == 0xa5) return 1;
- if (c == 0xa6 || c == 0xa8) return 1;
- if (c >= 0xaa && c <= 0xac) return 1;
- if (c >= 0xaf && c <= 0xb5) return 1;
- if (c >= 0xb7 && c <= 0xff) return 1;
- break;
-
- case ISO_8859_15:
- if (c == 0xaa) return 1;
- if (c == 0xb5) return 1;
- if (c == 0xba) return 1;
- if (c >= 0xc0 && c <= 0xd6) return 1;
- if (c >= 0xd8 && c <= 0xf6) return 1;
- if (c >= 0xf8 && c <= 0xff) return 1;
- if (c == 0xa6) return 1;
- if (c == 0xa8) return 1;
- if (c == 0xb4) return 1;
- if (c == 0xb8) return 1;
- if (c == 0xbc) return 1;
- if (c == 0xbd) return 1;
- if (c == 0xbe) return 1;
- break;
-
- case ISO_8859_16:
- if (c == 0xa1) return 1;
- if (c == 0xa2) return 1;
- if (c == 0xa3) return 1;
- if (c == 0xa6) return 1;
- if (c == 0xa8) return 1;
- if (c == 0xaa) return 1;
- if (c == 0xac) return 1;
- if (c == 0xae) return 1;
- if (c == 0xaf) return 1;
- if (c == 0xb2) return 1;
- if (c == 0xb3) return 1;
- if (c == 0xb4) return 1;
- if (c >= 0xb8 && c <= 0xba) return 1;
- if (c == 0xbc) return 1;
- if (c == 0xbd) return 1;
- if (c == 0xbe) return 1;
- if (c == 0xbf) return 1;
- if (c >= 0xc0 && c <= 0xde) return 1;
- if (c >= 0xdf && c <= 0xff) return 1;
- break;
-
- case KOI8_R:
- if (c == 0xa3 || c == 0xb3) return 1;
- /* fall */
- case KOI8:
- if (c >= 0xc0 && c <= 0xff) return 1;
- break;
-
- default:
- exit(-1);
- }
-
- return 0;
-}
-
-static int IsBlank(int enc, int c)
-{
- if (c == 0x09 || c == 0x20) return 1;
-
- switch (enc) {
- case ISO_8859_1:
- case ISO_8859_2:
- case ISO_8859_3:
- case ISO_8859_4:
- case ISO_8859_5:
- case ISO_8859_6:
- case ISO_8859_7:
- case ISO_8859_8:
- case ISO_8859_9:
- case ISO_8859_10:
- case ISO_8859_11:
- case ISO_8859_13:
- case ISO_8859_14:
- case ISO_8859_15:
- case ISO_8859_16:
- case KOI8:
- if (c == 0xa0) return 1;
- break;
-
- case KOI8_R:
- if (c == 0x9a) return 1;
- break;
-
- default:
- exit(-1);
- }
-
- return 0;
-}
-
-static int IsCntrl(int enc, int c)
-{
- if (c >= 0x00 && c <= 0x1F) return 1;
-
- switch (enc) {
- case ISO_8859_1:
- case ISO_8859_2:
- case ISO_8859_3:
- case ISO_8859_4:
- case ISO_8859_5:
- case ISO_8859_6:
- case ISO_8859_7:
- case ISO_8859_8:
- case ISO_8859_9:
- case ISO_8859_10:
- case ISO_8859_11:
- case ISO_8859_13:
- case ISO_8859_14:
- case ISO_8859_15:
- case ISO_8859_16:
- case KOI8:
- if (c >= 0x7f && c <= 0x9F) return 1;
- break;
-
- case KOI8_R:
- if (c == 0x7f) return 1;
- break;
-
- default:
- exit(-1);
- }
-
- return 0;
-}
-
-static int IsDigit(int enc, int c)
-{
- if (c >= 0x30 && c <= 0x39) return 1;
- return 0;
-}
-
-static int IsGraph(int enc, int c)
-{
- if (c >= 0x21 && c <= 0x7e) return 1;
-
- switch (enc) {
- case ISO_8859_1:
- case ISO_8859_2:
- case ISO_8859_4:
- case ISO_8859_5:
- case ISO_8859_9:
- case ISO_8859_10:
- case ISO_8859_13:
- case ISO_8859_14:
- case ISO_8859_15:
- case ISO_8859_16:
- if (c >= 0xa1 && c <= 0xff) return 1;
- break;
-
- case ISO_8859_3:
- if (c >= 0xa1) {
- if (c == 0xa5 || c == 0xae || c == 0xbe || c == 0xc3 || c == 0xd0 ||
- c == 0xe3 || c == 0xf0)
- return 0;
- else
- return 1;
- }
- break;
-
- case ISO_8859_6:
- if (c == 0xa4 || c == 0xac || c == 0xad || c == 0xbb || c == 0xbf)
- return 1;
- if (c >= 0xc1 && c <= 0xda) return 1;
- if (c >= 0xe0 && c <= 0xf2) return 1;
- break;
-
- case ISO_8859_7:
- if (c >= 0xa1 && c <= 0xfe &&
- c != 0xa4 && c != 0xa5 && c != 0xaa &&
- c != 0xae && c != 0xd2) return 1;
- break;
-
- case ISO_8859_8:
- if (c >= 0xa2 && c <= 0xfa) {
- if (c >= 0xbf && c <= 0xde) return 0;
- return 1;
- }
- break;
-
- case ISO_8859_11:
- if (c >= 0xa1 && c <= 0xda) return 1;
- if (c >= 0xdf && c <= 0xfb) return 1;
- break;
-
- case KOI8:
- if (c >= 0xc0 && c <= 0xff) return 1;
- break;
-
- case KOI8_R:
- if (c >= 0x80 && c <= 0xff && c != 0x9a) return 1;
- break;
-
- default:
- exit(-1);
- }
-
- return 0;
-}
-
-static int IsLower(int enc, int c)
-{
- if (c >= 0x61 && c <= 0x7a) return 1;
-
- switch (enc) {
- case ISO_8859_1:
- case ISO_8859_9:
- if (c == 0xaa) return 1;
- if (c == 0xb5) return 1;
- if (c == 0xba) return 1;
- if (c >= 0xdf && c <= 0xf6) return 1;
- if (c >= 0xf8 && c <= 0xff) return 1;
- break;
-
- case ISO_8859_2:
- if (c == 0xb1 || c == 0xb3) return 1;
- if (c == 0xb5 || c == 0xb6) return 1;
- if (c >= 0xb9 && c <= 0xbc) return 1;
- if (c >= 0xbe && c <= 0xbf) return 1;
- if (c >= 0xdf && c <= 0xf6) return 1;
- if (c >= 0xf8 && c <= 0xfe) return 1;
- break;
-
- case ISO_8859_3:
- if (c == 0xb1) return 1;
- if (c == 0xb5 || c == 0xb6) return 1;
- if (c >= 0xb9 && c <= 0xbc) return 1;
- if (c == 0xbf) return 1;
- if (c == 0xdf) return 1;
- if (c >= 0xe0 && c <= 0xe2) return 1;
- if (c >= 0xe4 && c <= 0xef) return 1;
- if (c >= 0xf1 && c <= 0xf6) return 1;
- if (c >= 0xf8 && c <= 0xfe) return 1;
- break;
-
- case ISO_8859_4:
- if (c == 0xa2) return 1;
- if (c == 0xb1 || c == 0xb3) return 1;
- if (c == 0xb5 || c == 0xb6) return 1;
- if (c >= 0xb9 && c <= 0xbc) return 1;
- if (c >= 0xbe && c <= 0xbf) return 1;
- if (c == 0xdf) return 1;
- if (c >= 0xe0 && c <= 0xf6) return 1;
- if (c >= 0xf8 && c <= 0xfe) return 1;
- break;
-
- case ISO_8859_5:
- if (c >= 0xd0 && c <= 0xff && c != 0xf0 && c != 0xfd) return 1;
- break;
-
- case ISO_8859_6:
- break;
-
- case ISO_8859_7:
- if (c == 0xc0) return 1;
- if (c >= 0xdc && c <= 0xfe) return 1;
- break;
-
- case ISO_8859_8:
- if (c == 0xb5) return 1;
- break;
-
- case ISO_8859_10:
- if (c >= 0xb1 && c <= 0xb6) return 1;
- if (c >= 0xb8 && c <= 0xbc) return 1;
- if (c == 0xbe || c == 0xbf) return 1;
- if (c >= 0xdf && c <= 0xff) return 1;
- break;
-
- case ISO_8859_11:
- break;
-
- case ISO_8859_13:
- if (c == 0xb5) return 1;
- if (c == 0xb8) return 1;
- if (c == 0xba) return 1;
- if (c == 0xbf) return 1;
- if (c >= 0xdf && c <= 0xf6) return 1;
- if (c >= 0xf8 && c <= 0xfe) return 1;
- break;
-
- case ISO_8859_14:
- if (c == 0xa2) return 1;
- if (c == 0xa5) return 1;
- if (c == 0xab) return 1;
- if (c == 0xb1 || c == 0xb3 || c == 0xb5) return 1;
- if (c >= 0xb8 && c <= 0xba) return 1;
- if (c == 0xbc) return 1;
- if (c == 0xbe || c == 0xbf) return 1;
- if (c >= 0xdf && c <= 0xff) return 1;
- break;
-
- case ISO_8859_15:
- if (c == 0xaa) return 1;
- if (c == 0xb5) return 1;
- if (c == 0xba) return 1;
- if (c >= 0xdf && c <= 0xf6) return 1;
- if (c >= 0xf8 && c <= 0xff) return 1;
- if (c == 0xa8) return 1;
- if (c == 0xb8) return 1;
- if (c == 0xbd) return 1;
- break;
-
- case ISO_8859_16:
- if (c == 0xa2) return 1;
- if (c == 0xa8) return 1;
- if (c == 0xae) return 1;
- if (c == 0xb3) return 1;
- if (c >= 0xb8 && c <= 0xba) return 1;
- if (c == 0xbd) return 1;
- if (c == 0xbf) return 1;
- if (c >= 0xdf && c <= 0xff) return 1;
- break;
-
- case KOI8_R:
- if (c == 0xa3) return 1;
- /* fall */
- case KOI8:
- if (c >= 0xc0 && c <= 0xdf) return 1;
- break;
-
- default:
- exit(-1);
- }
-
- return 0;
-}
-
-static int IsPrint(int enc, int c)
-{
- if (c >= 0x20 && c <= 0x7e) return 1;
-
- switch (enc) {
- case ISO_8859_1:
- case ISO_8859_2:
- case ISO_8859_4:
- case ISO_8859_5:
- case ISO_8859_9:
- case ISO_8859_10:
- case ISO_8859_13:
- case ISO_8859_14:
- case ISO_8859_15:
- case ISO_8859_16:
- if (c >= 0xa0 && c <= 0xff) return 1;
- break;
-
- case ISO_8859_3:
- if (c >= 0xa0) {
- if (c == 0xa5 || c == 0xae || c == 0xbe || c == 0xc3 || c == 0xd0 ||
- c == 0xe3 || c == 0xf0)
- return 0;
- else
- return 1;
- }
- break;
-
- case ISO_8859_6:
- if (c == 0xa0) return 1;
- if (c == 0xa4 || c == 0xac || c == 0xad || c == 0xbb || c == 0xbf)
- return 1;
- if (c >= 0xc1 && c <= 0xda) return 1;
- if (c >= 0xe0 && c <= 0xf2) return 1;
- break;
-
- case ISO_8859_7:
- if (c >= 0xa0 && c <= 0xfe &&
- c != 0xa4 && c != 0xa5 && c != 0xaa &&
- c != 0xae && c != 0xd2) return 1;
- break;
-
- case ISO_8859_8:
- if (c >= 0xa0 && c <= 0xfa) {
- if (c >= 0xbf && c <= 0xde) return 0;
- if (c == 0xa1) return 0;
- return 1;
- }
- break;
-
- case ISO_8859_11:
- if (c >= 0xa0 && c <= 0xda) return 1;
- if (c >= 0xdf && c <= 0xfb) return 1;
- break;
-
- case KOI8:
- if (c == 0xa0) return 1;
- if (c >= 0xc0 && c <= 0xff) return 1;
- break;
-
- case KOI8_R:
- if (c >= 0x80 && c <= 0xff) return 1;
- break;
-
- default:
- exit(-1);
- }
-
- return 0;
-}
-
-static int IsPunct(int enc, int c)
-{
-#ifndef BY_UNICODE_PROPERTY
- if (c == 0x24 || c == 0x2b || c == 0x5e || c == 0x60 ||
- c == 0x7c || c == 0x7e) return 1;
- if (c >= 0x3c && c <= 0x3e) return 1;
-#endif
-
- if (c >= 0x21 && c <= 0x23) return 1;
- if (c >= 0x25 && c <= 0x2a) return 1;
- if (c >= 0x2c && c <= 0x2f) return 1;
- if (c >= 0x3a && c <= 0x3b) return 1;
- if (c >= 0x3f && c <= 0x40) return 1;
- if (c >= 0x5b && c <= 0x5d) return 1;
- if (c == 0x5f) return 1;
- if (c == 0x7b) return 1;
- if (c == 0x7d) return 1;
-
- switch (enc) {
- case ISO_8859_1:
- case ISO_8859_9:
- case ISO_8859_15:
- if (c == 0xa1) return 1;
- if (c == 0xab) return 1;
- if (c == 0xad) return 1;
- if (c == 0xb7) return 1;
- if (c == 0xbb) return 1;
- if (c == 0xbf) return 1;
- break;
-
- case ISO_8859_2:
- case ISO_8859_4:
- case ISO_8859_5:
- case ISO_8859_14:
- if (c == 0xad) return 1;
- break;
-
- case ISO_8859_3:
- case ISO_8859_10:
- if (c == 0xad) return 1;
- if (c == 0xb7) return 1;
- if (c == 0xbd) return 1;
- break;
-
- case ISO_8859_6:
- if (c == 0xac) return 1;
- if (c == 0xad) return 1;
- if (c == 0xbb) return 1;
- if (c == 0xbf) return 1;
- break;
-
- case ISO_8859_7:
- if (c == 0xa1 || c == 0xa2) return 1;
- if (c == 0xab) return 1;
- if (c == 0xaf) return 1;
- if (c == 0xad) return 1;
- if (c == 0xb7 || c == 0xbb) return 1;
- break;
-
- case ISO_8859_8:
- if (c == 0xab) return 1;
- if (c == 0xad) return 1;
- if (c == 0xb7) return 1;
- if (c == 0xbb) return 1;
- if (c == 0xdf) return 1;
- break;
-
- case ISO_8859_13:
- if (c == 0xa1 || c == 0xa5) return 1;
- if (c == 0xab || c == 0xad) return 1;
- if (c == 0xb4 || c == 0xb7) return 1;
- if (c == 0xbb) return 1;
- if (c == 0xff) return 1;
- break;
-
- case ISO_8859_16:
- if (c == 0xa5) return 1;
- if (c == 0xab) return 1;
- if (c == 0xad) return 1;
- if (c == 0xb5) return 1;
- if (c == 0xb7) return 1;
- if (c == 0xbb) return 1;
- break;
-
- case KOI8_R:
- if (c == 0x9e) return 1;
- break;
-
- case ISO_8859_11:
- case KOI8:
- break;
-
- default:
- exit(-1);
- }
-
- return 0;
-}
-
-static int IsSpace(int enc, int c)
-{
- if (c >= 0x09 && c <= 0x0d) return 1;
- if (c == 0x20) return 1;
-
- switch (enc) {
- case ISO_8859_1:
- case ISO_8859_2:
- case ISO_8859_3:
- case ISO_8859_4:
- case ISO_8859_5:
- case ISO_8859_6:
- case ISO_8859_7:
- case ISO_8859_8:
- case ISO_8859_9:
- case ISO_8859_10:
- case ISO_8859_11:
- case ISO_8859_13:
- case ISO_8859_14:
- case ISO_8859_15:
- case ISO_8859_16:
- case KOI8:
- if (c == 0xa0) return 1;
- break;
-
- case KOI8_R:
- if (c == 0x9a) return 1;
- break;
-
- default:
- exit(-1);
- }
-
- return 0;
-}
-
-static int IsUpper(int enc, int c)
-{
- if (c >= 0x41 && c <= 0x5a) return 1;
-
- switch (enc) {
- case ISO_8859_1:
- case ISO_8859_9:
- if (c >= 0xc0 && c <= 0xd6) return 1;
- if (c >= 0xd8 && c <= 0xde) return 1;
- break;
-
- case ISO_8859_2:
- if (c == 0xa1 || c == 0xa3) return 1;
- if (c == 0xa5 || c == 0xa6) return 1;
- if (c >= 0xa9 && c <= 0xac) return 1;
- if (c >= 0xae && c <= 0xaf) return 1;
- if (c >= 0xc0 && c <= 0xd6) return 1;
- if (c >= 0xd8 && c <= 0xde) return 1;
- break;
-
- case ISO_8859_3:
- if (c == 0xa1) return 1;
- if (c == 0xa6) return 1;
- if (c >= 0xa9 && c <= 0xac) return 1;
- if (c == 0xaf) return 1;
- if (c >= 0xc0 && c <= 0xc2) return 1;
- if (c >= 0xc4 && c <= 0xcf) return 1;
- if (c >= 0xd1 && c <= 0xd6) return 1;
- if (c >= 0xd8 && c <= 0xde) return 1;
- break;
-
- case ISO_8859_4:
- if (c == 0xa1 || c == 0xa3) return 1;
- if (c == 0xa5 || c == 0xa6) return 1;
- if (c >= 0xa9 && c <= 0xac) return 1;
- if (c == 0xae) return 1;
- if (c == 0xbd) return 1;
- if (c >= 0xc0 && c <= 0xd6) return 1;
- if (c >= 0xd8 && c <= 0xde) return 1;
- break;
-
- case ISO_8859_5:
- if (c >= 0xa1 && c <= 0xcf && c != 0xad) return 1;
- break;
-
- case ISO_8859_6:
- break;
-
- case ISO_8859_7:
- if (c == 0xb6) return 1;
- if (c >= 0xb8 && c <= 0xba) return 1;
- if (c == 0xbc) return 1;
- if (c >= 0xbe && c <= 0xbf) return 1;
- if (c >= 0xc1 && c <= 0xdb && c != 0xd2) return 1;
- break;
-
- case ISO_8859_8:
- case ISO_8859_11:
- break;
-
- case ISO_8859_10:
- if (c >= 0xa1 && c <= 0xa6) return 1;
- if (c >= 0xa8 && c <= 0xac) return 1;
- if (c == 0xae || c == 0xaf) return 1;
- if (c >= 0xc0 && c <= 0xde) return 1;
- break;
-
- case ISO_8859_13:
- if (c == 0xa8) return 1;
- if (c == 0xaa) return 1;
- if (c == 0xaf) return 1;
- if (c >= 0xc0 && c <= 0xd6) return 1;
- if (c >= 0xd8 && c <= 0xde) return 1;
- break;
-
- case ISO_8859_14:
- if (c == 0xa1) return 1;
- if (c == 0xa4 || c == 0xa6) return 1;
- if (c == 0xa8) return 1;
- if (c == 0xaa || c == 0xac) return 1;
- if (c == 0xaf || c == 0xb0) return 1;
- if (c == 0xb2 || c == 0xb4 || c == 0xb7) return 1;
- if (c == 0xbb || c == 0xbd) return 1;
- if (c >= 0xc0 && c <= 0xde) return 1;
- break;
-
- case ISO_8859_15:
- if (c >= 0xc0 && c <= 0xd6) return 1;
- if (c >= 0xd8 && c <= 0xde) return 1;
- if (c == 0xa6) return 1;
- if (c == 0xb4) return 1;
- if (c == 0xbc) return 1;
- if (c == 0xbe) return 1;
- break;
-
- case ISO_8859_16:
- if (c == 0xa1) return 1;
- if (c == 0xa3) return 1;
- if (c == 0xa6) return 1;
- if (c == 0xaa) return 1;
- if (c == 0xac) return 1;
- if (c == 0xaf) return 1;
- if (c == 0xb2) return 1;
- if (c == 0xb4) return 1;
- if (c == 0xbc) return 1;
- if (c == 0xbe) return 1;
- if (c >= 0xc0 && c <= 0xde) return 1;
- break;
-
- case KOI8_R:
- if (c == 0xb3) return 1;
- /* fall */
- case KOI8:
- if (c >= 0xe0 && c <= 0xff) return 1;
- break;
-
- default:
- exit(-1);
- }
-
- return 0;
-}
-
-static int IsXDigit(int enc, int c)
-{
- if (c >= 0x30 && c <= 0x39) return 1;
- if (c >= 0x41 && c <= 0x46) return 1;
- if (c >= 0x61 && c <= 0x66) return 1;
- return 0;
-}
-
-static int IsWord(int enc, int c)
-{
- if (c >= 0x30 && c <= 0x39) return 1;
- if (c >= 0x41 && c <= 0x5a) return 1;
- if (c == 0x5f) return 1;
- if (c >= 0x61 && c <= 0x7a) return 1;
-
- switch (enc) {
- case ISO_8859_1:
- case ISO_8859_9:
- if (c == 0xaa) return 1;
- if (c >= 0xb2 && c <= 0xb3) return 1;
- if (c == 0xb5) return 1;
- if (c >= 0xb9 && c <= 0xba) return 1;
- if (c >= 0xbc && c <= 0xbe) return 1;
- if (c >= 0xc0 && c <= 0xd6) return 1;
- if (c >= 0xd8 && c <= 0xf6) return 1;
- if (c >= 0xf8 && c <= 0xff) return 1;
- break;
-
- case ISO_8859_2:
- if (c == 0xa1 || c == 0xa3) return 1;
- if (c == 0xa5 || c == 0xa6) return 1;
- if (c >= 0xa9 && c <= 0xac) return 1;
- if (c >= 0xae && c <= 0xaf) return 1;
- if (c == 0xb1 || c == 0xb3) return 1;
- if (c == 0xb5 || c == 0xb6) return 1;
- if (c >= 0xb9 && c <= 0xbc) return 1;
- if (c >= 0xbe && c <= 0xbf) return 1;
- if (c >= 0xc0 && c <= 0xd6) return 1;
- if (c >= 0xd8 && c <= 0xf6) return 1;
- if (c >= 0xf8 && c <= 0xfe) return 1;
- break;
-
- case ISO_8859_3:
- if (c == 0xa1) return 1;
- if (c == 0xa6) return 1;
- if (c >= 0xa9 && c <= 0xac) return 1;
- if (c == 0xaf) return 1;
- if (c >= 0xb1 && c <= 0xb3) return 1;
- if (c == 0xb5 || c == 0xb6) return 1;
- if (c >= 0xb9 && c <= 0xbd) return 1;
- if (c == 0xbf) return 1;
- if (c >= 0xc0 && c <= 0xc2) return 1;
- if (c >= 0xc4 && c <= 0xcf) return 1;
- if (c >= 0xd1 && c <= 0xd6) return 1;
- if (c >= 0xd8 && c <= 0xe2) return 1;
- if (c >= 0xe4 && c <= 0xef) return 1;
- if (c >= 0xf1 && c <= 0xf6) return 1;
- if (c >= 0xf8 && c <= 0xfe) return 1;
- break;
-
- case ISO_8859_4:
- if (c >= 0xa1 && c <= 0xa3) return 1;
- if (c == 0xa5 || c == 0xa6) return 1;
- if (c >= 0xa9 && c <= 0xac) return 1;
- if (c == 0xae) return 1;
- if (c == 0xb1 || c == 0xb3) return 1;
- if (c == 0xb5 || c == 0xb6) return 1;
- if (c >= 0xb9 && c <= 0xbf) return 1;
- if (c >= 0xc0 && c <= 0xd6) return 1;
- if (c >= 0xd8 && c <= 0xf6) return 1;
- if (c >= 0xf8 && c <= 0xfe) return 1;
- break;
-
- case ISO_8859_5:
- if (c >= 0xa1 && c <= 0xcf && c != 0xad) return 1;
- if (c >= 0xd0 && c <= 0xff && c != 0xf0 && c != 0xfd) return 1;
- break;
-
- case ISO_8859_6:
- if (c >= 0xc1 && c <= 0xda) return 1;
- if (c >= 0xe0 && c <= 0xea) return 1;
- if (c >= 0xeb && c <= 0xf2) return 1;
- break;
-
- case ISO_8859_7:
- if (c == 0xb2 || c == 0xb3) return 1;
- if (c == 0xb6) return 1;
- if (c >= 0xb8 && c <= 0xba) return 1;
- if (c >= 0xbc && c <= 0xbf) return 1;
- if (c == 0xc0) return 1;
- if (c >= 0xc1 && c <= 0xdb && c != 0xd2) return 1;
- if (c >= 0xdc && c <= 0xfe) return 1;
- break;
-
- case ISO_8859_8:
- if (c == 0xb2 || c == 0xb3 || c == 0xb5 || c == 0xb9) return 1;
- if (c >= 0xbc && c <= 0xbe) return 1;
- if (c >= 0xe0 && c <= 0xfa) return 1;
- break;
-
- case ISO_8859_10:
- if (c >= 0xa1 && c <= 0xff) {
- if (c != 0xa7 && c != 0xad && c != 0xb0 && c != 0xb7 && c != 0xbd)
- return 1;
- }
- break;
-
- case ISO_8859_11:
- if (c >= 0xa1 && c <= 0xda) return 1;
- if (c >= 0xdf && c <= 0xfb) return 1;
- break;
-
- case ISO_8859_13:
- if (c == 0xa8) return 1;
- if (c == 0xaa) return 1;
- if (c == 0xaf) return 1;
- if (c == 0xb2 || c == 0xb3 || c == 0xb5 || c == 0xb9) return 1;
- if (c >= 0xbc && c <= 0xbe) return 1;
- if (c == 0xb8) return 1;
- if (c == 0xba) return 1;
- if (c >= 0xbf && c <= 0xd6) return 1;
- if (c >= 0xd8 && c <= 0xf6) return 1;
- if (c >= 0xf8 && c <= 0xfe) return 1;
- break;
-
- case ISO_8859_14:
- if (c >= 0xa1 && c <= 0xff) {
- if (c == 0xa3 || c == 0xa7 || c == 0xa9 || c == 0xad || c == 0xae ||
- c == 0xb6) return 0;
- return 1;
- }
- break;
-
- case ISO_8859_15:
- if (c == 0xaa) return 1;
- if (c >= 0xb2 && c <= 0xb3) return 1;
- if (c == 0xb5) return 1;
- if (c >= 0xb9 && c <= 0xba) return 1;
- if (c >= 0xbc && c <= 0xbe) return 1;
- if (c >= 0xc0 && c <= 0xd6) return 1;
- if (c >= 0xd8 && c <= 0xf6) return 1;
- if (c >= 0xf8 && c <= 0xff) return 1;
- if (c == 0xa6) return 1;
- if (c == 0xa8) return 1;
- if (c == 0xb4) return 1;
- if (c == 0xb8) return 1;
- break;
-
- case ISO_8859_16:
- if (c == 0xa1) return 1;
- if (c == 0xa2) return 1;
- if (c == 0xa3) return 1;
- if (c == 0xa6) return 1;
- if (c == 0xa8) return 1;
- if (c == 0xaa) return 1;
- if (c == 0xac) return 1;
- if (c == 0xae) return 1;
- if (c == 0xaf) return 1;
- if (c == 0xb2) return 1;
- if (c == 0xb3) return 1;
- if (c == 0xb4) return 1;
- if (c >= 0xb8 && c <= 0xba) return 1;
- if (c == 0xbc) return 1;
- if (c == 0xbd) return 1;
- if (c == 0xbe) return 1;
- if (c == 0xbf) return 1;
- if (c >= 0xc0 && c <= 0xde) return 1;
- if (c >= 0xdf && c <= 0xff) return 1;
- break;
-
- case KOI8_R:
- if (c == 0x9d) return 1;
- if (c == 0xa3 || c == 0xb3) return 1;
- /* fall */
- case KOI8:
- if (c >= 0xc0 && c <= 0xff) return 1;
- break;
-
- default:
- exit(-1);
- }
-
- return 0;
-}
-
-static int IsAscii(int enc, int c)
-{
- if (c >= 0x00 && c <= 0x7f) return 1;
- return 0;
-}
-
-static int exec(FILE* fp, ENC_INFO* einfo)
-{
-#define NCOL 8
-
- int c, val, enc;
-
- enc = einfo->num;
-
- fprintf(fp, "static unsigned short Enc%s_CtypeTable[256] = {\n",
- einfo->name);
-
- for (c = 0; c < 256; c++) {
- val = 0;
- if (IsAlpha (enc, c)) val |= ONIGENC_CTYPE_ALPHA;
- if (IsBlank (enc, c)) val |= ONIGENC_CTYPE_BLANK;
- if (IsCntrl (enc, c)) val |= ONIGENC_CTYPE_CNTRL;
- if (IsDigit (enc, c)) val |= ONIGENC_CTYPE_DIGIT;
- if (IsGraph (enc, c)) val |= ONIGENC_CTYPE_GRAPH;
- if (IsLower (enc, c)) val |= ONIGENC_CTYPE_LOWER;
- if (IsPrint (enc, c)) val |= ONIGENC_CTYPE_PRINT;
- if (IsPunct (enc, c)) val |= ONIGENC_CTYPE_PUNCT;
- if (IsSpace (enc, c)) val |= ONIGENC_CTYPE_SPACE;
- if (IsUpper (enc, c)) val |= ONIGENC_CTYPE_UPPER;
- if (IsXDigit(enc, c)) val |= ONIGENC_CTYPE_XDIGIT;
- if (IsWord (enc, c)) val |= ONIGENC_CTYPE_WORD;
- if (IsAscii (enc, c)) val |= ONIGENC_CTYPE_ASCII;
-
- if (c % NCOL == 0) fputs(" ", fp);
- fprintf(fp, "0x%04x", val);
- if (c != 255) fputs(",", fp);
- if (c != 0 && c % NCOL == (NCOL-1))
- fputs("\n", fp);
- else
- fputs(" ", fp);
- }
- fprintf(fp, "};\n");
- return 0;
-}
-
-extern int main(int argc, char* argv[])
-{
- int i;
- FILE* fp = stdout;
-
- for (i = 0; i < sizeof(Info)/sizeof(ENC_INFO); i++) {
- exec(fp, &Info[i]);
- }
-}
diff --git a/ext/mbstring/oniguruma/enc/sjis.c b/ext/mbstring/oniguruma/enc/sjis.c
deleted file mode 100644
index 8485910e69..0000000000
--- a/ext/mbstring/oniguruma/enc/sjis.c
+++ /dev/null
@@ -1,174 +0,0 @@
-/**********************************************************************
-
- sjis.c - Oniguruma (regular expression library)
-
- Copyright (C) 2003-2004 K.Kosako (kosako@sofnec.co.jp)
-
-**********************************************************************/
-#include "regenc.h"
-
-static const char SJIS_CAN_BE_TRAIL_TABLE[256] = {
- 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, 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, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0
-};
-
-#define SJIS_ISMB_FIRST(byte) (OnigEncodingSJIS.len_table[byte] > 1)
-#define SJIS_ISMB_TRAIL(byte) SJIS_CAN_BE_TRAIL_TABLE[(byte)]
-
-static OnigCodePoint
-sjis_mbc_to_code(UChar* p, UChar* end)
-{
- int c, i, len;
- OnigCodePoint n;
-
- c = *p++;
- len = enc_len(ONIG_ENCODING_SJIS, c);
- n = c;
- if (len == 1) return n;
-
- for (i = 1; i < len; i++) {
- if (p >= end) break;
- c = *p++;
- n <<= 8; n += c;
- }
- return n;
-}
-
-static int
-sjis_code_to_mbc(OnigCodePoint code, UChar *buf)
-{
- UChar *p = buf;
-
- if ((code & 0xff00) != 0) *p++ = (UChar )(((code >> 8) & 0xff));
- *p++ = (UChar )(code & 0xff);
-
-#if 0
- if (enc_len(ONIG_ENCODING_SJIS, buf[0]) != (p - buf))
- return REGERR_INVALID_WIDE_CHAR_VALUE;
-#endif
- return p - buf;
-}
-
-static int
-sjis_mbc_to_lower(UChar* p, UChar* lower)
-{
- int len;
-
- if (ONIGENC_IS_MBC_ASCII(p)) {
- *lower = ONIGENC_ASCII_CODE_TO_LOWER_CASE(*p);
- return 1;
- }
- else {
- len = enc_len(ONIG_ENCODING_SJIS, *p);
- if (lower != p) {
- /* memcpy(lower, p, len); */
- int i;
- for (i = 0; i < len; i++) {
- *lower++ = *p++;
- }
- }
- return len; /* return byte length of converted char to lower */
- }
-}
-
-static int
-sjis_code_is_ctype(OnigCodePoint code, unsigned int ctype)
-{
- if ((ctype & ONIGENC_CTYPE_WORD) != 0) {
- if (code < 128)
- return ONIGENC_IS_ASCII_CODE_CTYPE(code, ctype);
- else {
- int first = onigenc_mb2_code_to_mbc_first(code);
- return (enc_len(ONIG_ENCODING_SJIS, first) > 1 ? TRUE : FALSE);
- }
-
- ctype &= ~ONIGENC_CTYPE_WORD;
- if (ctype == 0) return FALSE;
- }
-
- if (code < 128)
- return ONIGENC_IS_ASCII_CODE_CTYPE(code, ctype);
- else
- return FALSE;
-}
-
-static UChar*
-sjis_left_adjust_char_head(UChar* start, UChar* s)
-{
- UChar *p;
- int len;
-
- if (s <= start) return s;
- p = s;
-
- if (SJIS_ISMB_TRAIL(*p)) {
- while (p > start) {
- if (! SJIS_ISMB_FIRST(*--p)) {
- p++;
- break;
- }
- }
- }
- len = enc_len(ONIG_ENCODING_SJIS, *p);
- if (p + len > s) return p;
- p += len;
- return p + ((s - p) & ~1);
-}
-
-static int
-sjis_is_allowed_reverse_match(UChar* s, UChar* end)
-{
- UChar c = *s;
- return (SJIS_ISMB_TRAIL(c) ? FALSE : TRUE);
-}
-
-OnigEncodingType OnigEncodingSJIS = {
- {
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1
- },
- "Shift_JIS", /* name */
- 2, /* max byte length */
- FALSE, /* is_fold_match */
- ONIGENC_CTYPE_SUPPORT_LEVEL_SB, /* ctype_support_level */
- FALSE, /* is continuous sb mb codepoint */
- sjis_mbc_to_code,
- onigenc_mb2_code_to_mbclen,
- sjis_code_to_mbc,
- sjis_mbc_to_lower,
- onigenc_mbn_mbc_is_case_ambig,
- sjis_code_is_ctype,
- onigenc_nothing_get_ctype_code_range,
- sjis_left_adjust_char_head,
- sjis_is_allowed_reverse_match,
- onigenc_nothing_get_all_fold_match_code,
- onigenc_nothing_get_fold_match_info
-};
diff --git a/ext/mbstring/oniguruma/enc/utf8.c b/ext/mbstring/oniguruma/enc/utf8.c
deleted file mode 100644
index 604cfac2ef..0000000000
--- a/ext/mbstring/oniguruma/enc/utf8.c
+++ /dev/null
@@ -1,566 +0,0 @@
-/**********************************************************************
-
- utf8.c - Oniguruma (regular expression library)
-
- Copyright (C) 2003-2004 K.Kosako (kosako@sofnec.co.jp)
-
-**********************************************************************/
-#include "regenc.h"
-
-#define utf8_islead(c) ((UChar )((c) & 0xc0) != 0x80)
-
-#define ENC_IS_ISO_8859_1_CTYPE(code,ctype) \
- ((EncUnicode_ISO_8859_1_CtypeTable[code] & ctype) != 0)
-
-static unsigned short EncUnicode_ISO_8859_1_CtypeTable[256] = {
- 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004,
- 0x1004, 0x1106, 0x1104, 0x1104, 0x1104, 0x1104, 0x1004, 0x1004,
- 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004,
- 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004,
- 0x1142, 0x10d0, 0x10d0, 0x10d0, 0x1050, 0x10d0, 0x10d0, 0x10d0,
- 0x10d0, 0x10d0, 0x10d0, 0x1050, 0x10d0, 0x10d0, 0x10d0, 0x10d0,
- 0x1c58, 0x1c58, 0x1c58, 0x1c58, 0x1c58, 0x1c58, 0x1c58, 0x1c58,
- 0x1c58, 0x1c58, 0x10d0, 0x10d0, 0x1050, 0x1050, 0x1050, 0x10d0,
- 0x10d0, 0x1e51, 0x1e51, 0x1e51, 0x1e51, 0x1e51, 0x1e51, 0x1a51,
- 0x1a51, 0x1a51, 0x1a51, 0x1a51, 0x1a51, 0x1a51, 0x1a51, 0x1a51,
- 0x1a51, 0x1a51, 0x1a51, 0x1a51, 0x1a51, 0x1a51, 0x1a51, 0x1a51,
- 0x1a51, 0x1a51, 0x1a51, 0x10d0, 0x10d0, 0x10d0, 0x1050, 0x18d0,
- 0x1050, 0x1c71, 0x1c71, 0x1c71, 0x1c71, 0x1c71, 0x1c71, 0x1871,
- 0x1871, 0x1871, 0x1871, 0x1871, 0x1871, 0x1871, 0x1871, 0x1871,
- 0x1871, 0x1871, 0x1871, 0x1871, 0x1871, 0x1871, 0x1871, 0x1871,
- 0x1871, 0x1871, 0x1871, 0x10d0, 0x1050, 0x10d0, 0x1050, 0x1004,
- 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004,
- 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004,
- 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004,
- 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004,
- 0x1142, 0x10d0, 0x1050, 0x1050, 0x1050, 0x1050, 0x1050, 0x1050,
- 0x1050, 0x1050, 0x1871, 0x10d0, 0x1050, 0x10d0, 0x1050, 0x1050,
- 0x1050, 0x1050, 0x1850, 0x1850, 0x1050, 0x1871, 0x1050, 0x10d0,
- 0x1050, 0x1850, 0x1871, 0x10d0, 0x1850, 0x1850, 0x1850, 0x10d0,
- 0x1a51, 0x1a51, 0x1a51, 0x1a51, 0x1a51, 0x1a51, 0x1a51, 0x1a51,
- 0x1a51, 0x1a51, 0x1a51, 0x1a51, 0x1a51, 0x1a51, 0x1a51, 0x1a51,
- 0x1a51, 0x1a51, 0x1a51, 0x1a51, 0x1a51, 0x1a51, 0x1a51, 0x1050,
- 0x1a51, 0x1a51, 0x1a51, 0x1a51, 0x1a51, 0x1a51, 0x1a51, 0x1871,
- 0x1871, 0x1871, 0x1871, 0x1871, 0x1871, 0x1871, 0x1871, 0x1871,
- 0x1871, 0x1871, 0x1871, 0x1871, 0x1871, 0x1871, 0x1871, 0x1871,
- 0x1871, 0x1871, 0x1871, 0x1871, 0x1871, 0x1871, 0x1871, 0x1050,
- 0x1871, 0x1871, 0x1871, 0x1871, 0x1871, 0x1871, 0x1871, 0x1871
-};
-
-static OnigCodePoint
-utf8_mbc_to_code(UChar* p, UChar* end)
-{
- int c, len;
- OnigCodePoint n;
-
- c = *p++;
- len = enc_len(ONIG_ENCODING_UTF8, c);
- if (len > 1) {
- len--;
- n = c & ((1 << (6 - len)) - 1);
- while (len--) {
- c = *p++;
- n = (n << 6) | (c & ((1 << 6) - 1));
- }
- return n;
- }
- else
- return (OnigCodePoint )c;
-}
-
-static int
-utf8_code_to_mbclen(OnigCodePoint code)
-{
- if ((code & 0xffffff80) == 0) return 1;
- else if ((code & 0xfffff800) == 0) {
- if (code <= 0xff && code >= 0xfe)
- return 1;
- return 2;
- }
- else if ((code & 0xffff0000) == 0) return 3;
- else if ((code & 0xffe00000) == 0) return 4;
- else if ((code & 0xfc000000) == 0) return 5;
- else if ((code & 0x80000000) == 0) return 6;
- else
- return ONIGERR_TOO_BIG_WIDE_CHAR_VALUE;
-}
-
-#if 0
-static int
-utf8_code_to_mbc_first(OnigCodePoint code)
-{
- if ((code & 0xffffff80) == 0)
- return code;
- else {
- if ((code & 0xfffff800) == 0)
- return ((code>>6)& 0x1f) | 0xc0;
- else if ((code & 0xffff0000) == 0)
- return ((code>>12) & 0x0f) | 0xe0;
- else if ((code & 0xffe00000) == 0)
- return ((code>>18) & 0x07) | 0xf0;
- else if ((code & 0xfc000000) == 0)
- return ((code>>24) & 0x03) | 0xf8;
- else if ((code & 0x80000000) == 0)
- return ((code>>30) & 0x01) | 0xfc;
- else {
- return ONIGERR_TOO_BIG_WIDE_CHAR_VALUE;
- }
- }
-}
-#endif
-
-static int
-utf8_code_to_mbc(OnigCodePoint code, UChar *buf)
-{
-#define UTF8_TRAILS(code, shift) (UChar )((((code) >> (shift)) & 0x3f) | 0x80)
-#define UTF8_TRAIL0(code) (UChar )(((code) & 0x3f) | 0x80)
-
- if ((code & 0xffffff80) == 0) {
- *buf = (UChar )code;
- return 1;
- }
- else {
- UChar *p = buf;
-
- if ((code & 0xfffff800) == 0) {
- *p++ = (UChar )(((code>>6)& 0x1f) | 0xc0);
- }
- else if ((code & 0xffff0000) == 0) {
- *p++ = (UChar )(((code>>12) & 0x0f) | 0xe0);
- *p++ = UTF8_TRAILS(code, 6);
- }
- else if ((code & 0xffe00000) == 0) {
- *p++ = (UChar )(((code>>18) & 0x07) | 0xf0);
- *p++ = UTF8_TRAILS(code, 12);
- *p++ = UTF8_TRAILS(code, 6);
- }
- else if ((code & 0xfc000000) == 0) {
- *p++ = (UChar )(((code>>24) & 0x03) | 0xf8);
- *p++ = UTF8_TRAILS(code, 18);
- *p++ = UTF8_TRAILS(code, 12);
- *p++ = UTF8_TRAILS(code, 6);
- }
- else if ((code & 0x80000000) == 0) {
- *p++ = (UChar )(((code>>30) & 0x01) | 0xfc);
- *p++ = UTF8_TRAILS(code, 24);
- *p++ = UTF8_TRAILS(code, 18);
- *p++ = UTF8_TRAILS(code, 12);
- *p++ = UTF8_TRAILS(code, 6);
- }
- else {
- return ONIGERR_TOO_BIG_WIDE_CHAR_VALUE;
- }
-
- *p++ = UTF8_TRAIL0(code);
- return p - buf;
- }
-}
-
-static int
-utf8_mbc_to_lower(UChar* p, UChar* lower)
-{
- int len;
-
- /* !!! U+0080 - U+00ff is treated by fold match. !!! */
- if (ONIGENC_IS_MBC_ASCII(p)) {
- *lower = ONIGENC_ASCII_CODE_TO_LOWER_CASE(*p);
- return 1; /* return byte length of converted char to lower */
- }
- else {
- len = enc_len(ONIG_ENCODING_UTF8, *p);
- if (lower != p) {
- /* memcpy(lower, p, len); */
- int i;
- for (i = 0; i < len; i++) {
- *lower++ = *p++;
- }
- }
- return len; /* return byte length of converted char to lower */
- }
-}
-
-static int
-utf8_mbc_is_case_ambig(UChar* p)
-{
- /* !!! U+0080 - U+00ff ( 0x80[0xc2,0x80] - 0xff[0xc3,0xbf] )
- is treated by fold match. !!! */
-
- if (ONIGENC_IS_MBC_ASCII(p))
- return ONIGENC_IS_ASCII_CODE_CASE_AMBIG(*p);
-
- return FALSE;
-}
-
-static int
-utf8_code_is_ctype(OnigCodePoint code, unsigned int ctype)
-{
- if (code < 256) {
- return ENC_IS_ISO_8859_1_CTYPE(code, ctype);
- }
-
- if ((ctype & ONIGENC_CTYPE_WORD) != 0) {
- return TRUE;
- }
-
- return FALSE;
-}
-
-static int
-utf8_get_ctype_code_range(int ctype, int* nsb, int* nmb,
- OnigCodePointRange* sbr[], OnigCodePointRange* mbr[])
-{
-#define CR_SET(sbl,mbl) do { \
- *nsb = sizeof(sbl) / sizeof(OnigCodePointRange); \
- *nmb = sizeof(mbl) / sizeof(OnigCodePointRange); \
- *sbr = sbl; \
- *mbr = mbl; \
-} while (0)
-
-#define CR_SB_SET(sbl) do { \
- *nsb = sizeof(sbl) / sizeof(OnigCodePointRange); \
- *nmb = 0; \
- *sbr = sbl; \
-} while (0)
-
- static OnigCodePointRange SBAlpha[] = {
- { 0x41, 0x5a },
- { 0x61, 0x7a }
- };
-
- static OnigCodePointRange MBAlpha[] = {
- { 0xaa, 0xaa },
- { 0xb5, 0xb5 },
- { 0xba, 0xba },
- { 0xc0, 0xd6 },
- { 0xd8, 0xf6 },
- { 0xf8, 0x220 }
- };
-
- static OnigCodePointRange SBBlank[] = {
- { 0x09, 0x09 },
- { 0x20, 0x20 }
- };
-
- static OnigCodePointRange MBBlank[] = {
- { 0xa0, 0xa0 }
- };
-
- static OnigCodePointRange SBCntrl[] = {
- { 0x00, 0x1f },
- { 0x7f, 0x7f }
- };
-
- static OnigCodePointRange MBCntrl[] = {
- { 0x80, 0x9f }
- };
-
- static OnigCodePointRange SBDigit[] = {
- { 0x30, 0x39 }
- };
-
- static OnigCodePointRange SBGraph[] = {
- { 0x21, 0x7e }
- };
-
- static OnigCodePointRange MBGraph[] = {
- { 0xa1, 0x220 }
- };
-
- static OnigCodePointRange SBLower[] = {
- { 0x61, 0x7a }
- };
-
- static OnigCodePointRange MBLower[] = {
- { 0xaa, 0xaa },
- { 0xb5, 0xb5 },
- { 0xba, 0xba },
- { 0xdf, 0xf6 },
- { 0xf8, 0xff }
- };
-
- static OnigCodePointRange SBPrint[] = {
- { 0x20, 0x7e }
- };
-
- static OnigCodePointRange MBPrint[] = {
- { 0xa0, 0x220 }
- };
-
- static OnigCodePointRange SBPunct[] = {
- { 0x21, 0x23 },
- { 0x25, 0x2a },
- { 0x2c, 0x2f },
- { 0x3a, 0x3b },
- { 0x3f, 0x40 },
- { 0x5b, 0x5d },
- { 0x5f, 0x5f },
- { 0x7b, 0x7b },
- { 0x7d, 0x7d }
- };
-
- static OnigCodePointRange MBPunct[] = {
- { 0xa1, 0xa1 },
- { 0xab, 0xab },
- { 0xad, 0xad },
- { 0xb7, 0xb7 },
- { 0xbb, 0xbb },
- { 0xbf, 0xbf }
- };
-
- static OnigCodePointRange SBSpace[] = {
- { 0x09, 0x0d },
- { 0x20, 0x20 }
- };
-
- static OnigCodePointRange MBSpace[] = {
- { 0xa0, 0xa0 }
- };
-
- static OnigCodePointRange SBUpper[] = {
- { 0x41, 0x5a }
- };
-
- static OnigCodePointRange MBUpper[] = {
- { 0xc0, 0xd6 },
- { 0xd8, 0xde }
- };
-
- static OnigCodePointRange SBXDigit[] = {
- { 0x30, 0x39 },
- { 0x41, 0x46 },
- { 0x61, 0x66 }
- };
-
- static OnigCodePointRange SBWord[] = {
- { 0x30, 0x39 },
- { 0x41, 0x5a },
- { 0x5f, 0x5f },
- { 0x61, 0x7a }
- };
-
- static OnigCodePointRange MBWord[] = {
- { 0xaa, 0xaa },
- { 0xb2, 0xb3 },
- { 0xb5, 0xb5 },
- { 0xb9, 0xba },
- { 0xbc, 0xbe },
- { 0xc0, 0xd6 },
- { 0xd8, 0xf6 },
-#if 0
- { 0xf8, 0x220 }
-#else
- { 0xf8, 0x7fffffff } /* all multibyte code as word */
-#endif
- };
-
- static OnigCodePointRange SBAscii[] = {
- { 0x00, 0x7f }
- };
-
- static OnigCodePointRange SBAlnum[] = {
- { 0x30, 0x39 },
- { 0x41, 0x5a },
- { 0x61, 0x7a }
- };
-
- static OnigCodePointRange MBAlnum[] = {
- { 0xaa, 0xaa },
- { 0xb5, 0xb5 },
- { 0xba, 0xba },
- { 0xc0, 0xd6 },
- { 0xd8, 0xf6 },
- { 0xf8, 0x220 }
- };
-
- switch (ctype) {
- case ONIGENC_CTYPE_ALPHA:
- CR_SET(SBAlpha, MBAlpha);
- break;
- case ONIGENC_CTYPE_BLANK:
- CR_SET(SBBlank, MBBlank);
- break;
- case ONIGENC_CTYPE_CNTRL:
- CR_SET(SBCntrl, MBCntrl);
- break;
- case ONIGENC_CTYPE_DIGIT:
- CR_SB_SET(SBDigit);
- break;
- case ONIGENC_CTYPE_GRAPH:
- CR_SET(SBGraph, MBGraph);
- break;
- case ONIGENC_CTYPE_LOWER:
- CR_SET(SBLower, MBLower);
- break;
- case ONIGENC_CTYPE_PRINT:
- CR_SET(SBPrint, MBPrint);
- break;
- case ONIGENC_CTYPE_PUNCT:
- CR_SET(SBPunct, MBPunct);
- break;
- case ONIGENC_CTYPE_SPACE:
- CR_SET(SBSpace, MBSpace);
- break;
- case ONIGENC_CTYPE_UPPER:
- CR_SET(SBUpper, MBUpper);
- break;
- case ONIGENC_CTYPE_XDIGIT:
- CR_SB_SET(SBXDigit);
- break;
- case ONIGENC_CTYPE_WORD:
- CR_SET(SBWord, MBWord);
- break;
- case ONIGENC_CTYPE_ASCII:
- CR_SB_SET(SBAscii);
- break;
- case ONIGENC_CTYPE_ALNUM:
- CR_SET(SBAlnum, MBAlnum);
- break;
-
- default:
- return ONIGERR_TYPE_BUG;
- break;
- }
-
- return 0;
-}
-
-static int
-utf8_get_all_fold_match_code(OnigCodePoint** codes)
-{
- static OnigCodePoint list[] = {
- 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7,
- 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf,
- 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6,
- 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf,
-
- 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7,
- 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef,
- 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6,
- 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe,
- };
-
- *codes = list;
- return sizeof(list) / sizeof(OnigCodePoint);
-}
-
-static int
-utf8_get_fold_match_info(UChar* p, UChar* end, OnigEncFoldMatchInfo** info)
-{
-
- static OnigEncFoldMatchInfo xc[] = {
- { 2, { 2, 2 }, { "\303\200", "\303\240" } }, /* CodePoint 0xc0 */
- { 2, { 2, 2 }, { "\303\201", "\303\241" } },
- { 2, { 2, 2 }, { "\303\202", "\303\242" } },
- { 2, { 2, 2 }, { "\303\203", "\303\243" } },
- { 2, { 2, 2 }, { "\303\204", "\303\244" } },
- { 2, { 2, 2 }, { "\303\205", "\303\245" } },
- { 2, { 2, 2 }, { "\303\206", "\303\246" } },
- { 2, { 2, 2 }, { "\303\207", "\303\247" } },
- { 2, { 2, 2 }, { "\303\210", "\303\250" } },
- { 2, { 2, 2 }, { "\303\211", "\303\251" } },
- { 2, { 2, 2 }, { "\303\212", "\303\252" } },
- { 2, { 2, 2 }, { "\303\213", "\303\253" } },
- { 2, { 2, 2 }, { "\303\214", "\303\254" } },
- { 2, { 2, 2 }, { "\303\215", "\303\255" } },
- { 2, { 2, 2 }, { "\303\216", "\303\256" } },
- { 2, { 2, 2 }, { "\303\217", "\303\257" } },
- { 2, { 2, 2 }, { "\303\220", "\303\260" } }, /* CodePoint 0xd0 */
- { 2, { 2, 2 }, { "\303\221", "\303\261" } },
- { 2, { 2, 2 }, { "\303\222", "\303\262" } },
- { 2, { 2, 2 }, { "\303\223", "\303\263" } },
- { 2, { 2, 2 }, { "\303\224", "\303\264" } },
- { 2, { 2, 2 }, { "\303\225", "\303\265" } },
- { 2, { 2, 2 }, { "\303\226", "\303\266" } },
- { 0, { 0 }, { "" } },
- { 2, { 2, 2 }, { "\303\230", "\303\270" } },
- { 2, { 2, 2 }, { "\303\231", "\303\271" } },
- { 2, { 2, 2 }, { "\303\232", "\303\272" } },
- { 2, { 2, 2 }, { "\303\233", "\303\273" } },
- { 2, { 2, 2 }, { "\303\234", "\303\274" } },
- { 2, { 2, 2 }, { "\303\235", "\303\275" } },
- { 2, { 2, 2 }, { "\303\236", "\303\276" } },
- { 3, { 2, 2, 2 }, { "\303\237", "ss", "SS" }} /* ess-tsett(U+00DF) */
- };
-
- if (p + 1 >= end) return -1;
- if (*p < 0x80) {
- if ((*p == 'S' && *(p+1) == 'S') ||
- (*p == 's' && *(p+1) == 's')) {
- *info = &(xc[0xdf - 0xc0]);
- return 2;
- }
- }
- else if (*p == 195) { /* 195 == '\303' */
- int c = *(p+1);
- if (c >= 128) {
- if (c <= 159) { /* upper */
- if (c == 151) return -1; /* 0xd7 */
- *info = &(xc[c - 128]);
- return 2;
- }
- else { /* lower */
- if (c == 183) return -1; /* 0xf7 */
- *info = &(xc[c - 160]);
- return 2;
- }
- }
- }
-
- return -1; /* is not a fold string. */
-}
-
-
-static UChar*
-utf8_left_adjust_char_head(UChar* start, UChar* s)
-{
- UChar *p;
-
- if (s <= start) return s;
- p = s;
-
- while (!utf8_islead(*p) && p > start) p--;
- return p;
-}
-
-static int
-utf8_is_allowed_reverse_match(UChar* s, UChar* end)
-{
- return TRUE;
-}
-
-OnigEncodingType OnigEncodingUTF8 = {
- {
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 6, 6, 1, 1
- },
- "UTF-8", /* name */
- 6, /* max byte length */
- TRUE, /* is_fold_match */
- ONIGENC_CTYPE_SUPPORT_LEVEL_FULL, /* ctype_support_level */
- TRUE, /* is continuous sb mb codepoint */
- utf8_mbc_to_code,
- utf8_code_to_mbclen,
- utf8_code_to_mbc,
- utf8_mbc_to_lower,
- utf8_mbc_is_case_ambig,
- utf8_code_is_ctype,
- utf8_get_ctype_code_range,
- utf8_left_adjust_char_head,
- utf8_is_allowed_reverse_match,
- utf8_get_all_fold_match_code,
- utf8_get_fold_match_info
-};
diff --git a/ext/mbstring/oniguruma/onigcmpt200.h b/ext/mbstring/oniguruma/onigcmpt200.h
deleted file mode 100644
index 4c029304b6..0000000000
--- a/ext/mbstring/oniguruma/onigcmpt200.h
+++ /dev/null
@@ -1,304 +0,0 @@
-/**********************************************************************
-
- onigcmpt200.h - Oniguruma (regular expression library)
-
- Copyright (C) 2004 K.Kosako (kosako@sofnec.co.jp)
-
-**********************************************************************/
-#ifndef ONIGCMPT200_H
-#define ONIGCMPT200_H
-
-/* constants */
-#define REG_MAX_ERROR_MESSAGE_LEN ONIG_MAX_ERROR_MESSAGE_LEN
-
-#define RegCharEncoding OnigEncoding
-
-#define REG_ENCODING_ASCII ONIG_ENCODING_ASCII
-#define REG_ENCODING_ISO_8859_1 ONIG_ENCODING_ISO_8859_1
-#define REG_ENCODING_ISO_8859_15 ONIG_ENCODING_ISO_8859_15
-#define REG_ENCODING_UTF8 ONIG_ENCODING_UTF8
-#define REG_ENCODING_EUC_JP ONIG_ENCODING_EUC_JP
-#define REG_ENCODING_SJIS ONIG_ENCODING_SJIS
-#define REG_ENCODING_BIG5 ONIG_ENCODING_BIG5
-#define REG_ENCODING_UNDEF ONIG_ENCODING_UNDEF
-
-/* Don't use REGCODE_XXXX. (obsoleted) */
-#define REGCODE_UNDEF REG_ENCODING_UNDEF
-#define REGCODE_ASCII REG_ENCODING_ASCII
-#define REGCODE_UTF8 REG_ENCODING_UTF8
-#define REGCODE_EUCJP REG_ENCODING_EUC_JP
-#define REGCODE_SJIS REG_ENCODING_SJIS
-
-typedef unsigned char* RegTransTableType;
-#define RegOptionType OnigOptionType
-#define RegDistance OnigDistance
-
-#define REG_OPTION_DEFAULT ONIG_OPTION_DEFAULT
-
-/* options */
-#define REG_OPTION_NONE ONIG_OPTION_NONE
-#define REG_OPTION_SINGLELINE ONIG_OPTION_SINGLELINE
-#define REG_OPTION_MULTILINE ONIG_OPTION_MULTILINE
-#define REG_OPTION_IGNORECASE ONIG_OPTION_IGNORECASE
-#define REG_OPTION_EXTEND ONIG_OPTION_EXTEND
-#define REG_OPTION_FIND_LONGEST ONIG_OPTION_FIND_LONGEST
-#define REG_OPTION_FIND_NOT_EMPTY ONIG_OPTION_FIND_NOT_EMPTY
-#define REG_OPTION_NEGATE_SINGLELINE ONIG_OPTION_NEGATE_SINGLELINE
-#define REG_OPTION_DONT_CAPTURE_GROUP ONIG_OPTION_DONT_CAPTURE_GROUP
-#define REG_OPTION_CAPTURE_GROUP ONIG_OPTION_CAPTURE_GROUP
-#define REG_OPTION_NOTBOL ONIG_OPTION_NOTBOL
-#define REG_OPTION_NOTEOL ONIG_OPTION_NOTEOL
-#define REG_OPTION_POSIX_REGION ONIG_OPTION_POSIX_REGION
-
-#define REG_OPTION_ON ONIG_OPTION_ON
-#define REG_OPTION_OFF ONIG_OPTION_OFF
-#define IS_REG_OPTION_ON ONIG_IS_OPTION_ON
-
-/* syntax */
-#define RegSyntaxType OnigSyntaxType
-
-#define RegSyntaxPosixBasic OnigSyntaxPosixBasic
-#define RegSyntaxPosixExtended OnigSyntaxPosixExtended
-#define RegSyntaxEmacs OnigSyntaxEmacs
-#define RegSyntaxGrep OnigSyntaxGrep
-#define RegSyntaxGnuRegex OnigSyntaxGnuRegex
-#define RegSyntaxJava OnigSyntaxJava
-#define RegSyntaxPerl OnigSyntaxPerl
-#define RegSyntaxRuby OnigSyntaxRuby
-
-#define REG_SYNTAX_POSIX_BASIC ONIG_SYNTAX_POSIX_BASIC
-#define REG_SYNTAX_POSIX_EXTENDED ONIG_SYNTAX_POSIX_EXTENDED
-#define REG_SYNTAX_EMACS ONIG_SYNTAX_EMACS
-#define REG_SYNTAX_GREP ONIG_SYNTAX_GREP
-#define REG_SYNTAX_GNU_REGEX ONIG_SYNTAX_GNU_REGEX
-#define REG_SYNTAX_JAVA ONIG_SYNTAX_JAVA
-#define REG_SYNTAX_PERL ONIG_SYNTAX_PERL
-#define REG_SYNTAX_RUBY ONIG_SYNTAX_RUBY
-
-#define REG_SYNTAX_DEFAULT ONIG_SYNTAX_DEFAULT
-#define RegDefaultSyntax OnigDefaultSyntax
-
-/* syntax (operators) */
-#define REG_SYN_OP_VARIABLE_META_CHARACTERS \
- ONIG_SYN_OP_VARIABLE_META_CHARACTERS
-#define REG_SYN_OP_DOT_ANYCHAR \
- ONIG_SYN_OP_DOT_ANYCHAR
-#define REG_SYN_OP_ASTERISK_ZERO_INF \
- ONIG_SYN_OP_ASTERISK_ZERO_INF
-#define REG_SYN_OP_ESC_ASTERISK_ZERO_INF \
- ONIG_SYN_OP_ESC_ASTERISK_ZERO_INF
-#define REG_SYN_OP_PLUS_ONE_INF \
- ONIG_SYN_OP_PLUS_ONE_INF
-#define REG_SYN_OP_ESC_PLUS_ONE_INF \
- ONIG_SYN_OP_ESC_PLUS_ONE_INF
-#define REG_SYN_OP_QMARK_ZERO_ONE \
- ONIG_SYN_OP_QMARK_ZERO_ONE
-#define REG_SYN_OP_ESC_QMARK_ZERO_ONE \
- ONIG_SYN_OP_ESC_QMARK_ZERO_ONE
-#define REG_SYN_OP_BRACE_INTERVAL \
- ONIG_SYN_OP_BRACE_INTERVAL
-#define REG_SYN_OP_ESC_BRACE_INTERVAL \
- ONIG_SYN_OP_ESC_BRACE_INTERVAL
-#define REG_SYN_OP_VBAR_ALT \
- ONIG_SYN_OP_VBAR_ALT
-#define REG_SYN_OP_ESC_VBAR_ALT \
- ONIG_SYN_OP_ESC_VBAR_ALT
-#define REG_SYN_OP_LPAREN_SUBEXP \
- ONIG_SYN_OP_LPAREN_SUBEXP
-#define REG_SYN_OP_ESC_LPAREN_SUBEXP \
- ONIG_SYN_OP_ESC_LPAREN_SUBEXP
-#define REG_SYN_OP_ESC_AZ_BUF_ANCHOR \
- ONIG_SYN_OP_ESC_AZ_BUF_ANCHOR
-#define REG_SYN_OP_ESC_CAPITAL_G_BEGIN_ANCHOR \
- ONIG_SYN_OP_ESC_CAPITAL_G_BEGIN_ANCHOR
-#define REG_SYN_OP_DECIMAL_BACKREF \
- ONIG_SYN_OP_DECIMAL_BACKREF
-#define REG_SYN_OP_BRACKET_CC \
- ONIG_SYN_OP_BRACKET_CC
-#define REG_SYN_OP_ESC_W_WORD \
- ONIG_SYN_OP_ESC_W_WORD
-#define REG_SYN_OP_ESC_LTGT_WORD_BEGIN_END \
- ONIG_SYN_OP_ESC_LTGT_WORD_BEGIN_END
-#define REG_SYN_OP_ESC_B_WORD_BOUND \
- ONIG_SYN_OP_ESC_B_WORD_BOUND
-#define REG_SYN_OP_ESC_S_WHITE_SPACE \
- ONIG_SYN_OP_ESC_S_WHITE_SPACE
-#define REG_SYN_OP_ESC_D_DIGIT \
- ONIG_SYN_OP_ESC_D_DIGIT
-#define REG_SYN_OP_LINE_ANCHOR \
- ONIG_SYN_OP_LINE_ANCHOR
-#define REG_SYN_OP_POSIX_BRACKET \
- ONIG_SYN_OP_POSIX_BRACKET
-#define REG_SYN_OP_QMARK_NON_GREEDY \
- ONIG_SYN_OP_QMARK_NON_GREEDY
-#define REG_SYN_OP_ESC_CONTROL_CHARS \
- ONIG_SYN_OP_ESC_CONTROL_CHARS
-#define REG_SYN_OP_ESC_C_CONTROL \
- ONIG_SYN_OP_ESC_C_CONTROL
-#define REG_SYN_OP_ESC_OCTAL3 \
- ONIG_SYN_OP_ESC_OCTAL3
-#define REG_SYN_OP_ESC_X_HEX2 \
- ONIG_SYN_OP_ESC_X_HEX2
-#define REG_SYN_OP_ESC_X_BRACE_HEX8 \
- ONIG_SYN_OP_ESC_X_BRACE_HEX8
-
-#define REG_SYN_OP2_ESC_CAPITAL_Q_QUOTE \
- ONIG_SYN_OP2_ESC_CAPITAL_Q_QUOTE
-#define REG_SYN_OP2_QMARK_GROUP_EFFECT \
- ONIG_SYN_OP2_QMARK_GROUP_EFFECT
-#define REG_SYN_OP2_OPTION_PERL \
- ONIG_SYN_OP2_OPTION_PERL
-#define REG_SYN_OP2_OPTION_RUBY \
- ONIG_SYN_OP2_OPTION_RUBY
-#define REG_SYN_OP2_PLUS_POSSESSIVE_REPEAT \
- ONIG_SYN_OP2_PLUS_POSSESSIVE_REPEAT
-#define REG_SYN_OP2_PLUS_POSSESSIVE_INTERVAL \
- ONIG_SYN_OP2_PLUS_POSSESSIVE_INTERVAL
-#define REG_SYN_OP2_CCLASS_SET_OP \
- ONIG_SYN_OP2_CCLASS_SET_OP
-#define REG_SYN_OP2_QMARK_LT_NAMED_GROUP \
- ONIG_SYN_OP2_QMARK_LT_NAMED_GROUP
-#define REG_SYN_OP2_ESC_K_NAMED_BACKREF \
- ONIG_SYN_OP2_ESC_K_NAMED_BACKREF
-#define REG_SYN_OP2_ESC_G_SUBEXP_CALL \
- ONIG_SYN_OP2_ESC_G_SUBEXP_CALL
-#define REG_SYN_OP2_ATMARK_CAPTURE_HISTORY \
- ONIG_SYN_OP2_ATMARK_CAPTURE_HISTORY
-#define REG_SYN_OP2_ESC_CAPITAL_C_BAR_CONTROL \
- ONIG_SYN_OP2_ESC_CAPITAL_C_BAR_CONTROL
-#define REG_SYN_OP2_ESC_CAPITAL_M_BAR_META \
- ONIG_SYN_OP2_ESC_CAPITAL_M_BAR_META
-#define REG_SYN_OP2_ESC_V_VTAB \
- ONIG_SYN_OP2_ESC_V_VTAB
-#define REG_SYN_OP2_ESC_U_HEX4 \
- ONIG_SYN_OP2_ESC_U_HEX4
-#define REG_SYN_OP2_ESC_GNU_BUF_ANCHOR \
- ONIG_SYN_OP2_ESC_GNU_BUF_ANCHOR
-
-#define REG_SYN_CONTEXT_INDEP_ANCHORS \
- ONIG_SYN_CONTEXT_INDEP_ANCHORS
-#define REG_SYN_CONTEXT_INDEP_REPEAT_OPS \
- ONIG_SYN_CONTEXT_INDEP_REPEAT_OPS
-#define REG_SYN_CONTEXT_INVALID_REPEAT_OPS \
- ONIG_SYN_CONTEXT_INVALID_REPEAT_OPS
-#define REG_SYN_ALLOW_UNMATCHED_CLOSE_SUBEXP \
- ONIG_SYN_ALLOW_UNMATCHED_CLOSE_SUBEXP
-#define REG_SYN_ALLOW_INVALID_INTERVAL \
- ONIG_SYN_ALLOW_INVALID_INTERVAL
-#define REG_SYN_STRICT_CHECK_BACKREF \
- ONIG_SYN_STRICT_CHECK_BACKREF
-#define REG_SYN_DIFFERENT_LEN_ALT_LOOK_BEHIND \
- ONIG_SYN_DIFFERENT_LEN_ALT_LOOK_BEHIND
-#define REG_SYN_CAPTURE_ONLY_NAMED_GROUP \
- ONIG_SYN_CAPTURE_ONLY_NAMED_GROUP
-#define REG_SYN_ALLOW_MULTIPLEX_DEFINITION_NAME \
- ONIG_SYN_ALLOW_MULTIPLEX_DEFINITION_NAME
-
-#define REG_SYN_NOT_NEWLINE_IN_NEGATIVE_CC \
- ONIG_SYN_NOT_NEWLINE_IN_NEGATIVE_CC
-#define REG_SYN_BACKSLASH_ESCAPE_IN_CC \
- ONIG_SYN_BACKSLASH_ESCAPE_IN_CC
-#define REG_SYN_ALLOW_EMPTY_RANGE_IN_CC \
- ONIG_SYN_ALLOW_EMPTY_RANGE_IN_CC
-#define REG_SYN_ALLOW_DOUBLE_RANGE_OP_IN_CC \
- ONIG_SYN_ALLOW_DOUBLE_RANGE_OP_IN_CC
-#define REG_SYN_WARN_CC_OP_NOT_ESCAPED \
- ONIG_SYN_WARN_CC_OP_NOT_ESCAPED
-#define REG_SYN_WARN_REDUNDANT_NESTED_REPEAT \
- ONIG_SYN_WARN_REDUNDANT_NESTED_REPEAT
-
-/* meta character specifiers (regex_set_meta_char()) */
-#define REG_META_CHAR_ESCAPE ONIG_META_CHAR_ESCAPE
-#define REG_META_CHAR_ANYCHAR ONIG_META_CHAR_ANYCHAR
-#define REG_META_CHAR_ANYTIME ONIG_META_CHAR_ANYTIME
-#define REG_META_CHAR_ZERO_OR_ONE_TIME ONIG_META_CHAR_ZERO_OR_ONE_TIME
-#define REG_META_CHAR_ONE_OR_MORE_TIME ONIG_META_CHAR_ONE_OR_MORE_TIME
-#define REG_META_CHAR_ANYCHAR_ANYTIME ONIG_META_CHAR_ANYCHAR_ANYTIME
-
-#define REG_INEFFECTIVE_META_CHAR ONIG_INEFFECTIVE_META_CHAR
-
-/* error codes */
-#define REG_IS_PATTERN_ERROR ONIG_IS_PATTERN_ERROR
-/* normal return */
-#define REG_NORMAL ONIG_NORMAL
-#define REG_MISMATCH ONIG_MISMATCH
-#define REG_NO_SUPPORT_CONFIG ONIG_NO_SUPPORT_CONFIG
-/* internal error */
-#define REGERR_MEMORY ONIGERR_MEMORY
-#define REGERR_MATCH_STACK_LIMIT_OVER ONIGERR_MATCH_STACK_LIMIT_OVER
-#define REGERR_TYPE_BUG ONIGERR_TYPE_BUG
-#define REGERR_PARSER_BUG ONIGERR_PARSER_BUG
-#define REGERR_STACK_BUG ONIGERR_STACK_BUG
-#define REGERR_UNDEFINED_BYTECODE ONIGERR_UNDEFINED_BYTECODE
-#define REGERR_UNEXPECTED_BYTECODE ONIGERR_UNEXPECTED_BYTECODE
-#define REGERR_DEFAULT_ENCODING_IS_NOT_SETTED \
- ONIGERR_DEFAULT_ENCODING_IS_NOT_SETTED
-#define REGERR_SPECIFIED_ENCODING_CANT_CONVERT_TO_WIDE_CHAR \
- ONIGERR_SPECIFIED_ENCODING_CANT_CONVERT_TO_WIDE_CHAR
-/* general error */
-#define REGERR_INVALID_ARGUMENT ONIGERR_INVALID_ARGUMENT
-/* errors related to thread */
-#define REGERR_OVER_THREAD_PASS_LIMIT_COUNT \
- ONIGERR_OVER_THREAD_PASS_LIMIT_COUNT
-
-
-/* must be smaller than BIT_STATUS_BITS_NUM (unsigned int * 8) */
-#define REG_MAX_CAPTURE_HISTORY_GROUP ONIG_MAX_CAPTURE_HISTORY_GROUP
-#define REG_IS_CAPTURE_HISTORY_GROUP ONIG_IS_CAPTURE_HISTORY_GROUP
-
-#define REG_REGION_NOTPOS ONIG_REGION_NOTPOS
-
-#define RegRegion OnigRegion
-#define RegErrorInfo OnigErrorInfo
-#define RegRepeatRange OnigRepeatRange
-
-#define RegWarnFunc OnigWarnFunc
-#define regex_null_warn onig_null_warn
-#define REG_NULL_WARN ONIG_NULL_WARN
-
-/* regex_t state */
-#define REG_STATE_NORMAL ONIG_STATE_NORMAL
-#define REG_STATE_SEARCHING ONIG_STATE_SEARCHING
-#define REG_STATE_COMPILING ONIG_STATE_COMPILING
-#define REG_STATE_MODIFY ONIG_STATE_MODIFY
-
-#define REG_STATE ONIG_STATE
-
-/* Oniguruma Native API */
-#define regex_init onig_init
-#define regex_error_code_to_str onig_error_code_to_str
-#define regex_set_warn_func onig_set_warn_func
-#define regex_set_verb_warn_func onig_set_verb_warn_func
-#define regex_new onig_new
-#define regex_free onig_free
-#define regex_recompile onig_recompile
-#define regex_search onig_search
-#define regex_match onig_match
-#define regex_region_new onig_region_new
-#define regex_region_free onig_region_free
-#define regex_region_copy onig_region_copy
-#define regex_region_clear onig_region_clear
-#define regex_region_resize onig_region_resize
-#define regex_name_to_group_numbers onig_name_to_group_numbers
-#define regex_name_to_backref_number onig_name_to_backref_number
-#define regex_foreach_name onig_foreach_name
-#define regex_number_of_names onig_number_of_names
-#define regex_get_encoding onig_get_encoding
-#define regex_get_options onig_get_options
-#define regex_get_syntax onig_get_syntax
-#define regex_set_default_syntax onig_set_default_syntax
-#define regex_copy_syntax onig_copy_syntax
-#define regex_set_meta_char onig_set_meta_char
-#define regex_end onig_end
-#define regex_version onig_version
-
-/* encoding API */
-#define enc_get_prev_char_head onigenc_get_prev_char_head
-#define enc_get_left_adjust_char_head onigenc_get_left_adjust_char_head
-#define enc_get_right_adjust_char_head onigenc_get_right_adjust_char_head
-/* obsoleted API */
-#define regex_get_prev_char_head onigenc_get_prev_char_head
-#define regex_get_left_adjust_char_head onigenc_get_left_adjust_char_head
-#define regex_get_right_adjust_char_head onigenc_get_right_adjust_char_head
-
-#endif /* ONIGCMPT200_H */
diff --git a/ext/mbstring/oniguruma/oniggnu.h b/ext/mbstring/oniguruma/oniggnu.h
deleted file mode 100644
index d78dc18b11..0000000000
--- a/ext/mbstring/oniguruma/oniggnu.h
+++ /dev/null
@@ -1,77 +0,0 @@
-/**********************************************************************
-
- oniggnu.h - Oniguruma (regular expression library)
-
- Copyright (C) 2004 K.Kosako (kosako@sofnec.co.jp)
-
-**********************************************************************/
-#ifndef ONIGGNU_H
-#define ONIGGNU_H
-
-#include "oniguruma.h"
-
-#define MBCTYPE_ASCII 0
-#define MBCTYPE_EUC 1
-#define MBCTYPE_SJIS 2
-#define MBCTYPE_UTF8 3
-
-/* GNU regex options */
-#ifndef RE_NREGS
-#define RE_NREGS ONIG_NREGION
-#endif
-#define RE_OPTION_IGNORECASE ONIG_OPTION_IGNORECASE
-#define RE_OPTION_EXTENDED ONIG_OPTION_EXTEND
-#define RE_OPTION_MULTILINE ONIG_OPTION_MULTILINE
-#define RE_OPTION_SINGLELINE ONIG_OPTION_SINGLELINE
-#define RE_OPTION_LONGEST ONIG_OPTION_FIND_LONGEST
-#define RE_OPTION_POSIXLINE (RE_OPTION_MULTILINE|RE_OPTION_SINGLELINE)
-
-#ifdef RUBY_PLATFORM
-#define re_mbcinit ruby_re_mbcinit
-#define re_compile_pattern ruby_re_compile_pattern
-#define re_recompile_pattern ruby_re_recompile_pattern
-#define re_free_pattern ruby_re_free_pattern
-#define re_adjust_startpos ruby_re_adjust_startpos
-#define re_search ruby_re_search
-#define re_match ruby_re_match
-#define re_set_casetable ruby_re_set_casetable
-#define re_copy_registers ruby_re_copy_registers
-#define re_free_registers ruby_re_free_registers
-#define register_info_type ruby_register_info_type
-#define re_error_code_to_str ruby_error_code_to_str
-
-#define ruby_error_code_to_str onig_error_code_to_str
-#define ruby_re_copy_registers onig_region_copy
-#else
-#define re_error_code_to_str onig_error_code_to_str
-#define re_copy_registers onig_region_copy
-#endif
-
-#ifdef ONIG_RUBY_M17N
-ONIG_EXTERN
-void re_mbcinit P_((OnigEncoding));
-#else
-ONIG_EXTERN
-void re_mbcinit P_((int));
-#endif
-
-ONIG_EXTERN
-int re_compile_pattern P_((const char*, int, struct re_pattern_buffer*, char* err_buf));
-ONIG_EXTERN
-int re_recompile_pattern P_((const char*, int, struct re_pattern_buffer*, char* err_buf));
-ONIG_EXTERN
-void re_free_pattern P_((struct re_pattern_buffer*));
-ONIG_EXTERN
-int re_adjust_startpos P_((struct re_pattern_buffer*, const char*, int, int, int));
-ONIG_EXTERN
-int re_search P_((struct re_pattern_buffer*, const char*, int, int, int, struct re_registers*));
-ONIG_EXTERN
-int re_match P_((struct re_pattern_buffer*, const char *, int, int, struct re_registers*));
-ONIG_EXTERN
-void re_set_casetable P_((const char*));
-ONIG_EXTERN
-void re_free_registers P_((struct re_registers*));
-ONIG_EXTERN
-int re_alloc_pattern P_((struct re_pattern_buffer**)); /* added */
-
-#endif /* ONIGGNU_H */
diff --git a/ext/mbstring/oniguruma/onigposix.h b/ext/mbstring/oniguruma/onigposix.h
deleted file mode 100644
index 3793ae6bd9..0000000000
--- a/ext/mbstring/oniguruma/onigposix.h
+++ /dev/null
@@ -1,136 +0,0 @@
-/**********************************************************************
-
- onigposix.h - Oniguruma (regular expression library)
-
- Copyright (C) 2003-2004 K.Kosako (kosako@sofnec.co.jp)
-
-**********************************************************************/
-#ifndef ONIGPOSIX_H
-#define ONIGPOSIX_H
-
-/* options */
-#define REG_ICASE (1<<0)
-#define REG_NEWLINE (1<<1)
-#define REG_NOTBOL (1<<2)
-#define REG_NOTEOL (1<<3)
-#define REG_EXTENDED (1<<4) /* if not setted, Basic Onigular Expression */
-#define REG_NOSUB (1<<5)
-
-/* POSIX error codes */
-#define REG_NOMATCH 1
-#define REG_BADPAT 2
-#define REG_ECOLLATE 3
-#define REG_ECTYPE 4
-#define REG_EESCAPE 5
-#define REG_ESUBREG 6
-#define REG_EBRACK 7
-#define REG_EPAREN 8
-#define REG_EBRACE 9
-#define REG_BADBR 10
-#define REG_ERANGE 11
-#define REG_ESPACE 12
-#define REG_BADRPT 13
-
-/* extended error codes */
-#define REG_EONIG_INTERNAL 14
-#define REG_EONIG_BADWC 15
-#define REG_EONIG_BADARG 16
-#define REG_EONIG_THREAD 17
-
-/* character encodings (for reg_set_encoding()) */
-#define REG_POSIX_ENCODING_ASCII 0
-#define REG_POSIX_ENCODING_EUC_JP 1
-#define REG_POSIX_ENCODING_SJIS 2
-#define REG_POSIX_ENCODING_UTF8 3
-
-#include <stdlib.h>
-
-
-typedef int regoff_t;
-
-typedef struct {
- regoff_t rm_so;
- regoff_t rm_eo;
-} regmatch_t;
-
-/* POSIX regex_t */
-typedef struct {
- void* onig; /* Oniguruma regex_t* */
- size_t re_nsub;
- int comp_options;
-} regex_t;
-
-
-#ifndef P_
-#if defined(__STDC__) || defined(_WIN32)
-# define P_(args) args
-#else
-# define P_(args) ()
-#endif
-#endif
-
-#ifndef ONIG_EXTERN
-#if defined(_WIN32) && !defined(__CYGWIN__)
-#if defined(EXPORT) || defined(RUBY_EXPORT)
-#define ONIG_EXTERN extern __declspec(dllexport)
-#else
-#define ONIG_EXTERN extern __declspec(dllimport)
-#endif
-#endif
-#endif
-
-#ifndef ONIG_EXTERN
-#define ONIG_EXTERN extern
-#endif
-
-#ifndef ONIGURUMA_H
-typedef unsigned int OnigOptionType;
-
-/* syntax */
-typedef struct {
- unsigned int op;
- unsigned int op2;
- unsigned int behavior;
- OnigOptionType options; /* default option */
-} OnigSyntaxType;
-
-ONIG_EXTERN OnigSyntaxType OnigSyntaxPosixBasic;
-ONIG_EXTERN OnigSyntaxType OnigSyntaxPosixExtended;
-ONIG_EXTERN OnigSyntaxType OnigSyntaxEmacs;
-ONIG_EXTERN OnigSyntaxType OnigSyntaxGrep;
-ONIG_EXTERN OnigSyntaxType OnigSyntaxGnuRegex;
-ONIG_EXTERN OnigSyntaxType OnigSyntaxJava;
-ONIG_EXTERN OnigSyntaxType OnigSyntaxPerl;
-ONIG_EXTERN OnigSyntaxType OnigSyntaxRuby;
-
-/* predefined syntaxes (see regparse.c) */
-#define ONIG_SYNTAX_POSIX_BASIC (&OnigSyntaxPosixBasic)
-#define ONIG_SYNTAX_POSIX_EXTENDED (&OnigSyntaxPosixExtended)
-#define ONIG_SYNTAX_EMACS (&OnigSyntaxEmacs)
-#define ONIG_SYNTAX_GREP (&OnigSyntaxGrep)
-#define ONIG_SYNTAX_GNU_REGEX (&OnigSyntaxGnuRegex)
-#define ONIG_SYNTAX_JAVA (&OnigSyntaxJava)
-#define ONIG_SYNTAX_PERL (&OnigSyntaxPerl)
-#define ONIG_SYNTAX_RUBY (&OnigSyntaxRuby)
-/* default syntax */
-#define ONIG_SYNTAX_DEFAULT OnigDefaultSyntax
-
-ONIG_EXTERN OnigSyntaxType* OnigDefaultSyntax;
-
-ONIG_EXTERN int onig_set_default_syntax P_((OnigSyntaxType* syntax));
-ONIG_EXTERN void onig_copy_syntax P_((OnigSyntaxType* to, OnigSyntaxType* from));
-#endif /* ONIGURUMA_H */
-
-
-ONIG_EXTERN int regcomp P_((regex_t* reg, const char* pat, int options));
-ONIG_EXTERN int regexec P_((regex_t* reg, const char* str, size_t nmatch, regmatch_t* matches, int options));
-ONIG_EXTERN void regfree P_((regex_t* reg));
-ONIG_EXTERN size_t regerror P_((int code, const regex_t* reg, char* buf, size_t size));
-
-/* extended API */
-ONIG_EXTERN void reg_set_encoding P_((int enc));
-ONIG_EXTERN int reg_name_to_group_numbers P_((regex_t* reg, unsigned char* name, unsigned char* name_end, int** nums));
-ONIG_EXTERN int reg_foreach_name P_((regex_t* reg, int (*func)(unsigned char*,unsigned char*,int,int*,regex_t*,void*), void* arg));
-ONIG_EXTERN int reg_number_of_names P_((regex_t* reg));
-
-#endif /* ONIGPOSIX_H */
diff --git a/ext/mbstring/oniguruma/oniguruma.h b/ext/mbstring/oniguruma/oniguruma.h
deleted file mode 100644
index 99f6bdab0d..0000000000
--- a/ext/mbstring/oniguruma/oniguruma.h
+++ /dev/null
@@ -1,717 +0,0 @@
-/**********************************************************************
-
- oniguruma.h - Oniguruma (regular expression library)
-
- Copyright (C) 2002-2004 K.Kosako (kosako@sofnec.co.jp)
-
-**********************************************************************/
-#ifndef ONIGURUMA_H
-#define ONIGURUMA_H
-
-#include "php_onig_compat.h"
-
-#define ONIGURUMA
-#define ONIGURUMA_VERSION_MAJOR 2
-#define ONIGURUMA_VERSION_MINOR 2
-#define ONIGURUMA_VERSION_TEENY 4
-
-#ifndef P_
-#if defined(__STDC__) || defined(_WIN32)
-# define P_(args) args
-#else
-# define P_(args) ()
-#endif
-#endif
-
-#ifndef PV_
-#ifdef HAVE_STDARG_PROTOTYPES
-# define PV_(args) args
-#else
-# define PV_(args) ()
-#endif
-#endif
-
-#ifndef ONIG_EXTERN
-#if defined(_WIN32) && !defined(__CYGWIN__)
-#if defined(EXPORT) || defined(RUBY_EXPORT)
-#define ONIG_EXTERN extern __declspec(dllexport)
-#else
-#define ONIG_EXTERN extern __declspec(dllimport)
-#endif
-#endif
-#endif
-
-#ifndef ONIG_EXTERN
-#define ONIG_EXTERN extern
-#endif
-
-/* PART: character encoding */
-
-typedef unsigned char UChar;
-typedef unsigned long OnigCodePoint;
-typedef unsigned int OnigDistance;
-
-#define ONIG_INFINITE_DISTANCE ~((OnigDistance )0)
-
-typedef struct {
- OnigCodePoint from;
- OnigCodePoint to;
-} OnigCodePointRange;
-
-#define ONIGENC_FOLD_MATCH_MAX_TARGET_NUM_SIZE 16
-typedef struct {
- int target_num;
- int target_byte_len[ONIGENC_FOLD_MATCH_MAX_TARGET_NUM_SIZE];
- UChar* target_str[ONIGENC_FOLD_MATCH_MAX_TARGET_NUM_SIZE];
-} OnigEncFoldMatchInfo;
-
-
-#if defined(RUBY_PLATFORM) && defined(M17N_H)
-
-#define ONIG_RUBY_M17N
-typedef m17n_encoding* OnigEncoding;
-
-#else
-
-typedef struct {
- const char len_table[256];
- const char* name;
- int max_enc_len;
- int is_fold_match;
- int ctype_support_level; /* sb-only/full */
- int is_continuous_sb_mb; /* code point is continuous from sb to mb */
- OnigCodePoint (*mbc_to_code)(UChar* p, UChar* end);
- int (*code_to_mbclen)(OnigCodePoint code);
- int (*code_to_mbc)(OnigCodePoint code, UChar *buf);
- int (*mbc_to_lower)(UChar* p, UChar* lower);
- int (*mbc_is_case_ambig)(UChar* p);
- int (*code_is_ctype)(OnigCodePoint code, unsigned int ctype);
- int (*get_ctype_code_range)(int ctype, int* nsb, int* nmb, OnigCodePointRange* sbr[], OnigCodePointRange* mbr[]);
- UChar* (*left_adjust_char_head)(UChar* start, UChar* s);
- int (*is_allowed_reverse_match)(UChar* p, UChar* e);
- int (*get_all_fold_match_code)(OnigCodePoint** codes);
- int (*get_fold_match_info)(UChar* p, UChar* end, OnigEncFoldMatchInfo** info);
-} OnigEncodingType;
-
-typedef OnigEncodingType* OnigEncoding;
-
-ONIG_EXTERN OnigEncodingType OnigEncodingASCII;
-ONIG_EXTERN OnigEncodingType OnigEncodingISO_8859_1;
-ONIG_EXTERN OnigEncodingType OnigEncodingISO_8859_2;
-ONIG_EXTERN OnigEncodingType OnigEncodingISO_8859_3;
-ONIG_EXTERN OnigEncodingType OnigEncodingISO_8859_4;
-ONIG_EXTERN OnigEncodingType OnigEncodingISO_8859_5;
-ONIG_EXTERN OnigEncodingType OnigEncodingISO_8859_6;
-ONIG_EXTERN OnigEncodingType OnigEncodingISO_8859_7;
-ONIG_EXTERN OnigEncodingType OnigEncodingISO_8859_8;
-ONIG_EXTERN OnigEncodingType OnigEncodingISO_8859_9;
-ONIG_EXTERN OnigEncodingType OnigEncodingISO_8859_10;
-ONIG_EXTERN OnigEncodingType OnigEncodingISO_8859_11;
-ONIG_EXTERN OnigEncodingType OnigEncodingISO_8859_13;
-ONIG_EXTERN OnigEncodingType OnigEncodingISO_8859_14;
-ONIG_EXTERN OnigEncodingType OnigEncodingISO_8859_15;
-ONIG_EXTERN OnigEncodingType OnigEncodingISO_8859_16;
-ONIG_EXTERN OnigEncodingType OnigEncodingUTF8;
-ONIG_EXTERN OnigEncodingType OnigEncodingEUC_JP;
-ONIG_EXTERN OnigEncodingType OnigEncodingEUC_TW;
-ONIG_EXTERN OnigEncodingType OnigEncodingEUC_KR;
-ONIG_EXTERN OnigEncodingType OnigEncodingEUC_CN;
-ONIG_EXTERN OnigEncodingType OnigEncodingSJIS;
-ONIG_EXTERN OnigEncodingType OnigEncodingKOI8;
-ONIG_EXTERN OnigEncodingType OnigEncodingKOI8_R;
-ONIG_EXTERN OnigEncodingType OnigEncodingBIG5;
-
-#define ONIG_ENCODING_ASCII (&OnigEncodingASCII)
-#define ONIG_ENCODING_ISO_8859_1 (&OnigEncodingISO_8859_1)
-#define ONIG_ENCODING_ISO_8859_2 (&OnigEncodingISO_8859_2)
-#define ONIG_ENCODING_ISO_8859_3 (&OnigEncodingISO_8859_3)
-#define ONIG_ENCODING_ISO_8859_4 (&OnigEncodingISO_8859_4)
-#define ONIG_ENCODING_ISO_8859_5 (&OnigEncodingISO_8859_5)
-#define ONIG_ENCODING_ISO_8859_6 (&OnigEncodingISO_8859_6)
-#define ONIG_ENCODING_ISO_8859_7 (&OnigEncodingISO_8859_7)
-#define ONIG_ENCODING_ISO_8859_8 (&OnigEncodingISO_8859_8)
-#define ONIG_ENCODING_ISO_8859_9 (&OnigEncodingISO_8859_9)
-#define ONIG_ENCODING_ISO_8859_10 (&OnigEncodingISO_8859_10)
-#define ONIG_ENCODING_ISO_8859_11 (&OnigEncodingISO_8859_11)
-#define ONIG_ENCODING_ISO_8859_13 (&OnigEncodingISO_8859_13)
-#define ONIG_ENCODING_ISO_8859_14 (&OnigEncodingISO_8859_14)
-#define ONIG_ENCODING_ISO_8859_15 (&OnigEncodingISO_8859_15)
-#define ONIG_ENCODING_ISO_8859_16 (&OnigEncodingISO_8859_16)
-#define ONIG_ENCODING_UTF8 (&OnigEncodingUTF8)
-#define ONIG_ENCODING_EUC_JP (&OnigEncodingEUC_JP)
-#define ONIG_ENCODING_EUC_TW (&OnigEncodingEUC_TW)
-#define ONIG_ENCODING_EUC_KR (&OnigEncodingEUC_KR)
-#define ONIG_ENCODING_EUC_CN (&OnigEncodingEUC_CN)
-#define ONIG_ENCODING_SJIS (&OnigEncodingSJIS)
-#define ONIG_ENCODING_KOI8 (&OnigEncodingKOI8)
-#define ONIG_ENCODING_KOI8_R (&OnigEncodingKOI8_R)
-#define ONIG_ENCODING_BIG5 (&OnigEncodingBIG5)
-
-#endif /* else RUBY && M17N */
-
-#define ONIG_ENCODING_UNDEF ((OnigEncoding )0)
-
-
-/* work size */
-#define ONIGENC_CODE_TO_MBC_MAXLEN 7
-#define ONIGENC_MBC_TO_LOWER_MAXLEN ONIGENC_CODE_TO_MBC_MAXLEN
-
-/* character types */
-#define ONIGENC_CTYPE_ALPHA (1<< 0)
-#define ONIGENC_CTYPE_BLANK (1<< 1)
-#define ONIGENC_CTYPE_CNTRL (1<< 2)
-#define ONIGENC_CTYPE_DIGIT (1<< 3)
-#define ONIGENC_CTYPE_GRAPH (1<< 4)
-#define ONIGENC_CTYPE_LOWER (1<< 5)
-#define ONIGENC_CTYPE_PRINT (1<< 6)
-#define ONIGENC_CTYPE_PUNCT (1<< 7)
-#define ONIGENC_CTYPE_SPACE (1<< 8)
-#define ONIGENC_CTYPE_UPPER (1<< 9)
-#define ONIGENC_CTYPE_XDIGIT (1<<10)
-#define ONIGENC_CTYPE_WORD (1<<11)
-#define ONIGENC_CTYPE_ASCII (1<<12)
-#define ONIGENC_CTYPE_ALNUM (ONIGENC_CTYPE_ALPHA | ONIGENC_CTYPE_DIGIT)
-
-/* ctype support level */
-#define ONIGENC_CTYPE_SUPPORT_LEVEL_SB 0
-#define ONIGENC_CTYPE_SUPPORT_LEVEL_FULL 1
-
-
-#define enc_len(enc,byte) ONIGENC_MBC_LEN_BY_HEAD(enc,byte)
-
-#define ONIGENC_IS_UNDEF(enc) ((enc) == ONIG_ENCODING_UNDEF)
-#define ONIGENC_IS_SINGLEBYTE(enc) (ONIGENC_MBC_MAXLEN(enc) == 1)
-#define ONIGENC_IS_MBC_HEAD(enc,byte) (ONIGENC_MBC_LEN_BY_HEAD(enc,byte) != 1)
-#define ONIGENC_IS_MBC_ASCII(p) (*(p) < 128)
-#define ONIGENC_IS_CODE_ASCII(code) ((code) < 128)
-#define ONIGENC_IS_CODE_SB_WORD(enc,code) \
- (ONIGENC_IS_CODE_ASCII(code) && ONIGENC_IS_CODE_WORD(enc,code))
-#define ONIGENC_IS_MBC_WORD(enc,s,end) \
- ONIGENC_IS_CODE_WORD(enc,ONIGENC_MBC_TO_CODE(enc,s,end))
-
-
-#ifdef ONIG_RUBY_M17N
-
-#include <ctype.h> /* for isblank(), isgraph() */
-
-#define ONIGENC_MBC_TO_LOWER(enc,p,buf) onigenc_mbc_to_lower(enc,p,buf)
-#define ONIGENC_IS_MBC_CASE_AMBIG(enc,p) onigenc_mbc_is_case_ambig(enc,p)
-
-#define ONIGENC_IS_FOLD_MATCH(enc) FALSE
-#define ONIGENC_IS_CONTINUOUS_SB_MB(enc) FALSE
-#define ONIGENC_CTYPE_SUPPORT_LEVEL(enc) ONIGENC_CTYPE_SUPPORT_LEVEL_SB
-#define ONIGENC_IS_ALLOWED_REVERSE_MATCH(enc,s,end) \
- onigenc_is_allowed_reverse_match(enc, s, end)
-#define ONIGENC_LEFT_ADJUST_CHAR_HEAD(enc,start,s) \
- onigenc_get_left_adjust_char_head(enc, start, s)
-#define ONIGENC_GET_ALL_FOLD_MATCH_CODE(enc,codes) 0
-#define ONIGENC_GET_FOLD_MATCH_INFO(enc,p,end,info) ONIG_NO_SUPPORT_CONFIG
-#define ONIGENC_GET_CTYPE_CODE_RANGE(enc,ctype,nsb,nmb,sbr,mbr) \
- ONIG_NO_SUPPORT_CONFIG
-#define ONIGENC_MBC_LEN_BY_HEAD(enc,b) m17n_mbclen(enc,(int )b)
-#define ONIGENC_MBC_MAXLEN(enc) m17n_mbmaxlen(enc)
-#define ONIGENC_MBC_MAXLEN_DIST(enc) \
- (ONIGENC_MBC_MAXLEN(enc) > 0 ? ONIGENC_MBC_MAXLEN(enc) \
- : ONIG_INFINITE_DISTANCE)
-#define ONIGENC_MBC_TO_CODE(enc,p,e) m17n_codepoint((enc),(p),(e))
-#define ONIGENC_CODE_TO_MBCLEN(enc,code) m17n_codelen((enc),(code))
-#define ONIGENC_CODE_TO_MBC(enc,code,buf) onigenc_code_to_mbc(enc, code, buf)
-
-#if 0
-#define ONIGENC_STEP_BACK(enc,start,s,n) /* !! not supported !! */
-#endif
-
-#define ONIGENC_IS_CODE_CTYPE(enc,code,ctype) \
- onigenc_is_code_ctype(enc,code,ctype)
-
-#ifdef isblank
-# define ONIGENC_IS_CODE_BLANK(enc,code) isblank((int )code)
-#else
-# define ONIGENC_IS_CODE_BLANK(enc,code) ((code) == ' ' || (code) == '\t')
-#endif
-#ifdef isgraph
-# define ONIGENC_IS_CODE_GRAPH(enc,code) isgraph((int )code)
-#else
-# define ONIGENC_IS_CODE_GRAPH(enc,code) \
- (isprint((int )code) && !isspace((int )code))
-#endif
-
-#define ONIGENC_IS_CODE_PRINT(enc,code) m17n_isprint(enc,code)
-#define ONIGENC_IS_CODE_ALNUM(enc,code) m17n_isalnum(enc,code)
-#define ONIGENC_IS_CODE_ALPHA(enc,code) m17n_isalpha(enc,code)
-#define ONIGENC_IS_CODE_LOWER(enc,code) m17n_islower(enc,code)
-#define ONIGENC_IS_CODE_UPPER(enc,code) m17n_isupper(enc,code)
-#define ONIGENC_IS_CODE_CNTRL(enc,code) m17n_iscntrl(enc,code)
-#define ONIGENC_IS_CODE_PUNCT(enc,code) m17n_ispunct(enc,code)
-#define ONIGENC_IS_CODE_SPACE(enc,code) m17n_isspace(enc,code)
-#define ONIGENC_IS_CODE_DIGIT(enc,code) m17n_isdigit(enc,code)
-#define ONIGENC_IS_CODE_XDIGIT(enc,code) m17n_isxdigit(enc,code)
-#define ONIGENC_IS_CODE_WORD(enc,code) m17n_iswchar(enc,code)
-
-ONIG_EXTERN
-int onigenc_is_code_ctype P_((OnigEncoding enc, OnigCodePoint code, int ctype));
-ONIG_EXTERN
-int onigenc_code_to_mbc P_((OnigEncoding enc, OnigCodePoint code, UChar *buf));
-ONIG_EXTERN
-int onigenc_mbc_to_lower P_((OnigEncoding enc, UChar* p, UChar* buf));
-ONIG_EXTERN
-int onigenc_mbc_is_case_ambig P_((OnigEncoding enc, UChar* p));
-ONIG_EXTERN
-int onigenc_is_allowed_reverse_match P_((OnigEncoding enc, UChar* s, UChar* end));
-
-#else /* ONIG_RUBY_M17N */
-
-#define ONIGENC_NAME(enc) ((enc)->name)
-
-#define ONIGENC_MBC_TO_LOWER(enc,p,buf) (enc)->mbc_to_lower(p,buf)
-#define ONIGENC_IS_MBC_CASE_AMBIG(enc,p) (enc)->mbc_is_case_ambig(p)
-
-#define ONIGENC_IS_FOLD_MATCH(enc) ((enc)->is_fold_match)
-#define ONIGENC_IS_CONTINUOUS_SB_MB(enc) ((enc)->is_continuous_sb_mb)
-#define ONIGENC_CTYPE_SUPPORT_LEVEL(enc) ((enc)->ctype_support_level)
-#define ONIGENC_IS_ALLOWED_REVERSE_MATCH(enc,s,end) \
- (enc)->is_allowed_reverse_match(s,end)
-#define ONIGENC_LEFT_ADJUST_CHAR_HEAD(enc,start,s) \
- (enc)->left_adjust_char_head(start, s)
-#define ONIGENC_GET_ALL_FOLD_MATCH_CODE(enc,codes) \
- (enc)->get_all_fold_match_code(codes)
-#define ONIGENC_GET_FOLD_MATCH_INFO(enc,p,end,info) \
- (enc)->get_fold_match_info(p,end,info)
-#define ONIGENC_STEP_BACK(enc,start,s,n) \
- onigenc_step_back((enc),(start),(s),(n))
-
-#define ONIGENC_MBC_LEN_BY_HEAD(enc,byte) ((enc)->len_table[(int )(byte)])
-#define ONIGENC_MBC_MAXLEN(enc) ((enc)->max_enc_len)
-#define ONIGENC_MBC_MAXLEN_DIST(enc) ONIGENC_MBC_MAXLEN(enc)
-#define ONIGENC_MBC_TO_CODE(enc,p,e) (enc)->mbc_to_code((p),(e))
-#define ONIGENC_CODE_TO_MBCLEN(enc,code) (enc)->code_to_mbclen(code)
-#define ONIGENC_CODE_TO_MBC(enc,code,buf) (enc)->code_to_mbc(code,buf)
-
-#define ONIGENC_IS_CODE_CTYPE(enc,code,ctype) (enc)->code_is_ctype(code,ctype)
-
-#define ONIGENC_IS_CODE_GRAPH(enc,code) \
- ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_GRAPH)
-#define ONIGENC_IS_CODE_PRINT(enc,code) \
- ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_PRINT)
-#define ONIGENC_IS_CODE_ALNUM(enc,code) \
- ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_ALNUM)
-#define ONIGENC_IS_CODE_ALPHA(enc,code) \
- ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_ALPHA)
-#define ONIGENC_IS_CODE_LOWER(enc,code) \
- ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_LOWER)
-#define ONIGENC_IS_CODE_UPPER(enc,code) \
- ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_UPPER)
-#define ONIGENC_IS_CODE_CNTRL(enc,code) \
- ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_CNTRL)
-#define ONIGENC_IS_CODE_PUNCT(enc,code) \
- ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_PUNCT)
-#define ONIGENC_IS_CODE_SPACE(enc,code) \
- ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_SPACE)
-#define ONIGENC_IS_CODE_BLANK(enc,code) \
- ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_BLANK)
-#define ONIGENC_IS_CODE_DIGIT(enc,code) \
- ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_DIGIT)
-#define ONIGENC_IS_CODE_XDIGIT(enc,code) \
- ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_XDIGIT)
-#define ONIGENC_IS_CODE_WORD(enc,code) \
- ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_WORD)
-
-#define ONIGENC_GET_CTYPE_CODE_RANGE(enc,ctype,nsb,nmb,sbr,mbr) \
- (enc)->get_ctype_code_range(ctype,nsb,nmb,sbr,mbr)
-
-ONIG_EXTERN
-UChar* onigenc_step_back P_((OnigEncoding enc, UChar* start, UChar* s, int n));
-
-#endif /* is not ONIG_RUBY_M17N */
-
-
-/* encoding API */
-ONIG_EXTERN
-int onigenc_init P_(());
-ONIG_EXTERN
-int onigenc_set_default_encoding P_((OnigEncoding enc));
-ONIG_EXTERN
-OnigEncoding onigenc_get_default_encoding P_(());
-ONIG_EXTERN
-void onigenc_set_default_caseconv_table P_((UChar* table));
-ONIG_EXTERN
-UChar* onigenc_get_right_adjust_char_head_with_prev P_((OnigEncoding enc, UChar* start, UChar* s, UChar** prev));
-ONIG_EXTERN
-UChar* onigenc_get_prev_char_head P_((OnigEncoding enc, UChar* start, UChar* s));
-ONIG_EXTERN
-UChar* onigenc_get_left_adjust_char_head P_((OnigEncoding enc, UChar* start, UChar* s));
-ONIG_EXTERN
-UChar* onigenc_get_right_adjust_char_head P_((OnigEncoding enc, UChar* start, UChar* s));
-
-
-
-/* PART: regular expression */
-
-/* config parameters */
-#define ONIG_NREGION 10
-#define ONIG_MAX_BACKREF_NUM 1000
-#define ONIG_MAX_REPEAT_NUM 100000
-#define ONIG_MAX_MULTI_BYTE_RANGES_NUM 1000
-/* constants */
-#define ONIG_MAX_ERROR_MESSAGE_LEN 90
-
-#if defined(RUBY_PLATFORM) && !defined(ONIG_RUBY_M17N)
-ONIG_EXTERN OnigEncoding OnigEncDefaultCharEncoding;
-#undef ismbchar
-#define ismbchar(c) (mbclen((c)) != 1)
-#define mbclen(c) (OnigEncDefaultCharEncoding->len_table[(unsigned char )(c)])
-#endif
-
-typedef unsigned int OnigOptionType;
-
-#define ONIG_OPTION_DEFAULT ONIG_OPTION_NONE
-
-/* options */
-#define ONIG_OPTION_NONE 0
-#define ONIG_OPTION_IGNORECASE 1L
-#define ONIG_OPTION_EXTEND (ONIG_OPTION_IGNORECASE << 1)
-#define ONIG_OPTION_MULTILINE (ONIG_OPTION_EXTEND << 1)
-#define ONIG_OPTION_SINGLELINE (ONIG_OPTION_MULTILINE << 1)
-#define ONIG_OPTION_FIND_LONGEST (ONIG_OPTION_SINGLELINE << 1)
-#define ONIG_OPTION_FIND_NOT_EMPTY (ONIG_OPTION_FIND_LONGEST << 1)
-#define ONIG_OPTION_NEGATE_SINGLELINE (ONIG_OPTION_FIND_NOT_EMPTY << 1)
-#define ONIG_OPTION_DONT_CAPTURE_GROUP (ONIG_OPTION_NEGATE_SINGLELINE << 1)
-#define ONIG_OPTION_CAPTURE_GROUP (ONIG_OPTION_DONT_CAPTURE_GROUP << 1)
-/* options (search time) */
-#define ONIG_OPTION_NOTBOL (ONIG_OPTION_CAPTURE_GROUP << 1)
-#define ONIG_OPTION_NOTEOL (ONIG_OPTION_NOTBOL << 1)
-#define ONIG_OPTION_POSIX_REGION (ONIG_OPTION_NOTEOL << 1)
-
-#define ONIG_OPTION_ON(options,regopt) ((options) |= (regopt))
-#define ONIG_OPTION_OFF(options,regopt) ((options) &= ~(regopt))
-#define ONIG_IS_OPTION_ON(options,option) ((options) & (option))
-
-/* syntax */
-typedef struct {
- unsigned int op;
- unsigned int op2;
- unsigned int behavior;
- OnigOptionType options; /* default option */
-} OnigSyntaxType;
-
-ONIG_EXTERN OnigSyntaxType OnigSyntaxPosixBasic;
-ONIG_EXTERN OnigSyntaxType OnigSyntaxPosixExtended;
-ONIG_EXTERN OnigSyntaxType OnigSyntaxEmacs;
-ONIG_EXTERN OnigSyntaxType OnigSyntaxGrep;
-ONIG_EXTERN OnigSyntaxType OnigSyntaxGnuRegex;
-ONIG_EXTERN OnigSyntaxType OnigSyntaxJava;
-ONIG_EXTERN OnigSyntaxType OnigSyntaxPerl;
-ONIG_EXTERN OnigSyntaxType OnigSyntaxRuby;
-
-/* predefined syntaxes (see regparse.c) */
-#define ONIG_SYNTAX_POSIX_BASIC (&OnigSyntaxPosixBasic)
-#define ONIG_SYNTAX_POSIX_EXTENDED (&OnigSyntaxPosixExtended)
-#define ONIG_SYNTAX_EMACS (&OnigSyntaxEmacs)
-#define ONIG_SYNTAX_GREP (&OnigSyntaxGrep)
-#define ONIG_SYNTAX_GNU_REGEX (&OnigSyntaxGnuRegex)
-#define ONIG_SYNTAX_JAVA (&OnigSyntaxJava)
-#define ONIG_SYNTAX_PERL (&OnigSyntaxPerl)
-#define ONIG_SYNTAX_RUBY (&OnigSyntaxRuby)
-
-/* default syntax */
-ONIG_EXTERN OnigSyntaxType* OnigDefaultSyntax;
-#define ONIG_SYNTAX_DEFAULT OnigDefaultSyntax
-
-/* syntax (operators) */
-#define ONIG_SYN_OP_VARIABLE_META_CHARACTERS (1<<0)
-#define ONIG_SYN_OP_DOT_ANYCHAR (1<<1) /* . */
-#define ONIG_SYN_OP_ASTERISK_ZERO_INF (1<<2) /* * */
-#define ONIG_SYN_OP_ESC_ASTERISK_ZERO_INF (1<<3)
-#define ONIG_SYN_OP_PLUS_ONE_INF (1<<4) /* + */
-#define ONIG_SYN_OP_ESC_PLUS_ONE_INF (1<<5)
-#define ONIG_SYN_OP_QMARK_ZERO_ONE (1<<6) /* ? */
-#define ONIG_SYN_OP_ESC_QMARK_ZERO_ONE (1<<7)
-#define ONIG_SYN_OP_BRACE_INTERVAL (1<<8) /* {lower,upper} */
-#define ONIG_SYN_OP_ESC_BRACE_INTERVAL (1<<9) /* \{lower,upper\} */
-#define ONIG_SYN_OP_VBAR_ALT (1<<10) /* | */
-#define ONIG_SYN_OP_ESC_VBAR_ALT (1<<11) /* \| */
-#define ONIG_SYN_OP_LPAREN_SUBEXP (1<<12) /* (...) */
-#define ONIG_SYN_OP_ESC_LPAREN_SUBEXP (1<<13) /* \(...\) */
-#define ONIG_SYN_OP_ESC_AZ_BUF_ANCHOR (1<<14) /* \A, \Z, \z */
-#define ONIG_SYN_OP_ESC_CAPITAL_G_BEGIN_ANCHOR (1<<15) /* \G */
-#define ONIG_SYN_OP_DECIMAL_BACKREF (1<<16) /* \num */
-#define ONIG_SYN_OP_BRACKET_CC (1<<17) /* [...] */
-#define ONIG_SYN_OP_ESC_W_WORD (1<<18) /* \w, \W */
-#define ONIG_SYN_OP_ESC_LTGT_WORD_BEGIN_END (1<<19) /* \<. \> */
-#define ONIG_SYN_OP_ESC_B_WORD_BOUND (1<<20) /* \b, \B */
-#define ONIG_SYN_OP_ESC_S_WHITE_SPACE (1<<21) /* \s, \S */
-#define ONIG_SYN_OP_ESC_D_DIGIT (1<<22) /* \d, \D */
-#define ONIG_SYN_OP_LINE_ANCHOR (1<<23) /* ^, $ */
-#define ONIG_SYN_OP_POSIX_BRACKET (1<<24) /* [:xxxx:] */
-#define ONIG_SYN_OP_QMARK_NON_GREEDY (1<<25) /* ??,*?,+?,{n,m}? */
-#define ONIG_SYN_OP_ESC_CONTROL_CHARS (1<<26) /* \n,\r,\t,\a ... */
-#define ONIG_SYN_OP_ESC_C_CONTROL (1<<27) /* \cx */
-#define ONIG_SYN_OP_ESC_OCTAL3 (1<<28) /* \OOO */
-#define ONIG_SYN_OP_ESC_X_HEX2 (1<<29) /* \xHH */
-#define ONIG_SYN_OP_ESC_X_BRACE_HEX8 (1<<30) /* \x{7HHHHHHH} */
-
-#define ONIG_SYN_OP2_ESC_CAPITAL_Q_QUOTE (1<<0) /* \Q...\E */
-#define ONIG_SYN_OP2_QMARK_GROUP_EFFECT (1<<1) /* (?...) */
-#define ONIG_SYN_OP2_OPTION_PERL (1<<2) /* (?imsx),(?-imsx) */
-#define ONIG_SYN_OP2_OPTION_RUBY (1<<3) /* (?imx), (?-imx) */
-#define ONIG_SYN_OP2_PLUS_POSSESSIVE_REPEAT (1<<4) /* ?+,*+,++ */
-#define ONIG_SYN_OP2_PLUS_POSSESSIVE_INTERVAL (1<<5) /* {n,m}+ */
-#define ONIG_SYN_OP2_CCLASS_SET_OP (1<<6) /* [...&&..[..]..] */
-#define ONIG_SYN_OP2_QMARK_LT_NAMED_GROUP (1<<7) /* (?<name>...) */
-#define ONIG_SYN_OP2_ESC_K_NAMED_BACKREF (1<<8) /* \k<name> */
-#define ONIG_SYN_OP2_ESC_G_SUBEXP_CALL (1<<9) /* \g<name>, \g<n> */
-#define ONIG_SYN_OP2_ATMARK_CAPTURE_HISTORY (1<<10) /* (?@..),(?@<x>..) */
-#define ONIG_SYN_OP2_ESC_CAPITAL_C_BAR_CONTROL (1<<11) /* \C-x */
-#define ONIG_SYN_OP2_ESC_CAPITAL_M_BAR_META (1<<12) /* \M-x */
-#define ONIG_SYN_OP2_ESC_V_VTAB (1<<13) /* \v as VTAB */
-#define ONIG_SYN_OP2_ESC_U_HEX4 (1<<14) /* \uHHHH */
-#define ONIG_SYN_OP2_ESC_GNU_BUF_ANCHOR (1<<15) /* \`, \' */
-#define ONIG_SYN_OP2_ESC_P_CHAR_PROPERTY (1<<16) /* \p{...}, \P{...} */
-
-/* syntax (behavior) */
-#define ONIG_SYN_CONTEXT_INDEP_ANCHORS (1<<31) /* not implemented */
-#define ONIG_SYN_CONTEXT_INDEP_REPEAT_OPS (1<<0) /* ?, *, +, {n,m} */
-#define ONIG_SYN_CONTEXT_INVALID_REPEAT_OPS (1<<1) /* error or ignore */
-#define ONIG_SYN_ALLOW_UNMATCHED_CLOSE_SUBEXP (1<<2) /* ...)... */
-#define ONIG_SYN_ALLOW_INVALID_INTERVAL (1<<3) /* {??? */
-#define ONIG_SYN_ALLOW_INTERVAL_LOW_ABBREV (1<<4) /* {,n} => {0,n} */
-#define ONIG_SYN_STRICT_CHECK_BACKREF (1<<5) /* /(\1)/,/\1()/ ..*/
-#define ONIG_SYN_DIFFERENT_LEN_ALT_LOOK_BEHIND (1<<6) /* (?<=a|bc) */
-#define ONIG_SYN_CAPTURE_ONLY_NAMED_GROUP (1<<7) /* see doc/RE */
-#define ONIG_SYN_ALLOW_MULTIPLEX_DEFINITION_NAME (1<<8) /* (?<x>)(?<x>) */
-
-/* syntax (behavior) in char class [...] */
-#define ONIG_SYN_NOT_NEWLINE_IN_NEGATIVE_CC (1<<20) /* [^...] */
-#define ONIG_SYN_BACKSLASH_ESCAPE_IN_CC (1<<21) /* [..\w..] etc.. */
-#define ONIG_SYN_ALLOW_EMPTY_RANGE_IN_CC (1<<22)
-#define ONIG_SYN_ALLOW_DOUBLE_RANGE_OP_IN_CC (1<<23) /* [0-9-a]=[0-9\-a] */
-/* syntax (behavior) warning */
-#define ONIG_SYN_WARN_CC_OP_NOT_ESCAPED (1<<24) /* [,-,] */
-#define ONIG_SYN_WARN_REDUNDANT_NESTED_REPEAT (1<<25) /* (?:a*)+ */
-
-/* meta character specifiers (onig_set_meta_char()) */
-#define ONIG_META_CHAR_ESCAPE 0
-#define ONIG_META_CHAR_ANYCHAR 1
-#define ONIG_META_CHAR_ANYTIME 2
-#define ONIG_META_CHAR_ZERO_OR_ONE_TIME 3
-#define ONIG_META_CHAR_ONE_OR_MORE_TIME 4
-#define ONIG_META_CHAR_ANYCHAR_ANYTIME 5
-
-#define ONIG_INEFFECTIVE_META_CHAR 0
-
-/* error codes */
-#define ONIG_IS_PATTERN_ERROR(ecode) ((ecode) <= -100 && (ecode) > -1000)
-/* normal return */
-#define ONIG_NORMAL 0
-#define ONIG_MISMATCH -1
-#define ONIG_NO_SUPPORT_CONFIG -2
-/* internal error */
-#define ONIGERR_PARSER_BUG -11
-#define ONIGERR_STACK_BUG -12
-#define ONIGERR_UNDEFINED_BYTECODE -13
-#define ONIGERR_UNEXPECTED_BYTECODE -14
-#define ONIGERR_MATCH_STACK_LIMIT_OVER -15
-#define ONIGERR_DEFAULT_ENCODING_IS_NOT_SETTED -21
-#define ONIGERR_SPECIFIED_ENCODING_CANT_CONVERT_TO_WIDE_CHAR -22
-/* general error */
-#define ONIGERR_INVALID_ARGUMENT -30
-/* syntax error */
-#define ONIGERR_END_PATTERN_AT_LEFT_BRACE -100
-#define ONIGERR_END_PATTERN_AT_LEFT_BRACKET -101
-#define ONIGERR_EMPTY_CHAR_CLASS -102
-#define ONIGERR_PREMATURE_END_OF_CHAR_CLASS -103
-#define ONIGERR_END_PATTERN_AT_BACKSLASH -104
-#define ONIGERR_END_PATTERN_AT_META -105
-#define ONIGERR_END_PATTERN_AT_CONTROL -106
-#define ONIGERR_META_CODE_SYNTAX -108
-#define ONIGERR_CONTROL_CODE_SYNTAX -109
-#define ONIGERR_CHAR_CLASS_VALUE_AT_END_OF_RANGE -110
-#define ONIGERR_CHAR_CLASS_VALUE_AT_START_OF_RANGE -111
-#define ONIGERR_UNMATCHED_RANGE_SPECIFIER_IN_CHAR_CLASS -112
-#define ONIGERR_TARGET_OF_REPEAT_OPERATOR_NOT_SPECIFIED -113
-#define ONIGERR_TARGET_OF_REPEAT_OPERATOR_INVALID -114
-#define ONIGERR_NESTED_REPEAT_OPERATOR -115
-#define ONIGERR_UNMATCHED_CLOSE_PARENTHESIS -116
-#define ONIGERR_END_PATTERN_WITH_UNMATCHED_PARENTHESIS -117
-#define ONIGERR_END_PATTERN_IN_GROUP -118
-#define ONIGERR_UNDEFINED_GROUP_OPTION -119
-#define ONIGERR_INVALID_POSIX_BRACKET_TYPE -121
-#define ONIGERR_INVALID_LOOK_BEHIND_PATTERN -122
-#define ONIGERR_INVALID_REPEAT_RANGE_PATTERN -123
-/* values error (syntax error) */
-#define ONIGERR_TOO_BIG_NUMBER -200
-#define ONIGERR_TOO_BIG_NUMBER_FOR_REPEAT_RANGE -201
-#define ONIGERR_UPPER_SMALLER_THAN_LOWER_IN_REPEAT_RANGE -202
-#define ONIGERR_EMPTY_RANGE_IN_CHAR_CLASS -203
-#define ONIGERR_MISMATCH_CODE_LENGTH_IN_CLASS_RANGE -204
-#define ONIGERR_TOO_MANY_MULTI_BYTE_RANGES -205
-#define ONIGERR_TOO_SHORT_MULTI_BYTE_STRING -206
-#define ONIGERR_TOO_BIG_BACKREF_NUMBER -207
-#define ONIGERR_INVALID_BACKREF -208
-#define ONIGERR_NUMBERED_BACKREF_OR_CALL_NOT_ALLOWED -209
-#define ONIGERR_TOO_LONG_WIDE_CHAR_VALUE -212
-#define ONIGERR_EMPTY_GROUP_NAME -214
-#define ONIGERR_INVALID_GROUP_NAME -215
-#define ONIGERR_INVALID_CHAR_IN_GROUP_NAME -216
-#define ONIGERR_UNDEFINED_NAME_REFERENCE -217
-#define ONIGERR_UNDEFINED_GROUP_REFERENCE -218
-#define ONIGERR_MULTIPLEX_DEFINED_NAME -219
-#define ONIGERR_MULTIPLEX_DEFINITION_NAME_CALL -220
-#define ONIGERR_NEVER_ENDING_RECURSION -221
-#define ONIGERR_GROUP_NUMBER_OVER_FOR_CAPTURE_HISTORY -222
-#define ONIGERR_INVALID_CHAR_PROPERTY_NAME -223
-/* errors related to thread */
-#define ONIGERR_OVER_THREAD_PASS_LIMIT_COUNT -1001
-
-
-/* must be smaller than BIT_STATUS_BITS_NUM (unsigned int * 8) */
-#define ONIG_MAX_CAPTURE_HISTORY_GROUP 31
-#define ONIG_IS_CAPTURE_HISTORY_GROUP(r, i) \
- ((i) <= ONIG_MAX_CAPTURE_HISTORY_GROUP && (r)->list && (r)->list[i])
-
-/* match result region type */
-struct re_registers {
- int allocated;
- int num_regs;
- int* beg;
- int* end;
- /* extended */
- struct re_registers** list; /* capture history. list[1]-list[31] */
-};
-
-#define ONIG_REGION_NOTPOS -1
-
-typedef struct re_registers OnigRegion;
-
-typedef struct {
- UChar* par;
- UChar* par_end;
-} OnigErrorInfo;
-
-typedef struct {
- int lower;
- int upper;
-} OnigRepeatRange;
-
-typedef void (*OnigWarnFunc) P_((char* s));
-extern void onig_null_warn P_((char* s));
-#define ONIG_NULL_WARN onig_null_warn
-
-#define ONIG_CHAR_TABLE_SIZE 256
-
-/* regex_t state */
-#define ONIG_STATE_NORMAL 0
-#define ONIG_STATE_SEARCHING 1
-#define ONIG_STATE_COMPILING -1
-#define ONIG_STATE_MODIFY -2
-
-#define ONIG_STATE(reg) \
- ((reg)->state > 0 ? ONIG_STATE_SEARCHING : (reg)->state)
-
-typedef struct re_pattern_buffer {
- /* common members of BBuf(bytes-buffer) */
- unsigned char* p; /* compiled pattern */
- unsigned int used; /* used space for p */
- unsigned int alloc; /* allocated space for p */
-
- int state; /* normal, searching, compiling */
- int num_mem; /* used memory(...) num counted from 1 */
- int num_repeat; /* OP_REPEAT/OP_REPEAT_NG id-counter */
- int num_null_check; /* OP_NULL_CHECK_START/END id counter */
- int num_call; /* number of subexp call */
- unsigned int capture_history; /* (?@...) flag (1-31) */
- unsigned int bt_mem_start; /* need backtrack flag */
- unsigned int bt_mem_end; /* need backtrack flag */
- int stack_pop_level;
- int repeat_range_alloc;
- OnigRepeatRange* repeat_range;
-
- OnigEncoding enc;
- OnigOptionType options;
- OnigSyntaxType* syntax;
- void* name_table;
-
- /* optimization info (string search, char-map and anchors) */
- int optimize; /* optimize flag */
- int threshold_len; /* search str-length for apply optimize */
- int anchor; /* BEGIN_BUF, BEGIN_POS, (SEMI_)END_BUF */
- OnigDistance anchor_dmin; /* (SEMI_)END_BUF anchor distance */
- OnigDistance anchor_dmax; /* (SEMI_)END_BUF anchor distance */
- int sub_anchor; /* start-anchor for exact or map */
- unsigned char *exact;
- unsigned char *exact_end;
- unsigned char map[ONIG_CHAR_TABLE_SIZE]; /* used as BM skip or char-map */
- int *int_map; /* BM skip for exact_len > 255 */
- int *int_map_backward; /* BM skip for backward search */
- OnigDistance dmin; /* min-distance of exact or map */
- OnigDistance dmax; /* max-distance of exact or map */
-
- /* regex_t link chain */
- struct re_pattern_buffer* chain; /* escape compile-conflict */
-} regex_t;
-
-
-/* Oniguruma Native API */
-ONIG_EXTERN
-int onig_init P_((void));
-ONIG_EXTERN
-int onig_error_code_to_str PV_((UChar* s, int err_code, ...));
-ONIG_EXTERN
-void onig_set_warn_func P_((OnigWarnFunc f));
-ONIG_EXTERN
-void onig_set_verb_warn_func P_((OnigWarnFunc f));
-ONIG_EXTERN
-int onig_new P_((regex_t**, UChar* pattern, UChar* pattern_end, OnigOptionType option, OnigEncoding enc, OnigSyntaxType* syntax, OnigErrorInfo* einfo));
-ONIG_EXTERN
-void onig_free P_((regex_t*));
-ONIG_EXTERN
-int onig_recompile P_((regex_t*, UChar* pattern, UChar* pattern_end, OnigOptionType option, OnigEncoding enc, OnigSyntaxType* syntax, OnigErrorInfo* einfo));
-ONIG_EXTERN
-int onig_search P_((regex_t*, UChar* str, UChar* end, UChar* start, UChar* range, OnigRegion* region, OnigOptionType option));
-ONIG_EXTERN
-int onig_match P_((regex_t*, UChar* str, UChar* end, UChar* at, OnigRegion* region, OnigOptionType option));
-ONIG_EXTERN
-OnigRegion* onig_region_new P_((void));
-ONIG_EXTERN
-void onig_region_free P_((OnigRegion* region, int free_self));
-ONIG_EXTERN
-void onig_region_copy P_((OnigRegion* to, OnigRegion* from));
-ONIG_EXTERN
-void onig_region_clear P_((OnigRegion* region));
-ONIG_EXTERN
-int onig_region_resize P_((OnigRegion* region, int n));
-ONIG_EXTERN
-int onig_name_to_group_numbers P_((regex_t* reg, UChar* name, UChar* name_end,
- int** nums));
-ONIG_EXTERN
-int onig_name_to_backref_number P_((regex_t* reg, UChar* name, UChar* name_end, OnigRegion *region));
-ONIG_EXTERN
-int onig_foreach_name P_((regex_t* reg, int (*func)(UChar*,UChar*,int,int*,regex_t*,void*), void* arg));
-ONIG_EXTERN
-int onig_number_of_names P_((regex_t* reg));
-ONIG_EXTERN
-OnigEncoding onig_get_encoding P_((regex_t* reg));
-ONIG_EXTERN
-OnigOptionType onig_get_options P_((regex_t* reg));
-ONIG_EXTERN
-OnigSyntaxType* onig_get_syntax P_((regex_t* reg));
-ONIG_EXTERN
-int onig_set_default_syntax P_((OnigSyntaxType* syntax));
-ONIG_EXTERN
-void onig_copy_syntax P_((OnigSyntaxType* to, OnigSyntaxType* from));
-ONIG_EXTERN
-void onig_set_syntax_op P_((OnigSyntaxType* syntax, unsigned int op));
-ONIG_EXTERN
-void onig_set_syntax_op2 P_((OnigSyntaxType* syntax, unsigned int op2));
-ONIG_EXTERN
-void onig_set_syntax_behavior P_((OnigSyntaxType* syntax, unsigned int behavior));
-ONIG_EXTERN
-void onig_set_syntax_options P_((OnigSyntaxType* syntax, OnigOptionType options));
-ONIG_EXTERN
-int onig_set_meta_char P_((unsigned int what, unsigned int c));
-ONIG_EXTERN
-int onig_end P_((void));
-ONIG_EXTERN
-const char* onig_version P_((void));
-
-#endif /* ONIGURUMA_H */
diff --git a/ext/mbstring/oniguruma/php_onig_compat.h b/ext/mbstring/oniguruma/php_onig_compat.h
deleted file mode 100644
index d7f1ad56f1..0000000000
--- a/ext/mbstring/oniguruma/php_onig_compat.h
+++ /dev/null
@@ -1,7 +0,0 @@
-#ifndef _PHP_MBREGEX_COMPAT_H
-#define _PHP_MBREGEX_COMPAT_H
-
-#define re_pattern_buffer php_mb_re_pattern_buffer
-#define regex_t php_mb_regex_t
-
-#endif /* _PHP_MBREGEX_COMPAT_H */
diff --git a/ext/mbstring/oniguruma/regcomp.c b/ext/mbstring/oniguruma/regcomp.c
deleted file mode 100644
index 24d44dd1b8..0000000000
--- a/ext/mbstring/oniguruma/regcomp.c
+++ /dev/null
@@ -1,5440 +0,0 @@
-/**********************************************************************
-
- regcomp.c - Oniguruma (regular expression library)
-
- Copyright (C) 2002-2004 K.Kosako (kosako@sofnec.co.jp)
-
-**********************************************************************/
-#include "regparse.h"
-
-#ifndef PLATFORM_UNALIGNED_WORD_ACCESS
-static unsigned char PadBuf[WORD_ALIGNMENT_SIZE];
-#endif
-
-static void
-swap_node(Node* a, Node* b)
-{
- Node c;
- c = *a; *a = *b; *b = c;
-}
-
-static OnigDistance
-distance_add(OnigDistance d1, OnigDistance d2)
-{
- if (d1 == ONIG_INFINITE_DISTANCE || d2 == ONIG_INFINITE_DISTANCE)
- return ONIG_INFINITE_DISTANCE;
- else {
- if (d1 <= ONIG_INFINITE_DISTANCE - d2) return d1 + d2;
- else return ONIG_INFINITE_DISTANCE;
- }
-}
-
-static OnigDistance
-distance_multiply(OnigDistance d, int m)
-{
- if (m == 0) return 0;
-
- if (d < ONIG_INFINITE_DISTANCE / m)
- return d * m;
- else
- return ONIG_INFINITE_DISTANCE;
-}
-
-static int
-bitset_is_empty(BitSetRef bs)
-{
- int i;
- for (i = 0; i < BITSET_SIZE; i++) {
- if (bs[i] != 0) return 0;
- }
- return 1;
-}
-
-#ifdef ONIG_DEBUG
-static int
-bitset_on_num(BitSetRef bs)
-{
- int i, n;
-
- n = 0;
- for (i = 0; i < SINGLE_BYTE_SIZE; i++) {
- if (BITSET_AT(bs, i)) n++;
- }
- return n;
-}
-#endif
-
-extern int
-onig_bbuf_init(BBuf* buf, int size)
-{
- buf->p = (UChar* )xmalloc(size);
- if (IS_NULL(buf->p)) return(ONIGERR_MEMORY);
-
- buf->alloc = size;
- buf->used = 0;
- return 0;
-}
-
-
-#ifdef USE_SUBEXP_CALL
-
-static int
-unset_addr_list_init(UnsetAddrList* uslist, int size)
-{
- UnsetAddr* p;
-
- p = (UnsetAddr* )xmalloc(sizeof(UnsetAddr)* size);
- CHECK_NULL_RETURN_VAL(p, ONIGERR_MEMORY);
- uslist->num = 0;
- uslist->alloc = size;
- uslist->us = p;
- return 0;
-}
-
-static void
-unset_addr_list_end(UnsetAddrList* uslist)
-{
- if (IS_NOT_NULL(uslist->us))
- xfree(uslist->us);
-}
-
-static int
-unset_addr_list_add(UnsetAddrList* uslist, int offset, struct _Node* node)
-{
- UnsetAddr* p;
- int size;
-
- if (uslist->num >= uslist->alloc) {
- size = uslist->alloc * 2;
- p = (UnsetAddr* )xrealloc(uslist->us, sizeof(UnsetAddr) * size);
- CHECK_NULL_RETURN_VAL(p, ONIGERR_MEMORY);
- uslist->alloc = size;
- uslist->us = p;
- }
-
- uslist->us[uslist->num].offset = offset;
- uslist->us[uslist->num].target = node;
- uslist->num++;
- return 0;
-}
-#endif /* USE_SUBEXP_CALL */
-
-
-#if 0
-static int
-bitset_mbmaxlen(BitSetRef bs, int negative, OnigEncoding enc)
-{
- int i;
- int len, maxlen = 0;
-
- if (negative) {
- for (i = 0; i < SINGLE_BYTE_SIZE; i++) {
- if (! BITSET_AT(bs, i)) {
- len = enc_len(enc, i);
- if (len > maxlen) maxlen = len;
- }
- }
- }
- else {
- for (i = 0; i < SINGLE_BYTE_SIZE; i++) {
- if (BITSET_AT(bs, i)) {
- len = enc_len(enc, i);
- if (len > maxlen) maxlen = len;
- }
- }
- }
- return maxlen;
-}
-#endif
-
-static int
-add_opcode(regex_t* reg, int opcode)
-{
- BBUF_ADD1(reg, opcode);
- return 0;
-}
-
-static int
-add_rel_addr(regex_t* reg, int addr)
-{
- RelAddrType ra = (RelAddrType )addr;
-
-#ifdef PLATFORM_UNALIGNED_WORD_ACCESS
- BBUF_ADD(reg, &ra, SIZE_RELADDR);
-#else
- UChar buf[SERIALIZE_BUFSIZE];
- SERIALIZE_RELADDR(ra, buf);
- BBUF_ADD(reg, buf, SIZE_RELADDR);
-#endif
- return 0;
-}
-
-static int
-add_abs_addr(regex_t* reg, int addr)
-{
- AbsAddrType ra = (AbsAddrType )addr;
-
-#ifdef PLATFORM_UNALIGNED_WORD_ACCESS
- BBUF_ADD(reg, &ra, SIZE_ABSADDR);
-#else
- UChar buf[SERIALIZE_BUFSIZE];
- SERIALIZE_ABSADDR(ra, buf);
- BBUF_ADD(reg, buf, SIZE_ABSADDR);
-#endif
- return 0;
-}
-
-static int
-add_length(regex_t* reg, int len)
-{
- LengthType l = (LengthType )len;
-
-#ifdef PLATFORM_UNALIGNED_WORD_ACCESS
- BBUF_ADD(reg, &l, SIZE_LENGTH);
-#else
- UChar buf[SERIALIZE_BUFSIZE];
- SERIALIZE_LENGTH(l, buf);
- BBUF_ADD(reg, buf, SIZE_LENGTH);
-#endif
- return 0;
-}
-
-static int
-add_mem_num(regex_t* reg, int num)
-{
- MemNumType n = (MemNumType )num;
-
-#ifdef PLATFORM_UNALIGNED_WORD_ACCESS
- BBUF_ADD(reg, &n, SIZE_MEMNUM);
-#else
- UChar buf[SERIALIZE_BUFSIZE];
- SERIALIZE_MEMNUM(n, buf);
- BBUF_ADD(reg, buf, SIZE_MEMNUM);
-#endif
- return 0;
-}
-
-#if 0
-static int
-add_repeat_num(regex_t* reg, int num)
-{
- RepeatNumType n = (RepeatNumType )num;
-
-#ifdef PLATFORM_UNALIGNED_WORD_ACCESS
- BBUF_ADD(reg, &n, SIZE_REPEATNUM);
-#else
- UChar buf[SERIALIZE_BUFSIZE];
- SERIALIZE_REPEATNUM(n, buf);
- BBUF_ADD(reg, buf, SIZE_REPEATNUM);
-#endif
- return 0;
-}
-#endif
-
-static int
-add_option(regex_t* reg, OnigOptionType option)
-{
-#ifdef PLATFORM_UNALIGNED_WORD_ACCESS
- BBUF_ADD(reg, &option, SIZE_OPTION);
-#else
- UChar buf[SERIALIZE_BUFSIZE];
- SERIALIZE_OPTION(option, buf);
- BBUF_ADD(reg, buf, SIZE_OPTION);
-#endif
- return 0;
-}
-
-static int
-add_opcode_rel_addr(regex_t* reg, int opcode, int addr)
-{
- int r;
-
- r = add_opcode(reg, opcode);
- if (r) return r;
- r = add_rel_addr(reg, addr);
- return r;
-}
-
-static int
-add_bytes(regex_t* reg, UChar* bytes, int len)
-{
- BBUF_ADD(reg, bytes, len);
- return 0;
-}
-
-static int
-add_bitset(regex_t* reg, BitSetRef bs)
-{
- BBUF_ADD(reg, bs, SIZE_BITSET);
- return 0;
-}
-
-static int
-add_opcode_option(regex_t* reg, int opcode, OnigOptionType option)
-{
- int r;
-
- r = add_opcode(reg, opcode);
- if (r) return r;
- r = add_option(reg, option);
- return r;
-}
-
-static int compile_length_tree(Node* node, regex_t* reg);
-static int compile_tree(Node* node, regex_t* reg);
-
-
-#define IS_NEED_STR_LEN_OP_EXACT(op) \
- ((op) == OP_EXACTN || (op) == OP_EXACTMB2N ||\
- (op) == OP_EXACTMB3N || (op) == OP_EXACTMBN || (op) == OP_EXACTN_IC)
-
-static int
-select_str_opcode(int mb_len, int str_len, int ignore_case)
-{
- int op;
-
- switch (mb_len) {
- case 1:
- if (ignore_case) {
- switch (str_len) {
- case 1: op = OP_EXACT1_IC; break;
- default: op = OP_EXACTN_IC; break;
- }
- }
- else {
- switch (str_len) {
- case 1: op = OP_EXACT1; break;
- case 2: op = OP_EXACT2; break;
- case 3: op = OP_EXACT3; break;
- case 4: op = OP_EXACT4; break;
- case 5: op = OP_EXACT5; break;
- default: op = OP_EXACTN; break;
- }
- }
- break;
-
- case 2:
- switch (str_len) {
- case 1: op = OP_EXACTMB2N1; break;
- case 2: op = OP_EXACTMB2N2; break;
- case 3: op = OP_EXACTMB2N3; break;
- default: op = OP_EXACTMB2N; break;
- }
- break;
-
- case 3:
- op = OP_EXACTMB3N;
- break;
-
- default:
- op = OP_EXACTMBN;
- break;
- }
- return op;
-}
-
-static int
-compile_tree_empty_check(Node* node, regex_t* reg, int empty_info)
-{
- int r;
- int saved_num_null_check = reg->num_null_check;
-
- if (empty_info != 0) {
- r = add_opcode(reg, OP_NULL_CHECK_START);
- if (r) return r;
- r = add_mem_num(reg, reg->num_null_check); /* NULL CHECK ID */
- if (r) return r;
- reg->num_null_check++;
- }
-
- r = compile_tree(node, reg);
- if (r) return r;
-
- if (empty_info != 0) {
- if (empty_info == NQ_TARGET_IS_EMPTY)
- r = add_opcode(reg, OP_NULL_CHECK_END);
- else if (empty_info == NQ_TARGET_IS_EMPTY_MEM)
- r = add_opcode(reg, OP_NULL_CHECK_END_MEMST);
- else if (empty_info == NQ_TARGET_IS_EMPTY_REC)
- r = add_opcode(reg, OP_NULL_CHECK_END_MEMST_PUSH);
-
- if (r) return r;
- r = add_mem_num(reg, saved_num_null_check); /* NULL CHECK ID */
- }
- return r;
-}
-
-#ifdef USE_SUBEXP_CALL
-static int
-compile_call(CallNode* node, regex_t* reg)
-{
- int r;
-
- r = add_opcode(reg, OP_CALL);
- if (r) return r;
- r = unset_addr_list_add(node->unset_addr_list, BBUF_GET_OFFSET_POS(reg),
- node->target);
- if (r) return r;
- r = add_abs_addr(reg, 0 /*dummy addr.*/);
- return r;
-}
-#endif
-
-static int
-compile_tree_n_times(Node* node, int n, regex_t* reg)
-{
- int i, r;
-
- for (i = 0; i < n; i++) {
- r = compile_tree(node, reg);
- if (r) return r;
- }
- return 0;
-}
-
-static int
-add_compile_string_length(UChar* s, int mb_len, int str_len,
- regex_t* reg, int ignore_case)
-{
- int len;
- int op = select_str_opcode(mb_len, str_len, ignore_case);
-
- len = SIZE_OPCODE;
- if (op == OP_EXACTMBN)
- len += SIZE_LENGTH;
-
- if (IS_NEED_STR_LEN_OP_EXACT(op))
- len += SIZE_LENGTH;
-
- len += mb_len * str_len;
- return len;
-}
-
-static int
-add_compile_string(UChar* s, int mb_len, int str_len,
- regex_t* reg, int ignore_case)
-{
- int op = select_str_opcode(mb_len, str_len, ignore_case);
- add_opcode(reg, op);
-
- if (op == OP_EXACTMBN)
- add_length(reg, mb_len);
-
- if (IS_NEED_STR_LEN_OP_EXACT(op))
- add_length(reg, str_len);
-
- add_bytes(reg, s, mb_len * str_len);
- return 0;
-}
-
-
-static int
-compile_length_string_node(StrNode* sn, regex_t* reg)
-{
- int rlen, r, len, prev_len, slen, ambig, ic;
- OnigEncoding enc = reg->enc;
- UChar *p, *prev;
-
- if (sn->end <= sn->s)
- return 0;
-
- ic = IS_IGNORECASE(reg->options);
-
- p = prev = sn->s;
- prev_len = enc_len(enc, *p);
- if (ic != 0 && prev_len == 1)
- ambig = ONIGENC_IS_MBC_CASE_AMBIG(reg->enc, p);
- else
- ambig = 0;
-
- p += prev_len;
- slen = 1;
- rlen = 0;
-
- for (; p < sn->end; ) {
- len = enc_len(enc, *p);
- if (len == prev_len) {
- slen++;
- if (ic != 0 && ambig == 0 && len == 1)
- ambig = ONIGENC_IS_MBC_CASE_AMBIG(reg->enc, p);
- }
- else {
- r = add_compile_string_length(prev, prev_len, slen, reg, ambig);
- rlen += r;
-
- if (ic != 0 && len == 1)
- ambig = ONIGENC_IS_MBC_CASE_AMBIG(reg->enc, p);
- else
- ambig = 0;
-
- prev = p;
- slen = 1;
- prev_len = len;
- }
-
- p += len;
- }
- r = add_compile_string_length(prev, prev_len, slen, reg, ambig);
- rlen += r;
- return rlen;
-}
-
-static int
-compile_length_string_raw_node(StrNode* sn, regex_t* reg)
-{
- if (sn->end <= sn->s)
- return 0;
-
- return add_compile_string_length(sn->s, 1 /* sb */, sn->end - sn->s, reg, 0);
-}
-
-static int
-compile_string_node(StrNode* sn, regex_t* reg)
-{
- int r, len, prev_len, slen, ambig, ic;
- OnigEncoding enc = reg->enc;
- UChar *p, *prev;
-
- if (sn->end <= sn->s)
- return 0;
-
- ic = IS_IGNORECASE(reg->options);
-
- p = prev = sn->s;
- prev_len = enc_len(enc, *p);
- if (ic != 0 && prev_len == 1) {
- ambig = ONIGENC_IS_MBC_CASE_AMBIG(reg->enc, p);
- if (ambig != 0)
- ONIGENC_MBC_TO_LOWER(reg->enc, p, p);
- }
- else
- ambig = 0;
-
- p += prev_len;
- slen = 1;
-
- for (; p < sn->end; ) {
- len = enc_len(enc, *p);
- if (len == prev_len) {
- slen++;
- if (ic != 0 && len == 1) {
- if (ambig == 0)
- ambig = ONIGENC_IS_MBC_CASE_AMBIG(reg->enc, p);
- if (ambig != 0) ONIGENC_MBC_TO_LOWER(reg->enc, p, p);
- }
- }
- else {
- r = add_compile_string(prev, prev_len, slen, reg, ambig);
- if (r) return r;
- if (ic != 0 && len == 1) {
- ambig = ONIGENC_IS_MBC_CASE_AMBIG(reg->enc, p);
- if (ambig != 0) ONIGENC_MBC_TO_LOWER(reg->enc, p, p);
- }
- else
- ambig = 0;
-
- prev = p;
- slen = 1;
- prev_len = len;
- }
-
- p += len;
- }
- return add_compile_string(prev, prev_len, slen, reg, ambig);
-}
-
-static int
-compile_string_raw_node(StrNode* sn, regex_t* reg)
-{
- if (sn->end <= sn->s)
- return 0;
-
- return add_compile_string(sn->s, 1 /* sb */, sn->end - sn->s, reg, 0);
-}
-
-static int
-add_multi_byte_cclass(BBuf* mbuf, regex_t* reg)
-{
-#ifdef PLATFORM_UNALIGNED_WORD_ACCESS
- add_length(reg, mbuf->used);
- return add_bytes(reg, mbuf->p, mbuf->used);
-#else
- int r, pad_size;
- UChar* p = BBUF_GET_ADD_ADDRESS(reg) + SIZE_LENGTH;
-
- GET_ALIGNMENT_PAD_SIZE(p, pad_size);
- add_length(reg, mbuf->used + (WORD_ALIGNMENT_SIZE - 1));
- if (pad_size != 0) add_bytes(reg, PadBuf, pad_size);
-
- r = add_bytes(reg, mbuf->p, mbuf->used);
-
- /* padding for return value from compile_length_cclass_node() to be fix. */
- pad_size = (WORD_ALIGNMENT_SIZE - 1) - pad_size;
- if (pad_size != 0) add_bytes(reg, PadBuf, pad_size);
- return r;
-#endif
-}
-
-static int
-compile_length_cclass_node(CClassNode* cc, regex_t* reg)
-{
- int len;
-
- if (IS_NULL(cc->mbuf)) {
- len = SIZE_OPCODE + SIZE_BITSET;
- }
- else {
- if (bitset_is_empty(cc->bs)) {
- /* SIZE_BITSET is included in mbuf->used. */
- len = SIZE_OPCODE;
- }
- else {
- len = SIZE_OPCODE + SIZE_BITSET;
- }
-#ifdef PLATFORM_UNALIGNED_WORD_ACCESS
- len += SIZE_LENGTH + cc->mbuf->used;
-#else
- len += SIZE_LENGTH + cc->mbuf->used + (WORD_ALIGNMENT_SIZE - 1);
-#endif
- }
-
- return len;
-}
-
-static int
-compile_cclass_node(CClassNode* cc, regex_t* reg)
-{
- int r;
-
- if (IS_NULL(cc->mbuf)) {
- if (cc->not) add_opcode(reg, OP_CCLASS_NOT);
- else add_opcode(reg, OP_CCLASS);
-
- r = add_bitset(reg, cc->bs);
- }
- else {
- if (bitset_is_empty(cc->bs)) {
- if (cc->not) add_opcode(reg, OP_CCLASS_MB_NOT);
- else add_opcode(reg, OP_CCLASS_MB);
-
- r = add_multi_byte_cclass(cc->mbuf, reg);
- }
- else {
- if (cc->not) add_opcode(reg, OP_CCLASS_MIX_NOT);
- else add_opcode(reg, OP_CCLASS_MIX);
-
- r = add_bitset(reg, cc->bs);
- if (r) return r;
- r = add_multi_byte_cclass(cc->mbuf, reg);
- }
- }
-
- return r;
-}
-
-static int
-entry_repeat_range(regex_t* reg, int id, int lower, int upper)
-{
-#define REPEAT_RANGE_ALLOC 4
-
- OnigRepeatRange* p;
-
- if (reg->repeat_range_alloc == 0) {
- p = (OnigRepeatRange* )xmalloc(sizeof(OnigRepeatRange) * REPEAT_RANGE_ALLOC);
- CHECK_NULL_RETURN_VAL(p, ONIGERR_MEMORY);
- reg->repeat_range = p;
- reg->repeat_range_alloc = REPEAT_RANGE_ALLOC;
- }
- else if (reg->repeat_range_alloc <= id) {
- int n;
- n = reg->repeat_range_alloc + REPEAT_RANGE_ALLOC;
- p = (OnigRepeatRange* )xrealloc(reg->repeat_range,
- sizeof(OnigRepeatRange) * n);
- CHECK_NULL_RETURN_VAL(p, ONIGERR_MEMORY);
- reg->repeat_range = p;
- reg->repeat_range_alloc = n;
- }
- else {
- p = reg->repeat_range;
- }
-
- p[id].lower = lower;
- p[id].upper = upper;
- return 0;
-}
-
-static int
-compile_range_repeat_node(QualifierNode* qn, int target_len, int empty_info,
- regex_t* reg)
-{
- int r;
- int num_repeat = reg->num_repeat;
-
- r = add_opcode(reg, qn->greedy ? OP_REPEAT : OP_REPEAT_NG);
- if (r) return r;
- r = add_mem_num(reg, num_repeat); /* OP_REPEAT ID */
- reg->num_repeat++;
- if (r) return r;
- r = add_rel_addr(reg, target_len + SIZE_OP_REPEAT_INC);
- if (r) return r;
-
- r = entry_repeat_range(reg, num_repeat, qn->lower, qn->upper);
- if (r) return r;
-
- r = compile_tree_empty_check(qn->target, reg, empty_info);
- if (r) return r;
-
- r = add_opcode(reg, qn->greedy ? OP_REPEAT_INC : OP_REPEAT_INC_NG);
- if (r) return r;
- r = add_mem_num(reg, num_repeat); /* OP_REPEAT ID */
- return r;
-}
-
-#define QUALIFIER_EXPAND_LIMIT_SIZE 50
-
-static int
-compile_length_qualifier_node(QualifierNode* qn, regex_t* reg)
-{
- int len, mod_tlen;
- int infinite = IS_REPEAT_INFINITE(qn->upper);
- int empty_info = qn->target_empty_info;
- int tlen = compile_length_tree(qn->target, reg);
-
- if (tlen < 0) return tlen;
-
- /* anychar repeat */
- if (NTYPE(qn->target) == N_ANYCHAR) {
- if (qn->greedy && infinite) {
- if (IS_NOT_NULL(qn->next_head_exact))
- return SIZE_OP_ANYCHAR_STAR_PEEK_NEXT + tlen * qn->lower;
- else
- return SIZE_OP_ANYCHAR_STAR + tlen * qn->lower;
- }
- }
-
- if (empty_info != 0)
- mod_tlen = tlen + (SIZE_OP_NULL_CHECK_START + SIZE_OP_NULL_CHECK_END);
- else
- mod_tlen = tlen;
-
- if (infinite &&
- (qn->lower <= 1 || tlen * qn->lower <= QUALIFIER_EXPAND_LIMIT_SIZE)) {
- if (qn->lower == 1 && tlen > QUALIFIER_EXPAND_LIMIT_SIZE) {
- len = SIZE_OP_JUMP;
- }
- else {
- len = tlen * qn->lower;
- }
-
- if (qn->greedy) {
- if (IS_NOT_NULL(qn->head_exact))
- len += SIZE_OP_PUSH_OR_JUMP_EXACT1 + mod_tlen + SIZE_OP_JUMP;
- else if (IS_NOT_NULL(qn->next_head_exact))
- len += SIZE_OP_PUSH_IF_PEEK_NEXT + mod_tlen + SIZE_OP_JUMP;
- else
- len += SIZE_OP_PUSH + mod_tlen + SIZE_OP_JUMP;
- }
- else
- len += SIZE_OP_JUMP + mod_tlen + SIZE_OP_PUSH;
- }
- else if (qn->upper == 0 && qn->is_refered != 0) { /* /(?<n>..){0}/ */
- len = SIZE_OP_JUMP + tlen;
- }
- else if (!infinite && qn->greedy &&
- (tlen + SIZE_OP_PUSH) * qn->upper <= QUALIFIER_EXPAND_LIMIT_SIZE) {
- len = tlen * qn->lower;
- len += (SIZE_OP_PUSH + tlen) * (qn->upper - qn->lower);
- }
- else if (!qn->greedy && qn->upper == 1 && qn->lower == 0) { /* '??' */
- len = SIZE_OP_PUSH + SIZE_OP_JUMP + tlen;
- }
- else {
- len = SIZE_OP_REPEAT_INC
- + mod_tlen + SIZE_OPCODE + SIZE_RELADDR + SIZE_MEMNUM;
- }
-
- return len;
-}
-
-static int
-is_anychar_star_qualifier(QualifierNode* qn)
-{
- if (qn->greedy && IS_REPEAT_INFINITE(qn->upper) &&
- NTYPE(qn->target) == N_ANYCHAR)
- return 1;
- else
- return 0;
-}
-
-static int
-compile_qualifier_node(QualifierNode* qn, regex_t* reg)
-{
- int i, r, mod_tlen;
- int infinite = IS_REPEAT_INFINITE(qn->upper);
- int empty_info = qn->target_empty_info;
- int tlen = compile_length_tree(qn->target, reg);
-
- if (tlen < 0) return tlen;
-
- if (is_anychar_star_qualifier(qn)) {
- r = compile_tree_n_times(qn->target, qn->lower, reg);
- if (r) return r;
- if (IS_NOT_NULL(qn->next_head_exact)) {
- if (IS_MULTILINE(reg->options))
- r = add_opcode(reg, OP_ANYCHAR_ML_STAR_PEEK_NEXT);
- else
- r = add_opcode(reg, OP_ANYCHAR_STAR_PEEK_NEXT);
- if (r) return r;
- return add_bytes(reg, NSTRING(qn->next_head_exact).s, 1);
- }
- else {
- if (IS_MULTILINE(reg->options))
- return add_opcode(reg, OP_ANYCHAR_ML_STAR);
- else
- return add_opcode(reg, OP_ANYCHAR_STAR);
- }
- }
-
- if (empty_info != 0)
- mod_tlen = tlen + (SIZE_OP_NULL_CHECK_START + SIZE_OP_NULL_CHECK_END);
- else
- mod_tlen = tlen;
-
- if (infinite &&
- (qn->lower <= 1 || tlen * qn->lower <= QUALIFIER_EXPAND_LIMIT_SIZE)) {
- if (qn->lower == 1 && tlen > QUALIFIER_EXPAND_LIMIT_SIZE) {
- if (qn->greedy) {
- if (IS_NOT_NULL(qn->head_exact))
- r = add_opcode_rel_addr(reg, OP_JUMP, SIZE_OP_PUSH_OR_JUMP_EXACT1);
- else if (IS_NOT_NULL(qn->next_head_exact))
- r = add_opcode_rel_addr(reg, OP_JUMP, SIZE_OP_PUSH_IF_PEEK_NEXT);
- else
- r = add_opcode_rel_addr(reg, OP_JUMP, SIZE_OP_PUSH);
- }
- else {
- r = add_opcode_rel_addr(reg, OP_JUMP, SIZE_OP_JUMP);
- }
- if (r) return r;
- }
- else {
- r = compile_tree_n_times(qn->target, qn->lower, reg);
- if (r) return r;
- }
-
- if (qn->greedy) {
- if (IS_NOT_NULL(qn->head_exact)) {
- r = add_opcode_rel_addr(reg, OP_PUSH_OR_JUMP_EXACT1,
- mod_tlen + SIZE_OP_JUMP);
- if (r) return r;
- add_bytes(reg, NSTRING(qn->head_exact).s, 1);
- r = compile_tree_empty_check(qn->target, reg, empty_info);
- if (r) return r;
- r = add_opcode_rel_addr(reg, OP_JUMP,
- -(mod_tlen + (int )SIZE_OP_JUMP + (int )SIZE_OP_PUSH_OR_JUMP_EXACT1));
- }
- else if (IS_NOT_NULL(qn->next_head_exact)) {
- r = add_opcode_rel_addr(reg, OP_PUSH_IF_PEEK_NEXT,
- mod_tlen + SIZE_OP_JUMP);
- if (r) return r;
- add_bytes(reg, NSTRING(qn->next_head_exact).s, 1);
- r = compile_tree_empty_check(qn->target, reg, empty_info);
- if (r) return r;
- r = add_opcode_rel_addr(reg, OP_JUMP,
- -(mod_tlen + (int )SIZE_OP_JUMP + (int )SIZE_OP_PUSH_IF_PEEK_NEXT));
- }
- else {
- r = add_opcode_rel_addr(reg, OP_PUSH, mod_tlen + SIZE_OP_JUMP);
- if (r) return r;
- r = compile_tree_empty_check(qn->target, reg, empty_info);
- if (r) return r;
- r = add_opcode_rel_addr(reg, OP_JUMP,
- -(mod_tlen + (int )SIZE_OP_JUMP + (int )SIZE_OP_PUSH));
- }
- }
- else {
- r = add_opcode_rel_addr(reg, OP_JUMP, mod_tlen);
- if (r) return r;
- r = compile_tree_empty_check(qn->target, reg, empty_info);
- if (r) return r;
- r = add_opcode_rel_addr(reg, OP_PUSH, -(mod_tlen + (int )SIZE_OP_PUSH));
- }
- }
- else if (qn->upper == 0 && qn->is_refered != 0) { /* /(?<n>..){0}/ */
- r = add_opcode_rel_addr(reg, OP_JUMP, tlen);
- if (r) return r;
- r = compile_tree(qn->target, reg);
- }
- else if (!infinite && qn->greedy &&
- (tlen + SIZE_OP_PUSH) * qn->upper <= QUALIFIER_EXPAND_LIMIT_SIZE) {
- int n = qn->upper - qn->lower;
-
- r = compile_tree_n_times(qn->target, qn->lower, reg);
- if (r) return r;
-
- for (i = 0; i < n; i++) {
- r = add_opcode_rel_addr(reg, OP_PUSH,
- (n - i) * tlen + (n - i - 1) * SIZE_OP_PUSH);
- if (r) return r;
- r = compile_tree(qn->target, reg);
- if (r) return r;
- }
- }
- else if (!qn->greedy && qn->upper == 1 && qn->lower == 0) { /* '??' */
- r = add_opcode_rel_addr(reg, OP_PUSH, SIZE_OP_JUMP);
- if (r) return r;
- r = add_opcode_rel_addr(reg, OP_JUMP, tlen);
- if (r) return r;
- r = compile_tree(qn->target, reg);
- }
- else {
- r = compile_range_repeat_node(qn, mod_tlen, empty_info, reg);
- }
- return r;
-}
-
-static int
-compile_length_option_node(EffectNode* node, regex_t* reg)
-{
- int tlen;
- OnigOptionType prev = reg->options;
-
- reg->options = node->option;
- tlen = compile_length_tree(node->target, reg);
- reg->options = prev;
-
- if (tlen < 0) return tlen;
-
- if (IS_DYNAMIC_OPTION(prev ^ node->option)) {
- return SIZE_OP_SET_OPTION_PUSH + SIZE_OP_SET_OPTION + SIZE_OP_FAIL
- + tlen + SIZE_OP_SET_OPTION;
- }
- else
- return tlen;
-}
-
-static int
-compile_option_node(EffectNode* node, regex_t* reg)
-{
- int r;
- OnigOptionType prev = reg->options;
-
- if (IS_DYNAMIC_OPTION(prev ^ node->option)) {
- r = add_opcode_option(reg, OP_SET_OPTION_PUSH, node->option);
- if (r) return r;
- r = add_opcode_option(reg, OP_SET_OPTION, prev);
- if (r) return r;
- r = add_opcode(reg, OP_FAIL);
- if (r) return r;
-
- reg->options = node->option;
- r = compile_tree(node->target, reg);
- reg->options = prev;
- if (r) return r;
- r = add_opcode_option(reg, OP_SET_OPTION, prev);
- }
- else {
- reg->options = node->option;
- r = compile_tree(node->target, reg);
- reg->options = prev;
- }
- return r;
-}
-
-static int
-compile_length_effect_node(EffectNode* node, regex_t* reg)
-{
- int len;
- int tlen;
-
- if (node->type == EFFECT_OPTION)
- return compile_length_option_node(node, reg);
-
- if (node->target) {
- tlen = compile_length_tree(node->target, reg);
- if (tlen < 0) return tlen;
- }
- else
- tlen = 0;
-
- switch (node->type) {
- case EFFECT_MEMORY:
-#ifdef USE_SUBEXP_CALL
- if (IS_EFFECT_CALLED(node)) {
- len = SIZE_OP_MEMORY_START_PUSH + tlen
- + SIZE_OP_CALL + SIZE_OP_JUMP + SIZE_OP_RETURN;
- if (BIT_STATUS_AT(reg->bt_mem_end, node->regnum))
- len += (IS_EFFECT_RECURSION(node)
- ? SIZE_OP_MEMORY_END_PUSH_REC : SIZE_OP_MEMORY_END_PUSH);
- else
- len += (IS_EFFECT_RECURSION(node)
- ? SIZE_OP_MEMORY_END_REC : SIZE_OP_MEMORY_END);
- }
- else
-#endif
- {
- if (BIT_STATUS_AT(reg->bt_mem_start, node->regnum))
- len = SIZE_OP_MEMORY_START_PUSH;
- else
- len = SIZE_OP_MEMORY_START;
-
- len += tlen + (BIT_STATUS_AT(reg->bt_mem_end, node->regnum)
- ? SIZE_OP_MEMORY_END_PUSH : SIZE_OP_MEMORY_END);
- }
- break;
-
- case EFFECT_STOP_BACKTRACK:
- if (IS_EFFECT_SIMPLE_REPEAT(node)) {
- QualifierNode* qn = &NQUALIFIER(node->target);
- tlen = compile_length_tree(qn->target, reg);
- if (tlen < 0) return tlen;
-
- len = tlen * qn->lower
- + SIZE_OP_PUSH + tlen + SIZE_OP_POP + SIZE_OP_JUMP;
- }
- else {
- len = SIZE_OP_PUSH_STOP_BT + tlen + SIZE_OP_POP_STOP_BT;
- }
- break;
-
- default:
- return ONIGERR_TYPE_BUG;
- break;
- }
-
- return len;
-}
-
-static int get_char_length_tree(Node* node, regex_t* reg, int* len);
-
-static int
-compile_effect_node(EffectNode* node, regex_t* reg)
-{
- int r, len;
-
- if (node->type == EFFECT_OPTION)
- return compile_option_node(node, reg);
-
- switch (node->type) {
- case EFFECT_MEMORY:
-#ifdef USE_SUBEXP_CALL
- if (IS_EFFECT_CALLED(node)) {
- r = add_opcode(reg, OP_CALL);
- if (r) return r;
- node->call_addr = BBUF_GET_OFFSET_POS(reg) + SIZE_ABSADDR + SIZE_OP_JUMP;
- node->state |= NST_ADDR_FIXED;
- r = add_abs_addr(reg, (int )node->call_addr);
- if (r) return r;
- len = compile_length_tree(node->target, reg);
- len += (SIZE_OP_MEMORY_START_PUSH + SIZE_OP_RETURN);
- if (BIT_STATUS_AT(reg->bt_mem_end, node->regnum))
- len += (IS_EFFECT_RECURSION(node)
- ? SIZE_OP_MEMORY_END_PUSH_REC : SIZE_OP_MEMORY_END_PUSH);
- else
- len += (IS_EFFECT_RECURSION(node)
- ? SIZE_OP_MEMORY_END_REC : SIZE_OP_MEMORY_END);
-
- r = add_opcode_rel_addr(reg, OP_JUMP, len);
- if (r) return r;
- }
-#endif
- if (BIT_STATUS_AT(reg->bt_mem_start, node->regnum))
- r = add_opcode(reg, OP_MEMORY_START_PUSH);
- else
- r = add_opcode(reg, OP_MEMORY_START);
- if (r) return r;
- r = add_mem_num(reg, node->regnum);
- if (r) return r;
- r = compile_tree(node->target, reg);
- if (r) return r;
-#ifdef USE_SUBEXP_CALL
- if (IS_EFFECT_CALLED(node)) {
- if (BIT_STATUS_AT(reg->bt_mem_end, node->regnum))
- r = add_opcode(reg, (IS_EFFECT_RECURSION(node)
- ? OP_MEMORY_END_PUSH_REC : OP_MEMORY_END_PUSH));
- else
- r = add_opcode(reg, (IS_EFFECT_RECURSION(node)
- ? OP_MEMORY_END_REC : OP_MEMORY_END));
-
- if (r) return r;
- r = add_mem_num(reg, node->regnum);
- if (r) return r;
- r = add_opcode(reg, OP_RETURN);
- }
- else
-#endif
- {
- if (BIT_STATUS_AT(reg->bt_mem_end, node->regnum))
- r = add_opcode(reg, OP_MEMORY_END_PUSH);
- else
- r = add_opcode(reg, OP_MEMORY_END);
- if (r) return r;
- r = add_mem_num(reg, node->regnum);
- }
- break;
-
- case EFFECT_STOP_BACKTRACK:
- if (IS_EFFECT_SIMPLE_REPEAT(node)) {
- QualifierNode* qn = &NQUALIFIER(node->target);
- r = compile_tree_n_times(qn->target, qn->lower, reg);
- if (r) return r;
-
- len = compile_length_tree(qn->target, reg);
- if (len < 0) return len;
-
- r = add_opcode_rel_addr(reg, OP_PUSH, len + SIZE_OP_POP + SIZE_OP_JUMP);
- if (r) return r;
- r = compile_tree(qn->target, reg);
- if (r) return r;
- r = add_opcode(reg, OP_POP);
- if (r) return r;
- r = add_opcode_rel_addr(reg, OP_JUMP,
- -((int )SIZE_OP_PUSH + len + (int )SIZE_OP_POP + (int )SIZE_OP_JUMP));
- }
- else {
- r = add_opcode(reg, OP_PUSH_STOP_BT);
- if (r) return r;
- r = compile_tree(node->target, reg);
- if (r) return r;
- r = add_opcode(reg, OP_POP_STOP_BT);
- }
- break;
-
- default:
- return ONIGERR_TYPE_BUG;
- break;
- }
-
- return r;
-}
-
-static int
-compile_length_anchor_node(AnchorNode* node, regex_t* reg)
-{
- int len;
- int tlen = 0;
-
- if (node->target) {
- tlen = compile_length_tree(node->target, reg);
- if (tlen < 0) return tlen;
- }
-
- switch (node->type) {
- case ANCHOR_PREC_READ:
- len = SIZE_OP_PUSH_POS + tlen + SIZE_OP_POP_POS;
- break;
- case ANCHOR_PREC_READ_NOT:
- len = SIZE_OP_PUSH_POS_NOT + tlen + SIZE_OP_FAIL_POS;
- break;
- case ANCHOR_LOOK_BEHIND:
- len = SIZE_OP_LOOK_BEHIND + tlen;
- break;
- case ANCHOR_LOOK_BEHIND_NOT:
- len = SIZE_OP_PUSH_LOOK_BEHIND_NOT + tlen + SIZE_OP_FAIL_LOOK_BEHIND_NOT;
- break;
-
- default:
- len = SIZE_OPCODE;
- break;
- }
-
- return len;
-}
-
-static int
-compile_anchor_node(AnchorNode* node, regex_t* reg)
-{
- int r, len;
-
- switch (node->type) {
- case ANCHOR_BEGIN_BUF: r = add_opcode(reg, OP_BEGIN_BUF); break;
- case ANCHOR_END_BUF: r = add_opcode(reg, OP_END_BUF); break;
- case ANCHOR_BEGIN_LINE: r = add_opcode(reg, OP_BEGIN_LINE); break;
- case ANCHOR_END_LINE: r = add_opcode(reg, OP_END_LINE); break;
- case ANCHOR_SEMI_END_BUF: r = add_opcode(reg, OP_SEMI_END_BUF); break;
- case ANCHOR_BEGIN_POSITION: r = add_opcode(reg, OP_BEGIN_POSITION); break;
-
- case ANCHOR_WORD_BOUND: r = add_opcode(reg, OP_WORD_BOUND); break;
- case ANCHOR_NOT_WORD_BOUND: r = add_opcode(reg, OP_NOT_WORD_BOUND); break;
-#ifdef USE_WORD_BEGIN_END
- case ANCHOR_WORD_BEGIN: r = add_opcode(reg, OP_WORD_BEGIN); break;
- case ANCHOR_WORD_END: r = add_opcode(reg, OP_WORD_END); break;
-#endif
-
- case ANCHOR_PREC_READ:
- r = add_opcode(reg, OP_PUSH_POS);
- if (r) return r;
- r = compile_tree(node->target, reg);
- if (r) return r;
- r = add_opcode(reg, OP_POP_POS);
- break;
-
- case ANCHOR_PREC_READ_NOT:
- len = compile_length_tree(node->target, reg);
- if (len < 0) return len;
- r = add_opcode_rel_addr(reg, OP_PUSH_POS_NOT, len + SIZE_OP_FAIL_POS);
- if (r) return r;
- r = compile_tree(node->target, reg);
- if (r) return r;
- r = add_opcode(reg, OP_FAIL_POS);
- break;
-
- case ANCHOR_LOOK_BEHIND:
- {
- int n;
- r = add_opcode(reg, OP_LOOK_BEHIND);
- if (r) return r;
- if (node->char_len < 0) {
- r = get_char_length_tree(node->target, reg, &n);
- if (r) return ONIGERR_INVALID_LOOK_BEHIND_PATTERN;
- }
- else
- n = node->char_len;
- r = add_length(reg, n);
- if (r) return r;
- r = compile_tree(node->target, reg);
- }
- break;
-
- case ANCHOR_LOOK_BEHIND_NOT:
- {
- int n;
- len = compile_length_tree(node->target, reg);
- r = add_opcode_rel_addr(reg, OP_PUSH_LOOK_BEHIND_NOT,
- len + SIZE_OP_FAIL_LOOK_BEHIND_NOT);
- if (r) return r;
- if (node->char_len < 0) {
- r = get_char_length_tree(node->target, reg, &n);
- if (r) return ONIGERR_INVALID_LOOK_BEHIND_PATTERN;
- }
- else
- n = node->char_len;
- r = add_length(reg, n);
- if (r) return r;
- r = compile_tree(node->target, reg);
- if (r) return r;
- r = add_opcode(reg, OP_FAIL_LOOK_BEHIND_NOT);
- }
- break;
-
- default:
- return ONIGERR_TYPE_BUG;
- break;
- }
-
- return r;
-}
-
-static int
-compile_length_tree(Node* node, regex_t* reg)
-{
- int len, type, r;
-
- type = NTYPE(node);
- switch (type) {
- case N_LIST:
- len = 0;
- do {
- r = compile_length_tree(NCONS(node).left, reg);
- if (r < 0) return r;
- len += r;
- } while (IS_NOT_NULL(node = NCONS(node).right));
- r = len;
- break;
-
- case N_ALT:
- {
- int n;
-
- n = r = 0;
- do {
- r += compile_length_tree(NCONS(node).left, reg);
- n++;
- } while (IS_NOT_NULL(node = NCONS(node).right));
- r += (SIZE_OP_PUSH + SIZE_OP_JUMP) * (n - 1);
- }
- break;
-
- case N_STRING:
- if (NSTRING_IS_RAW(node))
- r = compile_length_string_raw_node(&(NSTRING(node)), reg);
- else
- r = compile_length_string_node(&(NSTRING(node)), reg);
- break;
-
- case N_CCLASS:
- r = compile_length_cclass_node(&(NCCLASS(node)), reg);
- break;
-
- case N_CTYPE:
- case N_ANYCHAR:
- r = SIZE_OPCODE;
- break;
-
- case N_BACKREF:
- {
- BackrefNode* br = &(NBACKREF(node));
-
- if (br->back_num == 1) {
- r = ((!IS_IGNORECASE(reg->options) && br->back_static[0] <= 3)
- ? SIZE_OPCODE : (SIZE_OPCODE + SIZE_MEMNUM));
- }
- else {
- r = SIZE_OPCODE + SIZE_LENGTH + (SIZE_MEMNUM * br->back_num);
- }
- }
- break;
-
-#ifdef USE_SUBEXP_CALL
- case N_CALL:
- r = SIZE_OP_CALL;
- break;
-#endif
-
- case N_QUALIFIER:
- r = compile_length_qualifier_node(&(NQUALIFIER(node)), reg);
- break;
-
- case N_EFFECT:
- r = compile_length_effect_node(&NEFFECT(node), reg);
- break;
-
- case N_ANCHOR:
- r = compile_length_anchor_node(&(NANCHOR(node)), reg);
- break;
-
- default:
- return ONIGERR_TYPE_BUG;
- break;
- }
-
- return r;
-}
-
-static int
-compile_tree(Node* node, regex_t* reg)
-{
- int n, type, len, pos, r = 0;
-
- type = NTYPE(node);
- switch (type) {
- case N_LIST:
- do {
- r = compile_tree(NCONS(node).left, reg);
- } while (r == 0 && IS_NOT_NULL(node = NCONS(node).right));
- break;
-
- case N_ALT:
- {
- Node* x = node;
- len = 0;
- do {
- len += compile_length_tree(NCONS(x).left, reg);
- if (NCONS(x).right != NULL) {
- len += SIZE_OP_PUSH + SIZE_OP_JUMP;
- }
- } while (IS_NOT_NULL(x = NCONS(x).right));
- pos = reg->used + len; /* goal position */
-
- do {
- len = compile_length_tree(NCONS(node).left, reg);
- if (IS_NOT_NULL(NCONS(node).right)) {
- r = add_opcode_rel_addr(reg, OP_PUSH, len + SIZE_OP_JUMP);
- if (r) break;
- }
- r = compile_tree(NCONS(node).left, reg);
- if (r) break;
- if (IS_NOT_NULL(NCONS(node).right)) {
- len = pos - (reg->used + SIZE_OP_JUMP);
- r = add_opcode_rel_addr(reg, OP_JUMP, len);
- if (r) break;
- }
- } while (IS_NOT_NULL(node = NCONS(node).right));
- }
- break;
-
- case N_STRING:
- if (NSTRING_IS_RAW(node))
- r = compile_string_raw_node(&(NSTRING(node)), reg);
- else
- r = compile_string_node(&(NSTRING(node)), reg);
- break;
-
- case N_CCLASS:
- r = compile_cclass_node(&(NCCLASS(node)), reg);
- break;
-
- case N_CTYPE:
- {
- int op;
-
- switch (NCTYPE(node).type) {
- case CTYPE_WORD: op = OP_WORD; break;
- case CTYPE_NOT_WORD: op = OP_NOT_WORD; break;
- default:
- return ONIGERR_TYPE_BUG;
- break;
- }
- r = add_opcode(reg, op);
- }
- break;
-
- case N_ANYCHAR:
- if (IS_MULTILINE(reg->options))
- r = add_opcode(reg, OP_ANYCHAR_ML);
- else
- r = add_opcode(reg, OP_ANYCHAR);
- break;
-
- case N_BACKREF:
- {
- int i;
- BackrefNode* br = &(NBACKREF(node));
-
- if (br->back_num == 1) {
- n = br->back_static[0];
- if (IS_IGNORECASE(reg->options)) {
- r = add_opcode(reg, OP_BACKREFN_IC);
- if (r) return r;
- r = add_mem_num(reg, n);
- }
- else {
- switch (n) {
- case 1: r = add_opcode(reg, OP_BACKREF1); break;
- case 2: r = add_opcode(reg, OP_BACKREF2); break;
- case 3: r = add_opcode(reg, OP_BACKREF3); break;
- default:
- r = add_opcode(reg, OP_BACKREFN);
- if (r) return r;
- r = add_mem_num(reg, n);
- break;
- }
- }
- }
- else {
- int* p;
- add_opcode(reg, (IS_IGNORECASE(reg->options) ?
- OP_BACKREF_MULTI_IC : OP_BACKREF_MULTI));
- if (r) return r;
- add_length(reg, br->back_num);
- if (r) return r;
- p = BACKREFS_P(br);
- for (i = br->back_num - 1; i >= 0; i--) {
- r = add_mem_num(reg, p[i]);
- if (r) return r;
- }
- }
- }
- break;
-
-#ifdef USE_SUBEXP_CALL
- case N_CALL:
- r = compile_call(&(NCALL(node)), reg);
- break;
-#endif
-
- case N_QUALIFIER:
- r = compile_qualifier_node(&(NQUALIFIER(node)), reg);
- break;
-
- case N_EFFECT:
- r = compile_effect_node(&NEFFECT(node), reg);
- break;
-
- case N_ANCHOR:
- r = compile_anchor_node(&(NANCHOR(node)), reg);
- break;
-
- default:
-#ifdef ONIG_DEBUG
- fprintf(stderr, "compile_tree: undefined node type %d\n", NTYPE(node));
-#endif
- break;
- }
-
- return r;
-}
-
-#ifdef USE_NAMED_GROUP
-typedef struct {
- int new_val;
-} NumMap;
-
-static int
-noname_disable_map(Node** plink, NumMap* map, int* counter)
-{
- int r = 0;
- Node* node = *plink;
-
- switch (NTYPE(node)) {
- case N_LIST:
- case N_ALT:
- do {
- r = noname_disable_map(&(NCONS(node).left), map, counter);
- } while (r == 0 && IS_NOT_NULL(node = NCONS(node).right));
- break;
-
- case N_QUALIFIER:
- {
- Node** ptarget = &(NQUALIFIER(node).target);
- Node* old = *ptarget;
- r = noname_disable_map(ptarget, map, counter);
- if (*ptarget != old && NTYPE(*ptarget) == N_QUALIFIER) {
- onig_reduce_nested_qualifier(node, *ptarget);
- }
- }
- break;
-
- case N_EFFECT:
- {
- EffectNode* en = &(NEFFECT(node));
- if (en->type == EFFECT_MEMORY) {
- if (IS_EFFECT_NAMED_GROUP(en)) {
- (*counter)++;
- map[en->regnum].new_val = *counter;
- en->regnum = *counter;
- r = noname_disable_map(&(en->target), map, counter);
- }
- else {
- *plink = en->target;
- en->target = NULL_NODE;
- onig_node_free(node);
- r = noname_disable_map(plink, map, counter);
- }
- }
- else
- r = noname_disable_map(&(en->target), map, counter);
- }
- break;
-
- default:
- break;
- }
-
- return r;
-}
-
-static int
-renumber_node_backref(Node* node, NumMap* map)
-{
- int i, pos, n, old_num;
- int *backs;
- BackrefNode* bn = &(NBACKREF(node));
-
- if (! IS_BACKREF_NAME_REF(bn))
- return ONIGERR_NUMBERED_BACKREF_OR_CALL_NOT_ALLOWED;
-
- old_num = bn->back_num;
- if (IS_NULL(bn->back_dynamic))
- backs = bn->back_static;
- else
- backs = bn->back_dynamic;
-
- for (i = 0, pos = 0; i < old_num; i++) {
- n = map[backs[i]].new_val;
- if (n > 0) {
- backs[pos] = n;
- pos++;
- }
- }
-
- bn->back_num = pos;
- return 0;
-}
-
-static int
-renumber_by_map(Node* node, NumMap* map)
-{
- int r = 0;
-
- switch (NTYPE(node)) {
- case N_LIST:
- case N_ALT:
- do {
- r = renumber_by_map(NCONS(node).left, map);
- } while (r == 0 && IS_NOT_NULL(node = NCONS(node).right));
- break;
- case N_QUALIFIER:
- r = renumber_by_map(NQUALIFIER(node).target, map);
- break;
- case N_EFFECT:
- r = renumber_by_map(NEFFECT(node).target, map);
- break;
-
- case N_BACKREF:
- r = renumber_node_backref(node, map);
- break;
-
- default:
- break;
- }
-
- return r;
-}
-
-static int
-numbered_ref_check(Node* node)
-{
- int r = 0;
-
- switch (NTYPE(node)) {
- case N_LIST:
- case N_ALT:
- do {
- r = numbered_ref_check(NCONS(node).left);
- } while (r == 0 && IS_NOT_NULL(node = NCONS(node).right));
- break;
- case N_QUALIFIER:
- r = numbered_ref_check(NQUALIFIER(node).target);
- break;
- case N_EFFECT:
- r = numbered_ref_check(NEFFECT(node).target);
- break;
-
- case N_BACKREF:
- if (! IS_BACKREF_NAME_REF(&(NBACKREF(node))))
- return ONIGERR_NUMBERED_BACKREF_OR_CALL_NOT_ALLOWED;
- break;
-
- default:
- break;
- }
-
- return r;
-}
-
-static int
-disable_noname_group_capture(Node** root, regex_t* reg, ScanEnv* env)
-{
- int r, i, pos, counter;
- BitStatusType loc;
- NumMap* map;
-
- map = (NumMap* )xalloca(sizeof(NumMap) * (env->num_mem + 1));
- CHECK_NULL_RETURN_VAL(map, ONIGERR_MEMORY);
- for (i = 1; i <= env->num_mem; i++) {
- map[i].new_val = 0;
- }
- counter = 0;
- r = noname_disable_map(root, map, &counter);
- if (r != 0) return r;
-
- r = renumber_by_map(*root, map);
- if (r != 0) return r;
-
- for (i = 1, pos = 1; i <= env->num_mem; i++) {
- if (map[i].new_val > 0) {
- SCANENV_MEM_NODES(env)[pos] = SCANENV_MEM_NODES(env)[i];
- pos++;
- }
- }
-
- loc = env->capture_history;
- BIT_STATUS_CLEAR(env->capture_history);
- for (i = 1; i <= ONIG_MAX_CAPTURE_HISTORY_GROUP; i++) {
- if (BIT_STATUS_AT(loc, i)) {
- BIT_STATUS_ON_AT_SIMPLE(env->capture_history, map[i].new_val);
- }
- }
-
- env->num_mem = env->num_named;
- reg->num_mem = env->num_named;
- return 0;
-}
-#endif /* USE_NAMED_GROUP */
-
-#ifdef USE_SUBEXP_CALL
-static int
-unset_addr_list_fix(UnsetAddrList* uslist, regex_t* reg)
-{
- int i, offset;
- EffectNode* en;
- AbsAddrType addr;
-#ifndef PLATFORM_UNALIGNED_WORD_ACCESS
- UChar buf[SERIALIZE_BUFSIZE];
-#endif
-
- for (i = 0; i < uslist->num; i++) {
- en = &(NEFFECT(uslist->us[i].target));
- if (! IS_EFFECT_ADDR_FIXED(en)) return ONIGERR_PARSER_BUG;
- addr = en->call_addr;
- offset = uslist->us[i].offset;
-
-#ifdef PLATFORM_UNALIGNED_WORD_ACCESS
- BBUF_WRITE(reg, offset, &addr, SIZE_ABSADDR);
-#else
- SERIALIZE_ABSADDR(addr, buf);
- BBUF_WRITE(reg, offset, buf, SIZE_ABSADDR);
-#endif
- }
- return 0;
-}
-#endif
-
-#ifdef USE_INFINITE_REPEAT_MONOMANIAC_MEM_STATUS_CHECK
-static int
-qualifiers_memory_node_info(Node* node)
-{
- int r = 0;
-
- switch (NTYPE(node)) {
- case N_LIST:
- case N_ALT:
- {
- int v;
- do {
- v = qualifiers_memory_node_info(NCONS(node).left);
- if (v > r) r = v;
- } while (v >= 0 && IS_NOT_NULL(node = NCONS(node).right));
- }
- break;
-
-#ifdef USE_SUBEXP_CALL
- case N_CALL:
- if (IS_CALL_RECURSION(&NCALL(node))) {
- return NQ_TARGET_IS_EMPTY_REC; /* tiny version */
- }
- else
- r = qualifiers_memory_node_info(NCALL(node).target);
- break;
-#endif
-
- case N_QUALIFIER:
- {
- QualifierNode* qn = &(NQUALIFIER(node));
- if (qn->upper != 0) {
- r = qualifiers_memory_node_info(qn->target);
- }
- }
- break;
-
- case N_EFFECT:
- {
- EffectNode* en = &(NEFFECT(node));
- switch (en->type) {
- case EFFECT_MEMORY:
- return NQ_TARGET_IS_EMPTY_MEM;
- break;
-
- case EFFECT_OPTION:
- case EFFECT_STOP_BACKTRACK:
- r = qualifiers_memory_node_info(en->target);
- break;
- default:
- break;
- }
- }
- break;
-
- case N_BACKREF:
- case N_STRING:
- case N_CTYPE:
- case N_CCLASS:
- case N_ANYCHAR:
- case N_ANCHOR:
- default:
- break;
- }
-
- return r;
-}
-#endif /* USE_INFINITE_REPEAT_MONOMANIAC_MEM_STATUS_CHECK */
-
-static int
-get_min_match_length(Node* node, OnigDistance *min, ScanEnv* env)
-{
- OnigDistance tmin;
- int r = 0;
-
- *min = 0;
- switch (NTYPE(node)) {
- case N_BACKREF:
- {
- int i;
- int* backs;
- Node** nodes = SCANENV_MEM_NODES(env);
- BackrefNode* br = &(NBACKREF(node));
- if (br->state & NST_RECURSION) break;
-
- backs = BACKREFS_P(br);
- if (backs[0] > env->num_mem) return ONIGERR_INVALID_BACKREF;
- r = get_min_match_length(nodes[backs[0]], min, env);
- if (r != 0) break;
- for (i = 1; i < br->back_num; i++) {
- if (backs[i] > env->num_mem) return ONIGERR_INVALID_BACKREF;
- r = get_min_match_length(nodes[backs[i]], &tmin, env);
- if (r != 0) break;
- if (*min > tmin) *min = tmin;
- }
- }
- break;
-
-#ifdef USE_SUBEXP_CALL
- case N_CALL:
- if (IS_CALL_RECURSION(&NCALL(node))) {
- EffectNode* en = &(NEFFECT(NCALL(node).target));
- if (IS_EFFECT_MIN_FIXED(en))
- *min = en->min_len;
- }
- else
- r = get_min_match_length(NCALL(node).target, min, env);
- break;
-#endif
-
- case N_LIST:
- do {
- r = get_min_match_length(NCONS(node).left, &tmin, env);
- if (r == 0) *min += tmin;
- } while (r == 0 && IS_NOT_NULL(node = NCONS(node).right));
- break;
-
- case N_ALT:
- {
- Node *x, *y;
- y = node;
- do {
- x = NCONS(y).left;
- r = get_min_match_length(x, &tmin, env);
- if (r != 0) break;
- if (y == node) *min = tmin;
- else if (*min > tmin) *min = tmin;
- } while (r == 0 && IS_NOT_NULL(y = NCONS(y).right));
- }
- break;
-
- case N_STRING:
- {
- StrNode* sn = &(NSTRING(node));
- *min = sn->end - sn->s;
- }
- break;
-
- case N_CTYPE:
- switch (NCTYPE(node).type) {
- case CTYPE_WORD: *min = 1; break;
- case CTYPE_NOT_WORD: *min = 1; break;
- default:
- break;
- }
- break;
-
- case N_CCLASS:
- case N_ANYCHAR:
- *min = 1;
- break;
-
- case N_QUALIFIER:
- {
- QualifierNode* qn = &(NQUALIFIER(node));
-
- if (qn->lower > 0) {
- r = get_min_match_length(qn->target, min, env);
- if (r == 0)
- *min = distance_multiply(*min, qn->lower);
- }
- }
- break;
-
- case N_EFFECT:
- {
- EffectNode* en = &(NEFFECT(node));
- switch (en->type) {
- case EFFECT_MEMORY:
-#ifdef USE_SUBEXP_CALL
- if (IS_EFFECT_MIN_FIXED(en))
- *min = en->min_len;
- else {
- r = get_min_match_length(en->target, min, env);
- if (r == 0) {
- en->min_len = *min;
- SET_EFFECT_STATUS(node, NST_MIN_FIXED);
- }
- }
- break;
-#endif
- case EFFECT_OPTION:
- case EFFECT_STOP_BACKTRACK:
- r = get_min_match_length(en->target, min, env);
- break;
- }
- }
- break;
-
- case N_ANCHOR:
- default:
- break;
- }
-
- return r;
-}
-
-static int
-get_max_match_length(Node* node, OnigDistance *max, ScanEnv* env)
-{
- OnigDistance tmax;
- int r = 0;
-
- *max = 0;
- switch (NTYPE(node)) {
- case N_LIST:
- do {
- r = get_max_match_length(NCONS(node).left, &tmax, env);
- if (r == 0)
- *max = distance_add(*max, tmax);
- } while (r == 0 && IS_NOT_NULL(node = NCONS(node).right));
- break;
-
- case N_ALT:
- do {
- r = get_max_match_length(NCONS(node).left, &tmax, env);
- if (r == 0 && *max < tmax) *max = tmax;
- } while (r == 0 && IS_NOT_NULL(node = NCONS(node).right));
- break;
-
- case N_STRING:
- {
- StrNode* sn = &(NSTRING(node));
- *max = sn->end - sn->s;
- }
- break;
-
- case N_CTYPE:
- switch (NCTYPE(node).type) {
- case CTYPE_WORD:
- case CTYPE_NOT_WORD:
- *max = ONIGENC_MBC_MAXLEN_DIST(env->enc);
- break;
-
- default:
- break;
- }
- break;
-
- case N_CCLASS:
- case N_ANYCHAR:
- *max = ONIGENC_MBC_MAXLEN_DIST(env->enc);
- break;
-
- case N_BACKREF:
- {
- int i;
- int* backs;
- Node** nodes = SCANENV_MEM_NODES(env);
- BackrefNode* br = &(NBACKREF(node));
- if (br->state & NST_RECURSION) {
- *max = ONIG_INFINITE_DISTANCE;
- break;
- }
- backs = BACKREFS_P(br);
- for (i = 0; i < br->back_num; i++) {
- if (backs[i] > env->num_mem) return ONIGERR_INVALID_BACKREF;
- r = get_max_match_length(nodes[backs[i]], &tmax, env);
- if (r != 0) break;
- if (*max < tmax) *max = tmax;
- }
- }
- break;
-
-#ifdef USE_SUBEXP_CALL
- case N_CALL:
- if (! IS_CALL_RECURSION(&(NCALL(node))))
- r = get_max_match_length(NCALL(node).target, max, env);
- else
- *max = ONIG_INFINITE_DISTANCE;
- break;
-#endif
-
- case N_QUALIFIER:
- {
- QualifierNode* qn = &(NQUALIFIER(node));
-
- if (qn->upper != 0) {
- r = get_max_match_length(qn->target, max, env);
- if (r == 0 && *max != 0) {
- if (! IS_REPEAT_INFINITE(qn->upper))
- *max = distance_multiply(*max, qn->upper);
- else
- *max = ONIG_INFINITE_DISTANCE;
- }
- }
- }
- break;
-
- case N_EFFECT:
- {
- EffectNode* en = &(NEFFECT(node));
- switch (en->type) {
- case EFFECT_MEMORY:
-#ifdef USE_SUBEXP_CALL
- if (IS_EFFECT_MAX_FIXED(en))
- *max = en->max_len;
- else {
- r = get_max_match_length(en->target, max, env);
- if (r == 0) {
- en->max_len = *max;
- SET_EFFECT_STATUS(node, NST_MAX_FIXED);
- }
- }
- break;
-#endif
- case EFFECT_OPTION:
- case EFFECT_STOP_BACKTRACK:
- r = get_max_match_length(en->target, max, env);
- break;
- }
- }
- break;
-
- case N_ANCHOR:
- default:
- break;
- }
-
- return r;
-}
-
-#define GET_CHAR_LEN_VARLEN -1
-#define GET_CHAR_LEN_TOP_ALT_VARLEN -2
-
-/* fixed size pattern node only */
-static int
-get_char_length_tree1(Node* node, regex_t* reg, int* len, int level)
-{
- int tlen;
- int r = 0;
-
- level++;
- *len = 0;
- switch (NTYPE(node)) {
- case N_LIST:
- do {
- r = get_char_length_tree1(NCONS(node).left, reg, &tlen, level);
- if (r == 0)
- *len = distance_add(*len, tlen);
- } while (r == 0 && IS_NOT_NULL(node = NCONS(node).right));
- break;
-
- case N_ALT:
- {
- int tlen2;
- int varlen = 0;
-
- r = get_char_length_tree1(NCONS(node).left, reg, &tlen, level);
- while (r == 0 && IS_NOT_NULL(node = NCONS(node).right)) {
- r = get_char_length_tree1(NCONS(node).left, reg, &tlen2, level);
- if (r == 0) {
- if (tlen != tlen2)
- varlen = 1;
- }
- }
- if (r == 0) {
- if (varlen != 0) {
- if (level == 1)
- r = GET_CHAR_LEN_TOP_ALT_VARLEN;
- else
- r = GET_CHAR_LEN_VARLEN;
- }
- else
- *len = tlen;
- }
- }
- break;
-
- case N_STRING:
- {
- StrNode* sn = &(NSTRING(node));
- UChar *s = sn->s;
- while (s < sn->end) {
- s += enc_len(reg->enc, *s);
- (*len)++;
- }
- }
- break;
-
- case N_QUALIFIER:
- {
- QualifierNode* qn = &(NQUALIFIER(node));
- if (qn->lower == qn->upper) {
- r = get_char_length_tree1(qn->target, reg, &tlen, level);
- if (r == 0)
- *len = distance_multiply(tlen, qn->lower);
- }
- else
- r = GET_CHAR_LEN_VARLEN;
- }
- break;
-
-#ifdef USE_SUBEXP_CALL
- case N_CALL:
- if (! IS_CALL_RECURSION(&(NCALL(node))))
- r = get_char_length_tree1(NCALL(node).target, reg, len, level);
- else
- r = GET_CHAR_LEN_VARLEN;
- break;
-#endif
-
- case N_CTYPE:
- switch (NCTYPE(node).type) {
- case CTYPE_WORD:
- case CTYPE_NOT_WORD:
- *len = 1;
- break;
- }
- break;
-
- case N_CCLASS:
- case N_ANYCHAR:
- *len = 1;
- break;
-
- case N_EFFECT:
- {
- EffectNode* en = &(NEFFECT(node));
- switch (en->type) {
- case EFFECT_MEMORY:
-#ifdef USE_SUBEXP_CALL
- if (IS_EFFECT_CLEN_FIXED(en))
- *len = en->char_len;
- else {
- r = get_char_length_tree1(en->target, reg, len, level);
- if (r == 0) {
- en->char_len = *len;
- SET_EFFECT_STATUS(node, NST_CLEN_FIXED);
- }
- }
- break;
-#endif
- case EFFECT_OPTION:
- case EFFECT_STOP_BACKTRACK:
- r = get_char_length_tree1(en->target, reg, len, level);
- break;
- default:
- break;
- }
- }
- break;
-
- case N_ANCHOR:
- break;
-
- default:
- r = GET_CHAR_LEN_VARLEN;
- break;
- }
-
- return r;
-}
-
-static int
-get_char_length_tree(Node* node, regex_t* reg, int* len)
-{
- return get_char_length_tree1(node, reg, len, 0);
-}
-
-extern int
-onig_is_code_in_cc(OnigEncoding enc, OnigCodePoint code, CClassNode* cc)
-{
- int found;
-
- if (code >= SINGLE_BYTE_SIZE) {
- if (IS_NULL(cc->mbuf)) {
- found = 0;
- }
- else {
- found = (onig_is_in_code_range(cc->mbuf->p, code) != 0 ? 1 : 0);
- }
- }
- else {
- found = (BITSET_AT(cc->bs, code) == 0 ? 0 : 1);
- }
-
- if (cc->not == 0)
- return found;
- else
- return !found;
-}
-
-/* x is not included y ==> 1 : 0 */
-static int
-is_not_included(Node* x, Node* y, regex_t* reg)
-{
- int i, len;
- OnigCodePoint code;
- UChar *p, c;
- int ytype;
-
- retry:
- ytype = NTYPE(y);
- switch (NTYPE(x)) {
- case N_CTYPE:
- {
- switch (ytype) {
- case N_CTYPE:
- switch (NCTYPE(x).type) {
- case CTYPE_WORD:
- if (NCTYPE(y).type == CTYPE_NOT_WORD)
- return 1;
- else
- return 0;
- break;
- case CTYPE_NOT_WORD:
- if (NCTYPE(y).type == CTYPE_WORD)
- return 1;
- else
- return 0;
- break;
- default:
- break;
- }
- break;
-
- case N_CCLASS:
- swap:
- {
- Node* tmp;
- tmp = x; x = y; y = tmp;
- goto retry;
- }
- break;
-
- case N_STRING:
- goto swap;
- break;
-
- default:
- break;
- }
- }
- break;
-
- case N_CCLASS:
- {
- CClassNode* xc = &(NCCLASS(x));
- switch (ytype) {
- case N_CTYPE:
- switch (NCTYPE(y).type) {
- case CTYPE_WORD:
- if (IS_NULL(xc->mbuf) && xc->not == 0) {
- for (i = 0; i < SINGLE_BYTE_SIZE; i++) {
- if (BITSET_AT(xc->bs, i)) {
- if (ONIGENC_IS_CODE_SB_WORD(reg->enc, i)) return 0;
- }
- }
- return 1;
- }
- return 0;
- break;
- case CTYPE_NOT_WORD:
- for (i = 0; i < SINGLE_BYTE_SIZE; i++) {
- if (! ONIGENC_IS_CODE_SB_WORD(reg->enc, i)) {
- if (xc->not == 0) {
- if (BITSET_AT(xc->bs, i))
- return 0;
- }
- else {
- if (! BITSET_AT(xc->bs, i))
- return 0;
- }
- }
- }
- return 1;
- break;
-
- default:
- break;
- }
- break;
-
- case N_CCLASS:
- {
- int v;
- CClassNode* yc = &(NCCLASS(y));
-
- for (i = 0; i < SINGLE_BYTE_SIZE; i++) {
- v = BITSET_AT(xc->bs, i);
- if ((v != 0 && xc->not == 0) || (v == 0 && xc->not)) {
- v = BITSET_AT(yc->bs, i);
- if ((v != 0 && yc->not == 0) || (v == 0 && yc->not))
- return 0;
- }
- }
- if ((IS_NULL(xc->mbuf) && xc->not == 0) ||
- (IS_NULL(yc->mbuf) && yc->not == 0))
- return 1;
- return 0;
- }
- break;
-
- case N_STRING:
- goto swap;
- break;
-
- default:
- break;
- }
- }
- break;
-
- case N_STRING:
- {
- StrNode* xs = &(NSTRING(x));
- if (NSTRING_LEN(x) == 0)
- break;
-
- c = *(xs->s);
- switch (ytype) {
- case N_CTYPE:
- switch (NCTYPE(y).type) {
- case CTYPE_WORD:
- return (ONIGENC_IS_MBC_WORD(reg->enc, xs->s, xs->end) ? 0 : 1);
- break;
- case CTYPE_NOT_WORD:
- return (ONIGENC_IS_MBC_WORD(reg->enc, xs->s, xs->end) ? 1 : 0);
- break;
- default:
- break;
- }
- break;
-
- case N_CCLASS:
- {
- CClassNode* cc = &(NCCLASS(y));
-
- code = ONIGENC_MBC_TO_CODE(reg->enc, xs->s,
- xs->s + enc_len(reg->enc, c));
- return (onig_is_code_in_cc(reg->enc, code, cc) != 0 ? 0 : 1);
- }
- break;
-
- case N_STRING:
- {
- UChar *q;
- StrNode* ys = &(NSTRING(y));
- len = NSTRING_LEN(x);
- if (len > NSTRING_LEN(y)) len = NSTRING_LEN(y);
- if (NSTRING_IS_CASE_AMBIG(x) || NSTRING_IS_CASE_AMBIG(y)) {
- UChar plow[ONIGENC_MBC_TO_LOWER_MAXLEN];
- UChar qlow[ONIGENC_MBC_TO_LOWER_MAXLEN];
- int plen, qlen;
- for (p = ys->s, q = xs->s; q < xs->end; ) {
- plen = ONIGENC_MBC_TO_LOWER(reg->enc, p, plow);
- qlen = ONIGENC_MBC_TO_LOWER(reg->enc, q, qlow);
- if (plen != qlen || onig_strncmp(plow, qlow, plen) != 0)
- return 1;
- p += enc_len(reg->enc, *p);
- q += enc_len(reg->enc, *q);
- }
- }
- else {
- for (i = 0, p = ys->s, q = xs->s; i < len; i++, p++, q++) {
- if (*p != *q) return 1;
- }
- }
- }
- break;
-
- default:
- break;
- }
- }
- break;
-
- default:
- break;
- }
-
- return 0;
-}
-
-static Node*
-get_head_value_node(Node* node, int exact, regex_t* reg)
-{
- Node* n = NULL_NODE;
-
- switch (NTYPE(node)) {
- case N_BACKREF:
- case N_ALT:
- case N_ANYCHAR:
-#ifdef USE_SUBEXP_CALL
- case N_CALL:
-#endif
- break;
-
- case N_CTYPE:
- case N_CCLASS:
- if (exact == 0) {
- n = node;
- }
- break;
-
- case N_LIST:
- n = get_head_value_node(NCONS(node).left, exact, reg);
- break;
-
- case N_STRING:
- {
- StrNode* sn = &(NSTRING(node));
-
- if (sn->end <= sn->s)
- break;
-
- if (exact != 0 &&
- !NSTRING_IS_RAW(node) && IS_IGNORECASE(reg->options)) {
- if (! ONIGENC_IS_MBC_CASE_AMBIG(reg->enc, sn->s))
- n = node;
- }
- else {
- n = node;
- }
- }
- break;
-
- case N_QUALIFIER:
- {
- QualifierNode* qn = &(NQUALIFIER(node));
- if (qn->lower > 0) {
- if (IS_NOT_NULL(qn->head_exact))
- n = qn->head_exact;
- else
- n = get_head_value_node(qn->target, exact, reg);
- }
- }
- break;
-
- case N_EFFECT:
- {
- EffectNode* en = &(NEFFECT(node));
- switch (en->type) {
- case EFFECT_OPTION:
- {
- OnigOptionType options = reg->options;
-
- reg->options = NEFFECT(node).option;
- n = get_head_value_node(NEFFECT(node).target, exact, reg);
- reg->options = options;
- }
- break;
-
- case EFFECT_MEMORY:
- case EFFECT_STOP_BACKTRACK:
- n = get_head_value_node(en->target, exact, reg);
- break;
- }
- }
- break;
-
- case N_ANCHOR:
- if (NANCHOR(node).type == ANCHOR_PREC_READ)
- n = get_head_value_node(NANCHOR(node).target, exact, reg);
- break;
-
- default:
- break;
- }
-
- return n;
-}
-
-static int
-check_type_tree(Node* node, int type_mask, int effect_mask, int anchor_mask)
-{
- int type, r = 0;
-
- type = NTYPE(node);
- if ((type & type_mask) == 0)
- return 1;
-
- switch (type) {
- case N_LIST:
- case N_ALT:
- do {
- r = check_type_tree(NCONS(node).left, type_mask, effect_mask, anchor_mask);
- } while (r == 0 && IS_NOT_NULL(node = NCONS(node).right));
- break;
-
- case N_QUALIFIER:
- r = check_type_tree(NQUALIFIER(node).target, type_mask, effect_mask,
- anchor_mask);
- break;
-
- case N_EFFECT:
- {
- EffectNode* en = &(NEFFECT(node));
- if ((en->type & effect_mask) == 0)
- return 1;
-
- r = check_type_tree(en->target, type_mask, effect_mask, anchor_mask);
- }
- break;
-
- case N_ANCHOR:
- type = NANCHOR(node).type;
- if ((type & anchor_mask) == 0)
- return 1;
-
- if (NANCHOR(node).target)
- r = check_type_tree(NANCHOR(node).target,
- type_mask, effect_mask, anchor_mask);
- break;
-
- default:
- break;
- }
- return r;
-}
-
-#ifdef USE_SUBEXP_CALL
-
-#define RECURSION_EXIST 1
-#define RECURSION_INFINITE 2
-
-static int
-subexp_inf_recursive_check(Node* node, ScanEnv* env, int head)
-{
- int type;
- int r = 0;
-
- type = NTYPE(node);
- switch (type) {
- case N_LIST:
- {
- Node *x;
- OnigDistance min;
- int ret;
-
- x = node;
- do {
- ret = subexp_inf_recursive_check(NCONS(x).left, env, head);
- if (ret < 0 || ret == RECURSION_INFINITE) return ret;
- r |= ret;
- if (head) {
- ret = get_min_match_length(NCONS(x).left, &min, env);
- if (ret != 0) return ret;
- if (min != 0) head = 0;
- }
- } while (IS_NOT_NULL(x = NCONS(x).right));
- }
- break;
-
- case N_ALT:
- {
- int ret;
- r = RECURSION_EXIST;
- do {
- ret = subexp_inf_recursive_check(NCONS(node).left, env, head);
- if (ret < 0 || ret == RECURSION_INFINITE) return ret;
- r &= ret;
- } while (IS_NOT_NULL(node = NCONS(node).right));
- }
- break;
-
- case N_QUALIFIER:
- r = subexp_inf_recursive_check(NQUALIFIER(node).target, env, head);
- break;
-
- case N_ANCHOR:
- {
- AnchorNode* an = &(NANCHOR(node));
- switch (an->type) {
- case ANCHOR_PREC_READ:
- case ANCHOR_PREC_READ_NOT:
- case ANCHOR_LOOK_BEHIND:
- case ANCHOR_LOOK_BEHIND_NOT:
- r = subexp_inf_recursive_check(an->target, env, head);
- break;
- }
- }
- break;
-
- case N_CALL:
- r = subexp_inf_recursive_check(NCALL(node).target, env, head);
- break;
-
- case N_EFFECT:
- if (IS_EFFECT_MARK2(&(NEFFECT(node))))
- return 0;
- else if (IS_EFFECT_MARK1(&(NEFFECT(node))))
- return (head == 0 ? RECURSION_EXIST : RECURSION_INFINITE);
- else {
- SET_EFFECT_STATUS(node, NST_MARK2);
- r = subexp_inf_recursive_check(NEFFECT(node).target, env, head);
- CLEAR_EFFECT_STATUS(node, NST_MARK2);
- }
- break;
-
- default:
- break;
- }
-
- return r;
-}
-
-static int
-subexp_inf_recursive_check_trav(Node* node, ScanEnv* env)
-{
- int type;
- int r = 0;
-
- type = NTYPE(node);
- switch (type) {
- case N_LIST:
- case N_ALT:
- do {
- r = subexp_inf_recursive_check_trav(NCONS(node).left, env);
- } while (r == 0 && IS_NOT_NULL(node = NCONS(node).right));
- break;
-
- case N_QUALIFIER:
- r = subexp_inf_recursive_check_trav(NQUALIFIER(node).target, env);
- break;
-
- case N_ANCHOR:
- {
- AnchorNode* an = &(NANCHOR(node));
- switch (an->type) {
- case ANCHOR_PREC_READ:
- case ANCHOR_PREC_READ_NOT:
- case ANCHOR_LOOK_BEHIND:
- case ANCHOR_LOOK_BEHIND_NOT:
- r = subexp_inf_recursive_check_trav(an->target, env);
- break;
- }
- }
- break;
-
- case N_EFFECT:
- {
- EffectNode* en = &(NEFFECT(node));
-
- if (IS_EFFECT_RECURSION(en)) {
- SET_EFFECT_STATUS(node, NST_MARK1);
- r = subexp_inf_recursive_check(en->target, env, 1);
- if (r > 0) return ONIGERR_NEVER_ENDING_RECURSION;
- CLEAR_EFFECT_STATUS(node, NST_MARK1);
- }
- r = subexp_inf_recursive_check_trav(en->target, env);
- }
-
- break;
-
- default:
- break;
- }
-
- return r;
-}
-
-static int
-subexp_recursive_check(Node* node)
-{
- int type;
- int r = 0;
-
- type = NTYPE(node);
- switch (type) {
- case N_LIST:
- case N_ALT:
- do {
- r |= subexp_recursive_check(NCONS(node).left);
- } while (IS_NOT_NULL(node = NCONS(node).right));
- break;
-
- case N_QUALIFIER:
- r = subexp_recursive_check(NQUALIFIER(node).target);
- break;
-
- case N_ANCHOR:
- {
- AnchorNode* an = &(NANCHOR(node));
- switch (an->type) {
- case ANCHOR_PREC_READ:
- case ANCHOR_PREC_READ_NOT:
- case ANCHOR_LOOK_BEHIND:
- case ANCHOR_LOOK_BEHIND_NOT:
- r = subexp_recursive_check(an->target);
- break;
- }
- }
- break;
-
- case N_CALL:
- r = subexp_recursive_check(NCALL(node).target);
- if (r != 0) SET_CALL_RECURSION(node);
- break;
-
- case N_EFFECT:
- if (IS_EFFECT_MARK2(&(NEFFECT(node))))
- return 0;
- else if (IS_EFFECT_MARK1(&(NEFFECT(node))))
- return 1; /* recursion */
- else {
- SET_EFFECT_STATUS(node, NST_MARK2);
- r = subexp_recursive_check(NEFFECT(node).target);
- CLEAR_EFFECT_STATUS(node, NST_MARK2);
- }
- break;
-
- default:
- break;
- }
-
- return r;
-}
-
-
-static int
-subexp_recursive_check_trav(Node* node, ScanEnv* env)
-{
-#define FOUND_CALLED_NODE 1
-
- int type;
- int r = 0;
-
- type = NTYPE(node);
- switch (type) {
- case N_LIST:
- case N_ALT:
- {
- int ret;
- do {
- ret = subexp_recursive_check_trav(NCONS(node).left, env);
- if (ret == FOUND_CALLED_NODE) r = FOUND_CALLED_NODE;
- else if (ret < 0) return ret;
- } while (IS_NOT_NULL(node = NCONS(node).right));
- }
- break;
-
- case N_QUALIFIER:
- r = subexp_recursive_check_trav(NQUALIFIER(node).target, env);
- if (NQUALIFIER(node).upper == 0) {
- if (r == FOUND_CALLED_NODE)
- NQUALIFIER(node).is_refered = 1;
- }
- break;
-
- case N_ANCHOR:
- {
- AnchorNode* an = &(NANCHOR(node));
- switch (an->type) {
- case ANCHOR_PREC_READ:
- case ANCHOR_PREC_READ_NOT:
- case ANCHOR_LOOK_BEHIND:
- case ANCHOR_LOOK_BEHIND_NOT:
- r = subexp_recursive_check_trav(an->target, env);
- break;
- }
- }
- break;
-
- case N_EFFECT:
- {
- EffectNode* en = &(NEFFECT(node));
-
- if (! IS_EFFECT_RECURSION(en)) {
- if (IS_EFFECT_CALLED(en)) {
- SET_EFFECT_STATUS(node, NST_MARK1);
- r = subexp_recursive_check(en->target);
- if (r != 0) SET_EFFECT_STATUS(node, NST_RECURSION);
- CLEAR_EFFECT_STATUS(node, NST_MARK1);
- }
- }
- r = subexp_recursive_check_trav(en->target, env);
- if (IS_EFFECT_CALLED(en))
- r |= FOUND_CALLED_NODE;
- }
- break;
-
- default:
- break;
- }
-
- return r;
-}
-
-static int
-setup_subexp_call(Node* node, ScanEnv* env)
-{
- int type;
- int r = 0;
-
- type = NTYPE(node);
- switch (type) {
- case N_LIST:
- do {
- r = setup_subexp_call(NCONS(node).left, env);
- } while (r == 0 && IS_NOT_NULL(node = NCONS(node).right));
- break;
-
- case N_ALT:
- do {
- r = setup_subexp_call(NCONS(node).left, env);
- } while (r == 0 && IS_NOT_NULL(node = NCONS(node).right));
- break;
-
- case N_QUALIFIER:
- r = setup_subexp_call(NQUALIFIER(node).target, env);
- break;
- case N_EFFECT:
- r = setup_subexp_call(NEFFECT(node).target, env);
- break;
-
- case N_CALL:
- {
- int n, num, *refs;
- UChar *p;
- CallNode* cn = &(NCALL(node));
- Node** nodes = SCANENV_MEM_NODES(env);
-
-#ifdef USE_NAMED_GROUP
- n = onig_name_to_group_numbers(env->reg, cn->name, cn->name_end, &refs);
-#else
- n = -1;
-#endif
- if (n <= 0) {
- /* name not found, check group number. (?*ddd) */
- p = cn->name;
- num = onig_scan_unsigned_number(&p, cn->name_end, env->enc);
- if (num <= 0 || p != cn->name_end) {
- onig_scan_env_set_error_string(env,
- ONIGERR_UNDEFINED_NAME_REFERENCE, cn->name, cn->name_end);
- return ONIGERR_UNDEFINED_NAME_REFERENCE;
- }
-#ifdef USE_NAMED_GROUP
- if (env->num_named > 0 &&
- IS_SYNTAX_BV(env->syntax, ONIG_SYN_CAPTURE_ONLY_NAMED_GROUP) &&
- !ONIG_IS_OPTION_ON(env->option, ONIG_OPTION_CAPTURE_GROUP)) {
- return ONIGERR_NUMBERED_BACKREF_OR_CALL_NOT_ALLOWED;
- }
-#endif
- if (num > env->num_mem) {
- onig_scan_env_set_error_string(env,
- ONIGERR_UNDEFINED_GROUP_REFERENCE, cn->name, cn->name_end);
- return ONIGERR_UNDEFINED_GROUP_REFERENCE;
- }
- cn->ref_num = num;
- goto set_call_attr;
- }
- else if (n > 1) {
- onig_scan_env_set_error_string(env,
- ONIGERR_MULTIPLEX_DEFINITION_NAME_CALL, cn->name, cn->name_end);
- return ONIGERR_MULTIPLEX_DEFINITION_NAME_CALL;
- }
- else {
- cn->ref_num = refs[0];
- set_call_attr:
- cn->target = nodes[cn->ref_num];
- if (IS_NULL(cn->target)) {
- onig_scan_env_set_error_string(env,
- ONIGERR_UNDEFINED_NAME_REFERENCE, cn->name, cn->name_end);
- return ONIGERR_UNDEFINED_NAME_REFERENCE;
- }
- SET_EFFECT_STATUS(cn->target, NST_CALLED);
- BIT_STATUS_ON_AT(env->bt_mem_start, cn->ref_num);
- cn->unset_addr_list = env->unset_addr_list;
- }
- }
- break;
-
- case N_ANCHOR:
- {
- AnchorNode* an = &(NANCHOR(node));
-
- switch (an->type) {
- case ANCHOR_PREC_READ:
- case ANCHOR_PREC_READ_NOT:
- case ANCHOR_LOOK_BEHIND:
- case ANCHOR_LOOK_BEHIND_NOT:
- r = setup_subexp_call(an->target, env);
- break;
- }
- }
- break;
-
- default:
- break;
- }
-
- return r;
-}
-#endif
-
-/* divide different length alternatives in look-behind.
- (?<=A|B) ==> (?<=A)|(?<=B)
- (?<!A|B) ==> (?<!A)(?<!B)
-*/
-static int
-divide_look_behind_alternatives(Node* node)
-{
- Node tmp_node;
- Node *head, *np, *insert_node;
- AnchorNode* an = &(NANCHOR(node));
- int anc_type = an->type;
-
- head = an->target;
- np = NCONS(head).left;
- tmp_node = *node; *node = *head; *head = tmp_node;
- NCONS(node).left = head;
- NANCHOR(head).target = np;
-
- np = node;
- while ((np = NCONS(np).right) != NULL_NODE) {
- insert_node = onig_node_new_anchor(anc_type);
- CHECK_NULL_RETURN_VAL(insert_node, ONIGERR_MEMORY);
- NANCHOR(insert_node).target = NCONS(np).left;
- NCONS(np).left = insert_node;
- }
-
- if (anc_type == ANCHOR_LOOK_BEHIND_NOT) {
- np = node;
- do {
- np->type = N_LIST; /* alt -> list */
- } while ((np = NCONS(np).right) != NULL_NODE);
- }
- return 0;
-}
-
-static int
-setup_look_behind(Node* node, regex_t* reg, ScanEnv* env)
-{
- int r, len;
- AnchorNode* an = &(NANCHOR(node));
-
- r = get_char_length_tree(an->target, reg, &len);
- if (r == 0)
- an->char_len = len;
- else if (r == GET_CHAR_LEN_VARLEN)
- r = ONIGERR_INVALID_LOOK_BEHIND_PATTERN;
- else if (r == GET_CHAR_LEN_TOP_ALT_VARLEN) {
- if (IS_SYNTAX_BV(env->syntax, ONIG_SYN_DIFFERENT_LEN_ALT_LOOK_BEHIND))
- r = divide_look_behind_alternatives(node);
- else
- r = ONIGERR_INVALID_LOOK_BEHIND_PATTERN;
- }
-
- return r;
-}
-
-static int
-next_setup(Node* node, Node* next_node, regex_t* reg)
-{
- int type;
-
- retry:
- type = NTYPE(node);
- if (type == N_QUALIFIER) {
- QualifierNode* qn = &(NQUALIFIER(node));
- if (qn->greedy && IS_REPEAT_INFINITE(qn->upper)) {
-#ifdef USE_QUALIFIER_PEEK_NEXT
- qn->next_head_exact = get_head_value_node(next_node, 1, reg);
-#endif
- /* automatic posseivation a*b ==> (?>a*)b */
- if (qn->lower <= 1) {
- int ttype = NTYPE(qn->target);
- if (IS_NODE_TYPE_SIMPLE(ttype)) {
- Node *x, *y;
- x = get_head_value_node(qn->target, 0, reg);
- if (IS_NOT_NULL(x)) {
- y = get_head_value_node(next_node, 0, reg);
- if (IS_NOT_NULL(y) && is_not_included(x, y, reg)) {
- Node* en = onig_node_new_effect(EFFECT_STOP_BACKTRACK);
- CHECK_NULL_RETURN_VAL(en, ONIGERR_MEMORY);
- SET_EFFECT_STATUS(en, NST_SIMPLE_REPEAT);
- swap_node(node, en);
- NEFFECT(node).target = en;
- }
- }
- }
- }
- }
- }
- else if (type == N_EFFECT) {
- EffectNode* en = &(NEFFECT(node));
- if (en->type == EFFECT_MEMORY) {
- node = en->target;
- goto retry;
- }
- }
- return 0;
-}
-
-#define IN_ALT (1<<0)
-#define IN_NOT (1<<1)
-#define IN_REPEAT (1<<2)
-
-/* setup_tree does the following work.
- 1. check empty loop. (set qn->target_empty_info)
- 2. expand ignore-case in char class.
- 3. set memory status bit flags. (reg->mem_stats)
- 4. set qn->head_exact for [push, exact] -> [push_or_jump_exact1, exact].
- 5. find invalid patterns in look-behind.
- 6. expand repeated string.
- */
-static int
-setup_tree(Node* node, regex_t* reg, int state, ScanEnv* env)
-{
- int type;
- int r = 0;
-
- type = NTYPE(node);
- switch (type) {
- case N_LIST:
- {
- Node* prev = NULL_NODE;
- do {
- r = setup_tree(NCONS(node).left, reg, state, env);
- if (IS_NOT_NULL(prev) && r == 0) {
- r = next_setup(prev, NCONS(node).left, reg);
- }
- prev = NCONS(node).left;
- } while (r == 0 && IS_NOT_NULL(node = NCONS(node).right));
- }
- break;
-
- case N_ALT:
- do {
- r = setup_tree(NCONS(node).left, reg, (state | IN_ALT), env);
- } while (r == 0 && IS_NOT_NULL(node = NCONS(node).right));
- break;
-
- case N_CCLASS:
- if (IS_IGNORECASE(reg->options)) {
- int i;
- UChar c, lowbuf[ONIGENC_MBC_TO_LOWER_MAXLEN];
- BitSetRef bs = NCCLASS(node).bs;
- for (i = 0; i < SINGLE_BYTE_SIZE; i++) {
- c = (UChar )i;
- ONIGENC_MBC_TO_LOWER(reg->enc, &c, lowbuf);
- if (*lowbuf != c) {
- if (BITSET_AT(bs, c)) BITSET_SET_BIT(bs, *lowbuf);
- if (BITSET_AT(bs, *lowbuf)) BITSET_SET_BIT(bs, c);
- }
- }
- }
- break;
-
- case N_STRING:
- if (IS_IGNORECASE(reg->options) && !NSTRING_IS_RAW(node)) {
- StrNode* sn = &NSTRING(node);
- UChar* p = sn->s;
-
- while (p < sn->end) {
- if (ONIGENC_IS_MBC_CASE_AMBIG(reg->enc, p)) {
- NSTRING_SET_CASE_AMBIG(node);
- break;
- }
- p++;
- }
- }
- break;
-
- case N_CTYPE:
- case N_ANYCHAR:
- break;
-
-#ifdef USE_SUBEXP_CALL
- case N_CALL:
- break;
-#endif
-
- case N_BACKREF:
- {
- int i;
- int* p;
- Node** nodes = SCANENV_MEM_NODES(env);
- BackrefNode* br = &(NBACKREF(node));
- p = BACKREFS_P(br);
- for (i = 0; i < br->back_num; i++) {
- if (p[i] > env->num_mem) return ONIGERR_INVALID_BACKREF;
- BIT_STATUS_ON_AT(env->backrefed_mem, p[i]);
- BIT_STATUS_ON_AT(env->bt_mem_start, p[i]);
- SET_EFFECT_STATUS(nodes[p[i]], NST_MEM_BACKREFED);
- }
- }
- break;
-
- case N_QUALIFIER:
- {
- OnigDistance d;
- QualifierNode* qn = &(NQUALIFIER(node));
- Node* target = qn->target;
-
- if (IS_REPEAT_INFINITE(qn->upper) || qn->upper >= 1) {
- r = get_min_match_length(target, &d, env);
- if (r) break;
- if (d == 0) {
- qn->target_empty_info = NQ_TARGET_IS_EMPTY;
-#ifdef USE_INFINITE_REPEAT_MONOMANIAC_MEM_STATUS_CHECK
- r = qualifiers_memory_node_info(target);
- if (r < 0) break;
- if (r > 0) {
- qn->target_empty_info = r;
- }
-#endif
-#if 0
- r = get_max_match_length(target, &d, env);
- if (r == 0 && d == 0) {
- /* ()* ==> ()?, ()+ ==> () */
- qn->upper = 1;
- if (qn->lower > 1) qn->lower = 1;
- if (NTYPE(target) == N_STRING) {
- qn->upper = qn->lower = 0; /* /(?:)+/ ==> // */
- }
- }
-#endif
- }
- }
-
- if (qn->lower != qn->upper)
- state |= IN_REPEAT;
- r = setup_tree(target, reg, state, env);
- if (r) break;
-
- /* expand string */
-#define EXPAND_STRING_MAX_LENGTH 100
- if (NTYPE(target) == N_STRING) {
- if (!IS_REPEAT_INFINITE(qn->lower) && qn->lower == qn->upper &&
- qn->lower > 1 && qn->lower <= EXPAND_STRING_MAX_LENGTH) {
- int len = NSTRING_LEN(target);
- StrNode* sn = &(NSTRING(target));
-
- if (len * qn->lower <= EXPAND_STRING_MAX_LENGTH) {
- int i, n = qn->lower;
- onig_node_conv_to_str_node(node, NSTRING(target).flag);
- for (i = 0; i < n; i++) {
- r = onig_node_str_cat(node, sn->s, sn->end);
- if (r) break;
- }
- onig_node_free(target);
- break; /* break case N_QUALIFIER: */
- }
- }
- }
-
-#ifdef USE_OP_PUSH_OR_JUMP_EXACT
- if (qn->greedy && (qn->target_empty_info != 0)) {
- if (NTYPE(target) == N_QUALIFIER) {
- QualifierNode* tqn = &(NQUALIFIER(target));
- if (IS_NOT_NULL(tqn->head_exact)) {
- qn->head_exact = tqn->head_exact;
- tqn->head_exact = NULL;
- }
- }
- else {
- qn->head_exact = get_head_value_node(qn->target, 1, reg);
- }
- }
-#endif
- }
- break;
-
- case N_EFFECT:
- {
- EffectNode* en = &(NEFFECT(node));
-
- switch (en->type) {
- case EFFECT_OPTION:
- {
- OnigOptionType options = reg->options;
- reg->options = NEFFECT(node).option;
- r = setup_tree(NEFFECT(node).target, reg, state, env);
- reg->options = options;
- }
- break;
-
- case EFFECT_MEMORY:
- if ((state & (IN_ALT | IN_NOT | IN_REPEAT)) != 0) {
- BIT_STATUS_ON_AT(env->bt_mem_start, en->regnum);
- /* SET_EFFECT_STATUS(node, NST_MEM_IN_ALT_NOT); */
- }
- /* fall */
- case EFFECT_STOP_BACKTRACK:
- {
- Node* target = en->target;
- r = setup_tree(target, reg, state, env);
- if (NTYPE(target) == N_QUALIFIER) {
- QualifierNode* tqn = &(NQUALIFIER(target));
- if (IS_REPEAT_INFINITE(tqn->upper) && tqn->lower <= 1 &&
- tqn->greedy != 0) { /* (?>a*), a*+ etc... */
- int qtype = NTYPE(tqn->target);
- if (IS_NODE_TYPE_SIMPLE(qtype))
- SET_EFFECT_STATUS(node, NST_SIMPLE_REPEAT);
- }
- }
- }
- break;
- }
- }
- break;
-
- case N_ANCHOR:
- {
- AnchorNode* an = &(NANCHOR(node));
-
- switch (an->type) {
- case ANCHOR_PREC_READ:
- r = setup_tree(an->target, reg, state, env);
- break;
- case ANCHOR_PREC_READ_NOT:
- r = setup_tree(an->target, reg, (state | IN_NOT), env);
- break;
-
-/* allowed node types in look-behind */
-#define ALLOWED_TYPE_IN_LB \
- ( N_LIST | N_ALT | N_STRING | N_CCLASS | N_CTYPE | \
- N_ANYCHAR | N_ANCHOR | N_EFFECT | N_QUALIFIER | N_CALL )
-
-#define ALLOWED_EFFECT_IN_LB ( EFFECT_MEMORY )
-#define ALLOWED_EFFECT_IN_LB_NOT 0
-
-#define ALLOWED_ANCHOR_IN_LB \
-( ANCHOR_LOOK_BEHIND | ANCHOR_BEGIN_LINE | ANCHOR_END_LINE | ANCHOR_BEGIN_BUF )
-#define ALLOWED_ANCHOR_IN_LB_NOT \
-( ANCHOR_LOOK_BEHIND_NOT | ANCHOR_BEGIN_LINE | ANCHOR_END_LINE | ANCHOR_BEGIN_BUF )
- /* can't allow all anchors, because \G in look-behind through Search().
- ex. /(?<=\G)zz/.match("azz") => success. */
-
- case ANCHOR_LOOK_BEHIND:
- {
- r = check_type_tree(an->target, ALLOWED_TYPE_IN_LB,
- ALLOWED_EFFECT_IN_LB, ALLOWED_ANCHOR_IN_LB);
- if (r < 0) return r;
- if (r > 0) return ONIGERR_INVALID_LOOK_BEHIND_PATTERN;
- r = setup_look_behind(node, reg, env);
- if (r != 0) return r;
- r = setup_tree(an->target, reg, state, env);
- }
- break;
-
- case ANCHOR_LOOK_BEHIND_NOT:
- {
- r = check_type_tree(an->target, ALLOWED_TYPE_IN_LB,
- ALLOWED_EFFECT_IN_LB_NOT, ALLOWED_ANCHOR_IN_LB_NOT);
- if (r < 0) return r;
- if (r > 0) return ONIGERR_INVALID_LOOK_BEHIND_PATTERN;
- r = setup_look_behind(node, reg, env);
- if (r != 0) return r;
- r = setup_tree(an->target, reg, (state | IN_NOT), env);
- }
- break;
- }
- }
- break;
-
- default:
- break;
- }
-
- return r;
-}
-
-/* set skip map for Boyer-Moor search */
-static int
-set_bm_skip(UChar* s, UChar* end, OnigEncoding enc, int ignore_case,
- UChar skip[], int** int_skip)
-{
- int i, len;
- UChar lowbuf[ONIGENC_MBC_TO_LOWER_MAXLEN];
-
- len = end - s;
- if (len < ONIG_CHAR_TABLE_SIZE) {
- for (i = 0; i < ONIG_CHAR_TABLE_SIZE; i++) skip[i] = len;
-
- if (ignore_case) {
- for (i = 0; i < len - 1; i++) {
- ONIGENC_MBC_TO_LOWER(enc, &(s[i]), lowbuf);
- skip[*lowbuf] = len - 1 - i;
- }
- }
- else {
- for (i = 0; i < len - 1; i++)
- skip[s[i]] = len - 1 - i;
- }
- }
- else {
- if (IS_NULL(*int_skip)) {
- *int_skip = (int* )xmalloc(sizeof(int) * ONIG_CHAR_TABLE_SIZE);
- if (IS_NULL(*int_skip)) return ONIGERR_MEMORY;
- }
- for (i = 0; i < ONIG_CHAR_TABLE_SIZE; i++) (*int_skip)[i] = len;
-
- if (ignore_case) {
- for (i = 0; i < len - 1; i++) {
- ONIGENC_MBC_TO_LOWER(enc, &(s[i]), lowbuf);
- (*int_skip)[*lowbuf] = len - 1 - i;
- }
- }
- else {
- for (i = 0; i < len - 1; i++)
- (*int_skip)[s[i]] = len - 1 - i;
- }
- }
- return 0;
-}
-
-#define OPT_EXACT_MAXLEN 24
-
-typedef struct {
- OnigDistance min; /* min byte length */
- OnigDistance max; /* max byte length */
-} MinMaxLen;
-
-typedef struct {
- MinMaxLen mmd;
- BitStatusType backrefed_status;
- OnigEncoding enc;
- OnigOptionType options;
- ScanEnv* scan_env;
-} OptEnv;
-
-typedef struct {
- int left_anchor;
- int right_anchor;
-} OptAncInfo;
-
-typedef struct {
- MinMaxLen mmd; /* info position */
- OptAncInfo anc;
-
- int reach_end;
- int ignore_case;
- int len;
- UChar s[OPT_EXACT_MAXLEN];
-} OptExactInfo;
-
-typedef struct {
- MinMaxLen mmd; /* info position */
- OptAncInfo anc;
-
- int value; /* weighted value */
- UChar map[ONIG_CHAR_TABLE_SIZE];
-} OptMapInfo;
-
-typedef struct {
- MinMaxLen len;
-
- OptAncInfo anc;
- OptExactInfo exb; /* boundary */
- OptExactInfo exm; /* middle */
- OptExactInfo expr; /* prec read (?=...) */
-
- OptMapInfo map; /* boundary */
-} NodeOptInfo;
-
-
-static int
-map_position_value(int i)
-{
- static int vals[] = {
- 10, 10, 10, 10, 10, 10, 10, 10, 10, 1, 1, 10, 10, 1, 10, 10,
- 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
- 1, 6, 3, 6, 6, 6, 6, 6, 6, 5, 5, 5, 5, 5, 5, 5,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5,
- 5, 4, 4, 4, 4, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 4, 5, 5, 5,
- 5, 4, 4, 4, 4, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 10,
- };
-
- if (i < sizeof(vals)/sizeof(vals[0])) return vals[i];
-
- return 7; /* Take it easy. */
-}
-
-static int
-distance_value(MinMaxLen* mm)
-{
- /* 1000 / (min-max-dist + 1) */
- static int dist_vals[] = {
- 1000, 500, 333, 250, 200, 167, 143, 125, 111, 100,
- 91, 83, 77, 71, 67, 63, 59, 56, 53, 50,
- 48, 45, 43, 42, 40, 38, 37, 36, 34, 33,
- 32, 31, 30, 29, 29, 28, 27, 26, 26, 25,
- 24, 24, 23, 23, 22, 22, 21, 21, 20, 20,
- 20, 19, 19, 19, 18, 18, 18, 17, 17, 17,
- 16, 16, 16, 16, 15, 15, 15, 15, 14, 14,
- 14, 14, 14, 14, 13, 13, 13, 13, 13, 13,
- 12, 12, 12, 12, 12, 12, 11, 11, 11, 11,
- 11, 11, 11, 11, 11, 10, 10, 10, 10, 10
- };
-
- int d;
-
- if (mm->max == ONIG_INFINITE_DISTANCE) return 0;
-
- d = mm->max - mm->min;
- if (d < sizeof(dist_vals)/sizeof(dist_vals[0]))
- /* return dist_vals[d] * 16 / (mm->min + 12); */
- return dist_vals[d];
- else
- return 1;
-}
-
-static int
-comp_distance_value(MinMaxLen* d1, MinMaxLen* d2, int v1, int v2)
-{
- if (v2 <= 0) return -1;
- if (v1 <= 0) return 1;
-
- v1 *= distance_value(d1);
- v2 *= distance_value(d2);
-
- if (v2 > v1) return 1;
- if (v2 < v1) return -1;
-
- if (d2->min < d1->min) return 1;
- if (d2->min > d1->min) return -1;
- return 0;
-}
-
-static int
-is_equal_mml(MinMaxLen* a, MinMaxLen* b)
-{
- return (a->min == b->min && a->max == b->max) ? 1 : 0;
-}
-
-
-static void
-set_mml(MinMaxLen* mml, OnigDistance min, OnigDistance max)
-{
- mml->min = min;
- mml->max = max;
-}
-
-static void
-clear_mml(MinMaxLen* mml)
-{
- mml->min = mml->max = 0;
-}
-
-static void
-copy_mml(MinMaxLen* to, MinMaxLen* from)
-{
- to->min = from->min;
- to->max = from->max;
-}
-
-static void
-add_mml(MinMaxLen* to, MinMaxLen* from)
-{
- to->min = distance_add(to->min, from->min);
- to->max = distance_add(to->max, from->max);
-}
-
-static void
-add_len_mml(MinMaxLen* to, OnigDistance len)
-{
- to->min = distance_add(to->min, len);
- to->max = distance_add(to->max, len);
-}
-
-static void
-alt_merge_mml(MinMaxLen* to, MinMaxLen* from)
-{
- if (to->min > from->min) to->min = from->min;
- if (to->max < from->max) to->max = from->max;
-}
-
-static void
-copy_opt_env(OptEnv* to, OptEnv* from)
-{
- *to = *from;
-}
-
-static void
-clear_opt_anc_info(OptAncInfo* anc)
-{
- anc->left_anchor = 0;
- anc->right_anchor = 0;
-}
-
-static void
-copy_opt_anc_info(OptAncInfo* to, OptAncInfo* from)
-{
- *to = *from;
-}
-
-static void
-concat_opt_anc_info(OptAncInfo* to, OptAncInfo* left, OptAncInfo* right,
- OnigDistance left_len, OnigDistance right_len)
-{
- clear_opt_anc_info(to);
-
- to->left_anchor = left->left_anchor;
- if (left_len == 0) {
- to->left_anchor |= right->left_anchor;
- }
-
- to->right_anchor = right->right_anchor;
- if (right_len == 0) {
- to->right_anchor |= left->right_anchor;
- }
-}
-
-static int
-is_left_anchor(int anc)
-{
- if (anc == ANCHOR_END_BUF || anc == ANCHOR_SEMI_END_BUF ||
- anc == ANCHOR_END_LINE || anc == ANCHOR_PREC_READ ||
- anc == ANCHOR_PREC_READ_NOT)
- return 0;
-
- return 1;
-}
-
-static int
-is_set_opt_anc_info(OptAncInfo* to, int anc)
-{
- if ((to->left_anchor & anc) != 0) return 1;
-
- return ((to->right_anchor & anc) != 0 ? 1 : 0);
-}
-
-static void
-add_opt_anc_info(OptAncInfo* to, int anc)
-{
- if (is_left_anchor(anc))
- to->left_anchor |= anc;
- else
- to->right_anchor |= anc;
-}
-
-static void
-remove_opt_anc_info(OptAncInfo* to, int anc)
-{
- if (is_left_anchor(anc))
- to->left_anchor &= ~anc;
- else
- to->right_anchor &= ~anc;
-}
-
-static void
-alt_merge_opt_anc_info(OptAncInfo* to, OptAncInfo* add)
-{
- to->left_anchor &= add->left_anchor;
- to->right_anchor &= add->right_anchor;
-}
-
-static int
-is_full_opt_exact_info(OptExactInfo* ex)
-{
- return (ex->len >= OPT_EXACT_MAXLEN ? 1 : 0);
-}
-
-static void
-clear_opt_exact_info(OptExactInfo* ex)
-{
- clear_mml(&ex->mmd);
- clear_opt_anc_info(&ex->anc);
- ex->reach_end = 0;
- ex->ignore_case = 0;
- ex->len = 0;
- ex->s[0] = '\0';
-}
-
-static void
-copy_opt_exact_info(OptExactInfo* to, OptExactInfo* from)
-{
- *to = *from;
-}
-
-static void
-concat_opt_exact_info(OptExactInfo* to, OptExactInfo* add)
-{
- int i, n;
- OptAncInfo tanc;
-
- if (! to->ignore_case && add->ignore_case) {
- if (to->len >= add->len) return ; /* avoid */
-
- to->ignore_case = 1;
- }
-
- for (i = to->len, n = 0; n < add->len && i < OPT_EXACT_MAXLEN; i++, n++)
- to->s[i] = add->s[n];
-
- to->len = i;
- to->reach_end = (n == add->len ? add->reach_end : 0);
-
- concat_opt_anc_info(&tanc, &to->anc, &add->anc, 1, 1);
- if (! to->reach_end) tanc.right_anchor = 0;
- copy_opt_anc_info(&to->anc, &tanc);
-}
-
-static void
-concat_opt_exact_info_str(OptExactInfo* to,
- UChar* s, UChar* end, int raw, OnigEncoding enc)
-{
- int i, j, len;
- UChar *p;
-
- for (i = to->len, p = s; p < end && i < OPT_EXACT_MAXLEN; ) {
- if (raw) {
- to->s[i++] = *p++;
- }
- else {
- len = enc_len(enc, *p);
- if (i + len > OPT_EXACT_MAXLEN) break;
- for (j = 0; j < len; j++)
- to->s[i++] = *p++;
- }
- }
-
- to->len = i;
-}
-
-static void
-alt_merge_opt_exact_info(OptExactInfo* to, OptExactInfo* add, OptEnv* env)
-{
- int i, j, len;
-
- if (add->len == 0 || to->len == 0) {
- clear_opt_exact_info(to);
- return ;
- }
-
- if (! is_equal_mml(&to->mmd, &add->mmd)) {
- clear_opt_exact_info(to);
- return ;
- }
-
- for (i = 0; i < to->len && i < add->len; ) {
- if (to->s[i] != add->s[i]) break;
- len = enc_len(env->enc, to->s[i]);
-
- for (j = 1; j < len; j++) {
- if (to->s[i+j] != add->s[i+j]) break;
- }
- if (j < len) break;
- i += len;
- }
-
- if (! add->reach_end || i < add->len || i < to->len) {
- to->reach_end = 0;
- }
- to->len = i;
- to->ignore_case |= add->ignore_case;
-
- alt_merge_opt_anc_info(&to->anc, &add->anc);
- if (! to->reach_end) to->anc.right_anchor = 0;
-}
-
-static void
-select_opt_exact_info(OptExactInfo* now, OptExactInfo* alt)
-{
- int vlen1, vlen2;
-
- vlen1 = now->len * (now->ignore_case ? 1 : 2);
- vlen2 = alt->len * (alt->ignore_case ? 1 : 2);
-
- if (comp_distance_value(&now->mmd, &alt->mmd, vlen1, vlen2) > 0)
- copy_opt_exact_info(now, alt);
-}
-
-static void
-clear_opt_map_info(OptMapInfo* map)
-{
- int i;
-
- clear_mml(&map->mmd);
- clear_opt_anc_info(&map->anc);
- map->value = 0;
- for (i = 0; i < ONIG_CHAR_TABLE_SIZE; i++)
- map->map[i] = 0;
-}
-
-static void
-copy_opt_map_info(OptMapInfo* to, OptMapInfo* from)
-{
- *to = *from;
-}
-
-static void
-add_char_opt_map_info(OptMapInfo* map, int c)
-{
- if (map->map[c] == 0) {
- map->map[c] = 1;
- map->value += map_position_value(c);
- }
-}
-
-static void
-add_char_amb_opt_map_info(OptMapInfo* map, int c, OnigEncoding enc)
-{
- UChar x, low[ONIGENC_MBC_TO_LOWER_MAXLEN];
-
- add_char_opt_map_info(map, c);
-
- x = (UChar )c;
- ONIGENC_MBC_TO_LOWER(enc, &x, low);
- if (*low != x) {
- add_char_opt_map_info(map, (int )(*low));
- }
- else {
- int i;
- for (i = 0; i < ONIG_CHAR_TABLE_SIZE; i++) {
- x = (UChar )i;
- ONIGENC_MBC_TO_LOWER(enc, &x, low);
- if ((int )(*low) == c) add_char_opt_map_info(map, i);
- }
- }
-}
-
-static void
-select_opt_map_info(OptMapInfo* now, OptMapInfo* alt)
-{
- static int z = 1<<15; /* 32768: something big value */
-
- int v1, v2;
-
- if (alt->value == 0) return ;
- if (now->value == 0) {
- copy_opt_map_info(now, alt);
- return ;
- }
-
- v1 = z / now->value;
- v2 = z / alt->value;
- if (comp_distance_value(&now->mmd, &alt->mmd, v1, v2) > 0)
- copy_opt_map_info(now, alt);
-}
-
-static int
-comp_opt_exact_or_map_info(OptExactInfo* e, OptMapInfo* m)
-{
-#define COMP_EM_BASE 20
- int ve, vm;
-
- if (m->value <= 0) return -1;
-
- ve = COMP_EM_BASE * e->len * (e->ignore_case ? 1 : 2);
- vm = COMP_EM_BASE * 5 * 2 / m->value;
- return comp_distance_value(&e->mmd, &m->mmd, ve, vm);
-}
-
-static void
-alt_merge_opt_map_info(OptMapInfo* to, OptMapInfo* add)
-{
- int i, val;
-
- /* if (! is_equal_mml(&to->mmd, &add->mmd)) return ; */
- if (to->value == 0) return ;
- if (add->value == 0 || to->mmd.max < add->mmd.min) {
- clear_opt_map_info(to);
- return ;
- }
-
- alt_merge_mml(&to->mmd, &add->mmd);
-
- val = 0;
- for (i = 0; i < ONIG_CHAR_TABLE_SIZE; i++) {
- if (add->map[i])
- to->map[i] = 1;
-
- if (to->map[i])
- val += map_position_value(i);
- }
- to->value = val;
-
- alt_merge_opt_anc_info(&to->anc, &add->anc);
-}
-
-static void
-set_bound_node_opt_info(NodeOptInfo* opt, MinMaxLen* mmd)
-{
- copy_mml(&(opt->exb.mmd), mmd);
- copy_mml(&(opt->expr.mmd), mmd);
- copy_mml(&(opt->map.mmd), mmd);
-}
-
-static void
-clear_node_opt_info(NodeOptInfo* opt)
-{
- clear_mml(&opt->len);
- clear_opt_anc_info(&opt->anc);
- clear_opt_exact_info(&opt->exb);
- clear_opt_exact_info(&opt->exm);
- clear_opt_exact_info(&opt->expr);
- clear_opt_map_info(&opt->map);
-}
-
-static void
-copy_node_opt_info(NodeOptInfo* to, NodeOptInfo* from)
-{
- *to = *from;
-}
-
-static void
-concat_left_node_opt_info(NodeOptInfo* to, NodeOptInfo* add)
-{
- int exb_reach, exm_reach;
- OptAncInfo tanc;
-
- concat_opt_anc_info(&tanc, &to->anc, &add->anc, to->len.max, add->len.max);
- copy_opt_anc_info(&to->anc, &tanc);
-
- if (add->exb.len > 0 && to->len.max == 0) {
- concat_opt_anc_info(&tanc, &to->anc, &add->exb.anc,
- to->len.max, add->len.max);
- copy_opt_anc_info(&add->exb.anc, &tanc);
- }
-
- if (add->map.value > 0 && to->len.max == 0) {
- if (add->map.mmd.max == 0)
- add->map.anc.left_anchor |= to->anc.left_anchor;
- }
-
- exb_reach = to->exb.reach_end;
- exm_reach = to->exm.reach_end;
-
- if (add->len.max != 0)
- to->exb.reach_end = to->exm.reach_end = 0;
-
- if (add->exb.len > 0) {
- if (exb_reach) {
- concat_opt_exact_info(&to->exb, &add->exb);
- clear_opt_exact_info(&add->exb);
- }
- else if (exm_reach) {
- concat_opt_exact_info(&to->exm, &add->exb);
- clear_opt_exact_info(&add->exb);
- }
- }
- select_opt_exact_info(&to->exm, &add->exb);
- select_opt_exact_info(&to->exm, &add->exm);
-
- if (to->expr.len > 0) {
- if (add->len.max > 0) {
- if (to->expr.len > (int )add->len.max)
- to->expr.len = add->len.max;
-
- if (to->expr.mmd.max == 0)
- select_opt_exact_info(&to->exb, &to->expr);
- else
- select_opt_exact_info(&to->exm, &to->expr);
- }
- }
- else if (add->expr.len > 0) {
- copy_opt_exact_info(&to->expr, &add->expr);
- }
-
- select_opt_map_info(&to->map, &add->map);
-
- add_mml(&to->len, &add->len);
-}
-
-static void
-alt_merge_node_opt_info(NodeOptInfo* to, NodeOptInfo* add, OptEnv* env)
-{
- alt_merge_opt_anc_info (&to->anc, &add->anc);
- alt_merge_opt_exact_info(&to->exb, &add->exb, env);
- alt_merge_opt_exact_info(&to->exm, &add->exm, env);
- alt_merge_opt_exact_info(&to->expr, &add->expr, env);
- alt_merge_opt_map_info (&to->map, &add->map);
-
- alt_merge_mml(&to->len, &add->len);
-}
-
-
-#define MAX_NODE_OPT_INFO_REF_COUNT 5
-
-static int
-optimize_node_left(Node* node, NodeOptInfo* opt, OptEnv* env)
-{
- int type;
- int r = 0;
-
- clear_node_opt_info(opt);
- set_bound_node_opt_info(opt, &env->mmd);
-
- type = NTYPE(node);
- switch (type) {
- case N_LIST:
- {
- OptEnv nenv;
- NodeOptInfo nopt;
- Node* nd = node;
-
- copy_opt_env(&nenv, env);
- do {
- r = optimize_node_left(NCONS(nd).left, &nopt, &nenv);
- if (r == 0) {
- add_mml(&nenv.mmd, &nopt.len);
- concat_left_node_opt_info(opt, &nopt);
- }
- } while (r == 0 && IS_NOT_NULL(nd = NCONS(nd).right));
- }
- break;
-
- case N_ALT:
- {
- NodeOptInfo nopt;
- Node* nd = node;
-
- do {
- r = optimize_node_left(NCONS(nd).left, &nopt, env);
- if (r == 0) {
- if (nd == node) copy_node_opt_info(opt, &nopt);
- else alt_merge_node_opt_info(opt, &nopt, env);
- }
- } while ((r == 0) && IS_NOT_NULL(nd = NCONS(nd).right));
- }
- break;
-
- case N_STRING:
- {
- UChar *p;
- int len, plen;
- StrNode* sn = &(NSTRING(node));
- int slen = sn->end - sn->s;
- int is_raw = NSTRING_IS_RAW(node);
-
- if ((! IS_IGNORECASE(env->options)) || is_raw) {
- concat_opt_exact_info_str(&opt->exb, sn->s, sn->end,
- NSTRING_IS_RAW(node), env->enc);
- if (slen > 0) {
- add_char_opt_map_info(&opt->map, *(sn->s));
- }
- }
- else {
- for (p = sn->s; p < sn->end; ) {
- len = enc_len(env->enc, *p);
- if (len == 1 && ONIGENC_IS_MBC_CASE_AMBIG(env->enc, p)) {
- break;
- }
- p += len;
- }
-
- plen = p - sn->s;
- if (plen > slen / 5) {
- concat_opt_exact_info_str(&opt->exb, sn->s, p, is_raw, env->enc);
- concat_opt_exact_info_str(&opt->exm, p, sn->end, is_raw, env->enc);
- opt->exm.ignore_case = 1;
- if (opt->exm.len == sn->end - p)
- opt->exm.reach_end = 1;
-
- copy_mml(&(opt->exm.mmd), &(opt->exb.mmd));
- add_len_mml(&(opt->exm.mmd), plen);
- }
- else {
- concat_opt_exact_info_str(&opt->exb, sn->s, sn->end,
- is_raw, env->enc);
- opt->exb.ignore_case = 1;
- }
-
- if (slen > 0) {
- if (p == sn->s)
- add_char_amb_opt_map_info(&opt->map, *(sn->s), env->enc);
- else
- add_char_opt_map_info(&opt->map, *(sn->s));
- }
- }
-
- if (opt->exb.len == slen)
- opt->exb.reach_end = 1;
-
- set_mml(&opt->len, slen, slen);
- }
- break;
-
- case N_CCLASS:
- {
- int i, z, len, found, mb_found;
- CClassNode* cc = &(NCCLASS(node));
-
- /* no need to check ignore case. (setted in setup_tree()) */
- found = mb_found = 0;
- for (i = 0; i < SINGLE_BYTE_SIZE; i++) {
- z = BITSET_AT(cc->bs, i);
- if ((z && !cc->not) || (!z && cc->not)) {
- found = 1;
- add_char_opt_map_info(&opt->map, i);
- }
- }
-
- if (IS_NULL(cc->mbuf)) {
- if (cc->not) {
- for (i = 0; i < SINGLE_BYTE_SIZE; i++) {
- add_char_opt_map_info(&opt->map, i);
- }
- mb_found = 1;
- }
- }
- else {
- for (i = 0; i < SINGLE_BYTE_SIZE; i++) {
- z = ONIGENC_IS_MBC_HEAD(env->enc, i);
- if (z) {
- mb_found = 1;
- add_char_opt_map_info(&opt->map, i);
- }
- }
- }
-
- if (mb_found) {
- len = ONIGENC_MBC_MAXLEN_DIST(env->enc);
- set_mml(&opt->len, 1, len);
- }
- else if (found) {
- len = 1;
- set_mml(&opt->len, 1, len);
- }
- }
- break;
-
- case N_CTYPE:
- {
- int c;
- int len, min, max;
-
- min = ONIGENC_MBC_MAXLEN_DIST(env->enc);
- max = 0;
-
-#define IS_WORD_HEAD_BYTE(enc,b) \
- (ONIGENC_IS_MBC_ASCII(&b) ? ONIGENC_IS_CODE_WORD(enc,((OnigCodePoint )b)) \
- : ONIGENC_IS_MBC_HEAD(enc,b))
-
- switch (NCTYPE(node).type) {
- case CTYPE_WORD:
- for (c = 0; c < SINGLE_BYTE_SIZE; c++) {
- if (IS_WORD_HEAD_BYTE(env->enc, c)) {
- add_char_opt_map_info(&opt->map, c);
- len = enc_len(env->enc, c);
- if (len < min) min = len;
- if (len > max) max = len;
- }
- }
- break;
-
- case CTYPE_NOT_WORD:
- for (c = 0; c < SINGLE_BYTE_SIZE; c++) {
- if (! IS_WORD_HEAD_BYTE(env->enc, c)) {
- add_char_opt_map_info(&opt->map, c);
- len = enc_len(env->enc, c);
- if (len < min) min = len;
- if (len > max) max = len;
- }
- }
- break;
- }
-
- set_mml(&opt->len, min, max);
- }
- break;
-
- case N_ANYCHAR:
- {
- OnigDistance len = ONIGENC_MBC_MAXLEN_DIST(env->enc);
- set_mml(&opt->len, 1, len);
- }
- break;
-
- case N_ANCHOR:
- switch (NANCHOR(node).type) {
- case ANCHOR_BEGIN_BUF:
- case ANCHOR_BEGIN_POSITION:
- case ANCHOR_BEGIN_LINE:
- case ANCHOR_END_BUF:
- case ANCHOR_SEMI_END_BUF:
- case ANCHOR_END_LINE:
- add_opt_anc_info(&opt->anc, NANCHOR(node).type);
- break;
-
- case ANCHOR_PREC_READ:
- {
- NodeOptInfo nopt;
-
- r = optimize_node_left(NANCHOR(node).target, &nopt, env);
- if (r == 0) {
- if (nopt.exb.len > 0)
- copy_opt_exact_info(&opt->expr, &nopt.exb);
- else if (nopt.exm.len > 0)
- copy_opt_exact_info(&opt->expr, &nopt.exm);
-
- opt->expr.reach_end = 0;
-
- if (nopt.map.value > 0)
- copy_opt_map_info(&opt->map, &nopt.map);
- }
- }
- break;
-
- case ANCHOR_PREC_READ_NOT:
- case ANCHOR_LOOK_BEHIND: /* Sorry, I can't make use of it. */
- case ANCHOR_LOOK_BEHIND_NOT:
- break;
- }
- break;
-
- case N_BACKREF:
- {
- int i;
- int* backs;
- OnigDistance min, max, tmin, tmax;
- Node** nodes = SCANENV_MEM_NODES(env->scan_env);
- BackrefNode* br = &(NBACKREF(node));
-
- if (br->state & NST_RECURSION) {
- set_mml(&opt->len, 0, ONIG_INFINITE_DISTANCE);
- break;
- }
- backs = BACKREFS_P(br);
- r = get_min_match_length(nodes[backs[0]], &min, env->scan_env);
- if (r != 0) break;
- r = get_max_match_length(nodes[backs[0]], &max, env->scan_env);
- if (r != 0) break;
- for (i = 1; i < br->back_num; i++) {
- r = get_min_match_length(nodes[backs[i]], &tmin, env->scan_env);
- if (r != 0) break;
- r = get_max_match_length(nodes[backs[i]], &tmax, env->scan_env);
- if (r != 0) break;
- if (min > tmin) min = tmin;
- if (max < tmax) max = tmax;
- }
- if (r == 0) set_mml(&opt->len, min, max);
- }
- break;
-
-#ifdef USE_SUBEXP_CALL
- case N_CALL:
- if (IS_CALL_RECURSION(&(NCALL(node))))
- set_mml(&opt->len, 0, ONIG_INFINITE_DISTANCE);
- else {
- OnigOptionType save = env->options;
- env->options = NEFFECT(NCALL(node).target).option;
- r = optimize_node_left(NCALL(node).target, opt, env);
- env->options = save;
- }
- break;
-#endif
-
- case N_QUALIFIER:
- {
- int i;
- OnigDistance min, max;
- NodeOptInfo nopt;
- QualifierNode* qn = &(NQUALIFIER(node));
-
- r = optimize_node_left(qn->target, &nopt, env);
- if (r) break;
-
- if (qn->lower == 0 && IS_REPEAT_INFINITE(qn->upper)) {
- if (env->mmd.max == 0 &&
- NTYPE(qn->target) == N_ANYCHAR && qn->greedy) {
- if (IS_POSIXLINE(env->options))
- add_opt_anc_info(&opt->anc, ANCHOR_ANYCHAR_STAR_PL);
- else
- add_opt_anc_info(&opt->anc, ANCHOR_ANYCHAR_STAR);
- }
- }
- else {
- if (qn->lower > 0) {
- copy_node_opt_info(opt, &nopt);
- if (nopt.exb.len > 0) {
- if (nopt.exb.reach_end) {
- for (i = 2; i < qn->lower &&
- ! is_full_opt_exact_info(&opt->exb); i++) {
- concat_opt_exact_info(&opt->exb, &nopt.exb);
- }
- if (i < qn->lower) {
- opt->exb.reach_end = 0;
- }
- }
- }
-
- if (qn->lower != qn->upper) {
- opt->exb.reach_end = 0;
- opt->exm.reach_end = 0;
- }
- if (qn->lower > 1)
- opt->exm.reach_end = 0;
- }
- }
-
- min = distance_multiply(nopt.len.min, qn->lower);
- if (IS_REPEAT_INFINITE(qn->upper))
- max = (nopt.len.max > 0 ? ONIG_INFINITE_DISTANCE : 0);
- else
- max = distance_multiply(nopt.len.max, qn->upper);
-
- set_mml(&opt->len, min, max);
- }
- break;
-
- case N_EFFECT:
- {
- EffectNode* en = &(NEFFECT(node));
-
- switch (en->type) {
- case EFFECT_OPTION:
- {
- OnigOptionType save = env->options;
-
- env->options = en->option;
- r = optimize_node_left(en->target, opt, env);
- env->options = save;
- }
- break;
-
- case EFFECT_MEMORY:
-#ifdef USE_SUBEXP_CALL
- en->opt_count++;
- if (en->opt_count > MAX_NODE_OPT_INFO_REF_COUNT) {
- OnigDistance min, max;
-
- min = 0;
- max = ONIG_INFINITE_DISTANCE;
- if (IS_EFFECT_MIN_FIXED(en)) min = en->min_len;
- if (IS_EFFECT_MAX_FIXED(en)) max = en->max_len;
- set_mml(&opt->len, min, max);
- }
- else
-#endif
- {
- r = optimize_node_left(en->target, opt, env);
-
- if (is_set_opt_anc_info(&opt->anc, ANCHOR_ANYCHAR_STAR_MASK)) {
- if (BIT_STATUS_AT(env->backrefed_status, en->regnum))
- remove_opt_anc_info(&opt->anc, ANCHOR_ANYCHAR_STAR_MASK);
- }
- }
- break;
-
- case EFFECT_STOP_BACKTRACK:
- r = optimize_node_left(en->target, opt, env);
- break;
- }
- }
- break;
-
- default:
-#ifdef ONIG_DEBUG
- fprintf(stderr, "optimize_node_left: undefined node type %d\n",
- NTYPE(node));
-#endif
- r = ONIGERR_TYPE_BUG;
- break;
- }
-
- return r;
-}
-
-static int
-set_optimize_exact_info(regex_t* reg, OptExactInfo* e)
-{
- int r;
-
- if (e->len == 0) return 0;
-
- reg->exact = onig_strdup(e->s, e->s + e->len);
- CHECK_NULL_RETURN_VAL(reg->exact, ONIGERR_MEMORY);
-
- reg->exact_end = reg->exact + e->len;
-
- if (e->ignore_case) {
- UChar buf[ONIGENC_MBC_TO_LOWER_MAXLEN];
- int len, low_len, i, j, alloc_size;
-
- alloc_size = e->len;
- i = j = 0;
- while (i < e->len) {
- low_len = ONIGENC_MBC_TO_LOWER(reg->enc, &(e->s[i]), buf);
- len = enc_len(reg->enc, e->s[i]);
- if (low_len > alloc_size - i) {
- reg->exact = xrealloc(reg->exact, alloc_size * 2);
- CHECK_NULL_RETURN_VAL(reg->exact, ONIGERR_MEMORY);
- alloc_size *= 2;
- }
-
- xmemcpy(&(reg->exact[j]), buf, low_len);
- i += len;
- j += low_len;
- }
- reg->exact_end = reg->exact + j;
- reg->optimize = ONIG_OPTIMIZE_EXACT_IC;
- }
- else {
- int allow_reverse;
-
- if (e->anc.left_anchor & ANCHOR_BEGIN_LINE)
- allow_reverse = 1;
- else
- allow_reverse =
- ONIGENC_IS_ALLOWED_REVERSE_MATCH(reg->enc, reg->exact, reg->exact_end);
-
- if (e->len >= 3 || (e->len >= 2 && allow_reverse)) {
- r = set_bm_skip(reg->exact, reg->exact_end, reg->enc, 0,
- reg->map, &(reg->int_map));
- if (r) return r;
-
- reg->optimize = (allow_reverse != 0
- ? ONIG_OPTIMIZE_EXACT_BM : ONIG_OPTIMIZE_EXACT_BM_NOT_REV);
- }
- else {
- reg->optimize = ONIG_OPTIMIZE_EXACT;
- }
- }
-
- reg->dmin = e->mmd.min;
- reg->dmax = e->mmd.max;
-
- if (reg->dmin != ONIG_INFINITE_DISTANCE) {
- reg->threshold_len = reg->dmin + (reg->exact_end - reg->exact);
- }
-
- return 0;
-}
-
-static void
-set_optimize_map_info(regex_t* reg, OptMapInfo* m)
-{
- int i;
-
- for (i = 0; i < ONIG_CHAR_TABLE_SIZE; i++)
- reg->map[i] = m->map[i];
-
- reg->optimize = ONIG_OPTIMIZE_MAP;
- reg->dmin = m->mmd.min;
- reg->dmax = m->mmd.max;
-
- if (reg->dmin != ONIG_INFINITE_DISTANCE) {
- reg->threshold_len = reg->dmin + 1;
- }
-}
-
-static void
-set_sub_anchor(regex_t* reg, OptAncInfo* anc)
-{
- reg->sub_anchor |= anc->left_anchor & ANCHOR_BEGIN_LINE;
- reg->sub_anchor |= anc->right_anchor & ANCHOR_END_LINE;
-}
-
-#ifdef ONIG_DEBUG
-static void print_optimize_info(FILE* f, regex_t* reg);
-#endif
-
-static int
-set_optimize_info_from_tree(Node* node, regex_t* reg, ScanEnv* scan_env)
-{
-
- int r;
- NodeOptInfo opt;
- OptEnv env;
-
- env.enc = reg->enc;
- env.options = reg->options;
- env.scan_env = scan_env;
- clear_mml(&env.mmd);
-
- r = optimize_node_left(node, &opt, &env);
- if (r) return r;
-
- reg->anchor = opt.anc.left_anchor & (ANCHOR_BEGIN_BUF |
- ANCHOR_BEGIN_POSITION | ANCHOR_ANYCHAR_STAR | ANCHOR_ANYCHAR_STAR_PL);
-
- reg->anchor |= opt.anc.right_anchor & (ANCHOR_END_BUF | ANCHOR_SEMI_END_BUF);
-
- if (reg->anchor & (ANCHOR_END_BUF | ANCHOR_SEMI_END_BUF)) {
- reg->anchor_dmin = opt.len.min;
- reg->anchor_dmax = opt.len.max;
- }
-
- if (opt.exb.len > 0 || opt.exm.len > 0) {
- select_opt_exact_info(&opt.exb, &opt.exm);
- if (opt.map.value > 0 &&
- comp_opt_exact_or_map_info(&opt.exb, &opt.map) > 0) {
- goto set_map;
- }
- else {
- r = set_optimize_exact_info(reg, &opt.exb);
- set_sub_anchor(reg, &opt.exb.anc);
- }
- }
- else if (opt.map.value > 0) {
- set_map:
- set_optimize_map_info(reg, &opt.map);
- set_sub_anchor(reg, &opt.map.anc);
- }
- else {
- reg->sub_anchor |= opt.anc.left_anchor & ANCHOR_BEGIN_LINE;
- if (opt.len.max == 0)
- reg->sub_anchor |= opt.anc.right_anchor & ANCHOR_END_LINE;
- }
-
-#if defined(ONIG_DEBUG_COMPILE) || defined(ONIG_DEBUG_MATCH)
- print_optimize_info(stderr, reg);
-#endif
- return r;
-}
-
-static void
-clear_optimize_info(regex_t* reg)
-{
- reg->optimize = ONIG_OPTIMIZE_NONE;
- reg->anchor = 0;
- reg->anchor_dmin = 0;
- reg->anchor_dmax = 0;
- reg->sub_anchor = 0;
- reg->exact_end = (UChar* )NULL;
- reg->threshold_len = 0;
- if (IS_NOT_NULL(reg->exact)) {
- xfree(reg->exact);
- reg->exact = (UChar* )NULL;
- }
-}
-
-#ifdef ONIG_DEBUG
-
-static void
-print_distance_range(FILE* f, OnigDistance a, OnigDistance b)
-{
- if (a == ONIG_INFINITE_DISTANCE)
- fputs("inf", f);
- else
- fprintf(f, "(%u)", a);
-
- fputs("-", f);
-
- if (b == ONIG_INFINITE_DISTANCE)
- fputs("inf", f);
- else
- fprintf(f, "(%u)", b);
-}
-
-static void
-print_anchor(FILE* f, int anchor)
-{
- int q = 0;
-
- fprintf(f, "[");
-
- if (anchor & ANCHOR_BEGIN_BUF) {
- fprintf(f, "begin-buf");
- q = 1;
- }
- if (anchor & ANCHOR_BEGIN_LINE) {
- if (q) fprintf(f, ", ");
- q = 1;
- fprintf(f, "begin-line");
- }
- if (anchor & ANCHOR_BEGIN_POSITION) {
- if (q) fprintf(f, ", ");
- q = 1;
- fprintf(f, "begin-pos");
- }
- if (anchor & ANCHOR_END_BUF) {
- if (q) fprintf(f, ", ");
- q = 1;
- fprintf(f, "end-buf");
- }
- if (anchor & ANCHOR_SEMI_END_BUF) {
- if (q) fprintf(f, ", ");
- q = 1;
- fprintf(f, "semi-end-buf");
- }
- if (anchor & ANCHOR_END_LINE) {
- if (q) fprintf(f, ", ");
- q = 1;
- fprintf(f, "end-line");
- }
- if (anchor & ANCHOR_ANYCHAR_STAR) {
- if (q) fprintf(f, ", ");
- q = 1;
- fprintf(f, "anychar-star");
- }
- if (anchor & ANCHOR_ANYCHAR_STAR_PL) {
- if (q) fprintf(f, ", ");
- fprintf(f, "anychar-star-pl");
- }
-
- fprintf(f, "]");
-}
-
-static void
-print_optimize_info(FILE* f, regex_t* reg)
-{
- static char* on[] = { "NONE", "EXACT", "EXACT_BM", "EXACT_BM_NOT_REV",
- "EXACT_IC", "MAP" };
-
- fprintf(f, "optimize: %s\n", on[reg->optimize]);
- fprintf(f, " anchor: "); print_anchor(f, reg->anchor);
- if ((reg->anchor & ANCHOR_END_BUF_MASK) != 0)
- print_distance_range(f, reg->anchor_dmin, reg->anchor_dmax);
- fprintf(f, "\n");
-
- if (reg->optimize) {
- fprintf(f, " sub anchor: "); print_anchor(f, reg->sub_anchor);
- fprintf(f, "\n");
- }
- fprintf(f, "\n");
-
- if (reg->exact) {
- UChar *p;
- fprintf(f, "exact: [");
- for (p = reg->exact; p < reg->exact_end; p++) {
- fputc(*p, f);
- }
- fprintf(f, "]: length: %d\n", (reg->exact_end - reg->exact));
- }
- else if (reg->optimize & ONIG_OPTIMIZE_MAP) {
- int i, n = 0;
- for (i = 0; i < ONIG_CHAR_TABLE_SIZE; i++)
- if (reg->map[i]) n++;
-
- fprintf(f, "map: n=%d\n", n);
- if (n > 0) {
- fputc('[', f);
- for (i = 0; i < ONIG_CHAR_TABLE_SIZE; i++)
- if (reg->map[i] && enc_len(reg->enc, i) == 1 &&
- ONIGENC_IS_CODE_PRINT(reg->enc, i))
- fputc(i, f);
- fprintf(f, "]\n");
- }
- }
-}
-#endif /* ONIG_DEBUG */
-
-
-static void
-onig_free_body(regex_t* reg)
-{
- if (IS_NOT_NULL(reg->p)) xfree(reg->p);
- if (IS_NOT_NULL(reg->exact)) xfree(reg->exact);
- if (IS_NOT_NULL(reg->int_map)) xfree(reg->int_map);
- if (IS_NOT_NULL(reg->int_map_backward)) xfree(reg->int_map_backward);
- if (IS_NOT_NULL(reg->repeat_range)) xfree(reg->repeat_range);
- if (IS_NOT_NULL(reg->chain)) onig_free(reg->chain);
-
-#ifdef USE_NAMED_GROUP
- onig_names_free(reg);
-#endif
-}
-
-extern void
-onig_free(regex_t* reg)
-{
- if (IS_NOT_NULL(reg)) {
- onig_free_body(reg);
- xfree(reg);
- }
-}
-
-#define REGEX_TRANSFER(to,from) do {\
- (to)->state = ONIG_STATE_MODIFY;\
- onig_free_body(to);\
- xmemcpy(to, from, sizeof(regex_t));\
- xfree(from);\
-} while (0)
-
-static void
-onig_transfer(regex_t* to, regex_t* from)
-{
- THREAD_ATOMIC_START;
- REGEX_TRANSFER(to, from);
- THREAD_ATOMIC_END;
-}
-
-#define REGEX_CHAIN_HEAD(reg) do {\
- while (IS_NOT_NULL((reg)->chain)) {\
- (reg) = (reg)->chain;\
- }\
-} while (0)
-
-static void
-onig_chain_link_add(regex_t* to, regex_t* add)
-{
- THREAD_ATOMIC_START;
- REGEX_CHAIN_HEAD(to);
- to->chain = add;
- THREAD_ATOMIC_END;
-}
-
-extern void
-onig_chain_reduce(regex_t* reg)
-{
- regex_t *head, *prev;
-
- THREAD_ATOMIC_START;
- prev = reg;
- head = prev->chain;
- if (IS_NOT_NULL(head)) {
- reg->state = ONIG_STATE_MODIFY;
- while (IS_NOT_NULL(head->chain)) {
- prev = head;
- head = head->chain;
- }
- prev->chain = (regex_t* )NULL;
- REGEX_TRANSFER(reg, head);
- }
- THREAD_ATOMIC_END;
-}
-
-#if 0
-extern int
-onig_clone(regex_t** to, regex_t* from)
-{
- int r, size;
- regex_t* reg;
-
- if (ONIG_STATE(from) == ONIG_STATE_NORMAL) {
- from->state++; /* increment as search counter */
- if (IS_NOT_NULL(from->chain)) {
- onig_chain_reduce(from);
- from->state++;
- }
- }
- else {
- int n = 0;
- while (ONIG_STATE(from) < ONIG_STATE_NORMAL) {
- if (++n > THREAD_PASS_LIMIT_COUNT)
- return ONIGERR_OVER_THREAD_PASS_LIMIT_COUNT;
- THREAD_PASS;
- }
- from->state++; /* increment as search counter */
- }
-
- r = onig_alloc_init(&reg, ONIG_OPTION_NONE, from->enc, ONIG_SYNTAX_DEFAULT);
- if (r != 0) {
- from->state--;
- return r;
- }
-
- xmemcpy(reg, from, sizeof(onig_t));
- reg->state = ONIG_STATE_NORMAL;
- reg->chain = (regex_t* )NULL;
-
- if (from->p) {
- reg->p = (UChar* )xmalloc(reg->alloc);
- if (IS_NULL(reg->p)) goto mem_error;
- xmemcpy(reg->p, from->p, reg->alloc);
- }
-
- if (from->exact) {
- reg->exact = (UChar* )xmalloc(from->exact_end - from->exact);
- if (IS_NULL(reg->exact)) goto mem_error;
- reg->exact_end = reg->exact + (from->exact_end - from->exact);
- xmemcpy(reg->exact, from->exact, reg->exact_end - reg->exact);
- }
-
- if (from->int_map) {
- size = sizeof(int) * ONIG_CHAR_TABLE_SIZE;
- reg->int_map = (int* )xmalloc(size);
- if (IS_NULL(reg->int_map)) goto mem_error;
- xmemcpy(reg->int_map, from->int_map, size);
- }
-
- if (from->int_map_backward) {
- size = sizeof(int) * ONIG_CHAR_TABLE_SIZE;
- reg->int_map_backward = (int* )xmalloc(size);
- if (IS_NULL(reg->int_map_backward)) goto mem_error;
- xmemcpy(reg->int_map_backward, from->int_map_backward, size);
- }
-
-#ifdef USE_NAMED_GROUP
- reg->name_table = names_clone(from); /* names_clone is not implemented */
-#endif
-
- from->state--;
- *to = reg;
- return 0;
-
- mem_error:
- from->state--;
- return ONIGERR_MEMORY;
-}
-#endif
-
-#ifdef ONIG_DEBUG
-static void print_compiled_byte_code_list P_((FILE* f, regex_t* reg));
-#endif
-#ifdef ONIG_DEBUG_PARSE_TREE
-static void print_tree P_((FILE* f, Node* node));
-#endif
-
-extern int
-onig_compile(regex_t* reg, UChar* pattern, UChar* pattern_end,
- OnigErrorInfo* einfo)
-{
-#define COMPILE_INIT_SIZE 20
-
- int r, init_size;
- Node* root;
- ScanEnv scan_env;
-#ifdef USE_SUBEXP_CALL
- UnsetAddrList uslist;
-#endif
-
- reg->state = ONIG_STATE_COMPILING;
-
- if (reg->alloc == 0) {
- init_size = (pattern_end - pattern) * 2;
- if (init_size <= 0) init_size = COMPILE_INIT_SIZE;
- r = BBUF_INIT(reg, init_size);
- if (r != 0) goto end;
- }
- else
- reg->used = 0;
-
- reg->num_mem = 0;
- reg->num_repeat = 0;
- reg->num_null_check = 0;
- reg->repeat_range_alloc = 0;
- reg->repeat_range = (OnigRepeatRange* )NULL;
-
- r = onig_parse_make_tree(&root, pattern, pattern_end, reg, &scan_env);
- if (r != 0) goto err;
-
-#ifdef USE_NAMED_GROUP
- /* mixed use named group and no-named group */
- if (scan_env.num_named > 0 &&
- IS_SYNTAX_BV(scan_env.syntax, ONIG_SYN_CAPTURE_ONLY_NAMED_GROUP) &&
- !ONIG_IS_OPTION_ON(reg->options, ONIG_OPTION_CAPTURE_GROUP)) {
- if (scan_env.num_named != scan_env.num_mem)
- r = disable_noname_group_capture(&root, reg, &scan_env);
- else
- r = numbered_ref_check(root);
-
- if (r != 0) goto err;
- }
-#endif
-
-#ifdef ONIG_DEBUG_PARSE_TREE
- print_tree(stderr, root);
-#endif
-
-#ifdef USE_SUBEXP_CALL
- if (scan_env.num_call > 0) {
- r = unset_addr_list_init(&uslist, scan_env.num_call);
- if (r != 0) goto err;
- scan_env.unset_addr_list = &uslist;
- r = setup_subexp_call(root, &scan_env);
- if (r != 0) goto err_unset;
- r = subexp_recursive_check_trav(root, &scan_env);
- if (r < 0) goto err_unset;
- r = subexp_inf_recursive_check_trav(root, &scan_env);
- if (r != 0) goto err_unset;
-
- reg->num_call = scan_env.num_call;
- }
- else
- reg->num_call = 0;
-#endif
-
- r = setup_tree(root, reg, 0, &scan_env);
- if (r != 0) goto err_unset;
-
- reg->capture_history = scan_env.capture_history;
- reg->bt_mem_start = scan_env.bt_mem_start;
- reg->bt_mem_start |= reg->capture_history;
- if (IS_FIND_CONDITION(reg->options))
- BIT_STATUS_ON_ALL(reg->bt_mem_end);
- else {
- reg->bt_mem_end = scan_env.bt_mem_end;
- reg->bt_mem_end |= reg->capture_history;
- }
-
- clear_optimize_info(reg);
-#ifndef ONIG_DONT_OPTIMIZE
- r = set_optimize_info_from_tree(root, reg, &scan_env);
- if (r != 0) goto err_unset;
-#endif
-
- if (IS_NOT_NULL(scan_env.mem_nodes_dynamic)) {
- xfree(scan_env.mem_nodes_dynamic);
- scan_env.mem_nodes_dynamic = (Node** )NULL;
- }
-
- r = compile_tree(root, reg);
- if (r == 0) {
- r = add_opcode(reg, OP_END);
-#ifdef USE_SUBEXP_CALL
- if (scan_env.num_call > 0) {
- r = unset_addr_list_fix(&uslist, reg);
- unset_addr_list_end(&uslist);
- if (r) goto err;
- }
-#endif
-
- if ((reg->num_repeat != 0) || (reg->bt_mem_end != 0))
- reg->stack_pop_level = STACK_POP_LEVEL_ALL;
- else {
- if (reg->bt_mem_start != 0)
- reg->stack_pop_level = STACK_POP_LEVEL_MEM_START;
- else
- reg->stack_pop_level = STACK_POP_LEVEL_FREE;
- }
- }
-#ifdef USE_SUBEXP_CALL
- else if (scan_env.num_call > 0) {
- unset_addr_list_end(&uslist);
- }
-#endif
- onig_node_free(root);
-
-#ifdef ONIG_DEBUG_COMPILE
-#ifdef USE_NAMED_GROUP
- onig_print_names(stderr, reg);
-#endif
- print_compiled_byte_code_list(stderr, reg);
-#endif
-
- end:
- reg->state = ONIG_STATE_NORMAL;
- return r;
-
- err_unset:
-#ifdef USE_SUBEXP_CALL
- if (scan_env.num_call > 0) {
- unset_addr_list_end(&uslist);
- }
-#endif
- err:
- if (IS_NOT_NULL(scan_env.error)) {
- if (IS_NOT_NULL(einfo)) {
- einfo->par = scan_env.error;
- einfo->par_end = scan_env.error_end;
- }
- }
-
- if (IS_NOT_NULL(root)) onig_node_free(root);
- if (IS_NOT_NULL(scan_env.mem_nodes_dynamic))
- xfree(scan_env.mem_nodes_dynamic);
- return r;
-}
-
-extern int
-onig_recompile(regex_t* reg, UChar* pattern, UChar* pattern_end,
- OnigOptionType option, OnigEncoding enc, OnigSyntaxType* syntax,
- OnigErrorInfo* einfo)
-{
- int r;
- regex_t *new_reg;
-
- r = onig_new(&new_reg, pattern, pattern_end, option, enc, syntax, einfo);
- if (r) return r;
- if (ONIG_STATE(reg) == ONIG_STATE_NORMAL) {
- onig_transfer(reg, new_reg);
- }
- else {
- onig_chain_link_add(reg, new_reg);
- }
- return 0;
-}
-
-static int onig_inited = 0;
-
-extern int
-onig_alloc_init(regex_t** reg, OnigOptionType option, OnigEncoding enc,
- OnigSyntaxType* syntax)
-{
- if (! onig_inited)
- onig_init();
-
- if (ONIGENC_IS_UNDEF(enc))
- return ONIGERR_DEFAULT_ENCODING_IS_NOT_SETTED;
-
- *reg = (regex_t* )xmalloc(sizeof(regex_t));
- if (IS_NULL(*reg)) return ONIGERR_MEMORY;
-
- if ((option & ONIG_OPTION_NEGATE_SINGLELINE) != 0) {
- option |= syntax->options;
- option &= ~ONIG_OPTION_SINGLELINE;
- }
- else
- option |= syntax->options;
-
- (*reg)->state = ONIG_STATE_NORMAL;
- (*reg)->enc = enc;
- (*reg)->options = option;
- (*reg)->syntax = syntax;
- (*reg)->optimize = 0;
- (*reg)->exact = (UChar* )NULL;
- (*reg)->int_map = (int* )NULL;
- (*reg)->int_map_backward = (int* )NULL;
- (*reg)->chain = (regex_t* )NULL;
-
- (*reg)->p = (UChar* )NULL;
- (*reg)->alloc = 0;
- (*reg)->used = 0;
- (*reg)->name_table = (void* )NULL;
-
- return 0;
-}
-
-extern int
-onig_new(regex_t** reg, UChar* pattern, UChar* pattern_end,
- OnigOptionType option, OnigEncoding enc, OnigSyntaxType* syntax,
- OnigErrorInfo* einfo)
-{
- int r;
-
- if (IS_NOT_NULL(einfo)) einfo->par = (UChar* )NULL;
-
- r = onig_alloc_init(reg, option, enc, syntax);
- if (r) return r;
-
- r = onig_compile(*reg, pattern, pattern_end, einfo);
- if (r) {
- onig_free(*reg);
- *reg = NULL;
- }
- return r;
-}
-
-extern int
-onig_init()
-{
- if (onig_inited != 0)
- return 0;
-
- onig_inited = 1;
-
- THREAD_ATOMIC_START;
-
- onigenc_init();
- onigenc_set_default_caseconv_table((UChar* )0);
-
-#ifdef ONIG_DEBUG_STATISTICS
- onig_statistics_init();
-#endif
-
- THREAD_ATOMIC_END;
- return 0;
-}
-
-extern int
-onig_end()
-{
-#ifdef ONIG_DEBUG_STATISTICS
- onig_print_statistics(stderr);
-#endif
-
-#ifdef USE_RECYCLE_NODE
- onig_free_node_list();
-#endif
-
- onig_inited = 0;
- return 0;
-}
-
-
-#ifdef ONIG_DEBUG
-
-OnigOpInfoType OnigOpInfo[] = {
- { OP_FINISH, "finish", ARG_NON },
- { OP_END, "end", ARG_NON },
- { OP_EXACT1, "exact1", ARG_SPECIAL },
- { OP_EXACT2, "exact2", ARG_SPECIAL },
- { OP_EXACT3, "exact3", ARG_SPECIAL },
- { OP_EXACT4, "exact4", ARG_SPECIAL },
- { OP_EXACT5, "exact5", ARG_SPECIAL },
- { OP_EXACTN, "exactn", ARG_SPECIAL },
- { OP_EXACTMB2N1, "exactmb2-n1", ARG_SPECIAL },
- { OP_EXACTMB2N2, "exactmb2-n2", ARG_SPECIAL },
- { OP_EXACTMB2N3, "exactmb2-n3", ARG_SPECIAL },
- { OP_EXACTMB2N, "exactmb2-n", ARG_SPECIAL },
- { OP_EXACTMB3N, "exactmb3n" , ARG_SPECIAL },
- { OP_EXACTMBN, "exactmbn", ARG_SPECIAL },
- { OP_EXACT1_IC, "exact1-ic", ARG_SPECIAL },
- { OP_EXACTN_IC, "exactn-ic", ARG_SPECIAL },
- { OP_CCLASS, "cclass", ARG_SPECIAL },
- { OP_CCLASS_MB, "cclass-mb", ARG_SPECIAL },
- { OP_CCLASS_MIX, "cclass-mix", ARG_SPECIAL },
- { OP_CCLASS_NOT, "cclass-not", ARG_SPECIAL },
- { OP_CCLASS_MB_NOT, "cclass-mb-not", ARG_SPECIAL },
- { OP_CCLASS_MIX_NOT, "cclass-mix-not", ARG_SPECIAL },
- { OP_ANYCHAR, "anychar", ARG_NON },
- { OP_ANYCHAR_ML, "anychar-ml", ARG_NON },
- { OP_ANYCHAR_STAR, "anychar*", ARG_NON },
- { OP_ANYCHAR_ML_STAR, "anychar-ml*", ARG_NON },
- { OP_ANYCHAR_STAR_PEEK_NEXT, "anychar*-peek-next", ARG_SPECIAL },
- { OP_ANYCHAR_ML_STAR_PEEK_NEXT, "anychar-ml*-peek-next", ARG_SPECIAL },
- { OP_WORD, "word", ARG_NON },
- { OP_NOT_WORD, "not-word", ARG_NON },
- { OP_WORD_SB, "word-sb", ARG_NON },
- { OP_WORD_MB, "word-mb", ARG_NON },
- { OP_WORD_BOUND, "word-bound", ARG_NON },
- { OP_NOT_WORD_BOUND, "not-word-bound", ARG_NON },
- { OP_WORD_BEGIN, "word-begin", ARG_NON },
- { OP_WORD_END, "word-end", ARG_NON },
- { OP_BEGIN_BUF, "begin-buf", ARG_NON },
- { OP_END_BUF, "end-buf", ARG_NON },
- { OP_BEGIN_LINE, "begin-line", ARG_NON },
- { OP_END_LINE, "end-line", ARG_NON },
- { OP_SEMI_END_BUF, "semi-end-buf", ARG_NON },
- { OP_BEGIN_POSITION, "begin-position", ARG_NON },
- { OP_BACKREF1, "backref1", ARG_NON },
- { OP_BACKREF2, "backref2", ARG_NON },
- { OP_BACKREF3, "backref3", ARG_NON },
- { OP_BACKREFN, "backrefn", ARG_MEMNUM },
- { OP_BACKREFN_IC, "backrefn-ic", ARG_MEMNUM },
- { OP_BACKREF_MULTI, "backref_multi", ARG_SPECIAL },
- { OP_BACKREF_MULTI_IC, "backref_multi-ic",ARG_SPECIAL },
- { OP_MEMORY_START_PUSH, "mem-start-push", ARG_MEMNUM },
- { OP_MEMORY_START, "mem-start", ARG_MEMNUM },
- { OP_MEMORY_END_PUSH, "mem-end-push", ARG_MEMNUM },
- { OP_MEMORY_END_PUSH_REC, "mem-end-push-rec", ARG_MEMNUM },
- { OP_MEMORY_END, "mem-end", ARG_MEMNUM },
- { OP_MEMORY_END_REC, "mem-end-rec", ARG_MEMNUM },
- { OP_SET_OPTION_PUSH, "set-option-push", ARG_OPTION },
- { OP_SET_OPTION, "set-option", ARG_OPTION },
- { OP_FAIL, "fail", ARG_NON },
- { OP_JUMP, "jump", ARG_RELADDR },
- { OP_PUSH, "push", ARG_RELADDR },
- { OP_POP, "pop", ARG_NON },
- { OP_PUSH_OR_JUMP_EXACT1, "push-or-jump-e1", ARG_SPECIAL },
- { OP_PUSH_IF_PEEK_NEXT, "push-if-peek-next", ARG_SPECIAL },
- { OP_REPEAT, "repeat", ARG_SPECIAL },
- { OP_REPEAT_NG, "repeat-ng", ARG_SPECIAL },
- { OP_REPEAT_INC, "repeat-inc", ARG_MEMNUM },
- { OP_REPEAT_INC_NG, "repeat-inc-ng", ARG_MEMNUM },
- { OP_NULL_CHECK_START, "null-check-start",ARG_MEMNUM },
- { OP_NULL_CHECK_END, "null-check-end", ARG_MEMNUM },
- { OP_NULL_CHECK_END_MEMST,"null-check-end-memst", ARG_MEMNUM },
- { OP_NULL_CHECK_END_MEMST_PUSH,"null-check-end-memst-push", ARG_MEMNUM },
- { OP_PUSH_POS, "push-pos", ARG_NON },
- { OP_POP_POS, "pop-pos", ARG_NON },
- { OP_PUSH_POS_NOT, "push-pos-not", ARG_RELADDR },
- { OP_FAIL_POS, "fail-pos", ARG_NON },
- { OP_PUSH_STOP_BT, "push-stop-bt", ARG_NON },
- { OP_POP_STOP_BT, "pop-stop-bt", ARG_NON },
- { OP_LOOK_BEHIND, "look-behind", ARG_SPECIAL },
- { OP_PUSH_LOOK_BEHIND_NOT, "push-look-behind-not", ARG_SPECIAL },
- { OP_FAIL_LOOK_BEHIND_NOT, "fail-look-behind-not", ARG_NON },
- { OP_CALL, "call", ARG_ABSADDR },
- { OP_RETURN, "return", ARG_NON },
- { -1, "", ARG_NON }
-};
-
-static char*
-op2name(int opcode)
-{
- int i;
-
- for (i = 0; OnigOpInfo[i].opcode >= 0; i++) {
- if (opcode == OnigOpInfo[i].opcode)
- return OnigOpInfo[i].name;
- }
- return "";
-}
-
-static int
-op2arg_type(int opcode)
-{
- int i;
-
- for (i = 0; OnigOpInfo[i].opcode >= 0; i++) {
- if (opcode == OnigOpInfo[i].opcode)
- return OnigOpInfo[i].arg_type;
- }
- return ARG_SPECIAL;
-}
-
-static void
-Indent(FILE* f, int indent)
-{
- int i;
- for (i = 0; i < indent; i++) putc(' ', f);
-}
-
-static void
-p_string(FILE* f, int len, UChar* s)
-{
- fputs(":", f);
- while (len-- > 0) { fputc(*s++, f); }
-}
-
-static void
-p_len_string(FILE* f, LengthType len, int mb_len, UChar* s)
-{
- int x = len * mb_len;
-
- fprintf(f, ":%d:", len);
- while (x-- > 0) { fputc(*s++, f); }
-}
-
-extern void
-onig_print_compiled_byte_code(FILE* f, UChar* bp, UChar** nextp)
-{
- int i, n, arg_type;
- RelAddrType addr;
- LengthType len;
- MemNumType mem;
- OnigCodePoint code;
- UChar *q;
-
- fprintf(f, "[%s", op2name(*bp));
- arg_type = op2arg_type(*bp);
- if (arg_type != ARG_SPECIAL) {
- bp++;
- switch (arg_type) {
- case ARG_NON:
- break;
- case ARG_RELADDR:
- addr = *((RelAddrType* )bp);
- bp += SIZE_RELADDR;
- fprintf(f, ":(%d)", addr);
- break;
- case ARG_ABSADDR:
- GET_ABSADDR_INC(addr, bp);
- fprintf(f, ":(%d)", addr);
- break;
- case ARG_LENGTH:
- GET_LENGTH_INC(len, bp);
- fprintf(f, ":%d", len);
- break;
- case ARG_MEMNUM:
- mem = *((MemNumType* )bp);
- bp += SIZE_MEMNUM;
- fprintf(f, ":%d", mem);
- break;
- case ARG_OPTION:
- {
- OnigOptionType option = *((OnigOptionType* )bp);
- bp += SIZE_OPTION;
- fprintf(f, ":%d", option);
- }
- break;
- }
- }
- else {
- switch (*bp++) {
- case OP_EXACT1:
- case OP_ANYCHAR_STAR_PEEK_NEXT:
- case OP_ANYCHAR_ML_STAR_PEEK_NEXT:
- p_string(f, 1, bp++); break;
- case OP_EXACT2:
- p_string(f, 2, bp); bp += 2; break;
- case OP_EXACT3:
- p_string(f, 3, bp); bp += 3; break;
- case OP_EXACT4:
- p_string(f, 4, bp); bp += 4; break;
- case OP_EXACT5:
- p_string(f, 5, bp); bp += 5; break;
- case OP_EXACTN:
- GET_LENGTH_INC(len, bp);
- p_len_string(f, len, 1, bp);
- bp += len;
- break;
-
- case OP_EXACTMB2N1:
- p_string(f, 2, bp); bp += 2; break;
- case OP_EXACTMB2N2:
- p_string(f, 4, bp); bp += 4; break;
- case OP_EXACTMB2N3:
- p_string(f, 6, bp); bp += 6; break;
- case OP_EXACTMB2N:
- GET_LENGTH_INC(len, bp);
- p_len_string(f, len, 2, bp);
- bp += len * 2;
- break;
- case OP_EXACTMB3N:
- GET_LENGTH_INC(len, bp);
- p_len_string(f, len, 3, bp);
- bp += len * 3;
- break;
- case OP_EXACTMBN:
- {
- int mb_len;
-
- GET_LENGTH_INC(mb_len, bp);
- GET_LENGTH_INC(len, bp);
- fprintf(f, ":%d:%d:", mb_len, len);
- n = len * mb_len;
- while (n-- > 0) { fputc(*bp++, f); }
- }
- break;
-
- case OP_EXACT1_IC:
- p_string(f, 1, bp++);
- break;
- case OP_EXACTN_IC:
- GET_LENGTH_INC(len, bp);
- p_len_string(f, len, 1, bp);
- bp += len;
- break;
-
- case OP_CCLASS:
- n = bitset_on_num((BitSetRef )bp);
- bp += SIZE_BITSET;
- fprintf(f, ":%d", n);
- break;
-
- case OP_CCLASS_NOT:
- n = bitset_on_num((BitSetRef )bp);
- bp += SIZE_BITSET;
- fprintf(f, ":%d", n);
- break;
-
- case OP_CCLASS_MB:
- case OP_CCLASS_MB_NOT:
- GET_LENGTH_INC(len, bp);
- q = bp;
-#ifndef PLATFORM_UNALIGNED_WORD_ACCESS
- ALIGNMENT_RIGHT(q);
-#endif
- GET_CODE_POINT(code, q);
- bp += len;
- fprintf(f, ":%d:%d", (int )code, len);
- break;
-
- case OP_CCLASS_MIX:
- case OP_CCLASS_MIX_NOT:
- n = bitset_on_num((BitSetRef )bp);
- bp += SIZE_BITSET;
- GET_LENGTH_INC(len, bp);
- q = bp;
-#ifndef PLATFORM_UNALIGNED_WORD_ACCESS
- ALIGNMENT_RIGHT(q);
-#endif
- GET_CODE_POINT(code, q);
- bp += len;
- fprintf(f, ":%d:%d:%d", n, (int )code, len);
- break;
-
- case OP_BACKREF_MULTI:
- case OP_BACKREF_MULTI_IC:
- fputs(" ", f);
- GET_LENGTH_INC(len, bp);
- for (i = 0; i < len; i++) {
- GET_MEMNUM_INC(mem, bp);
- if (i > 0) fputs(", ", f);
- fprintf(f, "%d", mem);
- }
- break;
-
- case OP_REPEAT:
- case OP_REPEAT_NG:
- {
- mem = *((MemNumType* )bp);
- bp += SIZE_MEMNUM;
- addr = *((RelAddrType* )bp);
- bp += SIZE_RELADDR;
- fprintf(f, ":%d:%d", mem, addr);
- }
- break;
-
- case OP_PUSH_OR_JUMP_EXACT1:
- case OP_PUSH_IF_PEEK_NEXT:
- addr = *((RelAddrType* )bp);
- bp += SIZE_RELADDR;
- fprintf(f, ":(%d)", addr);
- p_string(f, 1, bp);
- bp += 1;
- break;
-
- case OP_LOOK_BEHIND:
- GET_LENGTH_INC(len, bp);
- fprintf(f, ":%d", len);
- break;
-
- case OP_PUSH_LOOK_BEHIND_NOT:
- GET_RELADDR_INC(addr, bp);
- GET_LENGTH_INC(len, bp);
- fprintf(f, ":%d:(%d)", len, addr);
- break;
-
- default:
- fprintf(stderr, "onig_print_compiled_byte_code: undefined code %d\n",
- *--bp);
- }
- }
- fputs("]", f);
- if (nextp) *nextp = bp;
-}
-
-static void
-print_compiled_byte_code_list(FILE* f, regex_t* reg)
-{
- int ncode;
- UChar* bp = reg->p;
- UChar* end = reg->p + reg->used;
-
- fprintf(f, "code length: %d\n", reg->used);
-
- ncode = 0;
- while (bp < end) {
- ncode++;
- if (bp > reg->p) {
- if (ncode % 5 == 0)
- fprintf(f, "\n");
- else
- fputs(" ", f);
- }
- onig_print_compiled_byte_code(f, bp, &bp);
- }
-
- fprintf(f, "\n");
-}
-
-static void
-print_indent_tree(FILE* f, Node* node, int indent)
-{
- int i, type;
- int add = 3;
- UChar* p;
-
- Indent(f, indent);
- if (IS_NULL(node)) {
- fprintf(f, "ERROR: null node!!!\n");
- exit (0);
- }
-
- type = NTYPE(node);
- switch (type) {
- case N_LIST:
- case N_ALT:
- if (NTYPE(node) == N_LIST)
- fprintf(f, "<list:%x>\n", (int )node);
- else
- fprintf(f, "<alt:%x>\n", (int )node);
-
- print_indent_tree(f, NCONS(node).left, indent + add);
- while (IS_NOT_NULL(node = NCONS(node).right)) {
- if (NTYPE(node) != type) {
- fprintf(f, "ERROR: list/alt right is not a cons. %d\n", NTYPE(node));
- exit(0);
- }
- print_indent_tree(f, NCONS(node).left, indent + add);
- }
- break;
-
- case N_STRING:
- fprintf(f, "<string%s:%x>",
- (NSTRING_IS_RAW(node) ? "-raw" : ""), (int )node);
- for (p = NSTRING(node).s; p < NSTRING(node).end; p++) {
- if (*p >= 0x20 && *p < 0x7f)
- fputc(*p, f);
- else {
- fprintf(f, " 0x%02x", *p);
- }
- }
- break;
-
- case N_CCLASS:
- fprintf(f, "<cclass:%x>", (int )node);
- if (NCCLASS(node).not) fputs(" not", f);
- if (NCCLASS(node).mbuf) {
- BBuf* bbuf = NCCLASS(node).mbuf;
- for (i = 0; i < bbuf->used; i++) {
- if (i > 0) fprintf(f, ",");
- fprintf(f, "%0x", bbuf->p[i]);
- }
- }
-#if 0
- fprintf(f, "\n");
- Indent(f, indent);
- for (i = 0; i < SINGLE_BYTE_SIZE; i++)
- fputc((BITSET_AT(NCCLASS(node).bs, i) ? '1' : '0'), f);
-#endif
- break;
-
- case N_CTYPE:
- fprintf(f, "<ctype:%x> ", (int )node);
- switch (NCTYPE(node).type) {
- case CTYPE_WORD: fputs("word", f); break;
- case CTYPE_NOT_WORD: fputs("not word", f); break;
- default:
- fprintf(f, "ERROR: undefined ctype.\n");
- exit(0);
- }
- break;
-
- case N_ANYCHAR:
- fprintf(f, "<anychar:%x>", (int )node);
- break;
-
- case N_ANCHOR:
- fprintf(f, "<anchor:%x> ", (int )node);
- switch (NANCHOR(node).type) {
- case ANCHOR_BEGIN_BUF: fputs("begin buf", f); break;
- case ANCHOR_END_BUF: fputs("end buf", f); break;
- case ANCHOR_BEGIN_LINE: fputs("begin line", f); break;
- case ANCHOR_END_LINE: fputs("end line", f); break;
- case ANCHOR_SEMI_END_BUF: fputs("semi end buf", f); break;
- case ANCHOR_BEGIN_POSITION: fputs("begin position", f); break;
-
- case ANCHOR_WORD_BOUND: fputs("word bound", f); break;
- case ANCHOR_NOT_WORD_BOUND: fputs("not word bound", f); break;
-#ifdef USE_WORD_BEGIN_END
- case ANCHOR_WORD_BEGIN: fputs("word begin", f); break;
- case ANCHOR_WORD_END: fputs("word end", f); break;
-#endif
- case ANCHOR_PREC_READ: fputs("prec read", f); break;
- case ANCHOR_PREC_READ_NOT: fputs("prec read not", f); break;
- case ANCHOR_LOOK_BEHIND: fputs("look_behind", f); break;
- case ANCHOR_LOOK_BEHIND_NOT: fputs("look_behind_not",f); break;
-
- default:
- fprintf(f, "ERROR: undefined anchor type.\n");
- break;
- }
- break;
-
- case N_BACKREF:
- {
- int* p;
- BackrefNode* br = &(NBACKREF(node));
- p = BACKREFS_P(br);
- fprintf(f, "<backref:%x>", (int )node);
- for (i = 0; i < br->back_num; i++) {
- if (i > 0) fputs(", ", f);
- fprintf(f, "%d", p[i]);
- }
- }
- break;
-
-#ifdef USE_SUBEXP_CALL
- case N_CALL:
- {
- CallNode* cn = &(NCALL(node));
- fprintf(f, "<call:%x>", (int )node);
- p_string(f, cn->name_end - cn->name, cn->name);
- }
- break;
-#endif
-
- case N_QUALIFIER:
- fprintf(f, "<qualifier:%x>{%d,%d}%s\n", (int )node,
- NQUALIFIER(node).lower, NQUALIFIER(node).upper,
- (NQUALIFIER(node).greedy ? "" : "?"));
- print_indent_tree(f, NQUALIFIER(node).target, indent + add);
- break;
-
- case N_EFFECT:
- fprintf(f, "<effect:%x> ", (int )node);
- switch (NEFFECT(node).type) {
- case EFFECT_OPTION:
- fprintf(f, "option:%d\n", NEFFECT(node).option);
- print_indent_tree(f, NEFFECT(node).target, indent + add);
- break;
- case EFFECT_MEMORY:
- fprintf(f, "memory:%d", NEFFECT(node).regnum);
- break;
- case EFFECT_STOP_BACKTRACK:
- fprintf(f, "stop-bt");
- break;
-
- default:
- break;
- }
- fprintf(f, "\n");
- print_indent_tree(f, NEFFECT(node).target, indent + add);
- break;
-
- default:
- fprintf(f, "print_indent_tree: undefined node type %d\n", NTYPE(node));
- break;
- }
-
- if (type != N_LIST && type != N_ALT && type != N_QUALIFIER &&
- type != N_EFFECT)
- fprintf(f, "\n");
- fflush(f);
-}
-#endif /* ONIG_DEBUG */
-
-#ifdef ONIG_DEBUG_PARSE_TREE
-static void
-print_tree(FILE* f, Node* node)
-{
- print_indent_tree(f, node, 0);
-}
-#endif
diff --git a/ext/mbstring/oniguruma/regenc.c b/ext/mbstring/oniguruma/regenc.c
deleted file mode 100644
index 21598ca7c7..0000000000
--- a/ext/mbstring/oniguruma/regenc.c
+++ /dev/null
@@ -1,586 +0,0 @@
-/**********************************************************************
-
- regenc.c - Oniguruma (regular expression library)
-
- Copyright (C) 2003-2004 K.Kosako (kosako@sofnec.co.jp)
-
-**********************************************************************/
-#include "regenc.h"
-
-OnigEncoding OnigEncDefaultCharEncoding = ONIG_ENCODING_INIT_DEFAULT;
-
-extern int
-onigenc_init()
-{
- return 0;
-}
-
-extern OnigEncoding
-onigenc_get_default_encoding()
-{
- return OnigEncDefaultCharEncoding;
-}
-
-extern int
-onigenc_set_default_encoding(OnigEncoding enc)
-{
- OnigEncDefaultCharEncoding = enc;
- return 0;
-}
-
-extern UChar*
-onigenc_get_right_adjust_char_head(OnigEncoding enc, UChar* start, UChar* s)
-{
- UChar* p = ONIGENC_LEFT_ADJUST_CHAR_HEAD(enc, start, s);
- if (p < s) {
- p += enc_len(enc, *p);
- }
- return p;
-}
-
-extern UChar*
-onigenc_get_right_adjust_char_head_with_prev(OnigEncoding enc,
- UChar* start, UChar* s, UChar** prev)
-{
- UChar* p = ONIGENC_LEFT_ADJUST_CHAR_HEAD(enc, start, s);
-
- if (p < s) {
- if (prev) *prev = p;
- p += enc_len(enc, *p);
- }
- else {
- if (prev) *prev = (UChar* )NULL; /* Sorry */
- }
- return p;
-}
-
-extern UChar*
-onigenc_get_prev_char_head(OnigEncoding enc, UChar* start, UChar* s)
-{
- if (s <= start)
- return (UChar* )NULL;
-
- return ONIGENC_LEFT_ADJUST_CHAR_HEAD(enc, start, s - 1);
-}
-
-extern UChar*
-onigenc_step_back(OnigEncoding enc, UChar* start, UChar* s, int n)
-{
- while (ONIG_IS_NOT_NULL(s) && n-- > 0) {
- if (s <= start)
- return (UChar* )NULL;
-
- s = ONIGENC_LEFT_ADJUST_CHAR_HEAD(enc, start, s - 1);
- }
- return s;
-}
-
-
-#ifndef ONIG_RUBY_M17N
-
-#ifndef NOT_RUBY
-#define USE_APPLICATION_TO_LOWER_CASE_TABLE
-#endif
-
-UChar* OnigEncAsciiToLowerCaseTable = (UChar* )0;
-
-#ifndef USE_APPLICATION_TO_LOWER_CASE_TABLE
-static UChar BuiltInAsciiToLowerCaseTable[] = {
- '\000', '\001', '\002', '\003', '\004', '\005', '\006', '\007',
- '\010', '\011', '\012', '\013', '\014', '\015', '\016', '\017',
- '\020', '\021', '\022', '\023', '\024', '\025', '\026', '\027',
- '\030', '\031', '\032', '\033', '\034', '\035', '\036', '\037',
- '\040', '\041', '\042', '\043', '\044', '\045', '\046', '\047',
- '\050', '\051', '\052', '\053', '\054', '\055', '\056', '\057',
- '\060', '\061', '\062', '\063', '\064', '\065', '\066', '\067',
- '\070', '\071', '\072', '\073', '\074', '\075', '\076', '\077',
- '\100', '\141', '\142', '\143', '\144', '\145', '\146', '\147',
- '\150', '\151', '\152', '\153', '\154', '\155', '\156', '\157',
- '\160', '\161', '\162', '\163', '\164', '\165', '\166', '\167',
- '\170', '\171', '\172', '\133', '\134', '\135', '\136', '\137',
- '\140', '\141', '\142', '\143', '\144', '\145', '\146', '\147',
- '\150', '\151', '\152', '\153', '\154', '\155', '\156', '\157',
- '\160', '\161', '\162', '\163', '\164', '\165', '\166', '\167',
- '\170', '\171', '\172', '\173', '\174', '\175', '\176', '\177',
- '\200', '\201', '\202', '\203', '\204', '\205', '\206', '\207',
- '\210', '\211', '\212', '\213', '\214', '\215', '\216', '\217',
- '\220', '\221', '\222', '\223', '\224', '\225', '\226', '\227',
- '\230', '\231', '\232', '\233', '\234', '\235', '\236', '\237',
- '\240', '\241', '\242', '\243', '\244', '\245', '\246', '\247',
- '\250', '\251', '\252', '\253', '\254', '\255', '\256', '\257',
- '\260', '\261', '\262', '\263', '\264', '\265', '\266', '\267',
- '\270', '\271', '\272', '\273', '\274', '\275', '\276', '\277',
- '\300', '\301', '\302', '\303', '\304', '\305', '\306', '\307',
- '\310', '\311', '\312', '\313', '\314', '\315', '\316', '\317',
- '\320', '\321', '\322', '\323', '\324', '\325', '\326', '\327',
- '\330', '\331', '\332', '\333', '\334', '\335', '\336', '\337',
- '\340', '\341', '\342', '\343', '\344', '\345', '\346', '\347',
- '\350', '\351', '\352', '\353', '\354', '\355', '\356', '\357',
- '\360', '\361', '\362', '\363', '\364', '\365', '\366', '\367',
- '\370', '\371', '\372', '\373', '\374', '\375', '\376', '\377',
-};
-#endif /* not USE_APPLICATION_TO_LOWER_CASE_TABLE */
-
-unsigned short OnigEncAsciiCtypeTable[256] = {
- 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004,
- 0x1004, 0x1106, 0x1104, 0x1104, 0x1104, 0x1104, 0x1004, 0x1004,
- 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004,
- 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004,
- 0x1142, 0x10d0, 0x10d0, 0x10d0, 0x10d0, 0x10d0, 0x10d0, 0x10d0,
- 0x10d0, 0x10d0, 0x10d0, 0x10d0, 0x10d0, 0x10d0, 0x10d0, 0x10d0,
- 0x1c58, 0x1c58, 0x1c58, 0x1c58, 0x1c58, 0x1c58, 0x1c58, 0x1c58,
- 0x1c58, 0x1c58, 0x10d0, 0x10d0, 0x10d0, 0x10d0, 0x10d0, 0x10d0,
- 0x10d0, 0x1e51, 0x1e51, 0x1e51, 0x1e51, 0x1e51, 0x1e51, 0x1a51,
- 0x1a51, 0x1a51, 0x1a51, 0x1a51, 0x1a51, 0x1a51, 0x1a51, 0x1a51,
- 0x1a51, 0x1a51, 0x1a51, 0x1a51, 0x1a51, 0x1a51, 0x1a51, 0x1a51,
- 0x1a51, 0x1a51, 0x1a51, 0x10d0, 0x10d0, 0x10d0, 0x10d0, 0x18d0,
- 0x10d0, 0x1c71, 0x1c71, 0x1c71, 0x1c71, 0x1c71, 0x1c71, 0x1871,
- 0x1871, 0x1871, 0x1871, 0x1871, 0x1871, 0x1871, 0x1871, 0x1871,
- 0x1871, 0x1871, 0x1871, 0x1871, 0x1871, 0x1871, 0x1871, 0x1871,
- 0x1871, 0x1871, 0x1871, 0x10d0, 0x10d0, 0x10d0, 0x10d0, 0x1004,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000
-};
-
-extern void
-onigenc_set_default_caseconv_table(UChar* table)
-{
- if (table == (UChar* )0) {
-#ifndef USE_APPLICATION_TO_LOWER_CASE_TABLE
- table = BuiltInAsciiToLowerCaseTable;
-#else
- return ;
-#endif
- }
-
- if (table != OnigEncAsciiToLowerCaseTable) {
- OnigEncAsciiToLowerCaseTable = table;
- }
-}
-
-extern UChar*
-onigenc_get_left_adjust_char_head(OnigEncoding enc, UChar* start, UChar* s)
-{
- return ONIGENC_LEFT_ADJUST_CHAR_HEAD(enc, start, s);
-}
-
-extern int
-onigenc_nothing_get_all_fold_match_code(OnigCodePoint** codes)
-{
- return 0;
-}
-
-extern int
-onigenc_nothing_get_fold_match_info(UChar* p, UChar* end,
- OnigEncFoldMatchInfo** info)
-{
- return -1;
-}
-
-extern int
-onigenc_nothing_get_ctype_code_range(int ctype, int* nsb, int* nmb,
- OnigCodePointRange* sbr[], OnigCodePointRange* mbr[])
-{
- return -1;
-}
-
-/* for single byte encodings */
-extern int
-onigenc_ascii_mbc_to_lower(UChar* p, UChar* lower)
-{
- *lower = ONIGENC_ASCII_CODE_TO_LOWER_CASE(*p);
- return 1; /* return byte length of converted char to lower */
-}
-
-extern int
-onigenc_ascii_mbc_is_case_ambig(UChar* p)
-{
- return ONIGENC_IS_ASCII_CODE_CASE_AMBIG(*p);
-}
-
-extern OnigCodePoint
-onigenc_single_byte_mbc_to_code(UChar* p, UChar* end)
-{
- return (OnigCodePoint )(*p);
-}
-
-extern int
-onigenc_single_byte_code_to_mbclen(OnigCodePoint code)
-{
- return 1;
-}
-
-extern int
-onigenc_single_byte_code_to_mbc_first(OnigCodePoint code)
-{
- return (code & 0xff);
-}
-
-extern int
-onigenc_single_byte_code_to_mbc(OnigCodePoint code, UChar *buf)
-{
- *buf = (UChar )(code & 0xff);
- return 1;
-}
-
-extern UChar*
-onigenc_single_byte_left_adjust_char_head(UChar* start, UChar* s)
-{
- return s;
-}
-
-extern int
-onigenc_single_byte_is_allowed_reverse_match(UChar* s, UChar* end)
-{
- return TRUE;
-}
-
-extern OnigCodePoint
-onigenc_mbn_mbc_to_code(OnigEncoding enc, UChar* p, UChar* end)
-{
- int c, i, len;
- OnigCodePoint n;
-
- c = *p++;
- len = enc_len(enc, c);
- n = c;
- if (len == 1) return n;
-
- for (i = 1; i < len; i++) {
- if (p >= end) break;
- c = *p++;
- n <<= 8; n += c;
- }
- return n;
-}
-
-extern int
-onigenc_mbn_mbc_to_lower(OnigEncoding enc, UChar* p, UChar* lower)
-{
- int len;
-
- if (ONIGENC_IS_MBC_ASCII(p)) {
- *lower = ONIGENC_ASCII_CODE_TO_LOWER_CASE(*p);
- return 1;
- }
- else {
- len = enc_len(enc, *p);
- if (lower != p) {
- /* memcpy(lower, p, len); */
- int i;
- for (i = 0; i < len; i++) {
- *lower++ = *p++;
- }
- }
- return len; /* return byte length of converted to lower char */
- }
-}
-
-extern int
-onigenc_mbn_mbc_is_case_ambig(UChar* p)
-{
- if (ONIGENC_IS_MBC_ASCII(p))
- return ONIGENC_IS_ASCII_CODE_CASE_AMBIG(*p);
-
- return FALSE;
-}
-
-extern int
-onigenc_mb2_code_to_mbclen(OnigCodePoint code)
-{
- if ((code & 0xff00) != 0) return 2;
- else return 1;
-}
-
-extern int
-onigenc_mb4_code_to_mbclen(OnigCodePoint code)
-{
- if ((code & 0xff000000) != 0) return 4;
- else if ((code & 0xff0000) != 0) return 3;
- else if ((code & 0xff00) != 0) return 2;
- else return 1;
-}
-
-extern int
-onigenc_mb2_code_to_mbc_first(OnigCodePoint code)
-{
- int first;
-
- if ((code & 0xff00) != 0) {
- first = (code >> 8) & 0xff;
- }
- else {
- return (int )code;
- }
- return first;
-}
-
-extern int
-onigenc_mb4_code_to_mbc_first(OnigCodePoint code)
-{
- int first;
-
- if ((code & 0xff000000) != 0) {
- first = (code >> 24) & 0xff;
- }
- else if ((code & 0xff0000) != 0) {
- first = (code >> 16) & 0xff;
- }
- else if ((code & 0xff00) != 0) {
- first = (code >> 8) & 0xff;
- }
- else {
- return (int )code;
- }
- return first;
-}
-
-extern int
-onigenc_mb2_code_to_mbc(OnigEncoding enc, OnigCodePoint code, UChar *buf)
-{
- UChar *p = buf;
-
- if ((code & 0xff00) != 0) {
- *p++ = (UChar )((code >> 8) & 0xff);
- }
- *p++ = (UChar )(code & 0xff);
-
-#if 1
- if (enc_len(enc, buf[0]) != (p - buf))
- return ONIGERR_INVALID_WIDE_CHAR_VALUE;
-#endif
- return p - buf;
-}
-
-extern int
-onigenc_mb4_code_to_mbc(OnigEncoding enc, OnigCodePoint code, UChar *buf)
-{
- UChar *p = buf;
-
- if ((code & 0xff000000) != 0) {
- *p++ = (UChar )((code >> 24) & 0xff);
- }
- if ((code & 0xff0000) != 0) {
- *p++ = (UChar )((code >> 16) & 0xff);
- }
- if ((code & 0xff00) != 0) {
- *p++ = (UChar )((code >> 8) & 0xff);
- }
- *p++ = (UChar )(code & 0xff);
-
-#if 1
- if (enc_len(enc, buf[0]) != (p - buf))
- return ONIGERR_INVALID_WIDE_CHAR_VALUE;
-#endif
- return p - buf;
-}
-
-extern int
-onigenc_mb2_code_is_ctype(OnigEncoding enc, OnigCodePoint code,
- unsigned int ctype)
-{
- if ((ctype & ONIGENC_CTYPE_WORD) != 0) {
- if (code < 128)
- return ONIGENC_IS_ASCII_CODE_CTYPE(code, ctype);
- else {
- int first = onigenc_mb2_code_to_mbc_first(code);
- return (enc_len(enc, first) > 1 ? TRUE : FALSE);
- }
-
- ctype &= ~ONIGENC_CTYPE_WORD;
- if (ctype == 0) return FALSE;
- }
-
- if (code < 128)
- return ONIGENC_IS_ASCII_CODE_CTYPE(code, ctype);
- else
- return FALSE;
-}
-
-extern int
-onigenc_mb4_code_is_ctype(OnigEncoding enc, OnigCodePoint code,
- unsigned int ctype)
-{
- if ((ctype & ONIGENC_CTYPE_WORD) != 0) {
- if (code < 128)
- return ONIGENC_IS_ASCII_CODE_CTYPE(code, ctype);
- else {
- int first = onigenc_mb4_code_to_mbc_first(code);
- return (enc_len(enc, first) > 1 ? TRUE : FALSE);
- }
-
- ctype &= ~ONIGENC_CTYPE_WORD;
- if (ctype == 0) return FALSE;
- }
-
- if (code < 128)
- return ONIGENC_IS_ASCII_CODE_CTYPE(code, ctype);
- else
- return FALSE;
-}
-
-extern int
-onigenc_get_all_fold_match_code_ss_0xdf(OnigCodePoint** codes)
-{
- static OnigCodePoint list[] = { 0xdf };
- *codes = list;
- return 1;
-}
-
-extern int
-onigenc_get_fold_match_info_ss_0xdf(UChar* p, UChar* end,
- OnigEncFoldMatchInfo** info)
-{
- /* German alphabet ess-tsett(U+00DF) */
- static OnigEncFoldMatchInfo ss = {
- 3,
- { 1, 2, 2 },
- { "\337", "ss", "SS" } /* 0337: 0xdf */
- };
-
- if (p >= end) return -1;
-
- if (*p == 0xdf) {
- *info = &ss;
- return 1;
- }
- else if (p + 1 < end) {
- if ((*p == 'S' && *(p+1) == 'S') ||
- (*p == 's' && *(p+1) == 's')) {
- *info = &ss;
- return 2;
- }
- }
-
- return -1; /* is not a fold string. */
-}
-
-#else /* ONIG_RUBY_M17N */
-
-extern int
-onigenc_is_code_ctype(OnigEncoding enc, OnigCodePoint code, int ctype)
-{
- switch (ctype) {
- case ONIGENC_CTYPE_ALPHA:
- return m17n_isalpha(enc, code);
- break;
- case ONIGENC_CTYPE_BLANK:
- return ONIGENC_IS_CODE_BLANK(enc, (int )(code));
- break;
- case ONIGENC_CTYPE_CNTRL:
- return m17n_iscntrl(enc, code);
- break;
- case ONIGENC_CTYPE_DIGIT:
- return m17n_isdigit(enc, code);
- break;
- case ONIGENC_CTYPE_GRAPH:
- return ONIGENC_IS_CODE_GRAPH(enc, (int )(code));
- break;
- case ONIGENC_CTYPE_LOWER:
- return m17n_islower(enc, code);
- break;
- case ONIGENC_CTYPE_PRINT:
- return m17n_isprint(enc, code);
- break;
- case ONIGENC_CTYPE_PUNCT:
- return m17n_ispunct(enc, code);
- break;
- case ONIGENC_CTYPE_SPACE:
- return m17n_isspace(enc, code);
- break;
- case ONIGENC_CTYPE_UPPER:
- return m17n_isupper(enc, code);
- break;
- case ONIGENC_CTYPE_XDIGIT:
- return m17n_isxdigit(enc, code);
- break;
- case ONIGENC_CTYPE_WORD:
- return m17n_iswchar(enc, code);
- break;
- case ONIGENC_CTYPE_ASCII:
- return (code < 128 ? TRUE : FALSE);
- break;
- case ONIGENC_CTYPE_ALNUM:
- return m17n_isalnum(enc, code);
- break;
- default:
- break;
- }
-
- return 0;
-}
-
-extern int
-onigenc_code_to_mbc(OnigEncoding enc, OnigCodePoint code, UChar *buf)
-{
- int c, len;
-
- m17n_mbcput(enc, code, buf);
- c = m17n_firstbyte(enc, code);
- len = enc_len(enc, c);
- return len;
-}
-
-extern int
-onigenc_mbc_to_lower(OnigEncoding enc, UChar* p, UChar* buf)
-{
- unsigned int c, low;
-
- c = m17n_codepoint(enc, p, p + enc_len(enc, *p));
- low = m17n_tolower(enc, c);
- m17n_mbcput(enc, low, buf);
-
- return m17n_codelen(enc, low);
-}
-
-extern int
-onigenc_mbc_is_case_ambig(OnigEncoding enc, UChar* p)
-{
- unsigned int c = m17n_codepoint(enc, p, p + enc_len(enc, *p));
-
- if (m17n_isupper(enc, c) || m17n_islower(enc, c))
- return TRUE;
- return FALSE;
-}
-
-extern UChar*
-onigenc_get_left_adjust_char_head(OnigEncoding enc, UChar* start, UChar* s)
-{
- UChar *p;
- int len;
-
- if (s <= start) return s;
- p = s;
-
- while (!m17n_islead(enc, *p) && p > start) p--;
- while (p + (len = enc_len(enc, *p)) < s) {
- p += len;
- }
- if (p + len == s) return s;
- return p;
-}
-
-extern int
-onigenc_is_allowed_reverse_match(OnigEncoding enc, UChar* s, UChar* end)
-{
- return ONIGENC_IS_SINGLEBYTE(enc);
-}
-
-extern void
-onigenc_set_default_caseconv_table(UChar* table) { }
-
-#endif /* ONIG_RUBY_M17N */
diff --git a/ext/mbstring/oniguruma/regenc.h b/ext/mbstring/oniguruma/regenc.h
deleted file mode 100644
index e0c6211d32..0000000000
--- a/ext/mbstring/oniguruma/regenc.h
+++ /dev/null
@@ -1,96 +0,0 @@
-/**********************************************************************
-
- regenc.h - Oniguruma (regular expression library)
-
- Copyright (C) 2003-2004 K.Kosako (kosako@sofnec.co.jp)
-
-**********************************************************************/
-#ifndef REGENC_H
-#define REGENC_H
-
-#ifndef RUBY_PLATFORM
-#include "config.h"
-#endif
-#include "oniguruma.h"
-
-#ifndef NULL
-#define NULL ((void* )0)
-#endif
-
-#ifndef TRUE
-#define TRUE 1
-#endif
-
-#ifndef FALSE
-#define FALSE 0
-#endif
-
-/* error codes */
-/* internal error */
-#define ONIGERR_MEMORY -5
-#define ONIGERR_TYPE_BUG -6
-/* syntax error [-400, -999] */
-#define ONIGERR_INVALID_WIDE_CHAR_VALUE -400
-#define ONIGERR_TOO_BIG_WIDE_CHAR_VALUE -401
-
-#define ONIG_NEWLINE '\n'
-#define ONIG_IS_NEWLINE(c) ((c) == ONIG_NEWLINE)
-#define ONIG_IS_NULL(p) (((void*)(p)) == (void*)0)
-#define ONIG_IS_NOT_NULL(p) (((void*)(p)) != (void*)0)
-#define ONIG_CHECK_NULL_RETURN(p) if (ONIG_IS_NULL(p)) return NULL
-#define ONIG_CHECK_NULL_RETURN_VAL(p,val) if (ONIG_IS_NULL(p)) return (val)
-
-
-#ifdef ONIG_RUBY_M17N
-
-#define ONIG_ENCODING_INIT_DEFAULT ONIG_ENCODING_UNDEF
-
-#else /* ONIG_RUBY_M17N */
-
-#define ONIG_ENCODING_INIT_DEFAULT ONIG_ENCODING_ASCII
-
-/* for encoding system implementation (internal) */
-ONIG_EXTERN int onigenc_nothing_get_all_fold_match_code P_((OnigCodePoint** codes));
-ONIG_EXTERN int onigenc_nothing_get_fold_match_info P_((UChar* p, UChar* end, OnigEncFoldMatchInfo** info));
-ONIG_EXTERN int onigenc_nothing_get_ctype_code_range P_((int ctype, int* nsb, int* nmb, OnigCodePointRange* sbr[], OnigCodePointRange* mbr[]));
-
-/* methods for single byte encoding */
-ONIG_EXTERN int onigenc_ascii_mbc_to_lower P_((UChar* p, UChar* lower));
-ONIG_EXTERN int onigenc_ascii_mbc_is_case_ambig P_((UChar* p));
-ONIG_EXTERN OnigCodePoint onigenc_single_byte_mbc_to_code P_((UChar* p, UChar* end));
-ONIG_EXTERN int onigenc_single_byte_code_to_mbclen P_((OnigCodePoint code));
-ONIG_EXTERN int onigenc_single_byte_code_to_mbc_first P_((OnigCodePoint code));
-ONIG_EXTERN int onigenc_single_byte_code_to_mbc P_((OnigCodePoint code, UChar *buf));
-ONIG_EXTERN UChar* onigenc_single_byte_left_adjust_char_head P_((UChar* start, UChar* s));
-ONIG_EXTERN int onigenc_single_byte_is_allowed_reverse_match P_((UChar* s, UChar* end));
-
-/* methods for multi byte encoding */
-ONIG_EXTERN OnigCodePoint onigenc_mbn_mbc_to_code P_((OnigEncoding enc, UChar* p, UChar* end));
-ONIG_EXTERN int onigenc_mbn_mbc_to_lower P_((OnigEncoding enc, UChar* p, UChar* lower));
-ONIG_EXTERN int onigenc_mbn_mbc_is_case_ambig P_((UChar* p));
-ONIG_EXTERN int onigenc_mb2_code_to_mbclen P_((OnigCodePoint code));
-ONIG_EXTERN int onigenc_mb2_code_to_mbc_first P_((OnigCodePoint code));
-ONIG_EXTERN int onigenc_mb2_code_to_mbc P_((OnigEncoding enc, OnigCodePoint code, UChar *buf));
-ONIG_EXTERN int onigenc_mb2_code_is_ctype P_((OnigEncoding enc, OnigCodePoint code, unsigned int ctype));
-ONIG_EXTERN int onigenc_mb4_code_to_mbclen P_((OnigCodePoint code));
-ONIG_EXTERN int onigenc_mb4_code_to_mbc_first P_((OnigCodePoint code));
-ONIG_EXTERN int onigenc_mb4_code_to_mbc P_((OnigEncoding enc, OnigCodePoint code, UChar *buf));
-ONIG_EXTERN int onigenc_mb4_code_is_ctype P_((OnigEncoding enc, OnigCodePoint code, unsigned int ctype));
-
-ONIG_EXTERN int onigenc_get_all_fold_match_code_ss_0xdf P_((OnigCodePoint** codes));
-ONIG_EXTERN int onigenc_get_fold_match_info_ss_0xdf P_((UChar* p, UChar* end, OnigEncFoldMatchInfo** info));
-
-#endif /* is not ONIG_RUBY_M17N */
-
-
-ONIG_EXTERN OnigEncoding OnigEncDefaultCharEncoding;
-ONIG_EXTERN UChar* OnigEncAsciiToLowerCaseTable;
-ONIG_EXTERN unsigned short OnigEncAsciiCtypeTable[];
-
-#define ONIGENC_ASCII_CODE_TO_LOWER_CASE(c) OnigEncAsciiToLowerCaseTable[c]
-#define ONIGENC_IS_ASCII_CODE_CTYPE(code,ctype) \
- ((OnigEncAsciiCtypeTable[code] & ctype) != 0)
-#define ONIGENC_IS_ASCII_CODE_CASE_AMBIG(code) \
- ONIGENC_IS_ASCII_CODE_CTYPE(code, (ONIGENC_CTYPE_UPPER | ONIGENC_CTYPE_LOWER))
-
-#endif /* REGENC_H */
diff --git a/ext/mbstring/oniguruma/regerror.c b/ext/mbstring/oniguruma/regerror.c
deleted file mode 100644
index 5a6c31b82e..0000000000
--- a/ext/mbstring/oniguruma/regerror.c
+++ /dev/null
@@ -1,291 +0,0 @@
-/**********************************************************************
-
- regerror.c - Oniguruma (regular expression library)
-
- Copyright (C) 2002-2004 K.Kosako (kosako@sofnec.co.jp)
-
-**********************************************************************/
-#include "regint.h"
-#include <stdio.h> /* for vsnprintf() */
-
-#ifdef HAVE_STDARG_PROTOTYPES
-#include <stdarg.h>
-#define va_init_list(a,b) va_start(a,b)
-#else
-#include <varargs.h>
-#define va_init_list(a,b) va_start(a)
-#endif
-
-extern char*
-onig_error_code_to_format(int code)
-{
- char *p;
-
- if (code >= 0) return (char* )0;
-
- switch (code) {
- case ONIG_MISMATCH:
- p = "mismatch"; break;
- case ONIG_NO_SUPPORT_CONFIG:
- p = "no support in this configuration"; break;
- case ONIGERR_MEMORY:
- p = "fail to memory allocation"; break;
- case ONIGERR_MATCH_STACK_LIMIT_OVER:
- p = "match-stack limit over"; break;
- case ONIGERR_TYPE_BUG:
- p = "undefined type (bug)"; break;
- case ONIGERR_PARSER_BUG:
- p = "internal parser error (bug)"; break;
- case ONIGERR_STACK_BUG:
- p = "stack error (bug)"; break;
- case ONIGERR_UNDEFINED_BYTECODE:
- p = "undefined bytecode (bug)"; break;
- case ONIGERR_UNEXPECTED_BYTECODE:
- p = "unexpected bytecode (bug)"; break;
- case ONIGERR_DEFAULT_ENCODING_IS_NOT_SETTED:
- p = "default multibyte-encoding is not setted"; break;
- case ONIGERR_SPECIFIED_ENCODING_CANT_CONVERT_TO_WIDE_CHAR:
- p = "can't convert to wide-char on specified multibyte-encoding"; break;
- case ONIGERR_INVALID_ARGUMENT:
- p = "invalid argument"; break;
- case ONIGERR_END_PATTERN_AT_LEFT_BRACE:
- p = "end pattern at left brace"; break;
- case ONIGERR_END_PATTERN_AT_LEFT_BRACKET:
- p = "end pattern at left bracket"; break;
- case ONIGERR_EMPTY_CHAR_CLASS:
- p = "empty char-class"; break;
- case ONIGERR_PREMATURE_END_OF_CHAR_CLASS:
- p = "premature end of char-class"; break;
- case ONIGERR_END_PATTERN_AT_BACKSLASH:
- p = "end pattern at backslash"; break;
- case ONIGERR_END_PATTERN_AT_META:
- p = "end pattern at meta"; break;
- case ONIGERR_END_PATTERN_AT_CONTROL:
- p = "end pattern at control"; break;
- case ONIGERR_META_CODE_SYNTAX:
- p = "illegal meta-code syntax"; break;
- case ONIGERR_CONTROL_CODE_SYNTAX:
- p = "illegal control-code syntax"; break;
- case ONIGERR_CHAR_CLASS_VALUE_AT_END_OF_RANGE:
- p = "char-class value at end of range"; break;
- case ONIGERR_CHAR_CLASS_VALUE_AT_START_OF_RANGE:
- p = "char-class value at start of range"; break;
- case ONIGERR_UNMATCHED_RANGE_SPECIFIER_IN_CHAR_CLASS:
- p = "unmatched range specifier in char-class"; break;
- case ONIGERR_TARGET_OF_REPEAT_OPERATOR_NOT_SPECIFIED:
- p = "target of repeat operator is not specified"; break;
- case ONIGERR_TARGET_OF_REPEAT_OPERATOR_INVALID:
- p = "target of repeat operator is invalid"; break;
- case ONIGERR_NESTED_REPEAT_OPERATOR:
- p = "nested repeat operator"; break;
- case ONIGERR_UNMATCHED_CLOSE_PARENTHESIS:
- p = "unmatched close parenthesis"; break;
- case ONIGERR_END_PATTERN_WITH_UNMATCHED_PARENTHESIS:
- p = "end pattern with unmatched parenthesis"; break;
- case ONIGERR_END_PATTERN_IN_GROUP:
- p = "end pattern in group"; break;
- case ONIGERR_UNDEFINED_GROUP_OPTION:
- p = "undefined group option"; break;
- case ONIGERR_INVALID_POSIX_BRACKET_TYPE:
- p = "invalid POSIX bracket type"; break;
- case ONIGERR_INVALID_LOOK_BEHIND_PATTERN:
- p = "invalid pattern in look-behind"; break;
- case ONIGERR_INVALID_REPEAT_RANGE_PATTERN:
- p = "invalid repeat range {lower,upper}"; break;
- case ONIGERR_TOO_BIG_NUMBER:
- p = "too big number"; break;
- case ONIGERR_TOO_BIG_NUMBER_FOR_REPEAT_RANGE:
- p = "too big number for repeat range"; break;
- case ONIGERR_UPPER_SMALLER_THAN_LOWER_IN_REPEAT_RANGE:
- p = "upper is smaller than lower in repeat range"; break;
- case ONIGERR_EMPTY_RANGE_IN_CHAR_CLASS:
- p = "empty range in char class"; break;
- case ONIGERR_MISMATCH_CODE_LENGTH_IN_CLASS_RANGE:
- p = "mismatch multibyte code length in char-class range"; break;
- case ONIGERR_TOO_MANY_MULTI_BYTE_RANGES:
- p = "too many multibyte code ranges are specified"; break;
- case ONIGERR_TOO_SHORT_MULTI_BYTE_STRING:
- p = "too short multibyte code string"; break;
- case ONIGERR_TOO_BIG_BACKREF_NUMBER:
- p = "too big backref number"; break;
- case ONIGERR_INVALID_BACKREF:
-#ifdef USE_NAMED_GROUP
- p = "invalid backref number/name"; break;
-#else
- p = "invalid backref number"; break;
-#endif
- case ONIGERR_NUMBERED_BACKREF_OR_CALL_NOT_ALLOWED:
- p = "numbered backref/call is not allowed. (use name)"; break;
- case ONIGERR_TOO_BIG_WIDE_CHAR_VALUE:
- p = "too big wide-char value"; break;
- case ONIGERR_TOO_LONG_WIDE_CHAR_VALUE:
- p = "too long wide-char value"; break;
- case ONIGERR_INVALID_WIDE_CHAR_VALUE:
- p = "invalid wide-char value"; break;
- case ONIGERR_EMPTY_GROUP_NAME:
- p = "group name is empty"; break;
- case ONIGERR_INVALID_GROUP_NAME:
- p = "invalid group name <%n>"; break;
- case ONIGERR_INVALID_CHAR_IN_GROUP_NAME:
-#ifdef USE_NAMED_GROUP
- p = "invalid char in group name <%n>"; break;
-#else
- p = "invalid char in group number <%n>"; break;
-#endif
- case ONIGERR_UNDEFINED_NAME_REFERENCE:
- p = "undefined name <%n> reference"; break;
- case ONIGERR_UNDEFINED_GROUP_REFERENCE:
- p = "undefined group <%n> reference"; break;
- case ONIGERR_MULTIPLEX_DEFINED_NAME:
- p = "multiplex defined name <%n>"; break;
- case ONIGERR_MULTIPLEX_DEFINITION_NAME_CALL:
- p = "multiplex definition name <%n> call"; break;
- case ONIGERR_NEVER_ENDING_RECURSION:
- p = "never ending recursion"; break;
- case ONIGERR_GROUP_NUMBER_OVER_FOR_CAPTURE_HISTORY:
- p = "group number is too big for capture history"; break;
- case ONIGERR_INVALID_CHAR_PROPERTY_NAME:
- p = "invalid character property name"; break;
- case ONIGERR_OVER_THREAD_PASS_LIMIT_COUNT:
- p = "over thread pass limit count"; break;
-
- default:
- p = "undefined error code"; break;
- }
-
- return p;
-}
-
-
-/* for ONIG_MAX_ERROR_MESSAGE_LEN */
-#define MAX_ERROR_PAR_LEN 30
-
-extern int
-#ifdef HAVE_STDARG_PROTOTYPES
-onig_error_code_to_str(UChar* s, int code, ...)
-#else
-onig_error_code_to_str(s, code, va_alist)
- UChar* s;
- int code;
- va_dcl
-#endif
-{
- UChar *p, *q;
- OnigErrorInfo* einfo;
- int len;
- va_list vargs;
-
- va_init_list(vargs, code);
-
- switch (code) {
- case ONIGERR_UNDEFINED_NAME_REFERENCE:
- case ONIGERR_UNDEFINED_GROUP_REFERENCE:
- case ONIGERR_MULTIPLEX_DEFINED_NAME:
- case ONIGERR_MULTIPLEX_DEFINITION_NAME_CALL:
- case ONIGERR_INVALID_GROUP_NAME:
- case ONIGERR_INVALID_CHAR_IN_GROUP_NAME:
- einfo = va_arg(vargs, OnigErrorInfo*);
- len = einfo->par_end - einfo->par;
- q = onig_error_code_to_format(code);
- p = s;
- while (*q != '\0') {
- if (*q == '%') {
- q++;
- if (*q == 'n') { /* '%n': name */
- if (len > MAX_ERROR_PAR_LEN) {
- xmemcpy(p, einfo->par, MAX_ERROR_PAR_LEN - 3);
- p += (MAX_ERROR_PAR_LEN - 3);
- xmemcpy(p, "...", 3);
- p += 3;
- }
- else {
- xmemcpy(p, einfo->par, len);
- p += len;
- }
- q++;
- }
- else
- goto normal_char;
- }
- else {
- normal_char:
- *p++ = *q++;
- }
- }
- *p = '\0';
- len = p - s;
- break;
-
- default:
- q = onig_error_code_to_format(code);
- len = strlen(q);
- xmemcpy(s, q, len);
- s[len] = '\0';
- break;
- }
-
- va_end(vargs);
- return len;
-}
-
-
-void
-#ifdef HAVE_STDARG_PROTOTYPES
-onig_snprintf_with_pattern(char buf[], int bufsize, OnigEncoding enc,
- char* pat, char* pat_end, char *fmt, ...)
-#else
-onig_snprintf_with_pattern(buf, bufsize, enc, pat, pat_end, fmt, va_alist)
- char buf[];
- int bufsize;
- OnigEncoding enc;
- char* pat;
- char* pat_end;
- const char *fmt;
- va_dcl
-#endif
-{
- int n, need, len;
- UChar *p, *s;
- va_list args;
-
- va_init_list(args, fmt);
- n = vsnprintf(buf, bufsize, fmt, args);
- va_end(args);
-
- need = (pat_end - pat) * 4 + 4;
-
- if (n + need < bufsize) {
- strcat(buf, ": /");
- s = buf + strlen(buf);
-
- p = pat;
- while (p < (UChar* )pat_end) {
- if (*p == MC_ESC) {
- *s++ = *p++;
- len = enc_len(enc, *p);
- while (len-- > 0) *s++ = *p++;
- }
- else if (*p == '/') {
- *s++ = MC_ESC;
- *s++ = *p++;
- }
- else if (ONIGENC_IS_MBC_HEAD(enc, *p)) {
- len = enc_len(enc, *p);
- while (len-- > 0) *s++ = *p++;
- }
- else if (!ONIGENC_IS_CODE_PRINT(enc, *p) &&
- !ONIGENC_IS_CODE_SPACE(enc, *p)) {
- char b[5];
- sprintf(b, "\\%03o", *p & 0377);
- len = strlen(b);
- while (len-- > 0) *s++ = *p++;
- }
- else {
- *s++ = *p++;
- }
- }
-
- *s++ = '/';
- *s = '\0';
- }
-}
diff --git a/ext/mbstring/oniguruma/regex.c b/ext/mbstring/oniguruma/regex.c
deleted file mode 100644
index 2d79d000a8..0000000000
--- a/ext/mbstring/oniguruma/regex.c
+++ /dev/null
@@ -1,26 +0,0 @@
-/**********************************************************************
-
- regex.c - Oniguruma (regular expression library)
-
- Copyright (C) 2002-2004 K.Kosako (kosako@sofnec.co.jp)
-
-**********************************************************************/
-/*
- * Source wrapper for Ruby.
- */
-#include "regint.h"
-#include "regex.h"
-
-#include "regparse.c"
-#include "regcomp.c"
-#include "regexec.c"
-#include "regenc.c"
-#include "reggnu.c"
-#include "regerror.c"
-
-#ifndef ONIG_RUBY_M17N
-#include "enc/ascii.c"
-#include "enc/utf8.c"
-#include "enc/euc_jp.c"
-#include "enc/sjis.c"
-#endif
diff --git a/ext/mbstring/oniguruma/regexec.c b/ext/mbstring/oniguruma/regexec.c
deleted file mode 100644
index 2ded602e15..0000000000
--- a/ext/mbstring/oniguruma/regexec.c
+++ /dev/null
@@ -1,3299 +0,0 @@
-/**********************************************************************
-
- regexec.c - Oniguruma (regular expression library)
-
- Copyright (C) 2002-2004 K.Kosako (kosako@sofnec.co.jp)
-
-**********************************************************************/
-#include "regint.h"
-
-static void
-region_list_clear(OnigRegion** list)
-{
- int i;
-
- if (IS_NOT_NULL(list)) {
- for (i = 1; i <= ONIG_MAX_CAPTURE_HISTORY_GROUP; i++) {
- if (IS_NOT_NULL(list[i])) {
- xfree(list[i]);
- list[i] = (OnigRegion* )0;
- }
- }
- }
-}
-
-static void
-region_list_free(OnigRegion* r)
-{
- if (IS_NOT_NULL(r->list)) {
- region_list_clear(r->list);
- xfree(r->list);
- r->list = (OnigRegion** )0;
- }
-}
-
-static OnigRegion**
-region_list_new()
-{
- int i;
- OnigRegion** list;
-
- list = (OnigRegion** )xmalloc(sizeof(OnigRegion*)
- * (ONIG_MAX_CAPTURE_HISTORY_GROUP + 1));
- CHECK_NULL_RETURN(list);
- for (i = 0; i <= ONIG_MAX_CAPTURE_HISTORY_GROUP; i++) {
- list[i] = (OnigRegion* )0;
- }
-
- return list;
-}
-
-extern void
-onig_region_clear(OnigRegion* region)
-{
- int i;
-
- for (i = 0; i < region->num_regs; i++) {
- region->beg[i] = region->end[i] = ONIG_REGION_NOTPOS;
- }
- region_list_clear(region->list);
-}
-
-extern int
-onig_region_resize(OnigRegion* region, int n)
-{
- int i;
-
- region->num_regs = n;
-
- if (n < ONIG_NREGION)
- n = ONIG_NREGION;
-
- if (region->allocated == 0) {
- region->beg = (int* )xmalloc(n * sizeof(int));
- region->end = (int* )xmalloc(n * sizeof(int));
-
- if (region->beg == 0 || region->end == 0)
- return ONIGERR_MEMORY;
-
- region->allocated = n;
- }
- else if (region->allocated < n) {
- region->beg = (int* )xrealloc(region->beg, n * sizeof(int));
- region->end = (int* )xrealloc(region->end, n * sizeof(int));
-
- if (region->beg == 0 || region->end == 0)
- return ONIGERR_MEMORY;
-
- region->allocated = n;
- }
-
- for (i = 0; i < region->num_regs; i++) {
- region->beg[i] = region->end[i] = ONIG_REGION_NOTPOS;
- }
-
- if (IS_NOT_NULL(region->list))
- region_list_clear(region->list);
-
- return 0;
-}
-
-static int
-region_ensure_size(OnigRegion* region, int n)
-{
- int i, new_size;
-
- if (region->allocated >= n)
- return 0;
-
- new_size = region->allocated;
- if (new_size == 0)
- new_size = ONIG_NREGION;
- while (new_size < n)
- new_size *= 2;
-
- if (region->allocated == 0) {
- region->beg = (int* )xmalloc(new_size * sizeof(int));
- region->end = (int* )xmalloc(new_size * sizeof(int));
- if (region->beg == 0 || region->end == 0)
- return ONIGERR_MEMORY;
-
- region->allocated = new_size;
- }
- else if (region->allocated < new_size) {
- region->beg = (int* )xrealloc(region->beg, new_size * sizeof(int));
- region->end = (int* )xrealloc(region->end, new_size * sizeof(int));
- if (region->beg == 0 || region->end == 0)
- return ONIGERR_MEMORY;
-
- region->allocated = new_size;
- }
-
- for (i = region->num_regs; i < n; i++) {
- region->beg[i] = region->end[i] = ONIG_REGION_NOTPOS;
- }
- return 0;
-}
-
-static int
-region_list_add_entry(OnigRegion* region, int group, int start, int end)
-{
- int r, pos;
- OnigRegion** list;
-
- if (group > ONIG_MAX_CAPTURE_HISTORY_GROUP)
- return ONIGERR_GROUP_NUMBER_OVER_FOR_CAPTURE_HISTORY;
-
- if (IS_NULL(region->list)) {
- region->list = region_list_new();
- CHECK_NULL_RETURN_VAL(region->list, ONIGERR_MEMORY);
- }
-
- list = region->list;
- if (IS_NULL(list[group])) {
- list[group] = onig_region_new();
- CHECK_NULL_RETURN_VAL(list[group], ONIGERR_MEMORY);
- }
-
- r = region_ensure_size(list[group], list[group]->num_regs + 1);
- if (r != 0) return r;
-
- pos = list[group]->num_regs;
- list[group]->beg[pos] = start;
- list[group]->end[pos] = end;
- list[group]->num_regs++;
-
- return 0;
-}
-
-static void
-onig_region_init(OnigRegion* region)
-{
- region->num_regs = 0;
- region->allocated = 0;
- region->beg = (int* )0;
- region->end = (int* )0;
- region->list = (OnigRegion** )0;
-}
-
-extern OnigRegion*
-onig_region_new()
-{
- OnigRegion* r;
-
- r = (OnigRegion* )xmalloc(sizeof(OnigRegion));
- onig_region_init(r);
- return r;
-}
-
-extern void
-onig_region_free(OnigRegion* r, int free_self)
-{
- if (r) {
- if (r->allocated > 0) {
- if (r->beg) xfree(r->beg);
- if (r->end) xfree(r->end);
- r->allocated = 0;
- }
- region_list_free(r);
- if (free_self) xfree(r);
- }
-}
-
-extern void
-onig_region_copy(OnigRegion* to, OnigRegion* from)
-{
-#define RREGC_SIZE (sizeof(int) * from->num_regs)
- int i;
-
- if (to == from) return;
-
- if (to->allocated == 0) {
- if (from->num_regs > 0) {
- to->beg = (int* )xmalloc(RREGC_SIZE);
- to->end = (int* )xmalloc(RREGC_SIZE);
- to->allocated = from->num_regs;
- }
- }
- else if (to->allocated < from->num_regs) {
- to->beg = (int* )xrealloc(to->beg, RREGC_SIZE);
- to->end = (int* )xrealloc(to->end, RREGC_SIZE);
- to->allocated = from->num_regs;
- }
-
- for (i = 0; i < from->num_regs; i++) {
- to->beg[i] = from->beg[i];
- to->end[i] = from->end[i];
- }
- to->num_regs = from->num_regs;
-
- if (IS_NOT_NULL(from->list)) {
- if (IS_NULL(to->list)) {
- to->list = region_list_new();
- }
-
- for (i = 1; i <= ONIG_MAX_CAPTURE_HISTORY_GROUP; i++) {
- if (IS_NOT_NULL(from->list[i])) {
- if (IS_NULL(to->list[i]))
- to->list[i] = onig_region_new();
-
- onig_region_copy(to->list[i], from->list[i]);
- }
- else {
- if (IS_NOT_NULL(to->list[i])) {
- xfree(to->list[i]);
- to->list[i] = (OnigRegion* )0;
- }
- }
- }
- }
- else
- region_list_free(to);
-}
-
-
-/** stack **/
-#define INVALID_STACK_INDEX -1
-typedef int StackIndex;
-
-typedef struct _StackType {
- unsigned int type;
- union {
- struct {
- UChar *pcode; /* byte code position */
- UChar *pstr; /* string position */
- UChar *pstr_prev; /* previous char position of pstr */
- } state;
- struct {
- int count; /* for OP_REPEAT_INC, OP_REPEAT_INC_NG */
- UChar *pcode; /* byte code position (head of repeated target) */
- int num; /* repeat id */
- } repeat;
- struct {
- StackIndex si; /* index of stack */
- } repeat_inc;
- struct {
- int num; /* memory num */
- UChar *pstr; /* start/end position */
- /* Following information is setted, if this stack type is MEM-START */
- StackIndex start; /* prev. info (for backtrack "(...)*" ) */
- StackIndex end; /* prev. info (for backtrack "(...)*" ) */
- } mem;
- struct {
- int num; /* null check id */
- UChar *pstr; /* start position */
- } null_check;
-#ifdef USE_SUBEXP_CALL
- struct {
- UChar *ret_addr; /* byte code position */
- int num; /* null check id */
- UChar *pstr; /* string position */
- } call_frame;
-#endif
- } u;
-} StackType;
-
-/* stack type */
-/* used by normal-POP */
-#define STK_ALT 0x0001
-#define STK_LOOK_BEHIND_NOT 0x0003
-#define STK_POS_NOT 0x0005
-/* avoided by normal-POP, but value should be small */
-#define STK_NULL_CHECK_START 0x0100
-/* handled by normal-POP */
-#define STK_MEM_START 0x0200
-#define STK_MEM_END 0x0300
-#define STK_REPEAT_INC 0x0400
-/* avoided by normal-POP */
-#define STK_POS 0x0500 /* used when POP-POS */
-#define STK_STOP_BT 0x0600 /* mark for "(?>...)" */
-#define STK_REPEAT 0x0700
-#define STK_CALL_FRAME 0x0800
-#define STK_RETURN 0x0900
-#define STK_MEM_END_MARK 0x0a00
-#define STK_VOID 0x0b00 /* for fill a blank */
-#define STK_NULL_CHECK_END 0x0c00 /* for recursive call */
-
-/* stack type check mask */
-#define STK_MASK_POP_USED 0x00ff
-#define IS_TO_VOID_TARGET(stk) \
- (((stk)->type & STK_MASK_POP_USED) || (stk)->type == STK_NULL_CHECK_START)
-
-typedef struct {
- void* stack_p;
- int stack_n;
- OnigOptionType options;
- OnigRegion* region;
- UChar* start; /* search start position (for \G: BEGIN_POSITION) */
-} MatchArg;
-
-#define MATCH_ARG_INIT(msa, arg_option, arg_region, arg_start) do {\
- (msa).stack_p = (void* )0;\
- (msa).options = (arg_option);\
- (msa).region = (arg_region);\
- (msa).start = (arg_start);\
-} while (0)
-
-#define MATCH_ARG_FREE(msa) if ((msa).stack_p) xfree((msa).stack_p)
-
-
-#define STACK_INIT(alloc_addr, ptr_num, stack_num) do {\
- if (msa->stack_p) {\
- alloc_addr = (char* )xalloca(sizeof(char*) * (ptr_num));\
- stk_alloc = (StackType* )(msa->stack_p);\
- stk_base = stk_alloc;\
- stk = stk_base;\
- stk_end = stk_base + msa->stack_n;\
- }\
- else {\
- alloc_addr = (char* )xalloca(sizeof(char*) * (ptr_num)\
- + sizeof(StackType) * (stack_num));\
- stk_alloc = (StackType* )(alloc_addr + sizeof(char*) * (ptr_num));\
- stk_base = stk_alloc;\
- stk = stk_base;\
- stk_end = stk_base + (stack_num);\
- }\
-} while(0)
-
-#define STACK_SAVE do{\
- if (stk_base != stk_alloc) {\
- msa->stack_p = stk_base;\
- msa->stack_n = stk_end - stk_base;\
- };\
-} while(0)
-
-static int
-stack_double(StackType** arg_stk_base, StackType** arg_stk_end,
- StackType** arg_stk, StackType* stk_alloc, MatchArg* msa)
-{
- int n;
- StackType *x, *stk_base, *stk_end, *stk;
-
- stk_base = *arg_stk_base;
- stk_end = *arg_stk_end;
- stk = *arg_stk;
-
- n = stk_end - stk_base;
- if (stk_base == stk_alloc && IS_NULL(msa->stack_p)) {
- x = (StackType* )xmalloc(sizeof(StackType) * n * 2);
- if (IS_NULL(x)) {
- STACK_SAVE;
- return ONIGERR_MEMORY;
- }
- xmemcpy(x, stk_base, n * sizeof(StackType));
- n *= 2;
- }
- else {
- n *= 2;
- if (n > MATCH_STACK_LIMIT_SIZE) return ONIGERR_MATCH_STACK_LIMIT_OVER;
- x = (StackType* )xrealloc(stk_base, sizeof(StackType) * n);
- if (IS_NULL(x)) {
- STACK_SAVE;
- return ONIGERR_MEMORY;
- }
- }
- *arg_stk = x + (stk - stk_base);
- *arg_stk_base = x;
- *arg_stk_end = x + n;
- return 0;
-}
-
-#define STACK_ENSURE(n) do {\
- if (stk_end - stk < (n)) {\
- int r = stack_double(&stk_base, &stk_end, &stk, stk_alloc, msa);\
- if (r != 0) { STACK_SAVE; return r; } \
- }\
-} while(0)
-
-#define STACK_AT(index) (stk_base + (index))
-#define GET_STACK_INDEX(stk) ((stk) - stk_base)
-
-#define STACK_PUSH(stack_type,pat,s,sprev) do {\
- STACK_ENSURE(1);\
- stk->type = (stack_type);\
- stk->u.state.pcode = (pat);\
- stk->u.state.pstr = (s);\
- stk->u.state.pstr_prev = (sprev);\
- STACK_INC;\
-} while(0)
-
-#define STACK_PUSH_ENSURED(stack_type,pat) do {\
- stk->type = (stack_type);\
- stk->u.state.pcode = (pat);\
- STACK_INC;\
-} while(0)
-
-#define STACK_PUSH_TYPE(stack_type) do {\
- STACK_ENSURE(1);\
- stk->type = (stack_type);\
- STACK_INC;\
-} while(0)
-
-#define STACK_PUSH_ALT(pat,s,sprev) STACK_PUSH(STK_ALT,pat,s,sprev)
-#define STACK_PUSH_POS(s,sprev) STACK_PUSH(STK_POS,NULL_UCHARP,s,sprev)
-#define STACK_PUSH_POS_NOT(pat,s,sprev) STACK_PUSH(STK_POS_NOT,pat,s,sprev)
-#define STACK_PUSH_STOP_BT STACK_PUSH_TYPE(STK_STOP_BT)
-#define STACK_PUSH_LOOK_BEHIND_NOT(pat,s,sprev) \
- STACK_PUSH(STK_LOOK_BEHIND_NOT,pat,s,sprev)
-
-#define STACK_PUSH_REPEAT(id, pat) do {\
- STACK_ENSURE(1);\
- stk->type = STK_REPEAT;\
- stk->u.repeat.num = (id);\
- stk->u.repeat.pcode = (pat);\
- stk->u.repeat.count = 0;\
- STACK_INC;\
-} while(0)
-
-#define STACK_PUSH_REPEAT_INC(sindex) do {\
- STACK_ENSURE(1);\
- stk->type = STK_REPEAT_INC;\
- stk->u.repeat_inc.si = (sindex);\
- STACK_INC;\
-} while(0)
-
-#define STACK_PUSH_MEM_START(mnum, s) do {\
- STACK_ENSURE(1);\
- stk->type = STK_MEM_START;\
- stk->u.mem.num = (mnum);\
- stk->u.mem.pstr = (s);\
- stk->u.mem.start = mem_start_stk[mnum];\
- stk->u.mem.end = mem_end_stk[mnum];\
- mem_start_stk[mnum] = GET_STACK_INDEX(stk);\
- mem_end_stk[mnum] = INVALID_STACK_INDEX;\
- STACK_INC;\
-} while(0)
-
-#define STACK_PUSH_MEM_END(mnum, s) do {\
- STACK_ENSURE(1);\
- stk->type = STK_MEM_END;\
- stk->u.mem.num = (mnum);\
- stk->u.mem.pstr = (s);\
- stk->u.mem.start = mem_start_stk[mnum];\
- stk->u.mem.end = mem_end_stk[mnum];\
- mem_end_stk[mnum] = GET_STACK_INDEX(stk);\
- STACK_INC;\
-} while(0)
-
-#define STACK_PUSH_MEM_END_MARK(mnum) do {\
- STACK_ENSURE(1);\
- stk->type = STK_MEM_END_MARK;\
- stk->u.mem.num = (mnum);\
- STACK_INC;\
-} while(0)
-
-#define STACK_GET_MEM_START(mnum, k) do {\
- int level = 0;\
- k = stk;\
- while (k > stk_base) {\
- k--;\
- if ((k->type == STK_MEM_END_MARK || k->type == STK_MEM_END) \
- && k->u.mem.num == (mnum)) {\
- level++;\
- }\
- else if (k->type == STK_MEM_START && k->u.mem.num == (mnum)) {\
- if (level == 0) break;\
- level--;\
- }\
- }\
-} while (0)
-
-#define STACK_GET_MEM_RANGE(k, mnum, start, end) do {\
- int level = 0;\
- while (k < stk) {\
- if (k->type == STK_MEM_START && k->u.mem.num == (mnum)) {\
- if (level == 0) (start) = k->u.mem.pstr;\
- level++;\
- }\
- else if (k->type == STK_MEM_END && k->u.mem.num == (mnum)) {\
- level--;\
- if (level == 0) {\
- (end) = k->u.mem.pstr;\
- break;\
- }\
- }\
- k++;\
- }\
-} while (0)
-
-#define STACK_PUSH_NULL_CHECK_START(cnum, s) do {\
- STACK_ENSURE(1);\
- stk->type = STK_NULL_CHECK_START;\
- stk->u.null_check.num = (cnum);\
- stk->u.null_check.pstr = (s);\
- STACK_INC;\
-} while(0)
-
-#define STACK_PUSH_NULL_CHECK_END(cnum) do {\
- STACK_ENSURE(1);\
- stk->type = STK_NULL_CHECK_END;\
- stk->u.null_check.num = (cnum);\
- STACK_INC;\
-} while(0)
-
-#define STACK_PUSH_CALL_FRAME(pat) do {\
- STACK_ENSURE(1);\
- stk->type = STK_CALL_FRAME;\
- stk->u.call_frame.ret_addr = (pat);\
- STACK_INC;\
-} while(0)
-
-#define STACK_PUSH_RETURN do {\
- STACK_ENSURE(1);\
- stk->type = STK_RETURN;\
- STACK_INC;\
-} while(0)
-
-
-#ifdef ONIG_DEBUG
-#define STACK_BASE_CHECK(p) \
- if ((p) < stk_base) goto stack_error;
-#else
-#define STACK_BASE_CHECK(p)
-#endif
-
-#define STACK_POP_ONE do {\
- stk--;\
- STACK_BASE_CHECK(stk); \
-} while(0)
-
-#define STACK_POP do {\
- switch (pop_level) {\
- case STACK_POP_LEVEL_FREE:\
- while (1) {\
- stk--;\
- STACK_BASE_CHECK(stk); \
- if ((stk->type & STK_MASK_POP_USED) != 0) break;\
- }\
- break;\
- case STACK_POP_LEVEL_MEM_START:\
- while (1) {\
- stk--;\
- STACK_BASE_CHECK(stk); \
- if ((stk->type & STK_MASK_POP_USED) != 0) break;\
- else if (stk->type == STK_MEM_START) {\
- mem_start_stk[stk->u.mem.num] = stk->u.mem.start;\
- mem_end_stk[stk->u.mem.num] = stk->u.mem.end;\
- }\
- }\
- break;\
- default:\
- while (1) {\
- stk--;\
- STACK_BASE_CHECK(stk); \
- if ((stk->type & STK_MASK_POP_USED) != 0) break;\
- else if (stk->type == STK_MEM_START) {\
- mem_start_stk[stk->u.mem.num] = stk->u.mem.start;\
- mem_end_stk[stk->u.mem.num] = stk->u.mem.end;\
- }\
- else if (stk->type == STK_REPEAT_INC) {\
- STACK_AT(stk->u.repeat_inc.si)->u.repeat.count--;\
- }\
- else if (stk->type == STK_MEM_END) {\
- mem_start_stk[stk->u.mem.num] = stk->u.mem.start;\
- mem_end_stk[stk->u.mem.num] = stk->u.mem.end;\
- }\
- }\
- break;\
- }\
-} while(0)
-
-#define STACK_POP_TIL_POS_NOT do {\
- while (1) {\
- stk--;\
- STACK_BASE_CHECK(stk); \
- if (stk->type == STK_POS_NOT) break;\
- else if (stk->type == STK_MEM_START) {\
- mem_start_stk[stk->u.mem.num] = stk->u.mem.start;\
- mem_end_stk[stk->u.mem.num] = stk->u.mem.end;\
- }\
- else if (stk->type == STK_REPEAT_INC) {\
- STACK_AT(stk->u.repeat_inc.si)->u.repeat.count--;\
- }\
- else if (stk->type == STK_MEM_END) {\
- mem_start_stk[stk->u.mem.num] = stk->u.mem.start;\
- mem_end_stk[stk->u.mem.num] = stk->u.mem.end;\
- }\
- }\
-} while(0)
-
-#define STACK_POP_TIL_LOOK_BEHIND_NOT do {\
- while (1) {\
- stk--;\
- STACK_BASE_CHECK(stk); \
- if (stk->type == STK_LOOK_BEHIND_NOT) break;\
- else if (stk->type == STK_MEM_START) {\
- mem_start_stk[stk->u.mem.num] = stk->u.mem.start;\
- mem_end_stk[stk->u.mem.num] = stk->u.mem.end;\
- }\
- else if (stk->type == STK_REPEAT_INC) {\
- STACK_AT(stk->u.repeat_inc.si)->u.repeat.count--;\
- }\
- else if (stk->type == STK_MEM_END) {\
- mem_start_stk[stk->u.mem.num] = stk->u.mem.start;\
- mem_end_stk[stk->u.mem.num] = stk->u.mem.end;\
- }\
- }\
-} while(0)
-
-#define STACK_POS_END(k) do {\
- k = stk;\
- while (1) {\
- k--;\
- STACK_BASE_CHECK(k); \
- if (IS_TO_VOID_TARGET(k)) {\
- k->type = STK_VOID;\
- }\
- else if (k->type == STK_POS) {\
- k->type = STK_VOID;\
- break;\
- }\
- }\
-} while(0)
-
-#define STACK_STOP_BT_END do {\
- StackType *k = stk;\
- while (1) {\
- k--;\
- STACK_BASE_CHECK(k); \
- if (IS_TO_VOID_TARGET(k)) {\
- k->type = STK_VOID;\
- }\
- else if (k->type == STK_STOP_BT) {\
- k->type = STK_VOID;\
- break;\
- }\
- }\
-} while(0)
-
-#define STACK_NULL_CHECK(isnull,id,s) do {\
- StackType* k = stk;\
- while (1) {\
- k--;\
- STACK_BASE_CHECK(k); \
- if (k->type == STK_NULL_CHECK_START) {\
- if (k->u.null_check.num == (id)) {\
- (isnull) = (k->u.null_check.pstr == (s));\
- break;\
- }\
- }\
- }\
-} while(0)
-
-#define STACK_NULL_CHECK_REC(isnull,id,s) do {\
- int level = 0;\
- StackType* k = stk;\
- while (1) {\
- k--;\
- STACK_BASE_CHECK(k); \
- if (k->type == STK_NULL_CHECK_START) {\
- if (k->u.null_check.num == (id)) {\
- if (level == 0) {\
- (isnull) = (k->u.null_check.pstr == (s));\
- break;\
- }\
- else level--;\
- }\
- }\
- else if (k->type == STK_NULL_CHECK_END) {\
- level++;\
- }\
- }\
-} while(0)
-
-#define STACK_NULL_CHECK_MEMST(isnull,id,s,reg) do {\
- StackType* k = stk;\
- while (1) {\
- k--;\
- STACK_BASE_CHECK(k); \
- if (k->type == STK_NULL_CHECK_START) {\
- if (k->u.null_check.num == (id)) {\
- if (k->u.null_check.pstr != (s)) {\
- (isnull) = 0;\
- break;\
- }\
- else {\
- UChar* endp;\
- (isnull) = 1;\
- while (k < stk) {\
- if (k->type == STK_MEM_START) {\
- if (k->u.mem.end == INVALID_STACK_INDEX) {\
- (isnull) = 0; break;\
- }\
- if (BIT_STATUS_AT(reg->bt_mem_end, k->u.mem.num))\
- endp = STACK_AT(k->u.mem.end)->u.mem.pstr;\
- else\
- endp = (UChar* )k->u.mem.end;\
- if (STACK_AT(k->u.mem.start)->u.mem.pstr != endp) {\
- (isnull) = 0; break;\
- }\
- else if (endp != s) {\
- (isnull) = -1; /* empty, but position changed */ \
- }\
- }\
- k++;\
- }\
- break;\
- }\
- }\
- }\
- }\
-} while(0)
-
-#define STACK_NULL_CHECK_MEMST_REC(isnull,id,s,reg) do {\
- int level = 0;\
- StackType* k = stk;\
- while (1) {\
- k--;\
- STACK_BASE_CHECK(k); \
- if (k->type == STK_NULL_CHECK_START) {\
- if (k->u.null_check.num == (id)) {\
- if (level == 0) {\
- if (k->u.null_check.pstr != (s)) {\
- (isnull) = 0;\
- break;\
- }\
- else {\
- UChar* endp;\
- (isnull) = 1;\
- while (k < stk) {\
- if (k->type == STK_MEM_START) {\
- if (k->u.mem.end == INVALID_STACK_INDEX) {\
- (isnull) = 0; break;\
- }\
- if (BIT_STATUS_AT(reg->bt_mem_end, k->u.mem.num))\
- endp = STACK_AT(k->u.mem.end)->u.mem.pstr;\
- else\
- endp = (UChar* )k->u.mem.end;\
- if (STACK_AT(k->u.mem.start)->u.mem.pstr != endp) {\
- (isnull) = 0; break;\
- }\
- else if (endp != s) {\
- (isnull) = -1; /* empty, but position changed */ \
- }\
- }\
- k++;\
- }\
- break;\
- }\
- }\
- else {\
- level--;\
- }\
- }\
- }\
- else if (k->type == STK_NULL_CHECK_END) {\
- if (k->u.null_check.num == (id)) level++;\
- }\
- }\
-} while(0)
-
-#define STACK_GET_REPEAT(id, k) do {\
- int level = 0;\
- k = stk;\
- while (1) {\
- k--;\
- STACK_BASE_CHECK(k); \
- if (k->type == STK_REPEAT) {\
- if (level == 0) {\
- if (k->u.repeat.num == (id)) {\
- break;\
- }\
- }\
- }\
- else if (k->type == STK_CALL_FRAME) level--;\
- else if (k->type == STK_RETURN) level++;\
- }\
-} while (0)
-
-#define STACK_RETURN(addr) do {\
- int level = 0;\
- StackType* k = stk;\
- while (1) {\
- k--;\
- STACK_BASE_CHECK(k); \
- if (k->type == STK_CALL_FRAME) {\
- if (level == 0) {\
- (addr) = k->u.call_frame.ret_addr;\
- break;\
- }\
- else level--;\
- }\
- else if (k->type == STK_RETURN)\
- level++;\
- }\
-} while(0)
-
-
-#define STRING_CMP(s1,s2,len) do {\
- while (len-- > 0) {\
- if (*s1++ != *s2++) goto fail;\
- }\
-} while(0)
-
-#define STRING_CMP_IC(s1,ps2,len) do {\
- if (string_cmp_ic(encode, s1, ps2, len) == 0) \
- goto fail; \
-} while(0)
-
-static int string_cmp_ic(OnigEncoding enc,
- UChar* s1, UChar** ps2, int mblen)
-{
- UChar buf1[ONIGENC_MBC_TO_LOWER_MAXLEN];
- UChar buf2[ONIGENC_MBC_TO_LOWER_MAXLEN];
- UChar *p1, *p2, *end, *s2;
- int len1, len2;
-
- s2 = *ps2;
- end = s1 + mblen;
- while (s1 < end) {
- len1 = ONIGENC_MBC_TO_LOWER(enc, s1, buf1);
- len2 = ONIGENC_MBC_TO_LOWER(enc, s2, buf2);
- if (len1 != len2) return 0;
- p1 = buf1;
- p2 = buf2;
- while (len1-- > 0) {
- if (*p1 != *p2) return 0;
- p1++;
- p2++;
- }
-
- s1 += enc_len(enc, *s1);
- s2 += enc_len(enc, *s2);
- }
-
- *ps2 = s2;
- return 1;
-}
-
-#define STRING_CMP_VALUE(s1,s2,len,is_fail) do {\
- is_fail = 0;\
- while (len-- > 0) {\
- if (*s1++ != *s2++) {\
- is_fail = 1; break;\
- }\
- }\
-} while(0)
-
-#define STRING_CMP_VALUE_IC(s1,ps2,len,is_fail) do {\
- if (string_cmp_ic(encode, s1, ps2, len) == 0) \
- is_fail = 1; \
- else \
- is_fail = 0; \
-} while(0)
-
-#define ON_STR_BEGIN(s) ((s) == str)
-#define ON_STR_END(s) ((s) == end)
-#define IS_EMPTY_STR (str == end)
-
-#define DATA_ENSURE(n) \
- if (s + (n) > end) goto fail
-
-#define DATA_ENSURE_CHECK(n) (s + (n) <= end)
-
-#ifdef ONIG_DEBUG_STATISTICS
-
-#define USE_TIMEOFDAY
-
-#ifdef USE_TIMEOFDAY
-#ifdef HAVE_SYS_TIME_H
-#include <sys/time.h>
-#endif
-#ifdef HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-static struct timeval ts, te;
-#define GETTIME(t) gettimeofday(&(t), (struct timezone* )0)
-#define TIMEDIFF(te,ts) (((te).tv_usec - (ts).tv_usec) + \
- (((te).tv_sec - (ts).tv_sec)*1000000))
-#else
-#ifdef HAVE_SYS_TIMES_H
-#include <sys/times.h>
-#endif
-static struct tms ts, te;
-#define GETTIME(t) times(&(t))
-#define TIMEDIFF(te,ts) ((te).tms_utime - (ts).tms_utime)
-#endif
-
-static int OpCounter[256];
-static int OpPrevCounter[256];
-static unsigned long OpTime[256];
-static int OpCurr = OP_FINISH;
-static int OpPrevTarget = OP_FAIL;
-static int MaxStackDepth = 0;
-
-#define STAT_OP_IN(opcode) do {\
- if (opcode == OpPrevTarget) OpPrevCounter[OpCurr]++;\
- OpCurr = opcode;\
- OpCounter[opcode]++;\
- GETTIME(ts);\
-} while (0)
-
-#define STAT_OP_OUT do {\
- GETTIME(te);\
- OpTime[OpCurr] += TIMEDIFF(te, ts);\
-} while (0)
-
-#ifdef RUBY_PLATFORM
-/*
- * :nodoc:
- */
-static VALUE onig_stat_print()
-{
- onig_print_statistics(stderr);
- return Qnil;
-}
-#endif
-
-extern void onig_statistics_init()
-{
- int i;
- for (i = 0; i < 256; i++) {
- OpCounter[i] = OpPrevCounter[i] = 0; OpTime[i] = 0;
- }
- MaxStackDepth = 0;
-
-#ifdef RUBY_PLATFORM
- rb_define_global_function("onig_stat_print", onig_stat_print, 0);
-#endif
-}
-
-extern void
-onig_print_statistics(FILE* f)
-{
- int i;
- fprintf(f, " count prev time\n");
- for (i = 0; OnigOpInfo[i].opcode >= 0; i++) {
- fprintf(f, "%8d: %8d: %10ld: %s\n",
- OpCounter[i], OpPrevCounter[i], OpTime[i], OnigOpInfo[i].name);
- }
- fprintf(f, "\nmax stack depth: %d\n", MaxStackDepth);
-}
-
-#define STACK_INC do {\
- stk++;\
- if (stk - stk_base > MaxStackDepth) \
- MaxStackDepth = stk - stk_base;\
-} while (0)
-
-#else
-#define STACK_INC stk++
-
-#define STAT_OP_IN(opcode)
-#define STAT_OP_OUT
-#endif
-
-extern int
-onig_is_in_code_range(UChar* p, OnigCodePoint code)
-{
- OnigCodePoint n, *data;
- OnigCodePoint low, high, x;
-
- GET_CODE_POINT(n, p);
- data = (OnigCodePoint* )p;
- data++;
-
- for (low = 0, high = n; low < high; ) {
- x = (low + high) >> 1;
- if (code > data[x * 2 + 1])
- low = x + 1;
- else
- high = x;
- }
-
- return ((low < n && code >= data[low * 2]) ? 1 : 0);
-}
-
-
-/* matching region of POSIX API */
-typedef int regoff_t;
-
-typedef struct {
- regoff_t rm_so;
- regoff_t rm_eo;
-} posix_regmatch_t;
-
-/* match data(str - end) from position (sstart). */
-/* if sstart == str then set sprev to NULL. */
-static int
-match_at(regex_t* reg, UChar* str, UChar* end, UChar* sstart,
- UChar* sprev, MatchArg* msa)
-{
- static UChar FinishCode[] = { OP_FINISH };
-
- int i, n, num_mem, best_len, pop_level;
- LengthType tlen, tlen2;
- MemNumType mem;
- RelAddrType addr;
- OnigOptionType option = reg->options;
- OnigEncoding encode = reg->enc;
- int ignore_case;
- UChar *s, *q, *sbegin;
- UChar *p = reg->p;
- char *alloca_base;
- StackType *stk_alloc, *stk_base, *stk, *stk_end;
- StackType *stkp; /* used as any purpose. */
- StackIndex *repeat_stk;
- StackIndex *mem_start_stk, *mem_end_stk;
- n = reg->num_repeat + reg->num_mem * 2;
-
- STACK_INIT(alloca_base, n, INIT_MATCH_STACK_SIZE);
- ignore_case = IS_IGNORECASE(option);
- pop_level = reg->stack_pop_level;
- num_mem = reg->num_mem;
- repeat_stk = (StackIndex* )alloca_base;
-
- mem_start_stk = (StackIndex* )(repeat_stk + reg->num_repeat);
- mem_end_stk = mem_start_stk + num_mem;
- mem_start_stk--; /* for index start from 1,
- mem_start_stk[1]..mem_start_stk[num_mem] */
- mem_end_stk--; /* for index start from 1,
- mem_end_stk[1]..mem_end_stk[num_mem] */
- for (i = 1; i <= num_mem; i++) {
- mem_start_stk[i] = mem_end_stk[i] = INVALID_STACK_INDEX;
- }
-
-#ifdef ONIG_DEBUG_MATCH
- fprintf(stderr, "match_at: str: %d, end: %d, start: %d, sprev: %d\n",
- (int )str, (int )end, (int )sstart, (int )sprev);
- fprintf(stderr, "size: %d, start offset: %d\n",
- (int )(end - str), (int )(sstart - str));
-#endif
-
- STACK_PUSH_ENSURED(STK_ALT, FinishCode); /* bottom stack */
- best_len = ONIG_MISMATCH;
- s = sstart;
- while (1) {
-#ifdef ONIG_DEBUG_MATCH
- {
- UChar *q, *bp, buf[50];
- int len;
- fprintf(stderr, "%4d> \"", (int )(s - str));
- bp = buf;
- for (i = 0, q = s; i < 7 && q < end; i++) {
- len = enc_len(encode, *q);
- while (len-- > 0) *bp++ = *q++;
- }
- if (q < end) { xmemcpy(bp, "...\"", 4); bp += 4; }
- else { xmemcpy(bp, "\"", 1); bp += 1; }
- *bp = 0;
- fputs(buf, stderr);
- for (i = 0; i < 20 - (bp - buf); i++) fputc(' ', stderr);
- onig_print_compiled_byte_code(stderr, p, NULL);
- fprintf(stderr, "\n");
- }
-#endif
-
- sbegin = s;
- switch (*p++) {
- case OP_END: STAT_OP_IN(OP_END);
- n = s - sstart;
- if (n > best_len) {
- OnigRegion* region = msa->region;
- best_len = n;
- if (region) {
-#ifdef USE_POSIX_REGION_OPTION
- if (IS_POSIX_REGION(msa->options)) {
- posix_regmatch_t* rmt = (posix_regmatch_t* )region;
-
- rmt[0].rm_so = sstart - str;
- rmt[0].rm_eo = s - str;
- for (i = 1; i <= num_mem; i++) {
- if (mem_end_stk[i] != INVALID_STACK_INDEX) {
- if (BIT_STATUS_AT(reg->bt_mem_start, i))
- rmt[i].rm_so = STACK_AT(mem_start_stk[i])->u.mem.pstr - str;
- else
- rmt[i].rm_so = (UChar* )((void* )(mem_start_stk[i])) - str;
-
- rmt[i].rm_eo = (BIT_STATUS_AT(reg->bt_mem_end, i)
- ? STACK_AT(mem_end_stk[i])->u.mem.pstr
- : (UChar* )((void* )mem_end_stk[i])) - str;
- }
- else {
- rmt[i].rm_so = rmt[i].rm_eo = ONIG_REGION_NOTPOS;
- }
- }
- }
- else {
-#endif /* USE_POSIX_REGION_OPTION */
- region->beg[0] = sstart - str;
- region->end[0] = s - str;
- for (i = 1; i <= num_mem; i++) {
- if (mem_end_stk[i] != INVALID_STACK_INDEX) {
- if (BIT_STATUS_AT(reg->bt_mem_start, i))
- region->beg[i] = STACK_AT(mem_start_stk[i])->u.mem.pstr - str;
- else
- region->beg[i] = (UChar* )((void* )mem_start_stk[i]) - str;
-
- region->end[i] = (BIT_STATUS_AT(reg->bt_mem_end, i)
- ? STACK_AT(mem_end_stk[i])->u.mem.pstr
- : (UChar* )((void* )mem_end_stk[i])) - str;
- }
- else {
- region->beg[i] = region->end[i] = ONIG_REGION_NOTPOS;
- }
- }
-
- if (reg->capture_history != 0) {
- UChar *pstart, *pend;
- for (i = 1; i <= ONIG_MAX_CAPTURE_HISTORY_GROUP; i++) {
- if (BIT_STATUS_AT(reg->capture_history, i) != 0) {
- stkp = stk_base;
- do {
- STACK_GET_MEM_RANGE(stkp, i, pstart, pend);
- if (stkp < stk) {
- int r;
- r = region_list_add_entry(region, i,
- pstart - str, pend - str);
- if (r) {
- STACK_SAVE;
- return r;
- }
- }
- stkp++;
- } while (stkp < stk);
- }
- }
- } /* list of captures */
-#ifdef USE_POSIX_REGION_OPTION
- } /* else IS_POSIX_REGION() */
-#endif
- } /* if (region) */
- } /* n > best_len */
- STAT_OP_OUT;
-
- if (IS_FIND_CONDITION(option)) {
- if (IS_FIND_NOT_EMPTY(option) && s == sstart) {
- best_len = ONIG_MISMATCH;
- goto fail; /* for retry */
- }
- if (IS_FIND_LONGEST(option) && s < end) {
- goto fail; /* for retry */
- }
- }
- else {
- /* default behavior: return first-matching result. */
- goto finish;
- }
- break;
-
- case OP_EXACT1: STAT_OP_IN(OP_EXACT1);
-#if 0
- DATA_ENSURE(1);
- if (*p != *s) goto fail;
- p++; s++;
-#endif
- if (*p != *s++) goto fail;
- DATA_ENSURE(0);
- p++;
- STAT_OP_OUT;
- break;
-
- case OP_EXACT1_IC: STAT_OP_IN(OP_EXACT1_IC);
- {
- int len;
- UChar *q, lowbuf[ONIGENC_MBC_TO_LOWER_MAXLEN];
-
- len = ONIGENC_MBC_TO_LOWER(encode, s, lowbuf);
- DATA_ENSURE(len);
- q = lowbuf;
- s += enc_len(encode, *s);
- while (len-- > 0) {
- if (*p != *q) goto fail;
- p++; q++;
- }
- }
- STAT_OP_OUT;
- break;
-
- case OP_EXACT2: STAT_OP_IN(OP_EXACT2);
- DATA_ENSURE(2);
- if (*p != *s) goto fail;
- p++; s++;
- if (*p != *s) goto fail;
- sprev = s;
- p++; s++;
- STAT_OP_OUT;
- continue;
- break;
-
- case OP_EXACT3: STAT_OP_IN(OP_EXACT3);
- DATA_ENSURE(3);
- if (*p != *s) goto fail;
- p++; s++;
- if (*p != *s) goto fail;
- p++; s++;
- if (*p != *s) goto fail;
- sprev = s;
- p++; s++;
- STAT_OP_OUT;
- continue;
- break;
-
- case OP_EXACT4: STAT_OP_IN(OP_EXACT4);
- DATA_ENSURE(4);
- if (*p != *s) goto fail;
- p++; s++;
- if (*p != *s) goto fail;
- p++; s++;
- if (*p != *s) goto fail;
- p++; s++;
- if (*p != *s) goto fail;
- sprev = s;
- p++; s++;
- STAT_OP_OUT;
- continue;
- break;
-
- case OP_EXACT5: STAT_OP_IN(OP_EXACT5);
- DATA_ENSURE(5);
- if (*p != *s) goto fail;
- p++; s++;
- if (*p != *s) goto fail;
- p++; s++;
- if (*p != *s) goto fail;
- p++; s++;
- if (*p != *s) goto fail;
- p++; s++;
- if (*p != *s) goto fail;
- sprev = s;
- p++; s++;
- STAT_OP_OUT;
- continue;
- break;
-
- case OP_EXACTN: STAT_OP_IN(OP_EXACTN);
- GET_LENGTH_INC(tlen, p);
- DATA_ENSURE(tlen);
- while (tlen-- > 0) {
- if (*p++ != *s++) goto fail;
- }
- sprev = s - 1;
- STAT_OP_OUT;
- continue;
- break;
-
- case OP_EXACTN_IC: STAT_OP_IN(OP_EXACTN_IC);
- {
- int len;
- UChar *q, *endp, lowbuf[ONIGENC_MBC_TO_LOWER_MAXLEN];
-
- GET_LENGTH_INC(tlen, p);
- endp = p + tlen;
-
- while (p < endp) {
- len = ONIGENC_MBC_TO_LOWER(encode, s, lowbuf);
- DATA_ENSURE(len);
- sprev = s;
- s += enc_len(encode, *s);
- q = lowbuf;
- while (len-- > 0) {
- if (*p != *q) goto fail;
- p++; q++;
- }
- }
- }
-
- STAT_OP_OUT;
- continue;
- break;
-
- case OP_EXACTMB2N1: STAT_OP_IN(OP_EXACTMB2N1);
- DATA_ENSURE(2);
- if (*p != *s) goto fail;
- p++; s++;
- if (*p != *s) goto fail;
- p++; s++;
- STAT_OP_OUT;
- break;
-
- case OP_EXACTMB2N2: STAT_OP_IN(OP_EXACTMB2N2);
- DATA_ENSURE(4);
- if (*p != *s) goto fail;
- p++; s++;
- if (*p != *s) goto fail;
- p++; s++;
- sprev = s;
- if (*p != *s) goto fail;
- p++; s++;
- if (*p != *s) goto fail;
- p++; s++;
- STAT_OP_OUT;
- continue;
- break;
-
- case OP_EXACTMB2N3: STAT_OP_IN(OP_EXACTMB2N3);
- DATA_ENSURE(6);
- if (*p != *s) goto fail;
- p++; s++;
- if (*p != *s) goto fail;
- p++; s++;
- if (*p != *s) goto fail;
- p++; s++;
- if (*p != *s) goto fail;
- p++; s++;
- sprev = s;
- if (*p != *s) goto fail;
- p++; s++;
- if (*p != *s) goto fail;
- p++; s++;
- STAT_OP_OUT;
- continue;
- break;
-
- case OP_EXACTMB2N: STAT_OP_IN(OP_EXACTMB2N);
- GET_LENGTH_INC(tlen, p);
- DATA_ENSURE(tlen * 2);
- while (tlen-- > 0) {
- if (*p != *s) goto fail;
- p++; s++;
- if (*p != *s) goto fail;
- p++; s++;
- }
- sprev = s - 2;
- STAT_OP_OUT;
- continue;
- break;
-
- case OP_EXACTMB3N: STAT_OP_IN(OP_EXACTMB3N);
- GET_LENGTH_INC(tlen, p);
- DATA_ENSURE(tlen * 3);
- while (tlen-- > 0) {
- if (*p != *s) goto fail;
- p++; s++;
- if (*p != *s) goto fail;
- p++; s++;
- if (*p != *s) goto fail;
- p++; s++;
- }
- sprev = s - 3;
- STAT_OP_OUT;
- continue;
- break;
-
- case OP_EXACTMBN: STAT_OP_IN(OP_EXACTMBN);
- GET_LENGTH_INC(tlen, p); /* mb-len */
- GET_LENGTH_INC(tlen2, p); /* string len */
- tlen2 *= tlen;
- DATA_ENSURE(tlen2);
- while (tlen2-- > 0) {
- if (*p != *s) goto fail;
- p++; s++;
- }
- sprev = s - tlen;
- STAT_OP_OUT;
- continue;
- break;
-
- case OP_CCLASS: STAT_OP_IN(OP_CCLASS);
- DATA_ENSURE(1);
- if (BITSET_AT(((BitSetRef )p), *s) == 0) goto fail;
- p += SIZE_BITSET;
- s += enc_len(encode, *s); /* OP_CCLASS can match mb-code. \D, \S */
- STAT_OP_OUT;
- break;
-
- case OP_CCLASS_MB: STAT_OP_IN(OP_CCLASS_MB);
- if (! ONIGENC_IS_MBC_HEAD(encode, *s)) goto fail;
-
- cclass_mb:
- GET_LENGTH_INC(tlen, p);
- {
- OnigCodePoint code;
- UChar *ss;
- int mb_len = enc_len(encode, *s);
-
- DATA_ENSURE(mb_len);
- ss = s;
- s += mb_len;
- code = ONIGENC_MBC_TO_CODE(encode, ss, s);
-
-#ifdef PLATFORM_UNALIGNED_WORD_ACCESS
- if (! onig_is_in_code_range(p, code)) goto fail;
-#else
- q = p;
- ALIGNMENT_RIGHT(q);
- if (! onig_is_in_code_range(q, code)) goto fail;
-#endif
- }
- p += tlen;
- STAT_OP_OUT;
- break;
-
- case OP_CCLASS_MIX: STAT_OP_IN(OP_CCLASS_MIX);
- DATA_ENSURE(1);
- if (ONIGENC_IS_MBC_HEAD(encode, *s)) {
- p += SIZE_BITSET;
- goto cclass_mb;
- }
- else {
- if (BITSET_AT(((BitSetRef )p), *s) == 0)
- goto fail;
-
- p += SIZE_BITSET;
- GET_LENGTH_INC(tlen, p);
- p += tlen;
- s++;
- }
- STAT_OP_OUT;
- break;
-
- case OP_CCLASS_NOT: STAT_OP_IN(OP_CCLASS_NOT);
- DATA_ENSURE(1);
- if (BITSET_AT(((BitSetRef )p), *s) != 0) goto fail;
- p += SIZE_BITSET;
- s += enc_len(encode, *s);
- STAT_OP_OUT;
- break;
-
- case OP_CCLASS_MB_NOT: STAT_OP_IN(OP_CCLASS_MB_NOT);
- if (! ONIGENC_IS_MBC_HEAD(encode, *s)) {
- DATA_ENSURE(1);
- s++;
- GET_LENGTH_INC(tlen, p);
- p += tlen;
- goto cc_mb_not_success;
- }
-
- cclass_mb_not:
- GET_LENGTH_INC(tlen, p);
- {
- OnigCodePoint code;
- UChar *ss;
- int mb_len = enc_len(encode, *s);
-
- if (s + mb_len > end) {
- s = end;
- p += tlen;
- goto cc_mb_not_success;
- }
-
- ss = s;
- s += mb_len;
- code = ONIGENC_MBC_TO_CODE(encode, ss, s);
-
-#ifdef PLATFORM_UNALIGNED_WORD_ACCESS
- if (onig_is_in_code_range(p, code)) goto fail;
-#else
- q = p;
- ALIGNMENT_RIGHT(q);
- if (onig_is_in_code_range(q, code)) goto fail;
-#endif
- }
- p += tlen;
-
- cc_mb_not_success:
- STAT_OP_OUT;
- break;
-
- case OP_CCLASS_MIX_NOT: STAT_OP_IN(OP_CCLASS_MIX_NOT);
- DATA_ENSURE(1);
- if (ONIGENC_IS_MBC_HEAD(encode, *s)) {
- p += SIZE_BITSET;
- goto cclass_mb_not;
- }
- else {
- if (BITSET_AT(((BitSetRef )p), *s) != 0)
- goto fail;
-
- p += SIZE_BITSET;
- GET_LENGTH_INC(tlen, p);
- p += tlen;
- s++;
- }
- STAT_OP_OUT;
- break;
-
- case OP_ANYCHAR: STAT_OP_IN(OP_ANYCHAR);
- n = enc_len(encode, *s);
- if (n > 1) {
- DATA_ENSURE(n);
- s += n;
- }
- else {
- DATA_ENSURE(1);
- if (ONIG_IS_NEWLINE(*s)) goto fail;
- s++;
- }
- STAT_OP_OUT;
- break;
-
- case OP_ANYCHAR_ML: STAT_OP_IN(OP_ANYCHAR_ML);
- n = enc_len(encode, *s);
- DATA_ENSURE(n);
- s += n;
- STAT_OP_OUT;
- break;
-
- case OP_ANYCHAR_STAR: STAT_OP_IN(OP_ANYCHAR_STAR);
- while (s < end) {
- STACK_PUSH_ALT(p, s, sprev);
- n = enc_len(encode, *s);
- if (n > 1) {
- DATA_ENSURE(n);
- sprev = s;
- s += n;
- }
- else {
- if (ONIG_IS_NEWLINE(*s)) goto fail;
- sprev = s;
- s++;
- }
- }
- STAT_OP_OUT;
- break;
-
- case OP_ANYCHAR_ML_STAR: STAT_OP_IN(OP_ANYCHAR_ML_STAR);
- while (s < end) {
- STACK_PUSH_ALT(p, s, sprev);
- n = enc_len(encode, *s);
- if (n > 1) {
- DATA_ENSURE(n);
- sprev = s;
- s += n;
- }
- else {
- sprev = s;
- s++;
- }
- }
- STAT_OP_OUT;
- break;
-
- case OP_ANYCHAR_STAR_PEEK_NEXT: STAT_OP_IN(OP_ANYCHAR_STAR_PEEK_NEXT);
- while (s < end) {
- if (*p == *s) {
- STACK_PUSH_ALT(p + 1, s, sprev);
- }
- n = enc_len(encode, *s);
- if (n > 1) {
- DATA_ENSURE(n);
- sprev = s;
- s += n;
- }
- else {
- if (ONIG_IS_NEWLINE(*s)) goto fail;
- sprev = s;
- s++;
- }
- }
- p++;
- STAT_OP_OUT;
- break;
-
- case OP_ANYCHAR_ML_STAR_PEEK_NEXT:STAT_OP_IN(OP_ANYCHAR_ML_STAR_PEEK_NEXT);
- while (s < end) {
- if (*p == *s) {
- STACK_PUSH_ALT(p + 1, s, sprev);
- }
- n = enc_len(encode, *s);
- if (n >1) {
- DATA_ENSURE(n);
- sprev = s;
- s += n;
- }
- else {
- sprev = s;
- s++;
- }
- }
- p++;
- STAT_OP_OUT;
- break;
-
- case OP_WORD: STAT_OP_IN(OP_WORD);
- DATA_ENSURE(1);
- if (! ONIGENC_IS_MBC_WORD(encode, s, end))
- goto fail;
-
- s += enc_len(encode, *s);
- STAT_OP_OUT;
- break;
-
- case OP_NOT_WORD: STAT_OP_IN(OP_NOT_WORD);
- DATA_ENSURE(1);
- if (ONIGENC_IS_MBC_WORD(encode, s, end))
- goto fail;
-
- s += enc_len(encode, *s);
- STAT_OP_OUT;
- break;
-
- case OP_WORD_BOUND: STAT_OP_IN(OP_WORD_BOUND);
- if (ON_STR_BEGIN(s)) {
- DATA_ENSURE(1);
- if (! ONIGENC_IS_MBC_WORD(encode, s, end))
- goto fail;
- }
- else if (ON_STR_END(s)) {
- if (! ONIGENC_IS_MBC_WORD(encode, sprev, end))
- goto fail;
- }
- else {
- if (ONIGENC_IS_MBC_WORD(encode, s, end)
- == ONIGENC_IS_MBC_WORD(encode, sprev, end))
- goto fail;
- }
- STAT_OP_OUT;
- continue;
- break;
-
- case OP_NOT_WORD_BOUND: STAT_OP_IN(OP_NOT_WORD_BOUND);
- if (ON_STR_BEGIN(s)) {
- if (DATA_ENSURE_CHECK(1) && ONIGENC_IS_MBC_WORD(encode, s, end))
- goto fail;
- }
- else if (ON_STR_END(s)) {
- if (ONIGENC_IS_MBC_WORD(encode, sprev, end))
- goto fail;
- }
- else {
- if (ONIGENC_IS_MBC_WORD(encode, s, end)
- != ONIGENC_IS_MBC_WORD(encode, sprev, end))
- goto fail;
- }
- STAT_OP_OUT;
- continue;
- break;
-
-#ifdef USE_WORD_BEGIN_END
- case OP_WORD_BEGIN: STAT_OP_IN(OP_WORD_BEGIN);
- if (DATA_ENSURE_CHECK(1) && ONIGENC_IS_MBC_WORD(encode, s, end)) {
- if (ON_STR_BEGIN(s) || !ONIGENC_IS_MBC_WORD(encode, sprev, end)) {
- STAT_OP_OUT;
- continue;
- }
- }
- goto fail;
- break;
-
- case OP_WORD_END: STAT_OP_IN(OP_WORD_END);
- if (!ON_STR_BEGIN(s) && ONIGENC_IS_MBC_WORD(encode, sprev, end)) {
- if (ON_STR_END(s) || !ONIGENC_IS_MBC_WORD(encode, s, end)) {
- STAT_OP_OUT;
- continue;
- }
- }
- goto fail;
- break;
-#endif
-
- case OP_BEGIN_BUF: STAT_OP_IN(OP_BEGIN_BUF);
- if (! ON_STR_BEGIN(s)) goto fail;
-
- STAT_OP_OUT;
- continue;
- break;
-
- case OP_END_BUF: STAT_OP_IN(OP_END_BUF);
- if (! ON_STR_END(s)) goto fail;
-
- STAT_OP_OUT;
- continue;
- break;
-
- case OP_BEGIN_LINE: STAT_OP_IN(OP_BEGIN_LINE);
- if (ON_STR_BEGIN(s)) {
- if (IS_NOTBOL(msa->options)) goto fail;
- STAT_OP_OUT;
- continue;
- }
- else if (ONIG_IS_NEWLINE(*sprev) && !ON_STR_END(s)) {
- STAT_OP_OUT;
- continue;
- }
- goto fail;
- break;
-
- case OP_END_LINE: STAT_OP_IN(OP_END_LINE);
- if (ON_STR_END(s)) {
-#ifndef USE_NEWLINE_AT_END_OF_STRING_HAS_EMPTY_LINE
- if (IS_EMPTY_STR || !ONIG_IS_NEWLINE(*sprev)) {
-#endif
- if (IS_NOTEOL(msa->options)) goto fail;
- STAT_OP_OUT;
- continue;
-#ifndef USE_NEWLINE_AT_END_OF_STRING_HAS_EMPTY_LINE
- }
-#endif
- }
- else if (ONIG_IS_NEWLINE(*s)) {
- STAT_OP_OUT;
- continue;
- }
- goto fail;
- break;
-
- case OP_SEMI_END_BUF: STAT_OP_IN(OP_SEMI_END_BUF);
- if (ON_STR_END(s)) {
-#ifndef USE_NEWLINE_AT_END_OF_STRING_HAS_EMPTY_LINE
- if (IS_EMPTY_STR || !ONIG_IS_NEWLINE(*sprev)) {
-#endif
- if (IS_NOTEOL(msa->options)) goto fail; /* Is it needed? */
- STAT_OP_OUT;
- continue;
-#ifndef USE_NEWLINE_AT_END_OF_STRING_HAS_EMPTY_LINE
- }
-#endif
- }
- if (ONIG_IS_NEWLINE(*s) && ON_STR_END(s+1)) {
- STAT_OP_OUT;
- continue;
- }
- goto fail;
- break;
-
- case OP_BEGIN_POSITION: STAT_OP_IN(OP_BEGIN_POSITION);
- if (s != msa->start)
- goto fail;
-
- STAT_OP_OUT;
- continue;
- break;
-
- case OP_MEMORY_START_PUSH: STAT_OP_IN(OP_MEMORY_START_PUSH);
- GET_MEMNUM_INC(mem, p);
- STACK_PUSH_MEM_START(mem, s);
- STAT_OP_OUT;
- continue;
- break;
-
- case OP_MEMORY_START: STAT_OP_IN(OP_MEMORY_START);
- GET_MEMNUM_INC(mem, p);
- mem_start_stk[mem] = (StackIndex )((void* )s);
- STAT_OP_OUT;
- continue;
- break;
-
- case OP_MEMORY_END_PUSH: STAT_OP_IN(OP_MEMORY_END_PUSH);
- GET_MEMNUM_INC(mem, p);
- STACK_PUSH_MEM_END(mem, s);
- STAT_OP_OUT;
- continue;
- break;
-
- case OP_MEMORY_END: STAT_OP_IN(OP_MEMORY_END);
- GET_MEMNUM_INC(mem, p);
- mem_end_stk[mem] = (StackIndex )((void* )s);
- STAT_OP_OUT;
- continue;
- break;
-
-#ifdef USE_SUBEXP_CALL
- case OP_MEMORY_END_PUSH_REC: STAT_OP_IN(OP_MEMORY_END_PUSH_REC);
- GET_MEMNUM_INC(mem, p);
- STACK_GET_MEM_START(mem, stkp); /* should be before push mem-end. */
- STACK_PUSH_MEM_END(mem, s);
- mem_start_stk[mem] = GET_STACK_INDEX(stkp);
- STAT_OP_OUT;
- continue;
- break;
-
- case OP_MEMORY_END_REC: STAT_OP_IN(OP_MEMORY_END_REC);
- GET_MEMNUM_INC(mem, p);
- mem_end_stk[mem] = (StackIndex )((void* )s);
- STACK_GET_MEM_START(mem, stkp);
-
- if (BIT_STATUS_AT(reg->bt_mem_start, mem))
- mem_start_stk[mem] = GET_STACK_INDEX(stkp);
- else
- mem_start_stk[mem] = (StackIndex )((void* )stkp->u.mem.pstr);
-
- STACK_PUSH_MEM_END_MARK(mem);
- STAT_OP_OUT;
- continue;
- break;
-#endif
-
- case OP_BACKREF1: STAT_OP_IN(OP_BACKREF1);
- mem = 1;
- goto backref;
- break;
-
- case OP_BACKREF2: STAT_OP_IN(OP_BACKREF2);
- mem = 2;
- goto backref;
- break;
-
- case OP_BACKREF3: STAT_OP_IN(OP_BACKREF3);
- mem = 3;
- goto backref;
- break;
-
- case OP_BACKREFN: STAT_OP_IN(OP_BACKREFN);
- GET_MEMNUM_INC(mem, p);
- backref:
- {
- int len;
- UChar *pstart, *pend;
-
- /* if you want to remove following line,
- you should check in parse and compile time. */
- if (mem > num_mem) goto fail;
- if (mem_end_stk[mem] == INVALID_STACK_INDEX) goto fail;
- if (mem_start_stk[mem] == INVALID_STACK_INDEX) goto fail;
-
- if (BIT_STATUS_AT(reg->bt_mem_start, mem))
- pstart = STACK_AT(mem_start_stk[mem])->u.mem.pstr;
- else
- pstart = (UChar* )((void* )mem_start_stk[mem]);
-
- pend = (BIT_STATUS_AT(reg->bt_mem_end, mem)
- ? STACK_AT(mem_end_stk[mem])->u.mem.pstr
- : (UChar* )((void* )mem_end_stk[mem]));
- n = pend - pstart;
- DATA_ENSURE(n);
- sprev = s;
- STRING_CMP(pstart, s, n);
- while (sprev + (len = enc_len(encode, *sprev)) < s)
- sprev += len;
-
- STAT_OP_OUT;
- continue;
- }
- break;
-
- case OP_BACKREFN_IC: STAT_OP_IN(OP_BACKREFN_IC);
- GET_MEMNUM_INC(mem, p);
- {
- int len;
- UChar *pstart, *pend;
-
- /* if you want to remove following line,
- you should check in parse and compile time. */
- if (mem > num_mem) goto fail;
- if (mem_end_stk[mem] == INVALID_STACK_INDEX) goto fail;
- if (mem_start_stk[mem] == INVALID_STACK_INDEX) goto fail;
-
- if (BIT_STATUS_AT(reg->bt_mem_start, mem))
- pstart = STACK_AT(mem_start_stk[mem])->u.mem.pstr;
- else
- pstart = (UChar* )((void* )mem_start_stk[mem]);
-
- pend = (BIT_STATUS_AT(reg->bt_mem_end, mem)
- ? STACK_AT(mem_end_stk[mem])->u.mem.pstr
- : (UChar* )((void* )mem_end_stk[mem]));
- n = pend - pstart;
- DATA_ENSURE(n);
- sprev = s;
- STRING_CMP_IC(pstart, &s, n);
- while (sprev + (len = enc_len(encode, *sprev)) < s)
- sprev += len;
-
- STAT_OP_OUT;
- continue;
- }
- break;
-
- case OP_BACKREF_MULTI: STAT_OP_IN(OP_BACKREF_MULTI);
- {
- int len, is_fail;
- UChar *pstart, *pend, *swork;
-
- GET_LENGTH_INC(tlen, p);
- for (i = 0; i < tlen; i++) {
- GET_MEMNUM_INC(mem, p);
-
- if (mem_end_stk[mem] == INVALID_STACK_INDEX) continue;
- if (mem_start_stk[mem] == INVALID_STACK_INDEX) continue;
-
- if (BIT_STATUS_AT(reg->bt_mem_start, mem))
- pstart = STACK_AT(mem_start_stk[mem])->u.mem.pstr;
- else
- pstart = (UChar* )((void* )mem_start_stk[mem]);
-
- pend = (BIT_STATUS_AT(reg->bt_mem_end, mem)
- ? STACK_AT(mem_end_stk[mem])->u.mem.pstr
- : (UChar* )((void* )mem_end_stk[mem]));
- n = pend - pstart;
- DATA_ENSURE(n);
- sprev = s;
- swork = s;
- STRING_CMP_VALUE(pstart, swork, n, is_fail);
- if (is_fail) continue;
- s = swork;
- while (sprev + (len = enc_len(encode, *sprev)) < s)
- sprev += len;
-
- p += (SIZE_MEMNUM * (tlen - i - 1));
- break; /* success */
- }
- if (i == tlen) goto fail;
- STAT_OP_OUT;
- continue;
- }
- break;
-
- case OP_BACKREF_MULTI_IC: STAT_OP_IN(OP_BACKREF_MULTI_IC);
- {
- int len, is_fail;
- UChar *pstart, *pend, *swork;
-
- GET_LENGTH_INC(tlen, p);
- for (i = 0; i < tlen; i++) {
- GET_MEMNUM_INC(mem, p);
-
- if (mem_end_stk[mem] == INVALID_STACK_INDEX) continue;
- if (mem_start_stk[mem] == INVALID_STACK_INDEX) continue;
-
- if (BIT_STATUS_AT(reg->bt_mem_start, mem))
- pstart = STACK_AT(mem_start_stk[mem])->u.mem.pstr;
- else
- pstart = (UChar* )((void* )mem_start_stk[mem]);
-
- pend = (BIT_STATUS_AT(reg->bt_mem_end, mem)
- ? STACK_AT(mem_end_stk[mem])->u.mem.pstr
- : (UChar* )((void* )mem_end_stk[mem]));
- n = pend - pstart;
- DATA_ENSURE(n);
- sprev = s;
- swork = s;
- STRING_CMP_VALUE_IC(pstart, &swork, n, is_fail);
- if (is_fail) continue;
- s = swork;
- while (sprev + (len = enc_len(encode, *sprev)) < s)
- sprev += len;
-
- p += (SIZE_MEMNUM * (tlen - i - 1));
- break; /* success */
- }
- if (i == tlen) goto fail;
- STAT_OP_OUT;
- continue;
- }
- break;
-
- case OP_SET_OPTION_PUSH: STAT_OP_IN(OP_SET_OPTION_PUSH);
- GET_OPTION_INC(option, p);
- ignore_case = IS_IGNORECASE(option);
- STACK_PUSH_ALT(p, s, sprev);
- p += SIZE_OP_SET_OPTION + SIZE_OP_FAIL;
- STAT_OP_OUT;
- continue;
- break;
-
- case OP_SET_OPTION: STAT_OP_IN(OP_SET_OPTION);
- GET_OPTION_INC(option, p);
- ignore_case = IS_IGNORECASE(option);
- STAT_OP_OUT;
- continue;
- break;
-
- case OP_NULL_CHECK_START: STAT_OP_IN(OP_NULL_CHECK_START);
- GET_MEMNUM_INC(mem, p); /* mem: null check id */
- STACK_PUSH_NULL_CHECK_START(mem, s);
- STAT_OP_OUT;
- continue;
- break;
-
- case OP_NULL_CHECK_END: STAT_OP_IN(OP_NULL_CHECK_END);
- {
- int isnull;
-
- GET_MEMNUM_INC(mem, p); /* mem: null check id */
- STACK_NULL_CHECK(isnull, mem, s);
- if (isnull) {
-#ifdef ONIG_DEBUG_MATCH
- fprintf(stderr, "NULL_CHECK_END: skip id:%d, s:%d\n",
- (int )mem, (int )s);
-#endif
- null_check_found:
- /* empty loop founded, skip next instruction */
- switch (*p++) {
- case OP_JUMP:
- case OP_PUSH:
- p += SIZE_RELADDR;
- break;
- case OP_REPEAT_INC:
- case OP_REPEAT_INC_NG:
- p += SIZE_MEMNUM;
- break;
- default:
- goto unexpected_bytecode_error;
- break;
- }
- }
- }
- STAT_OP_OUT;
- continue;
- break;
-
-#ifdef USE_INFINITE_REPEAT_MONOMANIAC_MEM_STATUS_CHECK
- case OP_NULL_CHECK_END_MEMST: STAT_OP_IN(OP_NULL_CHECK_END_MEMST);
- {
- int isnull;
-
- GET_MEMNUM_INC(mem, p); /* mem: null check id */
- STACK_NULL_CHECK_MEMST(isnull, mem, s, reg);
- if (isnull) {
-#ifdef ONIG_DEBUG_MATCH
- fprintf(stderr, "NULL_CHECK_END_MEMST: skip id:%d, s:%d\n",
- (int )mem, (int )s);
-#endif
- if (isnull == -1) goto fail;
- goto null_check_found;
- }
- }
- STAT_OP_OUT;
- continue;
- break;
-#endif
-
-#ifdef USE_SUBEXP_CALL
- case OP_NULL_CHECK_END_MEMST_PUSH:
- STAT_OP_IN(OP_NULL_CHECK_END_MEMST_PUSH);
- {
- int isnull;
-
- GET_MEMNUM_INC(mem, p); /* mem: null check id */
-#ifdef USE_INFINITE_REPEAT_MONOMANIAC_MEM_STATUS_CHECK
- STACK_NULL_CHECK_MEMST_REC(isnull, mem, s, reg);
-#else
- STACK_NULL_CHECK_REC(isnull, mem, s);
-#endif
- if (isnull) {
-#ifdef ONIG_DEBUG_MATCH
- fprintf(stderr, "NULL_CHECK_END_MEMST_PUSH: skip id:%d, s:%d\n",
- (int )mem, (int )s);
-#endif
- if (isnull == -1) goto fail;
- goto null_check_found;
- }
- else {
- STACK_PUSH_NULL_CHECK_END(mem);
- }
- }
- STAT_OP_OUT;
- continue;
- break;
-#endif
-
- case OP_JUMP: STAT_OP_IN(OP_JUMP);
- GET_RELADDR_INC(addr, p);
- p += addr;
- STAT_OP_OUT;
- continue;
- break;
-
- case OP_PUSH: STAT_OP_IN(OP_PUSH);
- GET_RELADDR_INC(addr, p);
- STACK_PUSH_ALT(p + addr, s, sprev);
- STAT_OP_OUT;
- continue;
- break;
-
- case OP_POP: STAT_OP_IN(OP_POP);
- STACK_POP_ONE;
- STAT_OP_OUT;
- continue;
- break;
-
- case OP_PUSH_OR_JUMP_EXACT1: STAT_OP_IN(OP_PUSH_OR_JUMP_EXACT1);
- GET_RELADDR_INC(addr, p);
- if (*p == *s && DATA_ENSURE_CHECK(1)) {
- p++;
- STACK_PUSH_ALT(p + addr, s, sprev);
- STAT_OP_OUT;
- continue;
- }
- p += (addr + 1);
- STAT_OP_OUT;
- continue;
- break;
-
- case OP_PUSH_IF_PEEK_NEXT: STAT_OP_IN(OP_PUSH_IF_PEEK_NEXT);
- GET_RELADDR_INC(addr, p);
- if (*p == *s) {
- p++;
- STACK_PUSH_ALT(p + addr, s, sprev);
- STAT_OP_OUT;
- continue;
- }
- p++;
- STAT_OP_OUT;
- continue;
- break;
-
- case OP_REPEAT: STAT_OP_IN(OP_REPEAT);
- {
- GET_MEMNUM_INC(mem, p); /* mem: OP_REPEAT ID */
- GET_RELADDR_INC(addr, p);
-
- STACK_ENSURE(1);
- repeat_stk[mem] = GET_STACK_INDEX(stk);
- STACK_PUSH_REPEAT(mem, p);
-
- if (reg->repeat_range[mem].lower == 0) {
- STACK_PUSH_ALT(p + addr, s, sprev);
- }
- }
- STAT_OP_OUT;
- continue;
- break;
-
- case OP_REPEAT_NG: STAT_OP_IN(OP_REPEAT_NG);
- {
- GET_MEMNUM_INC(mem, p); /* mem: OP_REPEAT ID */
- GET_RELADDR_INC(addr, p);
-
- STACK_ENSURE(1);
- repeat_stk[mem] = GET_STACK_INDEX(stk);
- STACK_PUSH_REPEAT(mem, p);
-
- if (reg->repeat_range[mem].lower == 0) {
- STACK_PUSH_ALT(p, s, sprev);
- p += addr;
- }
- }
- STAT_OP_OUT;
- continue;
- break;
-
- case OP_REPEAT_INC: STAT_OP_IN(OP_REPEAT_INC);
- {
- StackIndex si;
-
- GET_MEMNUM_INC(mem, p); /* mem: OP_REPEAT ID */
-#ifdef USE_SUBEXP_CALL
- if (reg->num_call > 0) {
- STACK_GET_REPEAT(mem, stkp);
- si = GET_STACK_INDEX(stkp);
- }
- else {
- si = repeat_stk[mem];
- stkp = STACK_AT(si);
- }
-#else
- si = repeat_stk[mem];
- stkp = STACK_AT(si);
-#endif
- stkp->u.repeat.count++;
- if (stkp->u.repeat.count == reg->repeat_range[mem].upper) {
- /* end of repeat. Nothing to do. */
- }
- else if (stkp->u.repeat.count >= reg->repeat_range[mem].lower) {
- STACK_PUSH_ALT(p, s, sprev);
- p = stkp->u.repeat.pcode;
- }
- else {
- p = stkp->u.repeat.pcode;
- }
- STACK_PUSH_REPEAT_INC(si);
- }
- STAT_OP_OUT;
- continue;
- break;
-
- case OP_REPEAT_INC_NG: STAT_OP_IN(OP_REPEAT_INC_NG);
- {
- StackIndex si;
-
- GET_MEMNUM_INC(mem, p); /* mem: OP_REPEAT ID */
-#ifdef USE_SUBEXP_CALL
- if (reg->num_call > 0) {
- STACK_GET_REPEAT(mem, stkp);
- si = GET_STACK_INDEX(stkp);
- }
- else {
- si = repeat_stk[mem];
- stkp = STACK_AT(si);
- }
-#else
- si = repeat_stk[mem];
- stkp = STACK_AT(si);
-#endif
- stkp->u.repeat.count++;
- if (stkp->u.repeat.count < reg->repeat_range[mem].upper) {
- if (stkp->u.repeat.count >= reg->repeat_range[mem].lower) {
- UChar* pcode = stkp->u.repeat.pcode;
-
- STACK_PUSH_REPEAT_INC(si);
- STACK_PUSH_ALT(pcode, s, sprev);
- }
- else {
- p = stkp->u.repeat.pcode;
- STACK_PUSH_REPEAT_INC(si);
- }
- }
- else if (stkp->u.repeat.count == reg->repeat_range[mem].upper) {
- STACK_PUSH_REPEAT_INC(si);
- }
- }
- STAT_OP_OUT;
- continue;
- break;
-
- case OP_PUSH_POS: STAT_OP_IN(OP_PUSH_POS);
- STACK_PUSH_POS(s, sprev);
- STAT_OP_OUT;
- continue;
- break;
-
- case OP_POP_POS: STAT_OP_IN(OP_POP_POS);
- {
- STACK_POS_END(stkp);
- s = stkp->u.state.pstr;
- sprev = stkp->u.state.pstr_prev;
- }
- STAT_OP_OUT;
- continue;
- break;
-
- case OP_PUSH_POS_NOT: STAT_OP_IN(OP_PUSH_POS_NOT);
- GET_RELADDR_INC(addr, p);
- STACK_PUSH_POS_NOT(p + addr, s, sprev);
- STAT_OP_OUT;
- continue;
- break;
-
- case OP_FAIL_POS: STAT_OP_IN(OP_FAIL_POS);
- STACK_POP_TIL_POS_NOT;
- goto fail;
- break;
-
- case OP_PUSH_STOP_BT: STAT_OP_IN(OP_PUSH_STOP_BT);
- STACK_PUSH_STOP_BT;
- STAT_OP_OUT;
- continue;
- break;
-
- case OP_POP_STOP_BT: STAT_OP_IN(OP_POP_STOP_BT);
- STACK_STOP_BT_END;
- STAT_OP_OUT;
- continue;
- break;
-
- case OP_LOOK_BEHIND: STAT_OP_IN(OP_LOOK_BEHIND);
- GET_LENGTH_INC(tlen, p);
- s = ONIGENC_STEP_BACK(encode, str, s, (int )tlen);
- if (IS_NULL(s)) goto fail;
- sprev = onigenc_get_prev_char_head(encode, str, s);
- STAT_OP_OUT;
- continue;
- break;
-
- case OP_PUSH_LOOK_BEHIND_NOT: STAT_OP_IN(OP_PUSH_LOOK_BEHIND_NOT);
- GET_RELADDR_INC(addr, p);
- GET_LENGTH_INC(tlen, p);
- q = ONIGENC_STEP_BACK(encode, str, s, (int )tlen);
- if (IS_NULL(q)) {
- /* too short case -> success. ex. /(?<!XXX)a/.match("a")
- If you want to change to fail, replace following line. */
- p += addr;
- /* goto fail; */
- }
- else {
- STACK_PUSH_LOOK_BEHIND_NOT(p + addr, s, sprev);
- s = q;
- sprev = onigenc_get_prev_char_head(encode, str, s);
- }
- STAT_OP_OUT;
- continue;
- break;
-
- case OP_FAIL_LOOK_BEHIND_NOT: STAT_OP_IN(OP_FAIL_LOOK_BEHIND_NOT);
- STACK_POP_TIL_LOOK_BEHIND_NOT;
- goto fail;
- break;
-
-#ifdef USE_SUBEXP_CALL
- case OP_CALL: STAT_OP_IN(OP_CALL);
- GET_ABSADDR_INC(addr, p);
- STACK_PUSH_CALL_FRAME(p);
- p = reg->p + addr;
- STAT_OP_OUT;
- continue;
- break;
-
- case OP_RETURN: STAT_OP_IN(OP_RETURN);
- STACK_RETURN(p);
- STACK_PUSH_RETURN;
- STAT_OP_OUT;
- continue;
- break;
-#endif
-
- case OP_FINISH:
- goto finish;
- break;
-
- fail:
- STAT_OP_OUT;
- /* fall */
- case OP_FAIL: STAT_OP_IN(OP_FAIL);
- STACK_POP;
- p = stk->u.state.pcode;
- s = stk->u.state.pstr;
- sprev = stk->u.state.pstr_prev;
- STAT_OP_OUT;
- continue;
- break;
-
- default:
- goto bytecode_error;
-
- } /* end of switch */
- sprev = sbegin;
- } /* end of while(1) */
-
- finish:
- STACK_SAVE;
- return best_len;
-
-#ifdef ONIG_DEBUG
- stack_error:
- STACK_SAVE;
- return ONIGERR_STACK_BUG;
-#endif
-
- bytecode_error:
- STACK_SAVE;
- return ONIGERR_UNDEFINED_BYTECODE;
-
- unexpected_bytecode_error:
- STACK_SAVE;
- return ONIGERR_UNEXPECTED_BYTECODE;
-}
-
-
-static UChar*
-slow_search(OnigEncoding enc, UChar* target, UChar* target_end,
- UChar* text, UChar* text_end, UChar* text_range)
-{
- UChar *t, *p, *s, *end;
-
- end = text_end - (target_end - target) + 1;
- if (end > text_range)
- end = text_range;
-
- s = text;
-
- while (s < end) {
- if (*s == *target) {
- p = s + 1;
- t = target + 1;
- while (t < target_end) {
- if (*t != *p++)
- break;
- t++;
- }
- if (t == target_end)
- return s;
- }
- s += enc_len(enc, *s);
- }
-
- return (UChar* )NULL;
-}
-
-#if 0
-static int
-str_trans_match_after_head_byte(OnigEncoding enc,
- int len, UChar* t, UChar* tend, UChar* p)
-{
- while (--len > 0) {
- if (*t != *p) break;
- t++; p++;
- }
-
- if (len == 0) {
- int lowlen;
- UChar *q, lowbuf[ONIGENC_MBC_TO_LOWER_MAXLEN];
-
- while (t < tend) {
- len = enc_len(enc, *p);
- lowlen = ONIGENC_MBC_TO_LOWER(enc, p, lowbuf);
- q = lowbuf;
- while (lowlen > 0) {
- if (*t++ != *q++) break;
- lowlen--;
- }
- if (lowlen > 0) break;
- p += len;
- }
- if (t == tend)
- return 1;
- }
-
- return 0;
-}
-#endif
-
-static int
-str_lower_case_match(OnigEncoding enc, UChar* t, UChar* tend, UChar* p)
-{
- int len, lowlen;
- UChar *q, lowbuf[ONIGENC_MBC_TO_LOWER_MAXLEN];
-
- while (t < tend) {
- len = enc_len(enc, *p);
- lowlen = ONIGENC_MBC_TO_LOWER(enc, p, lowbuf);
- q = lowbuf;
- while (lowlen > 0) {
- if (*t++ != *q++) return 0;
- lowlen--;
- }
- p += len;
- }
-
- return 1;
-}
-
-static UChar*
-slow_search_ic(OnigEncoding enc,
- UChar* target, UChar* target_end,
- UChar* text, UChar* text_end, UChar* text_range)
-{
- int len, lowlen;
- UChar *t, *p, *s, *end;
- UChar lowbuf[ONIGENC_MBC_TO_LOWER_MAXLEN];
-
- end = text_end - (target_end - target) + 1;
- if (end > text_range)
- end = text_range;
-
- s = text;
-
- while (s < end) {
- len = enc_len(enc, *s);
- lowlen = ONIGENC_MBC_TO_LOWER(enc, s, lowbuf);
- if (*target == *lowbuf) {
- p = lowbuf + 1;
- t = target + 1;
- while (--lowlen > 0) {
- if (*p != *t) break;
- p++; *t++;
- }
- if (lowlen == 0) {
- if (str_lower_case_match(enc, t, target_end, s + len))
- return s;
- }
- }
-
- s += len;
- }
-
- return (UChar* )NULL;
-}
-
-static UChar*
-slow_search_backward(OnigEncoding enc, UChar* target, UChar* target_end,
- UChar* text, UChar* adjust_text, UChar* text_end, UChar* text_start)
-{
- UChar *t, *p, *s;
-
- s = text_end - (target_end - target);
- if (s > text_start)
- s = text_start;
- else
- s = ONIGENC_LEFT_ADJUST_CHAR_HEAD(enc, adjust_text, s);
-
- while (s >= text) {
- if (*s == *target) {
- p = s + 1;
- t = target + 1;
- while (t < target_end) {
- if (*t != *p++)
- break;
- t++;
- }
- if (t == target_end)
- return s;
- }
- s = onigenc_get_prev_char_head(enc, adjust_text, s);
- }
-
- return (UChar* )NULL;
-}
-
-static UChar*
-slow_search_backward_ic(OnigEncoding enc,
- UChar* target,UChar* target_end,
- UChar* text, UChar* adjust_text,
- UChar* text_end, UChar* text_start)
-{
- int len, lowlen;
- UChar *t, *p, *s;
- UChar lowbuf[ONIGENC_MBC_TO_LOWER_MAXLEN];
-
- s = text_end - (target_end - target);
- if (s > text_start)
- s = text_start;
- else
- s = ONIGENC_LEFT_ADJUST_CHAR_HEAD(enc, adjust_text, s);
-
- while (s >= text) {
- len = enc_len(enc, *s);
- lowlen = ONIGENC_MBC_TO_LOWER(enc, s, lowbuf);
- if (*target == *lowbuf) {
- p = lowbuf + 1;
- t = target + 1;
- while (--lowlen > 0) {
- if (*p != *t) break;
- p++; *t++;
- }
- if (lowlen == 0) {
- if (str_lower_case_match(enc, t, target_end, s + len))
- return s;
- }
- }
-
- s = onigenc_get_prev_char_head(enc, adjust_text, s);
- }
-
- return (UChar* )NULL;
-}
-
-static UChar*
-bm_search_notrev(regex_t* reg, UChar* target, UChar* target_end,
- UChar* text, UChar* text_end, UChar* text_range)
-{
- UChar *s, *t, *p, *end;
- UChar *tail;
- int skip;
-
- end = text_range + (target_end - target) - 1;
- if (end > text_end)
- end = text_end;
-
- tail = target_end - 1;
- s = text;
- while ((s - text) < target_end - target) {
- s += enc_len(reg->enc, *s);
- }
- s--; /* set to text check tail position. */
-
- if (IS_NULL(reg->int_map)) {
- while (s < end) {
- p = s;
- t = tail;
- while (t >= target && *p == *t) {
- p--; t--;
- }
- if (t < target) return p + 1;
-
- skip = reg->map[*s];
- p++;
- t = p;
- while ((p - t) < skip) {
- p += enc_len(reg->enc, *p);
- }
- s += (p - t);
- }
- }
- else {
- while (s < end) {
- p = s;
- t = tail;
- while (t >= target && *p == *t) {
- p--; t--;
- }
- if (t < target) return p + 1;
-
- skip = reg->int_map[*s];
- p++;
- t = p;
- while ((p - t) < skip) {
- p += enc_len(reg->enc, *p);
- }
- s += (p - t);
- }
- }
- return (UChar* )NULL;
-}
-
-static UChar*
-bm_search(regex_t* reg, UChar* target, UChar* target_end,
- UChar* text, UChar* text_end, UChar* text_range)
-{
- UChar *s, *t, *p, *end;
- UChar *tail;
-
- end = text_range + (target_end - target) - 1;
- if (end > text_end)
- end = text_end;
-
- tail = target_end - 1;
- s = text + (target_end - target) - 1;
- if (IS_NULL(reg->int_map)) {
- while (s < end) {
- p = s;
- t = tail;
- while (t >= target && *p == *t) {
- p--; t--;
- }
- if (t < target) return p + 1;
- s += reg->map[*s];
- }
- }
- else { /* see int_map[] */
- while (s < end) {
- p = s;
- t = tail;
- while (t >= target && *p == *t) {
- p--; t--;
- }
- if (t < target) return p + 1;
- s += reg->int_map[*s];
- }
- }
- return (UChar* )NULL;
-}
-
-static int
-set_bm_backward_skip(UChar* s, UChar* end, OnigEncoding enc,
- int ignore_case, int** skip)
-{
- int i, len;
- UChar lowbuf[ONIGENC_MBC_TO_LOWER_MAXLEN];
-
- if (IS_NULL(*skip)) {
- *skip = (int* )xmalloc(sizeof(int) * ONIG_CHAR_TABLE_SIZE);
- if (IS_NULL(*skip)) return ONIGERR_MEMORY;
- }
-
- len = end - s;
- for (i = 0; i < ONIG_CHAR_TABLE_SIZE; i++)
- (*skip)[i] = len;
-
- if (ignore_case) {
- for (i = len - 1; i > 0; i--) {
- ONIGENC_MBC_TO_LOWER(enc, &(s[i]), lowbuf);
- (*skip)[*lowbuf] = i;
- }
- }
- else {
- for (i = len - 1; i > 0; i--)
- (*skip)[s[i]] = i;
- }
- return 0;
-}
-
-static UChar*
-bm_search_backward(regex_t* reg, UChar* target, UChar* target_end, UChar* text,
- UChar* adjust_text, UChar* text_end, UChar* text_start)
-{
- UChar *s, *t, *p;
-
- s = text_end - (target_end - target);
- if (text_start < s)
- s = text_start;
- else
- s = ONIGENC_LEFT_ADJUST_CHAR_HEAD(reg->enc, adjust_text, s);
-
- while (s >= text) {
- p = s;
- t = target;
- while (t < target_end && *p == *t) {
- p++; t++;
- }
- if (t == target_end)
- return s;
-
- s -= reg->int_map_backward[*s];
- s = ONIGENC_LEFT_ADJUST_CHAR_HEAD(reg->enc, adjust_text, s);
- }
-
- return (UChar* )NULL;
-}
-
-static UChar*
-map_search(OnigEncoding enc, UChar map[], UChar* text, UChar* text_range)
-{
- UChar *s = text;
-
- while (s < text_range) {
- if (map[*s]) return s;
-
- s += enc_len(enc, *s);
- }
- return (UChar* )NULL;
-}
-
-static UChar*
-map_search_backward(OnigEncoding enc, UChar map[],
- UChar* text, UChar* adjust_text, UChar* text_start)
-{
- UChar *s = text_start;
-
- while (s >= text) {
- if (map[*s]) return s;
-
- s = onigenc_get_prev_char_head(enc, adjust_text, s);
- }
- return (UChar* )NULL;
-}
-
-extern int
-onig_match(regex_t* reg, UChar* str, UChar* end, UChar* at, OnigRegion* region,
- OnigOptionType option)
-{
- int r;
- UChar *prev;
- MatchArg msa;
-
- MATCH_ARG_INIT(msa, option, region, at);
-
- if (region
-#ifdef USE_POSIX_REGION_OPTION
- && !IS_POSIX_REGION(option)
-#endif
- ) {
- r = onig_region_resize(region, reg->num_mem + 1);
- }
- else
- r = 0;
-
- if (r == 0) {
- prev = onigenc_get_prev_char_head(reg->enc, str, at);
- r = match_at(reg, str, end, at, prev, &msa);
- }
- MATCH_ARG_FREE(msa);
- return r;
-}
-
-static int
-forward_search_range(regex_t* reg, UChar* str, UChar* end, UChar* s,
- UChar* range, UChar** low, UChar** high, UChar** low_prev)
-{
- UChar *p, *pprev = (UChar* )NULL;
-
-#ifdef ONIG_DEBUG_SEARCH
- fprintf(stderr, "forward_search_range: str: %d, end: %d, s: %d, range: %d\n",
- (int )str, (int )end, (int )s, (int )range);
-#endif
-
- p = s;
- if (reg->dmin > 0) {
- if (ONIGENC_IS_SINGLEBYTE(reg->enc)) {
- p += reg->dmin;
- }
- else {
- UChar *q = p + reg->dmin;
- while (p < q) p += enc_len(reg->enc, *p);
- }
- }
-
- retry:
- switch (reg->optimize) {
- case ONIG_OPTIMIZE_EXACT:
- p = slow_search(reg->enc, reg->exact, reg->exact_end, p, end, range);
- break;
- case ONIG_OPTIMIZE_EXACT_IC:
- p = slow_search_ic(reg->enc, reg->exact, reg->exact_end, p, end, range);
- break;
-
- case ONIG_OPTIMIZE_EXACT_BM:
- p = bm_search(reg, reg->exact, reg->exact_end, p, end, range);
- break;
-
- case ONIG_OPTIMIZE_EXACT_BM_NOT_REV:
- p = bm_search_notrev(reg, reg->exact, reg->exact_end, p, end, range);
- break;
-
- case ONIG_OPTIMIZE_MAP:
- p = map_search(reg->enc, reg->map, p, range);
- break;
- }
-
- if (p && p < range) {
- if (p - reg->dmin < s) {
- retry_gate:
- pprev = p;
- p += enc_len(reg->enc, *p);
- goto retry;
- }
-
- if (reg->sub_anchor) {
- UChar* prev;
-
- switch (reg->sub_anchor) {
- case ANCHOR_BEGIN_LINE:
- if (!ON_STR_BEGIN(p)) {
- prev = onigenc_get_prev_char_head(reg->enc,
- (pprev ? pprev : str), p);
- if (!ONIG_IS_NEWLINE(*prev))
- goto retry_gate;
- }
- break;
-
- case ANCHOR_END_LINE:
- if (ON_STR_END(p)) {
- prev = onigenc_get_prev_char_head(reg->enc,
- (pprev ? pprev : str), p);
- if (prev && ONIG_IS_NEWLINE(*prev))
- goto retry_gate;
- }
- else if (!ONIG_IS_NEWLINE(*p))
- goto retry_gate;
- break;
- }
- }
-
- if (reg->dmax == 0) {
- *low = p;
- if (low_prev) {
- if (*low > s)
- *low_prev = onigenc_get_prev_char_head(reg->enc, s, p);
- else
- *low_prev = onigenc_get_prev_char_head(reg->enc,
- (pprev ? pprev : str), p);
- }
- }
- else {
- if (reg->dmax != ONIG_INFINITE_DISTANCE) {
- *low = p - reg->dmax;
- if (*low > s) {
- *low = onigenc_get_right_adjust_char_head_with_prev(reg->enc, s,
- *low, low_prev);
- if (low_prev && IS_NULL(*low_prev))
- *low_prev = onigenc_get_prev_char_head(reg->enc,
- (pprev ? pprev : s), *low);
- }
- else {
- if (low_prev)
- *low_prev = onigenc_get_prev_char_head(reg->enc,
- (pprev ? pprev : str), *low);
- }
- }
- }
- /* no needs to adjust *high, *high is used as range check only */
- *high = p - reg->dmin;
-
-#ifdef ONIG_DEBUG_SEARCH
- fprintf(stderr,
- "forward_search_range success: low: %d, high: %d, dmin: %d, dmax: %d\n",
- (int )(*low - str), (int )(*high - str), reg->dmin, reg->dmax);
-#endif
- return 1; /* success */
- }
-
- return 0; /* fail */
-}
-
-static int set_bm_backward_skip P_((UChar* s, UChar* end, OnigEncoding enc,
- int ignore_case, int** skip));
-
-#define BM_BACKWARD_SEARCH_LENGTH_THRESHOLD 100
-
-static int
-backward_search_range(regex_t* reg, UChar* str, UChar* end, UChar* s,
- UChar* range, UChar* adjrange, UChar** low, UChar** high)
-{
- int r;
- UChar *p;
-
- range += reg->dmin;
- p = s;
-
- retry:
- switch (reg->optimize) {
- case ONIG_OPTIMIZE_EXACT:
- exact_method:
- p = slow_search_backward(reg->enc, reg->exact, reg->exact_end,
- range, adjrange, end, p);
- break;
-
- case ONIG_OPTIMIZE_EXACT_IC:
- p = slow_search_backward_ic(reg->enc, reg->exact,
- reg->exact_end, range, adjrange, end, p);
- break;
-
- case ONIG_OPTIMIZE_EXACT_BM:
- case ONIG_OPTIMIZE_EXACT_BM_NOT_REV:
- if (IS_NULL(reg->int_map_backward)) {
- if (s - range < BM_BACKWARD_SEARCH_LENGTH_THRESHOLD)
- goto exact_method;
-
- r = set_bm_backward_skip(reg->exact, reg->exact_end, reg->enc, 0,
- &(reg->int_map_backward));
- if (r) return r;
- }
- p = bm_search_backward(reg, reg->exact, reg->exact_end, range, adjrange,
- end, p);
- break;
-
- case ONIG_OPTIMIZE_MAP:
- p = map_search_backward(reg->enc, reg->map, range, adjrange, p);
- break;
- }
-
- if (p) {
- if (reg->sub_anchor) {
- UChar* prev;
-
- switch (reg->sub_anchor) {
- case ANCHOR_BEGIN_LINE:
- if (!ON_STR_BEGIN(p)) {
- prev = onigenc_get_prev_char_head(reg->enc, adjrange, p);
- if (!ONIG_IS_NEWLINE(*prev)) {
- p = prev;
- goto retry;
- }
- }
- break;
-
- case ANCHOR_END_LINE:
- if (ON_STR_END(p)) {
- prev = onigenc_get_prev_char_head(reg->enc, adjrange, p);
- if (IS_NULL(prev)) goto fail;
- if (ONIG_IS_NEWLINE(*prev)) {
- p = prev;
- goto retry;
- }
- }
- else if (!ONIG_IS_NEWLINE(*p)) {
- p = onigenc_get_prev_char_head(reg->enc, adjrange, p);
- if (IS_NULL(p)) goto fail;
- goto retry;
- }
- break;
- }
- }
-
- /* no needs to adjust *high, *high is used as range check only */
- if (reg->dmax != ONIG_INFINITE_DISTANCE) {
- *low = p - reg->dmax;
- *high = p - reg->dmin;
- *high = onigenc_get_right_adjust_char_head(reg->enc, adjrange, *high);
- }
-
-#ifdef ONIG_DEBUG_SEARCH
- fprintf(stderr, "backward_search_range: low: %d, high: %d\n",
- (int )(*low - str), (int )(*high - str));
-#endif
- return 1; /* success */
- }
-
- fail:
-#ifdef ONIG_DEBUG_SEARCH
- fprintf(stderr, "backward_search_range: fail.\n");
-#endif
- return 0; /* fail */
-}
-
-
-extern int
-onig_search(regex_t* reg, UChar* str, UChar* end,
- UChar* start, UChar* range, OnigRegion* region, OnigOptionType option)
-{
- int r;
- UChar *s, *prev;
- MatchArg msa;
-
- if (ONIG_STATE(reg) == ONIG_STATE_NORMAL) {
- reg->state++; /* increment as search counter */
- if (IS_NOT_NULL(reg->chain)) {
- onig_chain_reduce(reg);
- reg->state++;
- }
- }
- else {
- int n = 0;
- while (ONIG_STATE(reg) < ONIG_STATE_NORMAL) {
- if (++n > THREAD_PASS_LIMIT_COUNT)
- return ONIGERR_OVER_THREAD_PASS_LIMIT_COUNT;
- THREAD_PASS;
- }
- reg->state++; /* increment as search counter */
- }
-
-#ifdef ONIG_DEBUG_SEARCH
- fprintf(stderr, "onig_search (entry point): str: %d, end: %d, start: %d, range: %d\n",
- (int )str, (int )(end - str), (int )(start - str), (int )(range - str));
-#endif
-
- if (region
-#ifdef USE_POSIX_REGION_OPTION
- && !IS_POSIX_REGION(option)
-#endif
- ) {
- r = onig_region_resize(region, reg->num_mem + 1);
- if (r) goto finish_no_msa;
- }
-
- if (start > end || start < str) goto mismatch_no_msa;
-
-#define MATCH_AND_RETURN_CHECK \
- r = match_at(reg, str, end, s, prev, &msa);\
- if (r != ONIG_MISMATCH) {\
- if (r >= 0) goto match;\
- goto finish; /* error */ \
- }
-
- /* anchor optimize: resume search range */
- if (reg->anchor != 0 && str < end) {
- UChar* semi_end;
-
- if (reg->anchor & ANCHOR_BEGIN_POSITION) {
- /* search start-position only */
- begin_position:
- if (range > start)
- range = start + 1;
- else
- range = start;
- }
- else if (reg->anchor & ANCHOR_BEGIN_BUF) {
- /* search str-position only */
- if (range > start) {
- if (start != str) goto mismatch_no_msa;
- range = str + 1;
- }
- else {
- if (range <= str) {
- start = str;
- range = str;
- }
- else
- goto mismatch_no_msa;
- }
- }
- else if (reg->anchor & ANCHOR_END_BUF) {
- semi_end = end;
-
- end_buf:
- if ((OnigDistance )(semi_end - str) < reg->anchor_dmin)
- goto mismatch_no_msa;
-
- if (range > start) {
- if ((OnigDistance )(semi_end - start) > reg->anchor_dmax) {
- start = semi_end - reg->anchor_dmax;
- if (start < end)
- start = onigenc_get_right_adjust_char_head(reg->enc, str, start);
- else { /* match with empty at end */
- start = onigenc_get_prev_char_head(reg->enc, str, end);
- }
- }
- if ((OnigDistance )(semi_end - (range - 1)) < reg->anchor_dmin) {
- range = semi_end - reg->anchor_dmin + 1;
- }
-
- if (start >= range) goto mismatch_no_msa;
- }
- else {
- if ((OnigDistance )(semi_end - range) > reg->anchor_dmax) {
- range = semi_end - reg->anchor_dmax;
- }
- if ((OnigDistance )(semi_end - start) < reg->anchor_dmin) {
- start = semi_end - reg->anchor_dmin;
- start = ONIGENC_LEFT_ADJUST_CHAR_HEAD(reg->enc, str, start);
- if (range > start) goto mismatch_no_msa;
- }
- }
- }
- else if (reg->anchor & ANCHOR_SEMI_END_BUF) {
- if (ONIG_IS_NEWLINE(end[-1])) {
- semi_end = end - 1;
- if (semi_end > str && start <= semi_end) {
- goto end_buf;
- }
- }
- else {
- semi_end = end;
- goto end_buf;
- }
- }
- else if ((reg->anchor & ANCHOR_ANYCHAR_STAR_PL)) {
- goto begin_position;
- }
- }
- else if (str == end) { /* empty string */
- static UChar* address_for_empty_string = "";
-
-#ifdef ONIG_DEBUG_SEARCH
- fprintf(stderr, "onig_search: empty string.\n");
-#endif
-
- if (reg->threshold_len == 0) {
- s = start = end = str = address_for_empty_string;
- prev = (UChar* )NULL;
-
- MATCH_ARG_INIT(msa, option, region, start);
- MATCH_AND_RETURN_CHECK;
- goto mismatch;
- }
- goto mismatch_no_msa;
- }
-
-#ifdef ONIG_DEBUG_SEARCH
- fprintf(stderr, "onig_search(apply anchor): end: %d, start: %d, range: %d\n",
- (int )(end - str), (int )(start - str), (int )(range - str));
-#endif
-
- MATCH_ARG_INIT(msa, option, region, start);
-
- s = start;
- if (range > start) { /* forward search */
- if (s > str)
- prev = onigenc_get_prev_char_head(reg->enc, str, s);
- else
- prev = (UChar* )NULL;
-
- if (reg->optimize != ONIG_OPTIMIZE_NONE) {
- UChar *sch_range, *low, *high, *low_prev;
-
- sch_range = range;
- if (reg->dmax != 0) {
- if (reg->dmax == ONIG_INFINITE_DISTANCE)
- sch_range = end;
- else {
- sch_range += reg->dmax;
- if (sch_range > end) sch_range = end;
- }
- }
- if (reg->dmax != ONIG_INFINITE_DISTANCE &&
- (end - start) >= reg->threshold_len) {
- do {
- if (! forward_search_range(reg, str, end, s, sch_range,
- &low, &high, &low_prev)) goto mismatch;
- if (s < low) {
- s = low;
- prev = low_prev;
- }
- while (s <= high) {
- MATCH_AND_RETURN_CHECK;
- prev = s;
- s += enc_len(reg->enc, *s);
- }
- if ((reg->anchor & ANCHOR_ANYCHAR_STAR) != 0) {
- if (IS_NOT_NULL(prev)) {
- while (!ONIG_IS_NEWLINE(*prev) && s < range) {
- prev = s;
- s += enc_len(reg->enc, *s);
- }
- }
- }
- } while (s < range);
- goto mismatch;
- }
- else { /* check only. */
- if ((end - start) < reg->threshold_len ||
- ! forward_search_range(reg, str, end, s, sch_range,
- &low, &high, (UChar** )NULL)) goto mismatch;
- }
- }
-
- do {
- MATCH_AND_RETURN_CHECK;
- prev = s;
- s += enc_len(reg->enc, *s);
- } while (s <= range); /* exec s == range, because empty match with /$/. */
- }
- else { /* backward search */
- if (reg->optimize != ONIG_OPTIMIZE_NONE) {
- UChar *low, *high, *adjrange, *sch_start;
-
- adjrange = ONIGENC_LEFT_ADJUST_CHAR_HEAD(reg->enc, str, range);
- if (reg->dmax != ONIG_INFINITE_DISTANCE &&
- (end - range) >= reg->threshold_len) {
- do {
- sch_start = s + reg->dmax;
- if (sch_start > end) sch_start = end;
- if (backward_search_range(reg, str, end, sch_start, range, adjrange,
- &low, &high) <= 0)
- goto mismatch;
-
- if (s > high)
- s = high;
-
- while (s >= low) {
- prev = onigenc_get_prev_char_head(reg->enc, str, s);
- MATCH_AND_RETURN_CHECK;
- s = prev;
- }
- } while (s >= range);
- goto mismatch;
- }
- else { /* check only. */
- if ((end - range) < reg->threshold_len) goto mismatch;
-
- sch_start = s;
- if (reg->dmax != 0) {
- if (reg->dmax == ONIG_INFINITE_DISTANCE)
- sch_start = end;
- else {
- sch_start += reg->dmax;
- if (sch_start > end) sch_start = end;
- else
- sch_start = ONIGENC_LEFT_ADJUST_CHAR_HEAD(reg->enc,
- start, sch_start);
- }
- }
- if (backward_search_range(reg, str, end, sch_start, range, adjrange,
- &low, &high) <= 0) goto mismatch;
- }
- }
-
- do {
- prev = onigenc_get_prev_char_head(reg->enc, str, s);
- MATCH_AND_RETURN_CHECK;
- s = prev;
- } while (s >= range);
- }
-
- mismatch:
- r = ONIG_MISMATCH;
-
- finish:
- MATCH_ARG_FREE(msa);
- reg->state--; /* decrement as search counter */
-
- /* If result is mismatch and no FIND_NOT_EMPTY option,
- then the region is not setted in match_at(). */
- if (IS_FIND_NOT_EMPTY(reg->options) && region
-#ifdef USE_POSIX_REGION_OPTION
- && !IS_POSIX_REGION(option)
-#endif
- ) {
- onig_region_clear(region);
- }
-
-#ifdef ONIG_DEBUG
- if (r != ONIG_MISMATCH)
- fprintf(stderr, "onig_search: error %d\n", r);
-#endif
- return r;
-
- mismatch_no_msa:
- r = ONIG_MISMATCH;
- finish_no_msa:
- reg->state--; /* decrement as search counter */
-#ifdef ONIG_DEBUG
- if (r != ONIG_MISMATCH)
- fprintf(stderr, "onig_search: error %d\n", r);
-#endif
- return r;
-
- match:
- reg->state--; /* decrement as search counter */
- MATCH_ARG_FREE(msa);
- return s - str;
-}
-
-extern OnigEncoding
-onig_get_encoding(regex_t* reg)
-{
- return reg->enc;
-}
-
-extern OnigOptionType
-onig_get_options(regex_t* reg)
-{
- return reg->options;
-}
-
-extern OnigSyntaxType*
-onig_get_syntax(regex_t* reg)
-{
- return reg->syntax;
-}
-
-extern const char*
-onig_version(void)
-{
-#define MSTR(a) # a
-
- return (MSTR(ONIGURUMA_VERSION_MAJOR) "."
- MSTR(ONIGURUMA_VERSION_MINOR) "."
- MSTR(ONIGURUMA_VERSION_TEENY));
-}
diff --git a/ext/mbstring/oniguruma/reggnu.c b/ext/mbstring/oniguruma/reggnu.c
deleted file mode 100644
index 9c6a2161c2..0000000000
--- a/ext/mbstring/oniguruma/reggnu.c
+++ /dev/null
@@ -1,256 +0,0 @@
-/**********************************************************************
-
- reggnu.c - Oniguruma (regular expression library)
-
- Copyright (C) 2002-2004 K.Kosako (kosako@sofnec.co.jp)
-
-**********************************************************************/
-#include "regint.h"
-
-#ifndef ONIGGNU_H /* name changes from oniggnu.h to regex.h in ruby. */
-#include "oniggnu.h"
-#endif
-
-#if defined(RUBY_PLATFORM) || defined(RUBY)
-#ifndef ONIG_RUBY_M17N
-#define USE_COMPATIBILITY_FOR_RUBY_EXTENSION_LIBRARY
-#endif
-#endif
-
-#ifndef NULL
-#define NULL ((void* )0)
-#endif
-
-extern void
-re_free_registers(OnigRegion* r)
-{
- /* 0: don't free self */
- onig_region_free(r, 0);
-}
-
-extern int
-re_adjust_startpos(regex_t* reg, const char* string, int size,
- int startpos, int range)
-{
- if (startpos > 0 && ONIGENC_MBC_MAXLEN(reg->enc) != 1 && startpos < size) {
- UChar *p;
- UChar *s = (UChar* )string + startpos;
-
- if (range > 0) {
- p = onigenc_get_right_adjust_char_head(reg->enc, (UChar* )string, s);
- }
- else {
- p = ONIGENC_LEFT_ADJUST_CHAR_HEAD(reg->enc, (UChar* )string, s);
- }
- return p - (UChar* )string;
- }
-
- return startpos;
-}
-
-extern int
-re_match(regex_t* reg, const char* str, int size, int pos,
- struct re_registers* regs)
-{
- return onig_match(reg, (UChar* )str, (UChar* )(str + size),
- (UChar* )(str + pos), regs, ONIG_OPTION_NONE);
-}
-
-extern int
-re_search(regex_t* bufp, const char* string, int size, int startpos, int range,
- struct re_registers* regs)
-{
- return onig_search(bufp, (UChar* )string, (UChar* )(string + size),
- (UChar* )(string + startpos),
- (UChar* )(string + startpos + range),
- regs, ONIG_OPTION_NONE);
-}
-
-extern int
-re_compile_pattern(const char* pattern, int size, regex_t* reg, char* ebuf)
-{
- int r;
- OnigErrorInfo einfo;
-
- r = onig_compile(reg, (UChar* )pattern, (UChar* )(pattern + size), &einfo);
- if (r != 0) {
- if (IS_NOT_NULL(ebuf))
- (void )onig_error_code_to_str((UChar* )ebuf, r, &einfo);
- }
-
- return r;
-}
-
-extern int
-re_recompile_pattern(const char* pattern, int size, regex_t* reg, char* ebuf)
-{
- int r;
- OnigErrorInfo einfo;
- OnigEncoding enc;
-
- /* I think encoding and options should be arguments of this function.
- But this is adapted to present re.c. (2002/11/29)
- */
- enc = OnigEncDefaultCharEncoding;
-
- r = onig_recompile(reg, (UChar* )pattern, (UChar* )(pattern + size),
- reg->options, enc, OnigDefaultSyntax, &einfo);
- if (r != 0) {
- if (IS_NOT_NULL(ebuf))
- (void )onig_error_code_to_str((UChar* )ebuf, r, &einfo);
- }
- return r;
-}
-
-extern void
-re_free_pattern(regex_t* reg)
-{
- onig_free(reg);
-}
-
-extern int
-re_alloc_pattern(regex_t** reg)
-{
- return onig_alloc_init(reg, ONIG_OPTION_DEFAULT, OnigEncDefaultCharEncoding,
- OnigDefaultSyntax);
-}
-
-extern void
-re_set_casetable(const char* table)
-{
- onigenc_set_default_caseconv_table((UChar* )table);
-}
-
-#ifdef USE_COMPATIBILITY_FOR_RUBY_EXTENSION_LIBRARY
-static const unsigned char mbctab_ascii[] = {
- 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, 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, 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, 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, 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, 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, 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, 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,
-};
-
-static const unsigned char mbctab_euc[] = {
- 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, 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, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0,
-};
-
-static const unsigned char mbctab_sjis[] = {
- 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, 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, 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, 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, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 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,
- 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, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0
-};
-
-static const unsigned char mbctab_utf8[] = {
- 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, 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, 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, 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, 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, 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, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 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, 0, 0,
-};
-
-const unsigned char *re_mbctab = mbctab_ascii;
-#endif
-
-extern void
-#ifdef ONIG_RUBY_M17N
-re_mbcinit(OnigEncoding enc)
-#else
-re_mbcinit(int mb_code)
-#endif
-{
-#ifdef ONIG_RUBY_M17N
-
- onigenc_set_default_encoding(enc);
-
-#else
-
- OnigEncoding enc;
-
- switch (mb_code) {
- case MBCTYPE_ASCII:
- enc = ONIG_ENCODING_ASCII;
- break;
- case MBCTYPE_EUC:
- enc = ONIG_ENCODING_EUC_JP;
- break;
- case MBCTYPE_SJIS:
- enc = ONIG_ENCODING_SJIS;
- break;
- case MBCTYPE_UTF8:
- enc = ONIG_ENCODING_UTF8;
- break;
- default:
- return ;
- break;
- }
-
- onigenc_set_default_encoding(enc);
-#endif
-
-#ifdef USE_COMPATIBILITY_FOR_RUBY_EXTENSION_LIBRARY
- switch (mb_code) {
- case MBCTYPE_ASCII:
- re_mbctab = mbctab_ascii;
- break;
- case MBCTYPE_EUC:
- re_mbctab = mbctab_euc;
- break;
- case MBCTYPE_SJIS:
- re_mbctab = mbctab_sjis;
- break;
- case MBCTYPE_UTF8:
- re_mbctab = mbctab_utf8;
- break;
- }
-#endif
-}
diff --git a/ext/mbstring/oniguruma/regint.h b/ext/mbstring/oniguruma/regint.h
deleted file mode 100644
index 35736b6dcb..0000000000
--- a/ext/mbstring/oniguruma/regint.h
+++ /dev/null
@@ -1,685 +0,0 @@
-/**********************************************************************
-
- regint.h - Oniguruma (regular expression library)
-
- Copyright (C) 2002-2004 K.Kosako (kosako@sofnec.co.jp)
-
-**********************************************************************/
-#ifndef REGINT_H
-#define REGINT_H
-
-/* for debug */
-/* #define ONIG_DEBUG_PARSE_TREE */
-/* #define ONIG_DEBUG_COMPILE */
-/* #define ONIG_DEBUG_SEARCH */
-/* #define ONIG_DEBUG_MATCH */
-/* #define ONIG_DONT_OPTIMIZE */
-
-/* for byte-code statistical data. */
-/* #define ONIG_DEBUG_STATISTICS */
-
-#if defined(ONIG_DEBUG_PARSE_TREE) || defined(ONIG_DEBUG_MATCH) || \
- defined(ONIG_DEBUG_COMPILE) || defined(ONIG_DEBUG_STATISTICS)
-#ifndef ONIG_DEBUG
-#define ONIG_DEBUG
-#endif
-#endif
-
-#if defined(__i386) || defined(__i386__) || defined(_M_IX86) || \
- (defined(__ppc__) && defined(__APPLE__)) || \
- defined(__x86_64) || defined(__x86_64__) || \
- defined(__mc68020__)
-#define PLATFORM_UNALIGNED_WORD_ACCESS
-#endif
-
-/* config */
-/* spec. config */
-#define USE_NAMED_GROUP
-#define USE_SUBEXP_CALL
-#define USE_FOLD_MATCH /* ess-tsett etc... */
-#define USE_INFINITE_REPEAT_MONOMANIAC_MEM_STATUS_CHECK /* /(?:()|())*\2/ */
-#define USE_NEWLINE_AT_END_OF_STRING_HAS_EMPTY_LINE /* /\n$/ =~ "\n" */
-#define USE_WARNING_REDUNDANT_NESTED_REPEAT_OPERATOR
-/* internal config */
-#define USE_RECYCLE_NODE
-#define USE_OP_PUSH_OR_JUMP_EXACT
-#define USE_QUALIFIER_PEEK_NEXT
-
-#define INIT_MATCH_STACK_SIZE 160
-#define MATCH_STACK_LIMIT_SIZE 500000
-
-/* interface to external system */
-#ifdef NOT_RUBY /* gived from Makefile */
-#include "config.h"
-#define USE_VARIABLE_META_CHARS
-#define USE_VARIABLE_SYNTAX
-#define USE_WORD_BEGIN_END /* "\<": word-begin, "\>": word-end */
-#define USE_POSIX_REGION_OPTION /* needed for POSIX API support */
-#define THREAD_ATOMIC_START /* depend on thread system */
-#define THREAD_ATOMIC_END /* depend on thread system */
-#define THREAD_PASS /* depend on thread system */
-#define xmalloc malloc
-#define xrealloc realloc
-#define xfree free
-#else
-#include "ruby.h"
-#include "version.h"
-#include "rubysig.h" /* for DEFER_INTS, ENABLE_INTS */
-#define THREAD_ATOMIC_START DEFER_INTS
-#define THREAD_ATOMIC_END ENABLE_INTS
-#define THREAD_PASS rb_thread_schedule()
-#define DEFAULT_WARN_FUNCTION rb_warn
-#define DEFAULT_VERB_WARN_FUNCTION rb_warning
-
-#if defined(RUBY_VERSION_MAJOR)
-#if RUBY_VERSION_MAJOR > 1 || \
-(RUBY_VERSION_MAJOR == 1 && \
- defined(RUBY_VERSION_MINOR) && RUBY_VERSION_MINOR >= 8)
-#define USE_ST_HASH_TABLE
-#endif
-#endif
-
-#endif /* else NOT_RUBY */
-
-#define THREAD_PASS_LIMIT_COUNT 10
-#define xmemset memset
-#define xmemcpy memcpy
-#define xmemmove memmove
-#if defined(_WIN32) && !defined(__CYGWIN__)
-#define xalloca _alloca
-#ifdef NOT_RUBY
-#define vsnprintf _vsnprintf
-#endif
-#else
-#define xalloca alloca
-#endif
-
-#ifdef HAVE_STDLIB_H
-#include <stdlib.h>
-#endif
-
-#if defined(HAVE_ALLOCA_H) && !defined(__GNUC__)
-#include <alloca.h>
-#endif
-
-#ifdef HAVE_STRING_H
-# include <string.h>
-#else
-# include <strings.h>
-#endif
-
-#include <ctype.h>
-#include <sys/types.h>
-
-#ifdef ONIG_DEBUG
-# include <stdio.h>
-#endif
-
-#include "regenc.h"
-#include "oniguruma.h"
-
-#ifdef MIN
-#undef MIN
-#endif
-#ifdef MAX
-#undef MAX
-#endif
-#define MIN(a,b) (((a)>(b))?(b):(a))
-#define MAX(a,b) (((a)<(b))?(b):(a))
-
-#define IS_NULL(p) (((void*)(p)) == (void*)0)
-#define IS_NOT_NULL(p) (((void*)(p)) != (void*)0)
-#define CHECK_NULL_RETURN(p) if (IS_NULL(p)) return NULL
-#define CHECK_NULL_RETURN_VAL(p,val) if (IS_NULL(p)) return (val)
-#define NULL_UCHARP ((UChar* )0)
-
-#ifndef PLATFORM_UNALIGNED_WORD_ACCESS
-#define WORD_ALIGNMENT_SIZE SIZEOF_INT
-
-#define GET_ALIGNMENT_PAD_SIZE(addr,pad_size) do {\
- (pad_size) = WORD_ALIGNMENT_SIZE \
- - ((unsigned int )(addr) % WORD_ALIGNMENT_SIZE);\
- if ((pad_size) == WORD_ALIGNMENT_SIZE) (pad_size) = 0;\
-} while (0)
-
-#define ALIGNMENT_RIGHT(addr) do {\
- (addr) += (WORD_ALIGNMENT_SIZE - 1);\
- (addr) -= ((unsigned int )(addr) % WORD_ALIGNMENT_SIZE);\
-} while (0)
-
-
-#define B_SHIFT 8
-#define B_MASK 0xff
-
-#define SERIALIZE_2BYTE_INT(i,p) do {\
- *(p) = ((i) >> B_SHIFT) & B_MASK;\
- *((p)+1) = (i) & B_MASK;\
-} while (0)
-
-#define SERIALIZE_4BYTE_INT(i,p) do {\
- *(p) = ((i) >> B_SHIFT*3) & B_MASK;\
- *((p)+1) = ((i) >> B_SHIFT*2) & B_MASK;\
- *((p)+2) = ((i) >> B_SHIFT ) & B_MASK;\
- *((p)+3) = (i) & B_MASK;\
-} while (0)
-
-#define SERIALIZE_8BYTE_INT(i,p) do {\
- *(p) = ((i) >> B_SHIFT*7) & B_MASK;\
- *((p)+1) = ((i) >> B_SHIFT*6) & B_MASK;\
- *((p)+2) = ((i) >> B_SHIFT*5) & B_MASK;\
- *((p)+3) = ((i) >> B_SHIFT*4) & B_MASK;\
- *((p)+4) = ((i) >> B_SHIFT*3) & B_MASK;\
- *((p)+5) = ((i) >> B_SHIFT*2) & B_MASK;\
- *((p)+6) = ((i) >> B_SHIFT ) & B_MASK;\
- *((p)+7) = (i) & B_MASK;\
-} while (0)
-
-#define GET_2BYTE_INT_INC(type,i,p) do {\
- (i) = (type )(((unsigned int )(*(p)) << B_SHIFT) | (unsigned int )((p)[1]));\
- (p) += 2;\
-} while (0)
-
-#define GET_4BYTE_INT_INC(type,i,p) do {\
- (i) = (type )(((unsigned int )((p)[0]) << B_SHIFT*3) | \
- ((unsigned int )((p)[1]) << B_SHIFT*2) | \
- ((unsigned int )((p)[2]) << B_SHIFT ) | \
- ((unsigned int )((p)[3]) )); \
- (p) += 4;\
-} while (0)
-
-#define GET_8BYTE_INT_INC(type,i,p) do {\
- (i) = (type )(((unsigned long )((p)[0]) << B_SHIFT*7) | \
- ((unsigned long )((p)[1]) << B_SHIFT*6) | \
- ((unsigned long )((p)[2]) << B_SHIFT*5) | \
- ((unsigned long )((p)[3]) << B_SHIFT*4) | \
- ((unsigned long )((p)[4]) << B_SHIFT*3) | \
- ((unsigned long )((p)[5]) << B_SHIFT*2) | \
- ((unsigned long )((p)[6]) << B_SHIFT ) | \
- ((unsigned long )((p)[7]) )); \
- (p) += 8;\
-} while (0)
-
-#if SIZEOF_SHORT == 2
-#define GET_SHORT_INC(i,p) GET_2BYTE_INT_INC(short,i,p)
-#define SERIALIZE_SHORT(i,p) SERIALIZE_2BYTE_INT(i,p)
-#elif SIZEOF_SHORT == 4
-#define GET_SHORT_INC(i,p) GET_4BYTE_INT_INC(short,i,p)
-#define SERIALIZE_SHORT(i,p) SERIALIZE_4BYTE_INT(i,p)
-#elif SIZEOF_SHORT == 8
-#define GET_SHORT_INC(i,p) GET_8BYTE_INT_INC(short,i,p)
-#define SERIALIZE_SHORT(i,p) SERIALIZE_8BYTE_INT(i,p)
-#endif
-
-#if SIZEOF_INT == 2
-#define GET_INT_INC(i,p) GET_2BYTE_INT_INC(int,i,p)
-#define GET_UINT_INC(i,p) GET_2BYTE_INT_INC(unsigned,i,p)
-#define SERIALIZE_INT(i,p) SERIALIZE_2BYTE_INT(i,p)
-#define SERIALIZE_UINT(i,p) SERIALIZE_2BYTE_INT(i,p)
-#elif SIZEOF_INT == 4
-#define GET_INT_INC(i,p) GET_4BYTE_INT_INC(int,i,p)
-#define GET_UINT_INC(i,p) GET_4BYTE_INT_INC(unsigned,i,p)
-#define SERIALIZE_INT(i,p) SERIALIZE_4BYTE_INT(i,p)
-#define SERIALIZE_UINT(i,p) SERIALIZE_4BYTE_INT(i,p)
-#elif SIZEOF_INT == 8
-#define GET_INT_INC(i,p) GET_8BYTE_INT_INC(int,i,p)
-#define GET_UINT_INC(i,p) GET_8BYTE_INT_INC(unsigned,i,p)
-#define SERIALIZE_INT(i,p) SERIALIZE_8BYTE_INT(i,p)
-#define SERIALIZE_UINT(i,p) SERIALIZE_8BYTE_INT(i,p)
-#endif
-
-#endif /* PLATFORM_UNALIGNED_WORD_ACCESS */
-
-/* stack pop level */
-#define STACK_POP_LEVEL_FREE 0
-#define STACK_POP_LEVEL_MEM_START 1
-#define STACK_POP_LEVEL_ALL 2
-
-/* optimize flags */
-#define ONIG_OPTIMIZE_NONE 0
-#define ONIG_OPTIMIZE_EXACT 1 /* Slow Search */
-#define ONIG_OPTIMIZE_EXACT_BM 2 /* Boyer Moore Search */
-#define ONIG_OPTIMIZE_EXACT_BM_NOT_REV 3 /* BM (but not simple match) */
-#define ONIG_OPTIMIZE_EXACT_IC 4 /* Slow Search (ignore case) */
-#define ONIG_OPTIMIZE_MAP 5 /* char map */
-
-/* bit status */
-typedef unsigned int BitStatusType;
-
-#define BIT_STATUS_BITS_NUM (sizeof(BitStatusType) * 8)
-#define BIT_STATUS_CLEAR(stats) (stats) = 0
-#define BIT_STATUS_ON_ALL(stats) (stats) = ~((BitStatusType )0)
-#define BIT_STATUS_AT(stats,n) \
- ((n) < BIT_STATUS_BITS_NUM ? ((stats) & (1 << n)) : ((stats) & 1))
-
-#define BIT_STATUS_ON_AT(stats,n) do {\
- if ((n) < BIT_STATUS_BITS_NUM)\
- (stats) |= (1 << (n));\
- else\
- (stats) |= 1;\
-} while (0)
-
-#define BIT_STATUS_ON_AT_SIMPLE(stats,n) do {\
- if ((n) < BIT_STATUS_BITS_NUM)\
- (stats) |= (1 << (n));\
-} while (0)
-
-
-#define INT_MAX_LIMIT ((1UL << (SIZEOF_INT * 8 - 1)) - 1)
-
-#define DIGITVAL(code) ((code) - '0')
-#define ODIGITVAL(code) DIGITVAL(code)
-#define XDIGITVAL(enc,code) \
- (ONIGENC_IS_CODE_DIGIT(enc,code) ? DIGITVAL(code) \
- : (ONIGENC_IS_CODE_UPPER(enc,code) ? (code) - 'A' + 10 : (code) - 'a' + 10))
-
-#define IS_SINGLELINE(option) ((option) & ONIG_OPTION_SINGLELINE)
-#define IS_MULTILINE(option) ((option) & ONIG_OPTION_MULTILINE)
-#define IS_IGNORECASE(option) ((option) & ONIG_OPTION_IGNORECASE)
-#define IS_EXTEND(option) ((option) & ONIG_OPTION_EXTEND)
-#define IS_FIND_LONGEST(option) ((option) & ONIG_OPTION_FIND_LONGEST)
-#define IS_FIND_NOT_EMPTY(option) ((option) & ONIG_OPTION_FIND_NOT_EMPTY)
-#define IS_POSIXLINE(option) (IS_SINGLELINE(option) && IS_MULTILINE(option))
-#define IS_FIND_CONDITION(option) ((option) & \
- (ONIG_OPTION_FIND_LONGEST | ONIG_OPTION_FIND_NOT_EMPTY))
-#define IS_NOTBOL(option) ((option) & ONIG_OPTION_NOTBOL)
-#define IS_NOTEOL(option) ((option) & ONIG_OPTION_NOTEOL)
-#define IS_POSIX_REGION(option) ((option) & ONIG_OPTION_POSIX_REGION)
-
-/* OP_SET_OPTION is required for these options.
-#define IS_DYNAMIC_OPTION(option) \
- (((option) & (ONIG_OPTION_MULTILINE | ONIG_OPTION_IGNORECASE)) != 0)
-*/
-/* ignore-case and multibyte status are included in compiled code. */
-#define IS_DYNAMIC_OPTION(option) 0
-
-
-/* bitset */
-#define BITS_PER_BYTE 8
-#define SINGLE_BYTE_SIZE (1 << BITS_PER_BYTE)
-#define BITS_IN_ROOM (sizeof(Bits) * BITS_PER_BYTE)
-#define BITSET_SIZE (SINGLE_BYTE_SIZE / BITS_IN_ROOM)
-
-#ifdef PLATFORM_UNALIGNED_WORD_ACCESS
-typedef unsigned int Bits;
-#else
-typedef unsigned char Bits;
-#endif
-typedef Bits BitSet[BITSET_SIZE];
-typedef Bits* BitSetRef;
-
-#define SIZE_BITSET sizeof(BitSet)
-
-#define BITSET_CLEAR(bs) do {\
- int i;\
- for (i = 0; i < BITSET_SIZE; i++) { (bs)[i] = 0; }\
-} while (0)
-
-#define BS_ROOM(bs,pos) (bs)[pos / BITS_IN_ROOM]
-#define BS_BIT(pos) (1 << (pos % BITS_IN_ROOM))
-
-#define BITSET_AT(bs, pos) (BS_ROOM(bs,pos) & BS_BIT(pos))
-#define BITSET_SET_BIT(bs, pos) BS_ROOM(bs,pos) |= BS_BIT(pos)
-#define BITSET_CLEAR_BIT(bs, pos) BS_ROOM(bs,pos) &= ~(BS_BIT(pos))
-#define BITSET_INVERT_BIT(bs, pos) BS_ROOM(bs,pos) ^= BS_BIT(pos)
-
-/* bytes buffer */
-typedef struct _BBuf {
- UChar* p;
- unsigned int used;
- unsigned int alloc;
-} BBuf;
-
-#define BBUF_INIT(buf,size) onig_bbuf_init((BBuf* )(buf), (size))
-
-#define BBUF_SIZE_INC(buf,inc) do{\
- (buf)->alloc += (inc);\
- (buf)->p = (UChar* )xrealloc((buf)->p, (buf)->alloc);\
- if (IS_NULL((buf)->p)) return(ONIGERR_MEMORY);\
-} while (0)
-
-#define BBUF_EXPAND(buf,low) do{\
- do { (buf)->alloc *= 2; } while ((buf)->alloc < (unsigned int )low);\
- (buf)->p = (UChar* )xrealloc((buf)->p, (buf)->alloc);\
- if (IS_NULL((buf)->p)) return(ONIGERR_MEMORY);\
-} while (0)
-
-#define BBUF_ENSURE_SIZE(buf,size) do{\
- unsigned int new_alloc = (buf)->alloc;\
- while (new_alloc < (unsigned int )(size)) { new_alloc *= 2; }\
- if ((buf)->alloc != new_alloc) {\
- (buf)->p = (UChar* )xrealloc((buf)->p, new_alloc);\
- if (IS_NULL((buf)->p)) return(ONIGERR_MEMORY);\
- (buf)->alloc = new_alloc;\
- }\
-} while (0)
-
-#define BBUF_WRITE(buf,pos,bytes,n) do{\
- int used = (pos) + (n);\
- if ((buf)->alloc < (unsigned int )used) BBUF_EXPAND((buf),used);\
- xmemcpy((buf)->p + (pos), (bytes), (n));\
- if ((buf)->used < (unsigned int )used) (buf)->used = used;\
-} while (0)
-
-#define BBUF_WRITE1(buf,pos,byte) do{\
- int used = (pos) + 1;\
- if ((buf)->alloc < (unsigned int )used) BBUF_EXPAND((buf),used);\
- (buf)->p[(pos)] = (byte);\
- if ((buf)->used < (unsigned int )used) (buf)->used = used;\
-} while (0)
-
-#define BBUF_ADD(buf,bytes,n) BBUF_WRITE((buf),(buf)->used,(bytes),(n))
-#define BBUF_ADD1(buf,byte) BBUF_WRITE1((buf),(buf)->used,(byte))
-#define BBUF_GET_ADD_ADDRESS(buf) ((buf)->p + (buf)->used)
-#define BBUF_GET_OFFSET_POS(buf) ((buf)->used)
-
-/* from < to */
-#define BBUF_MOVE_RIGHT(buf,from,to,n) do {\
- if ((unsigned int )((to)+(n)) > (buf)->alloc) BBUF_EXPAND((buf),(to) + (n));\
- xmemmove((buf)->p + (to), (buf)->p + (from), (n));\
- if ((unsigned int )((to)+(n)) > (buf)->used) (buf)->used = (to) + (n);\
-} while (0)
-
-/* from > to */
-#define BBUF_MOVE_LEFT(buf,from,to,n) do {\
- xmemmove((buf)->p + (to), (buf)->p + (from), (n));\
-} while (0)
-
-/* from > to */
-#define BBUF_MOVE_LEFT_REDUCE(buf,from,to) do {\
- xmemmove((buf)->p + (to), (buf)->p + (from), (buf)->used - (from));\
- (buf)->used -= (from - to);\
-} while (0)
-
-#define BBUF_INSERT(buf,pos,bytes,n) do {\
- if (pos >= (buf)->used) {\
- BBUF_WRITE(buf,pos,bytes,n);\
- }\
- else {\
- BBUF_MOVE_RIGHT((buf),(pos),(pos) + (n),((buf)->used - (pos)));\
- xmemcpy((buf)->p + (pos), (bytes), (n));\
- }\
-} while (0)
-
-#define BBUF_GET_BYTE(buf, pos) (buf)->p[(pos)]
-
-
-#define ANCHOR_BEGIN_BUF (1<<0)
-#define ANCHOR_BEGIN_LINE (1<<1)
-#define ANCHOR_BEGIN_POSITION (1<<2)
-#define ANCHOR_END_BUF (1<<3)
-#define ANCHOR_SEMI_END_BUF (1<<4)
-#define ANCHOR_END_LINE (1<<5)
-
-#define ANCHOR_WORD_BOUND (1<<6)
-#define ANCHOR_NOT_WORD_BOUND (1<<7)
-#define ANCHOR_WORD_BEGIN (1<<8)
-#define ANCHOR_WORD_END (1<<9)
-#define ANCHOR_PREC_READ (1<<10)
-#define ANCHOR_PREC_READ_NOT (1<<11)
-#define ANCHOR_LOOK_BEHIND (1<<12)
-#define ANCHOR_LOOK_BEHIND_NOT (1<<13)
-
-#define ANCHOR_ANYCHAR_STAR (1<<14) /* ".*" optimize info */
-#define ANCHOR_ANYCHAR_STAR_PL (1<<15) /* ".*" optimize info (posix-line) */
-
-/* operation code */
-enum OpCode {
- OP_FINISH = 0, /* matching process terminator (no more alternative) */
- OP_END = 1, /* pattern code terminator (success end) */
-
- OP_EXACT1 = 2, /* single byte, N = 1 */
- OP_EXACT2, /* single byte, N = 2 */
- OP_EXACT3, /* single byte, N = 3 */
- OP_EXACT4, /* single byte, N = 4 */
- OP_EXACT5, /* single byte, N = 5 */
- OP_EXACTN, /* single byte */
- OP_EXACTMB2N1, /* mb-length = 2 N = 1 */
- OP_EXACTMB2N2, /* mb-length = 2 N = 2 */
- OP_EXACTMB2N3, /* mb-length = 2 N = 3 */
- OP_EXACTMB2N, /* mb-length = 2 */
- OP_EXACTMB3N, /* mb-length = 3 */
- OP_EXACTMBN, /* other length */
-
- OP_EXACT1_IC, /* single byte, N = 1, ignore case */
- OP_EXACTN_IC, /* single byte, ignore case */
-
- OP_CCLASS,
- OP_CCLASS_MB,
- OP_CCLASS_MIX,
- OP_CCLASS_NOT,
- OP_CCLASS_MB_NOT,
- OP_CCLASS_MIX_NOT,
-
- OP_ANYCHAR, /* "." */
- OP_ANYCHAR_ML, /* "." multi-line */
- OP_ANYCHAR_STAR, /* ".*" */
- OP_ANYCHAR_ML_STAR, /* ".*" multi-line */
- OP_ANYCHAR_STAR_PEEK_NEXT,
- OP_ANYCHAR_ML_STAR_PEEK_NEXT,
-
- OP_WORD,
- OP_NOT_WORD,
- OP_WORD_SB,
- OP_WORD_MB,
- OP_WORD_BOUND,
- OP_NOT_WORD_BOUND,
- OP_WORD_BEGIN,
- OP_WORD_END,
-
- OP_BEGIN_BUF,
- OP_END_BUF,
- OP_BEGIN_LINE,
- OP_END_LINE,
- OP_SEMI_END_BUF,
- OP_BEGIN_POSITION,
-
- OP_BACKREF1,
- OP_BACKREF2,
- OP_BACKREF3,
- OP_BACKREFN,
- OP_BACKREFN_IC,
- OP_BACKREF_MULTI,
- OP_BACKREF_MULTI_IC,
-
- OP_MEMORY_START,
- OP_MEMORY_START_PUSH, /* push back-tracker to stack */
- OP_MEMORY_END_PUSH, /* push back-tracker to stack */
- OP_MEMORY_END_PUSH_REC, /* push back-tracker to stack */
- OP_MEMORY_END,
- OP_MEMORY_END_REC, /* push marker to stack */
-
- OP_SET_OPTION_PUSH, /* set option and push recover option */
- OP_SET_OPTION, /* set option */
-
- OP_FAIL, /* pop stack and move */
- OP_JUMP,
- OP_PUSH,
- OP_POP,
- OP_PUSH_OR_JUMP_EXACT1, /* if match exact then push, else jump. */
- OP_PUSH_IF_PEEK_NEXT, /* if match exact then push, else none. */
- OP_REPEAT, /* {n,m} */
- OP_REPEAT_NG, /* {n,m}? (non greedy) */
- OP_REPEAT_INC,
- OP_REPEAT_INC_NG, /* non greedy */
- OP_NULL_CHECK_START, /* null loop checker start */
- OP_NULL_CHECK_END, /* null loop checker end */
- OP_NULL_CHECK_END_MEMST, /* null loop checker end (with capture status) */
- OP_NULL_CHECK_END_MEMST_PUSH, /* with capture status and push check-end */
-
- OP_PUSH_POS, /* (?=...) start */
- OP_POP_POS, /* (?=...) end */
- OP_PUSH_POS_NOT, /* (?!...) start */
- OP_FAIL_POS, /* (?!...) end */
- OP_PUSH_STOP_BT, /* (?>...) start */
- OP_POP_STOP_BT, /* (?>...) end */
- OP_LOOK_BEHIND, /* (?<=...) start (no needs end opcode) */
- OP_PUSH_LOOK_BEHIND_NOT, /* (?<!...) start */
- OP_FAIL_LOOK_BEHIND_NOT, /* (?<!...) end */
-
- OP_CALL, /* \g<name> */
- OP_RETURN
-};
-
-/* arguments type */
-#define ARG_SPECIAL -1
-#define ARG_NON 0
-#define ARG_RELADDR 1
-#define ARG_ABSADDR 2
-#define ARG_LENGTH 3
-#define ARG_MEMNUM 4
-#define ARG_OPTION 5
-
-typedef short int RelAddrType;
-typedef short int AbsAddrType;
-typedef short int LengthType;
-typedef short int MemNumType;
-typedef int RepeatNumType;
-
-#define SIZE_OPCODE 1
-#define SIZE_RELADDR sizeof(RelAddrType)
-#define SIZE_ABSADDR sizeof(AbsAddrType)
-#define SIZE_LENGTH sizeof(LengthType)
-#define SIZE_MEMNUM sizeof(MemNumType)
-#define SIZE_REPEATNUM sizeof(RepeatNumType)
-#define SIZE_OPTION sizeof(OnigOptionType)
-#define SIZE_CODE_POINT sizeof(OnigCodePoint)
-
-#ifdef PLATFORM_UNALIGNED_WORD_ACCESS
-#define GET_RELADDR_INC(addr,p) do{\
- addr = *((RelAddrType* )(p));\
- (p) += SIZE_RELADDR;\
-} while(0)
-
-#define GET_ABSADDR_INC(addr,p) do{\
- addr = *((AbsAddrType* )(p));\
- (p) += SIZE_ABSADDR;\
-} while(0)
-
-#define GET_LENGTH_INC(len,p) do{\
- len = *((LengthType* )(p));\
- (p) += SIZE_LENGTH;\
-} while(0)
-
-#define GET_MEMNUM_INC(num,p) do{\
- num = *((MemNumType* )(p));\
- (p) += SIZE_MEMNUM;\
-} while(0)
-
-#define GET_REPEATNUM_INC(num,p) do{\
- num = *((RepeatNumType* )(p));\
- (p) += SIZE_REPEATNUM;\
-} while(0)
-
-#define GET_OPTION_INC(option,p) do{\
- option = *((OnigOptionType* )(p));\
- (p) += SIZE_OPTION;\
-} while(0)
-#else
-
-#define GET_RELADDR_INC(addr,p) GET_SHORT_INC(addr,p)
-#define GET_ABSADDR_INC(addr,p) GET_SHORT_INC(addr,p)
-#define GET_LENGTH_INC(len,p) GET_SHORT_INC(len,p)
-#define GET_MEMNUM_INC(num,p) GET_SHORT_INC(num,p)
-#define GET_REPEATNUM_INC(num,p) GET_INT_INC(num,p)
-#define GET_OPTION_INC(option,p) GET_UINT_INC(option,p)
-
-#define SERIALIZE_RELADDR(addr,p) SERIALIZE_SHORT(addr,p)
-#define SERIALIZE_ABSADDR(addr,p) SERIALIZE_SHORT(addr,p)
-#define SERIALIZE_LENGTH(len,p) SERIALIZE_SHORT(len,p)
-#define SERIALIZE_MEMNUM(num,p) SERIALIZE_SHORT(num,p)
-#define SERIALIZE_REPEATNUM(num,p) SERIALIZE_INT(num,p)
-#define SERIALIZE_OPTION(option,p) SERIALIZE_UINT(option,p)
-
-#define SERIALIZE_BUFSIZE SIZEOF_INT
-
-#endif /* PLATFORM_UNALIGNED_WORD_ACCESS */
-
-/* code point's address must be aligned address. */
-#define GET_CODE_POINT(code,p) code = *((OnigCodePoint* )(p))
-#define GET_BYTE_INC(byte,p) do{\
- byte = *(p);\
- (p)++;\
-} while(0)
-
-
-/* op-code + arg size */
-#define SIZE_OP_ANYCHAR_STAR SIZE_OPCODE
-#define SIZE_OP_ANYCHAR_STAR_PEEK_NEXT (SIZE_OPCODE + 1)
-#define SIZE_OP_JUMP (SIZE_OPCODE + SIZE_RELADDR)
-#define SIZE_OP_PUSH (SIZE_OPCODE + SIZE_RELADDR)
-#define SIZE_OP_POP SIZE_OPCODE
-#define SIZE_OP_PUSH_OR_JUMP_EXACT1 (SIZE_OPCODE + SIZE_RELADDR + 1)
-#define SIZE_OP_PUSH_IF_PEEK_NEXT (SIZE_OPCODE + SIZE_RELADDR + 1)
-#define SIZE_OP_REPEAT_INC (SIZE_OPCODE + SIZE_MEMNUM)
-#define SIZE_OP_REPEAT_INC_NG (SIZE_OPCODE + SIZE_MEMNUM)
-#define SIZE_OP_PUSH_POS SIZE_OPCODE
-#define SIZE_OP_PUSH_POS_NOT (SIZE_OPCODE + SIZE_RELADDR)
-#define SIZE_OP_POP_POS SIZE_OPCODE
-#define SIZE_OP_FAIL_POS SIZE_OPCODE
-#define SIZE_OP_SET_OPTION (SIZE_OPCODE + SIZE_OPTION)
-#define SIZE_OP_SET_OPTION_PUSH (SIZE_OPCODE + SIZE_OPTION)
-#define SIZE_OP_FAIL SIZE_OPCODE
-#define SIZE_OP_MEMORY_START (SIZE_OPCODE + SIZE_MEMNUM)
-#define SIZE_OP_MEMORY_START_PUSH (SIZE_OPCODE + SIZE_MEMNUM)
-#define SIZE_OP_MEMORY_END_PUSH (SIZE_OPCODE + SIZE_MEMNUM)
-#define SIZE_OP_MEMORY_END_PUSH_REC (SIZE_OPCODE + SIZE_MEMNUM)
-#define SIZE_OP_MEMORY_END (SIZE_OPCODE + SIZE_MEMNUM)
-#define SIZE_OP_MEMORY_END_REC (SIZE_OPCODE + SIZE_MEMNUM)
-#define SIZE_OP_PUSH_STOP_BT SIZE_OPCODE
-#define SIZE_OP_POP_STOP_BT SIZE_OPCODE
-#define SIZE_OP_NULL_CHECK_START (SIZE_OPCODE + SIZE_MEMNUM)
-#define SIZE_OP_NULL_CHECK_END (SIZE_OPCODE + SIZE_MEMNUM)
-#define SIZE_OP_LOOK_BEHIND (SIZE_OPCODE + SIZE_LENGTH)
-#define SIZE_OP_PUSH_LOOK_BEHIND_NOT (SIZE_OPCODE + SIZE_RELADDR + SIZE_LENGTH)
-#define SIZE_OP_FAIL_LOOK_BEHIND_NOT SIZE_OPCODE
-#define SIZE_OP_CALL (SIZE_OPCODE + SIZE_ABSADDR)
-#define SIZE_OP_RETURN SIZE_OPCODE
-
-
-typedef struct {
- UChar esc;
- UChar anychar;
- UChar anytime;
- UChar zero_or_one_time;
- UChar one_or_more_time;
- UChar anychar_anytime;
-} OnigMetaCharTableType;
-
-extern OnigMetaCharTableType OnigMetaCharTable;
-
-#define MC_ESC OnigMetaCharTable.esc
-#define MC_ANYCHAR OnigMetaCharTable.anychar
-#define MC_ANYTIME OnigMetaCharTable.anytime
-#define MC_ZERO_OR_ONE_TIME OnigMetaCharTable.zero_or_one_time
-#define MC_ONE_OR_MORE_TIME OnigMetaCharTable.one_or_more_time
-#define MC_ANYCHAR_ANYTIME OnigMetaCharTable.anychar_anytime
-
-
-#ifdef ONIG_DEBUG
-
-typedef struct {
- short int opcode;
- char* name;
- short int arg_type;
-} OnigOpInfoType;
-
-extern OnigOpInfoType OnigOpInfo[];
-
-extern void onig_print_compiled_byte_code P_((FILE* f, UChar* bp, UChar** nextp));
-
-#ifdef ONIG_DEBUG_STATISTICS
-extern void onig_statistics_init P_((void));
-extern void onig_print_statistics P_((FILE* f));
-#endif
-#endif
-
-extern char* onig_error_code_to_format P_((int code));
-extern void onig_snprintf_with_pattern PV_((char buf[], int bufsize, OnigEncoding enc, char* pat, char* pat_end, char *fmt, ...));
-extern UChar* onig_strdup P_((UChar* s, UChar* end));
-extern int onig_bbuf_init P_((BBuf* buf, int size));
-extern int onig_alloc_init P_((regex_t** reg, OnigOptionType option, OnigEncoding enc, OnigSyntaxType* syntax));
-extern int onig_compile P_((regex_t* reg, UChar* pattern, UChar* pattern_end, OnigErrorInfo* einfo));
-extern void onig_chain_reduce P_((regex_t* reg));
-extern int onig_is_in_code_range P_((UChar* p, OnigCodePoint code));
-
-#endif /* REGINT_H */
diff --git a/ext/mbstring/oniguruma/regparse.c b/ext/mbstring/oniguruma/regparse.c
deleted file mode 100644
index 2260df4155..0000000000
--- a/ext/mbstring/oniguruma/regparse.c
+++ /dev/null
@@ -1,4815 +0,0 @@
-/**********************************************************************
-
- regparse.c - Oniguruma (regular expression library)
-
- Copyright (C) 2003-2004 K.Kosako (kosako@sofnec.co.jp)
-
-**********************************************************************/
-#include "regparse.h"
-
-#define WARN_BUFSIZE 256
-
-#define SYN_POSIX_COMMON_OP \
- ( ONIG_SYN_OP_DOT_ANYCHAR | ONIG_SYN_OP_POSIX_BRACKET | \
- ONIG_SYN_OP_DECIMAL_BACKREF | \
- ONIG_SYN_OP_BRACKET_CC | ONIG_SYN_OP_ASTERISK_ZERO_INF | \
- ONIG_SYN_OP_LINE_ANCHOR | \
- ONIG_SYN_OP_ESC_CONTROL_CHARS )
-
-#define SYN_GNU_REGEX_OP \
- ( ONIG_SYN_OP_DOT_ANYCHAR | ONIG_SYN_OP_BRACKET_CC | \
- ONIG_SYN_OP_POSIX_BRACKET | ONIG_SYN_OP_DECIMAL_BACKREF | \
- ONIG_SYN_OP_BRACE_INTERVAL | ONIG_SYN_OP_LPAREN_SUBEXP | \
- ONIG_SYN_OP_VBAR_ALT | \
- ONIG_SYN_OP_ASTERISK_ZERO_INF | ONIG_SYN_OP_PLUS_ONE_INF | \
- ONIG_SYN_OP_QMARK_ZERO_ONE | \
- ONIG_SYN_OP_ESC_AZ_BUF_ANCHOR | ONIG_SYN_OP_ESC_CAPITAL_G_BEGIN_ANCHOR | \
- ONIG_SYN_OP_ESC_W_WORD | \
- ONIG_SYN_OP_ESC_B_WORD_BOUND | ONIG_SYN_OP_ESC_LTGT_WORD_BEGIN_END | \
- ONIG_SYN_OP_ESC_S_WHITE_SPACE | ONIG_SYN_OP_ESC_D_DIGIT | \
- ONIG_SYN_OP_LINE_ANCHOR )
-
-#define SYN_GNU_REGEX_BV \
- ( ONIG_SYN_CONTEXT_INDEP_ANCHORS | ONIG_SYN_CONTEXT_INDEP_REPEAT_OPS | \
- ONIG_SYN_CONTEXT_INVALID_REPEAT_OPS | ONIG_SYN_ALLOW_INVALID_INTERVAL | \
- ONIG_SYN_BACKSLASH_ESCAPE_IN_CC | ONIG_SYN_ALLOW_DOUBLE_RANGE_OP_IN_CC )
-
-#ifdef USE_VARIABLE_SYNTAX
-OnigSyntaxType OnigSyntaxPosixBasic = {
- ( SYN_POSIX_COMMON_OP | ONIG_SYN_OP_ESC_LPAREN_SUBEXP |
- ONIG_SYN_OP_ESC_BRACE_INTERVAL )
- , 0
- , 0
- , ( ONIG_OPTION_SINGLELINE | ONIG_OPTION_MULTILINE )
-};
-
-OnigSyntaxType OnigSyntaxPosixExtended = {
- ( SYN_POSIX_COMMON_OP | ONIG_SYN_OP_LPAREN_SUBEXP |
- ONIG_SYN_OP_BRACE_INTERVAL |
- ONIG_SYN_OP_PLUS_ONE_INF | ONIG_SYN_OP_QMARK_ZERO_ONE | ONIG_SYN_OP_VBAR_ALT )
- , 0
- , ( ONIG_SYN_CONTEXT_INDEP_ANCHORS |
- ONIG_SYN_CONTEXT_INDEP_REPEAT_OPS | ONIG_SYN_CONTEXT_INVALID_REPEAT_OPS |
- ONIG_SYN_ALLOW_UNMATCHED_CLOSE_SUBEXP |
- ONIG_SYN_ALLOW_DOUBLE_RANGE_OP_IN_CC )
- , ( ONIG_OPTION_SINGLELINE | ONIG_OPTION_MULTILINE )
-};
-
-OnigSyntaxType OnigSyntaxEmacs = {
- ( ONIG_SYN_OP_DOT_ANYCHAR | ONIG_SYN_OP_BRACKET_CC |
- ONIG_SYN_OP_ESC_BRACE_INTERVAL |
- ONIG_SYN_OP_ESC_LPAREN_SUBEXP | ONIG_SYN_OP_ESC_VBAR_ALT |
- ONIG_SYN_OP_ASTERISK_ZERO_INF | ONIG_SYN_OP_PLUS_ONE_INF |
- ONIG_SYN_OP_QMARK_ZERO_ONE | ONIG_SYN_OP_DECIMAL_BACKREF |
- ONIG_SYN_OP_LINE_ANCHOR | ONIG_SYN_OP_ESC_CONTROL_CHARS )
- , ONIG_SYN_OP2_ESC_GNU_BUF_ANCHOR
- , ONIG_SYN_ALLOW_EMPTY_RANGE_IN_CC
- , ONIG_OPTION_NONE
-};
-
-OnigSyntaxType OnigSyntaxGrep = {
- ( ONIG_SYN_OP_DOT_ANYCHAR | ONIG_SYN_OP_BRACKET_CC | ONIG_SYN_OP_POSIX_BRACKET |
- ONIG_SYN_OP_BRACE_INTERVAL | ONIG_SYN_OP_ESC_LPAREN_SUBEXP |
- ONIG_SYN_OP_ESC_VBAR_ALT |
- ONIG_SYN_OP_ASTERISK_ZERO_INF | ONIG_SYN_OP_ESC_PLUS_ONE_INF |
- ONIG_SYN_OP_ESC_QMARK_ZERO_ONE | ONIG_SYN_OP_LINE_ANCHOR |
- ONIG_SYN_OP_ESC_W_WORD | ONIG_SYN_OP_ESC_B_WORD_BOUND |
- ONIG_SYN_OP_ESC_LTGT_WORD_BEGIN_END | ONIG_SYN_OP_DECIMAL_BACKREF )
- , 0
- , ( ONIG_SYN_ALLOW_EMPTY_RANGE_IN_CC | ONIG_SYN_NOT_NEWLINE_IN_NEGATIVE_CC )
- , ONIG_OPTION_NONE
-};
-
-OnigSyntaxType OnigSyntaxGnuRegex = {
- SYN_GNU_REGEX_OP
- , 0
- , SYN_GNU_REGEX_BV
- , ONIG_OPTION_NONE
-};
-
-OnigSyntaxType OnigSyntaxJava = {
- (( SYN_GNU_REGEX_OP | ONIG_SYN_OP_QMARK_NON_GREEDY |
- ONIG_SYN_OP_ESC_CONTROL_CHARS | ONIG_SYN_OP_ESC_C_CONTROL |
- ONIG_SYN_OP_ESC_OCTAL3 | ONIG_SYN_OP_ESC_X_HEX2 )
- & ~ONIG_SYN_OP_ESC_LTGT_WORD_BEGIN_END )
- , ( ONIG_SYN_OP2_ESC_CAPITAL_Q_QUOTE | ONIG_SYN_OP2_QMARK_GROUP_EFFECT |
- ONIG_SYN_OP2_OPTION_PERL | ONIG_SYN_OP2_PLUS_POSSESSIVE_REPEAT |
- ONIG_SYN_OP2_PLUS_POSSESSIVE_INTERVAL | ONIG_SYN_OP2_CCLASS_SET_OP |
- ONIG_SYN_OP2_ESC_V_VTAB | ONIG_SYN_OP2_ESC_U_HEX4 |
- ONIG_SYN_OP2_ESC_P_CHAR_PROPERTY )
- , ( SYN_GNU_REGEX_BV | ONIG_SYN_DIFFERENT_LEN_ALT_LOOK_BEHIND )
- , ONIG_OPTION_SINGLELINE
-};
-
-OnigSyntaxType OnigSyntaxPerl = {
- (( SYN_GNU_REGEX_OP | ONIG_SYN_OP_QMARK_NON_GREEDY |
- ONIG_SYN_OP_ESC_OCTAL3 | ONIG_SYN_OP_ESC_X_HEX2 |
- ONIG_SYN_OP_ESC_X_BRACE_HEX8 | ONIG_SYN_OP_ESC_CONTROL_CHARS |
- ONIG_SYN_OP_ESC_C_CONTROL )
- & ~ONIG_SYN_OP_ESC_LTGT_WORD_BEGIN_END )
- , ( ONIG_SYN_OP2_ESC_CAPITAL_Q_QUOTE |
- ONIG_SYN_OP2_QMARK_GROUP_EFFECT | ONIG_SYN_OP2_OPTION_PERL |
- ONIG_SYN_OP2_ESC_P_CHAR_PROPERTY )
- , SYN_GNU_REGEX_BV
- , ONIG_OPTION_SINGLELINE
-};
-#endif /* USE_VARIABLE_SYNTAX */
-
-OnigSyntaxType OnigSyntaxRuby = {
- (( SYN_GNU_REGEX_OP | ONIG_SYN_OP_QMARK_NON_GREEDY |
- ONIG_SYN_OP_ESC_OCTAL3 | ONIG_SYN_OP_ESC_X_HEX2 |
- ONIG_SYN_OP_ESC_X_BRACE_HEX8 | ONIG_SYN_OP_ESC_CONTROL_CHARS |
- ONIG_SYN_OP_ESC_C_CONTROL )
- & ~ONIG_SYN_OP_ESC_LTGT_WORD_BEGIN_END )
- , ( ONIG_SYN_OP2_QMARK_GROUP_EFFECT |
- ONIG_SYN_OP2_OPTION_RUBY |
- ONIG_SYN_OP2_QMARK_LT_NAMED_GROUP | ONIG_SYN_OP2_ESC_K_NAMED_BACKREF |
- ONIG_SYN_OP2_ESC_G_SUBEXP_CALL |
- ONIG_SYN_OP2_PLUS_POSSESSIVE_REPEAT |
- ONIG_SYN_OP2_CCLASS_SET_OP | ONIG_SYN_OP2_ESC_CAPITAL_C_BAR_CONTROL |
- ONIG_SYN_OP2_ESC_CAPITAL_M_BAR_META | ONIG_SYN_OP2_ESC_V_VTAB )
- , ( SYN_GNU_REGEX_BV |
- ONIG_SYN_ALLOW_INTERVAL_LOW_ABBREV |
- ONIG_SYN_DIFFERENT_LEN_ALT_LOOK_BEHIND |
- ONIG_SYN_CAPTURE_ONLY_NAMED_GROUP |
- ONIG_SYN_ALLOW_MULTIPLEX_DEFINITION_NAME |
- ONIG_SYN_WARN_CC_OP_NOT_ESCAPED |
- ONIG_SYN_WARN_REDUNDANT_NESTED_REPEAT )
- , ONIG_OPTION_NONE
-};
-
-OnigSyntaxType* OnigDefaultSyntax = ONIG_SYNTAX_RUBY;
-
-#ifdef USE_VARIABLE_SYNTAX
-extern int
-onig_set_default_syntax(OnigSyntaxType* syntax)
-{
- if (IS_NULL(syntax))
- syntax = ONIG_SYNTAX_RUBY;
-
- OnigDefaultSyntax = syntax;
- return 0;
-}
-
-extern void
-onig_copy_syntax(OnigSyntaxType* to, OnigSyntaxType* from)
-{
- *to = *from;
-}
-
-extern void
-onig_set_syntax_op(OnigSyntaxType* syntax, unsigned int op)
-{
- syntax->op = op;
-}
-
-extern void
-onig_set_syntax_op2(OnigSyntaxType* syntax, unsigned int op2)
-{
- syntax->op2 = op2;
-}
-
-extern void
-onig_set_syntax_behavior(OnigSyntaxType* syntax, unsigned int behavior)
-{
- syntax->behavior = behavior;
-}
-
-extern void
-onig_set_syntax_options(OnigSyntaxType* syntax, OnigOptionType options)
-{
- syntax->options = options;
-}
-#endif
-
-OnigMetaCharTableType OnigMetaCharTable = {
- (OnigCodePoint )'\\' /* esc */
- , (OnigCodePoint )0 /* anychar '.' */
- , (OnigCodePoint )0 /* anytime '*' */
- , (OnigCodePoint )0 /* zero or one time '?' */
- , (OnigCodePoint )0 /* one or more time '+' */
- , (OnigCodePoint )0 /* anychar anytime */
-};
-
-#ifdef USE_VARIABLE_META_CHARS
-extern int onig_set_meta_char(unsigned int what, unsigned int c)
-{
- switch (what) {
- case ONIG_META_CHAR_ESCAPE:
- OnigMetaCharTable.esc = c;
- break;
- case ONIG_META_CHAR_ANYCHAR:
- OnigMetaCharTable.anychar = c;
- break;
- case ONIG_META_CHAR_ANYTIME:
- OnigMetaCharTable.anytime = c;
- break;
- case ONIG_META_CHAR_ZERO_OR_ONE_TIME:
- OnigMetaCharTable.zero_or_one_time = c;
- break;
- case ONIG_META_CHAR_ONE_OR_MORE_TIME:
- OnigMetaCharTable.one_or_more_time = c;
- break;
- case ONIG_META_CHAR_ANYCHAR_ANYTIME:
- OnigMetaCharTable.anychar_anytime = c;
- break;
- default:
- return ONIGERR_INVALID_ARGUMENT;
- break;
- }
- return 0;
-}
-#endif /* USE_VARIABLE_META_CHARS */
-
-
-extern void onig_null_warn(char* s) { }
-
-#ifdef DEFAULT_WARN_FUNCTION
-static OnigWarnFunc onig_warn = (OnigWarnFunc )DEFAULT_WARN_FUNCTION;
-#else
-static OnigWarnFunc onig_warn = onig_null_warn;
-#endif
-
-#ifdef DEFAULT_VERB_WARN_FUNCTION
-static OnigWarnFunc onig_verb_warn = (OnigWarnFunc )DEFAULT_VERB_WARN_FUNCTION;
-#else
-static OnigWarnFunc onig_verb_warn = onig_null_warn;
-#endif
-
-extern void onig_set_warn_func(OnigWarnFunc f)
-{
- onig_warn = f;
-}
-
-extern void onig_set_verb_warn_func(OnigWarnFunc f)
-{
- onig_verb_warn = f;
-}
-
-static void
-bbuf_free(BBuf* bbuf)
-{
- if (IS_NOT_NULL(bbuf)) {
- if (IS_NOT_NULL(bbuf->p)) xfree(bbuf->p);
- xfree(bbuf);
- }
-}
-
-static int
-bbuf_clone(BBuf** rto, BBuf* from)
-{
- int r;
- BBuf *to;
-
- *rto = to = (BBuf* )xmalloc(sizeof(BBuf));
- CHECK_NULL_RETURN_VAL(to, ONIGERR_MEMORY);
- r = BBUF_INIT(to, from->alloc);
- if (r != 0) return r;
- to->used = from->used;
- xmemcpy(to->p, from->p, from->used);
- return 0;
-}
-
-#define ONOFF(v,f,negative) (negative) ? ((v) &= ~(f)) : ((v) |= (f))
-
-#define SET_ALL_MULTI_BYTE_RANGE(pbuf) \
- add_code_range_to_buf(pbuf, (OnigCodePoint )0x80, ~((OnigCodePoint )0))
-
-#define ADD_ALL_MULTI_BYTE_RANGE(code, mbuf) do {\
- if (! ONIGENC_IS_SINGLEBYTE(code)) {\
- r = SET_ALL_MULTI_BYTE_RANGE(&(mbuf));\
- if (r) return r;\
- }\
-} while (0)
-
-
-#define BITSET_IS_EMPTY(bs,empty) do {\
- int i;\
- empty = 1;\
- for (i = 0; i < BITSET_SIZE; i++) {\
- if ((bs)[i] != 0) {\
- empty = 0; break;\
- }\
- }\
-} while (0)
-
-static void
-bitset_set_range(BitSetRef bs, int from, int to)
-{
- int i;
- for (i = from; i <= to && i < SINGLE_BYTE_SIZE; i++) {
- BITSET_SET_BIT(bs, i);
- }
-}
-
-#if 0
-static void
-bitset_set_all(BitSetRef bs)
-{
- int i;
- for (i = 0; i < BITSET_SIZE; i++) {
- bs[i] = ~((Bits )0);
- }
-}
-#endif
-
-static void
-bitset_invert(BitSetRef bs)
-{
- int i;
- for (i = 0; i < BITSET_SIZE; i++) {
- bs[i] = ~(bs[i]);
- }
-}
-
-static void
-bitset_invert_to(BitSetRef from, BitSetRef to)
-{
- int i;
- for (i = 0; i < BITSET_SIZE; i++) {
- to[i] = ~(from[i]);
- }
-}
-
-static void
-bitset_and(BitSetRef dest, BitSetRef bs)
-{
- int i;
- for (i = 0; i < BITSET_SIZE; i++) {
- dest[i] &= bs[i];
- }
-}
-
-static void
-bitset_or(BitSetRef dest, BitSetRef bs)
-{
- int i;
- for (i = 0; i < BITSET_SIZE; i++) {
- dest[i] |= bs[i];
- }
-}
-
-static void
-bitset_copy(BitSetRef dest, BitSetRef bs)
-{
- int i;
- for (i = 0; i < BITSET_SIZE; i++) {
- dest[i] = bs[i];
- }
-}
-
-extern int
-onig_strncmp(UChar* s1, UChar* s2, int n)
-{
- int x;
-
- while (n-- > 0) {
- x = *s2++ - *s1++;
- if (x) return x;
- }
- return 0;
-}
-
-static void
-k_strcpy(UChar* dest, UChar* src, UChar* end)
-{
- int len = end - src;
- if (len > 0) {
- xmemcpy(dest, src, len);
- dest[len] = (UChar )0;
- }
-}
-
-extern UChar*
-onig_strdup(UChar* s, UChar* end)
-{
- int len = end - s;
-
- if (len > 0) {
- UChar* r = (UChar* )xmalloc(len + 1);
- CHECK_NULL_RETURN(r);
- xmemcpy(r, s, len);
- r[len] = (UChar )0;
- return r;
- }
- else return NULL;
-}
-
-/* scan pattern methods */
-#define PEND_VALUE -1
-
-#define PFETCH(c) do { (c) = *p++; } while (0)
-#define PUNFETCH p--
-#define PINC p++
-#define PPEEK (p < end ? *p : PEND_VALUE)
-#define PEND (p < end ? 0 : 1)
-
-
-static UChar*
-k_strcat_capa(UChar* dest, UChar* dest_end, UChar* src, UChar* src_end,
- int capa)
-{
- UChar* r;
-
- if (dest)
- r = (UChar* )xrealloc(dest, capa + 1);
- else
- r = (UChar* )xmalloc(capa + 1);
-
- CHECK_NULL_RETURN(r);
- k_strcpy(r + (dest_end - dest), src, src_end);
- return r;
-}
-
-/* dest on static area */
-static UChar*
-strcat_capa_from_static(UChar* dest, UChar* dest_end,
- UChar* src, UChar* src_end, int capa)
-{
- UChar* r;
-
- r = (UChar* )xmalloc(capa + 1);
- CHECK_NULL_RETURN(r);
- k_strcpy(r, dest, dest_end);
- k_strcpy(r + (dest_end - dest), src, src_end);
- return r;
-}
-
-#ifdef USE_NAMED_GROUP
-
-#define INIT_NAME_BACKREFS_ALLOC_NUM 8
-
-typedef struct {
- UChar* name;
- int name_len; /* byte length */
- int back_num; /* number of backrefs */
- int back_alloc;
- int back_ref1;
- int* back_refs;
-} NameEntry;
-
-#ifdef USE_ST_HASH_TABLE
-
-#include <st.h>
-
-typedef st_table NameTable;
-typedef st_data_t HashDataType; /* 1.6 st.h doesn't define st_data_t type */
-
-#define NAMEBUF_SIZE 24
-#define NAMEBUF_SIZE_1 25
-
-#ifdef ONIG_DEBUG
-static int
-i_print_name_entry(UChar* key, NameEntry* e, void* arg)
-{
- int i;
- FILE* fp = (FILE* )arg;
-
- fprintf(fp, "%s: ", e->name);
- if (e->back_num == 0)
- fputs("-", fp);
- else if (e->back_num == 1)
- fprintf(fp, "%d", e->back_ref1);
- else {
- for (i = 0; i < e->back_num; i++) {
- if (i > 0) fprintf(fp, ", ");
- fprintf(fp, "%d", e->back_refs[i]);
- }
- }
- fputs("\n", fp);
- return ST_CONTINUE;
-}
-
-extern int
-onig_print_names(FILE* fp, regex_t* reg)
-{
- NameTable* t = (NameTable* )reg->name_table;
-
- if (IS_NOT_NULL(t)) {
- fprintf(fp, "name table\n");
- st_foreach(t, i_print_name_entry, (HashDataType )fp);
- fputs("\n", fp);
- }
- return 0;
-}
-#endif
-
-static int
-i_free_name_entry(UChar* key, NameEntry* e, void* arg)
-{
- xfree(e->name); /* == key */
- if (IS_NOT_NULL(e->back_refs)) xfree(e->back_refs);
- return ST_DELETE;
-}
-
-static int
-names_clear(regex_t* reg)
-{
- NameTable* t = (NameTable* )reg->name_table;
-
- if (IS_NOT_NULL(t)) {
- st_foreach(t, i_free_name_entry, 0);
- }
- return 0;
-}
-
-extern int
-onig_names_free(regex_t* reg)
-{
- int r;
- NameTable* t;
-
- r = names_clear(reg);
- if (r) return r;
-
- t = (NameTable* )reg->name_table;
- if (IS_NOT_NULL(t)) st_free_table(t);
- reg->name_table = (void* )NULL;
- return 0;
-}
-
-static NameEntry*
-name_find(regex_t* reg, UChar* name, UChar* name_end)
-{
- int len;
- UChar namebuf[NAMEBUF_SIZE_1];
- UChar *key;
- NameEntry* e;
- NameTable* t = (NameTable* )reg->name_table;
-
- e = (NameEntry* )NULL;
- if (IS_NOT_NULL(t)) {
- if (*name_end == '\0') {
- key = name;
- }
- else {
- /* dirty, but st.c API claims NULL terminated key. */
- len = name_end - name;
- if (len <= NAMEBUF_SIZE) {
- xmemcpy(namebuf, name, len);
- namebuf[len] = '\0';
- key = namebuf;
- }
- else {
- key = onig_strdup(name, name_end);
- if (IS_NULL(key)) return (NameEntry* )NULL;
- }
- }
-
- st_lookup(t, (HashDataType )key, (HashDataType * )&e);
- if (key != name && key != namebuf) xfree(key);
- }
- return e;
-}
-
-typedef struct {
- int (*func)(UChar*,UChar*,int,int*,regex_t*,void*);
- regex_t* reg;
- void* arg;
- int ret;
-} INamesArg;
-
-static int
-i_names(UChar* key, NameEntry* e, INamesArg* arg)
-{
- int r = (*(arg->func))(e->name, e->name + strlen(e->name), e->back_num,
- (e->back_num > 1 ? e->back_refs : &(e->back_ref1)),
- arg->reg, arg->arg);
- if (r != 0) {
- arg->ret = r;
- return ST_STOP;
- }
- return ST_CONTINUE;
-}
-
-extern int
-onig_foreach_name(regex_t* reg,
- int (*func)(UChar*,UChar*,int,int*,regex_t*,void*),
- void* arg)
-{
- INamesArg narg;
- NameTable* t = (NameTable* )reg->name_table;
-
- narg.ret = 0;
- if (IS_NOT_NULL(t)) {
- narg.func = func;
- narg.reg = reg;
- narg.arg = arg;
- st_foreach(t, i_names, (HashDataType )&narg);
- }
- return narg.ret;
-}
-
-extern int
-onig_number_of_names(regex_t* reg)
-{
- NameTable* t = (NameTable* )reg->name_table;
-
- if (IS_NOT_NULL(t))
- return t->num_entries;
- else
- return 0;
-}
-
-#else /* USE_ST_HASH_TABLE */
-
-#define INIT_NAMES_ALLOC_NUM 8
-
-typedef struct {
- NameEntry* e;
- int num;
- int alloc;
-} NameTable;
-
-
-#ifdef ONIG_DEBUG
-extern int
-onig_print_names(FILE* fp, regex_t* reg)
-{
- int i, j;
- NameEntry* e;
- NameTable* t = (NameTable* )reg->name_table;
-
- if (IS_NOT_NULL(t) && t->num > 0) {
- fprintf(fp, "name table\n");
- for (i = 0; i < t->num; i++) {
- e = &(t->e[i]);
- fprintf(fp, "%s: ", e->name);
- if (e->back_num == 0) {
- fputs("-", fp);
- }
- else if (e->back_num == 1) {
- fprintf(fp, "%d", e->back_ref1);
- }
- else {
- for (j = 0; j < e->back_num; j++) {
- if (j > 0) fprintf(fp, ", ");
- fprintf(fp, "%d", e->back_refs[j]);
- }
- }
- fputs("\n", fp);
- }
- fputs("\n", fp);
- }
- return 0;
-}
-#endif
-
-static int
-names_clear(regex_t* reg)
-{
- int i;
- NameEntry* e;
- NameTable* t = (NameTable* )reg->name_table;
-
- if (IS_NOT_NULL(t)) {
- for (i = 0; i < t->num; i++) {
- e = &(t->e[i]);
- if (IS_NOT_NULL(e->name)) {
- xfree(e->name);
- e->name = NULL;
- e->name_len = 0;
- e->back_num = 0;
- e->back_alloc = 0;
- if (IS_NOT_NULL(e->back_refs)) xfree(e->back_refs);
- e->back_refs = (int* )NULL;
- }
- }
- if (IS_NOT_NULL(t->e)) {
- xfree(t->e);
- t->e = NULL;
- }
- t->num = 0;
- }
- return 0;
-}
-
-extern int
-onig_names_free(regex_t* reg)
-{
- int r;
- NameTable* t;
-
- r = names_clear(reg);
- if (r) return r;
-
- t = (NameTable* )reg->name_table;
- if (IS_NOT_NULL(t)) xfree(t);
- reg->name_table = NULL;
- return 0;
-}
-
-static NameEntry*
-name_find(regex_t* reg, UChar* name, UChar* name_end)
-{
- int i, len;
- NameEntry* e;
- NameTable* t = (NameTable* )reg->name_table;
-
- if (IS_NOT_NULL(t)) {
- len = name_end - name;
- for (i = 0; i < t->num; i++) {
- e = &(t->e[i]);
- if (len == e->name_len && onig_strncmp(name, e->name, len) == 0)
- return e;
- }
- }
- return (NameEntry* )NULL;
-}
-
-extern int
-onig_foreach_name(regex_t* reg,
- int (*func)(UChar*,UChar*,int,int*,regex_t*,void*),
- void* arg)
-{
- int i, r;
- NameEntry* e;
- NameTable* t = (NameTable* )reg->name_table;
-
- if (IS_NOT_NULL(t)) {
- for (i = 0; i < t->num; i++) {
- e = &(t->e[i]);
- r = (*func)(e->name, e->name + e->name_len, e->back_num,
- (e->back_num > 1 ? e->back_refs : &(e->back_ref1)),
- reg, arg);
- if (r != 0) return r;
- }
- }
- return 0;
-}
-
-extern int
-onig_number_of_names(regex_t* reg)
-{
- NameTable* t = (NameTable* )reg->name_table;
-
- if (IS_NOT_NULL(t))
- return t->num;
- else
- return 0;
-}
-
-#endif /* else USE_ST_HASH_TABLE */
-
-static int
-name_add(regex_t* reg, UChar* name, UChar* name_end, int backref, ScanEnv* env)
-{
- int alloc;
- NameEntry* e;
- NameTable* t = (NameTable* )reg->name_table;
-
- if (name_end - name <= 0)
- return ONIGERR_EMPTY_GROUP_NAME;
-
- e = name_find(reg, name, name_end);
- if (IS_NULL(e)) {
-#ifdef USE_ST_HASH_TABLE
- if (IS_NULL(t)) {
- reg->name_table = t = st_init_strtable();
- }
- e = (NameEntry* )xmalloc(sizeof(NameEntry));
- CHECK_NULL_RETURN_VAL(e, ONIGERR_MEMORY);
-
- e->name = onig_strdup(name, name_end);
- if (IS_NULL(e->name)) return ONIGERR_MEMORY;
- st_insert(t, (HashDataType )e->name, (HashDataType )e);
-
- e->name_len = name_end - name;
- e->back_num = 0;
- e->back_alloc = 0;
- e->back_refs = (int* )NULL;
-
-#else
-
- if (IS_NULL(t)) {
- alloc = INIT_NAMES_ALLOC_NUM;
- t = (NameTable* )xmalloc(sizeof(NameTable));
- CHECK_NULL_RETURN_VAL(t, ONIGERR_MEMORY);
- t->e = NULL;
- t->alloc = 0;
- t->num = 0;
-
- t->e = (NameEntry* )xmalloc(sizeof(NameEntry) * alloc);
- if (IS_NULL(t->e)) {
- xfree(t);
- return ONIGERR_MEMORY;
- }
- t->alloc = alloc;
- reg->name_table = t;
- goto clear;
- }
- else if (t->num == t->alloc) {
- int i;
-
- alloc = t->alloc * 2;
- t->e = (NameEntry* )xrealloc(t->e, sizeof(NameEntry) * alloc);
- CHECK_NULL_RETURN_VAL(t->e, ONIGERR_MEMORY);
- t->alloc = alloc;
-
- clear:
- for (i = t->num; i < t->alloc; i++) {
- t->e[i].name = NULL;
- t->e[i].name_len = 0;
- t->e[i].back_num = 0;
- t->e[i].back_alloc = 0;
- t->e[i].back_refs = (int* )NULL;
- }
- }
- e = &(t->e[t->num]);
- t->num++;
- e->name = onig_strdup(name, name_end);
- e->name_len = name_end - name;
-#endif
- }
-
- if (e->back_num >= 1 &&
- ! IS_SYNTAX_BV(env->syntax, ONIG_SYN_ALLOW_MULTIPLEX_DEFINITION_NAME)) {
- onig_scan_env_set_error_string(env, ONIGERR_MULTIPLEX_DEFINED_NAME,
- name, name_end);
- return ONIGERR_MULTIPLEX_DEFINED_NAME;
- }
-
- e->back_num++;
- if (e->back_num == 1) {
- e->back_ref1 = backref;
- }
- else {
- if (e->back_num == 2) {
- alloc = INIT_NAME_BACKREFS_ALLOC_NUM;
- e->back_refs = (int* )xmalloc(sizeof(int) * alloc);
- CHECK_NULL_RETURN_VAL(e->back_refs, ONIGERR_MEMORY);
- e->back_alloc = alloc;
- e->back_refs[0] = e->back_ref1;
- e->back_refs[1] = backref;
- }
- else {
- if (e->back_num > e->back_alloc) {
- alloc = e->back_alloc * 2;
- e->back_refs = (int* )xrealloc(e->back_refs, sizeof(int) * alloc);
- CHECK_NULL_RETURN_VAL(e->back_refs, ONIGERR_MEMORY);
- e->back_alloc = alloc;
- }
- e->back_refs[e->back_num - 1] = backref;
- }
- }
-
- return 0;
-}
-
-extern int
-onig_name_to_group_numbers(regex_t* reg, UChar* name, UChar* name_end,
- int** nums)
-{
- NameEntry* e;
-
- e = name_find(reg, name, name_end);
- if (IS_NULL(e)) return ONIGERR_UNDEFINED_NAME_REFERENCE;
-
- switch (e->back_num) {
- case 0:
- break;
- case 1:
- *nums = &(e->back_ref1);
- break;
- default:
- *nums = e->back_refs;
- break;
- }
- return e->back_num;
-}
-
-extern int
-onig_name_to_backref_number(regex_t* reg, UChar* name, UChar* name_end,
- OnigRegion *region)
-{
- int i, n, *nums;
-
- n = onig_name_to_group_numbers(reg, name, name_end, &nums);
- if (n < 0)
- return n;
- else if (n == 0)
- return ONIGERR_PARSER_BUG;
- else if (n == 1)
- return nums[0];
- else {
- if (IS_NOT_NULL(region)) {
- for (i = n - 1; i >= 0; i--) {
- if (region->beg[nums[i]] != ONIG_REGION_NOTPOS)
- return nums[i];
- }
- }
- return nums[n - 1];
- }
-}
-
-#else /* USE_NAMED_GROUP */
-
-extern int
-onig_name_to_group_numbers(regex_t* reg, UChar* name, UChar* name_end,
- int** nums)
-{
- return ONIG_NO_SUPPORT_CONFIG;
-}
-
-extern int
-onig_name_to_backref_number(regex_t* reg, UChar* name, UChar* name_end,
- OnigRegion* region)
-{
- return ONIG_NO_SUPPORT_CONFIG;
-}
-
-extern int
-onig_foreach_name(regex_t* reg,
- int (*func)(UChar*,UChar*,int,int*,regex_t*,void*),
- void* arg)
-{
- return ONIG_NO_SUPPORT_CONFIG;
-}
-
-extern int
-onig_number_of_names(regex_t* reg)
-{
- return 0;
-}
-#endif /* else USE_NAMED_GROUP */
-
-
-#define INIT_SCANENV_MEMNODES_ALLOC_SIZE 16
-
-static void
-scan_env_clear(ScanEnv* env)
-{
- int i;
-
- BIT_STATUS_CLEAR(env->capture_history);
- BIT_STATUS_CLEAR(env->bt_mem_start);
- BIT_STATUS_CLEAR(env->bt_mem_end);
- BIT_STATUS_CLEAR(env->backrefed_mem);
- env->error = (UChar* )NULL;
- env->error_end = (UChar* )NULL;
- env->num_call = 0;
- env->num_mem = 0;
-#ifdef USE_NAMED_GROUP
- env->num_named = 0;
-#endif
- env->mem_alloc = 0;
- env->mem_nodes_dynamic = (Node** )NULL;
-
- for (i = 0; i < SCANENV_MEMNODES_SIZE; i++)
- env->mem_nodes_static[i] = NULL_NODE;
-}
-
-static int
-scan_env_add_mem_entry(ScanEnv* env)
-{
- int i, need, alloc;
- Node** p;
-
- need = env->num_mem + 1;
- if (need >= SCANENV_MEMNODES_SIZE) {
- if (env->mem_alloc <= need) {
- if (IS_NULL(env->mem_nodes_dynamic)) {
- alloc = INIT_SCANENV_MEMNODES_ALLOC_SIZE;
- p = (Node** )xmalloc(sizeof(Node*) * alloc);
- xmemcpy(p, env->mem_nodes_static,
- sizeof(Node*) * SCANENV_MEMNODES_SIZE);
- }
- else {
- alloc = env->mem_alloc * 2;
- p = (Node** )xrealloc(env->mem_nodes_dynamic, sizeof(Node*) * alloc);
- }
- CHECK_NULL_RETURN_VAL(p, ONIGERR_MEMORY);
-
- for (i = env->num_mem + 1; i < alloc; i++)
- p[i] = NULL_NODE;
-
- env->mem_nodes_dynamic = p;
- env->mem_alloc = alloc;
- }
- }
-
- env->num_mem++;
- return env->num_mem;
-}
-
-static int
-scan_env_set_mem_node(ScanEnv* env, int num, Node* node)
-{
- if (env->num_mem >= num)
- SCANENV_MEM_NODES(env)[num] = node;
- else
- return ONIGERR_PARSER_BUG;
- return 0;
-}
-
-
-#ifdef USE_RECYCLE_NODE
-typedef struct _FreeNode {
- struct _FreeNode* next;
-} FreeNode;
-
-static FreeNode* FreeNodeList = (FreeNode* )NULL;
-#endif
-
-extern void
-onig_node_free(Node* node)
-{
- if (IS_NULL(node)) return ;
-
- switch (NTYPE(node)) {
- case N_STRING:
- if (IS_NOT_NULL(NSTRING(node).s) && NSTRING(node).s != NSTRING(node).buf) {
- xfree(NSTRING(node).s);
- }
- break;
-
- case N_LIST:
- case N_ALT:
- onig_node_free(NCONS(node).left);
- onig_node_free(NCONS(node).right);
- break;
-
- case N_CCLASS:
- if (NCCLASS(node).mbuf)
- bbuf_free(NCCLASS(node).mbuf);
- break;
-
- case N_QUALIFIER:
- if (NQUALIFIER(node).target)
- onig_node_free(NQUALIFIER(node).target);
- break;
-
- case N_EFFECT:
- if (NEFFECT(node).target)
- onig_node_free(NEFFECT(node).target);
- break;
-
- case N_BACKREF:
- if (IS_NOT_NULL(NBACKREF(node).back_dynamic))
- xfree(NBACKREF(node).back_dynamic);
- break;
-
- case N_ANCHOR:
- if (NANCHOR(node).target)
- onig_node_free(NANCHOR(node).target);
- break;
- }
-
-#ifdef USE_RECYCLE_NODE
- {
- FreeNode* n;
-
- n = (FreeNode* )node;
- n->next = FreeNodeList;
- FreeNodeList = n;
- }
-#else
- xfree(node);
-#endif
-}
-
-#ifdef USE_RECYCLE_NODE
-extern int
-onig_free_node_list()
-{
- FreeNode* n;
-
- THREAD_ATOMIC_START;
- while (FreeNodeList) {
- n = FreeNodeList;
- FreeNodeList = FreeNodeList->next;
- xfree(n);
- }
- THREAD_ATOMIC_END;
- return 0;
-}
-#endif
-
-static Node*
-node_new()
-{
- Node* node;
-
-#ifdef USE_RECYCLE_NODE
- if (IS_NOT_NULL(FreeNodeList)) {
- node = (Node* )FreeNodeList;
- FreeNodeList = FreeNodeList->next;
- return node;
- }
-#endif
-
- node = (Node* )xmalloc(sizeof(Node));
- return node;
-}
-
-
-static void
-initialize_cclass(CClassNode* cc)
-{
- BITSET_CLEAR(cc->bs);
- cc->not = 0;
- cc->mbuf = NULL;
-}
-
-static Node*
-node_new_cclass()
-{
- Node* node = node_new();
- CHECK_NULL_RETURN(node);
- node->type = N_CCLASS;
-
- initialize_cclass(&(NCCLASS(node)));
- return node;
-}
-
-static Node*
-node_new_ctype(int type)
-{
- Node* node = node_new();
- CHECK_NULL_RETURN(node);
- node->type = N_CTYPE;
- NCTYPE(node).type = type;
- return node;
-}
-
-static Node*
-node_new_anychar()
-{
- Node* node = node_new();
- CHECK_NULL_RETURN(node);
- node->type = N_ANYCHAR;
- return node;
-}
-
-static Node*
-node_new_list(Node* left, Node* right)
-{
- Node* node = node_new();
- CHECK_NULL_RETURN(node);
- node->type = N_LIST;
- NCONS(node).left = left;
- NCONS(node).right = right;
- return node;
-}
-
-static Node*
-node_new_alt(Node* left, Node* right)
-{
- Node* node = node_new();
- CHECK_NULL_RETURN(node);
- node->type = N_ALT;
- NCONS(node).left = left;
- NCONS(node).right = right;
- return node;
-}
-
-extern Node*
-onig_node_new_anchor(int type)
-{
- Node* node = node_new();
- CHECK_NULL_RETURN(node);
- node->type = N_ANCHOR;
- NANCHOR(node).type = type;
- NANCHOR(node).target = NULL;
- NANCHOR(node).char_len = -1;
- return node;
-}
-
-static Node*
-node_new_backref(int back_num, int* backrefs, int by_name, ScanEnv* env)
-{
- int i;
- Node* node = node_new();
-
- CHECK_NULL_RETURN(node);
- node->type = N_BACKREF;
- NBACKREF(node).state = 0;
- NBACKREF(node).back_num = back_num;
- NBACKREF(node).back_dynamic = (int* )NULL;
- if (by_name != 0)
- NBACKREF(node).state |= NST_NAME_REF;
-
- for (i = 0; i < back_num; i++) {
- if (backrefs[i] <= env->num_mem &&
- IS_NULL(SCANENV_MEM_NODES(env)[backrefs[i]])) {
- NBACKREF(node).state |= NST_RECURSION; /* /...(\1).../ */
- break;
- }
- }
-
- if (back_num <= NODE_BACKREFS_SIZE) {
- for (i = 0; i < back_num; i++)
- NBACKREF(node).back_static[i] = backrefs[i];
- }
- else {
- int* p = (int* )xmalloc(sizeof(int) * back_num);
- if (IS_NULL(p)) {
- onig_node_free(node);
- return NULL;
- }
- NBACKREF(node).back_dynamic = p;
- for (i = 0; i < back_num; i++)
- p[i] = backrefs[i];
- }
- return node;
-}
-
-#ifdef USE_SUBEXP_CALL
-static Node*
-node_new_call(UChar* name, UChar* name_end)
-{
- Node* node = node_new();
- CHECK_NULL_RETURN(node);
-
- node->type = N_CALL;
- NCALL(node).state = 0;
- NCALL(node).ref_num = CALLNODE_REFNUM_UNDEF;
- NCALL(node).target = NULL_NODE;
- NCALL(node).name = name;
- NCALL(node).name_end = name_end;
- return node;
-}
-#endif
-
-static Node*
-node_new_qualifier(int lower, int upper, int by_number)
-{
- Node* node = node_new();
- CHECK_NULL_RETURN(node);
- node->type = N_QUALIFIER;
- NQUALIFIER(node).target = NULL;
- NQUALIFIER(node).lower = lower;
- NQUALIFIER(node).upper = upper;
- NQUALIFIER(node).greedy = 1;
- NQUALIFIER(node).by_number = by_number;
- NQUALIFIER(node).target_empty_info = NQ_TARGET_ISNOT_EMPTY;
- NQUALIFIER(node).head_exact = NULL_NODE;
- NQUALIFIER(node).next_head_exact = NULL_NODE;
- NQUALIFIER(node).is_refered = 0;
- return node;
-}
-
-static Node*
-node_new_effect(int type)
-{
- Node* node = node_new();
- CHECK_NULL_RETURN(node);
- node->type = N_EFFECT;
- NEFFECT(node).type = type;
- NEFFECT(node).state = 0;
- NEFFECT(node).regnum = 0;
- NEFFECT(node).option = 0;
- NEFFECT(node).target = NULL;
- NEFFECT(node).call_addr = -1;
- NEFFECT(node).opt_count = 0;
- return node;
-}
-
-extern Node*
-onig_node_new_effect(int type)
-{
- return node_new_effect(type);
-}
-
-static Node*
-node_new_effect_memory(OnigOptionType option, int is_named)
-{
- Node* node = node_new_effect(EFFECT_MEMORY);
- CHECK_NULL_RETURN(node);
- if (is_named != 0)
- SET_EFFECT_STATUS(node, NST_NAMED_GROUP);
-
-#ifdef USE_SUBEXP_CALL
- NEFFECT(node).option = option;
-#endif
- return node;
-}
-
-static Node*
-node_new_option(OnigOptionType option)
-{
- Node* node = node_new_effect(EFFECT_OPTION);
- CHECK_NULL_RETURN(node);
- NEFFECT(node).option = option;
- return node;
-}
-
-extern int
-onig_node_str_cat(Node* node, UChar* s, UChar* end)
-{
- int addlen = end - s;
-
- if (addlen > 0) {
- int len = NSTRING(node).end - NSTRING(node).s;
-
- if (NSTRING(node).capa > 0 || (len + addlen > NODE_STR_BUF_SIZE - 1)) {
- UChar* p;
- int capa = len + addlen + NODE_STR_MARGIN;
-
- if (capa <= NSTRING(node).capa) {
- k_strcpy(NSTRING(node).s + len, s, end);
- }
- else {
- if (NSTRING(node).s == NSTRING(node).buf)
- p = strcat_capa_from_static(NSTRING(node).s, NSTRING(node).end,
- s, end, capa);
- else
- p = k_strcat_capa(NSTRING(node).s, NSTRING(node).end, s, end, capa);
-
- CHECK_NULL_RETURN_VAL(p, ONIGERR_MEMORY);
- NSTRING(node).s = p;
- NSTRING(node).capa = capa;
- }
- }
- else {
- k_strcpy(NSTRING(node).s + len, s, end);
- }
- NSTRING(node).end = NSTRING(node).s + len + addlen;
- }
-
- return 0;
-}
-
-static int
-node_str_cat_char(Node* node, UChar c)
-{
- UChar s[1];
-
- s[0] = c;
- return onig_node_str_cat(node, s, s + 1);
-}
-
-extern void
-onig_node_conv_to_str_node(Node* node, int flag)
-{
- node->type = N_STRING;
-
- NSTRING(node).flag = flag;
- NSTRING(node).capa = 0;
- NSTRING(node).s = NSTRING(node).buf;
- NSTRING(node).end = NSTRING(node).buf;
-}
-
-static Node*
-node_new_str(UChar* s, UChar* end)
-{
- Node* node = node_new();
- CHECK_NULL_RETURN(node);
-
- node->type = N_STRING;
- NSTRING(node).capa = 0;
- NSTRING(node).flag = 0;
- NSTRING(node).s = NSTRING(node).buf;
- NSTRING(node).end = NSTRING(node).buf;
- if (onig_node_str_cat(node, s, end)) {
- onig_node_free(node);
- return NULL;
- }
- return node;
-}
-
-static Node*
-node_new_str_raw(UChar* s, UChar* end)
-{
- Node* node = node_new_str(s, end);
- NSTRING_SET_RAW(node);
- return node;
-}
-
-static Node*
-node_new_empty()
-{
- return node_new_str(NULL, NULL);
-}
-
-static Node*
-node_new_str_char(UChar c)
-{
- UChar p[1];
-
- p[0] = c;
- return node_new_str(p, p + 1);
-}
-
-static Node*
-node_new_str_raw_char(UChar c)
-{
- UChar p[1];
-
- p[0] = c;
- return node_new_str_raw(p, p + 1);
-}
-
-static Node*
-str_node_split_last_char(StrNode* sn, OnigEncoding enc)
-{
- UChar *p;
- Node* n = NULL_NODE;
-
- if (sn->end > sn->s) {
- p = onigenc_get_prev_char_head(enc, sn->s, sn->end);
- if (p && p > sn->s) { /* can be splitted. */
- n = node_new_str(p, sn->end);
- if ((sn->flag & NSTR_RAW) != 0)
- NSTRING_SET_RAW(n);
- sn->end = p;
- }
- }
- return n;
-}
-
-static int
-str_node_can_be_split(StrNode* sn, OnigEncoding enc)
-{
- if (sn->end > sn->s) {
- return ((enc_len(enc, *(sn->s)) < sn->end - sn->s) ? 1 : 0);
- }
- return 0;
-}
-
-extern int
-onig_scan_unsigned_number(UChar** src, UChar* end, OnigEncoding enc)
-{
- unsigned int num, val;
- int c;
- UChar* p = *src;
-
- num = 0;
- while (!PEND) {
- PFETCH(c);
- if (ONIGENC_IS_CODE_DIGIT(enc, c)) {
- val = (unsigned int )DIGITVAL(c);
- if ((INT_MAX_LIMIT - val) / 10UL < num)
- return -1; /* overflow */
-
- num = num * 10 + val;
- }
- else {
- PUNFETCH;
- break;
- }
- }
- *src = p;
- return num;
-}
-
-static int
-scan_unsigned_hexadecimal_number(UChar** src, UChar* end, int maxlen,
- OnigEncoding enc)
-{
- int c;
- unsigned int num, val;
- UChar* p = *src;
-
- num = 0;
- while (!PEND && maxlen-- != 0) {
- PFETCH(c);
- if (ONIGENC_IS_CODE_XDIGIT(enc, c)) {
- val = (unsigned int )XDIGITVAL(enc,c);
- if ((INT_MAX_LIMIT - val) / 16UL < num)
- return -1; /* overflow */
-
- num = (num << 4) + XDIGITVAL(enc,c);
- }
- else {
- PUNFETCH;
- break;
- }
- }
- *src = p;
- return num;
-}
-
-static int
-scan_unsigned_octal_number(UChar** src, UChar* end, int maxlen,
- OnigEncoding enc)
-{
- int c;
- unsigned int num, val;
- UChar* p = *src;
-
- num = 0;
- while (!PEND && maxlen-- != 0) {
- PFETCH(c);
- if (ONIGENC_IS_CODE_DIGIT(enc, c) && c < '8') {
- val = ODIGITVAL(c);
- if ((INT_MAX_LIMIT - val) / 8UL < num)
- return -1; /* overflow */
-
- num = (num << 3) + val;
- }
- else {
- PUNFETCH;
- break;
- }
- }
- *src = p;
- return num;
-}
-
-
-#define BBUF_WRITE_CODE_POINT(bbuf,pos,code) \
- BBUF_WRITE(bbuf, pos, &(code), SIZE_CODE_POINT)
-
-/* data format:
- [n][from-1][to-1][from-2][to-2] ... [from-n][to-n]
- (all data size is OnigCodePoint)
- */
-static int
-new_code_range(BBuf** pbuf)
-{
-#define INIT_MULTI_BYTE_RANGE_SIZE (SIZE_CODE_POINT * 5)
- int r;
- OnigCodePoint n;
- BBuf* bbuf;
-
- bbuf = *pbuf = (BBuf* )xmalloc(sizeof(BBuf));
- CHECK_NULL_RETURN_VAL(*pbuf, ONIGERR_MEMORY);
- r = BBUF_INIT(*pbuf, INIT_MULTI_BYTE_RANGE_SIZE);
- if (r) return r;
-
- n = 0;
- BBUF_WRITE_CODE_POINT(bbuf, 0, n);
- return 0;
-}
-
-static int
-add_code_range_to_buf(BBuf** pbuf, OnigCodePoint from, OnigCodePoint to)
-{
- int r, inc_n, pos;
- int low, high, bound, x;
- OnigCodePoint n, *data;
- BBuf* bbuf;
-
- if (from > to) {
- n = from; from = to; to = n;
- }
-
- if (IS_NULL(*pbuf)) {
- r = new_code_range(pbuf);
- if (r) return r;
- bbuf = *pbuf;
- n = 0;
- }
- else {
- bbuf = *pbuf;
- GET_CODE_POINT(n, bbuf->p);
- }
- data = (OnigCodePoint* )(bbuf->p);
- data++;
-
- for (low = 0, bound = n; low < bound; ) {
- x = (low + bound) >> 1;
- if (from > data[x*2 + 1])
- low = x + 1;
- else
- bound = x;
- }
-
- for (high = low, bound = n; high < bound; ) {
- x = (high + bound) >> 1;
- if (to >= data[x*2] - 1)
- high = x + 1;
- else
- bound = x;
- }
-
- inc_n = low + 1 - high;
- if (n + inc_n > ONIG_MAX_MULTI_BYTE_RANGES_NUM)
- return ONIGERR_TOO_MANY_MULTI_BYTE_RANGES;
-
- if (inc_n != 1) {
- if (from > data[low*2])
- from = data[low*2];
- if (to < data[(high - 1)*2 + 1])
- to = data[(high - 1)*2 + 1];
- }
-
- if (inc_n != 0 && (OnigCodePoint )high < n) {
- int from_pos = SIZE_CODE_POINT * (1 + high * 2);
- int to_pos = SIZE_CODE_POINT * (1 + (low + 1) * 2);
- int size = (n - high) * 2 * SIZE_CODE_POINT;
-
- if (inc_n > 0) {
- BBUF_MOVE_RIGHT(bbuf, from_pos, to_pos, size);
- }
- else {
- BBUF_MOVE_LEFT_REDUCE(bbuf, from_pos, to_pos);
- }
- }
-
- pos = SIZE_CODE_POINT * (1 + low * 2);
- BBUF_ENSURE_SIZE(bbuf, pos + SIZE_CODE_POINT * 2);
- BBUF_WRITE_CODE_POINT(bbuf, pos, from);
- BBUF_WRITE_CODE_POINT(bbuf, pos + SIZE_CODE_POINT, to);
- n += inc_n;
- BBUF_WRITE_CODE_POINT(bbuf, 0, n);
-
- return 0;
-}
-
-static int
-add_code_range(BBuf** pbuf, ScanEnv* env, OnigCodePoint from, OnigCodePoint to)
-{
- if (from > to) {
- if (IS_SYNTAX_BV(env->syntax, ONIG_SYN_ALLOW_EMPTY_RANGE_IN_CC))
- return 0;
- else
- return ONIGERR_EMPTY_RANGE_IN_CHAR_CLASS;
- }
-
- return add_code_range_to_buf(pbuf, from, to);
-}
-
-static int
-not_code_range_buf(BBuf* bbuf, BBuf** pbuf)
-{
- int r, i, n;
- OnigCodePoint pre, from, to, *data;
-
- *pbuf = (BBuf* )NULL;
- if (IS_NULL(bbuf)) {
- set_all:
- return SET_ALL_MULTI_BYTE_RANGE(pbuf);
- }
-
- data = (OnigCodePoint* )(bbuf->p);
- GET_CODE_POINT(n, data);
- data++;
- if (n <= 0) goto set_all;
-
- r = 0;
- pre = 0x80;
- for (i = 0; i < n; i++) {
- from = data[i*2];
- to = data[i*2+1];
- if (pre <= from - 1) {
- r = add_code_range_to_buf(pbuf, pre, from - 1);
- if (r != 0) return r;
- }
- if (to == ~((OnigCodePoint )0)) break;
- pre = to + 1;
- }
- if (to < ~((OnigCodePoint )0)) {
- r = add_code_range_to_buf(pbuf, to + 1, ~((OnigCodePoint )0));
- }
- return r;
-}
-
-#define SWAP_BBUF_NOT(bbuf1, not1, bbuf2, not2) do {\
- BBuf *tbuf; \
- int tnot; \
- tnot = not1; not1 = not2; not2 = tnot; \
- tbuf = bbuf1; bbuf1 = bbuf2; bbuf2 = tbuf; \
-} while (0)
-
-static int
-or_code_range_buf(BBuf* bbuf1, int not1, BBuf* bbuf2, int not2, BBuf** pbuf)
-{
- int r;
- OnigCodePoint i, n1, *data1;
- OnigCodePoint from, to;
-
- *pbuf = (BBuf* )NULL;
- if (IS_NULL(bbuf1) && IS_NULL(bbuf2)) {
- if (not1 != 0 || not2 != 0)
- return SET_ALL_MULTI_BYTE_RANGE(pbuf);
- return 0;
- }
-
- r = 0;
- if (IS_NULL(bbuf2))
- SWAP_BBUF_NOT(bbuf1, not1, bbuf2, not2);
-
- if (IS_NULL(bbuf1)) {
- if (not1 != 0) {
- return SET_ALL_MULTI_BYTE_RANGE(pbuf);
- }
- else {
- if (not2 == 0) {
- return bbuf_clone(pbuf, bbuf2);
- }
- else {
- return not_code_range_buf(bbuf2, pbuf);
- }
- }
- }
-
- if (not1 != 0)
- SWAP_BBUF_NOT(bbuf1, not1, bbuf2, not2);
-
- data1 = (OnigCodePoint* )(bbuf1->p);
- GET_CODE_POINT(n1, data1);
- data1++;
-
- if (not2 == 0 && not1 == 0) { /* 1 OR 2 */
- r = bbuf_clone(pbuf, bbuf2);
- }
- else if (not1 == 0) { /* 1 OR (not 2) */
- r = not_code_range_buf(bbuf2, pbuf);
- }
- if (r != 0) return r;
-
- for (i = 0; i < n1; i++) {
- from = data1[i*2];
- to = data1[i*2+1];
- r = add_code_range_to_buf(pbuf, from, to);
- if (r != 0) return r;
- }
- return 0;
-}
-
-static int
-and_code_range1(BBuf** pbuf, OnigCodePoint from1, OnigCodePoint to1,
- OnigCodePoint* data, int n)
-{
- int i, r;
- OnigCodePoint from2, to2;
-
- for (i = 0; i < n; i++) {
- from2 = data[i*2];
- to2 = data[i*2+1];
- if (from2 < from1) {
- if (to2 < from1) continue;
- else {
- from1 = to2 + 1;
- }
- }
- else if (from2 <= to1) {
- if (to2 < to1) {
- if (from1 <= from2 - 1) {
- r = add_code_range_to_buf(pbuf, from1, from2-1);
- if (r != 0) return r;
- }
- from1 = to2 + 1;
- }
- else {
- to1 = from2 - 1;
- }
- }
- else {
- from1 = from2;
- }
- if (from1 > to1) break;
- }
- if (from1 <= to1) {
- r = add_code_range_to_buf(pbuf, from1, to1);
- if (r != 0) return r;
- }
- return 0;
-}
-
-static int
-and_code_range_buf(BBuf* bbuf1, int not1, BBuf* bbuf2, int not2, BBuf** pbuf)
-{
- int r;
- OnigCodePoint i, j, n1, n2, *data1, *data2;
- OnigCodePoint from, to, from1, to1, from2, to2;
-
- *pbuf = (BBuf* )NULL;
- if (IS_NULL(bbuf1)) {
- if (not1 != 0 && IS_NOT_NULL(bbuf2)) /* not1 != 0 -> not2 == 0 */
- return bbuf_clone(pbuf, bbuf2);
- return 0;
- }
- else if (IS_NULL(bbuf2)) {
- if (not2 != 0)
- return bbuf_clone(pbuf, bbuf1);
- return 0;
- }
-
- if (not1 != 0)
- SWAP_BBUF_NOT(bbuf1, not1, bbuf2, not2);
-
- data1 = (OnigCodePoint* )(bbuf1->p);
- data2 = (OnigCodePoint* )(bbuf2->p);
- GET_CODE_POINT(n1, data1);
- GET_CODE_POINT(n2, data2);
- data1++;
- data2++;
-
- if (not2 == 0 && not1 == 0) { /* 1 AND 2 */
- for (i = 0; i < n1; i++) {
- from1 = data1[i*2];
- to1 = data1[i*2+1];
- for (j = 0; j < n2; j++) {
- from2 = data2[j*2];
- to2 = data2[j*2+1];
- if (from2 > to1) break;
- if (to2 < from1) continue;
- from = MAX(from1, from2);
- to = MIN(to1, to2);
- r = add_code_range_to_buf(pbuf, from, to);
- if (r != 0) return r;
- }
- }
- }
- else if (not1 == 0) { /* 1 AND (not 2) */
- for (i = 0; i < n1; i++) {
- from1 = data1[i*2];
- to1 = data1[i*2+1];
- r = and_code_range1(pbuf, from1, to1, data2, n2);
- if (r != 0) return r;
- }
- }
-
- return 0;
-}
-
-static int
-and_cclass(CClassNode* dest, CClassNode* cc, OnigEncoding enc)
-{
- int r, not1, not2;
- BBuf *buf1, *buf2, *pbuf;
- BitSetRef bsr1, bsr2;
- BitSet bs1, bs2;
-
- not1 = dest->not;
- bsr1 = dest->bs;
- buf1 = dest->mbuf;
- not2 = cc->not;
- bsr2 = cc->bs;
- buf2 = cc->mbuf;
-
- if (not1 != 0) {
- bitset_invert_to(bsr1, bs1);
- bsr1 = bs1;
- }
- if (not2 != 0) {
- bitset_invert_to(bsr2, bs2);
- bsr2 = bs2;
- }
- bitset_and(bsr1, bsr2);
- if (bsr1 != dest->bs) {
- bitset_copy(dest->bs, bsr1);
- bsr1 = dest->bs;
- }
- if (not1 != 0) {
- bitset_invert(dest->bs);
- }
-
- if (! ONIGENC_IS_SINGLEBYTE(enc)) {
- if (not1 != 0 && not2 != 0) {
- r = or_code_range_buf(buf1, 0, buf2, 0, &pbuf);
- }
- else {
- r = and_code_range_buf(buf1, not1, buf2, not2, &pbuf);
- if (r == 0 && not1 != 0) {
- BBuf *tbuf;
- r = not_code_range_buf(pbuf, &tbuf);
- if (r != 0) {
- bbuf_free(pbuf);
- return r;
- }
- bbuf_free(pbuf);
- pbuf = tbuf;
- }
- }
- if (r != 0) return r;
-
- dest->mbuf = pbuf;
- bbuf_free(buf1);
- return r;
- }
- return 0;
-}
-
-static int
-or_cclass(CClassNode* dest, CClassNode* cc, OnigEncoding enc)
-{
- int r, not1, not2;
- BBuf *buf1, *buf2, *pbuf;
- BitSetRef bsr1, bsr2;
- BitSet bs1, bs2;
-
- not1 = dest->not;
- bsr1 = dest->bs;
- buf1 = dest->mbuf;
- not2 = cc->not;
- bsr2 = cc->bs;
- buf2 = cc->mbuf;
-
- if (not1 != 0) {
- bitset_invert_to(bsr1, bs1);
- bsr1 = bs1;
- }
- if (not2 != 0) {
- bitset_invert_to(bsr2, bs2);
- bsr2 = bs2;
- }
- bitset_or(bsr1, bsr2);
- if (bsr1 != dest->bs) {
- bitset_copy(dest->bs, bsr1);
- bsr1 = dest->bs;
- }
- if (not1 != 0) {
- bitset_invert(dest->bs);
- }
-
- if (! ONIGENC_IS_SINGLEBYTE(enc)) {
- if (not1 != 0 && not2 != 0) {
- r = and_code_range_buf(buf1, 0, buf2, 0, &pbuf);
- }
- else {
- r = or_code_range_buf(buf1, not1, buf2, not2, &pbuf);
- if (r == 0 && not1 != 0) {
- BBuf *tbuf;
- r = not_code_range_buf(pbuf, &tbuf);
- if (r != 0) {
- bbuf_free(pbuf);
- return r;
- }
- bbuf_free(pbuf);
- pbuf = tbuf;
- }
- }
- if (r != 0) return r;
-
- dest->mbuf = pbuf;
- bbuf_free(buf1);
- return r;
- }
- else
- return 0;
-}
-
-static int
-conv_backslash_value(int c, ScanEnv* env)
-{
- if (IS_SYNTAX_OP(env->syntax, ONIG_SYN_OP_ESC_CONTROL_CHARS)) {
- switch (c) {
- case 'n': return '\n';
- case 't': return '\t';
- case 'r': return '\r';
- case 'f': return '\f';
- case 'a': return '\007';
- case 'b': return '\010';
- case 'e': return '\033';
- case 'v':
- if (IS_SYNTAX_OP2(env->syntax, ONIG_SYN_OP2_ESC_V_VTAB))
- return '\v';
- break;
-
- default:
- break;
- }
- }
- return c;
-}
-
-static int
-is_invalid_qualifier_target(Node* node)
-{
- switch (NTYPE(node)) {
- case N_ANCHOR:
- return 1;
- break;
-
- case N_EFFECT:
- if (NEFFECT(node).type == EFFECT_OPTION)
- return is_invalid_qualifier_target(NEFFECT(node).target);
- break;
-
- case N_LIST: /* ex. (?:\G\A)* */
- do {
- if (! is_invalid_qualifier_target(NCONS(node).left)) return 0;
- } while (IS_NOT_NULL(node = NCONS(node).right));
- return 0;
- break;
-
- case N_ALT: /* ex. (?:abc|\A)* */
- do {
- if (is_invalid_qualifier_target(NCONS(node).left)) return 1;
- } while (IS_NOT_NULL(node = NCONS(node).right));
- break;
-
- default:
- break;
- }
- return 0;
-}
-
-/* ?:0, *:1, +:2, ??:3, *?:4, +?:5 */
-static int
-popular_qualifier_num(QualifierNode* qf)
-{
- if (qf->greedy) {
- if (qf->lower == 0) {
- if (qf->upper == 1) return 0;
- else if (IS_REPEAT_INFINITE(qf->upper)) return 1;
- }
- else if (qf->lower == 1) {
- if (IS_REPEAT_INFINITE(qf->upper)) return 2;
- }
- }
- else {
- if (qf->lower == 0) {
- if (qf->upper == 1) return 3;
- else if (IS_REPEAT_INFINITE(qf->upper)) return 4;
- }
- else if (qf->lower == 1) {
- if (IS_REPEAT_INFINITE(qf->upper)) return 5;
- }
- }
- return -1;
-}
-
-extern void
-onig_reduce_nested_qualifier(Node* pnode, Node* cnode)
-{
-#define NQ_ASIS 0 /* as is */
-#define NQ_DEL 1 /* delete parent */
-#define NQ_A 2 /* to '*' */
-#define NQ_AQ 3 /* to '*?' */
-#define NQ_QQ 4 /* to '??' */
-#define NQ_P_QQ 5 /* to '+)??' */
-#define NQ_PQ_Q 6 /* to '+?)?' */
-
- static char reduces[][6] = {
- {NQ_DEL, NQ_A, NQ_A, NQ_QQ, NQ_AQ, NQ_ASIS}, /* '?' */
- {NQ_DEL, NQ_DEL, NQ_DEL, NQ_P_QQ, NQ_P_QQ, NQ_DEL}, /* '*' */
- {NQ_A, NQ_A, NQ_DEL, NQ_ASIS, NQ_P_QQ, NQ_DEL}, /* '+' */
- {NQ_DEL, NQ_AQ, NQ_AQ, NQ_DEL, NQ_AQ, NQ_AQ}, /* '??' */
- {NQ_DEL, NQ_DEL, NQ_DEL, NQ_DEL, NQ_DEL, NQ_DEL}, /* '*?' */
- {NQ_ASIS, NQ_PQ_Q, NQ_DEL, NQ_AQ, NQ_AQ, NQ_DEL} /* '+?' */
- };
-
- int pnum, cnum;
- QualifierNode *p, *c;
-
- p = &(NQUALIFIER(pnode));
- c = &(NQUALIFIER(cnode));
- pnum = popular_qualifier_num(p);
- cnum = popular_qualifier_num(c);
-
- switch(reduces[cnum][pnum]) {
- case NQ_DEL:
- *p = *c;
- break;
- case NQ_A:
- p->target = c->target;
- p->lower = 0; p->upper = REPEAT_INFINITE; p->greedy = 1;
- break;
- case NQ_AQ:
- p->target = c->target;
- p->lower = 0; p->upper = REPEAT_INFINITE; p->greedy = 0;
- break;
- case NQ_QQ:
- p->target = c->target;
- p->lower = 0; p->upper = 1; p->greedy = 0;
- break;
- case NQ_P_QQ:
- p->target = cnode;
- p->lower = 0; p->upper = 1; p->greedy = 0;
- c->lower = 1; c->upper = REPEAT_INFINITE; c->greedy = 1;
- return ;
- break;
- case NQ_PQ_Q:
- p->target = cnode;
- p->lower = 0; p->upper = 1; p->greedy = 1;
- c->lower = 1; c->upper = REPEAT_INFINITE; c->greedy = 0;
- return ;
- break;
- case NQ_ASIS:
- p->target = cnode;
- return ;
- break;
- }
-
- c->target = NULL_NODE;
- onig_node_free(cnode);
-}
-
-
-enum TokenSyms {
- TK_EOT = 0, /* end of token */
- TK_BYTE = 1,
- TK_RAW_BYTE = 2,
- TK_CODE_POINT,
- TK_ANYCHAR,
- TK_CHAR_TYPE,
- TK_BACKREF,
- TK_CALL,
- TK_ANCHOR,
- TK_OP_REPEAT,
- TK_INTERVAL,
- TK_ANYCHAR_ANYTIME, /* SQL '%' == .* */
- TK_ALT,
- TK_SUBEXP_OPEN,
- TK_SUBEXP_CLOSE,
- TK_CC_OPEN,
- TK_QUOTE_OPEN,
- TK_CHAR_PROPERTY, /* \p{...}, \P{...} */
- /* in cc */
- TK_CC_CLOSE,
- TK_CC_RANGE,
- TK_POSIX_BRACKET_OPEN,
- TK_CC_AND, /* && */
- TK_CC_CC_OPEN /* [ */
-};
-
-typedef struct {
- enum TokenSyms type;
- int escaped;
- int base; /* is number: 8, 16 (used in [....]) */
- UChar* backp;
- union {
- int c;
- OnigCodePoint code;
- int anchor;
- int subtype;
- struct {
- int lower;
- int upper;
- int greedy;
- int possessive;
- } repeat;
- struct {
- int num;
- int ref1;
- int* refs;
- int by_name;
- } backref;
- struct {
- UChar* name;
- UChar* name_end;
- } call;
- struct {
- int not;
- } prop;
- } u;
-} OnigToken;
-
-
-static int
-fetch_range_qualifier(UChar** src, UChar* end, OnigToken* tok, ScanEnv* env)
-{
- int low, up, syn_allow, non_low = 0;
- int c;
- UChar* p = *src;
-
- syn_allow = IS_SYNTAX_BV(env->syntax, ONIG_SYN_ALLOW_INVALID_INTERVAL);
-
- if (PEND) {
- if (syn_allow)
- return 1; /* "....{" : OK! */
- else
- return ONIGERR_END_PATTERN_AT_LEFT_BRACE; /* "....{" syntax error */
- }
-
- if (! syn_allow) {
- c = PPEEK;
- if (c == ')' || c == '(' || c == '|') {
- return ONIGERR_END_PATTERN_AT_LEFT_BRACE;
- }
- }
-
- low = onig_scan_unsigned_number(&p, end, env->enc);
- if (low < 0) return ONIGERR_TOO_BIG_NUMBER_FOR_REPEAT_RANGE;
- if (low > ONIG_MAX_REPEAT_NUM)
- return ONIGERR_TOO_BIG_NUMBER_FOR_REPEAT_RANGE;
-
- if (p == *src) { /* can't read low */
- if (IS_SYNTAX_BV(env->syntax, ONIG_SYN_ALLOW_INTERVAL_LOW_ABBREV)) {
- /* allow {,n} as {0,n} */
- low = 0;
- non_low = 1;
- }
- else
- goto invalid;
- }
-
- if (PEND) goto invalid;
- PFETCH(c);
- if (c == ',') {
- UChar* prev = p;
- up = onig_scan_unsigned_number(&p, end, env->enc);
- if (up < 0) return ONIGERR_TOO_BIG_NUMBER_FOR_REPEAT_RANGE;
- if (up > ONIG_MAX_REPEAT_NUM)
- return ONIGERR_TOO_BIG_NUMBER_FOR_REPEAT_RANGE;
-
- if (p == prev) {
- if (non_low != 0)
- goto invalid;
- up = REPEAT_INFINITE; /* {n,} : {n,infinite} */
- }
- }
- else {
- if (non_low != 0)
- goto invalid;
-
- PUNFETCH;
- up = low; /* {n} : exact n times */
- }
-
- if (PEND) goto invalid;
- PFETCH(c);
- if (IS_SYNTAX_OP(env->syntax, ONIG_SYN_OP_ESC_BRACE_INTERVAL)) {
- if (c != MC_ESC) goto invalid;
- PFETCH(c);
- }
- if (c != '}') goto invalid;
-
- if (!IS_REPEAT_INFINITE(up) && low > up) {
- return ONIGERR_UPPER_SMALLER_THAN_LOWER_IN_REPEAT_RANGE;
- }
-
- tok->type = TK_INTERVAL;
- tok->u.repeat.lower = low;
- tok->u.repeat.upper = up;
- *src = p;
- return 0;
-
- invalid:
- if (syn_allow)
- return 1; /* OK */
- else
- return ONIGERR_INVALID_REPEAT_RANGE_PATTERN;
-}
-
-/* \M-, \C-, \c, or \... */
-static int
-fetch_escaped_value(UChar** src, UChar* end, ScanEnv* env)
-{
- int c;
- UChar* p = *src;
-
- if (PEND) return ONIGERR_END_PATTERN_AT_BACKSLASH;
-
- PFETCH(c);
- switch (c) {
- case 'M':
- if (IS_SYNTAX_OP2(env->syntax, ONIG_SYN_OP2_ESC_CAPITAL_M_BAR_META)) {
- if (PEND) return ONIGERR_END_PATTERN_AT_META;
- PFETCH(c);
- if (c != '-') return ONIGERR_META_CODE_SYNTAX;
- if (PEND) return ONIGERR_END_PATTERN_AT_META;
- PFETCH(c);
- if (c == MC_ESC) {
- c = fetch_escaped_value(&p, end, env);
- if (c < 0) return c;
- }
- c = ((c & 0xff) | 0x80);
- }
- else
- goto backslash;
- break;
-
- case 'C':
- if (IS_SYNTAX_OP2(env->syntax, ONIG_SYN_OP2_ESC_CAPITAL_C_BAR_CONTROL)) {
- if (PEND) return ONIGERR_END_PATTERN_AT_CONTROL;
- PFETCH(c);
- if (c != '-') return ONIGERR_CONTROL_CODE_SYNTAX;
- goto control;
- }
- else
- goto backslash;
-
- case 'c':
- if (IS_SYNTAX_OP(env->syntax, ONIG_SYN_OP_ESC_C_CONTROL)) {
- control:
- if (PEND) return ONIGERR_END_PATTERN_AT_CONTROL;
- PFETCH(c);
- if (c == MC_ESC) {
- c = fetch_escaped_value(&p, end, env);
- if (c < 0) return c;
- }
- else if (c == '?')
- c = 0177;
- else
- c &= 0x9f;
- break;
- }
- /* fall through */
-
- default:
- {
- backslash:
- c = conv_backslash_value(c, env);
- }
- break;
- }
-
- *src = p;
- return c;
-}
-
-static int fetch_token(OnigToken* tok, UChar** src, UChar* end, ScanEnv* env);
-
-#ifdef USE_NAMED_GROUP
-/*
- def: 0 -> define name (don't allow number name)
- 1 -> reference name (allow number name)
-*/
-static int
-fetch_name(UChar** src, UChar* end, UChar** rname_end, ScanEnv* env, int ref)
-{
- int r, len, is_num;
- int c = 0;
- UChar *name_end;
- UChar *p = *src;
-
- name_end = end;
- r = 0;
- is_num = 0;
- if (PEND) {
- return ONIGERR_EMPTY_GROUP_NAME;
- }
- else {
- PFETCH(c);
- if (c == '>')
- return ONIGERR_EMPTY_GROUP_NAME;
-
- if (ONIGENC_IS_CODE_DIGIT(env->enc, c)) {
- if (ref == 1)
- is_num = 1;
- else {
- r = ONIGERR_INVALID_GROUP_NAME;
- }
- }
- len = enc_len(env->enc, c);
- while (!PEND && len-- > 1)
- PFETCH(c);
- }
-
- while (!PEND) {
- name_end = p;
- PFETCH(c);
- if (c == '>' || c == ')') break;
-
- len = enc_len(env->enc, c);
- if (is_num == 1) {
- if (! ONIGENC_IS_CODE_DIGIT(env->enc, c)) {
- if (!ONIGENC_IS_CODE_ALPHA(env->enc, c) && c != '_')
- r = ONIGERR_INVALID_CHAR_IN_GROUP_NAME;
- else
- r = ONIGERR_INVALID_GROUP_NAME;
- }
- }
- else {
- if (len == 1) {
- if (!ONIGENC_IS_CODE_ALPHA(env->enc, c) &&
- !ONIGENC_IS_CODE_DIGIT(env->enc, c) &&
- c != '_') {
- r = ONIGERR_INVALID_CHAR_IN_GROUP_NAME;
- }
- }
- }
-
- while (!PEND && len-- > 1)
- PFETCH(c);
- }
- if (c != '>') {
- r = ONIGERR_INVALID_GROUP_NAME;
- name_end = end;
- }
- else {
- c = **src;
- if (ONIGENC_IS_CODE_UPPER(env->enc, c))
- r = ONIGERR_INVALID_GROUP_NAME;
- }
-
- if (r == 0) {
- *rname_end = name_end;
- *src = p;
- return 0;
- }
- else {
- onig_scan_env_set_error_string(env, r, *src, name_end);
- return r;
- }
-}
-#else
-static int
-fetch_name(UChar** src, UChar* end, UChar** rname_end, ScanEnv* env, int ref)
-{
- int r, len;
- int c = 0;
- UChar *name_end;
- UChar *p = *src;
-
- r = 0;
- while (!PEND) {
- name_end = p;
- PFETCH(c);
- if (enc_len(env->enc, c) > 1)
- r = ONIGERR_INVALID_CHAR_IN_GROUP_NAME;
-
- if (c == '>' || c == ')') break;
- if (! ONIGENC_IS_CODE_DIGIT(env->enc, c))
- r = ONIGERR_INVALID_CHAR_IN_GROUP_NAME;
- }
- if (c != '>') {
- r = ONIGERR_INVALID_GROUP_NAME;
- name_end = end;
- }
-
- if (r == 0) {
- *rname_end = name_end;
- *src = p;
- return 0;
- }
- else {
- err:
- onig_scan_env_set_error_string(env, r, *src, name_end);
- return r;
- }
-}
-#endif
-
-static void
-CC_ESC_WARN(ScanEnv* env, UChar *c)
-{
- if (onig_warn == onig_null_warn) return ;
-
- if (IS_SYNTAX_BV(env->syntax, ONIG_SYN_WARN_CC_OP_NOT_ESCAPED) &&
- IS_SYNTAX_BV(env->syntax, ONIG_SYN_BACKSLASH_ESCAPE_IN_CC)) {
- char buf[WARN_BUFSIZE];
- onig_snprintf_with_pattern(buf, WARN_BUFSIZE, env->enc,
- env->pattern, env->pattern_end,
- "character class has '%s' without escape", c);
- (*onig_warn)(buf);
- }
-}
-
-static void
-CCEND_ESC_WARN(ScanEnv* env, UChar* c)
-{
- if (onig_warn == onig_null_warn) return ;
-
- if (IS_SYNTAX_BV((env)->syntax, ONIG_SYN_WARN_CC_OP_NOT_ESCAPED)) {
- char buf[WARN_BUFSIZE];
- onig_snprintf_with_pattern(buf, WARN_BUFSIZE, (env)->enc,
- (env)->pattern, (env)->pattern_end,
- "regular expression has '%s' without escape", c);
- (*onig_warn)(buf);
- }
-}
-
-static UChar*
-find_str_position(OnigCodePoint s[], int n, UChar* from, UChar* to,
- UChar **next, OnigEncoding enc)
-{
- int i;
- OnigCodePoint x;
- UChar *q;
- UChar *p = from;
-
- while (p < to) {
- x = ONIGENC_MBC_TO_CODE(enc, p, to);
- q = p + enc_len(enc, *p);
- if (x == s[0]) {
- for (i = 1; i < n && q < to; i++) {
- x = ONIGENC_MBC_TO_CODE(enc, q, to);
- if (x != s[i]) break;
- q += enc_len(enc, *q);
- }
- if (i >= n) {
- if (IS_NOT_NULL(next))
- *next = q;
- return p;
- }
- }
- p = q;
- }
- return NULL_UCHARP;
-}
-
-static int
-str_exist_check_with_esc(OnigCodePoint s[], int n, UChar* from, UChar* to,
- OnigCodePoint bad, OnigEncoding enc)
-{
- int i, in_esc;
- OnigCodePoint x;
- UChar *q;
- UChar *p = from;
-
- in_esc = 0;
- while (p < to) {
- if (in_esc) {
- in_esc = 0;
- p += enc_len(enc, *p);
- }
- else {
- x = ONIGENC_MBC_TO_CODE(enc, p, to);
- q = p + enc_len(enc, *p);
- if (x == s[0]) {
- for (i = 1; i < n && q < to; i++) {
- x = ONIGENC_MBC_TO_CODE(enc, q, to);
- if (x != s[i]) break;
- q += enc_len(enc, *q);
- }
- if (i >= n) return 1;
- p += enc_len(enc, *p);
- }
- else {
- x = ONIGENC_MBC_TO_CODE(enc, p, to);
- if (x == bad) return 0;
- else if (x == MC_ESC) in_esc = 1;
- p = q;
- }
- }
- }
- return 0;
-}
-
-static int
-fetch_token_in_cc(OnigToken* tok, UChar** src, UChar* end, ScanEnv* env)
-{
- int c, num;
- OnigSyntaxType* syn = env->syntax;
- UChar* prev;
- UChar* p = *src;
-
- if (PEND) {
- tok->type = TK_EOT;
- return tok->type;
- }
-
- PFETCH(c);
- tok->type = TK_BYTE;
- tok->base = 0;
- tok->u.c = c;
- if (c == ']') {
- tok->type = TK_CC_CLOSE;
- }
- else if (c == '-') {
- tok->type = TK_CC_RANGE;
- }
- else if (c == MC_ESC) {
- if (! IS_SYNTAX_BV(syn, ONIG_SYN_BACKSLASH_ESCAPE_IN_CC))
- goto end;
-
- if (PEND) return ONIGERR_END_PATTERN_AT_BACKSLASH;
-
- PFETCH(c);
- tok->escaped = 1;
- tok->u.c = c;
- switch (c) {
- case 'w':
- tok->type = TK_CHAR_TYPE;
- tok->u.subtype = CTYPE_WORD;
- break;
- case 'W':
- tok->type = TK_CHAR_TYPE;
- tok->u.subtype = CTYPE_NOT_WORD;
- break;
- case 'd':
- tok->type = TK_CHAR_TYPE;
- tok->u.subtype = CTYPE_DIGIT;
- break;
- case 'D':
- tok->type = TK_CHAR_TYPE;
- tok->u.subtype = CTYPE_NOT_DIGIT;
- break;
- case 's':
- tok->type = TK_CHAR_TYPE;
- tok->u.subtype = CTYPE_WHITE_SPACE;
- break;
- case 'S':
- tok->type = TK_CHAR_TYPE;
- tok->u.subtype = CTYPE_NOT_WHITE_SPACE;
- break;
-
- case 'p':
- case 'P':
- if (PPEEK == '{' &&
- IS_SYNTAX_OP2(syn, ONIG_SYN_OP2_ESC_P_CHAR_PROPERTY)) {
- PINC;
- tok->type = TK_CHAR_PROPERTY;
- tok->u.prop.not = (c == 'P' ? 1 : 0);
- }
- break;
-
- case 'x':
- if (PEND) break;
-
- prev = p;
- if (PPEEK == '{' && IS_SYNTAX_OP(syn, ONIG_SYN_OP_ESC_X_BRACE_HEX8)) {
- PINC;
- num = scan_unsigned_hexadecimal_number(&p, end, 8, env->enc);
- if (num < 0) return ONIGERR_TOO_BIG_WIDE_CHAR_VALUE;
- if (!PEND && ONIGENC_IS_CODE_XDIGIT(env->enc, *p) && p - prev >= 9)
- return ONIGERR_TOO_LONG_WIDE_CHAR_VALUE;
-
- if (p > prev + 1 && !PEND && PPEEK == '}') {
- PINC;
- tok->type = TK_CODE_POINT;
- tok->base = 16;
- tok->u.code = (OnigCodePoint )num;
- }
- else {
- /* can't read nothing or invalid format */
- p = prev;
- }
- }
- else if (IS_SYNTAX_OP(syn, ONIG_SYN_OP_ESC_X_HEX2)) {
- num = scan_unsigned_hexadecimal_number(&p, end, 2, env->enc);
- if (num < 0) return ONIGERR_TOO_BIG_NUMBER;
- if (p == prev) { /* can't read nothing. */
- num = 0; /* but, it's not error */
- }
- tok->type = TK_RAW_BYTE;
- tok->base = 16;
- tok->u.c = num;
- }
- break;
-
- case 'u':
- if (PEND) break;
-
- prev = p;
- if (IS_SYNTAX_OP2(syn, ONIG_SYN_OP2_ESC_U_HEX4)) {
- num = scan_unsigned_hexadecimal_number(&p, end, 4, env->enc);
- if (num < 0) return ONIGERR_TOO_BIG_NUMBER;
- if (p == prev) { /* can't read nothing. */
- num = 0; /* but, it's not error */
- }
- tok->type = TK_RAW_BYTE;
- tok->base = 16;
- tok->u.c = num;
- }
- break;
-
- case '0':
- case '1': case '2': case '3': case '4': case '5': case '6': case '7':
- if (IS_SYNTAX_OP(syn, ONIG_SYN_OP_ESC_OCTAL3)) {
- PUNFETCH;
- prev = p;
- num = scan_unsigned_octal_number(&p, end, 3, env->enc);
- if (num < 0) return ONIGERR_TOO_BIG_NUMBER;
- if (p == prev) { /* can't read nothing. */
- num = 0; /* but, it's not error */
- }
- tok->type = TK_RAW_BYTE;
- tok->base = 8;
- tok->u.c = num;
- }
- break;
-
- default:
- PUNFETCH;
- num = fetch_escaped_value(&p, end, env);
- if (num < 0) return num;
- if (tok->u.c != num) {
- tok->u.c = num;
- tok->type = TK_RAW_BYTE;
- }
- break;
- }
- }
- else if (c == '[') {
- if (IS_SYNTAX_OP(syn, ONIG_SYN_OP_POSIX_BRACKET) && PPEEK == ':') {
- OnigCodePoint send[] = { (OnigCodePoint )':', (OnigCodePoint )']' };
- tok->backp = p; /* point at '[' is readed */
- PINC;
- if (str_exist_check_with_esc(send, 2, p, end, (OnigCodePoint )']',
- env->enc)) {
- tok->type = TK_POSIX_BRACKET_OPEN;
- }
- else {
- PUNFETCH;
- goto cc_in_cc;
- }
- }
- else {
- cc_in_cc:
- if (IS_SYNTAX_OP2(syn, ONIG_SYN_OP2_CCLASS_SET_OP)) {
- tok->type = TK_CC_CC_OPEN;
- }
- else {
- CC_ESC_WARN(env, "[");
- }
- }
- }
- else if (c == '&') {
- if (IS_SYNTAX_OP2(syn, ONIG_SYN_OP2_CCLASS_SET_OP) &&
- !PEND && PPEEK == '&') {
- PINC;
- tok->type = TK_CC_AND;
- }
- }
-
- end:
- *src = p;
- return tok->type;
-}
-
-static int
-fetch_token(OnigToken* tok, UChar** src, UChar* end, ScanEnv* env)
-{
- int r, c, num;
- OnigSyntaxType* syn = env->syntax;
- UChar* prev;
- UChar* p = *src;
-
- start:
- if (PEND) {
- tok->type = TK_EOT;
- return tok->type;
- }
-
- tok->type = TK_BYTE;
- tok->base = 0;
- PFETCH(c);
- if (c == MC_ESC) {
- if (PEND) return ONIGERR_END_PATTERN_AT_BACKSLASH;
-
- PFETCH(c);
- tok->u.c = c;
- tok->escaped = 1;
- switch (c) {
- case '*':
- if (! IS_SYNTAX_OP(syn, ONIG_SYN_OP_ESC_ASTERISK_ZERO_INF)) break;
- tok->type = TK_OP_REPEAT;
- tok->u.repeat.lower = 0;
- tok->u.repeat.upper = REPEAT_INFINITE;
- goto greedy_check;
- break;
-
- case '+':
- if (! IS_SYNTAX_OP(syn, ONIG_SYN_OP_ESC_PLUS_ONE_INF)) break;
- tok->type = TK_OP_REPEAT;
- tok->u.repeat.lower = 1;
- tok->u.repeat.upper = REPEAT_INFINITE;
- goto greedy_check;
- break;
-
- case '?':
- if (! IS_SYNTAX_OP(syn, ONIG_SYN_OP_ESC_QMARK_ZERO_ONE)) break;
- tok->type = TK_OP_REPEAT;
- tok->u.repeat.lower = 0;
- tok->u.repeat.upper = 1;
- greedy_check:
- if (!PEND && PPEEK == '?' &&
- IS_SYNTAX_OP(syn, ONIG_SYN_OP_QMARK_NON_GREEDY)) {
- PFETCH(c);
- tok->u.repeat.greedy = 0;
- tok->u.repeat.possessive = 0;
- }
- else if (!PEND && PPEEK == '+' &&
- ((IS_SYNTAX_OP2(syn, ONIG_SYN_OP2_PLUS_POSSESSIVE_REPEAT) &&
- tok->type != TK_INTERVAL) ||
- (IS_SYNTAX_OP2(syn, ONIG_SYN_OP2_PLUS_POSSESSIVE_INTERVAL) &&
- tok->type == TK_INTERVAL))) {
- PFETCH(c);
- tok->u.repeat.greedy = 1;
- tok->u.repeat.possessive = 1;
- }
- else {
- tok->u.repeat.greedy = 1;
- tok->u.repeat.possessive = 0;
- }
- break;
-
- case '{':
- if (! IS_SYNTAX_OP(syn, ONIG_SYN_OP_ESC_BRACE_INTERVAL)) break;
- tok->backp = p;
- r = fetch_range_qualifier(&p, end, tok, env);
- if (r < 0) return r; /* error */
- if (r > 0) {
- /* normal char */
- }
- else
- goto greedy_check;
- break;
-
- case '|':
- if (! IS_SYNTAX_OP(syn, ONIG_SYN_OP_ESC_VBAR_ALT)) break;
- tok->type = TK_ALT;
- break;
-
- case '(':
- if (! IS_SYNTAX_OP(syn, ONIG_SYN_OP_ESC_LPAREN_SUBEXP)) break;
- tok->type = TK_SUBEXP_OPEN;
- break;
-
- case ')':
- if (! IS_SYNTAX_OP(syn, ONIG_SYN_OP_ESC_LPAREN_SUBEXP)) break;
- tok->type = TK_SUBEXP_CLOSE;
- break;
-
- case 'w':
- if (! IS_SYNTAX_OP(syn, ONIG_SYN_OP_ESC_W_WORD)) break;
- tok->type = TK_CHAR_TYPE;
- tok->u.subtype = CTYPE_WORD;
- break;
-
- case 'W':
- if (! IS_SYNTAX_OP(syn, ONIG_SYN_OP_ESC_W_WORD)) break;
- tok->type = TK_CHAR_TYPE;
- tok->u.subtype = CTYPE_NOT_WORD;
- break;
-
- case 'b':
- if (! IS_SYNTAX_OP(syn, ONIG_SYN_OP_ESC_B_WORD_BOUND)) break;
- tok->type = TK_ANCHOR;
- tok->u.anchor = ANCHOR_WORD_BOUND;
- break;
-
- case 'B':
- if (! IS_SYNTAX_OP(syn, ONIG_SYN_OP_ESC_B_WORD_BOUND)) break;
- tok->type = TK_ANCHOR;
- tok->u.anchor = ANCHOR_NOT_WORD_BOUND;
- break;
-
-#ifdef USE_WORD_BEGIN_END
- case '<':
- if (! IS_SYNTAX_OP(syn, ONIG_SYN_OP_ESC_LTGT_WORD_BEGIN_END)) break;
- tok->type = TK_ANCHOR;
- tok->u.anchor = ANCHOR_WORD_BEGIN;
- break;
-
- case '>':
- if (! IS_SYNTAX_OP(syn, ONIG_SYN_OP_ESC_LTGT_WORD_BEGIN_END)) break;
- tok->type = TK_ANCHOR;
- tok->u.anchor = ANCHOR_WORD_END;
- break;
-#endif
-
- case 's':
- if (! IS_SYNTAX_OP(syn, ONIG_SYN_OP_ESC_S_WHITE_SPACE)) break;
- tok->type = TK_CHAR_TYPE;
- tok->u.subtype = CTYPE_WHITE_SPACE;
- break;
-
- case 'S':
- if (! IS_SYNTAX_OP(syn, ONIG_SYN_OP_ESC_S_WHITE_SPACE)) break;
- tok->type = TK_CHAR_TYPE;
- tok->u.subtype = CTYPE_NOT_WHITE_SPACE;
- break;
-
- case 'd':
- if (! IS_SYNTAX_OP(syn, ONIG_SYN_OP_ESC_D_DIGIT)) break;
- tok->type = TK_CHAR_TYPE;
- tok->u.subtype = CTYPE_DIGIT;
- break;
-
- case 'D':
- if (! IS_SYNTAX_OP(syn, ONIG_SYN_OP_ESC_D_DIGIT)) break;
- tok->type = TK_CHAR_TYPE;
- tok->u.subtype = CTYPE_NOT_DIGIT;
- break;
-
- case 'A':
- if (! IS_SYNTAX_OP(syn, ONIG_SYN_OP_ESC_AZ_BUF_ANCHOR)) break;
- begin_buf:
- tok->type = TK_ANCHOR;
- tok->u.subtype = ANCHOR_BEGIN_BUF;
- break;
-
- case 'Z':
- if (! IS_SYNTAX_OP(syn, ONIG_SYN_OP_ESC_AZ_BUF_ANCHOR)) break;
- tok->type = TK_ANCHOR;
- tok->u.subtype = ANCHOR_SEMI_END_BUF;
- break;
-
- case 'z':
- if (! IS_SYNTAX_OP(syn, ONIG_SYN_OP_ESC_AZ_BUF_ANCHOR)) break;
- end_buf:
- tok->type = TK_ANCHOR;
- tok->u.subtype = ANCHOR_END_BUF;
- break;
-
- case 'G':
- if (! IS_SYNTAX_OP(syn, ONIG_SYN_OP_ESC_CAPITAL_G_BEGIN_ANCHOR)) break;
- tok->type = TK_ANCHOR;
- tok->u.subtype = ANCHOR_BEGIN_POSITION;
- break;
-
- case '`':
- if (! IS_SYNTAX_OP2(syn, ONIG_SYN_OP2_ESC_GNU_BUF_ANCHOR)) break;
- goto begin_buf;
- break;
-
- case '\'':
- if (! IS_SYNTAX_OP2(syn, ONIG_SYN_OP2_ESC_GNU_BUF_ANCHOR)) break;
- goto end_buf;
- break;
-
- case 'x':
- if (PEND) break;
-
- prev = p;
- if (PPEEK == '{' && IS_SYNTAX_OP(syn, ONIG_SYN_OP_ESC_X_BRACE_HEX8)) {
- PINC;
- num = scan_unsigned_hexadecimal_number(&p, end, 8, env->enc);
- if (num < 0) return ONIGERR_TOO_BIG_WIDE_CHAR_VALUE;
- if (!PEND && ONIGENC_IS_CODE_XDIGIT(env->enc, *p) && p - prev >= 9)
- return ONIGERR_TOO_LONG_WIDE_CHAR_VALUE;
-
- if (p > prev + 1 && !PEND && PPEEK == '}') {
- PINC;
- tok->type = TK_CODE_POINT;
- tok->u.code = (OnigCodePoint )num;
- }
- else {
- /* can't read nothing or invalid format */
- p = prev;
- }
- }
- else if (IS_SYNTAX_OP(syn, ONIG_SYN_OP_ESC_X_HEX2)) {
- num = scan_unsigned_hexadecimal_number(&p, end, 2, env->enc);
- if (num < 0) return ONIGERR_TOO_BIG_NUMBER;
- if (p == prev) { /* can't read nothing. */
- num = 0; /* but, it's not error */
- }
- tok->type = TK_RAW_BYTE;
- tok->base = 16;
- tok->u.c = num;
- }
- break;
-
- case 'u':
- if (PEND) break;
-
- prev = p;
- if (IS_SYNTAX_OP2(syn, ONIG_SYN_OP2_ESC_U_HEX4)) {
- num = scan_unsigned_hexadecimal_number(&p, end, 4, env->enc);
- if (num < 0) return ONIGERR_TOO_BIG_NUMBER;
- if (p == prev) { /* can't read nothing. */
- num = 0; /* but, it's not error */
- }
- tok->type = TK_RAW_BYTE;
- tok->base = 16;
- tok->u.c = num;
- }
- break;
-
- case '1': case '2': case '3': case '4':
- case '5': case '6': case '7': case '8': case '9':
- PUNFETCH;
- prev = p;
- num = onig_scan_unsigned_number(&p, end, env->enc);
- if (num < 0) return ONIGERR_TOO_BIG_NUMBER;
- if (num > ONIG_MAX_BACKREF_NUM) return ONIGERR_TOO_BIG_BACKREF_NUMBER;
-
- if (IS_SYNTAX_OP(syn, ONIG_SYN_OP_DECIMAL_BACKREF) &&
- (num <= env->num_mem || num <= 9)) { /* This spec. from GNU regex */
- if (IS_SYNTAX_BV(syn, ONIG_SYN_STRICT_CHECK_BACKREF)) {
- if (num > env->num_mem || IS_NULL(SCANENV_MEM_NODES(env)[num]))
- return ONIGERR_INVALID_BACKREF;
- }
-
- tok->type = TK_BACKREF;
- tok->u.backref.num = 1;
- tok->u.backref.ref1 = num;
- tok->u.backref.by_name = 0;
- break;
- }
- else if (c == '8' || c == '9') {
- /* normal char */
- p = prev; PINC;
- break;
- }
-
- p = prev;
- /* fall through */
- case '0':
- if (IS_SYNTAX_OP(syn, ONIG_SYN_OP_ESC_OCTAL3)) {
- prev = p;
- num = scan_unsigned_octal_number(&p, end, (c == '0' ? 2:3), env->enc);
- if (num < 0) return ONIGERR_TOO_BIG_NUMBER;
- if (p == prev) { /* can't read nothing. */
- num = 0; /* but, it's not error */
- }
- tok->type = TK_RAW_BYTE;
- tok->base = 8;
- tok->u.c = num;
- }
- else if (c != '0') {
- PINC;
- }
- break;
-
-#ifdef USE_NAMED_GROUP
- case 'k':
- if (IS_SYNTAX_OP2(syn, ONIG_SYN_OP2_ESC_K_NAMED_BACKREF)) {
- PFETCH(c);
- if (c == '<') {
- UChar* name_end;
- int* backs;
-
- prev = p;
- r = fetch_name(&p, end, &name_end, env, 1);
- if (r < 0) return r;
- num = onig_name_to_group_numbers(env->reg, prev, name_end, &backs);
- if (num <= 0) {
- onig_scan_env_set_error_string(env,
- ONIGERR_UNDEFINED_NAME_REFERENCE, prev, name_end);
- return ONIGERR_UNDEFINED_NAME_REFERENCE;
- }
- if (IS_SYNTAX_BV(syn, ONIG_SYN_STRICT_CHECK_BACKREF)) {
- int i;
- for (i = 0; i < num; i++) {
- if (backs[i] > env->num_mem ||
- IS_NULL(SCANENV_MEM_NODES(env)[backs[i]]))
- return ONIGERR_INVALID_BACKREF;
- }
- }
-
- tok->type = TK_BACKREF;
- tok->u.backref.by_name = 1;
- if (num == 1) {
- tok->u.backref.num = 1;
- tok->u.backref.ref1 = backs[0];
- }
- else {
- tok->u.backref.num = num;
- tok->u.backref.refs = backs;
- }
- }
- else
- PUNFETCH;
- }
- break;
-#endif
-
-#ifdef USE_SUBEXP_CALL
- case 'g':
- if (IS_SYNTAX_OP2(syn, ONIG_SYN_OP2_ESC_G_SUBEXP_CALL)) {
- PFETCH(c);
- if (c == '<') {
- UChar* name_end;
-
- prev = p;
- r = fetch_name(&p, end, &name_end, env, 1);
- if (r < 0) return r;
-
- tok->type = TK_CALL;
- tok->u.call.name = prev;
- tok->u.call.name_end = name_end;
- }
- else
- PUNFETCH;
- }
- break;
-#endif
-
- case 'Q':
- if (IS_SYNTAX_OP2(syn, ONIG_SYN_OP2_ESC_CAPITAL_Q_QUOTE)) {
- tok->type = TK_QUOTE_OPEN;
- }
- break;
-
- case 'p':
- case 'P':
- if (PPEEK == '{' &&
- IS_SYNTAX_OP2(syn, ONIG_SYN_OP2_ESC_P_CHAR_PROPERTY)) {
- PINC;
- tok->type = TK_CHAR_PROPERTY;
- tok->u.prop.not = (c == 'P' ? 1 : 0);
- }
- break;
-
- default:
- PUNFETCH;
- num = fetch_escaped_value(&p, end, env);
- if (num < 0) return num;
- /* set_raw: */
- if (tok->u.c != num) {
- tok->type = TK_RAW_BYTE;
- tok->u.c = num;
- }
- break;
- }
- }
- else {
- tok->u.c = c;
- tok->escaped = 0;
-
-#ifdef USE_VARIABLE_META_CHARS
- if ((c != ONIG_INEFFECTIVE_META_CHAR) &&
- IS_SYNTAX_OP(syn, ONIG_SYN_OP_VARIABLE_META_CHARACTERS)) {
- if (c == MC_ANYCHAR)
- goto any_char;
- else if (c == MC_ANYTIME)
- goto anytime;
- else if (c == MC_ZERO_OR_ONE_TIME)
- goto zero_or_one_time;
- else if (c == MC_ONE_OR_MORE_TIME)
- goto one_or_more_time;
- else if (c == MC_ANYCHAR_ANYTIME) {
- tok->type = TK_ANYCHAR_ANYTIME;
- goto out;
- }
- }
-#endif
-
- switch (c) {
- case '.':
- if (! IS_SYNTAX_OP(syn, ONIG_SYN_OP_DOT_ANYCHAR)) break;
- any_char:
- tok->type = TK_ANYCHAR;
- break;
-
- case '*':
- if (! IS_SYNTAX_OP(syn, ONIG_SYN_OP_ASTERISK_ZERO_INF)) break;
- anytime:
- tok->type = TK_OP_REPEAT;
- tok->u.repeat.lower = 0;
- tok->u.repeat.upper = REPEAT_INFINITE;
- goto greedy_check;
- break;
-
- case '+':
- if (! IS_SYNTAX_OP(syn, ONIG_SYN_OP_PLUS_ONE_INF)) break;
- one_or_more_time:
- tok->type = TK_OP_REPEAT;
- tok->u.repeat.lower = 1;
- tok->u.repeat.upper = REPEAT_INFINITE;
- goto greedy_check;
- break;
-
- case '?':
- if (! IS_SYNTAX_OP(syn, ONIG_SYN_OP_QMARK_ZERO_ONE)) break;
- zero_or_one_time:
- tok->type = TK_OP_REPEAT;
- tok->u.repeat.lower = 0;
- tok->u.repeat.upper = 1;
- goto greedy_check;
- break;
-
- case '{':
- if (! IS_SYNTAX_OP(syn, ONIG_SYN_OP_BRACE_INTERVAL)) break;
- tok->backp = p;
- r = fetch_range_qualifier(&p, end, tok, env);
- if (r < 0) return r; /* error */
- if (r > 0) {
- /* normal char */
- }
- else
- goto greedy_check;
- break;
-
- case '|':
- if (! IS_SYNTAX_OP(syn, ONIG_SYN_OP_VBAR_ALT)) break;
- tok->type = TK_ALT;
- break;
-
- case '(':
- if (! IS_SYNTAX_OP(syn, ONIG_SYN_OP_LPAREN_SUBEXP)) break;
- tok->type = TK_SUBEXP_OPEN;
- break;
-
- case ')':
- if (! IS_SYNTAX_OP(syn, ONIG_SYN_OP_LPAREN_SUBEXP)) break;
- tok->type = TK_SUBEXP_CLOSE;
- break;
-
- case '^':
- if (! IS_SYNTAX_OP(syn, ONIG_SYN_OP_LINE_ANCHOR)) break;
- tok->type = TK_ANCHOR;
- tok->u.subtype = (IS_SINGLELINE(env->option)
- ? ANCHOR_BEGIN_BUF : ANCHOR_BEGIN_LINE);
- break;
-
- case '$':
- if (! IS_SYNTAX_OP(syn, ONIG_SYN_OP_LINE_ANCHOR)) break;
- tok->type = TK_ANCHOR;
- tok->u.subtype = (IS_SINGLELINE(env->option)
- ? ANCHOR_END_BUF : ANCHOR_END_LINE);
- break;
-
- case '[':
- if (! IS_SYNTAX_OP(syn, ONIG_SYN_OP_BRACKET_CC)) break;
- tok->type = TK_CC_OPEN;
- break;
-
- case ']':
- if (*src > env->pattern) /* /].../ is allowed. */
- CCEND_ESC_WARN(env, "]");
- break;
-
- case '#':
- if (IS_EXTEND(env->option)) {
- while (!PEND) {
- PFETCH(c);
- if (ONIG_IS_NEWLINE(c))
- break;
- }
- goto start;
- break;
- }
- break;
-
- case ' ': case '\t': case '\n': case '\r': case '\f':
- if (IS_EXTEND(env->option))
- goto start;
- break;
-
- default:
- break;
- }
- }
-
- out:
- *src = p;
- return tok->type;
-}
-
-static int
-add_ctype_to_cc_by_list(CClassNode* cc, int ctype, int not,
- OnigEncoding enc)
-{
- int i, r, nsb, nmb;
- OnigCodePointRange *sbr, *mbr;
- OnigCodePoint j;
-
- r = ONIGENC_GET_CTYPE_CODE_RANGE(enc, ctype, &nsb, &nmb, &sbr, &mbr);
- if (r != 0) return r;
-
- if (not == 0) {
- for (i = 0; i < nsb; i++) {
- for (j = sbr[i].from; j <= sbr[i].to; j++) {
- BITSET_SET_BIT(cc->bs, j);
- }
- }
- for (i = 0; i < nmb; i++) {
- r = add_code_range_to_buf(&(cc->mbuf), mbr[i].from, mbr[i].to);
- if (r != 0) return r;
- }
- }
- else {
- OnigCodePoint prev = 0;
- for (i = 0; i < nsb; i++) {
- for (j = prev; j < sbr[i].from; j++) {
- BITSET_SET_BIT(cc->bs, j);
- }
- prev = sbr[i].to + 1;
- }
- if (prev < 0x7f) {
- for (j = prev; j < 0x7f; j++) {
- BITSET_SET_BIT(cc->bs, j);
- }
- }
-
- prev = 0x80;
- for (i = 0; i < nmb; i++) {
- if (prev < mbr[i].from) {
- r = add_code_range_to_buf(&(cc->mbuf), prev, mbr[i].from - 1);
- if (r != 0) return r;
- }
- prev = mbr[i].to + 1;
- }
- if (prev < 0x7fffffff) {
- r = add_code_range_to_buf(&(cc->mbuf), prev, 0x7fffffff);
- if (r != 0) return r;
- }
- }
-
- return r;
-}
-
-static int
-add_ctype_to_cc(CClassNode* cc, int ctype, int not, ScanEnv* env)
-{
- int c, r;
- OnigEncoding enc = env->enc;
-
- if (ONIGENC_CTYPE_SUPPORT_LEVEL(enc) != ONIGENC_CTYPE_SUPPORT_LEVEL_SB) {
- r = add_ctype_to_cc_by_list(cc, ctype, not, env->enc);
- return r;
- }
-
- r = 0;
- switch (ctype) {
- case ONIGENC_CTYPE_ALPHA:
- case ONIGENC_CTYPE_BLANK:
- case ONIGENC_CTYPE_CNTRL:
- case ONIGENC_CTYPE_DIGIT:
- case ONIGENC_CTYPE_LOWER:
- case ONIGENC_CTYPE_PUNCT:
- case ONIGENC_CTYPE_SPACE:
- case ONIGENC_CTYPE_UPPER:
- case ONIGENC_CTYPE_XDIGIT:
- case ONIGENC_CTYPE_ASCII:
- case ONIGENC_CTYPE_ALNUM:
- if (not != 0) {
- for (c = 0; c < SINGLE_BYTE_SIZE; c++) {
- if (! ONIGENC_IS_CODE_CTYPE(enc, (OnigCodePoint )c, ctype))
- BITSET_SET_BIT(cc->bs, c);
- }
- ADD_ALL_MULTI_BYTE_RANGE(enc, cc->mbuf);
- }
- else {
- for (c = 0; c < SINGLE_BYTE_SIZE; c++) {
- if (ONIGENC_IS_CODE_CTYPE(enc, (OnigCodePoint )c, ctype))
- BITSET_SET_BIT(cc->bs, c);
- }
- }
- break;
-
- case ONIGENC_CTYPE_GRAPH:
- case ONIGENC_CTYPE_PRINT:
- if (not != 0) {
- for (c = 0; c < SINGLE_BYTE_SIZE; c++) {
- if (! ONIGENC_IS_CODE_CTYPE(enc, (OnigCodePoint )c, ctype))
- BITSET_SET_BIT(cc->bs, c);
- }
- }
- else {
- for (c = 0; c < SINGLE_BYTE_SIZE; c++) {
- if (ONIGENC_IS_CODE_CTYPE(enc, (OnigCodePoint )c, ctype))
- BITSET_SET_BIT(cc->bs, c);
- }
- ADD_ALL_MULTI_BYTE_RANGE(enc, cc->mbuf);
- }
- break;
-
- case ONIGENC_CTYPE_WORD:
- if (not == 0) {
- for (c = 0; c < SINGLE_BYTE_SIZE; c++) {
- if (ONIGENC_IS_CODE_SB_WORD(enc, c)) BITSET_SET_BIT(cc->bs, c);
- }
- ADD_ALL_MULTI_BYTE_RANGE(enc, cc->mbuf);
- }
- else {
- for (c = 0; c < SINGLE_BYTE_SIZE; c++) {
- if (! ONIGENC_IS_CODE_SB_WORD(enc, c) && ! ONIGENC_IS_MBC_HEAD(enc, c))
- BITSET_SET_BIT(cc->bs, c);
- }
- }
- break;
-
- default:
- return ONIGERR_PARSER_BUG;
- break;
- }
-
- return r;
-}
-
-static int
-parse_ctype_to_enc_ctype(int pctype, int* not)
-{
- int ctype;
-
- switch (pctype) {
- case CTYPE_WORD:
- ctype = ONIGENC_CTYPE_WORD;
- *not = 0;
- break;
- case CTYPE_NOT_WORD:
- ctype = ONIGENC_CTYPE_WORD;
- *not = 1;
- break;
- case CTYPE_WHITE_SPACE:
- ctype = ONIGENC_CTYPE_SPACE;
- *not = 0;
- break;
- case CTYPE_NOT_WHITE_SPACE:
- ctype = ONIGENC_CTYPE_SPACE;
- *not = 1;
- break;
- case CTYPE_DIGIT:
- ctype = ONIGENC_CTYPE_DIGIT;
- *not = 0;
- break;
- case CTYPE_NOT_DIGIT:
- ctype = ONIGENC_CTYPE_DIGIT;
- *not = 1;
- break;
- default:
- return ONIGERR_PARSER_BUG;
- break;
- }
- return ctype;
-}
-
-typedef struct {
- UChar *name;
- int ctype;
- short int len;
-} PosixBracketEntryType;
-
-static int
-parse_posix_bracket(CClassNode* cc, UChar** src, UChar* end, ScanEnv* env)
-{
-#define POSIX_BRACKET_CHECK_LIMIT_LENGTH 20
-#define POSIX_BRACKET_NAME_MAX_LEN 6
-
- static PosixBracketEntryType PBS[] = {
- { "alnum", ONIGENC_CTYPE_ALNUM, 5 },
- { "alpha", ONIGENC_CTYPE_ALPHA, 5 },
- { "blank", ONIGENC_CTYPE_BLANK, 5 },
- { "cntrl", ONIGENC_CTYPE_CNTRL, 5 },
- { "digit", ONIGENC_CTYPE_DIGIT, 5 },
- { "graph", ONIGENC_CTYPE_GRAPH, 5 },
- { "lower", ONIGENC_CTYPE_LOWER, 5 },
- { "print", ONIGENC_CTYPE_PRINT, 5 },
- { "punct", ONIGENC_CTYPE_PUNCT, 5 },
- { "space", ONIGENC_CTYPE_SPACE, 5 },
- { "upper", ONIGENC_CTYPE_UPPER, 5 },
- { "xdigit", ONIGENC_CTYPE_XDIGIT, 6 },
- { "ascii", ONIGENC_CTYPE_ASCII, 5 }, /* I don't know origin. Perl? */
- { (UChar* )NULL, -1, 0 }
- };
-
- PosixBracketEntryType *pb;
- int not, i, c, r;
- UChar *p = *src;
-
- if (PPEEK == '^') {
- PINC;
- not = 1;
- }
- else
- not = 0;
-
- if (end - p < POSIX_BRACKET_NAME_MAX_LEN + 1)
- goto not_posix_bracket;
-
- for (pb = PBS; IS_NOT_NULL(pb->name); pb++) {
- if (onig_strncmp(p, pb->name, pb->len) == 0) {
- p += pb->len;
- if (end - p < 2 || *p != ':' || *(p+1) != ']')
- return ONIGERR_INVALID_POSIX_BRACKET_TYPE;
-
- r = add_ctype_to_cc(cc, pb->ctype, not, env);
- if (r != 0) return r;
-
- PINC; PINC;
- *src = p;
- return 0;
- }
- }
-
- not_posix_bracket:
- c = 0;
- i = 0;
- while (!PEND && ((c = PPEEK) != ':') && c != ']') {
- PINC;
- if (++i > POSIX_BRACKET_CHECK_LIMIT_LENGTH) break;
- }
- if (c == ':' && !PEND) {
- PINC;
- if (!PEND) {
- PFETCH(c);
- if (c == ']')
- return ONIGERR_INVALID_POSIX_BRACKET_TYPE;
- }
- }
-
- return 1; /* 1: is not POSIX bracket, but no error. */
-}
-
-static int
-property_name_to_ctype(UChar* p, UChar* end)
-{
- static PosixBracketEntryType PBS[] = {
- { "Alnum", ONIGENC_CTYPE_ALNUM, 5 },
- { "Alpha", ONIGENC_CTYPE_ALPHA, 5 },
- { "Blank", ONIGENC_CTYPE_BLANK, 5 },
- { "Cntrl", ONIGENC_CTYPE_CNTRL, 5 },
- { "Digit", ONIGENC_CTYPE_DIGIT, 5 },
- { "Graph", ONIGENC_CTYPE_GRAPH, 5 },
- { "Lower", ONIGENC_CTYPE_LOWER, 5 },
- { "Print", ONIGENC_CTYPE_PRINT, 5 },
- { "Punct", ONIGENC_CTYPE_PUNCT, 5 },
- { "Space", ONIGENC_CTYPE_SPACE, 5 },
- { "Upper", ONIGENC_CTYPE_UPPER, 5 },
- { "XDigit", ONIGENC_CTYPE_XDIGIT, 6 },
- { "ASCII", ONIGENC_CTYPE_ASCII, 5 },
- { (UChar* )NULL, -1, 0 }
- };
-
- PosixBracketEntryType *pb;
- int len;
-
- len = end - p;
- for (pb = PBS; IS_NOT_NULL(pb->name); pb++) {
- if (len == pb->len && onig_strncmp(p, pb->name, pb->len) == 0)
- return pb->ctype;
- }
-
- return ONIGERR_INVALID_CHAR_PROPERTY_NAME;
-}
-
-static int
-fetch_char_property_to_ctype(UChar** src, UChar* end, ScanEnv* env)
-{
- int ctype;
- UChar *prev, *p = *src;
- int c = 0;
-
- while (!PEND) {
- prev = p;
- PFETCH(c);
- if (c == '}') {
- ctype = property_name_to_ctype(*src, prev);
- if (ctype < 0) return ctype;
-
- *src = p;
- return ctype;
- }
- else if (c == '(' || c == ')' || c == '{' || c == '|')
- break;
- }
-
- return ONIGERR_INVALID_CHAR_PROPERTY_NAME;
-}
-
-static int
-parse_char_property(Node** np, OnigToken* tok, UChar** src, UChar* end,
- ScanEnv* env)
-{
- int r, ctype;
- CClassNode* cc;
-
- ctype = fetch_char_property_to_ctype(src, end, env);
- if (ctype < 0) return ctype;
-
- *np = node_new_cclass();
- CHECK_NULL_RETURN_VAL(*np, ONIGERR_MEMORY);
- cc = &(NCCLASS(*np));
- r = add_ctype_to_cc(cc, ctype, 0, env);
- if (r != 0) return r;
- if (tok->u.prop.not != 0) CCLASS_SET_NOT(cc);
-
- return 0;
-}
-
-
-enum CCSTATE {
- CCS_VALUE,
- CCS_RANGE,
- CCS_COMPLETE,
- CCS_START
-};
-
-enum CCVALTYPE {
- CCV_SB,
- CCV_CODE_POINT,
- CCV_CLASS
-};
-
-static int
-next_state_class(CClassNode* cc, OnigCodePoint* vs, enum CCVALTYPE* type,
- enum CCSTATE* state, ScanEnv* env)
-{
- int r;
-
- if (*state == CCS_RANGE)
- return ONIGERR_CHAR_CLASS_VALUE_AT_END_OF_RANGE;
-
- if (*state == CCS_VALUE && *type != CCV_CLASS) {
- if (*type == CCV_SB)
- BITSET_SET_BIT(cc->bs, (int )(*vs));
- else if (*type == CCV_CODE_POINT) {
- r = add_code_range(&(cc->mbuf), env, *vs, *vs);
- if (r < 0) return r;
- }
- }
-
- *state = CCS_VALUE;
- *type = CCV_CLASS;
- return 0;
-}
-
-static int
-next_state_val(CClassNode* cc, OnigCodePoint *vs, OnigCodePoint v,
- int* vs_israw, int v_israw,
- enum CCVALTYPE intype, enum CCVALTYPE* type,
- enum CCSTATE* state, ScanEnv* env)
-{
- int r;
-
- switch (*state) {
- case CCS_VALUE:
- if (*type == CCV_SB)
- BITSET_SET_BIT(cc->bs, (int )(*vs));
- else if (*type == CCV_CODE_POINT) {
- r = add_code_range(&(cc->mbuf), env, *vs, *vs);
- if (r < 0) return r;
- }
- break;
-
- case CCS_RANGE:
- if (intype == *type) {
- if (intype == CCV_SB) {
- if (*vs > v) {
- if (IS_SYNTAX_BV(env->syntax, ONIG_SYN_ALLOW_EMPTY_RANGE_IN_CC))
- goto ccs_range_end;
- else
- return ONIGERR_EMPTY_RANGE_IN_CHAR_CLASS;
- }
- bitset_set_range(cc->bs, (int )*vs, (int )v);
- }
- else {
- r = add_code_range(&(cc->mbuf), env, *vs, v);
- if (r < 0) return r;
- }
- }
- else {
- if (intype == CCV_CODE_POINT && *type == CCV_SB &&
- ONIGENC_IS_CONTINUOUS_SB_MB(env->enc)) {
- bitset_set_range(cc->bs, (int )*vs, 0x7f);
- r = add_code_range(&(cc->mbuf), env, (OnigCodePoint )0x80, v);
- if (r < 0) return r;
- }
- else
- return ONIGERR_MISMATCH_CODE_LENGTH_IN_CLASS_RANGE;
- }
- ccs_range_end:
- *state = CCS_COMPLETE;
- break;
-
- case CCS_COMPLETE:
- case CCS_START:
- *state = CCS_VALUE;
- break;
-
- default:
- break;
- }
-
- *vs_israw = v_israw;
- *vs = v;
- *type = intype;
- return 0;
-}
-
-static int
-char_exist_check(UChar c, UChar* from, UChar* to, int ignore_escaped,
- OnigEncoding enc)
-{
- int in_esc;
- UChar* p = from;
-
- in_esc = 0;
- while (p < to) {
- if (ignore_escaped && in_esc) {
- in_esc = 0;
- }
- else {
- if (*p == c) return 1;
- if (*p == MC_ESC) in_esc = 1;
- }
- p += enc_len(enc, *p);
- }
- return 0;
-}
-
-static int
-parse_char_class(Node** np, OnigToken* tok, UChar** src, UChar* end,
- ScanEnv* env)
-{
- int r, neg, len, fetched, and_start;
- OnigCodePoint v, vs;
- UChar *p;
- Node* node;
- CClassNode *cc, *prev_cc;
- CClassNode work_cc;
-
- enum CCSTATE state;
- enum CCVALTYPE val_type, in_type;
- int val_israw, in_israw;
-
- prev_cc = (CClassNode* )NULL;
- *np = NULL_NODE;
- r = fetch_token_in_cc(tok, src, end, env);
- if (r == TK_BYTE && tok->u.c == '^' && tok->escaped == 0) {
- neg = 1;
- r = fetch_token_in_cc(tok, src, end, env);
- }
- else {
- neg = 0;
- }
-
- if (r < 0) return r;
- if (r == TK_CC_CLOSE) {
- if (! char_exist_check(']', *src, env->pattern_end, 1, env->enc))
- return ONIGERR_EMPTY_CHAR_CLASS;
-
- CC_ESC_WARN(env, "]");
- r = tok->type = TK_BYTE; /* allow []...] */
- }
-
- *np = node = node_new_cclass();
- CHECK_NULL_RETURN_VAL(node, ONIGERR_MEMORY);
- cc = &(NCCLASS(node));
-
- and_start = 0;
- state = CCS_START;
- p = *src;
- while (r != TK_CC_CLOSE) {
- fetched = 0;
- switch (r) {
- case TK_BYTE:
- len = enc_len(env->enc, tok->u.c);
- if (len > 1) {
- PUNFETCH;
- v = ONIGENC_MBC_TO_CODE(env->enc, p, end);
- p += len;
- in_type = CCV_CODE_POINT;
- }
- else {
- sb_char:
- v = (OnigCodePoint )tok->u.c;
- in_type = CCV_SB;
- }
- in_israw = 0;
- goto val_entry2;
- break;
-
- case TK_RAW_BYTE:
- len = enc_len(env->enc, tok->u.c);
- if (len > 1 && tok->base != 0) { /* tok->base != 0 : octal or hexadec. */
- UChar buf[ONIGENC_CODE_TO_MBC_MAXLEN];
- UChar* bufp = buf;
- UChar* bufe = buf + ONIGENC_CODE_TO_MBC_MAXLEN;
- int i, base = tok->base;
-
- if (len > ONIGENC_CODE_TO_MBC_MAXLEN) {
- bufp = (UChar* )xmalloc(len);
- if (IS_NULL(bufp)) {
- r = ONIGERR_MEMORY;
- goto err;
- }
- bufe = bufp + len;
- }
- bufp[0] = tok->u.c;
- for (i = 1; i < len; i++) {
- r = fetch_token_in_cc(tok, &p, end, env);
- if (r < 0) goto raw_byte_err;
- if (r != TK_RAW_BYTE || tok->base != base) break;
- bufp[i] = tok->u.c;
- }
- if (i < len) {
- r = ONIGERR_TOO_SHORT_MULTI_BYTE_STRING;
- raw_byte_err:
- if (bufp != buf) xfree(bufp);
- goto err;
- }
- v = ONIGENC_MBC_TO_CODE(env->enc, bufp, bufe);
- if (bufp != buf) xfree(bufp);
- in_type = CCV_CODE_POINT;
- }
- else {
- v = (OnigCodePoint )tok->u.c;
- in_type = CCV_SB;
- }
- in_israw = 1;
- goto val_entry2;
- break;
-
- case TK_CODE_POINT:
- v = tok->u.code;
- in_israw = 1;
- val_entry:
- len = ONIGENC_CODE_TO_MBCLEN(env->enc, v);
- if (len < 0) {
- r = len;
- goto err;
- }
- in_type = (len == 1 ? CCV_SB : CCV_CODE_POINT);
- val_entry2:
- r = next_state_val(cc, &vs, v, &val_israw, in_israw, in_type, &val_type,
- &state, env);
- if (r != 0) goto err;
- break;
-
- case TK_POSIX_BRACKET_OPEN:
- r = parse_posix_bracket(cc, &p, end, env);
- if (r < 0) goto err;
- if (r == 1) { /* is not POSIX bracket */
- CC_ESC_WARN(env, "[");
- p = tok->backp;
- v = (OnigCodePoint )tok->u.c;
- in_israw = 0;
- goto val_entry;
- }
- goto next_class;
- break;
-
- case TK_CHAR_TYPE:
- {
- int ctype, not;
- ctype = parse_ctype_to_enc_ctype(tok->u.subtype, &not);
- r = add_ctype_to_cc(cc, ctype, not, env);
- if (r != 0) return r;
- }
-
- next_class:
- r = next_state_class(cc, &vs, &val_type, &state, env);
- if (r != 0) goto err;
- break;
-
- case TK_CHAR_PROPERTY:
- {
- int ctype;
-
- ctype = fetch_char_property_to_ctype(&p, end, env);
- if (ctype < 0) return ctype;
- r = add_ctype_to_cc(cc, ctype, tok->u.prop.not, env);
- if (r != 0) return r;
- goto next_class;
- }
- break;
-
- case TK_CC_RANGE:
- if (state == CCS_VALUE) {
- r = fetch_token_in_cc(tok, &p, end, env);
- if (r < 0) goto err;
- fetched = 1;
- if (r == TK_CC_CLOSE) { /* allow [x-] */
- range_end_val:
- v = (OnigCodePoint )'-';
- in_israw = 0;
- goto val_entry;
- }
- else if (r == TK_CC_AND) {
- CC_ESC_WARN(env, "-");
- goto range_end_val;
- }
- state = CCS_RANGE;
- }
- else if (state == CCS_START) {
- /* [-xa] is allowed */
- v = (OnigCodePoint )tok->u.c;
- in_israw = 0;
-
- r = fetch_token_in_cc(tok, &p, end, env);
- if (r < 0) goto err;
- fetched = 1;
- /* [--x] or [a&&-x] is warned. */
- if (r == TK_CC_RANGE || and_start != 0)
- CC_ESC_WARN(env, "-");
-
- goto val_entry;
- }
- else if (state == CCS_RANGE) {
- CC_ESC_WARN(env, "-");
- goto sb_char; /* [!--x] is allowed */
- }
- else { /* CCS_COMPLETE */
- r = fetch_token_in_cc(tok, &p, end, env);
- if (r < 0) goto err;
- fetched = 1;
- if (r == TK_CC_CLOSE) goto range_end_val; /* allow [a-b-] */
- else if (r == TK_CC_AND) {
- CC_ESC_WARN(env, "-");
- goto range_end_val;
- }
-
- if (IS_SYNTAX_BV(env->syntax, ONIG_SYN_ALLOW_DOUBLE_RANGE_OP_IN_CC)) {
- CC_ESC_WARN(env, "-");
- goto sb_char; /* [0-9-a] is allowed as [0-9\-a] */
- }
- r = ONIGERR_UNMATCHED_RANGE_SPECIFIER_IN_CHAR_CLASS;
- goto err;
- }
- break;
-
- case TK_CC_CC_OPEN: /* [ */
- {
- Node *anode;
- CClassNode* acc;
-
- r = parse_char_class(&anode, tok, &p, end, env);
- if (r != 0) goto cc_open_err;
- acc = &(NCCLASS(anode));
- r = or_cclass(cc, acc, env->enc);
-
- onig_node_free(anode);
- cc_open_err:
- if (r != 0) goto err;
- }
- break;
-
- case TK_CC_AND: /* && */
- {
- if (state == CCS_VALUE) {
- r = next_state_val(cc, &vs, 0, &val_israw, 0, CCV_SB,
- &val_type, &state, env);
- if (r != 0) goto err;
- }
- /* initialize local variables */
- and_start = 1;
- state = CCS_START;
-
- if (IS_NOT_NULL(prev_cc)) {
- r = and_cclass(prev_cc, cc, env->enc);
- if (r != 0) goto err;
- bbuf_free(cc->mbuf);
- }
- else {
- prev_cc = cc;
- cc = &work_cc;
- }
- initialize_cclass(cc);
- }
- break;
-
- case TK_EOT:
- r = ONIGERR_PREMATURE_END_OF_CHAR_CLASS;
- goto err;
- break;
- default:
- r = ONIGERR_PARSER_BUG;
- goto err;
- break;
- }
-
- if (fetched)
- r = tok->type;
- else {
- r = fetch_token_in_cc(tok, &p, end, env);
- if (r < 0) goto err;
- }
- }
-
- if (state == CCS_VALUE) {
- r = next_state_val(cc, &vs, 0, &val_israw, 0, CCV_SB,
- &val_type, &state, env);
- if (r != 0) goto err;
- }
-
- if (IS_NOT_NULL(prev_cc)) {
- r = and_cclass(prev_cc, cc, env->enc);
- if (r != 0) goto err;
- bbuf_free(cc->mbuf);
- cc = prev_cc;
- }
-
- cc->not = neg;
- if (cc->not != 0 &&
- IS_SYNTAX_BV(env->syntax, ONIG_SYN_NOT_NEWLINE_IN_NEGATIVE_CC)) {
- int is_empty;
-
- is_empty = (IS_NULL(cc->mbuf) ? 1 : 0);
- if (is_empty != 0)
- BITSET_IS_EMPTY(cc->bs, is_empty);
- if (is_empty == 0)
- BITSET_SET_BIT(cc->bs, ONIG_NEWLINE);
- }
- *src = p;
- return 0;
-
- err:
- if (cc != &(NCCLASS(*np)))
- bbuf_free(cc->mbuf);
- onig_node_free(*np);
- return r;
-}
-
-static int parse_subexp(Node** top, OnigToken* tok, int term,
- UChar** src, UChar* end, ScanEnv* env);
-
-static int
-parse_effect(Node** np, OnigToken* tok, int term, UChar** src, UChar* end,
- ScanEnv* env)
-{
- Node *target;
- OnigOptionType option;
- int r, c, num;
- int list_capture;
- UChar* p = *src;
-
- *np = NULL;
- if (PEND) return ONIGERR_END_PATTERN_WITH_UNMATCHED_PARENTHESIS;
-
- option = env->option;
- if (PPEEK == '?' &&
- IS_SYNTAX_OP2(env->syntax, ONIG_SYN_OP2_QMARK_GROUP_EFFECT)) {
- PINC;
- if (PEND) return ONIGERR_END_PATTERN_IN_GROUP;
-
- PFETCH(c);
- switch (c) {
- case '#': /* (?#...) comment */
- while (1) {
- if (PEND) return ONIGERR_END_PATTERN_IN_GROUP;
- PFETCH(c);
- if (c == ')') break;
- }
- *src = p;
- return 3; /* 3: comment */
- break;
-
- case ':': /* (?:...) grouping only */
- group:
- r = fetch_token(tok, &p, end, env);
- if (r < 0) return r;
- r = parse_subexp(np, tok, term, &p, end, env);
- if (r < 0) return r;
- *src = p;
- return 1; /* group */
- break;
-
- case '=':
- *np = onig_node_new_anchor(ANCHOR_PREC_READ);
- break;
- case '!': /* preceding read */
- *np = onig_node_new_anchor(ANCHOR_PREC_READ_NOT);
- break;
- case '>': /* (?>...) stop backtrack */
- *np = node_new_effect(EFFECT_STOP_BACKTRACK);
- break;
-
- case '<': /* look behind (?<=...), (?<!...) */
- PFETCH(c);
- if (c == '=')
- *np = onig_node_new_anchor(ANCHOR_LOOK_BEHIND);
- else if (c == '!')
- *np = onig_node_new_anchor(ANCHOR_LOOK_BEHIND_NOT);
-#ifdef USE_NAMED_GROUP
- else if (IS_SYNTAX_OP2(env->syntax, ONIG_SYN_OP2_QMARK_LT_NAMED_GROUP)) {
- UChar *name;
- UChar *name_end;
-
- PUNFETCH;
- list_capture = 0;
-
- named_group:
- name = p;
- r = fetch_name(&p, end, &name_end, env, 0);
- if (r < 0) return r;
-
- num = scan_env_add_mem_entry(env);
- if (num < 0) return num;
- if (list_capture != 0 && num >= BIT_STATUS_BITS_NUM)
- return ONIGERR_GROUP_NUMBER_OVER_FOR_CAPTURE_HISTORY;
-
- r = name_add(env->reg, name, name_end, num, env);
- if (r != 0) return r;
- *np = node_new_effect_memory(env->option, 1);
- CHECK_NULL_RETURN_VAL(*np, ONIGERR_MEMORY);
- NEFFECT(*np).regnum = num;
- if (list_capture != 0)
- BIT_STATUS_ON_AT_SIMPLE(env->capture_history, num);
- env->num_named++;
- }
-#endif
- else
- return ONIGERR_UNDEFINED_GROUP_OPTION;
- break;
-
- case '@':
- if (IS_SYNTAX_OP2(env->syntax, ONIG_SYN_OP2_ATMARK_CAPTURE_HISTORY)) {
-#ifdef USE_NAMED_GROUP
- if (IS_SYNTAX_OP2(env->syntax, ONIG_SYN_OP2_QMARK_LT_NAMED_GROUP)) {
- PFETCH(c);
- if (c == '<') {
- list_capture = 1;
- goto named_group; /* (?@<name>...) */
- }
- PUNFETCH;
- }
-#endif
- *np = node_new_effect_memory(env->option, 0);
- CHECK_NULL_RETURN_VAL(*np, ONIGERR_MEMORY);
- num = scan_env_add_mem_entry(env);
- if (num < 0) {
- onig_node_free(*np);
- return num;
- }
- else if (num >= BIT_STATUS_BITS_NUM) {
- onig_node_free(*np);
- return ONIGERR_GROUP_NUMBER_OVER_FOR_CAPTURE_HISTORY;
- }
- NEFFECT(*np).regnum = num;
- BIT_STATUS_ON_AT_SIMPLE(env->capture_history, num);
- }
- else {
- return ONIGERR_UNDEFINED_GROUP_OPTION;
- }
- break;
-
-#ifdef USE_POSIXLINE_OPTION
- case 'p':
-#endif
- case '-': case 'i': case 'm': case 's': case 'x':
- {
- int neg = 0;
-
- while (1) {
- switch (c) {
- case ':':
- case ')':
- break;
-
- case '-': neg = 1; break;
- case 'x': ONOFF(option, ONIG_OPTION_EXTEND, neg); break;
- case 'i': ONOFF(option, ONIG_OPTION_IGNORECASE, neg); break;
- case 's':
- if (IS_SYNTAX_OP2(env->syntax, ONIG_SYN_OP2_OPTION_PERL)) {
- ONOFF(option, ONIG_OPTION_MULTILINE, neg);
- }
- else
- return ONIGERR_UNDEFINED_GROUP_OPTION;
- break;
-
- case 'm':
- if (IS_SYNTAX_OP2(env->syntax, ONIG_SYN_OP2_OPTION_PERL)) {
- ONOFF(option, ONIG_OPTION_SINGLELINE, (neg == 0 ? 1 : 0));
- }
- else if (IS_SYNTAX_OP2(env->syntax, ONIG_SYN_OP2_OPTION_RUBY)) {
- ONOFF(option, ONIG_OPTION_MULTILINE, neg);
- }
- else
- return ONIGERR_UNDEFINED_GROUP_OPTION;
- break;
-#ifdef USE_POSIXLINE_OPTION
- case 'p':
- ONOFF(option, ONIG_OPTION_MULTILINE|ONIG_OPTION_SINGLELINE, neg);
- break;
-#endif
- default:
- return ONIGERR_UNDEFINED_GROUP_OPTION;
- }
-
- if (c == ')') {
- *np = node_new_option(option);
- CHECK_NULL_RETURN_VAL(*np, ONIGERR_MEMORY);
- *src = p;
- return 2; /* option only */
- }
- else if (c == ':') {
- OnigOptionType prev = env->option;
-
- env->option = option;
- r = fetch_token(tok, &p, end, env);
- if (r < 0) return r;
- r = parse_subexp(&target, tok, term, &p, end, env);
- env->option = prev;
- if (r < 0) return r;
- *np = node_new_option(option);
- CHECK_NULL_RETURN_VAL(*np, ONIGERR_MEMORY);
- NEFFECT(*np).target = target;
- *src = p;
- return 0;
- }
-
- if (PEND) return ONIGERR_END_PATTERN_IN_GROUP;
- PFETCH(c);
- }
- }
- break;
-
- default:
- return ONIGERR_UNDEFINED_GROUP_OPTION;
- }
- }
- else {
-#ifdef USE_NAMED_GROUP
- if (ONIG_IS_OPTION_ON(env->option, ONIG_OPTION_DONT_CAPTURE_GROUP))
- goto group;
-#endif
- *np = node_new_effect_memory(env->option, 0);
- CHECK_NULL_RETURN_VAL(*np, ONIGERR_MEMORY);
- num = scan_env_add_mem_entry(env);
- if (num < 0) return num;
- NEFFECT(*np).regnum = num;
- }
-
- CHECK_NULL_RETURN_VAL(*np, ONIGERR_MEMORY);
- r = fetch_token(tok, &p, end, env);
- if (r < 0) return r;
- r = parse_subexp(&target, tok, term, &p, end, env);
- if (r < 0) return r;
-
- if (NTYPE(*np) == N_ANCHOR)
- NANCHOR(*np).target = target;
- else {
- NEFFECT(*np).target = target;
- if (NEFFECT(*np).type == EFFECT_MEMORY) {
- /* Don't move this to previous of parse_subexp() */
- r = scan_env_set_mem_node(env, NEFFECT(*np).regnum, *np);
- if (r != 0) return r;
- }
- }
-
- *src = p;
- return 0;
-}
-
-static int
-set_qualifier(Node* qnode, Node* target, int group, ScanEnv* env)
-{
- QualifierNode* qn;
-
- qn = &(NQUALIFIER(qnode));
- if (qn->lower == 1 && qn->upper == 1) {
- return 1;
- }
-
- switch (NTYPE(target)) {
- case N_STRING:
- if (! group) {
- StrNode* sn = &(NSTRING(target));
- if (str_node_can_be_split(sn, env->enc)) {
- Node* n = str_node_split_last_char(sn, env->enc);
- if (IS_NOT_NULL(n)) {
- qn->target = n;
- return 2;
- }
- }
- }
- break;
-
- case N_QUALIFIER:
- { /* check redundant double repeat. */
- /* verbose warn (?:.?)? etc... but not warn (.?)? etc... */
- QualifierNode* qnt = &(NQUALIFIER(target));
-
-#ifdef USE_WARNING_REDUNDANT_NESTED_REPEAT_OPERATOR
- if (qn->by_number == 0 && qnt->by_number == 0 &&
- IS_SYNTAX_BV(env->syntax, ONIG_SYN_WARN_REDUNDANT_NESTED_REPEAT)) {
- if (IS_REPEAT_INFINITE(qn->upper)) {
- if (qn->lower == 0) { /* '*' */
- redundant:
- {
- char buf[WARN_BUFSIZE];
- if (onig_verb_warn != onig_null_warn) {
- onig_snprintf_with_pattern(buf, WARN_BUFSIZE, env->enc,
- env->pattern, env->pattern_end,
- "redundant nested repeat operator");
- (*onig_verb_warn)(buf);
- }
- goto warn_exit;
- }
- }
- else if (qn->lower == 1) { /* '+' */
- /* (?:a?)+? only allowed. */
- if (qn->greedy || !(qnt->upper == 1 && qnt->greedy))
- goto redundant;
- }
- }
- else if (qn->upper == 1 && qn->lower == 0) {
- if (qn->greedy) { /* '?' */
- if (!(qnt->lower == 1 && qnt->greedy == 0)) /* not '+?' */
- goto redundant;
- }
- else { /* '??' */
- /* '(?:a+)?? only allowd. (?:a*)?? can be replaced to (?:a+)?? */
- if (!(qnt->greedy && qnt->lower == 1 &&
- IS_REPEAT_INFINITE(qnt->upper)))
- goto redundant;
- }
- }
- }
-
- warn_exit:
-#endif
- if (popular_qualifier_num(qnt) >= 0 && popular_qualifier_num(qn) >= 0) {
- onig_reduce_nested_qualifier(qnode, target);
- goto q_exit;
- }
- }
- break;
-
- default:
- break;
- }
-
- qn->target = target;
- q_exit:
- return 0;
-}
-
-#ifdef USE_FOLD_MATCH
-static int
-make_alt_node_from_fold_info(OnigEncFoldMatchInfo* info, Node** node)
-{
- int i;
- UChar *s, *end;
- Node *root, **ptail, *snode;
-
- ptail = &root;
- for (i = 0; i < info->target_num; i++) {
- s = info->target_str[i];
- end = s + info->target_byte_len[i];
- /* ex.
- U+00DF match "ss" and "SS, but not match "Ss".
- So, string nodes must be raw.
- */
- snode = node_new_str_raw(s, end);
- CHECK_NULL_RETURN_VAL(snode, ONIGERR_MEMORY);
-
- *ptail = node_new_alt(snode, NULL_NODE);
- CHECK_NULL_RETURN_VAL(*ptail, ONIGERR_MEMORY);
- ptail = &(NCONS(*ptail).right);
- }
- *ptail = NULL_NODE;
- *node = root;
- return 0;
-}
-
-static int
-make_fold_alt_node_from_cc(OnigEncoding enc, CClassNode* cc, Node** root)
-{
- int i, j, flen, len, ncode, n;
- UChar *s, *end, buf[ONIGENC_CODE_TO_MBC_MAXLEN];
- OnigCodePoint* codes;
- Node **ptail, *snode;
- OnigEncFoldMatchInfo* info;
-
- *root = NULL_NODE;
- ptail = root;
-
- ncode = ONIGENC_GET_ALL_FOLD_MATCH_CODE(enc, &codes);
- n = 0;
- for (i = 0; i < ncode; i++) {
- if (onig_is_code_in_cc(enc, codes[i], cc)) {
- len = ONIGENC_CODE_TO_MBC(enc, codes[i], buf);
- flen = ONIGENC_GET_FOLD_MATCH_INFO(enc, buf, buf + len, &info);
- if (flen > 0) { /* fold */
- for (j = 0; j < info->target_num; j++) {
- s = info->target_str[j];
- end = s + info->target_byte_len[j];
- if (onig_strncmp(s, buf, enc_len(enc, *s)) == 0)
- continue; /* ignore single char. */
-
- snode = node_new_str_raw(s, end);
- CHECK_NULL_RETURN_VAL(snode, ONIGERR_MEMORY);
-
- *ptail = node_new_alt(snode, NULL_NODE);
- CHECK_NULL_RETURN_VAL(*ptail, ONIGERR_MEMORY);
- ptail = &(NCONS(*ptail).right);
- n++;
- }
- }
- }
- }
-
- return n;
-}
-#endif
-
-static int
-parse_exp(Node** np, OnigToken* tok, int term,
- UChar** src, UChar* end, ScanEnv* env)
-{
- int r, len, group = 0;
- Node* qn;
- Node** targetp;
-
- start:
- *np = NULL;
- if (tok->type == term)
- goto end_of_token;
-
- switch (tok->type) {
- case TK_ALT:
- case TK_EOT:
- end_of_token:
- *np = node_new_empty();
- return tok->type;
- break;
-
- case TK_SUBEXP_OPEN:
- r = parse_effect(np, tok, TK_SUBEXP_CLOSE, src, end, env);
- if (r < 0) return r;
- if (r == 1) group = 1;
- else if (r == 2) { /* option only */
- Node* target;
- OnigOptionType prev = env->option;
-
- env->option = NEFFECT(*np).option;
- r = fetch_token(tok, src, end, env);
- if (r < 0) return r;
- r = parse_subexp(&target, tok, term, src, end, env);
- env->option = prev;
- if (r < 0) return r;
- NEFFECT(*np).target = target;
- return tok->type;
- }
- else if (r == 3) { /* comment */
- r = fetch_token(tok, src, end, env);
- if (r < 0) return r;
- goto start;
- }
- break;
-
- case TK_SUBEXP_CLOSE:
- if (! IS_SYNTAX_BV(env->syntax, ONIG_SYN_ALLOW_UNMATCHED_CLOSE_SUBEXP))
- return ONIGERR_UNMATCHED_CLOSE_PARENTHESIS;
-
- if (tok->escaped) goto tk_raw_byte;
- else goto tk_byte;
- break;
-
- case TK_BYTE:
- tk_byte:
- {
- *np = node_new_str_char((UChar )tok->u.c);
- CHECK_NULL_RETURN_VAL(*np, ONIGERR_MEMORY);
-
- while (1) {
- len = enc_len(env->enc, tok->u.c);
- if (len > 1) {
- r = onig_node_str_cat(*np, *src, *src + len - 1);
- if (r < 0) return r;
- *src += (len - 1);
- }
-
- r = fetch_token(tok, src, end, env);
- if (r < 0) return r;
- if (r != TK_BYTE) break;
-
- r = node_str_cat_char(*np, (UChar )tok->u.c);
- if (r < 0) return r;
- }
-
- fold_entry:
-#ifdef USE_FOLD_MATCH
- if (IS_IGNORECASE(env->option) && ONIGENC_IS_FOLD_MATCH(env->enc)) {
- int flen, ret;
- Node *root, **ptail, *work, *snode, *anode;
- UChar *p, *pprev;
- OnigEncFoldMatchInfo* fold_info;
- StrNode* sn = &(NSTRING(*np));
-
- ptail = &root;
- pprev = sn->s;
- for (p = sn->s; p < sn->end; ) {
- flen = ONIGENC_GET_FOLD_MATCH_INFO(env->enc, p, sn->end, &fold_info);
- if (flen > 0) { /* fold */
- ret = make_alt_node_from_fold_info(fold_info, &anode);
- if (ret != 0) return ret;
- work = node_new_list(anode, NULL);
- CHECK_NULL_RETURN_VAL(work, ONIGERR_MEMORY);
-
- if (pprev < p) {
- snode = node_new_str(pprev, p);
- CHECK_NULL_RETURN_VAL(snode, ONIGERR_MEMORY);
- *ptail = node_new_list(snode, work);
- CHECK_NULL_RETURN_VAL(*ptail, ONIGERR_MEMORY);
- }
- else {
- *ptail = work;
- }
- ptail = &(NCONS(work).right);
- p += flen;
- pprev = p;
- }
- else
- p += enc_len(env->enc, *p);
- }
- *ptail = NULL_NODE;
- if (IS_NOT_NULL(root)) {
- if (pprev < sn->end) {
- snode = node_new_str(pprev, sn->end);
- CHECK_NULL_RETURN_VAL(snode, ONIGERR_MEMORY);
- *ptail = node_new_list(snode, NULL_NODE);
- CHECK_NULL_RETURN_VAL(*ptail, ONIGERR_MEMORY);
- }
- onig_node_free(*np);
- *np = root;
- }
- }
-#endif
- targetp = np;
- goto repeat;
- }
- break;
-
- case TK_RAW_BYTE:
- tk_raw_byte:
- {
- int expect_len;
-
- *np = node_new_str_raw_char((UChar )tok->u.c);
- CHECK_NULL_RETURN_VAL(*np, ONIGERR_MEMORY);
- expect_len = enc_len(env->enc, tok->u.c);
- len = 1;
- while (1) {
- r = fetch_token(tok, src, end, env);
- if (r < 0) return r;
- if (r != TK_RAW_BYTE) {
-#ifndef NUMBERED_CHAR_IS_NOT_CASE_AMBIG
- if (len >= expect_len) {
- NSTRING_CLEAR_RAW(*np);
- }
-#endif
- goto fold_entry;
- }
-
- r = node_str_cat_char(*np, (UChar )tok->u.c);
- if (r < 0) return r;
- len++;
- }
- }
- break;
-
- case TK_CODE_POINT:
- {
- UChar buf[ONIGENC_CODE_TO_MBC_MAXLEN];
- int num = ONIGENC_CODE_TO_MBC(env->enc, tok->u.code, buf);
- if (num < 0) return num;
-#ifdef NUMBERED_CHAR_IS_NOT_CASE_AMBIG
- *np = node_new_str_raw(buf, buf + num);
-#else
- *np = node_new_str(buf, buf + num);
-#endif
- CHECK_NULL_RETURN_VAL(*np, ONIGERR_MEMORY);
- }
- break;
-
- case TK_QUOTE_OPEN:
- {
- OnigCodePoint end_op[] = { (OnigCodePoint )MC_ESC, (OnigCodePoint )'E' };
- UChar *qstart, *qend, *nextp;
-
- qstart = *src;
- qend = find_str_position(end_op, 2, qstart, end, &nextp, env->enc);
- if (IS_NULL(qend)) {
- nextp = qend = end;
- }
- *np = node_new_str(qstart, qend);
- CHECK_NULL_RETURN_VAL(*np, ONIGERR_MEMORY);
- *src = nextp;
- }
- break;
-
- case TK_CHAR_TYPE:
- {
- switch (tok->u.subtype) {
- case CTYPE_WORD:
- case CTYPE_NOT_WORD:
- *np = node_new_ctype(tok->u.subtype);
- CHECK_NULL_RETURN_VAL(*np, ONIGERR_MEMORY);
- break;
-
- case CTYPE_WHITE_SPACE:
- case CTYPE_NOT_WHITE_SPACE:
- case CTYPE_DIGIT:
- case CTYPE_NOT_DIGIT:
- {
- CClassNode* cc;
- int ctype, not;
-
- ctype = parse_ctype_to_enc_ctype(tok->u.subtype, &not);
-
- *np = node_new_cclass();
- CHECK_NULL_RETURN_VAL(*np, ONIGERR_MEMORY);
- cc = &(NCCLASS(*np));
- add_ctype_to_cc(cc, ctype, 0, env);
- if (not != 0) CCLASS_SET_NOT(cc);
- }
- break;
-
- default:
- return ONIGERR_PARSER_BUG;
- break;
- }
- }
- break;
-
- case TK_CHAR_PROPERTY:
- r = parse_char_property(np, tok, src, end, env);
- if (r != 0) return r;
- break;
-
- case TK_CC_OPEN:
- r = parse_char_class(np, tok, src, end, env);
- if (r != 0) return r;
-
-#ifdef USE_FOLD_MATCH
- if (IS_IGNORECASE(env->option) && ONIGENC_IS_FOLD_MATCH(env->enc)) {
- int res;
- Node *alt_root, *work;
- CClassNode* cc = &(NCCLASS(*np));
-
- res = make_fold_alt_node_from_cc(env->enc, cc, &alt_root);
- if (res < 0) return res;
- if (res > 0) {
- work = node_new_alt(*np, alt_root);
- if (IS_NULL(work)) {
- onig_node_free(alt_root);
- return ONIGERR_MEMORY;
- }
- *np = work;
- }
- }
-#endif
- break;
-
- case TK_ANYCHAR:
- *np = node_new_anychar();
- CHECK_NULL_RETURN_VAL(*np, ONIGERR_MEMORY);
- break;
-
- case TK_ANYCHAR_ANYTIME:
- *np = node_new_anychar();
- CHECK_NULL_RETURN_VAL(*np, ONIGERR_MEMORY);
- qn = node_new_qualifier(0, REPEAT_INFINITE, 0);
- CHECK_NULL_RETURN_VAL(qn, ONIGERR_MEMORY);
- NQUALIFIER(qn).target = *np;
- *np = qn;
- break;
-
- case TK_BACKREF:
- len = tok->u.backref.num;
- *np = node_new_backref(len,
- (len > 1 ? tok->u.backref.refs : &(tok->u.backref.ref1)),
- tok->u.backref.by_name, env);
- CHECK_NULL_RETURN_VAL(*np, ONIGERR_MEMORY);
- break;
-
-#ifdef USE_SUBEXP_CALL
- case TK_CALL:
- *np = node_new_call(tok->u.call.name, tok->u.call.name_end);
- CHECK_NULL_RETURN_VAL(*np, ONIGERR_MEMORY);
- env->num_call++;
- break;
-#endif
-
- case TK_ANCHOR:
- *np = onig_node_new_anchor(tok->u.anchor);
- break;
-
- case TK_OP_REPEAT:
- case TK_INTERVAL:
- if (IS_SYNTAX_BV(env->syntax, ONIG_SYN_CONTEXT_INDEP_REPEAT_OPS)) {
- if (IS_SYNTAX_BV(env->syntax, ONIG_SYN_CONTEXT_INVALID_REPEAT_OPS))
- return ONIGERR_TARGET_OF_REPEAT_OPERATOR_NOT_SPECIFIED;
- else
- *np = node_new_empty();
- }
- else {
- *src = tok->backp;
- goto tk_byte;
- }
- break;
-
- default:
- return ONIGERR_PARSER_BUG;
- break;
- }
-
- {
- targetp = np;
-
- re_entry:
- r = fetch_token(tok, src, end, env);
- if (r < 0) return r;
-
- repeat:
- if (r == TK_OP_REPEAT || r == TK_INTERVAL) {
- if (is_invalid_qualifier_target(*targetp))
- return ONIGERR_TARGET_OF_REPEAT_OPERATOR_INVALID;
-
- qn = node_new_qualifier(tok->u.repeat.lower, tok->u.repeat.upper,
- (r == TK_INTERVAL ? 1 : 0));
- CHECK_NULL_RETURN_VAL(qn, ONIGERR_MEMORY);
- NQUALIFIER(qn).greedy = tok->u.repeat.greedy;
- r = set_qualifier(qn, *targetp, group, env);
- if (r < 0) return r;
-
- if (tok->u.repeat.possessive != 0) {
- Node* en;
- en = node_new_effect(EFFECT_STOP_BACKTRACK);
- CHECK_NULL_RETURN_VAL(en, ONIGERR_MEMORY);
- NEFFECT(en).target = qn;
- qn = en;
- }
-
- if (r == 0) {
- *targetp = qn;
- }
- else if (r == 2) { /* split case: /abc+/ */
- Node *tmp;
-
- *targetp = node_new_list(*targetp, NULL);
- CHECK_NULL_RETURN_VAL(*targetp, ONIGERR_MEMORY);
- tmp = NCONS(*targetp).right = node_new_list(qn, NULL);
- CHECK_NULL_RETURN_VAL(tmp, ONIGERR_MEMORY);
- targetp = &(NCONS(tmp).left);
- }
- goto re_entry;
- }
- }
-
- return r;
-}
-
-static int
-parse_branch(Node** top, OnigToken* tok, int term,
- UChar** src, UChar* end, ScanEnv* env)
-{
- int r;
- Node *node, **headp;
-
- *top = NULL;
- r = parse_exp(&node, tok, term, src, end, env);
- if (r < 0) return r;
-
- if (r == TK_EOT || r == term || r == TK_ALT) {
- *top = node;
- }
- else {
- *top = node_new_list(node, NULL);
- headp = &(NCONS(*top).right);
- while (r != TK_EOT && r != term && r != TK_ALT) {
- r = parse_exp(&node, tok, term, src, end, env);
- if (r < 0) return r;
-
- if (NTYPE(node) == N_LIST) {
- *headp = node;
- while (IS_NOT_NULL(NCONS(node).right)) node = NCONS(node).right;
- headp = &(NCONS(node).right);
- }
- else {
- *headp = node_new_list(node, NULL);
- headp = &(NCONS(*headp).right);
- }
- }
- }
-
- return r;
-}
-
-/* term_tok: TK_EOT or TK_SUBEXP_CLOSE */
-static int
-parse_subexp(Node** top, OnigToken* tok, int term,
- UChar** src, UChar* end, ScanEnv* env)
-{
- int r;
- Node *node, **headp;
-
- *top = NULL;
- r = parse_branch(&node, tok, term, src, end, env);
- if (r < 0) {
- onig_node_free(node);
- return r;
- }
-
- if (r == term) {
- *top = node;
- }
- else if (r == TK_ALT) {
- *top = node_new_alt(node, NULL);
- headp = &(NCONS(*top).right);
- while (r == TK_ALT) {
- r = fetch_token(tok, src, end, env);
- if (r < 0) return r;
- r = parse_branch(&node, tok, term, src, end, env);
- if (r < 0) return r;
-
- *headp = node_new_alt(node, NULL);
- headp = &(NCONS(*headp).right);
- }
-
- if (tok->type != term)
- goto err;
- }
- else {
- err:
- if (term == TK_SUBEXP_CLOSE)
- return ONIGERR_END_PATTERN_WITH_UNMATCHED_PARENTHESIS;
- else
- return ONIGERR_PARSER_BUG;
- }
-
- return r;
-}
-
-static int
-parse_regexp(Node** top, UChar** src, UChar* end, ScanEnv* env)
-{
- int r;
- OnigToken tok;
-
- r = fetch_token(&tok, src, end, env);
- if (r < 0) return r;
- r = parse_subexp(top, &tok, TK_EOT, src, end, env);
- if (r < 0) return r;
- return 0;
-}
-
-extern int
-onig_parse_make_tree(Node** root, UChar* pattern, UChar* end, regex_t* reg,
- ScanEnv* env)
-{
- int r;
- UChar* p;
-
-#ifdef USE_NAMED_GROUP
- names_clear(reg);
-#endif
-
- scan_env_clear(env);
- env->option = reg->options;
- env->enc = reg->enc;
- env->syntax = reg->syntax;
- env->pattern = pattern;
- env->pattern_end = end;
- env->reg = reg;
-
- *root = NULL;
- p = pattern;
- r = parse_regexp(root, &p, end, env);
- reg->num_mem = env->num_mem;
- return r;
-}
-
-extern void
-onig_scan_env_set_error_string(ScanEnv* env, int ecode,
- UChar* arg, UChar* arg_end)
-{
- env->error = arg;
- env->error_end = arg_end;
-}
diff --git a/ext/mbstring/oniguruma/regparse.h b/ext/mbstring/oniguruma/regparse.h
deleted file mode 100644
index b2726becbd..0000000000
--- a/ext/mbstring/oniguruma/regparse.h
+++ /dev/null
@@ -1,277 +0,0 @@
-/**********************************************************************
-
- regparse.h - Oniguruma (regular expression library)
-
- Copyright (C) 2003-2004 K.Kosako (kosako@sofnec.co.jp)
-
-**********************************************************************/
-#ifndef REGPARSE_H
-#define REGPARSE_H
-
-#include "regint.h"
-
-/* node type */
-#define N_STRING (1<< 0)
-#define N_CCLASS (1<< 1)
-#define N_CTYPE (1<< 2)
-#define N_ANYCHAR (1<< 3)
-#define N_BACKREF (1<< 4)
-#define N_QUALIFIER (1<< 5)
-#define N_EFFECT (1<< 6)
-#define N_ANCHOR (1<< 7)
-#define N_LIST (1<< 8)
-#define N_ALT (1<< 9)
-#define N_CALL (1<<10)
-
-#define IS_NODE_TYPE_SIMPLE(type) \
- (((type) & (N_STRING | N_CCLASS | N_CTYPE | N_ANYCHAR | N_BACKREF)) != 0)
-
-#define NTYPE(node) ((node)->type)
-#define NCONS(node) ((node)->u.cons)
-#define NSTRING(node) ((node)->u.str)
-#define NCCLASS(node) ((node)->u.cclass)
-#define NCTYPE(node) ((node)->u.ctype)
-#define NQUALIFIER(node) ((node)->u.qualifier)
-#define NANCHOR(node) ((node)->u.anchor)
-#define NBACKREF(node) ((node)->u.backref)
-#define NEFFECT(node) ((node)->u.effect)
-#define NCALL(node) ((node)->u.call)
-
-#define CTYPE_WORD (1<<0)
-#define CTYPE_NOT_WORD (1<<1)
-#define CTYPE_WHITE_SPACE (1<<2)
-#define CTYPE_NOT_WHITE_SPACE (1<<3)
-#define CTYPE_DIGIT (1<<4)
-#define CTYPE_NOT_DIGIT (1<<5)
-
-
-#define ANCHOR_ANYCHAR_STAR_MASK (ANCHOR_ANYCHAR_STAR | ANCHOR_ANYCHAR_STAR_PL)
-#define ANCHOR_END_BUF_MASK (ANCHOR_END_BUF | ANCHOR_SEMI_END_BUF)
-
-#define EFFECT_MEMORY (1<<0)
-#define EFFECT_OPTION (1<<1)
-#define EFFECT_STOP_BACKTRACK (1<<2)
-
-#define REPEAT_INFINITE -1
-#define IS_REPEAT_INFINITE(n) ((n) == REPEAT_INFINITE)
-
-#define NODE_STR_MARGIN 16
-#define NODE_STR_BUF_SIZE 24 /* sizeof(CClassNode) - sizeof(int)*4 */
-#define NODE_BACKREFS_SIZE 7
-
-#define NSTR_RAW (1<<0) /* by backslashed number */
-#define NSTR_CASE_AMBIG (1<<1)
-
-#define NSTRING_LEN(node) ((node)->u.str.end - (node)->u.str.s)
-#define NSTRING_SET_RAW(node) (node)->u.str.flag |= NSTR_RAW
-#define NSTRING_CLEAR_RAW(node) (node)->u.str.flag &= ~NSTR_RAW
-#define NSTRING_SET_CASE_AMBIG(node) (node)->u.str.flag |= NSTR_CASE_AMBIG
-#define NSTRING_IS_RAW(node) (((node)->u.str.flag & NSTR_RAW) != 0)
-#define NSTRING_IS_CASE_AMBIG(node) \
- (((node)->u.str.flag & NSTR_CASE_AMBIG) != 0)
-
-#define BACKREFS_P(br) \
- (IS_NOT_NULL((br)->back_dynamic) ? (br)->back_dynamic : (br)->back_static);
-
-#define CCLASS_SET_NOT(cc) (cc)->not = 1
-
-#define NQ_TARGET_ISNOT_EMPTY 0
-#define NQ_TARGET_IS_EMPTY 1
-#define NQ_TARGET_IS_EMPTY_MEM 2
-#define NQ_TARGET_IS_EMPTY_REC 3
-
-
-typedef struct {
- UChar* s;
- UChar* end;
- unsigned int flag;
- int capa; /* (allocated size - 1) or 0: use buf[] */
- UChar buf[NODE_STR_BUF_SIZE];
-} StrNode;
-
-typedef struct {
- int not;
- BitSet bs;
- BBuf* mbuf; /* multi-byte info or NULL */
-} CClassNode;
-
-typedef struct {
- struct _Node* target;
- int lower;
- int upper;
- int greedy;
- int by_number; /* {n,m} */
- int target_empty_info;
- struct _Node* head_exact;
- struct _Node* next_head_exact;
- int is_refered; /* include called node. don't eliminate even if {0} */
-} QualifierNode;
-
-/* status bits */
-#define NST_MIN_FIXED (1<<0)
-#define NST_MAX_FIXED (1<<1)
-#define NST_CLEN_FIXED (1<<2)
-#define NST_MARK1 (1<<3)
-#define NST_MARK2 (1<<4)
-#define NST_MEM_BACKREFED (1<<5)
-#define NST_SIMPLE_REPEAT (1<<6) /* for stop backtrack optimization */
-
-#define NST_RECURSION (1<<7)
-#define NST_CALLED (1<<8)
-#define NST_ADDR_FIXED (1<<9)
-#define NST_NAMED_GROUP (1<<10)
-#define NST_NAME_REF (1<<11)
-
-#define SET_EFFECT_STATUS(node,f) (node)->u.effect.state |= (f)
-#define CLEAR_EFFECT_STATUS(node,f) (node)->u.effect.state &= ~(f)
-
-#define IS_EFFECT_CALLED(en) (((en)->state & NST_CALLED) != 0)
-#define IS_EFFECT_ADDR_FIXED(en) (((en)->state & NST_ADDR_FIXED) != 0)
-#define IS_EFFECT_RECURSION(en) (((en)->state & NST_RECURSION) != 0)
-#define IS_EFFECT_MARK1(en) (((en)->state & NST_MARK1) != 0)
-#define IS_EFFECT_MARK2(en) (((en)->state & NST_MARK2) != 0)
-#define IS_EFFECT_MIN_FIXED(en) (((en)->state & NST_MIN_FIXED) != 0)
-#define IS_EFFECT_MAX_FIXED(en) (((en)->state & NST_MAX_FIXED) != 0)
-#define IS_EFFECT_CLEN_FIXED(en) (((en)->state & NST_CLEN_FIXED) != 0)
-#define IS_EFFECT_SIMPLE_REPEAT(en) (((en)->state & NST_SIMPLE_REPEAT) != 0)
-#define IS_EFFECT_NAMED_GROUP(en) (((en)->state & NST_NAMED_GROUP) != 0)
-
-#define SET_CALL_RECURSION(node) (node)->u.call.state |= NST_RECURSION
-#define IS_CALL_RECURSION(cn) (((cn)->state & NST_RECURSION) != 0)
-#define IS_CALL_NAME_REF(cn) (((cn)->state & NST_NAME_REF) != 0)
-#define IS_BACKREF_NAME_REF(bn) (((bn)->state & NST_NAME_REF) != 0)
-
-typedef struct {
- int state;
- int type;
- int regnum;
- OnigOptionType option;
- struct _Node* target;
- AbsAddrType call_addr;
- /* for multiple call reference */
- OnigDistance min_len; /* min length (byte) */
- OnigDistance max_len; /* max length (byte) */
- int char_len; /* character length */
- int opt_count; /* referenced count in optimize_node_left() */
-} EffectNode;
-
-#define CALLNODE_REFNUM_UNDEF -1
-
-#ifdef USE_SUBEXP_CALL
-
-typedef struct {
- int offset;
- struct _Node* target;
-} UnsetAddr;
-
-typedef struct {
- int num;
- int alloc;
- UnsetAddr* us;
-} UnsetAddrList;
-
-typedef struct {
- int state;
- int ref_num;
- UChar* name;
- UChar* name_end;
- struct _Node* target; /* EffectNode : EFFECT_MEMORY */
- UnsetAddrList* unset_addr_list;
-} CallNode;
-
-#endif
-
-typedef struct {
- int state;
- int back_num;
- int back_static[NODE_BACKREFS_SIZE];
- int* back_dynamic;
-} BackrefNode;
-
-typedef struct {
- int type;
- struct _Node* target;
- int char_len;
-} AnchorNode;
-
-typedef struct _Node {
- int type;
- union {
- StrNode str;
- CClassNode cclass;
- QualifierNode qualifier;
- EffectNode effect;
-#ifdef USE_SUBEXP_CALL
- CallNode call;
-#endif
- BackrefNode backref;
- AnchorNode anchor;
- struct {
- struct _Node* left;
- struct _Node* right;
- } cons;
- struct {
- int type;
- } ctype;
- } u;
-} Node;
-
-#define NULL_NODE ((Node* )0)
-
-#define SCANENV_MEMNODES_SIZE 8
-#define SCANENV_MEM_NODES(senv) \
- (IS_NOT_NULL((senv)->mem_nodes_dynamic) ? \
- (senv)->mem_nodes_dynamic : (senv)->mem_nodes_static)
-
-typedef struct {
- OnigOptionType option;
- OnigEncoding enc;
- OnigSyntaxType* syntax;
- BitStatusType capture_history;
- BitStatusType bt_mem_start;
- BitStatusType bt_mem_end;
- BitStatusType backrefed_mem;
- UChar* pattern;
- UChar* pattern_end;
- UChar* error;
- UChar* error_end;
- regex_t* reg; /* for reg->names only */
- int num_call;
-#ifdef USE_SUBEXP_CALL
- UnsetAddrList* unset_addr_list;
-#endif
- int num_mem;
-#ifdef USE_NAMED_GROUP
- int num_named;
-#endif
- int mem_alloc;
- Node* mem_nodes_static[SCANENV_MEMNODES_SIZE];
- Node** mem_nodes_dynamic;
-} ScanEnv;
-
-
-#define IS_SYNTAX_OP(syn, opm) (((syn)->op & (opm)) != 0)
-#define IS_SYNTAX_OP2(syn, opm) (((syn)->op2 & (opm)) != 0)
-#define IS_SYNTAX_BV(syn, bvm) (((syn)->behavior & (bvm)) != 0)
-
-extern int onig_is_code_in_cc P_((OnigEncoding enc, OnigCodePoint code, CClassNode* cc));
-extern int onig_strncmp P_((UChar* s1, UChar* s2, int n));
-extern void onig_scan_env_set_error_string P_((ScanEnv* env, int ecode, UChar* arg, UChar* arg_end));
-extern int onig_scan_unsigned_number P_((UChar** src, UChar* end, OnigEncoding enc));
-extern void onig_reduce_nested_qualifier P_((Node* pnode, Node* cnode));
-extern void onig_node_conv_to_str_node P_((Node* node, int raw));
-extern int onig_node_str_cat P_((Node* node, UChar* s, UChar* end));
-extern void onig_node_free P_((Node* node));
-extern Node* onig_node_new_effect P_((int type));
-extern Node* onig_node_new_anchor P_((int type));
-extern int onig_free_node_list();
-extern int onig_names_free P_((regex_t* reg));
-extern int onig_parse_make_tree P_((Node** root, UChar* pattern, UChar* end, regex_t* reg, ScanEnv* env));
-
-#ifdef ONIG_DEBUG
-#ifdef USE_NAMED_GROUP
-extern int onig_print_names(FILE*, regex_t*);
-#endif
-#endif
-
-#endif /* REGPARSE_H */
diff --git a/ext/mbstring/oniguruma/regposerr.c b/ext/mbstring/oniguruma/regposerr.c
deleted file mode 100644
index 533f813c0c..0000000000
--- a/ext/mbstring/oniguruma/regposerr.c
+++ /dev/null
@@ -1,68 +0,0 @@
-/**********************************************************************
-
- regposerr.c - Oniguruma (regular expression library)
-
- Copyright (C) 2003-2004 K.Kosako (kosako@sofnec.co.jp)
-
-**********************************************************************/
-#include "config.h"
-#include "onigposix.h"
-
-#ifdef HAVE_STRING_H
-# include <string.h>
-#else
-# include <strings.h>
-#endif
-
-static char* ESTRING[] = {
- NULL,
- "failed to match", /* REG_NOMATCH */
- "Invalid regular expression", /* REG_BADPAT */
- "invalid collating element referenced", /* REG_ECOLLATE */
- "invalid character class type referenced", /* REG_ECTYPE */
- "bad backslash-escape sequence", /* REG_EESCAPE */
- "invalid back reference number", /* REG_ESUBREG */
- "imbalanced [ and ]", /* REG_EBRACK */
- "imbalanced ( and )", /* REG_EPAREN */
- "imbalanced { and }", /* REG_EBRACE */
- "invalid repeat range {n,m}", /* REG_BADBR */
- "invalid range", /* REG_ERANGE */
- "Out of memory", /* REG_ESPACE */
- "? * + not preceded by valid regular expression", /* REG_BADRPT */
-
- /* Extended errors */
- "internal error", /* REG_EONIG_INTERNAL */
- "invalid wide char value", /* REG_EONIG_BADWC */
- "invalid argument", /* REG_EONIG_BADARG */
- "multi-thread error" /* REG_EONIG_THREAD */
-};
-
-#include <stdio.h>
-
-
-extern size_t
-regerror(int posix_ecode, const regex_t* reg, char* buf, size_t size)
-{
- char* s;
- char tbuf[35];
- size_t len;
-
- if (posix_ecode > 0 && posix_ecode < sizeof(ESTRING) / sizeof(ESTRING[0])) {
- s = ESTRING[posix_ecode];
- }
- else if (posix_ecode == 0) {
- s = "";
- }
- else {
- sprintf(tbuf, "undefined error code (%d)", posix_ecode);
- s = tbuf;
- }
-
- len = strlen(s) + 1;
-
- if (buf != NULL && size > 0) {
- strncpy(buf, s, size - 1);
- buf[size - 1] = '\0';
- }
- return len;
-}
diff --git a/ext/mbstring/oniguruma/regposix.c b/ext/mbstring/oniguruma/regposix.c
deleted file mode 100644
index 4cb30cc565..0000000000
--- a/ext/mbstring/oniguruma/regposix.c
+++ /dev/null
@@ -1,252 +0,0 @@
-/**********************************************************************
-
- regposix.c - Oniguruma (regular expression library)
-
- Copyright (C) 2003-2004 K.Kosako (kosako@sofnec.co.jp)
-
-**********************************************************************/
-
-#define regex_t onig_regex_t
-#include "regint.h"
-#undef regex_t
-#include "onigposix.h"
-
-#define ONIG_C(reg) ((onig_regex_t* )((reg)->onig))
-#define PONIG_C(reg) ((onig_regex_t** )(&(reg)->onig))
-
-#if 1
-#define ENC_STRING_LEN(enc,s,len) do { \
- UChar* tmps = (UChar* )(s); \
- /* while (*tmps != 0) tmps += enc_len(enc,*tmps); */ \
- while (*tmps != 0) tmps++; /* OK for UTF-8, EUC-JP, Shift_JIS */ \
- len = tmps - (UChar* )(s); \
-} while(0)
-#else
-#define ENC_STRING_LEN(enc,s,len) len = strlen(s)
-#endif
-
-typedef struct {
- int onig_err;
- int posix_err;
-} O2PERR;
-
-static int
-onig2posix_error_code(int code)
-{
- static O2PERR o2p[] = {
- { ONIG_MISMATCH, REG_NOMATCH },
- { ONIG_NO_SUPPORT_CONFIG, REG_EONIG_INTERNAL },
- { ONIGERR_MEMORY, REG_ESPACE },
- { ONIGERR_MATCH_STACK_LIMIT_OVER, REG_EONIG_INTERNAL },
- { ONIGERR_TYPE_BUG, REG_EONIG_INTERNAL },
- { ONIGERR_PARSER_BUG, REG_EONIG_INTERNAL },
- { ONIGERR_STACK_BUG, REG_EONIG_INTERNAL },
- { ONIGERR_UNDEFINED_BYTECODE, REG_EONIG_INTERNAL },
- { ONIGERR_UNEXPECTED_BYTECODE, REG_EONIG_INTERNAL },
- { ONIGERR_DEFAULT_ENCODING_IS_NOT_SETTED, REG_EONIG_BADARG },
- { ONIGERR_SPECIFIED_ENCODING_CANT_CONVERT_TO_WIDE_CHAR, REG_EONIG_BADARG },
- { ONIGERR_INVALID_ARGUMENT, REG_EONIG_BADARG },
- { ONIGERR_END_PATTERN_AT_LEFT_BRACE, REG_EBRACE },
- { ONIGERR_END_PATTERN_AT_LEFT_BRACKET, REG_EBRACK },
- { ONIGERR_EMPTY_CHAR_CLASS, REG_ECTYPE },
- { ONIGERR_PREMATURE_END_OF_CHAR_CLASS, REG_ECTYPE },
- { ONIGERR_END_PATTERN_AT_BACKSLASH, REG_EESCAPE },
- { ONIGERR_END_PATTERN_AT_META, REG_EESCAPE },
- { ONIGERR_END_PATTERN_AT_CONTROL, REG_EESCAPE },
- { ONIGERR_META_CODE_SYNTAX, REG_BADPAT },
- { ONIGERR_CONTROL_CODE_SYNTAX, REG_BADPAT },
- { ONIGERR_CHAR_CLASS_VALUE_AT_END_OF_RANGE, REG_ECTYPE },
- { ONIGERR_CHAR_CLASS_VALUE_AT_START_OF_RANGE, REG_ECTYPE },
- { ONIGERR_UNMATCHED_RANGE_SPECIFIER_IN_CHAR_CLASS, REG_ECTYPE },
- { ONIGERR_TARGET_OF_REPEAT_OPERATOR_NOT_SPECIFIED, REG_BADRPT },
- { ONIGERR_TARGET_OF_REPEAT_OPERATOR_INVALID, REG_BADRPT },
- { ONIGERR_NESTED_REPEAT_OPERATOR, REG_BADRPT },
- { ONIGERR_UNMATCHED_CLOSE_PARENTHESIS, REG_EPAREN },
- { ONIGERR_END_PATTERN_WITH_UNMATCHED_PARENTHESIS, REG_EPAREN },
- { ONIGERR_END_PATTERN_IN_GROUP, REG_BADPAT },
- { ONIGERR_UNDEFINED_GROUP_OPTION, REG_BADPAT },
- { ONIGERR_INVALID_POSIX_BRACKET_TYPE, REG_BADPAT },
- { ONIGERR_INVALID_LOOK_BEHIND_PATTERN, REG_BADPAT },
- { ONIGERR_INVALID_REPEAT_RANGE_PATTERN, REG_BADPAT },
- { ONIGERR_TOO_BIG_NUMBER, REG_BADPAT },
- { ONIGERR_TOO_BIG_NUMBER_FOR_REPEAT_RANGE, REG_BADBR },
- { ONIGERR_UPPER_SMALLER_THAN_LOWER_IN_REPEAT_RANGE, REG_BADBR },
- { ONIGERR_EMPTY_RANGE_IN_CHAR_CLASS, REG_ECTYPE },
- { ONIGERR_MISMATCH_CODE_LENGTH_IN_CLASS_RANGE, REG_ECTYPE },
- { ONIGERR_TOO_MANY_MULTI_BYTE_RANGES, REG_ECTYPE },
- { ONIGERR_TOO_SHORT_MULTI_BYTE_STRING, REG_BADPAT },
- { ONIGERR_TOO_BIG_BACKREF_NUMBER, REG_ESUBREG },
- { ONIGERR_INVALID_BACKREF, REG_ESUBREG },
- { ONIGERR_NUMBERED_BACKREF_OR_CALL_NOT_ALLOWED, REG_BADPAT },
- { ONIGERR_TOO_BIG_WIDE_CHAR_VALUE, REG_EONIG_BADWC },
- { ONIGERR_TOO_LONG_WIDE_CHAR_VALUE, REG_EONIG_BADWC },
- { ONIGERR_INVALID_WIDE_CHAR_VALUE, REG_EONIG_BADWC },
- { ONIGERR_EMPTY_GROUP_NAME, REG_BADPAT },
- { ONIGERR_INVALID_GROUP_NAME, REG_BADPAT },
- { ONIGERR_INVALID_CHAR_IN_GROUP_NAME, REG_BADPAT },
- { ONIGERR_UNDEFINED_NAME_REFERENCE, REG_BADPAT },
- { ONIGERR_UNDEFINED_GROUP_REFERENCE, REG_BADPAT },
- { ONIGERR_MULTIPLEX_DEFINED_NAME, REG_BADPAT },
- { ONIGERR_MULTIPLEX_DEFINITION_NAME_CALL, REG_BADPAT },
- { ONIGERR_NEVER_ENDING_RECURSION, REG_BADPAT },
- { ONIGERR_GROUP_NUMBER_OVER_FOR_CAPTURE_HISTORY, REG_BADPAT },
- { ONIGERR_INVALID_CHAR_PROPERTY_NAME, REG_BADPAT },
- { ONIGERR_OVER_THREAD_PASS_LIMIT_COUNT, REG_EONIG_THREAD }
-
- };
-
- int i;
-
- if (code >= 0) return 0;
-
- for (i = 0; i < sizeof(o2p) / sizeof(o2p[0]); i++) {
- if (code == o2p[i].onig_err)
- return o2p[i].posix_err;
- }
-
- return REG_EONIG_INTERNAL; /* but, unknown error code */
-}
-
-extern int
-regcomp(regex_t* reg, const char* pattern, int posix_options)
-{
- int r, len;
- OnigSyntaxType* syntax = OnigDefaultSyntax;
- OnigOptionType options;
-
- if ((posix_options & REG_EXTENDED) == 0)
- syntax = ONIG_SYNTAX_POSIX_BASIC;
-
- options = syntax->options;
- if ((posix_options & REG_ICASE) != 0)
- ONIG_OPTION_ON(options, ONIG_OPTION_IGNORECASE);
- if ((posix_options & REG_NEWLINE) != 0) {
- ONIG_OPTION_ON( options, ONIG_OPTION_NEGATE_SINGLELINE);
- ONIG_OPTION_OFF(options, ONIG_OPTION_SINGLELINE);
- }
-
- reg->comp_options = posix_options;
-
- ENC_STRING_LEN(OnigEncDefaultCharEncoding, pattern, len);
- r = onig_new(PONIG_C(reg), (UChar* )pattern, (UChar* )(pattern + len),
- options, OnigEncDefaultCharEncoding, syntax,
- (OnigErrorInfo* )NULL);
- if (r != ONIG_NORMAL) {
- return onig2posix_error_code(r);
- }
-
- reg->re_nsub = ONIG_C(reg)->num_mem;
- return 0;
-}
-
-extern int
-regexec(regex_t* reg, const char* str, size_t nmatch,
- regmatch_t pmatch[], int posix_options)
-{
- int r, i, len;
- UChar* end;
- OnigOptionType options;
-
- options = ONIG_OPTION_POSIX_REGION;
- if ((posix_options & REG_NOTBOL) != 0) options |= ONIG_OPTION_NOTBOL;
- if ((posix_options & REG_NOTEOL) != 0) options |= ONIG_OPTION_NOTEOL;
-
- if ((reg->comp_options & REG_NOSUB) != 0) {
- pmatch = (regmatch_t* )NULL;
- nmatch = 0;
- }
-
- ENC_STRING_LEN(ONIG_C(reg)->code,str,len);
- end = (UChar* )(str + len);
- r = onig_search(ONIG_C(reg), (UChar* )str, end, (UChar* )str, end,
- (OnigRegion* )pmatch, options);
-
- if (r >= 0) {
- r = 0; /* Match */
- }
- else if (r == ONIG_MISMATCH) {
- r = REG_NOMATCH;
- for (i = 0; i < (int )nmatch; i++)
- pmatch[i].rm_so = pmatch[i].rm_eo = ONIG_REGION_NOTPOS;
- }
- else {
- r = onig2posix_error_code(r);
- }
-
- return r;
-}
-
-extern void
-regfree(regex_t* reg)
-{
- onig_free(ONIG_C(reg));
-}
-
-
-extern void
-reg_set_encoding(int mb_code)
-{
- OnigEncoding enc;
-
- switch (mb_code) {
- case REG_POSIX_ENCODING_ASCII:
- enc = ONIG_ENCODING_ASCII;
- break;
- case REG_POSIX_ENCODING_EUC_JP:
- enc = ONIG_ENCODING_EUC_JP;
- break;
- case REG_POSIX_ENCODING_SJIS:
- enc = ONIG_ENCODING_SJIS;
- break;
- case REG_POSIX_ENCODING_UTF8:
- enc = ONIG_ENCODING_UTF8;
- break;
- default:
- return ;
- break;
- }
-
- onigenc_set_default_encoding(enc);
-}
-
-extern int
-reg_name_to_group_numbers(regex_t* reg,
- unsigned char* name, unsigned char* name_end, int** nums)
-{
- return onig_name_to_group_numbers(ONIG_C(reg), name, name_end, nums);
-}
-
-typedef struct {
- int (*func)(unsigned char*,unsigned char*,int,int*,regex_t*,void*);
- regex_t* reg;
- void* arg;
-} i_wrap;
-
-static int i_wrapper(unsigned char* name, unsigned char* name_end,
- int ng, int* gs,
- onig_regex_t* reg, void* arg)
-{
- i_wrap* warg = (i_wrap* )arg;
-
- return (*warg->func)(name, name_end, ng, gs, warg->reg, warg->arg);
-}
-
-extern int
-reg_foreach_name(regex_t* reg,
- int (*func)(unsigned char*,unsigned char*,int,int*,regex_t*,void*),
- void* arg)
-{
- i_wrap warg;
-
- warg.func = func;
- warg.reg = reg;
- warg.arg = arg;
-
- return onig_foreach_name(ONIG_C(reg), i_wrapper, &warg);
-}
-
-extern int
-reg_number_of_names(regex_t* reg)
-{
- return onig_number_of_names(ONIG_C(reg));
-}
diff --git a/ext/mbstring/oniguruma/testc.c b/ext/mbstring/oniguruma/testc.c
deleted file mode 100644
index e4d197e21d..0000000000
--- a/ext/mbstring/oniguruma/testc.c
+++ /dev/null
@@ -1,833 +0,0 @@
-/*
- * This program was generated by testconv.rb.
- */
-#include<stdio.h>
-
-#ifdef POSIX_TEST
-#include "onigposix.h"
-#else
-#include "oniguruma.h"
-#endif
-
-static int nsucc = 0;
-static int nfail = 0;
-static int nerror = 0;
-
-static FILE* err_file;
-
-#ifndef POSIX_TEST
-static OnigRegion* region;
-#endif
-
-static void xx(char* pattern, char* str, int from, int to, int mem, int not)
-{
- int r;
-
-#ifdef POSIX_TEST
- regex_t reg;
- char buf[200];
- regmatch_t pmatch[20];
-
- r = regcomp(&reg, pattern, REG_EXTENDED | REG_NEWLINE);
- if (r) {
- regerror(r, &reg, buf, sizeof(buf));
- fprintf(err_file, "ERROR: %s\n", buf);
- nerror++;
- return ;
- }
-
- r = regexec(&reg, str, reg.re_nsub + 1, pmatch, 0);
- if (r != 0 && r != REG_NOMATCH) {
- regerror(r, &reg, buf, sizeof(buf));
- fprintf(err_file, "ERROR: %s\n", buf);
- nerror++;
- return ;
- }
-
- if (r == REG_NOMATCH) {
- if (not) {
- fprintf(stdout, "OK(N): /%s/ '%s'\n", pattern, str);
- nsucc++;
- }
- else {
- fprintf(stdout, "FAIL: /%s/ '%s'\n", pattern, str);
- nfail++;
- }
- }
- else {
- if (not) {
- fprintf(stdout, "FAIL(N): /%s/ '%s'\n", pattern, str);
- nfail++;
- }
- else {
- if (pmatch[mem].rm_so == from && pmatch[mem].rm_eo == to) {
- fprintf(stdout, "OK: /%s/ '%s'\n", pattern, str);
- nsucc++;
- }
- else {
- fprintf(stdout, "FAIL: /%s/ '%s' %d-%d : %d-%d\n", pattern, str,
- from, to, pmatch[mem].rm_so, pmatch[mem].rm_eo);
- nfail++;
- }
- }
- }
- regfree(&reg);
-
-#else
- regex_t* reg;
- OnigErrorInfo einfo;
-
- r = onig_new(&reg, (UChar* )pattern, (UChar* )(pattern + strlen(pattern)),
- ONIG_OPTION_DEFAULT, ONIG_ENCODING_EUC_JP, ONIG_SYNTAX_DEFAULT, &einfo);
- if (r) {
- char s[ONIG_MAX_ERROR_MESSAGE_LEN];
- onig_error_code_to_str(s, r, &einfo);
- fprintf(err_file, "ERROR: %s\n", s);
- nerror++;
- return ;
- }
-
- r = onig_search(reg, (UChar* )str, (UChar* )(str + strlen(str)),
- (UChar* )str, (UChar* )(str + strlen(str)),
- region, ONIG_OPTION_NONE);
- if (r < ONIG_MISMATCH) {
- char s[ONIG_MAX_ERROR_MESSAGE_LEN];
- onig_error_code_to_str(s, r);
- fprintf(err_file, "ERROR: %s\n", s);
- nerror++;
- return ;
- }
-
- if (r == ONIG_MISMATCH) {
- if (not) {
- fprintf(stdout, "OK(N): /%s/ '%s'\n", pattern, str);
- nsucc++;
- }
- else {
- fprintf(stdout, "FAIL: /%s/ '%s'\n", pattern, str);
- nfail++;
- }
- }
- else {
- if (not) {
- fprintf(stdout, "FAIL(N): /%s/ '%s'\n", pattern, str);
- nfail++;
- }
- else {
- if (region->beg[mem] == from && region->end[mem] == to) {
- fprintf(stdout, "OK: /%s/ '%s'\n", pattern, str);
- nsucc++;
- }
- else {
- fprintf(stdout, "FAIL: /%s/ '%s' %d-%d : %d-%d\n", pattern, str,
- from, to, region->beg[mem], region->end[mem]);
- nfail++;
- }
- }
- }
- onig_free(reg);
-#endif
-}
-
-static void x2(char* pattern, char* str, int from, int to)
-{
- xx(pattern, str, from, to, 0, 0);
-}
-
-static void x3(char* pattern, char* str, int from, int to, int mem)
-{
- xx(pattern, str, from, to, mem, 0);
-}
-
-static void n(char* pattern, char* str)
-{
- xx(pattern, str, 0, 0, 0, 1);
-}
-
-extern int main(int argc, char* argv[])
-{
- err_file = stdout;
-
-#ifdef POSIX_TEST
- reg_set_encoding(REG_POSIX_ENCODING_EUC_JP);
-#else
- region = onig_region_new();
-#endif
-
- x2("", "", 0, 0);
- x2("^", "", 0, 0);
- x2("$", "", 0, 0);
- x2("\\G", "", 0, 0);
- x2("\\A", "", 0, 0);
- x2("\\Z", "", 0, 0);
- x2("\\z", "", 0, 0);
- x2("^$", "", 0, 0);
- x2("\\ca", "\001", 0, 1);
- x2("\\C-b", "\002", 0, 1);
- x2("\\M-Z", "\xDA", 0, 1);
- x2("", "a", 0, 0);
- x2("a", "a", 0, 1);
- x2("aa", "aa", 0, 2);
- x2("aaa", "aaa", 0, 3);
- x2("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", 0, 35);
- x2("ab", "ab", 0, 2);
- x2("b", "ab", 1, 2);
- x2("bc", "abc", 1, 3);
- x2("\\17", "\017", 0, 1);
- x2("\\x1f", "\x1f", 0, 1);
- x2("\\xFE", "\xfe", 0, 1);
- x2("a(?#....\\\\JJJJ)b", "ab", 0, 2);
- x2("(?x) G (o O(?-x)oO) g L", "GoOoOgLe", 0, 7);
- x2(".", "a", 0, 1);
- n(".", "");
- x2("..", "ab", 0, 2);
- x2("\\w", "e", 0, 1);
- n("\\W", "e");
- x2("\\s", " ", 0, 1);
- x2("\\S", "b", 0, 1);
- x2("\\d", "4", 0, 1);
- n("\\D", "4");
- x2("\\b", "z ", 0, 0);
- x2("\\b", " z", 1, 1);
- x2("\\B", "zz ", 1, 1);
- x2("\\B", "z ", 2, 2);
- x2("\\B", " z", 0, 0);
- x2("[ab]", "b", 0, 1);
- n("[ab]", "c");
- x2("[a-z]", "t", 0, 1);
- n("[^a]", "a");
- x2("[^a]", "\n", 0, 1);
- x2("[]]", "]", 0, 1);
- n("[^]]", "]");
- x2("[\\^]+", "0^^1", 1, 3);
- x2("[b-]", "b", 0, 1);
- x2("[b-]", "-", 0, 1);
- x2("[\\w]", "z", 0, 1);
- n("[\\w]", " ");
- x2("[\\W]", "b$", 1, 2);
- x2("[\\d]", "5", 0, 1);
- n("[\\d]", "e");
- x2("[\\D]", "t", 0, 1);
- n("[\\D]", "3");
- x2("[\\s]", " ", 0, 1);
- n("[\\s]", "a");
- x2("[\\S]", "b", 0, 1);
- n("[\\S]", " ");
- x2("[\\w\\d]", "2", 0, 1);
- n("[\\w\\d]", " ");
- x2("[[:upper:]]", "B", 0, 1);
- x2("[*[:xdigit:]+]", "+", 0, 1);
- x2("[*[:xdigit:]+]", "GHIKK-9+*", 6, 7);
- x2("[*[:xdigit:]+]", "-@^+", 3, 4);
- n("[[:upper]]", "A");
- x2("[[:upper]]", ":", 0, 1);
- x2("[\\044-\\047]", "\046", 0, 1);
- x2("[\\x5a-\\x5c]", "\x5b", 0, 1);
- x2("[\\x6A-\\x6D]", "\x6c", 0, 1);
- n("[\\x6A-\\x6D]", "\x6E");
- n("^[0-9A-F]+ 0+ UNDEF ", "75F 00000000 SECT14A notype () External | _rb_apply");
- x2("[\\[]", "[", 0, 1);
- x2("[\\]]", "]", 0, 1);
- x2("[&]", "&", 0, 1);
- x2("[[ab]]", "b", 0, 1);
- x2("[[ab]c]", "c", 0, 1);
- n("[[^a]]", "a");
- n("[^[a]]", "a");
- x2("[[ab]&&bc]", "b", 0, 1);
- n("[[ab]&&bc]", "a");
- n("[[ab]&&bc]", "c");
- x2("[a-z&&b-y&&c-x]", "w", 0, 1);
- n("[^a-z&&b-y&&c-x]", "w");
- x2("[[^a&&a]&&a-z]", "b", 0, 1);
- n("[[^a&&a]&&a-z]", "a");
- x2("[[^a-z&&bcdef]&&[^c-g]]", "h", 0, 1);
- n("[[^a-z&&bcdef]&&[^c-g]]", "c");
- x2("[^[^abc]&&[^cde]]", "c", 0, 1);
- x2("[^[^abc]&&[^cde]]", "e", 0, 1);
- n("[^[^abc]&&[^cde]]", "f");
- x2("[a-&&-a]", "-", 0, 1);
- n("[a-&&-a]", "&");
- n("\\wabc", " abc");
- x2("a\\Wbc", "a bc", 0, 4);
- x2("a.b.c", "aabbc", 0, 5);
- x2(".\\wb\\W..c", "abb bcc", 0, 7);
- x2("\\s\\wzzz", " zzzz", 0, 5);
- x2("aa.b", "aabb", 0, 4);
- n(".a", "ab");
- x2(".a", "aa", 0, 2);
- x2("^a", "a", 0, 1);
- x2("^a$", "a", 0, 1);
- x2("^\\w$", "a", 0, 1);
- n("^\\w$", " ");
- x2("^\\wab$", "zab", 0, 3);
- x2("^\\wabcdef$", "zabcdef", 0, 7);
- x2("^\\w...def$", "zabcdef", 0, 7);
- x2("\\w\\w\\s\\Waaa\\d", "aa aaa4", 0, 8);
- x2("\\A\\Z", "", 0, 0);
- x2("\\Axyz", "xyz", 0, 3);
- x2("xyz\\Z", "xyz", 0, 3);
- x2("xyz\\z", "xyz", 0, 3);
- x2("\\Gaz", "az", 0, 2);
- n("\\Gz", "bza");
- n("az\\G", "az");
- n("az\\A", "az");
- n("a\\Az", "az");
- x2("\\^\\$", "^$", 0, 2);
- x2("^x?y", "xy", 0, 2);
- x2("^(x?y)", "xy", 0, 2);
- x2("\\w", "_", 0, 1);
- n("\\W", "_");
- x2("(?=z)z", "z", 0, 1);
- n("(?=z).", "a");
- x2("(?!z)a", "a", 0, 1);
- n("(?!z)a", "z");
- x2("(?i:a)", "a", 0, 1);
- x2("(?i:a)", "A", 0, 1);
- x2("(?i:A)", "a", 0, 1);
- n("(?i:A)", "b");
- x2("(?i:[A-Z])", "a", 0, 1);
- x2("(?i:[f-m])", "H", 0, 1);
- x2("(?i:[f-m])", "h", 0, 1);
- n("(?i:[f-m])", "e");
- x2("(?i:[A-c])", "D", 0, 1);
- x2("(?i:[!-k])", "Z", 0, 1);
- x2("(?i:[!-k])", "7", 0, 1);
- x2("(?i:[T-}])", "b", 0, 1);
- x2("(?i:[T-}])", "{", 0, 1);
- x2("(?i:\\?a)", "?A", 0, 2);
- x2("(?i:\\*A)", "*a", 0, 2);
- n(".", "\n");
- x2("(?m:.)", "\n", 0, 1);
- x2("(?m:a.)", "a\n", 0, 2);
- x2("(?m:.b)", "a\nb", 1, 3);
- n("(?i)(?-i)a", "A");
- n("(?i)(?-i:a)", "A");
- x2("a?", "", 0, 0);
- x2("a?", "b", 0, 0);
- x2("a?", "a", 0, 1);
- x2("a*", "", 0, 0);
- x2("a*", "a", 0, 1);
- x2("a*", "aaa", 0, 3);
- x2("a*", "baaaa", 0, 0);
- n("a+", "");
- x2("a+", "a", 0, 1);
- x2("a+", "aaaa", 0, 4);
- x2("a+", "aabbb", 0, 2);
- x2("a+", "baaaa", 1, 5);
- x2(".?", "", 0, 0);
- x2(".?", "f", 0, 1);
- x2(".?", "\n", 0, 0);
- x2(".*", "", 0, 0);
- x2(".*", "abcde", 0, 5);
- x2(".+", "z", 0, 1);
- x2(".+", "zdswer\n", 0, 6);
- x2("a|b", "a", 0, 1);
- x2("a|b", "b", 0, 1);
- x2("|a", "a", 0, 0);
- x2("(|a)", "a", 0, 0);
- x2("ab|bc", "ab", 0, 2);
- x2("ab|bc", "bc", 0, 2);
- x2("z(?:ab|bc)", "zbc", 0, 3);
- x2("a(?:ab|bc)c", "aabc", 0, 4);
- x2("ab|(?:ac|az)", "az", 0, 2);
- x2("a|b|c", "dc", 1, 2);
- x2("a|b|cd|efg|h|ijk|lmn|o|pq|rstuvwx|yz", "pqr", 0, 2);
- n("a|b|cd|efg|h|ijk|lmn|o|pq|rstuvwx|yz", "mn");
- x2("a|^z", "ba", 1, 2);
- x2("a|^z", "za", 0, 1);
- x2("a|\\Gz", "bza", 2, 3);
- x2("a|\\Gz", "za", 0, 1);
- x2("a|\\Az", "bza", 2, 3);
- x2("a|\\Az", "za", 0, 1);
- x2("a|b\\Z", "ba", 1, 2);
- x2("a|b\\Z", "b", 0, 1);
- x2("a|b\\z", "ba", 1, 2);
- x2("a|b\\z", "b", 0, 1);
- x2("\\w|\\s", " ", 0, 1);
- n("\\w|\\w", " ");
- x2("\\w|%", "%", 0, 1);
- x2("\\w|[&$]", "&", 0, 1);
- x2("[b-d]|[^e-z]", "a", 0, 1);
- x2("(?:a|[c-f])|bz", "dz", 0, 1);
- x2("(?:a|[c-f])|bz", "bz", 0, 2);
- x2("abc|(?=zz)..f", "zzf", 0, 3);
- x2("abc|(?!zz)..f", "abf", 0, 3);
- x2("(?=za)..a|(?=zz)..a", "zza", 0, 3);
- n("(?>a|abd)c", "abdc");
- x2("(?>abd|a)c", "abdc", 0, 4);
- x2("a?|b", "a", 0, 1);
- x2("a?|b", "b", 0, 0);
- x2("a?|b", "", 0, 0);
- x2("a*|b", "aa", 0, 2);
- x2("a*|b*", "ba", 0, 0);
- x2("a*|b*", "ab", 0, 1);
- x2("a+|b*", "", 0, 0);
- x2("a+|b*", "bbb", 0, 3);
- x2("a+|b*", "abbb", 0, 1);
- n("a+|b+", "");
- x2("(a|b)?", "b", 0, 1);
- x2("(a|b)*", "ba", 0, 2);
- x2("(a|b)+", "bab", 0, 3);
- x2("(ab|ca)+", "caabbc", 0, 4);
- x2("(ab|ca)+", "aabca", 1, 5);
- x2("(ab|ca)+", "abzca", 0, 2);
- x2("(a|bab)+", "ababa", 0, 5);
- x2("(a|bab)+", "ba", 1, 2);
- x2("(a|bab)+", "baaaba", 1, 4);
- x2("(?:a|b)(?:a|b)", "ab", 0, 2);
- x2("(?:a*|b*)(?:a*|b*)", "aaabbb", 0, 3);
- x2("(?:a*|b*)(?:a+|b+)", "aaabbb", 0, 6);
- x2("(?:a+|b+){2}", "aaabbb", 0, 6);
- x2("h{0,}", "hhhh", 0, 4);
- x2("(?:a+|b+){1,2}", "aaabbb", 0, 6);
- n("ax{2}*a", "0axxxa1");
- n("a.{0,2}a", "0aXXXa0");
- n("a.{0,2}?a", "0aXXXa0");
- n("a.{0,2}?a", "0aXXXXa0");
- x2("(?:a+|\\Ab*)cc", "cc", 0, 2);
- n("(?:a+|\\Ab*)cc", "abcc");
- x2("(?:^a+|b+)*c", "aabbbabc", 6, 8);
- x2("(?:^a+|b+)*c", "aabbbbc", 0, 7);
- x2("a|(?i)c", "C", 0, 1);
- x2("(?i)c|a", "C", 0, 1);
- x2("(?i)c|a", "A", 0, 1);
- x2("(?i:c)|a", "C", 0, 1);
- n("(?i:c)|a", "A");
- x2("[abc]?", "abc", 0, 1);
- x2("[abc]*", "abc", 0, 3);
- x2("[^abc]*", "abc", 0, 0);
- n("[^abc]+", "abc");
- x2("a??", "aaa", 0, 0);
- x2("ba??b", "bab", 0, 3);
- x2("a*?", "aaa", 0, 0);
- x2("ba*?", "baa", 0, 1);
- x2("ba*?b", "baab", 0, 4);
- x2("a+?", "aaa", 0, 1);
- x2("ba+?", "baa", 0, 2);
- x2("ba+?b", "baab", 0, 4);
- x2("(?:a?)??", "a", 0, 0);
- x2("(?:a??)?", "a", 0, 0);
- x2("(?:a?)+?", "aaa", 0, 1);
- x2("(?:a+)??", "aaa", 0, 0);
- x2("(?:a+)??b", "aaab", 0, 4);
- x2("(?:ab)?{2}", "", 0, 0);
- x2("(?:ab)?{2}", "ababa", 0, 4);
- x2("(?:ab)*{0}", "ababa", 0, 0);
- x2("(?:ab){3,}", "abababab", 0, 8);
- n("(?:ab){3,}", "abab");
- x2("(?:ab){2,4}", "ababab", 0, 6);
- x2("(?:ab){2,4}", "ababababab", 0, 8);
- x2("(?:ab){2,4}?", "ababababab", 0, 4);
- x2("(?:ab){,}", "ab{,}", 0, 5);
- x2("(?:abc)+?{2}", "abcabcabc", 0, 6);
- x2("(?:X*)(?i:xa)", "XXXa", 0, 4);
- x2("(d+)([^abc]z)", "dddz", 0, 4);
- x2("([^abc]*)([^abc]z)", "dddz", 0, 4);
- x2("(\\w+)(\\wz)", "dddz", 0, 4);
- x3("(a)", "a", 0, 1, 1);
- x3("(ab)", "ab", 0, 2, 1);
- x2("((ab))", "ab", 0, 2);
- x3("((ab))", "ab", 0, 2, 1);
- x3("((ab))", "ab", 0, 2, 2);
- x3("((((((((((((((((((((ab))))))))))))))))))))", "ab", 0, 2, 20);
- x3("(ab)(cd)", "abcd", 0, 2, 1);
- x3("(ab)(cd)", "abcd", 2, 4, 2);
- x3("()(a)bc(def)ghijk", "abcdefghijk", 3, 6, 3);
- x3("(()(a)bc(def)ghijk)", "abcdefghijk", 3, 6, 4);
- x2("(^a)", "a", 0, 1);
- x3("(a)|(a)", "ba", 1, 2, 1);
- x3("(^a)|(a)", "ba", 1, 2, 2);
- x3("(a?)", "aaa", 0, 1, 1);
- x3("(a*)", "aaa", 0, 3, 1);
- x3("(a*)", "", 0, 0, 1);
- x3("(a+)", "aaaaaaa", 0, 7, 1);
- x3("(a+|b*)", "bbbaa", 0, 3, 1);
- x3("(a+|b?)", "bbbaa", 0, 1, 1);
- x3("(abc)?", "abc", 0, 3, 1);
- x3("(abc)*", "abc", 0, 3, 1);
- x3("(abc)+", "abc", 0, 3, 1);
- x3("(xyz|abc)+", "abc", 0, 3, 1);
- x3("([xyz][abc]|abc)+", "abc", 0, 3, 1);
- x3("((?i:abc))", "AbC", 0, 3, 1);
- x2("(abc)(?i:\\1)", "abcABC", 0, 6);
- x3("((?m:a.c))", "a\nc", 0, 3, 1);
- x3("((?=az)a)", "azb", 0, 1, 1);
- x3("abc|(.abd)", "zabd", 0, 4, 1);
- x2("(?:abc)|(ABC)", "abc", 0, 3);
- x3("(?i:(abc))|(zzz)", "ABC", 0, 3, 1);
- x3("a*(.)", "aaaaz", 4, 5, 1);
- x3("a*?(.)", "aaaaz", 0, 1, 1);
- x3("a*?(c)", "aaaac", 4, 5, 1);
- x3("[bcd]a*(.)", "caaaaz", 5, 6, 1);
- x3("(\\Abb)cc", "bbcc", 0, 2, 1);
- n("(\\Abb)cc", "zbbcc");
- x3("(^bb)cc", "bbcc", 0, 2, 1);
- n("(^bb)cc", "zbbcc");
- x3("cc(bb$)", "ccbb", 2, 4, 1);
- n("cc(bb$)", "ccbbb");
- n("(\\1)", "");
- n("\\1(a)", "aa");
- n("(a(b)\\1)\\2+", "ababb");
- n("(?:(?:\\1|z)(a))+$", "zaa");
- x2("(?:(?:\\1|z)(a))+$", "zaaa", 0, 4);
- x2("(a)(?=\\1)", "aa", 0, 1);
- n("(a)$|\\1", "az");
- x2("(a)\\1", "aa", 0, 2);
- n("(a)\\1", "ab");
- x2("(a?)\\1", "aa", 0, 2);
- x2("(a??)\\1", "aa", 0, 0);
- x2("(a*)\\1", "aaaaa", 0, 4);
- x3("(a*)\\1", "aaaaa", 0, 2, 1);
- x2("a(b*)\\1", "abbbb", 0, 5);
- x2("a(b*)\\1", "ab", 0, 1);
- x2("(a*)(b*)\\1\\2", "aaabbaaabb", 0, 10);
- x2("(a*)(b*)\\2", "aaabbbb", 0, 7);
- x2("(((((((a*)b))))))c\\7", "aaabcaaa", 0, 8);
- x3("(((((((a*)b))))))c\\7", "aaabcaaa", 0, 3, 7);
- x2("(a)(b)(c)\\2\\1\\3", "abcbac", 0, 6);
- x2("([a-d])\\1", "cc", 0, 2);
- x2("(\\w\\d\\s)\\1", "f5 f5 ", 0, 6);
- n("(\\w\\d\\s)\\1", "f5 f5");
- x2("(who|[a-c]{3})\\1", "whowho", 0, 6);
- x2("...(who|[a-c]{3})\\1", "abcwhowho", 0, 9);
- x2("(who|[a-c]{3})\\1", "cbccbc", 0, 6);
- x2("(^a)\\1", "aa", 0, 2);
- n("(^a)\\1", "baa");
- n("(a$)\\1", "aa");
- n("(ab\\Z)\\1", "ab");
- x2("(a*\\Z)\\1", "a", 1, 1);
- x2(".(a*\\Z)\\1", "ba", 1, 2);
- x3("(.(abc)\\2)", "zabcabc", 0, 7, 1);
- x3("(.(..\\d.)\\2)", "z12341234", 0, 9, 1);
- x2("((?i:az))\\1", "AzAz", 0, 4);
- n("((?i:az))\\1", "Azaz");
- x2("(?<=a)b", "ab", 1, 2);
- n("(?<=a)b", "bb");
- x2("(?<=a|b)b", "bb", 1, 2);
- x2("(?<=a|bc)b", "bcb", 2, 3);
- x2("(?<=a|bc)b", "ab", 1, 2);
- x2("(?<=a|bc||defghij|klmnopq|r)z", "rz", 1, 2);
- x2("(a)\\g<1>", "aa", 0, 2);
- x2("(?<!a)b", "cb", 1, 2);
- n("(?<!a)b", "ab");
- x2("(?<!a|bc)b", "bbb", 0, 1);
- n("(?<!a|bc)z", "bcz");
- x2("(?<name1>a)", "a", 0, 1);
- x2("(?<name_2>ab)\\g<name_2>", "abab", 0, 4);
- x2("(?<name_3>.zv.)\\k<name_3>", "azvbazvb", 0, 8);
- x2("(?<=\\g<ab>)|-\\zEND (?<ab>XyZ)", "XyZ", 3, 3);
- x2("(?<n>|a\\g<n>)+", "", 0, 0);
- x2("(?<n>|\\(\\g<n>\\))+$", "()(())", 0, 6);
- x3("\\g<n>(?<n>.){0}", "X", 0, 1, 1);
- x2("\\g<n>(abc|df(?<n>.YZ){2,8}){0}", "XYZ", 0, 3);
- x2("\\A(?<n>(a\\g<n>)|)\\z", "aaaa", 0, 4);
- x2("(?<n>|\\g<m>\\g<n>)\\z|\\zEND (?<m>a|(b)\\g<m>)", "bbbbabba", 0, 8);
- x2("(?<name1240>\\w+\\sx)a+\\k<name1240>", " fg xaaaaaaaafg x", 2, 18);
- x3("(z)()()(?<_9>a)\\g<_9>", "zaa", 2, 3, 1);
- x2("(.)(((?<_>a)))\\k<_>", "zaa", 0, 3);
- x2("((?<name1>\\d)|(?<name2>\\w))(\\k<name1>|\\k<name2>)", "ff", 0, 2);
- x2("(?:(?<x>)|(?<x>efg))\\k<x>", "", 0, 0);
- x2("(?:(?<x>abc)|(?<x>efg))\\k<x>", "abcefgefg", 3, 9);
- n("(?:(?<x>abc)|(?<x>efg))\\k<x>", "abcefg");
- x2("(?:(?<n1>.)|(?<n1>..)|(?<n1>...)|(?<n1>....)|(?<n1>.....)|(?<n1>......)|(?<n1>.......)|(?<n1>........)|(?<n1>.........)|(?<n1>..........)|(?<n1>...........)|(?<n1>............)|(?<n1>.............)|(?<n1>..............))\\k<n1>$", "a-pyumpyum", 2, 10);
- x3("(?:(?<n1>.)|(?<n1>..)|(?<n1>...)|(?<n1>....)|(?<n1>.....)|(?<n1>......)|(?<n1>.......)|(?<n1>........)|(?<n1>.........)|(?<n1>..........)|(?<n1>...........)|(?<n1>............)|(?<n1>.............)|(?<n1>..............))\\k<n1>$", "xxxxabcdefghijklmnabcdefghijklmn", 4, 18, 14);
- x3("(?<name1>)(?<name2>)(?<name3>)(?<name4>)(?<name5>)(?<name6>)(?<name7>)(?<name8>)(?<name9>)(?<name10>)(?<name11>)(?<name12>)(?<name13>)(?<name14>)(?<name15>)(?<name16>aaa)(?<name17>)$", "aaa", 0, 3, 16);
- x2("(?<foo>a|\\(\\g<foo>\\))", "a", 0, 1);
- x2("(?<foo>a|\\(\\g<foo>\\))", "((((((a))))))", 0, 13);
- x3("(?<foo>a|\\(\\g<foo>\\))", "((((((((a))))))))", 0, 17, 1);
- x2("\\g<bar>|\\zEND(?<bar>.*abc$)", "abcxxxabc", 0, 9);
- x2("\\g<1>|\\zEND(.a.)", "bac", 0, 3);
- x3("\\g<_A>\\g<_A>|\\zEND(.a.)(?<_A>.b.)", "xbxyby", 3, 6, 1);
- x2("\\A(?:\\g<pon>|\\g<pan>|\\zEND (?<pan>a|c\\g<pon>c)(?<pon>b|d\\g<pan>d))$", "cdcbcdc", 0, 7);
- x2("\\A(?<n>|a\\g<m>)\\z|\\zEND (?<m>\\g<n>)", "aaaa", 0, 4);
- x2("(?<n>(a|b\\g<n>c){3,5})", "baaaaca", 1, 5);
- x2("(?<n>(a|b\\g<n>c){3,5})", "baaaacaaaaa", 0, 10);
- x2("()*\\1", "", 0, 0);
- x2("(?:()|())*\\1\\2", "", 0, 0);
- x3("(?:\\1a|())*", "a", 0, 0, 1);
- x2("x((.)*)*x", "0x1x2x3", 1, 6);
- x2("x((.)*)*x(?i:\\1)\\Z", "0x1x2x1X2", 1, 9);
- x2("(?:()|()|()|()|()|())*\\2\\5", "", 0, 0);
- x2("(?:()|()|()|(x)|()|())*\\2b\\5", "b", 0, 1);
- x2("", "¤¢", 0, 0);
- x2("¤¢", "¤¢", 0, 2);
- n("¤¤", "¤¢");
- x2("¤¦¤¦", "¤¦¤¦", 0, 4);
- x2("¤¢¤¤¤¦", "¤¢¤¤¤¦", 0, 6);
- x2("¤³¤³¤³¤³¤³¤³¤³¤³¤³¤³¤³¤³¤³¤³¤³¤³¤³¤³¤³¤³¤³¤³¤³¤³¤³¤³¤³¤³¤³¤³¤³¤³¤³¤³¤³", "¤³¤³¤³¤³¤³¤³¤³¤³¤³¤³¤³¤³¤³¤³¤³¤³¤³¤³¤³¤³¤³¤³¤³¤³¤³¤³¤³¤³¤³¤³¤³¤³¤³¤³¤³", 0, 70);
- x2("¤¢", "¤¤¤¢", 2, 4);
- x2("¤¤¤¦", "¤¢¤¤¤¦", 2, 6);
- x2("\\xca\\xb8", "\xca\xb8", 0, 2);
- x2(".", "¤¢", 0, 2);
- x2("..", "¤«¤­", 0, 4);
- x2("\\w", "¤ª", 0, 2);
- n("\\W", "¤¢");
- x2("[\\W]", "¤¦$", 2, 3);
- x2("\\S", "¤½", 0, 2);
- x2("\\S", "´Á", 0, 2);
- x2("\\b", "µ¤ ", 0, 0);
- x2("\\b", " ¤Û", 1, 1);
- x2("\\B", "¤»¤½ ", 2, 2);
- x2("\\B", "¤¦ ", 3, 3);
- x2("\\B", " ¤¤", 0, 0);
- x2("[¤¿¤Á]", "¤Á", 0, 2);
- n("[¤Ê¤Ë]", "¤Ì");
- x2("[¤¦-¤ª]", "¤¨", 0, 2);
- n("[^¤±]", "¤±");
- x2("[\\w]", "¤Í", 0, 2);
- n("[\\d]", "¤Õ");
- x2("[\\D]", "¤Ï", 0, 2);
- n("[\\s]", "¤¯");
- x2("[\\S]", "¤Ø", 0, 2);
- x2("[\\w\\d]", "¤è", 0, 2);
- x2("[\\w\\d]", " ¤è", 3, 5);
- n("\\wµ´¼Ö", " µ´¼Ö");
- x2("µ´\\W¼Ö", "µ´ ¼Ö", 0, 5);
- x2("¤¢.¤¤.¤¦", "¤¢¤¢¤¤¤¤¤¦", 0, 10);
- x2(".\\w¤¦\\W..¤¾", "¤¨¤¦¤¦ ¤¦¤¾¤¾", 0, 13);
- x2("\\s\\w¤³¤³¤³", " ¤³¤³¤³¤³", 0, 9);
- x2("¤¢¤¢.¤±", "¤¢¤¢¤±¤±", 0, 8);
- n(".¤¤", "¤¤¤¨");
- x2(".¤ª", "¤ª¤ª", 0, 4);
- x2("^¤¢", "¤¢", 0, 2);
- x2("^¤à$", "¤à", 0, 2);
- x2("^\\w$", "¤Ë", 0, 2);
- x2("^\\w¤«¤­¤¯¤±¤³$", "z¤«¤­¤¯¤±¤³", 0, 11);
- x2("^\\w...¤¦¤¨¤ª$", "z¤¢¤¤¤¦¤¦¤¨¤ª", 0, 13);
- x2("\\w\\w\\s\\W¤ª¤ª¤ª\\d", "a¤ª ¤ª¤ª¤ª4", 0, 12);
- x2("\\A¤¿¤Á¤Ä", "¤¿¤Á¤Ä", 0, 6);
- x2("¤à¤á¤â\\Z", "¤à¤á¤â", 0, 6);
- x2("¤«¤­¤¯\\z", "¤«¤­¤¯", 0, 6);
- x2("¤«¤­¤¯\\Z", "¤«¤­¤¯\n", 0, 6);
- x2("\\G¤Ý¤Ô", "¤Ý¤Ô", 0, 4);
- n("\\G¤¨", "¤¦¤¨¤ª");
- n("¤È¤Æ\\G", "¤È¤Æ");
- n("¤Þ¤ß\\A", "¤Þ¤ß");
- n("¤Þ\\A¤ß", "¤Þ¤ß");
- x2("(?=¤»)¤»", "¤»", 0, 2);
- n("(?=¤¦).", "¤¤");
- x2("(?!¤¦)¤«", "¤«", 0, 2);
- n("(?!¤È)¤¢", "¤È");
- x2("(?i:¤¢)", "¤¢", 0, 2);
- x2("(?i:¤Ö¤Ù)", "¤Ö¤Ù", 0, 4);
- n("(?i:¤¤)", "¤¦");
- x2("(?m:¤è.)", "¤è\n", 0, 3);
- x2("(?m:.¤á)", "¤Þ\n¤á", 2, 5);
- x2("¤¢?", "", 0, 0);
- x2("ÊÑ?", "²½", 0, 0);
- x2("ÊÑ?", "ÊÑ", 0, 2);
- x2("ÎÌ*", "", 0, 0);
- x2("ÎÌ*", "ÎÌ", 0, 2);
- x2("»Ò*", "»Ò»Ò»Ò", 0, 6);
- x2("ÇÏ*", "¼¯ÇÏÇÏÇÏÇÏ", 0, 0);
- n("»³+", "");
- x2("²Ï+", "²Ï", 0, 2);
- x2("»þ+", "»þ»þ»þ»þ", 0, 8);
- x2("¤¨+", "¤¨¤¨¤¦¤¦¤¦", 0, 4);
- x2("¤¦+", "¤ª¤¦¤¦¤¦¤¦", 2, 10);
- x2(".?", "¤¿", 0, 2);
- x2(".*", "¤Ñ¤Ô¤×¤Ú", 0, 8);
- x2(".+", "¤í", 0, 2);
- x2(".+", "¤¤¤¦¤¨¤«\n", 0, 8);
- x2("¤¢|¤¤", "¤¢", 0, 2);
- x2("¤¢|¤¤", "¤¤", 0, 2);
- x2("¤¢¤¤|¤¤¤¦", "¤¢¤¤", 0, 4);
- x2("¤¢¤¤|¤¤¤¦", "¤¤¤¦", 0, 4);
- x2("¤ò(?:¤«¤­|¤­¤¯)", "¤ò¤«¤­", 0, 6);
- x2("¤ò(?:¤«¤­|¤­¤¯)¤±", "¤ò¤­¤¯¤±", 0, 8);
- x2("¤¢¤¤|(?:¤¢¤¦|¤¢¤ò)", "¤¢¤ò", 0, 4);
- x2("¤¢|¤¤|¤¦", "¤¨¤¦", 2, 4);
- x2("¤¢|¤¤|¤¦¤¨|¤ª¤«¤­|¤¯|¤±¤³¤µ|¤·¤¹¤»|¤½|¤¿¤Á|¤Ä¤Æ¤È¤Ê¤Ë|¤Ì¤Í", "¤·¤¹¤»", 0, 6);
- n("¤¢|¤¤|¤¦¤¨|¤ª¤«¤­|¤¯|¤±¤³¤µ|¤·¤¹¤»|¤½|¤¿¤Á|¤Ä¤Æ¤È¤Ê¤Ë|¤Ì¤Í", "¤¹¤»");
- x2("¤¢|^¤ï", "¤Ö¤¢", 2, 4);
- x2("¤¢|^¤ò", "¤ò¤¢", 0, 2);
- x2("µ´|\\G¼Ö", "¤±¼Öµ´", 4, 6);
- x2("µ´|\\G¼Ö", "¼Öµ´", 0, 2);
- x2("µ´|\\A¼Ö", "b¼Öµ´", 3, 5);
- x2("µ´|\\A¼Ö", "¼Ö", 0, 2);
- x2("µ´|¼Ö\\Z", "¼Öµ´", 2, 4);
- x2("µ´|¼Ö\\Z", "¼Ö", 0, 2);
- x2("µ´|¼Ö\\Z", "¼Ö\n", 0, 2);
- x2("µ´|¼Ö\\z", "¼Öµ´", 2, 4);
- x2("µ´|¼Ö\\z", "¼Ö", 0, 2);
- x2("\\w|\\s", "¤ª", 0, 2);
- x2("\\w|%", "%¤ª", 0, 1);
- x2("\\w|[&$]", "¤¦&", 0, 2);
- x2("[¤¤-¤±]", "¤¦", 0, 2);
- x2("[¤¤-¤±]|[^¤«-¤³]", "¤¢", 0, 2);
- x2("[¤¤-¤±]|[^¤«-¤³]", "¤«", 0, 2);
- x2("[^¤¢]", "\n", 0, 1);
- x2("(?:¤¢|[¤¦-¤­])|¤¤¤ò", "¤¦¤ò", 0, 2);
- x2("(?:¤¢|[¤¦-¤­])|¤¤¤ò", "¤¤¤ò", 0, 4);
- x2("¤¢¤¤¤¦|(?=¤±¤±)..¤Û", "¤±¤±¤Û", 0, 6);
- x2("¤¢¤¤¤¦|(?!¤±¤±)..¤Û", "¤¢¤¤¤Û", 0, 6);
- x2("(?=¤ò¤¢)..¤¢|(?=¤ò¤ò)..¤¢", "¤ò¤ò¤¢", 0, 6);
- x2("(?<=¤¢|¤¤¤¦)¤¤", "¤¤¤¦¤¤", 4, 6);
- n("(?>¤¢|¤¢¤¤¤¨)¤¦", "¤¢¤¤¤¨¤¦");
- x2("(?>¤¢¤¤¤¨|¤¢)¤¦", "¤¢¤¤¤¨¤¦", 0, 8);
- x2("¤¢?|¤¤", "¤¢", 0, 2);
- x2("¤¢?|¤¤", "¤¤", 0, 0);
- x2("¤¢?|¤¤", "", 0, 0);
- x2("¤¢*|¤¤", "¤¢¤¢", 0, 4);
- x2("¤¢*|¤¤*", "¤¤¤¢", 0, 0);
- x2("¤¢*|¤¤*", "¤¢¤¤", 0, 2);
- x2("[a¤¢]*|¤¤*", "a¤¢¤¤¤¤¤¤", 0, 3);
- x2("¤¢+|¤¤*", "", 0, 0);
- x2("¤¢+|¤¤*", "¤¤¤¤¤¤", 0, 6);
- x2("¤¢+|¤¤*", "¤¢¤¤¤¤¤¤", 0, 2);
- x2("¤¢+|¤¤*", "a¤¢¤¤¤¤¤¤", 0, 0);
- n("¤¢+|¤¤+", "");
- x2("(¤¢|¤¤)?", "¤¤", 0, 2);
- x2("(¤¢|¤¤)*", "¤¤¤¢", 0, 4);
- x2("(¤¢|¤¤)+", "¤¤¤¢¤¤", 0, 6);
- x2("(¤¢¤¤|¤¦¤¢)+", "¤¦¤¢¤¢¤¤¤¦¤¨", 0, 8);
- x2("(¤¢¤¤|¤¦¤¨)+", "¤¦¤¢¤¢¤¤¤¦¤¨", 4, 12);
- x2("(¤¢¤¤|¤¦¤¢)+", "¤¢¤¢¤¤¤¦¤¢", 2, 10);
- x2("(¤¢¤¤|¤¦¤¢)+", "¤¢¤¤¤ò¤¦¤¢", 0, 4);
- x2("(¤¢¤¤|¤¦¤¢)+", "$$zzzz¤¢¤¤¤ò¤¦¤¢", 6, 10);
- x2("(¤¢|¤¤¤¢¤¤)+", "¤¢¤¤¤¢¤¤¤¢", 0, 10);
- x2("(¤¢|¤¤¤¢¤¤)+", "¤¤¤¢", 2, 4);
- x2("(¤¢|¤¤¤¢¤¤)+", "¤¤¤¢¤¢¤¢¤¤¤¢", 2, 8);
- x2("(?:¤¢|¤¤)(?:¤¢|¤¤)", "¤¢¤¤", 0, 4);
- x2("(?:¤¢*|¤¤*)(?:¤¢*|¤¤*)", "¤¢¤¢¤¢¤¤¤¤¤¤", 0, 6);
- x2("(?:¤¢*|¤¤*)(?:¤¢+|¤¤+)", "¤¢¤¢¤¢¤¤¤¤¤¤", 0, 12);
- x2("(?:¤¢+|¤¤+){2}", "¤¢¤¢¤¢¤¤¤¤¤¤", 0, 12);
- x2("(?:¤¢+|¤¤+){1,2}", "¤¢¤¢¤¢¤¤¤¤¤¤", 0, 12);
- x2("(?:¤¢+|\\A¤¤*)¤¦¤¦", "¤¦¤¦", 0, 4);
- n("(?:¤¢+|\\A¤¤*)¤¦¤¦", "¤¢¤¤¤¦¤¦");
- x2("(?:^¤¢+|¤¤+)*¤¦", "¤¢¤¢¤¤¤¤¤¤¤¢¤¤¤¦", 12, 16);
- x2("(?:^¤¢+|¤¤+)*¤¦", "¤¢¤¢¤¤¤¤¤¤¤¤¤¦", 0, 14);
- x2("¤¦{0,}", "¤¦¤¦¤¦¤¦", 0, 8);
- x2("¤¢|(?i)c", "C", 0, 1);
- x2("(?i)c|¤¢", "C", 0, 1);
- x2("(?i:¤¢)|a", "a", 0, 1);
- n("(?i:¤¢)|a", "A");
- x2("[¤¢¤¤¤¦]?", "¤¢¤¤¤¦", 0, 2);
- x2("[¤¢¤¤¤¦]*", "¤¢¤¤¤¦", 0, 6);
- x2("[^¤¢¤¤¤¦]*", "¤¢¤¤¤¦", 0, 0);
- n("[^¤¢¤¤¤¦]+", "¤¢¤¤¤¦");
- x2("¤¢??", "¤¢¤¢¤¢", 0, 0);
- x2("¤¤¤¢??¤¤", "¤¤¤¢¤¤", 0, 6);
- x2("¤¢*?", "¤¢¤¢¤¢", 0, 0);
- x2("¤¤¤¢*?", "¤¤¤¢¤¢", 0, 2);
- x2("¤¤¤¢*?¤¤", "¤¤¤¢¤¢¤¤", 0, 8);
- x2("¤¢+?", "¤¢¤¢¤¢", 0, 2);
- x2("¤¤¤¢+?", "¤¤¤¢¤¢", 0, 4);
- x2("¤¤¤¢+?¤¤", "¤¤¤¢¤¢¤¤", 0, 8);
- x2("(?:Å·?)??", "Å·", 0, 0);
- x2("(?:Å·??)?", "Å·", 0, 0);
- x2("(?:Ì´?)+?", "Ì´Ì´Ì´", 0, 2);
- x2("(?:É÷+)??", "É÷É÷É÷", 0, 0);
- x2("(?:Àã+)??Áú", "ÀãÀãÀãÁú", 0, 8);
- x2("(?:¤¢¤¤)?{2}", "", 0, 0);
- x2("(?:µ´¼Ö)?{2}", "µ´¼Öµ´¼Öµ´", 0, 8);
- x2("(?:µ´¼Ö)*{0}", "µ´¼Öµ´¼Öµ´", 0, 0);
- x2("(?:µ´¼Ö){3,}", "µ´¼Öµ´¼Öµ´¼Öµ´¼Ö", 0, 16);
- n("(?:µ´¼Ö){3,}", "µ´¼Öµ´¼Ö");
- x2("(?:µ´¼Ö){2,4}", "µ´¼Öµ´¼Öµ´¼Ö", 0, 12);
- x2("(?:µ´¼Ö){2,4}", "µ´¼Öµ´¼Öµ´¼Öµ´¼Öµ´¼Ö", 0, 16);
- x2("(?:µ´¼Ö){2,4}?", "µ´¼Öµ´¼Öµ´¼Öµ´¼Öµ´¼Ö", 0, 8);
- x2("(?:µ´¼Ö){,}", "µ´¼Ö{,}", 0, 7);
- x2("(?:¤«¤­¤¯)+?{2}", "¤«¤­¤¯¤«¤­¤¯¤«¤­¤¯", 0, 12);
- x3("(²Ð)", "²Ð", 0, 2, 1);
- x3("(²Ð¿å)", "²Ð¿å", 0, 4, 1);
- x2("((»þ´Ö))", "»þ´Ö", 0, 4);
- x3("((É÷¿å))", "É÷¿å", 0, 4, 1);
- x3("((ºòÆü))", "ºòÆü", 0, 4, 2);
- x3("((((((((((((((((((((ÎÌ»Ò))))))))))))))))))))", "ÎÌ»Ò", 0, 4, 20);
- x3("(¤¢¤¤)(¤¦¤¨)", "¤¢¤¤¤¦¤¨", 0, 4, 1);
- x3("(¤¢¤¤)(¤¦¤¨)", "¤¢¤¤¤¦¤¨", 4, 8, 2);
- x3("()(¤¢)¤¤¤¦(¤¨¤ª¤«)¤­¤¯¤±¤³", "¤¢¤¤¤¦¤¨¤ª¤«¤­¤¯¤±¤³", 6, 12, 3);
- x3("(()(¤¢)¤¤¤¦(¤¨¤ª¤«)¤­¤¯¤±¤³)", "¤¢¤¤¤¦¤¨¤ª¤«¤­¤¯¤±¤³", 6, 12, 4);
- x3(".*(¥Õ¥©)¥ó¡¦¥Þ(¥ó()¥·¥å¥¿)¥¤¥ó", "¥Õ¥©¥ó¡¦¥Þ¥ó¥·¥å¥¿¥¤¥ó", 10, 18, 2);
- x2("(^¤¢)", "¤¢", 0, 2);
- x3("(¤¢)|(¤¢)", "¤¤¤¢", 2, 4, 1);
- x3("(^¤¢)|(¤¢)", "¤¤¤¢", 2, 4, 2);
- x3("(¤¢?)", "¤¢¤¢¤¢", 0, 2, 1);
- x3("(¤Þ*)", "¤Þ¤Þ¤Þ", 0, 6, 1);
- x3("(¤È*)", "", 0, 0, 1);
- x3("(¤ë+)", "¤ë¤ë¤ë¤ë¤ë¤ë¤ë", 0, 14, 1);
- x3("(¤Õ+|¤Ø*)", "¤Õ¤Õ¤Õ¤Ø¤Ø", 0, 6, 1);
- x3("(¤¢+|¤¤?)", "¤¤¤¤¤¤¤¢¤¢", 0, 2, 1);
- x3("(¤¢¤¤¤¦)?", "¤¢¤¤¤¦", 0, 6, 1);
- x3("(¤¢¤¤¤¦)*", "¤¢¤¤¤¦", 0, 6, 1);
- x3("(¤¢¤¤¤¦)+", "¤¢¤¤¤¦", 0, 6, 1);
- x3("(¤µ¤·¤¹|¤¢¤¤¤¦)+", "¤¢¤¤¤¦", 0, 6, 1);
- x3("([¤Ê¤Ë¤Ì][¤«¤­¤¯]|¤«¤­¤¯)+", "¤«¤­¤¯", 0, 6, 1);
- x3("((?i:¤¢¤¤¤¦))", "¤¢¤¤¤¦", 0, 6, 1);
- x3("((?m:¤¢.¤¦))", "¤¢\n¤¦", 0, 5, 1);
- x3("((?=¤¢¤ó)¤¢)", "¤¢¤ó¤¤", 0, 2, 1);
- x3("¤¢¤¤¤¦|(.¤¢¤¤¤¨)", "¤ó¤¢¤¤¤¨", 0, 8, 1);
- x3("¤¢*(.)", "¤¢¤¢¤¢¤¢¤ó", 8, 10, 1);
- x3("¤¢*?(.)", "¤¢¤¢¤¢¤¢¤ó", 0, 2, 1);
- x3("¤¢*?(¤ó)", "¤¢¤¢¤¢¤¢¤ó", 8, 10, 1);
- x3("[¤¤¤¦¤¨]¤¢*(.)", "¤¨¤¢¤¢¤¢¤¢¤ó", 10, 12, 1);
- x3("(\\A¤¤¤¤)¤¦¤¦", "¤¤¤¤¤¦¤¦", 0, 4, 1);
- n("(\\A¤¤¤¤)¤¦¤¦", "¤ó¤¤¤¤¤¦¤¦");
- x3("(^¤¤¤¤)¤¦¤¦", "¤¤¤¤¤¦¤¦", 0, 4, 1);
- n("(^¤¤¤¤)¤¦¤¦", "¤ó¤¤¤¤¤¦¤¦");
- x3("¤í¤í(¤ë¤ë$)", "¤í¤í¤ë¤ë", 4, 8, 1);
- n("¤í¤í(¤ë¤ë$)", "¤í¤í¤ë¤ë¤ë");
- x2("(̵)\\1", "̵̵", 0, 4);
- n("(̵)\\1", "̵Éð");
- x2("(¶õ?)\\1", "¶õ¶õ", 0, 4);
- x2("(¶õ??)\\1", "¶õ¶õ", 0, 0);
- x2("(¶õ*)\\1", "¶õ¶õ¶õ¶õ¶õ", 0, 8);
- x3("(¶õ*)\\1", "¶õ¶õ¶õ¶õ¶õ", 0, 4, 1);
- x2("¤¢(¤¤*)\\1", "¤¢¤¤¤¤¤¤¤¤", 0, 10);
- x2("¤¢(¤¤*)\\1", "¤¢¤¤", 0, 2);
- x2("(¤¢*)(¤¤*)\\1\\2", "¤¢¤¢¤¢¤¤¤¤¤¢¤¢¤¢¤¤¤¤", 0, 20);
- x2("(¤¢*)(¤¤*)\\2", "¤¢¤¢¤¢¤¤¤¤¤¤¤¤", 0, 14);
- x3("(¤¢*)(¤¤*)\\2", "¤¢¤¢¤¢¤¤¤¤¤¤¤¤", 6, 10, 2);
- x2("(((((((¤Ý*)¤Ú))))))¤Ô\\7", "¤Ý¤Ý¤Ý¤Ú¤Ô¤Ý¤Ý¤Ý", 0, 16);
- x3("(((((((¤Ý*)¤Ú))))))¤Ô\\7", "¤Ý¤Ý¤Ý¤Ú¤Ô¤Ý¤Ý¤Ý", 0, 6, 7);
- x2("(¤Ï)(¤Ò)(¤Õ)\\2\\1\\3", "¤Ï¤Ò¤Õ¤Ò¤Ï¤Õ", 0, 12);
- x2("([¤­-¤±])\\1", "¤¯¤¯", 0, 4);
- x2("(\\w\\d\\s)\\1", "¤¢5 ¤¢5 ", 0, 8);
- n("(\\w\\d\\s)\\1", "¤¢5 ¤¢5");
- x2("(ï¡©|[¤¢-¤¦]{3})\\1", "ï¡©", 0, 8);
- x2("...(ï¡©|[¤¢-¤¦]{3})\\1", "¤¢a¤¢Ã¯¡©Ã¯¡©", 0, 13);
- x2("(ï¡©|[¤¢-¤¦]{3})\\1", "¤¦¤¤¤¦¤¦¤¤¤¦", 0, 12);
- x2("(^¤³)\\1", "¤³¤³", 0, 4);
- n("(^¤à)\\1", "¤á¤à¤à");
- n("(¤¢$)\\1", "¤¢¤¢");
- n("(¤¢¤¤\\Z)\\1", "¤¢¤¤");
- x2("(¤¢*\\Z)\\1", "¤¢", 2, 2);
- x2(".(¤¢*\\Z)\\1", "¤¤¤¢", 2, 4);
- x3("(.(¤ä¤¤¤æ)\\2)", "z¤ä¤¤¤æ¤ä¤¤¤æ", 0, 13, 1);
- x3("(.(..\\d.)\\2)", "¤¢12341234", 0, 10, 1);
- x2("((?i:¤¢v¤º))\\1", "¤¢v¤º¤¢v¤º", 0, 10);
- x2("(?<¶ò¤«>ÊÑ|\\(\\g<¶ò¤«>\\))", "((((((ÊÑ))))))", 0, 14);
- x2("\\A(?:\\g<°¤_1>|\\g<±¾_2>|\\z½ªÎ» (?<°¤_1>´Ñ|¼«\\g<±¾_2>¼«)(?<±¾_2>ºß|Ê\\g<°¤_1>Ê))$", "Ê¼«Ê¼«ºß¼«Ê¼«Ê", 0, 26);
- x2("[[¤Ò¤Õ]]", "¤Õ", 0, 2);
- x2("[[¤¤¤ª¤¦]¤«]", "¤«", 0, 2);
- n("[[^¤¢]]", "¤¢");
- n("[^[¤¢]]", "¤¢");
- x2("[^[^¤¢]]", "¤¢", 0, 2);
- x2("[[¤«¤­¤¯]&&¤­¤¯]", "¤¯", 0, 2);
- n("[[¤«¤­¤¯]&&¤­¤¯]", "¤«");
- n("[[¤«¤­¤¯]&&¤­¤¯]", "¤±");
- x2("[¤¢-¤ó&&¤¤-¤ò&&¤¦-¤ñ]", "¤ñ", 0, 2);
- n("[^¤¢-¤ó&&¤¤-¤ò&&¤¦-¤ñ]", "¤ñ");
- x2("[[^¤¢&&¤¢]&&¤¢-¤ó]", "¤¤", 0, 2);
- n("[[^¤¢&&¤¢]&&¤¢-¤ó]", "¤¢");
- x2("[[^¤¢-¤ó&&¤¤¤¦¤¨¤ª]&&[^¤¦-¤«]]", "¤­", 0, 2);
- n("[[^¤¢-¤ó&&¤¤¤¦¤¨¤ª]&&[^¤¦-¤«]]", "¤¤");
- x2("[^[^¤¢¤¤¤¦]&&[^¤¦¤¨¤ª]]", "¤¦", 0, 2);
- x2("[^[^¤¢¤¤¤¦]&&[^¤¦¤¨¤ª]]", "¤¨", 0, 2);
- n("[^[^¤¢¤¤¤¦]&&[^¤¦¤¨¤ª]]", "¤«");
- x2("[¤¢-&&-¤¢]", "-", 0, 1);
- x2("[^[^a-z¤¢¤¤¤¦]&&[^bcdefg¤¦¤¨¤ª]q-w]", "¤¨", 0, 2);
- x2("[^[^a-z¤¢¤¤¤¦]&&[^bcdefg¤¦¤¨¤ª]g-w]", "f", 0, 1);
- x2("[^[^a-z¤¢¤¤¤¦]&&[^bcdefg¤¦¤¨¤ª]g-w]", "g", 0, 1);
- n("[^[^a-z¤¢¤¤¤¦]&&[^bcdefg¤¦¤¨¤ª]g-w]", "2");
- fprintf(stdout, "\nRESULT SUCC: %d, FAIL: %d, ERROR: %d\n",
- nsucc, nfail, nerror);
-
-#ifndef POSIX_TEST
- onig_region_free(region, 1);
- onig_end();
-#endif
-
- return 0;
-}
diff --git a/ext/mbstring/oniguruma/win32/config.h b/ext/mbstring/oniguruma/win32/config.h
deleted file mode 100644
index bdbdaf25c1..0000000000
--- a/ext/mbstring/oniguruma/win32/config.h
+++ /dev/null
@@ -1,84 +0,0 @@
-#define STDC_HEADERS 1
-#define HAVE_SYS_TYPES_H 1
-#define HAVE_SYS_STAT_H 1
-#define HAVE_STDLIB_H 1
-#define HAVE_STRING_H 1
-#define HAVE_MEMORY_H 1
-#define HAVE_FLOAT_H 1
-#define HAVE_OFF_T 1
-#define SIZEOF_INT 4
-#define SIZEOF_SHORT 2
-#define SIZEOF_LONG 4
-#define SIZEOF_LONG_LONG 0
-#define SIZEOF___INT64 8
-#define SIZEOF_OFF_T 4
-#define SIZEOF_VOIDP 4
-#define SIZEOF_FLOAT 4
-#define SIZEOF_DOUBLE 8
-#define HAVE_PROTOTYPES 1
-#define TOKEN_PASTE(x,y) x##y
-#define HAVE_STDARG_PROTOTYPES 1
-#ifndef NORETURN
-#if _MSC_VER > 1100
-#define NORETURN(x) __declspec(noreturn) x
-#else
-#define NORETURN(x) x
-#endif
-#endif
-#define HAVE_DECL_SYS_NERR 1
-#define STDC_HEADERS 1
-#define HAVE_STDLIB_H 1
-#define HAVE_STRING_H 1
-#define HAVE_LIMITS_H 1
-#define HAVE_FCNTL_H 1
-#define HAVE_SYS_UTIME_H 1
-#define HAVE_MEMORY_H 1
-#define uid_t int
-#define gid_t int
-#define HAVE_STRUCT_STAT_ST_RDEV 1
-#define HAVE_ST_RDEV 1
-#define GETGROUPS_T int
-#define RETSIGTYPE void
-#define HAVE_ALLOCA 1
-#define HAVE_DUP2 1
-#define HAVE_MEMCMP 1
-#define HAVE_MEMMOVE 1
-#define HAVE_MKDIR 1
-#define HAVE_STRCASECMP 1
-#define HAVE_STRNCASECMP 1
-#define HAVE_STRERROR 1
-#define HAVE_STRFTIME 1
-#define HAVE_STRCHR 1
-#define HAVE_STRSTR 1
-#define HAVE_STRTOD 1
-#define HAVE_STRTOL 1
-#define HAVE_STRTOUL 1
-#define HAVE_FLOCK 1
-#define HAVE_VSNPRINTF 1
-#define HAVE_FINITE 1
-#define HAVE_FMOD 1
-#define HAVE_FREXP 1
-#define HAVE_HYPOT 1
-#define HAVE_MODF 1
-#define HAVE_WAITPID 1
-#define HAVE_CHSIZE 1
-#define HAVE_TIMES 1
-#define HAVE__SETJMP 1
-#define HAVE_TELLDIR 1
-#define HAVE_SEEKDIR 1
-#define HAVE_MKTIME 1
-#define HAVE_COSH 1
-#define HAVE_SINH 1
-#define HAVE_TANH 1
-#define HAVE_EXECVE 1
-#define HAVE_TZNAME 1
-#define HAVE_DAYLIGHT 1
-#define SETPGRP_VOID 1
-#define inline __inline
-#define NEED_IO_SEEK_BETWEEN_RW 1
-#define RSHIFT(x,y) ((x)>>(int)y)
-#define FILE_COUNT _cnt
-#define FILE_READPTR _ptr
-#define DEFAULT_KCODE KCODE_NONE
-#define DLEXT ".so"
-#define DLEXT2 ".dll"
diff --git a/ext/mbstring/php_mbregex.c b/ext/mbstring/php_mbregex.c
deleted file mode 100644
index fdf9195b5f..0000000000
--- a/ext/mbstring/php_mbregex.c
+++ /dev/null
@@ -1,1231 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Tsukada Takuya <tsukada@fminn.nagano.nagano.jp> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "php.h"
-#include "php_ini.h"
-
-#if HAVE_MBREGEX
-
-#include "ext/standard/php_smart_str.h"
-#include "php_mbregex.h"
-#include "mbstring.h"
-
-ZEND_EXTERN_MODULE_GLOBALS(mbstring)
-
-/* {{{ static void php_mb_regex_free_cache() */
-static void php_mb_regex_free_cache(php_mb_regex_t **pre)
-{
- onig_free(*pre);
-}
-/* }}} */
-
-/* {{{ _php_mb_regex_globals_ctor */
-void _php_mb_regex_globals_ctor(zend_mbstring_globals *pglobals TSRMLS_DC)
-{
- MBSTRG(default_mbctype) = ONIG_ENCODING_EUC_JP;
- MBSTRG(current_mbctype) = ONIG_ENCODING_EUC_JP;
- zend_hash_init(&(MBSTRG(ht_rc)), 0, NULL, (void (*)(void *)) php_mb_regex_free_cache, 1);
- MBSTRG(search_str) = (zval*) NULL;
- MBSTRG(search_re) = (php_mb_regex_t*)NULL;
- MBSTRG(search_pos) = 0;
- MBSTRG(search_regs) = (OnigRegion*)NULL;
- MBSTRG(regex_default_options) = ONIG_OPTION_MULTILINE | ONIG_OPTION_SINGLELINE;
- MBSTRG(regex_default_syntax) = ONIG_SYNTAX_RUBY;
-}
-/* }}} */
-
-/* {{{ _php_mb_regex_globals_dtor */
-void _php_mb_regex_globals_dtor(zend_mbstring_globals *pglobals TSRMLS_DC)
-{
- zend_hash_destroy(&MBSTRG(ht_rc));
-}
-/* }}} */
-
-/* {{{ PHP_MINIT_FUNCTION(mb_regex) */
-PHP_MINIT_FUNCTION(mb_regex)
-{
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ PHP_MSHUTDOWN_FUNCTION(mb_regex) */
-PHP_MSHUTDOWN_FUNCTION(mb_regex)
-{
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ PHP_RINIT_FUNCTION(mb_regex) */
-PHP_RINIT_FUNCTION(mb_regex)
-{
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ PHP_RSHUTDOWN_FUNCTION(mb_regex) */
-PHP_RSHUTDOWN_FUNCTION(mb_regex)
-{
- MBSTRG(current_mbctype) = MBSTRG(default_mbctype);
-
- if (MBSTRG(search_str) != NULL) {
- zval_ptr_dtor(&MBSTRG(search_str));
- MBSTRG(search_str) = (zval *)NULL;
- }
- MBSTRG(search_pos) = 0;
-
- if (MBSTRG(search_regs) != NULL) {
- onig_region_free(MBSTRG(search_regs), 1);
- MBSTRG(search_regs) = (OnigRegion *)NULL;
- }
- zend_hash_clean(&MBSTRG(ht_rc));
-
- return SUCCESS;
-}
-/* }}} */
-
-/*
- * encoding name resolver
- */
-
-/* {{{ encoding name map */
-typedef struct _php_mb_regex_enc_name_map_t {
- const char *names;
- OnigEncoding code;
-} php_mb_regex_enc_name_map_t;
-
-php_mb_regex_enc_name_map_t enc_name_map[] ={
- {
- "EUC-JP\0EUCJP\0X-EUC-JP\0UJIS\0EUCJP\0EUCJP-WIN\0",
- ONIG_ENCODING_EUC_JP
- },
- {
- "UTF-8\0UTF8\0",
- ONIG_ENCODING_UTF8
- },
- {
- "SJIS\0CP932\0MS932\0SHIFT_JIS\0SJIS-WIN\0WINDOWS-31J\0",
- ONIG_ENCODING_SJIS
- },
- {
- "BIG5\0BIG-5\0BIGFIVE\0CN-BIG5\0BIG-FIVE\0",
- ONIG_ENCODING_BIG5
- },
- {
- "EUC-CN\0EUCCN\0EUC_CN\0GB-2312\0GB2312\0",
- ONIG_ENCODING_EUC_CN
- },
- {
- "EUC-TW\0EUCTW\0EUC_TW\0",
- ONIG_ENCODING_EUC_TW
- },
- {
- "EUC-KR\0EUCKR\0EUC_KR\0",
- ONIG_ENCODING_EUC_KR
- },
- {
- "KOI8\0KOI-8\0",
- ONIG_ENCODING_KOI8
- },
- {
- "KOI8R\0KOI8-R\0KOI-8R\0",
- ONIG_ENCODING_KOI8_R
- },
- {
- "ISO-8859-1\0ISO8859-1\0ISO_8859_1\0ISO8859_1\0",
- ONIG_ENCODING_ISO_8859_1
- },
- {
- "ISO-8859-2\0ISO8859-2\0ISO_8859_2\0ISO8859_2\0",
- ONIG_ENCODING_ISO_8859_2
- },
- {
- "ISO-8859-3\0ISO8859-3\0ISO_8859_3\0ISO8859_3\0",
- ONIG_ENCODING_ISO_8859_3
- },
- {
- "ISO-8859-4\0ISO8859-4\0ISO_8859_4\0ISO8859_4\0",
- ONIG_ENCODING_ISO_8859_4
- },
- {
- "ISO-8859-5\0ISO8859-5\0ISO_8859_5\0ISO8859_5\0",
- ONIG_ENCODING_ISO_8859_5
- },
- {
- "ISO-8859-6\0ISO8859-6\0ISO_8859_6\0ISO8859_6\0",
- ONIG_ENCODING_ISO_8859_6
- },
- {
- "ISO-8859-7\0ISO8859-7\0ISO_8859_7\0ISO8859_7\0",
- ONIG_ENCODING_ISO_8859_7
- },
- {
- "ISO-8859-8\0ISO8859-8\0ISO_8859_8\0ISO8859_8\0",
- ONIG_ENCODING_ISO_8859_8
- },
- {
- "ISO-8859-9\0ISO8859-9\0ISO_8859_9\0ISO8859_9\0",
- ONIG_ENCODING_ISO_8859_9
- },
- {
- "ISO-8859-10\0ISO8859-10\0ISO_8859_10\0ISO8859_10\0",
- ONIG_ENCODING_ISO_8859_10
- },
- {
- "ISO-8859-11\0ISO8859-11\0ISO_8859_11\0ISO8859_11\0",
- ONIG_ENCODING_ISO_8859_11
- },
- {
- "ISO-8859-13\0ISO8859-13\0ISO_8859_13\0ISO8859_13\0",
- ONIG_ENCODING_ISO_8859_13
- },
- {
- "ISO-8859-14\0ISO8859-14\0ISO_8859_14\0ISO8859_14\0",
- ONIG_ENCODING_ISO_8859_14
- },
- {
- "ISO-8859-15\0ISO8859-15\0ISO_8859_15\0ISO8859_15\0",
- ONIG_ENCODING_ISO_8859_15
- },
- {
- "ISO-8859-16\0ISO8859-16\0ISO_8859_16\0ISO8859_16\0",
- ONIG_ENCODING_ISO_8859_16
- },
- {
- "ASCII\0US-ASCII\0US_ASCII\0ISO646\0",
- ONIG_ENCODING_ASCII
- },
- { NULL, ONIG_ENCODING_UNDEF }
-};
-/* }}} */
-
-/* {{{ php_mb_regex_name2mbctype */
-OnigEncoding php_mb_regex_name2mbctype(const char *pname)
-{
- const char *p;
- php_mb_regex_enc_name_map_t *mapping;
-
- if (pname == NULL) {
- return ONIG_ENCODING_UNDEF;
- }
-
- for (mapping = enc_name_map; mapping->names != NULL; mapping++) {
- for (p = mapping->names; *p != '\0'; p += (strlen(p) + 1)) {
- if (strcasecmp(p, pname) == 0) {
- return mapping->code;
- }
- }
- }
-
- return ONIG_ENCODING_UNDEF;
-}
-/* }}} */
-
-/* {{{ php_mbregex_mbctype2name */
-const char *php_mb_regex_mbctype2name(OnigEncoding mbctype)
-{
- php_mb_regex_enc_name_map_t *mapping;
-
- for (mapping = enc_name_map; mapping->names != NULL; mapping++) {
- if (mapping->code == mbctype) {
- return mapping->names;
- }
- }
-
- return NULL;
-}
-/* }}} */
-
-/*
- * regex cache
- */
-/* {{{ php_mbregex_compile_pattern */
-static php_mb_regex_t *php_mbregex_compile_pattern(const char *pattern, int patlen, OnigOptionType options, OnigEncoding enc, OnigSyntaxType *syntax TSRMLS_DC)
-{
- int err_code = 0;
- int found = 0;
- php_mb_regex_t *retval = NULL, **rc = NULL;
- OnigErrorInfo err_info;
- UChar err_str[ONIG_MAX_ERROR_MESSAGE_LEN];
-
- found = zend_hash_find(&MBSTRG(ht_rc), (char *)pattern, patlen+1, (void **) &rc);
- if (found == FAILURE || (*rc)->options != options || (*rc)->enc != enc || (*rc)->syntax != syntax) {
- if ((err_code = onig_new(&retval, (UChar *)pattern, (UChar *)(pattern + patlen), options, enc, syntax, &err_info)) != ONIG_NORMAL) {
- onig_error_code_to_str(err_str, err_code, err_info);
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "mbregex compile err: %s", err_str);
- retval = NULL;
- goto out;
- }
- zend_hash_update(&MBSTRG(ht_rc), (char *) pattern, patlen + 1, (void *) &retval, sizeof(retval), NULL);
- } else if (found == SUCCESS) {
- retval = *rc;
- }
-out:
- return retval;
-}
-/* }}} */
-
-/* {{{ _php_mb_regex_get_option_string */
-static size_t _php_mb_regex_get_option_string(char *str, size_t len, OnigOptionType option, OnigSyntaxType *syntax)
-{
- size_t len_left = len;
- size_t len_req = 0;
- char *p = str;
- char c;
-
- if ((option & ONIG_OPTION_IGNORECASE) != 0) {
- if (len_left > 0) {
- --len_left;
- *(p++) = 'i';
- }
- ++len_req;
- }
-
- if ((option & ONIG_OPTION_EXTEND) != 0) {
- if (len_left > 0) {
- --len_left;
- *(p++) = 'x';
- }
- ++len_req;
- }
-
- if ((option & (ONIG_OPTION_MULTILINE | ONIG_OPTION_SINGLELINE)) ==
- (ONIG_OPTION_MULTILINE | ONIG_OPTION_SINGLELINE)) {
- if (len_left > 0) {
- --len_left;
- *(p++) = 'p';
- }
- ++len_req;
- } else {
- if ((option & ONIG_OPTION_MULTILINE) != 0) {
- if (len_left > 0) {
- --len_left;
- *(p++) = 'm';
- }
- ++len_req;
- }
-
- if ((option & ONIG_OPTION_SINGLELINE) != 0) {
- if (len_left > 0) {
- --len_left;
- *(p++) = 's';
- }
- ++len_req;
- }
- }
- if ((option & ONIG_OPTION_FIND_LONGEST) != 0) {
- if (len_left > 0) {
- --len_left;
- *(p++) = 'l';
- }
- ++len_req;
- }
- if ((option & ONIG_OPTION_FIND_NOT_EMPTY) != 0) {
- if (len_left > 0) {
- --len_left;
- *(p++) = 'n';
- }
- ++len_req;
- }
-
- c = 0;
-
- if (syntax == ONIG_SYNTAX_JAVA) {
- c = 'j';
- } else if (syntax == ONIG_SYNTAX_GNU_REGEX) {
- c = 'u';
- } else if (syntax == ONIG_SYNTAX_GREP) {
- c = 'g';
- } else if (syntax == ONIG_SYNTAX_EMACS) {
- c = 'c';
- } else if (syntax == ONIG_SYNTAX_RUBY) {
- c = 'r';
- } else if (syntax == ONIG_SYNTAX_PERL) {
- c = 'z';
- } else if (syntax == ONIG_SYNTAX_POSIX_BASIC) {
- c = 'b';
- } else if (syntax == ONIG_SYNTAX_POSIX_EXTENDED) {
- c = 'd';
- }
-
- if (c != 0) {
- if (len_left > 0) {
- --len_left;
- *(p++) = c;
- }
- ++len_req;
- }
-
-
- if (len_left > 0) {
- --len_left;
- *(p++) = '\0';
- }
- ++len_req;
- if (len < len_req) {
- return len_req;
- }
-
- return 0;
-}
-/* }}} */
-
-/* {{{ _php_mb_regex_init_options */
-static void
-_php_mb_regex_init_options(const char *parg, int narg, OnigOptionType *option, OnigSyntaxType **syntax, int *eval)
-{
- int n;
- char c;
- int optm = 0;
-
- *syntax = ONIG_SYNTAX_RUBY;
-
- if (parg != NULL) {
- n = 0;
- while(n < narg) {
- c = parg[n++];
- switch (c) {
- case 'i':
- optm |= ONIG_OPTION_IGNORECASE;
- break;
- case 'x':
- optm |= ONIG_OPTION_EXTEND;
- break;
- case 'm':
- optm |= ONIG_OPTION_MULTILINE;
- break;
- case 's':
- optm |= ONIG_OPTION_SINGLELINE;
- break;
- case 'p':
- optm |= ONIG_OPTION_MULTILINE | ONIG_OPTION_SINGLELINE;
- break;
- case 'l':
- optm |= ONIG_OPTION_FIND_LONGEST;
- break;
- case 'n':
- optm |= ONIG_OPTION_FIND_NOT_EMPTY;
- break;
- case 'j':
- *syntax = ONIG_SYNTAX_JAVA;
- break;
- case 'u':
- *syntax = ONIG_SYNTAX_GNU_REGEX;
- break;
- case 'g':
- *syntax = ONIG_SYNTAX_GREP;
- break;
- case 'c':
- *syntax = ONIG_SYNTAX_EMACS;
- break;
- case 'r':
- *syntax = ONIG_SYNTAX_RUBY;
- break;
- case 'z':
- *syntax = ONIG_SYNTAX_PERL;
- break;
- case 'b':
- *syntax = ONIG_SYNTAX_POSIX_BASIC;
- break;
- case 'd':
- *syntax = ONIG_SYNTAX_POSIX_EXTENDED;
- break;
- case 'e':
- if (eval != NULL) *eval = 1;
- break;
- default:
- break;
- }
- }
- if (option != NULL) *option|=optm;
- }
-}
-/* }}} */
-
-/*
- * php funcions
- */
-
-/* {{{ proto string mb_regex_encoding([string encoding])
- Returns the current encoding for regex as a string. */
-PHP_FUNCTION(mb_regex_encoding)
-{
- zval **arg1;
- OnigEncoding mbctype;
-
- if (ZEND_NUM_ARGS() == 0) {
- const char *retval = php_mb_regex_mbctype2name(MBSTRG(current_mbctype));
- if ( retval != NULL ) {
- RETVAL_STRING((char *)retval, 1);
- } else {
- RETVAL_FALSE;
- }
- } else if (ZEND_NUM_ARGS() == 1 &&
- zend_get_parameters_ex(1, &arg1) != FAILURE) {
- convert_to_string_ex(arg1);
- mbctype = php_mb_regex_name2mbctype(Z_STRVAL_PP(arg1));
- if (mbctype < 0) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unknown encoding \"%s\"", Z_STRVAL_PP(arg1));
- RETVAL_FALSE;
- } else {
- MBSTRG(current_mbctype) = mbctype;
- RETVAL_TRUE;
- }
- } else {
- WRONG_PARAM_COUNT;
- }
-}
-/* }}} */
-
-/* {{{ _php_mb_regex_ereg_exec */
-static void _php_mb_regex_ereg_exec(INTERNAL_FUNCTION_PARAMETERS, int icase)
-{
- zval tmp;
- zval *arg_pattern, *array;
- char *string;
- int string_len;
- php_mb_regex_t *re;
- OnigRegion *regs = NULL;
- int i, match_len, beg, end;
- OnigOptionType options;
- char *str;
-
- array = NULL;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "zs|z", &arg_pattern, &string, &string_len, &array) == FAILURE) {
- RETURN_FALSE;
- }
-
- options = MBSTRG(regex_default_options);
- if (icase) {
- options |= ONIG_OPTION_IGNORECASE;
- }
-
- /* compile the regular expression from the supplied regex */
- if (Z_TYPE_P(arg_pattern) != IS_STRING) {
- /* we convert numbers to integers and treat them as a string */
- tmp = *arg_pattern;
- zval_copy_ctor(&tmp);
- if (Z_TYPE_P(&tmp) == IS_DOUBLE) {
- convert_to_long(&tmp); /* get rid of decimal places */
- }
- convert_to_string(&tmp);
- arg_pattern = &tmp;
- /* don't bother doing an extended regex with just a number */
- }
- re = php_mbregex_compile_pattern(Z_STRVAL_P(arg_pattern), Z_STRLEN_P(arg_pattern), options, MBSTRG(current_mbctype), MBSTRG(regex_default_syntax) TSRMLS_CC);
- if (re == NULL) {
- RETVAL_FALSE;
- goto out;
- }
-
- regs = onig_region_new();
-
- /* actually execute the regular expression */
- if (onig_search(re, (UChar *)string, (UChar *)(string + string_len), string, (UChar *)(string + string_len), regs, 0) < 0) {
- RETVAL_FALSE;
- goto out;
- }
-
- match_len = 1;
- str = string;
- if (array != NULL) {
- zval ret_array;
- match_len = regs->end[0] - regs->beg[0];
- array_init(&ret_array);
- for (i = 0; i < regs->num_regs; i++) {
- beg = regs->beg[i];
- end = regs->end[i];
- if (beg >= 0 && beg < end && end <= string_len) {
- add_index_stringl(&ret_array, i, (char *)&str[beg], end - beg, 1);
- } else {
- add_index_bool(&ret_array, i, 0);
- }
- }
- REPLACE_ZVAL_VALUE(&array, &ret_array, 0);
- }
-
- if (match_len == 0) {
- match_len = 1;
- }
- RETVAL_LONG(match_len);
-out:
- if (regs != NULL) {
- onig_region_free(regs, 1);
- }
- if (arg_pattern == &tmp) {
- zval_dtor(&tmp);
- }
-}
-/* }}} */
-
-/* {{{ proto int mb_ereg(string pattern, string string [, array registers])
- Regular expression match for multibyte string */
-PHP_FUNCTION(mb_ereg)
-{
- _php_mb_regex_ereg_exec(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0);
-}
-/* }}} */
-
-/* {{{ proto int mb_eregi(string pattern, string string [, array registers])
- Case-insensitive regular expression match for multibyte string */
-PHP_FUNCTION(mb_eregi)
-{
- _php_mb_regex_ereg_exec(INTERNAL_FUNCTION_PARAM_PASSTHRU, 1);
-}
-/* }}} */
-
-/* {{{ _php_mb_regex_ereg_replace_exec */
-static void _php_mb_regex_ereg_replace_exec(INTERNAL_FUNCTION_PARAMETERS, OnigOptionType options)
-{
- zval *arg_pattern_zval;
-
- char *arg_pattern;
- int arg_pattern_len;
-
- char *replace;
- int replace_len;
-
- char *string;
- int string_len;
-
- char *p;
- php_mb_regex_t *re;
- OnigSyntaxType *syntax;
- OnigRegion *regs = NULL;
- smart_str out_buf = { 0 };
- smart_str eval_buf = { 0 };
- smart_str *pbuf;
- int i, err, eval, n;
- UChar *pos;
- UChar *string_lim;
- char *description = NULL;
- char pat_buf[2];
-
- const mbfl_encoding *enc;
-
- {
- const char *current_enc_name;
- current_enc_name = php_mb_regex_mbctype2name(MBSTRG(current_mbctype));
- if (current_enc_name == NULL ||
- (enc = mbfl_name2encoding(current_enc_name)) == NULL) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unknown error");
- RETURN_FALSE;
- }
- }
- eval = 0;
- {
- char *option_str = NULL;
- int option_str_len = 0;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "zss|s",
- &arg_pattern_zval,
- &replace, &replace_len,
- &string, &string_len,
- &option_str, &option_str_len) == FAILURE) {
- RETURN_FALSE;
- }
-
- if (option_str != NULL) {
- _php_mb_regex_init_options(option_str, option_str_len, &options, &syntax, &eval);
- } else {
- options |= MBSTRG(regex_default_options);
- syntax = MBSTRG(regex_default_syntax);
- }
- }
- if (Z_TYPE_P(arg_pattern_zval) == IS_STRING) {
- arg_pattern = Z_STRVAL_P(arg_pattern_zval);
- arg_pattern_len = Z_STRLEN_P(arg_pattern_zval);
- } else {
- /* FIXME: this code is not multibyte aware! */
- convert_to_long_ex(&arg_pattern_zval);
- pat_buf[0] = (char)Z_LVAL_P(arg_pattern_zval);
- pat_buf[1] = '\0';
-
- arg_pattern = pat_buf;
- arg_pattern_len = 1;
- }
- /* create regex pattern buffer */
- re = php_mbregex_compile_pattern(arg_pattern, arg_pattern_len, options, MBSTRG(current_mbctype), syntax TSRMLS_CC);
- if (re == NULL) {
- RETURN_FALSE;
- }
-
- if (eval) {
- pbuf = &eval_buf;
- description = zend_make_compiled_string_description("mbregex replace" TSRMLS_CC);
- } else {
- pbuf = &out_buf;
- description = NULL;
- }
-
- /* do the actual work */
- err = 0;
- pos = string;
- string_lim = (UChar*)(string + string_len);
- regs = onig_region_new();
- while (err >= 0) {
- err = onig_search(re, (UChar *)string, (UChar *)string_lim, pos, (UChar *)string_lim, regs, 0);
- if (err <= -2) {
- UChar err_str[ONIG_MAX_ERROR_MESSAGE_LEN];
- onig_error_code_to_str(err_str, err);
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "mbregex search failure in php_mbereg_replace_exec(): %s", err_str);
- break;
- }
- if (err >= 0) {
-#if moriyoshi_0
- if (regs->beg[0] == regs->end[0]) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Empty regular expression");
- break;
- }
-#endif
- /* copy the part of the string before the match */
- smart_str_appendl(&out_buf, pos, (size_t)((UChar *)(string + regs->beg[0]) - pos));
- /* copy replacement and backrefs */
- i = 0;
- p = replace;
- while (i < replace_len) {
- int fwd = (int) php_mb_mbchar_bytes_ex(p, enc);
- n = -1;
- if ((replace_len - i) >= 2 && fwd == 1 &&
- p[0] == '\\' && p[1] >= '0' && p[1] <= '9') {
- n = p[1] - '0';
- }
- if (n >= 0 && n < regs->num_regs) {
- if (regs->beg[n] >= 0 && regs->beg[n] < regs->end[n] && regs->end[n] <= string_len) {
- smart_str_appendl(pbuf, string + regs->beg[n], regs->end[n] - regs->beg[n]);
- }
- p += 2;
- i += 2;
- } else {
- smart_str_appendl(pbuf, p, fwd);
- p += fwd;
- i += fwd;
- }
- }
- if (eval) {
- zval v;
- /* null terminate buffer */
- smart_str_appendc(&eval_buf, '\0');
- /* do eval */
- zend_eval_string(eval_buf.c, &v, description TSRMLS_CC);
- /* result of eval */
- convert_to_string(&v);
- smart_str_appendl(&out_buf, Z_STRVAL(v), Z_STRLEN(v));
- /* Clean up */
- eval_buf.len = 0;
- zval_dtor(&v);
- }
- n = regs->end[0];
- if ((size_t)(pos - (UChar *)string) < n) {
- pos = string + n;
- } else {
- if (pos < string_lim) {
- smart_str_appendl(&out_buf, pos, 1);
- }
- pos++;
- }
- } else { /* nomatch */
- /* stick that last bit of string on our output */
- if (string_lim - pos > 0) {
- smart_str_appendl(&out_buf, pos, string_lim - pos);
- }
- }
- onig_region_free(regs, 0);
- }
-
- if (description) {
- efree(description);
- }
- if (regs != NULL) {
- onig_region_free(regs, 1);
- }
- smart_str_free(&eval_buf);
-
- if (err <= -2) {
- smart_str_free(&out_buf);
- RETVAL_FALSE;
- } else {
- smart_str_appendc(&out_buf, '\0');
- RETVAL_STRINGL((char *)out_buf.c, out_buf.len - 1, 0);
- }
-}
-/* }}} */
-
-/* {{{ proto string mb_ereg_replace(string pattern, string replacement, string string [, string option])
- Replace regular expression for multibyte string */
-PHP_FUNCTION(mb_ereg_replace)
-{
- _php_mb_regex_ereg_replace_exec(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0);
-}
-/* }}} */
-
-/* {{{ proto string mb_eregi_replace(string pattern, string replacement, string string)
- Case insensitive replace regular expression for multibyte string */
-PHP_FUNCTION(mb_eregi_replace)
-{
- _php_mb_regex_ereg_replace_exec(INTERNAL_FUNCTION_PARAM_PASSTHRU, ONIG_OPTION_IGNORECASE);
-}
-/* }}} */
-
-/* {{{ proto array mb_split(string pattern, string string [, int limit])
- split multibyte string into array by regular expression */
-PHP_FUNCTION(mb_split)
-{
- char *arg_pattern;
- int arg_pattern_len;
- php_mb_regex_t *re;
- OnigRegion *regs = NULL;
- char *string;
- UChar *pos;
- int string_len;
-
- int n, err;
- long count = -1;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ss|l", &arg_pattern, &arg_pattern_len, &string, &string_len, &count) == FAILURE) {
- RETURN_FALSE;
- }
-
- if (count == 0) {
- count = 1;
- }
-
- /* create regex pattern buffer */
- if ((re = php_mbregex_compile_pattern(arg_pattern, arg_pattern_len, MBSTRG(regex_default_options), MBSTRG(current_mbctype), MBSTRG(regex_default_syntax) TSRMLS_CC)) == NULL) {
- RETURN_FALSE;
- }
-
- array_init(return_value);
-
- pos = (UChar *)string;
- err = 0;
- regs = onig_region_new();
- /* churn through str, generating array entries as we go */
- while ((--count != 0) &&
- (err = onig_search(re, (UChar *)string, (UChar *)(string + string_len), pos, (UChar *)(string + string_len), regs, 0)) >= 0) {
- if (regs->beg[0] == regs->end[0]) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Empty regular expression");
- break;
- }
-
- /* add it to the array */
- if (regs->beg[0] < string_len && regs->beg[0] >= (size_t)(pos - (UChar *)string)) {
- add_next_index_stringl(return_value, pos, ((UChar *)(string + regs->beg[0]) - pos), 1);
- } else {
- err = -2;
- break;
- }
- /* point at our new starting point */
- n = regs->end[0];
- if ((pos - (UChar *)string) < n) {
- pos = (UChar *)string + n;
- }
- if (count < 0) {
- count = 0;
- }
- onig_region_free(regs, 0);
- }
-
- onig_region_free(regs, 1);
-
- /* see if we encountered an error */
- if (err <= -2) {
- UChar err_str[ONIG_MAX_ERROR_MESSAGE_LEN];
- onig_error_code_to_str(err_str, err);
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "mbregex search failure in mbsplit(): %s", err_str);
- zval_dtor(return_value);
- RETURN_FALSE;
- }
-
- /* otherwise we just have one last element to add to the array */
- n = ((UChar *)(string + string_len) - pos);
- if (n > 0) {
- add_next_index_stringl(return_value, pos, n, 1);
- } else {
- add_next_index_stringl(return_value, "", 0, 1);
- }
-}
-/* }}} */
-
-/* {{{ proto bool mb_ereg_match(string pattern, string string [,string option])
- Regular expression match for multibyte string */
-PHP_FUNCTION(mb_ereg_match)
-{
- char *arg_pattern;
- int arg_pattern_len;
-
- char *string;
- int string_len;
-
- php_mb_regex_t *re;
- OnigSyntaxType *syntax;
- int option = 0, err;
-
- {
- char *option_str = NULL;
- int option_str_len = 0;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ss|s",
- &arg_pattern, &arg_pattern_len, &string, &string_len,
- &option_str, &option_str_len)==FAILURE) {
- RETURN_FALSE;
- }
-
- if (option_str != NULL) {
- _php_mb_regex_init_options(option_str, option_str_len, &option, &syntax, NULL);
- } else {
- option |= MBSTRG(regex_default_options);
- syntax = MBSTRG(regex_default_syntax);
- }
- }
-
- if ((re = php_mbregex_compile_pattern(arg_pattern, arg_pattern_len, option, MBSTRG(current_mbctype), syntax TSRMLS_CC)) == NULL) {
- RETURN_FALSE;
- }
-
- /* match */
- err = onig_match(re, (UChar *)string, (UChar *)(string + string_len), (UChar *)string, NULL, 0);
- if (err >= 0) {
- RETVAL_TRUE;
- } else {
- RETVAL_FALSE;
- }
-}
-/* }}} */
-
-/* regex search */
-/* {{{ _php_mb_regex_ereg_search_exec */
-static void
-_php_mb_regex_ereg_search_exec(INTERNAL_FUNCTION_PARAMETERS, int mode)
-{
- zval **arg_pattern, **arg_options;
- int n, i, err, pos, len, beg, end, option;
- UChar *str;
- OnigSyntaxType *syntax;
-
- option = MBSTRG(regex_default_options);
- switch (ZEND_NUM_ARGS()) {
- case 0:
- break;
- case 1:
- if (zend_get_parameters_ex(1, &arg_pattern) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- break;
- case 2:
- if (zend_get_parameters_ex(2, &arg_pattern, &arg_options) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex(arg_options);
- option = 0;
- _php_mb_regex_init_options(Z_STRVAL_PP(arg_options), Z_STRLEN_PP(arg_options), &option, &syntax, NULL);
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
- if (ZEND_NUM_ARGS() > 0) {
- /* create regex pattern buffer */
- convert_to_string_ex(arg_pattern);
-
- if ((MBSTRG(search_re) = php_mbregex_compile_pattern(Z_STRVAL_PP(arg_pattern), Z_STRLEN_PP(arg_pattern), option, MBSTRG(current_mbctype), MBSTRG(regex_default_syntax) TSRMLS_CC)) == NULL) {
- RETURN_FALSE;
- }
- }
-
- pos = MBSTRG(search_pos);
- str = NULL;
- len = 0;
- if (MBSTRG(search_str) != NULL && Z_TYPE_P(MBSTRG(search_str)) == IS_STRING){
- str = (UChar *)Z_STRVAL_P(MBSTRG(search_str));
- len = Z_STRLEN_P(MBSTRG(search_str));
- }
-
- if (MBSTRG(search_re) == NULL) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "No regex given");
- RETURN_FALSE;
- }
-
- if (str == NULL) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "No string given");
- RETURN_FALSE;
- }
-
- if (MBSTRG(search_regs)) {
- onig_region_free(MBSTRG(search_regs), 1);
- }
- MBSTRG(search_regs) = onig_region_new();
-
- err = onig_search(MBSTRG(search_re), str, str + len, str + pos, str + len, MBSTRG(search_regs), 0);
- if (err == ONIG_MISMATCH) {
- MBSTRG(search_pos) = len;
- RETVAL_FALSE;
- } else if (err <= -2) {
- UChar err_str[ONIG_MAX_ERROR_MESSAGE_LEN];
- onig_error_code_to_str(err_str, err);
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "mbregex search failure in mbregex_search(): %s", err_str);
- RETVAL_FALSE;
- } else {
- if (MBSTRG(search_regs)->beg[0] == MBSTRG(search_regs)->end[0]) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Empty regular expression");
- }
- switch (mode) {
- case 1:
- array_init(return_value);
- beg = MBSTRG(search_regs)->beg[0];
- end = MBSTRG(search_regs)->end[0];
- add_next_index_long(return_value, beg);
- add_next_index_long(return_value, end - beg);
- break;
- case 2:
- array_init(return_value);
- n = MBSTRG(search_regs)->num_regs;
- for (i = 0; i < n; i++) {
- beg = MBSTRG(search_regs)->beg[i];
- end = MBSTRG(search_regs)->end[i];
- if (beg >= 0 && beg <= end && end <= len) {
- add_index_stringl(return_value, i, (char *)&str[beg], end - beg, 1);
- } else {
- add_index_bool(return_value, i, 0);
- }
- }
- break;
- default:
- RETVAL_TRUE;
- break;
- }
- end = MBSTRG(search_regs)->end[0];
- if (pos < end) {
- MBSTRG(search_pos) = end;
- } else {
- MBSTRG(search_pos) = pos + 1;
- }
- }
-
- if (err < 0) {
- onig_region_free(MBSTRG(search_regs), 1);
- MBSTRG(search_regs) = (OnigRegion *)NULL;
- }
-}
-/* }}} */
-
-/* {{{ proto bool mb_ereg_search([string pattern[, string option]])
- Regular expression search for multibyte string */
-PHP_FUNCTION(mb_ereg_search)
-{
- _php_mb_regex_ereg_search_exec(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0);
-}
-/* }}} */
-
-/* {{{ proto array mb_ereg_search_pos([string pattern[, string option]])
- Regular expression search for multibyte string */
-PHP_FUNCTION(mb_ereg_search_pos)
-{
- _php_mb_regex_ereg_search_exec(INTERNAL_FUNCTION_PARAM_PASSTHRU, 1);
-}
-/* }}} */
-
-/* {{{ proto array mb_ereg_search_regs([string pattern[, string option]])
- Regular expression search for multibyte string */
-PHP_FUNCTION(mb_ereg_search_regs)
-{
- _php_mb_regex_ereg_search_exec(INTERNAL_FUNCTION_PARAM_PASSTHRU, 2);
-}
-/* }}} */
-
-/* {{{ proto bool mb_ereg_search_init(string string [, string pattern[, string option]])
- Initialize string and regular expression for search. */
-PHP_FUNCTION(mb_ereg_search_init)
-{
- zval **arg_str, **arg_pattern, **arg_options;
- OnigSyntaxType *syntax = NULL;
- int option;
-
- option = MBSTRG(regex_default_options);
- syntax = MBSTRG(regex_default_syntax);
- switch (ZEND_NUM_ARGS()) {
- case 1:
- if (zend_get_parameters_ex(1, &arg_str) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- break;
- case 2:
- if (zend_get_parameters_ex(2, &arg_str, &arg_pattern) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- break;
- case 3:
- if (zend_get_parameters_ex(3, &arg_str, &arg_pattern, &arg_options) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex(arg_options);
- option = 0;
- _php_mb_regex_init_options(Z_STRVAL_PP(arg_options), Z_STRLEN_PP(arg_options), &option, &syntax, NULL);
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
- if (ZEND_NUM_ARGS() > 1) {
- /* create regex pattern buffer */
- convert_to_string_ex(arg_pattern);
-
- if ((MBSTRG(search_re) = php_mbregex_compile_pattern(Z_STRVAL_PP(arg_pattern), Z_STRLEN_PP(arg_pattern), option, MBSTRG(current_mbctype), syntax TSRMLS_CC)) == NULL) {
- RETURN_FALSE;
- }
- }
-
- if (MBSTRG(search_str) != NULL) {
- zval_ptr_dtor(&MBSTRG(search_str));
- MBSTRG(search_str) = (zval *)NULL;
- }
-
- MBSTRG(search_str) = *arg_str;
- ZVAL_ADDREF(MBSTRG(search_str));
- SEPARATE_ZVAL_IF_NOT_REF(&MBSTRG(search_str));
-
- MBSTRG(search_pos) = 0;
-
- if (MBSTRG(search_regs) != NULL) {
- onig_region_free(MBSTRG(search_regs), 1);
- MBSTRG(search_regs) = (OnigRegion *) NULL;
- }
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto array mb_ereg_search_getregs(void)
- Get matched substring of the last time */
-PHP_FUNCTION(mb_ereg_search_getregs)
-{
- int n, i, len, beg, end;
- UChar *str;
-
- if (MBSTRG(search_regs) != NULL && Z_TYPE_P(MBSTRG(search_str)) == IS_STRING && Z_STRVAL_P(MBSTRG(search_str)) != NULL) {
- array_init(return_value);
-
- str = (UChar *)Z_STRVAL_P(MBSTRG(search_str));
- len = Z_STRLEN_P(MBSTRG(search_str));
- n = MBSTRG(search_regs)->num_regs;
- for (i = 0; i < n; i++) {
- beg = MBSTRG(search_regs)->beg[i];
- end = MBSTRG(search_regs)->end[i];
- if (beg >= 0 && beg <= end && end <= len) {
- add_index_stringl(return_value, i, (char *)&str[beg], end - beg, 1);
- } else {
- add_index_bool(return_value, i, 0);
- }
- }
- } else {
- RETVAL_FALSE;
- }
-}
-/* }}} */
-
-/* {{{ proto int mb_ereg_search_getpos(void)
- Get search start position */
-PHP_FUNCTION(mb_ereg_search_getpos)
-{
- RETVAL_LONG(MBSTRG(search_pos));
-}
-/* }}} */
-
-/* {{{ proto bool mb_ereg_search_setpos(int position)
- Set search start position */
-PHP_FUNCTION(mb_ereg_search_setpos)
-{
- zval **arg_pos;
- int n;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg_pos) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long_ex(arg_pos);
- n = Z_LVAL_PP(arg_pos);
- if (n < 0 || (MBSTRG(search_str) != NULL && Z_TYPE_P(MBSTRG(search_str)) == IS_STRING && n >= Z_STRLEN_P(MBSTRG(search_str)))) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Position is out of range");
- MBSTRG(search_pos) = 0;
- RETVAL_FALSE;
- } else {
- MBSTRG(search_pos) = n;
- RETVAL_TRUE;
- }
-}
-/* }}} */
-
-/* {{{ php_mb_regex_set_options */
-void php_mb_regex_set_options(OnigOptionType options, OnigSyntaxType *syntax, OnigOptionType *prev_options, OnigSyntaxType **prev_syntax TSRMLS_DC)
-{
- if (prev_options != NULL) {
- *prev_options = MBSTRG(regex_default_options);
- }
- if (prev_syntax != NULL) {
- *prev_syntax = MBSTRG(regex_default_syntax);
- }
- MBSTRG(regex_default_options) = options;
- MBSTRG(regex_default_syntax) = syntax;
-}
-/* }}} */
-
-/* {{{ proto string mb_regex_set_options([string options])
- Set or get the default options for mbregex functions */
-PHP_FUNCTION(mb_regex_set_options)
-{
- OnigOptionType opt;
- OnigSyntaxType *syntax;
- char *string = NULL;
- int string_len;
- char buf[16];
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|s",
- &string, &string_len) == FAILURE) {
- RETURN_FALSE;
- }
- if (string != NULL) {
- opt = 0;
- syntax = NULL;
- _php_mb_regex_init_options(string, string_len, &opt, &syntax, NULL);
- php_mb_regex_set_options(opt, syntax, NULL, NULL TSRMLS_CC);
- } else {
- opt = MBSTRG(regex_default_options);
- syntax = MBSTRG(regex_default_syntax);
- }
- _php_mb_regex_get_option_string(buf, sizeof(buf), opt, syntax);
-
- RETVAL_STRING(buf, 1);
-}
-/* }}} */
-
-#endif /* HAVE_MBREGEX */
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- * vim600: fdm=marker
- * vim: noet sw=4 ts=4
- */
diff --git a/ext/mbstring/php_mbregex.h b/ext/mbstring/php_mbregex.h
deleted file mode 100644
index 7d99953a70..0000000000
--- a/ext/mbstring/php_mbregex.h
+++ /dev/null
@@ -1,119 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Moriyoshi Koizumi <moriyoshi@php.net> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-#ifndef _PHP_MBREGEX_H
-#define _PHP_MBREGEX_H
-
-#if HAVE_MBREGEX
-
-#include "php.h"
-#include "zend.h"
-#include "oniguruma/oniguruma.h"
-
-/* {{{ PHP_MBREGEX_GLOBALS */
-#define PHP_MBREGEX_GLOBALS \
- OnigEncoding default_mbctype; \
- OnigEncoding current_mbctype; \
- HashTable ht_rc; \
- zval *search_str; \
- zval *search_str_val; \
- unsigned int search_pos; \
- php_mb_regex_t *search_re; \
- OnigRegion *search_regs; \
- OnigOptionType regex_default_options; \
- OnigSyntaxType *regex_default_syntax;
-/* }}} */
-
-/* {{{ PHP_MBREGEX_FUNCTION_ENTRIES */
-#define PHP_MBREGEX_FUNCTION_ENTRIES \
- PHP_FE(mb_regex_encoding, NULL) \
- PHP_FE(mb_regex_set_options, NULL) \
- PHP_FE(mb_ereg, third_arg_force_ref) \
- PHP_FE(mb_eregi, third_arg_force_ref) \
- PHP_FE(mb_ereg_replace, NULL) \
- PHP_FE(mb_eregi_replace, NULL) \
- PHP_FE(mb_split, NULL) \
- PHP_FE(mb_ereg_match, NULL) \
- PHP_FE(mb_ereg_search, NULL) \
- PHP_FE(mb_ereg_search_pos, NULL) \
- PHP_FE(mb_ereg_search_regs, NULL) \
- PHP_FE(mb_ereg_search_init, NULL) \
- PHP_FE(mb_ereg_search_getregs, NULL) \
- PHP_FE(mb_ereg_search_getpos, NULL) \
- PHP_FE(mb_ereg_search_setpos, NULL) \
- PHP_FALIAS(mbregex_encoding, mb_regex_encoding, NULL) \
- PHP_FALIAS(mbereg, mb_ereg, NULL) \
- PHP_FALIAS(mberegi, mb_eregi, NULL) \
- PHP_FALIAS(mbereg_replace, mb_ereg_replace, NULL) \
- PHP_FALIAS(mberegi_replace, mb_eregi_replace, NULL) \
- PHP_FALIAS(mbsplit, mb_split, NULL) \
- PHP_FALIAS(mbereg_match, mb_ereg_match, NULL) \
- PHP_FALIAS(mbereg_search, mb_ereg_search, NULL) \
- PHP_FALIAS(mbereg_search_pos, mb_ereg_search_pos, NULL) \
- PHP_FALIAS(mbereg_search_regs, mb_ereg_search_regs, NULL) \
- PHP_FALIAS(mbereg_search_init, mb_ereg_search_init, NULL) \
- PHP_FALIAS(mbereg_search_getregs, mb_ereg_search_getregs, NULL) \
- PHP_FALIAS(mbereg_search_getpos, mb_ereg_search_getpos, NULL) \
- PHP_FALIAS(mbereg_search_setpos, mb_ereg_search_setpos, NULL)
-/* }}} */
-
-typedef struct _zend_mbstring_globals * zend_mbstring_globals_ptr;
-
-#define PHP_MBREGEX_MAXCACHE 50
-
-PHP_MINIT_FUNCTION(mb_regex);
-PHP_MSHUTDOWN_FUNCTION(mb_regex);
-PHP_RINIT_FUNCTION(mb_regex);
-PHP_RSHUTDOWN_FUNCTION(mb_regex);
-void _php_mb_regex_globals_ctor(zend_mbstring_globals_ptr pglobals TSRMLS_DC);
-void php_mb_regex_set_options(OnigOptionType options, OnigSyntaxType *syntax, OnigOptionType *prev_options, OnigSyntaxType **prev_syntax TSRMLS_DC);
-void _php_mb_regex_globals_dtor(zend_mbstring_globals_ptr pglobals TSRMLS_DC);
-OnigEncoding php_mb_regex_name2mbctype(const char *pname);
-const char *php_mb_regex_mbctype2name(OnigEncoding mbctype);
-
-PHP_FUNCTION(mb_regex_encoding);
-PHP_FUNCTION(mb_ereg);
-PHP_FUNCTION(mb_eregi);
-PHP_FUNCTION(mb_ereg_replace);
-PHP_FUNCTION(mb_eregi_replace);
-PHP_FUNCTION(mb_split);
-PHP_FUNCTION(mb_ereg_match);
-PHP_FUNCTION(mb_ereg_search);
-PHP_FUNCTION(mb_ereg_search_pos);
-PHP_FUNCTION(mb_ereg_search_regs);
-PHP_FUNCTION(mb_ereg_search_init);
-PHP_FUNCTION(mb_ereg_search_getregs);
-PHP_FUNCTION(mb_ereg_search_getpos);
-PHP_FUNCTION(mb_ereg_search_setpos);
-PHP_FUNCTION(mb_regex_set_options);
-
-#endif /* HAVE_MBREGEX */
-
-#endif /* _PHP_MBREGEX_H */
-
-/*
- * 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/mbstring/php_unicode.c b/ext/mbstring/php_unicode.c
deleted file mode 100644
index 42ecaa8d58..0000000000
--- a/ext/mbstring/php_unicode.c
+++ /dev/null
@@ -1,313 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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@thebrainroom.com) |
- +----------------------------------------------------------------------+
-
- Based on code from ucdata-2.5, which has the following Copyright:
-
- Copyright 2001 Computing Research Labs, New Mexico State University
-
- Permission is hereby granted, free of charge, to any person obtaining a
- copy of this software and associated documentation files (the "Software"),
- to deal in the Software without restriction, including without limitation
- the rights to use, copy, modify, merge, publish, distribute, sublicense,
- and/or sell copies of the Software, and to permit persons to whom the
- Software is furnished to do so, subject to the following conditions:
-
- The above copyright notice and this permission notice shall be included in
- all copies or substantial portions of the Software.
-*/
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "php.h"
-#include "php_ini.h"
-
-#if HAVE_MBSTRING
-
-/* include case folding data generated from the official UnicodeData.txt file */
-#include "mbstring.h"
-#include "php_unicode.h"
-#include "unicode_data.h"
-
-/*
- * A simple array of 32-bit masks for lookup.
- */
-static unsigned long masks32[32] = {
- 0x00000001, 0x00000002, 0x00000004, 0x00000008, 0x00000010, 0x00000020,
- 0x00000040, 0x00000080, 0x00000100, 0x00000200, 0x00000400, 0x00000800,
- 0x00001000, 0x00002000, 0x00004000, 0x00008000, 0x00010000, 0x00020000,
- 0x00040000, 0x00080000, 0x00100000, 0x00200000, 0x00400000, 0x00800000,
- 0x01000000, 0x02000000, 0x04000000, 0x08000000, 0x10000000, 0x20000000,
- 0x40000000, 0x80000000
-};
-
-
-static int prop_lookup(unsigned long code, unsigned long n)
-{
- long l, r, m;
-
- /*
- * There is an extra node on the end of the offsets to allow this routine
- * to work right. If the index is 0xffff, then there are no nodes for the
- * property.
- */
- if ((l = _ucprop_offsets[n]) == 0xffff)
- return 0;
-
- /*
- * Locate the next offset that is not 0xffff. The sentinel at the end of
- * the array is the max index value.
- */
- for (m = 1; n + m < _ucprop_size && _ucprop_offsets[n + m] == 0xffff; m++)
- ;
-
- r = _ucprop_offsets[n + m] - 1;
-
- while (l <= r) {
- /*
- * Determine a "mid" point and adjust to make sure the mid point is at
- * the beginning of a range pair.
- */
- m = (l + r) >> 1;
- m -= (m & 1);
- if (code > _ucprop_ranges[m + 1])
- l = m + 2;
- else if (code < _ucprop_ranges[m])
- r = m - 2;
- else if (code >= _ucprop_ranges[m] && code <= _ucprop_ranges[m + 1])
- return 1;
- }
- return 0;
-
-}
-
-MBSTRING_API int php_unicode_is_prop(unsigned long code, unsigned long mask1,
- unsigned long mask2)
-{
- unsigned long i;
-
- if (mask1 == 0 && mask2 == 0)
- return 0;
-
- for (i = 0; mask1 && i < 32; i++) {
- if ((mask1 & masks32[i]) && prop_lookup(code, i))
- return 1;
- }
-
- for (i = 32; mask2 && i < _ucprop_size; i++) {
- if ((mask2 & masks32[i & 31]) && prop_lookup(code, i))
- return 1;
- }
-
- return 0;
-}
-
-static unsigned long case_lookup(unsigned long code, long l, long r, int field)
-{
- long m;
-
- /*
- * Do the binary search.
- */
- while (l <= r) {
- /*
- * Determine a "mid" point and adjust to make sure the mid point is at
- * the beginning of a case mapping triple.
- */
- m = (l + r) >> 1;
- m -= (m % 3);
- if (code > _uccase_map[m])
- l = m + 3;
- else if (code < _uccase_map[m])
- r = m - 3;
- else if (code == _uccase_map[m])
- return _uccase_map[m + field];
- }
-
- return code;
-}
-
-MBSTRING_API unsigned long php_unicode_toupper(unsigned long code)
-{
- int field;
- long l, r;
-
- if (php_unicode_is_upper(code))
- return code;
-
- if (php_unicode_is_lower(code)) {
- /*
- * The character is lower case.
- */
- field = 2;
- l = _uccase_len[0];
- r = (l + _uccase_len[1]) - 3;
- } else {
- /*
- * The character is title case.
- */
- field = 1;
- l = _uccase_len[0] + _uccase_len[1];
- r = _uccase_size - 3;
- }
- return case_lookup(code, l, r, field);
-}
-
-MBSTRING_API unsigned long php_unicode_tolower(unsigned long code)
-{
- int field;
- long l, r;
-
- if (php_unicode_is_lower(code))
- return code;
-
- if (php_unicode_is_upper(code)) {
- /*
- * The character is upper case.
- */
- field = 1;
- l = 0;
- r = _uccase_len[0] - 3;
- } else {
- /*
- * The character is title case.
- */
- field = 2;
- l = _uccase_len[0] + _uccase_len[1];
- r = _uccase_size - 3;
- }
- return case_lookup(code, l, r, field);
-}
-
-MBSTRING_API unsigned long php_unicode_totitle(unsigned long code)
-{
- int field;
- long l, r;
-
- if (php_unicode_is_title(code))
- return code;
-
- /*
- * The offset will always be the same for converting to title case.
- */
- field = 2;
-
- if (php_unicode_is_upper(code)) {
- /*
- * The character is upper case.
- */
- l = 0;
- r = _uccase_len[0] - 3;
- } else {
- /*
- * The character is lower case.
- */
- l = _uccase_len[0];
- r = (l + _uccase_len[1]) - 3;
- }
- return case_lookup(code, l, r, field);
-
-}
-
-
-#define BE_ARY_TO_UINT32(ptr) (\
- ((unsigned char*)(ptr))[0]<<24 |\
- ((unsigned char*)(ptr))[1]<<16 |\
- ((unsigned char*)(ptr))[2]<< 8 |\
- ((unsigned char*)(ptr))[3] )
-
-#define UINT32_TO_BE_ARY(ptr,val) { \
- unsigned int v = val; \
- ((unsigned char*)(ptr))[0] = (v>>24) & 0xff,\
- ((unsigned char*)(ptr))[1] = (v>>16) & 0xff,\
- ((unsigned char*)(ptr))[2] = (v>> 8) & 0xff,\
- ((unsigned char*)(ptr))[3] = (v ) & 0xff;\
-}
-
-MBSTRING_API char *php_unicode_convert_case(int case_mode, char *srcstr, size_t srclen, size_t *ret_len,
- char *src_encoding TSRMLS_DC)
-{
- char *unicode, *newstr;
- size_t unicode_len;
- unsigned char *unicode_ptr;
- size_t i;
-
- unicode = php_mb_convert_encoding(srcstr, srclen, "UCS-4BE", src_encoding, &unicode_len TSRMLS_CC);
- if (unicode == NULL)
- return NULL;
-
- unicode_ptr = unicode;
-
- switch(case_mode) {
- case PHP_UNICODE_CASE_UPPER:
- for (i = 0; i < unicode_len; i+=4) {
- UINT32_TO_BE_ARY(&unicode_ptr[i],
- php_unicode_toupper(BE_ARY_TO_UINT32(&unicode_ptr[i])));
- }
- break;
-
- case PHP_UNICODE_CASE_LOWER:
- for (i = 0; i < unicode_len; i+=4) {
- UINT32_TO_BE_ARY(&unicode_ptr[i],
- php_unicode_tolower(BE_ARY_TO_UINT32(&unicode_ptr[i])));
- }
- break;
-
- case PHP_UNICODE_CASE_TITLE: {
- int mode = 0;
-
- 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);
- if (mode) {
- if (res) {
- UINT32_TO_BE_ARY(&unicode_ptr[i],
- php_unicode_tolower(BE_ARY_TO_UINT32(&unicode_ptr[i])));
- } else {
- mode = 0;
- }
- } else {
- if (res) {
- mode = 1;
- UINT32_TO_BE_ARY(&unicode_ptr[i],
- php_unicode_totitle(BE_ARY_TO_UINT32(&unicode_ptr[i])));
- }
- }
- }
- } break;
-
- }
-
- newstr = php_mb_convert_encoding(unicode, unicode_len, src_encoding, "UCS-4BE", ret_len TSRMLS_CC);
- efree(unicode);
-
- return newstr;
-}
-
-
-#endif /* HAVE_MBSTRING */
-
-/*
- * 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/mbstring/php_unicode.h b/ext/mbstring/php_unicode.h
deleted file mode 100644
index c2d360a243..0000000000
--- a/ext/mbstring/php_unicode.h
+++ /dev/null
@@ -1,201 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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@thebrainroom.com) |
- +----------------------------------------------------------------------+
-
- Based on code from ucdata-2.5, which has the following Copyright:
-
- Copyright 2001 Computing Research Labs, New Mexico State University
-
- Permission is hereby granted, free of charge, to any person obtaining a
- copy of this software and associated documentation files (the "Software"),
- to deal in the Software without restriction, including without limitation
- the rights to use, copy, modify, merge, publish, distribute, sublicense,
- and/or sell copies of the Software, and to permit persons to whom the
- Software is furnished to do so, subject to the following conditions:
-
- The above copyright notice and this permission notice shall be included in
- all copies or substantial portions of the Software.
-*/
-
-#ifndef PHP_UNICODE_H
-#define PHP_UNICODE_H
-
-#if HAVE_MBSTRING
-/*
- * Values that can appear in the `mask1' parameter of the php_unicode_is_prop()
- * function.
- */
-#define UC_MN 0x00000001 /* Mark, Non-Spacing */
-#define UC_MC 0x00000002 /* Mark, Spacing Combining */
-#define UC_ME 0x00000004 /* Mark, Enclosing */
-#define UC_ND 0x00000008 /* Number, Decimal Digit */
-#define UC_NL 0x00000010 /* Number, Letter */
-#define UC_NO 0x00000020 /* Number, Other */
-#define UC_ZS 0x00000040 /* Separator, Space */
-#define UC_ZL 0x00000080 /* Separator, Line */
-#define UC_ZP 0x00000100 /* Separator, Paragraph */
-#define UC_CC 0x00000200 /* Other, Control */
-#define UC_CF 0x00000400 /* Other, Format */
-#define UC_OS 0x00000800 /* Other, Surrogate */
-#define UC_CO 0x00001000 /* Other, Private Use */
-#define UC_CN 0x00002000 /* Other, Not Assigned */
-#define UC_LU 0x00004000 /* Letter, Uppercase */
-#define UC_LL 0x00008000 /* Letter, Lowercase */
-#define UC_LT 0x00010000 /* Letter, Titlecase */
-#define UC_LM 0x00020000 /* Letter, Modifier */
-#define UC_LO 0x00040000 /* Letter, Other */
-#define UC_PC 0x00080000 /* Punctuation, Connector */
-#define UC_PD 0x00100000 /* Punctuation, Dash */
-#define UC_PS 0x00200000 /* Punctuation, Open */
-#define UC_PE 0x00400000 /* Punctuation, Close */
-#define UC_PO 0x00800000 /* Punctuation, Other */
-#define UC_SM 0x01000000 /* Symbol, Math */
-#define UC_SC 0x02000000 /* Symbol, Currency */
-#define UC_SK 0x04000000 /* Symbol, Modifier */
-#define UC_SO 0x08000000 /* Symbol, Other */
-#define UC_L 0x10000000 /* Left-To-Right */
-#define UC_R 0x20000000 /* Right-To-Left */
-#define UC_EN 0x40000000 /* European Number */
-#define UC_ES 0x80000000 /* European Number Separator */
-
-/*
- * Values that can appear in the `mask2' parameter of the php_unicode_is_prop()
- * function.
- */
-#define UC_ET 0x00000001 /* European Number Terminator */
-#define UC_AN 0x00000002 /* Arabic Number */
-#define UC_CS 0x00000004 /* Common Number Separator */
-#define UC_B 0x00000008 /* Block Separator */
-#define UC_S 0x00000010 /* Segment Separator */
-#define UC_WS 0x00000020 /* Whitespace */
-#define UC_ON 0x00000040 /* Other Neutrals */
-/*
- * Implementation specific character properties.
- */
-#define UC_CM 0x00000080 /* Composite */
-#define UC_NB 0x00000100 /* Non-Breaking */
-#define UC_SY 0x00000200 /* Symmetric */
-#define UC_HD 0x00000400 /* Hex Digit */
-#define UC_QM 0x00000800 /* Quote Mark */
-#define UC_MR 0x00001000 /* Mirroring */
-#define UC_SS 0x00002000 /* Space, other */
-
-#define UC_CP 0x00004000 /* Defined */
-
-/*
- * Added for UnicodeData-2.1.3.
- */
-#define UC_PI 0x00008000 /* Punctuation, Initial */
-#define UC_PF 0x00010000 /* Punctuation, Final */
-
-MBSTRING_API int php_unicode_is_prop(unsigned long code, unsigned long mask1,
- unsigned long mask2);
-MBSTRING_API char *php_unicode_convert_case(int case_mode, char *srcstr, size_t srclen, size_t *retlen,
- char *src_encoding TSRMLS_DC);
-
-#define PHP_UNICODE_CASE_UPPER 0
-#define PHP_UNICODE_CASE_LOWER 1
-#define PHP_UNICODE_CASE_TITLE 2
-
-#define php_unicode_is_alpha(cc) php_unicode_is_prop(cc, UC_LU|UC_LL|UC_LM|UC_LO|UC_LT, 0)
-#define php_unicode_is_digit(cc) php_unicode_is_prop(cc, UC_ND, 0)
-#define php_unicode_is_alnum(cc) php_unicode_is_prop(cc, UC_LU|UC_LL|UC_LM|UC_LO|UC_LT|UC_ND, 0)
-#define php_unicode_is_cntrl(cc) php_unicode_is_prop(cc, UC_CC|UC_CF, 0)
-#define php_unicode_is_space(cc) php_unicode_is_prop(cc, UC_ZS|UC_SS, 0)
-#define php_unicode_is_blank(cc) php_unicode_is_prop(cc, UC_ZS, 0)
-#define php_unicode_is_punct(cc) php_unicode_is_prop(cc, UC_PD|UC_PS|UC_PE|UC_PO, UC_PI|UC_PF)
-#define php_unicode_is_graph(cc) php_unicode_is_prop(cc, UC_MN|UC_MC|UC_ME|UC_ND|UC_NL|UC_NO|\
- UC_LU|UC_LL|UC_LT|UC_LM|UC_LO|UC_PC|UC_PD|\
- UC_PS|UC_PE|UC_PO|UC_SM|UC_SM|UC_SC|UC_SK|\
- UC_SO, UC_PI|UC_PF)
-#define php_unicode_is_print(cc) php_unicode_is_prop(cc, UC_MN|UC_MC|UC_ME|UC_ND|UC_NL|UC_NO|\
- UC_LU|UC_LL|UC_LT|UC_LM|UC_LO|UC_PC|UC_PD|\
- UC_PS|UC_PE|UC_PO|UC_SM|UC_SM|UC_SC|UC_SK|\
- UC_SO|UC_ZS, UC_PI|UC_PF)
-#define php_unicode_is_upper(cc) php_unicode_is_prop(cc, UC_LU, 0)
-#define php_unicode_is_lower(cc) php_unicode_is_prop(cc, UC_LL, 0)
-#define php_unicode_is_title(cc) php_unicode_is_prop(cc, UC_LT, 0)
-#define php_unicode_is_xdigit(cc) php_unicode_is_prop(cc, 0, UC_HD)
-
-#define php_unicode_is_isocntrl(cc) php_unicode_is_prop(cc, UC_CC, 0)
-#define php_unicode_is_fmtcntrl(cc) php_unicode_is_prop(cc, UC_CF, 0)
-
-#define php_unicode_is_symbol(cc) php_unicode_is_prop(cc, UC_SM|UC_SC|UC_SO|UC_SK, 0)
-#define php_unicode_is_number(cc) php_unicode_is_prop(cc, UC_ND|UC_NO|UC_NL, 0)
-#define php_unicode_is_nonspacing(cc) php_unicode_is_prop(cc, UC_MN, 0)
-#define php_unicode_is_openpunct(cc) php_unicode_is_prop(cc, UC_PS, 0)
-#define php_unicode_is_closepunct(cc) php_unicode_is_prop(cc, UC_PE, 0)
-#define php_unicode_is_initialpunct(cc) php_unicode_is_prop(cc, 0, UC_PI)
-#define php_unicode_is_finalpunct(cc) php_unicode_is_prop(cc, 0, UC_PF)
-
-#define php_unicode_is_composite(cc) php_unicode_is_prop(cc, 0, UC_CM)
-#define php_unicode_is_hex(cc) php_unicode_is_prop(cc, 0, UC_HD)
-#define php_unicode_is_quote(cc) php_unicode_is_prop(cc, 0, UC_QM)
-#define php_unicode_is_symmetric(cc) php_unicode_is_prop(cc, 0, UC_SY)
-#define php_unicode_is_mirroring(cc) php_unicode_is_prop(cc, 0, UC_MR)
-#define php_unicode_is_nonbreaking(cc) php_unicode_is_prop(cc, 0, UC_NB)
-
-/*
- * Directionality macros.
- */
-#define php_unicode_is_rtl(cc) php_unicode_is_prop(cc, UC_R, 0)
-#define php_unicode_is_ltr(cc) php_unicode_is_prop(cc, UC_L, 0)
-#define php_unicode_is_strong(cc) php_unicode_is_prop(cc, UC_L|UC_R, 0)
-#define php_unicode_is_weak(cc) php_unicode_is_prop(cc, UC_EN|UC_ES, UC_ET|UC_AN|UC_CS)
-#define php_unicode_is_neutral(cc) php_unicode_is_prop(cc, 0, UC_B|UC_S|UC_WS|UC_ON)
-#define php_unicode_is_separator(cc) php_unicode_is_prop(cc, 0, UC_B|UC_S)
-
-/*
- * Other macros inspired by John Cowan.
- */
-#define php_unicode_is_mark(cc) php_unicode_is_prop(cc, UC_MN|UC_MC|UC_ME, 0)
-#define php_unicode_is_modif(cc) php_unicode_is_prop(cc, UC_LM, 0)
-#define php_unicode_is_letnum(cc) php_unicode_is_prop(cc, UC_NL, 0)
-#define php_unicode_is_connect(cc) php_unicode_is_prop(cc, UC_PC, 0)
-#define php_unicode_is_dash(cc) php_unicode_is_prop(cc, UC_PD, 0)
-#define php_unicode_is_math(cc) php_unicode_is_prop(cc, UC_SM, 0)
-#define php_unicode_is_currency(cc) php_unicode_is_prop(cc, UC_SC, 0)
-#define php_unicode_is_modifsymbol(cc) php_unicode_is_prop(cc, UC_SK, 0)
-#define php_unicode_is_nsmark(cc) php_unicode_is_prop(cc, UC_MN, 0)
-#define php_unicode_is_spmark(cc) php_unicode_is_prop(cc, UC_MC, 0)
-#define php_unicode_is_enclosing(cc) php_unicode_is_prop(cc, UC_ME, 0)
-#define php_unicode_is_private(cc) php_unicode_is_prop(cc, UC_CO, 0)
-#define php_unicode_is_surrogate(cc) php_unicode_is_prop(cc, UC_OS, 0)
-#define php_unicode_is_lsep(cc) php_unicode_is_prop(cc, UC_ZL, 0)
-#define php_unicode_is_psep(cc) php_unicode_is_prop(cc, UC_ZP, 0)
-
-#define php_unicode_is_identstart(cc) php_unicode_is_prop(cc, UC_LU|UC_LL|UC_LT|UC_LO|UC_NL, 0)
-#define php_unicode_is_identpart(cc) php_unicode_is_prop(cc, UC_LU|UC_LL|UC_LT|UC_LO|UC_NL|\
- UC_MN|UC_MC|UC_ND|UC_PC|UC_CF, 0)
-
-#define php_unicode_is_defined(cc) php_unicode_is_prop(cc, 0, UC_CP)
-#define php_unicode_is_undefined(cc) !php_unicode_is_prop(cc, 0, UC_CP)
-
-/*
- * Other miscellaneous character property macros.
- */
-#define php_unicode_is_han(cc) (((cc) >= 0x4e00 && (cc) <= 0x9fff) ||\
- ((cc) >= 0xf900 && (cc) <= 0xfaff))
-#define php_unicode_is_hangul(cc) ((cc) >= 0xac00 && (cc) <= 0xd7ff)
-
-
-#endif
-
-
-#endif /* PHP_UNICODE_H */
-
-
-
diff --git a/ext/mbstring/tests/bug20087.phpt b/ext/mbstring/tests/bug20087.phpt
deleted file mode 100644
index efae733ca2..0000000000
--- a/ext/mbstring/tests/bug20087.phpt
+++ /dev/null
@@ -1,20 +0,0 @@
---TEST--
-Bug #20087 (Assertion failure)
---SKIPIF--
-<?php extension_loaded('mbstring') or die('skip mbstring not available'); ?>
---FILE--
-<?php
-ini_set('include_path','.');
-include_once('common.inc');
-$testmoo = "blah blah";
-var_dump(mb_parse_str("testmoo"));
-var_dump($testmoo);
-var_dump(mb_parse_str("test=moo"));
-var_dump($test);
-?>
---EXPECT--
-bool(true)
-string(0) ""
-bool(true)
-string(3) "moo"
-
diff --git a/ext/mbstring/tests/bug25140.phpt b/ext/mbstring/tests/bug25140.phpt
deleted file mode 100644
index 0b209120f5..0000000000
--- a/ext/mbstring/tests/bug25140.phpt
+++ /dev/null
@@ -1,10 +0,0 @@
---TEST--
-Bug #25140 (mb_convert_encoding returns FALSE on an empty string)
---SKIPIF--
-<?php extension_loaded('mbstring') or die('skip mbstring not available'); ?>
---FILE--
-<?php
-var_dump( mb_convert_encoding( '', 'SJIS', 'EUC-JP' ) );
-?>
---EXPECT--
-string(0) ""
diff --git a/ext/mbstring/tests/bug26639.phpt b/ext/mbstring/tests/bug26639.phpt
deleted file mode 100644
index a87e912ba6..0000000000
--- a/ext/mbstring/tests/bug26639.phpt
+++ /dev/null
@@ -1,123 +0,0 @@
---TEST--
-Bug #26639 (mb_convert_variables() clutters variables beyond the references)
---SKIPIF--
-<?php extension_loaded('mbstring') or die('skip mbstring not available'); ?>
---FILE--
-<?php
-$a = "‚ ‚¢‚¤‚¦‚¨";
-$b = $a;
-mb_convert_variables("EUC-JP", "Shift_JIS", $b);
-debug_zval_dump($a);
-debug_zval_dump($b);
-unset($a);
-unset($b);
-
-$a = "‚ ‚¢‚¤‚¦‚¨";
-$b = &$a;
-mb_convert_variables("EUC-JP", "Shift_JIS", $b);
-debug_zval_dump($a);
-debug_zval_dump($b);
-unset($a);
-unset($b);
-
-$a = "‚ ‚¢‚¤‚¦‚¨";
-$b = array($a);
-$c = $b;
-mb_convert_variables("EUC-JP", "Shift_JIS", $c);
-debug_zval_dump($b);
-debug_zval_dump($c);
-unset($a);
-unset($b);
-unset($c);
-
-$a = "‚ ‚¢‚¤‚¦‚¨";
-$b = array(&$a);
-$c = $b;
-mb_convert_variables("EUC-JP", "Shift_JIS", $c);
-debug_zval_dump($b);
-debug_zval_dump($c);
-unset($a);
-unset($b);
-unset($c);
-
-$a = "‚ ‚¢‚¤‚¦‚¨";
-$b = array($a);
-$c = &$b;
-mb_convert_variables("EUC-JP", "Shift_JIS", $c);
-debug_zval_dump($b);
-debug_zval_dump($c);
-unset($a);
-unset($b);
-unset($c);
-
-$a = "‚ ‚¢‚¤‚¦‚¨";
-$b = array(&$a);
-$c = &$b;
-mb_convert_variables("EUC-JP", "Shift_JIS", $c);
-debug_zval_dump($b);
-debug_zval_dump($c);
-unset($a);
-unset($b);
-unset($c);
-
-$a = array(array("‚ ‚¢‚¤‚¦‚¨"));
-$b = $a;
-$c = $b;
-mb_convert_variables("EUC-JP", "Shift_JIS", $c);
-debug_zval_dump($b);
-debug_zval_dump($c);
-unset($a);
-unset($b);
-unset($c);
-?>
---EXPECT--
-string(10) "‚ ‚¢‚¤‚¦‚¨" refcount(2)
-string(10) "¤¢¤¤¤¦¤¨¤ª" refcount(2)
-string(10) "¤¢¤¤¤¦¤¨¤ª" refcount(1)
-string(10) "¤¢¤¤¤¦¤¨¤ª" refcount(1)
-array(1) refcount(2){
- [0]=>
- string(10) "‚ ‚¢‚¤‚¦‚¨" refcount(2)
-}
-array(1) refcount(2){
- [0]=>
- string(10) "¤¢¤¤¤¦¤¨¤ª" refcount(1)
-}
-array(1) refcount(2){
- [0]=>
- &string(10) "‚ ‚¢‚¤‚¦‚¨" refcount(2)
-}
-array(1) refcount(2){
- [0]=>
- string(10) "¤¢¤¤¤¦¤¨¤ª" refcount(1)
-}
-array(1) refcount(1){
- [0]=>
- string(10) "¤¢¤¤¤¦¤¨¤ª" refcount(2)
-}
-array(1) refcount(1){
- [0]=>
- string(10) "¤¢¤¤¤¦¤¨¤ª" refcount(2)
-}
-array(1) refcount(1){
- [0]=>
- string(10) "¤¢¤¤¤¦¤¨¤ª" refcount(2)
-}
-array(1) refcount(1){
- [0]=>
- string(10) "¤¢¤¤¤¦¤¨¤ª" refcount(2)
-}
-array(1) refcount(3){
- [0]=>
- array(1) refcount(1){
- [0]=>
- string(10) "‚ ‚¢‚¤‚¦‚¨" refcount(1)
- }
-}
-array(1) refcount(2){
- [0]=>
- array(1) refcount(1){
- [0]=>
- string(10) "¤¢¤¤¤¦¤¨¤ª" refcount(1)
- }
-}
diff --git a/ext/mbstring/tests/casefold.phpt b/ext/mbstring/tests/casefold.phpt
deleted file mode 100644
index 977b0bb658..0000000000
--- a/ext/mbstring/tests/casefold.phpt
+++ /dev/null
@@ -1,24 +0,0 @@
---TEST--
-mb_strtoupper() / mb_strtolower()
---SKIPIF--
-<?php
-extension_loaded('mbstring') or die('skip mbstring not available');
-function_exists('mb_strtolower') and
-function_exists('mb_convert_case' ) or die("skip mb_convert_case() is not available");
-?>
---INI--
-output_handler=
---FILE--
-<?php
- mb_internal_encoding( 'ISO-8859-1' );
- print mb_strtolower( "ABCDEFGHIJKLMNOPQRSTUVWXYZ\n" );
- print mb_strtoupper( mb_strtolower( "ABCDEFGHIJKLMNOPQRSTUVWXYZ\n" ) );
- print mb_strtoupper( "äëï\n" );
- print mb_convert_case( "äëï\n", MB_CASE_TITLE );
-?>
-
---EXPECT--
-abcdefghijklmnopqrstuvwxyz
-ABCDEFGHIJKLMNOPQRSTUVWXYZ
-ÄËÏ
-Äëï
diff --git a/ext/mbstring/tests/common.inc b/ext/mbstring/tests/common.inc
deleted file mode 100644
index e8fb411b01..0000000000
--- a/ext/mbstring/tests/common.inc
+++ /dev/null
@@ -1,53 +0,0 @@
-<?php
-/*
- * Common definition and Settings
- */
-
-// Custom Error Hanlder for testing
-function test_error_handler($err_no, $err_msg, $filename, $linenum, $vars) {
- global $debug;
-
- $err_type = array (
- 1 => "Error", // E_ERROR
- 2 => "Warning", // E_WARINING
- 4 => "Parsing Error", // E_PARSE
- 8 => "Notice", // E_NOTICE
- 16 => "Core Error", // E_CORE_ERROR
- 32 => "Core Warning", // E_CORE_WARNING
- 64 => "Compile Error", // E_COMPILE_ERROR
- 128 => "Compile Warning", // E_COMPILE_WARNING
- 256 => "User Error", // E_USER_ERROR
- 512 => "User Warning", // E_USER_WARMING
- 1024=> "User Notice" // E_USER_NOTICE
- );
-
- if (!empty($debug)) {
- printf("%s: %s (%d)\n", $err_type[$err_no], $err_msg, $linenum);
- }
- else {
- printf("ERR: %s\n",$err_type[$err_no]);
- }
-}
-
-set_error_handler('test_error_handler');
-
-
-// Var def for testing
-$t_ary = array(
- 's1' => 'ÆüËܸìEUC-JP¤Îʸ»úÎó',
- 's2' => 'English Text'
- );
-
-class tc
-{
- public $s1 = 'ÆüËܸìEUC-JP¤Îʸ»úÎó';
- public $s2 = 'English Text';
-
- function tc()
- {
- }
-}
-
-$t_obj = new tc;
-
-?> \ No newline at end of file
diff --git a/ext/mbstring/tests/htmlent.phpt b/ext/mbstring/tests/htmlent.phpt
deleted file mode 100644
index e625578e04..0000000000
--- a/ext/mbstring/tests/htmlent.phpt
+++ /dev/null
@@ -1,38 +0,0 @@
---TEST--
-HTML input/output
---SKIPIF--
-<?php
- ini_set('include_path','.');
- extension_loaded('mbstring') or die('skip mbstring not available');
-?>
---INI--
-output_buffering=4096
-output_handler=mb_output_handler
-zlib.output_compression=
-arg_separator.input=x
-error_reporting=0
-mbstring.http_input=HTML-ENTITIES
-mbstring.internal_encoding=UTF-8
-mbstring.http_output=HTML-ENTITIES
-mbstring.encoding_translation=1
---FILE--
-<?php
-// enable output encoding through output handler
-//ob_start("mb_output_handler");
-// &#64... are must be decoded on input these are not reencoded on output.
-// If you see &#64;&#65;&#66; on output this means input encoding fails.
-// If you do not see &auml;... on output this means output encoding fails.
-// Using UTF-8 internally allows to encode/decode ALL characters.
-// &128... will stay as they are since their character codes are above 127
-// and they do not have a named entity representaion.
-?>
-<?php echo mb_http_input('l').'>'.mb_internal_encoding().'>'.mb_http_output();?>
-
-<?php mb_parse_str("test=&#64;&#65;&#66;&#128;&#129;&#130;&auml;&ouml;&uuml;&euro;&lang;&rang;", $test);
-print_r($test['test']);
-?>
-===DONE===
---EXPECT--
-HTML-ENTITIES>UTF-8>HTML-ENTITIES
-test='&&;&@AB&#128;&#129;&#130;&auml;&ouml;&uuml;&euro;&lang;&rang;'
-===DONE===
diff --git a/ext/mbstring/tests/ini_language.phpt b/ext/mbstring/tests/ini_language.phpt
deleted file mode 100644
index 1dc94141fa..0000000000
--- a/ext/mbstring/tests/ini_language.phpt
+++ /dev/null
@@ -1,15 +0,0 @@
---TEST--
-mbstring.language bug
---SKIPIF--
-<?php extension_loaded('mbstring') or die('skip mbstring not available'); ?>
---INI--
-mbstring.internal_encoding=Shift_JIS
-mbstring.language=Japanese
---FILE--
-<?php
-var_dump(ini_get('mbstring.internal_encoding'));
-var_dump(mb_internal_encoding());
-?>
---EXPECT--
-string(9) "Shift_JIS"
-string(4) "SJIS"
diff --git a/ext/mbstring/tests/mb_convert_encoding.phpt b/ext/mbstring/tests/mb_convert_encoding.phpt
deleted file mode 100644
index 9d8a40b9dc..0000000000
--- a/ext/mbstring/tests/mb_convert_encoding.phpt
+++ /dev/null
@@ -1,138 +0,0 @@
---TEST--
-mb_convert_encoding()
---SKIPIF--
-<?php extension_loaded('mbstring') or die('skip mbstring not available'); ?>
---INI--
-output_handler=
-mbstring.language=Japanese
---FILE--
-<?php
-// TODO: Add more tests
-//$debug = true; // Uncomment this line to view error/warning/notice message in *.out file
-ini_set('include_path','.');
-include_once('common.inc');
-
-// SJIS string (BASE64 encoded)
-$sjis = base64_decode('k/qWe4zqg2WDTINYg2eCxYK3gUIwMTIzNIJUglWCVoJXgliBQg==');
-// JIS string (BASE64 encoded)
-$jis = base64_decode('GyRCRnxLXDhsJUYlLSU5JUgkRyQ5ISMbKEIwMTIzNBskQiM1IzYjNyM4IzkhIxsoQg==');
-// EUC-JP string
-$euc_jp = 'ÆüËܸì¥Æ¥­¥¹¥È¤Ç¤¹¡£01234£µ£¶£·£¸£¹¡£';
-
-// Test with sigle "form encoding"
-// Note: For some reason it complains, results are differ. Not reserched.
-echo "== BASIC TEST ==\n";
-$s = $sjis;
-$s = mb_convert_encoding($s, 'EUC-JP', 'SJIS');
-print("EUC-JP: $s\n"); // EUC-JP
-
-$s = $jis;
-$s = mb_convert_encoding($s, 'EUC-JP', 'JIS');
-print("EUC-JP: $s\n"); // EUC-JP
-
-$s = $euc_jp;
-$s = mb_convert_encoding($s, 'SJIS', 'EUC-JP');
-print("SJIS: ".base64_encode($s)."\n"); // SJIS
-
-$s = $euc_jp;
-$s = mb_convert_encoding($s, 'JIS', 'EUC-JP');
-print("JIS: ".base64_encode($s)."\n"); // JIS
-
-
-// Using Encoding List Array
-echo "== STRING ENCODING LIST ==\n";
-
-$a = 'JIS,UTF-8,EUC-JP,SJIS';
-$s = $jis;
-$s = mb_convert_encoding($s, 'EUC-JP', $a);
-print("EUC-JP: $s\n"); // EUC-JP
-
-$s = $euc_jp;
-$s = mb_convert_encoding($s, 'SJIS', $a);
-print("SJIS: ".base64_encode($s)."\n"); // SJIS
-
-$s = $euc_jp;
-$s = mb_convert_encoding($s, 'JIS', $a);
-print("JIS: ".base64_encode($s)."\n"); // JIS
-
-
-// Using Encoding List Array
-echo "== ARRAY ENCODING LIST ==\n";
-
-$a = array(0=>'JIS', 1=>'UTF-8', 2=>'EUC-JP', 3=>'SJIS');
-$s = $jis;
-$s = mb_convert_encoding($s, 'EUC-JP', $a);
-print("EUC-JP: $s\n"); // EUC-JP
-
-$s = $euc_jp;
-$s = mb_convert_encoding($s, 'SJIS', $a);
-print("SJIS: ".base64_encode($s)."\n"); // SJIS
-
-$s = $euc_jp;
-$s = mb_convert_encoding($s, 'JIS', $a);
-print("JIS: ".base64_encode($s)."\n"); // JIS
-
-
-// Using Detect Order
-echo "== DETECT ORDER ==\n";
-
-$s = $jis;
-$s = mb_convert_encoding($s, 'EUC-JP', 'auto');
-print("EUC-JP: $s\n"); // EUC-JP
-
-$s = $euc_jp;
-$s = mb_convert_encoding($s, 'SJIS', 'auto');
-print("SJIS: ".base64_encode($s)."\n"); // SJIS
-
-$s = $euc_jp;
-$s = mb_convert_encoding($s, 'JIS', 'auto');
-print("JIS: ".base64_encode($s)."\n"); // JIS
-
-
-// Invalid(?) Parameters
-echo "== INVALID PARAMETER ==\n";
-
-$s = mb_convert_encoding(1234, 'EUC-JP');
-print("INT: $s\n"); // EUC-JP
-
-$s = mb_convert_encoding('', 'EUC-JP');
-print("EUC-JP: $s\n"); // SJIS
-
-$s = $euc_jp;
-$s = mb_convert_encoding($s, 'BAD');
-print("BAD: $s\n"); // BAD
-
-$s = $euc_jp;
-$s = mb_convert_encoding($s);
-print("MP: $s\n"); // Missing parameter
-
-
-?>
-
---EXPECT--
-== BASIC TEST ==
-EUC-JP: ÆüËܸì¥Æ¥­¥¹¥È¤Ç¤¹¡£01234£µ£¶£·£¸£¹¡£
-EUC-JP: ÆüËܸì¥Æ¥­¥¹¥È¤Ç¤¹¡£01234£µ£¶£·£¸£¹¡£
-SJIS: k/qWe4zqg2WDTINYg2eCxYK3gUIwMTIzNIJUglWCVoJXgliBQg==
-JIS: GyRCRnxLXDhsJUYlLSU5JUgkRyQ5ISMbKEIwMTIzNBskQiM1IzYjNyM4IzkhIxsoQg==
-== STRING ENCODING LIST ==
-EUC-JP: ÆüËܸì¥Æ¥­¥¹¥È¤Ç¤¹¡£01234£µ£¶£·£¸£¹¡£
-SJIS: k/qWe4zqg2WDTINYg2eCxYK3gUIwMTIzNIJUglWCVoJXgliBQg==
-JIS: GyRCRnxLXDhsJUYlLSU5JUgkRyQ5ISMbKEIwMTIzNBskQiM1IzYjNyM4IzkhIxsoQg==
-== ARRAY ENCODING LIST ==
-EUC-JP: ÆüËܸì¥Æ¥­¥¹¥È¤Ç¤¹¡£01234£µ£¶£·£¸£¹¡£
-SJIS: k/qWe4zqg2WDTINYg2eCxYK3gUIwMTIzNIJUglWCVoJXgliBQg==
-JIS: GyRCRnxLXDhsJUYlLSU5JUgkRyQ5ISMbKEIwMTIzNBskQiM1IzYjNyM4IzkhIxsoQg==
-== DETECT ORDER ==
-EUC-JP: ÆüËܸì¥Æ¥­¥¹¥È¤Ç¤¹¡£01234£µ£¶£·£¸£¹¡£
-SJIS: k/qWe4zqg2WDTINYg2eCxYK3gUIwMTIzNIJUglWCVoJXgliBQg==
-JIS: GyRCRnxLXDhsJUYlLSU5JUgkRyQ5ISMbKEIwMTIzNBskQiM1IzYjNyM4IzkhIxsoQg==
-== INVALID PARAMETER ==
-INT: 1234
-EUC-JP:
-ERR: Warning
-BAD:
-ERR: Warning
-MP:
-
-
diff --git a/ext/mbstring/tests/mb_convert_variables.phpt b/ext/mbstring/tests/mb_convert_variables.phpt
deleted file mode 100644
index 901726bc49..0000000000
--- a/ext/mbstring/tests/mb_convert_variables.phpt
+++ /dev/null
@@ -1,164 +0,0 @@
---TEST--
-mb_convert_variables()
---SKIPIF--
-<?php extension_loaded('mbstring') or die('skip mbstring not available'); ?>
---INI--
-output_handler=
-mbstring.language=Japanese
---FILE--
-<?php
-// TODO: Add more tests
-//$debug = true; // Uncomment this line to view error/warning/notice message in *.out file
-ini_set('include_path','.');
-include_once('common.inc');
-
-// SJIS string (BASE64 encoded)
-$sjis = base64_decode('k/qWe4zqg2WDTINYg2eCxYK3gUIwMTIzNIJUglWCVoJXgliBQg==');
-// JIS string (BASE64 encoded)
-$jis = base64_decode('GyRCRnxLXDhsJUYlLSU5JUgkRyQ5ISMbKEIwMTIzNBskQiM1IzYjNyM4IzkhIxsoQg==');
-// EUC-JP string
-$euc_jp = 'ÆüËܸì¥Æ¥­¥¹¥È¤Ç¤¹¡£01234£µ£¶£·£¸£¹¡£';
-
-// Test for single scaler
-echo "== SCALER TEST ==\n";
-$s = $sjis;
-$encoding = mb_convert_variables('EUC-JP', 'SJIS', $s);
-print("$encoding\n"); // SJIS
-print("$s\n"); // Converted to EUC-JP
-
-$s = $jis;
-$encoding = mb_convert_variables('EUC-JP', 'JIS', $s);
-print("$encoding\n"); // JIS
-print("$s\n"); // Converted to EUC-JP
-
-$s = $euc_jp;
-$encoding = mb_convert_variables('SJIS', 'EUC-JP', $s);
-print("$encoding\n"); // EUC-JP
-print(base64_encode($s)."\n"); // Converted to SJIS (base64 encoded)
-
-$s = $euc_jp;
-$encoding = mb_convert_variables('JIS', 'EUC-JP', $s);
-print("$encoding\n"); // EUC-JP
-print(base64_encode($s)."\n"); // Converted to JIS (base64 encoded)
-
-// Test for multiple slcaler
-$s1 = $euc_jp;
-$s2 = $euc_jp;
-$s3 = $euc_jp;
-$encoding = mb_convert_variables('EUC-JP', 'auto', $s1, $s2, $s3);
-print("$encoding\n"); // EUC-JP
-print("$s1$s2$s3\n"); // Converted to EUC-JP
-
-
-
-// Note: Mixing encoding in array/object is not supported?
-// Test for array
-echo "== ARRAY TEST ==\n";
-$a = array($s3, $s2, $s1);
-$aa = $a;
-$encoding = mb_convert_variables('EUC-JP', 'auto', $aa);
-print("$encoding\n"); // EUC-JP
-print("{$aa[0]}{$aa[1]}{$aa[2]}\n"); // Converted to EUC-JP
-
-$a = array($s1, $s2, $s3);
-$aa = $a;
-$encoding = mb_convert_variables('EUC-JP', 'auto', $aa);
-print("$encoding\n"); // EUC-JP
-print("{$aa[0]}{$aa[1]}{$aa[2]}\n"); // Converted to EUC-JP
-
-
-
-// Test for object
-echo "== OBJECT TEST ==\n";
-class foo
-{
- public $s1;
- public $s2;
- public $s3;
-
- function foo()
- {
- global $sjis, $jis, $euc_jp;
-
- $this->s1 = $euc_jp;
- $this->s2 = $euc_jp;
- $this->s3 = $euc_jp;
- }
-}
-
-class bar
-{
- public $s1;
- public $s2;
- public $s3;
-
- function bar()
- {
- global $sjis, $jis, $euc_jp;
-
- $this->s1 = $euc_jp;
- $this->s2 = $euc_jp;
- $this->s3 = $euc_jp;
- }
-}
-
-
-$o = new foo;
-$oo = $o;
-$encoding = mb_convert_variables('EUC-JP', 'auto', $oo);
-print("$encoding\n"); // EUC-JP
-print("{$oo->s1}{$oo->s2}{$oo->s3}\n"); // Converted to EUC-JP
-
-$o = new bar;
-$oo = $o;
-$encoding = mb_convert_variables('EUC-JP', 'auto', $oo);
-print("$encoding\n"); // EUC-JP
-print("{$oo->s1}{$oo->s2}{$oo->s3}\n"); // Converted to EUC-JP
-
-
-// Test for scaler, array and object
-echo "== SCALER, ARRAY AND OBJECT TEST ==\n";
-
-$s1 = $euc_jp;
-$s2 = $euc_jp;
-$s3 = $euc_jp;
-$aa = $a;
-$oo = $o;
-
-$encoding = mb_convert_variables('EUC-JP', 'auto', $s1, $s2, $s3, $aa, $oo);
-print("$encoding\n"); // EUC-JP
-print("$s1$s2$s3\n"); // Converted to EUC-JP
-print("{$aa[0]}{$aa[1]}{$aa[2]}\n"); // Converted to EUC-JP
-print("{$oo->s1}{$oo->s2}{$oo->s3}\n"); // Converted to EUC-JP
-
-
-?>
-
---EXPECT--
-== SCALER TEST ==
-SJIS
-ÆüËܸì¥Æ¥­¥¹¥È¤Ç¤¹¡£01234£µ£¶£·£¸£¹¡£
-JIS
-ÆüËܸì¥Æ¥­¥¹¥È¤Ç¤¹¡£01234£µ£¶£·£¸£¹¡£
-EUC-JP
-k/qWe4zqg2WDTINYg2eCxYK3gUIwMTIzNIJUglWCVoJXgliBQg==
-EUC-JP
-GyRCRnxLXDhsJUYlLSU5JUgkRyQ5ISMbKEIwMTIzNBskQiM1IzYjNyM4IzkhIxsoQg==
-EUC-JP
-ÆüËܸì¥Æ¥­¥¹¥È¤Ç¤¹¡£01234£µ£¶£·£¸£¹¡£ÆüËܸì¥Æ¥­¥¹¥È¤Ç¤¹¡£01234£µ£¶£·£¸£¹¡£ÆüËܸì¥Æ¥­¥¹¥È¤Ç¤¹¡£01234£µ£¶£·£¸£¹¡£
-== ARRAY TEST ==
-EUC-JP
-ÆüËܸì¥Æ¥­¥¹¥È¤Ç¤¹¡£01234£µ£¶£·£¸£¹¡£ÆüËܸì¥Æ¥­¥¹¥È¤Ç¤¹¡£01234£µ£¶£·£¸£¹¡£ÆüËܸì¥Æ¥­¥¹¥È¤Ç¤¹¡£01234£µ£¶£·£¸£¹¡£
-EUC-JP
-ÆüËܸì¥Æ¥­¥¹¥È¤Ç¤¹¡£01234£µ£¶£·£¸£¹¡£ÆüËܸì¥Æ¥­¥¹¥È¤Ç¤¹¡£01234£µ£¶£·£¸£¹¡£ÆüËܸì¥Æ¥­¥¹¥È¤Ç¤¹¡£01234£µ£¶£·£¸£¹¡£
-== OBJECT TEST ==
-EUC-JP
-ÆüËܸì¥Æ¥­¥¹¥È¤Ç¤¹¡£01234£µ£¶£·£¸£¹¡£ÆüËܸì¥Æ¥­¥¹¥È¤Ç¤¹¡£01234£µ£¶£·£¸£¹¡£ÆüËܸì¥Æ¥­¥¹¥È¤Ç¤¹¡£01234£µ£¶£·£¸£¹¡£
-EUC-JP
-ÆüËܸì¥Æ¥­¥¹¥È¤Ç¤¹¡£01234£µ£¶£·£¸£¹¡£ÆüËܸì¥Æ¥­¥¹¥È¤Ç¤¹¡£01234£µ£¶£·£¸£¹¡£ÆüËܸì¥Æ¥­¥¹¥È¤Ç¤¹¡£01234£µ£¶£·£¸£¹¡£
-== SCALER, ARRAY AND OBJECT TEST ==
-EUC-JP
-ÆüËܸì¥Æ¥­¥¹¥È¤Ç¤¹¡£01234£µ£¶£·£¸£¹¡£ÆüËܸì¥Æ¥­¥¹¥È¤Ç¤¹¡£01234£µ£¶£·£¸£¹¡£ÆüËܸì¥Æ¥­¥¹¥È¤Ç¤¹¡£01234£µ£¶£·£¸£¹¡£
-ÆüËܸì¥Æ¥­¥¹¥È¤Ç¤¹¡£01234£µ£¶£·£¸£¹¡£ÆüËܸì¥Æ¥­¥¹¥È¤Ç¤¹¡£01234£µ£¶£·£¸£¹¡£ÆüËܸì¥Æ¥­¥¹¥È¤Ç¤¹¡£01234£µ£¶£·£¸£¹¡£
-ÆüËܸì¥Æ¥­¥¹¥È¤Ç¤¹¡£01234£µ£¶£·£¸£¹¡£ÆüËܸì¥Æ¥­¥¹¥È¤Ç¤¹¡£01234£µ£¶£·£¸£¹¡£ÆüËܸì¥Æ¥­¥¹¥È¤Ç¤¹¡£01234£µ£¶£·£¸£¹¡£
-
diff --git a/ext/mbstring/tests/mb_detect_encoding.phpt b/ext/mbstring/tests/mb_detect_encoding.phpt
deleted file mode 100644
index 79b1a1bd42..0000000000
--- a/ext/mbstring/tests/mb_detect_encoding.phpt
+++ /dev/null
@@ -1,121 +0,0 @@
---TEST--
-mb_detect_encoding()
---SKIPIF--
-<?php extension_loaded('mbstring') or die('skip mbstring not available'); ?>
---INI--
-mbstring.language=Japanese
---FILE--
-<?php
-// TODO: Add more tests
-//$debug = true; // Uncomment this line to view error/warning/notice message in *.out file
-ini_set('include_path','.');
-include_once('common.inc');
-
-// SJIS string (BASE64 encoded)
-$sjis = base64_decode('k/qWe4zqg2WDTINYg2eCxYK3gUIwMTIzNIJUglWCVoJXgliBQg==');
-// JIS string (BASE64 encoded)
-$jis = base64_decode('GyRCRnxLXDhsJUYlLSU5JUgkRyQ5ISMbKEIwMTIzNBskQiM1IzYjNyM4IzkhIxsoQg==');
-// EUC-JP string
-$euc_jp = 'ÆüËܸì¥Æ¥­¥¹¥È¤Ç¤¹¡£01234£µ£¶£·£¸£¹¡£';
-
-// Test with sigle "form encoding"
-// Note: For some reason it complains, results are differ. Not reserched.
-echo "== BASIC TEST ==\n";
-$s = $sjis;
-$s = mb_detect_encoding($s, 'SJIS');
-print("SJIS: $s\n");
-
-$s = $jis;
-$s = mb_detect_encoding($s, 'JIS');
-print("JIS: $s\n");
-
-$s = $euc_jp;
-$s = mb_detect_encoding($s, 'UTF-8,EUC-JP,JIS');
-print("EUC-JP: $s\n");
-
-$s = $euc_jp;
-$s = mb_detect_encoding($s, 'JIS,EUC-JP');
-print("EUC-JP: $s\n");
-
-
-
-// Using Encoding List Array
-echo "== ARRAY ENCODING LIST ==\n";
-
-$a = array(0=>'UTF-8',1=>'EUC-JP', 2=>'SJIS', 3=>'JIS');
-
-// Note: Due to detect order, detected as UTF-8
-$s = $jis;
-$s = mb_detect_encoding($s, $a);
-print("JIS: $s\n");
-
-$s = $euc_jp;
-$s = mb_detect_encoding($s, $a);
-print("EUC-JP: $s\n");
-
-$s = $sjis;
-$s = mb_detect_encoding($s, $a);
-print("SJIS: $s\n");
-
-
-// Using Detect Order
-echo "== DETECT ORDER ==\n";
-
-mb_detect_order('auto');
-
-
-$s = $jis;
-$s = mb_detect_encoding($s);
-print("JIS: $s\n");
-
-$s = $euc_jp;
-$s = mb_detect_encoding($s);
-print("EUC-JP: $s\n");
-
-$s = $sjis;
-$s = mb_detect_encoding($s);
-print("SJIS: $s\n");
-
-
-// Invalid(?) Parameters
-echo "== INVALID PARAMETER ==\n";
-
-$s = mb_detect_encoding(1234, 'EUC-JP');
-print("INT: $s\n"); // EUC-JP
-
-$s = mb_detect_encoding('', 'EUC-JP');
-print("EUC-JP: $s\n"); // SJIS
-
-$s = $euc_jp;
-$s = mb_detect_encoding($s, 'BAD');
-print("BAD: $s\n"); // BAD
-
-$s = $euc_jp;
-$s = mb_detect_encoding();
-print("MP: $s\n"); // Missing parameter
-
-
-?>
-
---EXPECT--
-== BASIC TEST ==
-SJIS: SJIS
-JIS: JIS
-EUC-JP: EUC-JP
-EUC-JP: EUC-JP
-== ARRAY ENCODING LIST ==
-JIS: UTF-8
-EUC-JP: EUC-JP
-SJIS: SJIS
-== DETECT ORDER ==
-JIS: JIS
-EUC-JP: EUC-JP
-SJIS: SJIS
-== INVALID PARAMETER ==
-INT: EUC-JP
-EUC-JP: EUC-JP
-ERR: Warning
-BAD: EUC-JP
-ERR: Warning
-MP:
-
diff --git a/ext/mbstring/tests/mb_detect_order.phpt b/ext/mbstring/tests/mb_detect_order.phpt
deleted file mode 100644
index bb0ec5653a..0000000000
--- a/ext/mbstring/tests/mb_detect_order.phpt
+++ /dev/null
@@ -1,61 +0,0 @@
---TEST--
-mb_detect_order()
---SKIPIF--
-<?php extension_loaded('mbstring') or die('skip mbstring not available'); ?>
---INI--
-mbstring.language=Japanese
---FILE--
-<?php
-//$debug = true;
-ini_set('include_path','.');
-include_once('common.inc');
-
-
-// Set order to "auto"
-$r = mb_detect_order('auto');
-($r === TRUE) ? print "OK_AUTO\n" : print "NG_AUTO\n";
-print implode(', ', mb_detect_order()) . "\n";
-
-
-// Set order by string
-$r = mb_detect_order('SJIS,EUC-JP,JIS,UTF-8');
-($r === TRUE) ? print "OK_STR\n" : print "NG_STR\n";
-print implode(', ', mb_detect_order()) . "\n";
-
-
-// Set order by array
-$a[] = 'ASCII';
-$a[] = 'JIS';
-$a[] = 'EUC-JP';
-$a[] = 'UTF-8';
-$r = mb_detect_order($a);
-($r === TRUE) ? print "OK_ARRAY\n" : print "NG_ARRAY\n";
-print implode(', ', mb_detect_order()) . "\n";
-
-// Set invalid encoding. Should fail.
-print "== INVALID PARAMETER ==\n";
-
-$r = mb_detect_order('BAD_NAME');
-($r === FALSE) ? print "OK_BAD_STR\n" : print "NG_BAD_STR\n";
-print implode(', ', mb_detect_order()) . "\n";
-
-$a[] = 'BAD_NAME';
-$r = mb_detect_order($a);
-($r === FALSE) ? print "OK_BAD_ARRAY\n" : print "NG_BAD_ARRAY\n";
-print implode(', ', mb_detect_order()) . "\n";
-
-?>
-
---EXPECT--
-OK_AUTO
-ASCII, JIS, UTF-8, EUC-JP, SJIS
-OK_STR
-SJIS, EUC-JP, JIS, UTF-8
-OK_ARRAY
-ASCII, JIS, EUC-JP, UTF-8
-== INVALID PARAMETER ==
-OK_BAD_STR
-ASCII, JIS, EUC-JP, UTF-8
-OK_BAD_ARRAY
-ASCII, JIS, EUC-JP, UTF-8
-
diff --git a/ext/mbstring/tests/mb_ereg-compat-01.phpt b/ext/mbstring/tests/mb_ereg-compat-01.phpt
deleted file mode 100644
index 09376780ed..0000000000
--- a/ext/mbstring/tests/mb_ereg-compat-01.phpt
+++ /dev/null
@@ -1,21 +0,0 @@
---TEST--
-mb_ereg() compat test 1
---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
-/* (counterpart: ext/standard/tests/reg/004.phpt) */
- $a="This is a nice and simple string";
- if (mb_ereg(".*nice and simple.*",$a)) {
- echo "ok\n";
- }
- if (!mb_ereg(".*doesn't exist.*",$a)) {
- echo "ok\n";
- }
-?>
---EXPECT--
-ok
-ok
diff --git a/ext/mbstring/tests/mb_ereg-compat-02.phpt b/ext/mbstring/tests/mb_ereg-compat-02.phpt
deleted file mode 100644
index 2f40422543..0000000000
--- a/ext/mbstring/tests/mb_ereg-compat-02.phpt
+++ /dev/null
@@ -1,25 +0,0 @@
---TEST--
-mb_ereg() compat test 2
---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
-/* (counterpart: ext/standard/tests/reg/005.phpt) */
- $a="This is a nice and simple string";
- echo mb_ereg(".*(is).*(is).*",$a,$registers);
- echo "\n";
- echo $registers[0];
- echo "\n";
- echo $registers[1];
- echo "\n";
- echo $registers[2];
- echo "\n";
-?>
---EXPECT--
-32
-This is a nice and simple string
-is
-is
diff --git a/ext/mbstring/tests/mb_ereg.phpt b/ext/mbstring/tests/mb_ereg.phpt
deleted file mode 100644
index d069b2593d..0000000000
--- a/ext/mbstring/tests/mb_ereg.phpt
+++ /dev/null
@@ -1,47 +0,0 @@
---TEST--
-mb_ereg()
---SKIPIF--
-<?php
-extension_loaded('mbstring') or die('skip mbstring not available');
-function_exists('mb_ereg') or die("skip mb_ereg() is not available in this build");
-?>
---INI--
-output_handler=
---FILE--
-<?php
- mb_regex_set_options( '' );
-
- $encs = array( 'EUC-JP', 'Shift_JIS', 'SJIS', 'UTF-8' );
-
- function test_ereg( $test_enc, $pat, $str, $in_enc = 'EUC-JP' ) {
- 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 ) : '' ) );
- }
- 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, '£í£ú£ø£æ£ð ¤¦¤ª¤« ¤­¤« ¤ò¤ð' );
- }
-
- foreach( $encs as $enc ) {
- do_tests( $enc );
- }
-?>
-
---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)£í£ú£ø£æ£ð ¤¦¤ª¤« ¤­¤« ¤ò¤ð £í£ú£ø£æ£ð ¤¦¤ª¤« ¤­¤« ¤ò¤ð
diff --git a/ext/mbstring/tests/mb_ereg_replace-compat-01.phpt b/ext/mbstring/tests/mb_ereg_replace-compat-01.phpt
deleted file mode 100644
index ad2c6c1c56..0000000000
--- a/ext/mbstring/tests/mb_ereg_replace-compat-01.phpt
+++ /dev/null
@@ -1,15 +0,0 @@
---TEST--
-mb_ereg_replace() compat test 1
---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
-/* (counterpart: ext/standard/tests/reg/001.phpt) */
- $a="abc123";
- echo mb_ereg_replace("123","def",$a);
-?>
---EXPECT--
-abcdef
diff --git a/ext/mbstring/tests/mb_ereg_replace-compat-02.phpt b/ext/mbstring/tests/mb_ereg_replace-compat-02.phpt
deleted file mode 100644
index b5ea12196d..0000000000
--- a/ext/mbstring/tests/mb_ereg_replace-compat-02.phpt
+++ /dev/null
@@ -1,15 +0,0 @@
---TEST--
-mb_ereg_replace() compat test 2
---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
-/* (counterpart: ext/standard/tests/reg/002.phpt) */
- $a="abc123";
- echo mb_ereg_replace("123","",$a);
-?>
---EXPECT--
-abc
diff --git a/ext/mbstring/tests/mb_ereg_replace-compat-03.phpt b/ext/mbstring/tests/mb_ereg_replace-compat-03.phpt
deleted file mode 100644
index c02a346c5e..0000000000
--- a/ext/mbstring/tests/mb_ereg_replace-compat-03.phpt
+++ /dev/null
@@ -1,15 +0,0 @@
---TEST--
-mb_ereg_replace() compat test 3
---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
-/* (counterpart: ext/standard/tests/reg/003.phpt) */
- $a="\\'test";
- echo mb_ereg_replace("\\\\'","'",$a);
-?>
---EXPECT--
-'test
diff --git a/ext/mbstring/tests/mb_ereg_replace-compat-04.phpt b/ext/mbstring/tests/mb_ereg_replace-compat-04.phpt
deleted file mode 100644
index 94ff320707..0000000000
--- a/ext/mbstring/tests/mb_ereg_replace-compat-04.phpt
+++ /dev/null
@@ -1,15 +0,0 @@
---TEST--
-mb_ereg_replace() compat test 4
---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
-/* (counterpart: ext/standard/tests/reg/006.phpt) */
- $a="This is a nice and simple string";
- echo mb_ereg_replace("^This","That",$a);
-?>
---EXPECT--
-That is a nice and simple string
diff --git a/ext/mbstring/tests/mb_ereg_replace-compat-05.phpt b/ext/mbstring/tests/mb_ereg_replace-compat-05.phpt
deleted file mode 100644
index f5dae3da14..0000000000
--- a/ext/mbstring/tests/mb_ereg_replace-compat-05.phpt
+++ /dev/null
@@ -1,16 +0,0 @@
---TEST--
-mb_ereg_replace() compat test 5
---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
-/* (counterpart: ext/standard/tests/reg/007.phpt) */
- $a="abcd";
- $b=mb_ereg_replace("abcd","",$a);
- echo "strlen(\$b)=".strlen($b);
-?>
---EXPECT--
-strlen($b)=0
diff --git a/ext/mbstring/tests/mb_ereg_replace-compat-06.phpt b/ext/mbstring/tests/mb_ereg_replace-compat-06.phpt
deleted file mode 100644
index 8c84dc1e3c..0000000000
--- a/ext/mbstring/tests/mb_ereg_replace-compat-06.phpt
+++ /dev/null
@@ -1,14 +0,0 @@
---TEST--
-mb_ereg_replace() compat test 6
---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
-/* (counterpart: ext/standard/tests/reg/008.phpt) */
- echo mb_ereg_replace("([a-z]*)([-=+|]*)([0-9]+)","\\3 \\1 \\2\n","abc+-|=123");
-?>
---EXPECT--
-123 abc +-|=
diff --git a/ext/mbstring/tests/mb_ereg_replace-compat-07.phpt b/ext/mbstring/tests/mb_ereg_replace-compat-07.phpt
deleted file mode 100644
index e390655ef4..0000000000
--- a/ext/mbstring/tests/mb_ereg_replace-compat-07.phpt
+++ /dev/null
@@ -1,15 +0,0 @@
---TEST--
-mb_ereg_replace() compat test 7
---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
-/* (counterpart: ext/standard/tests/reg/010.phpt) */
- $a="abc122222222223";
- echo mb_ereg_replace("1(2*)3","\\1def\\1",$a);
-?>
---EXPECT--
-abc2222222222def2222222222
diff --git a/ext/mbstring/tests/mb_ereg_replace-compat-08.phpt b/ext/mbstring/tests/mb_ereg_replace-compat-08.phpt
deleted file mode 100644
index 5ccc9fd1c0..0000000000
--- a/ext/mbstring/tests/mb_ereg_replace-compat-08.phpt
+++ /dev/null
@@ -1,15 +0,0 @@
---TEST--
-mb_ereg_replace() compat test 8
---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
-/* (counterpart: ext/standard/tests/reg/011.phpt) */
- $a="abc123";
- echo mb_ereg_replace("123","def\\0ghi",$a);
-?>
---EXPECT--
-abcdef123ghi
diff --git a/ext/mbstring/tests/mb_ereg_replace-compat-09.phpt b/ext/mbstring/tests/mb_ereg_replace-compat-09.phpt
deleted file mode 100644
index bef8be1f4d..0000000000
--- a/ext/mbstring/tests/mb_ereg_replace-compat-09.phpt
+++ /dev/null
@@ -1,15 +0,0 @@
---TEST--
-mb_ereg_replace() compat test 9
---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
-/* (counterpart: ext/standard/tests/reg/012.phpt) */
- $a="abc123";
- echo mb_ereg_replace("123",'def\1ghi',$a);
-?>
---EXPECT--
-abcdef\1ghi
diff --git a/ext/mbstring/tests/mb_ereg_replace-compat-10.phpt b/ext/mbstring/tests/mb_ereg_replace-compat-10.phpt
deleted file mode 100644
index ac80a4e052..0000000000
--- a/ext/mbstring/tests/mb_ereg_replace-compat-10.phpt
+++ /dev/null
@@ -1,15 +0,0 @@
---TEST--
-mb_ereg_replace() compat test 10
---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
-/* (counterpart: ext/standard/tests/reg/013.phpt) */
- $a="abc123";
- echo mb_ereg_replace("123","def\\g\\\\hi\\",$a);
-?>
---EXPECT--
-abcdef\g\\hi\
diff --git a/ext/mbstring/tests/mb_ereg_replace-compat-11.phpt b/ext/mbstring/tests/mb_ereg_replace-compat-11.phpt
deleted file mode 100644
index 7ae3edf62f..0000000000
--- a/ext/mbstring/tests/mb_ereg_replace-compat-11.phpt
+++ /dev/null
@@ -1,15 +0,0 @@
---TEST--
-mb_ereg_replace() compat test 11
---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
-/* (counterpart: ext/standard/tests/reg/014.phpt) */
- $a="a\\2bxc";
- echo mb_ereg_replace("a(.*)b(.*)c","\\1",$a);
-?>
---EXPECT--
-\2
diff --git a/ext/mbstring/tests/mb_ereg_replace-compat-12.phpt b/ext/mbstring/tests/mb_ereg_replace-compat-12.phpt
deleted file mode 100644
index 53bc51e676..0000000000
--- a/ext/mbstring/tests/mb_ereg_replace-compat-12.phpt
+++ /dev/null
@@ -1,14 +0,0 @@
---TEST--
-mb_ereg_replace() compat test 12
---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
-/* (counterpart: ext/standard/tests/reg/015.phpt) */
- echo mb_ereg_replace("^","z","abc123");
-?>
---EXPECT--
-zabc123
diff --git a/ext/mbstring/tests/mb_ereg_replace-compat-13.phpt b/ext/mbstring/tests/mb_ereg_replace-compat-13.phpt
deleted file mode 100644
index 2975ab75ba..0000000000
--- a/ext/mbstring/tests/mb_ereg_replace-compat-13.phpt
+++ /dev/null
@@ -1,14 +0,0 @@
---TEST--
-mb_ereg_replace() compat test 13
---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
-/* (counterpart: ext/standard/tests/reg/016.phpt) */
- echo mb_ereg_replace('\?',"abc","?123?");
-?>
---EXPECT--
-abc123abc
diff --git a/ext/mbstring/tests/mb_ereg_replace.phpt b/ext/mbstring/tests/mb_ereg_replace.phpt
deleted file mode 100644
index 9413da82b9..0000000000
--- a/ext/mbstring/tests/mb_ereg_replace.phpt
+++ /dev/null
@@ -1,18 +0,0 @@
---TEST--
-mb_ereg_replace()
---SKIPIF--
-<?php
-extension_loaded('mbstring') or die('skip mbstring not available');
-function_exists('mb_ereg_replace') or die("skip mb_ereg_replace() is not available in this build");
-?>
---FILE--
-<?php
- mb_regex_set_options( '' );
- print mb_ereg_replace( ' ', '-', 'a b c d e' )."\n";
- print mb_ereg_replace( '([a-z]+)','[\\1]', 'abc def ghi' );
-?>
-
---EXPECT--
-a-b-c-d-e
-[abc] [def] [ghi]
-
diff --git a/ext/mbstring/tests/mb_ereg_search_xxx.phpt b/ext/mbstring/tests/mb_ereg_search_xxx.phpt
deleted file mode 100644
index c2c0b84a85..0000000000
--- a/ext/mbstring/tests/mb_ereg_search_xxx.phpt
+++ /dev/null
@@ -1,82 +0,0 @@
---TEST--
-mb_ereg_search() stuff
---SKIPIF--
-<?php
-extension_loaded('mbstring') or die('skip mbstring not available');
-function_exists('mb_ereg_search') or die("skip\n");
-?>
---INI--
-output_handler=
---FILE--
-<?php
- mb_regex_set_options( '' );
-
- $encs = array( 'EUC-JP', 'Shift_JIS', 'SJIS', 'UTF-8' );
-
- function test_search( $test_enc, $str, $look_for, $opt, $in_enc = 'EUC-JP' ) {
- mb_regex_encoding( $test_enc );
- $str = mb_convert_encoding( $str, $test_enc, $in_enc );
- $look_for = mb_convert_encoding( $look_for, $test_enc, $in_enc );
- mb_ereg_search_init( $str, $look_for, $opt );
- while ( mb_ereg_search_pos() ) {
- $regs = mb_ereg_search_getregs();
- array_shift( $regs );
- printf( "(%s) (%d) %s\n", $test_enc, mb_ereg_search_getpos(), mb_convert_encoding( ( is_array( $regs ) ? implode( '-', $regs ): '' ), $in_enc, $test_enc ) );
- }
- }
- function do_tests( $enc, $opt ) {
- test_search( $enc, "¢Ï¡¦ ¡¦¢Ï\n", ' (¡¦?¢Ï¡¦?)[[:space:]]', $opt );
- test_search( $enc, 'abcde abdeabcf anvfabc odu abcd ', '(ab[a-z]+)', $opt );
- }
-
- foreach( $encs as $enc ) {
- do_tests( $enc, '' );
- do_tests( $enc, 'x' );
- }
-?>
-
---EXPECT--
-(EUC-JP) (10) ¡¦¢Ï
-(EUC-JP) (5) abcde
-(EUC-JP) (14) abdeabcf
-(EUC-JP) (22) abc
-(EUC-JP) (31) abcd
-(EUC-JP) (5) ¢Ï¡¦
-(EUC-JP) (10) ¡¦¢Ï
-(EUC-JP) (5) abcde
-(EUC-JP) (14) abdeabcf
-(EUC-JP) (22) abc
-(EUC-JP) (31) abcd
-(Shift_JIS) (10) ¡¦¢Ï
-(Shift_JIS) (5) abcde
-(Shift_JIS) (14) abdeabcf
-(Shift_JIS) (22) abc
-(Shift_JIS) (31) abcd
-(Shift_JIS) (5) ¢Ï¡¦
-(Shift_JIS) (10) ¡¦¢Ï
-(Shift_JIS) (5) abcde
-(Shift_JIS) (14) abdeabcf
-(Shift_JIS) (22) abc
-(Shift_JIS) (31) abcd
-(SJIS) (10) ¡¦¢Ï
-(SJIS) (5) abcde
-(SJIS) (14) abdeabcf
-(SJIS) (22) abc
-(SJIS) (31) abcd
-(SJIS) (5) ¢Ï¡¦
-(SJIS) (10) ¡¦¢Ï
-(SJIS) (5) abcde
-(SJIS) (14) abdeabcf
-(SJIS) (22) abc
-(SJIS) (31) abcd
-(UTF-8) (14) ¡¦¢Ï
-(UTF-8) (5) abcde
-(UTF-8) (14) abdeabcf
-(UTF-8) (22) abc
-(UTF-8) (31) abcd
-(UTF-8) (7) ¢Ï¡¦
-(UTF-8) (14) ¡¦¢Ï
-(UTF-8) (5) abcde
-(UTF-8) (14) abdeabcf
-(UTF-8) (22) abc
-(UTF-8) (31) abcd
diff --git a/ext/mbstring/tests/mb_http_input.phpt b/ext/mbstring/tests/mb_http_input.phpt
deleted file mode 100644
index fd67a57689..0000000000
--- a/ext/mbstring/tests/mb_http_input.phpt
+++ /dev/null
@@ -1,51 +0,0 @@
---TEST--
-mb_http_input()
---SKIPIF--
-<?php
-extension_loaded('mbstring') or die('skip mbstring not available');
-(php_sapi_name()=='cgi') or die("skip sapi is not a cgi version");
-die("skip disabled temporarily");
-?>
---POST--
-a=ÆüËܸì0123456789ÆüËܸ쥫¥¿¥«¥Ê¤Ò¤é¤¬¤Ê
---GET--
-b=ÆüËܸì0123456789ÆüËܸ쥫¥¿¥«¥Ê¤Ò¤é¤¬¤Ê
---FILE--
-<?php
-// TODO: This is not a real test.... Need to change so that it does real testing
-//$debug = true;
-ini_set('include_path','.');
-include_once('common.inc');
-
-$ini = ini_get('mbstring.http_input');
-
-// It must be url encoded....
-// echo vars
-echo $_POST['a']."\n";
-echo $_GET['b']."\n";
-
-// Get encoding
-$enc = mb_http_input('P');
-
-// check
-if (empty($ini)) {
- // Must be pass
- if ($enc === 'pass') {
- echo "OK\n";
- }
- else {
- echo "NG\n";
- }
-}
-else {
- // Some encoding
- echo "This heppens when php.ini-dist is not used\n";
-}
-
-?>
-
---EXPECT--
-ÆüËܸì0123456789ÆüËܸ쥫¥¿¥«¥Ê¤Ò¤é¤¬¤Ê
-ÆüËܸì0123456789ÆüËܸ쥫¥¿¥«¥Ê¤Ò¤é¤¬¤Ê
-OK
-
diff --git a/ext/mbstring/tests/mb_http_output.phpt b/ext/mbstring/tests/mb_http_output.phpt
deleted file mode 100644
index 0a6839f7f1..0000000000
--- a/ext/mbstring/tests/mb_http_output.phpt
+++ /dev/null
@@ -1,84 +0,0 @@
---TEST--
-mb_http_output()
---SKIPIF--
-<?php extension_loaded('mbstring') or die('skip mbstring not available'); ?>
---FILE--
-<?php
-//TODO: Add more encoding. Wrong paramter type test.
-//$debug = true;
-ini_set('include_path','.');
-include_once('common.inc');
-
-// Set HTTP output encoding to ASCII
-$r = mb_http_output('ASCII');
-($r === TRUE) ? print "OK_ASCII_SET\n" : print "NG_ASCII_SET\n";
-$enc = mb_http_output();
-print "$enc\n";
-
-// Set HTTP output encoding to SJIS
-$r = mb_http_output('SJIS');
-($r === TRUE) ? print "OK_SJIS_SET\n" : print "NG_SJIS_SET\n";
-$enc = mb_http_output();
-print "$enc\n";
-
-// Set HTTP output encoding to JIS
-$r = mb_http_output('JIS');
-($r === TRUE) ? print "OK_JIS_SET\n" : print "NG_JIS_SET\n";
-$enc = mb_http_output();
-print "$enc\n";
-
-// Set HTTP output encoding to UTF8
-$r = mb_http_output('UTF-8');
-($r === TRUE) ? print "OK_UTF-8_SET\n" : print "NG_UTF-8_SET\n";
-$enc = mb_http_output();
-print "$enc\n";
-
-// Set HTTP output encoding to EUC-JP
-$r = mb_http_output('EUC-JP');
-($r === TRUE) ? print "OK_EUC-JP_SET\n" : print "NG_EUC-JP_SET\n";
-$enc = mb_http_output();
-print "$enc\n";
-
-// Invalid parameters
-print "== INVALID PARAMETER ==\n";
-
-// Note: Bad string raise Warning. Bad Type raise Notice (Type Conversion) and Warning....
-$r = mb_http_output('BAD_NAME');
-($r === FALSE) ? print "OK_BAD_SET\n" : print "NG_BAD_SET\n";
-$enc = mb_http_output();
-print "$enc\n";
-
-$r = mb_http_output($t_ary);
-($r === FALSE) ? print "OK_BAD_ARY_SET\n" : print "NG_BAD_ARY_SET\n";
-$enc = mb_http_output();
-print "$enc\n";
-
-$r = mb_http_output($t_obj);
-($r === FALSE) ? print "OK_BAD_OBJ_SET\n" : print "NG_BAD_OBJ_SET\n";
-$enc = mb_http_output();
-print "$enc\n";
-
-?>
-
---EXPECT--
-OK_ASCII_SET
-ASCII
-OK_SJIS_SET
-SJIS
-OK_JIS_SET
-JIS
-OK_UTF-8_SET
-UTF-8
-OK_EUC-JP_SET
-EUC-JP
-== INVALID PARAMETER ==
-ERR: Warning
-OK_BAD_SET
-EUC-JP
-ERR: Warning
-OK_BAD_ARY_SET
-EUC-JP
-ERR: Warning
-OK_BAD_OBJ_SET
-EUC-JP
-
diff --git a/ext/mbstring/tests/mb_internal_encoding.phpt b/ext/mbstring/tests/mb_internal_encoding.phpt
deleted file mode 100644
index 1d62962529..0000000000
--- a/ext/mbstring/tests/mb_internal_encoding.phpt
+++ /dev/null
@@ -1,68 +0,0 @@
---TEST--
-mb_internal_encoding()
---SKIPIF--
-<?php extension_loaded('mbstring') or die('skip mbstring not available'); ?>
---FILE--
-<?php
-// TODO:
-//$debug = true;
-ini_set('include_path','.');
-include_once('common.inc');
-
-// EUC-JP
-$r = mb_internal_encoding('EUC-JP');
-($r === TRUE) ? print "OK_EUC-JP_SET\n" : print "NG_EUC-JP_SET\n";
-$enc = mb_internal_encoding();
-print "$enc\n";
-
-// UTF-8
-$r = mb_internal_encoding('UTF-8');
-($r === TRUE) ? print "OK_UTF-8_SET\n" : print "NG_UTF-8_SET\n";
-$enc = mb_internal_encoding();
-print "$enc\n";
-
-// ASCII
-$r = mb_internal_encoding('ASCII');
-($r === TRUE) ? print "OK_ASCII_SET\n" : print "NG_ASCII_SET\n";
-$enc = mb_internal_encoding();
-print "$enc\n";
-
-// Invalid Parameter
-print "== INVALID PARAMETER ==\n";
-
-// Note: Other than string type, PHP raises Warning
-$r = mb_internal_encoding('BAD');
-($r === FALSE) ? print "OK_BAD_SET\n" : print "NG_BAD_SET\n";
-$enc = mb_internal_encoding();
-print "$enc\n";
-
-$r = mb_internal_encoding($t_ary);
-($r === FALSE) ? print "OK_BAD_ARY_SET\n" : print "NG_BAD_ARY_SET\n";
-$enc = mb_internal_encoding();
-print "$enc\n";
-
-$r = mb_internal_encoding($t_obj);
-($r === FALSE) ? print "OK_BAD_OBJ_SET\n" : print "NG_BAD_OBJ_SET\n";
-$enc = mb_internal_encoding();
-print "$enc\n";
-
-?>
-
---EXPECT--
-OK_EUC-JP_SET
-EUC-JP
-OK_UTF-8_SET
-UTF-8
-OK_ASCII_SET
-ASCII
-== INVALID PARAMETER ==
-ERR: Warning
-OK_BAD_SET
-ASCII
-ERR: Warning
-OK_BAD_ARY_SET
-ASCII
-ERR: Warning
-OK_BAD_OBJ_SET
-ASCII
-
diff --git a/ext/mbstring/tests/mb_output_handler_euc_jp.phpt b/ext/mbstring/tests/mb_output_handler_euc_jp.phpt
deleted file mode 100644
index dff5c97743..0000000000
--- a/ext/mbstring/tests/mb_output_handler_euc_jp.phpt
+++ /dev/null
@@ -1,21 +0,0 @@
---TEST--
-mb_output_handler() (EUC-JP)
---SKIPIF--
-<?php extension_loaded('mbstring') or die('skip mbstring not available'); ?>
---FILE--
-<?php
-// TODO: Do real test
-
-// EUC-JP
-$euc_jp = "¥Æ¥¹¥ÈÍÑÆüËܸìʸ»úÎ󡣤³¤Î¥â¥¸¥å¡¼¥ë¤ÏPHP¤Ë¥Þ¥ë¥Á¥Ð¥¤¥È´Ø¿ô¤òÄ󶡤·¤Þ¤¹¡£";
-mb_http_output('EUC-JP') or print("mb_http_output() failed\n");
-ob_start('mb_output_handler');
-echo $euc_jp;
-$output = ob_get_clean();
-
-var_dump( $output );
-
-?>
-
---EXPECT--
-string(73) "¥Æ¥¹¥ÈÍÑÆüËܸìʸ»úÎ󡣤³¤Î¥â¥¸¥å¡¼¥ë¤ÏPHP¤Ë¥Þ¥ë¥Á¥Ð¥¤¥È´Ø¿ô¤òÄ󶡤·¤Þ¤¹¡£"
diff --git a/ext/mbstring/tests/mb_output_handler_shift_jis.phpt b/ext/mbstring/tests/mb_output_handler_shift_jis.phpt
deleted file mode 100644
index d4612d9775..0000000000
--- a/ext/mbstring/tests/mb_output_handler_shift_jis.phpt
+++ /dev/null
@@ -1,16 +0,0 @@
---TEST--
-mb_output_handler() (Shift_JIS)
---SKIPIF--
-<?php extension_loaded('mbstring') or die('skip mbstring not available'); ?>
---INI--
-output_handler=mb_output_handler
-mbstring.internal_encoding=Shift_JIS
-mbstring.http_output=EUC-JP
---FILE--
-<?php
-// Shift_JIS
-var_dump("ƒeƒXƒg—p“ú–{Œê•¶Žš—ñB‚±‚̃‚ƒWƒ…[ƒ‹‚ÍPHP‚Ƀ}ƒ‹ƒ`ƒoƒCƒgŠÖ”‚ð’ñ‹Ÿ‚µ‚Ü‚·B");
-?>
-
---EXPECT--
-string(73) "¥Æ¥¹¥ÈÍÑÆüËܸìʸ»úÎ󡣤³¤Î¥â¥¸¥å¡¼¥ë¤ÏPHP¤Ë¥Þ¥ë¥Á¥Ð¥¤¥È´Ø¿ô¤òÄ󶡤·¤Þ¤¹¡£"
diff --git a/ext/mbstring/tests/mb_parse_str.phpt b/ext/mbstring/tests/mb_parse_str.phpt
deleted file mode 100644
index 8b320b0845..0000000000
--- a/ext/mbstring/tests/mb_parse_str.phpt
+++ /dev/null
@@ -1,80 +0,0 @@
---TEST--
-mb_parse_str()
---SKIPIF--
-<?php extension_loaded('mbstring') or die('skip mbstring not available'); ?>
---INI--
-arg_separator.input=&
-register_globals=0
---FILE--
-<?php
-$queries = array(
- "foo=abc&bar=def",
- "%2bfoo=def&-bar=jkl",
- "foo[]=abc&foo[]=def&foo[]=ghi&bar[]=jkl"
-);
-function test($query) {
- $foo = '';
- $bar = '';
- mb_parse_str($query, $array);
- var_dump($array);
- var_dump($foo);
- var_dump($bar);
- mb_parse_str($query);
- var_dump($foo);
- var_dump($bar);
-}
-foreach ($queries as $query) {
- test($query);
-}
-?>
---EXPECT--
-array(2) {
- ["foo"]=>
- string(3) "abc"
- ["bar"]=>
- string(3) "def"
-}
-string(0) ""
-string(0) ""
-string(3) "abc"
-string(3) "def"
-array(2) {
- ["+foo"]=>
- string(3) "def"
- ["-bar"]=>
- string(3) "jkl"
-}
-string(0) ""
-string(0) ""
-string(0) ""
-string(0) ""
-array(2) {
- ["foo"]=>
- array(3) {
- [0]=>
- string(3) "abc"
- [1]=>
- string(3) "def"
- [2]=>
- string(3) "ghi"
- }
- ["bar"]=>
- array(1) {
- [0]=>
- string(3) "jkl"
- }
-}
-string(0) ""
-string(0) ""
-array(3) {
- [0]=>
- string(3) "abc"
- [1]=>
- string(3) "def"
- [2]=>
- string(3) "ghi"
-}
-array(1) {
- [0]=>
- string(3) "jkl"
-}
diff --git a/ext/mbstring/tests/mb_parse_str02.phpt b/ext/mbstring/tests/mb_parse_str02.phpt
deleted file mode 100644
index 51cfb63cb9..0000000000
--- a/ext/mbstring/tests/mb_parse_str02.phpt
+++ /dev/null
@@ -1,105 +0,0 @@
---TEST--
-mb_parse_str() test 2
---SKIPIF--
-<?php extension_loaded('mbstring') or die('skip mbstring not available'); ?>
---INI--
-arg_separator.input=&#
-register_globals=0
---FILE--
-<?php
-$queries = array(
- "foo=abc#bar=def&fubar=ghi",
- "%2bfoo=def&-bar=jkl#+fubar",
- " foo[]=abc&foo[]=def#foo[]=ghi#bar[]=#foo[]&fubar[]=="
-);
-function test($query) {
- $foo = '';
- $bar = '';
- $fubar = '';
- mb_parse_str($query, $array);
- var_dump($array);
- var_dump($foo);
- var_dump($bar);
- var_dump($fubar);
- mb_parse_str($query);
- var_dump($foo);
- var_dump($bar);
- var_dump($fubar);
-}
-foreach ($queries as $query) {
- test($query);
-}
-?>
---EXPECT--
-array(3) {
- ["foo"]=>
- string(3) "abc"
- ["bar"]=>
- string(3) "def"
- ["fubar"]=>
- string(3) "ghi"
-}
-string(0) ""
-string(0) ""
-string(0) ""
-string(3) "abc"
-string(3) "def"
-string(3) "ghi"
-array(3) {
- ["+foo"]=>
- string(3) "def"
- ["-bar"]=>
- string(3) "jkl"
- ["fubar"]=>
- string(0) ""
-}
-string(0) ""
-string(0) ""
-string(0) ""
-string(0) ""
-string(0) ""
-string(0) ""
-array(3) {
- ["foo"]=>
- array(4) {
- [0]=>
- string(3) "abc"
- [1]=>
- string(3) "def"
- [2]=>
- string(3) "ghi"
- [3]=>
- string(0) ""
- }
- ["bar"]=>
- array(1) {
- [0]=>
- string(0) ""
- }
- ["fubar"]=>
- array(1) {
- [0]=>
- string(1) "="
- }
-}
-string(0) ""
-string(0) ""
-string(0) ""
-array(4) {
- [0]=>
- string(3) "abc"
- [1]=>
- string(3) "def"
- [2]=>
- string(3) "ghi"
- [3]=>
- string(0) ""
-}
-array(1) {
- [0]=>
- string(0) ""
-}
-array(1) {
- [0]=>
- string(1) "="
-}
diff --git a/ext/mbstring/tests/mb_preferred_mime_name.phpt b/ext/mbstring/tests/mb_preferred_mime_name.phpt
deleted file mode 100644
index 82f88b15c3..0000000000
--- a/ext/mbstring/tests/mb_preferred_mime_name.phpt
+++ /dev/null
@@ -1,61 +0,0 @@
---TEST--
-mb_preferred_mime_name()
---SKIPIF--
-<?php extension_loaded('mbstring') or die('skip mbstring not available'); ?>
---FILE--
-<?php
-// TODO: Add more encoding names
-
-//$debug=true;
-ini_set('include_path','.');
-include_once('common.inc');
-
-
-$str = mb_preferred_mime_name('sjis-win');
-echo "$str\n";
-
-$str = mb_preferred_mime_name('SJIS');
-echo "$str\n";
-
-$str = mb_preferred_mime_name('EUC-JP');
-echo "$str\n";
-
-$str = mb_preferred_mime_name('UTF-8');
-echo "$str\n";
-
-$str = mb_preferred_mime_name('ISO-2022-JP');
-echo "$str\n";
-
-$str = mb_preferred_mime_name('JIS');
-echo "$str\n";
-
-$str = mb_preferred_mime_name('ISO-8859-1');
-echo "$str\n";
-
-$str = mb_preferred_mime_name('UCS2');
-echo "$str\n";
-
-$str = mb_preferred_mime_name('UCS4');
-echo "$str\n";
-
-echo "== INVALID PARAMETER ==\n";
-// Invalid name
-$r = mb_preferred_mime_name('BAD_NAME');
-($r === FALSE) ? print("OK_BAD_NAME\n") : print("NG_BAD_NAME\n");
-
-?>
-
---EXPECT--
-Shift_JIS
-Shift_JIS
-EUC-JP
-UTF-8
-ISO-2022-JP
-ISO-2022-JP
-ISO-8859-1
-UCS-2
-UCS-4
-== INVALID PARAMETER ==
-ERR: Warning
-OK_BAD_NAME
-
diff --git a/ext/mbstring/tests/mb_regex_set_options.phpt b/ext/mbstring/tests/mb_regex_set_options.phpt
deleted file mode 100644
index 88ee9c9250..0000000000
--- a/ext/mbstring/tests/mb_regex_set_options.phpt
+++ /dev/null
@@ -1,18 +0,0 @@
---TEST--
-mb_regex_set_options()
---SKIPIF--
-<?php
-extension_loaded('mbstring') or die("skip mbstring not available\n");
-function_exists('mb_regex_set_options') or die("skip\n");
-?>
---FILE--
-<?php
- mb_regex_set_options( 'x' );
- print mb_ereg_replace(' -', '+', '- - - - -' );
-
- mb_regex_set_options( '' );
- print mb_ereg_replace(' -', '+', '- - - - -' );
-?>
-
---EXPECT--
-+ + + + +-++++
diff --git a/ext/mbstring/tests/mb_send_mail01.phpt b/ext/mbstring/tests/mb_send_mail01.phpt
deleted file mode 100644
index bc481fbba0..0000000000
--- a/ext/mbstring/tests/mb_send_mail01.phpt
+++ /dev/null
@@ -1,38 +0,0 @@
---TEST--
-mb_send_mail() test 1 (lang=neutral)
---SKIPIF--
-<?php
-if (@mb_send_mail() === false || !mb_language("neutral")) {
- die("skip mb_send_mail() not available");
-}
-?>
---INI--
-sendmail_path=/bin/cat
---FILE--
-<?php
-$to = 'example@example.com';
-
-/* default setting */
-mb_send_mail($to, mb_language(), "test");
-
-/* neutral (UTF-8) */
-if (mb_language("neutral")) {
- mb_internal_encoding("none");
- mb_send_mail($to, "test ".mb_language(), "test");
-}
-?>
---EXPECTF--
-To: example@example.com
-Subject: %s
-Mime-Version: 1.0
-Content-Type: text/plain; charset=%s
-Content-Transfer-Encoding: %s
-
-%s
-To: example@example.com
-Subject: test neutral
-Mime-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: BASE64
-
-dGVzdA==
diff --git a/ext/mbstring/tests/mb_send_mail02.phpt b/ext/mbstring/tests/mb_send_mail02.phpt
deleted file mode 100644
index 34dee474bc..0000000000
--- a/ext/mbstring/tests/mb_send_mail02.phpt
+++ /dev/null
@@ -1,38 +0,0 @@
---TEST--
-mb_send_mail() test 2 (lang=Japanese)
---SKIPIF--
-<?php
-if (@mb_send_mail() === false || !mb_language("japanese")) {
- die("skip mb_send_mail() not available");
-}
-?>
---INI--
-sendmail_path=/bin/cat
---FILE--
-<?php
-$to = 'example@example.com';
-
-/* default setting */
-mb_send_mail($to, mb_language(), "test");
-
-/* Japanese (EUC-JP) */
-if (mb_language("japanese")) {
- mb_internal_encoding('EUC-JP');
- mb_send_mail($to, "¥Æ¥¹¥È ".mb_language(), "¥Æ¥¹¥È");
-}
-?>
---EXPECTF--
-To: example@example.com
-Subject: %s
-Mime-Version: 1.0
-Content-Type: text/plain; charset=%s
-Content-Transfer-Encoding: %s
-
-%s
-To: example@example.com
-Subject: =?ISO-2022-JP?B?GyRCJUYlOSVIGyhCIEphcGFuZXNl?=
-Mime-Version: 1.0
-Content-Type: text/plain; charset=ISO-2022-JP
-Content-Transfer-Encoding: 7bit
-
-$B%F%9%H(B
diff --git a/ext/mbstring/tests/mb_send_mail03.phpt b/ext/mbstring/tests/mb_send_mail03.phpt
deleted file mode 100644
index 3113d8e2ba..0000000000
--- a/ext/mbstring/tests/mb_send_mail03.phpt
+++ /dev/null
@@ -1,38 +0,0 @@
---TEST--
-mb_send_mail() test 3 (lang=English)
---SKIPIF--
-<?php
-if (@mb_send_mail() === false || !mb_language("english")) {
- die("skip mb_send_mail() not available");
-}
-?>
---INI--
-sendmail_path=/bin/cat
---FILE--
-<?php
-$to = 'example@example.com';
-
-/* default setting */
-mb_send_mail($to, mb_language(), "test");
-
-/* English (iso-8859-1) */
-if (mb_language("english")) {
- mb_internal_encoding("ISO-8859-1");
- mb_send_mail($to, "test ".mb_language(), "test");
-}
-?>
---EXPECTF--
-To: example@example.com
-Subject: %s
-Mime-Version: 1.0
-Content-Type: text/plain; charset=%s
-Content-Transfer-Encoding: %s
-
-%s
-To: example@example.com
-Subject: test English
-Mime-Version: 1.0
-Content-Type: text/plain; charset=%s-8859-1
-Content-Transfer-Encoding: 8bit
-
-test
diff --git a/ext/mbstring/tests/mb_send_mail04.phpt b/ext/mbstring/tests/mb_send_mail04.phpt
deleted file mode 100644
index 468a1e367b..0000000000
--- a/ext/mbstring/tests/mb_send_mail04.phpt
+++ /dev/null
@@ -1,38 +0,0 @@
---TEST--
-mb_send_mail() test 4 (lang=German)
---SKIPIF--
-<?php
-if (@mb_send_mail() === false || !mb_language("german")) {
- die("skip mb_send_mail() not available");
-}
-?>
---INI--
-sendmail_path=/bin/cat
---FILE--
-<?php
-$to = 'example@example.com';
-
-/* default setting */
-mb_send_mail($to, mb_language(), "test");
-
-/* German (iso-8859-15) */
-if (mb_language("german")) {
- mb_internal_encoding("ISO-8859-15");
- mb_send_mail($to, "Pr"."\xfc"."fung ".mb_language(), "Pr"."\xfc"."fung");
-}
-?>
---EXPECTF--
-To: example@example.com
-Subject: %s
-Mime-Version: 1.0
-Content-Type: text/plain; charset=%s
-Content-Transfer-Encoding: %s
-
-%s
-To: example@example.com
-Subject: =?ISO-8859-15?Q?Pr=FCfung=20German?=
-Mime-Version: 1.0
-Content-Type: text/plain; charset=%s-8859-15
-Content-Transfer-Encoding: 8bit
-
-Prüfung
diff --git a/ext/mbstring/tests/mb_send_mail05.phpt b/ext/mbstring/tests/mb_send_mail05.phpt
deleted file mode 100644
index 7d1dc981d2..0000000000
--- a/ext/mbstring/tests/mb_send_mail05.phpt
+++ /dev/null
@@ -1,42 +0,0 @@
---TEST--
-mb_send_mail() test 5 (lang=Simplified Chinese)
---SKIPIF--
-<?php
-if (@mb_send_mail() === false || !mb_language("Simplified Chinese")) {
- die("skip mb_send_mail() not available");
-}
-if (!@mb_internal_encoding('GB2312')) {
- die("skip GB2312 encoding is not avaliable on this platform");
-}
-?>
---INI--
-sendmail_path=/bin/cat
---FILE--
-<?php
-$to = 'example@example.com';
-
-/* default setting */
-mb_send_mail($to, mb_language(), "test");
-
-/* Simplified Chinese (HK-GB-2312) */
-if (mb_language("simplified chinese")) {
- mb_internal_encoding('GB2312');
- mb_send_mail($to, "²âÑé ".mb_language(), "²âÑé");
-}
-?>
---EXPECTF--
-To: example@example.com
-Subject: %s
-Mime-Version: 1.0
-Content-Type: text/plain; charset=%s
-Content-Transfer-Encoding: %s
-
-%s
-To: example@example.com
-Subject: =?HZ-GB-2312?B?fnsyYlFpfn0gU2ltcGxpZmllZCBD?=
- =?HZ-GB-2312?B?aGluZXNl?=
-Mime-Version: 1.0
-Content-Type: text/plain; charset=HZ-GB-2312
-Content-Transfer-Encoding: 7bit
-
-~{2bQi~}
diff --git a/ext/mbstring/tests/mb_send_mail06.phpt b/ext/mbstring/tests/mb_send_mail06.phpt
deleted file mode 100644
index 92087f9649..0000000000
--- a/ext/mbstring/tests/mb_send_mail06.phpt
+++ /dev/null
@@ -1,41 +0,0 @@
---TEST--
-mb_send_mail() test 6 (lang=Traditional Chinese)
---SKIPIF--
-<?php
-if (@mb_send_mail() === false || !mb_language("Traditional Chinese")) {
- die("skip mb_send_mail() not available");
-}
-if (!@mb_internal_encoding('BIG5')) {
- die("skip BIG5 encoding is not avaliable on this platform");
-}
-?>
---INI--
-sendmail_path=/bin/cat
---FILE--
-<?php
-$to = 'example@example.com';
-
-/* default setting */
-mb_send_mail($to, mb_language(), "test");
-
-/* Traditional Chinese () */
-if (mb_language("traditional chinese")) {
- mb_internal_encoding('BIG5');
- mb_send_mail($to, "´úÅç ".mb_language(), "´úÅç");
-}
-?>
---EXPECTF--
-To: example@example.com
-Subject: %s
-Mime-Version: 1.0
-Content-Type: text/plain; charset=%s
-Content-Transfer-Encoding: %s
-
-%s
-To: example@example.com
-Subject: =?BIG5?B?tPrF5yBUcmFkaXRpb25hbCBDaGluZXNl?=
-Mime-Version: 1.0
-Content-Type: text/plain; charset=BIG5
-Content-Transfer-Encoding: 8bit
-
-´úÅç
diff --git a/ext/mbstring/tests/mb_send_mail07.phpt b/ext/mbstring/tests/mb_send_mail07.phpt
deleted file mode 100644
index ae429f3ced..0000000000
--- a/ext/mbstring/tests/mb_send_mail07.phpt
+++ /dev/null
@@ -1,41 +0,0 @@
---TEST--
-mb_send_mail() test 7 (lang=Korean)
---SKIPIF--
-<?php
-if (@mb_send_mail() === false || !mb_language("Korean")) {
- die("skip mb_send_mail() not available");
-}
-if (!@mb_internal_encoding('ISO-2022-KR')) {
- die("skip ISO-2022-KR encoding is not avaliable on this platform");
-}
-?>
---INI--
-sendmail_path=/bin/cat
---FILE--
-<?php
-$to = 'example@example.com';
-
-/* default setting */
-mb_send_mail($to, mb_language(), "test");
-
-/* Korean */
-if (mb_language("korean")) {
- mb_internal_encoding('EUC-KR');
- mb_send_mail($to, "Å×½ºÆ® ".mb_language(), "Å×½ºÆ®");
-}
-?>
---EXPECTF--
-To: example@example.com
-Subject: %s
-Mime-Version: 1.0
-Content-Type: text/plain; charset=%s
-Content-Transfer-Encoding: %s
-
-%s
-To: example@example.com
-Subject: =?ISO-2022-KR?B?GyQpQw5FVz06Ri4PIEtvcmVhbg8=?=
-Mime-Version: 1.0
-Content-Type: text/plain; charset=ISO-2022-KR
-Content-Transfer-Encoding: 7bit
-
-$)CEW=:F.
diff --git a/ext/mbstring/tests/mb_split-compat-01.phpt b/ext/mbstring/tests/mb_split-compat-01.phpt
deleted file mode 100644
index 8dbc82c130..0000000000
--- a/ext/mbstring/tests/mb_split-compat-01.phpt
+++ /dev/null
@@ -1,23 +0,0 @@
---TEST--
-mb_split() compat test 1
---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
-/* (counterpart: ext/standard/tests/reg/009.phpt) */
- $a=mb_split("[[:space:]]","this is a
-test");
- echo count($a) . "\n";
- for ($i = 0; $i < count($a); $i++) {
- echo $a[$i] . "\n";
- }
-?>
---EXPECT--
-4
-this
-is
-a
-test
diff --git a/ext/mbstring/tests/mb_split.phpt b/ext/mbstring/tests/mb_split.phpt
deleted file mode 100644
index abe12763eb..0000000000
--- a/ext/mbstring/tests/mb_split.phpt
+++ /dev/null
@@ -1,48 +0,0 @@
---TEST--
-mb_split()
---SKIPIF--
-<?php
-extension_loaded('mbstring') or die('skip mbstring not available');
-function_exists('mb_split') or die("skip mb_split() is not available in this build");
-?>
---INI--
-mbstring.func_overload=0
---FILE--
-<?php
- mb_regex_set_options( '' );
- mb_regex_encoding( 'EUC-JP' );
-
- function verify_split( $spliton, $str, $count = 0 )
- {
- $result1 = mb_split( $spliton, $str, $count );
- $result2 = split( $spliton, $str, $count );
- if ( $result1 == $result2 ) {
- print "ok\n";
- } else {
- print count($result1).'-'.count($result2)."\n";
- }
- }
-
- var_dump( mb_split( " ", "a b c d e f g" )
- == mb_split( "[[:space:]]", "a\nb\tc\nd e f g" ) );
-
- for ( $i = 0; $i < 5; ++$i ) {
- verify_split( " ", "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 );
- }
-?>
-
---EXPECT--
-bool(true)
-ok
-ok
-ok
-ok
-ok
-ok
-2-2
-3-3
-4-4
diff --git a/ext/mbstring/tests/mb_strcut.phpt b/ext/mbstring/tests/mb_strcut.phpt
deleted file mode 100644
index 8ea074a3cd..0000000000
--- a/ext/mbstring/tests/mb_strcut.phpt
+++ /dev/null
@@ -1,34 +0,0 @@
---TEST--
-mb_strcut()
---SKIPIF--
-<?php extension_loaded('mbstring') or die('skip mbstring not available'); ?>
---INI--
-output_handler=
---FILE--
-<?php
-// TODO: Add more encodings
-ini_set('include_path','.');
-include_once('common.inc');
-
-// EUC-JP
-$euc_jp = '0123¤³¤Îʸ»úÎó¤ÏÆüËܸì¤Ç¤¹¡£EUC-JP¤ò»È¤Ã¤Æ¤¤¤Þ¤¹¡£ÆüËܸì¤ÏÌÌÅݽ­¤¤¡£';
-
-print mb_strcut($euc_jp, 6, 5,'EUC-JP') . "\n";
-print mb_strcut($euc_jp, 0, 100,'EUC-JP') . "\n";
-
-$str = mb_strcut($euc_jp, 100, 10,'EUC-JP');
-($str === "") ? print "OK\n" : print "NG: $str\n";
-
-$str = mb_strcut($euc_jp, -100, 10,'EUC-JP');
-($str !== "") ? print "OK: $str\n" : print "NG:\n";
-
-
-?>
-
---EXPECT--
-¤Îʸ
-0123¤³¤Îʸ»úÎó¤ÏÆüËܸì¤Ç¤¹¡£EUC-JP¤ò»È¤Ã¤Æ¤¤¤Þ¤¹¡£ÆüËܸì¤ÏÌÌÅݽ­¤¤¡£
-OK
-OK: 0123¤³¤Îʸ
-
-
diff --git a/ext/mbstring/tests/mb_strimwidth.phpt b/ext/mbstring/tests/mb_strimwidth.phpt
deleted file mode 100644
index efa98856f1..0000000000
--- a/ext/mbstring/tests/mb_strimwidth.phpt
+++ /dev/null
@@ -1,43 +0,0 @@
---TEST--
-mb_strimwidth()
---SKIPIF--
-<?php extension_loaded('mbstring') or die('skip mbstring not available'); ?>
---INI--
-output_handler=
---FILE--
-<?php
-// TODO: Add more encoding
-//$debug = true;
-ini_set('include_path','.');
-include_once('common.inc');
-
-// EUC-JP
-$euc_jp = '0123¤³¤Îʸ»úÎó¤ÏÆüËܸì¤Ç¤¹¡£EUC-JP¤ò»È¤Ã¤Æ¤¤¤Þ¤¹¡£ÆüËܸì¤ÏÌÌÅݽ­¤¤¡£';
-
-print "1: ". mb_strimwidth($euc_jp, 0, 15,'...','EUC-JP') . "\n";
-print "2: ". mb_strimwidth($euc_jp, 0, 100,'...','EUC-JP') . "\n";
-print "3: ". mb_strimwidth($euc_jp, 15, 100,'...','EUC-JP') . "\n";
-// Note: Did not start form -22 offset. Staring from 0.
-$str = mb_strimwidth($euc_jp,-22, 100,'...','EUC-JP');
-($str === FALSE) ? print "4 OK\n" : print "NG: $str\n";
-
-$str = mb_strimwidth($euc_jp, 100, -10,'...','EUC-JP');
-($str === FALSE) ? print "5 OK\n" : print "NG: $str\n";
-
-$str = mb_strimwidth($euc_jp, -100, 10,'...','EUC-JP');
-($str === FALSE) ? print "6 OK\n" : print "NG: $str\n";
-
-?>
-
---EXPECT--
-1: 0123¤³¤Îʸ»ú...
-2: 0123¤³¤Îʸ»úÎó¤ÏÆüËܸì¤Ç¤¹¡£EUC-JP¤ò»È¤Ã¤Æ¤¤¤Þ¤¹¡£ÆüËܸì¤ÏÌÌÅݽ­¤¤¡£
-3: ¡£EUC-JP¤ò»È¤Ã¤Æ¤¤¤Þ¤¹¡£ÆüËܸì¤ÏÌÌÅݽ­¤¤¡£
-ERR: Warning
-4 OK
-ERR: Warning
-5 OK
-ERR: Warning
-6 OK
-
-
diff --git a/ext/mbstring/tests/mb_strlen.phpt b/ext/mbstring/tests/mb_strlen.phpt
deleted file mode 100644
index 6a71b41580..0000000000
--- a/ext/mbstring/tests/mb_strlen.phpt
+++ /dev/null
@@ -1,106 +0,0 @@
---TEST--
-mb_strlen()
---SKIPIF--
-<?php extension_loaded('mbstring') or die('skip mbstring not available'); ?>
---INI--
-mbstring.func_overload=0
---FILE--
-<?php
-// TODO: Add more encodings
-
-//$debug=true;
-ini_set('include_path','.');
-include_once('common.inc');
-
-// restore detect_order to 'auto'
-mb_detect_order('auto');
-
-// Test string
-$euc_jp = '0123¤³¤Îʸ»úÎó¤ÏÆüËܸì¤Ç¤¹¡£EUC-JP¤ò»È¤Ã¤Æ¤¤¤Þ¤¹¡£0123ÆüËܸì¤ÏÌÌÅݽ­¤¤¡£';
-$ascii = 'abcdefghijklmnopqrstuvwxyz;]=#0123456789';
-
-// ASCII
-echo "== ASCII ==\n";
-print strlen($ascii,'ASCII') . "\n";
-print strlen($ascii) . "\n";
-
-// EUC-JP
-echo "== EUC-JP ==\n";
-print strlen($euc_jp,'EUC-JP') . "\n";
-mb_internal_encoding('EUC-JP') or print("mb_internal_encoding() failed\n");
-print strlen($euc_jp) . "\n";
-
-// SJIS
-echo "== SJIS ==\n";
-$sjis = mb_convert_encoding($euc_jp, 'SJIS');
-print strlen($sjis,'SJIS') . "\n";
-mb_internal_encoding('SJIS') or print("mb_internal_encoding() failed\n");
-print strlen($sjis) . "\n";
-
-// JIS
-// Note: either convert_encoding or strlen has problem
-echo "== JIS ==\n";
-$jis = mb_convert_encoding($euc_jp, 'JIS');
-print strlen($jis,'JIS') . "\n";
-mb_internal_encoding('JIS') or print("mb_internal_encoding() failed\n");
-print strlen($jis) . "\n";
-
-// UTF-8
-// Note: either convert_encoding or strlen has problem
-echo "== UTF-8 ==\n";
-$utf8 = mb_convert_encoding($euc_jp, 'UTF-8');
-print strlen($utf8,'UTF-8') . "\n";
-mb_internal_encoding('UTF-8') or print("mb_internal_encoding() failed\n");
-print strlen($utf8) . "\n";
-
-
-// Wrong Parameters
-echo "== WRONG PARAMETERS ==\n";
-// Array
-// Note: PHP Notice, but returns some value
-$r = strlen($t_ary);
-echo $r."\n";
-// Object
-// Note: PHP Notice, but returns some value
-$r = strlen($t_obj);
-echo $r."\n";
-// Wrong encoding
-mb_internal_encoding('EUC-JP');
-$r = strlen($euc_jp, 'BAD_NAME');
-echo $r."\n";
-
-
-
-
-?>
-
---EXPECT--
-== ASCII ==
-ERR: Warning
-
-40
-== EUC-JP ==
-ERR: Warning
-
-72
-== SJIS ==
-ERR: Warning
-
-72
-== JIS ==
-ERR: Warning
-
-121
-== UTF-8 ==
-ERR: Warning
-
-174
-== WRONG PARAMETERS ==
-ERR: Notice
-5
-ERR: Notice
-6
-ERR: Warning
-
-
-
diff --git a/ext/mbstring/tests/mb_strpos.phpt b/ext/mbstring/tests/mb_strpos.phpt
deleted file mode 100644
index ca49599fa7..0000000000
--- a/ext/mbstring/tests/mb_strpos.phpt
+++ /dev/null
@@ -1,175 +0,0 @@
---TEST--
-mb_strpos()
---SKIPIF--
-<?php extension_loaded('mbstring') or die('skip mbstring not available'); ?>
---FILE--
-<?php
-// TODO: Add more encodings
-
-//$debug=true;
-ini_set('include_path','.');
-include_once('common.inc');
-
-
-// Test string
-$euc_jp = '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, 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, 3, 15, 'EUC-JP') . "\n";
-print mb_strpos($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_strpos($euc_jp,'ÆüËܸì', -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, 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 === FALSE) ? print "OK_NEGATIVE_OFFSET\n" : print "NG_NEGATIVE_OFFSET\n";
-$r = mb_strpos($euc_jp, '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";
-$r = mb_strpos($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_strpos($euc_jp,'ÆüËܸì', 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 === 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";
-$r = mb_strpos($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_strpos($euc_jp, '´Ú¹ñ¸ì', 0, 'EUC-JP');
-($r === FALSE) ? print "OK_STR\n" : print "NG_STR\n";
-$r = mb_strpos($euc_jp, "\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_strpos($euc_jp,'ÆüËܸì', 0) . "\n";
-print mb_strpos($euc_jp, '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 === FALSE) ? print "OK_STR\n" : print "NG_STR\n";
-$r = mb_strpos($euc_jp,"\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, 3) . "\n";
-print mb_strpos($euc_jp, 0) . "\n";
-
-$r = mb_strpos($euc_jp,'´Ú¹ñ¸ì');
-($r === FALSE) ? print "OK_STR\n" : print "NG_STR\n";
-$r = mb_strpos($euc_jp,"\n");
-($r === FALSE) ? print "OK_NEWLINE\n" : print "NG_NEWLINE\n";
-
-
-// Invalid Parameters
-echo "== INVALID PARAMETER TEST ==\n";
-
-$r = mb_strpos($euc_jp,'','EUC-JP');
-($r === FALSE) ? print("OK_NULL\n") : print("NG_NULL\n");
-$r = mb_strpos($euc_jp, $t_ary, 'EUC-JP');
-($r === FALSE) ? print("OK_ARRAY\n") : print("NG_ARRAY\n");
-$r = mb_strpos($euc_jp, $t_obj, 'EUC-JP');
-($r === FALSE) ? print("OK_OBJECT\n") : print("NG_OBJECT\n");
-$r = mb_strpos($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_strwidth.phpt b/ext/mbstring/tests/mb_strwidth.phpt
deleted file mode 100644
index 33ec851c3d..0000000000
--- a/ext/mbstring/tests/mb_strwidth.phpt
+++ /dev/null
@@ -1,32 +0,0 @@
---TEST--
-mb_strwidth()
---SKIPIF--
-<?php extension_loaded('mbstring') or die('skip mbstring not available'); ?>
---FILE--
-<?php
-// TODO: Add more encoding, strings.....
-//$debug = true;
-ini_set('include_path','.');
-include_once('common.inc');
-
-// EUC-JP
-$euc_jp = '0123¤³¤Îʸ»úÎó¤ÏÆüËܸì¤Ç¤¹¡£EUC-JP¤ò»È¤Ã¤Æ¤¤¤Þ¤¹¡£ÆüËܸì¤ÏÌÌÅݽ­¤¤¡£';
-
-print "1: ". mb_strwidth($euc_jp, 'EUC-JP') . "\n";
-/*
-
-print "2: ". mb_strwidth($euc_jp, 'EUC-JP') . "\n";
-print "3: ". mb_strwidth($euc_jp, 'EUC-JP') . "\n";
-// Note: Did not start form -22 offset. Staring from 0.
-print "4: ". mb_strwidth($euc_jp, 'EUC-JP') . "\n";
-
-$str = mb_strwidth($euc_jp, 100, -10,'...','EUC-JP');
-($str === "") ? print "5 OK\n" : print "NG: $str\n";
-
-$str = mb_strwidth($euc_jp, -100, 10,'...','EUC-JP');
-($str !== "") ? print "6 OK: $str\n" : print "NG: $str\n";
-*/
-?>
-
---EXPECT--
-1: 68
diff --git a/ext/mbstring/tests/mb_substitute_character.phpt b/ext/mbstring/tests/mb_substitute_character.phpt
deleted file mode 100644
index 9f2131080e..0000000000
--- a/ext/mbstring/tests/mb_substitute_character.phpt
+++ /dev/null
@@ -1,49 +0,0 @@
---TEST--
-mb_substitute_character()
---SKIPIF--
-<?php extension_loaded('mbstring') or die('skip mbstring not available'); ?>
---FILE--
-<?php
-//$debug = true;
-ini_set('include_path','.');
-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";
-
-
-// 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";
-
-
-// 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");
-
-?>
-
---EXPECT--
-OK_UTF
-12307
-OK_LONG
-long
-OK_NONE
-none
-== INVALID PARAMETER ==
-ERR: Warning
-OK_BAD_NAME
-
diff --git a/ext/mbstring/tests/mb_substr.phpt b/ext/mbstring/tests/mb_substr.phpt
deleted file mode 100644
index 893cb64819..0000000000
--- a/ext/mbstring/tests/mb_substr.phpt
+++ /dev/null
@@ -1,34 +0,0 @@
---TEST--
-mb_substr()
---SKIPIF--
-<?php extension_loaded('mbstring') or die('skip mbstring not available'); ?>
---INI--
-output_handler=
---FILE--
-<?php
-// TODO: Add more encodings
-ini_set('include_path','.');
-include_once('common.inc');
-
-// EUC-JP
-$euc_jp = '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";
-
-$str = mb_substr($euc_jp, 100, 10,'EUC-JP');
-// Note: returns last character
-($str === "") ? print "3 OK\n" : print "NG: $str\n";
-
-$str = mb_substr($euc_jp, -100, 10,'EUC-JP');
-($str !== "") ? print "4 OK: $str\n" : print "NG: $str\n";
-
-?>
-
---EXPECT--
-1: ÆüËܸì¤Ç¤¹¡£EUC-
-2: 0123¤³¤Îʸ»úÎó¤ÏÆüËܸì¤Ç¤¹¡£EUC-JP¤ò»È¤Ã¤Æ¤¤¤Þ¤¹¡£ÆüËܸì¤ÏÌÌÅݽ­¤¤¡£
-3 OK
-4 OK: 0123¤³¤Îʸ»úÎó¤Ï
-
-
diff --git a/ext/mbstring/tests/mb_substr_count.phpt b/ext/mbstring/tests/mb_substr_count.phpt
deleted file mode 100644
index 5be5109375..0000000000
--- a/ext/mbstring/tests/mb_substr_count.phpt
+++ /dev/null
@@ -1,44 +0,0 @@
---TEST--
-mb_substr_count()
---SKIPIF--
-<?php extension_loaded('mbstring') or die('skip mbstring not available'); ?>
---INI--
-output_handler=
---FILE--
-<?php
- mb_internal_encoding("EUC-JP");
- var_dump(@mb_substr_count("", ""));
- var_dump(@mb_substr_count("¤¢", ""));
- var_dump(@mb_substr_count("", "¤¢"));
- var_dump(@mb_substr_count("", "¤¢"));
- var_dump(@mb_substr_count("", chr(0)));
-
- $a = str_repeat("abcacba", 100);
- var_dump(@mb_substr_count($a, "bca"));
-
- $a = str_repeat("¤¢¤¤¤¦¤¢¤¦¤¤¤¢", 100);
- $b = "¤¤¤¦¤¢";
- var_dump(@mb_substr_count($a, $b));
-
- $to_enc = "UTF-8";
- var_dump(@mb_substr_count(mb_convert_encoding($a, $to_enc),
- mb_convert_encoding($b, $to_enc), $to_enc));
-
- $to_enc = "Shift_JIS";
- var_dump(@mb_substr_count(mb_convert_encoding($a, $to_enc),
- mb_convert_encoding($b, $to_enc), $to_enc));
-
- $a = str_repeat("abcacbabca", 100);
- var_dump(@mb_substr_count($a, "bca"));
-?>
---EXPECT--
-bool(false)
-bool(false)
-int(0)
-int(0)
-int(0)
-int(100)
-int(100)
-int(100)
-int(100)
-int(200)
diff --git a/ext/mbstring/tests/overload01.phpt b/ext/mbstring/tests/overload01.phpt
deleted file mode 100644
index b0990e8161..0000000000
--- a/ext/mbstring/tests/overload01.phpt
+++ /dev/null
@@ -1,25 +0,0 @@
---TEST--
-Function overloading test 1
---SKIPIF--
-<?php
- extension_loaded('mbstring') or die('skip mbstring not available');
- if (!function_exists("mail")) {
- die('skip mail() function is not available.');
- }
-?>
---INI--
-output_handler=
-mbstring.func_overload=7
-mbstring.internal_encoding=EUC-JP
---FILE--
-<?php
-echo mb_internal_encoding()."\n";
-
-$ngchars = array('ǽ','ɽ','»½','¥½');
-$str = '¸µÏ½ÍÜ»½Ðò¼Òº¾µ½É½¸½Ç½ÎÏɽ¼¨±½ÌÈÄä˽ÎÏŽÉÕ¹½Ê¸·½»ÒͽÃÎñ½Æ¬¥½¥Õ¥¡¡¼';
-var_dump(strlen($str));
-var_dump(mb_strlen($str));
---EXPECT--
-EUC-JP
-int(33)
-int(33)
diff --git a/ext/mbstring/tests/overload02.phpt b/ext/mbstring/tests/overload02.phpt
deleted file mode 100644
index 9b5cecdc40..0000000000
--- a/ext/mbstring/tests/overload02.phpt
+++ /dev/null
@@ -1,36 +0,0 @@
---TEST--
-Function overloading test 2
---SKIPIF--
-<?php
- extension_loaded('mbstring') or die('skip mbstring not available');
- if (!function_exists("mail")) {
- die('skip mail() function is not available.');
- }
- if (!function_exists("mb_ereg_replace")) {
- die('skip mb_ereg_replace() function is not available.');
- }
-?>
---INI--
-output_handler=
-mbstring.func_overload=7
-mbstring.internal_encoding=EUC-JP
---FILE--
-<?php
-echo mb_internal_encoding()."\n";
-
-$ngchars = array('ǽ','ɽ','»½','¥½');
-$str = '¸µÏ½ÍÜ»½Ðò¼Òº¾µ½É½¸½Ç½ÎÏɽ¼¨±½ÌÈÄä˽ÎÏŽÉÕ¹½Ê¸·½»ÒͽÃÎñ½Æ¬¥½¥Õ¥¡¡¼';
-$converted_str = mb_convert_encoding($str, 'Shift_JIS');
-mb_regex_encoding('Shift_JIS');
-foreach($ngchars as $c) {
- $c = mb_convert_encoding($c, 'Shift_JIS');
- $replaced = mb_convert_encoding(ereg_replace($c, '!!', $converted_str), mb_internal_encoding(), 'Shift_JIS');
- var_dump(strpos($replaced, '!!'));
-}
-?>
---EXPECT--
-EUC-JP
-int(10)
-int(8)
-int(3)
-int(29)
diff --git a/ext/mbstring/tests/php_gr_jp_10830.phpt b/ext/mbstring/tests/php_gr_jp_10830.phpt
deleted file mode 100644
index 85eefd756c..0000000000
--- a/ext/mbstring/tests/php_gr_jp_10830.phpt
+++ /dev/null
@@ -1,18 +0,0 @@
---TEST--
-php-users@php.gr.jp #10830
---SKIPIF--
-<?php
-extension_loaded('mbstring') or die('skip mbstring not available');
-function_exists('mb_ereg') or die("skip mb_ereg() is not available in this build");
-?>
---FILE--
-<?php
-$a="aaa\n<>";
-
-var_dump( mb_ereg("^[^><]+$",$a) );
-var_dump( ereg("^[^><]+$",$a) );
-?>
-
---EXPECT--
-bool(false)
-bool(false)
diff --git a/ext/mbstring/tests/php_gr_jp_16242.phpt b/ext/mbstring/tests/php_gr_jp_16242.phpt
deleted file mode 100644
index 774b4fb1e6..0000000000
--- a/ext/mbstring/tests/php_gr_jp_16242.phpt
+++ /dev/null
@@ -1,33 +0,0 @@
---TEST--
-php-users@php.gr.jp #16242
---SKIPIF--
-<?php
-extension_loaded('mbstring') or die('skip mbstring not available');
-?>
---FILE--
-<?php
-$ini = <<< HERE
-mbstring.language=Japanese
-mbstring.internal_encoding=UTF-8
-
-HERE;
-
-$tmpfile = tempnam(dirname(__FILE__), "t");
-$fp = fopen($tmpfile, 'w');
-fwrite($fp, $ini);
-fclose($fp);
-
-$cmd = 'echo "<?php ';
-$cmd .= "var_dump(ini_get('mbstring.language'));";
-$cmd .= "var_dump(ini_get('mbstring.internal_encoding'));";
-$cmd .= 'var_dump(mb_internal_encoding());';
-$cmd .= ' ?>" |'.getenv("TEST_PHP_EXECUTABLE").' -c '.$tmpfile;
-
-system($cmd);
-
-unlink($tmpfile);
-?>
---EXPECT--
-string(8) "Japanese"
-string(5) "UTF-8"
-string(5) "UTF-8"
diff --git a/ext/mbstring/tests/php_gr_jp_dev_884-1.phpt b/ext/mbstring/tests/php_gr_jp_dev_884-1.phpt
deleted file mode 100644
index a0ab0c847d..0000000000
--- a/ext/mbstring/tests/php_gr_jp_dev_884-1.phpt
+++ /dev/null
@@ -1,18 +0,0 @@
---TEST--
-php-dev@php.gr.jp #884 (1)
---SKIPIF--
-<?php
-extension_loaded('mbstring') or die('skip mbstring not available');
-function_exists('mb_ereg_replace') or die("skip mb_ereg_replace() is not available in this build");
-?>
---FILE--
-<?php
-set_time_limit(2);
-var_dump(ereg_replace(".*", "b", "a"));
-var_dump(preg_replace("/.*/", "b", "a"));
-var_dump(mb_ereg_replace(".*", "b", "a"));
-?>
---EXPECT--
-string(2) "bb"
-string(2) "bb"
-string(2) "bb"
diff --git a/ext/mbstring/tests/php_gr_jp_dev_884-2.phpt b/ext/mbstring/tests/php_gr_jp_dev_884-2.phpt
deleted file mode 100644
index d81f92f416..0000000000
--- a/ext/mbstring/tests/php_gr_jp_dev_884-2.phpt
+++ /dev/null
@@ -1,19 +0,0 @@
---TEST--
-php-dev@php.gr.jp #884 (2)
---SKIPIF--
-<?php
-extension_loaded('mbstring') or die('skip mbstring not available');
-function_exists('mb_ereg_replace') or die("skip mb_ereg_replace() is not available in this build");
-?>
---FILE--
-<?php
-var_dump(mb_ereg_replace("C?$", "Z", "ABC"));
-var_dump(ereg_replace("C?$", "Z", "ABC"));
-var_dump(mb_ereg_replace("C*$", "Z", "ABC"));
-var_dump(ereg_replace("C*$", "Z", "ABC"));
-?>
---EXPECT--
-string(4) "ABZZ"
-string(4) "ABZZ"
-string(4) "ABZZ"
-string(4) "ABZZ"
diff --git a/ext/mbstring/tests/simpletest.phpt b/ext/mbstring/tests/simpletest.phpt
deleted file mode 100644
index 80b2f72596..0000000000
--- a/ext/mbstring/tests/simpletest.phpt
+++ /dev/null
@@ -1,34 +0,0 @@
---TEST--
-Simple multi-byte print test (EUC-JP)
---SKIPIF--
-<?php extension_loaded('mbstring') or die('skip mbstring not available'); ?>
---INI--
-output_handler=
---FILE--
-<?php
-/*
- * Test basic PHP functions to check if it works with multi-byte chars
- */
-
-// EUC-JP strings
-$s1 = "¥Þ¥ë¥Á¥Ð¥¤¥È´Ø¿ô¤¬»È¤¨¤Þ¤¹¡£";
-$s2 = "¤³¤Îʸ»ú¤¬Ï¢·ë¤µ¤ì¤Æ¤¤¤ë¤Ï¤º¡£";
-
-// print directly
-echo "echo: ".$s1.$s2."\n";
-print("print: ".$s1.$s2."\n");
-printf("printf: %s%s\n",$s1, $s2);
-echo sprintf("sprintf: %s%s\n",$s1, $s2);
-
-// Assign to var
-$s3 = $s1.$s2."\n";
-echo "echo: ".$s3;
-
-?>
---EXPECT--
-echo: ¥Þ¥ë¥Á¥Ð¥¤¥È´Ø¿ô¤¬»È¤¨¤Þ¤¹¡£¤³¤Îʸ»ú¤¬Ï¢·ë¤µ¤ì¤Æ¤¤¤ë¤Ï¤º¡£
-print: ¥Þ¥ë¥Á¥Ð¥¤¥È´Ø¿ô¤¬»È¤¨¤Þ¤¹¡£¤³¤Îʸ»ú¤¬Ï¢·ë¤µ¤ì¤Æ¤¤¤ë¤Ï¤º¡£
-printf: ¥Þ¥ë¥Á¥Ð¥¤¥È´Ø¿ô¤¬»È¤¨¤Þ¤¹¡£¤³¤Îʸ»ú¤¬Ï¢·ë¤µ¤ì¤Æ¤¤¤ë¤Ï¤º¡£
-sprintf: ¥Þ¥ë¥Á¥Ð¥¤¥È´Ø¿ô¤¬»È¤¨¤Þ¤¹¡£¤³¤Îʸ»ú¤¬Ï¢·ë¤µ¤ì¤Æ¤¤¤ë¤Ï¤º¡£
-echo: ¥Þ¥ë¥Á¥Ð¥¤¥È´Ø¿ô¤¬»È¤¨¤Þ¤¹¡£¤³¤Îʸ»ú¤¬Ï¢·ë¤µ¤ì¤Æ¤¤¤ë¤Ï¤º¡£
-
diff --git a/ext/mbstring/tests/skipif.inc b/ext/mbstring/tests/skipif.inc
deleted file mode 100644
index 7eec8aab5a..0000000000
--- a/ext/mbstring/tests/skipif.inc
+++ /dev/null
@@ -1,14 +0,0 @@
-<?php
-// This script prints "skip" if condition does not meet.
-
-/*
-if (!extension_loaded("mbstring") && ini_get("enable_dl")) {
- $dlext = (substr(PHP_OS, 0, 3) == "WIN") ? ".dll" : ".so";
- @dl("mbstring$dlext");
-}
-*/
-
-if (!extension_loaded("mbstring")) {
- die("skip\n");
-}
-?>
diff --git a/ext/mbstring/tests/zend-multibyte.phpt b/ext/mbstring/tests/zend-multibyte.phpt
deleted file mode 100644
index 9268fdd2f6..0000000000
--- a/ext/mbstring/tests/zend-multibyte.phpt
+++ /dev/null
@@ -1,23 +0,0 @@
---TEST--
-zend multibyte
---SKIPIF--
-<?php
-ini_set("mbstring.script_encoding","SJIS");
-if (ini_set("mbstring.script_encoding","SJIS") != "SJIS") {
- die("skip zend-multibyte is not available");
-}
-?>
---INI--
-mbstring.script_encoding=Shift_JIS
-mbstring.internal_encoding=Shift_JIS
---FILE--
-<?php
- function —\Ž\”\($ˆø”)
- {
- echo $ˆø”;
- }
-
- —\Ž\”\("ƒhƒŒƒ~ƒtƒ@ƒ\");
-?>
---EXPECT--
-ƒhƒŒƒ~ƒtƒ@ƒ\
diff --git a/ext/mbstring/unicode_data.h b/ext/mbstring/unicode_data.h
deleted file mode 100644
index 3cdd0735a8..0000000000
--- a/ext/mbstring/unicode_data.h
+++ /dev/null
@@ -1,2738 +0,0 @@
-/* This file holds unicode properties and case folding information.
- * It was generated by a modified version of ucgendat, part of the ucdata-2.5 package */
-
-/* {{{ ctype data */
-static unsigned short _ucprop_size = 0x0032;
-static unsigned short _ucprop_offsets[] = {
-0x0000, 0x00d0, 0x0138, 0x0140, 0x016a, 0x0176, 0x019e,
-0x01ac, 0x01ae, 0x01b0, 0x01b4, 0x01cc, 0x01ce, 0xffff, 0x01d8,
-0x051e, 0x0866, 0x087a, 0x08a2, 0x0a3a, 0x0a48, 0x0a60, 0x0ae0,
-0x0b5c, 0x0be8, 0x0c5c, 0x0c72, 0x0c9e, 0x0d6e, 0x0ff2, 0x100e,
-0x1024, 0x1028, 0x1058, 0x105c, 0x1072, 0x107c, 0x1082, 0x1092,
-0x1244, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x13ec,
-0x16f4, 0x16fe, 0x1706, 0x1730, 0x0000, };
-static unsigned long _ucprop_ranges[] = {
-0x00000300, 0x0000034f, 0x00000360, 0x0000036f,
-0x00000483, 0x00000486, 0x00000591, 0x000005a1, 0x000005a3,
-0x000005b9, 0x000005bb, 0x000005bd, 0x000005bf, 0x000005bf,
-0x000005c1, 0x000005c2, 0x000005c4, 0x000005c4, 0x0000064b,
-0x00000655, 0x00000670, 0x00000670, 0x000006d6, 0x000006dc,
-0x000006df, 0x000006e4, 0x000006e7, 0x000006e8, 0x000006ea,
-0x000006ed, 0x00000711, 0x00000711, 0x00000730, 0x0000074a,
-0x000007a6, 0x000007b0, 0x00000901, 0x00000902, 0x0000093c,
-0x0000093c, 0x00000941, 0x00000948, 0x0000094d, 0x0000094d,
-0x00000951, 0x00000954, 0x00000962, 0x00000963, 0x00000981,
-0x00000981, 0x000009bc, 0x000009bc, 0x000009c1, 0x000009c4,
-0x000009cd, 0x000009cd, 0x000009e2, 0x000009e3, 0x00000a02,
-0x00000a02, 0x00000a3c, 0x00000a3c, 0x00000a41, 0x00000a42,
-0x00000a47, 0x00000a48, 0x00000a4b, 0x00000a4d, 0x00000a70,
-0x00000a71, 0x00000a81, 0x00000a82, 0x00000abc, 0x00000abc,
-0x00000ac1, 0x00000ac5, 0x00000ac7, 0x00000ac8, 0x00000acd,
-0x00000acd, 0x00000b01, 0x00000b01, 0x00000b3c, 0x00000b3c,
-0x00000b3f, 0x00000b3f, 0x00000b41, 0x00000b43, 0x00000b4d,
-0x00000b4d, 0x00000b56, 0x00000b56, 0x00000b82, 0x00000b82,
-0x00000bc0, 0x00000bc0, 0x00000bcd, 0x00000bcd, 0x00000c3e,
-0x00000c40, 0x00000c46, 0x00000c48, 0x00000c4a, 0x00000c4d,
-0x00000c55, 0x00000c56, 0x00000cbf, 0x00000cbf, 0x00000cc6,
-0x00000cc6, 0x00000ccc, 0x00000ccd, 0x00000d41, 0x00000d43,
-0x00000d4d, 0x00000d4d, 0x00000dca, 0x00000dca, 0x00000dd2,
-0x00000dd4, 0x00000dd6, 0x00000dd6, 0x00000e31, 0x00000e31,
-0x00000e34, 0x00000e3a, 0x00000e47, 0x00000e4e, 0x00000eb1,
-0x00000eb1, 0x00000eb4, 0x00000eb9, 0x00000ebb, 0x00000ebc,
-0x00000ec8, 0x00000ecd, 0x00000f18, 0x00000f19, 0x00000f35,
-0x00000f35, 0x00000f37, 0x00000f37, 0x00000f39, 0x00000f39,
-0x00000f71, 0x00000f7e, 0x00000f80, 0x00000f84, 0x00000f86,
-0x00000f87, 0x00000f90, 0x00000f97, 0x00000f99, 0x00000fbc,
-0x00000fc6, 0x00000fc6, 0x0000102d, 0x00001030, 0x00001032,
-0x00001032, 0x00001036, 0x00001037, 0x00001039, 0x00001039,
-0x00001058, 0x00001059, 0x00001712, 0x00001714, 0x00001732,
-0x00001734, 0x00001752, 0x00001753, 0x00001772, 0x00001773,
-0x000017b7, 0x000017bd, 0x000017c6, 0x000017c6, 0x000017c9,
-0x000017d3, 0x0000180b, 0x0000180d, 0x000018a9, 0x000018a9,
-0x000020d0, 0x000020dc, 0x000020e1, 0x000020e1, 0x000020e5,
-0x000020ea, 0x0000302a, 0x0000302f, 0x00003099, 0x0000309a,
-0x0000fb1e, 0x0000fb1e, 0x0000fe00, 0x0000fe0f, 0x0000fe20,
-0x0000fe23, 0x0001d167, 0x0001d169, 0x0001d17b, 0x0001d182,
-0x0001d185, 0x0001d18b, 0x0001d1aa, 0x0001d1ad,
-0x00000903, 0x00000903, 0x0000093e, 0x00000940,
-0x00000949, 0x0000094c, 0x00000982, 0x00000983, 0x000009be,
-0x000009c0, 0x000009c7, 0x000009c8, 0x000009cb, 0x000009cc,
-0x000009d7, 0x000009d7, 0x00000a3e, 0x00000a40, 0x00000a83,
-0x00000a83, 0x00000abe, 0x00000ac0, 0x00000ac9, 0x00000ac9,
-0x00000acb, 0x00000acc, 0x00000b02, 0x00000b03, 0x00000b3e,
-0x00000b3e, 0x00000b40, 0x00000b40, 0x00000b47, 0x00000b48,
-0x00000b4b, 0x00000b4c, 0x00000b57, 0x00000b57, 0x00000bbe,
-0x00000bbf, 0x00000bc1, 0x00000bc2, 0x00000bc6, 0x00000bc8,
-0x00000bca, 0x00000bcc, 0x00000bd7, 0x00000bd7, 0x00000c01,
-0x00000c03, 0x00000c41, 0x00000c44, 0x00000c82, 0x00000c83,
-0x00000cbe, 0x00000cbe, 0x00000cc0, 0x00000cc4, 0x00000cc7,
-0x00000cc8, 0x00000cca, 0x00000ccb, 0x00000cd5, 0x00000cd6,
-0x00000d02, 0x00000d03, 0x00000d3e, 0x00000d40, 0x00000d46,
-0x00000d48, 0x00000d4a, 0x00000d4c, 0x00000d57, 0x00000d57,
-0x00000d82, 0x00000d83, 0x00000dcf, 0x00000dd1, 0x00000dd8,
-0x00000ddf, 0x00000df2, 0x00000df3, 0x00000f3e, 0x00000f3f,
-0x00000f7f, 0x00000f7f, 0x0000102c, 0x0000102c, 0x00001031,
-0x00001031, 0x00001038, 0x00001038, 0x00001056, 0x00001057,
-0x000017b4, 0x000017b6, 0x000017be, 0x000017c5, 0x000017c7,
-0x000017c8, 0x0001d165, 0x0001d166, 0x0001d16d, 0x0001d172,
-0x00000488, 0x00000489, 0x000006de, 0x000006de,
-0x000020dd, 0x000020e0, 0x000020e2, 0x000020e4,
-0x00000030, 0x00000039, 0x00000660, 0x00000669,
-0x000006f0, 0x000006f9, 0x00000966, 0x0000096f, 0x000009e6,
-0x000009ef, 0x00000a66, 0x00000a6f, 0x00000ae6, 0x00000aef,
-0x00000b66, 0x00000b6f, 0x00000be7, 0x00000bef, 0x00000c66,
-0x00000c6f, 0x00000ce6, 0x00000cef, 0x00000d66, 0x00000d6f,
-0x00000e50, 0x00000e59, 0x00000ed0, 0x00000ed9, 0x00000f20,
-0x00000f29, 0x00001040, 0x00001049, 0x00001369, 0x00001371,
-0x000017e0, 0x000017e9, 0x00001810, 0x00001819, 0x0000ff10,
-0x0000ff19, 0x0001d7ce, 0x0001d7ff,
-0x000016ee, 0x000016f0, 0x00002160, 0x00002183,
-0x00003007, 0x00003007, 0x00003021, 0x00003029, 0x00003038,
-0x0000303a, 0x0001034a, 0x0001034a,
-0x000000b2, 0x000000b3, 0x000000b9, 0x000000b9,
-0x000000bc, 0x000000be, 0x000009f4, 0x000009f9, 0x00000bf0,
-0x00000bf2, 0x00000f2a, 0x00000f33, 0x00001372, 0x0000137c,
-0x00002070, 0x00002070, 0x00002074, 0x00002079, 0x00002080,
-0x00002089, 0x00002153, 0x0000215f, 0x00002460, 0x0000249b,
-0x000024ea, 0x000024fe, 0x00002776, 0x00002793, 0x00003192,
-0x00003195, 0x00003220, 0x00003229, 0x00003251, 0x0000325f,
-0x00003280, 0x00003289, 0x000032b1, 0x000032bf, 0x00010320,
-0x00010323,
-0x00000020, 0x00000020, 0x000000a0, 0x000000a0,
-0x00001680, 0x00001680, 0x00002000, 0x0000200b, 0x0000202f,
-0x0000202f, 0x0000205f, 0x0000205f, 0x00003000, 0x00003000,
-0x00002028, 0x00002028,
-0x00002029, 0x00002029,
-0x00000000, 0x0000001f, 0x0000007f, 0x0000009f,
-0x000006dd, 0x000006dd, 0x0000070f, 0x0000070f,
-0x0000180e, 0x0000180e, 0x0000200c, 0x0000200f, 0x0000202a,
-0x0000202e, 0x00002060, 0x00002063, 0x0000206a, 0x0000206f,
-0x0000feff, 0x0000feff, 0x0000fff9, 0x0000fffb, 0x0001d173,
-0x0001d17a, 0x000e0001, 0x000e0001, 0x000e0020, 0x000e007f,
-0x00010000, 0x0010ffff,
-0x0000e000, 0x0000f8ff, 0x000f0000, 0x000f0000,
-0x000ffffd, 0x000ffffd, 0x00100000, 0x00100000, 0x0010fffd,
-0x0010fffd,
-0x00000041, 0x0000005a, 0x000000c0, 0x000000d6,
-0x000000d8, 0x000000de, 0x00000100, 0x00000100, 0x00000102,
-0x00000102, 0x00000104, 0x00000104, 0x00000106, 0x00000106,
-0x00000108, 0x00000108, 0x0000010a, 0x0000010a, 0x0000010c,
-0x0000010c, 0x0000010e, 0x0000010e, 0x00000110, 0x00000110,
-0x00000112, 0x00000112, 0x00000114, 0x00000114, 0x00000116,
-0x00000116, 0x00000118, 0x00000118, 0x0000011a, 0x0000011a,
-0x0000011c, 0x0000011c, 0x0000011e, 0x0000011e, 0x00000120,
-0x00000120, 0x00000122, 0x00000122, 0x00000124, 0x00000124,
-0x00000126, 0x00000126, 0x00000128, 0x00000128, 0x0000012a,
-0x0000012a, 0x0000012c, 0x0000012c, 0x0000012e, 0x0000012e,
-0x00000130, 0x00000130, 0x00000132, 0x00000132, 0x00000134,
-0x00000134, 0x00000136, 0x00000136, 0x00000139, 0x00000139,
-0x0000013b, 0x0000013b, 0x0000013d, 0x0000013d, 0x0000013f,
-0x0000013f, 0x00000141, 0x00000141, 0x00000143, 0x00000143,
-0x00000145, 0x00000145, 0x00000147, 0x00000147, 0x0000014a,
-0x0000014a, 0x0000014c, 0x0000014c, 0x0000014e, 0x0000014e,
-0x00000150, 0x00000150, 0x00000152, 0x00000152, 0x00000154,
-0x00000154, 0x00000156, 0x00000156, 0x00000158, 0x00000158,
-0x0000015a, 0x0000015a, 0x0000015c, 0x0000015c, 0x0000015e,
-0x0000015e, 0x00000160, 0x00000160, 0x00000162, 0x00000162,
-0x00000164, 0x00000164, 0x00000166, 0x00000166, 0x00000168,
-0x00000168, 0x0000016a, 0x0000016a, 0x0000016c, 0x0000016c,
-0x0000016e, 0x0000016e, 0x00000170, 0x00000170, 0x00000172,
-0x00000172, 0x00000174, 0x00000174, 0x00000176, 0x00000176,
-0x00000178, 0x00000179, 0x0000017b, 0x0000017b, 0x0000017d,
-0x0000017d, 0x00000181, 0x00000182, 0x00000184, 0x00000184,
-0x00000186, 0x00000187, 0x00000189, 0x0000018b, 0x0000018e,
-0x00000191, 0x00000193, 0x00000194, 0x00000196, 0x00000198,
-0x0000019c, 0x0000019d, 0x0000019f, 0x000001a0, 0x000001a2,
-0x000001a2, 0x000001a4, 0x000001a4, 0x000001a6, 0x000001a7,
-0x000001a9, 0x000001a9, 0x000001ac, 0x000001ac, 0x000001ae,
-0x000001af, 0x000001b1, 0x000001b3, 0x000001b5, 0x000001b5,
-0x000001b7, 0x000001b8, 0x000001bc, 0x000001bc, 0x000001c4,
-0x000001c4, 0x000001c7, 0x000001c7, 0x000001ca, 0x000001ca,
-0x000001cd, 0x000001cd, 0x000001cf, 0x000001cf, 0x000001d1,
-0x000001d1, 0x000001d3, 0x000001d3, 0x000001d5, 0x000001d5,
-0x000001d7, 0x000001d7, 0x000001d9, 0x000001d9, 0x000001db,
-0x000001db, 0x000001de, 0x000001de, 0x000001e0, 0x000001e0,
-0x000001e2, 0x000001e2, 0x000001e4, 0x000001e4, 0x000001e6,
-0x000001e6, 0x000001e8, 0x000001e8, 0x000001ea, 0x000001ea,
-0x000001ec, 0x000001ec, 0x000001ee, 0x000001ee, 0x000001f1,
-0x000001f1, 0x000001f4, 0x000001f4, 0x000001f6, 0x000001f8,
-0x000001fa, 0x000001fa, 0x000001fc, 0x000001fc, 0x000001fe,
-0x000001fe, 0x00000200, 0x00000200, 0x00000202, 0x00000202,
-0x00000204, 0x00000204, 0x00000206, 0x00000206, 0x00000208,
-0x00000208, 0x0000020a, 0x0000020a, 0x0000020c, 0x0000020c,
-0x0000020e, 0x0000020e, 0x00000210, 0x00000210, 0x00000212,
-0x00000212, 0x00000214, 0x00000214, 0x00000216, 0x00000216,
-0x00000218, 0x00000218, 0x0000021a, 0x0000021a, 0x0000021c,
-0x0000021c, 0x0000021e, 0x0000021e, 0x00000220, 0x00000220,
-0x00000222, 0x00000222, 0x00000224, 0x00000224, 0x00000226,
-0x00000226, 0x00000228, 0x00000228, 0x0000022a, 0x0000022a,
-0x0000022c, 0x0000022c, 0x0000022e, 0x0000022e, 0x00000230,
-0x00000230, 0x00000232, 0x00000232, 0x00000386, 0x00000386,
-0x00000388, 0x0000038a, 0x0000038c, 0x0000038c, 0x0000038e,
-0x0000038f, 0x00000391, 0x000003a1, 0x000003a3, 0x000003ab,
-0x000003d2, 0x000003d4, 0x000003d8, 0x000003d8, 0x000003da,
-0x000003da, 0x000003dc, 0x000003dc, 0x000003de, 0x000003de,
-0x000003e0, 0x000003e0, 0x000003e2, 0x000003e2, 0x000003e4,
-0x000003e4, 0x000003e6, 0x000003e6, 0x000003e8, 0x000003e8,
-0x000003ea, 0x000003ea, 0x000003ec, 0x000003ec, 0x000003ee,
-0x000003ee, 0x000003f4, 0x000003f4, 0x00000400, 0x0000042f,
-0x00000460, 0x00000460, 0x00000462, 0x00000462, 0x00000464,
-0x00000464, 0x00000466, 0x00000466, 0x00000468, 0x00000468,
-0x0000046a, 0x0000046a, 0x0000046c, 0x0000046c, 0x0000046e,
-0x0000046e, 0x00000470, 0x00000470, 0x00000472, 0x00000472,
-0x00000474, 0x00000474, 0x00000476, 0x00000476, 0x00000478,
-0x00000478, 0x0000047a, 0x0000047a, 0x0000047c, 0x0000047c,
-0x0000047e, 0x0000047e, 0x00000480, 0x00000480, 0x0000048a,
-0x0000048a, 0x0000048c, 0x0000048c, 0x0000048e, 0x0000048e,
-0x00000490, 0x00000490, 0x00000492, 0x00000492, 0x00000494,
-0x00000494, 0x00000496, 0x00000496, 0x00000498, 0x00000498,
-0x0000049a, 0x0000049a, 0x0000049c, 0x0000049c, 0x0000049e,
-0x0000049e, 0x000004a0, 0x000004a0, 0x000004a2, 0x000004a2,
-0x000004a4, 0x000004a4, 0x000004a6, 0x000004a6, 0x000004a8,
-0x000004a8, 0x000004aa, 0x000004aa, 0x000004ac, 0x000004ac,
-0x000004ae, 0x000004ae, 0x000004b0, 0x000004b0, 0x000004b2,
-0x000004b2, 0x000004b4, 0x000004b4, 0x000004b6, 0x000004b6,
-0x000004b8, 0x000004b8, 0x000004ba, 0x000004ba, 0x000004bc,
-0x000004bc, 0x000004be, 0x000004be, 0x000004c0, 0x000004c1,
-0x000004c3, 0x000004c3, 0x000004c5, 0x000004c5, 0x000004c7,
-0x000004c7, 0x000004c9, 0x000004c9, 0x000004cb, 0x000004cb,
-0x000004cd, 0x000004cd, 0x000004d0, 0x000004d0, 0x000004d2,
-0x000004d2, 0x000004d4, 0x000004d4, 0x000004d6, 0x000004d6,
-0x000004d8, 0x000004d8, 0x000004da, 0x000004da, 0x000004dc,
-0x000004dc, 0x000004de, 0x000004de, 0x000004e0, 0x000004e0,
-0x000004e2, 0x000004e2, 0x000004e4, 0x000004e4, 0x000004e6,
-0x000004e6, 0x000004e8, 0x000004e8, 0x000004ea, 0x000004ea,
-0x000004ec, 0x000004ec, 0x000004ee, 0x000004ee, 0x000004f0,
-0x000004f0, 0x000004f2, 0x000004f2, 0x000004f4, 0x000004f4,
-0x000004f8, 0x000004f8, 0x00000500, 0x00000500, 0x00000502,
-0x00000502, 0x00000504, 0x00000504, 0x00000506, 0x00000506,
-0x00000508, 0x00000508, 0x0000050a, 0x0000050a, 0x0000050c,
-0x0000050c, 0x0000050e, 0x0000050e, 0x00000531, 0x00000556,
-0x000010a0, 0x000010c5, 0x00001e00, 0x00001e00, 0x00001e02,
-0x00001e02, 0x00001e04, 0x00001e04, 0x00001e06, 0x00001e06,
-0x00001e08, 0x00001e08, 0x00001e0a, 0x00001e0a, 0x00001e0c,
-0x00001e0c, 0x00001e0e, 0x00001e0e, 0x00001e10, 0x00001e10,
-0x00001e12, 0x00001e12, 0x00001e14, 0x00001e14, 0x00001e16,
-0x00001e16, 0x00001e18, 0x00001e18, 0x00001e1a, 0x00001e1a,
-0x00001e1c, 0x00001e1c, 0x00001e1e, 0x00001e1e, 0x00001e20,
-0x00001e20, 0x00001e22, 0x00001e22, 0x00001e24, 0x00001e24,
-0x00001e26, 0x00001e26, 0x00001e28, 0x00001e28, 0x00001e2a,
-0x00001e2a, 0x00001e2c, 0x00001e2c, 0x00001e2e, 0x00001e2e,
-0x00001e30, 0x00001e30, 0x00001e32, 0x00001e32, 0x00001e34,
-0x00001e34, 0x00001e36, 0x00001e36, 0x00001e38, 0x00001e38,
-0x00001e3a, 0x00001e3a, 0x00001e3c, 0x00001e3c, 0x00001e3e,
-0x00001e3e, 0x00001e40, 0x00001e40, 0x00001e42, 0x00001e42,
-0x00001e44, 0x00001e44, 0x00001e46, 0x00001e46, 0x00001e48,
-0x00001e48, 0x00001e4a, 0x00001e4a, 0x00001e4c, 0x00001e4c,
-0x00001e4e, 0x00001e4e, 0x00001e50, 0x00001e50, 0x00001e52,
-0x00001e52, 0x00001e54, 0x00001e54, 0x00001e56, 0x00001e56,
-0x00001e58, 0x00001e58, 0x00001e5a, 0x00001e5a, 0x00001e5c,
-0x00001e5c, 0x00001e5e, 0x00001e5e, 0x00001e60, 0x00001e60,
-0x00001e62, 0x00001e62, 0x00001e64, 0x00001e64, 0x00001e66,
-0x00001e66, 0x00001e68, 0x00001e68, 0x00001e6a, 0x00001e6a,
-0x00001e6c, 0x00001e6c, 0x00001e6e, 0x00001e6e, 0x00001e70,
-0x00001e70, 0x00001e72, 0x00001e72, 0x00001e74, 0x00001e74,
-0x00001e76, 0x00001e76, 0x00001e78, 0x00001e78, 0x00001e7a,
-0x00001e7a, 0x00001e7c, 0x00001e7c, 0x00001e7e, 0x00001e7e,
-0x00001e80, 0x00001e80, 0x00001e82, 0x00001e82, 0x00001e84,
-0x00001e84, 0x00001e86, 0x00001e86, 0x00001e88, 0x00001e88,
-0x00001e8a, 0x00001e8a, 0x00001e8c, 0x00001e8c, 0x00001e8e,
-0x00001e8e, 0x00001e90, 0x00001e90, 0x00001e92, 0x00001e92,
-0x00001e94, 0x00001e94, 0x00001ea0, 0x00001ea0, 0x00001ea2,
-0x00001ea2, 0x00001ea4, 0x00001ea4, 0x00001ea6, 0x00001ea6,
-0x00001ea8, 0x00001ea8, 0x00001eaa, 0x00001eaa, 0x00001eac,
-0x00001eac, 0x00001eae, 0x00001eae, 0x00001eb0, 0x00001eb0,
-0x00001eb2, 0x00001eb2, 0x00001eb4, 0x00001eb4, 0x00001eb6,
-0x00001eb6, 0x00001eb8, 0x00001eb8, 0x00001eba, 0x00001eba,
-0x00001ebc, 0x00001ebc, 0x00001ebe, 0x00001ebe, 0x00001ec0,
-0x00001ec0, 0x00001ec2, 0x00001ec2, 0x00001ec4, 0x00001ec4,
-0x00001ec6, 0x00001ec6, 0x00001ec8, 0x00001ec8, 0x00001eca,
-0x00001eca, 0x00001ecc, 0x00001ecc, 0x00001ece, 0x00001ece,
-0x00001ed0, 0x00001ed0, 0x00001ed2, 0x00001ed2, 0x00001ed4,
-0x00001ed4, 0x00001ed6, 0x00001ed6, 0x00001ed8, 0x00001ed8,
-0x00001eda, 0x00001eda, 0x00001edc, 0x00001edc, 0x00001ede,
-0x00001ede, 0x00001ee0, 0x00001ee0, 0x00001ee2, 0x00001ee2,
-0x00001ee4, 0x00001ee4, 0x00001ee6, 0x00001ee6, 0x00001ee8,
-0x00001ee8, 0x00001eea, 0x00001eea, 0x00001eec, 0x00001eec,
-0x00001eee, 0x00001eee, 0x00001ef0, 0x00001ef0, 0x00001ef2,
-0x00001ef2, 0x00001ef4, 0x00001ef4, 0x00001ef6, 0x00001ef6,
-0x00001ef8, 0x00001ef8, 0x00001f08, 0x00001f0f, 0x00001f18,
-0x00001f1d, 0x00001f28, 0x00001f2f, 0x00001f38, 0x00001f3f,
-0x00001f48, 0x00001f4d, 0x00001f59, 0x00001f59, 0x00001f5b,
-0x00001f5b, 0x00001f5d, 0x00001f5d, 0x00001f5f, 0x00001f5f,
-0x00001f68, 0x00001f6f, 0x00001fb8, 0x00001fbb, 0x00001fc8,
-0x00001fcb, 0x00001fd8, 0x00001fdb, 0x00001fe8, 0x00001fec,
-0x00001ff8, 0x00001ffb, 0x00002102, 0x00002102, 0x00002107,
-0x00002107, 0x0000210b, 0x0000210d, 0x00002110, 0x00002112,
-0x00002115, 0x00002115, 0x00002119, 0x0000211d, 0x00002124,
-0x00002124, 0x00002126, 0x00002126, 0x00002128, 0x00002128,
-0x0000212a, 0x0000212d, 0x00002130, 0x00002131, 0x00002133,
-0x00002133, 0x0000213e, 0x0000213f, 0x00002145, 0x00002145,
-0x0000ff21, 0x0000ff3a, 0x00010400, 0x00010425, 0x0001d400,
-0x0001d419, 0x0001d434, 0x0001d44d, 0x0001d468, 0x0001d481,
-0x0001d49c, 0x0001d49c, 0x0001d49e, 0x0001d49f, 0x0001d4a2,
-0x0001d4a2, 0x0001d4a5, 0x0001d4a6, 0x0001d4a9, 0x0001d4ac,
-0x0001d4ae, 0x0001d4b5, 0x0001d4d0, 0x0001d4e9, 0x0001d504,
-0x0001d505, 0x0001d507, 0x0001d50a, 0x0001d50d, 0x0001d514,
-0x0001d516, 0x0001d51c, 0x0001d538, 0x0001d539, 0x0001d53b,
-0x0001d53e, 0x0001d540, 0x0001d544, 0x0001d546, 0x0001d546,
-0x0001d54a, 0x0001d550, 0x0001d56c, 0x0001d585, 0x0001d5a0,
-0x0001d5b9, 0x0001d5d4, 0x0001d5ed, 0x0001d608, 0x0001d621,
-0x0001d63c, 0x0001d655, 0x0001d670, 0x0001d689, 0x0001d6a8,
-0x0001d6c0, 0x0001d6e2, 0x0001d6fa, 0x0001d71c, 0x0001d734,
-0x0001d756, 0x0001d76e, 0x0001d790, 0x0001d7a8,
-0x00000061, 0x0000007a, 0x000000aa, 0x000000aa,
-0x000000b5, 0x000000b5, 0x000000ba, 0x000000ba, 0x000000df,
-0x000000f6, 0x000000f8, 0x000000ff, 0x00000101, 0x00000101,
-0x00000103, 0x00000103, 0x00000105, 0x00000105, 0x00000107,
-0x00000107, 0x00000109, 0x00000109, 0x0000010b, 0x0000010b,
-0x0000010d, 0x0000010d, 0x0000010f, 0x0000010f, 0x00000111,
-0x00000111, 0x00000113, 0x00000113, 0x00000115, 0x00000115,
-0x00000117, 0x00000117, 0x00000119, 0x00000119, 0x0000011b,
-0x0000011b, 0x0000011d, 0x0000011d, 0x0000011f, 0x0000011f,
-0x00000121, 0x00000121, 0x00000123, 0x00000123, 0x00000125,
-0x00000125, 0x00000127, 0x00000127, 0x00000129, 0x00000129,
-0x0000012b, 0x0000012b, 0x0000012d, 0x0000012d, 0x0000012f,
-0x0000012f, 0x00000131, 0x00000131, 0x00000133, 0x00000133,
-0x00000135, 0x00000135, 0x00000137, 0x00000138, 0x0000013a,
-0x0000013a, 0x0000013c, 0x0000013c, 0x0000013e, 0x0000013e,
-0x00000140, 0x00000140, 0x00000142, 0x00000142, 0x00000144,
-0x00000144, 0x00000146, 0x00000146, 0x00000148, 0x00000149,
-0x0000014b, 0x0000014b, 0x0000014d, 0x0000014d, 0x0000014f,
-0x0000014f, 0x00000151, 0x00000151, 0x00000153, 0x00000153,
-0x00000155, 0x00000155, 0x00000157, 0x00000157, 0x00000159,
-0x00000159, 0x0000015b, 0x0000015b, 0x0000015d, 0x0000015d,
-0x0000015f, 0x0000015f, 0x00000161, 0x00000161, 0x00000163,
-0x00000163, 0x00000165, 0x00000165, 0x00000167, 0x00000167,
-0x00000169, 0x00000169, 0x0000016b, 0x0000016b, 0x0000016d,
-0x0000016d, 0x0000016f, 0x0000016f, 0x00000171, 0x00000171,
-0x00000173, 0x00000173, 0x00000175, 0x00000175, 0x00000177,
-0x00000177, 0x0000017a, 0x0000017a, 0x0000017c, 0x0000017c,
-0x0000017e, 0x00000180, 0x00000183, 0x00000183, 0x00000185,
-0x00000185, 0x00000188, 0x00000188, 0x0000018c, 0x0000018d,
-0x00000192, 0x00000192, 0x00000195, 0x00000195, 0x00000199,
-0x0000019b, 0x0000019e, 0x0000019e, 0x000001a1, 0x000001a1,
-0x000001a3, 0x000001a3, 0x000001a5, 0x000001a5, 0x000001a8,
-0x000001a8, 0x000001aa, 0x000001ab, 0x000001ad, 0x000001ad,
-0x000001b0, 0x000001b0, 0x000001b4, 0x000001b4, 0x000001b6,
-0x000001b6, 0x000001b9, 0x000001ba, 0x000001bd, 0x000001bf,
-0x000001c6, 0x000001c6, 0x000001c9, 0x000001c9, 0x000001cc,
-0x000001cc, 0x000001ce, 0x000001ce, 0x000001d0, 0x000001d0,
-0x000001d2, 0x000001d2, 0x000001d4, 0x000001d4, 0x000001d6,
-0x000001d6, 0x000001d8, 0x000001d8, 0x000001da, 0x000001da,
-0x000001dc, 0x000001dd, 0x000001df, 0x000001df, 0x000001e1,
-0x000001e1, 0x000001e3, 0x000001e3, 0x000001e5, 0x000001e5,
-0x000001e7, 0x000001e7, 0x000001e9, 0x000001e9, 0x000001eb,
-0x000001eb, 0x000001ed, 0x000001ed, 0x000001ef, 0x000001f0,
-0x000001f3, 0x000001f3, 0x000001f5, 0x000001f5, 0x000001f9,
-0x000001f9, 0x000001fb, 0x000001fb, 0x000001fd, 0x000001fd,
-0x000001ff, 0x000001ff, 0x00000201, 0x00000201, 0x00000203,
-0x00000203, 0x00000205, 0x00000205, 0x00000207, 0x00000207,
-0x00000209, 0x00000209, 0x0000020b, 0x0000020b, 0x0000020d,
-0x0000020d, 0x0000020f, 0x0000020f, 0x00000211, 0x00000211,
-0x00000213, 0x00000213, 0x00000215, 0x00000215, 0x00000217,
-0x00000217, 0x00000219, 0x00000219, 0x0000021b, 0x0000021b,
-0x0000021d, 0x0000021d, 0x0000021f, 0x0000021f, 0x00000223,
-0x00000223, 0x00000225, 0x00000225, 0x00000227, 0x00000227,
-0x00000229, 0x00000229, 0x0000022b, 0x0000022b, 0x0000022d,
-0x0000022d, 0x0000022f, 0x0000022f, 0x00000231, 0x00000231,
-0x00000233, 0x00000233, 0x00000250, 0x000002ad, 0x00000390,
-0x00000390, 0x000003ac, 0x000003ce, 0x000003d0, 0x000003d1,
-0x000003d5, 0x000003d7, 0x000003d9, 0x000003d9, 0x000003db,
-0x000003db, 0x000003dd, 0x000003dd, 0x000003df, 0x000003df,
-0x000003e1, 0x000003e1, 0x000003e3, 0x000003e3, 0x000003e5,
-0x000003e5, 0x000003e7, 0x000003e7, 0x000003e9, 0x000003e9,
-0x000003eb, 0x000003eb, 0x000003ed, 0x000003ed, 0x000003ef,
-0x000003f3, 0x000003f5, 0x000003f5, 0x00000430, 0x0000045f,
-0x00000461, 0x00000461, 0x00000463, 0x00000463, 0x00000465,
-0x00000465, 0x00000467, 0x00000467, 0x00000469, 0x00000469,
-0x0000046b, 0x0000046b, 0x0000046d, 0x0000046d, 0x0000046f,
-0x0000046f, 0x00000471, 0x00000471, 0x00000473, 0x00000473,
-0x00000475, 0x00000475, 0x00000477, 0x00000477, 0x00000479,
-0x00000479, 0x0000047b, 0x0000047b, 0x0000047d, 0x0000047d,
-0x0000047f, 0x0000047f, 0x00000481, 0x00000481, 0x0000048b,
-0x0000048b, 0x0000048d, 0x0000048d, 0x0000048f, 0x0000048f,
-0x00000491, 0x00000491, 0x00000493, 0x00000493, 0x00000495,
-0x00000495, 0x00000497, 0x00000497, 0x00000499, 0x00000499,
-0x0000049b, 0x0000049b, 0x0000049d, 0x0000049d, 0x0000049f,
-0x0000049f, 0x000004a1, 0x000004a1, 0x000004a3, 0x000004a3,
-0x000004a5, 0x000004a5, 0x000004a7, 0x000004a7, 0x000004a9,
-0x000004a9, 0x000004ab, 0x000004ab, 0x000004ad, 0x000004ad,
-0x000004af, 0x000004af, 0x000004b1, 0x000004b1, 0x000004b3,
-0x000004b3, 0x000004b5, 0x000004b5, 0x000004b7, 0x000004b7,
-0x000004b9, 0x000004b9, 0x000004bb, 0x000004bb, 0x000004bd,
-0x000004bd, 0x000004bf, 0x000004bf, 0x000004c2, 0x000004c2,
-0x000004c4, 0x000004c4, 0x000004c6, 0x000004c6, 0x000004c8,
-0x000004c8, 0x000004ca, 0x000004ca, 0x000004cc, 0x000004cc,
-0x000004ce, 0x000004ce, 0x000004d1, 0x000004d1, 0x000004d3,
-0x000004d3, 0x000004d5, 0x000004d5, 0x000004d7, 0x000004d7,
-0x000004d9, 0x000004d9, 0x000004db, 0x000004db, 0x000004dd,
-0x000004dd, 0x000004df, 0x000004df, 0x000004e1, 0x000004e1,
-0x000004e3, 0x000004e3, 0x000004e5, 0x000004e5, 0x000004e7,
-0x000004e7, 0x000004e9, 0x000004e9, 0x000004eb, 0x000004eb,
-0x000004ed, 0x000004ed, 0x000004ef, 0x000004ef, 0x000004f1,
-0x000004f1, 0x000004f3, 0x000004f3, 0x000004f5, 0x000004f5,
-0x000004f9, 0x000004f9, 0x00000501, 0x00000501, 0x00000503,
-0x00000503, 0x00000505, 0x00000505, 0x00000507, 0x00000507,
-0x00000509, 0x00000509, 0x0000050b, 0x0000050b, 0x0000050d,
-0x0000050d, 0x0000050f, 0x0000050f, 0x00000561, 0x00000587,
-0x00001e01, 0x00001e01, 0x00001e03, 0x00001e03, 0x00001e05,
-0x00001e05, 0x00001e07, 0x00001e07, 0x00001e09, 0x00001e09,
-0x00001e0b, 0x00001e0b, 0x00001e0d, 0x00001e0d, 0x00001e0f,
-0x00001e0f, 0x00001e11, 0x00001e11, 0x00001e13, 0x00001e13,
-0x00001e15, 0x00001e15, 0x00001e17, 0x00001e17, 0x00001e19,
-0x00001e19, 0x00001e1b, 0x00001e1b, 0x00001e1d, 0x00001e1d,
-0x00001e1f, 0x00001e1f, 0x00001e21, 0x00001e21, 0x00001e23,
-0x00001e23, 0x00001e25, 0x00001e25, 0x00001e27, 0x00001e27,
-0x00001e29, 0x00001e29, 0x00001e2b, 0x00001e2b, 0x00001e2d,
-0x00001e2d, 0x00001e2f, 0x00001e2f, 0x00001e31, 0x00001e31,
-0x00001e33, 0x00001e33, 0x00001e35, 0x00001e35, 0x00001e37,
-0x00001e37, 0x00001e39, 0x00001e39, 0x00001e3b, 0x00001e3b,
-0x00001e3d, 0x00001e3d, 0x00001e3f, 0x00001e3f, 0x00001e41,
-0x00001e41, 0x00001e43, 0x00001e43, 0x00001e45, 0x00001e45,
-0x00001e47, 0x00001e47, 0x00001e49, 0x00001e49, 0x00001e4b,
-0x00001e4b, 0x00001e4d, 0x00001e4d, 0x00001e4f, 0x00001e4f,
-0x00001e51, 0x00001e51, 0x00001e53, 0x00001e53, 0x00001e55,
-0x00001e55, 0x00001e57, 0x00001e57, 0x00001e59, 0x00001e59,
-0x00001e5b, 0x00001e5b, 0x00001e5d, 0x00001e5d, 0x00001e5f,
-0x00001e5f, 0x00001e61, 0x00001e61, 0x00001e63, 0x00001e63,
-0x00001e65, 0x00001e65, 0x00001e67, 0x00001e67, 0x00001e69,
-0x00001e69, 0x00001e6b, 0x00001e6b, 0x00001e6d, 0x00001e6d,
-0x00001e6f, 0x00001e6f, 0x00001e71, 0x00001e71, 0x00001e73,
-0x00001e73, 0x00001e75, 0x00001e75, 0x00001e77, 0x00001e77,
-0x00001e79, 0x00001e79, 0x00001e7b, 0x00001e7b, 0x00001e7d,
-0x00001e7d, 0x00001e7f, 0x00001e7f, 0x00001e81, 0x00001e81,
-0x00001e83, 0x00001e83, 0x00001e85, 0x00001e85, 0x00001e87,
-0x00001e87, 0x00001e89, 0x00001e89, 0x00001e8b, 0x00001e8b,
-0x00001e8d, 0x00001e8d, 0x00001e8f, 0x00001e8f, 0x00001e91,
-0x00001e91, 0x00001e93, 0x00001e93, 0x00001e95, 0x00001e9b,
-0x00001ea1, 0x00001ea1, 0x00001ea3, 0x00001ea3, 0x00001ea5,
-0x00001ea5, 0x00001ea7, 0x00001ea7, 0x00001ea9, 0x00001ea9,
-0x00001eab, 0x00001eab, 0x00001ead, 0x00001ead, 0x00001eaf,
-0x00001eaf, 0x00001eb1, 0x00001eb1, 0x00001eb3, 0x00001eb3,
-0x00001eb5, 0x00001eb5, 0x00001eb7, 0x00001eb7, 0x00001eb9,
-0x00001eb9, 0x00001ebb, 0x00001ebb, 0x00001ebd, 0x00001ebd,
-0x00001ebf, 0x00001ebf, 0x00001ec1, 0x00001ec1, 0x00001ec3,
-0x00001ec3, 0x00001ec5, 0x00001ec5, 0x00001ec7, 0x00001ec7,
-0x00001ec9, 0x00001ec9, 0x00001ecb, 0x00001ecb, 0x00001ecd,
-0x00001ecd, 0x00001ecf, 0x00001ecf, 0x00001ed1, 0x00001ed1,
-0x00001ed3, 0x00001ed3, 0x00001ed5, 0x00001ed5, 0x00001ed7,
-0x00001ed7, 0x00001ed9, 0x00001ed9, 0x00001edb, 0x00001edb,
-0x00001edd, 0x00001edd, 0x00001edf, 0x00001edf, 0x00001ee1,
-0x00001ee1, 0x00001ee3, 0x00001ee3, 0x00001ee5, 0x00001ee5,
-0x00001ee7, 0x00001ee7, 0x00001ee9, 0x00001ee9, 0x00001eeb,
-0x00001eeb, 0x00001eed, 0x00001eed, 0x00001eef, 0x00001eef,
-0x00001ef1, 0x00001ef1, 0x00001ef3, 0x00001ef3, 0x00001ef5,
-0x00001ef5, 0x00001ef7, 0x00001ef7, 0x00001ef9, 0x00001ef9,
-0x00001f00, 0x00001f07, 0x00001f10, 0x00001f15, 0x00001f20,
-0x00001f27, 0x00001f30, 0x00001f37, 0x00001f40, 0x00001f45,
-0x00001f50, 0x00001f57, 0x00001f60, 0x00001f67, 0x00001f70,
-0x00001f7d, 0x00001f80, 0x00001f87, 0x00001f90, 0x00001f97,
-0x00001fa0, 0x00001fa7, 0x00001fb0, 0x00001fb4, 0x00001fb6,
-0x00001fb7, 0x00001fbe, 0x00001fbe, 0x00001fc2, 0x00001fc4,
-0x00001fc6, 0x00001fc7, 0x00001fd0, 0x00001fd3, 0x00001fd6,
-0x00001fd7, 0x00001fe0, 0x00001fe7, 0x00001ff2, 0x00001ff4,
-0x00001ff6, 0x00001ff7, 0x00002071, 0x00002071, 0x0000207f,
-0x0000207f, 0x0000210a, 0x0000210a, 0x0000210e, 0x0000210f,
-0x00002113, 0x00002113, 0x0000212f, 0x0000212f, 0x00002134,
-0x00002134, 0x00002139, 0x00002139, 0x0000213d, 0x0000213d,
-0x00002146, 0x00002149, 0x0000fb00, 0x0000fb06, 0x0000fb13,
-0x0000fb17, 0x0000ff41, 0x0000ff5a, 0x00010428, 0x0001044d,
-0x0001d41a, 0x0001d433, 0x0001d44e, 0x0001d454, 0x0001d456,
-0x0001d467, 0x0001d482, 0x0001d49b, 0x0001d4b6, 0x0001d4b9,
-0x0001d4bb, 0x0001d4bb, 0x0001d4bd, 0x0001d4c0, 0x0001d4c2,
-0x0001d4c3, 0x0001d4c5, 0x0001d4cf, 0x0001d4ea, 0x0001d503,
-0x0001d51e, 0x0001d537, 0x0001d552, 0x0001d56b, 0x0001d586,
-0x0001d59f, 0x0001d5ba, 0x0001d5d3, 0x0001d5ee, 0x0001d607,
-0x0001d622, 0x0001d63b, 0x0001d656, 0x0001d66f, 0x0001d68a,
-0x0001d6a3, 0x0001d6c2, 0x0001d6da, 0x0001d6dc, 0x0001d6e1,
-0x0001d6fc, 0x0001d714, 0x0001d716, 0x0001d71b, 0x0001d736,
-0x0001d74e, 0x0001d750, 0x0001d755, 0x0001d770, 0x0001d788,
-0x0001d78a, 0x0001d78f, 0x0001d7aa, 0x0001d7c2, 0x0001d7c4,
-0x0001d7c9,
-0x000001c5, 0x000001c5, 0x000001c8, 0x000001c8,
-0x000001cb, 0x000001cb, 0x000001f2, 0x000001f2, 0x00001f88,
-0x00001f8f, 0x00001f98, 0x00001f9f, 0x00001fa8, 0x00001faf,
-0x00001fbc, 0x00001fbc, 0x00001fcc, 0x00001fcc, 0x00001ffc,
-0x00001ffc,
-0x000002b0, 0x000002b8, 0x000002bb, 0x000002c1,
-0x000002d0, 0x000002d1, 0x000002e0, 0x000002e4, 0x000002ee,
-0x000002ee, 0x0000037a, 0x0000037a, 0x00000559, 0x00000559,
-0x00000640, 0x00000640, 0x000006e5, 0x000006e6, 0x00000e46,
-0x00000e46, 0x00000ec6, 0x00000ec6, 0x000017d7, 0x000017d7,
-0x00001843, 0x00001843, 0x00003005, 0x00003005, 0x00003031,
-0x00003035, 0x0000303b, 0x0000303b, 0x0000309d, 0x0000309e,
-0x000030fc, 0x000030fe, 0x0000ff70, 0x0000ff70, 0x0000ff9e,
-0x0000ff9f,
-0x000001bb, 0x000001bb, 0x000001c0, 0x000001c3,
-0x000005d0, 0x000005ea, 0x000005f0, 0x000005f2, 0x00000621,
-0x0000063a, 0x00000641, 0x0000064a, 0x0000066e, 0x0000066f,
-0x00000671, 0x000006d3, 0x000006d5, 0x000006d5, 0x000006fa,
-0x000006fc, 0x00000710, 0x00000710, 0x00000712, 0x0000072c,
-0x00000780, 0x000007a5, 0x000007b1, 0x000007b1, 0x00000905,
-0x00000939, 0x0000093d, 0x0000093d, 0x00000950, 0x00000950,
-0x00000958, 0x00000961, 0x00000985, 0x0000098c, 0x0000098f,
-0x00000990, 0x00000993, 0x000009a8, 0x000009aa, 0x000009b0,
-0x000009b2, 0x000009b2, 0x000009b6, 0x000009b9, 0x000009dc,
-0x000009dd, 0x000009df, 0x000009e1, 0x000009f0, 0x000009f1,
-0x00000a05, 0x00000a0a, 0x00000a0f, 0x00000a10, 0x00000a13,
-0x00000a28, 0x00000a2a, 0x00000a30, 0x00000a32, 0x00000a33,
-0x00000a35, 0x00000a36, 0x00000a38, 0x00000a39, 0x00000a59,
-0x00000a5c, 0x00000a5e, 0x00000a5e, 0x00000a72, 0x00000a74,
-0x00000a85, 0x00000a8b, 0x00000a8d, 0x00000a8d, 0x00000a8f,
-0x00000a91, 0x00000a93, 0x00000aa8, 0x00000aaa, 0x00000ab0,
-0x00000ab2, 0x00000ab3, 0x00000ab5, 0x00000ab9, 0x00000abd,
-0x00000abd, 0x00000ad0, 0x00000ad0, 0x00000ae0, 0x00000ae0,
-0x00000b05, 0x00000b0c, 0x00000b0f, 0x00000b10, 0x00000b13,
-0x00000b28, 0x00000b2a, 0x00000b30, 0x00000b32, 0x00000b33,
-0x00000b36, 0x00000b39, 0x00000b3d, 0x00000b3d, 0x00000b5c,
-0x00000b5d, 0x00000b5f, 0x00000b61, 0x00000b83, 0x00000b83,
-0x00000b85, 0x00000b8a, 0x00000b8e, 0x00000b90, 0x00000b92,
-0x00000b95, 0x00000b99, 0x00000b9a, 0x00000b9c, 0x00000b9c,
-0x00000b9e, 0x00000b9f, 0x00000ba3, 0x00000ba4, 0x00000ba8,
-0x00000baa, 0x00000bae, 0x00000bb5, 0x00000bb7, 0x00000bb9,
-0x00000c05, 0x00000c0c, 0x00000c0e, 0x00000c10, 0x00000c12,
-0x00000c28, 0x00000c2a, 0x00000c33, 0x00000c35, 0x00000c39,
-0x00000c60, 0x00000c61, 0x00000c85, 0x00000c8c, 0x00000c8e,
-0x00000c90, 0x00000c92, 0x00000ca8, 0x00000caa, 0x00000cb3,
-0x00000cb5, 0x00000cb9, 0x00000cde, 0x00000cde, 0x00000ce0,
-0x00000ce1, 0x00000d05, 0x00000d0c, 0x00000d0e, 0x00000d10,
-0x00000d12, 0x00000d28, 0x00000d2a, 0x00000d39, 0x00000d60,
-0x00000d61, 0x00000d85, 0x00000d96, 0x00000d9a, 0x00000db1,
-0x00000db3, 0x00000dbb, 0x00000dbd, 0x00000dbd, 0x00000dc0,
-0x00000dc6, 0x00000e01, 0x00000e30, 0x00000e32, 0x00000e33,
-0x00000e40, 0x00000e45, 0x00000e81, 0x00000e82, 0x00000e84,
-0x00000e84, 0x00000e87, 0x00000e88, 0x00000e8a, 0x00000e8a,
-0x00000e8d, 0x00000e8d, 0x00000e94, 0x00000e97, 0x00000e99,
-0x00000e9f, 0x00000ea1, 0x00000ea3, 0x00000ea5, 0x00000ea5,
-0x00000ea7, 0x00000ea7, 0x00000eaa, 0x00000eab, 0x00000ead,
-0x00000eb0, 0x00000eb2, 0x00000eb3, 0x00000ebd, 0x00000ebd,
-0x00000ec0, 0x00000ec4, 0x00000edc, 0x00000edd, 0x00000f00,
-0x00000f00, 0x00000f40, 0x00000f47, 0x00000f49, 0x00000f6a,
-0x00000f88, 0x00000f8b, 0x00001000, 0x00001021, 0x00001023,
-0x00001027, 0x00001029, 0x0000102a, 0x00001050, 0x00001055,
-0x000010d0, 0x000010f8, 0x00001100, 0x00001159, 0x0000115f,
-0x000011a2, 0x000011a8, 0x000011f9, 0x00001200, 0x00001206,
-0x00001208, 0x00001246, 0x00001248, 0x00001248, 0x0000124a,
-0x0000124d, 0x00001250, 0x00001256, 0x00001258, 0x00001258,
-0x0000125a, 0x0000125d, 0x00001260, 0x00001286, 0x00001288,
-0x00001288, 0x0000128a, 0x0000128d, 0x00001290, 0x000012ae,
-0x000012b0, 0x000012b0, 0x000012b2, 0x000012b5, 0x000012b8,
-0x000012be, 0x000012c0, 0x000012c0, 0x000012c2, 0x000012c5,
-0x000012c8, 0x000012ce, 0x000012d0, 0x000012d6, 0x000012d8,
-0x000012ee, 0x000012f0, 0x0000130e, 0x00001310, 0x00001310,
-0x00001312, 0x00001315, 0x00001318, 0x0000131e, 0x00001320,
-0x00001346, 0x00001348, 0x0000135a, 0x000013a0, 0x000013f4,
-0x00001401, 0x0000166c, 0x0000166f, 0x00001676, 0x00001681,
-0x0000169a, 0x000016a0, 0x000016ea, 0x00001700, 0x0000170c,
-0x0000170e, 0x00001711, 0x00001720, 0x00001731, 0x00001740,
-0x00001751, 0x00001760, 0x0000176c, 0x0000176e, 0x00001770,
-0x00001780, 0x000017b3, 0x000017dc, 0x000017dc, 0x00001820,
-0x00001842, 0x00001844, 0x00001877, 0x00001880, 0x000018a8,
-0x00002135, 0x00002138, 0x00003006, 0x00003006, 0x0000303c,
-0x0000303c, 0x00003041, 0x00003096, 0x0000309f, 0x0000309f,
-0x000030a1, 0x000030fa, 0x000030ff, 0x000030ff, 0x00003105,
-0x0000312c, 0x00003131, 0x0000318e, 0x000031a0, 0x000031b7,
-0x000031f0, 0x000031ff, 0x00003400, 0x00003400, 0x00004db5,
-0x00004db5, 0x00004e00, 0x0000a48c, 0x0000ac00, 0x0000d7a3,
-0x0000f900, 0x0000faff, 0x0000fb1d, 0x0000fb1d, 0x0000fb1f,
-0x0000fb28, 0x0000fb2a, 0x0000fb36, 0x0000fb38, 0x0000fb3c,
-0x0000fb3e, 0x0000fb3e, 0x0000fb40, 0x0000fb41, 0x0000fb43,
-0x0000fb44, 0x0000fb46, 0x0000fbb1, 0x0000fbd3, 0x0000fd3d,
-0x0000fd50, 0x0000fd8f, 0x0000fd92, 0x0000fdc7, 0x0000fdf0,
-0x0000fdfb, 0x0000fe70, 0x0000fe74, 0x0000fe76, 0x0000fefc,
-0x0000ff66, 0x0000ff6f, 0x0000ff71, 0x0000ff9d, 0x0000ffa0,
-0x0000ffbe, 0x0000ffc2, 0x0000ffc7, 0x0000ffca, 0x0000ffcf,
-0x0000ffd2, 0x0000ffd7, 0x0000ffda, 0x0000ffdc, 0x00010300,
-0x0001031e, 0x00010330, 0x00010349, 0x00020000, 0x00020000,
-0x0002a6d6, 0x0002a6d6, 0x0002f800, 0x0002fa1d,
-0x0000005f, 0x0000005f, 0x0000203f, 0x00002040,
-0x000030fb, 0x000030fb, 0x0000fe33, 0x0000fe34, 0x0000fe4d,
-0x0000fe4f, 0x0000ff3f, 0x0000ff3f, 0x0000ff65, 0x0000ff65,
-0x0000002d, 0x0000002d, 0x000000ad, 0x000000ad,
-0x0000058a, 0x0000058a, 0x00001806, 0x00001806, 0x00002010,
-0x00002015, 0x0000301c, 0x0000301c, 0x00003030, 0x00003030,
-0x000030a0, 0x000030a0, 0x0000fe31, 0x0000fe32, 0x0000fe58,
-0x0000fe58, 0x0000fe63, 0x0000fe63, 0x0000ff0d, 0x0000ff0d,
-0x00000028, 0x00000028, 0x0000005b, 0x0000005b,
-0x0000007b, 0x0000007b, 0x00000f3a, 0x00000f3a, 0x00000f3c,
-0x00000f3c, 0x0000169b, 0x0000169b, 0x0000201a, 0x0000201a,
-0x0000201e, 0x0000201e, 0x00002045, 0x00002045, 0x0000207d,
-0x0000207d, 0x0000208d, 0x0000208d, 0x00002329, 0x00002329,
-0x000023b4, 0x000023b4, 0x00002768, 0x00002768, 0x0000276a,
-0x0000276a, 0x0000276c, 0x0000276c, 0x0000276e, 0x0000276e,
-0x00002770, 0x00002770, 0x00002772, 0x00002772, 0x00002774,
-0x00002774, 0x000027e6, 0x000027e6, 0x000027e8, 0x000027e8,
-0x000027ea, 0x000027ea, 0x00002983, 0x00002983, 0x00002985,
-0x00002985, 0x00002987, 0x00002987, 0x00002989, 0x00002989,
-0x0000298b, 0x0000298b, 0x0000298d, 0x0000298d, 0x0000298f,
-0x0000298f, 0x00002991, 0x00002991, 0x00002993, 0x00002993,
-0x00002995, 0x00002995, 0x00002997, 0x00002997, 0x000029d8,
-0x000029d8, 0x000029da, 0x000029da, 0x000029fc, 0x000029fc,
-0x00003008, 0x00003008, 0x0000300a, 0x0000300a, 0x0000300c,
-0x0000300c, 0x0000300e, 0x0000300e, 0x00003010, 0x00003010,
-0x00003014, 0x00003014, 0x00003016, 0x00003016, 0x00003018,
-0x00003018, 0x0000301a, 0x0000301a, 0x0000301d, 0x0000301d,
-0x0000fd3e, 0x0000fd3e, 0x0000fe35, 0x0000fe35, 0x0000fe37,
-0x0000fe37, 0x0000fe39, 0x0000fe39, 0x0000fe3b, 0x0000fe3b,
-0x0000fe3d, 0x0000fe3d, 0x0000fe3f, 0x0000fe3f, 0x0000fe41,
-0x0000fe41, 0x0000fe43, 0x0000fe43, 0x0000fe59, 0x0000fe59,
-0x0000fe5b, 0x0000fe5b, 0x0000fe5d, 0x0000fe5d, 0x0000ff08,
-0x0000ff08, 0x0000ff3b, 0x0000ff3b, 0x0000ff5b, 0x0000ff5b,
-0x0000ff5f, 0x0000ff5f, 0x0000ff62, 0x0000ff62,
-0x00000029, 0x00000029, 0x0000005d, 0x0000005d,
-0x0000007d, 0x0000007d, 0x00000f3b, 0x00000f3b, 0x00000f3d,
-0x00000f3d, 0x0000169c, 0x0000169c, 0x00002046, 0x00002046,
-0x0000207e, 0x0000207e, 0x0000208e, 0x0000208e, 0x0000232a,
-0x0000232a, 0x000023b5, 0x000023b5, 0x00002769, 0x00002769,
-0x0000276b, 0x0000276b, 0x0000276d, 0x0000276d, 0x0000276f,
-0x0000276f, 0x00002771, 0x00002771, 0x00002773, 0x00002773,
-0x00002775, 0x00002775, 0x000027e7, 0x000027e7, 0x000027e9,
-0x000027e9, 0x000027eb, 0x000027eb, 0x00002984, 0x00002984,
-0x00002986, 0x00002986, 0x00002988, 0x00002988, 0x0000298a,
-0x0000298a, 0x0000298c, 0x0000298c, 0x0000298e, 0x0000298e,
-0x00002990, 0x00002990, 0x00002992, 0x00002992, 0x00002994,
-0x00002994, 0x00002996, 0x00002996, 0x00002998, 0x00002998,
-0x000029d9, 0x000029d9, 0x000029db, 0x000029db, 0x000029fd,
-0x000029fd, 0x00003009, 0x00003009, 0x0000300b, 0x0000300b,
-0x0000300d, 0x0000300d, 0x0000300f, 0x0000300f, 0x00003011,
-0x00003011, 0x00003015, 0x00003015, 0x00003017, 0x00003017,
-0x00003019, 0x00003019, 0x0000301b, 0x0000301b, 0x0000301e,
-0x0000301f, 0x0000fd3f, 0x0000fd3f, 0x0000fe36, 0x0000fe36,
-0x0000fe38, 0x0000fe38, 0x0000fe3a, 0x0000fe3a, 0x0000fe3c,
-0x0000fe3c, 0x0000fe3e, 0x0000fe3e, 0x0000fe40, 0x0000fe40,
-0x0000fe42, 0x0000fe42, 0x0000fe44, 0x0000fe44, 0x0000fe5a,
-0x0000fe5a, 0x0000fe5c, 0x0000fe5c, 0x0000fe5e, 0x0000fe5e,
-0x0000ff09, 0x0000ff09, 0x0000ff3d, 0x0000ff3d, 0x0000ff5d,
-0x0000ff5d, 0x0000ff60, 0x0000ff60, 0x0000ff63, 0x0000ff63,
-0x00000021, 0x00000023, 0x00000025, 0x00000027,
-0x0000002a, 0x0000002a, 0x0000002c, 0x0000002c, 0x0000002e,
-0x0000002f, 0x0000003a, 0x0000003b, 0x0000003f, 0x00000040,
-0x0000005c, 0x0000005c, 0x000000a1, 0x000000a1, 0x000000b7,
-0x000000b7, 0x000000bf, 0x000000bf, 0x0000037e, 0x0000037e,
-0x00000387, 0x00000387, 0x0000055a, 0x0000055f, 0x00000589,
-0x00000589, 0x000005be, 0x000005be, 0x000005c0, 0x000005c0,
-0x000005c3, 0x000005c3, 0x000005f3, 0x000005f4, 0x0000060c,
-0x0000060c, 0x0000061b, 0x0000061b, 0x0000061f, 0x0000061f,
-0x0000066a, 0x0000066d, 0x000006d4, 0x000006d4, 0x00000700,
-0x0000070d, 0x00000964, 0x00000965, 0x00000970, 0x00000970,
-0x00000df4, 0x00000df4, 0x00000e4f, 0x00000e4f, 0x00000e5a,
-0x00000e5b, 0x00000f04, 0x00000f12, 0x00000f85, 0x00000f85,
-0x0000104a, 0x0000104f, 0x000010fb, 0x000010fb, 0x00001361,
-0x00001368, 0x0000166d, 0x0000166e, 0x000016eb, 0x000016ed,
-0x00001735, 0x00001736, 0x000017d4, 0x000017d6, 0x000017d8,
-0x000017da, 0x00001800, 0x00001805, 0x00001807, 0x0000180a,
-0x00002016, 0x00002017, 0x00002020, 0x00002027, 0x00002030,
-0x00002038, 0x0000203b, 0x0000203e, 0x00002041, 0x00002043,
-0x00002047, 0x00002051, 0x00002057, 0x00002057, 0x000023b6,
-0x000023b6, 0x00003001, 0x00003003, 0x0000303d, 0x0000303d,
-0x0000fe30, 0x0000fe30, 0x0000fe45, 0x0000fe46, 0x0000fe49,
-0x0000fe4c, 0x0000fe50, 0x0000fe52, 0x0000fe54, 0x0000fe57,
-0x0000fe5f, 0x0000fe61, 0x0000fe68, 0x0000fe68, 0x0000fe6a,
-0x0000fe6b, 0x0000ff01, 0x0000ff03, 0x0000ff05, 0x0000ff07,
-0x0000ff0a, 0x0000ff0a, 0x0000ff0c, 0x0000ff0c, 0x0000ff0e,
-0x0000ff0f, 0x0000ff1a, 0x0000ff1b, 0x0000ff1f, 0x0000ff20,
-0x0000ff3c, 0x0000ff3c, 0x0000ff61, 0x0000ff61, 0x0000ff64,
-0x0000ff64,
-0x0000002b, 0x0000002b, 0x0000003c, 0x0000003e,
-0x0000007c, 0x0000007c, 0x0000007e, 0x0000007e, 0x000000ac,
-0x000000ac, 0x000000b1, 0x000000b1, 0x000000d7, 0x000000d7,
-0x000000f7, 0x000000f7, 0x000003f6, 0x000003f6, 0x00002044,
-0x00002044, 0x00002052, 0x00002052, 0x0000207a, 0x0000207c,
-0x0000208a, 0x0000208c, 0x00002140, 0x00002144, 0x0000214b,
-0x0000214b, 0x00002190, 0x00002194, 0x0000219a, 0x0000219b,
-0x000021a0, 0x000021a0, 0x000021a3, 0x000021a3, 0x000021a6,
-0x000021a6, 0x000021ae, 0x000021ae, 0x000021ce, 0x000021cf,
-0x000021d2, 0x000021d2, 0x000021d4, 0x000021d4, 0x000021f4,
-0x000022ff, 0x00002308, 0x0000230b, 0x00002320, 0x00002321,
-0x0000237c, 0x0000237c, 0x0000239b, 0x000023b3, 0x000025b7,
-0x000025b7, 0x000025c1, 0x000025c1, 0x000025f8, 0x000025ff,
-0x0000266f, 0x0000266f, 0x000027d0, 0x000027e5, 0x000027f0,
-0x000027ff, 0x00002900, 0x00002982, 0x00002999, 0x000029d7,
-0x000029dc, 0x000029fb, 0x000029fe, 0x00002aff, 0x0000fb29,
-0x0000fb29, 0x0000fe62, 0x0000fe62, 0x0000fe64, 0x0000fe66,
-0x0000ff0b, 0x0000ff0b, 0x0000ff1c, 0x0000ff1e, 0x0000ff5c,
-0x0000ff5c, 0x0000ff5e, 0x0000ff5e, 0x0000ffe2, 0x0000ffe2,
-0x0000ffe9, 0x0000ffec, 0x0001d6c1, 0x0001d6c1, 0x0001d6db,
-0x0001d6db, 0x0001d6fb, 0x0001d6fb, 0x0001d715, 0x0001d715,
-0x0001d735, 0x0001d735, 0x0001d74f, 0x0001d74f, 0x0001d76f,
-0x0001d76f, 0x0001d789, 0x0001d789, 0x0001d7a9, 0x0001d7a9,
-0x0001d7c3, 0x0001d7c3,
-0x00000024, 0x00000024, 0x000000a2, 0x000000a5,
-0x000009f2, 0x000009f3, 0x00000e3f, 0x00000e3f, 0x000017db,
-0x000017db, 0x000020a0, 0x000020b1, 0x0000fdfc, 0x0000fdfc,
-0x0000fe69, 0x0000fe69, 0x0000ff04, 0x0000ff04, 0x0000ffe0,
-0x0000ffe1, 0x0000ffe5, 0x0000ffe6,
-0x0000005e, 0x0000005e, 0x00000060, 0x00000060,
-0x000000a8, 0x000000a8, 0x000000af, 0x000000af, 0x000000b4,
-0x000000b4, 0x000000b8, 0x000000b8, 0x000002b9, 0x000002ba,
-0x000002c2, 0x000002cf, 0x000002d2, 0x000002df, 0x000002e5,
-0x000002ed, 0x00000374, 0x00000375, 0x00000384, 0x00000385,
-0x00001fbd, 0x00001fbd, 0x00001fbf, 0x00001fc1, 0x00001fcd,
-0x00001fcf, 0x00001fdd, 0x00001fdf, 0x00001fed, 0x00001fef,
-0x00001ffd, 0x00001ffe, 0x0000309b, 0x0000309c, 0x0000ff3e,
-0x0000ff3e, 0x0000ff40, 0x0000ff40, 0x0000ffe3, 0x0000ffe3,
-0x000000a6, 0x000000a7, 0x000000a9, 0x000000a9,
-0x000000ae, 0x000000ae, 0x000000b0, 0x000000b0, 0x000000b6,
-0x000000b6, 0x00000482, 0x00000482, 0x000006e9, 0x000006e9,
-0x000006fd, 0x000006fe, 0x000009fa, 0x000009fa, 0x00000b70,
-0x00000b70, 0x00000f01, 0x00000f03, 0x00000f13, 0x00000f17,
-0x00000f1a, 0x00000f1f, 0x00000f34, 0x00000f34, 0x00000f36,
-0x00000f36, 0x00000f38, 0x00000f38, 0x00000fbe, 0x00000fc5,
-0x00000fc7, 0x00000fcc, 0x00000fcf, 0x00000fcf, 0x00002100,
-0x00002101, 0x00002103, 0x00002106, 0x00002108, 0x00002109,
-0x00002114, 0x00002114, 0x00002116, 0x00002118, 0x0000211e,
-0x00002123, 0x00002125, 0x00002125, 0x00002127, 0x00002127,
-0x00002129, 0x00002129, 0x0000212e, 0x0000212e, 0x00002132,
-0x00002132, 0x0000213a, 0x0000213a, 0x0000214a, 0x0000214a,
-0x00002195, 0x00002199, 0x0000219c, 0x0000219f, 0x000021a1,
-0x000021a2, 0x000021a4, 0x000021a5, 0x000021a7, 0x000021ad,
-0x000021af, 0x000021cd, 0x000021d0, 0x000021d1, 0x000021d3,
-0x000021d3, 0x000021d5, 0x000021f3, 0x00002300, 0x00002307,
-0x0000230c, 0x0000231f, 0x00002322, 0x00002328, 0x0000232b,
-0x0000237b, 0x0000237d, 0x0000239a, 0x000023b7, 0x000023ce,
-0x00002400, 0x00002426, 0x00002440, 0x0000244a, 0x0000249c,
-0x000024e9, 0x00002500, 0x000025b6, 0x000025b8, 0x000025c0,
-0x000025c2, 0x000025f7, 0x00002600, 0x00002613, 0x00002616,
-0x00002617, 0x00002619, 0x0000266e, 0x00002670, 0x0000267d,
-0x00002680, 0x00002689, 0x00002701, 0x00002704, 0x00002706,
-0x00002709, 0x0000270c, 0x00002727, 0x00002729, 0x0000274b,
-0x0000274d, 0x0000274d, 0x0000274f, 0x00002752, 0x00002756,
-0x00002756, 0x00002758, 0x0000275e, 0x00002761, 0x00002767,
-0x00002794, 0x00002794, 0x00002798, 0x000027af, 0x000027b1,
-0x000027be, 0x00002800, 0x000028ff, 0x00002e80, 0x00002e99,
-0x00002e9b, 0x00002ef3, 0x00002f00, 0x00002fd5, 0x00002ff0,
-0x00002ffb, 0x00003004, 0x00003004, 0x00003012, 0x00003013,
-0x00003020, 0x00003020, 0x00003036, 0x00003037, 0x0000303e,
-0x0000303f, 0x00003190, 0x00003191, 0x00003196, 0x0000319f,
-0x00003200, 0x0000321c, 0x0000322a, 0x00003243, 0x00003260,
-0x0000327b, 0x0000327f, 0x0000327f, 0x0000328a, 0x000032b0,
-0x000032c0, 0x000032cb, 0x000032d0, 0x000032fe, 0x00003300,
-0x00003376, 0x0000337b, 0x000033dd, 0x000033e0, 0x000033fe,
-0x0000a490, 0x0000a4c6, 0x0000ffe4, 0x0000ffe4, 0x0000ffe8,
-0x0000ffe8, 0x0000ffed, 0x0000ffee, 0x0000fffc, 0x0000fffd,
-0x0001d000, 0x0001d0f5, 0x0001d100, 0x0001d126, 0x0001d12a,
-0x0001d164, 0x0001d16a, 0x0001d16c, 0x0001d183, 0x0001d184,
-0x0001d18c, 0x0001d1a9, 0x0001d1ae, 0x0001d1dd,
-0x00000041, 0x0000005a, 0x00000061, 0x0000007a,
-0x000000aa, 0x000000aa, 0x000000b5, 0x000000b5, 0x000000ba,
-0x000000ba, 0x000000c0, 0x000000d6, 0x000000d8, 0x000000f6,
-0x000000f8, 0x00000220, 0x00000222, 0x00000233, 0x00000250,
-0x000002ad, 0x000002b0, 0x000002b8, 0x000002bb, 0x000002c1,
-0x000002d0, 0x000002d1, 0x000002e0, 0x000002e4, 0x000002ee,
-0x000002ee, 0x0000037a, 0x0000037a, 0x00000386, 0x00000386,
-0x00000388, 0x0000038a, 0x0000038c, 0x0000038c, 0x0000038e,
-0x000003a1, 0x000003a3, 0x000003ce, 0x000003d0, 0x000003f5,
-0x00000400, 0x00000482, 0x0000048a, 0x000004ce, 0x000004d0,
-0x000004f5, 0x000004f8, 0x000004f9, 0x00000500, 0x0000050f,
-0x00000531, 0x00000556, 0x00000559, 0x0000055f, 0x00000561,
-0x00000587, 0x00000589, 0x00000589, 0x00000903, 0x00000903,
-0x00000905, 0x00000939, 0x0000093d, 0x00000940, 0x00000949,
-0x0000094c, 0x00000950, 0x00000950, 0x00000958, 0x00000961,
-0x00000964, 0x00000970, 0x00000982, 0x00000983, 0x00000985,
-0x0000098c, 0x0000098f, 0x00000990, 0x00000993, 0x000009a8,
-0x000009aa, 0x000009b0, 0x000009b2, 0x000009b2, 0x000009b6,
-0x000009b9, 0x000009be, 0x000009c0, 0x000009c7, 0x000009c8,
-0x000009cb, 0x000009cc, 0x000009d7, 0x000009d7, 0x000009dc,
-0x000009dd, 0x000009df, 0x000009e1, 0x000009e6, 0x000009f1,
-0x000009f4, 0x000009fa, 0x00000a05, 0x00000a0a, 0x00000a0f,
-0x00000a10, 0x00000a13, 0x00000a28, 0x00000a2a, 0x00000a30,
-0x00000a32, 0x00000a33, 0x00000a35, 0x00000a36, 0x00000a38,
-0x00000a39, 0x00000a3e, 0x00000a40, 0x00000a59, 0x00000a5c,
-0x00000a5e, 0x00000a5e, 0x00000a66, 0x00000a6f, 0x00000a72,
-0x00000a74, 0x00000a83, 0x00000a83, 0x00000a85, 0x00000a8b,
-0x00000a8d, 0x00000a8d, 0x00000a8f, 0x00000a91, 0x00000a93,
-0x00000aa8, 0x00000aaa, 0x00000ab0, 0x00000ab2, 0x00000ab3,
-0x00000ab5, 0x00000ab9, 0x00000abd, 0x00000ac0, 0x00000ac9,
-0x00000ac9, 0x00000acb, 0x00000acc, 0x00000ad0, 0x00000ad0,
-0x00000ae0, 0x00000ae0, 0x00000ae6, 0x00000aef, 0x00000b02,
-0x00000b03, 0x00000b05, 0x00000b0c, 0x00000b0f, 0x00000b10,
-0x00000b13, 0x00000b28, 0x00000b2a, 0x00000b30, 0x00000b32,
-0x00000b33, 0x00000b36, 0x00000b39, 0x00000b3d, 0x00000b3e,
-0x00000b40, 0x00000b40, 0x00000b47, 0x00000b48, 0x00000b4b,
-0x00000b4c, 0x00000b57, 0x00000b57, 0x00000b5c, 0x00000b5d,
-0x00000b5f, 0x00000b61, 0x00000b66, 0x00000b70, 0x00000b83,
-0x00000b83, 0x00000b85, 0x00000b8a, 0x00000b8e, 0x00000b90,
-0x00000b92, 0x00000b95, 0x00000b99, 0x00000b9a, 0x00000b9c,
-0x00000b9c, 0x00000b9e, 0x00000b9f, 0x00000ba3, 0x00000ba4,
-0x00000ba8, 0x00000baa, 0x00000bae, 0x00000bb5, 0x00000bb7,
-0x00000bb9, 0x00000bbe, 0x00000bbf, 0x00000bc1, 0x00000bc2,
-0x00000bc6, 0x00000bc8, 0x00000bca, 0x00000bcc, 0x00000bd7,
-0x00000bd7, 0x00000be7, 0x00000bf2, 0x00000c01, 0x00000c03,
-0x00000c05, 0x00000c0c, 0x00000c0e, 0x00000c10, 0x00000c12,
-0x00000c28, 0x00000c2a, 0x00000c33, 0x00000c35, 0x00000c39,
-0x00000c41, 0x00000c44, 0x00000c60, 0x00000c61, 0x00000c66,
-0x00000c6f, 0x00000c82, 0x00000c83, 0x00000c85, 0x00000c8c,
-0x00000c8e, 0x00000c90, 0x00000c92, 0x00000ca8, 0x00000caa,
-0x00000cb3, 0x00000cb5, 0x00000cb9, 0x00000cbe, 0x00000cbe,
-0x00000cc0, 0x00000cc4, 0x00000cc7, 0x00000cc8, 0x00000cca,
-0x00000ccb, 0x00000cd5, 0x00000cd6, 0x00000cde, 0x00000cde,
-0x00000ce0, 0x00000ce1, 0x00000ce6, 0x00000cef, 0x00000d02,
-0x00000d03, 0x00000d05, 0x00000d0c, 0x00000d0e, 0x00000d10,
-0x00000d12, 0x00000d28, 0x00000d2a, 0x00000d39, 0x00000d3e,
-0x00000d40, 0x00000d46, 0x00000d48, 0x00000d4a, 0x00000d4c,
-0x00000d57, 0x00000d57, 0x00000d60, 0x00000d61, 0x00000d66,
-0x00000d6f, 0x00000d82, 0x00000d83, 0x00000d85, 0x00000d96,
-0x00000d9a, 0x00000db1, 0x00000db3, 0x00000dbb, 0x00000dbd,
-0x00000dbd, 0x00000dc0, 0x00000dc6, 0x00000dcf, 0x00000dd1,
-0x00000dd8, 0x00000ddf, 0x00000df2, 0x00000df4, 0x00000e01,
-0x00000e30, 0x00000e32, 0x00000e33, 0x00000e40, 0x00000e46,
-0x00000e4f, 0x00000e5b, 0x00000e81, 0x00000e82, 0x00000e84,
-0x00000e84, 0x00000e87, 0x00000e88, 0x00000e8a, 0x00000e8a,
-0x00000e8d, 0x00000e8d, 0x00000e94, 0x00000e97, 0x00000e99,
-0x00000e9f, 0x00000ea1, 0x00000ea3, 0x00000ea5, 0x00000ea5,
-0x00000ea7, 0x00000ea7, 0x00000eaa, 0x00000eab, 0x00000ead,
-0x00000eb0, 0x00000eb2, 0x00000eb3, 0x00000ebd, 0x00000ebd,
-0x00000ec0, 0x00000ec4, 0x00000ec6, 0x00000ec6, 0x00000ed0,
-0x00000ed9, 0x00000edc, 0x00000edd, 0x00000f00, 0x00000f17,
-0x00000f1a, 0x00000f34, 0x00000f36, 0x00000f36, 0x00000f38,
-0x00000f38, 0x00000f3e, 0x00000f47, 0x00000f49, 0x00000f6a,
-0x00000f7f, 0x00000f7f, 0x00000f85, 0x00000f85, 0x00000f88,
-0x00000f8b, 0x00000fbe, 0x00000fc5, 0x00000fc7, 0x00000fcc,
-0x00000fcf, 0x00000fcf, 0x00001000, 0x00001021, 0x00001023,
-0x00001027, 0x00001029, 0x0000102a, 0x0000102c, 0x0000102c,
-0x00001031, 0x00001031, 0x00001038, 0x00001038, 0x00001040,
-0x00001057, 0x000010a0, 0x000010c5, 0x000010d0, 0x000010f8,
-0x000010fb, 0x000010fb, 0x00001100, 0x00001159, 0x0000115f,
-0x000011a2, 0x000011a8, 0x000011f9, 0x00001200, 0x00001206,
-0x00001208, 0x00001246, 0x00001248, 0x00001248, 0x0000124a,
-0x0000124d, 0x00001250, 0x00001256, 0x00001258, 0x00001258,
-0x0000125a, 0x0000125d, 0x00001260, 0x00001286, 0x00001288,
-0x00001288, 0x0000128a, 0x0000128d, 0x00001290, 0x000012ae,
-0x000012b0, 0x000012b0, 0x000012b2, 0x000012b5, 0x000012b8,
-0x000012be, 0x000012c0, 0x000012c0, 0x000012c2, 0x000012c5,
-0x000012c8, 0x000012ce, 0x000012d0, 0x000012d6, 0x000012d8,
-0x000012ee, 0x000012f0, 0x0000130e, 0x00001310, 0x00001310,
-0x00001312, 0x00001315, 0x00001318, 0x0000131e, 0x00001320,
-0x00001346, 0x00001348, 0x0000135a, 0x00001361, 0x0000137c,
-0x000013a0, 0x000013f4, 0x00001401, 0x00001676, 0x00001681,
-0x0000169a, 0x000016a0, 0x000016f0, 0x00001700, 0x0000170c,
-0x0000170e, 0x00001711, 0x00001720, 0x00001731, 0x00001735,
-0x00001736, 0x00001740, 0x00001751, 0x00001760, 0x0000176c,
-0x0000176e, 0x00001770, 0x00001780, 0x000017b6, 0x000017be,
-0x000017c5, 0x000017c7, 0x000017c8, 0x000017d4, 0x000017da,
-0x000017dc, 0x000017dc, 0x000017e0, 0x000017e9, 0x00001810,
-0x00001819, 0x00001820, 0x00001877, 0x00001880, 0x000018a8,
-0x00001e00, 0x00001e9b, 0x00001ea0, 0x00001ef9, 0x00001f00,
-0x00001f15, 0x00001f18, 0x00001f1d, 0x00001f20, 0x00001f45,
-0x00001f48, 0x00001f4d, 0x00001f50, 0x00001f57, 0x00001f59,
-0x00001f59, 0x00001f5b, 0x00001f5b, 0x00001f5d, 0x00001f5d,
-0x00001f5f, 0x00001f7d, 0x00001f80, 0x00001fb4, 0x00001fb6,
-0x00001fbc, 0x00001fbe, 0x00001fbe, 0x00001fc2, 0x00001fc4,
-0x00001fc6, 0x00001fcc, 0x00001fd0, 0x00001fd3, 0x00001fd6,
-0x00001fdb, 0x00001fe0, 0x00001fec, 0x00001ff2, 0x00001ff4,
-0x00001ff6, 0x00001ffc, 0x0000200e, 0x0000200e, 0x00002071,
-0x00002071, 0x0000207f, 0x0000207f, 0x00002102, 0x00002102,
-0x00002107, 0x00002107, 0x0000210a, 0x00002113, 0x00002115,
-0x00002115, 0x00002119, 0x0000211d, 0x00002124, 0x00002124,
-0x00002126, 0x00002126, 0x00002128, 0x00002128, 0x0000212a,
-0x0000212d, 0x0000212f, 0x00002131, 0x00002133, 0x00002139,
-0x0000213d, 0x0000213f, 0x00002145, 0x00002149, 0x00002160,
-0x00002183, 0x00002336, 0x0000237a, 0x00002395, 0x00002395,
-0x0000249c, 0x000024e9, 0x00003005, 0x00003007, 0x00003021,
-0x00003029, 0x00003031, 0x00003035, 0x00003038, 0x0000303c,
-0x00003041, 0x00003096, 0x0000309d, 0x0000309f, 0x000030a1,
-0x000030fa, 0x000030fc, 0x000030ff, 0x00003105, 0x0000312c,
-0x00003131, 0x0000318e, 0x00003190, 0x000031b7, 0x000031f0,
-0x0000321c, 0x00003220, 0x00003243, 0x00003260, 0x0000327b,
-0x0000327f, 0x000032b0, 0x000032c0, 0x000032cb, 0x000032d0,
-0x000032fe, 0x00003300, 0x00003376, 0x0000337b, 0x000033dd,
-0x000033e0, 0x000033fe, 0x00003400, 0x00003400, 0x00004db5,
-0x00004db5, 0x00004e00, 0x0000a48c, 0x0000ac00, 0x0000d7a3,
-0x0000e000, 0x0000fb06, 0x0000fb13, 0x0000fb17, 0x0000ff21,
-0x0000ff3a, 0x0000ff41, 0x0000ff5a, 0x0000ff66, 0x0000ffbe,
-0x0000ffc2, 0x0000ffc7, 0x0000ffca, 0x0000ffcf, 0x0000ffd2,
-0x0000ffd7, 0x0000ffda, 0x0000ffdc, 0x00010000, 0x0010ffff,
-0x000005be, 0x000005be, 0x000005c0, 0x000005c0,
-0x000005c3, 0x000005c3, 0x000005d0, 0x000005ea, 0x000005f0,
-0x000005f4, 0x0000200f, 0x0000200f, 0x0000fb1d, 0x0000fb1d,
-0x0000fb1f, 0x0000fb28, 0x0000fb2a, 0x0000fb36, 0x0000fb38,
-0x0000fb3c, 0x0000fb3e, 0x0000fb3e, 0x0000fb40, 0x0000fb41,
-0x0000fb43, 0x0000fb44, 0x0000fb46, 0x0000fb4f,
-0x00000030, 0x00000039, 0x000000b2, 0x000000b3,
-0x000000b9, 0x000000b9, 0x000006f0, 0x000006f9, 0x00002070,
-0x00002070, 0x00002074, 0x00002079, 0x00002080, 0x00002089,
-0x00002460, 0x0000249b, 0x000024ea, 0x000024ea, 0x0000ff10,
-0x0000ff19, 0x0001d7ce, 0x0001d7ff,
-0x0000002f, 0x0000002f, 0x0000ff0f, 0x0000ff0f,
-0x00000023, 0x00000025, 0x0000002b, 0x0000002b,
-0x0000002d, 0x0000002d, 0x000000a2, 0x000000a5, 0x000000b0,
-0x000000b1, 0x0000066a, 0x0000066a, 0x000009f2, 0x000009f3,
-0x00000e3f, 0x00000e3f, 0x000017db, 0x000017db, 0x00002030,
-0x00002034, 0x0000207a, 0x0000207b, 0x0000208a, 0x0000208b,
-0x000020a0, 0x000020b1, 0x0000212e, 0x0000212e, 0x00002212,
-0x00002213, 0x0000fb29, 0x0000fb29, 0x0000fe5f, 0x0000fe5f,
-0x0000fe62, 0x0000fe63, 0x0000fe69, 0x0000fe6a, 0x0000ff03,
-0x0000ff05, 0x0000ff0b, 0x0000ff0b, 0x0000ff0d, 0x0000ff0d,
-0x0000ffe0, 0x0000ffe1, 0x0000ffe5, 0x0000ffe6,
-0x00000660, 0x00000669, 0x0000066b, 0x0000066c,
-0x0000002c, 0x0000002c, 0x0000002e, 0x0000002e,
-0x0000003a, 0x0000003a, 0x000000a0, 0x000000a0, 0x0000060c,
-0x0000060c, 0x0000fe50, 0x0000fe50, 0x0000fe52, 0x0000fe52,
-0x0000fe55, 0x0000fe55, 0x0000ff0c, 0x0000ff0c, 0x0000ff0e,
-0x0000ff0e, 0x0000ff1a, 0x0000ff1a,
-0x0000000a, 0x0000000a, 0x0000000d, 0x0000000d,
-0x0000001c, 0x0000001e, 0x00000085, 0x00000085, 0x00002029,
-0x00002029,
-0x00000009, 0x00000009, 0x0000000b, 0x0000000b,
-0x0000001f, 0x0000001f,
-0x0000000c, 0x0000000c, 0x00000020, 0x00000020,
-0x00001680, 0x00001680, 0x00002000, 0x0000200a, 0x00002028,
-0x00002028, 0x0000202f, 0x0000202f, 0x0000205f, 0x0000205f,
-0x00003000, 0x00003000,
-0x00000000, 0x00000008, 0x0000000e, 0x0000001b,
-0x00000021, 0x00000022, 0x00000026, 0x0000002a, 0x0000003b,
-0x00000040, 0x0000005b, 0x00000060, 0x0000007b, 0x00000084,
-0x00000086, 0x0000009f, 0x000000a1, 0x000000a1, 0x000000a6,
-0x000000a9, 0x000000ab, 0x000000af, 0x000000b4, 0x000000b4,
-0x000000b6, 0x000000b8, 0x000000bb, 0x000000bf, 0x000000d7,
-0x000000d7, 0x000000f7, 0x000000f7, 0x000002b9, 0x000002ba,
-0x000002c2, 0x000002cf, 0x000002d2, 0x000002df, 0x000002e5,
-0x000002ed, 0x00000300, 0x0000034f, 0x00000360, 0x0000036f,
-0x00000374, 0x00000375, 0x0000037e, 0x0000037e, 0x00000384,
-0x00000385, 0x00000387, 0x00000387, 0x000003f6, 0x000003f6,
-0x00000483, 0x00000486, 0x00000488, 0x00000489, 0x0000058a,
-0x0000058a, 0x00000591, 0x000005a1, 0x000005a3, 0x000005b9,
-0x000005bb, 0x000005bd, 0x000005bf, 0x000005bf, 0x000005c1,
-0x000005c2, 0x000005c4, 0x000005c4, 0x0000064b, 0x00000655,
-0x00000670, 0x00000670, 0x000006d6, 0x000006dc, 0x000006de,
-0x000006e4, 0x000006e7, 0x000006ed, 0x0000070f, 0x0000070f,
-0x00000711, 0x00000711, 0x00000730, 0x0000074a, 0x000007a6,
-0x000007b0, 0x00000901, 0x00000902, 0x0000093c, 0x0000093c,
-0x00000941, 0x00000948, 0x0000094d, 0x0000094d, 0x00000951,
-0x00000954, 0x00000962, 0x00000963, 0x00000981, 0x00000981,
-0x000009bc, 0x000009bc, 0x000009c1, 0x000009c4, 0x000009cd,
-0x000009cd, 0x000009e2, 0x000009e3, 0x00000a02, 0x00000a02,
-0x00000a3c, 0x00000a3c, 0x00000a41, 0x00000a42, 0x00000a47,
-0x00000a48, 0x00000a4b, 0x00000a4d, 0x00000a70, 0x00000a71,
-0x00000a81, 0x00000a82, 0x00000abc, 0x00000abc, 0x00000ac1,
-0x00000ac5, 0x00000ac7, 0x00000ac8, 0x00000acd, 0x00000acd,
-0x00000b01, 0x00000b01, 0x00000b3c, 0x00000b3c, 0x00000b3f,
-0x00000b3f, 0x00000b41, 0x00000b43, 0x00000b4d, 0x00000b4d,
-0x00000b56, 0x00000b56, 0x00000b82, 0x00000b82, 0x00000bc0,
-0x00000bc0, 0x00000bcd, 0x00000bcd, 0x00000c3e, 0x00000c40,
-0x00000c46, 0x00000c48, 0x00000c4a, 0x00000c4d, 0x00000c55,
-0x00000c56, 0x00000cbf, 0x00000cbf, 0x00000cc6, 0x00000cc6,
-0x00000ccc, 0x00000ccd, 0x00000d41, 0x00000d43, 0x00000d4d,
-0x00000d4d, 0x00000dca, 0x00000dca, 0x00000dd2, 0x00000dd4,
-0x00000dd6, 0x00000dd6, 0x00000e31, 0x00000e31, 0x00000e34,
-0x00000e3a, 0x00000e47, 0x00000e4e, 0x00000eb1, 0x00000eb1,
-0x00000eb4, 0x00000eb9, 0x00000ebb, 0x00000ebc, 0x00000ec8,
-0x00000ecd, 0x00000f18, 0x00000f19, 0x00000f35, 0x00000f35,
-0x00000f37, 0x00000f37, 0x00000f39, 0x00000f3d, 0x00000f71,
-0x00000f7e, 0x00000f80, 0x00000f84, 0x00000f86, 0x00000f87,
-0x00000f90, 0x00000f97, 0x00000f99, 0x00000fbc, 0x00000fc6,
-0x00000fc6, 0x0000102d, 0x00001030, 0x00001032, 0x00001032,
-0x00001036, 0x00001037, 0x00001039, 0x00001039, 0x00001058,
-0x00001059, 0x0000169b, 0x0000169c, 0x00001712, 0x00001714,
-0x00001732, 0x00001734, 0x00001752, 0x00001753, 0x00001772,
-0x00001773, 0x000017b7, 0x000017bd, 0x000017c6, 0x000017c6,
-0x000017c9, 0x000017d3, 0x00001800, 0x0000180e, 0x000018a9,
-0x000018a9, 0x00001fbd, 0x00001fbd, 0x00001fbf, 0x00001fc1,
-0x00001fcd, 0x00001fcf, 0x00001fdd, 0x00001fdf, 0x00001fed,
-0x00001fef, 0x00001ffd, 0x00001ffe, 0x0000200b, 0x0000200d,
-0x00002010, 0x00002027, 0x0000202a, 0x0000202e, 0x00002035,
-0x00002052, 0x00002057, 0x00002057, 0x00002060, 0x00002063,
-0x0000206a, 0x0000206f, 0x0000207c, 0x0000207e, 0x0000208c,
-0x0000208e, 0x000020d0, 0x000020ea, 0x00002100, 0x00002101,
-0x00002103, 0x00002106, 0x00002108, 0x00002109, 0x00002114,
-0x00002114, 0x00002116, 0x00002118, 0x0000211e, 0x00002123,
-0x00002125, 0x00002125, 0x00002127, 0x00002127, 0x00002129,
-0x00002129, 0x00002132, 0x00002132, 0x0000213a, 0x0000213a,
-0x00002140, 0x00002144, 0x0000214a, 0x0000214b, 0x00002153,
-0x0000215f, 0x00002190, 0x00002211, 0x00002214, 0x00002335,
-0x0000237b, 0x00002394, 0x00002396, 0x000023ce, 0x00002400,
-0x00002426, 0x00002440, 0x0000244a, 0x000024eb, 0x000024fe,
-0x00002500, 0x00002613, 0x00002616, 0x00002617, 0x00002619,
-0x0000267d, 0x00002680, 0x00002689, 0x00002701, 0x00002704,
-0x00002706, 0x00002709, 0x0000270c, 0x00002727, 0x00002729,
-0x0000274b, 0x0000274d, 0x0000274d, 0x0000274f, 0x00002752,
-0x00002756, 0x00002756, 0x00002758, 0x0000275e, 0x00002761,
-0x00002794, 0x00002798, 0x000027af, 0x000027b1, 0x000027be,
-0x000027d0, 0x000027eb, 0x000027f0, 0x00002aff, 0x00002e80,
-0x00002e99, 0x00002e9b, 0x00002ef3, 0x00002f00, 0x00002fd5,
-0x00002ff0, 0x00002ffb, 0x00003001, 0x00003004, 0x00003008,
-0x00003020, 0x0000302a, 0x00003030, 0x00003036, 0x00003037,
-0x0000303d, 0x0000303f, 0x00003099, 0x0000309c, 0x000030a0,
-0x000030a0, 0x000030fb, 0x000030fb, 0x00003251, 0x0000325f,
-0x000032b1, 0x000032bf, 0x0000a490, 0x0000a4c6, 0x0000fb1e,
-0x0000fb1e, 0x0000fd3e, 0x0000fd3f, 0x0000fe00, 0x0000fe0f,
-0x0000fe20, 0x0000fe23, 0x0000fe30, 0x0000fe46, 0x0000fe49,
-0x0000fe4f, 0x0000fe51, 0x0000fe51, 0x0000fe54, 0x0000fe54,
-0x0000fe56, 0x0000fe5e, 0x0000fe60, 0x0000fe61, 0x0000fe64,
-0x0000fe66, 0x0000fe68, 0x0000fe68, 0x0000fe6b, 0x0000fe6b,
-0x0000feff, 0x0000feff, 0x0000ff01, 0x0000ff02, 0x0000ff06,
-0x0000ff0a, 0x0000ff1b, 0x0000ff20, 0x0000ff3b, 0x0000ff40,
-0x0000ff5b, 0x0000ff65, 0x0000ffe2, 0x0000ffe4, 0x0000ffe8,
-0x0000ffee, 0x0000fff9, 0x0000fffd, 0x0001d167, 0x0001d169,
-0x0001d173, 0x0001d182, 0x0001d185, 0x0001d18b, 0x0001d1aa,
-0x0001d1ad, 0x000e0001, 0x000e0001, 0x000e0020, 0x000e007f,
-0x000000c0, 0x000000c5, 0x000000c7, 0x000000cf,
-0x000000d1, 0x000000d6, 0x000000d9, 0x000000dd, 0x000000e0,
-0x000000e5, 0x000000e7, 0x000000ef, 0x000000f1, 0x000000f6,
-0x000000f9, 0x000000fd, 0x000000ff, 0x0000010f, 0x00000112,
-0x00000125, 0x00000128, 0x00000130, 0x00000134, 0x00000137,
-0x00000139, 0x0000013e, 0x00000143, 0x00000148, 0x0000014c,
-0x00000151, 0x00000154, 0x00000165, 0x00000168, 0x0000017e,
-0x000001a0, 0x000001a1, 0x000001af, 0x000001b0, 0x000001cd,
-0x000001dc, 0x000001de, 0x000001e3, 0x000001e6, 0x000001f0,
-0x000001f4, 0x000001f5, 0x000001f8, 0x0000021b, 0x0000021e,
-0x0000021f, 0x00000226, 0x00000233, 0x00000340, 0x00000341,
-0x00000343, 0x00000344, 0x00000374, 0x00000374, 0x0000037e,
-0x0000037e, 0x00000385, 0x0000038a, 0x0000038c, 0x0000038c,
-0x0000038e, 0x00000390, 0x000003aa, 0x000003b0, 0x000003ca,
-0x000003ce, 0x000003d3, 0x000003d4, 0x00000400, 0x00000401,
-0x00000403, 0x00000403, 0x00000407, 0x00000407, 0x0000040c,
-0x0000040e, 0x00000419, 0x00000419, 0x00000439, 0x00000439,
-0x00000450, 0x00000451, 0x00000453, 0x00000453, 0x00000457,
-0x00000457, 0x0000045c, 0x0000045e, 0x00000476, 0x00000477,
-0x000004c1, 0x000004c2, 0x000004d0, 0x000004d3, 0x000004d6,
-0x000004d7, 0x000004da, 0x000004df, 0x000004e2, 0x000004e7,
-0x000004ea, 0x000004f5, 0x000004f8, 0x000004f9, 0x00000622,
-0x00000626, 0x000006c0, 0x000006c0, 0x000006c2, 0x000006c2,
-0x000006d3, 0x000006d3, 0x00000929, 0x00000929, 0x00000931,
-0x00000931, 0x00000934, 0x00000934, 0x00000958, 0x0000095f,
-0x000009cb, 0x000009cc, 0x000009dc, 0x000009dd, 0x000009df,
-0x000009df, 0x00000a33, 0x00000a33, 0x00000a36, 0x00000a36,
-0x00000a59, 0x00000a5b, 0x00000a5e, 0x00000a5e, 0x00000b48,
-0x00000b48, 0x00000b4b, 0x00000b4c, 0x00000b5c, 0x00000b5d,
-0x00000b94, 0x00000b94, 0x00000bca, 0x00000bcc, 0x00000c48,
-0x00000c48, 0x00000cc0, 0x00000cc0, 0x00000cc7, 0x00000cc8,
-0x00000cca, 0x00000ccb, 0x00000d4a, 0x00000d4c, 0x00000dda,
-0x00000dda, 0x00000ddc, 0x00000dde, 0x00000f43, 0x00000f43,
-0x00000f4d, 0x00000f4d, 0x00000f52, 0x00000f52, 0x00000f57,
-0x00000f57, 0x00000f5c, 0x00000f5c, 0x00000f69, 0x00000f69,
-0x00000f73, 0x00000f73, 0x00000f75, 0x00000f76, 0x00000f78,
-0x00000f78, 0x00000f81, 0x00000f81, 0x00000f93, 0x00000f93,
-0x00000f9d, 0x00000f9d, 0x00000fa2, 0x00000fa2, 0x00000fa7,
-0x00000fa7, 0x00000fac, 0x00000fac, 0x00000fb9, 0x00000fb9,
-0x00001026, 0x00001026, 0x00001e00, 0x00001e99, 0x00001e9b,
-0x00001e9b, 0x00001ea0, 0x00001ef9, 0x00001f00, 0x00001f15,
-0x00001f18, 0x00001f1d, 0x00001f20, 0x00001f45, 0x00001f48,
-0x00001f4d, 0x00001f50, 0x00001f57, 0x00001f59, 0x00001f59,
-0x00001f5b, 0x00001f5b, 0x00001f5d, 0x00001f5d, 0x00001f5f,
-0x00001f7d, 0x00001f80, 0x00001fb4, 0x00001fb6, 0x00001fbc,
-0x00001fbe, 0x00001fbe, 0x00001fc1, 0x00001fc4, 0x00001fc6,
-0x00001fd3, 0x00001fd6, 0x00001fdb, 0x00001fdd, 0x00001fef,
-0x00001ff2, 0x00001ff4, 0x00001ff6, 0x00001ffd, 0x00002000,
-0x00002001, 0x00002126, 0x00002126, 0x0000212a, 0x0000212b,
-0x0000219a, 0x0000219b, 0x000021ae, 0x000021ae, 0x000021cd,
-0x000021cf, 0x00002204, 0x00002204, 0x00002209, 0x00002209,
-0x0000220c, 0x0000220c, 0x00002224, 0x00002224, 0x00002226,
-0x00002226, 0x00002241, 0x00002241, 0x00002244, 0x00002244,
-0x00002247, 0x00002247, 0x00002249, 0x00002249, 0x00002260,
-0x00002260, 0x00002262, 0x00002262, 0x0000226d, 0x00002271,
-0x00002274, 0x00002275, 0x00002278, 0x00002279, 0x00002280,
-0x00002281, 0x00002284, 0x00002285, 0x00002288, 0x00002289,
-0x000022ac, 0x000022af, 0x000022e0, 0x000022e3, 0x000022ea,
-0x000022ed, 0x00002329, 0x0000232a, 0x00002adc, 0x00002adc,
-0x0000304c, 0x0000304c, 0x0000304e, 0x0000304e, 0x00003050,
-0x00003050, 0x00003052, 0x00003052, 0x00003054, 0x00003054,
-0x00003056, 0x00003056, 0x00003058, 0x00003058, 0x0000305a,
-0x0000305a, 0x0000305c, 0x0000305c, 0x0000305e, 0x0000305e,
-0x00003060, 0x00003060, 0x00003062, 0x00003062, 0x00003065,
-0x00003065, 0x00003067, 0x00003067, 0x00003069, 0x00003069,
-0x00003070, 0x00003071, 0x00003073, 0x00003074, 0x00003076,
-0x00003077, 0x00003079, 0x0000307a, 0x0000307c, 0x0000307d,
-0x00003094, 0x00003094, 0x0000309e, 0x0000309e, 0x000030ac,
-0x000030ac, 0x000030ae, 0x000030ae, 0x000030b0, 0x000030b0,
-0x000030b2, 0x000030b2, 0x000030b4, 0x000030b4, 0x000030b6,
-0x000030b6, 0x000030b8, 0x000030b8, 0x000030ba, 0x000030ba,
-0x000030bc, 0x000030bc, 0x000030be, 0x000030be, 0x000030c0,
-0x000030c0, 0x000030c2, 0x000030c2, 0x000030c5, 0x000030c5,
-0x000030c7, 0x000030c7, 0x000030c9, 0x000030c9, 0x000030d0,
-0x000030d1, 0x000030d3, 0x000030d4, 0x000030d6, 0x000030d7,
-0x000030d9, 0x000030da, 0x000030dc, 0x000030dd, 0x000030f4,
-0x000030f4, 0x000030f7, 0x000030fa, 0x000030fe, 0x000030fe,
-0x0000f902, 0x0000fa0d, 0x0000fa10, 0x0000fa10, 0x0000fa12,
-0x0000fa12, 0x0000fa15, 0x0000fa1e, 0x0000fa20, 0x0000fa20,
-0x0000fa22, 0x0000fa22, 0x0000fa25, 0x0000fa26, 0x0000fa2a,
-0x0000fa2d, 0x0000fa30, 0x0000fa6a, 0x0000fb1d, 0x0000fb1d,
-0x0000fb1f, 0x0000fb1f, 0x0000fb2a, 0x0000fb36, 0x0000fb38,
-0x0000fb3c, 0x0000fb3e, 0x0000fb3e, 0x0000fb40, 0x0000fb41,
-0x0000fb43, 0x0000fb44, 0x0000fb46, 0x0000fb4e, 0x0001d15e,
-0x0001d164, 0x0001d1bb, 0x0001d1c0, 0x0002f800, 0x0002fa1d,
-0x00000000, 0x00000220, 0x00000222, 0x00000233,
-0x00000250, 0x000002ad, 0x000002b0, 0x000002ee, 0x00000300,
-0x0000034f, 0x00000360, 0x0000036f, 0x00000374, 0x00000375,
-0x0000037a, 0x0000037a, 0x0000037e, 0x0000037e, 0x00000384,
-0x0000038a, 0x0000038c, 0x0000038c, 0x0000038e, 0x000003a1,
-0x000003a3, 0x000003ce, 0x000003d0, 0x000003f6, 0x00000400,
-0x00000486, 0x00000488, 0x000004ce, 0x000004d0, 0x000004f5,
-0x000004f8, 0x000004f9, 0x00000500, 0x0000050f, 0x00000531,
-0x00000556, 0x00000559, 0x0000055f, 0x00000561, 0x00000587,
-0x00000589, 0x0000058a, 0x00000591, 0x000005a1, 0x000005a3,
-0x000005b9, 0x000005bb, 0x000005c4, 0x000005d0, 0x000005ea,
-0x000005f0, 0x000005f4, 0x0000060c, 0x0000060c, 0x0000061b,
-0x0000061b, 0x0000061f, 0x0000061f, 0x00000621, 0x0000063a,
-0x00000640, 0x00000655, 0x00000660, 0x000006ed, 0x000006f0,
-0x000006fe, 0x00000700, 0x0000070d, 0x0000070f, 0x0000072c,
-0x00000730, 0x0000074a, 0x00000780, 0x000007b1, 0x00000901,
-0x00000903, 0x00000905, 0x00000939, 0x0000093c, 0x0000094d,
-0x00000950, 0x00000954, 0x00000958, 0x00000970, 0x00000981,
-0x00000983, 0x00000985, 0x0000098c, 0x0000098f, 0x00000990,
-0x00000993, 0x000009a8, 0x000009aa, 0x000009b0, 0x000009b2,
-0x000009b2, 0x000009b6, 0x000009b9, 0x000009bc, 0x000009bc,
-0x000009be, 0x000009c4, 0x000009c7, 0x000009c8, 0x000009cb,
-0x000009cd, 0x000009d7, 0x000009d7, 0x000009dc, 0x000009dd,
-0x000009df, 0x000009e3, 0x000009e6, 0x000009fa, 0x00000a02,
-0x00000a02, 0x00000a05, 0x00000a0a, 0x00000a0f, 0x00000a10,
-0x00000a13, 0x00000a28, 0x00000a2a, 0x00000a30, 0x00000a32,
-0x00000a33, 0x00000a35, 0x00000a36, 0x00000a38, 0x00000a39,
-0x00000a3c, 0x00000a3c, 0x00000a3e, 0x00000a42, 0x00000a47,
-0x00000a48, 0x00000a4b, 0x00000a4d, 0x00000a59, 0x00000a5c,
-0x00000a5e, 0x00000a5e, 0x00000a66, 0x00000a74, 0x00000a81,
-0x00000a83, 0x00000a85, 0x00000a8b, 0x00000a8d, 0x00000a8d,
-0x00000a8f, 0x00000a91, 0x00000a93, 0x00000aa8, 0x00000aaa,
-0x00000ab0, 0x00000ab2, 0x00000ab3, 0x00000ab5, 0x00000ab9,
-0x00000abc, 0x00000ac5, 0x00000ac7, 0x00000ac9, 0x00000acb,
-0x00000acd, 0x00000ad0, 0x00000ad0, 0x00000ae0, 0x00000ae0,
-0x00000ae6, 0x00000aef, 0x00000b01, 0x00000b03, 0x00000b05,
-0x00000b0c, 0x00000b0f, 0x00000b10, 0x00000b13, 0x00000b28,
-0x00000b2a, 0x00000b30, 0x00000b32, 0x00000b33, 0x00000b36,
-0x00000b39, 0x00000b3c, 0x00000b43, 0x00000b47, 0x00000b48,
-0x00000b4b, 0x00000b4d, 0x00000b56, 0x00000b57, 0x00000b5c,
-0x00000b5d, 0x00000b5f, 0x00000b61, 0x00000b66, 0x00000b70,
-0x00000b82, 0x00000b83, 0x00000b85, 0x00000b8a, 0x00000b8e,
-0x00000b90, 0x00000b92, 0x00000b95, 0x00000b99, 0x00000b9a,
-0x00000b9c, 0x00000b9c, 0x00000b9e, 0x00000b9f, 0x00000ba3,
-0x00000ba4, 0x00000ba8, 0x00000baa, 0x00000bae, 0x00000bb5,
-0x00000bb7, 0x00000bb9, 0x00000bbe, 0x00000bc2, 0x00000bc6,
-0x00000bc8, 0x00000bca, 0x00000bcd, 0x00000bd7, 0x00000bd7,
-0x00000be7, 0x00000bf2, 0x00000c01, 0x00000c03, 0x00000c05,
-0x00000c0c, 0x00000c0e, 0x00000c10, 0x00000c12, 0x00000c28,
-0x00000c2a, 0x00000c33, 0x00000c35, 0x00000c39, 0x00000c3e,
-0x00000c44, 0x00000c46, 0x00000c48, 0x00000c4a, 0x00000c4d,
-0x00000c55, 0x00000c56, 0x00000c60, 0x00000c61, 0x00000c66,
-0x00000c6f, 0x00000c82, 0x00000c83, 0x00000c85, 0x00000c8c,
-0x00000c8e, 0x00000c90, 0x00000c92, 0x00000ca8, 0x00000caa,
-0x00000cb3, 0x00000cb5, 0x00000cb9, 0x00000cbe, 0x00000cc4,
-0x00000cc6, 0x00000cc8, 0x00000cca, 0x00000ccd, 0x00000cd5,
-0x00000cd6, 0x00000cde, 0x00000cde, 0x00000ce0, 0x00000ce1,
-0x00000ce6, 0x00000cef, 0x00000d02, 0x00000d03, 0x00000d05,
-0x00000d0c, 0x00000d0e, 0x00000d10, 0x00000d12, 0x00000d28,
-0x00000d2a, 0x00000d39, 0x00000d3e, 0x00000d43, 0x00000d46,
-0x00000d48, 0x00000d4a, 0x00000d4d, 0x00000d57, 0x00000d57,
-0x00000d60, 0x00000d61, 0x00000d66, 0x00000d6f, 0x00000d82,
-0x00000d83, 0x00000d85, 0x00000d96, 0x00000d9a, 0x00000db1,
-0x00000db3, 0x00000dbb, 0x00000dbd, 0x00000dbd, 0x00000dc0,
-0x00000dc6, 0x00000dca, 0x00000dca, 0x00000dcf, 0x00000dd4,
-0x00000dd6, 0x00000dd6, 0x00000dd8, 0x00000ddf, 0x00000df2,
-0x00000df4, 0x00000e01, 0x00000e3a, 0x00000e3f, 0x00000e5b,
-0x00000e81, 0x00000e82, 0x00000e84, 0x00000e84, 0x00000e87,
-0x00000e88, 0x00000e8a, 0x00000e8a, 0x00000e8d, 0x00000e8d,
-0x00000e94, 0x00000e97, 0x00000e99, 0x00000e9f, 0x00000ea1,
-0x00000ea3, 0x00000ea5, 0x00000ea5, 0x00000ea7, 0x00000ea7,
-0x00000eaa, 0x00000eab, 0x00000ead, 0x00000eb9, 0x00000ebb,
-0x00000ebd, 0x00000ec0, 0x00000ec4, 0x00000ec6, 0x00000ec6,
-0x00000ec8, 0x00000ecd, 0x00000ed0, 0x00000ed9, 0x00000edc,
-0x00000edd, 0x00000f00, 0x00000f47, 0x00000f49, 0x00000f6a,
-0x00000f71, 0x00000f8b, 0x00000f90, 0x00000f97, 0x00000f99,
-0x00000fbc, 0x00000fbe, 0x00000fcc, 0x00000fcf, 0x00000fcf,
-0x00001000, 0x00001021, 0x00001023, 0x00001027, 0x00001029,
-0x0000102a, 0x0000102c, 0x00001032, 0x00001036, 0x00001039,
-0x00001040, 0x00001059, 0x000010a0, 0x000010c5, 0x000010d0,
-0x000010f8, 0x000010fb, 0x000010fb, 0x00001100, 0x00001159,
-0x0000115f, 0x000011a2, 0x000011a8, 0x000011f9, 0x00001200,
-0x00001206, 0x00001208, 0x00001246, 0x00001248, 0x00001248,
-0x0000124a, 0x0000124d, 0x00001250, 0x00001256, 0x00001258,
-0x00001258, 0x0000125a, 0x0000125d, 0x00001260, 0x00001286,
-0x00001288, 0x00001288, 0x0000128a, 0x0000128d, 0x00001290,
-0x000012ae, 0x000012b0, 0x000012b0, 0x000012b2, 0x000012b5,
-0x000012b8, 0x000012be, 0x000012c0, 0x000012c0, 0x000012c2,
-0x000012c5, 0x000012c8, 0x000012ce, 0x000012d0, 0x000012d6,
-0x000012d8, 0x000012ee, 0x000012f0, 0x0000130e, 0x00001310,
-0x00001310, 0x00001312, 0x00001315, 0x00001318, 0x0000131e,
-0x00001320, 0x00001346, 0x00001348, 0x0000135a, 0x00001361,
-0x0000137c, 0x000013a0, 0x000013f4, 0x00001401, 0x00001676,
-0x00001680, 0x0000169c, 0x000016a0, 0x000016f0, 0x00001700,
-0x0000170c, 0x0000170e, 0x00001714, 0x00001720, 0x00001736,
-0x00001740, 0x00001753, 0x00001760, 0x0000176c, 0x0000176e,
-0x00001770, 0x00001772, 0x00001773, 0x00001780, 0x000017dc,
-0x000017e0, 0x000017e9, 0x00001800, 0x0000180e, 0x00001810,
-0x00001819, 0x00001820, 0x00001877, 0x00001880, 0x000018a9,
-0x00001e00, 0x00001e9b, 0x00001ea0, 0x00001ef9, 0x00001f00,
-0x00001f15, 0x00001f18, 0x00001f1d, 0x00001f20, 0x00001f45,
-0x00001f48, 0x00001f4d, 0x00001f50, 0x00001f57, 0x00001f59,
-0x00001f59, 0x00001f5b, 0x00001f5b, 0x00001f5d, 0x00001f5d,
-0x00001f5f, 0x00001f7d, 0x00001f80, 0x00001fb4, 0x00001fb6,
-0x00001fc4, 0x00001fc6, 0x00001fd3, 0x00001fd6, 0x00001fdb,
-0x00001fdd, 0x00001fef, 0x00001ff2, 0x00001ff4, 0x00001ff6,
-0x00001ffe, 0x00002000, 0x00002052, 0x00002057, 0x00002057,
-0x0000205f, 0x00002063, 0x0000206a, 0x00002071, 0x00002074,
-0x0000208e, 0x000020a0, 0x000020b1, 0x000020d0, 0x000020ea,
-0x00002100, 0x0000213a, 0x0000213d, 0x0000214b, 0x00002153,
-0x00002183, 0x00002190, 0x000023ce, 0x00002400, 0x00002426,
-0x00002440, 0x0000244a, 0x00002460, 0x000024fe, 0x00002500,
-0x00002613, 0x00002616, 0x00002617, 0x00002619, 0x0000267d,
-0x00002680, 0x00002689, 0x00002701, 0x00002704, 0x00002706,
-0x00002709, 0x0000270c, 0x00002727, 0x00002729, 0x0000274b,
-0x0000274d, 0x0000274d, 0x0000274f, 0x00002752, 0x00002756,
-0x00002756, 0x00002758, 0x0000275e, 0x00002761, 0x00002794,
-0x00002798, 0x000027af, 0x000027b1, 0x000027be, 0x000027d0,
-0x000027eb, 0x000027f0, 0x00002aff, 0x00002e80, 0x00002e99,
-0x00002e9b, 0x00002ef3, 0x00002f00, 0x00002fd5, 0x00002ff0,
-0x00002ffb, 0x00003000, 0x0000303f, 0x00003041, 0x00003096,
-0x00003099, 0x000030ff, 0x00003105, 0x0000312c, 0x00003131,
-0x0000318e, 0x00003190, 0x000031b7, 0x000031f0, 0x0000321c,
-0x00003220, 0x00003243, 0x00003251, 0x0000327b, 0x0000327f,
-0x000032cb, 0x000032d0, 0x000032fe, 0x00003300, 0x00003376,
-0x0000337b, 0x000033dd, 0x000033e0, 0x000033fe, 0x00003400,
-0x00003400, 0x00004db5, 0x00004db5, 0x00004e00, 0x00009fa5,
-0x0000a000, 0x0000a48c, 0x0000a490, 0x0000a4c6, 0x0000ac00,
-0x0000d7a3, 0x0000f900, 0x0000fb06, 0x0000fb13, 0x0000fb17,
-0x0000fb1d, 0x0000fb36, 0x0000fb38, 0x0000fb3c, 0x0000fb3e,
-0x0000fb3e, 0x0000fb40, 0x0000fb41, 0x0000fb43, 0x0000fb44,
-0x0000fb46, 0x0000fbb1, 0x0000fbd3, 0x0000fd3f, 0x0000fd50,
-0x0000fd8f, 0x0000fd92, 0x0000fdc7, 0x0000fdf0, 0x0000fdfc,
-0x0000fe00, 0x0000fe0f, 0x0000fe20, 0x0000fe23, 0x0000fe30,
-0x0000fe46, 0x0000fe49, 0x0000fe52, 0x0000fe54, 0x0000fe66,
-0x0000fe68, 0x0000fe6b, 0x0000fe70, 0x0000fe74, 0x0000fe76,
-0x0000fefc, 0x0000feff, 0x0000feff, 0x0000ff01, 0x0000ffbe,
-0x0000ffc2, 0x0000ffc7, 0x0000ffca, 0x0000ffcf, 0x0000ffd2,
-0x0000ffd7, 0x0000ffda, 0x0000ffdc, 0x0000ffe0, 0x0000ffe6,
-0x0000ffe8, 0x0000ffee, 0x0000fff9, 0x0000fffd, 0x00010300,
-0x0001031e, 0x00010320, 0x00010323, 0x00010330, 0x0001034a,
-0x00010400, 0x00010425, 0x00010428, 0x0001044d, 0x0001d000,
-0x0001d0f5, 0x0001d100, 0x0001d126, 0x0001d12a, 0x0001d1dd,
-0x0001d400, 0x0001d454, 0x0001d456, 0x0001d49c, 0x0001d49e,
-0x0001d49f, 0x0001d4a2, 0x0001d4a2, 0x0001d4a5, 0x0001d4a6,
-0x0001d4a9, 0x0001d4ac, 0x0001d4ae, 0x0001d4b9, 0x0001d4bb,
-0x0001d4bb, 0x0001d4bd, 0x0001d4c0, 0x0001d4c2, 0x0001d4c3,
-0x0001d4c5, 0x0001d505, 0x0001d507, 0x0001d50a, 0x0001d50d,
-0x0001d514, 0x0001d516, 0x0001d51c, 0x0001d51e, 0x0001d539,
-0x0001d53b, 0x0001d53e, 0x0001d540, 0x0001d544, 0x0001d546,
-0x0001d546, 0x0001d54a, 0x0001d550, 0x0001d552, 0x0001d6a3,
-0x0001d6a8, 0x0001d7c9, 0x0001d7ce, 0x0001d7ff, 0x00020000,
-0x00020000, 0x0002a6d6, 0x0002a6d6, 0x0002f800, 0x0002fa1d,
-0x000e0001, 0x000e0001, 0x000e0020, 0x000e007f, 0x000f0000,
-0x000f0000, 0x000ffffd, 0x000ffffd, 0x00100000, 0x00100000,
-0x0010fffd, 0x0010fffd,
-0x000000ab, 0x000000ab, 0x00002018, 0x00002018,
-0x0000201b, 0x0000201c, 0x0000201f, 0x0000201f, 0x00002039,
-0x00002039,
-0x000000bb, 0x000000bb, 0x00002019, 0x00002019,
-0x0000201d, 0x0000201d, 0x0000203a, 0x0000203a,
-0x0000061b, 0x0000061b, 0x0000061f, 0x0000061f,
-0x00000621, 0x0000063a, 0x00000640, 0x0000064a, 0x0000066d,
-0x0000066f, 0x00000671, 0x000006d5, 0x000006dd, 0x000006dd,
-0x000006e5, 0x000006e6, 0x000006fa, 0x000006fe, 0x00000700,
-0x0000070d, 0x00000710, 0x00000710, 0x00000712, 0x0000072c,
-0x00000780, 0x000007a5, 0x000007b1, 0x000007b1, 0x0000fb50,
-0x0000fbb1, 0x0000fbd3, 0x0000fd3d, 0x0000fd50, 0x0000fd8f,
-0x0000fd92, 0x0000fdc7, 0x0000fdf0, 0x0000fdfc, 0x0000fe70,
-0x0000fe74, 0x0000fe76, 0x0000fefc,
-};
-/* }}} */
-/* {{{ case data */
-static unsigned short _uccase_size = 0x05e0;
-static unsigned short _uccase_len[2] = { 0x08bb, 0x08d9 };
-static unsigned long _uccase_map[] = {
-/* upper */
-0x00000041, 0x00000061, 0x00000041,
-0x00000042, 0x00000062, 0x00000042,
-0x00000043, 0x00000063, 0x00000043,
-0x00000044, 0x00000064, 0x00000044,
-0x00000045, 0x00000065, 0x00000045,
-0x00000046, 0x00000066, 0x00000046,
-0x00000047, 0x00000067, 0x00000047,
-0x00000048, 0x00000068, 0x00000048,
-0x00000049, 0x00000069, 0x00000049,
-0x0000004a, 0x0000006a, 0x0000004a,
-0x0000004b, 0x0000006b, 0x0000004b,
-0x0000004c, 0x0000006c, 0x0000004c,
-0x0000004d, 0x0000006d, 0x0000004d,
-0x0000004e, 0x0000006e, 0x0000004e,
-0x0000004f, 0x0000006f, 0x0000004f,
-0x00000050, 0x00000070, 0x00000050,
-0x00000051, 0x00000071, 0x00000051,
-0x00000052, 0x00000072, 0x00000052,
-0x00000053, 0x00000073, 0x00000053,
-0x00000054, 0x00000074, 0x00000054,
-0x00000055, 0x00000075, 0x00000055,
-0x00000056, 0x00000076, 0x00000056,
-0x00000057, 0x00000077, 0x00000057,
-0x00000058, 0x00000078, 0x00000058,
-0x00000059, 0x00000079, 0x00000059,
-0x0000005a, 0x0000007a, 0x0000005a,
-0x000000c0, 0x000000e0, 0x000000c0,
-0x000000c1, 0x000000e1, 0x000000c1,
-0x000000c2, 0x000000e2, 0x000000c2,
-0x000000c3, 0x000000e3, 0x000000c3,
-0x000000c4, 0x000000e4, 0x000000c4,
-0x000000c5, 0x000000e5, 0x000000c5,
-0x000000c6, 0x000000e6, 0x000000c6,
-0x000000c7, 0x000000e7, 0x000000c7,
-0x000000c8, 0x000000e8, 0x000000c8,
-0x000000c9, 0x000000e9, 0x000000c9,
-0x000000ca, 0x000000ea, 0x000000ca,
-0x000000cb, 0x000000eb, 0x000000cb,
-0x000000cc, 0x000000ec, 0x000000cc,
-0x000000cd, 0x000000ed, 0x000000cd,
-0x000000ce, 0x000000ee, 0x000000ce,
-0x000000cf, 0x000000ef, 0x000000cf,
-0x000000d0, 0x000000f0, 0x000000d0,
-0x000000d1, 0x000000f1, 0x000000d1,
-0x000000d2, 0x000000f2, 0x000000d2,
-0x000000d3, 0x000000f3, 0x000000d3,
-0x000000d4, 0x000000f4, 0x000000d4,
-0x000000d5, 0x000000f5, 0x000000d5,
-0x000000d6, 0x000000f6, 0x000000d6,
-0x000000d8, 0x000000f8, 0x000000d8,
-0x000000d9, 0x000000f9, 0x000000d9,
-0x000000da, 0x000000fa, 0x000000da,
-0x000000db, 0x000000fb, 0x000000db,
-0x000000dc, 0x000000fc, 0x000000dc,
-0x000000dd, 0x000000fd, 0x000000dd,
-0x000000de, 0x000000fe, 0x000000de,
-0x00000100, 0x00000101, 0x00000100,
-0x00000102, 0x00000103, 0x00000102,
-0x00000104, 0x00000105, 0x00000104,
-0x00000106, 0x00000107, 0x00000106,
-0x00000108, 0x00000109, 0x00000108,
-0x0000010a, 0x0000010b, 0x0000010a,
-0x0000010c, 0x0000010d, 0x0000010c,
-0x0000010e, 0x0000010f, 0x0000010e,
-0x00000110, 0x00000111, 0x00000110,
-0x00000112, 0x00000113, 0x00000112,
-0x00000114, 0x00000115, 0x00000114,
-0x00000116, 0x00000117, 0x00000116,
-0x00000118, 0x00000119, 0x00000118,
-0x0000011a, 0x0000011b, 0x0000011a,
-0x0000011c, 0x0000011d, 0x0000011c,
-0x0000011e, 0x0000011f, 0x0000011e,
-0x00000120, 0x00000121, 0x00000120,
-0x00000122, 0x00000123, 0x00000122,
-0x00000124, 0x00000125, 0x00000124,
-0x00000126, 0x00000127, 0x00000126,
-0x00000128, 0x00000129, 0x00000128,
-0x0000012a, 0x0000012b, 0x0000012a,
-0x0000012c, 0x0000012d, 0x0000012c,
-0x0000012e, 0x0000012f, 0x0000012e,
-0x00000130, 0x00000069, 0x00000130,
-0x00000132, 0x00000133, 0x00000132,
-0x00000134, 0x00000135, 0x00000134,
-0x00000136, 0x00000137, 0x00000136,
-0x00000139, 0x0000013a, 0x00000139,
-0x0000013b, 0x0000013c, 0x0000013b,
-0x0000013d, 0x0000013e, 0x0000013d,
-0x0000013f, 0x00000140, 0x0000013f,
-0x00000141, 0x00000142, 0x00000141,
-0x00000143, 0x00000144, 0x00000143,
-0x00000145, 0x00000146, 0x00000145,
-0x00000147, 0x00000148, 0x00000147,
-0x0000014a, 0x0000014b, 0x0000014a,
-0x0000014c, 0x0000014d, 0x0000014c,
-0x0000014e, 0x0000014f, 0x0000014e,
-0x00000150, 0x00000151, 0x00000150,
-0x00000152, 0x00000153, 0x00000152,
-0x00000154, 0x00000155, 0x00000154,
-0x00000156, 0x00000157, 0x00000156,
-0x00000158, 0x00000159, 0x00000158,
-0x0000015a, 0x0000015b, 0x0000015a,
-0x0000015c, 0x0000015d, 0x0000015c,
-0x0000015e, 0x0000015f, 0x0000015e,
-0x00000160, 0x00000161, 0x00000160,
-0x00000162, 0x00000163, 0x00000162,
-0x00000164, 0x00000165, 0x00000164,
-0x00000166, 0x00000167, 0x00000166,
-0x00000168, 0x00000169, 0x00000168,
-0x0000016a, 0x0000016b, 0x0000016a,
-0x0000016c, 0x0000016d, 0x0000016c,
-0x0000016e, 0x0000016f, 0x0000016e,
-0x00000170, 0x00000171, 0x00000170,
-0x00000172, 0x00000173, 0x00000172,
-0x00000174, 0x00000175, 0x00000174,
-0x00000176, 0x00000177, 0x00000176,
-0x00000178, 0x000000ff, 0x00000178,
-0x00000179, 0x0000017a, 0x00000179,
-0x0000017b, 0x0000017c, 0x0000017b,
-0x0000017d, 0x0000017e, 0x0000017d,
-0x00000181, 0x00000253, 0x00000181,
-0x00000182, 0x00000183, 0x00000182,
-0x00000184, 0x00000185, 0x00000184,
-0x00000186, 0x00000254, 0x00000186,
-0x00000187, 0x00000188, 0x00000187,
-0x00000189, 0x00000256, 0x00000189,
-0x0000018a, 0x00000257, 0x0000018a,
-0x0000018b, 0x0000018c, 0x0000018b,
-0x0000018e, 0x000001dd, 0x0000018e,
-0x0000018f, 0x00000259, 0x0000018f,
-0x00000190, 0x0000025b, 0x00000190,
-0x00000191, 0x00000192, 0x00000191,
-0x00000193, 0x00000260, 0x00000193,
-0x00000194, 0x00000263, 0x00000194,
-0x00000196, 0x00000269, 0x00000196,
-0x00000197, 0x00000268, 0x00000197,
-0x00000198, 0x00000199, 0x00000198,
-0x0000019c, 0x0000026f, 0x0000019c,
-0x0000019d, 0x00000272, 0x0000019d,
-0x0000019f, 0x00000275, 0x0000019f,
-0x000001a0, 0x000001a1, 0x000001a0,
-0x000001a2, 0x000001a3, 0x000001a2,
-0x000001a4, 0x000001a5, 0x000001a4,
-0x000001a6, 0x00000280, 0x000001a6,
-0x000001a7, 0x000001a8, 0x000001a7,
-0x000001a9, 0x00000283, 0x000001a9,
-0x000001ac, 0x000001ad, 0x000001ac,
-0x000001ae, 0x00000288, 0x000001ae,
-0x000001af, 0x000001b0, 0x000001af,
-0x000001b1, 0x0000028a, 0x000001b1,
-0x000001b2, 0x0000028b, 0x000001b2,
-0x000001b3, 0x000001b4, 0x000001b3,
-0x000001b5, 0x000001b6, 0x000001b5,
-0x000001b7, 0x00000292, 0x000001b7,
-0x000001b8, 0x000001b9, 0x000001b8,
-0x000001bc, 0x000001bd, 0x000001bc,
-0x000001c4, 0x000001c6, 0x000001c5,
-0x000001c7, 0x000001c9, 0x000001c8,
-0x000001ca, 0x000001cc, 0x000001cb,
-0x000001cd, 0x000001ce, 0x000001cd,
-0x000001cf, 0x000001d0, 0x000001cf,
-0x000001d1, 0x000001d2, 0x000001d1,
-0x000001d3, 0x000001d4, 0x000001d3,
-0x000001d5, 0x000001d6, 0x000001d5,
-0x000001d7, 0x000001d8, 0x000001d7,
-0x000001d9, 0x000001da, 0x000001d9,
-0x000001db, 0x000001dc, 0x000001db,
-0x000001de, 0x000001df, 0x000001de,
-0x000001e0, 0x000001e1, 0x000001e0,
-0x000001e2, 0x000001e3, 0x000001e2,
-0x000001e4, 0x000001e5, 0x000001e4,
-0x000001e6, 0x000001e7, 0x000001e6,
-0x000001e8, 0x000001e9, 0x000001e8,
-0x000001ea, 0x000001eb, 0x000001ea,
-0x000001ec, 0x000001ed, 0x000001ec,
-0x000001ee, 0x000001ef, 0x000001ee,
-0x000001f1, 0x000001f3, 0x000001f2,
-0x000001f4, 0x000001f5, 0x000001f4,
-0x000001f6, 0x00000195, 0x000001f6,
-0x000001f7, 0x000001bf, 0x000001f7,
-0x000001f8, 0x000001f9, 0x000001f8,
-0x000001fa, 0x000001fb, 0x000001fa,
-0x000001fc, 0x000001fd, 0x000001fc,
-0x000001fe, 0x000001ff, 0x000001fe,
-0x00000200, 0x00000201, 0x00000200,
-0x00000202, 0x00000203, 0x00000202,
-0x00000204, 0x00000205, 0x00000204,
-0x00000206, 0x00000207, 0x00000206,
-0x00000208, 0x00000209, 0x00000208,
-0x0000020a, 0x0000020b, 0x0000020a,
-0x0000020c, 0x0000020d, 0x0000020c,
-0x0000020e, 0x0000020f, 0x0000020e,
-0x00000210, 0x00000211, 0x00000210,
-0x00000212, 0x00000213, 0x00000212,
-0x00000214, 0x00000215, 0x00000214,
-0x00000216, 0x00000217, 0x00000216,
-0x00000218, 0x00000219, 0x00000218,
-0x0000021a, 0x0000021b, 0x0000021a,
-0x0000021c, 0x0000021d, 0x0000021c,
-0x0000021e, 0x0000021f, 0x0000021e,
-0x00000220, 0x0000019e, 0x00000220,
-0x00000222, 0x00000223, 0x00000222,
-0x00000224, 0x00000225, 0x00000224,
-0x00000226, 0x00000227, 0x00000226,
-0x00000228, 0x00000229, 0x00000228,
-0x0000022a, 0x0000022b, 0x0000022a,
-0x0000022c, 0x0000022d, 0x0000022c,
-0x0000022e, 0x0000022f, 0x0000022e,
-0x00000230, 0x00000231, 0x00000230,
-0x00000232, 0x00000233, 0x00000232,
-0x00000386, 0x000003ac, 0x00000386,
-0x00000388, 0x000003ad, 0x00000388,
-0x00000389, 0x000003ae, 0x00000389,
-0x0000038a, 0x000003af, 0x0000038a,
-0x0000038c, 0x000003cc, 0x0000038c,
-0x0000038e, 0x000003cd, 0x0000038e,
-0x0000038f, 0x000003ce, 0x0000038f,
-0x00000391, 0x000003b1, 0x00000391,
-0x00000392, 0x000003b2, 0x00000392,
-0x00000393, 0x000003b3, 0x00000393,
-0x00000394, 0x000003b4, 0x00000394,
-0x00000395, 0x000003b5, 0x00000395,
-0x00000396, 0x000003b6, 0x00000396,
-0x00000397, 0x000003b7, 0x00000397,
-0x00000398, 0x000003b8, 0x00000398,
-0x00000399, 0x000003b9, 0x00000399,
-0x0000039a, 0x000003ba, 0x0000039a,
-0x0000039b, 0x000003bb, 0x0000039b,
-0x0000039c, 0x000003bc, 0x0000039c,
-0x0000039d, 0x000003bd, 0x0000039d,
-0x0000039e, 0x000003be, 0x0000039e,
-0x0000039f, 0x000003bf, 0x0000039f,
-0x000003a0, 0x000003c0, 0x000003a0,
-0x000003a1, 0x000003c1, 0x000003a1,
-0x000003a3, 0x000003c3, 0x000003a3,
-0x000003a4, 0x000003c4, 0x000003a4,
-0x000003a5, 0x000003c5, 0x000003a5,
-0x000003a6, 0x000003c6, 0x000003a6,
-0x000003a7, 0x000003c7, 0x000003a7,
-0x000003a8, 0x000003c8, 0x000003a8,
-0x000003a9, 0x000003c9, 0x000003a9,
-0x000003aa, 0x000003ca, 0x000003aa,
-0x000003ab, 0x000003cb, 0x000003ab,
-0x000003d8, 0x000003d9, 0x000003d8,
-0x000003da, 0x000003db, 0x000003da,
-0x000003dc, 0x000003dd, 0x000003dc,
-0x000003de, 0x000003df, 0x000003de,
-0x000003e0, 0x000003e1, 0x000003e0,
-0x000003e2, 0x000003e3, 0x000003e2,
-0x000003e4, 0x000003e5, 0x000003e4,
-0x000003e6, 0x000003e7, 0x000003e6,
-0x000003e8, 0x000003e9, 0x000003e8,
-0x000003ea, 0x000003eb, 0x000003ea,
-0x000003ec, 0x000003ed, 0x000003ec,
-0x000003ee, 0x000003ef, 0x000003ee,
-0x000003f4, 0x000003b8, 0x000003f4,
-0x00000400, 0x00000450, 0x00000400,
-0x00000401, 0x00000451, 0x00000401,
-0x00000402, 0x00000452, 0x00000402,
-0x00000403, 0x00000453, 0x00000403,
-0x00000404, 0x00000454, 0x00000404,
-0x00000405, 0x00000455, 0x00000405,
-0x00000406, 0x00000456, 0x00000406,
-0x00000407, 0x00000457, 0x00000407,
-0x00000408, 0x00000458, 0x00000408,
-0x00000409, 0x00000459, 0x00000409,
-0x0000040a, 0x0000045a, 0x0000040a,
-0x0000040b, 0x0000045b, 0x0000040b,
-0x0000040c, 0x0000045c, 0x0000040c,
-0x0000040d, 0x0000045d, 0x0000040d,
-0x0000040e, 0x0000045e, 0x0000040e,
-0x0000040f, 0x0000045f, 0x0000040f,
-0x00000410, 0x00000430, 0x00000410,
-0x00000411, 0x00000431, 0x00000411,
-0x00000412, 0x00000432, 0x00000412,
-0x00000413, 0x00000433, 0x00000413,
-0x00000414, 0x00000434, 0x00000414,
-0x00000415, 0x00000435, 0x00000415,
-0x00000416, 0x00000436, 0x00000416,
-0x00000417, 0x00000437, 0x00000417,
-0x00000418, 0x00000438, 0x00000418,
-0x00000419, 0x00000439, 0x00000419,
-0x0000041a, 0x0000043a, 0x0000041a,
-0x0000041b, 0x0000043b, 0x0000041b,
-0x0000041c, 0x0000043c, 0x0000041c,
-0x0000041d, 0x0000043d, 0x0000041d,
-0x0000041e, 0x0000043e, 0x0000041e,
-0x0000041f, 0x0000043f, 0x0000041f,
-0x00000420, 0x00000440, 0x00000420,
-0x00000421, 0x00000441, 0x00000421,
-0x00000422, 0x00000442, 0x00000422,
-0x00000423, 0x00000443, 0x00000423,
-0x00000424, 0x00000444, 0x00000424,
-0x00000425, 0x00000445, 0x00000425,
-0x00000426, 0x00000446, 0x00000426,
-0x00000427, 0x00000447, 0x00000427,
-0x00000428, 0x00000448, 0x00000428,
-0x00000429, 0x00000449, 0x00000429,
-0x0000042a, 0x0000044a, 0x0000042a,
-0x0000042b, 0x0000044b, 0x0000042b,
-0x0000042c, 0x0000044c, 0x0000042c,
-0x0000042d, 0x0000044d, 0x0000042d,
-0x0000042e, 0x0000044e, 0x0000042e,
-0x0000042f, 0x0000044f, 0x0000042f,
-0x00000460, 0x00000461, 0x00000460,
-0x00000462, 0x00000463, 0x00000462,
-0x00000464, 0x00000465, 0x00000464,
-0x00000466, 0x00000467, 0x00000466,
-0x00000468, 0x00000469, 0x00000468,
-0x0000046a, 0x0000046b, 0x0000046a,
-0x0000046c, 0x0000046d, 0x0000046c,
-0x0000046e, 0x0000046f, 0x0000046e,
-0x00000470, 0x00000471, 0x00000470,
-0x00000472, 0x00000473, 0x00000472,
-0x00000474, 0x00000475, 0x00000474,
-0x00000476, 0x00000477, 0x00000476,
-0x00000478, 0x00000479, 0x00000478,
-0x0000047a, 0x0000047b, 0x0000047a,
-0x0000047c, 0x0000047d, 0x0000047c,
-0x0000047e, 0x0000047f, 0x0000047e,
-0x00000480, 0x00000481, 0x00000480,
-0x0000048a, 0x0000048b, 0x0000048a,
-0x0000048c, 0x0000048d, 0x0000048c,
-0x0000048e, 0x0000048f, 0x0000048e,
-0x00000490, 0x00000491, 0x00000490,
-0x00000492, 0x00000493, 0x00000492,
-0x00000494, 0x00000495, 0x00000494,
-0x00000496, 0x00000497, 0x00000496,
-0x00000498, 0x00000499, 0x00000498,
-0x0000049a, 0x0000049b, 0x0000049a,
-0x0000049c, 0x0000049d, 0x0000049c,
-0x0000049e, 0x0000049f, 0x0000049e,
-0x000004a0, 0x000004a1, 0x000004a0,
-0x000004a2, 0x000004a3, 0x000004a2,
-0x000004a4, 0x000004a5, 0x000004a4,
-0x000004a6, 0x000004a7, 0x000004a6,
-0x000004a8, 0x000004a9, 0x000004a8,
-0x000004aa, 0x000004ab, 0x000004aa,
-0x000004ac, 0x000004ad, 0x000004ac,
-0x000004ae, 0x000004af, 0x000004ae,
-0x000004b0, 0x000004b1, 0x000004b0,
-0x000004b2, 0x000004b3, 0x000004b2,
-0x000004b4, 0x000004b5, 0x000004b4,
-0x000004b6, 0x000004b7, 0x000004b6,
-0x000004b8, 0x000004b9, 0x000004b8,
-0x000004ba, 0x000004bb, 0x000004ba,
-0x000004bc, 0x000004bd, 0x000004bc,
-0x000004be, 0x000004bf, 0x000004be,
-0x000004c1, 0x000004c2, 0x000004c1,
-0x000004c3, 0x000004c4, 0x000004c3,
-0x000004c5, 0x000004c6, 0x000004c5,
-0x000004c7, 0x000004c8, 0x000004c7,
-0x000004c9, 0x000004ca, 0x000004c9,
-0x000004cb, 0x000004cc, 0x000004cb,
-0x000004cd, 0x000004ce, 0x000004cd,
-0x000004d0, 0x000004d1, 0x000004d0,
-0x000004d2, 0x000004d3, 0x000004d2,
-0x000004d4, 0x000004d5, 0x000004d4,
-0x000004d6, 0x000004d7, 0x000004d6,
-0x000004d8, 0x000004d9, 0x000004d8,
-0x000004da, 0x000004db, 0x000004da,
-0x000004dc, 0x000004dd, 0x000004dc,
-0x000004de, 0x000004df, 0x000004de,
-0x000004e0, 0x000004e1, 0x000004e0,
-0x000004e2, 0x000004e3, 0x000004e2,
-0x000004e4, 0x000004e5, 0x000004e4,
-0x000004e6, 0x000004e7, 0x000004e6,
-0x000004e8, 0x000004e9, 0x000004e8,
-0x000004ea, 0x000004eb, 0x000004ea,
-0x000004ec, 0x000004ed, 0x000004ec,
-0x000004ee, 0x000004ef, 0x000004ee,
-0x000004f0, 0x000004f1, 0x000004f0,
-0x000004f2, 0x000004f3, 0x000004f2,
-0x000004f4, 0x000004f5, 0x000004f4,
-0x000004f8, 0x000004f9, 0x000004f8,
-0x00000500, 0x00000501, 0x00000500,
-0x00000502, 0x00000503, 0x00000502,
-0x00000504, 0x00000505, 0x00000504,
-0x00000506, 0x00000507, 0x00000506,
-0x00000508, 0x00000509, 0x00000508,
-0x0000050a, 0x0000050b, 0x0000050a,
-0x0000050c, 0x0000050d, 0x0000050c,
-0x0000050e, 0x0000050f, 0x0000050e,
-0x00000531, 0x00000561, 0x00000531,
-0x00000532, 0x00000562, 0x00000532,
-0x00000533, 0x00000563, 0x00000533,
-0x00000534, 0x00000564, 0x00000534,
-0x00000535, 0x00000565, 0x00000535,
-0x00000536, 0x00000566, 0x00000536,
-0x00000537, 0x00000567, 0x00000537,
-0x00000538, 0x00000568, 0x00000538,
-0x00000539, 0x00000569, 0x00000539,
-0x0000053a, 0x0000056a, 0x0000053a,
-0x0000053b, 0x0000056b, 0x0000053b,
-0x0000053c, 0x0000056c, 0x0000053c,
-0x0000053d, 0x0000056d, 0x0000053d,
-0x0000053e, 0x0000056e, 0x0000053e,
-0x0000053f, 0x0000056f, 0x0000053f,
-0x00000540, 0x00000570, 0x00000540,
-0x00000541, 0x00000571, 0x00000541,
-0x00000542, 0x00000572, 0x00000542,
-0x00000543, 0x00000573, 0x00000543,
-0x00000544, 0x00000574, 0x00000544,
-0x00000545, 0x00000575, 0x00000545,
-0x00000546, 0x00000576, 0x00000546,
-0x00000547, 0x00000577, 0x00000547,
-0x00000548, 0x00000578, 0x00000548,
-0x00000549, 0x00000579, 0x00000549,
-0x0000054a, 0x0000057a, 0x0000054a,
-0x0000054b, 0x0000057b, 0x0000054b,
-0x0000054c, 0x0000057c, 0x0000054c,
-0x0000054d, 0x0000057d, 0x0000054d,
-0x0000054e, 0x0000057e, 0x0000054e,
-0x0000054f, 0x0000057f, 0x0000054f,
-0x00000550, 0x00000580, 0x00000550,
-0x00000551, 0x00000581, 0x00000551,
-0x00000552, 0x00000582, 0x00000552,
-0x00000553, 0x00000583, 0x00000553,
-0x00000554, 0x00000584, 0x00000554,
-0x00000555, 0x00000585, 0x00000555,
-0x00000556, 0x00000586, 0x00000556,
-0x00001e00, 0x00001e01, 0x00001e00,
-0x00001e02, 0x00001e03, 0x00001e02,
-0x00001e04, 0x00001e05, 0x00001e04,
-0x00001e06, 0x00001e07, 0x00001e06,
-0x00001e08, 0x00001e09, 0x00001e08,
-0x00001e0a, 0x00001e0b, 0x00001e0a,
-0x00001e0c, 0x00001e0d, 0x00001e0c,
-0x00001e0e, 0x00001e0f, 0x00001e0e,
-0x00001e10, 0x00001e11, 0x00001e10,
-0x00001e12, 0x00001e13, 0x00001e12,
-0x00001e14, 0x00001e15, 0x00001e14,
-0x00001e16, 0x00001e17, 0x00001e16,
-0x00001e18, 0x00001e19, 0x00001e18,
-0x00001e1a, 0x00001e1b, 0x00001e1a,
-0x00001e1c, 0x00001e1d, 0x00001e1c,
-0x00001e1e, 0x00001e1f, 0x00001e1e,
-0x00001e20, 0x00001e21, 0x00001e20,
-0x00001e22, 0x00001e23, 0x00001e22,
-0x00001e24, 0x00001e25, 0x00001e24,
-0x00001e26, 0x00001e27, 0x00001e26,
-0x00001e28, 0x00001e29, 0x00001e28,
-0x00001e2a, 0x00001e2b, 0x00001e2a,
-0x00001e2c, 0x00001e2d, 0x00001e2c,
-0x00001e2e, 0x00001e2f, 0x00001e2e,
-0x00001e30, 0x00001e31, 0x00001e30,
-0x00001e32, 0x00001e33, 0x00001e32,
-0x00001e34, 0x00001e35, 0x00001e34,
-0x00001e36, 0x00001e37, 0x00001e36,
-0x00001e38, 0x00001e39, 0x00001e38,
-0x00001e3a, 0x00001e3b, 0x00001e3a,
-0x00001e3c, 0x00001e3d, 0x00001e3c,
-0x00001e3e, 0x00001e3f, 0x00001e3e,
-0x00001e40, 0x00001e41, 0x00001e40,
-0x00001e42, 0x00001e43, 0x00001e42,
-0x00001e44, 0x00001e45, 0x00001e44,
-0x00001e46, 0x00001e47, 0x00001e46,
-0x00001e48, 0x00001e49, 0x00001e48,
-0x00001e4a, 0x00001e4b, 0x00001e4a,
-0x00001e4c, 0x00001e4d, 0x00001e4c,
-0x00001e4e, 0x00001e4f, 0x00001e4e,
-0x00001e50, 0x00001e51, 0x00001e50,
-0x00001e52, 0x00001e53, 0x00001e52,
-0x00001e54, 0x00001e55, 0x00001e54,
-0x00001e56, 0x00001e57, 0x00001e56,
-0x00001e58, 0x00001e59, 0x00001e58,
-0x00001e5a, 0x00001e5b, 0x00001e5a,
-0x00001e5c, 0x00001e5d, 0x00001e5c,
-0x00001e5e, 0x00001e5f, 0x00001e5e,
-0x00001e60, 0x00001e61, 0x00001e60,
-0x00001e62, 0x00001e63, 0x00001e62,
-0x00001e64, 0x00001e65, 0x00001e64,
-0x00001e66, 0x00001e67, 0x00001e66,
-0x00001e68, 0x00001e69, 0x00001e68,
-0x00001e6a, 0x00001e6b, 0x00001e6a,
-0x00001e6c, 0x00001e6d, 0x00001e6c,
-0x00001e6e, 0x00001e6f, 0x00001e6e,
-0x00001e70, 0x00001e71, 0x00001e70,
-0x00001e72, 0x00001e73, 0x00001e72,
-0x00001e74, 0x00001e75, 0x00001e74,
-0x00001e76, 0x00001e77, 0x00001e76,
-0x00001e78, 0x00001e79, 0x00001e78,
-0x00001e7a, 0x00001e7b, 0x00001e7a,
-0x00001e7c, 0x00001e7d, 0x00001e7c,
-0x00001e7e, 0x00001e7f, 0x00001e7e,
-0x00001e80, 0x00001e81, 0x00001e80,
-0x00001e82, 0x00001e83, 0x00001e82,
-0x00001e84, 0x00001e85, 0x00001e84,
-0x00001e86, 0x00001e87, 0x00001e86,
-0x00001e88, 0x00001e89, 0x00001e88,
-0x00001e8a, 0x00001e8b, 0x00001e8a,
-0x00001e8c, 0x00001e8d, 0x00001e8c,
-0x00001e8e, 0x00001e8f, 0x00001e8e,
-0x00001e90, 0x00001e91, 0x00001e90,
-0x00001e92, 0x00001e93, 0x00001e92,
-0x00001e94, 0x00001e95, 0x00001e94,
-0x00001ea0, 0x00001ea1, 0x00001ea0,
-0x00001ea2, 0x00001ea3, 0x00001ea2,
-0x00001ea4, 0x00001ea5, 0x00001ea4,
-0x00001ea6, 0x00001ea7, 0x00001ea6,
-0x00001ea8, 0x00001ea9, 0x00001ea8,
-0x00001eaa, 0x00001eab, 0x00001eaa,
-0x00001eac, 0x00001ead, 0x00001eac,
-0x00001eae, 0x00001eaf, 0x00001eae,
-0x00001eb0, 0x00001eb1, 0x00001eb0,
-0x00001eb2, 0x00001eb3, 0x00001eb2,
-0x00001eb4, 0x00001eb5, 0x00001eb4,
-0x00001eb6, 0x00001eb7, 0x00001eb6,
-0x00001eb8, 0x00001eb9, 0x00001eb8,
-0x00001eba, 0x00001ebb, 0x00001eba,
-0x00001ebc, 0x00001ebd, 0x00001ebc,
-0x00001ebe, 0x00001ebf, 0x00001ebe,
-0x00001ec0, 0x00001ec1, 0x00001ec0,
-0x00001ec2, 0x00001ec3, 0x00001ec2,
-0x00001ec4, 0x00001ec5, 0x00001ec4,
-0x00001ec6, 0x00001ec7, 0x00001ec6,
-0x00001ec8, 0x00001ec9, 0x00001ec8,
-0x00001eca, 0x00001ecb, 0x00001eca,
-0x00001ecc, 0x00001ecd, 0x00001ecc,
-0x00001ece, 0x00001ecf, 0x00001ece,
-0x00001ed0, 0x00001ed1, 0x00001ed0,
-0x00001ed2, 0x00001ed3, 0x00001ed2,
-0x00001ed4, 0x00001ed5, 0x00001ed4,
-0x00001ed6, 0x00001ed7, 0x00001ed6,
-0x00001ed8, 0x00001ed9, 0x00001ed8,
-0x00001eda, 0x00001edb, 0x00001eda,
-0x00001edc, 0x00001edd, 0x00001edc,
-0x00001ede, 0x00001edf, 0x00001ede,
-0x00001ee0, 0x00001ee1, 0x00001ee0,
-0x00001ee2, 0x00001ee3, 0x00001ee2,
-0x00001ee4, 0x00001ee5, 0x00001ee4,
-0x00001ee6, 0x00001ee7, 0x00001ee6,
-0x00001ee8, 0x00001ee9, 0x00001ee8,
-0x00001eea, 0x00001eeb, 0x00001eea,
-0x00001eec, 0x00001eed, 0x00001eec,
-0x00001eee, 0x00001eef, 0x00001eee,
-0x00001ef0, 0x00001ef1, 0x00001ef0,
-0x00001ef2, 0x00001ef3, 0x00001ef2,
-0x00001ef4, 0x00001ef5, 0x00001ef4,
-0x00001ef6, 0x00001ef7, 0x00001ef6,
-0x00001ef8, 0x00001ef9, 0x00001ef8,
-0x00001f08, 0x00001f00, 0x00001f08,
-0x00001f09, 0x00001f01, 0x00001f09,
-0x00001f0a, 0x00001f02, 0x00001f0a,
-0x00001f0b, 0x00001f03, 0x00001f0b,
-0x00001f0c, 0x00001f04, 0x00001f0c,
-0x00001f0d, 0x00001f05, 0x00001f0d,
-0x00001f0e, 0x00001f06, 0x00001f0e,
-0x00001f0f, 0x00001f07, 0x00001f0f,
-0x00001f18, 0x00001f10, 0x00001f18,
-0x00001f19, 0x00001f11, 0x00001f19,
-0x00001f1a, 0x00001f12, 0x00001f1a,
-0x00001f1b, 0x00001f13, 0x00001f1b,
-0x00001f1c, 0x00001f14, 0x00001f1c,
-0x00001f1d, 0x00001f15, 0x00001f1d,
-0x00001f28, 0x00001f20, 0x00001f28,
-0x00001f29, 0x00001f21, 0x00001f29,
-0x00001f2a, 0x00001f22, 0x00001f2a,
-0x00001f2b, 0x00001f23, 0x00001f2b,
-0x00001f2c, 0x00001f24, 0x00001f2c,
-0x00001f2d, 0x00001f25, 0x00001f2d,
-0x00001f2e, 0x00001f26, 0x00001f2e,
-0x00001f2f, 0x00001f27, 0x00001f2f,
-0x00001f38, 0x00001f30, 0x00001f38,
-0x00001f39, 0x00001f31, 0x00001f39,
-0x00001f3a, 0x00001f32, 0x00001f3a,
-0x00001f3b, 0x00001f33, 0x00001f3b,
-0x00001f3c, 0x00001f34, 0x00001f3c,
-0x00001f3d, 0x00001f35, 0x00001f3d,
-0x00001f3e, 0x00001f36, 0x00001f3e,
-0x00001f3f, 0x00001f37, 0x00001f3f,
-0x00001f48, 0x00001f40, 0x00001f48,
-0x00001f49, 0x00001f41, 0x00001f49,
-0x00001f4a, 0x00001f42, 0x00001f4a,
-0x00001f4b, 0x00001f43, 0x00001f4b,
-0x00001f4c, 0x00001f44, 0x00001f4c,
-0x00001f4d, 0x00001f45, 0x00001f4d,
-0x00001f59, 0x00001f51, 0x00001f59,
-0x00001f5b, 0x00001f53, 0x00001f5b,
-0x00001f5d, 0x00001f55, 0x00001f5d,
-0x00001f5f, 0x00001f57, 0x00001f5f,
-0x00001f68, 0x00001f60, 0x00001f68,
-0x00001f69, 0x00001f61, 0x00001f69,
-0x00001f6a, 0x00001f62, 0x00001f6a,
-0x00001f6b, 0x00001f63, 0x00001f6b,
-0x00001f6c, 0x00001f64, 0x00001f6c,
-0x00001f6d, 0x00001f65, 0x00001f6d,
-0x00001f6e, 0x00001f66, 0x00001f6e,
-0x00001f6f, 0x00001f67, 0x00001f6f,
-0x00001f88, 0x00001f80, 0x00001f88,
-0x00001f89, 0x00001f81, 0x00001f89,
-0x00001f8a, 0x00001f82, 0x00001f8a,
-0x00001f8b, 0x00001f83, 0x00001f8b,
-0x00001f8c, 0x00001f84, 0x00001f8c,
-0x00001f8d, 0x00001f85, 0x00001f8d,
-0x00001f8e, 0x00001f86, 0x00001f8e,
-0x00001f8f, 0x00001f87, 0x00001f8f,
-0x00001f98, 0x00001f90, 0x00001f98,
-0x00001f99, 0x00001f91, 0x00001f99,
-0x00001f9a, 0x00001f92, 0x00001f9a,
-0x00001f9b, 0x00001f93, 0x00001f9b,
-0x00001f9c, 0x00001f94, 0x00001f9c,
-0x00001f9d, 0x00001f95, 0x00001f9d,
-0x00001f9e, 0x00001f96, 0x00001f9e,
-0x00001f9f, 0x00001f97, 0x00001f9f,
-0x00001fa8, 0x00001fa0, 0x00001fa8,
-0x00001fa9, 0x00001fa1, 0x00001fa9,
-0x00001faa, 0x00001fa2, 0x00001faa,
-0x00001fab, 0x00001fa3, 0x00001fab,
-0x00001fac, 0x00001fa4, 0x00001fac,
-0x00001fad, 0x00001fa5, 0x00001fad,
-0x00001fae, 0x00001fa6, 0x00001fae,
-0x00001faf, 0x00001fa7, 0x00001faf,
-0x00001fb8, 0x00001fb0, 0x00001fb8,
-0x00001fb9, 0x00001fb1, 0x00001fb9,
-0x00001fba, 0x00001f70, 0x00001fba,
-0x00001fbb, 0x00001f71, 0x00001fbb,
-0x00001fbc, 0x00001fb3, 0x00001fbc,
-0x00001fc8, 0x00001f72, 0x00001fc8,
-0x00001fc9, 0x00001f73, 0x00001fc9,
-0x00001fca, 0x00001f74, 0x00001fca,
-0x00001fcb, 0x00001f75, 0x00001fcb,
-0x00001fcc, 0x00001fc3, 0x00001fcc,
-0x00001fd8, 0x00001fd0, 0x00001fd8,
-0x00001fd9, 0x00001fd1, 0x00001fd9,
-0x00001fda, 0x00001f76, 0x00001fda,
-0x00001fdb, 0x00001f77, 0x00001fdb,
-0x00001fe8, 0x00001fe0, 0x00001fe8,
-0x00001fe9, 0x00001fe1, 0x00001fe9,
-0x00001fea, 0x00001f7a, 0x00001fea,
-0x00001feb, 0x00001f7b, 0x00001feb,
-0x00001fec, 0x00001fe5, 0x00001fec,
-0x00001ff8, 0x00001f78, 0x00001ff8,
-0x00001ff9, 0x00001f79, 0x00001ff9,
-0x00001ffa, 0x00001f7c, 0x00001ffa,
-0x00001ffb, 0x00001f7d, 0x00001ffb,
-0x00001ffc, 0x00001ff3, 0x00001ffc,
-0x00002126, 0x000003c9, 0x00002126,
-0x0000212a, 0x0000006b, 0x0000212a,
-0x0000212b, 0x000000e5, 0x0000212b,
-0x00002160, 0x00002170, 0x00002160,
-0x00002161, 0x00002171, 0x00002161,
-0x00002162, 0x00002172, 0x00002162,
-0x00002163, 0x00002173, 0x00002163,
-0x00002164, 0x00002174, 0x00002164,
-0x00002165, 0x00002175, 0x00002165,
-0x00002166, 0x00002176, 0x00002166,
-0x00002167, 0x00002177, 0x00002167,
-0x00002168, 0x00002178, 0x00002168,
-0x00002169, 0x00002179, 0x00002169,
-0x0000216a, 0x0000217a, 0x0000216a,
-0x0000216b, 0x0000217b, 0x0000216b,
-0x0000216c, 0x0000217c, 0x0000216c,
-0x0000216d, 0x0000217d, 0x0000216d,
-0x0000216e, 0x0000217e, 0x0000216e,
-0x0000216f, 0x0000217f, 0x0000216f,
-0x000024b6, 0x000024d0, 0x000024b6,
-0x000024b7, 0x000024d1, 0x000024b7,
-0x000024b8, 0x000024d2, 0x000024b8,
-0x000024b9, 0x000024d3, 0x000024b9,
-0x000024ba, 0x000024d4, 0x000024ba,
-0x000024bb, 0x000024d5, 0x000024bb,
-0x000024bc, 0x000024d6, 0x000024bc,
-0x000024bd, 0x000024d7, 0x000024bd,
-0x000024be, 0x000024d8, 0x000024be,
-0x000024bf, 0x000024d9, 0x000024bf,
-0x000024c0, 0x000024da, 0x000024c0,
-0x000024c1, 0x000024db, 0x000024c1,
-0x000024c2, 0x000024dc, 0x000024c2,
-0x000024c3, 0x000024dd, 0x000024c3,
-0x000024c4, 0x000024de, 0x000024c4,
-0x000024c5, 0x000024df, 0x000024c5,
-0x000024c6, 0x000024e0, 0x000024c6,
-0x000024c7, 0x000024e1, 0x000024c7,
-0x000024c8, 0x000024e2, 0x000024c8,
-0x000024c9, 0x000024e3, 0x000024c9,
-0x000024ca, 0x000024e4, 0x000024ca,
-0x000024cb, 0x000024e5, 0x000024cb,
-0x000024cc, 0x000024e6, 0x000024cc,
-0x000024cd, 0x000024e7, 0x000024cd,
-0x000024ce, 0x000024e8, 0x000024ce,
-0x000024cf, 0x000024e9, 0x000024cf,
-0x0000ff21, 0x0000ff41, 0x0000ff21,
-0x0000ff22, 0x0000ff42, 0x0000ff22,
-0x0000ff23, 0x0000ff43, 0x0000ff23,
-0x0000ff24, 0x0000ff44, 0x0000ff24,
-0x0000ff25, 0x0000ff45, 0x0000ff25,
-0x0000ff26, 0x0000ff46, 0x0000ff26,
-0x0000ff27, 0x0000ff47, 0x0000ff27,
-0x0000ff28, 0x0000ff48, 0x0000ff28,
-0x0000ff29, 0x0000ff49, 0x0000ff29,
-0x0000ff2a, 0x0000ff4a, 0x0000ff2a,
-0x0000ff2b, 0x0000ff4b, 0x0000ff2b,
-0x0000ff2c, 0x0000ff4c, 0x0000ff2c,
-0x0000ff2d, 0x0000ff4d, 0x0000ff2d,
-0x0000ff2e, 0x0000ff4e, 0x0000ff2e,
-0x0000ff2f, 0x0000ff4f, 0x0000ff2f,
-0x0000ff30, 0x0000ff50, 0x0000ff30,
-0x0000ff31, 0x0000ff51, 0x0000ff31,
-0x0000ff32, 0x0000ff52, 0x0000ff32,
-0x0000ff33, 0x0000ff53, 0x0000ff33,
-0x0000ff34, 0x0000ff54, 0x0000ff34,
-0x0000ff35, 0x0000ff55, 0x0000ff35,
-0x0000ff36, 0x0000ff56, 0x0000ff36,
-0x0000ff37, 0x0000ff57, 0x0000ff37,
-0x0000ff38, 0x0000ff58, 0x0000ff38,
-0x0000ff39, 0x0000ff59, 0x0000ff39,
-0x0000ff3a, 0x0000ff5a, 0x0000ff3a,
-0x00010400, 0x00010428, 0x00010400,
-0x00010401, 0x00010429, 0x00010401,
-0x00010402, 0x0001042a, 0x00010402,
-0x00010403, 0x0001042b, 0x00010403,
-0x00010404, 0x0001042c, 0x00010404,
-0x00010405, 0x0001042d, 0x00010405,
-0x00010406, 0x0001042e, 0x00010406,
-0x00010407, 0x0001042f, 0x00010407,
-0x00010408, 0x00010430, 0x00010408,
-0x00010409, 0x00010431, 0x00010409,
-0x0001040a, 0x00010432, 0x0001040a,
-0x0001040b, 0x00010433, 0x0001040b,
-0x0001040c, 0x00010434, 0x0001040c,
-0x0001040d, 0x00010435, 0x0001040d,
-0x0001040e, 0x00010436, 0x0001040e,
-0x0001040f, 0x00010437, 0x0001040f,
-0x00010410, 0x00010438, 0x00010410,
-0x00010411, 0x00010439, 0x00010411,
-0x00010412, 0x0001043a, 0x00010412,
-0x00010413, 0x0001043b, 0x00010413,
-0x00010414, 0x0001043c, 0x00010414,
-0x00010415, 0x0001043d, 0x00010415,
-0x00010416, 0x0001043e, 0x00010416,
-0x00010417, 0x0001043f, 0x00010417,
-0x00010418, 0x00010440, 0x00010418,
-0x00010419, 0x00010441, 0x00010419,
-0x0001041a, 0x00010442, 0x0001041a,
-0x0001041b, 0x00010443, 0x0001041b,
-0x0001041c, 0x00010444, 0x0001041c,
-0x0001041d, 0x00010445, 0x0001041d,
-0x0001041e, 0x00010446, 0x0001041e,
-0x0001041f, 0x00010447, 0x0001041f,
-0x00010420, 0x00010448, 0x00010420,
-0x00010421, 0x00010449, 0x00010421,
-0x00010422, 0x0001044a, 0x00010422,
-0x00010423, 0x0001044b, 0x00010423,
-0x00010424, 0x0001044c, 0x00010424,
-0x00010425, 0x0001044d, 0x00010425,
-/* lower */
-0x00000061, 0x00000041, 0x00000041,
-0x00000062, 0x00000042, 0x00000042,
-0x00000063, 0x00000043, 0x00000043,
-0x00000064, 0x00000044, 0x00000044,
-0x00000065, 0x00000045, 0x00000045,
-0x00000066, 0x00000046, 0x00000046,
-0x00000067, 0x00000047, 0x00000047,
-0x00000068, 0x00000048, 0x00000048,
-0x00000069, 0x00000049, 0x00000049,
-0x0000006a, 0x0000004a, 0x0000004a,
-0x0000006b, 0x0000004b, 0x0000004b,
-0x0000006c, 0x0000004c, 0x0000004c,
-0x0000006d, 0x0000004d, 0x0000004d,
-0x0000006e, 0x0000004e, 0x0000004e,
-0x0000006f, 0x0000004f, 0x0000004f,
-0x00000070, 0x00000050, 0x00000050,
-0x00000071, 0x00000051, 0x00000051,
-0x00000072, 0x00000052, 0x00000052,
-0x00000073, 0x00000053, 0x00000053,
-0x00000074, 0x00000054, 0x00000054,
-0x00000075, 0x00000055, 0x00000055,
-0x00000076, 0x00000056, 0x00000056,
-0x00000077, 0x00000057, 0x00000057,
-0x00000078, 0x00000058, 0x00000058,
-0x00000079, 0x00000059, 0x00000059,
-0x0000007a, 0x0000005a, 0x0000005a,
-0x000000b5, 0x0000039c, 0x0000039c,
-0x000000e0, 0x000000c0, 0x000000c0,
-0x000000e1, 0x000000c1, 0x000000c1,
-0x000000e2, 0x000000c2, 0x000000c2,
-0x000000e3, 0x000000c3, 0x000000c3,
-0x000000e4, 0x000000c4, 0x000000c4,
-0x000000e5, 0x000000c5, 0x000000c5,
-0x000000e6, 0x000000c6, 0x000000c6,
-0x000000e7, 0x000000c7, 0x000000c7,
-0x000000e8, 0x000000c8, 0x000000c8,
-0x000000e9, 0x000000c9, 0x000000c9,
-0x000000ea, 0x000000ca, 0x000000ca,
-0x000000eb, 0x000000cb, 0x000000cb,
-0x000000ec, 0x000000cc, 0x000000cc,
-0x000000ed, 0x000000cd, 0x000000cd,
-0x000000ee, 0x000000ce, 0x000000ce,
-0x000000ef, 0x000000cf, 0x000000cf,
-0x000000f0, 0x000000d0, 0x000000d0,
-0x000000f1, 0x000000d1, 0x000000d1,
-0x000000f2, 0x000000d2, 0x000000d2,
-0x000000f3, 0x000000d3, 0x000000d3,
-0x000000f4, 0x000000d4, 0x000000d4,
-0x000000f5, 0x000000d5, 0x000000d5,
-0x000000f6, 0x000000d6, 0x000000d6,
-0x000000f8, 0x000000d8, 0x000000d8,
-0x000000f9, 0x000000d9, 0x000000d9,
-0x000000fa, 0x000000da, 0x000000da,
-0x000000fb, 0x000000db, 0x000000db,
-0x000000fc, 0x000000dc, 0x000000dc,
-0x000000fd, 0x000000dd, 0x000000dd,
-0x000000fe, 0x000000de, 0x000000de,
-0x000000ff, 0x00000178, 0x00000178,
-0x00000101, 0x00000100, 0x00000100,
-0x00000103, 0x00000102, 0x00000102,
-0x00000105, 0x00000104, 0x00000104,
-0x00000107, 0x00000106, 0x00000106,
-0x00000109, 0x00000108, 0x00000108,
-0x0000010b, 0x0000010a, 0x0000010a,
-0x0000010d, 0x0000010c, 0x0000010c,
-0x0000010f, 0x0000010e, 0x0000010e,
-0x00000111, 0x00000110, 0x00000110,
-0x00000113, 0x00000112, 0x00000112,
-0x00000115, 0x00000114, 0x00000114,
-0x00000117, 0x00000116, 0x00000116,
-0x00000119, 0x00000118, 0x00000118,
-0x0000011b, 0x0000011a, 0x0000011a,
-0x0000011d, 0x0000011c, 0x0000011c,
-0x0000011f, 0x0000011e, 0x0000011e,
-0x00000121, 0x00000120, 0x00000120,
-0x00000123, 0x00000122, 0x00000122,
-0x00000125, 0x00000124, 0x00000124,
-0x00000127, 0x00000126, 0x00000126,
-0x00000129, 0x00000128, 0x00000128,
-0x0000012b, 0x0000012a, 0x0000012a,
-0x0000012d, 0x0000012c, 0x0000012c,
-0x0000012f, 0x0000012e, 0x0000012e,
-0x00000131, 0x00000049, 0x00000049,
-0x00000133, 0x00000132, 0x00000132,
-0x00000135, 0x00000134, 0x00000134,
-0x00000137, 0x00000136, 0x00000136,
-0x0000013a, 0x00000139, 0x00000139,
-0x0000013c, 0x0000013b, 0x0000013b,
-0x0000013e, 0x0000013d, 0x0000013d,
-0x00000140, 0x0000013f, 0x0000013f,
-0x00000142, 0x00000141, 0x00000141,
-0x00000144, 0x00000143, 0x00000143,
-0x00000146, 0x00000145, 0x00000145,
-0x00000148, 0x00000147, 0x00000147,
-0x0000014b, 0x0000014a, 0x0000014a,
-0x0000014d, 0x0000014c, 0x0000014c,
-0x0000014f, 0x0000014e, 0x0000014e,
-0x00000151, 0x00000150, 0x00000150,
-0x00000153, 0x00000152, 0x00000152,
-0x00000155, 0x00000154, 0x00000154,
-0x00000157, 0x00000156, 0x00000156,
-0x00000159, 0x00000158, 0x00000158,
-0x0000015b, 0x0000015a, 0x0000015a,
-0x0000015d, 0x0000015c, 0x0000015c,
-0x0000015f, 0x0000015e, 0x0000015e,
-0x00000161, 0x00000160, 0x00000160,
-0x00000163, 0x00000162, 0x00000162,
-0x00000165, 0x00000164, 0x00000164,
-0x00000167, 0x00000166, 0x00000166,
-0x00000169, 0x00000168, 0x00000168,
-0x0000016b, 0x0000016a, 0x0000016a,
-0x0000016d, 0x0000016c, 0x0000016c,
-0x0000016f, 0x0000016e, 0x0000016e,
-0x00000171, 0x00000170, 0x00000170,
-0x00000173, 0x00000172, 0x00000172,
-0x00000175, 0x00000174, 0x00000174,
-0x00000177, 0x00000176, 0x00000176,
-0x0000017a, 0x00000179, 0x00000179,
-0x0000017c, 0x0000017b, 0x0000017b,
-0x0000017e, 0x0000017d, 0x0000017d,
-0x0000017f, 0x00000053, 0x00000053,
-0x00000183, 0x00000182, 0x00000182,
-0x00000185, 0x00000184, 0x00000184,
-0x00000188, 0x00000187, 0x00000187,
-0x0000018c, 0x0000018b, 0x0000018b,
-0x00000192, 0x00000191, 0x00000191,
-0x00000195, 0x000001f6, 0x000001f6,
-0x00000199, 0x00000198, 0x00000198,
-0x0000019e, 0x00000220, 0x00000220,
-0x000001a1, 0x000001a0, 0x000001a0,
-0x000001a3, 0x000001a2, 0x000001a2,
-0x000001a5, 0x000001a4, 0x000001a4,
-0x000001a8, 0x000001a7, 0x000001a7,
-0x000001ad, 0x000001ac, 0x000001ac,
-0x000001b0, 0x000001af, 0x000001af,
-0x000001b4, 0x000001b3, 0x000001b3,
-0x000001b6, 0x000001b5, 0x000001b5,
-0x000001b9, 0x000001b8, 0x000001b8,
-0x000001bd, 0x000001bc, 0x000001bc,
-0x000001bf, 0x000001f7, 0x000001f7,
-0x000001c6, 0x000001c4, 0x000001c5,
-0x000001c9, 0x000001c7, 0x000001c8,
-0x000001cc, 0x000001ca, 0x000001cb,
-0x000001ce, 0x000001cd, 0x000001cd,
-0x000001d0, 0x000001cf, 0x000001cf,
-0x000001d2, 0x000001d1, 0x000001d1,
-0x000001d4, 0x000001d3, 0x000001d3,
-0x000001d6, 0x000001d5, 0x000001d5,
-0x000001d8, 0x000001d7, 0x000001d7,
-0x000001da, 0x000001d9, 0x000001d9,
-0x000001dc, 0x000001db, 0x000001db,
-0x000001dd, 0x0000018e, 0x0000018e,
-0x000001df, 0x000001de, 0x000001de,
-0x000001e1, 0x000001e0, 0x000001e0,
-0x000001e3, 0x000001e2, 0x000001e2,
-0x000001e5, 0x000001e4, 0x000001e4,
-0x000001e7, 0x000001e6, 0x000001e6,
-0x000001e9, 0x000001e8, 0x000001e8,
-0x000001eb, 0x000001ea, 0x000001ea,
-0x000001ed, 0x000001ec, 0x000001ec,
-0x000001ef, 0x000001ee, 0x000001ee,
-0x000001f3, 0x000001f1, 0x000001f2,
-0x000001f5, 0x000001f4, 0x000001f4,
-0x000001f9, 0x000001f8, 0x000001f8,
-0x000001fb, 0x000001fa, 0x000001fa,
-0x000001fd, 0x000001fc, 0x000001fc,
-0x000001ff, 0x000001fe, 0x000001fe,
-0x00000201, 0x00000200, 0x00000200,
-0x00000203, 0x00000202, 0x00000202,
-0x00000205, 0x00000204, 0x00000204,
-0x00000207, 0x00000206, 0x00000206,
-0x00000209, 0x00000208, 0x00000208,
-0x0000020b, 0x0000020a, 0x0000020a,
-0x0000020d, 0x0000020c, 0x0000020c,
-0x0000020f, 0x0000020e, 0x0000020e,
-0x00000211, 0x00000210, 0x00000210,
-0x00000213, 0x00000212, 0x00000212,
-0x00000215, 0x00000214, 0x00000214,
-0x00000217, 0x00000216, 0x00000216,
-0x00000219, 0x00000218, 0x00000218,
-0x0000021b, 0x0000021a, 0x0000021a,
-0x0000021d, 0x0000021c, 0x0000021c,
-0x0000021f, 0x0000021e, 0x0000021e,
-0x00000223, 0x00000222, 0x00000222,
-0x00000225, 0x00000224, 0x00000224,
-0x00000227, 0x00000226, 0x00000226,
-0x00000229, 0x00000228, 0x00000228,
-0x0000022b, 0x0000022a, 0x0000022a,
-0x0000022d, 0x0000022c, 0x0000022c,
-0x0000022f, 0x0000022e, 0x0000022e,
-0x00000231, 0x00000230, 0x00000230,
-0x00000233, 0x00000232, 0x00000232,
-0x00000253, 0x00000181, 0x00000181,
-0x00000254, 0x00000186, 0x00000186,
-0x00000256, 0x00000189, 0x00000189,
-0x00000257, 0x0000018a, 0x0000018a,
-0x00000259, 0x0000018f, 0x0000018f,
-0x0000025b, 0x00000190, 0x00000190,
-0x00000260, 0x00000193, 0x00000193,
-0x00000263, 0x00000194, 0x00000194,
-0x00000268, 0x00000197, 0x00000197,
-0x00000269, 0x00000196, 0x00000196,
-0x0000026f, 0x0000019c, 0x0000019c,
-0x00000272, 0x0000019d, 0x0000019d,
-0x00000275, 0x0000019f, 0x0000019f,
-0x00000280, 0x000001a6, 0x000001a6,
-0x00000283, 0x000001a9, 0x000001a9,
-0x00000288, 0x000001ae, 0x000001ae,
-0x0000028a, 0x000001b1, 0x000001b1,
-0x0000028b, 0x000001b2, 0x000001b2,
-0x00000292, 0x000001b7, 0x000001b7,
-0x00000345, 0x00000399, 0x00000399,
-0x000003ac, 0x00000386, 0x00000386,
-0x000003ad, 0x00000388, 0x00000388,
-0x000003ae, 0x00000389, 0x00000389,
-0x000003af, 0x0000038a, 0x0000038a,
-0x000003b1, 0x00000391, 0x00000391,
-0x000003b2, 0x00000392, 0x00000392,
-0x000003b3, 0x00000393, 0x00000393,
-0x000003b4, 0x00000394, 0x00000394,
-0x000003b5, 0x00000395, 0x00000395,
-0x000003b6, 0x00000396, 0x00000396,
-0x000003b7, 0x00000397, 0x00000397,
-0x000003b8, 0x00000398, 0x00000398,
-0x000003b9, 0x00000399, 0x00000399,
-0x000003ba, 0x0000039a, 0x0000039a,
-0x000003bb, 0x0000039b, 0x0000039b,
-0x000003bc, 0x0000039c, 0x0000039c,
-0x000003bd, 0x0000039d, 0x0000039d,
-0x000003be, 0x0000039e, 0x0000039e,
-0x000003bf, 0x0000039f, 0x0000039f,
-0x000003c0, 0x000003a0, 0x000003a0,
-0x000003c1, 0x000003a1, 0x000003a1,
-0x000003c2, 0x000003a3, 0x000003a3,
-0x000003c3, 0x000003a3, 0x000003a3,
-0x000003c4, 0x000003a4, 0x000003a4,
-0x000003c5, 0x000003a5, 0x000003a5,
-0x000003c6, 0x000003a6, 0x000003a6,
-0x000003c7, 0x000003a7, 0x000003a7,
-0x000003c8, 0x000003a8, 0x000003a8,
-0x000003c9, 0x000003a9, 0x000003a9,
-0x000003ca, 0x000003aa, 0x000003aa,
-0x000003cb, 0x000003ab, 0x000003ab,
-0x000003cc, 0x0000038c, 0x0000038c,
-0x000003cd, 0x0000038e, 0x0000038e,
-0x000003ce, 0x0000038f, 0x0000038f,
-0x000003d0, 0x00000392, 0x00000392,
-0x000003d1, 0x00000398, 0x00000398,
-0x000003d5, 0x000003a6, 0x000003a6,
-0x000003d6, 0x000003a0, 0x000003a0,
-0x000003d9, 0x000003d8, 0x000003d8,
-0x000003db, 0x000003da, 0x000003da,
-0x000003dd, 0x000003dc, 0x000003dc,
-0x000003df, 0x000003de, 0x000003de,
-0x000003e1, 0x000003e0, 0x000003e0,
-0x000003e3, 0x000003e2, 0x000003e2,
-0x000003e5, 0x000003e4, 0x000003e4,
-0x000003e7, 0x000003e6, 0x000003e6,
-0x000003e9, 0x000003e8, 0x000003e8,
-0x000003eb, 0x000003ea, 0x000003ea,
-0x000003ed, 0x000003ec, 0x000003ec,
-0x000003ef, 0x000003ee, 0x000003ee,
-0x000003f0, 0x0000039a, 0x0000039a,
-0x000003f1, 0x000003a1, 0x000003a1,
-0x000003f2, 0x000003a3, 0x000003a3,
-0x000003f5, 0x00000395, 0x00000395,
-0x00000430, 0x00000410, 0x00000410,
-0x00000431, 0x00000411, 0x00000411,
-0x00000432, 0x00000412, 0x00000412,
-0x00000433, 0x00000413, 0x00000413,
-0x00000434, 0x00000414, 0x00000414,
-0x00000435, 0x00000415, 0x00000415,
-0x00000436, 0x00000416, 0x00000416,
-0x00000437, 0x00000417, 0x00000417,
-0x00000438, 0x00000418, 0x00000418,
-0x00000439, 0x00000419, 0x00000419,
-0x0000043a, 0x0000041a, 0x0000041a,
-0x0000043b, 0x0000041b, 0x0000041b,
-0x0000043c, 0x0000041c, 0x0000041c,
-0x0000043d, 0x0000041d, 0x0000041d,
-0x0000043e, 0x0000041e, 0x0000041e,
-0x0000043f, 0x0000041f, 0x0000041f,
-0x00000440, 0x00000420, 0x00000420,
-0x00000441, 0x00000421, 0x00000421,
-0x00000442, 0x00000422, 0x00000422,
-0x00000443, 0x00000423, 0x00000423,
-0x00000444, 0x00000424, 0x00000424,
-0x00000445, 0x00000425, 0x00000425,
-0x00000446, 0x00000426, 0x00000426,
-0x00000447, 0x00000427, 0x00000427,
-0x00000448, 0x00000428, 0x00000428,
-0x00000449, 0x00000429, 0x00000429,
-0x0000044a, 0x0000042a, 0x0000042a,
-0x0000044b, 0x0000042b, 0x0000042b,
-0x0000044c, 0x0000042c, 0x0000042c,
-0x0000044d, 0x0000042d, 0x0000042d,
-0x0000044e, 0x0000042e, 0x0000042e,
-0x0000044f, 0x0000042f, 0x0000042f,
-0x00000450, 0x00000400, 0x00000400,
-0x00000451, 0x00000401, 0x00000401,
-0x00000452, 0x00000402, 0x00000402,
-0x00000453, 0x00000403, 0x00000403,
-0x00000454, 0x00000404, 0x00000404,
-0x00000455, 0x00000405, 0x00000405,
-0x00000456, 0x00000406, 0x00000406,
-0x00000457, 0x00000407, 0x00000407,
-0x00000458, 0x00000408, 0x00000408,
-0x00000459, 0x00000409, 0x00000409,
-0x0000045a, 0x0000040a, 0x0000040a,
-0x0000045b, 0x0000040b, 0x0000040b,
-0x0000045c, 0x0000040c, 0x0000040c,
-0x0000045d, 0x0000040d, 0x0000040d,
-0x0000045e, 0x0000040e, 0x0000040e,
-0x0000045f, 0x0000040f, 0x0000040f,
-0x00000461, 0x00000460, 0x00000460,
-0x00000463, 0x00000462, 0x00000462,
-0x00000465, 0x00000464, 0x00000464,
-0x00000467, 0x00000466, 0x00000466,
-0x00000469, 0x00000468, 0x00000468,
-0x0000046b, 0x0000046a, 0x0000046a,
-0x0000046d, 0x0000046c, 0x0000046c,
-0x0000046f, 0x0000046e, 0x0000046e,
-0x00000471, 0x00000470, 0x00000470,
-0x00000473, 0x00000472, 0x00000472,
-0x00000475, 0x00000474, 0x00000474,
-0x00000477, 0x00000476, 0x00000476,
-0x00000479, 0x00000478, 0x00000478,
-0x0000047b, 0x0000047a, 0x0000047a,
-0x0000047d, 0x0000047c, 0x0000047c,
-0x0000047f, 0x0000047e, 0x0000047e,
-0x00000481, 0x00000480, 0x00000480,
-0x0000048b, 0x0000048a, 0x0000048a,
-0x0000048d, 0x0000048c, 0x0000048c,
-0x0000048f, 0x0000048e, 0x0000048e,
-0x00000491, 0x00000490, 0x00000490,
-0x00000493, 0x00000492, 0x00000492,
-0x00000495, 0x00000494, 0x00000494,
-0x00000497, 0x00000496, 0x00000496,
-0x00000499, 0x00000498, 0x00000498,
-0x0000049b, 0x0000049a, 0x0000049a,
-0x0000049d, 0x0000049c, 0x0000049c,
-0x0000049f, 0x0000049e, 0x0000049e,
-0x000004a1, 0x000004a0, 0x000004a0,
-0x000004a3, 0x000004a2, 0x000004a2,
-0x000004a5, 0x000004a4, 0x000004a4,
-0x000004a7, 0x000004a6, 0x000004a6,
-0x000004a9, 0x000004a8, 0x000004a8,
-0x000004ab, 0x000004aa, 0x000004aa,
-0x000004ad, 0x000004ac, 0x000004ac,
-0x000004af, 0x000004ae, 0x000004ae,
-0x000004b1, 0x000004b0, 0x000004b0,
-0x000004b3, 0x000004b2, 0x000004b2,
-0x000004b5, 0x000004b4, 0x000004b4,
-0x000004b7, 0x000004b6, 0x000004b6,
-0x000004b9, 0x000004b8, 0x000004b8,
-0x000004bb, 0x000004ba, 0x000004ba,
-0x000004bd, 0x000004bc, 0x000004bc,
-0x000004bf, 0x000004be, 0x000004be,
-0x000004c2, 0x000004c1, 0x000004c1,
-0x000004c4, 0x000004c3, 0x000004c3,
-0x000004c6, 0x000004c5, 0x000004c5,
-0x000004c8, 0x000004c7, 0x000004c7,
-0x000004ca, 0x000004c9, 0x000004c9,
-0x000004cc, 0x000004cb, 0x000004cb,
-0x000004ce, 0x000004cd, 0x000004cd,
-0x000004d1, 0x000004d0, 0x000004d0,
-0x000004d3, 0x000004d2, 0x000004d2,
-0x000004d5, 0x000004d4, 0x000004d4,
-0x000004d7, 0x000004d6, 0x000004d6,
-0x000004d9, 0x000004d8, 0x000004d8,
-0x000004db, 0x000004da, 0x000004da,
-0x000004dd, 0x000004dc, 0x000004dc,
-0x000004df, 0x000004de, 0x000004de,
-0x000004e1, 0x000004e0, 0x000004e0,
-0x000004e3, 0x000004e2, 0x000004e2,
-0x000004e5, 0x000004e4, 0x000004e4,
-0x000004e7, 0x000004e6, 0x000004e6,
-0x000004e9, 0x000004e8, 0x000004e8,
-0x000004eb, 0x000004ea, 0x000004ea,
-0x000004ed, 0x000004ec, 0x000004ec,
-0x000004ef, 0x000004ee, 0x000004ee,
-0x000004f1, 0x000004f0, 0x000004f0,
-0x000004f3, 0x000004f2, 0x000004f2,
-0x000004f5, 0x000004f4, 0x000004f4,
-0x000004f9, 0x000004f8, 0x000004f8,
-0x00000501, 0x00000500, 0x00000500,
-0x00000503, 0x00000502, 0x00000502,
-0x00000505, 0x00000504, 0x00000504,
-0x00000507, 0x00000506, 0x00000506,
-0x00000509, 0x00000508, 0x00000508,
-0x0000050b, 0x0000050a, 0x0000050a,
-0x0000050d, 0x0000050c, 0x0000050c,
-0x0000050f, 0x0000050e, 0x0000050e,
-0x00000561, 0x00000531, 0x00000531,
-0x00000562, 0x00000532, 0x00000532,
-0x00000563, 0x00000533, 0x00000533,
-0x00000564, 0x00000534, 0x00000534,
-0x00000565, 0x00000535, 0x00000535,
-0x00000566, 0x00000536, 0x00000536,
-0x00000567, 0x00000537, 0x00000537,
-0x00000568, 0x00000538, 0x00000538,
-0x00000569, 0x00000539, 0x00000539,
-0x0000056a, 0x0000053a, 0x0000053a,
-0x0000056b, 0x0000053b, 0x0000053b,
-0x0000056c, 0x0000053c, 0x0000053c,
-0x0000056d, 0x0000053d, 0x0000053d,
-0x0000056e, 0x0000053e, 0x0000053e,
-0x0000056f, 0x0000053f, 0x0000053f,
-0x00000570, 0x00000540, 0x00000540,
-0x00000571, 0x00000541, 0x00000541,
-0x00000572, 0x00000542, 0x00000542,
-0x00000573, 0x00000543, 0x00000543,
-0x00000574, 0x00000544, 0x00000544,
-0x00000575, 0x00000545, 0x00000545,
-0x00000576, 0x00000546, 0x00000546,
-0x00000577, 0x00000547, 0x00000547,
-0x00000578, 0x00000548, 0x00000548,
-0x00000579, 0x00000549, 0x00000549,
-0x0000057a, 0x0000054a, 0x0000054a,
-0x0000057b, 0x0000054b, 0x0000054b,
-0x0000057c, 0x0000054c, 0x0000054c,
-0x0000057d, 0x0000054d, 0x0000054d,
-0x0000057e, 0x0000054e, 0x0000054e,
-0x0000057f, 0x0000054f, 0x0000054f,
-0x00000580, 0x00000550, 0x00000550,
-0x00000581, 0x00000551, 0x00000551,
-0x00000582, 0x00000552, 0x00000552,
-0x00000583, 0x00000553, 0x00000553,
-0x00000584, 0x00000554, 0x00000554,
-0x00000585, 0x00000555, 0x00000555,
-0x00000586, 0x00000556, 0x00000556,
-0x00001e01, 0x00001e00, 0x00001e00,
-0x00001e03, 0x00001e02, 0x00001e02,
-0x00001e05, 0x00001e04, 0x00001e04,
-0x00001e07, 0x00001e06, 0x00001e06,
-0x00001e09, 0x00001e08, 0x00001e08,
-0x00001e0b, 0x00001e0a, 0x00001e0a,
-0x00001e0d, 0x00001e0c, 0x00001e0c,
-0x00001e0f, 0x00001e0e, 0x00001e0e,
-0x00001e11, 0x00001e10, 0x00001e10,
-0x00001e13, 0x00001e12, 0x00001e12,
-0x00001e15, 0x00001e14, 0x00001e14,
-0x00001e17, 0x00001e16, 0x00001e16,
-0x00001e19, 0x00001e18, 0x00001e18,
-0x00001e1b, 0x00001e1a, 0x00001e1a,
-0x00001e1d, 0x00001e1c, 0x00001e1c,
-0x00001e1f, 0x00001e1e, 0x00001e1e,
-0x00001e21, 0x00001e20, 0x00001e20,
-0x00001e23, 0x00001e22, 0x00001e22,
-0x00001e25, 0x00001e24, 0x00001e24,
-0x00001e27, 0x00001e26, 0x00001e26,
-0x00001e29, 0x00001e28, 0x00001e28,
-0x00001e2b, 0x00001e2a, 0x00001e2a,
-0x00001e2d, 0x00001e2c, 0x00001e2c,
-0x00001e2f, 0x00001e2e, 0x00001e2e,
-0x00001e31, 0x00001e30, 0x00001e30,
-0x00001e33, 0x00001e32, 0x00001e32,
-0x00001e35, 0x00001e34, 0x00001e34,
-0x00001e37, 0x00001e36, 0x00001e36,
-0x00001e39, 0x00001e38, 0x00001e38,
-0x00001e3b, 0x00001e3a, 0x00001e3a,
-0x00001e3d, 0x00001e3c, 0x00001e3c,
-0x00001e3f, 0x00001e3e, 0x00001e3e,
-0x00001e41, 0x00001e40, 0x00001e40,
-0x00001e43, 0x00001e42, 0x00001e42,
-0x00001e45, 0x00001e44, 0x00001e44,
-0x00001e47, 0x00001e46, 0x00001e46,
-0x00001e49, 0x00001e48, 0x00001e48,
-0x00001e4b, 0x00001e4a, 0x00001e4a,
-0x00001e4d, 0x00001e4c, 0x00001e4c,
-0x00001e4f, 0x00001e4e, 0x00001e4e,
-0x00001e51, 0x00001e50, 0x00001e50,
-0x00001e53, 0x00001e52, 0x00001e52,
-0x00001e55, 0x00001e54, 0x00001e54,
-0x00001e57, 0x00001e56, 0x00001e56,
-0x00001e59, 0x00001e58, 0x00001e58,
-0x00001e5b, 0x00001e5a, 0x00001e5a,
-0x00001e5d, 0x00001e5c, 0x00001e5c,
-0x00001e5f, 0x00001e5e, 0x00001e5e,
-0x00001e61, 0x00001e60, 0x00001e60,
-0x00001e63, 0x00001e62, 0x00001e62,
-0x00001e65, 0x00001e64, 0x00001e64,
-0x00001e67, 0x00001e66, 0x00001e66,
-0x00001e69, 0x00001e68, 0x00001e68,
-0x00001e6b, 0x00001e6a, 0x00001e6a,
-0x00001e6d, 0x00001e6c, 0x00001e6c,
-0x00001e6f, 0x00001e6e, 0x00001e6e,
-0x00001e71, 0x00001e70, 0x00001e70,
-0x00001e73, 0x00001e72, 0x00001e72,
-0x00001e75, 0x00001e74, 0x00001e74,
-0x00001e77, 0x00001e76, 0x00001e76,
-0x00001e79, 0x00001e78, 0x00001e78,
-0x00001e7b, 0x00001e7a, 0x00001e7a,
-0x00001e7d, 0x00001e7c, 0x00001e7c,
-0x00001e7f, 0x00001e7e, 0x00001e7e,
-0x00001e81, 0x00001e80, 0x00001e80,
-0x00001e83, 0x00001e82, 0x00001e82,
-0x00001e85, 0x00001e84, 0x00001e84,
-0x00001e87, 0x00001e86, 0x00001e86,
-0x00001e89, 0x00001e88, 0x00001e88,
-0x00001e8b, 0x00001e8a, 0x00001e8a,
-0x00001e8d, 0x00001e8c, 0x00001e8c,
-0x00001e8f, 0x00001e8e, 0x00001e8e,
-0x00001e91, 0x00001e90, 0x00001e90,
-0x00001e93, 0x00001e92, 0x00001e92,
-0x00001e95, 0x00001e94, 0x00001e94,
-0x00001e9b, 0x00001e60, 0x00001e60,
-0x00001ea1, 0x00001ea0, 0x00001ea0,
-0x00001ea3, 0x00001ea2, 0x00001ea2,
-0x00001ea5, 0x00001ea4, 0x00001ea4,
-0x00001ea7, 0x00001ea6, 0x00001ea6,
-0x00001ea9, 0x00001ea8, 0x00001ea8,
-0x00001eab, 0x00001eaa, 0x00001eaa,
-0x00001ead, 0x00001eac, 0x00001eac,
-0x00001eaf, 0x00001eae, 0x00001eae,
-0x00001eb1, 0x00001eb0, 0x00001eb0,
-0x00001eb3, 0x00001eb2, 0x00001eb2,
-0x00001eb5, 0x00001eb4, 0x00001eb4,
-0x00001eb7, 0x00001eb6, 0x00001eb6,
-0x00001eb9, 0x00001eb8, 0x00001eb8,
-0x00001ebb, 0x00001eba, 0x00001eba,
-0x00001ebd, 0x00001ebc, 0x00001ebc,
-0x00001ebf, 0x00001ebe, 0x00001ebe,
-0x00001ec1, 0x00001ec0, 0x00001ec0,
-0x00001ec3, 0x00001ec2, 0x00001ec2,
-0x00001ec5, 0x00001ec4, 0x00001ec4,
-0x00001ec7, 0x00001ec6, 0x00001ec6,
-0x00001ec9, 0x00001ec8, 0x00001ec8,
-0x00001ecb, 0x00001eca, 0x00001eca,
-0x00001ecd, 0x00001ecc, 0x00001ecc,
-0x00001ecf, 0x00001ece, 0x00001ece,
-0x00001ed1, 0x00001ed0, 0x00001ed0,
-0x00001ed3, 0x00001ed2, 0x00001ed2,
-0x00001ed5, 0x00001ed4, 0x00001ed4,
-0x00001ed7, 0x00001ed6, 0x00001ed6,
-0x00001ed9, 0x00001ed8, 0x00001ed8,
-0x00001edb, 0x00001eda, 0x00001eda,
-0x00001edd, 0x00001edc, 0x00001edc,
-0x00001edf, 0x00001ede, 0x00001ede,
-0x00001ee1, 0x00001ee0, 0x00001ee0,
-0x00001ee3, 0x00001ee2, 0x00001ee2,
-0x00001ee5, 0x00001ee4, 0x00001ee4,
-0x00001ee7, 0x00001ee6, 0x00001ee6,
-0x00001ee9, 0x00001ee8, 0x00001ee8,
-0x00001eeb, 0x00001eea, 0x00001eea,
-0x00001eed, 0x00001eec, 0x00001eec,
-0x00001eef, 0x00001eee, 0x00001eee,
-0x00001ef1, 0x00001ef0, 0x00001ef0,
-0x00001ef3, 0x00001ef2, 0x00001ef2,
-0x00001ef5, 0x00001ef4, 0x00001ef4,
-0x00001ef7, 0x00001ef6, 0x00001ef6,
-0x00001ef9, 0x00001ef8, 0x00001ef8,
-0x00001f00, 0x00001f08, 0x00001f08,
-0x00001f01, 0x00001f09, 0x00001f09,
-0x00001f02, 0x00001f0a, 0x00001f0a,
-0x00001f03, 0x00001f0b, 0x00001f0b,
-0x00001f04, 0x00001f0c, 0x00001f0c,
-0x00001f05, 0x00001f0d, 0x00001f0d,
-0x00001f06, 0x00001f0e, 0x00001f0e,
-0x00001f07, 0x00001f0f, 0x00001f0f,
-0x00001f10, 0x00001f18, 0x00001f18,
-0x00001f11, 0x00001f19, 0x00001f19,
-0x00001f12, 0x00001f1a, 0x00001f1a,
-0x00001f13, 0x00001f1b, 0x00001f1b,
-0x00001f14, 0x00001f1c, 0x00001f1c,
-0x00001f15, 0x00001f1d, 0x00001f1d,
-0x00001f20, 0x00001f28, 0x00001f28,
-0x00001f21, 0x00001f29, 0x00001f29,
-0x00001f22, 0x00001f2a, 0x00001f2a,
-0x00001f23, 0x00001f2b, 0x00001f2b,
-0x00001f24, 0x00001f2c, 0x00001f2c,
-0x00001f25, 0x00001f2d, 0x00001f2d,
-0x00001f26, 0x00001f2e, 0x00001f2e,
-0x00001f27, 0x00001f2f, 0x00001f2f,
-0x00001f30, 0x00001f38, 0x00001f38,
-0x00001f31, 0x00001f39, 0x00001f39,
-0x00001f32, 0x00001f3a, 0x00001f3a,
-0x00001f33, 0x00001f3b, 0x00001f3b,
-0x00001f34, 0x00001f3c, 0x00001f3c,
-0x00001f35, 0x00001f3d, 0x00001f3d,
-0x00001f36, 0x00001f3e, 0x00001f3e,
-0x00001f37, 0x00001f3f, 0x00001f3f,
-0x00001f40, 0x00001f48, 0x00001f48,
-0x00001f41, 0x00001f49, 0x00001f49,
-0x00001f42, 0x00001f4a, 0x00001f4a,
-0x00001f43, 0x00001f4b, 0x00001f4b,
-0x00001f44, 0x00001f4c, 0x00001f4c,
-0x00001f45, 0x00001f4d, 0x00001f4d,
-0x00001f51, 0x00001f59, 0x00001f59,
-0x00001f53, 0x00001f5b, 0x00001f5b,
-0x00001f55, 0x00001f5d, 0x00001f5d,
-0x00001f57, 0x00001f5f, 0x00001f5f,
-0x00001f60, 0x00001f68, 0x00001f68,
-0x00001f61, 0x00001f69, 0x00001f69,
-0x00001f62, 0x00001f6a, 0x00001f6a,
-0x00001f63, 0x00001f6b, 0x00001f6b,
-0x00001f64, 0x00001f6c, 0x00001f6c,
-0x00001f65, 0x00001f6d, 0x00001f6d,
-0x00001f66, 0x00001f6e, 0x00001f6e,
-0x00001f67, 0x00001f6f, 0x00001f6f,
-0x00001f70, 0x00001fba, 0x00001fba,
-0x00001f71, 0x00001fbb, 0x00001fbb,
-0x00001f72, 0x00001fc8, 0x00001fc8,
-0x00001f73, 0x00001fc9, 0x00001fc9,
-0x00001f74, 0x00001fca, 0x00001fca,
-0x00001f75, 0x00001fcb, 0x00001fcb,
-0x00001f76, 0x00001fda, 0x00001fda,
-0x00001f77, 0x00001fdb, 0x00001fdb,
-0x00001f78, 0x00001ff8, 0x00001ff8,
-0x00001f79, 0x00001ff9, 0x00001ff9,
-0x00001f7a, 0x00001fea, 0x00001fea,
-0x00001f7b, 0x00001feb, 0x00001feb,
-0x00001f7c, 0x00001ffa, 0x00001ffa,
-0x00001f7d, 0x00001ffb, 0x00001ffb,
-0x00001f80, 0x00001f88, 0x00001f88,
-0x00001f81, 0x00001f89, 0x00001f89,
-0x00001f82, 0x00001f8a, 0x00001f8a,
-0x00001f83, 0x00001f8b, 0x00001f8b,
-0x00001f84, 0x00001f8c, 0x00001f8c,
-0x00001f85, 0x00001f8d, 0x00001f8d,
-0x00001f86, 0x00001f8e, 0x00001f8e,
-0x00001f87, 0x00001f8f, 0x00001f8f,
-0x00001f90, 0x00001f98, 0x00001f98,
-0x00001f91, 0x00001f99, 0x00001f99,
-0x00001f92, 0x00001f9a, 0x00001f9a,
-0x00001f93, 0x00001f9b, 0x00001f9b,
-0x00001f94, 0x00001f9c, 0x00001f9c,
-0x00001f95, 0x00001f9d, 0x00001f9d,
-0x00001f96, 0x00001f9e, 0x00001f9e,
-0x00001f97, 0x00001f9f, 0x00001f9f,
-0x00001fa0, 0x00001fa8, 0x00001fa8,
-0x00001fa1, 0x00001fa9, 0x00001fa9,
-0x00001fa2, 0x00001faa, 0x00001faa,
-0x00001fa3, 0x00001fab, 0x00001fab,
-0x00001fa4, 0x00001fac, 0x00001fac,
-0x00001fa5, 0x00001fad, 0x00001fad,
-0x00001fa6, 0x00001fae, 0x00001fae,
-0x00001fa7, 0x00001faf, 0x00001faf,
-0x00001fb0, 0x00001fb8, 0x00001fb8,
-0x00001fb1, 0x00001fb9, 0x00001fb9,
-0x00001fb3, 0x00001fbc, 0x00001fbc,
-0x00001fbe, 0x00000399, 0x00000399,
-0x00001fc3, 0x00001fcc, 0x00001fcc,
-0x00001fd0, 0x00001fd8, 0x00001fd8,
-0x00001fd1, 0x00001fd9, 0x00001fd9,
-0x00001fe0, 0x00001fe8, 0x00001fe8,
-0x00001fe1, 0x00001fe9, 0x00001fe9,
-0x00001fe5, 0x00001fec, 0x00001fec,
-0x00001ff3, 0x00001ffc, 0x00001ffc,
-0x00002170, 0x00002160, 0x00002160,
-0x00002171, 0x00002161, 0x00002161,
-0x00002172, 0x00002162, 0x00002162,
-0x00002173, 0x00002163, 0x00002163,
-0x00002174, 0x00002164, 0x00002164,
-0x00002175, 0x00002165, 0x00002165,
-0x00002176, 0x00002166, 0x00002166,
-0x00002177, 0x00002167, 0x00002167,
-0x00002178, 0x00002168, 0x00002168,
-0x00002179, 0x00002169, 0x00002169,
-0x0000217a, 0x0000216a, 0x0000216a,
-0x0000217b, 0x0000216b, 0x0000216b,
-0x0000217c, 0x0000216c, 0x0000216c,
-0x0000217d, 0x0000216d, 0x0000216d,
-0x0000217e, 0x0000216e, 0x0000216e,
-0x0000217f, 0x0000216f, 0x0000216f,
-0x000024d0, 0x000024b6, 0x000024b6,
-0x000024d1, 0x000024b7, 0x000024b7,
-0x000024d2, 0x000024b8, 0x000024b8,
-0x000024d3, 0x000024b9, 0x000024b9,
-0x000024d4, 0x000024ba, 0x000024ba,
-0x000024d5, 0x000024bb, 0x000024bb,
-0x000024d6, 0x000024bc, 0x000024bc,
-0x000024d7, 0x000024bd, 0x000024bd,
-0x000024d8, 0x000024be, 0x000024be,
-0x000024d9, 0x000024bf, 0x000024bf,
-0x000024da, 0x000024c0, 0x000024c0,
-0x000024db, 0x000024c1, 0x000024c1,
-0x000024dc, 0x000024c2, 0x000024c2,
-0x000024dd, 0x000024c3, 0x000024c3,
-0x000024de, 0x000024c4, 0x000024c4,
-0x000024df, 0x000024c5, 0x000024c5,
-0x000024e0, 0x000024c6, 0x000024c6,
-0x000024e1, 0x000024c7, 0x000024c7,
-0x000024e2, 0x000024c8, 0x000024c8,
-0x000024e3, 0x000024c9, 0x000024c9,
-0x000024e4, 0x000024ca, 0x000024ca,
-0x000024e5, 0x000024cb, 0x000024cb,
-0x000024e6, 0x000024cc, 0x000024cc,
-0x000024e7, 0x000024cd, 0x000024cd,
-0x000024e8, 0x000024ce, 0x000024ce,
-0x000024e9, 0x000024cf, 0x000024cf,
-0x0000ff41, 0x0000ff21, 0x0000ff21,
-0x0000ff42, 0x0000ff22, 0x0000ff22,
-0x0000ff43, 0x0000ff23, 0x0000ff23,
-0x0000ff44, 0x0000ff24, 0x0000ff24,
-0x0000ff45, 0x0000ff25, 0x0000ff25,
-0x0000ff46, 0x0000ff26, 0x0000ff26,
-0x0000ff47, 0x0000ff27, 0x0000ff27,
-0x0000ff48, 0x0000ff28, 0x0000ff28,
-0x0000ff49, 0x0000ff29, 0x0000ff29,
-0x0000ff4a, 0x0000ff2a, 0x0000ff2a,
-0x0000ff4b, 0x0000ff2b, 0x0000ff2b,
-0x0000ff4c, 0x0000ff2c, 0x0000ff2c,
-0x0000ff4d, 0x0000ff2d, 0x0000ff2d,
-0x0000ff4e, 0x0000ff2e, 0x0000ff2e,
-0x0000ff4f, 0x0000ff2f, 0x0000ff2f,
-0x0000ff50, 0x0000ff30, 0x0000ff30,
-0x0000ff51, 0x0000ff31, 0x0000ff31,
-0x0000ff52, 0x0000ff32, 0x0000ff32,
-0x0000ff53, 0x0000ff33, 0x0000ff33,
-0x0000ff54, 0x0000ff34, 0x0000ff34,
-0x0000ff55, 0x0000ff35, 0x0000ff35,
-0x0000ff56, 0x0000ff36, 0x0000ff36,
-0x0000ff57, 0x0000ff37, 0x0000ff37,
-0x0000ff58, 0x0000ff38, 0x0000ff38,
-0x0000ff59, 0x0000ff39, 0x0000ff39,
-0x0000ff5a, 0x0000ff3a, 0x0000ff3a,
-0x00010428, 0x00010400, 0x00010400,
-0x00010429, 0x00010401, 0x00010401,
-0x0001042a, 0x00010402, 0x00010402,
-0x0001042b, 0x00010403, 0x00010403,
-0x0001042c, 0x00010404, 0x00010404,
-0x0001042d, 0x00010405, 0x00010405,
-0x0001042e, 0x00010406, 0x00010406,
-0x0001042f, 0x00010407, 0x00010407,
-0x00010430, 0x00010408, 0x00010408,
-0x00010431, 0x00010409, 0x00010409,
-0x00010432, 0x0001040a, 0x0001040a,
-0x00010433, 0x0001040b, 0x0001040b,
-0x00010434, 0x0001040c, 0x0001040c,
-0x00010435, 0x0001040d, 0x0001040d,
-0x00010436, 0x0001040e, 0x0001040e,
-0x00010437, 0x0001040f, 0x0001040f,
-0x00010438, 0x00010410, 0x00010410,
-0x00010439, 0x00010411, 0x00010411,
-0x0001043a, 0x00010412, 0x00010412,
-0x0001043b, 0x00010413, 0x00010413,
-0x0001043c, 0x00010414, 0x00010414,
-0x0001043d, 0x00010415, 0x00010415,
-0x0001043e, 0x00010416, 0x00010416,
-0x0001043f, 0x00010417, 0x00010417,
-0x00010440, 0x00010418, 0x00010418,
-0x00010441, 0x00010419, 0x00010419,
-0x00010442, 0x0001041a, 0x0001041a,
-0x00010443, 0x0001041b, 0x0001041b,
-0x00010444, 0x0001041c, 0x0001041c,
-0x00010445, 0x0001041d, 0x0001041d,
-0x00010446, 0x0001041e, 0x0001041e,
-0x00010447, 0x0001041f, 0x0001041f,
-0x00010448, 0x00010420, 0x00010420,
-0x00010449, 0x00010421, 0x00010421,
-0x0001044a, 0x00010422, 0x00010422,
-0x0001044b, 0x00010423, 0x00010423,
-0x0001044c, 0x00010424, 0x00010424,
-0x0001044d, 0x00010425, 0x00010425,
-/* title */
-0x000001c5, 0x000001c4, 0x000001c6,
-0x000001c8, 0x000001c7, 0x000001c9,
-0x000001cb, 0x000001ca, 0x000001cc,
-0x000001f2, 0x000001f1, 0x000001f3,
-};
diff --git a/ext/mcrypt/CREDITS b/ext/mcrypt/CREDITS
deleted file mode 100644
index 00f871b171..0000000000
--- a/ext/mcrypt/CREDITS
+++ /dev/null
@@ -1,2 +0,0 @@
-mcrypt
-Sascha Schumann, Derick Rethans
diff --git a/ext/mcrypt/TODO b/ext/mcrypt/TODO
deleted file mode 100644
index a9d2d3a883..0000000000
--- a/ext/mcrypt/TODO
+++ /dev/null
@@ -1,6 +0,0 @@
-/* $Id$ */
-
-ToDo:
-- Convert to zend_parse_parameters
-- Unify error handling
-- Implement encryption streams
diff --git a/ext/mcrypt/config.m4 b/ext/mcrypt/config.m4
deleted file mode 100644
index 4d9cc3eb06..0000000000
--- a/ext/mcrypt/config.m4
+++ /dev/null
@@ -1,61 +0,0 @@
-dnl
-dnl $Id$
-dnl
-
-AC_DEFUN(PHP_MCRYPT_CHECK_VERSION,[
- old_CPPFLAGS=$CPPFLAGS
- CPPFLAGS=-I$MCRYPT_DIR/include
- AC_MSG_CHECKING(for libmcrypt version)
- AC_EGREP_CPP(yes,[
-#include <mcrypt.h>
-#if MCRYPT_API_VERSION >= 20021217
- yes
-#endif
- ],[
- AC_MSG_RESULT(>= 2.5.6)
- ],[
- AC_MSG_ERROR(libmcrypt version 2.5.6 or greater required.)
- ])
- CPPFLAGS=$old_CPPFLAGS
-])
-
-
-PHP_ARG_WITH(mcrypt, for mcrypt support,
-[ --with-mcrypt[=DIR] Include mcrypt support.])
-
-if test "$PHP_MCRYPT" != "no"; then
- for i in $PHP_MCRYPT /usr/local /usr; do
- test -f $i/include/mcrypt.h && MCRYPT_DIR=$i && break
- done
-
- if test -z "$MCRYPT_DIR"; then
- AC_MSG_ERROR(mcrypt.h not found. Please reinstall libmcrypt.)
- fi
-
- PHP_MCRYPT_CHECK_VERSION
-
- PHP_CHECK_LIBRARY(mcrypt, mcrypt_module_open,
- [
- PHP_ADD_LIBRARY(ltdl,, MCRYPT_SHARED_LIBADD)
- AC_DEFINE(HAVE_LIBMCRYPT,1,[ ])
- ],[
- unset found
- unset ac_cv_lib_mcrypt_mcrypt_module_open
- PHP_CHECK_LIBRARY(mcrypt, mcrypt_module_open,
- [
- AC_DEFINE(HAVE_LIBMCRYPT,1,[ ])
- ],[
- AC_MSG_ERROR([Sorry, I was not able to diagnose which libmcrypt version you have installed.])
- ],[
- -L$MCRYPT_DIR/lib
- ])
- ],[
- -L$MCRYPT_DIR/lib -lltdl
- ])
-
- PHP_ADD_LIBRARY_WITH_PATH(mcrypt, $MCRYPT_DIR/lib, MCRYPT_SHARED_LIBADD)
- PHP_ADD_INCLUDE($MCRYPT_DIR/include)
-
- PHP_SUBST(MCRYPT_SHARED_LIBADD)
- PHP_NEW_EXTENSION(mcrypt, mcrypt.c, $ext_shared)
-fi
diff --git a/ext/mcrypt/config.w32 b/ext/mcrypt/config.w32
deleted file mode 100644
index da9b54d346..0000000000
--- a/ext/mcrypt/config.w32
+++ /dev/null
@@ -1,17 +0,0 @@
-// $Id$
-// vim:ft=javascript
-
-ARG_WITH("mcrypt", "mcrypt support", "no");
-
-if (PHP_MCRYPT != "no") {
-
- if (CHECK_HEADER_ADD_INCLUDE('mcrypt.h', 'CFLAGS_MCRYPT') &&
- CHECK_LIB('libmcrypt.lib', 'mcrypt')) {
- EXTENSION('mcrypt', 'mcrypt.c');
- AC_DEFINE('HAVE_LIBMCRYPT', 1);
- AC_DEFINE('HAVE_LIBMCRYPT24', 1);
- } else {
- WARNING("mcrypt not enabled; libraries and headers not found");
- }
-}
-
diff --git a/ext/mcrypt/mcrypt.c b/ext/mcrypt/mcrypt.c
deleted file mode 100644
index 35bf4279b7..0000000000
--- a/ext/mcrypt/mcrypt.c
+++ /dev/null
@@ -1,1275 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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. |
- +----------------------------------------------------------------------+
- | Authors: Sascha Schumann <sascha@schumann.cx> |
- | Derick Rethans <derick@derickrethans.nl> |
- +----------------------------------------------------------------------+
- */
-/* $Id$ */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "php.h"
-
-#if HAVE_LIBMCRYPT
-
-#include "php_mcrypt.h"
-#include "fcntl.h"
-
-#define NON_FREE
-#define MCRYPT2
-#include "mcrypt.h"
-#include "php_ini.h"
-#include "php_globals.h"
-#include "ext/standard/info.h"
-
-static int le_mcrypt;
-
-function_entry mcrypt_functions[] = {
- PHP_FE(mcrypt_ecb, NULL)
- PHP_FE(mcrypt_cbc, NULL)
- PHP_FE(mcrypt_cfb, NULL)
- PHP_FE(mcrypt_ofb, NULL)
- PHP_FE(mcrypt_get_key_size, NULL)
- PHP_FE(mcrypt_get_block_size, NULL)
- PHP_FE(mcrypt_get_cipher_name, NULL)
- PHP_FE(mcrypt_create_iv, NULL)
-
- PHP_FE(mcrypt_list_algorithms, NULL)
- PHP_FE(mcrypt_list_modes, NULL)
- PHP_FE(mcrypt_get_iv_size, NULL)
- PHP_FE(mcrypt_encrypt, NULL)
- PHP_FE(mcrypt_decrypt, NULL)
-
- PHP_FE(mcrypt_module_open, NULL)
- PHP_FE(mcrypt_generic_init, NULL)
- PHP_FE(mcrypt_generic, NULL)
- PHP_FE(mdecrypt_generic, NULL)
- PHP_FE(mcrypt_generic_end, NULL)
- PHP_FE(mcrypt_generic_deinit, NULL)
-
- PHP_FE(mcrypt_enc_self_test, NULL)
- PHP_FE(mcrypt_enc_is_block_algorithm_mode, NULL)
- PHP_FE(mcrypt_enc_is_block_algorithm, NULL)
- PHP_FE(mcrypt_enc_is_block_mode, NULL)
- PHP_FE(mcrypt_enc_get_block_size, NULL)
- PHP_FE(mcrypt_enc_get_key_size, NULL)
- PHP_FE(mcrypt_enc_get_supported_key_sizes, NULL)
- PHP_FE(mcrypt_enc_get_iv_size, NULL)
- PHP_FE(mcrypt_enc_get_algorithms_name, NULL)
- PHP_FE(mcrypt_enc_get_modes_name, NULL)
- PHP_FE(mcrypt_module_self_test, NULL)
-
- PHP_FE(mcrypt_module_is_block_algorithm_mode, NULL)
- PHP_FE(mcrypt_module_is_block_algorithm, NULL)
- PHP_FE(mcrypt_module_is_block_mode, NULL)
- PHP_FE(mcrypt_module_get_algo_block_size, NULL)
- PHP_FE(mcrypt_module_get_algo_key_size, NULL)
- PHP_FE(mcrypt_module_get_supported_key_sizes, NULL)
-
- PHP_FE(mcrypt_module_close, NULL)
- {NULL, NULL, NULL}
-};
-
-static PHP_MINFO_FUNCTION(mcrypt);
-static PHP_MINIT_FUNCTION(mcrypt);
-static PHP_MSHUTDOWN_FUNCTION(mcrypt);
-
-zend_module_entry mcrypt_module_entry = {
- STANDARD_MODULE_HEADER,
- "mcrypt",
- mcrypt_functions,
- PHP_MINIT(mcrypt), PHP_MSHUTDOWN(mcrypt),
- NULL, NULL,
- PHP_MINFO(mcrypt),
- NO_VERSION_YET,
- STANDARD_MODULE_PROPERTIES,
-};
-
-ZEND_DECLARE_MODULE_GLOBALS(mcrypt)
-
-#ifdef COMPILE_DL_MCRYPT
-ZEND_GET_MODULE(mcrypt)
-#endif
-
-#define MCRYPT_ARGS2 \
- zval **cipher, **data, **key, **mode; \
- int td; \
- char *ndata; \
- size_t bsize; \
- size_t nr; \
- size_t nsize
-
-#define MCRYPT_ARGS \
- MCRYPT_ARGS2; \
- zval **iv
-
-#define MCRYPT_CONVERT \
- convert_to_string_ex(cipher); \
- convert_to_string_ex(mode); \
- convert_to_string_ex(data); \
- convert_to_string_ex(key)
-#define MCRYPT_CONVERT_WO_MODE \
- convert_to_string_ex(cipher); \
- convert_to_string_ex(data); \
- convert_to_string_ex(key)
-
-#define MCRYPT_SIZE \
- bsize = mcrypt_get_block_size(Z_LVAL_PP(cipher)); \
- nr = (Z_STRLEN_PP(data) + bsize - 1) / bsize; \
- nsize = nr * bsize
-
-#define MCRYPT_CHECK_TD_CPY \
- if (td < 0) { \
- php_error_docref(NULL TSRMLS_CC, E_WARNING, MCRYPT_FAILED); \
- RETURN_FALSE; \
- } \
- ndata = ecalloc(nr, bsize); \
- memcpy(ndata, Z_STRVAL_PP(data), Z_STRLEN_PP(data))
-
-#define MCRYPT_CHECK_IV \
- convert_to_string_ex(iv); \
- if (Z_STRLEN_PP(iv) != bsize) { \
- php_error_docref(NULL TSRMLS_CC, E_WARNING, MCRYPT_IV_WRONG_SIZE); \
- RETURN_FALSE; \
- }
-
-#define MCRYPT_ACTION(x) \
- if (Z_LVAL_PP(mode) == 0) { \
- mcrypt_##x(td, ndata, nsize); \
- } else { \
- mdecrypt_##x(td, ndata, nsize); \
- } \
- end_mcrypt_##x(td)
-
-#define MCRYPT_IV_WRONG_SIZE "The IV parameter must be as long as the blocksize"
-
-#define MCRYPT_ENCRYPT 0
-#define MCRYPT_DECRYPT 1
-
-#define MCRYPT_GET_INI \
- cipher_dir_string = MCG(algorithms_dir); \
- module_dir_string = MCG(modes_dir);
-
-#define MCRYPT_CHECK_PARAM_COUNT(a,b) \
- if (argc < (a) || argc > (b)) { \
- WRONG_PARAM_COUNT; \
- }
-/*
- * #warning is not ANSI C
- * #warning Invalidate resource if the param count is wrong, or other problems
- * #warning occurred during functions.
- */
-
-#define MCRYPT_GET_CRYPT_ARGS \
- switch (argc) { \
- case 5: \
- if (zend_get_parameters_ex(5, &cipher, &key, &data, &mode, &iv) == FAILURE) { \
- WRONG_PARAM_COUNT; \
- } \
- convert_to_string_ex(iv); \
- break; \
- case 4: \
- if (zend_get_parameters_ex(4, &cipher, &key, &data, &mode) == FAILURE) { \
- WRONG_PARAM_COUNT; \
- } \
- iv = NULL; \
- break; \
- default: \
- WRONG_PARAM_COUNT; \
- }
-
-#define MCRYPT_GET_TD_ARG \
- zval **mcryptind; \
- MCRYPT td; \
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &mcryptind) == FAILURE) { \
- WRONG_PARAM_COUNT \
- } \
- ZEND_FETCH_RESOURCE (td, MCRYPT, mcryptind, -1, "MCrypt", le_mcrypt);
-
-#define MCRYPT_GET_MODE_DIR_ARGS(DIRECTORY) \
- char *dir = NULL; \
- int dir_len; \
- char *module; \
- int module_len; \
- if (zend_parse_parameters (ZEND_NUM_ARGS() TSRMLS_CC, \
- "s|s", &module, &module_len, &dir, &dir_len) == FAILURE) { \
- return; \
- }
-
-#define MCRYPT_OPEN_MODULE_FAILED "Module initialization failed"
-
-#define MCRYPT_ENTRY2_2_4(a,b) REGISTER_STRING_CONSTANT("MCRYPT_" #a, b, CONST_PERSISTENT)
-#define MCRYPT_ENTRY2_4(a) MCRYPT_ENTRY_NAMED(a, a)
-
-PHP_INI_BEGIN()
- STD_PHP_INI_ENTRY("mcrypt.algorithms_dir", NULL, PHP_INI_ALL, OnUpdateString, algorithms_dir, zend_mcrypt_globals, mcrypt_globals)
- STD_PHP_INI_ENTRY("mcrypt.modes_dir", NULL, PHP_INI_ALL, OnUpdateString, modes_dir, zend_mcrypt_globals, mcrypt_globals)
-PHP_INI_END()
-
-static void php_mcrypt_module_dtor(zend_rsrc_list_entry *rsrc TSRMLS_DC)
-{
- MCRYPT td = (MCRYPT) rsrc->ptr;
- mcrypt_generic_deinit(td);
- mcrypt_module_close (td);
-}
-
-
-static PHP_MINIT_FUNCTION(mcrypt)
-{
-#if defined(ZTS)
- ZEND_INIT_MODULE_GLOBALS(mcrypt, NULL, NULL);
- Z_TYPE(mcrypt_module_entry) = type;
-#endif
-
- le_mcrypt = zend_register_list_destructors_ex(php_mcrypt_module_dtor, NULL, "mcrypt", module_number);
-
- /* modes for mcrypt_??? routines */
- REGISTER_LONG_CONSTANT("MCRYPT_ENCRYPT", 0, CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("MCRYPT_DECRYPT", 1, CONST_PERSISTENT);
-
- /* sources for mcrypt_create_iv */
- REGISTER_LONG_CONSTANT("MCRYPT_DEV_RANDOM", 0, CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("MCRYPT_DEV_URANDOM", 1, CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("MCRYPT_RAND", 2, CONST_PERSISTENT);
-
- /* ciphers */
- MCRYPT_ENTRY2_2_4(3DES, "tripledes");
- MCRYPT_ENTRY2_2_4(ARCFOUR_IV, "arcfour-iv");
- MCRYPT_ENTRY2_2_4(ARCFOUR, "arcfour");
- MCRYPT_ENTRY2_2_4(BLOWFISH, "blowfish");
- MCRYPT_ENTRY2_2_4(BLOWFISH_COMPAT, "blowfish-compat");
- MCRYPT_ENTRY2_2_4(CAST_128, "cast-128");
- MCRYPT_ENTRY2_2_4(CAST_256, "cast-256");
- MCRYPT_ENTRY2_2_4(CRYPT, "crypt");
- MCRYPT_ENTRY2_2_4(DES, "des");
- MCRYPT_ENTRY2_2_4(ENIGNA, "crypt");
- MCRYPT_ENTRY2_2_4(GOST, "gost");
- MCRYPT_ENTRY2_2_4(LOKI97, "loki97");
- MCRYPT_ENTRY2_2_4(PANAMA, "panama");
- MCRYPT_ENTRY2_2_4(RC2, "rc2");
- MCRYPT_ENTRY2_2_4(RIJNDAEL_128, "rijndael-128");
- MCRYPT_ENTRY2_2_4(RIJNDAEL_192, "rijndael-192");
- MCRYPT_ENTRY2_2_4(RIJNDAEL_256, "rijndael-256");
- MCRYPT_ENTRY2_2_4(SAFER64, "safer-sk64");
- MCRYPT_ENTRY2_2_4(SAFER128, "safer-sk128");
- MCRYPT_ENTRY2_2_4(SAFERPLUS, "saferplus");
- MCRYPT_ENTRY2_2_4(SERPENT, "serpent");
- MCRYPT_ENTRY2_2_4(THREEWAY, "threeway");
- MCRYPT_ENTRY2_2_4(TRIPLEDES, "tripledes");
- MCRYPT_ENTRY2_2_4(TWOFISH, "twofish");
- MCRYPT_ENTRY2_2_4(WAKE, "wake");
- MCRYPT_ENTRY2_2_4(XTEA, "xtea");
-
- MCRYPT_ENTRY2_2_4(IDEA, "idea");
- MCRYPT_ENTRY2_2_4(MARS, "mars");
- MCRYPT_ENTRY2_2_4(RC6, "rc6");
- MCRYPT_ENTRY2_2_4(SKIPJACK, "skipjack");
-/* modes */
- MCRYPT_ENTRY2_2_4(MODE_CBC, "cbc");
- MCRYPT_ENTRY2_2_4(MODE_CFB, "cfb");
- MCRYPT_ENTRY2_2_4(MODE_ECB, "ecb");
- MCRYPT_ENTRY2_2_4(MODE_NOFB, "nofb");
- MCRYPT_ENTRY2_2_4(MODE_OFB, "ofb");
- MCRYPT_ENTRY2_2_4(MODE_STREAM, "stream");
- REGISTER_INI_ENTRIES();
- return SUCCESS;
-}
-
-static PHP_MSHUTDOWN_FUNCTION(mcrypt)
-{
- UNREGISTER_INI_ENTRIES();
- return SUCCESS;
-}
-
-#include "ext/standard/php_smart_str.h"
-
-PHP_MINFO_FUNCTION(mcrypt)
-{
- char **modules;
- char mcrypt_api_no[16];
- int i, count;
- smart_str tmp1 = {0};
- smart_str tmp2 = {0};
-
- modules = mcrypt_list_algorithms(MCG(algorithms_dir), &count);
- if (count == 0) {
- smart_str_appends(&tmp1, "none");
- }
- for (i = 0; i < count; i++) {
- smart_str_appends(&tmp1, modules[i]);
- smart_str_appendc(&tmp1, ' ');
- }
- smart_str_0(&tmp1);
- mcrypt_free_p(modules, count);
-
- modules = mcrypt_list_modes(MCG(modes_dir), &count);
- if (count == 0) {
- smart_str_appends(&tmp2, "none");
- }
- for (i = 0; i < count; i++) {
- smart_str_appends(&tmp2, modules[i]);
- smart_str_appendc(&tmp2, ' ');
- }
- smart_str_0 (&tmp2);
- mcrypt_free_p (modules, count);
-
- snprintf (mcrypt_api_no, 16, "%d", MCRYPT_API_VERSION);
-
- php_info_print_table_start();
- php_info_print_table_header(2, "mcrypt support", "enabled");
- php_info_print_table_row(2, "Version", LIBMCRYPT_VERSION);
- php_info_print_table_row(2, "Api No", mcrypt_api_no);
- php_info_print_table_row(2, "Supported ciphers", tmp1.c);
- php_info_print_table_row(2, "Supported modes", tmp2.c);
- smart_str_free(&tmp1);
- smart_str_free(&tmp2);
- php_info_print_table_end();
-
- DISPLAY_INI_ENTRIES();
-}
-
-typedef enum {
- RANDOM = 0,
- URANDOM,
- RAND
-} iv_source;
-
-/* {{{ proto resource mcrypt_module_open(string cipher, string cipher_directory, string mode, string mode_directory)
- Opens the module of the algorithm and the mode to be used */
-PHP_FUNCTION(mcrypt_module_open)
-{
- char *cipher, *cipher_dir;
- char *mode, *mode_dir;
- int cipher_len, cipher_dir_len;
- int mode_len, mode_dir_len;
- MCRYPT td;
-
- if (zend_parse_parameters (ZEND_NUM_ARGS() TSRMLS_CC, "ssss",
- &cipher, &cipher_len, &cipher_dir, &cipher_dir_len,
- &mode, &mode_len, &mode_dir, &mode_dir_len)) {
- return;
- }
-
- td = mcrypt_module_open (
- cipher,
- cipher_dir_len > 0 ? cipher_dir : MCG(algorithms_dir),
- mode,
- mode_dir_len > 0 ? mode_dir : MCG(modes_dir)
- );
-
- if (td == MCRYPT_FAILED) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Could not open encryption module");
- RETURN_FALSE;
- } else {
- ZEND_REGISTER_RESOURCE(return_value, td, le_mcrypt);
- }
-}
-/* }}} */
-
-
-/* {{{ proto int mcrypt_generic_init(resource td, string key, string iv)
- This function initializes all buffers for the specific module */
-PHP_FUNCTION(mcrypt_generic_init)
-{
- zval **key, **iv;
- zval **mcryptind;
- unsigned char *key_s, *iv_s;
- int max_key_size, key_size, iv_size;
- MCRYPT td;
- int argc;
- int result = 0;
-
- argc = ZEND_NUM_ARGS();
- MCRYPT_CHECK_PARAM_COUNT (3,3)
-
- zend_get_parameters_ex(3, &mcryptind, &key, &iv);
- ZEND_FETCH_RESOURCE(td, MCRYPT, mcryptind, -1, "MCrypt", le_mcrypt);
- convert_to_string_ex(key);
- convert_to_string_ex(iv);
-
- max_key_size = mcrypt_enc_get_key_size(td);
- iv_size = mcrypt_enc_get_iv_size(td);
-
- if (Z_STRLEN_PP(key) == 0) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Key size is 0");
- }
-
- key_s = emalloc(Z_STRLEN_PP(key));
- memset(key_s, 0, Z_STRLEN_PP(key));
-
- iv_s = emalloc(iv_size + 1);
- memset(iv_s, 0, iv_size + 1);
-
- if (Z_STRLEN_PP(key) > max_key_size) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Key size too large; supplied length: %d, max: %d", Z_STRLEN_PP(key), max_key_size);
- key_size = max_key_size;
- } else {
- key_size = Z_STRLEN_PP(key);
- }
- memcpy(key_s, Z_STRVAL_PP(key), Z_STRLEN_PP(key));
-
- if (Z_STRLEN_PP(iv) != iv_size) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Iv size incorrect; supplied length: %d, needed: %d", Z_STRLEN_PP(iv), iv_size);
- }
- memcpy(iv_s, Z_STRVAL_PP(iv), iv_size);
-
- mcrypt_generic_deinit(td);
- result = mcrypt_generic_init(td, key_s, key_size, iv_s);
-
- /* If this function fails, close the mcrypt module to prevent crashes
- * when further functions want to access this resource */
- if (result < 0) {
- zend_list_delete(Z_LVAL_PP(mcryptind));
- switch (result) {
- case -3:
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Key length incorrect");
- break;
- case -4:
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Memory allocation error");
- break;
- case -1:
- default:
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unknown error");
- break;
- }
- }
- RETVAL_LONG(result);
-
- efree(iv_s);
- efree(key_s);
-}
-/* }}} */
-
-
-/* {{{ proto string mcrypt_generic(resource td, string data)
- This function encrypts the plaintext */
-PHP_FUNCTION(mcrypt_generic)
-{
- zval **data, **mcryptind;
- MCRYPT td;
- int argc;
- unsigned char* data_s;
- int block_size, data_size;
-
- argc = ZEND_NUM_ARGS();
- MCRYPT_CHECK_PARAM_COUNT (2,2)
-
- zend_get_parameters_ex(2, &mcryptind, &data);
- ZEND_FETCH_RESOURCE(td, MCRYPT, mcryptind, -1, "MCrypt", le_mcrypt);
- convert_to_string_ex(data);
-
- /* Check blocksize */
- if (mcrypt_enc_is_block_mode(td) == 1) { /* It's a block algorithm */
- block_size = mcrypt_enc_get_block_size(td);
- data_size = (((Z_STRLEN_PP(data) - 1) / block_size) + 1) * block_size;
- data_s = emalloc(data_size + 1);
- memset(data_s, 0, data_size);
- memcpy(data_s, Z_STRVAL_PP(data), Z_STRLEN_PP(data));
- } else { /* It's not a block algorithm */
- data_size = Z_STRLEN_PP(data);
- data_s = emalloc(data_size + 1);
- memset(data_s, 0, data_size);
- memcpy(data_s, Z_STRVAL_PP(data), Z_STRLEN_PP(data));
- }
-
- mcrypt_generic(td, data_s, data_size);
- data_s[data_size] = '\0';
-
- RETVAL_STRINGL(data_s, data_size, 1);
- efree(data_s);
-}
-/* }}} */
-
-
-/* {{{ proto string mdecrypt_generic(resource td, string data)
- This function decrypts the plaintext */
-PHP_FUNCTION(mdecrypt_generic)
-{
- zval **data, **mcryptind;
- MCRYPT td;
- int argc;
- char* data_s;
- int block_size, data_size;
-
- argc = ZEND_NUM_ARGS();
- MCRYPT_CHECK_PARAM_COUNT (2,2)
-
- zend_get_parameters_ex(2, &mcryptind, &data);
- ZEND_FETCH_RESOURCE(td, MCRYPT, mcryptind, -1, "MCrypt", le_mcrypt);
- convert_to_string_ex(data);
-
- /* Check blocksize */
- if (mcrypt_enc_is_block_mode(td) == 1) { /* It's a block algorithm */
- block_size = mcrypt_enc_get_block_size(td);
- data_size = (((Z_STRLEN_PP(data) - 1) / block_size) + 1) * block_size;
- data_s = emalloc(data_size + 1);
- memset(data_s, 0, data_size);
- memcpy(data_s, Z_STRVAL_PP(data), Z_STRLEN_PP(data));
- } else { /* It's not a block algorithm */
- data_size = Z_STRLEN_PP(data);
- data_s = emalloc(data_size + 1);
- memset(data_s, 0, data_size);
- memcpy(data_s, Z_STRVAL_PP(data), Z_STRLEN_PP(data));
- }
-
- mdecrypt_generic(td, data_s, data_size);
-
- RETVAL_STRINGL(data_s, data_size, 1);
- efree(data_s);
-}
-/* }}} */
-
-
-/* {{{ proto array mcrypt_enc_get_supported_key_sizes(resource td)
- This function decrypts the crypttext */
-PHP_FUNCTION(mcrypt_enc_get_supported_key_sizes)
-{
- int i, count = 0;
- int *key_sizes;
-
- MCRYPT_GET_TD_ARG
- array_init(return_value);
-
- key_sizes = mcrypt_enc_get_supported_key_sizes(td, &count);
-
- for (i = 0; i < count; i++) {
- add_index_long(return_value, i, key_sizes[i]);
- }
-
- mcrypt_free(key_sizes);
-}
-/* }}} */
-
-
-/* {{{ proto int mcrypt_enc_self_test(resource td)
- This function runs the self test on the algorithm specified by the descriptor td */
-PHP_FUNCTION(mcrypt_enc_self_test)
-{
- MCRYPT_GET_TD_ARG
- RETURN_LONG(mcrypt_enc_self_test(td));
-}
-/* }}} */
-
-/* {{{ proto bool mcrypt_module_close(resource td)
- Free the descriptor td */
-PHP_FUNCTION(mcrypt_module_close)
-{
- MCRYPT_GET_TD_ARG
- zend_list_delete(Z_LVAL_PP(mcryptind));
- RETURN_TRUE;
-}
-/* }}} */
-
-
-/* {{{ proto bool mcrypt_generic_end(resource td)
- This function terminates encrypt specified by the descriptor td */
-PHP_FUNCTION(mcrypt_generic_end)
-{
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "This function is deprecated, please use mcrypt_generic_deinit()");
- zif_mcrypt_generic_deinit(INTERNAL_FUNCTION_PARAM_PASSTHRU);
-}
-/* }}} */
-
-
-/* {{{ proto bool mcrypt_generic_deinit(resource td)
- This function terminates encrypt specified by the descriptor td */
-PHP_FUNCTION(mcrypt_generic_deinit)
-{
- MCRYPT_GET_TD_ARG
-
- if (mcrypt_generic_deinit(td) < 0) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Could not terminate encryption specifier");
- RETURN_FALSE
- }
- RETURN_TRUE
-}
-/* }}} */
-
-
-/* {{{ proto bool mcrypt_enc_is_block_algorithm_mode(resource td)
- Returns TRUE if the mode is for use with block algorithms */
-PHP_FUNCTION(mcrypt_enc_is_block_algorithm_mode)
-{
- MCRYPT_GET_TD_ARG
-
- if (mcrypt_enc_is_block_algorithm_mode(td) == 1) {
- RETURN_TRUE
- } else {
- RETURN_FALSE
- }
-}
-/* }}} */
-
-
-/* {{{ proto bool mcrypt_enc_is_block_algorithm(resource td)
- Returns TRUE if the alrogithm is a block algorithms */
-PHP_FUNCTION(mcrypt_enc_is_block_algorithm)
-{
- MCRYPT_GET_TD_ARG
-
- if (mcrypt_enc_is_block_algorithm(td) == 1) {
- RETURN_TRUE
- } else {
- RETURN_FALSE
- }
-}
-/* }}} */
-
-
-/* {{{ proto bool mcrypt_enc_is_block_mode(resource td)
- Returns TRUE if the mode outputs blocks */
-PHP_FUNCTION(mcrypt_enc_is_block_mode)
-{
- MCRYPT_GET_TD_ARG
-
- if (mcrypt_enc_is_block_mode(td) == 1) {
- RETURN_TRUE
- } else {
- RETURN_FALSE
- }
-}
-/* }}} */
-
-
-/* {{{ proto int mcrypt_enc_get_block_size(resource td)
- Returns the block size of the cipher specified by the descriptor td */
-PHP_FUNCTION(mcrypt_enc_get_block_size)
-{
- MCRYPT_GET_TD_ARG
- RETURN_LONG(mcrypt_enc_get_block_size(td));
-}
-/* }}} */
-
-
-/* {{{ proto int mcrypt_enc_get_key_size(resource td)
- Returns the maximum supported key size in bytes of the algorithm specified by the descriptor td */
-PHP_FUNCTION(mcrypt_enc_get_key_size)
-{
- MCRYPT_GET_TD_ARG
- RETURN_LONG(mcrypt_enc_get_key_size(td));
-}
-/* }}} */
-
-
-/* {{{ proto int mcrypt_enc_get_iv_size(resource td)
- Returns the size of the IV in bytes of the algorithm specified by the descriptor td */
-PHP_FUNCTION(mcrypt_enc_get_iv_size)
-{
- MCRYPT_GET_TD_ARG
- RETURN_LONG(mcrypt_enc_get_iv_size(td));
-}
-/* }}} */
-
-
-/* {{{ proto string mcrypt_enc_get_algorithms_name(resource td)
- Returns the name of the algorithm specified by the descriptor td */
-PHP_FUNCTION(mcrypt_enc_get_algorithms_name)
-{
- char *name;
- MCRYPT_GET_TD_ARG
-
- name = mcrypt_enc_get_algorithms_name(td);
- RETVAL_STRING(name, 1);
- mcrypt_free(name);
-}
-/* }}} */
-
-
-/* {{{ proto string mcrypt_enc_get_modes_name(resource td)
- Returns the name of the mode specified by the descriptor td */
-PHP_FUNCTION(mcrypt_enc_get_modes_name)
-{
- char *name;
- MCRYPT_GET_TD_ARG
-
- name = mcrypt_enc_get_modes_name(td);
- RETVAL_STRING(name, 1);
- mcrypt_free(name);
-}
-/* }}} */
-
-
-/* {{{ proto bool mcrypt_module_self_test(string algorithm [, string lib_dir])
- Does a self test of the module "module" */
-PHP_FUNCTION(mcrypt_module_self_test)
-{
- MCRYPT_GET_MODE_DIR_ARGS(algorithms_dir);
-
- if (mcrypt_module_self_test(module, dir) == 0) {
- RETURN_TRUE;
- } else {
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-
-/* {{{ proto bool mcrypt_module_is_block_algorithm_mode(string mode [, string lib_dir])
- Returns TRUE if the mode is for use with block algorithms */
-PHP_FUNCTION(mcrypt_module_is_block_algorithm_mode)
-{
- MCRYPT_GET_MODE_DIR_ARGS(modes_dir)
-
- if (mcrypt_module_is_block_algorithm_mode(module, dir) == 1) {
- RETURN_TRUE;
- } else {
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-
-/* {{{ proto bool mcrypt_module_is_block_algorithm(string algorithm [, string lib_dir])
- Returns TRUE if the algorithm is a block algorithm */
-PHP_FUNCTION(mcrypt_module_is_block_algorithm)
-{
- MCRYPT_GET_MODE_DIR_ARGS(algorithms_dir)
-
- if (mcrypt_module_is_block_algorithm(module, dir) == 1) {
- RETURN_TRUE;
- } else {
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-
-/* {{{ proto bool mcrypt_module_is_block_mode(string mode [, string lib_dir])
- Returns TRUE if the mode outputs blocks of bytes */
-PHP_FUNCTION(mcrypt_module_is_block_mode)
-{
- MCRYPT_GET_MODE_DIR_ARGS(modes_dir)
-
- if (mcrypt_module_is_block_mode(module, dir) == 1) {
- RETURN_TRUE;
- } else {
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-
-/* {{{ proto int mcrypt_module_get_algo_block_size(string algorithm [, string lib_dir])
- Returns the block size of the algorithm */
-PHP_FUNCTION(mcrypt_module_get_algo_block_size)
-{
- MCRYPT_GET_MODE_DIR_ARGS(algorithms_dir)
-
- RETURN_LONG(mcrypt_module_get_algo_block_size(module, dir));
-}
-/* }}} */
-
-
-/* {{{ proto int mcrypt_module_get_algo_key_size(string algorithm [, string lib_dir])
- Returns the maximum supported key size of the algorithm */
-PHP_FUNCTION(mcrypt_module_get_algo_key_size)
-{
- MCRYPT_GET_MODE_DIR_ARGS(algorithms_dir);
-
- RETURN_LONG(mcrypt_module_get_algo_key_size(module, dir));
-}
-/* }}} */
-
-
-/* {{{ proto array mcrypt_module_get_supported_key_sizes(string algorithm [, string lib_dir])
- This function decrypts the crypttext */
-PHP_FUNCTION(mcrypt_module_get_supported_key_sizes)
-{
- int i, count = 0;
- int *key_sizes;
-
- MCRYPT_GET_MODE_DIR_ARGS(algorithms_dir)
- array_init(return_value);
-
- key_sizes = mcrypt_module_get_algo_supported_key_sizes(module, dir, &count);
-
- for (i = 0; i < count; i++) {
- add_index_long(return_value, i, key_sizes[i]);
- }
- mcrypt_free(key_sizes);
-}
-/* }}} */
-
-
-/* {{{ proto array mcrypt_list_algorithms([string lib_dir])
- List all algorithms in "module_dir" */
-PHP_FUNCTION(mcrypt_list_algorithms)
-{
- char **modules;
- char *lib_dir = MCG(algorithms_dir);
- int lib_dir_len;
- int i, count;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|s",
- &lib_dir, &lib_dir_len) == FAILURE) {
- return;
- }
-
- array_init(return_value);
- modules = mcrypt_list_algorithms(lib_dir, &count);
-
- if (count == 0) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "No algorithms found in module dir");
- }
- for (i = 0; i < count; i++) {
- add_index_string(return_value, i, modules[i], 1);
- }
- mcrypt_free_p(modules, count);
-}
-/* }}} */
-
-
-/* {{{ proto array mcrypt_list_modes([string lib_dir])
- List all modes "module_dir" */
-PHP_FUNCTION(mcrypt_list_modes)
-{
- char **modules;
- char *lib_dir = MCG(modes_dir);
- int lib_dir_len;
- int i, count;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|s",
- &lib_dir, &lib_dir_len) == FAILURE) {
- return;
- }
-
- array_init(return_value);
- modules = mcrypt_list_modes(lib_dir, &count);
-
- if (count == 0) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "No modes found in module dir");
- }
- for (i = 0; i < count; i++) {
- add_index_string(return_value, i, modules[i], 1);
- }
- mcrypt_free_p(modules, count);
-}
-/* }}} */
-
-
-/* {{{ proto int mcrypt_get_key_size(string cipher, string module)
- Get the key size of cipher */
-PHP_FUNCTION(mcrypt_get_key_size)
-{
- char *cipher;
- char *module;
- int cipher_len, module_len;
- char *cipher_dir_string;
- char *module_dir_string;
- MCRYPT td;
-
- MCRYPT_GET_INI
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ss",
- &cipher, &cipher_len, &module, &module_len) == FAILURE) {
- return;
- }
-
- td = mcrypt_module_open(cipher, cipher_dir_string, module, module_dir_string);
- if (td != MCRYPT_FAILED) {
- RETVAL_LONG(mcrypt_enc_get_key_size(td));
- mcrypt_module_close(td);
- } else {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, MCRYPT_OPEN_MODULE_FAILED);
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-
-/* {{{ proto int mcrypt_get_block_size(string cipher, string module)
- Get the key size of cipher */
-PHP_FUNCTION(mcrypt_get_block_size)
-{
- char *cipher;
- char *module;
- int cipher_len, module_len;
- char *cipher_dir_string;
- char *module_dir_string;
- MCRYPT td;
-
- MCRYPT_GET_INI
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ss",
- &cipher, &cipher_len, &module, &module_len) == FAILURE) {
- return;
- }
-
- td = mcrypt_module_open(cipher, cipher_dir_string, module, module_dir_string);
- if (td != MCRYPT_FAILED) {
- RETVAL_LONG(mcrypt_enc_get_block_size(td));
- mcrypt_module_close(td);
- } else {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, MCRYPT_OPEN_MODULE_FAILED);
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-
-/* {{{ proto int mcrypt_get_iv_size(string cipher, string module)
- Get the IV size of cipher (Usually the same as the blocksize) */
-PHP_FUNCTION(mcrypt_get_iv_size)
-{
- char *cipher;
- char *module;
- int cipher_len, module_len;
- char *cipher_dir_string;
- char *module_dir_string;
- MCRYPT td;
-
- MCRYPT_GET_INI
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ss",
- &cipher, &cipher_len, &module, &module_len) == FAILURE) {
- return;
- }
-
- td = mcrypt_module_open(cipher, cipher_dir_string, module, module_dir_string);
- if (td != MCRYPT_FAILED) {
- RETVAL_LONG(mcrypt_enc_get_iv_size(td));
- mcrypt_module_close(td);
- } else {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, MCRYPT_OPEN_MODULE_FAILED);
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-
-/* {{{ proto string mcrypt_get_cipher_name(string cipher)
- Get the key size of cipher */
-PHP_FUNCTION(mcrypt_get_cipher_name)
-{
- char *cipher_dir_string;
- char *module_dir_string;
- char *cipher_name;
- char *cipher;
- int cipher_len;
- MCRYPT td;
-
- MCRYPT_GET_INI
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s",
- &cipher, &cipher_len) == FAILURE) {
- return;
- }
-
- /* The code below is actually not very nice, but I didn't see a better
- * method */
- td = mcrypt_module_open(cipher, cipher_dir_string, "ecb", module_dir_string);
- if (td != MCRYPT_FAILED) {
- cipher_name = mcrypt_enc_get_algorithms_name(td);
- mcrypt_module_close(td);
- RETVAL_STRING(cipher_name,1);
- mcrypt_free(cipher_name);
- } else {
- td = mcrypt_module_open(cipher, cipher_dir_string, "stream", module_dir_string);
- if (td != MCRYPT_FAILED) {
- cipher_name = mcrypt_enc_get_algorithms_name(td);
- mcrypt_module_close(td);
- RETVAL_STRING(cipher_name,1);
- mcrypt_free(cipher_name);
- } else {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, MCRYPT_OPEN_MODULE_FAILED);
- RETURN_FALSE;
- }
- }
-}
-/* }}} */
-
-
-static void php_mcrypt_do_crypt (char* cipher, zval **key, zval **data, char *mode, zval **iv, int argc, int dencrypt, zval* return_value TSRMLS_DC)
-{
- char *cipher_dir_string;
- char *module_dir_string;
- int block_size, max_key_length, use_key_length, i, count, iv_size;
- unsigned long int data_size;
- int *key_length_sizes;
- char *key_s = NULL, *iv_s;
- char *data_s;
- MCRYPT td;
-
- MCRYPT_GET_INI
-
- td = mcrypt_module_open(cipher, cipher_dir_string, mode, module_dir_string);
- if (td == MCRYPT_FAILED) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, MCRYPT_OPEN_MODULE_FAILED);
- RETURN_FALSE;
- }
- /* Checking for key-length */
- max_key_length = mcrypt_enc_get_key_size(td);
- if (Z_STRLEN_PP(key) > max_key_length) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Size of key is too large for this algorithm");
- }
- key_length_sizes = mcrypt_enc_get_supported_key_sizes(td, &count);
- if (count == 0 && key_length_sizes == NULL) { /* all lengths 1 - k_l_s = OK */
- use_key_length = Z_STRLEN_PP(key);
- key_s = emalloc(use_key_length);
- memset(key_s, 0, use_key_length);
- memcpy(key_s, Z_STRVAL_PP(key), use_key_length);
- } else if (count == 1) { /* only m_k_l = OK */
- key_s = emalloc(key_length_sizes[0]);
- memset(key_s, 0, key_length_sizes[0]);
- memcpy(key_s, Z_STRVAL_PP(key), MIN(Z_STRLEN_PP(key), key_length_sizes[0]));
- use_key_length = key_length_sizes[0];
- } else { /* dertermine smallest supported key > length of requested key */
- use_key_length = max_key_length; /* start with max key length */
- for (i = 0; i < count; i++) {
- if (key_length_sizes[i] >= Z_STRLEN_PP(key) &&
- key_length_sizes[i] < use_key_length)
- {
- use_key_length = key_length_sizes[i];
- }
- }
- key_s = emalloc(use_key_length);
- memset(key_s, 0, use_key_length);
- memcpy(key_s, Z_STRVAL_PP(key), MIN(Z_STRLEN_PP(key), use_key_length));
- }
- mcrypt_free (key_length_sizes);
-
- /* 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) {
- 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);
- }
- }
-
- /* Check blocksize */
- if (mcrypt_enc_is_block_mode(td) == 1) { /* It's a block algorithm */
- block_size = mcrypt_enc_get_block_size(td);
- data_size = (((Z_STRLEN_PP(data) - 1) / block_size) + 1) * block_size;
- data_s = emalloc(data_size);
- memset(data_s, 0, data_size);
- memcpy(data_s, Z_STRVAL_PP(data), Z_STRLEN_PP(data));
- } else { /* It's not a block algorithm */
- data_size = Z_STRLEN_PP(data);
- data_s = emalloc(data_size);
- memset(data_s, 0, data_size);
- memcpy(data_s, Z_STRVAL_PP(data), Z_STRLEN_PP(data));
- }
-
- if (mcrypt_generic_init(td, key_s, use_key_length, iv_s) < 0) {
- php_error_docref(NULL TSRMLS_CC, E_ERROR, "Mcrypt initialisation failed");
- }
- if (dencrypt == MCRYPT_ENCRYPT) {
- mcrypt_generic(td, data_s, data_size);
- } else {
- mdecrypt_generic(td, data_s, data_size);
- }
-
- RETVAL_STRINGL(data_s, data_size, 1);
-
- /* freeing vars */
- mcrypt_generic_end(td);
- if (key_s != NULL) {
- efree (key_s);
- }
- if (iv_s != NULL) {
- efree (iv_s);
- }
- efree (data_s);
-}
-
-/* {{{ proto string mcrypt_encrypt(string cipher, string key, string data, string mode, string iv)
- OFB crypt/decrypt data using key key with cipher cipher starting with iv */
-PHP_FUNCTION(mcrypt_encrypt)
-{
- zval **cipher, **key, **data, **mode, **iv;
- int argc;
-
- argc = ZEND_NUM_ARGS();
-
- MCRYPT_CHECK_PARAM_COUNT(4, 5)
- MCRYPT_GET_CRYPT_ARGS
-
- MCRYPT_CONVERT;
-
- php_mcrypt_do_crypt(Z_STRVAL_PP(cipher), key, data, Z_STRVAL_PP(mode), iv, argc, MCRYPT_ENCRYPT, return_value TSRMLS_CC);
-}
-/* }}} */
-
-/* {{{ proto string mcrypt_decrypt(string cipher, string key, string data, string mode, string iv)
- OFB crypt/decrypt data using key key with cipher cipher starting with iv */
-PHP_FUNCTION(mcrypt_decrypt)
-{
- zval **cipher, **key, **data, **mode, **iv;
- int argc;
-
- argc = ZEND_NUM_ARGS();
-
- MCRYPT_CHECK_PARAM_COUNT(4, 5)
- MCRYPT_GET_CRYPT_ARGS
-
- MCRYPT_CONVERT;
-
- php_mcrypt_do_crypt(Z_STRVAL_PP(cipher), key, data, Z_STRVAL_PP(mode), iv, argc, MCRYPT_DECRYPT, return_value TSRMLS_CC);
-}
-/* }}} */
-
-/* {{{ proto string mcrypt_ecb(int cipher, string key, string data, int mode, string iv)
- ECB crypt/decrypt data using key key with cipher cipher starting with iv */
-PHP_FUNCTION(mcrypt_ecb)
-{
- zval **cipher, **key, **data, **mode, **iv;
- int argc;
-
- argc = ZEND_NUM_ARGS();
-
- MCRYPT_CHECK_PARAM_COUNT(4, 5)
- MCRYPT_GET_CRYPT_ARGS
-
- MCRYPT_CONVERT_WO_MODE;
- convert_to_long_ex(mode);
-
- php_mcrypt_do_crypt(Z_STRVAL_PP(cipher), key, data, "ecb", iv, argc, Z_LVAL_PP(mode), return_value TSRMLS_CC);
-}
-/* }}} */
-
-/* {{{ proto string mcrypt_cbc(int cipher, string key, string data, int mode, string iv)
- CBC crypt/decrypt data using key key with cipher cipher starting with iv */
-PHP_FUNCTION(mcrypt_cbc)
-{
- zval **cipher, **key, **data, **mode, **iv;
- int argc;
-
- argc = ZEND_NUM_ARGS();
-
- MCRYPT_CHECK_PARAM_COUNT(4, 5)
- MCRYPT_GET_CRYPT_ARGS
-
- MCRYPT_CONVERT_WO_MODE;
- convert_to_long_ex(mode);
-
- php_mcrypt_do_crypt(Z_STRVAL_PP(cipher), key, data, "cbc", iv, argc, Z_LVAL_PP(mode), return_value TSRMLS_CC);
-}
-/* }}} */
-
-/* {{{ proto string mcrypt_cfb(int cipher, string key, string data, int mode, string iv)
- CFB crypt/decrypt data using key key with cipher cipher starting with iv */
-PHP_FUNCTION(mcrypt_cfb)
-{
- zval **cipher, **key, **data, **mode, **iv;
- int argc;
-
- argc = ZEND_NUM_ARGS();
-
- MCRYPT_CHECK_PARAM_COUNT(4, 5)
- MCRYPT_GET_CRYPT_ARGS
-
- MCRYPT_CONVERT_WO_MODE;
- convert_to_long_ex(mode);
-
- php_mcrypt_do_crypt(Z_STRVAL_PP(cipher), key, data, "cfb", iv, argc, Z_LVAL_PP(mode), return_value TSRMLS_CC);
-}
-/* }}} */
-
-/* {{{ proto string mcrypt_ofb(int cipher, string key, string data, int mode, string iv)
- OFB crypt/decrypt data using key key with cipher cipher starting with iv */
-PHP_FUNCTION(mcrypt_ofb)
-{
- zval **cipher, **key, **data, **mode, **iv;
- int argc;
-
- argc = ZEND_NUM_ARGS();
-
- MCRYPT_CHECK_PARAM_COUNT(4, 5)
- MCRYPT_GET_CRYPT_ARGS
-
- MCRYPT_CONVERT_WO_MODE;
- convert_to_long_ex(mode);
-
- php_mcrypt_do_crypt(Z_STRVAL_PP(cipher), key, data, "ofb", iv, argc, Z_LVAL_PP(mode), return_value TSRMLS_CC);
-}
-/* }}} */
-
-
-/* {{{ proto string mcrypt_create_iv(int size, int source)
- Create an initialization vector (IV) */
-PHP_FUNCTION(mcrypt_create_iv)
-{
- char *iv;
- long source = RANDOM;
- long size;
- int n = 0;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l|l", &size, &source) == FAILURE) {
- return;
- }
-
- if (size <= 0) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Can not create an IV with size 0 or smaller");
- RETURN_FALSE;
- }
-
- iv = ecalloc(size + 1, 1);
-
- if (source == RANDOM || source == URANDOM) {
- int fd;
- size_t read_bytes = 0;
-
- fd = open(source == RANDOM ? "/dev/random" : "/dev/urandom", O_RDONLY);
- if (fd < 0) {
- efree(iv);
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Cannot open source device");
- RETURN_FALSE;
- }
- while (read_bytes < size) {
- n = read(fd, iv + read_bytes, size - read_bytes);
- if (n < 0) {
- break;
- }
- read_bytes += n;
- }
- n = read_bytes;
- close(fd);
- if (n < size) {
- efree(iv);
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Could not gather sufficient random data");
- RETURN_FALSE;
- }
- } else {
- n = size;
- while (size) {
- iv[--size] = 255.0 * rand() / RAND_MAX;
- }
- }
- RETURN_STRINGL(iv, n, 0);
-}
-/* }}} */
-
-#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/mcrypt/mcrypt.dsp b/ext/mcrypt/mcrypt.dsp
deleted file mode 100644
index a0a1f00f4c..0000000000
--- a/ext/mcrypt/mcrypt.dsp
+++ /dev/null
@@ -1,117 +0,0 @@
-# Microsoft Developer Studio Project File - Name="mcrypt" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=mcrypt - Win32 Release_TS
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "mcrypt.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "mcrypt.mak" CFG="mcrypt - Win32 Release_TS"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "mcrypt - Win32 Release_TS" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "mcrypt - Win32 Debug_TS" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "mcrypt - Win32 Release_TS"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release_TS"
-# PROP BASE Intermediate_Dir "Release_TS"
-# PROP BASE Ignore_Export_Lib 0
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release_TS"
-# PROP Intermediate_Dir "Release_TS"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MT /W3 /GX /O2 /I "..\.." /I "..\..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\..\TSRM" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "MSSQL_EXPORTS" /D "COMPILE_DL_MCRYPT" /D "DBNTWIN32" /D ZTS=1 /YX /FD /c
-# ADD CPP /nologo /MD /W3 /GX /O2 /I "..\.." /I "..\..\main" /I "..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\TSRM" /I "..\..\..\php_build\mcrypt\include" /D ZEND_DEBUG=0 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "MCRYPT_EXPORTS" /D "COMPILE_DL_MCRYPT" /D ZTS=1 /D "ZEND_WIN32" /D "PHP_WIN32" /D HAVE_LIBMCRYPT=1 /D HAVE_LIBMCRYPT24=1 /D HAVE_MCRYPT_GENERIC_DEINIT /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x406 /d "NDEBUG"
-# ADD RSC /l 0x406 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib php5ts.lib ntwdblib.lib /nologo /dll /machine:I386 /out:"MSSQL_65_Release/php_mssql.dll" /libpath:"..\..\Release_TS"
-# ADD LINK32 php5ts.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib libmcrypt.lib /nologo /dll /machine:I386 /out:"..\..\Release_TS/php_mcrypt.dll" /libpath:"..\..\Release_TS" /libpath:"..\..\..\php_build\mcrypt" /libpath:"..\..\Release_TS_Inline" /libpath:"..\..\TSRM\Release_TS" /libpath:"..\..\TSRM\Release_TS_Inline"
-
-!ELSEIF "$(CFG)" == "mcrypt - Win32 Debug_TS"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Debug_TS"
-# PROP BASE Intermediate_Dir "Debug_TS"
-# PROP BASE Ignore_Export_Lib 0
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Debug_TS"
-# PROP Intermediate_Dir "Debug_TS"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MT /W3 /GX /O2 /I "..\.." /I "..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\TSRM" /I "mssql-70" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "MSSQL_EXPORTS" /D "COMPILE_DL_MCRYPT" /D "DBNTWIN32" /D ZTS=1 /D MSSQL70=1 /YX /FD /c
-# ADD CPP /nologo /MDd /W3 /GX /O2 /I "..\.." /I "..\..\main" /I "..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\TSRM" /I "..\..\..\php_build\mcrypt\include" /D ZEND_DEBUG=1 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "MCRYPT_EXPORTS" /D "COMPILE_DL_MCRYPT" /D ZTS=1 /D "ZEND_WIN32" /D "PHP_WIN32" /D HAVE_LIBMCRYPT=1 /D HAVE_LIBMCRYPT24=1 /D HAVE_MCRYPT_GENERIC_DEINIT /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x406 /d "NDEBUG"
-# ADD RSC /l 0x406 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib php5ts.lib ntwdblib.lib /nologo /dll /machine:I386 /out:"MSSQL_65_Release/php_mssql.dll" /libpath:"..\..\Release_TS" /libpath:"mssql-70"
-# ADD LINK32 php5ts_debug.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib libmcrypt.lib /nologo /dll /machine:I386 /out:"..\..\Debug_TS/php_mcrypt.dll" /libpath:"..\..\Debug_TS" /libpath:"..\..\..\php_build\mcrypt\lib"
-
-!ENDIF
-
-# Begin Target
-
-# Name "mcrypt - Win32 Release_TS"
-# Name "mcrypt - Win32 Debug_TS"
-# Begin Group "Source Files"
-
-# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
-# Begin Source File
-
-SOURCE=.\mcrypt.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\win32\readdir.c
-# End Source File
-# End Group
-# Begin Group "Header Files"
-
-# PROP Default_Filter "h;hpp;hxx;hm;inl"
-# Begin Source File
-
-SOURCE=.\php_mcrypt.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\win32\readdir.h
-# End Source File
-# End Group
-# End Target
-# End Project
diff --git a/ext/mcrypt/php_mcrypt.h b/ext/mcrypt/php_mcrypt.h
deleted file mode 100644
index abcdb5e797..0000000000
--- a/ext/mcrypt/php_mcrypt.h
+++ /dev/null
@@ -1,95 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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. |
- +----------------------------------------------------------------------+
- | Authors: Sascha Schumann <sascha@schumann.cx> |
- | Derick Rethans <derick@derickrethans.nl> |
- +----------------------------------------------------------------------+
- */
-/* $Id$ */
-
-#ifndef PHP_MCRYPT_H
-#define PHP_MCRYPT_H
-
-#if HAVE_LIBMCRYPT
-
-#ifdef ZTS
-#include "TSRM.h"
-#endif
-
-extern zend_module_entry mcrypt_module_entry;
-#define mcrypt_module_ptr &mcrypt_module_entry
-
-/* Functions for both old and new API */
-PHP_FUNCTION(mcrypt_ecb);
-PHP_FUNCTION(mcrypt_cbc);
-PHP_FUNCTION(mcrypt_cfb);
-PHP_FUNCTION(mcrypt_ofb);
-PHP_FUNCTION(mcrypt_get_cipher_name);
-PHP_FUNCTION(mcrypt_get_block_size);
-PHP_FUNCTION(mcrypt_get_key_size);
-PHP_FUNCTION(mcrypt_create_iv);
-
-/* Support functions for old API */
-PHP_FUNCTION(mcrypt_list_algorithms);
-PHP_FUNCTION(mcrypt_list_modes);
-PHP_FUNCTION(mcrypt_get_iv_size);
-PHP_FUNCTION(mcrypt_encrypt);
-PHP_FUNCTION(mcrypt_decrypt);
-
-/* Functions for new API */
-PHP_FUNCTION(mcrypt_module_open);
-PHP_FUNCTION(mcrypt_generic_init);
-PHP_FUNCTION(mcrypt_generic);
-PHP_FUNCTION(mdecrypt_generic);
-PHP_FUNCTION(mcrypt_generic_end);
-PHP_FUNCTION(mcrypt_generic_deinit);
-
-PHP_FUNCTION(mcrypt_enc_self_test);
-PHP_FUNCTION(mcrypt_enc_is_block_algorithm_mode);
-PHP_FUNCTION(mcrypt_enc_is_block_algorithm);
-PHP_FUNCTION(mcrypt_enc_is_block_mode);
-PHP_FUNCTION(mcrypt_enc_get_block_size);
-PHP_FUNCTION(mcrypt_enc_get_key_size);
-PHP_FUNCTION(mcrypt_enc_get_supported_key_sizes);
-PHP_FUNCTION(mcrypt_enc_get_iv_size);
-PHP_FUNCTION(mcrypt_enc_get_algorithms_name);
-PHP_FUNCTION(mcrypt_enc_get_modes_name);
-PHP_FUNCTION(mcrypt_module_self_test);
-PHP_FUNCTION(mcrypt_module_is_block_algorithm_mode);
-PHP_FUNCTION(mcrypt_module_is_block_algorithm);
-PHP_FUNCTION(mcrypt_module_is_block_mode);
-PHP_FUNCTION(mcrypt_module_get_algo_block_size);
-PHP_FUNCTION(mcrypt_module_get_algo_key_size);
-PHP_FUNCTION(mcrypt_module_get_supported_key_sizes);
-PHP_FUNCTION(mcrypt_module_close);
-
-ZEND_BEGIN_MODULE_GLOBALS(mcrypt)
- int le_h;
- char *modes_dir;
- char *algorithms_dir;
-ZEND_END_MODULE_GLOBALS(mcrypt)
-
-#ifdef ZTS
-# define MCG(v) TSRMG(mcrypt_globals_id, zend_mcrypt_globals *, v)
-#else
-# define MCG(v) (mcrypt_globals.v)
-#endif
-
-#else
-#define mcrypt_module_ptr NULL
-#endif
-
-#define phpext_mcrypt_ptr mcrypt_module_ptr
-
-#endif
diff --git a/ext/mcrypt/tests/blowfish.phpt b/ext/mcrypt/tests/blowfish.phpt
deleted file mode 100644
index dc51da65b3..0000000000
--- a/ext/mcrypt/tests/blowfish.phpt
+++ /dev/null
@@ -1,75 +0,0 @@
---TEST--
-Test for blowfish compatibility
---SKIPIF--
-<?php if (!extension_loaded("mcrypt")) print "skip"; ?>
---FILE--
-<?php
-function hex2bin($data) {
- $len = strlen($data);
- return pack("H" . $len, $data);
-}
-
-print "key plain crypt guess stat\n";
-$null = "\0\0\0\0\0\0\0\0";
-$vectors = file(dirname(__FILE__) . "/vectors.txt");
-
-$td = mcrypt_module_open ("blowfish", "", MCRYPT_MODE_ECB, "");
-
-foreach($vectors as $data) {
- $data = trim($data);
- if ($data) {
- list($key,$plain,$crypt) = split("[[:space:]]+",$data);
- printf("%s %s ",
- $key,
- $plain
- );
- $key = hex2bin(trim($key));
- $plain = hex2bin(($plain));
- $crypt = strtolower(trim($crypt));
-
- mcrypt_generic_init ($td, $key, $null);
- $guess = mcrypt_generic ($td, $plain);
- $guess = bin2hex($guess);
- printf("%s %s %s\n",
- $crypt,
- $guess,
- ($crypt==$guess ? "OK" : "BAD")
- );
- }
-}
-?>
---EXPECT--
-key plain crypt guess stat
-0000000000000000 0000000000000000 4ef997456198dd78 4ef997456198dd78 OK
-FFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFF 51866fd5b85ecb8a 51866fd5b85ecb8a OK
-3000000000000000 1000000000000001 7d856f9a613063f2 7d856f9a613063f2 OK
-1111111111111111 1111111111111111 2466dd878b963c9d 2466dd878b963c9d OK
-0123456789ABCDEF 1111111111111111 61f9c3802281b096 61f9c3802281b096 OK
-1111111111111111 0123456789ABCDEF 7d0cc630afda1ec7 7d0cc630afda1ec7 OK
-FEDCBA9876543210 0123456789ABCDEF 0aceab0fc6a0a28d 0aceab0fc6a0a28d OK
-7CA110454A1A6E57 01A1D6D039776742 59c68245eb05282b 59c68245eb05282b OK
-0131D9619DC1376E 5CD54CA83DEF57DA b1b8cc0b250f09a0 b1b8cc0b250f09a0 OK
-07A1133E4A0B2686 0248D43806F67172 1730e5778bea1da4 1730e5778bea1da4 OK
-3849674C2602319E 51454B582DDF440A a25e7856cf2651eb a25e7856cf2651eb OK
-04B915BA43FEB5B6 42FD443059577FA2 353882b109ce8f1a 353882b109ce8f1a OK
-0113B970FD34F2CE 059B5E0851CF143A 48f4d0884c379918 48f4d0884c379918 OK
-0170F175468FB5E6 0756D8E0774761D2 432193b78951fc98 432193b78951fc98 OK
-43297FAD38E373FE 762514B829BF486A 13f04154d69d1ae5 13f04154d69d1ae5 OK
-07A7137045DA2A16 3BDD119049372802 2eedda93ffd39c79 2eedda93ffd39c79 OK
-04689104C2FD3B2F 26955F6835AF609A d887e0393c2da6e3 d887e0393c2da6e3 OK
-37D06BB516CB7546 164D5E404F275232 5f99d04f5b163969 5f99d04f5b163969 OK
-1F08260D1AC2465E 6B056E18759F5CCA 4a057a3b24d3977b 4a057a3b24d3977b OK
-584023641ABA6176 004BD6EF09176062 452031c1e4fada8e 452031c1e4fada8e OK
-025816164629B007 480D39006EE762F2 7555ae39f59b87bd 7555ae39f59b87bd OK
-49793EBC79B3258F 437540C8698F3CFA 53c55f9cb49fc019 53c55f9cb49fc019 OK
-4FB05E1515AB73A7 072D43A077075292 7a8e7bfa937e89a3 7a8e7bfa937e89a3 OK
-49E95D6D4CA229BF 02FE55778117F12A cf9c5d7a4986adb5 cf9c5d7a4986adb5 OK
-018310DC409B26D6 1D9D5C5018F728C2 d1abb290658bc778 d1abb290658bc778 OK
-1C587F1C13924FEF 305532286D6F295A 55cb3774d13ef201 55cb3774d13ef201 OK
-0101010101010101 0123456789ABCDEF fa34ec4847b268b2 fa34ec4847b268b2 OK
-1F1F1F1F0E0E0E0E 0123456789ABCDEF a790795108ea3cae a790795108ea3cae OK
-E0FEE0FEF1FEF1FE 0123456789ABCDEF c39e072d9fac631d c39e072d9fac631d OK
-0000000000000000 FFFFFFFFFFFFFFFF 014933e0cdaff6e4 014933e0cdaff6e4 OK
-FFFFFFFFFFFFFFFF 0000000000000000 f21e9a77b71c49bc f21e9a77b71c49bc OK
-0123456789ABCDEF 0000000000000000 245946885754369a 245946885754369a OK
-FEDCBA9876543210 FFFFFFFFFFFFFFFF 6b5c5a9c5d9e0a5a 6b5c5a9c5d9e0a5a OK
diff --git a/ext/mcrypt/tests/bug8040.phpt b/ext/mcrypt/tests/bug8040.phpt
deleted file mode 100644
index 12e28687fd..0000000000
--- a/ext/mcrypt/tests/bug8040.phpt
+++ /dev/null
@@ -1,24 +0,0 @@
---TEST--
-Bug #8040
---SKIPIF--
-<?php if (!extension_loaded("mcrypt")) print "skip"; ?>
---FILE--
-<?php
- error_reporting (E_ALL ^ E_NOTICE);
- echo MCRYPT_TWOFISH."\n";
- echo MCRYPT_MODE_CBC."\n";
-
- define ("MODE1", MCRYPT_MODE_CBC);
- echo MODE1."\n";
-
- define ("CIPHER", MCRYPT_TWOFISH);
- define ("MODE2", MCRYPT_MODE_CBC);
- define ("MODE3", MCRYPT_CBC);
-
- printf ("cipher=".CIPHER. " mode1=".MODE2. " mode2=". MODE3."\n");
-?>
---EXPECT--
-twofish
-cbc
-cbc
-cipher=twofish mode1=cbc mode2=MCRYPT_CBC
diff --git a/ext/mcrypt/tests/vectors.txt b/ext/mcrypt/tests/vectors.txt
deleted file mode 100644
index 3624ed6d69..0000000000
--- a/ext/mcrypt/tests/vectors.txt
+++ /dev/null
@@ -1,33 +0,0 @@
-0000000000000000 0000000000000000 4EF997456198DD78
-FFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFF 51866FD5B85ECB8A
-3000000000000000 1000000000000001 7D856F9A613063F2
-1111111111111111 1111111111111111 2466DD878B963C9D
-0123456789ABCDEF 1111111111111111 61F9C3802281B096
-1111111111111111 0123456789ABCDEF 7D0CC630AFDA1EC7
-FEDCBA9876543210 0123456789ABCDEF 0ACEAB0FC6A0A28D
-7CA110454A1A6E57 01A1D6D039776742 59C68245EB05282B
-0131D9619DC1376E 5CD54CA83DEF57DA B1B8CC0B250F09A0
-07A1133E4A0B2686 0248D43806F67172 1730E5778BEA1DA4
-3849674C2602319E 51454B582DDF440A A25E7856CF2651EB
-04B915BA43FEB5B6 42FD443059577FA2 353882B109CE8F1A
-0113B970FD34F2CE 059B5E0851CF143A 48F4D0884C379918
-0170F175468FB5E6 0756D8E0774761D2 432193B78951FC98
-43297FAD38E373FE 762514B829BF486A 13F04154D69D1AE5
-07A7137045DA2A16 3BDD119049372802 2EEDDA93FFD39C79
-04689104C2FD3B2F 26955F6835AF609A D887E0393C2DA6E3
-37D06BB516CB7546 164D5E404F275232 5F99D04F5B163969
-1F08260D1AC2465E 6B056E18759F5CCA 4A057A3B24D3977B
-584023641ABA6176 004BD6EF09176062 452031C1E4FADA8E
-025816164629B007 480D39006EE762F2 7555AE39F59B87BD
-49793EBC79B3258F 437540C8698F3CFA 53C55F9CB49FC019
-4FB05E1515AB73A7 072D43A077075292 7A8E7BFA937E89A3
-49E95D6D4CA229BF 02FE55778117F12A CF9C5D7A4986ADB5
-018310DC409B26D6 1D9D5C5018F728C2 D1ABB290658BC778
-1C587F1C13924FEF 305532286D6F295A 55CB3774D13EF201
-0101010101010101 0123456789ABCDEF FA34EC4847B268B2
-1F1F1F1F0E0E0E0E 0123456789ABCDEF A790795108EA3CAE
-E0FEE0FEF1FEF1FE 0123456789ABCDEF C39E072D9FAC631D
-0000000000000000 FFFFFFFFFFFFFFFF 014933E0CDAFF6E4
-FFFFFFFFFFFFFFFF 0000000000000000 F21E9A77B71C49BC
-0123456789ABCDEF 0000000000000000 245946885754369A
-FEDCBA9876543210 FFFFFFFFFFFFFFFF 6B5C5A9C5D9E0A5A
diff --git a/ext/mcve/CREDITS b/ext/mcve/CREDITS
deleted file mode 100644
index 9111acffab..0000000000
--- a/ext/mcve/CREDITS
+++ /dev/null
@@ -1,2 +0,0 @@
-MCVE
-Brad House, Chris Faulhaber, Steven Schoch
diff --git a/ext/mcve/config.m4 b/ext/mcve/config.m4
deleted file mode 100644
index 7f104f876d..0000000000
--- a/ext/mcve/config.m4
+++ /dev/null
@@ -1,96 +0,0 @@
-dnl config.m4 for PHP MCVE Extension
-
-PHP_ARG_WITH(mcve, for MCVE support,
-[ --with-mcve[=DIR] Include MCVE support. libmcve >= 3.2.2 or libmonetra >= 4.0 required])
-
-PHP_ARG_WITH(openssl-dir,OpenSSL dir for MCVE,
-[ --with-openssl-dir[=DIR] MCVE: openssl install prefix.], no, no)
-
-if test "$PHP_MCVE" != "no"; then
- dnl determine egrep command for AC_EGREP_CPP below
- AC_CHECK_PROG(EGREP, egrep, grep -E)
- AC_SUBST(EGREP)
-
- if test "$PHP_OPENSSL_DIR" != "no"; then
- PHP_OPENSSL=$PHP_OPENSSL_DIR
- PHP_SETUP_OPENSSL(MCVE_SHARED_LIBADD, [], [
- AC_MSG_ERROR([MCVE: OpenSSL check failed. Please check config.log for more information.])
- ])
- else
- AC_MSG_RESULT([If configure fails, try adding --with-openssl-dir=<DIR>])
- fi
-
- case "$PHP_MCVE" in
- yes [)]
- for i in /usr/local/mcve /usr/local /usr; do
- if test -r $i/include/mcve.h; then
- MCVE_DIR=$i
- break
- fi
- done
- ;;
- * [)]
- test -r "$PHP_MCVE/include/mcve.h" && MCVE_DIR=$PHP_MCVE
- ;;
- esac
-
- if test -z "$MCVE_DIR"; then
- AC_MSG_ERROR([mcve.h NOT FOUND. Please check your MCVE installation.])
- fi
-
- dnl Check version (M_EXPORT exists in >= 3.2.2)
- saved_CPPFLAGS=$CPPFLAGS
- AC_MSG_CHECKING([for correct libmcve version])
- AC_EGREP_CPP(yes,[
-#include "$MCVE_DIR/include/mcve.h"
-#ifdef M_EXPORT
-yes
-#endif
- ],[
- AC_MSG_RESULT([ok])
- ],[
- AC_MSG_ERROR([libmcve 3.2.2 or greater required.])
- ])
- CPPFLAGS=$saved_CPPFLAGS
-
- PHP_ADD_INCLUDE($MCVE_DIR/include)
- PHP_ADD_LIBRARY_WITH_PATH(mcve, $MCVE_DIR/lib, MCVE_SHARED_LIBADD)
-
- dnl Build test. Check for libmcve or libmonetra
- dnl libmonetra_compat.h handle's MCVE_ -> M_ conversion
- dnl so it is API compatible
-
- has_mcve=0
- dnl check for libmcve
- PHP_CHECK_LIBRARY(mcve, MCVE_DestroyEngine,
- [
- has_mcve=1
- ], [
- has_mcve=0
- ], [
- $MCVE_SHARED_LIBADD
- ])
-
- dnl check for libmonetra if no proper libmcve
- dnl symlink named libmcve is created to libmonetra
- dnl during libmonetra install, so this is valid
- if test "$has_mcve" = "0" ; then
- PHP_CHECK_LIBRARY(mcve, M_DestroyEngine,
- [
- has_mcve=1
- ], [
- has_mcve=0
- ], [
- $MCVE_SHARED_LIBADD
- ])
- fi
-
- if test "$has_mcve" = "1" ; then
- AC_DEFINE(HAVE_MCVE, 1, [ ])
- else
- AC_MSG_ERROR([MCVE: Sanity check failed. Please check config.log for more information.])
- fi
-
- PHP_NEW_EXTENSION(mcve, mcve.c, $ext_shared)
- PHP_SUBST(MCVE_SHARED_LIBADD)
-fi
diff --git a/ext/mcve/config.w32 b/ext/mcve/config.w32
deleted file mode 100644
index 31f4655344..0000000000
--- a/ext/mcve/config.w32
+++ /dev/null
@@ -1,18 +0,0 @@
-// $Id$
-// vim:ft=javascript
-
-ARG_WITH("mcve", "MCVE support", "no");
-
-if (PHP_MCVE != "no") {
-
- if (CHECK_HEADER_ADD_INCLUDE("mcve.h", "CFLAGS_MCVE", PHP_MCVE) &&
- CHECK_LIB("ssleay32.lib", "mcve", PHP_MCVE) &&
- CHECK_LIB("libeay32.lib", "mcve", PHP_MCVE) &&
- CHECK_LIB("libmcve.lib", "mcve", PHP_MCVE)) {
- EXTENSION('mcve', 'mcve.c');
- AC_DEFINE('HAVE_MCVE', 1);
- } else {
- WARNING("mcve not enabled; libraries and headers not found");
- }
-}
-
diff --git a/ext/mcve/mcve.c b/ext/mcve/mcve.c
deleted file mode 100644
index d7864abf4e..0000000000
--- a/ext/mcve/mcve.c
+++ /dev/null
@@ -1,2473 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP version 4.0 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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. |
- +----------------------------------------------------------------------+
- | Authors: Brad House <brad@mainstreetsoftworks.com> |
- | Chris Faulhaber <jedgar@fxp.org> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "php.h"
-
-#if HAVE_MCVE
-
-/* standard php include(s) */
-#include "ext/standard/head.h"
-#include "ext/standard/php_standard.h"
-#include "ext/standard/info.h"
-
-/* local include(s) */
-#include <mcve.h>
-
-/* local php include(s) */
-#include "php_mcve.h"
-
-/* {{{ globals */
-static int le_conn; /* connection resource */
-static int le_user; /* store add/edit/get user information */
-
-static int mcve_init; /* For Safe Memory Deallocation */
-/* }}} */
-
-/* {{{ extension definition structures */
-function_entry mcve_functions[] = {
- PHP_FE(m_initengine, NULL)
- PHP_FE(m_initconn, NULL)
- PHP_FE(m_deleteresponse, NULL)
- PHP_FE(m_destroyconn, NULL)
- PHP_FE(m_setdropfile, NULL)
- PHP_FE(m_setip, NULL)
- PHP_FE(m_setssl, NULL)
- PHP_FE(m_setssl_files, NULL)
- PHP_FE(m_settimeout, NULL)
- PHP_FE(m_setblocking, NULL)
- PHP_FE(m_verifyconnection, NULL)
- PHP_FE(m_verifysslcert, NULL)
- PHP_FE(m_maxconntimeout, NULL)
- PHP_FE(m_connectionerror, NULL)
- PHP_FE(m_deletetrans, NULL)
- PHP_FE(m_connect, NULL)
- PHP_FE(m_transnew, NULL)
- PHP_FE(m_transparam, NULL)
- PHP_FE(m_transsend, NULL)
- PHP_FE(m_ping, NULL)
- PHP_FE(m_responseparam, NULL)
- PHP_FE(m_returnstatus, NULL)
- PHP_FE(m_returncode, NULL)
- PHP_FE(m_transactionssent, NULL)
- PHP_FE(m_transactionitem, NULL)
- PHP_FE(m_transactionbatch, NULL)
- PHP_FE(m_transactionid, NULL)
- PHP_FE(m_transactionauth, NULL)
- PHP_FE(m_transactiontext, NULL)
- PHP_FE(m_transactionavs, NULL)
- PHP_FE(m_transactioncv, NULL)
- PHP_FE(m_getuserparam, NULL)
- PHP_FE(m_monitor, NULL)
- PHP_FE(m_transinqueue, NULL)
- PHP_FE(m_checkstatus, NULL)
- PHP_FE(m_completeauthorizations, second_arg_force_ref)
- PHP_FE(m_sale, NULL)
- PHP_FE(m_preauth, NULL)
- PHP_FE(m_void, NULL)
- PHP_FE(m_preauthcompletion, NULL)
- PHP_FE(m_force, NULL)
- PHP_FE(m_override, NULL)
- PHP_FE(m_return, NULL)
- PHP_FE(m_iscommadelimited, NULL)
- PHP_FE(m_parsecommadelimited, NULL)
- PHP_FE(m_getcommadelimited, NULL)
- PHP_FE(m_getcell, NULL)
- PHP_FE(m_getcellbynum, NULL)
- PHP_FE(m_numcolumns, NULL)
- PHP_FE(m_numrows, NULL)
- PHP_FE(m_getheader, NULL)
- PHP_FE(m_destroyengine, NULL)
- PHP_FE(m_settle, NULL)
- PHP_FE(m_gut, NULL)
- PHP_FE(m_gl, NULL)
- PHP_FE(m_gft, NULL)
- PHP_FE(m_qc, NULL)
- PHP_FE(m_ub, NULL)
- PHP_FE(m_chkpwd, NULL)
- PHP_FE(m_bt, NULL)
- PHP_FE(m_uwait, NULL)
- PHP_FE(m_text_code, NULL)
- PHP_FE(m_text_avs, NULL)
- PHP_FE(m_text_cv, NULL)
- PHP_FE(m_chngpwd, NULL)
- PHP_FE(m_listusers, NULL)
- PHP_FE(m_adduser, NULL)
- PHP_FE(m_enableuser, NULL)
- PHP_FE(m_disableuser, NULL)
- PHP_FE(m_getuserarg, NULL)
- PHP_FE(m_adduserarg, NULL)
- PHP_FE(m_deleteusersetup, NULL)
- PHP_FE(m_initusersetup, NULL)
- PHP_FE(m_deluser, NULL)
- PHP_FE(m_edituser, NULL)
- PHP_FE(m_liststats, NULL)
- /* Backwards compatability functions below */
- PHP_FE(mcve_initengine, NULL)
- PHP_FE(mcve_initconn, NULL)
- PHP_FE(mcve_deleteresponse, NULL)
- PHP_FE(mcve_destroyconn, NULL)
- PHP_FE(mcve_setdropfile, NULL)
- PHP_FE(mcve_setip, NULL)
- PHP_FE(mcve_setssl, NULL)
- PHP_FE(mcve_setssl_files, NULL)
- PHP_FE(mcve_settimeout, NULL)
- PHP_FE(mcve_setblocking, NULL)
- PHP_FE(mcve_verifyconnection, NULL)
- PHP_FE(mcve_verifysslcert, NULL)
- PHP_FE(mcve_maxconntimeout, NULL)
- PHP_FE(mcve_connectionerror, NULL)
- PHP_FE(mcve_deletetrans, NULL)
- PHP_FE(mcve_connect, NULL)
- PHP_FE(mcve_transnew, NULL)
- PHP_FE(mcve_transparam, NULL)
- PHP_FE(mcve_transsend, NULL)
- PHP_FE(mcve_ping, NULL)
- PHP_FE(mcve_responseparam, NULL)
- PHP_FE(mcve_returnstatus, NULL)
- PHP_FE(mcve_returncode, NULL)
- PHP_FE(mcve_transactionssent, NULL)
- PHP_FE(mcve_transactionitem, NULL)
- PHP_FE(mcve_transactionbatch, NULL)
- PHP_FE(mcve_transactionid, NULL)
- PHP_FE(mcve_transactionauth, NULL)
- PHP_FE(mcve_transactiontext, NULL)
- PHP_FE(mcve_transactionavs, NULL)
- PHP_FE(mcve_transactioncv, NULL)
- PHP_FE(mcve_getuserparam, NULL)
- PHP_FE(mcve_monitor, NULL)
- PHP_FE(mcve_transinqueue, NULL)
- PHP_FE(mcve_checkstatus, NULL)
- PHP_FE(mcve_completeauthorizations, second_arg_force_ref)
- PHP_FE(mcve_sale, NULL)
- PHP_FE(mcve_preauth, NULL)
- PHP_FE(mcve_void, NULL)
- PHP_FE(mcve_preauthcompletion, NULL)
- PHP_FE(mcve_force, NULL)
- PHP_FE(mcve_override, NULL)
- PHP_FE(mcve_return, NULL)
- PHP_FE(mcve_iscommadelimited, NULL)
- PHP_FE(mcve_parsecommadelimited, NULL)
- PHP_FE(mcve_getcommadelimited, NULL)
- PHP_FE(mcve_getcell, NULL)
- PHP_FE(mcve_getcellbynum, NULL)
- PHP_FE(mcve_numcolumns, NULL)
- PHP_FE(mcve_numrows, NULL)
- PHP_FE(mcve_getheader, NULL)
- PHP_FE(mcve_destroyengine, NULL)
- PHP_FE(mcve_settle, NULL)
- PHP_FE(mcve_gut, NULL)
- PHP_FE(mcve_gl, NULL)
- PHP_FE(mcve_gft, NULL)
- PHP_FE(mcve_qc, NULL)
- PHP_FE(mcve_ub, NULL)
- PHP_FE(mcve_chkpwd, NULL)
- PHP_FE(mcve_bt, NULL)
- PHP_FE(mcve_uwait, NULL)
- PHP_FE(mcve_text_code, NULL)
- PHP_FE(mcve_text_avs, NULL)
- PHP_FE(mcve_text_cv, NULL)
- PHP_FE(mcve_chngpwd, NULL)
- PHP_FE(mcve_listusers, NULL)
- PHP_FE(mcve_adduser, NULL)
- PHP_FE(mcve_enableuser, NULL)
- PHP_FE(mcve_disableuser, NULL)
- PHP_FE(mcve_getuserarg, NULL)
- PHP_FE(mcve_adduserarg, NULL)
- PHP_FE(mcve_deleteusersetup, NULL)
- PHP_FE(mcve_initusersetup, NULL)
- PHP_FE(mcve_deluser, NULL)
- PHP_FE(mcve_edituser, NULL)
- PHP_FE(mcve_liststats, NULL)
- { NULL, NULL, NULL }
-};
-
-zend_module_entry mcve_module_entry = {
-#if ZEND_MODULE_API_NO >= 20010901
- STANDARD_MODULE_HEADER,
-#endif
- "mcve", /* module name */
- mcve_functions, /* struct of functions (see above) */
- PHP_MINIT(mcve), /* module initialization functions */
- NULL, /* module shutdown functions */
- NULL, /* request initialization functions */
- NULL, /* request shutdown functions */
- PHP_MINFO(mcve), /* declare the info function for phpinfo() */
-#if ZEND_MODULE_API_NO >= 20010901
- PHP_MCVE_VERSION, /* declare MCVE version number */
-#endif
- STANDARD_MODULE_PROPERTIES
-};
-
-/* }}} */
-
-/* declare the module for dynamic loading */
-#ifdef COMPILE_DL_MCVE
-ZEND_GET_MODULE(mcve)
-# ifdef PHP_WIN32
-# include "zend_arg_defs.c"
-# endif
-#endif
-
-/* {{{ MCVE_CONN destructor */
-static void _free_mcve_conn(zend_rsrc_list_entry *rsrc TSRMLS_DC)
-{
- MCVE_CONN *conn;
-
- conn = (MCVE_CONN *)rsrc->ptr;
- MCVE_DestroyConn(conn);
- efree(conn);
-}
-/* }}} */
-
-/* {{{ module initialization */
-PHP_MINIT_FUNCTION(mcve)
-{
- /* register the MCVE_CONN destructor */
- le_conn = zend_register_list_destructors_ex(_free_mcve_conn, NULL, "mcve connection", module_number);
-
- /* Key definitions for Transaction Parameters */
- REGISTER_LONG_CONSTANT("MC_TRANTYPE", MC_TRANTYPE, MCVE_CONST);
- REGISTER_LONG_CONSTANT("MC_USERNAME", MC_USERNAME, MCVE_CONST);
- REGISTER_LONG_CONSTANT("MC_PASSWORD", MC_PASSWORD, MCVE_CONST);
- REGISTER_LONG_CONSTANT("MC_ACCOUNT", MC_ACCOUNT, MCVE_CONST);
- REGISTER_LONG_CONSTANT("MC_TRACKDATA", MC_TRACKDATA, MCVE_CONST);
- REGISTER_LONG_CONSTANT("MC_EXPDATE", MC_EXPDATE, MCVE_CONST);
- REGISTER_LONG_CONSTANT("MC_STREET", MC_STREET, MCVE_CONST);
- REGISTER_LONG_CONSTANT("MC_ZIP", MC_ZIP, MCVE_CONST);
- REGISTER_LONG_CONSTANT("MC_CV", MC_CV, MCVE_CONST);
- REGISTER_LONG_CONSTANT("MC_COMMENTS", MC_COMMENTS, MCVE_CONST);
- REGISTER_LONG_CONSTANT("MC_CLERKID", MC_CLERKID, MCVE_CONST);
- REGISTER_LONG_CONSTANT("MC_STATIONID", MC_STATIONID, MCVE_CONST);
- REGISTER_LONG_CONSTANT("MC_APPRCODE", MC_APPRCODE, MCVE_CONST);
- REGISTER_LONG_CONSTANT("MC_AMOUNT", MC_AMOUNT, MCVE_CONST);
- REGISTER_LONG_CONSTANT("MC_PTRANNUM", MC_PTRANNUM, MCVE_CONST);
- REGISTER_LONG_CONSTANT("MC_TTID", MC_TTID, MCVE_CONST);
- REGISTER_LONG_CONSTANT("MC_USER", MC_USER, MCVE_CONST);
- REGISTER_LONG_CONSTANT("MC_PWD", MC_PWD, MCVE_CONST);
- REGISTER_LONG_CONSTANT("MC_ACCT", MC_ACCT, MCVE_CONST);
- REGISTER_LONG_CONSTANT("MC_BDATE", MC_BDATE, MCVE_CONST);
- REGISTER_LONG_CONSTANT("MC_EDATE", MC_EDATE, MCVE_CONST);
- REGISTER_LONG_CONSTANT("MC_BATCH", MC_BATCH, MCVE_CONST);
- REGISTER_LONG_CONSTANT("MC_FILE", MC_FILE, MCVE_CONST);
- REGISTER_LONG_CONSTANT("MC_ADMIN", MC_ADMIN, MCVE_CONST);
- REGISTER_LONG_CONSTANT("MC_AUDITTYPE", MC_AUDITTYPE, MCVE_CONST);
- REGISTER_LONG_CONSTANT("MC_CUSTOM", MC_CUSTOM, MCVE_CONST);
- REGISTER_LONG_CONSTANT("MC_EXAMOUNT", MC_EXAMOUNT, MCVE_CONST);
- REGISTER_LONG_CONSTANT("MC_EXCHARGES", MC_EXCHARGES, MCVE_CONST);
- REGISTER_LONG_CONSTANT("MC_RATE", MC_RATE, MCVE_CONST);
- REGISTER_LONG_CONSTANT("MC_RENTERNAME", MC_RENTERNAME, MCVE_CONST);
- REGISTER_LONG_CONSTANT("MC_RETURNCITY", MC_RETURNCITY, MCVE_CONST);
- REGISTER_LONG_CONSTANT("MC_RETURNSTATE", MC_RETURNSTATE, MCVE_CONST);
- REGISTER_LONG_CONSTANT("MC_RETURNLOCATION", MC_RETURNLOCATION, MCVE_CONST);
- REGISTER_LONG_CONSTANT("MC_PRIORITY", MC_PRIORITY, MCVE_CONST);
- REGISTER_LONG_CONSTANT("MC_INQUIRY", MC_INQUIRY, MCVE_CONST);
- REGISTER_LONG_CONSTANT("MC_CARDTYPES", MC_CARDTYPES, MCVE_CONST);
- REGISTER_LONG_CONSTANT("MC_SUB", MC_SUB, MCVE_CONST);
- REGISTER_LONG_CONSTANT("MC_MARKER", MC_MARKER, MCVE_CONST);
- REGISTER_LONG_CONSTANT("MC_DEVICETYPE", MC_DEVICETYPE, MCVE_CONST);
- REGISTER_LONG_CONSTANT("MC_ERRORCODE", MC_ERRORCODE, MCVE_CONST);
- REGISTER_LONG_CONSTANT("MC_NEWBATCH", MC_NEWBATCH, MCVE_CONST);
- REGISTER_LONG_CONSTANT("MC_CURR", MC_CURR, MCVE_CONST);
- REGISTER_LONG_CONSTANT("MC_DESCMERCH", MC_DESCMERCH, MCVE_CONST);
- REGISTER_LONG_CONSTANT("MC_DESCLOC", MC_DESCLOC, MCVE_CONST);
- REGISTER_LONG_CONSTANT("MC_ORIGTYPE", MC_ORIGTYPE, MCVE_CONST);
- REGISTER_LONG_CONSTANT("MC_PIN", MC_PIN, MCVE_CONST);
- REGISTER_LONG_CONSTANT("MC_VOIDORIGTYPE", MC_VOIDORIGTYPE, MCVE_CONST);
- REGISTER_LONG_CONSTANT("MC_TIMESTAMP", MC_TIMESTAMP, MCVE_CONST);
-
- /* Args for priorities */
- REGISTER_LONG_CONSTANT("MC_PRIO_HIGH", MC_PRIO_HIGH, MCVE_CONST);
- REGISTER_LONG_CONSTANT("MC_PRIO_NORMAL", MC_PRIO_NORMAL, MCVE_CONST);
- REGISTER_LONG_CONSTANT("MC_PRIO_LOW", MC_PRIO_LOW, MCVE_CONST);
-
- /* Args for adding a user */
- REGISTER_LONG_CONSTANT("MC_USER_PROC", MC_USER_PROC, MCVE_CONST);
- REGISTER_LONG_CONSTANT("MC_USER_USER", MC_USER_USER, MCVE_CONST);
- REGISTER_LONG_CONSTANT("MC_USER_PWD", MC_USER_PWD, MCVE_CONST);
- REGISTER_LONG_CONSTANT("MC_USER_INDCODE", MC_USER_INDCODE, MCVE_CONST);
- REGISTER_LONG_CONSTANT("MC_USER_MERCHID", MC_USER_MERCHID, MCVE_CONST);
- REGISTER_LONG_CONSTANT("MC_USER_BANKID", MC_USER_BANKID, MCVE_CONST);
- REGISTER_LONG_CONSTANT("MC_USER_TERMID", MC_USER_TERMID, MCVE_CONST);
- REGISTER_LONG_CONSTANT("MC_USER_CLIENTNUM", MC_USER_CLIENTNUM, MCVE_CONST);
- REGISTER_LONG_CONSTANT("MC_USER_STOREID", MC_USER_STOREID, MCVE_CONST);
- REGISTER_LONG_CONSTANT("MC_USER_AGENTID", MC_USER_AGENTID, MCVE_CONST);
- REGISTER_LONG_CONSTANT("MC_USER_CHAINID", MC_USER_CHAINID, MCVE_CONST);
- REGISTER_LONG_CONSTANT("MC_USER_ZIPCODE", MC_USER_ZIPCODE, MCVE_CONST);
- REGISTER_LONG_CONSTANT("MC_USER_TIMEZONE", MC_USER_TIMEZONE, MCVE_CONST);
- REGISTER_LONG_CONSTANT("MC_USER_MERCHCAT", MC_USER_MERCHCAT, MCVE_CONST);
- REGISTER_LONG_CONSTANT("MC_USER_MERNAME", MC_USER_MERNAME, MCVE_CONST);
- REGISTER_LONG_CONSTANT("MC_USER_MERCHLOC", MC_USER_MERCHLOC, MCVE_CONST);
- REGISTER_LONG_CONSTANT("MC_USER_STATECODE", MC_USER_STATECODE, MCVE_CONST);
- REGISTER_LONG_CONSTANT("MC_USER_PHONE", MC_USER_PHONE, MCVE_CONST);
- REGISTER_LONG_CONSTANT("MC_USER_SUB", MC_USER_SUB, MCVE_CONST);
- REGISTER_LONG_CONSTANT("MC_USER_CARDTYPES", MC_USER_CARDTYPES, MCVE_CONST);
- REGISTER_LONG_CONSTANT("MC_USER_MODE", MC_USER_MODE, MCVE_CONST);
- REGISTER_LONG_CONSTANT("MC_USER_VNUMBER", MC_USER_VNUMBER, MCVE_CONST);
- REGISTER_LONG_CONSTANT("MC_USER_ROUTINGID", MC_USER_ROUTINGID, MCVE_CONST);
- REGISTER_LONG_CONSTANT("MC_USER_PPROPERTY", MC_USER_PPROPERTY, MCVE_CONST);
- REGISTER_LONG_CONSTANT("MC_USER_PID", MC_USER_PID, MCVE_CONST);
- REGISTER_LONG_CONSTANT("MC_USER_PIDPWD", MC_USER_PIDPWD, MCVE_CONST);
- REGISTER_LONG_CONSTANT("MC_USER_SMID", MC_USER_SMID, MCVE_CONST);
- REGISTER_LONG_CONSTANT("MC_USER_SMIDPWD", MC_USER_SMIDPWD, MCVE_CONST);
- REGISTER_LONG_CONSTANT("MC_USER_USDDIV", MC_USER_USDDIV, MCVE_CONST);
- REGISTER_LONG_CONSTANT("MC_USER_AUDDIV", MC_USER_AUDDIV, MCVE_CONST);
- REGISTER_LONG_CONSTANT("MC_USER_DKKDIV", MC_USER_DKKDIV, MCVE_CONST);
- REGISTER_LONG_CONSTANT("MC_USER_GBPDIV", MC_USER_GBPDIV, MCVE_CONST);
- REGISTER_LONG_CONSTANT("MC_USER_HKDDIV", MC_USER_HKDDIV, MCVE_CONST);
- REGISTER_LONG_CONSTANT("MC_USER_JPYDIV", MC_USER_JPYDIV, MCVE_CONST);
- REGISTER_LONG_CONSTANT("MC_USER_NZDDIV", MC_USER_NZDDIV, MCVE_CONST);
- REGISTER_LONG_CONSTANT("MC_USER_NOKDIV", MC_USER_NOKDIV, MCVE_CONST);
- REGISTER_LONG_CONSTANT("MC_USER_SGDDIV", MC_USER_SGDDIV, MCVE_CONST);
- REGISTER_LONG_CONSTANT("MC_USER_ZARDIV", MC_USER_ZARDIV, MCVE_CONST);
- REGISTER_LONG_CONSTANT("MC_USER_SEKDIV", MC_USER_SEKDIV, MCVE_CONST);
- REGISTER_LONG_CONSTANT("MC_USER_CHFDIV", MC_USER_CHFDIV, MCVE_CONST);
- REGISTER_LONG_CONSTANT("MC_USER_CADDIV", MC_USER_CADDIV, MCVE_CONST);
- REGISTER_LONG_CONSTANT("MC_USER_DIVNUM", MC_USER_DIVNUM, MCVE_CONST);
-
- /* Values for cardtypes */
- REGISTER_LONG_CONSTANT("MC_CARD_VISA", MC_CARD_VISA, MCVE_CONST);
- REGISTER_LONG_CONSTANT("MC_CARD_MC", MC_CARD_MC, MCVE_CONST);
- REGISTER_LONG_CONSTANT("MC_CARD_AMEX", MC_CARD_AMEX, MCVE_CONST);
- REGISTER_LONG_CONSTANT("MC_CARD_DISC", MC_CARD_DISC, MCVE_CONST);
- REGISTER_LONG_CONSTANT("MC_CARD_JCB", MC_CARD_JCB, MCVE_CONST);
- REGISTER_LONG_CONSTANT("MC_CARD_CB", MC_CARD_CB, MCVE_CONST);
- REGISTER_LONG_CONSTANT("MC_CARD_DC", MC_CARD_DC, MCVE_CONST);
- REGISTER_LONG_CONSTANT("MC_CARD_GIFT", MC_CARD_GIFT, MCVE_CONST);
- REGISTER_LONG_CONSTANT("MC_CARD_OTHER", MC_CARD_OTHER, MCVE_CONST);
- REGISTER_LONG_CONSTANT("MC_CARD_ALL", MC_CARD_ALL, MCVE_CONST);
-
- /* Values for modes */
- REGISTER_LONG_CONSTANT("MC_MODE_AUTH", MC_MODE_AUTH, MCVE_CONST);
- REGISTER_LONG_CONSTANT("MC_MODE_SETTLE", MC_MODE_SETTLE, MCVE_CONST);
- REGISTER_LONG_CONSTANT("MC_MODE_BOTH", MC_MODE_BOTH, MCVE_CONST);
- REGISTER_LONG_CONSTANT("MC_MODE_ALL", MC_MODE_ALL, MCVE_CONST);
-
- /* Values for EXCHARGES */
- REGISTER_LONG_CONSTANT("MC_EXCHARGES_REST", MC_EXCHARGES_REST, MCVE_CONST);
- REGISTER_LONG_CONSTANT("MC_EXCHARGES_GIFT", MC_EXCHARGES_GIFT, MCVE_CONST);
- REGISTER_LONG_CONSTANT("MC_EXCHARGES_MINI", MC_EXCHARGES_MINI, MCVE_CONST);
- REGISTER_LONG_CONSTANT("MC_EXCHARGES_TELE", MC_EXCHARGES_TELE, MCVE_CONST);
- REGISTER_LONG_CONSTANT("MC_EXCHARGES_OTHER", MC_EXCHARGES_OTHER, MCVE_CONST);
- REGISTER_LONG_CONSTANT("MC_EXCHARGES_LAUND", MC_EXCHARGES_LAUND, MCVE_CONST);
- REGISTER_LONG_CONSTANT("MC_EXCHARGES_NONE", MC_EXCHARGES_NONE, MCVE_CONST);
- REGISTER_LONG_CONSTANT("MC_EXCHARGES_GAS", MC_EXCHARGES_GAS, MCVE_CONST);
- REGISTER_LONG_CONSTANT("MC_EXCHARGES_MILE", MC_EXCHARGES_MILE, MCVE_CONST);
- REGISTER_LONG_CONSTANT("MC_EXCHARGES_LATE", MC_EXCHARGES_LATE, MCVE_CONST);
- REGISTER_LONG_CONSTANT("MC_EXCHARGES_1WAY", MC_EXCHARGES_1WAY, MCVE_CONST);
- REGISTER_LONG_CONSTANT("MC_EXCHARGES_VIOL", MC_EXCHARGES_VIOL, MCVE_CONST);
-
- /* Value definitions for Transaction Types */
- REGISTER_LONG_CONSTANT("MC_TRAN_SALE", MC_TRAN_SALE, MCVE_CONST);
- REGISTER_LONG_CONSTANT("MC_TRAN_REDEMPTION", MC_TRAN_REDEMPTION, MCVE_CONST);
- REGISTER_LONG_CONSTANT("MC_TRAN_PREAUTH", MC_TRAN_PREAUTH, MCVE_CONST);
- REGISTER_LONG_CONSTANT("MC_TRAN_VOID", MC_TRAN_VOID, MCVE_CONST);
- REGISTER_LONG_CONSTANT("MC_TRAN_PREAUTHCOMPLETE", MC_TRAN_PREAUTHCOMPLETE, MCVE_CONST);
- REGISTER_LONG_CONSTANT("MC_TRAN_FORCE", MC_TRAN_FORCE, MCVE_CONST);
- REGISTER_LONG_CONSTANT("MC_TRAN_OVERRIDE", MC_TRAN_OVERRIDE, MCVE_CONST);
- REGISTER_LONG_CONSTANT("MC_TRAN_RETURN", MC_TRAN_RETURN, MCVE_CONST);
- REGISTER_LONG_CONSTANT("MC_TRAN_RELOAD", MC_TRAN_RELOAD, MCVE_CONST);
- REGISTER_LONG_CONSTANT("MC_TRAN_CREDIT", MC_TRAN_CREDIT, MCVE_CONST);
- REGISTER_LONG_CONSTANT("MC_TRAN_SETTLE", MC_TRAN_SETTLE, MCVE_CONST);
- REGISTER_LONG_CONSTANT("MC_TRAN_INCREMENTAL", MC_TRAN_INCREMENTAL, MCVE_CONST);
- REGISTER_LONG_CONSTANT("MC_TRAN_REVERSAL", MC_TRAN_REVERSAL, MCVE_CONST);
- REGISTER_LONG_CONSTANT("MC_TRAN_ACTIVATE", MC_TRAN_ACTIVATE, MCVE_CONST);
- REGISTER_LONG_CONSTANT("MC_TRAN_BALANCEINQ", MC_TRAN_BALANCEINQ, MCVE_CONST);
- REGISTER_LONG_CONSTANT("MC_TRAN_CASHOUT", MC_TRAN_CASHOUT, MCVE_CONST);
- REGISTER_LONG_CONSTANT("MC_TRAN_TOREVERSAL", MC_TRAN_TOREVERSAL, MCVE_CONST);
- REGISTER_LONG_CONSTANT("MC_TRAN_SETTLERFR", MC_TRAN_SETTLERFR, MCVE_CONST);
- REGISTER_LONG_CONSTANT("MC_TRAN_ISSUE", MC_TRAN_ISSUE, MCVE_CONST);
- REGISTER_LONG_CONSTANT("MC_TRAN_TIP", MC_TRAN_TIP, MCVE_CONST);
- REGISTER_LONG_CONSTANT("MC_TRAN_MERCHRETURN", MC_TRAN_MERCHRETURN, MCVE_CONST);
- REGISTER_LONG_CONSTANT("MC_TRAN_IVRREQ", MC_TRAN_IVRREQ, MCVE_CONST);
- REGISTER_LONG_CONSTANT("MC_TRAN_IVRRESP", MC_TRAN_IVRRESP, MCVE_CONST);
- REGISTER_LONG_CONSTANT("MC_TRAN_ADMIN", MC_TRAN_ADMIN, MCVE_CONST);
- REGISTER_LONG_CONSTANT("MC_TRAN_PING", MC_TRAN_PING, MCVE_CONST);
- REGISTER_LONG_CONSTANT("MC_TRAN_CHKPWD", MC_TRAN_CHKPWD, MCVE_CONST);
-
- /* Engine Admin Transaction Types */
- REGISTER_LONG_CONSTANT("MC_TRAN_CHNGPWD", MC_TRAN_CHNGPWD, MCVE_CONST);
- REGISTER_LONG_CONSTANT("MC_TRAN_LISTSTATS", MC_TRAN_LISTSTATS, MCVE_CONST);
- REGISTER_LONG_CONSTANT("MC_TRAN_LISTUSERS", MC_TRAN_LISTUSERS, MCVE_CONST);
- REGISTER_LONG_CONSTANT("MC_TRAN_GETUSERINFO", MC_TRAN_GETUSERINFO, MCVE_CONST);
- REGISTER_LONG_CONSTANT("MC_TRAN_ADDUSER", MC_TRAN_ADDUSER, MCVE_CONST);
- REGISTER_LONG_CONSTANT("MC_TRAN_EDITUSER", MC_TRAN_EDITUSER, MCVE_CONST);
- REGISTER_LONG_CONSTANT("MC_TRAN_DELUSER", MC_TRAN_DELUSER, MCVE_CONST);
- REGISTER_LONG_CONSTANT("MC_TRAN_ENABLEUSER", MC_TRAN_ENABLEUSER, MCVE_CONST);
- REGISTER_LONG_CONSTANT("MC_TRAN_DISABLEUSER", MC_TRAN_DISABLEUSER, MCVE_CONST);
- REGISTER_LONG_CONSTANT("MC_TRAN_IMPORT", MC_TRAN_IMPORT, MCVE_CONST);
- REGISTER_LONG_CONSTANT("MC_TRAN_EXPORT", MC_TRAN_EXPORT, MCVE_CONST);
- REGISTER_LONG_CONSTANT("MC_TRAN_ERRORLOG", MC_TRAN_ERRORLOG, MCVE_CONST);
- REGISTER_LONG_CONSTANT("MC_TRAN_CLEARERRORLOG", MC_TRAN_CLEARERRORLOG, MCVE_CONST);
- REGISTER_LONG_CONSTANT("MC_TRAN_GETSUBACCTS", MC_TRAN_GETSUBACCTS, MCVE_CONST);
-
- /* Value definitions for Admin Types */
- REGISTER_LONG_CONSTANT("MC_ADMIN_GUT", MC_ADMIN_GUT, MCVE_CONST);
- REGISTER_LONG_CONSTANT("MC_ADMIN_GL", MC_ADMIN_GL, MCVE_CONST);
- REGISTER_LONG_CONSTANT("MC_ADMIN_GFT", MC_ADMIN_GFT, MCVE_CONST);
- REGISTER_LONG_CONSTANT("MC_ADMIN_BT", MC_ADMIN_BT, MCVE_CONST);
- REGISTER_LONG_CONSTANT("MC_ADMIN_UB", MC_ADMIN_UB, MCVE_CONST);
- REGISTER_LONG_CONSTANT("MC_ADMIN_QC", MC_ADMIN_QC, MCVE_CONST);
- REGISTER_LONG_CONSTANT("MC_ADMIN_RS", MC_ADMIN_RS, MCVE_CONST);
- REGISTER_LONG_CONSTANT("MC_ADMIN_CTH", MC_ADMIN_CTH, MCVE_CONST);
- REGISTER_LONG_CONSTANT("MC_ADMIN_CFH", MC_ADMIN_CFH, MCVE_CONST);
- REGISTER_LONG_CONSTANT("MC_ADMIN_FORCESETTLE", MC_ADMIN_FORCESETTLE, MCVE_CONST);
- REGISTER_LONG_CONSTANT("MC_ADMIN_SETBATCHNUM", MC_ADMIN_SETBATCHNUM, MCVE_CONST);
- REGISTER_LONG_CONSTANT("MC_ADMIN_RENUMBERBATCH", MC_ADMIN_RENUMBERBATCH, MCVE_CONST);
- REGISTER_LONG_CONSTANT("MC_ADMIN_FIELDEDIT", MC_ADMIN_FIELDEDIT, MCVE_CONST);
- REGISTER_LONG_CONSTANT("MC_ADMIN_CLOSEBATCH", MC_ADMIN_CLOSEBATCH, MCVE_CONST);
-
- REGISTER_LONG_CONSTANT("M_UNUSED", MCVE_UNUSED, MCVE_CONST);
- REGISTER_LONG_CONSTANT("M_NEW", MCVE_NEW, MCVE_CONST);
- REGISTER_LONG_CONSTANT("M_PENDING", MCVE_PENDING, MCVE_CONST);
- REGISTER_LONG_CONSTANT("M_DONE", MCVE_DONE, MCVE_CONST);
-
- REGISTER_LONG_CONSTANT("M_GOOD", MCVE_GOOD, MCVE_CONST);
- REGISTER_LONG_CONSTANT("M_BAD", MCVE_BAD, MCVE_CONST);
- REGISTER_LONG_CONSTANT("M_STREET", MCVE_STREET, MCVE_CONST);
- REGISTER_LONG_CONSTANT("M_ZIP", MCVE_ZIP, MCVE_CONST);
- REGISTER_LONG_CONSTANT("M_UNKNOWN", MCVE_UNKNOWN, MCVE_CONST);
-
- REGISTER_LONG_CONSTANT("M_ERROR", MCVE_ERROR, MCVE_CONST);
- REGISTER_LONG_CONSTANT("M_FAIL", MCVE_FAIL, MCVE_CONST);
- REGISTER_LONG_CONSTANT("M_SUCCESS", MCVE_SUCCESS, MCVE_CONST);
- REGISTER_LONG_CONSTANT("M_AUTH", MCVE_AUTH, MCVE_CONST);
- REGISTER_LONG_CONSTANT("M_DENY", MCVE_DENY, MCVE_CONST);
- REGISTER_LONG_CONSTANT("M_CALL", MCVE_CALL, MCVE_CONST);
- REGISTER_LONG_CONSTANT("M_DUPL", MCVE_DUPL, MCVE_CONST);
- REGISTER_LONG_CONSTANT("M_PKUP", MCVE_PKUP, MCVE_CONST);
- REGISTER_LONG_CONSTANT("M_RETRY", MCVE_RETRY, MCVE_CONST);
- REGISTER_LONG_CONSTANT("M_SETUP", MCVE_SETUP, MCVE_CONST);
- REGISTER_LONG_CONSTANT("M_TIMEOUT", MCVE_TIMEOUT, MCVE_CONST);
-
- REGISTER_LONG_CONSTANT("M_SALE", MCVE_SALE, MCVE_CONST);
- REGISTER_LONG_CONSTANT("M_PREAUTH", MCVE_PREAUTH, MCVE_CONST);
- REGISTER_LONG_CONSTANT("M_FORCE", MCVE_FORCE, MCVE_CONST);
- REGISTER_LONG_CONSTANT("M_OVERRIDE", MCVE_OVERRIDE, MCVE_CONST);
- REGISTER_LONG_CONSTANT("M_RETURN", MCVE_RETURN, MCVE_CONST);
- REGISTER_LONG_CONSTANT("M_SETTLE", MCVE_SETTLE, MCVE_CONST);
-
- REGISTER_LONG_CONSTANT("M_PROC", MCVE_PROC, MCVE_CONST);
- REGISTER_LONG_CONSTANT("M_USER", MCVE_USER, MCVE_CONST);
- REGISTER_LONG_CONSTANT("M_PWD", MCVE_PWD, MCVE_CONST);
- REGISTER_LONG_CONSTANT("M_INDCODE", MCVE_INDCODE, MCVE_CONST);
- REGISTER_LONG_CONSTANT("M_MERCHID", MCVE_MERCHID, MCVE_CONST);
- REGISTER_LONG_CONSTANT("M_BANKID", MCVE_BANKID, MCVE_CONST);
- REGISTER_LONG_CONSTANT("M_TERMID", MCVE_TERMID, MCVE_CONST);
- REGISTER_LONG_CONSTANT("M_CLIENTNUM", MCVE_CLIENTNUM, MCVE_CONST);
- REGISTER_LONG_CONSTANT("M_STOREID", MCVE_STOREID, MCVE_CONST);
- REGISTER_LONG_CONSTANT("M_AGENTID", MCVE_AGENTID, MCVE_CONST);
- REGISTER_LONG_CONSTANT("M_CHAINID", MCVE_CHAINID, MCVE_CONST);
- REGISTER_LONG_CONSTANT("M_ZIPCODE", MCVE_ZIPCODE, MCVE_CONST);
- REGISTER_LONG_CONSTANT("M_TIMEZONE", MCVE_TIMEZONE, MCVE_CONST);
- REGISTER_LONG_CONSTANT("M_MERCHCAT", MCVE_MERCHCAT, MCVE_CONST);
- REGISTER_LONG_CONSTANT("M_MERNAME", MCVE_MERNAME, MCVE_CONST);
- REGISTER_LONG_CONSTANT("M_MERCHLOC", MCVE_MERCHLOC, MCVE_CONST);
- REGISTER_LONG_CONSTANT("M_STATECODE", MCVE_STATECODE, MCVE_CONST);
- REGISTER_LONG_CONSTANT("M_SERVICEPHONE", MCVE_SERVICEPHONE, MCVE_CONST);
-
- /* COMPATABILITY VARIABLES */
- REGISTER_LONG_CONSTANT("MCVE_UNUSED", MCVE_UNUSED, MCVE_CONST);
- REGISTER_LONG_CONSTANT("MCVE_NEW", MCVE_NEW, MCVE_CONST);
- REGISTER_LONG_CONSTANT("MCVE_PENDING", MCVE_PENDING, MCVE_CONST);
- REGISTER_LONG_CONSTANT("MCVE_DONE", MCVE_DONE, MCVE_CONST);
- REGISTER_LONG_CONSTANT("MCVE_GOOD", MCVE_GOOD, MCVE_CONST);
- REGISTER_LONG_CONSTANT("MCVE_BAD", MCVE_BAD, MCVE_CONST);
- REGISTER_LONG_CONSTANT("MCVE_STREET", MCVE_STREET, MCVE_CONST);
- REGISTER_LONG_CONSTANT("MCVE_ZIP", MCVE_ZIP, MCVE_CONST);
- REGISTER_LONG_CONSTANT("MCVE_UNKNOWN", MCVE_UNKNOWN, MCVE_CONST);
- REGISTER_LONG_CONSTANT("MCVE_ERROR", MCVE_ERROR, MCVE_CONST);
- REGISTER_LONG_CONSTANT("MCVE_FAIL", MCVE_FAIL, MCVE_CONST);
- REGISTER_LONG_CONSTANT("MCVE_SUCCESS", MCVE_SUCCESS, MCVE_CONST);
- REGISTER_LONG_CONSTANT("MCVE_AUTH", MCVE_AUTH, MCVE_CONST);
- REGISTER_LONG_CONSTANT("MCVE_DENY", MCVE_DENY, MCVE_CONST);
- REGISTER_LONG_CONSTANT("MCVE_CALL", MCVE_CALL, MCVE_CONST);
- REGISTER_LONG_CONSTANT("MCVE_DUPL", MCVE_DUPL, MCVE_CONST);
- REGISTER_LONG_CONSTANT("MCVE_PKUP", MCVE_PKUP, MCVE_CONST);
- REGISTER_LONG_CONSTANT("MCVE_RETRY", MCVE_RETRY, MCVE_CONST);
- REGISTER_LONG_CONSTANT("MCVE_SETUP", MCVE_SETUP, MCVE_CONST);
- REGISTER_LONG_CONSTANT("MCVE_TIMEOUT", MCVE_TIMEOUT, MCVE_CONST);
- REGISTER_LONG_CONSTANT("MCVE_SALE", MCVE_SALE, MCVE_CONST);
- REGISTER_LONG_CONSTANT("MCVE_PREAUTH", MCVE_PREAUTH, MCVE_CONST);
- REGISTER_LONG_CONSTANT("MCVE_FORCE", MCVE_FORCE, MCVE_CONST);
- REGISTER_LONG_CONSTANT("MCVE_OVERRIDE", MCVE_OVERRIDE, MCVE_CONST);
- REGISTER_LONG_CONSTANT("MCVE_RETURN", MCVE_RETURN, MCVE_CONST);
- REGISTER_LONG_CONSTANT("MCVE_SETTLE", MCVE_SETTLE, MCVE_CONST);
- REGISTER_LONG_CONSTANT("MCVE_PROC", MCVE_PROC, MCVE_CONST);
- REGISTER_LONG_CONSTANT("MCVE_USER", MCVE_USER, MCVE_CONST);
- REGISTER_LONG_CONSTANT("MCVE_PWD", MCVE_PWD, MCVE_CONST);
- REGISTER_LONG_CONSTANT("MCVE_INDCODE", MCVE_INDCODE, MCVE_CONST);
- REGISTER_LONG_CONSTANT("MCVE_MERCHID", MCVE_MERCHID, MCVE_CONST);
- REGISTER_LONG_CONSTANT("MCVE_BANKID", MCVE_BANKID, MCVE_CONST);
- REGISTER_LONG_CONSTANT("MCVE_TERMID", MCVE_TERMID, MCVE_CONST);
- REGISTER_LONG_CONSTANT("MCVE_CLIENTNUM", MCVE_CLIENTNUM, MCVE_CONST);
- REGISTER_LONG_CONSTANT("MCVE_STOREID", MCVE_STOREID, MCVE_CONST);
- REGISTER_LONG_CONSTANT("MCVE_AGENTID", MCVE_AGENTID, MCVE_CONST);
- REGISTER_LONG_CONSTANT("MCVE_CHAINID", MCVE_CHAINID, MCVE_CONST);
- REGISTER_LONG_CONSTANT("MCVE_ZIPCODE", MCVE_ZIPCODE, MCVE_CONST);
- REGISTER_LONG_CONSTANT("MCVE_TIMEZONE", MCVE_TIMEZONE, MCVE_CONST);
- REGISTER_LONG_CONSTANT("MCVE_MERCHCAT", MCVE_MERCHCAT, MCVE_CONST);
- REGISTER_LONG_CONSTANT("MCVE_MERNAME", MCVE_MERNAME, MCVE_CONST);
- REGISTER_LONG_CONSTANT("MCVE_MERCHLOC", MCVE_MERCHLOC, MCVE_CONST);
- REGISTER_LONG_CONSTANT("MCVE_STATECODE", MCVE_STATECODE, MCVE_CONST);
- REGISTER_LONG_CONSTANT("MCVE_SERVICEPHONE", MCVE_SERVICEPHONE, MCVE_CONST);
-
-
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ module information */
-PHP_MINFO_FUNCTION(mcve)
-{
- php_info_print_table_start();
- php_info_print_table_row(2, "mcve support", "enabled");
- php_info_print_table_row(2, "version", PHP_MCVE_VERSION);
- php_info_print_table_end();
-}
-/* }}} */
-
-
-/* {{{ proto int m_initengine(string location)
- Ready the client for IP/SSL Communication */
-PHP_FUNCTION(m_initengine)
-{
- int ret;
- zval **arg;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg) == FAILURE)
- WRONG_PARAM_COUNT;
-
- convert_to_string_ex(arg);
-
- if (mcve_init) {
- MCVE_DestroyEngine();
- }
- ret = MCVE_InitEngine(Z_STRVAL_PP(arg));
- mcve_init = 1;
-
- RETURN_LONG(ret);
-}
-/* }}} */
-
-/* {{{ proto resource m_initconn(void)
- Create and initialize an MCVE_CONN structure */
-PHP_FUNCTION(m_initconn)
-{
- MCVE_CONN *conn;
-
- conn = emalloc(sizeof(MCVE_CONN));
-
- MCVE_InitConn(conn);
-
- ZEND_REGISTER_RESOURCE(return_value, conn, le_conn);
-}
-/* }}} */
-
-
-/* {{{ proto bool m_deleteresponse(resource conn, int identifier)
- Delete specified transaction from MCVE_CONN structure */
-PHP_FUNCTION(m_deleteresponse)
-{
- MCVE_CONN *conn;
- zval **arg1, **arg2;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &arg1, &arg2) == FAILURE)
- WRONG_PARAM_COUNT;
-
- ZEND_FETCH_RESOURCE(conn, MCVE_CONN *, arg1, -1, "mcve connection", le_conn);
-
- convert_to_long_ex(arg2);
-
- MCVE_DeleteResponse(conn, Z_LVAL_PP(arg2));
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto bool m_deletetrans(resource conn, int identifier)
- Delete specified transaction from MCVE_CONN structure */
-PHP_FUNCTION(m_deletetrans)
-{
- MCVE_CONN *conn;
- zval **arg1, **arg2;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &arg1, &arg2) == FAILURE)
- WRONG_PARAM_COUNT;
-
- ZEND_FETCH_RESOURCE(conn, MCVE_CONN *, arg1, -1, "mcve connection",
- le_conn);
-
- convert_to_long_ex(arg2);
-
- MCVE_DeleteTrans(conn, Z_LVAL_PP(arg2));
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto void m_destroyconn(resource conn)
- Destroy the connection and MCVE_CONN structure */
-PHP_FUNCTION(m_destroyconn)
-{
-#if 0
- MCVE_CONN *conn;
-#endif
- zval **arg;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg) == FAILURE)
- WRONG_PARAM_COUNT;
-
-/* If MCVE_DestroyConn() is called within a PHP script, the Resource handle is
- never cleared, as there does not appear to be an UNREGISTER or DESTROY resource
- call in the Zend API. What happens is this uninitialized memory location is
- passed again to the MCVE_DestroyConn() function at script exit (cleanup), and
- causes weird stuff. So we just go ahead and let the PHP garbage collector call
- our _free_mcve_conn() we registered (le_conn) to clean up */
-#if 0
- ZEND_FETCH_RESOURCE(conn, MCVE_CONN *, arg, -1, "mcve connection", le_conn);
-
- MCVE_DestroyConn(conn);
-#endif
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto int m_setdropfile(resource conn, string directory)
- Set the connection method to Drop-File */
-PHP_FUNCTION(m_setdropfile)
-{
- MCVE_CONN *conn;
- int retval;
- zval **arg1, **arg2;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &arg1, &arg2) == FAILURE)
- WRONG_PARAM_COUNT;
-
- ZEND_FETCH_RESOURCE(conn, MCVE_CONN *, arg1, -1, "mcve connection", le_conn);
-
- convert_to_string_ex(arg2);
-
- retval = MCVE_SetDropFile(conn, Z_STRVAL_PP(arg2));
-
- RETURN_LONG(retval);
-}
-/* }}} */
-
-/* {{{ proto int m_setip(resource conn, string host, int port)
- Set the connection method to IP */
-PHP_FUNCTION(m_setip)
-{
- MCVE_CONN *conn;
- int retval;
- zval **arg1, **arg2, **arg3;
-
- if (ZEND_NUM_ARGS() != 3 || zend_get_parameters_ex(3, &arg1, &arg2, &arg3) == FAILURE)
- WRONG_PARAM_COUNT;
-
- ZEND_FETCH_RESOURCE(conn, MCVE_CONN *, arg1, -1, "mcve connection", le_conn);
-
- convert_to_string_ex(arg2);
- convert_to_long_ex(arg3);
-
- retval = MCVE_SetIP(conn, Z_STRVAL_PP(arg2), Z_LVAL_PP(arg3));
-
- RETURN_LONG(retval);
-}
-/* }}} */
-
-/* {{{ proto int m_setssl(resource conn, string host, int port)
- Set the connection method to SSL */
-PHP_FUNCTION(m_setssl)
-{
- MCVE_CONN *conn;
- int retval;
- zval **arg1, **arg2, **arg3;
-
- if (ZEND_NUM_ARGS() != 3 || zend_get_parameters_ex(3, &arg1, &arg2, &arg3) == FAILURE)
- WRONG_PARAM_COUNT;
-
- ZEND_FETCH_RESOURCE(conn, MCVE_CONN *, arg1, -1, "mcve connection", le_conn);
-
- convert_to_string_ex(arg2);
- convert_to_long_ex(arg3);
-
- retval = MCVE_SetSSL(conn, Z_STRVAL_PP(arg2), Z_LVAL_PP(arg3));
-
- RETURN_LONG(retval);
-}
-/* }}} */
-
-/* {{{ proto int m_setssl_files(string sslkeyfile, string sslcertfile)
- Set certificate key files and certificates if server requires client certificate
- verification
-*/
-PHP_FUNCTION(m_setssl_files)
-{
- int retval;
- zval **arg1, **arg2;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &arg1, &arg2) == FAILURE)
- WRONG_PARAM_COUNT;
-
- convert_to_string_ex(arg1);
- convert_to_string_ex(arg2);
-
- retval = MCVE_SetSSL_Files(Z_STRVAL_PP(arg1), Z_STRVAL_PP(arg2));
-
- RETURN_LONG(retval);
-}
-/* }}} */
-
-/* {{{ proto int m_settimeout(resource conn, int seconds)
- Set maximum transaction time (per trans)
-*/
-PHP_FUNCTION(m_settimeout)
-{
- MCVE_CONN *conn;
- int retval;
- zval **arg1, **arg2;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &arg1, &arg2) == FAILURE)
- WRONG_PARAM_COUNT;
-
- ZEND_FETCH_RESOURCE(conn, MCVE_CONN *, arg1, -1, "mcve connection", le_conn);
-
- convert_to_long_ex(arg2);
-
- retval = MCVE_SetTimeout(conn, Z_LVAL_PP(arg2));
-
- RETURN_LONG(retval);
-}
-/* }}} */
-
-/* {{{ proto int m_setblocking(resource conn, int tf)
- Set blocking/non-blocking mode for connection
-*/
-PHP_FUNCTION(m_setblocking)
-{
- MCVE_CONN *conn;
- int retval;
- zval **arg1, **arg2;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &arg1, &arg2) == FAILURE)
- WRONG_PARAM_COUNT;
-
- ZEND_FETCH_RESOURCE(conn, MCVE_CONN *, arg1, -1, "mcve connection", le_conn);
-
- convert_to_long_ex(arg2);
-
- retval = MCVE_SetBlocking(conn, Z_LVAL_PP(arg2));
-
- RETURN_LONG(retval);
-}
-/* }}} */
-
-/* {{{ proto bool m_verifyconnection(resource conn, int tf)
- Set whether or not to PING upon connect to verify connection
-*/
-PHP_FUNCTION(m_verifyconnection)
-{
- MCVE_CONN *conn;
- zval **arg1, **arg2;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &arg1, &arg2) == FAILURE)
- WRONG_PARAM_COUNT;
-
- ZEND_FETCH_RESOURCE(conn, MCVE_CONN *, arg1, -1, "mcve connection", le_conn);
-
- convert_to_long_ex(arg2);
-
- MCVE_VerifyConnection(conn, Z_LVAL_PP(arg2));
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto bool m_verifysslcert(resource conn, int tf)
- Set whether or not to verify the server ssl certificate
-*/
-PHP_FUNCTION(m_verifysslcert)
-{
- MCVE_CONN *conn;
- zval **arg1, **arg2;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &arg1, &arg2) == FAILURE)
- WRONG_PARAM_COUNT;
-
- ZEND_FETCH_RESOURCE(conn, MCVE_CONN *, arg1, -1, "mcve connection", le_conn);
-
- convert_to_long_ex(arg2);
-
- MCVE_VerifySSLCert(conn, Z_LVAL_PP(arg2));
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto bool m_maxconntimeout(resource conn, int secs)
- The maximum amount of time the API will attempt a connection to MCVE
-*/
-PHP_FUNCTION(m_maxconntimeout)
-{
- MCVE_CONN *conn;
- zval **arg1, **arg2;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &arg1, &arg2) == FAILURE)
- WRONG_PARAM_COUNT;
-
- ZEND_FETCH_RESOURCE(conn, MCVE_CONN *, arg1, -1, "mcve connection", le_conn);
-
- convert_to_long_ex(arg2);
-
- MCVE_MaxConnTimeout(conn, Z_LVAL_PP(arg2));
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto int m_connect(resource conn)
- Establish the connection to MCVE */
-PHP_FUNCTION(m_connect)
-{
- MCVE_CONN *conn;
- int retval;
- zval **arg;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg) == FAILURE)
- WRONG_PARAM_COUNT;
-
- ZEND_FETCH_RESOURCE(conn, MCVE_CONN *, arg, -1, "mcve connection", le_conn);
-
- retval = MCVE_Connect(conn);
-
- RETURN_LONG(retval);
-}
-/* }}} */
-
-/* {{{ proto string m_connectionerror(resource conn)
- Get a textual representation of why a connection failed */
-PHP_FUNCTION(m_connectionerror)
-{
- MCVE_CONN *conn;
- char *retval;
- zval **arg;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg) == FAILURE)
- WRONG_PARAM_COUNT;
-
- ZEND_FETCH_RESOURCE(conn, MCVE_CONN *, arg, -1, "mcve connection", le_conn);
-
- retval = MCVE_ConnectionError(conn);
-
- if (retval == NULL) {
- RETVAL_STRING("",1);
- } else {
- RETVAL_STRING(retval, 1);
- }
-}
-/* }}} */
-
-/* {{{ proto int m_transactionssent(resource conn)
- Check to see if outgoing buffer is clear */
-PHP_FUNCTION(m_transactionssent)
-{
- MCVE_CONN *conn;
- int retval;
- zval **arg;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg) == FAILURE)
- WRONG_PARAM_COUNT;
-
- ZEND_FETCH_RESOURCE(conn, MCVE_CONN *, arg, -1, "mcve connection", le_conn);
-
- retval = MCVE_TransactionsSent(conn);
-
- RETURN_LONG(retval);
-}
-/* }}} */
-
-/* {{{ proto int m_ping(resource conn)
- Send a ping request to MCVE */
-PHP_FUNCTION(m_ping)
-{
- MCVE_CONN *conn;
- int retval;
- zval **arg;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg) == FAILURE)
- WRONG_PARAM_COUNT;
-
- ZEND_FETCH_RESOURCE(conn, MCVE_CONN *, arg, -1, "mcve connection", le_conn);
-
- retval = MCVE_Ping(conn);
-
- RETURN_LONG(retval);
-}
-/* }}} */
-
-/* {{{ proto int m_transnew(resource conn)
- Start a new transaction */
-PHP_FUNCTION(m_transnew)
-{
- MCVE_CONN *conn;
- int retval;
- zval **arg;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg) == FAILURE)
- WRONG_PARAM_COUNT;
-
- ZEND_FETCH_RESOURCE(conn, MCVE_CONN *, arg, -1, "mcve connection", le_conn);
-
- retval = MCVE_TransNew(conn);
-
- RETURN_LONG(retval);
-}
-/* }}} */
-
-/* {{{ proto int m_transparam(resource conn, long identifier, int key, ...)
- Add a parameter to a transaction */
-PHP_FUNCTION(m_transparam)
-{
- MCVE_CONN *conn;
- int retval;
- int key;
- zval **arg1, **arg2, **arg3, **arg4, **arg5;
-
- if (ZEND_NUM_ARGS() == 4) {
- if (zend_get_parameters_ex(4, &arg1, &arg2, &arg3, &arg4) == FAILURE)
- WRONG_PARAM_COUNT;
- } else if (ZEND_NUM_ARGS() == 5) {
- if (zend_get_parameters_ex(5, &arg1, &arg2, &arg3, &arg4, &arg5) == FAILURE)
- WRONG_PARAM_COUNT;
- } else {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long_ex(arg3);
-
- key = Z_LVAL_PP(arg3);
-
- if (key == MC_CUSTOM && ZEND_NUM_ARGS() != 5)
- WRONG_PARAM_COUNT;
-
- ZEND_FETCH_RESOURCE(conn, MCVE_CONN *, arg1, -1, "mcve connection", le_conn);
-
- convert_to_long_ex(arg2);
-
- switch (key) {
- /* Typecast to MCVE_int64 */
- case MC_TTID:
- convert_to_long_ex(arg4);
- retval = MCVE_TransParam(conn, (long)Z_LVAL_PP(arg2), key, (MCVE_int64)Z_LVAL_PP(arg4));
- break;
-
- /* Typecast to long */
-
- case MC_PTRANNUM:
- case MC_TIMESTAMP:
- case MC_MARKER:
- convert_to_long_ex(arg4);
- retval = MCVE_TransParam(conn, (long)Z_LVAL_PP(arg2), key, (long)Z_LVAL_PP(arg4));
- break;
-
- /* Typecast to int */
- case MC_ADMIN:
- case MC_SUB:
- case MC_TRANTYPE:
- case MC_AUDITTYPE:
- case MC_EXCHARGES:
- case MC_INQUIRY:
- case MC_PRIORITY:
- case MC_CARDTYPES:
- case MC_ORIGTYPE:
- case MC_VOIDORIGTYPE:
- convert_to_long_ex(arg4);
- retval = MCVE_TransParam(conn, (long)Z_LVAL_PP(arg2), key, (int)Z_LVAL_PP(arg4));
- break;
-
- /* Typecast to double */
- case MC_AMOUNT:
- case MC_EXAMOUNT:
- case MC_RATE:
- convert_to_double_ex(arg4);
- retval = MCVE_TransParam(conn, (long)Z_LVAL_PP(arg2), key, (double)Z_DVAL_PP(arg4));
- break;
-
- case MC_CUSTOM:
- convert_to_string_ex(arg4);
- convert_to_string_ex(arg5);
- retval = MCVE_TransParam(conn, (long)Z_LVAL_PP(arg2), key, Z_STRVAL_PP(arg4), Z_STRVAL_PP(arg5));
- break;
-
- default:
- convert_to_string_ex(arg4);
- retval = MCVE_TransParam(conn, (long)Z_LVAL_PP(arg2), key, Z_STRVAL_PP(arg4));
- break;
- }
-
- RETURN_LONG(retval);
-}
-/* }}} */
-
-/* {{{ proto int m_transsend(resource conn, long identifier)
- Finalize and send the transaction */
-PHP_FUNCTION(m_transsend)
-{
- MCVE_CONN *conn;
- int retval;
- zval **arg1, **arg2;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &arg1, &arg2) == FAILURE)
- WRONG_PARAM_COUNT;
-
- ZEND_FETCH_RESOURCE(conn, MCVE_CONN *, arg1, -1, "mcve connection", le_conn);
-
- convert_to_long_ex(arg2);
-
- retval = MCVE_TransSend(conn, Z_LVAL_PP(arg2));
-
- RETURN_LONG(retval);
-}
-/* }}} */
-
-/* {{{ proto string m_responseparam(resource conn, long identifier, string key)
- Get a custom response parameter */
-PHP_FUNCTION(m_responseparam)
-{
- MCVE_CONN *conn;
- char *retval;
- zval **arg1, **arg2, **arg3;
-
- if (ZEND_NUM_ARGS() != 3 ||
- zend_get_parameters_ex(3, &arg1, &arg2, &arg3) == FAILURE)
- WRONG_PARAM_COUNT;
-
- ZEND_FETCH_RESOURCE(conn, MCVE_CONN *, arg1, -1, "mcve connection", le_conn);
-
- convert_to_long_ex(arg2);
- convert_to_string_ex(arg3);
-
- retval = MCVE_ResponseParam(conn, Z_LVAL_PP(arg2), Z_STRVAL_PP(arg3));
-
- if (retval == NULL) {
- RETVAL_STRING("",1);
- } else {
- RETVAL_STRING(retval, 1);
- }
-}
-/* }}} */
-
-/* {{{ proto string m_getuserparam(resource conn, long identifier, int key)
- Get a user response parameter */
-PHP_FUNCTION(m_getuserparam)
-{
- MCVE_CONN *conn;
- char *retval;
- zval **arg1, **arg2, **arg3;
-
- if (ZEND_NUM_ARGS() != 3 ||
- zend_get_parameters_ex(3, &arg1, &arg2, &arg3) == FAILURE)
- WRONG_PARAM_COUNT;
-
- ZEND_FETCH_RESOURCE(conn, MCVE_CONN *, arg1, -1, "mcve connection", le_conn);
-
- convert_to_long_ex(arg2);
- convert_to_long_ex(arg3);
-
- retval = MCVE_GetUserParam(conn, Z_LVAL_PP(arg2), Z_LVAL_PP(arg3));
-
- if (retval == NULL) {
- RETVAL_STRING("",1);
- } else {
- RETVAL_STRING(retval, 1);
- }
-}
-/* }}} */
-
-/* {{{ proto int m_returnstatus(resource conn, int identifier)
- Check to see if the transaction was successful */
-PHP_FUNCTION(m_returnstatus)
-{
- MCVE_CONN *conn;
- int retval;
- zval **arg1, **arg2;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &arg1, &arg2) == FAILURE)
- WRONG_PARAM_COUNT;
-
- ZEND_FETCH_RESOURCE(conn, MCVE_CONN *, arg1, -1, "mcve connection", le_conn);
-
- convert_to_long_ex(arg2);
-
- retval = MCVE_ReturnStatus(conn, Z_LVAL_PP(arg2));
-
- RETURN_LONG(retval);
-}
-/* }}} */
-
-/* {{{ proto int m_returncode(resource conn, int identifier)
- Grab the exact return code from the transaction */
-PHP_FUNCTION(m_returncode)
-{
- MCVE_CONN *conn;
- int retval;
- zval **arg1, **arg2;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &arg1, &arg2) == FAILURE)
- WRONG_PARAM_COUNT;
-
- ZEND_FETCH_RESOURCE(conn, MCVE_CONN *, arg1, -1, "mcve connection", le_conn);
-
- convert_to_long_ex(arg2);
-
- retval = MCVE_ReturnCode(conn, Z_LVAL_PP(arg2));
-
- RETURN_LONG(retval);
-}
-/* }}} */
-
-/* {{{ proto int m_transactionitem(resource conn, int identifier)
- Get the ITEM number in the associated batch for this transaction */
-PHP_FUNCTION(m_transactionitem)
-{
- MCVE_CONN *conn;
- int retval;
- zval **arg1, **arg2;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &arg1, &arg2) == FAILURE)
- WRONG_PARAM_COUNT;
-
- ZEND_FETCH_RESOURCE(conn, MCVE_CONN *, arg1, -1, "mcve connection", le_conn);
-
- convert_to_long_ex(arg2);
-
- retval = MCVE_TransactionItem(conn, Z_LVAL_PP(arg2));
-
- RETURN_LONG(retval);
-}
-/* }}} */
-
-/* {{{ proto int m_transactionavs(resource conn, int identifier)
- Get the Address Verification return status */
-PHP_FUNCTION(m_transactionavs)
-{
- MCVE_CONN *conn;
- int retval;
- zval **arg1, **arg2;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &arg1, &arg2) == FAILURE)
- WRONG_PARAM_COUNT;
-
- ZEND_FETCH_RESOURCE(conn, MCVE_CONN *, arg1, -1, "mcve connection", le_conn);
-
- convert_to_long_ex(arg2);
-
- retval = MCVE_TransactionAVS(conn, Z_LVAL_PP(arg2));
-
- RETURN_LONG(retval);
-}
-/* }}} */
-
-
-/* {{{ proto int m_transactioncv(resource conn, int identifier)
- Get the CVC2/CVV2/CID return status */
-PHP_FUNCTION(m_transactioncv)
-{
- MCVE_CONN *conn;
- int retval;
- zval **arg1, **arg2;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &arg1, &arg2) == FAILURE)
- WRONG_PARAM_COUNT;
-
- ZEND_FETCH_RESOURCE(conn, MCVE_CONN *, arg1, -1, "mcve connection", le_conn);
-
- convert_to_long_ex(arg2);
-
- retval = MCVE_TransactionCV(conn, Z_LVAL_PP(arg2));
-
- RETURN_LONG(retval);
-}
-/* }}} */
-
-/* {{{ proto int m_transactionbatch(resource conn, int identifier)
- Get the batch number associated with the transaction */
-PHP_FUNCTION(m_transactionbatch)
-{
- MCVE_CONN *conn;
- int retval;
- zval **arg1, **arg2;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &arg1, &arg2) == FAILURE)
- WRONG_PARAM_COUNT;
-
- ZEND_FETCH_RESOURCE(conn, MCVE_CONN *, arg1, -1, "mcve connection", le_conn);
-
- convert_to_long_ex(arg2);
-
- retval = MCVE_TransactionBatch(conn, Z_LVAL_PP(arg2));
-
- RETURN_LONG(retval);
-}
-/* }}} */
-
-/* {{{ proto int m_transactionid(resource conn, int identifier)
- Get the unique system id for the transaction
-*/
-PHP_FUNCTION(m_transactionid)
-{
- MCVE_CONN *conn;
- int retval;
- zval **arg1, **arg2;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &arg1, &arg2) == FAILURE)
- WRONG_PARAM_COUNT;
-
- ZEND_FETCH_RESOURCE(conn, MCVE_CONN *, arg1, -1, "mcve connection", le_conn);
-
- convert_to_long_ex(arg2);
-
- retval = MCVE_TransactionID(conn, Z_LVAL_PP(arg2));
-
- RETURN_LONG(retval);
-}
-/* }}} */
-
-/* {{{ proto string m_transactionauth(resource conn, int identifier)
- Get the authorization number returned for the transaction (alpha-numeric) */
-PHP_FUNCTION(m_transactionauth)
-{
- MCVE_CONN *conn;
- char *retval;
- zval **arg1, **arg2;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &arg1, &arg2) == FAILURE)
- WRONG_PARAM_COUNT;
-
- ZEND_FETCH_RESOURCE(conn, MCVE_CONN *, arg1, -1, "mcve connection", le_conn);
-
- convert_to_long_ex(arg2);
-
- retval = MCVE_TransactionAuth(conn, Z_LVAL_PP(arg2));
-
- if (retval == NULL) {
- RETVAL_STRING("",1);
- } else {
- RETVAL_STRING(retval, 1);
- }
-}
-/* }}} */
-
-/* {{{ proto string m_transactiontext(resource conn, int identifier)
- Get verbiage (text) return from MCVE or processing institution */
-PHP_FUNCTION(m_transactiontext)
-{
- MCVE_CONN *conn;
- char *retval;
- zval **arg1, **arg2;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &arg1, &arg2) == FAILURE)
- WRONG_PARAM_COUNT;
-
- ZEND_FETCH_RESOURCE(conn, MCVE_CONN *, arg1, -1, "mcve connection", le_conn);
-
- convert_to_long_ex(arg2);
-
- retval = MCVE_TransactionText(conn, Z_LVAL_PP(arg2));
- if (retval == NULL) {
- RETVAL_STRING("",1);
- } else {
- RETVAL_STRING(retval, 1);
- }
-}
-/* }}} */
-
-/* {{{ proto int m_monitor(resource conn)
- Perform communication with MCVE (send/receive data) Non-blocking */
-PHP_FUNCTION(m_monitor)
-{
- MCVE_CONN *conn;
- int retval;
- zval **arg;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg) == FAILURE)
- WRONG_PARAM_COUNT;
-
- ZEND_FETCH_RESOURCE(conn, MCVE_CONN *, arg, -1, "mcve connection", le_conn);
-
- retval = MCVE_Monitor(conn);
-
- RETURN_LONG(retval);
-}
-/* }}} */
-
-/* {{{ proto int m_transinqueue(resource conn)
- Number of transactions in client-queue */
-PHP_FUNCTION(m_transinqueue)
-{
- MCVE_CONN *conn;
- int retval;
- zval **arg;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg) == FAILURE)
- WRONG_PARAM_COUNT;
-
- ZEND_FETCH_RESOURCE(conn, MCVE_CONN *, arg, -1, "mcve connection", le_conn);
-
- retval = MCVE_TransInQueue(conn);
-
- RETURN_LONG(retval);
-}
-/* }}} */
-
-/* {{{ proto int m_checkstatus(resource conn, int identifier)
- Check to see if a transaction has completed */
-PHP_FUNCTION(m_checkstatus)
-{
- MCVE_CONN *conn;
- long retval;
- zval **arg1, **arg2;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &arg1, &arg2) == FAILURE)
- WRONG_PARAM_COUNT;
-
- ZEND_FETCH_RESOURCE(conn, MCVE_CONN *, arg1, -1, "mcve connection", le_conn);
-
- convert_to_long_ex(arg2);
-
- retval = MCVE_CheckStatus(conn, Z_LVAL_PP(arg2));
-
- RETURN_LONG(retval);
-}
-/* }}} */
-
-/* {{{ proto int m_completeauthorizations(resource conn, int &array)
- Number of complete authorizations in queue, returning an array of their identifiers */
-PHP_FUNCTION(m_completeauthorizations)
-{
- MCVE_CONN *conn;
- long i, *list, listnum;
- zval **arg1, **arg2;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &arg1, &arg2))
- WRONG_PARAM_COUNT;
-
- ZEND_FETCH_RESOURCE(conn, MCVE_CONN *, arg1, -1, "mcve connection", le_conn);
-
- listnum = MCVE_CompleteAuthorizations(conn, &list);
-
- if (listnum) {
- /* should use ZVAL_DESTRUCTOR */
- pval_destructor(*arg2);
- array_init(*arg2);
- for (i = 0; i < listnum; i++)
- add_index_long(*arg2, i, list[i]);
- free(list);
- }
-
- RETURN_LONG(listnum);
-}
-/* }}} */
-
-/* {{{ proto int m_sale(resource conn, string username, string password, string trackdata, string account, string expdate, float amount, string street, string zip, string cv, string comments, string clerkid, string stationid, int ptrannum)
- Send a SALE to MCVE */
-PHP_FUNCTION(m_sale)
-{
- MCVE_CONN *conn;
- long retval;
- zval **arg1, **arg2, **arg3, **arg4, **arg5, **arg6, **arg7, **arg8;
- zval **arg9, **arg10, **arg11, **arg12, **arg13, **arg14;
-
- if (ZEND_NUM_ARGS() != 14 || zend_get_parameters_ex(14, &arg1, &arg2,
- &arg3, &arg4, &arg5, &arg6, &arg7, &arg8, &arg9, &arg10, &arg11,
- &arg12, &arg13, &arg14) == FAILURE)
- WRONG_PARAM_COUNT;
-
- ZEND_FETCH_RESOURCE(conn, MCVE_CONN *, arg1, -1, "mcve connection", le_conn);
-
- convert_to_string_ex(arg2);
- convert_to_string_ex(arg3);
- convert_to_string_ex(arg4);
- convert_to_string_ex(arg5);
- convert_to_string_ex(arg6);
- convert_to_double_ex(arg7);
- convert_to_string_ex(arg8);
- convert_to_string_ex(arg9);
- convert_to_string_ex(arg10);
- convert_to_string_ex(arg11);
- convert_to_string_ex(arg12);
- convert_to_string_ex(arg13);
- convert_to_long_ex(arg14);
-
- retval = MCVE_Sale(conn, Z_STRVAL_PP(arg2), Z_STRVAL_PP(arg3),
- Z_STRVAL_PP(arg4), Z_STRVAL_PP(arg5), Z_STRVAL_PP(arg6),
- Z_DVAL_PP(arg7), Z_STRVAL_PP(arg8), Z_STRVAL_PP(arg9),
- Z_STRVAL_PP(arg10), Z_STRVAL_PP(arg11), Z_STRVAL_PP(arg12),
- Z_STRVAL_PP(arg13), Z_LVAL_PP(arg14));
-
- RETURN_LONG(retval);
-}
-/* }}} */
-
-/* {{{ proto int m_preauth(resource conn, string username, string password, string trackdata, string account, string expdate, float amount, string street, string zip, string cv, string comments, string clerkid, string stationid, int ptrannum)
- Send a PREAUTHORIZATION to MCVE */
-PHP_FUNCTION(m_preauth)
-{
- MCVE_CONN *conn;
- long retval;
- zval **arg1, **arg2, **arg3, **arg4, **arg5, **arg6, **arg7, **arg8;
- zval **arg9, **arg10, **arg11, **arg12, **arg13, **arg14;
-
- if (ZEND_NUM_ARGS() != 14 || zend_get_parameters_ex(14, &arg1, &arg2,
- &arg3, &arg4, &arg5, &arg6, &arg7, &arg8, &arg9, &arg10, &arg11,
- &arg12, &arg13, &arg14) == FAILURE)
- WRONG_PARAM_COUNT;
-
- ZEND_FETCH_RESOURCE(conn, MCVE_CONN *, arg1, -1, "mcve connection", le_conn);
-
- convert_to_string_ex(arg2);
- convert_to_string_ex(arg3);
- convert_to_string_ex(arg4);
- convert_to_string_ex(arg5);
- convert_to_string_ex(arg6);
- convert_to_double_ex(arg7);
- convert_to_string_ex(arg8);
- convert_to_string_ex(arg9);
- convert_to_string_ex(arg10);
- convert_to_string_ex(arg11);
- convert_to_string_ex(arg12);
- convert_to_string_ex(arg13);
- convert_to_long_ex(arg14);
-
- retval = MCVE_PreAuth(conn, Z_STRVAL_PP(arg2), Z_STRVAL_PP(arg3),
- Z_STRVAL_PP(arg4), Z_STRVAL_PP(arg5), Z_STRVAL_PP(arg6),
- Z_DVAL_PP(arg7), Z_STRVAL_PP(arg8), Z_STRVAL_PP(arg9),
- Z_STRVAL_PP(arg10), Z_STRVAL_PP(arg11), Z_STRVAL_PP(arg12),
- Z_STRVAL_PP(arg13), Z_LVAL_PP(arg14));
-
- RETURN_LONG(retval);
-}
-/* }}} */
-
-/* {{{ proto int m_override(resource conn, string username, string password, string trackdata, string account, string expdate, float amount, string street, string zip, string cv, string comments, string clerkid, string stationid, int ptrannum)
- Send an OVERRIDE to MCVE */
-PHP_FUNCTION(m_override)
-{
- MCVE_CONN *conn;
- long retval;
- zval **arg1, **arg2, **arg3, **arg4, **arg5, **arg6, **arg7, **arg8;
- zval **arg9, **arg10, **arg11, **arg12, **arg13, **arg14;
-
- if (ZEND_NUM_ARGS() != 14 || zend_get_parameters_ex(14, &arg1, &arg2,
- &arg3, &arg4, &arg5, &arg6, &arg7, &arg8, &arg9, &arg10, &arg11,
- &arg12, &arg13, &arg14) == FAILURE)
- WRONG_PARAM_COUNT;
-
- ZEND_FETCH_RESOURCE(conn, MCVE_CONN *, arg1, -1, "mcve connection", le_conn);
-
- convert_to_string_ex(arg2);
- convert_to_string_ex(arg3);
- convert_to_string_ex(arg4);
- convert_to_string_ex(arg5);
- convert_to_string_ex(arg6);
- convert_to_double_ex(arg7);
- convert_to_string_ex(arg8);
- convert_to_string_ex(arg9);
- convert_to_string_ex(arg10);
- convert_to_string_ex(arg11);
- convert_to_string_ex(arg12);
- convert_to_string_ex(arg13);
- convert_to_long_ex(arg14);
-
- retval = MCVE_Override(conn, Z_STRVAL_PP(arg2), Z_STRVAL_PP(arg3),
- Z_STRVAL_PP(arg4), Z_STRVAL_PP(arg5), Z_STRVAL_PP(arg6),
- Z_DVAL_PP(arg7), Z_STRVAL_PP(arg8), Z_STRVAL_PP(arg9),
- Z_STRVAL_PP(arg10), Z_STRVAL_PP(arg11), Z_STRVAL_PP(arg12),
- Z_STRVAL_PP(arg13), Z_LVAL_PP(arg14));
-
- RETURN_LONG(retval);
-}
-/* }}} */
-
-/* {{{ proto int m_void(resource conn, string username, string password, int sid, int ptrannum)
- VOID a transaction in the settlement queue */
-PHP_FUNCTION(m_void)
-{
- MCVE_CONN *conn;
- long retval;
- zval **arg1, **arg2, **arg3, **arg4, **arg5;
-
- if (ZEND_NUM_ARGS() != 5 ||
- zend_get_parameters_ex(5, &arg1, &arg2, &arg3, &arg4, &arg5) == FAILURE)
- WRONG_PARAM_COUNT;
-
- ZEND_FETCH_RESOURCE(conn, MCVE_CONN *, arg1, -1, "mcve connection", le_conn);
-
- convert_to_string_ex(arg2);
- convert_to_string_ex(arg3);
- convert_to_long_ex(arg4);
- convert_to_long_ex(arg5);
-
- retval = MCVE_Void(conn, Z_STRVAL_PP(arg2), Z_STRVAL_PP(arg3), (MCVE_int64)Z_LVAL_PP(arg4), Z_LVAL_PP(arg5));
-
- RETURN_LONG(retval);
-}
-/* }}} */
-
-/* {{{ proto int m_preauthcompletion(resource conn, string username, string password, float finalamount, int sid, int ptrannum)
- Complete a PREAUTHORIZATION... Ready it for settlement */
-PHP_FUNCTION(m_preauthcompletion)
-{
- MCVE_CONN *conn;
- long retval;
- zval **arg1, **arg2, **arg3, **arg4, **arg5, **arg6;
-
- if (ZEND_NUM_ARGS() != 6 ||
- zend_get_parameters_ex(6, &arg1, &arg2, &arg3, &arg4, &arg5, &arg6) == FAILURE)
- WRONG_PARAM_COUNT;
-
- ZEND_FETCH_RESOURCE(conn, MCVE_CONN *, arg1, -1, "mcve connection", le_conn);
-
- convert_to_string_ex(arg2);
- convert_to_string_ex(arg3);
- convert_to_double_ex(arg4);
- convert_to_long_ex(arg5);
- convert_to_long_ex(arg6);
-
- retval = MCVE_PreAuthCompletion(conn, Z_STRVAL_PP(arg2),
- Z_STRVAL_PP(arg3), Z_DVAL_PP(arg4), Z_LVAL_PP(arg5), Z_LVAL_PP(arg6));
-
- RETURN_LONG(retval);
-}
-/* }}} */
-
-/* {{{ proto int m_force(resiurce conn, string username, string password, string trackdata, string account, string expdate, float amount, string authcode, string comments, string clerkid, string stationid, int ptrannum)
- Send a FORCE to MCVE. (typically, a phone-authorization) */
-PHP_FUNCTION(m_force)
-{
- MCVE_CONN *conn;
- long retval;
- zval **arg1, **arg2, **arg3, **arg4, **arg5, **arg6, **arg7, **arg8;
- zval **arg9, **arg10, **arg11, **arg12;
-
- if (ZEND_NUM_ARGS() != 12 || zend_get_parameters_ex(12, &arg1, &arg2,
- &arg3, &arg4, &arg5, &arg6, &arg7, &arg8, &arg9, &arg10, &arg11, &arg12) == FAILURE)
- WRONG_PARAM_COUNT;
-
- ZEND_FETCH_RESOURCE(conn, MCVE_CONN *, arg1, -1, "mcve connection", le_conn);
-
- convert_to_string_ex(arg2);
- convert_to_string_ex(arg3);
- convert_to_string_ex(arg4);
- convert_to_string_ex(arg5);
- convert_to_string_ex(arg6);
- convert_to_double_ex(arg7);
- convert_to_string_ex(arg8);
- convert_to_string_ex(arg9);
- convert_to_string_ex(arg10);
- convert_to_string_ex(arg11);
- convert_to_long_ex(arg12);
-
- retval = MCVE_Force(conn, Z_STRVAL_PP(arg2), Z_STRVAL_PP(arg3),
- Z_STRVAL_PP(arg4), Z_STRVAL_PP(arg5), Z_STRVAL_PP(arg6),
- Z_DVAL_PP(arg7), Z_STRVAL_PP(arg8), Z_STRVAL_PP(arg9),
- Z_STRVAL_PP(arg10), Z_STRVAL_PP(arg11), Z_LVAL_PP(arg12));
-
- RETURN_LONG(retval);
-}
-/* }}} */
-
-/* {{{ proto int m_return(int conn, string username, string password, string trackdata, string account, string expdate, float amount, string comments, string clerkid, string stationid, int ptrannum)
- Issue a RETURN or CREDIT to MCVE */
-PHP_FUNCTION(m_return)
-{
- MCVE_CONN *conn;
- long retval;
- zval **arg1, **arg2, **arg3, **arg4, **arg5, **arg6, **arg7, **arg8;
- zval **arg9, **arg10, **arg11;
-
- if (ZEND_NUM_ARGS() != 11 || zend_get_parameters_ex(11, &arg1, &arg2,
- &arg3, &arg4, &arg5, &arg6, &arg7, &arg8, &arg9, &arg10, &arg11) == FAILURE)
- WRONG_PARAM_COUNT;
-
- ZEND_FETCH_RESOURCE(conn, MCVE_CONN *, arg1, -1, "mcve connection", le_conn);
-
- convert_to_string_ex(arg2);
- convert_to_string_ex(arg3);
- convert_to_string_ex(arg4);
- convert_to_string_ex(arg5);
- convert_to_string_ex(arg6);
- convert_to_double_ex(arg7);
- convert_to_string_ex(arg8);
- convert_to_string_ex(arg9);
- convert_to_string_ex(arg10);
- convert_to_long_ex(arg11);
-
- retval = MCVE_Return(conn, Z_STRVAL_PP(arg2), Z_STRVAL_PP(arg3),
- Z_STRVAL_PP(arg4), Z_STRVAL_PP(arg5), Z_STRVAL_PP(arg6),
- Z_DVAL_PP(arg7), Z_STRVAL_PP(arg8), Z_STRVAL_PP(arg9),
- Z_STRVAL_PP(arg10), Z_LVAL_PP(arg11));
-
- RETURN_LONG(retval);
-}
-/* }}} */
-
-
-/* {{{ proto int m_settle(resource conn, string username, string password, string batch)
- Issue a settlement command to do a batch deposit */
-PHP_FUNCTION(m_settle)
-{
- MCVE_CONN *conn;
- long retval;
- zval **arg1, **arg2, **arg3, **arg4;
-
- if (ZEND_NUM_ARGS() != 4 || zend_get_parameters_ex(4, &arg1, &arg2, &arg3, &arg4) == FAILURE)
- WRONG_PARAM_COUNT;
-
- ZEND_FETCH_RESOURCE(conn, MCVE_CONN *, arg1, -1, "mcve connection", le_conn);
-
- convert_to_string_ex(arg2);
- convert_to_string_ex(arg3);
- convert_to_string_ex(arg4);
-
- retval = MCVE_Settle(conn, Z_STRVAL_PP(arg2), Z_STRVAL_PP(arg3), Z_STRVAL_PP(arg4));
-
- RETURN_LONG(retval);
-}
-/* }}} */
-
-/* {{{ proto int m_ub(resource conn, string username, string password)
- Get a list of all Unsettled batches */
-PHP_FUNCTION(m_ub)
-{
- MCVE_CONN *conn;
- long retval;
- zval **arg1, **arg2, **arg3;
-
- if (ZEND_NUM_ARGS() != 3 || zend_get_parameters_ex(3, &arg1, &arg2, &arg3) == FAILURE)
- WRONG_PARAM_COUNT;
-
- ZEND_FETCH_RESOURCE(conn, MCVE_CONN *, arg1, -1, "mcve connection", le_conn);
-
- convert_to_string_ex(arg2);
- convert_to_string_ex(arg3);
-
- retval = MCVE_Ub(conn, Z_STRVAL_PP(arg2), Z_STRVAL_PP(arg3));
-
- RETURN_LONG(retval);
-}
-/* }}} */
-
-/* {{{ proto int m_qc(resource conn, string username, string password, string clerkid, string stationid, string comments, int ptrannum)
- Audit MCVE for a list of transactions in the outgoing queue */
-PHP_FUNCTION(m_qc)
-{
- MCVE_CONN *conn;
- long retval;
- zval **arg1, **arg2, **arg3, **arg4, **arg5, **arg6, **arg7;
-
- if (ZEND_NUM_ARGS() != 7 ||
- zend_get_parameters_ex(7, &arg1, &arg2, &arg3, &arg4, &arg5, &arg6, &arg7) == FAILURE)
- WRONG_PARAM_COUNT;
-
- ZEND_FETCH_RESOURCE(conn, MCVE_CONN *, arg1, -1, "mcve connection", le_conn);
-
- convert_to_string_ex(arg2);
- convert_to_string_ex(arg3);
- convert_to_string_ex(arg4);
- convert_to_string_ex(arg5);
- convert_to_string_ex(arg6);
- convert_to_long_ex(arg7);
-
- retval = MCVE_Qc(conn, Z_STRVAL_PP(arg2), Z_STRVAL_PP(arg3), Z_STRVAL_PP(arg4),
- Z_STRVAL_PP(arg5), Z_STRVAL_PP(arg6), Z_LVAL_PP(arg7));
-
- RETURN_LONG(retval);
-}
-/* }}} */
-
-/* {{{ proto int m_gut(resource conn, string username, string password, int type, string account, string clerkid, string stationid, string comments, int ptrannum, string startdate, string enddate)
- Audit MCVE for Unsettled Transactions */
-PHP_FUNCTION(m_gut)
-{
- MCVE_CONN *conn;
- long retval;
- zval **arg1, **arg2, **arg3, **arg4, **arg5, **arg6, **arg7, **arg8, **arg9, **arg10, **arg11;
-
- if (ZEND_NUM_ARGS() != 11 || zend_get_parameters_ex(11, &arg1, &arg2,
- &arg3, &arg4, &arg5, &arg6, &arg7, &arg8, &arg9, &arg10, &arg11) == FAILURE)
- WRONG_PARAM_COUNT;
-
- ZEND_FETCH_RESOURCE(conn, MCVE_CONN *, arg1, -1, "mcve connection", le_conn);
-
- convert_to_string_ex(arg2);
- convert_to_string_ex(arg3);
- convert_to_long_ex(arg4);
- convert_to_string_ex(arg5);
- convert_to_string_ex(arg6);
- convert_to_string_ex(arg7);
- convert_to_string_ex(arg8);
- convert_to_double_ex(arg9);
- convert_to_string_ex(arg10);
- convert_to_string_ex(arg11);
-
- retval = MCVE_Gut(conn, Z_STRVAL_PP(arg2), Z_STRVAL_PP(arg3), Z_LVAL_PP(arg4),
- Z_STRVAL_PP(arg5), Z_STRVAL_PP(arg6), Z_STRVAL_PP(arg7), Z_STRVAL_PP(arg8),
- Z_DVAL_PP(arg9), Z_STRVAL_PP(arg10),Z_STRVAL_PP(arg11));
-
- RETURN_LONG(retval);
-}
-/* }}} */
-
-/* {{{ proto int m_gl(int conn, string username, string password, int type, string account, string batch, string clerkid, string stationid, string comments, int ptrannum, string startdate, string enddate)
- Audit MCVE for settled transactions */
-PHP_FUNCTION(m_gl)
-{
- MCVE_CONN *conn;
- long retval;
- zval **arg1, **arg2, **arg3, **arg4, **arg5, **arg6, **arg7, **arg8, **arg9, **arg10, **arg11, **arg12;
-
- if (ZEND_NUM_ARGS() != 12 || zend_get_parameters_ex(12, &arg1, &arg2,
- &arg3, &arg4, &arg5, &arg6, &arg7, &arg8, &arg9, &arg10, &arg11, &arg12) == FAILURE)
- WRONG_PARAM_COUNT;
-
- ZEND_FETCH_RESOURCE(conn, MCVE_CONN *, arg1, -1, "mcve connection", le_conn);
-
- convert_to_string_ex(arg2);
- convert_to_string_ex(arg3);
- convert_to_long_ex(arg4);
- convert_to_string_ex(arg5);
- convert_to_string_ex(arg6);
- convert_to_string_ex(arg7);
- convert_to_string_ex(arg8);
- convert_to_string_ex(arg9);
- convert_to_double_ex(arg10);
- convert_to_string_ex(arg11);
- convert_to_string_ex(arg12);
-
- retval = MCVE_Gl(conn, Z_STRVAL_PP(arg2), Z_STRVAL_PP(arg3), Z_LVAL_PP(arg4),
- Z_STRVAL_PP(arg5), Z_STRVAL_PP(arg6), Z_STRVAL_PP(arg7), Z_STRVAL_PP(arg8),
- Z_STRVAL_PP(arg9), Z_DVAL_PP(arg10), Z_STRVAL_PP(arg11), Z_STRVAL_PP(arg12));
-
- RETURN_LONG(retval);
-}
-/* }}} */
-
-/* {{{ proto int m_gft(resource conn, string username, string password, int type, string account, string clerkid, string stationid, string comments, int ptrannum, string startdate, string enddate)
- Audit MCVE for Failed transactions
-*/
-PHP_FUNCTION(m_gft)
-{
- MCVE_CONN *conn;
- long retval;
- zval **arg1, **arg2, **arg3, **arg4, **arg5, **arg6, **arg7, **arg8, **arg9, **arg10, **arg11;
-
- if (ZEND_NUM_ARGS() != 11 || zend_get_parameters_ex(11, &arg1, &arg2,
- &arg3, &arg4, &arg5, &arg6, &arg7, &arg8, &arg9, &arg10, &arg11) == FAILURE)
- WRONG_PARAM_COUNT;
-
- ZEND_FETCH_RESOURCE(conn, MCVE_CONN *, arg1, -1, "mcve connection", le_conn);
-
- convert_to_string_ex(arg2);
- convert_to_string_ex(arg3);
- convert_to_long_ex(arg4);
- convert_to_string_ex(arg5);
- convert_to_string_ex(arg6);
- convert_to_string_ex(arg7);
- convert_to_string_ex(arg8);
- convert_to_long_ex(arg9);
- convert_to_string_ex(arg10);
- convert_to_string_ex(arg11);
-
- retval = MCVE_Gft(conn, Z_STRVAL_PP(arg2), Z_STRVAL_PP(arg3), Z_LVAL_PP(arg4),
- Z_STRVAL_PP(arg5), Z_STRVAL_PP(arg6), Z_STRVAL_PP(arg7), Z_STRVAL_PP(arg8),
- Z_LVAL_PP(arg9), Z_STRVAL_PP(arg10), Z_STRVAL_PP(arg11));
-
- RETURN_LONG(retval);
-}
-/* }}} */
-
-/* {{{ proto int m_chkpwd(resource conn, string username, string password)
- Verify Password */
-PHP_FUNCTION(m_chkpwd)
-{
- MCVE_CONN *conn;
- long retval;
- zval **arg1, **arg2, **arg3;
-
- if (ZEND_NUM_ARGS() != 3 || zend_get_parameters_ex(3, &arg1, &arg2, &arg3) == FAILURE)
- WRONG_PARAM_COUNT;
-
- ZEND_FETCH_RESOURCE(conn, MCVE_CONN *, arg1, -1, "mcve connection", le_conn);
-
- convert_to_string_ex(arg2);
- convert_to_string_ex(arg3);
-
- retval = MCVE_Chkpwd(conn, Z_STRVAL_PP(arg2), Z_STRVAL_PP(arg3));
-
- RETURN_LONG(retval);
-}
-/* }}} */
-
-/* {{{ proto int m_bt(resource conn, string username, string password)
- Get unsettled batch totals */
-PHP_FUNCTION(m_bt)
-{
- MCVE_CONN *conn;
- long retval;
- zval **arg1, **arg2, **arg3;
-
- if (ZEND_NUM_ARGS() != 3 || zend_get_parameters_ex(3, &arg1, &arg2, &arg3) == FAILURE)
- WRONG_PARAM_COUNT;
-
- ZEND_FETCH_RESOURCE(conn, MCVE_CONN *, arg1, -1, "mcve connection", le_conn);
-
- convert_to_string_ex(arg2);
- convert_to_string_ex(arg3);
-
- retval = MCVE_Bt(conn, Z_STRVAL_PP(arg2), Z_STRVAL_PP(arg3));
-
- RETURN_LONG(retval);
-}
-/* }}} */
-
-/* {{{ proto string m_getcell(resource conn, int identifier, string column, int row)
- Get a specific cell from a comma delimited response by column name */
-PHP_FUNCTION(m_getcell)
-{
- MCVE_CONN *conn;
- char *retval;
- zval **arg1, **arg2, **arg3, **arg4;
-
- if (ZEND_NUM_ARGS() != 4 || zend_get_parameters_ex(4, &arg1, &arg2, &arg3, &arg4) == FAILURE)
- WRONG_PARAM_COUNT;
-
- ZEND_FETCH_RESOURCE(conn, MCVE_CONN *, arg1, -1, "mcve connection", le_conn);
-
- convert_to_long_ex(arg2);
- convert_to_string_ex(arg3);
- convert_to_long_ex(arg4);
-
- retval = MCVE_GetCell(conn, Z_LVAL_PP(arg2), Z_STRVAL_PP(arg3), Z_LVAL_PP(arg4));
-
- if (retval == NULL) {
- RETURN_STRING("", 1);
- } else {
- RETURN_STRING(retval, 1);
- }
-}
-/* }}} */
-
-/* {{{ proto string m_getcellbynum(resource conn, int identifier, int column, int row)
- Get a specific cell from a comma delimited response by column number */
-PHP_FUNCTION(m_getcellbynum)
-{
- MCVE_CONN *conn;
- char *retval;
- zval **arg1, **arg2, **arg3, **arg4;
-
- if (ZEND_NUM_ARGS() != 4 || zend_get_parameters_ex(4, &arg1, &arg2, &arg3, &arg4) == FAILURE)
- WRONG_PARAM_COUNT;
-
- ZEND_FETCH_RESOURCE(conn, MCVE_CONN *, arg1, -1, "mcve connection", le_conn);
-
- convert_to_long_ex(arg2);
- convert_to_long_ex(arg3);
- convert_to_long_ex(arg4);
-
- retval = MCVE_GetCellByNum(conn, Z_LVAL_PP(arg2), Z_LVAL_PP(arg3), Z_LVAL_PP(arg4));
-
- if (retval == NULL) {
- RETURN_STRING("", 1);
- } else {
- RETURN_STRING(retval, 1);
- }
-}
-/* }}} */
-
-/* {{{ proto int m_numcolumns(resource conn, int identifier)
- Number of columns returned in a comma delimited response */
-PHP_FUNCTION(m_numcolumns)
-{
- MCVE_CONN *conn;
- long retval;
- zval **arg1, **arg2;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &arg1, &arg2) == FAILURE)
- WRONG_PARAM_COUNT;
-
- ZEND_FETCH_RESOURCE(conn, MCVE_CONN *, arg1, -1, "mcve connection", le_conn);
-
- convert_to_long_ex(arg2);
-
- retval = MCVE_NumColumns(conn, Z_LVAL_PP(arg2));
-
- RETURN_LONG(retval);
-}
-/* }}} */
-
-/* {{{ proto int m_numrows(resource conn, int identifier)
- Number of rows returned in a comma delimited response */
-PHP_FUNCTION(m_numrows)
-{
- MCVE_CONN *conn;
- long retval;
- zval **arg1, **arg2;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &arg1, &arg2) == FAILURE)
- WRONG_PARAM_COUNT;
-
- ZEND_FETCH_RESOURCE(conn, MCVE_CONN *, arg1, -1, "mcve connection", le_conn);
-
- convert_to_long_ex(arg2);
-
- retval = MCVE_NumRows(conn, Z_LVAL_PP(arg2));
-
- RETURN_LONG(retval);
-}
-/* }}} */
-
-/* {{{ proto int m_iscommadelimited(resource conn, int identifier)
- Checks to see if response is comma delimited */
-PHP_FUNCTION(m_iscommadelimited)
-{
- MCVE_CONN *conn;
- long retval;
- zval **arg1, **arg2;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &arg1, &arg2) == FAILURE)
- WRONG_PARAM_COUNT;
-
- ZEND_FETCH_RESOURCE(conn, MCVE_CONN *, arg1, -1, "mcve connection", le_conn);
-
- convert_to_long_ex(arg2);
-
- retval = MCVE_IsCommaDelimited(conn, Z_LVAL_PP(arg2));
-
- RETURN_LONG(retval);
-}
-/* }}} */
-
-/* {{{ proto int m_parsecommadelimited(resource conn, int identifier)
- Parse the comma delimited response so m_getcell, etc will work */
-PHP_FUNCTION(m_parsecommadelimited)
-{
- MCVE_CONN *conn;
- long retval;
- zval **arg1, **arg2;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &arg1, &arg2) == FAILURE)
- WRONG_PARAM_COUNT;
-
- ZEND_FETCH_RESOURCE(conn, MCVE_CONN *, arg1, -1, "mcve connection", le_conn);
-
- convert_to_long_ex(arg2);
-
- retval = MCVE_ParseCommaDelimited(conn, Z_LVAL_PP(arg2));
-
- RETURN_LONG(retval);
-}
-/* }}} */
-
-/* {{{ proto string m_getcommadelimited(resource conn, int identifier)
- Get the RAW comma delimited data returned from MCVE */
-PHP_FUNCTION(m_getcommadelimited)
-{
- MCVE_CONN *conn;
- char *retval;
- zval **arg1, **arg2;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &arg1, &arg2) == FAILURE)
- WRONG_PARAM_COUNT;
-
- ZEND_FETCH_RESOURCE(conn, MCVE_CONN *, arg1, -1, "mcve connection", le_conn);
-
- convert_to_long_ex(arg2);
-
- retval = MCVE_GetCommaDelimited(conn, Z_LVAL_PP(arg2));
-
- RETURN_STRING(retval, 1);
-}
-/* }}} */
-
-/* {{{ proto string m_getheader(resource conn, int identifier, int column_num)
- Get the name of the column in a comma-delimited response */
-PHP_FUNCTION(m_getheader)
-{
- MCVE_CONN *conn;
- char *retval;
- zval **arg1, **arg2, **arg3;
-
- if (ZEND_NUM_ARGS() != 3 || zend_get_parameters_ex(3, &arg1, &arg2, &arg3) == FAILURE)
- WRONG_PARAM_COUNT;
-
- ZEND_FETCH_RESOURCE(conn, MCVE_CONN *, arg1, -1, "mcve connection", le_conn);
-
- convert_to_long_ex(arg2);
- convert_to_long_ex(arg3);
-
- retval = MCVE_GetHeader(conn, Z_LVAL_PP(arg2), Z_LVAL_PP(arg3));
-
- RETURN_STRING(retval, 1);
-}
-/* }}} */
-
-/* {{{ proto void m_destroyengine(void)
- Free memory associated with IP/SSL connectivity */
-PHP_FUNCTION(m_destroyengine)
-{
- MCVE_DestroyEngine();
- mcve_init = 0;
-}
-/* }}} */
-
-/* {{{ proto int m_chngpwd(resource conn, string admin_password, string new_password)
- Change the system administrator's password */
-PHP_FUNCTION(m_chngpwd)
-{
- MCVE_CONN *conn;
- long retval;
- zval **arg1, **arg2, **arg3;
-
- if (ZEND_NUM_ARGS() != 3 || zend_get_parameters_ex(3, &arg1, &arg2, &arg3) == FAILURE)
- WRONG_PARAM_COUNT;
-
- ZEND_FETCH_RESOURCE(conn, MCVE_CONN *, arg1, -1, "mcve connection", le_conn);
-
- convert_to_string_ex(arg2);
- convert_to_string_ex(arg3);
-
- retval = MCVE_Chngpwd(conn, Z_STRVAL_PP(arg2), Z_STRVAL_PP(arg3));
-
- RETURN_LONG(retval);
-}
-/* }}} */
-
-/* {{{ proto int m_listusers(resource conn, string admin_password)
- List all users on MCVE system */
-PHP_FUNCTION(m_listusers)
-{
- MCVE_CONN *conn;
- long retval;
- zval **arg1, **arg2;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &arg1, &arg2) == FAILURE)
- WRONG_PARAM_COUNT;
-
- ZEND_FETCH_RESOURCE(conn, MCVE_CONN *, arg1, -1, "mcve connection", le_conn);
-
- convert_to_string_ex(arg2);
-
- retval = MCVE_ListUsers(conn, Z_STRVAL_PP(arg2));
-
- RETURN_LONG(retval);
-}
-/* }}} */
-
-/* {{{ proto int m_enableuser(resource conn, string admin_password, string username)
- Enable an inactive MCVE user account */
-PHP_FUNCTION(m_enableuser)
-{
- MCVE_CONN *conn;
- long retval;
- zval **arg1, **arg2, **arg3;
-
- if (ZEND_NUM_ARGS() != 3 || zend_get_parameters_ex(3, &arg1, &arg2, &arg3) == FAILURE)
- WRONG_PARAM_COUNT;
-
- ZEND_FETCH_RESOURCE(conn, MCVE_CONN *, arg1, -1, "mcve connection", le_conn);
-
- convert_to_string_ex(arg2);
- convert_to_string_ex(arg3);
-
- retval = MCVE_EnableUser(conn, Z_STRVAL_PP(arg2), Z_STRVAL_PP(arg3));
-
- RETURN_LONG(retval);
-}
-/* }}} */
-
-/* {{{ proto int m_disableuser(resource conn, string admin_password, string username)
- Disable an active MCVE user account */
-PHP_FUNCTION(m_disableuser)
-{
- MCVE_CONN *conn;
- long retval;
- zval **arg1, **arg2, **arg3;
-
- if (ZEND_NUM_ARGS() != 3 || zend_get_parameters_ex(3, &arg1, &arg2, &arg3) == FAILURE)
- WRONG_PARAM_COUNT;
-
- ZEND_FETCH_RESOURCE(conn, MCVE_CONN *, arg1, -1, "mcve connection", le_conn);
-
- convert_to_string_ex(arg2);
- convert_to_string_ex(arg3);
-
- retval = MCVE_DisableUser(conn, Z_STRVAL_PP(arg2), Z_STRVAL_PP(arg3));
-
- RETURN_LONG(retval);
-}
-/* }}} */
-
-/* {{{ proto int m_deluser(resource conn, string admin_password, string username)
- Delete an MCVE user account */
-PHP_FUNCTION(m_deluser)
-{
- MCVE_CONN *conn;
- long retval;
- zval **arg1, **arg2, **arg3;
-
- if (ZEND_NUM_ARGS() != 3 || zend_get_parameters_ex(3, &arg1, &arg2, &arg3) == FAILURE)
- WRONG_PARAM_COUNT;
-
- ZEND_FETCH_RESOURCE(conn, MCVE_CONN *, arg1, -1, "mcve connection", le_conn);
-
- convert_to_string_ex(arg2);
- convert_to_string_ex(arg3);
-
- retval = MCVE_DelUser(conn, Z_STRVAL_PP(arg2), Z_STRVAL_PP(arg3));
-
- RETURN_LONG(retval);
-}
-/* }}} */
-
-/* {{{ proto int m_liststats(resource conn, string admin_password)
- List statistics for all users on MCVE system */
-PHP_FUNCTION(m_liststats)
-{
- MCVE_CONN *conn;
- long retval;
- zval **arg1, **arg2;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &arg1, &arg2) == FAILURE)
- WRONG_PARAM_COUNT;
-
- ZEND_FETCH_RESOURCE(conn, MCVE_CONN *, arg1, -1, "mcve connection", le_conn);
-
- convert_to_string_ex(arg2);
-
- retval = MCVE_ListStats(conn, Z_STRVAL_PP(arg2));
-
- RETURN_LONG(retval);
-}
-/* }}} */
-
-/* {{{ proto resource m_initusersetup(void)
- Initialize structure to store user data */
-PHP_FUNCTION(m_initusersetup)
-{
- MCVE_UserSetup *usersetup;
-
- usersetup = emalloc(sizeof(MCVE_UserSetup));
-
- MCVE_InitUserSetup(usersetup);
-
- ZEND_REGISTER_RESOURCE(return_value, usersetup, le_user);
-}
-/* }}} */
-
-/* {{{ proto void m_deleteusersetup(resource usersetup)
- Deallocate data associated with usersetup structure */
-PHP_FUNCTION(m_deleteusersetup)
-{
- MCVE_UserSetup *usersetup;
- zval **arg;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg) == FAILURE)
- WRONG_PARAM_COUNT;
-
- ZEND_FETCH_RESOURCE(usersetup, MCVE_UserSetup *, arg, -1, "mcve user setup", le_user);
-
- MCVE_DeleteUserSetup(usersetup);
- efree(usersetup);
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto int m_adduserarg(resource usersetup, int argtype, string argval)
- Add a value to user configuration structure */
-PHP_FUNCTION(m_adduserarg)
-{
- MCVE_UserSetup *usersetup;
- long retval;
- zval **arg1, **arg2, **arg3;
-
- if (ZEND_NUM_ARGS() != 3 || zend_get_parameters_ex(3, &arg1, &arg2, &arg3) == FAILURE)
- WRONG_PARAM_COUNT;
-
- ZEND_FETCH_RESOURCE(usersetup, MCVE_UserSetup *, arg1, -1, "mcve user setup", le_user);
-
- convert_to_long_ex(arg2);
- convert_to_string_ex(arg3);
-
- retval = MCVE_AddUserArg(usersetup, Z_LVAL_PP(arg2), Z_STRVAL_PP(arg3));
-
- RETURN_LONG(retval);
-}
-/* }}} */
-
-/* {{{ proto string m_getuserarg(resource usersetup, int argtype)
- Grab a value from usersetup structure */
-PHP_FUNCTION(m_getuserarg)
-{
- MCVE_UserSetup *usersetup;
- char *retval;
- zval **arg1, **arg2;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &arg1, &arg2) == FAILURE)
- WRONG_PARAM_COUNT;
-
- ZEND_FETCH_RESOURCE(usersetup, MCVE_UserSetup *, arg1, -1, "mcve user setup", le_user);
-
- convert_to_long_ex(arg2);
-
- retval = MCVE_GetUserArg(usersetup, Z_LVAL_PP(arg2));
-
- RETURN_STRING(retval, 1);
-}
-/* }}} */
-
-/* {{{ proto int m_adduser(resource conn, string admin_password, int usersetup)
- Add an MCVE user using usersetup structure */
-PHP_FUNCTION(m_adduser)
-{
- MCVE_CONN *conn;
- MCVE_UserSetup *usersetup;
- long retval;
- zval **arg1, **arg2, **arg3;
-
- if (ZEND_NUM_ARGS() != 3 || zend_get_parameters_ex(3, &arg1, &arg2, &arg3) == FAILURE)
- WRONG_PARAM_COUNT;
-
- ZEND_FETCH_RESOURCE(conn, MCVE_CONN *, arg1, -1, "mcve connection", le_conn);
- ZEND_FETCH_RESOURCE(usersetup, MCVE_UserSetup *, arg3, -1, "mcve user setup", le_user);
-
- convert_to_string_ex(arg2);
-
- retval = MCVE_AddUser(conn, Z_STRVAL_PP(arg2), usersetup);
-
- RETURN_LONG(retval);
-}
-/* }}} */
-
-/* {{{ proto int m_edituser(resource conn, string admin_password, int usersetup)
- Edit MCVE user using usersetup structure */
-PHP_FUNCTION(m_edituser)
-{
- MCVE_CONN *conn;
- MCVE_UserSetup *usersetup;
- long retval;
- zval **arg1, **arg2, **arg3;
-
- if (ZEND_NUM_ARGS() != 3 || zend_get_parameters_ex(3, &arg1, &arg2, &arg3) == FAILURE)
- WRONG_PARAM_COUNT;
-
- ZEND_FETCH_RESOURCE(conn, MCVE_CONN *, arg1, -1, "mcve connection", le_conn);
- ZEND_FETCH_RESOURCE(usersetup, MCVE_UserSetup *, arg3, -1, "mcve user setup", le_user);
-
- convert_to_string_ex(arg2);
-
- retval = MCVE_EditUser(conn, Z_STRVAL_PP(arg2), usersetup);
-
- RETURN_LONG(retval);
-}
-/* }}} */
-
-
-/* {{{ proto int m_uwait(long microsecs)
- Wait x microsecs */
-PHP_FUNCTION(m_uwait)
-{
- long retval;
- zval **arg;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg) == FAILURE)
- WRONG_PARAM_COUNT;
-
- convert_to_long_ex(arg);
-
- retval = MCVE_uwait(Z_LVAL_PP(arg));
-
- RETURN_LONG(retval);
-}
-/* }}} */
-
-/* {{{ proto string m_text_code(string code)
- Get a textual representation of the return_code */
-PHP_FUNCTION(m_text_code)
-{
- char *retval;
- zval **arg;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg) == FAILURE)
- WRONG_PARAM_COUNT;
-
- convert_to_long_ex(arg);
-
- retval = MCVE_TEXT_Code(Z_LVAL_PP(arg));
-
- if (retval == NULL) {
- RETVAL_STRING("",1);
- } else {
- RETVAL_STRING(retval, 1);
- }
-}
-/* }}} */
-
-/* {{{ proto string m_text_avs(string code)
- Get a textual representation of the return_avs */
-PHP_FUNCTION(m_text_avs)
-{
- char *retval;
- zval **arg;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg) == FAILURE)
- WRONG_PARAM_COUNT;
-
- convert_to_long_ex(arg);
-
- retval = MCVE_TEXT_AVS(Z_LVAL_PP(arg));
-
- if (retval == NULL) {
- RETVAL_STRING("",1);
- } else {
- RETVAL_STRING(retval, 1);
- }
-}
-/* }}} */
-
-/* {{{ proto string m_text_cv(int code)
- Get a textual representation of the return_cv */
-PHP_FUNCTION(m_text_cv)
-{
- char *retval;
- zval **arg;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg) == FAILURE)
- WRONG_PARAM_COUNT;
-
- convert_to_long_ex(arg);
-
- retval = MCVE_TEXT_CV(Z_LVAL_PP(arg));
-
- if (retval == NULL) {
- RETVAL_STRING("",1);
- } else {
- RETVAL_STRING(retval, 1);
- }
-}
-/* }}} */
-
-/* Map new funnction names to old function names for compatability */
-M_map_function(m_initengine, mcve_initengine)
-M_map_function(m_initconn, mcve_initconn)
-M_map_function(m_deleteresponse, mcve_deleteresponse)
-M_map_function(m_destroyconn, mcve_destroyconn)
-M_map_function(m_setdropfile, mcve_setdropfile)
-M_map_function(m_setip, mcve_setip)
-M_map_function(m_setssl, mcve_setssl)
-M_map_function(m_setssl_files, mcve_setssl_files)
-M_map_function(m_settimeout, mcve_settimeout)
-M_map_function(m_setblocking, mcve_setblocking)
-M_map_function(m_verifyconnection, mcve_verifyconnection)
-M_map_function(m_verifysslcert, mcve_verifysslcert)
-M_map_function(m_maxconntimeout, mcve_maxconntimeout)
-M_map_function(m_connectionerror, mcve_connectionerror)
-M_map_function(m_deletetrans, mcve_deletetrans)
-M_map_function(m_connect, mcve_connect)
-M_map_function(m_transnew, mcve_transnew)
-M_map_function(m_transparam, mcve_transparam)
-M_map_function(m_transsend, mcve_transsend)
-M_map_function(m_ping, mcve_ping)
-M_map_function(m_responseparam, mcve_responseparam)
-M_map_function(m_returnstatus, mcve_returnstatus)
-M_map_function(m_returncode, mcve_returncode)
-M_map_function(m_transactionssent, mcve_transactionssent)
-M_map_function(m_transactionitem, mcve_transactionitem)
-M_map_function(m_transactionbatch, mcve_transactionbatch)
-M_map_function(m_transactionid, mcve_transactionid)
-M_map_function(m_transactionauth, mcve_transactionauth)
-M_map_function(m_transactiontext, mcve_transactiontext)
-M_map_function(m_transactionavs, mcve_transactionavs)
-M_map_function(m_transactioncv, mcve_transactioncv)
-M_map_function(m_getuserparam, mcve_getuserparam)
-M_map_function(m_monitor, mcve_monitor)
-M_map_function(m_transinqueue, mcve_transinqueue)
-M_map_function(m_checkstatus, mcve_checkstatus)
-M_map_function(m_completeauthorizations, mcve_completeauthorizations)
-M_map_function(m_sale, mcve_sale)
-M_map_function(m_preauth, mcve_preauth)
-M_map_function(m_void, mcve_void)
-M_map_function(m_preauthcompletion, mcve_preauthcompletion)
-M_map_function(m_force, mcve_force)
-M_map_function(m_override, mcve_override)
-M_map_function(m_return, mcve_return)
-M_map_function(m_iscommadelimited, mcve_iscommadelimited)
-M_map_function(m_parsecommadelimited, mcve_parsecommadelimited)
-M_map_function(m_getcommadelimited, mcve_getcommadelimited)
-M_map_function(m_getcell, mcve_getcell)
-M_map_function(m_getcellbynum, mcve_getcellbynum)
-M_map_function(m_numcolumns, mcve_numcolumns)
-M_map_function(m_numrows, mcve_numrows)
-M_map_function(m_getheader, mcve_getheader)
-M_map_function(m_destroyengine, mcve_destroyengine)
-M_map_function(m_settle, mcve_settle)
-M_map_function(m_gut, mcve_gut)
-M_map_function(m_gl, mcve_gl)
-M_map_function(m_gft, mcve_gft)
-M_map_function(m_qc, mcve_qc)
-M_map_function(m_ub, mcve_ub)
-M_map_function(m_chkpwd, mcve_chkpwd)
-M_map_function(m_bt, mcve_bt)
-M_map_function(m_uwait, mcve_uwait)
-M_map_function(m_text_code, mcve_text_code)
-M_map_function(m_text_avs, mcve_text_avs)
-M_map_function(m_text_cv, mcve_text_cv)
-M_map_function(m_chngpwd, mcve_chngpwd)
-M_map_function(m_listusers, mcve_listusers)
-M_map_function(m_adduser, mcve_adduser)
-M_map_function(m_enableuser, mcve_enableuser)
-M_map_function(m_disableuser, mcve_disableuser)
-M_map_function(m_getuserarg, mcve_getuserarg)
-M_map_function(m_adduserarg, mcve_adduserarg)
-M_map_function(m_deleteusersetup, mcve_deleteusersetup)
-M_map_function(m_initusersetup, mcve_initusersetup)
-M_map_function(m_deluser, mcve_deluser)
-M_map_function(m_edituser, mcve_edituser)
-M_map_function(m_liststats, mcve_liststats)
-
-#endif
-
-/* END OF MCVE PHP EXTENSION */
-
-/*
- * 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/mcve/mcve.dsp b/ext/mcve/mcve.dsp
deleted file mode 100644
index f170d83c83..0000000000
--- a/ext/mcve/mcve.dsp
+++ /dev/null
@@ -1,107 +0,0 @@
-# Microsoft Developer Studio Project File - Name="mcve" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=mcve - Win32 Debug_TS
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "mcve.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "mcve.mak" CFG="mcve - Win32 Debug_TS"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "mcve - Win32 Release_TS" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "mcve - Win32 Debug_TS" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "mcve - Win32 Release_TS"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release_TS"
-# PROP BASE Intermediate_Dir "Release_TS"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release_TS"
-# PROP Intermediate_Dir "Release_TS"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MD /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "MCVE_EXPORTS" /YX /FD /c
-# ADD CPP /nologo /MD /W3 /GX /O2 /I "..\.." /I "..\..\main" /I "..\..\Zend" /I "..\..\TSRM" /D ZEND_DEBUG=0 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "COMPILE_DL_MCVE" /D ZTS=1 /D "ZEND_WIN32" /D "PHP_WIN32" /D HAVE_MCVE=1 /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x407 /d "NDEBUG"
-# ADD RSC /l 0x407 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386
-# ADD LINK32 php5ts.lib libmcve.lib ssleay32.lib libeay32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 /out:"..\..\Release_TS/php_mcve.dll" /libpath:"..\..\Release_TS" /libpath:"..\..\Release_TS_Inline"
-
-!ELSEIF "$(CFG)" == "mcve - Win32 Debug_TS"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug_TS"
-# PROP BASE Intermediate_Dir "Debug_TS"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug_TS"
-# PROP Intermediate_Dir "Debug_TS"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "mcve_EXPORTS" /YX /FD /GZ /c
-# ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "..\.." /I "..\..\main" /I "..\..\Zend" /I "..\..\TSRM" /D ZEND_DEBUG=1 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "COMPILE_DL_MCVE" /D ZTS=1 /D "ZEND_WIN32" /D "PHP_WIN32" /D HAVE_MCVE=1 /YX /FD /GZ /c
-# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x407 /d "_DEBUG"
-# ADD RSC /l 0x407 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 php5ts_debug.lib libmcve.lib ssleay32.lib libeay32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /out:"..\..\Debug_TS/php_mcve.dll" /pdbtype:sept /libpath:"..\..\Debug_TS"
-
-!ENDIF
-
-# Begin Target
-
-# Name "mcve - Win32 Release_TS"
-# Name "mcve - Win32 Debug_TS"
-# Begin Group "Source Files"
-
-# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
-# Begin Source File
-
-SOURCE=.\mcve.c
-# End Source File
-# End Group
-# Begin Group "Header Files"
-
-# PROP Default_Filter "h;hpp;hxx;hm;inl"
-# Begin Source File
-
-SOURCE=.\php_mcve.h
-# End Source File
-# End Group
-# End Target
-# End Project
diff --git a/ext/mcve/mcve.php b/ext/mcve/mcve.php
deleted file mode 100644
index f749220b32..0000000000
--- a/ext/mcve/mcve.php
+++ /dev/null
@@ -1,12 +0,0 @@
-<?
-$module = 'MCVE';
-if(!extension_loaded($module)) {
- dl('mcve.so');
-}
-$functions = get_extension_funcs($module);
-echo "Functions available in the $module extension:<br>\n";
-foreach($functions as $func) {
- echo $func."<br>\n";
-}
-echo "<br>\n";
-?>
diff --git a/ext/mcve/mcve_simple_test.php b/ext/mcve/mcve_simple_test.php
deleted file mode 100644
index 3a1c4f0601..0000000000
--- a/ext/mcve/mcve_simple_test.php
+++ /dev/null
@@ -1,19 +0,0 @@
-<?php
-
- MCVE_InitEngine(NULL);
- $conn=MCVE_InitConn();
- if (MCVE_SetIP($conn, "testbox.mcve.com", 8333)) {
- echo "Set connection Properly";
- } else {
- echo "Failed Setting method";
- exit();
- }
- if (!MCVE_Connect($conn)) {
- echo "<BR>Could not connect<BR>";
- } else {
- echo "<BR>Connection Established<BR>";
- }
- MCVE_DestroyConn($conn);
- MCVE_DestroyEngine();
-
-?>
diff --git a/ext/mcve/mcve_test1.php b/ext/mcve/mcve_test1.php
deleted file mode 100644
index a4f7dba8d6..0000000000
--- a/ext/mcve/mcve_test1.php
+++ /dev/null
@@ -1,83 +0,0 @@
-<HTML>
-<BODY>
-<?php
-
-// MCVE Config stuff
-$username="vitale";
-$password="test";
-// 1:IP or 2:SSL
-$method=2;
-$host="testbox.mcve.com";
-$port=8444; //8444 is typically SSL and 8333 is standard
-// End config stuff
-
-
-if (!$account)
- $account="4012888888881";
-if (!$exp)
- $exp="0512";
-if (!$amount)
- $amount=12.00;
-
-function flush_buffer()
-{
- for ($i=0; $i<2048; $i++) {
- echo " ";
- }
- flush();
-}
-
-
-dl("./php_mcve.so");
-
- echo "Initializing MCVE<BR>";
- flush_buffer();
- mcve_initengine("./CAfile.pem");
- $conn=mcve_initconn();
- if ($method == 1)
- $ret=mcve_setip($conn, $host, $port);
- else if ($method == 2)
- $ret=mcve_setssl($conn, $host, $port);
-
- if (!$ret) {
- echo "Could not set method<BR>";
- exit(1);
- }
- echo "Connection method and location set<BR>";
- flush_buffer();
- if (!mcve_connect($conn)) {
- echo "Connection Failed<BR>";
- exit(1);
- }
- echo "Connection Established<BR>";
- flush_buffer();
- $identifier=mcve_sale($conn, $username, $password, NULL, $account, $exp,
- $amount, NULL, NULL, NULL, NULL, NULL, NULL, 001);
- echo "Transaction Sent: CC: $account EXP: $exp AMOUNT: $amount<BR>";
- flush_buffer();
- while (mcve_checkstatus($conn, $identifier) != MCVE_DONE) {
- mcve_monitor($conn);
- }
- echo "Transaction Complete<BR>";
- flush_buffer();
- $status=mcve_returnstatus($conn, $identifier);
- if ($status == MCVE_SUCCESS) {
- $text=mcve_transactiontext($conn, $identifier);
- $auth=mcve_transactionauth($conn, $identifier);
- echo "Transaction Authorized<BR>";
- echo "Auth: $auth<BR>";
- echo "Text: $text<BR>";
- } else if ($status == MCVE_FAIL) {
- $text=mcve_transactiontext($conn, $identifier);
- echo "Transaction Denied<BR>";
- echo "Text: $text<BR>";
- } else
- echo "Transaction error<BR>";
- flush_buffer();
- mcve_destroyconn($conn);
- mcve_destroyengine();
-
-?>
-</BODY>
-</HTML>
-
diff --git a/ext/mcve/mcve_test2.php b/ext/mcve/mcve_test2.php
deleted file mode 100644
index 4cb251b538..0000000000
--- a/ext/mcve/mcve_test2.php
+++ /dev/null
@@ -1,68 +0,0 @@
-<?
- #
- # $Id$
- #
-
-$connect_type = "IP";
-
-dl("php_mcve.so");
-
-$conn = MCVE_InitConn();
-print "MCVE_InitConn() returned $conn<br>\n";
-
-if ($connect_type == "IP") {
- MCVE_SetIP($conn, "localhost", 8333) or
- die("MCVE_SetIP() failed");
- print "MCVE_SetIP() successful<br>\n";
-} else {
- MCVE_SetDropFile($conn, "/var/mcve/trans") or
- die("MCVE_SetDropFile() failed");
- print "MCVE_SetDropFile() successful<br>\n";
-}
-
-MCVE_Connect($conn) or
- die("MCVE_Connect() failed");
-print "MCVE_Connect() successful<br>\n";
-
-# send a request
-$ident = MCVE_Sale($conn, "test", "test", NULL, "5454545454545454",
- "1205", 11.00, NULL, NULL, NULL, NULL, "me", NULL, 54321);
-if ($ident == -1)
- die("MCVE_Sale() failed");
-else
- print "Identifier: $ident<br>\n";
-
-$ident = MCVE_Sale($conn, "test", "test", NULL, "5454545454545454",
- "1205", 12.00, NULL, NULL, NULL, NULL, "me", NULL, 54321);
-if ($ident == -1)
- die("MCVE_Sale() failed");
-else
- print "Identifier: $ident<br>\n";
-
-$pending = 0;
-$complete = -1;
-while ($pending != $complete) {
- sleep(2);
-
- MCVE_Monitor($conn);
-
- $pending = MCVE_TransInQueue($conn);
- print "Transactions pending: $pending<br>\n";
-
- $complete = MCVE_CompleteAuthorizations($conn, &$list);
- print "Authorizations complete: $complete<br>\n";
-
- flush();
-}
-
-for ($i = 0; $i < $complete; $i++) {
- $status = MCVE_CheckStatus($conn, $i);
- print "Transaction #" . $list[$i] . " complete: $status<br>\n";
-}
-
-MCVE_DestroyConn($conn);
-print "MCVE_DestroyConn() completed<br>\n";
-
-#phpinfo();
-
-?>
diff --git a/ext/mcve/php_mcve.h b/ext/mcve/php_mcve.h
deleted file mode 100644
index 4abe231779..0000000000
--- a/ext/mcve/php_mcve.h
+++ /dev/null
@@ -1,206 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP version 4.0 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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. |
- +----------------------------------------------------------------------+
- | Authors: Brad House <brad@mainstreetsoftworks.com> |
- | Chris Faulhaber <jedgar@fxp.org> |
- +----------------------------------------------------------------------+
-*/
-/* $Id$ */
-
-#ifndef _PHP_MCVE_H
-#define _PHP_MCVE_H
-
-extern zend_module_entry mcve_module_entry;
-
-#define mcve_module_ptr &mcve_module_entry
-#define phpext_mcve_ptr mcve_module_ptr
-
-#define PHP_MCVE_VERSION "4.0"
-
-#define MCVE_CONST (CONST_CS | CONST_PERSISTENT)
-
-#define M_map_function(newname, oldname) \
- PHP_FUNCTION(oldname) { \
- PHP_FN(newname)(INTERNAL_FUNCTION_PARAM_PASSTHRU); \
- }
-
-PHP_MINIT_FUNCTION(mcve);
-PHP_MINFO_FUNCTION(mcve);
-
-PHP_FUNCTION(m_initengine);
-PHP_FUNCTION(m_initconn);
-PHP_FUNCTION(m_deleteresponse);
-PHP_FUNCTION(m_destroyconn);
-PHP_FUNCTION(m_setdropfile);
-PHP_FUNCTION(m_setip);
-PHP_FUNCTION(m_setssl);
-PHP_FUNCTION(m_setssl_files);
-PHP_FUNCTION(m_setblocking);
-PHP_FUNCTION(m_settimeout);
-PHP_FUNCTION(m_verifyconnection);
-PHP_FUNCTION(m_verifysslcert);
-PHP_FUNCTION(m_maxconntimeout);
-PHP_FUNCTION(m_connectionerror);
-PHP_FUNCTION(m_deletetrans);
-PHP_FUNCTION(m_connect);
-PHP_FUNCTION(m_transnew);
-PHP_FUNCTION(m_transparam);
-PHP_FUNCTION(m_transsend);
-PHP_FUNCTION(m_ping);
-PHP_FUNCTION(m_responseparam);
-PHP_FUNCTION(m_returnstatus);
-PHP_FUNCTION(m_returncode);
-PHP_FUNCTION(m_transactionssent);
-PHP_FUNCTION(m_transactionitem);
-PHP_FUNCTION(m_transactionbatch);
-PHP_FUNCTION(m_transactionid);
-PHP_FUNCTION(m_transactionauth);
-PHP_FUNCTION(m_transactionavs);
-PHP_FUNCTION(m_transactioncv);
-PHP_FUNCTION(m_transactiontext);
-PHP_FUNCTION(m_getuserparam);
-PHP_FUNCTION(m_monitor);
-PHP_FUNCTION(m_transinqueue);
-PHP_FUNCTION(m_checkstatus);
-PHP_FUNCTION(m_completeauthorizations);
-PHP_FUNCTION(m_sale);
-PHP_FUNCTION(m_preauth);
-PHP_FUNCTION(m_override);
-PHP_FUNCTION(m_void);
-PHP_FUNCTION(m_preauthcompletion);
-PHP_FUNCTION(m_force);
-PHP_FUNCTION(m_return);
-PHP_FUNCTION(m_iscommadelimited);
-PHP_FUNCTION(m_parsecommadelimited);
-PHP_FUNCTION(m_getcommadelimited);
-PHP_FUNCTION(m_getcell);
-PHP_FUNCTION(m_getcellbynum);
-PHP_FUNCTION(m_numcolumns);
-PHP_FUNCTION(m_numrows);
-PHP_FUNCTION(m_getheader);
-PHP_FUNCTION(m_destroyengine);
-PHP_FUNCTION(m_settle);
-PHP_FUNCTION(m_qc);
-PHP_FUNCTION(m_gut);
-PHP_FUNCTION(m_gft);
-PHP_FUNCTION(m_ub);
-PHP_FUNCTION(m_gl);
-PHP_FUNCTION(m_chkpwd);
-PHP_FUNCTION(m_bt);
-PHP_FUNCTION(m_uwait);
-PHP_FUNCTION(m_text_code);
-PHP_FUNCTION(m_text_avs);
-PHP_FUNCTION(m_text_cv);
-PHP_FUNCTION(m_chngpwd);
-PHP_FUNCTION(m_listusers);
-PHP_FUNCTION(m_adduser);
-PHP_FUNCTION(m_enableuser);
-PHP_FUNCTION(m_disableuser);
-PHP_FUNCTION(m_getuserarg);
-PHP_FUNCTION(m_adduserarg);
-PHP_FUNCTION(m_deleteusersetup);
-PHP_FUNCTION(m_initusersetup);
-PHP_FUNCTION(m_deluser);
-PHP_FUNCTION(m_edituser);
-PHP_FUNCTION(m_liststats);
-
-/* prototypes for compatability functions */
-PHP_FUNCTION(mcve_initengine);
-PHP_FUNCTION(mcve_initconn);
-PHP_FUNCTION(mcve_deleteresponse);
-PHP_FUNCTION(mcve_destroyconn);
-PHP_FUNCTION(mcve_setdropfile);
-PHP_FUNCTION(mcve_setip);
-PHP_FUNCTION(mcve_setssl);
-PHP_FUNCTION(mcve_setssl_files);
-PHP_FUNCTION(mcve_setblocking);
-PHP_FUNCTION(mcve_settimeout);
-PHP_FUNCTION(mcve_verifyconnection);
-PHP_FUNCTION(mcve_verifysslcert);
-PHP_FUNCTION(mcve_maxconntimeout);
-PHP_FUNCTION(mcve_connectionerror);
-PHP_FUNCTION(mcve_deletetrans);
-PHP_FUNCTION(mcve_connect);
-PHP_FUNCTION(mcve_transnew);
-PHP_FUNCTION(mcve_transparam);
-PHP_FUNCTION(mcve_transsend);
-PHP_FUNCTION(mcve_ping);
-PHP_FUNCTION(mcve_responseparam);
-PHP_FUNCTION(mcve_returnstatus);
-PHP_FUNCTION(mcve_returncode);
-PHP_FUNCTION(mcve_transactionssent);
-PHP_FUNCTION(mcve_transactionitem);
-PHP_FUNCTION(mcve_transactionbatch);
-PHP_FUNCTION(mcve_transactionid);
-PHP_FUNCTION(mcve_transactionauth);
-PHP_FUNCTION(mcve_transactionavs);
-PHP_FUNCTION(mcve_transactioncv);
-PHP_FUNCTION(mcve_transactiontext);
-PHP_FUNCTION(mcve_getuserparam);
-PHP_FUNCTION(mcve_monitor);
-PHP_FUNCTION(mcve_transinqueue);
-PHP_FUNCTION(mcve_checkstatus);
-PHP_FUNCTION(mcve_completeauthorizations);
-PHP_FUNCTION(mcve_sale);
-PHP_FUNCTION(mcve_preauth);
-PHP_FUNCTION(mcve_override);
-PHP_FUNCTION(mcve_void);
-PHP_FUNCTION(mcve_preauthcompletion);
-PHP_FUNCTION(mcve_force);
-PHP_FUNCTION(mcve_return);
-PHP_FUNCTION(mcve_iscommadelimited);
-PHP_FUNCTION(mcve_parsecommadelimited);
-PHP_FUNCTION(mcve_getcommadelimited);
-PHP_FUNCTION(mcve_getcell);
-PHP_FUNCTION(mcve_getcellbynum);
-PHP_FUNCTION(mcve_numcolumns);
-PHP_FUNCTION(mcve_numrows);
-PHP_FUNCTION(mcve_getheader);
-PHP_FUNCTION(mcve_destroyengine);
-PHP_FUNCTION(mcve_settle);
-PHP_FUNCTION(mcve_qc);
-PHP_FUNCTION(mcve_gut);
-PHP_FUNCTION(mcve_gft);
-PHP_FUNCTION(mcve_ub);
-PHP_FUNCTION(mcve_gl);
-PHP_FUNCTION(mcve_chkpwd);
-PHP_FUNCTION(mcve_bt);
-PHP_FUNCTION(mcve_uwait);
-PHP_FUNCTION(mcve_text_code);
-PHP_FUNCTION(mcve_text_avs);
-PHP_FUNCTION(mcve_text_cv);
-PHP_FUNCTION(mcve_chngpwd);
-PHP_FUNCTION(mcve_listusers);
-PHP_FUNCTION(mcve_adduser);
-PHP_FUNCTION(mcve_enableuser);
-PHP_FUNCTION(mcve_disableuser);
-PHP_FUNCTION(mcve_getuserarg);
-PHP_FUNCTION(mcve_adduserarg);
-PHP_FUNCTION(mcve_deleteusersetup);
-PHP_FUNCTION(mcve_initusersetup);
-PHP_FUNCTION(mcve_deluser);
-PHP_FUNCTION(mcve_edituser);
-PHP_FUNCTION(mcve_liststats);
-
-
-#endif /* _PHP_MCVE_H */
-
-/*
- * 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/mcve/tests/001.phpt b/ext/mcve/tests/001.phpt
deleted file mode 100644
index 495db16765..0000000000
--- a/ext/mcve/tests/001.phpt
+++ /dev/null
@@ -1,21 +0,0 @@
---TEST--
-Check for mcve presence
---SKIPIF--
-<?php if (!extension_loaded("mcve")) print "skip"; ?>
---FILE--
-<?php
-echo "mcve extension is available";
-/*
- you can add regression tests for your extension here
-
- the output of your test code has to be equal to the
- text in the --EXPECT-- section below for the tests
- to pass, differences between the output and the
- expected text are interpreted as failure
-
- see php5/tests/README for further information on
- writing regression tests
-*/
-?>
---EXPECT--
-mcve extension is available
diff --git a/ext/mhash/CREDITS b/ext/mhash/CREDITS
deleted file mode 100644
index 54851e1ac7..0000000000
--- a/ext/mhash/CREDITS
+++ /dev/null
@@ -1,2 +0,0 @@
-mhash
-Sascha Schumann
diff --git a/ext/mhash/config.m4 b/ext/mhash/config.m4
deleted file mode 100644
index 6b93decbcb..0000000000
--- a/ext/mhash/config.m4
+++ /dev/null
@@ -1,23 +0,0 @@
-dnl
-dnl $Id$
-dnl
-
-PHP_ARG_WITH(mhash, for mhash support,
-[ --with-mhash[=DIR] Include mhash support.])
-
-if test "$PHP_MHASH" != "no"; then
- for i in $PHP_MHASH /usr/local /usr /opt/mhash; do
- test -f $i/include/mhash.h && MHASH_DIR=$i && break
- done
-
- if test -z "$MHASH_DIR"; then
- AC_MSG_ERROR(Please reinstall libmhash - I cannot find mhash.h)
- fi
-
- PHP_ADD_INCLUDE($MHASH_DIR/include)
- PHP_ADD_LIBRARY_WITH_PATH(mhash, $MHASH_DIR/lib, MHASH_SHARED_LIBADD)
-
- PHP_NEW_EXTENSION(mhash, mhash.c, $ext_shared)
- PHP_SUBST(MHASH_SHARED_LIBADD)
- AC_DEFINE(HAVE_LIBMHASH,1,[ ])
-fi
diff --git a/ext/mhash/config.w32 b/ext/mhash/config.w32
deleted file mode 100644
index f3da3bb0b6..0000000000
--- a/ext/mhash/config.w32
+++ /dev/null
@@ -1,16 +0,0 @@
-// $Id$
-// vim:ft=javascript
-
-ARG_WITH("mhash", "mhash support", "no");
-
-if (PHP_MHASH != "no") {
-
- if (CHECK_HEADER_ADD_INCLUDE('mhash.h', 'CFLAGS_MHASH') &&
- CHECK_LIB('libmhash.lib', 'mhash')) {
- EXTENSION('mhash', 'mhash.c');
- AC_DEFINE('HAVE_LIBMHASH', 1);
- } else {
- WARNING("mhash not enabled; libraries and headers not found");
- }
-}
-
diff --git a/ext/mhash/mhash.c b/ext/mhash/mhash.c
deleted file mode 100644
index 58f1fb1740..0000000000
--- a/ext/mhash/mhash.c
+++ /dev/null
@@ -1,254 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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. |
- +----------------------------------------------------------------------+
- | Authors: Sascha Schumann <sascha@schumann.cx> |
- | Nikos Mavroyanopoulos <nmav@hellug.gr> (HMAC, KEYGEN) |
- +----------------------------------------------------------------------+
- */
-/* $Id$ */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "php.h"
-
-#if HAVE_LIBMHASH
-
-#include "fcntl.h"
-#include "php_mhash.h"
-#include "mhash.h"
-#include "php_ini.h"
-#include "php_globals.h"
-#include "ext/standard/info.h"
-
-function_entry mhash_functions[] = {
- PHP_FE(mhash_get_block_size, NULL)
- PHP_FE(mhash_get_hash_name, NULL)
- PHP_FE(mhash_keygen_s2k, NULL)
- PHP_FE(mhash_count, NULL)
- PHP_FE(mhash, NULL)
- {NULL, NULL, NULL}
-};
-
-zend_module_entry mhash_module_entry = {
- STANDARD_MODULE_HEADER,
- "mhash",
- mhash_functions,
- PHP_MINIT(mhash), NULL,
- NULL, NULL,
- PHP_MINFO(mhash),
- NO_VERSION_YET,
- STANDARD_MODULE_PROPERTIES,
-};
-
-#ifdef COMPILE_DL_MHASH
-ZEND_GET_MODULE(mhash)
-#endif
-
-/* SALTED S2K uses a fixed salt */
-#define SALT_SIZE 8
-
-PHP_MINIT_FUNCTION(mhash)
-{
- int i, n, l;
- char *name;
- char buf[128];
-
- n = mhash_count() + 1;
-
- for (i=0; i<n; i++) {
- if ((name = mhash_get_hash_name(i))) {
- l = snprintf(buf, 127, "MHASH_%s", name);
- zend_register_long_constant(buf, l + 1, i, CONST_PERSISTENT, module_number TSRMLS_CC);
- free(name);
- }
- }
-
- return SUCCESS;
-}
-
-PHP_MINFO_FUNCTION(mhash)
-{
- char version[32];
-
- sprintf(version,"%d", MHASH_API_VERSION);
-
- php_info_print_table_start();
- php_info_print_table_row(2, "MHASH support", "Enabled");
- php_info_print_table_row(2, "MHASH API Version", version);
- php_info_print_table_end();
-}
-
-/* {{{ proto int mhash_count(void)
- Gets the number of available hashes */
-PHP_FUNCTION(mhash_count)
-{
- if (ZEND_NUM_ARGS() != 0) {
- WRONG_PARAM_COUNT;
- }
-
- RETURN_LONG(mhash_count());
-}
-
-/* }}} */
-
-/* {{{ proto int mhash_get_block_size(int hash)
- Gets the block size of hash */
-PHP_FUNCTION(mhash_get_block_size)
-{
- long hash;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &hash) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- RETURN_LONG(mhash_get_block_size(hash));
-}
-
-/* }}} */
-
-/* {{{ proto string mhash_get_hash_name(int hash)
- Gets the name of hash */
-PHP_FUNCTION(mhash_get_hash_name)
-{
- char *name;
- long hash;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &hash) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- name = mhash_get_hash_name(hash);
- if (name) {
- RETVAL_STRING(name, 1);
- free(name);
- } else {
- RETVAL_FALSE;
- }
-}
-
-/* }}} */
-
-/* {{{ proto string mhash(int hash, string data [, string key])
- Hash data with hash */
-PHP_FUNCTION(mhash)
-{
- MHASH td;
- int bsize;
- unsigned char *hash_data;
- long hash;
- int data_len, key_len=0;
- char *data, *key=NULL;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ls|s", &hash, &data, &data_len, &key, &key_len) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- bsize = mhash_get_block_size(hash);
-
- if (key_len) {
- if (mhash_get_hash_pblock(hash) == 0) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "mhash initialization failed");
- RETURN_FALSE;
- }
- td = mhash_hmac_init(hash, key, key_len, mhash_get_hash_pblock(hash));
- } else {
- td = mhash_init(hash);
- }
-
- if (td == MHASH_FAILED) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "mhash initialization failed");
- RETURN_FALSE;
- }
-
- mhash(td, data, data_len);
-
- if (key_len) {
- hash_data = (unsigned char *) mhash_hmac_end(td);
- } else {
- hash_data = (unsigned char *) mhash_end(td);
- }
-
- if (hash_data) {
- RETVAL_STRINGL(hash_data, bsize, 1);
- mhash_free(hash_data);
- } else {
- RETURN_FALSE;
- }
-}
-
-/* }}} */
-
-/* {{{ proto string mhash_keygen_s2k(int hash, string input_password, string salt, int bytes)
- Generates a key using hash functions */
-PHP_FUNCTION(mhash_keygen_s2k)
-{
- KEYGEN keystruct;
- char salt[SALT_SIZE], *ret;
- long hash, bytes;
- char *password, *in_salt;
- int password_len, salt_len;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "lssl", &hash, &password, &password_len, &in_salt, &salt_len, &bytes) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- if (bytes <= 0){
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "the byte parameter must be greater then 0");
- RETURN_FALSE;
- }
-
- salt_len = MIN(salt_len, SALT_SIZE);
-
- if (salt_len > mhash_get_keygen_salt_size(KEYGEN_S2K_SALTED)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING,
- "The specified salt [%d] is more bytes than the required by the algorithm [%d]\n",
- salt_len, mhash_get_keygen_salt_size(KEYGEN_S2K_SALTED));
- }
-
- memcpy(salt, in_salt, salt_len);
- if (salt_len < SALT_SIZE) {
- memset(salt + salt_len, 0, SALT_SIZE - salt_len);
- }
- salt_len = SALT_SIZE;
-
- keystruct.hash_algorithm[0] = hash;
- keystruct.hash_algorithm[1] = hash;
- keystruct.count = 0;
- keystruct.salt = salt;
- keystruct.salt_size = salt_len;
-
- ret = emalloc(bytes + 1);
-
- if (mhash_keygen_ext(KEYGEN_S2K_SALTED, keystruct, ret, bytes, password, password_len) >= 0) {
- ret[bytes] = '\0';
- RETVAL_STRINGL(ret, bytes, 0);
- } else {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "mhash key generation failed");
- efree(ret);
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-#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/mhash/mhash.dsp b/ext/mhash/mhash.dsp
deleted file mode 100644
index 0fa0226288..0000000000
--- a/ext/mhash/mhash.dsp
+++ /dev/null
@@ -1,115 +0,0 @@
-# Microsoft Developer Studio Project File - Name="mhash" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=mhash - Win32 Release_TS
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "mhash.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "mhash.mak" CFG="mhash - Win32 Release_TS"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "mhash - Win32 Release_TS" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "mhash - Win32 Debug_TS" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "mhash - Win32 Release_TS"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release_TS"
-# PROP BASE Intermediate_Dir "Release_TS"
-# PROP BASE Ignore_Export_Lib 0
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "..\..\Release_TS"
-# PROP Intermediate_Dir "Release_TS"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MT /W3 /GX /O2 /I "..\.." /I "..\..\..\Zend" /I "..\..\..\TSRM" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "COMPILE_DL_MHASH" /D ZTS=1 /YX /FD /c
-# ADD CPP /nologo /MD /W3 /GX /O2 /I "..\.." /I "..\..\Zend" /I "..\..\TSRM" /I "..\..\main" /I "..\..\win32" /D "WIN32" /D "MHASH_EXPORTS" /D "COMPILE_DL_MHASH" /D HAVE_LIBMHASH=1 /D ZEND_DEBUG=0 /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "ZEND_WIN32" /D "PHP_WIN32" /D ZTS=1 /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x406 /d "NDEBUG"
-# ADD RSC /l 0x406 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib php5ts.lib /nologo /dll /machine:I386
-# ADD LINK32 php5ts.lib libmhash.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 /out:"..\..\Release_TS/php_mhash.dll" /libpath:"..\..\Release_TS" /libpath:"..\..\Release_TS_Inline"
-# SUBTRACT LINK32 /pdb:none
-
-!ELSEIF "$(CFG)" == "mhash - Win32 Debug_TS"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Debug_TS"
-# PROP BASE Intermediate_Dir "Debug_TS"
-# PROP BASE Ignore_Export_Lib 0
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "..\..\Debug_TS"
-# PROP Intermediate_Dir "Debug_TS"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MT /W3 /GX /O2 /I "..\.." /I "..\..\Zend" /I "..\..\TSRM" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "COMPILE_DL_MHASH" /D ZTS=1 /YX /FD /c
-# ADD CPP /nologo /MDd /W3 /GX /O2 /I "..\.." /I "..\..\Zend" /I "..\..\TSRM" /I "..\..\main" /I "..\..\win32" /D ZEND_DEBUG=1 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "MHASH_EXPORTS" /D "COMPILE_DL_MHASH" /D "ZEND_WIN32" /D "PHP_WIN32" /D HAVE_MHASH=1 /D ZTS=1 /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x406 /d "NDEBUG"
-# ADD RSC /l 0x406 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib php5ts_debug.lib /nologo /dll /machine:I386
-# ADD LINK32 php5ts_debug.lib libmhash.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 /out:"..\..\Debug_TS/php_mhash.dll" /libpath:"..\..\Debug_TS"
-# SUBTRACT LINK32 /pdb:none
-
-!ENDIF
-
-# Begin Target
-
-# Name "mhash - Win32 Release_TS"
-# Name "mhash - Win32 Debug_TS"
-# Begin Group "Source Files"
-
-# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
-# Begin Source File
-
-SOURCE=.\mhash.c
-# End Source File
-# End Group
-# Begin Group "Header Files"
-
-# PROP Default_Filter "h;hpp;hxx;hm;inl"
-# Begin Source File
-
-SOURCE=.\php_mhash.h
-# End Source File
-# End Group
-# Begin Group "Resource Files"
-
-# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
-# End Group
-# End Target
-# End Project
diff --git a/ext/mhash/php_mhash.h b/ext/mhash/php_mhash.h
deleted file mode 100644
index f9d6e18e54..0000000000
--- a/ext/mhash/php_mhash.h
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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. |
- +----------------------------------------------------------------------+
- | Authors: Sascha Schumann <sascha@schumann.cx> |
- | Nikos Mavroyanopoulos <nmav@hellug.gr> (HMAC, KEYGEN) |
- +----------------------------------------------------------------------+
- */
-/* $Id$ */
-
-#ifndef PHP_MHASH_H
-#define PHP_MHASH_H
-
-#if HAVE_LIBMHASH
-
-#if PHP_API_VERSION < 19990421
-#define zend_module_entry zend_module_entry
-#include "zend_modules.h"
-#include "internal_functions.h"
-#endif
-
-extern zend_module_entry mhash_module_entry;
-#define mhash_module_ptr &mhash_module_entry
-
-PHP_MINIT_FUNCTION(mhash);
-PHP_MINFO_FUNCTION(mhash);
-PHP_FUNCTION(mhash_get_block_size);
-PHP_FUNCTION(mhash_get_hash_name);
-PHP_FUNCTION(mhash_count);
-PHP_FUNCTION(mhash_keygen_s2k);
-PHP_FUNCTION(mhash);
-
-#else
-#define mhash_module_ptr NULL
-#endif
-
-#define phpext_mhash_ptr mhash_module_ptr
-
-#endif
diff --git a/ext/mhash/tests/001.phpt b/ext/mhash/tests/001.phpt
deleted file mode 100644
index 13c16a2263..0000000000
--- a/ext/mhash/tests/001.phpt
+++ /dev/null
@@ -1,74 +0,0 @@
---TEST--
-mhash() test
---INI--
-magic_quotes_runtime=0
---SKIPIF--
-<?php
- include "skip.inc";
-?>
---FILE--
-<?php
-
-$supported_hash_al = array(
-"MHASH_MD5" => "-›Û‘ùN–ÙÄâ®S*Ì“j",
-"MHASH_SHA1" => "/“AåZƒíõI{ø;£Û*}à£",
-"MHASH_HAVAL256" => "²Uþÿ­d'5Ǜƕ¡ü¥;Ýýúñ ²u’‡“¯",
-"MHASH_HAVAL192" => "Lè7ÞH0 *²Æp”Ɉß×ÛÍ",
-"MHASH_HAVAL224" => "SbÑ…gR¿,›²Öý×r¹ÅÈÎ^È&•&K…á",
-"MHASH_HAVAL160" => "Ƴo‡u Wi¼´ò\"q”{ùË",
-"MHASH_RIPEMD160" => "lGCZ¡ÓYķƯF4Ÿ\x0C>XX=",
-"MHASH_GOST" => "\x0A%Rνõ|­ñQGòU¶C)5»œ,Çâ‹-ž",
-"MHASH_TIGER" => "ý¹šyÃ:•g~ —«®‘ë
-à 0T»\9",
-"MHASH_CRC32" => "ƒ¸",
-"MHASH_CRC32B" => "¤·Zß"
-);
-
-$data = "This is the test of the mhash extension...";
-
-foreach ($supported_hash_al as $hash=>$wanted) {
- $result = mhash(constant($hash), $data);
- if ($result==$wanted) {
- echo "$hash\nok\n";
- } else {
- echo "$hash: ";
- var_dump($wanted);
- echo "$hash: ";
- var_dump($result);
- }
- echo "\n";
-}
-?>
---EXPECT--
-MHASH_MD5
-ok
-
-MHASH_SHA1
-ok
-
-MHASH_HAVAL256
-ok
-
-MHASH_HAVAL192
-ok
-
-MHASH_HAVAL224
-ok
-
-MHASH_HAVAL160
-ok
-
-MHASH_RIPEMD160
-ok
-
-MHASH_GOST
-ok
-
-MHASH_TIGER
-ok
-
-MHASH_CRC32
-ok
-
-MHASH_CRC32B
-ok
diff --git a/ext/mhash/tests/002.phpt b/ext/mhash/tests/002.phpt
deleted file mode 100644
index 6f89bc2272..0000000000
--- a/ext/mhash/tests/002.phpt
+++ /dev/null
@@ -1,64 +0,0 @@
---TEST--
-mhash_get_block_size() & mhash_get_hash_name() test
---SKIPIF--
-<?php
- include "skip.inc";
-?>
---FILE--
-<?php
-$supported_hash_al = array(
-"MD5" => 16,
-"MD4" => 16,
-"SHA1" => 20,
-"SHA256" => 32,
-"HAVAL256" => 32,
-"HAVAL192" => 24,
-"HAVAL224" => 28,
-"HAVAL160" => 20,
-"HAVAL128" => 16,
-"RIPEMD160" => 20,
-"GOST" => 32,
-"TIGER" => 24,
-"TIGER160" => 20,
-"TIGER128" => 16,
-"CRC32" => 4,
-"CRC32B" => 4,
-"ADLER32" => 4,
-"NA_XYZ" => 0 /* verify that the algorythm works */
-);
-
-$hc = mhash_count() + 1;
-
-$known_hash_al = array();
-for ($i=0; $i < $hc; $i++) {
- $known_hash_al[mhash_get_hash_name($i)] = $i;
-}
-
-foreach ($supported_hash_al as $name => $len) {
- if (array_key_exists($name, $known_hash_al)) {
- $len = mhash_get_block_size($known_hash_al[$name]);
- echo "$name = $len\n";
- } else {
- echo "$name ? $len\n";
- }
-}
-?>
---EXPECTREGEX--
-MD5 . 16
-MD4 . 16
-SHA1 . 20
-SHA256 . 32
-HAVAL256 . 32
-HAVAL192 . 24
-HAVAL224 . 28
-HAVAL160 . 20
-HAVAL128 . 16
-RIPEMD160 . 20
-GOST . 32
-TIGER . 24
-TIGER160 . 20
-TIGER128 . 16
-CRC32 . 4
-CRC32B . 4
-ADLER32 . 4
-NA_XYZ . 0
diff --git a/ext/mhash/tests/003.phpt b/ext/mhash/tests/003.phpt
deleted file mode 100644
index e5995f2a02..0000000000
--- a/ext/mhash/tests/003.phpt
+++ /dev/null
@@ -1,73 +0,0 @@
---TEST--
-mhash_keygen_s2k() test
---SKIPIF--
-<?php
- include "skip.inc";
-?>
---FILE--
-<?php
-
-$supported_hash_al = array(
-"MHASH_MD5" => "†\x15N¯”2Íé4z¡P”¹ÀFë\x06æ ”\x0CTyªzcg®hµààt^W\x09þÞ-Ÿésš­A7Yú§:Ìí‚\x10w´Ý²x€dãqëS³©Õ^Òƒš«&UÈ,þÛè: „aÇ™Ù×zä\x06\x1CS›\x01",
-"MHASH_SHA1" => "Ý1\\p\x06\x1D\x07E]SÂû\x0B\x08ß\x0Caªf\\\x1A±§\x01ú\x10•T#\$‹¨2¥­ä\x06³›xc\x0Aº=\x16ˆæ\"IJ\x0E®'NΚԽ÷n‡Ë\x08J3É\x15<+H\x13\x1D0§[\x00§À[‘ñÿê¿Y»\x12qÄØ¡\x19¸K¯mI",
-"MHASH_HAVAL256" => "ÞG\x00Ÿ‡Õé¢NÏPwÖ\x0CH6W¥Ù„«+·€õ‡,Êö\x1C\x0DgdZ„ŽUþá\x07)oAiÉ[Nað®îú²d…TÁ\x17\x1F°¢ü2ªZîÓÕÁUÓ46}IYb,ÚÞþC®\x17½\x1AuùÔþ÷{ñ’¾[x",
-"MHASH_HAVAL224" => "\\Jÿ=‚ZÖ\x08ö\x08Èêçyî8ha Æ\x0A˜ó×p³¦g|yÂÚÜ«qÝàÀ\x19\x1E\x06ƒ—«)
-å˼l¼ÐÇŒ¨G\x0CB@kwèºQ“ù‚v52O¸P¬-0·5\x00L m`G-2ÃI",
-"MHASH_HAVAL192" => "\"àÂq&\x02<….ùA\x07»/\x1Eá2°d\x17‹Ëû\x1C2æXv\x0Bp½Å±Å%™\x03\x16(ÂC;î+\x08p«z8®²\x12\x15\x13NÁ\x08‰u¹©d‡d)qïž³Ù‡ºùv_ÙæÖMINª„¯çà xLt—žº±Ç‡",
-"MHASH_HAVAL160" => "Öåðï\x07óúÌídní¶6GXìÞmÆû\x06\x1E\x00¤–õη#÷Ž¡5ˆM–‚\"míiÁ\x1D„1\$\x0Eù|­X<O)Y;¿=ÓÊ°¸y.³Ø`\"Ê`\x02ëÐÙ´B™ Ô¯…¾Òµ©k>G¹¸ÊÉ\x19Á\x17~Ä\x0D~",
-"MHASH_RIPEMD160" => "äÕÛFšòŸxâ¹\x0DÇ5ÉÏ\x02\x0a\x1D[\x19¦gDXgw”ÔÜ¡DÔ&Åb¯ùŽ†jŠ’B™ëö°êš7ù‡¡û]é¶GíÃ[\x14G`^\x1B«Ã\x08Kç “\x11\x17ë3C-ABâ%ß\x04K\x03??öK´¡†‚¤ù",
-"MHASH_GOST" => "ÀDöi½~†C•=wÆ‚ý\x17’BÙß\x15}­øs¾M–\x01äd|\x01‚4h“Yç\"\x0A°I*b@Ñ„Äxc@sÞ¨y¾†ýN%d÷×\x09¶ŠFD\x0a\x12\x12Pà\x0FÇÕ}E©À~â:pOôŒ\x0D­pwìR{\x19M‡",
-"MHASH_TIGER" => "gêÉ{Ê\nG±ö&/3däÎ#7`þ2UöBQ/Óy)ºÌñçX#k'h¤ÂÀÀn‹ä/¥÷E‚¸©›ÛÀ˜p*M1 VÄÉKÚyºO`Õ ×ø•M¨¢——6Ô|\"ª",
-"MHASH_CRC32" => "H@Œ&_šYïèoQÅÒÐ1[Fq\"®\x08ÁÌÝfŸéVÈ8\x08ã¥EöîE<¤™M¼:Ⱥ…¥r„ðk*±HœÚu±è/}›ßÛh3iW»ñžJ?vu
-i…¥=ÕW\"üó",
-"MHASH_CRC32B" => "µl«e¦>}û*©]¶F×›6\x13ŠbCÍË. I¯\x0F–jœÎ¥0ÐÛ\x0D\x1F<˜Æ.Qyç–¾¶tiý°xbØ\$}ƒ\x0Bõ˜È´“ ×ϬȌDÅDK…\x13é1uLðÝ6§¡`÷æÉ|Ecñ\x04°",
-);
-
-foreach ($supported_hash_al as $hash=>$wanted) {
- $passwd = str_repeat($hash, 10);
- $salt = str_repeat($hash, 2);
- $result = mhash_keygen_s2k(constant($hash), $passwd, $salt, 100);
- if (!strcmp($result, $wanted)) {
- echo "$hash\nok\n";
- } else {
- echo "$hash: ";
- var_dump(bin2hex($wanted));
- echo "$hash: ";
- var_dump(bin2hex($result));
- }
- echo "\n";
-}
-?>
---EXPECT--
-MHASH_MD5
-ok
-
-MHASH_SHA1
-ok
-
-MHASH_HAVAL256
-ok
-
-MHASH_HAVAL224
-ok
-
-MHASH_HAVAL192
-ok
-
-MHASH_HAVAL160
-ok
-
-MHASH_RIPEMD160
-ok
-
-MHASH_GOST
-ok
-
-MHASH_TIGER
-ok
-
-MHASH_CRC32
-ok
-
-MHASH_CRC32B
-ok
diff --git a/ext/mhash/tests/skip.inc b/ext/mhash/tests/skip.inc
deleted file mode 100644
index 81912d21c8..0000000000
--- a/ext/mhash/tests/skip.inc
+++ /dev/null
@@ -1,5 +0,0 @@
-<?php
-if (!extension_loaded("mhash")) {
- die("skip mhash extension is not avaliable");
-}
-?> \ No newline at end of file
diff --git a/ext/mime_magic/CREDITS b/ext/mime_magic/CREDITS
deleted file mode 100644
index ce54609ecc..0000000000
--- a/ext/mime_magic/CREDITS
+++ /dev/null
@@ -1,2 +0,0 @@
-mime_magic
-Hartmut Holzgraefe
diff --git a/ext/mime_magic/DEPRECATED b/ext/mime_magic/DEPRECATED
deleted file mode 100644
index d4d42e6f92..0000000000
--- a/ext/mime_magic/DEPRECATED
+++ /dev/null
@@ -1,36 +0,0 @@
-This extension is deprecated, please use the fileinfo extension
-from PECL instead.
-
-Back when i implemented mime_magic there was no library interface
-to the file utilities functionality. The only way to get the
-functionality in place was to get the file sources and replace
-the input and output routines within with code interfacing to
-your own stuff. This work was originally done by the developers
-of apache mod_magic, the mime_magic extension just replaced the
-apache specific parts with their PHP counterparts.
-
-Now that the codebase of the file utilities is cleanly devided
-into the libmagic library and the file utility built upon it
-the original hack is no longer needed. Using libmagic and the
-fileinfo extension does not only provide a cleaner interface
-to files functionality but also additional functionality so
-that theres no reason to keep around mime_magic anymore.
-
-To keep existing code originaly coded for mime_magic without
-changes you may add the following compatibility wrapper function
-to your codebase:
-
-function mime_content_type($file) {
- static $finfo = false;
-
- if ($finfo === false) {
- $finfo = finfo_open(MAGIC_MIME);
- }
-
- if (is_resource($file)) {
- $buf = fread($fp, 65536);
- return finfo_buffer($buf);
- } else {
- return finfo_file($file);
- }
-} \ No newline at end of file
diff --git a/ext/mime_magic/EXPERIMENTAL b/ext/mime_magic/EXPERIMENTAL
deleted file mode 100644
index add2b3b7e6..0000000000
--- a/ext/mime_magic/EXPERIMENTAL
+++ /dev/null
@@ -1,2 +0,0 @@
-this extension never left the "experimental" status
-and is now superseded by PECL::fileinfo
diff --git a/ext/mime_magic/TODO b/ext/mime_magic/TODO
deleted file mode 100644
index 1ea9c17745..0000000000
--- a/ext/mime_magic/TODO
+++ /dev/null
@@ -1,3 +0,0 @@
-- general cleanup
-- support for content-encoding / compressed files
-- nuke all TSRMLS_FETCH() calls where possible
diff --git a/ext/mime_magic/config.m4 b/ext/mime_magic/config.m4
deleted file mode 100644
index 0e53bc5d56..0000000000
--- a/ext/mime_magic/config.m4
+++ /dev/null
@@ -1,37 +0,0 @@
-dnl
-dnl $Id$
-dnl
-
-PHP_ARG_WITH(mime-magic, whether to include mime_magic support,
-[ --with-mime-magic[=FILE]
- Include mime_magic support (deprecated)])
-
-if test "$PHP_MIME_MAGIC" != "no"; then
-
- PHP_NEW_EXTENSION(mime_magic, mime_magic.c, $ext_shared)
-
- PHP_MIME_MAGIC_FILE_PATH=
-
- dnl
- dnl Try to see if we can find the path of the magic file in its default locations.
- dnl
- if test "$PHP_MIME_MAGIC" != "yes"; then
- if test -f $PHP_MIME_MAGIC; then
- PHP_MIME_MAGIC_FILE_PATH=$PHP_MIME_MAGIC
- else
- AC_MSG_ERROR([File '$PHP_MIME_MAGIC' not found!])
- fi
- else
- MAGIC_MIME_LOCATIONS="/usr/local/apache/conf/magic /usr/local/etc/apache/conf/magic /etc/apache/magic /etc/httpd/conf/magic /usr/share/magic.mime /usr/share/misc/magic.mime /etc/magic.mime"
-
- for i in $MAGIC_MIME_LOCATIONS; do
- if test -f $i; then
- PHP_MIME_MAGIC_FILE_PATH=$i
- break
- fi
- done
- fi
-
- AC_DEFINE_UNQUOTED(PHP_MIME_MAGIC_FILE_PATH,"$PHP_MIME_MAGIC_FILE_PATH",[magic file path])
-
-fi
diff --git a/ext/mime_magic/config.w32 b/ext/mime_magic/config.w32
deleted file mode 100644
index 8c48a89490..0000000000
--- a/ext/mime_magic/config.w32
+++ /dev/null
@@ -1,9 +0,0 @@
-// $Id$
-// vim:ft=javascript
-
-ARG_WITH("mime-magic", "Mime Magic support", "no");
-
-if (PHP_MIME_MAGIC != "no") {
- EXTENSION('mime_magic', 'mime_magic.c');
-}
-
diff --git a/ext/mime_magic/mime_magic.c b/ext/mime_magic/mime_magic.c
deleted file mode 100644
index 91eb655500..0000000000
--- a/ext/mime_magic/mime_magic.c
+++ /dev/null
@@ -1,1978 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Hartmut Holzgraefe <hholzgra@php.net> |
- +----------------------------------------------------------------------+
-
- $Id$
-
- This module contains a lot of stuff taken from Apache mod_mime_magic,
- so the license section is a little bit longer than usual:
-
- ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000 The Apache Software Foundation. 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. The end-user documentation included with the redistribution,
- * if any, must include the following acknowledgment:
- * "This product includes software developed by the
- * Apache Software Foundation (http://www.apache.org/)."
- * Alternately, this acknowledgment may appear in the software itself,
- * if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" must
- * not be used to endorse or promote products derived from this
- * software without prior written permission. For written
- * permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- * nor may "Apache" appear in their name, without prior written
- * permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED 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 APACHE SOFTWARE FOUNDATION OR
- * ITS 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 software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation. For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- *
- * Portions of this software are based upon public domain software
- * originally written at the National Center for Supercomputing Applications,
- * University of Illinois, Urbana-Champaign.
- */
-
-/*
- * mod_mime_magic: MIME type lookup via file magic numbers
- * Copyright (c) 1996-1997 Cisco Systems, Inc.
- *
- * This software was submitted by Cisco Systems to the Apache Group in July
- * 1997. Future revisions and derivatives of this source code must
- * acknowledge Cisco Systems as the original contributor of this module.
- * All other licensing and usage conditions are those of the Apache Group.
- *
- * Some of this code is derived from the free version of the file command
- * originally posted to comp.sources.unix. Copyright info for that program
- * is included below as required.
- * ---------------------------------------------------------------------------
- * - Copyright (c) Ian F. Darwin, 1987. Written by Ian F. Darwin.
- *
- * This software is not subject to any license of the American Telephone and
- * Telegraph Company or of the Regents of the University of California.
- *
- * Permission is granted to anyone to use this software for any purpose on any
- * computer system, and to alter it and redistribute it freely, subject to
- * the following restrictions:
- *
- * 1. The author is not responsible for the consequences of use of this
- * software, no matter how awful, even if they arise from flaws in it.
- *
- * 2. The origin of this software must not be misrepresented, either by
- * explicit claim or by omission. Since few users ever read sources, credits
- * must appear in the documentation.
- *
- * 3. Altered versions must be plainly marked as such, and must not be
- * misrepresented as being the original software. Since few users ever read
- * sources, credits must appear in the documentation.
- *
- * 4. This notice may not be removed or altered.
- * -------------------------------------------------------------------------
- *
- * For compliance with Mr Darwin's terms: this has been very significantly
- * modified from the free "file" command.
- * - all-in-one file for compilation convenience when moving from one
- * version of Apache to the next.
- * - Memory allocation is done through the Apache API's pool structure.
- * - All functions have had necessary Apache API request or server
- * structures passed to them where necessary to call other Apache API
- * routines. (i.e. usually for logging, files, or memory allocation in
- * itself or a called function.)
- * - struct magic has been converted from an array to a single-ended linked
- * list because it only grows one record at a time, it's only accessed
- * sequentially, and the Apache API has no equivalent of realloc().
- * - Functions have been changed to get their parameters from the server
- * configuration instead of globals. (It should be reentrant now but has
- * not been tested in a threaded environment.)
- * - Places where it used to print results to stdout now saves them in a
- * list where they're used to set the MIME type in the Apache request
- * record.
- * - Command-line flags have been removed since they will never be used here.
- *
- * Ian Kluft <ikluft@cisco.com>
- * Engineering Information Framework
- * Central Engineering
- * Cisco Systems, Inc.
- * San Jose, CA, USA
- *
- * Initial installation July/August 1996
- * Misc bug fixes May 1997
- * Submission to Apache Group July 1997
- *
- */
-
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "php.h"
-#include "php_streams.h"
-#include "php_ini.h"
-#include "ext/standard/info.h"
-#include "php_mime_magic.h"
-#include "phpmimemagic.h"
-
-#include <fcntl.h>
-#include <sys/types.h>
-#ifdef HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-
-#ifdef PHP_WIN32
-#define PHP_MIME_MAGIC_FILE_PATH PHP_PREFIX "\\magic.mime"
-#endif
-
-#define BYTE 1
-#define SHORT 2
-#define LONG 4
-#define STRING 5
-#define DATE 6
-#define BESHORT 7
-#define BELONG 8
-#define BEDATE 9
-#define LESHORT 10
-#define LELONG 11
-#define LEDATE 12
-
-static int apprentice(void);
-static int ascmagic(unsigned char *, int);
-static int is_tar(unsigned char *, unsigned int);
-static int softmagic(unsigned char *, int);
-static void tryit(unsigned char *, int, int);
-
-static int getvalue(struct magic *, char **);
-static int hextoint(int);
-static char *getstr(char *, char *, int, int *);
-static int parse(char *, int);
-
-static int match(unsigned char *, int);
-static int mget(union VALUETYPE *, unsigned char *,
- struct magic *, int);
-static int mcheck(union VALUETYPE *, struct magic *);
-static void mprint(union VALUETYPE *, struct magic *);
-static int mconvert(union VALUETYPE *, struct magic *);
-static int magic_rsl_get(char **, char **);
-static int magic_process(zval * TSRMLS_DC);
-
-static long from_oct(int, char *);
-static int fsmagic(zval * TSRMLS_DC);
-
-
-#if HAVE_ZLIB && !defined(COMPILE_DL_ZLIB)
-static int zmagic(unsigned char *, int);
-#endif
-
-static magic_req_rec *magic_set_config(void);
-static void magic_free_config(magic_req_rec *);
-
-ZEND_DECLARE_MODULE_GLOBALS(mime_magic)
-
-
-/* True global resources - no need for thread safety here */
-static magic_server_config_rec mime_global;
-
-/* {{{ mime_magic_functions[] */
-function_entry mime_magic_functions[] = {
- PHP_FE(mime_content_type, NULL)
- {NULL, NULL, NULL}
-};
-/* }}} */
-
-/* {{{ mime_magic_module_entry
- */
-zend_module_entry mime_magic_module_entry = {
-#if ZEND_MODULE_API_NO >= 20010901
- STANDARD_MODULE_HEADER,
-#endif
- "mime_magic",
- mime_magic_functions,
- PHP_MINIT(mime_magic),
- PHP_MSHUTDOWN(mime_magic),
- NULL,
- NULL,
- PHP_MINFO(mime_magic),
-#if ZEND_MODULE_API_NO >= 20010901
- "0.1",
-#endif
- STANDARD_MODULE_PROPERTIES
-};
-/* }}} */
-
-#ifdef COMPILE_DL_MIME_MAGIC
-ZEND_GET_MODULE(mime_magic)
-#endif
-
-/* {{{ PHP_INI
- */
-PHP_INI_BEGIN()
-STD_PHP_INI_ENTRY("mime_magic.magicfile", PHP_MIME_MAGIC_FILE_PATH, PHP_INI_SYSTEM, OnUpdateString, magicfile, zend_mime_magic_globals, mime_magic_globals)
-STD_PHP_INI_BOOLEAN("mime_magic.debug", "0", PHP_INI_SYSTEM, OnUpdateBool, debug, zend_mime_magic_globals, mime_magic_globals)
-PHP_INI_END()
-/* }}} */
-
-/* {{{ php_mime_magic_init_globals
- */
-static void php_mime_magic_init_globals(zend_mime_magic_globals *mime_magic_globals)
-{
- mime_global.magicfile = NULL;
-}
-/* }}} */
-
-/* {{{ PHP_MINIT_FUNCTION
- */
-PHP_MINIT_FUNCTION(mime_magic)
-{
- ZEND_INIT_MODULE_GLOBALS(mime_magic, php_mime_magic_init_globals, NULL);
- REGISTER_INI_ENTRIES();
-
- mime_global.magicfile = MIME_MAGIC_G(magicfile);
-
- if(mime_global.magicfile) {
- if(apprentice()) {
- MIME_MAGIC_G(status) = "invalid magic file, disabled";
- } else {
- MIME_MAGIC_G(status) = "enabled";
- }
- } else {
- MIME_MAGIC_G(status) = "no magic file given, disabled";
- }
-
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ PHP_MSHUTDOWN_FUNCTION
- */
-PHP_MSHUTDOWN_FUNCTION(mime_magic)
-{
- UNREGISTER_INI_ENTRIES();
- if (mime_global.magic != NULL && mime_global.magic != (struct magic *) -1) {
- struct magic *iter = mime_global.magic;
- while (iter != NULL) {
- struct magic *iter_next = iter->next;
- free(iter);
- iter = iter_next;
- }
- }
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ PHP_MINFO_FUNCTION
- */
-PHP_MINFO_FUNCTION(mime_magic)
-{
- php_info_print_table_start();
- php_info_print_table_header(2, "mime_magic support", MIME_MAGIC_G(status));
- php_info_print_table_end();
-
- DISPLAY_INI_ENTRIES();
-}
-/* }}} */
-
-
-/* {{{ proto string mime_content_type(string filename|resource stream)
- Return content-type for file */
-PHP_FUNCTION(mime_content_type)
-{
- zval *what;
- magic_server_config_rec *conf = &mime_global;
- char *content_type=NULL, *content_encoding=NULL;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z", &what) == FAILURE) {
- return;
- }
-
- switch (Z_TYPE_P(what)) {
- case IS_STRING:
- break;
- case IS_RESOURCE:
- {
- php_stream *stream;
-
- php_stream_from_zval_no_verify(stream, &what);
- if (stream) {
- break;
- }
- }
- /* fallthru if not a stream resource */
- default:
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "can only process string or stream arguments");
- break;
- }
-
- if (conf->magic == (struct magic *)-1) {
- if(MIME_MAGIC_G(debug))
- php_error_docref("http://www.php.net/mime_magic" TSRMLS_CC, E_ERROR, "mime_magic could not be initialized, magic file %s is not avaliable", conf->magicfile);
- RETURN_FALSE;
- }
-
- if(!conf->magic) {
- if(MIME_MAGIC_G(debug))
- php_error_docref("http://www.php.net/mime_magic" TSRMLS_CC, E_WARNING, "mime_magic not initialized");
- RETURN_FALSE;
- }
-
- MIME_MAGIC_G(req_dat) = magic_set_config();
-
- if(MIME_MAGIC_OK != magic_process(what TSRMLS_CC)) {
- RETVAL_FALSE;
- } else if(MIME_MAGIC_OK != magic_rsl_get(&content_type, &content_encoding)) {
- RETVAL_FALSE;
- } else {
- RETVAL_STRING(content_type, 1);
- }
-
- if(content_type) efree(content_type);
- if(content_encoding) efree(content_encoding);
-
- magic_free_config(MIME_MAGIC_G(req_dat));
-}
-/* }}} */
-
-#define EATAB {while (isspace((unsigned char) *l)) ++l;}
-
-/*
- * apprentice - load configuration from the magic file r
- * API request record
- */
-static int apprentice(void)
-{
- FILE *f;
- char line[BUFSIZ + 1];
- int errs = 0;
- int lineno;
- char *fname;
- magic_server_config_rec *conf = &mime_global;
- TSRMLS_FETCH();
-
- fname = conf->magicfile; /* todo cwd? */
- f = fopen(fname, "rb");
- if (f == NULL) {
- conf->magic = (struct magic *)-1;
- return -1;
- }
-
- /* set up the magic list (empty) */
- conf->magic = conf->last = NULL;
-
- /* parse it */
- for (lineno = 1; fgets(line, BUFSIZ, f) != NULL; lineno++) {
- int ws_offset;
-
- /* delete newline */
- if (line[0]) {
- line[strlen(line) - 1] = '\0';
- }
-
- /* skip leading whitespace */
- ws_offset = 0;
- while (line[ws_offset] && isspace(line[ws_offset])) {
- ws_offset++;
- }
-
- /* skip blank lines */
- if (line[ws_offset] == 0) {
- continue;
- }
-
- /* comment, do not parse */
- if (line[ws_offset] == '#')
- continue;
-
- /* parse it */
- if (parse(line + ws_offset, lineno) != 0)
- ++errs;
-
- if(errs && !MIME_MAGIC_G(debug))
- break;
- }
-
- (void) fclose(f);
-
- return (errs ? -1 : 0);
-}
-
-/*
- * extend the sign bit if the comparison is to be signed
- */
-static unsigned long signextend(struct magic *m, unsigned long v)
-{
- if (!(m->flag & UNSIGNED))
- switch (m->type) {
- /*
- * Do not remove the casts below. They are vital. When later
- * compared with the data, the sign extension must have happened.
- */
- case BYTE:
- v = (char) v;
- break;
- case SHORT:
- case BESHORT:
- case LESHORT:
- v = (short) v;
- break;
- case DATE:
- case BEDATE:
- case LEDATE:
- case LONG:
- case BELONG:
- case LELONG:
- v = (long) v;
- break;
- case STRING:
- break;
- default:
- {
- TSRMLS_FETCH();
- if(MIME_MAGIC_G(debug))
- php_error_docref("http://www.php.net/mime_magic" TSRMLS_CC, E_WARNING, ": can't happen: m->type=%d", m->type);
- return -1;
- }
- }
- return v;
-}
-
-/*
- *
- */
-static int is_valid_mimetype(char *p, int p_len)
-{
- if (p_len > 0) {
- do {
- if (!isalnum(*p) && (*p != '-') && (*p != '.')) {
- return 0;
- }
- } while (*(++p) != '/');
- ++p;
- do {
- if (!isalnum(*p) && (*p != '-') && (*p != '.') && !isspace(*p)) {
- return 0;
- }
- } while (*(++p));
- }
- return 1;
-}
-
-/*
- * parse one line from magic file, put into magic[index++] if valid
- */
-static int parse(char *l, int lineno)
-{
- struct magic *m;
- char *t, *s;
- magic_server_config_rec *conf = &mime_global;
- TSRMLS_FETCH();
-
- /* allocate magic structure entry */
- m = (struct magic *) calloc(1, sizeof(struct magic));
-
- /* append to linked list */
- m->next = NULL;
- if (!conf->magic || !conf->last) {
- conf->magic = conf->last = m;
- }
- else {
- conf->last->next = m;
- conf->last = m;
- }
-
- /* set values in magic structure */
- m->flag = 0;
- m->cont_level = 0;
- m->lineno = lineno;
-
- while (*l == '>') {
- ++l; /* step over */
- m->cont_level++;
- }
-
- if (m->cont_level != 0 && *l == '(') {
- ++l; /* step over */
- m->flag |= INDIR;
- }
-
- /* get offset, then skip over it */
- m->offset = (int) strtol(l, &t, 0);
- if (l == t) {
- if(MIME_MAGIC_G(debug))
- php_error_docref("http://www.php.net/mime_magic" TSRMLS_CC, E_WARNING, ": (%s:%d) offset `%s' invalid", MIME_MAGIC_G(magicfile), lineno, l);
- }
- l = t;
-
- if (m->flag & INDIR) {
- m->in.type = LONG;
- m->in.offset = 0;
- /*
- * read [.lbs][+-]nnnnn)
- */
- if (*l == '.') {
- switch (*++l) {
- case 'l':
- m->in.type = LONG;
- break;
- case 's':
- m->in.type = SHORT;
- break;
- case 'b':
- m->in.type = BYTE;
- break;
- default:
- if(MIME_MAGIC_G(debug))
- php_error_docref("http://www.php.net/mime_magic" TSRMLS_CC, E_WARNING, ": (%s:%d) indirect offset type %c invalid", MIME_MAGIC_G(magicfile), lineno, *l);
- break;
- }
- l++;
- }
- s = l;
- if (*l == '+' || *l == '-')
- l++;
- if (isdigit((unsigned char) *l)) {
- m->in.offset = strtol(l, &t, 0);
- if (*s == '-')
- m->in.offset = -m->in.offset;
- }
- else
- t = l;
- if (*t++ != ')') {
- if(MIME_MAGIC_G(debug))
- php_error_docref("http://www.php.net/mime_magic" TSRMLS_CC, E_WARNING, ": (%s:%d) missing ')' in indirect offset", MIME_MAGIC_G(magicfile), lineno);
- }
- l = t;
- }
-
-
- while (isdigit((unsigned char) *l))
- ++l;
- EATAB;
-
-#define NBYTE 4
-#define NSHORT 5
-#define NLONG 4
-#define NSTRING 6
-#define NDATE 4
-#define NBESHORT 7
-#define NBELONG 6
-#define NBEDATE 6
-#define NLESHORT 7
-#define NLELONG 6
-#define NLEDATE 6
-
- if (*l == 'u') {
- ++l;
- m->flag |= UNSIGNED;
- }
-
- /* get type, skip it */
- if (strncmp(l, "byte", NBYTE) == 0) {
- m->type = BYTE;
- l += NBYTE;
- }
- else if (strncmp(l, "short", NSHORT) == 0) {
- m->type = SHORT;
- l += NSHORT;
- }
- else if (strncmp(l, "long", NLONG) == 0) {
- m->type = LONG;
- l += NLONG;
- }
- else if (strncmp(l, "string", NSTRING) == 0) {
- m->type = STRING;
- l += NSTRING;
- }
- else if (strncmp(l, "date", NDATE) == 0) {
- m->type = DATE;
- l += NDATE;
- }
- else if (strncmp(l, "beshort", NBESHORT) == 0) {
- m->type = BESHORT;
- l += NBESHORT;
- }
- else if (strncmp(l, "belong", NBELONG) == 0) {
- m->type = BELONG;
- l += NBELONG;
- }
- else if (strncmp(l, "bedate", NBEDATE) == 0) {
- m->type = BEDATE;
- l += NBEDATE;
- }
- else if (strncmp(l, "leshort", NLESHORT) == 0) {
- m->type = LESHORT;
- l += NLESHORT;
- }
- else if (strncmp(l, "lelong", NLELONG) == 0) {
- m->type = LELONG;
- l += NLELONG;
- }
- else if (strncmp(l, "ledate", NLEDATE) == 0) {
- m->type = LEDATE;
- l += NLEDATE;
- }
- else {
- if(MIME_MAGIC_G(debug))
- php_error_docref("http://www.php.net/mime_magic" TSRMLS_CC, E_WARNING, ": (%s:%d) type %s invalid", MIME_MAGIC_G(magicfile), lineno, l);
- return -1;
- }
- /* New-style anding: "0 byte&0x80 =0x80 dynamically linked" */
- if (*l == '&') {
- ++l;
- m->mask = signextend(m, strtol(l, &l, 0));
- }
- else
- m->mask = ~0L;
- EATAB;
-
- switch (*l) {
- case '>':
- case '<':
- /* Old-style anding: "0 byte &0x80 dynamically linked" */
- case '&':
- case '^':
- case '=':
- m->reln = *l;
- ++l;
- break;
- case '!':
- if (m->type != STRING) {
- m->reln = *l;
- ++l;
- break;
- }
- /* FALL THROUGH */
- default:
- if (*l == 'x' && isspace((unsigned char) l[1])) {
- m->reln = *l;
- ++l;
- goto GetDesc; /* Bill The Cat */
- }
- m->reln = '=';
- break;
- }
- EATAB;
-
- if (getvalue(m, &l))
- return -1;
- /*
- * now get last part - the description
- */
- GetDesc:
- EATAB;
- if (l[0] == '\b') {
- ++l;
- m->nospflag = 1;
- }
- else if ((l[0] == '\\') && (l[1] == 'b')) {
- ++l;
- ++l;
- m->nospflag = 1;
- }
- else
- m->nospflag = 0;
-
- if (!is_valid_mimetype(l, strlen(l))) {
- if(MIME_MAGIC_G(debug))
- php_error_docref("http://www.php.net/mime_magic" TSRMLS_CC, E_WARNING, ": (%s:%d) '%s' is not a valid mimetype, entry skipped", MIME_MAGIC_G(magicfile), lineno, l);
- return -1;
- }
-
- strncpy(m->desc, l, sizeof(m->desc) - 1);
- m->desc[sizeof(m->desc) - 1] = '\0';
-
- return 0;
-}
-
-/*
- * Read a numeric value from a pointer, into the value union of a magic
- * pointer, according to the magic type. Update the string pointer to point
- * just after the number read. Return 0 for success, non-zero for failure.
- */
-static int getvalue(struct magic *m, char **p)
-{
- int slen;
-
- if (m->type == STRING) {
- *p = getstr(*p, m->value.s, sizeof(m->value.s), &slen);
- m->vallen = slen;
- }
- else if (m->reln != 'x')
- m->value.l = signextend(m, strtol(*p, p, 0));
- return 0;
-}
-
-/*
- * Convert a string containing C character escapes. Stop at an unescaped
- * space or tab. Copy the converted version to "p", returning its length in
- * *slen. Return updated scan pointer as function result.
- */
-static char *getstr(register char *s, register char *p,
- int plen, int *slen)
-{
- char *origs = s, *origp = p;
- char *pmax = p + plen - 1;
- register int c;
- register int val;
-
- while ((c = *s++) != '\0') {
- if (isspace((unsigned char) c))
- break;
- if (p >= pmax) {
- TSRMLS_FETCH();
- if(MIME_MAGIC_G(debug))
- php_error_docref("http://www.php.net/mime_magic" TSRMLS_CC, E_WARNING, "string too long: %s", origs);
- break;
- }
- if (c == '\\') {
- switch (c = *s++) {
-
- case '\0':
- goto out;
-
- default:
- *p++ = (char) c;
- break;
-
- case 'n':
- *p++ = '\n';
- break;
-
- case 'r':
- *p++ = '\r';
- break;
-
- case 'b':
- *p++ = '\b';
- break;
-
- case 't':
- *p++ = '\t';
- break;
-
- case 'f':
- *p++ = '\f';
- break;
-
- case 'v':
- *p++ = '\v';
- break;
-
- /* \ and up to 3 octal digits */
- case '0':
- case '1':
- case '2':
- case '3':
- case '4':
- case '5':
- case '6':
- case '7':
- val = c - '0';
- c = *s++; /* try for 2 */
- if (c >= '0' && c <= '7') {
- val = (val << 3) | (c - '0');
- c = *s++; /* try for 3 */
- if (c >= '0' && c <= '7')
- val = (val << 3) | (c - '0');
- else
- --s;
- }
- else
- --s;
- *p++ = (char) val;
- break;
-
- /* \x and up to 3 hex digits */
- case 'x':
- val = 'x'; /* Default if no digits */
- c = hextoint(*s++); /* Get next char */
- if (c >= 0) {
- val = c;
- c = hextoint(*s++);
- if (c >= 0) {
- val = (val << 4) + c;
- c = hextoint(*s++);
- if (c >= 0) {
- val = (val << 4) + c;
- }
- else
- --s;
- }
- else
- --s;
- }
- else
- --s;
- *p++ = (char) val;
- break;
- }
- }
- else
- *p++ = (char) c;
- }
- out:
- *p = '\0';
- *slen = p - origp;
- return s;
-}
-
-/* Single hex char to int; -1 if not a hex char. */
-static int hextoint(int c)
-{
- if (isdigit((unsigned char) c))
- return c - '0';
- if ((c >= 'a') && (c <= 'f'))
- return c + 10 - 'a';
- if ((c >= 'A') && (c <= 'F'))
- return c + 10 - 'A';
- return -1;
-}
-
-
-/*
- * RSL (result string list) processing routines
- *
- * These collect strings that would have been printed in fragments by file(1)
- * into a list of magic_rsl structures with the strings. When complete,
- * they're concatenated together to become the MIME content and encoding
- * types.
- *
- * return value conventions for these functions: functions which return int:
- * failure = -1, other = result functions which return pointers: failure = 0,
- * other = result
- */
-
-/* allocate a per-request structure and put it in the request record */
-static magic_req_rec *magic_set_config(void)
-{
- magic_req_rec *req_dat = (magic_req_rec *) emalloc(sizeof(magic_req_rec));
-
- req_dat->head = req_dat->tail = (magic_rsl *) NULL;
- return req_dat;
-}
-
-static void magic_free_config(magic_req_rec *req_dat) {
- magic_rsl *curr, *next;
-
- if(!req_dat) return;
-
- curr = req_dat->head;
- while(curr) {
- next = curr->next;
- efree(curr->str);
- efree(curr);
- curr = next;
- }
-
- efree(req_dat);
-}
-
-/* add a string to the result string list for this request */
-/* it is the responsibility of the caller to allocate "str" */
-static int magic_rsl_add(char *str)
-{
- magic_req_rec *req_dat;
- magic_rsl *rsl;
- TSRMLS_FETCH();
-
- req_dat = MIME_MAGIC_G(req_dat);
-
- /* make sure we have a list to put it in */
- if (!req_dat) {
- if(MIME_MAGIC_G(debug))
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "request config should not be NULL");
- if (!(req_dat = magic_set_config())) {
- /* failure */
- return -1;
- }
- }
-
- /* allocate the list entry */
- rsl = (magic_rsl *) emalloc(sizeof(magic_rsl));
-
- /* fill it */
- rsl->str = estrdup(str);
- rsl->next = (magic_rsl *) NULL;
-
- /* append to the list */
- if (req_dat->head && req_dat->tail) {
- req_dat->tail->next = rsl;
- req_dat->tail = rsl;
- }
- else {
- req_dat->head = req_dat->tail = rsl;
- }
-
- /* success */
- return 0;
-}
-
-/* RSL hook for puts-type functions */
-static int magic_rsl_puts(char *str)
-{
- return magic_rsl_add(str);
-}
-
-/* RSL hook for printf-type functions */
-static int magic_rsl_printf(char *str,...)
-{
- va_list ap;
-
- char buf[MAXMIMESTRING];
-
- /* assemble the string into the buffer */
- va_start(ap, str);
- vsnprintf(buf, sizeof(buf), str, ap);
- va_end(ap);
-
- /* add the buffer to the list */
- return magic_rsl_add(buf);
-}
-
-/* RSL hook for putchar-type functions */
-static int magic_rsl_putchar(char c)
-{
- char str[2];
-
- /* high overhead for 1 char - just hope they don't do this much */
- str[0] = c;
- str[1] = '\0';
- return magic_rsl_add(str);
-}
-
-/* allocate and copy a contiguous string from a result string list */
-static char *rsl_strdup(int start_frag, int start_pos, int len)
-{
- char *result; /* return value */
- int cur_frag, /* current fragment number/counter */
- cur_pos, /* current position within fragment */
- res_pos; /* position in result string */
- magic_rsl *frag; /* list-traversal pointer */
- magic_req_rec *req_dat;
- TSRMLS_FETCH();
-
- req_dat = MIME_MAGIC_G(req_dat);
-
- /* allocate the result string */
- result = (char *) emalloc(len + 2);
-
- /* loop through and collect the string */
- res_pos = 0;
- for (frag = req_dat->head, cur_frag = 0;
- frag->next;
- frag = frag->next, cur_frag++) {
- /* loop to the first fragment */
- if (cur_frag < start_frag)
- continue;
-
- /* loop through and collect chars */
- for (cur_pos = (cur_frag == start_frag) ? start_pos : 0;
- frag->str[cur_pos];
- cur_pos++) {
- if (cur_frag >= start_frag
- && cur_pos >= start_pos
- && res_pos <= len) {
- result[res_pos++] = frag->str[cur_pos];
- if (res_pos > len) {
- break;
- }
- }
- }
- }
-
- /* clean up and return */
- result[res_pos] = 0;
-
- return result;
-}
-
-/*
- * magic_process - process input file r Apache API request record
- * (formerly called "process" in file command, prefix added for clarity) Opens
- * the file and reads a fixed-size buffer to begin processing the contents.
- */
-static int magic_process(zval *what TSRMLS_DC)
-{
- php_stream *stream;
- unsigned char buf[HOWMANY + 1]; /* one extra for terminating '\0' */
- int nbytes = 0; /* number of bytes read from a datafile */
- int result;
- off_t streampos;
-
- /*
- * first try judging the file based on its filesystem status
- */
- switch ((result = fsmagic(what TSRMLS_CC))) {
- case MIME_MAGIC_DONE:
- magic_rsl_putchar('\n');
- return MIME_MAGIC_OK;
- case MIME_MAGIC_OK:
- break;
- default:
- /* fatal error, bail out */
- return result;
- }
-
- switch (Z_TYPE_P(what)) {
- case IS_STRING:
- stream = php_stream_open_wrapper(Z_STRVAL_P(what), "rb", IGNORE_PATH | ENFORCE_SAFE_MODE | REPORT_ERRORS, NULL);
- if (stream == NULL) {
- /* We can't open it, but we were able to stat it. */
- if(MIME_MAGIC_G(debug))
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "can't read `%s'", Z_STRVAL_P(what));
- /* let some other handler decide what the problem is */
- return MIME_MAGIC_DECLINED;
- }
- break;
- case IS_RESOURCE:
- php_stream_from_zval_no_verify(stream, &what); /* we tested this before, so it should work here */
- streampos = php_stream_tell(stream); /* remember stream position for restauration */
- php_stream_seek(stream, 0, SEEK_SET);
- break;
- }
-
-
- /*
- * try looking at the first HOWMANY bytes
- */
- if ((nbytes = php_stream_read(stream, (char *) buf, sizeof(buf) - 1)) == -1) {
- if(MIME_MAGIC_G(debug)) {
- if (Z_TYPE_P(what) == IS_RESOURCE) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "read failed on stream");
- } else {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "read failed: %s", Z_STRVAL_P(what));
- }
- }
- return MIME_MAGIC_ERROR;
- }
-
- if (nbytes == 0)
- magic_rsl_puts(MIME_TEXT_UNKNOWN);
- else {
- buf[nbytes++] = '\0'; /* null-terminate it */
- tryit(buf, nbytes, 1);
- }
-
- if (Z_TYPE_P(what) == IS_RESOURCE) {
- php_stream_seek(stream, streampos, SEEK_SET);
- } else {
- (void) php_stream_close(stream);
- }
- (void) magic_rsl_putchar('\n');
-
- return MIME_MAGIC_OK;
-}
-
-static void tryit(unsigned char *buf, int nb, int checkzmagic)
-{
- /*
- * Try compression stuff
- */
-#if HAVE_ZLIB && !defined(COMPILE_DL_ZLIB)
- if (checkzmagic == 1) {
- if (zmagic(buf, nb) == 1)
- return;
- }
-#endif
-
- /*
- * try tests in /etc/magic (or surrogate magic file)
- */
- if (softmagic(buf, nb) == 1)
- return;
-
- /*
- * try known keywords, check for ascii-ness too.
- */
- if (ascmagic(buf, nb) == 1)
- return;
-
- /*
- * abandon hope, all ye who remain here
- */
- magic_rsl_puts(MIME_BINARY_UNKNOWN);
-}
-
-
-/*
- * return MIME_MAGIC_DONE to indicate it's been handled
- * return MIME_MAGIC_OK to indicate it's a regular file still needing handling
- * other returns indicate a failure of some sort
- */
-static int fsmagic(zval *what TSRMLS_DC)
-{
- php_stream_statbuf stat_ssb;
-
- switch (Z_TYPE_P(what)) {
- case IS_STRING:
- if(!php_stream_stat_path(Z_STRVAL_P(what), &stat_ssb)) {
- return MIME_MAGIC_OK;
- }
- break;
- case IS_RESOURCE:
- {
- php_stream *stream;
-
- php_stream_from_zval_no_verify(stream, &what);
- if(!php_stream_stat(stream, &stat_ssb)) {
- return MIME_MAGIC_OK;
- }
- }
- break;
- }
-
- switch (stat_ssb.sb.st_mode & S_IFMT) {
- case S_IFDIR:
- magic_rsl_puts(DIR_MAGIC_TYPE);
- return MIME_MAGIC_DONE;
- case S_IFCHR:
- /*
- * (void) magic_rsl_printf(r,"character special (%d/%d)",
- * major(sb->st_rdev), minor(sb->st_rdev));
- */
- (void) magic_rsl_puts(MIME_BINARY_UNKNOWN);
- return MIME_MAGIC_DONE;
-#ifdef S_IFBLK
- case S_IFBLK:
- /*
- * (void) magic_rsl_printf(r,"block special (%d/%d)",
- * major(sb->st_rdev), minor(sb->st_rdev));
- */
- (void) magic_rsl_puts(MIME_BINARY_UNKNOWN);
- return MIME_MAGIC_DONE;
- /* TODO add code to handle V7 MUX and Blit MUX files */
-#endif
-#ifdef S_IFIFO
- case S_IFIFO:
- /*
- * magic_rsl_puts(r,"fifo (named pipe)");
- */
- (void) magic_rsl_puts(MIME_BINARY_UNKNOWN);
- return MIME_MAGIC_DONE;
-#endif
-#ifdef S_IFLNK
- case S_IFLNK:
- /* We used stat(), the only possible reason for this is that the
- * symlink is broken.
- */
- if(MIME_MAGIC_G(debug)) {
- /* no need to check argument type here, this can only happen with strings */
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "broken symlink (%s)", Z_STRVAL_P(what));
- }
- return MIME_MAGIC_ERROR;
-#endif
-#ifdef S_IFSOCK
-#ifndef __COHERENT__
- case S_IFSOCK:
- magic_rsl_puts(MIME_BINARY_UNKNOWN);
- return MIME_MAGIC_DONE;
-#endif
-#endif
- case S_IFREG:
- break;
- case 0:
- break;
- default:
- if(MIME_MAGIC_G(debug))
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "invalid mode 0%o.", (unsigned int)stat_ssb.sb.st_mode);
- return MIME_MAGIC_ERROR;
- }
-
- /*
- * regular file, check next possibility
- */
- if (stat_ssb.sb.st_size == 0) {
- magic_rsl_puts(MIME_TEXT_UNKNOWN);
- return MIME_MAGIC_DONE;
- }
- return MIME_MAGIC_OK;
-}
-
-/*
- * softmagic - lookup one file in database (already read from /etc/magic by
- * apprentice.c). Passed the name and FILE * of one file to be typed.
- */
-/* ARGSUSED1 *//* nbytes passed for regularity, maybe need later */
-static int softmagic(unsigned char *buf, int nbytes)
-{
- if (match(buf, nbytes))
- return 1;
-
- return 0;
-}
-
-/*
- * Go through the whole list, stopping if you find a match. Process all the
- * continuations of that match before returning.
- *
- * We support multi-level continuations:
- *
- * At any time when processing a successful top-level match, there is a current
- * continuation level; it represents the level of the last successfully
- * matched continuation.
- *
- * Continuations above that level are skipped as, if we see one, it means that
- * the continuation that controls them - i.e, the lower-level continuation
- * preceding them - failed to match.
- *
- * Continuations below that level are processed as, if we see one, it means
- * we've finished processing or skipping higher-level continuations under the
- * control of a successful or unsuccessful lower-level continuation, and are
- * now seeing the next lower-level continuation and should process it. The
- * current continuation level reverts to the level of the one we're seeing.
- *
- * Continuations at the current level are processed as, if we see one, there's
- * no lower-level continuation that may have failed.
- *
- * If a continuation matches, we bump the current continuation level so that
- * higher-level continuations are processed.
- */
-static int match(unsigned char *s, int nbytes)
-{
- int cont_level = 0;
- int need_separator = 0;
- union VALUETYPE p;
- magic_server_config_rec *conf = &mime_global;
- struct magic *m;
-
- for (m = conf->magic; m; m = m->next) {
- /* check if main entry matches */
- if (!mget(&p, s, m, nbytes) ||
- !mcheck(&p, m)) {
- struct magic *m_cont;
-
- /*
- * main entry didn't match, flush its continuations
- */
- if (!m->next || (m->next->cont_level == 0)) {
- continue;
- }
-
- m_cont = m->next;
- while (m_cont && (m_cont->cont_level != 0)) {
- /*
- * this trick allows us to keep *m in sync when the continue
- * advances the pointer
- */
- m = m_cont;
- m_cont = m_cont->next;
- }
- continue;
- }
-
- /* if we get here, the main entry rule was a match */
- /* this will be the last run through the loop */
-
- /* print the match */
- mprint(&p, m);
-
- /*
- * If we printed something, we'll need to print a blank before we
- * print something else.
- */
- if (m->desc[0])
- need_separator = 1;
- /* and any continuations that match */
- cont_level++;
- /*
- * while (m && m->next && m->next->cont_level != 0 && ( m = m->next
- * ))
- */
- m = m->next;
- while (m && (m->cont_level != 0)) {
- if (cont_level >= m->cont_level) {
- if (cont_level > m->cont_level) {
- /*
- * We're at the end of the level "cont_level"
- * continuations.
- */
- cont_level = m->cont_level;
- }
- if (mget(&p, s, m, nbytes) &&
- mcheck(&p, m)) {
- /*
- * This continuation matched. Print its message, with a
- * blank before it if the previous item printed and this
- * item isn't empty.
- */
- /* space if previous printed */
- if (need_separator
- && (m->nospflag == 0)
- && (m->desc[0] != '\0')
- ) {
- (void) magic_rsl_putchar(' ');
- need_separator = 0;
- }
- mprint(&p, m);
- if (m->desc[0])
- need_separator = 1;
-
- /*
- * If we see any continuations at a higher level, process
- * them.
- */
- cont_level++;
- }
- }
-
- /* move to next continuation record */
- m = m->next;
- }
- return 1; /* all through */
- }
- return 0; /* no match at all */
-}
-
-/* an optimization over plain strcmp() */
-#define STREQ(a, b) (*(a) == *(b) && strcmp((a), (b)) == 0)
-
-static int ascmagic(unsigned char *buf, int nbytes)
-{
- int has_escapes = 0;
- unsigned char *s;
- char nbuf[HOWMANY + 1]; /* one extra for terminating '\0' */
- char *token;
- register struct names *p;
- int small_nbytes;
-
- /* these are easy, do them first */
-
- /*
- * for troff, look for . + letter + letter or .\"; this must be done to
- * disambiguate tar archives' ./file and other trash from real troff
- * input.
- */
- if (*buf == '.') {
- unsigned char *tp = buf + 1;
-
- while (isspace(*tp))
- ++tp; /* skip leading whitespace */
- if ((isalnum(*tp) || *tp == '\\') &&
- (isalnum(*(tp + 1)) || *tp == '"')) {
- magic_rsl_puts("application/x-troff");
- return 1;
- }
- }
- if ((*buf == 'c' || *buf == 'C') && isspace(*(buf + 1))) {
- /* Fortran */
- magic_rsl_puts("text/plain");
- return 1;
- }
-
- /* look for tokens from names.h - this is expensive!, so we'll limit
- * ourselves to only SMALL_HOWMANY bytes */
- small_nbytes = (nbytes > SMALL_HOWMANY) ? SMALL_HOWMANY : nbytes;
- /* make a copy of the buffer here because strtok() will destroy it */
- s = (unsigned char *) memcpy(nbuf, buf, small_nbytes);
- s[small_nbytes] = '\0';
- has_escapes = (memchr(s, '\033', small_nbytes) != NULL);
- /* XXX: not multithread safe */
- while ((token = strtok((char *) s, " \t\n\r\f")) != NULL) {
- s = NULL; /* make strtok() keep on tokin' */
- for (p = names; p < names + NNAMES; p++) {
- if (STREQ(p->name, token)) {
- magic_rsl_puts(types[p->type]);
- if (has_escapes)
- magic_rsl_puts(" (with escape sequences)");
- return 1;
- }
- }
- }
-
- switch (is_tar(buf, nbytes)) {
- case 1:
- /* V7 tar archive */
- magic_rsl_puts("application/x-tar");
- return 1;
- case 2:
- /* POSIX tar archive */
- magic_rsl_puts("application/x-tar");
- return 1;
- }
-
- /* all else fails, but it is ascii... */
- if (has_escapes) {
- /* text with escape sequences */
- /* we leave this open for further differentiation later */
- magic_rsl_puts("text/plain");
- }
- else {
- /* plain text */
- magic_rsl_puts("text/plain");
- }
- return 1;
-}
-
-/*
- * is_tar() -- figure out whether file is a tar archive.
- *
- * Stolen (by author of file utility) from the public domain tar program: Public
- * Domain version written 26 Aug 1985 John Gilmore (ihnp4!hoptoad!gnu).
- *
- * @(#)list.c 1.18 9/23/86 Public Domain - gnu $Id: mod_mime_magic.c,v 1.7
- * 1997/06/24 00:41:02 ikluft Exp ikluft $
- *
- * Comments changed and some code/comments reformatted for file command by Ian
- * Darwin.
- */
-
-#define isodigit(c) ( ((c) >= '0') && ((c) <= '7') )
-
-/*
- * Return 0 if the checksum is bad (i.e., probably not a tar archive), 1 for
- * old UNIX tar file, 2 for Unix Std (POSIX) tar file.
- */
-
-static int is_tar(unsigned char *buf, unsigned int nbytes)
-{
- register union record *header = (union record *) buf;
- register int i;
- register long sum, recsum;
- register char *p;
-
- if (nbytes < sizeof(union record))
- return 0;
-
- recsum = from_oct(8, header->header.chksum);
-
- sum = 0;
- p = header->charptr;
- for (i = sizeof(union record); --i >= 0;) {
- /*
- * We can't use unsigned char here because of old compilers, e.g. V7.
- */
- sum += 0xFF & *p++;
- }
-
- /* Adjust checksum to count the "chksum" field as blanks. */
- for (i = sizeof(header->header.chksum); --i >= 0;)
- sum -= 0xFF & header->header.chksum[i];
- sum += ' ' * sizeof header->header.chksum;
-
- if (sum != recsum)
- return 0; /* Not a tar archive */
-
- if (0 == strcmp(header->header.magic, TMAGIC))
- return 2; /* Unix Standard tar archive */
-
- return 1; /* Old fashioned tar archive */
-}
-
-
-/*
- * Quick and dirty octal conversion.
- *
- * Result is -1 if the field is invalid (all blank, or nonoctal).
- */
-static long from_oct(int digs, char *where)
-{
- register long value;
-
- while (isspace(*where)) { /* Skip spaces */
- where++;
- if (--digs <= 0)
- return -1; /* All blank field */
- }
- value = 0;
- while (digs > 0 && isodigit(*where)) { /* Scan til nonoctal */
- value = (value << 3) | (*where++ - '0');
- --digs;
- }
-
- if (digs > 0 && *where && !isspace(*where))
- return -1; /* Ended on non-space/nul */
-
- return value;
-}
-
-static int mget(union VALUETYPE *p, unsigned char *s,
- struct magic *m, int nbytes)
-{
- long offset = m->offset;
-
- if (offset + (long)sizeof(union VALUETYPE) > nbytes)
- return 0;
-
- memcpy(p, s + offset, sizeof(union VALUETYPE));
-
- if (!mconvert(p, m))
- return 0;
-
- if (m->flag & INDIR) {
-
- switch (m->in.type) {
- case BYTE:
- offset = p->b + m->in.offset;
- break;
- case SHORT:
- offset = p->h + m->in.offset;
- break;
- case LONG:
- offset = p->l + m->in.offset;
- break;
- }
-
- if (offset + (long)sizeof(union VALUETYPE) > nbytes)
- return 0;
-
- memcpy(p, s + offset, sizeof(union VALUETYPE));
-
- if (!mconvert(p, m))
- return 0;
- }
- return 1;
-}
-
-static int mcheck(union VALUETYPE *p, struct magic *m)
-{
- register unsigned long l = m->value.l;
- register unsigned long v;
- int matched;
- TSRMLS_FETCH();
-
- if ((m->value.s[0] == 'x') && (m->value.s[1] == '\0')) {
- if(MIME_MAGIC_G(debug))
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "BOINK");
- return 1;
- }
-
- switch (m->type) {
- case BYTE:
- v = p->b;
- break;
-
- case SHORT:
- case BESHORT:
- case LESHORT:
- v = p->h;
- break;
-
- case LONG:
- case BELONG:
- case LELONG:
- case DATE:
- case BEDATE:
- case LEDATE:
- v = p->l;
- break;
-
- case STRING:
- l = 0;
- /*
- * What we want here is: v = strncmp(m->value.s, p->s, m->vallen);
- * but ignoring any nulls. bcmp doesn't give -/+/0 and isn't
- * universally available anyway.
- */
- v = 0;
- {
- register unsigned char *a = (unsigned char *) m->value.s;
- register unsigned char *b = (unsigned char *) p->s;
- register int len = m->vallen;
-
- while (--len >= 0)
- if ((v = *b++ - *a++) != 0)
- break;
- }
- break;
- default:
- /* bogosity, pretend that it just wasn't a match */
- if(MIME_MAGIC_G(debug))
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "invalid type %d in mcheck().", m->type);
- return 0;
- }
-
- v = signextend(m, v) & m->mask;
-
- switch (m->reln) {
- case 'x':
- matched = 1;
- break;
-
- case '!':
- matched = v != l;
- break;
-
- case '=':
- matched = v == l;
- break;
-
- case '>':
- if (m->flag & UNSIGNED) {
- matched = v > l;
- }
- else {
- matched = (long) v > (long) l;
- }
- break;
-
- case '<':
- if (m->flag & UNSIGNED) {
- matched = v < l;
- }
- else {
- matched = (long) v < (long) l;
- }
- break;
-
- case '&':
- matched = (v & l) == l;
- break;
-
- case '^':
- matched = (v & l) != l;
- break;
-
- default:
- /* bogosity, pretend it didn't match */
- matched = 0;
- if(MIME_MAGIC_G(debug))
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "mcheck: can't happen: invalid relation %d.", m->reln);
- break;
- }
-
- return matched;
-}
-
-#if HAVE_ZLIB && !defined(COMPILE_DL_ZLIB)
-/*
- * compress routines: zmagic() - returns 0 if not recognized, uncompresses
- * and prints information if recognized uncompress(s, method, old, n, newch)
- * - uncompress old into new, using method, return sizeof new
- */
-
-static int zmagic(unsigned char *buf, int nbytes)
-{
- if (buf[0] != 0x1f) return 0;
-
- switch(buf[1]) {
- case 0x9d: /* .Z "x-compress" */
- break; /* not yet supportet */
-
- case 0x8b: /* .gz "x-gzip" */
-#if 0
- if ((newsize = magic_uncompress(i, &newbuf, nbytes)) > 0) {
- tryit(newbuf, newsize, 0);
-
- /* set encoding type in the request record */
- /* TODO r->content_encoding = compr[i].encoding; */
- }
-#endif
- break; /* not yet supported */
-
- case 0x1e: /* simply packed ? */
- break; /* not yet supported */
- }
-
- return 0;
-}
-#endif
-
-static void mprint(union VALUETYPE *p, struct magic *m)
-{
- char *pp, *rt;
- unsigned long v;
-
- switch (m->type) {
- case BYTE:
- v = p->b;
- break;
-
- case SHORT:
- case BESHORT:
- case LESHORT:
- v = p->h;
- break;
-
- case LONG:
- case BELONG:
- case LELONG:
- v = p->l;
- break;
-
- case STRING:
- if (m->reln == '=') {
- (void) magic_rsl_printf(m->desc, m->value.s);
- }
- else {
- (void) magic_rsl_printf(m->desc, p->s);
- }
- return;
-
- case DATE:
- case BEDATE:
- case LEDATE:
- /* XXX: not multithread safe */
- pp = ctime((time_t *) & p->l);
- if ((rt = strchr(pp, '\n')) != NULL)
- *rt = '\0';
- (void) magic_rsl_printf(m->desc, pp);
- return;
- default:
- {
- TSRMLS_FETCH();
- if(MIME_MAGIC_G(debug))
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "invalid m->type (%d) in mprint().", m->type);
- return;
- }
- }
-
- v = signextend(m, v) & m->mask;
- (void) magic_rsl_printf(m->desc, (unsigned long) v);
-}
-
-/*
- * Convert the byte order of the data we are looking at
- */
-static int mconvert(union VALUETYPE *p, struct magic *m)
-{
- char *rt;
-
- switch (m->type) {
- case BYTE:
- case SHORT:
- case LONG:
- case DATE:
- return 1;
- case STRING:
- /* Null terminate and eat the return */
- p->s[sizeof(p->s) - 1] = '\0';
- if ((rt = strchr(p->s, '\n')) != NULL)
- *rt = '\0';
- return 1;
- case BESHORT:
- p->h = (short) ((p->hs[0] << 8) | (p->hs[1]));
- return 1;
- case BELONG:
- case BEDATE:
- p->l = (long)
- ((p->hl[0] << 24) | (p->hl[1] << 16) | (p->hl[2] << 8) | (p->hl[3]));
- return 1;
- case LESHORT:
- p->h = (short) ((p->hs[1] << 8) | (p->hs[0]));
- return 1;
- case LELONG:
- case LEDATE:
- p->l = (long)
- ((p->hl[3] << 24) | (p->hl[2] << 16) | (p->hl[1] << 8) | (p->hl[0]));
- return 1;
- default:
- {
- TSRMLS_FETCH();
- if(MIME_MAGIC_G(debug))
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "invalid type %d in mconvert().", m->type);
- return 0;
- }
- }
-}
-
-
-/* states for the state-machine algorithm in magic_rsl_to_request() */
-typedef enum {
- rsl_leading_space, rsl_type, rsl_subtype, rsl_separator, rsl_encoding
-} rsl_states;
-
-/* process the RSL and set the MIME info in the request record */
-static int magic_rsl_get(char **content_type, char **content_encoding)
-{
- int cur_frag, /* current fragment number/counter */
- cur_pos, /* current position within fragment */
- type_frag, /* content type starting point: fragment */
- type_pos, /* content type starting point: position */
- type_len, /* content type length */
- encoding_frag, /* content encoding starting point: fragment */
- encoding_pos, /* content encoding starting point: position */
- encoding_len; /* content encoding length */
-
- magic_rsl *frag; /* list-traversal pointer */
- rsl_states state;
-
- magic_req_rec *req_dat;
-
- TSRMLS_FETCH();
-
- req_dat = MIME_MAGIC_G(req_dat);
-
- /* check if we have a result */
- if (!req_dat || !req_dat->head) {
- /* empty - no match, we defer to other Apache modules */
- return MIME_MAGIC_DECLINED;
- }
-
- /* start searching for the type and encoding */
- state = rsl_leading_space;
- type_frag = type_pos = type_len = 0;
- encoding_frag = encoding_pos = encoding_len = 0;
- for (frag = req_dat->head, cur_frag = 0;
- frag && frag->next;
- frag = frag->next, cur_frag++) {
- /* loop through the characters in the fragment */
- for (cur_pos = 0; frag->str[cur_pos]; cur_pos++) {
- if (isspace(frag->str[cur_pos])) {
- /* process whitespace actions for each state */
- if (state == rsl_leading_space) {
- /* eat whitespace in this state */
- continue;
- }
- else if (state == rsl_type) {
- /* whitespace: type has no slash! */
- return MIME_MAGIC_DECLINED;
- }
- else if (state == rsl_subtype) {
- /* whitespace: end of MIME type */
- state++;
- continue;
- }
- else if (state == rsl_separator) {
- /* eat whitespace in this state */
- continue;
- }
- else if (state == rsl_encoding) {
- /* whitespace: end of MIME encoding */
- /* we're done */
- frag = req_dat->tail;
- break;
- }
- else {
- /* should not be possible */
- /* abandon malfunctioning module */
- if(MIME_MAGIC_G(debug))
- php_error_docref(NULL TSRMLS_CC, E_WARNING, ": bad state %d (ws)", state);
- return MIME_MAGIC_DECLINED;
- }
- /* NOTREACHED */
- }
- else if (state == rsl_type &&
- frag->str[cur_pos] == '/') {
- /* copy the char and go to rsl_subtype state */
- type_len++;
- state++;
- }
- else {
- /* process non-space actions for each state */
- if (state == rsl_leading_space) {
- /* non-space: begin MIME type */
- state++;
- type_frag = cur_frag;
- type_pos = cur_pos;
- type_len = 1;
- continue;
- }
- else if (state == rsl_type ||
- state == rsl_subtype) {
- /* non-space: adds to type */
- type_len++;
- continue;
- }
- else if (state == rsl_separator) {
- /* non-space: begin MIME encoding */
- state++;
- encoding_frag = cur_frag;
- encoding_pos = cur_pos;
- encoding_len = 1;
- continue;
- }
- else if (state == rsl_encoding) {
- /* non-space: adds to encoding */
- encoding_len++;
- continue;
- }
- else {
- /* should not be possible */
- /* abandon malfunctioning module */
- if(MIME_MAGIC_G(debug))
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "bad state %d (ns)", state);
- return MIME_MAGIC_DECLINED;
- }
- /* NOTREACHED */
- }
- /* NOTREACHED */
- }
- }
-
- /* if we ended prior to state rsl_subtype, we had incomplete info */
- if (state != rsl_subtype && state != rsl_separator &&
- state != rsl_encoding) {
- /* defer to other modules */
- return MIME_MAGIC_DECLINED;
- }
-
- /* save the info in the request record */
- if (state == rsl_subtype || state == rsl_encoding ||
- state == rsl_encoding) {
- char *tmp;
- tmp = rsl_strdup(type_frag, type_pos, type_len);
- /* XXX: this could be done at config time I'm sure... but I'm
- * confused by all this magic_rsl stuff. -djg */
- /* TODO ap_content_type_tolower(tmp); */
- *content_type = tmp;
- }
- if (state == rsl_encoding) {
- char *tmp;
- tmp = rsl_strdup(encoding_frag,
- encoding_pos, encoding_len);
- /* XXX: this could be done at config time I'm sure... but I'm
- * confused by all this magic_rsl stuff. -djg */
- /* TODO ap_str_tolower(tmp); */
- *content_encoding = tmp;
- }
-
- /* detect memory allocation errors */
- if (!content_type || !(*content_type) || (state == rsl_encoding && !*content_encoding)) {
- return MIME_MAGIC_ERROR;
- }
-
- /* success! */
- return MIME_MAGIC_OK;
-}
-
-/*
- * 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/mime_magic/mime_magic.dsp b/ext/mime_magic/mime_magic.dsp
deleted file mode 100644
index 7c6ce312cf..0000000000
--- a/ext/mime_magic/mime_magic.dsp
+++ /dev/null
@@ -1,112 +0,0 @@
-# Microsoft Developer Studio Project File - Name="mime_magic" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=mime_magic - Win32 Debug_TS
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "mime_magic.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "mime_magic.mak" CFG="mime_magic - Win32 Debug_TS"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "mime_magic - Win32 Release_TS" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "mime_magic - Win32 Debug_TS" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "mime_magic - Win32 Release_TS"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release_TS"
-# PROP BASE Intermediate_Dir "Release_TS"
-# PROP BASE Ignore_Export_Lib 0
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release_TS"
-# PROP Intermediate_Dir "Release_TS"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MD /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "MIME_MAGIC_EXPORTS" /YX /FD /c
-# ADD CPP /nologo /MD /W3 /GX /O2 /I "..\.." /I "..\..\main" /I "..\..\Zend" /I "..\..\TSRM" /I "..\..\..\php_build\includes" /D ZEND_DEBUG=0 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "COMPILE_DL_MIME_MAGIC" /D ZTS=1 /D "ZEND_WIN32" /D "PHP_WIN32" /D "PHP_MIME_MAGIC_EXPORTS" /D "HAVE_ZLIB" /FR /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x407 /d "NDEBUG"
-# ADD RSC /l 0x407 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386
-# ADD LINK32 php5ts.lib zlib.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 /out:"..\..\Release_TS/php_mime_magic.dll" /libpath:"..\..\Release_TS" /libpath:"..\..\Release_TS_Inline" /libpath:"..\..\..\php_build\release"
-
-!ELSEIF "$(CFG)" == "mime_magic - Win32 Debug_TS"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug_TS"
-# PROP BASE Intermediate_Dir "Debug_TS"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug_TS"
-# PROP Intermediate_Dir "Debug_TS"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "MIME_MAGIC_EXPORTS" /YX /FD /GZ /c
-# ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "..\.." /I "..\..\main" /I "..\..\Zend" /I "..\..\TSRM" /I "..\..\..\php_build\includes" /D ZEND_DEBUG=1 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "COMPILE_DL_MIME_MAGIC" /D ZTS=1 /D "ZEND_WIN32" /D "PHP_WIN32" /D "PHP_MIME_MAGIC_EXPORTS" /D "HAVE_ZLIB" /YX /FD /GZ /c
-# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x407 /d "_DEBUG"
-# ADD RSC /l 0x407 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 php5ts_debug.lib zlib.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /out:"..\..\Debug_TS/php_mime_magic.dll" /pdbtype:sept /libpath:"..\..\Debug_TS" /libpath:"..\..\..\php_build\release"
-
-!ENDIF
-
-# Begin Target
-
-# Name "mime_magic - Win32 Release_TS"
-# Name "mime_magic - Win32 Debug_TS"
-# Begin Group "Source Files"
-
-# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
-# Begin Source File
-
-SOURCE=.\mime_magic.c
-# End Source File
-# End Group
-# Begin Group "Header Files"
-
-# PROP Default_Filter "h;hpp;hxx;hm;inl"
-# Begin Source File
-
-SOURCE=.\php_mime_magic.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\phpmimemagic.h
-# End Source File
-# End Group
-# End Target
-# End Project
diff --git a/ext/mime_magic/package.xml b/ext/mime_magic/package.xml
deleted file mode 100644
index 34701c7300..0000000000
--- a/ext/mime_magic/package.xml
+++ /dev/null
@@ -1,49 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1" ?>
-<!DOCTYPE package SYSTEM "../pear/package.dtd">
-<package>
- <name>mime_magic</name>
- <summary>MIME type detection using magic numbers</summary>
- <maintainers>
- <maintainer>
- <user>hholzgra</user>
- <name>Hartmut Holzgraefe</name>
- <email>hartmut@php.net</email>
- <role>lead</role>
- </maintainer>
- </maintainers>
- <description>
-mime_magic tries to detect a files MIME type by testing certain
-byte positions against known magic numbers collected in a data
-file. It uses the same file format as the UNIX file program and
-apache mod_magic. The actual code is based on detection code from
-apache mod_magic which is itself an adaption of the original 'file'
-code.
- </description>
- <license>PHP</license>
- <release>
- <state>beta</state>
- <version>1.0rc1</version>
- <date>2004-03-19</date>
- <notes>
-package.xml added to support intallation using pear installer
- </notes>
- <configureoptions>
- <configureoption name="with-mime-magic" default="autodetect" prompt="magic.mime data file?"/>
- </configureoptions>
- <filelist>
- <file role="src" name="config.m4"/>
- <file role="src" name="mime_magic.c"/>
- <file role="src" name="php_mime_magic.h"/>
- <file role="src" name="phpmimemagic.h"/>
- <file role="doc" name="CREDITS"/>
- <file role="doc" name="EXPERIMENTAL"/>
- <file role="doc" name="TODO"/>
- </filelist>
- <deps>
- <dep type="php" rel="ge" version="5" />
- </deps>
- </release>
-</package>
-<!--
-vim:et:ts=1:sw=1
--->
diff --git a/ext/mime_magic/php_mime_magic.h b/ext/mime_magic/php_mime_magic.h
deleted file mode 100644
index 91b5ff98ec..0000000000
--- a/ext/mime_magic/php_mime_magic.h
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: |
- +----------------------------------------------------------------------+
-
- $Id$
-*/
-
-#ifndef PHP_MIME_MAGIC_H
-#define PHP_MIME_MAGIC_H
-
-extern zend_module_entry mime_magic_module_entry;
-#define phpext_mime_magic_ptr &mime_magic_module_entry
-
-#ifdef PHP_WIN32
-#define PHP_MIME_MAGIC_API __declspec(dllexport)
-#else
-#define PHP_MIME_MAGIC_API
-#endif
-
-PHP_MINIT_FUNCTION(mime_magic);
-PHP_MSHUTDOWN_FUNCTION(mime_magic);
-PHP_RINIT_FUNCTION(mime_magic);
-PHP_RSHUTDOWN_FUNCTION(mime_magic);
-PHP_MINFO_FUNCTION(mime_magic);
-
-PHP_FUNCTION(mime_content_type);
-
-#endif /* PHP_MIME_MAGIC_H */
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * indent-tabs-mode: t
- * End:
- */
diff --git a/ext/mime_magic/phpmimemagic.h b/ext/mime_magic/phpmimemagic.h
deleted file mode 100644
index 1425c67a97..0000000000
--- a/ext/mime_magic/phpmimemagic.h
+++ /dev/null
@@ -1,381 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: |
- +----------------------------------------------------------------------+
-
- $Id$
-*/
-
-#ifndef PHPMIMEMAGIC_H
-#define PHPMIMEMAGIC_H
-
-#define MIME_MAGIC_DEBUG 0
-
-#define MIME_BINARY_UNKNOWN "application/octet-stream"
-#define MIME_TEXT_UNKNOWN "text/plain"
-
-#define MAXMIMESTRING 256
-
-#define MIME_MAGIC_OK 0
-#define MIME_MAGIC_DECLINED -1
-#define MIME_MAGIC_DONE -2
-#define MIME_MAGIC_ERROR -3
-
-#define DIR_MAGIC_TYPE "httpd/unix-directory"
-
-/* HOWMANY must be at least 4096 to make gzip -dcq work */
-#define HOWMANY 4096
-/* SMALL_HOWMANY limits how much work we do to figure out text files */
-#define SMALL_HOWMANY 1024
-#define MAXDESC 50 /* max leng of text description */
-#define MAXstring 64 /* max leng of "string" types */
-
-struct magic {
- struct magic *next; /* link to next entry */
- int lineno; /* line number from magic file */
-
- short flag;
-#define INDIR 1 /* if '>(...)' appears, */
-#define UNSIGNED 2 /* comparison is unsigned */
- short cont_level; /* level of ">" */
- struct {
- char type; /* byte short long */
- long offset; /* offset from indirection */
- } in;
- long offset; /* offset to magic number */
- unsigned char reln; /* relation (0=eq, '>'=gt, etc) */
- char type; /* int, short, long or string. */
- char vallen; /* length of string value, if any */
- union VALUETYPE {
- unsigned char b;
- unsigned short h;
- unsigned long l;
- char s[MAXstring];
- unsigned char hs[2]; /* 2 bytes of a fixed-endian "short" */
- unsigned char hl[4]; /* 2 bytes of a fixed-endian "long" */
- } value; /* either number or string */
- unsigned long mask; /* mask before comparison with value */
- char nospflag; /* supress space character */
-
- /* NOTE: this string is suspected of overrunning - find it! */
- char desc[MAXDESC]; /* description */
-};
-
-/*
- * data structures for tar file recognition
- * --------------------------------------------------------------------------
- * Header file for public domain tar (tape archive) program.
- *
- * @(#)tar.h 1.20 86/10/29 Public Domain. Created 25 August 1985 by John
- * Gilmore, ihnp4!hoptoad!gnu.
- *
- * Header block on tape.
- *
- * I'm going to use traditional DP naming conventions here. A "block" is a big
- * chunk of stuff that we do I/O on. A "record" is a piece of info that we
- * care about. Typically many "record"s fit into a "block".
- */
-#define RECORDSIZE 512
-#define NAMSIZ 100
-#define TUNMLEN 32
-#define TGNMLEN 32
-
-union record {
- char charptr[RECORDSIZE];
- struct header {
- char name[NAMSIZ];
- char mode[8];
- char uid[8];
- char gid[8];
- char size[12];
- char mtime[12];
- char chksum[8];
- char linkflag;
- char linkname[NAMSIZ];
- char magic[8];
- char uname[TUNMLEN];
- char gname[TGNMLEN];
- char devmajor[8];
- char devminor[8];
- } header;
-};
-
-/* The magic field is filled with this if uname and gname are valid. */
-#define TMAGIC "ustar " /* 7 chars and a null */
-
-/*
- * file-function prototypes
- */
-/*TODO*/
-#define request_rec void
-#define server_rec void
-#define pool void
-#define cmd_parms void
-
-/*
- * includes for ASCII substring recognition formerly "names.h" in file
- * command
- *
- * Original notes: names and types used by ascmagic in file(1). These tokens are
- * here because they can appear anywhere in the first HOWMANY bytes, while
- * tokens in /etc/magic must appear at fixed offsets into the file. Don't
- * make HOWMANY too high unless you have a very fast CPU.
- */
-
-/* these types are used to index the table 'types': keep em in sync! */
-/* HTML inserted in first because this is a web server module now */
-#define L_HTML 0 /* HTML */
-#define L_C 1 /* first and foremost on UNIX */
-#define L_FORT 2 /* the oldest one */
-#define L_MAKE 3 /* Makefiles */
-#define L_PLI 4 /* PL/1 */
-#define L_MACH 5 /* some kinda assembler */
-#define L_ENG 6 /* English */
-#define L_PAS 7 /* Pascal */
-#define L_MAIL 8 /* Electronic mail */
-#define L_NEWS 9 /* Usenet Netnews */
-
-static char *types[] =
- {
- "text/html", /* HTML */
- "text/plain", /* "c program text", */
- "text/plain", /* "fortran program text", */
- "text/plain", /* "make commands text", */
- "text/plain", /* "pl/1 program text", */
- "text/plain", /* "assembler program text", */
- "text/plain", /* "English text", */
- "text/plain", /* "pascal program text", */
- "message/rfc822", /* "mail text", */
- "message/news", /* "news text", */
- "application/binary", /* "can't happen error on names.h/types", */
- 0
- };
-
-static struct names {
- char *name;
- short type;
-} names[] = {
-
- /* These must be sorted by eye for optimal hit rate */
- /* Add to this list only after substantial meditation */
- {
- "<html>", L_HTML
- },
- {
- "<HTML>", L_HTML
- },
- {
- "<head>", L_HTML
- },
- {
- "<HEAD>", L_HTML
- },
- {
- "<title>", L_HTML
- },
- {
- "<TITLE>", L_HTML
- },
- {
- "<h1>", L_HTML
- },
- {
- "<H1>", L_HTML
- },
- {
- "<!--", L_HTML
- },
- {
- "<!DOCTYPE HTML", L_HTML
- },
- {
- "/*", L_C
- }, /* must precede "The", "the", etc. */
- {
- "#include", L_C
- },
- {
- "char", L_C
- },
- {
- "The", L_ENG
- },
- {
- "the", L_ENG
- },
- {
- "double", L_C
- },
- {
- "extern", L_C
- },
- {
- "float", L_C
- },
- {
- "real", L_C
- },
- {
- "struct", L_C
- },
- {
- "union", L_C
- },
- {
- "CFLAGS", L_MAKE
- },
- {
- "LDFLAGS", L_MAKE
- },
- {
- "all:", L_MAKE
- },
- {
- ".PRECIOUS", L_MAKE
- },
- /*
- * Too many files of text have these words in them. Find another way to
- * recognize Fortrash.
- */
-#ifdef NOTDEF
- {
- "subroutine", L_FORT
- },
- {
- "function", L_FORT
- },
- {
- "block", L_FORT
- },
- {
- "common", L_FORT
- },
- {
- "dimension", L_FORT
- },
- {
- "integer", L_FORT
- },
- {
- "data", L_FORT
- },
-#endif /* NOTDEF */
- {
- ".ascii", L_MACH
- },
- {
- ".asciiz", L_MACH
- },
- {
- ".byte", L_MACH
- },
- {
- ".even", L_MACH
- },
- {
- ".globl", L_MACH
- },
- {
- "clr", L_MACH
- },
- {
- "(input,", L_PAS
- },
- {
- "dcl", L_PLI
- },
- {
- "Received:", L_MAIL
- },
- {
- ">From", L_MAIL
- },
- {
- "Return-Path:", L_MAIL
- },
- {
- "Cc:", L_MAIL
- },
- {
- "Newsgroups:", L_NEWS
- },
- {
- "Path:", L_NEWS
- },
- {
- "Organization:", L_NEWS
- },
- {
- NULL, 0
- }
-};
-
-#define NNAMES ((sizeof(names)/sizeof(struct names)) - 1)
-
-/*
- * Result String List (RSL)
- *
- * The file(1) command prints its output. Instead, we store the various
- * "printed" strings in a list (allocating memory as we go) and concatenate
- * them at the end when we finally know how much space they'll need.
- */
-
-typedef struct magic_rsl_s {
- char *str; /* string, possibly a fragment */
- struct magic_rsl_s *next; /* pointer to next fragment */
-} magic_rsl;
-
-/*
- * Apache module configuration structures
- */
-
-/* per-server info */
-typedef struct {
- char *magicfile; /* where magic be found */
- struct magic *magic; /* head of magic config list */
- struct magic *last;
-} magic_server_config_rec;
-
-/* per-request info */
-typedef struct {
- magic_rsl *head; /* result string list */
- magic_rsl *tail;
- unsigned suf_recursion; /* recursion depth in suffix check */
-} magic_req_rec;
-
-
-/* Globals */
-ZEND_BEGIN_MODULE_GLOBALS(mime_magic)
- char *magicfile;
- magic_req_rec *req_dat;
- int debug; /* shall magic file parser errors be shown? */
- char *status; /* status message for phpinfo() */
-ZEND_END_MODULE_GLOBALS(mime_magic)
-
-#ifdef ZTS
-#define MIME_MAGIC_G(v) TSRMG(mime_magic_globals_id, zend_mime_magic_globals *, v)
-#else
-#define MIME_MAGIC_G(v) (mime_magic_globals.v)
-#endif
-
-#endif /* PHPMIMEMAGIC_H */
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * indent-tabs-mode: t
- * End:
- */
diff --git a/ext/ming/CREDITS b/ext/ming/CREDITS
deleted file mode 100644
index 836d10d449..0000000000
--- a/ext/ming/CREDITS
+++ /dev/null
@@ -1,2 +0,0 @@
-MING
-Dave Hayden, Frank M. Kromann
diff --git a/ext/ming/EXPERIMENTAL b/ext/ming/EXPERIMENTAL
deleted file mode 100644
index 6443e99646..0000000000
--- a/ext/ming/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/ming/config.m4 b/ext/ming/config.m4
deleted file mode 100644
index f6a80c52a1..0000000000
--- a/ext/ming/config.m4
+++ /dev/null
@@ -1,77 +0,0 @@
-dnl
-dnl $Id$
-dnl
-
-PHP_ARG_WITH(ming, for MING support,
-[ --with-ming[=DIR] Include MING support])
-
-if test "$PHP_MING" != "no"; then
- AC_CHECK_LIB(m, sin)
-
- for i in $PHP_MING /usr/local /usr; do
- if test -f $i/lib/libming.$SHLIB_SUFFIX_NAME -o -f $i/lib/libming.a; then
- MING_DIR=$i
- fi
- done
-
- if test -z "$MING_DIR"; then
- AC_MSG_ERROR(Please reinstall ming distribution. libming.(a|so) not found.)
- fi
-
- for i in $MING_DIR/include $MING_DIR/include/ming $MING_DIR/ming/include; do
- if test -f $i/ming.h; then
- MING_INC_DIR=$i
- fi
- done
-
- if test -z "$MING_INC_DIR"; then
- AC_MSG_ERROR(Please reinstall ming distribution. ming.h not found.)
- fi
-
- PHP_CHECK_LIBRARY(ming, Ming_useSWFVersion, [
- AC_DEFINE(HAVE_MING,1,[ ])
- ],[
- AC_MSG_ERROR([Ming library 0.2a or greater required.])
- ],[
- -L$MING_DIR/lib
- ])
-
- PHP_ADD_INCLUDE($MING_INC_DIR)
- PHP_ADD_LIBRARY_WITH_PATH(ming, $MING_DIR/lib, MING_SHARED_LIBADD)
-
- AC_MSG_CHECKING([for destroySWFBlock])
- AC_TRY_RUN([
-#include "ming.h"
-int destroySWFBlock(int a, int b) {
- return a+b;
-}
-int main() {
- return destroySWFBlock(-1,1); /* returns 0 only if function is not yet defined */
-}
- ],[
- AC_MSG_RESULT([missing])
- ],[
- AC_DEFINE(HAVE_DESTROY_SWF_BLOCK,1,[ ])
- AC_MSG_RESULT([ok])
- ],[
- AC_MSG_RESULT([unknown])
- ])
-
- dnl Check Ming version (FIXME: if/when ming has some better way to detect the version..)
- old_CPPFLAGS=$CPPFLAGS
- CPPFLAGS=-I$MING_INC_DIR
- AC_EGREP_CPP(yes, [
-#include <ming.h>
-#ifdef SWF_SOUND_COMPRESSION
-yes
-#endif
- ], [
- AC_DEFINE(HAVE_NEW_MING, 1, [ ])
- dnl FIXME: This is now unconditional..better check coming later.
- AC_DEFINE(HAVE_MING_ZLIB, 1, [ ])
- ])
- CPPFLAGS=$old_CPPFLAGS
-
- PHP_NEW_EXTENSION(ming, ming.c, $ext_shared)
- PHP_SUBST(MING_SHARED_LIBADD)
-fi
diff --git a/ext/ming/config.w32 b/ext/ming/config.w32
deleted file mode 100644
index 4c73e85834..0000000000
--- a/ext/ming/config.w32
+++ /dev/null
@@ -1,44 +0,0 @@
-// $Id$
-// vim:ft=javascript
-
-ARG_WITH("ming", "MING support", "no");
-
-// this is a temporary hack
-function ming_check_version()
-{
- var c = null;
- var v;
- var ming_h = CHECK_HEADER_ADD_INCLUDE("ming.h", "CFLAGS_MING", PHP_MING);
-
- if (!ming_h) {
- return false;
- }
-
- c = file_get_contents(ming_h + "\\ming.h");
- if (typeof(c) == "string" && c.match(/MING_VERSION\s+(0.[a-zA-Z0-9]+)/)) {
- v = RegExp.$1;
- if (v > "0.2") {
- if (CHECK_LIB("libungif.lib", "ming", PHP_MING) &&
- CHECK_LIB("libpng.lib", "ming", PHP_MING)) {
- AC_DEFINE('HAVE_NEW_MING', 1);
- if (PHP_ZLIB != "no") {
- AC_DEFINE('HAVE_MING_ZLIB', 1);
- }
- }
- }
- }
- return true;
-}
-
-if (PHP_MING != "no") {
- if (ming_check_version() && CHECK_LIB("libming.lib", "ming", PHP_MING)) {
- if (PHP_ZLIB_SHARED) {
- CHECK_LIB("zlib.lib", "ming", PHP_MING);
- }
- EXTENSION('ming', 'ming.c');
- AC_DEFINE('HAVE_MING', 1);
- } else {
- WARNING("ming not enabled; libraries and headers not found");
- }
-}
-
diff --git a/ext/ming/ming.c b/ext/ming/ming.c
deleted file mode 100644
index 4481d46e87..0000000000
--- a/ext/ming/ming.c
+++ /dev/null
@@ -1,4125 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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. |
- +----------------------------------------------------------------------+
- | Authors: Dave Hayden <dave@opaque.net> |
- | Frank M. Kromann <fmk@php.net> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "php.h"
-#include "php_globals.h"
-#include "ext/standard/info.h"
-#include "ext/standard/file.h"
-#include "ext/standard/fsock.h"
-#include "php_streams.h"
-
-#if HAVE_MING
-
-#include "php_ming.h"
-#include <stdio.h>
-#include <math.h>
-#include <ming.h>
-
-#define FLOAT_Z_DVAL_PP(x) ((float)Z_DVAL_PP(x))
-#define BYTE_Z_LVAL_PP(x) ((byte)Z_LVAL_PP(x))
-
-#ifndef HAVE_DESTROY_SWF_BLOCK
-void destroySWFBlock(SWFBlock block);
-#endif
-
-static zend_function_entry ming_functions[] = {
- PHP_FALIAS(ming_setcubicthreshold, ming_setCubicThreshold, NULL)
- PHP_FALIAS(ming_setscale, ming_setScale, NULL)
- PHP_FALIAS(ming_useswfversion, ming_useSWFVersion, NULL)
- PHP_FALIAS(ming_keypress, ming_keypress, NULL)
-#ifdef HAVE_NEW_MING
- PHP_FALIAS(ming_useconstants, ming_useConstants, NULL)
-#endif
- { NULL, NULL, NULL }
-};
-
-static SWFMovie getMovie(zval *id TSRMLS_DC);
-static SWFFill getFill(zval *id TSRMLS_DC);
-static SWFGradient getGradient(zval *id TSRMLS_DC);
-static SWFBitmap getBitmap(zval *id TSRMLS_DC);
-static SWFShape getShape(zval *id TSRMLS_DC);
-static SWFFont getFont(zval *id TSRMLS_DC);
-static SWFText getText(zval *id TSRMLS_DC);
-static SWFTextField getTextField(zval *id TSRMLS_DC);
-static SWFDisplayItem getDisplayItem(zval *id TSRMLS_DC);
-static SWFButton getButton(zval *id TSRMLS_DC);
-static SWFAction getAction(zval *id TSRMLS_DC);
-static SWFMorph getMorph(zval *id TSRMLS_DC);
-static SWFMovieClip getSprite(zval *id TSRMLS_DC);
-static SWFSound getSound(zval *id TSRMLS_DC);
-#ifdef HAVE_NEW_MING
-static SWFFontCharacter getFontCharacter(zval *id TSRMLS_DC);
-static SWFSoundInstance getSoundInstance(zval *id TSRMLS_DC);
-static SWFVideoStream getVideoStream(zval *id TSRMLS_DC);
-static SWFPrebuiltClip getPrebuiltClip(zval *id TSRMLS_DC);
-#endif
-
-#define PHP_MING_FILE_CHK(file) \
- if ((PG(safe_mode) && !php_checkuid((file), NULL, CHECKUID_CHECK_FILE_AND_DIR)) || php_check_open_basedir((file) TSRMLS_CC)) { \
- RETURN_FALSE; \
- } \
-
-/* {{{ proto void ming_setcubicthreshold (int threshold)
- Set cubic threshold (?) */
-PHP_FUNCTION(ming_setCubicThreshold)
-{
- zval **num;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &num) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long_ex(num);
- Ming_setCubicThreshold(Z_LVAL_PP(num));
-}
-/* }}} */
-
-/* {{{ proto void ming_setscale(int scale)
- Set scale (?) */
-PHP_FUNCTION(ming_setScale)
-{
- zval **num;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &num) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_double_ex(num);
- Ming_setScale(FLOAT_Z_DVAL_PP(num));
-}
-/* }}} */
-
-/* {{{ proto void ming_useswfversion(int version)
- Use SWF version (?) */
-PHP_FUNCTION(ming_useSWFVersion)
-{
- zval **num;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &num) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long_ex(num);
- Ming_useSWFVersion(Z_LVAL_PP(num));
-}
-/* }}} */
-
-#ifdef HAVE_NEW_MING
-/* {{{ proto void ming_useconstants(int use)
- Use constant pool (?) */
-PHP_FUNCTION(ming_useConstants)
-{
- zval **num;
-
- if(ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &num) == FAILURE)
- WRONG_PARAM_COUNT;
-
- convert_to_long_ex(num);
-
- Ming_useConstants(Z_LVAL_PP(num));
-}
-/* }}} */
-#endif
-
-static int le_swfmoviep;
-static int le_swfshapep;
-static int le_swffillp;
-static int le_swfgradientp;
-static int le_swfbitmapp;
-static int le_swffontp;
-static int le_swftextp;
-static int le_swftextfieldp;
-static int le_swfdisplayitemp;
-static int le_swfbuttonp;
-static int le_swfactionp;
-static int le_swfmorphp;
-static int le_swfspritep;
-static int le_swfinputp;
-static int le_swfsoundp;
-#ifdef HAVE_NEW_MING
-static int le_swffontcharp;
-static int le_swfsoundinstancep;
-static int le_swfvideostreamp;
-static int le_swfprebuiltclipp;
-#endif
-
-static zend_class_entry *movie_class_entry_ptr;
-static zend_class_entry *shape_class_entry_ptr;
-static zend_class_entry *fill_class_entry_ptr;
-static zend_class_entry *gradient_class_entry_ptr;
-static zend_class_entry *bitmap_class_entry_ptr;
-static zend_class_entry *font_class_entry_ptr;
-static zend_class_entry *text_class_entry_ptr;
-static zend_class_entry *textfield_class_entry_ptr;
-static zend_class_entry *displayitem_class_entry_ptr;
-static zend_class_entry *button_class_entry_ptr;
-static zend_class_entry *action_class_entry_ptr;
-static zend_class_entry *morph_class_entry_ptr;
-static zend_class_entry *sprite_class_entry_ptr;
-static zend_class_entry *sound_class_entry_ptr;
-#ifdef HAVE_NEW_MING
-static zend_class_entry *fontchar_class_entry_ptr;
-static zend_class_entry *soundinstance_class_entry_ptr;
-static zend_class_entry *videostream_class_entry_ptr;
-static zend_class_entry *prebuiltclip_class_entry_ptr;
-#endif
-
-/* {{{ internal function SWFgetProperty
-*/
-static void *SWFgetProperty(zval *id, char *name, int namelen, int proptype TSRMLS_DC)
-{
- zval **tmp;
- int id_to_find;
- void *property;
- int type;
-
- if (id) {
- if (zend_hash_find(Z_OBJPROP_P(id), name, namelen+1, (void **)&tmp) == FAILURE) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to find property %s", name);
- return NULL;
- }
- id_to_find = Z_LVAL_PP(tmp);
- } else {
- return NULL;
- }
-
- property = zend_list_find(id_to_find, &type);
-
- if (!property || type != proptype) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to find identifier (%d)", id_to_find);
- return NULL;
- }
-
- return property;
-}
-/* }}} */
-
-/* {{{ SWFCharacter - not a real class
-*/
-
-/* {{{ internal function SWFCharacter getCharacter(zval *id)
- Returns the SWFCharacter contained in zval *id */
-static SWFCharacter getCharacter(zval *id TSRMLS_DC)
-{
- if (Z_OBJCE_P(id) == shape_class_entry_ptr)
- return (SWFCharacter)getShape(id TSRMLS_CC);
- else if (Z_OBJCE_P(id) == font_class_entry_ptr)
- return (SWFCharacter)getFont(id TSRMLS_CC);
- else if (Z_OBJCE_P(id) == text_class_entry_ptr)
- return (SWFCharacter)getText(id TSRMLS_CC);
- else if (Z_OBJCE_P(id) == textfield_class_entry_ptr)
- return (SWFCharacter)getTextField(id TSRMLS_CC);
- else if (Z_OBJCE_P(id) == button_class_entry_ptr)
- return (SWFCharacter)getButton(id TSRMLS_CC);
- else if (Z_OBJCE_P(id) == morph_class_entry_ptr)
- return (SWFCharacter)getMorph(id TSRMLS_CC);
- else if (Z_OBJCE_P(id) == sprite_class_entry_ptr)
- return (SWFCharacter)getSprite(id TSRMLS_CC);
- else if (Z_OBJCE_P(id) == bitmap_class_entry_ptr)
- return (SWFCharacter)getBitmap(id TSRMLS_CC);
- else if(Z_OBJCE_P(id) == sound_class_entry_ptr)
- return (SWFCharacter)getSound(id TSRMLS_CC);
-/*
- else if(Z_OBJCE_P(id) == soundinstance_class_entry_ptr)
- return (SWFCharacter)getSoundInstance(id TSRMLS_CC);
-*/
- else
- php_error_docref(NULL TSRMLS_CC, E_ERROR, "Called object is not an SWFCharacter");
- return NULL;
-}
-/* }}} */
-/* }}} */
-
-/* {{{ getInput - utility func for making an SWFInput from an fopened resource
-*/
-static void destroy_SWFInput_resource(zend_rsrc_list_entry *resource TSRMLS_DC)
-{
- destroySWFInput((SWFInput)resource->ptr);
-}
-
-static SWFInput getInput(zval **zfile TSRMLS_DC)
-{
- FILE *file;
- php_stream *stream;
- SWFInput input;
-
- php_stream_from_zval_no_verify(stream, zfile);
-
- if (stream == NULL)
- return NULL;
-
- if (php_stream_cast(stream, PHP_STREAM_AS_STDIO, (void *) &file, REPORT_ERRORS) != SUCCESS) {
- return NULL;
- }
-
- input = newSWFInput_file(file);
- zend_list_addref(Z_LVAL_PP(zfile));
- zend_list_addref(zend_list_insert(input, le_swfinputp));
- return input;
-}
-/* }}} */
-
-/* {{{ SWFAction
-*/
-/* {{{ proto object swfaction::__construct(string)
- Returns a new SWFAction object, compiling the given script */
-PHP_METHOD(swfaction, __construct)
-{
- SWFAction action;
- zval **script;
- int ret;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &script) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_string_ex(script);
- action = compileSWFActionCode(Z_STRVAL_PP(script));
-
- if (!action) {
- php_error_docref(NULL TSRMLS_CC, E_ERROR, "Couldn't compile actionscript");
- }
-
- ret = zend_list_insert(action, le_swfactionp);
-
- object_init_ex(getThis(), action_class_entry_ptr);
- add_property_resource(getThis(), "action", ret);
- zend_list_addref(ret);
-}
-/* no destructor for SWFAction, it's not a character */
-/* }}} */
-
-/* {{{ internal function getAction
- Returns the SWFAction object contained in zval *id */
-static SWFAction getAction(zval *id TSRMLS_DC)
-{
- void *action = SWFgetProperty(id, "action", 6, le_swfactionp TSRMLS_CC);
-
- if (!action) {
- php_error_docref(NULL TSRMLS_CC, E_ERROR, "Called object is not an SWFAction");
- }
- return (SWFAction)action;
-}
-/* }}} */
-
-static zend_function_entry swfaction_functions[] = {
- PHP_ME(swfaction, __construct, NULL, 0)
- { NULL, NULL, NULL }
-};
-/* }}} */
-
-/* {{{ SWFBitmap
-*/
-/* {{{ proto class swfbitmap::__construct(mixed file [, mixed maskfile])
- Returns a new SWFBitmap object from jpg (with optional mask) or dbl file */
-PHP_METHOD(swfbitmap, __construct)
-{
- zval **zfile, **zmask = NULL;
- SWFBitmap bitmap;
- SWFInput input, maskinput;
- int ret;
-
- if (ZEND_NUM_ARGS() == 1) {
- if (zend_get_parameters_ex(1, &zfile) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- } else if (ZEND_NUM_ARGS() == 2) {
- if (zend_get_parameters_ex(2, &zfile, &zmask) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- } else {
- WRONG_PARAM_COUNT;
- }
-
- if (Z_TYPE_PP(zfile) != IS_RESOURCE) {
- convert_to_string_ex(zfile);
- PHP_MING_FILE_CHK(Z_STRVAL_PP(zfile));
- input = newSWFInput_buffer(Z_STRVAL_PP(zfile), Z_STRLEN_PP(zfile));
- zend_list_addref(zend_list_insert(input, le_swfinputp));
- } else {
- input = getInput(zfile TSRMLS_CC);
- }
-
- if (zmask != NULL) {
- if (Z_TYPE_PP(zmask) != IS_RESOURCE) {
- convert_to_string_ex(zmask);
- maskinput = newSWFInput_buffer(Z_STRVAL_PP(zmask), Z_STRLEN_PP(zmask));
- zend_list_addref(zend_list_insert(maskinput, le_swfinputp));
- } else {
- maskinput = getInput(zmask TSRMLS_CC);
- }
- bitmap = newSWFJpegWithAlpha_fromInput(input, maskinput);
- } else {
- bitmap = newSWFBitmap_fromInput(input);
- }
-
- ret = zend_list_insert(bitmap, le_swfbitmapp);
- object_init_ex(getThis(), bitmap_class_entry_ptr);
- add_property_resource(getThis(), "bitmap", ret);
- zend_list_addref(ret);
-}
-
-static void destroy_SWFBitmap_resource(zend_rsrc_list_entry *resource TSRMLS_DC)
-{
- destroySWFBitmap((SWFBitmap)resource->ptr);
-}
-/* }}} */
-
-/* {{{ internal function getBitmap
- Returns the SWFBitmap object contained in zval *id */
-static SWFBitmap getBitmap(zval *id TSRMLS_DC)
-{
- void *bitmap = SWFgetProperty(id, "bitmap", 6, le_swfbitmapp TSRMLS_CC);
-
- if (!bitmap) {
- php_error_docref(NULL TSRMLS_CC, E_ERROR, "Called object is not an SWFBitmap");
- }
- return (SWFBitmap)bitmap;
-}
-/* }}} */
-
-/* {{{ proto float swfbitmap::getWidth()
- Returns the width of this bitmap */
-PHP_METHOD(swfbitmap, getWidth)
-{
- RETURN_DOUBLE(SWFBitmap_getWidth(getBitmap(getThis() TSRMLS_CC)));
-}
-/* }}} */
-
-/* {{{ proto float swfbitmap::getHeight()
- Returns the height of this bitmap */
-PHP_METHOD(swfbitmap, getHeight)
-{
- RETURN_DOUBLE(SWFBitmap_getHeight(getBitmap(getThis() TSRMLS_CC)));
-}
-/* }}} */
-
-static zend_function_entry swfbitmap_functions[] = {
- PHP_ME(swfbitmap, __construct, NULL, 0)
- PHP_ME(swfbitmap, getWidth, NULL, 0)
- PHP_ME(swfbitmap, getHeight, NULL, 0)
- { NULL, NULL, NULL }
-};
-
-/* }}} */
-
-/* {{{ SWFButton
-*/
-/* {{{ proto object swfbutton::__construct()
- Returns a new SWFButton object */
-PHP_METHOD(swfbutton, __construct)
-{
- SWFButton button = newSWFButton();
- int ret = zend_list_insert(button, le_swfbuttonp);
-
- object_init_ex(getThis(), button_class_entry_ptr);
- add_property_resource(getThis(), "button", ret);
- zend_list_addref(ret);
-}
-
-static void destroy_SWFButton_resource(zend_rsrc_list_entry *resource TSRMLS_DC)
-{
- destroySWFButton((SWFButton)resource->ptr);
-}
-/* }}} */
-
-/* {{{ internal function getButton
- Returns the SWFButton object contained in zval *id */
-static SWFButton getButton(zval *id TSRMLS_DC)
-{
- void *button = SWFgetProperty(id, "button", 6, le_swfbuttonp TSRMLS_CC);
-
- if (!button) {
- php_error_docref(NULL TSRMLS_CC, E_ERROR, "Called object is not an SWFButton");
- }
- return (SWFButton)button;
-}
-/* }}} */
-
-/* {{{ proto void swfbutton::setHit(object SWFCharacter)
- Sets the character for this button's hit test state */
-PHP_METHOD(swfbutton, setHit)
-{
- zval **zchar;
- SWFButton button = getButton(getThis() TSRMLS_CC);
- SWFCharacter character;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &zchar) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_object_ex(zchar);
- character = getCharacter(*zchar TSRMLS_CC);
- SWFButton_addShape(button, character, SWFBUTTONRECORD_HITSTATE);
-}
-/* }}} */
-
-/* {{{ proto void swfbutton::setOver(object SWFCharacter)
- Sets the character for this button's over state */
-PHP_METHOD(swfbutton, setOver)
-{
- zval **zchar;
- SWFButton button = getButton(getThis() TSRMLS_CC);
- SWFCharacter character;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &zchar) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_object_ex(zchar);
- character = getCharacter(*zchar TSRMLS_CC);
- SWFButton_addShape(button, character, SWFBUTTONRECORD_OVERSTATE);
-}
-/* }}} */
-
-/* {{{ proto void swfbutton::setUp(object SWFCharacter)
- Sets the character for this button's up state */
-PHP_METHOD(swfbutton, setUp)
-{
- zval **zchar;
- SWFButton button = getButton(getThis() TSRMLS_CC);
- SWFCharacter character;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &zchar) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_object_ex(zchar);
- character = getCharacter(*zchar TSRMLS_CC);
- SWFButton_addShape(button, character, SWFBUTTONRECORD_UPSTATE);
-}
-/* }}} */
-
-/* {{{ proto void swfbutton::setDown(object SWFCharacter)
- Sets the character for this button's down state */
-PHP_METHOD(swfbutton, setDown)
-{
- zval **zchar;
- SWFButton button = getButton(getThis() TSRMLS_CC);
- SWFCharacter character;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &zchar) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_object_ex(zchar);
- character = getCharacter(*zchar TSRMLS_CC);
- SWFButton_addShape(button, character, SWFBUTTONRECORD_DOWNSTATE);
-}
-/* }}} */
-
-/* {{{ proto void swfbutton::addShape(object SWFCharacter, int flags)
- Sets the character to display for the condition described in flags */
-PHP_METHOD(swfbutton, addShape)
-{
- zval **zchar, **flags;
- SWFButton button = getButton(getThis() TSRMLS_CC);
- SWFCharacter character;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &zchar, &flags) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_object_ex(zchar);
- character = getCharacter(*zchar TSRMLS_CC);
- convert_to_long_ex(flags);
- SWFButton_addShape(button, character, BYTE_Z_LVAL_PP(flags));
-}
-/* }}} */
-
-#ifdef HAVE_NEW_MING
-/* {{{ proto void swfbutton::setMenu(int flag)
- enable track as menu button behaviour */
-
-PHP_METHOD(swfbutton, setMenu)
-{
- zval **zflag;
- SWFButton button = getButton(getThis() TSRMLS_CC);
- if(ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &zflag) == FAILURE)
- WRONG_PARAM_COUNT;
- convert_to_long_ex(zflag);
-
- SWFButton_setMenu(button, Z_LVAL_PP(zflag));
-}
-/* }}} */
-#endif
-
-/* {{{ proto void swfbutton::setAction(object SWFAction)
- Sets the action to perform when button is pressed */
-PHP_METHOD(swfbutton, setAction)
-{
- zval **zaction;
- SWFButton button = getButton(getThis() TSRMLS_CC);
- SWFAction action;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &zaction) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_object_ex(zaction);
- action = getAction(*zaction TSRMLS_CC);
- SWFButton_addAction(button, action, SWFBUTTON_OVERDOWNTOOVERUP);
-}
-/* }}} */
-
-#ifdef HAVE_NEW_MING
-/* {{{ proto SWFSoundInstance swfbutton::addASound(SWFSound sound, int flags)
- associates a sound with a button transition
- NOTE: the transitions are all wrong _UP, _OVER, _DOWN _HIT */
-
-PHP_METHOD(swfbutton, addSound)
-{
- zval **zsound, **flags;
- SWFButton button = getButton(getThis() TSRMLS_CC);
- SWFSound sound;
- SWFSoundInstance item;
- int ret;
-
- if(ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &zsound, &flags) == FAILURE)
- WRONG_PARAM_COUNT;
-
- convert_to_object_ex(zsound);
- sound = getSound(*zsound TSRMLS_CC);
-
- convert_to_long_ex(flags);
-
- item = SWFButton_addSound(button, sound, Z_LVAL_PP(flags));
-
- if(item != NULL) {
- /* try and create a soundinstance object */
- ret = zend_list_insert(item, le_swfsoundinstancep);
- object_init_ex(return_value, soundinstance_class_entry_ptr);
- add_property_resource(return_value, "soundinstance", ret);
- }
-}
-/* }}} */
-#endif
-
-/* {{{ proto void swfbutton::addAction(object SWFAction, int flags)
- Sets the action to perform when conditions described in flags is met */
-PHP_METHOD(swfbutton, addAction)
-{
- zval **zaction, **flags;
- SWFButton button = getButton(getThis() TSRMLS_CC);
- SWFAction action;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &zaction, &flags) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_object_ex(zaction);
- action = getAction(*zaction TSRMLS_CC);
- convert_to_long_ex(flags);
- SWFButton_addAction(button, action, Z_LVAL_PP(flags));
-}
-/* }}} */
-
-/* {{{ proto int ming_keypress(string str)
- Returns the action flag for keyPress(char) */
-PHP_FUNCTION(ming_keypress)
-{
- zval **key;
- char c;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &key) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_string_ex(key);
-
- if (Z_STRLEN_PP(key) > 1) {
- php_error_docref(NULL TSRMLS_CC, E_ERROR, "Only one character expected");
- }
-
- c = Z_STRVAL_PP(key)[0];
- RETURN_LONG((c&0x7f)<<9);
-}
-/* }}} */
-
-static zend_function_entry swfbutton_functions[] = {
- PHP_ME(swfbutton, __construct, NULL, 0)
- PHP_ME(swfbutton, setHit, NULL, 0)
- PHP_ME(swfbutton, setOver, NULL, 0)
- PHP_ME(swfbutton, setUp, NULL, 0)
- PHP_ME(swfbutton, setDown, NULL, 0)
- PHP_ME(swfbutton, setAction, NULL, 0)
- PHP_ME(swfbutton, addShape, NULL, 0)
-#ifdef HAVE_NEW_MING
- PHP_ME(swfbutton, setMenu, NULL, 0)
-#endif
- PHP_ME(swfbutton, addAction, NULL, 0)
-#ifdef HAVE_NEW_MING
- PHP_ME(swfbutton, addSound, NULL, 0)
-#endif
- { NULL, NULL, NULL }
-};
-
-/* }}} */
-
-/* {{{ SWFDisplayitem
-*/
-/* {{{ internal function getDisplayItem
- Returns the SWFDisplayItem contained in zval *id */
-static SWFDisplayItem getDisplayItem(zval *id TSRMLS_DC)
-{
- void *item = SWFgetProperty(id, "displayitem", 11, le_swfdisplayitemp TSRMLS_CC);
-
- if (!item) {
- php_error_docref(NULL TSRMLS_CC, E_ERROR, "Called object is not an SWFDisplayItem");
- }
-
- return (SWFDisplayItem)item;
-}
-/* }}} */
-
-/* {{{ proto void swfdisplayitem::moveTo(int x, int y)
- Moves this SWFDisplayItem to movie coordinates (x, y) */
-PHP_METHOD(swfdisplayitem, moveTo)
-{
- zval **x, **y;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &x, &y) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_double_ex(x);
- convert_to_double_ex(y);
- SWFDisplayItem_moveTo(getDisplayItem(getThis() TSRMLS_CC), FLOAT_Z_DVAL_PP(x), FLOAT_Z_DVAL_PP(y));
-}
-/* }}} */
-
-/* {{{ proto void swfdisplayitem::move(float dx, float dy)
- Displaces this SWFDisplayItem by (dx, dy) in movie coordinates */
-PHP_METHOD(swfdisplayitem, move)
-{
- zval **x, **y;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &x, &y) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_double_ex(x);
- convert_to_double_ex(y);
- SWFDisplayItem_move(getDisplayItem(getThis() TSRMLS_CC), FLOAT_Z_DVAL_PP(x), FLOAT_Z_DVAL_PP(y));
-}
-/* }}} */
-
-/* {{{ proto void swfdisplayitem::scaleTo(float xScale [, float yScale])
- Scales this SWFDisplayItem by xScale in the x direction, yScale in the y, or both to xScale if only one arg */
-PHP_METHOD(swfdisplayitem, scaleTo)
-{
- zval **x, **y;
-
- if (ZEND_NUM_ARGS() == 1) {
- if (zend_get_parameters_ex(1, &x) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_double_ex(x);
- SWFDisplayItem_scaleTo(getDisplayItem(getThis() TSRMLS_CC), FLOAT_Z_DVAL_PP(x), FLOAT_Z_DVAL_PP(x));
- } else if (ZEND_NUM_ARGS() == 2) {
- if (zend_get_parameters_ex(2, &x, &y) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_double_ex(x);
- convert_to_double_ex(y);
- SWFDisplayItem_scaleTo(getDisplayItem(getThis() TSRMLS_CC), FLOAT_Z_DVAL_PP(x), FLOAT_Z_DVAL_PP(y));
- } else {
- WRONG_PARAM_COUNT;
- }
-}
-/* }}} */
-
-/* {{{ proto void swfdisplayitem::scale(float xScale, float yScale)
- Multiplies this SWFDisplayItem's current x scale by xScale, its y scale by yScale */
-PHP_METHOD(swfdisplayitem, scale)
-{
- zval **x, **y;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &x, &y) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_double_ex(x);
- convert_to_double_ex(y);
- SWFDisplayItem_scale(getDisplayItem(getThis() TSRMLS_CC), FLOAT_Z_DVAL_PP(x), FLOAT_Z_DVAL_PP(y));
-}
-/* }}} */
-
-/* {{{ proto void swfdisplayitem::rotateTo(float degrees)
- Rotates this SWFDisplayItem the given (clockwise) degrees from its original orientation */
-PHP_METHOD(swfdisplayitem, rotateTo)
-{
- zval **degrees;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &degrees) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_double_ex(degrees);
- SWFDisplayItem_rotateTo(getDisplayItem(getThis() TSRMLS_CC), FLOAT_Z_DVAL_PP(degrees));
-}
-/* }}} */
-
-/* {{{ proto void swfdisplayitem::rotate(float degrees)
- Rotates this SWFDisplayItem the given (clockwise) degrees from its current orientation */
-PHP_METHOD(swfdisplayitem, rotate)
-{
- zval **degrees;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &degrees) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_double_ex(degrees);
- SWFDisplayItem_rotate(getDisplayItem(getThis() TSRMLS_CC), FLOAT_Z_DVAL_PP(degrees));
-}
-/* }}} */
-
-/* {{{ proto void swfdisplayitem::skewXTo(float xSkew)
- Sets this SWFDisplayItem's x skew value to xSkew */
-PHP_METHOD(swfdisplayitem, skewXTo)
-{
- zval **x;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &x) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_double_ex(x);
- SWFDisplayItem_skewXTo(getDisplayItem(getThis() TSRMLS_CC), FLOAT_Z_DVAL_PP(x));
-}
-/* }}} */
-
-/* {{{ proto void swfdisplayitem::skewX(float xSkew)
- Adds xSkew to this SWFDisplayItem's x skew value */
-PHP_METHOD(swfdisplayitem, skewX)
-{
- zval **x;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &x) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_double_ex(x);
- SWFDisplayItem_skewX(getDisplayItem(getThis() TSRMLS_CC), FLOAT_Z_DVAL_PP(x));
-}
-/* }}} */
-
-/* {{{ proto void swfdisplayitem::skewYTo(float ySkew)
- Sets this SWFDisplayItem's y skew value to ySkew */
-PHP_METHOD(swfdisplayitem, skewYTo)
-{
- zval **y;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &y) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_double_ex(y);
- SWFDisplayItem_skewYTo(getDisplayItem(getThis() TSRMLS_CC), FLOAT_Z_DVAL_PP(y));
-}
-/* }}} */
-
-/* {{{ proto void swfdisplayitem::skewY(float ySkew)
- Adds ySkew to this SWFDisplayItem's y skew value */
-PHP_METHOD(swfdisplayitem, skewY)
-{
- zval **y;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &y) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_double_ex(y);
- SWFDisplayItem_skewY(getDisplayItem(getThis() TSRMLS_CC), FLOAT_Z_DVAL_PP(y));
-}
-/* }}} */
-
-/* {{{ proto void swfdisplayitem::setMatrix(float a, float b, float c, float d, float x, float y)
- Sets the item's transform matrix */
-PHP_METHOD(swfdisplayitem, setMatrix)
-{
- zval **a, **b, **c, **d, **x, **y;
-
- if (ZEND_NUM_ARGS() != 6 || zend_get_parameters_ex(6, &a, &b, &c, &d, &x, &y) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_double_ex(a);
- convert_to_double_ex(b);
- convert_to_double_ex(c);
- convert_to_double_ex(d);
- convert_to_double_ex(x);
- convert_to_double_ex(y);
-
- SWFDisplayItem_setMatrix( getDisplayItem(getThis() TSRMLS_CC),
- FLOAT_Z_DVAL_PP(a), FLOAT_Z_DVAL_PP(b), FLOAT_Z_DVAL_PP(c), FLOAT_Z_DVAL_PP(d), FLOAT_Z_DVAL_PP(x), FLOAT_Z_DVAL_PP(y)
- );
-}
-/* }}} */
-
-/* {{{ proto void swfdisplayitem::setDepth(int depth)
- Sets this SWFDisplayItem's z-depth to depth. Items with higher depth values are drawn on top of those with lower values */
-PHP_METHOD(swfdisplayitem, setDepth)
-{
- zval **depth;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &depth) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long_ex(depth);
- SWFDisplayItem_setDepth(getDisplayItem(getThis() TSRMLS_CC), Z_LVAL_PP(depth));
-}
-/* }}} */
-
-/* {{{ proto void swfdisplayitem::setRatio(float ratio)
- Sets this SWFDisplayItem's ratio to ratio. Obviously only does anything if displayitem was created from an SWFMorph */
-PHP_METHOD(swfdisplayitem, setRatio)
-{
- zval **ratio;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &ratio) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_double_ex(ratio);
- SWFDisplayItem_setRatio(getDisplayItem(getThis() TSRMLS_CC), FLOAT_Z_DVAL_PP(ratio));
-}
-/* }}} */
-
-/* {{{ proto void swfdisplayitem::addColor(int r, int g, int b [, int a])
- Sets the add color part of this SWFDisplayItem's CXform to (r, g, b [, a]), a defaults to 0 */
-PHP_METHOD(swfdisplayitem, addColor)
-{
- zval **r, **g, **b, **za;
- int a = 0;
-
- if (ZEND_NUM_ARGS() == 4) {
- if (zend_get_parameters_ex(4, &r, &g, &b, &za) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long_ex(za);
- a = Z_LVAL_PP(za);
- } else if (ZEND_NUM_ARGS() == 3) {
- if (zend_get_parameters_ex(3, &r, &g, &b) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- } else {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long_ex(r);
- convert_to_long_ex(g);
- convert_to_long_ex(b);
-
- SWFDisplayItem_setColorAdd(getDisplayItem(getThis() TSRMLS_CC), Z_LVAL_PP(r), Z_LVAL_PP(g), Z_LVAL_PP(b), a);
-}
-/* }}} */
-
-/* {{{ proto void swfdisplayitem::multColor(float r, float g, float b [, float a])
- Sets the multiply color part of this SWFDisplayItem's CXform to (r, g, b [, a]), a defaults to 1.0 */
-PHP_METHOD(swfdisplayitem, multColor)
-{
- zval **r, **g, **b, **za;
- float a = 1.0f;
-
- if (ZEND_NUM_ARGS() == 4) {
- if (zend_get_parameters_ex(4, &r, &g, &b, &za) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_double_ex(za);
- a = FLOAT_Z_DVAL_PP(za);
- } else if (ZEND_NUM_ARGS() == 3) {
- if (zend_get_parameters_ex(3, &r, &g, &b) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- } else {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_double_ex(r);
- convert_to_double_ex(g);
- convert_to_double_ex(b);
-
- SWFDisplayItem_setColorMult(getDisplayItem(getThis() TSRMLS_CC), FLOAT_Z_DVAL_PP(r), FLOAT_Z_DVAL_PP(g), FLOAT_Z_DVAL_PP(b), a);
-}
-/* }}} */
-
-/* {{{ proto void swfdisplayitem::setName(string name)
- Sets this SWFDisplayItem's name to name */
-PHP_METHOD(swfdisplayitem, setName)
-{
- zval **name;
- SWFDisplayItem item = getDisplayItem(getThis() TSRMLS_CC);
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &name) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_string_ex(name);
- SWFDisplayItem_setName(item, Z_STRVAL_PP(name));
-}
-/* }}} */
-
-/* {{{ proto void swfdisplayitem::addAction(object SWFAction, int flags)
- Adds this SWFAction to the given SWFSprite instance */
-PHP_METHOD(swfdisplayitem, addAction)
-{
- zval **zaction, **flags;
- SWFAction action;
- SWFDisplayItem item = getDisplayItem(getThis() TSRMLS_CC);
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &zaction, &flags) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_object_ex(zaction);
- convert_to_long_ex(flags);
- action = getAction(*zaction TSRMLS_CC);
- SWFDisplayItem_addAction(item, action, Z_LVAL_PP(flags));
-}
-/* }}} */
-
-#ifdef HAVE_NEW_MING
-/* {{{ swfdisplayitem_remove */
-
-PHP_METHOD(swfdisplayitem, remove)
-{
- SWFDisplayItem item = getDisplayItem(getThis() TSRMLS_CC);
-
- if(ZEND_NUM_ARGS() != 0)
- WRONG_PARAM_COUNT;
-
- SWFDisplayItem_remove(item);
-}
-/* }}} */
-
-/* {{{ proto void swfdisplayitem::setMaskLevel(int level)
- defines a MASK layer at level */
-
-PHP_METHOD(swfdisplayitem, setMaskLevel)
-{
- zval **level;
-
- if(ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &level) == FAILURE)
- WRONG_PARAM_COUNT;
-
- convert_to_long_ex(level);
-
- SWFDisplayItem_setMaskLevel(getDisplayItem(getThis() TSRMLS_CC), Z_LVAL_PP(level));
-}
-/* }}} */
-
-/* {{{ proto void swfdisplayitem::endMask()
- another way of defining a MASK layer */
-
-PHP_METHOD(swfdisplayitem, endMask)
-{
- SWFDisplayItem item = getDisplayItem(getThis() TSRMLS_CC);
-
- if(ZEND_NUM_ARGS() != 0)
- WRONG_PARAM_COUNT;
-
- SWFDisplayItem_endMask(item);
-}
-/* }}} */
-
-/* {{{ swfdisplayitem_getX */
-
-PHP_METHOD(swfdisplayitem, getX)
-{
- float ret;
- SWFDisplayItem item = getDisplayItem(getThis() TSRMLS_CC);
-
- if(ZEND_NUM_ARGS() != 0)
- WRONG_PARAM_COUNT;
-
- ret = SWFDisplayItem_get_x(item);
- RETURN_DOUBLE(ret);
-}
-/* }}} */
-
-/* {{{ swfdisplayitem_getY */
-
-PHP_METHOD(swfdisplayitem, getY)
-{
- float ret;
- SWFDisplayItem item = getDisplayItem(getThis() TSRMLS_CC);
-
- if(ZEND_NUM_ARGS() != 0)
- WRONG_PARAM_COUNT;
-
- ret = SWFDisplayItem_get_y(item);
- RETURN_DOUBLE(ret);
-}
-/* }}} */
-
-/* {{{ swfdisplayitem_getXScale */
-
-PHP_METHOD(swfdisplayitem, getXScale)
-{
- float ret;
- SWFDisplayItem item = getDisplayItem(getThis() TSRMLS_CC);
-
- if(ZEND_NUM_ARGS() != 0)
- WRONG_PARAM_COUNT;
-
- ret = SWFDisplayItem_get_xScale(item);
- RETURN_DOUBLE(ret);
-}
-/* }}} */
-
-/* {{{ swfdisplayitem_getYScale */
-
-PHP_METHOD(swfdisplayitem, getYScale)
-{
- float ret;
- SWFDisplayItem item = getDisplayItem(getThis() TSRMLS_CC);
-
- if(ZEND_NUM_ARGS() != 0)
- WRONG_PARAM_COUNT;
-
- ret = SWFDisplayItem_get_yScale(item);
- RETURN_DOUBLE(ret);
-}
-/* }}} */
-
-/* {{{ swfdisplayitem_getXSkew */
-
-PHP_METHOD(swfdisplayitem, getXSkew)
-{
- float ret;
- SWFDisplayItem item = getDisplayItem(getThis() TSRMLS_CC);
-
- if(ZEND_NUM_ARGS() != 0)
- WRONG_PARAM_COUNT;
-
- ret = SWFDisplayItem_get_xSkew(item);
- RETURN_DOUBLE(ret);
-}
-/* }}} */
-
-/* {{{ swfdisplayitem_getYSkew */
-
-PHP_METHOD(swfdisplayitem, getYSkew)
-{
- float ret;
- SWFDisplayItem item = getDisplayItem(getThis() TSRMLS_CC);
-
- if(ZEND_NUM_ARGS() != 0)
- WRONG_PARAM_COUNT;
-
- ret = SWFDisplayItem_get_ySkew(item);
- RETURN_DOUBLE(ret);
-}
-/* }}} */
-
-/* {{{ swfdisplayitem_getRot */
-
-PHP_METHOD(swfdisplayitem, getRot)
-{
- float ret;
- SWFDisplayItem item = getDisplayItem(getThis() TSRMLS_CC);
-
- if(ZEND_NUM_ARGS() != 0)
- WRONG_PARAM_COUNT;
-
- ret = SWFDisplayItem_get_rot(item);
- RETURN_DOUBLE(ret);
-}
-/* }}} */
-#endif
-
-static zend_function_entry swfdisplayitem_functions[] = {
- PHP_ME(swfdisplayitem, moveTo, NULL, 0)
- PHP_ME(swfdisplayitem, move, NULL, 0)
- PHP_ME(swfdisplayitem, scaleTo, NULL, 0)
- PHP_ME(swfdisplayitem, scale, NULL, 0)
- PHP_ME(swfdisplayitem, rotateTo, NULL, 0)
- PHP_ME(swfdisplayitem, rotate, NULL, 0)
- PHP_ME(swfdisplayitem, skewXTo, NULL, 0)
- PHP_ME(swfdisplayitem, skewX, NULL, 0)
- PHP_ME(swfdisplayitem, skewYTo, NULL, 0)
- PHP_ME(swfdisplayitem, skewY, NULL, 0)
- PHP_ME(swfdisplayitem, setMatrix, NULL, 0)
- PHP_ME(swfdisplayitem, setDepth, NULL, 0)
- PHP_ME(swfdisplayitem, setRatio, NULL, 0)
- PHP_ME(swfdisplayitem, addColor, NULL, 0)
- PHP_ME(swfdisplayitem, multColor, NULL, 0)
- PHP_ME(swfdisplayitem, setName, NULL, 0)
- PHP_ME(swfdisplayitem, addAction, NULL, 0)
-#ifdef HAVE_NEW_MING
- PHP_ME(swfdisplayitem, remove, NULL, 0)
- PHP_ME(swfdisplayitem, setMaskLevel,NULL, 0)
- PHP_ME(swfdisplayitem, endMask, NULL, 0)
- PHP_ME(swfdisplayitem, getX, NULL, 0)
- PHP_ME(swfdisplayitem, getY, NULL, 0)
- PHP_ME(swfdisplayitem, getXScale, NULL, 0)
- PHP_ME(swfdisplayitem, getYScale, NULL, 0)
- PHP_ME(swfdisplayitem, getXSkew, NULL, 0)
- PHP_ME(swfdisplayitem, getYSkew, NULL, 0)
- PHP_ME(swfdisplayitem, getRot, NULL, 0)
-#endif
- { NULL, NULL, NULL }
-};
-
-/* }}} */
-
-/* {{{ SWFFill
-*/
-/* {{{ proto class swffill::__construct()
- Returns a new SWFFill object */
-PHP_METHOD(swffill, __construct)
-{
- php_error_docref(NULL TSRMLS_CC, E_ERROR, "Instantiating SWFFill won't do any good- use SWFShape::addFill() instead");
-}
-
-static void destroy_SWFFill_resource(zend_rsrc_list_entry *resource TSRMLS_DC)
-{
- /* this only destroys the shallow wrapper for SWFFillStyle,
- which SWFShape destroys. So everything's okay. I hope. */
-
- destroySWFFill((SWFFill)resource->ptr);
-}
-/* }}} */
-
-/* {{{ internal function getFill
- Returns the SWFFill object contained in zval *id */
-static SWFFill getFill(zval *id TSRMLS_DC)
-{
- void *fill = SWFgetProperty(id, "fill", 4, le_swffillp TSRMLS_CC);
-
- if (!fill) {
- php_error_docref(NULL TSRMLS_CC, E_ERROR, "Called object is not an SWFFill");
- }
- return (SWFFill)fill;
-}
-/* }}} */
-
-/* {{{ proto void swffill::moveTo(float x, float y)
- Moves this SWFFill to shape coordinates (x,y) */
-PHP_METHOD(swffill, moveTo)
-{
- zval **x, **y;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &x, &y) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_double_ex(x);
- convert_to_double_ex(y);
- SWFFill_moveTo(getFill(getThis() TSRMLS_CC), FLOAT_Z_DVAL_PP(x), FLOAT_Z_DVAL_PP(y));
-}
-/* }}} */
-
-/* {{{ proto void swffill::scaleTo(float xScale [, float yScale])
- Scales this SWFFill by xScale in the x direction, yScale in the y, or both to xScale if only one arg */
-PHP_METHOD(swffill, scaleTo)
-{
- zval **x, **y;
-
- if (ZEND_NUM_ARGS() == 1) {
- if (zend_get_parameters_ex(1, &x) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_double_ex(x);
- SWFFill_scaleXYTo(getFill(getThis() TSRMLS_CC), FLOAT_Z_DVAL_PP(x), FLOAT_Z_DVAL_PP(x));
- } else if (ZEND_NUM_ARGS() == 2) {
- if (zend_get_parameters_ex(2, &x, &y) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_double_ex(x);
- convert_to_double_ex(y);
- SWFFill_scaleXYTo(getFill(getThis() TSRMLS_CC), FLOAT_Z_DVAL_PP(x), FLOAT_Z_DVAL_PP(y));
- } else {
- WRONG_PARAM_COUNT;
- }
-}
-/* }}} */
-
-/* {{{ proto void swffill::rotateTo(float degrees)
- Rotates this SWFFill the given (clockwise) degrees from its original orientation */
-PHP_METHOD(swffill, rotateTo)
-{
- zval **degrees;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &degrees) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_double_ex(degrees);
- SWFFill_rotateTo(getFill(getThis() TSRMLS_CC), FLOAT_Z_DVAL_PP(degrees));
-}
-/* }}} */
-
-/* {{{ proto void swffill::skewXTo(float xSkew)
- Sets this SWFFill's x skew value to xSkew */
-PHP_METHOD(swffill, skewXTo)
-{
- zval **x;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &x) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_double_ex(x);
- SWFFill_skewXTo(getFill(getThis() TSRMLS_CC), FLOAT_Z_DVAL_PP(x));
-}
-/* }}} */
-
-/* {{{ proto void swffill::skewYTo(float ySkew)
- Sets this SWFFill's y skew value to ySkew */
-PHP_METHOD(swffill, skewYTo)
-{
- zval **y;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &y) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_double_ex(y);
- SWFFill_skewYTo(getFill(getThis() TSRMLS_CC), FLOAT_Z_DVAL_PP(y));
-}
-/* }}} */
-static zend_function_entry swffill_functions[] = {
- PHP_ME(swffill, __construct, NULL, 0)
- PHP_ME(swffill, moveTo, NULL, 0)
- PHP_ME(swffill, scaleTo, NULL, 0)
- PHP_ME(swffill, rotateTo, NULL, 0)
- PHP_ME(swffill, skewXTo, NULL, 0)
- PHP_ME(swffill, skewYTo, NULL, 0)
- { NULL, NULL, NULL }
-};
-
-/* }}} */
-
-/* {{{ SWFFontCharacter */
-#ifdef HAVE_NEW_MING
-
-/* {{{ internal function SWFText getFont(zval *id)
- Returns the Font object in zval *id */
-static
-SWFFontCharacter getFontCharacter(zval *id TSRMLS_DC)
-{
- void *font = SWFgetProperty(id, "fontcharacter", 13, le_swffontcharp TSRMLS_CC);
-
- if(!font)
- php_error(E_ERROR, "called object is not an SWFFontCharacter!");
-
- return (SWFFontCharacter)font;
-}
-/* }}} */
-
-static void destroy_SWFFontCharacter_resource(zend_rsrc_list_entry *resource TSRMLS_DC)
-{
- destroySWFBlock((SWFBlock)resource->ptr);
-}
-
-/* {{{ proto void swffontcha::raddChars(string)
- adds characters to a font for exporting font */
-PHP_METHOD(swffontchar, addChars)
-{
- zval **zstring;
-
- if(ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &zstring) == FAILURE)
- WRONG_PARAM_COUNT;
-
- convert_to_string_ex(zstring);
-
- SWFFontCharacter_addChars(getFontCharacter(getThis() TSRMLS_CC), Z_STRVAL_PP(zstring));
-}
-/* }}} */
-
-/* {{{ proto void swffontchar::addChars(string)
- adds characters to a font for exporting font */
-
-PHP_METHOD(swffontchar, addUTF8Chars)
-{
- zval **zstring;
-
- if(ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &zstring) == FAILURE)
- WRONG_PARAM_COUNT;
-
- convert_to_string_ex(zstring);
-
- SWFFontCharacter_addUTF8Chars(getFontCharacter(getThis() TSRMLS_CC), Z_STRVAL_PP(zstring));
-}
-/* }}} */
-
-static zend_function_entry swffontchar_functions[] = {
- PHP_ME(swffontchar, addChars, NULL, 0)
- PHP_ME(swffontchar, addUTF8Chars, NULL, 0)
- { NULL, NULL, NULL }
-};
-
-#endif
-/* }}} */
-
-/* {{{ SWFFont
-*/
-/* {{{ internal function SWFText getFont(zval *id)
- Returns the Font object in zval *id */
-static SWFFont getFont(zval *id TSRMLS_DC)
-{
- void *font = SWFgetProperty(id, "font", 4, le_swffontp TSRMLS_CC);
-
- if (!font) {
- php_error_docref(NULL TSRMLS_CC, E_ERROR, "Called object is not an SWFFont");
- }
- return (SWFFont)font;
-}
-/* }}} */
-
-/* {{{ proto object swffont::__construct(string filename)
- Returns a new SWFFont object from given file */
-PHP_METHOD(swffont, __construct)
-{
- zval **zfile;
- SWFFont font;
- int ret;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &zfile) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_string_ex(zfile);
-
- if (strcmp(Z_STRVAL_PP(zfile)+Z_STRLEN_PP(zfile)-4, ".fdb") == 0) {
- php_stream * stream;
- FILE * file;
-
- stream = php_stream_open_wrapper(Z_STRVAL_PP(zfile), "rb", REPORT_ERRORS|ENFORCE_SAFE_MODE, NULL);
-
- if (stream == NULL) {
- RETURN_FALSE;
- }
-
- if (FAILURE == php_stream_cast(stream, PHP_STREAM_AS_STDIO, (void*)&file, REPORT_ERRORS)) {
- php_stream_close(stream);
- RETURN_FALSE;
- }
-
- font = loadSWFFontFromFile(file);
- php_stream_close(stream);
- } else {
- PHP_MING_FILE_CHK(Z_STRVAL_PP(zfile));
- font = (SWFFont)newSWFBrowserFont(Z_STRVAL_PP(zfile));
- }
-
- ret = zend_list_insert(font, le_swffontp);
-
- object_init_ex(getThis(), font_class_entry_ptr);
- add_property_resource(getThis(), "font", ret);
- zend_list_addref(ret);
-}
-
-static void destroy_SWFFont_resource(zend_rsrc_list_entry *resource TSRMLS_DC)
-{
- destroySWFBlock((SWFBlock)resource->ptr);
-}
-/* }}} */
-
-/* {{{ proto float swffont::getWidth(string str)
- Calculates the width of the given string in this font at full height */
-PHP_METHOD(swffont, getWidth)
-{
- zval **zstring;
- float width;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &zstring) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex(zstring);
- width = SWFFont_getStringWidth(getFont(getThis() TSRMLS_CC), Z_STRVAL_PP(zstring));
- RETURN_DOUBLE(width);
-}
-/* }}} */
-
-#ifdef HAVE_NEW_MING
-/* {{{ proto int swffont::getUTF8Width(string)
- Calculates the width of the given string in this font at full height */
-
-PHP_METHOD(swffont, getUTF8Width)
-{
- zval **zstring;
- float width;
-
- if(ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &zstring) == FAILURE)
- WRONG_PARAM_COUNT;
-
- convert_to_string_ex(zstring);
-
- width = SWFFont_getUTF8StringWidth(getFont(getThis() TSRMLS_CC), Z_STRVAL_PP(zstring));
-
- RETURN_DOUBLE(width);
-}
-
-/* }}} */
-/* not sure about 0 bytes !!!!!!!!! */
-/* {{{ proto int swffont::getWideWidth(string)
- Calculates the width of the given string in this font at full height */
-/*
-PHP_METHOD(swffont, getWideWidth)
-{
- zval **zstring;
- float width;
-
- if(ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &zstring) == FAILURE)
- WRONG_PARAM_COUNT;
-
- convert_to_string_ex(zstring);
-
- width = SWFFont_getWideStringWidth(getFont(getThis() TSRMLS_CC), Z_STRVAL_PP(zstring));
-
- RETURN_DOUBLE(width);
-}
-*/
-/* }}} */
-#endif
-
-/* {{{ proto float swffont::getAscent()
- Returns the ascent of the font, or 0 if not available */
-PHP_METHOD(swffont, getAscent)
-{
- RETURN_DOUBLE(SWFFont_getAscent(getFont(getThis() TSRMLS_CC)));
-}
-/* }}} */
-
-/* {{{ proto float swffont::getDescent()
- Returns the descent of the font, or 0 if not available */
-PHP_METHOD(swffont, getDescent)
-{
- RETURN_DOUBLE(SWFFont_getDescent(getFont(getThis() TSRMLS_CC)));
-}
-/* }}} */
-
-/* {{{ proto float swffont::getLeading()
- Returns the leading of the font, or 0 if not available */
-PHP_METHOD(swffont, getLeading)
-{
- RETURN_DOUBLE(SWFFont_getLeading(getFont(getThis() TSRMLS_CC)));
-}
-/* }}} */
-
-#ifdef HAVE_NEW_MING
-/* {{{ proto void swffont::addChars(string)
- adds characters to a font required within textfields */
-/*
-PHP_METHOD(swffont, addChars)
-{
- zval **zstring;
-
- if(ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &zstring) == FAILURE)
- WRONG_PARAM_COUNT;
-
- convert_to_string_ex(zstring);
-
- SWFFont_addChars(getFont(getThis() TSRMLS_CC), Z_STRVAL_PP(zstring));
-}
-*/
-/* }}} */
-
-/* {{{ proto string swffont::getShape(code)
- Returns the glyph shape of a char as a text string */
-PHP_METHOD(swffont, getShape)
-{
- zval **zcode;
- char *result;
-
- if(ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &zcode) == FAILURE)
- WRONG_PARAM_COUNT;
-
- convert_to_long_ex(zcode);
-
- result = SWFFont_getShape(getFont(getThis() TSRMLS_CC), Z_LVAL_PP(zcode));
- RETVAL_STRING(result, 1);
- free(result);
-}
-/* }}} */
-
-#endif
-
-static zend_function_entry swffont_functions[] = {
- PHP_ME(swffont, __construct, NULL, 0)
- PHP_ME(swffont, getWidth, NULL, 0)
-#ifdef HAVE_NEW_MING
- PHP_ME(swffont, getUTF8Width, NULL, 0)
-/* PHP_ME(swffont, getwidewidth, NULL, 0)*/
-#endif
- PHP_ME(swffont, getAscent, NULL, 0)
- PHP_ME(swffont, getDescent, NULL, 0)
- PHP_ME(swffont, getLeading, NULL, 0)
-#ifdef HAVE_NEW_MING
-/* PHP_ME(swffont, addchars, NULL, 0)*/
- PHP_ME(swffont, getShape, NULL, 0)
-#endif
- { NULL, NULL, NULL }
-};
-
-/* }}} */
-
-/* {{{ SWFGradient
-*/
-/* {{{ proto class swfgradient::__construct()
- Returns a new SWFGradient object */
-PHP_METHOD(swfgradient, __construct)
-{
- SWFGradient gradient = newSWFGradient();
- int ret = zend_list_insert(gradient, le_swfgradientp);
-
- object_init_ex(getThis(), gradient_class_entry_ptr);
- add_property_resource(getThis(), "gradient", ret);
- zend_list_addref(ret);
-}
-
-static void destroy_SWFGradient_resource(zend_rsrc_list_entry *resource TSRMLS_DC)
-{
- destroySWFGradient((SWFGradient)resource->ptr);
-}
-/* }}} */
-
-/* {{{ internal function getGradient
- Returns the SWFGradient object contained in zval *id */
-static SWFGradient getGradient(zval *id TSRMLS_DC)
-{
- void *gradient = SWFgetProperty(id, "gradient", 8, le_swfgradientp TSRMLS_CC);
-
- if (!gradient) {
- php_error_docref(NULL TSRMLS_CC, E_ERROR, "Called object is not an SWFGradient");
- }
- return (SWFGradient)gradient;
-}
-/* }}} */
-
-/* {{{ proto void swfgradient::addEntry(float ratio, int r, int g, int b [, int a])
- Adds given entry to the gradient */
-PHP_METHOD(swfgradient, addEntry)
-{
- zval **ratio, **r, **g, **b;
- byte a = 0xff;
-
- if (ZEND_NUM_ARGS() == 4) {
- if (zend_get_parameters_ex(4, &ratio, &r, &g, &b) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- } else if (ZEND_NUM_ARGS() == 5) {
- zval **za;
-
- if (zend_get_parameters_ex(5, &ratio, &r, &g, &b, &za) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long_ex(za);
- a = BYTE_Z_LVAL_PP(za);
- } else {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_double_ex(ratio);
- convert_to_long_ex(r);
- convert_to_long_ex(g);
- convert_to_long_ex(b);
-
- SWFGradient_addEntry( getGradient(getThis() TSRMLS_CC),
- FLOAT_Z_DVAL_PP(ratio), BYTE_Z_LVAL_PP(r), BYTE_Z_LVAL_PP(g), BYTE_Z_LVAL_PP(b), a
- );
-}
-/* }}} */
-
-static zend_function_entry swfgradient_functions[] = {
- PHP_ME(swfgradient, __construct, NULL, 0)
- PHP_ME(swfgradient, addEntry, NULL, 0)
- { NULL, NULL, NULL }
-};
-
-/* }}} */
-
-/* {{{ SWFMorph
-*/
-/* {{{ proto object swfmorph::__construct()
- Returns a new SWFMorph object */
-PHP_METHOD(swfmorph, __construct)
-{
- SWFMorph morph = newSWFMorphShape();
- int ret = zend_list_insert(morph, le_swfmorphp);
-
- object_init_ex(getThis(), morph_class_entry_ptr);
- add_property_resource(getThis(), "morph", ret);
- zend_list_addref(ret);
-}
-
-static void destroy_SWFMorph_resource(zend_rsrc_list_entry *resource TSRMLS_DC)
-{
- destroySWFMorph((SWFMorph)resource->ptr);
-}
-/* }}} */
-
-/* {{{ internal function getMorph
- Returns the SWFMorph object contained in zval *id */
-static SWFMorph getMorph(zval *id TSRMLS_DC)
-{
- void *morph = SWFgetProperty(id, "morph", 5, le_swfmorphp TSRMLS_CC);
-
- if (!morph) {
- php_error_docref(NULL TSRMLS_CC, E_ERROR, "Called object is not an SWFMorph");
- }
- return (SWFMorph)morph;
-}
-/* }}} */
-
-/* {{{ proto object swfmorph::getShape1()
- Return's this SWFMorph's start shape object */
-PHP_METHOD(swfmorph, getShape1)
-{
- SWFMorph morph = getMorph(getThis() TSRMLS_CC);
- SWFShape shape = SWFMorph_getShape1(morph);
- int ret = zend_list_insert(shape, le_swfshapep);
-
- object_init_ex(return_value, shape_class_entry_ptr);
- add_property_resource(return_value, "shape", ret);
- zend_list_addref(ret);
-}
-/* }}} */
-
-/* {{{ proto object swfmorph::getShape2()
- Return's this SWFMorph's start shape object */
-PHP_METHOD(swfmorph, getShape2)
-{
- SWFMorph morph = getMorph(getThis() TSRMLS_CC);
- SWFShape shape = SWFMorph_getShape2(morph);
- int ret = zend_list_insert(shape, le_swfshapep);
-
- object_init_ex(return_value, shape_class_entry_ptr);
- add_property_resource(return_value, "shape", ret);
- zend_list_addref(ret);
-}
-/* }}} */
-
-static zend_function_entry swfmorph_functions[] = {
- PHP_ME(swfmorph, __construct, NULL, 0)
- PHP_ME(swfmorph, getShape1, NULL, 0)
- PHP_ME(swfmorph, getShape2, NULL, 0)
- { NULL, NULL, NULL }
-};
-
-/* }}} */
-
-/* {{{ SWFSound */
-/* {{{ internal function SWFSound getSound(zval *id)
- Returns the Sound object in zval *id */
-
-SWFSound getSound(zval *id TSRMLS_DC)
-{
- void *sound = SWFgetProperty(id, "sound", 5, le_swfsoundp TSRMLS_CC);
-
- if(!sound)
- php_error(E_ERROR, "called object is not an SWFSound!");
-
- return (SWFSound)sound;
-}
-
-/* }}} */
-/* {{{ proto class swfsound::__construct(string filename, int flags)
- Returns a new SWFSound object from given file */
-PHP_METHOD(swfsound, __construct)
-{
- zval **zfile, **zflags;
- SWFSound sound;
- SWFInput input;
- int flags;
- int ret;
-
- if(ZEND_NUM_ARGS() == 1)
- {
- if(zend_get_parameters_ex(1, &zfile) == FAILURE)
- WRONG_PARAM_COUNT;
- flags = 0;
- }
- else if(ZEND_NUM_ARGS() == 2)
- {
- if(zend_get_parameters_ex(2, &zfile, &zflags) == FAILURE)
- WRONG_PARAM_COUNT;
- convert_to_long_ex(zflags);
- flags = Z_LVAL_PP(zflags);
- }
- else
- WRONG_PARAM_COUNT;
-
- if(Z_TYPE_PP(zfile) != IS_RESOURCE)
- {
- convert_to_string_ex(zfile);
- PHP_MING_FILE_CHK(Z_STRVAL_PP(zfile));
- input = newSWFInput_buffer(Z_STRVAL_PP(zfile), Z_STRLEN_PP(zfile));
- zend_list_addref(zend_list_insert(input, le_swfinputp));
- }
- else
- input = getInput(zfile TSRMLS_CC);
-
-#ifdef HAVE_NEW_MING
- sound = newSWFSound_fromInput(input, flags);
-#else
- sound = newSWFSound_fromInput(input);
-#endif
-
- ret = zend_list_insert(sound, le_swfsoundp);
-
- object_init_ex(getThis(), sound_class_entry_ptr);
- add_property_resource(getThis(), "sound", ret);
- zend_list_addref(ret);
-}
-
-static void destroy_SWFSound_resource(zend_rsrc_list_entry *resource TSRMLS_DC)
-{
- destroySWFBlock((SWFBlock)resource->ptr);
-}
-
-/* }}} */
-
-static zend_function_entry swfsound_functions[] = {
- PHP_ME(swfsound, __construct, NULL, 0)
- { NULL, NULL, NULL }
-};
-
-/* }}} */
-
-/* {{{ SWFSoundInstance */
-#ifdef HAVE_NEW_MING
-/* should handle envelope functions */
-/* {{{ internal function SWFSoundInstance getSoundInstance(zval *id)
- Returns the SoundInstance object in zval *id */
-
-SWFSoundInstance getSoundInstance(zval *id TSRMLS_DC)
-{
- void *inst = SWFgetProperty(id, "soundinstance", 13, le_swfsoundinstancep TSRMLS_CC);
-
- if (!inst)
- php_error(E_ERROR, "called object is not an SWFSoundInstance!");
-
- return (SWFSoundInstance)inst;
-}
-/* }}} */
-
-/* {{{ swfsoundinstance_nomultiple */
-
-PHP_METHOD(swfsoundinstance, noMultiple)
-{
- SWFSoundInstance inst = getSoundInstance(getThis() TSRMLS_CC);
-
- if(ZEND_NUM_ARGS() != 0)
- WRONG_PARAM_COUNT;
-
- SWFSoundInstance_setNoMultiple(inst);
-}
-/* }}} */
-
-/* {{{ swfsoundinstance_loopinpoint(point) */
-
-PHP_METHOD(swfsoundinstance, loopInPoint)
-{
- zval **zpoint;
- SWFSoundInstance inst = getSoundInstance(getThis() TSRMLS_CC);
-
- if((ZEND_NUM_ARGS() != 1) || zend_get_parameters_ex(1, &zpoint) == FAILURE)
- WRONG_PARAM_COUNT;
-
- convert_to_long_ex(zpoint);
-
- SWFSoundInstance_setLoopInPoint(inst, Z_LVAL_PP(zpoint));
-}
-
-/* }}} */
-/* {{{ swfsoundinstance_loopoutpoint(point) */
-
-PHP_METHOD(swfsoundinstance, loopOutPoint)
-{
- zval **zpoint;
- SWFSoundInstance inst = getSoundInstance(getThis() TSRMLS_CC);
-
- if((ZEND_NUM_ARGS() != 1) || zend_get_parameters_ex(1, &zpoint) == FAILURE)
- WRONG_PARAM_COUNT;
-
- convert_to_long_ex(zpoint);
-
- SWFSoundInstance_setLoopOutPoint(inst, Z_LVAL_PP(zpoint));
-}
-/* }}} */
-
-/* {{{ swfsoundinstance_loopcount(point) */
-
-PHP_METHOD(swfsoundinstance, loopCount)
-{
- zval **zcount;
- SWFSoundInstance inst = getSoundInstance(getThis() TSRMLS_CC);
-
- if((ZEND_NUM_ARGS() != 1) || zend_get_parameters_ex(1, &zcount) == FAILURE)
- WRONG_PARAM_COUNT;
-
- convert_to_long_ex(zcount);
-
- SWFSoundInstance_setLoopCount(inst, Z_LVAL_PP(zcount));
-}
-/* }}} */
-
-static zend_function_entry swfsoundinstance_functions[] = {
- PHP_ME(swfsoundinstance, noMultiple, NULL, 0)
- PHP_ME(swfsoundinstance, loopInPoint, NULL, 0)
- PHP_ME(swfsoundinstance, loopOutPoint, NULL, 0)
- PHP_ME(swfsoundinstance, loopCount, NULL, 0)
- { NULL, NULL, NULL }
-};
-
-/* {{{ SWFVideoStream */
-
-/* {{{ proto class swfvideostream_init([file])
- Returns a SWVideoStream object */
-
-PHP_METHOD(swfvideostream, __construct)
-{
- zval **zfile = NULL;
- SWFVideoStream stream;
- SWFInput input;
- int ret;
-
- switch(ZEND_NUM_ARGS()) {
- case 1:
- if(zend_get_parameters_ex(1, &zfile) == FAILURE)
- WRONG_PARAM_COUNT;
-
- if(Z_TYPE_PP(zfile) != IS_RESOURCE)
- {
- convert_to_string_ex(zfile);
- input = newSWFInput_buffer(Z_STRVAL_PP(zfile), Z_STRLEN_PP(zfile));
- zend_list_addref(zend_list_insert(input, le_swfinputp));
- }
- else
- input = getInput(zfile TSRMLS_CC);
-
- stream = newSWFVideoStream_fromInput(input);
- break;
- case 0:
- stream = newSWFVideoStream();
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
-
- if(stream) {
- ret = zend_list_insert(stream, le_swfvideostreamp);
- object_init_ex(getThis(), videostream_class_entry_ptr);
- add_property_resource(getThis(), "videostream", ret);
- zend_list_addref(ret);
- }
-
-}
-
-static void destroy_SWFVideoStream_resource(zend_rsrc_list_entry *resource TSRMLS_DC)
-{
- destroySWFVideoStream((SWFVideoStream)resource->ptr);
-}
-/* }}} */
-
-/* {{{ internal function getVideoStream
- Returns the SWFVideoStream object contained in zval *id */
-
-static SWFVideoStream getVideoStream(zval *id TSRMLS_DC)
-{
- void *stream = SWFgetProperty(id, "videostream", 11, le_swfvideostreamp TSRMLS_CC);
-
- if(!stream)
- php_error(E_ERROR, "called object is not an SWFVideoStream!");
-
- return (SWFVideoStream)stream;
-}
-
-/* }}} */
-
-/* {{{ setDimension */
-
-PHP_METHOD(swfvideostream, setdimension)
-{
- zval **x, **y;
- SWFVideoStream stream = getVideoStream(getThis() TSRMLS_CC);
- if(!stream)
- php_error(E_ERROR, "getVideoSTream returned NULL");
-
- if( ZEND_NUM_ARGS() != 2
- || zend_get_parameters_ex(2, &x, &y) == FAILURE )
- WRONG_PARAM_COUNT;
-
- convert_to_long_ex(x);
- convert_to_long_ex(y);
-
- SWFVideoStream_setDimension(stream, Z_LVAL_PP(x), Z_LVAL_PP(y));
-}
-/* }}} */
-
-/* {{{ getNumFrames */
-PHP_METHOD(swfvideostream, getnumframes)
-{
- if(ZEND_NUM_ARGS() != 0)
- WRONG_PARAM_COUNT;
-
- RETURN_LONG(SWFVideoStream_getNumFrames(getVideoStream(getThis() TSRMLS_CC)));
-}
-/* }}} */
-
-
-static zend_function_entry swfvideostream_functions[] = {
- PHP_ME(swfvideostream, __construct, NULL, 0)
- PHP_ME(swfvideostream, setdimension, NULL, 0)
- PHP_ME(swfvideostream, getnumframes, NULL, 0)
- { NULL, NULL, NULL }
-};
-
-/* }}} */
-
-/* {{{ SWFPrebuiltClip */
-/* {{{ proto class swfprebuiltclip_init([file])
- Returns a SWFPrebuiltClip object */
-
-PHP_METHOD(swfprebuiltclip, __construct)
-{
- zval **zfile = NULL;
- SWFPrebuiltClip clip;
- SWFInput input;
- int ret;
-
- switch(ZEND_NUM_ARGS()) {
- case 1:
- if(zend_get_parameters_ex(1, &zfile) == FAILURE)
- WRONG_PARAM_COUNT;
-
- if(Z_TYPE_PP(zfile) != IS_RESOURCE)
- {
- convert_to_string_ex(zfile);
- input = newSWFInput_buffer(Z_STRVAL_PP(zfile), Z_STRLEN_PP(zfile));
- zend_list_addref(zend_list_insert(input, le_swfinputp));
- }
- else
- input = getInput(zfile TSRMLS_CC);
-
- clip = newSWFPrebuiltClip_fromInput(input);
- break;
-/* not sure whether this makes sense
- there would have to be a function to add contents
- case 0:
- clip = newSWFPrebuiltClip();
- break; */
- default:
- WRONG_PARAM_COUNT;
- break;
- }
-
- if(clip) {
- ret = zend_list_insert(clip, le_swfprebuiltclipp);
- object_init_ex(getThis(), prebuiltclip_class_entry_ptr);
- add_property_resource(getThis(), "prebuiltclip", ret);
- zend_list_addref(ret);
- }
-}
-/* }}} */
-
-/* {{{ internal function destroy_SWFPrebuiltClip */
-static void destroy_SWFPrebuiltClip_resource(zend_rsrc_list_entry *resource TSRMLS_DC)
-{
- destroySWFPrebuiltClip((SWFPrebuiltClip)resource->ptr);
-}
-/* }}} */
-
-/* {{{ internal function getPrebuiltClip
- Returns the SWFPrebuiltClip object contained in zval *id */
-
-static SWFPrebuiltClip getPrebuiltClip(zval *id TSRMLS_DC)
-{
- void *clip = SWFgetProperty(id, "prebuiltclip", 12, le_swfprebuiltclipp TSRMLS_CC);
-
- if(!clip)
- php_error(E_ERROR, "called object is not an SWFPrebuiltClip!");
-
- return (SWFPrebuiltClip)clip;
-}
-
-/* }}} */
-static zend_function_entry swfprebuiltclip_functions[] = {
- PHP_ME(swfprebuiltclip, __construct, NULL, 0)
- { NULL, NULL, NULL }
-};
-
-/* }}} */
-#endif
-
-/* }}} */
-
-/* {{{ SWFMovie
-*/
-/* {{{ proto object swfmovie::__construct(int version)
- Creates swfmovie object according to the passed version */
-PHP_METHOD(swfmovie, __construct)
-{
- zval **version;
- SWFMovie movie;
- int ret;
-
- if (ZEND_NUM_ARGS() == 1) {
- if (zend_get_parameters_ex(1, &version) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long_ex(version);
- movie = newSWFMovie(Z_LVAL_PP(version));
- } else {
- movie = newSWFMovie(4); /* default version 4 */
- }
-
- ret = zend_list_insert(movie, le_swfmoviep);
-
- object_init_ex(getThis(), movie_class_entry_ptr);
- add_property_resource(getThis(), "movie", ret);
- zend_list_addref(ret);
-}
-
-static void destroy_SWFMovie_resource(zend_rsrc_list_entry *resource TSRMLS_DC)
-{
- destroySWFMovie((SWFMovie)resource->ptr);
-}
-/* }}} */
-
-/* {{{ getMovie
-*/
-static SWFMovie getMovie(zval *id TSRMLS_DC)
-{
- void *movie = SWFgetProperty(id, "movie", 5, le_swfmoviep TSRMLS_CC);
-
- if (!movie) {
- php_error_docref(NULL TSRMLS_CC, E_ERROR, "Called object is not an SWFMovie");
- }
- return (SWFMovie)movie;
-}
-/* }}} */
-
-/* {{{ proto void swfmovie::nextframe()
-*/
-PHP_METHOD(swfmovie, nextFrame)
-{
- SWFMovie_nextFrame(getMovie(getThis() TSRMLS_CC));
-}
-/* }}} */
-
-/* {{{ proto void swfmovie::labelframe(string label)
- Labels frame */
-PHP_METHOD(swfmovie, labelFrame)
-{
- zval **label;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &label) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex(label);
- SWFMovie_labelFrame(getMovie(getThis() TSRMLS_CC), Z_STRVAL_PP(label));
-}
-/* }}} */
-
-/* {{{ proto object swfmovie::add(object SWFBlock)
-*/
-PHP_METHOD(swfmovie, add)
-{
- zval **zchar;
- int ret;
- SWFBlock block;
- SWFDisplayItem item;
- SWFMovie movie = getMovie(getThis() TSRMLS_CC);
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &zchar) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_object_ex(zchar);
-
- /* XXX - SWFMovie_add deals w/ all block types. Probably will need to add that.. */
- if (Z_OBJCE_PP(zchar) == action_class_entry_ptr) {
- block = (SWFBlock) getAction(*zchar TSRMLS_CC);
- } else {
- block = (SWFBlock) getCharacter(*zchar TSRMLS_CC);
- }
-
- item = SWFMovie_add(movie, block);
-
- if (item != NULL) {
- /* try and create a displayitem object */
- ret = zend_list_insert(item, le_swfdisplayitemp);
- object_init_ex(return_value, displayitem_class_entry_ptr);
- add_property_resource(return_value, "displayitem", ret);
- }
-}
-/* }}} */
-
-/* {{{ proto void swfmovie::labelframe(object SWFBlock)
-*/
-PHP_METHOD(swfmovie, remove)
-{
- zval **zchar;
- SWFDisplayItem item;
- SWFMovie movie = getMovie(getThis() TSRMLS_CC);
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &zchar) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_object_ex(zchar);
- item = getDisplayItem(*zchar TSRMLS_CC);
- SWFMovie_remove(movie, item);
-}
-/* }}} */
-
-/* {{{ proto int swfmovie::output([int compression])
-*/
-static void phpByteOutputMethod(byte b, void *data)
-{
- TSRMLS_FETCH();
-
- php_write(&b, 1 TSRMLS_CC);
-}
-
-PHP_METHOD(swfmovie, output)
-{
- SWFMovie movie = getMovie(getThis() TSRMLS_CC);
-#ifdef HAVE_MING_ZLIB
- zval **zlimit = NULL;
- int limit = -1;
- int oldval = INT_MIN;
- long out;
-
- if (zend_get_parameters_ex(1, &zlimit) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long_ex(zlimit);
- limit = Z_LVAL_PP(zlimit);
-
- if ((limit < 0) || (limit > 9)) {
- php_error(E_WARNING,"compression level must be within 0..9");
- RETURN_FALSE;
- }
- oldval = Ming_setSWFCompression(limit);
- out = SWFMovie_output(movie, &phpByteOutputMethod, NULL);
- if (oldval >= -1 && oldval <= 9)
- Ming_setSWFCompression(oldval);
-
- RETURN_LONG(out);
-#else
- RETURN_LONG(SWFMovie_output(movie, &phpByteOutputMethod, NULL));
-#endif
-
-}
-/* }}} */
-
-/* {{{ proto int swfmovie::saveToFile(stream x [, int compression])
-*/
-static void phpStreamOutputMethod(byte b, void * data)
-{
- TSRMLS_FETCH();
-
- php_stream_write((php_stream*)data, &b, 1);
-}
-
-PHP_METHOD(swfmovie, saveToFile)
-{
- zval **x;
-#ifdef HAVE_MING_ZLIB
- zval **zlimit = NULL;
- int limit = -1;
- int oldval = INT_MIN;
- long out;
-#endif
- SWFMovie movie = getMovie(getThis() TSRMLS_CC);
- php_stream *what;
-
- switch (ZEND_NUM_ARGS()) {
- case 1:
- if (zend_get_parameters_ex(1, &x) == FAILURE)
- WRONG_PARAM_COUNT;
- break;
- case 2:
-#ifdef HAVE_MING_ZLIB
- if (zend_get_parameters_ex(2, &x, &zlimit) == FAILURE)
- WRONG_PARAM_COUNT;
- convert_to_long_ex(zlimit);
- limit = Z_LVAL_PP(zlimit);
- if ((limit < 0) || (limit > 9)) {
- php_error(E_WARNING,"compression level must be within 0..9");
- RETURN_FALSE;
- }
- oldval = Ming_setSWFCompression(limit);
-#endif
- break;
- default:
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(what, php_stream *, x, -1,"File-Handle",php_file_le_stream());
-#ifdef HAVE_MING_ZLIB
- out = SWFMovie_output(getMovie(getThis() TSRMLS_CC), &phpStreamOutputMethod, what);
- if (oldval >= -1 && oldval <=9)
- Ming_setSWFCompression(oldval);
- RETURN_LONG(out);
-#else
- RETURN_LONG(SWFMovie_output(movie, &phpStreamOutputMethod, what));
-#endif
-}
-/* }}} */
-
-/* {{{ proto int swfmovie::save(mixed where [, int compression])
- Saves the movie. 'where' can be stream and the movie will be saved there otherwise it is treated as string and written in file with that name */
-PHP_METHOD(swfmovie, save)
-{
- zval **x;
-#ifdef HAVE_MING_ZLIB
- zval **zlimit = NULL;
- int limit = -1;
- int oldval = INT_MIN;
-#endif
- long retval;
- php_stream *stream;
-
- switch (ZEND_NUM_ARGS()) {
- case 1:
- if (zend_get_parameters_ex(1, &x) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- break;
- case 2:
-#ifdef HAVE_MING_ZLIB
- if (zend_get_parameters_ex(2, &x, &zlimit) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long_ex(zlimit);
- limit = Z_LVAL_PP(zlimit);
- if ((limit < 0) || (limit > 9)) {
- php_error(E_WARNING,"compression level must be within 0..9");
- RETURN_FALSE;
- }
- oldval = Ming_setSWFCompression(limit);
-#endif
- break;
- default:
- WRONG_PARAM_COUNT;
- }
-
- if (Z_TYPE_PP(x) == IS_RESOURCE) {
- ZEND_FETCH_RESOURCE(stream, php_stream *, x, -1,"File-Handle",php_file_le_stream());
- RETURN_LONG(SWFMovie_output(getMovie(getThis() TSRMLS_CC), &phpStreamOutputMethod, stream));
- }
-
- convert_to_string_ex(x);
- stream = php_stream_open_wrapper(Z_STRVAL_PP(x), "wb", REPORT_ERRORS|ENFORCE_SAFE_MODE, NULL);
-
- if (stream == NULL) {
- RETURN_FALSE;
- }
-
- retval = SWFMovie_output(getMovie(getThis() TSRMLS_CC), &phpStreamOutputMethod, (void *)stream);
- php_stream_close(stream);
-#ifdef HAVE_MING_ZLIB
- if(oldval >= -1 && oldval <=9)
- Ming_setSWFCompression(oldval);
-#endif
-
- RETURN_LONG(retval);
-}
-/* }}} */
-
-/* {{{ proto void swfmovie::setBackground(int r, int g, int b)
- Sets background color (r,g,b) */
-PHP_METHOD(swfmovie, setBackground)
-{
- zval **r, **g, **b;
- SWFMovie movie = getMovie(getThis() TSRMLS_CC);
-
- if (ZEND_NUM_ARGS() != 3 || zend_get_parameters_ex(3, &r, &g, &b) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long_ex(r);
- convert_to_long_ex(g);
- convert_to_long_ex(b);
- SWFMovie_setBackground(movie, Z_LVAL_PP(r), Z_LVAL_PP(g), Z_LVAL_PP(b));
-}
-/* }}} */
-
-/* {{{ proto void swfmovie::setRate(float rate)
- Sets movie rate */
-PHP_METHOD(swfmovie, setRate)
-{
- zval **rate;
- SWFMovie movie = getMovie(getThis() TSRMLS_CC);
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &rate) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_double_ex(rate);
- SWFMovie_setRate(movie, FLOAT_Z_DVAL_PP(rate));
-}
-/* }}} */
-
-/* {{{ proto void swfmovie::setDimension(float x, float y)
- Sets movie dimension */
-PHP_METHOD(swfmovie, setDimension)
-{
- zval **x, **y;
- SWFMovie movie = getMovie(getThis() TSRMLS_CC);
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &x, &y) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_double_ex(x);
- convert_to_double_ex(y);
- SWFMovie_setDimension(movie, FLOAT_Z_DVAL_PP(x), FLOAT_Z_DVAL_PP(y));
-}
-/* }}} */
-
-/* {{{ proto void swfmovie::setFrames(int frames)
- Sets number of frames */
-PHP_METHOD(swfmovie, setFrames)
-{
- zval **frames;
- SWFMovie movie = getMovie(getThis() TSRMLS_CC);
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &frames) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long_ex(frames);
- SWFMovie_setNumberOfFrames(movie, Z_LVAL_PP(frames));
-}
-/* }}} */
-
-#ifdef HAVE_NEW_MING
-/* {{{ proto void swfmovie::streamMP3(mixed file)
- Sets sound stream of the SWF movie. The parameter can be stream or string. */
-PHP_METHOD(swfmovie, streamMP3)
-{
- zval **zfile;
- SWFSoundStream sound;
- SWFInput input;
- SWFMovie movie = getMovie(getThis() TSRMLS_CC);
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &zfile) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- if (Z_TYPE_PP(zfile) != IS_RESOURCE) {
- convert_to_string_ex(zfile);
- input = newSWFInput_buffer(Z_STRVAL_PP(zfile), Z_STRLEN_PP(zfile));
- zend_list_addref(zend_list_insert(input, le_swfinputp));
- } else {
- input = getInput(zfile TSRMLS_CC);
- }
-
- sound = newSWFSoundStream_fromInput(input);
- SWFMovie_setSoundStream(movie, sound);
-}
-/* }}} */
-
-/* {{{ swfmovie_addexport */
-
-PHP_METHOD(swfmovie, addExport)
-{
- zval **zchar, **zname;
- SWFBlock block;
- SWFMovie movie = getMovie(getThis() TSRMLS_CC);
-
- if(ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &zchar, &zname) == FAILURE)
- WRONG_PARAM_COUNT;
-
- convert_to_object_ex(zchar);
- convert_to_string_ex(zname);
-
- block = (SWFBlock)getCharacter(*zchar TSRMLS_CC);
-
- SWFMovie_addExport(movie, block, Z_STRVAL_PP(zname));
-}
-
-/* }}} */
-
-/* {{{ swfmovie_writeexports */
-
-PHP_METHOD(swfmovie, writeExports)
-{
- SWFMovie movie = getMovie(getThis() TSRMLS_CC);
-
- SWFMovie_writeExports(movie);
-}
-
-/* }}} */
-/* {{{ SWFSoundInstance swfmovie_startsound */
-
-PHP_METHOD(swfmovie, startSound)
-{
- zval **zsound;
- int ret;
- SWFSound sound;
- SWFSoundInstance item;
- SWFMovie movie = getMovie(getThis() TSRMLS_CC);
-
- if(ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &zsound) == FAILURE)
- WRONG_PARAM_COUNT;
-
- convert_to_object_ex(zsound);
- sound = (SWFSound)getSound(*zsound TSRMLS_CC);
-
- item = SWFMovie_startSound(movie, sound);
-
- if(item != NULL)
- {
- /* try and create a soundinstance object */
- ret = zend_list_insert(item, le_swfsoundinstancep);
- object_init_ex(return_value, soundinstance_class_entry_ptr);
- add_property_resource(return_value, "soundinstance", ret);
- }
-}
-/* }}} */
-
-/* {{{ void swfmovie_stopsound */
-
-PHP_METHOD(swfmovie, stopSound)
-{
- zval **zsound;
- SWFSound sound;
- SWFMovie movie = getMovie(getThis() TSRMLS_CC);
-
- if(ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &zsound) == FAILURE)
- WRONG_PARAM_COUNT;
-
- convert_to_object_ex(zsound);
- sound = (SWFSound)getSound(*zsound TSRMLS_CC);
-
- SWFMovie_stopSound(movie, sound);
-}
-/* }}} */
-
-/* {{{ void swfmovie_importChar */
-
-PHP_METHOD(swfmovie, importChar)
-{
- SWFMovie movie;
- SWFCharacter res;
- int ret;
- zval **libswf, **name;
-
- if(ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &libswf, &name) == FAILURE)
- WRONG_PARAM_COUNT;
- convert_to_string_ex(libswf);
- convert_to_string_ex(name);
- movie = getMovie(getThis() TSRMLS_CC);
- res = SWFMovie_importCharacter(movie, Z_STRVAL_PP(libswf), Z_STRVAL_PP(name));
-
- if(res != NULL)
- {
- /* try and create a sprite object */
- ret = zend_list_insert(res, le_swfspritep);
- object_init_ex(return_value, sprite_class_entry_ptr);
- add_property_resource(return_value, "sprite", ret);
- }
-}
-/* }}} */
-
-/* {{{ void swfmovie_importFont */
-
-PHP_METHOD(swfmovie, importFont)
-{
- SWFMovie movie;
- SWFFontCharacter res;
- int ret;
- zval **libswf, **name;
-
- if(ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &libswf, &name) == FAILURE)
- WRONG_PARAM_COUNT;
- convert_to_string_ex(libswf);
- convert_to_string_ex(name);
- movie = getMovie(getThis() TSRMLS_CC);
- PHP_MING_FILE_CHK(Z_STRVAL_PP(libswf));
- res = SWFMovie_importFont(movie, Z_STRVAL_PP(libswf), Z_STRVAL_PP(name));
-
- if(res != NULL)
- {
- /* try and create a fontchar object */
- ret = zend_list_insert(res, le_swffontcharp);
- object_init_ex(return_value, fontchar_class_entry_ptr);
- add_property_resource(return_value, "fontcharacter", ret);
- }
-}
-/* }}} */
-
-/* {{{ void swfmovie_addFont */
-PHP_METHOD(swfmovie, addFont)
-{
- SWFMovie movie;
- SWFFontCharacter res;
- int ret;
- SWFFont font;
- zval **zfont;
-
- if(ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &zfont) == FAILURE)
- WRONG_PARAM_COUNT;
-
- convert_to_object_ex(zfont);
-
- movie = getMovie(getThis() TSRMLS_CC);
- font = getFont(*zfont TSRMLS_CC);
- res = SWFMovie_addFont(movie, font);
-
- if(res != NULL)
- {
- /* try and create a fontchar object */
- ret = zend_list_insert(res, le_swffontcharp);
- object_init_ex(return_value, fontchar_class_entry_ptr);
- add_property_resource(return_value, "fontcharacter", ret);
- }
-}
-/* }}} */
-#endif
-
-static zend_function_entry swfmovie_functions[] = {
- PHP_ME(swfmovie, __construct, NULL, 0)
- PHP_ME(swfmovie, nextFrame, NULL, 0)
- PHP_ME(swfmovie, labelFrame, NULL, 0)
- PHP_ME(swfmovie, add, NULL, 0)
- PHP_ME(swfmovie, remove, NULL, 0)
- PHP_ME(swfmovie, output, NULL, 0)
- PHP_ME(swfmovie, save, NULL, 0)
- PHP_ME(swfmovie, saveToFile, NULL, 0)
- PHP_ME(swfmovie, setBackground, NULL, 0)
- PHP_ME(swfmovie, setRate, NULL, 0)
- PHP_ME(swfmovie, setDimension, NULL, 0)
- PHP_ME(swfmovie, setFrames, NULL, 0)
-#ifdef HAVE_NEW_MING
- PHP_ME(swfmovie, streamMP3, NULL, 0)
- PHP_ME(swfmovie, addExport, NULL, 0)
- PHP_ME(swfmovie, writeExports, NULL, 0)
- PHP_ME(swfmovie, startSound, NULL, 0)
- PHP_ME(swfmovie, stopSound, NULL, 0)
- PHP_ME(swfmovie, importChar, NULL, 0)
- PHP_ME(swfmovie, importFont, NULL, 0)
- PHP_ME(swfmovie, addFont, NULL, 0)
-#endif
- { NULL, NULL, NULL }
-};
-
-/* }}} */
-
-/* {{{ SWFShape
-*/
-/* {{{ proto object swfshape::__construct()
- Returns a new SWFShape object */
-PHP_METHOD(swfshape, __construct)
-{
- SWFShape shape = newSWFShape();
- int ret = zend_list_insert(shape, le_swfshapep);
-
- object_init_ex(getThis(), shape_class_entry_ptr);
- add_property_resource(getThis(), "shape", ret);
- zend_list_addref(ret);
-}
-
-static void destroy_SWFShape_resource(zend_rsrc_list_entry *resource TSRMLS_DC)
-{
- destroySWFShape((SWFShape)resource->ptr);
-}
-/* }}} */
-
-/* {{{ internal function getShape
- Returns the SWFShape object contained in zval *id */
-static SWFShape getShape(zval *id TSRMLS_DC)
-{
- void *shape = SWFgetProperty(id, "shape", 5, le_swfshapep TSRMLS_CC);
-
- if (!shape) {
- php_error_docref(NULL TSRMLS_CC, E_ERROR, "Called object is not an SWFShape");
- }
-
- return (SWFShape)shape;
-}
-/* }}} */
-
-/* {{{ proto void swfshape::setline(int width, int r, int g, int b [, int a])
- Sets the current line style for this SWFShape */
-PHP_METHOD(swfshape, setLine)
-{
- zval **w, **r, **g, **b, **a;
-
- if (ZEND_NUM_ARGS() == 4) {
- if (zend_get_parameters_ex(4, &w, &r, &g, &b) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- } else if (ZEND_NUM_ARGS() == 5) {
- if (zend_get_parameters_ex(5, &w, &r, &g, &b, &a) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long_ex(a);
- } else if (ZEND_NUM_ARGS() == 1) {
- SWFShape_setLine(getShape(getThis() TSRMLS_CC), 0, 0, 0, 0, 0);
- return;
- } else {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long_ex(w);
- convert_to_long_ex(r);
- convert_to_long_ex(g);
- convert_to_long_ex(b);
-
- if (ZEND_NUM_ARGS() == 4) {
- SWFShape_setLine(getShape(getThis() TSRMLS_CC),
- (unsigned short)Z_LVAL_PP(w), BYTE_Z_LVAL_PP(r), BYTE_Z_LVAL_PP(g), BYTE_Z_LVAL_PP(b), 0xff
- );
- } else {
- SWFShape_setLine(getShape(getThis() TSRMLS_CC),
- (unsigned short)Z_LVAL_PP(w), BYTE_Z_LVAL_PP(r), BYTE_Z_LVAL_PP(g), BYTE_Z_LVAL_PP(b), BYTE_Z_LVAL_PP(a)
- );
- }
-}
-/* }}} */
-
-/* {{{ proto object swfshape::addfill(mixed arg1, int arg2, [int b [, int a]])
- Returns a fill object, for use with swfshape_setleftfill and swfshape_setrightfill. If 1 or 2 parameter(s) is (are) passed first should be object (from gradient class) and the second int (flags). Gradient fill is performed. If 3 or 4 parameters are passed : r, g, b [, a]. Solid fill is performed. */
-PHP_METHOD(swfshape, addFill)
-{
- SWFFill fill=NULL;
- int ret;
-
- if (ZEND_NUM_ARGS() == 1 || ZEND_NUM_ARGS() == 2) {
- /* it's a gradient or bitmap */
- zval **arg1;
- unsigned char flags = 0;
-
- if (ZEND_NUM_ARGS() == 2) {
- zval **arg2;
- if (zend_get_parameters_ex(2, &arg1, &arg2) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long_ex(arg2);
- flags = (unsigned char)Z_LVAL_PP(arg2);
- } else {
- if (zend_get_parameters_ex(1, &arg1) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- }
-
- convert_to_object_ex(arg1);
-
- if (Z_OBJCE_PP(arg1) == gradient_class_entry_ptr) {
- if (flags == 0) {
- flags = SWFFILL_LINEAR_GRADIENT;
- }
- fill = SWFShape_addGradientFill(getShape(getThis() TSRMLS_CC), getGradient(*arg1 TSRMLS_CC), flags);
- } else if (Z_OBJCE_PP(arg1) == bitmap_class_entry_ptr) {
- if (flags == 0) {
- flags = SWFFILL_TILED_BITMAP;
- }
- fill = SWFShape_addBitmapFill(getShape(getThis() TSRMLS_CC), getBitmap(*arg1 TSRMLS_CC), flags);
- } else {
- php_error_docref(NULL TSRMLS_CC, E_ERROR, "Argument is not a bitmap nor a gradient");
- }
-
- } else if (ZEND_NUM_ARGS() == 3 || ZEND_NUM_ARGS() == 4) {
- /* it's a solid fill */
- zval **r, **g, **b, **za;
- byte a = 0xff;
-
- if (ZEND_NUM_ARGS() == 3) {
- if (zend_get_parameters_ex(3, &r, &g, &b) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- } else if (ZEND_NUM_ARGS() == 4) {
- if (zend_get_parameters_ex(4, &r, &g, &b, &za) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long_ex(za);
- a = BYTE_Z_LVAL_PP(za);
- } else {
- WRONG_PARAM_COUNT;
- }
- convert_to_long_ex(r);
- convert_to_long_ex(g);
- convert_to_long_ex(b);
-
- fill = SWFShape_addSolidFill(getShape(getThis() TSRMLS_CC),
- BYTE_Z_LVAL_PP(r), BYTE_Z_LVAL_PP(g), BYTE_Z_LVAL_PP(b), a
- );
- } else {
- WRONG_PARAM_COUNT;
- }
-
- if (!fill) {
- php_error_docref(NULL TSRMLS_CC, E_ERROR, "Error adding fill to shape");
- }
-
- /* return an SWFFill object */
- ret = zend_list_insert(fill, le_swffillp);
- object_init_ex(return_value, fill_class_entry_ptr);
- add_property_resource(return_value, "fill", ret);
-}
-/* }}} */
-
-/* {{{ proto void swfshape::setleftfill(int arg1 [, int g ,int b [,int a]])
- Sets the left side fill style to fill in case only one parameter is passed. When 3 or 4 parameters are passed they are treated as : int r, int g, int b, int a . Solid fill is performed in this case before setting left side fill type. */
-PHP_METHOD(swfshape, setLeftFill)
-{
- zval **zfill, **r, **g, **b, **a;
- SWFFill fill;
-
- if (ZEND_NUM_ARGS() == 3) {
- if (zend_get_parameters_ex(3, &r, &g, &b) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long_ex(r);
- convert_to_long_ex(g);
- convert_to_long_ex(b);
-
- fill = SWFShape_addSolidFill(getShape(getThis() TSRMLS_CC),
- BYTE_Z_LVAL_PP(r), BYTE_Z_LVAL_PP(g), BYTE_Z_LVAL_PP(b), 0xff
- );
-
- } else if (ZEND_NUM_ARGS() == 4) {
- if (zend_get_parameters_ex(4, &r, &g, &b, &a) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long_ex(r);
- convert_to_long_ex(g);
- convert_to_long_ex(b);
- convert_to_long_ex(a);
-
- fill = SWFShape_addSolidFill(getShape(getThis() TSRMLS_CC),
- BYTE_Z_LVAL_PP(r), BYTE_Z_LVAL_PP(g), BYTE_Z_LVAL_PP(b), BYTE_Z_LVAL_PP(a)
- );
-
- } else if (ZEND_NUM_ARGS() == 1) {
- if (zend_get_parameters_ex(1, &zfill) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- if (Z_LVAL_PP(zfill) != 0) {
- convert_to_object_ex(zfill);
- fill = getFill(*zfill TSRMLS_CC);
- } else {
- fill = NULL;
- }
- } else {
- WRONG_PARAM_COUNT;
- }
-
- SWFShape_setLeftFill(getShape(getThis() TSRMLS_CC), fill);
-}
-/* }}} */
-
-/* {{{ proto void swfshape::setleftfill(int arg1 [, int g ,int b [,int a]])
- Sets the right side fill style to fill in case only one parameter is passed. When 3 or 4 parameters are passed they are treated as : int r, int g, int b, int a . Solid fill is performed in this case before setting right side fill type. */
-PHP_METHOD(swfshape, setRightFill)
-{
- zval **zfill, **r, **g, **b, **a;
- SWFFill fill;
-
- if (ZEND_NUM_ARGS() == 3) {
- if (zend_get_parameters_ex(3, &r, &g, &b) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long_ex(r);
- convert_to_long_ex(g);
- convert_to_long_ex(b);
-
- fill = SWFShape_addSolidFill(getShape(getThis() TSRMLS_CC),
- BYTE_Z_LVAL_PP(r), BYTE_Z_LVAL_PP(g), BYTE_Z_LVAL_PP(b), 0xff
- );
-
- } else if (ZEND_NUM_ARGS() == 4) {
- if (zend_get_parameters_ex(4, &r, &g, &b, &a) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long_ex(r);
- convert_to_long_ex(g);
- convert_to_long_ex(b);
- convert_to_long_ex(a);
-
- fill = SWFShape_addSolidFill(getShape(getThis() TSRMLS_CC),
- BYTE_Z_LVAL_PP(r), BYTE_Z_LVAL_PP(g), BYTE_Z_LVAL_PP(b), BYTE_Z_LVAL_PP(a)
- );
- } else if (ZEND_NUM_ARGS() == 1) {
- if (zend_get_parameters_ex(1, &zfill) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- if (Z_LVAL_PP(zfill) != 0) {
- convert_to_object_ex(zfill);
- fill = getFill(*zfill TSRMLS_CC);
- } else {
- fill = NULL;
- }
- } else {
- WRONG_PARAM_COUNT;
- }
-
- SWFShape_setRightFill(getShape(getThis() TSRMLS_CC), fill);
-}
-/* }}} */
-
-/* {{{ proto void swfshape::movepento(float x, float y)
- Moves the pen to shape coordinates (x, y) */
-PHP_METHOD(swfshape, movePenTo)
-{
- zval **x, **y;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &x, &y) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_double_ex(x);
- convert_to_double_ex(y);
- SWFShape_movePenTo(getShape(getThis() TSRMLS_CC), FLOAT_Z_DVAL_PP(x), FLOAT_Z_DVAL_PP(y));
-}
-/* }}} */
-
-/* {{{ proto void swfshape::movepen(float x, float y)
- Moves the pen from its current location by vector (x, y) */
-PHP_METHOD(swfshape, movePen)
-{
- zval **x, **y;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &x, &y) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_double_ex(x);
- convert_to_double_ex(y);
- SWFShape_movePen(getShape(getThis() TSRMLS_CC), FLOAT_Z_DVAL_PP(x), FLOAT_Z_DVAL_PP(y));
-}
-/* }}} */
-
-/* {{{ proto void swfshape::drawlineto(float x, float y)
- Draws a line from the current pen position to shape coordinates (x, y) in the current line style */
-PHP_METHOD(swfshape, drawLineTo)
-{
- zval **x, **y;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &x, &y) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_double_ex(x);
- convert_to_double_ex(y);
- SWFShape_drawLineTo(getShape(getThis() TSRMLS_CC), FLOAT_Z_DVAL_PP(x), FLOAT_Z_DVAL_PP(y));
-}
-/* }}} */
-
-/* {{{ proto void swfshape::drawline(float dx, float dy)
- Draws a line from the current pen position (x, y) to the point (x+dx, y+dy) in the current line style */
-PHP_METHOD(swfshape, drawLine)
-{
- zval **x, **y;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &x, &y) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_double_ex(x);
- convert_to_double_ex(y);
- SWFShape_drawLine(getShape(getThis() TSRMLS_CC), FLOAT_Z_DVAL_PP(x), FLOAT_Z_DVAL_PP(y));
-}
-/* }}} */
-
-/* {{{ proto void swfshape::drawcurveto(float ax, float ay, float bx, float by [, float dx, float dy])
- Draws a curve from the current pen position (x,y) to the point (bx, by) in the current line style, using point (ax, ay) as a control point. Or draws a cubic bezier to point (dx, dy) with control points (ax, ay) and (bx, by) */
-PHP_METHOD(swfshape, drawCurveTo)
-{
- if (ZEND_NUM_ARGS() == 4) {
- zval **cx, **cy, **ax, **ay;
-
- if (zend_get_parameters_ex(4, &cx, &cy, &ax, &ay) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_double_ex(cx);
- convert_to_double_ex(cy);
- convert_to_double_ex(ax);
- convert_to_double_ex(ay);
-
- SWFShape_drawCurveTo(getShape(getThis() TSRMLS_CC),
- FLOAT_Z_DVAL_PP(cx), FLOAT_Z_DVAL_PP(cy), FLOAT_Z_DVAL_PP(ax), FLOAT_Z_DVAL_PP(ay)
- );
-
- } else if (ZEND_NUM_ARGS() == 6) {
- zval **bx, **by, **cx, **cy, **dx, **dy;
-
- if (zend_get_parameters_ex(6, &bx, &by, &cx, &cy, &dx, &dy) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_double_ex(bx);
- convert_to_double_ex(by);
- convert_to_double_ex(cx);
- convert_to_double_ex(cy);
- convert_to_double_ex(dx);
- convert_to_double_ex(dy);
-
- RETURN_LONG(SWFShape_drawCubicTo(getShape(getThis() TSRMLS_CC),
- FLOAT_Z_DVAL_PP(bx), FLOAT_Z_DVAL_PP(by), FLOAT_Z_DVAL_PP(cx), FLOAT_Z_DVAL_PP(cy), FLOAT_Z_DVAL_PP(dx), FLOAT_Z_DVAL_PP(dy))
- );
- } else {
- WRONG_PARAM_COUNT;
- }
-}
-/* }}} */
-
-/* {{{ proto void swfshape::drawcurve(float adx, float ady, float bdx, float bdy [, float cdx, float cdy])
- Draws a curve from the current pen position (x, y) to the point (x+bdx, y+bdy) in the current line style, using point (x+adx, y+ady) as a control point or draws a cubic bezier to point (x+cdx, x+cdy) with control points (x+adx, y+ady) and (x+bdx, y+bdy) */
-PHP_METHOD(swfshape, drawCurve)
-{
- if (ZEND_NUM_ARGS() == 4) {
- zval **cx, **cy, **ax, **ay;
-
- if (zend_get_parameters_ex(4, &cx, &cy, &ax, &ay) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_double_ex(cx);
- convert_to_double_ex(cy);
- convert_to_double_ex(ax);
- convert_to_double_ex(ay);
-
- SWFShape_drawCurve(getShape(getThis() TSRMLS_CC),
- FLOAT_Z_DVAL_PP(cx), FLOAT_Z_DVAL_PP(cy), FLOAT_Z_DVAL_PP(ax), FLOAT_Z_DVAL_PP(ay)
- );
-
- } else if (ZEND_NUM_ARGS() == 6) {
- zval **bx, **by, **cx, **cy, **dx, **dy;
-
- if (zend_get_parameters_ex(6, &bx, &by, &cx, &cy, &dx, &dy) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_double_ex(bx);
- convert_to_double_ex(by);
- convert_to_double_ex(cx);
- convert_to_double_ex(cy);
- convert_to_double_ex(dx);
- convert_to_double_ex(dy);
-
- RETURN_LONG( SWFShape_drawCubic(getShape(getThis() TSRMLS_CC),
- FLOAT_Z_DVAL_PP(bx), FLOAT_Z_DVAL_PP(by), FLOAT_Z_DVAL_PP(cx), FLOAT_Z_DVAL_PP(cy), FLOAT_Z_DVAL_PP(dx), FLOAT_Z_DVAL_PP(dy))
- );
- } else {
- WRONG_PARAM_COUNT;
- }
-}
-/* }}} */
-
-/* {{{ proto void swfshape::drawglyph(SWFFont font, string character [, int size])
- Draws the first character in the given string into the shape using the glyph definition from the given font */
-PHP_METHOD(swfshape, drawGlyph)
-{
- zval **font, **c, **zsize;
- int size=0;
-
- if (ZEND_NUM_ARGS() == 2) {
- if (zend_get_parameters_ex(2, &font, &c) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- size = (int)(1024.0f/Ming_getScale());
-
- } else if (ZEND_NUM_ARGS() == 3) {
- if (zend_get_parameters_ex(3, &font, &c, &zsize) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long_ex(zsize);
- size = Z_LVAL_PP(zsize);
- }
- convert_to_string_ex(c);
- SWFShape_drawSizedGlyph(getShape(getThis() TSRMLS_CC), getFont(*font TSRMLS_CC), Z_STRVAL_PP(c)[0], size);
-}
-/* }}} */
-
-/* {{{ proto void swfshape::drawcircle(float r)
- Draws a circle of radius r centered at the current location, in a counter-clockwise fashion */
-PHP_METHOD(swfshape, drawCircle)
-{
- zval **r;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &r) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_double_ex(r);
- SWFShape_drawCircle(getShape(getThis() TSRMLS_CC), FLOAT_Z_DVAL_PP(r));
-}
-/* }}} */
-
-/* {{{ proto void swfshape::drawarc(float r, float startAngle, float endAngle)
- Draws an arc of radius r centered at the current location, from angle startAngle to angle endAngle measured counterclockwise from 12 o'clock */
-PHP_METHOD(swfshape, drawArc)
-{
- zval **r, **start, **end;
-
- if (ZEND_NUM_ARGS() != 3 || zend_get_parameters_ex(3, &r, &start, &end) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_double_ex(r);
- convert_to_double_ex(start);
- convert_to_double_ex(end);
-
- /* convert angles to radians, since that's what php uses elsewhere */
- SWFShape_drawArc(getShape(getThis() TSRMLS_CC), FLOAT_Z_DVAL_PP(r), (float)(Z_DVAL_PP(start)*M_PI/180.0), (float)(Z_DVAL_PP(end)*M_PI/180.0));
-}
-/* }}} */
-
-/* {{{ proto void swfshape::drawcubic(float bx, float by, float cx, float cy, float dx, float dy)
- Draws a cubic bezier curve using the current position and the three given points as control points */
-PHP_METHOD(swfshape, drawCubic)
-{
- zval **bx, **by, **cx, **cy, **dx, **dy;
-
- if (ZEND_NUM_ARGS() != 6 || zend_get_parameters_ex(6, &bx, &by, &cx, &cy, &dx, &dy) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_double_ex(bx);
- convert_to_double_ex(by);
- convert_to_double_ex(cx);
- convert_to_double_ex(cy);
- convert_to_double_ex(dx);
- convert_to_double_ex(dy);
-
- RETURN_LONG( SWFShape_drawCubic(getShape(getThis() TSRMLS_CC),
- FLOAT_Z_DVAL_PP(bx), FLOAT_Z_DVAL_PP(by), FLOAT_Z_DVAL_PP(cx), FLOAT_Z_DVAL_PP(cy), FLOAT_Z_DVAL_PP(dx), FLOAT_Z_DVAL_PP(dy))
- );
-}
-/* }}} */
-
-/* {{{ proto void swfshape::drawcubic(float bx, float by, float cx, float cy, float dx, float dy)
- Draws a cubic bezier curve using the current position and the three given points as control points */
-PHP_METHOD(swfshape, drawCubicTo)
-{
- zval **bx, **by, **cx, **cy, **dx, **dy;
-
- if (ZEND_NUM_ARGS() != 6 || zend_get_parameters_ex(6, &bx, &by, &cx, &cy, &dx, &dy) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_double_ex(bx);
- convert_to_double_ex(by);
- convert_to_double_ex(cx);
- convert_to_double_ex(cy);
- convert_to_double_ex(dx);
- convert_to_double_ex(dy);
-
- RETURN_LONG( SWFShape_drawCubicTo(getShape(getThis() TSRMLS_CC),
- FLOAT_Z_DVAL_PP(bx), FLOAT_Z_DVAL_PP(by), FLOAT_Z_DVAL_PP(cx), FLOAT_Z_DVAL_PP(cy), FLOAT_Z_DVAL_PP(dx), FLOAT_Z_DVAL_PP(dy))
- );
-}
-/* }}} */
-
-static zend_function_entry swfshape_functions[] = {
- PHP_ME(swfshape, __construct, NULL, 0)
- PHP_ME(swfshape, setLine, NULL, 0)
- PHP_ME(swfshape, addFill, NULL, 0)
- PHP_ME(swfshape, setLeftFill, NULL, 0)
- PHP_ME(swfshape, setRightFill, NULL, 0)
- PHP_ME(swfshape, movePenTo, NULL, 0)
- PHP_ME(swfshape, movePen, NULL, 0)
- PHP_ME(swfshape, drawLineTo, NULL, 0)
- PHP_ME(swfshape, drawLine, NULL, 0)
- PHP_ME(swfshape, drawCurveTo, NULL, 0)
- PHP_ME(swfshape, drawCurve, NULL, 0)
- PHP_ME(swfshape, drawGlyph, NULL, 0)
- PHP_ME(swfshape, drawCircle, NULL, 0)
- PHP_ME(swfshape, drawArc, NULL, 0)
- PHP_ME(swfshape, drawCubic, NULL, 0)
- PHP_ME(swfshape, drawCubicTo, NULL, 0)
- { NULL, NULL, NULL }
-};
-
-/* }}} */
-
-/* {{{ SWFSprite
-*/
-/* {{{ proto class swfsprite::__construct()
- Returns a new SWFSprite object */
-PHP_METHOD(swfsprite, __construct)
-{
- SWFMovieClip sprite = newSWFMovieClip();
- int ret = zend_list_insert(sprite, le_swfspritep);
-
- object_init_ex(getThis(), sprite_class_entry_ptr);
- add_property_resource(getThis(), "sprite", ret);
- zend_list_addref(ret);
-}
-
-static void destroy_SWFSprite_resource(zend_rsrc_list_entry *resource TSRMLS_DC)
-{
- destroySWFMovieClip((SWFMovieClip)resource->ptr);
-}
-/* }}} */
-
-/* {{{ internal function SWFSprite getSprite(zval *id)
- Returns the SWFSprite object in zval *id */
-static SWFMovieClip getSprite(zval *id TSRMLS_DC)
-{
- void *sprite = SWFgetProperty(id, "sprite", 6, le_swfspritep TSRMLS_CC);
-
- if (!sprite) {
- php_error_docref(NULL TSRMLS_CC, E_ERROR, "Called object is not an SWFSprite");
- }
- return (SWFMovieClip)sprite;
-}
-/* }}} */
-
-/* {{{ proto object swfsprite::add(object SWFCharacter)
- Adds the character to the sprite, returns a displayitem object */
-PHP_METHOD(swfsprite, add)
-{
- zval **zchar;
- int ret;
- SWFBlock block;
- SWFDisplayItem item;
- SWFMovieClip sprite = getSprite(getThis() TSRMLS_CC);
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &zchar) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_object_ex(zchar);
-
- if (Z_OBJCE_PP(zchar) == action_class_entry_ptr) {
- block = (SWFBlock)getAction(*zchar TSRMLS_CC);
- } else {
- block = (SWFBlock)getCharacter(*zchar TSRMLS_CC);
- }
-
- item = SWFMovieClip_add(sprite, block);
-
- if (item != NULL) {
- /* try and create a displayitem object */
- ret = zend_list_insert(item, le_swfdisplayitemp);
- object_init_ex(return_value, displayitem_class_entry_ptr);
- add_property_resource(return_value, "displayitem", ret);
- }
-}
-/* }}} */
-
-/* {{{ proto void swfsprite::remove(object SWFDisplayItem)
- Remove the named character from the sprite's display list */
-PHP_METHOD(swfsprite, remove)
-{
- zval **zchar;
- SWFDisplayItem item;
- SWFMovieClip movie = getSprite(getThis() TSRMLS_CC);
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &zchar) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_object_ex(zchar);
- item = getDisplayItem(*zchar TSRMLS_CC);
- SWFMovieClip_remove(movie, item);
-}
-/* }}} */
-
-/* {{{ proto void swfsprite::nextFrame()
- Moves the sprite to the next frame */
-PHP_METHOD(swfsprite, nextFrame)
-{
- SWFMovieClip_nextFrame(getSprite(getThis() TSRMLS_CC));
-}
-/* }}} */
-
-/* {{{ proto void swfsprite::labelFrame(string label)
- Labels frame */
-PHP_METHOD(swfsprite, labelFrame)
-{
- zval **label;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &label) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex(label);
- SWFMovieClip_labelFrame(getSprite(getThis() TSRMLS_CC), Z_STRVAL_PP(label));
-}
-/* }}} */
-
-/* {{{ proto void swfsprite::setFrames(int frames)
- Sets the number of frames in this SWFSprite */
-PHP_METHOD(swfsprite, setFrames)
-{
- zval **frames;
- SWFMovieClip sprite = getSprite(getThis() TSRMLS_CC);
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &frames) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long_ex(frames);
- SWFMovieClip_setNumberOfFrames(sprite, Z_LVAL_PP(frames));
-}
-/* }}} */
-
-#ifdef HAVE_NEW_MING
-/* {{{ SWFSoundInstance swfsprite_startsound */
-
-PHP_METHOD(swfsprite, startSound)
-{
- zval **zsound;
- int ret;
- SWFSound sound;
- SWFSoundInstance item;
- SWFMovieClip sprite = getSprite(getThis() TSRMLS_CC);
-
- if(ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &zsound) == FAILURE)
- WRONG_PARAM_COUNT;
-
- convert_to_object_ex(zsound);
- sound = (SWFSound)getSound(*zsound TSRMLS_CC);
-
- item = SWFMovieClip_startSound(sprite, sound);
-
- if(item != NULL) {
- /* try and create a displayitem object */
- ret = zend_list_insert(item, le_swfsoundinstancep);
- object_init_ex(return_value, soundinstance_class_entry_ptr);
- add_property_resource(return_value, "soundinstance", ret);
- }
-}
-
-/* }}} */
-/* {{{ void swfsprite_stopsound */
-
-PHP_METHOD(swfsprite, stopSound)
-{
- zval **zsound;
- SWFSound sound;
- SWFMovieClip sprite = getSprite(getThis() TSRMLS_CC);
-
- if(ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &zsound) == FAILURE)
- WRONG_PARAM_COUNT;
-
- convert_to_object_ex(zsound);
- sound = (SWFSound)getSound(*zsound TSRMLS_CC);
-
- SWFMovieClip_stopSound(sprite, sound);
-}
-/* }}} */
-#endif
-
-static zend_function_entry swfsprite_functions[] = {
- PHP_ME(swfsprite, __construct, NULL, 0)
- PHP_ME(swfsprite, add, NULL, 0)
- PHP_ME(swfsprite, remove, NULL, 0)
- PHP_ME(swfsprite, nextFrame, NULL, 0)
- PHP_ME(swfsprite, labelFrame, NULL, 0)
- PHP_ME(swfsprite, setFrames, NULL, 0)
-#ifdef HAVE_NEW_MING
- PHP_ME(swfsprite, startSound, NULL, 0)
- PHP_ME(swfsprite, stopSound, NULL, 0)
-#endif
- { NULL, NULL, NULL }
-};
-
-/* }}} */
-
-/* {{{ SWFText
-*/
-/* {{{ proto class swftext::__construct()
- Returns new SWFText object */
-PHP_METHOD(swftext, __construct)
-{
- SWFText text = newSWFText2();
- int ret = zend_list_insert(text, le_swftextp);
-
- object_init_ex(getThis(), text_class_entry_ptr);
- add_property_resource(getThis(), "text", ret);
- zend_list_addref(ret);
-}
-
-static void destroy_SWFText_resource(zend_rsrc_list_entry *resource TSRMLS_DC)
-{
- destroySWFText((SWFText)resource->ptr);
-}
-/* }}} */
-
-/* {{{ internal function SWFText getText(zval *id)
- Returns the SWFText contained in zval *id */
-static SWFText getText(zval *id TSRMLS_DC)
-{
- void *text = SWFgetProperty(id, "text", 4, le_swftextp TSRMLS_CC);
-
- if (!text) {
- php_error_docref(NULL TSRMLS_CC, E_ERROR, "Called object is not an SWFText");
- }
- return (SWFText)text;
-}
-/* }}} */
-
-/* {{{ proto void swftext::setFont(object font)
- Sets this SWFText object's current font to given font */
-PHP_METHOD(swftext, setFont)
-{
- zval **zfont;
- SWFText text = getText(getThis() TSRMLS_CC);
- SWFFont font;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &zfont) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_object_ex(zfont);
- font = getFont(*zfont TSRMLS_CC);
- SWFText_setFont(text, font);
-}
-/* }}} */
-
-/* {{{ proto void swftext::setHeight(float height)
- Sets this SWFText object's current height to given height */
-PHP_METHOD(swftext, setHeight)
-{
- zval **height;
- SWFText text = getText(getThis() TSRMLS_CC);
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &height) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_double_ex(height);
- SWFText_setHeight(text, FLOAT_Z_DVAL_PP(height));
-}
-/* }}} */
-
-/* {{{ proto void swftext::setSpacing(float spacing)
- Sets this SWFText object's current letterspacing to given spacing */
-PHP_METHOD(swftext, setSpacing)
-{
- zval **spacing;
- SWFText text = getText(getThis() TSRMLS_CC);
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &spacing) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_double_ex(spacing);
- SWFText_setSpacing(text, FLOAT_Z_DVAL_PP(spacing));
-}
-/* }}} */
-
-/* {{{ proto void swftext::setColor(int r, int g, int b [, int a])
- Sets this SWFText object's current color to the given color */
-PHP_METHOD(swftext, setColor)
-{
- zval **r, **g, **b, **a;
- SWFText text = getText(getThis() TSRMLS_CC);
-
- if (ZEND_NUM_ARGS() == 3) {
- if (zend_get_parameters_ex(3, &r, &g, &b) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- } else if (ZEND_NUM_ARGS() == 4) {
- if (zend_get_parameters_ex(4, &r, &g, &b, &a) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long_ex(a);
- } else {
- WRONG_PARAM_COUNT;
- }
- convert_to_long_ex(r);
- convert_to_long_ex(g);
- convert_to_long_ex(b);
-
- if (ZEND_NUM_ARGS() == 4) {
- SWFText_setColor(text, BYTE_Z_LVAL_PP(r), BYTE_Z_LVAL_PP(g), BYTE_Z_LVAL_PP(b), BYTE_Z_LVAL_PP(a));
- } else {
- SWFText_setColor(text, BYTE_Z_LVAL_PP(r), BYTE_Z_LVAL_PP(g), BYTE_Z_LVAL_PP(b), 0xff);
- }
-}
-/* }}} */
-
-/* {{{ proto void swftext::moveTo(float x, float y)
- Moves this SWFText object's current pen position to (x, y) in text coordinates */
-PHP_METHOD(swftext, moveTo)
-{
- zval **x, **y;
- SWFText text = getText(getThis() TSRMLS_CC);
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &x, &y) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_double_ex(x);
- convert_to_double_ex(y);
- SWFText_setXY(text, FLOAT_Z_DVAL_PP(x), FLOAT_Z_DVAL_PP(y));
-}
-/* }}} */
-
-/* {{{ proto void swftext::addString(string text)
- Writes the given text into this SWFText object at the current pen position, using the current font, height, spacing, and color */
-PHP_METHOD(swftext, addString)
-{
- zval **s;
- SWFText text = getText(getThis() TSRMLS_CC);
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &s) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_string_ex(s);
- SWFText_addString(text, Z_STRVAL_PP(s), NULL);
-}
-/* }}} */
-
-#ifdef HAVE_NEW_MING
-/* {{{ proto void swftext::addUTF8String(string text)
- Writes the given text into this SWFText object at the current pen position,
- using the current font, height, spacing, and color */
-
-PHP_METHOD(swftext, addUTF8String)
-{
- zval **s;
- SWFText text = getText(getThis() TSRMLS_CC);
-
- if(ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &s) == FAILURE)
- WRONG_PARAM_COUNT;
-
- convert_to_string_ex(s);
-
- SWFText_addUTF8String(text, Z_STRVAL_PP(s), NULL);
-}
-
-/* }}} */
-/* {{{ proto void swftext::addWideString(string text)
- Writes the given text into this SWFText object at the current pen position,
- using the current font, height, spacing, and color */
-/*
-PHP_METHOD(swftext, addWideString)
-{
- zval **s;
- SWFText text = getText(getThis() TSRMLS_CC);
-
- if(ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &s) == FAILURE)
- WRONG_PARAM_COUNT;
-
- convert_to_string_ex(s);
-
- SWFText_addWideString(text, Z_STRVAL_PP(s), NULL);
-}
-*/
-/* }}} */
-#endif
-
-/* {{{ proto float swftext::getWidth(string str)
- Calculates the width of the given string in this text objects current font and size */
-PHP_METHOD(swftext, getWidth)
-{
- zval **zstring;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &zstring) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex(zstring);
- RETURN_DOUBLE(SWFText_getStringWidth(getText(getThis() TSRMLS_CC), Z_STRVAL_PP(zstring)));
-}
-/* }}} */
-
-#ifdef HAVE_NEW_MING
-/* {{{ proto double swftext::getUTF8Width(string)
- calculates the width of the given string in this text objects current font and size */
-
-PHP_METHOD(swftext, getUTF8Width)
-{
- zval **zstring;
- int width;
-
- if(ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &zstring) == FAILURE)
- WRONG_PARAM_COUNT;
-
- convert_to_string_ex(zstring);
-
- width = SWFText_getUTF8StringWidth(getText(getThis() TSRMLS_CC), Z_STRVAL_PP(zstring));
-
- RETURN_DOUBLE(width);
-}
-
-/* }}} */
-/* {{{ proto double swftext::getWideWidth(string)
- calculates the width of the given string in this text objects current font and size */
-/*
-PHP_METHOD(swftext, getWideWidth)
-{
- zval **zstring;
- int width;
-
- if(ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &zstring) == FAILURE)
- WRONG_PARAM_COUNT;
-
- convert_to_string_ex(zstring);
-
- width = SWFText_getWideStringWidth(getText(getThis() TSRMLS_CC), Z_STRVAL_PP(zstring));
-
- RETURN_DOUBLE(width);
-}
-*/
-/* }}} */
-#endif
-
-/* {{{ proto float swftext::getAscent()
- Returns the ascent of the current font at its current size, or 0 if not available */
-PHP_METHOD(swftext, getAscent)
-{
- RETURN_DOUBLE(SWFText_getAscent(getText(getThis() TSRMLS_CC)));
-}
-/* }}} */
-
-/* {{{ proto float swftext::getDescent()
- Returns the descent of the current font at its current size, or 0 if not available */
-PHP_METHOD(swftext, getDescent)
-{
- RETURN_DOUBLE(SWFText_getDescent(getText(getThis() TSRMLS_CC)));
-}
-/* }}} */
-
-/* {{{ proto float swftext::getLeading()
- Returns the leading of the current font at its current size, or 0 if not available */
-PHP_METHOD(swftext, getLeading)
-{
- RETURN_DOUBLE(SWFText_getLeading(getText(getThis() TSRMLS_CC)));
-}
-/* }}} */
-
-static zend_function_entry swftext_functions[] = {
- PHP_ME(swftext, __construct, NULL, 0)
- PHP_ME(swftext, setFont, NULL, 0)
- PHP_ME(swftext, setHeight, NULL, 0)
- PHP_ME(swftext, setSpacing, NULL, 0)
- PHP_ME(swftext, setColor, NULL, 0)
- PHP_ME(swftext, moveTo, NULL, 0)
- PHP_ME(swftext, addString, NULL, 0)
-#ifdef HAVE_NEW_MING
- PHP_ME(swftext, addUTF8String, NULL, 0)
-/* PHP_ME(swftext, addwidestring, NULL, 0)*/
-#endif
- PHP_ME(swftext, getWidth, NULL, 0)
-#ifdef HAVE_NEW_MING
- PHP_ME(swftext, getUTF8Width, NULL, 0)
-/* PHP_ME(swftext, getwidewidth, NULL, 0)*/
-#endif
- PHP_ME(swftext, getAscent, NULL, 0)
- PHP_ME(swftext, getDescent, NULL, 0)
- PHP_ME(swftext, getLeading, NULL, 0)
- { NULL, NULL, NULL }
-};
-
-/* }}} */
-
-/* {{{ SWFTextField
-*/
-/* {{{ proto object swftextfield::__construct([int flags])
- Returns a new SWFTextField object */
-PHP_METHOD(swftextfield, __construct)
-{
- zval **flags;
- SWFTextField field = newSWFTextField();
- int ret = zend_list_insert(field, le_swftextfieldp);
-
- object_init_ex(getThis(), textfield_class_entry_ptr);
- add_property_resource(getThis(), "textfield", ret);
- zend_list_addref(ret);
-
- if (ZEND_NUM_ARGS() == 1) {
- if (zend_get_parameters_ex(1, &flags) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long_ex(flags);
- SWFTextField_setFlags(field, Z_LVAL_PP(flags));
- }
-}
-/* }}} */
-
-static void destroy_SWFTextField_resource(zend_rsrc_list_entry *resource TSRMLS_DC)
-{
- destroySWFTextField((SWFTextField)resource->ptr);
-}
-
-/* {{{ internal function getTextField
- Returns the SWFTextField object contained in zval *id */
-static SWFTextField getTextField(zval *id TSRMLS_DC)
-{
- void *field = SWFgetProperty(id, "textfield", 9, le_swftextfieldp TSRMLS_CC);
-
- if (!field) {
- php_error_docref(NULL TSRMLS_CC, E_ERROR, "Called object is not an SWFTextField");
- }
- return (SWFTextField)field;
-}
-/* }}} */
-
-/* {{{ proto void swftextfield::setFont(object font)
- Sets the font for this textfield */
-PHP_METHOD(swftextfield, setFont)
-{
- zval **font;
- SWFTextField field = getTextField(getThis() TSRMLS_CC);
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &font) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_object_ex(font);
- SWFTextField_setFont(field, getFont(*font TSRMLS_CC));
-}
-/* }}} */
-
-/* {{{ proto void swftextfield::setBounds(float width, float height)
- Sets the width and height of this textfield */
-PHP_METHOD(swftextfield, setBounds)
-{
- zval **width, **height;
- SWFTextField field = getTextField(getThis() TSRMLS_CC);
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &width, &height) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_double_ex(width);
- convert_to_double_ex(height);
- SWFTextField_setBounds(field, FLOAT_Z_DVAL_PP(width), FLOAT_Z_DVAL_PP(height));
-}
-/* }}} */
-
-/* {{{ proto void swftextfield::align(int alignment)
- Sets the alignment of this textfield */
-PHP_METHOD(swftextfield, align)
-{
- zval **align;
- SWFTextField field = getTextField(getThis() TSRMLS_CC);
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &align) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long_ex(align);
- SWFTextField_setAlignment(field, Z_LVAL_PP(align));
-}
-/* }}} */
-
-/* {{{ proto void swftextfield::setHeight(float height)
- Sets the font height of this textfield */
-PHP_METHOD(swftextfield, setHeight)
-{
- zval **height;
- SWFTextField field = getTextField(getThis() TSRMLS_CC);
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &height) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_double_ex(height);
- SWFTextField_setHeight(field, FLOAT_Z_DVAL_PP(height));
-}
-/* }}} */
-
-/* {{{ proto void swftextfield::setLeftMargin(float margin)
- Sets the left margin of this textfield */
-PHP_METHOD(swftextfield, setLeftMargin)
-{
- zval **margin;
- SWFTextField field = getTextField(getThis() TSRMLS_CC);
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &margin) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_double_ex(margin);
- SWFTextField_setLeftMargin(field, FLOAT_Z_DVAL_PP(margin));
-}
-/* }}} */
-
-/* {{{ proto void swftextfield::setRightMargin(float margin)
- Sets the right margin of this textfield */
-PHP_METHOD(swftextfield, setRightMargin)
-{
- zval **margin;
- SWFTextField field = getTextField(getThis() TSRMLS_CC);
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &margin) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_double_ex(margin);
- SWFTextField_setRightMargin(field, FLOAT_Z_DVAL_PP(margin));
-}
-/* }}} */
-
-/* {{{ proto void swftextfield::setMargins(float left, float right)
- Sets both margins of this textfield */
-PHP_METHOD(swftextfield, setMargins)
-{
- zval **left, **right;
- SWFTextField field = getTextField(getThis() TSRMLS_CC);
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &left, &right) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_double_ex(left);
- convert_to_double_ex(right);
- SWFTextField_setLeftMargin(field, FLOAT_Z_DVAL_PP(left));
- SWFTextField_setRightMargin(field, FLOAT_Z_DVAL_PP(right));
-}
-/* }}} */
-
-/* {{{ proto void swftextfield::setIndentation(float indentation)
- Sets the indentation of the first line of this textfield */
-PHP_METHOD(swftextfield, setIndentation)
-{
- zval **indent;
- SWFTextField field = getTextField(getThis() TSRMLS_CC);
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &indent) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_double_ex(indent);
- SWFTextField_setIndentation(field, FLOAT_Z_DVAL_PP(indent));
-}
-/* }}} */
-
-/* {{{ proto void swftextfield::setLineSpacing(float space)
- Sets the line spacing of this textfield */
-PHP_METHOD(swftextfield, setLineSpacing)
-{
- zval **spacing;
- SWFTextField field = getTextField(getThis() TSRMLS_CC);
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &spacing) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_double_ex(spacing);
- SWFTextField_setLineSpacing(field, FLOAT_Z_DVAL_PP(spacing));
-}
-/* }}} */
-
-/* {{{ proto void swftextfield::setColor(int r, int g, int b [, int a])
- Sets the color of this textfield */
-PHP_METHOD(swftextfield, setColor)
-{
- zval **r, **g, **b, **a;
- SWFTextField field = getTextField(getThis() TSRMLS_CC);
- byte alpha = 0xff;
-
- if (ZEND_NUM_ARGS() == 3) {
- if (zend_get_parameters_ex(3, &r, &g, &b) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- } else if (ZEND_NUM_ARGS() == 4) {
- if (zend_get_parameters_ex(4, &r, &g, &b, &a) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long_ex(a);
- alpha = BYTE_Z_LVAL_PP(a);
- } else {
- WRONG_PARAM_COUNT;
- }
- convert_to_long_ex(r);
- convert_to_long_ex(g);
- convert_to_long_ex(b);
- SWFTextField_setColor(field, BYTE_Z_LVAL_PP(r), BYTE_Z_LVAL_PP(g), BYTE_Z_LVAL_PP(b), (byte)alpha);
-}
-/* }}} */
-
-/* {{{ proto void swftextfield::setName(string var_name)
- Sets the variable name of this textfield */
-PHP_METHOD(swftextfield, setName)
-{
- zval **name;
- SWFTextField field = getTextField(getThis() TSRMLS_CC);
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &name) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex(name);
- SWFTextField_setVariableName(field, Z_STRVAL_PP(name));
-}
-/* }}} */
-
-/* {{{ proto void swftextfield::addString(string str)
- Adds the given string to this textfield */
-PHP_METHOD(swftextfield, addString)
-{
- zval **string;
- SWFTextField field = getTextField(getThis() TSRMLS_CC);
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &string) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex(string);
- SWFTextField_addString(field, Z_STRVAL_PP(string));
-}
-/* }}} */
-
-#ifdef HAVE_NEW_MING
-/* {{{ proto void swftextfield::setPadding(float padding)
- Sets the padding of this textfield */
-PHP_METHOD(swftextfield, setPadding)
-{
- zval **padding;
- SWFTextField field = getTextField(getThis() TSRMLS_CC);
-
- if(ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &padding) == FAILURE)
- WRONG_PARAM_COUNT;
-
- convert_to_double_ex(padding);
-
- SWFTextField_setPadding(field, Z_DVAL_PP(padding));
-}
-/* }}} */
-
-/* {{{ proto void swftextfield::addChars(string)
- adds characters to a font that will be available within a textfield */
-PHP_METHOD(swftextfield, addChars)
-{
- zval **zstring;
- SWFTextField field = getTextField(getThis() TSRMLS_CC);
-
- if(ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &zstring) == FAILURE)
- WRONG_PARAM_COUNT;
-
- convert_to_string_ex(zstring);
-
- SWFTextField_addChars(field, Z_STRVAL_PP(zstring));
-
-}
-/* }}} */
-#endif
-
-static zend_function_entry swftextfield_functions[] = {
- PHP_ME(swftextfield, __construct, NULL, 0)
- PHP_ME(swftextfield, setFont, NULL, 0)
- PHP_ME(swftextfield, setBounds, NULL, 0)
- PHP_ME(swftextfield, align, NULL, 0)
- PHP_ME(swftextfield, setHeight, NULL, 0)
- PHP_ME(swftextfield, setLeftMargin, NULL, 0)
- PHP_ME(swftextfield, setRightMargin, NULL, 0)
- PHP_ME(swftextfield, setMargins, NULL, 0)
- PHP_ME(swftextfield, setIndentation, NULL, 0)
- PHP_ME(swftextfield, setLineSpacing, NULL, 0)
- PHP_ME(swftextfield, setColor, NULL, 0)
- PHP_ME(swftextfield, setName, NULL, 0)
- PHP_ME(swftextfield, addString, NULL, 0)
-#ifdef HAVE_NEW_MING
- PHP_ME(swftextfield, setPadding, NULL, 0)
- PHP_ME(swftextfield, addChars, NULL, 0)
-#endif
- { NULL, NULL, NULL }
-};
-
-/* }}} */
-
-zend_module_entry ming_module_entry = {
- STANDARD_MODULE_HEADER,
- "ming",
- ming_functions,
- PHP_MINIT(ming), /* module init function */
- NULL, /* module shutdown function */
- PHP_RINIT(ming), /* request init function */
- NULL, /* request shutdown function */
- PHP_MINFO(ming), /* module info function */
- NO_VERSION_YET,
- STANDARD_MODULE_PROPERTIES
-};
-
-#ifdef COMPILE_DL_MING
-ZEND_GET_MODULE(ming)
-#endif
-
-/* {{{ todo PHP_MINFO_FUNCTION(ming)
-*/
-PHP_MINFO_FUNCTION(ming)
-{
- php_info_print_table_start();
- php_info_print_table_row(2, "Ming SWF output library", "enabled");
- php_info_print_table_row(2, "Version", MING_VERSION_TEXT);
- php_info_print_table_end();
-}
-/* }}} */
-
-/* {{{ todo PHP_MINIT_FUNCTION(ming)
-*/
-
-/* custom error handler propagates ming errors up to php */
-static void php_ming_error(const char *msg, ...)
-{
- va_list args;
- char *buffer;
-
- TSRMLS_FETCH();
-
- va_start(args, msg);
- vspprintf(&buffer, 0, msg, args);
- va_end(args);
-
- php_error_docref(NULL TSRMLS_CC, E_ERROR, "%s", buffer);
- efree(buffer);
-}
-
-PHP_RINIT_FUNCTION(ming)
-{
- /* XXX - this didn't work so well last I tried.. */
-
- if (Ming_init() != 0) {
- php_error_docref(NULL TSRMLS_CC, E_ERROR, "Error initializing Ming module");
- return FAILURE;
- }
- return SUCCESS;
-}
-
-PHP_MINIT_FUNCTION(ming)
-{
- zend_class_entry shape_class_entry;
- zend_class_entry fill_class_entry;
- zend_class_entry gradient_class_entry;
- zend_class_entry bitmap_class_entry;
- zend_class_entry text_class_entry;
- zend_class_entry textfield_class_entry;
- zend_class_entry font_class_entry;
- zend_class_entry displayitem_class_entry;
- zend_class_entry movie_class_entry;
- zend_class_entry button_class_entry;
- zend_class_entry action_class_entry;
- zend_class_entry morph_class_entry;
- zend_class_entry sprite_class_entry;
- zend_class_entry sound_class_entry;
-#ifdef HAVE_NEW_MING
- zend_class_entry fontchar_class_entry;
- zend_class_entry soundinstance_class_entry;
- zend_class_entry videostream_class_entry;
- zend_class_entry prebuiltclip_class_entry;
-#endif
-
- Ming_setErrorFunction((void *) php_ming_error);
-
-#define CONSTANT(s,c) REGISTER_LONG_CONSTANT((s), (c), CONST_CS | CONST_PERSISTENT)
-
- /* flags for SWFButton_addShape */
- CONSTANT("SWFBUTTON_HIT", SWFBUTTONRECORD_HITSTATE);
- CONSTANT("SWFBUTTON_DOWN", SWFBUTTONRECORD_DOWNSTATE);
- CONSTANT("SWFBUTTON_OVER", SWFBUTTONRECORD_OVERSTATE);
- CONSTANT("SWFBUTTON_UP", SWFBUTTONRECORD_UPSTATE);
-
- /* flags for SWFButton_addAction */
- CONSTANT("SWFBUTTON_MOUSEUPOUTSIDE", SWFBUTTON_MOUSEUPOUTSIDE);
- CONSTANT("SWFBUTTON_DRAGOVER", SWFBUTTON_DRAGOVER);
- CONSTANT("SWFBUTTON_DRAGOUT", SWFBUTTON_DRAGOUT);
- CONSTANT("SWFBUTTON_MOUSEUP", SWFBUTTON_MOUSEUP);
- CONSTANT("SWFBUTTON_MOUSEDOWN", SWFBUTTON_MOUSEDOWN);
- CONSTANT("SWFBUTTON_MOUSEOUT", SWFBUTTON_MOUSEOUT);
- CONSTANT("SWFBUTTON_MOUSEOVER", SWFBUTTON_MOUSEOVER);
-
- /* flags for SWFFill */
- CONSTANT("SWFFILL_RADIAL_GRADIENT", SWFFILL_RADIAL_GRADIENT);
- CONSTANT("SWFFILL_LINEAR_GRADIENT", SWFFILL_LINEAR_GRADIENT);
- CONSTANT("SWFFILL_TILED_BITMAP", SWFFILL_TILED_BITMAP);
- CONSTANT("SWFFILL_CLIPPED_BITMAP", SWFFILL_CLIPPED_BITMAP);
-
- /* flags for SWFTextField_init */
- CONSTANT("SWFTEXTFIELD_HASLENGTH", SWFTEXTFIELD_HASLENGTH);
- CONSTANT("SWFTEXTFIELD_NOEDIT", SWFTEXTFIELD_NOEDIT);
- CONSTANT("SWFTEXTFIELD_PASSWORD", SWFTEXTFIELD_PASSWORD);
- CONSTANT("SWFTEXTFIELD_MULTILINE", SWFTEXTFIELD_MULTILINE);
- CONSTANT("SWFTEXTFIELD_WORDWRAP", SWFTEXTFIELD_WORDWRAP);
- CONSTANT("SWFTEXTFIELD_DRAWBOX", SWFTEXTFIELD_DRAWBOX);
- CONSTANT("SWFTEXTFIELD_NOSELECT", SWFTEXTFIELD_NOSELECT);
- CONSTANT("SWFTEXTFIELD_HTML", SWFTEXTFIELD_HTML);
-
- /* flags for SWFTextField_align */
- CONSTANT("SWFTEXTFIELD_ALIGN_LEFT", SWFTEXTFIELD_ALIGN_LEFT);
- CONSTANT("SWFTEXTFIELD_ALIGN_RIGHT", SWFTEXTFIELD_ALIGN_RIGHT);
- CONSTANT("SWFTEXTFIELD_ALIGN_CENTER", SWFTEXTFIELD_ALIGN_CENTER);
- CONSTANT("SWFTEXTFIELD_ALIGN_JUSTIFY", SWFTEXTFIELD_ALIGN_JUSTIFY);
-
- /* flags for SWFDisplayItem_addAction */
- CONSTANT("SWFACTION_ONLOAD", SWFACTION_ONLOAD);
- CONSTANT("SWFACTION_ENTERFRAME", SWFACTION_ENTERFRAME);
- CONSTANT("SWFACTION_UNLOAD", SWFACTION_UNLOAD);
- CONSTANT("SWFACTION_MOUSEMOVE", SWFACTION_MOUSEMOVE);
- CONSTANT("SWFACTION_MOUSEDOWN", SWFACTION_MOUSEDOWN);
- CONSTANT("SWFACTION_MOUSEUP", SWFACTION_MOUSEUP);
- CONSTANT("SWFACTION_KEYDOWN", SWFACTION_KEYDOWN);
- CONSTANT("SWFACTION_KEYUP", SWFACTION_KEYUP);
- CONSTANT("SWFACTION_DATA", SWFACTION_DATA);
-
- le_swfshapep = zend_register_list_destructors_ex(destroy_SWFShape_resource, NULL, "SWFShape", module_number);
- le_swffillp = zend_register_list_destructors_ex(destroy_SWFFill_resource, NULL, "SWFFill", module_number);
- le_swfgradientp = zend_register_list_destructors_ex(destroy_SWFGradient_resource, NULL, "SWFGradient", module_number);
- le_swfbitmapp = zend_register_list_destructors_ex(destroy_SWFBitmap_resource, NULL, "SWFBitmap", module_number);
- le_swftextp = zend_register_list_destructors_ex(destroy_SWFText_resource, NULL, "SWFText", module_number);
- le_swftextfieldp = zend_register_list_destructors_ex(destroy_SWFTextField_resource, NULL, "SWFTextField", module_number);
- le_swffontp = zend_register_list_destructors_ex(destroy_SWFFont_resource, NULL, "SWFFont", module_number);
- le_swfdisplayitemp = zend_register_list_destructors_ex(NULL, NULL, "SWFDisplayItem", module_number);
- le_swfmoviep = zend_register_list_destructors_ex(destroy_SWFMovie_resource, NULL, "SWFMovie", module_number);
- le_swfbuttonp = zend_register_list_destructors_ex(destroy_SWFButton_resource, NULL, "SWFButton", module_number);
- le_swfactionp = zend_register_list_destructors_ex(NULL, NULL, "SWFAction", module_number);
- le_swfmorphp = zend_register_list_destructors_ex(destroy_SWFMorph_resource, NULL, "SWFMorph", module_number);
- le_swfspritep = zend_register_list_destructors_ex(destroy_SWFSprite_resource, NULL, "SWFSprite", module_number);
- le_swfinputp = zend_register_list_destructors_ex(destroy_SWFInput_resource, NULL, "SWFInput", module_number);
-
- le_swfsoundp = zend_register_list_destructors_ex(destroy_SWFSound_resource, NULL, "SWFSound", module_number);
-#ifdef HAVE_NEW_MING
- le_swffontcharp = zend_register_list_destructors_ex(destroy_SWFFontCharacter_resource, NULL, "SWFFontCharacter", module_number);
- le_swfsoundinstancep = zend_register_list_destructors_ex(NULL, NULL, "SWFSoundInstance", module_number);
-
- le_swfvideostreamp = zend_register_list_destructors_ex(destroy_SWFVideoStream_resource, NULL, "SWFVideoStream", module_number);
- le_swfprebuiltclipp = zend_register_list_destructors_ex(destroy_SWFPrebuiltClip_resource, NULL, "SWFPrebuiltClip", module_number);
-
-#endif
-
- INIT_CLASS_ENTRY(shape_class_entry, "SWFShape", swfshape_functions);
- INIT_CLASS_ENTRY(fill_class_entry, "SWFFill", swffill_functions);
- INIT_CLASS_ENTRY(gradient_class_entry, "SWFGradient", swfgradient_functions);
- INIT_CLASS_ENTRY(bitmap_class_entry, "SWFBitmap", swfbitmap_functions);
- INIT_CLASS_ENTRY(text_class_entry, "SWFText", swftext_functions);
- INIT_CLASS_ENTRY(textfield_class_entry, "SWFTextField", swftextfield_functions);
- INIT_CLASS_ENTRY(font_class_entry, "SWFFont", swffont_functions);
- INIT_CLASS_ENTRY(displayitem_class_entry, "SWFDisplayItem", swfdisplayitem_functions);
- INIT_CLASS_ENTRY(movie_class_entry, "SWFMovie", swfmovie_functions);
- INIT_CLASS_ENTRY(button_class_entry, "SWFButton", swfbutton_functions);
- INIT_CLASS_ENTRY(action_class_entry, "SWFAction", swfaction_functions);
- INIT_CLASS_ENTRY(morph_class_entry, "SWFMorph", swfmorph_functions);
- INIT_CLASS_ENTRY(sprite_class_entry, "SWFSprite", swfsprite_functions);
- INIT_CLASS_ENTRY(sound_class_entry, "SWFSound", swfsound_functions);
-#ifdef HAVE_NEW_MING
- INIT_CLASS_ENTRY(fontchar_class_entry, "SWFFontChar", swffontchar_functions);
- INIT_CLASS_ENTRY(soundinstance_class_entry, "SWFSoundInstance", swfsoundinstance_functions);
- INIT_CLASS_ENTRY(videostream_class_entry, "SWFVideoStream", swfvideostream_functions);
- INIT_CLASS_ENTRY(prebuiltclip_class_entry, "SWFPrebuiltClip", swfprebuiltclip_functions);
-#endif
-
- shape_class_entry_ptr = zend_register_internal_class(&shape_class_entry TSRMLS_CC);
- fill_class_entry_ptr = zend_register_internal_class(&fill_class_entry TSRMLS_CC);
- gradient_class_entry_ptr = zend_register_internal_class(&gradient_class_entry TSRMLS_CC);
- bitmap_class_entry_ptr = zend_register_internal_class(&bitmap_class_entry TSRMLS_CC);
- text_class_entry_ptr = zend_register_internal_class(&text_class_entry TSRMLS_CC);
- textfield_class_entry_ptr = zend_register_internal_class(&textfield_class_entry TSRMLS_CC);
- font_class_entry_ptr = zend_register_internal_class(&font_class_entry TSRMLS_CC);
- displayitem_class_entry_ptr = zend_register_internal_class(&displayitem_class_entry TSRMLS_CC);
- movie_class_entry_ptr = zend_register_internal_class(&movie_class_entry TSRMLS_CC);
- button_class_entry_ptr = zend_register_internal_class(&button_class_entry TSRMLS_CC);
- action_class_entry_ptr = zend_register_internal_class(&action_class_entry TSRMLS_CC);
- morph_class_entry_ptr = zend_register_internal_class(&morph_class_entry TSRMLS_CC);
- sprite_class_entry_ptr = zend_register_internal_class(&sprite_class_entry TSRMLS_CC);
- sound_class_entry_ptr = zend_register_internal_class(&sound_class_entry TSRMLS_CC);
-#ifdef HAVE_NEW_MING
- fontchar_class_entry_ptr = zend_register_internal_class(&fontchar_class_entry TSRMLS_CC);
- soundinstance_class_entry_ptr = zend_register_internal_class(&soundinstance_class_entry TSRMLS_CC);
- videostream_class_entry_ptr = zend_register_internal_class(&videostream_class_entry TSRMLS_CC);
- prebuiltclip_class_entry_ptr = zend_register_internal_class(&prebuiltclip_class_entry TSRMLS_CC);
-#endif
-
- return SUCCESS;
-}
-/* }}} */
-
-#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/ming/ming.dsp b/ext/ming/ming.dsp
deleted file mode 100644
index 00dfbd42d6..0000000000
--- a/ext/ming/ming.dsp
+++ /dev/null
@@ -1,107 +0,0 @@
-# Microsoft Developer Studio Project File - Name="ming" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=ming - Win32 Debug_TS
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "ming.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "ming.mak" CFG="ming - Win32 Debug_TS"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "ming - Win32 Release_TS" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "ming - Win32 Debug_TS" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "ming - Win32 Release_TS"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release_TS"
-# PROP BASE Intermediate_Dir "Release_TS"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release_TS"
-# PROP Intermediate_Dir "Release_TS"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "MING_EXPORTS" /YX /FD /c
-# ADD CPP /nologo /MD /W3 /GX /O2 /I "..\.." /I "..\..\Zend" /I "..\..\TSRM" /I "..\..\main" /I "..\..\win32" /I "..\..\..\bindlib_w32" /D "WIN32" /D "MING_EXPORTS" /D "COMPILE_DL_MING" /D "HAVE_MING" /D ZEND_DEBUG=0 /D "NDEBUG" /D "_WINDOWS" /D "ZEND_WIN32" /D "PHP_WIN32" /D ZTS=1 /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x407 /d "NDEBUG"
-# ADD RSC /l 0x407 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386
-# ADD LINK32 php5ts.lib libming.lib zlib.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 /out:"..\..\Release_TS/php_ming.dll" /libpath:"..\..\Release_TS" /libpath:"..\..\Release_TS_Inline"
-
-!ELSEIF "$(CFG)" == "ming - Win32 Debug_TS"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug_TS"
-# PROP BASE Intermediate_Dir "Debug_TS"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug_TS"
-# PROP Intermediate_Dir "Debug_TS"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "MING_EXPORTS" /YX /FD /GZ /c
-# ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "..\.." /I "..\..\Zend" /I "..\..\TSRM" /I "..\..\main" /I "..\..\win32" /I "..\..\..\bindlib_w32" /D ZEND_DEBUG=1 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "MING_EXPORTS" /D "COMPILE_DL_MING" /D "ZEND_WIN32" /D "PHP_WIN32" /D "HAVE_MING" /D ZTS=1 /YX /FD /GZ /c
-# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x407 /d "_DEBUG"
-# ADD RSC /l 0x407 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 php5ts_debug.lib libming.lib zlib.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /out:"..\..\Debug_TS/php_ming.dll" /pdbtype:sept /libpath:"..\..\Debug_TS"
-
-!ENDIF
-
-# Begin Target
-
-# Name "ming - Win32 Release_TS"
-# Name "ming - Win32 Debug_TS"
-# Begin Group "Source Files"
-
-# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
-# Begin Source File
-
-SOURCE=.\ming.c
-# End Source File
-# End Group
-# Begin Group "Header Files"
-
-# PROP Default_Filter "h;hpp;hxx;hm;inl"
-# Begin Source File
-
-SOURCE=.\php_ming.h
-# End Source File
-# End Group
-# End Target
-# End Project
diff --git a/ext/ming/php_ming.h b/ext/ming/php_ming.h
deleted file mode 100644
index 3e0264e064..0000000000
--- a/ext/ming/php_ming.h
+++ /dev/null
@@ -1,240 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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. |
- +----------------------------------------------------------------------+
- | Authors: Dave Hayden <dave@opaque.net> |
- | Frank M. Kromann <fmk@php.net> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifndef _PHP_MING_H
-#define _PHP_MING_H
-
-#if HAVE_MING
-
-extern zend_module_entry ming_module_entry;
-#define ming_module_ptr &ming_module_entry
-
-PHP_RINIT_FUNCTION(ming);
-PHP_MINIT_FUNCTION(ming);
-PHP_MINFO_FUNCTION(ming);
-
-PHP_METHOD(swfbitmap, init);
-PHP_METHOD(swfbitmap, getWidth);
-PHP_METHOD(swfbitmap, getHeight);
-
-PHP_METHOD(swffill, init);
-PHP_METHOD(swffill, moveTo);
-PHP_METHOD(swffill, scaleTo);
-PHP_METHOD(swffill, rotateTo);
-PHP_METHOD(swffill, skewXTo);
-PHP_METHOD(swffill, skewYTo);
-
-PHP_METHOD(swfgradient, init);
-PHP_METHOD(swfgradient, addEntry);
-
-PHP_METHOD(swfshape, init);
-PHP_METHOD(swfshape, addfill);
-PHP_METHOD(swfshape, setrightfill);
-PHP_METHOD(swfshape, setleftfill);
-PHP_METHOD(swfshape, setline);
-PHP_METHOD(swfshape, movepento);
-PHP_METHOD(swfshape, movepen);
-PHP_METHOD(swfshape, drawlineto);
-PHP_METHOD(swfshape, drawline);
-PHP_METHOD(swfshape, drawcurveto);
-PHP_METHOD(swfshape, drawcurve);
-PHP_METHOD(swfshape, drawglyph);
-PHP_METHOD(swfshape, drawarc);
-PHP_METHOD(swfshape, drawcircle);
-PHP_METHOD(swfshape, drawcubic);
-PHP_METHOD(swfshape, drawcubicto);
-
-PHP_METHOD(swfmovie, init);
-PHP_METHOD(swfmovie, output);
-PHP_METHOD(swfmovie, saveToFile);
-PHP_METHOD(swfmovie, save);
-PHP_METHOD(swfmovie, add);
-PHP_METHOD(swfmovie, remove);
-PHP_METHOD(swfmovie, nextFrame);
-PHP_METHOD(swfmovie, labelFrame);
-PHP_METHOD(swfmovie, setBackground);
-PHP_METHOD(swfmovie, setRate);
-PHP_METHOD(swfmovie, setDimension);
-PHP_METHOD(swfmovie, setFrames);
-
-#ifdef HAVE_NEW_MING
-PHP_METHOD(swfmovie, streamMp3);
-PHP_METHOD(swfmovie, addExport);
-PHP_METHOD(swfmovie, writeExports);
-PHP_METHOD(swfmovie, startSound);
-PHP_METHOD(swfmovie, stopSound);
-PHP_METHOD(swfmovie, importChar);
-PHP_METHOD(swfmovie, importFont);
-PHP_METHOD(swfmovie, addFont);
-#endif
-
-PHP_METHOD(swfsprite, init);
-PHP_METHOD(swfsprite, add);
-PHP_METHOD(swfsprite, remove);
-PHP_METHOD(swfsprite, nextFrame);
-PHP_METHOD(swfsprite, labelFrame);
-PHP_METHOD(swfsprite, setFrames);
-
-#ifdef HAVE_NEW_MING
-PHP_METHOD(swfsprite, startSound);
-PHP_METHOD(swfsprite, stopSound);
-#endif
-
-PHP_METHOD(swffont, init);
-PHP_METHOD(swffont, getWidth);
-
-#ifdef HAVE_NEW_MING
-PHP_METHOD(swffont, getUTF8Width);
-/*PHP_METHOD(swffont, getWideWidth);*/
-#endif
-
-PHP_METHOD(swffont, getAscent);
-PHP_METHOD(swffont, getDescent);
-PHP_METHOD(swffont, getLeading);
-
-#ifdef HAVE_NEW_MING
-/*PHP_METHOD(swffont, addChars);*/
-PHP_METHOD(swffont, getShape);
-#endif
-
-PHP_METHOD(swffont, getLeading);
-
-PHP_METHOD(swftext, init);
-PHP_METHOD(swftext, setFont);
-PHP_METHOD(swftext, setHeight);
-PHP_METHOD(swftext, setSpacing);
-PHP_METHOD(swftext, setColor);
-PHP_METHOD(swftext, moveTo);
-PHP_METHOD(swftext, addString);
-
-#ifdef HAVE_NEW_MING
-PHP_METHOD(swftext, addUTF8String);
-/*PHP_METHOD(swftext, addWideString);*/
-#endif
-
-PHP_METHOD(swftext, getWidth);
-
-#ifdef HAVE_NEW_MING
-PHP_METHOD(swftext, getUTF8Width);
-/*PHP_METHOD(swftext, getWideWidth);*/
-#endif
-
-PHP_METHOD(swftext, getAscent);
-PHP_METHOD(swftext, getDescent);
-PHP_METHOD(swftext, getLeading);
-
-PHP_METHOD(swftextfield, init);
-PHP_METHOD(swftextfield, setFont);
-PHP_METHOD(swftextfield, setBounds);
-PHP_METHOD(swftextfield, align);
-PHP_METHOD(swftextfield, setHeight);
-PHP_METHOD(swftextfield, setLeftMargin);
-PHP_METHOD(swftextfield, setRightMargin);
-PHP_METHOD(swftextfield, setMargins);
-PHP_METHOD(swftextfield, setIndentation);
-PHP_METHOD(swftextfield, setLineSpacing);
-PHP_METHOD(swftextfield, setColor);
-PHP_METHOD(swftextfield, setName);
-PHP_METHOD(swftextfield, addString);
-PHP_METHOD(swftextfield, setPadding);
-PHP_METHOD(swftextfield, addChars);
-
-PHP_METHOD(swffontchar, addChars);
-PHP_METHOD(swffontchar, addUTF8Chars);
-
-PHP_METHOD(swfdisplayitem, move);
-PHP_METHOD(swfdisplayitem, moveTo);
-PHP_METHOD(swfdisplayitem, scale);
-PHP_METHOD(swfdisplayitem, scaleTo);
-PHP_METHOD(swfdisplayitem, rotate);
-PHP_METHOD(swfdisplayitem, rotateTo);
-PHP_METHOD(swfdisplayitem, skewX);
-PHP_METHOD(swfdisplayitem, skewXTo);
-PHP_METHOD(swfdisplayitem, skewY);
-PHP_METHOD(swfdisplayitem, skewYTo);
-PHP_METHOD(swfdisplayitem, setMatrix);
-PHP_METHOD(swfdisplayitem, setDepth);
-PHP_METHOD(swfdisplayitem, setRatio);
-PHP_METHOD(swfdisplayitem, addColor);
-PHP_METHOD(swfdisplayitem, multColor);
-PHP_METHOD(swfdisplayitem, setName);
-PHP_METHOD(swfdisplayitem, addAction);
-
-#ifdef HAVE_NEW_MING
-PHP_METHOD(swfdisplayitem, remove);
-PHP_METHOD(swfdisplayitem, setMaskLevel);
-PHP_METHOD(swfdisplayitem, endMask);
-PHP_METHOD(swfdisplayitem, getX);
-PHP_METHOD(swfdisplayitem, getY);
-PHP_METHOD(swfdisplayitem, getXScale);
-PHP_METHOD(swfdisplayitem, getYScale);
-PHP_METHOD(swfdisplayitem, getXSkew);
-PHP_METHOD(swfdisplayitem, getYSkew);
-PHP_METHOD(swfdisplayitem, getRot);
-#endif
-
-PHP_METHOD(swfbutton, init);
-PHP_METHOD(swfbutton, setHit);
-PHP_METHOD(swfbutton, setOver);
-PHP_METHOD(swfbutton, setUp);
-PHP_METHOD(swfbutton, setDown);
-PHP_METHOD(swfbutton, setAction);
-PHP_METHOD(swfbutton, addShape);
-
-#ifdef HAVE_NEW_MING
-PHP_METHOD(swfbutton, setMenu);
-#endif
-
-PHP_METHOD(swfbutton, addAction);
-
-#ifdef HAVE_NEW_MING
-PHP_METHOD(swfbutton, addSound);
-#endif
-
-PHP_METHOD(swfaction, init);
-
-PHP_METHOD(swfmorph, init);
-PHP_METHOD(swfmorph, getShape1);
-PHP_METHOD(swfmorph, getShape2);
-
-PHP_METHOD(swfsound, init);
-
-#ifdef HAVE_NEW_MING
-PHP_METHOD(swfsoundinstance, noMultiple);
-PHP_METHOD(swfsoundinstance, loopInPoint);
-PHP_METHOD(swfsoundinstance, loopOutPoint);
-PHP_METHOD(swfsoundinstance, loopCount);
-#endif
-
-PHP_FUNCTION(ming_keypress);
-PHP_FUNCTION(ming_setCubicThreshold);
-PHP_FUNCTION(ming_setScale);
-PHP_FUNCTION(ming_useSWFVersion);
-
-#ifdef HAVE_NEW_MING
-PHP_FUNCTION(ming_useConstants);
-#endif
-
-#else
-#define ming_module_ptr NULL
-#endif /* HAVE_MING */
-#define phpext_ming_ptr ming_module_ptr
-#endif /* _PHP_MING_H */
diff --git a/ext/ming/tests/swfaction.phpt b/ext/ming/tests/swfaction.phpt
deleted file mode 100644
index a99d4e24f6..0000000000
--- a/ext/ming/tests/swfaction.phpt
+++ /dev/null
@@ -1,48 +0,0 @@
---TEST--
-Ming: Simple SWFAction() test
---SKIPIF--
-<?php if (!extension_loaded("ming")) print "skip"; ?>
---FILE--
-<?php /* $Id$ */
-
- $s = new SWFShape();
- $f = $s->addFill(0xff, 0, 0);
- $s->setRightFill($f);
-
- $s->movePenTo(-500,-500);
- $s->drawLineTo(500,-500);
- $s->drawLineTo(500,500);
- $s->drawLineTo(-500,500);
- $s->drawLineTo(-500,-500);
-
- $p = new SWFSprite();
- $i = $p->add($s);
- $i->setDepth(1);
- $p->nextFrame();
-
- for($n=0; $n<5; ++$n)
- {
- $i->rotate(-15);
- $p->nextFrame();
- }
-
- $m = new SWFMovie();
- $m->setBackground(0xff, 0xff, 0xff);
- $m->setDimension(6000,4000);
-
- $i = $m->add($p);
- $i->setDepth(1);
- $i->moveTo(1000,2000);
- $i->setName("box");
-
- $m->add(new SWFAction("_root.box._x += 3;"));
- $m->nextFrame();
- $m->add(new SWFAction("gotoFrame(0); play();"));
- $m->nextFrame();
-
- $m->save('./test.swf');
- echo md5_file('./test.swf'), "\n";
- unlink('./test.swf');
-?>
---EXPECT--
-9e47538692393b9915faf3fc7e686cd5
diff --git a/ext/mnogosearch/CREDITS b/ext/mnogosearch/CREDITS
deleted file mode 100644
index 3ab998a1da..0000000000
--- a/ext/mnogosearch/CREDITS
+++ /dev/null
@@ -1,2 +0,0 @@
-mnoGoSearch
-Sergey Kartashoff, Alex Barkov, Ramil Kalimullin
diff --git a/ext/mnogosearch/README b/ext/mnogosearch/README
deleted file mode 100644
index 2b4315796e..0000000000
--- a/ext/mnogosearch/README
+++ /dev/null
@@ -1,24 +0,0 @@
-$Source$
-$Id$
-
-mnoGoSearch extension module for PHP.
-
-For details please refer to http://www.mnogosearch.org/
-
-If used with mysql you should not use bundled mysql library
-in the php distribution. You should use native mysql
-library. To do this you should compile php with specefying mysql-dir
-(for example --with-mysql=/usr, not --with-mysql).
-
-To compile PHP with CVS versions of mnogosearch (not with official releases)
-you must open configure script of mnogosearch in your editor. Find
-line like the following:
-
-VERSION=x.x.x-`date "+%d%m%Y"`
-
-where x.x.x is the mnogosearch version number like 3.2.16 or so.
-Then just remove -`date "+%d%m%Y"`. After that this line should be
-VERSION=x.x.x
-
-After complete you should reconfigure, recompile, reinstall mnogosearch and
-php.
diff --git a/ext/mnogosearch/config.m4 b/ext/mnogosearch/config.m4
deleted file mode 100644
index 497838fbc4..0000000000
--- a/ext/mnogosearch/config.m4
+++ /dev/null
@@ -1,53 +0,0 @@
-dnl
-dnl $Source$
-dnl $Id$
-dnl
-
-PHP_ARG_WITH(mnogosearch,for mnoGoSearch support,
-[ --with-mnogosearch[=DIR]
- Include mnoGoSearch support. DIR is the mnoGoSearch
- base install directory, defaults to /usr/local/mnogosearch.])
-
- if test "$PHP_MNOGOSEARCH" != "no"; then
-
- if test "$PHP_MNOGOSEARCH" = "yes"; then
- MNOGOSEARCH_BINDIR=/usr/local/mnogosearch/bin
- MNOGOSEARCH_INCDIR=/usr/local/mnogosearch/include
- MNOGOSEARCH_LIBDIR=/usr/local/mnogosearch/lib
- else
- MNOGOSEARCH_BINDIR=$PHP_MNOGOSEARCH/bin
- MNOGOSEARCH_INCDIR=$PHP_MNOGOSEARCH/include
- MNOGOSEARCH_LIBDIR=$PHP_MNOGOSEARCH/lib
- fi
-
- AC_MSG_CHECKING(for mnoGoSearch version)
-
- if test -x "$MNOGOSEARCH_BINDIR/udm-config"; then
- MNOGOSEARCH_VERSION=`$MNOGOSEARCH_BINDIR/udm-config --version`
- MNOGOSEARCH_VERSION_ID=`$MNOGOSEARCH_BINDIR/udm-config --version-id`
-
- if test $? -ne 0; then
- AC_MSG_RESULT(<= 3.1.9)
- AC_MSG_ERROR(mnoGoSearch 3.1.10 at least required)
- fi
-
- if test "$MNOGOSEARCH_VERSION_ID" -lt 30110; then
- AC_MSG_RESULT(<= 3.1.9)
- AC_MSG_ERROR(mnoGoSearch 3.1.10 at least required)
- fi
-
- AC_MSG_RESULT($MNOGOSEARCH_VERSION)
-
- PHP_EVAL_LIBLINE(`$MNOGOSEARCH_BINDIR/udm-config --libs`, MNOGOSEARCH_SHARED_LIBADD)
- else
- AC_MSG_ERROR(udm-config script not found in $MNOGOSEARCH_BINDIR)
- fi
-
- PHP_ADD_INCLUDE($MNOGOSEARCH_INCDIR)
-
- AC_DEFINE(HAVE_MNOGOSEARCH,1,[ ])
-
- PHP_NEW_EXTENSION(mnogosearch, php_mnogo.c, $ext_shared)
- PHP_SUBST(MNOGOSEARCH_SHARED_LIBADD)
-
- fi
diff --git a/ext/mnogosearch/index.php b/ext/mnogosearch/index.php
deleted file mode 100644
index 40cde6264f..0000000000
--- a/ext/mnogosearch/index.php
+++ /dev/null
@@ -1,1055 +0,0 @@
-<?
-
-/*
- $Source$
- $Id$
-*/
-
-/* mnoGoSearch-php-lite v.1.4
- * for mnoGoSearch ( formely known as UdmSearch ) free web search engine
- * (C) 2001-2002 by Sergey Kartashoff <gluke@mail.ru>,
- * mnoGoSearch Developers Team <devel@mnogosearch.org>
- */
-
-if (!extension_loaded('mnogosearch')) {
- print "<b>This script requires PHP 4.0.5+ with mnoGoSearch extension</b>";
- exit;
-}
-
-// maximal page number to view
-$MAX_NP=1000;
-
-// maximum results per page
-$MAX_PS=100;
-
-// (optional) Enable autowild feature for url limits
-// 'yes' - default value, can be 'yes' or 'no'
-// $auto_wild='yes';
-
-/* variables section */
-
-if (Udm_Api_Version() >= 30204) {
- $dbaddr='mysql://mnogo:mnogo@/mnogo/?dbmode=single';
-} else {
- $dbaddr='mysql://mnogo:mnogo@/mnogo/';
- $dbmode='single';
-}
-
-$localcharset='koi8-r';
-$browsercharset='utf-8';
-$phrase=$cache=$crosswords='no';
-$ispelluseprefixes=$trackquery='no';
-$spell_host=$vardir=$datadir='';
-$ispellmode='text';
-
-$affix_file=array();
-$spell_file=array();
-$stopwordtable_arr=array();
-$stopwordfile_arr=array();
-$synonym_arr=array();
-$searchd_arr=array();
-
-// $affix_file['en']='/opt/udm/ispell/en.aff';
-// $affix_file['ru']='/opt/udm/ispell/ru.aff';
-// $spell_file['en']='/opt/udm/ispell/en.dict';
-// $spell_file['ru']='/opt/udm/ispell/ru.dict';
- $stopwordtable_arr[]='stopword';
-// $stopwordfile_arr[]='stopwords.txt';
-// $synonym_arr[]='/opt/udm/synonym/english.syn';
-$searchd_arr[]='localhost';
-
-$minwordlength=1;
-$maxwordlength=32;
-
-$storedocurl="/cgi-bin/storedoc.cgi";
-
-/* initialisation section */
-
-if(isset($HTTP_GET_VARS)){
- while(list($var, $val)=each($HTTP_GET_VARS)){
- $$var=$val;
- }
-}
-if(isset($HTTP_POST_VARS)){
- while(list($var, $val)=each($HTTP_POST_VARS)){
- $$var=$val;
- }
-}
-if(isset($HTTP_COOKIE_VARS)){
- while(list($var, $val)=each($HTTP_COOKIE_VARS)){
- $$var=$val;
- }
-}
-if(isset($HTTP_SERVER_VARS)){
- while(list($var, $val)=each($HTTP_SERVER_VARS)){
- $$var=$val;
- }
-}
-
-$self=$PHP_SELF;
-
-if ($ps=="") $ps=20;
-if ($np=="") $np=0;
-if ($o=="") $o=0;
-
-if (($dt!='back') && ($dt!='er') && ($dt!='range')) $dt='back';
-if ($dp=="") $dp=0;
-if (($dx!=0) && ($dx!=-1) && ($dx!=1)) $dx=0;
-if ($dy<1970) $dy=1970;
-if (($dm<0) || ($dm>11)) $dm=0;
-if (($dd<=0) || ($dd>31)) $dd="01";
-
-$db=urldecode($db);
-$de=urldecode($de);
-
-if ($db=="") $db='01/01/1970';
-if ($de=="") $de='31/12/2020';
-
-// define this to enable stored support
-// $storedaddr="localhost";
-$storedocurl='/cgi-bin/storedoc.cgi';
-
-if (isset($q)) {
- $q=urldecode($q);
- $have_query_flag=1;
-} else {
- $have_query_flag=0;
-}
-
-$ul=urldecode($ul);
-$tag=urldecode($t);
-$lang=urldecode($lang);
-
-$query_orig=$q;
-
-if (isset($CHARSET_SAVED_QUERY_STRING)) {
- $q_local=urldecode($CHARSET_SAVED_QUERY_STRING);
- if (preg_match('/q=([^&]*)\&/',$q_local,$param)) {
- $q_local=urlencode($param[1]);
- } elseif (preg_match('/q=(.*)$/',$q_local,$param)) {
- $q_local=urlencode($param[1]);
- } else {
- $q_local=urlencode($q);
- }
-} else {
- $q_local=urlencode($q);
-}
-
-$ul_local=urlencode($ul);
-$t_local=urlencode($tag);
-$db_local=urlencode($db);
-$de_local=urlencode($de);
-$lang_local=urlencode($lang);
-
-if (($MAX_NP > 0) && ($np>$MAX_NP)) $np=$MAX_NP;
-if (($MAX_PS > 0) && ($ps>$MAX_PS)) $ps=$MAX_PS;
-
-// -----------------------------------------------
-// print_bottom()
-// -----------------------------------------------
-function print_bottom(){
- print ("<HR><center><img src=\"http://mnogosearch.org/img/mnogo.gif\">\n");
- print ("<font size=\"-1\">Powered by <a href=\"http://mnogosearch.org/\">mnoGoSearch</a></font><br>\n");
- print ("<p></BODY></HTML>\n");
-}
-
-
-// -----------------------------------------------
-// print_error_local($str)
-// -----------------------------------------------
-function print_error_local($str){
- print ("<CENTER><FONT COLOR=\"#FF0000\">An error occured!</FONT>\n");
- print ("<P><B>$str</B></CENTER>\n");
- print_bottom();
- exit;
-}
-
-// -----------------------------------------------
-// exit_local()
-// -----------------------------------------------
-function exit_local($print_err = 1) {
- drop_temp_table($print_err);
- exit;
-}
-
-// -----------------------------------------------
-// format_lastmod($lastmod)
-// -----------------------------------------------
-function format_lastmod($lastmod) {
- $temp=$lastmod;
- if (!$temp) $temp = 'undefined';
- else $temp = strftime('%a, %d %b %Y %H:%M:%S %Z',$temp);
-
- return $temp;
-}
-
-// -----------------------------------------------
-// format_dp($dp)
-// -----------------------------------------------
-function format_dp($dp) {
- $result=0;
-
- while ($dp != '') {
- if (preg_match('/^([\-\+]?\d+)([sMhdmy]?)/',$dp,$param)) {
- switch ($param[2]) {
- case 's': $multiplier=1; break;
- case 'M': $multiplier=60; break;
- case 'h': $multiplier=3600; break;
- case 'd': $multiplier=3600*24; break;
- case 'm': $multiplier=3600*24*31; break;
- case 'y': $multiplier=3600*24*365; break;
- default: $multiplier=1;
- }
-
- $result += $param[1]*$multiplier;
- $dp=preg_replace("/^[\-\+]?\d+$param[2]/",'',$dp);
- } else {
- return 0;
- }
- }
-
- return $result;
-}
-
-// -----------------------------------------------
-// format_userdate($date)
-// -----------------------------------------------
-function format_userdate($date) {
- $result=0;
-
- if (preg_match('/^(\d+)\/(\d+)\/(\d+)$/',$date,$param)) {
- $day=$param[1];
- $mon=$param[2];
- $year=$param[3];
-
- $result=mktime(0,0,0,$mon,$day,$year);
- }
-
- return $result;
-}
-
-// -----------------------------------------------
-// ParseDocText($text)
-// -----------------------------------------------
-function ParseDocText($text){
- global $all_words;
- global $hlbeg, $hlend;
-
- $str=$text;
-
- if (Udm_Api_Version() < 30200) {
- for ($i=0; $i<count($all_words); $i++) {
- $word=$all_words[$i];
- $str = preg_replace("/([\s\t\r\n\~\!\@\#\$\%\^\&\*\(\)\-\_\=\+\\\|\{\}\[\]\;\:\'\"\<\>\?\/\,\.]+)($word)/i","\\1$hlbeg\\2$hlend",$str);
- $str = preg_replace("/^($word)/i","$hlbeg\\1$hlend",$str);
- }
- } else {
- $str = str_replace("\2",$hlbeg,$str);
- $str = str_replace("\3",$hlend,$str);
- }
-
- return $str;
-}
-
-// -----------------------------------------------
-// print_template($t,$echo=1)
-// -----------------------------------------------
-function print_template($t,$echo=1){
- global $templates, $udm_agent;
- global $first_doc, $last_doc, $found, $query_orig, $error, $self;
- global $nav, $wordinfo;
- global $url, $ue, $o, $cat;
- global $clones, $searchtime;
- global $title, $rating, $desc, $contype, $lastmod, $docsize, $ndoc;
- global $keyw, $text, $category;
- global $crc, $Randoms, $rec_id, $DEBUG;
- global $lang_url_translation, $phpver;
-
-
- $str=$templates["$t"][$o];
- if ($str == '') $str=$templates["$t"][0];
-
- $str=ereg_replace('\$f', "$first_doc", $str);
- $str=ereg_replace('\$l', "$last_doc", $str);
- $str=ereg_replace('\$t', "$found", $str);
- $str=ereg_replace('\$A', $self, $str);
-
- $str=ereg_replace('\$Q', HtmlSpecialChars(StripSlashes($query_orig)), $str);
- $str=ereg_replace('\$q', urlencode($query_orig), $str);
- $str=eregi_replace('\$UE', $ue, $str);
-
- $str=ereg_replace('\$E', $error, $str);
- $str=ereg_replace('\$W', $wordinfo, $str);
-
- $str=ereg_replace('\$V', $nav, $str);
-
- if ($lang_url_translation == 'yes') {
- $nolangurl = ereg_replace("\.[a-z]{2}\.[a-z]{2,4}$", "", $url);
- $str=ereg_replace('\$DU', $nolangurl, $str);
- } else {
- $str=ereg_replace('\$DU', $url, $str);
- }
-
- $str=ereg_replace('\$DT', $title, $str);
- $str=ereg_replace('\$DR', "$rating", $str);
- $str=ereg_replace('\$DX', $text, $str);
- $str=ereg_replace('\$DE', ($desc != '')?$desc:$text, $str);
- $str=ereg_replace('\$DC', $contype, $str);
- $str=ereg_replace('\$DM', $lastmod, $str);
- $str=ereg_replace('\$DS', "$docsize", $str);
- $str=ereg_replace('\$DN', "$ndoc", $str);
- $str=ereg_replace('\$DD', $desc, $str);
- $str=ereg_replace('\$DK', $keyw, $str);
- $str=ereg_replace('\$SearchTime', "$searchtime", $str);
-
- if ($phpver >= 40006) {
- if (ereg('\$CP',$str)) {
- if ($temp_cp_arr=Udm_Cat_Path($udm_agent,$cat)) {
- reset($temp_cp_arr);
- $temp_cp='';
- for ($i=0; $i<count($temp_cp_arr); $i+=2) {
- $cp_path=$temp_cp_arr[$i];
- $cp_name=$temp_cp_arr[$i+1];
- $temp_cp .= " &gt; <a href=\"$PHP_SELF?cat=$cp_path\">$cp_name</a> ";
- }
- $str=ereg_replace('\$CP', $temp_cp, $str);
- } else $str=ereg_replace('\$CP', '', $str);
- }
-
- if (ereg('\$CS',$str)) {
- if ($temp_cp_arr=Udm_Cat_List($udm_agent,$cat)) {
- reset($temp_cp_arr);
- $temp_cp='';
- for ($i=0; $i<count($temp_cp_arr); $i+=2) {
- $cp_path=$temp_cp_arr[$i];
- $cp_name=$temp_cp_arr[$i+1];
- $temp_cp .= "<a href=\"$PHP_SELF?cat=$cp_path\">$cp_name</a><br>";
- }
- $str=ereg_replace('\$CS', $temp_cp, $str);
- } else $str=ereg_replace('\$CS', '', $str);
- }
-
- if (ereg('\$DY',$str)) {
- if ($temp_cp_arr=Udm_Cat_Path($udm_agent,$category)) {
- reset($temp_cp_arr);
- $temp_cp='';
- for ($i=0; $i<count($temp_cp_arr); $i+=2) {
- $cp_path=$temp_cp_arr[$i];
- $cp_name=$temp_cp_arr[$i+1];
- $temp_cp .= " &gt; <a href=\"$PHP_SELF?cat=$cp_path\">$cp_name</a> ";
- }
- $str=ereg_replace('\$DY', $temp_cp, $str);
- } else $str=ereg_replace('\$DY', '', $str);
- }
- } else {
- $str=ereg_replace('\$CP', '', $str);
- $str=ereg_replace('\$CS', '', $str);
- $str=ereg_replace('\$DY', '', $str);
- }
-
- $sub=$str;
- while($sub=strstr($sub,'$r')){
- $sub=substr($sub,2);
- $pos=0;
- $num='';
-
- while(($sub[$pos]>='0')&&($sub[$pos]<='9')){
- $num.=$sub[$pos++];
- }
-
- $str=ereg_replace('\$r'.$num, ''.$Randoms[$num], $str);
- }
-
-// if (strstr($str,'$CL')&&($t=='res')) {
-// if (strtolower($clones) == 'no') {
-// $str=ereg_replace('\$CL', '', $str);
-// } elseif ($crc<>'') {
-// }
- $str=ereg_replace('\$CL', $clon, $str);
-// }
-
- if($echo) echo $str; else return $str;
-}
-
-// -----------------------------------------------
-// make_nav($query_orig)
-// -----------------------------------------------
-function make_nav($query_orig){
- global $found,$np,$isnext,$ps,$tag,$ul,$self,$o,$m,$cat;
- global $dt, $dp, $dx, $dm, $dy, $dd, $db, $de, $lang, $wm, $wf;
- global $q_local,$ul_local,$t_local,$db_local,$de_local,$lang_local;
-
- if($np>0){
- $prevp=$np-1;
- $prev_href="$self?q=$q_local&np=$prevp&m=$m".
- ($ps==20?'':"&ps=$ps").
- ($tag==''?'':"&t=$t_local").
- ($ul==''?'':"&ul=$ul_local").
- ($wm==''?'':"&wm=$wm").
- ($wf==''?'':"&wf=$wf").
- (!$o?'':"&o=$o").
- ($dt=='back'?'':"&dt=$dt").
- (!$dp?'':"&dp=$dp").
- (!$dx?'':"&dx=$dx").
- ($dd=='01'?'':"&dd=$dd").
- (!$dm?'':"&dm=$dm").
- ($dy=='1970'?'':"&dy=$dy").
- ($db=='01/01/1970'?'':"&db=$db_local").
- ($de=='31/12/2020'?'':"&de=$de_local").
- ($cat==''?'':"&cat=$cat").
- ($lang==''?'':"&lang=$lang_local");
-
- $nav_left="<TD><A HREF=\"$prev_href\">Prev</A></TD>\n";
- } elseif ($np==0) {
- $nav_left="<TD><FONT COLOR=\"#707070\">Prev</FONT></TD>\n";
- }
-
- if($isnext==1) {
- $nextp=$np+1;
- $next_href="$self?q=$q_local&np=$nextp&m=$m".
- ($ps==20?'':"&ps=$ps").
- ($tag==''?'':"&t=$t_local").
- ($ul==''?'':"&ul=$ul_local").
- ($wm==''?'':"&wm=$wm").
- ($wf==''?'':"&wf=$wf").
- (!$o?'':"&o=$o").
- ($dt=='back'?'':"&dt=$dt").
- (!$dp?'':"&dp=$dp").
- (!$dx?'':"&dx=$dx").
- ($dd=='01'?'':"&dd=$dd").
- (!$dm?'':"&dm=$dm").
- ($dy=='1970'?'':"&dy=$dy").
- ($db=='01/01/1970'?'':"&db=$db_local").
- ($de=='31/12/2020'?'':"&de=$de_local").
- ($cat==''?'':"&cat=$cat").
- ($lang==''?'':"&lang=$lang_local");
-
- $nav_right="<TD><A HREF=\"$next_href\">Next</TD>\n";
- } else {
- $nav_right="<TD><FONT COLOR=\"#707070\">Next</FONT></TD>\n";
- }
-
- $nav_bar0='<TD>$NP</TD>';
- $nav_bar1='<TD><A HREF="$NH">$NP</A></TD>';
-
- $tp=ceil($found/$ps);
-
- $cp=$np+1;
-
- if ($cp>5) {
- $lp=$cp-5;
- } else {
- $lp=1;
- }
-
- $rp=$lp+10-1;
- if ($rp>$tp) {
- $rp=$tp;
- $lp=$rp-10+1;
- if ($lp<1) $lp=1;
- }
-
-
- if ($lp!=$rp) {
- for ($i=$lp; $i<=$rp;$i++) {
- $realp=$i-1;
-
- if ($i==$cp) {
- $nav_bar=$nav_bar.$nav_bar0;
- } else {
- $nav_bar=$nav_bar.$nav_bar1;
- }
-
- $href="$self?q=$q_local&np=$realp&m=$m".
- ($ps==20?'':"&ps=$ps").
- ($tag==''?'':"&t=$t_local").
- ($ul==''?'':"&ul=$ul_local").
- ($wm==''?'':"&wm=$wm").
- ($wf==''?'':"&wf=$wf").
- (!$o?'':"&o=$o").
- ($dt=='back'?'':"&dt=$dt").
- (!$dp?'':"&dp=$dp").
- (!$dx?'':"&dx=$dx").
- ($dd=='01'?'':"&dd=$dd").
- (!$dm?'':"&dm=$dm").
- ($dy=='1970'?'':"&dy=$dy").
- ($db=='01/01/1970'?'':"&db=$db_local").
- ($de=='31/12/2020'?'':"&de=$de_local").
- ($cat==''?'':"&cat=$cat").
- ($lang==''?'':"&lang=$lang_local");
-
- $nav_bar=ereg_replace('\$NP',"$i",$nav_bar);
- $nav_bar=ereg_replace('\$NH',"$href",$nav_bar);
- }
-
- $nav="<TABLE BORDER=0><TR>$nav_left $nav_bar $nav_right</TR></TABLE>\n";
- } elseif ($found) {
- $nav="<TABLE BORDER=0><TR>$nav_left $nav_right</TR></TABLE>\n";
- }
-
- return $nav;
-}
-
-// -----------------------------------------------
-// M A I N
-// -----------------------------------------------
-
- if (preg_match("/^(\d+)\.(\d+)\.(\d+)/",phpversion(),$param)) {
- $phpver=$param[1];
- if ($param[2] < 9) {
- $phpver .= "0$param[2]";
- } else {
- $phpver .= "$param[2]";
- }
- if ($param[3] < 9) {
- $phpver .= "0$param[3]";
- } else {
- $phpver .= "$param[3]";
- }
- } else {
- print "Cannot determine php version: <b>".phpversion()."</b>\n";
- exit;
- }
-
- $have_spell_flag=0;
-
- if (Udm_Api_Version() >= 30204) {
- $udm_agent=Udm_Alloc_Agent($dbaddr);
- } else {
- $udm_agent=Udm_Alloc_Agent($dbaddr,$dbmode);
- }
-
- Udm_Set_Agent_Param($udm_agent,UDM_PARAM_PAGE_SIZE,$ps);
- Udm_Set_Agent_Param($udm_agent,UDM_PARAM_PAGE_NUM,$np);
-
- if ($phpver >= 40006) {
- if ($temp_cp_arr=Udm_Cat_Path($udm_agent,$cat)) {
- reset($temp_cp_arr);
- $temp_cp='';
- for ($i=0; $i<count($temp_cp_arr); $i+=2) {
- $cp_path=$temp_cp_arr[$i];
- $cp_name=$temp_cp_arr[$i+1];
- $temp_cp .= " &gt; <a href=\"$PHP_SELF?cat=$cp_path\">$cp_name</a> ";
- }
- $t_CP=$temp_cp;
- }
-
- if ($temp_cp_arr=Udm_Cat_List($udm_agent,$cat)) {
- reset($temp_cp_arr);
- $temp_cp='';
- for ($i=0; $i<count($temp_cp_arr); $i+=2) {
- $cp_path=$temp_cp_arr[$i];
- $cp_name=$temp_cp_arr[$i+1];
- $temp_cp .= "<a href=\"$PHP_SELF?cat=$cp_path\">$cp_name</a><br>";
- }
- $t_CS=$temp_cp;
- }
-
- if ($temp_cp_arr=Udm_Cat_Path($udm_agent,$category)) {
- reset($temp_cp_arr);
- $temp_cp='';
- for ($i=0; $i<count($temp_cp_arr); $i+=2) {
- $cp_path=$temp_cp_arr[$i];
- $cp_name=$temp_cp_arr[$i+1];
- $temp_cp .= " &gt; <a href=\"$PHP_SELF?cat=$cp_path\">$cp_name</a> ";
- }
- $t_DY=$temp_cp;
- }
- }
-
- $trackquery=strtolower($trackquery);
- if ($trackquery == 'yes') {
- Udm_Set_Agent_Param($udm_agent,UDM_PARAM_TRACK_MODE,UDM_TRACK_ENABLED);
- } else {
- Udm_Set_Agent_Param($udm_agent,UDM_PARAM_TRACK_MODE,UDM_TRACK_DISABLED);
- }
-
- $phrase=strtolower($phrase);
- if ($phrase == 'yes') {
- Udm_Set_Agent_Param($udm_agent,UDM_PARAM_PHRASE_MODE,UDM_PHRASE_ENABLED);
- } else {
- Udm_Set_Agent_Param($udm_agent,UDM_PARAM_PHRASE_MODE,UDM_PHRASE_DISABLED);
- }
-
- $cache=strtolower($cache);
- if ($cache == 'yes') {
- Udm_Set_Agent_Param($udm_agent,UDM_PARAM_CACHE_MODE,UDM_CACHE_ENABLED);
- } else {
- Udm_Set_Agent_Param($udm_agent,UDM_PARAM_CACHE_MODE,UDM_CACHE_DISABLED);
- }
-
- $ispelluseprefixes=strtolower($ispelluseprefixes);
- if ($ispelluseprefixes == 'yes') {
- Udm_Set_Agent_Param($udm_agent,UDM_PARAM_ISPELL_PREFIXES,UDM_PREFIXES_ENABLED);
- } else {
- Udm_Set_Agent_Param($udm_agent,UDM_PARAM_ISPELL_PREFIXES,UDM_PREFIXES_DISABLED);
- }
-
- if (Udm_Api_Version() >= 30111) {
- $crosswords=strtolower($crosswords);
- if ($crosswords == 'yes') {
- Udm_Set_Agent_Param($udm_agent,UDM_PARAM_CROSS_WORDS,UDM_CROSS_WORDS_ENABLED);
- } else {
- Udm_Set_Agent_Param($udm_agent,UDM_PARAM_CROSS_WORDS,UDM_CROSS_WORDS_DISABLED);
- }
- }
-
- if ($localcharset != '') {
- Udm_Set_Agent_Param($udm_agent,UDM_PARAM_CHARSET,$localcharset);
- }
-
- if (Udm_Api_Version() >= 30200) {
- if ($localcharset == '') Udm_Set_Agent_Param($udm_agent,UDM_PARAM_CHARSET,'utf-8');
- if ($browsercharset != '') {
- Udm_Set_Agent_Param($udm_agent,UDM_PARAM_BROWSER_CHARSET,$browsercharset);
- Header ("Content-Type: text/html; charset=$browsercharset");
- } else {
- Udm_Set_Agent_Param($udm_agent,UDM_PARAM_BROWSER_CHARSET,'utf-8');
- Header ("Content-Type: text/html; charset=utf-8");
- }
- if ($hlbeg != '') {
- Udm_Set_Agent_Param($udm_agent,UDM_PARAM_HLBEG,$hlbeg);
- } else {
- $hlbeg='<font color="000088"><b>';
- Udm_Set_Agent_Param($udm_agent,UDM_PARAM_HLBEG,'<font color="000088"><b>');
- }
- if ($hlend != '') {
- Udm_Set_Agent_Param($udm_agent,UDM_PARAM_HLEND,$hlend);
- } else {
- $hlend='</b></font>';
- Udm_Set_Agent_Param($udm_agent,UDM_PARAM_HLEND,'</b></font>');
- }
- }
-
-
- for ($i=0; $i < count($stopwordtable_arr); $i++) {
- if ($stopwordtable_arr[$i] != '') {
- Udm_Set_Agent_Param($udm_agent,UDM_PARAM_STOPTABLE,$stopwordtable_arr[$i]);
- }
- }
-
- for ($i=0; $i < count($stopwordfile_arr); $i++) {
- if ($stopwordfile_arr[$i] != '') {
- Udm_Set_Agent_Param($udm_agent,UDM_PARAM_STOPFILE,$stopwordfile_arr[$i]);
- }
- }
-
- if (Udm_Api_Version() >= 30203) {
- for ($i=0; $i < count($synonym_arr); $i++) {
- if ($synonym_arr[$i] != '') {
- Udm_Set_Agent_Param($udm_agent,UDM_PARAM_SYNONYM,$synonym_arr[$i]);
- }
- }
-
- for ($i=0; $i < count($searchd_arr); $i++) {
- if ($searchd_arr[$i] != '') {
- Udm_Set_Agent_Param($udm_agent,UDM_PARAM_SEARCHD,$searchd_arr[$i]);
- }
- }
-
- Udm_Set_Agent_Param($udm_agent,UDM_PARAM_QSTRING,$QUERY_STRING);
- Udm_Set_Agent_Param($udm_agent,UDM_PARAM_REMOTE_ADDR,$REMOTE_ADDR);
- }
-
- if (Udm_Api_Version() >= 30204) {
- if ($have_query_flag)Udm_Set_Agent_Param($udm_agent,UDM_PARAM_QUERY,$query_orig);
- if ($storedaddr != '') Udm_Set_Agent_Param($udm_agent,UDM_PARAM_STORED,$storedaddr);
- }
-
- if ($m=='any') {
- Udm_Set_Agent_Param($udm_agent,UDM_PARAM_SEARCH_MODE,UDM_MODE_ANY);
- } elseif ($m=='all') {
- Udm_Set_Agent_Param($udm_agent,UDM_PARAM_SEARCH_MODE,UDM_MODE_ALL);
- } elseif ($m=='bool') {
- Udm_Set_Agent_Param($udm_agent,UDM_PARAM_SEARCH_MODE,UDM_MODE_BOOL);
- } elseif ($m=='phrase') {
- Udm_Set_Agent_Param($udm_agent,UDM_PARAM_SEARCH_MODE,UDM_MODE_PHRASE);
- } else {
- Udm_Set_Agent_Param($udm_agent,UDM_PARAM_SEARCH_MODE,UDM_MODE_ALL);
- }
-
- if ($wm=='wrd') {
- Udm_Set_Agent_Param($udm_agent,UDM_PARAM_WORD_MATCH,UDM_MATCH_WORD);
- } elseif ($wm=='beg') {
- Udm_Set_Agent_Param($udm_agent,UDM_PARAM_WORD_MATCH,UDM_MATCH_BEGIN);
- } elseif ($wm=='end') {
- Udm_Set_Agent_Param($udm_agent,UDM_PARAM_WORD_MATCH,UDM_MATCH_END);
- } elseif ($wm=='sub') {
- Udm_Set_Agent_Param($udm_agent,UDM_PARAM_WORD_MATCH,UDM_MATCH_SUBSTR);
- } else {
- Udm_Set_Agent_Param($udm_agent,UDM_PARAM_WORD_MATCH,UDM_MATCH_WORD);
- }
-
- if ($minwordlength >= 0) {
- Udm_Set_Agent_Param($udm_agent,UDM_PARAM_MIN_WORD_LEN,$minwordlength);
- }
-
- if ($maxwordlength >= 0) {
- Udm_Set_Agent_Param($udm_agent,UDM_PARAM_MAX_WORD_LEN,$maxwordlength);
- }
-
- if ($phpver >= 40007) {
- if ($vardir != '') Udm_Set_Agent_Param($udm_agent,UDM_PARAM_VARDIR,$vardir);
- if ($datadir != '') Udm_Set_Agent_Param($udm_agent,UDM_PARAM_VARDIR,$datadir);
- }
-
- if ($wf != '') {
- Udm_Set_Agent_Param($udm_agent,UDM_PARAM_WEIGHT_FACTOR,$wf);
- }
-
- if ($ul != '') {
- $auto_wild=strtolower($auto_wild);
- if (($auto_wild == 'yes') ||
- ($auto_wild == '')) {
- if ((substr($ul,0,7) == 'http://') ||
- (substr($ul,0,8) == 'https://') ||
- (substr($ul,0,7) == 'news://') ||
- (substr($ul,0,6) == 'ftp://')) {
- Udm_Add_Search_Limit($udm_agent,UDM_LIMIT_URL,"$ul%");
- } else {
- Udm_Add_Search_Limit($udm_agent,UDM_LIMIT_URL,"%$ul%");
- }
- } else {
- Udm_Add_Search_Limit($udm_agent,UDM_LIMIT_URL,$ul);
- }
- }
-
- if ($tag != '') Udm_Add_Search_Limit($udm_agent,UDM_LIMIT_TAG,$tag);
- if ($cat != '') Udm_Add_Search_Limit($udm_agent,UDM_LIMIT_CAT,$cat);
- if ($lang != '')Udm_Add_Search_Limit($udm_agent,UDM_LIMIT_LANG,$lang);
-
- if (($dt == 'back') && ($dp != '0')) {
- $recent_time=format_dp($dp);
- if ($recent_time != 0) {
- $dl=time()-$recent_time;
- Udm_Add_Search_Limit($udm_agent,UDM_LIMIT_DATE,">$dl");
- }
- } elseif ($dt=='er') {
- $recent_time=mktime(0,0,0,($dm+1),$dd,$dy);
- if ($dx == -1) {
- Udm_Add_Search_Limit($udm_agent,UDM_LIMIT_DATE,"<$recent_time");
- } elseif ($dx == 1) {
- Udm_Add_Search_Limit($udm_agent,UDM_LIMIT_DATE,">$recent_time");
- }
- } elseif ($dt=='range') {
- $begin_time=format_userdate($db);
- if ($begin_time) Udm_Add_Search_Limit($udm_agent,UDM_LIMIT_DATE,">$begin_time");
-
- $end_time=format_userdate($de);
- if ($end_time) Udm_Add_Search_Limit($udm_agent,UDM_LIMIT_DATE,"<$end_time");
- }
-
-// if ($have_query_flag) $q=ParseQ($q);
-
-?>
-
-<HTML>
-<HEAD>
- <TITLE>mnoGoSearch: <? echo HtmlSpecialChars(StripSlashes($query_orig)); ?></TITLE>
-</HEAD>
-
-<body BGCOLOR="#FFFFFF" LINK="#0050A0" VLINK="#0050A0" ALINK="#0050A0">
-<center>
-
-<FORM METHOD=GET ACTION="<? echo $self; ?>">
-<table bgcolor=#eeeee0 border=0 width=100%>
-<tr><td>
-<BR>
-<INPUT TYPE="hidden" NAME="ps" VALUE="10">
-Search for: <INPUT TYPE="text" NAME="q" SIZE=50 VALUE="<? echo HtmlSpecialChars(StripSlashes($query_orig)); ?>">
-<INPUT TYPE="submit" VALUE="Search!"><BR>
-
-Results per page:
-<SELECT NAME="ps">
-<OPTION VALUE="10" <? if ($ps==10) echo 'SELECTED';?>>10
-<OPTION VALUE="20" <? if ($ps==20) echo 'SELECTED';?>>20
-<OPTION VALUE="50" <? if ($ps==50) echo 'SELECTED';?>>50
-</SELECT>
-
-Match:
-<SELECT NAME="m">
-<OPTION VALUE="all" <? if ($m=='all') echo 'SELECTED';?>>All
-<OPTION VALUE="any" <? if ($m=='any') echo 'SELECTED';?>>Any
-<OPTION VALUE="bool" <? if ($m=='bool') echo 'SELECTED';?>>Boolean
-<OPTION VALUE="phrase" <? if ($m=='phrase') echo 'SELECTED';?>>Full phrase
-</SELECT>
-
-
-Search for:
-<SELECT NAME="wm">
-<OPTION VALUE="wrd" <? if ($wm=='wrd') echo 'SELECTED';?>>Whole word
-<OPTION VALUE="beg" <? if ($wm=='beg') echo 'SELECTED';?>>Beginning
-<OPTION VALUE="end" <? if ($wm=='end') echo 'SELECTED';?>>Ending
-<OPTION VALUE="sub" <? if ($wm=='sub') echo 'SELECTED';?>>Substring
-</SELECT>
-
-<br>
-
-Search through:
-<SELECT NAME="ul">
-<OPTION VALUE="" <? if ($ul=='') echo 'SELECTED';?>>Entire site
-<OPTION VALUE="/docs/" <? if ($ul=='/docs/') echo 'SELECTED';?>>Docs
-<OPTION VALUE="/files/" <? if ($ul=='/files') echo 'SELECTED';?>>Files
-<OPTION VALUE="/servers/" <? if ($ul=='/servers/') echo 'SELECTED';?>>Servers
-</SELECT>
-
-in:
-<SELECT NAME="wf">
-<OPTION VALUE="222211" <? if ($wf=='222211') echo 'SELECTED';?>>all sections
-<OPTION VALUE="220000" <? if ($wf=='220000') echo 'SELECTED';?>>Description
-<OPTION VALUE="202000" <? if ($wf=='202000') echo 'SELECTED';?>>Keywords
-<OPTION VALUE="200200" <? if ($wf=='200200') echo 'SELECTED';?>>Title
-<OPTION VALUE="200010" <? if ($wf=='200010') echo 'SELECTED';?>>Body
-</SELECT>
-
-Language:
-<SELECT NAME="lang">
-<OPTION VALUE="" <? if ($lang=='222211') echo 'SELECTED';?>>Any
-<OPTION VALUE="en" <? if ($lang=='en') echo 'SELECTED';?>>English
-<OPTION VALUE="ru" <? if ($lang=='ru') echo 'SELECTED';?>>Russian
-</SELECT>
-
-Restrict search:
-<SELECT NAME="t">
-<OPTION VALUE="" <? if ($t=='') echo 'SELECTED';?>>All sites
-<OPTION VALUE="AA" <? if ($t=='AA') echo 'SELECTED';?>>Sport
-<OPTION VALUE="BB" <? if ($t=='BB') echo 'SELECTED';?>>Shopping
-<OPTION VALUE="CC" <? if ($t=='CC') echo 'SELECTED';?>>Internet
-</SELECT>
-
-</td></tr>
-
-<!-- 'search with time limits' options -->
-<TR><TD>
-<TABLE CELLPADDING=2 CELLSPACING=0 BORDER=0>
-<CAPTION>
-Limit results to pages published within a specified period of time.<BR>
-<FONT SIZE=-1><I>(Please select only one option)</I></FONT>
-</CAPTION>
-<TR>
-<TD VALIGN=center><INPUT TYPE=radio NAME="dt" VALUE="back" <? if ($dt=='back') echo 'checked';?>></TD>
-<TD><SELECT NAME="dp">
-<OPTION VALUE="0" <? if ($dp=='0') echo 'SELECTED';?>>anytime
-<OPTION VALUE="10M" <? if ($dp=='10M') echo 'SELECTED';?>>in the last ten minutes
-<OPTION VALUE="1h" <? if ($dp=='1h') echo 'SELECTED';?>>in the last hour
-<OPTION VALUE="7d" <? if ($dp=='7d') echo 'SELECTED';?>>in the last week
-<OPTION VALUE="14d" <? if ($dp=='14d') echo 'SELECTED';?>>in the last 2 weeks
-<OPTION VALUE="1m" <? if ($dp=='1m') echo 'SELECTED';?>>in the last month
-</SELECT>
-</TD>
-</TR>
-<TR>
-<TD VALIGN=center><INPUT type=radio NAME="dt" VALUE="er" <? if ($dt=='er') echo 'checked';?>>
-</TD>
-<TD><SELECT NAME="dx">
-<OPTION VALUE="1" <? if ($dx=='1') echo 'SELECTED';?>>After
-<OPTION VALUE="-1" <? if ($dx=='-1') echo 'SELECTED';?>>Before
-</SELECT>
-
-or on
-
-<SELECT NAME="dm">
-<OPTION VALUE="0" <? if ($dm=='0') echo 'SELECTED';?>>January
-<OPTION VALUE="1" <? if ($dm=='1') echo 'SELECTED';?>>February
-<OPTION VALUE="2" <? if ($dm=='2') echo 'SELECTED';?>>March
-<OPTION VALUE="3" <? if ($dm=='3') echo 'SELECTED';?>>April
-<OPTION VALUE="4" <? if ($dm=='4') echo 'SELECTED';?>>May
-<OPTION VALUE="5" <? if ($dm=='5') echo 'SELECTED';?>>June
-<OPTION VALUE="6" <? if ($dm=='6') echo 'SELECTED';?>>July
-<OPTION VALUE="7" <? if ($dm=='7') echo 'SELECTED';?>>August
-<OPTION VALUE="8" <? if ($dm=='8') echo 'SELECTED';?>>September
-<OPTION VALUE="9" <? if ($dm=='9') echo 'SELECTED';?>>October
-<OPTION VALUE="10" <? if ($dm=='10') echo 'SELECTED';?>>November
-<OPTION VALUE="11" <? if ($dm=='11') echo 'SELECTED';?>>December
-</SELECT>
-<INPUT TYPE=text NAME="dd" VALUE="<? echo $dd; ?>" SIZE=2 maxlength=2>
-,
-<SELECT NAME="dy" >
-<OPTION VALUE="1999" <? if ($dy=='1999') echo 'SELECTED';?>>1999
-<OPTION VALUE="2000" <? if ($dy=='2000') echo 'SELECTED';?>>2000
-<OPTION VALUE="2001" <? if ($dy=='2001') echo 'SELECTED';?>>2001
-</SELECT>
-</TD>
-</TR>
-<TR>
-<TD VALIGN=center><INPUT TYPE=radio NAME="dt" VALUE="range" <? if ($dt=='range') echo 'checked';?>>
-</TD>
-<TD>
-Between
-<INPUT TYPE=text NAME="db" VALUE="<? echo $db; ?>" SIZE=11 MAXLENGTH=11>
-and
-<INPUT TYPE=text NAME="de" VALUE="<? echo $de; ?>" SIZE=11 MAXLENGTH=11>
-</TD>
-</TR>
-</TABLE>
-
-</TD></TR>
-<!-- end of stl options -->
-
-<!-- categories stuff -->
-<tr><td><? echo $t_CP; ?></td></tr>
-<tr><td><? echo $t_CS; ?></td></tr>
-<input type=hidden name=cat value="<? echo $cat; ?>">
-<!-- categories stuff end -->
-
-</table>
-</form>
-</center>
-
-
-<?
-
- $ispellmode=strtolower($ispellmode);
- if ($ispellmode == 'db') {
- if (! Udm_Load_Ispell_Data($udm_agent,UDM_ISPELL_TYPE_DB,'','',1)) {
- print_error_local(Udm_Error($udm_agent));
- } else $have_spell_flag=1;
- } elseif ($ispellmode == 'server') {
- if (Udm_Api_Version() >= 30112) {
- if (! Udm_Load_Ispell_Data($udm_agent,UDM_ISPELL_TYPE_SERVER,$spell_host,'',1)) {
- print_error_local("Error loading ispell data from server $spell_host");
- } else $have_spell_flag=1;
- }
- } elseif ($ispellmode == 'text') {
- reset($affix_file);
- while (list($t_lang,$file)=each($affix_file)) {
- if (! Udm_Load_Ispell_Data($udm_agent,UDM_ISPELL_TYPE_AFFIX,$t_lang,$file,0)) {
- print_error_local("Error loading ispell data from file");
- } else $have_spell_flag=1;
-
- $temp=$spell_file[$t_lang];
- for ($i=0; $i<count($temp); $i++) {
- if (! Udm_Load_Ispell_Data($udm_agent,UDM_ISPELL_TYPE_SPELL,$t_lang,$temp[$i],1)) {
- print_error_local("Error loading ispell data from file");
- } else $have_spell_flag=1;
- }
- }
- }
-
-if (! $have_query_flag) {
- print_bottom();
- return;
-} elseif ($have_query_flag && ($q=='')) {
- print ("<FONT COLOR=red>You should give at least one word to search for.</FONT>\n");
- print_bottom();
- return;
-}
-
-$res=Udm_Find($udm_agent,$q);
-
-if(($errno=Udm_Errno($udm_agent))>0){
- print_error_local(Udm_Error($udm_agent));
-} else {
- $found=Udm_Get_Res_Param($res,UDM_PARAM_FOUND);
- $rows=Udm_Get_Res_Param($res,UDM_PARAM_NUM_ROWS);
- $wordinfo=Udm_Get_Res_Param($res,UDM_PARAM_WORDINFO);
- $searchtime=Udm_Get_Res_Param($res,UDM_PARAM_SEARCHTIME);
- $first_doc=Udm_Get_Res_Param($res,UDM_PARAM_FIRST_DOC);
- $last_doc=Udm_Get_Res_Param($res,UDM_PARAM_LAST_DOC);
-
- if (!$found) {
- print ("Search Time: $searchtime<br>Search results:\n");
- print ("<small>$wordinfo</small><HR><CENTER>Sorry, but search returned no results.<P>\n");
- print ("<I>Try to produce less restrictive search query.</I></CENTER>\n");
-
- print_bottom();
- return;
- }
-
- $from=IntVal($np)*IntVal($ps);
- $to=IntVal($np+1)*IntVal($ps);
-
- if($to>$found) $to=$found;
- if (($from+$ps)<$found) $isnext=1;
- $nav=make_nav($query_orig);
-
- print("Search Time: $searchtime<br>Search results: <small>$wordinfo</small><HR>\n");
- print("Displaying documents $first_doc-$last_doc of total <B>$found</B> found.\n");
-
- $stored_link=-1;
- if ((Udm_Api_Version() == 30203) && ($storedaddr != '')) {
- $stored_link=Udm_Open_Stored($udm_agent,$storedaddr);
- }
-
- for($i=0;$i<$rows;$i++){
- $excerpt_flag=0;
- if (Udm_Api_Version() >= 30204) {
- $excerpt_flag=Udm_Make_Excerpt($udm_agent, $res, $i);
- }
-
- $ndoc=Udm_Get_Res_Field($res,$i,UDM_FIELD_ORDER);
- $rating=Udm_Get_Res_Field($res,$i,UDM_FIELD_RATING);
- $url=Udm_Get_Res_Field($res,$i,UDM_FIELD_URL);
- $contype=Udm_Get_Res_Field($res,$i,UDM_FIELD_CONTENT);
- $docsize=Udm_Get_Res_Field($res,$i,UDM_FIELD_SIZE);
- $lastmod=format_lastmod(Udm_Get_Res_Field($res,$i,UDM_FIELD_MODIFIED));
-
- $title=Udm_Get_Res_Field($res,$i,UDM_FIELD_TITLE);
- $title=($title) ? htmlspecialChars($title):'No title';
-
- $title=ParseDocText($title);
- $text=ParseDocText(htmlspecialChars(Udm_Get_Res_Field($res,$i,UDM_FIELD_TEXT)));
- $keyw=ParseDocText(htmlspecialChars(Udm_Get_Res_Field($res,$i,UDM_FIELD_KEYWORDS)));
- $desc=ParseDocText(htmlspecialChars(Udm_Get_Res_Field($res,$i,UDM_FIELD_DESC)));
-
- $crc=Udm_Get_Res_Field($res,$i,UDM_FIELD_CRC);
- $rec_id=Udm_Get_Res_Field($res,$i,UDM_FIELD_URLID);
-
- if (Udm_Api_Version() >= 30203) {
- $doclang=Udm_Get_Res_Field($res,$i,UDM_FIELD_LANG);
- $doccharset=Udm_Get_Res_Field($res,$i,UDM_FIELD_CHARSET);
- }
-
- if ($phpver >= 40006) {
- $category=Udm_Get_Res_Field($res,$i,UDM_FIELD_CATEGORY);
- } else {
- $category='';
- }
-
- print ("<DL><DT><b>$ndoc.</b><a href=\"$url\" TARGET=\"_blank\"><b>$title</b></a>\n");
- print ("[<b>$rating</b>]<DD>\n");
- print (($desc != '')?$desc:$text."...<BR>$t_DY<UL><li>\n");
- print ("<A HREF=\"$url\" TARGET=\"_blank\">$url</A>\n");
- print ("($contype) $lastmod, $docsize bytes</UL></DL>\n");
-
- if (Udm_Api_Version() == 30203) {
- if ((($stored_link>0) && (Udm_Check_Stored($udm_agent,$stored_link,Udm_CRC32($udm_agent,$url)))) ||
- ($stored_link==-1)) {
- $storedstr="$storedocurl?rec_id=".Udm_CRC32($udm_agent,$url).
- "&DM=".urlencode($lastmod).
- "&DS=$docsize".
- "&L=$doclang".
- "&CS=$doccharset".
- "&DU=".urlencode($url).
- "&q=".urlencode($query_orig);
- print ("<DD><a href=\"$storedstr\">Cached copy</a>\n");
- }
- } elseif (Udm_Api_Version() >= 30204) {
- if ($excerpt_flag) {
- $storedstr="$storedocurl?rec_id=".Udm_CRC32($udm_agent,$save_url).
- "&DM=".urlencode($lastmod).
- "&DS=$docsize".
- "&L=$doclang".
- "&CS=$doccharset".
- "&DU=".urlencode($save_url).
- "&q=".urlencode($query_orig);
- print_template('stored');
- }
- }
- }
-
- if ((Udm_Api_Version() == 30203) &&
- ($stored_link>0)) {
- Udm_Close_Stored($udm_agent, $stored_link);
- }
-
- print("<HR><CENTER> $nav </CENTER>\n");
- print_bottom();
-
- // Free result
- Udm_Free_Res($res);
-}
-
- if ($have_spell_flag) Udm_Free_Ispell_Data($udm_agent);
- Udm_Free_Agent($udm_agent);
-?>
diff --git a/ext/mnogosearch/php_mnogo.c b/ext/mnogosearch/php_mnogo.c
deleted file mode 100644
index ad27d25abd..0000000000
--- a/ext/mnogosearch/php_mnogo.c
+++ /dev/null
@@ -1,2641 +0,0 @@
-/* $Source$ */
-/* $Id$ */
-
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2003 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. |
- +----------------------------------------------------------------------+
- | Authors: |
- | Initial version by Alex Barkov <bar@izhcom.ru> |
- | and Ramil Kalimullin <ram@izhcom.ru> |
- | Further development by Sergey Kartashoff <gluke@mail.ru> |
- +----------------------------------------------------------------------+
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "php.h"
-#include "php_mnogo.h"
-#include "ext/standard/php_standard.h"
-#include "ext/standard/info.h"
-#include "php_globals.h"
-
-#ifdef HAVE_MNOGOSEARCH
-
-#define UDMSTRSIZ 1024*5
-
-#define UDM_FIELD_URLID 1
-#define UDM_FIELD_URL 2
-#define UDM_FIELD_CONTENT 3
-#define UDM_FIELD_TITLE 4
-#define UDM_FIELD_KEYWORDS 5
-#define UDM_FIELD_DESC 6
-#define UDM_FIELD_TEXT 7
-#define UDM_FIELD_SIZE 8
-#define UDM_FIELD_RATING 9
-#define UDM_FIELD_MODIFIED 10
-#define UDM_FIELD_ORDER 11
-#define UDM_FIELD_CRC 12
-#define UDM_FIELD_CATEGORY 13
-#define UDM_FIELD_LANG 14
-#define UDM_FIELD_CHARSET 15
-#define UDM_FIELD_SITEID 16
-#define UDM_FIELD_POP_RANK 17
-#define UDM_FIELD_ORIGINID 18
-
-/* udm_set_agent_param constants */
-#define UDM_PARAM_PAGE_SIZE 1
-#define UDM_PARAM_PAGE_NUM 2
-#define UDM_PARAM_SEARCH_MODE 3
-#define UDM_PARAM_CACHE_MODE 4
-#define UDM_PARAM_TRACK_MODE 5
-#define UDM_PARAM_CHARSET 6
-#define UDM_PARAM_STOPTABLE 7
-#define UDM_PARAM_STOPFILE 8
-#define UDM_PARAM_WEIGHT_FACTOR 9
-#define UDM_PARAM_WORD_MATCH 10
-#define UDM_PARAM_PHRASE_MODE 11
-#define UDM_PARAM_MIN_WORD_LEN 12
-#define UDM_PARAM_MAX_WORD_LEN 13
-#define UDM_PARAM_ISPELL_PREFIXES 14
-#define UDM_PARAM_CROSS_WORDS 15
-#define UDM_PARAM_VARDIR 16
-#define UDM_PARAM_LOCAL_CHARSET 17
-#define UDM_PARAM_BROWSER_CHARSET 18
-#define UDM_PARAM_HLBEG 19
-#define UDM_PARAM_HLEND 20
-#define UDM_PARAM_SYNONYM 21
-#define UDM_PARAM_SEARCHD 22 /* unused */
-#define UDM_PARAM_QSTRING 23
-#define UDM_PARAM_REMOTE_ADDR 24
-#define UDM_PARAM_QUERY 25
-#define UDM_PARAM_STORED 26
-#define UDM_PARAM_GROUPBYSITE 27
-#define UDM_PARAM_SITEID 28
-#define UDM_PARAM_DETECT_CLONES 29
-#define UDM_PARAM_SORT_ORDER 30
-#define UDM_PARAM_RESULTS_LIMIT 31
-#define UDM_PARAM_EXCERPT_SIZE 32
-#define UDM_PARAM_EXCERPT_PADDING 33
-
-/* udm_add_search_limit constants */
-#define UDM_LIMIT_URL 1
-#define UDM_LIMIT_TAG 2
-#define UDM_LIMIT_LANG 3
-#define UDM_LIMIT_CAT 4
-#define UDM_LIMIT_DATE 5
-#define UDM_LIMIT_TYPE 6
-
-/* word match type */
-#define UDM_MATCH_WORD 0
-#define UDM_MATCH_BEGIN 1
-#define UDM_MATCH_SUBSTR 2
-#define UDM_MATCH_END 3
-
-/* track modes */
-#define UDM_TRACK_ENABLED 1
-#define UDM_TRACK_DISABLED 0
-
-/* cache modes */
-#define UDM_CACHE_ENABLED 1
-#define UDM_CACHE_DISABLED 0
-
-/* phrase modes */
-#define UDM_PHRASE_ENABLED 1
-#define UDM_PHRASE_DISABLED 0
-
-/* prefix modes */
-#define UDM_PREFIXES_ENABLED 1
-#define UDM_PREFIXES_DISABLED 0
-
-/* crosswords modes */
-#define UDM_CROSS_WORDS_ENABLED 1
-#define UDM_CROSS_WORDS_DISABLED 0
-
-/* General modes */
-#define UDM_ENABLED 1
-#define UDM_DISABLED 0
-
-/* udm_get_res_param constants */
-#define UDM_PARAM_NUM_ROWS 256
-#define UDM_PARAM_FOUND 257
-#define UDM_PARAM_WORDINFO 258
-#define UDM_PARAM_SEARCHTIME 259
-#define UDM_PARAM_FIRST_DOC 260
-#define UDM_PARAM_LAST_DOC 261
-#define UDM_PARAM_WORDINFO_ALL 262
-
-/* udm_load_ispell_data constants */
-#define UDM_ISPELL_TYPE_AFFIX 1
-#define UDM_ISPELL_TYPE_SPELL 2
-#define UDM_ISPELL_TYPE_DB 3
-#define UDM_ISPELL_TYPE_SERVER 4
-
-/* True globals, no need for thread safety */
-static int le_link,le_res;
-
-#include <udm_config.h>
-#include <udmsearch.h>
-
-/* {{{ mnogosearch_functions[]
- */
-function_entry mnogosearch_functions[] = {
- PHP_FE(udm_api_version, NULL)
-
-#if UDM_VERSION_ID >= 30200
- PHP_FE(udm_check_charset, NULL)
-#if UDM_VERSION_ID >= 30203
- PHP_FE(udm_crc32, NULL)
-#endif
-#if UDM_VERSION_ID >= 30204
- PHP_FE(udm_parse_query_string, NULL)
- PHP_FE(udm_make_excerpt, NULL)
- PHP_FE(udm_set_agent_param_ex, NULL)
- PHP_FE(udm_get_agent_param_ex, NULL)
- PHP_FE(udm_get_res_field_ex, NULL)
-#endif
-#if UDM_VERSION_ID >= 30211
- PHP_FE(udm_hash32, NULL)
- PHP_FE(udm_alloc_agent_array, NULL)
-#endif
-#if UDM_VERSION_ID >= 30216
- PHP_FE(udm_store_doc_cgi, NULL)
-#endif
-#endif
-
- PHP_FE(udm_alloc_agent, NULL)
- PHP_FE(udm_set_agent_param, NULL)
-
- PHP_FE(udm_load_ispell_data, NULL)
- PHP_FE(udm_free_ispell_data, NULL)
-
- PHP_FE(udm_add_search_limit, NULL)
- PHP_FE(udm_clear_search_limits, NULL)
-
- PHP_FE(udm_errno, NULL)
- PHP_FE(udm_error, NULL)
-
- PHP_FE(udm_find, NULL)
- PHP_FE(udm_get_res_param, NULL)
- PHP_FE(udm_get_res_field, NULL)
-
- PHP_FE(udm_cat_list, NULL)
- PHP_FE(udm_cat_path, NULL)
-
- PHP_FE(udm_free_res, NULL)
- PHP_FE(udm_free_agent, NULL)
-
-#if UDM_VERSION_ID > 30110
- PHP_FE(udm_get_doc_count, NULL)
-#endif
-
- {NULL, NULL, NULL}
-};
-/* }}} */
-
-zend_module_entry mnogosearch_module_entry = {
- STANDARD_MODULE_HEADER,
- "mnogosearch",
- mnogosearch_functions,
- PHP_MINIT(mnogosearch),
- PHP_MSHUTDOWN(mnogosearch),
- PHP_RINIT(mnogosearch),
- NULL,
- PHP_MINFO(mnogosearch),
- NO_VERSION_YET,
- STANDARD_MODULE_PROPERTIES
-};
-
-
-#ifdef COMPILE_DL_MNOGOSEARCH
-ZEND_GET_MODULE(mnogosearch)
-#endif
-
-static void _free_udm_agent(zend_rsrc_list_entry *rsrc TSRMLS_DC)
-{
- UDM_AGENT * Agent = (UDM_AGENT *)rsrc->ptr;
-#if UDM_VERSION_ID >= 30204
- UdmEnvFree(Agent->Conf);
- UdmAgentFree(Agent);
-#else
- UdmFreeEnv(Agent->Conf);
- UdmFreeAgent(Agent);
-#endif
-}
-
-static void _free_udm_res(zend_rsrc_list_entry *rsrc TSRMLS_DC)
-{
- UDM_RESULT * Res = (UDM_RESULT *)rsrc->ptr;
-
-#if UDM_VERSION_ID >= 30204
- UdmResultFree(Res);
-#else
- UdmFreeResult(Res);
-#endif
-}
-
-/* {{{ PHP_MINIT_FUNCTION
- */
-DLEXPORT PHP_MINIT_FUNCTION(mnogosearch)
-{
- UdmInit();
- le_link = zend_register_list_destructors_ex(_free_udm_agent,NULL,"mnogosearch agent",module_number);
- le_res = zend_register_list_destructors_ex(_free_udm_res,NULL,"mnogosearch result",module_number);
-
- REGISTER_LONG_CONSTANT("UDM_FIELD_URLID", UDM_FIELD_URLID,CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("UDM_FIELD_URL", UDM_FIELD_URL,CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("UDM_FIELD_CONTENT", UDM_FIELD_CONTENT,CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("UDM_FIELD_TITLE", UDM_FIELD_TITLE,CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("UDM_FIELD_KEYWORDS", UDM_FIELD_KEYWORDS,CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("UDM_FIELD_DESC", UDM_FIELD_DESC,CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("UDM_FIELD_DESCRIPTION", UDM_FIELD_DESC,CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("UDM_FIELD_TEXT", UDM_FIELD_TEXT,CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("UDM_FIELD_SIZE", UDM_FIELD_SIZE,CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("UDM_FIELD_RATING", UDM_FIELD_RATING,CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("UDM_FIELD_SCORE", UDM_FIELD_RATING,CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("UDM_FIELD_MODIFIED", UDM_FIELD_MODIFIED,CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("UDM_FIELD_ORDER", UDM_FIELD_ORDER,CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("UDM_FIELD_CRC", UDM_FIELD_CRC,CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("UDM_FIELD_CATEGORY", UDM_FIELD_CATEGORY,CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("UDM_FIELD_LANG", UDM_FIELD_LANG,CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("UDM_FIELD_CHARSET", UDM_FIELD_CHARSET,CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("UDM_FIELD_SITEID", UDM_FIELD_SITEID,CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("UDM_FIELD_POP_RANK", UDM_FIELD_POP_RANK,CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("UDM_FIELD_ORIGINID", UDM_FIELD_ORIGINID,CONST_CS | CONST_PERSISTENT);
-
- /* udm_set_agent_param constants */
- REGISTER_LONG_CONSTANT("UDM_PARAM_PAGE_SIZE", UDM_PARAM_PAGE_SIZE,CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("UDM_PARAM_PAGE_NUM", UDM_PARAM_PAGE_NUM,CONST_CS | CONST_PERSISTENT);
-
- REGISTER_LONG_CONSTANT("UDM_PARAM_SEARCH_MODE", UDM_PARAM_SEARCH_MODE,CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("UDM_PARAM_CACHE_MODE", UDM_PARAM_CACHE_MODE,CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("UDM_PARAM_TRACK_MODE", UDM_PARAM_TRACK_MODE,CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("UDM_PARAM_PHRASE_MODE", UDM_PARAM_PHRASE_MODE,CONST_CS | CONST_PERSISTENT);
-
- REGISTER_LONG_CONSTANT("UDM_PARAM_CHARSET", UDM_PARAM_CHARSET,CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("UDM_PARAM_LOCAL_CHARSET",UDM_PARAM_LOCAL_CHARSET,CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("UDM_PARAM_BROWSER_CHARSET",UDM_PARAM_BROWSER_CHARSET,CONST_CS | CONST_PERSISTENT);
-
- REGISTER_LONG_CONSTANT("UDM_PARAM_STOPTABLE", UDM_PARAM_STOPTABLE,CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("UDM_PARAM_STOP_TABLE", UDM_PARAM_STOPTABLE,CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("UDM_PARAM_STOPFILE", UDM_PARAM_STOPFILE,CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("UDM_PARAM_STOP_FILE", UDM_PARAM_STOPFILE,CONST_CS | CONST_PERSISTENT);
-
- REGISTER_LONG_CONSTANT("UDM_PARAM_WEIGHT_FACTOR",UDM_PARAM_WEIGHT_FACTOR,CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("UDM_PARAM_WORD_MATCH", UDM_PARAM_WORD_MATCH,CONST_CS | CONST_PERSISTENT);
-
- REGISTER_LONG_CONSTANT("UDM_PARAM_MAX_WORD_LEN",UDM_PARAM_MAX_WORD_LEN,CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("UDM_PARAM_MAX_WORDLEN", UDM_PARAM_MAX_WORD_LEN,CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("UDM_PARAM_MIN_WORD_LEN",UDM_PARAM_MIN_WORD_LEN,CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("UDM_PARAM_MIN_WORDLEN", UDM_PARAM_MIN_WORD_LEN,CONST_CS | CONST_PERSISTENT);
-
- REGISTER_LONG_CONSTANT("UDM_PARAM_ISPELL_PREFIXES",UDM_PARAM_ISPELL_PREFIXES,CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("UDM_PARAM_ISPELL_PREFIX",UDM_PARAM_ISPELL_PREFIXES,CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("UDM_PARAM_PREFIXES", UDM_PARAM_ISPELL_PREFIXES,CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("UDM_PARAM_PREFIX", UDM_PARAM_ISPELL_PREFIXES,CONST_CS | CONST_PERSISTENT);
-
- REGISTER_LONG_CONSTANT("UDM_PARAM_CROSS_WORDS", UDM_PARAM_CROSS_WORDS,CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("UDM_PARAM_CROSSWORDS", UDM_PARAM_CROSS_WORDS,CONST_CS | CONST_PERSISTENT);
-
- REGISTER_LONG_CONSTANT("UDM_PARAM_VARDIR", UDM_PARAM_VARDIR,CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("UDM_PARAM_DATADIR", UDM_PARAM_VARDIR,CONST_CS | CONST_PERSISTENT);
-
- REGISTER_LONG_CONSTANT("UDM_PARAM_HLBEG", UDM_PARAM_HLBEG,CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("UDM_PARAM_HLEND", UDM_PARAM_HLEND,CONST_CS | CONST_PERSISTENT);
-
- REGISTER_LONG_CONSTANT("UDM_PARAM_SYNONYM", UDM_PARAM_SYNONYM,CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("UDM_PARAM_STORED", UDM_PARAM_STORED,CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("UDM_PARAM_GROUPBYSITE", UDM_PARAM_GROUPBYSITE,CONST_CS | CONST_PERSISTENT);
-
- REGISTER_LONG_CONSTANT("UDM_PARAM_QSTRING", UDM_PARAM_QSTRING,CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("UDM_PARAM_REMOTE_ADDR", UDM_PARAM_REMOTE_ADDR,CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("UDM_PARAM_QUERY", UDM_PARAM_QUERY,CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("UDM_PARAM_SITEID", UDM_PARAM_SITEID,CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("UDM_PARAM_DETECT_CLONES",UDM_PARAM_DETECT_CLONES,CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("UDM_PARAM_SORT_ORDER",UDM_PARAM_SORT_ORDER,CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("UDM_PARAM_RESULTS_LIMIT",UDM_PARAM_RESULTS_LIMIT,CONST_CS | CONST_PERSISTENT);
-
- REGISTER_LONG_CONSTANT("UDM_PARAM_EXCERPT_SIZE",UDM_PARAM_EXCERPT_SIZE,CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("UDM_PARAM_EXCERPT_PADDING",UDM_PARAM_EXCERPT_PADDING,CONST_CS | CONST_PERSISTENT);
-
- /* udm_add_search_limit constants */
- REGISTER_LONG_CONSTANT("UDM_LIMIT_CAT", UDM_LIMIT_CAT,CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("UDM_LIMIT_URL", UDM_LIMIT_URL,CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("UDM_LIMIT_TAG", UDM_LIMIT_TAG,CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("UDM_LIMIT_LANG", UDM_LIMIT_LANG,CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("UDM_LIMIT_DATE", UDM_LIMIT_DATE,CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("UDM_LIMIT_TYPE", UDM_LIMIT_TYPE,CONST_CS | CONST_PERSISTENT);
-
- /* udm_get_res_param constants */
- REGISTER_LONG_CONSTANT("UDM_PARAM_FOUND", UDM_PARAM_FOUND,CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("UDM_PARAM_NUM_ROWS", UDM_PARAM_NUM_ROWS,CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("UDM_PARAM_WORDINFO", UDM_PARAM_WORDINFO,CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("UDM_PARAM_WORDINFO_ALL",UDM_PARAM_WORDINFO_ALL,CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("UDM_PARAM_WORD_INFO", UDM_PARAM_WORDINFO,CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("UDM_PARAM_SEARCHTIME", UDM_PARAM_SEARCHTIME,CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("UDM_PARAM_SEARCH_TIME", UDM_PARAM_SEARCHTIME,CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("UDM_PARAM_FIRST_DOC", UDM_PARAM_FIRST_DOC,CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("UDM_PARAM_LAST_DOC", UDM_PARAM_LAST_DOC,CONST_CS | CONST_PERSISTENT);
-
- /* search modes */
- REGISTER_LONG_CONSTANT("UDM_MODE_ALL", UDM_MODE_ALL,CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("UDM_MODE_ANY", UDM_MODE_ANY,CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("UDM_MODE_BOOL", UDM_MODE_BOOL,CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("UDM_MODE_PHRASE", UDM_MODE_PHRASE,CONST_CS | CONST_PERSISTENT);
-
- /* search cache params */
- REGISTER_LONG_CONSTANT("UDM_CACHE_ENABLED", UDM_ENABLED,CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("UDM_CACHE_DISABLED", UDM_DISABLED,CONST_CS | CONST_PERSISTENT);
-
- /* track mode params */
- REGISTER_LONG_CONSTANT("UDM_TRACK_ENABLED", UDM_ENABLED,CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("UDM_TRACK_DISABLED", UDM_DISABLED,CONST_CS | CONST_PERSISTENT);
-
- /* phrase mode params */
- REGISTER_LONG_CONSTANT("UDM_PHRASE_ENABLED", UDM_ENABLED,CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("UDM_PHRASE_DISABLED", UDM_DISABLED,CONST_CS | CONST_PERSISTENT);
-
- /* general params */
- REGISTER_LONG_CONSTANT("UDM_ENABLED", UDM_ENABLED,CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("UDM_DISABLED", UDM_DISABLED,CONST_CS | CONST_PERSISTENT);
-
- /* crosswords mode params */
- REGISTER_LONG_CONSTANT("UDM_CROSS_WORDS_ENABLED",UDM_ENABLED,CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("UDM_CROSSWORDS_ENABLED",UDM_ENABLED,CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("UDM_CROSS_WORDS_DISABLED",UDM_DISABLED,CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("UDM_CROSSWORDS_DISABLED",UDM_DISABLED,CONST_CS | CONST_PERSISTENT);
-
- /* prefixes mode params */
- REGISTER_LONG_CONSTANT("UDM_PREFIXES_ENABLED", UDM_ENABLED,CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("UDM_PREFIX_ENABLED", UDM_ENABLED,CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("UDM_ISPELL_PREFIXES_ENABLED",UDM_ENABLED,CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("UDM_ISPELL_PREFIX_ENABLED",UDM_ENABLED,CONST_CS | CONST_PERSISTENT);
-
- REGISTER_LONG_CONSTANT("UDM_PREFIXES_DISABLED", UDM_DISABLED,CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("UDM_PREFIX_DISABLED", UDM_DISABLED,CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("UDM_ISPELL_PREFIXES_DISABLED",UDM_DISABLED,CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("UDM_ISPELL_PREFIX_DISABLED",UDM_DISABLED,CONST_CS | CONST_PERSISTENT);
-
- /* ispell type params */
- REGISTER_LONG_CONSTANT("UDM_ISPELL_TYPE_AFFIX", UDM_ISPELL_TYPE_AFFIX,CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("UDM_ISPELL_TYPE_SPELL", UDM_ISPELL_TYPE_SPELL,CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("UDM_ISPELL_TYPE_DB", UDM_ISPELL_TYPE_DB,CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("UDM_ISPELL_TYPE_SERVER",UDM_ISPELL_TYPE_SERVER,CONST_CS | CONST_PERSISTENT);
-
- /* word match mode params */
- REGISTER_LONG_CONSTANT("UDM_MATCH_WORD", UDM_MATCH_WORD,CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("UDM_MATCH_BEGIN", UDM_MATCH_BEGIN,CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("UDM_MATCH_SUBSTR", UDM_MATCH_SUBSTR,CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("UDM_MATCH_END", UDM_MATCH_END,CONST_CS | CONST_PERSISTENT);
-
- return SUCCESS;
-}
-/* }}} */
-
-DLEXPORT PHP_MSHUTDOWN_FUNCTION(mnogosearch)
-{
- return SUCCESS;
-}
-
-
-DLEXPORT PHP_RINIT_FUNCTION(mnogosearch)
-{
- return SUCCESS;
-}
-
-
-DLEXPORT PHP_MINFO_FUNCTION(mnogosearch)
-{
- char buf[32];
-
- php_info_print_table_start();
- php_info_print_table_row(2, "mnoGoSearch Support", "enabled" );
-
- sprintf(buf,"%d", UDM_VERSION_ID);
- php_info_print_table_row(2, "mnoGoSearch library version", buf );
- php_info_print_table_end();
-}
-
-static char* MyRemoveHiLightDup(const char *s){
- size_t len=strlen(s)+1;
- char *d, *res = (char*)emalloc(len);
-
- for(d=res; s[0]; s++)
- {
- switch(s[0])
- {
- case '\2':
- case '\3':
- break;
- case '&':
- if (s[1] == '#')
- {
- char *e;
- int code= 0;
-
- for (e= (char *)s+2; (*e >= '0') && (*e <= '9'); code= code*10 + e[0]-'0', e++);
- if (*e == ';')
- {
- *d++= (code < 128) ? code : '?';
- s= e;
- break;
- }
- }
- /* pass through */
-
- default:
- *d++=*s;
- }
- }
- *d='\0';
- return res;
-}
-
-/* {{{ proto int udm_alloc_agent(string dbaddr [, string dbmode])
- Allocate mnoGoSearch session */
-DLEXPORT PHP_FUNCTION(udm_alloc_agent)
-{
- switch(ZEND_NUM_ARGS()){
-
- case 1: {
- pval **yydbaddr;
- char *dbaddr;
- UDM_ENV * Env;
- UDM_AGENT * Agent;
-
- if(zend_get_parameters_ex(1,&yydbaddr)==FAILURE){
- RETURN_FALSE;
- }
- convert_to_string_ex(yydbaddr);
- dbaddr = Z_STRVAL_PP(yydbaddr);
-
-#if UDM_VERSION_ID >= 30204
- Env=UdmEnvInit(NULL);
- UdmVarListReplaceStr(&Env->Vars,"SyslogFacility","local7");
-#if UDM_VERSION_ID >= 30215
- UdmSetLogLevel(NULL,0);
-#else
- UdmSetLogLevel(Env,0);
-#endif
- UdmOpenLog("mnoGoSearch-php",Env,0);
-#if UDM_VERSION_ID <= 30210
- if(!memcmp(dbaddr,"searchd:",8)){
- UDM_URL Url;
- UdmURLParse(&Url,dbaddr);
- UdmDBListAdd(&Env->sdcl,Url.hostinfo);
- }
-
- UdmVarListReplaceStr(&Env->Vars,"DBAddr",dbaddr);
-
- if(UDM_OK!=UdmDBSetAddr(Env->db,dbaddr,UDM_OPEN_MODE_READ)){
- sprintf(Env->errstr,"Invalid DBAddr: '%s'",dbaddr);
-#if UDM_VERSION_ID <= 30207
- Env->errcode=1;
-#endif
- php_error_docref(NULL TSRMLS_CC, E_WARNING,"Invalid DBAddr");
- RETURN_FALSE;
- }
-#else
- UdmDBListAdd(&Env->dbl,dbaddr, UDM_OPEN_MODE_WRITE);
-#endif
- Agent=UdmAgentInit(NULL,Env,0);
-#elif UDM_VERSION_ID >= 30200
- Env=UdmAllocEnv();
- Env->vars=UdmAllocVarList();
- Env->DBAddr=strdup(dbaddr);
- UdmEnvSetDBMode(Env,"single");
- Agent=UdmAllocAgent(Env,0,UDM_OPEN_MODE_READ);
-#else
- Env=UdmAllocEnv();
- UdmEnvSetDBAddr(Env,dbaddr);
- Agent=UdmAllocAgent(Env,0,UDM_OPEN_MODE_READ);
-#endif
- ZEND_REGISTER_RESOURCE(return_value,Agent,le_link);
- }
- break;
-
- case 2: {
- pval **yydbaddr;
- pval **yydbmode;
- char *dbaddr;
- char *dbmode;
- UDM_ENV * Env;
- UDM_AGENT * Agent;
-
- if(zend_get_parameters_ex(2,&yydbaddr,&yydbmode)==FAILURE){
- RETURN_FALSE;
- }
- convert_to_string_ex(yydbaddr);
- convert_to_string_ex(yydbmode);
- dbaddr = Z_STRVAL_PP(yydbaddr);
- dbmode = Z_STRVAL_PP(yydbmode);
-
-#if UDM_VERSION_ID >= 30204
- Env=UdmEnvInit(NULL);
- UdmVarListReplaceStr(&Env->Vars,"SyslogFacility","local7");
-#if UDM_VERSION_ID >= 30215
- UdmSetLogLevel(NULL,0);
-#else
- UdmSetLogLevel(Env,0);
-#endif
- UdmOpenLog("mnoGoSearch-php",Env,0);
-#if UDM_VERSION_ID <= 30210
- if(!memcmp(dbaddr,"searchd:",8)){
- UDM_URL Url;
- UdmURLParse(&Url,dbaddr);
- UdmDBListAdd(&Env->sdcl,Url.hostinfo);
- }
- UdmVarListReplaceStr(&Env->Vars,"DBAddr",dbaddr);
- if(UDM_OK!=UdmDBSetAddr(Env->db,dbaddr,UDM_OPEN_MODE_READ)){
- sprintf(Env->errstr,"Invalid DBAddr: '%s'",dbaddr);
-#if UDM_VERSION_ID <= 30207
- Env->errcode=1;
-#endif
- php_error_docref(NULL TSRMLS_CC, E_WARNING,"Invalid DBAddr");
- RETURN_FALSE;
- }
-#else
- UdmDBListAdd(&Env->dbl,dbaddr, UDM_OPEN_MODE_WRITE);
-#endif
- Agent=UdmAgentInit(NULL,Env,0);
-#elif UDM_VERSION_ID >= 30200
- Env=UdmAllocEnv();
- Env->vars=UdmAllocVarList();
- Env->DBAddr=strdup(dbaddr);
- UdmEnvSetDBMode(Env,dbmode);
- Agent=UdmAllocAgent(Env,0,UDM_OPEN_MODE_READ);
-#else
- Env=UdmAllocEnv();
- UdmEnvSetDBAddr(Env,dbaddr);
- UdmEnvSetDBMode(Env,dbmode);
- Agent=UdmAllocAgent(Env,0,UDM_OPEN_MODE_READ);
-#endif
- ZEND_REGISTER_RESOURCE(return_value,Agent,le_link);
- }
- break;
-
- default:
- WRONG_PARAM_COUNT;
- break;
- }
-}
-/* }}} */
-
-/* {{{ proto int udm_set_agent_param(int agent, int var, string val)
- Set mnoGoSearch agent session parameters */
-DLEXPORT PHP_FUNCTION(udm_set_agent_param)
-{
- pval **yyagent, **yyvar, **yyval;
- char *val;
- int var;
- UDM_AGENT * Agent;
-
- switch(ZEND_NUM_ARGS()){
-
- case 3:
- if(zend_get_parameters_ex(3,&yyagent,&yyvar,&yyval)==FAILURE){
- RETURN_FALSE;
- }
- convert_to_long_ex(yyvar);
- convert_to_string_ex(yyval);
- ZEND_FETCH_RESOURCE(Agent, UDM_AGENT *, yyagent, -1, "mnoGoSearch-agent", le_link);
- var = Z_LVAL_PP(yyvar);
- val = Z_STRVAL_PP(yyval);
-
- break;
-
- default:
- WRONG_PARAM_COUNT;
- break;
- }
-
- switch(var){
- case UDM_PARAM_PAGE_SIZE:
-#if UDM_VERSION_ID >= 30204
- UdmVarListReplaceStr(&Agent->Conf->Vars,"ps",val);
-#else
- Agent->page_size=atoi(val);
- if(Agent->page_size<1)Agent->page_size=20;
-#endif
- break;
-
- case UDM_PARAM_PAGE_NUM:
-#if UDM_VERSION_ID >= 30204
- UdmVarListReplaceStr(&Agent->Conf->Vars,"np",val);
-#else
- Agent->page_number=atoi(val);
- if(Agent->page_number<0)Agent->page_number=0;
-#endif
- break;
-
- case UDM_PARAM_SEARCH_MODE:
- switch (atoi(val)){
- case UDM_MODE_ALL:
-#if UDM_VERSION_ID >= 30204
- UdmVarListReplaceStr(&Agent->Conf->Vars,"m","all");
-#else
- Agent->search_mode=UDM_MODE_ALL;
-#endif
- break;
-
- case UDM_MODE_ANY:
-#if UDM_VERSION_ID >= 30204
- UdmVarListReplaceStr(&Agent->Conf->Vars,"m","any");
-#else
- Agent->search_mode=UDM_MODE_ANY;
-#endif
- break;
-
- case UDM_MODE_BOOL:
-#if UDM_VERSION_ID >= 30204
- UdmVarListReplaceStr(&Agent->Conf->Vars,"m","bool");
-#else
- Agent->search_mode=UDM_MODE_BOOL;
-#endif
- break;
-
- case UDM_MODE_PHRASE:
-#if UDM_VERSION_ID >= 30200
- php_error_docref(NULL TSRMLS_CC, E_WARNING,"Unknown search mode");
- RETURN_FALSE;
-#else
- Agent->search_mode=UDM_MODE_PHRASE;
-#endif
- break;
-
- default:
-#if UDM_VERSION_ID >= 30204
- UdmVarListReplaceStr(&Agent->Conf->Vars,"m","all");
-#else
- Agent->search_mode=UDM_MODE_ALL;
-#endif
- php_error_docref(NULL TSRMLS_CC, E_WARNING,"Unknown search mode");
- RETURN_FALSE;
- break;
- }
- break;
-
- case UDM_PARAM_WORD_MATCH:
- switch (atoi(val)){
- case UDM_MATCH_WORD:
-#if UDM_VERSION_ID >= 30204
- UdmVarListReplaceStr(&Agent->Conf->Vars,"wm","wrd");
-#else
- Agent->word_match=UDM_MATCH_WORD;
-#endif
- break;
-
- case UDM_MATCH_BEGIN:
-#if UDM_VERSION_ID >= 30204
- UdmVarListReplaceStr(&Agent->Conf->Vars,"wm","beg");
-#else
- Agent->word_match=UDM_MATCH_BEGIN;
-#endif
- break;
-
- case UDM_MATCH_END:
-#if UDM_VERSION_ID >= 30204
- UdmVarListReplaceStr(&Agent->Conf->Vars,"wm","end");
-#else
- Agent->word_match=UDM_MATCH_END;
-#endif
- break;
-
- case UDM_MATCH_SUBSTR:
-#if UDM_VERSION_ID >= 30204
- UdmVarListReplaceStr(&Agent->Conf->Vars,"wm","sub");
-#else
- Agent->word_match=UDM_MATCH_SUBSTR;
-#endif
- break;
-
- default:
-#if UDM_VERSION_ID >= 30204
- UdmVarListReplaceStr(&Agent->Conf->Vars,"wm","wrd");
-#else
- Agent->word_match=UDM_MATCH_WORD;
-#endif
- php_error_docref(NULL TSRMLS_CC, E_WARNING,"Unknown word match mode");
- RETURN_FALSE;
- break;
- }
- break;
- case UDM_PARAM_CACHE_MODE:
- switch (atoi(val)){
- case UDM_ENABLED:
-#if UDM_VERSION_ID < 30200
- Agent->cache_mode=UDM_ENABLED;
-#elif UDM_VERSION_ID >= 30204
- UdmVarListReplaceStr(&Agent->Conf->Vars,"Cache","yes");
-#else
- UdmReplaceStrVar(Agent->Conf->vars,"Cache","yes",UDM_VARSRC_GLOBAL);
-#endif
- break;
-
- case UDM_DISABLED:
-#if UDM_VERSION_ID < 30200
- Agent->cache_mode=UDM_DISABLED;
-#elif UDM_VERSION_ID >= 30204
- UdmVarListReplaceStr(&Agent->Conf->Vars,"Cache","no");
-#else
- UdmReplaceStrVar(Agent->Conf->vars,"Cache","no",UDM_VARSRC_GLOBAL);
-#endif
- break;
-
- default:
-#if UDM_VERSION_ID < 30200
- Agent->cache_mode=UDM_DISABLED;
-#elif UDM_VERSION_ID >= 30204
- UdmVarListReplaceStr(&Agent->Conf->Vars,"Cache","no");
-#else
- UdmReplaceStrVar(Agent->Conf->vars,"Cache","no",UDM_VARSRC_GLOBAL);
-#endif
- php_error_docref(NULL TSRMLS_CC, E_WARNING,"Unknown cache mode");
- RETURN_FALSE;
- break;
- }
-
- break;
-
- case UDM_PARAM_TRACK_MODE:
- switch (atoi(val)){
- case UDM_ENABLED:
-#if UDM_VERSION_ID < 30200
- Agent->track_mode|=UDM_TRACK_QUERIES;
-#elif UDM_VERSION_ID >= 30204
- UdmVarListReplaceStr(&Agent->Conf->Vars,"TrackQuery","yes");
-#else
- UdmReplaceStrVar(Agent->Conf->vars,"TrackQuery","yes",UDM_VARSRC_GLOBAL);
-#endif
- break;
-
- case UDM_DISABLED:
-#if UDM_VERSION_ID < 30200
- Agent->track_mode &= ~(UDM_TRACK_QUERIES);
-#elif UDM_VERSION_ID >= 30204
- UdmVarListReplaceStr(&Agent->Conf->Vars,"TrackQuery","no");
-#else
- UdmReplaceStrVar(Agent->Conf->vars,"TrackQuery","no",UDM_VARSRC_GLOBAL);
-#endif
-
- break;
-
- default:
-#if UDM_VERSION_ID < 30200
- Agent->track_mode &= ~(UDM_TRACK_QUERIES);
-#elif UDM_VERSION_ID >= 30204
- UdmVarListReplaceStr(&Agent->Conf->Vars,"TrackQuery","no");
-#else
- UdmReplaceStrVar(Agent->Conf->vars,"TrackQuery","no",UDM_VARSRC_GLOBAL);
-#endif
- php_error_docref(NULL TSRMLS_CC, E_WARNING,"Unknown track mode");
- RETURN_FALSE;
- break;
- }
-
- break;
-
- case UDM_PARAM_PHRASE_MODE:
-#if UDM_VERSION_ID < 30200
- switch (atoi(val)){
- case UDM_ENABLED:
- Agent->Conf->use_phrases=UDM_ENABLED;
- break;
-
- case UDM_DISABLED:
- Agent->Conf->use_phrases=UDM_DISABLED;
- break;
-
- default:
- php_error_docref(NULL TSRMLS_CC, E_WARNING,"Unknown phrase mode");
- RETURN_FALSE;
- break;
- }
-#endif
- break;
-
- case UDM_PARAM_ISPELL_PREFIXES:
- switch (atoi(val)){
- case UDM_ENABLED:
-#if UDM_VERSION_ID < 30200
- Agent->Conf->ispell_mode |= UDM_ISPELL_USE_PREFIXES;
-#elif UDM_VERSION_ID >= 30204
- UdmVarListReplaceStr(&Agent->Conf->Vars,"IspellUsePrefixes","1");
-#else
- UdmAddIntVar(Agent->Conf->vars, "IspellUsePrefixes", 1, UDM_VARSRC_GLOBAL);
-#endif
- break;
-
- case UDM_DISABLED:
-#if UDM_VERSION_ID < 30200
- Agent->Conf->ispell_mode &= ~UDM_ISPELL_USE_PREFIXES;
-#elif UDM_VERSION_ID >= 30204
- UdmVarListReplaceStr(&Agent->Conf->Vars,"IspellUsePrefixes","0");
-#else
- UdmAddIntVar(Agent->Conf->vars, "IspellUsePrefixes", 0, UDM_VARSRC_GLOBAL);
-#endif
- break;
-
-
- default:
-#if UDM_VERSION_ID < 30200
- Agent->Conf->ispell_mode |= UDM_ISPELL_USE_PREFIXES;
-#elif UDM_VERSION_ID >= 30204
- UdmVarListReplaceStr(&Agent->Conf->Vars,"IspellUsePrefixes","0");
-#else
- UdmAddIntVar(Agent->Conf->vars, "IspellUsePrefixes", 1, UDM_VARSRC_GLOBAL);
-#endif
- php_error_docref(NULL TSRMLS_CC, E_WARNING,"Unknown ispell prefixes mode");
- RETURN_FALSE;
- break;
- }
-
- break;
-
- case UDM_PARAM_CHARSET:
- case UDM_PARAM_LOCAL_CHARSET:
-#if UDM_VERSION_ID < 30200
- Agent->Conf->local_charset=UdmGetCharset(val);
- Agent->charset=Agent->Conf->local_charset;
-#elif UDM_VERSION_ID >= 30204
- UdmVarListReplaceStr(&Agent->Conf->Vars,"LocalCharset",val);
- {
- const char * charset=UdmVarListFindStr(&Agent->Conf->Vars,"LocalCharset","iso-8859-1");
- Agent->Conf->lcs=UdmGetCharSet(charset);
- }
-#else
- Agent->Conf->local_charset=strdup(val);
- UdmReplaceStrVar(Agent->Conf->vars,"LocalCharset",val,UDM_VARSRC_GLOBAL);
-#endif
-
- break;
-
-#if UDM_VERSION_ID >= 30200
- case UDM_PARAM_BROWSER_CHARSET:
-#if UDM_VERSION_ID >= 30204
- UdmVarListReplaceStr(&Agent->Conf->Vars,"BrowserCharset",val);
- {
- const char * charset=UdmVarListFindStr(&Agent->Conf->Vars,"BrowserCharset","iso-8859-1");
- Agent->Conf->bcs=UdmGetCharSet(charset);
- }
-#else
- Agent->Conf->browser_charset=strdup(val);
- UdmReplaceStrVar(Agent->Conf->vars,"BrowserCharset",val,UDM_VARSRC_GLOBAL);
-#endif
- break;
-
- case UDM_PARAM_HLBEG:
-#if UDM_VERSION_ID >= 30204
- UdmVarListReplaceStr(&Agent->Conf->Vars,"HlBeg",val);
-#else
- UdmReplaceStrVar(Agent->Conf->vars,"HlBeg",val,UDM_VARSRC_GLOBAL);
-#endif
- break;
-
- case UDM_PARAM_HLEND:
-#if UDM_VERSION_ID >= 30204
- UdmVarListReplaceStr(&Agent->Conf->Vars,"HlEnd",val);
-#else
- UdmReplaceStrVar(Agent->Conf->vars,"HlEnd",val,UDM_VARSRC_GLOBAL);
-#endif
- break;
-
- case UDM_PARAM_SYNONYM:
- if (UdmSynonymListLoad(Agent->Conf,val)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s",Agent->Conf->errstr);
- RETURN_FALSE;
-#if UDM_VERSION_ID >= 30204
- } else UdmSynonymListSort(&(Agent->Conf->Synonyms));
-#else
- } else UdmSynonymListSort(&(Agent->Conf->SynList));
-#endif
- break;
-
- case UDM_PARAM_QSTRING:
-#if UDM_VERSION_ID >= 30204
- UdmVarListReplaceStr(&Agent->Conf->Vars,"QUERY_STRING",val);
-#else
- UdmReplaceStrVar(Agent->Conf->vars,"QUERY_STRING",val,UDM_VARSRC_GLOBAL);
-#endif
- break;
-
-
- case UDM_PARAM_REMOTE_ADDR:
-#if UDM_VERSION_ID >= 30204
- UdmVarListReplaceStr(&Agent->Conf->Vars,"IP",val);
-#else
- UdmReplaceStrVar(Agent->Conf->vars,"IP",val,UDM_VARSRC_GLOBAL);
-#endif
- break;
-#endif
-
- case UDM_PARAM_STOPTABLE:
-#if UDM_VERSION_ID < 30200
- strcat(Agent->Conf->stop_tables," ");
- strcat(Agent->Conf->stop_tables,val);
-#endif
- break;
-
- case UDM_PARAM_STOPFILE:
-#if UDM_VERSION_ID >= 30204
- if (UdmStopListLoad(Agent->Conf,val)) {
-#else
- if (UdmFileLoadStopList(Agent->Conf,val)) {
-#endif
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", Agent->Conf->errstr);
- RETURN_FALSE;
- }
- break;
-
- case UDM_PARAM_WEIGHT_FACTOR:
-#if UDM_VERSION_ID < 30200
- Agent->weight_factor=strdup(val);
-#elif UDM_VERSION_ID >= 30204
- UdmVarListReplaceStr(&Agent->Conf->Vars,"wf",val);
-#else
- UdmReplaceStrVar(Agent->Conf->vars,"wf",val,UDM_VARSRC_GLOBAL);
- {
- size_t len;
-
- len=strlen(val);
- if((len>0)&&(len<256)){
- const char *sec;
- int sn;
-
- for(sn=0;sn<256;sn++){
- Agent->wf[sn]=0;
- }
-
- for(sec=val+len-1;sec>=val;sec--){
- Agent->wf[len-(sec-val)]=UdmHex2Int(*sec);
- }
- }
- }
-#endif
- break;
-
- case UDM_PARAM_MIN_WORD_LEN:
-#if UDM_VERSION_ID >= 30204
- Agent->Conf->WordParam.min_word_len=atoi(val);
-#else
- Agent->Conf->min_word_len=atoi(val);
-#endif
- break;
-
- case UDM_PARAM_MAX_WORD_LEN:
-#if UDM_VERSION_ID >= 30204
- Agent->Conf->WordParam.max_word_len=atoi(val);
-#else
- Agent->Conf->max_word_len=atoi(val);
-#endif
- break;
-
- case UDM_PARAM_CROSS_WORDS:
- switch (atoi(val)){
- case UDM_ENABLED:
-#if UDM_VERSION_ID >= 30204
- UdmVarListReplaceStr(&Agent->Conf->Vars,"CrossWords","yes");
-#else
- Agent->Conf->use_crossword=UDM_ENABLED;
-#endif
- break;
-
- case UDM_DISABLED:
-#if UDM_VERSION_ID >= 30204
- UdmVarListReplaceStr(&Agent->Conf->Vars,"CrossWords","no");
-#else
- Agent->Conf->use_crossword=UDM_DISABLED;
-#endif
- break;
-
- default:
- php_error_docref(NULL TSRMLS_CC, E_WARNING,"Unknown crosswords mode");
- RETURN_FALSE;
- break;
- }
-
- break;
-
-#if UDM_VERSION_ID > 30112
-
- case UDM_PARAM_VARDIR:
-#if UDM_VERSION_ID < 30200
- udm_snprintf(Agent->Conf->vardir,sizeof(Agent->Conf->vardir)-1,"%s%s",val,UDMSLASHSTR);
-#elif UDM_VERSION_ID >= 30208
- UdmVarListReplaceStr(&Agent->Conf->Vars,"Vardir",val);
-#elif UDM_VERSION_ID >= 30204
- UdmVarListReplaceStr(&Agent->Conf->Vars,"Vardir",val);
- snprintf(Agent->Conf->vardir,sizeof(Agent->Conf->vardir)-1,"%s%s",val,UDMSLASHSTR);
-#else
- snprintf(Agent->Conf->vardir,sizeof(Agent->Conf->vardir)-1,"%s%s",val,UDMSLASHSTR);
-#endif
- break;
-#endif
-
-#if UDM_VERSION_ID >= 30204
- case UDM_PARAM_QUERY:
- UdmVarListReplaceStr(&Agent->Conf->Vars,"q",val);
-
- break;
-
- case UDM_PARAM_STORED:
- UdmVarListReplaceStr(&Agent->Conf->Vars,"StoredAddr",val);
-
- break;
-#endif
-
-#if UDM_VERSION_ID >= 30207
- case UDM_PARAM_GROUPBYSITE:
- switch (atoi(val)){
- case UDM_ENABLED:
- UdmVarListReplaceStr(&Agent->Conf->Vars,"GroupBySite","yes");
-
- break;
-
- case UDM_DISABLED:
- UdmVarListReplaceStr(&Agent->Conf->Vars,"GroupBySite","no");
-
- break;
-
- default:
- php_error_docref(NULL TSRMLS_CC, E_WARNING,"Unknown groupbysite mode");
- RETURN_FALSE;
- break;
- }
-
- break;
-
- case UDM_PARAM_SITEID:
- UdmVarListReplaceStr(&Agent->Conf->Vars,"site",val);
-
- break;
-
- case UDM_PARAM_DETECT_CLONES:
- switch (atoi(val)){
- case UDM_ENABLED:
- UdmVarListReplaceStr(&Agent->Conf->Vars,"DetectClones","yes");
-
- break;
-
- case UDM_DISABLED:
- UdmVarListReplaceStr(&Agent->Conf->Vars,"DetectClones","no");
-
- break;
-
- default:
- php_error_docref(NULL TSRMLS_CC, E_WARNING,"Unknown clones mode");
- RETURN_FALSE;
- break;
- }
-
- break;
-#endif
-
-#if UDM_VERSION_ID >= 30214
- case UDM_PARAM_SORT_ORDER:
- UdmVarListReplaceStr(&Agent->Conf->Vars,"s",val);
-
- break;
-#endif
-
-#if UDM_VERSION_ID >= 30215
- case UDM_PARAM_RESULTS_LIMIT:
- UdmVarListReplaceStr(&Agent->Conf->Vars,"ResultsLimit",val);
-
- break;
-#endif
-
-#if UDM_VERSION_ID >= 30216
- case UDM_PARAM_EXCERPT_SIZE:
- UdmVarListReplaceStr(&Agent->Conf->Vars,"ExcerptSize",val);
-
- break;
- case UDM_PARAM_EXCERPT_PADDING:
- UdmVarListReplaceStr(&Agent->Conf->Vars,"ExcerptPadding",val);
-
- break;
-#endif
- default:
- php_error_docref(NULL TSRMLS_CC, E_WARNING,"Unknown agent session parameter");
- RETURN_FALSE;
- break;
- }
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto int udm_load_ispell_data(int agent, int var, string val1, [string charset], string val2, int flag)
- Load ispell data */
-DLEXPORT PHP_FUNCTION(udm_load_ispell_data)
-{
- pval **yyagent, **yyvar, **yyval1, **yyval2, **yyflag, **yycharset ;
- char *val1, *val2, *charset;
- int var, flag;
- UDM_AGENT * Agent;
-
- switch(ZEND_NUM_ARGS()){
-
- case 5:
- if(zend_get_parameters_ex(5,&yyagent,&yyvar,&yyval1,&yyval2,&yyflag)==FAILURE){
- RETURN_FALSE;
- }
- convert_to_long_ex(yyvar);
- convert_to_long_ex(yyflag);
- convert_to_string_ex(yyval1);
- convert_to_string_ex(yyval2);
- ZEND_FETCH_RESOURCE(Agent, UDM_AGENT *, yyagent, -1, "mnoGoSearch-agent", le_link);
- var = Z_LVAL_PP(yyvar);
- flag = Z_LVAL_PP(yyflag);
- val1 = Z_STRVAL_PP(yyval1);
- val2 = Z_STRVAL_PP(yyval2);
- charset = "us-ascii";
-
- break;
-
- case 6:
- if(zend_get_parameters_ex(6,&yyagent,&yyvar,&yyval1,&yycharset,&yyval2,&yyflag)==FAILURE){
- RETURN_FALSE;
- }
- convert_to_long_ex(yyvar);
- convert_to_long_ex(yyflag);
- convert_to_string_ex(yyval1);
- convert_to_string_ex(yyval2);
- convert_to_string_ex(yycharset);
- ZEND_FETCH_RESOURCE(Agent, UDM_AGENT *, yyagent, -1, "mnoGoSearch-agent", le_link);
- var = Z_LVAL_PP(yyvar);
- flag = Z_LVAL_PP(yyflag);
- val1 = Z_STRVAL_PP(yyval1);
- val2 = Z_STRVAL_PP(yyval2);
- charset = Z_STRVAL_PP(yycharset);
-
- break;
-
- default:
- WRONG_PARAM_COUNT;
- break;
- }
-
-
- switch(var){
-#if UDM_VERSION_ID < 30200
- case UDM_ISPELL_TYPE_DB:
- Agent->Conf->ispell_mode |= UDM_ISPELL_MODE_DB;
-
- if (UdmDBImportAffixes(Agent,Agent->charset) ||
- UdmImportDictionaryFromDB(Agent)) {
- RETURN_FALSE;
- }
-
- break;
-
-#if UDM_VERSION_ID > 30111
-
- case UDM_ISPELL_TYPE_SERVER:
- Agent->Conf->ispell_mode &= ~UDM_ISPELL_MODE_DB;
- Agent->Conf->ispell_mode |= UDM_ISPELL_MODE_SERVER;
-
- Agent->Conf->spellhost = strdup(val1);
-
- break;
-
-#endif
-#endif
-
- case UDM_ISPELL_TYPE_AFFIX:
-#if UDM_VERSION_ID < 30200
- Agent->Conf->ispell_mode &= ~UDM_ISPELL_MODE_DB;
-
-#if UDM_VERSION_ID > 30111
- Agent->Conf->ispell_mode &= ~UDM_ISPELL_MODE_SERVER;
-#endif
-
- if (UdmImportAffixes(Agent->Conf,val1,val2,NULL,0)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING,"Cannot load affix file %s",val2);
- RETURN_FALSE;
- }
-#else
- if (UdmImportAffixes(Agent->Conf,val1,charset,val2)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING,"Cannot load affix file %s",val2);
- RETURN_FALSE;
- }
-
-#endif
- break;
-
- case UDM_ISPELL_TYPE_SPELL:
-#if UDM_VERSION_ID < 30200
- Agent->Conf->ispell_mode &= ~UDM_ISPELL_MODE_DB;
-
-#if UDM_VERSION_ID > 30111
- Agent->Conf->ispell_mode &= ~UDM_ISPELL_MODE_SERVER;
-#endif
-
- if (UdmImportDictionary(Agent->Conf,val1,val2,1,"")) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING,"Cannot load spell file %s",val2);
- RETURN_FALSE;
- }
-#else
- if (UdmImportDictionary(Agent->Conf,val1,charset,val2,0,"")) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING,"Cannot load spell file %s",val2);
- RETURN_FALSE;
- }
-#endif
- break;
-
-
- default:
- php_error_docref(NULL TSRMLS_CC, E_WARNING,"Unknown ispell type parameter");
- RETURN_FALSE;
- break;
- }
-
- if (flag) {
-#if UDM_VERSION_ID >= 30204
- if(Agent->Conf->Spells.nspell) {
- UdmSortDictionary(&Agent->Conf->Spells);
- UdmSortAffixes(&Agent->Conf->Affixes,&Agent->Conf->Spells);
- }
-#else
- if(Agent->Conf->nspell) {
- UdmSortDictionary(Agent->Conf);
- UdmSortAffixes(Agent->Conf);
- }
-#endif
- }
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto int udm_free_ispell_data(int agent)
- Free memory allocated for ispell data */
-DLEXPORT PHP_FUNCTION(udm_free_ispell_data)
-{
- pval ** yyagent;
- UDM_AGENT * Agent;
- switch(ZEND_NUM_ARGS()){
- case 1: {
- if (zend_get_parameters_ex(1, &yyagent)==FAILURE) {
- RETURN_FALSE;
- }
- }
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
- ZEND_FETCH_RESOURCE(Agent, UDM_AGENT *, yyagent, -1, "mnoGoSearch-Agent", le_link);
-
-#if UDM_VERSION_ID >= 30204
- UdmSpellListFree(&Agent->Conf->Spells);
- UdmAffixListFree(&Agent->Conf->Affixes);
-#elif UDM_VERSION_ID > 30111
- UdmFreeIspell(Agent->Conf);
-#endif
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto int udm_add_search_limit(int agent, int var, string val)
- Add mnoGoSearch search restrictions */
-DLEXPORT PHP_FUNCTION(udm_add_search_limit)
-{
- pval **yyagent, **yyvar, **yyval;
- char *val;
- int var;
- UDM_AGENT * Agent;
-
- switch(ZEND_NUM_ARGS()){
-
- case 3:
- if(zend_get_parameters_ex(3,&yyagent,&yyvar,&yyval)==FAILURE){
- RETURN_FALSE;
- }
- convert_to_long_ex(yyvar);
- convert_to_string_ex(yyval);
- ZEND_FETCH_RESOURCE(Agent, UDM_AGENT *, yyagent, -1, "mnoGoSearch-agent", le_link);
- var = Z_LVAL_PP(yyvar);
- val = Z_STRVAL_PP(yyval);
-
- break;
-
- default:
- WRONG_PARAM_COUNT;
- break;
- }
-
- switch(var){
- case UDM_LIMIT_URL:
-#if UDM_VERSION_ID >= 30204
- UdmVarListAddStr(&Agent->Conf->Vars,"ul",val);
-#else
- UdmAddURLLimit(Agent->Conf,val);
-#endif
- break;
-
- case UDM_LIMIT_TAG:
-#if UDM_VERSION_ID >= 30204
- UdmVarListAddStr(&Agent->Conf->Vars,"t",val);
-#else
- UdmAddTagLimit(Agent->Conf,val);
-#endif
- break;
-
- case UDM_LIMIT_LANG:
-#if UDM_VERSION_ID >= 30204
- UdmVarListAddStr(&Agent->Conf->Vars,"lang",val);
-#else
- UdmAddLangLimit(Agent->Conf,val);
-#endif
- break;
-
- case UDM_LIMIT_CAT:
-#if UDM_VERSION_ID >= 30204
- UdmVarListAddStr(&Agent->Conf->Vars,"cat",val);
-#else
- UdmAddCatLimit(Agent->Conf,val);
-#endif
- break;
-
- case UDM_LIMIT_TYPE:
-#if UDM_VERSION_ID >= 30207
- UdmVarListAddStr(&Agent->Conf->Vars,"type",val);
-#endif
- break;
-
- case UDM_LIMIT_DATE:
-#if UDM_VERSION_ID < 30200
- {
- struct udm_stl_info_t stl_info = { 0, 0, 0 };
- char *edate;
-
- if (val[0] == '>') {
- Z_TYPE(stl_info)=1;
- } else if (val[0] == '<') {
- Z_TYPE(stl_info)=-1;
- } else if((val[0]=='#')&&(edate=strchr(val,','))){
- Z_TYPE(stl_info)=2;
- stl_info.t2=(time_t)(atol(edate+1));
- } else {
- php_error_docref(NULL TSRMLS_CC, E_WARNING,"Incorrect date limit format");
- RETURN_FALSE;
- }
-
- stl_info.t1=(time_t)(atol(val+1));
- UdmAddTimeLimit(Agent->Conf,&stl_info);
- }
-#elif UDM_VERSION_ID >= 30210
- {
- struct tm *d_tm;
- time_t d_t;
- char *d_val2;
- char d_db[20], d_de[20];
- d_t = atol (val+1);
- d_tm = localtime (&d_t);
- if (val[0] == '>') {
- UdmVarListReplaceStr(&Agent->Conf->Vars,"dt","er");
- UdmVarListReplaceStr(&Agent->Conf->Vars,"dx","1");
- sprintf (d_db, "%d", d_tm->tm_mday);
- UdmVarListReplaceStr(&Agent->Conf->Vars,"dd",d_db);
- sprintf (d_db, "%d", d_tm->tm_mon);
- UdmVarListReplaceStr(&Agent->Conf->Vars,"dm",d_db);
- sprintf (d_db, "%d", d_tm->tm_year+1900);
- UdmVarListReplaceStr(&Agent->Conf->Vars,"dy",d_db);
- RETURN_TRUE;
- } else if (val[0] == '<') {
- UdmVarListReplaceStr(&Agent->Conf->Vars,"dt","er");
- UdmVarListReplaceStr(&Agent->Conf->Vars,"dx","-1");
- sprintf (d_db, "%d", d_tm->tm_mday);
- UdmVarListReplaceStr(&Agent->Conf->Vars,"dd",d_db);
- sprintf (d_db, "%d", d_tm->tm_mon);
- UdmVarListReplaceStr(&Agent->Conf->Vars,"dm",d_db);
- sprintf (d_db, "%d", d_tm->tm_year+1900);
- UdmVarListReplaceStr(&Agent->Conf->Vars,"dy",d_db);
- RETURN_TRUE;
- } else if ( (val[0]=='#') && (d_val2 = strchr(val,',')) ){
- UdmVarListReplaceStr(&Agent->Conf->Vars,"dt","range");
- sprintf (d_db, "%d/%d/%d", d_tm->tm_mday, d_tm->tm_mon+1, d_tm->tm_year+1900);
- d_t = atol (d_val2+1);
- d_tm = localtime (&d_t);
- sprintf (d_de, "%d/%d/%d", d_tm->tm_mday, d_tm->tm_mon+1, d_tm->tm_year+1900);
- UdmVarListReplaceStr(&Agent->Conf->Vars,"db",d_db);
- UdmVarListReplaceStr(&Agent->Conf->Vars,"de",d_de);
- RETURN_TRUE;
- } else {
- php_error_docref(NULL TSRMLS_CC, E_WARNING,"Incorrect date limit format");
- RETURN_FALSE;
- }
- }
-#endif
- break;
- default:
- php_error_docref(NULL TSRMLS_CC, E_WARNING,"Unknown search limit parameter");
- RETURN_FALSE;
- break;
- }
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto int udm_clear_search_limits(int agent)
- Clear all mnoGoSearch search restrictions */
-DLEXPORT PHP_FUNCTION(udm_clear_search_limits)
-{
- pval ** yyagent;
- UDM_AGENT * Agent;
- int i;
-
- switch(ZEND_NUM_ARGS()){
- case 1: {
- if (zend_get_parameters_ex(1, &yyagent)==FAILURE) {
- RETURN_FALSE;
- }
- }
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
- ZEND_FETCH_RESOURCE(Agent, UDM_AGENT *, yyagent, -1, "mnoGoSearch-Agent", le_link);
-#if UDM_VERSION_ID >= 30204
- for(i=0;i<Agent->Conf->Vars.nvars;i++){
- if ((!strcasecmp("ul",Agent->Conf->Vars.Var[i].name))||
- (!strcasecmp("cat",Agent->Conf->Vars.Var[i].name))||
- (!strcasecmp("t",Agent->Conf->Vars.Var[i].name))||
- (!strcasecmp("type",Agent->Conf->Vars.Var[i].name))||
- (!strcasecmp("lang",Agent->Conf->Vars.Var[i].name))) {
- UDM_FREE(Agent->Conf->Vars.Var[i].name);
- UDM_FREE(Agent->Conf->Vars.Var[i].val);
- Agent->Conf->Vars.nvars--;
- }
- }
-#else
- UdmClearLimits(Agent->Conf);
-#endif
- RETURN_TRUE;
-}
-/* }}} */
-
-#if UDM_VERSION_ID >= 30200
-/* {{{ proto int udm_check_charset(int agent, string charset)
- Check if the given charset is known to mnogosearch */
-DLEXPORT PHP_FUNCTION(udm_check_charset)
-{
- pval ** yycharset, ** yyagent;
- UDM_AGENT * Agent;
- int id=-1;
-
- switch(ZEND_NUM_ARGS()){
- case 2: {
- if (zend_get_parameters_ex(2, &yyagent,&yycharset)==FAILURE) {
- RETURN_FALSE;
- }
- }
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
- ZEND_FETCH_RESOURCE(Agent, UDM_AGENT *, yyagent, id, "mnoGoSearch-Agent", le_link);
- convert_to_string_ex(yycharset);
-
-
- if (UdmGetCharSet(Z_STRVAL_PP(yycharset))) {
- RETURN_TRUE;
- } else {
- RETURN_FALSE;
- }
-}
-/* }}} */
-#endif
-
-#if UDM_VERSION_ID >= 30203
-/* {{{ proto int udm_crc32(int agent, string str)
- Return CRC32 checksum of gived string */
-DLEXPORT PHP_FUNCTION(udm_crc32)
-{
- pval ** yystr, ** yyagent;
- char *str;
- int crc32;
- char buf[32];
- UDM_AGENT * Agent;
- int id=-1;
-
- switch(ZEND_NUM_ARGS()){
- case 2: {
- if (zend_get_parameters_ex(2, &yyagent,&yystr)==FAILURE) {
- RETURN_FALSE;
- }
- }
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
- ZEND_FETCH_RESOURCE(Agent, UDM_AGENT *, yyagent, id, "mnoGoSearch-Agent", le_link);
- convert_to_string_ex(yystr);
- str = Z_STRVAL_PP(yystr);
-
- crc32=UdmCRC32((str),strlen(str));
- snprintf(buf,sizeof(buf)-1,"%u",crc32);
-
- RETURN_STRING(buf,1);
-}
-/* }}} */
-#endif
-
-#if UDM_VERSION_ID >= 30204
-/* {{{ proto int udm_parse_query_string(int agent, string str)
- Parses query string, initialises variables and search limits taken from it */
-DLEXPORT PHP_FUNCTION(udm_parse_query_string)
-{
- pval ** yystr, ** yyagent;
- char *str;
- UDM_AGENT * Agent;
- int id=-1;
-
- switch(ZEND_NUM_ARGS()){
- case 2: {
- if (zend_get_parameters_ex(2, &yyagent,&yystr)==FAILURE) {
- RETURN_FALSE;
- }
- }
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
- ZEND_FETCH_RESOURCE(Agent, UDM_AGENT *, yyagent, id, "mnoGoSearch-Agent", le_link);
- convert_to_string_ex(yystr);
- str = Z_STRVAL_PP(yystr);
-
- UdmParseQueryString(Agent,&Agent->Conf->Vars,str);
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto int udm_make_excerpt(int agent, int res, int row)
- Perform search */
-DLEXPORT PHP_FUNCTION(udm_make_excerpt)
-{
- pval ** yyagent, **yyres, **yyrow_num;
- UDM_RESULT * Res;
- UDM_AGENT * Agent;
- int id=-1, row;
-
- switch(ZEND_NUM_ARGS()){
- case 3: {
- if (zend_get_parameters_ex(3, &yyagent, &yyres, &yyrow_num)==FAILURE) {
- RETURN_FALSE;
- }
- convert_to_string_ex(yyrow_num);
- row=atoi(Z_STRVAL_PP(yyrow_num));
- }
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
- ZEND_FETCH_RESOURCE(Agent, UDM_AGENT *, yyagent, id, "mnoGoSearch-Agent", le_link);
- ZEND_FETCH_RESOURCE(Res, UDM_RESULT *, yyres, -1, "mnoGoSearch-Result", le_res);
-
- if(row<Res->num_rows){
- char *al;
- char *Excerpt;
-
-#if UDM_VERSION_ID >= 30216
- size_t ExcerptSize, ExcerptPadding;
-
- ExcerptSize = (size_t)UdmVarListFindInt(&Agent->Conf->Vars, "ExcerptSize", 256);
- ExcerptPadding = (size_t)UdmVarListFindInt(&Agent->Conf->Vars, "ExcerptPadding", 40);
-#endif
-
- al = (char *)MyRemoveHiLightDup((const char *)(UdmVarListFindStr(&(Res->Doc[row].Sections), "URL", "")));
- UdmVarListReplaceInt(&(Res->Doc[row].Sections), "STORED_ID", UdmCRC32(al, strlen(al)));
- efree(al);
-
-#if UDM_VERSION_ID >= 30216
- Excerpt = UdmExcerptDoc(Agent, Res, &(Res->Doc[row]), ExcerptSize, ExcerptPadding);
- if (Excerpt) {
- UdmVarListReplaceStr(&(Res->Doc[row].Sections),"Body",Excerpt);
- UDM_FREE(Excerpt);
- }
-#else
- Excerpt = UdmExcerptDoc(Agent, Res, &(Res->Doc[row]), 256);
- if ((Excerpt != NULL) && (strlen(Excerpt) > 6)) {
- char *HlExcerpt = UdmHlConvert(&Res->WWList, Excerpt, Agent->Conf->lcs, Agent->Conf->bcs);
- UdmVarListReplaceStr(&(Res->Doc[row].Sections),"Body",HlExcerpt);
- UDM_FREE(HlExcerpt);
- }
-#endif
- if (Excerpt != NULL && (UdmVarListFindStr(&(Res->Doc[row].Sections), "Z", NULL) == NULL)) {
- UdmVarListReplaceInt(&(Res->Doc[row].Sections),"ST",1);
- UDM_FREE(Excerpt);
- } else {
- UdmVarListReplaceInt(&(Res->Doc[row].Sections),"ST",0);
- RETURN_FALSE;
- }
- }else{
- php_error_docref(NULL TSRMLS_CC, E_WARNING,"row number too large");
- RETURN_FALSE;
- }
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto int udm_set_agent_param_ex(int agent, string var, string val)
- Set mnoGoSearch agent session parameters extended */
-DLEXPORT PHP_FUNCTION(udm_set_agent_param_ex)
-{
- pval **yyagent, **yyvar, **yyval;
- char *val, *var;
- UDM_AGENT * Agent;
-
- switch(ZEND_NUM_ARGS()){
-
- case 3:
- if(zend_get_parameters_ex(3,&yyagent,&yyvar,&yyval)==FAILURE){
- RETURN_FALSE;
- }
- convert_to_string_ex(yyvar);
- convert_to_string_ex(yyval);
- ZEND_FETCH_RESOURCE(Agent, UDM_AGENT *, yyagent, -1, "mnoGoSearch-agent", le_link);
- var = Z_STRVAL_PP(yyvar);
- val = Z_STRVAL_PP(yyval);
-
- break;
-
- default:
- WRONG_PARAM_COUNT;
- break;
- }
-
- UdmVarListReplaceStr(&Agent->Conf->Vars,var,val);
-
- if (!strcasecmp(var,"LocalCharset")) {
- const char * charset=UdmVarListFindStr(&Agent->Conf->Vars,"LocalCharset","iso-8859-1");
- Agent->Conf->lcs=UdmGetCharSet(charset);
- } else if (!strcasecmp(var,"BrowserCharset")) {
- const char * charset=UdmVarListFindStr(&Agent->Conf->Vars,"BrowserCharset","iso-8859-1");
- Agent->Conf->bcs=UdmGetCharSet(charset);
- } else if (!strcasecmp(var,"Synonym")) {
- if (UdmSynonymListLoad(Agent->Conf,val)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s",Agent->Conf->errstr);
- RETURN_FALSE;
- } else UdmSynonymListSort(&(Agent->Conf->Synonyms));
- } else if (!strcasecmp(var,"Stopwordfile")) {
- if (UdmStopListLoad(Agent->Conf,val)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", Agent->Conf->errstr);
- RETURN_FALSE;
- }
- } else if (!strcasecmp(var,"MinWordLen")) {
- Agent->Conf->WordParam.min_word_len=atoi(val);
- } else if (!strcasecmp(var,"MaxWordLen")) {
- Agent->Conf->WordParam.max_word_len=atoi(val);
-#if UDM_VERSION_ID <= 30207
- } else if (!strcasecmp(var,"VarDir")) {
- snprintf(Agent->Conf->vardir,sizeof(Agent->Conf->vardir)-1,"%s%s",val,UDMSLASHSTR);
-#endif
- }
-
- RETURN_TRUE;
-}
-
-/* {{{ proto string udm_get_agent_param_ex(int agent, string field)
- Fetch mnoGoSearch environment parameters */
-DLEXPORT PHP_FUNCTION(udm_get_agent_param_ex)
-{
- pval **yyagent, **yyfield_name;
-
- UDM_AGENT * Agent;
- int row;
- char *field;
-
- switch(ZEND_NUM_ARGS()){
- case 2: {
- if (zend_get_parameters_ex(2, &yyagent,&yyfield_name)==FAILURE){
- RETURN_FALSE;
- }
- convert_to_string_ex(yyfield_name);
- field = Z_STRVAL_PP(yyfield_name);
- }
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
-
- ZEND_FETCH_RESOURCE(Agent, UDM_AGENT *, yyagent, -1, "mnoGoSearch-agent", le_link);
-
- RETURN_STRING((char *)UdmVarListFindStr(&Agent->Conf->Vars,field,""),1);
-}
-/* }}} */
-
-/* {{{ proto string udm_get_res_field_ex(int res, int row, string field)
- Fetch mnoGoSearch result field */
-DLEXPORT PHP_FUNCTION(udm_get_res_field_ex)
-{
- pval **yyres, **yyrow_num, **yyfield_name;
-
- UDM_RESULT * Res;
- int row;
- char *field;
-
- switch(ZEND_NUM_ARGS()){
- case 3: {
- if (zend_get_parameters_ex(3, &yyres,&yyrow_num,&yyfield_name)==FAILURE){
- RETURN_FALSE;
- }
- convert_to_string_ex(yyrow_num);
- convert_to_string_ex(yyfield_name);
- field = Z_STRVAL_PP(yyfield_name);
- row = atoi(Z_STRVAL_PP(yyrow_num));
- }
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
-
- ZEND_FETCH_RESOURCE(Res, UDM_RESULT *, yyres, -1, "mnoGoSearch-Result", le_res);
- if(row<Res->num_rows){
- if (!strcasecmp(field,"URL")) {
- char *al;
- al = (char *)MyRemoveHiLightDup((const char *)(UdmVarListFindStr(&(Res->Doc[row].Sections), field, "")));
- UdmVarListReplaceStr(&Res->Doc[row].Sections,field,al);
- efree(al);
- }
- RETURN_STRING((char *)UdmVarListFindStr(&Res->Doc[row].Sections,field,""),1);
- } else {
- php_error_docref(NULL TSRMLS_CC, E_WARNING,"row number too large");
- RETURN_FALSE;
- }
-}
-/* }}} */
-#endif
-
-#if UDM_VERSION_ID >= 30216
-/* {{{ proto int udm_store_doc_cgi(int agent)
- Get CachedCopy of document and return TRUE if cached copy found */
-DLEXPORT PHP_FUNCTION(udm_store_doc_cgi)
-{
- pval ** yyagent;
- UDM_AGENT * Agent;
- int id=-1;
-
- const char *htok;
- char *last = NULL;
- UDM_DOCUMENT *Doc;
- UDM_RESULT *Res;
- UDM_HTMLTOK tag;
- char *HDoc=NULL;
- char *HEnd=NULL;
- char ch;
- const char *content_type, *charset;
- UDM_CHARSET *cs;
-
- switch(ZEND_NUM_ARGS()){
- case 1: {
- if (zend_get_parameters_ex(1, &yyagent)==FAILURE) {
- RETURN_FALSE;
- }
- }
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
- ZEND_FETCH_RESOURCE(Agent, UDM_AGENT *, yyagent, id, "mnoGoSearch-Agent", le_link);
-
- Doc=UdmDocInit(NULL);
- Res=UdmResultInit(NULL);
-
- UdmPrepare(Agent,Res);
- UdmVarListReplaceStr(&Doc->Sections, "URL", UdmVarListFindStr(&Agent->Conf->Vars, "URL", "0"));
- UdmURLAction(Agent, Doc, UDM_URL_ACTION_GET_CACHED_COPY);
- UdmVarListReplaceLst(&Agent->Conf->Vars, &Doc->Sections, NULL, "*");
-
- charset = UdmVarListFindStr(&Agent->Conf->Vars,"Charset","iso-8859-1");
- cs = UdmGetCharSet(charset);
-
- /* UnStore Doc, Highlight and Display */
-
- content_type = UdmVarListFindStr(&Agent->Conf->Vars, "Content-Type", "text/html");
-
- if(!Doc->Buf.content) {
- UdmResultFree(Res);
- UdmDocFree(Doc);
-
- RETURN_FALSE;
- }
-
- HEnd=HDoc = (char*)emalloc(UDM_MAXDOCSIZE + 32);
- *HEnd='\0';
-
- if (strncasecmp(content_type, "text/plain", 10) == 0) {
- sprintf(HEnd, "<pre>\n");
- HEnd += strlen(HEnd);
- }
-
- UdmHTMLTOKInit(&tag);
- for(htok = UdmHTMLToken(Doc->Buf.content, (const char **)&last, &tag) ; htok ;) {
- switch(tag.type) {
- case UDM_HTML_COM:
- case UDM_HTML_TAG:
- memcpy(HEnd,htok,(size_t)(last-htok));
- HEnd+=last-htok;
- HEnd[0]='\0';
- UdmHTMLParseTag(&tag,Doc);
- break;
- case UDM_HTML_TXT:
- ch = *last; *last = '\0';
- if (tag.title || tag.script) {
- sprintf(HEnd, "%s", UdmHlConvert(NULL, htok, cs, cs));
- } else {
- sprintf(HEnd, "%s", UdmHlConvert(&Res->WWList, htok, cs, cs));
- }
- HEnd=UDM_STREND(HEnd);
- *last = ch;
- break;
- }
- htok = UdmHTMLToken(NULL, (const char **)&last, &tag);
- }
-
- if (strncasecmp(content_type, "text/plain", 10) == 0) {
- sprintf(HEnd, "</pre>\n");
- HEnd += strlen(HEnd);
- }
-
- UdmVarListAddStr(&Agent->Conf->Vars, "document", HDoc);
-
- UdmResultFree(Res);
- UdmDocFree(Doc);
- efree(HDoc);
-
- RETURN_TRUE;
-}
-/* }}} */
-#endif
-
-#if UDM_VERSION_ID >= 30211
-/* {{{ proto int udm_alloc_agent_array(array dbaddr)
- Allocate mnoGoSearch session */
-DLEXPORT PHP_FUNCTION(udm_alloc_agent_array)
-{
- switch(ZEND_NUM_ARGS()){
-
- case 1: {
- pval **yydbaddr;
- zval **tmp;
- char *dbaddr;
- UDM_ENV * Env;
- UDM_AGENT * Agent;
- HashPosition pos;
-
- if(zend_get_parameters_ex(1,&yydbaddr)==FAILURE){
- RETURN_FALSE;
- }
-
- if (Z_TYPE_PP(yydbaddr) != IS_ARRAY) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Argument DBAddr must be an array.");
- RETURN_FALSE;
- }
- convert_to_array_ex(yydbaddr);
-
- Env=UdmEnvInit(NULL);
- UdmVarListReplaceStr(&Env->Vars,"SyslogFacility","local7");
-#if UDM_VERSION_ID >= 30215
- UdmSetLogLevel(NULL,0);
-#else
- UdmSetLogLevel(Env,0);
-#endif
- UdmOpenLog("mnoGoSearch-php",Env,0);
-
- zend_hash_internal_pointer_reset_ex(HASH_OF(*yydbaddr), &pos);
-
- while (zend_hash_get_current_data_ex(HASH_OF(*yydbaddr), (void **)&tmp, &pos) == SUCCESS) {
- convert_to_string_ex(tmp);
- dbaddr = Z_STRVAL_PP(tmp);
- UdmDBListAdd(&Env->dbl,dbaddr, UDM_OPEN_MODE_WRITE);
-
- zend_hash_move_forward_ex(HASH_OF(*yydbaddr), &pos);
- }
-
- Agent=UdmAgentInit(NULL,Env,0);
- ZEND_REGISTER_RESOURCE(return_value,Agent,le_link);
- }
- break;
-
- default:
- WRONG_PARAM_COUNT;
- break;
- }
-}
-/* }}} */
-
-/* {{{ proto int udm_hash32(int agent, string str)
- Return Hash32 checksum of gived string */
-DLEXPORT PHP_FUNCTION(udm_hash32)
-{
- pval ** yystr, ** yyagent;
- char *str;
- udmhash32_t hash32;
- char buf[32];
- UDM_AGENT * Agent;
- int id=-1;
-
- switch(ZEND_NUM_ARGS()){
- case 2: {
- if (zend_get_parameters_ex(2, &yyagent,&yystr)==FAILURE) {
- RETURN_FALSE;
- }
- }
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
- ZEND_FETCH_RESOURCE(Agent, UDM_AGENT *, yyagent, id, "mnoGoSearch-Agent", le_link);
- convert_to_string_ex(yystr);
- str = Z_STRVAL_PP(yystr);
-
- hash32=UdmHash32((str),strlen(str));
-#if UDM_VERSION_ID >= 30215
- snprintf(buf,sizeof(buf)-1,"%i",hash32);
-#else
- snprintf(buf,sizeof(buf)-1,"%u",hash32);
-#endif
-
- RETURN_STRING(buf,1);
-}
-/* }}} */
-#endif
-
-/* {{{ proto int udm_find(int agent, string query)
- Perform search */
-DLEXPORT PHP_FUNCTION(udm_find)
-{
- pval ** yyquery, ** yyagent;
- UDM_RESULT * Res;
- UDM_AGENT * Agent;
- int id=-1;
-
- switch(ZEND_NUM_ARGS()){
-#if UDM_VERSION_ID >= 30213
- case 1: {
- if (zend_get_parameters_ex(1, &yyagent)==FAILURE) {
- RETURN_FALSE;
- }
- }
- break;
-#endif
- case 2: {
- if (zend_get_parameters_ex(2, &yyagent,&yyquery)==FAILURE) {
- RETURN_FALSE;
- }
- convert_to_string_ex(yyquery);
- }
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
- ZEND_FETCH_RESOURCE(Agent, UDM_AGENT *, yyagent, id, "mnoGoSearch-Agent", le_link);
-
-#if UDM_VERSION_ID < 30200
- if ((Res=UdmFind(Agent,UdmTolower(Z_STRVAL_PP(yyquery),Agent->charset)))) {
-#else
-#if UDM_VERSION_ID >= 30213
- if ((Res=UdmFind(Agent))) {
-#else
- if ((Res=UdmFind(Agent,Z_STRVAL_PP(yyquery)))) {
-#endif
-#endif
- ZEND_REGISTER_RESOURCE(return_value,Res,le_res);
- } else {
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-/* {{{ proto string udm_get_res_field(int res, int row, int field)
- Fetch mnoGoSearch result field */
-DLEXPORT PHP_FUNCTION(udm_get_res_field)
-{
- pval **yyres, **yyrow_num, **yyfield_name;
-
- UDM_RESULT * Res;
- int row,field;
-
- switch(ZEND_NUM_ARGS()){
- case 3: {
- if (zend_get_parameters_ex(3, &yyres,&yyrow_num,&yyfield_name)==FAILURE){
- RETURN_FALSE;
- }
- convert_to_string_ex(yyrow_num);
- convert_to_string_ex(yyfield_name);
- field=atoi(Z_STRVAL_PP(yyfield_name));
- row=atoi(Z_STRVAL_PP(yyrow_num));
- }
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
- ZEND_FETCH_RESOURCE(Res, UDM_RESULT *, yyres, -1, "mnoGoSearch-Result", le_res);
- if(row<Res->num_rows){
- switch(field){
- case UDM_FIELD_URL:
-#if UDM_VERSION_ID >= 30204
- {
- char *al;
- al = (char *)MyRemoveHiLightDup((const char *)(UdmVarListFindStr(&(Res->Doc[row].Sections), "URL", "")));
- UdmVarListReplaceStr(&Res->Doc[row].Sections,"URL",al);
- efree(al);
-
- RETURN_STRING((char *)UdmVarListFindStr(&(Res->Doc[row].Sections),"URL",""),1);
- }
-#else
- RETURN_STRING((Res->Doc[row].url)?(Res->Doc[row].url):"",1);
-#endif
- break;
-
- case UDM_FIELD_CONTENT:
-#if UDM_VERSION_ID >= 30204
- RETURN_STRING((char *)UdmVarListFindStr(&(Res->Doc[row].Sections),"Content-Type",""),1);
-#else
- RETURN_STRING((Res->Doc[row].content_type)?(Res->Doc[row].content_type):"",1);
-#endif
- break;
-
- case UDM_FIELD_TITLE:
-#if UDM_VERSION_ID >= 30204
- RETURN_STRING((char *)UdmVarListFindStr(&(Res->Doc[row].Sections),"Title",""),1);
-#else
- RETURN_STRING((Res->Doc[row].title)?(Res->Doc[row].title):"",1);
-#endif
- break;
-
- case UDM_FIELD_KEYWORDS:
-#if UDM_VERSION_ID >= 30204
- RETURN_STRING((char *)UdmVarListFindStr(&(Res->Doc[row].Sections),"Meta.Keywords",""),1);
-#else
- RETURN_STRING((Res->Doc[row].keywords)?(Res->Doc[row].keywords):"",1);
-#endif
- break;
-
- case UDM_FIELD_DESC:
-#if UDM_VERSION_ID >= 30204
- RETURN_STRING((char *)UdmVarListFindStr(&(Res->Doc[row].Sections),"Meta.Description",""),1);
-#else
- RETURN_STRING((Res->Doc[row].description)?(Res->Doc[row].description):"",1);
-#endif
- break;
-
- case UDM_FIELD_TEXT:
-#if UDM_VERSION_ID >= 30204
- RETURN_STRING((char *)UdmVarListFindStr(&(Res->Doc[row].Sections),"Body",""),1);
-#else
- RETURN_STRING((Res->Doc[row].text)?(Res->Doc[row].text):"",1);
-#endif
- break;
-
- case UDM_FIELD_SIZE:
-#if UDM_VERSION_ID >= 30204
- RETURN_LONG(UdmVarListFindInt(&(Res->Doc[row].Sections),"Content-Length",0));
-#else
- RETURN_LONG((Res->Doc[row].size));
-#endif
- break;
-
- case UDM_FIELD_URLID:
-#if UDM_VERSION_ID >= 30204
- RETURN_LONG(UdmVarListFindInt(&(Res->Doc[row].Sections),"ID",0));
-#else
- RETURN_LONG((Res->Doc[row].url_id));
-#endif
- break;
-
- case UDM_FIELD_RATING:
-#if UDM_VERSION_ID >= 30204
- RETURN_STRING((char *)UdmVarListFindStr(&(Res->Doc[row].Sections),"Score",""),1);
-#else
- RETURN_LONG((Res->Doc[row].rating));
-#endif
- break;
-
- case UDM_FIELD_MODIFIED:
-#if UDM_VERSION_ID >= 30204
- RETURN_STRING((char *)UdmVarListFindStr(&(Res->Doc[row].Sections),"Last-Modified",""),1);
-#else
- RETURN_LONG((Res->Doc[row].last_mod_time));
-#endif
- break;
-
- case UDM_FIELD_ORDER:
-#if UDM_VERSION_ID >= 30204
- RETURN_LONG(UdmVarListFindInt(&(Res->Doc[row].Sections),"Order",0));
-#else
- RETURN_LONG((Res->Doc[row].order));
-#endif
- break;
-
- case UDM_FIELD_CRC:
-#if UDM_VERSION_ID >= 30204
- RETURN_LONG(UdmVarListFindInt(&(Res->Doc[row].Sections),"crc32",0));
-#else
- RETURN_LONG((Res->Doc[row].crc32));
-#endif
- break;
-
- case UDM_FIELD_CATEGORY:
-#if UDM_VERSION_ID >= 30204
- RETURN_STRING((char *)UdmVarListFindStr(&(Res->Doc[row].Sections),"Category",""),1);
-#else
- RETURN_STRING((Res->Doc[row].category)?(Res->Doc[row].category):"",1);
-#endif
- break;
-
-#if UDM_VERSION_ID >= 30203
- case UDM_FIELD_LANG:
-#if UDM_VERSION_ID >= 30204
- RETURN_STRING((char *)UdmVarListFindStr(&(Res->Doc[row].Sections),"Content-Language",""),1);
-#else
- RETURN_STRING((Res->Doc[row].lang)?(Res->Doc[row].lang):"",1);
-#endif
- break;
-
- case UDM_FIELD_CHARSET:
-#if UDM_VERSION_ID >= 30204
- RETURN_STRING((char *)UdmVarListFindStr(&(Res->Doc[row].Sections),"Charset",""),1);
-#else
- RETURN_STRING((Res->Doc[row].charset)?(Res->Doc[row].charset):"",1);
-#endif
- break;
-#endif
-
-#if UDM_VERSION_ID >= 30207
- case UDM_FIELD_SITEID:
- RETURN_LONG(UdmVarListFindInt(&(Res->Doc[row].Sections),"Site_id",0));
-
- break;
-
- case UDM_FIELD_POP_RANK:
- RETURN_STRING((char *)UdmVarListFindStr(&(Res->Doc[row].Sections),"Pop_Rank",""),1);
-
- break;
-
- case UDM_FIELD_ORIGINID:
- RETURN_LONG(UdmVarListFindInt(&(Res->Doc[row].Sections),"Origin-Id",0));
-
- break;
-#endif
-
- default:
- php_error_docref(NULL TSRMLS_CC, E_WARNING,"Unknown mnoGoSearch field name");
- RETURN_FALSE;
- break;
- }
- }else{
- php_error_docref(NULL TSRMLS_CC, E_WARNING,"row number too large");
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-/* {{{ proto string udm_get_res_param(int res, int param)
- Get mnoGoSearch result parameters */
-DLEXPORT PHP_FUNCTION(udm_get_res_param)
-{
- pval ** yyres, ** yyparam;
- int param;
- UDM_RESULT * Res;
- switch(ZEND_NUM_ARGS()){
- case 2: {
- if (zend_get_parameters_ex(2, &yyres, &yyparam)==FAILURE) {
- RETURN_FALSE;
- }
- convert_to_long_ex(yyparam);
- param=(Z_LVAL_PP(yyparam));
- }
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
- ZEND_FETCH_RESOURCE(Res, UDM_RESULT *, yyres, -1, "mnoGoSearch-Result", le_res);
- switch(param){
- case UDM_PARAM_NUM_ROWS:
- RETURN_LONG(Res->num_rows);
- break;
-
- case UDM_PARAM_FOUND:
- RETURN_LONG(Res->total_found);
- break;
-
- case UDM_PARAM_WORDINFO:
-#if UDM_VERSION_ID >= 30204
- {
- int len,i;
- for(len = i = 0; i < Res->WWList.nwords; i++)
- len += Res->WWList.Word[i].len + 64;
- {
- size_t wsize=(1+len)*sizeof(char);
- char *wordinfo = (char*) emalloc(wsize);
-
- *wordinfo = '\0';
-
- for(i = 0; i < Res->WWList.nwords; i++){
- if ((Res->WWList.Word[i].count > 0) ||
- (Res->WWList.Word[i].origin == UDM_WORD_ORIGIN_QUERY)) {
- if(wordinfo[0]) strcat(wordinfo,", ");
- sprintf(UDM_STREND(wordinfo)," %s : %d", Res->WWList.Word[i].word, Res->WWList.Word[i].count);
- } else if (Res->WWList.Word[i].origin == UDM_WORD_ORIGIN_STOP) {
- if(wordinfo[0]) strcat(wordinfo,", ");
- sprintf(UDM_STREND(wordinfo)," %s : stopword", Res->WWList.Word[i].word);
- }
- }
- RETURN_STRING(wordinfo,0);
- }
- }
-#else
- RETURN_STRING((Res->wordinfo)?(Res->wordinfo):"",1);
-#endif
- break;
-
-#if UDM_VERSION_ID >= 30204
- case UDM_PARAM_WORDINFO_ALL:
- {
- int len,i,j;
- for(len = i = 0; i < Res->WWList.nwords; i++)
- len += Res->WWList.Word[i].len + 64;
- {
- size_t wsize=(1+len)*sizeof(char);
- char *wordinfo = (char*) emalloc(wsize);
- int corder = (size_t)-1, ccount = 0;
-
- *wordinfo = '\0';
-
- for(i = 0; i < Res->WWList.nwords; i++) {
- corder = Res->WWList.Word[i].order;
- ccount = 0;
- for(j = 0; j < Res->WWList.nwords; j++) {
- if (Res->WWList.Word[j].order == corder) {
- ccount += Res->WWList.Word[j].count;
- }
- }
- if (Res->WWList.Word[i].origin == UDM_WORD_ORIGIN_STOP) {
- sprintf(UDM_STREND(wordinfo),"%s%s : stopword", (*wordinfo) ? ", " : "", Res->WWList.Word[i].word);
- } else if (Res->WWList.Word[i].origin == UDM_WORD_ORIGIN_QUERY) {
- sprintf(UDM_STREND(wordinfo),"%s%s : %d / %d", (*wordinfo) ? ", " : "", Res->WWList.Word[i].word, Res->WWList.Word[i].count, ccount);
- } else continue;
- }
- RETURN_STRING(wordinfo,0);
- }
- }
- break;
-#endif
-
- case UDM_PARAM_SEARCHTIME:
- RETURN_DOUBLE(((double)Res->work_time)/1000);
- break;
-
- case UDM_PARAM_FIRST_DOC:
- RETURN_LONG(Res->first);
- break;
-
- case UDM_PARAM_LAST_DOC:
- RETURN_LONG(Res->last);
- break;
-
- default:
- php_error_docref(NULL TSRMLS_CC, E_WARNING,"Unknown mnoGoSearch param name");
- RETURN_FALSE;
- break;
- }
-}
-/* }}} */
-
-/* {{{ proto int udm_free_res(int res)
- mnoGoSearch free result */
-DLEXPORT PHP_FUNCTION(udm_free_res)
-{
- pval ** yyres;
- UDM_RESULT * Res;
- switch(ZEND_NUM_ARGS()){
- case 1: {
- if (zend_get_parameters_ex(1, &yyres)==FAILURE) {
- RETURN_FALSE;
- }
- }
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
- ZEND_FETCH_RESOURCE(Res, UDM_RESULT *, yyres, -1, "mnoGoSearch-Result", le_res);
- zend_list_delete(Z_LVAL_PP(yyres));
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto int udm_free_agent(int agent)
- Free mnoGoSearch session */
-DLEXPORT PHP_FUNCTION(udm_free_agent)
-{
- pval ** yyagent;
- UDM_RESULT * Agent;
- switch(ZEND_NUM_ARGS()){
- case 1: {
- if (zend_get_parameters_ex(1, &yyagent)==FAILURE) {
- RETURN_FALSE;
- }
- }
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
- ZEND_FETCH_RESOURCE(Agent, UDM_RESULT *, yyagent, -1, "mnoGoSearch-agent", le_link);
- zend_list_delete(Z_LVAL_PP(yyagent));
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto int udm_errno(int agent)
- Get mnoGoSearch error number */
-DLEXPORT PHP_FUNCTION(udm_errno)
-{
- pval ** yyagent;
- UDM_AGENT * Agent;
- switch(ZEND_NUM_ARGS()){
- case 1: {
- if (zend_get_parameters_ex(1, &yyagent)==FAILURE) {
- RETURN_FALSE;
- }
- }
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
- ZEND_FETCH_RESOURCE(Agent, UDM_AGENT *, yyagent, -1, "mnoGoSearch-Agent", le_link);
-#if UDM_VERSION_ID >= 30208
- if (UdmEnvErrMsg(Agent->Conf) && strlen(UdmEnvErrMsg(Agent->Conf))) {
- RETURN_LONG(1);
- } else {
- RETURN_LONG(0);
- }
-#elif UDM_VERSION_ID >= 30204
- RETURN_LONG(UdmEnvErrCode(Agent->Conf));
-#else
- RETURN_LONG(UdmDBErrorCode(Agent->db));
-#endif
-}
-/* }}} */
-
-/* {{{ proto string udm_error(int agent)
- Get mnoGoSearch error message */
-DLEXPORT PHP_FUNCTION(udm_error)
-{
- pval ** yyagent;
- UDM_AGENT * Agent;
-
- switch(ZEND_NUM_ARGS()){
- case 1: {
- if (zend_get_parameters_ex(1, &yyagent)==FAILURE) {
- RETURN_FALSE;
- }
- }
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
- ZEND_FETCH_RESOURCE(Agent, UDM_AGENT *, yyagent, -1, "mnoGoSearch-Agent", le_link);
-#if UDM_VERSION_ID >= 30204
- RETURN_STRING((UdmEnvErrMsg(Agent->Conf))?(UdmEnvErrMsg(Agent->Conf)):"",1);
-#else
- RETURN_STRING((UdmDBErrorMsg(Agent->db))?(UdmDBErrorMsg(Agent->db)):"",1);
-#endif
-}
-/* }}} */
-
-/* {{{ proto int udm_api_version()
- Get mnoGoSearch API version */
-DLEXPORT PHP_FUNCTION(udm_api_version)
-{
- RETURN_LONG(UDM_VERSION_ID);
-}
-/* }}} */
-
-/* {{{ proto array udm_cat_list(int agent, string category)
- Get mnoGoSearch categories list with the same root */
-DLEXPORT PHP_FUNCTION(udm_cat_list)
-{
- pval ** yycat, ** yyagent;
- UDM_AGENT * Agent;
- char *cat;
-#if UDM_VERSION_ID >= 30204
- UDM_CATEGORY C;
-#else
- UDM_CATEGORY *c=NULL;
-#endif
- char *buf=NULL;
- int id=-1;
-
- switch(ZEND_NUM_ARGS()){
- case 2: {
- if (zend_get_parameters_ex(2, &yyagent,&yycat)==FAILURE) {
- RETURN_FALSE;
- }
- }
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
- ZEND_FETCH_RESOURCE(Agent, UDM_AGENT *, yyagent, id, "mnoGoSearch-Agent", le_link);
- convert_to_string_ex(yycat);
- cat = Z_STRVAL_PP(yycat);
-
-#if UDM_VERSION_ID >= 30204
- bzero(&C,sizeof(C));
- strncpy(C.addr,cat,sizeof(C.addr)-1);
-#if UDM_VERSION_ID <= 30210
- if(!UdmCatAction(Agent,&C,UDM_CAT_ACTION_LIST,Agent->Conf->db)){
-#else
- if(UDM_OK == UdmCatAction(Agent,&C,UDM_CAT_ACTION_LIST)){
-#endif
-#else
- if((c=UdmCatList(Agent,cat))){
-#endif
- array_init(return_value);
-
- if (!(buf=ecalloc(1,UDMSTRSIZ+1))) {
- RETURN_FALSE;
- }
-
-#if UDM_VERSION_ID >= 30204
- {
- int i;
- if (C.ncategories) {
- for(i=0;i<C.ncategories;i++){
- add_next_index_stringl(return_value, C.Category[i].path,strlen(C.Category[i].path),1);
- add_next_index_stringl(return_value, C.Category[i].name,strlen(C.Category[i].name),1);
- }
- } else {
- RETURN_FALSE;
- }
- }
-#else
- while(c->rec_id){
- snprintf(buf, UDMSTRSIZ, "%s%s",c->link[0]?"@ ":"", c->name);
- add_next_index_string(return_value, c->link[0]?c->link:c->path, 1);
- add_next_index_string(return_value, buf, 1);
- c++;
- }
-#endif
- efree(buf);
- } else {
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-/* {{{ proto array udm_cat_path(int agent, string category)
- Get mnoGoSearch categories path from the root to the given catgory */
-DLEXPORT PHP_FUNCTION(udm_cat_path)
-{
- pval ** yycat, ** yyagent;
- UDM_AGENT * Agent;
- char *cat;
-#if UDM_VERSION_ID >= 30204
- UDM_CATEGORY C;
-#else
- UDM_CATEGORY *c=NULL;
-#endif
- char *buf=NULL;
- int id=-1;
-
- switch(ZEND_NUM_ARGS()){
- case 2: {
- if (zend_get_parameters_ex(2, &yyagent,&yycat)==FAILURE) {
- RETURN_FALSE;
- }
- }
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
- ZEND_FETCH_RESOURCE(Agent, UDM_AGENT *, yyagent, id, "mnoGoSearch-Agent", le_link);
- convert_to_string_ex(yycat);
- cat = Z_STRVAL_PP(yycat);
-
-#if UDM_VERSION_ID >= 30204
- bzero(&C,sizeof(C));
- strncpy(C.addr,cat,sizeof(C.addr)-1);
-#if UDM_VERSION_ID <= 30210
- if(!UdmCatAction(Agent,&C,UDM_CAT_ACTION_PATH,Agent->Conf->db)){
-#else
- if(UDM_OK == UdmCatAction(Agent,&C,UDM_CAT_ACTION_PATH)){
-#endif
-#else
- if((c=UdmCatPath(Agent,cat))){
-#endif
- array_init(return_value);
-
- if (!(buf=ecalloc(1,UDMSTRSIZ+1))) {
- RETURN_FALSE;
- }
-
-#if UDM_VERSION_ID >= 30204
- {
- int i;
- if (C.ncategories) {
- for(i=0;i<C.ncategories;i++){
- add_next_index_stringl(return_value, C.Category[i].path,strlen(C.Category[i].path),1);
- add_next_index_stringl(return_value, C.Category[i].name,strlen(C.Category[i].name),1);
- }
- } else {
- RETURN_FALSE;
- }
- }
-#else
- while(c->rec_id){
- snprintf(buf, UDMSTRSIZ, "%s%s",c->link[0]?"@ ":"", c->name);
- add_next_index_string(return_value, c->link[0]?c->link:c->path, 1);
- add_next_index_string(return_value, buf, 1);
- c++;
- }
-#endif
- efree(buf);
- } else {
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-#if UDM_VERSION_ID > 30110
-/* {{{ proto int udm_get_doc_count(int agent)
- Get total number of documents in database */
-DLEXPORT PHP_FUNCTION(udm_get_doc_count)
-{
- pval ** yyagent;
- UDM_AGENT * Agent;
- int id=-1;
-
- switch(ZEND_NUM_ARGS()){
- case 1: {
- if (zend_get_parameters_ex(1, &yyagent)==FAILURE) {
- RETURN_FALSE;
- }
- }
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
- ZEND_FETCH_RESOURCE(Agent, UDM_AGENT *, yyagent, id, "mnoGoSearch-Agent", le_link);
-#if UDM_VERSION_ID >= 30204
-#if UDM_VERSION_ID <= 30210
- if (!Agent->doccount) UdmURLAction(Agent,NULL,UDM_URL_ACTION_DOCCOUNT,Agent->Conf->db);
-#else
- if (!Agent->doccount) UdmURLAction(Agent,NULL,UDM_URL_ACTION_DOCCOUNT);
-#endif
- RETURN_LONG(Agent->doccount);
-#else
- RETURN_LONG(UdmGetDocCount(Agent));
-#endif
-}
-/* }}} */
-#endif
-
-
-#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/mnogosearch/php_mnogo.h b/ext/mnogosearch/php_mnogo.h
deleted file mode 100644
index f2a2ec5eb2..0000000000
--- a/ext/mnogosearch/php_mnogo.h
+++ /dev/null
@@ -1,113 +0,0 @@
-/* $Source$ */
-/* $Id$ */
-
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2003 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.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. |
- +----------------------------------------------------------------------+
- | Authors: |
- | Initial version by Alex Barkov <bar@izhcom.ru> |
- | and Ramil Kalimullin <ram@izhcom.ru> |
- | Further development by Sergey Kartashoff <gluke@mail.ru> |
- +----------------------------------------------------------------------+
- */
-
-#ifndef _PHP_MNOGO_H
-#define _PHP_MNOGO_H
-
-#if HAVE_MNOGOSEARCH
-
-#include <udm_config.h>
-#include <udmsearch.h>
-
-#if UDM_VERSION_ID >= 30203
-#include <udm_crc32.h>
-#include <udm_store.h>
-#endif
-
-extern zend_module_entry mnogosearch_module_entry;
-#define mnogosearch_module_ptr &mnogosearch_module_entry
-
-#ifdef PHP_WIN32
-#define PHP_MNOGO_API __declspec(dllexport)
-#else
-#define PHP_MNOGO_API
-#endif
-
-#ifdef ZTS
-#include "TSRM.h"
-#endif
-
-/* mnoGoSearch functions */
-DLEXPORT PHP_MINIT_FUNCTION(mnogosearch);
-DLEXPORT PHP_RINIT_FUNCTION(mnogosearch);
-DLEXPORT PHP_MSHUTDOWN_FUNCTION(mnogosearch);
-DLEXPORT PHP_MINFO_FUNCTION(mnogosearch);
-
-DLEXPORT PHP_FUNCTION(udm_api_version);
-#if UDM_VERSION_ID >= 30200
-DLEXPORT PHP_FUNCTION(udm_check_charset);
-#if UDM_VERSION_ID >= 30203
-DLEXPORT PHP_FUNCTION(udm_crc32);
-#endif
-#if UDM_VERSION_ID >= 30204
-DLEXPORT PHP_FUNCTION(udm_parse_query_string);
-DLEXPORT PHP_FUNCTION(udm_make_excerpt);
-DLEXPORT PHP_FUNCTION(udm_set_agent_param_ex);
-DLEXPORT PHP_FUNCTION(udm_get_agent_param_ex);
-DLEXPORT PHP_FUNCTION(udm_get_res_field_ex);
-#endif
-#if UDM_VERSION_ID >= 30211
-DLEXPORT PHP_FUNCTION(udm_hash32);
-DLEXPORT PHP_FUNCTION(udm_alloc_agent_array);
-#endif
-#if UDM_VERSION_ID >= 30216
-DLEXPORT PHP_FUNCTION(udm_store_doc_cgi);
-#endif
-#endif
-
-DLEXPORT PHP_FUNCTION(udm_alloc_agent);
-DLEXPORT PHP_FUNCTION(udm_set_agent_param);
-
-DLEXPORT PHP_FUNCTION(udm_load_ispell_data);
-DLEXPORT PHP_FUNCTION(udm_free_ispell_data);
-
-DLEXPORT PHP_FUNCTION(udm_add_search_limit);
-DLEXPORT PHP_FUNCTION(udm_clear_search_limits);
-
-DLEXPORT PHP_FUNCTION(udm_error);
-DLEXPORT PHP_FUNCTION(udm_errno);
-
-DLEXPORT PHP_FUNCTION(udm_find);
-DLEXPORT PHP_FUNCTION(udm_get_res_field);
-DLEXPORT PHP_FUNCTION(udm_get_res_param);
-
-DLEXPORT PHP_FUNCTION(udm_cat_list);
-DLEXPORT PHP_FUNCTION(udm_cat_path);
-
-DLEXPORT PHP_FUNCTION(udm_free_res);
-DLEXPORT PHP_FUNCTION(udm_free_agent);
-
-#if UDM_VERSION_ID > 30110
-DLEXPORT PHP_FUNCTION(udm_get_doc_count);
-#endif
-
-#else
-
-#define mnogosearch_module_ptr NULL
-
-#endif
-
-#define phpext_mnogosearch_ptr mnogosearch_module_ptr
-
-#endif /* _PHP_MNOGO_H */
diff --git a/ext/msession/CREDITS b/ext/msession/CREDITS
deleted file mode 100644
index 4703783a74..0000000000
--- a/ext/msession/CREDITS
+++ /dev/null
@@ -1,3 +0,0 @@
-msession
-Mark L. Woodward
-mailto:mlwmohawk@mohawksoft.com
diff --git a/ext/msession/README b/ext/msession/README
deleted file mode 100644
index a4ed70faed..0000000000
--- a/ext/msession/README
+++ /dev/null
@@ -1,33 +0,0 @@
-This is msession, it is an interface to a stand-alone session
-management system. The msession daemon can be found at
-Mohawk Software's web site.
-
-http://www.mohawksoft.com
-
-Requirements:
-Mohawk Software's Phoenix library.
-Mohawk Software's msession daemon.
-
-Building:
-In the config.m4 file you will need to specify the include
-and library directories for Phoenix. The setting in config.m4
-is probably wrong.
-
-You will need phoenix installed and built to compile this
-module.
-
-To use msession-test.php, msession must be the default session
-handler in PHP. The easiest way to do that is in the php.ini
-file as:
-
-[Session]
-session.save_handler = msession
-session.save_path = localhost
-
-The session.save.path is the host name of the server running
-msessiond.
-
-12/22/2001
-Changed msession_getdata(...) to msession_get_data(...)
-Changed msession_setdata(...) to msession_set_data(...)
-(docs to follow)
diff --git a/ext/msession/config.m4 b/ext/msession/config.m4
deleted file mode 100644
index f41d018c6d..0000000000
--- a/ext/msession/config.m4
+++ /dev/null
@@ -1,36 +0,0 @@
-dnl
-dnl $Id$
-dnl
-
-PHP_ARG_WITH(msession, for msession support,
-[ --with-msession[=DIR] Include msession support])
-
-if test "$PHP_MSESSION" != "no"; then
- if test -r $PHP_MSESSION/lib/libphoenix.a; then
- PHOENIX_DIR=$PHP_MSESSION
- else
- AC_MSG_CHECKING(for msession in default path)
- for i in /usr/local/phoenix /usr/local /usr; do
- if test -r $i/lib/libphoenix.a; then
- PHOENIX_DIR=$i
- AC_MSG_RESULT(found in $i)
- fi
- done
- fi
-
- if test -z "$PHOENIX_DIR"; then
- AC_MSG_RESULT(not found)
- AC_MSG_ERROR(Please reinstall the Phoenix / msession distribution)
- fi
-
-
- AC_DEFINE(HAVE_MSESSION, 1, [ ])
- PHP_ADD_LIBRARY_WITH_PATH(phoenix, "$PHOENIX_DIR/lib", PHOENIX_LIB)
- PHOENIX_INCLUDE="-I$PHOENIX_DIR"
- PHP_SUBST(PHOENIX_LIB)
-
- PHP_REQUIRE_CXX
- PHP_NEW_EXTENSION(msession, msession.c, $ext_shared)
- PHP_ADD_LIBRARY(stdc++)
-fi
-
diff --git a/ext/msession/msession-test.php b/ext/msession/msession-test.php
deleted file mode 100644
index e591fcca70..0000000000
--- a/ext/msession/msession-test.php
+++ /dev/null
@@ -1,125 +0,0 @@
-<?
-# msession-test.php
-# This is a test page for msession functions.
-# most msession functions are used in this page with
-# the exception of msession_get_data, and msession_set_data
-# which are used implicitly with the PHP session
-# extension.
-#
-#
-#
-
-# Start the session system, this will connect to msession
-# as configured in PHP.INI.
-#
-# Start sessions, this will set a cookie.
-session_start();
-
-# Now, optional, use msession_uniq() to create a guarenteed
-# uniq session name.
-#
-if(!$HTTP_COOKIE_VARS["PHPSESSID"])
-{
- # Use uniq to create the session. This is guarenteed to be
- # uniq in the server.
- $sid = msession_uniq(32);
- setcookie ("PHPSESSID", $sid);
- session_id($sid);
- $HTTP_COOKIE_VARS["PHPSESSID"] = $sid;
- # New session, set some variables
- if(0) // One at a time
- {
- echo "Set Variable: " . msession_set($sid, 'time',time()) ."<p>\n";
- echo "Set Variable: " . msession_set($sid, 'name1','test1') ."<p>\n";
- echo "Set Variable: " . msession_set($sid, 'name2','test2') ."<p>\n";
- echo "Set Variable: " . msession_set($sid, 'name3','test3') ."<p>\n";
- echo "Set Variable: " . msession_set($sid, 'name4','test4') ."<p>\n";
- echo "Set Variable: " . msession_set($sid, 'name5','test5') ."<p>\n";
- echo "Set Variable: " . msession_set($sid, 'name6','test6') ."<p>\n";
- echo "Set Variable: " . msession_set($sid, 'name7','test7') ."<p>\n";
- }
- else // All at once in an array
- {
- $setarray = array();
- $setarray['time']=time();
- $setarray['name1'] = 'test1';
- $setarray['name2'] = 'test2';
- $setarray['name3'] = 'test3';
- $setarray['name4'] = 'test4';
- $setarray['name5'] = 'test5';
- $setarray['name6'] = 'test6';
- $setarray['name7'] = 'test7';
- msession_set_array($sid, $setarray);
- }
-}
-else
-{
- $sid = $HTTP_COOKIE_VARS["PHPSESSID"];
-}
-
-#This makes a link between the variable $count and the
-# session variable "count"
-session_register("count");
-
-$count ++;
-
-# Output some information.
-echo "sid: " . $sid . "<br>\n";
-echo "Session Count: " . $count . "<br>\n";
-
-# Use msession_randstr() to produce a random string.
-# A valid string of n characters of jibberish is returned.
-echo "Random String: " . msession_randstr(32) . "<br>\n";
-
-# This is a thread safe increment, unlike PHP's session, many web servers
-# can be updating this variable and collisions are managed.
-# (for this to work, older versions of msessiond must be started with "-g globals"
-# newer versions create it by default)
-echo "Global Count: " . msession_inc(globals, "counter") . "<br>\n";
-
-# This gets a count of active sessions.
-echo "Total active sessions: " . msession_count() . "<br>\n";
-
-# This gets all the variables for a user in an associative array.
-$varray = msession_get_array($sid);
-
-if(!$varray)
- echo "Get variable array: Failed<br>\n";
-
-# Display all the user's variables
-$arraykeys = array_keys($varray);
-for($i=0; $arraykeys[$i]; $i++)
- echo "Key: " . $arraykeys[ $i ] ." = " .$varray[$arraykeys[$i]] ."<br>\n";
-
-
-# Find a list of all sessions with same name/value pair
-$array = msession_find('name1', 'test1');
-
-#display the sessions
-for($i=0; $array[$i]; $i++)
- echo "Similar Sessions: " . $i . " " . $array[$i] . "<br>\n";
-
-# Find all the sessions which have the variable "time" set.
-$vararray = msession_listvar('time');
-
-$arraykeys = array_keys($vararray);
-
-for($i=0; $arraykeys[$i]; $i++)
- echo "Key: " . $arraykeys[ $i ] ." = " .$vararray[$arraykeys[$i]] ."<br>\n";
-
-# msession can support a personality plugin, this is an escape call directly
-# into the plugin's REQ_ESCAPE function.
-echo "Call the plugin: " . msession_plugin($sid, 3, "test"). "<br>\n";
-
-# msession also supprts function-only plugins. this is a call into the demo
-# plugin (funct.so) which returns the uptime of the msessiond process.
-echo "Call the function: " . msession_call('fntest', "1","2", "3", "4") ."<br>\n";
-
-#List ALL sessions on the system
-$sarray = msession_list();
-
-for($i=0; $sarray[$i]; $i++)
- echo "Sessions: " . $i . " " . $sarray[$i] . "<br>\n";
-
-?>
-
diff --git a/ext/msession/msession.c b/ext/msession/msession.c
deleted file mode 100644
index 60f4360808..0000000000
--- a/ext/msession/msession.c
+++ /dev/null
@@ -1,1390 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | msession 1.0 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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. |
- +----------------------------------------------------------------------+
- | Authors: Mark Woodward <markw@mohawksoft.com> |
- | Portions copyright the PHP group. |
- +----------------------------------------------------------------------+
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "php.h"
-#include "php_ini.h"
-#include "php_msession.h"
-#include "reqclient.h"
-#include "ext/standard/info.h"
-#include "ext/session/php_session.h"
-
-
-/* Macros and such */
-#ifndef TRUE
-#define TRUE 1
-#endif
-#ifndef FALSE
-#define FALSE 0
-#endif
-#ifndef SID_LEN
-#define SID_LEN 32
-#endif
-
-
-/* Uncomment to get debugging messages */
-/* #define ERR_DEBUG */
-
-#ifdef ERR_DEBUG
-#define ELOG( str ) php_log_err( str )
-#else
-#define ELOG( str )
-#endif
-
-/* Test if system is OK fror use. */
-/* Macros may be ugly, but I can globaly add debuging when needed. */
-#define IFCONNECT_BEGIN if(s_reqb && s_conn) {
-#define IFCONNECT_ENDVAL(V) } else { php_error_docref(NULL TSRMLS_CC, E_WARNING, "Msession not initialized"); return V; }
-#define IFCONNECT_END } else { php_error_docref(NULL TSRMLS_CC, E_WARNING, "Msession not initialized"); RETURN_FALSE; }
-
-#ifndef HAVE_PHP_SESSION
-#error HAVE_PHP_SESSION not defined
-#endif
-
-/* Test if session module contains custom sesson ID patch */
-#ifdef PHP_SESSION_API
-#if (PHP_SESSION_API >= 20020330)
-#define HAVE_PHP_SESSION_CREATESID
-#endif
-#endif
-
-/* This sets the PHP API version used in the file. */
-/* If this module does not compile on the version of PHP you are using, look for */
-/* this value in Zend/zend_modules.h, and set appropriately */
-#if (ZEND_MODULE_API_NO <= 20001222)
-#define PHP_4_0
-#define TSRMLS_CC
-#define TSRMLS_DC
-#define TSRMLS_FETCH()
-/* Comment out this line if you wish to have msession without php sessions */
-#define HAVE_PHP_SESSION
-#warning Backward compatible msession extension requires PHP sessions. If PHP compiles and links, you can ignore this warning.
-#elif (ZEND_MODULE_API_NO >= 20010901)
-#define PHP_4_1
-#else
-#warning ZEND_MODULE_API_NO not defined
-#define PHP_4_1
-#endif
-
-/*
- * Please do not remove backward compatibility from this module.
- * this same source must also work with the 4.0.6 version of PHP.
- *
- * Module Variable naming hints:
- * All global scope variables begin with "g_" for global.
- * All static file scoped variables begin with "s_" for static.
- * Zero terminated strings generally start with "sz" for "string followed by zero."
- * integers that hold string or data lengths generally start with "cb" for "count of bytes."
- * Also, please to not reformat braces ;-)
- * -MLW
- */
-#if HAVE_MSESSION
-#ifdef HAVE_PHP_SESSION
-#ifdef HAVE_PHP_SESSION_CREATESID
-/* If the PHP Session module is compiled or available, include support */
-PS_FUNCS_SID(msession);
-ps_module ps_mod_msession = {
- PS_MOD_SID(msession)
-};
-#else
-PS_FUNCS(msession);
-ps_module ps_mod_msession = {
- PS_MOD(msession)
-};
-#endif
-#endif
-
-/* Per-process variables need by msession */
-static char s_szdefhost[]="localhost";
-static char * s_szhost=s_szdefhost;
-static int s_port=8086;
-static void * s_conn=NULL;
-static REQB * s_reqb=NULL;
-
-function_entry msession_functions[] = {
- PHP_FE(msession_connect,NULL)
- PHP_FE(msession_disconnect,NULL)
- PHP_FE(msession_lock,NULL)
- PHP_FE(msession_unlock,NULL)
- PHP_FE(msession_count,NULL)
- PHP_FE(msession_create,NULL)
- PHP_FE(msession_destroy,NULL)
- PHP_FE(msession_set,NULL)
- PHP_FE(msession_get,NULL)
- PHP_FE(msession_find,NULL)
- PHP_FE(msession_get_array,NULL)
- PHP_FE(msession_set_array,NULL)
- PHP_FE(msession_timeout,NULL)
- PHP_FE(msession_inc,NULL)
- PHP_FE(msession_set_data,NULL)
- PHP_FE(msession_get_data,NULL)
- PHP_FE(msession_listvar,NULL)
- PHP_FE(msession_list,NULL)
- PHP_FE(msession_uniq,NULL)
- PHP_FE(msession_randstr,NULL)
- PHP_FE(msession_plugin,NULL)
- PHP_FE(msession_call,NULL)
- PHP_FE(msession_ctl,NULL)
- PHP_FE(msession_exec,NULL)
- PHP_FE(msession_ping,NULL)
- {NULL, NULL, NULL}
-};
-
-zend_module_entry msession_module_entry = {
-#ifdef PHP_4_1
- STANDARD_MODULE_HEADER,
-#endif
- "msession",
- msession_functions,
- PHP_MINIT(msession),
- PHP_MSHUTDOWN(msession),
- PHP_RINIT(msession),
- PHP_RSHUTDOWN(msession),
- PHP_MINFO(msession),
-#ifdef PHP_4_1
- NO_VERSION_YET,
-#endif
- STANDARD_MODULE_PROPERTIES
-};
-
-#ifdef COMPILE_DL_MSESSION
-ZEND_GET_MODULE(msession)
-#endif
-
-PHP_MINIT_FUNCTION(msession)
-{
- s_conn = NULL;
- s_szhost = s_szdefhost;
-
-#ifdef HAVE_PHP_SESSION
- php_session_register_module(&ps_mod_msession);
-#endif
- return SUCCESS;
-}
-
-PHP_MSHUTDOWN_FUNCTION(msession)
-{
- return SUCCESS;
-}
-
-PHP_RINIT_FUNCTION(msession)
-{
- return SUCCESS;
-}
-
-PHP_RSHUTDOWN_FUNCTION(msession)
-{
- return SUCCESS;
-}
-
-PHP_MINFO_FUNCTION(msession)
-{
- php_info_print_table_start();
- php_info_print_table_header(2, "msession support", "enabled");
- php_info_print_table_end();
-}
-#define RPT_CONN_ERR
-#ifdef ERR_DEBUG
-#undef RPT_CONN_ERR
-#define RPT_CONN_ERR if(s_reqb->req.stat == REQ_ERR && (result == REQE_BADCONN || result == REQE_NOSEND)) \
- ELOG("Socket reports closed"); \
- else if(s_reqb->req.stat == REQ_ERR)\
- ELOG("MSession call failed");\
-#else
-#endif
-
-#define CONN_ERR(reqb)\
- (reqb->req.stat == REQ_ERR) && (reqb->req.param == REQE_BADCONN || reqb->req.param == REQE_NOSEND)
-
-int PHPExecRequest(int req, char *session, char *d1, char *d2,int param)
-{
- int result;
- FormatRequest(&s_reqb, req, session, d1, d2, param);
- result = DoRequest(s_conn, &s_reqb);
-
- /* Server closed the connection! */
- if(CONN_ERR(s_reqb))
- {
- ELOG("Connection was closed by server");
- if(ReopenReqConn(s_conn))
- {
- FormatRequest(&s_reqb, req, session, d1, d2, param);
- result = DoRequest(s_conn, &s_reqb);
- }
- }
- RPT_CONN_ERR
- return result;
-}
-int PHPExecRequestMulti(int req, char *session, int n, char **pairs, int param)
-{
- int result;
- FormatRequestMulti(&s_reqb, req, session, n, pairs, param);
- result = DoRequest(s_conn, &s_reqb);
-
- /* Server closed the connection! */
- if(CONN_ERR(s_reqb))
- {
- ELOG("Connection was closed by server");
- if(ReopenReqConn(s_conn))
- {
- FormatRequestMulti(&s_reqb, req, session, n, pairs, param);
- result = DoRequest(s_conn, &s_reqb);
- }
- }
- RPT_CONN_ERR
- return result;
-}
-int PHPExecRequestStrings(int req, char *session, int n, char **strings)
-{
- int result;
- FormatRequestStrings(&s_reqb, req, session, n, strings);
- result = DoRequest(s_conn, &s_reqb);
- /* Server closed the connection! */
- if(CONN_ERR(s_reqb))
- {
- ELOG("Connection was closed by server");
- if(ReopenReqConn(s_conn))
- {
- FormatRequestStrings(&s_reqb, req, session, n, strings);
- result = DoRequest(s_conn, &s_reqb);
- }
- }
- RPT_CONN_ERR
- return result;
-}
-
-
-int PHPMsessionConnect(const char *szhost, int nport)
-{
- int fNewHost=FALSE;
-
- if(!s_reqb)
- s_reqb = AllocateRequestBuffer(2048);
-
- if(!s_reqb) /* no buffer, it won't work! */
- return 0;
-
- if(strcmp(s_szhost, szhost))
- {
- if(s_szhost != s_szdefhost)
- free(s_szhost);
- s_szhost = strdup(szhost);
- fNewHost = TRUE;
- }
- if(nport && nport != s_port)
- {
- fNewHost = TRUE;
- s_port = nport;
- }
-
- ELOG("PHPMsessionConnect:new");
- if(s_conn && fNewHost)
- {
- ELOG("Closing old connection, opening new");
- CloseReqConn(s_conn);
- s_conn = NULL;
- }
- if(!s_conn)
- s_conn = OpenReqConn(s_szhost, s_port);
-#ifdef ERR_DEBUG
- else
- {
- ELOG("Reusing old connection");
- }
-#endif
-
-
-#ifdef ERR_DEBUG
-{
- char buffer[256];
- sprintf(buffer,"Connect: %s [%d] = %d (%X)\n",
- s_szhost, s_port, (s_conn != NULL), (unsigned)s_conn);
- php_log_err(buffer);
-}
-#endif
- return (s_conn) ? 1 : 0;
-}
-
-void PHPMsessionDisconnect()
-{
-}
-
-char *PHPMsessionGetData(char *session TSRMLS_DC)
-{
- char *ret = NULL;
- ELOG("PHPMsessionGetData");
-
- IFCONNECT_BEGIN
-
- PHPExecRequest(REQ_DATAGET, (char *)session,"","",0);
-
- if(s_reqb->req.stat==REQ_OK)
- ret = safe_estrdup(s_reqb->req.datum);
- IFCONNECT_ENDVAL(0)
-
- return ret;
-}
-int PHPMsessionSetData(char *session, char *data TSRMLS_DC)
-{
- ELOG("PHPMsessionSetData");
- IFCONNECT_BEGIN
- int ret=0;
-
- PHPExecRequest(REQ_DATASET, session,"",data,0);
- ret = (s_reqb->req.stat==REQ_OK);
- if(s_reqb->req.stat!=REQ_OK)
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", ReqbErr(s_reqb));
-
- return ret;
-
- IFCONNECT_ENDVAL(0)
-}
-int PHPMsessionDestroy(char *session TSRMLS_DC)
-{
- ELOG("PHPMsessionDestroy");
- IFCONNECT_BEGIN
-
- int ret=0;
- PHPExecRequest( REQ_DROP, session, "","",0);
- ret = (s_reqb->req.stat==REQ_OK);
- if(s_reqb->req.stat!=REQ_OK)
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", ReqbErr(s_reqb));
- return ret;
-
- IFCONNECT_ENDVAL(0)
-}
-
-/* {{{ proto bool msession_connect(string host, string port)
- Connect to msession sever */
-PHP_FUNCTION(msession_connect)
-{
- char *szhost;
- int nport;
-
- zval **zhost;
- zval **zport;
-
- if(ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &zhost, &zport) == FAILURE)
- {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_string_ex(zhost);
- convert_to_string_ex(zport);
-
- szhost = Z_STRVAL_PP(zhost);
- nport = atoi(Z_STRVAL_PP(zport));
-
- if(PHPMsessionConnect(szhost,nport))
- {
- RETURN_TRUE;
- }
- else
- {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "MSession connect failed");
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-/* {{{ proto void msession_disconnect(void)
- Disconnect from msession server */
-PHP_FUNCTION(msession_disconnect)
-{
- PHPMsessionDisconnect();
- RETURN_NULL();
-}
-/* }}} */
-
-/* {{{ proto int msession_count(void)
- Get session count */
-PHP_FUNCTION(msession_count)
-{
- IFCONNECT_BEGIN
-
- int count;
- PHPExecRequest( REQ_COUNT, "", "","",0);
-
- count = (s_reqb->req.stat == REQ_OK) ? s_reqb->req.param : 0;
-
- RETURN_LONG(count);
-
- IFCONNECT_END
-}
-/* }}} */
-
-/* {{{ proto bool msession_create(string session)
- Create a session */
-PHP_FUNCTION(msession_create)
-{
- IFCONNECT_BEGIN
-/* int stat; */
- char *szsession;
- zval **session;
-
- if(ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &session) == FAILURE)
- {
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex(session);
- szsession = Z_STRVAL_PP(session);
- PHPExecRequest( REQ_CREATE, szsession, "","",0);
- if(s_reqb->req.stat==REQ_OK)
- {
- RETURN_TRUE;
- }
- else
- {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", ReqbErr(s_reqb));
- RETURN_FALSE;
- }
- IFCONNECT_END
-}
-/* }}} */
-
-/* {{{ proto bool msession_destroy(string name)
- Destroy a session */
-PHP_FUNCTION(msession_destroy)
-{
- char *szsession;
- zval **session;
- if(ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &session) == FAILURE)
- {
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex(session);
- szsession = Z_STRVAL_PP(session);
- PHPMsessionDestroy(szsession TSRMLS_CC);
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto int msession_lock(string name)
- Lock a session */
-PHP_FUNCTION(msession_lock)
-{
- IFCONNECT_BEGIN
- char *szsession;
- zval **session;
-
- if(ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &session) == FAILURE)
- {
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex(session);
- szsession = Z_STRVAL_PP(session);
- PHPExecRequest( REQ_SLOCK, szsession, "","",0);
-
- if(s_reqb->req.stat==REQ_OK)
- {
- RETURN_LONG(s_reqb->req.param);
- }
- else
- {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", ReqbErr(s_reqb));
- RETURN_FALSE;
- }
-
- IFCONNECT_END
-
-}
-/* }}} */
-/* {{{ proto int msession_ctl(string name)
- Lock a session */
-PHP_FUNCTION(msession_ctl)
-{
- static char *parray[] =
- { "EXIST",
- "TTL",
- "AGE",
- "TLA",
- "CTIME",
- "TOUCH",
- "NOW",
- NULL
- };
- IFCONNECT_BEGIN
- char *szsession;
- zval **session;
- zval **which;
- int fn = REQ_STAT_EXIST;
-
-
- int n = ZEND_NUM_ARGS();
-
- if(n != 1 && n != 2)
- {
- WRONG_PARAM_COUNT;
- }
-
- if(zend_get_parameters_ex(n,&session,&which) == FAILURE)
- {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_string_ex(session);
- szsession = Z_STRVAL_PP(session);
-
- if(n > 1)
- {
- char *szwhich;
- int i;
- convert_to_string_ex(which);
- szwhich = Z_STRVAL_PP(which);
- for(i=0; parray[i]; i++)
- {
- if(strcasecmp(parray[i], szwhich) == 0)
- {
- ELOG(szwhich);
-
- fn = i;
- break;
- }
- }
- }
-
- PHPExecRequest( REQ_CTL, szsession, "","",fn);
-
- if(s_reqb->req.stat==REQ_OK)
- {
-#ifdef ERR_DEBUG
- char buffer[128];
- sprintf(buffer, "ret:%s", s_reqb->req.datum);
- ELOG(buffer);
-#endif
- s_reqb->req.param = atoi(s_reqb->req.datum);
- RETURN_LONG(s_reqb->req.param);
- }
- else
- {
- ELOG("msession_ctl failed");
- RETURN_FALSE;
- }
- IFCONNECT_END
-}
-
-/* {{{ proto int msession_unlock(string session, int key)
- Unlock a session */
-PHP_FUNCTION(msession_unlock)
-{
- IFCONNECT_BEGIN
- char *szsession;
- long lkey;
- zval **session;
- zval **key;
-
- if(ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &session, &key) == FAILURE)
- {
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex(session);
- szsession = Z_STRVAL_PP(session);
- convert_to_long_ex(key);
- lkey = Z_LVAL_PP(key);
- PHPExecRequest( REQ_SUNLOCK, szsession, "","",lkey);
-
- if(s_reqb->req.stat==REQ_OK)
- {
- RETURN_LONG(s_reqb->req.param);
- }
- else
- {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", ReqbErr(s_reqb));
- RETURN_FALSE;
- }
- IFCONNECT_END
-}
-/* }}} */
-
-/* {{{ proto bool msession_set(string session, string name, string value)
- Set value in session */
-PHP_FUNCTION(msession_set)
-{
- IFCONNECT_BEGIN
-
- char *szsession;
- char *szname;
- char *szvalue;
- zval **session;
- zval **name;
- zval **value;
-
- if(ZEND_NUM_ARGS() != 3 || zend_get_parameters_ex(3,&session,&name,&value) == FAILURE)
- {
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex(session);
- convert_to_string_ex(name);
- convert_to_string_ex(value);
-
- szsession = Z_STRVAL_PP(session);
- szname = Z_STRVAL_PP(name);
- szvalue = Z_STRVAL_PP(value);
-
- PHPExecRequest( REQ_SETVAL, szsession, szname, szvalue, 0);
-
- if(s_reqb->req.stat==REQ_OK)
- {
- RETURN_TRUE;
- }
- else
- {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", ReqbErr(s_reqb));
- RETURN_FALSE;
- }
- IFCONNECT_END
-}
-/* }}} */
-
-/* {{{ proto string msession_get(string session, string name, string default_value)
- Get value from session */
-PHP_FUNCTION(msession_get)
-{
- IFCONNECT_BEGIN
- char *szsession;
- char *szname;
- char *szvalue;
- zval **session;
- zval **name;
- zval **value;
-
- if(ZEND_NUM_ARGS() != 3 || zend_get_parameters_ex(3,&session,&name,&value) == FAILURE)
- {
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex(session);
- convert_to_string_ex(name);
- convert_to_string_ex(value);
- szsession = Z_STRVAL_PP(session);
- szname = Z_STRVAL_PP(name);
- szvalue = Z_STRVAL_PP(value);
-
- PHPExecRequest( REQ_GETVAL, szsession, szname, szvalue,0);
-
- if(s_reqb->req.stat==REQ_OK)
- {
- szvalue = safe_estrdup(s_reqb->req.datum);
- RETURN_STRING(szvalue, 0)
- }
- else
- {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", ReqbErr(s_reqb));
- RETURN_NULL();
- }
- IFCONNECT_END
-}
-/* }}} */
-
-/* {{{ proto string msession_uniq(int num_chars)
- Get uniq id */
-PHP_FUNCTION(msession_uniq)
-{
- IFCONNECT_BEGIN
-
- long val;
- zval **param;
-
- if(ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1,&param) == FAILURE)
- {
- WRONG_PARAM_COUNT;
- }
- convert_to_long_ex(param);
- val = Z_LVAL_PP(param);
-
- PHPExecRequest( REQ_UNIQ,"", "", "",val);
-
- if(s_reqb->req.stat==REQ_OK)
- {
- char *szval = safe_estrdup(s_reqb->req.datum);
- RETURN_STRING(szval, 0)
- }
- else
- {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", ReqbErr(s_reqb));
- RETURN_NULL();
- }
- IFCONNECT_END
-
-}
-/* }}} */
-
-/* {{{ proto string msession_randstr(int num_chars)
- Get random string */
-PHP_FUNCTION(msession_randstr)
-{
- IFCONNECT_BEGIN
- long val;
- zval **param;
-
- if(ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1,&param) == FAILURE)
- {
- WRONG_PARAM_COUNT;
- }
- convert_to_long_ex(param);
- val = Z_LVAL_PP(param);
-
- PHPExecRequest( REQ_RANDSTR,"", "", "",val);
-
- if(s_reqb->req.stat==REQ_OK)
- {
- char *szval = safe_estrdup(s_reqb->req.datum);
- RETURN_STRING(szval, 0)
- }
- else
- {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", ReqbErr(s_reqb));
- RETURN_NULL();
- }
- IFCONNECT_END
-}
-/* }}} */
-
-/* {{{ proto array msession_find(string name, string value)
- Find all sessions with name and value */
-PHP_FUNCTION(msession_find)
-{
- IFCONNECT_BEGIN
-
- char *szname;
- char *szvalue;
- zval **name;
- zval **value;
-
- if(ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &name, &value) == FAILURE)
- {
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex(name);
- convert_to_string_ex(value);
- szname = Z_STRVAL_PP(name);
- szvalue = Z_STRVAL_PP(value);
-
- PHPExecRequest( REQ_FIND, "", szname, szvalue,0);
-
- if(s_reqb->req.stat==REQ_OK && s_reqb->req.param)
- {
- int i;
- char *str = s_reqb->req.datum;
- array_init(return_value);
-
- for(i=0; i < s_reqb->req.param; i++)
- {
- int cbstr = strlen(str);
- char *data = safe_estrdup(str);
- add_index_string(return_value, i, data, 0);
- str += (cbstr+1);
- }
- }
- else if(s_reqb->req.stat != REQ_OK)
- {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", ReqbErr(s_reqb));
- RETURN_NULL();
- }
- IFCONNECT_END
-}
-/* }}} */
-
-/* {{{ proto array msession_list(void)
- List all sessions */
-PHP_FUNCTION(msession_list)
-{
- IFCONNECT_BEGIN
- PHPExecRequest( REQ_LIST, "", "", "",0);
-
- if(s_reqb->req.stat==REQ_OK && s_reqb->req.param)
- {
- int i;
- char *str = s_reqb->req.datum;
- array_init(return_value);
-
- for(i=0; i < s_reqb->req.param; i++)
- {
- int cbstr = strlen(str);
- char *data = safe_estrdup(str);
- add_index_string(return_value, i, data, 0);
- str += (cbstr+1);
- }
- }
- else if(s_reqb->req.stat != REQ_OK)
- {
- /* May this should be an error? */
- if(s_reqb->req.param != REQE_NOSESSION)
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", ReqbErr(s_reqb));
- RETURN_NULL();
- }
- IFCONNECT_END
-}
-/* }}} */
-
-/* {{{ proto array msession_get_array(string session)
- Get array of msession variables */
-PHP_FUNCTION(msession_get_array)
-{
- IFCONNECT_BEGIN
- char *szsession;
- zval **session;
- if(ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &session) == FAILURE)
- {
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex(session);
- szsession = Z_STRVAL_PP(session);
- PHPExecRequest( REQ_GETALL, szsession, "", "",0);
-
- array_init(return_value);
-
- if(s_reqb->req.stat == REQ_OK)
- {
- int i;
- char *str = s_reqb->req.datum;
- int num = s_reqb->req.param*2;
-
- for(i=0; i < num; i+=2)
- {
- int cbvalue;
- int cbname;
- char *szvalue;
- char *szname;
-
- cbname = strlen(str);
- szname = safe_estrndup(str,cbname);
- str += (cbname+1);
-
- cbvalue = strlen(str);
- szvalue = safe_estrndup(str,cbvalue);
- str += (cbvalue+1);
- add_assoc_string(return_value, szname, szvalue, 0);
- }
- }
- else
- {
- if(s_reqb->req.param != REQE_NOSESSION)
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", ReqbErr(s_reqb));
- RETURN_NULL();
- }
- IFCONNECT_END
-}
-/* }}} */
-
-/* {{{ proto bool msession_set_array(string session, array tuples)
- Set msession variables from an array*/
-PHP_FUNCTION(msession_set_array)
-{
- IFCONNECT_BEGIN
- zval **session;
- zval **tuples;
- HashPosition pos;
- zval **entry;
- char *key;
-#ifdef PHP_4_1
- uint keylen;
-#endif
-#ifdef PHP_4_0
- ulong keylen;
-#endif
- ulong numndx;
- int ndx=0;
- char **pairs;
- HashTable *htTuples;
- int i;
-
- int countpair;
-
- if(ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &session, &tuples) == FAILURE)
- {
- WRONG_PARAM_COUNT;
- }
- htTuples = Z_ARRVAL_PP(tuples);
-
- countpair = zend_hash_num_elements(htTuples);
-
- pairs = (char **)safe_emalloc(sizeof(char *), countpair * 2, 0);
-
- ELOG("have pairs");
-
- /* Initializes pos */
- zend_hash_internal_pointer_reset_ex(htTuples, &pos);
-
- ELOG("reset pointer");
-
- for(i=0; i < countpair; i++)
- {
- if(zend_hash_get_current_data_ex(htTuples, (void **)&entry, &pos) != SUCCESS)
- break;
-
- if(entry)
- {
- char *szentry;
- convert_to_string_ex(entry);
- szentry = Z_STRVAL_PP(entry);
-
- if(zend_hash_get_current_key_ex(htTuples,&key,&keylen,&numndx,0,&pos)== HASH_KEY_IS_STRING)
- {
-#ifdef ERR_DEBUG
-{
- char buffer [256];
- sprintf(buffer, "%s=%s\n", key, szentry);
- ELOG(buffer);
-}
-#endif
- pairs[ndx++] = key;
- pairs[ndx++] = szentry;
- }
- }
- zend_hash_move_forward_ex(htTuples, &pos);
- }
-
- PHPExecRequestMulti(REQ_SETVAL, Z_STRVAL_PP(session), countpair, pairs,0);
-
- if(s_reqb->req.stat != REQ_OK)
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", ReqbErr(s_reqb));
- efree((void *)pairs);
- IFCONNECT_END
-}
-/* }}} */
-
-/* {{{ proto array msession_listvar(string name)
- return associative array of value:session for all sessions with a variable named 'name' */
-PHP_FUNCTION(msession_listvar)
-{
- IFCONNECT_BEGIN
- zval **name;
- if(ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &name) == FAILURE)
- {
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex(name);
- PHPExecRequest( REQ_LISTVAR, "", Z_STRVAL_PP(name), "",0);
-
- array_init(return_value);
-
- if(s_reqb->req.stat == REQ_OK)
- {
- int i;
- char *str = s_reqb->req.datum;
- int num = s_reqb->req.param*2;
-
- for(i=0; i < num; i+=2)
- {
- int cbvalue;
- int cbname;
- char *szvalue;
- char *szname;
-
- cbname= strlen(str);
- szname= safe_estrndup(str,cbname);
- str += (cbname+1);
-
- cbvalue = strlen(str);
- szvalue = safe_estrndup(str,cbvalue);
- str += (cbvalue+1);
- add_assoc_string(return_value, szname, szvalue, 0);
- }
- }
- else
- {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", ReqbErr(s_reqb));
- RETURN_NULL();
- }
- IFCONNECT_END
-}
-/* }}} */
-
-/* {{{ proto int msession_timeout(string session [, int param ])
- Set/get session timeout */
-PHP_FUNCTION(msession_timeout)
-{
- IFCONNECT_BEGIN
- zval **session;
- int ac = ZEND_NUM_ARGS();
- int zstat = FAILURE;
- int timeout = 0;
- if(ac == 1)
- {
- zstat = zend_get_parameters_ex(1, &session);
- }
- else if(ac == 2)
- {
- zval **param;
- zstat = zend_get_parameters_ex(2, &session, &param);
- convert_to_long_ex(param);
- timeout = Z_LVAL_PP(param);
- }
- if(zstat == FAILURE)
- {
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex(session);
- PHPExecRequest( REQ_TIMEOUT, Z_STRVAL_PP(session), "","",timeout);
-
- if(s_reqb->req.stat == REQ_OK)
- {
- RETURN_LONG( s_reqb->req.param);
- }
- else
- {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", ReqbErr(s_reqb));
- RETURN_NULL();
- }
- IFCONNECT_END
-}
-/* }}} */
-
-/* {{{ proto string msession_inc(string session, string name)
- Increment value in session */
-PHP_FUNCTION(msession_inc)
-{
- IFCONNECT_BEGIN
- char *val;
- zval **session;
- zval **name;
-
- if(ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &session, &name) == FAILURE)
- {
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex(session);
- convert_to_string_ex(name);
-
- PHPExecRequest( REQ_INC, Z_STRVAL_PP(session), Z_STRVAL_PP(name),0,0);
-
- if(s_reqb->req.stat==REQ_OK)
- {
- val = safe_estrdup(s_reqb->req.datum);
- RETURN_STRING(val, 0)
- }
- else
- {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", ReqbErr(s_reqb));
- RETURN_FALSE;
- }
- IFCONNECT_END
-}
-/* }}} */
-
-/* {{{ proto string msession_get_data(string session)
- Get data session unstructured data. (PHP sessions use this) */
-PHP_FUNCTION(msession_get_data)
-{
- IFCONNECT_BEGIN
- char *val;
- zval **session;
-
- if(ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &session) == FAILURE)
- {
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex(session);
-
- val = PHPMsessionGetData(Z_STRVAL_PP(session) TSRMLS_CC);
-
- if(val)
- {
- RETURN_STRING(val, 0)
- }
- else
- {
- RETURN_NULL();
- }
- IFCONNECT_END
-}
-/* }}} */
-
-/* {{{ proto bool msession_set_data(string session, string value)
- Set data session unstructured data. (PHP sessions use this) */
-PHP_FUNCTION(msession_set_data)
-{
- IFCONNECT_BEGIN
- zval **session;
- zval **value;
-
- if(ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &session, &value) == FAILURE)
- {
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex(session);
- convert_to_string_ex(value);
-
- if(PHPMsessionSetData(Z_STRVAL_PP(session), Z_STRVAL_PP(value) TSRMLS_CC))
- {
- RETURN_TRUE;
- }
- else
- {
- RETURN_FALSE;
- }
- IFCONNECT_END
-}
-/* }}} */
-
-/* {{{ proto string msession_plugin(string session, string val [, string param ])
- Call the personality plugin escape function */
-PHP_FUNCTION(msession_plugin)
-{
- IFCONNECT_BEGIN
- int ret;
- char *retval;
- zval **session;
- zval **val;
- zval **param=NULL;
-
- if(ZEND_NUM_ARGS() == 3)
- {
- ret = zend_get_parameters_ex(3, &session, &val, &param);
- convert_to_string_ex(param);
- }
- else if(ZEND_NUM_ARGS() == 2)
- {
- ret = zend_get_parameters_ex(2, &session, &val);
- }
- else
- {
- WRONG_PARAM_COUNT;
- }
- if(ret == FAILURE)
- {
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex(session);
- convert_to_string_ex(val);
-
- ret = atoi(Z_STRVAL_PP(val));
-
- PHPExecRequest( REQ_PLUGIN, Z_STRVAL_PP(session), Z_STRVAL_PP(val), param ? Z_STRVAL_PP(param) : "",ret);
-
- if(s_reqb->req.stat==REQ_OK && s_reqb->req.len)
- {
- retval = safe_estrdup(s_reqb->req.datum);
- RETURN_STRING(retval, 0)
- }
- else if(s_reqb->req.stat != REQ_OK)
- {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", ReqbErr(s_reqb));
- RETURN_FALSE;
-
- }
- IFCONNECT_END
-}
-/* }}} */
-#define MAX_EXT_VAL 5
-/* {{{ proto string msession_call(string fn_name, [, string param1 ], ... [,string param4])
- Call the plugin function named fn_name */
-PHP_FUNCTION(msession_call)
-{
- IFCONNECT_BEGIN
- int n;
- int i;
- int ret;
- char *retval;
- zval **val[MAX_EXT_VAL];
- char *strings[MAX_EXT_VAL+1];
-/* zval **param=NULL; */
-
- n = ZEND_NUM_ARGS();
-
- if((n < 1) || (n > MAX_EXT_VAL))
- {
- WRONG_PARAM_COUNT;
- }
-
- ret = zend_get_parameters_ex(ZEND_NUM_ARGS(), &val[0],&val[1],&val[2],&val[3],&val[4]);
-
- if(ret == FAILURE)
- {
- WRONG_PARAM_COUNT;
- }
- for(i=0; i < n; i++)
- {
- convert_to_string_ex(val[i]);
- strings[i] = Z_STRVAL_PP(val[i]);
- }
-
- PHPExecRequestStrings(REQ_CALL, NULL , n, strings);
-
- if(s_reqb->req.stat==REQ_OK && s_reqb->req.len)
- {
- retval = safe_estrdup(s_reqb->req.datum);
- RETURN_STRING(retval, 0)
- }
- else if(s_reqb->req.stat != REQ_OK)
- {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", ReqbErr(s_reqb));
- RETURN_FALSE;
- }
- IFCONNECT_END
-}
-/* }}} */
-/* {{{ proto string msession_exec(string cmdline)
- executes a program on msession system */
-PHP_FUNCTION(msession_exec)
-{
- IFCONNECT_BEGIN
- char *val;
- zval **cmdline;
-
- if(ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &cmdline) == FAILURE)
- {
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex(cmdline);
-
- PHPExecRequest( REQ_EXEC, Z_STRVAL_PP(cmdline), "","",0);
-
- if(s_reqb->req.stat == REQ_OK)
- {
- val = safe_estrdup(s_reqb->req.datum);
- RETURN_STRING(val, 0)
- }
- else
- {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", ReqbErr(s_reqb));
- RETURN_NULL();
- }
- IFCONNECT_END
-}
-/* }}} */
-/* {{{ proto bool msession_ping(void)
- returns non-zero if msession is alive*/
-PHP_FUNCTION(msession_ping)
-{
- IFCONNECT_BEGIN
-
- PHPExecRequest(REQ_PING,"","","", 0);
-
- if(s_reqb->req.stat==REQ_OK)
- {
- RETURN_TRUE;
- }
- else
- {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", ReqbErr(s_reqb));
- RETURN_FALSE;
- }
- IFCONNECT_END
-}
-/* }}} */
-
-#ifdef HAVE_PHP_SESSION
-
-PS_OPEN_FUNC(msession)
-{
- int port;
- int len = strlen(save_path)+1;
- char * path = emalloc(len);
- char * szport;
-
- strcpy(path, save_path);
-
- szport = strchr(path, ':');
-
- if(szport)
- {
- *szport++=0;
- port = atoi(szport);
- }
- else
- {
- port = s_port;
- }
-
- ELOG( "ps_open_msession");
- PS_SET_MOD_DATA((void *)1); /* session.c needs a non-zero here! */
- if (PHPMsessionConnect(path, port)) {
- efree(path);
- return SUCCESS;
- } else {
- efree(path);
- return FAILURE;
- }
-}
-
-PS_CLOSE_FUNC(msession)
-{
- ELOG( "ps_close_msession");
- PHPMsessionDisconnect();
- return SUCCESS;
-}
-
-PS_READ_FUNC(msession)
-{
- ELOG( "ps_read_msession");
- *val = PHPMsessionGetData((char *)key TSRMLS_CC);
- if(*val)
- {
- *vallen = strlen(*val);
- }
- else
- {
- *val = emalloc(1);
- **val=0;
- *vallen = 0;
- }
- return SUCCESS;
-}
-
-PS_WRITE_FUNC(msession)
-{
- ELOG( "ps_write_msession");
- return (PHPMsessionSetData((char *)key, (char *)val TSRMLS_CC)) ? SUCCESS : FAILURE;
-}
-
-PS_DESTROY_FUNC(msession)
-{
- ELOG( "ps_destroy_msession");
- return (PHPMsessionDestroy((char *)key TSRMLS_CC)) ? SUCCESS : FAILURE;
-}
-
-PS_GC_FUNC(msession)
-{
- ELOG( "ps_gc_msession");
- return SUCCESS;
-}
-
-#ifdef HAVE_PHP_SESSION_CREATESID
-PS_CREATE_SID_FUNC(msession)
-{
- if(s_reqb && s_conn)
- {
- ELOG("Should create a new session");
- PHPExecRequest( REQ_UNIQ,"", "", "",SID_LEN);
-
- if(s_reqb->req.stat==REQ_OK)
- {
- ELOG("Reports UNIQ success");
- if(newlen)
- *newlen = SID_LEN;
- return safe_estrdup(s_reqb->req.datum);
- }
- else
- {
- ELOG("Reports that UNIQ failed");
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", ReqbErr(s_reqb));
- }
- }
- ELOG("Yikes, could not get sid from msession 2003");
- return php_session_create_id(mod_data, newlen TSRMLS_CC);
-}
-#endif /* HAVE_PHP_SESSION_CREATESID */
-#endif /* HAVE_PHP_SESSION */
-#endif /* HAVE_MSESSION */
-
diff --git a/ext/msession/msession.php b/ext/msession/msession.php
deleted file mode 100644
index 4eb9d9b6cd..0000000000
--- a/ext/msession/msession.php
+++ /dev/null
@@ -1,10 +0,0 @@
-<?
-$module = 'msession';
-$function = 'confirm_' . $module . '_compiled';
-if (extension_loaded($module)) {
- $str = $function($module);
-} else {
- $str = "Module $module is not compiled into PHP";
-}
-echo "$str\n";
-?>
diff --git a/ext/msession/php_msession.h b/ext/msession/php_msession.h
deleted file mode 100644
index edd2a7bb6d..0000000000
--- a/ext/msession/php_msession.h
+++ /dev/null
@@ -1,109 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | msession 1.0 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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. |
- +----------------------------------------------------------------------+
- | Authors: Mark Woodward <markw@mohawksoft.com> |
- | Portions copyright the PHP group. |
- +----------------------------------------------------------------------+
- */
-
-#ifndef PHP_MSESSION_H
-#define PHP_MSESSION_H
-
-/* You should tweak config.m4 so this symbol (or some else suitable)
- gets defined.
-*/
-#if HAVE_MSESSION
-
-extern zend_module_entry msession_module_entry;
-#define phpext_msession_ptr &msession_module_entry
-
-#ifdef PHP_WIN32
-#define PHP_MSESSION_API __declspec(dllexport)
-#else
-#define PHP_MSESSION_API
-#endif
-
-PHP_MINIT_FUNCTION(msession);
-PHP_MSHUTDOWN_FUNCTION(msession);
-PHP_RINIT_FUNCTION(msession);
-PHP_RSHUTDOWN_FUNCTION(msession);
-PHP_MINFO_FUNCTION(msession);
-
-PHP_FUNCTION(msession_connect);
-PHP_FUNCTION(msession_disconnect);
-PHP_FUNCTION(msession_lock);
-PHP_FUNCTION(msession_unlock);
-PHP_FUNCTION(msession_ctl);
-PHP_FUNCTION(msession_count);
-PHP_FUNCTION(msession_create);
-PHP_FUNCTION(msession_destroy);
-PHP_FUNCTION(msession_exec);
-PHP_FUNCTION(msession_set);
-PHP_FUNCTION(msession_get);
-PHP_FUNCTION(msession_find);
-PHP_FUNCTION(msession_get_array);
-PHP_FUNCTION(msession_set_array);
-PHP_FUNCTION(msession_timeout);
-PHP_FUNCTION(msession_inc);
-PHP_FUNCTION(msession_set_data);
-PHP_FUNCTION(msession_get_data);
-PHP_FUNCTION(msession_listvar);
-PHP_FUNCTION(msession_list);
-PHP_FUNCTION(msession_uniq);
-PHP_FUNCTION(msession_randstr);
-PHP_FUNCTION(msession_plugin);
-PHP_FUNCTION(msession_call);
-PHP_FUNCTION(msession_ping);
-
-/*
- Declare any global variables you may need between the BEGIN
- and END macros here:
-
-ZEND_BEGIN_MODULE_GLOBALS(msession)
- int global_variable;
- void *conn;
- char *host;
-ZEND_END_MODULE_GLOBALS(msession)
-
-*/
-/* In every function that needs to use variables in php_msession_globals,
- do call MSESSIONLS_FETCH(); after declaring other variables used by
- that function, and always refer to them as MSESSIONG(variable).
- You are encouraged to rename these macros something shorter, see
- examples in any other php module directory.
-*/
-
-#ifdef ZTS
-#define MSESSIONG(v) (msession_globals->v)
-#define MSESSIONLS_FETCH() php_msession_globals *msession_globals = ts_resource(msession_globals_id)
-#else
-#define MSESSIONG(v) (msession_globals.v)
-#define MSESSIONLS_FETCH()
-#endif
-
-#else
-
-#define phpext_msession_ptr NULL
-
-#endif
-
-#endif /* PHP_MSESSION_H */
-
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- */
diff --git a/ext/msession/reqclient.h b/ext/msession/reqclient.h
deleted file mode 100644
index 22414fea38..0000000000
--- a/ext/msession/reqclient.h
+++ /dev/null
@@ -1,171 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | msession 1.0 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2001 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. |
- +----------------------------------------------------------------------+
- | Authors: Mark Woodward <markw@mohawksoft.com> |
- | Portions copyright the PHP group. |
- +----------------------------------------------------------------------+
- */
-
-/*
---------------------------------------------------------------------------
- These are definitions are pulled from Phoenix.
- It would probably be easier to maintain one file,
- but some phoenix header files conflict with other
- project header files common to PHP. Besides, this
- allows this header to be PHP license and Phoenix to
- be LGPL with no conflicts.
-
- MAKE NO CHANGES TO THIS FILE IT. MUST REMAIN CONSTANT
- WITH PHOENIX OR IT WILL NOT WORK.
---------------------------------------------------------------------------
-*/
-/* Required to use the new version of Phoenix 1.2 */
-
-#ifndef REQCLIENT_VER
-#define REQCLIENT_VER 030113
-#endif
-
-enum REQ_TYPES
-{
- REQ_ERR,
- REQ_OK,
- REQ_CTL,
- REQ_SETVAL,
- REQ_GETVAL,
- REQ_CREATE,
- REQ_DROP,
- REQ_GETALL,
- REQ_FIND,
- REQ_COUNT,
- REQ_FLUSH,
- REQ_SLOCK,
- REQ_SUNLOCK,
- REQ_TIMEOUT,
- REQ_INC,
- REQ_DATAGET,
- REQ_DATASET,
- REQ_LIST,
- REQ_LISTVAR,
- REQ_UNIQ,
- REQ_RANDSTR,
- REQ_PLUGIN,
- REQ_CALL,
- REQ_SERIALIZE,
- REQ_RESTORE,
- REQ_EXEC,
- REQ_LAST,
- REQ_INTERNAL_BEGIN=1023,
- REQ_INTERNALLAST,
-};
-enum REQ_ERRORS
-{
- REQE_NOERROR=0,
- REQE_NOSESSION,
- REQE_DUPSESSION,
- REQE_NOWLOCK,
- REQE_NOVALUE,
- REQE_LOCKED,
- REQE_NOSEND,
- REQE_NOCONNECT,
- REQE_BADCONN,
- REQE_BADHDR,
- REQE_BADVER,
- REQE_BADLEN,
- REQE_BUFFER,
- REQE_DENIED,
- REQE_NOFN,
- REQE_UNKNOWN
-};
-
-
-#define REQ_POPEN 1024
-#define REQ_PCLOSE 1025
-#define REQ_PING 1026
-
-typedef struct _requestPacket
-{
- int version;
- int stat;
- int len;
- int session;
- int name;
- int value;
- int param;
- char datum[0];
-}REQ;
-
-typedef struct _requestBuf
-{
- unsigned int type; /* Type of packet, dynamic/static */
- unsigned int size; /* size of memory block */
-#if (REQCLIENT_VER >= 030113)
- unsigned int fmt; /* format, binary/ascii */
- unsigned int reserved; /* Just in case */
-#else
-#warning You are using an old Phoenix definition, this will have problems with a newer version
-#endif
- REQ req;
-}REQB;
-
-#define MAX_REQ 16384
-
-#define REQB_STATIC 1
-#define REQB_DYNAMIC 2
-
-#define REQ_STAT_EXIST 0
-#define REQ_STAT_TTL 1
-#define REQ_STAT_AGE 2
-#define REQ_STAT_TLA 3
-#define REQ_STAT_CTIM 4
-#define REQ_STAT_TOUCH 5
-#define REQ_STAT_NOW 6
-
-
-#define STATIC_REQB( len ) \
- char buffer [ len ]; \
- REQB *preq = StaticRequestBuffer(buffer, len);
-
-#if defined (__cplusplus)
-extern "C" {
-#endif
-
-#define SIZEREQB(REQB,SIZE) (((REQB)->size >= (unsigned int) SIZE) ? REQB : SizeRequestBuffer(REQB,SIZE))
-REQB *AllocateRequestBuffer(unsigned size);
-void FreeRequestBuffer(REQB *req);
-REQB *SizeRequestBuffer(REQB *req, unsigned int size);
-REQB *StaticRequestBuffer(char *buffer, unsigned int cb);
-
-int FormatRequest(REQB **buffer, int stat, const char *session, const char *name, const char *value, int param);
-int FormatRequestMulti(REQB **buffer, int stat, char *session, int n, char **pairs, int param);
-int FormatRequestStrings(REQB **ppreq, int stat, char *session, int n, char **strings);
-int DoSingleRequest(char *hostname, int port, REQB **preq);
-void *OpenReqConn(char *hostname, int port);
-void CloseReqConn(void *conn);
-void DeleteReqConn(void *conn);
-unsigned char ReopenReqConn(void *conn);
-int DoRequest(void *conn, REQB **preq);
-char *ReqbErr(REQB *reqb);
-
-#define ASSERT_STAT(PREQ) if(PREQ->stat != REQ_OK) \
- {fprintf(stderr, "Error in Request %s %d %s\n", \
- __FILE__,__LINE__, ReqErr(PREQ->param)); exit(-1); }
-
-#if defined (__cplusplus)
- /* C API but with class definitions */
- int ReadRequestTimeout(REQB **ppreq, MSock *sock, int timeout);
- int ReadRequest(REQB **preq, MSock *sock);
- int WriteRequest(REQB *preq, MSock *sock);
-}
-#endif
-
diff --git a/ext/msql/CREDITS b/ext/msql/CREDITS
deleted file mode 100644
index 31ad918eaf..0000000000
--- a/ext/msql/CREDITS
+++ /dev/null
@@ -1,2 +0,0 @@
-mSQL
-Zeev Suraski
diff --git a/ext/msql/config.m4 b/ext/msql/config.m4
deleted file mode 100644
index 093dfa54e9..0000000000
--- a/ext/msql/config.m4
+++ /dev/null
@@ -1,42 +0,0 @@
-dnl
-dnl $Id$
-dnl
-
-dnl
-dnl Test mSQL version by checking if msql.h has "IDX_TYPE" defined.
-dnl
-AC_DEFUN(PHP_MSQL_VERSION,[
- AC_MSG_CHECKING([mSQL version])
- ac_php_oldcppflags=$CPPFLAGS
- CPPFLAGS="$INCLUDES $CPPFLAGS"
- AC_TRY_COMPILE([#include <sys/types.h>
-#include "msql.h"],[int i = IDX_TYPE],[
- AC_DEFINE(MSQL1,0,[ ])
- MSQL_VERSION="2.0 or newer"
- ],[
- AC_DEFINE(MSQL1,1,[ ])
- MSQL_VERSION=1.0
- ])
- CPPFLAGS=$ac_php_oldcppflags
- AC_MSG_RESULT($MSQL_VERSION)
-])
-
-PHP_ARG_WITH(msql,for mSQL support,
-[ --with-msql[=DIR] Include mSQL support. DIR is the mSQL base
- install directory, defaults to /usr/local/Hughes.])
-
- if test "$PHP_MSQL" != "no"; then
- if test "$PHP_MSQL" = "yes"; then
- MSQL_INCDIR=/usr/local/Hughes/include
- MSQL_LIBDIR=/usr/local/Hughes/lib
- else
- MSQL_INCDIR=$PHP_MSQL/include
- MSQL_LIBDIR=$PHP_MSQL/lib
- fi
- PHP_ADD_LIBRARY_WITH_PATH(msql, $MSQL_LIBDIR, MSQL_SHARED_LIBADD)
- PHP_ADD_INCLUDE($MSQL_INCDIR)
- AC_DEFINE(HAVE_MSQL,1,[ ])
- PHP_SUBST(MSQL_SHARED_LIBADD)
- PHP_NEW_EXTENSION(msql, php_msql.c, $ext_shared)
- PHP_MSQL_VERSION
- fi
diff --git a/ext/msql/config.w32 b/ext/msql/config.w32
deleted file mode 100644
index 902f57d761..0000000000
--- a/ext/msql/config.w32
+++ /dev/null
@@ -1,18 +0,0 @@
-// $Id$
-// vim:ft=javascript
-
-ARG_WITH("msql", "MSQL support", "no");
-
-if (PHP_MSQL != "no") {
-
- if (CHECK_HEADER_ADD_INCLUDE("msql.h", "CFLAGS_MSQL", PHP_MSQL) &&
- CHECK_LIB("msql_dll.lib", "msql", PHP_MSQL)) {
- EXTENSION('msql', 'php_msql.c');
-
- AC_DEFINE('HAVE_MSQL', 1);
-
- } else {
- WARNING("msql not enabled; libraries and headers not found");
- }
-}
-
diff --git a/ext/msql/msql.dsp b/ext/msql/msql.dsp
deleted file mode 100644
index a8f572443b..0000000000
--- a/ext/msql/msql.dsp
+++ /dev/null
@@ -1,107 +0,0 @@
-# Microsoft Developer Studio Project File - Name="msql" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=msql - Win32 Debug_TS
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "msql.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "msql.mak" CFG="msql - Win32 Debug_TS"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "msql - Win32 Release_TS" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "msql - Win32 Debug_TS" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "msql - Win32 Release_TS"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release_TS"
-# PROP BASE Intermediate_Dir "Release_TS"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release_TS"
-# PROP Intermediate_Dir "Release_TS"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "MSQL_EXPORTS" /YX /FD /c
-# ADD CPP /nologo /MD /W3 /GX /O2 /I "..\..\main" /I "..\.." /I "..\..\Zend" /I "..\..\TSRM" /I "..\..\win32" /D "WIN32" /D "COMPILE_DL_MSQL" /D ZTS=1 /D HAVE_MSQL=1 /D ZEND_DEBUG=0 /D "NDEBUG" /D "_WINDOWS" /D "ZEND_WIN32" /D "PHP_WIN32" /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x407 /d "NDEBUG"
-# ADD RSC /l 0x407 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386
-# ADD LINK32 kernel32.lib php5ts.lib msql_dll.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 /out:"..\..\Release_TS/php_msql.dll" /libpath:"..\..\Release_TS" /libpath:"..\..\Release_TS_Inline"
-
-!ELSEIF "$(CFG)" == "msql - Win32 Debug_TS"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug_TS"
-# PROP BASE Intermediate_Dir "Debug_TS"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug_TS"
-# PROP Intermediate_Dir "Debug_TS"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "MSQL_EXPORTS" /YX /FD /GZ /c
-# ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "..\.." /I "..\..\main" /I "..\..\Zend" /I "..\..\TSRM" /D ZEND_DEBUG=1 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D ZTS=1 /D "ZEND_WIN32" /D "PHP_WIN32" /D HAVE_MSQL=1 /D COMPILE_DL_MSQL=1 /YX /FD /GZ /c
-# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x407 /d "_DEBUG"
-# ADD RSC /l 0x407 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 kernel32.lib php5ts_debug.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /out:"..\..\Debug_TS/php_msql.dll" /pdbtype:sept /libpath:"..\..\Debug_TS"
-
-!ENDIF
-
-# Begin Target
-
-# Name "msql - Win32 Release_TS"
-# Name "msql - Win32 Debug_TS"
-# Begin Group "Source Files"
-
-# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
-# Begin Source File
-
-SOURCE=.\php_msql.c
-# End Source File
-# End Group
-# Begin Group "Header Files"
-
-# PROP Default_Filter "h;hpp;hxx;hm;inl"
-# Begin Source File
-
-SOURCE=.\php_msql.h
-# End Source File
-# End Group
-# End Target
-# End Project
diff --git a/ext/msql/php_msql.c b/ext/msql/php_msql.c
deleted file mode 100644
index 93522865b2..0000000000
--- a/ext/msql/php_msql.c
+++ /dev/null
@@ -1,1317 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Zeev Suraski <zeev@zend.com> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "php.h"
-#include "php_msql.h"
-#include "ext/standard/php_standard.h"
-#include "ext/standard/info.h"
-#include "php_globals.h"
-
-#if HAVE_MSQL
-
-#define OS_UNIX 1
-
-#if defined(WIN32) && defined(MSQL1)
-#include <msql1.h>
-#else
-#include <msql.h>
-#endif
-
-static php_msql_globals msql_globals;
-
-#define MSQL_ASSOC 1<<0
-#define MSQL_NUM 1<<1
-#define MSQL_BOTH (MSQL_ASSOC|MSQL_NUM)
-
-/* {{{ msql_functions[]
- */
-function_entry msql_functions[] = {
- PHP_FE(msql_connect, NULL)
- PHP_FE(msql_pconnect, NULL)
- PHP_FE(msql_close, NULL)
- PHP_FE(msql_select_db, NULL)
- PHP_FE(msql_create_db, NULL)
- PHP_FE(msql_drop_db, NULL)
- PHP_FE(msql_query, NULL)
- PHP_FE(msql_db_query, NULL)
- PHP_FE(msql_list_dbs, NULL)
- PHP_FE(msql_list_tables, NULL)
- PHP_FE(msql_list_fields, NULL)
- PHP_FE(msql_error, NULL)
- PHP_FE(msql_result, NULL)
- PHP_FE(msql_num_rows, NULL)
- PHP_FE(msql_num_fields, NULL)
- PHP_FE(msql_fetch_row, NULL)
- PHP_FE(msql_fetch_array, NULL)
- PHP_FE(msql_fetch_object, NULL)
- PHP_FE(msql_data_seek, NULL)
- PHP_FE(msql_fetch_field, NULL)
- PHP_FE(msql_field_seek, NULL)
- PHP_FE(msql_free_result, NULL)
- PHP_FE(msql_field_name, NULL)
- PHP_FE(msql_field_table, NULL)
- PHP_FE(msql_field_len, NULL)
- PHP_FE(msql_field_type, NULL)
- PHP_FE(msql_field_flags, NULL)
-
- PHP_FALIAS(msql_fieldname, msql_field_name, NULL)
- PHP_FALIAS(msql_fieldtable, msql_field_table, NULL)
- PHP_FALIAS(msql_fieldlen, msql_field_len, NULL)
- PHP_FALIAS(msql_fieldtype, msql_field_type, NULL)
- PHP_FALIAS(msql_fieldflags, msql_field_flags, NULL)
-
- PHP_FALIAS(msql_regcase, sql_regcase, NULL)
-
- PHP_FALIAS(msql_affected_rows, msql_affected_rows, NULL)
-
- /* for downwards compatability */
- PHP_FALIAS(msql, msql_db_query, NULL)
- PHP_FALIAS(msql_selectdb, msql_select_db, NULL)
- PHP_FALIAS(msql_createdb, msql_create_db, NULL)
- PHP_FALIAS(msql_dropdb, msql_drop_db, NULL)
- PHP_FALIAS(msql_freeresult, msql_free_result, NULL)
- PHP_FALIAS(msql_numfields, msql_num_fields, NULL)
- PHP_FALIAS(msql_numrows, msql_num_rows, NULL)
- PHP_FALIAS(msql_listdbs, msql_list_dbs, NULL)
- PHP_FALIAS(msql_listtables, msql_list_tables, NULL)
- PHP_FALIAS(msql_listfields, msql_list_fields, NULL)
- PHP_FALIAS(msql_dbname, msql_result, NULL)
- PHP_FALIAS(msql_tablename, msql_result, NULL)
- {NULL, NULL, NULL}
-};
-/* }}} */
-
-zend_module_entry msql_module_entry = {
- STANDARD_MODULE_HEADER,
- "msql", msql_functions, PHP_MINIT(msql), NULL, PHP_RINIT(msql), NULL,
- PHP_MINFO(msql), NO_VERSION_YET, STANDARD_MODULE_PROPERTIES
-};
-
-
-#ifdef COMPILE_DL_MSQL
-ZEND_GET_MODULE(msql)
-#endif
-
-typedef struct {
- m_result *result;
- int af_rows;
-} m_query;
-
-#define MSQL_GET_QUERY(res) \
- ZEND_FETCH_RESOURCE(msql_query, m_query *, &res, -1, "mSQL result", msql_globals.le_query); \
- msql_result = msql_query->result
-
-static void _delete_query(zend_rsrc_list_entry *rsrc TSRMLS_DC)
-{
- m_query *query = (m_query *)rsrc->ptr;
-
- if(query->result) msqlFreeResult(query->result);
- efree(query);
-}
-
-static m_query *php_msql_query_wrapper(m_result *res, int af_rows)
-{
- m_query *query = (m_query *) emalloc(sizeof(m_query));
-
- query->result = res;
- query->af_rows = af_rows;
-
- return query;
-}
-
-static void _close_msql_link(zend_rsrc_list_entry *rsrc TSRMLS_DC)
-{
- int link = (int)rsrc->ptr;
-
- msqlClose(link);
- msql_globals.num_links--;
-}
-
-
-static void _close_msql_plink(zend_rsrc_list_entry *rsrc TSRMLS_DC)
-{
- int link = (int)rsrc->ptr;
-
- msqlClose(link);
- msql_globals.num_persistent--;
- msql_globals.num_links--;
-}
-
-/* {{{ PHP_MINIT_FUNCTION
- */
-PHP_MINIT_FUNCTION(msql)
-{
- if (cfg_get_long("msql.allow_persistent",&msql_globals.allow_persistent)==FAILURE) {
- msql_globals.allow_persistent=1;
- }
- if (cfg_get_long("msql.max_persistent",&msql_globals.max_persistent)==FAILURE) {
- msql_globals.max_persistent=-1;
- }
- if (cfg_get_long("msql.max_links",&msql_globals.max_links)==FAILURE) {
- msql_globals.max_links=-1;
- }
- msql_globals.num_persistent=0;
- msql_globals.le_query = zend_register_list_destructors_ex(_delete_query, NULL, "msql query", module_number);
- msql_globals.le_link = zend_register_list_destructors_ex(_close_msql_link, NULL, "msql link", module_number);
- msql_globals.le_plink = zend_register_list_destructors_ex(NULL, _close_msql_plink, "msql link persistent", module_number);
-
- Z_TYPE(msql_module_entry) = type;
-
- REGISTER_LONG_CONSTANT("MSQL_ASSOC", MSQL_ASSOC, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("MSQL_NUM", MSQL_NUM, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("MSQL_BOTH", MSQL_BOTH, CONST_CS | CONST_PERSISTENT);
-
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ PHP_RINIT_FUNCTION
- */
-PHP_RINIT_FUNCTION(msql)
-{
- msql_globals.default_link=-1;
- msql_globals.num_links = msql_globals.num_persistent;
- msqlErrMsg[0]=0;
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ PHP_MINFO_FUNCTION
- */
-PHP_MINFO_FUNCTION(msql)
-{
- char maxp[32],maxl[32];
-
- if (msql_globals.max_persistent==-1) {
- snprintf(maxp, 31, "%d/unlimited", msql_globals.num_persistent );
- } else {
- snprintf(maxp, 31, "%d/%ld", msql_globals.num_persistent, msql_globals.max_persistent);
- }
- maxp[31]=0;
-
- if (msql_globals.max_links==-1) {
- snprintf(maxl, 15, "%d/unlimited", msql_globals.num_links );
- } else {
- snprintf(maxl, 15, "%d/%ld", msql_globals.num_links, msql_globals.max_links);
- }
- maxl[31]=0;
-
- php_info_print_table_start();
- php_info_print_table_row(2, "MSQL Support", "enabled" );
- php_info_print_table_row(2, "Allow Persistent Links", (msql_globals.allow_persistent?"yes":"no") );
- php_info_print_table_row(2, "Persistent Links", maxp );
- php_info_print_table_row(2, "Total Links", maxl );
- php_info_print_table_end();
-
-}
-/* }}} */
-
-/* {{{ php_msql_do_connect
- */
-static void php_msql_do_connect(INTERNAL_FUNCTION_PARAMETERS,int persistent)
-{
- char *host;
- char *hashed_details;
- int hashed_details_length;
- int msql;
-
- switch(ZEND_NUM_ARGS()) {
- case 0: /* defaults */
- host=NULL;
- hashed_details=estrndup("msql_",5);
- hashed_details_length=4+1;
- break;
- case 1: {
- pval *yyhost;
-
- if (getParameters(ht, 1, &yyhost) == FAILURE) {
- RETURN_FALSE;
- }
- convert_to_string(yyhost);
- host = Z_STRVAL_P(yyhost);
- hashed_details_length = Z_STRLEN_P(yyhost)+4+1;
- hashed_details = emalloc(hashed_details_length+1);
- sprintf(hashed_details,"msql_%s",Z_STRVAL_P(yyhost)); /* SAFE */
- }
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
-
- if (!msql_globals.allow_persistent) {
- persistent=0;
- }
- if (persistent) {
- list_entry *le;
-
- if (msql_globals.max_links!=-1 && msql_globals.num_links>=msql_globals.max_links) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Too many open links (%d)", msql_globals.num_links);
- efree(hashed_details);
- RETURN_FALSE;
- }
- if (msql_globals.max_persistent!=-1 && msql_globals.num_persistent>=msql_globals.max_persistent) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Too many open persistent links (%d)", msql_globals.num_persistent);
- efree(hashed_details);
- RETURN_FALSE;
- }
-
- /* try to find if we already have this link in our persistent list */
- if (zend_hash_find(&EG(persistent_list), hashed_details, hashed_details_length+1, (void **) &le)==FAILURE) { /* we don't */
- list_entry new_le;
-
- /* create the link */
- if ((msql=msqlConnect(host))==-1) {
- efree(hashed_details);
- RETURN_FALSE;
- }
-
- /* hash it up */
- Z_TYPE(new_le) = msql_globals.le_plink;
- new_le.ptr = (void *) msql;
- if (zend_hash_update(&EG(persistent_list), hashed_details, hashed_details_length+1, (void *) &new_le, sizeof(list_entry), NULL)==FAILURE) {
- efree(hashed_details);
- RETURN_FALSE;
- }
- msql_globals.num_persistent++;
- msql_globals.num_links++;
- } else { /* we do */
- if (Z_TYPE_P(le) != msql_globals.le_plink) {
- efree(hashed_details);
- RETURN_FALSE;
- }
-#if 0
- /* ensure that the link did not die */
- /* still have to find a way to do this nicely with mSQL */
- if (msql_stat(le->ptr)==NULL) { /* the link died */
- if (msql_connect(le->ptr,host,user,passwd)==NULL) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "mSQL link lost, unable to reconnect");
- zend_hash_del(&EG(persistent_list),hashed_details,hashed_details_length+1);
- efree(hashed_details);
- RETURN_FALSE;
- }
- }
-#endif
- msql = (int) le->ptr;
- }
- ZEND_REGISTER_RESOURCE(return_value, (void *) msql, msql_globals.le_plink);
- } else {
- list_entry *index_ptr,new_index_ptr;
-
- /* first we check the hash for the hashed_details key. if it exists,
- * it should point us to the right offset where the actual msql link sits.
- * if it doesn't, open a new msql link, add it to the resource list,
- * and add a pointer to it with hashed_details as the key.
- */
- if (zend_hash_find(&EG(regular_list),hashed_details,hashed_details_length+1,(void **) &index_ptr)==SUCCESS) {
- int type,link;
- void *ptr;
-
- if (Z_TYPE_P(index_ptr) != le_index_ptr) {
- RETURN_FALSE;
- }
- link = (int) index_ptr->ptr;
- ptr = zend_list_find(link,&type); /* check if the link is still there */
- if (ptr && (type==msql_globals.le_link || type==msql_globals.le_plink)) {
- Z_LVAL_P(return_value) = msql_globals.default_link = link;
- Z_TYPE_P(return_value) = IS_RESOURCE;
- efree(hashed_details);
- return;
- } else {
- zend_hash_del(&EG(regular_list),hashed_details,hashed_details_length+1);
- }
- }
- if (msql_globals.max_links!=-1 && msql_globals.num_links>=msql_globals.max_links) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Too many open links (%d)",msql_globals.num_links);
- efree(hashed_details);
- RETURN_FALSE;
- }
- if ((msql=msqlConnect(host))==-1) {
- efree(hashed_details);
- RETURN_FALSE;
- }
-
- /* add it to the list */
- ZEND_REGISTER_RESOURCE(return_value, (void *) msql, msql_globals.le_link);
-
- /* add it to the hash */
- new_index_ptr.ptr = (void *) Z_LVAL_P(return_value);
- Z_TYPE(new_index_ptr) = le_index_ptr;
- if (zend_hash_update(&EG(regular_list),hashed_details,hashed_details_length+1,(void *) &new_index_ptr, sizeof(list_entry), NULL)==FAILURE) {
- efree(hashed_details);
- RETURN_FALSE;
- }
- msql_globals.num_links++;
- }
- efree(hashed_details);
- msql_globals.default_link=Z_LVAL_P(return_value);
-}
-/* }}} */
-
-/* {{{ php_msql_get_default_link
- */
-static int php_msql_get_default_link(INTERNAL_FUNCTION_PARAMETERS)
-{
- if (msql_globals.default_link==-1) { /* no link opened yet, implicitly open one */
- ht = 0;
- php_msql_do_connect(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0);
- }
- return msql_globals.default_link;
-}
-/* }}} */
-
-/* {{{ proto int msql_connect([string hostname[:port]] [, string username] [, string password])
- Open a connection to an mSQL Server */
-PHP_FUNCTION(msql_connect)
-{
- php_msql_do_connect(INTERNAL_FUNCTION_PARAM_PASSTHRU,0);
-}
-/* }}} */
-
-/* {{{ proto int msql_pconnect([string hostname[:port]] [, string username] [, string password])
- Open a persistent connection to an mSQL Server */
-PHP_FUNCTION(msql_pconnect)
-{
- php_msql_do_connect(INTERNAL_FUNCTION_PARAM_PASSTHRU,1);
-}
-/* }}} */
-
-/* {{{ proto bool msql_close([resource link_identifier])
- Close an mSQL connection */
-PHP_FUNCTION(msql_close)
-{
- pval *msql_link;
- int id;
- int msql;
-
- switch (ZEND_NUM_ARGS()) {
- case 0:
- id = msql_globals.default_link;
- break;
- case 1:
- if (getParameters(ht, 1, &msql_link)==FAILURE) {
- RETURN_FALSE;
- }
- id = -1;
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
-
- ZEND_FETCH_RESOURCE2(msql, int, &msql_link, id, "mSQL-Link", msql_globals.le_link, msql_globals.le_plink);
-
- if (id==-1) { /* explicit resource number */
- zend_list_delete(Z_RESVAL_P(msql_link));
- }
-
- if (id!=-1
- || (msql_link && Z_RESVAL_P(msql_link)==msql_globals.default_link)) {
- zend_list_delete(msql_globals.default_link);
- msql_globals.default_link = -1;
- }
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto bool msql_select_db(string database_name [, resource link_identifier])
- Select an mSQL database */
-PHP_FUNCTION(msql_select_db)
-{
- pval *db,*msql_link;
- int id;
- int msql;
-
- switch(ZEND_NUM_ARGS()) {
- case 1:
- if (getParameters(ht, 1, &db)==FAILURE) {
- RETURN_FALSE;
- }
- id = php_msql_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU);
- break;
- case 2:
- if (getParameters(ht, 2, &db, &msql_link)==FAILURE) {
- RETURN_FALSE;
- }
- id = -1;
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
-
-
- ZEND_FETCH_RESOURCE2(msql, int, &msql_link, id, "mSQL-Link", msql_globals.le_link, msql_globals.le_plink);
-
- convert_to_string(db);
-
- if (msqlSelectDB(msql,Z_STRVAL_P(db))==-1) {
- RETURN_FALSE;
- } else {
- RETURN_TRUE;
- }
-}
-/* }}} */
-
-/* {{{ proto bool msql_create_db(string database_name [, resource link_identifier])
- Create an mSQL database */
-PHP_FUNCTION(msql_create_db)
-{
- pval *db,*msql_link;
- int id;
- int msql;
-
- switch(ZEND_NUM_ARGS()) {
- case 1:
- if (getParameters(ht, 1, &db)==FAILURE) {
- WRONG_PARAM_COUNT;
- }
- id = php_msql_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU);
- break;
- case 2:
- if (getParameters(ht, 2, &db, &msql_link)==FAILURE) {
- WRONG_PARAM_COUNT;
- }
- id = -1;
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
-
- ZEND_FETCH_RESOURCE2(msql, int, &msql_link, id, "mSQL-Link", msql_globals.le_link, msql_globals.le_plink);
-
- convert_to_string(db);
- if (msqlCreateDB(msql,Z_STRVAL_P(db))<0) {
- RETURN_FALSE;
- } else {
- RETURN_TRUE;
- }
-}
-/* }}} */
-
-/* {{{ proto bool msql_drop_db(string database_name [, resource link_identifier])
- Drop (delete) an mSQL database */
-PHP_FUNCTION(msql_drop_db)
-{
- pval *db,*msql_link;
- int id;
- int msql;
-
- switch(ZEND_NUM_ARGS()) {
- case 1:
- if (getParameters(ht, 1, &db)==FAILURE) {
- WRONG_PARAM_COUNT;
- }
- id = php_msql_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU);
- break;
- case 2:
- if (getParameters(ht, 2, &db, &msql_link)==FAILURE) {
- WRONG_PARAM_COUNT;
- }
- id = -1;
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
-
- ZEND_FETCH_RESOURCE2(msql, int, &msql_link, id, "mSQL-Link", msql_globals.le_link, msql_globals.le_plink);
-
- convert_to_string(db);
- if (msqlDropDB(msql,Z_STRVAL_P(db))<0) {
- RETURN_FALSE;
- } else {
- RETURN_TRUE;
- }
-}
-/* }}} */
-
-/* {{{ proto resource msql_query(string query [, resource link_identifier])
- Send an SQL query to mSQL */
-PHP_FUNCTION(msql_query)
-{
- pval *query,*msql_link;
- int id;
- int msql;
- int af_rows;
-
- switch(ZEND_NUM_ARGS()) {
- case 1:
- if (getParameters(ht, 1, &query)==FAILURE) {
- WRONG_PARAM_COUNT;
- }
- id = msql_globals.default_link;
- break;
- case 2:
- if (getParameters(ht, 2, &query, &msql_link)==FAILURE) {
- WRONG_PARAM_COUNT;
- }
- id = -1;
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
-
- ZEND_FETCH_RESOURCE2(msql, int, &msql_link, id, "mSQL-Link", msql_globals.le_link, msql_globals.le_plink);
-
- convert_to_string(query);
- if ((af_rows = msqlQuery(msql,Z_STRVAL_P(query)))==-1) {
- RETURN_FALSE;
- }
- ZEND_REGISTER_RESOURCE(return_value, php_msql_query_wrapper(msqlStoreResult(), af_rows), msql_globals.le_query);
-}
-/* }}} */
-
-/* {{{ proto resource msql_db_query(string database_name, string query [, resource link_identifier])
- Send an SQL query to mSQL */
-PHP_FUNCTION(msql_db_query)
-{
- pval *db,*query,*msql_link;
- int id;
- int msql;
- int af_rows;
-
- switch(ZEND_NUM_ARGS()) {
- case 2:
- if (getParameters(ht, 2, &db, &query)==FAILURE) {
- RETURN_FALSE;
- }
- id = php_msql_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU);
- break;
- case 3:
- if (getParameters(ht, 3, &db, &query, &msql_link)==FAILURE) {
- RETURN_FALSE;
- }
- id = -1;
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
-
- ZEND_FETCH_RESOURCE2(msql, int, &msql_link, id, "mSQL-Link", msql_globals.le_link, msql_globals.le_plink);
-
- convert_to_string(db);
- if (msqlSelectDB(msql,Z_STRVAL_P(db))==-1) {
- RETURN_FALSE;
- }
-
- convert_to_string(query);
- if ((af_rows = msqlQuery(msql,Z_STRVAL_P(query)))==-1) {
- RETURN_FALSE;
- }
- ZEND_REGISTER_RESOURCE(return_value, php_msql_query_wrapper(msqlStoreResult(), af_rows), msql_globals.le_query);
-}
-/* }}} */
-
-/* {{{ proto resource msql_list_dbs([resource link_identifier])
- List databases available on an mSQL server */
-PHP_FUNCTION(msql_list_dbs)
-{
- pval *msql_link;
- int id;
- int msql;
- m_result *msql_result;
-
- switch(ZEND_NUM_ARGS()) {
- case 0:
- id = php_msql_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU);
- break;
- case 1:
- if (getParameters(ht, 1, &msql_link)==FAILURE) {
- RETURN_FALSE;
- }
- id = -1;
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
-
- ZEND_FETCH_RESOURCE2(msql, int, &msql_link, id, "mSQL-Link", msql_globals.le_link, msql_globals.le_plink);
-
- if ((msql_result=msqlListDBs(msql))==NULL) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to save mSQL query result");
- RETURN_FALSE;
- }
- ZEND_REGISTER_RESOURCE(return_value, php_msql_query_wrapper(msql_result, 0), msql_globals.le_query);
-}
-/* }}} */
-
-/* {{{ proto resource msql_list_tables(string database_name [, resource link_identifier])
- List tables in an mSQL database */
-PHP_FUNCTION(msql_list_tables)
-{
- pval *db,*msql_link;
- int id;
- int msql;
- m_result *msql_result;
-
- switch(ZEND_NUM_ARGS()) {
- case 1:
- if (getParameters(ht, 1, &db)==FAILURE) {
- RETURN_FALSE;
- }
- id = php_msql_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU);
- break;
- case 2:
- if (getParameters(ht, 2, &db, &msql_link)==FAILURE) {
- RETURN_FALSE;
- }
- id = -1;
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
-
- ZEND_FETCH_RESOURCE2(msql, int, &msql_link, id, "mSQL-Link", msql_globals.le_link, msql_globals.le_plink);
-
- convert_to_string(db);
- if (msqlSelectDB(msql,Z_STRVAL_P(db))==-1) {
- RETURN_FALSE;
- }
- if ((msql_result=msqlListTables(msql))==NULL) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to save mSQL query result");
- RETURN_FALSE;
- }
- ZEND_REGISTER_RESOURCE(return_value, php_msql_query_wrapper(msql_result, 0), msql_globals.le_query);
-}
-/* }}} */
-
-/* {{{ proto resource msql_list_fields(string database_name, string table_name [, resource link_identifier])
- List mSQL result fields */
-PHP_FUNCTION(msql_list_fields)
-{
- pval *db,*table,*msql_link;
- int id;
- int msql;
- m_result *msql_result;
-
- switch(ZEND_NUM_ARGS()) {
- case 2:
- if (getParameters(ht, 2, &db, &table)==FAILURE) {
- RETURN_FALSE;
- }
- id = php_msql_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU);
- break;
- case 3:
- if (getParameters(ht, 3, &db, &table, &msql_link)==FAILURE) {
- RETURN_FALSE;
- }
- id = -1;
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
-
- ZEND_FETCH_RESOURCE2(msql, int, &msql_link, id, "mSQL-Link", msql_globals.le_link, msql_globals.le_plink);
-
- convert_to_string(db);
- if (msqlSelectDB(msql,Z_STRVAL_P(db))==-1) {
- RETURN_FALSE;
- }
- convert_to_string(table);
- if ((msql_result=msqlListFields(msql,Z_STRVAL_P(table)))==NULL) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to save mSQL query result");
- RETURN_FALSE;
- }
- ZEND_REGISTER_RESOURCE(return_value, php_msql_query_wrapper(msql_result, 0), msql_globals.le_query);
-}
-/* }}} */
-
-/* {{{ proto string msql_error(void)
- Returns the text of the error message from previous mSQL operation */
-PHP_FUNCTION(msql_error)
-{
- if (ZEND_NUM_ARGS()) {
- WRONG_PARAM_COUNT;
- }
- RETURN_STRING(msqlErrMsg,1);
-}
-/* }}} */
-
-/* {{{ proto string msql_result(int query, int row [, mixed field])
- Get result data */
-PHP_FUNCTION(msql_result)
-{
- pval *result, *row, *field=NULL;
- m_result *msql_result;
- m_query *msql_query;
- m_row sql_row;
- int field_offset=0;
-
- switch (ZEND_NUM_ARGS()) {
- case 2:
- if (getParameters(ht, 2, &result, &row)==FAILURE) {
- RETURN_FALSE;
- }
- break;
- case 3:
- if (getParameters(ht, 3, &result, &row, &field)==FAILURE) {
- RETURN_FALSE;
- }
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
-
- MSQL_GET_QUERY(result);
-
- convert_to_long(row);
- if (Z_LVAL_P(row)<0 || Z_LVAL_P(row)>=msqlNumRows(msql_result)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to jump to row %ld on mSQL query index %ld", Z_LVAL_P(row), Z_LVAL_P(result));
- RETURN_FALSE;
- }
- msqlDataSeek(msql_result,Z_LVAL_P(row));
- if ((sql_row=msqlFetchRow(msql_result))==NULL) { /* shouldn't happen? */
- RETURN_FALSE;
- }
-
- if (field) {
- switch(Z_TYPE_P(field)) {
- case IS_STRING: {
- int i=0;
- m_field *tmp_field;
- char *table_name,*field_name,*tmp;
-
- if ((tmp=strchr(Z_STRVAL_P(field),'.'))) {
- *tmp = 0;
- table_name = estrdup(Z_STRVAL_P(field));
- field_name = estrdup(tmp+1);
- } else {
- table_name = NULL;
- field_name = estrndup(Z_STRVAL_P(field),Z_STRLEN_P(field));
- }
- msqlFieldSeek(msql_result,0);
- while ((tmp_field=msqlFetchField(msql_result))) {
- if ((!table_name || !strcasecmp(tmp_field->table,table_name)) && !strcasecmp(tmp_field->name,field_name)) {
- field_offset = i;
- break;
- }
- i++;
- }
- if (!tmp_field) { /* no match found */
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s%s%s not found in mSQL query index %ld",
- (table_name?table_name:""), (table_name?".":""), field_name, Z_LVAL_P(result));
- efree(field_name);
- if (table_name) {
- efree(table_name);
- }
- RETURN_FALSE;
- }
- efree(field_name);
- if (table_name) {
- efree(table_name);
- }
- }
- break;
- default:
- convert_to_long(field);
- field_offset = Z_LVAL_P(field);
- if (field_offset<0 || field_offset>=msqlNumFields(msql_result)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Bad column offset specified");
- RETURN_FALSE;
- }
- break;
- }
- }
-
- if (sql_row[field_offset]) {
- if (PG(magic_quotes_runtime)) {
- Z_STRVAL_P(return_value) = php_addslashes(sql_row[field_offset],0,&Z_STRLEN_P(return_value),0 TSRMLS_CC);
- } else {
- Z_STRLEN_P(return_value) = (sql_row[field_offset]?strlen(sql_row[field_offset]):0);
- Z_STRVAL_P(return_value) = (char *) safe_estrndup(sql_row[field_offset],Z_STRLEN_P(return_value));
- }
- Z_TYPE_P(return_value) = IS_STRING;
- } else {
- ZVAL_FALSE(return_value);
- }
-}
-/* }}} */
-
-/* {{{ proto int msql_num_rows(resource query)
- Get number of rows in a result */
-PHP_FUNCTION(msql_num_rows)
-{
- pval *result;
- m_result *msql_result;
- m_query *msql_query;
-
- if (ZEND_NUM_ARGS()!=1 || getParameters(ht, 1, &result)==FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- MSQL_GET_QUERY(result);
- RETVAL_LONG(msql_result ? msqlNumRows(msql_result) : 0);
-}
-/* }}} */
-
-/* {{{ proto int msql_num_fields(resource query)
- Get number of fields in a result */
-PHP_FUNCTION(msql_num_fields)
-{
- pval *result;
- m_result *msql_result;
- m_query *msql_query;
-
- if (ZEND_NUM_ARGS()!=1 || getParameters(ht, 1, &result)==FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- MSQL_GET_QUERY(result);
- RETVAL_LONG(msql_result ? msqlNumFields(msql_result) : 0);
-}
-/* }}} */
-
-/* {{{ php_msql_fetch_hash
- */
-static void php_msql_fetch_hash(INTERNAL_FUNCTION_PARAMETERS, int result_type)
-{
- pval *result, *arg2;
- m_result *msql_result;
- m_row msql_row;
- m_field *msql_field;
- m_query *msql_query;
- int num_fields;
- int i;
-
- switch (ZEND_NUM_ARGS()) {
- case 1:
- if (getParameters(ht, 1, &result)==FAILURE) {
- RETURN_FALSE;
- }
- if (!result_type) {
- result_type = MSQL_BOTH;
- }
- break;
- case 2:
- if (getParameters(ht, 2, &result, &arg2)==FAILURE) {
- RETURN_FALSE;
- }
- convert_to_long(arg2);
- result_type = Z_LVAL_P(arg2);
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
-
- MSQL_GET_QUERY(result);
- if (!msql_result || (msql_row=msqlFetchRow(msql_result))==NULL) {
- RETURN_FALSE;
- }
-
- num_fields = msqlNumFields(msql_result);
-
- array_init(return_value);
-
- msqlFieldSeek(msql_result,0);
- for (msql_field=msqlFetchField(msql_result),i=0; msql_field; msql_field=msqlFetchField(msql_result),i++) {
- if (msql_row[i]) {
- char *data;
- int data_len;
- int should_copy;
-
- if (PG(magic_quotes_runtime)) {
- data = php_addslashes(msql_row[i], 0, &data_len, 0 TSRMLS_CC);
- should_copy = 0;
- } else {
- data = msql_row[i];
- data_len = strlen(data);
- should_copy = 1;
- }
-
- if (result_type & MSQL_NUM) {
- add_index_stringl(return_value, i, data, data_len, should_copy);
- should_copy = 1;
- }
-
- if (result_type & MSQL_ASSOC) {
- add_assoc_stringl(return_value, msql_field->name, data, data_len, should_copy);
- }
- } else {
- /*
- add_get_index_stringl(return_value, i, "", 0, (void **) &pval_ptr, 1);
- */
- }
- }
-}
-/* }}} */
-
-/* {{{ proto array msql_fetch_row(resource query)
- Get a result row as an enumerated array */
-PHP_FUNCTION(msql_fetch_row)
-{
- php_msql_fetch_hash(INTERNAL_FUNCTION_PARAM_PASSTHRU, MSQL_NUM);
-}
-/* }}} */
-
-/* {{{ proto object msql_fetch_object(resource query [, resource result_type])
- Fetch a result row as an object */
-PHP_FUNCTION(msql_fetch_object)
-{
- php_msql_fetch_hash(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0);
- if (Z_TYPE_P(return_value)==IS_ARRAY) {
- object_and_properties_init(return_value, ZEND_STANDARD_CLASS_DEF_PTR, Z_ARRVAL_P(return_value));
- }
-}
-/* }}} */
-
-/* {{{ proto array msql_fetch_array(resource query [, int result_type])
- Fetch a result row as an associative array */
-PHP_FUNCTION(msql_fetch_array)
-{
- php_msql_fetch_hash(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0);
-}
-/* }}} */
-
-/* {{{ proto bool msql_data_seek(resource query, int row_number)
- Move internal result pointer */
-PHP_FUNCTION(msql_data_seek)
-{
- pval *result,*offset;
- m_result *msql_result;
- m_query *msql_query;
-
- if (ZEND_NUM_ARGS()!=2 || getParameters(ht, 2, &result, &offset)==FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- MSQL_GET_QUERY(result);
- convert_to_long(offset);
- if (!msql_result ||
- Z_LVAL_P(offset)<0 ||
- Z_LVAL_P(offset)>=msqlNumRows(msql_result)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "%ld is invalid for mSQL query index %ld", Z_LVAL_P(offset), Z_LVAL_P(result));
- RETURN_FALSE;
- }
- msqlDataSeek(msql_result,Z_LVAL_P(offset));
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ php_msql_get_field_name
- */
-static char *php_msql_get_field_name(int field_type)
-{
- switch (field_type) {
-#if MSQL1
- case INT_TYPE:
- return "int";
- break;
- case CHAR_TYPE:
- return "char";
- break;
- case REAL_TYPE:
- return "real";
- break;
- case IDENT_TYPE:
- return "ident";
- break;
- case NULL_TYPE:
- return "null";
- break;
-#else
- case INT_TYPE:
- case UINT_TYPE:
- case CHAR_TYPE:
- case TEXT_TYPE:
- case REAL_TYPE:
- case NULL_TYPE:
- case DATE_TYPE:
- case TIME_TYPE:
- case MONEY_TYPE:
- return msqlTypeNames[field_type];
- break;
-#endif
- default:
- return "unknown";
- break;
- }
-}
-/* }}} */
-
-/* {{{ proto object msql_fetch_field(resource query [, int field_offset])
- Get column information from a result and return as an object */
-PHP_FUNCTION(msql_fetch_field)
-{
- pval *result, *field=NULL;
- m_result *msql_result;
- m_field *msql_field;
- m_query *msql_query;
-
- switch (ZEND_NUM_ARGS()) {
- case 1:
- if (getParameters(ht, 1, &result)==FAILURE) {
- RETURN_FALSE;
- }
- break;
- case 2:
- if (getParameters(ht, 2, &result, &field)==FAILURE) {
- RETURN_FALSE;
- }
- convert_to_long(field);
- default:
- WRONG_PARAM_COUNT;
- }
-
- MSQL_GET_QUERY(result);
-
- if (field) {
- if (Z_LVAL_P(field)<0 || Z_LVAL_P(field)>=msqlNumRows(msql_result)) {
- php_error_docref(NULL TSRMLS_CC, E_NOTICE, "Bad field offset specified");
- RETURN_FALSE;
- }
- msqlFieldSeek(msql_result,Z_LVAL_P(field));
- }
- if (!msql_result || (msql_field=msqlFetchField(msql_result))==NULL) {
- RETURN_FALSE;
- }
- object_init(return_value);
-
- add_property_string(return_value, "name",(msql_field->name?msql_field->name:""), 1);
- add_property_string(return_value, "table",(msql_field->table?msql_field->table:""), 1);
- add_property_long(return_value, "not_null",IS_NOT_NULL(msql_field->flags));
-#if MSQL1
- add_property_long(return_value, "primary_key",(msql_field->flags&PRI_KEY_FLAG?1:0));
-#else
- add_property_long(return_value, "unique",(msql_field->flags&UNIQUE_FLAG?1:0));
-#endif
-
- add_property_string(return_value, "type",php_msql_get_field_name(Z_TYPE_P(msql_field)), 1);
-}
-/* }}} */
-
-/* {{{ proto bool msql_field_seek(resource query, int field_offset)
- Set result pointer to a specific field offset */
-PHP_FUNCTION(msql_field_seek)
-{
- pval *result, *offset;
- m_result *msql_result;
- m_query *msql_query;
-
- if (ZEND_NUM_ARGS()!=2 || getParameters(ht, 2, &result, &offset)==FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- MSQL_GET_QUERY(result);
- convert_to_long(offset);
- if(!msql_result) {
- RETURN_FALSE;
- }
- if (Z_LVAL_P(offset)<0 || Z_LVAL_P(offset)>=msqlNumFields(msql_result)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING,"Field %ld is invalid for mSQL query index %ld",
- Z_LVAL_P(offset),Z_LVAL_P(result));
- RETURN_FALSE;
- }
- msqlFieldSeek(msql_result,Z_LVAL_P(offset));
- RETURN_TRUE;
-}
-/* }}} */
-
-#define PHP_MSQL_FIELD_NAME 1
-#define PHP_MSQL_FIELD_TABLE 2
-#define PHP_MSQL_FIELD_LEN 3
-#define PHP_MSQL_FIELD_TYPE 4
-#define PHP_MSQL_FIELD_FLAGS 5
-
-/* {{{ php_msql_field_info
- */
-static void php_msql_field_info(INTERNAL_FUNCTION_PARAMETERS, int entry_type)
-{
- pval *result, *field;
- m_result *msql_result;
- m_field *msql_field;
- m_query *msql_query;
-
- if (ZEND_NUM_ARGS()!=2 || getParameters(ht, 2, &result, &field)==FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- MSQL_GET_QUERY(result);
- if(!msql_result) {
- RETURN_FALSE;
- }
- convert_to_long(field);
- if (Z_LVAL_P(field)<0 || Z_LVAL_P(field)>=msqlNumFields(msql_result)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING,"Field %ld is invalid for mSQL query index %ld", Z_LVAL_P(field), Z_LVAL_P(result));
- RETURN_FALSE;
- }
- msqlFieldSeek(msql_result,Z_LVAL_P(field));
- if ((msql_field=msqlFetchField(msql_result))==NULL) {
- RETURN_FALSE;
- }
-
- switch (entry_type) {
- case PHP_MSQL_FIELD_NAME:
- Z_STRLEN_P(return_value) = strlen(msql_field->name);
- Z_STRVAL_P(return_value) = estrndup(msql_field->name,Z_STRLEN_P(return_value));
- Z_TYPE_P(return_value) = IS_STRING;
- break;
- case PHP_MSQL_FIELD_TABLE:
- Z_STRLEN_P(return_value) = strlen(msql_field->table);
- Z_STRVAL_P(return_value) = estrndup(msql_field->table,Z_STRLEN_P(return_value));
- Z_TYPE_P(return_value) = IS_STRING;
- break;
- case PHP_MSQL_FIELD_LEN:
- Z_LVAL_P(return_value) = msql_field->length;
- Z_TYPE_P(return_value) = IS_LONG;
- break;
- case PHP_MSQL_FIELD_TYPE:
- Z_STRVAL_P(return_value) = estrdup(php_msql_get_field_name(Z_TYPE_P(msql_field)));
- Z_STRLEN_P(return_value) = strlen(Z_STRVAL_P(return_value));
- Z_TYPE_P(return_value) = IS_STRING;
- break;
- case PHP_MSQL_FIELD_FLAGS:
-#if MSQL1
- if ((msql_field->flags&NOT_NULL_FLAG) && (msql_field->flags&PRI_KEY_FLAG)) {
- Z_STRVAL_P(return_value) = estrndup("primary key not null",20);
- Z_STRLEN_P(return_value) = 20;
- Z_TYPE_P(return_value) = IS_STRING;
- } else if (msql_field->flags&NOT_NULL_FLAG) {
- Z_STRVAL_P(return_value) = estrndup("not null",8);
- Z_STRLEN_P(return_value) = 8;
- Z_TYPE_P(return_value) = IS_STRING;
- } else if (msql_field->flags&PRI_KEY_FLAG) {
- Z_STRVAL_P(return_value) = estrndup("primary key",11);
- Z_STRLEN_P(return_value) = 11;
- Z_TYPE_P(return_value) = IS_STRING;
- } else {
- ZVAL_FALSE(return_value);
- }
-#else
- if ((msql_field->flags&NOT_NULL_FLAG) && (msql_field->flags&UNIQUE_FLAG)) {
- Z_STRVAL_P(return_value) = estrndup("unique not null",15);
- Z_STRLEN_P(return_value) = 15;
- Z_TYPE_P(return_value) = IS_STRING;
- } else if (msql_field->flags&NOT_NULL_FLAG) {
- Z_STRVAL_P(return_value) = estrndup("not null",8);
- Z_STRLEN_P(return_value) = 8;
- Z_TYPE_P(return_value) = IS_STRING;
- } else if (msql_field->flags&UNIQUE_FLAG) {
- Z_STRVAL_P(return_value) = estrndup("unique",6);
- Z_STRLEN_P(return_value) = 6;
- Z_TYPE_P(return_value) = IS_STRING;
- } else {
- ZVAL_FALSE(return_value);
- }
-#endif
- break;
- default:
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-/* {{{ proto string msql_field_name(resource query, int field_index)
- Get the name of the specified field in a result */
-PHP_FUNCTION(msql_field_name)
-{
- php_msql_field_info(INTERNAL_FUNCTION_PARAM_PASSTHRU,PHP_MSQL_FIELD_NAME);
-}
-/* }}} */
-
-/* {{{ proto string msql_field_table(resource query, int field_offset)
- Get name of the table the specified field is in */
-PHP_FUNCTION(msql_field_table)
-{
- php_msql_field_info(INTERNAL_FUNCTION_PARAM_PASSTHRU,PHP_MSQL_FIELD_TABLE);
-}
-/* }}} */
-
-/* {{{ proto int msql_field_len(int query, int field_offet)
- Returns the length of the specified field */
-PHP_FUNCTION(msql_field_len)
-{
- php_msql_field_info(INTERNAL_FUNCTION_PARAM_PASSTHRU,PHP_MSQL_FIELD_LEN);
-}
-/* }}} */
-
-/* {{{ proto string msql_field_type(resource query, int field_offset)
- Get the type of the specified field in a result */
-PHP_FUNCTION(msql_field_type)
-{
- php_msql_field_info(INTERNAL_FUNCTION_PARAM_PASSTHRU,PHP_MSQL_FIELD_TYPE);
-}
-/* }}} */
-
-/* {{{ proto string msql_field_flags(resource query, int field_offset)
- Get the flags associated with the specified field in a result */
-PHP_FUNCTION(msql_field_flags)
-{
- php_msql_field_info(INTERNAL_FUNCTION_PARAM_PASSTHRU,PHP_MSQL_FIELD_FLAGS);
-}
-/* }}} */
-
-/* {{{ proto bool msql_free_result(resource query)
- Free result memory */
-PHP_FUNCTION(msql_free_result)
-{
- pval *result;
- m_result *msql_result;
- m_query *msql_query;
-
- if (ZEND_NUM_ARGS()!=1 || getParameters(ht, 1, &result)==FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- MSQL_GET_QUERY(result);
- zend_list_delete(Z_LVAL_P(result));
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto int msql_affected_rows(resource query)
- Return number of affected rows */
-PHP_FUNCTION(msql_affected_rows)
-{
- pval *result;
- m_result *msql_result;
- m_query *msql_query;
-
- if(ZEND_NUM_ARGS() != 1 || getParameters(ht, 1, &result) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- MSQL_GET_QUERY(result);
- RETVAL_LONG(msql_query->af_rows);
-}
-/* }}} */
-
-#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/msql/php_msql.h b/ext/msql/php_msql.h
deleted file mode 100644
index ea2f0f1b6c..0000000000
--- a/ext/msql/php_msql.h
+++ /dev/null
@@ -1,82 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Zeev Suraski <zeev@zend.com> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifndef PHP_MSQL_H
-#define PHP_MSQL_H
-
-#if HAVE_MSQL
-
-extern zend_module_entry msql_module_entry;
-#define msql_module_ptr &msql_module_entry
-
-/* mSQL functions */
-PHP_MINIT_FUNCTION(msql);
-PHP_RINIT_FUNCTION(msql);
-PHP_MSHUTDOWN_FUNCTION(msql);
-PHP_MINFO_FUNCTION(msql);
-
-PHP_FUNCTION(msql_connect);
-PHP_FUNCTION(msql_pconnect);
-PHP_FUNCTION(msql_close);
-PHP_FUNCTION(msql_select_db);
-PHP_FUNCTION(msql_create_db);
-PHP_FUNCTION(msql_drop_db);
-PHP_FUNCTION(msql_list_dbs);
-PHP_FUNCTION(msql_list_tables);
-PHP_FUNCTION(msql_list_fields);
-PHP_FUNCTION(msql_error);
-PHP_FUNCTION(msql_affected_rows);
-PHP_FUNCTION(msql_query);
-PHP_FUNCTION(msql_db_query);
-PHP_FUNCTION(msql_result);
-PHP_FUNCTION(msql_num_rows);
-PHP_FUNCTION(msql_num_fields);
-PHP_FUNCTION(msql_fetch_row);
-PHP_FUNCTION(msql_data_seek);
-PHP_FUNCTION(msql_fetch_field);
-PHP_FUNCTION(msql_field_seek);
-PHP_FUNCTION(msql_free_result);
-PHP_FUNCTION(msql_field_name);
-PHP_FUNCTION(msql_field_table);
-PHP_FUNCTION(msql_field_len);
-PHP_FUNCTION(msql_field_type);
-PHP_FUNCTION(msql_field_flags);
-PHP_FUNCTION(msql_fetch_array);
-PHP_FUNCTION(msql_fetch_object);
-
-typedef struct {
- long default_link;
- long num_links,num_persistent;
- long max_links,max_persistent;
- long allow_persistent;
- int le_query;
- int le_link;
- int le_plink;
-} php_msql_globals;
-
-#else
-
-#define msql_module_ptr NULL
-
-#endif
-
-#define phpext_msql_ptr msql_module_ptr
-
-#endif /* PHP_MSQL_H */
diff --git a/ext/mssql/CREDITS b/ext/mssql/CREDITS
deleted file mode 100644
index 548684afca..0000000000
--- a/ext/mssql/CREDITS
+++ /dev/null
@@ -1,2 +0,0 @@
-MS SQL
-Frank M. Kromann
diff --git a/ext/mssql/config.m4 b/ext/mssql/config.m4
deleted file mode 100644
index 7007b1b94c..0000000000
--- a/ext/mssql/config.m4
+++ /dev/null
@@ -1,52 +0,0 @@
-dnl
-dnl $Id$
-dnl
-
-PHP_ARG_WITH(mssql,for MSSQL support via FreeTDS,
-[ --with-mssql[=DIR] Include MSSQL-DB support. DIR is the FreeTDS home
- directory, defaults to /usr/local/freetds.])
-
-
-if test "$PHP_MSSQL" != "no"; then
-
- FREETDS_INSTALLATION_DIR=""
- if test "$PHP_MSSQL" = "yes"; then
-
- for i in /usr/local /usr; do
- if test -f $i/include/tds.h; then
- FREETDS_INSTALLATION_DIR=$i
- break
- fi
- done
-
- if test -z "$FREETDS_INSTALLATION_DIR"; then
- AC_MSG_ERROR(Cannot find FreeTDS in known installation directories)
- fi
-
- elif test "$PHP_MSSQL" != "no"; then
-
- if test -f $PHP_MSSQL/include/tds.h; then
- FREETDS_INSTALLATION_DIR=$PHP_MSSQL
- else
- AC_MSG_ERROR(Directory $PHP_MSSQL is not a FreeTDS installation directory)
- fi
- fi
-
- if test ! -r "$FREETDS_INSTALLATION_DIR/lib/libtds.a"; then
- AC_MSG_ERROR(Could not find $FREETDS_INSTALLATION_DIR/lib/libtds.a)
- fi
-
- MSSQL_INCDIR=$FREETDS_INSTALLATION_DIR/include
- MSSQL_LIBDIR=$FREETDS_INSTALLATION_DIR/lib
-
- PHP_ADD_INCLUDE($MSSQL_INCDIR)
- PHP_ADD_LIBRARY_WITH_PATH(sybdb, $MSSQL_LIBDIR, MSSQL_SHARED_LIBADD)
- PHP_NEW_EXTENSION(mssql, php_mssql.c, $ext_shared)
- AC_CHECK_LIB(dnet_stub, dnet_addr,
- [ PHP_ADD_LIBRARY_WITH_PATH(dnet_stub,,MSSQL_SHARED_LIBADD)
- AC_DEFINE(HAVE_LIBDNET_STUB,1,[ ])
- ])
- AC_DEFINE(HAVE_MSSQL,1,[ ])
- AC_DEFINE(HAVE_FREETDS,1,[ ])
- PHP_SUBST(MSSQL_SHARED_LIBADD)
-fi
diff --git a/ext/mssql/config.w32 b/ext/mssql/config.w32
deleted file mode 100644
index 8d3d4e54d1..0000000000
--- a/ext/mssql/config.w32
+++ /dev/null
@@ -1,15 +0,0 @@
-// $Id$
-// vim:ft=javascript
-
-ARG_WITH("mssql", "mssql support", "no");
-
-if (PHP_MSSQL == "yes") {
- if (CHECK_LIB("ntwdblib.lib", "mssql", "\\MSSQL7\\DevTools\\Lib") &&
- CHECK_HEADER_ADD_INCLUDE("sqlfront.h", "CFLAGS_MSSQL")) {
- EXTENSION("mssql", "php_mssql.c");
- ADD_FLAG("CFLAGS_MSSQL", "/D DBNTWIN32=1 /D MSSQL70=1");
- AC_DEFINE('HAVE_MSSQL', 1, 'Have MSSQL support');
- } else {
- WARNING("mssql not enabled; libraries and headers not found");
- }
-}
diff --git a/ext/mssql/mssql.dsp b/ext/mssql/mssql.dsp
deleted file mode 100644
index 43294280dd..0000000000
--- a/ext/mssql/mssql.dsp
+++ /dev/null
@@ -1,117 +0,0 @@
-# Microsoft Developer Studio Project File - Name="mssql" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=mssql - Win32 Release_TS
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "mssql.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "mssql.mak" CFG="mssql - Win32 Release_TS"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "mssql - Win32 Release_TS" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "mssql - Win32 Debug_TS" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "mssql - Win32 Release_TS"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release_TS"
-# PROP BASE Intermediate_Dir "Release_TS"
-# PROP BASE Ignore_Export_Lib 0
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release_TS"
-# PROP Intermediate_Dir "Release_TS"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MD /W3 /GX /O2 /I "..\.." /I "..\..\main" /I "..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\TSRM" /D MSSQL70=1 /D ZEND_DEBUG=0 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "MSSQL_EXPORTS" /D "COMPILE_DL_MSSQL" /D "DBNTWIN32" /D ZTS=1 /D "ZEND_WIN32" /D "PHP_WIN32" /D HAVE_MSSQL=1 /YX /FD /c
-# ADD CPP /nologo /MD /W3 /GX /O2 /I "..\.." /I "..\..\main" /I "..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\TSRM" /D MSSQL70=1 /D ZEND_DEBUG=0 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "MSSQL_EXPORTS" /D "COMPILE_DL_MSSQL" /D "DBNTWIN32" /D ZTS=1 /D "ZEND_WIN32" /D "PHP_WIN32" /D HAVE_MSSQL=1 /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x406 /d "NDEBUG"
-# ADD RSC /l 0x406 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib php5ts.lib ntwdblib.lib /nologo /dll /machine:I386 /out:"..\..\Release_TS/php_mssql70.dll" /libpath:"..\..\Release_TS" /libpath:"..\..\..\php_build\mssql-70\lib" /libpath:"..\..\Release_TS_Inline"
-# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib php5ts.lib ntwdblib.lib /nologo /dll /machine:I386 /out:"..\..\Release_TS/php_mssql.dll" /libpath:"..\..\Release_TS" /libpath:"..\..\..\php_build\mssql-70\lib" /libpath:"..\..\Release_TS_Inline"
-
-!ELSEIF "$(CFG)" == "mssql - Win32 Debug_TS"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Debug_TS"
-# PROP BASE Intermediate_Dir "Debug_TS"
-# PROP BASE Ignore_Export_Lib 0
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Debug_TS"
-# PROP Intermediate_Dir "Debug_TS"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MDd /W3 /GX /O2 /I "..\.." /I "..\..\main" /I "..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\TSRM" /D MSSQL70=1 /D ZEND_DEBUG=1 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "MSSQL_EXPORTS" /D "COMPILE_DL_MSSQL" /D "DBNTWIN32" /D ZTS=1 /D "ZEND_WIN32" /D "PHP_WIN32" /D HAVE_MSSQL=1 /YX /FD /c
-# ADD CPP /nologo /MDd /W3 /GX /ZI /Od /I "..\.." /I "..\..\main" /I "..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\TSRM" /D MSSQL70=1 /D ZEND_DEBUG=1 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "MSSQL_EXPORTS" /D "COMPILE_DL_MSSQL" /D "DBNTWIN32" /D ZTS=1 /D "ZEND_WIN32" /D "PHP_WIN32" /D HAVE_MSSQL=1 /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x406 /d "NDEBUG"
-# ADD RSC /l 0x406 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib php5ts_debug.lib ntwdblib.lib /nologo /dll /machine:I386 /out:"..\..\Debug_TS/php_mssql70.dll" /libpath:"..\..\Debug_TS" /libpath:"..\..\..\php_build\mssql-70\lib"
-# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib php5ts_debug.lib ntwdblib.lib /nologo /dll /incremental:yes /debug /machine:I386 /out:"..\..\Debug_TS/php_mssql.dll" /pdbtype:sept /libpath:"..\..\Debug_TS" /libpath:"..\..\..\php_build\mssql-70\lib"
-
-!ENDIF
-
-# Begin Target
-
-# Name "mssql - Win32 Release_TS"
-# Name "mssql - Win32 Debug_TS"
-# Begin Group "Source Files"
-
-# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
-# Begin Source File
-
-SOURCE=.\php_mssql.c
-# End Source File
-# End Group
-# Begin Group "Header Files"
-
-# PROP Default_Filter "h;hpp;hxx;hm;inl"
-# Begin Source File
-
-SOURCE=.\php_mssql.h
-# End Source File
-# End Group
-# Begin Group "Resource Files"
-
-# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
-# End Group
-# Begin Source File
-
-SOURCE=.\mssql_win32_howto.txt
-# End Source File
-# End Target
-# End Project
diff --git a/ext/mssql/mssql_win32_howto.txt b/ext/mssql/mssql_win32_howto.txt
deleted file mode 100644
index d42bc2555b..0000000000
--- a/ext/mssql/mssql_win32_howto.txt
+++ /dev/null
@@ -1,35 +0,0 @@
-Rules for building MSSQL
-------------------------
-
-The MSSQL project contains 2 configurations.
-
-The files needed for each configurations are:
-
-Win32 Release_TS
-Win32 Debug_TS
-
- php_build\mssql-70\include\sqldb.h
- php_build\mssql-70\include\sqlfront.h
- php_build\mssql-70\lib\ntwdblib.lib
-
-php_build is a directory at the same level as php5.
-
-Start Visual Studio, load php_modules.dsw, select the MSSQL projects,
-configuration and build it.
-
-This module requires ntwdblib.dll and one or more of the following dll's
-
-dbmsadsn.dll
-dbmsrpcn.dll
-dbmsshrn.dll
-dbmssocn.dll for tcp/ip connections
-dbmsspxn.dll for ipx/spx connections
-dbmsvinn.dll
-dbnmpntw.dll for netbios connections
-
-All these files are installed while installing MS SQL Server. If the SQL Server
-is installed on another maschine you need to install the client tools on
-the web server as well.
-
-
- \ No newline at end of file
diff --git a/ext/mssql/php_mssql.c b/ext/mssql/php_mssql.c
deleted file mode 100644
index 9f8dd183b3..0000000000
--- a/ext/mssql/php_mssql.c
+++ /dev/null
@@ -1,2258 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Frank M. Kromann <frank@kromann.info> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-#ifdef COMPILE_DL_MSSQL
-#define HAVE_MSSQL 1
-#endif
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "php.h"
-#include "php_globals.h"
-#include "ext/standard/php_standard.h"
-#include "ext/standard/info.h"
-#include "php_mssql.h"
-#include "php_ini.h"
-
-#if HAVE_MSSQL
-#define SAFE_STRING(s) ((s)?(s):"")
-
-#define MSSQL_ASSOC 1<<0
-#define MSSQL_NUM 1<<1
-#define MSSQL_BOTH (MSSQL_ASSOC|MSSQL_NUM)
-
-static int le_result, le_link, le_plink, le_statement;
-
-static void php_mssql_get_column_content_with_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);
-
-static void _mssql_bind_hash_dtor(void *data);
-
-function_entry mssql_functions[] = {
- PHP_FE(mssql_connect, NULL)
- PHP_FE(mssql_pconnect, NULL)
- PHP_FE(mssql_close, NULL)
- PHP_FE(mssql_select_db, NULL)
- PHP_FE(mssql_query, NULL)
- PHP_FE(mssql_fetch_batch, NULL)
- PHP_FE(mssql_rows_affected, NULL)
- PHP_FE(mssql_free_result, NULL)
- PHP_FE(mssql_get_last_message, NULL)
- PHP_FE(mssql_num_rows, NULL)
- PHP_FE(mssql_num_fields, NULL)
- PHP_FE(mssql_fetch_field, NULL)
- PHP_FE(mssql_fetch_row, NULL)
- PHP_FE(mssql_fetch_array, NULL)
- PHP_FE(mssql_fetch_assoc, NULL)
- PHP_FE(mssql_fetch_object, NULL)
- PHP_FE(mssql_field_length, NULL)
- PHP_FE(mssql_field_name, NULL)
- PHP_FE(mssql_field_type, NULL)
- PHP_FE(mssql_data_seek, NULL)
- PHP_FE(mssql_field_seek, NULL)
- PHP_FE(mssql_result, NULL)
- PHP_FE(mssql_next_result, NULL)
- PHP_FE(mssql_min_error_severity, NULL)
- PHP_FE(mssql_min_message_severity, NULL)
- PHP_FE(mssql_init, NULL)
- PHP_FE(mssql_bind, third_arg_force_ref)
- PHP_FE(mssql_execute, NULL)
- PHP_FE(mssql_free_statement, NULL)
- PHP_FE(mssql_guid_string, NULL)
- {NULL, NULL, NULL}
-};
-
-zend_module_entry mssql_module_entry =
-{
- STANDARD_MODULE_HEADER,
- "mssql",
- mssql_functions,
- PHP_MINIT(mssql),
- PHP_MSHUTDOWN(mssql),
- PHP_RINIT(mssql),
- PHP_RSHUTDOWN(mssql),
- PHP_MINFO(mssql),
- NO_VERSION_YET,
- STANDARD_MODULE_PROPERTIES
-};
-
-ZEND_DECLARE_MODULE_GLOBALS(mssql)
-
-#ifdef COMPILE_DL_MSSQL
-ZEND_GET_MODULE(mssql)
-# ifdef PHP_WIN32
-# include "zend_arg_defs.c"
-# endif
-#endif
-
-#define CHECK_LINK(link) { if (link==-1) { php_error_docref(NULL TSRMLS_CC, E_WARNING, "A link to the server could not be established"); RETURN_FALSE; } }
-
-static PHP_INI_DISP(display_text_size)
-{
- 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 (atoi(value) == -1) {
- PUTS("Server default");
- } else {
- php_printf("%s", value);
- }
-}
-
-PHP_INI_BEGIN()
- STD_PHP_INI_BOOLEAN("mssql.allow_persistent", "1", PHP_INI_SYSTEM, OnUpdateBool, allow_persistent, zend_mssql_globals, mssql_globals)
- STD_PHP_INI_ENTRY_EX("mssql.max_persistent", "-1", PHP_INI_SYSTEM, OnUpdateLong, max_persistent, zend_mssql_globals, mssql_globals, display_link_numbers)
- STD_PHP_INI_ENTRY_EX("mssql.max_links", "-1", PHP_INI_SYSTEM, OnUpdateLong, max_links, zend_mssql_globals, mssql_globals, display_link_numbers)
- STD_PHP_INI_ENTRY_EX("mssql.min_error_severity", "10", PHP_INI_ALL, OnUpdateLong, cfg_min_error_severity, zend_mssql_globals, mssql_globals, display_link_numbers)
- STD_PHP_INI_ENTRY_EX("mssql.min_message_severity", "10", PHP_INI_ALL, OnUpdateLong, cfg_min_message_severity, zend_mssql_globals, mssql_globals, display_link_numbers)
- STD_PHP_INI_BOOLEAN("mssql.compatability_mode", "0", PHP_INI_ALL, OnUpdateBool, compatability_mode, zend_mssql_globals, mssql_globals)
- STD_PHP_INI_ENTRY_EX("mssql.connect_timeout", "5", PHP_INI_ALL, OnUpdateLong, connect_timeout, zend_mssql_globals, mssql_globals, display_link_numbers)
- STD_PHP_INI_ENTRY_EX("mssql.timeout", "60", PHP_INI_ALL, OnUpdateLong, timeout, zend_mssql_globals, mssql_globals, display_link_numbers)
- STD_PHP_INI_ENTRY_EX("mssql.textsize", "-1", PHP_INI_ALL, OnUpdateLong, textsize, zend_mssql_globals, mssql_globals, display_text_size)
- STD_PHP_INI_ENTRY_EX("mssql.textlimit", "-1", PHP_INI_ALL, OnUpdateLong, textlimit, zend_mssql_globals, mssql_globals, display_text_size)
- STD_PHP_INI_ENTRY_EX("mssql.batchsize", "0", PHP_INI_ALL, OnUpdateLong, batchsize, zend_mssql_globals, mssql_globals, display_link_numbers)
- STD_PHP_INI_BOOLEAN("mssql.datetimeconvert", "1", PHP_INI_ALL, OnUpdateBool, datetimeconvert, zend_mssql_globals, mssql_globals)
- STD_PHP_INI_BOOLEAN("mssql.secure_connection", "0", PHP_INI_SYSTEM, OnUpdateBool, secure_connection, zend_mssql_globals, mssql_globals)
- STD_PHP_INI_ENTRY_EX("mssql.max_procs", "25", PHP_INI_ALL, OnUpdateLong, max_procs, zend_mssql_globals, mssql_globals, display_link_numbers)
-PHP_INI_END()
-
-/* error handler */
-static int php_mssql_error_handler(DBPROCESS *dbproc, int severity, int dberr, int oserr, char *dberrstr, char *oserrstr)
-{
- TSRMLS_FETCH();
-
- if (severity >= MS_SQL_G(min_error_severity)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s (severity %d)", dberrstr, severity);
- }
- return INT_CANCEL;
-}
-
-/* message handler */
-static int php_mssql_message_handler(DBPROCESS *dbproc, DBINT msgno,int msgstate, int severity,char *msgtext,char *srvname, char *procname,DBUSMALLINT line)
-{
- TSRMLS_FETCH();
-
- if (severity >= MS_SQL_G(min_message_severity)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "message: %s (severity %d)", msgtext, severity);
- }
- if (MS_SQL_G(server_message)) {
- STR_FREE(MS_SQL_G(server_message));
- MS_SQL_G(server_message) = NULL;
- }
- MS_SQL_G(server_message) = estrdup(msgtext);
- return 0;
-}
-
-static int _clean_invalid_results(list_entry *le TSRMLS_DC)
-{
- if (Z_TYPE_P(le) == le_result) {
- mssql_link *mssql_ptr = ((mssql_result *) le->ptr)->mssql_ptr;
-
- if (!mssql_ptr->valid) {
- return 1;
- }
- }
- return 0;
-}
-
-static void _free_result(mssql_result *result, int free_fields)
-{
- int i,j;
-
- if (result->data) {
- for (i=0; i<result->num_rows; i++) {
- if (result->data[i]) {
- for (j=0; j<result->num_fields; j++) {
- zval_dtor(&result->data[i][j]);
- }
- efree(result->data[i]);
- }
- }
- efree(result->data);
- result->data = NULL;
- result->blocks_initialized = 0;
- }
-
- if (free_fields && result->fields) {
- for (i=0; i<result->num_fields; i++) {
- STR_FREE(result->fields[i].name);
- STR_FREE(result->fields[i].column_source);
- }
- efree(result->fields);
- }
-}
-
-static void _free_mssql_statement(zend_rsrc_list_entry *rsrc TSRMLS_DC)
-{
- mssql_statement *statement = (mssql_statement *)rsrc->ptr;
-
- if (statement->binds) {
- zend_hash_destroy(statement->binds);
- efree(statement->binds);
- }
-
- efree(statement);
-}
-
-static void _free_mssql_result(zend_rsrc_list_entry *rsrc TSRMLS_DC)
-{
- mssql_result *result = (mssql_result *)rsrc->ptr;
-
- _free_result(result, 1);
- efree(result);
-}
-
-static void php_mssql_set_default_link(int id TSRMLS_DC)
-{
- if (MS_SQL_G(default_link)!=-1) {
- zend_list_delete(MS_SQL_G(default_link));
- }
- MS_SQL_G(default_link) = id;
- zend_list_addref(id);
-}
-
-static void _close_mssql_link(zend_rsrc_list_entry *rsrc TSRMLS_DC)
-{
- mssql_link *mssql_ptr = (mssql_link *)rsrc->ptr;
-
- mssql_ptr->valid = 0;
- zend_hash_apply(&EG(regular_list),(apply_func_t) _clean_invalid_results TSRMLS_CC);
- dbclose(mssql_ptr->link);
- dbfreelogin(mssql_ptr->login);
- efree(mssql_ptr);
- MS_SQL_G(num_links)--;
-}
-
-
-static void _close_mssql_plink(zend_rsrc_list_entry *rsrc TSRMLS_DC)
-{
- mssql_link *mssql_ptr = (mssql_link *)rsrc->ptr;
-
- dbclose(mssql_ptr->link);
- dbfreelogin(mssql_ptr->login);
- free(mssql_ptr);
- MS_SQL_G(num_persistent)--;
- MS_SQL_G(num_links)--;
-}
-
-static void _mssql_bind_hash_dtor(void *data)
-{
- mssql_bind *bind= (mssql_bind *) data;
-
- zval_ptr_dtor(&(bind->zval));
-}
-
-static void php_mssql_init_globals(zend_mssql_globals *mssql_globals)
-{
- long compatability_mode;
-
- mssql_globals->num_persistent = 0;
- if (cfg_get_long("mssql.compatability_mode", &compatability_mode) == SUCCESS) {
- if (compatability_mode) {
- mssql_globals->get_column_content = php_mssql_get_column_content_without_type;
- } else {
- mssql_globals->get_column_content = php_mssql_get_column_content_with_type;
- }
- } else {
- mssql_globals->get_column_content = php_mssql_get_column_content_with_type;
- }
-}
-
-PHP_MINIT_FUNCTION(mssql)
-{
- ZEND_INIT_MODULE_GLOBALS(mssql, php_mssql_init_globals, NULL);
-
- REGISTER_INI_ENTRIES();
-
- le_statement = zend_register_list_destructors_ex(_free_mssql_statement, NULL, "mssql statement", module_number);
- le_result = zend_register_list_destructors_ex(_free_mssql_result, NULL, "mssql result", module_number);
- le_link = zend_register_list_destructors_ex(_close_mssql_link, NULL, "mssql link", module_number);
- le_plink = zend_register_list_destructors_ex(NULL, _close_mssql_plink, "mssql link persistent", module_number);
- Z_TYPE(mssql_module_entry) = type;
-
- if (dbinit()==FAIL) {
- return FAILURE;
- }
-
- /* BEGIN MSSQL data types for mssql_bind */
- REGISTER_LONG_CONSTANT("MSSQL_ASSOC", MSSQL_ASSOC, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("MSSQL_NUM", MSSQL_NUM, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("MSSQL_BOTH", MSSQL_BOTH, CONST_CS | CONST_PERSISTENT);
-
- REGISTER_LONG_CONSTANT("SQLTEXT",SQLTEXT, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("SQLVARCHAR",SQLVARCHAR, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("SQLCHAR",SQLCHAR, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("SQLINT1",SQLINT1, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("SQLINT2",SQLINT2, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("SQLINT4",SQLINT4, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("SQLBIT",SQLBIT, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("SQLFLT4",SQLFLT4, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("SQLFLT8",SQLFLT8, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("SQLFLTN",SQLFLTN, CONST_CS | CONST_PERSISTENT);
- /* END MSSQL data types for mssql_sp_bind */
-
- return SUCCESS;
-}
-
-PHP_MSHUTDOWN_FUNCTION(mssql)
-{
- UNREGISTER_INI_ENTRIES();
- dbexit();
- return SUCCESS;
-}
-
-PHP_RINIT_FUNCTION(mssql)
-{
- MS_SQL_G(default_link) = -1;
- MS_SQL_G(num_links) = MS_SQL_G(num_persistent);
- MS_SQL_G(appname) = estrndup("PHP 5", 5);
- MS_SQL_G(server_message) = NULL;
- MS_SQL_G(min_error_severity) = MS_SQL_G(cfg_min_error_severity);
- MS_SQL_G(min_message_severity) = MS_SQL_G(cfg_min_message_severity);
- if (MS_SQL_G(connect_timeout) < 1) MS_SQL_G(connect_timeout) = 1;
- dbsetlogintime(MS_SQL_G(connect_timeout));
- if (MS_SQL_G(timeout) < 0) MS_SQL_G(timeout) = 60;
- dbsettime(MS_SQL_G(timeout));
- dbsetmaxprocs((TDS_SHORT)MS_SQL_G(max_procs));
-
- return SUCCESS;
-}
-
-PHP_RSHUTDOWN_FUNCTION(mssql)
-{
- STR_FREE(MS_SQL_G(appname));
- MS_SQL_G(appname) = NULL;
- if (MS_SQL_G(server_message)) {
- STR_FREE(MS_SQL_G(server_message));
- MS_SQL_G(server_message) = NULL;
- }
- return SUCCESS;
-}
-
-PHP_MINFO_FUNCTION(mssql)
-{
- char buf[32];
-
- php_info_print_table_start();
- php_info_print_table_header(2, "MSSQL Support", "enabled");
-
- sprintf(buf, "%ld", MS_SQL_G(num_persistent));
- php_info_print_table_row(2, "Active Persistent Links", buf);
- sprintf(buf, "%ld", MS_SQL_G(num_links));
- php_info_print_table_row(2, "Active Links", buf);
-
- php_info_print_table_row(2, "Library version", MSSQL_VERSION);
- php_info_print_table_end();
-
- DISPLAY_INI_ENTRIES();
-
-}
-
-static void php_mssql_do_connect(INTERNAL_FUNCTION_PARAMETERS, int persistent)
-{
- char *user, *passwd, *host;
- char *hashed_details;
- int hashed_details_length;
- mssql_link mssql, *mssql_ptr;
- char buffer[32];
-
- switch(ZEND_NUM_ARGS()) {
- case 0: /* defaults */
- host=user=passwd=NULL;
- hashed_details_length=5+3;
- hashed_details = (char *) emalloc(hashed_details_length+1);
- strcpy(hashed_details,"mssql___");
- break;
- case 1: {
- zval **yyhost;
-
- if (zend_get_parameters_ex(1, &yyhost)==FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex(yyhost);
- host = Z_STRVAL_PP(yyhost);
- user=passwd=NULL;
- hashed_details_length = Z_STRLEN_PP(yyhost)+5+3;
- hashed_details = (char *) emalloc(hashed_details_length+1);
- sprintf(hashed_details,"mssql_%s__",Z_STRVAL_PP(yyhost));
- }
- break;
- case 2: {
- zval **yyhost,**yyuser;
-
- if (zend_get_parameters_ex(2, &yyhost, &yyuser)==FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex(yyhost);
- convert_to_string_ex(yyuser);
- host = Z_STRVAL_PP(yyhost);
- user = Z_STRVAL_PP(yyuser);
- passwd=NULL;
- hashed_details_length = Z_STRLEN_PP(yyhost)+Z_STRLEN_PP(yyuser)+5+3;
- hashed_details = (char *) emalloc(hashed_details_length+1);
- sprintf(hashed_details,"mssql_%s_%s_",Z_STRVAL_PP(yyhost),Z_STRVAL_PP(yyuser));
- }
- break;
- case 3: {
- zval **yyhost,**yyuser,**yypasswd;
-
- if (zend_get_parameters_ex(3, &yyhost, &yyuser, &yypasswd) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex(yyhost);
- convert_to_string_ex(yyuser);
- convert_to_string_ex(yypasswd);
- host = Z_STRVAL_PP(yyhost);
- user = Z_STRVAL_PP(yyuser);
- passwd = Z_STRVAL_PP(yypasswd);
- hashed_details_length = Z_STRLEN_PP(yyhost)+Z_STRLEN_PP(yyuser)+Z_STRLEN_PP(yypasswd)+5+3;
- hashed_details = (char *) emalloc(hashed_details_length+1);
- sprintf(hashed_details,"mssql_%s_%s_%s",Z_STRVAL_PP(yyhost),Z_STRVAL_PP(yyuser),Z_STRVAL_PP(yypasswd)); /* SAFE */
- }
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
-
- if (hashed_details == NULL) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Out of memory");
- RETURN_FALSE;
- }
-
- /* set a DBLOGIN record */
- if ((mssql.login = dblogin()) == NULL) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to allocate login record");
- RETURN_FALSE;
- }
-
- DBERRHANDLE(mssql.login, (EHANDLEFUNC) php_mssql_error_handler);
- DBMSGHANDLE(mssql.login, (MHANDLEFUNC) php_mssql_message_handler);
-
-#ifndef HAVE_FREETDS
- if (MS_SQL_G(secure_connection)){
- DBSETLSECURE(mssql.login);
- }
- else {
-#endif
- if (user) {
- DBSETLUSER(mssql.login,user);
- }
- if (passwd) {
- DBSETLPWD(mssql.login,passwd);
- }
-#ifndef HAVE_FREETDS
- }
-#endif
- DBSETLAPP(mssql.login,MS_SQL_G(appname));
- mssql.valid = 1;
-
-#ifndef HAVE_FREETDS
- DBSETLVERSION(mssql.login, DBVER60);
-#endif
-/* DBSETLTIME(mssql.login, TIMEOUT_INFINITE); */
-
- if (!MS_SQL_G(allow_persistent)) {
- persistent=0;
- }
- if (persistent) {
- list_entry *le;
-
- /* try to find if we already have this link in our persistent list */
- if (zend_hash_find(&EG(persistent_list), hashed_details, hashed_details_length + 1, (void **) &le)==FAILURE) { /* we don't */
- list_entry new_le;
-
- if (MS_SQL_G(max_links) != -1 && MS_SQL_G(num_links) >= MS_SQL_G(max_links)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Too many open links (%ld)", MS_SQL_G(num_links));
- efree(hashed_details);
- dbfreelogin(mssql.login);
- RETURN_FALSE;
- }
- if (MS_SQL_G(max_persistent) != -1 && MS_SQL_G(num_persistent) >= MS_SQL_G(max_persistent)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Too many open persistent links (%ld)", MS_SQL_G(num_persistent));
- efree(hashed_details);
- dbfreelogin(mssql.login);
- RETURN_FALSE;
- }
- /* create the link */
- if ((mssql.link = dbopen(mssql.login, host)) == FAIL) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to connect to server: %s", host);
- efree(hashed_details);
- dbfreelogin(mssql.login);
- RETURN_FALSE;
- }
-
- if (DBSETOPT(mssql.link, DBBUFFER, "2")==FAIL) {
- efree(hashed_details);
- dbfreelogin(mssql.login);
- dbclose(mssql.link);
- RETURN_FALSE;
- }
-
- if (MS_SQL_G(textlimit) != -1) {
- sprintf(buffer, "%li", MS_SQL_G(textlimit));
- if (DBSETOPT(mssql.link, DBTEXTLIMIT, buffer)==FAIL) {
- efree(hashed_details);
- dbfreelogin(mssql.login);
- RETURN_FALSE;
- }
- }
- if (MS_SQL_G(textsize) != -1) {
- sprintf(buffer, "SET TEXTSIZE %li", MS_SQL_G(textsize));
- dbcmd(mssql.link, buffer);
- dbsqlexec(mssql.link);
- dbresults(mssql.link);
- }
-
- /* hash it up */
- mssql_ptr = (mssql_link *) malloc(sizeof(mssql_link));
- memcpy(mssql_ptr, &mssql, sizeof(mssql_link));
- Z_TYPE(new_le) = le_plink;
- new_le.ptr = mssql_ptr;
- if (zend_hash_update(&EG(persistent_list), hashed_details, hashed_details_length + 1, &new_le, sizeof(list_entry), NULL)==FAILURE) {
- free(mssql_ptr);
- efree(hashed_details);
- dbfreelogin(mssql.login);
- RETURN_FALSE;
- }
- MS_SQL_G(num_persistent)++;
- MS_SQL_G(num_links)++;
- } else { /* we do */
- if (Z_TYPE_P(le) != le_plink) {
-#if BROKEN_MSSQL_PCONNECTS
- log_error("PHP/MS SQL: Hashed persistent link is not a MS SQL link!",php_rqst->server);
-#endif
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Hashed persistent link is not a MS SQL link!");
- RETURN_FALSE;
- }
-
- mssql_ptr = (mssql_link *) le->ptr;
- /* test that the link hasn't died */
- if (DBDEAD(mssql_ptr->link) == TRUE) {
-#if BROKEN_MSSQL_PCONNECTS
- log_error("PHP/MS SQL: Persistent link died, trying to reconnect...",php_rqst->server);
-#endif
- if ((mssql_ptr->link=dbopen(mssql_ptr->login,host))==FAIL) {
-#if BROKEN_MSSQL_PCONNECTS
- log_error("PHP/MS SQL: Unable to reconnect!",php_rqst->server);
-#endif
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Link to server lost, unable to reconnect");
- zend_hash_del(&EG(persistent_list), hashed_details, hashed_details_length+1);
- efree(hashed_details);
- RETURN_FALSE;
- }
-#if BROKEN_MSSQL_PCONNECTS
- log_error("PHP/MS SQL: Reconnect successful!",php_rqst->server);
-#endif
- if (DBSETOPT(mssql_ptr->link, DBBUFFER, "2")==FAIL) {
-#if BROKEN_MSSQL_PCONNECTS
- log_error("PHP/MS SQL: Unable to set required options",php_rqst->server);
-#endif
- zend_hash_del(&EG(persistent_list), hashed_details, hashed_details_length + 1);
- efree(hashed_details);
- RETURN_FALSE;
- }
- }
- }
- ZEND_REGISTER_RESOURCE(return_value, mssql_ptr, le_plink);
- } else { /* non persistent */
- list_entry *index_ptr, new_index_ptr;
-
- /* first we check the hash for the hashed_details key. if it exists,
- * it should point us to the right offset where the actual mssql link sits.
- * if it doesn't, open a new mssql link, add it to the resource list,
- * and add a pointer to it with hashed_details as the key.
- */
- if (zend_hash_find(&EG(regular_list), hashed_details, hashed_details_length + 1,(void **) &index_ptr)==SUCCESS) {
- int type,link;
- void *ptr;
-
- if (Z_TYPE_P(index_ptr) != le_index_ptr) {
- RETURN_FALSE;
- }
- link = (int) index_ptr->ptr;
- ptr = zend_list_find(link,&type); /* check if the link is still there */
- if (ptr && (type==le_link || type==le_plink)) {
- zend_list_addref(link);
- Z_LVAL_P(return_value) = link;
- php_mssql_set_default_link(link TSRMLS_CC);
- Z_TYPE_P(return_value) = IS_RESOURCE;
- efree(hashed_details);
- return;
- } else {
- zend_hash_del(&EG(regular_list), hashed_details, hashed_details_length + 1);
- }
- }
- if (MS_SQL_G(max_links) != -1 && MS_SQL_G(num_links) >= MS_SQL_G(max_links)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Too many open links (%ld)", MS_SQL_G(num_links));
- efree(hashed_details);
- RETURN_FALSE;
- }
-
- if ((mssql.link=dbopen(mssql.login, host))==NULL) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to connect to server: %s", host);
- efree(hashed_details);
- RETURN_FALSE;
- }
-
- if (DBSETOPT(mssql.link, DBBUFFER,"2")==FAIL) {
- efree(hashed_details);
- dbfreelogin(mssql.login);
- dbclose(mssql.link);
- RETURN_FALSE;
- }
-
- if (MS_SQL_G(textlimit) != -1) {
- sprintf(buffer, "%li", MS_SQL_G(textlimit));
- if (DBSETOPT(mssql.link, DBTEXTLIMIT, buffer)==FAIL) {
- efree(hashed_details);
- dbfreelogin(mssql.login);
- RETURN_FALSE;
- }
- }
- if (MS_SQL_G(textsize) != -1) {
- sprintf(buffer, "SET TEXTSIZE %li", MS_SQL_G(textsize));
- dbcmd(mssql.link, buffer);
- dbsqlexec(mssql.link);
- dbresults(mssql.link);
- }
-
- /* add it to the list */
- mssql_ptr = (mssql_link *) emalloc(sizeof(mssql_link));
- memcpy(mssql_ptr, &mssql, sizeof(mssql_link));
- ZEND_REGISTER_RESOURCE(return_value, mssql_ptr, le_link);
-
- /* add it to the hash */
- new_index_ptr.ptr = (void *) Z_LVAL_P(return_value);
- Z_TYPE(new_index_ptr) = le_index_ptr;
- if (zend_hash_update(&EG(regular_list), hashed_details, hashed_details_length + 1,(void *) &new_index_ptr, sizeof(list_entry),NULL)==FAILURE) {
- efree(hashed_details);
- RETURN_FALSE;
- }
- MS_SQL_G(num_links)++;
- }
- efree(hashed_details);
- php_mssql_set_default_link(Z_LVAL_P(return_value) TSRMLS_CC);
-}
-
-
-static int php_mssql_get_default_link(INTERNAL_FUNCTION_PARAMETERS)
-{
- if (MS_SQL_G(default_link)==-1) { /* no link opened yet, implicitly open one */
- ht = 0;
- php_mssql_do_connect(INTERNAL_FUNCTION_PARAM_PASSTHRU,0);
- }
- return MS_SQL_G(default_link);
-}
-
-/* {{{ proto int mssql_connect([string servername [, string username [, string password]]])
- Establishes a connection to a MS-SQL server */
-PHP_FUNCTION(mssql_connect)
-{
- php_mssql_do_connect(INTERNAL_FUNCTION_PARAM_PASSTHRU,0);
-}
-
-/* }}} */
-
-/* {{{ proto int mssql_pconnect([string servername [, string username [, string password]]])
- Establishes a persistent connection to a MS-SQL server */
-PHP_FUNCTION(mssql_pconnect)
-{
- php_mssql_do_connect(INTERNAL_FUNCTION_PARAM_PASSTHRU,1);
-}
-
-/* }}} */
-
-/* {{{ proto bool mssql_close([resource conn_id])
- Closes a connection to a MS-SQL server */
-PHP_FUNCTION(mssql_close)
-{
- zval **mssql_link_index=NULL;
- int id;
- mssql_link *mssql_ptr;
-
- switch (ZEND_NUM_ARGS()) {
- case 0:
- id = php_mssql_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU);
- CHECK_LINK(id);
- break;
- case 1:
- if (zend_get_parameters_ex(1, &mssql_link_index)==FAILURE) {
- RETURN_FALSE;
- }
- id = -1;
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
- ZEND_FETCH_RESOURCE2(mssql_ptr, mssql_link *, mssql_link_index, id, "MS SQL-Link", le_link, le_plink);
-
- if (mssql_link_index)
- zend_list_delete(Z_RESVAL_PP(mssql_link_index));
- else
- zend_list_delete(id);
-
- RETURN_TRUE;
-}
-
-/* }}} */
-
-/* {{{ proto bool mssql_select_db(string database_name [, resource conn_id])
- Select a MS-SQL database */
-PHP_FUNCTION(mssql_select_db)
-{
- zval **db, **mssql_link_index;
- int id;
- mssql_link *mssql_ptr;
-
- switch(ZEND_NUM_ARGS()) {
- case 1:
- if (zend_get_parameters_ex(1, &db)==FAILURE) {
- RETURN_FALSE;
- }
- id = php_mssql_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU);
- CHECK_LINK(id);
- break;
- case 2:
- if (zend_get_parameters_ex(2, &db, &mssql_link_index)==FAILURE) {
- RETURN_FALSE;
- }
- id = -1;
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
-
- ZEND_FETCH_RESOURCE2(mssql_ptr, mssql_link *, mssql_link_index, id, "MS SQL-Link", le_link, le_plink);
-
- convert_to_string_ex(db);
-
- if (dbuse(mssql_ptr->link, Z_STRVAL_PP(db))==FAIL) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to select database: %s", Z_STRVAL_PP(db));
- RETURN_FALSE;
- } else {
- RETURN_TRUE;
- }
-}
-
-/* }}} */
-
-static void php_mssql_get_column_content_with_type(mssql_link *mssql_ptr,int offset,zval *result, int column_type TSRMLS_DC)
-{
- if (dbdatlen(mssql_ptr->link,offset) == 0) {
- ZVAL_NULL(result);
- return;
- }
-
- switch (column_type)
- {
- case SQLBIT:
- case SQLINT1:
- case SQLINT2:
- case SQLINT4:
- case SQLINTN: {
- ZVAL_LONG(result, (long) anyintcol(offset));
- break;
- }
- case SQLCHAR:
- case SQLVARCHAR:
- case SQLTEXT: {
- int length;
- char *data = charcol(offset);
-
- length=dbdatlen(mssql_ptr->link,offset);
-#if ilia_0
- while (length>0 && data[length-1] == ' ') { /* nuke trailing whitespace */
- length--;
- }
-#endif
- ZVAL_STRINGL(result, data, length, 1);
- break;
- }
- case SQLFLT4:
- ZVAL_DOUBLE(result, (double) floatcol4(offset));
- break;
- case SQLMONEY:
- case SQLMONEY4:
- case SQLMONEYN: {
- DBFLT8 res_buf;
- dbconvert(NULL, column_type, dbdata(mssql_ptr->link,offset), 8, SQLFLT8, (LPBYTE)&res_buf, -1);
- ZVAL_DOUBLE(result, res_buf);
- }
- break;
- case SQLFLT8:
- ZVAL_DOUBLE(result, (double) floatcol8(offset));
- break;
-#ifdef SQLUNIQUE
- case SQLUNIQUE: {
- char *data = charcol(offset);
-
- /* uniqueidentifier is a 16-byte binary number */
- ZVAL_STRINGL(result, data, 16, 1);
- }
- break;
-#endif
- case SQLVARBINARY:
- case SQLBINARY:
- case SQLIMAGE: {
- DBBINARY *bin;
- 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);
- }
- break;
- case SQLNUMERIC:
- default: {
- if (dbwillconvert(column_type,SQLCHAR)) {
- char *res_buf;
- DBDATEREC dateinfo;
- int res_length = dbdatlen(mssql_ptr->link,offset);
-
- if ((column_type != SQLDATETIME && column_type != SQLDATETIM4) || MS_SQL_G(datetimeconvert)) {
-
- switch (column_type) {
- case SQLDATETIM4 :
- res_length += 14;
- break;
- case SQLDATETIME :
- res_length += 10;
- break;
- case SQLMONEY :
- case SQLMONEY4 :
- case SQLMONEYN :
- case SQLDECIMAL :
- case SQLNUMERIC :
- res_length += 5;
- break;
- }
-
- res_buf = (unsigned char *) emalloc(res_length+1);
- res_length = dbconvert(NULL,coltype(offset),dbdata(mssql_ptr->link,offset), res_length, SQLCHAR,res_buf,-1);
- } else {
- if (column_type == SQLDATETIM4) {
- DBDATETIME temp;
-
- dbconvert(NULL, SQLDATETIM4, dbdata(mssql_ptr->link,offset), -1, SQLDATETIME, (LPBYTE) &temp, -1);
- dbdatecrack(mssql_ptr->link, &dateinfo, &temp);
- } else {
- dbdatecrack(mssql_ptr->link, &dateinfo, (DBDATETIME *) dbdata(mssql_ptr->link,offset));
- }
-
- res_length = 19;
- res_buf = (unsigned char *) emalloc(res_length+1);
- sprintf(res_buf, "%d-%02d-%02d %02d:%02d:%02d" , dateinfo.year, dateinfo.month, dateinfo.day, dateinfo.hour, dateinfo.minute, dateinfo.second);
- }
-
- ZVAL_STRINGL(result, res_buf, res_length, 0);
- } else {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "column %d has unknown data type (%d)", offset, coltype(offset));
- ZVAL_FALSE(result);
- }
- }
- }
-}
-
-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);
- return;
- }
-
- if (column_type == SQLVARBINARY ||
- column_type == SQLBINARY ||
- column_type == SQLIMAGE) {
- DBBINARY *bin;
- 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);
- }
- else if (dbwillconvert(coltype(offset),SQLCHAR)) {
- unsigned char *res_buf;
- DBDATEREC dateinfo;
- int res_length = dbdatlen(mssql_ptr->link,offset);
-
- if ((column_type != SQLDATETIME && column_type != SQLDATETIM4) || MS_SQL_G(datetimeconvert)) {
-
- switch (column_type) {
- case SQLDATETIM4 :
- res_length += 14;
- break;
- case SQLDATETIME :
- res_length += 10;
- break;
- case SQLMONEY :
- case SQLMONEY4 :
- case SQLMONEYN :
- case SQLDECIMAL :
- case SQLNUMERIC :
- res_length += 5;
- break;
- }
-
- res_buf = (unsigned char *) emalloc(res_length+1);
- res_length = dbconvert(NULL,coltype(offset),dbdata(mssql_ptr->link,offset), res_length, SQLCHAR, res_buf, -1);
-
- } else {
- if (column_type == SQLDATETIM4) {
- DBDATETIME temp;
-
- dbconvert(NULL, SQLDATETIM4, dbdata(mssql_ptr->link,offset), -1, SQLDATETIME, (LPBYTE) &temp, -1);
- dbdatecrack(mssql_ptr->link, &dateinfo, &temp);
- } else {
- dbdatecrack(mssql_ptr->link, &dateinfo, (DBDATETIME *) dbdata(mssql_ptr->link,offset));
- }
-
- res_length = 19;
- res_buf = (unsigned char *) emalloc(res_length+1);
- sprintf(res_buf, "%d-%02d-%02d %02d:%02d:%02d" , dateinfo.year, dateinfo.month, dateinfo.day, dateinfo.hour, dateinfo.minute, dateinfo.second);
- }
-
- ZVAL_STRINGL(result, res_buf, res_length, 0);
- } else {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "column %d has unknown data type (%d)", offset, coltype(offset));
- ZVAL_FALSE(result);
- }
-}
-
-static void _mssql_get_sp_result(mssql_link *mssql_ptr, mssql_statement *statement TSRMLS_DC)
-{
- int i, num_rets, type;
- char *parameter;
- mssql_bind *bind;
-
- /* Now to fetch RETVAL and OUTPUT values*/
- num_rets = dbnumrets(mssql_ptr->link);
-
- if (num_rets!=0) {
- for (i = 1; i <= num_rets; i++) {
- parameter = (char*)dbretname(mssql_ptr->link, i);
- type = dbrettype(mssql_ptr->link, i);
-
- if (statement->binds != NULL) { /* Maybe a non-parameter sp */
- if (zend_hash_find(statement->binds, parameter, strlen(parameter), (void**)&bind)==SUCCESS) {
- switch (type) {
- case SQLBIT:
- case SQLINT1:
- case SQLINT2:
- case SQLINT4:
- convert_to_long_ex(&bind->zval);
- Z_LVAL_P(bind->zval) = *((int *)(dbretdata(mssql_ptr->link,i)));
- break;
-
- case SQLFLT4:
- case SQLFLT8:
- case SQLFLTN:
- case SQLMONEY4:
- case SQLMONEY:
- case SQLMONEYN:
- convert_to_double_ex(&bind->zval);
- Z_DVAL_P(bind->zval) = *((double *)(dbretdata(mssql_ptr->link,i)));
- break;
-
- case SQLCHAR:
- case SQLVARCHAR:
- case SQLTEXT:
- convert_to_string_ex(&bind->zval);
- Z_STRLEN_P(bind->zval) = dbretlen(mssql_ptr->link,i);
- Z_STRVAL_P(bind->zval) = estrndup(dbretdata(mssql_ptr->link,i),Z_STRLEN_P(bind->zval));
- break;
- }
- }
- else {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "An output parameter variable was not provided");
- }
- }
- }
- }
- if (statement->binds != NULL) { /* Maybe a non-parameter sp */
- if (zend_hash_find(statement->binds, "RETVAL", 6, (void**)&bind)==SUCCESS) {
- if (dbhasretstat(mssql_ptr->link)) {
- convert_to_long_ex(&bind->zval);
- Z_LVAL_P(bind->zval)=dbretstatus(mssql_ptr->link);
- }
- else {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "stored procedure has no return value. Nothing was returned into RETVAL");
- }
- }
- }
-}
-
-static int _mssql_fetch_batch(mssql_link *mssql_ptr, mssql_result *result, int retvalue TSRMLS_DC)
-{
- int i, j = 0;
- int *column_types;
- char computed_buf[16];
-
- column_types = (int *) safe_emalloc(sizeof(int), result->num_fields, 0);
- for (i=0; i<result->num_fields; i++) {
- char *source = NULL;
- char *fname = (char *)dbcolname(mssql_ptr->link,i+1);
-
- if (*fname) {
- result->fields[i].name = estrdup(fname);
- } else {
- if (j>0) {
- snprintf(computed_buf,16,"computed%d",j);
- } else {
- strcpy(computed_buf,"computed");
- }
- result->fields[i].name = estrdup(computed_buf);
- j++;
- }
- result->fields[i].max_length = dbcollen(mssql_ptr->link,i+1);
- source = (char *)dbcolsource(mssql_ptr->link,i+1);
- if (source) {
- result->fields[i].column_source = estrdup(source);
- }
- else {
- result->fields[i].column_source = STR_EMPTY_ALLOC();
- }
-
- column_types[i] = coltype(i+1);
-
- Z_TYPE(result->fields[i]) = column_types[i];
- /* set numeric flag */
- switch (column_types[i]) {
- case SQLINT1:
- case SQLINT2:
- case SQLINT4:
- case SQLINTN:
- case SQLFLT4:
- case SQLFLT8:
- case SQLNUMERIC:
- case SQLDECIMAL:
- result->fields[i].numeric = 1;
- break;
- case SQLCHAR:
- case SQLVARCHAR:
- case SQLTEXT:
- default:
- result->fields[i].numeric = 0;
- break;
- }
- }
-
- i=0;
- if (!result->data) {
- result->data = (zval **) safe_emalloc(sizeof(zval *), MSSQL_ROWS_BLOCK*(++result->blocks_initialized), 0);
- }
- while (retvalue!=FAIL && retvalue!=NO_MORE_ROWS) {
- result->num_rows++;
- if (result->num_rows > result->blocks_initialized*MSSQL_ROWS_BLOCK) {
- result->data = (zval **) erealloc(result->data,sizeof(zval *)*MSSQL_ROWS_BLOCK*(++result->blocks_initialized));
- }
- result->data[i] = (zval *) safe_emalloc(sizeof(zval), result->num_fields, 0);
- for (j=0; j<result->num_fields; j++) {
- INIT_ZVAL(result->data[i][j]);
- MS_SQL_G(get_column_content(mssql_ptr, j+1, &result->data[i][j], column_types[j] TSRMLS_CC));
- }
- if (i<result->batchsize || result->batchsize==0) {
- i++;
- dbclrbuf(mssql_ptr->link,DBLASTROW(mssql_ptr->link));
- retvalue=dbnextrow(mssql_ptr->link);
- }
- else
- break;
- result->lastresult = retvalue;
- }
- efree(column_types);
- if (result->statement && (retvalue == NO_MORE_RESULTS || retvalue == NO_MORE_RPC_RESULTS)) {
- _mssql_get_sp_result(mssql_ptr, result->statement TSRMLS_CC);
- }
- return i;
-}
-
-/* {{{ proto int mssql_fetch_batch(resource result_index)
- Returns the next batch of records */
-PHP_FUNCTION(mssql_fetch_batch)
-{
- zval **mssql_result_index;
- mssql_result *result;
- mssql_link *mssql_ptr;
-
- if (ZEND_NUM_ARGS()!=1 || zend_get_parameters_ex(1, &mssql_result_index)==FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- if (Z_TYPE_PP(mssql_result_index)==IS_RESOURCE && Z_LVAL_PP(mssql_result_index)==0) {
- RETURN_FALSE;
- }
-
- ZEND_FETCH_RESOURCE(result, mssql_result *, mssql_result_index, -1, "MS SQL-result", le_result);
- mssql_ptr = result->mssql_ptr;
- _free_result(result, 0);
- result->cur_row=result->num_rows=0;
- result->num_rows = _mssql_fetch_batch(mssql_ptr, result, result->lastresult TSRMLS_CC);
- RETURN_LONG(result->num_rows);
-}
-/* }}} */
-
-/* {{{ proto resource mssql_query(string query [, resource conn_id [, int batch_size]])
- Perform an SQL query on a MS-SQL server database */
-PHP_FUNCTION(mssql_query)
-{
- zval **query, **mssql_link_index, **zbatchsize;
- int retvalue;
- mssql_link *mssql_ptr;
- mssql_result *result;
- int id, num_fields;
- int batchsize;
-
- batchsize = MS_SQL_G(batchsize);
- switch(ZEND_NUM_ARGS()) {
- case 1:
- if (zend_get_parameters_ex(1, &query)==FAILURE) {
- RETURN_FALSE;
- }
- id = php_mssql_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU);
- CHECK_LINK(id);
- break;
- case 2:
- if (zend_get_parameters_ex(2, &query, &mssql_link_index)==FAILURE) {
- RETURN_FALSE;
- }
- id = -1;
- break;
- case 3:
- if (zend_get_parameters_ex(3, &query, &mssql_link_index, &zbatchsize)==FAILURE) {
- RETURN_FALSE;
- }
- id = -1;
- convert_to_long_ex(zbatchsize);
- batchsize = Z_LVAL_PP(zbatchsize);
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
-
- ZEND_FETCH_RESOURCE2(mssql_ptr, mssql_link *, mssql_link_index, id, "MS SQL-Link", le_link, le_plink);
-
- convert_to_string_ex(query);
-
- if (dbcmd(mssql_ptr->link, Z_STRVAL_PP(query))==FAIL) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to set query");
- RETURN_FALSE;
- }
- if (dbsqlexec(mssql_ptr->link)==FAIL || (retvalue = dbresults(mssql_ptr->link))==FAIL) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Query failed");
- RETURN_FALSE;
- }
-
- /* Skip results not returning any columns */
- while ((num_fields = dbnumcols(mssql_ptr->link)) <= 0 && retvalue == SUCCEED) {
- retvalue = dbresults(mssql_ptr->link);
- }
- if ((num_fields = dbnumcols(mssql_ptr->link)) <= 0) {
- RETURN_TRUE;
- }
-
- retvalue=dbnextrow(mssql_ptr->link);
- if (retvalue==FAIL) {
- RETURN_FALSE;
- }
-
- result = (mssql_result *) emalloc(sizeof(mssql_result));
- result->statement = NULL;
- result->num_fields = num_fields;
- result->blocks_initialized = 1;
-
- result->batchsize = batchsize;
- result->data = NULL;
- result->blocks_initialized = 0;
- result->mssql_ptr = mssql_ptr;
- result->cur_field=result->cur_row=result->num_rows=0;
-
- if (num_fields > 0) {
- result->fields = (mssql_field *) safe_emalloc(sizeof(mssql_field), result->num_fields, 0);
- result->num_rows = _mssql_fetch_batch(mssql_ptr, result, retvalue TSRMLS_CC);
- }
- else
- result->fields = NULL;
-
- ZEND_REGISTER_RESOURCE(return_value, result, le_result);
-}
-/* }}} */
-
-/* {{{ proto int mssql_rows_affected(resource conn_id)
- Returns the number of records affected by the query */
-PHP_FUNCTION(mssql_rows_affected)
-{
- zval **mssql_link_index;
- mssql_link *mssql_ptr;
-
- if (ZEND_NUM_ARGS()!=1 || zend_get_parameters_ex(1, &mssql_link_index)==FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE2(mssql_ptr, mssql_link *, mssql_link_index, -1, "MS SQL-Link", le_link, le_plink);
- RETURN_LONG(DBCOUNT(mssql_ptr->link));
-}
-/* }}} */
-
-
-/* {{{ proto bool mssql_free_result(resource result_index)
- Free a MS-SQL result index */
-PHP_FUNCTION(mssql_free_result)
-{
- zval **mssql_result_index;
- mssql_result *result;
- int retvalue;
-
- if (ZEND_NUM_ARGS()!=1 || zend_get_parameters_ex(1, &mssql_result_index)==FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- if (Z_TYPE_PP(mssql_result_index)==IS_RESOURCE && Z_LVAL_PP(mssql_result_index)==0) {
- RETURN_FALSE;
- }
-
- ZEND_FETCH_RESOURCE(result, mssql_result *, mssql_result_index, -1, "MS SQL-result", le_result);
- /* Release remaining results */
- do {
- dbcanquery(result->mssql_ptr->link);
- retvalue = dbresults(result->mssql_ptr->link);
- } while (retvalue == SUCCEED);
-
- zend_list_delete(Z_RESVAL_PP(mssql_result_index));
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto string mssql_get_last_message(void)
- Gets the last message from the MS-SQL server */
-PHP_FUNCTION(mssql_get_last_message)
-{
- if (MS_SQL_G(server_message)) {
- RETURN_STRING(MS_SQL_G(server_message),1);
- }
- else {
- RETURN_STRING("",1);
- }
-}
-
-/* }}} */
-
-/* {{{ proto int mssql_num_rows(resource mssql_result_index)
- Returns the number of rows fetched in from the result id specified */
-PHP_FUNCTION(mssql_num_rows)
-{
- zval **mssql_result_index;
- mssql_result *result;
-
- if (ZEND_NUM_ARGS()!=1 || zend_get_parameters_ex(1, &mssql_result_index)==FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(result, mssql_result *, mssql_result_index, -1, "MS SQL-result", le_result);
-
- Z_LVAL_P(return_value) = result->num_rows;
- Z_TYPE_P(return_value) = IS_LONG;
-}
-
-/* }}} */
-
-/* {{{ proto int mssql_num_fields(resource mssql_result_index)
- Returns the number of fields fetched in from the result id specified */
-PHP_FUNCTION(mssql_num_fields)
-{
- zval **mssql_result_index;
- mssql_result *result;
-
- if (ZEND_NUM_ARGS()!=1 || zend_get_parameters_ex(1, &mssql_result_index)==FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(result, mssql_result *, mssql_result_index, -1, "MS SQL-result", le_result);
-
- Z_LVAL_P(return_value) = result->num_fields;
- Z_TYPE_P(return_value) = IS_LONG;
-}
-
-/* }}} */
-
-static void php_mssql_fetch_hash(INTERNAL_FUNCTION_PARAMETERS, int result_type, int expected_args)
-{
- zval **mssql_result_index, **resulttype = NULL;
- mssql_result *result;
- int i;
-
- if (ZEND_NUM_ARGS() > expected_args) {
- WRONG_PARAM_COUNT;
- }
-
- switch (ZEND_NUM_ARGS()) {
- case 1:
- if (zend_get_parameters_ex(1, &mssql_result_index)==FAILURE) {
- RETURN_FALSE;
- }
- if (!result_type) {
- result_type = MSSQL_BOTH;
- }
- break;
- case 2:
- if (zend_get_parameters_ex(2, &mssql_result_index, &resulttype)==FAILURE) {
- RETURN_FALSE;
- }
- convert_to_long_ex(resulttype);
- result_type = Z_LVAL_PP(resulttype);
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
-
- ZEND_FETCH_RESOURCE(result, mssql_result *, mssql_result_index, -1, "MS SQL-result", le_result);
-
- if (MS_SQL_G(server_message)) {
- STR_FREE(MS_SQL_G(server_message));
- MS_SQL_G(server_message) = NULL;
- }
-
- if (result->cur_row >= result->num_rows) {
- RETURN_FALSE;
- }
-
- array_init(return_value);
-
- for (i=0; i<result->num_fields; i++) {
- if (Z_TYPE(result->data[result->cur_row][i]) != IS_NULL) {
- char *data;
- int data_len;
- int should_copy;
-
- if (Z_TYPE(result->data[result->cur_row][i]) == IS_STRING) {
- if (PG(magic_quotes_runtime)) {
- data = php_addslashes(Z_STRVAL(result->data[result->cur_row][i]), Z_STRLEN(result->data[result->cur_row][i]), &data_len, 0 TSRMLS_CC);
- should_copy = 0;
- }
- else
- {
- data = Z_STRVAL(result->data[result->cur_row][i]);
- data_len = Z_STRLEN(result->data[result->cur_row][i]);
- should_copy = 1;
- }
-
- if (result_type & MSSQL_NUM) {
- add_index_stringl(return_value, i, data, data_len, should_copy);
- should_copy = 1;
- }
-
- if (result_type & MSSQL_ASSOC) {
- add_assoc_stringl(return_value, result->fields[i].name, data, data_len, should_copy);
- }
- }
- else if (Z_TYPE(result->data[result->cur_row][i]) == IS_LONG) {
- if (result_type & MSSQL_NUM)
- add_index_long(return_value, i, Z_LVAL(result->data[result->cur_row][i]));
-
- if (result_type & MSSQL_ASSOC)
- add_assoc_long(return_value, result->fields[i].name, Z_LVAL(result->data[result->cur_row][i]));
- }
- else if (Z_TYPE(result->data[result->cur_row][i]) == IS_DOUBLE) {
- if (result_type & MSSQL_NUM)
- add_index_double(return_value, i, Z_DVAL(result->data[result->cur_row][i]));
-
- if (result_type & MSSQL_ASSOC)
- add_assoc_double(return_value, result->fields[i].name, Z_DVAL(result->data[result->cur_row][i]));
- }
- }
- else
- {
- if (result_type & MSSQL_NUM)
- add_index_null(return_value, i);
- if (result_type & MSSQL_ASSOC)
- add_assoc_null(return_value, result->fields[i].name);
- }
- }
- result->cur_row++;
-}
-
-/* {{{ proto array mssql_fetch_row(resource result_id)
- Returns an array of the current row in the result set specified by result_id */
-PHP_FUNCTION(mssql_fetch_row)
-{
- php_mssql_fetch_hash(INTERNAL_FUNCTION_PARAM_PASSTHRU, MSSQL_NUM, 1);
-}
-
-/* }}} */
-
-/* {{{ proto object mssql_fetch_object(resource result_id [, int result_type])
- Returns a psuedo-object of the current row in the result set specified by result_id */
-PHP_FUNCTION(mssql_fetch_object)
-{
- php_mssql_fetch_hash(INTERNAL_FUNCTION_PARAM_PASSTHRU, MSSQL_ASSOC, 2);
- if (Z_TYPE_P(return_value)==IS_ARRAY) {
- object_and_properties_init(return_value, ZEND_STANDARD_CLASS_DEF_PTR, Z_ARRVAL_P(return_value));
- }
-}
-
-/* }}} */
-
-/* {{{ proto array mssql_fetch_array(resource result_id [, int result_type])
- Returns an associative array of the current row in the result set specified by result_id */
-PHP_FUNCTION(mssql_fetch_array)
-{
- php_mssql_fetch_hash(INTERNAL_FUNCTION_PARAM_PASSTHRU, MSSQL_BOTH, 2);
-}
-
-/* }}} */
-
-/* {{{ proto array mssql_fetch_assoc(resource result_id)
- Returns an associative array of the current row in the result set specified by result_id */
-PHP_FUNCTION(mssql_fetch_assoc)
-{
- php_mssql_fetch_hash(INTERNAL_FUNCTION_PARAM_PASSTHRU, MSSQL_ASSOC, 1);
-}
-
-/* }}} */
-
-/* {{{ proto bool mssql_data_seek(resource result_id, int offset)
- Moves the internal row pointer of the MS-SQL result associated with the specified result identifier to pointer to the specified row number */
-PHP_FUNCTION(mssql_data_seek)
-{
- zval **mssql_result_index, **offset;
- mssql_result *result;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &mssql_result_index, &offset)==FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(result, mssql_result *, mssql_result_index, -1, "MS SQL-result", le_result);
-
- convert_to_long_ex(offset);
- if (Z_LVAL_PP(offset)<0 || Z_LVAL_PP(offset)>=result->num_rows) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Bad row offset");
- RETURN_FALSE;
- }
-
- result->cur_row = Z_LVAL_PP(offset);
- RETURN_TRUE;
-}
-
-/* }}} */
-
-static char *php_mssql_get_field_name(int type)
-{
- switch (type) {
- case SQLBINARY:
- case SQLVARBINARY:
- return "blob";
- break;
- case SQLCHAR:
- case SQLVARCHAR:
- return "char";
- break;
- case SQLTEXT:
- return "text";
- break;
- case SQLDATETIME:
- case SQLDATETIM4:
- case SQLDATETIMN:
- return "datetime";
- break;
- case SQLDECIMAL:
- case SQLFLT4:
- case SQLFLT8:
- case SQLFLTN:
- return "real";
- break;
- case SQLINT1:
- case SQLINT2:
- case SQLINT4:
- case SQLINTN:
- return "int";
- break;
- case SQLNUMERIC:
- return "numeric";
- break;
- case SQLMONEY:
- case SQLMONEY4:
- case SQLMONEYN:
- return "money";
- break;
- case SQLBIT:
- return "bit";
- break;
- case SQLIMAGE:
- return "image";
- break;
-#ifdef SQLUNIQUE
- case SQLUNIQUE:
- return "uniqueidentifier";
- break;
-#endif
- default:
- return "unknown";
- break;
- }
-}
-
-/* {{{ proto object mssql_fetch_field(resource result_id [, int offset])
- Gets information about certain fields in a query result */
-PHP_FUNCTION(mssql_fetch_field)
-{
- zval **mssql_result_index, **offset;
- int field_offset;
- mssql_result *result;
-
- switch (ZEND_NUM_ARGS()) {
- case 1:
- if (zend_get_parameters_ex(1, &mssql_result_index)==FAILURE) {
- RETURN_FALSE;
- }
- field_offset=-1;
- break;
- case 2:
- if (zend_get_parameters_ex(2, &mssql_result_index, &offset)==FAILURE) {
- RETURN_FALSE;
- }
- convert_to_long_ex(offset);
- field_offset = Z_LVAL_PP(offset);
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
-
- ZEND_FETCH_RESOURCE(result, mssql_result *, mssql_result_index, -1, "MS SQL-result", le_result);
-
- if (field_offset==-1) {
- field_offset = result->cur_field;
- result->cur_field++;
- }
-
- if (field_offset<0 || field_offset >= result->num_fields) {
- if (ZEND_NUM_ARGS()==2) { /* field specified explicitly */
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Bad column offset");
- }
- RETURN_FALSE;
- }
-
- object_init(return_value);
-
- add_property_string(return_value, "name",result->fields[field_offset].name, 1);
- add_property_long(return_value, "max_length",result->fields[field_offset].max_length);
- add_property_string(return_value, "column_source",result->fields[field_offset].column_source, 1);
- add_property_long(return_value, "numeric", result->fields[field_offset].numeric);
- add_property_string(return_value, "type", php_mssql_get_field_name(Z_TYPE(result->fields[field_offset])), 1);
-}
-
-/* }}} */
-
-/* {{{ proto int mssql_field_length(resource result_id [, int offset])
- Get the length of a MS-SQL field */
-PHP_FUNCTION(mssql_field_length)
-{
- zval **mssql_result_index, **offset;
- int field_offset;
- mssql_result *result;
-
- switch (ZEND_NUM_ARGS()) {
- case 1:
- if (zend_get_parameters_ex(1, &mssql_result_index)==FAILURE) {
- RETURN_FALSE;
- }
- field_offset=-1;
- break;
- case 2:
- if (zend_get_parameters_ex(2, &mssql_result_index, &offset)==FAILURE) {
- RETURN_FALSE;
- }
- convert_to_long_ex(offset);
- field_offset = Z_LVAL_PP(offset);
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
-
- ZEND_FETCH_RESOURCE(result, mssql_result *, mssql_result_index, -1, "MS SQL-result", le_result);
-
- if (field_offset==-1) {
- field_offset = result->cur_field;
- result->cur_field++;
- }
-
- if (field_offset<0 || field_offset >= result->num_fields) {
- if (ZEND_NUM_ARGS()==2) { /* field specified explicitly */
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Bad column offset");
- }
- RETURN_FALSE;
- }
-
- Z_LVAL_P(return_value) = result->fields[field_offset].max_length;
- Z_TYPE_P(return_value) = IS_LONG;
-}
-
-/* }}} */
-
-/* {{{ proto string mssql_field_name(resource result_id [, int offset])
- Returns the name of the field given by offset in the result set given by result_id */
-PHP_FUNCTION(mssql_field_name)
-{
- zval **mssql_result_index, **offset;
- int field_offset;
- mssql_result *result;
-
- switch (ZEND_NUM_ARGS()) {
- case 1:
- if (zend_get_parameters_ex(1, &mssql_result_index)==FAILURE) {
- RETURN_FALSE;
- }
- field_offset=-1;
- break;
- case 2:
- if (zend_get_parameters_ex(2, &mssql_result_index, &offset)==FAILURE) {
- RETURN_FALSE;
- }
- convert_to_long_ex(offset);
- field_offset = Z_LVAL_PP(offset);
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
-
- ZEND_FETCH_RESOURCE(result, mssql_result *, mssql_result_index, -1, "MS SQL-result", le_result);
-
- if (field_offset==-1) {
- field_offset = result->cur_field;
- result->cur_field++;
- }
-
- if (field_offset<0 || field_offset >= result->num_fields) {
- if (ZEND_NUM_ARGS()==2) { /* field specified explicitly */
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Bad column offset");
- }
- RETURN_FALSE;
- }
-
- RETURN_STRINGL(result->fields[field_offset].name, strlen(result->fields[field_offset].name), 1);
-}
-
-/* }}} */
-
-/* {{{ proto string mssql_field_type(resource result_id [, int offset])
- Returns the type of a field */
-PHP_FUNCTION(mssql_field_type)
-{
- zval **mssql_result_index, **offset;
- int field_offset;
- mssql_result *result;
-
- switch (ZEND_NUM_ARGS()) {
- case 1:
- if (zend_get_parameters_ex(1, &mssql_result_index)==FAILURE) {
- RETURN_FALSE;
- }
- field_offset=-1;
- break;
- case 2:
- if (zend_get_parameters_ex(2, &mssql_result_index, &offset)==FAILURE) {
- RETURN_FALSE;
- }
- convert_to_long_ex(offset);
- field_offset = Z_LVAL_PP(offset);
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
-
- ZEND_FETCH_RESOURCE(result, mssql_result *, mssql_result_index, -1, "MS SQL-result", le_result);
-
- if (field_offset==-1) {
- field_offset = result->cur_field;
- result->cur_field++;
- }
-
- if (field_offset<0 || field_offset >= result->num_fields) {
- if (ZEND_NUM_ARGS()==2) { /* field specified explicitly */
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Bad column offset");
- }
- RETURN_FALSE;
- }
-
- RETURN_STRINGL(php_mssql_get_field_name(Z_TYPE(result->fields[field_offset])), strlen(php_mssql_get_field_name(Z_TYPE(result->fields[field_offset]))), 1);
-}
-
-/* }}} */
-
-/* {{{ proto bool mssql_field_seek(int result_id, int offset)
- Seeks to the specified field offset */
-PHP_FUNCTION(mssql_field_seek)
-{
- zval **mssql_result_index, **offset;
- int field_offset;
- mssql_result *result;
-
- if (ZEND_NUM_ARGS()!=2 || zend_get_parameters_ex(2, &mssql_result_index, &offset)==FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(result, mssql_result *, mssql_result_index, -1, "MS SQL-result", le_result);
-
- convert_to_long_ex(offset);
- field_offset = Z_LVAL_PP(offset);
-
- if (field_offset<0 || field_offset >= result->num_fields) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Bad column offset");
- RETURN_FALSE;
- }
-
- result->cur_field = field_offset;
- RETURN_TRUE;
-}
-
-/* }}} */
-
-/* {{{ proto string mssql_result(resource result_id, int row, mixed field)
- Returns the contents of one cell from a MS-SQL result set */
-PHP_FUNCTION(mssql_result)
-{
- zval **row, **field, **mssql_result_index;
- int field_offset=0;
- mssql_result *result;
-
- if (ZEND_NUM_ARGS()!=3 || zend_get_parameters_ex(3, &mssql_result_index, &row, &field)==FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(result, mssql_result *, mssql_result_index, -1, "MS SQL-result", le_result);
-
- convert_to_long_ex(row);
- if (Z_LVAL_PP(row) < 0 || Z_LVAL_PP(row) >= result->num_rows) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Bad row offset (%ld)", Z_LVAL_PP(row));
- RETURN_FALSE;
- }
-
- switch(Z_TYPE_PP(field)) {
- case IS_STRING: {
- int i;
-
- for (i=0; i<result->num_fields; i++) {
- if (!strcasecmp(result->fields[i].name, Z_STRVAL_PP(field))) {
- field_offset = i;
- break;
- }
- }
- if (i>=result->num_fields) { /* no match found */
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s field not found in result", Z_STRVAL_PP(field));
- RETURN_FALSE;
- }
- break;
- }
- default:
- convert_to_long_ex(field);
- field_offset = Z_LVAL_PP(field);
- if (field_offset<0 || field_offset>=result->num_fields) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Bad column offset specified");
- RETURN_FALSE;
- }
- break;
- }
-
- *return_value = result->data[Z_LVAL_PP(row)][field_offset];
- ZVAL_COPY_CTOR(return_value);
-}
-/* }}} */
-
-/* {{{ proto bool mssql_next_result(resource result_id)
- Move the internal result pointer to the next result */
-PHP_FUNCTION(mssql_next_result)
-{
- zval **mssql_result_index;
- int retvalue;
- mssql_result *result;
- mssql_link *mssql_ptr;
-
- if (ZEND_NUM_ARGS()!=1 || zend_get_parameters_ex(1, &mssql_result_index)==FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(result, mssql_result *, mssql_result_index, -1, "MS SQL-result", le_result);
-
- mssql_ptr = result->mssql_ptr;
- retvalue = dbresults(mssql_ptr->link);
- if (retvalue == FAIL) {
- RETURN_FALSE;
- }
- else if (retvalue == NO_MORE_RESULTS || retvalue == NO_MORE_RPC_RESULTS) {
- if (result->statement) {
- _mssql_get_sp_result(mssql_ptr, result->statement TSRMLS_CC);
- }
- RETURN_FALSE;
- }
- else {
- _free_result(result, 1);
- result->cur_row=result->num_fields=result->num_rows=0;
- dbclrbuf(mssql_ptr->link,DBLASTROW(mssql_ptr->link));
- retvalue = dbnextrow(mssql_ptr->link);
-
- result->num_fields = dbnumcols(mssql_ptr->link);
- result->fields = (mssql_field *) safe_emalloc(sizeof(mssql_field), result->num_fields, 0);
- result->num_rows = _mssql_fetch_batch(mssql_ptr, result, retvalue TSRMLS_CC);
- RETURN_TRUE;
- }
-
-}
-/* }}} */
-
-
-/* {{{ proto void mssql_min_error_severity(int severity)
- Sets the lower error severity */
-PHP_FUNCTION(mssql_min_error_severity)
-{
- zval **severity;
-
- if (ZEND_NUM_ARGS()!=1 || zend_get_parameters_ex(1, &severity)==FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long_ex(severity);
- MS_SQL_G(min_error_severity) = Z_LVAL_PP(severity);
-}
-
-/* }}} */
-
-/* {{{ proto void mssql_min_message_severity(int severity)
- Sets the lower message severity */
-PHP_FUNCTION(mssql_min_message_severity)
-{
- zval **severity;
-
- if (ZEND_NUM_ARGS()!=1 || zend_get_parameters_ex(1, &severity)==FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long_ex(severity);
- MS_SQL_G(min_message_severity) = Z_LVAL_PP(severity);
-}
-/* }}} */
-
-/* {{{ proto int mssql_init(string sp_name [, resource conn_id])
- Initializes a stored procedure or a remote stored procedure */
-PHP_FUNCTION(mssql_init)
-{
- zval **sp_name, **mssql_link_index;
- mssql_link *mssql_ptr;
- mssql_statement *statement;
- int id;
-
- switch(ZEND_NUM_ARGS()) {
- case 1:
- if (zend_get_parameters_ex(1, &sp_name)==FAILURE) {
- RETURN_FALSE;
- }
- id = php_mssql_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU);
- CHECK_LINK(id);
- break;
-
- case 2:
- if (zend_get_parameters_ex(2, &sp_name, &mssql_link_index)==FAILURE) {
- RETURN_FALSE;
- }
- id = -1;
- break;
-
- default:
- WRONG_PARAM_COUNT;
- break;
- }
-
- ZEND_FETCH_RESOURCE2(mssql_ptr, mssql_link *, mssql_link_index, id, "MS SQL-Link", le_link, le_plink);
-
- convert_to_string_ex(sp_name);
-
- if (dbrpcinit(mssql_ptr->link, Z_STRVAL_PP(sp_name),0)==FAIL) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "unable to init stored procedure");
- RETURN_FALSE;
- }
-
- statement=NULL;
- statement = ecalloc(1,sizeof(mssql_statement));
- statement->link = mssql_ptr;
- statement->executed=FALSE;
-
- statement->id = zend_list_insert(statement,le_statement);
-
- RETURN_RESOURCE(statement->id);
-}
-/* }}} */
-
-/* {{{ proto bool mssql_bind(resource stmt, string param_name, mixed var, int type [, int is_output [, int is_null [, int maxlen]]])
- Adds a parameter to a stored procedure or a remote stored procedure */
-PHP_FUNCTION(mssql_bind)
-{
- int type, is_output, is_null, datalen, maxlen = -1;
- zval **stmt, **param_name, **var, **yytype;
- mssql_link *mssql_ptr;
- mssql_statement *statement;
- mssql_bind bind,*bindp;
- int status = 0;
- LPBYTE value = NULL;
-
- /* BEGIN input validation */
- switch(ZEND_NUM_ARGS()) {
- case 4:
- if (zend_get_parameters_ex(4, &stmt, &param_name, &var, &yytype)==FAILURE) {
- RETURN_FALSE;
- }
- convert_to_long_ex(yytype);
- type=Z_LVAL_PP(yytype);
- is_null=FALSE;
- is_output=FALSE;
- break;
-
- case 5: {
- zval **yyis_output;
-
- if (zend_get_parameters_ex(5, &stmt, &param_name, &var, &yytype, &yyis_output)==FAILURE) {
- RETURN_FALSE;
- }
- convert_to_long_ex(yytype);
- convert_to_long_ex(yyis_output);
- type=Z_LVAL_PP(yytype);
- is_null=FALSE;
- is_output=Z_LVAL_PP(yyis_output);
- }
- break;
-
- case 6: {
- zval **yyis_output, **yyis_null;
-
- if (zend_get_parameters_ex(6, &stmt, &param_name, &var, &yytype, &yyis_output, &yyis_null)==FAILURE) {
- RETURN_FALSE;
- }
- convert_to_long_ex(yytype);
- convert_to_long_ex(yyis_output);
- convert_to_long_ex(yyis_null);
- type=Z_LVAL_PP(yytype);
- is_output=Z_LVAL_PP(yyis_output);
- is_null=Z_LVAL_PP(yyis_null);
- }
- break;
-
- case 7: {
- zval **yyis_output, **yyis_null, **yymaxlen;
-
- if (zend_get_parameters_ex(7, &stmt, &param_name, &var, &yytype, &yyis_output, &yyis_null, &yymaxlen)==FAILURE) {
- RETURN_FALSE;
- }
- convert_to_long_ex(yytype);
- convert_to_long_ex(yyis_output);
- convert_to_long_ex(yyis_null);
- convert_to_long_ex(yymaxlen);
- type=Z_LVAL_PP(yytype);
- is_output=Z_LVAL_PP(yyis_output);
- is_null=Z_LVAL_PP(yyis_null);
- maxlen=Z_LVAL_PP(yymaxlen);
- }
- break;
-
- default:
- WRONG_PARAM_COUNT;
- break;
- }
- /* END input validation */
-
- ZEND_FETCH_RESOURCE(statement, mssql_statement *, stmt, -1, "MS SQL-Statement", le_statement);
- if (statement==NULL) {
- RETURN_FALSE;
- }
- mssql_ptr=statement->link;
-
- /* modify datalen and maxlen according to dbrpcparam documentation */
- if ( (type==SQLVARCHAR) || (type==SQLCHAR) || (type==SQLTEXT) ) { /* variable-length type */
- if (is_null) {
- maxlen=0;
- datalen=0;
- }
- else {
- convert_to_string_ex(var);
- datalen=Z_STRLEN_PP(var);
- value=(LPBYTE)Z_STRVAL_PP(var);
- }
- }
- else { /* fixed-length type */
- if (is_null) {
- datalen=0;
- }
- else {
- datalen=-1;
- }
- maxlen=-1;
-
- switch (type) {
-
- case SQLFLT4:
- case SQLFLT8:
- case SQLFLTN:
- convert_to_double_ex(var);
- value=(LPBYTE)(&Z_DVAL_PP(var));
- break;
-
- case SQLBIT:
- case SQLINT1:
- case SQLINT2:
- case SQLINT4:
- convert_to_long_ex(var);
- value=(LPBYTE)(&Z_LVAL_PP(var));
- break;
-
- default:
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "unsupported type");
- RETURN_FALSE;
- break;
- }
- }
-
- convert_to_string_ex(param_name);
-
- if (is_output) {
- status=DBRPCRETURN;
- }
-
- /* hashtable of binds */
- if (! statement->binds) {
- ALLOC_HASHTABLE(statement->binds);
- zend_hash_init(statement->binds, 13, NULL, _mssql_bind_hash_dtor, 0);
- }
-
- memset((void*)&bind,0,sizeof(mssql_bind));
- zend_hash_add(statement->binds,Z_STRVAL_PP(param_name),Z_STRLEN_PP(param_name),&bind,sizeof(mssql_bind),(void **)&bindp);
- if( NULL == bindp ) RETURN_FALSE;
- bindp->zval=*var;
- zval_add_ref(var);
-
- /* no call to dbrpcparam if RETVAL */
- if ( strcmp("RETVAL",Z_STRVAL_PP(param_name))!=0 ) {
- if (dbrpcparam(mssql_ptr->link, Z_STRVAL_PP(param_name), (BYTE)status, type, maxlen, datalen, (LPBYTE)value)==FAIL) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to set parameter");
- RETURN_FALSE;
- }
- }
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto mixed mssql_execute(resource stmt [, bool skip_results = false])
- Executes a stored procedure on a MS-SQL server database */
-PHP_FUNCTION(mssql_execute)
-{
- zval **stmt, **skip;
- zend_bool skip_results = 0;
- int retvalue, retval_results;
- mssql_link *mssql_ptr;
- mssql_statement *statement;
- mssql_result *result;
- int num_fields;
- int batchsize;
- int ac = ZEND_NUM_ARGS();
-
- batchsize = MS_SQL_G(batchsize);
- if (ac < 1 || ac > 2 || zend_get_parameters_ex(ac, &stmt, &skip)==FAILURE) {
- WRONG_PARAM_COUNT;
- }
- if (ac == 2) {
- skip_results = Z_BVAL_PP(skip);
- }
-
- ZEND_FETCH_RESOURCE(statement, mssql_statement *, stmt, -1, "MS SQL-Statement", le_statement);
-
- mssql_ptr=statement->link;
-
- if (dbrpcexec(mssql_ptr->link)==FAIL || dbsqlok(mssql_ptr->link)==FAIL) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "stored procedure execution failed");
- RETURN_FALSE;
- }
-
- retval_results=dbresults(mssql_ptr->link);
-
- if (retval_results==FAIL) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "could not retrieve results");
- RETURN_FALSE;
- }
-
- /* The following is just like mssql_query, fetch all rows from the first result
- * set into the row buffer.
- */
- result=NULL;
- if (retval_results == SUCCEED) {
- if (skip_results) {
- do {
- dbcanquery(mssql_ptr->link);
- retval_results = dbresults(mssql_ptr->link);
- } while (retval_results == SUCCEED);
- }
- else {
- /* Skip results not returning any columns */
- while ((num_fields = dbnumcols(mssql_ptr->link)) <= 0 && retval_results == SUCCEED) {
- retval_results = dbresults(mssql_ptr->link);
- }
- if ((num_fields = dbnumcols(mssql_ptr->link)) > 0) {
- retvalue = dbnextrow(mssql_ptr->link);
- result = (mssql_result *) emalloc(sizeof(mssql_result));
- result->batchsize = batchsize;
- result->blocks_initialized = 1;
- result->data = (zval **) safe_emalloc(sizeof(zval *), MSSQL_ROWS_BLOCK, 0);
- result->mssql_ptr = mssql_ptr;
- result->cur_field=result->cur_row=result->num_rows=0;
- result->num_fields = num_fields;
-
- result->fields = (mssql_field *) safe_emalloc(sizeof(mssql_field), num_fields, 0);
- result->statement = statement;
- result->num_rows = _mssql_fetch_batch(mssql_ptr, result, retvalue TSRMLS_CC);
- }
- }
- }
- if (retval_results == NO_MORE_RESULTS || retval_results == NO_MORE_RPC_RESULTS) {
- _mssql_get_sp_result(mssql_ptr, statement TSRMLS_CC);
- }
-
- if (result==NULL) {
- RETURN_TRUE; /* no recordset returned ...*/
- }
- else {
- ZEND_REGISTER_RESOURCE(return_value, result, le_result);
- }
-}
-/* }}} */
-
-/* {{{ proto bool mssql_free_statement(resource result_index)
- Free a MS-SQL statement index */
-PHP_FUNCTION(mssql_free_statement)
-{
- zval **mssql_statement_index;
- mssql_statement *statement;
- int retvalue;
-
- if (ZEND_NUM_ARGS()!=1 || zend_get_parameters_ex(1, &mssql_statement_index)==FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- if (Z_TYPE_PP(mssql_statement_index)==IS_RESOURCE && Z_LVAL_PP(mssql_statement_index)==0) {
- RETURN_FALSE;
- }
-
- ZEND_FETCH_RESOURCE(statement, mssql_statement *, mssql_statement_index, -1, "MS SQL-statement", le_statement);
- /* Release remaining results */
- do {
- dbcanquery(statement->link->link);
- retvalue = dbresults(statement->link->link);
- } while (retvalue == SUCCEED);
-
- zend_list_delete(Z_RESVAL_PP(mssql_statement_index));
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto string mssql_guid_string(string binary [,int short_format])
- Converts a 16 byte binary GUID to a string */
-PHP_FUNCTION(mssql_guid_string)
-{
- zval **binary, **short_format;
- int sf = 0;
- char buffer[32+1];
- char buffer2[36+1];
-
- switch(ZEND_NUM_ARGS()) {
- case 1:
- if (zend_get_parameters_ex(1, &binary)==FAILURE) {
- RETURN_FALSE;
- }
- convert_to_string_ex(binary);
- break;
- case 2:
- if (zend_get_parameters_ex(2, &binary, &short_format)==FAILURE) {
- RETURN_FALSE;
- }
- convert_to_string_ex(binary);
- convert_to_long_ex(short_format);
- sf = Z_LVAL_PP(short_format);
- break;
-
- default:
- WRONG_PARAM_COUNT;
- break;
- }
-
- dbconvert(NULL, SQLBINARY, (BYTE*)Z_STRVAL_PP(binary), 16, SQLCHAR, buffer, -1);
-
- if (sf) {
- php_strtoupper(buffer, 32);
- RETURN_STRING(buffer, 1);
- }
- else {
- int i;
- for (i=0; i<4; i++) {
- buffer2[2*i] = buffer[6-2*i];
- buffer2[2*i+1] = buffer[7-2*i];
- }
- buffer2[8] = '-';
- for (i=0; i<2; i++) {
- buffer2[9+2*i] = buffer[10-2*i];
- buffer2[10+2*i] = buffer[11-2*i];
- }
- buffer2[13] = '-';
- for (i=0; i<2; i++) {
- buffer2[14+2*i] = buffer[14-2*i];
- buffer2[15+2*i] = buffer[15-2*i];
- }
- buffer2[18] = '-';
- for (i=0; i<4; i++) {
- buffer2[19+i] = buffer[16+i];
- }
- buffer2[23] = '-';
- for (i=0; i<12; i++) {
- buffer2[24+i] = buffer[20+i];
- }
- buffer2[36] = 0;
-
- php_strtoupper(buffer2, 36);
- RETURN_STRING(buffer2, 1);
- }
-}
-/* }}} */
-
-#endif
diff --git a/ext/mssql/php_mssql.h b/ext/mssql/php_mssql.h
deleted file mode 100644
index 65e6a931fa..0000000000
--- a/ext/mssql/php_mssql.h
+++ /dev/null
@@ -1,209 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Frank M. Kromann <frank@kromann.info> |
- +----------------------------------------------------------------------+
- */
-
-
-/* $Id$ */
-
-#ifndef PHP_MSSQL_H
-#define PHP_MSSQL_H
-
-
-#if HAVE_MSSQL
-#define MSDBLIB
-#ifdef PHP_WIN32
-#define PHP_MSSQL_API __declspec(dllexport)
-#else
-#define PHP_MSSQL_API
-#endif
-
-
-#define MSSQL_VERSION "7.0"
-#include "sqlfront.h"
-#include "sqldb.h"
-
-typedef short TDS_SHORT;
-#if HAVE_FREETDS
-#define SQLTEXT SYBTEXT
-#define SQLCHAR SYBCHAR
-#define SQLVARCHAR SYBVARCHAR
-#define SQLINT1 SYBINT1
-#define SQLINT2 SYBINT2
-#define SQLINT4 SYBINT4
-#define SQLINTN SYBINTN
-#define SQLBIT SYBBIT
-#define SQLFLT4 SYBREAL
-#define SQLFLT8 SYBFLT8
-#define SQLFLTN SYBFLTN
-#define SQLDECIMAL SYBDECIMAL
-#define SQLNUMERIC SYBNUMERIC
-#define SQLDATETIME SYBDATETIME
-#define SQLDATETIM4 SYBDATETIME4
-#define SQLDATETIMN SYBDATETIMN
-#define SQLMONEY SYBMONEY
-#define SQLMONEY4 SYBMONEY4
-#define SQLMONEYN SYBMONEYN
-#define SQLIMAGE SYBIMAGE
-#define SQLBINARY SYBBINARY
-#define SQLVARBINARY SYBVARBINARY
-#ifdef SQLUNIQUE /* FreeTSD 0.61+ */
-#define SQLUNIQUE SYBUNIQUE
-#endif
-#define DBERRHANDLE(a, b) dberrhandle(b)
-#define DBMSGHANDLE(a, b) dbmsghandle(b)
-#define DBSETOPT(a, b, c) dbsetopt(a, b, c, -1)
-#define NO_MORE_RPC_RESULTS 3
-#define dbfreelogin dbloginfree
-#define dbrpcexec dbrpcsend
-typedef unsigned char *LPBYTE;
-typedef float DBFLT4;
-#else
-#define DBERRHANDLE(a, b) dbprocerrhandle(a, b)
-#define DBMSGHANDLE(a, b) dbprocmsghandle(a, b)
-#define EHANDLEFUNC DBERRHANDLE_PROC
-#define MHANDLEFUNC DBMSGHANDLE_PROC
-#define DBSETOPT(a, b, c) dbsetopt(a, b, c)
-#endif
-
-#define coltype(j) dbcoltype(mssql_ptr->link,j)
-#define intcol(i) ((int) *(DBINT *) dbdata(mssql_ptr->link,i))
-#define smallintcol(i) ((int) *(DBSMALLINT *) dbdata(mssql_ptr->link,i))
-#define tinyintcol(i) ((int) *(DBTINYINT *) dbdata(mssql_ptr->link,i))
-#define anyintcol(j) (coltype(j)==SQLINT4?intcol(j):(coltype(j)==SQLINT2?smallintcol(j):tinyintcol(j)))
-#define charcol(i) ((DBCHAR *) dbdata(mssql_ptr->link,i))
-#define floatcol4(i) (*(DBFLT4 *) dbdata(mssql_ptr->link,i))
-#define floatcol8(i) (*(DBFLT8 *) dbdata(mssql_ptr->link,i))
-
-#ifdef ZTS
-#include "TSRM.h"
-#endif
-
-extern zend_module_entry mssql_module_entry;
-#define mssql_module_ptr &mssql_module_entry
-
-PHP_MINIT_FUNCTION(mssql);
-PHP_MSHUTDOWN_FUNCTION(mssql);
-PHP_RINIT_FUNCTION(mssql);
-PHP_RSHUTDOWN_FUNCTION(mssql);
-PHP_MINFO_FUNCTION(mssql);
-
-PHP_FUNCTION(mssql_connect);
-PHP_FUNCTION(mssql_pconnect);
-PHP_FUNCTION(mssql_close);
-PHP_FUNCTION(mssql_select_db);
-PHP_FUNCTION(mssql_query);
-PHP_FUNCTION(mssql_fetch_batch);
-PHP_FUNCTION(mssql_rows_affected);
-PHP_FUNCTION(mssql_free_result);
-PHP_FUNCTION(mssql_get_last_message);
-PHP_FUNCTION(mssql_num_rows);
-PHP_FUNCTION(mssql_num_fields);
-PHP_FUNCTION(mssql_fetch_field);
-PHP_FUNCTION(mssql_fetch_row);
-PHP_FUNCTION(mssql_fetch_array);
-PHP_FUNCTION(mssql_fetch_assoc);
-PHP_FUNCTION(mssql_fetch_object);
-PHP_FUNCTION(mssql_field_length);
-PHP_FUNCTION(mssql_field_name);
-PHP_FUNCTION(mssql_field_type);
-PHP_FUNCTION(mssql_data_seek);
-PHP_FUNCTION(mssql_field_seek);
-PHP_FUNCTION(mssql_result);
-PHP_FUNCTION(mssql_next_result);
-PHP_FUNCTION(mssql_min_error_severity);
-PHP_FUNCTION(mssql_min_message_severity);
-PHP_FUNCTION(mssql_init);
-PHP_FUNCTION(mssql_bind);
-PHP_FUNCTION(mssql_execute);
-PHP_FUNCTION(mssql_free_statement);
-PHP_FUNCTION(mssql_guid_string);
-
-typedef struct mssql_link {
- LOGINREC *login;
- DBPROCESS *link;
- int valid;
-} mssql_link;
-
-typedef struct mssql_statement {
- int id;
- mssql_link *link;
- HashTable *binds;
- int executed;
-} mssql_statement;
-
-typedef struct {
-
- zval *zval;
- /* TODO: more data for special types (BLOBS, NUMERIC...) */
-} mssql_bind;
-
-ZEND_BEGIN_MODULE_GLOBALS(mssql)
- long default_link;
- long num_links,num_persistent;
- long max_links,max_persistent;
- zend_bool allow_persistent;
- char *appname;
- char *server_message;
- long min_error_severity, min_message_severity;
- long cfg_min_error_severity, cfg_min_message_severity;
- long connect_timeout, timeout;
- zend_bool compatability_mode;
- void (*get_column_content)(mssql_link *mssql_ptr,int offset,pval *result,int column_type TSRMLS_DC);
- long textsize, textlimit, batchsize;
- zend_bool datetimeconvert;
- HashTable *resource_list, *resource_plist;
- zend_bool secure_connection;
- long max_procs;
-ZEND_END_MODULE_GLOBALS(mssql)
-
-#define MSSQL_ROWS_BLOCK 128
-
-typedef struct mssql_field {
- char *name,*column_source;
- long max_length;
- int numeric;
- int type;
-} mssql_field;
-
-typedef struct mssql_result {
- pval **data;
- mssql_field *fields;
- mssql_link *mssql_ptr;
- mssql_statement * statement;
- int batchsize;
- int lastresult;
- int blocks_initialized;
- int cur_row,cur_field;
- int num_rows,num_fields;
-} mssql_result;
-
-
-#ifdef ZTS
-# define MS_SQL_G(v) TSRMG(mssql_globals_id, zend_mssql_globals *, v)
-#else
-# define MS_SQL_G(v) (mssql_globals.v)
-#endif
-
-#else
-
-#define mssql_module_ptr NULL
-
-#endif /* HAVE_MSSQL */
-
-#define phpext_mssql_ptr mssql_module_ptr
-
-#endif /* PHP_MSSQL_H */
diff --git a/ext/mysql/CREDITS b/ext/mysql/CREDITS
deleted file mode 100644
index e5a6208bab..0000000000
--- a/ext/mysql/CREDITS
+++ /dev/null
@@ -1,2 +0,0 @@
-MySQL
-Zeev Suraski, Zak Greant, Georg Richter
diff --git a/ext/mysql/config.m4 b/ext/mysql/config.m4
deleted file mode 100644
index 8bf0a6a879..0000000000
--- a/ext/mysql/config.m4
+++ /dev/null
@@ -1,131 +0,0 @@
-dnl
-dnl $Id$
-dnl
-
-AC_DEFUN(MYSQL_LIB_CHK, [
- str="$MYSQL_DIR/$1/libmysqlclient.*"
- for j in `echo $str`; do
- if test -r $j; then
- MYSQL_LIB_DIR=$MYSQL_DIR/$1
- break 2
- fi
- done
-])
-
-AC_DEFUN(PHP_MYSQL_SOCKET_SEARCH, [
- for i in \
- /var/run/mysqld/mysqld.sock \
- /var/tmp/mysql.sock \
- /var/run/mysql/mysql.sock \
- /var/lib/mysql/mysql.sock \
- /var/mysql/mysql.sock \
- /usr/local/mysql/var/mysql.sock \
- /Private/tmp/mysql.sock \
- /private/tmp/mysql.sock \
- /tmp/mysql.sock \
- ; do
- if test -r $i; then
- MYSQL_SOCK=$i
- break 2
- fi
- done
-
- if test -n "$MYSQL_SOCK"; then
- AC_DEFINE_UNQUOTED(MYSQL_UNIX_ADDR, "$MYSQL_SOCK", [ ])
- AC_MSG_RESULT([$MYSQL_SOCK])
- else
- AC_MSG_RESULT([no])
- fi
-])
-
-
-PHP_ARG_WITH(mysql, for MySQL support,
-[ --with-mysql[=DIR] Include MySQL support. DIR is the MySQL base directory.])
-
-PHP_ARG_WITH(mysql-sock, for specified location of the MySQL UNIX socket,
-[ --with-mysql-sock[=DIR] MySQL: Location of the MySQL unix socket pointer.
- If unspecified, the default locations are searched.], no, no)
-
-if test -z "$PHP_ZLIB_DIR"; then
- PHP_ARG_WITH(zlib-dir, for the location of libz,
- [ --with-zlib-dir[=DIR] MySQL: Set the path to libz install prefix.], no, no)
-fi
-
-
-if test "$PHP_MYSQL" != "no"; then
- AC_DEFINE(HAVE_MYSQL, 1, [Whether you have MySQL])
-
- AC_MSG_CHECKING([for MySQL UNIX socket location])
- if test "$PHP_MYSQL_SOCK" != "no" && test "$PHP_MYSQL_SOCK" != "yes"; then
- MYSQL_SOCK=$PHP_MYSQL_SOCK
- AC_DEFINE_UNQUOTED(MYSQL_UNIX_ADDR, "$MYSQL_SOCK", [ ])
- AC_MSG_RESULT([$MYSQL_SOCK])
- elif test "$PHP_MYSQL" = "yes" || test "$PHP_MYSQL_SOCK" = "yes"; then
- PHP_MYSQL_SOCKET_SEARCH
- else
- AC_MSG_RESULT([no])
- fi
-
- for i in $PHP_MYSQL /usr/local /usr; do
- if test -r $i/include/mysql/mysql.h; then
- MYSQL_DIR=$i
- MYSQL_INC_DIR=$i/include/mysql
- break
- elif test -r $i/include/mysql.h; then
- MYSQL_DIR=$i
- MYSQL_INC_DIR=$i/include
- break
- fi
- done
-
- if test -z "$MYSQL_DIR"; then
- AC_MSG_ERROR([Cannot find MySQL header files under $PHP_MYSQL.
-Note that the MySQL client library is not bundled anymore.])
- fi
-
- for i in lib lib/mysql; do
- MYSQL_LIB_CHK($i)
- done
-
- if test -z "$MYSQL_LIB_DIR"; then
- AC_MSG_ERROR([Cannot find libmysqlclient under $MYSQL_DIR.
-Note that the MySQL client library is not bundled anymore.])
- fi
-
- PHP_CHECK_LIBRARY(mysqlclient, mysql_close, [ ],
- [
- if test "$PHP_ZLIB_DIR" != "no"; then
- PHP_ADD_LIBRARY_WITH_PATH(z, $PHP_ZLIB_DIR, MYSQL_SHARED_LIBADD)
- PHP_CHECK_LIBRARY(mysqlclient, mysql_error, [], [
- AC_MSG_ERROR([mysql configure failed. Please check config.log for more information.])
- ], [
- -L$PHP_ZLIB_DIR/lib -L$MYSQL_LIB_DIR
- ])
- MYSQL_LIBS="-L$PHP_ZLIB_DIR/lib -lz"
- else
- PHP_ADD_LIBRARY(z,, MYSQL_SHARED_LIBADD)
- PHP_CHECK_LIBRARY(mysqlclient, mysql_errno, [], [
- AC_MSG_ERROR([Try adding --with-zlib-dir=<DIR>. Please check config.log for more information.])
- ], [
- -L$MYSQL_LIB_DIR
- ])
- MYSQL_LIBS="-lz"
- fi
- ], [
- -L$MYSQL_LIB_DIR
- ])
-
- PHP_ADD_LIBRARY_WITH_PATH(mysqlclient, $MYSQL_LIB_DIR, MYSQL_SHARED_LIBADD)
- PHP_ADD_INCLUDE($MYSQL_INC_DIR)
-
- PHP_NEW_EXTENSION(mysql, php_mysql.c, $ext_shared)
-
- MYSQL_MODULE_TYPE=external
- MYSQL_LIBS="-L$MYSQL_LIB_DIR -lmysqlclient $MYSQL_LIBS"
- MYSQL_INCLUDE=-I$MYSQL_INC_DIR
-
- PHP_SUBST(MYSQL_SHARED_LIBADD)
- PHP_SUBST_OLD(MYSQL_MODULE_TYPE)
- PHP_SUBST_OLD(MYSQL_LIBS)
- PHP_SUBST_OLD(MYSQL_INCLUDE)
-fi
diff --git a/ext/mysql/config.w32 b/ext/mysql/config.w32
deleted file mode 100644
index 87d044d753..0000000000
--- a/ext/mysql/config.w32
+++ /dev/null
@@ -1,14 +0,0 @@
-// $Id$
-// vim:ft=javascript
-
-ARG_WITH("mysql", "MySQL support", "no");
-
-if (PHP_MYSQL != "no") {
- if (CHECK_LIB("libmysql.lib", "mysql", PHP_MYSQL) &&
- CHECK_HEADER_ADD_INCLUDE("mysql.h", "CFLAGS_MYSQL", PHP_PHP_BUILD + "\\include\\mysql;" + PHP_MYSQL)) {
- EXTENSION("mysql", "php_mysql.c");
- AC_DEFINE('HAVE_MYSQL', 1, 'Have MySQL library');
- } else {
- WARNING("mysql not enabled; libraries and headers not found");
- }
-}
diff --git a/ext/mysql/mysql.dsp b/ext/mysql/mysql.dsp
deleted file mode 100644
index dfc9c63db5..0000000000
--- a/ext/mysql/mysql.dsp
+++ /dev/null
@@ -1,171 +0,0 @@
-# Microsoft Developer Studio Project File - Name="mysql" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=mysql - Win32 Debug_TS
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "mysql.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "mysql.mak" CFG="mysql - Win32 Debug_TS"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "mysql - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "mysql - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "mysql - Win32 Debug_TS" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "mysql - Win32 Release_TS" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "mysql - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release"
-# PROP Intermediate_Dir "Release"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "MYSQL_EXPORTS" /YX /FD /c
-# ADD CPP /nologo /MT /W3 /GX /O2 /I "..\.." /I "..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\..\MySQL\include" /I "..\..\TSRM" /D "NDEBUG" /D "MYSQL_EXPORTS" /D "COMPILE_DL_MYSQL" /D HAVE_MYSQL=1 /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "ZEND_WIN32" /D "PHP_WIN32" /D "COMPILE_DL_MYSQL" /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x40d /d "NDEBUG"
-# ADD RSC /l 0x40d /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386
-# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib libmySQL.lib php5nts.lib /nologo /dll /machine:I386 /out:"Release/php_mysql.dll" /libpath:"..\..\..\MySQL\lib\opt" /libpath:"..\..\Release"
-
-!ELSEIF "$(CFG)" == "mysql - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug"
-# PROP Intermediate_Dir "Debug"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "MYSQL_EXPORTS" /YX /FD /GZ /c
-# ADD CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /I "..\.." /I "..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\..\MySQL\include" /I "..\..\TSRM" /D "_DEBUG" /D ZEND_DEBUG=1 /D "MYSQL_EXPORTS" /D "COMPILE_DL_MYSQL" /D HAVE_MYSQL=1 /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "ZEND_WIN32" /D "PHP_WIN32" /D "COMPILE_DL_MYSQL" /FR /YX /FD /GZ /c
-# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x40d /d "_DEBUG"
-# ADD RSC /l 0x40d /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib libmySQL.lib php5nts_debug.lib /nologo /dll /debug /machine:I386 /out:"Debug/php_mysql.dll" /pdbtype:sept /libpath:"..\..\..\MySQL\lib\Debug" /libpath:"..\..\Debug"
-
-!ELSEIF "$(CFG)" == "mysql - Win32 Debug_TS"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug_TS"
-# PROP BASE Intermediate_Dir "Debug_TS"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug_TS"
-# PROP Intermediate_Dir "Debug_TS"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /I "..\.." /I "..\..\..\Zend" /I "..\..\..\bindlib_w32" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "MYSQL_EXPORTS" /D "COMPILE_DL_MYSQL" /D HAVE_MYSQL=1 /FR /YX /FD /GZ /c
-# ADD CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /I "..\.." /I "..\..\main" /I "..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\..\MySQL\include" /I "..\..\TSRM" /D "_DEBUG" /D ZEND_DEBUG=1 /D "ZTS" /D "MYSQL_EXPORTS" /D "COMPILE_DL_MYSQL" /D HAVE_MYSQL=1 /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "ZEND_WIN32" /D "PHP_WIN32" /D "COMPILE_DL_MYSQL" /FR /YX /FD /GZ /c
-# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x40d /d "_DEBUG"
-# ADD RSC /l 0x40d /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 php5ts_debug.lib libmySQL.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /out:"..\..\Debug_TS/php_mysql.dll" /pdbtype:sept /libpath:"..\..\..\MySQL\lib\Debug" /libpath:"..\..\Debug_TS"
-
-!ELSEIF "$(CFG)" == "mysql - Win32 Release_TS"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release_TS"
-# PROP BASE Intermediate_Dir "Release_TS"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release_TS"
-# PROP Intermediate_Dir "Release_TS"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MT /W3 /GX /O2 /I "..\.." /I "..\..\..\Zend" /I "..\..\..\bindlib_w32" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "MYSQL_EXPORTS" /D "COMPILE_DL_MYSQL" /D HAVE_MYSQL=1 /YX /FD /c
-# ADD CPP /nologo /MD /W3 /GX /O2 /I "..\.." /I "..\..\main" /I "..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\..\MySQL\include" /I "..\..\TSRM" /D "NDEBUG" /D ZEND_DEBUG=0 /D "ZTS" /D "MYSQL_EXPORTS" /D "COMPILE_DL_MYSQL" /D HAVE_MYSQL=1 /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "ZEND_WIN32" /D "PHP_WIN32" /D "COMPILE_DL_MYSQL" /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x40d /d "NDEBUG"
-# ADD RSC /l 0x40d /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386
-# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib libmySQL.lib php5ts.lib /nologo /dll /machine:I386 /out:"..\..\Release_TS/php_mysql.dll" /libpath:"..\..\..\MySQL\lib\opt" /libpath:"..\..\Release_TS" /libpath:"..\..\Release_TS_Inline"
-
-!ENDIF
-
-# Begin Target
-
-# Name "mysql - Win32 Release"
-# Name "mysql - Win32 Debug"
-# Name "mysql - Win32 Debug_TS"
-# Name "mysql - Win32 Release_TS"
-# Begin Group "Source Files"
-
-# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
-# Begin Source File
-
-SOURCE=.\php_mysql.c
-# End Source File
-# End Group
-# Begin Group "Header Files"
-
-# PROP Default_Filter "h;hpp;hxx;hm;inl"
-# Begin Source File
-
-SOURCE=.\php_mysql.h
-# End Source File
-# End Group
-# Begin Group "Resource Files"
-
-# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
-# End Group
-# Begin Source File
-
-SOURCE=.\Readme_w32.txt
-# End Source File
-# End Target
-# End Project
diff --git a/ext/mysql/mysql.mak b/ext/mysql/mysql.mak
deleted file mode 100644
index 2ed0f82228..0000000000
--- a/ext/mysql/mysql.mak
+++ /dev/null
@@ -1,169 +0,0 @@
-# Temporarily here -- later may go into some batch file
-# which will set this as an environment variable
-PROJECT_ROOT = ..\..
-
-# Module details
-MODULE_NAME = phpmysql
-MODULE_DESC = "PHP 4.3 - MySQL Extension"
-VMAJ = 3
-VMIN = 0
-VREV = 0
-
-#include the common settings
-include $(PROJECT_ROOT)/netware/common.mif
-
-# MYSQL stuff
-MYSQL_DIR = P:/APPS/script/sw/mysql
-
-# Build type defaults to 'release'
-ifndef BUILD
-BUILD = release
-endif
-
-# Extensions of all input and output files
-.SUFFIXES:
-.SUFFIXES: .nlm .lib .obj .cpp .c .msg .mlc .mdb .xdc .d
-
-# Source files
-C_SRC = php_mysql.c \
- start.c
-
-CPP_SRC_NODIR = $(notdir $(CPP_SRC))
-C_SRC_NODIR = $(notdir $(C_SRC))
-SRC_DIR = $(dir $(CPP_SRC) $(C_SRC))
-
-# Library files
-LIBRARY = $(MYSQL_DIR)/lib/libmysqlclient.lib
-
-# Destination directories and files
-OBJ_DIR = $(BUILD)
-FINAL_DIR = $(BUILD)
-OBJECTS = $(addprefix $(OBJ_DIR)/,$(CPP_SRC_NODIR:.c=.obj) $(C_SRC_NODIR:.c=.obj))
-DEPDS = $(addprefix $(OBJ_DIR)/,$(CPP_SRC_NODIR:.c=.d) $(C_SRC_NODIR:.c=.d))
-
-# Binary file
-ifndef BINARY
- BINARY=$(FINAL_DIR)\$(MODULE_NAME).nlm
-endif
-
-# Compile flags
-C_FLAGS = -c -maxerrors 25 -msgstyle gcc -wchar_t on -bool on -processor Pentium
-C_FLAGS += -nostdinc -nosyspath
-C_FLAGS += -relax_pointers # To remove type-casting errors
-C_FLAGS += -DNETWARE -DZTS -DNEW_LIBC -DUSE_OLD_FUNCTIONS -DCOMPILE_DL_MYSQL=1
-C_FLAGS += -I. -I- -I$(PROJECT_ROOT) -I$(PROJECT_ROOT)/main
-C_FLAGS += -I$(PROJECT_ROOT)/ext/standard -I$(PROJECT_ROOT)/netware
-C_FLAGS += -I$(PROJECT_ROOT)/zend -I$(PROJECT_ROOT)/tsrm
-C_FLAGS += -I$(SDK_DIR)/include -I$(MWCIncludes)
-C_FLAGS += -I$(MYSQL_DIR)/include
-C_FLAGS += -I$(WINSOCK_DIR)/include/nlm -I$(WINSOCK_DIR)/include
-
-
-# Extra stuff based on debug / release builds
-ifeq '$(BUILD)' 'debug'
- SYM_FILE = $(FINAL_DIR)\$(MODULE_NAME).sym
- C_FLAGS += -inline smart -sym on -sym codeview4 -opt off -opt intrinsics -DDEBUGGING -DDKFBPON
- C_FLAGS += -exc cw -DZEND_DEBUG=1
- LD_FLAGS += -sym on -sym codeview4 -osym $(SYM_FILE)
- export MWLibraryFiles=$(SDK_DIR)/imports/libcpre.o;mwcrtld.lib
-else
- C_FLAGS += -opt speed -inline on -inline smart -inline auto -sym off -opt intrinsics
- C_FLAGS += -opt level=4 -DZEND_DEBUG=0
- LD_FLAGS += -sym off
- export MWLibraryFiles=$(SDK_DIR)/imports/libcpre.o;mwcrtl.lib
-endif
-
-
-# Dependencies
-MODULE = LibC \
- phplib
-IMPORT = @$(SDK_DIR)/imports/libc.imp \
- @$(SDK_DIR)/imports/ws2nlm.imp \
- @$(MPK_DIR)/import/mpkOrg.imp \
- @$(PROJECT_ROOT)/netware/phplib.imp
-EXPORT = ($(MODULE_NAME)) get_module
-API = OutputToScreen
-
-# Virtual paths
-vpath %.cpp .
-vpath %.c . ..\..\netware
-vpath %.obj $(OBJ_DIR)
-
-
-all: prebuild project
-
-.PHONY: all
-
-prebuild:
- @if not exist $(OBJ_DIR) md $(OBJ_DIR)
-
-project: $(BINARY)
- @echo Build complete.
-
-$(OBJ_DIR)/%.d: %.cpp
- @echo Building Dependencies for $(<F)
- @$(CC) -M $< $(C_FLAGS) -o $@
-
-$(OBJ_DIR)/%.d: %.c
- @echo Building Dependencies for $(<F)
- @$(CC) -M $< $(C_FLAGS) -o $@
-
-$(OBJ_DIR)/%.obj: %.cpp
- @echo Compiling $?...
- @$(CC) $< $(C_FLAGS) -o $@
-
-$(OBJ_DIR)/%.obj: %.c
- @echo Compiling $?...
- @$(CC) $< $(C_FLAGS) -o $@
-
-
-$(BINARY): $(OBJECTS)
- @echo Import $(IMPORT) > $(basename $@).def
-ifdef API
- @echo Import $(API) >> $(basename $@).def
-endif
- @echo Module $(MODULE) >> $(basename $@).def
-ifdef EXPORT
- @echo Export $(EXPORT) >> $(basename $@).def
-endif
- @echo AutoUnload >> $(basename $@).def
-ifeq '$(BUILD)' 'debug'
- @echo Debug >> $(basename $@).def
-endif
- @echo Flag_On 0x00000008 >> $(basename $@).def
- @echo Start _LibCPrelude >> $(basename $@).def
- @echo Exit _LibCPostlude >> $(basename $@).def
-
- $(MPKTOOL) $(XDCFLAGS) $(basename $@).xdc
- @echo xdcdata $(basename $@).xdc >> $(basename $@).def
-
- @echo Linking $@...
- @echo $(LD_FLAGS) -commandfile $(basename $@).def > $(basename $@).link
- @echo $(LIBRARY) $(OBJECTS) >> $(basename $@).link
- @$(LINK) @$(basename $@).link
-
-
-.PHONY: clean
-clean: cleanobj cleanbin
-
-.PHONY: cleand
-cleand:
- @echo Deleting all dependency files...
- -@del "$(OBJ_DIR)\*.d"
-
-.PHONY: cleanobj
-cleanobj:
- @echo Deleting all object files...
- -@del "$(OBJ_DIR)\*.obj"
-
-.PHONY: cleanbin
-cleanbin:
- @echo Deleting binary files...
- -@del "$(FINAL_DIR)\$(MODULE_NAME).nlm"
- @echo Deleting MAP, DEF files, etc....
- -@del "$(FINAL_DIR)\$(MODULE_NAME).map"
- -@del "$(FINAL_DIR)\$(MODULE_NAME).def"
- -@del "$(FINAL_DIR)\$(MODULE_NAME).link"
-ifeq '$(BUILD)' 'debug'
- -@del $(FINAL_DIR)\$(MODULE_NAME).sym
-endif
diff --git a/ext/mysql/package.xml b/ext/mysql/package.xml
deleted file mode 100644
index f1e0c2c1ad..0000000000
--- a/ext/mysql/package.xml
+++ /dev/null
@@ -1,63 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1" ?>
-<!DOCTYPE package SYSTEM "../pear/package.dtd">
-<package>
- <name>mysqli</name>
- <summary>MySQL database access functions</summary>
- <maintainers>
- <maintainer>
- <user>georg</user>
- <name>Georg Richter</name>
- <email>georg@php.net</email>
- <role>lead</role>
- </maintainer>
- <maintainer>
- <user>zak</user>
- <name>Zak Greant</name>
- <email>zak@php.net</email>
- <role>developer</role>
- </maintainer>
- <maintainer>
- <user>zeev</user>
- <name>Zeev Suraski</name>
- <email>zeev@php.net</email>
- <role>developer</role>
- </maintainer>
- </maintainers>
- <description>
-These functions allow you to access MySQL database servers.
- </description>
- <license>PHP</license>
- <release>
- <state>beta</state>
- <version>5.0.0rc1</version>
- <date>2004-03-19</date>
- <notes>
-package.xml added to support intallation using pear installer
- </notes>
- <configureoptions>
- <configureoption name="with-mysql" default="autodetect" prompt="mysql installation dir?"/>
- <configureoption name="with-mysql-sock" default="autodetect" prompt="MySQL Unix socket?"/>
- <configureoption name="with-zlib-dir" default="autodetect" prompt="zlib installation dir?"/>
- </configureoptions>
- <filelist>
- <file role="src" name="config.m4"/>
- <file role="src" name="config.w32"/>
- <file role="doc" name="CREDITS"/>
- <file role="src" name="mysql.dsp"/>
- <file role="src" name="mysql.mak"/>
- <file role="src" name="php_mysql.c"/>
- <file role="src" name="php_mysql.h"/>
- <file role="test" name="tests/001.phpt"/>
- <file role="test" name="tests/002.phpt"/>
- <file role="test" name="tests/003.phpt"/>
- <file role="test" name="tests/connect.inc"/>
- <file role="test" name="tests/skipif.inc"/>
- </filelist>
- <deps>
- <dep type="php" rel="ge" version="5" />
- </deps>
- </release>
-</package>
-<!--
-vim:et:ts=1:sw=1
--->
diff --git a/ext/mysql/php_mysql.c b/ext/mysql/php_mysql.c
deleted file mode 100644
index f8da8c8ea5..0000000000
--- a/ext/mysql/php_mysql.c
+++ /dev/null
@@ -1,2521 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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. |
- +----------------------------------------------------------------------+
- | Authors: Zeev Suraski <zeev@zend.com> |
- | Zak Greant <zak@mysql.com> |
- | Georg Richter <georg@php.net> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-/* TODO:
- *
- * ? Safe mode implementation
- */
-
-#ifdef HAVE_CONFIG_H
-# include "config.h"
-#endif
-
-#include "php.h"
-#include "php_globals.h"
-#include "ext/standard/info.h"
-#include "ext/standard/php_string.h"
-#include "zend_exceptions.h"
-
-#if HAVE_MYSQL
-
-#ifdef PHP_WIN32
-# include <winsock2.h>
-# define signal(a, b) NULL
-#elif defined(NETWARE)
-# include <sys/socket.h>
-# define signal(a, b) NULL
-#else
-# if HAVE_SIGNAL_H
-# include <signal.h>
-# endif
-# if HAVE_SYS_TYPES_H
-# include <sys/types.h>
-# endif
-# include <netdb.h>
-# include <netinet/in.h>
-#endif
-
-#include <mysql.h>
-#include "php_ini.h"
-#include "php_mysql.h"
-
-/* True globals, no need for thread safety */
-static int le_result, le_link, le_plink;
-
-#ifdef HAVE_MYSQL_REAL_CONNECT
-# ifdef HAVE_ERRMSG_H
-# include <errmsg.h>
-# endif
-#endif
-
-#define SAFE_STRING(s) ((s)?(s):"")
-
-#if MYSQL_VERSION_ID > 32199
-# define mysql_row_length_type unsigned long
-# define HAVE_MYSQL_ERRNO
-#else
-# define mysql_row_length_type unsigned int
-# ifdef mysql_errno
-# define HAVE_MYSQL_ERRNO
-# endif
-#endif
-
-#if MYSQL_VERSION_ID >= 32032
-#define HAVE_GETINFO_FUNCS
-#endif
-
-#if MYSQL_VERSION_ID > 32133 || defined(FIELD_TYPE_TINY)
-#define MYSQL_HAS_TINY
-#endif
-
-#if MYSQL_VERSION_ID >= 32200
-#define MYSQL_HAS_YEAR
-#endif
-
-#define MYSQL_ASSOC 1<<0
-#define MYSQL_NUM 1<<1
-#define MYSQL_BOTH (MYSQL_ASSOC|MYSQL_NUM)
-
-#define MYSQL_USE_RESULT 0
-#define MYSQL_STORE_RESULT 1
-
-#if MYSQL_VERSION_ID < 32224
-#define PHP_MYSQL_VALID_RESULT(mysql) \
- (mysql_num_fields(mysql)>0)
-#else
-#define PHP_MYSQL_VALID_RESULT(mysql) \
- (mysql_field_count(mysql)>0)
-#endif
-
-typedef struct _php_mysql_conn {
- MYSQL conn;
- int active_result_id;
-} php_mysql_conn;
-
-/* {{{ mysql_functions[]
- */
-function_entry mysql_functions[] = {
- PHP_FE(mysql_connect, NULL)
- PHP_FE(mysql_pconnect, NULL)
- PHP_FE(mysql_close, NULL)
- PHP_FE(mysql_select_db, NULL)
-#ifndef NETWARE /* The below two functions not supported on NetWare */
-#if MYSQL_VERSION_ID < 40000
- PHP_FE(mysql_create_db, NULL)
- PHP_FE(mysql_drop_db, NULL)
-#endif
-#endif /* NETWARE */
- PHP_FE(mysql_query, NULL)
- PHP_FE(mysql_unbuffered_query, NULL)
- PHP_FE(mysql_db_query, NULL)
- PHP_FE(mysql_list_dbs, NULL)
- PHP_FE(mysql_list_tables, NULL)
- PHP_FE(mysql_list_fields, NULL)
- PHP_FE(mysql_list_processes, NULL)
- PHP_FE(mysql_error, NULL)
-#ifdef HAVE_MYSQL_ERRNO
- PHP_FE(mysql_errno, NULL)
-#endif
- PHP_FE(mysql_affected_rows, NULL)
- PHP_FE(mysql_insert_id, NULL)
- PHP_FE(mysql_result, NULL)
- PHP_FE(mysql_num_rows, NULL)
- PHP_FE(mysql_num_fields, NULL)
- PHP_FE(mysql_fetch_row, NULL)
- PHP_FE(mysql_fetch_array, NULL)
- PHP_FE(mysql_fetch_assoc, NULL)
- PHP_FE(mysql_fetch_object, NULL)
- PHP_FE(mysql_data_seek, NULL)
- PHP_FE(mysql_fetch_lengths, NULL)
- PHP_FE(mysql_fetch_field, NULL)
- PHP_FE(mysql_field_seek, NULL)
- PHP_FE(mysql_free_result, NULL)
- PHP_FE(mysql_field_name, NULL)
- PHP_FE(mysql_field_table, NULL)
- PHP_FE(mysql_field_len, NULL)
- PHP_FE(mysql_field_type, NULL)
- PHP_FE(mysql_field_flags, NULL)
- PHP_FE(mysql_escape_string, NULL)
- PHP_FE(mysql_real_escape_string, NULL)
- PHP_FE(mysql_stat, NULL)
- PHP_FE(mysql_thread_id, NULL)
- PHP_FE(mysql_client_encoding, NULL)
- PHP_FE(mysql_ping, NULL)
-#ifdef HAVE_GETINFO_FUNCS
- PHP_FE(mysql_get_client_info, NULL)
- PHP_FE(mysql_get_host_info, NULL)
- PHP_FE(mysql_get_proto_info, NULL)
- PHP_FE(mysql_get_server_info, NULL)
-#endif
-
- PHP_FE(mysql_info, NULL)
-
- /* for downwards compatability */
- PHP_FALIAS(mysql, mysql_db_query, NULL)
- PHP_FALIAS(mysql_fieldname, mysql_field_name, NULL)
- PHP_FALIAS(mysql_fieldtable, mysql_field_table, NULL)
- PHP_FALIAS(mysql_fieldlen, mysql_field_len, NULL)
- PHP_FALIAS(mysql_fieldtype, mysql_field_type, NULL)
- PHP_FALIAS(mysql_fieldflags, mysql_field_flags, NULL)
- PHP_FALIAS(mysql_selectdb, mysql_select_db, NULL)
-#ifndef NETWARE /* The below two functions not supported on NetWare */
-#if MYSQL_VERSION_ID < 40000
- PHP_FALIAS(mysql_createdb, mysql_create_db, NULL)
- PHP_FALIAS(mysql_dropdb, mysql_drop_db, NULL)
-#endif
-#endif /* NETWARE */
- PHP_FALIAS(mysql_freeresult, mysql_free_result, NULL)
- PHP_FALIAS(mysql_numfields, mysql_num_fields, NULL)
- PHP_FALIAS(mysql_numrows, mysql_num_rows, NULL)
- PHP_FALIAS(mysql_listdbs, mysql_list_dbs, NULL)
- PHP_FALIAS(mysql_listtables, mysql_list_tables, NULL)
- PHP_FALIAS(mysql_listfields, mysql_list_fields, NULL)
- PHP_FALIAS(mysql_db_name, mysql_result, NULL)
- PHP_FALIAS(mysql_dbname, mysql_result, NULL)
- PHP_FALIAS(mysql_tablename, mysql_result, NULL)
- PHP_FALIAS(mysql_table_name, mysql_result, NULL)
- {NULL, NULL, NULL}
-};
-/* }}} */
-
-/* {{{ mysql_module_entry
- */
-zend_module_entry mysql_module_entry = {
- STANDARD_MODULE_HEADER,
- "mysql",
- mysql_functions,
- ZEND_MODULE_STARTUP_N(mysql),
- PHP_MSHUTDOWN(mysql),
- PHP_RINIT(mysql),
- PHP_RSHUTDOWN(mysql),
- PHP_MINFO(mysql),
- NO_VERSION_YET,
- STANDARD_MODULE_PROPERTIES
-};
-/* }}} */
-
-ZEND_DECLARE_MODULE_GLOBALS(mysql)
-
-#ifdef COMPILE_DL_MYSQL
-ZEND_GET_MODULE(mysql)
-#endif
-
-void timeout(int sig);
-
-#define CHECK_LINK(link) { if (link==-1) { php_error_docref(NULL TSRMLS_CC, E_WARNING, "A link to the server could not be established"); RETURN_FALSE; } }
-
-#define PHPMY_UNBUFFERED_QUERY_CHECK() \
-{ \
- if (mysql->active_result_id) { \
- do { \
- int type; \
- MYSQL_RES *mysql_result; \
- \
- mysql_result = (MYSQL_RES *) zend_list_find(mysql->active_result_id, &type); \
- if (mysql_result && type==le_result) { \
- if (!mysql_eof(mysql_result)) { \
- php_error_docref(NULL TSRMLS_CC, E_NOTICE, "Function called without first fetching all rows from a previous unbuffered query"); \
- while (mysql_fetch_row(mysql_result)); \
- } \
- zend_list_delete(mysql->active_result_id); \
- mysql->active_result_id = 0; \
- } \
- } while(0); \
- } \
-} \
-
-/* {{{ _free_mysql_result
- * This wrapper is required since mysql_free_result() returns an integer, and
- * thus, cannot be used directly
- */
-static void _free_mysql_result(zend_rsrc_list_entry *rsrc TSRMLS_DC)
-{
- MYSQL_RES *mysql_result = (MYSQL_RES *)rsrc->ptr;
-
- mysql_free_result(mysql_result);
- MySG(result_allocated)--;
-}
-/* }}} */
-
-/* {{{ php_mysql_set_default_link
- */
-static void php_mysql_set_default_link(int id TSRMLS_DC)
-{
- if (MySG(default_link) != -1) {
- zend_list_delete(MySG(default_link));
- }
- MySG(default_link) = id;
- zend_list_addref(id);
-}
-/* }}} */
-
-/* {{{ php_mysql_select_db
-*/
-static int php_mysql_select_db(php_mysql_conn *mysql, char *db TSRMLS_DC)
-{
- PHPMY_UNBUFFERED_QUERY_CHECK();
-
- if (mysql_select_db(&mysql->conn, db) != 0) {
- return 0;
- } else {
- return 1;
- }
-}
-/* }}} */
-
-/* {{{ _close_mysql_link
- */
-static void _close_mysql_link(zend_rsrc_list_entry *rsrc TSRMLS_DC)
-{
- php_mysql_conn *link = (php_mysql_conn *)rsrc->ptr;
- void (*handler) (int);
-
- handler = signal(SIGPIPE, SIG_IGN);
- mysql_close(&link->conn);
- signal(SIGPIPE, handler);
- efree(link);
- MySG(num_links)--;
-}
-/* }}} */
-
-/* {{{ _close_mysql_plink
- */
-static void _close_mysql_plink(zend_rsrc_list_entry *rsrc TSRMLS_DC)
-{
- php_mysql_conn *link = (php_mysql_conn *)rsrc->ptr;
- void (*handler) (int);
-
- handler = signal(SIGPIPE, SIG_IGN);
- mysql_close(&link->conn);
- signal(SIGPIPE, handler);
-
- free(link);
- MySG(num_persistent)--;
- MySG(num_links)--;
-}
-/* }}} */
-
-/* {{{ PHP_INI_MH
- */
-static PHP_INI_MH(OnMySQLPort)
-{
- if (new_value != NULL) { /* default port */
- MySG(default_port) = atoi(new_value);
- } else {
- MySG(default_port) = -1;
- }
-
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ PHP_INI */
-PHP_INI_BEGIN()
- STD_PHP_INI_BOOLEAN("mysql.allow_persistent", "1", PHP_INI_SYSTEM, OnUpdateLong, allow_persistent, zend_mysql_globals, mysql_globals)
- STD_PHP_INI_ENTRY_EX("mysql.max_persistent", "-1", PHP_INI_SYSTEM, OnUpdateLong, max_persistent, zend_mysql_globals, mysql_globals, display_link_numbers)
- STD_PHP_INI_ENTRY_EX("mysql.max_links", "-1", PHP_INI_SYSTEM, OnUpdateLong, max_links, zend_mysql_globals, mysql_globals, display_link_numbers)
- STD_PHP_INI_ENTRY("mysql.default_host", NULL, PHP_INI_ALL, OnUpdateString, default_host, zend_mysql_globals, mysql_globals)
- STD_PHP_INI_ENTRY("mysql.default_user", NULL, PHP_INI_ALL, OnUpdateString, default_user, zend_mysql_globals, mysql_globals)
- STD_PHP_INI_ENTRY("mysql.default_password", NULL, PHP_INI_ALL, OnUpdateString, default_password, zend_mysql_globals, mysql_globals)
- PHP_INI_ENTRY("mysql.default_port", NULL, PHP_INI_ALL, OnMySQLPort)
- STD_PHP_INI_ENTRY("mysql.default_socket", NULL, PHP_INI_ALL, OnUpdateStringUnempty, default_socket, zend_mysql_globals, mysql_globals)
- STD_PHP_INI_ENTRY("mysql.connect_timeout", "60", PHP_INI_ALL, OnUpdateLong, connect_timeout, zend_mysql_globals, mysql_globals)
- STD_PHP_INI_BOOLEAN("mysql.trace_mode", "0", PHP_INI_ALL, OnUpdateLong, trace_mode, zend_mysql_globals, mysql_globals)
-PHP_INI_END()
-/* }}} */
-
-/* {{{ php_mysql_init_globals
- */
-static void php_mysql_init_globals(zend_mysql_globals *mysql_globals)
-{
- mysql_globals->num_persistent = 0;
- mysql_globals->default_socket = NULL;
- mysql_globals->default_host = NULL;
- mysql_globals->default_user = NULL;
- mysql_globals->default_password = NULL;
- mysql_globals->connect_errno = 0;
- mysql_globals->connect_error = NULL;
- mysql_globals->connect_timeout = 0;
- mysql_globals->trace_mode = 0;
- mysql_globals->result_allocated = 0;
-}
-/* }}} */
-
-/* {{{ PHP_MINIT_FUNCTION
- */
-ZEND_MODULE_STARTUP_D(mysql)
-{
- ZEND_INIT_MODULE_GLOBALS(mysql, php_mysql_init_globals, NULL);
-
- REGISTER_INI_ENTRIES();
- le_result = zend_register_list_destructors_ex(_free_mysql_result, NULL, "mysql result", module_number);
- le_link = zend_register_list_destructors_ex(_close_mysql_link, NULL, "mysql link", module_number);
- le_plink = zend_register_list_destructors_ex(NULL, _close_mysql_plink, "mysql link persistent", module_number);
- Z_TYPE(mysql_module_entry) = type;
-
- REGISTER_LONG_CONSTANT("MYSQL_ASSOC", MYSQL_ASSOC, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("MYSQL_NUM", MYSQL_NUM, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("MYSQL_BOTH", MYSQL_BOTH, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("MYSQL_CLIENT_COMPRESS", CLIENT_COMPRESS, CONST_CS | CONST_PERSISTENT);
-#if MYSQL_VERSION_ID >= 40000
- REGISTER_LONG_CONSTANT("MYSQL_CLIENT_SSL", CLIENT_SSL, CONST_CS | CONST_PERSISTENT);
-#endif
- REGISTER_LONG_CONSTANT("MYSQL_CLIENT_INTERACTIVE", CLIENT_INTERACTIVE, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("MYSQL_CLIENT_IGNORE_SPACE", CLIENT_IGNORE_SPACE, CONST_CS | CONST_PERSISTENT);
-
-
-#ifdef ZTS
-# if MYSQL_VERSION_ID >= 40000
- mysql_thread_init();
-# endif
-#endif
-
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ PHP_MSHUTDOWN_FUNCTION
- */
-PHP_MSHUTDOWN_FUNCTION(mysql)
-{
-#ifdef ZTS
-# if MYSQL_VERSION_ID >= 40000
- mysql_thread_end();
-# endif
-#endif
-
- UNREGISTER_INI_ENTRIES();
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ PHP_RINIT_FUNCTION
- */
-PHP_RINIT_FUNCTION(mysql)
-{
- MySG(default_link)=-1;
- MySG(num_links) = MySG(num_persistent);
- /* Reset connect error/errno on every request */
- MySG(connect_error) = NULL;
- MySG(connect_errno) =0;
- MySG(result_allocated) = 0;
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ PHP_RSHUTDOWN_FUNCTION
- */
-PHP_RSHUTDOWN_FUNCTION(mysql)
-{
- if (MySG(trace_mode)) {
- if (MySG(result_allocated)){
- php_error_docref("function.mysql-free-result" TSRMLS_CC, E_WARNING, "%lu result set(s) not freed. Use mysql_free_result to free result sets which were requested using mysql_query()", MySG(result_allocated));
- }
- }
-
- if (MySG(connect_error)!=NULL) {
- efree(MySG(connect_error));
- }
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ PHP_MINFO_FUNCTION
- */
-PHP_MINFO_FUNCTION(mysql)
-{
- char buf[32];
-
- php_info_print_table_start();
- php_info_print_table_header(2, "MySQL Support", "enabled");
- sprintf(buf, "%ld", MySG(num_persistent));
- php_info_print_table_row(2, "Active Persistent Links", buf);
- sprintf(buf, "%ld", MySG(num_links));
- php_info_print_table_row(2, "Active Links", buf);
- php_info_print_table_row(2, "Client API version", mysql_get_client_info());
-#if !defined (PHP_WIN32) && !defined (NETWARE)
- php_info_print_table_row(2, "MYSQL_MODULE_TYPE", PHP_MYSQL_TYPE);
- php_info_print_table_row(2, "MYSQL_SOCKET", MYSQL_UNIX_ADDR);
- php_info_print_table_row(2, "MYSQL_INCLUDE", PHP_MYSQL_INCLUDE);
- php_info_print_table_row(2, "MYSQL_LIBS", PHP_MYSQL_LIBS);
-#endif
-
- php_info_print_table_end();
-
- DISPLAY_INI_ENTRIES();
-
-}
-/* }}} */
-
-/* {{{ php_mysql_do_connect
- */
-#define MYSQL_DO_CONNECT_CLEANUP() \
- if (free_host) { \
- efree(host); \
- }
-
-#define MYSQL_DO_CONNECT_RETURN_FALSE() \
- MYSQL_DO_CONNECT_CLEANUP(); \
- RETURN_FALSE;
-
-static void php_mysql_do_connect(INTERNAL_FUNCTION_PARAMETERS, int persistent)
-{
- char *user=NULL, *passwd=NULL, *host_and_port=NULL, *socket=NULL, *tmp=NULL, *host=NULL;
- char *hashed_details=NULL;
- int hashed_details_length, port = MYSQL_PORT;
- int client_flags = 0;
- php_mysql_conn *mysql=NULL;
-#if MYSQL_VERSION_ID <= 32230
- void (*handler) (int);
-#endif
- zval **z_host=NULL, **z_user=NULL, **z_passwd=NULL, **z_new_link=NULL, **z_client_flags=NULL;
- zend_bool free_host=0, new_link=0;
- long connect_timeout;
-
-
- connect_timeout = MySG(connect_timeout);
-
- socket = MySG(default_socket);
-
- if (MySG(default_port) < 0) {
-#if !defined(PHP_WIN32) && !defined(NETWARE)
- struct servent *serv_ptr;
- char *env;
-
- MySG(default_port) = MYSQL_PORT;
- if ((serv_ptr = getservbyname("mysql", "tcp"))) {
- MySG(default_port) = (uint) ntohs((ushort) serv_ptr->s_port);
- }
- if ((env = getenv("MYSQL_TCP_PORT"))) {
- MySG(default_port) = (uint) atoi(env);
- }
-#else
- MySG(default_port) = MYSQL_PORT;
-#endif
- }
-
- if (PG(sql_safe_mode)) {
- if (ZEND_NUM_ARGS()>0) {
- php_error_docref(NULL TSRMLS_CC, E_NOTICE, "SQL safe mode in effect - ignoring host/user/password information");
- }
- host_and_port=passwd=NULL;
- user=php_get_current_user();
- hashed_details_length = strlen(user)+5+3;
- hashed_details = (char *) emalloc(hashed_details_length+1);
- sprintf(hashed_details, "mysql__%s_", user);
- client_flags = CLIENT_INTERACTIVE;
- } else {
- host_and_port = MySG(default_host);
- user = MySG(default_user);
- passwd = MySG(default_password);
-
- switch(ZEND_NUM_ARGS()) {
- case 0: /* defaults */
- break;
- case 1: {
- if (zend_get_parameters_ex(1, &z_host)==FAILURE) {
- MYSQL_DO_CONNECT_RETURN_FALSE();
- }
- }
- break;
- case 2: {
- if (zend_get_parameters_ex(2, &z_host, &z_user)==FAILURE) {
- MYSQL_DO_CONNECT_RETURN_FALSE();
- }
- convert_to_string_ex(z_user);
- user = Z_STRVAL_PP(z_user);
- }
- break;
- case 3: {
- if (zend_get_parameters_ex(3, &z_host, &z_user, &z_passwd) == FAILURE) {
- MYSQL_DO_CONNECT_RETURN_FALSE();
- }
- convert_to_string_ex(z_user);
- convert_to_string_ex(z_passwd);
- user = Z_STRVAL_PP(z_user);
- passwd = Z_STRVAL_PP(z_passwd);
- }
- break;
- case 4: {
- if (!persistent) {
- if (zend_get_parameters_ex(4, &z_host, &z_user, &z_passwd, &z_new_link) == FAILURE) {
- MYSQL_DO_CONNECT_RETURN_FALSE();
- }
- convert_to_string_ex(z_user);
- convert_to_string_ex(z_passwd);
- convert_to_boolean_ex(z_new_link);
- user = Z_STRVAL_PP(z_user);
- passwd = Z_STRVAL_PP(z_passwd);
- new_link = Z_BVAL_PP(z_new_link);
- }
- else {
- if (zend_get_parameters_ex(4, &z_host, &z_user, &z_passwd, &z_client_flags) == FAILURE) {
- MYSQL_DO_CONNECT_RETURN_FALSE();
- }
- convert_to_string_ex(z_user);
- convert_to_string_ex(z_passwd);
- convert_to_long_ex(z_client_flags);
- user = Z_STRVAL_PP(z_user);
- passwd = Z_STRVAL_PP(z_passwd);
- client_flags = Z_LVAL_PP(z_client_flags);
- }
- }
- break;
- case 5: {
- if (zend_get_parameters_ex(5, &z_host, &z_user, &z_passwd, &z_new_link, &z_client_flags) == FAILURE) {
- MYSQL_DO_CONNECT_RETURN_FALSE();
- }
- convert_to_string_ex(z_user);
- convert_to_string_ex(z_passwd);
- convert_to_boolean_ex(z_new_link);
- convert_to_long_ex(z_client_flags);
- user = Z_STRVAL_PP(z_user);
- passwd = Z_STRVAL_PP(z_passwd);
- new_link = Z_BVAL_PP(z_new_link);
- client_flags = Z_LVAL_PP(z_client_flags);
- }
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
- /* disable local infile option for open_basedir */
- if (PG(open_basedir) && strlen(PG(open_basedir)) && (client_flags & CLIENT_LOCAL_FILES)) {
- client_flags ^= CLIENT_LOCAL_FILES;
- }
-
- if (z_host) {
- SEPARATE_ZVAL(z_host); /* We may modify z_host if it contains a port, separate */
- convert_to_string_ex(z_host);
- host_and_port = Z_STRVAL_PP(z_host);
- if (z_user) {
- convert_to_string_ex(z_user);
- user = Z_STRVAL_PP(z_user);
- if (z_passwd) {
- convert_to_string_ex(z_passwd);
- passwd = Z_STRVAL_PP(z_passwd);
- }
- }
- }
-
- hashed_details_length = sizeof("mysql___")-1 + strlen(SAFE_STRING(host_and_port))+strlen(SAFE_STRING(user))+strlen(SAFE_STRING(passwd));
- hashed_details = (char *) emalloc(hashed_details_length+1);
- sprintf(hashed_details, "mysql_%s_%s_%s", SAFE_STRING(host_and_port), SAFE_STRING(user), SAFE_STRING(passwd));
- }
-
- /* We cannot use mysql_port anymore in windows, need to use
- * mysql_real_connect() to set the port.
- */
- if (host_and_port && (tmp=strchr(host_and_port, ':'))) {
- host = estrndup(host_and_port, tmp-host_and_port);
- free_host = 1;
- tmp++;
- if (tmp[0] != '/') {
- port = atoi(tmp);
- if ((tmp=strchr(tmp, ':'))) {
- tmp++;
- socket=tmp;
- }
- } else {
- socket = tmp;
- }
- } else {
- host = host_and_port;
- port = MySG(default_port);
- }
-
-#if MYSQL_VERSION_ID < 32200
- mysql_port = port;
-#endif
-
- if (!MySG(allow_persistent)) {
- persistent=0;
- }
- if (persistent) {
- list_entry *le;
-
- /* try to find if we already have this link in our persistent list */
- if (zend_hash_find(&EG(persistent_list), hashed_details, hashed_details_length+1, (void **) &le)==FAILURE) { /* we don't */
- list_entry new_le;
-
- if (MySG(max_links)!=-1 && MySG(num_links)>=MySG(max_links)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Too many open links (%ld)", MySG(num_links));
- efree(hashed_details);
- MYSQL_DO_CONNECT_RETURN_FALSE();
- }
- if (MySG(max_persistent)!=-1 && MySG(num_persistent)>=MySG(max_persistent)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Too many open persistent links (%ld)", MySG(num_persistent));
- efree(hashed_details);
- MYSQL_DO_CONNECT_RETURN_FALSE();
- }
- /* create the link */
- mysql = (php_mysql_conn *) malloc(sizeof(php_mysql_conn));
- mysql->active_result_id = 0;
-#if MYSQL_VERSION_ID > 32199 /* this lets us set the port number */
- mysql_init(&mysql->conn);
-
- if (connect_timeout != -1)
- mysql_options(&mysql->conn, MYSQL_OPT_CONNECT_TIMEOUT, (const char *)&connect_timeout);
-
- if (mysql_real_connect(&mysql->conn, host, user, passwd, NULL, port, socket, client_flags)==NULL) {
-#else
- if (mysql_connect(&mysql->conn, host, user, passwd)==NULL) {
-#endif
- /* Populate connect error globals so that the error functions can read them */
- if (MySG(connect_error)!=NULL) efree(MySG(connect_error));
- MySG(connect_error)=estrdup(mysql_error(&mysql->conn));
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", MySG(connect_error));
-#if defined(HAVE_MYSQL_ERRNO)
- MySG(connect_errno)=mysql_errno(&mysql->conn);
-#endif
- free(mysql);
- efree(hashed_details);
- MYSQL_DO_CONNECT_RETURN_FALSE();
- }
-
- /* hash it up */
- Z_TYPE(new_le) = le_plink;
- new_le.ptr = mysql;
- if (zend_hash_update(&EG(persistent_list), hashed_details, hashed_details_length+1, (void *) &new_le, sizeof(list_entry), NULL)==FAILURE) {
- free(mysql);
- efree(hashed_details);
- MYSQL_DO_CONNECT_RETURN_FALSE();
- }
- MySG(num_persistent)++;
- MySG(num_links)++;
- } else { /* The link is in our list of persistent connections */
- if (Z_TYPE_P(le) != le_plink) {
- MYSQL_DO_CONNECT_RETURN_FALSE();
- }
- /* ensure that the link did not die */
-#if MYSQL_VERSION_ID > 32230 /* Use mysql_ping to ensure link is alive (and to reconnect if needed) */
- if (mysql_ping(le->ptr)) {
-#else /* Use mysql_stat() to check if server is alive */
- handler=signal(SIGPIPE, SIG_IGN);
-#if defined(HAVE_MYSQL_ERRNO) && defined(CR_SERVER_GONE_ERROR)
- mysql_stat(le->ptr);
- if (mysql_errno(&((php_mysql_conn *) le->ptr)->conn) == CR_SERVER_GONE_ERROR) {
-#else
- if (!strcasecmp(mysql_stat(le->ptr), "mysql server has gone away")) { /* the link died */
-#endif
- signal(SIGPIPE, handler);
-#endif /* end mysql_ping */
-#if MYSQL_VERSION_ID > 32199 /* this lets us set the port number */
- if (mysql_real_connect(le->ptr, host, user, passwd, NULL, port, socket, client_flags)==NULL) {
-#else
- if (mysql_connect(le->ptr, host, user, passwd)==NULL) {
-#endif
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Link to server lost, unable to reconnect");
- zend_hash_del(&EG(persistent_list), hashed_details, hashed_details_length+1);
- efree(hashed_details);
- MYSQL_DO_CONNECT_RETURN_FALSE();
- }
- }
-#if MYSQL_VERSION_ID < 32231
- signal(SIGPIPE, handler);
-#endif
-
- mysql = (php_mysql_conn *) le->ptr;
- }
- ZEND_REGISTER_RESOURCE(return_value, mysql, le_plink);
- } else { /* non persistent */
- list_entry *index_ptr, new_index_ptr;
-
- /* first we check the hash for the hashed_details key. if it exists,
- * it should point us to the right offset where the actual mysql link sits.
- * if it doesn't, open a new mysql link, add it to the resource list,
- * and add a pointer to it with hashed_details as the key.
- */
- if (!new_link && zend_hash_find(&EG(regular_list), hashed_details, hashed_details_length+1,(void **) &index_ptr)==SUCCESS) {
- int type;
- long link;
- void *ptr;
-
- if (Z_TYPE_P(index_ptr) != le_index_ptr) {
- MYSQL_DO_CONNECT_RETURN_FALSE();
- }
- link = (long) index_ptr->ptr;
- ptr = zend_list_find(link,&type); /* check if the link is still there */
- if (ptr && (type==le_link || type==le_plink)) {
- zend_list_addref(link);
- Z_LVAL_P(return_value) = link;
- php_mysql_set_default_link(link TSRMLS_CC);
- Z_TYPE_P(return_value) = IS_RESOURCE;
- efree(hashed_details);
- MYSQL_DO_CONNECT_CLEANUP();
- return;
- } else {
- zend_hash_del(&EG(regular_list), hashed_details, hashed_details_length+1);
- }
- }
- if (MySG(max_links)!=-1 && MySG(num_links)>=MySG(max_links)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Too many open links (%ld)", MySG(num_links));
- efree(hashed_details);
- MYSQL_DO_CONNECT_RETURN_FALSE();
- }
-
- mysql = (php_mysql_conn *) emalloc(sizeof(php_mysql_conn));
- mysql->active_result_id = 0;
-#if MYSQL_VERSION_ID > 32199 /* this lets us set the port number */
- mysql_init(&mysql->conn);
-
- if (connect_timeout != -1)
- mysql_options(&mysql->conn, MYSQL_OPT_CONNECT_TIMEOUT, (const char *)&connect_timeout);
-
- if (mysql_real_connect(&mysql->conn, host, user, passwd, NULL, port, socket, client_flags)==NULL) {
-#else
- if (mysql_connect(&mysql->conn, host, user, passwd)==NULL) {
-#endif
- /* Populate connect error globals so that the error functions can read them */
- if (MySG(connect_error)!=NULL) efree(MySG(connect_error));
- MySG(connect_error)=estrdup(mysql_error(&mysql->conn));
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", MySG(connect_error));
-#if defined(HAVE_MYSQL_ERRNO)
- MySG(connect_errno)=mysql_errno(&mysql->conn);
-#endif
- efree(hashed_details);
- efree(mysql);
- MYSQL_DO_CONNECT_RETURN_FALSE();
- }
-
- /* add it to the list */
- ZEND_REGISTER_RESOURCE(return_value, mysql, le_link);
-
- /* add it to the hash */
- new_index_ptr.ptr = (void *) Z_LVAL_P(return_value);
- Z_TYPE(new_index_ptr) = le_index_ptr;
- if (zend_hash_update(&EG(regular_list), hashed_details, hashed_details_length+1,(void *) &new_index_ptr, sizeof(list_entry), NULL)==FAILURE) {
- efree(hashed_details);
- MYSQL_DO_CONNECT_RETURN_FALSE();
- }
- MySG(num_links)++;
- }
-
- efree(hashed_details);
- php_mysql_set_default_link(Z_LVAL_P(return_value) TSRMLS_CC);
- MYSQL_DO_CONNECT_CLEANUP();
-}
-/* }}} */
-
-/* {{{ php_mysql_get_default_link
- */
-static int php_mysql_get_default_link(INTERNAL_FUNCTION_PARAMETERS)
-{
- if (MySG(default_link)==-1) { /* no link opened yet, implicitly open one */
- ht = 0;
- php_mysql_do_connect(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0);
- }
- return MySG(default_link);
-}
-/* }}} */
-
-/* {{{ proto resource mysql_connect([string hostname[:port][:/path/to/socket] [, string username [, string password [, bool new [, int flags]]]]])
- Opens a connection to a MySQL Server */
-PHP_FUNCTION(mysql_connect)
-{
- php_mysql_do_connect(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0);
-}
-/* }}} */
-
-/* {{{ proto resource mysql_pconnect([string hostname[:port][:/path/to/socket] [, string username [, string password [, int flags]]]])
- Opens a persistent connection to a MySQL Server */
-PHP_FUNCTION(mysql_pconnect)
-{
- php_mysql_do_connect(INTERNAL_FUNCTION_PARAM_PASSTHRU, 1);
-}
-/* }}} */
-
-/* {{{ proto bool mysql_close([int link_identifier])
- Close a MySQL connection */
-PHP_FUNCTION(mysql_close)
-{
- zval **mysql_link=NULL;
- int id;
- php_mysql_conn *mysql;
-
- switch (ZEND_NUM_ARGS()) {
- case 0:
- id = MySG(default_link);
- break;
- case 1:
- if (zend_get_parameters_ex(1, &mysql_link)==FAILURE) {
- RETURN_FALSE;
- }
- id = -1;
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
-
- ZEND_FETCH_RESOURCE2(mysql, php_mysql_conn *, mysql_link, id, "MySQL-Link", le_link, le_plink);
-
- if (id==-1) { /* explicit resource number */
- PHPMY_UNBUFFERED_QUERY_CHECK();
- zend_list_delete(Z_RESVAL_PP(mysql_link));
- }
-
- if (id!=-1
- || (mysql_link && Z_RESVAL_PP(mysql_link)==MySG(default_link))) {
- PHPMY_UNBUFFERED_QUERY_CHECK();
- zend_list_delete(MySG(default_link));
- MySG(default_link) = -1;
- }
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto bool mysql_select_db(string database_name [, int link_identifier])
- Selects a MySQL database */
-PHP_FUNCTION(mysql_select_db)
-{
- zval **db, **mysql_link;
- int id;
- php_mysql_conn *mysql;
-
- switch(ZEND_NUM_ARGS()) {
- case 1:
- if (zend_get_parameters_ex(1, &db)==FAILURE) {
- RETURN_FALSE;
- }
- id = php_mysql_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU);
- CHECK_LINK(id);
- break;
- case 2:
- if (zend_get_parameters_ex(2, &db, &mysql_link)==FAILURE) {
- RETURN_FALSE;
- }
- id = -1;
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
-
- ZEND_FETCH_RESOURCE2(mysql, php_mysql_conn *, mysql_link, id, "MySQL-Link", le_link, le_plink);
-
- convert_to_string_ex(db);
-
- if (php_mysql_select_db(mysql, Z_STRVAL_PP(db) TSRMLS_CC)) {
- RETURN_TRUE;
- } else {
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-#ifdef HAVE_GETINFO_FUNCS
-
-/* {{{ proto string mysql_get_client_info(void)
- Returns a string that represents the client library version */
-PHP_FUNCTION(mysql_get_client_info)
-{
- if (ZEND_NUM_ARGS() != 0) {
- WRONG_PARAM_COUNT;
- }
-
- RETURN_STRING((char *)mysql_get_client_info(),1);
-}
-/* }}} */
-
-/* {{{ proto string mysql_get_host_info([int link_identifier])
- Returns a string describing the type of connection in use, including the server host name */
-PHP_FUNCTION(mysql_get_host_info)
-{
- zval **mysql_link;
- int id;
- php_mysql_conn *mysql;
-
- switch(ZEND_NUM_ARGS()) {
- case 0:
- id = php_mysql_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU);
- CHECK_LINK(id);
- break;
- case 1:
- if (zend_get_parameters_ex(1,&mysql_link)==FAILURE) {
- RETURN_FALSE;
- }
- id = -1;
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
-
- ZEND_FETCH_RESOURCE2(mysql, php_mysql_conn *, mysql_link, id, "MySQL-Link", le_link, le_plink);
-
- RETURN_STRING((char *)mysql_get_host_info(&mysql->conn),1);
-}
-/* }}} */
-
-/* {{{ proto int mysql_get_proto_info([int link_identifier])
- Returns the protocol version used by current connection */
-PHP_FUNCTION(mysql_get_proto_info)
-{
- zval **mysql_link;
- int id;
- php_mysql_conn *mysql;
-
- switch(ZEND_NUM_ARGS()) {
- case 0:
- id = php_mysql_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU);
- CHECK_LINK(id);
- break;
- case 1:
- if (zend_get_parameters_ex(1,&mysql_link)==FAILURE) {
- RETURN_FALSE;
- }
- id = -1;
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
-
- ZEND_FETCH_RESOURCE2(mysql, php_mysql_conn *, mysql_link, id, "MySQL-Link", le_link, le_plink);
-
- RETURN_LONG(mysql_get_proto_info(&mysql->conn));
-}
-/* }}} */
-
-/* {{{ proto string mysql_get_server_info([int link_identifier])
- Returns a string that represents the server version number */
-PHP_FUNCTION(mysql_get_server_info)
-{
- zval **mysql_link;
- int id;
- php_mysql_conn *mysql;
-
- switch(ZEND_NUM_ARGS()) {
- case 0:
- id = php_mysql_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU);
- CHECK_LINK(id);
- break;
- case 1:
- if (zend_get_parameters_ex(1,&mysql_link)==FAILURE) {
- RETURN_FALSE;
- }
- id = -1;
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
-
- ZEND_FETCH_RESOURCE2(mysql, php_mysql_conn *, mysql_link, id, "MySQL-Link", le_link, le_plink);
-
- RETURN_STRING((char *)mysql_get_server_info(&mysql->conn),1);
-}
-/* }}} */
-
-/* {{{ proto string mysql_info([int link_identifier])
- Returns a string containing information about the most recent query */
-PHP_FUNCTION(mysql_info)
-{
- zval *mysql_link;
- int id = -1;
- char *str;
- php_mysql_conn *mysql;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|r", &mysql_link) == FAILURE) {
- return;
- }
-
- if (ZEND_NUM_ARGS() == 0) {
- id = php_mysql_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU);
- CHECK_LINK(id);
- }
-
- ZEND_FETCH_RESOURCE2(mysql, php_mysql_conn *, &mysql_link, id, "MySQL-Link", le_link, le_plink);
-
- if ((str = (char *)mysql_info(&mysql->conn))) {
- RETURN_STRING(str,1);
- } else {
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-/* {{{ proto int mysql_thread_id([int link_identifier])
- Returns the thread id of current connection */
-PHP_FUNCTION(mysql_thread_id)
-{
- zval *mysql_link = NULL;
- int id = -1;
- php_mysql_conn *mysql;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|r", &mysql_link) == FAILURE) {
- return;
- }
-
- if (ZEND_NUM_ARGS() == 0) {
- id = php_mysql_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU);
- CHECK_LINK(id);
- }
- ZEND_FETCH_RESOURCE2(mysql, php_mysql_conn *, &mysql_link, id, "MySQL-Link", le_link, le_plink);
-
- RETURN_LONG(mysql_thread_id(&mysql->conn));
-}
-/* }}} */
-
-/* {{{ proto string mysql_stat([int link_identifier])
- Returns a string containing status information */
-PHP_FUNCTION(mysql_stat)
-{
- zval *mysql_link = NULL;
- int id = -1;
- php_mysql_conn *mysql;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|r", &mysql_link) == FAILURE) {
- return;
- }
-
- if (ZEND_NUM_ARGS() == 0) {
- id = php_mysql_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU);
- CHECK_LINK(id);
- }
- ZEND_FETCH_RESOURCE2(mysql, php_mysql_conn *, &mysql_link, id, "MySQL-Link", le_link, le_plink);
-
- PHPMY_UNBUFFERED_QUERY_CHECK();
-
- RETURN_STRING((char *)mysql_stat(&mysql->conn), 1);
-}
-/* }}} */
-
-/* {{{ proto string mysql_client_encoding([int link_identifier])
- Returns the default character set for the current connection */
-PHP_FUNCTION(mysql_client_encoding)
-{
- zval *mysql_link = NULL;
- int id = -1;
- php_mysql_conn *mysql;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|r", &mysql_link) == FAILURE) {
- return;
- }
-
- if (ZEND_NUM_ARGS() == 0) {
- id = php_mysql_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU);
- CHECK_LINK(id);
- }
-
- ZEND_FETCH_RESOURCE2(mysql, php_mysql_conn *, &mysql_link, id, "MySQL-Link", le_link, le_plink);
-
- RETURN_STRING((char *)mysql_character_set_name(&mysql->conn), 1);
-}
-/* }}} */
-#endif
-
-#ifndef NETWARE /* The below two functions not supported on NetWare */
-#if MYSQL_VERSION_ID < 40000
-/* {{{ proto bool mysql_create_db(string database_name [, int link_identifier])
- Create a MySQL database */
-PHP_FUNCTION(mysql_create_db)
-{
- zval **db, **mysql_link;
- int id;
- php_mysql_conn *mysql;
-
- switch(ZEND_NUM_ARGS()) {
- case 1:
- if (zend_get_parameters_ex(1, &db)==FAILURE) {
- RETURN_FALSE;
- }
- id = php_mysql_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU);
- CHECK_LINK(id);
- break;
- case 2:
- if (zend_get_parameters_ex(2, &db, &mysql_link)==FAILURE) {
- RETURN_FALSE;
- }
- id = -1;
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
-
- php_error_docref(NULL TSRMLS_CC, E_NOTICE, "This function is deprecated, please use mysql_query() to issue a SQL CREATE DATABASE statement instead.");
-
- ZEND_FETCH_RESOURCE2(mysql, php_mysql_conn *, mysql_link, id, "MySQL-Link", le_link, le_plink);
-
- PHPMY_UNBUFFERED_QUERY_CHECK();
-
- convert_to_string_ex(db);
-
- if (mysql_create_db(&mysql->conn, Z_STRVAL_PP(db))==0) {
- RETURN_TRUE;
- } else {
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-/* {{{ proto bool mysql_drop_db(string database_name [, int link_identifier])
- Drops (delete) a MySQL database */
-PHP_FUNCTION(mysql_drop_db)
-{
- zval **db, **mysql_link;
- int id;
- php_mysql_conn *mysql;
-
- switch(ZEND_NUM_ARGS()) {
- case 1:
- if (zend_get_parameters_ex(1, &db)==FAILURE) {
- RETURN_FALSE;
- }
- id = php_mysql_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU);
- CHECK_LINK(id);
- break;
- case 2:
- if (zend_get_parameters_ex(2, &db, &mysql_link)==FAILURE) {
- RETURN_FALSE;
- }
- id = -1;
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
-
- php_error_docref(NULL TSRMLS_CC, E_NOTICE, "This function is deprecated, please use mysql_query() to issue a SQL DROP DATABASE statement instead.");
-
-
- ZEND_FETCH_RESOURCE2(mysql, php_mysql_conn *, mysql_link, id, "MySQL-Link", le_link, le_plink);
-
- convert_to_string_ex(db);
-
- if (mysql_drop_db(&mysql->conn, Z_STRVAL_PP(db))==0) {
- RETURN_TRUE;
- } else {
- RETURN_FALSE;
- }
-}
-/* }}} */
-#endif
-#endif /* NETWARE */
-
-/* {{{ php_mysql_do_query_general
- */
-static void php_mysql_do_query_general(zval **query, zval **mysql_link, int link_id, zval **db, int use_store, zval *return_value TSRMLS_DC)
-{
- php_mysql_conn *mysql;
- MYSQL_RES *mysql_result;
-
- ZEND_FETCH_RESOURCE2(mysql, php_mysql_conn *, mysql_link, link_id, "MySQL-Link", le_link, le_plink);
-
- if (db) {
- convert_to_string_ex(db);
- if (!php_mysql_select_db(mysql, Z_STRVAL_PP(db) TSRMLS_CC)) {
- RETURN_FALSE;
- }
- }
-
- PHPMY_UNBUFFERED_QUERY_CHECK();
-
- convert_to_string_ex(query);
-
- /* check explain */
- if (MySG(trace_mode)) {
- if (!strncasecmp("select", Z_STRVAL_PP(query), 6)){
- MYSQL_ROW row;
-
- char *newquery = (char *)emalloc(Z_STRLEN_PP(query) + 10);
- sprintf ((char *)newquery, "EXPLAIN %s", Z_STRVAL_PP(query));
- mysql_real_query(&mysql->conn, newquery, strlen(newquery));
- efree (newquery);
- if (mysql_errno(&mysql->conn)) {
- php_error_docref("http://www.mysql.com/doc" TSRMLS_CC, E_WARNING, "%s", mysql_error(&mysql->conn));
- RETURN_FALSE;
- }
- else {
- mysql_result = mysql_use_result(&mysql->conn);
- while ((row = mysql_fetch_row(mysql_result))) {
- if (!strcmp("ALL", row[1])) {
- php_error_docref("http://www.mysql.com/doc" TSRMLS_CC, E_WARNING, "Your query requires a full tablescan (table %s, %s rows affected). Use EXPLAIN to optimize your query.", row[0], row[6]);
- } else if (!strcmp("INDEX", row[1])) {
- php_error_docref("http://www.mysql.com/doc" TSRMLS_CC, E_WARNING, "Your query requires a full indexscan (table %s, %s rows affected). Use EXPLAIN to optimize your query.", row[0], row[6]);
- }
- }
- mysql_free_result(mysql_result);
- }
- }
- } /* end explain */
-
- /* mysql_query is binary unsafe, use mysql_real_query */
-#if MYSQL_VERSION_ID > 32199
- if (mysql_real_query(&mysql->conn, Z_STRVAL_PP(query), Z_STRLEN_PP(query))!=0) {
- /* check possible error */
- if (MySG(trace_mode)){
- if (mysql_errno(&mysql->conn)){
- php_error_docref("http://www.mysql.com/doc" TSRMLS_CC, E_WARNING, "%s", mysql_error(&mysql->conn));
- }
- }
- RETURN_FALSE;
- }
-#else
- if (mysql_query(&mysql->conn, Z_STRVAL_PP(query))!=0) {
- /* check possible error */
- if (MySG(trace_mode)){
- if (mysql_errno(&mysql->conn)){
- php_error_docref("http://www.mysql.com/doc" TSRMLS_CC, E_WARNING, "%s", mysql_error(&mysql->conn));
- }
- }
- RETURN_FALSE;
- }
-#endif
- if(use_store == MYSQL_USE_RESULT) {
- mysql_result=mysql_use_result(&mysql->conn);
- } else {
- mysql_result=mysql_store_result(&mysql->conn);
- }
- if (!mysql_result) {
- if (PHP_MYSQL_VALID_RESULT(&mysql->conn)) { /* query should have returned rows */
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to save result set");
- RETURN_FALSE;
- } else {
- RETURN_TRUE;
- }
- }
- MySG(result_allocated)++;
- ZEND_REGISTER_RESOURCE(return_value, mysql_result, le_result);
- if (use_store == MYSQL_USE_RESULT) {
- mysql->active_result_id = Z_LVAL_P(return_value);
- }
-}
-/* }}} */
-
-/* {{{ php_mysql_do_query
- */
-static void php_mysql_do_query(INTERNAL_FUNCTION_PARAMETERS, int use_store)
-{
- zval **query, **mysql_link;
- int id;
-
- switch(ZEND_NUM_ARGS()) {
- case 1:
- if (zend_get_parameters_ex(1, &query)==FAILURE) {
- RETURN_FALSE;
- }
- id = php_mysql_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU);
- CHECK_LINK(id);
- break;
- case 2:
- if (zend_get_parameters_ex(2, &query, &mysql_link)==FAILURE) {
- RETURN_FALSE;
- }
- id = -1;
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
- php_mysql_do_query_general(query, mysql_link, id, NULL, use_store, return_value TSRMLS_CC);
-}
-/* }}} */
-
-/* {{{ proto resource mysql_query(string query [, int link_identifier])
- Sends an SQL query to MySQL */
-PHP_FUNCTION(mysql_query)
-{
- php_mysql_do_query(INTERNAL_FUNCTION_PARAM_PASSTHRU, MYSQL_STORE_RESULT);
-}
-/* }}} */
-
-
-/* {{{ proto resource mysql_unbuffered_query(string query [, int link_identifier])
- Sends an SQL query to MySQL, without fetching and buffering the result rows */
-PHP_FUNCTION(mysql_unbuffered_query)
-{
- php_mysql_do_query(INTERNAL_FUNCTION_PARAM_PASSTHRU, MYSQL_USE_RESULT);
-}
-/* }}} */
-
-
-/* {{{ proto resource mysql_db_query(string database_name, string query [, int link_identifier])
- Sends an SQL query to MySQL */
-PHP_FUNCTION(mysql_db_query)
-{
- zval **db, **query, **mysql_link;
- int id;
-
- switch(ZEND_NUM_ARGS()) {
- case 2:
- if (zend_get_parameters_ex(2, &db, &query)==FAILURE) {
- RETURN_FALSE;
- }
- id = php_mysql_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU);
- CHECK_LINK(id);
- break;
- case 3:
- if (zend_get_parameters_ex(3, &db, &query, &mysql_link)==FAILURE) {
- RETURN_FALSE;
- }
- id = -1;
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
-
- if (MySG(trace_mode) || !strcasecmp(get_active_function_name(TSRMLS_C), "mysql")) {
- php_error_docref(NULL TSRMLS_CC, E_NOTICE, "This function is deprecated; use mysql_query() instead.");
- }
-
- php_mysql_do_query_general(query, mysql_link, id, db, MYSQL_STORE_RESULT, return_value TSRMLS_CC);
-}
-/* }}} */
-
-
-/* {{{ proto resource mysql_list_dbs([int link_identifier])
- List databases available on a MySQL server */
-PHP_FUNCTION(mysql_list_dbs)
-{
- zval **mysql_link;
- int id;
- php_mysql_conn *mysql;
- MYSQL_RES *mysql_result;
-
- switch(ZEND_NUM_ARGS()) {
- case 0:
- id = php_mysql_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU);
- CHECK_LINK(id);
- break;
- case 1:
- if (zend_get_parameters_ex(1, &mysql_link)==FAILURE) {
- RETURN_FALSE;
- }
- id = -1;
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
-
- ZEND_FETCH_RESOURCE2(mysql, php_mysql_conn *, mysql_link, id, "MySQL-Link", le_link, le_plink);
-
- PHPMY_UNBUFFERED_QUERY_CHECK();
-
- if ((mysql_result=mysql_list_dbs(&mysql->conn, NULL))==NULL) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to save MySQL query result");
- RETURN_FALSE;
- }
- ZEND_REGISTER_RESOURCE(return_value, mysql_result, le_result);
-}
-/* }}} */
-
-
-/* {{{ proto resource mysql_list_tables(string database_name [, int link_identifier])
- List tables in a MySQL database */
-PHP_FUNCTION(mysql_list_tables)
-{
- zval **db, **mysql_link;
- int id;
- php_mysql_conn *mysql;
- MYSQL_RES *mysql_result;
-
- switch(ZEND_NUM_ARGS()) {
- case 1:
- if (zend_get_parameters_ex(1, &db)==FAILURE) {
- RETURN_FALSE;
- }
- id = php_mysql_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU);
- CHECK_LINK(id);
- break;
- case 2:
- if (zend_get_parameters_ex(2, &db, &mysql_link)==FAILURE) {
- RETURN_FALSE;
- }
- id = -1;
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
- php_error_docref(NULL TSRMLS_CC, E_STRICT, "mysql_list_tables() is deprecated");
- ZEND_FETCH_RESOURCE2(mysql, php_mysql_conn *, mysql_link, id, "MySQL-Link", le_link, le_plink);
-
- convert_to_string_ex(db);
- if (!php_mysql_select_db(mysql, Z_STRVAL_PP(db) TSRMLS_CC)) {
- RETURN_FALSE;
- }
-
- PHPMY_UNBUFFERED_QUERY_CHECK();
-
- if ((mysql_result=mysql_list_tables(&mysql->conn, NULL))==NULL) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to save MySQL query result");
- RETURN_FALSE;
- }
- ZEND_REGISTER_RESOURCE(return_value, mysql_result, le_result);
-}
-/* }}} */
-
-
-/* {{{ proto resource mysql_list_fields(string database_name, string table_name [, int link_identifier])
- List MySQL result fields */
-PHP_FUNCTION(mysql_list_fields)
-{
- zval **db, **table, **mysql_link;
- int id;
- php_mysql_conn *mysql;
- MYSQL_RES *mysql_result;
-
- switch(ZEND_NUM_ARGS()) {
- case 2:
- if (zend_get_parameters_ex(2, &db, &table)==FAILURE) {
- RETURN_FALSE;
- }
- id = php_mysql_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU);
- CHECK_LINK(id);
- break;
- case 3:
- if (zend_get_parameters_ex(3, &db, &table, &mysql_link)==FAILURE) {
- RETURN_FALSE;
- }
- id = -1;
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
-
- ZEND_FETCH_RESOURCE2(mysql, php_mysql_conn *, mysql_link, id, "MySQL-Link", le_link, le_plink);
-
- convert_to_string_ex(db);
- if (!php_mysql_select_db(mysql, Z_STRVAL_PP(db) TSRMLS_CC)) {
- RETURN_FALSE;
- }
-
- PHPMY_UNBUFFERED_QUERY_CHECK();
-
- convert_to_string_ex(table);
- if ((mysql_result=mysql_list_fields(&mysql->conn, Z_STRVAL_PP(table), NULL))==NULL) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to save MySQL query result");
- RETURN_FALSE;
- }
- ZEND_REGISTER_RESOURCE(return_value, mysql_result, le_result);
-}
-/* }}} */
-
-/* {{{ proto resource mysql_list_processes([int link_identifier])
- Returns a result set describing the current server threads */
-PHP_FUNCTION(mysql_list_processes)
-{
- zval *mysql_link = NULL;
- int id = -1;
- php_mysql_conn *mysql;
- MYSQL_RES *mysql_result;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|r", &mysql_link) == FAILURE) {
- return;
- }
-
- if (ZEND_NUM_ARGS() == 0) {
- id = php_mysql_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU);
- CHECK_LINK(id);
- }
-
- ZEND_FETCH_RESOURCE2(mysql, php_mysql_conn *, &mysql_link, id, "MySQL-Link", le_link, le_plink);
-
- PHPMY_UNBUFFERED_QUERY_CHECK();
-
- mysql_result = mysql_list_processes(&mysql->conn);
- if (mysql_result == NULL) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to save MySQL query result");
- RETURN_FALSE;
- }
-
- ZEND_REGISTER_RESOURCE(return_value, mysql_result, le_result);
-}
-/* }}} */
-
-
-/* {{{ proto string mysql_error([int link_identifier])
- Returns the text of the error message from previous MySQL operation */
-PHP_FUNCTION(mysql_error)
-{
- zval **mysql_link;
- int id;
- php_mysql_conn *mysql;
-
- switch(ZEND_NUM_ARGS()) {
- case 0:
- id = MySG(default_link);
- if (id==-1) {
- if (MySG(connect_error)!=NULL){
- RETURN_STRING(MySG(connect_error),1);
- } else {
- RETURN_FALSE;
- }
- }
- break;
- case 1:
- if (zend_get_parameters_ex(1, &mysql_link)==FAILURE) {
- RETURN_FALSE;
- }
- id = -1;
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
-
- ZEND_FETCH_RESOURCE2(mysql, php_mysql_conn *, mysql_link, id, "MySQL-Link", le_link, le_plink);
-
- RETURN_STRING((char *)mysql_error(&mysql->conn), 1);
-}
-/* }}} */
-
-
-/* {{{ proto int mysql_errno([int link_identifier])
- Returns the number of the error message from previous MySQL operation */
-#ifdef HAVE_MYSQL_ERRNO
-PHP_FUNCTION(mysql_errno)
-{
- zval **mysql_link;
- int id;
- php_mysql_conn *mysql;
-
- switch(ZEND_NUM_ARGS()) {
- case 0:
- id = MySG(default_link);
- if (id==-1) {
- if (MySG(connect_errno)!=0){
- RETURN_LONG(MySG(connect_errno));
- } else {
- RETURN_FALSE;
- }
- }
- break;
- case 1:
- if (zend_get_parameters_ex(1, &mysql_link)==FAILURE) {
- RETURN_FALSE;
- }
- id = -1;
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
-
- ZEND_FETCH_RESOURCE2(mysql, php_mysql_conn *, mysql_link, id, "MySQL-Link", le_link, le_plink);
-
- RETURN_LONG(mysql_errno(&mysql->conn));
-}
-#endif
-/* }}} */
-
-
-/* {{{ proto int mysql_affected_rows([int link_identifier])
- Gets number of affected rows in previous MySQL operation */
-PHP_FUNCTION(mysql_affected_rows)
-{
- zval **mysql_link;
- int id;
- php_mysql_conn *mysql;
-
- switch(ZEND_NUM_ARGS()) {
- case 0:
- id = MySG(default_link);
- CHECK_LINK(id);
- break;
- case 1:
- if (zend_get_parameters_ex(1, &mysql_link)==FAILURE) {
- RETURN_FALSE;
- }
- id = -1;
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
-
- ZEND_FETCH_RESOURCE2(mysql, php_mysql_conn *, mysql_link, id, "MySQL-Link", le_link, le_plink);
-
- /* conversion from int64 to long happing here */
- Z_LVAL_P(return_value) = (long) mysql_affected_rows(&mysql->conn);
- Z_TYPE_P(return_value) = IS_LONG;
-}
-/* }}} */
-
-
-/* {{{ proto string mysql_escape_string(string to_be_escaped)
- Escape string for mysql query */
-PHP_FUNCTION(mysql_escape_string)
-{
- zval **str;
-
- if (ZEND_NUM_ARGS()!=1 || zend_get_parameters_ex(1, &str) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
- convert_to_string_ex(str);
- /* assume worst case situation, which is 2x of the original string.
- * we don't realloc() down to the real size since it'd most probably not
- * be worth it
- */
-
- Z_STRVAL_P(return_value) = (char *) safe_emalloc(Z_STRLEN_PP(str), 2, 1);
- Z_STRLEN_P(return_value) = mysql_escape_string(Z_STRVAL_P(return_value), Z_STRVAL_PP(str), Z_STRLEN_PP(str));
- Z_TYPE_P(return_value) = IS_STRING;
-
- if (MySG(trace_mode)){
- php_error_docref("function.mysql-real-escape-string" TSRMLS_CC, E_WARNING, "This function is deprecated; use mysql_real_escape_string() instead.");
- }
-
-}
-/* }}} */
-
-/* {{{ proto string mysql_real_escape_string(string to_be_escaped [, int link_identifier])
- Escape special characters in a string for use in a SQL statement, taking into account the current charset of the connection */
-PHP_FUNCTION(mysql_real_escape_string)
-{
- zval *mysql_link = NULL;
- char *str;
- char *new_str;
- int id = -1, str_len, new_str_len;
- php_mysql_conn *mysql;
-
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|r", &str, &str_len, &mysql_link) == FAILURE) {
- return;
- }
-
- if (ZEND_NUM_ARGS() == 1) {
- id = php_mysql_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU);
- CHECK_LINK(id);
- }
-
- ZEND_FETCH_RESOURCE2(mysql, php_mysql_conn *, &mysql_link, id, "MySQL-Link", le_link, le_plink);
-
- new_str = safe_emalloc(str_len, 2, 1);
- new_str_len = mysql_real_escape_string(&mysql->conn, new_str, str, str_len);
- new_str = erealloc(new_str, new_str_len + 1);
-
- RETURN_STRINGL(new_str, new_str_len, 0);
-}
-/* }}} */
-
-/* {{{ proto int mysql_insert_id([int link_identifier])
- Gets the ID generated from the previous INSERT operation */
-PHP_FUNCTION(mysql_insert_id)
-{
- zval **mysql_link;
- int id;
- php_mysql_conn *mysql;
-
- switch(ZEND_NUM_ARGS()) {
- case 0:
- id = MySG(default_link);
- CHECK_LINK(id);
- break;
- case 1:
- if (zend_get_parameters_ex(1, &mysql_link)==FAILURE) {
- RETURN_FALSE;
- }
- id = -1;
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
-
- ZEND_FETCH_RESOURCE2(mysql, php_mysql_conn *, mysql_link, id, "MySQL-Link", le_link, le_plink);
-
- /* conversion from int64 to long happing here */
- Z_LVAL_P(return_value) = (long) mysql_insert_id(&mysql->conn);
- Z_TYPE_P(return_value) = IS_LONG;
-}
-/* }}} */
-
-
-/* {{{ proto mixed mysql_result(resource result, int row [, mixed field])
- Gets result data */
-PHP_FUNCTION(mysql_result)
-{
- zval **result, **row, **field=NULL;
- MYSQL_RES *mysql_result;
- MYSQL_ROW sql_row;
- mysql_row_length_type *sql_row_lengths;
- int field_offset=0;
-
- switch (ZEND_NUM_ARGS()) {
- case 2:
- if (zend_get_parameters_ex(2, &result, &row)==FAILURE) {
- RETURN_FALSE;
- }
- break;
- case 3:
- if (zend_get_parameters_ex(3, &result, &row, &field)==FAILURE) {
- RETURN_FALSE;
- }
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
-
- ZEND_FETCH_RESOURCE(mysql_result, MYSQL_RES *, result, -1, "MySQL result", le_result);
-
- convert_to_long_ex(row);
- if (Z_LVAL_PP(row)<0 || Z_LVAL_PP(row)>=(int)mysql_num_rows(mysql_result)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to jump to row %ld on MySQL result index %ld", Z_LVAL_PP(row), Z_LVAL_PP(result));
- RETURN_FALSE;
- }
- mysql_data_seek(mysql_result, Z_LVAL_PP(row));
- if ((sql_row=mysql_fetch_row(mysql_result))==NULL
- || (sql_row_lengths=mysql_fetch_lengths(mysql_result))==NULL) { /* shouldn't happen? */
- RETURN_FALSE;
- }
-
- if (field) {
- switch(Z_TYPE_PP(field)) {
- case IS_STRING: {
- int i=0;
- MYSQL_FIELD *tmp_field;
- char *table_name, *field_name, *tmp;
-
- if ((tmp=strchr(Z_STRVAL_PP(field), '.'))) {
- table_name = estrndup(Z_STRVAL_PP(field), tmp-Z_STRVAL_PP(field));
- field_name = estrdup(tmp+1);
- } else {
- table_name = NULL;
- field_name = estrndup(Z_STRVAL_PP(field),Z_STRLEN_PP(field));
- }
- mysql_field_seek(mysql_result, 0);
- while ((tmp_field=mysql_fetch_field(mysql_result))) {
- if ((!table_name || !strcasecmp(tmp_field->table, table_name)) && !strcasecmp(tmp_field->name, field_name)) {
- field_offset = i;
- break;
- }
- i++;
- }
- if (!tmp_field) { /* no match found */
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s%s%s not found in MySQL result index %ld",
- (table_name?table_name:""), (table_name?".":""), field_name, Z_LVAL_PP(result));
- efree(field_name);
- if (table_name) {
- efree(table_name);
- }
- RETURN_FALSE;
- }
- efree(field_name);
- if (table_name) {
- efree(table_name);
- }
- }
- break;
- default:
- convert_to_long_ex(field);
- field_offset = Z_LVAL_PP(field);
- if (field_offset<0 || field_offset>=(int)mysql_num_fields(mysql_result)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Bad column offset specified");
- RETURN_FALSE;
- }
- break;
- }
- }
-
- if (sql_row[field_offset]) {
- Z_TYPE_P(return_value) = IS_STRING;
-
- if (PG(magic_quotes_runtime)) {
- Z_STRVAL_P(return_value) = php_addslashes(sql_row[field_offset], sql_row_lengths[field_offset],&Z_STRLEN_P(return_value), 0 TSRMLS_CC);
- } else {
- Z_STRLEN_P(return_value) = sql_row_lengths[field_offset];
- Z_STRVAL_P(return_value) = (char *) safe_estrndup(sql_row[field_offset], Z_STRLEN_P(return_value));
- }
- } else {
- Z_TYPE_P(return_value) = IS_NULL;
- }
-}
-/* }}} */
-
-
-/* {{{ proto int mysql_num_rows(resource result)
- Gets number of rows in a result */
-PHP_FUNCTION(mysql_num_rows)
-{
- zval **result;
- MYSQL_RES *mysql_result;
-
- if (ZEND_NUM_ARGS()!=1 || zend_get_parameters_ex(1, &result)==FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(mysql_result, MYSQL_RES *, result, -1, "MySQL result", le_result);
-
- /* conversion from int64 to long happing here */
- Z_LVAL_P(return_value) = (long) mysql_num_rows(mysql_result);
- Z_TYPE_P(return_value) = IS_LONG;
-}
-/* }}} */
-
-/* {{{ proto int mysql_num_fields(resource result)
- Gets number of fields in a result */
-PHP_FUNCTION(mysql_num_fields)
-{
- zval **result;
- MYSQL_RES *mysql_result;
-
- if (ZEND_NUM_ARGS()!=1 || zend_get_parameters_ex(1, &result)==FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(mysql_result, MYSQL_RES *, result, -1, "MySQL result", le_result);
-
- Z_LVAL_P(return_value) = mysql_num_fields(mysql_result);
- Z_TYPE_P(return_value) = IS_LONG;
-}
-/* }}} */
-
-/* {{{ php_mysql_fetch_hash
- */
-static void php_mysql_fetch_hash(INTERNAL_FUNCTION_PARAMETERS, int result_type, int expected_args, int into_object)
-{
- zval **result, **arg2;
- MYSQL_RES *mysql_result;
- MYSQL_ROW mysql_row;
- MYSQL_FIELD *mysql_field;
- mysql_row_length_type *mysql_row_lengths;
- int i;
- zval *res, *ctor_params = NULL;
- zend_class_entry *ce;
-
- if (into_object) {
- char *class_name;
- int class_name_len;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z|sz", &res, &class_name, &class_name_len, &ctor_params) == FAILURE) {
- return;
- }
- result = &res;
- if (ZEND_NUM_ARGS() < 2) {
- ce = zend_standard_class_def;
- } else {
- ce = zend_fetch_class(class_name, class_name_len, ZEND_FETCH_CLASS_AUTO TSRMLS_CC);
- }
- if (!ce) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Could not find class '%s'", class_name);
- return;
- }
- result_type = MYSQL_ASSOC;
- } else {
- if (ZEND_NUM_ARGS() > expected_args) {
- WRONG_PARAM_COUNT;
- }
-
- switch (ZEND_NUM_ARGS()) {
- case 1:
- if (zend_get_parameters_ex(1, &result)==FAILURE) {
- RETURN_FALSE;
- }
- if (!result_type) {
- result_type = MYSQL_BOTH;
- }
- break;
- case 2:
- if (zend_get_parameters_ex(2, &result, &arg2)==FAILURE) {
- RETURN_FALSE;
- }
- convert_to_long_ex(arg2);
- result_type = Z_LVAL_PP(arg2);
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
- }
-
- if ((result_type & MYSQL_BOTH) == 0) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "The result type should be either MYSQL_NUM, MYSQL_ASSOC or MYSQL_BOTH.");
- }
-
- ZEND_FETCH_RESOURCE(mysql_result, MYSQL_RES *, result, -1, "MySQL result", le_result);
-
- if ((mysql_row=mysql_fetch_row(mysql_result))==NULL
- || (mysql_row_lengths=mysql_fetch_lengths(mysql_result))==NULL) {
- RETURN_FALSE;
- }
-
- array_init(return_value);
-
- mysql_field_seek(mysql_result, 0);
- for (mysql_field=mysql_fetch_field(mysql_result), i=0; mysql_field; mysql_field=mysql_fetch_field(mysql_result), i++) {
- if (mysql_row[i]) {
- zval *data;
-
- MAKE_STD_ZVAL(data);
-
- if (PG(magic_quotes_runtime)) {
- Z_TYPE_P(data) = IS_STRING;
- Z_STRVAL_P(data) = php_addslashes(mysql_row[i], mysql_row_lengths[i], &Z_STRLEN_P(data), 0 TSRMLS_CC);
- } else {
- ZVAL_STRINGL(data, mysql_row[i], mysql_row_lengths[i], 1);
- }
-
- if (result_type & MYSQL_NUM) {
- add_index_zval(return_value, i, data);
- }
- if (result_type & MYSQL_ASSOC) {
- if (result_type & MYSQL_NUM) {
- ZVAL_ADDREF(data);
- }
- add_assoc_zval(return_value, mysql_field->name, data);
- }
- } else {
- /* NULL value. */
- if (result_type & MYSQL_NUM) {
- add_index_null(return_value, i);
- }
-
- if (result_type & MYSQL_ASSOC) {
- add_assoc_null(return_value, mysql_field->name);
- }
- }
- }
-
- if (into_object) {
- zval dataset = *return_value;
- zend_fcall_info fci;
- zend_fcall_info_cache fcc;
- zval *retval_ptr;
-
- object_and_properties_init(return_value, ce, NULL);
- zend_merge_properties(return_value, Z_ARRVAL(dataset), 1 TSRMLS_CC);
-
- if (ce->constructor) {
- fci.size = sizeof(fci);
- fci.function_table = &ce->function_table;
- fci.function_name = NULL;
- fci.symbol_table = NULL;
- fci.object_pp = &return_value;
- fci.retval_ptr_ptr = &retval_ptr;
- if (ctor_params && Z_TYPE_P(ctor_params) != IS_NULL) {
- if (Z_TYPE_P(ctor_params) == IS_ARRAY) {
- HashTable *ht = Z_ARRVAL_P(ctor_params);
- Bucket *p;
-
- fci.param_count = 0;
- fci.params = safe_emalloc(sizeof(zval*), ht->nNumOfElements, 0);
- p = ht->pListHead;
- while (p != NULL) {
- fci.params[fci.param_count++] = (zval**)p->pData;
- p = p->pListNext;
- }
- } else {
- /* Two problems why we throw exceptions here: PHP is typeless
- * and hence passing one argument that's not an array could be
- * by mistake and the other way round is possible, too. The
- * single value is an array. Also we'd have to make that one
- * argument passed by reference.
- */
- zend_throw_exception(zend_exception_get_default(), "Parameter ctor_params must be an array", 0 TSRMLS_CC);
- return;
- }
- } else {
- fci.param_count = 0;
- fci.params = NULL;
- }
- fci.no_separation = 1;
-
- fcc.initialized = 1;
- fcc.function_handler = ce->constructor;
- fcc.calling_scope = EG(scope);
- fcc.object_pp = &return_value;
-
- if (zend_call_function(&fci, &fcc TSRMLS_CC) == FAILURE) {
- zend_throw_exception_ex(zend_exception_get_default(), 0 TSRMLS_CC, "Could not execute %s::%s()", ce->name, ce->constructor->common.function_name);
- } else {
- if (retval_ptr) {
- zval_ptr_dtor(&retval_ptr);
- }
- }
- if (fci.params) {
- efree(fci.params);
- }
- } else if (ctor_params) {
- zend_throw_exception_ex(zend_exception_get_default(), 0 TSRMLS_CC, "Class %s does not have a constructor hence you cannot use ctor_params", ce->name);
- }
- }
-}
-/* }}} */
-
-/* {{{ proto array mysql_fetch_row(resource result)
- Gets a result row as an enumerated array */
-PHP_FUNCTION(mysql_fetch_row)
-{
- php_mysql_fetch_hash(INTERNAL_FUNCTION_PARAM_PASSTHRU, MYSQL_NUM, 1, 0);
-}
-/* }}} */
-
-
-/* {{{ proto object mysql_fetch_object(resource result [, string class_name [, NULL|array ctor_params]])
- Fetch a result row as an object */
-PHP_FUNCTION(mysql_fetch_object)
-{
- php_mysql_fetch_hash(INTERNAL_FUNCTION_PARAM_PASSTHRU, MYSQL_ASSOC, 2, 1);
-
- if (Z_TYPE_P(return_value) == IS_ARRAY) {
- object_and_properties_init(return_value, ZEND_STANDARD_CLASS_DEF_PTR, Z_ARRVAL_P(return_value));
- }
-}
-/* }}} */
-
-
-/* {{{ proto array mysql_fetch_array(resource result [, int result_type])
- Fetch a result row as an array (associative, numeric or both) */
-PHP_FUNCTION(mysql_fetch_array)
-{
- php_mysql_fetch_hash(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0, 2, 0);
-}
-/* }}} */
-
-
-/* {{{ proto array mysql_fetch_assoc(resource result)
- Fetch a result row as an associative array */
-PHP_FUNCTION(mysql_fetch_assoc)
-{
- php_mysql_fetch_hash(INTERNAL_FUNCTION_PARAM_PASSTHRU, MYSQL_ASSOC, 1, 0);
-}
-/* }}} */
-
-/* {{{ proto bool mysql_data_seek(resource result, int row_number)
- Move internal result pointer */
-PHP_FUNCTION(mysql_data_seek)
-{
- zval **result, **offset;
- MYSQL_RES *mysql_result;
-
- if (ZEND_NUM_ARGS()!=2 || zend_get_parameters_ex(2, &result, &offset)==FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(mysql_result, MYSQL_RES *, result, -1, "MySQL result", le_result);
-
- convert_to_long_ex(offset);
- if (Z_LVAL_PP(offset)<0 || Z_LVAL_PP(offset)>=(int)mysql_num_rows(mysql_result)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Offset %ld is invalid for MySQL result index %ld (or the query data is unbuffered)", Z_LVAL_PP(offset), Z_LVAL_PP(result));
- RETURN_FALSE;
- }
- mysql_data_seek(mysql_result, Z_LVAL_PP(offset));
- RETURN_TRUE;
-}
-/* }}} */
-
-
-/* {{{ proto array mysql_fetch_lengths(resource result)
- Gets max data size of each column in a result */
-PHP_FUNCTION(mysql_fetch_lengths)
-{
- zval **result;
- MYSQL_RES *mysql_result;
- mysql_row_length_type *lengths;
- int num_fields;
- int i;
-
- if (ZEND_NUM_ARGS()!=1 || zend_get_parameters_ex(1, &result)==FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(mysql_result, MYSQL_RES *, result, -1, "MySQL result", le_result);
-
- if ((lengths=mysql_fetch_lengths(mysql_result))==NULL) {
- RETURN_FALSE;
- }
- array_init(return_value);
- num_fields = mysql_num_fields(mysql_result);
-
- for (i=0; i<num_fields; i++) {
- add_index_long(return_value, i, lengths[i]);
- }
-}
-/* }}} */
-
-/* {{{ php_mysql_get_field_name
- */
-static char *php_mysql_get_field_name(int field_type)
-{
- switch(field_type) {
- case FIELD_TYPE_STRING:
- case FIELD_TYPE_VAR_STRING:
- return "string";
- break;
-#ifdef MYSQL_HAS_TINY
- case FIELD_TYPE_TINY:
-#endif
- case FIELD_TYPE_SHORT:
- case FIELD_TYPE_LONG:
- case FIELD_TYPE_LONGLONG:
- case FIELD_TYPE_INT24:
- return "int";
- break;
- case FIELD_TYPE_FLOAT:
- case FIELD_TYPE_DOUBLE:
- case FIELD_TYPE_DECIMAL:
- return "real";
- break;
- case FIELD_TYPE_TIMESTAMP:
- return "timestamp";
- break;
-#ifdef MYSQL_HAS_YEAR
- case FIELD_TYPE_YEAR:
- return "year";
- break;
-#endif
- case FIELD_TYPE_DATE:
- return "date";
- break;
- case FIELD_TYPE_TIME:
- return "time";
- break;
- case FIELD_TYPE_DATETIME:
- return "datetime";
- break;
- case FIELD_TYPE_TINY_BLOB:
- case FIELD_TYPE_MEDIUM_BLOB:
- case FIELD_TYPE_LONG_BLOB:
- case FIELD_TYPE_BLOB:
- return "blob";
- break;
- case FIELD_TYPE_NULL:
- return "null";
- break;
- default:
- return "unknown";
- break;
- }
-}
-/* }}} */
-
-/* {{{ proto object mysql_fetch_field(resource result [, int field_offset])
- Gets column information from a result and return as an object */
-PHP_FUNCTION(mysql_fetch_field)
-{
- zval **result, **field=NULL;
- MYSQL_RES *mysql_result;
- MYSQL_FIELD *mysql_field;
-
- switch (ZEND_NUM_ARGS()) {
- case 1:
- if (zend_get_parameters_ex(1, &result)==FAILURE) {
- RETURN_FALSE;
- }
- break;
- case 2:
- if (zend_get_parameters_ex(2, &result, &field)==FAILURE) {
- RETURN_FALSE;
- }
- convert_to_long_ex(field);
- break;
- default:
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(mysql_result, MYSQL_RES *, result, -1, "MySQL result", le_result);
-
- if (field) {
- if (Z_LVAL_PP(field)<0 || Z_LVAL_PP(field)>=(int)mysql_num_fields(mysql_result)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Bad field offset");
- RETURN_FALSE;
- }
- mysql_field_seek(mysql_result, Z_LVAL_PP(field));
- }
- if ((mysql_field=mysql_fetch_field(mysql_result))==NULL) {
- RETURN_FALSE;
- }
- object_init(return_value);
-
- add_property_string(return_value, "name",(mysql_field->name?mysql_field->name:""), 1);
- add_property_string(return_value, "table",(mysql_field->table?mysql_field->table:""), 1);
- add_property_string(return_value, "def",(mysql_field->def?mysql_field->def:""), 1);
- add_property_long(return_value, "max_length", mysql_field->max_length);
- add_property_long(return_value, "not_null", IS_NOT_NULL(mysql_field->flags)?1:0);
- add_property_long(return_value, "primary_key", IS_PRI_KEY(mysql_field->flags)?1:0);
- add_property_long(return_value, "multiple_key",(mysql_field->flags&MULTIPLE_KEY_FLAG?1:0));
- add_property_long(return_value, "unique_key",(mysql_field->flags&UNIQUE_KEY_FLAG?1:0));
- add_property_long(return_value, "numeric", IS_NUM(Z_TYPE_P(mysql_field))?1:0);
- add_property_long(return_value, "blob", IS_BLOB(mysql_field->flags)?1:0);
- add_property_string(return_value, "type", php_mysql_get_field_name(Z_TYPE_P(mysql_field)), 1);
- add_property_long(return_value, "unsigned",(mysql_field->flags&UNSIGNED_FLAG?1:0));
- add_property_long(return_value, "zerofill",(mysql_field->flags&ZEROFILL_FLAG?1:0));
-}
-/* }}} */
-
-
-/* {{{ proto bool mysql_field_seek(resource result, int field_offset)
- Sets result pointer to a specific field offset */
-PHP_FUNCTION(mysql_field_seek)
-{
- zval **result, **offset;
- MYSQL_RES *mysql_result;
-
- if (ZEND_NUM_ARGS()!=2 || zend_get_parameters_ex(2, &result, &offset)==FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(mysql_result, MYSQL_RES *, result, -1, "MySQL result", le_result);
-
- convert_to_long_ex(offset);
- if (Z_LVAL_PP(offset)<0 || Z_LVAL_PP(offset)>=(int)mysql_num_fields(mysql_result)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Field %ld is invalid for MySQL result index %ld", Z_LVAL_PP(offset), Z_LVAL_PP(result));
- RETURN_FALSE;
- }
- mysql_field_seek(mysql_result, Z_LVAL_PP(offset));
- RETURN_TRUE;
-}
-/* }}} */
-
-
-#define PHP_MYSQL_FIELD_NAME 1
-#define PHP_MYSQL_FIELD_TABLE 2
-#define PHP_MYSQL_FIELD_LEN 3
-#define PHP_MYSQL_FIELD_TYPE 4
-#define PHP_MYSQL_FIELD_FLAGS 5
-
-/* {{{ php_mysql_field_info
- */
-static void php_mysql_field_info(INTERNAL_FUNCTION_PARAMETERS, int entry_type)
-{
- zval **result, **field;
- MYSQL_RES *mysql_result;
- MYSQL_FIELD *mysql_field;
- char buf[512];
- int len;
-
- if (ZEND_NUM_ARGS()!=2 || zend_get_parameters_ex(2, &result, &field)==FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(mysql_result, MYSQL_RES *, result, -1, "MySQL result", le_result);
-
- convert_to_long_ex(field);
- if (Z_LVAL_PP(field)<0 || Z_LVAL_PP(field)>=(int)mysql_num_fields(mysql_result)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Field %ld is invalid for MySQL result index %ld", Z_LVAL_PP(field), Z_LVAL_PP(result));
- RETURN_FALSE;
- }
- mysql_field_seek(mysql_result, Z_LVAL_PP(field));
- if ((mysql_field=mysql_fetch_field(mysql_result))==NULL) {
- RETURN_FALSE;
- }
-
- switch (entry_type) {
- case PHP_MYSQL_FIELD_NAME:
- Z_STRLEN_P(return_value) = strlen(mysql_field->name);
- Z_STRVAL_P(return_value) = estrndup(mysql_field->name, Z_STRLEN_P(return_value));
- Z_TYPE_P(return_value) = IS_STRING;
- break;
- case PHP_MYSQL_FIELD_TABLE:
- Z_STRLEN_P(return_value) = strlen(mysql_field->table);
- Z_STRVAL_P(return_value) = estrndup(mysql_field->table, Z_STRLEN_P(return_value));
- Z_TYPE_P(return_value) = IS_STRING;
- break;
- case PHP_MYSQL_FIELD_LEN:
- Z_LVAL_P(return_value) = mysql_field->length;
- Z_TYPE_P(return_value) = IS_LONG;
- break;
- case PHP_MYSQL_FIELD_TYPE:
- Z_STRVAL_P(return_value) = php_mysql_get_field_name(Z_TYPE_P(mysql_field));
- Z_STRLEN_P(return_value) = strlen(Z_STRVAL_P(return_value));
- Z_STRVAL_P(return_value) = estrndup(Z_STRVAL_P(return_value), Z_STRLEN_P(return_value));
- Z_TYPE_P(return_value) = IS_STRING;
- break;
- case PHP_MYSQL_FIELD_FLAGS:
- memcpy(buf, "", sizeof(""));
-#ifdef IS_NOT_NULL
- if (IS_NOT_NULL(mysql_field->flags)) {
- strcat(buf, "not_null ");
- }
-#endif
-#ifdef IS_PRI_KEY
- if (IS_PRI_KEY(mysql_field->flags)) {
- strcat(buf, "primary_key ");
- }
-#endif
-#ifdef UNIQUE_KEY_FLAG
- if (mysql_field->flags&UNIQUE_KEY_FLAG) {
- strcat(buf, "unique_key ");
- }
-#endif
-#ifdef MULTIPLE_KEY_FLAG
- if (mysql_field->flags&MULTIPLE_KEY_FLAG) {
- strcat(buf, "multiple_key ");
- }
-#endif
-#ifdef IS_BLOB
- if (IS_BLOB(mysql_field->flags)) {
- strcat(buf, "blob ");
- }
-#endif
-#ifdef UNSIGNED_FLAG
- if (mysql_field->flags&UNSIGNED_FLAG) {
- strcat(buf, "unsigned ");
- }
-#endif
-#ifdef ZEROFILL_FLAG
- if (mysql_field->flags&ZEROFILL_FLAG) {
- strcat(buf, "zerofill ");
- }
-#endif
-#ifdef BINARY_FLAG
- if (mysql_field->flags&BINARY_FLAG) {
- strcat(buf, "binary ");
- }
-#endif
-#ifdef ENUM_FLAG
- if (mysql_field->flags&ENUM_FLAG) {
- strcat(buf, "enum ");
- }
-#endif
-#ifdef SET_FLAG
- if (mysql_field->flags&SET_FLAG) {
- strcat(buf, "set ");
- }
-#endif
-#ifdef AUTO_INCREMENT_FLAG
- if (mysql_field->flags&AUTO_INCREMENT_FLAG) {
- strcat(buf, "auto_increment ");
- }
-#endif
-#ifdef TIMESTAMP_FLAG
- if (mysql_field->flags&TIMESTAMP_FLAG) {
- strcat(buf, "timestamp ");
- }
-#endif
- len = strlen(buf);
- /* remove trailing space, if present */
- if (len && buf[len-1] == ' ') {
- buf[len-1] = 0;
- len--;
- }
-
- Z_STRLEN_P(return_value) = len;
- Z_STRVAL_P(return_value) = estrndup(buf, len);
- Z_TYPE_P(return_value) = IS_STRING;
- break;
-
- default:
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-/* {{{ proto string mysql_field_name(resource result, int field_index)
- Gets the name of the specified field in a result */
-PHP_FUNCTION(mysql_field_name)
-{
- php_mysql_field_info(INTERNAL_FUNCTION_PARAM_PASSTHRU, PHP_MYSQL_FIELD_NAME);
-}
-/* }}} */
-
-
-/* {{{ proto string mysql_field_table(resource result, int field_offset)
- Gets name of the table the specified field is in */
-PHP_FUNCTION(mysql_field_table)
-{
- php_mysql_field_info(INTERNAL_FUNCTION_PARAM_PASSTHRU, PHP_MYSQL_FIELD_TABLE);
-}
-/* }}} */
-
-
-/* {{{ proto int mysql_field_len(resource result, int field_offset)
- Returns the length of the specified field */
-PHP_FUNCTION(mysql_field_len)
-{
- php_mysql_field_info(INTERNAL_FUNCTION_PARAM_PASSTHRU, PHP_MYSQL_FIELD_LEN);
-}
-/* }}} */
-
-
-/* {{{ proto string mysql_field_type(resource result, int field_offset)
- Gets the type of the specified field in a result */
-PHP_FUNCTION(mysql_field_type)
-{
- php_mysql_field_info(INTERNAL_FUNCTION_PARAM_PASSTHRU, PHP_MYSQL_FIELD_TYPE);
-}
-/* }}} */
-
-
-/* {{{ proto string mysql_field_flags(resource result, int field_offset)
- Gets the flags associated with the specified field in a result */
-PHP_FUNCTION(mysql_field_flags)
-{
- php_mysql_field_info(INTERNAL_FUNCTION_PARAM_PASSTHRU, PHP_MYSQL_FIELD_FLAGS);
-}
-/* }}} */
-
-
-/* {{{ proto bool mysql_free_result(resource result)
- Free result memory */
-PHP_FUNCTION(mysql_free_result)
-{
- zval **result;
- MYSQL_RES *mysql_result;
-
- if (ZEND_NUM_ARGS()!=1 || zend_get_parameters_ex(1, &result)==FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- if (Z_TYPE_PP(result)==IS_RESOURCE && Z_LVAL_PP(result)==0) {
- RETURN_FALSE;
- }
-
- ZEND_FETCH_RESOURCE(mysql_result, MYSQL_RES *, result, -1, "MySQL result", le_result);
-
- zend_list_delete(Z_LVAL_PP(result));
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto bool mysql_ping([int link_identifier])
- Ping a server connection. If no connection then reconnect. */
-PHP_FUNCTION(mysql_ping)
-{
- zval *mysql_link = NULL;
- int id = -1;
- php_mysql_conn *mysql;
-
- if (0 == ZEND_NUM_ARGS()) {
- id = php_mysql_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU);
- CHECK_LINK(id);
- } else if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &mysql_link)==FAILURE) {
- return;
- }
-
- ZEND_FETCH_RESOURCE2(mysql, php_mysql_conn *, &mysql_link, id, "MySQL-Link", le_link, le_plink);
-
- PHPMY_UNBUFFERED_QUERY_CHECK();
-
- RETURN_BOOL(! mysql_ping(&mysql->conn));
-}
-/* }}} */
-
-#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/mysql/php_mysql.h b/ext/mysql/php_mysql.h
deleted file mode 100644
index 4d7cea52fd..0000000000
--- a/ext/mysql/php_mysql.h
+++ /dev/null
@@ -1,125 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Zeev Suraski <zeev@zend.com> |
- +----------------------------------------------------------------------+
-*/
-
-
-/* $Id$ */
-
-#ifndef PHP_MYSQL_H
-#define PHP_MYSQL_H
-
-#ifdef PHP_WIN32
-#define PHP_MYSQL_API __declspec(dllexport)
-#else
-#define PHP_MYSQL_API
-#endif
-
-#if HAVE_MYSQL
-
-#ifdef ZTS
-#include "TSRM.h"
-#endif
-
-extern zend_module_entry mysql_module_entry;
-
-#define mysql_module_ptr &mysql_module_entry
-
-PHP_MINIT_FUNCTION(mysql);
-PHP_RINIT_FUNCTION(mysql);
-PHP_MSHUTDOWN_FUNCTION(mysql);
-PHP_RSHUTDOWN_FUNCTION(mysql);
-PHP_MINFO_FUNCTION(mysql);
-
-PHP_FUNCTION(mysql_connect);
-PHP_FUNCTION(mysql_pconnect);
-PHP_FUNCTION(mysql_close);
-PHP_FUNCTION(mysql_select_db);
-#if MYSQL_VERSION_ID < 40000
-PHP_FUNCTION(mysql_create_db);
-PHP_FUNCTION(mysql_drop_db);
-#endif
-PHP_FUNCTION(mysql_query);
-PHP_FUNCTION(mysql_unbuffered_query);
-PHP_FUNCTION(mysql_db_query);
-PHP_FUNCTION(mysql_list_dbs);
-PHP_FUNCTION(mysql_list_tables);
-PHP_FUNCTION(mysql_list_fields);
-PHP_FUNCTION(mysql_list_processes);
-PHP_FUNCTION(mysql_error);
-PHP_FUNCTION(mysql_errno);
-PHP_FUNCTION(mysql_affected_rows);
-PHP_FUNCTION(mysql_insert_id);
-PHP_FUNCTION(mysql_result);
-PHP_FUNCTION(mysql_num_rows);
-PHP_FUNCTION(mysql_num_fields);
-PHP_FUNCTION(mysql_fetch_row);
-PHP_FUNCTION(mysql_fetch_array);
-PHP_FUNCTION(mysql_fetch_assoc);
-PHP_FUNCTION(mysql_fetch_object);
-PHP_FUNCTION(mysql_data_seek);
-PHP_FUNCTION(mysql_fetch_lengths);
-PHP_FUNCTION(mysql_fetch_field);
-PHP_FUNCTION(mysql_field_seek);
-PHP_FUNCTION(mysql_free_result);
-PHP_FUNCTION(mysql_field_name);
-PHP_FUNCTION(mysql_field_table);
-PHP_FUNCTION(mysql_field_len);
-PHP_FUNCTION(mysql_field_type);
-PHP_FUNCTION(mysql_field_flags);
-PHP_FUNCTION(mysql_escape_string);
-PHP_FUNCTION(mysql_real_escape_string);
-PHP_FUNCTION(mysql_get_client_info);
-PHP_FUNCTION(mysql_get_host_info);
-PHP_FUNCTION(mysql_get_proto_info);
-PHP_FUNCTION(mysql_get_server_info);
-PHP_FUNCTION(mysql_info);
-PHP_FUNCTION(mysql_stat);
-PHP_FUNCTION(mysql_thread_id);
-PHP_FUNCTION(mysql_client_encoding);
-PHP_FUNCTION(mysql_ping);
-
-ZEND_BEGIN_MODULE_GLOBALS(mysql)
- long default_link;
- long num_links,num_persistent;
- long max_links,max_persistent;
- long allow_persistent;
- long default_port;
- char *default_host, *default_user, *default_password;
- char *default_socket;
- char *connect_error;
- long connect_errno;
- long connect_timeout;
- long result_allocated;
- long trace_mode;
-ZEND_END_MODULE_GLOBALS(mysql)
-
-#ifdef ZTS
-# define MySG(v) TSRMG(mysql_globals_id, zend_mysql_globals *, v)
-#else
-# define MySG(v) (mysql_globals.v)
-#endif
-
-
-#else
-
-#define mysql_module_ptr NULL
-
-#endif
-
-#define phpext_mysql_ptr mysql_module_ptr
-
-#endif /* PHP_MYSQL_H */
diff --git a/ext/mysql/tests/001.phpt b/ext/mysql/tests/001.phpt
deleted file mode 100755
index 5d36462ba1..0000000000
--- a/ext/mysql/tests/001.phpt
+++ /dev/null
@@ -1,30 +0,0 @@
---TEST--
-mysql connect
---SKIPIF--
-<?php include 'skipif.inc'; ?>
---FILE--
-<?php
-
-include 'connect.inc';
-$test = '';
-
-/*** test mysql_connect 127.0.0.1 ***/
-$db = mysql_connect('127.0.0.1', $user, $passwd);
-$test .= ($db) ? '1' : '0';
-mysql_close($db);
-
-/*** test mysql_connect localhost ***/
-$db = mysql_connect($host, $user, $passwd);
-$test .= ($db) ? '1' : '0';
-mysql_close($db);
-
-/*** test mysql_connect localhost:port ***/
-$db = mysql_connect($host, $user, $passwd, '', 3306);
-$test .= ($db) ? '1' : '0';
-mysql_close($db);
-
-var_dump($test);
-
-?>
---EXPECT--
-string(3) "111"
diff --git a/ext/mysql/tests/002.phpt b/ext/mysql/tests/002.phpt
deleted file mode 100755
index 64da4fa0d9..0000000000
--- a/ext/mysql/tests/002.phpt
+++ /dev/null
@@ -1,53 +0,0 @@
---TEST--
-mysql_fetch_array
---SKIPIF--
-<?php include 'skipif.inc'; ?>
---FILE--
-<?php
-
-include 'connect.inc';
-
-$db = mysql_connect($host, $user, $passwd);
-
-var_dump($db);
-
-var_dump(mysql_select_db('test'));
-
-var_dump(mysql_query('DROP TABLE IF EXISTS test'));
-
-var_dump(mysql_query('CREATE TABLE test(col1 int PRIMARY KEY, col2 varchar(50), col3 char(5))'));
-
-var_dump(mysql_query("INSERT INTO test(col1, col2, col3) VALUES(1, 'foo', 'bar'),(2, 'foo', 'bar')"));
-
-var_dump($res = mysql_query('SELECT col1, col2, col3 FROM test ORDER BY col1 ASC'));
-
-while ($data = mysql_fetch_array($res, MYSQL_ASSOC)) {
- var_dump($data);
-}
-
-mysql_close($db);
-
-?>
---EXPECTF--
-resource(%d) of type (mysql link)
-bool(true)
-bool(true)
-bool(true)
-bool(true)
-resource(%d) of type (mysql result)
-array(3) {
- ["col1"]=>
- string(1) "1"
- ["col2"]=>
- string(3) "foo"
- ["col3"]=>
- string(3) "bar"
-}
-array(3) {
- ["col1"]=>
- string(1) "2"
- ["col2"]=>
- string(3) "foo"
- ["col3"]=>
- string(3) "bar"
-}
diff --git a/ext/mysql/tests/003.phpt b/ext/mysql/tests/003.phpt
deleted file mode 100755
index 81a63f3fc8..0000000000
--- a/ext/mysql/tests/003.phpt
+++ /dev/null
@@ -1,84 +0,0 @@
---TEST--
-mysql_fetch_object
---SKIPIF--
-<?php include 'skipif.inc'; ?>
---FILE--
-<?php
-
-include 'connect.inc';
-
-class class24 {
- function __construct() {
- echo __METHOD__ . "\n";
- }
-}
-
-$data = array(
- "one",
- "two",
- "three"
- );
-
-$db = mysql_connect($host, $user, $passwd);
-
-mysql_select_db("test");
-
-mysql_query('DROP TABLE IF EXISTS test');
-
-mysql_query("CREATE TABLE test(a varchar(10))");
-
-foreach ($data as $str) {
- mysql_query("INSERT INTO test VALUES('$str')");
- var_dump($str);
-}
-
-echo "==stdClass==\n";
-$res = mysql_query("SELECT a FROM test");
-while ($obj = mysql_fetch_object($res)) {
- var_dump($obj);
-}
-
-echo "==class24==\n";
-$res = mysql_query("SELECT a FROM test");
-while ($obj = mysql_fetch_object($res, 'class24')) {
- var_dump($obj);
-}
-
-mysql_close($db);
-
-?>
-==DONE==
---EXPECTF--
-string(3) "one"
-string(3) "two"
-string(5) "three"
-==stdClass==
-object(stdClass)#%d (1) {
- ["a"]=>
- string(3) "one"
-}
-object(stdClass)#%d (1) {
- ["a"]=>
- string(3) "two"
-}
-object(stdClass)#%d (1) {
- ["a"]=>
- string(5) "three"
-}
-==class24==
-class24::__construct
-object(class24)#%d (1) {
- ["a"]=>
- string(3) "one"
-}
-class24::__construct
-object(class24)#%d (1) {
- ["a"]=>
- string(3) "two"
-}
-class24::__construct
-object(class24)#%d (1) {
- ["a"]=>
- string(5) "three"
-}
-==DONE==
diff --git a/ext/mysql/tests/connect.inc b/ext/mysql/tests/connect.inc
deleted file mode 100755
index aa1d30a17e..0000000000
--- a/ext/mysql/tests/connect.inc
+++ /dev/null
@@ -1,10 +0,0 @@
-<?php
-
- /* default values are localhost, root and empty password
- Change the values if you use another configuration */
-
- $host = "localhost";
- $user = "root";
- $passwd = "";
-
-?>
diff --git a/ext/mysql/tests/skipif.inc b/ext/mysql/tests/skipif.inc
deleted file mode 100755
index 934420b09a..0000000000
--- a/ext/mysql/tests/skipif.inc
+++ /dev/null
@@ -1,8 +0,0 @@
-<?php
-
-include 'connect.inc';
-$link = @mysql_connect($host, $user, $passwd);
-if (!$link) die('skip cannot connect');
-mysql_close($link);
-
-?> \ No newline at end of file
diff --git a/ext/mysqli/CREDITS b/ext/mysqli/CREDITS
deleted file mode 100644
index 68cfa8a4ae..0000000000
--- a/ext/mysqli/CREDITS
+++ /dev/null
@@ -1,2 +0,0 @@
-MySQLi
-Zak Greant, Georg Richter
diff --git a/ext/mysqli/TODO b/ext/mysqli/TODO
deleted file mode 100644
index c241b9b704..0000000000
--- a/ext/mysqli/TODO
+++ /dev/null
@@ -1,2 +0,0 @@
-- documentation
-- ini-settings
diff --git a/ext/mysqli/config.m4 b/ext/mysqli/config.m4
deleted file mode 100644
index 2cbd5a6680..0000000000
--- a/ext/mysqli/config.m4
+++ /dev/null
@@ -1,59 +0,0 @@
-dnl
-dnl $Id$
-dnl config.m4 for extension mysqli
-
-PHP_ARG_WITH(mysqli, for MySQLi support,
-[ --with-mysqli[=FILE] Include MySQLi support. FILE is the optional pathname
- to mysql_config.])
-
-PHP_ARG_ENABLE(embedded_mysqli, whether to enable embedded MySQLi support,
-[ --enable-embedded-mysqli MYSQLi: Enable embedded support.], no, no)
-
-if test "$PHP_MYSQLI" != "no"; then
-
- if test "$PHP_MYSQL" = "yes"; then
- AC_MSG_ERROR([--with-mysql (using bundled libs) can not be used together with --with-mysqli.])
- fi
-
- if test "$PHP_MYSQLI" = "yes"; then
- MYSQL_CONFIG=`$php_shtool path mysql_config`
- else
- MYSQL_CONFIG=$PHP_MYSQLI
- fi
-
- if test "$PHP_EMBEDDED_MYSQLI" = "yes"; then
- AC_DEFINE(HAVE_EMBEDDED_MYSQLI, 1, [embedded MySQL support enabled])
- MYSQL_LIB_CFG='--libmysqld-libs'
- else
- MYSQL_LIB_CFG='--libs'
- fi
-
- if test -x "$MYSQL_CONFIG" && $MYSQL_CONFIG $MYSQL_LIB_CFG > /dev/null 2>&1; then
- MYSQLI_INCLINE=`$MYSQL_CONFIG --cflags | sed -e "s/'//g"`
- MYSQLI_LIBLINE=`$MYSQL_CONFIG $MYSQL_LIB_CFG | sed -e "s/'//g"`
- else
- AC_MSG_RESULT([mysql_config not found])
- AC_MSG_ERROR([Please reinstall the mysql distribution])
- fi
-
- dnl
- dnl Check the library
- dnl
- PHP_CHECK_LIBRARY(mysqlclient, mysql_set_server_option,
- [
- PHP_EVAL_INCLINE($MYSQLI_INCLINE)
- PHP_EVAL_LIBLINE($MYSQLI_LIBLINE, MYSQLI_SHARED_LIBADD)
- AC_DEFINE(HAVE_MYSQLILIB,1,[ ])
- PHP_CHECK_LIBRARY(mysqlclient, mysql_stmt_field_count,
- [ ],[
- AC_MSG_ERROR([MySQLI doesn't support versions < 4.1.3 (for MySQL 4.1.x) and < 5.0.1 for (MySQL 5.0.x) anymore. Please update your libraries.])
- ],[])
- ],[
- AC_MSG_ERROR([wrong mysql library version or lib not found. Check config.log for more information.])
- ],[
- $MYSQLI_LIBLINE
- ])
-
- PHP_NEW_EXTENSION(mysqli, mysqli.c mysqli_api.c mysqli_prop.c mysqli_nonapi.c mysqli_fe.c mysqli_report.c mysqli_repl.c, $ext_shared)
- PHP_SUBST(MYSQLI_SHARED_LIBADD)
-fi
diff --git a/ext/mysqli/config.w32 b/ext/mysqli/config.w32
deleted file mode 100644
index 2ced23e8b5..0000000000
--- a/ext/mysqli/config.w32
+++ /dev/null
@@ -1,14 +0,0 @@
-// $Id$
-// vim:ft=javascript
-
-ARG_WITH("mysqli", "MySQLi support", "no");
-
-if (PHP_MYSQLI != "no") {
- if (CHECK_LIB("libmysqli.lib", "mysqli", PHP_MYSQLI) &&
- CHECK_HEADER_ADD_INCLUDE("mysql.h", "CFLAGS_MYSQLI", PHP_PHP_BUILD + "\\include\\mysqli;" + PHP_MYSQLI)) {
- EXTENSION("mysqli", "mysqli.c mysqli_api.c mysqli_fe.c mysqli_nonapi.c mysqli_prop.c mysqli_report.c mysqli_repl.c");
- AC_DEFINE('HAVE_MYSQLILIB', 1, 'Have MySQLi library');
- } else {
- WARNING("mysqli not enabled; libraries and headers not found");
- }
-}
diff --git a/ext/mysqli/mysqli.c b/ext/mysqli/mysqli.c
deleted file mode 100644
index a6cb3de2fe..0000000000
--- a/ext/mysqli/mysqli.c
+++ /dev/null
@@ -1,940 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Georg Richter <georg@php.net> |
- +----------------------------------------------------------------------+
-
- $Id$
-*/
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <signal.h>
-
-#include "php.h"
-#include "php_ini.h"
-#include "ext/standard/info.h"
-#include "ext/standard/php_string.h"
-#include "php_mysqli.h"
-#include "zend_exceptions.h"
-
-#define MYSQLI_STORE_RESULT 0
-#define MYSQLI_USE_RESULT 1
-
-ZEND_DECLARE_MODULE_GLOBALS(mysqli)
-static zend_object_handlers mysqli_object_handlers;
-static HashTable classes;
-static HashTable mysqli_link_properties;
-static HashTable mysqli_result_properties;
-static HashTable mysqli_stmt_properties;
-extern void php_mysqli_connect(INTERNAL_FUNCTION_PARAMETERS);
-
-typedef int (*mysqli_read_t)(mysqli_object *obj, zval **retval TSRMLS_DC);
-typedef int (*mysqli_write_t)(mysqli_object *obj, zval *newval TSRMLS_DC);
-
-typedef struct _mysqli_prop_handler {
- mysqli_read_t read_func;
- mysqli_write_t write_func;
-} mysqli_prop_handler;
-
-/* {{{ php_free_stmt_bind_buffer */
-void php_free_stmt_bind_buffer(BIND_BUFFER bbuf, int type)
-{
- unsigned int i;
-
- if (!bbuf.var_cnt) {
- return;
- }
-
- if (bbuf.is_null) {
- efree(bbuf.is_null);
- }
-
- for (i=0; i < bbuf.var_cnt; i++) {
-
- /* free temporary bind buffer */
- if (type == FETCH_RESULT) {
- efree(bbuf.buf[i].val);
- }
-
- if (bbuf.vars[i]) {
- zval_ptr_dtor(&bbuf.vars[i]);
- }
- }
-
- if (bbuf.vars) {
- efree(bbuf.vars);
- }
-
- if (type == FETCH_RESULT) {
- efree(bbuf.buf);
- }
- bbuf.var_cnt = 0;
- return;
-}
-/* }}} */
-
-/* {{{ php_clear_stmt_bind */
-void php_clear_stmt_bind(MY_STMT *stmt)
-{
- if (stmt->stmt) {
- mysql_stmt_close(stmt->stmt);
- }
-
- php_free_stmt_bind_buffer(stmt->param, FETCH_SIMPLE);
- php_free_stmt_bind_buffer(stmt->result, FETCH_RESULT);
-
- if (stmt->query) {
- efree(stmt->query);
- }
- efree(stmt);
- return;
-}
-/* }}} */
-
-/* {{{ php_clear_mysql */
-void php_clear_mysql(MY_MYSQL *mysql) {
- if (mysql->li_read) {
- printf("freeing...\n");
- efree(Z_STRVAL_P(mysql->li_read));
- FREE_ZVAL(mysql->li_read);
- mysql->li_read = NULL;
- }
-}
-/* }}} */
-
-/* {{{ mysqli_objects_free_storage
- */
-static void mysqli_objects_free_storage(zend_object *object TSRMLS_DC)
-{
- mysqli_object *intern = (mysqli_object *)object;
- MYSQLI_RESOURCE *my_res = (MYSQLI_RESOURCE *)intern->ptr;
-
- zend_hash_destroy(intern->zo.properties);
- FREE_HASHTABLE(intern->zo.properties);
-
- /* link object */
- if (instanceof_function(intern->zo.ce, mysqli_link_class_entry TSRMLS_CC)) {
- if (my_res && my_res->ptr) {
- MY_MYSQL *mysql = (MY_MYSQL *)my_res->ptr;
-
- mysql_close(mysql->mysql);
-
- php_clear_mysql(mysql);
- }
- } else if (intern->zo.ce == mysqli_stmt_class_entry) { /* stmt object */
- if (my_res && my_res->ptr) {
- php_clear_stmt_bind((MY_STMT *)my_res->ptr);
- }
- } else if (intern->zo.ce == mysqli_result_class_entry) { /* result object */
- if (my_res && my_res->ptr) {
- mysql_free_result(my_res->ptr);
- }
- }
- my_efree(my_res);
- efree(object);
-}
-/* }}} */
-
-/* {{{ mysqli_read_na */
-static int mysqli_read_na(mysqli_object *obj, zval **retval TSRMLS_DC)
-{
- *retval = NULL;
- php_error_docref(NULL TSRMLS_CC, E_ERROR, "Cannot read property");
- return FAILURE;
-}
-/* }}} */
-
-/* {{{ mysqli_write_na */
-static int mysqli_write_na(mysqli_object *obj, zval *newval TSRMLS_DC)
-{
- php_error_docref(NULL TSRMLS_CC, E_ERROR, "Cannot write property");
- return FAILURE;
-}
-/* }}} */
-
-/* {{{ mysqli_read_property */
-zval *mysqli_read_property(zval *object, zval *member, int type TSRMLS_DC)
-{
- zval tmp_member;
- zval *retval;
- mysqli_object *obj;
- mysqli_prop_handler *hnd;
- zend_object_handlers *std_hnd;
- int ret;
-
- ret = FAILURE;
- obj = (mysqli_object *)zend_objects_get_address(object TSRMLS_CC);
-
- if (!obj->valid) {
- retval = EG(uninitialized_zval_ptr);
- return(retval);
- }
-
- if (member->type != IS_STRING) {
- tmp_member = *member;
- zval_copy_ctor(&tmp_member);
- convert_to_string(&tmp_member);
- member = &tmp_member;
- }
-
- if (obj->prop_handler != NULL) {
- ret = zend_hash_find(obj->prop_handler, Z_STRVAL_P(member), Z_STRLEN_P(member)+1, (void **) &hnd);
- }
- if (ret == SUCCESS) {
-
- /* check if mysqli object is still valid */
- if (!strcmp(obj->zo.ce->name, "mysqli")) {
- if (!obj->ptr ||
- !((MYSQL *)((MY_MYSQL *)((MYSQLI_RESOURCE *)(obj->ptr))->ptr)->mysql)->thread_id) {
- retval = EG(uninitialized_zval_ptr);
- return(retval);
- }
- } else
- /* check if stmt object is still valid */
- if (!strcmp(obj->zo.ce->name, "mysqli_stmt")) {
- if (!obj->ptr ||
- !((MYSQL_STMT *)((MY_STMT *)((MYSQLI_RESOURCE *)(obj->ptr))->ptr)->stmt)->mysql) {
- 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 */
- retval->refcount = 0;
- } else {
- retval = EG(uninitialized_zval_ptr);
- }
- } else {
- std_hnd = zend_get_std_object_handlers();
- retval = std_hnd->read_property(object, member, type TSRMLS_CC);
- }
-
- if (member == &tmp_member) {
- zval_dtor(member);
- }
- return(retval);
-}
-/* }}} */
-
-/* {{{ mysqli_write_property */
-void mysqli_write_property(zval *object, zval *member, zval *value TSRMLS_DC)
-{
- zval tmp_member;
- mysqli_object *obj;
- mysqli_prop_handler *hnd;
- zend_object_handlers *std_hnd;
- int ret;
-
- if (member->type != IS_STRING) {
- tmp_member = *member;
- zval_copy_ctor(&tmp_member);
- convert_to_string(&tmp_member);
- member = &tmp_member;
- }
-
- ret = FAILURE;
- obj = (mysqli_object *)zend_objects_get_address(object TSRMLS_CC);
-
- if (obj->prop_handler != NULL) {
- ret = zend_hash_find((HashTable *)obj->prop_handler, Z_STRVAL_P(member), Z_STRLEN_P(member)+1, (void **) &hnd);
- }
- if (ret == SUCCESS) {
- hnd->write_func(obj, value TSRMLS_CC);
- if (! PZVAL_IS_REF(value) && value->refcount == 0) {
- value->refcount++;
- zval_ptr_dtor(&value);
- }
- } else {
- std_hnd = zend_get_std_object_handlers();
- std_hnd->write_property(object, member, value TSRMLS_CC);
- }
-
- if (member == &tmp_member) {
- zval_dtor(member);
- }
-}
-/* }}} */
-
-/* {{{ void mysqli_add_property(HashTable *h, char *pname, mysqli_read_t r_func, mysqli_write_t w_func TSRMLS_DC) */
-void mysqli_add_property(HashTable *h, char *pname, mysqli_read_t r_func, mysqli_write_t w_func TSRMLS_DC) {
- mysqli_prop_handler p;
-
- p.read_func = (r_func) ? r_func : mysqli_read_na;
- p.write_func = (w_func) ? w_func : mysqli_write_na;
-
- zend_hash_add(h, pname, strlen(pname) + 1, &p, sizeof(mysqli_prop_handler), NULL);
-}
-/* }}} */
-
-static union _zend_function *php_mysqli_constructor_get(zval *object TSRMLS_DC)
-{
- mysqli_object *obj = (mysqli_object *)zend_objects_get_address(object TSRMLS_CC);
-
- if (obj->zo.ce != mysqli_link_class_entry) {
- return obj->zo.ce->constructor;
- } else {
- static zend_internal_function f;
-
- f.function_name = mysqli_link_class_entry->name;
- f.scope = mysqli_link_class_entry;
- f.arg_info = NULL;
- f.num_args = 0;
- f.fn_flags = 0;
-
- f.type = ZEND_INTERNAL_FUNCTION;
- f.handler = ZEND_FN(mysqli_connect);
-
- return (union _zend_function*)&f;
- }
-}
-/* {{{ mysqli_objects_new
- */
-PHP_MYSQLI_EXPORT(zend_object_value) mysqli_objects_new(zend_class_entry *class_type TSRMLS_DC)
-{
- zend_object_value retval;
- mysqli_object *intern;
- zval *tmp;
- zend_class_entry *parent;
-
- intern = emalloc(sizeof(mysqli_object));
- memset(intern, 0, sizeof(mysqli_object));
- intern->zo.ce = class_type;
- intern->zo.in_get = 0;
- intern->zo.in_set = 0;
- intern->ptr = NULL;
- intern->valid = 0;
- intern->prop_handler = NULL;
- if ((parent = class_type->parent))
- {
- zend_hash_find(&classes, parent->name, parent->name_length + 1, (void **) &intern->prop_handler);
- }
- zend_hash_find(&classes, class_type->name, class_type->name_length + 1, (void **) &intern->prop_handler);
-
- ALLOC_HASHTABLE(intern->zo.properties);
- zend_hash_init(intern->zo.properties, 0, NULL, ZVAL_PTR_DTOR, 0);
- zend_hash_copy(intern->zo.properties, &class_type->default_properties, (copy_ctor_func_t) zval_add_ref,
- (void *) &tmp, sizeof(zval *));
-
- retval.handle = zend_objects_store_put(intern, NULL, mysqli_objects_free_storage, NULL TSRMLS_CC);
- retval.handlers = &mysqli_object_handlers;
-
- return retval;
-}
-/* }}} */
-
-/* {{{ mysqli_module_entry
- */
-zend_module_entry mysqli_module_entry = {
-#if ZEND_MODULE_API_NO >= 20010901
- STANDARD_MODULE_HEADER,
-#endif
- "mysqli",
- mysqli_functions,
- PHP_MINIT(mysqli),
- PHP_MSHUTDOWN(mysqli),
- PHP_RINIT(mysqli), /* Replace with NULL if there's nothing to do at request start */
- PHP_RSHUTDOWN(mysqli), /* Replace with NULL if there's nothing to do at request end */
- PHP_MINFO(mysqli),
-#if ZEND_MODULE_API_NO >= 20010901
- "0.1", /* Replace with version number for your extension */
-#endif
- STANDARD_MODULE_PROPERTIES
-};
-/* }}} */
-
-#ifdef COMPILE_DL_MYSQLI
-ZEND_GET_MODULE(mysqli)
-#endif
-
-/* {{{ PHP_INI_BEGIN
-*/
-PHP_INI_BEGIN()
- STD_PHP_INI_ENTRY_EX("mysqli.max_links", "-1", PHP_INI_SYSTEM, OnUpdateLong, max_links, zend_mysqli_globals, mysqli_globals, display_link_numbers)
- STD_PHP_INI_ENTRY("mysqli.default_host", NULL, PHP_INI_ALL, OnUpdateString, default_host, zend_mysqli_globals, mysqli_globals)
- STD_PHP_INI_ENTRY("mysqli.default_user", NULL, PHP_INI_ALL, OnUpdateString, default_user, zend_mysqli_globals, mysqli_globals)
- STD_PHP_INI_ENTRY("mysqli.default_pw", NULL, PHP_INI_ALL, OnUpdateString, default_pw, zend_mysqli_globals, mysqli_globals)
- STD_PHP_INI_ENTRY("mysqli.default_port", "3306", PHP_INI_ALL, OnUpdateLong, default_port, zend_mysqli_globals, mysqli_globals)
- STD_PHP_INI_ENTRY("mysqli.default_socket", NULL, PHP_INI_ALL, OnUpdateStringUnempty, default_socket, zend_mysqli_globals, mysqli_globals)
- STD_PHP_INI_BOOLEAN("mysqli.reconnect", "0", PHP_INI_SYSTEM, OnUpdateLong, reconnect, zend_mysqli_globals, mysqli_globals)
-PHP_INI_END()
-
-/* }}} */
-
-/* {{{ php_mysqli_init_globals
- */
-static void php_mysqli_init_globals(zend_mysqli_globals *mysqli_globals)
-{
- mysqli_globals->num_links = 0;
- mysqli_globals->max_links = 0;
- mysqli_globals->default_port = 0;
- mysqli_globals->default_host = NULL;
- mysqli_globals->default_user = NULL;
- mysqli_globals->default_pw = NULL;
- mysqli_globals->default_socket = NULL;
- mysqli_globals->reconnect = 0;
- mysqli_globals->report_mode = 0;
- mysqli_globals->report_ht = 0;
- mysqli_globals->multi_query = 0;
-}
-/* }}} */
-
-/* {{{ PHP_MINIT_FUNCTION
- */
-PHP_MINIT_FUNCTION(mysqli)
-{
- zend_class_entry *ce;
-
- ZEND_INIT_MODULE_GLOBALS(mysqli, php_mysqli_init_globals, NULL);
- REGISTER_INI_ENTRIES();
-
- memcpy(&mysqli_object_handlers, zend_get_std_object_handlers(), sizeof(zend_object_handlers));
- mysqli_object_handlers.clone_obj = NULL;
- mysqli_object_handlers.read_property = mysqli_read_property;
- mysqli_object_handlers.write_property = mysqli_write_property;
- mysqli_object_handlers.get_property_ptr_ptr = NULL;
- mysqli_object_handlers.get_constructor = php_mysqli_constructor_get;
-
- zend_hash_init(&classes, 0, NULL, NULL, 1);
-
- REGISTER_MYSQLI_CLASS_ENTRY("mysqli", mysqli_link_class_entry, mysqli_link_methods);
-
- ce = mysqli_link_class_entry;
- zend_hash_init(&mysqli_link_properties, 0, NULL, NULL, 1);
- MYSQLI_ADD_PROPERTIES(&mysqli_link_properties, mysqli_link_property_entries);
- zend_hash_add(&classes, ce->name, ce->name_length+1, &mysqli_link_properties, sizeof(mysqli_link_properties), NULL);
-
- REGISTER_MYSQLI_CLASS_ENTRY("mysqli_result", mysqli_result_class_entry, mysqli_result_methods);
- ce = mysqli_result_class_entry;
- zend_hash_init(&mysqli_result_properties, 0, NULL, NULL, 1);
- MYSQLI_ADD_PROPERTIES(&mysqli_result_properties, mysqli_result_property_entries);
- zend_hash_add(&classes, ce->name, ce->name_length+1, &mysqli_result_properties, sizeof(mysqli_result_properties), NULL);
-
- REGISTER_MYSQLI_CLASS_ENTRY("mysqli_stmt", mysqli_stmt_class_entry, mysqli_stmt_methods);
- ce = mysqli_stmt_class_entry;
- zend_hash_init(&mysqli_stmt_properties, 0, NULL, NULL, 1);
- MYSQLI_ADD_PROPERTIES(&mysqli_stmt_properties, mysqli_stmt_property_entries);
- zend_hash_add(&classes, ce->name, ce->name_length+1, &mysqli_stmt_properties, sizeof(mysqli_stmt_properties), NULL);
-
- /* mysqli_options */
- REGISTER_LONG_CONSTANT("MYSQLI_READ_DEFAULT_GROUP", MYSQL_READ_DEFAULT_GROUP, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("MYSQLI_READ_DEFAULT_FILE", MYSQL_READ_DEFAULT_FILE, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("MYSQLI_OPT_CONNECT_TIMEOUT", MYSQL_OPT_CONNECT_TIMEOUT, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("MYSQLI_OPT_LOCAL_INFILE", MYSQL_OPT_LOCAL_INFILE, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("MYSQLI_INIT_COMMAND", MYSQL_INIT_COMMAND, CONST_CS | CONST_PERSISTENT);
-
- /* mysqli_real_connect flags */
- REGISTER_LONG_CONSTANT("MYSQLI_CLIENT_SSL", CLIENT_SSL, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("MYSQLI_CLIENT_COMPRESS",CLIENT_COMPRESS, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("MYSQLI_CLIENT_INTERACTIVE", CLIENT_INTERACTIVE, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("MYSQLI_CLIENT_IGNORE_SPACE", CLIENT_IGNORE_SPACE, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("MYSQLI_CLIENT_NO_SCHEMA", CLIENT_NO_SCHEMA, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("MYSQLI_CLIENT_FOUND_ROWS", CLIENT_FOUND_ROWS, CONST_CS | CONST_PERSISTENT);
-
- /* for mysqli_query */
- REGISTER_LONG_CONSTANT("MYSQLI_STORE_RESULT", 0, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("MYSQLI_USE_RESULT", 1, CONST_CS | CONST_PERSISTENT);
-
- /* for mysqli_fetch_assoc */
- REGISTER_LONG_CONSTANT("MYSQLI_ASSOC", MYSQLI_ASSOC, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("MYSQLI_NUM", MYSQLI_NUM, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("MYSQLI_BOTH", MYSQLI_BOTH, CONST_CS | CONST_PERSISTENT);
-
- /* for mysqli_stmt_set_attr */
- REGISTER_LONG_CONSTANT("MYSQLI_STMT_ATTR_UPDATE_MAX_LENGTH", STMT_ATTR_UPDATE_MAX_LENGTH, CONST_CS | CONST_PERSISTENT);
-
-#ifdef STMT_ATTR_CURSOR_TYPE
- REGISTER_LONG_CONSTANT("MYSQLI_STMT_ATTR_CURSOR_TYPE", STMT_ATTR_CURSOR_TYPE, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("MYSQLI_CURSOR_TYPE_NO_CURSOR", CURSOR_TYPE_NO_CURSOR, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("MYSQLI_CURSOR_TYPE_READ_ONLY", CURSOR_TYPE_READ_ONLY, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("MYSQLI_CURSOR_TYPE_FOR_UPDATE", CURSOR_TYPE_FOR_UPDATE, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("MYSQLI_CURSOR_TYPE_SCROLLABLE", CURSOR_TYPE_SCROLLABLE, CONST_CS | CONST_PERSISTENT);
-#endif
-
- /* column information */
- REGISTER_LONG_CONSTANT("MYSQLI_NOT_NULL_FLAG", NOT_NULL_FLAG, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("MYSQLI_PRI_KEY_FLAG", PRI_KEY_FLAG, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("MYSQLI_UNIQUE_KEY_FLAG", UNIQUE_KEY_FLAG, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("MYSQLI_MULTIPLE_KEY_FLAG", MULTIPLE_KEY_FLAG, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("MYSQLI_BLOB_FLAG", BLOB_FLAG, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("MYSQLI_UNSIGNED_FLAG", UNSIGNED_FLAG, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("MYSQLI_ZEROFILL_FLAG", ZEROFILL_FLAG, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("MYSQLI_AUTO_INCREMENT_FLAG", AUTO_INCREMENT_FLAG, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("MYSQLI_TIMESTAMP_FLAG", TIMESTAMP_FLAG, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("MYSQLI_SET_FLAG", SET_FLAG, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("MYSQLI_NUM_FLAG", NUM_FLAG, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("MYSQLI_PART_KEY_FLAG", PART_KEY_FLAG, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("MYSQLI_GROUP_FLAG", GROUP_FLAG, CONST_CS | CONST_PERSISTENT);
-
- REGISTER_LONG_CONSTANT("MYSQLI_TYPE_DECIMAL", FIELD_TYPE_DECIMAL, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("MYSQLI_TYPE_TINY", FIELD_TYPE_TINY, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("MYSQLI_TYPE_SHORT", FIELD_TYPE_SHORT, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("MYSQLI_TYPE_LONG", FIELD_TYPE_LONG, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("MYSQLI_TYPE_FLOAT", FIELD_TYPE_FLOAT, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("MYSQLI_TYPE_DOUBLE", FIELD_TYPE_DOUBLE, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("MYSQLI_TYPE_NULL", FIELD_TYPE_NULL, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("MYSQLI_TYPE_TIMESTAMP", FIELD_TYPE_TIMESTAMP, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("MYSQLI_TYPE_LONGLONG", FIELD_TYPE_LONGLONG, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("MYSQLI_TYPE_INT24", FIELD_TYPE_INT24, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("MYSQLI_TYPE_DATE", FIELD_TYPE_DATE, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("MYSQLI_TYPE_TIME", FIELD_TYPE_TIME, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("MYSQLI_TYPE_DATETIME", FIELD_TYPE_DATETIME , CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("MYSQLI_TYPE_YEAR", FIELD_TYPE_YEAR, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("MYSQLI_TYPE_NEWDATE", FIELD_TYPE_NEWDATE, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("MYSQLI_TYPE_ENUM", FIELD_TYPE_ENUM, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("MYSQLI_TYPE_SET", FIELD_TYPE_SET, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("MYSQLI_TYPE_TINY_BLOB", FIELD_TYPE_TINY_BLOB, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("MYSQLI_TYPE_MEDIUM_BLOB", FIELD_TYPE_MEDIUM_BLOB, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("MYSQLI_TYPE_LONG_BLOB", FIELD_TYPE_LONG_BLOB, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("MYSQLI_TYPE_BLOB", FIELD_TYPE_BLOB, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("MYSQLI_TYPE_VAR_STRING", FIELD_TYPE_VAR_STRING, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("MYSQLI_TYPE_STRING", FIELD_TYPE_STRING, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("MYSQLI_TYPE_CHAR", FIELD_TYPE_CHAR, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("MYSQLI_TYPE_INTERVAL", FIELD_TYPE_INTERVAL, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("MYSQLI_TYPE_GEOMETRY", FIELD_TYPE_GEOMETRY, CONST_CS | CONST_PERSISTENT);
-
- /* 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);
-
- /* bind blob support */
- REGISTER_LONG_CONSTANT("MYSQLI_NO_DATA", MYSQL_NO_DATA, CONST_CS | CONST_PERSISTENT);
-
- /* reporting */
- REGISTER_LONG_CONSTANT("MYSQLI_REPORT_INDEX", MYSQLI_REPORT_INDEX, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("MYSQLI_REPORT_ERROR", MYSQLI_REPORT_ERROR, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("MYSQLI_REPORT_ALL", MYSQLI_REPORT_ALL, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("MYSQLI_REPORT_OFF", 0, CONST_CS | CONST_PERSISTENT);
-
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ PHP_MSHUTDOWN_FUNCTION
- */
-PHP_MSHUTDOWN_FUNCTION(mysqli)
-{
- zend_hash_destroy(&mysqli_link_properties);
- zend_hash_destroy(&mysqli_result_properties);
- zend_hash_destroy(&mysqli_stmt_properties);
- zend_hash_destroy(&classes);
-
- UNREGISTER_INI_ENTRIES();
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ PHP_RINIT_FUNCTION
- */
-PHP_RINIT_FUNCTION(mysqli)
-{
- MyG(error_msg) = NULL;
- MyG(error_no) = 0;
-
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ PHP_RSHUTDOWN_FUNCTION
- */
-PHP_RSHUTDOWN_FUNCTION(mysqli)
-{
- if (MyG(error_msg)) {
- efree(MyG(error_msg));
- }
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ PHP_MINFO_FUNCTION
- */
-PHP_MINFO_FUNCTION(mysqli)
-{
- php_info_print_table_start();
- php_info_print_table_header(2, "MysqlI Support", "enabled");
- php_info_print_table_row(2, "Client API version", mysql_get_client_info());
- php_info_print_table_row(2, "MYSQLI_SOCKET", MYSQL_UNIX_ADDR);
-
-
- php_info_print_table_end();
-
- DISPLAY_INI_ENTRIES();
-}
-/* }}} */
-
-/* {{{ php_mysqli_fetch_into_hash
- */
-void php_mysqli_fetch_into_hash(INTERNAL_FUNCTION_PARAMETERS, int override_flags, int into_object)
-{
- MYSQL_RES *result;
- zval *mysql_result;
- int fetchtype;
- unsigned int i;
- MYSQL_FIELD *fields;
- MYSQL_ROW row;
- unsigned long *field_len;
- zval *ctor_params = NULL;
- zend_class_entry *ce = NULL;
-
- if (into_object) {
- char *class_name;
- int class_name_len;
-
- if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O|sz", &mysql_result, mysqli_result_class_entry, &class_name, &class_name_len, &ctor_params) == FAILURE) {
- return;
- }
- if (ZEND_NUM_ARGS() < (getThis() ? 1 : 2)) {
- ce = zend_standard_class_def;
- } else {
- ce = zend_fetch_class(class_name, class_name_len, ZEND_FETCH_CLASS_AUTO TSRMLS_CC);
- }
- if (!ce) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Could not find class '%s'", class_name);
- return;
- }
- fetchtype = MYSQLI_ASSOC;
- } else {
- if (override_flags) {
- if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &mysql_result, mysqli_result_class_entry) == FAILURE) {
- return;
- }
- fetchtype = override_flags;
- } else {
- fetchtype = MYSQLI_BOTH;
- if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O|l", &mysql_result, mysqli_result_class_entry, &fetchtype) == FAILURE) {
- return;
- }
- }
- }
-
- MYSQLI_FETCH_RESOURCE(result, MYSQL_RES *, &mysql_result, "mysqli_result");
-
- if (!(row = mysql_fetch_row(result))) {
- RETURN_NULL();
- }
-
- if (fetchtype & MYSQLI_ASSOC) {
- fields = mysql_fetch_fields(result);
- }
-
- array_init(return_value);
- field_len = mysql_fetch_lengths(result);
-
- for (i = 0; i < mysql_num_fields(result); i++) {
- if (row[i]) {
- zval *res;
-
- MAKE_STD_ZVAL(res);
-
- /* check if we need magic quotes */
- if (PG(magic_quotes_runtime)) {
- Z_TYPE_P(res) = IS_STRING;
- Z_STRVAL_P(res) = php_addslashes(row[i], field_len[i], &Z_STRLEN_P(res), 0 TSRMLS_CC);
- } else {
- ZVAL_STRINGL(res, row[i], field_len[i], 1);
- }
-
- if (fetchtype & MYSQLI_NUM) {
- add_index_zval(return_value, i, res);
- }
- if (fetchtype & MYSQLI_ASSOC) {
- if (fetchtype & MYSQLI_NUM) {
- ZVAL_ADDREF(res);
- }
- add_assoc_zval(return_value, fields[i].name, res);
- }
- } else {
- if (fetchtype & MYSQLI_NUM) {
- add_index_null(return_value, i);
- }
- if (fetchtype & MYSQLI_ASSOC) {
- add_assoc_null(return_value, fields[i].name);
- }
- }
- }
-
- if (into_object) {
- zval dataset = *return_value;
- zend_fcall_info fci;
- zend_fcall_info_cache fcc;
- zval *retval_ptr;
-
- object_and_properties_init(return_value, ce, NULL);
- zend_merge_properties(return_value, Z_ARRVAL(dataset), 1 TSRMLS_CC);
-
- if (ce->constructor) {
- fci.size = sizeof(fci);
- fci.function_table = &ce->function_table;
- fci.function_name = NULL;
- fci.symbol_table = NULL;
- fci.object_pp = &return_value;
- fci.retval_ptr_ptr = &retval_ptr;
- if (ctor_params && Z_TYPE_P(ctor_params) != IS_NULL) {
- if (Z_TYPE_P(ctor_params) == IS_ARRAY) {
- HashTable *ht = Z_ARRVAL_P(ctor_params);
- Bucket *p;
-
- fci.param_count = 0;
- fci.params = safe_emalloc(sizeof(zval*), ht->nNumOfElements, 0);
- p = ht->pListHead;
- while (p != NULL) {
- fci.params[fci.param_count++] = (zval**)p->pData;
- p = p->pListNext;
- }
- } else {
- /* Two problems why we throw exceptions here: PHP is typeless
- * and hence passing one argument that's not an array could be
- * by mistake and the other way round is possible, too. The
- * single value is an array. Also we'd have to make that one
- * argument passed by reference.
- */
- zend_throw_exception(zend_exception_get_default(), "Parameter ctor_params must be an array", 0 TSRMLS_CC);
- return;
- }
- } else {
- fci.param_count = 0;
- fci.params = NULL;
- }
- fci.no_separation = 1;
-
- fcc.initialized = 1;
- fcc.function_handler = ce->constructor;
- fcc.calling_scope = EG(scope);
- fcc.object_pp = &return_value;
-
- if (zend_call_function(&fci, &fcc TSRMLS_CC) == FAILURE) {
- zend_throw_exception_ex(zend_exception_get_default(), 0 TSRMLS_CC, "Could not execute %s::%s()", ce->name, ce->constructor->common.function_name);
- } else {
- if (retval_ptr) {
- zval_ptr_dtor(&retval_ptr);
- }
- }
- if (fci.params) {
- efree(fci.params);
- }
- } else if (ctor_params) {
- zend_throw_exception_ex(zend_exception_get_default(), 0 TSRMLS_CC, "Class %s does not have a constructor hence you cannot use ctor_params", ce->name);
- }
- }
-}
-/* }}} */
-
-/* {{{ php_mysqli_set_error
- */
-PHP_MYSQLI_API void php_mysqli_set_error(long mysql_errno, char *mysql_err TSRMLS_DC)
-{
- MyG(error_no) = mysql_errno;
- if (MyG(error_msg)) {
- efree(MyG(error_msg));
- }
- MyG(error_msg) = estrdup(mysql_err);
-}
-/* }}} */
-
-#define ALLOC_CALLBACK_ARGS(a, b, c)\
-if (c) {\
- a = (zval ***)safe_emalloc(c, sizeof(zval **), 0);\
- for (i = b; i < c; i++) {\
- a[i] = emalloc(sizeof(zval *));\
- MAKE_STD_ZVAL(*a[i]);\
- }\
-}
-
-#define FREE_CALLBACK_ARGS(a, b, c)\
-if (a) {\
- for (i=b; i < c; i++) {\
- zval_ptr_dtor(a[i]);\
- efree(a[i]);\
- }\
- efree(a);\
-}
-
-#define LOCAL_INFILE_ERROR_MSG(source,dest)\
-memset(source, 0, LOCAL_INFILE_ERROR_LEN);\
-memcpy(source, dest, LOCAL_INFILE_ERROR_LEN-1);
-
-/* {{{ void php_set_local_infile_handler_default
-*/
-void php_set_local_infile_handler_default(MY_MYSQL *mysql) {
- /* register internal callback functions */
- mysql_set_local_infile_handler(mysql->mysql, &php_local_infile_init, &php_local_infile_read,
- &php_local_infile_end, &php_local_infile_error, (void *)mysql);
- mysql->li_read = NULL;
-}
-/* }}} */
-
-/* {{{ php_local_infile_init
- */
-int php_local_infile_init(void **ptr, const char *filename, void *userdata)
-{
- mysqli_local_infile *data;
- MY_MYSQL *mysql;
- php_stream_context *context = NULL;
-
- TSRMLS_FETCH();
-
- /* save pointer to MY_MYSQL structure (userdata) */
- if (!(*ptr= data= ((mysqli_local_infile *)calloc(1, sizeof(mysqli_local_infile))))) {
- return 1;
- }
-
- if (!(mysql = (MY_MYSQL *)userdata)) {
- LOCAL_INFILE_ERROR_MSG(data->error_msg, ER(CR_UNKNOWN_ERROR));
- return 1;
- }
-
- /* check open_basedir */
- if (PG(open_basedir)) {
- if (php_check_open_basedir_ex(filename, 0 TSRMLS_CC) == -1) {
- LOCAL_INFILE_ERROR_MSG(data->error_msg, "open_basedir restriction in effect. Unable to open file");
- return 1;
- }
- }
-
- mysql->li_stream = php_stream_open_wrapper_ex((char *)filename, "r", 0, NULL, context);
-
- if (mysql->li_stream == NULL) {
- return 1;
- }
-
- data->userdata = mysql;
-
- return 0;
-}
-/* }}} */
-
-int php_local_infile_read(void *ptr, char *buf, uint buf_len)
-{
- mysqli_local_infile *data;
- MY_MYSQL *mysql;
- zval ***callback_args;
- zval *retval;
- zval *fp;
- int argc = 4;
- int i;
- long rc;
-
- TSRMLS_FETCH();
-
- data= (mysqli_local_infile *)ptr;
- mysql = data->userdata;
-
- /* default processing */
- if (!mysql->li_read) {
- int count;
-
- count = (int)php_stream_read(mysql->li_stream, buf, buf_len);
-
- if (count < 0) {
- LOCAL_INFILE_ERROR_MSG(data->error_msg, ER(2));
- }
-
- return count;
- }
-
- ALLOC_CALLBACK_ARGS(callback_args, 1, argc);
-
- /* set parameters: filepointer, buffer, buffer_len, errormsg */
-
- MAKE_STD_ZVAL(fp);
- php_stream_to_zval(mysql->li_stream, fp);
- callback_args[0] = &fp;
- ZVAL_STRING(*callback_args[1], "", 1);
- ZVAL_LONG(*callback_args[2], buf_len);
- ZVAL_STRING(*callback_args[3], "", 1);
-
- if (call_user_function_ex(EG(function_table),
- NULL,
- mysql->li_read,
- &retval,
- argc,
- callback_args,
- 0,
- NULL TSRMLS_CC) == SUCCESS) {
-
- rc = Z_LVAL_P(retval);
- zval_ptr_dtor(&retval);
-
- if (rc > 0) {
- if (rc > buf_len) {
- /* check buffer overflow */
- LOCAL_INFILE_ERROR_MSG(data->error_msg, "Read buffer too large");
- rc = -1;
- } else {
- memcpy(buf, Z_STRVAL_P(*callback_args[1]), rc);
- }
- }
- if (rc < 0) {
- LOCAL_INFILE_ERROR_MSG(data->error_msg, Z_STRVAL_P(*callback_args[3]));
- }
- } else {
- LOCAL_INFILE_ERROR_MSG(data->error_msg, "Can't execute load data local init callback function");
- rc = -1;
- }
-
- FREE_CALLBACK_ARGS(callback_args, 1, argc);
- efree(fp);
- return rc;
-}
-
-/* {{{ php_local_infile_error
- */
-int php_local_infile_error(void *ptr, char *error_msg, uint error_msg_len)
-{
- mysqli_local_infile *data = (mysqli_local_infile *) ptr;
-
- if (data) {
- strcpy(error_msg, data->error_msg);
- return 2000;
- }
- strcpy(error_msg, ER(CR_OUT_OF_MEMORY));
- return CR_OUT_OF_MEMORY;
-}
-/* }}} */
-
-/* {{{ php_local_infile_end
- */
-void php_local_infile_end(void *ptr)
-{
- mysqli_local_infile *data;
- MY_MYSQL *mysql;
-
- TSRMLS_FETCH();
-
- data= (mysqli_local_infile *)ptr;
-
- if (!(mysql = data->userdata)) {
- efree(data);
- return;
- }
-
- php_stream_close(mysql->li_stream);
- //efree(data);
- return;
-}
-/* }}} */
-
-/*
- * 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/mysqli/mysqli.dsp b/ext/mysqli/mysqli.dsp
deleted file mode 100755
index a334202187..0000000000
--- a/ext/mysqli/mysqli.dsp
+++ /dev/null
@@ -1,120 +0,0 @@
-# Microsoft Developer Studio Project File - Name="mysqli" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=mysqli - Win32 Debug_TS
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "mysqli.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "mysqli.mak" CFG="mysqli - Win32 Debug_TS"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "mysqli - Win32 Release_TS" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "mysqli - Win32 Debug_TS" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "mysqli - Win32 Release_TS"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release_TS"
-# PROP BASE Intermediate_Dir "Release_TS"
-# PROP BASE Ignore_Export_Lib 0
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release_TS"
-# PROP Intermediate_Dir "Release_TS"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MD /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "MYSQLI_EXPORTS" /YX /FD /c
-# ADD CPP /nologo /MD /W3 /GX /O2 /I "..\.." /I "..\..\main" /I "..\..\Zend" /I "..\..\TSRM" /I "..\..\..\php_build\include" /I "..\..\..\php_build\include\mysqli" /D ZEND_DEBUG=0 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "COMPILE_DL_MYSQLI" /D ZTS=1 /D "ZEND_WIN32" /D "PHP_WIN32" /D "PHP_MYSQLI_EXPORTS" /D "HAVE_ZLIB" /FR /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x407 /d "NDEBUG"
-# ADD RSC /l 0x407 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386
-# ADD LINK32 php5ts.lib zlib.lib libmySQL.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 /out:"..\..\Release_TS/php_mysqli.dll" /libpath:"..\..\Release_TS" /libpath:"..\..\Release_TS_Inline" /libpath:"..\..\..\php_build\release"
-
-!ELSEIF "$(CFG)" == "mysqli - Win32 Debug_TS"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug_TS"
-# PROP BASE Intermediate_Dir "Debug_TS"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug_TS"
-# PROP Intermediate_Dir "Debug_TS"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "MYSQLI_EXPORTS" /YX /FD /GZ /c
-# ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "..\.." /I "..\..\main" /I "..\..\Zend" /I "..\..\TSRM" /I "..\..\..\php_build\include" /I "..\..\..\php_build\include\mysqli" /D ZEND_DEBUG=1 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "COMPILE_DL_MYSQLI" /D ZTS=1 /D "ZEND_WIN32" /D "PHP_WIN32" /D "PHP_MYSQLI_EXPORTS" /D "HAVE_ZLIB" /YX /FD /GZ /c
-# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x407 /d "_DEBUG"
-# ADD RSC /l 0x407 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 php5ts_debug.lib zlib.lib libmySQL.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /out:"..\..\Debug_TS/php_mysqli.dll" /pdbtype:sept /libpath:"..\..\Debug_TS" /libpath:"..\..\..\php_build\release"
-
-!ENDIF
-
-# Begin Target
-
-# Name "mysqli - Win32 Release_TS"
-# Name "mysqli - Win32 Debug_TS"
-# Begin Group "Source Files"
-
-# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
-# Begin Source File
-
-SOURCE=.\mysqli.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\mysqli_api.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\mysqli_fe.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\mysqli_nonapi.c
-# End Source File
-# End Group
-# Begin Group "Header Files"
-
-# PROP Default_Filter "h;hpp;hxx;hm;inl"
-# Begin Source File
-
-SOURCE=.\php_mysqli.h
-# End Source File
-# End Group
-# End Target
-# End Project
diff --git a/ext/mysqli/mysqli_api.c b/ext/mysqli/mysqli_api.c
deleted file mode 100644
index 3d333bcbfa..0000000000
--- a/ext/mysqli/mysqli_api.c
+++ /dev/null
@@ -1,1996 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Georg Richter <georg@php.net> |
- +----------------------------------------------------------------------+
-
- $Id$
-*/
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <signal.h>
-
-#include "php.h"
-#include "php_ini.h"
-#include "ext/standard/info.h"
-#include "php_mysqli.h"
-
-/* {{{ proto mixed mysqli_affected_rows(object link)
- Get number of affected rows in previous MySQL operation */
-PHP_FUNCTION(mysqli_affected_rows)
-{
- MY_MYSQL *mysql;
- zval *mysql_link;
- my_ulonglong rc;
-
- if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &mysql_link, mysqli_link_class_entry) == FAILURE) {
- return;
- }
-
- MYSQLI_FETCH_RESOURCE(mysql, MY_MYSQL *, &mysql_link, "mysqli_link");
-
- rc = mysql_affected_rows(mysql->mysql);
- MYSQLI_RETURN_LONG_LONG(rc);
-}
-/* }}} */
-
-/* {{{ proto bool mysqli_autocommit(object link, bool mode)
- Turn auto commit on or of */
-PHP_FUNCTION(mysqli_autocommit)
-{
- MY_MYSQL *mysql;
- zval *mysql_link;
- unsigned long rc;
- unsigned long automode;
-
- if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Ob", &mysql_link, mysqli_link_class_entry, &automode) == FAILURE) {
- return;
- }
- MYSQLI_FETCH_RESOURCE(mysql, MY_MYSQL *, &mysql_link, "mysqli_link");
-
- rc = (long) mysql_autocommit(mysql->mysql, automode);
-
- RETURN_BOOL(rc);
-}
-/* }}} */
-
-/* {{{ proto bool mysqli_stmt_bind_param(object stmt, string types, mixed variable [,mixed,....])
- Bind variables to a prepared statement as parameters */
-PHP_FUNCTION(mysqli_stmt_bind_param)
-{
- zval ***args;
- int argc = ZEND_NUM_ARGS();
- int i;
- int num_vars;
- int start = 2;
- int ofs;
- MY_STMT *stmt;
- zval *mysql_stmt;
- MYSQL_BIND *bind;
- char *types;
- int typelen;
- unsigned long rc;
-
- /* calculate and check number of parameters */
- num_vars = argc - 1;
- if (!getThis()) {
- /* ignore handle parameter in procedural interface*/
- --num_vars;
- }
- if (argc < 2) {
- /* there has to be at least one pair */
- WRONG_PARAM_COUNT;
- }
-
- if (zend_parse_method_parameters((getThis()) ? 1:2 TSRMLS_CC, getThis(), "Os", &mysql_stmt, mysqli_stmt_class_entry, &types, &typelen) == FAILURE) {
- return;
- }
-
- MYSQLI_FETCH_RESOURCE(stmt, MY_STMT *, &mysql_stmt, "mysqli_stmt");
-
- if (getThis()) {
- start = 1;
- }
-
- if (strlen(types) != argc - start) {
- /* number of bind variables doesn't match number of elements in type definition string */
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Number of elements in type definition string doesn't match number of bind variables");
- }
-
- if (argc - start != stmt->stmt->param_count) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Number of variables doesn't match number of parameters in prepared statement");
- RETURN_FALSE;
- }
-
- /* prevent leak if variables are already bound */
- if (stmt->param.var_cnt) {
- php_free_stmt_bind_buffer(stmt->param, FETCH_SIMPLE);
- }
-
- args = (zval ***)safe_emalloc(argc, sizeof(zval **), 0);
-
- if (zend_get_parameters_array_ex(argc, args) == FAILURE) {
- efree(args);
- WRONG_PARAM_COUNT;
- }
-
- stmt->param.is_null = ecalloc(num_vars, sizeof(char));
- bind = (MYSQL_BIND *)ecalloc(num_vars, sizeof(MYSQL_BIND));
-
- ofs = 0;
- for (i=start; i < argc; i++) {
-
- /* set specified type */
- switch (types[ofs]) {
- case 'd': /* Double */
- bind[ofs].buffer_type = MYSQL_TYPE_DOUBLE;
- bind[ofs].buffer = (gptr)&Z_DVAL_PP(args[i]);
- bind[ofs].is_null = &stmt->param.is_null[ofs];
- break;
-
- case 'i': /* Integer */
- bind[ofs].buffer_type = MYSQL_TYPE_LONG;
- bind[ofs].buffer = (gptr)&Z_LVAL_PP(args[i]);
- bind[ofs].is_null = &stmt->param.is_null[ofs];
- break;
-
- case 'b': /* Blob (send data) */
- bind[ofs].buffer_type = MYSQL_TYPE_VAR_STRING;
- bind[ofs].is_null = 0;
- bind[ofs].length = 0;
- break;
-
- case 's': /* string */
- bind[ofs].buffer_type = MYSQL_TYPE_VAR_STRING;
- bind[ofs].buffer = NULL;
- bind[ofs].buffer_length = 0;
- bind[ofs].is_null = &stmt->param.is_null[ofs];
- break;
-
- default:
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Undefined fieldtype %c (parameter %d)", types[ofs], i+1);
- efree(args);
- efree(bind);
- RETURN_FALSE;
- break;
- }
- ofs++;
- }
- rc = mysql_stmt_bind_param(stmt->stmt, bind);
- MYSQLI_REPORT_STMT_ERROR(stmt->stmt);
-
- if (rc) {
- efree(args);
- efree(bind);
- RETURN_FALSE;
- }
-
- stmt->param.var_cnt = num_vars;
- stmt->param.vars = (zval **)safe_emalloc(num_vars, sizeof(zval), 0);
- for (i = 0; i < num_vars; i++) {
- if (bind[i].buffer_type != MYSQLI_BIND_SEND_DATA) {
- ZVAL_ADDREF(*args[i+start]);
- stmt->param.vars[i] = *args[i+start];
- } else {
- stmt->param.vars[i] = NULL;
- }
- }
- efree(args);
- efree(bind);
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto bool mysqli_stmt_bind_result(object stmt, mixed var, [,mixed, ...])
- Bind variables to a prepared statement for result storage */
-
-/* TODO:
- do_alloca, free_alloca
-*/
-
-PHP_FUNCTION(mysqli_stmt_bind_result)
-{
- zval ***args;
- int argc = ZEND_NUM_ARGS();
- int i;
- int start = 1;
- int var_cnt;
- int ofs;
- long col_type;
- ulong rc;
- MY_STMT *stmt;
- zval *mysql_stmt;
- MYSQL_BIND *bind;
-
- if (argc < (getThis() ? 1 : 2)) {
- WRONG_PARAM_COUNT;
- }
-
- args = (zval ***)safe_emalloc(argc, sizeof(zval **), 0);
-
- if (zend_get_parameters_array_ex(argc, args) == FAILURE) {
- efree(args);
- WRONG_PARAM_COUNT;
- }
-
- if (getThis()) {
- start = 0;
- }
-
- if (zend_parse_method_parameters((getThis()) ? 0:1 TSRMLS_CC, getThis(), "O", &mysql_stmt, mysqli_stmt_class_entry) == FAILURE) {
- return;
- }
-
- MYSQLI_FETCH_RESOURCE(stmt, MY_STMT *, &mysql_stmt, "mysqli_stmt");
-
- var_cnt = argc - start;
-
- if (var_cnt != mysql_stmt_field_count(stmt->stmt)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Number of bind variables doesn't match number of fields in prepared statmement.");
- efree(args);
- RETURN_FALSE;
- }
-
- /* prevent leak if variables are already bound */
- if (stmt->result.var_cnt) {
- php_free_stmt_bind_buffer(stmt->result, FETCH_RESULT);
- }
-
- bind = (MYSQL_BIND *)ecalloc(var_cnt, sizeof(MYSQL_BIND));
- stmt->result.buf = (VAR_BUFFER *)ecalloc(var_cnt,sizeof(VAR_BUFFER));
- stmt->result.is_null = (char *)ecalloc(var_cnt, sizeof(char));
-
- for (i=start; i < var_cnt + start ; i++) {
- ofs = i - start;
- stmt->result.is_null[ofs] = 0;
- col_type = (stmt->stmt->fields) ? stmt->stmt->fields[ofs].type : MYSQL_TYPE_STRING;
-
- switch (col_type) {
- case MYSQL_TYPE_DOUBLE:
- case MYSQL_TYPE_FLOAT:
- convert_to_double_ex(args[i]);
- stmt->result.buf[ofs].type = IS_DOUBLE;
- stmt->result.buf[ofs].buflen = sizeof(double);
-
- /* allocate buffer for double */
- stmt->result.buf[ofs].val = (char *)emalloc(sizeof(double));
- bind[ofs].buffer_type = MYSQL_TYPE_DOUBLE;
- bind[ofs].buffer = stmt->result.buf[ofs].val;
- bind[ofs].is_null = &stmt->result.is_null[ofs];
- break;
-
- case MYSQL_TYPE_SHORT:
- case MYSQL_TYPE_TINY:
- case MYSQL_TYPE_LONG:
- case MYSQL_TYPE_INT24:
- case MYSQL_TYPE_YEAR:
- convert_to_long_ex(args[i]);
- stmt->result.buf[ofs].type = IS_LONG;
- stmt->result.buf[ofs].buflen = 0;
- stmt->result.buf[ofs].val = (char *)emalloc(sizeof(long));
- bind[ofs].buffer_type = MYSQL_TYPE_LONG;
- bind[ofs].buffer = stmt->result.buf[ofs].val;
- bind[ofs].is_null = &stmt->result.is_null[ofs];
- break;
-
- case MYSQL_TYPE_LONGLONG:
- stmt->result.buf[ofs].type = IS_STRING;
- stmt->result.buf[ofs].buflen = sizeof(my_ulonglong);
- stmt->result.buf[ofs].val = (char *)emalloc(stmt->result.buf[ofs].buflen);
- bind[ofs].buffer_type = MYSQL_TYPE_LONGLONG;
- bind[ofs].buffer = stmt->result.buf[ofs].val;
- bind[ofs].is_null = &stmt->result.is_null[ofs];
- bind[ofs].buffer_length = stmt->result.buf[ofs].buflen;
- break;
-
- case MYSQL_TYPE_DATE:
- case MYSQL_TYPE_TIME:
- case MYSQL_TYPE_DATETIME:
- case MYSQL_TYPE_NEWDATE:
- case MYSQL_TYPE_VAR_STRING:
- case MYSQL_TYPE_STRING:
- case MYSQL_TYPE_BLOB:
- case MYSQL_TYPE_TIMESTAMP:
- case MYSQL_TYPE_DECIMAL:
- stmt->result.buf[ofs].type = IS_STRING;
- stmt->result.buf[ofs].buflen =
- (stmt->stmt->fields) ? (stmt->stmt->fields[ofs].length) ? stmt->stmt->fields[ofs].length + 1: 256: 256;
- stmt->result.buf[ofs].val = (char *)emalloc(stmt->result.buf[ofs].buflen);
- bind[ofs].buffer_type = MYSQL_TYPE_STRING;
- bind[ofs].buffer = stmt->result.buf[ofs].val;
- bind[ofs].is_null = &stmt->result.is_null[ofs];
- bind[ofs].buffer_length = stmt->result.buf[ofs].buflen;
- bind[ofs].length = &stmt->result.buf[ofs].buflen;
- break;
- }
- }
-
- rc = mysql_stmt_bind_result(stmt->stmt, bind);
- MYSQLI_REPORT_STMT_ERROR(stmt->stmt);
-
- if (rc) {
- efree(bind);
- efree(args);
- php_clear_stmt_bind(stmt);
- RETURN_FALSE;
- }
-
- stmt->result.var_cnt = var_cnt;
- stmt->result.vars = (zval **)safe_emalloc((var_cnt), sizeof(zval), 0);
- for (i = start; i < var_cnt+start; i++) {
- ofs = i-start;
- ZVAL_ADDREF(*args[i]);
- stmt->result.vars[ofs] = *args[i];
- }
-
- efree(args);
- efree(bind);
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto bool mysqli_change_user(object link, string user, string password, string database)
- Change logged-in user of the active connection */
-PHP_FUNCTION(mysqli_change_user)
-{
- MY_MYSQL *mysql;
- zval *mysql_link = NULL;
- char *user, *password, *dbname;
- int user_len, password_len, dbname_len;
- ulong rc;
-
- if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Osss", &mysql_link, mysqli_link_class_entry, &user, &user_len, &password, &password_len, &dbname, &dbname_len) == FAILURE) {
- return;
- }
- MYSQLI_FETCH_RESOURCE(mysql, MY_MYSQL *, &mysql_link, "mysqli_link");
-
- rc = mysql_change_user(mysql->mysql, user, password, dbname);
- MYSQLI_REPORT_MYSQL_ERROR(mysql->mysql);
-
- if (rc) {
- RETURN_FALSE;
- }
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto string mysqli_character_set_name(object link)
- Returns the name of the character set used for this connection */
-PHP_FUNCTION(mysqli_character_set_name)
-{
- MY_MYSQL *mysql;
- zval *mysql_link;
- char *charsetname;
-
- if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &mysql_link, mysqli_link_class_entry) == FAILURE) {
- return;
- }
-
- MYSQLI_FETCH_RESOURCE(mysql, MY_MYSQL *, &mysql_link, "mysqli_link");
-
- charsetname = (char *)mysql_character_set_name(mysql->mysql);
-
- RETURN_STRING(charsetname, 1);
-}
-/* }}} */
-
-/* {{{ proto bool mysqli_close(object link)
- Close connection */
-PHP_FUNCTION(mysqli_close)
-{
- zval *mysql_link;
- MY_MYSQL *mysql;
-
- if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &mysql_link, mysqli_link_class_entry) == FAILURE) {
- return;
- }
-
- MYSQLI_FETCH_RESOURCE(mysql, MY_MYSQL *, &mysql_link, "mysqli_link");
-
- mysql_close(mysql->mysql);
- php_clear_mysql(mysql);
- MYSQLI_CLEAR_RESOURCE(&mysql_link);
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto bool mysqli_commit(object link)
- Commit outstanding actions and close transaction */
-PHP_FUNCTION(mysqli_commit)
-{
- MY_MYSQL *mysql;
- zval *mysql_link;
- ulong rc;
-
- if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &mysql_link, mysqli_link_class_entry) == FAILURE) {
- return;
- }
- MYSQLI_FETCH_RESOURCE(mysql, MY_MYSQL *, &mysql_link, "mysqli_link");
- rc = mysql_commit(mysql->mysql);
- RETURN_BOOL(rc);
-}
-/* }}} */
-
-/* {{{ proto bool mysqli_data_seek(object result, int offset)
- Move internal result pointer */
-PHP_FUNCTION(mysqli_data_seek)
-{
- MYSQL_RES *result;
- zval *mysql_result;
- long offset;
-
- if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Ol", &mysql_result, mysqli_result_class_entry, &offset) == FAILURE) {
- return;
- }
-
- MYSQLI_FETCH_RESOURCE(result, MYSQL_RES *, &mysql_result, "mysqli_result");
-
- if (result->handle && result->handle->status == MYSQL_STATUS_USE_RESULT) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Function cannot be used with MYSQL_USE_RESULT");
- RETURN_FALSE;
- }
-
- if (offset < 0 || offset >= result->row_count) {
- RETURN_FALSE;
- }
-
- mysql_data_seek(result, offset);
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto void mysqli_debug(string debug)
-*/
-PHP_FUNCTION(mysqli_debug)
-{
- char *debug;
- int debug_len;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &debug, &debug_len) == FAILURE) {
- return;
- }
-
- mysql_debug(debug);
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto bool mysqli_dump_debug_info(object link)
-*/
-PHP_FUNCTION(mysqli_dump_debug_info)
-{
- MY_MYSQL *mysql;
- zval *mysql_link;
- ulong rc;
-
- if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &mysql_link, mysqli_link_class_entry) == FAILURE) {
- return;
- }
- MYSQLI_FETCH_RESOURCE(mysql, MY_MYSQL *, &mysql_link, "mysqli_link");
-
- rc = mysql_dump_debug_info(mysql->mysql);
-
- if (rc) {
- RETURN_FALSE;
- }
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto int mysqli_errno(object link)
- Returns the numerical value of the error message from previous MySQL operation */
-PHP_FUNCTION(mysqli_errno)
-{
- MY_MYSQL *mysql;
- zval *mysql_link;
-
- if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &mysql_link, mysqli_link_class_entry) == FAILURE) {
- return;
- }
- MYSQLI_FETCH_RESOURCE(mysql, MY_MYSQL *, &mysql_link, "mysqli_link");
- RETURN_LONG(mysql_errno(mysql->mysql));
-}
-/* }}} */
-
-/* {{{ proto string mysqli_error(object link)
- Returns the text of the error message from previous MySQL operation */
-PHP_FUNCTION(mysqli_error)
-{
- MY_MYSQL *mysql;
- zval *mysql_link;
-
- if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &mysql_link, mysqli_link_class_entry) == FAILURE) {
- return;
- }
- MYSQLI_FETCH_RESOURCE(mysql, MY_MYSQL *, &mysql_link, "mysqli_link");
- RETURN_STRING((char *)mysql_error(mysql->mysql),1);
-}
-/* }}} */
-
-/* {{{ proto bool mysqli_stmt_execute(object stmt)
- Execute a prepared statement */
-PHP_FUNCTION(mysqli_stmt_execute)
-{
- MY_STMT *stmt;
- zval *mysql_stmt;
- unsigned int i;
-
- if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &mysql_stmt, mysqli_stmt_class_entry) == FAILURE) {
- return;
- }
- MYSQLI_FETCH_RESOURCE(stmt, MY_STMT *, &mysql_stmt, "mysqli_stmt");
-
- for (i = 0; i < stmt->param.var_cnt; i++) {
- if (stmt->param.vars[i]) {
- stmt->param.is_null[i] = (stmt->param.vars[i]->type == IS_NULL);
-
- switch (stmt->stmt->params[i].buffer_type) {
- case MYSQL_TYPE_VAR_STRING:
- convert_to_string_ex(&stmt->param.vars[i]);
- stmt->stmt->params[i].buffer = Z_STRVAL_PP(&stmt->param.vars[i]);
- stmt->stmt->params[i].buffer_length = strlen(Z_STRVAL_PP(&stmt->param.vars[i]));
- break;
- case MYSQL_TYPE_DOUBLE:
- convert_to_double_ex(&stmt->param.vars[i]);
- stmt->stmt->params[i].buffer = (gptr)&Z_LVAL_PP(&stmt->param.vars[i]);
- break;
- case MYSQL_TYPE_LONG:
- convert_to_long_ex(&stmt->param.vars[i]);
- stmt->stmt->params[i].buffer = (gptr)&Z_LVAL_PP(&stmt->param.vars[i]);
- break;
- default:
- break;
- }
- }
- }
- if (mysql_stmt_execute(stmt->stmt)) {
- MYSQLI_REPORT_STMT_ERROR(stmt->stmt);
- RETURN_FALSE;
- }
- if (MyG(report_mode) & MYSQLI_REPORT_INDEX) {
- php_mysqli_report_index(stmt->query, stmt->stmt->mysql->server_status TSRMLS_CC);
- }
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto mixed mysqli_stmt_fetch(object stmt)
- Fetch results from a prepared statement into the bound variables */
-PHP_FUNCTION(mysqli_stmt_fetch)
-{
- MY_STMT *stmt;
- zval *mysql_stmt;
- unsigned int i;
- ulong ret;
- long lval;
- double dval;
- my_ulonglong llval;
-
-
- if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &mysql_stmt, mysqli_stmt_class_entry) == FAILURE) {
- return;
- }
- MYSQLI_FETCH_RESOURCE(stmt, MY_STMT *, &mysql_stmt, "mysqli_stmt");
-
- /* reset buffers */
-
-
- for (i = 0; i < stmt->result.var_cnt; i++) {
- if (stmt->result.buf[i].type == IS_STRING) {
- memset(stmt->result.buf[i].val, 0, stmt->result.buf[i].buflen);
- }
- }
- if (!(ret = mysql_stmt_fetch(stmt->stmt))) {
- for (i = 0; i < stmt->result.var_cnt; i++) {
- if (stmt->result.vars[i]->type == IS_STRING && stmt->result.vars[i]->value.str.len) {
- efree(stmt->result.vars[i]->value.str.val);
- }
- if (!stmt->result.is_null[i]) {
- switch (stmt->result.buf[i].type) {
- case IS_LONG:
- memcpy(&lval, stmt->result.buf[i].val, sizeof(long));
- ZVAL_LONG(stmt->result.vars[i], lval);
- break;
- case IS_DOUBLE:
- memcpy(&dval, stmt->result.buf[i].val, sizeof(double));
- ZVAL_DOUBLE(stmt->result.vars[i], dval);
- break;
- case IS_STRING:
- if (stmt->stmt->bind[i].buffer_type == MYSQL_TYPE_LONGLONG) {
- char tmp[50];
- memcpy (&llval, stmt->result.buf[i].val, sizeof(my_ulonglong));
- if (llval != (long)llval) {
- /* even though lval is declared as unsigned, the value
- * may be negative. Therefor we cannot use %llu and must
- * use %lld.
- */
- sprintf((char *)&tmp, "%lld", llval);
- ZVAL_STRING(stmt->result.vars[i], tmp, 1);
- } else {
- ZVAL_LONG(stmt->result.vars[i], llval);
- }
- } else {
- ZVAL_STRINGL(stmt->result.vars[i], stmt->result.buf[i].val, stmt->result.buf[i].buflen, 1);
- }
- break;
- default:
- break;
- }
- } else {
- stmt->result.vars[i]->type = IS_NULL;
- }
- }
- } else {
- MYSQLI_REPORT_STMT_ERROR(stmt->stmt);
- }
-
- switch (ret) {
- case 0:
- RETURN_TRUE;
- break;
- case 1:
- RETURN_FALSE;
- break;
- default:
- RETURN_NULL();
- break;
- }
-}
-/* }}} */
-
-/* {{{ proto mixed mysqli_fetch_field (object result)
- Get column information from a result and return as an object */
-PHP_FUNCTION(mysqli_fetch_field)
-{
- MYSQL_RES *result;
- zval *mysql_result;
- MYSQL_FIELD *field;
-
- if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &mysql_result, mysqli_result_class_entry) == FAILURE) {
- return;
- }
-
- MYSQLI_FETCH_RESOURCE(result, MYSQL_RES *, &mysql_result, "mysqli_result");
-
- if (!(field = mysql_fetch_field(result))) {
- RETURN_FALSE;
- }
-
- object_init(return_value);
-
- add_property_string(return_value, "name",(field->name ? field->name : ""), 1);
- add_property_string(return_value, "orgname",(field->org_name ? field->org_name : ""), 1);
- add_property_string(return_value, "table",(field->table ? field->table : ""), 1);
- add_property_string(return_value, "orgtable",(field->org_table ? field->org_table : ""), 1);
- add_property_string(return_value, "def",(field->def ? field->def : ""), 1);
- add_property_long(return_value, "max_length", field->max_length);
- add_property_long(return_value, "flags", field->flags);
- add_property_long(return_value, "type", field->type);
- add_property_long(return_value, "decimals", field->decimals);
-}
-/* }}} */
-
-/* {{{ proto mixed mysqli_fetch_fields (object result)
- Return array of objects containing field meta-data */
-PHP_FUNCTION(mysqli_fetch_fields)
-{
- MYSQL_RES *result;
- zval *mysql_result;
- MYSQL_FIELD *field;
- zval *obj;
-
- unsigned int i;
-
- if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &mysql_result, mysqli_result_class_entry) == FAILURE) {
- return;
- }
-
- MYSQLI_FETCH_RESOURCE(result, MYSQL_RES *, &mysql_result, "mysqli_result");
-
- if (!(field = mysql_fetch_field(result))) {
- RETURN_FALSE;
- }
-
- array_init(return_value);
-
- for (i = 0; i < mysql_num_fields(result); i++) {
- field = mysql_fetch_field_direct(result, i);
-
-
- MAKE_STD_ZVAL(obj);
- object_init(obj);
-
- add_property_string(obj, "name",(field->name ? field->name : ""), 1);
- add_property_string(obj, "orgname",(field->org_name ? field->org_name : ""), 1);
- add_property_string(obj, "table",(field->table ? field->table : ""), 1);
- add_property_string(obj, "orgtable",(field->org_table ? field->org_table : ""), 1);
- add_property_string(obj, "def",(field->def ? field->def : ""), 1);
- add_property_long(obj, "max_length", field->max_length);
- add_property_long(obj, "flags", field->flags);
- add_property_long(obj, "type", field->type);
- add_property_long(obj, "decimals", field->decimals);
-
- add_index_zval(return_value, i, obj);
- }
-}
-/* }}} */
-
-/* {{{ proto mixed mysqli_fetch_field_direct (object result, int offset)
- Fetch meta-data for a single field */
-PHP_FUNCTION(mysqli_fetch_field_direct)
-{
- MYSQL_RES *result;
- zval *mysql_result;
- MYSQL_FIELD *field;
- int offset;
-
- if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Ol", &mysql_result, mysqli_result_class_entry, &offset) == FAILURE) {
- return;
- }
-
- MYSQLI_FETCH_RESOURCE(result, MYSQL_RES *, &mysql_result, "mysqli_result");
-
- if (!(field = mysql_fetch_field_direct(result,offset))) {
- RETURN_FALSE;
- }
-
- object_init(return_value);
-
- add_property_string(return_value, "name",(field->name ? field->name : ""), 1);
- add_property_string(return_value, "orgname",(field->org_name ? field->org_name : ""), 1);
- add_property_string(return_value, "table",(field->table ? field->table : ""), 1);
- add_property_string(return_value, "orgtable",(field->org_table ? field->org_table : ""), 1);
- add_property_string(return_value, "def",(field->def ? field->def : ""), 1);
- add_property_long(return_value, "max_length", field->max_length);
- add_property_long(return_value, "flags", field->flags);
- add_property_long(return_value, "type", field->type);
- add_property_long(return_value, "decimals", field->decimals);
-}
-/* }}} */
-
-/* {{{ proto mixed mysqli_fetch_lengths (object result)
- Get the length of each output in a result */
-PHP_FUNCTION(mysqli_fetch_lengths)
-{
- MYSQL_RES *result;
- zval *mysql_result;
- unsigned int i;
- unsigned long *ret;
-
- if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &mysql_result, mysqli_result_class_entry) == FAILURE) {
- return;
- }
-
- MYSQLI_FETCH_RESOURCE(result, MYSQL_RES *, &mysql_result, "mysqli_result");
-
- if (!(ret = mysql_fetch_lengths(result))) {
- RETURN_FALSE;
- }
-
- array_init(return_value);
-
- for (i = 0; i < mysql_num_fields(result); i++) {
- add_index_long(return_value, i, ret[i]);
- }
-}
-/* }}} */
-
-/* {{{ proto array mysqli_fetch_row (object result)
- Get a result row as an enumerated array */
-PHP_FUNCTION(mysqli_fetch_row)
-{
- php_mysqli_fetch_into_hash(INTERNAL_FUNCTION_PARAM_PASSTHRU, MYSQLI_NUM, 0);
-}
-/* }}} */
-
-/* {{{ proto int mysqli_field_count(object link)
- Fetch the number of fields returned by the last query for the given link
-*/
-PHP_FUNCTION(mysqli_field_count)
-{
- MY_MYSQL *mysql;
- zval *mysql_link;
-
- if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &mysql_link, mysqli_link_class_entry) == FAILURE) {
- return;
- }
- MYSQLI_FETCH_RESOURCE(mysql, MY_MYSQL *, &mysql_link, "mysqli_link");
-
- RETURN_LONG(mysql_field_count(mysql->mysql));
-}
-/* }}} */
-
-/* {{{ proto int mysqli_field_seek(object result, int fieldnr)
- Set result pointer to a specified field offset
-*/
-PHP_FUNCTION(mysqli_field_seek)
-{
- MYSQL_RES *result;
- zval *mysql_result;
- unsigned int fieldnr;
-
- if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Ol", &mysql_result, mysqli_result_class_entry, &fieldnr) == FAILURE) {
- return;
- }
- MYSQLI_FETCH_RESOURCE(result, MYSQL_RES *, &mysql_result, "mysqli_result");
-
- if (fieldnr < 0 || fieldnr >= mysql_num_fields(result)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Field offset is invalid for resultset");
- RETURN_FALSE;
- }
-
- mysql_field_seek(result, fieldnr);
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto int mysqli_field_tell(object result)
- Get current field offset of result pointer */
-PHP_FUNCTION(mysqli_field_tell)
-{
- MYSQL_RES *result;
- zval *mysql_result;
-
- if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &mysql_result, mysqli_result_class_entry) == FAILURE) {
- return;
- }
- MYSQLI_FETCH_RESOURCE(result, MYSQL_RES *, &mysql_result, "mysqli_result");
-
- RETURN_LONG(mysql_field_tell(result));
-}
-/* }}} */
-
-/* {{{ proto void mysqli_free_result(object result)
- Free query result memory for the given result handle */
-PHP_FUNCTION(mysqli_free_result)
-{
- MYSQL_RES *result;
- zval *mysql_result;
-
- if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &mysql_result, mysqli_result_class_entry) == FAILURE) {
- return;
- }
- MYSQLI_FETCH_RESOURCE(result, MYSQL_RES *, &mysql_result, "mysqli_result");
-
- mysql_free_result(result);
- MYSQLI_CLEAR_RESOURCE(&mysql_result);
-
- return;
-}
-/* }}} */
-
-/* {{{ proto string mysqli_get_client_info(void)
- Get MySQL client info */
-PHP_FUNCTION(mysqli_get_client_info)
-{
- RETURN_STRING((char *)mysql_get_client_info(), 1);
-}
-/* }}} */
-
-/* {{{ proto int mysqli_get_client_version(void)
- Get MySQL client info */
-PHP_FUNCTION(mysqli_get_client_version)
-{
- RETURN_LONG((long)mysql_get_client_version());
-}
-/* }}} */
-
-/* {{{ proto string mysqli_get_host_info (object link)
- Get MySQL host info */
-PHP_FUNCTION(mysqli_get_host_info)
-{
- MY_MYSQL *mysql;
- zval *mysql_link = NULL;
-
- if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &mysql_link, mysqli_link_class_entry) == FAILURE) {
- return;
- }
- MYSQLI_FETCH_RESOURCE(mysql, MY_MYSQL *, &mysql_link, "mysqli_link");
-
- RETURN_STRING((mysql->mysql->host_info) ? mysql->mysql->host_info : "", 1);
-}
-/* }}} */
-
-/* {{{ proto int mysqli_get_proto_info(object link)
- Get MySQL protocol information */
-PHP_FUNCTION(mysqli_get_proto_info)
-{
- MY_MYSQL *mysql;
- zval *mysql_link = NULL;
-
- if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &mysql_link, mysqli_link_class_entry) == FAILURE) {
- return;
- }
- MYSQLI_FETCH_RESOURCE(mysql, MY_MYSQL *, &mysql_link, "mysqli_link");
-
- RETURN_LONG(mysql_get_proto_info(mysql->mysql));
-}
-/* }}} */
-
-/* {{{ proto string mysqli_get_server_info(object link)
- Get MySQL server info */
-PHP_FUNCTION(mysqli_get_server_info)
-{
- MY_MYSQL *mysql;
- zval *mysql_link = NULL;
-
- if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &mysql_link, mysqli_link_class_entry) == FAILURE) {
- return;
- }
- MYSQLI_FETCH_RESOURCE(mysql, MY_MYSQL *, &mysql_link, "mysqli_link");
-
- RETURN_STRING((char *)mysql_get_server_info(mysql->mysql), 1);
-}
-
-/* }}} */
-
-/* {{{ proto int mysqli_get_server_version(object link)
- Return the MySQL version for the server referenced by the given link */
-PHP_FUNCTION(mysqli_get_server_version)
-{
- MY_MYSQL *mysql;
- zval *mysql_link = NULL;
-
- if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &mysql_link, mysqli_link_class_entry) == FAILURE) {
- return;
- }
- MYSQLI_FETCH_RESOURCE(mysql, MY_MYSQL *, &mysql_link, "mysqli_link");
-
- RETURN_LONG(mysql_get_server_version(mysql->mysql));
-}
-/* }}} */
-
-/* {{{ proto string mysqli_info(object link)
- Get information about the most recent query */
-PHP_FUNCTION(mysqli_info)
-{
- MY_MYSQL *mysql;
- zval *mysql_link = NULL;
-
- if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &mysql_link, mysqli_link_class_entry) == FAILURE) {
- return;
- }
- MYSQLI_FETCH_RESOURCE(mysql, MY_MYSQL *, &mysql_link, "mysqli_link");
-
- RETURN_STRING((mysql->mysql->info) ? mysql->mysql->info : "", 1);
-}
-/* }}} */
-
-/* {{{ proto resource mysqli_init(void)
- Initialize mysqli and return a resource for use with mysql_real_connect */
-PHP_FUNCTION(mysqli_init)
-{
- MY_MYSQL *mysql = (MY_MYSQL *)calloc(1, sizeof(MY_MYSQL));
-
- MYSQLI_RESOURCE *mysqli_resource = (MYSQLI_RESOURCE *)ecalloc (1, sizeof(MYSQLI_RESOURCE));
-
- if (!(mysql->mysql = mysql_init(NULL))) {
- efree(mysql);
- RETURN_FALSE;
- }
- mysqli_resource->ptr = (void *)mysql;
- MYSQLI_RETURN_RESOURCE(mysqli_resource, mysqli_link_class_entry);
-}
-/* }}} */
-
-/* {{{ proto mixed mysqli_insert_id(object link)
- Get the ID generated from the previous INSERT operation */
-PHP_FUNCTION(mysqli_insert_id)
-{
- MY_MYSQL *mysql;
- my_ulonglong rc;
- zval *mysql_link;
-
- if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &mysql_link, mysqli_link_class_entry) == FAILURE) {
- return;
- }
- MYSQLI_FETCH_RESOURCE(mysql, MY_MYSQL *, &mysql_link, "mysqli_link");
- rc = mysql_insert_id(mysql->mysql);
- MYSQLI_RETURN_LONG_LONG(rc)
-}
-/* }}} */
-
-/* {{{ proto bool mysqli_kill(object link, int processid)
- Kill a mysql process on the server */
-PHP_FUNCTION(mysqli_kill)
-{
- MY_MYSQL *mysql;
- zval *mysql_link;
- int processid;
-
- if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Ol", &mysql_link, mysqli_link_class_entry, &processid) == FAILURE) {
- return;
- }
- MYSQLI_FETCH_RESOURCE(mysql, MY_MYSQL *, &mysql_link, "mysqli_link");
-
- if (mysql_kill(mysql->mysql, processid)) {
- MYSQLI_REPORT_MYSQL_ERROR(mysql->mysql);
- RETURN_FALSE;
- }
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto mysqli_set_local_infile_default(object link)
- unsets user defined handler for load local infile command */
-PHP_FUNCTION(mysqli_set_local_infile_default)
-{
- MY_MYSQL *mysql;
- zval *mysql_link;
-
- if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &mysql_link, mysqli_link_class_entry) == FAILURE) {
- return;
- }
-
- MYSQLI_FETCH_RESOURCE(mysql, MY_MYSQL *, &mysql_link, "mysqli_link");
-
- if (mysql->li_read) {
- efree(Z_STRVAL_P(mysql->li_read));
- zval_dtor(mysql->li_read);
- mysql->li_read = NULL;
- }
-}
-/* }}} */
-
-/* {{{ proto bool mysqli_set_local_infile_handler(object link, callback read_func)
- Set callback functions for LOAD DATA LOCAL INFILE */
-PHP_FUNCTION(mysqli_set_local_infile_handler)
-{
- MY_MYSQL *mysql;
- zval *mysql_link;
- char *callback_name;
- zval *callback_func;
-
- if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Oz", &mysql_link, mysqli_link_class_entry,
- &callback_func) == FAILURE) {
- return;
- }
-
- MYSQLI_FETCH_RESOURCE(mysql, MY_MYSQL *, &mysql_link, "mysqli_link");
-
- /* check callback function */
- if (!zend_is_callable(callback_func, 0, &callback_name)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Not a valid callback function %s", callback_name);
- efree(callback_name);
- RETURN_FALSE;
- }
- efree(callback_name);
-
- /* save callback function */
- ALLOC_ZVAL(mysql->li_read);
- ZVAL_STRING(mysql->li_read, callback_func->value.str.val, 1);
-}
-/* }}} */
-
-/* {{{ proto bool mysqli_more_results(object link)
- check if there any more query results from a multi query */
-PHP_FUNCTION(mysqli_more_results) {
- MY_MYSQL *mysql;
- zval *mysql_link;
-
- if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &mysql_link, mysqli_link_class_entry) == FAILURE) {
- return;
- }
- MYSQLI_FETCH_RESOURCE(mysql, MY_MYSQL *, &mysql_link, "mysqli_link");
-
- if (!mysql_more_results(mysql->mysql)) {
- RETURN_FALSE;
- }
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto bool mysqli_next_result(object link)
- read next result from multi_query */
-PHP_FUNCTION(mysqli_next_result) {
- MY_MYSQL *mysql;
- zval *mysql_link;
-
- if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &mysql_link, mysqli_link_class_entry) == FAILURE) {
- return;
- }
- MYSQLI_FETCH_RESOURCE(mysql, MY_MYSQL *, &mysql_link, "mysqli_link");
-
- if (mysql_next_result(mysql->mysql)) {
- RETURN_FALSE;
- }
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto int mysqli_num_fields(object result)
- Get number of fields in result */
-PHP_FUNCTION(mysqli_num_fields)
-{
- MYSQL_RES *result;
- zval *mysql_result;
-
- if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &mysql_result, mysqli_result_class_entry) == FAILURE) {
- return;
- }
- MYSQLI_FETCH_RESOURCE(result, MYSQL_RES *, &mysql_result, "mysqli_result");
-
- RETURN_LONG(mysql_num_fields(result));
-}
-/* }}} */
-
-/* {{{ proto mixed mysqli_num_rows(object result)
- Get number of rows in result */
-PHP_FUNCTION(mysqli_num_rows)
-{
- MYSQL_RES *result;
- zval *mysql_result;
-
- if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &mysql_result, mysqli_result_class_entry) == FAILURE) {
- return;
- }
- MYSQLI_FETCH_RESOURCE(result, MYSQL_RES *, &mysql_result, "mysqli_result");
-
- if (result->handle && result->handle->status == MYSQL_STATUS_USE_RESULT) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Function cannot be used with MYSQL_USE_RESULT");
- RETURN_LONG(0);
- }
-
- MYSQLI_RETURN_LONG_LONG(mysql_num_rows(result));
-}
-/* }}} */
-
-/* {{{ proto bool mysqli_options(object link, int flags, mixed values)
- Set options */
-PHP_FUNCTION(mysqli_options)
-{
- MY_MYSQL *mysql;
- zval *mysql_link = NULL;
- zval *mysql_value;
- long mysql_option;
- unsigned int l_value;
- long ret;
-
- if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Olz", &mysql_link, mysqli_link_class_entry, &mysql_option, &mysql_value) == FAILURE) {
- return;
- }
- MYSQLI_FETCH_RESOURCE(mysql, MY_MYSQL *, &mysql_link, "mysqli_link");
-
- switch (Z_TYPE_PP(&mysql_value)) {
- case IS_STRING:
- ret = mysql_options(mysql->mysql, mysql_option, Z_STRVAL_PP(&mysql_value));
- break;
- default:
- convert_to_long_ex(&mysql_value);
- l_value = Z_LVAL_PP(&mysql_value);
- ret = mysql_options(mysql->mysql, mysql_option, (char *)&l_value);
- break;
- }
-
- if (ret != 0) {
- RETURN_FALSE;
- } else {
- RETURN_TRUE;
- }
-}
-/* }}} */
-
-
-/* {{{ proto bool mysqli_ping(object link)
- Ping a server connection or reconnect if there is no connection */
-PHP_FUNCTION(mysqli_ping)
-{
- MY_MYSQL *mysql;
- zval *mysql_link;
- long rc;
-
- if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &mysql_link, mysqli_link_class_entry) == FAILURE) {
- return;
- }
- MYSQLI_FETCH_RESOURCE(mysql, MY_MYSQL *, &mysql_link, "mysqli_link");
- rc = mysql_ping(mysql->mysql);
- MYSQLI_REPORT_MYSQL_ERROR(mysql->mysql);
- if (rc) {
- RETURN_FALSE;
- }
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto mixed mysqli_prepare(object link, string query)
- Prepare a SQL statement for execution */
-PHP_FUNCTION(mysqli_prepare)
-{
- MY_MYSQL *mysql;
- MY_STMT *stmt;
- char *query = NULL;
- unsigned int query_len;
- zval *mysql_link;
- MYSQLI_RESOURCE *mysqli_resource;
-
- if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Os",&mysql_link, mysqli_link_class_entry, &query, &query_len) == FAILURE) {
- return;
- }
- MYSQLI_FETCH_RESOURCE(mysql, MY_MYSQL *, &mysql_link, "mysqli_link");
-
- stmt = (MY_STMT *)ecalloc(1,sizeof(MY_STMT));
-
- if ((stmt->stmt = mysql_stmt_init(mysql->mysql))) {
- if (mysql_stmt_prepare(stmt->stmt, query, query_len)) {
- if (stmt->stmt->last_errno) {
- /* if we close the statement handle, we have to copy the errors to connection handle */
- mysql->mysql->net.last_errno = stmt->stmt->last_errno;
- strcpy(mysql->mysql->net.last_error, stmt->stmt->last_error);
- strcpy(mysql->mysql->net.sqlstate, stmt->stmt->sqlstate);
- }
- mysql_stmt_close(stmt->stmt);
- stmt->stmt = NULL;
- }
- }
-
- if (!stmt->stmt) {
- MYSQLI_REPORT_MYSQL_ERROR(mysql->mysql);
- efree(stmt);
- RETURN_FALSE;
- }
-
- mysqli_resource = (MYSQLI_RESOURCE *)ecalloc (1, sizeof(MYSQLI_RESOURCE));
- mysqli_resource->ptr = (void *)stmt;
- stmt->query = (query_len) ? (char *)emalloc(query_len + 1) : NULL;
- strcpy(stmt->query, query);
- MYSQLI_RETURN_RESOURCE(mysqli_resource, mysqli_stmt_class_entry);
-}
-/* }}} */
-
-/* {{{ proto bool mysqli_real_connect(object link [,string hostname [,string username [,string passwd [,string dbname [,int port [,string socket [,int flags]]]]]]])
- Open a connection to a mysql server */
-PHP_FUNCTION(mysqli_real_connect)
-{
- MY_MYSQL *mysql;
- char *hostname = NULL, *username=NULL, *passwd=NULL, *dbname=NULL, *socket=NULL;
- unsigned int hostname_len, username_len, passwd_len, dbname_len, socket_len;
- unsigned int port=0, flags=0;
- zval *mysql_link;
- zval *object = getThis();
-
- if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O|sssslsl", &mysql_link, mysqli_link_class_entry,
- &hostname, &hostname_len, &username, &username_len, &passwd, &passwd_len, &dbname, &dbname_len, &port, &socket, &socket_len,
- &flags) == FAILURE) {
- return;
- }
-
- if (!socket_len) {
- socket = NULL;
- }
-
- /* TODO: safe mode handling */
- if (PG(sql_safe_mode)) {
- } else {
- if (!passwd) {
- passwd = MyG(default_pw);
- if (!username){
- username = MyG(default_user);
- if (!hostname) {
- hostname = MyG(default_host);
- }
- }
- }
- }
-
- MYSQLI_FETCH_RESOURCE(mysql, MY_MYSQL *, &mysql_link, "mysqli_link");
-
- /* remove some insecure options */
- flags ^= CLIENT_MULTI_STATEMENTS; /* don't allow multi_queries via connect parameter */
- if (PG(open_basedir) && strlen(PG(open_basedir))) {
- flags ^= CLIENT_LOCAL_FILES;
- }
-
- if (mysql_real_connect(mysql->mysql,hostname,username,passwd,dbname,port,socket,flags) == NULL) {
-
- MYSQLI_REPORT_MYSQL_ERROR(mysql->mysql);
- php_mysqli_set_error(mysql_errno(mysql->mysql), (char *) mysql_error(mysql->mysql) TSRMLS_CC);
-
- if (!(MyG(report_mode) & MYSQLI_REPORT_ERROR)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", mysql_error(mysql->mysql));
- }
- RETURN_FALSE;
- }
- php_mysqli_set_error(mysql_errno(mysql->mysql), (char *)mysql_error(mysql->mysql) TSRMLS_CC);
-
- mysql->mysql->reconnect = MyG(reconnect);
-
- /* set our own local_infile handler */
- php_set_local_infile_handler_default(mysql);
-
- if (object) {
- ((mysqli_object *) zend_object_store_get_object(object TSRMLS_CC))->valid = 1;
- }
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto bool mysqli_real_query(object link, string query)
- Binary-safe version of mysql_query() */
-PHP_FUNCTION(mysqli_real_query)
-{
- MY_MYSQL *mysql;
- zval *mysql_link;
- char *query = NULL;
- unsigned int query_len;
-
- if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Os", &mysql_link, mysqli_link_class_entry, &query, &query_len) == FAILURE) {
- return;
- }
- MYSQLI_FETCH_RESOURCE(mysql, MY_MYSQL *, &mysql_link, "mysqli_link");
-
- MYSQLI_DISABLE_MQ; /* disable multi statements/queries */
-
- if (mysql_real_query(mysql->mysql, query, query_len)) {
- MYSQLI_REPORT_MYSQL_ERROR(mysql->mysql);
- RETURN_FALSE;
- }
-
- if (!mysql_field_count(mysql->mysql)) {
- if (MyG(report_mode) & MYSQLI_REPORT_INDEX) {
- php_mysqli_report_index(query, mysql->mysql->server_status TSRMLS_CC);
- }
- }
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto string mysqli_real_escape_string(object link, string escapestr)
- Escapes special characters in a string for use in a SQL statement, taking into account the current charset of the connection */
-PHP_FUNCTION(mysqli_real_escape_string) {
- MY_MYSQL *mysql;
- zval *mysql_link = NULL;
- char *escapestr, *newstr;
- int escapestr_len, newstr_len;
-
- if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Os", &mysql_link, mysqli_link_class_entry, &escapestr, &escapestr_len) == FAILURE) {
- return;
- }
- MYSQLI_FETCH_RESOURCE(mysql, MY_MYSQL *, &mysql_link, "mysqli_link");
-
- newstr = safe_emalloc(2, escapestr_len, 1);
- newstr_len = mysql_real_escape_string(mysql->mysql, newstr, escapestr, escapestr_len);
- newstr = erealloc(newstr, newstr_len + 1);
-
- RETURN_STRING(newstr, 0);
-}
-/* }}} */
-
-/* {{{ proto bool mysqli_rollback(object link)
- Undo actions from current transaction */
-PHP_FUNCTION(mysqli_rollback)
-{
- MY_MYSQL *mysql;
- zval *mysql_link;
-
- if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &mysql_link, mysqli_link_class_entry) == FAILURE) {
- return;
- }
- MYSQLI_FETCH_RESOURCE(mysql, MY_MYSQL *, &mysql_link, "mysqli_link");
-
- RETURN_BOOL(mysql_rollback(mysql->mysql));
-}
-/* }}} */
-
-/* {{{ proto bool mysqli_send_long_data(object stmt, int param_nr, string data)
-*/
-PHP_FUNCTION(mysqli_stmt_send_long_data)
-{
- MY_STMT *stmt;
- zval *mysql_stmt;
- char *data;
- long param_nr, data_len;
-
-
- if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Ols", &mysql_stmt, mysqli_stmt_class_entry, &param_nr, &data, &data_len) == FAILURE) {
- return;
- }
- MYSQLI_FETCH_RESOURCE(stmt, MY_STMT *, &mysql_stmt, "mysqli_stmt");
-
- if (param_nr < 0) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid parameter number");
- RETURN_FALSE;
- }
- if (mysql_stmt_send_long_data(stmt->stmt, param_nr, data, data_len)) {
- RETURN_FALSE;
- }
- RETURN_TRUE;
-}
-/* }}} */
-
-#ifdef HAVE_EMBEDDED_MYSQLI
-/* {{{ proto bool mysqli_server_init(void)
- initialize embedded server */
-PHP_FUNCTION(mysqli_server_init)
-{
- zval *server;
- zval *groups;
-
- if (MyG(embedded)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Embedded server already initialized.");
- RETURN_FALSE;
- }
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|aa", &server, &groups) == FAILURE) {
- return;
- }
-
- if (mysql_server_init(0, NULL, NULL)) {
- RETURN_FALSE;
- }
- MyG(embedded) = 1;
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto void mysqli_server_end(void)
-*/
-PHP_FUNCTION(mysqli_server_end)
-{
- mysql_server_end();
-}
-/* }}} */
-#endif
-
-/* {{{ proto mixed mysqli_stmt_affected_rows(object stmt)
- Return the number of rows affected in the last query for the given link */
-PHP_FUNCTION(mysqli_stmt_affected_rows)
-{
- MY_STMT *stmt;
- zval *mysql_stmt;
- my_ulonglong rc;
-
- if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &mysql_stmt, mysqli_stmt_class_entry) == FAILURE) {
- return;
- }
- MYSQLI_FETCH_RESOURCE(stmt, MY_STMT *, &mysql_stmt, "mysqli_stmt");
-
- rc = mysql_stmt_affected_rows(stmt->stmt);
- MYSQLI_RETURN_LONG_LONG(rc)
-}
-/* }}} */
-
-/* {{{ proto bool mysqli_stmt_close(object stmt)
- Close statement */
-PHP_FUNCTION(mysqli_stmt_close)
-{
- MY_STMT *stmt;
- zval *mysql_stmt;
-
- if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &mysql_stmt, mysqli_stmt_class_entry) == FAILURE) {
- return;
- }
- MYSQLI_FETCH_RESOURCE(stmt, MY_STMT *, &mysql_stmt, "mysqli_stmt");
- mysql_stmt_close(stmt->stmt);
- stmt->stmt = NULL;
- php_clear_stmt_bind(stmt);
- MYSQLI_CLEAR_RESOURCE(&mysql_stmt);
- RETURN_TRUE;
-
-}
-/* }}} */
-
-/* {{{ proto void mysqli_stmt_data_seek(object stmt, int offset)
- Move internal result pointer */
-PHP_FUNCTION(mysqli_stmt_data_seek)
-{
- MY_STMT *stmt;
- zval *mysql_stmt;
- long offset;
-
- if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Ol", &mysql_stmt, mysqli_stmt_class_entry, &offset) == FAILURE) {
- return;
- }
-
- MYSQLI_FETCH_RESOURCE(stmt, MY_STMT *, &mysql_stmt, "mysqli_stmt");
-
- mysql_stmt_data_seek(stmt->stmt, offset);
- return;
-}
-/* }}} */
-
-/* {{{ proto int mysqli_stmt_field_count(object stmt) {
- Return the number of result columns for the given statement */
-PHP_FUNCTION(mysqli_stmt_field_count)
-{
- MY_STMT *stmt;
- zval *mysql_stmt;
-
- if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &mysql_stmt, mysqli_stmt_class_entry) == FAILURE) {
- return;
- }
- MYSQLI_FETCH_RESOURCE(stmt, MY_STMT *, &mysql_stmt, "mysqli_stmt");
-
- RETURN_LONG(mysql_stmt_field_count(stmt->stmt));
-}
-/* }}} */
-
-/* {{{ proto void mysqli_stmt_free_result(object stmt)
- Free stored result memory for the given statement handle */
-PHP_FUNCTION(mysqli_stmt_free_result)
-{
- MY_STMT *stmt;
- zval *mysql_stmt;
-
- if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &mysql_stmt, mysqli_stmt_class_entry) == FAILURE) {
- return;
- }
-
- MYSQLI_FETCH_RESOURCE(stmt, MY_STMT *, &mysql_stmt, "mysqli_stmt");
-
- mysql_stmt_free_result(stmt->stmt);
-
- return;
-}
-/* }}} */
-
-/* {{{ proto mixed mysqli_stmt_insert_id(object stmt)
- Get the ID generated from the previous INSERT operation */
-PHP_FUNCTION(mysqli_stmt_insert_id)
-{
- MY_STMT *stmt;
- my_ulonglong rc;
- zval *mysql_stmt;
-
- if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &mysql_stmt, mysqli_stmt_class_entry) == FAILURE) {
- return;
- }
- MYSQLI_FETCH_RESOURCE(stmt, MY_STMT *, &mysql_stmt, "mysqli_stmt");
- rc = mysql_stmt_insert_id(stmt->stmt);
- MYSQLI_RETURN_LONG_LONG(rc)
-}
-/* }}} */
-
-/* {{{ proto int mysqli_stmt_param_count(object stmt) {
- Return the number of parameter for the given statement */
-PHP_FUNCTION(mysqli_stmt_param_count)
-{
- MY_STMT *stmt;
- zval *mysql_stmt;
-
- if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &mysql_stmt, mysqli_stmt_class_entry) == FAILURE) {
- return;
- }
- MYSQLI_FETCH_RESOURCE(stmt, MY_STMT *, &mysql_stmt, "mysqli_stmt");
-
- RETURN_LONG(mysql_stmt_param_count(stmt->stmt));
-}
-/* }}} */
-
-/* {{{ proto bool mysqli_stmt_reset(object stmt)
- reset a prepared statement */
-PHP_FUNCTION(mysqli_stmt_reset)
-{
- MY_STMT *stmt;
- zval *mysql_stmt;
-
- if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &mysql_stmt, mysqli_stmt_class_entry) == FAILURE) {
- return;
- }
-
- MYSQLI_FETCH_RESOURCE(stmt, MY_STMT *, &mysql_stmt, "mysqli_stmt");
-
- if (mysql_stmt_reset(stmt->stmt)) {
- RETURN_FALSE;
- }
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto mixed mysqli_stmt_num_rows(object stmt)
- Return the number of rows in statements result set */
-PHP_FUNCTION(mysqli_stmt_num_rows)
-{
- MY_STMT *stmt;
- zval *mysql_stmt;
- my_ulonglong rc;
-
- if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &mysql_stmt, mysqli_stmt_class_entry) == FAILURE) {
- return;
- }
-
- MYSQLI_FETCH_RESOURCE(stmt, MY_STMT *, &mysql_stmt, "mysqli_stmt");
-
- rc = mysql_stmt_num_rows(stmt->stmt);
- MYSQLI_RETURN_LONG_LONG(rc)
-}
-/* }}} */
-
-/* {{{ proto string mysqli_select_db(object link, string dbname)
- Select a MySQL database */
-PHP_FUNCTION(mysqli_select_db)
-{
- MY_MYSQL *mysql;
- zval *mysql_link;
- char *dbname;
- int dbname_len;
-
-
- if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Os", &mysql_link, mysqli_link_class_entry, &dbname, &dbname_len) == FAILURE) {
- return;
- }
- MYSQLI_FETCH_RESOURCE(mysql, MY_MYSQL *, &mysql_link, "mysqli_link");
-
- if (!mysql_select_db(mysql->mysql, dbname)) {
- RETURN_TRUE;
- }
-
- MYSQLI_REPORT_MYSQL_ERROR(mysql->mysql);
- RETURN_FALSE;
-}
-/* }}} */
-
-/* {{{ proto string mysqli_sqlstate(object link)
- Returns the SQLSTATE error from previous MySQL operation */
-PHP_FUNCTION(mysqli_sqlstate)
-{
- MY_MYSQL *mysql;
- zval *mysql_link;
-
- if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &mysql_link, mysqli_link_class_entry) == FAILURE) {
- return;
- }
- MYSQLI_FETCH_RESOURCE(mysql, MY_MYSQL *, &mysql_link, "mysqli_link");
- RETURN_STRING((char *)mysql_sqlstate(mysql->mysql),1);
-}
-/* }}} */
-
-/* {{{ proto bool mysqli_ssl_set(object link ,string key ,string cert ,string ca ,string capath ,string cipher])
-*/
-PHP_FUNCTION(mysqli_ssl_set)
-{
- MY_MYSQL *mysql;
- zval *mysql_link;
- char *ssl_parm[5];
- int ssl_parm_len[5], i;
-
- if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Osssss", &mysql_link, mysqli_link_class_entry, &ssl_parm[0], &ssl_parm_len[0], &ssl_parm[1], &ssl_parm_len[1], &ssl_parm[2], &ssl_parm_len[2], &ssl_parm[3], &ssl_parm_len[3], &ssl_parm[4], &ssl_parm_len[4]) == FAILURE) {
- return;
- }
- MYSQLI_FETCH_RESOURCE(mysql, MY_MYSQL *, &mysql_link, "mysqli_link");
-
- for (i=0; i < 5; i++) {
- if (!ssl_parm_len[i]) {
- ssl_parm[i] = NULL;
- }
- }
-
- mysql_ssl_set(mysql->mysql, ssl_parm[0], ssl_parm[1], ssl_parm[2], ssl_parm[3], ssl_parm[4]);
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto mixed mysqli_stat(object link)
- Get current system status */
-PHP_FUNCTION(mysqli_stat)
-{
- MY_MYSQL *mysql;
- zval *mysql_link;
- char *stat;
-
- if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &mysql_link, mysqli_link_class_entry) == FAILURE) {
- return;
- }
- MYSQLI_FETCH_RESOURCE(mysql, MY_MYSQL *, &mysql_link, "mysqli_link");
-
- if ((stat = (char *)mysql_stat(mysql->mysql))) {
- RETURN_STRING(stat, 1);
- }
- RETURN_FALSE;
-}
-
-/* }}} */
-
-/* {{{ proto int mysqli_stmt_attr_set(object stmt, long attr, bool mode)
-*/
-PHP_FUNCTION(mysqli_stmt_attr_set)
-{
- MY_STMT *stmt;
- zval *mysql_stmt;
- ulong mode;
- ulong attr;
- int rc;
-
- if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Olb", &mysql_stmt, mysqli_stmt_class_entry, &attr, &mode) == FAILURE) {
- return;
- }
- MYSQLI_FETCH_RESOURCE(stmt, MY_STMT *, &mysql_stmt, "mysqli_stmt");
-
- if ((rc = mysql_stmt_attr_set(stmt->stmt, attr, (void *)&mode))) {
- RETURN_FALSE;
- }
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto int mysqli_stmt_attr_get(object stmt, long attr)
-*/
-PHP_FUNCTION(mysqli_stmt_attr_get)
-{
- MY_STMT *stmt;
- zval *mysql_stmt;
- ulong value;
- ulong attr;
- int rc;
-
- if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Ol", &mysql_stmt, mysqli_stmt_class_entry, &attr) == FAILURE) {
- return;
- }
- MYSQLI_FETCH_RESOURCE(stmt, MY_STMT *, &mysql_stmt, "mysqli_stmt");
-
- if ((rc = mysql_stmt_attr_get(stmt->stmt, attr, &value))) {
- RETURN_FALSE;
- }
- RETURN_LONG(value);
-}
-/* }}} */
-
-/* {{{ proto int mysqli_stmt_errno(object stmt)
-*/
-PHP_FUNCTION(mysqli_stmt_errno)
-{
- MY_STMT *stmt;
- zval *mysql_stmt;
-
- if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &mysql_stmt, mysqli_stmt_class_entry) == FAILURE) {
- return;
- }
- MYSQLI_FETCH_RESOURCE(stmt, MY_STMT *, &mysql_stmt, "mysqli_stmt");
-
- RETURN_LONG(mysql_stmt_errno(stmt->stmt));
-}
-/* }}} */
-
-/* {{{ proto string mysqli_stmt_error(object stmt)
-*/
-PHP_FUNCTION(mysqli_stmt_error)
-{
- MY_STMT *stmt;
- zval *mysql_stmt;
-
- if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &mysql_stmt, mysqli_stmt_class_entry) == FAILURE) {
- return;
- }
- MYSQLI_FETCH_RESOURCE(stmt, MY_STMT *, &mysql_stmt, "mysqli_stmt");
-
- RETURN_STRING((char *)mysql_stmt_error(stmt->stmt),1);
-}
-/* }}} */
-
-/* {{{ proto mixed mysqli_stmt_init(object link)
- Initialize statement object
-*/
-PHP_FUNCTION(mysqli_stmt_init)
-{
- MY_MYSQL *mysql;
- MY_STMT *stmt;
- zval *mysql_link;
- MYSQLI_RESOURCE *mysqli_resource;
-
- if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O",&mysql_link, mysqli_link_class_entry) == FAILURE) {
- return;
- }
- MYSQLI_FETCH_RESOURCE(mysql, MY_MYSQL *, &mysql_link, "mysqli_link");
-
- stmt = (MY_STMT *)ecalloc(1,sizeof(MY_STMT));
-
- if (!(stmt->stmt = mysql_stmt_init(mysql->mysql))) {
- efree(stmt);
- RETURN_FALSE;
- }
-
- mysqli_resource = (MYSQLI_RESOURCE *)ecalloc (1, sizeof(MYSQLI_RESOURCE));
- mysqli_resource->ptr = (void *)stmt;
- MYSQLI_RETURN_RESOURCE(mysqli_resource, mysqli_stmt_class_entry);
-}
-/* }}} */
-
-/* {{{ proto bool mysqli_stmt_prepare(object stmt, string query)
- prepare server side statement with query
-*/
-PHP_FUNCTION(mysqli_stmt_prepare)
-{
- MY_STMT *stmt;
- zval *mysql_stmt;
- char *query;
- int query_len;
-
- if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Os", &mysql_stmt, mysqli_stmt_class_entry, &query, &query_len) == FAILURE) {
- return;
- }
- MYSQLI_FETCH_RESOURCE(stmt, MY_STMT *, &mysql_stmt, "mysqli_stmt");
-
- if (mysql_stmt_prepare(stmt->stmt, query, query_len)) {
- MYSQLI_REPORT_STMT_ERROR(stmt->stmt);
- RETURN_FALSE;
- }
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto mixed mysqli_stmt_result_metadata(object stmt)
- return result set from statement */
-PHP_FUNCTION(mysqli_stmt_result_metadata)
-{
- MY_STMT *stmt;
- MYSQL_RES *result;
- zval *mysql_stmt;
- MYSQLI_RESOURCE *mysqli_resource;
-
- if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &mysql_stmt, mysqli_stmt_class_entry) == FAILURE) {
- return;
- }
- MYSQLI_FETCH_RESOURCE(stmt, MY_STMT *, &mysql_stmt, "mysqli_stmt");
-
- if (!(result = mysql_stmt_result_metadata(stmt->stmt))){
- MYSQLI_REPORT_STMT_ERROR(stmt->stmt);
- RETURN_FALSE;
- }
-
- mysqli_resource = (MYSQLI_RESOURCE *)ecalloc (1, sizeof(MYSQLI_RESOURCE));
- mysqli_resource->ptr = (void *)result;
- MYSQLI_RETURN_RESOURCE(mysqli_resource, mysqli_result_class_entry);
-}
-/* }}} */
-
-/* {{{ proto bool mysqli_stmt_store_result(stmt)
-*/
-PHP_FUNCTION(mysqli_stmt_store_result)
-{
- MY_STMT *stmt;
- zval *mysql_stmt;
-
- if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &mysql_stmt, mysqli_stmt_class_entry) == FAILURE) {
- return;
- }
- MYSQLI_FETCH_RESOURCE(stmt, MY_STMT *, &mysql_stmt, "mysqli_stmt");
-
- if (mysql_stmt_store_result(stmt->stmt)){
- MYSQLI_REPORT_STMT_ERROR(stmt->stmt);
- RETURN_FALSE;
- }
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto string mysqli_stmt_sqlstate(object stmt)
-*/
-PHP_FUNCTION(mysqli_stmt_sqlstate)
-{
- MY_STMT *stmt;
- zval *mysql_stmt;
-
- if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &mysql_stmt, mysqli_stmt_class_entry) == FAILURE) {
- return;
- }
- MYSQLI_FETCH_RESOURCE(stmt, MY_STMT *, &mysql_stmt, "mysqli_stmt");
-
- RETURN_STRING((char *)mysql_stmt_sqlstate(stmt->stmt),1);
-}
-/* }}} */
-
-/* {{{ proto object mysqli_store_result(object link)
- Buffer result set on client */
-PHP_FUNCTION(mysqli_store_result)
-{
- MY_MYSQL *mysql;
- MYSQL_RES *result;
- zval *mysql_link;
- MYSQLI_RESOURCE *mysqli_resource;
-
- if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &mysql_link, mysqli_link_class_entry) == FAILURE) {
- return;
- }
- MYSQLI_FETCH_RESOURCE(mysql, MY_MYSQL *, &mysql_link, "mysqli_link");
-
- if (!(result = mysql_store_result(mysql->mysql))) {
- MYSQLI_REPORT_MYSQL_ERROR(mysql->mysql);
- RETURN_FALSE;
- }
- if (MyG(report_mode) & MYSQLI_REPORT_INDEX) {
- php_mysqli_report_index("from previous query", mysql->mysql->server_status TSRMLS_CC);
- }
- mysqli_resource = (MYSQLI_RESOURCE *)ecalloc (1, sizeof(MYSQLI_RESOURCE));
- mysqli_resource->ptr = (void *)result;
- MYSQLI_RETURN_RESOURCE(mysqli_resource, mysqli_result_class_entry);
-}
-/* }}} */
-
-/* {{{ proto int mysqli_thread_id(object link)
- Return the current thread ID */
-PHP_FUNCTION(mysqli_thread_id)
-{
- MY_MYSQL *mysql;
- zval *mysql_link;
-
- if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &mysql_link, mysqli_link_class_entry) == FAILURE) {
- return;
- }
- MYSQLI_FETCH_RESOURCE(mysql, MY_MYSQL *, &mysql_link, "mysqli_link");
-
- RETURN_LONG(mysql_thread_id(mysql->mysql));
-}
-/* }}} */
-
-/* {{{ proto bool mysqli_thread_safe(void)
- Return whether thread safety is given or not */
-PHP_FUNCTION(mysqli_thread_safe)
-{
- RETURN_BOOL(mysql_thread_safe());
-}
-
-/* }}} */
-
-/* {{{ proto mixed mysqli_use_result(object link)
- Directly retrieve query results - do not buffer results on client side */
-PHP_FUNCTION(mysqli_use_result)
-{
- MY_MYSQL *mysql;
- MYSQL_RES *result;
- zval *mysql_link;
- MYSQLI_RESOURCE *mysqli_resource;
-
- if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &mysql_link, mysqli_link_class_entry) == FAILURE) {
- return;
- }
- MYSQLI_FETCH_RESOURCE(mysql, MY_MYSQL *, &mysql_link, "mysqli_link");
-
- if (!(result = mysql_use_result(mysql->mysql))) {
- MYSQLI_REPORT_MYSQL_ERROR(mysql->mysql);
- RETURN_FALSE;
- }
-
- if (MyG(report_mode) & MYSQLI_REPORT_INDEX) {
- php_mysqli_report_index("from previous query", mysql->mysql->server_status TSRMLS_CC);
- }
-
- mysqli_resource = (MYSQLI_RESOURCE *)ecalloc (1, sizeof(MYSQLI_RESOURCE));
- mysqli_resource->ptr = (void *)result;
- MYSQLI_RETURN_RESOURCE(mysqli_resource, mysqli_result_class_entry);
-}
-/* }}} */
-
-/* {{{ proto int mysqli_warning_count (object link)
- Return number of warnings from the last query for the given link */
-PHP_FUNCTION(mysqli_warning_count)
-{
- MY_MYSQL *mysql;
- zval *mysql_link;
-
- if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &mysql_link, mysqli_link_class_entry) == FAILURE) {
- return;
- }
- MYSQLI_FETCH_RESOURCE(mysql, MY_MYSQL *, &mysql_link, "mysqli_link");
-
- RETURN_LONG(mysql_warning_count(mysql->mysql));
-}
-/* }}} */
-
-/*
- * 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/mysqli/mysqli_fe.c b/ext/mysqli/mysqli_fe.c
deleted file mode 100644
index 35c43e6c4e..0000000000
--- a/ext/mysqli/mysqli_fe.c
+++ /dev/null
@@ -1,287 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Georg Richter <georg@php.net> |
- +----------------------------------------------------------------------+
-
- $Id$
-*/
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <signal.h>
-
-#include "php.h"
-#include "php_ini.h"
-#include "ext/standard/info.h"
-#include "php_mysqli.h"
-
-
-static
- ZEND_BEGIN_ARG_INFO(second_arg_force_by_ref_rest, 1)
- ZEND_ARG_PASS_INFO(0)
- ZEND_END_ARG_INFO();
-
-static
- ZEND_BEGIN_ARG_INFO(third_arg_force_by_ref_rest, 1)
- ZEND_ARG_PASS_INFO(0)
- ZEND_ARG_PASS_INFO(0)
- ZEND_END_ARG_INFO();
-
-static
- ZEND_BEGIN_ARG_INFO(all_args_force_by_ref, 1)
- ZEND_END_ARG_INFO();
-
-
-/* {{{ mysqli_functions[]
- *
- * Every user visible function must have an entry in mysqli_functions[].
- */
-function_entry mysqli_functions[] = {
- PHP_FE(mysqli_affected_rows, NULL)
- PHP_FE(mysqli_autocommit, NULL)
- PHP_FE(mysqli_change_user, NULL)
- PHP_FE(mysqli_character_set_name, NULL)
- PHP_FE(mysqli_close, NULL)
- PHP_FE(mysqli_commit, NULL)
- PHP_FE(mysqli_connect, NULL)
- PHP_FE(mysqli_connect_errno, NULL)
- PHP_FE(mysqli_connect_error, NULL)
- PHP_FE(mysqli_data_seek, NULL)
- PHP_FE(mysqli_debug, NULL)
- PHP_FE(mysqli_disable_reads_from_master, NULL)
- PHP_FE(mysqli_disable_rpl_parse, NULL)
- PHP_FE(mysqli_dump_debug_info, NULL)
-#ifdef HAVE_EMBEDDED_MYSQLI
- PHP_FE(mysqli_embedded_connect, NULL)
-#endif
- PHP_FE(mysqli_enable_reads_from_master, NULL)
- PHP_FE(mysqli_enable_rpl_parse, NULL)
- PHP_FE(mysqli_errno, NULL)
- PHP_FE(mysqli_error, NULL)
- PHP_FE(mysqli_stmt_execute, NULL)
- PHP_FALIAS(mysqli_execute, mysqli_stmt_execute, NULL)
- PHP_FE(mysqli_fetch_field, NULL)
- PHP_FE(mysqli_fetch_fields, NULL)
- PHP_FE(mysqli_fetch_field_direct, NULL)
- PHP_FE(mysqli_fetch_lengths, NULL)
- PHP_FE(mysqli_fetch_array, NULL)
- PHP_FE(mysqli_fetch_assoc, NULL)
- PHP_FE(mysqli_fetch_object, NULL)
- PHP_FE(mysqli_fetch_row, NULL)
- PHP_FE(mysqli_field_count, NULL)
- PHP_FE(mysqli_field_seek, NULL)
- PHP_FE(mysqli_field_tell, NULL)
- PHP_FE(mysqli_free_result, NULL)
- PHP_FE(mysqli_get_client_info, NULL)
- PHP_FE(mysqli_get_client_version, NULL)
- PHP_FE(mysqli_get_host_info, NULL)
- PHP_FE(mysqli_get_proto_info, NULL)
- PHP_FE(mysqli_get_server_info, NULL)
- PHP_FE(mysqli_get_server_version, NULL)
- PHP_FE(mysqli_init, NULL)
- PHP_FE(mysqli_info, NULL)
- PHP_FE(mysqli_insert_id, NULL)
- PHP_FE(mysqli_kill, NULL)
- PHP_FE(mysqli_set_local_infile_default, NULL)
- PHP_FE(mysqli_set_local_infile_handler, NULL)
- PHP_FE(mysqli_master_query, NULL)
- PHP_FE(mysqli_more_results, NULL)
- PHP_FE(mysqli_multi_query, NULL)
- PHP_FE(mysqli_next_result, NULL)
- PHP_FE(mysqli_num_fields, NULL)
- PHP_FE(mysqli_num_rows, NULL)
- PHP_FE(mysqli_options, NULL)
- PHP_FE(mysqli_ping, NULL)
- PHP_FE(mysqli_prepare, NULL)
- PHP_FE(mysqli_report, NULL)
- PHP_FE(mysqli_query, NULL)
- PHP_FE(mysqli_real_connect, NULL)
- PHP_FE(mysqli_real_escape_string, NULL)
- PHP_FE(mysqli_real_query, NULL)
- PHP_FE(mysqli_rollback, NULL)
- PHP_FE(mysqli_rpl_parse_enabled, NULL)
- PHP_FE(mysqli_rpl_probe, NULL)
- PHP_FE(mysqli_rpl_query_type, NULL)
- PHP_FE(mysqli_select_db, NULL)
- PHP_FE(mysqli_stmt_attr_get, NULL)
- PHP_FE(mysqli_stmt_attr_set, NULL)
- PHP_FE(mysqli_stmt_field_count, NULL)
- PHP_FE(mysqli_stmt_init, NULL)
- PHP_FE(mysqli_stmt_prepare, NULL)
- PHP_FE(mysqli_stmt_result_metadata, NULL)
- PHP_FE(mysqli_stmt_send_long_data, NULL)
- PHP_FE(mysqli_stmt_bind_param, third_arg_force_by_ref_rest)
- PHP_FE(mysqli_stmt_bind_result, second_arg_force_by_ref_rest)
- PHP_FE(mysqli_stmt_fetch, NULL)
- PHP_FE(mysqli_stmt_free_result, NULL)
- PHP_FE(mysqli_stmt_insert_id, NULL)
- PHP_FE(mysqli_stmt_reset, NULL)
- PHP_FE(mysqli_stmt_param_count, NULL)
- PHP_FE(mysqli_send_query, NULL)
-#ifdef HAVE_EMBEDDED_MYSQLI
- PHP_FE(mysqli_server_end, NULL)
- PHP_FE(mysqli_server_init, NULL)
-#endif
- PHP_FE(mysqli_slave_query, NULL)
- PHP_FE(mysqli_sqlstate, NULL)
- PHP_FE(mysqli_ssl_set, NULL)
- PHP_FE(mysqli_stat, NULL)
- PHP_FE(mysqli_stmt_affected_rows, NULL)
- PHP_FE(mysqli_stmt_close, NULL)
- PHP_FE(mysqli_stmt_data_seek, NULL)
- PHP_FE(mysqli_stmt_errno, NULL)
- PHP_FE(mysqli_stmt_error, NULL)
- PHP_FE(mysqli_stmt_num_rows, NULL)
- PHP_FE(mysqli_stmt_sqlstate, NULL)
- PHP_FE(mysqli_store_result, NULL)
- PHP_FE(mysqli_stmt_store_result, NULL)
- PHP_FE(mysqli_thread_id, NULL)
- PHP_FE(mysqli_thread_safe, NULL)
- PHP_FE(mysqli_use_result, NULL)
- PHP_FE(mysqli_warning_count, NULL)
-
- /* Aliases */
- PHP_FALIAS(mysqli_bind_param,
- mysqli_stmt_bind_param, third_arg_force_by_ref_rest)
- PHP_FALIAS(mysqli_bind_result,
- mysqli_stmt_bind_result, second_arg_force_by_ref_rest)
- PHP_FALIAS(mysqli_client_encoding,
- mysqli_character_set_name, NULL)
- PHP_FALIAS(mysqli_escape_string,
- mysqli_real_escape_string, NULL)
- PHP_FALIAS(mysqli_fetch, mysqli_stmt_fetch, NULL)
- PHP_FALIAS(mysqli_param_count,
- mysqli_stmt_param_count, NULL)
- PHP_FALIAS(mysqli_get_metadata,
- mysqli_stmt_result_metadata, NULL)
- PHP_FALIAS(mysqli_send_long_data,
- mysqli_stmt_send_long_data, NULL)
- PHP_FALIAS(mysqli_set_opt, mysqli_options, NULL)
-
- {NULL, NULL, NULL} /* Must be the last line in mysqli_functions[] */
-};
-/* }}} */
-
-/* {{{ mysqli_link_methods[]
- *
- * Every user visible function must have an entry in mysqli_functions[].
- */
-function_entry mysqli_link_methods[] = {
- PHP_FALIAS(autocommit,mysqli_autocommit,NULL)
- PHP_FALIAS(change_user,mysqli_change_user,NULL)
- PHP_FALIAS(character_set_name,mysqli_character_set_name,NULL)
- PHP_FALIAS(client_encoding, mysqli_character_set_name,NULL)
- PHP_FALIAS(close,mysqli_close,NULL)
- PHP_FALIAS(commit,mysqli_commit,NULL)
- PHP_FALIAS(connect,mysqli_connect,NULL)
- PHP_FALIAS(debug,mysqli_debug,NULL)
- PHP_FALIAS(disable_reads_from_master,mysqli_disable_reads_from_master,NULL)
- PHP_FALIAS(disable_rpl_parse,mysqli_disable_rpl_parse,NULL)
- PHP_FALIAS(dump_debug_info,mysqli_dump_debug_info,NULL)
- PHP_FALIAS(enable_reads_from_master,mysqli_enable_reads_from_master,NULL)
- PHP_FALIAS(enable_rpl_parse,mysqli_enable_rpl_parse,NULL)
- PHP_FALIAS(get_client_info,mysqli_get_client_info,NULL)
- PHP_FALIAS(get_server_info,mysqli_get_server_info,NULL)
- PHP_FALIAS(init,mysqli_init,NULL)
- 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)
- PHP_FALIAS(master_query,mysqli_master_query,NULL)
- PHP_FALIAS(multi_query,mysqli_multi_query,NULL)
- PHP_FALIAS(mysqli,mysqli_connect,NULL)
- PHP_FALIAS(more_results,mysqli_more_results, NULL)
- PHP_FALIAS(next_result, mysqli_next_result, NULL)
- PHP_FALIAS(options,mysqli_options,NULL)
- PHP_FALIAS(ping,mysqli_ping,NULL)
- PHP_FALIAS(prepare,mysqli_prepare,NULL)
- PHP_FALIAS(query,mysqli_query,NULL)
- PHP_FALIAS(real_connect,mysqli_real_connect,NULL)
- PHP_FALIAS(real_escape_string,mysqli_real_escape_string,NULL)
- PHP_FALIAS(escape_string, mysqli_real_escape_string,NULL)
- PHP_FALIAS(real_query,mysqli_real_query,NULL)
- PHP_FALIAS(rollback,mysqli_rollback,NULL)
- 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)
- PHP_FALIAS(select_db,mysqli_select_db,NULL)
- PHP_FALIAS(set_opt, mysqli_options,NULL)
- PHP_FALIAS(slave_query,mysqli_slave_query,NULL)
- PHP_FALIAS(ssl_set,mysqli_ssl_set,NULL)
- PHP_FALIAS(stat,mysqli_stat,NULL)
- PHP_FALIAS(stmt_init,mysqli_stmt_init, NULL)
- PHP_FALIAS(store_result,mysqli_store_result,NULL)
- PHP_FALIAS(thread_safe,mysqli_thread_safe,NULL)
- PHP_FALIAS(use_result,mysqli_use_result,NULL)
- {NULL, NULL, NULL}
-};
-/* }}} */
-
-/* {{{ mysqli_result_methods[]
- *
- * Every user visible function must have an entry in mysqli_result_functions[].
- */
-function_entry mysqli_result_methods[] = {
- PHP_FALIAS(close,mysqli_free_result,NULL)
- PHP_FALIAS(free,mysqli_free_result,NULL)
- PHP_FALIAS(data_seek,mysqli_data_seek,NULL)
- PHP_FALIAS(fetch_field,mysqli_fetch_field,NULL)
- PHP_FALIAS(fetch_fields,mysqli_fetch_fields,NULL)
- PHP_FALIAS(fetch_field_direct,mysqli_fetch_field_direct,NULL)
- PHP_FALIAS(fetch_array,mysqli_fetch_array,NULL)
- PHP_FALIAS(fetch_assoc,mysqli_fetch_assoc,NULL)
- PHP_FALIAS(fetch_object,mysqli_fetch_object,NULL)
- PHP_FALIAS(fetch_row,mysqli_fetch_row,NULL)
- PHP_FALIAS(field_count,mysqli_field_count,NULL)
- PHP_FALIAS(field_seek,mysqli_field_seek,NULL)
- PHP_FALIAS(free_result,mysqli_free_result,NULL)
- {NULL, NULL, NULL}
-};
-/* }}} */
-
-/* {{{ mysqli_stmt_methods[]
- *
- * Every user visible function must have an entry in mysqli_stmt_functions[].
- */
-function_entry mysqli_stmt_methods[] = {
- PHP_FALIAS(attr_get,mysqli_stmt_attr_get,NULL)
- PHP_FALIAS(attr_set,mysqli_stmt_attr_set,NULL)
- PHP_FALIAS(bind_param,mysqli_stmt_bind_param,second_arg_force_by_ref_rest)
- PHP_FALIAS(bind_result,mysqli_stmt_bind_result,all_args_force_by_ref)
- PHP_FALIAS(close,mysqli_stmt_close,NULL)
- PHP_FALIAS(data_seek,mysqli_stmt_data_seek,NULL)
- PHP_FALIAS(execute,mysqli_stmt_execute,NULL)
- PHP_FALIAS(fetch,mysqli_stmt_fetch,NULL)
- PHP_FALIAS(result_metadata, mysqli_stmt_result_metadata,NULL)
- PHP_FALIAS(num_rows, mysqli_stmt_num_rows,NULL)
- PHP_FALIAS(send_long_data,mysqli_stmt_send_long_data,NULL)
- PHP_FALIAS(stmt,mysqli_prepare,NULL)
- PHP_FALIAS(free_result,mysqli_stmt_free_result,NULL)
- PHP_FALIAS(reset,mysqli_stmt_reset,NULL)
- PHP_FALIAS(prepare,mysqli_stmt_prepare, NULL)
- PHP_FALIAS(store_result,mysqli_stmt_store_result,NULL)
- {NULL, NULL, NULL}
-};
-/* }}} */
-
-/*
- * 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/mysqli/mysqli_nonapi.c b/ext/mysqli/mysqli_nonapi.c
deleted file mode 100644
index 2d8f48d2a3..0000000000
--- a/ext/mysqli/mysqli_nonapi.c
+++ /dev/null
@@ -1,282 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Georg Richter <georg@php.net> |
- +----------------------------------------------------------------------+
-
- $Id$
-*/
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <signal.h>
-
-#include "php.h"
-#include "php_ini.h"
-#include "ext/standard/info.h"
-#include "php_mysqli.h"
-
-/* {{{ proto object mysqli_connect([string hostname [,string username [,string passwd [,string dbname [,int port [,string socket]]]]]])
- Open a connection to a mysql server */
-PHP_FUNCTION(mysqli_connect)
-{
- MY_MYSQL *mysql;
- MYSQLI_RESOURCE *mysqli_resource;
- zval *object = getThis();
- char *hostname = NULL, *username=NULL, *passwd=NULL, *dbname=NULL, *socket=NULL;
- unsigned int hostname_len, username_len, passwd_len, dbname_len, socket_len;
- long port=0;
-
- if (getThis() && !ZEND_NUM_ARGS()) {
- RETURN_NULL();
- }
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|ssssls", &hostname, &hostname_len, &username, &username_len,
- &passwd, &passwd_len, &dbname, &dbname_len, &port, &socket, &socket_len) == FAILURE) {
- return;
- }
-
- /* TODO: safe mode handling */
- if (PG(sql_safe_mode)){
- } else {
- if (!passwd) {
- passwd = MyG(default_pw);
- if (!username){
- username = MyG(default_user);
- if (!hostname) {
- hostname = MyG(default_host);
- }
- }
- }
- }
-
- mysql = (MY_MYSQL *)calloc(1, sizeof(MY_MYSQL));
-
- if (!(mysql->mysql = mysql_init(NULL))) {
- efree(mysql);
- RETURN_FALSE;
- }
-
- if (mysql_real_connect(mysql->mysql,hostname,username,passwd,dbname,port,socket,0) == NULL) {
- /* Save error messages */
-
- MYSQLI_REPORT_MYSQL_ERROR(mysql->mysql);
- php_mysqli_set_error(mysql_errno(mysql->mysql), (char *) mysql_error(mysql->mysql) TSRMLS_CC);
-
- if (!(MyG(report_mode) & MYSQLI_REPORT_ERROR)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", mysql_error(mysql->mysql));
- }
- /* free mysql structure */
- mysql_close(mysql->mysql);
- RETURN_FALSE;
- }
-
- /* clear error */
- php_mysqli_set_error(mysql_errno(mysql->mysql), (char *) mysql_error(mysql->mysql) TSRMLS_CC);
-
- mysql->mysql->reconnect = MyG(reconnect);
-
- /* set our own local_infile handler */
- php_set_local_infile_handler_default(mysql);
-
- mysqli_resource = (MYSQLI_RESOURCE *)ecalloc (1, sizeof(MYSQLI_RESOURCE));
- mysqli_resource->ptr = (void *)mysql;
-
- if (!object) {
- MYSQLI_RETURN_RESOURCE(mysqli_resource, mysqli_link_class_entry);
- } else {
- ((mysqli_object *) zend_object_store_get_object(object TSRMLS_CC))->ptr = mysqli_resource;
- ((mysqli_object *) zend_object_store_get_object(object TSRMLS_CC))->valid = 1;
- }
-}
-/* }}} */
-
-#ifdef HAVE_EMBEDDED_MYSQLI
-/* {{{ proto object mysqli_embedded_connect(void)
- Open a connection to a embedded mysql server */
-PHP_FUNCTION(mysqli_embedded_connect)
-{
- MY_MYSQL *mysql;
- MYSQLI_RESOURCE *mysqli_resource;
- zval *object = getThis();
- char *dbname = NULL;
- int dblen = 0;
-
- if (!MyG(embedded)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Embedded server was not initialized.");
- RETURN_FALSE;
- }
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|s", &dbname, &dblen) == FAILURE) {
- return;
- }
-
- mysql = (MY_MYSQL *) calloc(1, sizeof(MY_MYSQL));
-
- if (!(mysql = mysql_init(NULL))) {
- efree(mysql);
- RETURN_FALSE;
- }
-
- if (mysql_real_connect(mysql, NULL, NULL, NULL, dbname, 0, NULL, 0) == NULL) {
- MYSQLI_REPORT_MYSQL_ERROR(mysql->mysql);
- php_mysqli_set_error(mysql_errno(mysql->mysql), (char *) mysql_error(mysql->mysql) TSRMLS_CC);
-
- if (!(MyG(report_mode) & MYSQLI_REPORT_ERROR)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", mysql_error(mysql->mysql));
- }
- /* free mysql structure */
- mysql_close(mysql->mysql);
- efree(mysql);
- RETURN_FALSE;
- }
-
- php_mysqli_set_error(mysql_errno(mysql->mysql), (char *) mysql_error(mysql->mysql) TSRMLS_CC);
-
- mysqli_resource = (MYSQLI_RESOURCE *)ecalloc (1, sizeof(MYSQLI_RESOURCE));
- mysqli_resource->ptr = (void *)mysql;
-
- if (!object) {
- MYSQLI_RETURN_RESOURCE(mysqli_resource, mysqli_link_class_entry);
- } else {
- ((mysqli_object *) zend_object_store_get_object(object TSRMLS_CC))->ptr = mysqli_resource;
- }
-}
-/* }}} */
-#endif
-
-/* {{{ proto int mysqli_connect_errno(void)
- Returns the numerical value of the error message from last connect command */
-PHP_FUNCTION(mysqli_connect_errno)
-{
- RETURN_LONG(MyG(error_no));
-}
-/* }}} */
-
-/* {{{ proto string mysqli_connect_error(void)
- Returns the text of the error message from previous MySQL operation */
-PHP_FUNCTION(mysqli_connect_error)
-{
- if (MyG(error_msg)) {
- RETURN_STRING(MyG(error_msg),1);
- } else {
- RETURN_NULL();
- }
-}
-/* }}} */
-
-/* {{{ proto mixed mysqli_fetch_array (object result [,int resulttype])
- Fetch a result row as an associative array, a numeric array, or both */
-PHP_FUNCTION(mysqli_fetch_array)
-{
- php_mysqli_fetch_into_hash(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0, 0);
-}
-/* }}} */
-
-/* {{{ proto mixed mysqli_fetch_assoc (object result)
- Fetch a result row as an associative array */
-PHP_FUNCTION(mysqli_fetch_assoc)
-{
- php_mysqli_fetch_into_hash(INTERNAL_FUNCTION_PARAM_PASSTHRU, MYSQLI_ASSOC, 0);
-}
-/* }}} */
-
-/* {{{ proto mixed mysqli_fetch_object (object result [, string class_name [, NULL|array ctor_params]])
- Fetch a result row as an object */
-PHP_FUNCTION(mysqli_fetch_object)
-{
- php_mysqli_fetch_into_hash(INTERNAL_FUNCTION_PARAM_PASSTHRU, MYSQLI_ASSOC, 1);
-}
-/* }}} */
-
-/* {{{ proto bool mysqli_multi_query(object link, string query)
- Binary-safe version of mysql_query() */
-PHP_FUNCTION(mysqli_multi_query)
-{
- MY_MYSQL *mysql;
- zval *mysql_link;
- char *query = NULL;
- unsigned int query_len;
-
- if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Os", &mysql_link, mysqli_link_class_entry, &query, &query_len) == FAILURE) {
- return;
- }
- MYSQLI_FETCH_RESOURCE(mysql, MY_MYSQL *, &mysql_link, "mysqli_link");
-
- MYSQLI_ENABLE_MQ;
- if (mysql_real_query(mysql->mysql, query, query_len)) {
- MYSQLI_DISABLE_MQ;
- MYSQLI_REPORT_MYSQL_ERROR(mysql->mysql);
- RETURN_FALSE;
- }
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto mixed mysqli_query(object link, string query [,int resultmode]) */
-PHP_FUNCTION(mysqli_query)
-{
- MY_MYSQL *mysql;
- zval *mysql_link;
- MYSQLI_RESOURCE *mysqli_resource;
- MYSQL_RES *result;
- char *query = NULL;
- unsigned int query_len;
- unsigned int resultmode = 0;
-
- if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Os|l", &mysql_link, mysqli_link_class_entry, &query, &query_len, &resultmode) == FAILURE) {
- return;
- }
- MYSQLI_FETCH_RESOURCE(mysql, MY_MYSQL*, &mysql_link, "mysqli_link");
-
- MYSQLI_DISABLE_MQ;
-
- if (mysql_real_query(mysql->mysql, query, query_len)) {
- MYSQLI_REPORT_MYSQL_ERROR(mysql->mysql);
- RETURN_FALSE;
- }
-
- if (!mysql_field_count(mysql->mysql)) {
- if (MyG(report_mode) & MYSQLI_REPORT_INDEX) {
- php_mysqli_report_index(query, mysql->mysql->server_status TSRMLS_CC);
- }
- RETURN_TRUE;
- }
-
- result = (resultmode == MYSQLI_USE_RESULT) ? mysql_use_result(mysql->mysql) : mysql_store_result(mysql->mysql);
-
- if (!result) {
- RETURN_FALSE;
- }
-
- if (MyG(report_mode) & MYSQLI_REPORT_INDEX) {
- php_mysqli_report_index(query, mysql->mysql->server_status TSRMLS_CC);
- }
-
- mysqli_resource = (MYSQLI_RESOURCE *)ecalloc (1, sizeof(MYSQLI_RESOURCE));
- mysqli_resource->ptr = (void *)result;
- MYSQLI_RETURN_RESOURCE(mysqli_resource, mysqli_result_class_entry);
-}
-/* }}} */
-
-/*
- * 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/mysqli/mysqli_prop.c b/ext/mysqli/mysqli_prop.c
deleted file mode 100644
index f5792b77a6..0000000000
--- a/ext/mysqli/mysqli_prop.c
+++ /dev/null
@@ -1,255 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Georg Richter <georg@php.net> |
- +----------------------------------------------------------------------+
-
- $Id$
-*/
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <signal.h>
-
-#include "php.h"
-#include "php_ini.h"
-#include "ext/standard/info.h"
-#include "php_mysqli.h"
-
-#define MYSQLI_GET_MYSQL() \
-MYSQL *p = (MYSQL *)((MY_MYSQL *)((MYSQLI_RESOURCE *)(obj->ptr))->ptr)->mysql;
-
-#define MYSQLI_GET_RESULT() \
-MYSQL_RES *p = (MYSQL_RES *)((MYSQLI_RESOURCE *)(obj->ptr))->ptr
-
-#define MYSQLI_GET_STMT() \
-MYSQL_STMT *p = (MYSQL_STMT *)((MY_STMT *)((MYSQLI_RESOURCE *)(obj->ptr))->ptr)->stmt
-
-#define MYSQLI_MAP_PROPERTY_FUNC_LONG( __func, __int_func, __get_type, __ret_type)\
-int __func(mysqli_object *obj, zval **retval TSRMLS_DC) \
-{\
- __ret_type l;\
- __get_type;\
- ALLOC_ZVAL(*retval);\
- if (!p) {\
- ZVAL_NULL(*retval);\
- } else {\
- l = (__ret_type)__int_func(p);\
- if (l < LONG_MAX) {\
- ZVAL_LONG(*retval, l);\
- } else { \
- char ret[40]; \
- sprintf(ret, "%llu", (my_ulonglong)l); \
- ZVAL_STRING(*retval, ret, 1); \
- } \
- }\
- return SUCCESS;\
-}
-
-#define MYSQLI_MAP_PROPERTY_FUNC_STRING(__func, __int_func, __get_type)\
-int __func(mysqli_object *obj, zval **retval TSRMLS_DC)\
-{\
- char *c;\
- __get_type;\
- ALLOC_ZVAL(*retval);\
- if (!p) {\
- ZVAL_NULL(*retval);\
- } else {\
- c = (char *)__int_func(p);\
- if (!c) {\
- ZVAL_NULL(*retval);\
- } else {\
- ZVAL_STRING(*retval, c, 1);\
- }\
- }\
- return SUCCESS;\
-}
-
-/* {{{ property link_client_version_read */
-int link_client_version_read(mysqli_object *obj, zval **retval TSRMLS_DC)
-{
- ALLOC_ZVAL(*retval);
- ZVAL_LONG(*retval, MYSQL_VERSION_ID);
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ property link_client_info_read */
-int link_client_info_read(mysqli_object *obj, zval **retval TSRMLS_DC)
-{
- ALLOC_ZVAL(*retval);
- ZVAL_STRING(*retval, MYSQL_SERVER_VERSION, 1);
- return SUCCESS;
-}
-/* }}} */
-/* {{{ property link_test_read */
-int link_test_read(mysqli_object *obj, zval **retval TSRMLS_DC)
-{
- long i;
- ALLOC_ZVAL(*retval);
- array_init(*retval);
-
- for (i=0; i < 10; i++)
- add_index_long(*retval, i, i + 10);
- return SUCCESS;
-}
-/*i }}} */
-
-/* {{{ property link_connect_errno_read */
-int link_connect_errno_read(mysqli_object *obj, zval **retval TSRMLS_DC)
-{
- ALLOC_ZVAL(*retval);
- ZVAL_LONG(*retval, (long)MyG(error_no));
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ property link_connect_error_read */
-int link_connect_error_read(mysqli_object *obj, zval **retval TSRMLS_DC)
-{
- ALLOC_ZVAL(*retval);
- ZVAL_STRING(*retval, MyG(error_msg), 1);
- return SUCCESS;
-}
-/* }}} */
-
-
-/* link properties */
-MYSQLI_MAP_PROPERTY_FUNC_LONG(link_affected_rows_read, mysql_affected_rows, MYSQLI_GET_MYSQL(), my_ulonglong);
-MYSQLI_MAP_PROPERTY_FUNC_LONG(link_errno_read, mysql_errno, MYSQLI_GET_MYSQL(), ulong);
-MYSQLI_MAP_PROPERTY_FUNC_STRING(link_error_read, mysql_error, MYSQLI_GET_MYSQL());
-MYSQLI_MAP_PROPERTY_FUNC_LONG(link_field_count_read, mysql_field_count, MYSQLI_GET_MYSQL(), ulong);
-MYSQLI_MAP_PROPERTY_FUNC_STRING(link_host_info_read, mysql_get_host_info, MYSQLI_GET_MYSQL());
-MYSQLI_MAP_PROPERTY_FUNC_STRING(link_info_read, mysql_info, MYSQLI_GET_MYSQL());
-MYSQLI_MAP_PROPERTY_FUNC_LONG(link_insert_id_read, mysql_insert_id, MYSQLI_GET_MYSQL(), my_ulonglong);
-MYSQLI_MAP_PROPERTY_FUNC_LONG(link_protocol_version_read, mysql_get_proto_info, MYSQLI_GET_MYSQL(), ulong);
-MYSQLI_MAP_PROPERTY_FUNC_STRING(link_server_info_read, mysql_get_server_info, MYSQLI_GET_MYSQL());
-MYSQLI_MAP_PROPERTY_FUNC_LONG(link_server_version_read, mysql_get_server_version, MYSQLI_GET_MYSQL(), ulong);
-MYSQLI_MAP_PROPERTY_FUNC_STRING(link_sqlstate_read, mysql_sqlstate, MYSQLI_GET_MYSQL());
-MYSQLI_MAP_PROPERTY_FUNC_LONG(link_thread_id_read, mysql_thread_id, MYSQLI_GET_MYSQL(), ulong);
-MYSQLI_MAP_PROPERTY_FUNC_LONG(link_warning_count_read, mysql_warning_count, MYSQLI_GET_MYSQL(), ulong);
-/* result properties */
-
-/* {{{ property result_type_read */
-int result_type_read(mysqli_object *obj, zval **retval TSRMLS_DC)
-{
- MYSQL_RES *p = (MYSQL_RES *)((MYSQLI_RESOURCE *)(obj->ptr))->ptr;
-
- ALLOC_ZVAL(*retval);
- if (!p) {
- ZVAL_NULL(*retval);
- } else {
- ZVAL_LONG(*retval, (p->data) ? MYSQLI_STORE_RESULT : MYSQLI_USE_RESULT);
- }
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ property result_lengths_read */
-int result_lengths_read(mysqli_object *obj, zval **retval TSRMLS_DC)
-{
- MYSQL_RES *p = (MYSQL_RES *)((MYSQLI_RESOURCE *)(obj->ptr))->ptr;
-
- ALLOC_ZVAL(*retval);
- if (!p || !p->field_count) {
- ZVAL_NULL(*retval);
- } else {
- ulong i;
- zval *l;
-
- array_init(*retval);
-
- for (i=0; i < p->field_count; i++) {
- MAKE_STD_ZVAL(l);
- ZVAL_LONG(l, p->lengths[i]);
- add_index_zval(*retval, i, l);
- }
- }
- return SUCCESS;
-}
-/* }}} */
-
-
-MYSQLI_MAP_PROPERTY_FUNC_LONG(result_current_field_read, mysql_field_tell, MYSQLI_GET_RESULT(), ulong);
-MYSQLI_MAP_PROPERTY_FUNC_LONG(result_field_count_read, mysql_num_fields, MYSQLI_GET_RESULT(), ulong);
-MYSQLI_MAP_PROPERTY_FUNC_LONG(result_num_rows_read, mysql_num_rows, MYSQLI_GET_RESULT(), my_ulonglong);
-
-/* statement properties */
-MYSQLI_MAP_PROPERTY_FUNC_LONG(stmt_affected_rows_read, mysql_stmt_affected_rows, MYSQLI_GET_STMT(), my_ulonglong);
-MYSQLI_MAP_PROPERTY_FUNC_LONG(stmt_insert_id_read, mysql_stmt_insert_id, MYSQLI_GET_STMT(), my_ulonglong);
-MYSQLI_MAP_PROPERTY_FUNC_LONG(stmt_num_rows_read, mysql_stmt_num_rows, MYSQLI_GET_STMT(), my_ulonglong);
-MYSQLI_MAP_PROPERTY_FUNC_LONG(stmt_param_count_read, mysql_stmt_param_count, MYSQLI_GET_STMT(), ulong);
-MYSQLI_MAP_PROPERTY_FUNC_LONG(stmt_field_count_read, mysql_stmt_field_count, MYSQLI_GET_STMT(), ulong);
-MYSQLI_MAP_PROPERTY_FUNC_LONG(stmt_errno_read, mysql_stmt_errno, MYSQLI_GET_STMT(), ulong);
-MYSQLI_MAP_PROPERTY_FUNC_STRING(stmt_error_read, mysql_stmt_error, MYSQLI_GET_STMT());
-MYSQLI_MAP_PROPERTY_FUNC_STRING(stmt_sqlstate_read, mysql_stmt_sqlstate, MYSQLI_GET_STMT());
-
-mysqli_property_entry mysqli_link_property_entries[] = {
- {"affected_rows", link_affected_rows_read, NULL},
- {"client_info", link_client_info_read, NULL},
- {"client_version", link_client_version_read, NULL},
- {"test", link_test_read, NULL},
- {"connect_errno", link_connect_errno_read, NULL},
- {"connect_error", link_connect_error_read, NULL},
- {"errno", link_errno_read, NULL},
- {"error", link_error_read, NULL},
- {"field_count", link_field_count_read, NULL},
- {"host_info", link_host_info_read, NULL},
- {"info", link_info_read, NULL},
- {"insert_id", link_insert_id_read, NULL},
- {"server_info", link_server_info_read, NULL},
- {"server_version", link_server_version_read, NULL},
- {"sqlstate", link_sqlstate_read, NULL},
- {"protocol_version", link_protocol_version_read, NULL},
- {"thread_id", link_thread_id_read, NULL},
- {"warning_count", link_warning_count_read, NULL},
- {NULL, NULL, NULL}
-};
-
-mysqli_property_entry mysqli_result_property_entries[] = {
- {"current_field", result_current_field_read, NULL},
- {"field_count", result_field_count_read, NULL},
- {"lengths", result_lengths_read, NULL},
- {"num_rows", result_num_rows_read, NULL},
- {"type", result_type_read, NULL},
- {NULL, NULL, NULL}
-};
-
-mysqli_property_entry mysqli_stmt_property_entries[] = {
- {"affected_rows", stmt_affected_rows_read, NULL},
- {"insert_id", stmt_insert_id_read, NULL},
- {"num_rows", stmt_num_rows_read, NULL},
- {"param_count", stmt_param_count_read, NULL},
-
-/* TODO: stmt->field_count doesn't work currently, remove comments until mysqli_stmt_field_count
- is implemented in client library
-*/
- {"field_count", stmt_field_count_read, NULL},
-
- {"errno", stmt_errno_read, NULL},
- {"error", stmt_error_read, NULL},
- {"sqlstate", stmt_sqlstate_read, NULL},
- {NULL, NULL, NULL}
-};
-
-/*
- * 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/mysqli/mysqli_repl.c b/ext/mysqli/mysqli_repl.c
deleted file mode 100644
index 9ac0ad0c91..0000000000
--- a/ext/mysqli/mysqli_repl.c
+++ /dev/null
@@ -1,221 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Georg Richter <georg@php.net> |
- +----------------------------------------------------------------------+
-
- $Id$
-*/
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <signal.h>
-
-#include "php.h"
-#include "php_ini.h"
-#include "ext/standard/info.h"
-#include "php_mysqli.h"
-
-/* {{{ proto void mysqli_disable_reads_from_master(object link)
-*/
-PHP_FUNCTION(mysqli_disable_reads_from_master)
-{
- MYSQL *mysql;
- zval *mysql_link;
-
- if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &mysql_link, mysqli_link_class_entry) == FAILURE) {
- return;
- }
- MYSQLI_FETCH_RESOURCE(mysql, MYSQL *, &mysql_link, "mysqli_link");
- mysql_disable_reads_from_master(mysql);
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto void mysqli_disable_rpl_parse(object link)
-*/
-PHP_FUNCTION(mysqli_disable_rpl_parse)
-{
- MYSQL *mysql;
- zval *mysql_link;
-
- if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &mysql_link, mysqli_link_class_entry) == FAILURE) {
- return;
- }
- MYSQLI_FETCH_RESOURCE(mysql, MYSQL *, &mysql_link, "mysqli_link");
- mysql_disable_rpl_parse(mysql);
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto void mysqli_enable_reads_from_master(object link)
-*/
-PHP_FUNCTION(mysqli_enable_reads_from_master)
-{
- MYSQL *mysql;
- zval *mysql_link;
-
- if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &mysql_link, mysqli_link_class_entry) == FAILURE) {
- return;
- }
- MYSQLI_FETCH_RESOURCE(mysql, MYSQL *, &mysql_link, "mysqli_link");
-
- mysql_enable_reads_from_master(mysql);
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto void mysqli_enable_rpl_parse(object link)
-*/
-PHP_FUNCTION(mysqli_enable_rpl_parse)
-{
- MYSQL *mysql;
- zval *mysql_link;
-
- if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &mysql_link, mysqli_link_class_entry) == FAILURE) {
- return;
- }
- MYSQLI_FETCH_RESOURCE(mysql, MYSQL *, &mysql_link, "mysqli_link");
-
- mysql_enable_rpl_parse(mysql);
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto bool mysqli_master_query(object link, string query)
- Enforce execution of a query on the master in a master/slave setup */
-PHP_FUNCTION(mysqli_master_query) {
- MYSQL *mysql;
- zval *mysql_link;
- char *query = NULL;
- unsigned int query_len;
-
- if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Os", &mysql_link, mysqli_link_class_entry, &query, &query_len) == FAILURE) {
- return;
- }
- MYSQLI_FETCH_RESOURCE(mysql, MYSQL *, &mysql_link, "mysqli_link");
-
- if (mysql_master_query(mysql, query, query_len)) {
- RETURN_FALSE;
- }
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto int mysqli_rpl_parse_enabled(object link)
-*/
-PHP_FUNCTION(mysqli_rpl_parse_enabled)
-{
- MYSQL *mysql;
- zval *mysql_link;
-
- if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &mysql_link, mysqli_link_class_entry) == FAILURE) {
- return;
- }
- MYSQLI_FETCH_RESOURCE(mysql, MYSQL *, &mysql_link, "mysqli_link");
-
- RETURN_LONG(mysql_rpl_parse_enabled(mysql));
-}
-/* }}} */
-
-/* {{{ proto bool mysqli_rpl_probe(object link)
-*/
-PHP_FUNCTION(mysqli_rpl_probe)
-{
- MYSQL *mysql;
- zval *mysql_link;
-
- if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &mysql_link, mysqli_link_class_entry) == FAILURE) {
- return;
- }
- MYSQLI_FETCH_RESOURCE(mysql, MYSQL *, &mysql_link, "mysqli_link");
-
-
- if (mysql_rpl_probe(mysql)) {
- RETURN_FALSE;
- }
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto int mysqli_rpl_query_type(string query)
-*/
-PHP_FUNCTION(mysqli_rpl_query_type)
-{
- MYSQL *mysql;
- zval *mysql_link;
- char *query;
- int query_len;
-
- if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Os", &mysql_link, mysqli_link_class_entry, &query, &query_len) == FAILURE) {
- return;
- }
- MYSQLI_FETCH_RESOURCE(mysql, MYSQL *, &mysql_link, "mysqli_link");
-
- RETURN_LONG(mysql_rpl_query_type(query, query_len));
-}
-/* }}} */
-
-/* {{{ proto bool mysqli_send_query(object link, string query)
-*/
-PHP_FUNCTION(mysqli_send_query)
-{
- MYSQL *mysql;
- zval *mysql_link;
- char *query = NULL;
- unsigned int query_len;
-
- if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Os", &mysql_link, mysqli_link_class_entry, &query, &query_len) == FAILURE) {
- return;
- }
- MYSQLI_FETCH_RESOURCE(mysql, MYSQL *, &mysql_link, "mysqli_link");
-
- if (mysql_send_query(mysql, query, query_len)) {
- RETURN_FALSE;
- }
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto bool mysqli_slave_query(object link, string query)
- Enforce execution of a query on a slave in a master/slave setup */
-PHP_FUNCTION(mysqli_slave_query)
-{
- MYSQL *mysql;
- zval *mysql_link;
- char *query = NULL;
- unsigned int query_len;
-
- if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Os", &mysql_link, mysqli_link_class_entry, &query, &query_len) == FAILURE) {
- return;
- }
- MYSQLI_FETCH_RESOURCE(mysql, MYSQL *, &mysql_link, "mysqli_link");
-
- if (mysql_slave_query(mysql, query, query_len)) {
- RETURN_FALSE;
- }
- RETURN_TRUE;
-}
-/* }}} */
-
-/*
- * 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/mysqli/mysqli_report.c b/ext/mysqli/mysqli_report.c
deleted file mode 100644
index a21d21a9f0..0000000000
--- a/ext/mysqli/mysqli_report.c
+++ /dev/null
@@ -1,75 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Georg Richter <georg@php.net> |
- +----------------------------------------------------------------------+
-
- $Id$
-*/
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "php.h"
-#include "php_ini.h"
-#include "ext/standard/info.h"
-#include "php_mysqli.h"
-
-/* {{{ bool mysqli_report(int flags)
- sets report level */
-PHP_FUNCTION(mysqli_report)
-{
- long flags;
-
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &flags) == FAILURE) {
- return;
- }
-
- MyG(report_mode) = flags;
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ void php_mysqli_report_error(char *sqlstate, int errorno, char *error) */
-void php_mysqli_report_error(char *sqlstate, int errorno, char *error TSRMLS_DC) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Error (%s/%d): %s", sqlstate, errorno, error);
-}
-/* }}} */
-
-/* {{{ void php_mysqli_report_index() */
-void php_mysqli_report_index(char *query, unsigned int status TSRMLS_DC) {
- char index[15];
-
- if (status & SERVER_QUERY_NO_GOOD_INDEX_USED) {
- strcpy(index, "Bad index");
- } else if (status & SERVER_QUERY_NO_INDEX_USED) {
- strcpy(index, "No index");
- } else {
- return;
- }
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s used in query/prepared statement %s", index, query);
-}
-/* }}} */
-
-/*
- * 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/mysqli/mysqli_report.h b/ext/mysqli/mysqli_report.h
deleted file mode 100644
index a8d63e5e87..0000000000
--- a/ext/mysqli/mysqli_report.h
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Georg Richter <georg@php.net> |
- +----------------------------------------------------------------------+
-
- $Id$
-*/
-
-#ifndef __HAVE_MYSQLI_PROFILER_H__
-#define __HAVE_MYSQLI_PROFILER_H__
-
-#ifdef PHP_WIN32
-#include <process.h>
-#include <direct.h>
-#include "win32/time.h"
-#else
-#include <sys/socket.h>
-#include <netinet/in.h>
-#include <arpa/inet.h>
-#include <netdb.h>
-#include <sys/time.h>
-#endif
-
-typedef struct {
- struct timeval starttime,
- endtime; /* execution time */
-} PR_TIME_INFO;
-
-
-#define MYSQLI_PR_REPORT_STDERR 1
-#define MYSQLI_PR_REPORT_PORT 2
-
-
-
-/*** PROFILER MACROS ***/
-#define MYSQLI_PROFILER_STARTTIME(ptr) if (MyG(profiler.mode)) gettimeofday(&ptr.starttime, NULL)
-#define MYSQLI_PROFILER_ENDTIME(ptr) if (MyG(profiler.mode)) gettimeofday(&ptr.endtime, NULL)
-#define MYSQLI_PROFILER_REPORT(_type, _time, ptr) if (MyG(profiler.mode)) php_mysqli_profiler_report(_type, _time, (void *)ptr)
-
-
-
-#endif
diff --git a/ext/mysqli/package.xml b/ext/mysqli/package.xml
deleted file mode 100644
index 1487256d27..0000000000
--- a/ext/mysqli/package.xml
+++ /dev/null
@@ -1,118 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1" ?>
-<!DOCTYPE package SYSTEM "../pear/package.dtd">
-<package>
- <name>mysqli</name>
- <summary>MySQLi - new MySQL interface for PHP 5 and MySQL 4.1+</summary>
- <maintainers>
- <maintainer>
- <user>georg</user>
- <name>Georg Richter</name>
- <email>georg@php.net</email>
- <role>lead</role>
- </maintainer>
- <maintainer>
- <user>zak</user>
- <name>Zak Greant</name>
- <email>zak@php.net</email>
- <role>lead</role>
- </maintainer>
- </maintainers>
- <description>
-MySQLi is a rewrite of the original MySQL extension ...
- </description>
- <license>PHP</license>
- <release>
- <state>beta</state>
- <version>5.0.0rc1</version>
- <date>2004-03-19</date>
- <notes>
-package.xml added to support intallation using pear installer
- </notes>
- <configureoptions>
- <configureoption name="with-mysqli" default="autodetect" prompt="path to mysql_config tool?"/>
- <configureoption name="enable-embedded-mysqli" default="no" prompt="embedd mysql server into PHP?"/>
- </configureoptions>
- <filelist>
- <file role="src" name="config.m4"/>
- <file role="src" name="config.w32"/>
- <file role="src" name="mysqli.dsp"/>
- <file role="src" name="mysqli.c"/>
- <file role="src" name="mysqli_api.c"/>
- <file role="src" name="mysqli_fe.c"/>
- <file role="src" name="mysqli_nonapi.c"/>
- <file role="src" name="mysqli_prop.c"/>
- <file role="src" name="mysqli_repl.c"/>
- <file role="src" name="mysqli_report.c"/>
- <file role="src" name="mysqli_report.h"/>
- <file role="src" name="php_mysqli.h"/>
- <file role="doc" name="CREDITS"/>
- <file role="test" name="tests/001.phpt"/>
- <file role="test" name="tests/002.phpt"/>
- <file role="test" name="tests/003.phpt"/>
- <file role="test" name="tests/004.phpt"/>
- <file role="test" name="tests/005.phpt"/>
- <file role="test" name="tests/006.phpt"/>
- <file role="test" name="tests/007.phpt"/>
- <file role="test" name="tests/008.phpt"/>
- <file role="test" name="tests/009.phpt"/>
- <file role="test" name="tests/010.phpt"/>
- <file role="test" name="tests/011.phpt"/>
- <file role="test" name="tests/012.phpt"/>
- <file role="test" name="tests/013.phpt"/>
- <file role="test" name="tests/014.phpt"/>
- <file role="test" name="tests/015.phpt"/>
- <file role="test" name="tests/016.phpt"/>
- <file role="test" name="tests/017.phpt"/>
- <file role="test" name="tests/018.phpt"/>
- <file role="test" name="tests/019.phpt"/>
- <file role="test" name="tests/020.phpt"/>
- <file role="test" name="tests/021.phpt"/>
- <file role="test" name="tests/022.phpt"/>
- <file role="test" name="tests/023.phpt"/>
- <file role="test" name="tests/024.phpt"/>
- <file role="test" name="tests/025.phpt"/>
- <file role="test" name="tests/026.phpt"/>
- <file role="test" name="tests/027.phpt"/>
- <file role="test" name="tests/028.phpt"/>
- <file role="test" name="tests/029.phpt"/>
- <file role="test" name="tests/030.phpt"/>
- <file role="test" name="tests/031.phpt"/>
- <file role="test" name="tests/032.phpt"/>
- <file role="test" name="tests/033.phpt"/>
- <file role="test" name="tests/034.phpt"/>
- <file role="test" name="tests/035.phpt"/>
- <file role="test" name="tests/036.phpt"/>
- <file role="test" name="tests/037.phpt"/>
- <file role="test" name="tests/038.phpt"/>
- <file role="test" name="tests/039.phpt"/>
- <file role="test" name="tests/040.phpt"/>
- <file role="test" name="tests/041.phpt"/>
- <file role="test" name="tests/042.phpt"/>
- <file role="test" name="tests/043.phpt"/>
- <file role="test" name="tests/044.phpt"/>
- <file role="test" name="tests/045.phpt"/>
- <file role="test" name="tests/046.phpt"/>
- <file role="test" name="tests/047.phpt"/>
- <file role="test" name="tests/048.phpt"/>
- <file role="test" name="tests/049.phpt"/>
- <file role="test" name="tests/050.phpt"/>
- <file role="test" name="tests/051.phpt"/>
- <file role="test" name="tests/052.phpt"/>
- <file role="test" name="tests/053.phpt"/>
- <file role="test" name="tests/054.phpt"/>
- <file role="test" name="tests/055.phpt"/>
- <file role="test" name="tests/056.phpt"/>
- <file role="test" name="tests/057.phpt"/>
- <file role="test" name="tests/058.phpt"/>
- <file role="test" name="tests/059.phpt"/>
- <file role="test" name="tests/060.phpt"/>
- <file role="test" name="tests/connect.inc"/>
- </filelist>
- <deps>
- <dep type="php" rel="ge" version="5" />
- </deps>
- </release>
-</package>
-<!--
-vim:et:ts=1:sw=1
--->
diff --git a/ext/mysqli/php_mysqli.h b/ext/mysqli/php_mysqli.h
deleted file mode 100644
index dfd4f6cd4c..0000000000
--- a/ext/mysqli/php_mysqli.h
+++ /dev/null
@@ -1,420 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Georg Richter <georg@php.net> |
- +----------------------------------------------------------------------+
-
- $Id$
-*/
-
-/* A little hack to prevent build break, when mysql is used together with
- * c-client, which also defines LIST.
- */
-#ifdef LIST
-#undef LIST
-#endif
-
-#include <mysql.h>
-#include <errmsg.h>
-
-#ifndef PHP_MYSQLI_H
-#define PHP_MYSQLI_H
-
-typedef struct {
- ulong buflen;
- char *val;
- ulong type;
-} VAR_BUFFER;
-
-typedef struct {
- unsigned int var_cnt;
- VAR_BUFFER *buf;
- zval **vars;
- char *is_null;
-} BIND_BUFFER;
-
-typedef struct {
- MYSQL_STMT *stmt;
- BIND_BUFFER param;
- BIND_BUFFER result;
- char *query;
-} MY_STMT;
-
-typedef struct {
- MYSQL *mysql;
- zval *li_read;
- php_stream *li_stream;
-} MY_MYSQL;
-
-typedef struct {
- int mode;
- int socket;
- FILE *fp;
-} PROFILER;
-
-typedef struct {
- void *ptr; /* resource: (mysql, result, stmt) */
- void *info; /* additional buffer */
-} MYSQLI_RESOURCE;
-
-typedef struct _mysqli_object {
- zend_object zo;
- void *ptr;
- char valid;
- HashTable *prop_handler;
-} mysqli_object; /* extends zend_object */
-
-typedef struct _mysqli_property_entry {
- char *pname;
- int (*r_func)(mysqli_object *obj, zval **retval TSRMLS_DC);
- int (*w_func)(mysqli_object *obj, zval **retval TSRMLS_DC);
-} mysqli_property_entry;
-
-typedef struct {
- char error_msg[LOCAL_INFILE_ERROR_LEN];
- void *userdata;
-} mysqli_local_infile;
-
-#define phpext_mysqli_ptr &mysqli_module_entry
-
-#ifdef PHP_WIN32
-#define PHP_MYSQLI_API __declspec(dllexport)
-#else
-#define PHP_MYSQLI_API
-#endif
-
-#ifdef ZTS
-#include "TSRM.h"
-#endif
-
-#define PHP_MYSQLI_EXPORT(__type) PHP_MYSQLI_API __type
-
-extern zend_module_entry mysqli_module_entry;
-extern function_entry mysqli_functions[];
-extern function_entry mysqli_link_methods[];
-extern function_entry mysqli_stmt_methods[];
-extern function_entry mysqli_result_methods[];
-extern mysqli_property_entry mysqli_link_property_entries[];
-extern mysqli_property_entry mysqli_result_property_entries[];
-extern mysqli_property_entry mysqli_stmt_property_entries[];
-
-extern void php_mysqli_fetch_into_hash(INTERNAL_FUNCTION_PARAMETERS, int override_flag, int into_object);
-extern void php_clear_stmt_bind(MY_STMT *stmt);
-void php_clear_mysql(MY_MYSQL *);
-extern void php_free_stmt_bind_buffer(BIND_BUFFER bbuf, int type);
-extern void php_mysqli_report_error(char *sqlstate, int errorno, char *error TSRMLS_DC);
-extern void php_mysqli_report_index(char *query, unsigned int status TSRMLS_DC);
-extern int php_local_infile_init(void **, const char *, void *);
-extern int php_local_infile_read(void *, char *, uint);
-extern void php_local_infile_end(void *);
-extern int php_local_infile_error(void *, char *, uint);
-extern void php_set_local_infile_handler_default(MY_MYSQL *);
-
-zend_class_entry *mysqli_link_class_entry;
-zend_class_entry *mysqli_stmt_class_entry;
-zend_class_entry *mysqli_result_class_entry;
-
-zend_class_entry _mysqli_link_class_entry;
-zend_class_entry _mysqli_stmt_class_entry;
-zend_class_entry _mysqli_result_class_entry;
-
-PHP_MYSQLI_EXPORT(zend_object_value) mysqli_objects_new(zend_class_entry * TSRMLS_DC);
-
-#define MYSQLI_DISABLE_MQ if (MyG(multi_query)) { \
- mysql_set_server_option(mysql->mysql, MYSQL_OPTION_MULTI_STATEMENTS_OFF); \
- MyG(multi_query) = 0; \
-}
-
-#define MYSQLI_ENABLE_MQ if (!MyG(multi_query)) { \
- mysql_set_server_option(mysql->mysql, MYSQL_OPTION_MULTI_STATEMENTS_ON); \
- MyG(multi_query) = 1; \
-}
-
-#define REGISTER_MYSQLI_CLASS_ENTRY(name, mysqli_entry, class_functions) { \
- INIT_CLASS_ENTRY(_##mysqli_entry,name,class_functions); \
- _##mysqli_entry.create_object = mysqli_objects_new; \
- mysqli_entry = zend_register_internal_class(&_##mysqli_entry TSRMLS_CC); \
-} \
-
-#define MYSQLI_REGISTER_RESOURCE_EX(__ptr, __zval, __ce) \
- ((mysqli_object *) zend_object_store_get_object(__zval TSRMLS_CC))->ptr = __ptr; \
- ((mysqli_object *) zend_object_store_get_object(__zval TSRMLS_CC))->valid = 1;
-
-#define MYSQLI_RETURN_RESOURCE(__ptr, __ce) \
- Z_TYPE_P(return_value) = IS_OBJECT; \
- (return_value)->value.obj = mysqli_objects_new(__ce TSRMLS_CC); \
- MYSQLI_REGISTER_RESOURCE_EX(__ptr, return_value, __ce)
-
-#define MYSQLI_REGISTER_RESOURCE(__ptr, __ce) \
-{\
- zval *object = getThis();\
- if (!object) {\
- object = return_value;\
- Z_TYPE_P(object) = IS_OBJECT;\
- (object)->value.obj = mysqli_objects_new(__ce TSRMLS_CC);\
- }\
- MYSQLI_REGISTER_RESOURCE_EX(__ptr, object, __ce)\
-}
-
-#define MYSQLI_FETCH_RESOURCE(__ptr, __type, __id, __name) \
-{ \
- MYSQLI_RESOURCE *my_res; \
- mysqli_object *intern = (mysqli_object *)zend_object_store_get_object(*(__id) TSRMLS_CC);\
- if (!(my_res = (MYSQLI_RESOURCE *)intern->ptr)) {\
- php_error(E_WARNING, "Couldn't fetch %s", intern->zo.ce->name);\
- RETURN_NULL();\
- }\
- if (!intern->valid) { \
- php_error(E_WARNING, "invalid resource %s", intern->zo.ce->name); \
- RETURN_NULL(); \
- } \
- __ptr = (__type)my_res->ptr; \
- if (!strcmp((char *)__name, "mysqli_stmt")) {\
- if (!((MY_STMT *)__ptr)->stmt->mysql) {\
- php_error(E_WARNING, "Statement isn't valid anymore");\
- RETURN_NULL();\
- }\
- }\
-}
-
-#define MYSQLI_CLEAR_RESOURCE(__id) \
-{ \
- mysqli_object *intern = (mysqli_object *)zend_object_store_get_object(*(__id) TSRMLS_CC);\
- efree(intern->ptr); \
- intern->ptr = NULL; \
-}
-
-#define MYSQLI_RETURN_LONG_LONG(__val) \
-{ \
- if ((__val) < LONG_MAX) { \
- RETURN_LONG((__val)); \
- } else { \
- char ret[40]; \
- sprintf(ret, "%llu", (__val)); \
- RETURN_STRING(ret,1); \
- } \
-}
-
-#define MYSQLI_ADD_PROPERTIES(a,b) \
-{ \
- int i = 0; \
- while (b[i].pname != NULL) { \
- mysqli_add_property(a, b[i].pname, (mysqli_read_t)b[i].r_func, NULL TSRMLS_CC); \
- i++; \
- }\
-}
-
-#if WIN32|WINNT
-#define SCLOSE(a) closesocket(a)
-#else
-#define SCLOSE(a) close(a)
-#endif
-
-#define MYSQLI_STORE_RESULT 0
-#define MYSQLI_USE_RESULT 1
-
-/* for mysqli_fetch_assoc */
-#define MYSQLI_ASSOC 1
-#define MYSQLI_NUM 2
-#define MYSQLI_BOTH 3
-
-/* for mysqli_bind_param */
-#define MYSQLI_BIND_INT 1
-#define MYSQLI_BIND_DOUBLE 2
-#define MYSQLI_BIND_STRING 3
-#define MYSQLI_BIND_SEND_DATA 4
-
-/* fetch types */
-#define FETCH_SIMPLE 1
-#define FETCH_RESULT 2
-
-/*** REPORT MODES ***/
-#define MYSQLI_REPORT_OFF 0
-#define MYSQLI_REPORT_INDEX 1
-#define MYSQLI_REPORT_ERROR 2
-#define MYSQLI_REPORT_CLOSE 4
-#define MYSQLI_REPORT_ALL 255
-
-#define MYSQLI_REPORT_MYSQL_ERROR(mysql) \
-if ((MyG(report_mode) & MYSQLI_REPORT_ERROR) && mysql->net.last_errno) { \
- php_mysqli_report_error(mysql->net.sqlstate, mysql->net.last_errno, mysql->net.last_error TSRMLS_CC); \
-}
-
-#define MYSQLI_REPORT_STMT_ERROR(stmt) \
-if ((MyG(report_mode) & MYSQLI_REPORT_ERROR) && stmt->last_errno) { \
- php_mysqli_report_error(stmt->sqlstate, stmt->last_errno, stmt->last_error TSRMLS_CC); \
-}
-
-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);
-PHP_MYSQLI_API void php_mysqli_set_error(long mysql_errno, char *mysql_err TSRMLS_DC);
-
-PHP_MINIT_FUNCTION(mysqli);
-PHP_MSHUTDOWN_FUNCTION(mysqli);
-PHP_RINIT_FUNCTION(mysqli);
-PHP_RSHUTDOWN_FUNCTION(mysqli);
-PHP_MINFO_FUNCTION(mysqli);
-
-PHP_FUNCTION(mysqli);
-PHP_FUNCTION(mysqli_affected_rows);
-PHP_FUNCTION(mysqli_autocommit);
-PHP_FUNCTION(mysqli_change_user);
-PHP_FUNCTION(mysqli_character_set_name);
-PHP_FUNCTION(mysqli_close);
-PHP_FUNCTION(mysqli_commit);
-PHP_FUNCTION(mysqli_connect);
-PHP_FUNCTION(mysqli_connect_errno);
-PHP_FUNCTION(mysqli_connect_error);
-PHP_FUNCTION(mysqli_data_seek);
-PHP_FUNCTION(mysqli_debug);
-PHP_FUNCTION(mysqli_disable_reads_from_master);
-PHP_FUNCTION(mysqli_disable_rpl_parse);
-PHP_FUNCTION(mysqli_dump_debug_info);
-#ifdef HAVE_EMBEDDED_MYSQLI
-PHP_FUNCTION(mysqli_embedded_connect);
-#endif
-PHP_FUNCTION(mysqli_enable_reads_from_master);
-PHP_FUNCTION(mysqli_enable_rpl_parse);
-PHP_FUNCTION(mysqli_errno);
-PHP_FUNCTION(mysqli_error);
-PHP_FUNCTION(mysqli_fetch_array);
-PHP_FUNCTION(mysqli_fetch_assoc);
-PHP_FUNCTION(mysqli_fetch_object);
-PHP_FUNCTION(mysqli_fetch_field);
-PHP_FUNCTION(mysqli_fetch_fields);
-PHP_FUNCTION(mysqli_fetch_field_direct);
-PHP_FUNCTION(mysqli_fetch_lengths);
-PHP_FUNCTION(mysqli_fetch_row);
-PHP_FUNCTION(mysqli_field_count);
-PHP_FUNCTION(mysqli_field_seek);
-PHP_FUNCTION(mysqli_field_tell);
-PHP_FUNCTION(mysqli_free_result);
-PHP_FUNCTION(mysqli_get_client_info);
-PHP_FUNCTION(mysqli_get_client_version);
-PHP_FUNCTION(mysqli_get_host_info);
-PHP_FUNCTION(mysqli_get_proto_info);
-PHP_FUNCTION(mysqli_get_server_info);
-PHP_FUNCTION(mysqli_get_server_version);
-PHP_FUNCTION(mysqli_info);
-PHP_FUNCTION(mysqli_insert_id);
-PHP_FUNCTION(mysqli_init);
-PHP_FUNCTION(mysqli_kill);
-PHP_FUNCTION(mysqli_set_local_infile_default);
-PHP_FUNCTION(mysqli_set_local_infile_handler);
-PHP_FUNCTION(mysqli_master_query);
-PHP_FUNCTION(mysqli_more_results);
-PHP_FUNCTION(mysqli_multi_query);
-PHP_FUNCTION(mysqli_next_result);
-PHP_FUNCTION(mysqli_num_fields);
-PHP_FUNCTION(mysqli_num_rows);
-PHP_FUNCTION(mysqli_options);
-PHP_FUNCTION(mysqli_ping);
-PHP_FUNCTION(mysqli_prepare);
-PHP_FUNCTION(mysqli_query);
-PHP_FUNCTION(mysqli_stmt_result_metadata);
-PHP_FUNCTION(mysqli_report);
-PHP_FUNCTION(mysqli_read_query_result);
-PHP_FUNCTION(mysqli_real_connect);
-PHP_FUNCTION(mysqli_real_query);
-PHP_FUNCTION(mysqli_real_escape_string);
-PHP_FUNCTION(mysqli_rollback);
-PHP_FUNCTION(mysqli_row_seek);
-PHP_FUNCTION(mysqli_rpl_parse_enabled);
-PHP_FUNCTION(mysqli_rpl_probe);
-PHP_FUNCTION(mysqli_rpl_query_type);
-PHP_FUNCTION(mysqli_select_db);
-PHP_FUNCTION(mysqli_stmt_attr_get);
-PHP_FUNCTION(mysqli_stmt_attr_set);
-PHP_FUNCTION(mysqli_stmt_bind_param);
-PHP_FUNCTION(mysqli_stmt_bind_result);
-PHP_FUNCTION(mysqli_stmt_execute);
-PHP_FUNCTION(mysqli_stmt_field_count);
-PHP_FUNCTION(mysqli_stmt_init);
-PHP_FUNCTION(mysqli_stmt_prepare);
-PHP_FUNCTION(mysqli_stmt_fetch);
-PHP_FUNCTION(mysqli_stmt_param_count);
-PHP_FUNCTION(mysqli_stmt_send_long_data);
-PHP_FUNCTION(mysqli_send_query);
-#ifdef HAVE_EMBEDDED_MYSQLI
-PHP_FUNCTION(mysqli_server_init);
-PHP_FUNCTION(mysqli_server_end);
-#endif
-PHP_FUNCTION(mysqli_slave_query);
-PHP_FUNCTION(mysqli_sqlstate);
-PHP_FUNCTION(mysqli_ssl_set);
-PHP_FUNCTION(mysqli_stat);
-PHP_FUNCTION(mysqli_stmt_affected_rows);
-PHP_FUNCTION(mysqli_stmt_close);
-PHP_FUNCTION(mysqli_stmt_data_seek);
-PHP_FUNCTION(mysqli_stmt_errno);
-PHP_FUNCTION(mysqli_stmt_error);
-PHP_FUNCTION(mysqli_stmt_free_result);
-PHP_FUNCTION(mysqli_stmt_reset);
-PHP_FUNCTION(mysqli_stmt_insert_id);
-PHP_FUNCTION(mysqli_stmt_num_rows);
-PHP_FUNCTION(mysqli_stmt_sqlstate);
-PHP_FUNCTION(mysqli_stmt_store_result);
-PHP_FUNCTION(mysqli_store_result);
-PHP_FUNCTION(mysqli_thread_id);
-PHP_FUNCTION(mysqli_thread_safe);
-PHP_FUNCTION(mysqli_use_result);
-PHP_FUNCTION(mysqli_warning_count);
-
-ZEND_BEGIN_MODULE_GLOBALS(mysqli)
- long default_link;
- long num_links;
- long max_links;
- unsigned int default_port;
- char *default_host;
- char *default_user;
- char *default_socket;
- char *default_pw;
- int reconnect;
- long error_no;
- char *error_msg;
- int report_mode;
- HashTable *report_ht;
- unsigned int multi_query;
-#ifdef HAVE_EMBEDDED_MYSQLI
- unsigned int embedded;
-#endif
-ZEND_END_MODULE_GLOBALS(mysqli)
-
-
-#define MYSQLI_PROPERTY(a) extern int a(mysqli_object *obj, zval **retval TSRMLS_DC)
-
-MYSQLI_PROPERTY(my_prop_link_host);
-
-#ifdef ZTS
-#define MyG(v) TSRMG(mysqli_globals_id, zend_mysqli_globals *, v)
-#else
-#define MyG(v) (mysqli_globals.v)
-#endif
-
-#define my_estrdup(x) (x) ? estrdup(x) : NULL
-#define my_efree(x) if (x) efree(x)
-
-ZEND_EXTERN_MODULE_GLOBALS(mysqli)
-
-#endif /* PHP_MYSQLI.H */
-
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * indent-tabs-mode: t
- * End:
- */
diff --git a/ext/mysqli/tests/001.phpt b/ext/mysqli/tests/001.phpt
deleted file mode 100644
index 5e483aba8d..0000000000
--- a/ext/mysqli/tests/001.phpt
+++ /dev/null
@@ -1,55 +0,0 @@
---TEST--
-mysqli connect
---FILE--
-<?php
-
- $user = "root";
- $passwd = "";
- $dbname = "test";
- $test = "";
-
- /*** test mysqli_connect 127.0.0.1 ***/
- $link = mysqli_connect("127.0.0.1", $user, $passwd);
- $test .= ($link) ? "1" : "0";
- mysqli_close($link);
-
- /*** test mysqli_connect localhost ***/
- $link = mysqli_connect("localhost", $user, $passwd);
- $test .= ($link) ? "1" : "0";
- mysqli_close($link);
-
- /*** test mysqli_connect localhost:port ***/
- $link = mysqli_connect("localhost", $user, $passwd, "", 3306);
- $test .= ($link) ? "1" : "0";
- mysqli_close($link);
-
- /*** test mysqli_real_connect ***/
- $link = mysqli_init();
- $test.= (mysqli_real_connect($link, "localhost", $user, $passwd))
- ? "1" : "0";
- mysqli_close($link);
-
- /*** test mysqli_real_connect with db ***/
- $link = mysqli_init();
- $test .= (mysqli_real_connect($link, "localhost", $user, $passwd, $dbname))
- ? "1" : "0";
- mysqli_close($link);
-
- /*** test mysqli_real_connect with port ***/
- $link = mysqli_init();
- $test .= (mysqli_real_connect($link, "localhost", $user, $passwd, $dbname, 3306))
- ? "1":"0";
- mysqli_close($link);
-
- /*** test mysqli_real_connect compressed ***/
- $link = mysqli_init();
- $test .= (mysqli_real_connect($link, "localhost", $user, $passwd, $dbname, 0, NULL, MYSQLI_CLIENT_COMPRESS))
- ? "1" : "0";
- mysqli_close($link);
-
- /* todo ssl connections */
-
- var_dump($test);
-?>
---EXPECT--
-string(7) "1111111"
diff --git a/ext/mysqli/tests/002.phpt b/ext/mysqli/tests/002.phpt
deleted file mode 100644
index 7925f84fa8..0000000000
--- a/ext/mysqli/tests/002.phpt
+++ /dev/null
@@ -1,60 +0,0 @@
---TEST--
-mysqli bind_result 1
---FILE--
-<?php
- include "connect.inc";
-
- /*** test mysqli_connect 127.0.0.1 ***/
- $link = mysqli_connect("localhost", $user, $passwd);
-
- mysqli_select_db($link, "test");
- $rc = mysqli_query($link,"DROP TABLE IF EXISTS test_fetch_null");
-
- $rc = mysqli_query($link,"CREATE TABLE test_fetch_null(col1 tinyint, col2 smallint,
- col3 int, col4 bigint,
- col5 float, col6 double,
- col7 date, col8 time,
- col9 varbinary(10),
- col10 varchar(50),
- col11 char(20))");
-
- $rc = mysqli_query($link,"INSERT INTO test_fetch_null(col1,col10, col11) VALUES(1,'foo1', 1000),(2,'foo2', 88),(3,'foo3', 389789)");
-
- $stmt = mysqli_prepare($link, "SELECT col1, col2, col3, col4, col5, col6, col7, col8, col9, col10, col11 from test_fetch_null");
- mysqli_bind_result($stmt, $c1, $c2, $c3, $c4, $c5, $c6, $c7, $c8, $c9, $c10, $c11);
- mysqli_execute($stmt);
-
- mysqli_fetch($stmt);
-
- $test = array($c1,$c2,$c3,$c4,$c5,$c6,$c7,$c8,$c9,$c10,$c11);
-
- var_dump($test);
-
- mysqli_stmt_close($stmt);
- mysqli_close($link);
-?>
---EXPECT--
-array(11) {
- [0]=>
- int(1)
- [1]=>
- NULL
- [2]=>
- NULL
- [3]=>
- NULL
- [4]=>
- NULL
- [5]=>
- NULL
- [6]=>
- NULL
- [7]=>
- NULL
- [8]=>
- NULL
- [9]=>
- string(4) "foo1"
- [10]=>
- string(4) "1000"
-}
diff --git a/ext/mysqli/tests/003.phpt b/ext/mysqli/tests/003.phpt
deleted file mode 100644
index 5535e9fb40..0000000000
--- a/ext/mysqli/tests/003.phpt
+++ /dev/null
@@ -1,56 +0,0 @@
---TEST--
-mysqli connect
---FILE--
-<?php
- include "connect.inc";
-
- /*** test mysqli_connect 127.0.0.1 ***/
- $link = mysqli_connect("localhost", $user, $passwd);
-
- mysqli_select_db($link, "test");
-
- mysqli_query($link,"DROP TABLE IF EXISTS test_bind_result");
- mysqli_query($link,"CREATE TABLE test_bind_result(c1 date, c2 time,
- c3 timestamp(14),
- c4 year,
- c5 datetime,
- c6 timestamp(4),
- c7 timestamp(6))");
-
- mysqli_query($link,"INSERT INTO test_bind_result VALUES('2002-01-02',
- '12:49:00',
- '2002-01-02 17:46:59',
- 2010,
- '2010-07-10',
- '2020','1999-12-29')");
-
-
- $stmt = mysqli_prepare($link, "SELECT * FROM test_bind_result");
- mysqli_bind_result($stmt, $c1, $c2, $c3, $c4, $c5, $c6, $c7);
- mysqli_execute($stmt);
- mysqli_fetch($stmt);
-
- $test = array($c1,$c2,$c3,$c4,$c5,$c6,$c7);
-
- var_dump($test);
-
- mysqli_stmt_close($stmt);
- mysqli_close($link);
-?>
---EXPECT--
-array(7) {
- [0]=>
- string(10) "2002-01-02"
- [1]=>
- string(8) "12:49:00"
- [2]=>
- string(19) "2002-01-02 17:46:59"
- [3]=>
- int(2010)
- [4]=>
- string(19) "2010-07-10 00:00:00"
- [5]=>
- string(0) ""
- [6]=>
- string(19) "1999-12-29 00:00:00"
-}
diff --git a/ext/mysqli/tests/004.phpt b/ext/mysqli/tests/004.phpt
deleted file mode 100644
index 179c4b64cf..0000000000
--- a/ext/mysqli/tests/004.phpt
+++ /dev/null
@@ -1,35 +0,0 @@
---TEST--
-mysqli fetch char/text
---FILE--
-<?php
- include ("connect.inc");
-
- /*** test mysqli_connect 127.0.0.1 ***/
- $link = mysqli_connect("localhost", $user, $passwd);
-
- mysqli_select_db($link, "test");
-
- mysqli_query($link,"DROP TABLE IF EXISTS test_bind_fetch");
- mysqli_query($link,"CREATE TABLE test_bind_fetch(c1 char(10), c2 text)");
-
- mysqli_query($link, "INSERT INTO test_bind_fetch VALUES ('1234567890', 'this is a test')");
-
- $stmt = mysqli_prepare($link, "SELECT * FROM test_bind_fetch");
- mysqli_bind_result($stmt, $c1, $c2);
- mysqli_execute($stmt);
- mysqli_fetch($stmt);
-
- $test = array($c1,$c2);
-
- var_dump($test);
-
- mysqli_stmt_close($stmt);
- mysqli_close($link);
-?>
---EXPECT--
-array(2) {
- [0]=>
- string(10) "1234567890"
- [1]=>
- string(14) "this is a test"
-}
diff --git a/ext/mysqli/tests/005.phpt b/ext/mysqli/tests/005.phpt
deleted file mode 100644
index 982a3950f2..0000000000
--- a/ext/mysqli/tests/005.phpt
+++ /dev/null
@@ -1,38 +0,0 @@
---TEST--
-mysqli fetch char/text long
---FILE--
-<?php
- include "connect.inc";
-
- /*** test mysqli_connect 127.0.0.1 ***/
- $link = mysqli_connect("localhost", $user, $passwd);
-
- mysqli_select_db($link, "test");
-
- mysqli_query($link,"DROP TABLE IF EXISTS test_bind_fetch");
- mysqli_query($link,"CREATE TABLE test_bind_fetch(c1 char(10), c2 text)");
-
- $a = str_repeat("A1", 32000);
-
- mysqli_query($link, "INSERT INTO test_bind_fetch VALUES ('1234567890', '$a')");
-
- $stmt = mysqli_prepare($link, "SELECT * FROM test_bind_fetch");
- mysqli_bind_result($stmt, $c1, $c2);
- mysqli_execute($stmt);
- mysqli_fetch($stmt);
-
- $test[] = $c1;
- $test[] = ($a == $c2) ? "32K String ok" : "32K String failed";
-
- var_dump($test);
-
- mysqli_stmt_close($stmt);
- mysqli_close($link);
-?>
---EXPECT--
-array(2) {
- [0]=>
- string(10) "1234567890"
- [1]=>
- string(13) "32K String ok"
-}
diff --git a/ext/mysqli/tests/006.phpt b/ext/mysqli/tests/006.phpt
deleted file mode 100644
index d697e1e82f..0000000000
--- a/ext/mysqli/tests/006.phpt
+++ /dev/null
@@ -1,51 +0,0 @@
---TEST--
-mysqli fetch long values
---FILE--
-<?php
- include "connect.inc";
-
- /*** test mysqli_connect 127.0.0.1 ***/
- $link = mysqli_connect("localhost", $user, $passwd);
-
- mysqli_select_db($link, "test");
-
- mysqli_query($link,"DROP TABLE IF EXISTS test_bind_fetch");
- mysqli_query($link,"CREATE TABLE test_bind_fetch(c1 int unsigned,
- c2 int unsigned,
- c3 int,
- c4 int,
- c5 int,
- c6 int unsigned,
- c7 int)");
-
- mysqli_query($link, "INSERT INTO test_bind_fetch VALUES (-23,35999,NULL,-500,-9999999,-0,0)");
-
- $stmt = mysqli_prepare($link, "SELECT * FROM test_bind_fetch");
- mysqli_bind_result($stmt, $c1, $c2, $c3, $c4, $c5, $c6, $c7);
- mysqli_execute($stmt);
- mysqli_fetch($stmt);
-
- $test = array($c1,$c2,$c3,$c4,$c5,$c6,$c7);
-
- var_dump($test);
-
- mysqli_stmt_close($stmt);
- mysqli_close($link);
-?>
---EXPECT--
-array(7) {
- [0]=>
- int(0)
- [1]=>
- int(35999)
- [2]=>
- NULL
- [3]=>
- int(-500)
- [4]=>
- int(-9999999)
- [5]=>
- int(0)
- [6]=>
- int(0)
-}
diff --git a/ext/mysqli/tests/007.phpt b/ext/mysqli/tests/007.phpt
deleted file mode 100644
index 2470c20e7e..0000000000
--- a/ext/mysqli/tests/007.phpt
+++ /dev/null
@@ -1,51 +0,0 @@
---TEST--
-mysqli fetch short values
---FILE--
-<?php
- include "connect.inc";
-
- /*** test mysqli_connect 127.0.0.1 ***/
- $link = mysqli_connect("localhost", $user, $passwd);
-
- mysqli_select_db($link, "test");
-
- mysqli_query($link,"DROP TABLE IF EXISTS test_bind_fetch");
- mysqli_query($link,"CREATE TABLE test_bind_fetch(c1 smallint unsigned,
- c2 smallint unsigned,
- c3 smallint,
- c4 smallint,
- c5 smallint,
- c6 smallint unsigned,
- c7 smallint)");
-
- mysqli_query($link, "INSERT INTO test_bind_fetch VALUES (-23,35999,NULL,-500,-9999999,+30,0)");
-
- $stmt = mysqli_prepare($link, "SELECT * FROM test_bind_fetch");
- mysqli_bind_result($stmt, $c1, $c2, $c3, $c4, $c5, $c6, $c7);
- mysqli_execute($stmt);
- mysqli_fetch($stmt);
-
- $test = array($c1,$c2,$c3,$c4,$c5,$c6,$c7);
-
- var_dump($test);
-
- mysqli_stmt_close($stmt);
- mysqli_close($link);
-?>
---EXPECT--
-array(7) {
- [0]=>
- int(0)
- [1]=>
- int(35999)
- [2]=>
- NULL
- [3]=>
- int(-500)
- [4]=>
- int(-32768)
- [5]=>
- int(30)
- [6]=>
- int(0)
-}
diff --git a/ext/mysqli/tests/008.phpt b/ext/mysqli/tests/008.phpt
deleted file mode 100644
index c0ee735096..0000000000
--- a/ext/mysqli/tests/008.phpt
+++ /dev/null
@@ -1,51 +0,0 @@
---TEST--
-mysqli fetch tinyint values
---FILE--
-<?php
- include "connect.inc";
-
- /*** test mysqli_connect 127.0.0.1 ***/
- $link = mysqli_connect("localhost", $user, $passwd);
-
- mysqli_select_db($link, "test");
-
- mysqli_query($link,"DROP TABLE IF EXISTS test_bind_fetch");
- mysqli_query($link,"CREATE TABLE test_bind_fetch(c1 tinyint,
- c2 tinyint unsigned,
- c3 tinyint not NULL,
- c4 tinyint,
- c5 tinyint,
- c6 tinyint unsigned,
- c7 tinyint)");
-
- mysqli_query($link, "INSERT INTO test_bind_fetch VALUES (-23,300,0,-100,-127,+30,0)");
-
- $stmt = mysqli_prepare($link, "SELECT * FROM test_bind_fetch");
- mysqli_bind_result($stmt, $c1, $c2, $c3, $c4, $c5, $c6, $c7);
- mysqli_execute($stmt);
- mysqli_fetch($stmt);
-
- $test = array($c1,$c2,$c3,$c4,$c5,$c6,$c7);
-
- var_dump($test);
-
- mysqli_stmt_close($stmt);
- mysqli_close($link);
-?>
---EXPECT--
-array(7) {
- [0]=>
- int(-23)
- [1]=>
- int(255)
- [2]=>
- int(0)
- [3]=>
- int(-100)
- [4]=>
- int(-127)
- [5]=>
- int(30)
- [6]=>
- int(0)
-}
diff --git a/ext/mysqli/tests/009.phpt b/ext/mysqli/tests/009.phpt
deleted file mode 100644
index 042f837849..0000000000
--- a/ext/mysqli/tests/009.phpt
+++ /dev/null
@@ -1,51 +0,0 @@
---TEST--
-mysqli fetch bigint values
---FILE--
-<?php
- include "connect.inc";
-
- /*** test mysqli_connect 127.0.0.1 ***/
- $link = mysqli_connect("localhost", $user, $passwd);
-
- mysqli_select_db($link, "test");
-
- mysqli_query($link,"DROP TABLE IF EXISTS test_bind_fetch");
- mysqli_query($link,"CREATE TABLE test_bind_fetch(c1 bigint default 5,
- c2 bigint,
- c3 bigint not NULL,
- c4 bigint unsigned,
- c5 bigint unsigned,
- c6 bigint unsigned,
- c7 bigint unsigned)");
-
- mysqli_query($link, "INSERT INTO test_bind_fetch (c2,c3,c4,c5,c6,c7) VALUES (-23,4.0,33333333333333,0,-333333333333,99.9)");
-
- $stmt = mysqli_prepare($link, "SELECT * FROM test_bind_fetch");
- mysqli_bind_result($stmt, $c1, $c2, $c3, $c4, $c5, $c6, $c7);
- mysqli_execute($stmt);
- mysqli_fetch($stmt);
-
- $test = array($c1,$c2,$c3,$c4,$c5,$c6,$c7);
-
- var_dump($test);
-
- mysqli_stmt_close($stmt);
- mysqli_close($link);
-?>
---EXPECT--
-array(7) {
- [0]=>
- int(5)
- [1]=>
- int(-23)
- [2]=>
- int(4)
- [3]=>
- string(14) "33333333333333"
- [4]=>
- int(0)
- [5]=>
- string(13) "-333333333333"
- [6]=>
- int(100)
-}
diff --git a/ext/mysqli/tests/010.phpt b/ext/mysqli/tests/010.phpt
deleted file mode 100644
index 4584e0a91f..0000000000
--- a/ext/mysqli/tests/010.phpt
+++ /dev/null
@@ -1,56 +0,0 @@
---TEST--
-mysqli fetch float values
---INI--
-precision=12
---FILE--
-<?php
- include "connect.inc";
-
- /*** test mysqli_connect 127.0.0.1 ***/
- $link = mysqli_connect("localhost", $user, $passwd);
-
- mysqli_select_db($link, "test");
-
- mysqli_query($link,"DROP TABLE IF EXISTS test_bind_fetch");
-
- mysqli_query($link,"CREATE TABLE test_bind_fetch(c1 float(3),
- c2 float,
- c3 float unsigned,
- c4 float,
- c5 float,
- c6 float,
- c7 float(10) unsigned)");
-
-
- mysqli_query($link, "INSERT INTO test_bind_fetch (c1,c2,c3,c4,c5,c6,c7) VALUES (3.1415926535,-0.000001, -5, 999999999999,
- sin(0.6), 1.00000000000001, 888888888888888)");
-
- $stmt = mysqli_prepare($link, "SELECT * FROM test_bind_fetch");
- mysqli_bind_result($stmt, $c1, $c2, $c3, $c4, $c5, $c6, $c7);
- mysqli_execute($stmt);
- mysqli_fetch($stmt);
-
- $test = array($c1,$c2,$c3,$c4,$c5,$c6,$c7);
-
- var_dump($test);
-
- mysqli_stmt_close($stmt);
- mysqli_close($link);
-?>
---EXPECT--
-array(7) {
- [0]=>
- float(3.14159274101)
- [1]=>
- float(-9.99999997475E-7)
- [2]=>
- float(0)
- [3]=>
- float(999999995904)
- [4]=>
- float(0.564642488956)
- [5]=>
- float(1)
- [6]=>
- float(888888914608000)
-}
diff --git a/ext/mysqli/tests/011.phpt b/ext/mysqli/tests/011.phpt
deleted file mode 100644
index 987ec1d14a..0000000000
--- a/ext/mysqli/tests/011.phpt
+++ /dev/null
@@ -1,55 +0,0 @@
---TEST--
-mysqli fetch mixed values
---INI--
-precision=12
---FILE--
-<?php
- include "connect.inc";
-
- /*** test mysqli_connect 127.0.0.1 ***/
- $link = mysqli_connect("localhost", $user, $passwd);
-
- mysqli_select_db($link, "test");
-
- mysqli_query($link,"DROP TABLE IF EXISTS test_bind_result");
-
- mysqli_query($link,"CREATE TABLE test_bind_result(c1 tinyint, c2 smallint,
- c3 int, c4 bigint,
- c5 float, c6 double,
- c7 varbinary(10),
- c8 varchar(50))");
-
- mysqli_query($link,"INSERT INTO test_bind_result VALUES(19,2999,3999,4999999,
- 2345.6,5678.89563,
- 'foobar','mysql rulez')");
- $stmt = mysqli_prepare($link, "SELECT * FROM test_bind_result");
- mysqli_bind_result($stmt, $c1, $c2, $c3, $c4, $c5, $c6, $c7, $c8);
- mysqli_execute($stmt);
- mysqli_fetch($stmt);
-
- $test = array($c1,$c2,$c3,$c4,$c5,$c6,$c7,$c8);
-
- var_dump($test);
-
- mysqli_stmt_close($stmt);
- mysqli_close($link);
-?>
---EXPECT--
-array(8) {
- [0]=>
- int(19)
- [1]=>
- int(2999)
- [2]=>
- int(3999)
- [3]=>
- int(4999999)
- [4]=>
- float(2345.60009766)
- [5]=>
- float(5678.89563)
- [6]=>
- string(6) "foobar"
- [7]=>
- string(11) "mysql rulez"
-}
diff --git a/ext/mysqli/tests/012.phpt b/ext/mysqli/tests/012.phpt
deleted file mode 100644
index 9af509fefd..0000000000
--- a/ext/mysqli/tests/012.phpt
+++ /dev/null
@@ -1,56 +0,0 @@
---TEST--
-mysqli fetch mixed values 2
---INI--
-precision=12
---FILE--
-<?php
- include "connect.inc";
-
- /*** test mysqli_connect 127.0.0.1 ***/
- $link = mysqli_connect("localhost", $user, $passwd);
-
- mysqli_select_db($link, "test");
-
- mysqli_query($link,"DROP TABLE IF EXISTS test_bind_result");
-
- mysqli_query($link,"CREATE TABLE test_bind_result(c1 tinyint, c2 smallint,
- c3 int, c4 bigint,
- c5 float, c6 double,
- c7 varbinary(10),
- c8 varchar(10))");
-
- mysqli_query($link,"INSERT INTO test_bind_result VALUES(120,2999,3999,54,
- 2.6,58.89,
- '206','6.7')");
-
- $stmt = mysqli_prepare($link, "SELECT * FROM test_bind_result");
- mysqli_bind_result($stmt, $c1, $c2, $c3, $c4, $c5, $c6, $c7, $c8);
- mysqli_execute($stmt);
- mysqli_fetch($stmt);
-
- $test = array($c1,$c2,$c3,$c4,$c5,$c6,$c7,$c8);
-
- var_dump($test);
-
- mysqli_stmt_close($stmt);
- mysqli_close($link);
-?>
---EXPECT--
-array(8) {
- [0]=>
- int(120)
- [1]=>
- int(2999)
- [2]=>
- int(3999)
- [3]=>
- int(54)
- [4]=>
- float(2.59999990463)
- [5]=>
- float(58.89)
- [6]=>
- string(3) "206"
- [7]=>
- string(3) "6.7"
-}
diff --git a/ext/mysqli/tests/013.phpt b/ext/mysqli/tests/013.phpt
deleted file mode 100644
index b095419199..0000000000
--- a/ext/mysqli/tests/013.phpt
+++ /dev/null
@@ -1,45 +0,0 @@
---TEST--
-mysqli fetch mixed / mysql_query
---FILE--
-<?php
- include "connect.inc";
-
- /*** test mysqli_connect 127.0.0.1 ***/
- $link = mysqli_connect("localhost", $user, $passwd);
-
- mysqli_select_db($link, "test");
-
- mysqli_query($link,"DROP TABLE IF EXISTS test_bind_result");
-
- mysqli_query($link,"CREATE TABLE test_bind_result(c1 tinyint, c2 smallint,
- c3 int, c4 bigint,
- c5 decimal(4,2), c6 double,
- c7 varbinary(10),
- c8 varchar(10))");
-
- mysqli_query($link,"INSERT INTO test_bind_result VALUES(120,2999,3999,54,
- 2.6,58.89,
- '206','6.7')");
- $stmt = mysqli_prepare($link, "SELECT * FROM test_bind_result");
-
- $c = array(0,0,0,0,0,0,0,0);
- mysqli_bind_result($stmt, $c[0], $c[1], $c[2], $c[3], $c[4], $c[5], $c[6], $c[7]);
- mysqli_execute($stmt);
- mysqli_fetch($stmt);
- mysqli_fetch($stmt);
- mysqli_stmt_close($stmt);
-
- $result = mysqli_query($link, "select * from test_bind_result");
- $d = mysqli_fetch_row($result);
- mysqli_free_result($result);
-
- $test = "";
- for ($i=0; $i < count($c); $i++)
- $test .= ($c[0] == $d[0]) ? "1" : "0";
-
- var_dump($test);
-
- mysqli_close($link);
-?>
---EXPECT--
-string(8) "11111111"
diff --git a/ext/mysqli/tests/014.phpt b/ext/mysqli/tests/014.phpt
deleted file mode 100644
index 8a72c42c7f..0000000000
--- a/ext/mysqli/tests/014.phpt
+++ /dev/null
@@ -1,66 +0,0 @@
---TEST--
-mysqli autocommit/commit/rollback
---SKIPIF--
-<?php
- include "connect.inc";
- $link = mysqli_connect("localhost", $user, $passwd);
- $result = mysqli_query($link, "SHOW VARIABLES LIKE 'have_innodb'");
- $row = mysqli_fetch_row($result);
- mysqli_free_result($result);
- mysqli_close($link);
-
- if ($row[1] == "DISABLED" || $row[1] == "NO") {
- printf ("skip innodb support is not installed or enabled.");
- }
-?>
---FILE--
-<?php
- include "connect.inc";
- $link = mysqli_connect("localhost", $user, $passwd);
-
- mysqli_select_db($link, "test");
-
- mysqli_autocommit($link, TRUE);
-
- mysqli_query($link,"DROP TABLE IF EXISTS ac_01");
-
- mysqli_query($link,"CREATE TABLE ac_01(a int, b varchar(10)) type=InnoDB");
-
- mysqli_query($link, "INSERT INTO ac_01 VALUES (1, 'foobar')");
- mysqli_autocommit($link, FALSE);
- mysqli_query($link, "DELETE FROM ac_01");
- mysqli_query($link, "INSERT INTO ac_01 VALUES (2, 'egon')");
-
- mysqli_rollback($link);
-
- $result = mysqli_query($link, "SELECT * FROM ac_01");
- $row = mysqli_fetch_row($result);
- mysqli_free_result($result);
-
- var_dump($row);
-
- mysqli_query($link, "DELETE FROM ac_01");
- mysqli_query($link, "INSERT INTO ac_01 VALUES (2, 'egon')");
- mysqli_commit($link);
-
- $result = mysqli_query($link, "SELECT * FROM ac_01");
- $row = mysqli_fetch_row($result);
- mysqli_free_result($result);
-
- var_dump($row);
-
- mysqli_close($link);
-?>
---EXPECT--
-array(2) {
- [0]=>
- string(1) "1"
- [1]=>
- string(6) "foobar"
-}
-array(2) {
- [0]=>
- string(1) "2"
- [1]=>
- string(4) "egon"
-}
diff --git a/ext/mysqli/tests/015.phpt b/ext/mysqli/tests/015.phpt
deleted file mode 100644
index 96864e8854..0000000000
--- a/ext/mysqli/tests/015.phpt
+++ /dev/null
@@ -1,68 +0,0 @@
---TEST--
-mysqli autocommit/commit/rollback with myisam
---SKIPIF--
-<?php
- include "connect.inc";
- $link = mysqli_connect("localhost", $user, $passwd);
- $result = mysqli_query($link, "SHOW VARIABLES LIKE 'have_innodb'");
- $row = mysqli_fetch_row($result);
- mysqli_free_result($result);
- mysqli_close($link);
-
- if ($row[1] == "NO") {
- printf ("skip innodb support not installed.");
- }
-?>
---FILE--
-<?php
- include "connect.inc";
-
- $link = mysqli_connect("localhost", $user, $passwd);
-
- mysqli_select_db($link, "test");
-
- mysqli_autocommit($link, TRUE);
-
- mysqli_query($link,"DROP TABLE IF EXISTS ac_01");
-
- mysqli_query($link,"CREATE TABLE ac_01(a int, b varchar(10))");
-
- mysqli_query($link, "INSERT INTO ac_01 VALUES (1, 'foobar')");
- mysqli_autocommit($link, FALSE);
-
- mysqli_query($link, "DELETE FROM ac_01");
- mysqli_query($link, "INSERT INTO ac_01 VALUES (2, 'egon')");
-
- mysqli_rollback($link);
-
- $result = mysqli_query($link, "SELECT * FROM ac_01");
- $row = mysqli_fetch_row($result);
- mysqli_free_result($result);
-
- var_dump($row);
-
- mysqli_query($link, "DELETE FROM ac_01");
- mysqli_query($link, "INSERT INTO ac_01 VALUES (2, 'egon')");
- mysqli_commit($link);
-
- $result = mysqli_query($link, "SELECT * FROM ac_01");
- $row = mysqli_fetch_row($result);
- mysqli_free_result($result);
-
- var_dump($row);
-
- mysqli_close($link);
-?>
---EXPECT--
-array(2) {
- [0]=>
- string(1) "2"
- [1]=>
- string(4) "egon"
-}
-array(2) {
- [0]=>
- string(1) "2"
- [1]=>
- string(4) "egon"
-}
diff --git a/ext/mysqli/tests/016.phpt b/ext/mysqli/tests/016.phpt
deleted file mode 100644
index 4d16356a78..0000000000
--- a/ext/mysqli/tests/016.phpt
+++ /dev/null
@@ -1,25 +0,0 @@
---TEST--
-mysqli fetch user variable
---FILE--
-<?php
- include "connect.inc";
-
- /*** test mysqli_connect 127.0.0.1 ***/
- $link = mysqli_connect("localhost", $user, $passwd);
-
- mysqli_select_db($link, "test");
-
- mysqli_query($link, "SET @dummy='foobar'");
-
- $stmt = mysqli_prepare($link, "SELECT @dummy");
- mysqli_bind_result($stmt, $dummy);
- mysqli_execute($stmt);
- mysqli_fetch($stmt);
-
- var_dump($dummy);
-
- mysqli_stmt_close($stmt);
- mysqli_close($link);
-?>
---EXPECT--
-string(6) "foobar"
diff --git a/ext/mysqli/tests/017.phpt b/ext/mysqli/tests/017.phpt
deleted file mode 100644
index 3447614428..0000000000
--- a/ext/mysqli/tests/017.phpt
+++ /dev/null
@@ -1,32 +0,0 @@
---TEST--
-mysqli fetch functions
---FILE--
-<?php
- include "connect.inc";
-
- /*** test mysqli_connect 127.0.0.1 ***/
- $link = mysqli_connect("localhost", $user, $passwd);
-
- mysqli_select_db($link, "test");
-
- $stmt = mysqli_prepare($link, "SELECT current_user(), database(), 'foo'");
- mysqli_bind_result($stmt, $c0, $c1, $c2);
- mysqli_execute($stmt);
-
- mysqli_fetch($stmt);
-// mysqli_stmt_close($stmt);
-
- $test = array($c0, $c1, $c2);
-
- var_dump($test);
- mysqli_close($link);
-?>
---EXPECT--
-array(3) {
- [0]=>
- string(14) "root@localhost"
- [1]=>
- string(4) "test"
- [2]=>
- string(3) "foo"
-}
diff --git a/ext/mysqli/tests/018.phpt b/ext/mysqli/tests/018.phpt
deleted file mode 100644
index a0a247611d..0000000000
--- a/ext/mysqli/tests/018.phpt
+++ /dev/null
@@ -1,25 +0,0 @@
---TEST--
-mysqli fetch system variables
---FILE--
-<?php
- include "connect.inc";
-
- /*** test mysqli_connect 127.0.0.1 ***/
- $link = mysqli_connect("localhost", $user, $passwd);
-
- mysqli_select_db($link, "test");
-
- mysqli_query($link, "SET AUTOCOMMIT=0");
-
- $stmt = mysqli_prepare($link, "SELECT @@autocommit");
- mysqli_bind_result($stmt, $c0);
- mysqli_execute($stmt);
-
- mysqli_fetch($stmt);
-
- var_dump($c0);
-
- mysqli_close($link);
-?>
---EXPECT--
-int(0)
diff --git a/ext/mysqli/tests/019.phpt b/ext/mysqli/tests/019.phpt
deleted file mode 100644
index f7aab7a799..0000000000
--- a/ext/mysqli/tests/019.phpt
+++ /dev/null
@@ -1,68 +0,0 @@
---TEST--
-mysqli fetch (bind_param + bind_result)
---FILE--
-<?php
- include "connect.inc";
-
- /*** test mysqli_connect 127.0.0.1 ***/
- $link = mysqli_connect("localhost", $user, $passwd);
-
- mysqli_select_db($link, "test");
- $rc = mysqli_query($link,"DROP TABLE IF EXISTS insert_read");
-
- $rc = mysqli_query($link,"CREATE TABLE insert_read(col1 tinyint, col2 smallint,
- col3 int, col4 bigint,
- col5 float, col6 double,
- col7 date, col8 time,
- col9 varbinary(10),
- col10 varchar(50),
- col11 char(20))");
-
- $stmt= mysqli_prepare($link,"INSERT INTO insert_read(col1,col10, col11) VALUES(?,?,?)");
- mysqli_bind_param($stmt, "iss", $c1, $c2, $c3);
-
- $c1 = 1;
- $c2 = "foo";
- $c3 = "foobar";
-
- mysqli_execute($stmt);
- mysqli_stmt_close($stmt);
-
- $stmt = mysqli_prepare($link, "SELECT col1, col2, col3, col4, col5, col6, col7, col8, col9, col10, col11 from insert_read");
- mysqli_bind_result($stmt, $c1, $c2, $c3, $c4, $c5, $c6, $c7, $c8, $c9, $c10, $c11);
- mysqli_execute($stmt);
-
- mysqli_fetch($stmt);
-
- $test = array($c1,$c2,$c3,$c4,$c5,$c6,$c7,$c8,$c9,$c10,$c11);
-
- var_dump($test);
-
- mysqli_stmt_close($stmt);
- mysqli_close($link);
-?>
---EXPECT--
-array(11) {
- [0]=>
- int(1)
- [1]=>
- NULL
- [2]=>
- NULL
- [3]=>
- NULL
- [4]=>
- NULL
- [5]=>
- NULL
- [6]=>
- NULL
- [7]=>
- NULL
- [8]=>
- NULL
- [9]=>
- string(3) "foo"
- [10]=>
- string(6) "foobar"
-}
diff --git a/ext/mysqli/tests/020.phpt b/ext/mysqli/tests/020.phpt
deleted file mode 100644
index 5aa244329f..0000000000
--- a/ext/mysqli/tests/020.phpt
+++ /dev/null
@@ -1,64 +0,0 @@
---TEST--
-mysqli bind_param/bind_result date
---FILE--
-<?php
- include "connect.inc";
-
- /*** test mysqli_connect 127.0.0.1 ***/
- $link = mysqli_connect("localhost", $user, $passwd);
-
- mysqli_select_db($link, "test");
-
- mysqli_query($link,"DROP TABLE IF EXISTS test_bind_result");
- mysqli_query($link,"CREATE TABLE test_bind_result(c1 date, c2 time,
- c3 timestamp(14),
- c4 year,
- c5 datetime,
- c6 timestamp(4),
- c7 timestamp(6))");
-
- $stmt = mysqli_prepare($link, "INSERT INTO test_bind_result VALUES (?,?,?,?,?,?,?)");
- mysqli_bind_param($stmt, "sssssss", $d1, $d2, $d3, $d4, $d5, $d6, $d7);
-
- $d1 = '2002-01-02';
- $d2 = '12:49:00';
- $d3 = '2002-01-02 17:46:59';
- $d4 = 2010;
- $d5 ='2010-07-10';
- $d6 = '2020';
- $d7 = '1999-12-29';
-
- mysqli_execute($stmt);
- mysqli_stmt_close($stmt);
-
- $stmt = mysqli_prepare($link, "SELECT * FROM test_bind_result");
-
- mysqli_bind_result($stmt,$c1, $c2, $c3, $c4, $c5, $c6, $c7);
-
- mysqli_execute($stmt);
- mysqli_fetch($stmt);
-
- $test = array($c1,$c2,$c3,$c4,$c5,$c6,$c7);
-
- var_dump($test);
-
- mysqli_stmt_close($stmt);
- mysqli_close($link);
-?>
---EXPECT--
-array(7) {
- [0]=>
- string(10) "2002-01-02"
- [1]=>
- string(8) "12:49:00"
- [2]=>
- string(19) "2002-01-02 17:46:59"
- [3]=>
- int(2010)
- [4]=>
- string(19) "2010-07-10 00:00:00"
- [5]=>
- string(0) ""
- [6]=>
- string(19) "1999-12-29 00:00:00"
-}
diff --git a/ext/mysqli/tests/021.phpt b/ext/mysqli/tests/021.phpt
deleted file mode 100644
index 614f978aaf..0000000000
--- a/ext/mysqli/tests/021.phpt
+++ /dev/null
@@ -1,40 +0,0 @@
---TEST--
-mysqli bind_param+bind_result char/text
---FILE--
-<?php
- include "connect.inc";
-
- /*** test mysqli_connect 127.0.0.1 ***/
- $link = mysqli_connect("localhost", $user, $passwd);
-
- mysqli_select_db($link, "test");
-
- mysqli_query($link,"DROP TABLE IF EXISTS test_bind_fetch");
- mysqli_query($link,"CREATE TABLE test_bind_fetch(c1 char(10), c2 text)");
-
- $stmt = mysqli_prepare($link, "INSERT INTO test_bind_fetch VALUES (?,?)");
- mysqli_bind_param($stmt, "ss", $q1, $q2);
- $q1 = "1234567890";
- $q2 = "this is a test";
- mysqli_execute($stmt);
- mysqli_stmt_close($stmt);
-
- $stmt = mysqli_prepare($link, "SELECT * FROM test_bind_fetch");
- mysqli_bind_result($stmt, $c1, $c2);
- mysqli_execute($stmt);
- mysqli_fetch($stmt);
-
- $test = array($c1,$c2);
-
- var_dump($test);
-
- mysqli_stmt_close($stmt);
- mysqli_close($link);
-?>
---EXPECT--
-array(2) {
- [0]=>
- string(10) "1234567890"
- [1]=>
- string(14) "this is a test"
-}
diff --git a/ext/mysqli/tests/022.phpt b/ext/mysqli/tests/022.phpt
deleted file mode 100644
index 2fb2bcdb62..0000000000
--- a/ext/mysqli/tests/022.phpt
+++ /dev/null
@@ -1,44 +0,0 @@
---TEST--
-mysqli bind_param/bind_result char/text long
---FILE--
-<?php
- include "connect.inc";
-
- /*** test mysqli_connect 127.0.0.1 ***/
- $link = mysqli_connect("localhost", $user, $passwd);
-
- mysqli_select_db($link, "test");
-
- mysqli_query($link,"DROP TABLE IF EXISTS test_bind_fetch");
- mysqli_query($link,"CREATE TABLE test_bind_fetch(c1 char(10), c2 text)");
-
-
- $stmt = mysqli_prepare($link, "INSERT INTO test_bind_fetch VALUES (?,?)");
- mysqli_bind_param($stmt, "ss", $a1, $a2);
-
- $a1 = "1234567890";
- $a2 = str_repeat("A1", 32000);
-
- mysqli_execute($stmt);
- mysqli_stmt_close($stmt);
-
- $stmt = mysqli_prepare($link, "SELECT * FROM test_bind_fetch");
- mysqli_bind_result($stmt, $c1, $c2);
- mysqli_execute($stmt);
- mysqli_fetch($stmt);
-
- $test[] = $c1;
- $test[] = ($a2 == $c2) ? "32K String ok" : "32K String failed";
-
- var_dump($test);
-
- mysqli_stmt_close($stmt);
- mysqli_close($link);
-?>
---EXPECT--
-array(2) {
- [0]=>
- string(10) "1234567890"
- [1]=>
- string(13) "32K String ok"
-}
diff --git a/ext/mysqli/tests/023.phpt b/ext/mysqli/tests/023.phpt
deleted file mode 100644
index 258f1852d0..0000000000
--- a/ext/mysqli/tests/023.phpt
+++ /dev/null
@@ -1,62 +0,0 @@
---TEST--
-mysqli bind_param/bind_prepare fetch long values
---FILE--
-<?php
- include "connect.inc";
-
- /*** test mysqli_connect 127.0.0.1 ***/
- $link = mysqli_connect("localhost", $user, $passwd);
-
- mysqli_select_db($link, "test");
-
- mysqli_query($link,"DROP TABLE IF EXISTS test_bind_fetch");
- mysqli_query($link,"CREATE TABLE test_bind_fetch(c1 int unsigned,
- c2 int unsigned,
- c3 int,
- c4 int,
- c5 int,
- c6 int unsigned,
- c7 int)");
-
- $stmt = mysqli_prepare($link, "INSERT INTO test_bind_fetch VALUES (?,?,?,?,?,?,?)");
- mysqli_bind_param($stmt, "iiiiiii", $c1,$c2,$c3,$c4,$c5,$c6,$c7);
- $c1 = -23;
- $c2 = 35999;
- $c3 = NULL;
- $c4 = -500;
- $c5 = -9999999;
- $c6 = -0;
- $c7 = 0;
-
- mysqli_execute($stmt);
- mysqli_stmt_close($stmt);
-
- $stmt = mysqli_prepare($link, "SELECT * FROM test_bind_fetch");
- mysqli_bind_result($stmt, $c1, $c2, $c3, $c4, $c5, $c6, $c7);
- mysqli_execute($stmt);
- mysqli_fetch($stmt);
-
- $test = array($c1,$c2,$c3,$c4,$c5,$c6,$c7);
-
- var_dump($test);
-
- mysqli_stmt_close($stmt);
- mysqli_close($link);
-?>
---EXPECT--
-array(7) {
- [0]=>
- int(0)
- [1]=>
- int(35999)
- [2]=>
- NULL
- [3]=>
- int(-500)
- [4]=>
- int(-9999999)
- [5]=>
- int(0)
- [6]=>
- int(0)
-}
diff --git a/ext/mysqli/tests/024.phpt b/ext/mysqli/tests/024.phpt
deleted file mode 100644
index de0eead6ed..0000000000
--- a/ext/mysqli/tests/024.phpt
+++ /dev/null
@@ -1,63 +0,0 @@
---TEST--
-mysqli bind_param/bind_result short values
---FILE--
-<?php
- include "connect.inc";
-
- /*** test mysqli_connect 127.0.0.1 ***/
- $link = mysqli_connect("localhost", $user, $passwd);
-
- mysqli_select_db($link, "test");
-
- mysqli_query($link,"DROP TABLE IF EXISTS test_bind_fetch");
- mysqli_query($link,"CREATE TABLE test_bind_fetch(c1 smallint unsigned,
- c2 smallint unsigned,
- c3 smallint,
- c4 smallint,
- c5 smallint,
- c6 smallint unsigned,
- c7 smallint)");
-
- $stmt = mysqli_prepare($link, "INSERT INTO test_bind_fetch VALUES (?,?,?,?,?,?,?)");
- mysqli_bind_param($stmt, "iiiiiii", $c1,$c2,$c3,$c4,$c5,$c6,$c7);
-
- $c1 = -23;
- $c2 = 35999;
- $c3 = NULL;
- $c4 = -500;
- $c5 = -9999999;
- $c6 = -0;
- $c7 = 0;
-
- mysqli_execute($stmt);
- mysqli_stmt_close($stmt);
-
- $stmt = mysqli_prepare($link, "SELECT * FROM test_bind_fetch");
- mysqli_bind_result($stmt, $c1, $c2, $c3, $c4, $c5, $c6, $c7);
- mysqli_execute($stmt);
- mysqli_fetch($stmt);
-
- $test = array($c1,$c2,$c3,$c4,$c5,$c6,$c7);
-
- var_dump($test);
-
- mysqli_stmt_close($stmt);
- mysqli_close($link);
-?>
---EXPECT--
-array(7) {
- [0]=>
- int(0)
- [1]=>
- int(35999)
- [2]=>
- NULL
- [3]=>
- int(-500)
- [4]=>
- int(-32768)
- [5]=>
- int(0)
- [6]=>
- int(0)
-}
diff --git a/ext/mysqli/tests/025.phpt b/ext/mysqli/tests/025.phpt
deleted file mode 100644
index 3d643ad872..0000000000
--- a/ext/mysqli/tests/025.phpt
+++ /dev/null
@@ -1,67 +0,0 @@
---TEST--
-mysqli bind_param/bind_result tinyint values
---FILE--
-<?php
- include "connect.inc";
-
- /*** test mysqli_connect 127.0.0.1 ***/
- $link = mysqli_connect("localhost", $user, $passwd);
-
- mysqli_select_db($link, "test");
-
- mysqli_query($link,"DROP TABLE IF EXISTS test_bind_fetch");
- mysqli_query($link,"CREATE TABLE test_bind_fetch(c1 tinyint,
- c2 tinyint unsigned,
- c3 tinyint not NULL,
- c4 tinyint,
- c5 tinyint,
- c6 tinyint unsigned,
- c7 tinyint)");
-
- $stmt = mysqli_prepare ($link, "INSERT INTO test_bind_fetch VALUES(?,?,?,?,?,?,?)");
- mysqli_bind_param($stmt, "iiiiiii", $c1,$c2,$c3,$c4,$c5,$c6,$c7);
-
- $c1 = -23;
- $c2 = 300;
- $c3 = 0;
- $c4 = -100;
- $c5 = -127;
- $c6 = 30;
- $c7 = 0;
-
- mysqli_execute($stmt);
- mysqli_stmt_close($stmt);
-
- mysqli_query($link, "INSERT INTO test_bind_fetch VALUES (-23,300,0,-100,-127,+30,0)");
-
- $c1 = $c2 = $c3 = $c4 = $c5 = $c6 = $c7 = NULL;
-
- $stmt = mysqli_prepare($link, "SELECT * FROM test_bind_fetch");
- mysqli_bind_result($stmt, $c1, $c2, $c3, $c4, $c5, $c6, $c7);
- mysqli_execute($stmt);
- mysqli_fetch($stmt);
-
- $test = array($c1,$c2,$c3,$c4,$c5,$c6,$c7);
-
- var_dump($test);
-
- mysqli_stmt_close($stmt);
- mysqli_close($link);
-?>
---EXPECT--
-array(7) {
- [0]=>
- int(-23)
- [1]=>
- int(255)
- [2]=>
- int(0)
- [3]=>
- int(-100)
- [4]=>
- int(-127)
- [5]=>
- int(30)
- [6]=>
- int(0)
-}
diff --git a/ext/mysqli/tests/026.phpt b/ext/mysqli/tests/026.phpt
deleted file mode 100644
index 2c7f9f02bd..0000000000
--- a/ext/mysqli/tests/026.phpt
+++ /dev/null
@@ -1,48 +0,0 @@
---TEST--
-mysqli bind_param/bind_result with send_long_data
---FILE--
-<?php
- $user = "root";
- $passwd = "";
-
-
- /*** test mysqli_connect 127.0.0.1 ***/
- $link = mysqli_connect("localhost", $user, $passwd);
-
- mysqli_select_db($link, "test");
-
- mysqli_query($link,"DROP TABLE IF EXISTS test_bind_fetch");
- mysqli_query($link,"CREATE TABLE test_bind_fetch(c1 varchar(10), c2 text)");
-
- $stmt = mysqli_prepare ($link, "INSERT INTO test_bind_fetch VALUES (?,?)");
- mysqli_bind_param($stmt, "sb", $c1, $c2);
-
- $c1 = "Hello World";
-
- mysqli_send_long_data($stmt, 1, "This is the first sentence.");
- mysqli_send_long_data($stmt, 1, " And this is the second sentence.");
- mysqli_send_long_data($stmt, 1, " And finally this is the last sentence.");
-
- mysqli_execute($stmt);
- mysqli_stmt_close($stmt);
-
- $stmt = mysqli_prepare($link, "SELECT * FROM test_bind_fetch");
- mysqli_bind_result($stmt, $d1, $d2);
- mysqli_execute($stmt);
- mysqli_fetch($stmt);
-
- $test = array($d1,$d2);
-
- var_dump($test);
-
- mysqli_stmt_close($stmt);
-
- mysqli_close($link);
-?>
---EXPECT--
-array(2) {
- [0]=>
- string(10) "Hello Worl"
- [1]=>
- string(99) "This is the first sentence. And this is the second sentence. And finally this is the last sentence."
-}
diff --git a/ext/mysqli/tests/027.phpt b/ext/mysqli/tests/027.phpt
deleted file mode 100644
index 347a8513af..0000000000
--- a/ext/mysqli/tests/027.phpt
+++ /dev/null
@@ -1,20 +0,0 @@
---TEST--
-function test: mysqli_stat
---FILE--
-<?php
- $user = "root";
- $passwd = "";
-
-
- /*** test mysqli_connect 127.0.0.1 ***/
- $link = mysqli_connect("localhost", $user, $passwd);
-
- $status = mysqli_stat($link);
-
-
- var_dump(strlen($status) > 0);
-
- mysqli_close($link);
-?>
---EXPECT--
-bool(true)
diff --git a/ext/mysqli/tests/028.phpt b/ext/mysqli/tests/028.phpt
deleted file mode 100644
index d9e848f2ba..0000000000
--- a/ext/mysqli/tests/028.phpt
+++ /dev/null
@@ -1,19 +0,0 @@
---TEST--
-function test: mysqli_character_set_name
---FILE--
-<?php
- $user = "root";
- $passwd = "";
-
-
- /*** test mysqli_connect 127.0.0.1 ***/
- $link = mysqli_connect("localhost", $user, $passwd);
-
- $cset = substr(mysqli_character_set_name($link),0,6);
-
- var_dump($cset);
-
- mysqli_close($link);
-?>
---EXPECT--
-string(6) "latin1"
diff --git a/ext/mysqli/tests/029.phpt b/ext/mysqli/tests/029.phpt
deleted file mode 100644
index 7680b228e9..0000000000
--- a/ext/mysqli/tests/029.phpt
+++ /dev/null
@@ -1,25 +0,0 @@
---TEST--
-function test: mysqli_affected_rows
---FILE--
-<?php
- $user = "root";
- $passwd = "";
-
-
- /*** test mysqli_connect 127.0.0.1 ***/
- $link = mysqli_connect("localhost", $user, $passwd);
-
- mysqli_select_db($link, "test");
-
- mysqli_query($link, "drop table if exists general_test");
- mysqli_query($link, "create table general_test (a int)");
- mysqli_query($link, "insert into general_test values (1),(2),(3)");
-
- $afc = mysqli_affected_rows($link);
-
- var_dump($afc);
-
- mysqli_close($link);
-?>
---EXPECT--
-int(3)
diff --git a/ext/mysqli/tests/030.phpt b/ext/mysqli/tests/030.phpt
deleted file mode 100644
index da87218627..0000000000
--- a/ext/mysqli/tests/030.phpt
+++ /dev/null
@@ -1,24 +0,0 @@
---TEST--
-function test: mysqli_errno
---FILE--
-<?php
- $user = "root";
- $passwd = "";
-
- /*** test mysqli_connect 127.0.0.1 ***/
- $link = mysqli_connect("localhost", $user, $passwd);
- $errno = mysqli_errno($link);
- var_dump($errno);
-
- mysqli_select_db($link, "test");
-
- mysqli_query($link, "select * from non_exisiting_table");
- $errno = mysqli_errno($link);
-
- var_dump($errno);
-
- mysqli_close($link);
-?>
---EXPECT--
-int(0)
-int(1146)
diff --git a/ext/mysqli/tests/031.phpt b/ext/mysqli/tests/031.phpt
deleted file mode 100644
index 61bfb5bb32..0000000000
--- a/ext/mysqli/tests/031.phpt
+++ /dev/null
@@ -1,24 +0,0 @@
---TEST--
-function test: mysqli_error
---FILE--
-<?php
- $user = "root";
- $passwd = "";
-
- /*** test mysqli_connect 127.0.0.1 ***/
- $link = mysqli_connect("localhost", $user, $passwd);
- $error = mysqli_error($link);
- var_dump($error);
-
- mysqli_select_db($link, "test");
-
- mysqli_query($link, "select * from non_exisiting_table");
- $error = mysqli_error($link);
-
- var_dump($error);
-
- mysqli_close($link);
-?>
---EXPECT--
-string(0) ""
-string(46) "Table 'test.non_exisiting_table' doesn't exist"
diff --git a/ext/mysqli/tests/032.phpt b/ext/mysqli/tests/032.phpt
deleted file mode 100644
index 02564834d8..0000000000
--- a/ext/mysqli/tests/032.phpt
+++ /dev/null
@@ -1,25 +0,0 @@
---TEST--
-function test: mysqli_info
---FILE--
-<?php
- $user = "root";
- $passwd = "";
-
-
- /*** test mysqli_connect 127.0.0.1 ***/
- $link = mysqli_connect("localhost", $user, $passwd);
-
- mysqli_select_db($link, "test");
-
- mysqli_query($link, "drop table if exists general_test");
- mysqli_query($link, "create table general_test (a int)");
- mysqli_query($link, "insert into general_test values (1),(2),(3)");
-
- $afc = mysqli_info($link);
-
- var_dump($afc);
-
- mysqli_close($link);
-?>
---EXPECT--
-string(38) "Records: 3 Duplicates: 0 Warnings: 0"
diff --git a/ext/mysqli/tests/033.phpt b/ext/mysqli/tests/033.phpt
deleted file mode 100644
index e3d8d159d0..0000000000
--- a/ext/mysqli/tests/033.phpt
+++ /dev/null
@@ -1,19 +0,0 @@
---TEST--
-function test: mysqli_get_host_info
---FILE--
-<?php
- $user = "root";
- $passwd = "";
-
-
- /*** test mysqli_connect 127.0.0.1 ***/
- $link = mysqli_connect("localhost", $user, $passwd);
-
- $hinfo = mysqli_get_host_info($link);
-
- var_dump($hinfo);
-
- mysqli_close($link);
-?>
---EXPECT--
-string(25) "Localhost via UNIX socket"
diff --git a/ext/mysqli/tests/034.phpt b/ext/mysqli/tests/034.phpt
deleted file mode 100644
index e347586a36..0000000000
--- a/ext/mysqli/tests/034.phpt
+++ /dev/null
@@ -1,19 +0,0 @@
---TEST--
-function test: mysqli_get_proto_info
---FILE--
-<?php
- $user = "root";
- $passwd = "";
-
-
- /*** test mysqli_connect 127.0.0.1 ***/
- $link = mysqli_connect("localhost", $user, $passwd);
-
- $pinfo = mysqli_get_proto_info($link);
-
- var_dump($pinfo);
-
- mysqli_close($link);
-?>
---EXPECT--
-int(10)
diff --git a/ext/mysqli/tests/035.phpt b/ext/mysqli/tests/035.phpt
deleted file mode 100644
index a02af059d8..0000000000
--- a/ext/mysqli/tests/035.phpt
+++ /dev/null
@@ -1,19 +0,0 @@
---TEST--
-function test: mysqli_get_server_info
---FILE--
-<?php
- $user = "root";
- $passwd = "";
-
-
- /*** test mysqli_connect 127.0.0.1 ***/
- $link = mysqli_connect("localhost", $user, $passwd);
-
- $sinfo = substr(mysqli_get_server_info($link),0,1);
-
- var_dump(strlen($sinfo));
-
- mysqli_close($link);
-?>
---EXPECT--
-int(1)
diff --git a/ext/mysqli/tests/036.phpt b/ext/mysqli/tests/036.phpt
deleted file mode 100644
index 080c6e32e4..0000000000
--- a/ext/mysqli/tests/036.phpt
+++ /dev/null
@@ -1,43 +0,0 @@
---TEST--
-function test: mysqli_insert_id()
---FILE--
-<?php
-
- include "connect.inc";
-
- /*** test mysqli_connect 127.0.0.1 ***/
- $link = mysqli_connect("localhost", $user, $passwd);
-
- mysqli_select_db($link, "test");
-
- mysqli_query($link, "DROP TABLE IF EXISTS t036");
-
- mysqli_query($link, "CREATE TABLE t036 (a bigint not null auto_increment primary key, b varchar(10))");
-
-
- mysqli_query($link, "INSERT INTO t036 (b) VALUES ('foo1')");
- $test[] = mysqli_insert_id($link);
-
- /* we have to insert more values, cause lexer sets auto_increment to max_int
- see mysql bug #54. So we don't check for the value, only for type (which must
- be type string)
- */
-
- mysqli_query($link, "ALTER TABLE t036 AUTO_INCREMENT=9999999999999998");
- mysqli_query($link, "INSERT INTO t036 (b) VALUES ('foo2')");
- mysqli_query($link, "INSERT INTO t036 (b) VALUES ('foo3')");
- mysqli_query($link, "INSERT INTO t036 (b) VALUES ('foo4')");
- $x = mysqli_insert_id($link);
- $test[] = is_string($x);
-
- var_dump($test);
-
- mysqli_close($link);
-?>
---EXPECT--
-array(2) {
- [0]=>
- int(1)
- [1]=>
- bool(true)
-}
diff --git a/ext/mysqli/tests/037.phpt b/ext/mysqli/tests/037.phpt
deleted file mode 100644
index f8b8a13f1a..0000000000
--- a/ext/mysqli/tests/037.phpt
+++ /dev/null
@@ -1,34 +0,0 @@
---TEST--
-function test: mysqli_field_count()
---FILE--
-<?php
-
- include "connect.inc";
-
- /*** test mysqli_connect 127.0.0.1 ***/
- $link = mysqli_connect("localhost", $user, $passwd);
-
- mysqli_select_db($link, "test");
-
- mysqli_query($link, "DROP TABLE IF EXISTS test_result");
-
- mysqli_query($link, "CREATE TABLE test_result (a int, b varchar(10))");
-
- mysqli_query($link, "INSERT INTO test_result VALUES (1, 'foo')");
- $ir[] = mysqli_field_count($link);
-
- mysqli_real_query($link, "SELECT * FROM test_result");
- $ir[] = mysqli_field_count($link);
-
-
- var_dump($ir);
-
- mysqli_close($link);
-?>
---EXPECT--
-array(2) {
- [0]=>
- int(0)
- [1]=>
- int(2)
-}
diff --git a/ext/mysqli/tests/038.phpt b/ext/mysqli/tests/038.phpt
deleted file mode 100644
index 858b3e3393..0000000000
--- a/ext/mysqli/tests/038.phpt
+++ /dev/null
@@ -1,31 +0,0 @@
---TEST--
-function test: mysqli_num_fields()
---FILE--
-<?php
-
- include "connect.inc";
-
- /*** test mysqli_connect 127.0.0.1 ***/
- $link = mysqli_connect("localhost", $user, $passwd);
-
- mysqli_select_db($link, "test");
-
- mysqli_query($link, "DROP TABLE IF EXISTS test_result");
-
- mysqli_query($link, "CREATE TABLE test_result (a int, b varchar(10))");
-
- mysqli_query($link, "INSERT INTO test_result VALUES (1, 'foo')");
-
- mysqli_real_query($link, "SELECT * FROM test_result");
- if (mysqli_field_count($link)) {
- $result = mysqli_store_result($link);
- $num = mysqli_num_fields($result);
- mysqli_free_result($result);
- }
-
- var_dump($num);
-
- mysqli_close($link);
-?>
---EXPECT--
-int(2)
diff --git a/ext/mysqli/tests/039.phpt b/ext/mysqli/tests/039.phpt
deleted file mode 100644
index 6ddb37bc5f..0000000000
--- a/ext/mysqli/tests/039.phpt
+++ /dev/null
@@ -1,24 +0,0 @@
---TEST--
-function test: mysqli_num_fields() 2
---FILE--
-<?php
-
- include "connect.inc";
-
- /*** test mysqli_connect 127.0.0.1 ***/
- $link = mysqli_connect("localhost", $user, $passwd);
-
- mysqli_real_query($link, "SHOW VARIABLES");
-
- if (mysqli_field_count($link)) {
- $result = mysqli_store_result($link);
- $num = mysqli_num_fields($result);
- mysqli_free_result($result);
- }
-
- var_dump($num);
-
- mysqli_close($link);
-?>
---EXPECT--
-int(2)
diff --git a/ext/mysqli/tests/040.phpt b/ext/mysqli/tests/040.phpt
deleted file mode 100644
index 477e2a5274..0000000000
--- a/ext/mysqli/tests/040.phpt
+++ /dev/null
@@ -1,31 +0,0 @@
---TEST--
-function test: mysqli_num_rows()
---FILE--
-<?php
-
- include "connect.inc";
-
- /*** test mysqli_connect 127.0.0.1 ***/
- $link = mysqli_connect("localhost", $user, $passwd);
-
- mysqli_select_db($link, "test");
-
- mysqli_query($link, "DROP TABLE IF EXISTS test_result");
-
- mysqli_query($link, "CREATE TABLE test_result (a int, b varchar(10))");
-
- mysqli_query($link, "INSERT INTO test_result VALUES (1, 'foo')");
-
- mysqli_real_query($link, "SELECT * FROM test_result");
- if (mysqli_field_count($link)) {
- $result = mysqli_store_result($link);
- $num = mysqli_num_rows($result);
- mysqli_free_result($result);
- }
-
- var_dump($num);
-
- mysqli_close($link);
-?>
---EXPECT--
-int(1)
diff --git a/ext/mysqli/tests/041.phpt b/ext/mysqli/tests/041.phpt
deleted file mode 100644
index 6fb8ee7e3f..0000000000
--- a/ext/mysqli/tests/041.phpt
+++ /dev/null
@@ -1,24 +0,0 @@
---TEST--
-function test: mysqli_warning_count()
---FILE--
-<?php
-
- include "connect.inc";
-
- /*** test mysqli_connect 127.0.0.1 ***/
- $link = mysqli_connect("localhost", $user, $passwd);
-
- mysqli_select_db($link, "test");
-
- mysqli_query($link, "DROP TABLE IF EXISTS test_warnings");
-
- mysqli_query($link, "CREATE TABLE test_warnings (a int not null");
-
- mysqli_query($link, "INSERT INTO test_warnings VALUES (1),(2),(NULL)");
- $num = mysqli_warning_count($link);
- var_dump($num);
-
- mysqli_close($link);
-?>
---EXPECT--
-int(1)
diff --git a/ext/mysqli/tests/042.phpt b/ext/mysqli/tests/042.phpt
deleted file mode 100644
index 8db17138c0..0000000000
--- a/ext/mysqli/tests/042.phpt
+++ /dev/null
@@ -1,59 +0,0 @@
---TEST--
-mysqli_fetch_object
---FILE--
-<?php
- include "connect.inc";
-
- /*** test mysqli_connect 127.0.0.1 ***/
- $link = mysqli_connect("localhost", $user, $passwd);
-
- mysqli_select_db($link, "test");
-
- mysqli_query($link,"DROP TABLE IF EXISTS test_bind_fetch");
- mysqli_query($link,"CREATE TABLE test_bind_fetch(c1 smallint unsigned,
- c2 smallint unsigned,
- c3 smallint,
- c4 smallint,
- c5 smallint,
- c6 smallint unsigned,
- c7 smallint)");
-
- $stmt = mysqli_prepare($link, "INSERT INTO test_bind_fetch VALUES (?,?,?,?,?,?,?)");
- mysqli_bind_param($stmt, "iiiiiii", $c1,$c2,$c3,$c4,$c5,$c6,$c7);
-
- $c1 = -23;
- $c2 = 35999;
- $c3 = NULL;
- $c4 = -500;
- $c5 = -9999999;
- $c6 = -0;
- $c7 = 0;
-
- mysqli_execute($stmt);
- mysqli_stmt_close($stmt);
-
- $result = mysqli_query($link, "SELECT * FROM test_bind_fetch");
- $test = mysqli_fetch_object($result);
- mysqli_free_result($result);
-
- var_dump($test);
-
- mysqli_close($link);
-?>
---EXPECTF--
-object(stdClass)#%d (7) {
- ["c1"]=>
- string(1) "0"
- ["c2"]=>
- string(5) "35999"
- ["c3"]=>
- NULL
- ["c4"]=>
- string(4) "-500"
- ["c5"]=>
- string(6) "-32768"
- ["c6"]=>
- string(1) "0"
- ["c7"]=>
- string(1) "0"
-}
diff --git a/ext/mysqli/tests/043.phpt b/ext/mysqli/tests/043.phpt
deleted file mode 100644
index 7aae6df9b4..0000000000
--- a/ext/mysqli/tests/043.phpt
+++ /dev/null
@@ -1,40 +0,0 @@
---TEST--
-mysqli_bind_param (UPDATE)
---FILE--
-<?php
- include "connect.inc";
-
- /*** test mysqli_connect 127.0.0.1 ***/
- $link = mysqli_connect("localhost", $user, $passwd);
-
- mysqli_select_db($link, "test");
-
- mysqli_query($link,"DROP TABLE IF EXISTS test_update");
- mysqli_query($link,"CREATE TABLE test_update(a varchar(10),
- b int)");
-
- mysqli_query($link, "INSERT INTO test_update VALUES ('foo', 2)");
-
- $stmt = mysqli_prepare($link, "UPDATE test_update SET a=?,b=? WHERE b=?");
- mysqli_bind_param($stmt, "sii", $c1, $c2, $c3);
-
- $c1 = "Rasmus";
- $c2 = 1;
- $c3 = 2;
-
- mysqli_execute($stmt);
- mysqli_stmt_close($stmt);
-
- $result = mysqli_query($link, "SELECT concat(a, ' is No. ', b) FROM test_update");
- $test = mysqli_fetch_row($result);
- mysqli_free_result($result);
-
- var_dump($test);
-
- mysqli_close($link);
-?>
---EXPECT--
-array(1) {
- [0]=>
- string(15) "Rasmus is No. 1"
-}
diff --git a/ext/mysqli/tests/044.phpt b/ext/mysqli/tests/044.phpt
deleted file mode 100644
index 5f72f65e38..0000000000
--- a/ext/mysqli/tests/044.phpt
+++ /dev/null
@@ -1,19 +0,0 @@
---TEST--
-mysqli_get_server_version
---FILE--
-<?php
- include "connect.inc";
-
- /*** test mysqli_connect 127.0.0.1 ***/
- $link = mysqli_connect("localhost", $user, $passwd);
-
- $i = mysqli_get_server_version($link);
-
- $test = $i / $i;
-
- var_dump($test);
-
- mysqli_close($link);
-?>
---EXPECT--
-int(1)
diff --git a/ext/mysqli/tests/045.phpt b/ext/mysqli/tests/045.phpt
deleted file mode 100644
index dc58bcfb08..0000000000
--- a/ext/mysqli/tests/045.phpt
+++ /dev/null
@@ -1,43 +0,0 @@
---TEST--
-mysqli_bind_result (SHOW)
---SKIPIF--
-<?php
- include "connect.inc";
- $link = mysqli_connect("localhost", $user, $passwd);
-
-
- $stmt = mysqli_prepare($link, "SHOW VARIABLES LIKE 'port'");
- mysqli_execute($stmt);
-
- if (!$stmt->field_count) {
- printf("skip SHOW command is not supported in prepared statements.");
- }
- $stmt->close();
- mysqli_close($link);
-?>
---FILE--
-<?php
- include "connect.inc";
-
- /*** test mysqli_connect 127.0.0.1 ***/
- $link = mysqli_connect("localhost", $user, $passwd);
-
- $stmt = mysqli_prepare($link, "SHOW VARIABLES LIKE 'port'");
- mysqli_execute($stmt);
-
- mysqli_bind_result($stmt, $c1, $c2);
- mysqli_fetch($stmt);
- mysqli_stmt_close($stmt);
- $test = array ($c1,$c2);
-
- var_dump($test);
-
- mysqli_close($link);
-?>
---EXPECT--
-array(2) {
- [0]=>
- string(4) "port"
- [1]=>
- string(4) "3306"
-}
diff --git a/ext/mysqli/tests/046.phpt b/ext/mysqli/tests/046.phpt
deleted file mode 100644
index bd6bc0efdb..0000000000
--- a/ext/mysqli/tests/046.phpt
+++ /dev/null
@@ -1,31 +0,0 @@
---TEST--
-mysqli_stmt_affected_rows (delete)
---FILE--
-<?php
- include "connect.inc";
-
- /*** test mysqli_connect 127.0.0.1 ***/
- $link = mysqli_connect("localhost", $user, $passwd);
-
- mysqli_select_db($link, "test");
-
- mysqli_query($link, "DROP TABLE IF EXISTS test_affected");
- mysqli_query($link, "CREATE TABLE test_affected (foo int)");
-
- mysqli_query($link, "INSERT INTO test_affected VALUES (1),(2),(3),(4),(5)");
-
- $stmt = mysqli_prepare($link, "DELETE FROM test_affected WHERE foo=?");
- mysqli_bind_param($stmt, "i", $c1);
-
- $c1 = 2;
-
- mysqli_execute($stmt);
- $x = mysqli_stmt_affected_rows($stmt);
-
- mysqli_stmt_close($stmt);
- var_dump($x==1);
-
- mysqli_close($link);
-?>
---EXPECT--
-bool(true)
diff --git a/ext/mysqli/tests/047.phpt b/ext/mysqli/tests/047.phpt
deleted file mode 100644
index 7862846dc0..0000000000
--- a/ext/mysqli/tests/047.phpt
+++ /dev/null
@@ -1,73 +0,0 @@
---TEST--
-mysqli_get_metadata
---FILE--
-<?php
- include "connect.inc";
-
- /*** test mysqli_connect 127.0.0.1 ***/
- $link = mysqli_connect("localhost", $user, $passwd);
-
- mysqli_select_db($link, "test");
-
- mysqli_query($link, "DROP TABLE IF EXISTS test_affected");
- mysqli_query($link, "CREATE TABLE test_affected (foo int, bar varchar(10))");
-
- mysqli_query($link, "INSERT INTO test_affected VALUES (1, 'Zak'),(2, 'Greant')");
-
- $stmt = mysqli_prepare($link, "SELECT * FROM test_affected");
- mysqli_execute($stmt);
- $result = mysqli_get_metadata($stmt);
-
- $fields = mysqli_fetch_fields($result);
- mysqli_free_result($result);
-
- var_dump($fields);
-
- mysqli_stmt_close($stmt);
- mysqli_close($link);
-?>
---EXPECTF--
-array(2) {
- [0]=>
- object(stdClass)#%d (9) {
- ["name"]=>
- string(3) "foo"
- ["orgname"]=>
- string(3) "foo"
- ["table"]=>
- string(13) "test_affected"
- ["orgtable"]=>
- string(13) "test_affected"
- ["def"]=>
- string(0) ""
- ["max_length"]=>
- int(0)
- ["flags"]=>
- int(32768)
- ["type"]=>
- int(3)
- ["decimals"]=>
- int(0)
- }
- [1]=>
- object(stdClass)#%d (9) {
- ["name"]=>
- string(3) "bar"
- ["orgname"]=>
- string(3) "bar"
- ["table"]=>
- string(13) "test_affected"
- ["orgtable"]=>
- string(13) "test_affected"
- ["def"]=>
- string(0) ""
- ["max_length"]=>
- int(0)
- ["flags"]=>
- int(0)
- ["type"]=>
- int(253)
- ["decimals"]=>
- int(0)
- }
-}
diff --git a/ext/mysqli/tests/048.phpt b/ext/mysqli/tests/048.phpt
deleted file mode 100644
index 102bcdfc26..0000000000
--- a/ext/mysqli/tests/048.phpt
+++ /dev/null
@@ -1,60 +0,0 @@
---TEST--
-mysqli bind_result (OO-Style)
---FILE--
-<?php
- include "connect.inc";
-
- /*** test mysqli_connect 127.0.0.1 ***/
- $mysql = mysqli_connect("localhost", $user, $passwd);
-
- $mysql->select_db("test");
- $mysql->query("DROP TABLE IF EXISTS test_fetch_null");
-
- $mysql->query("CREATE TABLE test_fetch_null(col1 tinyint, col2 smallint,
- col3 int, col4 bigint,
- col5 float, col6 double,
- col7 date, col8 time,
- col9 varbinary(10),
- col10 varchar(50),
- col11 char(20))");
-
- $mysql->query("INSERT INTO test_fetch_null(col1,col10, col11) VALUES(1,'foo1', 1000),(2,'foo2', 88),(3,'foo3', 389789)");
-
- $stmt = $mysql->prepare("SELECT col1, col2, col3, col4, col5, col6, col7, col8, col9, col10, col11 from test_fetch_null");
- $stmt->bind_result($c1, $c2, $c3, $c4, $c5, $c6, $c7, $c8, $c9, $c10, $c11);
- $stmt->execute();
-
- $stmt->fetch();
-
- $test = array($c1,$c2,$c3,$c4,$c5,$c6,$c7,$c8,$c9,$c10,$c11);
-
- var_dump($test);
-
- $stmt->close();
- $mysql->close();
-?>
---EXPECT--
-array(11) {
- [0]=>
- int(1)
- [1]=>
- NULL
- [2]=>
- NULL
- [3]=>
- NULL
- [4]=>
- NULL
- [5]=>
- NULL
- [6]=>
- NULL
- [7]=>
- NULL
- [8]=>
- NULL
- [9]=>
- string(4) "foo1"
- [10]=>
- string(4) "1000"
-}
diff --git a/ext/mysqli/tests/049.phpt b/ext/mysqli/tests/049.phpt
deleted file mode 100644
index 04e705de6e..0000000000
--- a/ext/mysqli/tests/049.phpt
+++ /dev/null
@@ -1,23 +0,0 @@
---TEST--
-mysql_fetch_row (OO-Style)
---FILE--
-<?php
- include "connect.inc";
-
- /*** test mysqli_connect 127.0.0.1 ***/
- $mysql = mysqli_connect("localhost", $user, $passwd);
-
- $mysql->select_db("test");
- $result = $mysql->query("SELECT CURRENT_USER()");
- $row = $result->fetch_row();
- $result->close();
-
- var_dump($row);
-
- $mysql->close();
-?>
---EXPECT--
-array(1) {
- [0]=>
- string(14) "root@localhost"
-}
diff --git a/ext/mysqli/tests/050.phpt b/ext/mysqli/tests/050.phpt
deleted file mode 100644
index 9ab5d346f8..0000000000
--- a/ext/mysqli/tests/050.phpt
+++ /dev/null
@@ -1,19 +0,0 @@
---TEST--
-non freed statement test
---FILE--
-<?php
- include "connect.inc";
-
- /************************
- * non freed stamement
- ************************/
- $link = mysqli_connect("localhost", $user, $passwd);
-
- $stmt = mysqli_prepare($link, "SELECT CURRENT_USER()");
- mysqli_execute($stmt);
-
- mysqli_close($link);
- printf("Ok\n");
-?>
---EXPECT--
-Ok
diff --git a/ext/mysqli/tests/051.phpt b/ext/mysqli/tests/051.phpt
deleted file mode 100644
index dde734a1e0..0000000000
--- a/ext/mysqli/tests/051.phpt
+++ /dev/null
@@ -1,20 +0,0 @@
---TEST--
-free statement after close
---FILE--
-<?php
- include "connect.inc";
-
- /************************
- * free statement after close
- ************************/
- $link = mysqli_connect("localhost", $user, $passwd);
-
- $stmt1 = mysqli_prepare($link, "SELECT CURRENT_USER()");
- mysqli_execute($stmt1);
-
- mysqli_close($link);
- @mysqli_stmt_close($stmt1);
- printf("Ok\n");
-?>
---EXPECT--
-Ok
diff --git a/ext/mysqli/tests/052.phpt b/ext/mysqli/tests/052.phpt
deleted file mode 100644
index 4ae9b12c50..0000000000
--- a/ext/mysqli/tests/052.phpt
+++ /dev/null
@@ -1,20 +0,0 @@
---TEST--
-call statement after close
---FILE--
-<?php
- include "connect.inc";
-
- /************************
- * statement call after close
- ************************/
- $link = mysqli_connect("localhost", $user, $passwd);
-
- $stmt2 = mysqli_prepare($link, "SELECT CURRENT_USER()");
-
- mysqli_close($link);
- @mysqli_execute($stmt2);
- @mysqli_stmt_close($stmt2);
- printf("Ok\n");
-?>
---EXPECT--
-Ok
diff --git a/ext/mysqli/tests/053.phpt b/ext/mysqli/tests/053.phpt
deleted file mode 100644
index f542d0f099..0000000000
--- a/ext/mysqli/tests/053.phpt
+++ /dev/null
@@ -1,18 +0,0 @@
---TEST--
-not freed resultset
---FILE--
-<?php
- include "connect.inc";
-
- /************************
- * non freed resultset
- ************************/
- $link = mysqli_connect("localhost", $user, $passwd);
-
- $result = mysqli_query($link, "SELECT CURRENT_USER()");
- mysqli_close($link);
- printf("Ok\n");
-
-?>
---EXPECT--
-Ok
diff --git a/ext/mysqli/tests/054.phpt b/ext/mysqli/tests/054.phpt
deleted file mode 100644
index eab207db4d..0000000000
--- a/ext/mysqli/tests/054.phpt
+++ /dev/null
@@ -1,18 +0,0 @@
---TEST--
-free resultset after close
---FILE--
-<?php
- include "connect.inc";
-
- /************************
- * free resultset after close
- ************************/
- $link = mysqli_connect("localhost", $user, $passwd);
-
- $result1 = mysqli_query($link, "SELECT CURRENT_USER()");
- mysqli_close($link);
- mysqli_free_result($result1);
- printf("Ok\n");
-?>
---EXPECT--
-Ok
diff --git a/ext/mysqli/tests/055.phpt b/ext/mysqli/tests/055.phpt
deleted file mode 100644
index e777bcfc99..0000000000
--- a/ext/mysqli/tests/055.phpt
+++ /dev/null
@@ -1,17 +0,0 @@
---TEST--
-free nothing
---FILE--
-<?php
- include "connect.inc";
-
- /************************
- * don't free anything
- ************************/
- $link = mysqli_connect("localhost", $user, $passwd);
-
- $result2 = mysqli_query($link, "SELECT CURRENT_USER()");
- $stmt2 = mysqli_prepare($link, "SELECT CURRENT_USER()");
- printf("Ok\n");
-?>
---EXPECT--
-Ok
diff --git a/ext/mysqli/tests/056.phpt b/ext/mysqli/tests/056.phpt
deleted file mode 100644
index cee7df1e5f..0000000000
--- a/ext/mysqli/tests/056.phpt
+++ /dev/null
@@ -1,19 +0,0 @@
---TEST--
-extend mysqli
---FILE--
-<?php
- include "connect.inc";
-
- class foobar extends mysqli {
- function test () {
- return ("I like MySQL 4.1");
- }
- }
-
- $foo = new foobar();
- $foo->connect("localhost", $user, $passwd);
- $foo->close();
- printf("%s\n", $foo->test());
-?>
---EXPECT--
-I like MySQL 4.1
diff --git a/ext/mysqli/tests/057.phpt b/ext/mysqli/tests/057.phpt
deleted file mode 100644
index 581201d8ef..0000000000
--- a/ext/mysqli/tests/057.phpt
+++ /dev/null
@@ -1,52 +0,0 @@
---TEST--
-mysqli_get_metadata
---FILE--
-<?php
- include "connect.inc";
-
- /*** test mysqli_connect 127.0.0.1 ***/
- $link = mysqli_connect("localhost", $user, $passwd);
-
- mysqli_select_db($link, "test");
-
- mysqli_query($link,"DROP TABLE IF EXISTS test_store_result");
- mysqli_query($link,"CREATE TABLE test_store_result (a int)");
-
- mysqli_query($link, "INSERT INTO test_store_result VALUES (1),(2),(3)");
-
- $stmt = mysqli_prepare($link, "SELECT * FROM test_store_result");
- mysqli_execute($stmt);
-
- /* this should produce an out of sync error */
- if ($result = mysqli_query($link, "SELECT * FROM test_store_result")) {
- mysqli_free_result($result);
- printf ("Query ok\n");
- }
- mysqli_stmt_close($stmt);
-
- $stmt = mysqli_prepare($link, "SELECT * FROM test_store_result");
- mysqli_execute($stmt);
- $result1 = mysqli_get_metadata($stmt);
- mysqli_stmt_store_result($stmt);
-
- printf ("Rows: %d\n", mysqli_stmt_affected_rows($stmt));
-
- /* this should show an error, cause results are not buffered */
- if ($result = mysqli_query($link, "SELECT * FROM test_store_result")) {
- $row = mysqli_fetch_row($result);
- mysqli_free_result($result);
- }
-
-
- var_dump($row);
-
- mysqli_free_result($result1);
- mysqli_stmt_close($stmt);
- mysqli_close($link);
-?>
---EXPECT--
-Rows: 3
-array(1) {
- [0]=>
- string(1) "1"
-}
diff --git a/ext/mysqli/tests/058.phpt b/ext/mysqli/tests/058.phpt
deleted file mode 100644
index d46e8d65a8..0000000000
--- a/ext/mysqli/tests/058.phpt
+++ /dev/null
@@ -1,55 +0,0 @@
---TEST--
-multiple binds
---FILE--
-<?php
- include "connect.inc";
-
- /*** test mysqli_connect 127.0.0.1 ***/
- $link = mysqli_connect("localhost", $user, $passwd);
-
- mysqli_select_db($link, "test");
-
- mysqli_query($link,"DROP TABLE IF EXISTS mbind");
- mysqli_query($link,"CREATE TABLE mbind (a int, b varchar(10))");
-
- $stmt = mysqli_prepare($link, "INSERT INTO mbind VALUES (?,?)");
-
- mysqli_bind_param($stmt, "is", $a, $b);
-
- $a = 1;
- $b = "foo";
-
- mysqli_execute($stmt);
-
- mysqli_bind_param($stmt, "is", $c, $d);
-
- $c = 2;
- $d = "bar";
-
- mysqli_execute($stmt);
- mysqli_stmt_close($stmt);
-
- $stmt = mysqli_prepare($link, "SELECT * FROM mbind");
- mysqli_execute($stmt);
-
- mysqli_bind_result($stmt, $e, $f);
- mysqli_fetch($stmt);
-
- mysqli_bind_result($stmt, $g, $h);
- mysqli_fetch($stmt);
-
- var_dump((array($e,$f,$g,$h)));
-
- mysqli_close($link);
-?>
---EXPECT--
-array(4) {
- [0]=>
- int(1)
- [1]=>
- string(3) "foo"
- [2]=>
- int(2)
- [3]=>
- string(3) "bar"
-}
diff --git a/ext/mysqli/tests/059.phpt b/ext/mysqli/tests/059.phpt
deleted file mode 100644
index 80d8a35012..0000000000
--- a/ext/mysqli/tests/059.phpt
+++ /dev/null
@@ -1,39 +0,0 @@
---TEST--
-sqlmode + bind
---FILE--
-<?php
- include "connect.inc";
-
- /*** test mysqli_connect 127.0.0.1 ***/
- $link = mysqli_connect("localhost", $user, $passwd);
-
- mysqli_select_db($link, "test");
-
- mysqli_query($link, "SET SQL_MODE='PIPES_AS_CONCAT'");
-
- mysqli_query($link,"DROP TABLE IF EXISTS mbind");
- mysqli_query($link,"CREATE TABLE mbind (b varchar(25))");
-
- $stmt = mysqli_prepare($link, "INSERT INTO mbind VALUES (?||?)");
-
- mysqli_bind_param($stmt, "ss", $a, $b);
-
- $a = "foo";
- $b = "bar";
-
- mysqli_execute($stmt);
-
- mysqli_stmt_close($stmt);
-
- $stmt = mysqli_prepare($link, "SELECT * FROM mbind");
- mysqli_execute($stmt);
-
- mysqli_bind_result($stmt, $e);
- mysqli_fetch($stmt);
-
- var_dump($e);
-
- mysqli_close($link);
-?>
---EXPECT--
-string(6) "foobar"
diff --git a/ext/mysqli/tests/060.phpt b/ext/mysqli/tests/060.phpt
deleted file mode 100644
index f7afaa7e1a..0000000000
--- a/ext/mysqli/tests/060.phpt
+++ /dev/null
@@ -1,57 +0,0 @@
---TEST--
-mysqli_fetch_object with classes
---FILE--
-<?php
- include "connect.inc";
-
- class test_class {
- function __construct($arg1, $arg2) {
- echo __METHOD__ . "($arg1,$arg2)\n";
- }
- }
-
- /*** test mysqli_connect 127.0.0.1 ***/
- $link = mysqli_connect("localhost", $user, $passwd);
-
- mysqli_select_db($link, "test");
-
- mysqli_query($link,"DROP TABLE IF EXISTS test_fetch");
- mysqli_query($link,"CREATE TABLE test_fetch(c1 smallint unsigned,
- c2 smallint unsigned,
- c3 smallint,
- c4 smallint,
- c5 smallint,
- c6 smallint unsigned,
- c7 smallint)");
-
- mysqli_query($link, "INSERT INTO test_fetch VALUES ( -23, 35999, NULL, -500, -9999999, -0, 0)");
-
- $result = mysqli_query($link, "SELECT * FROM test_bind_fetch");
- $test = mysqli_fetch_object($result, 'test_class', array(1, 2));
- mysqli_free_result($result);
-
- var_dump($test);
-
- mysqli_close($link);
-
- echo "Done\n";
-?>
---EXPECTF--
-test_class::__construct(1,2)
-object(test_class)#%d (7) {
- ["c1"]=>
- string(1) "0"
- ["c2"]=>
- string(5) "35999"
- ["c3"]=>
- NULL
- ["c4"]=>
- string(4) "-500"
- ["c5"]=>
- string(6) "-32768"
- ["c6"]=>
- string(1) "0"
- ["c7"]=>
- string(1) "0"
-}
-Done
diff --git a/ext/mysqli/tests/061.phpt b/ext/mysqli/tests/061.phpt
deleted file mode 100644
index 438f4a203a..0000000000
--- a/ext/mysqli/tests/061.phpt
+++ /dev/null
@@ -1,39 +0,0 @@
---TEST--
-local infile handler
---FILE--
-<?php
- include "connect.inc";
-
- function my_read($fp, &$buffer, $buflen, &$error) {
- $buffer = strrev(fread($fp, $buflen));
- return(strlen($buffer));
- }
-
- /*** test mysqli_connect 127.0.0.1 ***/
- $link = mysqli_connect("localhost", $user, $passwd, "test");
-
- /* create temporary file */
- $fp = fopen("061.csv", "w");
- fwrite($fp, "foo;bar");
- fclose($fp);
-
- mysqli_query($link,"DROP TABLE IF EXISTS t_061");
- mysqli_query($link,"CREATE TABLE t_061 (c1 varchar(10), c2 varchar(10))");
-
- mysqli_query($link, "LOAD DATA LOCAL INFILE '061.csv' INTO TABLE t_061 FIELDS TERMINATED BY ';'");
-
- mysqli_set_local_infile_handler($link, "my_read");
- mysqli_query($link, "LOAD DATA LOCAL INFILE '061.csv' INTO TABLE t_061 FIELDS TERMINATED BY ';'");
-
- if ($result = mysqli_query($link, "SELECT c1,c2 FROM t_061")) {
- while (($row = mysqli_fetch_row($result))) {
- printf("%s-%s\n", $row[0], $row[1]);
- }
- mysqli_free_result($result);
- }
-
- mysqli_close($link);
-?>
---EXPECT--
-foo-bar
-rab-oof
diff --git a/ext/mysqli/tests/bug29311.phpt b/ext/mysqli/tests/bug29311.phpt
deleted file mode 100644
index 82845e16d6..0000000000
--- a/ext/mysqli/tests/bug29311.phpt
+++ /dev/null
@@ -1,44 +0,0 @@
---TEST--
-constructor test
---FILE--
-<?php
- include "connect.inc";
-
- /* class 1 calls parent constructor */
- class mysql1 extends mysqli {
- function __construct() {
- parent::__construct("localhost", "root", "", "test");
- }
- }
-
- /* class 2 has an own constructor */
- class mysql2 extends mysqli {
-
- function __construct() {
- $this->connect("localhost", "root", "", "test");
- }
- }
-
- /* class 3 has no constructor */
- class mysql3 extends mysqli {
-
- }
-
- $foo[0] = new mysql1();
- $foo[1] = new mysql2();
- $foo[2] = new mysql3("localhost", "root", "", "test");
-
-
- for ($i=0; $i < 3; $i++) {
- if (($result = $foo[$i]->query("SELECT DATABASE()"))) {
- $row = $result->fetch_row();
- printf("%d: %s\n", $i, $row[0]);
- $result->close();
- }
- $foo[$i]->close();
- }
-?>
---EXPECTF--
-0: test
-1: test
-2: test
diff --git a/ext/mysqli/tests/connect.inc b/ext/mysqli/tests/connect.inc
deleted file mode 100644
index aa1d30a17e..0000000000
--- a/ext/mysqli/tests/connect.inc
+++ /dev/null
@@ -1,10 +0,0 @@
-<?php
-
- /* default values are localhost, root and empty password
- Change the values if you use another configuration */
-
- $host = "localhost";
- $user = "root";
- $passwd = "";
-
-?>
diff --git a/ext/ncurses/CREDITS b/ext/ncurses/CREDITS
deleted file mode 100644
index 312b522ef7..0000000000
--- a/ext/ncurses/CREDITS
+++ /dev/null
@@ -1,2 +0,0 @@
-ncurses
-Ilia Alshanetsky, Wez Furlong, Hartmut Holzgraefe, Georg Richter
diff --git a/ext/ncurses/EXPERIMENTAL b/ext/ncurses/EXPERIMENTAL
deleted file mode 100644
index e69de29bb2..0000000000
--- a/ext/ncurses/EXPERIMENTAL
+++ /dev/null
diff --git a/ext/ncurses/c-prototypes b/ext/ncurses/c-prototypes
deleted file mode 100644
index c98bd29730..0000000000
--- a/ext/ncurses/c-prototypes
+++ /dev/null
@@ -1,263 +0,0 @@
-+ int addch(int);
-+ int addchnstr(int *,int);
-+ int addchstr(int *);
-+ int addnstr(string,int);
-+ int addstr(string);
-+ int assume_default_colors (int,int);
-- int attr_get(int *,int *,void *);
-- int attr_off(int,void *);
-- int attr_on(int,void *);
-- int attr_set(int,int,void *);
-+ int attroff(int);
-+ int attron(int);
-+ int attrset(int);
-+ int baudrate(void);
-+ int beep(void);
-+ int bkgd(int);
-+ void bkgdset(int);
-+ int border(int,int,int,int,int,int,int,int);
-- int box(resource,int,int);
-+ bool can_change_color(void);
-+ int cbreak(void);
-- int chgat(int,int,int,void *);
-+ int clear(void);
-- int clearok(resource,bool);
-+ int clrtobot(void);
-+ int clrtoeol(void);
-- int color_content(int,int*,int*,int*);
-+ int color_set(int,void*);
-- int copywin(resource,resource,int,int,int,int,int,int,int);
-+ int curs_set(int);
-+ int def_prog_mode(void);
-+ int def_shell_mode(void);
-+ int define_key (string,int);
-+ int delay_output(int);
-+ int delch(void);
-+ int deleteln(void);
-- void delscreen(SCREEN *);
-+ int delwin(resource);
-+ int doupdate(void);
-+ int echo(void);
-+ int echochar(int);
-+ int endwin(void);
-+ int erase(void);
-+ char erasechar(void);
-+ void filter(void);
-+ int flash(void);
-+ int flushinp(void);
-- int getbkgd(resource);
-+ int getch(void);
-- int getmouse(MEVENT *);
-- int getnstr(string,int);
-- int getstr(string);
-+ int halfdelay(int);
-+ bool has_colors(void);
-+ bool has_ic(void);
-+ bool has_il(void);
-+ int has_key(int); /* do we have given key? */
-+ int hline(int,int);
-- void idcok(resource,bool);
-- int idlok(resource,bool);
-- void immedok(resource,bool);
-+ int inch(void);
--ma int inchnstr(int *,int);
-- int inchstr(int *);
-+ int init_color(int,int,int,int);
-+ int init_pair(int,int,int);
-- int innstr(string,int);
-+ int insch(int);
-+ int insdelln(int);
-+ int insertln(void);
-- int insnstr(string,int);
-+ int insstr(string);
-+ int instr(string);
-- int intrflush(resource,bool);
-- bool is_linetouched(resource,int);
-- bool is_wintouched(resource);
-+ bool isendwin(void);
-- int keyok (int,bool);
-- int keypad(resource,bool);
-+ char killchar(void);
-- int leaveok(resource,bool);
-- int mcprint(string,int); /* direct data to printer */
-- int meta(resource,bool);
-+ int mouseinterval(int);
-- mmask_t mousemask(mmask_t,mmask_t *);
-+ int move(int,int);
-+ int mvaddch(int,int,int);
-+ int mvaddchnstr(int,int,int *,int);
-+ int mvaddchstr(int,int,int *);
-+ int mvaddnstr(int,int,string,int);
-+ int mvaddstr(int,int,string);
-- int mvchgat(int,int,int,int,int,void *);
-+ int mvcur(int,int,int,int);
-+ int mvdelch(int,int);
-- int mvderwin(resource,int,int);
-+ int mvgetch(int,int);
-- int mvgetnstr(int,int,string,int);
-- int mvgetstr(int,int,string);
-+ int mvhline(int,int,int,int);
-+ int mvinch(int,int);
-- int mvinchnstr(int,int,int *,int);
-- int mvinchstr(int,int,int *);
-- int mvinnstr(int,int,string,int);
-- int mvinsch(int,int,int);
-- int mvinsnstr(int,int,string,int);
-- int mvinsstr(int,int,string);
-- int mvinstr(int,int,string);
-- int mvprintw(int,int, string,...);
-- int mvscanw(int,int, string,...);
-- int mvwaddch(resource,int,int,int);
-- int mvwaddchnstr(resource,int,int,int *,int);
-- int mvwaddchstr(resource,int,int,int *);
-- int mvwaddnstr(resource,int,int,string,int);
-- int mvwaddstr(resource,int,int,string);
-- int mvwchgat(resource,int,int,int,int,int,void *);
-- int mvwdelch(resource,int,int);
-- int mvwgetch(resource,int,int);
-- int mvwgetnstr(resource,int,int,string,int);
-- int mvwgetstr(resource,int,int,string);
-- int mvwhline(resource,int,int,int,int);
-- int mvwin(resource,int,int);
-- int mvwinch(resource,int,int);
-- int mvwinchstr(resource,int,int,int *);
-- int mvwinnstr(resource,int,int,string,int);
-- int mvwinsch(resource,int,int,int);
-- int mvwinsnstr(resource,int,int,string,int);
-- int mvwinsstr(resource,int,int,string);
-- int mvwinstr(resource,int,int,string);
-- int mvwinchnstr(resource,int,int,int *,int);
-- int mvwprintw(resource,int,int, string,...);
-- int mvwscanw(resource,int,int, string,...);
-- int mvwvline(resource,int,int,int,int);
-+ int napms(int);
-+ int nl(void);
-+ int nocbreak(void);
-- int nodelay(resource,bool);
-+ int noecho(void);
-+ int nonl(void);
-+ void noqiflush(void);
-+ int noraw(void);
-- int notimeout(resource,bool);
-- int overlay(resource,resource);
-- int overwrite(resource,resource);
-- int pair_content(int,int*,int*);
-- int pechochar(resource,int);
-- int pnoutrefresh(resource,int,int,int,int,int,int);
-- int prefresh(resource,int,int,int,int,int,int);
-- int printw( string,...);
-+ int putp(string);
-- int putwin(resource,FILE *);
-+ void qiflush(void);
-+ int raw(void);
-- int redrawwin(resource);
-+ int refresh(void);
-- int reset_prog_mode(void);
-- int reset_shell_mode(void);
-+ int resetty(void);
-- int resizeterm (int,int);
-- int ripoffline(int,int (*init)(resource,int));
-+ int savetty(void);
-- int scanw( string,...);
-+ int scr_dump(string);
-+ int scr_init(string);
-+ int scr_restore(string);
-+ int scr_set(string);
-+ int scrl(int);
-- int scroll(resource);
-- int scrollok(resource,bool);
-- int setscrreg(int,int);
-+ int slk_attroff(int);
-- int slk_attr_off(int,void *); /* generated:WIDEC */
-+ int slk_attron(int);
-- int slk_attr_on(int,void*); /* generated:WIDEC */
-+ int slk_attrset(int);
-+ int slk_attr(void);
-- int slk_attr_set(int,int,void*);
-+ int slk_clear(void);
-+ int slk_color(int);
-+ int slk_init(int);
-+ int slk_noutrefresh(void);
-- int slk_refresh(void);
-- int slk_restore(void);
-- int slk_set(int,string,int);
-- int slk_touch(void);
-+ int standend(void);
-+ int standout(void);
-+ int start_color(void);
-- int syncok(resource,bool);
-+ int termattrs(void);
-- int tigetflag( string);
-- int tigetnum( string);
-+ void timeout(int);
-+ int typeahead(int);
-+ int ungetch(int);
-- int ungetmouse(MEVENT *);
-- int untouchwin(resource);
-+ int use_default_colors (void);
-+ void use_env(bool);
-+ int use_extended_names (bool);
-+ int vidattr(int);
-- int vidputs(int,int (*)(int));
-- int vline(int,int);
-- int vw_printw(resource, string,va_list);
-- int vw_scanw(resource, string,va_list);
-- int vwprintw(resource, string,va_list);
-- int vwscanw(resource, string,va_list);
-- int waddch(resource,int);
-- int waddchnstr(resource,int *const,int);
-- int waddchstr(resource,int *);
-- int waddnstr(resource,stringconst,int);
-- int waddstr(resource,string);
-- int wattr_get(resource,int *,int *,void *);
-- int wattr_off(resource, int,void *);
-- int wattr_on(resource, int,void *);
-- int wattr_set(resource,int,int,void *);
-- int wattroff(resource,int);
-- int wattron(resource,int);
-- int wattrset(resource,int);
-- int wbkgd(resource,int);
-- void wbkgdset(resource,int);
-- int wborder(resource,int,int,int,int,int,int,int,int);
-- int wchgat(resource,int,int,int,void *);
-- int wclear(resource);
-- int wclrtobot(resource);
-- int wclrtoeol(resource);
-- int wcolor_set(resource,int,void*);
-- void wcursyncup(resource);
-- int wdelch(resource);
-- int wdeleteln(resource);
-- int wechochar(resource,int);
-- bool wenclose(resource,int,int);
-- int werase(resource);
-- int wgetch(resource);
-- int wgetnstr(resource,string,int);
-- int wgetstr(resource,string);
-- int whline(resource,int,int);
-- int winch(resource);
-- int winchnstr(resource,int *,int);
-- int winchstr(resource,int *);
-- int winnstr(resource,string,int);
-- int winsch(resource,int);
-- int winsdelln(resource,int);
-- int winsertln(resource);
-- int winsnstr(resource,string,int);
-- int winsstr(resource,string);
-- int winstr(resource,string);
-- bool wmouse_trafo(resource win,int* y,int* x,bool to_screen);
-- int wmove(resource,int,int);
-- int wnoutrefresh(resource);
-- int wprintw(resource, string,...);
-- int wredrawln(resource,int,int);
-- int wrefresh(resource);
-- int wresize (resource,int,int);
-- int wscanw(resource,string,...);
-- int wscrl(resource,int);
-- int wsetscrreg(resource,int,int);
-- int wstandend(resource);
-- int wstandout(resource);
-- void wsyncdown(resource);
-- void wsyncup(resource);
-- void wtimeout(resource,int);
-- int wtouchln(resource,int,int,int);
-- int wvline(resource,int,int);
diff --git a/ext/ncurses/config.m4 b/ext/ncurses/config.m4
deleted file mode 100644
index 28ae210fce..0000000000
--- a/ext/ncurses/config.m4
+++ /dev/null
@@ -1,65 +0,0 @@
-dnl
-dnl $Id$
-dnl
-
-PHP_ARG_WITH(ncurses, for ncurses support,
-[ --with-ncurses[=DIR] Include ncurses support (CLI/CGI only).])
-
-if test "$PHP_NCURSES" != "no"; then
-
- SEARCH_PATH="$PHP_NCURSES /usr/local /usr"
-
- for dir in $SEARCH_PATH; do
- for subdir in include/ncurses include; do
- if test -d $dir/$subdir; then
- if test -r $dir/$subdir/ncurses.h; then
- NCURSES_DIR=$dir
- NCURSES_INCDIR=$dir/$subdir
- AC_DEFINE(HAVE_NCURSES_H,1,[ ])
- break 2
- elif test -r $dir/$subdir/curses.h; then
- NCURSES_DIR=$dir
- NCURSES_INCDIR=$dir/$subdir
- break 2
- fi
- fi
- done
- done
-
- if test -z "$NCURSES_DIR"; then
- AC_MSG_RESULT(not found)
- AC_MSG_ERROR(Please reinstall the ncurses distribution)
- fi
-
- # --with-ncurses -> add include path
- PHP_ADD_INCLUDE($NCURSES_INCDIR)
-
- # --with-ncurses -> chech for lib and symbol presence
- LIBNAME=ncurses
- LIBSYMBOL=initscr
-
- PHP_CHECK_LIBRARY($LIBNAME, $LIBSYMBOL, [
- AC_DEFINE(HAVE_NCURSESLIB,1,[ ])
- PHP_ADD_LIBRARY_WITH_PATH($LIBNAME, $NCURSES_DIR/lib, NCURSES_SHARED_LIBADD)
-
- PHP_CHECK_LIBRARY(panel, new_panel, [
- AC_DEFINE(HAVE_NCURSES_PANEL,1,[ ])
- PHP_ADD_LIBRARY_WITH_PATH(panel, $NCURSES_DIR/lib, NCURSES_SHARED_LIBADD)
- ], [], [
- -L$NCURSES_DIR/lib -l$LIBNAME -lm
- ])
- ], [
- AC_MSG_ERROR(Wrong ncurses lib version or lib not found)
- ], [
- -L$NCURSES_DIR/lib -lm
- ])
-
- AC_CHECK_LIB($LIBNAME, color_set, [AC_DEFINE(HAVE_NCURSES_COLOR_SET, 1, [ ])])
- AC_CHECK_LIB($LIBNAME, slk_color, [AC_DEFINE(HAVE_NCURSES_SLK_COLOR, 1, [ ])])
- AC_CHECK_LIB($LIBNAME, assume_default_colors, [AC_DEFINE(HAVE_NCURSES_ASSUME_DEFAULT_COLORS, 1, [ ])])
- AC_CHECK_LIB($LIBNAME, use_extended_names, [AC_DEFINE(HAVE_NCURSES_USE_EXTENDED_NAMES, 1, [ ])])
-
- PHP_NEW_EXTENSION(ncurses, ncurses.c ncurses_fe.c ncurses_functions.c, $ext_shared, cli)
- PHP_SUBST(NCURSES_SHARED_LIBADD)
-
-fi
diff --git a/ext/ncurses/example1.php b/ext/ncurses/example1.php
deleted file mode 100644
index ca6977d95e..0000000000
--- a/ext/ncurses/example1.php
+++ /dev/null
@@ -1,28 +0,0 @@
-<?php
-$n=0;
-ncurses_init();
-if(ncurses_has_colors()){
-ncurses_start_color();
- ncurses_init_pair(1,NCURSES_COLOR_RED,NCURSES_COLOR_BLACK);
- ncurses_init_pair(2,NCURSES_COLOR_GREEN,NCURSES_COLOR_BLACK);
- ncurses_init_pair(3,NCURSES_COLOR_YELLOW,NCURSES_COLOR_BLACK);
- ncurses_init_pair(4,NCURSES_COLOR_BLUE,NCURSES_COLOR_BLACK);
- ncurses_init_pair(5,NCURSES_COLOR_MAGENTA,NCURSES_COLOR_BLACK);
- ncurses_init_pair(6,NCURSES_COLOR_CYAN,NCURSES_COLOR_BLACK);
- ncurses_init_pair(7,NCURSES_COLOR_WHITE,NCURSES_COLOR_BLACK);
-}
-while(1){
-for ($x=0; $x<80; $x++) {
-for ($y=0; $y<24; $y++) {
- $n++;
- ncurses_move($y,$x);
- ncurses_addch($n+64);
- ncurses_color_set($n%8);
- ncurses_refresh();
- if($n>26)$n=0;
-}
-}
-ncurses_getch();
-}
-?>
-
diff --git a/ext/ncurses/ncurses.c b/ext/ncurses/ncurses.c
deleted file mode 100644
index eedd8a32c0..0000000000
--- a/ext/ncurses/ncurses.c
+++ /dev/null
@@ -1,318 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Hartmut Holzgraefe <hholzgra@php.net> |
- +----------------------------------------------------------------------+
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "php.h"
-#include "php_ini.h"
-#include "php_ncurses.h"
-#include "ext/standard/info.h"
-
-ZEND_DECLARE_MODULE_GLOBALS(ncurses)
-
-/* True global resources - no need for thread safety here */
-int le_ncurses_windows;
-#if HAVE_NCURSES_PANEL
-int le_ncurses_panels;
-#endif
-
-static void ncurses_destruct_window(zend_rsrc_list_entry *rsrc TSRMLS_DC)
-{
- WINDOW **pwin = (WINDOW **)rsrc->ptr;
-
- delwin(*pwin);
- efree(pwin);
-}
-
-#if HAVE_NCURSES_PANEL
-static void ncurses_destruct_panel(zend_rsrc_list_entry *rsrc TSRMLS_DC)
-{
- PANEL **ppanel = (PANEL **)rsrc->ptr;
-
- del_panel(*ppanel);
- efree(ppanel);
-}
-#endif
-
-/* {{{ ncurses_module_entry
- */
-zend_module_entry ncurses_module_entry = {
- STANDARD_MODULE_HEADER,
- "ncurses",
- ncurses_functions,
- PHP_MINIT(ncurses),
- PHP_MSHUTDOWN(ncurses),
- PHP_RINIT(ncurses), /* Replace with NULL if there's nothing to do at request start */
- PHP_RSHUTDOWN(ncurses), /* Replace with NULL if there's nothing to do at request end */
- PHP_MINFO(ncurses),
- NO_VERSION_YET,
- STANDARD_MODULE_PROPERTIES
-};
-/* }}} */
-
-#ifdef COMPILE_DL_NCURSES
-ZEND_GET_MODULE(ncurses)
-#endif
-
-#define PHP_NCURSES_CONST(x) REGISTER_LONG_CONSTANT("NCURSES_"#x, x, CONST_CS | CONST_PERSISTENT)
-#define PHP_NCURSES_FKEY_CONST(x) REGISTER_LONG_CONSTANT("NCURSES_KEY_F"#x, KEY_F0 + x, CONST_CS | CONST_PERSISTENT)
-
-static void php_ncurses_init_globals(zend_ncurses_globals *ncurses_globals)
-{
- memset(ncurses_globals, 0, sizeof(*ncurses_globals));
-}
-
-/* {{{ PHP_MINIT_FUNCTION
- */
-PHP_MINIT_FUNCTION(ncurses)
-{
- /* color constants */
- PHP_NCURSES_CONST(COLOR_BLACK);
- PHP_NCURSES_CONST(COLOR_RED);
- PHP_NCURSES_CONST(COLOR_GREEN);
- PHP_NCURSES_CONST(COLOR_YELLOW);
- PHP_NCURSES_CONST(COLOR_BLUE);
- PHP_NCURSES_CONST(COLOR_MAGENTA);
- PHP_NCURSES_CONST(COLOR_CYAN);
- PHP_NCURSES_CONST(COLOR_WHITE);
-
- /* keyboard constants */
- PHP_NCURSES_CONST(KEY_DOWN);
- PHP_NCURSES_CONST(KEY_UP);
- PHP_NCURSES_CONST(KEY_LEFT);
- PHP_NCURSES_CONST(KEY_RIGHT);
- PHP_NCURSES_CONST(KEY_BACKSPACE);
- PHP_NCURSES_CONST(KEY_MOUSE);
- PHP_NCURSES_CONST(KEY_F0);
-
-
- /* TODO:this macro sux, we have 65 function key,
- so we need a little loop */
- PHP_NCURSES_FKEY_CONST(1);
- PHP_NCURSES_FKEY_CONST(2);
- PHP_NCURSES_FKEY_CONST(3);
- PHP_NCURSES_FKEY_CONST(4);
- PHP_NCURSES_FKEY_CONST(5);
- PHP_NCURSES_FKEY_CONST(6);
- PHP_NCURSES_FKEY_CONST(7);
- PHP_NCURSES_FKEY_CONST(8);
- PHP_NCURSES_FKEY_CONST(9);
- PHP_NCURSES_FKEY_CONST(10);
- PHP_NCURSES_FKEY_CONST(11);
- PHP_NCURSES_FKEY_CONST(12);
-
- PHP_NCURSES_CONST(KEY_DL);
- PHP_NCURSES_CONST(KEY_IL);
- PHP_NCURSES_CONST(KEY_DC);
- PHP_NCURSES_CONST(KEY_IC);
- PHP_NCURSES_CONST(KEY_EIC);
- PHP_NCURSES_CONST(KEY_CLEAR);
- PHP_NCURSES_CONST(KEY_EOS);
- PHP_NCURSES_CONST(KEY_EOL);
- PHP_NCURSES_CONST(KEY_SF);
- PHP_NCURSES_CONST(KEY_SR);
- PHP_NCURSES_CONST(KEY_NPAGE);
- PHP_NCURSES_CONST(KEY_PPAGE);
- PHP_NCURSES_CONST(KEY_STAB);
- PHP_NCURSES_CONST(KEY_CTAB);
- PHP_NCURSES_CONST(KEY_CATAB);
- PHP_NCURSES_CONST(KEY_ENTER);
- PHP_NCURSES_CONST(KEY_SRESET);
- PHP_NCURSES_CONST(KEY_RESET);
- PHP_NCURSES_CONST(KEY_PRINT);
- PHP_NCURSES_CONST(KEY_LL);
- PHP_NCURSES_CONST(KEY_A1);
- PHP_NCURSES_CONST(KEY_A3);
- PHP_NCURSES_CONST(KEY_B2);
- PHP_NCURSES_CONST(KEY_C1);
- PHP_NCURSES_CONST(KEY_C3);
- PHP_NCURSES_CONST(KEY_BTAB);
- PHP_NCURSES_CONST(KEY_BEG);
- PHP_NCURSES_CONST(KEY_CANCEL);
- PHP_NCURSES_CONST(KEY_CLOSE);
- PHP_NCURSES_CONST(KEY_COMMAND);
- PHP_NCURSES_CONST(KEY_COPY);
- PHP_NCURSES_CONST(KEY_CREATE);
- PHP_NCURSES_CONST(KEY_END);
- PHP_NCURSES_CONST(KEY_EXIT);
- PHP_NCURSES_CONST(KEY_FIND);
- PHP_NCURSES_CONST(KEY_HELP);
- PHP_NCURSES_CONST(KEY_MARK);
- PHP_NCURSES_CONST(KEY_MESSAGE);
- PHP_NCURSES_CONST(KEY_MOVE);
- PHP_NCURSES_CONST(KEY_NEXT);
- PHP_NCURSES_CONST(KEY_OPEN);
- PHP_NCURSES_CONST(KEY_OPTIONS);
- PHP_NCURSES_CONST(KEY_PREVIOUS);
- PHP_NCURSES_CONST(KEY_REDO);
- PHP_NCURSES_CONST(KEY_REFERENCE);
- PHP_NCURSES_CONST(KEY_REFRESH);
- PHP_NCURSES_CONST(KEY_REPLACE);
- PHP_NCURSES_CONST(KEY_RESTART);
- PHP_NCURSES_CONST(KEY_RESUME);
- PHP_NCURSES_CONST(KEY_SAVE);
- PHP_NCURSES_CONST(KEY_SBEG);
- PHP_NCURSES_CONST(KEY_SCANCEL);
- PHP_NCURSES_CONST(KEY_SCOMMAND);
- PHP_NCURSES_CONST(KEY_SCOPY);
- PHP_NCURSES_CONST(KEY_SCREATE);
- PHP_NCURSES_CONST(KEY_SDC);
- PHP_NCURSES_CONST(KEY_SDL);
- PHP_NCURSES_CONST(KEY_SELECT);
- PHP_NCURSES_CONST(KEY_SEND);
- PHP_NCURSES_CONST(KEY_SEOL);
- PHP_NCURSES_CONST(KEY_SEXIT);
- PHP_NCURSES_CONST(KEY_SFIND);
- PHP_NCURSES_CONST(KEY_SHELP);
- PHP_NCURSES_CONST(KEY_SHOME);
- PHP_NCURSES_CONST(KEY_SIC);
- PHP_NCURSES_CONST(KEY_SLEFT);
- PHP_NCURSES_CONST(KEY_SMESSAGE);
- PHP_NCURSES_CONST(KEY_SMOVE);
- PHP_NCURSES_CONST(KEY_SNEXT);
- PHP_NCURSES_CONST(KEY_SOPTIONS);
- PHP_NCURSES_CONST(KEY_SPREVIOUS);
- PHP_NCURSES_CONST(KEY_SPRINT);
- PHP_NCURSES_CONST(KEY_SREDO);
- PHP_NCURSES_CONST(KEY_SREPLACE);
- PHP_NCURSES_CONST(KEY_SRIGHT);
- PHP_NCURSES_CONST(KEY_SRSUME);
- PHP_NCURSES_CONST(KEY_SSAVE);
- PHP_NCURSES_CONST(KEY_SSUSPEND);
- PHP_NCURSES_CONST(KEY_SUNDO);
- PHP_NCURSES_CONST(KEY_SUSPEND);
- PHP_NCURSES_CONST(KEY_UNDO);
- PHP_NCURSES_CONST(KEY_RESIZE);
-
- /* screen attribute constants */
- PHP_NCURSES_CONST(A_NORMAL);
- PHP_NCURSES_CONST(A_STANDOUT);
- PHP_NCURSES_CONST(A_UNDERLINE);
- PHP_NCURSES_CONST(A_REVERSE);
- PHP_NCURSES_CONST(A_BLINK);
- PHP_NCURSES_CONST(A_DIM);
- PHP_NCURSES_CONST(A_BOLD);
- PHP_NCURSES_CONST(A_PROTECT);
- PHP_NCURSES_CONST(A_INVIS);
- PHP_NCURSES_CONST(A_ALTCHARSET);
- PHP_NCURSES_CONST(A_CHARTEXT);
-
- /* mouse constants */
- PHP_NCURSES_CONST(BUTTON1_PRESSED);
- PHP_NCURSES_CONST(BUTTON1_RELEASED);
- PHP_NCURSES_CONST(BUTTON1_CLICKED);
- PHP_NCURSES_CONST(BUTTON1_DOUBLE_CLICKED);
- PHP_NCURSES_CONST(BUTTON1_TRIPLE_CLICKED);
- PHP_NCURSES_CONST(BUTTON2_PRESSED);
- PHP_NCURSES_CONST(BUTTON2_RELEASED);
- PHP_NCURSES_CONST(BUTTON2_CLICKED);
- PHP_NCURSES_CONST(BUTTON2_DOUBLE_CLICKED);
- PHP_NCURSES_CONST(BUTTON2_TRIPLE_CLICKED);
- PHP_NCURSES_CONST(BUTTON3_PRESSED);
- PHP_NCURSES_CONST(BUTTON3_RELEASED);
- PHP_NCURSES_CONST(BUTTON3_CLICKED);
- PHP_NCURSES_CONST(BUTTON3_DOUBLE_CLICKED);
- PHP_NCURSES_CONST(BUTTON3_TRIPLE_CLICKED);
- PHP_NCURSES_CONST(BUTTON4_PRESSED);
- PHP_NCURSES_CONST(BUTTON4_RELEASED);
- PHP_NCURSES_CONST(BUTTON4_CLICKED);
- PHP_NCURSES_CONST(BUTTON4_DOUBLE_CLICKED);
- PHP_NCURSES_CONST(BUTTON4_TRIPLE_CLICKED);
- PHP_NCURSES_CONST(BUTTON_SHIFT);
- PHP_NCURSES_CONST(BUTTON_CTRL);
- PHP_NCURSES_CONST(BUTTON_ALT);
- PHP_NCURSES_CONST(ALL_MOUSE_EVENTS);
- PHP_NCURSES_CONST(REPORT_MOUSE_POSITION);
-
- ZEND_INIT_MODULE_GLOBALS(ncurses, php_ncurses_init_globals, NULL);
-
- le_ncurses_windows = zend_register_list_destructors_ex(ncurses_destruct_window, NULL, "ncurses_window", module_number);
-#if HAVE_NCURSES_PANEL
- le_ncurses_panels = zend_register_list_destructors_ex(ncurses_destruct_panel, NULL, "ncurses_panel", module_number);
-#endif
-
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ PHP_MSHUTDOWN_FUNCTION
- */
-PHP_MSHUTDOWN_FUNCTION(ncurses)
-{
- if (NCURSES_G(registered_constants)) {
- endwin();
- }
-
- return SUCCESS;
-}
-/* }}} */
-
-/* Remove if there's nothing to do at request start */
-/* {{{ PHP_RINIT_FUNCTION
- */
-PHP_RINIT_FUNCTION(ncurses)
-{
- return SUCCESS;
-}
-/* }}} */
-
-/* Remove if there's nothing to do at request end */
-/* {{{ PHP_RSHUTDOWN_FUNCTION
- */
-PHP_RSHUTDOWN_FUNCTION(ncurses)
-{
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ PHP_MINFO_FUNCTION
- */
-PHP_MINFO_FUNCTION(ncurses)
-{
- php_info_print_table_start();
- php_info_print_table_header(2, "ncurses support", "enabled");
- php_info_print_table_row(2, "ncurses library version", NCURSES_VERSION);
-#ifdef HAVE_NCURSES_COLOR_SET
- php_info_print_table_row(2, "color support", "yes");
-#else
- php_info_print_table_row(2, "color support", "no");
-#endif
- php_info_print_table_end();
-
- /* Remove comments if you have entries in php.ini
- DISPLAY_INI_ENTRIES();
- */
-}
-/* }}} */
-
-/* Remove the following function when you have succesfully modified config.m4
- so that your module can be compiled into PHP, it exists only for testing
- purposes. */
-
-
-
-/*
- * 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/ncurses/ncurses.php b/ext/ncurses/ncurses.php
deleted file mode 100644
index 416b1087e7..0000000000
--- a/ext/ncurses/ncurses.php
+++ /dev/null
@@ -1,10 +0,0 @@
-<?
-$module = 'ncurses';
-$function = 'confirm_' . $module . '_compiled';
-if (extension_loaded($module)) {
- $str = $function($module);
-} else {
- $str = "Module $module is not compiled into PHP";
-}
-echo "$str\n";
-?>
diff --git a/ext/ncurses/ncurses_fe.c b/ext/ncurses/ncurses_fe.c
deleted file mode 100644
index 71e6a7816c..0000000000
--- a/ext/ncurses/ncurses_fe.c
+++ /dev/null
@@ -1,238 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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. |
- +----------------------------------------------------------------------+
- | Authors: Hartmut Holzgraefe <hholzgra@php.net> |
- | Georg Richter <georg.richter@php-ev.de> |
- +----------------------------------------------------------------------+
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "php.h"
-#include "php_ini.h"
-#include "php_ncurses.h"
-
-static
- ZEND_BEGIN_ARG_INFO(firstandsecond_args_force_ref, 0)
- ZEND_ARG_PASS_INFO(1)
- ZEND_ARG_PASS_INFO(1)
- ZEND_END_ARG_INFO();
-
-static
- ZEND_BEGIN_ARG_INFO(secondandthird_args_force_ref, 0)
- ZEND_ARG_PASS_INFO(0)
- ZEND_ARG_PASS_INFO(1)
- ZEND_ARG_PASS_INFO(1)
- ZEND_END_ARG_INFO();
-
-static
- ZEND_BEGIN_ARG_INFO(second_thru_fourth_args_force_ref, 0)
- ZEND_ARG_PASS_INFO(0)
- ZEND_ARG_PASS_INFO(1)
- ZEND_ARG_PASS_INFO(1)
- ZEND_ARG_PASS_INFO(1)
- ZEND_END_ARG_INFO();
-
-/* ncurses_functions[]
- *
- * Every user visible function must have an entry in ncurses_functions[].
- */
-function_entry ncurses_functions[] = {
- PHP_FE(ncurses_addch, NULL)
-#ifdef HAVE_NCURSES_COLOR_SET
- PHP_FE(ncurses_color_set, NULL)
-#endif
- PHP_FE(ncurses_delwin, NULL)
- PHP_FE(ncurses_end, NULL)
- PHP_FE(ncurses_getch, NULL)
- PHP_FE(ncurses_has_colors, NULL)
- PHP_FE(ncurses_init, NULL)
- PHP_FE(ncurses_init_pair, NULL)
- PHP_FE(ncurses_color_content, second_thru_fourth_args_force_ref)
- PHP_FE(ncurses_pair_content, secondandthird_args_force_ref)
- PHP_FE(ncurses_move, NULL)
- PHP_FE(ncurses_newwin, NULL)
- PHP_FE(ncurses_refresh, NULL)
- PHP_FE(ncurses_start_color, NULL)
- PHP_FE(ncurses_standout, NULL)
- PHP_FE(ncurses_standend, NULL)
- PHP_FE(ncurses_baudrate, NULL)
- PHP_FE(ncurses_beep, NULL)
- PHP_FE(ncurses_can_change_color, NULL)
- PHP_FE(ncurses_cbreak, NULL)
- PHP_FE(ncurses_clear, NULL)
- PHP_FE(ncurses_clrtobot, NULL)
- PHP_FE(ncurses_clrtoeol, NULL)
- PHP_FE(ncurses_def_prog_mode, NULL)
- PHP_FE(ncurses_reset_prog_mode, NULL)
- PHP_FE(ncurses_def_shell_mode, NULL)
- PHP_FE(ncurses_reset_shell_mode, NULL)
- PHP_FE(ncurses_delch, NULL)
- PHP_FE(ncurses_deleteln, NULL)
- PHP_FE(ncurses_doupdate, NULL)
- PHP_FE(ncurses_echo, NULL)
- PHP_FE(ncurses_erase, NULL)
- PHP_FE(ncurses_werase, NULL)
- PHP_FE(ncurses_erasechar, NULL)
- PHP_FE(ncurses_flash, NULL)
- PHP_FE(ncurses_flushinp, NULL)
- PHP_FE(ncurses_has_ic, NULL)
- PHP_FE(ncurses_has_il, NULL)
- PHP_FE(ncurses_inch, NULL)
- PHP_FE(ncurses_insertln, NULL)
- PHP_FE(ncurses_isendwin, NULL)
- PHP_FE(ncurses_killchar, NULL)
- PHP_FE(ncurses_nl, NULL)
- PHP_FE(ncurses_nocbreak, NULL)
- PHP_FE(ncurses_noecho, NULL)
- PHP_FE(ncurses_nonl, NULL)
- PHP_FE(ncurses_noraw, NULL)
- PHP_FE(ncurses_raw, NULL)
- PHP_FE(ncurses_meta, NULL)
- PHP_FE(ncurses_resetty, NULL)
- PHP_FE(ncurses_savetty, NULL)
- PHP_FE(ncurses_termattrs, NULL)
- PHP_FE(ncurses_use_default_colors, NULL)
- PHP_FE(ncurses_slk_attr, NULL)
- PHP_FE(ncurses_slk_clear, NULL)
- PHP_FE(ncurses_slk_noutrefresh, NULL)
- PHP_FE(ncurses_slk_refresh, NULL)
- PHP_FE(ncurses_slk_restore, NULL)
- PHP_FE(ncurses_slk_touch, NULL)
- PHP_FE(ncurses_attroff, NULL)
- PHP_FE(ncurses_attron, NULL)
- PHP_FE(ncurses_attrset, NULL)
- PHP_FE(ncurses_bkgd, NULL)
- PHP_FE(ncurses_curs_set, NULL)
- PHP_FE(ncurses_delay_output, NULL)
- PHP_FE(ncurses_echochar, NULL)
- PHP_FE(ncurses_halfdelay, NULL)
- PHP_FE(ncurses_has_key, NULL)
- PHP_FE(ncurses_insch, NULL)
- PHP_FE(ncurses_insdelln, NULL)
- PHP_FE(ncurses_mouseinterval, NULL)
- PHP_FE(ncurses_napms, NULL)
- PHP_FE(ncurses_scrl, NULL)
- PHP_FE(ncurses_slk_attroff, NULL)
- PHP_FE(ncurses_slk_attron, NULL)
- PHP_FE(ncurses_slk_attrset, NULL)
-#ifdef HAVE_NCURSES_SLK_COLOR
- PHP_FE(ncurses_slk_color, NULL)
-#endif
- PHP_FE(ncurses_slk_init, NULL)
- PHP_FE(ncurses_slk_set, NULL)
- PHP_FE(ncurses_typeahead, NULL)
- PHP_FE(ncurses_ungetch, NULL)
- PHP_FE(ncurses_vidattr, NULL)
- PHP_FE(ncurses_wrefresh, NULL)
-#ifdef HAVE_NCURSES_USE_EXTENDED_NAMES
- PHP_FE(ncurses_use_extended_names, NULL)
-#endif
- PHP_FE(ncurses_bkgdset, NULL)
- PHP_FE(ncurses_filter, NULL)
- PHP_FE(ncurses_noqiflush, NULL)
- PHP_FE(ncurses_qiflush, NULL)
- PHP_FE(ncurses_timeout, NULL)
- PHP_FE(ncurses_use_env, NULL)
- PHP_FE(ncurses_addstr, NULL)
- PHP_FE(ncurses_putp, NULL)
- PHP_FE(ncurses_scr_dump, NULL)
- PHP_FE(ncurses_scr_init, NULL)
- PHP_FE(ncurses_scr_restore, NULL)
- PHP_FE(ncurses_scr_set, NULL)
- PHP_FE(ncurses_mvaddch, NULL)
- PHP_FE(ncurses_mvaddchnstr, NULL)
- PHP_FE(ncurses_addchnstr, NULL)
- PHP_FE(ncurses_mvaddchstr, NULL)
- PHP_FE(ncurses_addchstr, NULL)
- PHP_FE(ncurses_mvaddnstr, NULL)
- PHP_FE(ncurses_addnstr, NULL)
- PHP_FE(ncurses_mvaddstr, NULL)
- PHP_FE(ncurses_mvdelch, NULL)
- PHP_FE(ncurses_mvgetch, NULL)
- PHP_FE(ncurses_mvinch, NULL)
- PHP_FE(ncurses_mvwaddstr, NULL)
- PHP_FE(ncurses_insstr, NULL)
- PHP_FE(ncurses_instr, first_arg_force_ref)
- PHP_FE(ncurses_mvhline, NULL)
- PHP_FE(ncurses_mvcur, NULL)
- PHP_FE(ncurses_init_color, NULL)
- PHP_FE(ncurses_border, NULL)
-#ifdef HAVE_NCURSES_ASSUME_DEFAULT_COLORS
- PHP_FE(ncurses_assume_default_colors, NULL)
-#endif
- PHP_FE(ncurses_define_key, NULL)
- PHP_FE(ncurses_hline, NULL)
- PHP_FE(ncurses_vline, NULL)
- PHP_FE(ncurses_keyok, NULL)
- PHP_FE(ncurses_termname, NULL)
- PHP_FE(ncurses_longname, NULL)
- PHP_FE(ncurses_mousemask, second_arg_force_ref)
- PHP_FE(ncurses_getmouse, first_arg_force_ref)
- PHP_FE(ncurses_ungetmouse, NULL)
- PHP_FE(ncurses_mouse_trafo, firstandsecond_args_force_ref)
- PHP_FE(ncurses_wmouse_trafo, secondandthird_args_force_ref)
- PHP_FE(ncurses_waddstr, NULL)
- PHP_FE(ncurses_wnoutrefresh, NULL)
- PHP_FE(ncurses_wclear, NULL)
-#ifdef HAVE_NCURSES_COLOR_SET
- PHP_FE(ncurses_wcolor_set, NULL)
-#endif
- PHP_FE(ncurses_wgetch, NULL)
- PHP_FE(ncurses_keypad, NULL)
- PHP_FE(ncurses_wmove, NULL)
-
- PHP_FE(ncurses_newpad, NULL)
- PHP_FE(ncurses_prefresh, NULL)
- PHP_FE(ncurses_pnoutrefresh, NULL)
- PHP_FE(ncurses_wstandout, NULL)
- PHP_FE(ncurses_wstandend, NULL)
- PHP_FE(ncurses_wattrset, NULL)
- PHP_FE(ncurses_wattron, NULL)
- PHP_FE(ncurses_wattroff, NULL)
- PHP_FE(ncurses_waddch, NULL)
- PHP_FE(ncurses_wborder, NULL)
- PHP_FE(ncurses_whline, NULL)
- PHP_FE(ncurses_wvline, NULL)
- PHP_FE(ncurses_getyx, secondandthird_args_force_ref)
- PHP_FE(ncurses_getmaxyx, secondandthird_args_force_ref)
-
-#if HAVE_NCURSES_PANEL
- PHP_FE(ncurses_update_panels, NULL)
- PHP_FE(ncurses_panel_window, NULL)
- PHP_FE(ncurses_panel_below, NULL)
- PHP_FE(ncurses_panel_above, NULL)
- PHP_FE(ncurses_replace_panel, NULL)
- PHP_FE(ncurses_move_panel, NULL)
- PHP_FE(ncurses_bottom_panel, NULL)
- PHP_FE(ncurses_top_panel, NULL)
- PHP_FE(ncurses_show_panel, NULL)
- PHP_FE(ncurses_hide_panel, NULL)
- PHP_FE(ncurses_del_panel, NULL)
- PHP_FE(ncurses_new_panel, NULL)
-#endif
-
- {NULL, NULL, NULL} /* Must be the last line in ncurses_functions[] */
-};
-
-/*
- * 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/ncurses/ncurses_functions.c b/ext/ncurses/ncurses_functions.c
deleted file mode 100644
index 90d416eb46..0000000000
--- a/ext/ncurses/ncurses_functions.c
+++ /dev/null
@@ -1,2458 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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. |
- +----------------------------------------------------------------------+
- | Authors: Hartmut Holzgraefe <hholzgra@php.net> |
- | Georg Richter <georg.richter@php-ev.de> |
- +----------------------------------------------------------------------+
-*/
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "php.h"
-#include "php_ini.h"
-#include "php_ncurses.h"
-
-#define FETCH_WINRES(r, z) ZEND_FETCH_RESOURCE(r, WINDOW **, z, -1, "ncurses_window", le_ncurses_windows)
-#if HAVE_NCURSES_PANEL
-# define FETCH_PANEL(r, z) ZEND_FETCH_RESOURCE(r, PANEL **, z, -1, "ncurses_panel", le_ncurses_panels)
-#endif
-
-#define IS_NCURSES_INITIALIZED() \
- if (!NCURSES_G(registered_constants)) { \
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "You must initialize ncruses via ncurses_init(), before calling any ncurses functions."); \
- RETURN_FALSE; \
- }
-
-/* {{{ proto int ncurses_addch(int ch)
- Adds character at current position and advance cursor */
-PHP_FUNCTION(ncurses_addch)
-{
- long ch;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &ch) == FAILURE) {
- return;
- }
-
- IS_NCURSES_INITIALIZED();
- RETURN_LONG(addch(ch));
-}
-/* }}} */
-
-/* {{{ proto int ncurses_waddch(resource window, int ch)
- Adds character at current position in a window and advance cursor */
-PHP_FUNCTION(ncurses_waddch)
-{
- long ch;
- zval *handle;
- WINDOW **win;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rl", &handle, &ch) == FAILURE) {
- return;
- }
-
- FETCH_WINRES(win, &handle);
-
- RETURN_LONG(waddch(*win, ch));
-}
-/* }}} */
-
-#ifdef HAVE_NCURSES_COLOR_SET
-/* {{{ proto int ncurses_color_set(int pair)
- Sets fore- and background color */
-PHP_FUNCTION(ncurses_color_set)
-{
- long pair;
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &pair) == FAILURE) {
- return;
- }
- IS_NCURSES_INITIALIZED();
- RETURN_LONG(color_set(pair,NULL));
-}
-/* }}} */
-#endif
-
-/* {{{ proto int ncurses_delwin(resource window)
- Deletes a ncurses window */
-PHP_FUNCTION(ncurses_delwin)
-{
- zval *handle;
- WINDOW **w;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &handle) == FAILURE) {
- return;
- }
-
- FETCH_WINRES(w, &handle);
-
- zend_list_delete(Z_LVAL_P(handle));
-}
-/* }}} */
-
-/* {{{ proto int ncurses_end(void)
- Stops using ncurses, clean up the screen */
-PHP_FUNCTION(ncurses_end)
-{
- IS_NCURSES_INITIALIZED();
- RETURN_LONG(endwin()); /* endialize the curses library */
-}
-/* }}} */
-
-/* {{{ proto int ncurses_getch(void)
- Reads a character from keyboard */
-PHP_FUNCTION(ncurses_getch)
-{
- IS_NCURSES_INITIALIZED();
- RETURN_LONG(getch());
-}
-/* }}} */
-
-/* {{{ proto bool ncurses_has_colors(void)
- Checks if terminal has colors */
-PHP_FUNCTION(ncurses_has_colors)
-{
- IS_NCURSES_INITIALIZED();
- RETURN_BOOL(has_colors());
-}
-/* }}} */
-
-/* {{{ proto int ncurses_init(void)
- Initializes ncurses */
-PHP_FUNCTION(ncurses_init)
-{
- initscr(); /* initialize the curses library */
- keypad(stdscr, TRUE); /* enable keyboard mapping */
- (void) nonl(); /* tell curses not to do NL->CR/NL on output */
- (void) cbreak(); /* take input chars one at a time, no wait for \n */
-
- if (!NCURSES_G(registered_constants)) {
- zend_constant c;
-
- WINDOW **pscr = (WINDOW**)emalloc(sizeof(WINDOW *));
- zval *zscr;
-
- *pscr = stdscr;
- MAKE_STD_ZVAL(zscr);
- ZEND_REGISTER_RESOURCE(zscr, pscr, le_ncurses_windows);
- c.value = *zscr;
- zval_copy_ctor(&c.value);
- c.flags = CONST_CS;
- c.name = zend_strndup(ZEND_STRS("STDSCR"));
- c.name_len = sizeof("STDSCR");
- zend_register_constant(&c TSRMLS_CC);
-
- /* we need this "interesting" arrangement because the
- * underlying values of the ACS_XXX defines are not
- * initialized until after ncurses has been initialized */
-
-#define PHP_NCURSES_DEF_CONST(x) \
- ZVAL_LONG(zscr, x); \
- c.value = *zscr; \
- zval_copy_ctor(&c.value); \
- c.flags = CONST_CS; \
- c.name = zend_strndup(ZEND_STRS("NCURSES_" #x)); \
- c.name_len = sizeof("NCURSES_" #x); \
- zend_register_constant(&c TSRMLS_CC)
-
- PHP_NCURSES_DEF_CONST(ACS_ULCORNER);
- PHP_NCURSES_DEF_CONST(ACS_LLCORNER);
- PHP_NCURSES_DEF_CONST(ACS_URCORNER);
- PHP_NCURSES_DEF_CONST(ACS_LRCORNER);
- PHP_NCURSES_DEF_CONST(ACS_LTEE);
- PHP_NCURSES_DEF_CONST(ACS_RTEE);
- PHP_NCURSES_DEF_CONST(ACS_BTEE);
- PHP_NCURSES_DEF_CONST(ACS_TTEE);
- PHP_NCURSES_DEF_CONST(ACS_HLINE);
- PHP_NCURSES_DEF_CONST(ACS_VLINE);
- PHP_NCURSES_DEF_CONST(ACS_PLUS);
- PHP_NCURSES_DEF_CONST(ACS_S1);
- PHP_NCURSES_DEF_CONST(ACS_S9);
- PHP_NCURSES_DEF_CONST(ACS_DIAMOND);
- PHP_NCURSES_DEF_CONST(ACS_CKBOARD);
- PHP_NCURSES_DEF_CONST(ACS_DEGREE);
- PHP_NCURSES_DEF_CONST(ACS_PLMINUS);
- PHP_NCURSES_DEF_CONST(ACS_BULLET);
- PHP_NCURSES_DEF_CONST(ACS_LARROW);
- PHP_NCURSES_DEF_CONST(ACS_RARROW);
- PHP_NCURSES_DEF_CONST(ACS_DARROW);
- PHP_NCURSES_DEF_CONST(ACS_UARROW);
- PHP_NCURSES_DEF_CONST(ACS_BOARD);
- PHP_NCURSES_DEF_CONST(ACS_LANTERN);
- PHP_NCURSES_DEF_CONST(ACS_BLOCK);
-
- FREE_ZVAL(zscr);
- NCURSES_G(registered_constants) = 1;
- }
-}
-/* }}} */
-
-/* {{{ proto int ncurses_init_pair(int pair, int fg, int bg)
- Allocates a color pair */
-PHP_FUNCTION(ncurses_init_pair)
-{
- long pair, fg, bg;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "lll", &pair, &fg, &bg) == FAILURE) {
- return;
- }
- IS_NCURSES_INITIALIZED();
- RETURN_LONG(init_pair(pair,fg,bg));
-}
-/* }}} */
-
-/* {{{ proto int ncurses_move(int y, int x)
- Moves output position */
-PHP_FUNCTION(ncurses_move)
-{
- long x, y;
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ll", &y, &x) == FAILURE) {
- return;
- }
- IS_NCURSES_INITIALIZED();
- RETURN_LONG(move(y,x));
-}
-/* }}} */
-
-/* {{{ proto resource ncurses_newpad(int rows, int cols)
- Creates a new pad (window) */
-PHP_FUNCTION(ncurses_newpad)
-{
- long rows,cols;
- WINDOW **pwin;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ll", &rows, &cols) == FAILURE) {
- return;
- }
- IS_NCURSES_INITIALIZED();
-
- pwin = (WINDOW **)emalloc(sizeof(WINDOW *));
- *pwin = newpad(rows,cols);
-
- if(!*pwin) {
- efree(pwin);
- RETURN_FALSE;
- }
-
- ZEND_REGISTER_RESOURCE(return_value, pwin, le_ncurses_windows);
-
-}
-/* }}} */
-
-/* {{{ proto int ncurses_prefresh(resource pad, int pminrow, int pmincol, int sminrow, int smincol, int smaxrow, int smaxcol)
- Copys a region from a pad into the virtual screen */
-PHP_FUNCTION(ncurses_prefresh)
-{
- WINDOW **pwin;
- zval *phandle;
- long pminrow, pmincol, sminrow, smincol, smaxrow, smaxcol;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rllllll", &phandle, &pminrow,
- &pmincol, &sminrow, &smincol, &smaxrow, &smaxcol) == FAILURE) {
- return;
- }
-
- FETCH_WINRES(pwin, &phandle);
-
- RETURN_LONG(prefresh(*pwin, pminrow, pmincol, sminrow, smincol, smaxrow, smaxcol));
-}
-/* }}} */
-
-/* {{{ proto int ncurses_pnoutrefresh(resource pad, int pminrow, int pmincol, int sminrow, int smincol, int smaxrow, int smaxcol)
- Copys a region from a pad into the virtual screen */
-PHP_FUNCTION(ncurses_pnoutrefresh)
-{
- WINDOW **pwin;
- zval *phandle;
- long pminrow, pmincol, sminrow, smincol, smaxrow, smaxcol;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rllllll", &phandle, &pminrow,
- &pmincol, &sminrow, &smincol, &smaxrow, &smaxcol) == FAILURE) {
- return;
- }
-
- FETCH_WINRES(pwin, &phandle);
-
- RETURN_LONG(pnoutrefresh(*pwin, pminrow, pmincol, sminrow, smincol, smaxrow, smaxcol));
-}
-/* }}} */
-
-
-
-/* {{{ proto int ncurses_newwin(int rows, int cols, int y, int x)
- Creates a new window */
-PHP_FUNCTION(ncurses_newwin)
-{
- long rows,cols,y,x;
- WINDOW **pwin;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "llll", &rows, &cols, &y, &x) == FAILURE) {
- return;
- }
-
- IS_NCURSES_INITIALIZED();
- pwin = (WINDOW **)emalloc(sizeof(WINDOW *));
- *pwin=newwin(rows,cols,y,x);
-
- if(!*pwin) {
- efree(pwin);
- RETURN_FALSE;
- }
-
- ZEND_REGISTER_RESOURCE(return_value, pwin, le_ncurses_windows);
-}
-/* }}} */
-
-/* {{{ proto int ncurses_refresh(int ch)
- Refresh screen */
-PHP_FUNCTION(ncurses_refresh)
-{
- IS_NCURSES_INITIALIZED();
- RETURN_LONG(refresh());
-}
-/* }}} */
-
-/* {{{ proto int ncurses_start_color(void)
- Starts using colors */
-PHP_FUNCTION(ncurses_start_color)
-{
- IS_NCURSES_INITIALIZED();
- RETURN_LONG(start_color());
-}
-/* }}} */
-
-/* {{{ proto int ncurses_standout(void)
- Starts using 'standout' attribute */
-PHP_FUNCTION(ncurses_standout)
-{
- IS_NCURSES_INITIALIZED();
- RETURN_LONG(standout());
-}
-/* }}} */
-
-/* {{{ proto int ncurses_standend(void)
- Stops using 'standout' attribute */
-PHP_FUNCTION(ncurses_standend)
-{
- IS_NCURSES_INITIALIZED();
- RETURN_LONG(standend());
-}
-/* }}} */
-
-/* {{{ proto int ncurses_baudrate(void)
- Returns baudrate of terminal */
-PHP_FUNCTION(ncurses_baudrate)
-{
- IS_NCURSES_INITIALIZED();
- RETURN_LONG(baudrate());
-}
-/* }}} */
-
-/* {{{ proto int ncurses_beep(void)
- Let the terminal beep */
-PHP_FUNCTION(ncurses_beep)
-{
- IS_NCURSES_INITIALIZED();
- RETURN_LONG(beep());
-}
-/* }}} */
-
-/* {{{ proto bool ncurses_can_change_color(void)
- Checks if we can change terminals colors */
-PHP_FUNCTION(ncurses_can_change_color)
-{
- IS_NCURSES_INITIALIZED();
- RETURN_LONG(can_change_color());
-}
-/* }}} */
-
-/* {{{ proto bool ncurses_cbreak(void)
- Switches of input buffering */
-PHP_FUNCTION(ncurses_cbreak)
-{
- IS_NCURSES_INITIALIZED();
- RETURN_LONG(cbreak());
-}
-/* }}} */
-
-/* {{{ proto bool ncurses_clear(void)
- Clears screen */
-PHP_FUNCTION(ncurses_clear)
-{
- IS_NCURSES_INITIALIZED();
- RETURN_LONG(clear());
-}
-/* }}} */
-
-/* {{{ proto bool ncurses_clrtobot(void)
- Clears screen from current position to bottom */
-PHP_FUNCTION(ncurses_clrtobot)
-{
- IS_NCURSES_INITIALIZED();
- RETURN_LONG(clrtobot());
-}
-/* }}} */
-
-/* {{{ proto bool ncurses_clrtoeol(void)
- Clears screen from current position to end of line */
-PHP_FUNCTION(ncurses_clrtoeol)
-{
- IS_NCURSES_INITIALIZED();
- RETURN_LONG(clrtoeol());
-}
-/* }}} */
-
-/* {{{ proto int ncurses_reset_prog_mode(void)
- Resets the prog mode saved by def_prog_mode */
-PHP_FUNCTION(ncurses_reset_prog_mode)
-{
- IS_NCURSES_INITIALIZED();
- RETURN_LONG(reset_prog_mode());
-}
-/* }}} */
-
-/* {{{ proto int ncurses_reset_shell_mode(void)
- Resets the shell mode saved by def_shell_mode */
-PHP_FUNCTION(ncurses_reset_shell_mode)
-{
- IS_NCURSES_INITIALIZED();
- RETURN_LONG(reset_shell_mode());
-}
-/* }}} */
-
-/* {{{ proto int ncurses_def_prog_mode(void)
- Saves terminals (program) mode */
-PHP_FUNCTION(ncurses_def_prog_mode)
-{
- IS_NCURSES_INITIALIZED();
- RETURN_LONG(def_prog_mode());
-}
-/* }}} */
-
-/* {{{ proto int ncurses_def_shell_mode(void)
- Saves terminal (shell) mode*/
-PHP_FUNCTION(ncurses_def_shell_mode)
-{
- IS_NCURSES_INITIALIZED();
- RETURN_LONG(def_shell_mode());
-}
-/* }}} */
-
-/* {{{ proto int ncurses_delch(void)
- Deletes character at current position, move rest of line left */
-PHP_FUNCTION(ncurses_delch)
-{
- IS_NCURSES_INITIALIZED();
- RETURN_LONG(delch());
-}
-/* }}} */
-
-/* {{{ proto int ncurses_deleteln(void)
- Deletes line at current position, move rest of screen up */
-PHP_FUNCTION(ncurses_deleteln)
-{
- IS_NCURSES_INITIALIZED();
- RETURN_LONG(deleteln());
-}
-/* }}} */
-
-/* {{{ proto int ncurses_doupdate(void)
- Writes all prepared refreshes to terminal */
-PHP_FUNCTION(ncurses_doupdate)
-{
- IS_NCURSES_INITIALIZED();
- RETURN_LONG(doupdate());
-}
-/* }}} */
-
-/* {{{ proto int ncurses_echo(void)
- Activates keyboard input echo */
-PHP_FUNCTION(ncurses_echo)
-{
- IS_NCURSES_INITIALIZED();
- RETURN_LONG(echo());
-}
-/* }}} */
-
-/* {{{ proto int ncurses_erase(void)
- Erases terminal screen */
-PHP_FUNCTION(ncurses_erase)
-{
- IS_NCURSES_INITIALIZED();
- RETURN_LONG(erase());
-}
-/* }}} */
-
-/* {{{ proto string ncurses_erasechar(void)
- Returns current erase character */
-PHP_FUNCTION(ncurses_erasechar)
-{
- char temp[2];
-
- IS_NCURSES_INITIALIZED();
- temp[0] = erasechar();
- temp[1] = '\0';
-
- RETURN_STRINGL (temp, 1, 1);
-}
-/* }}} */
-
-/* {{{ proto int ncurses_flash(void)
- Flashes terminal screen (visual bell) */
-PHP_FUNCTION(ncurses_flash)
-{
- IS_NCURSES_INITIALIZED();
- RETURN_LONG(flash());
-}
-/* }}} */
-
-/* {{{ proto int ncurses_flushinp(void)
- Flushes keyboard input buffer */
-PHP_FUNCTION(ncurses_flushinp)
-{
- IS_NCURSES_INITIALIZED();
- RETURN_LONG(flushinp());
-}
-/* }}} */
-
-/* {{{ proto int ncurses_has_ic(void)
- Checks for insert- and delete-capabilities */
-PHP_FUNCTION(ncurses_has_ic)
-{
- IS_NCURSES_INITIALIZED();
- RETURN_LONG(has_ic());
-}
-/* }}} */
-
-
-/* {{{ proto int ncurses_has_il(void)
- Checks for line insert- and delete-capabilities */
-PHP_FUNCTION(ncurses_has_il)
-{
- IS_NCURSES_INITIALIZED();
- RETURN_LONG(has_il());
-}
-/* }}} */
-
-/* {{{ proto string ncurses_inch(void)
- Gets character and attribute at current position */
-PHP_FUNCTION(ncurses_inch)
-{
- char temp[2];
-
- IS_NCURSES_INITIALIZED();
- temp[0] = inch();
- temp[1] = '\0';
-
- RETURN_STRINGL (temp, 1, 1);
-}
-/* }}} */
-
-/* {{{ proto int ncurses_insertln(void)
- Inserts a line, move rest of screen down */
-PHP_FUNCTION(ncurses_insertln)
-{
- IS_NCURSES_INITIALIZED();
- RETURN_LONG(insertln());
-}
-/* }}} */
-
-/* {{{ proto int ncurses_isendwin(void)
- Ncurses is in endwin mode, normal screen output may be performed */
-PHP_FUNCTION(ncurses_isendwin)
-{
- IS_NCURSES_INITIALIZED();
- RETURN_LONG(isendwin());
-}
-/* }}} */
-
-/* {{{ proto string ncurses_killchar(void)
- Returns current line kill character */
-PHP_FUNCTION(ncurses_killchar)
-{
- char temp[2];
-
- IS_NCURSES_INITIALIZED();
- temp[0] = killchar();
- temp[1] = '\0';
-
- RETURN_STRINGL (temp, 1, 1);
-}
-/* }}} */
-
-/* {{{ proto int ncurses_nl(void)
- Translates newline and carriage return / line feed */
-PHP_FUNCTION(ncurses_nl)
-{
- IS_NCURSES_INITIALIZED();
- RETURN_LONG(nl());
-}
-/* }}} */
-
-/* {{{ proto int ncurses_nocbreak(void)
- Switches terminal to cooked mode */
-PHP_FUNCTION(ncurses_nocbreak)
-{
- IS_NCURSES_INITIALIZED();
- RETURN_LONG(nocbreak());
-}
-/* }}} */
-
-/* {{{ proto int ncurses_noecho(void)
- Switches off keyboard input echo */
-PHP_FUNCTION(ncurses_noecho)
-{
- IS_NCURSES_INITIALIZED();
- RETURN_LONG(noecho());
-}
-/* }}} */
-
-/* {{{ proto int ncurses_nonl(void)
- Do not ranslate newline and carriage return / line feed */
-PHP_FUNCTION(ncurses_nonl)
-{
- RETURN_LONG(nonl());
-}
-/* }}} */
-
-/* {{{ proto bool ncurses_noraw(void)
- Switches terminal out of raw mode */
-PHP_FUNCTION(ncurses_noraw)
-{
- IS_NCURSES_INITIALIZED();
- RETURN_LONG(noraw());
-}
-/* }}} */
-
-/* {{{ proto int ncurses_raw(void)
- Switches terminal into raw mode */
-PHP_FUNCTION(ncurses_raw)
-{
- IS_NCURSES_INITIALIZED();
- RETURN_LONG(raw());
-}
-/* }}} */
-
-/* {{{ proto int ncurses_meta(resource window, bool 8bit)
- Enables/Disable 8-bit meta key information */
-PHP_FUNCTION(ncurses_meta)
-{
- zend_bool enable;
- zval *handle;
- WINDOW **win;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rb", &handle, &enable) == FAILURE) {
- return;
- }
-
- FETCH_WINRES(win, &handle);
-
- RETURN_LONG(meta(*win, enable));
-}
-/* }}} */
-
-/* {{{ proto int ncurses_werase(resource window)
- Erase window contents */
-PHP_FUNCTION(ncurses_werase)
-{
- zval *handle;
- WINDOW **win;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &handle) == FAILURE) {
- return;
- }
-
- FETCH_WINRES(win, &handle);
-
- RETURN_LONG(werase(*win));
-}
-/* }}} */
-
-
-/* {{{ proto int ncurses_resetty(void)
- Restores saved terminal state */
-PHP_FUNCTION(ncurses_resetty)
-{
- IS_NCURSES_INITIALIZED();
- RETURN_LONG(resetty());
-}
-/* }}} */
-
-/* {{{ proto int ncurses_savetty(void)
- Saves terminal state */
-PHP_FUNCTION(ncurses_savetty)
-{
- IS_NCURSES_INITIALIZED();
- RETURN_LONG(savetty());
-}
-/* }}} */
-
-/* {{{ proto int ncurses_termattrs(void)
- Returns a logical OR of all attribute flags supported by terminal */
-PHP_FUNCTION(ncurses_termattrs)
-{
- IS_NCURSES_INITIALIZED();
- RETURN_LONG(termattrs());
-}
-/* }}} */
-
-/* {{{ proto int ncurses_use_default_colors(void)
- Assigns terminal default colors to color id -1 */
-PHP_FUNCTION(ncurses_use_default_colors)
-{
- IS_NCURSES_INITIALIZED();
- RETURN_LONG(use_default_colors());
-}
-/* }}} */
-
-/* {{{ proto int ncurses_slk_attr(void)
- Returns current soft label keys attribute */
-PHP_FUNCTION(ncurses_slk_attr)
-{
- IS_NCURSES_INITIALIZED();
- RETURN_LONG(slk_attr());
-}
-/* }}} */
-
-/* {{{ proto int ncurses_slk_clear(void)
- Clears soft label keys from screen */
-PHP_FUNCTION(ncurses_slk_clear)
-{
- IS_NCURSES_INITIALIZED();
- RETURN_LONG(slk_clear());
-}
-/* }}} */
-
-/* {{{ proto int ncurses_slk_noutrefresh(void)
- Copies soft label keys to virtual screen */
-PHP_FUNCTION(ncurses_slk_noutrefresh)
-{
- IS_NCURSES_INITIALIZED();
- RETURN_LONG(slk_noutrefresh());
-}
-/* }}} */
-
-/* {{{ proto int ncurses_slk_refresh(void)
- Copies soft label keys to screen */
-PHP_FUNCTION(ncurses_slk_refresh)
-{
- IS_NCURSES_INITIALIZED();
- RETURN_LONG(slk_refresh());
-}
-/* }}} */
-
-/* {{{ proto int ncurses_slk_restore(void)
- Restores soft label keys */
-PHP_FUNCTION(ncurses_slk_restore)
-{
- IS_NCURSES_INITIALIZED();
- RETURN_LONG(slk_restore());
-}
-/* }}} */
-
-/* {{{ proto int ncurses_slk_touch(void)
- Forces output when ncurses_slk_noutrefresh is performed */
-PHP_FUNCTION(ncurses_slk_touch)
-{
- IS_NCURSES_INITIALIZED();
- RETURN_LONG(slk_touch());
-}
-/* }}} */
-
-/* {{{ proto bool ncurses_slk_set(int labelnr, string label, int format)
- Sets function key labels */
-PHP_FUNCTION(ncurses_slk_set)
-{
- char *str;
- int len;
- long labelnr;
- long format;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "lsl", &labelnr, &str, &len, &format) == FAILURE) {
- return;
- }
- IS_NCURSES_INITIALIZED();
- RETURN_BOOL(slk_set(labelnr, str, format));
-}
-/* }}} */
-
-
-/* {{{ proto int ncurses_attroff(int attributes)
- Turns off the given attributes */
-PHP_FUNCTION(ncurses_attroff)
-{
- long intarg;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &intarg) == FAILURE) {
- return;
- }
- IS_NCURSES_INITIALIZED();
- RETURN_LONG(attroff(intarg));
-}
-/* }}} */
-
-/* {{{ proto int ncurses_attron(int attributes)
- Turns on the given attributes */
-PHP_FUNCTION(ncurses_attron)
-{
- long intarg;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &intarg) == FAILURE) {
- return;
- }
- IS_NCURSES_INITIALIZED();
- RETURN_LONG(attron(intarg));
-}
-/* }}} */
-
-/* {{{ proto int ncurses_attrset(int attributes)
- Sets given attributes */
-PHP_FUNCTION(ncurses_attrset)
-{
- long intarg;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &intarg) == FAILURE) {
- return;
- }
- IS_NCURSES_INITIALIZED();
- RETURN_LONG(attrset(intarg));
-}
-/* }}} */
-
-/* {{{ proto int ncurses_bkgd(int attrchar)
- Sets background property for terminal screen */
-PHP_FUNCTION(ncurses_bkgd)
-{
- long intarg;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &intarg) == FAILURE) {
- return;
- }
- IS_NCURSES_INITIALIZED();
- RETURN_LONG(bkgd(intarg));
-}
-/* }}} */
-
-/* {{{ proto int ncurses_curs_set(int visibility)
- Sets cursor state */
-PHP_FUNCTION(ncurses_curs_set)
-{
- long intarg;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &intarg) == FAILURE) {
- return;
- }
- IS_NCURSES_INITIALIZED();
- RETURN_LONG(curs_set(intarg));
-}
-/* }}} */
-
-/* {{{ proto int ncurses_delay_output(int milliseconds)
- Delays output on terminal using padding characters */
-PHP_FUNCTION(ncurses_delay_output)
-{
- long intarg;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &intarg) == FAILURE) {
- return;
- }
- IS_NCURSES_INITIALIZED();
- RETURN_LONG(delay_output(intarg));
-}
-/* }}} */
-
-/* {{{ proto int ncurses_echochar(int character)
- Single character output including refresh */
-PHP_FUNCTION(ncurses_echochar)
-{
- long intarg;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &intarg) == FAILURE) {
- return;
- }
- IS_NCURSES_INITIALIZED();
- RETURN_LONG(echochar(intarg));
-}
-/* }}} */
-
-/* {{{ proto int ncurses_halfdelay(int tenth)
- Puts terminal into halfdelay mode */
-PHP_FUNCTION(ncurses_halfdelay)
-{
- long intarg;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &intarg) == FAILURE) {
- return;
- }
- IS_NCURSES_INITIALIZED();
- RETURN_LONG(halfdelay(intarg));
-}
-/* }}} */
-
-/* {{{ proto int ncurses_has_key(int keycode)
- Checks for presence of a function key on terminal keyboard */
-PHP_FUNCTION(ncurses_has_key)
-{
- long intarg;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &intarg) == FAILURE) {
- return;
- }
- IS_NCURSES_INITIALIZED();
- RETURN_LONG(has_key(intarg));
-}
-/* }}} */
-
-/* {{{ proto int ncurses_insch(int character)
- Inserts character moving rest of line including character at current position */
-PHP_FUNCTION(ncurses_insch)
-{
- long intarg;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &intarg) == FAILURE) {
- return;
- }
- IS_NCURSES_INITIALIZED();
- RETURN_LONG(insch(intarg));
-}
-/* }}} */
-
-/* {{{ proto int ncurses_insdelln(int count)
- Inserts lines before current line scrolling down (negative numbers delete and scroll up) */
-PHP_FUNCTION(ncurses_insdelln)
-{
- long intarg;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &intarg) == FAILURE) {
- return;
- }
- IS_NCURSES_INITIALIZED();
- RETURN_LONG(insdelln(intarg));
-}
-/* }}} */
-
-/* {{{ proto int ncurses_mouseinterval(int milliseconds)
- Sets timeout for mouse button clicks */
-PHP_FUNCTION(ncurses_mouseinterval)
-{
- long intarg;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &intarg) == FAILURE) {
- return;
- }
- IS_NCURSES_INITIALIZED();
- RETURN_LONG(mouseinterval(intarg));
-}
-/* }}} */
-
-/* {{{ proto int ncurses_napms(int milliseconds)
- Sleep */
-PHP_FUNCTION(ncurses_napms)
-{
- long intarg;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &intarg) == FAILURE) {
- return;
- }
- IS_NCURSES_INITIALIZED();
- RETURN_LONG(napms(intarg));
-}
-/* }}} */
-
-/* {{{ proto int ncurses_scrl(int count)
- Scrolls window content up or down without changing current position */
-PHP_FUNCTION(ncurses_scrl)
-{
- long intarg;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &intarg) == FAILURE) {
- return;
- }
- IS_NCURSES_INITIALIZED();
- RETURN_LONG(scrl(intarg));
-}
-/* }}} */
-
-/* {{{ proto int ncurses_slk_attroff(int intarg)
- ??? */
-PHP_FUNCTION(ncurses_slk_attroff)
-{
- long intarg;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &intarg) == FAILURE) {
- return;
- }
- IS_NCURSES_INITIALIZED();
- RETURN_LONG(slk_attroff(intarg));
-}
-/* }}} */
-
-/* {{{ proto int ncurses_slk_attron(int intarg)
- ??? */
-PHP_FUNCTION(ncurses_slk_attron)
-{
- long intarg;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &intarg) == FAILURE) {
- return;
- }
- IS_NCURSES_INITIALIZED();
- RETURN_LONG(slk_attron(intarg));
-}
-/* }}} */
-
-/* {{{ proto int ncurses_slk_attrset(int intarg)
- ??? */
-PHP_FUNCTION(ncurses_slk_attrset)
-{
- long intarg;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &intarg) == FAILURE) {
- return;
- }
- IS_NCURSES_INITIALIZED();
- RETURN_LONG(slk_attrset(intarg));
-}
-/* }}} */
-
-#ifdef HAVE_NCURSES_SLK_COLOR
-/* {{{ proto int ncurses_slk_color(int intarg)
- Sets color for soft label keys*/
-PHP_FUNCTION(ncurses_slk_color)
-{
- long intarg;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &intarg) == FAILURE) {
- return;
- }
- IS_NCURSES_INITIALIZED();
- RETURN_LONG(slk_color(intarg));
-}
-/* }}} */
-#endif
-
-/* {{{ proto int ncurses_slk_init(int intarg)
- Inits soft label keys */
-PHP_FUNCTION(ncurses_slk_init)
-{
- long intarg;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &intarg) == FAILURE) {
- return;
- }
- IS_NCURSES_INITIALIZED();
- RETURN_LONG(slk_init(intarg));
-}
-/* }}} */
-
-/* {{{ proto int ncurses_typeahead(int fd)
- Specifys different filedescriptor for typeahead checking */
-PHP_FUNCTION(ncurses_typeahead)
-{
- long intarg;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &intarg) == FAILURE) {
- return;
- }
- IS_NCURSES_INITIALIZED();
- RETURN_LONG(typeahead(intarg));
-}
-/* }}} */
-
-/* {{{ proto int ncurses_ungetch(int keycode)
- Puts a character back into the input stream */
-PHP_FUNCTION(ncurses_ungetch)
-{
- long intarg;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &intarg) == FAILURE) {
- return;
- }
- IS_NCURSES_INITIALIZED();
- RETURN_LONG(ungetch(intarg));
-}
-/* }}} */
-
-/* {{{ proto int ncurses_vidattr(int intarg)
- ??? */
-PHP_FUNCTION(ncurses_vidattr)
-{
- long intarg;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &intarg) == FAILURE) {
- return;
- }
- IS_NCURSES_INITIALIZED();
- RETURN_LONG(vidattr(intarg));
-}
-/* }}} */
-
-#ifdef HAVE_NCURSES_USE_EXTENDED_NAMES
-/* {{{ proto int ncurses_use_extended_names(bool flag)
- Controls use of extended names in terminfo descriptions */
-PHP_FUNCTION(ncurses_use_extended_names)
-{
- long intarg;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &intarg) == FAILURE) {
- return;
- }
- IS_NCURSES_INITIALIZED();
- RETURN_LONG(use_extended_names(intarg));
-}
-/* }}} */
-#endif
-
-/* {{{ proto void ncurses_bkgdset(int attrchar)
- Controls screen background */
-PHP_FUNCTION(ncurses_bkgdset)
-{
- long intarg;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &intarg) == FAILURE) {
- return;
- }
- IS_NCURSES_INITIALIZED();
- bkgdset(intarg);
-}
-/* }}} */
-
-/* {{{ proto void ncurses_filter(void)
- */
-PHP_FUNCTION(ncurses_filter)
-{
- IS_NCURSES_INITIALIZED();
- filter();
-}
-/* }}} */
-
-/* {{{ proto int ncurses_noqiflush(void)
- Do not flush on signal characters*/
-PHP_FUNCTION(ncurses_noqiflush)
-{
- IS_NCURSES_INITIALIZED();
- noqiflush();
-}
-/* }}} */
-
-/* {{{ proto void ncurses_qiflush(void)
- Flushes on signal characters */
-PHP_FUNCTION(ncurses_qiflush)
-{
- IS_NCURSES_INITIALIZED();
- qiflush();
-}
-/* }}} */
-
-/* {{{ proto void ncurses_timeout(int millisec)
- Sets timeout for special key sequences */
-PHP_FUNCTION(ncurses_timeout)
-{
- long intarg;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &intarg) == FAILURE) {
- return;
- }
- IS_NCURSES_INITIALIZED();
- timeout(intarg);
-}
-/* }}} */
-
-/* {{{ proto void ncurses_use_env(int flag)
- Controls use of environment information about terminal size */
-PHP_FUNCTION(ncurses_use_env)
-{
- long intarg;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &intarg) == FAILURE) {
- return;
- }
- IS_NCURSES_INITIALIZED();
- use_env(intarg);
-}
-/* }}} */
-
-/* {{{ proto int ncurses_addstr(string text)
- Outputs text at current position */
-PHP_FUNCTION(ncurses_addstr)
-{
- char *str;
- int str_len;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &str, &str_len) == FAILURE) {
- return;
- }
- IS_NCURSES_INITIALIZED();
- RETURN_LONG(addstr(str));
-}
-/* }}} */
-
-/* {{{ proto int ncurses_putp(string text)
- ??? */
-PHP_FUNCTION(ncurses_putp)
-{
- char *str;
- int str_len;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &str, &str_len) == FAILURE) {
- return;
- }
- IS_NCURSES_INITIALIZED();
- RETURN_LONG(putp(str));
-}
-/* }}} */
-
-/* {{{ proto int ncurses_scr_dump(string filename)
- Dumps screen content to file */
-PHP_FUNCTION(ncurses_scr_dump)
-{
- char *str;
- int str_len;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &str, &str_len) == FAILURE) {
- return;
- }
- IS_NCURSES_INITIALIZED();
- RETURN_LONG(scr_dump(str));
-}
-/* }}} */
-
-/* {{{ proto int ncurses_scr_init(string filename)
- Initializes screen from file dump */
-PHP_FUNCTION(ncurses_scr_init)
-{
- char *str;
- int str_len;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &str, &str_len) == FAILURE) {
- return;
- }
- IS_NCURSES_INITIALIZED();
- RETURN_LONG(scr_init(str));
-}
-/* }}} */
-
-/* {{{ proto int ncurses_scr_restore(string filename)
- Restores screen from file dump */
-PHP_FUNCTION(ncurses_scr_restore)
-{
- char *str;
- int str_len;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &str, &str_len) == FAILURE) {
- return;
- }
- IS_NCURSES_INITIALIZED();
- RETURN_LONG(scr_restore(str));
-}
-/* }}} */
-
-/* {{{ proto int ncurses_scr_set(string filename)
- Inherits screen from file dump */
-PHP_FUNCTION(ncurses_scr_set)
-{
- char *str;
- int str_len;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &str, &str_len) == FAILURE) {
- return;
- }
- IS_NCURSES_INITIALIZED();
- RETURN_LONG(scr_set(str));
-}
-/* }}} */
-
-/* {{{ proto int ncurses_mvaddch(int y, int x, int c)
- Moves current position and add character */
-PHP_FUNCTION(ncurses_mvaddch)
-{
- long y,x,c;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "lll", &y, &x, &c) == FAILURE) {
- return;
- }
- IS_NCURSES_INITIALIZED();
- RETURN_LONG(mvaddch(y,x,c));
-}
-/* }}} */
-
-/* {{{ proto int ncurses_mvaddchnstr(int y, int x, string s, int n)
- Moves position and add attrributed string with specified length */
-PHP_FUNCTION(ncurses_mvaddchnstr)
-{
- long y,x,n;
- char *str;
- int str_len;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "llsl", &y, &x, &str, &str_len, &n) == FAILURE) {
- return;
- }
- IS_NCURSES_INITIALIZED();
- RETURN_LONG(mvaddchnstr(y,x,(chtype *)str,n));
-}
-/* }}} */
-
-/* {{{ proto int ncurses_addchnstr(string s, int n)
- Adds attributed string with specified length at current position */
-PHP_FUNCTION(ncurses_addchnstr)
-{
- long n;
- char *str;
- int str_len;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "sl", &str, &str_len, &n) == FAILURE) {
- return;
- }
- IS_NCURSES_INITIALIZED();
- RETURN_LONG(addchnstr((chtype *)str,n));
-}
-/* }}} */
-
-/* {{{ proto int ncurses_mvaddchstr(int y, int x, string s)
- Moves position and add attributed string */
-PHP_FUNCTION(ncurses_mvaddchstr)
-{
- long y,x;
- char *str;
- int str_len;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "lls", &y, &x, &str, &str_len) == FAILURE) {
- return;
- }
- IS_NCURSES_INITIALIZED();
- RETURN_LONG(mvaddchstr(y,x,(chtype *)str));
-}
-/* }}} */
-
-/* {{{ proto int ncurses_addchstr(string s)
- Adds attributed string at current position */
-PHP_FUNCTION(ncurses_addchstr)
-{
- char *str;
- int str_len;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &str, &str_len) == FAILURE) {
- return;
- }
- IS_NCURSES_INITIALIZED();
- RETURN_LONG(addchstr((chtype *)str));
-}
-/* }}} */
-
-/* {{{ proto int ncurses_mvaddnstr(int y, int x, string s, int n)
- Moves position and add string with specified length */
-PHP_FUNCTION(ncurses_mvaddnstr)
-{
- long y,x,n;
- char *str;
- int str_len;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "llsl", &y, &x, &str, &str_len, &n) == FAILURE) {
- return;
- }
- IS_NCURSES_INITIALIZED();
- RETURN_LONG(mvaddnstr(y,x,str,n));
-}
-/* }}} */
-
-/* {{{ proto int ncurses_addnstr(string s, int n)
- Adds string with specified length at current position */
-PHP_FUNCTION(ncurses_addnstr)
-{
- long n;
- char *str;
- int str_len;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "sl", &str, &str_len, &n) == FAILURE) {
- return;
- }
- IS_NCURSES_INITIALIZED();
- RETURN_LONG(addnstr(str,n));
-}
-/* }}} */
-
-/* {{{ proto int ncurses_mvaddstr(int y, int x, string s)
- Moves position and add string */
-PHP_FUNCTION(ncurses_mvaddstr)
-{
- long y,x;
- char *str;
- int str_len;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "lls", &y, &x, &str, &str_len) == FAILURE) {
- return;
- }
- IS_NCURSES_INITIALIZED();
- RETURN_LONG(mvaddstr(y,x,str));
-}
-/* }}} */
-
-/* {{{ proto int ncurses_mvdelch(int y, int x)
- Moves position and delete character, shift rest of line left */
-PHP_FUNCTION(ncurses_mvdelch)
-{
- long y,x;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ll", &y, &x) == FAILURE) {
- return;
- }
- IS_NCURSES_INITIALIZED();
- RETURN_LONG(mvdelch(y,x));
-}
-/* }}} */
-
-
-/* {{{ proto int ncurses_mvgetch(int y, int x)
- Moves position and get character at new position */
-PHP_FUNCTION(ncurses_mvgetch)
-{
- long y,x;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ll", &y, &x) == FAILURE) {
- return;
- }
- IS_NCURSES_INITIALIZED();
- RETURN_LONG(mvgetch(y,x));
-}
-/* }}} */
-
-/* {{{ proto int ncurses_mvinch(int y, int x)
- Moves position and get attributed character at new position */
-PHP_FUNCTION(ncurses_mvinch)
-{
- long y,x;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ll", &y, &x) == FAILURE) {
- return;
- }
- IS_NCURSES_INITIALIZED();
- RETURN_LONG(mvinch(y,x));
-}
-/* }}} */
-
-/* {{{ proto int ncurses_insstr(string text)
- Inserts string at current position, moving rest of line right */
-PHP_FUNCTION(ncurses_insstr)
-{
- char *str;
- int str_len;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &str, &str_len) == FAILURE) {
- return;
- }
- IS_NCURSES_INITIALIZED();
- RETURN_LONG(insstr(str));
-}
-/* }}} */
-
-/* {{{ proto int ncurses_instr(string &buffer)
- Reads string from terminal screen */
-PHP_FUNCTION(ncurses_instr)
-{
- ulong retval;
- zval *param;
- char *str;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z", &param) == FAILURE ) {
- return;
- }
- IS_NCURSES_INITIALIZED();
-
- str = (char *)emalloc(COLS + 1);
- retval = instr(str);
-
- ZVAL_STRING(param, str, strlen(str));
- efree(str);
-
- RETURN_LONG(retval);
-}
-/* }}} */
-
-/* {{{ proto int ncurses_mvhline(int y, int x, int attrchar, int n)
- Sets new position and draw a horizontal line using an attributed character and max. n characters long */
-PHP_FUNCTION(ncurses_mvhline)
-{
- long i1,i2,i3,i4;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "llll", &i1, &i2, &i3, &i4) == FAILURE) {
- return;
- }
- IS_NCURSES_INITIALIZED();
- RETURN_LONG(mvhline(i1,i2,i3,i4));
-}
-/* }}} */
-
-/* {{{ proto int ncurses_mvvline(int y, int x, int attrchar, int n)
- Sets new position and draw a vertical line using an attributed character and max. n characters long */
-PHP_FUNCTION(ncurses_mvvline)
-{
- long i1,i2,i3,i4;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "llll", &i1, &i2, &i3, &i4) == FAILURE) {
- return;
- }
- IS_NCURSES_INITIALIZED();
- RETURN_LONG(mvvline(i1,i2,i3,i4));
-}
-/* }}} */
-
-/* {{{ proto int ncurses_mvcur(int old_y,int old_x, int new_y, int new_x)
- Moves cursor immediately */
-PHP_FUNCTION(ncurses_mvcur)
-{
- long i1,i2,i3,i4;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "llll", &i1, &i2, &i3, &i4) == FAILURE) {
- return;
- }
- IS_NCURSES_INITIALIZED();
- RETURN_LONG(mvcur(i1,i2,i3,i4));
-}
-/* }}} */
-
-/* {{{ proto int ncurses_init_color(int color, int r, int g, int b)
- Sets new RGB value for color */
-PHP_FUNCTION(ncurses_init_color)
-{
- long i1,i2,i3,i4;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "llll", &i1, &i2, &i3, &i4) == FAILURE) {
- return;
- }
- IS_NCURSES_INITIALIZED();
- RETURN_LONG(init_color(i1,i2,i3,i4));
-}
-/* }}} */
-
-/* {{{ proto int ncurses_color_content(int color, int &r, int &g, int &b)
- Gets the RGB value for color */
-PHP_FUNCTION(ncurses_color_content)
-{
- zval *r, *g, *b;
- short rv, gv, bv;
- int retval;
- long c;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "lzzz", &c, &r, &g, &b) == FAILURE) {
- return;
- }
- IS_NCURSES_INITIALIZED();
-
- retval = color_content(c, &rv, &gv, &bv);
-
- ZVAL_LONG(r, rv);
- ZVAL_LONG(g, gv);
- ZVAL_LONG(b, bv);
-
- RETURN_LONG(retval);
-}
-/* }}} */
-
-/* {{{ proto int ncurses_pair_content(int pair, int &f, int &b)
- Gets the RGB value for color */
-PHP_FUNCTION(ncurses_pair_content)
-{
- zval *f, *b;
- short fv, bv;
- int retval;
- long p;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "lzz", &p, &f, &b) == FAILURE) {
- return;
- }
- IS_NCURSES_INITIALIZED();
-
- retval = pair_content(p, &fv, &bv);
-
- ZVAL_LONG(f, fv);
- ZVAL_LONG(b, bv);
-
- RETURN_LONG(retval);
-}
-/* }}} */
-
-/* {{{ proto int ncurses_border(int left, int right, int top, int bottom, int tl_corner, int tr_corner, int bl_corner, int br_corner)
- Draws a border around the screen using attributed characters */
-PHP_FUNCTION(ncurses_border)
-{
- long i1,i2,i3,i4,i5,i6,i7,i8;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "llllllll", &i1, &i2, &i3, &i4, &i5, &i6, &i7, &i8) == FAILURE) {
- return;
- }
- IS_NCURSES_INITIALIZED();
- RETURN_LONG(border(i1,i2,i3,i4,i5,i6,i7,i8));
-}
-/* }}} */
-
-/* {{{ proto int ncurses_wborder(resource window, int left, int right, int top, int bottom, int tl_corner, int tr_corner, int bl_corner, int br_corner)
- Draws a border around the window using attributed characters */
-PHP_FUNCTION(ncurses_wborder)
-{
- long i1,i2,i3,i4,i5,i6,i7,i8;
- zval *handle;
- WINDOW **win;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rllllllll", &handle, &i1, &i2, &i3, &i4, &i5, &i6, &i7, &i8) == FAILURE) {
- return;
- }
-
- FETCH_WINRES(win, &handle);
-
- RETURN_LONG(wborder(*win,i1,i2,i3,i4,i5,i6,i7,i8));
-}
-/* }}} */
-
-#ifdef HAVE_NCURSES_ASSUME_DEFAULT_COLORS
-/* {{{ proto int ncurses_assume_default_colors(int fg, int bg)
- Defines default colors for color 0 */
-PHP_FUNCTION(ncurses_assume_default_colors)
-{
- long i1,i2;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ll", &i1, &i2) == FAILURE) {
- return;
- }
- IS_NCURSES_INITIALIZED();
- RETURN_LONG(assume_default_colors(i1,i2));
-}
-/* }}} */
-#endif
-
-/* {{{ proto int ncurses_define_key(string definition, int keycode)
- Defines a keycode */
-PHP_FUNCTION(ncurses_define_key)
-{
- long n;
- char *str;
- int str_len;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "sl", &str, &str_len, &n) == FAILURE) {
- return;
- }
- IS_NCURSES_INITIALIZED();
- RETURN_LONG(define_key(str,n));
-}
-/* }}} */
-
-/* {{{ proto int ncurses_hline(int charattr, int n)
- Draws a horizontal line at current position using an attributed character and max. n characters long */
-PHP_FUNCTION(ncurses_hline)
-{
- long i1,i2;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ll", &i1, &i2) == FAILURE) {
- return;
- }
- IS_NCURSES_INITIALIZED();
- RETURN_LONG(hline(i1,i2));
-}
-/* }}} */
-
-/* {{{ proto int ncurses_vline(int charattr, int n)
- Draws a vertical line at current position using an attributed character and max. n characters long */
-PHP_FUNCTION(ncurses_vline)
-{
- long i1,i2;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ll", &i1, &i2) == FAILURE) {
- return;
- }
- IS_NCURSES_INITIALIZED();
- RETURN_LONG(vline(i1,i2));
-}
-/* }}} */
-
-/* {{{ proto int ncurses_whline(resource window, int charattr, int n)
- Draws a horizontal line in a window at current position using an attributed character and max. n characters long */
-PHP_FUNCTION(ncurses_whline)
-{
- long i1,i2;
- zval *handle;
- WINDOW **win;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rll", &handle, &i1, &i2) == FAILURE) {
- return;
- }
-
- FETCH_WINRES(win, &handle);
-
- RETURN_LONG(whline(*win,i1,i2));
-}
-/* }}} */
-
-/* {{{ proto int ncurses_wvline(resource window, int charattr, int n)
- Draws a vertical line in a window at current position using an attributed character and max. n characters long */
-PHP_FUNCTION(ncurses_wvline)
-{
- long i1,i2;
- zval *handle;
- WINDOW **win;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rll", &handle, &i1, &i2) == FAILURE) {
- return;
- }
- FETCH_WINRES(win, &handle);
-
- RETURN_LONG(wvline(*win,i1,i2));
-}
-/* }}} */
-
-/* {{{ proto int ncurses_keyok(int keycode, int enable)
- Enables or disable a keycode */
-PHP_FUNCTION(ncurses_keyok)
-{
- long i,b;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ll", &i, &b) == FAILURE) {
- return;
- }
- IS_NCURSES_INITIALIZED();
- RETURN_LONG(hline(i,b));
-}
-/* }}} */
-
-/* {{{ proto int ncurses_mvwaddstr(resource window, int y, int x, string text)
- Adds string at new position in window */
-PHP_FUNCTION(ncurses_mvwaddstr)
-{
- zval *handle;
- long y, x;
- int text_len;
- char *text;
- WINDOW **w;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rlls", &handle, &y, &x, &text, &text_len) == FAILURE) {
- return;
- }
-
- FETCH_WINRES(w, &handle);
-
- RETURN_LONG(mvwaddstr(*w,y,x,text));
-}
-/* }}} */
-
-/* {{{ proto int ncurses_wrefresh(resource window)
- Refreshes window on terminal screen */
-PHP_FUNCTION(ncurses_wrefresh)
-{
- zval *handle;
- WINDOW **w;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &handle) == FAILURE) {
- return;
- }
-
- FETCH_WINRES(w, &handle);
-
- RETURN_LONG(wrefresh(*w));
-}
-/* }}} */
-
-/* {{{ proto string ncurses_termname(void)
- Returns terminal name */
-PHP_FUNCTION(ncurses_termname)
-{
- char temp[15];
-
- IS_NCURSES_INITIALIZED();
-
- strlcpy(temp, termname(), sizeof(temp));
-
- RETURN_STRINGL (temp, strlen(temp), 1);
-}
-/* }}} */
-
-/* {{{ proto string ncurses_longname(void)
- Returns terminal description */
-PHP_FUNCTION(ncurses_longname)
-{
- char temp[128];
-
- IS_NCURSES_INITIALIZED();
-
- strlcpy(temp, longname(), sizeof(temp));
-
- RETURN_STRINGL (temp, strlen(temp), 1);
-}
-/* }}} */
-
-/* {{{ proto int ncurses_mousemask(int newmask, int &oldmask)
- Returns and sets mouse options */
-PHP_FUNCTION(ncurses_mousemask)
-{
- ulong oldmask;
- ulong retval;
- zval *param;
- long newmask;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "lz", &newmask, &param) == FAILURE) {
- return;
- }
- IS_NCURSES_INITIALIZED();
-
- retval = mousemask(newmask, &oldmask);
-
- ZVAL_LONG(param, oldmask);
-
- RETURN_LONG(retval);
-}
-/* }}} */
-
-/* {{{ proto bool ncurses_getmouse(array &mevent)
- Reads mouse event from queue. The content of mevent is cleared before new data is added. */
-PHP_FUNCTION(ncurses_getmouse)
-{
- zval *arg;
- MEVENT mevent;
- ulong retval;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z", &arg) == FAILURE) {
- return;
- }
- IS_NCURSES_INITIALIZED();
-
- pval_destructor(arg);
- array_init(arg);
-
- retval = getmouse(&mevent);
-
- add_assoc_long(arg, "id", mevent.id);
- add_assoc_long(arg, "x", mevent.x);
- add_assoc_long(arg, "y", mevent.y);
- add_assoc_long(arg, "z", mevent.z);
- add_assoc_long(arg, "mmask", mevent.bstate);
-
- RETURN_BOOL(retval == 0);
-}
-/* }}} */
-
-/* {{{ proto int ncurses_ungetmouse(array mevent)
- Pushes mouse event to queue */
-PHP_FUNCTION(ncurses_ungetmouse)
-{
- zval *arg, **pvalue;
- MEVENT mevent;
- ulong retval;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "a", &arg) == FAILURE) {
- return;
- }
- IS_NCURSES_INITIALIZED();
-
- if (zend_hash_find(Z_ARRVAL_P(arg), "id", sizeof("id"), (void **) &pvalue) == SUCCESS) {
- convert_to_long_ex(pvalue);
- mevent.id = Z_LVAL_PP(pvalue);
- }
-
- if (zend_hash_find(Z_ARRVAL_P(arg), "x", sizeof("x"), (void **) &pvalue) == SUCCESS) {
- convert_to_long_ex(pvalue);
- mevent.x = Z_LVAL_PP(pvalue);
- }
-
- if (zend_hash_find(Z_ARRVAL_P(arg), "y", sizeof("y"), (void **) &pvalue) == SUCCESS) {
- convert_to_long_ex(pvalue);
- mevent.y = Z_LVAL_PP(pvalue);
- }
-
- if (zend_hash_find(Z_ARRVAL_P(arg), "z", sizeof("z"), (void **) &pvalue) == SUCCESS) {
- convert_to_long_ex(pvalue);
- mevent.z = Z_LVAL_PP(pvalue);
- }
-
- if (zend_hash_find(Z_ARRVAL_P(arg), "mmask", sizeof("mmask"), (void **) &pvalue) == SUCCESS) {
- convert_to_long_ex(pvalue);
- mevent.bstate = Z_LVAL_PP(pvalue);
- }
-
- retval = ungetmouse(&mevent);
-
- RETURN_LONG(retval);
-}
-/* }}} */
-
-/* {{{ proto bool ncurses_mouse_trafo(int &y, int &x, bool toscreen)
- Transforms coordinates */
-PHP_FUNCTION(ncurses_mouse_trafo)
-{
- zval *x, *y;
- zend_bool toscreen;
- int nx, ny, retval;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "zzb", &y, &x, &toscreen) == FAILURE) {
- return;
- }
- IS_NCURSES_INITIALIZED();
-
- convert_to_long(y);
- convert_to_long(x);
-
- nx = Z_LVAL_P(x);
- ny = Z_LVAL_P(y);
-
- retval = mouse_trafo(&ny, &nx, toscreen);
-
- ZVAL_LONG(x, nx);
- ZVAL_LONG(y, ny);
-
- RETURN_BOOL(retval);
-}
-/* }}} */
-
-/* {{{ proto bool ncurses_wmouse_trafo(resource window, int &y, int &x, bool toscreen)
- Transforms window/stdscr coordinates */
-PHP_FUNCTION(ncurses_wmouse_trafo)
-{
- zval *handle, *x, *y;
- int nx, ny, retval;
- WINDOW **win;
- zend_bool toscreen;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rzzb", &handle, &y, &x, &toscreen) == FAILURE) {
- return;
- }
-
- FETCH_WINRES(win, &handle);
-
- convert_to_long(x);
- convert_to_long(y);
-
- nx = Z_LVAL_P(x);
- ny = Z_LVAL_P(y);
-
- retval = wmouse_trafo (*win, &ny, &nx, toscreen);
-
- ZVAL_LONG(x, nx);
- ZVAL_LONG(y, ny);
-
- RETURN_BOOL(retval);
-}
-/* }}} */
-
-/* {{{ proto void ncurses_getyx(resource window, int &y, int &x)
- Returns the current cursor position for a window */
-PHP_FUNCTION(ncurses_getyx)
-{
- zval *handle, *x, *y;
- WINDOW **win;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rzz", &handle, &y, &x) == FAILURE) {
- return;
- }
-
- FETCH_WINRES(win, &handle);
-
- convert_to_long(x);
- convert_to_long(y);
-
- getyx(*win, Z_LVAL_P(y), Z_LVAL_P(x));
-}
-/* }}} */
-
-/* {{{ proto void ncurses_getmaxyx(resource window, int &y, int &x)
- Returns the size of a window */
-PHP_FUNCTION(ncurses_getmaxyx)
-{
- zval *handle, *x, *y;
- WINDOW **win;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rzz", &handle, &y, &x) == FAILURE) {
- return;
- }
-
- FETCH_WINRES(win, &handle);
-
- convert_to_long(x);
- convert_to_long(y);
-
- getmaxyx(*win, Z_LVAL_P(y), Z_LVAL_P(x));
-}
-/* }}} */
-
-/* {{{ proto int ncurses_wmove(resource window, int y, int x)
- Moves windows output position */
-PHP_FUNCTION(ncurses_wmove)
-{
- zval *handle, *x, *y;
- WINDOW **win;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rzz", &handle, &y, &x) == FAILURE) {
- return;
- }
-
- FETCH_WINRES(win, &handle);
-
- convert_to_long(x);
- convert_to_long(y);
-
- RETURN_LONG(wmove(*win, Z_LVAL_P(y), Z_LVAL_P(x)));
-}
-/* }}} */
-
-/* {{{ proto int ncurses_keypad(resource window, bool bf)
- Turns keypad on or off */
-PHP_FUNCTION(ncurses_keypad)
-{
- zval *handle;
- zend_bool bf;
- WINDOW **win;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rb", &handle, &bf) == FAILURE) {
- return;
- }
-
- FETCH_WINRES(win, &handle);
-
- RETURN_LONG(keypad(*win, bf));
-
-}
-/* }}} */
-
-#ifdef HAVE_NCURSES_COLOR_SET
-/* {{{ proto int ncurses_wcolor_set(resource window, int color_pair)
- Sets windows color pairings */
-PHP_FUNCTION(ncurses_wcolor_set)
-{
- zval *handle;
- long color_pair;
- WINDOW **win;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rl", &handle, &color_pair) == FAILURE) {
- return;
- }
-
- FETCH_WINRES(win, &handle);
-
- RETURN_LONG(wcolor_set(*win, color_pair, 0));
-}
-/* }}} */
-#endif
-
-/* {{{ proto int ncurses_wclear(resource window)
- Clears window */
-PHP_FUNCTION(ncurses_wclear)
-{
- zval *handle;
- WINDOW **win;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &handle) == FAILURE) {
- return;
- }
-
- FETCH_WINRES(win, &handle);
-
- RETURN_LONG(wclear(*win));
-}
-/* }}} */
-
-/* {{{ proto int ncurses_wnoutrefresh(resource window)
- Copies window to virtual screen */
-PHP_FUNCTION(ncurses_wnoutrefresh)
-{
- zval *handle;
- WINDOW **win;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &handle) == FAILURE) {
- return;
- }
-
- FETCH_WINRES(win, &handle);
-
- RETURN_LONG(wnoutrefresh(*win));
-}
-/* }}} */
-
-/* {{{ proto int ncurses_waddstr(resource window, string str [, int n])
- Outputs text at current postion in window */
-PHP_FUNCTION(ncurses_waddstr)
-{
- zval *handle;
- char *str;
- int str_len;
- long n = 0;
- WINDOW **win;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rs|l", &handle, &str, &str_len, &n) == FAILURE) {
- return;
- }
-
- FETCH_WINRES(win, &handle);
- if (!n) {
- RETURN_LONG(waddstr(*win, str));
- } else {
- RETURN_LONG(waddnstr(*win, str, n));
- }
-}
-/* }}} */
-
-/* {{{ proto int ncurses_wgetch(resource window)
- Reads a character from keyboard (window) */
-PHP_FUNCTION(ncurses_wgetch)
-{
- zval *handle;
- WINDOW **win;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &handle) == FAILURE) {
- return;
- }
-
- FETCH_WINRES(win, &handle);
-
- RETURN_LONG(wgetch(*win));
-}
-/* }}} */
-
-/* {{{ proto int ncurses_wattroff(resource window, int attrs)
- Turns off attributes for a window */
-PHP_FUNCTION(ncurses_wattroff)
-{
- zval *handle;
- WINDOW **win;
- long attrs;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rl", &handle, &attrs) == FAILURE) {
- return;
- }
-
- FETCH_WINRES(win, &handle);
-
- RETURN_LONG(wattroff(*win, attrs));
-}
-/* }}} */
-
-/* {{{ proto int ncurses_wattron(resource window, int attrs)
- Turns on attributes for a window */
-PHP_FUNCTION(ncurses_wattron)
-{
- zval *handle;
- WINDOW **win;
- long attrs;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rl", &handle, &attrs) == FAILURE) {
- return;
- }
-
- FETCH_WINRES(win, &handle);
-
- RETURN_LONG(wattron(*win, attrs));
-}
-/* }}} */
-
-/* {{{ proto int ncurses_wattrset(resource window, int attrs)
- Set the attributes for a window */
-PHP_FUNCTION(ncurses_wattrset)
-{
- zval *handle;
- WINDOW **win;
- long attrs;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rl", &handle, &attrs) == FAILURE) {
- return;
- }
-
- FETCH_WINRES(win, &handle);
-
- RETURN_LONG(wattrset(*win, attrs));
-}
-/* }}} */
-
-/* {{{ proto int ncurses_wstandend(resource window)
- End standout mode for a window */
-PHP_FUNCTION(ncurses_wstandend)
-{
- zval *handle;
- WINDOW **win;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &handle) == FAILURE) {
- return;
- }
-
- FETCH_WINRES(win, &handle);
-
- RETURN_LONG(wstandend(*win));
-}
-/* }}} */
-
-/* {{{ proto int ncurses_wstandout(resource window)
- Enter standout mode for a window */
-PHP_FUNCTION(ncurses_wstandout)
-{
- zval *handle;
- WINDOW **win;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &handle) == FAILURE) {
- return;
- }
-
- FETCH_WINRES(win, &handle);
-
- RETURN_LONG(wstandout(*win));
-}
-/* }}} */
-
-#if HAVE_NCURSES_PANEL
-/* {{{ proto resource ncurses_new_panel(resource window)
- Create a new panel and associate it with window */
-PHP_FUNCTION(ncurses_new_panel)
-{
- zval *handle;
- WINDOW **win;
- PANEL **panel;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &handle) == FAILURE) {
- return;
- }
-
- FETCH_WINRES(win, &handle);
-
- panel = (PANEL **)emalloc(sizeof(PANEL *));
- *panel = new_panel(*win);
-
- if (*panel == NULL) {
- efree(panel);
- RETURN_FALSE;
- } else {
- long id = ZEND_REGISTER_RESOURCE(return_value, panel, le_ncurses_panels);
- set_panel_userptr(*panel, (void*)id);
- }
-
-}
-/* }}} */
-
-/* {{{ proto bool ncurses_del_panel(resource panel)
- Remove panel from the stack and delete it (but not the associated window) */
-PHP_FUNCTION(ncurses_del_panel)
-{
- zval *handle;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &handle) == FAILURE) {
- return;
- }
- zend_list_delete(Z_RESVAL_P(handle));
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto int ncurses_hide_panel(resource panel)
- Remove panel from the stack, making it invisible */
-PHP_FUNCTION(ncurses_hide_panel)
-{
- zval *handle;
- PANEL **panel;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &handle) == FAILURE) {
- return;
- }
-
- FETCH_PANEL(panel, &handle);
-
- RETURN_LONG(hide_panel(*panel));
-
-}
-/* }}} */
-
-/* {{{ proto int ncurses_show_panel(resource panel)
- Places an invisible panel on top of the stack, making it visible */
-PHP_FUNCTION(ncurses_show_panel)
-{
- zval *handle;
- PANEL **panel;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &handle) == FAILURE) {
- return;
- }
-
- FETCH_PANEL(panel, &handle);
-
- RETURN_LONG(show_panel(*panel));
-
-}
-/* }}} */
-
-/* {{{ proto int ncurses_top_panel(resource panel)
- Moves a visible panel to the top of the stack */
-PHP_FUNCTION(ncurses_top_panel)
-{
- zval *handle;
- PANEL **panel;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &handle) == FAILURE) {
- return;
- }
-
- FETCH_PANEL(panel, &handle);
-
- RETURN_LONG(top_panel(*panel));
-
-}
-/* }}} */
-
-/* {{{ proto int ncurses_bottom_panel(resource panel)
- Moves a visible panel to the bottom of the stack */
-PHP_FUNCTION(ncurses_bottom_panel)
-{
- zval *handle;
- PANEL **panel;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &handle) == FAILURE) {
- return;
- }
-
- FETCH_PANEL(panel, &handle);
-
- RETURN_LONG(bottom_panel(*panel));
-
-}
-/* }}} */
-
-/* {{{ proto int ncurses_move_panel(resource panel, int startx, int starty)
- Moves a panel so that it's upper-left corner is at [startx, starty] */
-PHP_FUNCTION(ncurses_move_panel)
-{
- zval *handle;
- PANEL **panel;
- long startx, starty;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rll", &handle, &startx, &starty) == FAILURE) {
- return;
- }
-
- FETCH_PANEL(panel, &handle);
-
- RETURN_LONG(move_panel(*panel, startx, starty));
-
-}
-/* }}} */
-
-/* {{{ proto int ncurses_replace_panel(resource panel, resource window)
- Replaces the window associated with panel */
-PHP_FUNCTION(ncurses_replace_panel)
-{
- zval *phandle, *whandle;
- PANEL **panel;
- WINDOW **window;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rr", &phandle, &whandle) == FAILURE) {
- return;
- }
-
- FETCH_PANEL(panel, &phandle);
- FETCH_WINRES(window, &whandle);
-
- RETURN_LONG(replace_panel(*panel, *window));
-
-}
-/* }}} */
-
-/* {{{ proto resource ncurses_panel_above(resource panel)
- Returns the panel above panel. If panel is null, returns the bottom panel in the stack */
-PHP_FUNCTION(ncurses_panel_above)
-{
- zval *phandle = NULL;
- PANEL **panel;
- PANEL *above;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r!", &phandle) == FAILURE) {
- return;
- }
-
- if (phandle) {
- FETCH_PANEL(panel, &phandle);
- above = panel_above(*panel);
- } else {
- above = panel_above((PANEL *)0);
- }
-
- if (above) {
- long id = (long)panel_userptr(above);
- zend_list_addref(id);
- RETURN_RESOURCE(id);
- } else {
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-/* {{{ proto resource ncurses_panel_below(resource panel)
- Returns the panel below panel. If panel is null, returns the top panel in the stack */
-PHP_FUNCTION(ncurses_panel_below)
-{
- zval *phandle = NULL;
- PANEL **panel;
- PANEL *below;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r!", &phandle) == FAILURE) {
- return;
- }
-
- if (phandle) {
- FETCH_PANEL(panel, &phandle);
- below = panel_below(*panel);
- } else {
- below = panel_below((PANEL *)0);
- }
- if (below) {
- long id = (long)panel_userptr(below);
- zend_list_addref(id);
- RETURN_RESOURCE(id);
- } else {
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-/* {{{ proto resource ncurses_panel_window(resource panel)
- Returns the window associated with panel */
-PHP_FUNCTION(ncurses_panel_window)
-{
- zval *phandle = NULL;
- PANEL **panel;
- WINDOW **win;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &phandle) == FAILURE) {
- return;
- }
-
- FETCH_PANEL(panel, &phandle);
-
- win = (WINDOW **)emalloc(sizeof(WINDOW *));
- *win = panel_window(*panel);
-
- if (*win == NULL) {
- efree(win);
- RETURN_FALSE;
- }
- ZEND_REGISTER_RESOURCE(return_value, win, le_ncurses_windows);
-}
-/* }}} */
-
-/* {{{ proto void ncurses_update_panels(void)
- Refreshes the virtual screen to reflect the relations between panels in the stack. */
-PHP_FUNCTION(ncurses_update_panels)
-{
- IS_NCURSES_INITIALIZED();
- update_panels();
-}
-/* }}} */
-#endif /* HAVE_NCURSES_PANEL */
-
-/*
- * 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/ncurses/package.xml b/ext/ncurses/package.xml
deleted file mode 100644
index a5c3af3e4b..0000000000
--- a/ext/ncurses/package.xml
+++ /dev/null
@@ -1,73 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1" ?>
-<!DOCTYPE package SYSTEM "../pear/package.dtd">
-<package>
- <name>ncurses</name>
- <summary>Terminal screen handling and optimization package</summary>
- <maintainers>
- <maintainer>
- <user>hholzgra</user>
- <name>Hartmut Holzgraefe</name>
- <email>hartmut@php.net</email>
- <role>lead</role>
- </maintainer>
- <maintainer>
- <user>georg</user>
- <name>Georg Richter</name>
- <role>developer</role>
- <email>georg@php.net</email>
- </maintainer>
- <maintainer>
- <user>iliaa</user>
- <name>Ilia Alshanetsky</name>
- <role>developer</role>
- <email>iliaa@php.net</email>
- </maintainer>
- <maintainer>
- <user>wez</user>
- <name>Wez Furlong</name>
- <role>developer</role>
- <email>wez@php.net</email>
- </maintainer>
- </maintainers>
- <description>
-ncurses (new curses) is a free software emulation of curses in
-System V Rel 4.0 (and above). It uses terminfo format, supports
-pads, colors, multiple highlights, form characters and function
-key mapping. Because of the interactive nature of this library,
-it will be of little use for writing Web applications, but may
-be useful when writing scripts meant using PHP from the command
-line.
- </description>
- <license>PHP</license>
- <release>
- <state>beta</state>
- <version>5.0rc1</version>
- <date>2004-03-19</date>
- <notes>
-package.xml added to support intallation using pear installer
- </notes>
- <configureoptions>
- <configureoption name="with-ncurses" default="autodetect" prompt="path to ncurses installation?"/>
- </configureoptions>
- <filelist>
- <file role="doc" name="CREDITS"/>
- <file role="doc" name="EXPERIMENTAL"/>
- <file role="doc" name="example1.php"/>
- <file role="src" name="config.m4"/>
- <file role="src" name="ncurses.c"/>
- <file role="src" name="ncurses.php"/>
- <file role="src" name="ncurses_fe.c"/>
- <file role="src" name="ncurses_functions.c"/>
- <file role="src" name="php_ncurses.h"/>
- <file role="src" name="php_ncurses_fe.h"/>
- <file role="test" name="tests/001.phpt"/>
- </filelist>
- <deps>
- <dep type="php" rel="ge" version="5" />
- <!-- doesn't work yet <dep type="os" rel="has" name="unix"/> -->
- </deps>
- </release>
-</package>
-<!--
-vim:et:ts=1:sw=1
--->
diff --git a/ext/ncurses/php_ncurses.h b/ext/ncurses/php_ncurses.h
deleted file mode 100644
index 6d17f9b4b8..0000000000
--- a/ext/ncurses/php_ncurses.h
+++ /dev/null
@@ -1,84 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Hartmut Holzgraefe <hholzgra@php.net> |
- +----------------------------------------------------------------------+
- */
-
-#ifndef PHP_NCURSES_H
-#define PHP_NCURSES_H
-
-#ifdef HAVE_NCURSES_H
-# include <ncurses.h>
-#else
-# include <curses.h>
-#endif
-
-extern int le_ncurses_windows;
-
-#if HAVE_NCURSES_PANEL
-# include <panel.h>
-extern int le_ncurses_panels;
-#endif
-
-
-extern zend_module_entry ncurses_module_entry;
-#define phpext_ncurses_ptr &ncurses_module_entry
-
-extern function_entry ncurses_functions[];
-#include "php_ncurses_fe.h"
-
-#ifdef PHP_WIN32
-#define PHP_NCURSES_API __declspec(dllexport)
-#else
-#define PHP_NCURSES_API
-#endif
-
-PHP_MINIT_FUNCTION(ncurses);
-PHP_MSHUTDOWN_FUNCTION(ncurses);
-PHP_RINIT_FUNCTION(ncurses);
-PHP_RSHUTDOWN_FUNCTION(ncurses);
-PHP_MINFO_FUNCTION(ncurses);
-
-ZEND_BEGIN_MODULE_GLOBALS(ncurses)
- int registered_constants;
-ZEND_END_MODULE_GLOBALS(ncurses)
-
-/* In every function that needs to use variables in php_ncurses_globals,
- do call NCURSES_LS_FETCH(); after declaring other variables used by
- that function, and always refer to them as NCURSES_G(variable).
- You are encouraged to rename these macros something shorter, see
- examples in any other php module directory.
-*/
-
-#ifdef ZTS
-#define NCURSES_G(v) TSRMG(ncurses_globals_id, zend_ncurses_globals *, v)
-#define NCURSES_LS_FETCH() zend_ncurses_globals *ncurses_globals = ts_resource(ncurses_globals_id)
-#else
-#define NCURSES_G(v) (ncurses_globals.v)
-#define NCURSES_LS_FETCH()
-#endif
-
-ZEND_EXTERN_MODULE_GLOBALS(ncurses)
-
-#endif /* PHP_NCURSES_H */
-
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * indent-tabs-mode: t
- * End:
- */
diff --git a/ext/ncurses/php_ncurses_fe.h b/ext/ncurses/php_ncurses_fe.h
deleted file mode 100644
index 62dca40f8d..0000000000
--- a/ext/ncurses/php_ncurses_fe.h
+++ /dev/null
@@ -1,197 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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. |
- +----------------------------------------------------------------------+
- | Authors: Hartmut Holzgraefe <hholzgra@php.net> |
- | Georg Richter <georg.richter@php-ev.de> |
- +----------------------------------------------------------------------+
- */
-
-#ifndef PHP_NCURSES_FE_H
-#define PHP_NCURSES_FE_H
-
-PHP_FUNCTION(ncurses_addch);
-PHP_FUNCTION(ncurses_color_set);
-PHP_FUNCTION(ncurses_delwin);
-PHP_FUNCTION(ncurses_end);
-PHP_FUNCTION(ncurses_getch);
-PHP_FUNCTION(ncurses_has_colors);
-PHP_FUNCTION(ncurses_init);
-PHP_FUNCTION(ncurses_init_pair);
-PHP_FUNCTION(ncurses_color_content);
-PHP_FUNCTION(ncurses_pair_content);
-PHP_FUNCTION(ncurses_move);
-PHP_FUNCTION(ncurses_newwin);
-PHP_FUNCTION(ncurses_refresh);
-PHP_FUNCTION(ncurses_start_color);
-PHP_FUNCTION(ncurses_standout);
-PHP_FUNCTION(ncurses_standend);
-PHP_FUNCTION(ncurses_baudrate);
-PHP_FUNCTION(ncurses_beep);
-PHP_FUNCTION(ncurses_can_change_color);
-PHP_FUNCTION(ncurses_cbreak);
-PHP_FUNCTION(ncurses_clear);
-PHP_FUNCTION(ncurses_clrtobot);
-PHP_FUNCTION(ncurses_clrtoeol);
-PHP_FUNCTION(ncurses_def_prog_mode);
-PHP_FUNCTION(ncurses_reset_prog_mode);
-PHP_FUNCTION(ncurses_def_shell_mode);
-PHP_FUNCTION(ncurses_reset_shell_mode);
-PHP_FUNCTION(ncurses_delch);
-PHP_FUNCTION(ncurses_deleteln);
-PHP_FUNCTION(ncurses_doupdate);
-PHP_FUNCTION(ncurses_echo);
-PHP_FUNCTION(ncurses_erase);
-PHP_FUNCTION(ncurses_werase);
-PHP_FUNCTION(ncurses_erasechar);
-PHP_FUNCTION(ncurses_flash);
-PHP_FUNCTION(ncurses_flushinp);
-PHP_FUNCTION(ncurses_has_ic);
-PHP_FUNCTION(ncurses_has_il);
-PHP_FUNCTION(ncurses_inch);
-PHP_FUNCTION(ncurses_insertln);
-PHP_FUNCTION(ncurses_isendwin);
-PHP_FUNCTION(ncurses_killchar);
-PHP_FUNCTION(ncurses_nl);
-PHP_FUNCTION(ncurses_nocbreak);
-PHP_FUNCTION(ncurses_noecho);
-PHP_FUNCTION(ncurses_nonl);
-PHP_FUNCTION(ncurses_noraw);
-PHP_FUNCTION(ncurses_raw);
-PHP_FUNCTION(ncurses_meta);
-PHP_FUNCTION(ncurses_resetty);
-PHP_FUNCTION(ncurses_savetty);
-PHP_FUNCTION(ncurses_termattrs);
-PHP_FUNCTION(ncurses_use_default_colors);
-PHP_FUNCTION(ncurses_slk_attr);
-PHP_FUNCTION(ncurses_slk_clear);
-PHP_FUNCTION(ncurses_slk_noutrefresh);
-PHP_FUNCTION(ncurses_slk_refresh);
-PHP_FUNCTION(ncurses_slk_restore);
-PHP_FUNCTION(ncurses_slk_touch);
-PHP_FUNCTION(ncurses_attroff);
-PHP_FUNCTION(ncurses_attron);
-PHP_FUNCTION(ncurses_attrset);
-PHP_FUNCTION(ncurses_bkgd);
-PHP_FUNCTION(ncurses_curs_set);
-PHP_FUNCTION(ncurses_delay_output);
-PHP_FUNCTION(ncurses_echochar);
-PHP_FUNCTION(ncurses_halfdelay);
-PHP_FUNCTION(ncurses_has_key);
-PHP_FUNCTION(ncurses_insch);
-PHP_FUNCTION(ncurses_insdelln);
-PHP_FUNCTION(ncurses_mouseinterval);
-PHP_FUNCTION(ncurses_napms);
-PHP_FUNCTION(ncurses_scrl);
-PHP_FUNCTION(ncurses_slk_attroff);
-PHP_FUNCTION(ncurses_slk_attron);
-PHP_FUNCTION(ncurses_slk_attrset);
-PHP_FUNCTION(ncurses_slk_color);
-PHP_FUNCTION(ncurses_slk_init);
-PHP_FUNCTION(ncurses_slk_set);
-PHP_FUNCTION(ncurses_typeahead);
-PHP_FUNCTION(ncurses_ungetch);
-PHP_FUNCTION(ncurses_vidattr);
-PHP_FUNCTION(ncurses_wrefresh);
-PHP_FUNCTION(ncurses_use_extended_names);
-PHP_FUNCTION(ncurses_bkgdset);
-PHP_FUNCTION(ncurses_filter);
-PHP_FUNCTION(ncurses_noqiflush);
-PHP_FUNCTION(ncurses_qiflush);
-PHP_FUNCTION(ncurses_timeout);
-PHP_FUNCTION(ncurses_use_env);
-PHP_FUNCTION(ncurses_addstr);
-PHP_FUNCTION(ncurses_putp);
-PHP_FUNCTION(ncurses_scr_dump);
-PHP_FUNCTION(ncurses_scr_init);
-PHP_FUNCTION(ncurses_scr_restore);
-PHP_FUNCTION(ncurses_scr_set);
-PHP_FUNCTION(ncurses_mvaddch);
-PHP_FUNCTION(ncurses_mvaddchnstr);
-PHP_FUNCTION(ncurses_addchnstr);
-PHP_FUNCTION(ncurses_mvaddchstr);
-PHP_FUNCTION(ncurses_addchstr);
-PHP_FUNCTION(ncurses_mvaddnstr);
-PHP_FUNCTION(ncurses_addnstr);
-PHP_FUNCTION(ncurses_mvaddstr);
-PHP_FUNCTION(ncurses_mvdelch);
-PHP_FUNCTION(ncurses_mvgetch);
-PHP_FUNCTION(ncurses_mvinch);
-PHP_FUNCTION(ncurses_mvwaddstr);
-PHP_FUNCTION(ncurses_insstr);
-PHP_FUNCTION(ncurses_instr);
-PHP_FUNCTION(ncurses_mvhline);
-PHP_FUNCTION(ncurses_mvcur);
-PHP_FUNCTION(ncurses_init_color);
-PHP_FUNCTION(ncurses_border);
-PHP_FUNCTION(ncurses_assume_default_colors);
-PHP_FUNCTION(ncurses_define_key);
-PHP_FUNCTION(ncurses_hline);
-PHP_FUNCTION(ncurses_vline);
-PHP_FUNCTION(ncurses_keyok);
-PHP_FUNCTION(ncurses_termname);
-PHP_FUNCTION(ncurses_longname);
-PHP_FUNCTION(ncurses_mousemask);
-PHP_FUNCTION(ncurses_getmouse);
-PHP_FUNCTION(ncurses_ungetmouse);
-PHP_FUNCTION(ncurses_mouse_trafo);
-PHP_FUNCTION(ncurses_wmouse_trafo);
-PHP_FUNCTION(ncurses_waddstr);
-PHP_FUNCTION(ncurses_wnoutrefresh);
-PHP_FUNCTION(ncurses_wclear);
-PHP_FUNCTION(ncurses_wcolor_set);
-PHP_FUNCTION(ncurses_wgetch);
-PHP_FUNCTION(ncurses_keypad);
-PHP_FUNCTION(ncurses_wmove);
-
-PHP_FUNCTION(ncurses_newpad);
-PHP_FUNCTION(ncurses_prefresh);
-PHP_FUNCTION(ncurses_pnoutrefresh);
-
-PHP_FUNCTION(ncurses_wstandout);
-PHP_FUNCTION(ncurses_wstandend);
-PHP_FUNCTION(ncurses_wattrset);
-PHP_FUNCTION(ncurses_wattron);
-PHP_FUNCTION(ncurses_wattroff);
-PHP_FUNCTION(ncurses_waddch);
-PHP_FUNCTION(ncurses_wborder);
-PHP_FUNCTION(ncurses_whline);
-PHP_FUNCTION(ncurses_wvline);
-PHP_FUNCTION(ncurses_getyx);
-PHP_FUNCTION(ncurses_getmaxyx);
-#if HAVE_NCURSES_PANEL
-PHP_FUNCTION(ncurses_update_panels);
-PHP_FUNCTION(ncurses_panel_window);
-PHP_FUNCTION(ncurses_panel_below);
-PHP_FUNCTION(ncurses_panel_above);
-PHP_FUNCTION(ncurses_replace_panel);
-PHP_FUNCTION(ncurses_move_panel);
-PHP_FUNCTION(ncurses_bottom_panel);
-PHP_FUNCTION(ncurses_top_panel);
-PHP_FUNCTION(ncurses_show_panel);
-PHP_FUNCTION(ncurses_hide_panel);
-PHP_FUNCTION(ncurses_del_panel);
-PHP_FUNCTION(ncurses_new_panel);
-#endif
-
-
-#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/ncurses/tests/001.phpt b/ext/ncurses/tests/001.phpt
deleted file mode 100644
index 2316ba1db4..0000000000
--- a/ext/ncurses/tests/001.phpt
+++ /dev/null
@@ -1,21 +0,0 @@
---TEST--
-Check for ncurses presence
---SKIPIF--
-<?php if (!extension_loaded("ncurses")) print "skip"; ?>
---FILE--
-<?php
-echo "ncurses extension is available";
-/*
- you can add regression tests for your extension here
-
- the output of your test code has to be equal to the
- text in the --EXPECT-- section below for the tests
- to pass, differences between the output and the
- expected text are interpreted as failure
-
- see php5/tests/README for further information on
- writing regression tests
-*/
-?>
---EXPECT--
-ncurses extension is available \ No newline at end of file
diff --git a/ext/oci8/CREDITS b/ext/oci8/CREDITS
deleted file mode 100644
index 884efcaa92..0000000000
--- a/ext/oci8/CREDITS
+++ /dev/null
@@ -1,2 +0,0 @@
-OCI8
-Stig Bakken, Thies C. Arntzen, Andy Sautins, David Benson, Maxim Maletsky, Harald Radi, Antony Dovgal
diff --git a/ext/oci8/config.m4 b/ext/oci8/config.m4
deleted file mode 100644
index adb60f587c..0000000000
--- a/ext/oci8/config.m4
+++ /dev/null
@@ -1,167 +0,0 @@
-dnl
-dnl $Id$
-dnl
-
-AC_DEFUN(PHP_OCI_IF_DEFINED,[
- old_CPPFLAGS=$CPPFLAGS
- CPPFLAGS=$3
- AC_EGREP_CPP(yes,[
-#include <oci.h>
-#if defined($1)
- yes
-#endif
- ],[
- CPPFLAGS=$old_CPPFLAGS
- $2
- ],[
- CPPFLAGS=$old_CPPFLAGS
- ])
-])
-
-AC_DEFUN(AC_OCI8_VERSION,[
- AC_MSG_CHECKING([Oracle version])
- if test -s "$OCI8_DIR/orainst/unix.rgs"; then
- OCI8_VERSION=`grep '"ocommon"' $OCI8_DIR/orainst/unix.rgs | sed 's/[ ][ ]*/:/g' | cut -d: -f 6 | cut -c 2-4`
- test -z "$OCI8_VERSION" && OCI8_VERSION=7.3
- elif test -f $OCI8_DIR/lib/libclntsh.$SHLIB_SUFFIX_NAME.10.1; then
- OCI8_VERSION=10.1
- elif test -f $OCI8_DIR/lib/libclntsh.$SHLIB_SUFFIX_NAME.9.0; then
- OCI8_VERSION=9.0
- elif test -f $OCI8_DIR/lib/libclntsh.$SHLIB_SUFFIX_NAME.8.0; then
- OCI8_VERSION=8.1
- elif test -f $OCI8_DIR/lib/libclntsh.$SHLIB_SUFFIX_NAME.1.0; then
- OCI8_VERSION=8.0
- elif test -f $OCI8_DIR/lib/libclntsh.a; then
- if test -f $OCI8_DIR/lib/libcore4.a; then
- OCI8_VERSION=8.0
- else
- OCI8_VERSION=8.1
- fi
- else
- AC_MSG_ERROR(Oracle-OCI8 needed libraries not found)
- fi
- AC_MSG_RESULT($OCI8_VERSION)
-])
-
-PHP_ARG_WITH(oci8, for Oracle-OCI8 support,
-[ --with-oci8[=DIR] Include Oracle-oci8 support. Default DIR is ORACLE_HOME.])
-
-if test "$PHP_OCI8" != "no"; then
- AC_MSG_CHECKING([Oracle Install-Dir])
- if test "$PHP_OCI8" = "yes"; then
- OCI8_DIR=$ORACLE_HOME
- else
- OCI8_DIR=$PHP_OCI8
- fi
- AC_MSG_RESULT($OCI8_DIR)
-
- if test -d "$OCI8_DIR/rdbms/public"; then
- PHP_ADD_INCLUDE($OCI8_DIR/rdbms/public)
- OCI8_INCLUDES="$OCI8_INCLUDES -I$OCI8_DIR/rdbms/public"
- fi
- if test -d "$OCI8_DIR/rdbms/demo"; then
- PHP_ADD_INCLUDE($OCI8_DIR/rdbms/demo)
- OCI8_INCLUDES="$OCI8_INCLUDES -I$OCI8_DIR/rdbms/demo"
- fi
- if test -d "$OCI8_DIR/network/public"; then
- PHP_ADD_INCLUDE($OCI8_DIR/network/public)
- OCI8_INCLUDES="$OCI8_INCLUDES -I$OCI8_DIR/network/public"
- fi
- if test -d "$OCI8_DIR/plsql/public"; then
- PHP_ADD_INCLUDE($OCI8_DIR/plsql/public)
- OCI8_INCLUDES="$OCI8_INCLUDES -I$OCI8_DIR/plsql/public"
- fi
-
- if test -f "$OCI8_DIR/lib/sysliblist"; then
- PHP_EVAL_LIBLINE(`cat $OCI8_DIR/lib/sysliblist`, OCI8_SYSLIB)
- elif test -f "$OCI8_DIR/rdbms/lib/sysliblist"; then
- PHP_EVAL_LIBLINE(`cat $OCI8_DIR/rdbms/lib/sysliblist`, OCI8_SYSLIB)
- fi
-
- AC_OCI8_VERSION($OCI8_DIR)
- case $OCI8_VERSION in
- 8.0)
- PHP_ADD_LIBRARY_WITH_PATH(nlsrtl3, "", OCI8_SHARED_LIBADD)
- PHP_ADD_LIBRARY_WITH_PATH(core4, "", OCI8_SHARED_LIBADD)
- PHP_ADD_LIBRARY_WITH_PATH(psa, "", OCI8_SHARED_LIBADD)
- PHP_ADD_LIBRARY_WITH_PATH(clntsh, $OCI8_DIR/lib, OCI8_SHARED_LIBADD)
- ;;
-
- 8.1)
- PHP_ADD_LIBRARY(clntsh, 1, OCI8_SHARED_LIBADD)
- PHP_ADD_LIBPATH($OCI8_DIR/lib, OCI8_SHARED_LIBADD)
-
- dnl
- dnl OCI_ATTR_STATEMENT is not available in all 8.1.x versions
- dnl
- PHP_OCI_IF_DEFINED(OCI_ATTR_STATEMENT, [AC_DEFINE(HAVE_OCI8_ATTR_STATEMENT,1,[ ])], $OCI8_INCLUDES)
- ;;
-
- 9.0)
- PHP_ADD_LIBRARY(clntsh, 1, OCI8_SHARED_LIBADD)
- PHP_ADD_LIBPATH($OCI8_DIR/lib, OCI8_SHARED_LIBADD)
- AC_DEFINE(HAVE_OCI8_ATTR_STATEMENT,1,[ ])
-
- dnl These functions are only available in version >= 9.2
- PHP_CHECK_LIBRARY(clntsh, OCIEnvNlsCreate,
- [
- PHP_CHECK_LIBRARY(clntsh, OCINlsCharSetNameToId,
- [
- AC_DEFINE(HAVE_OCI_9_2,1,[ ])
- OCI8_VERSION=9.2
- ], [], [
- -L$OCI8_DIR/lib $OCI8_SHARED_LIBADD
- ])
- ], [], [
- -L$OCI8_DIR/lib $OCI8_SHARED_LIBADD
- ])
- ;;
-
- 10.1)
- PHP_ADD_LIBRARY(clntsh, 1, OCI8_SHARED_LIBADD)
- PHP_ADD_LIBPATH($OCI8_DIR/lib, OCI8_SHARED_LIBADD)
- AC_DEFINE(HAVE_OCI8_ATTR_STATEMENT,1,[ ])
- AC_DEFINE(HAVE_OCI_9_2,1,[ ])
- ;;
- *)
- AC_MSG_ERROR(Unsupported Oracle version!)
- ;;
- esac
-
- dnl
- dnl Check if we need to add -locijdbc8
- dnl
- PHP_CHECK_LIBRARY(clntsh, OCILobIsTemporary,
- [
- AC_DEFINE(HAVE_OCI8_TEMP_LOB,1,[ ])
- ], [
- PHP_CHECK_LIBRARY(ocijdbc8, OCILobIsTemporary,
- [
- PHP_ADD_LIBRARY(ocijdbc8, 1, OCI8_SHARED_LIBADD)
- AC_DEFINE(HAVE_OCI8_TEMP_LOB,1,[ ])
- ], [], [
- -L$OCI8_DIR/lib $OCI8_SHARED_LIBADD
- ])
- ], [
- -L$OCI8_DIR/lib $OCI8_SHARED_LIBADD
- ])
-
- dnl
- dnl Check if we have collections
- dnl
- PHP_CHECK_LIBRARY(clntsh, OCICollAssign,
- [
- AC_DEFINE(PHP_OCI8_HAVE_COLLECTIONS,1,[ ])
- ], [], [
- -L$OCI8_DIR/lib $OCI8_SHARED_LIBADD
- ])
-
-
- PHP_NEW_EXTENSION(oci8, oci8.c, $ext_shared)
- AC_DEFINE(HAVE_OCI8,1,[ ])
-
- PHP_SUBST_OLD(OCI8_SHARED_LIBADD)
- PHP_SUBST_OLD(OCI8_DIR)
- PHP_SUBST_OLD(OCI8_VERSION)
-
-fi
diff --git a/ext/oci8/config.w32 b/ext/oci8/config.w32
deleted file mode 100644
index d95d4e6e65..0000000000
--- a/ext/oci8/config.w32
+++ /dev/null
@@ -1,23 +0,0 @@
-// $Id$
-// vim:ft=javascript
-
-ARG_WITH("oci8", "OCI8 support", "no");
-
-if (PHP_OCI8 != "no") {
-
- if (CHECK_HEADER_ADD_INCLUDE("oci.h", "CFLAGS_OCI8", PHP_PHP_BUILD + "\\oci805\\include;" + PHP_OCI8) &&
- CHECK_LIB("oci.lib", "oci8", PHP_OCI8)
-
- ) {
- EXTENSION('oci8', 'oci8.c');
-
- AC_DEFINE('HAVE_OCI8_TEMP_LOB', 1);
- AC_DEFINE('HAVE_OCI8', 1);
- AC_DEFINE('HAVE_OCI8_ATTR_STATEMENT', 1);
- AC_DEFINE('PHP_OCI8_HAVE_COLLECTIONS', 1);
-
- } else {
- WARNING("oci8 not enabled; libraries and headers not found");
- }
-}
-
diff --git a/ext/oci8/oci8.c b/ext/oci8/oci8.c
deleted file mode 100644
index 43f3fbcebf..0000000000
--- a/ext/oci8/oci8.c
+++ /dev/null
@@ -1,7138 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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. |
- +----------------------------------------------------------------------+
- | Authors: Stig Sæther Bakken <ssb@php.net> |
- | Thies C. Arntzen <thies@thieso.net> |
- | Maxim Maletsky <maxim@maxim.cx> |
- | |
- | Collection support by Andy Sautins <asautins@veripost.net> |
- | Temporary LOB support by David Benson <dbenson@mancala.com> |
- | ZTS per process OCIPLogon by Harald Radi <harald.radi@nme.at> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-/* TODO list:
- *
- * - php.ini flags
- * especialliy important for things like oci_ping
- * allowpconns
- * timeout
- * maxlifetime
- * maxpconns
- * - Change return-value for OCIFetch*() (1-row read, 0-Normal end, false-error)
- * - Error mode (print or shut up?)
- * - binding of arrays
- * - Character sets for NCLOBS
- * - split the module into an upper (php-callable) and lower (c-callable) layer!
- * - remove all XXXs
- * - clean up and documentation
- * - make OCIInternalDebug accept a mask of flags....
- * - have one ocifree() call.
- * - make it possible to have persistent statements?
- * - failover
- * - change all the lob stuff to work without classes (optional)!
- * - make sure that the callbacks terminate the strings with \0
- * - cleanup the ociexecute semantics for refcursors
- * - make $lob->savefile use O_BINARY
- * - line 2728: ub4 length = -1; needs fixing
- * - delay OCIInitialize() as far as we can.
- * - add PHP Array <-> OCICollection conversion
- * - add Collection iterator object for INDEX BY tables
- * - make auto-rollback only happen if we have an outstanding transaction
- * - implement ocidisconnect
- * - add OCI9-specific functions and separate them from OCI8 with ifdefs
- */
-
-/* {{{ includes & stuff */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "php.h"
-#include "ext/standard/info.h"
-#include "php_ini.h"
-
-#if HAVE_OCI8
-
-#include "php_oci8.h"
-
-/* True globals, only used by thread safe functions */
-static TsHashTable *persistent_servers;
-static TsHashTable *persistent_sessions;
-
-static long num_persistent = 0;
-static long num_links = 0;
-
-/* True globals, no need for thread safety */
-static int le_conn;
-static int le_stmt;
-static int le_desc;
-#ifdef PHP_OCI8_HAVE_COLLECTIONS
-static int le_coll;
-#endif
-static int le_server;
-static int le_session;
-static zend_class_entry *oci_lob_class_entry_ptr;
-#ifdef PHP_OCI8_HAVE_COLLECTIONS
-static zend_class_entry *oci_coll_class_entry_ptr;
-#endif
-
-#ifndef SQLT_BFILEE
-#define SQLT_BFILEE 114
-#endif
-#ifndef SQLT_CFILEE
-#define SQLT_CFILEE 115
-#endif
-
-#define SAFE_STRING(s) ((s)?(s):"")
-
-#ifdef ZTS
-MUTEX_T mx_lock;
-
-#define mutex_alloc(mutex) mutex = tsrm_mutex_alloc()
-#define mutex_free(mutex) tsrm_mutex_free(mutex)
-#define mutex_lock(mutex) tsrm_mutex_lock(mutex)
-#define mutex_unlock(mutex) tsrm_mutex_unlock(mutex)
-#define thread_id() tsrm_thread_id()
-#else
-#define mutex_alloc(mutex)
-#define mutex_free(mutex)
-#define mutex_lock(mutex)
-#define mutex_unlock(mutex)
-#define thread_id() 1
-#endif
-
-/* dirty marcos to make sure we _never_ call oracle-functions recursivly
- *
- * i'm well aware that we should _never_ call exit directly - this core is for
- * pure testing and commented out - as you can see;-)
- * thies@thieso.net 20010723
- */
-
-#define CALL_OCI(call) \
-{ \
- if (OCI(in_call)) { \
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "OCI8 Recursive call!\n"); \
- exit(-1); \
- } else { \
- OCI(in_call)=1; \
- call; \
- OCI(in_call)=0; \
- } \
-}
-
-#define CALL_OCI_RETURN(retcode,call) \
-{ \
- if (OCI(in_call)) { \
- retcode=-1; \
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "OCI8 Recursive call!\n"); \
- exit(-1); \
- } else { \
- OCI(in_call)=1; \
- retcode=call; \
- OCI(in_call)=0; \
- } \
-}
-
-#include <fcntl.h>
-
-#ifndef O_BINARY
-#define O_BINARY 0
-#endif
-
-/* }}} */
-/* {{{ thread safety stuff */
-
-#ifdef ZTS
-int oci_globals_id;
-#else
-PHP_OCI_API php_oci_globals oci_globals;
-#endif
-
-/* }}} */
-/* {{{ dynamically loadable module stuff */
-
-#ifdef COMPILE_DL_OCI8
-ZEND_GET_MODULE(oci8)
-# ifdef PHP_WIN32
-# include "zend_arg_defs.c"
-# endif
-#endif /* COMPILE_DL */
-
-/* }}} */
-/* {{{ startup/shutdown/info/internal function prototypes */
-
-PHP_MINIT_FUNCTION(oci);
-PHP_RINIT_FUNCTION(oci);
-PHP_MSHUTDOWN_FUNCTION(oci);
-PHP_RSHUTDOWN_FUNCTION(oci);
-PHP_MINFO_FUNCTION(oci);
-
-static ub4 oci_handle_error(oci_connection *connection, ub4 errcode);
-static ub4 oci_error(OCIError *err_p, char *what, sword status);
-static int oci_ping(oci_server *server);
-static void oci_debug(const char *format, ...);
-
-static void _oci_conn_list_dtor(oci_connection *connection TSRMLS_DC);
-static void _oci_stmt_list_dtor(zend_rsrc_list_entry *rsrc TSRMLS_DC);
-static void _oci_descriptor_list_dtor(zend_rsrc_list_entry *rsrc TSRMLS_DC);
-#ifdef PHP_OCI8_HAVE_COLLECTIONS
-static void _oci_coll_list_dtor(zend_rsrc_list_entry *rsrc TSRMLS_DC);
-#endif
-static void _oci_server_list_dtor(zend_rsrc_list_entry *rsrc TSRMLS_DC);
-static void _oci_session_list_dtor(zend_rsrc_list_entry *rsrc TSRMLS_DC);
-static void php_oci_free_conn_list(zend_rsrc_list_entry *rsrc TSRMLS_DC);
-
-static void _oci_column_hash_dtor(void *data);
-static void _oci_define_hash_dtor(void *data);
-static void _oci_bind_hash_dtor(void *data);
-static void _oci_desc_flush_hash_dtor(void *data);
-
-static oci_connection *oci_get_conn(zval ** TSRMLS_DC);
-static oci_statement *oci_get_stmt(zval ** TSRMLS_DC);
-static oci_descriptor *oci_get_desc(int TSRMLS_DC);
-#ifdef PHP_OCI8_HAVE_COLLECTIONS
-/* Questionable name. Very close to oci_get_col */
-static oci_collection *oci_get_coll(int TSRMLS_DC);
-#endif
-static oci_out_column *oci_get_col(oci_statement *, int, zval **);
-
-static int _oci_make_zval(zval *, oci_statement *, oci_out_column *, char *, int mode TSRMLS_DC);
-static oci_statement *oci_parse(oci_connection *, char *, int);
-static int oci_execute(oci_statement *, char *, ub4 mode);
-static int oci_fetch(oci_statement *, ub4, char * TSRMLS_DC);
-static int oci_lobgetlen(oci_connection *, oci_descriptor *, ub4 *length);
-static int oci_loadlob(oci_connection *, oci_descriptor *, char **, ub4 *length);
-static int oci_readlob(oci_connection *, oci_descriptor *, char **, ub4 *len);
-static int oci_setprefetch(oci_statement *statement, int size);
-
-static void oci_do_connect(INTERNAL_FUNCTION_PARAMETERS,int persistent,int exclusive);
-
-static oci_server *_oci_open_server(char *dbname,int persistent);
-static void _oci_close_server(oci_server *server);
-
-static oci_session *_oci_open_session(oci_server* server,char *username,char *password,int persistent,int exclusive, char *charset);
-static void _oci_close_session(oci_session *session);
-
-static sb4 oci_bind_in_callback(dvoid *, OCIBind *, ub4, ub4, dvoid **, ub4 *, ub1 *, dvoid **);
-static sb4 oci_bind_out_callback(dvoid *, OCIBind *, ub4, ub4, dvoid **, ub4 **, ub1 *, dvoid **, ub2 **);
-
-#if 0
-static sb4 oci_failover_callback(dvoid *svchp,dvoid* envhp,dvoid *fo_ctx,ub4 fo_type, ub4 fo_event);
-#endif
-
-static int oci_lob_flush(oci_descriptor *, int flush_flag TSRMLS_DC);
-
-/* }}} */
-
-/* {{{ extension macros
-*/
-#define OCI_GET_STMT(statement,value) \
- statement = oci_get_stmt(value TSRMLS_CC); \
- if (statement == NULL) { \
- RETURN_FALSE; \
- }
-
-#define OCI_GET_CONN(connection,value) \
- connection = oci_get_conn(value TSRMLS_CC); \
- if (connection == NULL) { \
- RETURN_FALSE; \
- }
-
-#define OCI_GET_DESC(descriptor,index) \
- descriptor = oci_get_desc(index TSRMLS_CC); \
- if (descriptor == NULL) { \
- RETURN_FALSE; \
- }
-
-#ifdef PHP_OCI8_HAVE_COLLECTIONS
-#define OCI_GET_COLL(collection,index) \
- collection = oci_get_coll(index TSRMLS_CC); \
- if (collection == NULL) { \
- RETURN_FALSE; \
- }
-#endif
-
-#define IS_LOB_INTERNAL(lob) \
- if (lob->type != OCI_DTYPE_LOB) { \
- switch (lob->type) { \
- case OCI_DTYPE_FILE: \
- php_error_docref(NULL TSRMLS_CC, E_NOTICE, "internal LOB was expected, FILE locator is given"); \
- break; \
- case OCI_DTYPE_ROWID: \
- php_error_docref(NULL TSRMLS_CC, E_NOTICE, "internal LOB was expected, ROWID locator is given"); \
- break; \
- default: \
- php_error_docref(NULL TSRMLS_CC, E_NOTICE, "internal LOB was expected, locator of unknown type is given"); \
- break; \
- } \
- RETURN_FALSE; \
- }
-/* }}} */
-
-/* {{{ extension function prototypes
-*/
-PHP_FUNCTION(oci_bind_by_name);
-PHP_FUNCTION(oci_define_by_name);
-PHP_FUNCTION(oci_field_is_null);
-PHP_FUNCTION(oci_field_name);
-PHP_FUNCTION(oci_field_size);
-PHP_FUNCTION(oci_field_scale);
-PHP_FUNCTION(oci_field_precision);
-PHP_FUNCTION(oci_field_type);
-PHP_FUNCTION(oci_field_type_raw);
-PHP_FUNCTION(oci_execute);
-PHP_FUNCTION(oci_fetch);
-PHP_FUNCTION(oci_cancel);
-PHP_FUNCTION(ocifetchinto);
-PHP_FUNCTION(oci_fetch_object);
-PHP_FUNCTION(oci_fetch_row);
-PHP_FUNCTION(oci_fetch_assoc);
-PHP_FUNCTION(oci_fetch_array);
-PHP_FUNCTION(ocifetchstatement);
-PHP_FUNCTION(oci_fetch_all);
-PHP_FUNCTION(oci_free_statement);
-PHP_FUNCTION(oci_internal_debug);
-PHP_FUNCTION(oci_close);
-PHP_FUNCTION(oci_connect);
-PHP_FUNCTION(oci_new_connect);
-PHP_FUNCTION(oci_pconnect);
-PHP_FUNCTION(oci_error);
-PHP_FUNCTION(oci_free_descriptor);
-PHP_FUNCTION(oci_commit);
-PHP_FUNCTION(oci_rollback);
-PHP_FUNCTION(oci_new_descriptor);
-PHP_FUNCTION(oci_num_fields);
-PHP_FUNCTION(oci_parse);
-PHP_FUNCTION(oci_new_cursor);
-PHP_FUNCTION(oci_result);
-PHP_FUNCTION(oci_server_version);
-PHP_FUNCTION(oci_statement_type);
-PHP_FUNCTION(oci_num_rows);
-PHP_FUNCTION(oci_set_prefetch);
-PHP_FUNCTION(oci_password_change);
-PHP_FUNCTION(oci_lob_save);
-PHP_FUNCTION(oci_lob_import);
-PHP_FUNCTION(oci_lob_export);
-PHP_FUNCTION(oci_lob_load);
-PHP_FUNCTION(oci_lob_tell);
-PHP_FUNCTION(oci_lob_write);
-PHP_FUNCTION(oci_lob_append);
-PHP_FUNCTION(oci_lob_copy);
-PHP_FUNCTION(oci_lob_truncate);
-PHP_FUNCTION(oci_lob_erase);
-PHP_FUNCTION(oci_lob_flush);
-PHP_FUNCTION(ocisetbufferinglob);
-PHP_FUNCTION(ocigetbufferinglob);
-PHP_FUNCTION(oci_lob_is_equal);
-PHP_FUNCTION(oci_lob_rewind);
-PHP_FUNCTION(oci_lob_read);
-PHP_FUNCTION(oci_lob_eof);
-PHP_FUNCTION(oci_lob_seek);
-PHP_FUNCTION(oci_lob_size);
-#ifdef HAVE_OCI8_TEMP_LOB
-PHP_FUNCTION(oci_lob_write_temporary);
-PHP_FUNCTION(oci_lob_close);
-#endif
-#ifdef PHP_OCI8_HAVE_COLLECTIONS
-PHP_FUNCTION(oci_new_collection);
-PHP_FUNCTION(oci_free_collection);
-PHP_FUNCTION(oci_collection_append);
-PHP_FUNCTION(oci_collection_element_get);
-PHP_FUNCTION(oci_collection_element_assign);
-PHP_FUNCTION(oci_collection_assign);
-PHP_FUNCTION(oci_collection_size);
-PHP_FUNCTION(oci_collection_max);
-PHP_FUNCTION(oci_collection_trim);
-#endif
-/* }}} */
-
-/* {{{ extension definition structures
-*/
-#define OCI_ASSOC 1<<0
-#define OCI_NUM 1<<1
-#define OCI_BOTH (OCI_ASSOC|OCI_NUM)
-
-#define OCI_RETURN_NULLS 1<<2
-#define OCI_RETURN_LOBS 1<<3
-
-#define OCI_FETCHSTATEMENT_BY_COLUMN 1<<4
-#define OCI_FETCHSTATEMENT_BY_ROW 1<<5
-#define OCI_FETCHSTATEMENT_BY (OCI_FETCHSTATEMENT_BY_COLUMN | OCI_FETCHSTATEMENT_BY_ROW)
-
-static zend_function_entry php_oci_functions[] = {
- PHP_FE(oci_define_by_name, third_arg_force_ref)
- PHP_FE(oci_bind_by_name, third_arg_force_ref)
- PHP_FE(oci_field_is_null, NULL)
- PHP_FE(oci_field_name, NULL)
- PHP_FE(oci_field_size, NULL)
- PHP_FE(oci_field_scale, NULL)
- PHP_FE(oci_field_precision, NULL)
- PHP_FE(oci_field_type, NULL)
- PHP_FE(oci_field_type_raw, NULL)
- PHP_FE(oci_execute, NULL)
- PHP_FE(oci_cancel, NULL)
- PHP_FE(oci_fetch, NULL)
- PHP_FE(oci_fetch_object, NULL)
- PHP_FE(oci_fetch_row, NULL)
- PHP_FE(oci_fetch_assoc, NULL)
- PHP_FE(oci_fetch_array, NULL)
- PHP_FE(ocifetchinto, second_arg_force_ref)
- PHP_FE(oci_fetch_all, second_arg_force_ref)
- PHP_FE(oci_free_statement, NULL)
- PHP_FE(oci_internal_debug, NULL)
- PHP_FE(oci_num_fields, NULL)
- PHP_FE(oci_parse, NULL)
- PHP_FE(oci_new_cursor, NULL)
- PHP_FE(oci_result, NULL)
- PHP_FE(oci_server_version, NULL)
- PHP_FE(oci_statement_type, NULL)
- PHP_FE(oci_num_rows, NULL)
- PHP_FE(oci_close, NULL)
- PHP_FE(oci_connect, NULL)
- PHP_FE(oci_new_connect, NULL)
- PHP_FE(oci_pconnect, NULL)
- PHP_FE(oci_error, NULL)
- PHP_FE(oci_free_descriptor, NULL)
- PHP_FE(oci_lob_save, NULL)
- PHP_FE(oci_lob_import, NULL)
- PHP_FE(oci_lob_size, NULL)
- PHP_FE(oci_lob_load, NULL)
- PHP_FE(oci_lob_read, NULL)
- PHP_FE(oci_lob_eof, NULL)
- PHP_FE(oci_lob_tell, NULL)
- PHP_FE(oci_lob_truncate, NULL)
- PHP_FE(oci_lob_erase, NULL)
- PHP_FE(oci_lob_flush, NULL)
- PHP_FE(ocisetbufferinglob, NULL)
- PHP_FE(ocigetbufferinglob, NULL)
- PHP_FE(oci_lob_is_equal, NULL)
- PHP_FE(oci_lob_rewind, NULL)
- PHP_FE(oci_lob_write, NULL)
- PHP_FE(oci_lob_append, NULL)
- PHP_FE(oci_lob_copy, NULL)
- PHP_FE(oci_lob_export, NULL)
- PHP_FE(oci_commit, NULL)
- PHP_FE(oci_rollback, NULL)
- PHP_FE(oci_new_descriptor, NULL)
- PHP_FE(oci_set_prefetch, NULL)
- PHP_FE(oci_password_change, NULL)
-#ifdef PHP_OCI8_HAVE_COLLECTIONS
- PHP_FE(oci_free_collection, NULL)
- PHP_FE(oci_collection_append, NULL)
- PHP_FE(oci_collection_element_get, NULL)
- PHP_FE(oci_collection_element_assign, NULL)
- PHP_FE(oci_collection_assign, NULL)
- PHP_FE(oci_collection_size, NULL)
- PHP_FE(oci_collection_max, NULL)
- PHP_FE(oci_collection_trim, NULL)
- PHP_FE(oci_new_collection, NULL)
-#endif
-
- PHP_FALIAS(oci_free_cursor, oci_free_statement, NULL)
- PHP_FALIAS(ocifreecursor, oci_free_statement, NULL)
- PHP_FALIAS(ocibindbyname, oci_bind_by_name, third_arg_force_ref)
- PHP_FALIAS(ocidefinebyname, oci_define_by_name, third_arg_force_ref)
- PHP_FALIAS(ocicolumnisnull, oci_field_is_null, NULL)
- PHP_FALIAS(ocicolumnname, oci_field_name, NULL)
- PHP_FALIAS(ocicolumnsize, oci_field_size, NULL)
- PHP_FALIAS(ocicolumnscale, oci_field_scale, NULL)
- PHP_FALIAS(ocicolumnprecision, oci_field_precision, NULL)
- PHP_FALIAS(ocicolumntype, oci_field_type, NULL)
- PHP_FALIAS(ocicolumntyperaw, oci_field_type_raw, NULL)
- PHP_FALIAS(ociexecute, oci_execute, NULL)
- PHP_FALIAS(ocicancel, oci_cancel, NULL)
- PHP_FALIAS(ocifetch, oci_fetch, NULL)
- PHP_FALIAS(ocifetchstatement, oci_fetch_all, second_arg_force_ref)
- PHP_FALIAS(ocifreestatement, oci_free_statement, NULL)
- PHP_FALIAS(ociinternaldebug, oci_internal_debug, NULL)
- PHP_FALIAS(ocinumcols, oci_num_fields, NULL)
- PHP_FALIAS(ociparse, oci_parse, NULL)
- PHP_FALIAS(ocinewcursor, oci_new_cursor, NULL)
- PHP_FALIAS(ociresult, oci_result, NULL)
- PHP_FALIAS(ociserverversion, oci_server_version, NULL)
- PHP_FALIAS(ocistatementtype, oci_statement_type, NULL)
- PHP_FALIAS(ocirowcount, oci_num_rows, NULL)
- PHP_FALIAS(ocilogoff, oci_close, NULL)
- PHP_FALIAS(ocilogon, oci_connect, NULL)
- PHP_FALIAS(ocinlogon, oci_new_connect, NULL)
- PHP_FALIAS(ociplogon, oci_pconnect, NULL)
- PHP_FALIAS(ocierror, oci_error, NULL)
- PHP_FALIAS(ocifreedesc, oci_free_descriptor, NULL)
- PHP_FALIAS(ocisavelob, oci_lob_save, NULL)
- PHP_FALIAS(ocisavelobfile, oci_lob_import, NULL)
- PHP_FALIAS(ociwritelobtofile, oci_lob_export, NULL)
- PHP_FALIAS(ociloadlob, oci_lob_load, NULL)
- PHP_FALIAS(ocicommit, oci_commit, NULL)
- PHP_FALIAS(ocirollback, oci_rollback, NULL)
- PHP_FALIAS(ocinewdescriptor, oci_new_descriptor, NULL)
- PHP_FALIAS(ocisetprefetch, oci_set_prefetch, NULL)
- PHP_FALIAS(ocipasswordchange, oci_password_change, NULL)
-#ifdef PHP_OCI8_HAVE_COLLECTIONS
- PHP_FALIAS(ocifreecollection, oci_free_collection, NULL)
- PHP_FALIAS(ocinewcollection, oci_new_collection, NULL)
- PHP_FALIAS(ocicollappend, oci_collection_append, NULL)
- PHP_FALIAS(ocicollgetelem, oci_collection_element_get, NULL)
- PHP_FALIAS(ocicollassignelem, oci_collection_element_assign, NULL)
- PHP_FALIAS(ocicollsize, oci_collection_size, NULL)
- PHP_FALIAS(ocicollmax, oci_collection_max, NULL)
- PHP_FALIAS(ocicolltrim, oci_collection_trim, NULL)
-#endif
- {NULL,NULL,NULL}
-};
-
-static zend_function_entry php_oci_lob_class_functions[] = {
- PHP_FALIAS(load, oci_lob_load, NULL)
- PHP_FALIAS(tell, oci_lob_tell, NULL)
- PHP_FALIAS(truncate, oci_lob_truncate, NULL)
- PHP_FALIAS(erase, oci_lob_erase, NULL)
- PHP_FALIAS(flush, oci_lob_flush, NULL)
- PHP_FALIAS(setbuffering,ocisetbufferinglob, NULL)
- PHP_FALIAS(getbuffering,ocigetbufferinglob, NULL)
- PHP_FALIAS(rewind, oci_lob_rewind, NULL)
- PHP_FALIAS(read, oci_lob_read, NULL)
- PHP_FALIAS(eof, oci_lob_eof, NULL)
- PHP_FALIAS(seek, oci_lob_seek, NULL)
- PHP_FALIAS(write, oci_lob_write, NULL)
- PHP_FALIAS(append, oci_lob_append, NULL)
- PHP_FALIAS(size, oci_lob_size, NULL)
- PHP_FALIAS(writetofile, oci_lob_export, NULL)
-#ifdef HAVE_OCI8_TEMP_LOB
- PHP_FALIAS(writetemporary, oci_lob_write_temporary, NULL)
- PHP_FALIAS(close, oci_lob_close, NULL)
-#endif
- PHP_FALIAS(save, oci_lob_save, NULL)
- PHP_FALIAS(savefile, oci_lob_import, NULL)
- PHP_FALIAS(free, oci_free_descriptor, NULL)
- {NULL,NULL,NULL}
-};
-
-#ifdef PHP_OCI8_HAVE_COLLECTIONS
-static zend_function_entry php_oci_coll_class_functions[] = {
- PHP_FALIAS(append, oci_collection_append, NULL)
- PHP_FALIAS(getelem, oci_collection_element_get, NULL)
- PHP_FALIAS(assignelem, oci_collection_element_assign, NULL)
- PHP_FALIAS(assign, oci_collection_assign, NULL)
- PHP_FALIAS(size, oci_collection_size, NULL)
- PHP_FALIAS(max, oci_collection_max, NULL)
- PHP_FALIAS(trim, oci_collection_trim, NULL)
- PHP_FALIAS(free, oci_free_collection, NULL)
- {NULL,NULL,NULL}
-};
-#endif
-
-zend_module_entry oci8_module_entry = {
- STANDARD_MODULE_HEADER,
- "oci8", /* extension name */
- php_oci_functions, /* extension function list */
- PHP_MINIT(oci), /* extension-wide startup function */
- PHP_MSHUTDOWN(oci), /* extension-wide shutdown function */
- PHP_RINIT(oci), /* per-request startup function */
- PHP_RSHUTDOWN(oci), /* per-request shutdown function */
- PHP_MINFO(oci), /* information function */
- NO_VERSION_YET,
- STANDARD_MODULE_PROPERTIES
-};
-/* }}} */
-
-/* {{{ startup, shutdown and info functions
-*/
-static void php_oci_init_globals(php_oci_globals *oci_globals_p TSRMLS_DC)
-{
- OCI(shutdown) = 0;
- OCI(in_call) = 0;
-
- CALL_OCI(
- OCIEnvInit(
- &OCI(pEnv),
- OCI_DEFAULT,
- 0,
- NULL
- )
- );
-
- CALL_OCI(
- OCIHandleAlloc(
- OCI(pEnv),
- (dvoid **)&OCI(pError),
- OCI_HTYPE_ERROR,
- 0,
- NULL
- )
- );
-}
-
-static int _sessions_pcleanup(zend_llist *session_list TSRMLS_DC)
-{
- zend_llist_destroy(session_list);
-
- return 1;
-}
-
-static int _session_pcleanup(oci_session *session TSRMLS_DC)
-{
- _oci_close_session(session);
-
- return 1;
-}
-
-static int _server_pcleanup(oci_server *server TSRMLS_DC)
-{
- _oci_close_server(server);
-
- return 1;
-}
-
-PHP_MINIT_FUNCTION(oci)
-{
- zend_class_entry oci_lob_class_entry;
-#ifdef PHP_OCI8_HAVE_COLLECTIONS
- zend_class_entry oci_coll_class_entry;
-#endif
-
-#ifdef HAVE_OCI8_SHARED_MODE
-
-#ifdef PHP_OCI8_HAVE_COLLECTIONS
-#define PHP_OCI_INIT_MODE_TMP OCI_SHARED | OCI_OBJECT
-#else
-#define PHP_OCI_INIT_MODE_TMP OCI_SHARED
-#endif
-
-#else
-
-#ifdef PHP_OCI8_HAVE_COLLECTIONS
-#define PHP_OCI_INIT_MODE_TMP OCI_DEFAULT | OCI_OBJECT
-#else
-#define PHP_OCI_INIT_MODE_TMP OCI_DEFAULT
-#endif
-
-#endif
-
-#ifdef ZTS
-#define PHP_OCI_INIT_MODE PHP_OCI_INIT_MODE_TMP | OCI_THREADED
-#else
-#define PHP_OCI_INIT_MODE PHP_OCI_INIT_MODE_TMP
-#endif
-
- mutex_alloc(mx_lock);
-
- persistent_servers = malloc(sizeof(TsHashTable));
- persistent_sessions = malloc(sizeof(TsHashTable));
- zend_ts_hash_init(persistent_servers, 13, NULL, (dtor_func_t) _server_pcleanup, 1);
- zend_ts_hash_init(persistent_sessions, 13, NULL, (dtor_func_t) _sessions_pcleanup, 1);
-
- OCIInitialize(PHP_OCI_INIT_MODE, NULL, NULL, NULL, NULL);
-
-#ifdef ZTS
- ts_allocate_id(&oci_globals_id, sizeof(php_oci_globals), (ts_allocate_ctor) php_oci_init_globals, NULL);
-#else
- php_oci_init_globals(&oci_globals TSRMLS_CC);
-#endif
-
- le_stmt = zend_register_list_destructors_ex(_oci_stmt_list_dtor, NULL, "oci8 statement", module_number);
- le_conn = zend_register_list_destructors_ex(php_oci_free_conn_list, NULL, "oci8 connection", module_number);
- le_desc = zend_register_list_destructors_ex(_oci_descriptor_list_dtor, NULL, "oci8 descriptor", module_number);
-#ifdef PHP_OCI8_HAVE_COLLECTIONS
- le_coll = zend_register_list_destructors_ex(_oci_coll_list_dtor, NULL, "oci8 collection", module_number);
-#endif
- le_server = zend_register_list_destructors_ex(_oci_server_list_dtor, NULL, "oci8 server", module_number);
- le_session = zend_register_list_destructors_ex(_oci_session_list_dtor, NULL, "oci8 session", module_number);
-
- INIT_CLASS_ENTRY(oci_lob_class_entry, "OCI-Lob", php_oci_lob_class_functions);
-#ifdef PHP_OCI8_HAVE_COLLECTIONS
- INIT_CLASS_ENTRY(oci_coll_class_entry, "OCI-Collection", php_oci_coll_class_functions);
-#endif
-
- oci_lob_class_entry_ptr = zend_register_internal_class(&oci_lob_class_entry TSRMLS_CC);
-#ifdef PHP_OCI8_HAVE_COLLECTIONS
- oci_coll_class_entry_ptr = zend_register_internal_class(&oci_coll_class_entry TSRMLS_CC);
-#endif
-
-/* thies@thieso.net 990203 i do not think that we will need all of them - just in here for completeness for now! */
- REGISTER_LONG_CONSTANT("OCI_DEFAULT",OCI_DEFAULT, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("OCI_DESCRIBE_ONLY",OCI_DESCRIBE_ONLY, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("OCI_COMMIT_ON_SUCCESS",OCI_COMMIT_ON_SUCCESS, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("OCI_EXACT_FETCH",OCI_EXACT_FETCH, CONST_CS | CONST_PERSISTENT);
-
-/* for $LOB->seek() */
- REGISTER_LONG_CONSTANT("OCI_SEEK_SET",OCI_SEEK_SET, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("OCI_SEEK_CUR",OCI_SEEK_CUR, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("OCI_SEEK_END",OCI_SEEK_END, CONST_CS | CONST_PERSISTENT);
-
-/* for $LOB->flush() */
- REGISTER_LONG_CONSTANT("OCI_LOB_BUFFER_FREE",OCI_LOB_BUFFER_FREE, CONST_CS | CONST_PERSISTENT);
-
-/* for OCIBindByName (real "oci" names + short "php" names*/
- REGISTER_LONG_CONSTANT("SQLT_BFILEE",SQLT_BFILEE, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("SQLT_CFILEE",SQLT_CFILEE, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("SQLT_CLOB",SQLT_CLOB, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("SQLT_BLOB",SQLT_BLOB, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("SQLT_RDD",SQLT_RDD, CONST_CS | CONST_PERSISTENT);
-
-#ifdef PHP_OCI8_HAVE_COLLECTIONS
- REGISTER_LONG_CONSTANT("OCI_B_NTY",SQLT_NTY, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("SQLT_NTY",SQLT_NTY, CONST_CS | CONST_PERSISTENT);
- REGISTER_STRING_CONSTANT("OCI_SYSDATE","SYSDATE",CONST_PERSISTENT);
-#endif
-
- REGISTER_LONG_CONSTANT("OCI_B_BFILE",SQLT_BFILEE, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("OCI_B_CFILEE",SQLT_CFILEE, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("OCI_B_CLOB",SQLT_CLOB, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("OCI_B_BLOB",SQLT_BLOB, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("OCI_B_ROWID",SQLT_RDD, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("OCI_B_CURSOR",SQLT_RSET, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("OCI_B_BIN",SQLT_BIN, CONST_CS | CONST_PERSISTENT);
-
-/* for OCIFetchStatement */
- REGISTER_LONG_CONSTANT("OCI_FETCHSTATEMENT_BY_COLUMN", OCI_FETCHSTATEMENT_BY_COLUMN, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("OCI_FETCHSTATEMENT_BY_ROW", OCI_FETCHSTATEMENT_BY_ROW, CONST_CS | CONST_PERSISTENT);
-
-/* for OCIFetchInto & OCIResult */
- REGISTER_LONG_CONSTANT("OCI_ASSOC",OCI_ASSOC, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("OCI_NUM",OCI_NUM, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("OCI_BOTH",OCI_BOTH, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("OCI_RETURN_NULLS",OCI_RETURN_NULLS, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("OCI_RETURN_LOBS",OCI_RETURN_LOBS, CONST_CS | CONST_PERSISTENT);
-
-/* for OCINewDescriptor (real "oci" names + short "php" names*/
- REGISTER_LONG_CONSTANT("OCI_DTYPE_FILE",OCI_DTYPE_FILE, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("OCI_DTYPE_LOB",OCI_DTYPE_LOB, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("OCI_DTYPE_ROWID",OCI_DTYPE_ROWID, CONST_CS | CONST_PERSISTENT);
-
- REGISTER_LONG_CONSTANT("OCI_D_FILE",OCI_DTYPE_FILE, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("OCI_D_LOB",OCI_DTYPE_LOB, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("OCI_D_ROWID",OCI_DTYPE_ROWID, CONST_CS | CONST_PERSISTENT);
-
-/* for OCIWriteTemporaryLob */
-#ifdef HAVE_OCI8_TEMP_LOB
- REGISTER_LONG_CONSTANT("OCI_TEMP_CLOB",OCI_TEMP_CLOB, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("OCI_TEMP_BLOB",OCI_TEMP_BLOB, CONST_CS | CONST_PERSISTENT);
-#endif
-
- return SUCCESS;
-}
-
-/* ----------------------------------------------------------------- */
-
-PHP_RINIT_FUNCTION(oci)
-{
- OCI(debug_mode) = 0; /* start "fresh" */
-/* OCI(in_call) = 0; i don't think we want this! */
-
- oci_debug("php_rinit_oci");
-
- return SUCCESS;
-}
-
-PHP_MSHUTDOWN_FUNCTION(oci)
-{
- OCI(shutdown) = 1;
-
- oci_debug("START php_mshutdown_oci");
-
- zend_ts_hash_destroy(persistent_sessions);
- zend_ts_hash_destroy(persistent_servers);
-
- free(persistent_sessions);
- free(persistent_servers);
-
- mutex_free(mx_lock);
-
- CALL_OCI(
- OCIHandleFree(
- (dvoid *) OCI(pEnv),
- OCI_HTYPE_ENV
- )
- );
-
- oci_debug("END php_mshutdown_oci");
-
- return SUCCESS;
-}
-
-PHP_RSHUTDOWN_FUNCTION(oci)
-{
- oci_debug("START php_rshutdown_oci");
-
-#if 0
- /* XXX free all statements, rollback all outstanding transactions */
-
- zend_ts_hash_apply(persistent_sessions, (apply_func_t) _session_cleanup TSRMLS_CC);
- zend_ts_hash_apply(persistent_servers, (apply_func_t) _server_cleanup TSRMLS_CC);
-#endif
-
- oci_debug("END php_rshutdown_oci");
-
- return SUCCESS;
-}
-
-PHP_MINFO_FUNCTION(oci)
-{
- char buf[32];
-
- php_info_print_table_start();
- php_info_print_table_row(2, "OCI8 Support", "enabled");
- php_info_print_table_row(2, "Revision", "$Revision$");
-
- sprintf(buf, "%ld", num_persistent);
- php_info_print_table_row(2, "Active Persistent Links", buf);
- sprintf(buf, "%ld", num_links);
- php_info_print_table_row(2, "Active Links", buf);
-
-#ifndef PHP_WIN32
- php_info_print_table_row(2, "Oracle Version", PHP_OCI8_VERSION );
- php_info_print_table_row(2, "Compile-time ORACLE_HOME", PHP_OCI8_DIR );
- php_info_print_table_row(2, "Libraries Used", PHP_OCI8_SHARED_LIBADD );
-#endif
-
-#ifdef HAVE_OCI8_TEMP_LOB
- php_info_print_table_row(2, "Temporary Lob support", "enabled" );
-#else
- php_info_print_table_row(2, "Temporary Lob support", "disabled" );
-#endif
-
-#ifdef PHP_OCI8_HAVE_COLLECTIONS
- php_info_print_table_row(2, "Collections support", "enabled" );
-#else
- php_info_print_table_row(2, "Collections support", "disabled" );
-#endif
-
- php_info_print_table_end();
-}
-/* }}} */
-
-/* {{{ _oci_define_hash_dtor()
-*/
-static void _oci_define_hash_dtor(void *data)
-{
- oci_define *define = (oci_define *) data;
-
- oci_debug("_oci_define_hash_dtor: %s",define->name);
-
- zval_ptr_dtor(&define->zval);
-
- if (define->name) {
- efree(define->name);
- define->name = 0;
- }
-}
-/* }}} */
-
-/* {{{ _oci_desc_flush_hash_dtor()
- */
-static void _oci_desc_flush_hash_dtor(void *data)
-{
- oci_descriptor *descr = *(oci_descriptor **)data;
- TSRMLS_FETCH();
-
- if (descr->buffering == 2 && (descr->type == OCI_DTYPE_LOB || descr->type == OCI_DTYPE_FILE)) {
- oci_lob_flush(descr,OCI_LOB_BUFFER_FREE TSRMLS_CC);
- descr->buffering = 1;
- }
-}
-/* }}} */
-
-/* {{{ _oci_bind_hash_dtor()
-*/
-static void _oci_bind_hash_dtor(void *data)
-{
- oci_bind *bind = (oci_bind *) data;
-
- oci_debug("_oci_bind_hash_dtor:");
-
- zval_ptr_dtor(&(bind->zval));
-}
-/* }}} */
-
-/* {{{ _oci_bind_pre_exec()
-*/
-static int _oci_bind_pre_exec(void *data TSRMLS_DC)
-{
- oci_bind *bind = (oci_bind *) data;
-
- /* reset all bind stuff to a normal state..-. */
-
- bind->indicator = 0;
-
- return 0;
-}
-/* }}} */
-
-/* {{{ _oci_bind_post_exec()
-*/
-static int _oci_bind_post_exec(void *data TSRMLS_DC)
-{
- oci_bind *bind = (oci_bind *) data;
-
- if (bind->indicator == -1) { /* NULL */
- zval *val = bind->zval;
- if (Z_TYPE_P(val) == IS_STRING) {
- *Z_STRVAL_P(val) = '\0'; /* XXX avoid warning in debug mode */
- }
- zval_dtor(val);
- ZVAL_NULL(val);
- } else if (Z_TYPE_P(bind->zval) == IS_STRING) {
- Z_STRVAL_P(bind->zval) = erealloc(Z_STRVAL_P(bind->zval), Z_STRLEN_P(bind->zval)+1);
- Z_STRVAL_P(bind->zval)[ Z_STRLEN_P(bind->zval) ] = '\0';
- }
-
-
- return 0;
-}
-/* }}} */
-
-/* {{{ _oci_column_hash_dtor()
-*/
-static void _oci_column_hash_dtor(void *data)
-{
- oci_out_column *column = (oci_out_column *) data;
- TSRMLS_FETCH();
-
- oci_debug("START _oci_column_hash_dtor: %s",column->name);
-
- if (column->stmtid) {
- zend_list_delete(column->stmtid);
- }
-
- if (column->is_descr) {
- zend_list_delete(column->descid);
- } else {
- if (column->data) {
- efree(column->data);
- }
- }
-
- oci_debug("END _oci_column_hash_dtor: %s",column->name);
-
- if (column->name) {
- efree(column->name);
- }
-}
-/* }}} */
-
-/* {{{ _oci_stmt_list_dtor()
-*/
-static void _oci_stmt_list_dtor(zend_rsrc_list_entry *rsrc TSRMLS_DC)
-{
- oci_statement *statement = (oci_statement *)rsrc->ptr;
- oci_debug("START _oci_stmt_list_dtor: id=%d last_query=\"%s\"",statement->id,SAFE_STRING(statement->last_query));
-
- if (statement->pStmt) {
- CALL_OCI(
- OCIHandleFree(
- statement->pStmt,
- OCI_HTYPE_STMT
- )
- );
-
- statement->pStmt = 0;
- }
-
- if (statement->pError) {
- CALL_OCI(
- OCIHandleFree(
- statement->pError,
- OCI_HTYPE_ERROR
- )
- );
-
- statement->pError = 0;
- }
-
- if (statement->last_query) {
- efree(statement->last_query);
- }
-
- if (statement->columns) {
- zend_hash_destroy(statement->columns);
- efree(statement->columns);
- }
-
- if (statement->binds) {
- zend_hash_destroy(statement->binds);
- efree(statement->binds);
- }
-
- if (statement->defines) {
- zend_hash_destroy(statement->defines);
- efree(statement->defines);
- }
-
- oci_debug("END _oci_stmt_list_dtor: id=%d",statement->id);
-
- efree(statement);
-}
-/* }}} */
-
-/* {{{ _oci_conn_list_dtor()
-*/
-static void _oci_conn_list_dtor(oci_connection *connection TSRMLS_DC)
-{
- /*
- as the connection is "only" a in memory service context we do not disconnect from oracle.
- */
-
- oci_debug("START _oci_conn_list_dtor: id=%d",connection->id);
-
- if (connection->pServiceContext) {
-
- if (connection->needs_commit) {
- oci_debug("OCITransRollback");
- CALL_OCI_RETURN(connection->error,
- OCITransRollback(
- connection->pServiceContext,
- connection->pError,
- (ub4)0
- )
- );
-
- if (connection->error) {
- oci_error(connection->pError, "failed to rollback outstanding transactions!", connection->error);
- }
- connection->needs_commit = 0;
- } else {
- oci_debug("nothing to do..");
- }
-
- CALL_OCI(
- OCIHandleFree(
- (dvoid *) connection->pServiceContext,
- (ub4) OCI_HTYPE_SVCCTX
- )
- );
- }
-
- if (connection->session) {
- /* close associated session when destructed */
- zend_list_delete(connection->session->num);
- }
-
- if (connection->descriptors) {
- zend_hash_destroy(connection->descriptors);
- efree(connection->descriptors);
- }
-
- if (connection->pError) {
- CALL_OCI(
- OCIHandleFree(
- (dvoid *) connection->pError,
- (ub4) OCI_HTYPE_ERROR
- )
- );
- }
-
- oci_debug("END _oci_conn_list_dtor: id=%d",connection->id);
-
- efree(connection);
-}
-/* }}} */
-
-/* {{{ php_oci_free_conn_list
- */
-static void php_oci_free_conn_list(zend_rsrc_list_entry *rsrc TSRMLS_DC)
-{
- oci_connection *conn = (oci_connection *)rsrc->ptr;
- _oci_conn_list_dtor(conn TSRMLS_CC);
-}
-/* }}} */
-
-#ifdef PHP_OCI8_HAVE_COLLECTIONS
-
-/* {{{ _oci_coll_list_dtor()
- */
-static void _oci_coll_list_dtor(zend_rsrc_list_entry *rsrc TSRMLS_DC)
-{
- oci_collection *coll = (oci_collection *)rsrc->ptr;
- oci_debug("START _oci_coll_list_dtor: %d",coll->id);
-
- /* Note sure if we need to free the object. Have an
- oracle TAR out on this one.
- OCIDescriptorFree(descr->ocidescr, descr->type); */
-
- oci_debug("END _oci_coll_list_dtor: %d",coll->id);
-
- efree(coll);
-}
-/* }}} */
-#endif
-
-/* {{{ _oci_descriptor_list_dtor()
- */
-static void _oci_descriptor_list_dtor(zend_rsrc_list_entry *rsrc TSRMLS_DC)
-{
- oci_descriptor *descr = (oci_descriptor *)rsrc->ptr;
- oci_debug("START _oci_descriptor_list_dtor: %d",descr->id);
-
- /* flushing Lobs & Files with buffering enabled */
- if ((descr->type == OCI_DTYPE_FILE || descr->type == OCI_DTYPE_LOB) && descr->buffering == 2) {
- oci_debug("descriptor #%d needs to be flushed. flushing..",descr->id);
- oci_lob_flush(descr,OCI_LOB_BUFFER_FREE TSRMLS_CC);
- }
-
- CALL_OCI(
- OCIDescriptorFree(
- descr->ocidescr,
- descr->type
- )
- );
-
- oci_debug("END _oci_descriptor_list_dtor: %d",descr->id);
-
- efree(descr);
-}
-/* }}} */
-
-/* {{{ _oci_server_list_dtor()
- */
-static void _oci_server_list_dtor(zend_rsrc_list_entry *rsrc TSRMLS_DC)
-{
-#if 0
- oci_server *server = (oci_server *)rsrc->ptr;
- if (server->persistent)
- return;
-
- _oci_close_server(server);
-#endif
-}
-/* }}} */
-
-/* {{{ _oci_session_list_dtor()
- */
-static void _oci_session_list_dtor(zend_rsrc_list_entry *rsrc TSRMLS_DC)
-{
- oci_session *session = (oci_session *)rsrc->ptr;
- if (session->persistent) {
- /* clear thread assignment */
- session->thread = 0;
- return;
- }
-
- _oci_close_session(session);
-}
-/* }}} */
-
-/* {{{ oci_handle_error
- */
-static ub4 oci_handle_error(oci_connection *connection, ub4 errcode)
-{
- switch (errcode) {
- case 1013: /* user requested cancel of current operation */
- zend_bailout();
- break;
-
- case 22: /* ORA-00022 Invalid session id */
- case 1012: /* ORA-01012: */
- case 3113: /* ORA-03113: end-of-file on communication channel */
- case 604:
- case 1041:
- connection->is_open = 0;
- connection->session->is_open = 0;
- connection->session->server->is_open = 0;
- return 1; /* fatal error */
- }
-
- return 0; /* no fatal error */
-}
-/* }}} */
-
-/* {{{ oci_error()
-*/
-static ub4 oci_error(OCIError *err_p, char *what, sword status)
-{
- text errbuf[512];
- sb4 errcode = 0;
- TSRMLS_FETCH();
-
- switch (status) {
- case OCI_SUCCESS:
- break;
- case OCI_SUCCESS_WITH_INFO:
- CALL_OCI(
- OCIErrorGet(
- err_p,
- (ub4)1,
- NULL,
- &errcode,
- errbuf,
- (ub4)sizeof(errbuf),
- (ub4)OCI_HTYPE_ERROR
- )
- );
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s: OCI_SUCCESS_WITH_INFO: %s", what, errbuf);
- break;
- case OCI_NEED_DATA:
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s: OCI_NEED_DATA", what);
- break;
- case OCI_NO_DATA:
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s: OCI_NO_DATA", what);
- break;
- case OCI_ERROR: {
- CALL_OCI(
- OCIErrorGet(
- err_p,
- (ub4)1,
- NULL,
- &errcode,
- errbuf,
- (ub4)sizeof(errbuf),
- (ub4)OCI_HTYPE_ERROR
- )
- );
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s: %s", what, errbuf);
- break;
- }
- case OCI_INVALID_HANDLE:
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s: OCI_INVALID_HANDLE", what);
- break;
- case OCI_STILL_EXECUTING:
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s: OCI_STILL_EXECUTING", what);
- break;
- case OCI_CONTINUE:
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s: OCI_CONTINUE", what);
- break;
- default:
- break;
- }
- return errcode;
-}
-/* }}} */
-
-/* {{{ oci_ping()
-*/
-static int oci_ping(oci_server *server)
-{
- char version[256];
- TSRMLS_FETCH();
-
- CALL_OCI_RETURN(OCI(error),
- OCIServerVersion(
- server->pServer,
- OCI(pError),
- (text*)version,
- sizeof(version),
- OCI_HTYPE_SERVER
- )
- );
-
- if (OCI(error) == OCI_SUCCESS) {
- return 1;
- }
-
- oci_error(OCI(pError), "oci_ping", OCI(error));
-
- return 0;
-}
-/* }}} */
-
-/************************* INTERNAL FUNCTIONS *************************/
-
-/* {{{ oci_debug()
-*/
-static void oci_debug(const char *format, ...)
-{
- TSRMLS_FETCH();
-
- if (OCI(debug_mode)) {
- char buffer[1024];
- va_list args;
-
- va_start(args, format);
- vsnprintf(buffer, sizeof(buffer)-1, format, args);
- va_end(args);
- buffer[sizeof(buffer)-1] = '\0';
- php_printf("OCIDebug: %s<br />\n", buffer);
- }
-}
-/* }}} */
-
-/* {{{ oci_get_conn()
-*/
-static oci_connection *oci_get_conn(zval **conn TSRMLS_DC)
-{
- oci_connection *connection;
-
- connection = (oci_connection *) zend_fetch_resource(conn TSRMLS_CC, -1, "OCI8-Connection", NULL, 1, le_conn);
-
- if (connection && connection->is_open) {
- return connection;
- } else {
- return (oci_connection *) NULL;
- }
-}
-/* }}} */
-
-/* {{{ oci_get_stmt()
-*/
-static oci_statement *oci_get_stmt(zval **stmt TSRMLS_DC)
-{
- oci_statement *statement;
-
- statement = (oci_statement *) zend_fetch_resource(stmt TSRMLS_CC, -1, "OCI8-Statement", NULL, 1, le_stmt);
-
- if (statement && statement->conn->is_open) {
- return statement;
- } else {
- return (oci_statement *) NULL;
- }
-}
-/* }}} */
-
-/* {{{ oci_get_desc()
-*/
-static oci_descriptor *oci_get_desc(int ind TSRMLS_DC)
-{
- oci_descriptor *descriptor;
- int actual_resource_type;
-
- descriptor = (oci_descriptor *) zend_list_find(ind, &actual_resource_type);
-
- if (descriptor && (actual_resource_type == le_desc)) {
- return descriptor;
- } else {
- return (oci_descriptor *) NULL;
- }
-}
-/* }}} */
-
-/* {{{ oci_get_col()
-*/
-static oci_out_column *oci_get_col(oci_statement *statement, int col, zval **value)
-{
- oci_out_column *outcol = NULL;
- int i;
- TSRMLS_FETCH();
-
- if (statement->columns == 0) { /* we release the columns at the end of a fetch */
- return NULL;
- }
-
- if (value) {
- if (Z_TYPE_PP(value) == IS_STRING) {
- for (i = 0; i < statement->ncolumns; i++) {
- outcol = oci_get_col(statement, i + 1, 0);
- if (outcol == NULL) {
- continue;
- } else if (((int) outcol->name_len == Z_STRLEN_PP(value)) &&
- (!strncmp(outcol->name, Z_STRVAL_PP(value), Z_STRLEN_PP(value)))
- ) {
- return outcol;
- }
- }
- } else {
- convert_to_long_ex(value);
- return oci_get_col(statement,Z_LVAL_PP(value),0);
- }
- } else if (col != -1) {
- if (zend_hash_index_find(statement->columns, col, (void **)&outcol) == FAILURE) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid column %d", col);
- return NULL;
- }
- return outcol;
- }
-
- return NULL;
-}
-/* }}} */
-
-/* {{{ oci_new_desc()
-*/
-static oci_descriptor *oci_new_desc(int type, oci_connection *connection)
-{
- oci_descriptor *descr;
- TSRMLS_FETCH();
-
- descr = emalloc(sizeof(oci_descriptor));
-
- descr->type = type;
-
- switch (descr->type) {
- case OCI_DTYPE_FILE:
- case OCI_DTYPE_LOB:
- case OCI_DTYPE_ROWID:
- break;
-
- default:
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unknown descriptor type %d.", descr->type);
- efree(descr);
- return 0;
- }
-
- CALL_OCI_RETURN(OCI(error),
- OCIDescriptorAlloc(
- connection->session->pEnv,
- (dvoid*)&(descr->ocidescr),
- descr->type,
- (size_t) 0,
- (dvoid **) 0
- )
- );
-
- if (OCI(error)) {
- ub4 error;
- error = oci_error(OCI(pError),"OCIDescriptorAlloc %d",OCI(error));
- oci_handle_error(connection, error);
- efree(descr);
- return 0;
- }
-
- descr->id = zend_list_insert(descr,le_desc);
- descr->conn = connection;
- descr->lob_current_position = 0;
- descr->lob_size = -1; /* we should set it to -1 to know, that it's just not initialized */
- descr->buffering = 0; /* buffering is off by default */
- zend_list_addref(connection->id);
-
- if (descr->type == OCI_DTYPE_LOB || descr->type == OCI_DTYPE_FILE) {
- /* add Lobs & Files to hash. we'll flush them ate the end */
- if (!connection->descriptors) {
- ALLOC_HASHTABLE(connection->descriptors);
- zend_hash_init(connection->descriptors, 13, NULL, _oci_desc_flush_hash_dtor, 0);
- }
-
- zend_hash_next_index_insert(connection->descriptors,&descr,sizeof(oci_descriptor *),NULL);
- }
- oci_debug("oci_new_desc %d",descr->id);
-
- return descr;
-}
-/* }}} */
-
-#ifdef PHP_OCI8_HAVE_COLLECTIONS
-
-/* {{{ _oci_get_ocicoll()
-*/
-static int _oci_get_ocicoll(zval *id,oci_collection **collection TSRMLS_DC)
-{
- zval **coll;
-
- if (zend_hash_find(Z_OBJPROP_P(id), "collection", sizeof("collection"), (void **)&coll) == FAILURE) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "cannot find collection");
- return 0;
- }
- if ((*collection = oci_get_coll(Z_LVAL_PP(coll) TSRMLS_CC)) == NULL) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "collection not found");
- return 0;
- }
-
- return Z_LVAL_PP(coll);
-}
-/* }}} */
-
-#endif
-
-/* {{{ _oci_get_ocidesc()
-*/
-static int _oci_get_ocidesc(zval *id,oci_descriptor **descriptor TSRMLS_DC)
-{
- zval **desc;
-
- if (zend_hash_find(Z_OBJPROP_P(id), "descriptor", sizeof("descriptor"), (void **)&desc) == FAILURE) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "cannot find descriptor");
- return 0;
- }
-
- if ((*descriptor = oci_get_desc(Z_LVAL_PP(desc) TSRMLS_CC)) == NULL) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "descriptor not found");
- return 0;
- }
-
- return Z_LVAL_PP(desc);
-}
-/* }}} */
-
-/* {{{ _oci_make_zval()
-*/
-static int _oci_make_zval(zval *value,oci_statement *statement,oci_out_column *column, char *func, int mode TSRMLS_DC)
-{
- oci_descriptor *descr;
- ub4 loblen;
- int size;
- char *buffer;
-
- if (column->indicator || column->retcode)
- if ((column->indicator != -1) && (column->retcode != 1405))
- oci_debug("_oci_make_zval: %16s,retlen = %4d,retlen4 = %d,storage_size4 = %4d,indicator %4d, retcode = %4d",
- column->name,column->retlen,column->retlen4,column->storage_size4,column->indicator,column->retcode);
-
- if ((!statement->has_data) || (column->indicator == -1)) { /* column is NULL or statment has no current data */
- ZVAL_NULL(value);
- return 0;
- }
-
- if (column->is_cursor) { /* REFCURSOR -> simply return the statement id */
- ZVAL_RESOURCE(value,column->stmtid);
- zend_list_addref(column->stmtid);
- } else if (column->is_descr) {
- if ((column->data_type != SQLT_RDD) && (mode & OCI_RETURN_LOBS)) {
- /* OCI_RETURN_LOBS means that we want the content of the LOB back instead of the locator */
-
- descr = oci_get_desc(column->descid TSRMLS_CC);
- if (!descr) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "unable to find my descriptor %p",column->data);
- return -1;
- }
-
- if (oci_loadlob(statement->conn,descr,&buffer,&loblen)) {
- ZVAL_FALSE(value);
- } else {
- ZVAL_STRINGL(value,buffer,loblen,0);
- }
- } else {
- /* return the locator */
- object_init_ex(value, oci_lob_class_entry_ptr);
- add_property_resource(value, "descriptor", column->descid);
- zend_list_addref(column->descid);
- }
- } else {
- switch (column->retcode) {
- case 0:
- /* intact value */
- if (column->piecewise) {
- size = column->retlen4;
- } else {
- size = column->retlen;
- }
- break;
-
- default:
- /* XXX we SHOULD maybe have a different behaviour for unknown results! */
- ZVAL_FALSE(value);
- return 0;
- }
-
- ZVAL_STRINGL(value,column->data,size,1);
- }
-
- return 0;
-}
-/* }}} */
-
-/* {{{ oci_setprefetch()
-*/
-static int oci_setprefetch(oci_statement *statement,int size)
-{
- ub4 prefetch;
- sword error;
- TSRMLS_FETCH();
-
- prefetch = size * 1024;
-
- CALL_OCI_RETURN(error,
- OCIAttrSet(
- statement->pStmt,
- OCI_HTYPE_STMT,
- &prefetch,
- 0,
- OCI_ATTR_PREFETCH_MEMORY,
- statement->pError
- )
- );
-
- statement->error = oci_error(statement->pError, "OCIAttrSet OCI_ATTR_PREFETCH_MEMORY", error);
-
- if (statement->error) {
- oci_handle_error(statement->conn, statement->error);
- }
-
- prefetch = size;
- CALL_OCI_RETURN(error,
- OCIAttrSet(
- statement->pStmt,
- OCI_HTYPE_STMT,
- &prefetch,
- 0,
- OCI_ATTR_PREFETCH_ROWS,
- statement->pError
- )
- );
-
- statement->error = oci_error(statement->pError, "OCIAttrSet OCI_ATTR_PREFETCH_MEMORY", error);
- if (statement->error) {
- oci_handle_error(statement->conn, statement->error);
- }
-
- return 1;
-}
-/* }}} */
-
-/* {{{ oci_parse()
-*/
-static oci_statement *oci_parse(oci_connection *connection, char *query, int len)
-{
- oci_statement *statement;
- sword error;
- TSRMLS_FETCH();
-
- statement = ecalloc(1,sizeof(oci_statement));
-
- CALL_OCI(
- OCIHandleAlloc(
- connection->session->pEnv,
- (dvoid **)&statement->pStmt,
- OCI_HTYPE_STMT,
- 0,
- NULL
- )
- );
-
- CALL_OCI(
- OCIHandleAlloc(
- connection->session->pEnv,
- (dvoid **)&statement->pError,
- OCI_HTYPE_ERROR,
- 0,
- NULL
- )
- );
-
- if (len > 0) {
- CALL_OCI_RETURN(error,
- OCIStmtPrepare(
- statement->pStmt,
- connection->pError,
- (text*)query,
- len,
- OCI_NTV_SYNTAX,
- OCI_DEFAULT
- )
- );
-
- connection->error = oci_error(connection->pError, "OCIParse", error);
- if (connection->error) {
- CALL_OCI(
- OCIHandleFree(
- statement->pStmt,
- OCI_HTYPE_STMT
- )
- );
-
- CALL_OCI(
- OCIHandleFree(
- statement->pError,
- OCI_HTYPE_ERROR
- )
- );
-
- efree(statement);
- oci_handle_error(connection, connection->error);
- return 0;
- }
- }
-
- if (query) {
- statement->last_query = estrdup(query);
- }
-
- statement->conn = connection;
- statement->has_data = 0;
-
- statement->id = zend_list_insert(statement,le_stmt);
-
- oci_debug("oci_parse \"%s\" id=%d conn=%d",
- SAFE_STRING(query),
- statement->id,
- statement->conn->id);
-
- zend_list_addref(statement->conn->id);
-
- return statement;
-}
-/* }}} */
-
-/* {{{ oci_execute()
-*/
-static int oci_execute(oci_statement *statement, char *func,ub4 mode)
-{
- oci_out_column *outcol;
- oci_out_column column;
- OCIParam *param = 0;
- text *colname;
- ub4 counter;
- ub2 define_type;
- ub4 iters;
- ub4 colcount;
- ub2 dynamic;
- int dtype;
- dvoid *buf;
- oci_descriptor *descr;
- sword error;
- TSRMLS_FETCH();
-
- if (!statement->stmttype) {
- CALL_OCI_RETURN(error,
- OCIAttrGet(
- (dvoid *)statement->pStmt,
- OCI_HTYPE_STMT,
- (ub2 *)&statement->stmttype,
- (ub4 *)0,
- OCI_ATTR_STMT_TYPE,
- statement->pError
- )
- );
-
- statement->error = oci_error(statement->pError, "OCIAttrGet OCI_HTYPE_STMT/OCI_ATTR_STMT_TYPE", error);
-
- if (statement->error) {
- oci_handle_error(statement->conn, statement->error);
- return 0;
- }
- }
-
- if (statement->stmttype == OCI_STMT_SELECT) {
- iters = 0;
- } else {
- iters = 1;
- }
-
- if (statement->last_query) {
- /* if we execute refcursors we don't have a query and
- we don't want to execute!!! */
-
- if (statement->binds) {
- zend_hash_apply(statement->binds, (apply_func_t) _oci_bind_pre_exec TSRMLS_CC);
- }
-
- CALL_OCI_RETURN(error,
- OCIStmtExecute(
- statement->conn->pServiceContext,
- statement->pStmt,
- statement->pError,
- iters,
- 0,
- NULL,
- NULL,
- mode
- )
- );
-
- statement->error = oci_error(statement->pError, "OCIStmtExecute", error);
-
- if (statement->binds) {
- zend_hash_apply(statement->binds, (apply_func_t) _oci_bind_post_exec TSRMLS_CC);
- }
-
- oci_handle_error(statement->conn, statement->error);
-
- if (statement->error) {
- return 0;
- }
-
- if (mode & OCI_COMMIT_ON_SUCCESS) {
- statement->conn->needs_commit = 0;
- } else {
- statement->conn->needs_commit = 1;
- }
- }
-
- if ((statement->stmttype == OCI_STMT_SELECT) && (statement->executed == 0)) {
- /* we only need to do the define step is this very statement is executed the first time! */
- statement->executed = 1;
-
- ALLOC_HASHTABLE(statement->columns);
- zend_hash_init(statement->columns, 13, NULL, _oci_column_hash_dtor, 0);
-
- counter = 1;
-
- CALL_OCI_RETURN(error,
- OCIAttrGet(
- (dvoid *)statement->pStmt,
- OCI_HTYPE_STMT,
- (dvoid *)&colcount,
- (ub4 *)0,
- OCI_ATTR_PARAM_COUNT,
- statement->pError
- )
- );
-
- statement->error = oci_error(statement->pError, "OCIAttrGet OCI_HTYPE_STMT/OCI_ATTR_PARAM_COUNT", error);
- if (statement->error) {
- oci_handle_error(statement->conn, statement->error);
- return 0; /* XXX we loose memory!!! */
- }
-
- statement->ncolumns = colcount;
-
- for (counter = 1; counter <= colcount; counter++) {
- memset(&column,0,sizeof(oci_out_column));
-
- if (zend_hash_index_update(statement->columns, counter, &column,
- sizeof(oci_out_column), (void**) &outcol) == FAILURE) {
- efree(statement->columns);
- /* out of memory */
- return 0;
- }
-
- outcol->statement = statement;
-
- CALL_OCI_RETURN(error,
- OCIParamGet(
- (dvoid *)statement->pStmt,
- OCI_HTYPE_STMT,
- statement->pError,
- (dvoid**)&param,
- counter
- )
- );
-
- statement->error = oci_error(statement->pError, "OCIParamGet OCI_HTYPE_STMT", error);
- if (statement->error) {
- oci_handle_error(statement->conn, statement->error);
- return 0; /* XXX we loose memory!!! */
- }
-
- CALL_OCI_RETURN(error,
- OCIAttrGet(
- (dvoid *)param,
- OCI_DTYPE_PARAM,
- (dvoid *)&outcol->data_type,
- (ub4 *)0,
- OCI_ATTR_DATA_TYPE,
- statement->pError
- )
- );
-
- statement->error = oci_error(statement->pError, "OCIAttrGet OCI_DTYPE_PARAM/OCI_ATTR_DATA_TYPE", error);
- if (statement->error) {
- oci_handle_error(statement->conn, statement->error);
- return 0; /* XXX we loose memory!!! */
- }
-
- CALL_OCI_RETURN(error,
- OCIAttrGet(
- (dvoid *)param,
- OCI_DTYPE_PARAM,
- (dvoid *)&outcol->data_size,
- (dvoid *)0,
- OCI_ATTR_DATA_SIZE,
- statement->pError
- )
- );
-
- statement->error = oci_error(statement->pError, "OCIAttrGet OCI_DTYPE_PARAM/OCI_ATTR_DATA_SIZE", error);
- if (statement->error) {
- oci_handle_error(statement->conn, statement->error);
- return 0; /* XXX we loose memory!!! */
- }
-
- outcol->storage_size4 = outcol->data_size;
- outcol->retlen = outcol->data_size;
-
- CALL_OCI_RETURN(error,
- OCIAttrGet(
- (dvoid *)param,
- OCI_DTYPE_PARAM,
- (dvoid *)&outcol->scale,
- (dvoid *)0,
- OCI_ATTR_SCALE,
- statement->pError
- )
- );
-
- statement->error = oci_error(statement->pError, "OCIAttrGet OCI_DTYPE_PARAM/OCI_ATTR_SCALE", error);
- if (statement->error) {
- oci_handle_error(statement->conn, statement->error);
- return 0; /* XXX we lose memory!!! */
- }
-
- CALL_OCI_RETURN(error,
- OCIAttrGet(
- (dvoid *)param,
- OCI_DTYPE_PARAM,
- (dvoid *)&outcol->precision,
- (dvoid *)0,
- OCI_ATTR_PRECISION,
- statement->pError
- )
- );
-
- statement->error = oci_error(statement->pError, "OCIAttrGet OCI_DTYPE_PARAM/OCI_ATTR_PRECISION", error);
- if (statement->error) {
- oci_handle_error(statement->conn, statement->error);
- return 0; /* XXX we lose memory!!! */
- }
-
- CALL_OCI_RETURN(error,
- OCIAttrGet(
- (dvoid *)param,
- OCI_DTYPE_PARAM,
- (dvoid **)&colname, /* XXX this string is NOT zero terminated!!!! */
- (ub4 *)&outcol->name_len,
- (ub4)OCI_ATTR_NAME,
- statement->pError
- )
- );
-
- statement->error = oci_error(statement->pError, "OCIAttrGet OCI_DTYPE_PARAM/OCI_ATTR_NAME", error);
- if (statement->error) {
- oci_handle_error(statement->conn, statement->error);
- return 0; /* XXX we loose memory!!! */
- }
-
- outcol->name = estrndup((char*) colname,outcol->name_len);
-
- /* find a user-setted define */
- if (statement->defines) {
- zend_hash_find(statement->defines,outcol->name,outcol->name_len,(void **) &outcol->define);
- }
-
- buf = 0;
- switch (outcol->data_type) {
- case SQLT_RSET:
- outcol->pstmt = oci_parse(statement->conn,0,0);
- outcol->stmtid = outcol->pstmt->id;
-
- define_type = SQLT_RSET;
- outcol->is_cursor = 1;
- outcol->storage_size4 = -1;
- outcol->retlen = -1;
- dynamic = OCI_DEFAULT;
- buf = &(outcol->pstmt->pStmt);
- break;
-
- case SQLT_RDD: /* ROWID */
- case SQLT_BLOB: /* binary LOB */
- case SQLT_CLOB: /* character LOB */
- case SQLT_BFILE: /* binary file LOB */
- define_type = outcol->data_type;
- outcol->is_descr = 1;
- outcol->storage_size4 = -1;
- dynamic = OCI_DEFAULT;
-
- if (outcol->data_type == SQLT_BFILE) {
- dtype = OCI_DTYPE_FILE;
- } else if (outcol->data_type == SQLT_RDD ) {
- dtype = OCI_DTYPE_ROWID;
- } else {
- dtype = OCI_DTYPE_LOB;
- }
-
- descr = oci_new_desc(dtype,statement->conn);
- if (!descr) {
- /* need better error checking XXX */
- }
- outcol->descid = descr->id;
- buf = &(descr->ocidescr);
- break;
-
- case SQLT_LNG:
- case SQLT_LBI:
- if (outcol->data_type == SQLT_LBI) {
- define_type = SQLT_BIN;
- } else {
- define_type = SQLT_CHR;
- }
- outcol->storage_size4 = OCI_MAX_DATA_SIZE;
- outcol->piecewise = 1;
- dynamic = OCI_DYNAMIC_FETCH;
- break;
-
- case SQLT_BIN:
- default:
- define_type = SQLT_CHR;
- if ((outcol->data_type == SQLT_DAT) || (outcol->data_type == SQLT_NUM)
-#ifdef SQLT_TIMESTAMP
- || (outcol->data_type == SQLT_TIMESTAMP)
-#endif
-#ifdef SQLT_TIMESTAMP_TZ
- || (outcol->data_type == SQLT_TIMESTAMP_TZ)
-#endif
- ) {
- outcol->storage_size4 = 512; /* XXX this should fit "most" NLS date-formats and Numbers */
- } else {
- outcol->storage_size4++; /* add one for string terminator */
- }
- if (outcol->data_type == SQLT_BIN) {
- outcol->storage_size4 *= 3;
- }
- dynamic = OCI_DEFAULT;
- buf = outcol->data = (text *) emalloc(outcol->storage_size4);
- break;
- }
-
- if (dynamic == OCI_DYNAMIC_FETCH) {
- CALL_OCI_RETURN(error,
- OCIDefineByPos(
- statement->pStmt, /* IN/OUT handle to the requested SQL query */
- (OCIDefine **)&outcol->pDefine, /* IN/OUT pointer to a pointer to a define handle */
- statement->pError, /* IN/OUT An error handle */
- counter, /* IN position in the select list */
- (dvoid *)NULL, /* IN/OUT pointer to a buffer */
- outcol->storage_size4, /* IN The size of each valuep buffer in bytes */
- define_type, /* IN The data type */
- (dvoid *)&outcol->indicator, /* IN pointer to an indicator variable or arr */
- (ub2 *)NULL, /* IN/OUT Pointer to array of length of data fetched */
- (ub2 *)NULL, /* OUT Pointer to array of column-level return codes */
- OCI_DYNAMIC_FETCH /* IN mode (OCI_DEFAULT, OCI_DYNAMIC_FETCH) */
- )
- );
-
- statement->error = oci_error(statement->pError, "OCIDefineByPos", error);
- } else {
- CALL_OCI_RETURN(error,
- OCIDefineByPos(
- statement->pStmt, /* IN/OUT handle to the requested SQL query */
- (OCIDefine **)&outcol->pDefine, /* IN/OUT pointer to a pointer to a define handle */
- statement->pError, /* IN/OUT An error handle */
- counter, /* IN position in the select list */
- (dvoid *)buf, /* IN/OUT pointer to a buffer */
- outcol->storage_size4, /* IN The size of each valuep buffer in bytes */
- define_type, /* IN The data type */
- (dvoid *)&outcol->indicator, /* IN pointer to an indicator variable or arr */
- (ub2 *)&outcol->retlen, /* IN/OUT Pointer to array of length of data fetched */
- (ub2 *)&outcol->retcode, /* OUT Pointer to array of column-level return codes */
- OCI_DEFAULT /* IN mode (OCI_DEFAULT, OCI_DYNAMIC_FETCH) */
- )
- );
-
- statement->error = oci_error(statement->pError, "OCIDefineByPos", error);
- }
- if (statement->error) {
- oci_handle_error(statement->conn, statement->error);
- return 0; /* XXX we loose memory!!! */
- }
- }
- }
-
- return 1;
-}
-/* }}} */
-
-/* {{{ oci_fetch()
-*/
-static int _oci_column_pre_fetch(void *data TSRMLS_DC)
-{
- oci_out_column *col = (oci_out_column *) data;
-
- if (col->piecewise) {
- col->retlen4 = 0;
- }
-
- return 0;
-}
-
-static int oci_fetch(oci_statement *statement, ub4 nrows, char *func TSRMLS_DC)
-{
- int i;
- oci_out_column *column;
-
- if (statement->columns) {
- zend_hash_apply(statement->columns, (apply_func_t) _oci_column_pre_fetch TSRMLS_CC);
- }
-
-
- CALL_OCI_RETURN(statement->error,
- OCIStmtFetch(
- statement->pStmt,
- statement->pError,
- nrows,
- OCI_FETCH_NEXT,
- OCI_DEFAULT
- )
- );
-
- if ((statement->error == OCI_NO_DATA) || (nrows == 0)) {
- if (statement->last_query == 0) {
- /* reset define-list for refcursors */
- if (statement->columns) {
- zend_hash_destroy(statement->columns);
- efree(statement->columns);
- statement->columns = 0;
- statement->ncolumns = 0;
- }
- statement->executed = 0;
- }
-
- statement->error = 0; /* OCI_NO_DATA is NO error for us!!! */
- statement->has_data = 0;
-
- return 0;
- }
-
- while (statement->error == OCI_NEED_DATA) {
- for (i = 0; i < statement->ncolumns; i++) {
- column = oci_get_col(statement, i + 1, 0);
- if (column->piecewise) {
- if (!column->data) {
- column->data = (text *) emalloc(OCI_PIECE_SIZE);
- } else {
- column->data = erealloc(column->data,column->retlen4 + OCI_PIECE_SIZE);
- }
-
- column->cb_retlen = OCI_PIECE_SIZE;
-
- CALL_OCI(
- OCIStmtSetPieceInfo(
- (void *) column->pDefine,
- OCI_HTYPE_DEFINE,
- statement->pError,
- ((char*)column->data) + column->retlen4,
- &(column->cb_retlen),
- OCI_NEXT_PIECE,
- &column->indicator,
- &column->retcode
- )
- );
- }
- }
-
- CALL_OCI_RETURN(statement->error,
- OCIStmtFetch(
- statement->pStmt,
- statement->pError,
- nrows,
- OCI_FETCH_NEXT,
- OCI_DEFAULT
- )
- );
-
- for (i = 0; i < statement->ncolumns; i++) {
- column = oci_get_col(statement, i + 1, 0);
- if (column->piecewise) {
- column->retlen4 += column->cb_retlen;
- }
- }
- }
-
- if (statement->error == OCI_SUCCESS_WITH_INFO || statement->error == OCI_SUCCESS) {
- statement->has_data = 1;
-
- /* do the stuff needed for OCIDefineByName */
- for (i = 0; i < statement->ncolumns; i++) {
- column = oci_get_col(statement, i + 1, 0);
- if (column == NULL) {
- continue;
- }
-
- if (!column->define) {
- continue;
- }
-
- zval_dtor(column->define->zval);
- _oci_make_zval(column->define->zval,statement,column,"OCIFetch",0 TSRMLS_CC);
- }
-
- return 1;
- }
-
- oci_error(statement->pError, func, statement->error);
- oci_handle_error(statement->conn, statement->error);
-
- statement->has_data = 0;
-
- return 0;
-}
-/* }}} */
-
-/* {{{ oci_lobgetlen()
-*/
-static int oci_lobgetlen(oci_connection *connection, oci_descriptor *mydescr, ub4 *loblen)
-{
- TSRMLS_FETCH();
-
- *loblen = 0;
-
- /* do we need to ask oracle about LOB's length, if we do already know it? I think no. */
- if (mydescr->lob_size >= 0) {
- *loblen = mydescr->lob_size;
- } else {
- if (mydescr->type == OCI_DTYPE_FILE) {
- CALL_OCI_RETURN(connection->error,
- OCILobFileOpen(
- connection->pServiceContext,
- connection->pError,
- mydescr->ocidescr,
- OCI_FILE_READONLY
- )
- );
- if (connection->error) {
- oci_error(connection->pError, "OCILobFileOpen",connection->error);
- oci_handle_error(connection, connection->error);
- return -1;
- }
- }
-
- CALL_OCI_RETURN(connection->error,
- OCILobGetLength(
- connection->pServiceContext,
- connection->pError,
- mydescr->ocidescr,
- loblen
- )
- );
-
- if (connection->error) {
- oci_error(connection->pError, "OCILobGetLength",connection->error);
- oci_handle_error(connection, connection->error);
- return -1;
- }
- mydescr->lob_size = *loblen;
-
- if (mydescr->type == OCI_DTYPE_FILE) {
- CALL_OCI_RETURN(connection->error,
- OCILobFileClose(
- connection->pServiceContext,
- connection->pError,
- mydescr->ocidescr
- )
- );
-
- if (connection->error) {
- oci_error(connection->pError, "OCILobFileClose", connection->error);
- oci_handle_error(connection, connection->error);
- return -1;
- }
- }
- }
-
- oci_debug("oci_lobgetlen: len=%d",*loblen);
-
- return 0;
-}
-/* }}} */
-
-/* {{{ oci_loadlob()
-*/
-#define LOBREADSIZE 1048576l /* 1MB */
-static int oci_loadlob(oci_connection *connection, oci_descriptor *mydescr, char **buffer, ub4 *loblen)
-{
- ub4 siz = 0;
- ub4 readlen = 0;
- char *buf;
- TSRMLS_FETCH();
-
- *loblen = 0;
-
- if (mydescr->type == OCI_DTYPE_FILE) {
- CALL_OCI_RETURN(connection->error,
- OCILobFileOpen(
- connection->pServiceContext,
- connection->pError,
- mydescr->ocidescr,
- OCI_FILE_READONLY
- )
- );
-
- if (connection->error) {
- oci_error(connection->pError, "OCILobFileOpen",connection->error);
- oci_handle_error(connection, connection->error);
- return -1;
- }
- }
-
- CALL_OCI_RETURN(connection->error,
- OCILobGetLength(
- connection->pServiceContext,
- connection->pError,
- mydescr->ocidescr,
- &readlen
- )
- );
-
- if (connection->error) {
- oci_error(connection->pError, "OCILobGetLength",connection->error);
- oci_handle_error(connection, connection->error);
- return -1;
- }
-
- buf = emalloc(readlen + 1);
-
- while (readlen > 0) { /* thies loop should not be entered on readlen == 0 */
- CALL_OCI_RETURN(connection->error,
- OCILobRead(
- connection->pServiceContext,
- connection->pError,
- mydescr->ocidescr,
- &readlen, /* IN/OUT bytes toread/read */
- siz + 1, /* offset (starts with 1) */
- (dvoid *) ((char *) buf + siz),
- readlen, /* size of buffer */
- (dvoid *)0,
- (OCICallbackLobRead) 0, /* callback... */
- (ub2) connection->session->charsetId, /* The character set ID of the buffer data. */
- (ub1) SQLCS_IMPLICIT /* The character set form of the buffer data. */
- )
- );
-
- siz += readlen;
- readlen = LOBREADSIZE;
-
- if (connection->error == OCI_NEED_DATA) {
- buf = erealloc(buf,siz + LOBREADSIZE + 1);
- continue;
- } else {
- break;
- }
- }
-
- if (connection->error) {
- oci_error(connection->pError, "OCILobRead", connection->error);
- oci_handle_error(connection, connection->error);
- efree(buf);
- return -1;
- }
-
- if (mydescr->type == OCI_DTYPE_FILE) {
- CALL_OCI_RETURN(connection->error,
- OCILobFileClose(
- connection->pServiceContext,
- connection->pError,
- mydescr->ocidescr
- )
- );
-
- if (connection->error) {
- oci_error(connection->pError, "OCILobFileClose", connection->error);
- oci_handle_error(connection, connection->error);
- efree(buf);
- return -1;
- }
- }
-
- buf = erealloc(buf,siz+1);
- buf[ siz ] = 0;
-
- *buffer = buf;
- *loblen = siz;
-
- oci_debug("oci_loadlob: size=%d",siz);
-
- return 0;
-}
-/* }}} */
-
-/* {{{ oci_readlob()
-*/
-static int oci_readlob(oci_connection *connection, oci_descriptor *mydescr, char **buffer, ub4 *len)
-{
- ub4 siz = 0;
- ub4 readlen = 0;
- ub4 loblen = 0;
- ub4 bytes = 0;
- char *buf;
- TSRMLS_FETCH();
-
- /* we're not going to read LOB, if length is not known */
- if (!len || (int)*len <= 0) {
- return -1;
- }
-
- if (mydescr->type == OCI_DTYPE_FILE) {
- CALL_OCI_RETURN(connection->error,
- OCILobFileOpen(
- connection->pServiceContext,
- connection->pError,
- mydescr->ocidescr,
- OCI_FILE_READONLY
- )
- );
-
- if (connection->error) {
- oci_error(connection->pError, "OCILobFileOpen",connection->error);
- oci_handle_error(connection, connection->error);
- return -1;
- }
- }
-
- if (oci_lobgetlen(connection, mydescr, &loblen) != 0) {
- *len = 0;
- return -1;
- }
-
- /* check if we're in LOB's borders */
- if ((mydescr->lob_current_position + *len) > loblen) {
- *len = loblen - mydescr->lob_current_position;
- }
-
- if ((int)*len > 0) {
- buf = emalloc(*len + 1);
-
- /* set offset to current LOB's position */
- siz = mydescr->lob_current_position;
-
- /* check if len is smaller, if not - using LOBREADSIZE' sized buffer */
- if (*len > LOBREADSIZE) {
- readlen = LOBREADSIZE;
- } else {
- readlen = *len;
- }
- } else {
- *len = 0;
- return -1;
- }
-
- while (readlen > 0 && bytes < *len && siz < loblen) { /* paranoia */
- CALL_OCI_RETURN(connection->error,
- OCILobRead(
- connection->pServiceContext,
- connection->pError,
- mydescr->ocidescr,
- &readlen, /* IN/OUT bytes toread/read */
- siz + 1, /* offset (starts with 1) */
- (dvoid *) ((char *) buf + bytes),
- readlen, /* size of buffer */
- (dvoid *)0,
- (OCICallbackLobRead) 0, /* callback... */
- (ub2) connection->session->charsetId, /* The character set ID of the buffer data. */
- (ub1) SQLCS_IMPLICIT /* The character set form of the buffer data. */
- )
- );
-
- siz += readlen;
- bytes += readlen;
-
- if ((*len - bytes) > LOBREADSIZE) {
- readlen = LOBREADSIZE;
- } else {
- readlen = *len - bytes;
- }
-
- if (connection->error == OCI_NEED_DATA) {
- buf = erealloc(buf,bytes + LOBREADSIZE + 1);
- continue;
- } else {
- break;
- }
- }
-
- /* moving current position */
- mydescr->lob_current_position = siz;
-
- if (connection->error) {
- oci_error(connection->pError, "OCILobRead", connection->error);
- oci_handle_error(connection, connection->error);
- efree(buf);
- return -1;
- }
-
- if (mydescr->type == OCI_DTYPE_FILE) {
- CALL_OCI_RETURN(connection->error,
- OCILobFileClose(
- connection->pServiceContext,
- connection->pError,
- mydescr->ocidescr
- )
- );
-
- if (connection->error) {
- oci_error(connection->pError, "OCILobFileClose", connection->error);
- oci_handle_error(connection, connection->error);
- efree(buf);
- return -1;
- }
- }
-
- buf = erealloc(buf,bytes+1);
- buf[ bytes ] = 0;
-
- *buffer = buf;
- *len = bytes;
-
- oci_debug("oci_readlob: size=%d",bytes);
-
- return 0;
-}
-/* }}} */
-
-/* {{{ oci_failover_callback()
-*/
-#if 0 /* not needed yet ! */
-static sb4 oci_failover_callback(dvoid *svchp, dvoid *envhp, dvoid *fo_ctx, ub4 fo_type, ub4 fo_event)
-{
- /*
- this stuff is from an oci sample - it will get cleaned up as soon as i understand it!!! (thies@thieso.net 990420)
- right now i cant get oracle to even call it;-(((((((((((
- */
-
- switch (fo_event) {
- case OCI_FO_BEGIN: {
- printf(" Failing Over ... Please stand by \n");
- printf(" Failover type was found to be %s \n",
- ((fo_type==OCI_FO_NONE) ? "NONE"
- :(fo_type==OCI_FO_SESSION) ? "SESSION"
- :(fo_type==OCI_FO_SELECT) ? "SELECT"
- : "UNKNOWN!"));
- printf(" Failover Context is :%s\n",
- (fo_ctx?(char *)fo_ctx:"NULL POINTER!"));
- break;
- }
-
- case OCI_FO_ABORT: {
- printf(" Failover aborted. Failover will not take place.\n");
- break;
- }
-
- case OCI_FO_END: {
- printf(" Failover ended ...resuming services\n");
- break;
- }
-
- case OCI_FO_REAUTH: {
- printf(" Failed over user. Resuming services\n");
-
- /* Application can check the OCI_ATTR_SESSION attribute of
- the service handle to find out the user being
- re-authenticated.
-
- After this, the application can replay any ALTER SESSION
- commands associated with this session. These must have
- been saved by the application in the fo_ctx
- */
- break;
- }
-
- case OCI_FO_ERROR: {
- printf(" Failover error gotten. Sleeping...\n");
- php_sleep(3);
- /* cannot find this blody define !!! return OCI_FO_RETRY; */
- break;
- }
-
- default: {
- printf("Bad Failover Event: %ld.\n", fo_event);
- break;
- }
- }
-
- return 0;
-}
-#endif
-/* }}} */
-
-/* {{{ oci_bind_in_callback()
-*/
-static sb4 oci_bind_in_callback(
- dvoid *ictxp, /* context pointer */
- OCIBind *bindp, /* bind handle */
- ub4 iter, /* 0-based execute iteration value */
- ub4 index, /* index of current array for PL/SQL or row index for SQL */
- dvoid **bufpp, /* pointer to data */
- ub4 *alenp, /* size after value/piece has been read */
- ub1 *piecep, /* which piece */
- dvoid **indpp) /* indicator value */
-{
- oci_bind *phpbind;
- zval *val;
- TSRMLS_FETCH();
-
- if (!(phpbind=(oci_bind *)ictxp) || !(val = phpbind->zval)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "!phpbind || !phpbind->val");
- return OCI_ERROR;
- }
-
- if (ZVAL_IS_NULL(val)) {
- /* we're going to insert a NULL column */
- phpbind->indicator = -1;
- *bufpp = 0;
- *alenp = -1;
- *indpp = (dvoid *)&phpbind->indicator;
- } else if ((phpbind->descr == 0) && (phpbind->pStmt == 0)) {
- /* "normal string bind */
- convert_to_string(val);
-
- *bufpp = Z_STRVAL_P(val);
- *alenp = Z_STRLEN_P(val);
- *indpp = (dvoid *)&phpbind->indicator;
- } else if (phpbind->pStmt != 0) {
- /* RSET */
- *bufpp = phpbind->pStmt;
- *alenp = -1; /* seems to be allright */
- *indpp = (dvoid *)&phpbind->indicator;
- } else {
- /* descriptor bind */
- *bufpp = phpbind->descr;
- *alenp = -1; /* seems to be allright */
- *indpp = (dvoid *)&phpbind->indicator;
- }
-
- *piecep = OCI_ONE_PIECE; /* pass all data in one go */
-
- return OCI_CONTINUE;
-}
-/* }}} */
-
-/* {{{ oci_bind_out_callback() */
-static sb4 oci_bind_out_callback(
- dvoid *octxp, /* context pointer */
- OCIBind *bindp, /* bind handle */
- ub4 iter, /* 0-based execute iteration value */
- ub4 index, /* index of current array for PL/SQL or row index for SQL */
- dvoid **bufpp, /* pointer to data */
- ub4 **alenpp, /* size after value/piece has been read */
- ub1 *piecep, /* which piece */
- dvoid **indpp, /* indicator value */
- ub2 **rcodepp) /* return code */
-{
- oci_bind *phpbind;
- zval *val;
- sb4 retval = OCI_ERROR;
- TSRMLS_FETCH();
-
- if (!(phpbind=(oci_bind *)octxp) || !(val = phpbind->zval)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "!phpbind || !phpbind->val");
- return retval;
- }
-
- if ((Z_TYPE_P(val) == IS_OBJECT) || (Z_TYPE_P(val) == IS_RESOURCE)) {
- retval = OCI_CONTINUE;
- } else {
- convert_to_string(val);
- zval_dtor(val);
-
- Z_STRLEN_P(val) = OCI_PIECE_SIZE; /* 64K-1 is max XXX */
- Z_STRVAL_P(val) = emalloc(Z_STRLEN_P(phpbind->zval));
-
- /* XXX we assume that zend-zval len has 4 bytes */
- *alenpp = (ub4*) &Z_STRLEN_P(phpbind->zval);
- *bufpp = Z_STRVAL_P(phpbind->zval);
- *piecep = OCI_ONE_PIECE;
- *rcodepp = &phpbind->retcode;
- *indpp = &phpbind->indicator;
- retval = OCI_CONTINUE;
- }
-
- return retval;
-}
-/* }}} */
-
-/* {{{ _oci_open_session()
-*/
-#include "ext/standard/php_smart_str.h"
-static oci_session *_oci_open_session(oci_server* server,char *username,char *password,int persistent,int exclusive,char *charset)
-{
- zend_llist *session_list;
- oci_session *session = NULL;
- OCISvcCtx *svchp = NULL;
- smart_str hashed_details = {0};
-#ifdef HAVE_OCI_9_2
- ub2 charsetid = 0;
-#endif
- TSRMLS_FETCH();
-
- /*
- check if we already have this user authenticated
-
- we will reuse authenticated users within a request no matter if the user requested a persistent
- connections or not!
-
- but only as persistent requested connections will be kept between requests!
- */
-
-#if defined(HAVE_OCI_9_2)
- if (*charset) {
- smart_str_appends_ex(&hashed_details, charset, 1);
- } else {
- size_t rsize;
-
- /* Safe, charsetid is initialized to 0 */
- CALL_OCI(
- OCINlsEnvironmentVariableGet(
- &charsetid,
- 2,
- OCI_NLS_CHARSET_ID,
- 0,
- &rsize
- )
- );
-
- smart_str_append_unsigned_ex(&hashed_details, charsetid, 1);
-
- charsetid = 0;
- }
-#else
- {
- char *nls_lang = getenv("NLS_LANG");
-
- /* extract charset from NLS_LANG=LANUAGE_TERRITORY.CHARSET */
- if (nls_lang) {
- char *p = strchr(nls_lang, '.');
-
- if (p) {
- smart_str_appends_ex(&hashed_details, p + 1, 1);
- }
- }
- }
-#endif
-
- smart_str_appends_ex(&hashed_details, SAFE_STRING(username), 1);
- smart_str_appends_ex(&hashed_details, SAFE_STRING(password), 1);
- smart_str_appends_ex(&hashed_details, SAFE_STRING(server->dbname), 1);
- smart_str_0(&hashed_details);
-
- if (!exclusive) {
- mutex_lock(mx_lock);
- if (zend_ts_hash_find(persistent_sessions, hashed_details.c, hashed_details.len+1, (void **) &session_list) != SUCCESS) {
- zend_llist tmp;
- /* first session, set up a session list */
- zend_llist_init(&tmp, sizeof(oci_session), (llist_dtor_func_t) _session_pcleanup, 1);
- zend_ts_hash_update(persistent_sessions, hashed_details.c, hashed_details.len+1, &tmp, sizeof(zend_llist), (void **) &session_list);
- } else {
-
- /* session list found, search for an idle session or an already opened session by the current thread */
- session = zend_llist_get_first(session_list);
- while ((session != NULL) && session->thread && (session->thread != thread_id())) {
- session = zend_llist_get_next(session_list);
- }
-
- if (session != NULL) {
- /* mark session as busy */
- session->thread = thread_id();
- }
-
- }
-
- if (session) {
- if (session->is_open) {
- if (persistent) {
- session->persistent = 1;
- }
- smart_str_free_ex(&hashed_details, 1);
- return session;
- } else {
- _oci_close_session(session);
- /* breakthru to open */
- }
- }
- mutex_unlock(mx_lock);
- }
-
- session = ecalloc(1,sizeof(oci_session));
-
- if (!session) {
- goto CLEANUP;
- }
-
- session->persistent = persistent;
- session->server = server;
- session->exclusive = exclusive;
- session->sessions_list = session_list;
- session->thread = thread_id();
-
-#ifdef HAVE_OCI_9_2
-
- /* following chunk is Oracle 9i+ ONLY */
- if (*charset) {
- /*
- get ub2 charset id based on charset
- this is pretty secure, since if we don't have a valid character set name,
- 0 comes back and we can still use the 0 in all further statements -> OCI uses NLS_LANG
- setting in that case
- */
- CALL_OCI_RETURN(charsetid,
- OCINlsCharSetNameToId(
- OCI(pEnv),
- charset
- )
- );
-
- oci_debug("oci_do_connect: using charset id=%d",charsetid);
- }
-
- session->charsetId = charsetid;
-
- /* create an environment using the character set id, Oracle 9i+ ONLY */
- CALL_OCI(
- OCIEnvNlsCreate(
- &session->pEnv,
- PHP_OCI_INIT_MODE,
- 0,
- NULL,
- NULL,
- NULL,
- 0,
- NULL,
- charsetid,
- charsetid
- )
- );
-
-#else
-
- /* fallback solution (simply use global env and charset, same behaviour as always been) */
- session->pEnv = OCI(pEnv);
- session->charsetId = 0;
-
-#endif /* HAVE_OCI_9_2 */
-
- /* allocate temporary Service Context */
- CALL_OCI_RETURN(OCI(error),
- OCIHandleAlloc(
- session->pEnv,
- (dvoid **)&svchp,
- OCI_HTYPE_SVCCTX,
- 0,
- NULL
- )
- );
-
- if (OCI(error) != OCI_SUCCESS) {
- oci_error(OCI(pError), "_oci_open_session: OCIHandleAlloc OCI_HTYPE_SVCCTX", OCI(error));
- goto CLEANUP;
- }
-
- /* allocate private session-handle */
- CALL_OCI_RETURN(OCI(error),
- OCIHandleAlloc(
- session->pEnv,
- (dvoid **)&session->pSession,
- OCI_HTYPE_SESSION,
- 0,
- NULL
- )
- );
-
- if (OCI(error) != OCI_SUCCESS) {
- oci_error(OCI(pError), "_oci_open_session: OCIHandleAlloc OCI_HTYPE_SESSION", OCI(error));
- goto CLEANUP;
- }
-
- /* Set the server handle in service handle */
- CALL_OCI_RETURN(OCI(error),
- OCIAttrSet(
- svchp,
- OCI_HTYPE_SVCCTX,
- server->pServer,
- 0,
- OCI_ATTR_SERVER,
- OCI(pError)
- )
- );
-
- if (OCI(error) != OCI_SUCCESS) {
- oci_error(OCI(pError), "_oci_open_session: OCIAttrSet OCI_ATTR_SERVER", OCI(error));
- goto CLEANUP;
- }
-
- /* set the username in user handle */
- CALL_OCI_RETURN(OCI(error),
- OCIAttrSet(
- (dvoid *) session->pSession,
- (ub4) OCI_HTYPE_SESSION,
- (dvoid *) username,
- (ub4) strlen(username),
- (ub4) OCI_ATTR_USERNAME,
- OCI(pError)
- )
- );
-
- if (OCI(error) != OCI_SUCCESS) {
- oci_error(OCI(pError), "OCIAttrSet OCI_ATTR_USERNAME", OCI(error));
- goto CLEANUP;
- }
-
- /* set the password in user handle */
- CALL_OCI_RETURN(OCI(error),
- OCIAttrSet(
- (dvoid *) session->pSession,
- (ub4) OCI_HTYPE_SESSION,
- (dvoid *) password,
- (ub4) strlen(password),
- (ub4) OCI_ATTR_PASSWORD,
- OCI(pError)
- )
- );
-
- if (OCI(error) != OCI_SUCCESS) {
- oci_error(OCI(pError), "OCIAttrSet OCI_ATTR_PASSWORD", OCI(error));
- goto CLEANUP;
- }
-
- CALL_OCI_RETURN(OCI(error),
- OCISessionBegin(
- svchp,
- OCI(pError),
- session->pSession,
- (ub4) OCI_CRED_RDBMS,
- (ub4) OCI_DEFAULT
- )
- );
-
- if (OCI(error) != OCI_SUCCESS) {
- oci_error(OCI(pError), "OCISessionBegin", OCI(error));
- goto CLEANUP;
- }
-
- /* Free Temporary Service Context */
- CALL_OCI(
- OCIHandleFree(
- (dvoid *) svchp,
- (ub4) OCI_HTYPE_SVCCTX
- )
- );
-
- session->num = zend_list_insert(session, le_session);
- session->is_open = 1;
-
- mutex_lock(mx_lock);
- num_links++;
- if (!exclusive) {
- zend_llist_add_element(session_list, session);
- efree(session);
- session = (oci_session*) session_list->tail->data;
- num_persistent++;
- }
- mutex_unlock(mx_lock);
-
- oci_debug("_oci_open_session new sess=%d user=%s",session->num,username);
-
- return session;
-
-CLEANUP:
- oci_debug("_oci_open_session: FAILURE -> CLEANUP called");
-
- _oci_close_session(session);
-
- return 0;
-}
-/* }}} */
-
-/* {{{ _oci_close_session()
-*/
-static int _session_compare(void *a, void *b)
-{
- oci_session *sess1 = (oci_session*) a;
- oci_session *sess2 = (oci_session*) b;
-
- return sess1->num = sess2->num;
-}
-
-static void _oci_close_session(oci_session *session)
-{
- OCISvcCtx *svchp;
- TSRMLS_FETCH();
-
- if (!session) {
- return;
- }
-
- oci_debug("START _oci_close_session: logging-off sess=%d",session->num);
-
- if (session->is_open) {
- /* Temporary Service Context */
- CALL_OCI_RETURN(OCI(error),
- OCIHandleAlloc(
- session->pEnv,
- (dvoid **) &svchp,
- (ub4) OCI_HTYPE_SVCCTX,
- (size_t) 0,
- (dvoid **) 0
- )
- );
-
- if (OCI(error) != OCI_SUCCESS) {
- oci_error(OCI(pError), "_oci_close_session OCIHandleAlloc OCI_HTYPE_SVCCTX", OCI(error));
- }
-
- /* Set the server handle in service handle */
- CALL_OCI_RETURN(OCI(error),
- OCIAttrSet(
- svchp,
- OCI_HTYPE_SVCCTX,
- session->server->pServer,
- 0,
- OCI_ATTR_SERVER,
- OCI(pError)
- )
- );
-
- if (OCI(error) != OCI_SUCCESS) {
- oci_error(OCI(pError), "_oci_close_session: OCIAttrSet OCI_ATTR_SERVER", OCI(error));
- }
-
- /* Set the Authentication handle in the service handle */
- CALL_OCI_RETURN(OCI(error),
- OCIAttrSet(
- svchp,
- OCI_HTYPE_SVCCTX,
- session->pSession,
- 0,
- OCI_ATTR_SESSION,
- OCI(pError)
- )
- );
-
- if (OCI(error) != OCI_SUCCESS) {
- oci_error(OCI(pError), "_oci_close_session: OCIAttrSet OCI_ATTR_SESSION", OCI(error));
- }
-
- CALL_OCI_RETURN(OCI(error),
- OCISessionEnd(
- svchp,
- OCI(pError),
- session->pSession,
- (ub4) 0
- )
- );
-
- if (OCI(error) != OCI_SUCCESS) {
- oci_error(OCI(pError), "_oci_close_session: OCISessionEnd", OCI(error));
- }
-
- CALL_OCI(
- OCIHandleFree(
- (dvoid *) svchp,
- (ub4) OCI_HTYPE_SVCCTX
- )
- );
-
- } else {
- oci_debug("_oci_close_session: logging-off DEAD session");
- }
-
- if (session->pSession) {
- CALL_OCI(
- OCIHandleFree(
- (dvoid *) session->pSession,
- (ub4) OCI_HTYPE_SESSION
- )
- );
- }
-
- mutex_lock(mx_lock);
- num_links--;
- if (!OCI(shutdown) && session->persistent) {
- zend_llist_del_element(session->sessions_list, session, _session_compare);
- num_persistent--;
- }
- mutex_unlock(mx_lock);
-
- if (session->exclusive) {
- efree(session);
- }
-}
-/* }}} */
-
-/* {{{ _oci_open_server()
-*/
-static oci_server *_oci_open_server(char *dbname,int persistent)
-{
- oci_server *server, *pserver = NULL;
- TSRMLS_FETCH();
-
- /*
- check if we already have this server open
-
- we will reuse servers within a request no matter if the user requested persistent
- connections or not!
-
- but only as pesistent requested connections will be kept between requests!
- */
-
- /* TODO either keep servers global or don't reuse them at all */
- zend_ts_hash_find(persistent_servers, dbname, strlen(dbname)+1, (void **) &pserver);
-
- if (pserver) {
- /* XXX ini-flag */
- /*
- if (!oci_ping(pserver)) {
- pserver->is_open = 0;
- }
- */
- if (pserver->is_open) {
- /* if our new users uses this connection persistent, we're keeping it! */
- if (persistent) {
- pserver->persistent = persistent;
- }
-
- return pserver;
- } else { /* server "died" in the meantime - try to reconnect! */
- _oci_close_server(pserver);
- /* breakthru to open */
- }
- }
-
- server = ecalloc(1,sizeof(oci_server));
-
- server->persistent = persistent;
- server->dbname = strdup(SAFE_STRING(dbname));
-
- CALL_OCI(
- OCIHandleAlloc(
- OCI(pEnv),
- (dvoid **)&server->pServer,
- OCI_HTYPE_SERVER,
- 0,
- NULL
- )
- );
-
- CALL_OCI_RETURN(OCI(error),
- OCIServerAttach(
- server->pServer,
- OCI(pError),
- (text*)server->dbname,
- strlen(server->dbname),
- (ub4) OCI_DEFAULT
- )
- );
-
- if (OCI(error)) {
- oci_error(OCI(pError), "_oci_open_server", OCI(error));
- goto CLEANUP;
- }
-
- zend_ts_hash_update(persistent_servers,
- server->dbname,
- strlen(server->dbname)+1,
- (void *)server,
- sizeof(oci_server),
- (void**)&pserver);
-
- pserver->num = zend_list_insert(pserver,le_server);
- pserver->is_open = 1;
-
- oci_debug("_oci_open_server new conn=%d dname=%s",server->num,server->dbname);
-
- efree(server);
-
- return pserver;
-
-CLEANUP:
- oci_debug("_oci_open_server: FAILURE -> CLEANUP called");
-
- _oci_close_server(server);
-
- return 0;
-}
-
-#if 0
- server->failover.fo_ctx = (dvoid *) server;
- server->failover.callback_function = oci_failover_callback;
-
- error = OCIAttrSet((dvoid *)server->pServer,
- (ub4) OCI_HTYPE_SERVER,
- (dvoid *) &server->failover,
- (ub4) 0,
- (ub4) OCI_ATTR_FOCBK,
- OCI(pError));
-
- if (error) {
- oci_error(OCI(pError), "_oci_open_server OCIAttrSet OCI_ATTR_FOCBK", error);
- goto CLEANUP;
- }
-#endif
-/* }}} */
-
-/* {{{ _oci_close_server()
-*/
-static int _oci_session_cleanup(void *data TSRMLS_DC)
-{
- zend_rsrc_list_entry *le = (zend_rsrc_list_entry *) data;
-
- if (le->type == le_session) {
- oci_server *server = ((oci_session*) le->ptr)->server;
- if (server->is_open == 2)
- return 1;
- }
- return 0;
-}
-
-static void _oci_close_server(oci_server *server)
-{
- char *dbname;
- int oldopen;
- TSRMLS_FETCH();
-
- oldopen = server->is_open;
- server->is_open = 2;
- if (!OCI(shutdown)) {
- zend_hash_apply(&EG(regular_list), (apply_func_t) _oci_session_cleanup TSRMLS_CC);
- }
- server->is_open = oldopen;
-
- oci_debug("START _oci_close_server: detaching conn=%d dbname=%s",server->num,server->dbname);
-
- /* XXX close server here */
-
- if (server->is_open) {
- if (server->pServer && OCI(pError)) {
- CALL_OCI_RETURN(OCI(error),
- OCIServerDetach(
- server->pServer,
- OCI(pError),
- OCI_DEFAULT
- )
- );
-
- if (OCI(error)) {
- oci_error(OCI(pError), "oci_close_server OCIServerDetach", OCI(error));
- }
- }
- } else {
- oci_debug("_oci_close_server: closing DEAD server");
- }
-
- if (server->pServer) {
- CALL_OCI(
- OCIHandleFree(
- (dvoid *) server->pServer,
- (ub4) OCI_HTYPE_SERVER
- )
- );
- }
-
- dbname = server->dbname;
-
- if (!OCI(shutdown)) {
- zend_ts_hash_del(persistent_servers, dbname, strlen(dbname)+1);
- }
-
- free(dbname);
-}
-/* }}} */
-
-/* {{{ oci_do_connect()
- Connect to an Oracle database and log on. returns a new session. */
-static void oci_do_connect(INTERNAL_FUNCTION_PARAMETERS,int persistent,int exclusive)
-{
- char *username, *password, *dbname, *charset;
- zval **userParam, **passParam, **dbParam, **charParam;
- oci_server *server = 0;
- oci_session *session = 0;
- oci_connection *connection = 0;
-
- /* if a forth parameter is handed over, it is the charset identifier (but is only used in Oracle 9i+) */
- if (zend_get_parameters_ex(4, &userParam, &passParam, &dbParam, &charParam) == SUCCESS) {
- convert_to_string_ex(userParam);
- convert_to_string_ex(passParam);
- convert_to_string_ex(dbParam);
- convert_to_string_ex(charParam);
-
- username = Z_STRVAL_PP(userParam);
- password = Z_STRVAL_PP(passParam);
- dbname = Z_STRVAL_PP(dbParam);
- charset = Z_STRVAL_PP(charParam);
- oci_debug("oci_do_connect: using charset=%s",charset);
- } else if (zend_get_parameters_ex(3, &userParam, &passParam, &dbParam) == SUCCESS) {
- convert_to_string_ex(userParam);
- convert_to_string_ex(passParam);
- convert_to_string_ex(dbParam);
-
- username = Z_STRVAL_PP(userParam);
- password = Z_STRVAL_PP(passParam);
- dbname = Z_STRVAL_PP(dbParam);
- charset = "";
- } else if (zend_get_parameters_ex(2, &userParam, &passParam) == SUCCESS) {
- convert_to_string_ex(userParam);
- convert_to_string_ex(passParam);
-
- username = Z_STRVAL_PP(userParam);
- password = Z_STRVAL_PP(passParam);
- dbname = "";
- charset = "";
- } else {
- WRONG_PARAM_COUNT;
- }
-
- connection = (oci_connection *) ecalloc(1,sizeof(oci_connection));
-
- if (!connection) {
- goto CLEANUP;
- }
-
- server = _oci_open_server(dbname,persistent);
-
- if (!server) {
- goto CLEANUP;
- }
-
- if (exclusive) {
- /* exlusive session can never be persistent!*/
- persistent = 0;
- } else {
- /* if our server-context is not persistent we can't */
- persistent = (server->persistent) ? persistent : 0;
- }
-
- session = _oci_open_session(server,username,password,persistent,exclusive,charset);
-
- if (!session) {
- goto CLEANUP;
- }
-
- /* set our session */
- connection->session = session;
-
- /* allocate our private error-handle */
- CALL_OCI_RETURN(OCI(error),
- OCIHandleAlloc(
- connection->session->pEnv,
- (dvoid **)&connection->pError,
- OCI_HTYPE_ERROR,
- 0,
- NULL
- )
- );
-
- if (OCI(error) != OCI_SUCCESS) {
- oci_error(OCI(pError), "oci_do_connect: OCIHandleAlloc OCI_HTYPE_ERROR",OCI(error));
- goto CLEANUP;
- }
-
- /* allocate our service-context */
- CALL_OCI_RETURN(OCI(error),
- OCIHandleAlloc(
- connection->session->pEnv,
- (dvoid **)&connection->pServiceContext,
- OCI_HTYPE_SVCCTX,
- 0,
- NULL
- )
- );
-
- if (OCI(error) != OCI_SUCCESS) {
- oci_error(OCI(pError), "oci_do_connect: OCIHandleAlloc OCI_HTYPE_SVCCTX",OCI(error));
- goto CLEANUP;
- }
-
- /* Set the server handle in service handle */
- CALL_OCI_RETURN(connection->error,
- OCIAttrSet(
- connection->pServiceContext,
- OCI_HTYPE_SVCCTX,
- server->pServer,
- 0,
- OCI_ATTR_SERVER,
- connection->pError
- )
- );
-
- if (connection->error != OCI_SUCCESS) {
- oci_error(connection->pError, "oci_do_connect: OCIAttrSet OCI_ATTR_SERVER", connection->error);
- goto CLEANUP;
- }
-
- /* Set the Authentication handle in the service handle */
- CALL_OCI_RETURN(connection->error,
- OCIAttrSet(
- connection->pServiceContext,
- OCI_HTYPE_SVCCTX,
- session->pSession,
- 0,
- OCI_ATTR_SESSION,
- connection->pError
- )
- );
-
- if (connection->error != OCI_SUCCESS) {
- oci_error(connection->pError, "oci_do_connect: OCIAttrSet OCI_ATTR_SESSION", connection->error);
- goto CLEANUP;
- }
-
- /*
- OCIAttrSet((dvoid *)session->server->pServer,
- OCI_HTYPE_SERVER,
- (dvoid *) "demo",
- 0,
- OCI_ATTR_EXTERNAL_NAME,
- connection->pError);
-
- OCIAttrSet((dvoid *)session->server->pServer,
- OCI_HTYPE_SERVER,
- (dvoid *) "txn demo2",
- 0,
- OCI_ATTR_INTERNAL_NAME,
- connection->pError);
- */
-
- connection->id = zend_list_insert(connection, le_conn);
-
- connection->is_open = 1;
-
- oci_debug("oci_do_connect: id=%d",connection->id);
-
- RETURN_RESOURCE(connection->id);
-
-CLEANUP:
- oci_debug("oci_do_connect: FAILURE -> CLEANUP called");
-
- if (connection->id) {
- zend_list_delete(connection->id);
- } else {
- _oci_conn_list_dtor(connection TSRMLS_CC);
- }
-
- RETURN_FALSE;
-}
-/* }}} */
-
-/* {{{ oci_lob_flush()
-*/
-static int oci_lob_flush(oci_descriptor* descr, int flush_flag TSRMLS_DC)
-{
- OCILobLocator *mylob;
- oci_connection *connection;
-
- mylob = (OCILobLocator *) descr->ocidescr;
-
- if (!mylob) {
- return 0;
- }
-
- /* do not really flush buffer, but reporting success
- * to suppress OCI error when flushing not used buffer
- * */
- if (descr->buffering != 2) {
- return 1;
- }
-
- connection = descr->conn;
-
- CALL_OCI_RETURN(connection->error,
- OCILobFlushBuffer(
- connection->pServiceContext,
- connection->pError,
- mylob,
- flush_flag
- )
- );
-
- oci_debug("oci_lob_flush: flush_flag=%d",flush_flag);
-
- if (connection->error) {
- oci_error(connection->pError, "OCILobFlushBuffer", connection->error);
- oci_handle_error(connection, connection->error);
- return 0;
- }
-
- /* marking buffer as enabled and not used */
- descr->buffering = 1;
- return 1;
-}
-/* }}} */
-
-/* {{{ php_oci_fetch_row()
-*/
-static void php_oci_fetch_row (INTERNAL_FUNCTION_PARAMETERS, int mode, int expected_args)
-{
- zval **stmt, **arg2, **arg3;
- oci_statement *statement;
- oci_out_column *column;
- ub4 nrows = 1;
- int i;
-
- if (ZEND_NUM_ARGS() > expected_args) {
- WRONG_PARAM_COUNT;
- }
-
- if (expected_args > 2) {
- /* only for ocifetchinto BC */
-
- switch (ZEND_NUM_ARGS()) {
- case 2:
- if (zend_get_parameters_ex(2, &stmt, &arg2) == FAILURE) {
- RETURN_FALSE;
- }
- if (!mode) {
- mode = OCI_NUM;
- }
- break;
-
- case 3:
- if (zend_get_parameters_ex(3, &stmt, &arg2, &arg3) == FAILURE) {
- RETURN_FALSE;
- }
- convert_to_long_ex(arg3);
- mode = Z_LVAL_PP(arg3);
- break;
-
- default:
- WRONG_PARAM_COUNT;
- break;
- }
-
- } else {
-
- switch (ZEND_NUM_ARGS()) {
- case 1:
- if (zend_get_parameters_ex(1, &stmt) == FAILURE) {
- RETURN_FALSE;
- }
- if (!mode) {
- mode = OCI_BOTH;
- }
- break;
-
- case 2:
- if (zend_get_parameters_ex(2, &stmt, &arg2)==FAILURE) {
- RETURN_FALSE;
- }
- convert_to_long_ex(arg2);
- mode = Z_LVAL_PP(arg2);
- break;
-
- default:
- WRONG_PARAM_COUNT;
- break;
- }
- }
-
- OCI_GET_STMT(statement,stmt);
-
- if (!oci_fetch(statement, nrows, "OCIFetchInto" TSRMLS_CC)) {
- RETURN_FALSE;
- }
-
- array_init(return_value);
-
- for (i = 0; i < statement->ncolumns; i++) {
- column = oci_get_col(statement, i + 1, 0);
- if (column == NULL) {
- continue;
- }
- if ((column->indicator == -1) && ((mode & OCI_RETURN_NULLS) == 0)) {
- continue;
- }
-
- if (!(column->indicator == -1)) {
- zval *element;
-
- MAKE_STD_ZVAL(element);
- _oci_make_zval(element,statement,column,"OCIFetchInto",mode TSRMLS_CC);
-
- if (mode & OCI_NUM || !(mode & OCI_ASSOC)) {
- add_index_zval(return_value, i, element);
- }
- if (mode & OCI_ASSOC) {
- if (mode & OCI_NUM) {
- ZVAL_ADDREF(element);
- }
- add_assoc_zval(return_value, column->name, element);
- }
-
- } else {
- if (mode & OCI_NUM || !(mode & OCI_ASSOC)) {
- add_index_null(return_value, i);
- }
- if (mode & OCI_ASSOC) {
- add_assoc_null(return_value, column->name);
- }
- }
- }
-
- if (expected_args > 2) {
- /* only for ocifetchinto BC
- * in all other cases we return array, not long
- */
- REPLACE_ZVAL_VALUE(arg2, return_value, 1); /* copy return_value to given reference */
- zval_dtor(return_value);
- RETURN_LONG(statement->ncolumns);
- }
-}
-/* }}} */
-
-/************************* EXTENSION FUNCTIONS *************************/
-
-/* {{{ proto bool oci_define_by_name(resource stmt, string name, mixed &var [, int type])
- Define a PHP variable to an Oracle column by name */
-/* if you want to define a LOB/CLOB etc make sure you allocate it via OCINewDescriptor BEFORE defining!!! */
-PHP_FUNCTION(oci_define_by_name)
-{
- zval **stmt, **name, **var, **type;
- oci_statement *statement;
- oci_define *define, *tmp_define;
- ub2 ocitype = SQLT_CHR; /* zero terminated string */
- int ac = ZEND_NUM_ARGS();
-
- if (ac < 3 || ac > 4 || zend_get_parameters_ex(ac, &stmt, &name, &var, &type) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- switch (ac) {
- case 4:
- convert_to_long_ex(type);
- ocitype = (ub2) Z_LVAL_PP(type);
- /* possible breakthru */
- }
-
- OCI_GET_STMT(statement,stmt);
-
- convert_to_string_ex(name);
-
- if (statement->defines == NULL) {
- ALLOC_HASHTABLE(statement->defines);
- zend_hash_init(statement->defines, 13, NULL, _oci_define_hash_dtor, 0);
- }
-
- define = ecalloc(1,sizeof(oci_define));
-
- if (zend_hash_add(statement->defines,
- Z_STRVAL_PP(name),
- Z_STRLEN_PP(name),
- define,
- sizeof(oci_define),
- (void **)&tmp_define) == SUCCESS) {
- efree(define);
- define = tmp_define;
- } else {
- efree(define);
- RETURN_FALSE;
- }
-
- define->name = (text*) estrndup(Z_STRVAL_PP(name),Z_STRLEN_PP(name));
- define->name_len = Z_STRLEN_PP(name);
- define->type = ocitype;
- define->zval = *var;
- zval_add_ref(var);
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto bool oci_bind_by_name(resource stmt, string name, mixed &var, [, int maxlength [, int type]])
- Bind a PHP variable to an Oracle placeholder by name */
-/* if you want to bind a LOB/CLOB etc make sure you allocate it via OCINewDescriptor BEFORE binding!!! */
-PHP_FUNCTION(oci_bind_by_name)
-{
- zval **stmt, **name, **var, **maxlen, **type;
- oci_statement *statement;
- oci_statement *bindstmt;
- oci_bind bind, *bindp;
- oci_descriptor *descr;
-#ifdef PHP_OCI8_HAVE_COLLECTIONS
- oci_collection *coll;
- dvoid *mycoll = 0;
-#endif
- int mode = OCI_DATA_AT_EXEC;
- ub2 ocitype = SQLT_CHR; /* unterminated string */
- OCIStmt *mystmt = 0;
- dvoid *mydescr = 0;
- sb4 value_sz = -1;
- int ac = ZEND_NUM_ARGS(), inx;
-
- if (ac < 3 || ac > 5 || zend_get_parameters_ex(ac, &stmt, &name, &var, &maxlen, &type) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- switch (ac) {
- case 5:
- convert_to_long_ex(type);
- ocitype = (ub2) Z_LVAL_PP(type);
- /* possible breakthru */
- case 4:
- convert_to_long_ex(maxlen);
- value_sz = Z_LVAL_PP(maxlen);
- /* possible breakthru */
- }
-
- OCI_GET_STMT(statement,stmt);
-
- switch (ocitype) {
-#ifdef PHP_OCI8_HAVE_COLLECTIONS
- case SQLT_NTY:
- if (Z_TYPE_PP(var) != IS_OBJECT) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Variable must be allocated using OCINewCollection()");
- RETURN_FALSE;
- }
- if ((inx = _oci_get_ocicoll(*var,&coll TSRMLS_CC)) == 0) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Variable must be allocated using OCINewCollection()");
- RETURN_FALSE;
- }
- if (!(mycoll = (dvoid *) coll->coll)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Collection empty");
- RETURN_FALSE;
- }
- value_sz = sizeof(void*);
- mode = OCI_DEFAULT;
-break;
-#endif
- case SQLT_BFILEE:
- case SQLT_CFILEE:
- case SQLT_CLOB:
- case SQLT_BLOB:
- case SQLT_RDD:
- if (Z_TYPE_PP(var) != IS_OBJECT) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Variable must be allocated using OCINewDescriptor()");
- RETURN_FALSE;
- }
-
- if ((inx = _oci_get_ocidesc(*var,&descr TSRMLS_CC)) == 0) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Variable must be allocated using OCINewDescriptor()");
- RETURN_FALSE;
- }
-
- if (!(mydescr = (dvoid *) descr->ocidescr)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Descriptor empty");
- RETURN_FALSE;
- }
- value_sz = sizeof(void*);
- break;
-
- case SQLT_RSET:
- OCI_GET_STMT(bindstmt,var);
-
- if (!(mystmt = bindstmt->pStmt)) {
- RETURN_FALSE;
- }
- value_sz = sizeof(void*);
- break;
- }
-
- if ((ocitype == SQLT_CHR) && (value_sz == -1)) {
- convert_to_string_ex(var);
- value_sz = Z_STRLEN_PP(var);
- }
-
- if (value_sz == 0) {
- value_sz = 1;
- }
-
- convert_to_string_ex(name);
-
- if (!statement->binds) {
- ALLOC_HASHTABLE(statement->binds);
- zend_hash_init(statement->binds, 13, NULL, _oci_bind_hash_dtor, 0);
- }
-
- memset((void*)&bind,0,sizeof(oci_bind));
- zend_hash_update(statement->binds, Z_STRVAL_PP(name), Z_STRLEN_PP(name) + 1, &bind, sizeof(oci_bind), (void **)&bindp);
-
- bindp->descr = mydescr;
- bindp->pStmt = mystmt;
- bindp->zval = *var;
- zval_add_ref(var);
-
- CALL_OCI_RETURN(statement->error,
- OCIBindByName(
- statement->pStmt, /* statement handle */
- (OCIBind **)&bindp->pBind, /* bind hdl (will alloc) */
- statement->pError, /* error handle */
- (text*) Z_STRVAL_PP(name), /* placeholder name */
- Z_STRLEN_PP(name), /* placeholder length */
- (dvoid *)0, /* in/out data */
- value_sz, /* OCI_MAX_DATA_SIZE, */ /* max size of input/output data */
- (ub2)ocitype, /* in/out data type */
- (dvoid *)&bindp->indicator, /* indicator (ignored) */
- (ub2 *)0, /* size array (ignored) */
- (ub2 *)&bindp->retcode, /* return code (ignored) */
- (ub4)0, /* maxarr_len (PL/SQL only?) */
- (ub4 *)0, /* actual array size (PL/SQL only?) */
- mode /* mode */
- )
- );
-
- if (statement->error != OCI_SUCCESS) {
- oci_error(statement->pError, "OCIBindByName", statement->error);
- oci_handle_error(statement->conn, statement->error);
- RETURN_FALSE;
- }
-
- if (mode == OCI_DATA_AT_EXEC) {
- CALL_OCI_RETURN(statement->error,
- OCIBindDynamic(
- bindp->pBind,
- statement->pError,
- (dvoid *)bindp,
- oci_bind_in_callback,
- (dvoid *)bindp,
- oci_bind_out_callback
- )
- );
-
- if (statement->error != OCI_SUCCESS) {
- oci_error(statement->pError, "OCIBindDynamic", statement->error);
- oci_handle_error(statement->conn, statement->error);
- RETURN_FALSE;
- }
- }
-
-#ifdef PHP_OCI8_HAVE_COLLECTIONS
- if (ocitype == SQLT_NTY) {
- /* Bind object */
- CALL_OCI_RETURN(statement->error,
- OCIBindObject(
- bindp->pBind,
- statement->pError,
- coll->tdo,
- (dvoid **) &(coll->coll),
- (ub4 *) 0,
- (dvoid **) 0,
- (ub4 *) 0
- )
- );
-
- if (statement->error) {
- oci_error(statement->pError, "OCIBindObject", statement->error);
- RETURN_FALSE;
- }
- }
-#endif
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto bool oci_free_descriptor()
- Deletes large object description */
-PHP_FUNCTION(oci_free_descriptor)
-{
- zval *id;
- int inx;
- oci_descriptor *descriptor;
-
- if ((id = getThis()) != 0) {
- inx = _oci_get_ocidesc(id,&descriptor TSRMLS_CC);
- if (inx) {
- oci_debug("oci_free_descriptor: descr=%d",inx);
- zend_list_delete(inx);
- RETURN_TRUE;
- }
- }
-
- php_error_docref(NULL TSRMLS_CC, E_NOTICE, "oci_free_descriptor() should not be called like this. Use $somelob->free() to free a LOB");
-
- RETURN_FALSE;
-}
-/* }}} */
-
-/* {{{ proto bool oci_lob_save( string data [, int offset ])
- Saves a large object */
-PHP_FUNCTION(oci_lob_save)
-{
- zval *id, **arg,**oarg;
- OCILobLocator *mylob;
- oci_connection *connection;
- oci_descriptor *descr;
- int offparam,inx;
- ub4 loblen;
- ub4 curloblen;
- ub4 offset;
-
- if ((id = getThis()) != 0) {
- if ((inx = _oci_get_ocidesc(id,&descr TSRMLS_CC)) == 0) {
- RETURN_FALSE;
- }
-
- mylob = (OCILobLocator *) descr->ocidescr;
-
- if (!mylob) {
- RETURN_FALSE;
- }
-
- connection = descr->conn;
-
- offset = 0;
- if (zend_get_parameters_ex(2, &arg, &oarg) == SUCCESS) {
- convert_to_long_ex(oarg);
- offparam = Z_LVAL_PP(oarg);
-
- CALL_OCI_RETURN(connection->error,
- OCILobGetLength(
- connection->pServiceContext,
- connection->pError,
- mylob,
- &curloblen
- )
- );
-
- oci_debug("oci_lob_save: curloblen=%d",curloblen);
-
- if (offparam == -1) {
- offset = curloblen;
- } else if ((ub4)offparam >= curloblen) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Offset is bigger than current LOB-Size - appending");
- offset = curloblen;
- } else {
- offset = (ub4)offparam;
- }
- } else if (zend_get_parameters_ex(1, &arg) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_string_ex(arg);
- loblen = Z_STRLEN_PP(arg);
-
- if (loblen < 1) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Cannot save a lob which size is less than 1 byte");
- RETURN_FALSE;
- }
-
- if (offset <= 0) {
- offset = 1;
- }
-
- CALL_OCI_RETURN(connection->error,
- OCILobWrite(
- connection->pServiceContext,
- connection->pError,
- mylob,
- &loblen,
- (ub4) offset,
- (dvoid *) Z_STRVAL_PP(arg),
- (ub4) loblen,
- OCI_ONE_PIECE,
- (dvoid *)0,
- (OCICallbackLobWrite) 0,
- (ub2) 0,
- (ub1) SQLCS_IMPLICIT
- )
- );
-
- oci_debug("oci_lob_save: size=%d offset=%d",loblen,offset);
-
- if (connection->error) {
- oci_error(connection->pError, "OCILobWrite", connection->error);
- oci_handle_error(connection, connection->error);
- RETURN_FALSE;
- }
-
- RETURN_TRUE;
- }
-
- RETURN_FALSE;
-}
-/* }}} */
-
-/* {{{ proto bool oci_lob_import( string filename )
- Saves a large object to file */
-PHP_FUNCTION(oci_lob_import)
-{
- zval *id, **arg;
- OCILobLocator *mylob;
- oci_connection *connection;
- oci_descriptor *descr;
- char *filename;
- int fp,inx;
- char buf[8192];
- ub4 offset = 1;
- ub4 loblen;
-
- if ((id = getThis()) != 0) {
- if ((inx = _oci_get_ocidesc(id,&descr TSRMLS_CC)) == 0) {
- RETURN_FALSE;
- }
-
- mylob = (OCILobLocator *) descr->ocidescr;
-
- if (!mylob) {
- RETURN_FALSE;
- }
-
- connection = descr->conn;
-
- if (zend_get_parameters_ex(1, &arg) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_string_ex(arg);
-
- if (php_check_open_basedir(Z_STRVAL_PP(arg) TSRMLS_CC)) {
- RETURN_FALSE;
- }
-
- filename = Z_STRVAL_PP(arg);
-
- if ((fp = VCWD_OPEN(filename, O_RDONLY|O_BINARY)) == -1) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Can't open file %s", filename);
- RETURN_FALSE;
- }
-
- while ((loblen = read(fp, &buf, sizeof(buf))) > 0) {
- CALL_OCI_RETURN(connection->error,
- OCILobWrite(
- connection->pServiceContext,
- connection->pError,
- mylob,
- &loblen,
- (ub4) offset,
- (dvoid *) &buf,
- (ub4) loblen,
- OCI_ONE_PIECE,
- (dvoid *)0,
- (OCICallbackLobWrite) 0,
- (ub2) 0,
- (ub1) SQLCS_IMPLICIT
- )
- );
-
- oci_debug("oci_lob_import: size=%d",loblen);
-
- if (connection->error) {
- oci_error(connection->pError, "OCILobWrite", connection->error);
- oci_handle_error(connection, connection->error);
- close(fp);
- RETURN_FALSE;
- }
-
- offset += loblen;
- }
- close(fp);
-
- RETURN_TRUE;
- }
-
- RETURN_FALSE;
-}
-/* }}} */
-
-/* {{{ proto string oci_lob_load()
- Loads a large object */
-PHP_FUNCTION(oci_lob_load)
-{
- zval *id;
- oci_descriptor *descr;
- char *buffer;
- int inx;
- ub4 loblen;
-
- if ((id = getThis()) != 0) {
- if ((inx = _oci_get_ocidesc(id,&descr TSRMLS_CC)) == 0) {
- RETURN_FALSE;
- }
-
- if (!oci_loadlob(descr->conn,descr,&buffer,&loblen)) {
- RETURN_STRINGL(buffer,loblen,0);
- } else {
- RETURN_FALSE;
- }
- }
-
- php_error_docref(NULL TSRMLS_CC, E_NOTICE, "oci_lob_load() should not be called like this. Use $somelob->load() to load a LOB");
-
- RETURN_FALSE;
-}
-/* }}} */
-
-/* {{{ proto string oci_lob_read( int length )
- Reads particular part of a large object */
-PHP_FUNCTION(oci_lob_read)
-{
- zval *id;
- zval **len;
- oci_descriptor *descr;
- char *buffer;
- int inx;
- ub4 loblen;
-
- if ((id = getThis()) != 0) {
- if ((inx = _oci_get_ocidesc(id,&descr TSRMLS_CC)) == 0) {
- RETURN_FALSE;
- }
-
- if (zend_get_parameters_ex(1, &len) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- loblen = Z_LVAL_PP(len);
- if (oci_readlob(descr->conn,descr,&buffer,&loblen) == 0) {
- RETURN_STRINGL(buffer,loblen,0);
- } else {
- RETURN_FALSE;
- }
- }
-
- php_error_docref(NULL TSRMLS_CC, E_NOTICE, "oci_lob_read() should not be called like this. Use $somelob->read($len) to read a LOB");
- RETURN_FALSE;
-}
-/* }}} */
-
-/* {{{ proto bool oci_lob_eof()
- Checks if EOF is reached */
-PHP_FUNCTION(oci_lob_eof)
-{
- zval *id;
- oci_descriptor *descr;
- int inx;
- int len;
-
- if ((id = getThis()) != 0) {
- if ((inx = _oci_get_ocidesc(id,&descr TSRMLS_CC)) == 0) {
- RETURN_FALSE;
- }
-
- if (oci_lobgetlen(descr->conn,descr,&len) == 0 && descr->lob_size >= 0) {
- if (descr->lob_size == descr->lob_current_position) {
- RETURN_TRUE;
- } else {
- RETURN_FALSE;
- }
- }
- RETURN_FALSE;
- }
-
- php_error_docref(NULL TSRMLS_CC, E_NOTICE, "oci_lob_eof() should not be called like this. Use $somelob->eof() to check if end of LOB is reached");
- RETURN_FALSE;
-}
-/* }}} */
-
-/* {{{ proto int oci_lob_tell()
- Tells LOB pointer position */
-PHP_FUNCTION(oci_lob_tell)
-{
- zval *id;
- oci_descriptor *descr;
- int inx;
-
- if ((id = getThis()) != 0) {
- if ((inx = _oci_get_ocidesc(id,&descr TSRMLS_CC)) == 0) {
- RETURN_FALSE;
- }
- RETURN_LONG(descr->lob_current_position);
- }
-
- php_error_docref(NULL TSRMLS_CC, E_NOTICE, "oci_lob_tell() should not be called like this. Use $somelob->tell() to get current position of LOB pointer");
- RETURN_FALSE;
-}
-/* }}} */
-
-/* {{{ proto bool oci_lob_rewind()
- Rewind pointer of a LOB */
-PHP_FUNCTION(oci_lob_rewind)
-{
- zval *id;
- oci_descriptor *descr;
- int inx;
-
- if ((id = getThis()) != 0) {
- if ((inx = _oci_get_ocidesc(id,&descr TSRMLS_CC)) == 0) {
- RETURN_FALSE;
- }
- descr->lob_current_position = 0;
- RETURN_TRUE;
- }
-
- php_error_docref(NULL TSRMLS_CC, E_NOTICE, "oci_lob_rewind() should not be called like this. Use $somelob->rewind() to set current position of LOB pointer to beginning");
- RETURN_FALSE;
-}
-/* }}} */
-
-/* {{{ proto bool oci_lob_seek( int offset [, int whence ])
- Moves the pointer of a LOB */
-PHP_FUNCTION(oci_lob_seek)
-{
- zval *id;
- zval **arg1, **arg2;
- int argcount = ZEND_NUM_ARGS(), whence = OCI_SEEK_SET;
- oci_descriptor *descr;
- int inx, len;
-
- if ((id = getThis()) != 0) {
- if ((inx = _oci_get_ocidesc(id,&descr TSRMLS_CC)) == 0) {
- RETURN_FALSE;
- }
-
- if (argcount < 1 || argcount > 2 || zend_get_parameters_ex(argcount, &arg1, &arg2) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long_ex(arg1);
-
- if (oci_lobgetlen(descr->conn,descr,&len) == 0 && descr->lob_size >= 0) {
- if (argcount > 1) {
- convert_to_long_ex(arg2);
- whence = Z_LVAL_PP(arg2);
- switch (whence) {
- case OCI_SEEK_CUR:
- descr->lob_current_position += Z_LVAL_PP(arg1);
- break;
-
- case OCI_SEEK_END:
- if (descr->lob_size + Z_LVAL_PP(arg1) >= 0) {
- descr->lob_current_position = descr->lob_size + Z_LVAL_PP(arg1);
- } else {
- descr->lob_current_position = 0;
- }
- break;
-
- case OCI_SEEK_SET:
- default:
- descr->lob_current_position = Z_LVAL_PP(arg1);
- break;
- }
- } else {
- /* OCI_SEEK_SET by default */
- descr->lob_current_position = Z_LVAL_PP(arg1);
- }
- RETURN_TRUE;
- } else {
- RETURN_FALSE;
- }
- }
-
- php_error_docref(NULL TSRMLS_CC, E_NOTICE, "oci_lob_seek() should not be called like this. Use $somelob->seek($offset) to move pointer");
- RETURN_FALSE;
-}
-/* }}} */
-
-/* {{{ proto int oci_lob_size()
- Returns size of a large object */
-PHP_FUNCTION(oci_lob_size)
-{
- zval *id;
- oci_descriptor *descr;
- int inx;
- ub4 loblen;
-
- if ((id = getThis()) != 0) {
- if ((inx = _oci_get_ocidesc(id,&descr TSRMLS_CC)) == 0) {
- RETURN_FALSE;
- }
-
- if (!oci_lobgetlen(descr->conn,descr,&loblen)) {
- RETURN_LONG(loblen);
- } else {
- RETURN_FALSE;
- }
- }
-
- php_error_docref(NULL TSRMLS_CC, E_NOTICE, "oci_lob_size() should not be called like this. Use $somelob->size() to get size of a LOB");
- RETURN_FALSE;
-}
-/* }}} */
-
-/* {{{ proto int oci_lob_write( string string [, int length ])
- Writes data to current position of a LOB */
-PHP_FUNCTION(oci_lob_write)
-{
- zval *id, **data,**length;
- OCILobLocator *mylob;
- oci_connection *connection;
- oci_descriptor *descr;
- int write_length,inx;
- ub4 loblen;
- ub4 curloblen;
-
- if ((id = getThis()) != 0) {
- if ((inx = _oci_get_ocidesc(id,&descr TSRMLS_CC)) == 0) {
- RETURN_FALSE;
- }
-
- IS_LOB_INTERNAL(descr);
-
- mylob = (OCILobLocator *) descr->ocidescr;
-
- if (!mylob) {
- RETURN_FALSE;
- }
-
- connection = descr->conn;
-
- if (oci_lobgetlen(descr->conn,descr,&curloblen) != 0) {
- RETURN_FALSE;
- }
-
- if (zend_get_parameters_ex(2, &data, &length) == SUCCESS) {
- convert_to_string_ex(data);
- convert_to_long_ex(length);
- write_length = Z_LVAL_PP(length);
- } else if (zend_get_parameters_ex(1, &data) == SUCCESS) {
- convert_to_string_ex(data);
- write_length = Z_STRLEN_PP(data);
- } else {
- WRONG_PARAM_COUNT;
- }
-
- if (write_length < 1) {
- RETURN_LONG(0);
- }
-
- loblen = write_length;
-
- CALL_OCI_RETURN(connection->error,
- OCILobWrite(
- connection->pServiceContext,
- connection->pError,
- mylob,
- &loblen,
- (ub4) descr->lob_current_position+1,
- (dvoid *) Z_STRVAL_PP(data),
- (ub4) loblen,
- OCI_ONE_PIECE,
- (dvoid *)0,
- (OCICallbackLobWrite) 0,
- (ub2) 0,
- (ub1) SQLCS_IMPLICIT
- )
- );
-
- oci_debug("oci_lob_write: size=%d offset=%d",loblen,descr->lob_current_position);
-
- if (connection->error) {
- oci_error(connection->pError, "OCILobWrite", connection->error);
- oci_handle_error(connection, connection->error);
- RETURN_FALSE;
- }
-
- descr->lob_current_position += loblen;
-
- if (descr->lob_current_position > descr->lob_size) {
- descr->lob_size = descr->lob_current_position;
- }
-
- /* marking buffer as used */
- if (descr->buffering == 1) {
- descr->buffering = 2;
- }
- RETURN_LONG(loblen);
- }
-
- php_error_docref(NULL TSRMLS_CC, E_NOTICE, "oci_lob_write() should not be called like this. Use $somelob->write($data,$len) to write to a LOB");
- RETURN_FALSE;
-}
-/* }}} */
-
-/* {{{ proto bool oci_lob_append( object lob )
- Appends data from a LOB to another LOB */
-PHP_FUNCTION(oci_lob_append)
-{
- zval *id, **arg;
- OCILobLocator *mylob,*my_fromlob;
- oci_connection *connection;
- oci_descriptor *descr,*from_descr;
- int inx;
- ub4 curloblen,from_curloblen;
-
- if ((id = getThis()) != 0) {
- if ((inx = _oci_get_ocidesc(id,&descr TSRMLS_CC)) == 0) {
- RETURN_FALSE;
- }
-
- IS_LOB_INTERNAL(descr);
-
- mylob = (OCILobLocator *) descr->ocidescr;
-
- if (!mylob) {
- RETURN_FALSE;
- }
-
- connection = descr->conn;
-
- if (oci_lobgetlen(descr->conn,descr,&curloblen) != 0) {
- RETURN_FALSE;
- }
-
- if (zend_get_parameters_ex(1, &arg) == SUCCESS) {
- convert_to_object_ex(arg);
- if ((inx = _oci_get_ocidesc(*arg,&from_descr TSRMLS_CC)) == 0) {
- RETURN_FALSE;
- }
-
- my_fromlob = (OCILobLocator *) from_descr->ocidescr;
-
- if (!my_fromlob) {
- RETURN_FALSE;
- }
-
- if (oci_lobgetlen(from_descr->conn,from_descr,&from_curloblen) != 0) {
- RETURN_FALSE;
- }
- } else {
- WRONG_PARAM_COUNT;
- }
-
- if (from_descr->lob_size == 0) {
- RETURN_LONG(0);
- }
-
- CALL_OCI_RETURN(connection->error,
- OCILobAppend(
- connection->pServiceContext,
- connection->pError,
- mylob,
- my_fromlob
- )
- );
-
- if (connection->error) {
- oci_error(connection->pError, "OCILobAppend", connection->error);
- oci_handle_error(connection, connection->error);
- RETURN_FALSE;
- }
-
- RETURN_TRUE;
- }
-
- php_error_docref(NULL TSRMLS_CC, E_NOTICE, "oci_lob_append() should not be called like this. Use $somelob->append($LOB_from) to append data from a LOB to another LOB");
- RETURN_FALSE;
-}
-/* }}} */
-
-/* {{{ proto bool oci_lob_truncate( [ int length ])
- Truncates a LOB */
-PHP_FUNCTION(oci_lob_truncate)
-{
- zval *id, **length;
- OCILobLocator *mylob;
- oci_connection *connection;
- oci_descriptor *descr;
- int inx;
- ub4 trim_length;
- ub4 curloblen;
-
- if ((id = getThis()) != 0) {
- if ((inx = _oci_get_ocidesc(id,&descr TSRMLS_CC)) == 0) {
- RETURN_FALSE;
- }
-
- IS_LOB_INTERNAL(descr);
-
- mylob = (OCILobLocator *) descr->ocidescr;
-
- if (!mylob) {
- RETURN_FALSE;
- }
-
- connection = descr->conn;
-
- if (oci_lobgetlen(descr->conn,descr,&curloblen) != 0) {
- RETURN_FALSE;
- }
-
- if (zend_get_parameters_ex(1, &length) == SUCCESS) {
- convert_to_long_ex(length);
- trim_length = Z_LVAL_PP(length);
- } else {
- trim_length = 0;
- }
-
- if (trim_length < 0) {
- /* negative length is not allowed */
- RETURN_FALSE;
- }
-
- CALL_OCI_RETURN(connection->error,
- OCILobTrim(
- connection->pServiceContext,
- connection->pError,
- mylob,
- trim_length
- )
- );
-
- oci_debug("oci_lob_truncate: trim_length=%d",trim_length);
-
- if (connection->error) {
- oci_error(connection->pError, "OCILobTrim", connection->error);
- oci_handle_error(connection, connection->error);
- RETURN_FALSE;
- }
-
- descr->lob_size = trim_length;
- RETURN_TRUE;
- }
-
- php_error_docref(NULL TSRMLS_CC, E_NOTICE, "oci_lob_truncate() should not be called like this. Use $somelob->truncate($length) to truncate a LOB to a specified length");
- RETURN_FALSE;
-}
-/* }}} */
-
-/* {{{ proto int oci_lob_erase( [ int offset [, int length ] ] )
- Erases a specified portion of the internal LOB, starting at a specified offset */
-PHP_FUNCTION(oci_lob_erase)
-{
- zval *id, **length, **offset;
- OCILobLocator *mylob;
- oci_connection *connection;
- oci_descriptor *descr;
- int inx;
- ub4 erase_length, erase_offset;
- ub4 curloblen;
-
- if ((id = getThis()) != 0) {
- if ((inx = _oci_get_ocidesc(id,&descr TSRMLS_CC)) == 0) {
- RETURN_FALSE;
- }
-
- IS_LOB_INTERNAL(descr);
-
- mylob = (OCILobLocator *) descr->ocidescr;
-
- if (!mylob) {
- RETURN_FALSE;
- }
-
- connection = descr->conn;
-
- if (oci_lobgetlen(descr->conn,descr,&curloblen) != 0) {
- RETURN_FALSE;
- }
-
- if (zend_get_parameters_ex(2, &offset, &length) == SUCCESS) {
- convert_to_long_ex(offset);
- convert_to_long_ex(length);
-
- erase_offset = Z_LVAL_PP(offset);
- erase_length = Z_LVAL_PP(length);
- } else if (zend_get_parameters_ex(1, &offset) == SUCCESS) {
- convert_to_long_ex(offset);
-
- erase_offset = Z_LVAL_PP(offset);
- erase_length = descr->lob_size - erase_offset;
- } else {
- erase_offset = 0;
- erase_length = descr->lob_size;
- }
-
- if (erase_length < 1) {
- RETURN_LONG(0);
- }
-
- if (erase_offset > descr->lob_size) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "oci_lob_erase(): offset is greater than LOB's length");
- }
-
- CALL_OCI_RETURN(connection->error,
- OCILobErase(
- connection->pServiceContext,
- connection->pError,
- mylob,
- &erase_length,
- erase_offset+1
- )
- );
-
- oci_debug("oci_lob_erase: erase_length=%d, erase_offset=%d",erase_length,erase_offset);
-
- if (connection->error) {
- oci_error(connection->pError, "OCILobErase", connection->error);
- oci_handle_error(connection, connection->error);
- RETURN_FALSE;
- }
-
- RETURN_LONG(erase_length);
- }
-
- php_error_docref(NULL TSRMLS_CC, E_NOTICE, "oci_lob_erase() should not be called like this. Use $somelob->erase($offset, $length) to erase specified part of LOB");
- RETURN_FALSE;
-}
-/* }}} */
-
-/* {{{ proto bool oci_lob_flush( [ int flag ] )
- Flushes the LOB buffer */
-PHP_FUNCTION(oci_lob_flush)
-{
- zval *id, **flag;
- OCILobLocator *mylob;
- oci_connection *connection;
- oci_descriptor *descr;
- int inx, flush_flag;
-
- if ((id = getThis()) != 0) {
- if ((inx = _oci_get_ocidesc(id,&descr TSRMLS_CC)) == 0) {
- RETURN_FALSE;
- }
-
- IS_LOB_INTERNAL(descr);
-
- mylob = (OCILobLocator *) descr->ocidescr;
-
- if (!mylob) {
- RETURN_FALSE;
- }
-
- connection = descr->conn;
-
- if (zend_get_parameters_ex(1, &flag) == SUCCESS) {
- convert_to_long_ex(flag);
- flush_flag = Z_LVAL_PP(flag);
- } else {
- flush_flag = 0;
- }
-
- if (descr->buffering == 0) {
- /* buffering wasn't enabled, there is nothing to flush */
- RETURN_FALSE;
- }
-
- if (oci_lob_flush(descr,flush_flag TSRMLS_CC) == 1) {
- RETURN_TRUE;
- }
- RETURN_FALSE;
- }
-
- php_error_docref(NULL TSRMLS_CC, E_NOTICE, "oci_lob_flush() should not be called like this. Use $somelob->flush() to flush LOB buffer");
- RETURN_FALSE;
-}
-/* }}} */
-
-/* {{{ proto bool ocisetbufferinglob( boolean flag )
- Enables/disables buffering for a LOB */
-PHP_FUNCTION(ocisetbufferinglob)
-{
- zval *id, **flag;
- OCILobLocator *mylob;
- oci_connection *connection;
- oci_descriptor *descr;
- int inx, buffering_flag;
- ub4 curloblen;
-
- if ((id = getThis()) != 0) {
- if ((inx = _oci_get_ocidesc(id,&descr TSRMLS_CC)) == 0) {
- RETURN_FALSE;
- }
-
- IS_LOB_INTERNAL(descr);
-
- mylob = (OCILobLocator *) descr->ocidescr;
-
- if (!mylob) {
- RETURN_FALSE;
- }
-
- connection = descr->conn;
-
- if (oci_lobgetlen(descr->conn,descr,&curloblen) != 0) {
- RETURN_FALSE;
- }
-
- if (zend_get_parameters_ex(1, &flag) == SUCCESS) {
- convert_to_boolean_ex(flag);
- buffering_flag = Z_LVAL_PP(flag);
- } else {
- WRONG_PARAM_COUNT;
- }
-
- /* we'll return true if function was called twice with the same parameter */
- if (buffering_flag == 0 && descr->buffering == 0) {
- RETURN_TRUE;
- } else if (buffering_flag == 1 && descr->buffering > 0) {
- RETURN_TRUE;
- }
-
- switch (buffering_flag) {
- case 0:
- CALL_OCI_RETURN(connection->error,
- OCILobDisableBuffering(
- connection->pServiceContext,
- connection->pError,
- mylob
- )
- );
- break;
- case 1:
- CALL_OCI_RETURN(connection->error,
- OCILobEnableBuffering(
- connection->pServiceContext,
- connection->pError,
- mylob
- )
- );
- break;
- }
-
- oci_debug("oci_lob_set_buffering: buffering_flag=%d",buffering_flag);
-
- if (connection->error) {
- oci_error(connection->pError, "OCILobFlushBuffer", connection->error);
- oci_handle_error(connection, connection->error);
- RETURN_FALSE;
- }
-
- descr->buffering = buffering_flag;
- RETURN_TRUE;
- }
-
- php_error_docref(NULL TSRMLS_CC, E_NOTICE, "OCISetBufferingLob() should not be called like this. Use $somelob->setBuffering($flag) to set buffering on/off for a LOB");
- RETURN_FALSE;
-}
-/* }}} */
-
-/* {{{ proto bool ocigetbufferinglob()
- Returns current state of buffering for a LOB */
-PHP_FUNCTION(ocigetbufferinglob)
-{
- zval *id;
- OCILobLocator *mylob;
- oci_descriptor *descr;
- int inx;
-
- if ((id = getThis()) != 0) {
- if ((inx = _oci_get_ocidesc(id,&descr TSRMLS_CC)) == 0) {
- RETURN_FALSE;
- }
-
- IS_LOB_INTERNAL(descr);
-
- mylob = (OCILobLocator *) descr->ocidescr;
-
- if (!mylob) {
- RETURN_FALSE;
- }
-
- switch (descr->buffering) {
- case 1:
- case 2:
- RETURN_TRUE;
- break;
-
- case 0:
- default:
- RETURN_FALSE;
- break;
- }
- }
-
- php_error_docref(NULL TSRMLS_CC, E_NOTICE, "OCIGetBufferingLob() should not be called like this. Use $somelob->getBuffering() to get current state of buffering for a LOB");
- RETURN_FALSE;
-}
-/* }}} */
-
-/* {{{ proto bool oci_lob_copy( object lob_to, object lob_from [, int length ] )
- Copies data from a LOB to another LOB */
-PHP_FUNCTION(oci_lob_copy)
-{
- zval **arg1, **arg2, **arg3;
- OCILobLocator *mylob,*my_fromlob;
- oci_connection *connection;
- oci_descriptor *descr,*from_descr;
- int inx, ac = ZEND_NUM_ARGS();
- ub4 curloblen,from_curloblen, copylen;
-
- if (ac < 2 || ac > 3 || zend_get_parameters_ex(ac, &arg1, &arg2, &arg3) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_object_ex(arg1);
- convert_to_object_ex(arg2);
-
- if ((inx = _oci_get_ocidesc(*arg1,&descr TSRMLS_CC)) == 0 || (inx = _oci_get_ocidesc(*arg2,&from_descr TSRMLS_CC)) == 0) {
- RETURN_FALSE;
- }
-
- IS_LOB_INTERNAL(descr);
- IS_LOB_INTERNAL(from_descr);
-
- mylob = (OCILobLocator *) descr->ocidescr;
- my_fromlob = (OCILobLocator *) from_descr->ocidescr;
-
- if (!mylob || !my_fromlob) {
- RETURN_FALSE;
- }
-
- if (oci_lobgetlen(descr->conn,descr,&curloblen) != 0 || oci_lobgetlen(from_descr->conn,from_descr,&from_curloblen) != 0) {
- RETURN_FALSE;
- }
-
- if (ac == 3) {
- convert_to_long_ex(arg3);
- copylen = Z_LVAL_PP(arg3);
- } else {
- copylen = from_descr->lob_size - from_descr->lob_current_position;
- }
-
- if ((int)copylen <= 0) {
- RETURN_FALSE;
- }
-
- connection = descr->conn;
-
- CALL_OCI_RETURN(connection->error,
- OCILobCopy(
- connection->pServiceContext,
- connection->pError,
- mylob,
- my_fromlob,
- copylen,
- descr->lob_current_position+1,
- from_descr->lob_current_position+1
- )
- );
-
- if (connection->error) {
- oci_error(connection->pError, "OCILobCopy", connection->error);
- oci_handle_error(connection, connection->error);
- RETURN_FALSE;
- }
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto bool oci_lob_is_equal( object lob1, object lob2 )
- Tests to see if two LOB/FILE locators are equal */
-PHP_FUNCTION(oci_lob_is_equal)
-{
- zval **arg1, **arg2;
- OCILobLocator *first_lob,*second_lob;
- oci_connection *connection;
- oci_descriptor *first_descr,*second_descr;
- int inx;
- boolean is_equal;
-
- if (zend_get_parameters_ex(2, &arg1, &arg2) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_object_ex(arg1);
- convert_to_object_ex(arg2);
-
- if ((inx = _oci_get_ocidesc(*arg1,&first_descr TSRMLS_CC)) == 0 || (inx = _oci_get_ocidesc(*arg2,&second_descr TSRMLS_CC)) == 0) {
- RETURN_FALSE;
- }
-
- first_lob = (OCILobLocator *) first_descr->ocidescr;
- second_lob = (OCILobLocator *) second_descr->ocidescr;
-
- if (!first_lob || !second_lob) {
- RETURN_FALSE;
- }
-
- connection = first_descr->conn;
-
- CALL_OCI_RETURN(connection->error,
- OCILobIsEqual(
- connection->session->pEnv,
- first_lob,
- second_lob,
- &is_equal
- )
- );
-
- if (connection->error) {
- oci_error(connection->pError, "OCILobIsEqual", connection->error);
- oci_handle_error(connection, connection->error);
- RETURN_FALSE;
- }
-
- if (is_equal == TRUE) {
- RETURN_TRUE;
- } else {
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-/* {{{ proto bool oci_lob_export([string filename [, int start [, int length]]])
- Writes a large object into a file */
-PHP_FUNCTION(oci_lob_export)
-{
- zval *id, **zfilename, **zstart, **zlength;
- char *filename = NULL;
- int start = -1;
- ub4 length = -1;
- oci_connection *connection;
- oci_descriptor *descr;
- char *buffer=0;
- ub4 loblen;
- int ac = ZEND_NUM_ARGS();
- int fp = -1,inx;
- OCILobLocator *mylob;
- int coffs;
-
- if ((id = getThis()) != 0) {
- if ((inx = _oci_get_ocidesc(id,&descr TSRMLS_CC)) == 0) {
- RETURN_FALSE;
- }
-
- mylob = (OCILobLocator *) descr->ocidescr;
-
- if (!mylob) {
- RETURN_FALSE;
- }
-
- connection = descr->conn;
-
- if (ac < 0 || ac > 3 || zend_get_parameters_ex(ac, &zfilename, &zstart, &zlength) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- switch (ac) {
- case 3:
- convert_to_long_ex(zlength);
- length = Z_LVAL_PP(zlength);
- case 2:
- convert_to_long_ex(zstart);
- start = Z_LVAL_PP(zstart);
- case 1:
- convert_to_string_ex(zfilename);
- filename = Z_STRVAL_PP(zfilename);
- }
-
- if (filename && *filename) {
- if (php_check_open_basedir(filename TSRMLS_CC)) {
- goto bail;
- }
-
- if ((fp = VCWD_OPEN_MODE(filename,O_CREAT | O_RDWR | O_BINARY | O_TRUNC, 0600)) == -1) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Can't create file %s", filename);
- goto bail;
- }
- }
-
- CALL_OCI_RETURN(connection->error,
- OCILobGetLength(
- connection->pServiceContext,
- connection->pError,
- descr->ocidescr,
- &loblen
- )
- );
-
- if (connection->error) {
- oci_error(connection->pError, "OCILobGetLength", connection->error);
- oci_handle_error(connection, connection->error);
- goto bail;
- }
-
- if (descr->type == OCI_DTYPE_FILE) {
- CALL_OCI_RETURN(connection->error,
- OCILobFileOpen(
- connection->pServiceContext,
- connection->pError,
- descr->ocidescr,
- OCI_FILE_READONLY
- )
- );
-
- if (connection->error) {
- oci_error(connection->pError, "OCILobFileOpen",connection->error);
- oci_handle_error(connection, connection->error);
- goto bail;
- }
- }
-
- if (start == -1) {
- start = 0;
- }
-
- if (length == -1) {
- length = loblen - start;
- }
-
- if ((start + length) > loblen) {
- length = loblen - start;
- }
-
-#define OCI_LOB_READ_BUFFER 128*1024
-
- buffer = emalloc(OCI_LOB_READ_BUFFER);
-
- coffs = start;
-
- oci_debug("oci_lob_export(start = %d, length = %d, loblen = %d",start,length,loblen);
-
- while (length > 0) {
- ub4 toread;
-
- if (length > OCI_LOB_READ_BUFFER) {
- toread = OCI_LOB_READ_BUFFER;
- } else {
- toread = length;
- }
-
- oci_debug("oci_lob_read(coffs = %d, toread = %d",coffs,toread);
-
- CALL_OCI_RETURN(connection->error,
- OCILobRead(
- connection->pServiceContext,
- connection->pError,
- descr->ocidescr,
- &toread, /* IN/OUT bytes toread/read */
- coffs+1, /* offset (starts with 1) */
- (dvoid *) buffer,
- toread, /* size of buffer */
- (dvoid *)0,
- (OCICallbackLobRead) 0, /* callback... */
- (ub2) 0, /* The character set ID of the buffer data. */
- (ub1) SQLCS_IMPLICIT /* The character set form of the buffer data. */
- )
- );
-
- oci_debug("oci_lob_read(read - %d",toread);
-
- if (connection->error) {
- oci_error(connection->pError, "OCILobRead", connection->error);
- oci_handle_error(connection, connection->error);
- goto bail;
- }
-
- if (fp != -1) {
- if ((ub4) write(fp,buffer,toread) != toread) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "cannot write file!");
- goto bail;
- }
- } else {
- PHPWRITE(buffer,toread);
- }
-
- length -= toread;
- coffs += toread;
- }
-
- efree(buffer);
- buffer = 0;
-
- if (fp != -1) {
- close(fp);
- fp = 0;
- }
-
- if (descr->type == OCI_DTYPE_FILE) {
- CALL_OCI_RETURN(connection->error,
- OCILobFileClose(
- connection->pServiceContext,
- connection->pError,
- descr->ocidescr
- )
- );
-
- if (connection->error) {
- oci_error(connection->pError, "OCILobFileClose", connection->error);
- oci_handle_error(connection, connection->error);
- goto bail;
- }
- }
- RETURN_TRUE;
- }
-
-bail:
- if (fp != -1) {
- close(fp);
- }
-
- if (buffer) {
- efree(buffer);
- }
-
- RETURN_FALSE;
-}
-/* }}} */
-
-#ifdef HAVE_OCI8_TEMP_LOB
-/* {{{ proto bool oci_lob_write_temporary(string var [, int lob_type])
- Writes temporary blob */
-PHP_FUNCTION(oci_lob_write_temporary)
-{
- zval *id, *var;
- OCILobLocator *mylob;
- oci_connection *connection;
- oci_descriptor *descr;
- ub4 offset = 1;
- ub4 loblen;
- long lob_type = OCI_TEMP_CLOB;
-
- oci_debug ("oci_write_temporary_lob");
-
- if ((id = getThis()) == 0) {
- RETURN_FALSE;
- }
-
- if (_oci_get_ocidesc(id,&descr TSRMLS_CC) == 0) {
- RETURN_FALSE;
- }
-
- mylob = (OCILobLocator *) descr->ocidescr;
-
- if (!mylob) {
- RETURN_FALSE;
- }
-
- connection = descr->conn;
-
- if (ZEND_NUM_ARGS() < 1) WRONG_PARAM_COUNT;
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z|l", &var, &lob_type) == FAILURE) {
- RETURN_FALSE;
- }
-
- CALL_OCI_RETURN(connection->error,
- OCILobCreateTemporary(
- connection->pServiceContext,
- connection->pError,
- mylob,
- OCI_DEFAULT,
- OCI_DEFAULT,
- lob_type,
- OCI_ATTR_NOCACHE,
- OCI_DURATION_SESSION
- )
- );
-
- if (connection->error) {
- oci_error(connection->pError, "OCILobCreateTemporary", connection->error);
- oci_handle_error(connection, connection->error);
- RETURN_FALSE;
- }
-
- CALL_OCI_RETURN(connection->error,
- OCILobOpen(
- connection->pServiceContext,
- connection->pError,
- mylob,
- OCI_LOB_READWRITE
- )
- );
-
- if (connection->error) {
- oci_error(connection->pError, "OCILobOpen", connection->error);
- oci_handle_error(connection, connection->error);
- RETURN_FALSE;
- }
-
- convert_to_string_ex(&var);
- loblen = Z_STRLEN_P(var);
-
- if (loblen < 1) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Cannot save a lob that is less than 1 byte");
- RETURN_FALSE;
- }
-
- CALL_OCI_RETURN(connection->error,
- OCILobWrite(
- connection->pServiceContext,
- connection->pError,
- mylob,
- (ub4 *) &loblen,
- (ub4) offset,
- (dvoid *) Z_STRVAL_P(var),
- (ub4) loblen,
- OCI_ONE_PIECE,
- (dvoid *)0,
- (sb4 (*)(dvoid *, dvoid *, ub4 *, ub1 *)) 0,
- (ub2) 0,
- (ub1) SQLCS_IMPLICIT
- )
- );
-
- if (connection->error) {
- oci_error(connection->pError, "OCILobWrite", connection->error);
- oci_handle_error(connection, connection->error);
- RETURN_FALSE;
- }
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto bool oci_lob_close()
- Closes lob descriptor */
-PHP_FUNCTION(oci_lob_close)
-{
- zval *id;
- int inx;
- OCILobLocator *mylob;
- oci_connection *connection;
- oci_descriptor *descriptor;
- int is_temporary;
-
- if ((id = getThis()) != 0) {
- inx = _oci_get_ocidesc(id,&descriptor TSRMLS_CC);
- if (inx) {
-
- mylob = (OCILobLocator *) descriptor->ocidescr;
-
- if (!mylob) {
- RETURN_FALSE;
- }
-
- connection = descriptor->conn;
-
- CALL_OCI_RETURN(connection->error,
- OCILobClose(
- connection->pServiceContext,
- connection->pError,
- mylob
- )
- );
-
- if (connection->error) {
- oci_error(connection->pError, "OCILobClose", connection->error);
- oci_handle_error(connection, connection->error);
- RETURN_FALSE;
- }
-
- connection->error =
- OCILobIsTemporary(connection->session->pEnv,
- connection->pError,
- mylob,
- &is_temporary);
- if (is_temporary) {
- connection->error =
- OCILobFreeTemporary(connection->pServiceContext,
- connection->pError,
- mylob);
-
- if (connection->error) {
- oci_error(connection->pError, "OCILobFreeTemporary",
- connection->error);
- oci_handle_error(connection, connection->error);
- RETURN_FALSE;
- }
- oci_debug("oci_lob_free_temporary: descr=%d",inx);
- }
-
- oci_debug("oci_close_lob: descr=%d",inx);
- RETURN_TRUE;
- }
- }
-
- php_error_docref(NULL TSRMLS_CC, E_NOTICE, "oci_lob_close() should not be called like this. Use $somelob->close() to close a LOB");
-
- RETURN_FALSE;
-}
-/* }}} */
-#endif
-
-/* {{{ proto object oci_new_descriptor(resource connection [, int type])
- Initialize a new empty descriptor LOB/FILE (LOB is default) */
-PHP_FUNCTION(oci_new_descriptor)
-{
- zval **conn, **type;
- oci_connection *connection;
- oci_descriptor *descr;
- int dtype;
-
- dtype = OCI_DTYPE_LOB;
-
- if (zend_get_parameters_ex(2, &conn, &type) == SUCCESS) {
- convert_to_long_ex(type);
- dtype = Z_LVAL_PP(type);
- } else if (zend_get_parameters_ex(1, &conn) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- OCI_GET_CONN(connection,conn);
-
- descr = oci_new_desc(dtype,connection);
-
- if (!descr) {
- RETURN_NULL();
- }
-
- object_init_ex(return_value, oci_lob_class_entry_ptr);
- add_property_resource(return_value, "descriptor", descr->id);
-}
-/* }}} */
-
-/* {{{ proto bool oci_rollback(resource conn)
- Rollback the current context */
-PHP_FUNCTION(oci_rollback)
-{
- zval **conn;
- oci_connection *connection;
-
- if (zend_get_parameters_ex(1, &conn) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- OCI_GET_CONN(connection,conn);
-
- if (connection->descriptors) {
- zend_hash_apply(connection->descriptors,(apply_func_t) _oci_desc_flush_hash_dtor TSRMLS_CC);
- }
-
- oci_debug("<OCITransRollback");
-
- CALL_OCI_RETURN(connection->error,
- OCITransRollback(
- connection->pServiceContext,
- connection->pError,
- (ub4) 0
- )
- );
-
- connection->needs_commit = 0;
-
- oci_debug(">OCITransRollback");
-
- if (connection->error) {
- oci_error(connection->pError, "OCIRollback", connection->error);
- oci_handle_error(connection, connection->error);
- RETURN_FALSE;
- }
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto bool oci_commit(resource conn)
- Commit the current context */
-PHP_FUNCTION(oci_commit)
-{
- zval **conn;
- oci_connection *connection;
-
- if (zend_get_parameters_ex(1, &conn) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- OCI_GET_CONN(connection,conn);
-
- if (connection->descriptors) {
- zend_hash_apply(connection->descriptors,(apply_func_t) _oci_desc_flush_hash_dtor TSRMLS_CC);
- }
-
- oci_debug("<OCITransCommit");
-
- CALL_OCI_RETURN(connection->error,
- OCITransCommit(
- connection->pServiceContext,
- connection->pError,
- (ub4) 0
- )
- );
-
- connection->needs_commit = 0;
-
- oci_debug(">OCITransCommit");
-
- if (connection->error) {
- oci_error(connection->pError, "OCICommit", connection->error);
- oci_handle_error(connection, connection->error);
- RETURN_FALSE;
- }
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto string oci_field_name(resource stmt, int col)
- Tell the name of a column */
-PHP_FUNCTION(oci_field_name)
-{
- zval **stmt, **col;
- oci_statement *statement;
- oci_out_column *outcol;
-
- if (zend_get_parameters_ex(2, &stmt, &col) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- OCI_GET_STMT(statement,stmt);
-
- outcol = oci_get_col(statement, -1, col);
- if (outcol == NULL) {
- RETURN_FALSE;
- }
-
- RETURN_STRINGL(outcol->name, outcol->name_len, 1);
-}
-/* }}} */
-
-/* {{{ proto int oci_field_size(resource stmt, int col)
- Tell the maximum data size of a column */
-PHP_FUNCTION(oci_field_size)
-{
- zval **stmt, **col;
- oci_statement *statement;
- oci_out_column *outcol;
-
- if (zend_get_parameters_ex(2, &stmt, &col) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- OCI_GET_STMT(statement,stmt);
-
- outcol = oci_get_col(statement, -1, col);
- if (outcol == NULL) {
- RETURN_FALSE;
- }
-
- oci_debug("oci_field_size: %16s, retlen = %4d, retlen4 = %d, data_size = %4d, storage_size4 = %4d, indicator %4d, retcode = %4d",
- outcol->name,outcol->retlen,outcol->retlen4,outcol->data_size,outcol->storage_size4,outcol->indicator,outcol->retcode);
-
- /* Handle data type of LONG */
- if (outcol->data_type == SQLT_LNG){
- RETURN_LONG(outcol->storage_size4);
- } else {
- RETURN_LONG(outcol->data_size);
- }
-}
-/* }}} */
-
-/* {{{ proto int oci_field_scale(resource stmt, int col)
- Tell the scale of a column */
-PHP_FUNCTION(oci_field_scale)
-{
- zval **stmt, **col;
- oci_statement *statement;
- oci_out_column *outcol;
-
- if (zend_get_parameters_ex(2, &stmt, &col) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- OCI_GET_STMT(statement,stmt);
-
- outcol = oci_get_col(statement, -1, col);
- if (outcol == NULL) {
- RETURN_FALSE;
- }
- RETURN_LONG(outcol->scale);
-}
-/* }}} */
-
-/* {{{ proto int oci_field_precision(resource stmt, int col)
- Tell the precision of a column */
-PHP_FUNCTION(oci_field_precision)
-{
- zval **stmt, **col;
- oci_statement *statement;
- oci_out_column *outcol;
-
- if (zend_get_parameters_ex(2, &stmt, &col) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- OCI_GET_STMT(statement,stmt);
-
- outcol = oci_get_col(statement, -1, col);
- if (outcol == NULL) {
- RETURN_FALSE;
- }
- RETURN_LONG(outcol->precision);
-}
-/* }}} */
-
-/* {{{ proto mixed oci_field_type(resource stmt, int col)
- Tell the data type of a column */
-PHP_FUNCTION(oci_field_type)
-{
- zval **stmt, **col;
- oci_statement *statement;
- oci_out_column *outcol;
-
- if (zend_get_parameters_ex(2, &stmt, &col) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- OCI_GET_STMT(statement,stmt);
-
- outcol = oci_get_col(statement, -1, col);
- if (outcol == NULL) {
- RETURN_FALSE;
- }
- switch (outcol->data_type) {
-#ifdef SQLT_TIMESTAMP
- case SQLT_TIMESTAMP:
- RETVAL_STRING("TIMESTAMP",1);
- break;
-#endif
-#ifdef SQLT_TIMESTAMP_TZ
- case SQLT_TIMESTAMP_TZ:
- RETVAL_STRING("TIMESTAMP_TZ",1);
- break;
-#endif
- case SQLT_DAT:
- RETVAL_STRING("DATE",1);
- break;
- case SQLT_NUM:
- RETVAL_STRING("NUMBER",1);
- break;
- case SQLT_LNG:
- RETVAL_STRING("LONG",1);
- break;
- case SQLT_BIN:
- RETVAL_STRING("RAW",1);
- break;
- case SQLT_LBI:
- RETVAL_STRING("LONG RAW",1);
- break;
- case SQLT_CHR:
- RETVAL_STRING("VARCHAR",1);
- break;
- case SQLT_RSET:
- RETVAL_STRING("REFCURSOR",1);
- break;
- case SQLT_AFC:
- RETVAL_STRING("CHAR",1);
- break;
- case SQLT_BLOB:
- RETVAL_STRING("BLOB",1);
- break;
- case SQLT_CLOB:
- RETVAL_STRING("CLOB",1);
- break;
- case SQLT_BFILE:
- RETVAL_STRING("BFILE",1);
- break;
- case SQLT_RDD:
- RETVAL_STRING("ROWID",1);
- break;
- default:
- RETVAL_LONG(outcol->data_type);
- }
-}
-/* }}} */
-
-/* {{{ proto int oci_field_type_raw(resource stmt, int col)
- Tell the raw oracle data type of a column */
-PHP_FUNCTION(oci_field_type_raw)
-{
- zval **stmt, **col;
- oci_statement *statement;
- oci_out_column *outcol;
-
- if (zend_get_parameters_ex(2, &stmt, &col) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- OCI_GET_STMT(statement,stmt);
-
- outcol = oci_get_col(statement, -1, col);
- if (outcol == NULL) {
- RETURN_FALSE;
- }
- RETVAL_LONG(outcol->data_type);
-}
-/* }}} */
-
-/* {{{ proto bool oci_field_is_null(resource stmt, int col)
- Tell whether a column is NULL */
-PHP_FUNCTION(oci_field_is_null)
-{
- zval **stmt, **col;
- oci_statement *statement;
- oci_out_column *outcol;
-
- if (zend_get_parameters_ex(2, &stmt, &col) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- OCI_GET_STMT(statement,stmt);
-
- outcol = oci_get_col(statement, -1, col);
- if (outcol == NULL) {
- RETURN_FALSE;
- }
- if (outcol->indicator == -1) {
- RETURN_TRUE;
- } else {
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-/* {{{ proto void oci_internal_debug(int onoff)
- Toggle internal debugging output for the OCI extension */
-PHP_FUNCTION(oci_internal_debug)
-{
- zval **arg;
-
- if (zend_get_parameters_ex(1, &arg) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long_ex(arg);
- OCI(debug_mode) = Z_LVAL_PP(arg);
-}
-/* }}} */
-
-/* {{{ proto bool oci_execute(resource stmt [, int mode])
- Execute a parsed statement */
-PHP_FUNCTION(oci_execute)
-{
- zval **stmt,**mode;
- oci_statement *statement;
- ub4 execmode;
-
- if (zend_get_parameters_ex(2, &stmt, &mode) == SUCCESS) {
- convert_to_long_ex(mode);
- execmode = Z_LVAL_PP(mode);
- } else if (zend_get_parameters_ex(1, &stmt) == SUCCESS) {
- execmode = OCI_COMMIT_ON_SUCCESS;
- } else {
- WRONG_PARAM_COUNT;
- }
-
- OCI_GET_STMT(statement,stmt);
-
- if (oci_execute(statement, "OCIExecute",execmode)) {
- RETURN_TRUE;
- } else {
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-/* {{{ proto bool oci_cancel(resource stmt)
- Cancel reading from a cursor */
-PHP_FUNCTION(oci_cancel)
-{
- zval **stmt;
- oci_statement *statement;
-
- if (zend_get_parameters_ex(1, &stmt) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- OCI_GET_STMT(statement,stmt);
-
- if (oci_fetch(statement, 0, "OCICancel" TSRMLS_CC)) {
- RETURN_TRUE;
- } else {
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-/* {{{ proto bool oci_fetch(resource stmt)
- Prepare a new row of data for reading */
-PHP_FUNCTION(oci_fetch)
-{
- zval **stmt;
- oci_statement *statement;
- ub4 nrows = 1; /* only one row at a time is supported for now */
-
- if (zend_get_parameters_ex(1, &stmt) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- OCI_GET_STMT(statement,stmt);
-
- if (oci_fetch(statement, nrows, "OCIFetch" TSRMLS_CC)) {
- RETURN_TRUE;
- } else {
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-/* {{{ proto int ocifetchinto(resource stmt, array &output [, int mode])
- Fetch a row of result data into an array */
-PHP_FUNCTION(ocifetchinto)
-{
- php_oci_fetch_row(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0, 3);
-}
-/* }}} */
-
-/* {{{ proto int oci_fetch_all(resource stmt, array &output[, int skip[, int maxrows[, int flags]]])
- Fetch all rows of result data into an array */
-PHP_FUNCTION(oci_fetch_all)
-{
- zval **stmt, **array, *element, **zskip, **zmaxrows, **zflags, *tmp;
- oci_statement *statement;
- oci_out_column **columns;
- zval ***outarrs;
- ub4 nrows = 1;
- int i;
- int skip = 0, maxrows = -1;
- int flags = 0;
- int rows = 0;
- int ac = ZEND_NUM_ARGS();
-
- if (ac < 2 || ac > 5 || zend_get_parameters_ex(ac, &stmt, &array, &zskip, &zmaxrows, &zflags) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- switch (ac) {
- case 5:
- convert_to_long_ex(zflags);
- flags = Z_LVAL_PP(zflags);
- case 4:
- convert_to_long_ex(zmaxrows);
- maxrows = Z_LVAL_PP(zmaxrows);
- case 3:
- convert_to_long_ex(zskip);
- skip = Z_LVAL_PP(zskip);
- }
-
- OCI_GET_STMT(statement,stmt);
-
- zval_dtor(*array);
- array_init(*array);
-
- while (skip--) {
- if (!oci_fetch(statement, nrows, "OCIFetchStatement" TSRMLS_CC)) {
- RETURN_LONG(0);
- }
- }
-
- if (flags & OCI_FETCHSTATEMENT_BY_ROW) {
- columns = safe_emalloc(statement->ncolumns, sizeof(oci_out_column *), 0);
-
- for (i = 0; i < statement->ncolumns; i++) {
- columns[ i ] = oci_get_col(statement, i + 1, 0);
- }
-
- while (oci_fetch(statement, nrows, "OCIFetchStatement" TSRMLS_CC)) {
- zval *row;
-
- MAKE_STD_ZVAL(row);
- array_init(row);
-
- for (i = 0; i < statement->ncolumns; i++) {
- MAKE_STD_ZVAL(element);
-
- _oci_make_zval(element,statement,columns[ i ], "OCIFetchStatement",OCI_RETURN_LOBS TSRMLS_CC);
-
- if (flags & OCI_NUM) {
- zend_hash_next_index_insert(Z_ARRVAL_P(row), &element, sizeof(zval*), NULL);
- } else { /* default to ASSOC */
- zend_hash_update(Z_ARRVAL_P(row),
- columns[ i ]->name, columns[ i ]->name_len+1,
- &element, sizeof(zval*), NULL);
- }
- }
-
- zend_hash_next_index_insert(Z_ARRVAL_PP(array), &row, sizeof(zval*), NULL);
-
- rows++;
-
- if ((maxrows != -1) && (rows == maxrows)) {
- oci_fetch(statement, 0, "OCIFetchStatement" TSRMLS_CC);
- break;
- }
- }
- efree(columns);
-
- } else { /* default to BY_COLUMN */
- columns = safe_emalloc(statement->ncolumns, sizeof(oci_out_column *), 0);
- outarrs = safe_emalloc(statement->ncolumns, sizeof(zval*), 0);
-
- if (flags & OCI_NUM) {
- for (i = 0; i < statement->ncolumns; i++) {
- columns[ i ] = oci_get_col(statement, i + 1, 0);
-
- MAKE_STD_ZVAL(tmp);
- array_init(tmp);
-
- zend_hash_next_index_insert(Z_ARRVAL_PP(array),
- &tmp, sizeof(zval*), (void **) &(outarrs[ i ]));
- }
- } else { /* default to ASSOC */
- for (i = 0; i < statement->ncolumns; i++) {
- columns[ i ] = oci_get_col(statement, i + 1, 0);
-
- MAKE_STD_ZVAL(tmp);
- array_init(tmp);
-
- zend_hash_update(Z_ARRVAL_PP(array),
- columns[ i ]->name, columns[ i ]->name_len+1,
- (void *) &tmp, sizeof(zval*), (void **) &(outarrs[ i ]));
- }
- }
-
- while (oci_fetch(statement, nrows, "OCIFetchStatement" TSRMLS_CC)) {
- for (i = 0; i < statement->ncolumns; i++) {
- MAKE_STD_ZVAL(element);
-
- _oci_make_zval(element,statement,columns[ i ], "OCIFetchStatement",OCI_RETURN_LOBS TSRMLS_CC);
-
- zend_hash_index_update((*(outarrs[ i ]))->value.ht, rows, (void *)&element, sizeof(zval*), NULL);
- }
-
- rows++;
-
- if ((maxrows != -1) && (rows == maxrows)) {
- oci_fetch(statement, 0, "OCIFetchStatement" TSRMLS_CC);
- break;
- }
- }
-
- efree(columns);
- efree(outarrs);
- }
-
- RETURN_LONG(rows);
-}
-/* }}} */
-
-/* {{{ proto object oci_fetch_object( resource stmt )
- Fetch a result row as an object */
-PHP_FUNCTION(oci_fetch_object)
-{
- php_oci_fetch_row(INTERNAL_FUNCTION_PARAM_PASSTHRU, OCI_ASSOC, 2);
-
- if (Z_TYPE_P(return_value) == IS_ARRAY) {
- object_and_properties_init(return_value, ZEND_STANDARD_CLASS_DEF_PTR, Z_ARRVAL_P(return_value));
- }
-}
-/* }}} */
-
-/* {{{ proto array oci_fetch_row( resource stmt )
- Fetch a result row as an enumerated array */
-PHP_FUNCTION(oci_fetch_row)
-{
- php_oci_fetch_row(INTERNAL_FUNCTION_PARAM_PASSTHRU, OCI_NUM, 1);
-}
-/* }}} */
-
-/* {{{ proto array oci_fetch_assoc( resource stmt )
- Fetch a result row as an associative array */
-PHP_FUNCTION(oci_fetch_assoc)
-{
- php_oci_fetch_row(INTERNAL_FUNCTION_PARAM_PASSTHRU, OCI_ASSOC, 1);
-}
-/* }}} */
-
-/* {{{ proto array oci_fetch_array( resource stmt [, int mode ])
- Fetch a result row as an array */
-PHP_FUNCTION(oci_fetch_array)
-{
- php_oci_fetch_row(INTERNAL_FUNCTION_PARAM_PASSTHRU, OCI_BOTH, 2);
-}
-/* }}} */
-
-/* {{{ proto bool oci_free_statement(resource stmt)
- Free all resources associated with a statement */
-PHP_FUNCTION(oci_free_statement)
-{
- zval **stmt;
- oci_statement *statement;
-
- if (zend_get_parameters_ex(1, &stmt) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- OCI_GET_STMT(statement,stmt);
-
- zend_list_delete(statement->id);
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto bool oci_close(resource conn)
- Disconnect from database */
-PHP_FUNCTION(oci_close)
-{
-#if 0
- this function does nothing any more. server-connections get automagiclly closed on
- request-end. connection handles will "dissappear" as soon as they are no longer
- referenced. as this module makes heavy use of zends reference-counting mechanism
- this is the desired behavior. it has always been a bad idea to close a connection that
- has outstanding transactions. this way we have a nice-clean approach.
- (thies@thieso.net 20000110)
-
- oci_connection *connection;
- zval **conn;
-
- if (zend_get_parameters_ex(1, &conn) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- OCI_GET_CONN(connection,conn);
-
- connection->is_open = 0;
-
- zend_hash_apply(list, (apply_func_t) _stmt_cleanup TSRMLS_CC);
-
- if (zend_list_delete(connection->id) == SUCCESS) {
- RETURN_TRUE;
- } else {
- RETURN_FALSE;
- }
-#endif
-}
-/* }}} */
-
-/* {{{ proto resource oci_new_connect(string user, string pass [, string db])
- Connect to an Oracle database and log on. Returns a new session. */
-PHP_FUNCTION(oci_new_connect)
-{
- oci_do_connect(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0, 1);
-}
-/* }}} */
-
-/* {{{ proto resource oci_connect(string user, string pass [, string db])
- Connect to an Oracle database and log on. Returns a new session. */
-PHP_FUNCTION(oci_connect)
-{
- oci_do_connect(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0, 0);
-}
-/* }}} */
-
-/* {{{ proto resource oci_pconnect(string user, string pass [, string db])
- Connect to an Oracle database using a persistent connection and log on. Returns a new session. */
-PHP_FUNCTION(oci_pconnect)
-{
- oci_do_connect(INTERNAL_FUNCTION_PARAM_PASSTHRU,1,0);
-}
-/* }}} */
-
-/* {{{ proto array oci_error([resource stmt|conn|global])
- Return the last error of stmt|conn|global. If no error happened returns false. */
-PHP_FUNCTION(oci_error)
-{
- zval **arg;
- oci_statement *statement;
- oci_connection *connection;
- text errbuf[512];
- sb4 errcode = 0;
- sword error = 0;
- dvoid *errh = NULL;
-#ifdef HAVE_OCI8_ATTR_STATEMENT
- ub2 errorofs = 0;
- text *sqltext = NULL;
-#endif
-
- if (zend_get_parameters_ex(1, &arg) == SUCCESS) {
- statement = (oci_statement *) zend_fetch_resource(arg TSRMLS_CC, -1, NULL, NULL, 1, le_stmt);
- if (statement) {
- errh = statement->pError;
- error = statement->error;
-
-#ifdef HAVE_OCI8_ATTR_STATEMENT
- CALL_OCI_RETURN(statement->error,
- OCIAttrGet(
- (dvoid *)statement->pStmt,
- OCI_HTYPE_STMT,
- (text *) &sqltext,
- (ub4 *)0,
- OCI_ATTR_STATEMENT,
- statement->pError
- )
- );
-
- CALL_OCI_RETURN(statement->error,
- OCIAttrGet(
- (dvoid *)statement->pStmt,
- OCI_HTYPE_STMT,
- (ub2 *)&errorofs,
- (ub4 *)0,
- OCI_ATTR_PARSE_ERROR_OFFSET,
- statement->pError
- )
- );
-#endif
-
- } else {
- connection = (oci_connection *) zend_fetch_resource(arg TSRMLS_CC, -1, NULL, NULL, 1, le_conn);
- if (connection) {
- errh = connection->pError;
- error = connection->error;
- }
- }
- } else {
- errh = OCI(pError);
- error = OCI(error);
- }
-
- if (!error) { /* no error set in the handle */
- RETURN_FALSE;
- }
-
- if (!errh) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "OCIError: unable to find Error handle");
- RETURN_FALSE;
- }
-
- CALL_OCI(
- OCIErrorGet(
- errh,
- 1,
- NULL,
- &errcode,
- errbuf,
- (ub4) sizeof(errbuf),
- (ub4) OCI_HTYPE_ERROR
- )
- );
-
- if (errcode) {
- array_init(return_value);
- add_assoc_long(return_value, "code", errcode);
- add_assoc_string(return_value, "message", (char*) errbuf, 1);
-#ifdef HAVE_OCI8_ATTR_STATEMENT
- add_assoc_long(return_value, "offset", errorofs);
- add_assoc_string(return_value, "sqltext", sqltext ? (char *) sqltext : "", 1);
-#endif
- } else {
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-/* {{{ proto int oci_num_fields(resource stmt)
- Return the number of result columns in a statement */
-PHP_FUNCTION(oci_num_fields)
-{
- zval **stmt;
- oci_statement *statement;
-
- if (zend_get_parameters_ex(1, &stmt) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- OCI_GET_STMT(statement,stmt);
-
- RETURN_LONG(statement->ncolumns);
-}
-/* }}} */
-
-/* {{{ proto resource oci_parse(resource conn, string query)
- Parse a query and return a statement */
-PHP_FUNCTION(oci_parse)
-{
- zval **conn, **query;
- oci_connection *connection;
- oci_statement *statement;
-
- if (zend_get_parameters_ex(2, &conn, &query) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- OCI_GET_CONN(connection,conn);
-
- convert_to_string_ex(query);
-
- statement = oci_parse(connection,Z_STRVAL_PP(query),Z_STRLEN_PP(query));
-
- if (statement) {
- RETURN_RESOURCE(statement->id);
- } else {
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-/* {{{ proto bool oci_set_prefetch(resource stmt, int prefetch_rows)
- Sets the number of rows to be prefetched on execute to prefetch_rows for stmt */
-PHP_FUNCTION(oci_set_prefetch)
-{
- zval **stmt, **size;
- oci_statement *statement;
-
- if (zend_get_parameters_ex(2, &stmt, &size) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long_ex(size);
-
- OCI_GET_STMT(statement,stmt);
-
- oci_setprefetch(statement,Z_LVAL_PP(size));
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto bool oci_password_change(resource conn, string username, string old_password, string new_password)
- Changes the password of an account */
-PHP_FUNCTION(oci_password_change)
-{
- zval **conn, **user_param, **pass_old_param, **pass_new_param;
- text *user, *pass_old, *pass_new;
- oci_connection *connection;
-
- /* Disable in Safe Mode */
- if (PG(safe_mode)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "is disabled in Safe Mode");
- RETURN_FALSE;
- }
-
- if (zend_get_parameters_ex(4, &conn, &user_param, &pass_old_param, &pass_new_param) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_string_ex(user_param);
- convert_to_string_ex(pass_old_param);
- convert_to_string_ex(pass_new_param);
-
- user = Z_STRVAL_PP(user_param);
- pass_old = Z_STRVAL_PP(pass_old_param);
- pass_new = Z_STRVAL_PP(pass_new_param);
-
- OCI_GET_CONN(connection, conn);
-
- CALL_OCI_RETURN(connection->error,
- OCIPasswordChange(
- connection->pServiceContext,
- connection->pError,
- user,
- strlen(user)+1,
- pass_old,
- strlen(pass_old)+1,
- pass_new,
- strlen(pass_new)+1,
- OCI_DEFAULT
- )
- );
-
- if (connection->error == OCI_SUCCESS) {
- RETURN_TRUE;
- } else {
- oci_error(connection->pError, "OCIPasswordChange", connection->error);
- oci_handle_error(connection, connection->error);
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-/* {{{ proto resource oci_new_cursor(resource conn)
- Return a new cursor (Statement-Handle) - use this to bind ref-cursors! */
-PHP_FUNCTION(oci_new_cursor)
-{
- zval **conn;
- oci_connection *connection;
- oci_statement *statement;
-
- if (zend_get_parameters_ex(1, &conn) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- OCI_GET_CONN(connection,conn);
-
- statement = oci_parse(connection,0,0);
-
- RETURN_RESOURCE(statement->id);
-}
-/* }}} */
-
-/* {{{ proto string oci_result(resource stmt, mixed column)
- Return a single column of result data */
-PHP_FUNCTION(oci_result)
-{
- zval **stmt, **col;
- oci_statement *statement;
- oci_out_column *outcol = NULL;
-
- if (zend_get_parameters_ex(2, &stmt, &col) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- OCI_GET_STMT(statement,stmt);
-
- outcol = oci_get_col(statement, -1, col);
-
- if (outcol == NULL) {
- RETURN_FALSE;
- }
-
- _oci_make_zval(return_value,statement,outcol, "OCIResult",0 TSRMLS_CC);
-}
-/* }}} */
-
-/* {{{ proto string oci_server_version(resource conn)
- Return a string containing server version information */
-PHP_FUNCTION(oci_server_version)
-{
- oci_connection *connection;
- zval **conn;
- char version[256];
-
- if (zend_get_parameters_ex(1, &conn) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- OCI_GET_CONN(connection,conn);
-
- CALL_OCI_RETURN(connection->error,
- OCIServerVersion(
- connection->pServiceContext,
- connection->pError,
- (text*)version,
- sizeof(version),
- OCI_HTYPE_SVCCTX
- )
- );
-
- if (connection->error != OCI_SUCCESS) {
- oci_error(connection->pError, "OCIServerVersion", connection->error);
- oci_handle_error(connection, connection->error);
- RETURN_FALSE;
- }
-
- RETURN_STRING(version,1);
-}
-/* }}} */
-
-/* {{{ proto string oci_statement_type(resource stmt)
- Return the query type of an OCI statement */
-/* XXX it would be better with a general interface to OCIAttrGet() */
-PHP_FUNCTION(oci_statement_type)
-{
- zval **stmt;
- oci_statement *statement;
- ub2 stmttype;
-
- if (zend_get_parameters_ex(1, &stmt) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- OCI_GET_STMT(statement,stmt);
-
- CALL_OCI_RETURN(statement->error,
- OCIAttrGet(
- (dvoid *)statement->pStmt,
- OCI_HTYPE_STMT,
- (ub2 *)&stmttype,
- (ub4 *)0,
- OCI_ATTR_STMT_TYPE,
- statement->pError
- )
- );
-
- if (statement->error != OCI_SUCCESS) {
- oci_error(statement->pError, "OCIStatementType", statement->error);
- oci_handle_error(statement->conn, statement->error);
- RETURN_FALSE;
- }
-
- switch (stmttype) {
- case OCI_STMT_SELECT:
- RETVAL_STRING("SELECT",1);
- break;
- case OCI_STMT_UPDATE:
- RETVAL_STRING("UPDATE",1);
- break;
- case OCI_STMT_DELETE:
- RETVAL_STRING("DELETE",1);
- break;
- case OCI_STMT_INSERT:
- RETVAL_STRING("INSERT",1);
- break;
- case OCI_STMT_CREATE:
- RETVAL_STRING("CREATE",1);
- break;
- case OCI_STMT_DROP:
- RETVAL_STRING("DROP",1);
- break;
- case OCI_STMT_ALTER:
- RETVAL_STRING("ALTER",1);
- break;
- case OCI_STMT_BEGIN:
- RETVAL_STRING("BEGIN",1);
- break;
- case OCI_STMT_DECLARE:
- RETVAL_STRING("DECLARE",1);
- break;
- default:
- RETVAL_STRING("UNKNOWN",1);
- }
-}
-/* }}} */
-
-/* {{{ proto int oci_num_rows(resource stmt)
- Return the row count of an OCI statement */
-PHP_FUNCTION(oci_num_rows)
-{
- zval **stmt;
- oci_statement *statement;
- ub4 rowcount;
-
- if (zend_get_parameters_ex(1, &stmt) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- OCI_GET_STMT(statement,stmt);
-
- CALL_OCI_RETURN(statement->error,
- OCIAttrGet(
- (dvoid *)statement->pStmt,
- OCI_HTYPE_STMT,
- (ub2 *)&rowcount,
- (ub4 *)0,
- OCI_ATTR_ROW_COUNT,
- statement->pError
- )
- );
-
- if (statement->error != OCI_SUCCESS) {
- oci_error(statement->pError, "OCIRowCount", statement->error);
- oci_handle_error(statement->conn, statement->error);
- RETURN_FALSE;
- }
-
- RETURN_LONG(rowcount);
-}
-/* }}} */
-
-#ifdef PHP_OCI8_HAVE_COLLECTIONS
-/* {{{ oci_get_coll() */
-static oci_collection *oci_get_coll(int ind TSRMLS_DC)
-{
- oci_collection *collection;
- int actual_resource_type;
-
- collection = (oci_collection *) zend_list_find(ind, &actual_resource_type);
-
- if (collection && (actual_resource_type == le_coll)) {
- return collection;
- } else {
- return (oci_collection *) NULL;
- }
-}
-/* }}} */
-
-/* {{{ proto bool oci_free_collection()
- Deletes collection object*/
-PHP_FUNCTION(oci_free_collection)
-{
- zval *id;
- int inx;
- oci_collection *coll;
- oci_connection *connection;
-
- if ((id = getThis()) != 0) {
- inx = _oci_get_ocicoll(id,&coll TSRMLS_CC);
- if (inx) {
- /*
- * Do we need to free the object?
- *
- */
- connection = coll->conn;
- oci_debug("oci_free_collection: coll=%d",inx);
-
- CALL_OCI_RETURN(connection->error,
- OCIObjectFree(
- connection->session->pEnv,
- connection->pError,
- (dvoid *)coll->coll,
- (ub2)(OCI_OBJECTFREE_FORCE)
- )
- );
-
- if (connection->error) {
- oci_error(connection->pError, "OCIObjectFree", connection->error);
- RETURN_FALSE;
- }
-
- zend_list_delete(inx);
- RETURN_TRUE;
- }
- }
-
- RETURN_FALSE;
-}
-/* }}} */
-
-/* {{{ proto bool oci_collection_append(string value)
- Append an object to the collection */
-PHP_FUNCTION(oci_collection_append)
-{
- zval *id, **arg;
- oci_connection *connection;
- oci_collection *coll;
- OCINumber num;
- OCIString *ocistr = (OCIString *)0;
- OCIInd new_ind = OCI_IND_NOTNULL;
- OCIInd null_ind = OCI_IND_NULL;
- OCIDate dt;
- int inx;
- double ndx;
-
- if ((id = getThis()) != 0) {
- if ((inx = _oci_get_ocicoll(id,&coll TSRMLS_CC)) == 0) {
- RETURN_FALSE;
- }
-
- connection = coll->conn;
- if (zend_get_parameters_ex(1, &arg) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- /*
- * Handle NULLS. For consistency with the rest of the OCI8 library, when
- * a value passed in is a 0 length string, consider it a null
- */
- convert_to_string_ex(arg);
- if (Z_STRLEN_PP(arg) == 0) {
- CALL_OCI_RETURN(connection->error,
- OCICollAppend(
- connection->session->pEnv,
- connection->pError,
- (dvoid *)0,
- &null_ind,
- coll->coll
- )
- );
- if (connection->error) {
- oci_error(connection->pError, "OCICollAppend - NULL", connection->error);
- RETURN_FALSE;
- }
-
- RETURN_TRUE;
- }
-
- switch(coll->element_typecode) {
- case OCI_TYPECODE_DATE:
- convert_to_string_ex(arg);
-
- CALL_OCI_RETURN(connection->error,
- OCIDateFromText(
- connection->pError,
- Z_STRVAL_PP(arg),
- Z_STRLEN_PP(arg),
- 0,
- 0,
- 0,
- 0,
- &dt
- )
- );
-
- if (connection->error) {
- oci_error(connection->pError, "OCIDateFromText", connection->error);
- RETURN_FALSE;
- }
-
- CALL_OCI_RETURN(connection->error,
- OCICollAppend(
- connection->session->pEnv,
- connection->pError,
- (dvoid *) &dt,
- (dvoid *) &new_ind,
- (OCIColl *) coll->coll
- )
- );
-
- if (connection->error) {
- oci_error(connection->pError, "OCICollAppend", connection->error);
- RETURN_FALSE;
- }
- RETURN_TRUE;
- break;
- case OCI_TYPECODE_VARCHAR2 :
- convert_to_string_ex(arg);
-
- CALL_OCI_RETURN(connection->error,
- OCIStringAssignText(
- connection->session->pEnv,
- connection->pError,
- Z_STRVAL_PP(arg),
- Z_STRLEN_PP(arg),
- &ocistr
- )
- );
-
- if (connection->error) {
- oci_error(connection->pError, "OCIStringAssignText", connection->error);
- RETURN_FALSE;
- }
-
- CALL_OCI_RETURN(connection->error,
- OCICollAppend(
- connection->session->pEnv,
- connection->pError,
- (dvoid *) ocistr,
- (dvoid *) &new_ind,
- (OCIColl *) coll->coll
- )
- );
-
- if (connection->error) {
- oci_error(connection->pError, "OCICollAppend", connection->error);
- RETURN_FALSE;
- }
- RETURN_TRUE;
- break;
- case OCI_TYPECODE_UNSIGNED16 : /* UNSIGNED SHORT */
- case OCI_TYPECODE_UNSIGNED32 : /* UNSIGNED LONG */
- case OCI_TYPECODE_REAL : /* REAL */
- case OCI_TYPECODE_DOUBLE : /* DOUBLE */
- case OCI_TYPECODE_INTEGER : /* INT */
- case OCI_TYPECODE_SIGNED16 : /* SHORT */
- case OCI_TYPECODE_SIGNED32 : /* LONG */
- case OCI_TYPECODE_DECIMAL : /* DECIMAL */
- case OCI_TYPECODE_FLOAT : /* FLOAT */
- case OCI_TYPECODE_NUMBER : /* NUMBER */
- case OCI_TYPECODE_SMALLINT : /* SMALLINT */
- convert_to_double_ex(arg);
- ndx = (double)Z_DVAL_PP(arg);
-
- CALL_OCI_RETURN(connection->error,
- OCINumberFromReal(
- connection->pError,
- &ndx,
- sizeof(double),
- &num
- )
- );
-
- if (connection->error) {
- oci_error(connection->pError, "OCINumberFromReal", connection->error);
- RETURN_FALSE;
- }
-
- CALL_OCI_RETURN(connection->error,
- OCICollAppend(
- connection->session->pEnv,
- connection->pError,
- (dvoid *) &num,
- (dvoid *) &new_ind,
- (OCIColl *) coll->coll
- )
- );
-
- RETURN_TRUE;
- break;
- default:
- php_error_docref(NULL TSRMLS_CC, E_NOTICE, "Unknown or unsupported type of element");
- RETURN_FALSE;
- break;
- }
- }
-
- php_error_docref(NULL TSRMLS_CC, E_NOTICE, "oci_collection_append() should not be called like this. Use $collection->append($element) to append an element to the collection");
- RETURN_FALSE;
-}
-/* }}} */
-
-/* {{{ proto string oci_collection_element_get(int ndx)
- Retrieve the value at collection index ndx */
-PHP_FUNCTION(oci_collection_element_get)
-{
- zval *id,**arg;
- oci_connection *connection;
- oci_collection *coll;
- ub4 ndx;
- int inx;
- dvoid *elem;
- OCIInd *elemind;
- boolean exists;
- OCIString *ocistr = (OCIString *)0;
- text *str;
- char buff[1024];
- int len;
- double dnum;
-
- if ((id = getThis()) != 0) {
- if ((inx = _oci_get_ocicoll(id,&coll TSRMLS_CC)) == 0) {
- RETURN_FALSE;
- }
- if (zend_get_parameters_ex(1, &arg) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long_ex(arg);
- ndx = Z_LVAL_PP(arg);
-
- connection = coll->conn;
-
- CALL_OCI_RETURN(connection->error,
- OCICollGetElem(
- connection->session->pEnv,
- connection->pError,
- coll->coll,
- ndx,
- &exists,
- &elem,
- (dvoid **)&elemind
- )
- );
-
- if (connection->error) {
- oci_error(connection->pError, "OCICollGetElem", connection->error);
- RETURN_NULL();
- }
-
- /* Return false if value does not exist at that location */
- if (exists == 0) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "OCICollGetElem - Invalid index %d", ndx);
- RETURN_FALSE;
- }
-
- /* Return null if the value is null */
- if (*elemind == OCI_IND_NULL) {
- RETURN_NULL();
- }
-
- switch (coll->element_typecode) {
- case OCI_TYPECODE_DATE:
- len = 1024;
- CALL_OCI(
- OCIDateToText(
- connection->pError,
- elem,
- 0, /* fmt */
- 0, /* fmt_length */
- 0, /* lang_name */
- 0, /* lang_length */
- &len,
- buff
- )
- );
-
- RETURN_STRINGL(buff,len,1);
- case OCI_TYPECODE_VARCHAR2 :
- ocistr = *(OCIString **)elem;
- str = OCIStringPtr(connection->session->pEnv,ocistr); /* XXX not protected against recursion! */
- RETURN_STRINGL(str,strlen(str),1);
- break;
- case OCI_TYPECODE_UNSIGNED16 : /* UNSIGNED SHORT */
- case OCI_TYPECODE_UNSIGNED32 : /* UNSIGNED LONG */
- case OCI_TYPECODE_REAL : /* REAL */
- case OCI_TYPECODE_DOUBLE : /* DOUBLE */
- case OCI_TYPECODE_INTEGER : /* INT */
- case OCI_TYPECODE_SIGNED16 : /* SHORT */
- case OCI_TYPECODE_SIGNED32 : /* LONG */
- case OCI_TYPECODE_DECIMAL : /* DECIMAL */
- case OCI_TYPECODE_FLOAT : /* FLOAT */
- case OCI_TYPECODE_NUMBER : /* NUMBER */
- case OCI_TYPECODE_SMALLINT : /* SMALLINT */
- CALL_OCI_RETURN(connection->error,
- OCINumberToReal(
- connection->pError,
- (CONST OCINumber *) elem,
- (uword) sizeof(dnum),
- (dvoid *) &dnum
- )
- );
-
- if (connection->error) {
- oci_error(connection->pError, "OCINumberToReal", connection->error);
- RETURN_FALSE;
- }
- RETURN_DOUBLE(dnum);
- break;
- default:
- php_error_docref(NULL TSRMLS_CC, E_NOTICE, "Unknown or unsupported type of element");
- RETURN_FALSE;
- break;
- }
- }
-
- php_error_docref(NULL TSRMLS_CC, E_NOTICE, "oci_collection_element_get() should not be called like this. Use $collection->getelem($index) to get an element of the collection with the given index");
- RETURN_FALSE;
-}
-/* }}} */
-
-/* {{{ proto bool oci_collection_assign(object from)
- Assign a collection from another existing collection */
-PHP_FUNCTION(oci_collection_assign)
-{
- zval *id,**from;
- oci_connection *connection;
- oci_collection *coll,*from_coll;
- int inx;
-
- if ((id = getThis()) != 0) {
- if ((inx = _oci_get_ocicoll(id,&coll TSRMLS_CC)) == 0) {
- RETURN_FALSE;
- }
-
- if (zend_get_parameters_ex(1, &from) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- if ((inx = _oci_get_ocicoll(*from,&from_coll TSRMLS_CC)) == 0) {
- RETURN_FALSE;
- }
-
- connection = coll->conn;
-
- CALL_OCI_RETURN(connection->error,
- OCICollAssign(
- connection->session->pEnv,
- connection->pError,
- from_coll->coll,
- coll->coll
- )
- );
-
- if (connection->error) {
- oci_error(connection->pError, "OCICollAssignElem", connection->error);
- RETURN_FALSE;
- }
- RETURN_TRUE;
- }
-
- php_error_docref(NULL TSRMLS_CC, E_NOTICE, "oci_collection_assign() should not be called like this. Use $collection->assign($collection_value) to assign value to the collection");
- RETURN_FALSE;
-}
-/* }}} */
-
-/* {{{ proto bool oci_collection_element_assign(int index, string val)
- Assign element val to collection at index ndx */
-PHP_FUNCTION(oci_collection_element_assign)
-{
- zval *id,**index,**val;
- oci_connection *connection;
- oci_collection *coll;
- OCINumber num;
- OCIInd new_ind = OCI_IND_NOTNULL;
- OCIInd null_ind = OCI_IND_NULL;
- ub4 ndx;
- int inx;
- OCIString *ocistr = (OCIString *)0;
- OCIDate dt;
- double dnum;
-
- if ((id = getThis()) != 0) {
- if ((inx = _oci_get_ocicoll(id,&coll TSRMLS_CC)) == 0) {
- RETURN_FALSE;
- }
-
- if (zend_get_parameters_ex(2, &index,&val) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long_ex(index);
- ndx = Z_LVAL_PP(index);
-
- connection = coll->conn;
-
- if (connection->error) {
- oci_error(connection->pError, "OCICollAssignElem", connection->error);
- RETURN_FALSE;
- }
-
- /*
- * Handle NULLs. For consistency with the rest of the OCI8 library, when
- * a value passed in is a 0 length string, consider it a null
- */
- convert_to_string_ex(val);
-
- if (Z_STRLEN_PP(val) == 0) {
- CALL_OCI_RETURN(connection->error,
- OCICollAssignElem(
- connection->session->pEnv,
- connection->pError,
- ndx,
- (dvoid *)0,
- &null_ind,
- coll->coll
- )
- );
- if (connection->error) {
- oci_error(connection->pError, "OCICollAssignElem - NULL", connection->error);
- RETURN_FALSE;
- }
-
- RETURN_TRUE;
- }
-
- switch (coll->element_typecode) {
- case OCI_TYPECODE_DATE:
- convert_to_string_ex(val);
- CALL_OCI_RETURN(connection->error,
- OCIDateFromText(
- connection->pError,
- Z_STRVAL_PP(val),
- Z_STRLEN_PP(val),
- 0,
- 0,
- 0,
- 0,
- &dt
- )
- );
-
- if (connection->error) {
- oci_error(connection->pError, "OCIDateFromText", connection->error);
- RETURN_FALSE;
- }
-
- CALL_OCI_RETURN(connection->error,
- OCICollAssignElem(
- connection->session->pEnv,
- connection->pError,
- ndx,
- (dvoid *)&dt,
- &new_ind,
- coll->coll
- )
- );
-
- if (connection->error) {
- oci_error(connection->pError, "OCICollAssignElem", connection->error);
- RETURN_FALSE;
- }
- break;
- case OCI_TYPECODE_VARCHAR2 :
- convert_to_string_ex(val);
-
- CALL_OCI_RETURN(connection->error,
- OCIStringAssignText(
- connection->session->pEnv,
- connection->pError,
- Z_STRVAL_PP(val),
- Z_STRLEN_PP(val),
- &ocistr
- )
- );
-
- if (connection->error) {
- oci_error(connection->pError, "OCIStringAssignText", connection->error);
- RETURN_FALSE;
- }
-
- CALL_OCI_RETURN(connection->error,
- OCICollAssignElem(
- connection->session->pEnv,
- connection->pError,
- ndx,
- (dvoid *)ocistr,
- &new_ind,
- coll->coll
- )
- );
-
- if (connection->error) {
- oci_error(connection->pError, "OCICollAssignElem", connection->error);
- RETURN_FALSE;
- }
- RETURN_TRUE;
- break;
- case OCI_TYPECODE_UNSIGNED16 : /* UNSIGNED SHORT */
- case OCI_TYPECODE_UNSIGNED32 : /* UNSIGNED LONG */
- case OCI_TYPECODE_REAL : /* REAL */
- case OCI_TYPECODE_DOUBLE : /* DOUBLE */
- case OCI_TYPECODE_INTEGER : /* INT */
- case OCI_TYPECODE_SIGNED16 : /* SHORT */
- case OCI_TYPECODE_SIGNED32 : /* LONG */
- case OCI_TYPECODE_DECIMAL : /* DECIMAL */
- case OCI_TYPECODE_FLOAT : /* FLOAT */
- case OCI_TYPECODE_NUMBER : /* NUMBER */
- case OCI_TYPECODE_SMALLINT : /* SMALLINT */
- convert_to_double_ex(val);
- dnum = (double)Z_DVAL_PP(val);
-
- CALL_OCI_RETURN(connection->error,
- OCINumberFromReal(
- connection->pError,
- &dnum,
- sizeof(double),
- &num
- )
- );
-
- if (connection->error) {
- oci_error(connection->pError, "OCINumberFromReal", connection->error);
- RETURN_FALSE;
- }
-
- CALL_OCI_RETURN(connection->error,
- OCICollAssignElem(
- connection->session->pEnv,
- connection->pError,
- ndx,
- (dvoid *)&num,
- &new_ind,
- coll->coll
- )
- );
-
- if (connection->error) {
- oci_error(connection->pError, "OCICollAssignElem", connection->error);
- RETURN_FALSE;
- }
- RETURN_TRUE;
- break;
- }
- }
-
- php_error_docref(NULL TSRMLS_CC, E_NOTICE, "oci_collection_element_assign() should not be called like this. Use $collection->assignelem($index, $value) to assign value to an element of the collection");
- RETURN_FALSE;
-}
-/* }}} */
-
-/* {{{ proto int oci_collection_size()
- Return the size of a collection */
-PHP_FUNCTION(oci_collection_size)
-{
- zval *id;
- oci_connection *connection;
- oci_collection *coll;
- sb4 sz;
- int inx;
-
- if ((id = getThis()) != 0) {
- if ((inx = _oci_get_ocicoll(id,&coll TSRMLS_CC)) == 0) {
- RETURN_FALSE;
- }
- connection = coll->conn;
-
- CALL_OCI_RETURN(connection->error,
- OCICollSize(
- connection->session->pEnv,
- coll->conn->pError,
- coll->coll,
- &sz
- )
- );
-
- if (connection->error) {
- oci_error(connection->pError, "OCICollSize", connection->error);
- RETURN_FALSE;
- }
-
- RETURN_LONG(sz);
- }
-
- php_error_docref(NULL TSRMLS_CC, E_NOTICE, "oci_collection_size() should not be called like this. Use $collection->size() to get size of the collection");
- RETURN_FALSE;
-}
-/* }}} */
-
-/* {{{ proto int oci_collection_max()
- Return the max value of a collection. For a varray this is the maximum length of the array */
-PHP_FUNCTION(oci_collection_max)
-{
- zval *id;
- oci_collection *coll;
- sb4 sz;
- int inx;
-
- if ((id = getThis()) != 0) {
- if ((inx = _oci_get_ocicoll(id,&coll TSRMLS_CC)) == 0) {
- RETURN_FALSE;
- }
- sz = OCICollMax(OCI(pEnv),coll->coll); /* XXX not protected against recursion */
-
- RETURN_LONG(sz);
- }
-
- php_error_docref(NULL TSRMLS_CC, E_NOTICE, "oci_collection_max() should not be called like this. Use $collection->max() to get maximum number of elements in the collection");
- RETURN_FALSE;
-}
-/* }}} */
-
-/* {{{ proto bool oci_collection_trim(int num)
- Trim num elements from the end of a collection */
-PHP_FUNCTION(oci_collection_trim)
-{
- zval *id,**arg;
- oci_collection *coll;
- int inx;
-
- if ((id = getThis()) != 0) {
- if ((inx = _oci_get_ocicoll(id,&coll TSRMLS_CC)) == 0) {
- RETURN_FALSE;
- }
- if (zend_get_parameters_ex(1, &arg) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long_ex(arg);
-
- CALL_OCI_RETURN(coll->conn->error,
- OCICollTrim(
- OCI(pEnv),
- coll->conn->pError,
- Z_LVAL_PP(arg),
- coll->coll
- )
- );
-
- if (coll->conn->error) {
- oci_error(coll->conn->pError, "OCICollTrim", coll->conn->error);
- RETURN_FALSE;
- }
- RETURN_TRUE;
- }
-
- php_error_docref(NULL TSRMLS_CC, E_NOTICE, "oci_collection_trim() should not be called like this. Use $collection->trim($length) to trim collection to the given length");
- RETURN_FALSE;
-}
-/* }}} */
-
-/* {{{ proto object oci_new_collection(resource connection, string tdo [, string schema])
- Initialize a new collection */
-PHP_FUNCTION(oci_new_collection)
-{
- dvoid *dschp1;
- dvoid *parmp1;
- dvoid *parmp2;
- zval **conn, **tdo, **schema;
- oci_connection *connection;
- oci_collection *coll;
- int ac = ZEND_NUM_ARGS();
-
- if (ac < 2 || ac > 3 || zend_get_parameters_ex(ac, &conn, &tdo, &schema) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_string_ex(tdo);
-
- if (ac == 3) {
- convert_to_string_ex(schema);
- }
-
- coll = emalloc(sizeof(oci_collection));
-
- OCI_GET_CONN(connection,conn);
-
- coll->conn = connection;
- coll->id = zend_list_insert(coll,le_coll);
- zend_list_addref(connection->id);
-
- CALL_OCI_RETURN(connection->error,
- OCITypeByName(
- connection->session->pEnv,
- connection->pError,
- connection->pServiceContext,
- ac == 3 ? (text *) Z_STRVAL_PP(schema) : (text *) 0,
- ac == 3 ? (ub4) Z_STRLEN_PP(schema) : (ub4) 0,
- (text *) Z_STRVAL_PP(tdo),
- (ub4) Z_STRLEN_PP(tdo),
- (CONST text *) 0,
- (ub4) 0,
- OCI_DURATION_SESSION,
- OCI_TYPEGET_ALL,
- &(coll->tdo)
- )
- );
-
- if (connection->error) {
- oci_error(connection->pError, "OCITypeByName", connection->error);
- RETURN_FALSE;
- }
-
- CALL_OCI_RETURN(connection->error,
- OCIHandleAlloc(
- connection->session->pEnv,
- (dvoid **) &dschp1,
- (ub4) OCI_HTYPE_DESCRIBE,
- (size_t) 0,
- (dvoid **) 0
- )
- );
-
- if (connection->error) {
- oci_error(connection->pError, "OCI_HTYPE_DESCRIBE", connection->error);
- RETURN_FALSE;
- }
-
- CALL_OCI_RETURN(connection->error,
- OCIDescribeAny(
- connection->pServiceContext,
- connection->pError,
- (dvoid *) coll->tdo,
- (ub4) 0,
- OCI_OTYPE_PTR,
- (ub1)1,
- (ub1) OCI_PTYPE_TYPE,
- dschp1
- )
- );
-
- if (connection->error) {
- oci_error(connection->pError, "OCI_OTYPE_PTR", connection->error);
- RETURN_FALSE;
- }
-
- CALL_OCI_RETURN(connection->error,
- OCIAttrGet(
- (dvoid *) dschp1,
- (ub4) OCI_HTYPE_DESCRIBE,
- (dvoid *)&parmp1,
- (ub4 *)0,
- (ub4)OCI_ATTR_PARAM,
- connection->pError
- )
- );
-
- if (connection->error) {
- oci_error(connection->pError, "OCI_ATTR_PARAM", connection->error);
- RETURN_FALSE;
- }
-
- /* get the collection type code of the attribute */
-
- CALL_OCI_RETURN(connection->error,
- OCIAttrGet(
- (dvoid*) parmp1,
- (ub4) OCI_DTYPE_PARAM,
- (dvoid*) &(coll->coll_typecode),
- (ub4 *) 0,
- (ub4) OCI_ATTR_COLLECTION_TYPECODE,
- connection->pError
- )
- );
-
- if (connection->error) {
- oci_error(connection->pError, "OCI_ATTR_COLLECTION_TYPECODE", connection->error);
- RETURN_FALSE;
- }
-
- switch(coll->coll_typecode) {
- case OCI_TYPECODE_TABLE:
- case OCI_TYPECODE_VARRAY:
- CALL_OCI_RETURN(connection->error,
- OCIAttrGet(
- (dvoid*) parmp1,
- (ub4) OCI_DTYPE_PARAM,
- (dvoid*) &parmp2,
- (ub4 *) 0,
- (ub4) OCI_ATTR_COLLECTION_ELEMENT,
- connection->pError
- )
- );
-
- if (connection->error) {
- oci_error(connection->pError, "OCI_ATTR_COLLECTION_ELEMENT", connection->error);
- RETURN_FALSE;
- }
-
- CALL_OCI_RETURN(connection->error,
- OCIAttrGet(
- (dvoid*) parmp2,
- (ub4) OCI_DTYPE_PARAM,
- (dvoid*) &(coll->elem_ref),
- (ub4 *) 0,
- (ub4) OCI_ATTR_REF_TDO,
- connection->pError
- )
- );
-
- if (connection->error) {
- oci_error(connection->pError, "OCI_ATTR_REF_TDO", connection->error);
- RETURN_FALSE;
- }
-
- CALL_OCI_RETURN(connection->error,
- OCITypeByRef(
- connection->session->pEnv,
- connection->pError,
- coll->elem_ref,
- OCI_DURATION_SESSION,
- OCI_TYPEGET_HEADER,
- &(coll->element_type)
- )
- );
-
- if (connection->error) {
- oci_error(connection->pError, "OCI_TYPEGET_HEADER", connection->error);
- RETURN_FALSE;
- }
-
- CALL_OCI_RETURN(connection->error,
- OCIAttrGet(
- (dvoid*) parmp2,
- (ub4) OCI_DTYPE_PARAM,
- (dvoid*) &(coll->element_typecode),
- (ub4 *) 0,
- (ub4) OCI_ATTR_TYPECODE,
- connection->pError
- )
- );
-
- if (connection->error) {
- oci_error(connection->pError, "OCI_ATTR_TYPECODE", connection->error);
- RETURN_FALSE;
- }
- break;
- default:
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "OCINewCollection - Unknown Type %d", coll->coll_typecode);
- break;
- }
-
- /* Create object to hold return table */
- CALL_OCI_RETURN(connection->error,
- OCIObjectNew(
- connection->session->pEnv,
- connection->pError,
- connection->pServiceContext,
- OCI_TYPECODE_TABLE,
- coll->tdo,
- (dvoid *)0,
- OCI_DURATION_DEFAULT,
- TRUE,
- (dvoid **) &(coll->coll)
- )
- );
-
- if (connection->error) {
- oci_error(connection->pError, "OCIObjectNew", connection->error);
- RETURN_FALSE;
- }
-
- object_init_ex(return_value, oci_coll_class_entry_ptr);
- add_property_resource(return_value, "collection",coll->id);
-}
-/* }}} */
-#endif
-
-#endif /* HAVE_OCI8 */
-
-/*
- * 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/oci8/oci8.dsp b/ext/oci8/oci8.dsp
deleted file mode 100644
index 73c05346e3..0000000000
--- a/ext/oci8/oci8.dsp
+++ /dev/null
@@ -1,113 +0,0 @@
-# Microsoft Developer Studio Project File - Name="oci8" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=oci8 - Win32 Release_TS
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "oci8.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "oci8.mak" CFG="oci8 - Win32 Release_TS"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "oci8 - Win32 Release_TS" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "oci8 - Win32 Debug_TS" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "oci8 - Win32 Release_TS"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release_TS"
-# PROP BASE Intermediate_Dir "Release_TS"
-# PROP BASE Ignore_Export_Lib 0
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release_TS"
-# PROP Intermediate_Dir "Release_TS"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MT /W3 /GX /O2 /I "..\.." /I "..\..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\..\TSRM" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D ZTS=1 /YX /FD /c
-# ADD CPP /nologo /MD /W3 /GX /O2 /I "..\..\\" /I "..\..\main" /I "..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\TSRM" /I "..\..\..\php_build\oci805\include" /D ZEND_DEBUG=0 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D ZTS=1 /D "ZEND_WIN32" /D "PHP_WIN32" /D HAVE_OCI8=1 /D HAVE_OCI8_TEMP_LOB=1 /D HAVE_OCI8_ATTR_STATEMENT=1 /D COMPILE_DL_OCI8=1 /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x406 /d "NDEBUG"
-# ADD RSC /l 0x406 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib php5ts.lib /nologo /dll /machine:I386
-# ADD LINK32 php5ts.lib oci.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 /out:"..\..\Release_TS/php_oci8.dll" /libpath:"..\..\Release_TS" /libpath:"..\..\..\php_build\oci805\lib" /libpath:"..\..\Release_TS_Inline"
-
-!ELSEIF "$(CFG)" == "oci8 - Win32 Debug_TS"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Debug_TS"
-# PROP BASE Intermediate_Dir "Debug_TS"
-# PROP BASE Ignore_Export_Lib 0
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Debug_TS"
-# PROP Intermediate_Dir "Debug_TS"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MT /W3 /GX /O2 /I "..\.." /I "..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\TSRM" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D ZTS=1 /YX /FD /c
-# ADD CPP /nologo /MDd /W3 /GX /ZI /Od /I "..\..\\" /I "..\..\main" /I "..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\TSRM" /I "..\..\..\php_build\include\oci805" /D ZEND_DEBUG=1 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "FTP_EXPORTS" /D ZTS=1 /D "ZEND_WIN32" /D "PHP_WIN32" /D HAVE_OCI8=1 /D HAVE_OCI8_TEMP_LOB=1 /D HAVE_OCI8_ATTR_STATEMENT=1 /D COMPILE_DL_OCI8=1 /FR /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x406 /d "NDEBUG"
-# ADD RSC /l 0x406 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib php5ts.lib /nologo /dll /machine:I386
-# ADD LINK32 php5ts_debug.lib oci.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 /out:"..\..\Debug_TS/php_oci8.dll" /libpath:"..\..\Debug_TS" /libpath:"..\..\..\php_build\lib\oci805"
-
-!ENDIF
-
-# Begin Target
-
-# Name "oci8 - Win32 Release_TS"
-# Name "oci8 - Win32 Debug_TS"
-# Begin Group "Source Files"
-
-# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
-# Begin Source File
-
-SOURCE=.\oci8.c
-# End Source File
-# End Group
-# Begin Group "Header Files"
-
-# PROP Default_Filter "h;hpp;hxx;hm;inl"
-# Begin Source File
-
-SOURCE=.\php_oci8.h
-# End Source File
-# End Group
-# Begin Group "Resource Files"
-
-# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
-# End Group
-# End Target
-# End Project
diff --git a/ext/oci8/package.xml b/ext/oci8/package.xml
deleted file mode 100644
index b0b168a028..0000000000
--- a/ext/oci8/package.xml
+++ /dev/null
@@ -1,85 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1" ?>
-<!DOCTYPE package SYSTEM "../pear/package.dtd">
-<package>
- <name>oci8</name>
- <summary>Oracle 8 call interface functions</summary>
- <maintainers>
- <maintainer>
- <user>tony2001</user>
- <name>Antony Dovgal</name>
- <email>tony2001@php.net</email>
- <role>developer</role>
- </maintainer>
- <maintainer>
- <user>ssb</user>
- <name>Stig Bakken</name>
- <email>ssb@php.net</email>
- <role>developer</role>
- </maintainer>
- <maintainer>
- <user>thies</user>
- <name>Thies C. Arntzen</name>
- <email>thies@php.net</email>
- <role>developer</role>
- </maintainer>
- <maintainer>
- <user>asautins</user>
- <name>Andy Sautins</name>
- <email>asautins@php.net</email>
- <role>developer</role>
- </maintainer>
- <maintainer>
- <user>dbenson</user>
- <name>David Benson</name>
- <email>dbenson@php.net</email>
- <role>developer</role>
- </maintainer>
- <maintainer>
- <user>maxim</user>
- <name>Maxim Maletsky</name>
- <email>maxim@php.net</email>
- <role>developer</role>
- </maintainer>
- <maintainer>
- <user>phanto</user>
- <name>Harald Radi</name>
- <email>phanto@php.net</email>
- <role>developer</role>
- </maintainer>
- </maintainers>
- <description>
-These functions allow you to access Oracle database servers using
-the Oracle 8 call interface.
- </description>
- <license>PHP</license>
- <release>
- <state>beta</state>
- <version>5.0.0rc1</version>
- <date>2004-03-19</date>
- <notes>
-package.xml added to support intallation using pear installer
- </notes>
- <configureoptions>
- <configureoption name="with-oci8" default="autodetect" prompt="ORACLE_HOME directory?"/>
- </configureoptions>
- <filelist>
- <file role="doc" name="CREDITS"/>
- <file role="src" name="config.m4"/>
- <file role="src" name="config.w32"/>
- <file role="src" name="oci8.dsp"/>
- <file role="src" name="oci8.c"/>
- <file role="src" name="php_oci8.h"/>
- <file role="test" name="tests/bug26133.phpt"/>
- <file role="test" name="tests/connect.inc"/>
- <file role="test" name="tests/create_table.inc"/>
- <file role="test" name="tests/drop_table.inc"/>
- <file role="test" name="tests/skipif.inc"/>
- </filelist>
- <deps>
- <dep type="php" rel="ge" version="5" />
- </deps>
- </release>
-</package>
-<!--
-vim:et:ts=1:sw=1
--->
diff --git a/ext/oci8/php_oci8.h b/ext/oci8/php_oci8.h
deleted file mode 100644
index 30ea19c718..0000000000
--- a/ext/oci8/php_oci8.h
+++ /dev/null
@@ -1,225 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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. |
- +----------------------------------------------------------------------+
- | Authors: Stig Sæther Bakken <ssb@php.net> |
- | Thies C. Arntzen <thies@thieso.net> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#if HAVE_OCI8
-# ifndef PHP_OCI8_H
-# define PHP_OCI8_H
-# endif
-
-# if (defined(__osf__) && defined(__alpha))
-# ifndef A_OSF
-# define A_OSF
-# endif
-# ifndef OSF1
-# define OSF1
-# endif
-# ifndef _INTRINSICS
-# define _INTRINSICS
-# endif
-# endif /* osf alpha */
-
-#ifdef PHP_WIN32
-#define PHP_OCI_API __declspec(dllexport)
-#else
-#define PHP_OCI_API
-#endif
-
-#if defined(min)
-#undef min
-#endif
-#if defined(max)
-#undef max
-#endif
-
-#include <oci.h>
-
-#define OCI_SEEK_SET 0
-#define OCI_SEEK_CUR 1
-#define OCI_SEEK_END 2
-
-typedef struct {
- int num;
- int persistent;
- int is_open;
- char *dbname;
- OCIServer *pServer;
-#if 0
- OCIFocbkStruct failover;
-#endif
-} oci_server;
-
-typedef struct {
- int num;
- zend_bool persistent;
- zend_bool is_open;
- zend_bool exclusive;
-#if ZTS
- THREAD_T thread;
-#else
- zend_bool thread;
-#endif
- zend_llist *sessions_list;
- oci_server *server;
- OCISession *pSession;
- OCIEnv *pEnv; /* sessions own environment */
- ub2 charsetId; /* sessions used character set (mostly this will be 0, so NLS_LANG will be used. */
-} oci_session;
-
-typedef struct {
- int id;
- int is_open;
- oci_session *session;
- OCISvcCtx *pServiceContext;
- sword error;
- OCIError *pError;
- int needs_commit;
- HashTable *descriptors;
-} oci_connection;
-
-typedef struct {
- int id;
- oci_connection *conn;
- dvoid *ocidescr;
- ub4 type;
- int lob_current_position;
- int lob_size; /* -1 = Lob wasn't initialized yet */
- int buffering; /* 0 - off, 1 - on, 2 - on and buffer was used */
-} oci_descriptor;
-
-typedef struct {
- int id;
- oci_connection *conn;
- OCIType *tdo;
- OCITypeCode coll_typecode;
- OCIRef *elem_ref;
- OCIType *element_type;
- OCITypeCode element_typecode;
- OCIColl *coll;
-} oci_collection;
-
-typedef struct {
- zval *zval;
- text *name;
- ub4 name_len;
- ub4 type;
-} oci_define;
-
-typedef struct {
- int id;
- oci_connection *conn;
- sword error;
- OCIError *pError;
- OCIStmt *pStmt;
- char *last_query;
- HashTable *columns;
- HashTable *binds;
- HashTable *defines;
- int ncolumns;
- int executed;
- int has_data;
- ub2 stmttype;
-} oci_statement;
-
-typedef struct {
- OCIBind *pBind;
- zval *zval;
- dvoid *descr; /* used for binding of LOBS etc */
- OCIStmt *pStmt; /* used for binding REFCURSORs */
- sb2 indicator;
- ub2 retcode;
-} oci_bind;
-
-typedef struct {
- oci_statement *statement;
- OCIDefine *pDefine;
- char *name;
- ub4 name_len;
- ub2 data_type;
- ub2 data_size;
- ub4 storage_size4;
- sb2 indicator;
- ub2 retcode;
- ub2 retlen;
- ub4 retlen4;
- ub2 is_descr;
- ub2 is_cursor;
- int descr;
- oci_statement *pstmt;
- int stmtid;
- int descid;
- void *data;
- oci_define *define;
- int piecewise;
- ub4 cb_retlen;
- ub2 scale;
- ub2 precision;
-} oci_out_column;
-
-typedef struct {
- sword error;
- OCIError *pError;
-
- /*
- char *default_username;
- char *default_password;
- char *default_dbname;
- */
-
- long debug_mode;
-
- int shutdown;
-
- /* XXX NYI
- long allow_persistent;
- long max_persistent;
- long max_links;
- */
-
- OCIEnv *pEnv;
-
- int in_call;
-} php_oci_globals;
-
-extern zend_module_entry oci8_module_entry;
-#define phpext_oci8_ptr &oci8_module_entry
-
-#define OCI_MAX_NAME_LEN 64
-#define OCI_MAX_DATA_SIZE INT_MAX
-#define OCI_PIECE_SIZE (64*1024)-1
-
-#ifdef ZTS
-#define OCI(v) TSRMG(oci_globals_id, php_oci_globals *, v)
-#else
-#define OCI(v) (oci_globals.v)
-#endif
-
-#else /* !HAVE_OCI8 */
-
-# define oci8_module_ptr NULL
-
-#endif /* HAVE_OCI8 */
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- */
diff --git a/ext/oci8/tests/bug26133.phpt b/ext/oci8/tests/bug26133.phpt
deleted file mode 100644
index d3f0ed9bf3..0000000000
--- a/ext/oci8/tests/bug26133.phpt
+++ /dev/null
@@ -1,36 +0,0 @@
---TEST--
-Bug #26133 (ocifreedesc() segfault)
---SKIPIF--
-<?php
- require 'skipif.inc';
-?>
---FILE--
-<?php
- require 'connect.inc';
- require 'create_table.inc';
-
- if ($connection) {
- $ora_sql = "INSERT INTO
- ".$schema."php_test_table (id, value)
- VALUES ('1','1')
- RETURNING
- ROWID
- INTO :v_rowid ";
-
- $statement = OCIParse($connection,$ora_sql);
- $rowid = OCINewDescriptor($connection,OCI_D_ROWID);
- OCIBindByName($statement,":v_rowid", $rowid,-1,OCI_B_ROWID);
- if (OCIExecute($statement)) {
- OCICommit($connection);
- }
- OCIFreeStatement($statement);
- $rowid->free();
- }
-
- require 'drop_table.inc';
-
- echo "Done\n";
-?>
---EXPECTF--
-Done
-
diff --git a/ext/oci8/tests/connect.inc b/ext/oci8/tests/connect.inc
deleted file mode 100644
index a0013e20d7..0000000000
--- a/ext/oci8/tests/connect.inc
+++ /dev/null
@@ -1,39 +0,0 @@
-<?php
-
-/*
- * Please, change user, password and dbase to match your configuration.
- *
- * */
-
-$user = "user";
-$password = "pass";
-$dbase = "base";
-
-/*
- * You should have privileges to create tables in this schema
- *
- * */
-
-$schema = "system";
-
-/*
- * Remove the last line in skipif.inc to run tests
- *
- * */
-
-
- if (!empty($dbase)) {
- $connection = ocilogon($user,$password,$dbase);
- }
- else {
- $connection = ocilogon($user,$password);
- }
-
- if (!empty($schema)) {
- $schema = $schema.".";
- }
- else {
- $schema = '';
- }
-
-?>
diff --git a/ext/oci8/tests/create_table.inc b/ext/oci8/tests/create_table.inc
deleted file mode 100644
index c423ce577d..0000000000
--- a/ext/oci8/tests/create_table.inc
+++ /dev/null
@@ -1,12 +0,0 @@
-<?php
-
- if ($connection) {
- $ora_sql = "CREATE TABLE
- ".$schema."php_test_table (id NUMBER, value NUMBER)
- ";
-
- $statement = OCIParse($connection,$ora_sql);
- OCIExecute($statement);
- }
-
-?>
diff --git a/ext/oci8/tests/drop_table.inc b/ext/oci8/tests/drop_table.inc
deleted file mode 100644
index 4e558f5e33..0000000000
--- a/ext/oci8/tests/drop_table.inc
+++ /dev/null
@@ -1,12 +0,0 @@
-<?php
-
- if ($connection) {
- $ora_sql = "DROP TABLE
- ".$schema."php_test_table
- ";
-
- $statement = OCIParse($connection,$ora_sql);
- OCIExecute($statement);
- }
-
-?>
diff --git a/ext/oci8/tests/skipif.inc b/ext/oci8/tests/skipif.inc
deleted file mode 100644
index ed0992c8d9..0000000000
--- a/ext/oci8/tests/skipif.inc
+++ /dev/null
@@ -1,10 +0,0 @@
-<?php
-
-if (!extension_loaded('oci8')) die("skip oci8 extension is not available\n");
-
-/*
- * Remove or comment this line to run tests
- *
- * */
-die("skip change default login/password\n");
-?>
diff --git a/ext/odbc/CREDITS b/ext/odbc/CREDITS
deleted file mode 100644
index 238bfb40a1..0000000000
--- a/ext/odbc/CREDITS
+++ /dev/null
@@ -1,2 +0,0 @@
-ODBC
-Stig Bakken, Andreas Karajannis, Frank M. Kromann, Daniel R. Kalowsky
diff --git a/ext/odbc/birdstep.c b/ext/odbc/birdstep.c
deleted file mode 100644
index 24b88d242b..0000000000
--- a/ext/odbc/birdstep.c
+++ /dev/null
@@ -1,652 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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. |
- +----------------------------------------------------------------------+
- | Authors: Nikolay P. Romanyuk <mag@redcom.ru> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-/*
- * TODO:
- * birdstep_fetch_into(),
- * Check all on real life apps.
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "php.h"
-
-#if WIN32
-# include "config.w32.h"
-# include "win95nt.h"
-# ifdef PHP_EXPORTS
-# define PHPAPI __declspec(dllexport)
-# else
-# define PHPAPI __declspec(dllimport)
-# endif
-#else
-# include "php_config.h"
-# define PHPAPI
-# define THREAD_LS
-#endif
-
-#ifdef HAVE_BIRDSTEP
-#include "php_birdstep.h"
-#include "ext/standard/info.h"
-
-function_entry birdstep_functions[] = {
- PHP_FE(birdstep_connect, NULL)
- PHP_FE(birdstep_close, NULL)
- PHP_FE(birdstep_exec, NULL)
- PHP_FE(birdstep_fetch, NULL)
- PHP_FE(birdstep_result, NULL)
- PHP_FE(birdstep_freeresult, NULL)
- PHP_FE(birdstep_autocommit, NULL)
- PHP_FE(birdstep_off_autocommit, NULL)
- PHP_FE(birdstep_commit, NULL)
- PHP_FE(birdstep_rollback, NULL)
- PHP_FE(birdstep_fieldnum, NULL)
- PHP_FE(birdstep_fieldname, NULL)
-/*
- * Temporary Function aliases until the next major upgrade to PHP.
- * These should allow users to continue to use their current scripts,
- * but should in reality warn the user that this functionality is
- * deprecated.
- */
- PHP_FALIAS(velocis_connect, birdstep_connect, NULL)
- PHP_FALIAS(velocis_close, birdstep_close, NULL)
- PHP_FALIAS(velocis_exec, birdstep_exec, NULL)
- PHP_FALIAS(velocis_fetch, birdstep_fetch, NULL)
- PHP_FALIAS(velocis_result, birdstep_result, NULL)
- PHP_FALIAS(velocis_freeresult, birdstep_freeresult, NULL)
- PHP_FALIAS(velocis_autocommit, birdstep_autocommit, NULL)
- PHP_FALIAS(velocis_off_autocommit, birdstep_off_autocommit, NULL)
- PHP_FALIAS(velocis_commit, birdstep_commit, NULL)
- PHP_FALIAS(velocis_rollback, birdstep_rollback, NULL)
- PHP_FALIAS(velocis_fieldnum, birdstep_fieldnum, NULL)
- PHP_FALIAS(velocis_fieldname, birdstep_fieldname, NULL)
-/* End temporary aliases */
- {NULL, NULL, NULL}
-};
-
-zend_module_entry birdstep_module_entry = {
- STANDARD_MODULE_HEADER,
- "birdstep",
- birdstep_functions,
- PHP_MINIT(birdstep),
- PHP_MSHUTDOWN(birdstep),
- PHP_RINIT(birdstep),
- NULL,
- PHP_MINFO(birdstep),
- NO_VERSION_YET,
- STANDARD_MODULE_PROPERTIES
-};
-
-#ifdef COMPILE_DL_ODBC
-ZEND_GET_MODULE(birdstep)
-#endif
-
-THREAD_LS birdstep_module php_birdstep_module;
-THREAD_LS static HENV henv;
-
-#define PHP_GET_BIRDSTEP_RES_IDX(id) convert_to_long_ex(id); if (!(res = birdstep_find_result(list, Z_LVAL_PP(id)))) { php_error_docref(NULL TSRMLS_CC, E_WARNING, "Birdstep: Not result index (%ld)", Z_LVAL_PP(id)); RETURN_FALSE; }
-#define PHP_BIRDSTEP_CHK_LNK(id) convert_to_long_ex(id); if (!(conn = birdstep_find_conn(list,Z_LVAL_PP(id)))) { php_error_docref(NULL TSRMLS_CC, E_WARNING, "Birdstep: Not connection index (%ld)", Z_LVAL_PP(id)); RETURN_FALSE; }
-
-
-static void _close_birdstep_link(zend_rsrc_list_entry *rsrc TSRMLS_DC)
-{
- VConn *conn = (VConn *)rsrc->ptr;
-
- if ( conn ) {
- efree(conn);
- }
-}
-
-static void _free_birdstep_result(zend_rsrc_list_entry *rsrc TSRMLS_DC)
-{
- Vresult *res = (Vresult *)rsrc->ptr;
-
- if ( res && res->values ) {
- register int i;
- for ( i=0; i < res->numcols; i++ ) {
- if ( res->values[i].value )
- efree(res->values[i].value);
- }
- efree(res->values);
- }
- if ( res ) {
- efree(res);
- }
-}
-
-PHP_MINIT_FUNCTION(birdstep)
-{
- SQLAllocEnv(&henv);
-
- if ( cfg_get_long("birdstep.max_links",&php_birdstep_module.max_links) == FAILURE ) {
- php_birdstep_module.max_links = -1;
- }
- php_birdstep_module.num_links = 0;
- php_birdstep_module.le_link = zend_register_list_destructors_ex(_close_birdstep_link, NULL, "birdstep link", module_number);
- php_birdstep_module.le_result = zend_register_list_destructors_ex(_free_birdstep_result, NULL, "birdstep result", module_number);
-
- return SUCCESS;
-}
-
-PHP_RINIT_FUNCTION(birdstep)
-{
- return SUCCESS;
-}
-
-
-PHP_MINFO_FUNCTION(birdstep)
-{
- php_info_print_table_start();
- php_info_print_table_row(2, "RAIMA Birdstep Support", "enabled" );
- php_info_print_table_end();
-}
-
-PHP_MSHUTDOWN_FUNCTION(birdstep)
-{
- SQLFreeEnv(henv);
- return SUCCESS;
-}
-
-/* Some internal functions. Connections and result manupulate */
-
-static int birdstep_add_conn(HashTable *list,VConn *conn,HDBC hdbc)
-{
- int ind;
-
- ind = zend_list_insert(conn,php_birdstep_module.le_link);
- conn->hdbc = hdbc;
- conn->index = ind;
-
- return(ind);
-}
-
-static VConn * birdstep_find_conn(HashTable *list,int ind)
-{
- VConn *conn;
- int type;
-
- conn = zend_list_find(ind,&type);
- if ( !conn || type != php_birdstep_module.le_link ) {
- return(NULL);
- }
- return(conn);
-}
-
-static void birdstep_del_conn(HashTable *list,int ind)
-{
- zend_list_delete(ind);
-}
-
-static int birdstep_add_result(HashTable *list,Vresult *res,VConn *conn)
-{
- int ind;
-
- ind = zend_list_insert(res,php_birdstep_module.le_result);
- res->conn = conn;
- res->index = ind;
-
- return(ind);
-}
-
-static Vresult * birdstep_find_result(HashTable *list,int ind)
-{
- Vresult *res;
- int type;
-
- res = zend_list_find(ind,&type);
- if ( !res || type != php_birdstep_module.le_result ) {
- return(NULL);
- }
- return(res);
-}
-
-static void birdstep_del_result(HashTable *list,int ind)
-{
- zend_list_delete(ind);
-}
-
-/* Users functions */
-
-/* {{{ proto int birdstep_connect(string server, string user, string pass)
- */
-PHP_FUNCTION(birdstep_connect)
-{
- zval **serv,**user,**pass;
- char *Serv = NULL;
- char *User = NULL;
- char *Pass = NULL;
- RETCODE stat;
- HDBC hdbc;
- VConn *new;
- long ind;
-
- if ( php_birdstep_module.max_links != -1 && php_birdstep_module.num_links == php_birdstep_module.max_links ) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Birdstep: Too many open connections (%d)",php_birdstep_module.num_links);
- RETURN_FALSE;
- }
- if (ZEND_NUM_ARGS() != 3 || zend_get_parameters_ex(3, &serv, &user, &pass) == FAILURE ) {
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex(serv);
- convert_to_string_ex(user);
- convert_to_string_ex(pass);
- Serv = Z_STRVAL_PP(serv);
- User = Z_STRVAL_PP(user);
- Pass = Z_STRVAL_PP(pass);
- stat = SQLAllocConnect(henv,&hdbc);
- if ( stat != SQL_SUCCESS ) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Birdstep: Could not allocate connection handle");
- RETURN_FALSE;
- }
- stat = SQLConnect(hdbc,Serv,SQL_NTS,User,SQL_NTS,Pass,SQL_NTS);
- if ( stat != SQL_SUCCESS && stat != SQL_SUCCESS_WITH_INFO ) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Birdstep: Could not connect to server \"%s\" for %s",Serv,User);
- SQLFreeConnect(hdbc);
- RETURN_FALSE;
- }
- new = (VConn *)emalloc(sizeof(VConn));
- ind = birdstep_add_conn(list,new,hdbc);
- php_birdstep_module.num_links++;
- RETURN_LONG(ind);
-}
-/* }}} */
-
-/* {{{ proto bool birdstep_close(int id)
- */
-PHP_FUNCTION(birdstep_close)
-{
- zval **id;
- VConn *conn;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &id) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- PHP_BIRDSTEP_CHK_LNK(id);
-
- SQLDisconnect(conn->hdbc);
- SQLFreeConnect(conn->hdbc);
- birdstep_del_conn(list,Z_LVAL_PP(id));
- php_birdstep_module.num_links--;
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto int birdstep_exec(int index, string exec_str)
- */
-PHP_FUNCTION(birdstep_exec)
-{
- zval **ind, **exec_str;
- char *query = NULL;
- int indx;
- VConn *conn;
- Vresult *res;
- RETCODE stat;
- SWORD cols,i,colnamelen;
- SDWORD rows,coldesc;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &ind, &exec_str) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- PHP_BIRDSTEP_CHK_LNK(ind);
-
- convert_to_string_ex(exec_str);
- query = Z_STRVAL_PP(exec_str);
-
- res = (Vresult *)emalloc(sizeof(Vresult));
- stat = SQLAllocStmt(conn->hdbc,&res->hstmt);
- if ( stat != SQL_SUCCESS && stat != SQL_SUCCESS_WITH_INFO ) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Birdstep: SQLAllocStmt return %d",stat);
- efree(res);
- RETURN_FALSE;
- }
- stat = SQLExecDirect(res->hstmt,query,SQL_NTS);
- if ( stat != SQL_SUCCESS && stat != SQL_SUCCESS_WITH_INFO ) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Birdstep: Can not execute \"%s\" query",query);
- SQLFreeStmt(res->hstmt,SQL_DROP);
- efree(res);
- RETURN_FALSE;
- }
- /* Success query */
- stat = SQLNumResultCols(res->hstmt,&cols);
- if ( stat != SQL_SUCCESS ) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Birdstep: SQLNumResultCols return %d",stat);
- SQLFreeStmt(res->hstmt,SQL_DROP);
- efree(res);
- RETURN_FALSE;
- }
- if ( !cols ) { /* Was INSERT, UPDATE, DELETE, etc. query */
- stat = SQLRowCount(res->hstmt,&rows);
- if ( stat != SQL_SUCCESS ) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Birdstep: SQLNumResultCols return %d",stat);
- SQLFreeStmt(res->hstmt,SQL_DROP);
- efree(res);
- RETURN_FALSE;
- }
- SQLFreeStmt(res->hstmt,SQL_DROP);
- efree(res);
- RETURN_LONG(rows);
- } else { /* Was SELECT query */
- res->values = (VResVal *)safe_emalloc(sizeof(VResVal), cols, 0);
- res->numcols = cols;
- for ( i = 0; i < cols; i++ ) {
- SQLColAttributes(res->hstmt,i+1,SQL_COLUMN_NAME,
- res->values[i].name,sizeof(res->values[i].name),
- &colnamelen,NULL);
- SQLColAttributes(res->hstmt,i+1,SQL_COLUMN_TYPE,
- NULL,0,NULL,&res->values[i].valtype);
- switch ( res->values[i].valtype ) {
- case SQL_LONGVARBINARY:
- case SQL_LONGVARCHAR:
- res->values[i].value = NULL;
- continue;
- default:
- break;
- }
- SQLColAttributes(res->hstmt,i+1,SQL_COLUMN_DISPLAY_SIZE,
- NULL,0,NULL,&coldesc);
- res->values[i].value = (char *)emalloc(coldesc+1);
- SQLBindCol(res->hstmt,i+1,SQL_C_CHAR, res->values[i].value,coldesc+1, &res->values[i].vallen);
- }
- }
- res->fetched = 0;
- indx = birdstep_add_result(list,res,conn);
- RETURN_LONG(indx);
-}
-/* }}} */
-
-/* {{{ proto bool birdstep_fetch(int index)
- */
-PHP_FUNCTION(birdstep_fetch)
-{
- zval **ind;
- Vresult *res;
- RETCODE stat;
- UDWORD row;
- UWORD RowStat[1];
-
- if ( ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &ind) == FAILURE ) {
- WRONG_PARAM_COUNT;
- }
- PHP_GET_BIRDSTEP_RES_IDX(ind);
-
- stat = SQLExtendedFetch(res->hstmt,SQL_FETCH_NEXT,1,&row,RowStat);
- if ( stat == SQL_NO_DATA_FOUND ) {
- SQLFreeStmt(res->hstmt,SQL_DROP);
- birdstep_del_result(list,Z_LVAL_PP(ind));
- RETURN_FALSE;
- }
- if ( stat != SQL_SUCCESS && stat != SQL_SUCCESS_WITH_INFO ) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Birdstep: SQLFetch return error");
- SQLFreeStmt(res->hstmt,SQL_DROP);
- birdstep_del_result(list,Z_LVAL_PP(ind));
- RETURN_FALSE;
- }
- res->fetched = 1;
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto mixed birdstep_result(int index, int col)
- */
-PHP_FUNCTION(birdstep_result)
-{
- zval **ind, **col;
- Vresult *res;
- RETCODE stat;
- int i,sql_c_type;
- UDWORD row;
- UWORD RowStat[1];
- SWORD indx = -1;
- char *field = NULL;
-
- if ( ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &ind, &col) == FAILURE ) {
- WRONG_PARAM_COUNT;
- }
- PHP_GET_BIRDSTEP_RES_IDX(ind);
-
- if ( Z_TYPE_PP(col) == IS_STRING ) {
- field = Z_STRVAL_PP(col);
- } else {
- convert_to_long_ex(col);
- indx = Z_LVAL_PP(col);
- }
- if ( field ) {
- for ( i = 0; i < res->numcols; i++ ) {
- if ( !strcasecmp(res->values[i].name,field)) {
- indx = i;
- break;
- }
- }
- if ( indx < 0 ) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Field %s not found",field);
- RETURN_FALSE;
- }
- } else {
- if ( indx < 0 || indx >= res->numcols ) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Birdstep: Field index not in range");
- RETURN_FALSE;
- }
- }
- if ( !res->fetched ) {
- stat = SQLExtendedFetch(res->hstmt,SQL_FETCH_NEXT,1,&row,RowStat);
- if ( stat == SQL_NO_DATA_FOUND ) {
- SQLFreeStmt(res->hstmt,SQL_DROP);
- birdstep_del_result(list,Z_LVAL_PP(ind));
- RETURN_FALSE;
- }
- if ( stat != SQL_SUCCESS && stat != SQL_SUCCESS_WITH_INFO ) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Birdstep: SQLFetch return error");
- SQLFreeStmt(res->hstmt,SQL_DROP);
- birdstep_del_result(list,Z_LVAL_PP(ind));
- RETURN_FALSE;
- }
- res->fetched = 1;
- }
- switch ( res->values[indx].valtype ) {
- case SQL_LONGVARBINARY:
- sql_c_type = SQL_C_BINARY;
- goto l1;
- case SQL_LONGVARCHAR:
- sql_c_type = SQL_C_CHAR;
-l1:
- if ( !res->values[indx].value ) {
- res->values[indx].value = emalloc(4096);
- }
- stat = SQLGetData(res->hstmt,indx+1,sql_c_type,
- res->values[indx].value,4095,&res->values[indx].vallen);
- if ( stat == SQL_NO_DATA_FOUND ) {
- SQLFreeStmt(res->hstmt,SQL_DROP);
- birdstep_del_result(list,Z_LVAL_PP(ind));
- RETURN_FALSE;
- }
- if ( stat != SQL_SUCCESS && stat != SQL_SUCCESS_WITH_INFO ) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Birdstep: SQLGetData return error");
- SQLFreeStmt(res->hstmt,SQL_DROP);
- birdstep_del_result(list,Z_LVAL_PP(ind));
- RETURN_FALSE;
- }
- if ( res->values[indx].valtype == SQL_LONGVARCHAR ) {
- RETURN_STRING(res->values[indx].value,TRUE);
- } else {
- RETURN_LONG((long)res->values[indx].value);
- }
- default:
- if ( res->values[indx].value != NULL ) {
- RETURN_STRING(res->values[indx].value,TRUE);
- }
- }
-}
-/* }}} */
-
-/* {{{ proto bool birdstep_freeresult(int index)
- */
-PHP_FUNCTION(birdstep_freeresult)
-{
- zval **ind;
- Vresult *res;
-
- if ( ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &ind) == FAILURE ) {
- WRONG_PARAM_COUNT;
- }
- PHP_GET_BIRDSTEP_RES_IDX(ind);
-
- SQLFreeStmt(res->hstmt,SQL_DROP);
- birdstep_del_result(list,Z_LVAL_PP(ind));
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto bool birdstep_autocommit(int index)
- */
-PHP_FUNCTION(birdstep_autocommit)
-{
- zval **id;
- RETCODE stat;
- VConn *conn;
-
- if ( ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &id) == FAILURE ) {
- WRONG_PARAM_COUNT;
- }
- PHP_BIRDSTEP_CHK_LNK(id);
-
- stat = SQLSetConnectOption(conn->hdbc,SQL_AUTOCOMMIT,SQL_AUTOCOMMIT_ON);
- if ( stat != SQL_SUCCESS && stat != SQL_SUCCESS_WITH_INFO ) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Birdstep: Set autocommit_on option failure");
- RETURN_FALSE;
- }
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto bool birdstep_off_autocommit(int index)
- */
-PHP_FUNCTION(birdstep_off_autocommit)
-{
- zval **id;
- RETCODE stat;
- VConn *conn;
-
- if ( ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &id) == FAILURE ) {
- WRONG_PARAM_COUNT;
- }
- PHP_BIRDSTEP_CHK_LNK(id);
-
- stat = SQLSetConnectOption(conn->hdbc,SQL_AUTOCOMMIT,SQL_AUTOCOMMIT_OFF);
- if ( stat != SQL_SUCCESS && stat != SQL_SUCCESS_WITH_INFO ) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Birdstep: Set autocommit_off option failure");
- RETURN_FALSE;
- }
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto bool birdstep_commit(int index)
- */
-PHP_FUNCTION(birdstep_commit)
-{
- zval **id;
- RETCODE stat;
- VConn *conn;
-
- if ( ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &id) == FAILURE ) {
- WRONG_PARAM_COUNT;
- }
- PHP_BIRDSTEP_CHK_LNK(id)
-
- stat = SQLTransact(NULL,conn->hdbc,SQL_COMMIT);
- if ( stat != SQL_SUCCESS ) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Birdstep: Commit failure");
- RETURN_FALSE;
- }
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto bool birdstep_rollback(int index)
- */
-PHP_FUNCTION(birdstep_rollback)
-{
- zval **id;
- RETCODE stat;
- VConn *conn;
-
- if ( ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &id) == FAILURE ) {
- WRONG_PARAM_COUNT;
- }
- PHP_BIRDSTEP_CHK_LNK(id);
-
- stat = SQLTransact(NULL,conn->hdbc,SQL_ROLLBACK);
- if ( stat != SQL_SUCCESS ) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Birdstep: Rollback failure");
- RETURN_FALSE;
- }
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto string birdstep_fieldname(int index, int col)
- */
-PHP_FUNCTION(birdstep_fieldname)
-{
- zval **ind, **col;
- Vresult *res;
- SWORD indx;
-
- if ( ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &ind, &col) == FAILURE ) {
- WRONG_PARAM_COUNT;
- }
- PHP_GET_BIRDSTEP_RES_IDX(ind);
-
- convert_to_long_ex(col);
- indx = Z_LVAL_PP(col);
- if ( indx < 0 || indx >= res->numcols ) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Birdstep: Field index not in range");
- RETURN_FALSE;
- }
- RETURN_STRING(res->values[indx].name,TRUE);
-}
-/* }}} */
-
-/* {{{ proto int birdstep_fieldnum(int index)
- */
-PHP_FUNCTION(birdstep_fieldnum)
-{
- zval **ind;
- Vresult *res;
-
- if ( ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &ind) == FAILURE ) {
- WRONG_PARAM_COUNT;
- }
- PHP_GET_BIRDSTEP_RES_IDX(ind);
-
- RETURN_LONG(res->numcols);
-}
-/* }}} */
-
-#endif /* HAVE_BIRDSTEP */
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- */
diff --git a/ext/odbc/config.m4 b/ext/odbc/config.m4
deleted file mode 100644
index ce518dca5c..0000000000
--- a/ext/odbc/config.m4
+++ /dev/null
@@ -1,521 +0,0 @@
-dnl
-dnl $Id$
-dnl
-
-dnl
-dnl Figure out which library file to link with for the Solid support.
-dnl
-AC_DEFUN(AC_FIND_SOLID_LIBS,[
- AC_MSG_CHECKING([Solid library file])
- ac_solid_uname_r=`uname -r 2>/dev/null`
- ac_solid_uname_s=`uname -s 2>/dev/null`
- case $ac_solid_uname_s in
- AIX) ac_solid_os=a3x;; # a4x for AIX4/ Solid 2.3/3.0 only
- HP-UX) ac_solid_os=h9x;; # h1x for hpux11, h0x for hpux10
- IRIX) ac_solid_os=irx;; # Solid 2.3(?)/ 3.0 only
- Linux)
- if ldd -v /bin/sh | grep GLIBC > /dev/null; then
- AC_DEFINE(SS_LINUX,1,[Needed in sqlunix.h ])
- ac_solid_os=l2x
- else
- AC_DEFINE(SS_LINUX,1,[Needed in sqlunix.h ])
- ac_solid_os=lux
- fi;;
- SunOS)
- ac_solid_os=ssx;; # should we deal with SunOS 4?
- FreeBSD)
- if test `expr $ac_solid_uname_r : '\(.\)'` -gt "2"; then
- AC_DEFINE(SS_FBX,1,[Needed in sqlunix.h for wchar defs ])
- ac_solid_os=fex
- else
- AC_DEFINE(SS_FBX,1,[Needed in sqlunix.h for wchar defs ])
- ac_solid_os=fbx
- fi;;
- esac
-
- if test -f $1/soc${ac_solid_os}35.a; then
- ac_solid_version=35
- ac_solid_prefix=soc
- elif test -f $1/scl${ac_solid_os}30.a; then
- ac_solid_version=30
- ac_solid_prefix=scl
- elif test -f $1/scl${ac_solid_os}23.a; then
- ac_solid_version=23
- ac_solid_prefix=scl
- fi
-
-#
-# Check for the library files, and setup the ODBC_LIBS path...
-#
-if test ! -f $1/lib${ac_solid_prefix}${ac_solid_os}${ac_solid_version}.so -a \
- ! -f $1/lib${ac_solid_prefix}${ac_solid_os}${ac_solid_version}.a; then
- #
- # we have an error and should bail out, as we can't find the libs!
- #
- echo ""
- echo "*********************************************************************"
- echo "* Unable to locate $1/lib${ac_solid_prefix}${ac_solid_os}${ac_solid_version}.so or $1/lib${ac_solid_prefix}${ac_solid_os}${ac_solid_version}.a"
- echo "* Please correct this by creating the following links and reconfiguring:"
- echo "* $1/lib${ac_solid_prefix}${ac_solid_os}${ac_solid_version}.a -> $1/lib${ac_solid_prefix}${ac_solid_os}${ac_solid_version}.a"
- echo "* $1/${ac_solid_prefix}${ac_solid_os}${ac_solid_version}.so -> $1/lib${ac_solid_prefix}${ac_solid_os}${ac_solid_version}.so"
- echo "*********************************************************************"
-else
- ODBC_LFLAGS=-L$1
- ODBC_LIBS=-l${ac_solid_prefix}${ac_solid_os}${ac_solid_version}
-fi
-
- AC_MSG_RESULT(`echo $ODBC_LIBS | sed -e 's!.*/!!'`)
-])
-
-
-dnl
-dnl Figure out which library file to link with for the Empress support.
-dnl
-AC_DEFUN(AC_FIND_EMPRESS_LIBS,[
- AC_MSG_CHECKING([Empress library file])
- ODBC_LIBS=`echo $1/libempodbccl.so | cut -d' ' -f1`
- if test ! -f $ODBC_LIBS; then
- ODBC_LIBS=`echo $1/libempodbccl.so | cut -d' ' -f1`
- fi
- AC_MSG_RESULT(`echo $ODBC_LIBS | sed -e 's!.*/!!'`)
-])
-
-AC_DEFUN(AC_FIND_EMPRESS_BCS_LIBS,[
- AC_MSG_CHECKING([Empress local access library file])
- ODBCBCS_LIBS=`echo $1/libempodbcbcs.a | cut -d' ' -f1`
- if test ! -f $ODBCBCS_LIBS; then
- ODBCBCS_LIBS=`echo $1/libempodbcbcs.a | cut -d' ' -f1`
- fi
- AC_MSG_RESULT(`echo $ODBCBCS_LIBS | sed -e 's!.*/!!'`)
-])
-
-if test -z "$ODBC_TYPE"; then
-AC_MSG_CHECKING(for Adabas support)
-AC_ARG_WITH(adabas,
-[ --with-adabas[=DIR] Include Adabas D support. DIR is the Adabas base
- install directory, defaults to /usr/local.],
-[
- PHP_WITH_SHARED
- if test "$withval" = "yes"; then
- withval=/usr/local
- fi
- if test "$withval" != "no"; then
- PHP_ADD_INCLUDE($withval/incl)
- PHP_ADD_LIBPATH($withval/lib)
- ODBC_OBJS="$withval/lib/odbclib.a"
- ODBC_LIB="$abs_builddir/ext/odbc/libodbc_adabas.a"
- $srcdir/build/shtool mkdir -f -p ext/odbc
- rm -f "$ODBC_LIB"
- cp "$ODBC_OBJS" "$ODBC_LIB"
- PHP_ADD_LIBRARY(sqlptc)
- PHP_ADD_LIBRARY(sqlrte)
- PHP_ADD_LIBRARY_WITH_PATH(odbc_adabas, $abs_builddir/ext/odbc)
- ODBC_TYPE=adabas
- AC_DEFINE(HAVE_ADABAS,1,[ ])
- AC_MSG_RESULT(yes)
- else
- AC_MSG_RESULT(no)
- fi
-],[
- AC_MSG_RESULT(no)
-])
-fi
-
-if test -z "$ODBC_TYPE"; then
-AC_MSG_CHECKING(for SAP DB support)
-AC_ARG_WITH(sapdb,
-[ --with-sapdb[=DIR] Include SAP DB support. DIR is SAP DB base
- install directory, defaults to /usr/local.],
-[
- PHP_WITH_SHARED
- if test "$withval" = "yes"; then
- withval=/usr/local
- fi
- if test "$withval" != "no"; then
- PHP_ADD_INCLUDE($withval/incl)
- PHP_ADD_LIBPATH($withval/lib)
- PHP_ADD_LIBRARY(sqlod)
- ODBC_TYPE=sapdb
- AC_DEFINE(HAVE_SAPDB,1,[ ])
- AC_MSG_RESULT(yes)
- else
- AC_MSG_RESULT(no)
- fi
-],[
- AC_MSG_RESULT(no)
-])
-fi
-
-
-if test -z "$ODBC_TYPE"; then
-AC_MSG_CHECKING(for Solid support)
-AC_ARG_WITH(solid,
-[ --with-solid[=DIR] Include Solid support. DIR is the Solid base
- install directory, defaults to /usr/local/solid],
-[
- PHP_WITH_SHARED
- if test "$withval" = "yes"; then
- withval=/usr/local/solid
- fi
- if test "$withval" != "no"; then
- ODBC_INCDIR=$withval/include
- ODBC_LIBDIR=$withval/lib
- ODBC_INCLUDE=-I$ODBC_INCDIR
- ODBC_TYPE=solid
- if test -f $ODBC_LIBDIR/soc*35.a; then
- AC_DEFINE(HAVE_SOLID_35,1,[ ])
- elif test -f $ODBC_LIBDIR/scl*30.a; then
- AC_DEFINE(HAVE_SOLID_30,1,[ ])
- elif test -f $ODBC_LIBDIR/scl*23.a; then
- AC_DEFINE(HAVE_SOLID,1,[ ])
- fi
- AC_MSG_RESULT(yes)
- AC_FIND_SOLID_LIBS($ODBC_LIBDIR)
- else
- AC_MSG_RESULT(no)
- fi
-],[
- AC_MSG_RESULT(no)
-])
-fi
-
-if test -z "$ODBC_TYPE"; then
-AC_MSG_CHECKING(for IBM DB2 support)
-AC_ARG_WITH(ibm-db2,
-[ --with-ibm-db2[=DIR] Include IBM DB2 support. DIR is the DB2 base
- install directory, defaults to /home/db2inst1/sqllib],
-[
- PHP_WITH_SHARED
- if test "$withval" != "no"; then
- if test "$withval" = "yes"; then
- ODBC_INCDIR=/home/db2inst1/sqllib/include
- ODBC_LIBDIR=/home/db2inst1/sqllib/lib
- else
- ODBC_INCDIR=$withval/include
- ODBC_LIBDIR=$withval/lib
- fi
- ODBC_INCLUDE=-I$ODBC_INCDIR
- ODBC_LFLAGS=-L$ODBC_LIBDIR
- ODBC_TYPE=db2
- ODBC_LIBS=-ldb2
- AC_DEFINE(HAVE_IBMDB2,1,[ ])
-
- AC_MSG_RESULT(yes)
- else
- AC_MSG_RESULT(no)
- fi
-],[
- AC_MSG_RESULT(no)
-])
-fi
-
-if test -z "$ODBC_TYPE"; then
-AC_MSG_CHECKING(for Empress support)
-AC_ARG_WITH(empress,
-[ --with-empress[=DIR] Include Empress support. DIR is the Empress base
- install directory, defaults to \$EMPRESSPATH.
- From PHP 4, this option only supports Empress Version
- 8.60 and above],
-[
- PHP_WITH_SHARED
- if test "$withval" != "no"; then
- if test "$withval" = "yes"; then
- ODBC_INCDIR=$EMPRESSPATH/include/odbc
- ODBC_LIBDIR=$EMPRESSPATH/shlib
- else
- ODBC_INCDIR=$withval/include/odbc
- ODBC_LIBDIR=$withval/shlib
- fi
- ODBC_INCLUDE=-I$ODBC_INCDIR
- ODBC_LFLAGS=-L$ODBC_LIBDIR
- ODBC_TYPE=empress
- AC_DEFINE(HAVE_EMPRESS,1,[ ])
- AC_MSG_RESULT(yes)
- AC_FIND_EMPRESS_LIBS($ODBC_LIBDIR)
- else
- AC_MSG_RESULT(no)
- fi
-],[
- AC_MSG_RESULT(no)
-])
-fi
-
-if test -z "$ODBC_TYPE"; then
-AC_MSG_CHECKING(for Empress local access support)
-AC_ARG_WITH(empress-bcs,
-[ --with-empress-bcs[=DIR]
- Include Empress Local Access support. DIR is the
- Empress base install directory, defaults to
- \$EMPRESSPATH. From PHP 4, this option only supports
- Empress Version 8.60 and above.],
-[
- PHP_WITH_SHARED
- if test "$withval" != "no"; then
- if test "$withval" = "yes"; then
- ODBC_INCDIR=$EMPRESSPATH/include/odbc
- ODBC_LIBDIR=$EMPRESSPATH/shlib
- else
- ODBC_INCDIR=$withval/include/odbc
- ODBC_LIBDIR=$withval/shlib
- fi
- CC="empocc -bcs";export CC;
- LD="empocc -bcs";export LD;
- ODBC_INCLUDE=-I$ODBC_INCDIR
- ODBC_LFLAGS=-L$ODBC_LIBDIR
- LIST=`empocc -listlines -bcs -o a a.c`
-
- NEWLIST=
- for I in $LIST
- do
- case $I in
- $EMPRESSPATH/odbccl/lib/* | \
- $EMPRESSPATH/rdbms/lib/* | \
- $EMPRESSPATH/common/lib/*)
- NEWLIST="$NEWLIST $I"
- ;;
- esac
- done
- ODBC_LIBS="-lempphpbcs -lms -lmscfg -lbasic -lbasic_os -lnlscstab -lnlsmsgtab -lm -ldl -lcrypt"
- ODBC_TYPE=empress
- AC_DEFINE(HAVE_EMPRESS,1,[ ])
- AC_MSG_RESULT(yes)
- AC_FIND_EMPRESS_BCS_LIBS($ODBC_LIBDIR)
- else
- AC_MSG_RESULT(no)
- fi
-],[
- AC_MSG_RESULT(no)
-])
-fi
-
-if test -z "$ODBC_TYPE"; then
-AC_MSG_CHECKING(for Birdstep support)
-AC_ARG_WITH(birdstep,
-[ --with-birdstep[=DIR] Include Birdstep support. DIR is the Birdstep base
- install directory, defaults to /usr/local/birdstep.],
-[
- PHP_WITH_SHARED
-
- if test "$withval" != "no"; then
- if test "$withval" = "yes"; then
- ODBC_INCDIR=/usr/local/birdstep/include
- ODBC_LIBDIR=/usr/local/birdstep/lib
- else
- ODBC_INCDIR=$withval/include
- ODBC_LIBDIR=$withval/lib
- fi
- ODBC_INCLUDE=-I$ODBC_INCDIR
- ODBC_TYPE=birdstep
- ODBC_LFLAGS=-L$ODBC_LIBDIR
- ODBC_LIBS="-lCadm -lCdict -lCenc -lCrdm -lCrpc -lCrdbc -lCrm -lCuapi -lutil"
- AC_DEFINE(HAVE_BIRDSTEP,1,[ ])
-
- AC_MSG_RESULT(yes)
- else
- AC_MSG_RESULT(no)
- fi
-],[
- AC_MSG_RESULT(no)
-])
-fi
-
-if test -z "$ODBC_TYPE"; then
-AC_MSG_CHECKING(for a custom ODBC support)
-AC_ARG_WITH(custom-odbc,
-[ --with-custom-odbc[=DIR]
- Include a user defined ODBC support.
- The DIR is ODBC install base directory,
- which defaults to /usr/local.
- Make sure to define CUSTOM_ODBC_LIBS and
- have some odbc.h in your include dirs.
- E.g., you should define following for
- Sybase SQL Anywhere 5.5.00 on QNX, prior to
- run configure script:
- CPPFLAGS=\"-DODBC_QNX -DSQLANY_BUG\"
- LDFLAGS=-lunix
- CUSTOM_ODBC_LIBS=\"-ldblib -lodbc\".],
-[
- if test "$withval" = "yes"; then
- withval=/usr/local
- fi
- if test "$withval" != "no"; then
- ODBC_INCDIR=$withval/include
- ODBC_LIBDIR=$withval/lib
- ODBC_LFLAGS=-L$ODBC_LIBDIR
- ODBC_INCLUDE=-I$ODBC_INCDIR
- ODBC_LIBS=$CUSTOM_ODBC_LIBS
- ODBC_TYPE=custom
- AC_DEFINE(HAVE_CODBC,1,[ ])
- AC_MSG_RESULT(yes)
- else
- AC_MSG_RESULT(no)
- fi
-],[
- AC_MSG_RESULT(no)
-])
-fi
-
-if test -z "$ODBC_TYPE"; then
-AC_MSG_CHECKING(for iODBC support)
-AC_ARG_WITH(iodbc,
-[ --with-iodbc[=DIR] Include iODBC support. DIR is the iODBC base
- install directory, defaults to /usr/local.],
-[
- PHP_WITH_SHARED
- if test "$withval" = "yes"; then
- withval=/usr/local
- fi
- if test "$withval" != "no"; then
- PHP_ADD_LIBRARY_WITH_PATH(iodbc, $withval/lib)
- PHP_ADD_INCLUDE($withval/include, 1)
- ODBC_TYPE=iodbc
- ODBC_INCLUDE=-I$withval/include
- ODBC_LFLAGS=-L$withval/lib
- ODBC_LIBS=-liodbc
- AC_DEFINE(HAVE_IODBC,1,[ ])
- AC_DEFINE(HAVE_ODBC2,1,[ ])
- AC_MSG_RESULT(yes)
- else
- AC_MSG_RESULT(no)
- fi
-],[
- AC_MSG_RESULT(no)
-])
-fi
-
-if test -z "$ODBC_TYPE"; then
-AC_MSG_CHECKING(for Easysoft ODBC-ODBC Bridge support)
-AC_ARG_WITH(esoob,
-[ --with-esoob[=DIR] Include Easysoft OOB support. DIR is the OOB base
- install directory,
- defaults to /usr/local/easysoft/oob/client.],
-[
- PHP_WITH_SHARED
- if test "$withval" = "yes"; then
- withval=/usr/local/easysoft/oob/client
- fi
- if test "$withval" != "no"; then
- ODBC_INCDIR=$withval/include
- ODBC_LIBDIR=$withval/lib
- ODBC_LFLAGS=-L$ODBC_LIBDIR
- ODBC_INCLUDE=-I$ODBC_INCDIR
- ODBC_LIBS=-lesoobclient
- ODBC_TYPE=ESOOB
- AC_DEFINE(HAVE_ESOOB,1,[ ])
- AC_MSG_RESULT(yes)
- else
- AC_MSG_RESULT(no)
- fi
-],[
- AC_MSG_RESULT(no)
-])
-fi
-
-if test -z "$ODBC_TYPE"; then
-AC_MSG_CHECKING(for unixODBC support)
-AC_ARG_WITH(unixODBC,
-[ --with-unixODBC[=DIR] Include unixODBC support. DIR is the unixODBC base
- install directory, defaults to /usr/local.],
-[
- PHP_WITH_SHARED
- if test "$withval" = "yes"; then
- withval=/usr/local
- fi
- if test "$withval" != "no"; then
- ODBC_INCDIR=$withval/include
- ODBC_LIBDIR=$withval/lib
- ODBC_LFLAGS=-L$ODBC_LIBDIR
- ODBC_INCLUDE=-I$ODBC_INCDIR
- ODBC_LIBS=-lodbc
- ODBC_TYPE=unixODBC
- AC_DEFINE(HAVE_UNIXODBC,1,[ ])
- AC_MSG_RESULT(yes)
- else
- AC_MSG_RESULT(no)
- fi
-],[
- AC_MSG_RESULT(no)
-])
-fi
-
-if test -z "$ODBC_TYPE"; then
-AC_MSG_CHECKING(for DBMaker support)
-AC_ARG_WITH(dbmaker,
-[ --with-dbmaker[=DIR] Include DBMaker support. DIR is the DBMaker base
- install directory, defaults to where the latest
- version of DBMaker is installed (such as
- /home/dbmaker/3.6).],
-[
- PHP_WITH_SHARED
- if test "$withval" = "yes"; then
- # find dbmaker's home directory
- DBMAKER_HOME=`grep "^dbmaker:" /etc/passwd | awk -F: '{print $6}'`
-
- # check DBMaker version (from 5.0 to 2.0)
- DBMAKER_VERSION=5.0
-
- while test ! -d $DBMAKER_HOME/$DBMAKER_VERSION -a "$DBMAKER_VERSION" != "2.9"; do
- DM_VER=`echo $DBMAKER_VERSION | sed -e 's/\.//' | awk '{ print $1-1;}'`
- MAJOR_V=`echo $DM_VER | awk '{ print $1/10; }' | awk -F. '{ print $1; }'`
- MINOR_V=`echo $DM_VER | awk '{ print $1%10; }'`
- DBMAKER_VERSION=$MAJOR_V.$MINOR_V
- done
-
- if test "$DBMAKER_VERSION" = "2.9"; then
- withval=$DBMAKER_HOME
- else
- DBMAKER_PATH=$DBMAKER_HOME/$DBMAKER_VERSION
- fi
-
- withval=$DBMAKER_PATH
- fi
-
- if test "$withval" != "no"; then
- ODBC_INCDIR=$withval/include
- ODBC_LIBDIR=$withval/lib
- ODBC_INCLUDE=-I$ODBC_INCDIR
- ODBC_LFLAGS=-L$ODBC_LIBDIR
- ODBC_INCLUDE=-I$ODBC_INCDIR
- ODBC_LIBS="-ldmapic -lc"
- ODBC_TYPE=dbmaker
-
- AC_DEFINE(HAVE_DBMAKER,1,[Whether you want DBMaker])
-
- if test "$shared" = "yes"; then
- AC_MSG_RESULT(yes (shared))
- ODBC_LIBS="-ldmapic -lc -lm"
- ODBC_SHARED="odbc.la"
- else
- AC_MSG_RESULT(yes (static))
- PHP_ADD_LIBRARY_WITH_PATH(dmapic, $ODBC_LIBDIR)
- PHP_ADD_INCLUDE($ODBC_INCDIR)
- ODBC_STATIC="libphpext_odbc.la"
- fi
-
- AC_MSG_RESULT(yes)
- else
- AC_MSG_RESULT(no)
- fi
-],[
- AC_MSG_RESULT(no)
-])
-fi
-
-if test -n "$ODBC_TYPE"; then
- if test "$ODBC_TYPE" != "dbmaker"; then
- ext_shared=$shared
- PHP_EVAL_LIBLINE([$ODBC_LFLAGS $ODBC_LIBS], ODBC_SHARED_LIBADD)
- AC_DEFINE(HAVE_SQLDATASOURCES,1,[ ])
- fi
-
- AC_DEFINE(HAVE_UODBC,1,[ ])
- PHP_SUBST(ODBC_SHARED_LIBADD)
- PHP_SUBST(ODBC_INCDIR)
- PHP_SUBST(ODBC_LIBDIR)
- PHP_SUBST_OLD(ODBC_INCLUDE)
- PHP_SUBST_OLD(ODBC_LIBS)
- PHP_SUBST_OLD(ODBC_LFLAGS)
- PHP_SUBST_OLD(ODBC_TYPE)
-
- PHP_NEW_EXTENSION(odbc, php_odbc.c, $ext_shared,, $ODBC_INCLUDE)
-fi
diff --git a/ext/odbc/config.w32 b/ext/odbc/config.w32
deleted file mode 100644
index 2ff2a06998..0000000000
--- a/ext/odbc/config.w32
+++ /dev/null
@@ -1,12 +0,0 @@
-// $Id$
-// vim:ft=javascript
-
-ARG_ENABLE("odbc", "ODBC support", "yes");
-
-if (PHP_ODBC == "yes") {
- EXTENSION("odbc", "php_odbc.c");
- AC_DEFINE("HAVE_UODBC", 1, "ODBC support");
- ADD_FLAG('LIBS_ODBC', 'odbc32.lib odbccp32.lib');
-}
-
-
diff --git a/ext/odbc/php_birdstep.h b/ext/odbc/php_birdstep.h
deleted file mode 100644
index 4a7e92273a..0000000000
--- a/ext/odbc/php_birdstep.h
+++ /dev/null
@@ -1,92 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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. |
- +----------------------------------------------------------------------+
- | Authors: Nikolay P. Romanyuk <mag@redcom.ru> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifndef PHP_BIRDSTEP_H
-#define PHP_BIRDSTEP_H
-
-#if defined(HAVE_BIRDSTEP) && !HAVE_UODBC
-#define UNIX
-#include <sql.h>
-#include <sqlext.h>
-
-typedef struct VConn {
- HDBC hdbc;
- long index;
-} VConn;
-
-typedef struct {
- char name[32];
- char *value;
- long vallen;
- SDWORD valtype;
-} VResVal;
-
-typedef struct Vresult {
- HSTMT hstmt;
- VConn *conn;
- long index;
- VResVal *values;
- long numcols;
- int fetched;
-} Vresult;
-
-typedef struct {
- long num_links;
- long max_links;
- int le_link,le_result;
-} birdstep_module;
-
-extern zend_module_entry birdstep_module_entry;
-#define birdstep_module_ptr &birdstep_module_entry
-
-/* birdstep.c functions */
-PHP_MINIT_FUNCTION(birdstep);
-PHP_RINIT_FUNCTION(birdstep);
-PHP_MINFO_FUNCTION(birdstep);
-PHP_MSHUTDOWN_FUNCTION(birdstep);
-
-PHP_FUNCTION(birdstep_connect);
-PHP_FUNCTION(birdstep_close);
-PHP_FUNCTION(birdstep_exec);
-PHP_FUNCTION(birdstep_fetch);
-PHP_FUNCTION(birdstep_result);
-PHP_FUNCTION(birdstep_freeresult);
-PHP_FUNCTION(birdstep_autocommit);
-PHP_FUNCTION(birdstep_off_autocommit);
-PHP_FUNCTION(birdstep_commit);
-PHP_FUNCTION(birdstep_rollback);
-PHP_FUNCTION(birdstep_fieldnum);
-PHP_FUNCTION(birdstep_fieldname);
-
-extern birdstep_module php_birdstep_module;
-
-#else
-
-#define birdstep_module_ptr NULL
-
-#endif /* HAVE_BIRDSTEP */
-#endif /* PHP_BIRDSTEP_H */
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- */
diff --git a/ext/odbc/php_odbc.c b/ext/odbc/php_odbc.c
deleted file mode 100644
index c7eedc5c84..0000000000
--- a/ext/odbc/php_odbc.c
+++ /dev/null
@@ -1,3647 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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. |
- +----------------------------------------------------------------------+
- | Authors: Stig Sæther Bakken <ssb@php.net> |
- | Andreas Karajannis <Andreas.Karajannis@gmd.de> |
- | Frank M. Kromann <frank@kromann.info> Support for DB/2 CLI |
- | Kevin N. Shallow <kshallow@tampabay.rr.com> Birdstep Support|
- | Daniel R. Kalowsky <kalowsky@php.net> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "php.h"
-#include "php_globals.h"
-
-#include "ext/standard/info.h"
-#include "ext/standard/php_string.h"
-#include "ext/standard/php_standard.h"
-
-#include "php_odbc.h"
-#include "php_odbc_includes.h"
-#include "php_globals.h"
-
-#if HAVE_UODBC
-
-#include <fcntl.h>
-#include "ext/standard/head.h"
-#include "php_ini.h"
-
-#ifdef PHP_WIN32
-#include <winsock2.h>
-
-#define ODBC_TYPE "Win32"
-#define PHP_ODBC_TYPE ODBC_TYPE
-
-#endif
-
-/*
- * not defined elsewhere
- */
-
-#ifndef TRUE
-#define TRUE 1
-#define FALSE 0
-#endif
-
-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))
-
-/* {{{ odbc_functions[]
- */
-function_entry odbc_functions[] = {
- PHP_FE(odbc_autocommit, NULL)
- PHP_FE(odbc_binmode, NULL)
- PHP_FE(odbc_close, NULL)
- PHP_FE(odbc_close_all, NULL)
- PHP_FE(odbc_columns, NULL)
- PHP_FE(odbc_commit, NULL)
- PHP_FE(odbc_connect, NULL)
- PHP_FE(odbc_cursor, NULL)
-#ifdef HAVE_SQLDATASOURCES
- PHP_FE(odbc_data_source, NULL)
-#endif
- PHP_FE(odbc_execute, NULL)
- PHP_FE(odbc_error, NULL)
- PHP_FE(odbc_errormsg, NULL)
- PHP_FE(odbc_exec, NULL)
-#ifdef PHP_ODBC_HAVE_FETCH_HASH
- PHP_FE(odbc_fetch_array, NULL)
- PHP_FE(odbc_fetch_object, NULL)
-#endif
- PHP_FE(odbc_fetch_row, NULL)
- PHP_FE(odbc_fetch_into, second_arg_force_ref)
- PHP_FE(odbc_field_len, NULL)
- PHP_FE(odbc_field_scale, NULL)
- PHP_FE(odbc_field_name, NULL)
- PHP_FE(odbc_field_type, NULL)
- PHP_FE(odbc_field_num, NULL)
- PHP_FE(odbc_free_result, NULL)
- PHP_FE(odbc_gettypeinfo, NULL)
- PHP_FE(odbc_longreadlen, NULL)
-#if !defined(HAVE_SOLID) && !defined(HAVE_SOLID_30)
- PHP_FE(odbc_next_result, NULL)
-#endif
- PHP_FE(odbc_num_fields, NULL)
- PHP_FE(odbc_num_rows, NULL)
- PHP_FE(odbc_pconnect, NULL)
- PHP_FE(odbc_prepare, NULL)
- PHP_FE(odbc_result, NULL)
- PHP_FE(odbc_result_all, NULL)
- PHP_FE(odbc_rollback, NULL)
- PHP_FE(odbc_setoption, NULL)
- PHP_FE(odbc_specialcolumns, NULL)
- PHP_FE(odbc_statistics, NULL)
- PHP_FE(odbc_tables, NULL)
- PHP_FE(odbc_primarykeys, NULL)
-#if !defined(HAVE_DBMAKER) && !defined(HAVE_SOLID) && !defined(HAVE_SOLID_30) &&!defined(HAVE_SOLID_35) && !defined(HAVE_BIRDSTEP) /* not supported now */
- PHP_FE(odbc_columnprivileges, NULL)
- PHP_FE(odbc_tableprivileges, NULL)
-#endif
-#if !defined(HAVE_SOLID) && !defined(HAVE_SOLID_30) && !defined(HAVE_SOLID_35) /* not supported */
- PHP_FE(odbc_foreignkeys, NULL)
- PHP_FE(odbc_procedures, NULL)
-#if !defined(HAVE_BIRDSTEP)
- PHP_FE(odbc_procedurecolumns, NULL)
-#endif
-#endif
- PHP_FALIAS(odbc_do, odbc_exec, NULL)
- PHP_FALIAS(odbc_field_precision, odbc_field_len, NULL)
- { NULL, NULL, NULL }
-};
-/* }}} */
-
-/* {{{ odbc_module_entry
- */
-zend_module_entry odbc_module_entry = {
- STANDARD_MODULE_HEADER,
- "odbc",
- odbc_functions,
- PHP_MINIT(odbc),
- PHP_MSHUTDOWN(odbc),
- PHP_RINIT(odbc),
- PHP_RSHUTDOWN(odbc),
- PHP_MINFO(odbc),
- "1.0",
- STANDARD_MODULE_PROPERTIES
-};
-/* }}} */
-
-#ifdef ZTS
-int odbc_globals_id;
-#else
-ZEND_API php_odbc_globals odbc_globals;
-#endif
-
-#ifdef COMPILE_DL_ODBC
-ZEND_GET_MODULE(odbc)
-# ifdef PHP_WIN32
-# include "zend_arg_defs.c"
-# endif
-#endif
-
-/* {{{ _free_odbc_result
- */
-static void _free_odbc_result(zend_rsrc_list_entry *rsrc TSRMLS_DC)
-{
- odbc_result *res = (odbc_result *)rsrc->ptr;
- int i;
- RETCODE rc;
-
- if (res) {
- if (res->values) {
- for(i = 0; i < res->numcols; i++) {
- if (res->values[i].value)
- efree(res->values[i].value);
- }
- efree(res->values);
- res->values = NULL;
- }
- 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);
-#endif
- rc = SQLFreeStmt(res->stmt,SQL_DROP);
- /* We don't want the connection to be closed after the last statment has been closed
- * Connections will be closed on shutdown
- * zend_list_delete(res->conn_ptr->id);
- */
- }
- efree(res);
- }
-}
-/* }}} */
-
-/* {{{ safe_odbc_disconnect
- * disconnect, and if it fails, then issue a rollback for any pending transaction (lurcher)
- */
-static void safe_odbc_disconnect( void *handle )
-{
- int ret;
-
- ret = SQLDisconnect( handle );
- if ( ret == SQL_ERROR )
- {
- SQLTransact( NULL, handle, SQL_ROLLBACK );
- SQLDisconnect( handle );
- }
-}
-/* }}} */
-
-/* {{{ _close_odbc_conn
- */
-static void _close_odbc_conn(zend_rsrc_list_entry *rsrc TSRMLS_DC)
-{
- int i, nument, type;
- void *ptr;
- odbc_result *res;
-
- odbc_connection *conn = (odbc_connection *)rsrc->ptr;
-
- nument = zend_hash_next_free_element(&EG(regular_list));
- for(i = 1; i < nument; i++) {
- ptr = zend_list_find(i, &type);
- if (ptr && (type == le_result)) {
- res = (odbc_result *)ptr;
- if (res->conn_ptr == conn) {
- zend_list_delete(i);
- }
- }
- }
-
- safe_odbc_disconnect(conn->hdbc);
- SQLFreeConnect(conn->hdbc);
- SQLFreeEnv(conn->henv);
- efree(conn);
- ODBCG(num_links)--;
-}
-/* }}} */
-
-/* {{{ void _close_odbc_pconn
- */
-static void _close_odbc_pconn(zend_rsrc_list_entry *rsrc TSRMLS_DC)
-{
- int i, nument, type;
- void *ptr;
- odbc_result *res;
- odbc_connection *conn = (odbc_connection *)rsrc->ptr;
-
- nument = zend_hash_next_free_element(&EG(regular_list));
- for(i = 1; i < nument; i++) {
- ptr = zend_list_find(i, &type);
- if (ptr && (type == le_result)) {
- res = (odbc_result *)ptr;
- if (res->conn_ptr == conn) {
- zend_list_delete(i);
- }
- }
- }
-
- safe_odbc_disconnect(conn->hdbc);
- SQLFreeConnect(conn->hdbc);
- SQLFreeEnv(conn->henv);
- free(conn);
-
- ODBCG(num_links)--;
- ODBCG(num_persistent)--;
-}
-/* }}} */
-
-/* {{{ PHP_INI_DISP(display_link_nums)
- */
-static PHP_INI_DISP(display_link_nums)
-{
- 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) {
- if (atoi(value) == -1) {
- PUTS("Unlimited");
- } else {
- php_printf("%s", value);
- }
- }
-}
-/* }}} */
-
-/* {{{ PHP_INI_DISP(display_defPW)
- */
-static PHP_INI_DISP(display_defPW)
-{
- 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) {
-#if PHP_DEBUG
- php_printf("%s", value);
-#else
- PUTS("********");
-#endif
- } else {
- PUTS("<i>no value</i>");
- }
-}
-/* }}} */
-
-/* {{{ PHP_INI_DISP(display_binmode)
- */
-static PHP_INI_DISP(display_binmode)
-{
- 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 0:
- PUTS("passthru");
- break;
- case 1:
- PUTS("return as is");
- break;
- case 2:
- PUTS("return as char");
- break;
- }
- }
-}
-/* }}} */
-
-/* {{{ PHP_INI_DISP(display_lrl)
- */
-static PHP_INI_DISP(display_lrl)
-{
- 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) {
- if (atoi(value) <= 0) {
- PUTS("Passthru");
- } else {
- php_printf("return up to %s bytes", value);
- }
- }
-}
-/* }}} */
-
-/* {{{ PHP_INI_BEGIN
- */
-PHP_INI_BEGIN()
- STD_PHP_INI_BOOLEAN("odbc.allow_persistent", "1", PHP_INI_SYSTEM, OnUpdateLong,
- allow_persistent, php_odbc_globals, odbc_globals)
- STD_PHP_INI_ENTRY_EX("odbc.max_persistent", "-1", PHP_INI_SYSTEM, OnUpdateLong,
- max_persistent, php_odbc_globals, odbc_globals, display_link_nums)
- STD_PHP_INI_ENTRY_EX("odbc.max_links", "-1", PHP_INI_SYSTEM, OnUpdateLong,
- max_links, php_odbc_globals, odbc_globals, display_link_nums)
- STD_PHP_INI_ENTRY("odbc.default_db", NULL, PHP_INI_ALL, OnUpdateString,
- defDB, php_odbc_globals, odbc_globals)
- STD_PHP_INI_ENTRY("odbc.default_user", NULL, PHP_INI_ALL, OnUpdateString,
- defUser, php_odbc_globals, odbc_globals)
- STD_PHP_INI_ENTRY_EX("odbc.default_pw", NULL, PHP_INI_ALL, OnUpdateString,
- defPW, php_odbc_globals, odbc_globals, display_defPW)
- STD_PHP_INI_ENTRY_EX("odbc.defaultlrl", "4096", PHP_INI_ALL, OnUpdateLong,
- defaultlrl, php_odbc_globals, odbc_globals, display_lrl)
- STD_PHP_INI_ENTRY_EX("odbc.defaultbinmode", "1", PHP_INI_ALL, OnUpdateLong,
- defaultbinmode, php_odbc_globals, odbc_globals, display_binmode)
- STD_PHP_INI_BOOLEAN("odbc.check_persistent", "1", PHP_INI_SYSTEM, OnUpdateLong,
- check_persistent, php_odbc_globals, odbc_globals)
-PHP_INI_END()
-/* }}} */
-
-#ifdef ZTS
-static void php_odbc_init_globals(php_odbc_globals *odbc_globals_p TSRMLS_DC)
-{
- ODBCG(num_persistent) = 0;
-}
-#endif
-
-/* {{{ PHP_MINIT_FUNCTION */
-PHP_MINIT_FUNCTION(odbc)
-{
-#ifdef SQLANY_BUG
- ODBC_SQL_CONN_T foobar;
- RETCODE rc;
-#endif
-
-#ifdef ZTS
- ts_allocate_id(&odbc_globals_id, sizeof(php_odbc_globals), php_odbc_init_globals, NULL);
-#else
- ODBCG(num_persistent) = 0;
-#endif
-
- REGISTER_INI_ENTRIES();
- le_result = zend_register_list_destructors_ex(_free_odbc_result, NULL, "odbc result", module_number);
- le_conn = zend_register_list_destructors_ex(_close_odbc_conn, NULL, "odbc link", module_number);
- le_pconn = zend_register_list_destructors_ex(NULL, _close_odbc_pconn, "odbc link persistent", module_number);
- Z_TYPE(odbc_module_entry) = type;
-
- REGISTER_STRING_CONSTANT("ODBC_TYPE", PHP_ODBC_TYPE, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("ODBC_BINMODE_PASSTHRU", 0, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("ODBC_BINMODE_RETURN", 1, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("ODBC_BINMODE_CONVERT", 2, CONST_CS | CONST_PERSISTENT);
- /* Define Constants for options
- these Constants are defined in <sqlext.h>
- */
- REGISTER_LONG_CONSTANT("SQL_ODBC_CURSORS", SQL_ODBC_CURSORS, CONST_PERSISTENT | CONST_CS);
- REGISTER_LONG_CONSTANT("SQL_CUR_USE_DRIVER", SQL_CUR_USE_DRIVER, CONST_PERSISTENT | CONST_CS);
- REGISTER_LONG_CONSTANT("SQL_CUR_USE_IF_NEEDED", SQL_CUR_USE_IF_NEEDED, CONST_PERSISTENT | CONST_CS);
- REGISTER_LONG_CONSTANT("SQL_CUR_USE_ODBC", SQL_CUR_USE_ODBC, CONST_PERSISTENT | CONST_CS);
-
-
- REGISTER_LONG_CONSTANT("SQL_CONCURRENCY", SQL_CONCURRENCY, CONST_PERSISTENT | CONST_CS);
- REGISTER_LONG_CONSTANT("SQL_CONCUR_READ_ONLY", SQL_CONCUR_READ_ONLY, CONST_PERSISTENT | CONST_CS);
- REGISTER_LONG_CONSTANT("SQL_CONCUR_LOCK", SQL_CONCUR_LOCK, CONST_PERSISTENT | CONST_CS);
- REGISTER_LONG_CONSTANT("SQL_CONCUR_ROWVER", SQL_CONCUR_ROWVER, CONST_PERSISTENT | CONST_CS);
- REGISTER_LONG_CONSTANT("SQL_CONCUR_VALUES", SQL_CONCUR_VALUES, CONST_PERSISTENT | CONST_CS);
-
- REGISTER_LONG_CONSTANT("SQL_CURSOR_TYPE", SQL_CURSOR_TYPE, CONST_PERSISTENT | CONST_CS);
- REGISTER_LONG_CONSTANT("SQL_CURSOR_FORWARD_ONLY", SQL_CURSOR_FORWARD_ONLY, CONST_PERSISTENT | CONST_CS);
- REGISTER_LONG_CONSTANT("SQL_CURSOR_KEYSET_DRIVEN", SQL_CURSOR_KEYSET_DRIVEN, CONST_PERSISTENT | CONST_CS);
- REGISTER_LONG_CONSTANT("SQL_CURSOR_DYNAMIC", SQL_CURSOR_DYNAMIC, CONST_PERSISTENT | CONST_CS);
- REGISTER_LONG_CONSTANT("SQL_CURSOR_STATIC", SQL_CURSOR_STATIC, CONST_PERSISTENT | CONST_CS);
-
- REGISTER_LONG_CONSTANT("SQL_KEYSET_SIZE", SQL_KEYSET_SIZE, CONST_PERSISTENT | CONST_CS);
-
- /* these are for the Data Source type */
- REGISTER_LONG_CONSTANT("SQL_FETCH_FIRST", SQL_FETCH_FIRST, CONST_PERSISTENT | CONST_CS);
- REGISTER_LONG_CONSTANT("SQL_FETCH_NEXT", SQL_FETCH_NEXT, CONST_PERSISTENT | CONST_CS);
-
- /*
- * register the standard data types
- */
- REGISTER_LONG_CONSTANT("SQL_CHAR", SQL_CHAR, CONST_PERSISTENT | CONST_CS);
- REGISTER_LONG_CONSTANT("SQL_VARCHAR", SQL_VARCHAR, CONST_PERSISTENT | CONST_CS);
- REGISTER_LONG_CONSTANT("SQL_LONGVARCHAR", SQL_LONGVARCHAR, CONST_PERSISTENT | CONST_CS);
- REGISTER_LONG_CONSTANT("SQL_DECIMAL", SQL_DECIMAL, CONST_PERSISTENT | CONST_CS);
- REGISTER_LONG_CONSTANT("SQL_NUMERIC", SQL_NUMERIC, CONST_PERSISTENT | CONST_CS);
- REGISTER_LONG_CONSTANT("SQL_BIT", SQL_BIT, CONST_PERSISTENT | CONST_CS);
- REGISTER_LONG_CONSTANT("SQL_TINYINT", SQL_TINYINT, CONST_PERSISTENT | CONST_CS);
- REGISTER_LONG_CONSTANT("SQL_SMALLINT", SQL_SMALLINT, CONST_PERSISTENT | CONST_CS);
- REGISTER_LONG_CONSTANT("SQL_INTEGER", SQL_INTEGER, CONST_PERSISTENT | CONST_CS);
- REGISTER_LONG_CONSTANT("SQL_BIGINT", SQL_BIGINT, CONST_PERSISTENT | CONST_CS);
- REGISTER_LONG_CONSTANT("SQL_REAL", SQL_REAL, CONST_PERSISTENT | CONST_CS);
- REGISTER_LONG_CONSTANT("SQL_FLOAT", SQL_FLOAT, CONST_PERSISTENT | CONST_CS);
- REGISTER_LONG_CONSTANT("SQL_DOUBLE", SQL_DOUBLE, CONST_PERSISTENT | CONST_CS);
- REGISTER_LONG_CONSTANT("SQL_BINARY", SQL_BINARY, CONST_PERSISTENT | CONST_CS);
- REGISTER_LONG_CONSTANT("SQL_VARBINARY", SQL_VARBINARY, CONST_PERSISTENT | CONST_CS);
- REGISTER_LONG_CONSTANT("SQL_LONGVARBINARY", SQL_LONGVARBINARY, CONST_PERSISTENT | CONST_CS);
- REGISTER_LONG_CONSTANT("SQL_DATE", SQL_DATE, CONST_PERSISTENT | CONST_CS);
- REGISTER_LONG_CONSTANT("SQL_TIME", SQL_TIME, CONST_PERSISTENT | CONST_CS);
- REGISTER_LONG_CONSTANT("SQL_TIMESTAMP", SQL_TIMESTAMP, CONST_PERSISTENT | CONST_CS);
-#if defined(ODBCVER) && (ODBCVER >= 0x0300)
- REGISTER_LONG_CONSTANT("SQL_TYPE_DATE", SQL_TYPE_DATE, CONST_PERSISTENT | CONST_CS);
- REGISTER_LONG_CONSTANT("SQL_TYPE_TIME", SQL_TYPE_TIME, CONST_PERSISTENT | CONST_CS);
- REGISTER_LONG_CONSTANT("SQL_TYPE_TIMESTAMP", SQL_TYPE_TIMESTAMP, CONST_PERSISTENT | CONST_CS);
-
- /*
- * SQLSpecialColumns values
- */
- REGISTER_LONG_CONSTANT("SQL_BEST_ROWID", SQL_BEST_ROWID, CONST_PERSISTENT | CONST_CS);
- REGISTER_LONG_CONSTANT("SQL_ROWVER", SQL_ROWVER, CONST_PERSISTENT | CONST_CS);
- REGISTER_LONG_CONSTANT("SQL_SCOPE_CURROW", SQL_SCOPE_CURROW, CONST_PERSISTENT | CONST_CS);
- REGISTER_LONG_CONSTANT("SQL_SCOPE_TRANSACTION", SQL_SCOPE_TRANSACTION, CONST_PERSISTENT | CONST_CS);
- REGISTER_LONG_CONSTANT("SQL_SCOPE_SESSION", SQL_SCOPE_SESSION, CONST_PERSISTENT | CONST_CS);
- REGISTER_LONG_CONSTANT("SQL_NO_NULLS", SQL_NO_NULLS, CONST_PERSISTENT | CONST_CS);
- REGISTER_LONG_CONSTANT("SQL_NULLABLE", SQL_NULLABLE, CONST_PERSISTENT | CONST_CS);
-
- /*
- * SQLStatistics values
- */
- REGISTER_LONG_CONSTANT("SQL_INDEX_UNIQUE", SQL_INDEX_UNIQUE, CONST_PERSISTENT | CONST_CS);
- REGISTER_LONG_CONSTANT("SQL_INDEX_ALL", SQL_INDEX_ALL, CONST_PERSISTENT | CONST_CS);
- REGISTER_LONG_CONSTANT("SQL_ENSURE", SQL_ENSURE, CONST_PERSISTENT | CONST_CS);
- REGISTER_LONG_CONSTANT("SQL_QUICK", SQL_QUICK, CONST_PERSISTENT | CONST_CS);
-#endif
-
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ PHP_RINIT_FUNCTION */
-PHP_RINIT_FUNCTION(odbc)
-{
- ODBCG(defConn) = -1;
- ODBCG(num_links) = ODBCG(num_persistent);
- memset(ODBCG(laststate), '\0', 6);
- memset(ODBCG(lasterrormsg), '\0', SQL_MAX_MESSAGE_LENGTH);
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ PHP_RSHUTDOWN_FUNCTION */
-PHP_RSHUTDOWN_FUNCTION(odbc)
-{
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ PHP_MSHUTDOWN_FUNCTION */
-PHP_MSHUTDOWN_FUNCTION(odbc)
-{
- UNREGISTER_INI_ENTRIES();
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ PHP_MINFO_FUNCTION */
-PHP_MINFO_FUNCTION(odbc)
-{
- char buf[32];
-
- php_info_print_table_start();
- php_info_print_table_header(2, "ODBC Support", "enabled");
- sprintf(buf, "%ld", ODBCG(num_persistent));
- php_info_print_table_row(2, "Active Persistent Links", buf);
- sprintf(buf, "%ld", ODBCG(num_links));
- php_info_print_table_row(2, "Active Links", buf);
- php_info_print_table_row(2, "ODBC library", PHP_ODBC_TYPE);
-#ifndef PHP_WIN32
- php_info_print_table_row(2, "ODBC_INCLUDE", PHP_ODBC_INCLUDE);
- php_info_print_table_row(2, "ODBC_LFLAGS", PHP_ODBC_LFLAGS);
- php_info_print_table_row(2, "ODBC_LIBS", PHP_ODBC_LIBS);
-#endif
- php_info_print_table_end();
-
- DISPLAY_INI_ENTRIES();
-
-}
-/* }}} */
-
-/* {{{ odbc_sql_error */
-void odbc_sql_error(ODBC_SQL_ERROR_PARAMS)
-{
- char state[6];
- SDWORD error; /* Not used */
- char errormsg[SQL_MAX_MESSAGE_LENGTH];
- SWORD errormsgsize; /* Not used */
- RETCODE rc;
- ODBC_SQL_ENV_T henv;
- ODBC_SQL_CONN_T conn;
- TSRMLS_FETCH();
-
- if (conn_resource) {
- henv = conn_resource->henv;
- conn = conn_resource->hdbc;
- } else {
- henv = SQL_NULL_HENV;
- conn = SQL_NULL_HDBC;
- }
-
- /* This leads to an endless loop in many drivers!
- *
- while(henv != SQL_NULL_HENV){
- do {
- */
- rc = SQLError(henv, conn, stmt, state, &error, errormsg, sizeof(errormsg)-1, &errormsgsize);
- if (conn_resource) {
- memcpy(conn_resource->laststate, state, sizeof(state));
- memcpy(conn_resource->lasterrormsg, errormsg, sizeof(errormsg));
- }
- memcpy(ODBCG(laststate), state, sizeof(state));
- memcpy(ODBCG(lasterrormsg), errormsg, sizeof(errormsg));
- if (func) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "SQL error: %s, SQL state %s in %s", errormsg, state, func);
- } else {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "SQL error: %s, SQL state %s", errormsg, state);
- }
- /*
- } while (SQL_SUCCEEDED(rc));
- }
- */
-}
-/* }}} */
-
-/* {{{ php_odbc_fetch_attribs */
-void php_odbc_fetch_attribs(INTERNAL_FUNCTION_PARAMETERS, int mode)
-{
- odbc_result *result;
- pval **pv_res, **pv_flag;
-
- if (zend_get_parameters_ex(2, &pv_res, &pv_flag) == FAILURE)
- WRONG_PARAM_COUNT;
-
- convert_to_long_ex(pv_flag);
-
- if (Z_LVAL_PP(pv_res)) {
- ZEND_FETCH_RESOURCE(result, odbc_result *, pv_res, -1, "ODBC result", le_result);
- if (mode)
- result->longreadlen = Z_LVAL_PP(pv_flag);
- else
- result->binmode = Z_LVAL_PP(pv_flag);
- } else {
- if (mode)
- ODBCG(defaultlrl) = Z_LVAL_PP(pv_flag);
- else
- ODBCG(defaultbinmode) = Z_LVAL_PP(pv_flag);
- }
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ odbc_bindcols */
-int odbc_bindcols(odbc_result *result TSRMLS_DC)
-{
- RETCODE rc;
- int i;
- SWORD colnamelen; /* Not used */
- SDWORD displaysize;
-
- result->values = (odbc_result_value *) safe_emalloc(sizeof(odbc_result_value), result->numcols, 0);
-
- result->longreadlen = ODBCG(defaultlrl);
- result->binmode = ODBCG(defaultbinmode);
-
- for(i = 0; i < result->numcols; i++) {
- rc = SQLColAttributes(result->stmt, (UWORD)(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,
- NULL, 0, NULL, &result->values[i].coltype);
-
- /* Don't bind LONG / BINARY columns, so that fetch behaviour can
- * be controlled by odbc_binmode() / odbc_longreadlen()
- */
-
- switch(result->values[i].coltype) {
- case SQL_BINARY:
- case SQL_VARBINARY:
- case SQL_LONGVARBINARY:
- case SQL_LONGVARCHAR:
- result->values[i].value = NULL;
- break;
-
-#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,
- 27, &result->values[i].vallen);
- break;
-#endif /* HAVE_ADABAS */
- default:
- rc = SQLColAttributes(result->stmt, (UWORD)(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,
- displaysize + 1, &result->values[i].vallen);
- break;
- }
- }
- return 1;
-}
-/* }}} */
-
-/* {{{ odbc_transact */
-void odbc_transact(INTERNAL_FUNCTION_PARAMETERS, int type)
-{
- odbc_connection *conn;
- RETCODE rc;
- pval **pv_conn;
-
- if (zend_get_parameters_ex(1, &pv_conn) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- 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));
- if (rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) {
- odbc_sql_error(conn, SQL_NULL_HSTMT, "SQLTransact");
- RETURN_FALSE;
- }
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ _close_pconn_with_id */
-static int _close_pconn_with_id(list_entry *le, int *id TSRMLS_DC)
-{
- if(Z_TYPE_P(le) == le_pconn && (((odbc_connection *)(le->ptr))->id == *id)){
- return 1;
- }else{
- return 0;
- }
-}
-/* }}} */
-
-/* {{{ odbc_column_lengths */
-void odbc_column_lengths(INTERNAL_FUNCTION_PARAMETERS, int type)
-{
- odbc_result *result;
-#if defined(HAVE_SOLID) || defined(HAVE_SOLID_30) || defined(HAVE_OPENLINK)
- /* 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
- * SQL_INTEGER which does not work (despite being the same type as a SDWORD.
- * Solid 3.5 does not have this issue.
- */
- SDWORD len;
-#else
- SQLINTEGER len;
-#endif
- pval **pv_res, **pv_num;
-
- if (zend_get_parameters_ex(2, &pv_res, &pv_num) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long_ex(pv_num);
-
- ZEND_FETCH_RESOURCE(result, odbc_result *, pv_res, -1, "ODBC result", le_result);
-
- if (result->numcols == 0) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "No tuples available at this result index");
- RETURN_FALSE;
- }
-
- if (Z_LVAL_PP(pv_num) > result->numcols) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Field index larger than number of fields");
- RETURN_FALSE;
- }
-
- if (Z_LVAL_PP(pv_num) < 1) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Field numbering starts at 1");
- RETURN_FALSE;
- }
-
- SQLColAttributes(result->stmt, (UWORD)Z_LVAL_PP(pv_num),
- (SQLUSMALLINT) (type?SQL_COLUMN_SCALE:SQL_COLUMN_PRECISION),
- NULL, 0, NULL, &len);
-
- RETURN_LONG(len);
-}
-/* }}} */
-
-/* Main User Functions */
-
-/* {{{ proto void odbc_close_all(void)
- Close all ODBC connections */
-PHP_FUNCTION(odbc_close_all)
-{
- void *ptr;
- int type;
- int i;
- int nument;
-
- if (ZEND_NUM_ARGS() != 0) {
- WRONG_PARAM_COUNT;
- }
-
- nument = zend_hash_next_free_element(&EG(regular_list));
-
- /* Loop through list and close all statements */
- for(i = 1; i < nument; i++) {
- ptr = zend_list_find(i, &type);
- if (ptr && (type == le_result)){
- zend_list_delete(i);
- }
- }
-
- /* Second loop through list, now close all connections */
- nument = zend_hash_next_free_element(&EG(regular_list));
-
- for(i = 1; i < nument; i++) {
- ptr = zend_list_find(i, &type);
- if (ptr){
- if(type == le_conn){
- zend_list_delete(i);
- }else if(type == le_pconn){
- zend_list_delete(i);
- /* Delete the persistent connection */
- zend_hash_apply_with_argument(&EG(persistent_list),
- (apply_func_arg_t) _close_pconn_with_id, (void *) &i TSRMLS_CC);
- }
- }
- }
-}
-/* }}} */
-
-/* {{{ proto bool odbc_binmode(int result_id, int mode)
- Handle binary column data */
-PHP_FUNCTION(odbc_binmode)
-{
- php_odbc_fetch_attribs(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0);
-}
-/* }}} */
-
-/* {{{ proto bool odbc_longreadlen(int result_id, int length)
- Handle LONG columns */
-PHP_FUNCTION(odbc_longreadlen)
-{
- php_odbc_fetch_attribs(INTERNAL_FUNCTION_PARAM_PASSTHRU, 1);
-}
-/* }}} */
-
-/* {{{ proto resource odbc_prepare(resource connection_id, string query)
- Prepares a statement for execution */
-PHP_FUNCTION(odbc_prepare)
-{
- pval **pv_conn, **pv_query;
- char *query;
- odbc_result *result = NULL;
- odbc_connection *conn;
- RETCODE rc;
-#ifdef HAVE_SQL_EXTENDED_FETCH
- UDWORD scrollopts;
-#endif
-
- if (zend_get_parameters_ex(2, &pv_conn, &pv_query) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE2(conn, odbc_connection *, pv_conn, -1, "ODBC-Link", le_conn, le_pconn);
-
- convert_to_string_ex(pv_query);
- query = Z_STRVAL_PP(pv_query);
-
- result = (odbc_result *)ecalloc(1, sizeof(odbc_result));
-
- result->numparams = 0;
-
- rc = SQLAllocStmt(conn->hdbc, &(result->stmt));
- if (rc == SQL_INVALID_HANDLE) {
- efree(result);
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "SQLAllocStmt error 'Invalid Handle'");
- RETURN_FALSE;
- }
-
- if (rc == SQL_ERROR) {
- odbc_sql_error(conn, SQL_NULL_HSTMT, "SQLAllocStmt");
- efree(result);
- RETURN_FALSE;
- }
-
-#ifdef HAVE_SQL_EXTENDED_FETCH
- /* Solid doesn't have ExtendedFetch, if DriverManager is used, get Info,
- whether Driver supports ExtendedFetch */
- rc = SQLGetInfo(conn->hdbc, SQL_FETCH_DIRECTION, (void *) &scrollopts, sizeof(scrollopts), NULL);
- if (rc == SQL_SUCCESS) {
- if ((result->fetch_abs = (scrollopts & SQL_FD_FETCH_ABSOLUTE))) {
- /* 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) {
- odbc_sql_error(conn, result->stmt, " SQLSetStmtOption");
- SQLFreeStmt(result->stmt, SQL_DROP);
- efree(result);
- RETURN_FALSE;
- }
- }
- } else {
- result->fetch_abs = 0;
- }
-#endif
-
- rc = SQLPrepare(result->stmt, query, SQL_NTS);
- switch (rc) {
- case SQL_SUCCESS:
- break;
- case SQL_SUCCESS_WITH_INFO:
- odbc_sql_error(conn, result->stmt, "SQLPrepare");
- break;
- default:
- odbc_sql_error(conn, result->stmt, "SQLPrepare");
- RETURN_FALSE;
- }
-
- SQLNumParams(result->stmt, &(result->numparams));
- SQLNumResultCols(result->stmt, &(result->numcols));
-
- if (result->numcols > 0) {
- if (!odbc_bindcols(result TSRMLS_CC)) {
- efree(result);
- RETURN_FALSE;
- }
- } else {
- result->values = NULL;
- }
- result->id = zend_list_insert(result, le_result);
- zend_list_addref(conn->id);
- result->conn_ptr = conn;
- result->fetched = 0;
- RETURN_RESOURCE(result->id);
-}
-/* }}} */
-
-/*
- * Execute prepared SQL statement. Supports only input parameters.
- */
-
-/* {{{ proto bool odbc_execute(resource result_id [, array parameters_array])
- Execute a prepared statement */
-PHP_FUNCTION(odbc_execute)
-{
- pval **pv_res, **pv_param_arr, **tmp;
- typedef struct params_t {
- SDWORD vallen;
- int fp;
- } params_t;
- params_t *params = NULL;
- char *filename;
- unsigned char otype;
- SWORD sqltype, ctype, scale;
- SWORD nullable;
- UDWORD precision;
- odbc_result *result;
- int numArgs, i, ne;
- RETCODE rc;
-
- numArgs = ZEND_NUM_ARGS();
- switch(numArgs) {
- case 1:
- if (zend_get_parameters_ex(1, &pv_res) == FAILURE)
- WRONG_PARAM_COUNT;
- break;
- case 2:
- if (zend_get_parameters_ex(2, &pv_res, &pv_param_arr) == FAILURE)
- WRONG_PARAM_COUNT;
- if (Z_TYPE_PP(pv_param_arr) != IS_ARRAY) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "No array passed");
- RETURN_FALSE;
- }
- break;
- default:
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(result, odbc_result *, pv_res, -1, "ODBC result", le_result);
-
- /* XXX check for already bound parameters*/
- if (result->numparams > 0 && numArgs == 1) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "No parameters to SQL statement given");
- RETURN_FALSE;
- }
-
- if (result->numparams > 0) {
- if ((ne = zend_hash_num_elements(Z_ARRVAL_PP(pv_param_arr))) < result->numparams) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING,"Not enough parameters (%d should be %d) given", ne, result->numparams);
- RETURN_FALSE;
- }
-
- zend_hash_internal_pointer_reset(Z_ARRVAL_PP(pv_param_arr));
- params = (params_t *)safe_emalloc(sizeof(params_t), result->numparams, 0);
-
- for(i = 1; i <= result->numparams; i++) {
- if (zend_hash_get_current_data(Z_ARRVAL_PP(pv_param_arr), (void **) &tmp) == FAILURE) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING,"Error getting parameter");
- SQLFreeStmt(result->stmt,SQL_RESET_PARAMS);
- efree(params);
- 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");
- SQLFreeStmt(result->stmt, SQL_RESET_PARAMS);
- efree(params);
- RETURN_FALSE;
- }
-
- SQLDescribeParam(result->stmt, (UWORD)i, &sqltype, &precision,
- &scale, &nullable);
- params[i-1].vallen = Z_STRLEN_PP(tmp);
- params[i-1].fp = -1;
-
- if (IS_SQL_BINARY(sqltype))
- ctype = SQL_C_BINARY;
- else
- ctype = SQL_C_CHAR;
-
- if (Z_STRLEN_PP(tmp) > 2 &&
- Z_STRVAL_PP(tmp)[0] == '\'' &&
- Z_STRVAL_PP(tmp)[Z_STRLEN_PP(tmp) - 1] == '\'') {
- filename = estrndup(&Z_STRVAL_PP(tmp)[1], Z_STRLEN_PP(tmp) - 2);
- filename[strlen(filename)] = '\0';
-
- /* Check for safe mode. */
- if (PG(safe_mode) && (!php_checkuid(filename, NULL, CHECKUID_CHECK_FILE_AND_DIR))) {
- efree(filename);
- efree(params);
- RETURN_FALSE;
- }
-
- /* Check the basedir */
- if (php_check_open_basedir(filename TSRMLS_CC)) {
- efree(filename);
- efree(params);
- RETURN_FALSE;
- }
-
- if ((params[i-1].fp = open(filename,O_RDONLY)) == -1) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING,"Can't open file %s", filename);
- SQLFreeStmt(result->stmt, SQL_RESET_PARAMS);
- for(i = 0; i < result->numparams; i++) {
- if (params[i].fp != -1) {
- close(params[i].fp);
- }
- }
- efree(params);
- efree(filename);
- RETURN_FALSE;
- }
-
- efree(filename);
-
- params[i-1].vallen = SQL_LEN_DATA_AT_EXEC(0);
-
- rc = SQLBindParameter(result->stmt, (UWORD)i, SQL_PARAM_INPUT,
- ctype, sqltype, precision, scale,
- (void *)params[i-1].fp, 0,
- &params[i-1].vallen);
- } else {
-#ifdef HAVE_DBMAKER
- precision = params[i-1].vallen;
-#endif
- if (otype == IS_NULL) {
- params[i-1].vallen = SQL_NULL_DATA;
- }
-
- rc = SQLBindParameter(result->stmt, (UWORD)i, SQL_PARAM_INPUT,
- ctype, sqltype, precision, scale,
- Z_STRVAL_PP(tmp), 0,
- &params[i-1].vallen);
- }
- zend_hash_move_forward(Z_ARRVAL_PP(pv_param_arr));
- }
- }
- /* Close cursor, needed for doing multiple selects */
- rc = SQLFreeStmt(result->stmt, SQL_CLOSE);
-
- if (rc == SQL_ERROR) {
- odbc_sql_error(result->conn_ptr, result->stmt, "SQLFreeStmt");
- }
-
- rc = SQLExecute(result->stmt);
-
- result->fetched = 0;
- if (rc == SQL_NEED_DATA) {
- char buf[4096];
- int fp, nbytes;
- while(rc == SQL_NEED_DATA) {
- rc = SQLParamData(result->stmt, (void*)&fp);
- if (rc == SQL_NEED_DATA) {
- while((nbytes = read(fp, &buf, 4096)) > 0)
- SQLPutData(result->stmt, (void*)&buf, nbytes);
- }
- }
- } else {
- switch (rc) {
- case SQL_SUCCESS:
- break;
- case SQL_NO_DATA_FOUND:
- case SQL_SUCCESS_WITH_INFO:
- odbc_sql_error(result->conn_ptr, result->stmt, "SQLExecute");
- break;
- default:
- odbc_sql_error(result->conn_ptr, result->stmt, "SQLExecute");
- RETVAL_FALSE;
- }
- }
-
- if (result->numparams > 0) {
- SQLFreeStmt(result->stmt, SQL_RESET_PARAMS);
- for(i = 0; i < result->numparams; i++) {
- if (params[i].fp != -1)
- close(params[i].fp);
- }
- efree(params);
- }
-
- if (rc == SQL_SUCCESS || rc == SQL_SUCCESS_WITH_INFO || rc == SQL_NO_DATA_FOUND) {
- RETVAL_TRUE;
- }
-
- if (result->numcols == 0) {
- SQLNumResultCols(result->stmt, &(result->numcols));
-
- if (result->numcols > 0) {
- if (!odbc_bindcols(result TSRMLS_CC)) {
- efree(result);
- RETVAL_FALSE;
- }
- } else {
- result->values = NULL;
- }
- }
-}
-/* }}} */
-
-/* {{{ proto string odbc_cursor(resource result_id)
- Get cursor name */
-PHP_FUNCTION(odbc_cursor)
-{
- pval **pv_res;
- SWORD len, max_len;
- char *cursorname;
- odbc_result *result;
- RETCODE rc;
-
- if (zend_get_parameters_ex(1, &pv_res) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(result, odbc_result *, pv_res, -1, "ODBC result", le_result);
-
- rc = SQLGetInfo(result->conn_ptr->hdbc,SQL_MAX_CURSOR_NAME_LEN,
- (void *)&max_len,sizeof(max_len),&len);
- if (rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) {
- RETURN_FALSE;
- }
-
- if (max_len > 0) {
- cursorname = emalloc(max_len + 1);
- rc = SQLGetCursorName(result->stmt,cursorname,(SWORD)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 */
-
- SQLError( result->conn_ptr->henv, result->conn_ptr->hdbc,
- result->stmt, state, &error, errormsg,
- sizeof(errormsg)-1, &errormsgsize);
- if (!strncmp(state,"S1015",5)) {
- sprintf(cursorname,"php_curs_%d", (int)result->stmt);
- if (SQLSetCursorName(result->stmt,cursorname,SQL_NTS) != SQL_SUCCESS) {
- odbc_sql_error(result->conn_ptr, result->stmt, "SQLSetCursorName");
- RETVAL_FALSE;
- } else {
- RETVAL_STRING(cursorname,1);
- }
- } else {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "SQL error: %s, SQL state %s", errormsg, state);
- RETVAL_FALSE;
- }
- } else {
- RETVAL_STRING(cursorname,1);
- }
- efree(cursorname);
- } else {
- RETVAL_FALSE;
- }
-}
-/* }}} */
-
-#ifdef HAVE_SQLDATASOURCES
-/* {{{ proto array odbc_data_source(resource connection_id, int fetch_type)
- Return information about the currently connected data source */
-PHP_FUNCTION(odbc_data_source)
-{
- zval **zv_fetch_type, **zv_conn;
- RETCODE rc = 0; /* assume all is good */
- odbc_connection *conn;
- int num_args = ZEND_NUM_ARGS();
- UCHAR server_name[100],
- desc[200];
- SQLSMALLINT len1=0, len2=0, fetch_type;
-
- if (num_args != 2) {
- WRONG_PARAM_COUNT;
- }
-
- if (zend_get_parameters_ex(2, &zv_conn, &zv_fetch_type) == FAILURE) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to get parameters");
- RETURN_FALSE;
- }
-
- convert_to_long_ex(zv_fetch_type);
- fetch_type = (SQLSMALLINT)Z_LVAL_PP(zv_fetch_type);
-
- if (!(fetch_type == SQL_FETCH_FIRST ||
- fetch_type == SQL_FETCH_NEXT)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid fetch type (%d)", fetch_type);
- RETURN_FALSE;
- }
-
- ZEND_FETCH_RESOURCE2(conn, odbc_connection *, zv_conn, -1, "ODBC-Link", le_conn, le_pconn);
-
- /* now we have the "connection" lets call the DataSource object */
- rc = SQLDataSources(conn->henv,
- fetch_type,
- server_name,
- (SQLSMALLINT)sizeof(server_name),
- &len1,
- desc,
- (SQLSMALLINT)sizeof(desc),
- &len2);
-
- if (rc != SQL_SUCCESS) {
- /* ummm.... he did it */
- odbc_sql_error(conn, NULL, "SQLDataSources");
- RETURN_FALSE;
- }
-
- if (len1 == 0 || len2 == 0) {
- /* we have a non-valid entry... so stop the looping */
- RETURN_FALSE;
- }
-
- array_init(return_value);
-
- add_assoc_stringl_ex(return_value, "server", sizeof("server"), server_name, len1, 1);
- add_assoc_stringl_ex(return_value, "description", sizeof("description"), desc, len2, 1);
-
-}
-/* }}} */
-#endif /* HAVE_SQLDATASOURCES */
-
-/* {{{ proto resource odbc_exec(resource connection_id, string query [, int flags])
- Prepare and execute an SQL statement */
-/* XXX Use flags */
-PHP_FUNCTION(odbc_exec)
-{
- pval **pv_conn, **pv_query, **pv_flags;
- int numArgs;
- char *query;
- odbc_result *result = NULL;
- odbc_connection *conn;
- RETCODE rc;
-#ifdef HAVE_SQL_EXTENDED_FETCH
- UDWORD scrollopts;
-#endif
-
- numArgs = ZEND_NUM_ARGS();
- if (numArgs > 2) {
- if (zend_get_parameters_ex(3, &pv_conn, &pv_query, &pv_flags) == FAILURE)
- WRONG_PARAM_COUNT;
- convert_to_long_ex(pv_flags);
- } else {
- if (zend_get_parameters_ex(2, &pv_conn, &pv_query) == FAILURE)
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE2(conn, odbc_connection *, pv_conn, -1, "ODBC-Link", le_conn, le_pconn);
-
- convert_to_string_ex(pv_query);
- query = Z_STRVAL_PP(pv_query);
-
- result = (odbc_result *)ecalloc(1, sizeof(odbc_result));
-
- rc = SQLAllocStmt(conn->hdbc, &(result->stmt));
- if (rc == SQL_INVALID_HANDLE) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "SQLAllocStmt error 'Invalid Handle'");
- efree(result);
- RETURN_FALSE;
- }
-
- if (rc == SQL_ERROR) {
- odbc_sql_error(conn, SQL_NULL_HSTMT, "SQLAllocStmt");
- efree(result);
- RETURN_FALSE;
- }
-
-#ifdef HAVE_SQL_EXTENDED_FETCH
- /* Solid doesn't have ExtendedFetch, if DriverManager is used, get Info,
- whether Driver supports ExtendedFetch */
- rc = SQLGetInfo(conn->hdbc, SQL_FETCH_DIRECTION, (void *) &scrollopts, sizeof(scrollopts), NULL);
- if (rc == SQL_SUCCESS) {
- if ((result->fetch_abs = (scrollopts & SQL_FD_FETCH_ABSOLUTE))) {
- /* 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) {
- odbc_sql_error(conn, result->stmt, " SQLSetStmtOption");
- SQLFreeStmt(result->stmt, SQL_DROP);
- efree(result);
- RETURN_FALSE;
- }
- }
- } else {
- result->fetch_abs = 0;
- }
-#endif
-
- rc = SQLExecDirect(result->stmt, query, SQL_NTS);
- if (rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO && rc != SQL_NO_DATA_FOUND) {
- /* XXX FIXME we should really check out SQLSTATE with SQLError
- * in case rc is SQL_SUCCESS_WITH_INFO here.
- */
- odbc_sql_error(conn, result->stmt, "SQLExecDirect");
- SQLFreeStmt(result->stmt, SQL_DROP);
- efree(result);
- RETURN_FALSE;
- }
-
- SQLNumResultCols(result->stmt, &(result->numcols));
-
- /* For insert, update etc. cols == 0 */
- if (result->numcols > 0) {
- if (!odbc_bindcols(result TSRMLS_CC)) {
- efree(result);
- RETURN_FALSE;
- }
- } else {
- result->values = NULL;
- }
- result->id = zend_list_insert(result, le_result);
- zend_list_addref(conn->id);
- result->conn_ptr = conn;
- result->fetched = 0;
-
- RETURN_RESOURCE(result->id);
-}
-/* }}} */
-
-#ifdef PHP_ODBC_HAVE_FETCH_HASH
-#define ODBC_NUM 1
-#define ODBC_OBJECT 2
-
-/* {{{ php_odbc_fetch_hash */
-static void php_odbc_fetch_hash(INTERNAL_FUNCTION_PARAMETERS, int result_type)
-{
- int i;
- odbc_result *result;
- RETCODE rc;
- SWORD sql_c_type;
- char *buf = NULL;
-#ifdef HAVE_SQL_EXTENDED_FETCH
- UDWORD crow;
- UWORD RowStatus[1];
- SDWORD rownum = -1;
- pval **pv_res, **pv_row, *tmp;
-
- switch(ZEND_NUM_ARGS()) {
- case 1:
- if (zend_get_parameters_ex(1, &pv_res) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- break;
- case 2:
- if (zend_get_parameters_ex(2, &pv_res, &pv_row) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long_ex(pv_row);
- rownum = Z_LVAL_PP(pv_row);
- break;
- default:
- WRONG_PARAM_COUNT;
- }
-
-#else
- pval **pv_res, *tmp;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &pv_res) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-#endif
-
- ZEND_FETCH_RESOURCE(result, odbc_result *, pv_res, -1, "ODBC result", le_result);
-
- if (result->numcols == 0) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "No tuples available at this result index");
- RETURN_FALSE;
- }
-
-#ifdef HAVE_SQL_EXTENDED_FETCH
- if (result->fetch_abs) {
- if (rownum > 0)
- rc = SQLExtendedFetch(result->stmt,SQL_FETCH_ABSOLUTE,rownum,&crow,RowStatus);
- else
- rc = SQLExtendedFetch(result->stmt,SQL_FETCH_NEXT,1,&crow,RowStatus);
- } else
-#endif
- rc = SQLFetch(result->stmt);
-
- if (rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) {
- RETURN_FALSE;
- }
-
- array_init(return_value);
-
-#ifdef HAVE_SQL_EXTENDED_FETCH
- if (rownum > 0 && result->fetch_abs)
- result->fetched = rownum;
- else
-#endif
- result->fetched++;
-
- for(i = 0; i < result->numcols; i++) {
- ALLOC_INIT_ZVAL(tmp);
- Z_TYPE_P(tmp) = IS_STRING;
- Z_STRLEN_P(tmp) = 0;
- sql_c_type = SQL_C_CHAR;
-
- switch(result->values[i].coltype) {
- case SQL_BINARY:
- case SQL_VARBINARY:
- case SQL_LONGVARBINARY:
- if (result->binmode <= 0) {
- Z_STRVAL_P(tmp) = STR_EMPTY_ALLOC();
- break;
- }
- if (result->binmode == 1) sql_c_type = SQL_C_BINARY;
- case SQL_LONGVARCHAR:
- if (IS_SQL_LONG(result->values[i].coltype) && result->longreadlen <= 0) {
- Z_STRVAL_P(tmp) = STR_EMPTY_ALLOC();
- break;
- }
- if (buf == NULL) buf = emalloc(result->longreadlen + 1);
- rc = SQLGetData(result->stmt, (UWORD)(i + 1), sql_c_type,
- buf, result->longreadlen + 1, &result->values[i].vallen);
-
- if (rc == SQL_ERROR) {
- odbc_sql_error(result->conn_ptr, result->stmt, "SQLGetData");
- efree(buf);
- RETURN_FALSE;
- }
-
- if (rc == SQL_SUCCESS_WITH_INFO) {
- Z_STRLEN_P(tmp) = result->longreadlen;
- } else if (result->values[i].vallen == SQL_NULL_DATA) {
- ZVAL_NULL(tmp);
- break;
- } else {
- Z_STRLEN_P(tmp) = result->values[i].vallen;
- }
- Z_STRVAL_P(tmp) = estrndup(buf, Z_STRLEN_P(tmp));
- break;
-
- default:
- if (result->values[i].vallen == SQL_NULL_DATA) {
- ZVAL_NULL(tmp);
- break;
- }
- Z_STRLEN_P(tmp) = result->values[i].vallen;
- Z_STRVAL_P(tmp) = estrndup(result->values[i].value,Z_STRLEN_P(tmp));
- break;
- }
-
- if (result_type & ODBC_NUM) {
- zend_hash_index_update(Z_ARRVAL_P(return_value), i, &tmp, sizeof(pval *), NULL);
- } else {
- if (!*(result->values[i].name)) {
- zend_hash_update(Z_ARRVAL_P(return_value), Z_STRVAL_P(tmp),
- Z_STRLEN_P(tmp)+1, &tmp, sizeof(pval *), NULL);
- } else {
- zend_hash_update(Z_ARRVAL_P(return_value), result->values[i].name,
- strlen(result->values[i].name)+1, &tmp, sizeof(pval *), NULL);
- }
- }
- }
- if (buf) efree(buf);
-}
-/* }}} */
-
-
-/* {{{ proto object odbc_fetch_object(int result [, int rownumber])
- Fetch a result row as an object */
-PHP_FUNCTION(odbc_fetch_object)
-{
- php_odbc_fetch_hash(INTERNAL_FUNCTION_PARAM_PASSTHRU, ODBC_OBJECT);
- if (Z_TYPE_P(return_value) == IS_ARRAY) {
- object_and_properties_init(return_value, ZEND_STANDARD_CLASS_DEF_PTR, Z_ARRVAL_P(return_value));
- }
-}
-/* }}} */
-
-/* {{{ proto array odbc_fetch_array(int result [, int rownumber])
- Fetch a result row as an associative array */
-PHP_FUNCTION(odbc_fetch_array)
-{
- php_odbc_fetch_hash(INTERNAL_FUNCTION_PARAM_PASSTHRU, ODBC_OBJECT);
-}
-/* }}} */
-#endif
-
-/* {{{ proto int odbc_fetch_into(resource result_id, array result_array, [, int rownumber])
- Fetch one result row into an array */
-PHP_FUNCTION(odbc_fetch_into)
-{
- int numArgs, i;
- odbc_result *result;
- RETCODE rc;
- SWORD sql_c_type;
- char *buf = NULL;
- pval **pv_res, **pv_res_arr, *tmp;
-#ifdef HAVE_SQL_EXTENDED_FETCH
- pval **pv_row;
- UDWORD crow;
- UWORD RowStatus[1];
- SDWORD rownum = -1;
-#endif /* HAVE_SQL_EXTENDED_FETCH */
-
- numArgs = ZEND_NUM_ARGS();
-
- switch(numArgs) {
- case 2:
- if (zend_get_parameters_ex(2, &pv_res, &pv_res_arr) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- break;
-#ifdef HAVE_SQL_EXTENDED_FETCH
- case 3:
- if (zend_get_parameters_ex(3, &pv_res, &pv_res_arr, &pv_row) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- SEPARATE_ZVAL(pv_row);
- convert_to_long_ex(pv_row);
- rownum = Z_LVAL_PP(pv_row);
- break;
-#endif /* HAVE_SQL_EXTENDED_FETCH */
- default:
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(result, odbc_result *, pv_res, -1, "ODBC result", le_result);
-
- if (result->numcols == 0) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "No tuples available at this result index");
- RETURN_FALSE;
- }
-
- if (Z_TYPE_PP(pv_res_arr) != IS_ARRAY) {
- array_init(*pv_res_arr);
- }
-
-#ifdef HAVE_SQL_EXTENDED_FETCH
- if (result->fetch_abs) {
- if (rownum > 0)
- rc = SQLExtendedFetch(result->stmt,SQL_FETCH_ABSOLUTE,rownum,&crow,RowStatus);
- else
- rc = SQLExtendedFetch(result->stmt,SQL_FETCH_NEXT,1,&crow,RowStatus);
- } else
-#endif
- rc = SQLFetch(result->stmt);
-
- if (rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO)
- RETURN_FALSE;
-
-#ifdef HAVE_SQL_EXTENDED_FETCH
- if (rownum > 0 && result->fetch_abs)
- result->fetched = rownum;
- else
-#endif
- result->fetched++;
-
- for(i = 0; i < result->numcols; i++) {
- ALLOC_ZVAL(tmp);
- tmp->refcount = 1;
- Z_TYPE_P(tmp) = IS_STRING;
- Z_STRLEN_P(tmp) = 0;
- sql_c_type = SQL_C_CHAR;
-
- switch(result->values[i].coltype) {
- case SQL_BINARY:
- case SQL_VARBINARY:
- case SQL_LONGVARBINARY:
- if (result->binmode <= 0) {
- Z_STRVAL_P(tmp) = STR_EMPTY_ALLOC();
- break;
- }
- if (result->binmode == 1) sql_c_type = SQL_C_BINARY;
- case SQL_LONGVARCHAR:
- if (IS_SQL_LONG(result->values[i].coltype) && result->longreadlen <= 0) {
- Z_STRVAL_P(tmp) = STR_EMPTY_ALLOC();
- break;
- }
-
- if (buf == NULL) buf = emalloc(result->longreadlen + 1);
- rc = SQLGetData(result->stmt, (UWORD)(i + 1),sql_c_type,
- buf, result->longreadlen + 1, &result->values[i].vallen);
-
- if (rc == SQL_ERROR) {
- odbc_sql_error(result->conn_ptr, result->stmt, "SQLGetData");
- efree(buf);
- RETURN_FALSE;
- }
- if (rc == SQL_SUCCESS_WITH_INFO) {
- Z_STRLEN_P(tmp) = result->longreadlen;
- } else if (result->values[i].vallen == SQL_NULL_DATA) {
- ZVAL_NULL(tmp);
- break;
- } else {
- Z_STRLEN_P(tmp) = result->values[i].vallen;
- }
- Z_STRVAL_P(tmp) = estrndup(buf, Z_STRLEN_P(tmp));
- break;
-
- default:
- if (result->values[i].vallen == SQL_NULL_DATA) {
- ZVAL_NULL(tmp);
- break;
- }
- Z_STRLEN_P(tmp) = result->values[i].vallen;
- Z_STRVAL_P(tmp) = estrndup(result->values[i].value,Z_STRLEN_P(tmp));
- break;
- }
- zend_hash_index_update(Z_ARRVAL_PP(pv_res_arr), i, &tmp, sizeof(pval *), NULL);
- }
- if (buf) efree(buf);
- RETURN_LONG(result->numcols);
-}
-/* }}} */
-
-/* {{{ proto bool solid_fetch_prev(resource result_id)
- */
-#if defined(HAVE_SOLID) || defined(HAVE_SOLID_30) || defined(HAVE_SOLID_35)
-PHP_FUNCTION(solid_fetch_prev)
-{
- odbc_result *result;
- RETCODE rc;
- pval **pv_res;
-
- if (zend_get_parameters_ex(1, &pv_res) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(result, odbc_result *, pv_res, -1, "ODBC result", le_result);
- if (result->numcols == 0) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "No tuples available at this result index");
- RETURN_FALSE;
- }
- rc = SQLFetchPrev(result->stmt);
-
- if (rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) {
- RETURN_FALSE;
- }
-
- if (result->fetched > 1) result->fetched--;
-
- RETURN_TRUE;
-}
-#endif
-/* }}} */
-
-/* {{{ proto bool odbc_fetch_row(resource result_id [, int row_number])
- Fetch a row */
-PHP_FUNCTION(odbc_fetch_row)
-{
- int numArgs;
- SDWORD rownum = 1;
- odbc_result *result;
- RETCODE rc;
- pval **pv_res, **pv_row;
-#ifdef HAVE_SQL_EXTENDED_FETCH
- UDWORD crow;
- UWORD RowStatus[1];
-#endif
-
- numArgs = ZEND_NUM_ARGS();
- switch (numArgs) {
- case 1:
- if (zend_get_parameters_ex(1, &pv_res) == FAILURE)
- WRONG_PARAM_COUNT;
- break;
- case 2:
- if (zend_get_parameters_ex(2, &pv_res, &pv_row) == FAILURE)
- WRONG_PARAM_COUNT;
- convert_to_long_ex(pv_row);
- rownum = Z_LVAL_PP(pv_row);
- break;
- default:
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(result, odbc_result *, pv_res, -1, "ODBC result", le_result);
-
- if (result->numcols == 0) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "No tuples available at this result index");
- RETURN_FALSE;
- }
-
-#ifdef HAVE_SQL_EXTENDED_FETCH
- if (result->fetch_abs) {
- if (numArgs > 1)
- rc = SQLExtendedFetch(result->stmt,SQL_FETCH_ABSOLUTE,rownum,&crow,RowStatus);
- else
- rc = SQLExtendedFetch(result->stmt,SQL_FETCH_NEXT,1,&crow,RowStatus);
- } else
-#endif
- rc = SQLFetch(result->stmt);
-
- if (rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) {
- RETURN_FALSE;
- }
-
- if (numArgs > 1) {
- result->fetched = rownum;
- } else {
- result->fetched++;
- }
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto mixed odbc_result(resource result_id, mixed field)
- Get result data */
-PHP_FUNCTION(odbc_result)
-{
- char *field;
- int field_ind;
- SWORD sql_c_type = SQL_C_CHAR;
- odbc_result *result;
- int i = 0;
- RETCODE rc;
- SDWORD fieldsize;
- pval **pv_res, **pv_field;
-#ifdef HAVE_SQL_EXTENDED_FETCH
- UDWORD crow;
- UWORD RowStatus[1];
-#endif
-
- field_ind = -1;
- field = NULL;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2 , &pv_res, &pv_field) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- if (Z_TYPE_PP(pv_field) == IS_STRING) {
- field = Z_STRVAL_PP(pv_field);
- } else {
- convert_to_long_ex(pv_field);
- field_ind = Z_LVAL_PP(pv_field) - 1;
- }
-
- ZEND_FETCH_RESOURCE(result, odbc_result *, pv_res, -1, "ODBC result", le_result);
-
- if ((result->numcols == 0)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "No tuples available at this result index");
- RETURN_FALSE;
- }
-
- /* get field index if the field parameter was a string */
- if (field != NULL) {
- if (result->values == NULL) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Result set contains no data");
- RETURN_FALSE;
- }
-
- for(i = 0; i < result->numcols; i++) {
- if (!strcasecmp(result->values[i].name, field)) {
- field_ind = i;
- break;
- }
- }
-
- if (field_ind < 0) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Field %s not found", field);
- RETURN_FALSE;
- }
- } else {
- /* check for limits of field_ind if the field parameter was an int */
- if (field_ind >= result->numcols || field_ind < 0) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Field index is larger than the number of fields");
- RETURN_FALSE;
- }
- }
-
- if (result->fetched == 0) {
- /* User forgot to call odbc_fetch_row(), or wants to reload the results, do it now */
-#ifdef HAVE_SQL_EXTENDED_FETCH
- if (result->fetch_abs)
- rc = SQLExtendedFetch(result->stmt, SQL_FETCH_NEXT, 1, &crow,RowStatus);
- else
-#endif
- rc = SQLFetch(result->stmt);
-
- if (rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO)
- RETURN_FALSE;
-
- result->fetched++;
- }
-
- switch(result->values[field_ind].coltype) {
- case SQL_BINARY:
- case SQL_VARBINARY:
- case SQL_LONGVARBINARY:
- if (result->binmode <= 1) sql_c_type = SQL_C_BINARY;
- if (result->binmode <= 0) break;
- case SQL_LONGVARCHAR:
- if (IS_SQL_LONG(result->values[field_ind].coltype)) {
- if (result->longreadlen <= 0)
- break;
- else
- fieldsize = result->longreadlen;
- } else {
- SQLColAttributes(result->stmt, (UWORD)(field_ind + 1),
- (UWORD)((sql_c_type == SQL_C_BINARY) ? SQL_COLUMN_LENGTH :
- SQL_COLUMN_DISPLAY_SIZE),
- NULL, 0, NULL, &fieldsize);
- }
- /* For char data, the length of the returned string will be longreadlen - 1 */
- fieldsize = (result->longreadlen <= 0) ? 4096 : result->longreadlen;
- field = emalloc(fieldsize);
-
- /* 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,
- field, fieldsize, &result->values[field_ind].vallen);
-
- if (rc == SQL_ERROR) {
- odbc_sql_error(result->conn_ptr, result->stmt, "SQLGetData");
- efree(field);
- RETURN_FALSE;
- }
-
- if (result->values[field_ind].vallen == SQL_NULL_DATA) {
- efree(field);
- RETURN_NULL();
- } else if (rc == SQL_NO_DATA_FOUND) {
- efree(field);
- RETURN_FALSE;
- }
- /* Reduce fieldlen by 1 if we have char data. One day we might
- have binary strings... */
- if (result->values[field_ind].coltype == SQL_LONGVARCHAR) fieldsize -= 1;
- /* Don't duplicate result, saves one emalloc.
- For SQL_SUCCESS, the length is in vallen.
- */
- RETURN_STRINGL(field, (rc == SQL_SUCCESS_WITH_INFO) ? fieldsize :
- result->values[field_ind].vallen, 0);
- break;
-
- default:
- if (result->values[field_ind].vallen == SQL_NULL_DATA) {
- RETURN_NULL();
- } else {
- RETURN_STRINGL(result->values[field_ind].value, result->values[field_ind].vallen, 1);
- }
- break;
- }
-
-/* If we come here, output unbound LONG and/or BINARY column data to the client */
-
- /* We emalloc 1 byte more for SQL_C_CHAR (trailing \0) */
- fieldsize = (sql_c_type == SQL_C_CHAR) ? 4096 : 4095;
- field = emalloc(fieldsize);
-
- /* Call SQLGetData() until SQL_SUCCESS is returned */
- while(1) {
- rc = SQLGetData(result->stmt, (UWORD)(field_ind + 1),sql_c_type,
- field, fieldsize, &result->values[field_ind].vallen);
-
- if (rc == SQL_ERROR) {
- odbc_sql_error(result->conn_ptr, result->stmt, "SQLGetData");
- efree(field);
- RETURN_FALSE;
- }
-
- if (result->values[field_ind].vallen == SQL_NULL_DATA) {
- efree(field);
- RETURN_NULL();
- }
- /* chop the trailing \0 by outputing only 4095 bytes */
- PHPWRITE(field,(rc == SQL_SUCCESS_WITH_INFO) ? 4095 :
- result->values[field_ind].vallen);
-
- if (rc == SQL_SUCCESS) { /* no more data avail */
- efree(field);
- RETURN_TRUE;
- }
- }
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto int odbc_result_all(resource result_id [, string format])
- Print result as HTML table */
-PHP_FUNCTION(odbc_result_all)
-{
- char *buf = NULL;
- int i, numArgs;
- odbc_result *result;
- RETCODE rc;
- pval **pv_res, **pv_format;
- SWORD sql_c_type;
-#ifdef HAVE_SQL_EXTENDED_FETCH
- UDWORD crow;
- UWORD RowStatus[1];
-#endif
-
- numArgs = ZEND_NUM_ARGS();
- if (numArgs == 1) {
- if (zend_get_parameters_ex(1, &pv_res) == FAILURE)
- WRONG_PARAM_COUNT;
- } else {
- if (zend_get_parameters_ex(2, &pv_res, &pv_format) == FAILURE)
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(result, odbc_result *, pv_res, -1, "ODBC result", le_result);
-
- if (result->numcols == 0) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "No tuples available at this result index");
- RETURN_FALSE;
- }
-#ifdef HAVE_SQL_EXTENDED_FETCH
- if (result->fetch_abs)
- rc = SQLExtendedFetch(result->stmt,SQL_FETCH_NEXT,1,&crow,RowStatus);
- else
-#endif
- rc = SQLFetch(result->stmt);
-
- if (rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) {
- php_printf("<h2>No rows found</h2>\n");
- RETURN_LONG(0);
- }
-
- /* Start table tag */
- if (numArgs == 1) {
- php_printf("<table><tr>");
- } else {
- convert_to_string_ex(pv_format);
- php_printf("<table %s ><tr>",Z_STRVAL_PP(pv_format));
- }
-
- for(i = 0; i < result->numcols; i++)
- php_printf("<th>%s</th>", result->values[i].name);
-
- php_printf("</tr>\n");
-
- while(rc == SQL_SUCCESS || rc == SQL_SUCCESS_WITH_INFO) {
- result->fetched++;
- php_printf("<tr>");
- for(i = 0; i < result->numcols; i++) {
- sql_c_type = SQL_C_CHAR;
- switch(result->values[i].coltype) {
- case SQL_BINARY:
- case SQL_VARBINARY:
- case SQL_LONGVARBINARY:
- if (result->binmode <= 0) {
- php_printf("<td>Not printable</td>");
- break;
- }
- if (result->binmode <= 1) sql_c_type = SQL_C_BINARY;
- case SQL_LONGVARCHAR:
- if (IS_SQL_LONG(result->values[i].coltype) &&
- result->longreadlen <= 0) {
- php_printf("<td>Not printable</td>");
- break;
- }
-
- if (buf == NULL) buf = emalloc(result->longreadlen);
-
- rc = SQLGetData(result->stmt, (UWORD)(i + 1),sql_c_type,
- buf, result->longreadlen, &result->values[i].vallen);
-
- php_printf("<td>");
-
- if (rc == SQL_ERROR) {
- odbc_sql_error(result->conn_ptr, result->stmt, "SQLGetData");
- php_printf("</td></tr></table>");
- efree(buf);
- RETURN_FALSE;
- }
- if (rc == SQL_SUCCESS_WITH_INFO)
- php_printf(buf,result->longreadlen);
- else if (result->values[i].vallen == SQL_NULL_DATA) {
- php_printf("<td>NULL</td>");
- break;
- } else {
- php_printf(buf, result->values[i].vallen);
- }
- php_printf("</td>");
- break;
- default:
- if (result->values[i].vallen == SQL_NULL_DATA) {
- php_printf("<td>NULL</td>");
- } else {
- php_printf("<td>%s</td>", result->values[i].value);
- }
- break;
- }
- }
- php_printf("</tr>\n");
-
-#ifdef HAVE_SQL_EXTENDED_FETCH
- if (result->fetch_abs)
- rc = SQLExtendedFetch(result->stmt,SQL_FETCH_NEXT,1,&crow,RowStatus);
- else
-#endif
- rc = SQLFetch(result->stmt);
- }
- php_printf("</table>\n");
- if (buf) efree(buf);
- RETURN_LONG(result->fetched);
-}
-/* }}} */
-
-/* {{{ proto bool odbc_free_result(resource result_id)
- Free resources associated with a result */
-PHP_FUNCTION(odbc_free_result)
-{
- pval **pv_res;
- odbc_result *result;
- int i;
-
- if (zend_get_parameters_ex(1, &pv_res) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(result, odbc_result *, pv_res, -1, "ODBC result", le_result);
- if (result->values) {
- for (i = 0; i < result->numcols; i++) {
- if (result->values[i].value) {
- efree(result->values[i].value);
- }
- }
- efree(result->values);
- result->values = NULL;
- }
-
- zend_list_delete(result->id);
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto resource odbc_connect(string DSN, string user, string password [, int cursor_option])
- Connect to a datasource */
-PHP_FUNCTION(odbc_connect)
-{
- odbc_do_connect(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0);
-}
-/* }}} */
-
-/* {{{ proto resource odbc_pconnect(string DSN, string user, string password [, int cursor_option])
- Establish a persistent connection to a datasource */
-PHP_FUNCTION(odbc_pconnect)
-{
- odbc_do_connect(INTERNAL_FUNCTION_PARAM_PASSTHRU, 1);
-}
-/* }}} */
-
-/* {{{ odbc_sqlconnect */
-int odbc_sqlconnect(odbc_connection **conn, char *db, char *uid, char *pwd, int cur_opt, int persistent TSRMLS_DC)
-{
- RETCODE rc;
-
- *conn = (odbc_connection *)pemalloc(sizeof(odbc_connection), persistent);
- (*conn)->persistent = persistent;
- SQLAllocEnv(&((*conn)->henv));
- SQLAllocConnect((*conn)->henv, &((*conn)->hdbc));
-
-#if defined(HAVE_SOLID) || defined(HAVE_SOLID_30)
- SQLSetConnectOption((*conn)->hdbc, SQL_TRANSLATE_OPTION,
- SQL_SOLID_XLATOPT_NOCNV);
-#endif
-#ifdef HAVE_OPENLINK
- {
- char dsnbuf[1024];
- short dsnbuflen;
-
- rc = SQLDriverConnect((*conn)->hdbc, NULL, db, SQL_NTS,
- dsnbuf, sizeof(dsnbuf) - 1, &dsnbuflen,
- SQL_DRIVER_NOPROMPT);
- }
-#else
- if (cur_opt != SQL_CUR_DEFAULT) {
- rc = SQLSetConnectOption((*conn)->hdbc, SQL_ODBC_CURSORS, cur_opt);
- if (rc != SQL_SUCCESS) { /* && rc != SQL_SUCCESS_WITH_INFO ? */
- odbc_sql_error(*conn, SQL_NULL_HSTMT, "SQLSetConnectOption");
- SQLFreeConnect((*conn)->hdbc);
- pefree(*conn, persistent);
- return FALSE;
- }
- }
-/* Possible fix for bug #10250
- * Needs testing on UnixODBC < 2.0.5 though. */
-#if defined(HAVE_EMPRESS) || defined(HAVE_UNIXODBC) || defined(PHP_WIN32)
-/* * Uncomment the line above, and comment line below to fully test
- * #ifdef HAVE_EMPRESS */
- {
- int direct = 0;
- char dsnbuf[1024];
- short dsnbuflen;
- char *ldb = 0;
- int ldb_len = 0;
-
- if (strstr((char*)db, ";")) {
- direct = 1;
- if (uid && !strstr ((char*)db, "uid") && !strstr((char*)db, "UID")) {
- ldb = (char*) emalloc(strlen(db) + strlen(uid) + strlen(pwd) + 12);
- sprintf(ldb, "%s;UID=%s;PWD=%s", db, uid, pwd);
- } else {
- ldb_len = strlen(db)+1;
- ldb = (char*) emalloc(ldb_len);
- memcpy(ldb, db, ldb_len);
- }
- }
-
- if (direct) {
- rc = SQLDriverConnect((*conn)->hdbc, NULL, ldb, strlen(ldb), dsnbuf,
- sizeof(dsnbuf) - 1, &dsnbuflen, SQL_DRIVER_NOPROMPT);
- } else {
- rc = SQLConnect((*conn)->hdbc, db, SQL_NTS, uid, SQL_NTS, pwd, SQL_NTS);
- }
-
- if (ldb) {
- efree(ldb);
- }
- }
-#else
- rc = SQLConnect((*conn)->hdbc, db, SQL_NTS, uid, SQL_NTS, pwd, SQL_NTS);
-#endif
-#endif
- if (rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) {
- odbc_sql_error(*conn, SQL_NULL_HSTMT, "SQLConnect");
- SQLFreeConnect((*conn)->hdbc);
- pefree((*conn), persistent);
- return FALSE;
- }
-/* (*conn)->open = 1;*/
- return TRUE;
-}
-/* }}} */
-
-/* Persistent connections: two list-types le_pconn, le_conn and a plist
- * where hashed connection info is stored together with index pointer to
- * the actual link of type le_pconn in the list. Only persistent
- * connections get hashed up. Normal connections use existing pconnections.
- * Maybe this has to change with regard to transactions on pconnections?
- * Possibly set autocommit to on on request shutdown.
- *
- * We do have to hash non-persistent connections, and reuse connections.
- * In the case where two connects were being made, without closing the first
- * connect, access violations were occuring. This is because some of the
- * "globals" in this module should actualy be per-connection variables. I
- * simply fixed things to get them working for now. Shane
- */
-/* {{{ odbc_do_connect */
-void odbc_do_connect(INTERNAL_FUNCTION_PARAMETERS, int persistent)
-{
- char *db = NULL;
- char *uid = NULL;
- char *pwd = NULL;
- pval **pv_db, **pv_uid, **pv_pwd, **pv_opt;
- odbc_connection *db_conn;
- char *hashed_details;
- int hashed_len, cur_opt;
-
- /* Now an optional 4th parameter specifying the cursor type
- * defaulting to the cursors default
- */
- switch(ZEND_NUM_ARGS()) {
- case 3:
- if (zend_get_parameters_ex(3, &pv_db, &pv_uid, &pv_pwd) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- /* Use Default: Probably a better way to do this */
- cur_opt = SQL_CUR_DEFAULT;
- break;
- case 4:
- if (zend_get_parameters_ex(4, &pv_db, &pv_uid, &pv_pwd, &pv_opt) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long_ex(pv_opt);
- cur_opt = Z_LVAL_PP(pv_opt);
-
- /* Confirm the cur_opt range */
- if (! (cur_opt == SQL_CUR_USE_IF_NEEDED ||
- cur_opt == SQL_CUR_USE_ODBC ||
- cur_opt == SQL_CUR_USE_DRIVER ||
- cur_opt == SQL_CUR_DEFAULT) ) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid Cursor type (%d)", cur_opt);
- RETURN_FALSE;
- }
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
-
- convert_to_string_ex(pv_db);
- convert_to_string_ex(pv_uid);
- convert_to_string_ex(pv_pwd);
-
- db = Z_STRVAL_PP(pv_db);
- uid = Z_STRVAL_PP(pv_uid);
- pwd = Z_STRVAL_PP(pv_pwd);
-
- if (ODBCG(allow_persistent) <= 0) {
- persistent = 0;
- }
-
- hashed_len = spprintf(&hashed_details, 0, "%s_%s_%s_%s_%d", ODBC_TYPE, db, uid, pwd, cur_opt);
-
- /* FIXME the idea of checking to see if our connection is already persistent
- is good, but it adds a lot of overhead to non-persistent connections. We
- should look and see if we can fix that somehow */
- /* try to find if we already have this link in our persistent list,
- * no matter if it is to be persistent or not
- */
-
-try_and_get_another_connection:
-
- if (persistent) {
- list_entry *le;
-
- if (zend_hash_find(&EG(persistent_list), hashed_details, hashed_len + 1, (void **) &le)
- == FAILURE) { /* the link is not in the persistent list */
- list_entry new_le;
-
- if (ODBCG(max_links) != -1 && ODBCG(num_links) >= ODBCG(max_links)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Too many open links (%ld)", ODBCG(num_links));
- efree(hashed_details);
- RETURN_FALSE;
- }
- if (ODBCG(max_persistent) != -1 && ODBCG(num_persistent) >= ODBCG(max_persistent)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING,"Too many open persistent links (%ld)", ODBCG(num_persistent));
- efree(hashed_details);
- RETURN_FALSE;
- }
-
- if (!odbc_sqlconnect(&db_conn, db, uid, pwd, cur_opt, 1 TSRMLS_CC)) {
- efree(hashed_details);
- RETURN_FALSE;
- }
-
- Z_TYPE(new_le) = le_pconn;
- new_le.ptr = db_conn;
- if (zend_hash_update(&EG(persistent_list), hashed_details, hashed_len + 1, &new_le,
- sizeof(list_entry), NULL) == FAILURE) {
- free(db_conn);
- efree(hashed_details);
- RETURN_FALSE;
- }
- ODBCG(num_persistent)++;
- ODBCG(num_links)++;
- db_conn->id = ZEND_REGISTER_RESOURCE(return_value, db_conn, le_pconn);
- } else { /* found connection */
- if (Z_TYPE_P(le) != le_pconn) {
- RETURN_FALSE;
- }
- /*
- * check to see if the connection is still valid
- */
- db_conn = (odbc_connection *)le->ptr;
-
- /*
- * check to see if the connection is still in place (lurcher)
- */
- if(ODBCG(check_persistent)){
- RETCODE ret;
- UCHAR d_name[32];
- SWORD len;
-
- ret = SQLGetInfo(db_conn->hdbc,
- SQL_DATA_SOURCE_READ_ONLY,
- d_name, sizeof(d_name), &len);
-
- if(ret != SQL_SUCCESS || len == 0) {
- zend_hash_del(&EG(persistent_list), hashed_details, hashed_len + 1);
- /* Commented out to fix a possible double closure error
- * when working with persistent connections as submitted by
- * bug #15758
- *
- * safe_odbc_disconnect(db_conn->hdbc);
- * SQLFreeConnect(db_conn->hdbc);
- */
- goto try_and_get_another_connection;
- }
- }
- }
- db_conn->id = ZEND_REGISTER_RESOURCE(return_value, db_conn, le_pconn);
- } else { /* non persistent */
- list_entry *index_ptr, new_index_ptr;
-
- if (zend_hash_find(&EG(regular_list), hashed_details, hashed_len + 1,
- (void **) &index_ptr) == SUCCESS) {
- int type, conn_id;
- void *ptr;
- if (Z_TYPE_P(index_ptr) != le_index_ptr) {
- RETURN_FALSE;
- }
- conn_id = (int)index_ptr->ptr;
- ptr = zend_list_find(conn_id, &type); /* check if the connection is still there */
- if (ptr && (type == le_conn || type == le_pconn)) {
- zend_list_addref(conn_id);
- Z_LVAL_P(return_value) = conn_id;
- Z_TYPE_P(return_value) = IS_RESOURCE;
- efree(hashed_details);
- return;
- } else {
- zend_hash_del(&EG(regular_list), hashed_details, hashed_len + 1);
- }
- }
- if (ODBCG(max_links) != -1 && ODBCG(num_links) >= ODBCG(max_links)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING,"Too many open connections (%ld)",ODBCG(num_links));
- efree(hashed_details);
- RETURN_FALSE;
- }
-
- if (!odbc_sqlconnect(&db_conn, db, uid, pwd, cur_opt, 0 TSRMLS_CC)) {
- efree(hashed_details);
- RETURN_FALSE;
- }
- db_conn->id = ZEND_REGISTER_RESOURCE(return_value, db_conn, le_conn);
- new_index_ptr.ptr = (void *) Z_LVAL_P(return_value);
- Z_TYPE(new_index_ptr) = le_index_ptr;
- if (zend_hash_update(&EG(regular_list), hashed_details, hashed_len + 1, (void *) &new_index_ptr,
- sizeof(list_entry), NULL) == FAILURE) {
- efree(hashed_details);
- RETURN_FALSE;
- /* XXX Free Connection */
- }
- ODBCG(num_links)++;
- }
- efree(hashed_details);
-}
-/* }}} */
-
-/* {{{ proto void odbc_close(resource connection_id)
- Close an ODBC connection */
-PHP_FUNCTION(odbc_close)
-{
- pval **pv_conn;
- void *ptr;
- odbc_connection *conn;
- odbc_result *res;
- int nument;
- int i;
- int type;
- int is_pconn = 0;
- int found_resource_type = le_conn;
-
- if (zend_get_parameters_ex(1, &pv_conn) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- conn = (odbc_connection *) zend_fetch_resource(pv_conn TSRMLS_CC, -1, "ODBC-Link", &found_resource_type, 2, le_conn, le_pconn);
- if (found_resource_type==le_pconn) {
- is_pconn = 1;
- }
-
- nument = zend_hash_next_free_element(&EG(regular_list));
-
- for(i = 1; i < nument; i++){
- ptr = zend_list_find(i, &type);
- if(ptr && (type == le_result)){
- res = (odbc_result *)ptr;
- if(res->conn_ptr == conn){
- zend_list_delete(i);
- }
- }
- }
-
- zend_list_delete(Z_LVAL_PP(pv_conn));
-
- if(is_pconn){
- zend_hash_apply_with_argument(&EG(persistent_list),
- (apply_func_arg_t) _close_pconn_with_id, (void *) &(Z_LVAL_PP(pv_conn)) TSRMLS_CC);
- }
-}
-/* }}} */
-
-/* {{{ proto int odbc_num_rows(resource result_id)
- Get number of rows in a result */
-PHP_FUNCTION(odbc_num_rows)
-{
- odbc_result *result;
- SDWORD rows;
- pval **pv_res;
-
- if (zend_get_parameters_ex(1, &pv_res) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- ZEND_FETCH_RESOURCE(result, odbc_result *, pv_res, -1, "ODBC result", le_result);
- SQLRowCount(result->stmt, &rows);
- RETURN_LONG(rows);
-}
-/* }}} */
-
-#if !defined(HAVE_SOLID) && !defined(HAVE_SOLID_30)
-/* {{{ proto bool odbc_next_result(resource result_id)
- Checks if multiple results are avaiable */
-PHP_FUNCTION(odbc_next_result)
-{
- odbc_result *result;
- pval **pv_res;
- int rc, i;
-
- if (zend_get_parameters_ex(1, &pv_res) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- ZEND_FETCH_RESOURCE(result, odbc_result *, pv_res, -1, "ODBC result", le_result);
-
- if (result->values) {
- for(i = 0; i < result->numcols; i++) {
- if (result->values[i].value)
- efree(result->values[i].value);
- }
- efree(result->values);
- result->values = NULL;
- }
-
- result->fetched = 0;
- rc = SQLMoreResults(result->stmt);
- if (rc == SQL_SUCCESS) {
- RETURN_TRUE;
- }
- else if (rc == SQL_SUCCESS_WITH_INFO) {
- rc = SQLFreeStmt(result->stmt, SQL_UNBIND);
- SQLNumParams(result->stmt, &(result->numparams));
- SQLNumResultCols(result->stmt, &(result->numcols));
-
- if (result->numcols > 0) {
- if (!odbc_bindcols(result TSRMLS_CC)) {
- efree(result);
- RETVAL_FALSE;
- }
- } else {
- result->values = NULL;
- }
- RETURN_TRUE;
- }
- else {
- RETURN_FALSE;
- }
-}
-/* }}} */
-#endif
-
-/* {{{ proto int odbc_num_fields(resource result_id)
- Get number of columns in a result */
-PHP_FUNCTION(odbc_num_fields)
-{
- odbc_result *result;
- pval **pv_res;
-
- if (zend_get_parameters_ex(1, &pv_res) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- ZEND_FETCH_RESOURCE(result, odbc_result *, pv_res, -1, "ODBC result", le_result);
- RETURN_LONG(result->numcols);
-}
-/* }}} */
-
-/* {{{ proto string odbc_field_name(resource result_id, int field_number)
- Get a column name */
-PHP_FUNCTION(odbc_field_name)
-{
- odbc_result *result;
- pval **pv_res, **pv_num;
-
- if (zend_get_parameters_ex(2, &pv_res, &pv_num) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long_ex(pv_num);
-
- ZEND_FETCH_RESOURCE(result, odbc_result *, pv_res, -1, "ODBC result", le_result);
-
- if (result->numcols == 0) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "No tuples available at this result index");
- RETURN_FALSE;
- }
-
- if (Z_LVAL_PP(pv_num) > result->numcols) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Field index larger than number of fields");
- RETURN_FALSE;
- }
-
- if (Z_LVAL_PP(pv_num) < 1) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Field numbering starts at 1");
- RETURN_FALSE;
- }
-
- RETURN_STRING(result->values[Z_LVAL_PP(pv_num) - 1].name, 1)
-}
-/* }}} */
-
-/* {{{ proto string odbc_field_type(resource result_id, int field_number)
- Get the datatype of a column */
-PHP_FUNCTION(odbc_field_type)
-{
- odbc_result *result;
- char tmp[32];
- SWORD tmplen;
- pval **pv_res, **pv_num;
-
- if (zend_get_parameters_ex(2, &pv_res, &pv_num) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long_ex(pv_num);
-
- ZEND_FETCH_RESOURCE(result, odbc_result *, pv_res, -1, "ODBC result", le_result);
-
- if (result->numcols == 0) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "No tuples available at this result index");
- RETURN_FALSE;
- }
-
- if (Z_LVAL_PP(pv_num) > result->numcols) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Field index larger than number of fields");
- RETURN_FALSE;
- }
-
- if (Z_LVAL_PP(pv_num) < 1) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Field numbering starts at 1");
- RETURN_FALSE;
- }
-
- SQLColAttributes(result->stmt, (UWORD)Z_LVAL_PP(pv_num),
- SQL_COLUMN_TYPE_NAME, tmp, 31, &tmplen, NULL);
- RETURN_STRING(tmp,1)
-}
-/* }}} */
-
-/* {{{ proto int odbc_field_len(resource result_id, int field_number)
- Get the length (precision) of a column */
-PHP_FUNCTION(odbc_field_len)
-{
- odbc_column_lengths(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0);
-}
-/* }}} */
-
-/* {{{ proto int odbc_field_scale(resource result_id, int field_number)
- Get the scale of a column */
-PHP_FUNCTION(odbc_field_scale)
-{
- odbc_column_lengths(INTERNAL_FUNCTION_PARAM_PASSTHRU, 1);
-}
-/* }}} */
-
-/* {{{ proto int odbc_field_num(resource result_id, string field_name)
- Return column number */
-PHP_FUNCTION(odbc_field_num)
-{
- int field_ind;
- char *fname;
- odbc_result *result;
- int i;
- pval **pv_res, **pv_name;
-
- if (zend_get_parameters_ex(2, &pv_res, &pv_name) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(result, odbc_result *, pv_res, -1, "ODBC result", le_result);
-
- if (result->numcols == 0) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "No tuples available at this result index");
- RETURN_FALSE;
- }
-
- convert_to_string_ex(pv_name);
- fname = Z_STRVAL_PP(pv_name);
-
- field_ind = -1;
- for(i = 0; i < result->numcols; i++) {
- if (strcasecmp(result->values[i].name, fname) == 0)
- field_ind = i + 1;
- }
-
- if (field_ind == -1)
- RETURN_FALSE;
- RETURN_LONG(field_ind);
-}
-/* }}} */
-
-/* {{{ proto mixed odbc_autocommit(resource connection_id [, int OnOff])
- Toggle autocommit mode or get status */
-/* There can be problems with pconnections!*/
-PHP_FUNCTION(odbc_autocommit)
-{
- odbc_connection *conn;
- RETCODE rc;
- pval **pv_conn, **pv_onoff = NULL;
- int argc;
-
- argc = ZEND_NUM_ARGS();
- if (argc == 2) {
- if (zend_get_parameters_ex(2, &pv_conn, &pv_onoff) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- } else if (argc == 1) {
- if (zend_get_parameters_ex(1, &pv_conn) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- } else {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE2(conn, odbc_connection *, pv_conn, -1, "ODBC-Link", le_conn, le_pconn);
-
- if (pv_onoff && (*pv_onoff)) {
- convert_to_long_ex(pv_onoff);
- rc = SQLSetConnectOption(conn->hdbc, SQL_AUTOCOMMIT,
- (Z_LVAL_PP(pv_onoff)) ?
- SQL_AUTOCOMMIT_ON : SQL_AUTOCOMMIT_OFF);
- if (rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) {
- odbc_sql_error(conn, SQL_NULL_HSTMT, "Set autocommit");
- RETURN_FALSE;
- }
- RETVAL_TRUE;
- } else {
- SDWORD status;
-
- rc = SQLGetConnectOption(conn->hdbc, SQL_AUTOCOMMIT, (PTR)&status);
- if (rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) {
- odbc_sql_error(conn, SQL_NULL_HSTMT, "Get commit status");
- RETURN_FALSE;
- }
- RETVAL_LONG((long)status);
- }
-}
-/* }}} */
-
-/* {{{ proto bool odbc_commit(resource connection_id)
- Commit an ODBC transaction */
-PHP_FUNCTION(odbc_commit)
-{
- odbc_transact(INTERNAL_FUNCTION_PARAM_PASSTHRU, 1);
-}
-/* }}} */
-
-/* {{{ proto bool odbc_rollback(resource connection_id)
- Rollback a transaction */
-PHP_FUNCTION(odbc_rollback)
-{
- odbc_transact(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0);
-}
-/* }}} */
-
-/* {{{ php_odbc_lasterror */
-static void php_odbc_lasterror(INTERNAL_FUNCTION_PARAMETERS, int mode)
-{
- odbc_connection *conn;
- pval **pv_handle;
- char *ptr;
- int argc, len;
-
- argc = ZEND_NUM_ARGS();
-
- if (argc > 1 || zend_get_parameters_ex(argc, &pv_handle)) {
- WRONG_PARAM_COUNT;
- }
-
- if (mode == 0) { /* last state */
- len = 6;
- } else { /* last error message */
- len = SQL_MAX_MESSAGE_LENGTH;
- }
- ptr = ecalloc(len + 1, 1);
- if (argc == 1) {
- ZEND_FETCH_RESOURCE2(conn, odbc_connection *, pv_handle, -1, "ODBC-Link", le_conn, le_pconn);
- if (mode == 0) {
- strlcpy(ptr, conn->laststate, len+1);
- } else {
- strlcpy(ptr, conn->lasterrormsg, len+1);
- }
- } else {
- if (mode == 0) {
- strlcpy(ptr, ODBCG(laststate), len+1);
- } else {
- strlcpy(ptr, ODBCG(lasterrormsg), len+1);
- }
- }
- RETVAL_STRING(ptr, 0);
-}
-/* }}} */
-
-/* {{{ proto string odbc_error([resource connection_id])
- Get the last error code */
-PHP_FUNCTION(odbc_error)
-{
- php_odbc_lasterror(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0);
-}
-/* }}} */
-
-/* {{{ proto string odbc_errormsg([resource connection_id])
- Get the last error message */
-PHP_FUNCTION(odbc_errormsg)
-{
- php_odbc_lasterror(INTERNAL_FUNCTION_PARAM_PASSTHRU, 1);
-}
-/* }}} */
-
-/* {{{ proto bool odbc_setoption(resource conn_id|result_id, int which, int option, int value)
- Sets connection or statement options */
-/* This one has to be used carefully. We can't allow to set connection options for
- persistent connections. I think that SetStmtOption is of little use, since most
- of those can only be specified before preparing/executing statements.
- On the other hand, they can be made connection wide default through SetConnectOption
- - but will be overidden by calls to SetStmtOption() in odbc_prepare/odbc_do
-*/
-PHP_FUNCTION(odbc_setoption)
-{
- odbc_connection *conn;
- odbc_result *result;
- RETCODE rc;
- pval **pv_handle, **pv_which, **pv_opt, **pv_val;
-
- if (zend_get_parameters_ex(4, &pv_handle, &pv_which, &pv_opt, &pv_val) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long_ex(pv_which);
- convert_to_long_ex(pv_opt);
- convert_to_long_ex(pv_val);
-
- switch (Z_LVAL_PP(pv_which)) {
- case 1: /* SQLSetConnectOption */
- ZEND_FETCH_RESOURCE2(conn, odbc_connection *, pv_handle, -1, "ODBC-Link", le_conn, le_pconn);
- if (conn->persistent) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to set option for persistent connection");
- RETURN_FALSE;
- }
- rc = SQLSetConnectOption(conn->hdbc, (unsigned short)(Z_LVAL_PP(pv_opt)), Z_LVAL_PP(pv_val));
- if (rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) {
- odbc_sql_error(conn, SQL_NULL_HSTMT, "SetConnectOption");
- RETURN_FALSE;
- }
- break;
- case 2: /* SQLSetStmtOption */
- ZEND_FETCH_RESOURCE(result, odbc_result *, pv_handle, -1, "ODBC result", le_result);
-
- rc = SQLSetStmtOption(result->stmt, (unsigned short)(Z_LVAL_PP(pv_opt)), (Z_LVAL_PP(pv_val)));
-
- if (rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) {
- odbc_sql_error(result->conn_ptr, result->stmt, "SetStmtOption");
- RETURN_FALSE;
- }
- break;
- default:
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unknown option type");
- RETURN_FALSE;
- break;
- }
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/*
- * metadata functions
- */
-
-/* {{{ proto resource odbc_tables(resource connection_id [, string qualifier, string owner, string name, string table_types])
- Call the SQLTables function */
-PHP_FUNCTION(odbc_tables)
-{
- pval **pv_conn, **pv_cat, **pv_schema, **pv_table, **pv_type;
- odbc_result *result = NULL;
- odbc_connection *conn;
- char *cat = NULL, *schema = NULL, *table = NULL, *type = NULL;
- RETCODE rc;
- int argc;
-
- argc = ZEND_NUM_ARGS();
- if (argc < 1 || argc > 5 || zend_get_parameters_ex(argc, &pv_conn, &pv_cat, &pv_schema, &pv_table, &pv_type) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- switch (argc) {
- case 5:
- convert_to_string_ex(pv_type);
- type = Z_STRVAL_PP(pv_type);
- case 4:
- convert_to_string_ex(pv_table);
- table = Z_STRVAL_PP(pv_table);
- case 3:
- convert_to_string_ex(pv_schema);
- schema = Z_STRVAL_PP(pv_schema);
- case 2:
- convert_to_string_ex(pv_cat);
- cat = Z_STRVAL_PP(pv_cat);
- }
-
- ZEND_FETCH_RESOURCE2(conn, odbc_connection *, pv_conn, -1, "ODBC-Link", le_conn, le_pconn);
-
- result = (odbc_result *)ecalloc(1, sizeof(odbc_result));
-
- rc = SQLAllocStmt(conn->hdbc, &(result->stmt));
- if (rc == SQL_INVALID_HANDLE) {
- efree(result);
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "SQLAllocStmt error 'Invalid Handle'");
- RETURN_FALSE;
- }
-
- if (rc == SQL_ERROR) {
- odbc_sql_error(conn, SQL_NULL_HSTMT, "SQLAllocStmt");
- efree(result);
- RETURN_FALSE;
- }
-
- /* This hack is needed to access table information in Access databases (fmk) */
- if (table && strlen(table) && schema && !strlen(schema)) schema = NULL;
-
- rc = SQLTables(result->stmt,
- cat, SAFE_SQL_NTS(cat),
- schema, SAFE_SQL_NTS(schema),
- table, SAFE_SQL_NTS(table),
- type, SAFE_SQL_NTS(type));
-
- if (rc == SQL_ERROR) {
- odbc_sql_error(conn, SQL_NULL_HSTMT, "SQLTables");
- efree(result);
- RETURN_FALSE;
- }
-
- result->numparams = 0;
- SQLNumResultCols(result->stmt, &(result->numcols));
-
- if (result->numcols > 0) {
- if (!odbc_bindcols(result TSRMLS_CC)) {
- efree(result);
- RETURN_FALSE;
- }
- } else {
- result->values = NULL;
- }
- result->conn_ptr = conn;
- result->fetched = 0;
- ZEND_REGISTER_RESOURCE(return_value, result, le_result);
-}
-/* }}} */
-
-/* {{{ proto resource odbc_columns(resource connection_id, string qualifier, string owner, string table_name, string column_name)
- Returns a result identifier that can be used to fetch a list of column names in specified tables */
-PHP_FUNCTION(odbc_columns)
-{
- pval **pv_conn, **pv_cat, **pv_schema, **pv_table, **pv_column;
- 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;
- RETCODE rc;
- int argc;
-
- argc = ZEND_NUM_ARGS();
- if (argc < 1 || argc > 5 || zend_get_parameters_ex(argc, &pv_conn, &pv_cat, &pv_schema, &pv_table, &pv_column) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- switch (argc) {
- case 5:
- convert_to_string_ex(pv_column);
- column = Z_STRVAL_PP(pv_column);
- column_len = Z_STRLEN_PP(pv_column);
- case 4:
- convert_to_string_ex(pv_table);
- table = Z_STRVAL_PP(pv_table);
- table_len = Z_STRLEN_PP(pv_table);
- case 3:
- convert_to_string_ex(pv_schema);
- schema = Z_STRVAL_PP(pv_schema);
- schema_len = Z_STRLEN_PP(pv_schema);
- case 2:
- convert_to_string_ex(pv_cat);
- cat = Z_STRVAL_PP(pv_cat);
- cat_len = Z_STRLEN_PP(pv_cat);
- }
-
- ZEND_FETCH_RESOURCE2(conn, odbc_connection *, pv_conn, -1, "ODBC-Link", le_conn, le_pconn);
-
- result = (odbc_result *)ecalloc(1, sizeof(odbc_result));
-
- rc = SQLAllocStmt(conn->hdbc, &(result->stmt));
- if (rc == SQL_INVALID_HANDLE) {
- efree(result);
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "SQLAllocStmt error 'Invalid Handle'");
- RETURN_FALSE;
- }
-
- if (rc == SQL_ERROR) {
- odbc_sql_error(conn, SQL_NULL_HSTMT, "SQLAllocStmt");
- efree(result);
- RETURN_FALSE;
- }
-
- /*
- * Needed to make MS Access happy
- */
- if (table && strlen(table) && schema && !strlen(schema)) schema = NULL;
-
- rc = SQLColumns(result->stmt,
- cat, cat_len,
- schema, schema_len,
- table, table_len,
- column, column_len);
-
- if (rc == SQL_ERROR) {
- odbc_sql_error(conn, SQL_NULL_HSTMT, "SQLColumns");
- efree(result);
- RETURN_FALSE;
- }
-
- result->numparams = 0;
- SQLNumResultCols(result->stmt, &(result->numcols));
-
- if (result->numcols > 0) {
- if (!odbc_bindcols(result TSRMLS_CC)) {
- efree(result);
- RETURN_FALSE;
- }
- } else {
- result->values = NULL;
- }
- result->conn_ptr = conn;
- result->fetched = 0;
- ZEND_REGISTER_RESOURCE(return_value, result, le_result);
-}
-/* }}} */
-
-#if !defined(HAVE_DBMAKER) && !defined(HAVE_SOLID) && !defined(HAVE_SOLID_30) && !defined(HAVE_SOLID_35) && !defined(HAVE_BIRDSTEP)
-/* {{{ proto resource odbc_columnprivileges(resource connection_id, string catalog, string schema, string table, string column)
- Returns a result identifier that can be used to fetch a list of columns and associated privileges for the specified table */
-PHP_FUNCTION(odbc_columnprivileges)
-{
- pval **pv_conn, **pv_cat, **pv_schema, **pv_table, **pv_column;
- odbc_result *result = NULL;
- odbc_connection *conn;
- char *cat = NULL, *schema = NULL, *table = NULL, *column = NULL;
- RETCODE rc;
- int argc;
-
- argc = ZEND_NUM_ARGS();
- if (argc == 5) {
- if (zend_get_parameters_ex(5, &pv_conn, &pv_cat, &pv_schema, &pv_table, &pv_column) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex(pv_cat);
- cat = Z_STRVAL_PP(pv_cat);
- convert_to_string_ex(pv_schema);
- schema = Z_STRVAL_PP(pv_schema);
- convert_to_string_ex(pv_table);
- table = Z_STRVAL_PP(pv_table);
- convert_to_string_ex(pv_column);
- column = Z_STRVAL_PP(pv_column);
- } else {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE2(conn, odbc_connection *, pv_conn, -1, "ODBC-Link", le_conn, le_pconn);
-
- result = (odbc_result *)ecalloc(1, sizeof(odbc_result));
-
- rc = SQLAllocStmt(conn->hdbc, &(result->stmt));
- if (rc == SQL_INVALID_HANDLE) {
- efree(result);
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "SQLAllocStmt error 'Invalid Handle'");
- RETURN_FALSE;
- }
-
- if (rc == SQL_ERROR) {
- odbc_sql_error(conn, SQL_NULL_HSTMT, "SQLAllocStmt");
- efree(result);
- RETURN_FALSE;
- }
-
- rc = SQLColumnPrivileges(result->stmt,
- cat, SAFE_SQL_NTS(cat),
- schema, SAFE_SQL_NTS(schema),
- table, SAFE_SQL_NTS(table),
- column, SAFE_SQL_NTS(column));
-
- if (rc == SQL_ERROR) {
- odbc_sql_error(conn, SQL_NULL_HSTMT, "SQLColumnPrivileges");
- efree(result);
- RETURN_FALSE;
- }
-
- result->numparams = 0;
- SQLNumResultCols(result->stmt, &(result->numcols));
-
- if (result->numcols > 0) {
- if (!odbc_bindcols(result TSRMLS_CC)) {
- efree(result);
- RETURN_FALSE;
- }
- } else {
- result->values = NULL;
- }
- result->conn_ptr = conn;
- result->fetched = 0;
- ZEND_REGISTER_RESOURCE(return_value, result, le_result);
-}
-/* }}} */
-#endif /* HAVE_DBMAKER || HAVE_SOLID*/
-
-#if !defined(HAVE_SOLID) && !defined(HAVE_SOLID_30) && !defined(HAVE_SOLID_35)
-/* {{{ proto resource odbc_foreignkeys(resource connection_id, string pk_qualifier, string pk_owner, string pk_table, string fk_qualifier, string fk_owner, string fk_table)
- Returns a result identifier to either a list of foreign keys in the specified table or a list of foreign keys in other tables that refer to the primary key in the specified table */
-PHP_FUNCTION(odbc_foreignkeys)
-{
- pval **pv_conn, **pv_pcat, **pv_pschema, **pv_ptable;
- pval **pv_fcat, **pv_fschema, **pv_ftable;
- odbc_result *result = NULL;
- odbc_connection *conn;
- char *pcat = NULL, *pschema = NULL, *ptable = NULL;
- char *fcat = NULL, *fschema = NULL, *ftable = NULL;
- RETCODE rc;
- int argc;
-
- argc = ZEND_NUM_ARGS();
- if (argc == 7) {
- if (zend_get_parameters_ex(7, &pv_conn, &pv_pcat, &pv_pschema, &pv_ptable,
- &pv_fcat, &pv_fschema, &pv_ftable) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex(pv_pcat);
- pcat = Z_STRVAL_PP(pv_pcat);
- convert_to_string_ex(pv_pschema);
- pschema = Z_STRVAL_PP(pv_pschema);
- convert_to_string_ex(pv_ptable);
- ptable = Z_STRVAL_PP(pv_ptable);
- convert_to_string_ex(pv_fcat);
- fcat = Z_STRVAL_PP(pv_fcat);
- convert_to_string_ex(pv_fschema);
- fschema = Z_STRVAL_PP(pv_fschema);
- convert_to_string_ex(pv_ftable);
- ftable = Z_STRVAL_PP(pv_ftable);
-#if defined(HAVE_DBMAKER) || defined(HAVE_IBMDB2)
-#define EMPTY_TO_NULL(xstr) \
- if ((int)strlen((xstr)) == 0) (xstr) = NULL
-
- EMPTY_TO_NULL(pcat);
- EMPTY_TO_NULL(pschema);
- EMPTY_TO_NULL(ptable);
- EMPTY_TO_NULL(fcat);
- EMPTY_TO_NULL(fschema);
- EMPTY_TO_NULL(ftable);
-#endif
- } else {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE2(conn, odbc_connection *, pv_conn, -1, "ODBC-Link", le_conn, le_pconn);
-
- result = (odbc_result *)ecalloc(1, sizeof(odbc_result));
-
- rc = SQLAllocStmt(conn->hdbc, &(result->stmt));
- if (rc == SQL_INVALID_HANDLE) {
- efree(result);
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "SQLAllocStmt error 'Invalid Handle'");
- RETURN_FALSE;
- }
-
- if (rc == SQL_ERROR) {
- odbc_sql_error(conn, SQL_NULL_HSTMT, "SQLAllocStmt");
- efree(result);
- RETURN_FALSE;
- }
-
- rc = SQLForeignKeys(result->stmt,
- pcat, SAFE_SQL_NTS(pcat),
- pschema, SAFE_SQL_NTS(pschema),
- ptable, SAFE_SQL_NTS(ptable),
- fcat, SAFE_SQL_NTS(fcat),
- fschema, SAFE_SQL_NTS(fschema),
- ftable, SAFE_SQL_NTS(ftable) );
-
- if (rc == SQL_ERROR) {
- odbc_sql_error(conn, SQL_NULL_HSTMT, "SQLForeignKeys");
- efree(result);
- RETURN_FALSE;
- }
-
- result->numparams = 0;
- SQLNumResultCols(result->stmt, &(result->numcols));
-
- if (result->numcols > 0) {
- if (!odbc_bindcols(result TSRMLS_CC)) {
- efree(result);
- RETURN_FALSE;
- }
- } else {
- result->values = NULL;
- }
- result->conn_ptr = conn;
- result->fetched = 0;
- ZEND_REGISTER_RESOURCE(return_value, result, le_result);
-}
-/* }}} */
-#endif /* HAVE_SOLID */
-
-/* {{{ proto resource odbc_gettypeinfo(resource connection_id [, int data_type])
- Returns a result identifier containing information about data types supported by the data source */
-PHP_FUNCTION(odbc_gettypeinfo)
-{
- pval **pv_conn, **pv_data_type;
- odbc_result *result = NULL;
- odbc_connection *conn;
- RETCODE rc;
- int argc;
- SWORD data_type = SQL_ALL_TYPES;
-
- argc = ZEND_NUM_ARGS();
- if (argc == 1) {
- if (zend_get_parameters_ex(1, &pv_conn) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- } else if (argc == 2) {
- if (zend_get_parameters_ex(2, &pv_conn, &pv_data_type) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long_ex(pv_data_type);
- data_type = (SWORD) Z_LVAL_PP(pv_data_type);
- } else {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE2(conn, odbc_connection *, pv_conn, -1, "ODBC-Link", le_conn, le_pconn);
-
- result = (odbc_result *)ecalloc(1, sizeof(odbc_result));
-
- rc = SQLAllocStmt(conn->hdbc, &(result->stmt));
- if (rc == SQL_INVALID_HANDLE) {
- efree(result);
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "SQLAllocStmt error 'Invalid Handle'");
- RETURN_FALSE;
- }
-
- if (rc == SQL_ERROR) {
- odbc_sql_error(conn, SQL_NULL_HSTMT, "SQLAllocStmt");
- efree(result);
- RETURN_FALSE;
- }
-
- rc = SQLGetTypeInfo(result->stmt, data_type );
-
- if (rc == SQL_ERROR) {
- odbc_sql_error(conn, SQL_NULL_HSTMT, "SQLGetTypeInfo");
- efree(result);
- RETURN_FALSE;
- }
-
- result->numparams = 0;
- SQLNumResultCols(result->stmt, &(result->numcols));
-
- if (result->numcols > 0) {
- if (!odbc_bindcols(result TSRMLS_CC)) {
- efree(result);
- RETURN_FALSE;
- }
- } else {
- result->values = NULL;
- }
- result->conn_ptr = conn;
- result->fetched = 0;
- ZEND_REGISTER_RESOURCE(return_value, result, le_result);
-}
-/* }}} */
-
-/* {{{ proto resource odbc_primarykeys(resource connection_id, string qualifier, string owner, string table)
- Returns a result identifier listing the column names that comprise the primary key for a table */
-PHP_FUNCTION(odbc_primarykeys)
-{
- pval **pv_conn, **pv_cat, **pv_schema, **pv_table;
- odbc_result *result = NULL;
- odbc_connection *conn;
- char *cat = NULL, *schema = NULL, *table = NULL;
- RETCODE rc;
- int argc;
-
- argc = ZEND_NUM_ARGS();
- if (argc == 4) {
- if (zend_get_parameters_ex(4, &pv_conn, &pv_cat, &pv_schema, &pv_table) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex(pv_cat);
- cat = Z_STRVAL_PP(pv_cat);
- convert_to_string_ex(pv_schema);
- schema = Z_STRVAL_PP(pv_schema);
- convert_to_string_ex(pv_table);
- table = Z_STRVAL_PP(pv_table);
- } else {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE2(conn, odbc_connection *, pv_conn, -1, "ODBC-Link", le_conn, le_pconn);
-
- result = (odbc_result *)ecalloc(1, sizeof(odbc_result));
-
- rc = SQLAllocStmt(conn->hdbc, &(result->stmt));
- if (rc == SQL_INVALID_HANDLE) {
- efree(result);
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "SQLAllocStmt error 'Invalid Handle'");
- RETURN_FALSE;
- }
-
- if (rc == SQL_ERROR) {
- odbc_sql_error(conn, SQL_NULL_HSTMT, "SQLAllocStmt");
- efree(result);
- RETURN_FALSE;
- }
-
- rc = SQLPrimaryKeys(result->stmt,
- cat, SAFE_SQL_NTS(cat),
- schema, SAFE_SQL_NTS(schema),
- table, SAFE_SQL_NTS(table) );
-
- if (rc == SQL_ERROR) {
- odbc_sql_error(conn, SQL_NULL_HSTMT, "SQLPrimaryKeys");
- efree(result);
- RETURN_FALSE;
- }
-
- result->numparams = 0;
- SQLNumResultCols(result->stmt, &(result->numcols));
-
- if (result->numcols > 0) {
- if (!odbc_bindcols(result TSRMLS_CC)) {
- efree(result);
- RETURN_FALSE;
- }
- } else {
- result->values = NULL;
- }
- result->conn_ptr = conn;
- result->fetched = 0;
- ZEND_REGISTER_RESOURCE(return_value, result, le_result);
-}
-/* }}} */
-
-#if !defined(HAVE_SOLID) && !defined(HAVE_SOLID_30) && !defined(HAVE_SOLID_35) && !defined(HAVE_BIRDSTEP)
-/* {{{ proto resource odbc_procedurecolumns(resource connection_id [, string qualifier, string owner, string proc, string column])
- Returns a result identifier containing the list of input and output parameters, as well as the columns that make up the result set for the specified procedures */
-PHP_FUNCTION(odbc_procedurecolumns)
-{
- pval **pv_conn, **pv_cat, **pv_schema, **pv_proc, **pv_col;
- odbc_result *result = NULL;
- odbc_connection *conn;
- char *cat = NULL, *schema = NULL, *proc = NULL, *col = NULL;
- RETCODE rc;
- int argc;
-
- argc = ZEND_NUM_ARGS();
- if (argc == 1) {
- if (zend_get_parameters_ex(1, &pv_conn) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- } else if (argc == 5) {
- if (zend_get_parameters_ex(5, &pv_conn, &pv_cat, &pv_schema, &pv_proc, &pv_col) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex(pv_cat);
- cat = Z_STRVAL_PP(pv_cat);
- convert_to_string_ex(pv_schema);
- schema = Z_STRVAL_PP(pv_schema);
- convert_to_string_ex(pv_proc);
- proc = Z_STRVAL_PP(pv_proc);
- convert_to_string_ex(pv_col);
- col = Z_STRVAL_PP(pv_col);
- } else {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE2(conn, odbc_connection *, pv_conn, -1, "ODBC-Link", le_conn, le_pconn);
-
- result = (odbc_result *)ecalloc(1, sizeof(odbc_result));
-
- rc = SQLAllocStmt(conn->hdbc, &(result->stmt));
- if (rc == SQL_INVALID_HANDLE) {
- efree(result);
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "SQLAllocStmt error 'Invalid Handle'");
- RETURN_FALSE;
- }
-
- if (rc == SQL_ERROR) {
- odbc_sql_error(conn, SQL_NULL_HSTMT, "SQLAllocStmt");
- efree(result);
- RETURN_FALSE;
- }
-
- rc = SQLProcedureColumns(result->stmt,
- cat, SAFE_SQL_NTS(cat),
- schema, SAFE_SQL_NTS(schema),
- proc, SAFE_SQL_NTS(proc),
- col, SAFE_SQL_NTS(col) );
-
- if (rc == SQL_ERROR) {
- odbc_sql_error(conn, SQL_NULL_HSTMT, "SQLProcedureColumns");
- efree(result);
- RETURN_FALSE;
- }
-
- result->numparams = 0;
- SQLNumResultCols(result->stmt, &(result->numcols));
-
- if (result->numcols > 0) {
- if (!odbc_bindcols(result TSRMLS_CC)) {
- efree(result);
- RETURN_FALSE;
- }
- } else {
- result->values = NULL;
- }
- result->conn_ptr = conn;
- result->fetched = 0;
- ZEND_REGISTER_RESOURCE(return_value, result, le_result);
-}
-/* }}} */
-#endif /* HAVE_SOLID */
-
-#if !defined(HAVE_SOLID) && !defined(HAVE_SOLID_30) && !defined(HAVE_SOLID_35)
-/* {{{ proto resource odbc_procedures(resource connection_id [, string qualifier, string owner, string name])
- Returns a result identifier containg the list of procedure names in a datasource */
-PHP_FUNCTION(odbc_procedures)
-{
- pval **pv_conn, **pv_cat, **pv_schema, **pv_proc;
- odbc_result *result = NULL;
- odbc_connection *conn;
- char *cat = NULL, *schema = NULL, *proc = NULL;
- RETCODE rc;
- int argc;
-
- argc = ZEND_NUM_ARGS();
- if (argc == 1) {
- if (zend_get_parameters_ex(1, &pv_conn) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- } else if (argc == 4) {
- if (zend_get_parameters_ex(4, &pv_conn, &pv_cat, &pv_schema, &pv_proc) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex(pv_cat);
- cat = Z_STRVAL_PP(pv_cat);
- convert_to_string_ex(pv_schema);
- schema = Z_STRVAL_PP(pv_schema);
- convert_to_string_ex(pv_proc);
- proc = Z_STRVAL_PP(pv_proc);
- } else {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE2(conn, odbc_connection *, pv_conn, -1, "ODBC-Link", le_conn, le_pconn);
-
- result = (odbc_result *)ecalloc(1, sizeof(odbc_result));
-
- rc = SQLAllocStmt(conn->hdbc, &(result->stmt));
- if (rc == SQL_INVALID_HANDLE) {
- efree(result);
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "SQLAllocStmt error 'Invalid Handle'");
- RETURN_FALSE;
- }
-
- if (rc == SQL_ERROR) {
- odbc_sql_error(conn, SQL_NULL_HSTMT, "SQLAllocStmt");
- efree(result);
- RETURN_FALSE;
- }
-
- rc = SQLProcedures(result->stmt,
- cat, SAFE_SQL_NTS(cat),
- schema, SAFE_SQL_NTS(schema),
- proc, SAFE_SQL_NTS(proc) );
-
- if (rc == SQL_ERROR) {
- odbc_sql_error(conn, SQL_NULL_HSTMT, "SQLProcedures");
- efree(result);
- RETURN_FALSE;
- }
-
- result->numparams = 0;
- SQLNumResultCols(result->stmt, &(result->numcols));
-
- if (result->numcols > 0) {
- if (!odbc_bindcols(result TSRMLS_CC)) {
- efree(result);
- RETURN_FALSE;
- }
- } else {
- result->values = NULL;
- }
- result->conn_ptr = conn;
- result->fetched = 0;
- ZEND_REGISTER_RESOURCE(return_value, result, le_result);
-}
-/* }}} */
-#endif /* HAVE_SOLID */
-
-/* {{{ proto resource odbc_specialcolumns(resource connection_id, int type, string qualifier, string owner, string table, int scope, int nullable)
- Returns a result identifier containing either the optimal set of columns that uniquely identifies a row in the table or columns that are automatically updated when any value in the row is updated by a transaction */
-PHP_FUNCTION(odbc_specialcolumns)
-{
- pval **pv_conn, **pv_type, **pv_cat, **pv_schema, **pv_name;
- pval **pv_scope, **pv_nullable;
- odbc_result *result = NULL;
- odbc_connection *conn;
- char *cat = NULL, *schema = NULL, *name = NULL;
- UWORD type;
- UWORD scope, nullable;
- RETCODE rc;
- int argc;
-
- argc = ZEND_NUM_ARGS();
- if (argc == 7) {
- if (zend_get_parameters_ex(7, &pv_conn, &pv_type, &pv_cat, &pv_schema,
- &pv_name, &pv_scope, &pv_nullable) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long_ex(pv_type);
- type = (UWORD) Z_LVAL_PP(pv_type);
- convert_to_string_ex(pv_cat);
- cat = Z_STRVAL_PP(pv_cat);
- convert_to_string_ex(pv_schema);
- schema = Z_STRVAL_PP(pv_schema);
- 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);
- convert_to_long_ex(pv_nullable);
- nullable = (UWORD) Z_LVAL_PP(pv_nullable);
- } else {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE2(conn, odbc_connection *, pv_conn, -1, "ODBC-Link", le_conn, le_pconn);
-
- result = (odbc_result *)ecalloc(1, sizeof(odbc_result));
-
- rc = SQLAllocStmt(conn->hdbc, &(result->stmt));
- if (rc == SQL_INVALID_HANDLE) {
- efree(result);
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "SQLAllocStmt error 'Invalid Handle'");
- RETURN_FALSE;
- }
-
- if (rc == SQL_ERROR) {
- odbc_sql_error(conn, SQL_NULL_HSTMT, "SQLAllocStmt");
- efree(result);
- RETURN_FALSE;
- }
-
- rc = SQLSpecialColumns(result->stmt,
- type,
- cat, SAFE_SQL_NTS(cat),
- schema, SAFE_SQL_NTS(schema),
- name, SAFE_SQL_NTS(name),
- scope,
- nullable);
-
- if (rc == SQL_ERROR) {
- odbc_sql_error(conn, SQL_NULL_HSTMT, "SQLSpecialColumns");
- efree(result);
- RETURN_FALSE;
- }
-
- result->numparams = 0;
- SQLNumResultCols(result->stmt, &(result->numcols));
-
- if (result->numcols > 0) {
- if (!odbc_bindcols(result TSRMLS_CC)) {
- efree(result);
- RETURN_FALSE;
- }
- } else {
- result->values = NULL;
- }
- result->conn_ptr = conn;
- result->fetched = 0;
- ZEND_REGISTER_RESOURCE(return_value, result, le_result);
-}
-/* }}} */
-
-/* {{{ proto resource odbc_statistics(resource connection_id, string qualifier, string owner, string name, int unique, int accuracy)
- Returns a result identifier that contains statistics about a single table and the indexes associated with the table */
-PHP_FUNCTION(odbc_statistics)
-{
- pval **pv_conn, **pv_cat, **pv_schema, **pv_name;
- pval **pv_unique, **pv_reserved;
- odbc_result *result = NULL;
- odbc_connection *conn;
- char *cat = NULL, *schema = NULL, *name = NULL;
- UWORD unique, reserved;
- RETCODE rc;
- int argc;
-
- argc = ZEND_NUM_ARGS();
- if (argc == 6) {
- if (zend_get_parameters_ex(6, &pv_conn, &pv_cat, &pv_schema,
- &pv_name, &pv_unique, &pv_reserved) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex(pv_cat);
- cat = Z_STRVAL_PP(pv_cat);
- convert_to_string_ex(pv_schema);
- schema = Z_STRVAL_PP(pv_schema);
- 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);
- convert_to_long_ex(pv_reserved);
- reserved = (UWORD) Z_LVAL_PP(pv_reserved);
- } else {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE2(conn, odbc_connection *, pv_conn, -1, "ODBC-Link", le_conn, le_pconn);
-
- result = (odbc_result *)ecalloc(1, sizeof(odbc_result));
-
- rc = SQLAllocStmt(conn->hdbc, &(result->stmt));
- if (rc == SQL_INVALID_HANDLE) {
- efree(result);
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "SQLAllocStmt error 'Invalid Handle'");
- RETURN_FALSE;
- }
-
- if (rc == SQL_ERROR) {
- odbc_sql_error(conn, SQL_NULL_HSTMT, "SQLAllocStmt");
- efree(result);
- RETURN_FALSE;
- }
-
- rc = SQLStatistics(result->stmt,
- cat, SAFE_SQL_NTS(cat),
- schema, SAFE_SQL_NTS(schema),
- name, SAFE_SQL_NTS(name),
- unique,
- reserved);
-
- if (rc == SQL_ERROR) {
- odbc_sql_error(conn, SQL_NULL_HSTMT, "SQLStatistics");
- efree(result);
- RETURN_FALSE;
- }
-
- result->numparams = 0;
- SQLNumResultCols(result->stmt, &(result->numcols));
-
- if (result->numcols > 0) {
- if (!odbc_bindcols(result TSRMLS_CC)) {
- efree(result);
- RETURN_FALSE;
- }
- } else {
- result->values = NULL;
- }
- result->conn_ptr = conn;
- result->fetched = 0;
- ZEND_REGISTER_RESOURCE(return_value, result, le_result);
-}
-/* }}} */
-
-#if !defined(HAVE_DBMAKER) && !defined(HAVE_SOLID) && !defined(HAVE_SOLID_30) && !defined(HAVE_SOLID_35) && !defined(HAVE_BIRDSTEP)
-/* {{{ proto resource odbc_tableprivileges(resource connection_id, string qualifier, string owner, string name)
- Returns a result identifier containing a list of tables and the privileges associated with each table */
-PHP_FUNCTION(odbc_tableprivileges)
-{
- pval **pv_conn, **pv_cat, **pv_schema, **pv_table;
- odbc_result *result = NULL;
- odbc_connection *conn;
- char *cat = NULL, *schema = NULL, *table = NULL;
- RETCODE rc;
- int argc;
-
- argc = ZEND_NUM_ARGS();
- if (argc == 4) {
- if (zend_get_parameters_ex(4, &pv_conn, &pv_cat, &pv_schema, &pv_table) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex(pv_cat);
- cat = Z_STRVAL_PP(pv_cat);
- convert_to_string_ex(pv_schema);
- schema = Z_STRVAL_PP(pv_schema);
- convert_to_string_ex(pv_table);
- table = Z_STRVAL_PP(pv_table);
- } else {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE2(conn, odbc_connection *, pv_conn, -1, "ODBC-Link", le_conn, le_pconn);
-
- result = (odbc_result *)ecalloc(1, sizeof(odbc_result));
-
- rc = SQLAllocStmt(conn->hdbc, &(result->stmt));
- if (rc == SQL_INVALID_HANDLE) {
- efree(result);
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "SQLAllocStmt error 'Invalid Handle'");
- RETURN_FALSE;
- }
-
- if (rc == SQL_ERROR) {
- odbc_sql_error(conn, SQL_NULL_HSTMT, "SQLAllocStmt");
- efree(result);
- RETURN_FALSE;
- }
-
- rc = SQLTablePrivileges(result->stmt,
- cat, SAFE_SQL_NTS(cat),
- schema, SAFE_SQL_NTS(schema),
- table, SAFE_SQL_NTS(table));
-
- if (rc == SQL_ERROR) {
- odbc_sql_error(conn, SQL_NULL_HSTMT, "SQLTablePrivileges");
- efree(result);
- RETURN_FALSE;
- }
-
- result->numparams = 0;
- SQLNumResultCols(result->stmt, &(result->numcols));
-
- if (result->numcols > 0) {
- if (!odbc_bindcols(result TSRMLS_CC)) {
- efree(result);
- RETURN_FALSE;
- }
- } else {
- result->values = NULL;
- }
- result->conn_ptr = conn;
- result->fetched = 0;
- ZEND_REGISTER_RESOURCE(return_value, result, le_result);
-}
-/* }}} */
-#endif /* HAVE_DBMAKER */
-
-#endif /* HAVE_UODBC */
-
-/*
- * 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/odbc/php_odbc.h b/ext/odbc/php_odbc.h
deleted file mode 100644
index 3eefbe06f4..0000000000
--- a/ext/odbc/php_odbc.h
+++ /dev/null
@@ -1,117 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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. |
- +----------------------------------------------------------------------+
- | Authors: Stig Sæther Bakken <ssb@php.net> |
- | Andreas Karajannis <Andreas.Karajannis@gmd.de> |
- | Kevin N. Shallow <kshallow@tampabay.rr.com> (Birdstep) |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifndef PHP_ODBC_H
-#define PHP_ODBC_H
-
-#if HAVE_UODBC
-#define ODBCVER 0x0250
-
-#ifdef ZTS
-#include "TSRM.h"
-#endif
-
-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)
-# define PHP_ODBC_HAVE_FETCH_HASH 1
-#endif
-
-/* user functions */
-PHP_MINIT_FUNCTION(odbc);
-PHP_MSHUTDOWN_FUNCTION(odbc);
-PHP_RINIT_FUNCTION(odbc);
-PHP_RSHUTDOWN_FUNCTION(odbc);
-PHP_MINFO_FUNCTION(odbc);
-
-PHP_FUNCTION(odbc_error);
-PHP_FUNCTION(odbc_errormsg);
-PHP_FUNCTION(odbc_setoption);
-PHP_FUNCTION(odbc_autocommit);
-PHP_FUNCTION(odbc_close);
-PHP_FUNCTION(odbc_close_all);
-PHP_FUNCTION(odbc_commit);
-PHP_FUNCTION(odbc_connect);
-PHP_FUNCTION(odbc_pconnect);
-PHP_FUNCTION(odbc_cursor);
-#ifdef HAVE_SQLDATASOURCES
-PHP_FUNCTION(odbc_data_source);
-#endif
-PHP_FUNCTION(odbc_do);
-PHP_FUNCTION(odbc_exec);
-PHP_FUNCTION(odbc_execute);
-#ifdef PHP_ODBC_HAVE_FETCH_HASH
-PHP_FUNCTION(odbc_fetch_array);
-PHP_FUNCTION(odbc_fetch_object);
-#endif
-PHP_FUNCTION(odbc_fetch_into);
-PHP_FUNCTION(odbc_fetch_row);
-PHP_FUNCTION(odbc_field_len);
-PHP_FUNCTION(odbc_field_scale);
-PHP_FUNCTION(odbc_field_name);
-PHP_FUNCTION(odbc_field_type);
-PHP_FUNCTION(odbc_field_num);
-PHP_FUNCTION(odbc_free_result);
-#if !defined(HAVE_SOLID) && !defined(HAVE_SOLID_30)
-PHP_FUNCTION(odbc_next_result);
-#endif
-PHP_FUNCTION(odbc_num_fields);
-PHP_FUNCTION(odbc_num_rows);
-PHP_FUNCTION(odbc_prepare);
-PHP_FUNCTION(odbc_result);
-PHP_FUNCTION(odbc_result_all);
-PHP_FUNCTION(odbc_rollback);
-PHP_FUNCTION(odbc_binmode);
-PHP_FUNCTION(odbc_longreadlen);
-PHP_FUNCTION(odbc_tables);
-PHP_FUNCTION(odbc_columns);
-#if !defined(HAVE_DBMAKER) && !defined(HAVE_SOLID) && !defined(HAVE_SOLID_35) /* not supported now */
-PHP_FUNCTION(odbc_columnprivileges);
-PHP_FUNCTION(odbc_tableprivileges);
-#endif
-#if !defined(HAVE_SOLID) || !defined(HAVE_SOLID_35) /* not supported */
-PHP_FUNCTION(odbc_foreignkeys);
-PHP_FUNCTION(odbc_procedures);
-PHP_FUNCTION(odbc_procedurecolumns);
-#endif
-PHP_FUNCTION(odbc_gettypeinfo);
-PHP_FUNCTION(odbc_primarykeys);
-PHP_FUNCTION(odbc_specialcolumns);
-PHP_FUNCTION(odbc_statistics);
-
-#else
-
-#define odbc_module_ptr NULL
-
-#endif /* HAVE_UODBC */
-
-#define phpext_odbc_ptr odbc_module_ptr
-
-#endif /* PHP_ODBC_H */
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- */
diff --git a/ext/odbc/php_odbc_includes.h b/ext/odbc/php_odbc_includes.h
deleted file mode 100644
index 4a2f1ec176..0000000000
--- a/ext/odbc/php_odbc_includes.h
+++ /dev/null
@@ -1,287 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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. |
- +----------------------------------------------------------------------+
- | Authors: Stig Sæther Bakken <ssb@php.net> |
- | Andreas Karajannis <Andreas.Karajannis@gmd.de> |
- | Kevin N. Shallow <kshallow@tampabay.rr.com> (Birdstep) |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifndef PHP_ODBC_INCLUDES_H
-#define PHP_ODBC_INCLUDES_H
-
-#if HAVE_UODBC
-
-#define ODBCVER 0x0250
-/*#ifndef MSVC5
-#define FAR
-#endif
-*/
-
-/* checking in the same order as in configure.in */
-
-#if defined(HAVE_SOLID) || defined(HAVE_SOLID_30) || defined(HAVE_SOLID_35) /* Solid Server */
-
-#define ODBC_TYPE "Solid"
-#if defined(HAVE_SOLID)
-# include <cli0core.h>
-# include <cli0ext1.h>
-# include <cli0env.h>
-#elif defined(HAVE_SOLID_30)
-# include <cli0cli.h>
-# include <cli0defs.h>
-# include <cli0env.h>
-#elif defined(HAVE_SOLID_35)
-# if !defined(PHP_WIN32)
-# include <sqlunix.h>
-# endif /* end: #if !defined(PHP_WIN32) */
-# include <sqltypes.h>
-# include <sqlucode.h>
-# include <sqlext.h>
-# include <sql.h>
-#endif /* end: #if defined(HAVE_SOLID) */
-#undef HAVE_SQL_EXTENDED_FETCH
-PHP_FUNCTION(solid_fetch_prev);
-#define SQLSMALLINT SWORD
-#define SQLUSMALLINT UWORD
-#ifndef SQL_SUCCEEDED
-#define SQL_SUCCEEDED(rc) (((rc)&(~1))==0)
-#endif
-
-#elif defined(HAVE_EMPRESS) /* Empress */
-
-#define ODBC_TYPE "Empress"
-#include <sql.h>
-#include <sqlext.h>
-#undef HAVE_SQL_EXTENDED_FETCH
-
-#elif defined(HAVE_ADABAS) /* Adabas D */
-
-#define ODBC_TYPE "Adabas D"
-#include <WINDOWS.H>
-#include <sql.h>
-#include <sqlext.h>
-#define HAVE_SQL_EXTENDED_FETCH 1
-#define SQL_SUCCEEDED(rc) (((rc)&(~1))==0)
-#define SQLINTEGER ULONG
-#define SQLUSMALLINT USHORT
-
-#elif defined(HAVE_SAPDB) /* SAP DB */
-
-#define ODBC_TYPE "SAP DB"
-#include <WINDOWS.H>
-#include <sql.h>
-#include <sqlext.h>
-#define HAVE_SQL_EXTENDED_FETCH 1
-#define SQL_SUCCEEDED(rc) (((rc)&(~1))==0)
-
-#elif defined(HAVE_IODBC) /* iODBC library */
-
-#define ODBC_TYPE "iODBC"
-#include <isql.h>
-#include <isqlext.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 */
-
-#ifdef CHAR
-#undef CHAR
-#endif
-
-#ifdef SQLCHAR
-#undef SQLCHAR
-#endif
-
-#define ODBC_TYPE "unixODBC"
-#include <sql.h>
-#include <sqlext.h>
-#define HAVE_SQL_EXTENDED_FETCH 1
-
-#elif defined(HAVE_ESOOB) /* Easysoft ODBC-ODBC Bridge library */
-
-#define ODBC_TYPE "ESOOB"
-#include <sql.h>
-#include <sqlext.h>
-#define HAVE_SQL_EXTENDED_FETCH 1
-
-#elif defined(HAVE_OPENLINK) /* OpenLink ODBC drivers */
-
-#define ODBC_TYPE "Openlink"
-#include <iodbc.h>
-#include <isql.h>
-#include <isqlext.h>
-#include <udbcext.h>
-#define HAVE_SQL_EXTENDED_FETCH 1
-#define SQLSMALLINT SWORD
-#define SQLUSMALLINT UWORD
-
-#elif defined(HAVE_BIRDSTEP) /* Raima Birdstep */
-
-#define ODBC_TYPE "Birdstep"
-#define UNIX
-/*
- * Extended Fetch in the Birdstep ODBC API is incapable of returning long varchar (memo) fields.
- * So the following line has been commented-out to accomadate. - KNS
- *
- * #define HAVE_SQL_EXTENDED_FETCH 1
- */
-#include <sql.h>
-#include <sqlext.h>
-#define SQLINTEGER SDWORD
-#define SQLSMALLINT SWORD
-#define SQLUSMALLINT UWORD
-
-
-#elif defined(HAVE_DBMAKER) /* DBMaker */
-
-#define ODBC_TYPE "DBMaker"
-#undef ODBCVER
-#define ODBCVER 0x0300
-#define HAVE_SQL_EXTENDED_FETCH 1
-#include <odbc.h>
-
-
-#elif defined(HAVE_CODBC) /* Custom ODBC */
-
-#define ODBC_TYPE "Custom ODBC"
-#define HAVE_SQL_EXTENDED_FETCH 1
-#include <odbc.h>
-
-#elif defined(HAVE_IBMDB2) /* DB2 CLI */
-
-#define ODBC_TYPE "IBM DB2 CLI"
-#define HAVE_SQL_EXTENDED_FETCH 1
-#include <sqlcli1.h>
-#ifdef DB268K
-/* Need to include ASLM for 68K applications */
-#include <LibraryManager.h>
-#endif
-
-#else /* MS ODBC */
-
-#define HAVE_SQL_EXTENDED_FETCH 1
-#include <WINDOWS.H>
-#include <sql.h>
-#include <sqlext.h>
-#endif
-
-
-/* Common defines */
-
-#if defined( HAVE_IBMDB2 ) || defined( HAVE_UNIXODBC )
-#define ODBC_SQL_ENV_T SQLHANDLE
-#define ODBC_SQL_CONN_T SQLHANDLE
-#define ODBC_SQL_STMT_T SQLHANDLE
-#elif defined( HAVE_SOLID_35 ) || defined( HAVE_SAPDB ) || defined ( HAVE_EMPRESS )
-#define ODBC_SQL_ENV_T SQLHENV
-#define ODBC_SQL_CONN_T SQLHDBC
-#define ODBC_SQL_STMT_T SQLHSTMT
-#else
-#define ODBC_SQL_ENV_T HENV
-#define ODBC_SQL_CONN_T HDBC
-#define ODBC_SQL_STMT_T HSTMT
-#endif
-
-typedef struct odbc_connection {
- ODBC_SQL_ENV_T henv;
- ODBC_SQL_CONN_T hdbc;
- char laststate[6];
- char lasterrormsg[SQL_MAX_MESSAGE_LENGTH];
- int id;
- int persistent;
-} odbc_connection;
-
-typedef struct odbc_result_value {
- char name[32];
- char *value;
- long int vallen;
- SDWORD coltype;
-} odbc_result_value;
-
-typedef struct odbc_result {
- ODBC_SQL_STMT_T stmt;
- int id;
- odbc_result_value *values;
- SWORD numcols;
- SWORD numparams;
-# if HAVE_SQL_EXTENDED_FETCH
- int fetch_abs;
-# endif
- long longreadlen;
- int binmode;
- int fetched;
- odbc_connection *conn_ptr;
-} odbc_result;
-
-typedef struct {
- char *defDB;
- char *defUser;
- char *defPW;
- long allow_persistent;
- long check_persistent;
- long max_persistent;
- long max_links;
- long num_persistent;
- long num_links;
- int defConn;
- long defaultlrl;
- long defaultbinmode;
- char laststate[6];
- char lasterrormsg[SQL_MAX_MESSAGE_LENGTH];
- HashTable *resource_list;
- HashTable *resource_plist;
-} php_odbc_globals;
-
-int odbc_add_result(HashTable *list, odbc_result *result);
-odbc_result *odbc_get_result(HashTable *list, int count);
-void odbc_del_result(HashTable *list, int count);
-int odbc_add_conn(HashTable *list, HDBC conn);
-odbc_connection *odbc_get_conn(HashTable *list, int count);
-void odbc_del_conn(HashTable *list, int ind);
-int odbc_bindcols(odbc_result *result TSRMLS_DC);
-
-#define ODBC_SQL_ERROR_PARAMS odbc_connection *conn_resource, ODBC_SQL_STMT_T stmt, char *func
-
-void odbc_sql_error(ODBC_SQL_ERROR_PARAMS);
-
-#define IS_SQL_LONG(x) (x == SQL_LONGVARBINARY || x == SQL_LONGVARCHAR)
-#define IS_SQL_BINARY(x) (x == SQL_BINARY || x == SQL_VARBINARY || x == SQL_LONGVARBINARY)
-
-#ifdef ZTS
-# define ODBCG(v) TSRMG(odbc_globals_id, php_odbc_globals *, v)
-#else
-# define ODBCG(v) (odbc_globals.v)
-extern ZEND_API php_odbc_globals odbc_globals;
-#endif
-
-#endif /* HAVE_UODBC */
-#endif /* PHP_ODBC_INCLUDES_H */
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- */
diff --git a/ext/openssl/CREDITS b/ext/openssl/CREDITS
deleted file mode 100644
index c2f50d6308..0000000000
--- a/ext/openssl/CREDITS
+++ /dev/null
@@ -1,2 +0,0 @@
-OpenSSL
-Stig Venaas, Wez Furlong, Sascha Kettler
diff --git a/ext/openssl/README b/ext/openssl/README
deleted file mode 100644
index 20a38332fb..0000000000
--- a/ext/openssl/README
+++ /dev/null
@@ -1,322 +0,0 @@
-OpenSSL extension for PHP
-
-$Id$
-
-The functions implemented so far make it possible to seal and open data, and
-also create and verify signatures.
-
-NEW: support for S/MIME encrypt/decrypt/sign/verify, as well as more
-flexibility for specifying certificates/keys.
-
-To enable the extension, configure PHP with --with-openssl.
-
-Specifying keys/certificates
-----------------------------
-
-Most of the functions require a key or a certificate as a parameter; to make
-things easy for you to use openssl, this extension allows you
-to specify certificates in the following way:
-
-1. As an X.509 resource returned from openssl_x509_read
-2. As a string in the format file://filename, where filename is the path to the
- certificate file (it will be opened and read automatically)
-3. As a string containing the data from the certificate file
-
-Similarly, you can use the following methods of specifying a public key:
-
-1. As a key resource returned from openssl_get_publickey
-2. An X509 resource - public key only
-3. As a string in the format file://filename
-4. As a string containing the data from the key file
-
-Additionally, for a private key, when the openssl extension function does not
-allow you to enter the passphrase as a parameter you may use the syntax
-array($key, "passphrase") where $key can be a key specified using one of the
-methods listed above.
-
-Certificate Verification
-------------------------
-When calling a function that will verify a signature/certificate, the cainfo
-parameter is an array containing file and directory names that specifiy the
-locations of trusted CA files. If a directory is specified, then it must be a
-correctly hashed directory.
-
-Misc:
------
-
-mixed openssl_error_string()
-
-returns the message from the last error that the OpenSSL library encountered
-and moves it's internal error pointer to the next message. If there are no
-more error messages, returns false.
-
-General Key/Cert Functions:
----------------------------
-
-resource openssl_get_privatekey(mixed key [, string passphrase])
-
-Parses the key data and returns a key resource identifier. If the key is
-encrypted a passphrase is needed. This can be supplied as second argument.
-
-
-resource openssl_get_publickey(mixed cert)
-
-Extracts the public key from the given certificate or public key and returns
-a key resource identifier.
-
-
-void openssl_free_key(resource key)
-
-Frees the resource given by the key resource identifier.
-Note that this function does not accept the extended key specification
-syntax mentioned above, as it doesn't make sense in this case!
-
-array openssl_x509_parse(mixed x509[, bool shortnames=true])
-
-Parses the certificate data and returns an array containing information
-about the certificate, it's intended purposes, subject, issuer, validity
-etc. etc. If shortnames is true (the default) then the fields will be
-keyed by the shortname forms eg: CN as opposed to commonName (shortnames
-= false).
-
-
-bool openssl_x509_checkpurpose(mixed x509cert, int purpose,
- array cainfo[, string untrustedfile])
-
-Verifies if the certificate can be used for a specific purpose.
-Purpose can be one of the following values:
- X509_PURPOSE_SSL_CLIENT
- X509_PURPOSE_SSL_SERVER
- X509_PURPOSE_NS_SSL_SERVER
- X509_PURPOSE_SMIME_SIGN
- X509_PURPOSE_SMIME_ENCRYPT
- X509_PURPOSE_CRL_SIGN
- X509_PURPOSE_ANY
-
-cainfo is an array of CA information (as mentioned above).
-untrusted file specifies a file containing a bunch of certs that
-are not trusted but may be useful in validating the certificate.
-
-
-resource openssl_read_x509(mixed cert)
-
-Parses the cert and returns a resource that can be used with the
-other openssl functions
-
-
-void openssl_free_x509(resource x509)
-
-Frees the resource given by the x509 resource identifier.
-Note that this function does not accept the extended cert specification
-syntax mentioned above, as it doesn't make sense in this case!
-
-
-PKCS7 (S/MIME) Sign/Verify/Encrypt/Decrypt Functions:
------------------------------------------------------
-
-These functions allow you to manipulate S/MIME messages!
-
-They are based on apps/smime.c from the openssl dist, so for information,
-see the documentation for openssl.
-
-You may pass in some flags that affect how these functions work using
-and array containing the following values:
-"detached", "nodetached", "text", "nointern", "noverify", "nochain",
-"nocerts", "noattr", "binary", "nosigs".
-The options correspond to the options of the same name for the
-"openssl smime" command (smime(1)).
-
-
-bool openssl_pkcs7_verify(string filename, array flags[, string signerscerts][,
- array cainfo])
-
-Verifies that the signature on the MIME message contained in the file
-named by filename is valid. If signerscerts is passed in, it holds the
-name of a file into which the certificates of those that signed the
-message will be stored.
-cainfo and flags are CA information and flag information as described
-above.
-
-
-bool openssl_pkcs7_encrypt(string infile, string outfile, array recipcerts,
- array headers[, array flags])
-
-Encrypts the MIME message contained in the file named by infile using
-the certificates held in recipcerts. The result is place in the file
-named outfile.
-recipcerts is an array of certificate identifiers representing the certs
-of the intended recipients of the message.
-headers is an array of headers to prepend to the message: they will
-not be included in the encoded section.
-flags is flag information as described above.
-Hint: you will want to put "To", "From", and "Subject" headers in headers.
-Headers can be either an assoc array keyed by header named, or can be
-and indexed array containing a single header line per value.
-The message will be encoded using a RC2-40 bit cipher.
-TODO: allow user to specify cipher.
-
-bool openssl_pkcs7_sign(string infile, string outfile, mixed signcert, mixed
- signkey, array headers[, array flags][, string extracertsfilename])
-
-Signs the MIME message contained in the file named by infile using the
-certificate and key pair identified by signcert/signkey.
-Signkey must be the private key corresponding to signcert.
-The result is placed in the file named by outfile.
-Headers and flags have the same effects as mentioned above.
-extracertsfilename names a file containing a bunch of additional certificates
-to include in the signature, in order to aid the recipient in verifying the
-message.
-
-
-bool openssl_pkcs7_decrypt(string infilename, string outfilename, mixed
- recipcert, mixed recipkey)
-
-Decrypts the MIME message contained in the file named by infilename
-using the certificate and private key pair recipcert/recipkey.
-The descrypted result is placed in outfilename.
-TODO: add flags parameter, if needed?
-
-
-EVP Sign/Verify/Encrypt/Decrypt Functions:
-------------------------------------------
-
-bool openssl_sign(string data, &string signature, mixed key)
-
-Uses key to create signature for data, returns true on success and false
-on failure. signature is passed by reference and contains the newly created
-signature on success.
-
-
-int openssl_verify(string data, string signature, mixed key)
-
-Uses key to verify that the signature is correct for the given data.
-Returns 1 if correct, 0 if incorrect, and -1 on error.
-
-
-int openssl_seal(string data, &string sealdata, &array ekeys, array pubkeys)
-
-Encrypts data using pubkeys, so that only owners of the respective private
-keys and ekeys can decrypt and read the data. Returns the length of the
-sealed data on success, else false. On success, sealdata and ekeys hold
-the sealed data and envelope keys.
-
-
-bool openssl_open(string data, &string opendata, string ekey, int privkey)
-
-Opens (decrypts) sealed data using a private key and the corresponding
-envelope key. Returns true on success and false on failure. On success,
-opendata will hold the descypted data.
-
-
-See below for more details on usage. Also feel free to mail me at
-venaas@php.net if you have questions. The OpenSSL documentation,
-especially the EVP documentation at
-http://www.openssl.org/docs/crypto/evp.html, might also be of help.
-
-
-HOWTO:
-
-To do anything you need a private key and a certificate containing the
-corresponding public key. This is similar to what you have using say an
-Apache webserver with OpenSSL. For testing you could try keys that come
-with OpenSSL, that's what the sample scripts below do. You can also get
-keys from some CA, or you can create them yourself.
-
-
-Creating private key
-
-To generate an unprotected 1024 bit RSA private key you can do
-
- openssl genrsa -out /tmp/test.key 1024
-
-Private keys should be protected by a passphrase though.
-
-
-Creating a self signed certificate
-
-To generate a self signed certificate from the key that is valid for
-365 days, do
-
- openssl req -new -key /tmp/test.key -out /tmp/test.crt -days 365 -x509
-
-
-Example usage
-
-These examples use keys that come with OpenSSL, you should perhaps test with
-those first.
-
-
-Seal and open
-
- <?php
- $data = "Follow the white rabbit";
-
- // Get certificate into a string
- // this file comes with OpenSSL 0.9.6
- $fp = fopen("/src/openssl-0.9.6/demos/maurice/cert.pem", "r");
- $cert = fread($fp, 8192);
- fclose($fp);
- // get public key from certificate
- $pk1 = openssl_get_publickey($cert);
- // $pk1 is an encryption key resource id if success, else false
- // Repeat if want public keys for multiple parties
-
- $fp = fopen("/src/openssl-0.9.6/demos/sign/cert.pem", "r");
- $cert = fread($fp, 8192);
- fclose($fp);
- $pk2 = openssl_get_publickey($cert);
-
- // seal data, only owners of $pk1 and $pk2 can decrypt $sealed with keys
- // $ekeys[0] and $ekeys[1] respectively.
- openssl_seal($data, $sealed, $ekeys, array($pk1,$pk2));
- openssl_free_key($pk1);
- openssl_free_key($pk2);
-
- // now we try to decrypt data for one of the recipients
- $fp = fopen("/src/openssl-0.9.6/demos/sign/key.pem", "r");
- // Get PEM coded key into $pkey
- $pkey = fread($fp, 8192);
- fclose($fp);
- // $key will be resource id for unpacked $pkey
- $key = openssl_get_privatekey($pkey);
-
- openssl_open($sealed, $open, $ekeys[1], $key);
- openssl_free_key($key);
- echo "$open\n";
- ?>
-
-
-Sign and verify
-
- <?php
- $data = "Follow the white rabbit";
-
- // First we need to have a string containing the private key in PEM format
- // this file comes with OpenSSL 0.9.6
- $fp = fopen("/src/openssl-0.9.6/demos/sign/key.pem", "r");
- $pkey = fread($fp, 8192);
- fclose($fp);
-
- // get private key from the PEM format
- // $key is an encr key resource id if success, else false
- $key = openssl_get_privatekey($pkey);
-
- // calculate signature
- openssl_sign($data, $signature, $key);
- openssl_free_key($key);
-
- // recipient verifies signature
- // read certificate
- $fp = fopen("/src/openssl-0.9.6/demos/sign/cert.pem", "r");
- $cert = fread($fp, 8192);
- fclose($fp);
-
- // Get public key from the certificate
- $pubkey = openssl_get_publickey($cert);
-
- // state whether signature is okay or not
- echo openssl_verify($data, $signature, $pubkey) == 1 ? "ok\n" : "bad\n";
-
- // free key
- openssl_free_key($pubkey);
- ?>
diff --git a/ext/openssl/config.w32 b/ext/openssl/config.w32
deleted file mode 100644
index 98dc852ee8..0000000000
--- a/ext/openssl/config.w32
+++ /dev/null
@@ -1,17 +0,0 @@
-// $Id$
-// vim:ft=javascript
-
-ARG_WITH("openssl", "OpenSSL support", "no");
-
-if (PHP_OPENSSL != "no") {
- if (CHECK_LIB("ssleay32.lib", "openssl", PHP_OPENSSL) &&
- CHECK_LIB("libeay32.lib", "openssl", PHP_OPENSSL) &&
- CHECK_HEADER_ADD_INCLUDE("openssl/ssl.h", "CFLAGS_OPENSSL")) {
- EXTENSION("openssl", "openssl.c xp_ssl.c");
-
- AC_DEFINE("HAVE_OPENSSL_EXT", PHP_OPENSSL_SHARED ? 0 : 1, "Have openssl");
- AC_DEFINE("HAVE_OPENSSL", 1);
- }
-}
-
-
diff --git a/ext/openssl/config0.m4 b/ext/openssl/config0.m4
deleted file mode 100644
index 157c35b66b..0000000000
--- a/ext/openssl/config0.m4
+++ /dev/null
@@ -1,17 +0,0 @@
-dnl
-dnl $Id$
-dnl
-
-PHP_ARG_WITH(openssl, for OpenSSL support,
-[ --with-openssl[=DIR] Include OpenSSL support (requires OpenSSL >= 0.9.6)])
-
-if test "$PHP_OPENSSL" != "no"; then
- PHP_SETUP_OPENSSL(OPENSSL_SHARED_LIBADD,
- [
- PHP_NEW_EXTENSION(openssl, openssl.c xp_ssl.c, $ext_shared)
- PHP_SUBST(OPENSSL_SHARED_LIBADD)
- AC_DEFINE(HAVE_OPENSSL_EXT,1,[ ])
- ], [
- AC_MSG_ERROR([OpenSSL check failed. Please check config.log for more information.])
- ])
-fi
diff --git a/ext/openssl/openssl.c b/ext/openssl/openssl.c
deleted file mode 100644
index 002fd47748..0000000000
--- a/ext/openssl/openssl.c
+++ /dev/null
@@ -1,3302 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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. |
- +----------------------------------------------------------------------+
- | Authors: Stig Venaas <venaas@php.net> |
- | Wez Furlong <wez@thebrainroom.com> |
- | Sascha Kettler <kettler@gmx.net> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "php.h"
-#include "php_openssl.h"
-
-/* PHP Includes */
-#include "ext/standard/file.h"
-#include "ext/standard/info.h"
-#include "ext/standard/php_fopen_wrappers.h"
-
-/* OpenSSL includes */
-#include <openssl/evp.h>
-#include <openssl/x509.h>
-#include <openssl/x509v3.h>
-#include <openssl/crypto.h>
-#include <openssl/pem.h>
-#include <openssl/err.h>
-#include <openssl/conf.h>
-#include <openssl/rand.h>
-#include <openssl/ssl.h>
-
-#define DEFAULT_KEY_LENGTH 512
-#define MIN_KEY_LENGTH 384
-
-#define OPENSSL_ALGO_SHA1 1
-#define OPENSSL_ALGO_MD5 2
-#define OPENSSL_ALGO_MD4 3
-#define OPENSSL_ALGO_MD2 4
-
-#define DEBUG_SMIME 0
-
-static
- ZEND_BEGIN_ARG_INFO(arg2and3_force_ref, 0)
- ZEND_ARG_PASS_INFO(0)
- ZEND_ARG_PASS_INFO(1)
- ZEND_ARG_PASS_INFO(1)
- ZEND_END_ARG_INFO();
-
-enum php_openssl_key_type {
- OPENSSL_KEYTYPE_RSA,
- OPENSSL_KEYTYPE_DSA,
- OPENSSL_KEYTYPE_DH,
- OPENSSL_KEYTYPE_DEFAULT = OPENSSL_KEYTYPE_RSA
-};
-
-enum php_openssl_cipher_type {
- PHP_OPENSSL_CIPHER_RC2_40,
- PHP_OPENSSL_CIPHER_RC2_128,
- PHP_OPENSSL_CIPHER_RC2_64,
- PHP_OPENSSL_CIPHER_DES,
- PHP_OPENSSL_CIPHER_3DES,
-
- PHP_OPENSSL_CIPHER_DEFAULT = PHP_OPENSSL_CIPHER_RC2_40
-};
-
-/* {{{ openssl_functions[]
- */
-function_entry openssl_functions[] = {
-/* public/private key functions */
- PHP_FE(openssl_pkey_free, NULL)
- PHP_FE(openssl_pkey_new, NULL)
- PHP_FE(openssl_pkey_export, second_arg_force_ref)
- PHP_FE(openssl_pkey_export_to_file, NULL)
- PHP_FE(openssl_pkey_get_private, NULL)
- PHP_FE(openssl_pkey_get_public, NULL)
-
- PHP_FALIAS(openssl_free_key, openssl_pkey_free, NULL)
- PHP_FALIAS(openssl_get_privatekey, openssl_pkey_get_private, NULL)
- PHP_FALIAS(openssl_get_publickey, openssl_pkey_get_public, NULL)
-
-/* x.509 cert funcs */
- PHP_FE(openssl_x509_read, NULL)
- PHP_FE(openssl_x509_free, NULL)
- PHP_FE(openssl_x509_parse, NULL)
- PHP_FE(openssl_x509_checkpurpose, NULL)
- PHP_FE(openssl_x509_check_private_key, NULL)
- PHP_FE(openssl_x509_export, second_arg_force_ref)
- PHP_FE(openssl_x509_export_to_file, NULL)
-
-/* CSR funcs */
- PHP_FE(openssl_csr_new, second_arg_force_ref)
- PHP_FE(openssl_csr_export, second_arg_force_ref)
- PHP_FE(openssl_csr_export_to_file, NULL)
- PHP_FE(openssl_csr_sign, NULL)
-
- PHP_FE(openssl_sign, second_arg_force_ref)
- PHP_FE(openssl_verify, NULL)
- PHP_FE(openssl_seal, arg2and3_force_ref)
- PHP_FE(openssl_open, second_arg_force_ref)
-
-/* for S/MIME handling */
- PHP_FE(openssl_pkcs7_verify, NULL)
- PHP_FE(openssl_pkcs7_decrypt, NULL)
- PHP_FE(openssl_pkcs7_sign, NULL)
- PHP_FE(openssl_pkcs7_encrypt, NULL)
-
- PHP_FE(openssl_private_encrypt, second_arg_force_ref)
- PHP_FE(openssl_private_decrypt, second_arg_force_ref)
- PHP_FE(openssl_public_encrypt, second_arg_force_ref)
- PHP_FE(openssl_public_decrypt, second_arg_force_ref)
-
- PHP_FE(openssl_error_string, NULL)
- {NULL, NULL, NULL}
-};
-/* }}} */
-
-/* {{{ openssl_module_entry
- */
-zend_module_entry openssl_module_entry = {
- STANDARD_MODULE_HEADER,
- "openssl",
- openssl_functions,
- PHP_MINIT(openssl),
- NULL,
- NULL,
- NULL,
- PHP_MINFO(openssl),
- NO_VERSION_YET,
- STANDARD_MODULE_PROPERTIES
-};
-/* }}} */
-
-#ifdef COMPILE_DL_OPENSSL
-ZEND_GET_MODULE(openssl)
-# ifdef PHP_WIN32
-# include "zend_arg_defs.c"
-# endif
-#endif
-
-static int le_key;
-static int le_x509;
-static int le_csr;
-static int ssl_stream_data_index;
-
-/* {{{ resource destructors */
-static void php_pkey_free(zend_rsrc_list_entry *rsrc TSRMLS_DC)
-{
- EVP_PKEY *pkey = (EVP_PKEY *)rsrc->ptr;
-
- assert(pkey != NULL);
-
- EVP_PKEY_free(pkey);
-}
-
-static void php_x509_free(zend_rsrc_list_entry *rsrc TSRMLS_DC)
-{
- X509 *x509 = (X509 *)rsrc->ptr;
- X509_free(x509);
-}
-
-static void php_csr_free(zend_rsrc_list_entry *rsrc TSRMLS_DC)
-{
- X509_REQ * csr = (X509_REQ*)rsrc->ptr;
- X509_REQ_free(csr);
-}
-/* }}} */
-
-/* {{{ openssl safe_mode & open_basedir checks */
-inline static int php_openssl_safe_mode_chk(char *filename TSRMLS_DC)
-{
- if (PG(safe_mode) && (!php_checkuid(filename, NULL, CHECKUID_CHECK_FILE_AND_DIR))) {
- return -1;
- }
- if (php_check_open_basedir(filename TSRMLS_CC)) {
- return -1;
- }
-
- return 0;
-}
-/* }}} */
-
-/* {{{ openssl -> PHP "bridging" */
-/* true global; readonly after module startup */
-static char default_ssl_conf_filename[MAXPATHLEN];
-
-struct php_x509_request {
- LHASH * global_config; /* Global SSL config */
- LHASH * req_config; /* SSL config for this request */
- const EVP_MD * md_alg;
- const EVP_MD * digest;
- char * section_name,
- * config_filename,
- * digest_name,
- * extensions_section,
- * request_extensions_section;
- int priv_key_bits;
- int priv_key_type;
-
- int priv_key_encrypt;
-
- EVP_PKEY * priv_key;
-};
-
-
-static X509 * php_openssl_x509_from_zval(zval ** val, int makeresource, long * resourceval TSRMLS_DC);
-static EVP_PKEY * php_openssl_evp_from_zval(zval ** val, int public_key, char * passphrase, int makeresource, long * resourceval TSRMLS_DC);
-static int php_openssl_is_private_key(EVP_PKEY* pkey TSRMLS_DC);
-static X509_STORE * setup_verify(zval * calist TSRMLS_DC);
-static STACK_OF(X509) * load_all_certs_from_file(char *certfile);
-static X509_REQ * php_openssl_csr_from_zval(zval ** val, int makeresource, long * resourceval TSRMLS_DC);
-static EVP_PKEY * php_openssl_generate_private_key(struct php_x509_request * req TSRMLS_DC);
-
-
-static void add_assoc_name_entry(zval * val, char * key, X509_NAME * name, int shortname TSRMLS_DC)
-{
- zval * subitem;
- int i;
- char * sn, * ln;
- int nid;
- X509_NAME_ENTRY * ne;
- ASN1_STRING * str;
- ASN1_OBJECT * obj;
-
- MAKE_STD_ZVAL(subitem);
- array_init(subitem);
-
- for (i = 0; i < X509_NAME_entry_count(name); i++) {
- ne = X509_NAME_get_entry(name, i);
- obj = X509_NAME_ENTRY_get_object(ne);
- str = X509_NAME_ENTRY_get_data(ne);
- nid = OBJ_obj2nid(obj);
- if (shortname) {
- sn = (char*)OBJ_nid2sn(nid);
- add_assoc_stringl(subitem, sn, str->data, str->length, 1);
- } else {
- ln = (char*)OBJ_nid2ln(nid);
- add_assoc_stringl(subitem, ln, str->data, str->length, 1);
- }
- }
- zend_hash_update(HASH_OF(val), key, strlen(key) + 1, (void *)&subitem, sizeof(subitem), NULL);
-}
-
-static void add_assoc_asn1_string(zval * val, char * key, ASN1_STRING * str)
-{
- add_assoc_stringl(val, key, str->data, str->length, 1);
-}
-
-static time_t asn1_time_to_time_t(ASN1_UTCTIME * timestr TSRMLS_DC)
-{
-/*
- This is how the time string is formatted:
-
- sprintf(p,"%02d%02d%02d%02d%02d%02dZ",ts->tm_year%100,
- ts->tm_mon+1,ts->tm_mday,ts->tm_hour,ts->tm_min,ts->tm_sec);
-*/
-
- time_t ret;
- struct tm thetime;
- char * strbuf;
- char * thestr;
- long gmadjust = 0;
-
- if (timestr->length < 13) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "extension author too lazy to parse %s correctly", timestr->data);
- return (time_t)-1;
- }
-
- strbuf = estrdup(timestr->data);
-
- memset(&thetime, 0, sizeof(thetime));
-
- /* we work backwards so that we can use atoi more easily */
-
- thestr = strbuf + timestr->length - 3;
-
- thetime.tm_sec = atoi(thestr);
- *thestr = '\0';
- thestr -= 2;
- thetime.tm_min = atoi(thestr);
- *thestr = '\0';
- thestr -= 2;
- thetime.tm_hour = atoi(thestr);
- *thestr = '\0';
- thestr -= 2;
- thetime.tm_mday = atoi(thestr);
- *thestr = '\0';
- thestr -= 2;
- thetime.tm_mon = atoi(thestr)-1;
- *thestr = '\0';
- thestr -= 2;
- thetime.tm_year = atoi(thestr);
-
- if (thetime.tm_year < 68) {
- thetime.tm_year += 100;
- }
-
- thetime.tm_isdst = -1;
- ret = mktime(&thetime);
-
-#if HAVE_TM_GMTOFF
- gmadjust = thetime.tm_gmtoff;
-#else
- /*
- ** If correcting for daylight savings time, we set the adjustment to
- ** the value of timezone - 3600 seconds. Otherwise, we need to overcorrect and
- ** set the adjustment to the main timezone + 3600 seconds.
- */
- gmadjust = -(thetime.tm_isdst ? (long)timezone - 3600 : (long)timezone + 3600);
-#endif
- ret += gmadjust;
-
- efree(strbuf);
-
- return ret;
-}
-
-static inline int php_openssl_config_check_syntax(
- const char * section_label,
- const char * config_filename,
- const char * section,
- LHASH * config TSRMLS_DC)
-{
- X509V3_CTX ctx;
-
- X509V3_set_ctx_test(&ctx);
- X509V3_set_conf_lhash(&ctx, config);
- if (!X509V3_EXT_add_conf(config, &ctx, (char *)section, NULL)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Error loading %s section %s of %s",
- section_label,
- section,
- config_filename);
- return FAILURE;
- }
- return SUCCESS;
-}
-
-static int add_oid_section(struct php_x509_request * req TSRMLS_DC)
-{
- char * str;
- STACK_OF(CONF_VALUE) * sktmp;
- CONF_VALUE * cnf;
- int i;
-
- str = CONF_get_string(req->req_config, NULL, "oid_section");
- if (str == NULL) {
- return SUCCESS;
- }
- sktmp = CONF_get_section(req->req_config, str);
- if (sktmp == NULL) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "problem loading oid section %s", str);
- return FAILURE;
- }
- for (i = 0; i < sk_CONF_VALUE_num(sktmp); i++) {
- cnf = sk_CONF_VALUE_value(sktmp, i);
- if (OBJ_create(cnf->value, cnf->name, cnf->name) == NID_undef) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "problem creating object %s=%s", cnf->name, cnf->value);
- return FAILURE;
- }
- }
- return SUCCESS;
-}
-
-#define PHP_SSL_REQ_INIT(req) memset(req, 0, sizeof(*req))
-#define PHP_SSL_REQ_DISPOSE(req) php_openssl_dispose_config(req TSRMLS_CC)
-#define PHP_SSL_REQ_PARSE(req, zval) php_openssl_parse_config(req, zval TSRMLS_CC)
-
-#define PHP_SSL_CONFIG_SYNTAX_CHECK(var) if (req->var && php_openssl_config_check_syntax(#var, \
- req->config_filename, req->var, req->req_config TSRMLS_CC) == FAILURE) return FAILURE
-
-#define SET_OPTIONAL_STRING_ARG(key, varname, defval) \
- if (optional_args && zend_hash_find(Z_ARRVAL_P(optional_args), key, sizeof(key), (void**)&item) == SUCCESS) \
- varname = Z_STRVAL_PP(item); \
- else \
- varname = defval
-
-#define SET_OPTIONAL_LONG_ARG(key, varname, defval) \
- if (optional_args && zend_hash_find(Z_ARRVAL_P(optional_args), key, sizeof(key), (void**)&item) == SUCCESS) \
- varname = Z_LVAL_PP(item); \
- else \
- varname = defval
-
-
-
-static int php_openssl_parse_config(
- struct php_x509_request * req,
- zval * optional_args
- TSRMLS_DC
- )
-{
- char * str;
- zval ** item;
-
- SET_OPTIONAL_STRING_ARG("config", req->config_filename, default_ssl_conf_filename);
- SET_OPTIONAL_STRING_ARG("config_section_name", req->section_name, "req");
- req->global_config = CONF_load(NULL, default_ssl_conf_filename, NULL);
- req->req_config = CONF_load(NULL, req->config_filename, NULL);
-
- if (req->req_config == NULL) {
- return FAILURE;
- }
-
- /* read in the oids */
- str = CONF_get_string(req->req_config, NULL, "oid_file");
- if (str && !php_openssl_safe_mode_chk(str TSRMLS_CC)) {
- BIO *oid_bio = BIO_new_file(str, "r");
- if (oid_bio) {
- OBJ_create_objects(oid_bio);
- BIO_free(oid_bio);
- }
- }
- if (add_oid_section(req TSRMLS_CC) == FAILURE) {
- return FAILURE;
- }
- SET_OPTIONAL_STRING_ARG("digest_alg", req->digest_name,
- CONF_get_string(req->req_config, req->section_name, "default_md"));
- SET_OPTIONAL_STRING_ARG("x509_extensions", req->extensions_section,
- CONF_get_string(req->req_config, req->section_name, "x509_extensions"));
- SET_OPTIONAL_STRING_ARG("req_extensions", req->extensions_section,
- CONF_get_string(req->req_config, req->request_extensions_section, "req_extensions"));
- SET_OPTIONAL_LONG_ARG("private_key_bits", req->priv_key_bits,
- CONF_get_number(req->req_config, req->section_name, "default_bits"));
-
- SET_OPTIONAL_LONG_ARG("private_key_type", req->priv_key_type, OPENSSL_KEYTYPE_DEFAULT);
-
- if (optional_args && zend_hash_find(Z_ARRVAL_P(optional_args), "encrypt_key", sizeof("encrypt_key"), (void**)&item) == SUCCESS) {
- req->priv_key_encrypt = Z_BVAL_PP(item);
- } else {
- str = CONF_get_string(req->req_config, req->section_name, "encrypt_rsa_key");
- if (str == NULL) {
- str = CONF_get_string(req->req_config, req->section_name, "encrypt_key");
- }
- if (str && strcmp(str, "no") == 0) {
- req->priv_key_encrypt = 0;
- } else {
- req->priv_key_encrypt = 1;
- }
- }
-
- /* digest alg */
- if (req->digest_name == NULL) {
- req->digest_name = CONF_get_string(req->req_config, req->section_name, "default_md");
- }
- if (req->digest_name) {
- req->digest = req->md_alg = EVP_get_digestbyname(req->digest_name);
- }
- if (req->md_alg == NULL) {
- req->md_alg = req->digest = EVP_md5();
- }
-
- PHP_SSL_CONFIG_SYNTAX_CHECK(extensions_section);
-
- /* set the string mask */
- str = CONF_get_string(req->req_config, req->section_name, "string_mask");
- if (str && !ASN1_STRING_set_default_mask_asc(str)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid global string mask setting %s", str);
- return FAILURE;
- }
-
- if (req->request_extensions_section == NULL) {
- req->request_extensions_section = CONF_get_string(req->req_config, req->section_name, "req_extensions");
- }
- PHP_SSL_CONFIG_SYNTAX_CHECK(request_extensions_section);
-
- return SUCCESS;
-}
-
-static void php_openssl_dispose_config(struct php_x509_request * req TSRMLS_DC)
-{
- if (req->priv_key) {
- EVP_PKEY_free(req->priv_key);
- req->priv_key = NULL;
- }
- if (req->global_config) {
- CONF_free(req->global_config);
- req->global_config = NULL;
- }
- if (req->req_config) {
- CONF_free(req->req_config);
- req->req_config = NULL;
- }
-}
-
-static int php_openssl_load_rand_file(const char * file, int *egdsocket, int *seeded)
-{
- char buffer[MAXPATHLEN];
-
- TSRMLS_FETCH();
-
- *egdsocket = 0;
- *seeded = 0;
-
-#ifdef WINDOWS
- RAND_screen();
-#endif
- if (file == NULL) {
- file = RAND_file_name(buffer, sizeof(buffer));
- } else if (RAND_egd(file) > 0) {
- /* if the given filename is an EGD socket, don't
- * write anything back to it */
- *egdsocket = 1;
- return SUCCESS;
- }
- if (file == NULL || !RAND_load_file(file, -1)) {
- if (RAND_status() == 0) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "unable to load random state; not enough random data!");
- return FAILURE;
- }
- return FAILURE;
- }
- *seeded = 1;
- return SUCCESS;
-}
-
-static int php_openssl_write_rand_file(const char * file, int egdsocket, int seeded)
-{
- char buffer[MAXPATHLEN];
-
- TSRMLS_FETCH();
-
- if (egdsocket || !seeded) {
- /* if we did not manage to read the seed file, we should not write
- * a low-entropy seed file back */
- return FAILURE;
- }
- if (file == NULL) {
- file = RAND_file_name(buffer, sizeof(buffer));
- }
- if (file == NULL || !RAND_write_file(file)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "unable to write random state");
- return FAILURE;
- }
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ PHP_MINIT_FUNCTION
- */
-PHP_MINIT_FUNCTION(openssl)
-{
- char * config_filename;
-
- le_key = zend_register_list_destructors_ex(php_pkey_free, NULL, "OpenSSL key", module_number);
- le_x509 = zend_register_list_destructors_ex(php_x509_free, NULL, "OpenSSL X.509", module_number);
- le_csr = zend_register_list_destructors_ex(php_csr_free, NULL, "OpenSSL X.509 CSR", module_number);
-
- OpenSSL_add_all_ciphers();
- OpenSSL_add_all_digests();
- OpenSSL_add_all_algorithms();
-
- ERR_load_ERR_strings();
- ERR_load_crypto_strings();
- ERR_load_EVP_strings();
-
- /* register a resource id number with openSSL so that we can map SSL -> stream structures in
- * openSSL callbacks */
- ssl_stream_data_index = SSL_get_ex_new_index(0, "PHP stream index", NULL, NULL, NULL);
-
- /* purposes for cert purpose checking */
- REGISTER_LONG_CONSTANT("X509_PURPOSE_SSL_CLIENT", X509_PURPOSE_SSL_CLIENT, CONST_CS|CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("X509_PURPOSE_SSL_SERVER", X509_PURPOSE_SSL_SERVER, CONST_CS|CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("X509_PURPOSE_NS_SSL_SERVER", X509_PURPOSE_NS_SSL_SERVER, CONST_CS|CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("X509_PURPOSE_SMIME_SIGN", X509_PURPOSE_SMIME_SIGN, CONST_CS|CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("X509_PURPOSE_SMIME_ENCRYPT", X509_PURPOSE_SMIME_ENCRYPT, CONST_CS|CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("X509_PURPOSE_CRL_SIGN", X509_PURPOSE_CRL_SIGN, CONST_CS|CONST_PERSISTENT);
-#ifdef X509_PURPOSE_ANY
- REGISTER_LONG_CONSTANT("X509_PURPOSE_ANY", X509_PURPOSE_ANY, CONST_CS|CONST_PERSISTENT);
-#endif
-
- /* signature algorithm constants */
- REGISTER_LONG_CONSTANT("OPENSSL_ALGO_SHA1", OPENSSL_ALGO_SHA1, CONST_CS|CONST_PERSISTENT);
- 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);
-
- /* flags for S/MIME */
- REGISTER_LONG_CONSTANT("PKCS7_DETACHED", PKCS7_DETACHED, CONST_CS|CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("PKCS7_TEXT", PKCS7_TEXT, CONST_CS|CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("PKCS7_NOINTERN", PKCS7_NOINTERN, CONST_CS|CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("PKCS7_NOVERIFY", PKCS7_NOVERIFY, CONST_CS|CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("PKCS7_NOCHAIN", PKCS7_NOCHAIN, CONST_CS|CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("PKCS7_NOCERTS", PKCS7_NOCERTS, CONST_CS|CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("PKCS7_NOATTR", PKCS7_NOATTR, CONST_CS|CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("PKCS7_BINARY", PKCS7_BINARY, CONST_CS|CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("PKCS7_NOSIGS", PKCS7_NOSIGS, CONST_CS|CONST_PERSISTENT);
-
- REGISTER_LONG_CONSTANT("OPENSSL_PKCS1_PADDING", RSA_PKCS1_PADDING, CONST_CS|CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("OPENSSL_SSLV23_PADDING", RSA_SSLV23_PADDING, CONST_CS|CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("OPENSSL_NO_PADDING", RSA_NO_PADDING, CONST_CS|CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("OPENSSL_PKCS1_OAEP_PADDING", RSA_PKCS1_OAEP_PADDING, CONST_CS|CONST_PERSISTENT);
-
- /* Ciphers */
- REGISTER_LONG_CONSTANT("OPENSSL_CIPHER_RC2_40", PHP_OPENSSL_CIPHER_RC2_40, CONST_CS|CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("OPENSSL_CIPHER_RC2_128", PHP_OPENSSL_CIPHER_RC2_128, CONST_CS|CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("OPENSSL_CIPHER_RC2_64", PHP_OPENSSL_CIPHER_RC2_64, CONST_CS|CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("OPENSSL_CIPHER_DES", PHP_OPENSSL_CIPHER_DES, CONST_CS|CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("OPENSSL_CIPHER_3DES", PHP_OPENSSL_CIPHER_3DES, CONST_CS|CONST_PERSISTENT);
-
- /* Values for key types */
- REGISTER_LONG_CONSTANT("OPENSSL_KEYTYPE_RSA", OPENSSL_KEYTYPE_RSA, CONST_CS|CONST_PERSISTENT);
-#ifndef NO_DSA
- REGISTER_LONG_CONSTANT("OPENSSL_KEYTYPE_DSA", OPENSSL_KEYTYPE_DSA, CONST_CS|CONST_PERSISTENT);
-#endif
- REGISTER_LONG_CONSTANT("OPENSSL_KEYTYPE_DH", OPENSSL_KEYTYPE_DH, CONST_CS|CONST_PERSISTENT);
-
- /* Determine default SSL configuration file */
- config_filename = getenv("OPENSSL_CONF");
- if (config_filename == NULL) {
- config_filename = getenv("SSLEAY_CONF");
- }
-
- /* default to 'openssl.cnf' if no environment variable is set */
- if (config_filename == NULL) {
- snprintf(default_ssl_conf_filename, sizeof(default_ssl_conf_filename), "%s/%s",
- X509_get_default_cert_area(),
- "openssl.cnf");
- } else {
- strlcpy(default_ssl_conf_filename, config_filename, sizeof(default_ssl_conf_filename));
- }
-
- php_stream_xport_register("ssl", php_openssl_ssl_socket_factory TSRMLS_CC);
- php_stream_xport_register("tls", php_openssl_ssl_socket_factory TSRMLS_CC);
-
- /* override the default tcp socket provider */
- php_stream_xport_register("tcp", php_openssl_ssl_socket_factory TSRMLS_CC);
-
- php_register_url_stream_wrapper("https", &php_stream_http_wrapper TSRMLS_CC);
- php_register_url_stream_wrapper("ftps", &php_stream_ftp_wrapper TSRMLS_CC);
-
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ PHP_MINFO_FUNCTION
- */
-PHP_MINFO_FUNCTION(openssl)
-{
- php_info_print_table_start();
- php_info_print_table_row(2, "OpenSSL support", "enabled");
- php_info_print_table_row(2, "OpenSSL Version", OPENSSL_VERSION_TEXT);
- php_info_print_table_end();
-}
-/* }}} */
-
-/* {{{ PHP_MSHUTDOWN_FUNCTION
- */
-PHP_MSHUTDOWN_FUNCTION(openssl)
-{
- EVP_cleanup();
-
- php_unregister_url_stream_wrapper("https" TSRMLS_CC);
- php_unregister_url_stream_wrapper("ftps" TSRMLS_CC);
-
- php_stream_xport_unregister("ssl" TSRMLS_CC);
- php_stream_xport_unregister("tls" TSRMLS_CC);
-
- /* reinstate the default tcp handler */
- php_stream_xport_register("tcp", php_stream_generic_socket_factory TSRMLS_CC);
-
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ x509 cert functions */
-
-/* {{{ php_openssl_x509_from_zval
- Given a zval, coerce it into an X509 object.
- The zval can be:
- . X509 resource created using openssl_read_x509()
- . if it starts with file:// then it will be interpreted as the path to that cert
- . it will be interpreted as the cert data
- If you supply makeresource, the result will be registered as an x509 resource and
- it's value returned in makeresource.
-*/
-static X509 * php_openssl_x509_from_zval(zval ** val, int makeresource, long * resourceval TSRMLS_DC)
-{
- X509 *cert = NULL;
-
- if (resourceval) {
- *resourceval = -1;
- }
- if (Z_TYPE_PP(val) == IS_RESOURCE) {
- /* is it an x509 resource ? */
- void * what;
- int type;
-
- what = zend_fetch_resource(val TSRMLS_CC, -1, "OpenSSL X.509", &type, 1, le_x509);
- if (!what) {
- return NULL;
- }
- /* this is so callers can decide if they should free the X509 */
- if (resourceval) {
- *resourceval = Z_LVAL_PP(val);
- }
- if (type == le_x509) {
- return (X509*)what;
- }
- /* other types could be used here - eg: file pointers and read in the data from them */
-
- return NULL;
- }
- /* force it to be a string and check if it refers to a file */
- convert_to_string_ex(val);
-
- if (Z_STRLEN_PP(val) > 7 && memcmp(Z_STRVAL_PP(val), "file://", sizeof("file://") - 1) == 0) {
- /* read cert from the named file */
- BIO *in;
-
- if (php_openssl_safe_mode_chk(Z_STRVAL_PP(val) + (sizeof("file://") - 1) TSRMLS_CC)) {
- return NULL;
- }
-
- in = BIO_new_file(Z_STRVAL_PP(val) + (sizeof("file://") - 1), "r");
- if (in == NULL) {
- return NULL;
- }
- cert = PEM_read_bio_X509(in, NULL, NULL, NULL);
- BIO_free(in);
- } else {
- BIO *in;
-
- in = BIO_new_mem_buf(Z_STRVAL_PP(val), Z_STRLEN_PP(val));
- if (in == NULL) {
- return NULL;
- }
- cert = (X509 *) PEM_ASN1_read_bio((char *(*)())d2i_X509, PEM_STRING_X509, in, NULL, NULL, NULL);
- BIO_free(in);
- }
-
- if (cert && makeresource && resourceval) {
- *resourceval = zend_list_insert(cert, le_x509);
- }
- return cert;
-}
-
-/* }}} */
-
-/* {{{ proto bool openssl_x509_export_to_file(mixed x509, string outfilename [, bool notext = true])
- Exports a CERT to file or a var */
-PHP_FUNCTION(openssl_x509_export_to_file)
-{
- X509 * cert;
- zval * zcert = NULL;
- zend_bool notext = 1;
- BIO * bio_out;
- long certresource;
- char * filename;
- int filename_len;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rs|b", &zcert, &filename, &filename_len, &notext) == FAILURE) {
- return;
- }
- RETVAL_FALSE;
-
- cert = php_openssl_x509_from_zval(&zcert, 0, &certresource TSRMLS_CC);
- if (cert == NULL) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "cannot get cert from parameter 1");
- return;
- }
-
- if (php_openssl_safe_mode_chk(filename TSRMLS_CC)) {
- return;
- }
-
- bio_out = BIO_new_file(filename, "w");
- if (bio_out) {
- if (!notext) {
- X509_print(bio_out, cert);
- }
- PEM_write_bio_X509(bio_out, cert);
-
- RETVAL_TRUE;
- } else {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "error opening file %s", filename);
- }
- if (certresource == -1 && cert) {
- X509_free(cert);
- }
- BIO_free(bio_out);
-}
-/* }}} */
-
-/* {{{ proto bool openssl_x509_export(mixed x509, string &out [, bool notext = true])
- Exports a CERT to file or a var */
-PHP_FUNCTION(openssl_x509_export)
-{
- X509 * cert;
- zval * zcert = NULL, *zout=NULL;
- zend_bool notext = 1;
- BIO * bio_out;
- long certresource;
- char * bio_mem_ptr;
- long bio_mem_len;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rz|b", &zcert, &zout, &notext) == FAILURE) {
- return;
- }
- RETVAL_FALSE;
-
- cert = php_openssl_x509_from_zval(&zcert, 0, &certresource TSRMLS_CC);
- if (cert == NULL) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "cannot get cert from parameter 1");
- return;
- }
-
- bio_out = BIO_new(BIO_s_mem());
- if (!notext) {
- X509_print(bio_out, cert);
- }
- PEM_write_bio_X509(bio_out, cert);
-
- bio_mem_len = BIO_get_mem_data(bio_out, &bio_mem_ptr);
- ZVAL_STRINGL(zout, bio_mem_ptr, bio_mem_len, 1);
-
- RETVAL_TRUE;
-
- if (certresource == -1 && cert) {
- X509_free(cert);
- }
- BIO_free(bio_out);
-}
-/* }}} */
-
-/* {{{ proto bool openssl_x509_check_private_key(mixed cert, mixed key)
- Checks if a private key corresponds to a CERT */
-PHP_FUNCTION(openssl_x509_check_private_key)
-{
- zval * zcert, *zkey;
- X509 * cert = NULL;
- EVP_PKEY * key = NULL;
- long certresource = -1, keyresource = -1;
-
- RETVAL_FALSE;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "zz", &zcert, &zkey) == FAILURE) {
- return;
- }
- cert = php_openssl_x509_from_zval(&zcert, 0, &certresource TSRMLS_CC);
- if (cert == NULL) {
- RETURN_FALSE;
- }
- key = php_openssl_evp_from_zval(&zkey, 0, "", 1, &keyresource TSRMLS_CC);
- if (key) {
- RETVAL_BOOL(X509_check_private_key(cert, key));
- }
-
- if (keyresource == -1 && key) {
- EVP_PKEY_free(key);
- }
- if (certresource == -1 && cert) {
- X509_free(cert);
- }
-}
-/* }}} */
-
-/* {{{ proto array openssl_x509_parse(mixed x509 [, bool shortnames=true])
- Returns an array of the fields/values of the CERT */
-PHP_FUNCTION(openssl_x509_parse)
-{
- zval * zcert;
- X509 * cert = NULL;
- long certresource = -1;
- int i;
- zend_bool useshortnames = 1;
- char * tmpstr;
- zval * subitem;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z|b", &zcert, &useshortnames) == FAILURE) {
- return;
- }
- cert = php_openssl_x509_from_zval(&zcert, 0, &certresource TSRMLS_CC);
- if (cert == NULL) {
- RETURN_FALSE;
- }
- array_init(return_value);
-
- if (cert->name) {
- add_assoc_string(return_value, "name", cert->name, 1);
- }
-/* add_assoc_bool(return_value, "valid", cert->valid); */
-
- add_assoc_name_entry(return_value, "subject", X509_get_subject_name(cert), useshortnames TSRMLS_CC);
- /* hash as used in CA directories to lookup cert by subject name */
- {
- char buf[32];
- snprintf(buf, sizeof(buf), "%08lx", X509_subject_name_hash(cert));
- add_assoc_string(return_value, "hash", buf, 1);
- }
-
- add_assoc_name_entry(return_value, "issuer", X509_get_issuer_name(cert), useshortnames TSRMLS_CC);
- add_assoc_long(return_value, "version", X509_get_version(cert));
- add_assoc_long(return_value, "serialNumber", ASN1_INTEGER_get(X509_get_serialNumber(cert)));
-
- add_assoc_asn1_string(return_value, "validFrom", X509_get_notBefore(cert));
- add_assoc_asn1_string(return_value, "validTo", X509_get_notAfter(cert));
-
- add_assoc_long(return_value, "validFrom_time_t", asn1_time_to_time_t(X509_get_notBefore(cert) TSRMLS_CC));
- add_assoc_long(return_value, "validTo_time_t", asn1_time_to_time_t(X509_get_notAfter(cert) TSRMLS_CC));
-
- tmpstr = X509_alias_get0(cert, NULL);
- if (tmpstr) {
- add_assoc_string(return_value, "alias", tmpstr, 1);
- }
-/*
- add_assoc_long(return_value, "signaturetypeLONG", X509_get_signature_type(cert));
- add_assoc_string(return_value, "signaturetype", OBJ_nid2sn(X509_get_signature_type(cert)), 1);
- add_assoc_string(return_value, "signaturetypeLN", OBJ_nid2ln(X509_get_signature_type(cert)), 1);
-*/
- MAKE_STD_ZVAL(subitem);
- array_init(subitem);
-
- /* NOTE: the purposes are added as integer keys - the keys match up to the X509_PURPOSE_SSL_XXX defines
- in x509v3.h */
- for (i = 0; i < X509_PURPOSE_get_count(); i++) {
- int id, purpset;
- char * pname;
- X509_PURPOSE * purp;
- zval * subsub;
-
- MAKE_STD_ZVAL(subsub);
- array_init(subsub);
-
- purp = X509_PURPOSE_get0(i);
- id = X509_PURPOSE_get_id(purp);
-
- purpset = X509_check_purpose(cert, id, 0);
- add_index_bool(subsub, 0, purpset);
-
- purpset = X509_check_purpose(cert, id, 1);
- add_index_bool(subsub, 1, purpset);
-
- pname = useshortnames ? X509_PURPOSE_get0_sname(purp) : X509_PURPOSE_get0_name(purp);
- add_index_string(subsub, 2, pname, 1);
-
- /* NOTE: if purpset > 1 then it's a warning - we should mention it ? */
-
- add_index_zval(subitem, id, subsub);
- }
- add_assoc_zval(return_value, "purposes", subitem);
-
- if (certresource == -1 && cert) {
- X509_free(cert);
- }
-}
-/* }}} */
-
-/* {{{ load_all_certs_from_file */
-static STACK_OF(X509) * load_all_certs_from_file(char *certfile)
-{
- STACK_OF(X509_INFO) *sk=NULL;
- STACK_OF(X509) *stack=NULL, *ret=NULL;
- BIO *in=NULL;
- X509_INFO *xi;
- TSRMLS_FETCH();
-
- if(!(stack = sk_X509_new_null())) {
- php_error_docref(NULL TSRMLS_CC, E_ERROR, "memory allocation failure");
- goto end;
- }
-
- if (php_openssl_safe_mode_chk(certfile TSRMLS_CC)) {
- goto end;
- }
-
- if(!(in=BIO_new_file(certfile, "r"))) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "error opening the file, %s", certfile);
- goto end;
- }
-
- /* This loads from a file, a stack of x509/crl/pkey sets */
- if(!(sk=PEM_X509_INFO_read_bio(in, NULL, NULL, NULL))) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "error reading the file, %s", certfile);
- goto end;
- }
-
- /* scan over it and pull out the certs */
- while (sk_X509_INFO_num(sk)) {
- xi=sk_X509_INFO_shift(sk);
- if (xi->x509 != NULL) {
- sk_X509_push(stack,xi->x509);
- xi->x509=NULL;
- }
- X509_INFO_free(xi);
- }
- if(!sk_X509_num(stack)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "no certificates in file, %s", certfile);
- sk_X509_free(stack);
- goto end;
- }
- ret=stack;
-end:
- BIO_free(in);
- sk_X509_INFO_free(sk);
-
- return ret;
-}
-/* }}} */
-
-/* {{{ check_cert */
-static int check_cert(X509_STORE *ctx, X509 *x, STACK_OF(X509) *untrustedchain, int purpose)
-{
- int ret=0;
- X509_STORE_CTX *csc;
- TSRMLS_FETCH();
-
- csc = X509_STORE_CTX_new();
- if (csc == NULL) {
- php_error_docref(NULL TSRMLS_CC, E_ERROR, "memory allocation failure");
- return 0;
- }
- X509_STORE_CTX_init(csc, ctx, x, untrustedchain);
-
- if(purpose >= 0) {
- X509_STORE_CTX_set_purpose(csc, purpose);
- }
- ret = X509_verify_cert(csc);
- X509_STORE_CTX_free(csc);
-
- return ret;
-}
-/* }}} */
-
-/* {{{ proto int openssl_x509_checkpurpose(mixed x509cert, int purpose, array cainfo [, string untrustedfile])
- Checks the CERT to see if it can be used for the purpose in purpose. cainfo holds information about trusted CAs */
-PHP_FUNCTION(openssl_x509_checkpurpose)
-{
- zval * zcert, * zcainfo = NULL;
- X509_STORE * cainfo = NULL;
- X509 * cert = NULL;
- long certresource = -1;
- STACK_OF(X509) * untrustedchain = NULL;
- long purpose;
- char * untrusted = NULL;
- int untrusted_len;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "zl|a!s", &zcert, &purpose, &zcainfo, &untrusted, &untrusted_len)
- == FAILURE) {
- return;
- }
-
- RETVAL_LONG(-1);
-
- if (untrusted) {
- untrustedchain = load_all_certs_from_file(untrusted);
- if (untrustedchain == NULL) {
- goto clean_exit;
- }
- }
-
- cainfo = setup_verify(zcainfo TSRMLS_CC);
- if (cainfo == NULL) {
- goto clean_exit;
- }
- cert = php_openssl_x509_from_zval(&zcert, 0, &certresource TSRMLS_CC);
- if (cert == NULL) {
- goto clean_exit;
- }
- RETVAL_LONG(check_cert(cainfo, cert, untrustedchain, purpose));
-
-clean_exit:
- if (certresource == 1 && cert) {
- X509_free(cert);
- }
- if (cainfo) {
- X509_STORE_free(cainfo);
- }
- if (untrustedchain) {
- sk_X509_pop_free(untrustedchain, X509_free);
- }
-}
-/* }}} */
-
-/* {{{ setup_verify
- * calist is an array containing file and directory names. create a
- * certificate store and add those certs to it for use in verification.
-*/
-static X509_STORE * setup_verify(zval * calist TSRMLS_DC)
-{
- X509_STORE *store;
- X509_LOOKUP * dir_lookup, * file_lookup;
- HashPosition pos;
- int ndirs = 0, nfiles = 0;
-
- store = X509_STORE_new();
-
- if (store == NULL) {
- return NULL;
- }
-
- if (calist && (Z_TYPE_P(calist) == IS_ARRAY)) {
- zend_hash_internal_pointer_reset_ex(HASH_OF(calist), &pos);
- for (;; zend_hash_move_forward_ex(HASH_OF(calist), &pos)) {
- zval ** item;
- struct stat sb;
-
- if (zend_hash_get_current_data_ex(HASH_OF(calist), (void**)&item, &pos) == FAILURE) {
- break;
- }
- convert_to_string_ex(item);
-
- if (VCWD_STAT(Z_STRVAL_PP(item), &sb) == -1) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "unable to stat %s", Z_STRVAL_PP(item));
- continue;
- }
-
- if ((sb.st_mode & S_IFREG) == S_IFREG) {
- file_lookup = X509_STORE_add_lookup(store, X509_LOOKUP_file());
- if (file_lookup == NULL || !X509_LOOKUP_load_file(file_lookup, Z_STRVAL_PP(item), X509_FILETYPE_PEM)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "error loading file %s", Z_STRVAL_PP(item));
- } else {
- nfiles++;
- }
- file_lookup = NULL;
- } else {
- dir_lookup = X509_STORE_add_lookup(store, X509_LOOKUP_hash_dir());
- if (dir_lookup == NULL || !X509_LOOKUP_add_dir(dir_lookup, Z_STRVAL_PP(item), X509_FILETYPE_PEM)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "error loading directory %s", Z_STRVAL_PP(item));
- } else {
- ndirs++;
- }
- dir_lookup = NULL;
- }
- }
- }
- if (nfiles == 0) {
- file_lookup = X509_STORE_add_lookup(store, X509_LOOKUP_file());
- if (file_lookup) {
- X509_LOOKUP_load_file(file_lookup, NULL, X509_FILETYPE_DEFAULT);
- }
- }
- if (ndirs == 0) {
- dir_lookup = X509_STORE_add_lookup(store, X509_LOOKUP_hash_dir());
- if (dir_lookup) {
- X509_LOOKUP_add_dir(dir_lookup, NULL, X509_FILETYPE_DEFAULT);
- }
- }
- return store;
-}
-/* }}} */
-
-/* {{{ proto resource openssl_x509_read(mixed cert)
- Reads X.509 certificates */
-PHP_FUNCTION(openssl_x509_read)
-{
- zval *cert;
- X509 *x509;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z", &cert) == FAILURE) {
- return;
- }
- Z_TYPE_P(return_value) = IS_RESOURCE;
- x509 = php_openssl_x509_from_zval(&cert, 1, &Z_LVAL_P(return_value) TSRMLS_CC);
-
- if (x509 == NULL) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "supplied parameter cannot be coerced into an X509 certificate!");
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-/* {{{ proto void openssl_x509_free(resource x509)
- Frees X.509 certificates */
-PHP_FUNCTION(openssl_x509_free)
-{
- zval *x509;
- X509 *cert;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &x509) == FAILURE) {
- return;
- }
- ZEND_FETCH_RESOURCE(cert, X509 *, &x509, -1, "OpenSSL X.509", le_x509);
- zend_list_delete(Z_LVAL_P(x509));
-}
-/* }}} */
-
-/* }}} */
-
-/* {{{ x509 CSR functions */
-
-/* {{{ php_openssl_make_REQ */
-static int php_openssl_make_REQ(struct php_x509_request * req, X509_REQ * csr, zval * dn, zval * attribs TSRMLS_DC)
-{
- STACK_OF(CONF_VALUE) * dn_sk, *attr_sk = NULL;
- char * str, *dn_sect, *attr_sect;
-
- dn_sect = CONF_get_string(req->req_config, req->section_name, "distinguished_name");
- if (dn_sect == NULL) {
- return FAILURE;
- }
- dn_sk = CONF_get_section(req->req_config, dn_sect);
- if (dn_sk == NULL) {
- return FAILURE;
- }
- attr_sect = CONF_get_string(req->req_config, req->section_name, "attributes");
- if (attr_sect == NULL) {
- attr_sk = NULL;
- } else {
- attr_sk = CONF_get_section(req->req_config, attr_sect);
- if (attr_sk == NULL) {
- return FAILURE;
- }
- }
- /* setup the version number: version 1 */
- if (X509_REQ_set_version(csr, 0L)) {
- int i, nid;
- char * type;
- CONF_VALUE * v;
- X509_NAME * subj;
- HashPosition hpos;
- zval ** item;
-
- subj = X509_REQ_get_subject_name(csr);
- /* apply values from the dn hash */
- zend_hash_internal_pointer_reset_ex(HASH_OF(dn), &hpos);
- while(zend_hash_get_current_data_ex(HASH_OF(dn), (void**)&item, &hpos) == SUCCESS) {
- char * strindex; int strindexlen;
- long intindex;
-
- zend_hash_get_current_key_ex(HASH_OF(dn), &strindex, &strindexlen, &intindex, 0, &hpos);
-
- convert_to_string_ex(item);
-
- if (strindex) {
- int nid;
-
- nid = OBJ_txt2nid(strindex);
- if (nid != NID_undef) {
- if (!X509_NAME_add_entry_by_NID(subj, nid, MBSTRING_ASC,
- (unsigned char*)Z_STRVAL_PP(item), -1, -1, 0))
- {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "dn: add_entry_by_NID %d -> %s (failed)", nid, Z_STRVAL_PP(item));
- return FAILURE;
- }
- } else {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "dn: %s is not a recognized name", strindex);
- }
- }
- zend_hash_move_forward_ex(HASH_OF(dn), &hpos);
- }
-
- /* Finally apply defaults from config file */
- for(i = 0; i < sk_CONF_VALUE_num(dn_sk); i++) {
- int len;
- char buffer[200];
-
- v = sk_CONF_VALUE_value(dn_sk, i);
- type = v->name;
-
- len = strlen(type);
- if (len < sizeof("_default")) {
- continue;
- }
- len -= sizeof("_default") - 1;
- if (strcmp("_default", type + len) != 0) {
- continue;
- }
-
- memcpy(buffer, type, len);
- buffer[len] = '\0';
- type = buffer;
-
- /* Skip past any leading X. X: X, etc to allow for multiple
- * instances */
- for (str = type; *str; str++) {
- if (*str == ':' || *str == ',' || *str == '.') {
- str++;
- if (*str) {
- type = str;
- }
- break;
- }
- }
- /* if it is already set, skip this */
- nid = OBJ_txt2nid(type);
- if (X509_NAME_get_index_by_NID(subj, nid, -1) >= 0) {
- continue;
- }
- if (!X509_NAME_add_entry_by_txt(subj, type, MBSTRING_ASC, (unsigned char*)v->value, -1, -1, 0)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "add_entry_by_txt %s -> %s (failed)", type, v->value);
- return FAILURE;
- }
- if (!X509_NAME_entry_count(subj)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "no objects specified in config file");
- return FAILURE;
- }
- }
- if (attribs) {
- zend_hash_internal_pointer_reset_ex(HASH_OF(attribs), &hpos);
- while(zend_hash_get_current_data_ex(HASH_OF(attribs), (void**)&item, &hpos) == SUCCESS) {
- char * strindex; int strindexlen;
- long intindex;
-
- zend_hash_get_current_key_ex(HASH_OF(attribs), &strindex, &strindexlen, &intindex, 0, &hpos);
- convert_to_string_ex(item);
-
- if (strindex) {
- int nid;
-
- nid = OBJ_txt2nid(strindex);
- if (nid != NID_undef) {
- if (!X509_NAME_add_entry_by_NID(subj, nid, MBSTRING_ASC, (unsigned char*)Z_STRVAL_PP(item), -1, -1, 0)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "attribs: add_entry_by_NID %d -> %s (failed)", nid, Z_STRVAL_PP(item));
- return FAILURE;
- }
- } else {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "dn: %s is not a recognized name", strindex);
- }
- }
- zend_hash_move_forward_ex(HASH_OF(attribs), &hpos);
- }
- for (i = 0; i < sk_CONF_VALUE_num(attr_sk); i++) {
- v = sk_CONF_VALUE_value(attr_sk, i);
- /* if it is already set, skip this */
- nid = OBJ_txt2nid(v->name);
- if (X509_REQ_get_attr_by_NID(csr, nid, -1) >= 0) {
- continue;
- }
- if (!X509_REQ_add1_attr_by_txt(csr, v->name, MBSTRING_ASC, (unsigned char*)v->value, -1)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "add1_attr_by_txt %s -> %s (failed)", v->name, v->value);
- return FAILURE;
- }
- }
- }
- }
-
- X509_REQ_set_pubkey(csr, req->priv_key);
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ php_openssl_csr_from_zval */
-static X509_REQ * php_openssl_csr_from_zval(zval ** val, int makeresource, long * resourceval TSRMLS_DC)
-{
- X509_REQ * csr = NULL;
- char * filename = NULL;
- BIO * in;
-
- if (resourceval) {
- *resourceval = -1;
- }
- if (Z_TYPE_PP(val) == IS_RESOURCE) {
- void * what;
- int type;
-
- what = zend_fetch_resource(val TSRMLS_CC, -1, "OpenSSL X.509 CSR", &type, 1, le_csr);
- if (what) {
- if (resourceval) {
- *resourceval = Z_LVAL_PP(val);
- }
- return (X509_REQ*)what;
- }
- return NULL;
- } else if (Z_TYPE_PP(val) != IS_STRING) {
- return NULL;
- }
-
- if (Z_STRLEN_PP(val) > 7 && memcmp(Z_STRVAL_PP(val), "file://", sizeof("file://") - 1) == 0) {
- filename = Z_STRVAL_PP(val) + (sizeof("file://") - 1);
- }
- if (filename) {
- if (php_openssl_safe_mode_chk(filename TSRMLS_CC)) {
- return NULL;
- }
- in = BIO_new_file(filename, "r");
- } else {
- in = BIO_new_mem_buf(Z_STRVAL_PP(val), Z_STRLEN_PP(val));
- }
- csr = PEM_read_bio_X509_REQ(in, NULL,NULL,NULL);
- BIO_free(in);
-
- return csr;
-}
-/* }}} */
-
-/* {{{ proto bool openssl_csr_export_to_file(resource csr, string outfilename [, bool notext=true])
- Exports a CSR to file */
-PHP_FUNCTION(openssl_csr_export_to_file)
-{
- X509_REQ * csr;
- zval * zcsr = NULL;
- zend_bool notext = 1;
- char * filename = NULL; int filename_len;
- BIO * bio_out;
- long csr_resource;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rs|b", &zcsr, &filename, &filename_len, &notext) == FAILURE) {
- return;
- }
- RETVAL_FALSE;
-
- csr = php_openssl_csr_from_zval(&zcsr, 0, &csr_resource TSRMLS_CC);
- if (csr == NULL) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "cannot get CSR from parameter 1");
- return;
- }
-
- if (php_openssl_safe_mode_chk(filename TSRMLS_CC)) {
- return;
- }
-
- bio_out = BIO_new_file(filename, "w");
- if (bio_out) {
- if (!notext) {
- X509_REQ_print(bio_out, csr);
- }
- PEM_write_bio_X509_REQ(bio_out, csr);
- RETVAL_TRUE;
- } else {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "error opening file %s", filename);
- }
-
- if (csr_resource == -1 && csr) {
- X509_REQ_free(csr);
- }
- BIO_free(bio_out);
-}
-/* }}} */
-
-
-
-/* {{{ proto bool openssl_csr_export(resource csr, string &out [, bool notext=true])
- Exports a CSR to file or a var */
-PHP_FUNCTION(openssl_csr_export)
-{
- X509_REQ * csr;
- zval * zcsr = NULL, *zout=NULL;
- zend_bool notext = 1;
- BIO * bio_out;
- long csr_resource;
- char * bio_mem_ptr;
- long bio_mem_len;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rz|b", &zcsr, &zout, &notext) == FAILURE) {
- return;
- }
- RETVAL_FALSE;
-
- csr = php_openssl_csr_from_zval(&zcsr, 0, &csr_resource TSRMLS_CC);
- if (csr == NULL) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "cannot get CSR from parameter 1");
- return;
- }
-
- /* export to a var */
-
- bio_out = BIO_new(BIO_s_mem());
- if (!notext) {
- X509_REQ_print(bio_out, csr);
- }
- PEM_write_bio_X509_REQ(bio_out, csr);
-
- bio_mem_len = BIO_get_mem_data(bio_out, &bio_mem_ptr);
- ZVAL_STRINGL(zout, bio_mem_ptr, bio_mem_len, 1);
-
- RETVAL_TRUE;
-
- if (csr_resource == -1 && csr) {
- X509_REQ_free(csr);
- }
- BIO_free(bio_out);
-}
-/* }}} */
-
-/* {{{ proto resource openssl_csr_sign(mixed csr, mixed x509, mixed priv_key, long days [, array config_args [, long serial]])
- Signs a cert with another CERT */
-PHP_FUNCTION(openssl_csr_sign)
-{
- zval * zcert = NULL, *zcsr, *zpkey, *args = NULL;
- long num_days;
- long serial = 0L;
- X509 * cert = NULL, *new_cert = NULL;
- X509_REQ * csr;
- EVP_PKEY * key = NULL, *priv_key = NULL;
- long csr_resource, certresource, keyresource;
- int i;
- struct php_x509_request req;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "zz!zl|a!l", &zcsr, &zcert, &zpkey, &num_days, &args, &serial) == FAILURE)
- return;
-
- RETVAL_FALSE;
- PHP_SSL_REQ_INIT(&req);
-
- csr = php_openssl_csr_from_zval(&zcsr, 0, &csr_resource TSRMLS_CC);
- if (csr == NULL) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "cannot get CSR from parameter 1");
- return;
- }
- if (zcert) {
- cert = php_openssl_x509_from_zval(&zcert, 0, &certresource TSRMLS_CC);
- if (cert == NULL) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "cannot get cert from parameter 2");
- goto cleanup;
- }
- }
- priv_key = php_openssl_evp_from_zval(&zpkey, 0, "", 1, &keyresource TSRMLS_CC);
- if (priv_key == NULL) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "cannot get private key from parameter 3");
- goto cleanup;
- }
- if (cert && !X509_check_private_key(cert, priv_key)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "private key does not correspond to signing cert");
- goto cleanup;
- }
-
- if (PHP_SSL_REQ_PARSE(&req, args) == FAILURE) {
- goto cleanup;
- }
- /* Check that the request matches the signature */
- key = X509_REQ_get_pubkey(csr);
- if (key == NULL) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "error unpacking public key");
- goto cleanup;
- }
- i = X509_REQ_verify(csr, key);
-
- if (i < 0) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Signature verification problems");
- goto cleanup;
- }
- else if (i == 0) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Signature did not match the certificate request");
- goto cleanup;
- }
-
- /* Now we can get on with it */
-
- new_cert = X509_new();
- if (new_cert == NULL) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "No memory");
- goto cleanup;
- }
- /* Version 3 cert */
- if (!X509_set_version(new_cert, 2))
- goto cleanup;
-
- ASN1_INTEGER_set(X509_get_serialNumber(new_cert), serial);
-
- X509_set_subject_name(new_cert, X509_REQ_get_subject_name(csr));
-
- if (cert == NULL) {
- cert = new_cert;
- }
- if (!X509_set_issuer_name(new_cert, X509_get_subject_name(cert))) {
- goto cleanup;
- }
- X509_gmtime_adj(X509_get_notBefore(new_cert), 0);
- X509_gmtime_adj(X509_get_notAfter(new_cert), (long)60*60*24*num_days);
- i = X509_set_pubkey(new_cert, key);
- if (!i) {
- goto cleanup;
- }
- if (req.request_extensions_section) {
- X509V3_CTX ctx;
-
- X509V3_set_ctx(&ctx, cert, new_cert, csr, NULL, 0);
- X509V3_set_conf_lhash(&ctx, req.req_config);
- if (!X509V3_EXT_add_conf(req.req_config, &ctx, req.request_extensions_section, new_cert)) {
- goto cleanup;
- }
- }
-
- /* Now sign it */
- if (!X509_sign(new_cert, priv_key, req.digest)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "failed to sign it");
- goto cleanup;
- }
-
- /* Succeeded; lets return the cert */
- RETVAL_RESOURCE(zend_list_insert(new_cert, le_x509));
- new_cert = NULL;
-
-cleanup:
-
- if (cert == new_cert) {
- cert = NULL;
- }
- PHP_SSL_REQ_DISPOSE(&req);
-
- if (keyresource == -1 && priv_key) {
- EVP_PKEY_free(priv_key);
- }
- if (key) {
- EVP_PKEY_free(key);
- }
- if (csr_resource == -1 && csr) {
- X509_REQ_free(csr);
- }
- if (certresource == -1 && cert) {
- X509_free(cert);
- }
- if (new_cert) {
- X509_free(new_cert);
- }
-}
-/* }}} */
-
-/* {{{ proto bool openssl_csr_new(array dn, resource &privkey [, array configargs, array extraattribs])
- Generates a privkey and CSR */
-PHP_FUNCTION(openssl_csr_new)
-{
- struct php_x509_request req;
- zval * args = NULL, * dn, *attribs = NULL;
- zval * out_pkey;
- X509_REQ * csr = NULL;
- int we_made_the_key = 1;
- long key_resource;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "az|a!a!", &dn, &out_pkey, &args, &attribs) == FAILURE) {
- return;
- }
- RETVAL_FALSE;
-
- PHP_SSL_REQ_INIT(&req);
-
- if (PHP_SSL_REQ_PARSE(&req, args) == SUCCESS) {
- /* Generate or use a private key */
- if (Z_TYPE_P(out_pkey) != IS_NULL) {
- req.priv_key = php_openssl_evp_from_zval(&out_pkey, 0, NULL, 0, &key_resource TSRMLS_CC);
- if (req.priv_key != NULL) {
- we_made_the_key = 0;
- }
- }
- if (req.priv_key == NULL) {
- php_openssl_generate_private_key(&req TSRMLS_CC);
- }
- if (req.priv_key == NULL) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to generate a private key");
- } else {
- csr = X509_REQ_new();
- if (csr) {
- if (php_openssl_make_REQ(&req, csr, dn, attribs TSRMLS_CC) == SUCCESS) {
- X509V3_CTX ext_ctx;
-
- X509V3_set_ctx(&ext_ctx, NULL, NULL, csr, NULL, 0);
- X509V3_set_conf_lhash(&ext_ctx, req.req_config);
-
- /* Add extensions */
- if (req.request_extensions_section && !X509V3_EXT_REQ_add_conf(req.req_config,
- &ext_ctx, req.request_extensions_section, csr))
- {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Error loading extension section %s", req.request_extensions_section);
- } else {
- RETVAL_TRUE;
-
- if (X509_REQ_sign(csr, req.priv_key, req.digest)) {
- RETVAL_RESOURCE(zend_list_insert(csr, le_csr));
- csr = NULL;
- } else {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Error signing request");
- }
-
- if (we_made_the_key) {
- /* and a resource for the private key */
- ZVAL_RESOURCE(out_pkey, zend_list_insert(req.priv_key, le_key));
- } else if (key_resource != -1) {
- req.priv_key = NULL; /* make sure the cleanup code doesn't zap it! */
- }
- }
- }
- }
- }
- }
- if (csr) {
- X509_REQ_free(csr);
- }
- PHP_SSL_REQ_DISPOSE(&req);
-}
-/* }}} */
-
-/* }}} */
-
-/* {{{ EVP Public/Private key functions */
-
-/* {{{ php_openssl_evp_from_zval
- Given a zval, coerce it into a EVP_PKEY object.
- It can be:
- 1. private key resource from openssl_get_privatekey()
- 2. X509 resource -> public key will be extracted from it
- 3. if it starts with file:// interpreted as path to key file
- 4. interpreted as the data from the cert/key file and interpreted in same way as openssl_get_privatekey()
- 5. an array(0 => [items 2..4], 1 => passphrase)
- 6. if val is a string (possibly starting with file:///) and it is not an X509 certificate, then interpret as public key
- NOTE: If you are requesting a private key but have not specified a passphrase, you should use an
- empty string rather than NULL for the passphrase - NULL causes a passphrase prompt to be emitted in
- the Apache error log!
-*/
-static EVP_PKEY * php_openssl_evp_from_zval(zval ** val, int public_key, char * passphrase, int makeresource, long * resourceval TSRMLS_DC)
-{
- EVP_PKEY * key = NULL;
- X509 * cert = NULL;
- int free_cert = 0;
- long cert_res = -1;
- char * filename = NULL;
-
- if (resourceval) {
- *resourceval = -1;
- }
- if (Z_TYPE_PP(val) == IS_ARRAY) {
- zval ** zphrase;
-
- /* get passphrase */
-
- if (zend_hash_index_find(HASH_OF(*val), 1, (void **)&zphrase) == FAILURE) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "key array must be of the form array(0 => key, 1 => phrase)");
- return NULL;
- }
- convert_to_string_ex(zphrase);
- passphrase = Z_STRVAL_PP(zphrase);
-
- /* now set val to be the key param and continue */
- if (zend_hash_index_find(HASH_OF(*val), 0, (void **)&val) == FAILURE) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "key array must be of the form array(0 => key, 1 => phrase)");
- return NULL;
- }
- }
-
- if (Z_TYPE_PP(val) == IS_RESOURCE) {
- void * what;
- int type;
-
- what = zend_fetch_resource(val TSRMLS_CC, -1, "OpenSSL X.509/key", &type, 2, le_x509, le_key);
- if (!what) {
- return NULL;
- }
- if (resourceval) {
- *resourceval = Z_LVAL_PP(val);
- }
- if (type == le_x509) {
- /* extract key from cert, depending on public_key param */
- cert = (X509*)what;
- free_cert = 0;
- } else if (type == le_key) {
- int is_priv;
-
- is_priv = php_openssl_is_private_key((EVP_PKEY*)what TSRMLS_CC);
-
- /* check whether it is actually a private key if requested */
- if (!public_key && !is_priv) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "supplied key param is a public key");
- return NULL;
- }
-
- if (public_key && is_priv) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Don't know how to get public key from this private key");
- return NULL;
- } else {
- /* got the key - return it */
- return (EVP_PKEY*)what;
- }
- }
-
- /* other types could be used here - eg: file pointers and read in the data from them */
-
- return NULL;
- } else {
- /* force it to be a string and check if it refers to a file */
- convert_to_string_ex(val);
-
- if (Z_STRLEN_PP(val) > 7 && memcmp(Z_STRVAL_PP(val), "file://", sizeof("file://") - 1) == 0) {
- filename = Z_STRVAL_PP(val) + (sizeof("file://") - 1);
- }
- /* it's an X509 file/cert of some kind, and we need to extract the data from that */
- if (public_key) {
- cert = php_openssl_x509_from_zval(val, 0, &cert_res TSRMLS_CC);
- free_cert = (cert_res == -1);
- /* actual extraction done later */
- if (!cert) {
- /* not a X509 certificate, try to retrieve public key */
- BIO* in;
- if (filename) {
- in = BIO_new_file(filename, "r");
- } else {
- in = BIO_new_mem_buf(Z_STRVAL_PP(val), Z_STRLEN_PP(val));
- }
- if (in == NULL) {
- return NULL;
- }
- key = PEM_read_bio_PUBKEY(in, NULL,NULL, NULL);
- BIO_free(in);
- }
- } else {
- /* we want the private key */
- BIO *in;
-
- if (filename) {
- if (php_openssl_safe_mode_chk(filename TSRMLS_CC)) {
- return NULL;
- }
- in = BIO_new_file(filename, "r");
- } else {
- in = BIO_new_mem_buf(Z_STRVAL_PP(val), Z_STRLEN_PP(val));
- }
-
- if (in == NULL) {
- return NULL;
- }
- key = PEM_read_bio_PrivateKey(in, NULL,NULL, passphrase);
- BIO_free(in);
- }
- }
-
- if (public_key && cert && key == NULL) {
- /* extract public key from X509 cert */
- key = (EVP_PKEY *) X509_get_pubkey(cert);
- }
-
- if (free_cert && cert) {
- X509_free(cert);
- }
- if (key && makeresource && resourceval) {
- *resourceval = ZEND_REGISTER_RESOURCE(NULL, key, le_key);
- }
- return key;
-}
-/* }}} */
-
-/* {{{ php_openssl_generate_private_key */
-static EVP_PKEY * php_openssl_generate_private_key(struct php_x509_request * req TSRMLS_DC)
-{
- char * randfile = NULL;
- int egdsocket, seeded;
- EVP_PKEY * return_val = NULL;
-
- if (req->priv_key_bits < MIN_KEY_LENGTH) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "private key length is too short; it needs to be at least %d bits, not %d",
- MIN_KEY_LENGTH, req->priv_key_bits);
- return NULL;
- }
-
- randfile = CONF_get_string(req->req_config, req->section_name, "RANDFILE");
- php_openssl_load_rand_file(randfile, &egdsocket, &seeded);
-
- if ((req->priv_key = EVP_PKEY_new()) != NULL) {
- switch(req->priv_key_type) {
- case OPENSSL_KEYTYPE_RSA:
- if (EVP_PKEY_assign_RSA(req->priv_key, RSA_generate_key(req->priv_key_bits, 0x10001, NULL, NULL)))
- return_val = req->priv_key;
- break;
- default:
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unsupported private key type");
- }
- }
-
- php_openssl_write_rand_file(randfile, egdsocket, seeded);
-
- if (return_val == NULL) {
- EVP_PKEY_free(req->priv_key);
- req->priv_key = NULL;
- return NULL;
- }
-
- return return_val;
-}
-/* }}} */
-
-/* {{{ php_openssl_is_private_key
- Check whether the supplied key is a private key by checking if the secret prime factors are set */
-static int php_openssl_is_private_key(EVP_PKEY* pkey TSRMLS_DC)
-{
- assert(pkey != NULL);
-
- switch (pkey->type) {
-#ifndef NO_RSA
- case EVP_PKEY_RSA:
- case EVP_PKEY_RSA2:
- assert(pkey->pkey.rsa != NULL);
-
- if (NULL == pkey->pkey.rsa->p || NULL == pkey->pkey.rsa->q) {
- return 0;
- }
- break;
-#endif
-#ifndef NO_DSA
- case EVP_PKEY_DSA:
- case EVP_PKEY_DSA1:
- case EVP_PKEY_DSA2:
- case EVP_PKEY_DSA3:
- case EVP_PKEY_DSA4:
- assert(pkey->pkey.dsa != NULL);
-
- if (NULL == pkey->pkey.dsa->p || NULL == pkey->pkey.dsa->q || NULL == pkey->pkey.dsa->priv_key){
- return 0;
- }
- break;
-#endif
-#ifndef NO_DH
- case EVP_PKEY_DH:
- assert(pkey->pkey.dh != NULL);
-
- if (NULL == pkey->pkey.dh->p || NULL == pkey->pkey.dh->priv_key) {
- return 0;
- }
- break;
-#endif
- default:
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "key type not supported in this PHP build!");
- break;
- }
- return 1;
-}
-/* }}} */
-
-/* {{{ proto resource openssl_pkey_new([array configargs])
- Generates a new private key */
-PHP_FUNCTION(openssl_pkey_new)
-{
- struct php_x509_request req;
- zval * args = NULL;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|a!", &args) == FAILURE) {
- return;
- }
- RETVAL_FALSE;
-
- PHP_SSL_REQ_INIT(&req);
-
- if (PHP_SSL_REQ_PARSE(&req, args) == SUCCESS)
- {
- if (php_openssl_generate_private_key(&req TSRMLS_CC)) {
- /* pass back a key resource */
- RETVAL_RESOURCE(zend_list_insert(req.priv_key, le_key));
- /* make sure the cleanup code doesn't zap it! */
- req.priv_key = NULL;
- }
- }
- PHP_SSL_REQ_DISPOSE(&req);
-}
-/* }}} */
-
-/* {{{ proto bool openssl_pkey_export_to_file(mixed key, string outfilename [, string passphrase, array config_args)
- Gets an exportable representation of a key into a file */
-PHP_FUNCTION(openssl_pkey_export_to_file)
-{
- struct php_x509_request req;
- zval * zpkey, * args = NULL;
- char * passphrase = NULL; int passphrase_len = 0;
- char * filename = NULL; int filename_len = 0;
- long key_resource = -1;
- EVP_PKEY * key;
- BIO * bio_out = NULL;
- const EVP_CIPHER * cipher;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "zs|s!a!", &zpkey, &filename, &filename_len, &passphrase, &passphrase_len, &args) == FAILURE) {
- return;
- }
- RETVAL_FALSE;
-
- key = php_openssl_evp_from_zval(&zpkey, 0, passphrase, 0, &key_resource TSRMLS_CC);
-
- if (key == NULL) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "cannot get key from parameter 1");
- RETURN_FALSE;
- }
-
- if (php_openssl_safe_mode_chk(filename TSRMLS_CC)) {
- RETURN_FALSE;
- }
-
- PHP_SSL_REQ_INIT(&req);
-
- if (PHP_SSL_REQ_PARSE(&req, args) == SUCCESS) {
- bio_out = BIO_new_file(filename, "w");
-
- if (passphrase && req.priv_key_encrypt) {
- cipher = (EVP_CIPHER *) EVP_des_ede3_cbc();
- } else {
- cipher = NULL;
- }
- if (PEM_write_bio_PrivateKey(bio_out, key, cipher, passphrase, passphrase_len, NULL, NULL)) {
- /* Success!
- * If returning the output as a string, do so now */
- RETVAL_TRUE;
- }
- }
- PHP_SSL_REQ_DISPOSE(&req);
-
- if (key_resource == -1 && key) {
- EVP_PKEY_free(key);
- }
- if (bio_out) {
- BIO_free(bio_out);
- }
-}
-/* }}} */
-
-/* {{{ proto bool openssl_pkey_export(mixed key, &mixed out [, string passphrase [, array config_args]])
- Gets an exportable representation of a key into a string or file */
-PHP_FUNCTION(openssl_pkey_export)
-{
- struct php_x509_request req;
- zval * zpkey, * args = NULL, *out;
- char * passphrase = NULL; int passphrase_len = 0;
- long key_resource = -1;
- EVP_PKEY * key;
- BIO * bio_out = NULL;
- const EVP_CIPHER * cipher;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "zz|s!a!", &zpkey, &out, &passphrase, &passphrase_len, &args) == FAILURE) {
- return;
- }
- RETVAL_FALSE;
-
- key = php_openssl_evp_from_zval(&zpkey, 0, passphrase, 0, &key_resource TSRMLS_CC);
-
- if (key == NULL) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "cannot get key from parameter 1");
- RETURN_FALSE;
- }
-
- PHP_SSL_REQ_INIT(&req);
-
- if (PHP_SSL_REQ_PARSE(&req, args) == SUCCESS) {
- bio_out = BIO_new(BIO_s_mem());
-
- if (passphrase && req.priv_key_encrypt) {
- cipher = (EVP_CIPHER *) EVP_des_ede3_cbc();
- } else {
- cipher = NULL;
- }
- if (PEM_write_bio_PrivateKey(bio_out, key, cipher, passphrase, passphrase_len, NULL, NULL)) {
- /* Success!
- * If returning the output as a string, do so now */
-
- char * bio_mem_ptr;
- long bio_mem_len;
- RETVAL_TRUE;
-
- bio_mem_len = BIO_get_mem_data(bio_out, &bio_mem_ptr);
- ZVAL_STRINGL(out, bio_mem_ptr, bio_mem_len, 1);
- }
- }
- PHP_SSL_REQ_DISPOSE(&req);
-
- if (key_resource == -1 && key) {
- EVP_PKEY_free(key);
- }
- if (bio_out) {
- BIO_free(bio_out);
- }
-}
-/* }}} */
-
-/* {{{ proto int openssl_pkey_get_public(mixed cert)
- Gets public key from X.509 certificate */
-PHP_FUNCTION(openssl_pkey_get_public)
-{
- zval *cert;
- EVP_PKEY *pkey;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z", &cert) == FAILURE) {
- return;
- }
- Z_TYPE_P(return_value) = IS_RESOURCE;
- pkey = php_openssl_evp_from_zval(&cert, 1, NULL, 1, &Z_LVAL_P(return_value) TSRMLS_CC);
-
- if (pkey == NULL) {
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-/* {{{ proto void openssl_pkey_free(int key)
- Frees a key */
-PHP_FUNCTION(openssl_pkey_free)
-{
- zval *key;
- EVP_PKEY *pkey;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &key) == FAILURE) {
- return;
- }
- ZEND_FETCH_RESOURCE(pkey, EVP_PKEY *, &key, -1, "OpenSSL key", le_key);
- zend_list_delete(Z_LVAL_P(key));
-}
-/* }}} */
-
-/* {{{ proto int openssl_pkey_get_private(string key [, string passphrase])
- Gets private keys */
-PHP_FUNCTION(openssl_pkey_get_private)
-{
- zval *cert;
- EVP_PKEY *pkey;
- char * passphrase = "";
- int passphrase_len;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z|s", &cert, &passphrase, &passphrase_len) == FAILURE) {
- return;
- }
- Z_TYPE_P(return_value) = IS_RESOURCE;
- pkey = php_openssl_evp_from_zval(&cert, 0, passphrase, 1, &Z_LVAL_P(return_value) TSRMLS_CC);
-
- if (pkey == NULL) {
- RETURN_FALSE;
- }
-}
-
-/* }}} */
-
-/* }}} */
-
-/* {{{ PKCS7 S/MIME functions */
-
-/* {{{ proto bool openssl_pkcs7_verify(string filename, long flags [, string signerscerts [, array cainfo [, string extracerts]]])
- Verifys that the data block is intact, the signer is who they say they are, and returns the CERTs of the signers */
-PHP_FUNCTION(openssl_pkcs7_verify)
-{
- X509_STORE * store = NULL;
- zval * cainfo = NULL;
- STACK_OF(X509) *signers= NULL;
- STACK_OF(X509) *others = NULL;
- PKCS7 * p7 = NULL;
- BIO * in = NULL, * datain = NULL;
- long flags = 0;
- char * filename; int filename_len;
- char * extracerts = NULL; int extracerts_len;
- char * signersfilename = NULL; int signersfilename_len;
-
- RETVAL_LONG(-1);
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "sl|sas", &filename, &filename_len,
- &flags, &signersfilename, &signersfilename_len, &cainfo,
- &extracerts, &extracerts_len) == FAILURE) {
- return;
- }
-
- if (extracerts) {
- others = load_all_certs_from_file(extracerts);
- if (others == NULL) {
- goto clean_exit;
- }
- }
-
- flags = flags & ~PKCS7_DETACHED;
-
- store = setup_verify(cainfo TSRMLS_CC);
-
- if (!store) {
- goto clean_exit;
- }
- if (php_openssl_safe_mode_chk(filename TSRMLS_CC)) {
- goto clean_exit;
- }
-
- in = BIO_new_file(filename, (flags & PKCS7_BINARY) ? "rb" : "r");
- if (in == NULL) {
- goto clean_exit;
- }
- p7 = SMIME_read_PKCS7(in, &datain);
- if (p7 == NULL) {
-#if DEBUG_SMIME
- zend_printf("SMIME_read_PKCS7 failed\n");
-#endif
- goto clean_exit;
- }
-#if DEBUG_SMIME
- zend_printf("Calling PKCS7 verify\n");
-#endif
-
- if (PKCS7_verify(p7, others, store, datain, NULL, flags)) {
-
- RETVAL_TRUE;
-
- if (signersfilename) {
- BIO *certout;
-
- if (php_openssl_safe_mode_chk(filename TSRMLS_CC)) {
- goto clean_exit;
- }
-
- certout = BIO_new_file(signersfilename, "w");
- if (certout) {
- int i;
- signers = PKCS7_get0_signers(p7, NULL, flags);
-
- for(i = 0; i < sk_X509_num(signers); i++) {
- PEM_write_bio_X509(certout, sk_X509_value(signers, i));
- }
- BIO_free(certout);
- sk_X509_free(signers);
- } else {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "signature OK, but cannot open %s for writing", signersfilename);
- RETVAL_LONG(-1);
- }
- }
- goto clean_exit;
- } else {
- RETVAL_FALSE;
- }
-clean_exit:
- X509_STORE_free(store);
- BIO_free(datain);
- BIO_free(in);
- PKCS7_free(p7);
- sk_X509_free(others);
-}
-/* }}} */
-
-/* {{{ proto bool openssl_pkcs7_encrypt(string infile, string outfile, mixed recipcerts, array headers [, long flags [, long cipher]])
- Encrypts the message in the file named infile with the certificates in recipcerts and output the result to the file named outfile */
-PHP_FUNCTION(openssl_pkcs7_encrypt)
-{
- zval * zrecipcerts, * zheaders = NULL;
- STACK_OF(X509) * recipcerts = NULL;
- BIO * infile = NULL, * outfile = NULL;
- long flags = 0;
- PKCS7 * p7 = NULL;
- HashPosition hpos;
- zval ** zcertval;
- X509 * cert;
- const EVP_CIPHER *cipher = NULL;
- long cipherid = PHP_OPENSSL_CIPHER_DEFAULT;
- uint strindexlen;
- ulong intindex;
- char * strindex;
- char * infilename = NULL; int infilename_len;
- char * outfilename = NULL; int outfilename_len;
-
- RETVAL_FALSE;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ssza!|ll", &infilename, &infilename_len,
- &outfilename, &outfilename_len, &zrecipcerts, &zheaders, &flags, &cipherid) == FAILURE)
- return;
-
-
- if (php_openssl_safe_mode_chk(infilename TSRMLS_CC) || php_openssl_safe_mode_chk(outfilename TSRMLS_CC)) {
- return;
- }
-
- infile = BIO_new_file(infilename, "r");
- if (infile == NULL) {
- goto clean_exit;
- }
-
- outfile = BIO_new_file(outfilename, "w");
- if (outfile == NULL) {
- goto clean_exit;
- }
-
- recipcerts = sk_X509_new_null();
-
- /* get certs */
- if (Z_TYPE_P(zrecipcerts) == IS_ARRAY) {
- zend_hash_internal_pointer_reset_ex(HASH_OF(zrecipcerts), &hpos);
- while(zend_hash_get_current_data_ex(HASH_OF(zrecipcerts), (void**)&zcertval, &hpos) == SUCCESS) {
- long certresource;
-
- cert = php_openssl_x509_from_zval(zcertval, 0, &certresource TSRMLS_CC);
- if (cert == NULL) {
- goto clean_exit;
- }
-
- if (certresource != -1) {
- /* we shouldn't free this particular cert, as it is a resource.
- make a copy and push that on the stack instead */
- cert = X509_dup(cert);
- if (cert == NULL) {
- goto clean_exit;
- }
- }
- sk_X509_push(recipcerts, cert);
-
- zend_hash_move_forward_ex(HASH_OF(zrecipcerts), &hpos);
- }
- } else {
- /* a single certificate */
- long certresource;
-
- cert = php_openssl_x509_from_zval(&zrecipcerts, 0, &certresource TSRMLS_CC);
- if (cert == NULL) {
- goto clean_exit;
- }
-
- if (certresource != -1) {
- /* we shouldn't free this particular cert, as it is a resource.
- make a copy and push that on the stack instead */
- cert = X509_dup(cert);
- if (cert == NULL) {
- goto clean_exit;
- }
- }
- sk_X509_push(recipcerts, cert);
- }
-
- /* sanity check the cipher */
- switch (cipherid) {
- case PHP_OPENSSL_CIPHER_RC2_40:
- cipher = EVP_rc2_40_cbc();
- break;
- case PHP_OPENSSL_CIPHER_RC2_64:
- cipher = EVP_rc2_64_cbc();
- break;
- case PHP_OPENSSL_CIPHER_RC2_128:
- cipher = EVP_rc2_cbc();
- break;
- case PHP_OPENSSL_CIPHER_DES:
- cipher = EVP_des_cbc();
- break;
- case PHP_OPENSSL_CIPHER_3DES:
- cipher = EVP_des_ede3_cbc();
- break;
- default:
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid cipher type `%ld'", cipherid);
- goto clean_exit;
- }
- if (cipher == NULL) {
- /* shouldn't happen */
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Failed to get cipher");
- goto clean_exit;
- }
-
- p7 = PKCS7_encrypt(recipcerts, infile, (EVP_CIPHER*)cipher, flags);
-
- if (p7 == NULL) {
- goto clean_exit;
- }
-
- /* tack on extra headers */
- if (zheaders) {
- zend_hash_internal_pointer_reset_ex(HASH_OF(zheaders), &hpos);
- while(zend_hash_get_current_data_ex(HASH_OF(zheaders), (void**)&zcertval, &hpos) == SUCCESS) {
- zend_hash_get_current_key_ex(HASH_OF(zheaders), &strindex, &strindexlen, &intindex, 0, &hpos);
-
- convert_to_string_ex(zcertval);
-
- if (strindex) {
- BIO_printf(outfile, "%s: %s\n", strindex, Z_STRVAL_PP(zcertval));
- } else {
- BIO_printf(outfile, "%s\n", Z_STRVAL_PP(zcertval));
- }
-
- zend_hash_move_forward_ex(HASH_OF(zheaders), &hpos);
- }
- }
-
- BIO_reset(infile);
-
- /* write the encrypted data */
- SMIME_write_PKCS7(outfile, p7, infile, flags);
-
- RETVAL_TRUE;
-
-clean_exit:
- PKCS7_free(p7);
- BIO_free(infile);
- BIO_free(outfile);
- if (recipcerts) {
- sk_X509_pop_free(recipcerts, X509_free);
- }
-}
-/* }}} */
-
-/* {{{ proto bool openssl_pkcs7_sign(string infile, string outfile, mixed signcert, mixed signkey, array headers [, long flags [, string extracertsfilename]])
- Signs the MIME message in the file named infile with signcert/signkey and output the result to file name outfile. headers lists plain text headers to exclude from the signed portion of the message, and should include to, from and subject as a minimum */
-
-PHP_FUNCTION(openssl_pkcs7_sign)
-{
- zval * zcert, * zprivkey, * zheaders;
- zval ** hval;
- X509 * cert = NULL;
- EVP_PKEY * privkey = NULL;
- long flags = PKCS7_DETACHED;
- PKCS7 * p7 = NULL;
- BIO * infile = NULL, * outfile = NULL;
- STACK_OF(X509) *others = NULL;
- long certresource = -1, keyresource = -1;
- ulong intindex;
- uint strindexlen;
- HashPosition hpos;
- char * strindex;
- char * infilename; int infilename_len;
- char * outfilename; int outfilename_len;
- char * extracertsfilename = NULL; int extracertsfilename_len;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "sszza!|ls",
- &infilename, &infilename_len, &outfilename, &outfilename_len,
- &zcert, &zprivkey, &zheaders, &flags, &extracertsfilename,
- &extracertsfilename_len) == FAILURE) {
- return;
- }
-
- RETVAL_FALSE;
-
- if (extracertsfilename) {
- others = load_all_certs_from_file(extracertsfilename);
- if (others == NULL) {
- goto clean_exit;
- }
- }
-
- privkey = php_openssl_evp_from_zval(&zprivkey, 0, "", 0, &keyresource TSRMLS_CC);
- if (privkey == NULL) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "error getting private key");
- goto clean_exit;
- }
-
- cert = php_openssl_x509_from_zval(&zcert, 0, &certresource TSRMLS_CC);
- if (cert == NULL) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "error getting cert");
- goto clean_exit;
- }
-
- if (php_openssl_safe_mode_chk(infilename TSRMLS_CC) || php_openssl_safe_mode_chk(outfilename TSRMLS_CC)) {
- goto clean_exit;
- }
-
- infile = BIO_new_file(infilename, "r");
- if (infile == NULL) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "error opening input file %s!", infilename);
- goto clean_exit;
- }
-
- outfile = BIO_new_file(outfilename, "w");
- if (outfile == NULL) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "error opening output file %s!", outfilename);
- goto clean_exit;
- }
-
- p7 = PKCS7_sign(cert, privkey, others, infile, flags);
- if (p7 == NULL) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "error creating PKCS7 structure!");
- goto clean_exit;
- }
-
- BIO_reset(infile);
-
- /* tack on extra headers */
- if (zheaders) {
- zend_hash_internal_pointer_reset_ex(HASH_OF(zheaders), &hpos);
- while(zend_hash_get_current_data_ex(HASH_OF(zheaders), (void**)&hval, &hpos) == SUCCESS) {
- zend_hash_get_current_key_ex(HASH_OF(zheaders), &strindex, &strindexlen, &intindex, 0, &hpos);
-
- convert_to_string_ex(hval);
-
- if (strindex) {
- BIO_printf(outfile, "%s: %s\n", strindex, Z_STRVAL_PP(hval));
- } else {
- BIO_printf(outfile, "%s\n", Z_STRVAL_PP(hval));
- }
- zend_hash_move_forward_ex(HASH_OF(zheaders), &hpos);
- }
- }
- /* write the signed data */
- SMIME_write_PKCS7(outfile, p7, infile, flags);
-
- RETVAL_TRUE;
-
-clean_exit:
- PKCS7_free(p7);
- BIO_free(infile);
- BIO_free(outfile);
- if (others) {
- sk_X509_pop_free(others, X509_free);
- }
- if (privkey && keyresource == -1) {
- EVP_PKEY_free(privkey);
- }
- if (cert && certresource == -1) {
- X509_free(cert);
- }
-}
-/* }}} */
-
-/* {{{ proto bool openssl_pkcs7_decrypt(string infilename, string outfilename, mixed recipcert [, mixed recipkey])
- Decrypts the S/MIME message in the file name infilename and output the results to the file name outfilename. recipcert is a CERT for one of the recipients. recipkey specifies the private key matching recipcert, if recipcert does not include the key */
-
-PHP_FUNCTION(openssl_pkcs7_decrypt)
-{
- zval * recipcert, * recipkey = NULL;
- X509 * cert = NULL;
- EVP_PKEY * key = NULL;
- long certresval, keyresval;
- BIO * in = NULL, * out = NULL, * datain = NULL;
- PKCS7 * p7 = NULL;
- char * infilename; int infilename_len;
- char * outfilename; int outfilename_len;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ssz|z", &infilename, &infilename_len,
- &outfilename, &outfilename_len, &recipcert, &recipkey) == FAILURE) {
- return;
- }
-
- RETVAL_FALSE;
-
- cert = php_openssl_x509_from_zval(&recipcert, 0, &certresval TSRMLS_CC);
- if (cert == NULL) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "unable to coerce parameter 3 to x509 cert");
- goto clean_exit;
- }
-
- key = php_openssl_evp_from_zval(recipkey ? &recipkey : &recipcert, 0, "", 0, &keyresval TSRMLS_CC);
- if (key == NULL) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "unable to get private key");
- goto clean_exit;
- }
-
- if (php_openssl_safe_mode_chk(infilename TSRMLS_CC) || php_openssl_safe_mode_chk(outfilename TSRMLS_CC)) {
- goto clean_exit;
- }
-
- in = BIO_new_file(infilename, "r");
- if (in == NULL) {
- goto clean_exit;
- }
- out = BIO_new_file(outfilename, "w");
- if (out == NULL) {
- goto clean_exit;
- }
-
- p7 = SMIME_read_PKCS7(in, &datain);
-
- if (p7 == NULL) {
- goto clean_exit;
- }
- if (PKCS7_decrypt(p7, key, cert, out, PKCS7_DETACHED)) {
- RETVAL_TRUE;
- }
-clean_exit:
- PKCS7_free(p7);
- BIO_free(datain);
- BIO_free(in);
- BIO_free(out);
- if (cert && certresval == -1) {
- X509_free(cert);
- }
- if (key && keyresval == -1) {
- EVP_PKEY_free(key);
- }
-}
-/* }}} */
-
-/* }}} */
-
-/* {{{ proto bool openssl_private_encrypt(string data, string crypted, mixed key [, int padding])
- Encrypts data with private key */
-PHP_FUNCTION(openssl_private_encrypt)
-{
- zval *key, *crypted;
- EVP_PKEY *pkey;
- int cryptedlen;
- unsigned char *cryptedbuf = NULL;
- int successful = 0;
- long keyresource = -1;
- char * data;
- int data_len;
- long padding = RSA_PKCS1_PADDING;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "szz|l", &data, &data_len, &crypted, &key, &padding) == FAILURE) {
- return;
- }
- RETVAL_FALSE;
-
- pkey = php_openssl_evp_from_zval(&key, 0, "", 0, &keyresource TSRMLS_CC);
-
- if (pkey == NULL) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "key param is not a valid private key");
- RETURN_FALSE;
- }
-
- cryptedlen = EVP_PKEY_size(pkey);
- cryptedbuf = emalloc(cryptedlen + 1);
-
- switch (Z_TYPE_P(pkey)) {
- case EVP_PKEY_RSA:
- case EVP_PKEY_RSA2:
- successful = (RSA_private_encrypt(data_len,
- data,
- cryptedbuf,
- pkey->pkey.rsa,
- padding) == cryptedlen);
- break;
- default:
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "key type not supported in this PHP build!");
- }
-
- if (successful) {
- zval_dtor(crypted);
- cryptedbuf[cryptedlen] = '\0';
- ZVAL_STRINGL(crypted, cryptedbuf, cryptedlen, 0);
- cryptedbuf = NULL;
- RETVAL_TRUE;
- }
- if (cryptedbuf) {
- efree(cryptedbuf);
- }
- if (keyresource == -1) {
- EVP_PKEY_free(pkey);
- }
-}
-/* }}} */
-
-/* {{{ proto bool openssl_private_decrypt(string data, string decrypted, mixed key [, int padding])
- Decrypts data with private key */
-PHP_FUNCTION(openssl_private_decrypt)
-{
- zval *key, *crypted;
- EVP_PKEY *pkey;
- int cryptedlen;
- unsigned char *cryptedbuf = NULL;
- unsigned char *crypttemp;
- int successful = 0;
- long padding = RSA_PKCS1_PADDING;
- long keyresource = -1;
- char * data;
- int data_len;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "szz|l", &data, &data_len, &crypted, &key, &padding) == FAILURE) {
- return;
- }
- RETVAL_FALSE;
-
- pkey = php_openssl_evp_from_zval(&key, 0, "", 0, &keyresource TSRMLS_CC);
- if (pkey == NULL) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "key parameter is not a valid private key");
- RETURN_FALSE;
- }
-
- cryptedlen = EVP_PKEY_size(pkey);
- crypttemp = emalloc(cryptedlen + 1);
-
- switch (Z_TYPE_P(pkey)) {
- case EVP_PKEY_RSA:
- case EVP_PKEY_RSA2:
- cryptedlen = RSA_private_decrypt(data_len,
- data,
- crypttemp,
- pkey->pkey.rsa,
- padding);
- if (cryptedlen != -1) {
- cryptedbuf = emalloc(cryptedlen + 1);
- memcpy(cryptedbuf, crypttemp, cryptedlen);
- successful = 1;
- }
- break;
- default:
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "key type not supported in this PHP build!");
- }
-
- efree(crypttemp);
-
- if (successful) {
- zval_dtor(crypted);
- cryptedbuf[cryptedlen] = '\0';
- ZVAL_STRINGL(crypted, cryptedbuf, cryptedlen, 0);
- cryptedbuf = NULL;
- RETVAL_TRUE;
- }
-
- if (keyresource == -1) {
- EVP_PKEY_free(pkey);
- }
- if (cryptedbuf) {
- efree(cryptedbuf);
- }
-}
-/* }}} */
-
-/* {{{ proto bool openssl_public_encrypt(string data, string crypted, mixed key [, int padding])
- Encrypts data with public key */
-PHP_FUNCTION(openssl_public_encrypt)
-{
- zval *key, *crypted;
- EVP_PKEY *pkey;
- int cryptedlen;
- unsigned char *cryptedbuf;
- int successful = 0;
- long keyresource = -1;
- long padding = RSA_PKCS1_PADDING;
- char * data;
- int data_len;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "szz|l", &data, &data_len, &crypted, &key, &padding) == FAILURE)
- return;
-
- RETVAL_FALSE;
-
- pkey = php_openssl_evp_from_zval(&key, 1, NULL, 0, &keyresource TSRMLS_CC);
- if (pkey == NULL) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "key parameter is not a valid public key");
- RETURN_FALSE;
- }
-
- cryptedlen = EVP_PKEY_size(pkey);
- cryptedbuf = emalloc(cryptedlen + 1);
-
- switch (Z_TYPE_P(pkey)) {
- case EVP_PKEY_RSA:
- case EVP_PKEY_RSA2:
- successful = (RSA_public_encrypt(data_len,
- data,
- cryptedbuf,
- pkey->pkey.rsa,
- padding) == cryptedlen);
- break;
- default:
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "key type not supported in this PHP build!");
-
- }
-
- if (successful) {
- zval_dtor(crypted);
- cryptedbuf[cryptedlen] = '\0';
- ZVAL_STRINGL(crypted, cryptedbuf, cryptedlen, 0);
- cryptedbuf = NULL;
- RETVAL_TRUE;
- }
- if (keyresource == -1) {
- EVP_PKEY_free(pkey);
- }
- if (cryptedbuf) {
- efree(cryptedbuf);
- }
-}
-/* }}} */
-
-/* {{{ proto bool openssl_public_decrypt(string data, string crypted, resource key [, int padding])
- Decrypts data with public key */
-PHP_FUNCTION(openssl_public_decrypt)
-{
- zval *key, *crypted;
- EVP_PKEY *pkey;
- int cryptedlen;
- unsigned char *cryptedbuf = NULL;
- unsigned char *crypttemp;
- int successful = 0;
- long keyresource = -1;
- long padding = RSA_PKCS1_PADDING;
- char * data;
- int data_len;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "szz|l", &data, &data_len, &crypted, &key, &padding) == FAILURE) {
- return;
- }
- RETVAL_FALSE;
-
- pkey = php_openssl_evp_from_zval(&key, 1, NULL, 0, &keyresource TSRMLS_CC);
- if (pkey == NULL) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "key parameter is not a valid public key");
- RETURN_FALSE;
- }
-
- cryptedlen = EVP_PKEY_size(pkey);
- crypttemp = emalloc(cryptedlen + 1);
-
- switch (Z_TYPE_P(pkey)) {
- case EVP_PKEY_RSA:
- case EVP_PKEY_RSA2:
- cryptedlen = RSA_public_decrypt(data_len,
- data,
- crypttemp,
- pkey->pkey.rsa,
- padding);
- if (cryptedlen != -1) {
- cryptedbuf = emalloc(cryptedlen + 1);
- memcpy(cryptedbuf, crypttemp, cryptedlen);
- successful = 1;
- }
- break;
-
- default:
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "key type not supported in this PHP build!");
-
- }
-
- efree(crypttemp);
-
- if (successful) {
- zval_dtor(crypted);
- cryptedbuf[cryptedlen] = '\0';
- ZVAL_STRINGL(crypted, cryptedbuf, cryptedlen, 0);
- cryptedbuf = NULL;
- RETVAL_TRUE;
- }
-
- if (cryptedbuf) {
- efree(cryptedbuf);
- }
- if (keyresource == -1) {
- EVP_PKEY_free(pkey);
- }
-}
-/* }}} */
-
-/* {{{ proto mixed openssl_error_string(void)
- Returns a description of the last error, and alters the index of the error messages. Returns false when the are no more messages */
-PHP_FUNCTION(openssl_error_string)
-{
- char buf[512];
- unsigned long val;
-
- if (ZEND_NUM_ARGS() != 0) {
- WRONG_PARAM_COUNT;
- }
-
- val = ERR_get_error();
- if (val) {
- RETURN_STRING(ERR_error_string(val, buf), 1);
- } else {
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-/* {{{ proto bool openssl_sign(string data, &string signature, mixed key)
- Signs data */
-PHP_FUNCTION(openssl_sign)
-{
- zval *key, *signature;
- EVP_PKEY *pkey;
- int siglen;
- unsigned char *sigbuf;
- long keyresource = -1;
- char * data;
- int data_len;
- EVP_MD_CTX md_ctx;
- long signature_algo = OPENSSL_ALGO_SHA1;
- EVP_MD *mdtype;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "szz|l", &data, &data_len, &signature, &key, &signature_algo) == FAILURE) {
- return;
- }
- pkey = php_openssl_evp_from_zval(&key, 0, "", 0, &keyresource TSRMLS_CC);
- if (pkey == NULL) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "supplied key param cannot be coerced into a private key");
- RETURN_FALSE;
- }
-
- switch (signature_algo) {
- case OPENSSL_ALGO_SHA1:
- mdtype = (EVP_MD *) EVP_sha1();
- break;
- case OPENSSL_ALGO_MD5:
- mdtype = (EVP_MD *) EVP_md5();
- break;
- case OPENSSL_ALGO_MD4:
- mdtype = (EVP_MD *) EVP_md4();
- break;
- case OPENSSL_ALGO_MD2:
- mdtype = (EVP_MD *) EVP_md2();
- break;
- default:
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unknown signature algorithm.");
- RETURN_FALSE;
- break;
- }
-
- siglen = EVP_PKEY_size(pkey);
- sigbuf = emalloc(siglen + 1);
-
- EVP_SignInit(&md_ctx, mdtype);
- EVP_SignUpdate(&md_ctx, data, data_len);
- if (EVP_SignFinal (&md_ctx, sigbuf, &siglen, pkey)) {
- zval_dtor(signature);
- sigbuf[siglen] = '\0';
- ZVAL_STRINGL(signature, sigbuf, siglen, 0);
- RETVAL_TRUE;
- } else {
- efree(sigbuf);
- RETVAL_FALSE;
- }
- if (keyresource == -1) {
- EVP_PKEY_free(pkey);
- }
-}
-/* }}} */
-
-/* {{{ proto int openssl_verify(string data, string signature, mixed key)
- Verifys data */
-PHP_FUNCTION(openssl_verify)
-{
- zval *key;
- EVP_PKEY *pkey;
- int err;
- EVP_MD_CTX md_ctx;
- long keyresource = -1;
- char * data; int data_len;
- char * signature; int signature_len;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ssz", &data, &data_len, &signature, &signature_len, &key) == FAILURE) {
- return;
- }
-
- pkey = php_openssl_evp_from_zval(&key, 1, NULL, 0, &keyresource TSRMLS_CC);
- if (pkey == NULL) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "supplied key param cannot be coerced into a public key");
- RETURN_FALSE;
- }
-
- EVP_VerifyInit (&md_ctx, EVP_sha1());
- EVP_VerifyUpdate (&md_ctx, data, data_len);
- err = EVP_VerifyFinal (&md_ctx, signature, signature_len, pkey);
-
- if (keyresource == -1) {
- EVP_PKEY_free(pkey);
- }
- RETURN_LONG(err);
-}
-/* }}} */
-
-/* {{{ proto int openssl_seal(string data, &string sealdata, &array ekeys, array pubkeys)
- Seals data */
-PHP_FUNCTION(openssl_seal)
-{
- zval *pubkeys, **pubkey, *sealdata, *ekeys;
- HashTable *pubkeysht;
- HashPosition pos;
- EVP_PKEY **pkeys;
- long * key_resources; /* so we know what to cleanup */
- int i, len1, len2, *eksl, nkeys;
- unsigned char *buf = NULL, **eks;
- char * data; int data_len;
- EVP_CIPHER_CTX ctx;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "szza/", &data, &data_len, &sealdata, &ekeys, &pubkeys) == FAILURE) {
- return;
- }
-
- pubkeysht = HASH_OF(pubkeys);
- nkeys = pubkeysht ? zend_hash_num_elements(pubkeysht) : 0;
- if (!nkeys) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Fourth argument to openssl_seal() must be a non-empty array");
- RETURN_FALSE;
- }
-
- pkeys = safe_emalloc(nkeys, sizeof(*pkeys), 0);
- eksl = safe_emalloc(nkeys, sizeof(*eksl), 0);
- eks = safe_emalloc(nkeys, sizeof(*eks), 0);
- key_resources = safe_emalloc(nkeys, sizeof(long), 0);
-
- /* get the public keys we are using to seal this data */
- zend_hash_internal_pointer_reset_ex(pubkeysht, &pos);
- i = 0;
- while (zend_hash_get_current_data_ex(pubkeysht, (void **) &pubkey,
- &pos) == SUCCESS) {
- pkeys[i] = php_openssl_evp_from_zval(pubkey, 1, NULL, 0, &key_resources[i] TSRMLS_CC);
- if (pkeys[i] == NULL) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "not a public key (%dth member of pubkeys)", i);
- RETVAL_FALSE;
- goto clean_exit;
- }
- eks[i] = emalloc(EVP_PKEY_size(pkeys[i]) + 1);
- zend_hash_move_forward_ex(pubkeysht, &pos);
- i++;
- }
-
- if (!EVP_EncryptInit(&ctx,EVP_rc4(),NULL,NULL)) {
- RETVAL_FALSE;
- goto clean_exit;
- }
-
-#if 0
- /* Need this if allow ciphers that require initialization vector */
- ivlen = EVP_CIPHER_CTX_iv_length(&ctx);
- iv = ivlen ? emalloc(ivlen + 1) : NULL;
-#endif
- /* allocate one byte extra to make room for \0 */
- buf = emalloc(data_len + EVP_CIPHER_CTX_block_size(&ctx));
-
- if (!EVP_SealInit(&ctx, EVP_rc4(), eks, eksl, NULL, pkeys, nkeys) || !EVP_SealUpdate(&ctx, buf, &len1, data, data_len)) {
- RETVAL_FALSE;
- efree(buf);
- goto clean_exit;
- }
-
- EVP_SealFinal(&ctx, buf + len1, &len2);
-
- if (len1 + len2 > 0) {
- zval_dtor(sealdata);
- buf[len1 + len2] = '\0';
- buf = erealloc(buf, len1 + len2 + 1);
- ZVAL_STRINGL(sealdata, buf, len1 + len2, 0);
-
- zval_dtor(ekeys);
- array_init(ekeys);
- for (i=0; i<nkeys; i++) {
- eks[i][eksl[i]] = '\0';
- add_next_index_stringl(ekeys, erealloc(eks[i], eksl[i] + 1), eksl[i], 0);
- eks[i] = NULL;
- }
-#if 0
- /* If allow ciphers that need IV, we need this */
- zval_dtor(*ivec);
- if (ivlen) {
- iv[ivlen] = '\0';
- ZVAL_STRINGL(*ivec, erealloc(iv, ivlen + 1), ivlen, 0);
- } else {
- ZVAL_EMPTY_STRING(*ivec);
- }
-#endif
- } else {
- efree(buf);
- }
- RETVAL_LONG(len1 + len2);
-
-clean_exit:
- for (i=0; i<nkeys; i++) {
- if (key_resources[i] == -1) {
- EVP_PKEY_free(pkeys[i]);
- }
- if (eks[i]) {
- efree(eks[i]);
- }
- }
- efree(eks);
- efree(eksl);
- efree(pkeys);
- efree(key_resources);
-}
-/* }}} */
-
-/* {{{ proto bool openssl_open(string data, &string opendata, string ekey, mixed privkey)
- Opens data */
-PHP_FUNCTION(openssl_open)
-{
- zval *privkey, *opendata;
- EVP_PKEY *pkey;
- int len1, len2;
- unsigned char *buf;
- long keyresource = -1;
- EVP_CIPHER_CTX ctx;
- char * data; int data_len;
- char * ekey; int ekey_len;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "szsz", &data, &data_len, &opendata, &ekey, &ekey_len, &privkey) == FAILURE) {
- return;
- }
-
- pkey = php_openssl_evp_from_zval(&privkey, 0, "", 0, &keyresource TSRMLS_CC);
- if (pkey == NULL) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "unable to coerce parameter 4 into a private key");
- RETURN_FALSE;
- }
- buf = emalloc(data_len + 1);
-
- if (EVP_OpenInit(&ctx, EVP_rc4(), ekey, ekey_len, NULL, pkey) && EVP_OpenUpdate(&ctx, buf, &len1, data, data_len)) {
- if (!EVP_OpenFinal(&ctx, buf + len1, &len2) || (len1 + len2 == 0)) {
- efree(buf);
- if (keyresource == -1) {
- EVP_PKEY_free(pkey);
- }
- RETURN_FALSE;
- }
- } else {
- efree(buf);
- if (keyresource == -1) {
- EVP_PKEY_free(pkey);
- }
- RETURN_FALSE;
- }
- if (keyresource == -1) {
- EVP_PKEY_free(pkey);
- }
- zval_dtor(opendata);
- buf[len1 + len2] = '\0';
- ZVAL_STRINGL(opendata, erealloc(buf, len1 + len2 + 1), len1 + len2, 0);
- RETURN_TRUE;
-}
-/* }}} */
-
-/* SSL verification functions */
-
-#define GET_VER_OPT(name) (stream->context && SUCCESS == php_stream_context_get_option(stream->context, "ssl", name, &val))
-#define GET_VER_OPT_STRING(name, str) if (GET_VER_OPT(name)) { convert_to_string_ex(val); str = Z_STRVAL_PP(val); }
-
-static int verify_callback(int preverify_ok, X509_STORE_CTX *ctx)
-{
- php_stream *stream;
- SSL *ssl;
- X509 *err_cert;
- int err, depth, ret;
- zval **val;
-
- ret = preverify_ok;
-
- /* determine the status for the current cert */
- err_cert = X509_STORE_CTX_get_current_cert(ctx);
- err = X509_STORE_CTX_get_error(ctx);
- depth = X509_STORE_CTX_get_error_depth(ctx);
-
- /* conjure the stream & context to use */
- ssl = X509_STORE_CTX_get_ex_data(ctx, SSL_get_ex_data_X509_STORE_CTX_idx());
- stream = (php_stream*)SSL_get_ex_data(ssl, ssl_stream_data_index);
-
- /* if allow_self_signed is set, make sure that verification succeeds */
- if (err == X509_V_ERR_DEPTH_ZERO_SELF_SIGNED_CERT && GET_VER_OPT("allow_self_signed") && zval_is_true(*val)) {
- ret = 1;
- }
-
- /* check the depth */
- if (GET_VER_OPT("verify_depth")) {
- convert_to_long_ex(val);
-
- if (depth > Z_LVAL_PP(val)) {
- ret = 0;
- X509_STORE_CTX_set_error(ctx, X509_V_ERR_CERT_CHAIN_TOO_LONG);
- }
- }
-
- return ret;
-
-}
-
-int php_openssl_apply_verification_policy(SSL *ssl, X509 *peer, php_stream *stream TSRMLS_DC)
-{
- zval **val = NULL;
- char *cnmatch = NULL;
- X509_NAME *name;
- char buf[1024];
- int err;
-
- /* verification is turned off */
- if (!(GET_VER_OPT("verify_peer") && zval_is_true(*val))) {
- return SUCCESS;
- }
-
- if (peer == NULL) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Could not get peer certificate");
- return FAILURE;
- }
-
- err = SSL_get_verify_result(ssl);
- switch (err) {
- case X509_V_OK:
- /* fine */
- break;
- case X509_V_ERR_DEPTH_ZERO_SELF_SIGNED_CERT:
- if (GET_VER_OPT("allow_self_signed") && zval_is_true(*val)) {
- /* allowed */
- break;
- }
- /* not allowed, so fall through */
- default:
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Could not verify peer: code:%d %s", err, X509_verify_cert_error_string(err));
- return FAILURE;
- }
-
- /* if the cert passed the usual checks, apply our own local policies now */
-
- name = X509_get_subject_name(peer);
-
- /* Does the common name match ? (used primarily for https://) */
- GET_VER_OPT_STRING("CN_match", cnmatch);
- if (cnmatch) {
- int match = 0;
-
- X509_NAME_get_text_by_NID(name, NID_commonName, buf, sizeof(buf));
-
- match = strcmp(cnmatch, buf) == 0;
- if (!match && strlen(buf) > 3 && buf[0] == '*' && buf[1] == '.') {
- /* Try wildcard */
-
- if (strchr(buf+2, '.')) {
- char *tmp = strstr(cnmatch, buf+1);
-
- match = tmp && strcmp(tmp, buf+2) && tmp == strchr(cnmatch, '.');
- }
- }
-
- if (!match) {
- /* didn't match */
- php_error_docref(NULL TSRMLS_CC, E_WARNING,
- "Peer certificate CN=`%s' did not match expected CN=`%s'",
- buf, cnmatch);
-
- return FAILURE;
- }
- }
-
- return SUCCESS;
-}
-
-static int passwd_callback(char *buf, int num, int verify, void *data)
-{
- php_stream *stream = (php_stream *)data;
- zval **val = NULL;
- char *passphrase = NULL;
- /* TODO: could expand this to make a callback into PHP user-space */
-
- GET_VER_OPT_STRING("passphrase", passphrase);
-
- if (passphrase) {
- if (Z_STRLEN_PP(val) < num - 1) {
- memcpy(buf, Z_STRVAL_PP(val), Z_STRLEN_PP(val)+1);
- return Z_STRLEN_PP(val);
- }
- }
- return 0;
-}
-
-SSL *php_SSL_new_from_context(SSL_CTX *ctx, php_stream *stream TSRMLS_DC)
-{
- zval **val = NULL;
- char *cafile = NULL;
- char *capath = NULL;
- char *certfile = NULL;
- char *cipherlist = NULL;
- int ok = 1;
-
-
- /* look at context options in the stream and set appropriate verification flags */
- if (GET_VER_OPT("verify_peer") && zval_is_true(*val)) {
-
- /* turn on verification callback */
- SSL_CTX_set_verify(ctx, SSL_VERIFY_PEER, verify_callback);
-
- /* CA stuff */
- GET_VER_OPT_STRING("cafile", cafile);
- GET_VER_OPT_STRING("capath", capath);
-
- if (cafile || capath) {
- if (!SSL_CTX_load_verify_locations(ctx, cafile, capath)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to set verify locations `%s' `%s'\n", cafile, capath);
- return NULL;
- }
- }
-
- if (GET_VER_OPT("verify_depth")) {
- convert_to_long_ex(val);
- SSL_CTX_set_verify_depth(ctx, Z_LVAL_PP(val));
- }
- } else {
- SSL_CTX_set_verify(ctx, SSL_VERIFY_NONE, NULL);
- }
-
- /* callback for the passphrase (for localcert) */
- if (GET_VER_OPT("passphrase")) {
- SSL_CTX_set_default_passwd_cb_userdata(ctx, stream);
- SSL_CTX_set_default_passwd_cb(ctx, passwd_callback);
- }
-
- GET_VER_OPT_STRING("ciphers", cipherlist);
- if (!cipherlist) {
- cipherlist = "DEFAULT";
- }
- SSL_CTX_set_cipher_list(ctx, cipherlist);
-
- GET_VER_OPT_STRING("local_cert", certfile);
- if (certfile) {
- X509 *cert = NULL;
- EVP_PKEY *key = NULL;
- SSL *tmpssl;
-
- /* 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 (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;
- }
-
- 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 (!SSL_CTX_check_private_key(ctx)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Private key does not match certificate!");
- }
- }
- if (ok) {
- SSL *ssl = SSL_new(ctx);
-
- if (ssl) {
- /* map SSL => stream */
- SSL_set_ex_data(ssl, ssl_stream_data_index, stream);
- }
- return ssl;
- }
-
- return NULL;
-}
-
-
-/*
- * Local variables:
- * tab-width: 8
- * c-basic-offset: 8
- * End:
- * vim600: sw=4 ts=4 fdm=marker
- * vim<600: sw=4 ts=4
- */
diff --git a/ext/openssl/openssl.dsp b/ext/openssl/openssl.dsp
deleted file mode 100644
index 857666a6a3..0000000000
--- a/ext/openssl/openssl.dsp
+++ /dev/null
@@ -1,111 +0,0 @@
-# Microsoft Developer Studio Project File - Name="openssl" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=openssl - Win32 Debug_TS
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "openssl.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "openssl.mak" CFG="openssl - Win32 Debug_TS"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "openssl - Win32 Release_TS" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "openssl - Win32 Debug_TS" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "openssl - Win32 Release_TS"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release_TS"
-# PROP BASE Intermediate_Dir "Release_TS"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release_TS"
-# PROP Intermediate_Dir "Release_TS"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MD /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "OPENSSL_EXPORTS" /YX /FD /c
-# ADD CPP /nologo /MD /W3 /GX /O2 /I "..\.." /I "..\..\main" /I "..\..\Zend" /I "..\..\TSRM" /D ZEND_DEBUG=0 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "COMPILE_DL_OPENSSL" /D ZTS=1 /D "ZEND_WIN32" /D "PHP_WIN32" /D HAVE_OPENSSL_EXT=1 /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x407 /d "NDEBUG"
-# ADD RSC /l 0x407 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386
-# ADD LINK32 php5ts.lib ssleay32.lib libeay32.lib ws2_32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 /out:"..\..\Release_TS/php_openssl.dll" /libpath:"..\..\Release_TS" /libpath:"..\..\Release_TS_Inline"
-
-!ELSEIF "$(CFG)" == "openssl - Win32 Debug_TS"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug_TS"
-# PROP BASE Intermediate_Dir "Debug_TS"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug_TS"
-# PROP Intermediate_Dir "Debug_TS"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "OPENSSL_EXPORTS" /YX /FD /GZ /c
-# ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "..\.." /I "..\..\main" /I "..\..\Zend" /I "..\..\TSRM" /D ZEND_DEBUG=1 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "COMPILE_DL_OPENSSL" /D ZTS=1 /D "ZEND_WIN32" /D "PHP_WIN32" /D HAVE_OPENSSL_EXT=1 /YX /FD /GZ /c
-# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x407 /d "_DEBUG"
-# ADD RSC /l 0x407 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 php5ts_debug.lib ssleay32.lib libeay32.lib ws2_32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /out:"..\..\Debug_TS/php_openssl.dll" /pdbtype:sept /libpath:"..\..\Debug_TS"
-
-!ENDIF
-
-# Begin Target
-
-# Name "openssl - Win32 Release_TS"
-# Name "openssl - Win32 Debug_TS"
-# Begin Group "Source Files"
-
-# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
-# Begin Source File
-
-SOURCE=.\openssl.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\xp_ssl.c
-# End Source File
-# End Group
-# Begin Group "Header Files"
-
-# PROP Default_Filter "h;hpp;hxx;hm;inl"
-# Begin Source File
-
-SOURCE=.\php_openssl.h
-# End Source File
-# End Group
-# End Target
-# End Project
diff --git a/ext/openssl/openssl.mak b/ext/openssl/openssl.mak
deleted file mode 100644
index a0c6fa483e..0000000000
--- a/ext/openssl/openssl.mak
+++ /dev/null
@@ -1,185 +0,0 @@
-# Temporarily here -- later may go into some batch file
-# which will set this as an environment variable
-PROJECT_ROOT = ..\..
-
-# Module details
-MODULE_NAME = php_ossl
-MODULE_DESC = "PHP 5 - OpenSSL Extension"
-VMAJ = 1
-VMIN = 0
-VREV = 0
-
-#include the common settings
-include $(PROJECT_ROOT)/netware/common.mif
-
-# OpenSSL directory
-OSSL_DIR = P:/APPS/script/sw/OpenSSL
-
-# Build type defaults to 'release'
-ifndef BUILD
-BUILD = release
-endif
-
-# Extensions of all input and output files
-.SUFFIXES:
-.SUFFIXES: .nlm .lib .obj .cpp .c .msg .mlc .mdb .xdc .d
-
-# Source files
-C_SRC = openssl.c \
- xp_ssl.c \
- start.c \
-
-CPP_SRC_NODIR = $(notdir $(CPP_SRC))
-C_SRC_NODIR = $(notdir $(C_SRC))
-SRC_DIR = $(dir $(CPP_SRC) $(C_SRC))
-
-# Library files
-LIBRARY = $(OSSL_DIR)/lib/RSAglue.lib \
- $(OSSL_DIR)/lib/crypto.lib \
- $(OSSL_DIR)/lib/ssl.lib
-
-# Destination directories and files
-OBJ_DIR = $(BUILD)
-FINAL_DIR = $(BUILD)
-MAP_FILE = $(FINAL_DIR)\$(MODULE_NAME).map
-OBJECTS = $(addprefix $(OBJ_DIR)/,$(CPP_SRC_NODIR:.c=.obj) $(C_SRC_NODIR:.c=.obj))
-DEPDS = $(addprefix $(OBJ_DIR)/,$(CPP_SRC_NODIR:.c=.d) $(C_SRC_NODIR:.c=.d))
-
-# Binary file
-ifndef BINARY
- BINARY=$(FINAL_DIR)\$(MODULE_NAME).nlm
-endif
-
-# Compile flags
-C_FLAGS += -c -maxerrors 25 -msgstyle gcc
-C_FLAGS += -wchar_t on -bool on -processor Pentium
-C_FLAGS += -nostdinc -nosyspath
-C_FLAGS += -relax_pointers # To remove type-casting errors
-C_FLAGS += -DNETWARE -DZTS
-C_FLAGS += -DUSE_OLD_FUNCTIONS -DCOMPILE_DL_OPENSSL=1
-
-C_FLAGS += -I. -I$(PROJECT_ROOT) -I$(PROJECT_ROOT)/main
-C_FLAGS += -I$(PROJECT_ROOT)/ext/standard -I$(PROJECT_ROOT)/netware
-C_FLAGS += -I$(PROJECT_ROOT)/zend -I$(PROJECT_ROOT)/tsrm
-C_FLAGS += -I- -I$(SDK_DIR)/include -I$(MWCIncludes)
-C_FLAGS += -I$(OSSL_DIR)/include
-
-ifndef STACK_SIZE
-STACK_SIZE=8192
-endif
-
-# Extra stuff based on debug / release builds
-ifeq '$(BUILD)' 'debug'
- SYM_FILE = $(FINAL_DIR)\$(MODULE_NAME).sym
- C_FLAGS += -inline smart -sym on -sym codeview4 -opt off -opt intrinsics -sym internal -DDEBUGGING -DDKFBPON
- C_FLAGS += -exc cw -DZEND_DEBUG=1
- LD_FLAGS += -sym on -sym codeview4 -osym $(SYM_FILE)
- export MWLibraryFiles=$(SDK_DIR)/imports/libcpre.o;mwcrtld.lib
-else
- C_FLAGS += -opt all -inline on -inline smart -inline auto -sym off
- C_FLAGS += -opt intrinsics -opt level=4 -DZEND_DEBUG=0
- LD_FLAGS += -sym off
- export MWLibraryFiles=$(SDK_DIR)/imports/libcpre.o;mwcrtl.lib
-endif
-
-
-# Dependencies
-MODULE = LibC \
- phplib
-IMPORT = @$(SDK_DIR)/imports/libc.imp \
- @$(SDK_DIR)/imports/ws2nlm.imp \
- @$(SDK_DIR)/imports/netware.imp \
- @$(MPK_DIR)/import/mpkOrg.imp \
- @$(PROJECT_ROOT)/netware/phplib.imp
-EXPORT = ($(MODULE_NAME)) get_module
-API = OutputToScreen
-
-# Virtual paths
-vpath %.cpp .
-vpath %.c . ..\..\netware
-vpath %.obj $(OBJ_DIR)
-
-
-all: prebuild project
-
-.PHONY: all
-
-prebuild:
- @if not exist $(OBJ_DIR) md $(OBJ_DIR)
-
-project: $(BINARY)
- @echo Build complete.
-
-$(OBJ_DIR)/%.d: %.cpp
- @echo Building Dependencies for $(<F)
- @$(CC) -M $< $(C_FLAGS) -o $@
-
-$(OBJ_DIR)/%.d: %.c
- @echo Building Dependencies for $(<F)
- @$(CC) -M $< $(C_FLAGS) -o $@
-
-$(OBJ_DIR)/%.obj: %.cpp
- @echo Compiling $?...
- @$(CC) $< $(C_FLAGS) -o $@
-
-$(OBJ_DIR)/%.obj: %.c
- @echo Compiling $?...
- @$(CC) $< $(C_FLAGS) -o $@
-
-
-$(BINARY): $(OBJECTS)
- @echo Import $(IMPORT) > $(basename $@).def
-ifdef API
- @echo Import $(API) >> $(basename $@).def
-endif
- @echo Module $(MODULE) >> $(basename $@).def
-ifdef EXPORT
- @echo Export $(EXPORT) >> $(basename $@).def
-endif
- @echo AutoUnload >> $(basename $@).def
-ifeq '$(BUILD)' 'debug'
- @echo Debug >> $(basename $@).def
-endif
- @echo Flag_On 0x00000008 >> $(basename $@).def
- @echo Start _LibCPrelude >> $(basename $@).def
- @echo Exit _LibCPostlude >> $(basename $@).def
-
-# Two functions imported to build the openssl extension
- @echo Import GetProcessSwitchCount >> $(basename $@).def
- @echo Import RunningProcess >> $(basename $@).def
-
- $(MPKTOOL) $(XDCFLAGS) $(basename $@).xdc
- @echo xdcdata $(basename $@).xdc >> $(basename $@).def
-
- @echo Linking $@...
- @echo $(LD_FLAGS) -commandfile $(basename $@).def > $(basename $@).link
-
- @echo $(LIBRARY) $(OBJECTS) >> $(basename $@).link
-
- @$(LINK) @$(basename $@).link
-
-
-.PHONY: clean
-clean: cleanobj cleanbin
-
-.PHONY: cleand
-cleand:
- @echo Deleting all dependency files...
- -@del "$(OBJ_DIR)\*.d"
-
-.PHONY: cleanobj
-cleanobj:
- @echo Deleting all object files...
- -@del "$(OBJ_DIR)\*.obj"
-
-.PHONY: cleanbin
-cleanbin:
- @echo Deleting binary files...
- -@del "$(FINAL_DIR)\$(MODULE_NAME).nlm"
- @echo Deleting MAP, DEF files, etc....
- -@del "$(FINAL_DIR)\$(MODULE_NAME).map"
- -@del "$(FINAL_DIR)\$(MODULE_NAME).def"
- -@del "$(FINAL_DIR)\$(MODULE_NAME).link"
-ifeq '$(BUILD)' 'debug'
- -@del $(FINAL_DIR)\$(MODULE_NAME).sym
-endif
diff --git a/ext/openssl/php_openssl.h b/ext/openssl/php_openssl.h
deleted file mode 100644
index 16b61f13e9..0000000000
--- a/ext/openssl/php_openssl.h
+++ /dev/null
@@ -1,83 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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. |
- +----------------------------------------------------------------------+
- | Authors: Stig Venaas <venaas@php.net> |
- | Wez Furlong <wez@thebrainroom.com |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-#ifndef PHP_OPENSSL_H
-#define PHP_OPENSSL_H
-/* HAVE_OPENSSL would include SSL MySQL stuff */
-#ifdef HAVE_OPENSSL_EXT
-extern zend_module_entry openssl_module_entry;
-#define phpext_openssl_ptr &openssl_module_entry
-
-php_stream_transport_factory_func php_openssl_ssl_socket_factory;
-
-PHP_MINIT_FUNCTION(openssl);
-PHP_MSHUTDOWN_FUNCTION(openssl);
-PHP_MINFO_FUNCTION(openssl);
-
-PHP_FUNCTION(openssl_pkey_get_private);
-PHP_FUNCTION(openssl_pkey_get_public);
-PHP_FUNCTION(openssl_pkey_free);
-PHP_FUNCTION(openssl_pkey_new);
-PHP_FUNCTION(openssl_pkey_export);
-PHP_FUNCTION(openssl_pkey_export_to_file);
-
-PHP_FUNCTION(openssl_sign);
-PHP_FUNCTION(openssl_verify);
-PHP_FUNCTION(openssl_seal);
-PHP_FUNCTION(openssl_open);
-PHP_FUNCTION(openssl_private_encrypt);
-PHP_FUNCTION(openssl_private_decrypt);
-PHP_FUNCTION(openssl_public_encrypt);
-PHP_FUNCTION(openssl_public_decrypt);
-
-PHP_FUNCTION(openssl_pkcs7_verify);
-PHP_FUNCTION(openssl_pkcs7_decrypt);
-PHP_FUNCTION(openssl_pkcs7_sign);
-PHP_FUNCTION(openssl_pkcs7_encrypt);
-
-PHP_FUNCTION(openssl_error_string);
-
-PHP_FUNCTION(openssl_x509_read);
-PHP_FUNCTION(openssl_x509_free);
-PHP_FUNCTION(openssl_x509_parse);
-PHP_FUNCTION(openssl_x509_checkpurpose);
-PHP_FUNCTION(openssl_x509_export);
-PHP_FUNCTION(openssl_x509_export_to_file);
-PHP_FUNCTION(openssl_x509_check_private_key);
-PHP_FUNCTION(openssl_csr_new);
-PHP_FUNCTION(openssl_csr_export);
-PHP_FUNCTION(openssl_csr_export_to_file);
-PHP_FUNCTION(openssl_csr_sign);
-
-#else
-
-#define phpext_openssl_ptr NULL
-
-#endif
-
-#endif
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- */
diff --git a/ext/openssl/tests/001.phpt b/ext/openssl/tests/001.phpt
deleted file mode 100644
index 9987c688b9..0000000000
--- a/ext/openssl/tests/001.phpt
+++ /dev/null
@@ -1,72 +0,0 @@
---TEST--
-OpenSSL private key functions
---SKIPIF--
-<?php // vim600:syn=php
-include('skipif.inc'); ?>
---FILE--
-<?php
-echo "Creating private key\n";
-
-/* stack up some entropy; performance is not critical,
- * and being slow will most likely even help the test.
- */
-for ($z = "", $i = 0; $i < 1024; $i++) {
- $z .= $i * $i;
- if (function_exists("usleep"))
- usleep($i);
-}
-
-$privkey = openssl_pkey_new();
-
-if ($privkey === false)
- die("failed to create private key");
-
-$passphrase = "banana";
-$key_file_name = tempnam("/tmp", "ssl");
-if ($key_file_name === false)
- die("failed to get a temporary filename!");
-
-echo "Export key to file\n";
-
-openssl_pkey_export_to_file($privkey, $key_file_name, $passphrase) or die("failed to export to file $key_file_name");
-
-echo "Load key from file - array syntax\n";
-
-$loaded_key = openssl_pkey_get_private(array("file://$key_file_name", $passphrase));
-
-if ($loaded_key === false)
- die("failed to load key using array syntax");
-
-openssl_pkey_free($loaded_key);
-
-echo "Load key using direct syntax\n";
-
-$loaded_key = openssl_pkey_get_private("file://$key_file_name", $passphrase);
-
-if ($loaded_key === false)
- die("failed to load key using direct syntax");
-
-openssl_pkey_free($loaded_key);
-
-echo "Load key manually and use string syntax\n";
-
-$key_content = file_get_contents($key_file_name);
-$loaded_key = openssl_pkey_get_private($key_content, $passphrase);
-
-if ($loaded_key === false)
- die("failed to load key using string syntax");
-
-openssl_pkey_free($loaded_key);
-
-echo "OK!\n";
-
-@unlink($key_file_name);
-
-?>
---EXPECT--
-Creating private key
-Export key to file
-Load key from file - array syntax
-Load key using direct syntax
-Load key manually and use string syntax
-OK!
diff --git a/ext/openssl/tests/bug25614.phpt b/ext/openssl/tests/bug25614.phpt
deleted file mode 100644
index dc8b23ffd6..0000000000
--- a/ext/openssl/tests/bug25614.phpt
+++ /dev/null
@@ -1,11 +0,0 @@
---TEST--
-openssl: get public key from generated private key
---SKIPIF--
-<?php if (!extension_loaded("openssl")) print "skip"; ?>
---FILE--
-<?php
-$priv = openssl_pkey_new();
-$pub = openssl_pkey_get_public($priv);
-?>
---EXPECTF--
-Warning: openssl_pkey_get_public(): Don't know how to get public key from this private key %s
diff --git a/ext/openssl/tests/skipif.inc b/ext/openssl/tests/skipif.inc
deleted file mode 100644
index 21e947d0b2..0000000000
--- a/ext/openssl/tests/skipif.inc
+++ /dev/null
@@ -1,11 +0,0 @@
-<?php
-// This script prints "skip" if condition does not meet.
-
-if (!extension_loaded("openssl") && ini_get("enable_dl")) {
- $dlext = (substr(PHP_OS, 0, 3) == "WIN") ? ".dll" : ".so";
- @dl("openssl$dlext");
-}
-if (!extension_loaded("openssl")) {
- die("skip\n");
-}
-?>
diff --git a/ext/openssl/xp_ssl.c b/ext/openssl/xp_ssl.c
deleted file mode 100644
index 4171312907..0000000000
--- a/ext/openssl/xp_ssl.c
+++ /dev/null
@@ -1,711 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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@thebrainroom.com> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#include "php.h"
-#include "ext/standard/file.h"
-#include "streams/php_streams_int.h"
-#include "php_network.h"
-#include "php_openssl.h"
-#include <openssl/ssl.h>
-#include <openssl/x509.h>
-#include <openssl/err.h>
-
-int php_openssl_apply_verification_policy(SSL *ssl, X509 *peer, php_stream *stream TSRMLS_DC);
-SSL *php_SSL_new_from_context(SSL_CTX *ctx, php_stream *stream TSRMLS_DC);
-
-/* This implementation is very closely tied to the that of the native
- * sockets implemented in the core.
- * Don't try this technique in other extensions!
- * */
-
-typedef struct _php_openssl_netstream_data_t {
- php_netstream_data_t s;
- SSL *ssl_handle;
- int enable_on_connect;
- int is_client;
- int ssl_active;
- php_stream_xport_crypt_method_t method;
-} php_openssl_netstream_data_t;
-
-php_stream_ops php_openssl_socket_ops;
-
-/* it doesn't matter that we do some hash traversal here, since it is done only
- * in an error condition arising from a network connection problem */
-static int is_http_stream_talking_to_iis(php_stream *stream TSRMLS_DC)
-{
- if (stream->wrapperdata && stream->wrapper && strcmp(stream->wrapper->wops->label, "HTTP") == 0) {
- /* the wrapperdata is an array zval containing the headers */
- zval **tmp;
-
-#define SERVER_MICROSOFT_IIS "Server: Microsoft-IIS"
-
- zend_hash_internal_pointer_reset(Z_ARRVAL_P(stream->wrapperdata));
- while (SUCCESS == zend_hash_get_current_data(Z_ARRVAL_P(stream->wrapperdata), (void**)&tmp)) {
-
- if (strncasecmp(Z_STRVAL_PP(tmp), SERVER_MICROSOFT_IIS, sizeof(SERVER_MICROSOFT_IIS)-1) == 0) {
- return 1;
- }
-
- zend_hash_move_forward(Z_ARRVAL_P(stream->wrapperdata));
- }
- }
- return 0;
-}
-
-static int handle_ssl_error(php_stream *stream, int nr_bytes TSRMLS_DC)
-{
- php_openssl_netstream_data_t *sslsock = (php_openssl_netstream_data_t*)stream->abstract;
- int err = SSL_get_error(sslsock->ssl_handle, nr_bytes);
- char esbuf[512];
- char *ebuf = NULL, *wptr = NULL;
- size_t ebuf_size = 0;
- unsigned long code, ecode;
- int retry = 1;
-
- switch(err) {
- case SSL_ERROR_ZERO_RETURN:
- /* SSL terminated (but socket may still be active) */
- retry = 0;
- break;
- case SSL_ERROR_WANT_READ:
- case SSL_ERROR_WANT_WRITE:
- /* re-negotiation, or perhaps the SSL layer needs more
- * packets: retry in next iteration */
- break;
- case SSL_ERROR_SYSCALL:
- if (ERR_peek_error() == 0) {
- if (nr_bytes == 0) {
- if (!is_http_stream_talking_to_iis(stream TSRMLS_CC)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING,
- "SSL: fatal protocol error");
- }
- SSL_set_shutdown(sslsock->ssl_handle, SSL_SENT_SHUTDOWN|SSL_RECEIVED_SHUTDOWN);
- stream->eof = 1;
- retry = 0;
- } else {
- char *estr = php_socket_strerror(php_socket_errno(), NULL, 0);
-
- php_error_docref(NULL TSRMLS_CC, E_WARNING,
- "SSL: %s", estr);
-
- efree(estr);
- retry = 0;
- }
- break;
- }
-
-
- /* fall through */
- default:
- /* some other error */
- ecode = ERR_get_error();
-
- switch (ERR_GET_REASON(ecode)) {
- case SSL_R_NO_SHARED_CIPHER:
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "SSL_R_NO_SHARED_CIPHER: no suitable shared cipher could be used. This could be because the server is missing an SSL certificate (local_cert context option)");
- retry = 0;
- break;
-
- default:
- do {
- /* allow room for a NUL and an optional \n */
- if (ebuf) {
- esbuf[0] = '\n';
- esbuf[1] = '\0';
- ERR_error_string_n(ecode, esbuf + 1, sizeof(esbuf) - 2);
- } else {
- esbuf[0] = '\0';
- ERR_error_string_n(ecode, esbuf, sizeof(esbuf) - 1);
- }
- code = strlen(esbuf);
- esbuf[code] = '\0';
-
- ebuf = erealloc(ebuf, ebuf_size + code + 1);
- if (wptr == NULL) {
- wptr = ebuf;
- }
-
- /* also copies the NUL */
- memcpy(wptr, esbuf, code + 1);
- wptr += code;
- } while ((ecode = ERR_get_error()) != 0);
-
- php_error_docref(NULL TSRMLS_CC, E_WARNING,
- "SSL operation failed with code %d. %s%s",
- err,
- ebuf ? "OpenSSL Error messages:\n" : "",
- ebuf ? ebuf : "");
- }
-
- retry = 0;
- }
- return retry;
-}
-
-
-static size_t php_openssl_sockop_write(php_stream *stream, const char *buf, size_t count TSRMLS_DC)
-{
- php_openssl_netstream_data_t *sslsock = (php_openssl_netstream_data_t*)stream->abstract;
- int didwrite;
-
- if (sslsock->ssl_active) {
- int retry = 1;
-
- do {
- didwrite = SSL_write(sslsock->ssl_handle, buf, count);
-
- if (didwrite <= 0) {
- retry = handle_ssl_error(stream, didwrite TSRMLS_CC);
- } else {
- break;
- }
- } while(retry);
-
- } 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;
- }
-
- return didwrite;
-}
-
-static size_t php_openssl_sockop_read(php_stream *stream, char *buf, size_t count TSRMLS_DC)
-{
- php_openssl_netstream_data_t *sslsock = (php_openssl_netstream_data_t*)stream->abstract;
- int nr_bytes = 0;
-
- if (sslsock->ssl_active) {
- int retry = 1;
-
- do {
- nr_bytes = SSL_read(sslsock->ssl_handle, buf, count);
-
- if (nr_bytes <= 0) {
- retry = handle_ssl_error(stream, nr_bytes TSRMLS_CC);
- stream->eof = (retry == 0 && !SSL_pending(sslsock->ssl_handle));
-
- } else {
- /* we got the data */
- break;
- }
- } while (retry);
- }
- 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;
- }
-
- return nr_bytes;
-}
-
-
-static int php_openssl_sockop_close(php_stream *stream, int close_handle TSRMLS_DC)
-{
- php_openssl_netstream_data_t *sslsock = (php_openssl_netstream_data_t*)stream->abstract;
-#ifdef PHP_WIN32
- fd_set wrfds, efds;
- int n;
- struct timeval timeout;
-#endif
- if (close_handle) {
- if (sslsock->ssl_active) {
- SSL_shutdown(sslsock->ssl_handle);
- sslsock->ssl_active = 0;
- }
- if (sslsock->ssl_handle) {
- SSL_free(sslsock->ssl_handle);
- sslsock->ssl_handle = NULL;
- }
- if (sslsock->s.socket != -1) {
-#ifdef PHP_WIN32
- /* prevent more data from coming in */
- shutdown(sslsock->s.socket, SHUT_RD);
-
- /* try to make sure that the OS sends all data before we close the connection.
- * Essentially, we are waiting for the socket to become writeable, which means
- * that all pending data has been sent.
- * We use a small timeout which should encourage the OS to send the data,
- * but at the same time avoid hanging indefintely.
- * */
- do {
- FD_ZERO(&wrfds);
- FD_SET(sslsock->s.socket, &wrfds);
- efds = wrfds;
-
- timeout.tv_sec = 0;
- timeout.tv_usec = 5000; /* arbitrary */
-
- n = select(sslsock->s.socket + 1, NULL, &wrfds, &efds, &timeout);
- } while (n == -1 && php_socket_errno() == EINTR);
-#endif
-
- closesocket(sslsock->s.socket);
- sslsock->s.socket = -1;
- }
- }
-
- pefree(sslsock, php_stream_is_persistent(stream));
-
- return 0;
-}
-
-static int php_openssl_sockop_flush(php_stream *stream TSRMLS_DC)
-{
- return php_stream_socket_ops.flush(stream TSRMLS_CC);
-}
-
-static int php_openssl_sockop_stat(php_stream *stream, php_stream_statbuf *ssb TSRMLS_DC)
-{
- return php_stream_socket_ops.stat(stream, ssb TSRMLS_CC);
-}
-
-
-static inline int php_openssl_setup_crypto(php_stream *stream,
- php_openssl_netstream_data_t *sslsock,
- php_stream_xport_crypto_param *cparam
- TSRMLS_DC)
-{
- SSL_CTX *ctx;
- SSL_METHOD *method;
-
- if (sslsock->ssl_handle) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "SSL/TLS already set-up for this stream");
- return -1;
- }
-
- /* need to do slightly different things, based on client/server method,
- * so lets remember which method was selected */
-
- switch (cparam->inputs.method) {
- case STREAM_CRYPTO_METHOD_SSLv23_CLIENT:
- sslsock->is_client = 1;
- method = SSLv23_client_method();
- break;
- case STREAM_CRYPTO_METHOD_SSLv2_CLIENT:
- sslsock->is_client = 1;
- method = SSLv2_client_method();
- break;
- case STREAM_CRYPTO_METHOD_SSLv3_CLIENT:
- sslsock->is_client = 1;
- method = SSLv3_client_method();
- break;
- case STREAM_CRYPTO_METHOD_TLS_CLIENT:
- sslsock->is_client = 1;
- method = TLSv1_client_method();
- break;
- case STREAM_CRYPTO_METHOD_SSLv23_SERVER:
- sslsock->is_client = 0;
- method = SSLv23_server_method();
- break;
- case STREAM_CRYPTO_METHOD_SSLv3_SERVER:
- sslsock->is_client = 0;
- method = SSLv3_server_method();
- break;
- case STREAM_CRYPTO_METHOD_SSLv2_SERVER:
- sslsock->is_client = 0;
- method = SSLv2_server_method();
- break;
- case STREAM_CRYPTO_METHOD_TLS_SERVER:
- sslsock->is_client = 0;
- method = TLSv1_server_method();
- break;
- default:
- return -1;
-
- }
-
- ctx = SSL_CTX_new(method);
- if (ctx == NULL) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "failed to create an SSL context");
- return -1;
- }
-
- SSL_CTX_set_options(ctx, SSL_OP_ALL);
-
- sslsock->ssl_handle = php_SSL_new_from_context(ctx, stream TSRMLS_CC);
- if (sslsock->ssl_handle == NULL) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "failed to create an SSL handle");
- SSL_CTX_free(ctx);
- return -1;
- }
-
- if (!SSL_set_fd(sslsock->ssl_handle, sslsock->s.socket)) {
- handle_ssl_error(stream, 0 TSRMLS_CC);
- }
-
- if (cparam->inputs.session) {
- if (cparam->inputs.session->ops != &php_openssl_socket_ops) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "supplied session stream must be an SSL enabled stream");
- } else {
- SSL_copy_session_id(sslsock->ssl_handle, ((php_openssl_netstream_data_t*)cparam->inputs.session->abstract)->ssl_handle);
- }
- }
- return 0;
-}
-
-static inline int php_openssl_enable_crypto(php_stream *stream,
- php_openssl_netstream_data_t *sslsock,
- php_stream_xport_crypto_param *cparam
- TSRMLS_DC)
-{
- int n, retry = 1;
-
- if (cparam->inputs.activate && !sslsock->ssl_active) {
- if (sslsock->is_client) {
- SSL_set_connect_state(sslsock->ssl_handle);
- } else {
- SSL_set_accept_state(sslsock->ssl_handle);
- }
-
- do {
- if (sslsock->is_client) {
- n = SSL_connect(sslsock->ssl_handle);
- } else {
- n = SSL_accept(sslsock->ssl_handle);
- }
-
- if (n <= 0) {
- retry = handle_ssl_error(stream, n TSRMLS_CC);
- } else {
- break;
- }
- } while (retry);
-
- if (n == 1) {
- X509 *peer_cert;
-
- peer_cert = SSL_get_peer_certificate(sslsock->ssl_handle);
-
- if (FAILURE == php_openssl_apply_verification_policy(sslsock->ssl_handle, peer_cert, stream TSRMLS_CC)) {
- SSL_shutdown(sslsock->ssl_handle);
- } else {
- sslsock->ssl_active = 1;
- }
-
- X509_free(peer_cert);
- }
-
- return n;
-
- } else if (!cparam->inputs.activate && sslsock->ssl_active) {
- /* deactivate - common for server/client */
- SSL_shutdown(sslsock->ssl_handle);
- sslsock->ssl_active = 0;
- }
- return -1;
-}
-
-static inline int php_openssl_tcp_sockop_accept(php_stream *stream, php_openssl_netstream_data_t *sock,
- php_stream_xport_param *xparam STREAMS_DC TSRMLS_DC)
-{
- int clisock;
-
- xparam->outputs.client = NULL;
-
- clisock = php_network_accept_incoming(sock->s.socket,
- xparam->want_textaddr ? &xparam->outputs.textaddr : NULL,
- xparam->want_textaddr ? &xparam->outputs.textaddrlen : NULL,
- xparam->want_addr ? &xparam->outputs.addr : NULL,
- xparam->want_addr ? &xparam->outputs.addrlen : NULL,
- xparam->inputs.timeout,
- xparam->want_errortext ? &xparam->outputs.error_text : NULL,
- &xparam->outputs.error_code
- TSRMLS_CC);
-
- if (clisock >= 0) {
- php_openssl_netstream_data_t *clisockdata;
-
- clisockdata = pemalloc(sizeof(*clisockdata), stream->is_persistent);
-
- if (clisockdata == NULL) {
- closesocket(clisock);
- /* technically a fatal error */
- } else {
- /* copy underlying tcp fields */
- memset(clisockdata, 0, sizeof(*clisockdata));
- memcpy(clisockdata, sock, sizeof(clisockdata->s));
-
- clisockdata->s.socket = clisock;
-
- xparam->outputs.client = php_stream_alloc_rel(stream->ops, clisockdata, NULL, "r+");
- if (xparam->outputs.client) {
- xparam->outputs.client->context = stream->context;
- }
- }
-
- if (xparam->outputs.client && sock->enable_on_connect) {
- /* apply crypto */
- switch (sock->method) {
- case STREAM_CRYPTO_METHOD_SSLv23_CLIENT:
- sock->method = STREAM_CRYPTO_METHOD_SSLv23_SERVER;
- break;
- case STREAM_CRYPTO_METHOD_SSLv2_CLIENT:
- sock->method = STREAM_CRYPTO_METHOD_SSLv2_SERVER;
- break;
- case STREAM_CRYPTO_METHOD_SSLv3_CLIENT:
- sock->method = STREAM_CRYPTO_METHOD_SSLv3_SERVER;
- break;
- case STREAM_CRYPTO_METHOD_TLS_CLIENT:
- sock->method = STREAM_CRYPTO_METHOD_TLS_SERVER;
- break;
- }
-
- clisockdata->method = sock->method;
-
- if (php_stream_xport_crypto_setup(xparam->outputs.client, clisockdata->method,
- NULL TSRMLS_CC) < 0 || php_stream_xport_crypto_enable(
- xparam->outputs.client, 1 TSRMLS_CC) < 0) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Failed to enable crypto");
-
- php_stream_close(xparam->outputs.client);
- xparam->outputs.client = NULL;
- xparam->outputs.returncode = -1;
- }
- }
- }
-
- return xparam->outputs.client == NULL ? -1 : 0;
-}
-static int php_openssl_sockop_set_option(php_stream *stream, int option, int value, void *ptrparam TSRMLS_DC)
-{
- php_openssl_netstream_data_t *sslsock = (php_openssl_netstream_data_t*)stream->abstract;
- php_stream_xport_crypto_param *cparam = (php_stream_xport_crypto_param *)ptrparam;
- php_stream_xport_param *xparam = (php_stream_xport_param *)ptrparam;
-
- switch (option) {
- case PHP_STREAM_OPTION_CHECK_LIVENESS:
- {
- fd_set rfds;
- struct timeval tv;
- char buf;
- int alive = 1;
-
- if (sslsock->s.timeout.tv_sec == -1) {
- tv.tv_sec = FG(default_socket_timeout);
- } else {
- tv = sslsock->s.timeout;
- }
-
- if (sslsock->s.socket == -1) {
- alive = 0;
- } else {
- FD_ZERO(&rfds);
- FD_SET(sslsock->s.socket, &rfds);
-
- if (select(sslsock->s.socket + 1, &rfds, NULL, NULL, &tv) > 0 && FD_ISSET(sslsock->s.socket, &rfds)) {
- if (sslsock->ssl_active) {
- int n;
-
- do {
- n = SSL_peek(sslsock->ssl_handle, &buf, sizeof(buf));
- if (n <= 0) {
- int err = SSL_get_error(sslsock->ssl_handle, n);
-
- if (err == SSL_ERROR_SYSCALL) {
- alive = php_socket_errno() == EAGAIN;
- break;
- }
-
- if (err == SSL_ERROR_WANT_READ || err == SSL_ERROR_WANT_WRITE) {
- /* re-negotiate */
- continue;
- }
-
- /* any other problem is a fatal error */
- alive = 0;
- }
- /* either peek succeeded or there was an error; we
- * have set the alive flag appropriately */
- break;
- } while (1);
- } else if (0 == recv(sslsock->s.socket, &buf, sizeof(buf), MSG_PEEK) && php_socket_errno() != EAGAIN) {
- alive = 0;
- }
- }
- }
- return alive ? PHP_STREAM_OPTION_RETURN_OK : PHP_STREAM_OPTION_RETURN_ERR;
- }
-
- case PHP_STREAM_OPTION_CRYPTO_API:
-
- switch(cparam->op) {
-
- case STREAM_XPORT_CRYPTO_OP_SETUP:
- cparam->outputs.returncode = php_openssl_setup_crypto(stream, sslsock, cparam TSRMLS_CC);
- return PHP_STREAM_OPTION_RETURN_OK;
- break;
- case STREAM_XPORT_CRYPTO_OP_ENABLE:
- cparam->outputs.returncode = php_openssl_enable_crypto(stream, sslsock, cparam TSRMLS_CC);
- return PHP_STREAM_OPTION_RETURN_OK;
- break;
- default:
- /* fall through */
- break;
- }
-
- break;
-
- case PHP_STREAM_OPTION_XPORT_API:
- switch(xparam->op) {
-
- case STREAM_XPORT_OP_CONNECT:
- case STREAM_XPORT_OP_CONNECT_ASYNC:
- /* TODO: Async connects need to check the enable_on_connect option when
- * we notice that the connect has actually been established */
- php_stream_socket_ops.set_option(stream, option, value, ptrparam TSRMLS_CC);
-
- if (xparam->outputs.returncode == 0 && sslsock->enable_on_connect) {
- if (php_stream_xport_crypto_setup(stream, sslsock->method, NULL TSRMLS_CC) < 0 ||
- php_stream_xport_crypto_enable(stream, 1 TSRMLS_CC) < 0) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Failed to enable crypto");
- xparam->outputs.returncode = -1;
- }
- }
- return PHP_STREAM_OPTION_RETURN_OK;
-
- case STREAM_XPORT_OP_ACCEPT:
- /* we need to copy the additional fields that the underlying tcp transport
- * doesn't know about */
- xparam->outputs.returncode = php_openssl_tcp_sockop_accept(stream, sslsock, xparam STREAMS_CC TSRMLS_CC);
-
-
- return PHP_STREAM_OPTION_RETURN_OK;
-
- default:
- /* fall through */
- break;
- }
- }
-
- return php_stream_socket_ops.set_option(stream, option, value, ptrparam TSRMLS_CC);
-}
-
-static int php_openssl_sockop_cast(php_stream *stream, int castas, void **ret TSRMLS_DC)
-{
- php_openssl_netstream_data_t *sslsock = (php_openssl_netstream_data_t*)stream->abstract;
-
- switch(castas) {
- case PHP_STREAM_AS_STDIO:
- if (sslsock->ssl_active) {
- return FAILURE;
- }
- if (ret) {
- *ret = fdopen(sslsock->s.socket, stream->mode);
- if (*ret) {
- return SUCCESS;
- }
- return FAILURE;
- }
- return SUCCESS;
-
- case PHP_STREAM_AS_FD_FOR_SELECT:
- if (ret) {
- *ret = (void*)sslsock->s.socket;
- }
- return SUCCESS;
-
- case PHP_STREAM_AS_FD:
- case PHP_STREAM_AS_SOCKETD:
- if (sslsock->ssl_active) {
- return FAILURE;
- }
- if (ret) {
- *ret = (void*)sslsock->s.socket;
- }
- return SUCCESS;
- default:
- return FAILURE;
- }
-}
-
-php_stream_ops php_openssl_socket_ops = {
- php_openssl_sockop_write, php_openssl_sockop_read,
- php_openssl_sockop_close, php_openssl_sockop_flush,
- "tcp_socket/ssl",
- NULL, /* seek */
- php_openssl_sockop_cast,
- php_openssl_sockop_stat,
- php_openssl_sockop_set_option,
-};
-
-
-php_stream *php_openssl_ssl_socket_factory(const char *proto, long protolen,
- char *resourcename, long resourcenamelen,
- const char *persistent_id, int options, int flags,
- struct timeval *timeout,
- php_stream_context *context STREAMS_DC TSRMLS_DC)
-{
- php_stream *stream = NULL;
- php_openssl_netstream_data_t *sslsock = NULL;
-
- sslsock = pemalloc(sizeof(php_openssl_netstream_data_t), persistent_id ? 1 : 0);
- memset(sslsock, 0, sizeof(*sslsock));
-
- sslsock->s.is_blocked = 1;
- sslsock->s.timeout.tv_sec = FG(default_socket_timeout);
- sslsock->s.timeout.tv_usec = 0;
-
- /* we don't know the socket until we have determined if we are binding or
- * connecting */
- sslsock->s.socket = -1;
-
- stream = php_stream_alloc_rel(&php_openssl_socket_ops, sslsock, persistent_id, "r+");
-
- if (stream == NULL) {
- pefree(sslsock, persistent_id ? 1 : 0);
- return NULL;
- }
-
- if (strncmp(proto, "ssl", protolen) == 0) {
- sslsock->enable_on_connect = 1;
- sslsock->method = STREAM_CRYPTO_METHOD_SSLv23_CLIENT;
- } else if (strncmp(proto, "tls", protolen) == 0) {
- sslsock->enable_on_connect = 1;
- sslsock->method = STREAM_CRYPTO_METHOD_TLS_CLIENT;
- }
-
- return stream;
-}
-
-
-
-/*
- * 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/oracle/CREDITS b/ext/oracle/CREDITS
deleted file mode 100644
index f06045fdcb..0000000000
--- a/ext/oracle/CREDITS
+++ /dev/null
@@ -1,2 +0,0 @@
-Oracle
-Stig Bakken, Mitch Golden, Rasmus Lerdorf, Andreas Karajannis, Thies C. Arntzen
diff --git a/ext/oracle/config.m4 b/ext/oracle/config.m4
deleted file mode 100644
index fdd5276ccd..0000000000
--- a/ext/oracle/config.m4
+++ /dev/null
@@ -1,159 +0,0 @@
-dnl
-dnl $Id$
-dnl
-
-AC_DEFUN(AC_ORACLE_VERSION,[
- AC_MSG_CHECKING([Oracle version])
- if test -s "$ORACLE_DIR/orainst/unix.rgs"; then
- ORACLE_VERSION=`grep '"ocommon"' $ORACLE_DIR/orainst/unix.rgs | sed 's/[ ][ ]*/:/g' | cut -d: -f 6 | cut -c 2-4`
- test -z "$ORACLE_VERSION" && ORACLE_VERSION=7.3
- elif test -f $ORACLE_DIR/lib/libclntsh.$SHLIB_SUFFIX_NAME.9.0; then
- ORACLE_VERSION=9.0
- elif test -f $ORACLE_DIR/lib/libclntsh.$SHLIB_SUFFIX_NAME.8.0; then
- ORACLE_VERSION=8.1
- elif test -f $ORACLE_DIR/lib/libclntsh.$SHLIB_SUFFIX_NAME.1.0; then
- ORACLE_VERSION=8.0
- elif test -f $ORACLE_DIR/lib/libclntsh.a; then
- if test -f $ORACLE_DIR/lib/libcore4.a; then
- ORACLE_VERSION=8.0
- else
- ORACLE_VERSION=8.1
- fi
- else
- AC_MSG_ERROR(Oracle needed libraries not found)
- fi
- AC_MSG_RESULT($ORACLE_VERSION)
-])
-
-PHP_ARG_WITH(oracle, for Oracle-ORACLE support,
-[ --with-oracle[=DIR] Include Oracle-oci7 support. Default DIR is ORACLE_HOME.])
-
-if test "$PHP_ORACLE" != "no"; then
- AC_MSG_CHECKING([Oracle Install-Dir])
- if test "$PHP_ORACLE" = "yes"; then
- ORACLE_DIR=$ORACLE_HOME
- else
- ORACLE_DIR=$PHP_ORACLE
- fi
- AC_MSG_RESULT($ORACLE_DIR)
-
- if test -d "$ORACLE_DIR/rdbms/public"; then
- PHP_ADD_INCLUDE($ORACLE_DIR/rdbms/public)
- fi
- if test -d "$ORACLE_DIR/rdbms/demo"; then
- PHP_ADD_INCLUDE($ORACLE_DIR/rdbms/demo)
- fi
- if test -d "$ORACLE_DIR/network/public"; then
- PHP_ADD_INCLUDE($ORACLE_DIR/network/public)
- fi
- if test -d "$ORACLE_DIR/plsql/public"; then
- PHP_ADD_INCLUDE($ORACLE_DIR/plsql/public)
- fi
-
- if test -f "$ORACLE_DIR/lib/sysliblist"; then
- PHP_EVAL_LIBLINE(`cat $ORACLE_DIR/lib/sysliblist`, ORACLE_SHARED_LIBADD)
- elif test -f "$ORACLE_DIR/rdbms/lib/sysliblist"; then
- PHP_EVAL_LIBLINE(`cat $ORACLE_DIR/rdbms/lib/sysliblist`, ORACLE_SHARED_LIBADD)
- fi
-
- AC_ORACLE_VERSION($ORACLE_DIR)
- case $ORACLE_VERSION in
- 7.0|7.1)
- if test -f $ORACLE_DIR/lib/liboracle.$SHLIB_SUFFIX_NAME; then
- PHP_ADD_LIBRARY_WITH_PATH(oracle, $ORACLE_DIR/lib, ORACLE_SHARED_LIBADD)
- else
- PHP_ADD_LIBRARY_WITH_PATH(core, $ORACLE_DIR/lib, ORACLE_SHARED_LIBADD)
- PHP_ADD_LIBRARY_WITH_PATH(cv6, $ORACLE_DIR/lib, ORACLE_SHARED_LIBADD)
- PHP_ADD_LIBRARY_WITH_PATH(nlsrtl, $ORACLE_DIR/lib, ORACLE_SHARED_LIBADD)
- PHP_ADD_LIBRARY_WITH_PATH(core, $ORACLE_DIR/lib, ORACLE_SHARED_LIBADD)
- PHP_ADD_LIBRARY_WITH_PATH(cv6, $ORACLE_DIR/lib, ORACLE_SHARED_LIBADD)
- PHP_ADD_LIBRARY_WITH_PATH(nlsrtl, $ORACLE_DIR/lib, ORACLE_SHARED_LIBADD)
- PHP_ADD_LIBRARY_WITH_PATH(sqlnet, $ORACLE_DIR/lib, ORACLE_SHARED_LIBADD)
- PHP_ADD_LIBRARY_WITH_PATH(ora, $ORACLE_DIR/lib, ORACLE_SHARED_LIBADD)
- PHP_ADD_LIBRARY_WITH_PATH(sqlnet, $ORACLE_DIR/lib, ORACLE_SHARED_LIBADD)
- if test "$ext_shared" = "yes"; then
- ORACLE_SHARED_LIBADD="$ORACLE_DIR/lib/osntab.o $ORACLE_SHARED_LIBADD";
- else
- LIBS="$ORACLE_DIR/lib/osntab.o $LIBS";
- fi
- PHP_ADD_LIBRARY_WITH_PATH(ocic, $ORACLE_DIR/lib, ORACLE_SHARED_LIBADD)
- if test "`uname -s 2>/dev/null`" = "AIX"; then
- if test "$ext_shared" = "yes"; then
- ORACLE_SHARED_LIBADD="$ORACLE_SHARED_LIBADD -bI:$ORACLE_DIR/lib/mili.exp"
- else
- LIBS="$LIBS -bI:$ORACLE_DIR/lib/mili.exp"
- fi
- fi
- fi
- ;;
-
- 7.2)
- if test -f $ORACLE_DIR/lib/libclntsh.$SHLIB_SUFFIX_NAME; then
- PHP_ADD_LIBRARY_WITH_PATH(clntsh, $ORACLE_DIR/lib, ORACLE_SHARED_LIBADD)
- else
- PHP_ADD_LIBRARY_WITH_PATH(core3, $ORACLE_DIR/lib, ORACLE_SHARED_LIBADD)
- PHP_ADD_LIBRARY_WITH_PATH(nlsrtl3, $ORACLE_DIR/lib, ORACLE_SHARED_LIBADD)
- PHP_ADD_LIBRARY_WITH_PATH(c3v6, $ORACLE_DIR/lib, ORACLE_SHARED_LIBADD)
- PHP_ADD_LIBRARY_WITH_PATH(nlsrtl3, $ORACLE_DIR/lib, ORACLE_SHARED_LIBADD)
- PHP_ADD_LIBRARY_WITH_PATH(ora, $ORACLE_DIR/lib, ORACLE_SHARED_LIBADD)
- PHP_ADD_LIBRARY_WITH_PATH(sqlnet, $ORACLE_DIR/lib, ORACLE_SHARED_LIBADD)
- PHP_ADD_LIBRARY_WITH_PATH(ora, $ORACLE_DIR/lib, ORACLE_SHARED_LIBADD)
- PHP_ADD_LIBRARY_WITH_PATH(sqlnet, $ORACLE_DIR/lib, ORACLE_SHARED_LIBADD)
- if test "$ext_shared" = "yes"; then
- ORACLE_SHARED_LIBADD="$ORACLE_DIR/lib/osntab.o $ORACLE_SHARED_LIBADD";
- else
- LIBS="$ORACLE_DIR/lib/osntab.o $LIBS";
- fi
- PHP_ADD_LIBRARY_WITH_PATH(ocic, $ORACLE_DIR/lib, ORACLE_SHARED_LIBADD)
- fi
- ;;
-
- 7.3)
- if test -f $ORACLE_DIR/lib/libclntsh.$SHLIB_SUFFIX_NAME; then
- PHP_ADD_LIBRARY_WITH_PATH(clntsh, $ORACLE_DIR/lib, ORACLE_SHARED_LIBADD)
- else
- PHP_ADD_LIBRARY_WITH_PATH(core3, $ORACLE_DIR/lib, ORACLE_SHARED_LIBADD)
- PHP_ADD_LIBRARY_WITH_PATH(nlsrtl3, $ORACLE_DIR/lib, ORACLE_SHARED_LIBADD)
- PHP_ADD_LIBRARY_WITH_PATH(core3, $ORACLE_DIR/lib, ORACLE_SHARED_LIBADD)
- PHP_ADD_LIBRARY_WITH_PATH(c3v6, $ORACLE_DIR/lib, ORACLE_SHARED_LIBADD)
- PHP_ADD_LIBRARY_WITH_PATH(nlsrtl3, $ORACLE_DIR/lib, ORACLE_SHARED_LIBADD)
- PHP_ADD_LIBRARY_WITH_PATH(epc, $ORACLE_DIR/lib, ORACLE_SHARED_LIBADD)
- PHP_ADD_LIBRARY_WITH_PATH(generic, $ORACLE_DIR/lib, ORACLE_SHARED_LIBADD)
- PHP_ADD_LIBRARY_WITH_PATH(common, $ORACLE_DIR/lib, ORACLE_SHARED_LIBADD)
- PHP_ADD_LIBRARY_WITH_PATH(client, $ORACLE_DIR/lib, ORACLE_SHARED_LIBADD)
- PHP_ADD_LIBRARY_WITH_PATH(sqlnet, $ORACLE_DIR/lib, ORACLE_SHARED_LIBADD)
- PHP_ADD_LIBRARY_WITH_PATH(ncr, $ORACLE_DIR/lib, ORACLE_SHARED_LIBADD)
- PHP_ADD_LIBRARY_WITH_PATH(sqlnet, $ORACLE_DIR/lib, ORACLE_SHARED_LIBADD)
- PHP_ADD_LIBRARY_WITH_PATH(generic, $ORACLE_DIR/lib, ORACLE_SHARED_LIBADD)
- PHP_ADD_LIBRARY_WITH_PATH(common, $ORACLE_DIR/lib, ORACLE_SHARED_LIBADD)
- PHP_ADD_LIBRARY_WITH_PATH(client, $ORACLE_DIR/lib, ORACLE_SHARED_LIBADD)
- PHP_ADD_LIBRARY_WITH_PATH(sqlnet, $ORACLE_DIR/lib, ORACLE_SHARED_LIBADD)
- PHP_ADD_LIBRARY_WITH_PATH(ncr, $ORACLE_DIR/lib, ORACLE_SHARED_LIBADD)
- PHP_ADD_LIBRARY_WITH_PATH(sqlnet, $ORACLE_DIR/lib, ORACLE_SHARED_LIBADD)
- PHP_ADD_LIBRARY_WITH_PATH(client, $ORACLE_DIR/lib, ORACLE_SHARED_LIBADD)
- fi
- ;;
-
- 8.0)
- PHP_ADD_LIBRARY_WITH_PATH(nlsrtl3, "", ORACLE_SHARED_LIBADD)
- PHP_ADD_LIBRARY_WITH_PATH(core4, "", ORACLE_SHARED_LIBADD)
- PHP_ADD_LIBRARY_WITH_PATH(psa, "", ORACLE_SHARED_LIBADD)
- PHP_ADD_LIBRARY_WITH_PATH(clntsh, $ORACLE_DIR/lib, ORACLE_SHARED_LIBADD)
- ;;
-
- 8.1|9.0)
- PHP_ADD_LIBRARY(clntsh, 1, ORACLE_SHARED_LIBADD)
- PHP_ADD_LIBPATH($ORACLE_DIR/lib, ORACLE_SHARED_LIBADD)
- ;;
- *)
- AC_MSG_ERROR(Unsupported Oracle version!)
- ;;
- esac
-
- PHP_NEW_EXTENSION(oracle, oracle.c, $ext_shared)
- AC_DEFINE(HAVE_ORACLE,1,[ ])
-
- PHP_SUBST_OLD(ORACLE_SHARED_LIBADD)
- PHP_SUBST_OLD(ORACLE_DIR)
- PHP_SUBST_OLD(ORACLE_VERSION)
-fi
diff --git a/ext/oracle/config.w32 b/ext/oracle/config.w32
deleted file mode 100644
index 05ccd5493d..0000000000
--- a/ext/oracle/config.w32
+++ /dev/null
@@ -1,18 +0,0 @@
-// $Id$
-// vim:ft=javascript
-
-ARG_WITH("oracle", "ORACLE support", "no");
-
-if (PHP_ORACLE != "no") {
-
- if (CHECK_HEADER_ADD_INCLUDE("winoci.h", "CFLAGS_ORACLE", PHP_PHP_BUILD + "\\oci7*\\include;" + PHP_ORACLE) &&
- CHECK_LIB("ociw32.lib", "oracle", PHP_ORACLE, "oci7")) {
- EXTENSION('oracle', 'oracle.c');
-
- AC_DEFINE('HAVE_ORACLE', 1);
-
- } else {
- WARNING("oracle not enabled; libraries and headers not found");
- }
-}
-
diff --git a/ext/oracle/oracle.c b/ext/oracle/oracle.c
deleted file mode 100644
index f59b541f31..0000000000
--- a/ext/oracle/oracle.c
+++ /dev/null
@@ -1,1770 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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. |
- +----------------------------------------------------------------------+
- | Authors: Stig Sæther Bakken <ssb@php.net> |
- | Mitch Golden <mgolden@interport.net> |
- | Rasmus Lerdorf <rasmus@php.net> |
- | Andreas Karajannis <Andreas.Karajannis@gmd.de> |
- | Thies C. Arntzen <thies@thieso.net> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-/* comment out the next line if you're on Oracle 7.x and don't have the olog
- call. */
-
-#define HAS_OLOG 1
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "php.h"
-
-#include "zend_globals.h"
-
-#if HAVE_ORACLE
-
-#include "php_oracle.h"
-#define HASH_DTOR (void (*)(void *))
-
-#include "ext/standard/info.h"
-
-
-#ifndef min
-#define min(a, b) ((a) > (b) ? (b) : (a))
-#endif
-
-#ifdef PHP_WIN32
-#define PHP_ORA_API __declspec(dllexport)
-#else
-#define PHP_ORA_API
-#endif
-
-#ifdef ZTS
-int ora_globals_id;
-#else
-PHP_ORA_API php_ora_globals ora_globals;
-#endif
-
-#define DB_SIZE 65536
-
-#define ORA_FETCHINTO_ASSOC (1<<0)
-#define ORA_FETCHINTO_NULLS (1<<1)
-
-static oraCursor *ora_get_cursor(HashTable *, pval ** TSRMLS_DC);
-static char *ora_error(Cda_Def *);
-static int ora_describe_define(oraCursor *);
-static void _close_oraconn(zend_rsrc_list_entry *rsrc TSRMLS_DC);
-static int _close_oracur(oraCursor *cur TSRMLS_DC);
-static int _ora_ping(oraConnection *conn);
-int ora_set_param_values(oraCursor *cursor, int isout TSRMLS_DC);
-
-void ora_do_logon(INTERNAL_FUNCTION_PARAMETERS, int persistent);
-
-static int le_conn, le_pconn, le_cursor;
-
-/* {{{ prototypes
- */
-PHP_FUNCTION(ora_bind);
-PHP_FUNCTION(ora_close);
-PHP_FUNCTION(ora_commit);
-PHP_FUNCTION(ora_commitoff);
-PHP_FUNCTION(ora_commiton);
-PHP_FUNCTION(ora_do);
-PHP_FUNCTION(ora_error);
-PHP_FUNCTION(ora_errorcode);
-PHP_FUNCTION(ora_exec);
-PHP_FUNCTION(ora_fetch);
-PHP_FUNCTION(ora_fetch_into);
-PHP_FUNCTION(ora_columntype);
-PHP_FUNCTION(ora_columnname);
-PHP_FUNCTION(ora_columnsize);
-PHP_FUNCTION(ora_getcolumn);
-PHP_FUNCTION(ora_numcols);
-PHP_FUNCTION(ora_numrows);
-PHP_FUNCTION(ora_logoff);
-PHP_FUNCTION(ora_logon);
-PHP_FUNCTION(ora_plogon);
-PHP_FUNCTION(ora_open);
-PHP_FUNCTION(ora_parse);
-PHP_FUNCTION(ora_rollback);
-
-PHP_MINIT_FUNCTION(oracle);
-PHP_RINIT_FUNCTION(oracle);
-PHP_MSHUTDOWN_FUNCTION(oracle);
-PHP_RSHUTDOWN_FUNCTION(oracle);
-PHP_MINFO_FUNCTION(oracle);
-/* }}} */
-
-/* {{{ oracle_functions[]
- */
-function_entry oracle_functions[] = {
- PHP_FE(ora_bind, NULL)
- PHP_FE(ora_close, NULL)
- PHP_FE(ora_commit, NULL)
- PHP_FE(ora_commitoff, NULL)
- PHP_FE(ora_commiton, NULL)
- PHP_FE(ora_do, NULL)
- PHP_FE(ora_error, NULL)
- PHP_FE(ora_errorcode, NULL)
- PHP_FE(ora_exec, NULL)
- PHP_FE(ora_fetch, NULL)
- PHP_FE(ora_fetch_into, second_arg_force_ref)
- PHP_FE(ora_columntype, NULL)
- PHP_FE(ora_columnname, NULL)
- PHP_FE(ora_columnsize, NULL)
- PHP_FE(ora_getcolumn, NULL)
- PHP_FE(ora_numcols, NULL)
- PHP_FE(ora_numrows, NULL)
- PHP_FE(ora_logoff, NULL)
- PHP_FE(ora_logon, NULL)
- PHP_FE(ora_plogon, NULL)
- PHP_FE(ora_open, NULL)
- PHP_FE(ora_parse, NULL)
- PHP_FE(ora_rollback, NULL)
- {NULL, NULL, NULL}
-};
-/* }}} */
-
-/* {{{ oracle_module_entry
- */
-zend_module_entry oracle_module_entry = {
- STANDARD_MODULE_HEADER,
- "oracle",
- oracle_functions,
- PHP_MINIT(oracle), /* extension-wide startup function */
- PHP_MSHUTDOWN(oracle), /* extension-wide shutdown function */
- PHP_RINIT(oracle), /* per-request startup function */
- PHP_RSHUTDOWN(oracle), /* per-request shutdown function */
- PHP_MINFO(oracle),
- NO_VERSION_YET,
- STANDARD_MODULE_PROPERTIES
-};
-/* }}} */
-
-/* {{{ ora_func_tab[]
- */
-static const text *ora_func_tab[] =
-{(text *) "unused",
-/* 1, 2 */ (text *) "unused", (text *) "OSQL",
-/* 3, 4 */ (text *) "unused", (text *) "OEXEC/OEXN",
-/* 5, 6 */ (text *) "unused", (text *) "OBIND",
-/* 7, 8 */ (text *) "unused", (text *) "ODEFIN",
-/* 9, 10 */ (text *) "unused", (text *) "ODSRBN",
-/* 11, 12 */ (text *) "unused", (text *) "OFETCH/OFEN",
-/* 13, 14 */ (text *) "unused", (text *) "OOPEN",
-/* 15, 16 */ (text *) "unused", (text *) "OCLOSE",
-/* 17, 18 */ (text *) "unused", (text *) "unused",
-/* 19, 20 */ (text *) "unused", (text *) "unused",
-/* 21, 22 */ (text *) "unused", (text *) "ODSC",
-/* 23, 24 */ (text *) "unused", (text *) "ONAME",
-/* 25, 26 */ (text *) "unused", (text *) "OSQL3",
-/* 27, 28 */ (text *) "unused", (text *) "OBNDRV",
-/* 29, 30 */ (text *) "unused", (text *) "OBNDRN",
-/* 31, 32 */ (text *) "unused", (text *) "unused",
-/* 33, 34 */ (text *) "unused", (text *) "OOPT",
-/* 35, 36 */ (text *) "unused", (text *) "unused",
-/* 37, 38 */ (text *) "unused", (text *) "unused",
-/* 39, 40 */ (text *) "unused", (text *) "unused",
-/* 41, 42 */ (text *) "unused", (text *) "unused",
-/* 43, 44 */ (text *) "unused", (text *) "unused",
-/* 45, 46 */ (text *) "unused", (text *) "unused",
-/* 47, 48 */ (text *) "unused", (text *) "unused",
-/* 49, 50 */ (text *) "unused", (text *) "unused",
-/* 51, 52 */ (text *) "unused", (text *) "OCAN",
-/* 53, 54 */ (text *) "unused", (text *) "OPARSE",
-/* 55, 56 */ (text *) "unused", (text *) "OEXFET",
-/* 57, 58 */ (text *) "unused", (text *) "OFLNG",
-/* 59, 60 */ (text *) "unused", (text *) "ODESCR",
-/* 61, 62 */ (text *) "unused", (text *) "OBNDRA"
-};
-/* }}} */
-
-#ifdef COMPILE_DL_ORACLE
-ZEND_GET_MODULE(oracle)
-# ifdef PHP_WIN32
-# include "zend_arg_defs.c"
-# endif
-#endif
-
-/* {{{ _close_oraconn
- */
-static void _close_oraconn(zend_rsrc_list_entry *rsrc TSRMLS_DC)
-{
- oraConnection *conn = (oraConnection *)rsrc->ptr;
-
- conn->open = 0;
-
- ologof(&conn->lda);
- ORA(num_links)--;
-
- zend_hash_del(ORA(conns),(void*)&conn,sizeof(void*));
-
- if (conn->persistent) {
- ORA(num_persistent)--;
- free(conn);
- } else {
- efree(conn);
- }
-}
-/* }}} */
-
-/* {{{ pval_ora_param_destructor
- */
-static void
-pval_ora_param_destructor(oraParam *param)
-{
- if (param->progv) {
- efree(param->progv);
- }
-}
-/* }}} */
-
-/* {{{ _close_oracur
- */
-static int _close_oracur(oraCursor *cur TSRMLS_DC)
-{
- int i;
-
- if (cur){
- if (cur->query){
- efree(cur->query);
- }
- if (cur->params){
- zend_hash_destroy(cur->params);
- efree(cur->params);
- cur->params = NULL;
- }
- if (cur->columns){
- for(i = 0; i < cur->ncols; i++){
- if (cur->columns[i].buf)
- efree(cur->columns[i].buf);
- }
- efree(cur->columns);
- cur->columns = NULL;
- }
-
- if (cur->open){
- oraConnection *db_conn;
-
- if (zend_hash_find(ORA(conns),(void*)&(cur->conn_ptr),sizeof(void*),(void **)&db_conn) == SUCCESS) {
- oclose(&cur->cda);
- }
- }
-
- efree(cur);
- }
-
- return 1;
-}
-/* }}} */
-
-/* {{{ php_close_ora_cursor
- */
-static void php_close_ora_cursor(zend_rsrc_list_entry *rsrc TSRMLS_DC)
-{
- oraCursor *cur = (oraCursor *)rsrc->ptr;
-
- _close_oracur(cur TSRMLS_CC);
-}
-/* }}} */
-
-/* {{{ php_ora_init_globals
- */
-static void php_ora_init_globals(php_ora_globals *ora_globals_p TSRMLS_DC)
-{
- if (cfg_get_long("oracle.allow_persistent",
- &ORA(allow_persistent))
- == FAILURE) {
- ORA(allow_persistent) = -1;
- }
- if (cfg_get_long("oracle.max_persistent",
- &ORA(max_persistent))
- == FAILURE) {
- ORA(max_persistent) = -1;
- }
- if (cfg_get_long("oracle.max_links",
- &ORA(max_links))
- == FAILURE) {
- ORA(max_links) = -1;
- }
-
- ORA(num_persistent) = 0;
-
- ORA(conns) = malloc(sizeof(HashTable));
- zend_hash_init(ORA(conns), 13, NULL, NULL, 1);
-
- memset((void*) &ORA(db_err_conn),0,sizeof(ORA(db_err_conn)));
-}
-/* }}} */
-
-/* {{{ PHP_MINIT_FUNCTION
- */
-PHP_MINIT_FUNCTION(oracle)
-{
-#ifdef ZTS
- ts_allocate_id(&ora_globals_id, sizeof(php_ora_globals), (ts_allocate_ctor) php_ora_init_globals, NULL);
-#else
- php_ora_init_globals(&ora_globals TSRMLS_CC);
-#endif
-
- le_cursor = zend_register_list_destructors_ex(php_close_ora_cursor, NULL, "oracle cursor", module_number);
- le_conn = zend_register_list_destructors_ex(_close_oraconn, NULL, "oracle link", module_number);
- le_pconn = zend_register_list_destructors_ex(NULL, _close_oraconn, "oracle link persistent", module_number);
-
- REGISTER_LONG_CONSTANT("ORA_BIND_INOUT", 0, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("ORA_BIND_IN", 1, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("ORA_BIND_OUT", 2, CONST_CS | CONST_PERSISTENT);
-
- REGISTER_LONG_CONSTANT("ORA_FETCHINTO_ASSOC",ORA_FETCHINTO_ASSOC, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("ORA_FETCHINTO_NULLS",ORA_FETCHINTO_NULLS, CONST_CS | CONST_PERSISTENT);
-
-#ifdef ZTS
- opinit(OCI_EV_TSF);
-#endif
-
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ PHP_RINIT_FUNCTION
- */
-PHP_RINIT_FUNCTION(oracle)
-{
- ORA(num_links) =
- ORA(num_persistent);
- /*
- ORA(defaultlrl) = 0;
- ORA(defaultbinmode) = 0;
- ORA(defaultconn) = 0;
- */
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ PHP_MSHUTDOWN_FUNCTION
- */
-PHP_MSHUTDOWN_FUNCTION(oracle)
-{
- zend_hash_destroy(ORA(conns));
- free(ORA(conns));
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ PHP_RSHUTDOWN_FUNCTION
- */
-PHP_RSHUTDOWN_FUNCTION(oracle)
-{
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ _ora_ping
- */
-static int _ora_ping(oraConnection *conn)
-{
- Cda_Def cda;
-
- if (oopen(&cda, &conn->lda, (text *) 0, -1, -1, (text *) 0, -1)) {
- return 0;
- }
-
- if (oparse(&cda, "select sysdate from dual", (sb4) - 1, 0, VERSION_7)) {
- oclose(&cda);
- return 0;
- }
-
- oclose(&cda);
- return 1;
-
-}
-/* }}} */
-
-/*
- ** PHP functions
-*/
-
-/* {{{ proto resource ora_logon(string user, string password)
- Open an Oracle connection */
-PHP_FUNCTION(ora_logon)
-{
- ora_do_logon(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0);
-}
-/* }}} */
-
-/* {{{ proto resource ora_plogon(string user, string password)
- Open a persistent Oracle connection */
-PHP_FUNCTION(ora_plogon)
-{
- ora_do_logon(INTERNAL_FUNCTION_PARAM_PASSTHRU, 1);
-}
-/* }}} */
-
-/* {{{ ora_do_logon
- */
-void ora_do_logon(INTERNAL_FUNCTION_PARAMETERS, int persistent)
-{
- char *user,*passwd;
- pval **arg1, **arg2;
- char *hashed_details;
- int hashed_details_length;
- oraConnection *db_conn;
-
- if (zend_get_parameters_ex(2, &arg1, &arg2) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_string_ex(arg1);
- convert_to_string_ex(arg2);
-
- user = Z_STRVAL_PP(arg1);
- passwd = Z_STRVAL_PP(arg2);
-
- hashed_details_length = sizeof("oracle__")-1+strlen(user)+strlen(passwd);
- hashed_details = (char *) emalloc(hashed_details_length+1);
- sprintf(hashed_details,"oracle_%s_%s",user,passwd);
-
- if (!ORA(allow_persistent)) {
- persistent=0;
- }
- if (persistent) {
- list_entry *le;
-
- /* try to find if we already have this link in our persistent list */
- if (zend_hash_find(&EG(persistent_list), hashed_details, hashed_details_length+1, (void **) &le)==FAILURE) { /* we don't */
- list_entry new_le;
-
- if (ORA(max_links)!=-1 && ORA(num_links)>=ORA(max_links)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Oracle: Too many open links (%d)",ORA(num_links));
- efree(hashed_details);
- RETURN_FALSE;
- }
- if (ORA(max_persistent)!=-1 && ORA(num_persistent)>=ORA(max_persistent)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Oracle: Too many open persistent links (%d)",ORA(num_persistent));
- efree(hashed_details);
- RETURN_FALSE;
- }
- /* create the link */
- db_conn = (oraConnection *)malloc(sizeof(oraConnection));
- memset((void *) db_conn,0,sizeof(oraConnection));
- db_conn->persistent = 1;
-
- if (
-#if HAS_OLOG
- olog(&db_conn->lda, db_conn->hda, user,strlen(user), passwd, strlen(passwd), 0, -1, OCI_LM_DEF)
-#else
- orlon(&db_conn->lda, db_conn->hda, user,strlen(user), passwd, strlen(passwd), 0)
-#endif
- ) {
- ORA(db_err_conn) = *db_conn;
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to connect to ORACLE (%s)",ora_error(&db_conn->lda));
-
- if (persistent) {
- free(db_conn);
- } else {
- efree(db_conn);
- }
-
- efree(hashed_details);
- RETURN_FALSE;
- }
-
- /* hash it up */
- Z_TYPE(new_le) = le_pconn;
- new_le.ptr = db_conn;
- if (zend_hash_update(&EG(persistent_list), hashed_details, hashed_details_length+1, (void *) &new_le, sizeof(list_entry), NULL)==FAILURE) {
- free(db_conn);
- efree(hashed_details);
- RETURN_FALSE;
- }
- ORA(num_persistent)++;
- ORA(num_links)++;
- zend_hash_add(ORA(conns),(void*)&db_conn,sizeof(void*),(void*)&db_conn,sizeof(void*),NULL);
- } else { /* we do */
- if (Z_TYPE_P(le) != le_pconn) {
- RETURN_FALSE;
- }
-
- db_conn = (oraConnection *) le->ptr;
-
- /* ensure that the link did not die */
-
- if (!_ora_ping(db_conn)) {
- if (
-#if HAS_OLOG
- olog(&db_conn->lda, db_conn->hda, user,strlen(user), passwd, strlen(passwd), 0, -1, OCI_LM_DEF)
-#else
- orlon(&db_conn->lda, db_conn->hda, user,strlen(user), passwd, strlen(passwd), 0)
-#endif
- ) {
- ORA(db_err_conn) = *db_conn;
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Oracle: Link to server lost, unable to reconnect",ora_error(&db_conn->lda));
- zend_hash_del(&EG(persistent_list), hashed_details, hashed_details_length+1);
- efree(hashed_details);
- RETURN_FALSE;
- }
- }
- }
- ZEND_REGISTER_RESOURCE(return_value, db_conn, le_pconn);
- } else { /* non persistent */
- list_entry *index_ptr,new_index_ptr;
-
- /* first we check the hash for the hashed_details key. if it exists,
- * it should point us to the right offset where the actual Oracle link sits.
- * if it doesn't, open a new Oracle link, add it to the resource list,
- * and add a pointer to it with hashed_details as the key.
- */
- if (zend_hash_find(&EG(regular_list),hashed_details,hashed_details_length+1,(void **) &index_ptr)==SUCCESS) {
- int type,link;
- void *ptr;
-
- if (Z_TYPE_P(index_ptr) != le_index_ptr) {
- RETURN_FALSE;
- }
- link = (int) index_ptr->ptr;
- ptr = zend_list_find(link,&type); /* check if the link is still there */
- if (ptr && (type==le_conn || type==le_pconn)) {
- zend_list_addref(link);
- Z_LVAL_P(return_value) = link;
- Z_TYPE_P(return_value) = IS_RESOURCE;
- efree(hashed_details);
- return;
- } else {
- zend_hash_del(&EG(regular_list),hashed_details,hashed_details_length+1);
- }
- }
- if (ORA(max_links)!=-1 && ORA(num_links)>=ORA(max_links)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Oracle: Too many open links (%d)",ORA(num_links));
- efree(hashed_details);
- RETURN_FALSE;
- }
-
- db_conn = (oraConnection *) emalloc(sizeof(oraConnection));
- memset((void *) db_conn,0,sizeof(oraConnection));
- db_conn->persistent = 0;
-
- if (
-#if HAS_OLOG
- olog(&db_conn->lda, db_conn->hda, user,strlen(user), passwd, strlen(passwd), 0, -1, OCI_LM_DEF)
-#else
- orlon(&db_conn->lda, db_conn->hda, user,strlen(user), passwd, strlen(passwd), 0)
-#endif
- ) {
- ORA(db_err_conn) = *db_conn;
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Oracle: Connection Failed: %s\n",ora_error(&db_conn->lda));
- efree(hashed_details);
- efree(db_conn);
- RETURN_FALSE;
- }
-
- /* add it to the list */
- ZEND_REGISTER_RESOURCE(return_value, db_conn, le_conn);
-
- /* add it to the hash */
- new_index_ptr.ptr = (void *) Z_LVAL_P(return_value);
- Z_TYPE(new_index_ptr) = le_index_ptr;
- if (zend_hash_update(&EG(regular_list),hashed_details,hashed_details_length+1,(void *) &new_index_ptr, sizeof(list_entry), NULL)==FAILURE) {
- efree(hashed_details);
- RETURN_FALSE;
- }
- zend_hash_add(ORA(conns),(void*)&db_conn,sizeof(void*),(void*)&db_conn,sizeof(void*),NULL);
- ORA(num_links)++;
- }
-
- efree(hashed_details);
-}
-/* }}} */
-
-/* {{{ proto bool ora_logoff(resource connection)
- Close an Oracle connection */
-PHP_FUNCTION(ora_logoff)
-{ /* conn_index */
- oraConnection *conn;
- pval **arg;
-
- if (zend_get_parameters_ex(1, &arg) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- ZEND_FETCH_RESOURCE2(conn, oraConnection *, arg, -1, "Oracle-Connection", le_conn, le_pconn);
-
- zend_list_delete(Z_LVAL_PP(arg));
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto resource ora_open(resource connection)
- Open an Oracle cursor */
-PHP_FUNCTION(ora_open)
-{ /* conn_index */
- pval **arg;
- oraConnection *conn = NULL;
- oraCursor *cursor = NULL;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- ZEND_FETCH_RESOURCE2(conn, oraConnection *, arg, -1, "Oracle-Connection", le_conn, le_pconn);
-
- cursor = (oraCursor *)emalloc(sizeof(oraCursor));
- memset(cursor, 0, sizeof(oraCursor));
- if (oopen(&cursor->cda, &conn->lda, (text *) 0, -1, -1, (text *) 0, -1)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to open new cursor (%s)",
- ora_error(&cursor->cda));
- efree(cursor);
- RETURN_FALSE;
- }
- cursor->open = 1;
- cursor->conn_ptr = conn;
- ZEND_REGISTER_RESOURCE(return_value, cursor, le_cursor);
- cursor->conn_id = Z_LVAL_P(return_value);
-}
-
-/* }}} */
-
-/* {{{ proto bool ora_close(resource cursor)
- Close an Oracle cursor */
-PHP_FUNCTION(ora_close)
-{ /* conn_index */
- pval **arg;
- oraCursor *cursor;
-
- if (zend_get_parameters_ex(1, &arg) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- ZEND_FETCH_RESOURCE(cursor, oraCursor *, arg, -1, "Oracle-Cursor", le_cursor);
-
- zend_list_delete(Z_LVAL_PP(arg));
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto bool ora_commitoff(resource connection)
- Disable automatic commit */
-PHP_FUNCTION(ora_commitoff)
-{ /* conn_index */
- pval **arg;
- oraConnection *conn;
-
- if (zend_get_parameters_ex(1, &arg) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- ZEND_FETCH_RESOURCE2(conn, oraConnection *, arg, -1, "Oracle-Connection", le_conn, le_pconn);
-
- if (ocof(&conn->lda)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to turn off auto-commit (%s)",
- ora_error(&conn->lda));
- RETURN_FALSE;
- }
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto bool ora_commiton(resource connection)
- Enable automatic commit */
-PHP_FUNCTION(ora_commiton)
-{ /* conn_index */
- pval **arg;
- oraConnection *conn;
-
- if (zend_get_parameters_ex(1, &arg) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- ZEND_FETCH_RESOURCE2(conn, oraConnection *, arg, -1, "Oracle-Connection", le_conn, le_pconn);
-
- if (ocon(&conn->lda)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to turn on auto-commit (%s)",
- ora_error(&conn->lda));
- RETURN_FALSE;
- }
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto bool ora_commit(resource connection)
- Commit an Oracle transaction */
-PHP_FUNCTION(ora_commit)
-{ /* conn_index */
- pval **arg;
- oraConnection *conn;
-
- if (zend_get_parameters_ex(1, &arg) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- ZEND_FETCH_RESOURCE2(conn, oraConnection *, arg, -1, "Oracle-Connection", le_conn, le_pconn);
-
- if (ocom(&conn->lda)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to commit transaction (%s)",
- ora_error(&conn->lda));
- RETURN_FALSE;
- }
- RETVAL_TRUE;
-}
-/* }}} */
-
-/* {{{ proto bool ora_rollback(resource connection)
- Roll back an Oracle transaction */
-PHP_FUNCTION(ora_rollback)
-{ /* conn_index */
- pval **arg;
- oraConnection *conn;
-
- if (zend_get_parameters_ex(1, &arg) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- ZEND_FETCH_RESOURCE2(conn, oraConnection *, arg, -1, "Oracle-Connection", le_conn, le_pconn);
-
- if (orol(&conn->lda)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to roll back transaction (%s)",
- ora_error(&conn->lda));
- RETURN_FALSE;
- }
- RETVAL_TRUE;
-}
-/* }}} */
-
-/* {{{ proto bool ora_parse(resource cursor, string sql_statement [, int defer])
- Parse an Oracle SQL statement */
-PHP_FUNCTION(ora_parse)
-{
- pval **curs, **sql, **def;
- oraCursor *cursor;
- sword defer = 0;
- text *query;
-
- switch (ZEND_NUM_ARGS()) {
- case 3:
- zend_get_parameters_ex(3,&curs,&sql,&def);
- convert_to_long_ex(def);
- if (Z_LVAL_PP(def)) {
- defer = DEFER_PARSE;
- }
- break;
- case 2:
- zend_get_parameters_ex(2,&curs,&sql);
- break;
- default:
- WRONG_PARAM_COUNT;
- }
-
- convert_to_string_ex(sql);
- query = (text *) estrndup(Z_STRVAL_PP(sql),Z_STRLEN_PP(sql));
-
- if (query == NULL) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid query");
- RETURN_FALSE;
- }
-
- if (!(cursor = ora_get_cursor(&EG(regular_list),curs TSRMLS_CC))){
- efree(query);
- RETURN_FALSE;
- }
-
- if (cursor->query) {
- efree(cursor->query);
- }
-
- cursor->query = query;
- cursor->fetched = 0;
-
- if (cursor->params && cursor->nparams > 0){
- zend_hash_destroy(cursor->params);
- efree(cursor->params);
- cursor->params = NULL;
- cursor->nparams = 0;
- }
-
- if (oparse(&cursor->cda, query, (sb4) - 1, defer, VERSION_7)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Ora_Parse failed (%s)",ora_error(&cursor->cda));
- RETURN_FALSE;
- }
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto bool ora_bind(resource cursor, string php_variable_name, string sql_parameter_name, int length [, int type])
- Bind a PHP variable to an Oracle parameter */
-PHP_FUNCTION(ora_bind)
-{
- pval **curs, **pvar, **svar, **plen, **ptyp;
- int inout = 0;
- oraParam *newparam, *paramptr;
- oraCursor *cursor;
- char *paramname;
-
- switch (ZEND_NUM_ARGS()) {
- case 5:
- zend_get_parameters_ex(5,&curs,&pvar,&svar,&plen,&ptyp);
- convert_to_long_ex(ptyp);
- inout = Z_LVAL_PP(ptyp);
- break;
- case 4:
- zend_get_parameters_ex(4,&curs,&pvar,&svar,&plen);
- break;
- default:
- WRONG_PARAM_COUNT;
- }
-
- cursor = ora_get_cursor(&EG(regular_list), curs TSRMLS_CC);
- if (cursor == NULL) {
- RETURN_FALSE;
- }
-
- convert_to_string_ex(pvar);
- convert_to_string_ex(svar);
- convert_to_long_ex(plen);
-
- if (cursor->params == NULL) {
- ALLOC_HASHTABLE(cursor->params);
- if (!cursor->params ||
- zend_hash_init(cursor->params, 19, NULL,
- HASH_DTOR pval_ora_param_destructor, 0) == FAILURE) {
- php_error_docref(NULL TSRMLS_CC, E_ERROR, "Unable to initialize parameter list");
- RETURN_FALSE;
- }
- }
- newparam = (oraParam *)emalloc(sizeof(oraParam));
-
- if ((paramname = estrndup(Z_STRVAL_PP(pvar), Z_STRLEN_PP(pvar))) == NULL) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Out of memory for parametername");
- efree(newparam);
- RETURN_FALSE;
- }
-
- if (zend_hash_add(cursor->params, paramname, Z_STRLEN_PP(pvar) + 1,
- newparam, sizeof(oraParam), (void **)&paramptr) == FAILURE) {
- /* XXX zend_hash_destroy */
- efree(paramname);
- efree(newparam);
- php_error_docref(NULL TSRMLS_CC, E_ERROR, "Could not make parameter placeholder");
- RETURN_FALSE;
- }
-
- efree(newparam);
- efree(paramname);
-
- paramptr->progvl = Z_LVAL_PP(plen) + 1;
- paramptr->inout = inout;
-
- paramptr->progv = (text *)emalloc(paramptr->progvl);
-
-/* XXX Maximum for progvl */
- paramptr->alen = paramptr->progvl;
-
- if (obndra(&cursor->cda,
- Z_STRVAL_PP(svar),
- -1,
- (ub1 *)paramptr->progv,
- paramptr->progvl,
- SQLT_STR, /* ftype */
- -1, /* scale */
- 0/*&paramptr->ind*/, /* ind */
- &paramptr->alen, /* alen */
- 0 /*&paramptr->arcode*/,
- 0, /* maxsize */
- 0,
- 0,
- -1,
- -1)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Ora_Bind failed (%s)",
- ora_error(&cursor->cda));
- RETURN_FALSE;
- }
-
- cursor->nparams++;
- RETURN_TRUE;
-}
-/* }}} */
-
-/*
- XXX Make return values compatible with old module ?
- */
-/* {{{ proto bool ora_exec(resource cursor)
- Execute a parsed statement */
-PHP_FUNCTION(ora_exec)
-{ /* cursor_index */
- pval **arg;
- oraCursor *cursor = NULL;
-
- if (zend_get_parameters_ex(1, &arg) == FAILURE)
- WRONG_PARAM_COUNT;
-
- if ((cursor = ora_get_cursor(&EG(regular_list), arg TSRMLS_CC)) == NULL) {
- RETURN_FALSE;
- }
-
- if (cursor->cda.ft == FT_SELECT) {
- if (ora_describe_define(cursor) < 0) {
- /* error message is given by ora_describe_define() */
- RETURN_FALSE;
- }
- }
-
- if(cursor->nparams > 0){
- if(!ora_set_param_values(cursor, 0 TSRMLS_CC)){
- RETURN_FALSE;
- }
- }
-
- if (oexec(&cursor->cda)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Ora_Exec failed (%s)",
- ora_error(&cursor->cda));
- RETURN_FALSE;
- }
-
- if(cursor->nparams > 0){
- if(!ora_set_param_values(cursor, 1 TSRMLS_CC)){
- RETURN_FALSE;
- }
- }
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto int ora_numcols(resource cursor)
- Returns the numbers of columns in a result */
-PHP_FUNCTION(ora_numcols)
-{ /* cursor_index */
- pval **arg;
- oraCursor *cursor = NULL;
-
- if (zend_get_parameters_ex(1, &arg) == FAILURE)
- WRONG_PARAM_COUNT;
-
- if ((cursor = ora_get_cursor(&EG(regular_list), arg TSRMLS_CC)) == NULL) {
- RETURN_FALSE;
- }
-
- RETURN_LONG(cursor->ncols);
-}
-/* }}} */
-
-/* {{{ proto int ora_numrows(resource cursor)
- Returns the number of rows in a result */
-PHP_FUNCTION(ora_numrows)
-{ /* cursor_index */
- pval **arg;
- oraCursor *cursor = NULL;
-
- if(zend_get_parameters_ex(1, &arg) == FAILURE)
- WRONG_PARAM_COUNT;
-
- if((cursor = ora_get_cursor(&EG(regular_list), arg TSRMLS_CC)) == NULL) {
- RETURN_FALSE;
- }
-
- RETURN_LONG(cursor->cda.rpc);
-}
-/* }}} */
-
-/* prepares/executes/fetches 1st row if avail*/
-/* {{{ proto resource ora_do(resource connection, resource cursor)
- Parse and execute a statement and fetch first result row */
-PHP_FUNCTION(ora_do)
-{
- pval **con,**sql;
- oraConnection *conn = NULL;
- oraCursor *cursor = NULL;
- text *query;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &con,&sql) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- ZEND_FETCH_RESOURCE2(conn, oraConnection *, con, -1, "Oracle-Connection", le_conn, le_pconn);
-
- convert_to_string_ex(sql);
-
- cursor = (oraCursor *)emalloc(sizeof(oraCursor));
-
- memset(cursor, 0, sizeof(oraCursor));
-
- query = (text *) estrndup(Z_STRVAL_PP(sql),Z_STRLEN_PP(sql));
-
- if (query == NULL) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid query in Ora_Do");
- RETURN_FALSE;
- }
-
- cursor->query = query;
-
- if (oopen(&cursor->cda, &conn->lda, (text *) 0, -1, -1, (text *) 0, -1)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to open new cursor (%s)",
- ora_error(&cursor->cda));
- efree(cursor);
- RETURN_FALSE;
- }
- cursor->open = 1;
- cursor->conn_ptr = conn;
- cursor->conn_id = Z_LVAL_PP(con);
-
- /* Prepare stmt */
-
- if (oparse(&cursor->cda, query, (sb4) - 1, 1, VERSION_7)){
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Ora_Do failed (%s)",
- ora_error(&cursor->cda));
- _close_oracur(cursor TSRMLS_CC);
- RETURN_FALSE;
- }
-
- /* Execute stmt (and fetch 1st row for selects) */
- if (cursor->cda.ft == FT_SELECT) {
- if (ora_describe_define(cursor) < 0){
- /* error message is given by ora_describe_define() */
- _close_oracur(cursor TSRMLS_CC);
- RETURN_FALSE;
- }
- if (oexfet(&cursor->cda, 1, 0, 0)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Ora_Do failed (%s)",
- ora_error(&cursor->cda));
- _close_oracur(cursor TSRMLS_CC);
- RETURN_FALSE;
- }
- cursor->fetched = 1;
- } else {
- if (oexec(&cursor->cda)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Ora_Do failed (%s)",
- ora_error(&cursor->cda));
- _close_oracur(cursor TSRMLS_CC);
- RETURN_FALSE;
- }
- }
-
- ZEND_REGISTER_RESOURCE(return_value, cursor, le_cursor);
-}
-/* }}} */
-
-/* {{{ proto bool ora_fetch(resource cursor)
- Fetch a row of result data from a cursor */
-PHP_FUNCTION(ora_fetch)
-{ /* cursor_index */
- pval **arg;
- oraCursor *cursor;
-
- if (zend_get_parameters_ex(1, &arg) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- if ((cursor = ora_get_cursor(&EG(regular_list), arg TSRMLS_CC)) == NULL) {
- RETURN_FALSE;
- }
-
- if (cursor->ncols == 0){
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "No tuples available on this cursor");
- RETURN_FALSE;
- }
-
- /* Get data from Oracle */
- if (ofetch(&cursor->cda)) {
- if (cursor->cda.rc != NO_DATA_FOUND) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Ora_Fetch failed (%s)",
- ora_error(&cursor->cda));
- }
- RETURN_FALSE;
- }
- cursor->fetched++;
- RETVAL_TRUE;
-}
-/* }}} */
-
-/* {{{ proto int ora_fetch_into(resource cursor, array result [, int flags])
- Fetch a row into the specified result array */
-PHP_FUNCTION(ora_fetch_into)
-{
- pval **curs, **arr, **flg, *tmp;
- oraCursor *cursor;
- int i;
- int flags = 0;
-
- switch(ZEND_NUM_ARGS()){
- case 2:
- zend_get_parameters_ex(2, &curs, &arr);
- break;
-
- case 3:
- zend_get_parameters_ex(3, &curs, &arr, &flg);
- convert_to_long_ex(flg);
- flags = Z_LVAL_PP(flg);
- break;
-
- default:
- WRONG_PARAM_COUNT;
- break;
- }
-
- /* Find the cursor */
- if ((cursor = ora_get_cursor(&EG(regular_list), curs TSRMLS_CC)) == NULL) {
- RETURN_FALSE;
- }
-
- if (cursor->ncols == 0){
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "No tuples available on this cursor");
- RETURN_FALSE;
- }
-
- if (ofetch(&cursor->cda)) {
- if (cursor->cda.rc != NO_DATA_FOUND) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Ora_Fetch_Into failed (%s)",ora_error(&cursor->cda));
- }
- RETURN_FALSE;
- }
- cursor->fetched++;
-
- if (Z_TYPE_PP(arr) != IS_ARRAY){
- pval_destructor(*arr);
- array_init(*arr);
- }
- zend_hash_internal_pointer_reset(Z_ARRVAL_PP(arr));
-
- for (i = 0; i < cursor->ncols; i++) {
- if (cursor->columns[i].col_retcode == 1405) {
- if (!(flags&ORA_FETCHINTO_NULLS)){
- continue; /* don't add anything for NULL columns, unless the calles wants it */
- } else {
- MAKE_STD_ZVAL(tmp);
- ZVAL_NULL(tmp);
- }
- } else if (cursor->columns[i].col_retcode != 0 &&
- cursor->columns[i].col_retcode != 1406) {
- /* So error fetching column. The most common is 1405, a NULL */
- /* was retreived. 1406 is ASCII or string buffer data was */
- /* truncated. The converted data from the database did not fit */
- /* into the buffer. Since we allocated the buffer to be large */
- /* enough, this should not occur. Anyway, we probably want to */
- /* return what we did get, in that case */
- RETURN_FALSE;
- } else {
- MAKE_STD_ZVAL(tmp);
-
- Z_TYPE_P(tmp) = IS_STRING;
- Z_STRLEN_P(tmp) = 0;
-
- switch(cursor->columns[i].dbtype) {
- case SQLT_LNG:
- case SQLT_LBI:
- {
- ub4 ret_len;
- int offset = cursor->columns[i].col_retlen;
- sb2 result;
-
- if (cursor->columns[i].col_retcode == 1406) { /* truncation -> get the rest! */
- while (1) {
- cursor->columns[i].buf = erealloc(cursor->columns[i].buf,offset + DB_SIZE + 1);
-
- if (! cursor->columns[i].buf) {
- offset = 0;
- break;
- }
-
- result = oflng(&cursor->cda,
- (sword)(i + 1),
- cursor->columns[i].buf + offset,
- DB_SIZE,
- 1,
- &ret_len,
- offset);
- if (result) {
- break;
- }
-
- if (ret_len <= 0) {
- break;
- }
-
- offset += ret_len;
- }
- }
- if (cursor->columns[i].buf && offset) {
- Z_STRLEN_P(tmp) = offset;
- } else {
- Z_STRLEN_P(tmp) = 0;
- }
- }
- break;
- default:
- Z_STRLEN_P(tmp) = min(cursor->columns[i].col_retlen,
- cursor->columns[i].dsize);
- break;
- }
- Z_STRVAL_P(tmp) = estrndup(cursor->columns[i].buf,Z_STRLEN_P(tmp));
- }
-
- if (flags&ORA_FETCHINTO_ASSOC){
- zend_hash_update(Z_ARRVAL_PP(arr), cursor->columns[i].cbuf, cursor->columns[i].cbufl+1, (void *) &tmp, sizeof(pval*), NULL);
- } else {
- zend_hash_index_update(Z_ARRVAL_PP(arr), i, (void *) &tmp, sizeof(pval*), NULL);
- }
-
- }
-
- RETURN_LONG(cursor->ncols);
-}
-/* }}} */
-
-/* {{{ proto string ora_columnname(resource cursor, int column)
- Get the name of an Oracle result column */
-PHP_FUNCTION(ora_columnname)
-{ /* cursor_index, column_index */
- pval **curs, **col;
- oraCursor *cursor = NULL;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &curs, &col) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- if ((cursor = ora_get_cursor(&EG(regular_list), curs TSRMLS_CC)) == NULL) {
- RETURN_FALSE;
- }
-
- convert_to_long_ex(col);
-
- if (cursor->ncols == 0){
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "No tuples available at this cursor index");
- RETURN_FALSE;
- }
-
- if (Z_LVAL_PP(col) >= cursor->ncols){
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Column index larger than number of columns");
- RETURN_FALSE;
- }
-
- if (Z_LVAL_PP(col) < 0){
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Column numbering starts at 0");
- RETURN_FALSE;
- }
-
- RETURN_STRINGL(cursor->columns[Z_LVAL_PP(col)].cbuf,
- cursor->columns[Z_LVAL_PP(col)].cbufl,1);
-}
-/* }}} */
-
-/* {{{ proto string ora_columntype(resource cursor, int column)
- Get the type of an Oracle result column */
-PHP_FUNCTION(ora_columntype)
-{ /* cursor_index, column_index */
- pval **curs, **col;
- int colno;
- oraCursor *cursor = NULL;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &curs, &col) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- if ((cursor = ora_get_cursor(&EG(regular_list), curs TSRMLS_CC)) == NULL) {
- RETURN_FALSE;
- }
-
- convert_to_long_ex(col);
- colno = Z_LVAL_PP(col);
-
- if (cursor->ncols == 0){
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "No tuples available at this cursor index");
- RETURN_FALSE;
- }
-
- if (colno >= cursor->ncols){
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Column index larger than number of columns");
- RETURN_FALSE;
- }
-
- if (colno < 0){
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Column numbering starts at 0");
- RETURN_FALSE;
- }
-
- switch (cursor->columns[colno].dbtype) {
- case SQLT_CHR:
- RETURN_STRINGL("VARCHAR2", 8, 1);
- case SQLT_VCS:
- case SQLT_AVC:
- RETURN_STRINGL("VARCHAR", 7, 1);
- case SQLT_STR:
- case SQLT_AFC:
- RETURN_STRINGL("CHAR", 4, 1);
- case SQLT_NUM: case SQLT_INT:
- case SQLT_FLT: case SQLT_UIN:
- RETURN_STRINGL("NUMBER", 6, 1);
- case SQLT_LNG:
- RETURN_STRINGL("LONG", 4, 1);
- case SQLT_LBI:
- RETURN_STRINGL("LONG RAW", 8, 1);
- case SQLT_RID:
- RETURN_STRINGL("ROWID", 5, 1);
- case SQLT_DAT:
- RETURN_STRINGL("DATE", 4, 1);
-#ifdef SQLT_CUR
- case SQLT_CUR:
- RETURN_STRINGL("CURSOR", 6, 1);
-#endif
- default:
- {
- char numbuf[21];
- snprintf(numbuf, 20, "UNKNOWN(%d)", cursor->columns[colno].dbtype);
- numbuf[20] = '\0';
- RETVAL_STRING(numbuf,1);
- }
- }
-}
-/* }}} */
-
-/* {{{ proto int ora_columnsize(int cursor, int column)
- Return the size of the column */
-PHP_FUNCTION(ora_columnsize)
-{ /* cursor_index, column_index */
- pval **curs, **col;
- oraCursor *cursor = NULL;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &curs, &col) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- /* Find the cursor */
- if ((cursor = ora_get_cursor(&EG(regular_list), curs TSRMLS_CC)) == NULL) {
- RETURN_FALSE;
- }
-
- convert_to_long_ex(col);
-
- if (cursor->ncols == 0){
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "No tuples available at this cursor index");
- RETURN_FALSE;
- }
-
- if (Z_LVAL_PP(col) >= cursor->ncols){
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Column index larger than number of columns");
- RETURN_FALSE;
- }
-
- if (Z_LVAL_PP(col) < 0){
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Column numbering starts at 0");
- RETURN_FALSE;
- }
-
- RETURN_LONG(cursor->columns[Z_LVAL_PP(col)].dbsize);
-}
-/* }}} */
-
-/* {{{ proto mixed ora_getcolumn(resource cursor, int column)
- Get data from a fetched row */
-PHP_FUNCTION(ora_getcolumn)
-{ /* cursor_index, column_index */
- pval **curs,**col;
- int colno;
- oraCursor *cursor = NULL;
- oraColumn *column = NULL;
- int len;
- sb2 type;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &curs, &col) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- if ((cursor = ora_get_cursor(&EG(regular_list), curs TSRMLS_CC)) == NULL) {
- RETURN_FALSE;
- }
-
- if (cursor->ncols == 0){
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "No tuples available at this cursor index");
- RETURN_FALSE;
- }
-
- convert_to_long_ex(col);
- colno = Z_LVAL_PP(col);
-
- if (colno >= cursor->ncols){
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Column index larger than number of columns");
- RETURN_FALSE;
- }
-
- if (colno < 0){
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Column numbering starts at 0");
- RETURN_FALSE;
- }
-
- if (cursor->fetched == 0){
- if (ofetch(&cursor->cda)) {
- if (cursor->cda.rc != NO_DATA_FOUND) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Ora_Fetch failed (%s)",
- ora_error(&cursor->cda));
- }
- RETURN_FALSE;
- }
- cursor->fetched++;
- }
-
- column = &cursor->columns[colno];
-
- type = column->dbtype;
-
- if (column->col_retcode == 1405) {
- RETURN_NULL();
- }
-
- if (column->col_retcode != 0 && column->col_retcode != 1406) {
- /* So error fetching column. The most common is 1405, a NULL
- * was retreived. 1406 is ASCII or string buffer data was
- * truncated. The converted data from the database did not fit
- * into the buffer. Since we allocated the buffer to be large
- * enough, this should not occur. Anyway, we probably want to
- * return what we did get, in that case
- */
- RETURN_FALSE;
- } else {
- switch(type) {
- case SQLT_CHR:
- case SQLT_NUM:
- case SQLT_INT:
- case SQLT_FLT:
- case SQLT_STR:
- case SQLT_UIN:
- case SQLT_AFC:
- case SQLT_AVC:
- case SQLT_DAT:
- len = min(column->col_retlen, column->dsize);
- RETURN_STRINGL(column->buf,len,1);
-
- case SQLT_LNG:
- case SQLT_LBI:
- {
- ub4 ret_len;
- int offset = column->col_retlen;
- sb2 result;
-
- if (column->col_retcode == 1406) { /* truncation -> get the rest! */
- while (1) {
- column->buf = erealloc(column->buf,offset + DB_SIZE + 1);
-
- if (! column->buf) {
- offset = 0;
- break;
- }
-
- result = oflng(&cursor->cda,
- (sword)(colno + 1),
- column->buf + offset,
- DB_SIZE,
- 1,
- &ret_len,
- offset);
- if (result) {
- break;
- }
-
- if (ret_len <= 0) {
- break;
- }
-
- offset += ret_len;
- }
- }
- if (column->buf && offset) {
- RETURN_STRINGL(column->buf, offset, 1);
- } else {
- RETURN_FALSE;
- }
- }
- default:
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Ora_GetColumn found invalid type (%d)", type);
- RETURN_FALSE;
- }
- }
-}
-/* }}} */
-
-/* {{{ proto string ora_error(resource cursor_or_connection)
- Get an Oracle error message */
-PHP_FUNCTION(ora_error)
-{
- pval **arg;
- oraCursor *cursor;
- oraConnection *conn;
- void *res;
- int what;
- int argc = ZEND_NUM_ARGS();
-
- if (argc < 0 || argc >> 1 || zend_get_parameters_ex(argc, &arg) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- if (argc == 1) {
- res = zend_fetch_resource(arg TSRMLS_CC, -1,"Oracle-Connection/Cursor",&what,3,le_conn, le_pconn, le_cursor);
- ZEND_VERIFY_RESOURCE(res);
-
- if (what == le_cursor) {
- cursor = (oraCursor *) res;
- RETURN_STRING(ora_error(&cursor->cda),1);
- } else {
- conn = (oraConnection *) res;
- RETURN_STRING(ora_error(&conn->lda),1);
- }
- } else {
- RETURN_STRING(ora_error(&ORA(db_err_conn).lda),1);
- }
-}
-/* }}} */
-
-/* {{{ proto int ora_errorcode(resource cursor_or_connection)
- Get an Oracle error code */
-PHP_FUNCTION(ora_errorcode)
-{
- pval **arg;
- oraCursor *cursor;
- oraConnection *conn;
- void *res;
- int what;
- int argc = ZEND_NUM_ARGS();
-
- if (argc < 0 || argc >> 1 || zend_get_parameters_ex(argc, &arg) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- if (argc == 1) {
- res = zend_fetch_resource(arg TSRMLS_CC, -1,"Oracle-Connection/Cursor",&what,3,le_conn, le_pconn, le_cursor);
- ZEND_VERIFY_RESOURCE(res);
-
- if (what == le_cursor) {
- cursor = (oraCursor *) res;
- RETURN_LONG(cursor->cda.rc);
- } else {
- conn = (oraConnection *) res;
- RETURN_LONG(conn->lda.rc);
- }
- } else {
- RETURN_LONG(ORA(db_err_conn).lda.rc);
- }
-}
-/* }}} */
-
-/* {{{ PHP_MINFO_FUNCTION
- */
-PHP_MINFO_FUNCTION(oracle)
-{
- php_info_print_table_start();
- php_info_print_table_row(2, "Oracle Support", "enabled");
-#ifndef PHP_WIN32
- php_info_print_table_row(2, "Oracle Version", PHP_ORACLE_VERSION );
- php_info_print_table_row(2, "Compile-time ORACLE_HOME", PHP_ORACLE_DIR );
- php_info_print_table_row(2, "Libraries Used", PHP_ORACLE_SHARED_LIBADD );
-#endif
- php_info_print_table_end();
-}
-/* }}} */
-
-/*
-** Functions internal to this module.
-*/
-
-/* {{{ ora_get_cursor
- */
-static oraCursor *
-ora_get_cursor(HashTable *list, pval **ind TSRMLS_DC)
-{
- oraCursor *cursor;
- oraConnection *db_conn;
-
- cursor = (oraCursor *) zend_fetch_resource(ind TSRMLS_CC, -1, "Oracle-Cursor", NULL, 1, le_cursor);
- if (! cursor) {
- return NULL;
- }
-
- if (zend_hash_find(ORA(conns),(void*)&(cursor->conn_ptr),sizeof(void*),(void **)&db_conn) == FAILURE) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Connection already closed for cursor index %d", ind);
- return NULL;
- }
-
- return cursor;
-}
-/* }}} */
-
-/* {{{ ora_error
- */
-static char *
-ora_error(Cda_Def * cda)
-{
- sword n, l;
- static text errmsg[ 512 ];
-
- n = oerhms(cda, cda->rc, errmsg, 400);
-
- /* remove the last newline */
- l = strlen(errmsg);
- if (l < 400 && errmsg[l - 1] == '\n') {
- errmsg[l - 1] = '\0';
- l--;
- }
- if (cda->fc > 0) {
- strcat(errmsg, " -- while processing OCI function ");
- strncat(errmsg, ora_func_tab[cda->fc], 75); /* 512 - 400 - 36 */
- }
- return (char *) errmsg;
-}
-/* }}} */
-
-/* {{{ ora_describe_define
- */
-static sword
-ora_describe_define(oraCursor * cursor)
-{
- long col = 0;
- int i;
- sb2 type;
- sb4 dbsize;
- TSRMLS_FETCH();
-
- if (cursor == NULL) {
- return -1;
- }
-
- if (cursor->columns) {
- for(i = 0; i < cursor->ncols; i++){
- if (cursor->columns[i].buf)
- efree(cursor->columns[i].buf);
- }
- efree(cursor->columns);
- }
-
- cursor->ncols = 0;
-
- while(1){
- if (odescr(&cursor->cda, (sword) cursor->ncols + 1, &dbsize, (sb2 *)0, (sb1 *)0,
- (sb4 *)0, (sb4 *)0, (sb2 *)0, (sb2 *)0, (sb2 *)0)){
- if (cursor->cda.rc == VAR_NOT_IN_LIST) {
- break;
- } else {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", ora_error(&cursor->cda));
- cursor->ncols = 0;
- return -1;
- }
- }
- cursor->ncols++;
- }
-
- if (cursor->ncols > 0){
- cursor->columns = (oraColumn *) safe_emalloc(sizeof(oraColumn), cursor->ncols, 0);
- memset(cursor->columns,0,sizeof(oraColumn) * cursor->ncols);
- }
-
- for(col = 0; col < cursor->ncols; col++){
- cursor->columns[col].cbufl = ORANAMELEN;
-
- if (odescr(&cursor->cda, (sword)col + 1, &cursor->columns[col].dbsize,
- &cursor->columns[col].dbtype, &cursor->columns[col].cbuf[0],
- &cursor->columns[col].cbufl, &cursor->columns[col].dsize,
- &cursor->columns[col].prec, &cursor->columns[col].scale,
- &cursor->columns[col].nullok)) {
- if (cursor->cda.rc == VAR_NOT_IN_LIST) {
- break;
- } else {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", ora_error(&cursor->cda));
- return -1;
- }
- }
-
- cursor->columns[col].cbuf[cursor->columns[col].cbufl] = '\0';
-
- switch (cursor->columns[col].dbtype) {
- case SQLT_LBI:
- cursor->columns[col].dsize = DB_SIZE;
- type = SQLT_LBI;
- break;
- case SQLT_LNG:
- cursor->columns[col].dsize = DB_SIZE;
- default:
- type = SQLT_STR;
- break;
- }
-
- cursor->columns[col].buf = (ub1 *) emalloc(cursor->columns[col].dsize + 1);
-
- /* Define an output variable for the column */
- if (odefin(&cursor->cda, (sword)col + 1, cursor->columns[col].buf,
- cursor->columns[col].dsize + 1, type, -1, &cursor->columns[col].indp,
- (text *) 0, -1, -1, &cursor->columns[col].col_retlen,
- &cursor->columns[col].col_retcode)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", ora_error(&cursor->cda));
- return -1;
- }
- }
- return 1;
-}
-/* }}} */
-
-/* {{{ ora_set_param_values
- */
-int ora_set_param_values(oraCursor *cursor, int isout TSRMLS_DC)
-{
- char *paramname;
- oraParam *param;
- pval **pdata;
- int i, len, plen;
-
- zend_hash_internal_pointer_reset(cursor->params);
-
- if(zend_hash_num_elements(cursor->params) != cursor->nparams){
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Mismatch in number of parameters");
- return 0;
- }
-
- for(i = 0; i < cursor->nparams; i++, zend_hash_move_forward(cursor->params)){
- if(zend_hash_get_current_key(cursor->params, &paramname, NULL, 0) != HASH_KEY_IS_STRING){
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Can't get parameter name");
- return 0;
- }
-
- if(zend_hash_get_current_data(cursor->params, (void **)&param) == FAILURE){
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Can't get parameter data");
- return 0;
- }
-
- if(isout){
- SET_VAR_STRINGL(paramname, estrdup(param->progv), strlen(param->progv));
- continue;
- }
-
- /* doing the in-loop */
-
- if (zend_hash_find(&EG(symbol_table), paramname, strlen(paramname) + 1, (void **)&pdata) == FAILURE){
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Can't find variable for parameter");
- return 0;
- }
-
- convert_to_string(*pdata);
- plen = Z_STRLEN_PP(pdata);
-
- if (param->progvl <= plen){
- php_error_docref(NULL TSRMLS_CC, E_NOTICE, "Input value will be truncated");
- }
-
- len = min(param->progvl - 1, plen);
-
- strncpy(param->progv, Z_STRVAL_PP(pdata), len);
- param->progv[len] = '\0';
- }
-
- return 1;
-}
-/* }}} */
-
-#endif /* HAVE_ORACLE */
-
-/*
- * 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/oracle/oracle.dsp b/ext/oracle/oracle.dsp
deleted file mode 100644
index fbaa218ab2..0000000000
--- a/ext/oracle/oracle.dsp
+++ /dev/null
@@ -1,113 +0,0 @@
-# Microsoft Developer Studio Project File - Name="oracle" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=oracle - Win32 Release_TS
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "oracle.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "oracle.mak" CFG="oracle - Win32 Release_TS"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "oracle - Win32 Release_TS" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "oracle - Win32 Debug_TS" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "oracle - Win32 Release_TS"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release_TS"
-# PROP BASE Intermediate_Dir "Release_TS"
-# PROP BASE Ignore_Export_Lib 0
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release_TS"
-# PROP Intermediate_Dir "Release_TS"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MT /W3 /GX /O2 /I "..\.." /I "..\..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\..\TSRM" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "COMPILE_DL_ORACLE" /D ZTS=1 /YX /FD /c
-# ADD CPP /nologo /MD /W3 /GX /O2 /I "..\..\\" /I "..\..\main" /I "..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\TSRM" /I "..\..\..\php_build\oci73\include" /D ZEND_DEBUG=0 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D ZTS=1 /D "ZEND_WIN32" /D "PHP_WIN32" /D HAVE_ORACLE=1 /D COMPILE_DL_ORACLE=1 /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x406 /d "NDEBUG"
-# ADD RSC /l 0x406 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib php5ts.lib /nologo /dll /machine:I386
-# ADD LINK32 php5ts.lib ociw32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 /out:"..\..\Release_TS/php_oracle.dll" /libpath:"..\..\Release_TS" /libpath:"..\..\..\php_build\oci73\lib" /libpath:"..\..\Release_TS_Inline"
-
-!ELSEIF "$(CFG)" == "oracle - Win32 Debug_TS"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Debug_TS"
-# PROP BASE Intermediate_Dir "Debug_TS"
-# PROP BASE Ignore_Export_Lib 0
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Debug_TS"
-# PROP Intermediate_Dir "Debug_TS"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MT /W3 /GX /O2 /I "..\.." /I "..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\TSRM" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D ZTS=1 /YX /FD /c
-# ADD CPP /nologo /MDd /W3 /GX /O2 /I "..\..\\" /I "..\..\main" /I "..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\TSRM" /I "..\..\..\php_build\oci73\include" /D ZEND_DEBUG=1 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "COMPILE_DL_ORACLE" /D ZTS=1 /D "ZEND_WIN32" /D "PHP_WIN32" /D HAVE_ORACLE=1 /D COMPILE_DL_ORACLE=1 /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x406 /d "NDEBUG"
-# ADD RSC /l 0x406 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib php5ts-debug.lib /nologo /dll /machine:I386
-# ADD LINK32 php5ts_debug.lib ociw32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 /out:"..\..\Debug_TS/php_oracle.dll" /libpath:"..\..\Debug_TS" /libpath:"..\..\..\php_build\oci73\lib"
-
-!ENDIF
-
-# Begin Target
-
-# Name "oracle - Win32 Release_TS"
-# Name "oracle - Win32 Debug_TS"
-# Begin Group "Source Files"
-
-# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
-# Begin Source File
-
-SOURCE=.\oracle.c
-# End Source File
-# End Group
-# Begin Group "Header Files"
-
-# PROP Default_Filter "h;hpp;hxx;hm;inl"
-# Begin Source File
-
-SOURCE=.\php_oracle.h
-# End Source File
-# End Group
-# Begin Group "Resource Files"
-
-# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
-# End Group
-# End Target
-# End Project
diff --git a/ext/oracle/package.xml b/ext/oracle/package.xml
deleted file mode 100644
index 53e07e79cc..0000000000
--- a/ext/oracle/package.xml
+++ /dev/null
@@ -1,68 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1" ?>
-<!DOCTYPE package SYSTEM "../pear/package.dtd">
-<package>
- <name>oracle</name>
- <summary>Oracle functions</summary>
- <maintainers>
- <maintainer>
- <user>thies</user>
- <name>Thies C. Arntzen</name>
- <email>thies@php.net</email>
- <role>lead</role>
- </maintainer>
- <maintainer>
- <user>ssb</user>
- <name>Stig Bakken</name>
- <email>ssb@php.net</email>
- <role>developer</role>
- </maintainer>
- <maintainer>
- <user>rasmus</user>
- <name>Rasmus Lerdorf</name>
- <email>rasmus@php.net</email>
- <role>developer</role>
- </maintainer>
- <maintainer>
- <user>???</user>
- <name>Mitch Golden</name>
- <email>mgolden@interport.net</email>
- <role>developer</role>
- </maintainer>
- <maintainer>
- <user>???</user>
- <name>Andreas Karajannis</name>
- <email>Andreas.Karajannis@gmd.de</email>
- <role>developer</role>
- </maintainer>
- </maintainers>
- <description>
-This extension adds support for Oracle database server access.
-For Oracle 8 and above you should use the oci8 extension instead.
- </description>
- <license>PHP</license>
- <release>
- <state>beta</state>
- <version>5.0.0rc1</version>
- <date>2004-03-19</date>
- <notes>
-package.xml added to support intallation using pear installer
- </notes>
- <configureoptions>
- <configureoption name="with-oracle" default="autodetect" prompt="ORACLE_HOME directory?"/>
- </configureoptions>
- <filelist>
- <file role="doc" name="CREDITS"/>
- <file role="src" name="config.m4"/>
- <file role="src" name="config.w32"/>
- <file role="src" name="oracle.dsp"/>
- <file role="src" name="oracle.c"/>
- <file role="src" name="php_oracle.h"/>
- </filelist>
- <deps>
- <dep type="php" rel="ge" version="5" />
- </deps>
- </release>
-</package>
-<!--
-vim:et:ts=1:sw=1
--->
diff --git a/ext/oracle/php_oracle.h b/ext/oracle/php_oracle.h
deleted file mode 100644
index a761dff53b..0000000000
--- a/ext/oracle/php_oracle.h
+++ /dev/null
@@ -1,137 +0,0 @@
-/* $Id$ */
-
-/* synced with oracle.h,v 1.40 1999/06/01 08:11:04 thies Exp $ */
-
-#ifndef PHP_ORACLE_H
-#define PHP_ORACLE_H
-
-#if HAVE_ORACLE
-
-#if (defined(__osf__) && defined(__alpha))
-# ifndef A_OSF
-# define A_OSF
-# endif
-# ifndef OSF1
-# define OSF1
-# endif
-# ifndef _INTRINSICS
-# define _INTRINSICS
-# endif
-#endif /* osf alpha */
-
-#include "oratypes.h"
-#include "ocidfn.h"
-#include "ociapr.h"
-
-extern zend_module_entry oracle_module_entry;
-#define phpext_oracle_ptr &oracle_module_entry
-
-#ifdef ZTS
-#define ORA(v) TSRMG(ora_globals_id, php_ora_globals *, v)
-#else
-#define ORA(v) (ora_globals.v)
-#endif
-
-/* oparse flags */
-#define DEFER_PARSE 1
-#define NATIVE 1
-#define VERSION_7 2
-
-#define ORANUMWIDTH 38
-
-#if (defined(__osf__) && defined(__alpha)) || defined(CRAY) || defined(KSR)
-#define HDA_SIZE 512
-#else
-#define HDA_SIZE 256
-#endif
-
-#define ORAUIDLEN 32
-#define ORAPWLEN 32
-#define ORANAMELEN 32
-#define ORABUFLEN 2000
-
-/* Some Oracle error codes */
-#define VAR_NOT_IN_LIST 1007
-#define NO_DATA_FOUND 1403
-#define NULL_VALUE_RETURNED 1405
-
-/* Some SQL and ORA function codes */
-#define FT_INSERT 3
-#define FT_SELECT 4
-#define FT_UPDATE 5
-#define FT_DELETE 9
-
-#define FC_OOPEN 14
-
-typedef struct {
- int open;
- int persistent;
- Lda_Def lda;
- ub1 hda[HDA_SIZE];
-} oraConnection;
-
-typedef struct oraColumn {
- sb4 dbsize;
- sb2 dbtype;
- text cbuf[ORANAMELEN+1];
- sb4 cbufl;
- sb4 dsize;
- sb2 prec;
- sb2 scale;
- sb2 nullok;
- ub1 *buf;
- sb2 indp;
- ub2 col_retlen, col_retcode;
-} oraColumn;
-
-typedef struct oraParam {
- text *progv;
- sword progvl;
- sb2 inout;
- ub2 alen;
-} oraParam;
-
-typedef struct oraCursor {
- int open;
- Cda_Def cda;
- text *query;
- HashTable *params;
- int nparams;
- oraColumn *columns;
- int ncols;
- int fetched;
- oraConnection *conn_ptr;
- int conn_id;
-} oraCursor;
-
-typedef struct {
- char *defDB;
- char *defUser;
- char *defPW;
- long allow_persistent;
- long max_persistent;
- long max_links;
- long num_persistent;
- long num_links;
- HashTable *conns;
- oraConnection db_err_conn;
-} php_ora_globals;
-
-#else
-
-#define phpext_oracle_ptr NULL
-
-#endif /* HAVE_ORACLE */
-
-#endif /* PHP_ORACLE_H */
-
-/*
- * Local Variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- */
-
-
-
-
diff --git a/ext/ovrimos/CREDITS b/ext/ovrimos/CREDITS
deleted file mode 100644
index b8c4b75630..0000000000
--- a/ext/ovrimos/CREDITS
+++ /dev/null
@@ -1,2 +0,0 @@
-Ovrimos
-Nikos Mavroyanopoulos
diff --git a/ext/ovrimos/config.m4 b/ext/ovrimos/config.m4
deleted file mode 100644
index e22148ea12..0000000000
--- a/ext/ovrimos/config.m4
+++ /dev/null
@@ -1,26 +0,0 @@
-dnl
-dnl $Id$
-dnl
-
-PHP_ARG_WITH(ovrimos, for Ovrimos SQL Server support,
-[ --with-ovrimos[=DIR] Include Ovrimos SQL Server support. DIR is the
- Ovrimos libsqlcli install directory.])
-
-if test "$PHP_OVRIMOS" != "no"; then
- for i in $PHP_OVRIMOS /usr/local /usr; do
- test -f $i/include/sqlcli.h && OVRIMOS_DIR=$i && break
- done
-
- if test -z "$OVRIMOS_DIR"; then
- AC_MSG_ERROR(Please reinstall Ovrimos' libsqlcli - I cannot find sqlcli.h)
- fi
-
- PHP_ADD_INCLUDE($OVRIMOS_DIR/include)
- LDFLAGS="$LDFLAGS $ld_runpath_switch$OVRIMOS_DIR/lib -L$OVRIMOS_DIR/lib"
- AC_CHECK_LIB(sqlcli, main)
- PHP_ADD_LIBRARY_WITH_PATH(sqlcli, $OVRIMOS_DIR/lib, OVRIMOS_SHARED_LIBADD)
-
- PHP_NEW_EXTENSION(ovrimos, ovrimos.c, $ext_shared)
- PHP_SUBST(OVRIMOS_SHARED_LIBADD)
- AC_DEFINE(HAVE_LIBSQLCLI,1,[ ])
-fi
diff --git a/ext/ovrimos/ovrimos.c b/ext/ovrimos/ovrimos.c
deleted file mode 100644
index 0d193d89d4..0000000000
--- a/ext/ovrimos/ovrimos.c
+++ /dev/null
@@ -1,1291 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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. |
- +----------------------------------------------------------------------+
- | Authors: Dimitris Souflis, Nikos Mavroyanopoulos |
- | for Ovrimos S.A. |
- | |
- | Contact support@ovrimos.com for questions regarding this module |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#include "php.h"
-#include "php_globals.h"
-#include "zend_API.h"
-#include "ext/standard/php_standard.h"
-#include "ext/standard/info.h"
-
-#include <sqlcli.h> /* ovrimos header
- */
-
-#ifndef WIN32 /* stricmp is defined in sqlcli */
-# define stricmp strcasecmp
-#endif
-
-
-PHP_MINFO_FUNCTION(ovrimos)
-{
- php_printf("&quot;Ovrimos&quot; module<br />\n");
-}
-
-/* Main User Functions
- */
-
-/* ovrimos_connect() currently does not support secure (SSL/TLS) connections.
- * As an alternative you can use the unixODBC driver available at
- * http://www.ovrimos.com/download which supports SSL.
- * Contact support@ovrimos.com for more information.
- */
-
-/* 2001-07-27: ovrimos_close_all() function was removed in order
- * for this module to be reentrant.
- */
-
-
-/* structures introduced in order to support the old ovrimos-php-api with
- * the new multi-threaded library (old works with the old library).
- * This version is reentrant.
- *
- * The only limitation is that a connection ( as returned by ovrimos_connect())
- * may only be accessed by one thread (but this is the case in php now).
- */
-
-typedef struct {
- SQLS statement;
- int longreadlen;
- struct _CON_STATE* con_state;
-} STATEMENT;
-
-typedef struct _CON_STATE {
- SQLH connection;
- STATEMENT * statements;
- int nstatements;
-} CON_STATE;
-
-typedef STATEMENT* PSTATEMENT;
-typedef CON_STATE* PCON_STATE;
-
-static void column_to_string(SQLS stmt, int i, char *buffer, int *len, PSTATEMENT pstmt);
-
-/* {{{ proto int ovrimos_connect(string host, string db, string user, string password)
- Connect to an Ovrimos database */
-PHP_FUNCTION(ovrimos_connect)
-{
- pval *arg1, *arg2, *arg3, *arg4;
- PCON_STATE state;
- SQLH conn = 0;
-
- if (ARG_COUNT(ht) != 4
- || getParameters(ht, 4, &arg1, &arg2, &arg3, &arg4) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_string(arg1);
- convert_to_string(arg2);
- convert_to_string(arg3);
- convert_to_string(arg4);
-
- if (!sqlConnect
- (Z_STRVAL_P(arg1), Z_STRVAL_P(arg2), Z_STRVAL_P(arg3),
- Z_STRVAL_P(arg4), &conn, 0)) {
- RETURN_LONG(0);
- }
-
- state = ecalloc( 1, sizeof(CON_STATE));
-
- state->connection = conn;
- state->statements = NULL;
- state->nstatements = 0;
-
- RETURN_LONG( (long)state);
-}
-
-/* }}} */
-
-/* {{{ proto void ovrimos_close(int connection)
- Close a connection */
-PHP_FUNCTION(ovrimos_close)
-{
- pval *arg1;
- int i;
- PCON_STATE state;
-
- if (ARG_COUNT(ht) != 1 || getParameters(ht, 1, &arg1) == FAILURE
- || Z_TYPE_P(arg1) != IS_LONG) {
- WRONG_PARAM_COUNT;
- }
-
- state = (PCON_STATE) Z_LVAL_P(arg1);
-
- /* free all the statements associated with
- * the connection. (called results in php)
- */
-
- for (i=0;i < state->nstatements;i++) {
- if ( state->statements[i].statement!=NULL) {
- sqlFreeStmt( state->statements[i].statement);
- }
- }
- if (state->statements!=NULL)
- efree( state->statements);
-
- /* close the SQL_Handle
- */
- sqlDisconnect( state->connection);
-
- efree( state);
-
- return;
-}
-
-/* }}} */
-
-
-/* {{{ proto bool ovrimos_longreadlen(int result_id, int length)
- Handle LONG columns */
-PHP_FUNCTION(ovrimos_longreadlen)
-{
- pval *arg1, *arg2;
- PSTATEMENT stmt;
-
- if (getParameters(ht, 2, &arg1, &arg2) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long(arg1);
- convert_to_long(arg2);
-
- stmt = (PSTATEMENT) Z_LVAL_P(arg1);
-
- stmt->longreadlen = Z_LVAL_P(arg2);
- RETURN_TRUE;
-}
-
-/* }}} */
-
-#define DEFAULT_LONGREADLEN 0
-
-/* These two functions are quite expensive. Some optimization may be
- * done in a later version.
- */
-static int local_sqlAllocStmt( PCON_STATE state, SQLH conn, SQLS *stmt, PSTATEMENT* pstmt) {
-int index, ret;
-
- ret = sqlAllocStmt( conn, stmt);
- if (!ret) return ret;
-
- state->nstatements++;
- state->statements = erealloc(state->statements, state->nstatements*sizeof( STATEMENT));
-
- index = state->nstatements - 1;
- state->statements[ index].statement = (*stmt);
- state->statements[ index].longreadlen = DEFAULT_LONGREADLEN;
- state->statements[ index].con_state = state;
-
- *pstmt = &state->statements[ index];
-
- return 1;
-}
-
-static int local_sqlFreeStmt( PSTATEMENT statement, SQLS stmt) {
-int j, i;
-PSTATEMENT new_statements;
-PCON_STATE state = statement->con_state;
-
- sqlFreeStmt( stmt);
-
- if (state->nstatements-1 == 0) {
- efree( state->statements);
- state->statements = NULL;
- state->nstatements--;
-
- return 1;
- }
-
- new_statements = safe_emalloc( (state->nstatements-1), sizeof(STATEMENT), 0);
-
- for (i=j=0;i<state->nstatements;i++) {
- if (state->statements->statement != stmt) {
- new_statements[j].statement = state->statements[i].statement;
- new_statements[j].longreadlen = state->statements[i].longreadlen;
- new_statements[j++].con_state = state->statements[i].con_state;
- }
- }
-
- efree( state->statements);
- state->statements = new_statements;
- state->nstatements--;
-
- return 1; /* true */
-}
-
-/* {{{ proto int ovrimos_prepare(int connection_id, string query)
- Prepares a statement for execution */
-PHP_FUNCTION(ovrimos_prepare)
-{
- pval *arg1, *arg2;
- SQLH conn;
- char *query;
- SQLS stmt;
- PCON_STATE state;
- PSTATEMENT pstmt;
-
- if (getParameters(ht, 2, &arg1, &arg2) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long(arg1);
- convert_to_string(arg2);
-
- state = (PCON_STATE) Z_LVAL_P(arg1);
-
- conn = (SQLH) state->connection;
- query = Z_STRVAL_P(arg2);
-
- if (!local_sqlAllocStmt( state, conn, &stmt, &pstmt)) {
- RETURN_FALSE;
- }
- if (!sqlPrepare(stmt, query)) {
- local_sqlFreeStmt( pstmt, stmt);
- RETURN_FALSE;
- }
- if (!sqlGetOutputColDescr(stmt)) {
- local_sqlFreeStmt( pstmt, stmt);
- RETURN_FALSE;
- }
- if (!sqlGetParamDescr(stmt)) {
- local_sqlFreeStmt( pstmt, stmt);
- RETURN_FALSE;
- }
-
- /* returns a result id which is actually a
- * pointer to a STATEMENT structure;
- */
- RETURN_LONG( (long)pstmt);
-}
-
-/* }}} */
-
-/*
- * Execute prepared SQL statement. Supports only input parameters.
- */
-/* {{{ proto bool ovrimos_execute(int result_id [, array parameters_array])
- Execute a prepared statement */
-PHP_FUNCTION(ovrimos_execute)
-{
- pval *arg1, *arg2;
- SQLS stmt;
- int numArgs;
- int icol, colnb;
- PSTATEMENT pstmt;
-
- numArgs = ARG_COUNT(ht);
-
- if (getParameters(ht, numArgs, &arg1, &arg2) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long(arg1);
- pstmt = (PSTATEMENT) Z_LVAL_P(arg1);
-
- stmt = pstmt->statement;
- colnb = sqlGetParamNb(stmt);
-
- if (colnb != 0) {
- pval **tmp;
- int arr_elem;
-
- if (Z_TYPE_P(arg2) != IS_ARRAY) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Not an array in call to ovrimos_execute()");
- RETURN_FALSE;
- }
- arr_elem = zend_hash_num_elements(Z_ARRVAL_P(arg2));
- if (arr_elem < colnb) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Not enough parameters in call to ovrimos_execute(): %d instead of %d", arr_elem, colnb);
- RETURN_FALSE;
- }
-
- zend_hash_internal_pointer_reset(Z_ARRVAL_P(arg2));
-
- for (icol = 0; icol < colnb; icol++) {
- int len;
- cvt_error err;
- bool ret;
- char *msg;
- char buffer[10240];
- sql_type to_type = sqlGetParamSQLType(stmt, icol);
- sql_type from_type;
-
- if (zend_hash_get_current_data
- (Z_ARRVAL_P(arg2), (void **) &tmp) == FAILURE) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Error getting parameter %d in call to ovrimos_execute()", icol);
- RETURN_FALSE;
- }
- convert_to_string(*tmp);
- if (Z_TYPE_PP(tmp) != IS_STRING) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Error converting parameter %d to string in call to ovrimos_execute()", icol);
- RETURN_FALSE;
- }
-
- /* PHP data to param type */
- Z_TYPE(from_type) = T_VARCHAR;
- from_type.u.length = Z_STRLEN_PP(tmp);
-
- *buffer = 0;
- memcpy(buffer + 1, Z_STRVAL_PP(tmp),
- from_type.u.length);
- buffer[from_type.u.length + 1] = 0;
-
- ret =
- type_convert(buffer, &from_type, &to_type, 0,
- &err);
- switch (err) {
- case cvt_trunc:
- msg = "Data truncated";
- break;
- case cvt_range:
- msg = "Numeric value out of range";
- break;
- case cvt_prec:
- msg = "Precision lost";
- break;
- case cvt_incomp:
- msg =
- "Restricted data type attribute violation";
- break;
- case cvt_no:
- msg = "Conversion failed";
- break;
- default:
- msg = "Unknown error";
- break;
- }
- if (!ret) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Error converting parameter %d: %s in call to ovrimos_execute()", icol, msg);
- RETURN_FALSE;
- }
-
- len = sql_type_size(to_type) - 1;
- if (!sqlPutParam(stmt, icol, buffer + 1, len)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Could send parameter %d (%d bytes) in call to ovrimos_execute()", icol, len);
- RETURN_FALSE;
- }
- }
- }
-
- if (!sqlExec(stmt)) {
- RETURN_FALSE;
- }
-
- RETURN_TRUE;
-}
-
-/* }}} */
-
-/* {{{ proto string ovrimos_cursor(int result_id)
- Get cursor name */
-PHP_FUNCTION(ovrimos_cursor)
-{
- char cname[126];
- pval *arg1;
- SQLS stmt;
- PSTATEMENT pstmt;
-
- if (getParameters(ht, 1, &arg1) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long(arg1);
-
- pstmt = (PSTATEMENT) Z_LVAL_P(arg1);
- stmt = pstmt->statement;
-
- if (!sqlGetCursorName(stmt, cname)) {
- RETURN_FALSE;
- }
- RETURN_STRING(cname, 1);
-}
-
-/* }}} */
-
-/* This function returns a result id. The result ID is
- * a pointer to a STATEMENT structure.
- * Every result is mapped to a statement.
- */
-
-/* {{{ proto int ovrimos_exec(int connection_id, string query)
- Prepare and execute an SQL statement */
-PHP_FUNCTION(ovrimos_exec)
-{
- pval *arg1, *arg2;
- SQLH conn;
- SQLS stmt;
- int numArgs;
- char *query;
- PSTATEMENT pstmt;
- PCON_STATE state;
-
- numArgs = ARG_COUNT(ht);
- if (getParameters(ht, 2, &arg1, &arg2) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long(arg1);
- convert_to_string(arg2);
-
- state = (PCON_STATE) Z_LVAL_P(arg1);
- conn = state->connection;
- query = Z_STRVAL_P(arg2);
-
- if (!local_sqlAllocStmt( state, conn, &stmt, &pstmt)) {
- RETURN_FALSE;
- }
-
- if (!sqlExecDirect(stmt, query)) {
- local_sqlFreeStmt( pstmt, stmt);
- RETURN_FALSE;
- }
- if (!sqlGetOutputColDescr(stmt)) {
- local_sqlFreeStmt( pstmt, stmt);
- RETURN_FALSE;
- }
- if (!sqlGetParamDescr(stmt)) {
- local_sqlFreeStmt( pstmt, stmt);
- RETURN_FALSE;
- }
-
- RETURN_LONG( (long)pstmt);
-}
-
-/* }}} */
-
-/* {{{ column_to_string
- */
-static void column_to_string(SQLS stmt, int i, char *buffer, int *len, PSTATEMENT pstmt)
-{
- const char *bf = sqlColValue(stmt, i, 0);
- int longreadlen;
-
- longreadlen = pstmt->longreadlen;
-
- switch (sqlGetOutputColType(stmt, i)) {
- case T_BIGINT:
- case T_UBIGINT:{
- switch (sqlGetOutputColType(stmt, i)) {
- case T_BIGINT:
- printsint64(Read(sint64, bf), buffer);
- break;
- case T_UBIGINT:
- printuint64(Read(uint64, bf), buffer);
- break;
- }
- *len = strlen(buffer);
- }
- break;
- case T_INTEGER:
- sprintf(buffer, "%11d", Read(sint32, bf));
- *len = strlen(buffer);
- break;
- case T_UINTEGER:
- sprintf(buffer, "%10u", Read(uint32, bf));
- *len = strlen(buffer);
- break;
- case T_SMALLINT:
- sprintf(buffer, "%6hd", Read(sint16, bf));
- *len = strlen(buffer);
- break;
- case T_USMALLINT:
- sprintf(buffer, "%5hu", Read(uint16, bf));
- *len = strlen(buffer);
- break;
- case T_TINYINT:
- sprintf(buffer, "%4hd", (sint16) Read(sint8, bf));
- *len = strlen(buffer);
- break;
- case T_UTINYINT:
- sprintf(buffer, "%3hu", (uint16) Read(uint8, bf));
- *len = strlen(buffer);
- break;
- case T_BIT:
- sprintf(buffer, "%s",
- (Read(uint8, bf) == 0) ? "off" : "on");
- *len = strlen(buffer);
- break;
- case T_REAL:
- sprintf(buffer, "%9.7g", (double) Read(float, bf));
- *len = strlen(buffer);
- break;
-
- case T_FLOAT:
- case T_DOUBLE:
- sprintf(buffer, "%19.17g", Read(double, bf));
- *len = strlen(buffer);
- break;
- case T_DECIMAL:
- case T_NUMERIC:{
- int prec = sqlGetOutputColPrecision(stmt, i);
- int scale = sqlGetOutputColScale(stmt, i);
- sprintf(buffer, "%*.*f", prec + 2, scale,
- Read(double, bf));
- *len = strlen(buffer);
- } break;
- case T_CHAR:
- case T_VARCHAR:
- strcpy(buffer, bf);
- *len = strlen(buffer);
- break;
- case T_UNI_CHAR:
- case T_UNI_VARCHAR:
- uni_strcpy((uni_char *) buffer, (uni_char *) bf);
- *len = uni_strlen((uni_char *) buffer);
- break;
- case T_BINARY:{
- int sz = sqlGetOutputColLength(stmt, i);
- memcpy(buffer, bf, sz);
- *len = sz;
- } break;
-
- case T_VARBINARY:{
- int sz = Read(uint16, bf);
- memcpy(buffer, bf + 2, sz);
- *len = sz;
- } break;
-
- case T_DATE:{
- if (!sql_date_to_str((uint32 *) bf, buffer)) {
- strcpy(buffer, "Error!");
- }
- }
- break;
-
- case T_TIME:{
- int prec = sqlGetOutputColPrecision(stmt, i);
- if (!sql_time_to_str
- ((uint32 *) bf, prec, 0, buffer)) {
- strcpy(buffer, "Error!");
- }
- }
- break;
-
- case T_TIMESTAMP:{
- int prec = sqlGetOutputColPrecision(stmt, i);
- if (!sql_timestamp_to_str
- ((uint32 *) bf, prec, 0, buffer)) {
- strcpy(buffer, "Error!");
- }
-
- }
- break;
-
- case T_LONGVARCHAR:
- case T_LONGVARBINARY:{
- if (longreadlen == 0) {
- *buffer = 0;
- *len = 0;
- } else
- if (!sqlColValueLong
- (stmt, i, 0, 0, longreadlen, buffer, len)) {
- strcpy(buffer, "Error!");
- }
- }
- break;
- }
-}
-/* }}} */
-
-/* {{{ proto bool ovrimos_fetch_into(int result_id, array result_array [, string how [, int rownumber]])
- Fetch one result row into an array
- how: 'Next' (default), 'Prev', 'First', 'Last', 'Absolute'
- */
-PHP_FUNCTION(ovrimos_fetch_into)
-{
- int numArgs;
- char *s_how;
- typedef enum { h_next = 0, h_prev, h_first, h_last, h_absolute
- } h_type;
- h_type how = h_next; /* default */
- sint32 rownum = 0;
- pval *arg_id, *arg_how = 0, *arg_row = 0, *arr, *tmp;
- SQLS stmt;
- PSTATEMENT pstmt;
- int icol, colnb;
- bool ret=0;
- numArgs = ARG_COUNT(ht);
-
- switch (numArgs) {
- case 2:
- if (getParameters(ht, 2, &arg_id, &arr) == FAILURE)
- WRONG_PARAM_COUNT;
- break;
- case 3:
- if (getParameters(ht, 3, &arg_id, &arr, &arg_how) ==
- FAILURE) WRONG_PARAM_COUNT;
- break;
- case 4:
- if (getParameters(ht, 4, &arg_id, &arr, &arg_how, &arg_row)
- == FAILURE)
- WRONG_PARAM_COUNT;
- break;
- default:
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long(arg_id);
- pstmt = (PSTATEMENT) Z_LVAL_P(arg_id);
-
- stmt = pstmt->statement;
-
- if (arg_how != 0) {
- if (Z_TYPE_P(arg_how) != IS_STRING) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Third argument not string in ovrimos_fetch_into()");
- RETURN_FALSE;
- }
- s_how = Z_STRVAL_P(arg_how);
- if (stricmp(s_how, "next") == 0) {
- how = h_next;
- } else if (stricmp(s_how, "prev") == 0) {
- how = h_prev;
- } else if (stricmp(s_how, "first") == 0) {
- how = h_first;
- } else if (stricmp(s_how, "last") == 0) {
- how = h_last;
- } else if (stricmp(s_how, "absolute") == 0) {
- how = h_absolute;
- } else {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Third argument not valid in ovrimos_fetch_into()");
- RETURN_FALSE;
- }
- if (arg_row == 0 && how == h_absolute) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Fourth argument is required for ABSOLUTE in ovrimos_fetch_into()");
- RETURN_FALSE;
- }
- if (arg_row != 0) {
- convert_to_long(arg_row);
- rownum = Z_LVAL_P(arg_row);
- switch (how) {
- case h_next:
- case h_prev:
- rownum--; /* Next 1 should send FUNC_CURSOR_NEXT(0) */
- break;
- default:
- break;
- }
- }
- }
-
- if (Z_TYPE_P(arr) != IS_ARRAY) {
- array_init(arr);
- }
- switch (how) {
- case h_absolute:
- case h_first:
- ret = sqlCursorFirst(stmt, rownum);
- break;
- case h_last:
- ret = sqlCursorLast(stmt, rownum);
- break;
- case h_next:
- ret = sqlCursorNext(stmt, rownum);
- break;
- case h_prev:
- ret = sqlCursorPrev(stmt, rownum);
- break;
- }
- if (!ret) {
- RETURN_FALSE;
- }
-
- colnb = sqlGetOutputColNb(stmt);
- for (icol = 0; icol < colnb; icol++) {
- int len;
- char buffer[10240];
- tmp = (pval *) emalloc(sizeof(pval));
- tmp->refcount = 1;
- Z_TYPE_P(tmp) = IS_STRING;
- Z_STRLEN_P(tmp) = 0;
-
- /* Produce column value in 'tmp' ... */
-
- column_to_string(stmt, icol, buffer, &len, pstmt);
- Z_STRLEN_P(tmp) = len;
- Z_STRVAL_P(tmp) = estrndup(buffer, len);
-
- zend_hash_index_update(Z_ARRVAL_P(arr), icol, &tmp,
- sizeof(pval *), NULL);
- }
-
- RETURN_TRUE;
-}
-
-/* }}} */
-
-/* {{{ proto bool ovrimos_fetch_row(int result_id [, int how [, int row_number]])
- how: 'Next' (default), 'Prev', 'First', 'Last', 'Absolute'
- Fetch a row */
-PHP_FUNCTION(ovrimos_fetch_row)
-{
- int numArgs;
- char *s_how;
- typedef enum { h_next = 0, h_prev, h_first, h_last, h_absolute
- } h_type;
- h_type how = h_next; /* default */
- sint32 rownum = 0;
- pval *arg_id, *arg_how = 0, *arg_row = 0;
- SQLS stmt;
- PSTATEMENT pstmt;
- bool ret = 0;
- numArgs = ARG_COUNT(ht);
-
- switch (numArgs) {
- case 1:
- if (getParameters(ht, 1, &arg_id) == FAILURE)
- WRONG_PARAM_COUNT;
- break;
- case 2:
- if (getParameters(ht, 2, &arg_id, &arg_how) == FAILURE)
- WRONG_PARAM_COUNT;
- break;
- case 3:
- if (getParameters(ht, 3, &arg_id, &arg_how, &arg_row) ==
- FAILURE) WRONG_PARAM_COUNT;
- break;
- default:
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long(arg_id);
-
- pstmt = (PSTATEMENT) Z_LVAL_P(arg_id);
- stmt = (SQLS) pstmt->statement;
-
- if (arg_how != 0) {
- if (Z_TYPE_P(arg_how) != IS_STRING) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Second argument not string in ovrimos_fetch_row()");
- RETURN_FALSE;
- }
- s_how = Z_STRVAL_P(arg_how);
- if (stricmp(s_how, "next") == 0) {
- how = h_next;
- } else if (stricmp(s_how, "prev") == 0) {
- how = h_prev;
- } else if (stricmp(s_how, "first") == 0) {
- how = h_first;
- } else if (stricmp(s_how, "last") == 0) {
- how = h_last;
- } else if (stricmp(s_how, "absolute") == 0) {
- how = h_absolute;
- } else {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Second argument not valid in ovrimos_fetch_row()");
- RETURN_FALSE;
- }
- if (arg_row == 0 && how == 4) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Third argument is required for ABSOLUTE in ovrimos_fetch_row()");
- RETURN_FALSE;
- }
- if (arg_row != 0) {
- convert_to_long(arg_row);
- rownum = Z_LVAL_P(arg_row);
- switch (how) {
- case h_next:
- case h_prev:
- rownum--; /* Next 1 should send FUNC_CURSOR_NEXT(0) */
- break;
- default:
- break;
- }
- }
- }
-
- switch (how) {
- case h_absolute:
- case h_first:
- ret = sqlCursorFirst(stmt, rownum);
- break;
- case h_last:
- ret = sqlCursorLast(stmt, rownum);
- break;
- case h_next:
- ret = sqlCursorNext(stmt, rownum);
- break;
- case h_prev:
- ret = sqlCursorPrev(stmt, rownum);
- break;
- }
- if (!ret) {
- RETURN_FALSE;
- }
- RETURN_TRUE;
-}
-
-/* }}} */
-
-/* {{{ proto string ovrimos_result(int result_id, mixed field)
- Get result data */
-PHP_FUNCTION(ovrimos_result)
-{
- int numArgs = ARG_COUNT(ht);
- pval *arg_id, *arg_field;
- int icol=0, colnb;
- SQLS stmt;
- int len;
- PSTATEMENT pstmt;
- char buffer[1024];
-
- if (numArgs != 2
- || getParameters(ht, 2, &arg_id,
- &arg_field) == FAILURE) WRONG_PARAM_COUNT;
-
- convert_to_long(arg_id);
- pstmt = (PSTATEMENT) Z_LVAL_P(arg_id);
- stmt = (SQLS) pstmt->statement;
-
- colnb = sqlGetOutputColNb(stmt);
-
- if (Z_TYPE_P(arg_field) == IS_STRING) {
- int i;
- for (i = 0; i < colnb; i++) {
- if (!stricmp
- (Z_STRVAL_P(arg_field),
- sqlGetOutputColName(stmt, i))) {
- icol = i;
- break;
- }
- }
- } else if (Z_TYPE_P(arg_field) == IS_LONG) {
- icol = Z_LVAL_P(arg_field) - 1;
- } else {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Second argument neither number nor string in ovrimos_result()");
- RETURN_FALSE;
- }
- if (icol < 0 || icol > colnb) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unknown column in ovrimos_result()");
- RETURN_FALSE;
- }
- column_to_string(stmt, icol, buffer, &len, pstmt);
-
- RETURN_STRINGL(buffer, len, 1);
-}
-
-/* }}} */
-
-/* {{{ proto int ovrimos_result_all(int result_id [, string format])
- Print result as HTML table */
-PHP_FUNCTION(ovrimos_result_all)
-{
- long fetched = 0;
- pval *arg1, *arg2;
- int numArgs;
- SQLS stmt;
- int icol, colnb;
- PSTATEMENT pstmt;
- char buffer[1024];
- int len;
-
- numArgs = ARG_COUNT(ht);
- if (numArgs == 1) {
- if (getParameters(ht, 1, &arg1) == FAILURE)
- WRONG_PARAM_COUNT;
- } else {
- if (getParameters(ht, 2, &arg1, &arg2) == FAILURE)
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long(arg1);
- pstmt = (PSTATEMENT) Z_LVAL_P(arg1);
- stmt = (SQLS) pstmt->statement;
-
- colnb = sqlGetOutputColNb(stmt);
-
- /* Start table tag */
- if (numArgs == 1) {
- php_printf("<table><tr>");
- } else {
- convert_to_string(arg2);
- php_printf("<table %s ><tr>", Z_STRVAL_P(arg2));
- }
-
- for (icol = 0; icol < colnb; icol++) {
- php_printf("<th>%s</th>", sqlGetOutputColName(stmt, icol));
- }
-
- php_printf("</tr>\n");
-
- if (sqlCursorFirst(stmt, 0)) {
- do {
- fetched++;
- php_printf("<tr>");
- for (icol = 0; icol < colnb; icol++) {
- column_to_string(stmt, icol, buffer, &len, pstmt);
- php_printf("<td>%s</td>", buffer);
- }
- php_printf("</tr>\n");
- } while (sqlCursorNext(stmt, 0));
- }
- php_printf("</table>\n");
-
- RETURN_LONG(fetched);
-}
-
-/* }}} */
-
-/* {{{ proto bool ovrimos_free_result(int result_id)
- Free resources associated with a result */
-PHP_FUNCTION(ovrimos_free_result)
-{
- pval *arg1;
- SQLS stmt;
- PSTATEMENT pstmt;
-
- if (getParameters(ht, 1, &arg1) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long(arg1);
- pstmt = (PSTATEMENT) Z_LVAL_P(arg1);
- stmt = (SQLS) pstmt->statement;
-
- sqlCloseCursor( stmt);
- local_sqlFreeStmt( pstmt, stmt);
- RETURN_TRUE;
-}
-
-/* }}} */
-
-/* {{{ proto int ovrimos_num_rows(int result_id)
- Get number of rows in a result */
-PHP_FUNCTION(ovrimos_num_rows)
-{
- uint32 rows;
- pval *arg1;
- SQLS stmt;
- PSTATEMENT pstmt;
-
- if (getParameters(ht, 1, &arg1) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long(arg1);
- pstmt = (PSTATEMENT) Z_LVAL_P(arg1);
- stmt = (SQLS) pstmt->statement;
-
-
- sqlGetRowCount(stmt, &rows);
- RETURN_LONG(rows);
-}
-
-/* }}} */
-
-/* {{{ proto int ovrimos_num_fields(int result_id)
- Get number of columns in a result */
-PHP_FUNCTION(ovrimos_num_fields)
-{
- pval *arg1;
- SQLS stmt;
- PSTATEMENT pstmt;
-
- if (getParameters(ht, 1, &arg1) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long(arg1);
- pstmt = (PSTATEMENT) Z_LVAL_P(arg1);
-
- stmt = (SQLS) pstmt->statement;
-
- RETURN_LONG(sqlGetOutputColNb(stmt));
-}
-
-/* }}} */
-
-/* {{{ proto string ovrimos_field_name(int result_id, int field_number)
- Get a column name */
-PHP_FUNCTION(ovrimos_field_name)
-{
- pval *arg1, *arg2;
- SQLS stmt;
- int field;
- PSTATEMENT pstmt;
-
- if (getParameters(ht, 2, &arg1, &arg2) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long(arg1);
- convert_to_long(arg2);
- pstmt = (PSTATEMENT) Z_LVAL_P(arg1);
-
- stmt = (SQLS) pstmt->statement;
-
-
- if (Z_LVAL_P(arg2) < 1) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Field numbering starts at 1! in call to ovrimos_field_name()");
- RETURN_FALSE;
- }
-
- field = Z_LVAL_P(arg2) - 1;
-
- if (field >= sqlGetOutputColNb(stmt)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "No field at this index (%d) in call to ovrimos_field_name()", field);
- RETURN_FALSE;
- }
-
- RETURN_STRING((char *) sqlGetOutputColName(stmt, field), 1);
-}
-
-/* }}} */
-
-/* {{{ proto int ovrimos_field_type(int result_id, int field_number)
- Get the datatype of a column */
-PHP_FUNCTION(ovrimos_field_type)
-{
- pval *arg1, *arg2;
- SQLS stmt;
- int field;
- PSTATEMENT pstmt;
-
- if (getParameters(ht, 2, &arg1, &arg2) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long(arg1);
- convert_to_long(arg2);
- pstmt = (PSTATEMENT) Z_LVAL_P(arg1);
-
- stmt = (SQLS) pstmt->statement;
-
- if (Z_LVAL_P(arg2) < 1) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Field numbering starts at 1! in call to ovrimos_field_type()");
- RETURN_FALSE;
- }
-
- field = Z_LVAL_P(arg2) - 1;
-
- if (field >= sqlGetOutputColNb(stmt)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "No field at this index (%d) in call to ovrimos_field_type()", field);
- RETURN_FALSE;
- }
-
- RETURN_LONG(sqlGetOutputColType(stmt, field));
-}
-
-/* }}} */
-
-/* {{{ proto int ovrimos_field_len(int result_id, int field_number)
- Get the length of a column */
-PHP_FUNCTION(ovrimos_field_len)
-{
- pval *arg1, *arg2;
- SQLS stmt;
- int field;
- PSTATEMENT pstmt;
- int longreadlen;
-
- if (getParameters(ht, 2, &arg1, &arg2) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long(arg1);
- convert_to_long(arg2);
- pstmt = (PSTATEMENT) Z_LVAL_P(arg1);
-
- longreadlen = pstmt->longreadlen;
-
- stmt = (SQLS) pstmt->statement;
-
- if (Z_LVAL_P(arg2) < 1) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Field numbering starts at 1! in call to ovrimos_field_len()");
- RETURN_FALSE;
- }
-
- field = Z_LVAL_P(arg2) - 1;
-
- if (field >= sqlGetOutputColNb(stmt)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "No field at this index (%d) in call to ovrimos_field_len()", field);
- RETURN_FALSE;
- }
-
- switch (sqlGetOutputColType(stmt, field)) {
- case T_LONGVARCHAR:
- case T_LONGVARBINARY:
- RETURN_LONG(longreadlen);
- default:
- RETURN_LONG(sqlGetOutputColLength(stmt, field));
- }
-}
-
-/* }}} */
-
-/* {{{ proto int ovrimos_field_num(int result_id, string field_name)
- Return column number */
-PHP_FUNCTION(ovrimos_field_num)
-{
- pval *arg1, *arg2;
- SQLS stmt;
- int i, n;
- PSTATEMENT pstmt;
-
- if (getParameters(ht, 2, &arg1, &arg2) == FAILURE
- || Z_TYPE_P(arg2) != IS_STRING) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long(arg1);
- pstmt = (PSTATEMENT) Z_LVAL_P(arg1);
- stmt = (SQLS) pstmt->statement;
-
- n = sqlGetOutputColNb(stmt);
- for (i = 0; i < n; i++) {
- if (!strcmp
- (Z_STRVAL_P(arg2), sqlGetOutputColName(stmt, i))) {
- RETURN_LONG(i + 1);
- }
- }
- RETURN_FALSE;
-}
-
-/* }}} */
-
-#if 0
-/* {{{ proto int ovrimos_autocommit(int connection_id, int OnOff)
- Toggle autocommit mode
- There can be problems with pconnections!*/
-PHP_FUNCTION(ovrimos_autocommit)
-{
-}
-
-/* }}} */
-#endif
-
-/* {{{ proto bool ovrimos_commit(int connection_id)
- Commit an ovrimos transaction */
-PHP_FUNCTION(ovrimos_commit)
-{
- pval *arg1;
- SQLS stmt;
- int i;
- PCON_STATE state;
-
- if (ARG_COUNT(ht) != 1 || getParameters(ht, 1, &arg1) == FAILURE
- || Z_TYPE_P(arg1) != IS_LONG) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long( arg1);
- state = (PCON_STATE) Z_LVAL_P(arg1);
-
- for (i=0;i<state->nstatements;i++) {
- stmt = state->statements[ i].statement;
- if (stmt==NULL) {
- continue;
- }
- if (!sqlCommit(stmt)) {
- RETURN_FALSE;
- }
- }
- RETURN_TRUE;
-}
-
-/* }}} */
-
-/* {{{ proto bool ovrimos_rollback(int connection_id)
- Rollback a transaction */
-PHP_FUNCTION(ovrimos_rollback)
-{
- pval *arg1;
- SQLS stmt;
- int i;
- PCON_STATE state;
-
- if (ARG_COUNT(ht) != 1 || getParameters(ht, 1, &arg1) == FAILURE
- || Z_TYPE_P(arg1) != IS_LONG) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long( arg1);
- state = (PCON_STATE) Z_LVAL_P(arg1);
-
- for (i=0;i<state->nstatements;i++) {
- stmt = (SQLS) state->statements[ i].statement;
- if (stmt==NULL) continue;
-
- if (!sqlRollback(stmt)) {
- RETURN_FALSE;
- }
- }
- RETURN_TRUE;
-}
-
-/* }}} */
-
-#if 0
-/* {{{ proto int ovrimos_setoption(int conn_id|result_id, int which, int option, int value)
- Sets connection or statement options */
-PHP_FUNCTION(ovrimos_setoption)
-{
-}
-
-/* }}} */
-#endif
-
-/* {{{ ovrimos_functions[]
- */
-function_entry ovrimos_functions[] = {
-/* PHP_FE(ovrimos_setoption, NULL)*/
-/* PHP_FE(ovrimos_autocommit, NULL)*/
- PHP_FE(ovrimos_close, NULL)
- PHP_FE(ovrimos_commit, NULL)
- PHP_FE(ovrimos_connect, NULL)
- PHP_FE(ovrimos_cursor, NULL)
- PHP_FE(ovrimos_exec, NULL)
- PHP_FE(ovrimos_prepare, NULL)
- PHP_FE(ovrimos_execute, NULL)
- PHP_FE(ovrimos_fetch_row, NULL)
- PHP_FE(ovrimos_fetch_into, second_arg_force_ref)
- PHP_FE(ovrimos_field_len, NULL)
- PHP_FE(ovrimos_field_name, NULL)
- PHP_FE(ovrimos_field_type, NULL)
- PHP_FE(ovrimos_field_num, NULL)
- PHP_FE(ovrimos_free_result, NULL)
- PHP_FE(ovrimos_num_fields, NULL)
- PHP_FE(ovrimos_num_rows, NULL)
- PHP_FE(ovrimos_result, NULL)
- PHP_FE(ovrimos_result_all, NULL)
- PHP_FE(ovrimos_rollback, NULL)
-/* PHP_FE(ovrimos_binmode, NULL)*/
- PHP_FE(ovrimos_longreadlen, NULL)
- PHP_FALIAS(ovrimos_do, ovrimos_exec, NULL) {NULL, NULL, NULL}
-};
-/* }}} */
-
-zend_module_entry ovrimos_module_entry = {
- STANDARD_MODULE_HEADER,
- "ovrimos",
- ovrimos_functions,
- NULL,
- NULL,
- NULL,
- NULL,
- PHP_MINFO(ovrimos),
- NO_VERSION_YET,
- STANDARD_MODULE_PROPERTIES
-};
-
-DLEXPORT zend_module_entry *get_module()
-{
- return &ovrimos_module_entry;
-};
-
-/*
- * 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/ovrimos/php_ovrimos.h b/ext/ovrimos/php_ovrimos.h
deleted file mode 100644
index b3e1336046..0000000000
--- a/ext/ovrimos/php_ovrimos.h
+++ /dev/null
@@ -1,44 +0,0 @@
-#ifndef PHP_OVRIMOS_H
-#define PHP_OVRIMOS_H
-
-#if HAVE_LIBSQLCLI
-
-#if PHP_API_VERSION < 19990421
-#define zend_module_entry zend_module_entry
-#include "zend_modules.h"
-#include "internal_functions.h"
-#endif
-
-extern zend_module_entry ovrimos_module_entry;
-#define ovrimos_module_ptr &ovrimos_module_entry
-
-PHP_FUNCTION(ovrimos_connect);
-PHP_FUNCTION(ovrimos_close);
-PHP_FUNCTION(ovrimos_longreadlen);
-PHP_FUNCTION(ovrimos_prepare);
-PHP_FUNCTION(ovrimos_execute);
-PHP_FUNCTION(ovrimos_cursor);
-PHP_FUNCTION(ovrimos_exec);
-PHP_FUNCTION(ovrimos_fetch_into);
-PHP_FUNCTION(ovrimos_fetch_row);
-PHP_FUNCTION(ovrimos_result);
-PHP_FUNCTION(ovrimos_result_all);
-PHP_FUNCTION(ovrimos_free_result);
-PHP_FUNCTION(ovrimos_num_rows);
-PHP_FUNCTION(ovrimos_num_fields);
-PHP_FUNCTION(ovrimos_field_name);
-PHP_FUNCTION(ovrimos_field_type);
-PHP_FUNCTION(ovrimos_field_len);
-PHP_FUNCTION(ovrimos_field_num);
-/*PHP_FUNCTION(ovrimos_autocommit);*/
-PHP_FUNCTION(ovrimos_commit);
-PHP_FUNCTION(ovrimos_rollback);
-/*PHP_FUNCTION(ovrimos_setoption);*/
-
-#else
-#define ovrimos_module_ptr NULL
-#endif
-
-#define phpext_ovrimos_ptr ovrimos_module_ptr
-
-#endif
diff --git a/ext/pcntl/CREDITS b/ext/pcntl/CREDITS
deleted file mode 100644
index 1d629d7adf..0000000000
--- a/ext/pcntl/CREDITS
+++ /dev/null
@@ -1,2 +0,0 @@
-pcntl
-Jason Greene
diff --git a/ext/pcntl/EXPERIMENTAL b/ext/pcntl/EXPERIMENTAL
deleted file mode 100644
index 6443e99646..0000000000
--- 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/README b/ext/pcntl/README
deleted file mode 100644
index cadd11121c..0000000000
--- a/ext/pcntl/README
+++ /dev/null
@@ -1,16 +0,0 @@
-Process Control Module for PHP (pcntl)
-
-This module will attempt to implement all features related to process spawning and
-control (fork(), waitpid(), signal(), WIF's, etc). This is extremly experimental,
-with hope to become stable on most UNIX's. I greatly apreciate any feedback, fixes,
-and or suggestions on how to improve/better implement
-this functionality.
-
-Thanks,
-
-Jason Greeme < jason@inetgurus.net / jason@php.net >
-
-
-
-
-
diff --git a/ext/pcntl/config.m4 b/ext/pcntl/config.m4
deleted file mode 100644
index 4b6b99441a..0000000000
--- a/ext/pcntl/config.m4
+++ /dev/null
@@ -1,19 +0,0 @@
-dnl
-dnl $Id$
-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)])
-
-if test "$PHP_PCNTL" != "no"; then
-
- AC_CHECK_FUNCS(fork, [ AC_DEFINE(HAVE_FORK,1,[ ]) ], [ AC_MSG_ERROR(pcntl: fork() not supported by this platform) ])
- AC_CHECK_FUNCS(waitpid, [ AC_DEFINE(HAVE_WAITPID,1,[ ]) ], [ AC_MSG_ERROR(pcntl: fork() not supported by this platform) ])
- AC_CHECK_FUNCS(sigaction, [ AC_DEFINE(HAVE_SIGACTION,1,[ ]) ], [ AC_MSG_ERROR(pcntl: sigaction() not supported by this platform) ])
- AC_CHECK_FUNCS(getpriority setpriority wait3)
-
- PHP_NEW_EXTENSION(pcntl, pcntl.c php_signal.c, $ext_shared, cli)
-fi
diff --git a/ext/pcntl/package.xml b/ext/pcntl/package.xml
deleted file mode 100644
index a9a3870043..0000000000
--- a/ext/pcntl/package.xml
+++ /dev/null
@@ -1,46 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1" ?>
-<!DOCTYPE package SYSTEM "../pear/package.dtd">
-<package>
- <name>posix</name>
- <summary>POSIX functions</summary>
- <maintainers>
- <maintainer>
- <user>???</user>
- <name>Kristian Köhntopp</name>
- <email>kris@koehntopp.de</email>
- <role>lead</role>
- </maintainer>
- </maintainers>
- <description>
-This module contains an interface to those functions defined
-in the IEEE 1003.1 (POSIX.1) standards document which are not
-accessible through other means. POSIX.1 for example defined the
-open(), read(), write() and close() functions, too, which
-traditionally have been part of PHP for a long time. Some more
-system specific functions have not been available before, though,
-and this module tries to remedy this by providing easy access
-to these functions.
- </description>
- <license>PHP</license>
- <release>
- <state>beta</state>
- <version>5.0.0rc1</version>
- <date>2004-03-19</date>
- <notes>
-package.xml added to support intallation using pear installer
- </notes>
- <filelist>
- <file role="doc" name="CREDITS"/>
- <file role="src" name="config.m4"/>
- <file role="src" name="posix.c"/>
- <file role="src" name="php_posix.h"/>
- </filelist>
- <deps>
- <dep type="php" rel="ge" version="5" />
- <!-- doesn't work yet <dep type="os" rel="has" name="unix"/> -->
- </deps>
- </release>
-</package>
-<!--
-vim:et:ts=1:sw=1
--->
diff --git a/ext/pcntl/pcntl.c b/ext/pcntl/pcntl.c
deleted file mode 100755
index eb1a0f38f1..0000000000
--- a/ext/pcntl/pcntl.c
+++ /dev/null
@@ -1,698 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Jason Greene <jason@inetgurus.net> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-#define PCNTL_DEBUG 0
-
-#if PCNTL_DEBUG
-#define DEBUG_OUT printf("DEBUG: ");printf
-#define IF_DEBUG(z) z
-#else
-#define IF_DEBUG(z)
-#endif
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "php.h"
-#include "php_ini.h"
-#include "ext/standard/info.h"
-#include "php_pcntl.h"
-
-#if HAVE_GETPRIORITY || HAVE_SETPRIORITY || HAVE_WAIT3
-#include <sys/time.h>
-#include <sys/resource.h>
-#endif
-
-ZEND_DECLARE_MODULE_GLOBALS(pcntl)
-
-function_entry pcntl_functions[] = {
- PHP_FE(pcntl_fork, NULL)
- PHP_FE(pcntl_waitpid, second_arg_force_ref)
- PHP_FE(pcntl_wait, first_arg_force_ref)
- PHP_FE(pcntl_signal, NULL)
- PHP_FE(pcntl_wifexited, NULL)
- PHP_FE(pcntl_wifstopped, NULL)
- PHP_FE(pcntl_wifsignaled, NULL)
- PHP_FE(pcntl_wexitstatus, NULL)
- PHP_FE(pcntl_wtermsig, NULL)
- PHP_FE(pcntl_wstopsig, NULL)
- PHP_FE(pcntl_exec, NULL)
- PHP_FE(pcntl_alarm, NULL)
-#ifdef HAVE_GETPRIORITY
- PHP_FE(pcntl_getpriority, NULL)
-#endif
-#ifdef HAVE_SETPRIORITY
- PHP_FE(pcntl_setpriority, NULL)
-#endif
- {NULL, NULL, NULL}
-};
-
-zend_module_entry pcntl_module_entry = {
- STANDARD_MODULE_HEADER,
- "pcntl",
- pcntl_functions,
- PHP_MINIT(pcntl),
- PHP_MSHUTDOWN(pcntl),
- PHP_RINIT(pcntl),
- PHP_RSHUTDOWN(pcntl),
- PHP_MINFO(pcntl),
- NO_VERSION_YET,
- STANDARD_MODULE_PROPERTIES
-};
-
-#ifdef COMPILE_DL_PCNTL
-ZEND_GET_MODULE(pcntl)
-# ifdef PHP_WIN32
-# include "zend_arg_defs.c"
-# endif
-#endif
-
-static void pcntl_signal_handler(int);
-static void pcntl_tick_handler();
-
-void php_register_signal_constants(INIT_FUNC_ARGS)
-{
-
- /* Wait Constants */
-#ifdef WNOHANG
- REGISTER_LONG_CONSTANT("WNOHANG", (long) WNOHANG, CONST_CS | CONST_PERSISTENT);
-#endif
-#ifdef WUNTRACED
- REGISTER_LONG_CONSTANT("WUNTRACED", (long) WUNTRACED, CONST_CS | CONST_PERSISTENT);
-#endif
-
- /* Signal Constants */
- REGISTER_LONG_CONSTANT("SIG_IGN", (long) SIG_IGN, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("SIG_DFL", (long) SIG_DFL, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("SIG_ERR", (long) SIG_ERR, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("SIGHUP", (long) SIGHUP, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("SIGINT", (long) SIGINT, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("SIGQUIT", (long) SIGQUIT, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("SIGILL", (long) SIGILL, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("SIGTRAP", (long) SIGTRAP, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("SIGABRT", (long) SIGABRT, CONST_CS | CONST_PERSISTENT);
-#ifdef SIGIOT
- REGISTER_LONG_CONSTANT("SIGIOT", (long) SIGIOT, CONST_CS | CONST_PERSISTENT);
-#endif
- REGISTER_LONG_CONSTANT("SIGBUS", (long) SIGBUS, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("SIGFPE", (long) SIGFPE, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("SIGKILL", (long) SIGKILL, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("SIGUSR1", (long) SIGUSR1, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("SIGSEGV", (long) SIGSEGV, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("SIGUSR2", (long) SIGUSR2, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("SIGPIPE", (long) SIGPIPE, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("SIGALRM", (long) SIGALRM, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("SIGTERM", (long) SIGTERM, CONST_CS | CONST_PERSISTENT);
-#ifdef SIGSTKFLT
- REGISTER_LONG_CONSTANT("SIGSTKFLT",(long) SIGSTKFLT, CONST_CS | CONST_PERSISTENT);
-#endif
-#ifdef SIGCLD
- REGISTER_LONG_CONSTANT("SIGCLD", (long) SIGCLD, CONST_CS | CONST_PERSISTENT);
-#endif
-#ifdef SIGCHLD
- REGISTER_LONG_CONSTANT("SIGCHLD", (long) SIGCHLD, CONST_CS | CONST_PERSISTENT);
-#endif
- REGISTER_LONG_CONSTANT("SIGCONT", (long) SIGCONT, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("SIGSTOP", (long) SIGSTOP, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("SIGTSTP", (long) SIGTSTP, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("SIGTTIN", (long) SIGTTIN, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("SIGTTOU", (long) SIGTTOU, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("SIGURG", (long) SIGURG , CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("SIGXCPU", (long) SIGXCPU, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("SIGXFSZ", (long) SIGXFSZ, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("SIGVTALRM",(long) SIGVTALRM, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("SIGPROF", (long) SIGPROF, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("SIGWINCH", (long) SIGWINCH, CONST_CS | CONST_PERSISTENT);
-#ifdef SIGPOLL
- REGISTER_LONG_CONSTANT("SIGPOLL", (long) SIGPOLL, CONST_CS | CONST_PERSISTENT);
-#endif
- REGISTER_LONG_CONSTANT("SIGIO", (long) SIGIO, CONST_CS | CONST_PERSISTENT);
-#ifdef SIGPWR
- REGISTER_LONG_CONSTANT("SIGPWR", (long) SIGPWR, CONST_CS | CONST_PERSISTENT);
-#endif
- REGISTER_LONG_CONSTANT("SIGSYS", (long) SIGSYS, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("SIGBABY", (long) SIGSYS, CONST_CS | CONST_PERSISTENT);
-
-#if HAVE_GETPRIORITY || HAVE_SETPRIORITY
- REGISTER_LONG_CONSTANT("PRIO_PGRP", PRIO_PGRP, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("PRIO_USER", PRIO_USER, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("PRIO_PROCESS", PRIO_PROCESS, CONST_CS | CONST_PERSISTENT);
-#endif
-}
-
-static void php_pcntl_init_globals(zend_pcntl_globals *pcntl_globals)
-{
- /* Just in case ... */
- memset(&pcntl_globals->php_signal_queue,0,sizeof(pcntl_globals->php_signal_queue));
-
- zend_llist_init(&pcntl_globals->php_signal_queue, sizeof (long), NULL, 1);
- pcntl_globals->signal_queue_ready = 0;
- pcntl_globals->processing_signal_queue = 0;
-}
-
-PHP_RINIT_FUNCTION(pcntl)
-{
- zend_hash_init(&PCNTL_G(php_signal_table), 16, NULL, ZVAL_PTR_DTOR, 1);
- return SUCCESS;
-}
-
-PHP_MINIT_FUNCTION(pcntl)
-{
- php_register_signal_constants(INIT_FUNC_ARGS_PASSTHRU);
- ZEND_INIT_MODULE_GLOBALS(pcntl, php_pcntl_init_globals, NULL);
- php_add_tick_function(pcntl_tick_handler);
-
- return SUCCESS;
-}
-
-PHP_MSHUTDOWN_FUNCTION(pcntl)
-{
- zend_llist_destroy(&PCNTL_G(php_signal_queue));
- return SUCCESS;
-}
-
-PHP_RSHUTDOWN_FUNCTION(pcntl)
-{
- zend_hash_destroy(&PCNTL_G(php_signal_table));
- return SUCCESS;
-}
-
-PHP_MINFO_FUNCTION(pcntl)
-{
- php_info_print_table_start();
- php_info_print_table_header(2, "pcntl support", "enabled");
- php_info_print_table_end();
-}
-
-/* {{{ proto int pcntl_fork(void)
- Forks the currently running process following the same behavior as the UNIX fork() system call*/
-PHP_FUNCTION(pcntl_fork)
-{
- pid_t id;
-
- id = fork();
- if (id == -1) {
- php_error_docref(NULL TSRMLS_CC, E_ERROR, "Error %d", errno);
- }
-
- RETURN_LONG((long) id);
-}
-/* }}} */
-
-/* {{{ proto int pcntl_alarm(int seconds)
- Set an alarm clock for delivery of a signal*/
-PHP_FUNCTION(pcntl_alarm)
-{
- long seconds;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &seconds) == FAILURE)
- return;
-
- RETURN_LONG ((long) alarm(seconds));
-}
-/* }}} */
-
-/* {{{ proto int pcntl_waitpid(int pid, int &status, int options)
- Waits on or returns the status of a forked child as defined by the waitpid() system call */
-PHP_FUNCTION(pcntl_waitpid)
-{
- long pid, options = 0;
- zval *z_status = NULL;
- int status;
- pid_t child_id;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "lz|l", &pid, &z_status, &options) == FAILURE)
- return;
-
- convert_to_long_ex(&z_status);
-
- status = Z_LVAL_P(z_status);
-
- child_id = waitpid((pid_t) pid, &status, options);
-
- Z_LVAL_P(z_status) = status;
-
- RETURN_LONG((long) child_id);
-}
-/* }}} */
-
-/* {{{ proto int pcntl_wait(int &status)
- Waits on or returns the status of a forked child as defined by the waitpid() system call */
-PHP_FUNCTION(pcntl_wait)
-{
- long options = 0;
- zval *z_status = NULL;
- int status;
- pid_t child_id;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z|l", &z_status, &options) == FAILURE)
- return;
-
- convert_to_long_ex(&z_status);
-
- status = Z_LVAL_P(z_status);
-#ifdef HAVE_WAIT3
- if(options) {
- child_id = wait3(&status, options, NULL);
- }
- else {
- child_id = wait(&status);
- }
-#else
- child_id = wait(&status);
-#endif
- Z_LVAL_P(z_status) = status;
-
- RETURN_LONG((long) child_id);
-}
-/* }}} */
-
-/* {{{ proto bool pcntl_wifexited(int status)
- Returns true if the child status code represents a successful exit */
-PHP_FUNCTION(pcntl_wifexited)
-{
-#ifdef WIFEXITED
- zval **status;
- int status_word;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(ZEND_NUM_ARGS(), &status) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- status_word = (int) Z_LVAL_PP(status);
-
- if (WIFEXITED(status_word)) RETURN_TRUE;
-#endif
- RETURN_FALSE;
-}
-/* }}} */
-
-/* {{{ proto bool pcntl_wifstopped(int status)
- Returns true if the child status code represents a stopped process (WUNTRACED must have been used with waitpid) */
-PHP_FUNCTION(pcntl_wifstopped)
-{
-#ifdef WIFSTOPPED
- zval **status;
- int status_word;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(ZEND_NUM_ARGS(), &status) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- status_word = (int) Z_LVAL_PP(status);
-
- if (WIFSTOPPED(status_word)) RETURN_TRUE;
-#endif
- RETURN_FALSE;
-}
-/* }}} */
-
-/* {{{ proto bool pcntl_wifsignaled(int status)
- Returns true if the child status code represents a process that was terminated due to a signal */
-PHP_FUNCTION(pcntl_wifsignaled)
-{
-#ifdef WIFSIGNALED
- zval **status;
- int status_word;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(ZEND_NUM_ARGS(), &status) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- status_word = (int) Z_LVAL_PP(status);
-
- if (WIFSIGNALED(status_word)) RETURN_TRUE;
-#endif
- RETURN_FALSE;
-}
-/* }}} */
-
-/* {{{ proto int pcntl_wexitstatus(int status)
- Returns the status code of a child's exit */
-PHP_FUNCTION(pcntl_wexitstatus)
-{
-#ifdef WEXITSTATUS
- zval **status;
- int status_word;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(ZEND_NUM_ARGS(), &status) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- status_word = (int) Z_LVAL_PP(status);
-
- /* WEXITSTATUS only returns 8 bits so we *MUST* cast this to signed char
- if you want to have valid negative exit codes */
- RETURN_LONG((signed char) WEXITSTATUS(status_word));
-#else
- RETURN_FALSE;
-#endif
-}
-/* }}} */
-
-/* {{{ proto int pcntl_wtermsig(int status)
- Returns the number of the signal that terminated the process who's status code is passed */
-PHP_FUNCTION(pcntl_wtermsig)
-{
-#ifdef WTERMSIG
- zval **status;
- int status_word;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(ZEND_NUM_ARGS(), &status) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- status_word = (int) Z_LVAL_PP(status);
-
- RETURN_LONG(WTERMSIG(status_word));
-#else
- RETURN_FALSE;
-#endif
-}
-/* }}} */
-
-/* {{{ proto int pcntl_wstopsig(int status)
- Returns the number of the signal that caused the process to stop who's status code is passed */
-PHP_FUNCTION(pcntl_wstopsig)
-{
-#ifdef WSTOPSIG
- zval **status;
- int status_word;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(ZEND_NUM_ARGS(), &status) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- status_word = (int) Z_LVAL_PP(status);
-
- RETURN_LONG(WSTOPSIG(status_word));
-#else
- RETURN_FALSE;
-#endif
-}
-/* }}} */
-
-/* {{{ proto bool pcntl_exec(string path [, array args [, array envs]])
- Executes specified program in current process space as defined by exec(2) */
-PHP_FUNCTION(pcntl_exec)
-{
- zval *args, *envs;
- zval **element;
- HashTable *args_hash, *envs_hash;
- int argc = 0, argi = 0;
- int envc = 0, envi = 0;
- int return_val = 0;
- char **argv = NULL, **envp = NULL;
- char **current_arg, **pair;
- int pair_length;
- char *key;
- int key_length;
- char *path;
- int path_len;
- long key_num;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|aa", &path, &path_len, &args, &envs) == FAILURE) {
- return;
- }
-
- if (ZEND_NUM_ARGS() > 1) {
- /* Build argumnent list */
- args_hash = HASH_OF(args);
- argc = zend_hash_num_elements(args_hash);
-
- argv = safe_emalloc((argc + 2), sizeof(char *), 0);
- *argv = path;
- for ( zend_hash_internal_pointer_reset(args_hash), current_arg = argv+1;
- (argi < argc && (zend_hash_get_current_data(args_hash, (void **) &element) == SUCCESS));
- (argi++, current_arg++, zend_hash_move_forward(args_hash)) ) {
-
- convert_to_string_ex(element);
- *current_arg = Z_STRVAL_PP(element);
- }
- *(current_arg) = NULL;
- } else {
- argv = emalloc(2 * sizeof(char *));
- *argv = path;
- *(argv+1) = NULL;
- }
-
- if ( ZEND_NUM_ARGS() == 3 ) {
- /* Build environment pair list */
- envs_hash = HASH_OF(envs);
- envc = zend_hash_num_elements(envs_hash);
-
- envp = safe_emalloc((envc + 1), sizeof(char *), 0);
- for ( zend_hash_internal_pointer_reset(envs_hash), pair = envp;
- (envi < envc && (zend_hash_get_current_data(envs_hash, (void **) &element) == SUCCESS));
- (envi++, pair++, zend_hash_move_forward(envs_hash)) ) {
- switch (return_val = zend_hash_get_current_key_ex(envs_hash, &key, &key_length, &key_num, 0, NULL)) {
- case HASH_KEY_IS_LONG:
- key = emalloc(101);
- snprintf(key, 100, "%ld", key_num);
- key_length = strlen(key);
- break;
- case HASH_KEY_NON_EXISTANT:
- pair--;
- continue;
- }
-
- convert_to_string_ex(element);
-
- /* Length of element + equal sign + length of key + null */
- pair_length = Z_STRLEN_PP(element) + key_length + 2;
- *pair = emalloc(pair_length);
- strlcpy(*pair, key, key_length);
- strlcat(*pair, "=", pair_length);
- strlcat(*pair, Z_STRVAL_PP(element), pair_length);
-
- /* Cleanup */
- if (return_val == HASH_KEY_IS_LONG) efree(key);
- }
- *(pair) = NULL;
- }
-
- if (execve(path, argv, envp) == -1) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Error has occured: (errno %d) %s", errno, strerror(errno));
- }
-
- /* Cleanup */
- if (envp != NULL) {
- for (pair = envp; *pair != NULL; pair++) efree(*pair);
- efree(envp);
- }
-
- efree(argv);
-
- RETURN_FALSE;
-}
-/* }}} */
-
-/* {{{ proto bool pcntl_signal(int signo, callback handle [, bool restart_syscalls])
- Assigns a system signal handler to a PHP function */
-PHP_FUNCTION(pcntl_signal)
-{
- zval *handle, **dest_handle = NULL;
- char *func_name;
- long signo;
- zend_bool restart_syscalls = 1;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "lz|b", &signo, &handle, &restart_syscalls) == FAILURE) {
- return;
- }
-
- /* Special long value case for SIG_DFL and SIG_IGN */
- if (Z_TYPE_P(handle)==IS_LONG) {
- if (Z_LVAL_P(handle)!= (long) SIG_DFL && Z_LVAL_P(handle) != (long) SIG_IGN) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid value for handle argument specifEied");
- }
- if (php_signal(signo, (Sigfunc *) Z_LVAL_P(handle), (int) restart_syscalls) == SIG_ERR) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Error assigning signal");
- RETURN_FALSE;
- }
- RETURN_TRUE;
- }
-
- if (!zend_is_callable(handle, 0, &func_name)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s is not a callable function name error", func_name);
- efree(func_name);
- RETURN_FALSE;
- }
- efree(func_name);
-
- /* Add the function name to our signal table */
- zend_hash_index_update(&PCNTL_G(php_signal_table), signo, (void **) &handle, sizeof(zval *), (void **) &dest_handle);
- if (dest_handle) zval_add_ref(dest_handle);
-
- if (php_signal(signo, pcntl_signal_handler, (int) restart_syscalls) == SIG_ERR) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Error assigning signal");
- RETURN_FALSE;
- }
- RETURN_TRUE;
-}
-/* }}} */
-
-#ifdef HAVE_GETPRIORITY
-/* {{{ proto int pcntl_getpriority([int pid [, int process_identifier]])
- Get the priority of any process */
-PHP_FUNCTION(pcntl_getpriority)
-{
- long who = PRIO_PROCESS;
- long pid = getpid();
- int pri;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|ll", &pid, &who) == FAILURE) {
- RETURN_FALSE;
- }
-
- /* needs to be cleared, since any returned value is valid */
- errno = 0;
-
- pri = getpriority(who, pid);
-
- if (errno) {
- switch (errno) {
- case ESRCH:
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Error %d: No process was located using the given parameters", errno);
- break;
- case EINVAL:
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Error %d: Invalid identifier flag", errno);
- break;
- default:
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unknown error %d has occured", errno);
- break;
- }
- RETURN_FALSE;
- }
-
- RETURN_LONG(pri);
-}
-/* }}} */
-#endif
-
-#ifdef HAVE_SETPRIORITY
-/* {{{ proto bool pcntl_setpriority(int priority [, int pid [, int process_identifier]])
- Change the priority of any process */
-PHP_FUNCTION(pcntl_setpriority)
-{
- long who = PRIO_PROCESS;
- long pid = getpid();
- long pri;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l|ll", &pri, &pid, &who) == FAILURE) {
- RETURN_FALSE;
- }
-
- if (setpriority(who, pid, pri)) {
- switch (errno) {
- case ESRCH:
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Error %d: No process was located using the given parameters", errno);
- break;
- case EINVAL:
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Error %d: Invalid identifier flag", errno);
- break;
- case EPERM:
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Error %d: A process was located, but neither its effective nor real user ID matched the effective user ID of the caller", errno);
- break;
- case EACCES:
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Error %d: Only a super user may attempt to increase the process priority", errno);
- break;
- default:
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unknown error %d has occured", errno);
- break;
- }
- RETURN_FALSE;
- }
-
- RETURN_TRUE;
-}
-/* }}} */
-#endif
-
-/* Our custom signal handler that calls the appropriate php_function */
-static void pcntl_signal_handler(int signo)
-{
- long signal_num = signo;
- TSRMLS_FETCH();
-
- IF_DEBUG(DEBUG_OUT("Caught signo %d\n", signo));
- if (! PCNTL_G(processing_signal_queue)) {
- zend_llist_add_element(&PCNTL_G(php_signal_queue), &signal_num);
- PCNTL_G(signal_queue_ready) = 1;
- IF_DEBUG(DEBUG_OUT("Added queue entry\n"));
- }
- return;
-}
-
-void pcntl_tick_handler()
-{
- zend_llist_element *element;
- zval *param, **handle, *retval;
- TSRMLS_FETCH();
-
- /* Bail if the queue is empty or if we are already playing the queue*/
- if (! PCNTL_G(signal_queue_ready) || PCNTL_G(processing_signal_queue))
- return;
-
- /* Mark our queue empty */
- PCNTL_G(signal_queue_ready) = 0;
-
- /* If for some reason our signal queue is empty then return */
- if (zend_llist_count(&PCNTL_G(php_signal_queue)) <= 0) {
- return;
- }
-
- /* Prevent reentrant handler calls */
- PCNTL_G(processing_signal_queue) = 1;
-
- /* Allocate */
- MAKE_STD_ZVAL(param);
- MAKE_STD_ZVAL(retval);
-
- /* Traverse through our signal queue and call the appropriate php functions */
- for (element = (&PCNTL_G(php_signal_queue))->head; element; element = element->next) {
- long *signal_num = (long *)&element->data;
- if (zend_hash_index_find(&PCNTL_G(php_signal_table), *signal_num, (void **) &handle)==FAILURE) {
- continue;
- }
-
- ZVAL_LONG(param, *signal_num);
-
- /* Call php signal handler - Note that we do not report errors, and we ignore the return value */
- call_user_function(EG(function_table), NULL, *handle, retval, 1, &param TSRMLS_CC);
- }
- /* Clear */
- zend_llist_clean(&PCNTL_G(php_signal_queue));
-
- /* Re-enable queue */
- PCNTL_G(processing_signal_queue) = 0;
-
- /* Clean up */
- efree(param);
- efree(retval);
-}
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * indent-tabs-mode: t
- * End:
- */
diff --git a/ext/pcntl/php_pcntl.h b/ext/pcntl/php_pcntl.h
deleted file mode 100644
index 590d5779bd..0000000000
--- a/ext/pcntl/php_pcntl.h
+++ /dev/null
@@ -1,82 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Jason Greene <jason@inetgurus.net> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-#ifndef PHP_PCNTL_H
-#define PHP_PCNTL_H
-
-#include <sys/wait.h>
-#include "php_signal.h"
-#include "php_ticks.h"
-extern zend_module_entry pcntl_module_entry;
-#define phpext_pcntl_ptr &pcntl_module_entry
-
-#ifdef PHP_WIN32
-#define PHP_PCNTL_API __declspec(dllexport)
-#else
-#define PHP_PCNTL_API
-#endif
-
-PHP_MINIT_FUNCTION(pcntl);
-PHP_MSHUTDOWN_FUNCTION(pcntl);
-PHP_RINIT_FUNCTION(pcntl);
-PHP_RSHUTDOWN_FUNCTION(pcntl);
-PHP_MINFO_FUNCTION(pcntl);
-
-PHP_FUNCTION(pcntl_alarm);
-PHP_FUNCTION(pcntl_fork);
-PHP_FUNCTION(pcntl_waitpid);
-PHP_FUNCTION(pcntl_wait);
-PHP_FUNCTION(pcntl_wifexited);
-PHP_FUNCTION(pcntl_wifstopped);
-PHP_FUNCTION(pcntl_wifsignaled);
-PHP_FUNCTION(pcntl_wexitstatus);
-PHP_FUNCTION(pcntl_wtermsig);
-PHP_FUNCTION(pcntl_wstopsig);
-PHP_FUNCTION(pcntl_signal);
-PHP_FUNCTION(pcntl_exec);
-#ifdef HAVE_GETPRIORITY
-PHP_FUNCTION(pcntl_getpriority);
-#endif
-#ifdef HAVE_SETPRIORITY
-PHP_FUNCTION(pcntl_setpriority);
-#endif
-
-ZEND_BEGIN_MODULE_GLOBALS(pcntl)
- HashTable php_signal_table;
- zend_llist php_signal_queue;
- int signal_queue_ready;
- int processing_signal_queue;
-ZEND_END_MODULE_GLOBALS(pcntl)
-#ifdef ZTS
-#define PCNTL_G(v) TSRMG(pcntl_globals_id, zend_pcntl_globals *, v)
-#else
-#define PCNTL_G(v) (pcntl_globals.v)
-#endif
-
-#endif /* PHP_PCNTL_H */
-
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * indent-tabs-mode: t
- * End:
- */
diff --git a/ext/pcntl/php_signal.c b/ext/pcntl/php_signal.c
deleted file mode 100644
index 0da0a6c48d..0000000000
--- a/ext/pcntl/php_signal.c
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Jason Greene <jason@inetgurus.net> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#include "php_signal.h"
-
-/* php_signal using sigaction is derrived from Advanced Programing
- * in the Unix Environment by W. Richard Stevens p 298. */
-Sigfunc *php_signal(int signo, Sigfunc *func, int restart)
-{
-
- struct sigaction act,oact;
- act.sa_handler = func;
- sigemptyset(&act.sa_mask);
- act.sa_flags = 0;
- if (signo == SIGALRM || (! restart)) {
-#ifdef SA_INTERRUPT
- act.sa_flags |= SA_INTERRUPT; /* SunOS */
-#endif
- } else {
-#ifdef SA_RESTART
- act.sa_flags |= SA_RESTART; /* SVR4, 4.3+BSD */
-#endif
- }
- if (sigaction(signo, &act, &oact) < 0)
- return SIG_ERR;
-
- return oact.sa_handler;
-}
-
diff --git a/ext/pcntl/php_signal.h b/ext/pcntl/php_signal.h
deleted file mode 100644
index 09a9c5a348..0000000000
--- a/ext/pcntl/php_signal.h
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Jason Greene <jason@inetgurus.net> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#include <signal.h>
-#ifndef PHP_SIGNAL_H
-#define PHP_SIGNAL_H
-
-typedef void Sigfunc(int);
-Sigfunc *php_signal(int signo, Sigfunc *func, int restart);
-
-#endif
diff --git a/ext/pcntl/test-pcntl.php b/ext/pcntl/test-pcntl.php
deleted file mode 100755
index 6b3ee5649e..0000000000
--- a/ext/pcntl/test-pcntl.php
+++ /dev/null
@@ -1,39 +0,0 @@
-#!../../php -q
-<?
-
-declare(ticks=1);
-
-function alarm_handle($signal){
- if ($signal==SIGALRM) print "Caught SIGALRM!!!\n";
-}
-
-function usr1_handle($signal){
- if ($signal==SIGUSR1) print "Caught SIGUSR1!!!\n";
-}
-
-print "This test will demonstrate a fork followed by ipc via signals.\n";
-
-$pid=pcntl_fork();
-if ($pid==0) {
- pcntl_signal(SIGUSR1, "usr1_handle");
- pcntl_signal(SIGALRM, "alarm_handle");
- print "Child: Waiting for alarm.....\n";
- sleep(100);
- print "Child: Waiting for usr1......\n";
- sleep(100);
- print "Child: Resetting Alarm handler to Ignore....\n";
- pcntl_signal(SIGALRM, SIG_IGN);
- sleep(10);
- print "Done\n";
-} else {
- print "Parent: Waiting 10 seconds....\n";
- sleep(10);
- print "Parent: Sending SIGALRM to Child\n";
- posix_kill($pid,SIGALRM);
- sleep(1);
- print "Parent: Senging SIGUSR1 to Child\n";
- posix_kill($pid,SIGUSR1);
- sleep(1);
- print "Parent: Sending SIGALRM to Child\n";
- pcntl_waitpid($pid, &$status, $options);
-}
diff --git a/ext/pcntl/tests/001.phpt b/ext/pcntl/tests/001.phpt
deleted file mode 100644
index 0c8e77ec6c..0000000000
--- a/ext/pcntl/tests/001.phpt
+++ /dev/null
@@ -1,82 +0,0 @@
---TEST--
-Test pcntl wait functionality
---SKIPIF--
-<?php
- if (!extension_loaded("pcntl")) print "skip";
- if (!function_exists("posix_kill")) print "skip posix_kill() not avaliable";
-?>
---FILE--
-<?php
-function test_exit_waits(){
- print "\n\nTesting pcntl_wifexited and wexitstatus....";
-
- $pid=pcntl_fork();
- if ($pid==0) {
- sleep(1);
- exit(-1);
- } else {
- $options=0;
- pcntl_waitpid($pid, $status, $options);
- if ( pcntl_wifexited($status) ) print "\nExited With: ". pcntl_wexitstatus($status);
- }
-}
-
-function test_exit_signal(){
- print "\n\nTesting pcntl_wifsignaled....";
-
- $pid=pcntl_fork();
-
- if ($pid==0) {
- sleep(10);
- exit;
- } else {
- $options=0;
- posix_kill($pid, SIGTERM);
- pcntl_waitpid($pid, $status, $options);
- if ( pcntl_wifsignaled($status) ) {
- $signal_print=pcntl_wtermsig($status);
- if ($signal_print==SIGTERM) $signal_print="SIGTERM";
- print "\nProcess was terminated by signal : ". $signal_print;
- }
-
- }
-}
-
-
-function test_stop_signal(){
- print "\n\nTesting pcntl_wifstopped and pcntl_wstopsig....";
-
- $pid=pcntl_fork();
-
- if ($pid==0) {
- sleep(1);
- exit;
- } else {
- $options=WUNTRACED;
- posix_kill($pid, SIGSTOP);
- pcntl_waitpid($pid, $status, $options);
- if ( pcntl_wifstopped($status) ) {
- $signal_print=pcntl_wstopsig($status);
- if ($signal_print==SIGSTOP) $signal_print="SIGSTOP";
- print "\nProcess was stoped by signal : ". $signal_print;
- }
- posix_kill($pid, SIGCONT);
- }
-}
-
-print "Staring wait.h tests....";
-test_exit_waits();
-test_exit_signal();
-test_stop_signal();
-?>
---EXPECT--
-Staring wait.h tests....
-
-Testing pcntl_wifexited and wexitstatus....
-Exited With: -1
-
-Testing pcntl_wifsignaled....
-Process was terminated by signal : SIGTERM
-
-Testing pcntl_wifstopped and pcntl_wstopsig....
-Process was stoped by signal : SIGSTOP
diff --git a/ext/pcre/CREDITS b/ext/pcre/CREDITS
deleted file mode 100644
index ae0fba35d4..0000000000
--- a/ext/pcre/CREDITS
+++ /dev/null
@@ -1,2 +0,0 @@
-Perl Compatible Regexps
-Andrei Zmievski
diff --git a/ext/pcre/config.m4 b/ext/pcre/config.m4
deleted file mode 100644
index 02e71bd25b..0000000000
--- a/ext/pcre/config.m4
+++ /dev/null
@@ -1,56 +0,0 @@
-dnl
-dnl $Id$
-dnl
-
-dnl By default we'll compile and link against the bundled PCRE library
-dnl if DIR is supplied, we'll use that for linking
-
-PHP_ARG_WITH(pcre-regex,for PCRE support,
-[ --without-pcre-regex Do not include Perl Compatible Regular Expressions
- support. Use --with-pcre-regex=DIR to specify DIR
- where PCRE's include and library files are located,
- if not using bundled library.],yes)
-
-if test "$PHP_PCRE_REGEX" != "no"; then
- if test "$PHP_PCRE_REGEX" = "yes"; then
- PHP_NEW_EXTENSION(pcre, pcrelib/maketables.c pcrelib/get.c pcrelib/study.c pcrelib/pcre.c php_pcre.c, $ext_shared,,-DSUPPORT_UTF8 -DLINK_SIZE=2 -DPOSIX_MALLOC_THRESHOLD=10 -I@ext_srcdir@/pcrelib)
- PHP_ADD_BUILD_DIR($ext_builddir/pcrelib)
- AC_DEFINE(HAVE_BUNDLED_PCRE, 1, [ ])
- else
- for i in $PHP_PCRE_REGEX $PHP_PCRE_REGEX/include $PHP_PCRE_REGEX/include/pcre; do
- test -f $i/pcre.h && PCRE_INCDIR=$i
- done
-
- if test -z "$PCRE_INCDIR"; then
- AC_MSG_ERROR([Could not find pcre.h in $PHP_PCRE_REGEX])
- fi
-
- for j in $PHP_PCRE_REGEX $PHP_PCRE_REGEX/lib; do
- test -f $j/libpcre.a -o -f $j/libpcre.$SHLIB_SUFFIX_NAME && PCRE_LIBDIR=$j
- done
-
- if test -z "$PCRE_LIBDIR" ; then
- AC_MSG_ERROR([Could not find libpcre.(a|$SHLIB_SUFFIX_NAME) in $PHP_PCRE_REGEX])
- fi
-
- changequote({,})
- pcre_major=`grep PCRE_MAJOR $PCRE_INCDIR/pcre.h | sed -e 's/[^0-9]//g'`
- pcre_minor=`grep PCRE_MINOR $PCRE_INCDIR/pcre.h | sed -e 's/[^0-9]//g'`
- changequote([,])
- pcre_minor_length=`echo "$pcre_minor" | wc -c | sed -e 's/[^0-9]//g'`
- if test "$pcre_minor_length" -eq 2 ; then
- pcre_minor="$pcre_minor"0
- fi
- pcre_version=$pcre_major$pcre_minor
- if test "$pcre_version" -lt 208; then
- AC_MSG_ERROR([The PCRE extension requires PCRE library version >= 2.08])
- fi
-
- PHP_ADD_LIBRARY_WITH_PATH(pcre, $PCRE_LIBDIR, PCRE_SHARED_LIBADD)
-
- AC_DEFINE(HAVE_PCRE, 1, [ ])
- PHP_ADD_INCLUDE($PCRE_INCDIR)
- PHP_NEW_EXTENSION(pcre, php_pcre.c, $ext_shared,,-DSUPPORT_UTF8 -DLINK_SIZE=2 -DPOSIX_MALLOC_THRESHOLD=10)
- fi
- PHP_SUBST(PCRE_SHARED_LIBADD)
-fi
diff --git a/ext/pcre/config.w32 b/ext/pcre/config.w32
deleted file mode 100644
index 574fe196ef..0000000000
--- a/ext/pcre/config.w32
+++ /dev/null
@@ -1,13 +0,0 @@
-// $Id$
-// vim:ft=javascript
-
-ARG_WITH("pcre-regex", "Perl Compatible Regular Expressions", "yes");
-
-if (PHP_PCRE_REGEX == "yes") {
- EXTENSION("pcre", "php_pcre.c", PHP_PCRE_REGEX_SHARED,
- "-DSUPPORT_UTF8 -DLINK_SIZE=2 -DPOSIX_MALLOC_THRESHOLD=10 -Iext/pcre/pcrelib -DNO_RECURSE");
- ADD_SOURCES("ext/pcre/pcrelib", "maketables.c get.c study.c pcre.c", "pcre");
-
- AC_DEFINE('HAVE_BUNDLED_PCRE', 1, 'Using bundled PCRE library');
- AC_DEFINE('HAVE_PCRE', 1, 'Have PCRE library');
-}
diff --git a/ext/pcre/config0.m4 b/ext/pcre/config0.m4
deleted file mode 100644
index 02e71bd25b..0000000000
--- a/ext/pcre/config0.m4
+++ /dev/null
@@ -1,56 +0,0 @@
-dnl
-dnl $Id$
-dnl
-
-dnl By default we'll compile and link against the bundled PCRE library
-dnl if DIR is supplied, we'll use that for linking
-
-PHP_ARG_WITH(pcre-regex,for PCRE support,
-[ --without-pcre-regex Do not include Perl Compatible Regular Expressions
- support. Use --with-pcre-regex=DIR to specify DIR
- where PCRE's include and library files are located,
- if not using bundled library.],yes)
-
-if test "$PHP_PCRE_REGEX" != "no"; then
- if test "$PHP_PCRE_REGEX" = "yes"; then
- PHP_NEW_EXTENSION(pcre, pcrelib/maketables.c pcrelib/get.c pcrelib/study.c pcrelib/pcre.c php_pcre.c, $ext_shared,,-DSUPPORT_UTF8 -DLINK_SIZE=2 -DPOSIX_MALLOC_THRESHOLD=10 -I@ext_srcdir@/pcrelib)
- PHP_ADD_BUILD_DIR($ext_builddir/pcrelib)
- AC_DEFINE(HAVE_BUNDLED_PCRE, 1, [ ])
- else
- for i in $PHP_PCRE_REGEX $PHP_PCRE_REGEX/include $PHP_PCRE_REGEX/include/pcre; do
- test -f $i/pcre.h && PCRE_INCDIR=$i
- done
-
- if test -z "$PCRE_INCDIR"; then
- AC_MSG_ERROR([Could not find pcre.h in $PHP_PCRE_REGEX])
- fi
-
- for j in $PHP_PCRE_REGEX $PHP_PCRE_REGEX/lib; do
- test -f $j/libpcre.a -o -f $j/libpcre.$SHLIB_SUFFIX_NAME && PCRE_LIBDIR=$j
- done
-
- if test -z "$PCRE_LIBDIR" ; then
- AC_MSG_ERROR([Could not find libpcre.(a|$SHLIB_SUFFIX_NAME) in $PHP_PCRE_REGEX])
- fi
-
- changequote({,})
- pcre_major=`grep PCRE_MAJOR $PCRE_INCDIR/pcre.h | sed -e 's/[^0-9]//g'`
- pcre_minor=`grep PCRE_MINOR $PCRE_INCDIR/pcre.h | sed -e 's/[^0-9]//g'`
- changequote([,])
- pcre_minor_length=`echo "$pcre_minor" | wc -c | sed -e 's/[^0-9]//g'`
- if test "$pcre_minor_length" -eq 2 ; then
- pcre_minor="$pcre_minor"0
- fi
- pcre_version=$pcre_major$pcre_minor
- if test "$pcre_version" -lt 208; then
- AC_MSG_ERROR([The PCRE extension requires PCRE library version >= 2.08])
- fi
-
- PHP_ADD_LIBRARY_WITH_PATH(pcre, $PCRE_LIBDIR, PCRE_SHARED_LIBADD)
-
- AC_DEFINE(HAVE_PCRE, 1, [ ])
- PHP_ADD_INCLUDE($PCRE_INCDIR)
- PHP_NEW_EXTENSION(pcre, php_pcre.c, $ext_shared,,-DSUPPORT_UTF8 -DLINK_SIZE=2 -DPOSIX_MALLOC_THRESHOLD=10)
- fi
- PHP_SUBST(PCRE_SHARED_LIBADD)
-fi
diff --git a/ext/pcre/pcrelib/AUTHORS b/ext/pcre/pcrelib/AUTHORS
deleted file mode 100644
index 622ba1c9a9..0000000000
--- a/ext/pcre/pcrelib/AUTHORS
+++ /dev/null
@@ -1,6 +0,0 @@
-Written by: Philip Hazel <ph10@cam.ac.uk>
-
-University of Cambridge Computing Service,
-Cambridge, England. Phone: +44 1223 334714.
-
-Copyright (c) 1997-2003 University of Cambridge
diff --git a/ext/pcre/pcrelib/COPYING b/ext/pcre/pcrelib/COPYING
deleted file mode 100644
index 09a242c101..0000000000
--- a/ext/pcre/pcrelib/COPYING
+++ /dev/null
@@ -1,54 +0,0 @@
-PCRE LICENCE
-------------
-
-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 <ph10@cam.ac.uk>
-
-University of Cambridge Computing Service,
-Cambridge, England. Phone: +44 1223 334714.
-
-Copyright (c) 1997-2003 University of Cambridge
-
-Permission is granted to anyone to use this software for any purpose on any
-computer system, and to redistribute it freely, subject to the following
-restrictions:
-
-1. This software is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
-
-2. The origin of this software must not be misrepresented, either by
- explicit claim or by omission. In practice, this means that if you use
- PCRE in software that you distribute to others, commercially or
- otherwise, you must put a sentence like this
-
- Regular expression support is provided by the PCRE library package,
- which is open source software, written by Philip Hazel, and copyright
- by the University of Cambridge, England.
-
- somewhere reasonably visible in your documentation and in any relevant
- files or online help data or similar. A reference to the ftp site for
- the source, that is, to
-
- ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/
-
- should also be given in the documentation. However, this condition is not
- intended to apply to whole chains of software. If package A includes PCRE,
- it must acknowledge it, but if package B is software that includes package
- A, the condition is not imposed on package B (unless it uses PCRE
- independently).
-
-3. Altered versions must be plainly marked as such, and must not be
- misrepresented as being the original software.
-
-4. If PCRE is embedded in any software that is released under the GNU
- General Purpose Licence (GPL), or Lesser General Purpose Licence (LGPL),
- then the terms of that licence shall supersede any condition above with
- which it is incompatible.
-
-The documentation for PCRE, supplied in the "doc" directory, is distributed
-under the same terms as the software itself.
-
-End
diff --git a/ext/pcre/pcrelib/ChangeLog b/ext/pcre/pcrelib/ChangeLog
deleted file mode 100644
index edc4aea49e..0000000000
--- a/ext/pcre/pcrelib/ChangeLog
+++ /dev/null
@@ -1,1475 +0,0 @@
-ChangeLog for PCRE
-------------------
-
-Version 4.5 01-Dec-03
----------------------
-
- 1. There has been some re-arrangement of the code for the match() function so
- that it can be compiled in a version that does not call itself recursively.
- Instead, it keeps those local variables that need separate instances for
- each "recursion" in a frame on the heap, and gets/frees frames whenever it
- needs to "recurse". Keeping track of where control must go is done by means
- of setjmp/longjmp. The whole thing is implemented by a set of macros that
- hide most of the details from the main code, and operates only if
- NO_RECURSE is defined while compiling pcre.c. If PCRE is built using the
- "configure" mechanism, "--disable-stack-for-recursion" turns on this way of
- operating.
-
- To make it easier for callers to provide specially tailored get/free
- functions for this usage, two new functions, pcre_stack_malloc, and
- pcre_stack_free, are used. They are always called in strict stacking order,
- and the size of block requested is always the same.
-
- The PCRE_CONFIG_STACKRECURSE info parameter can be used to find out whether
- PCRE has been compiled to use the stack or the heap for recursion. The
- -C option of pcretest uses this to show which version is compiled.
-
- A new data escape \S, is added to pcretest; it causes the amounts of store
- obtained and freed by both kinds of malloc/free at match time to be added
- to the output.
-
- 2. Changed the locale test to use "fr_FR" instead of "fr" because that's
- what's available on my current Linux desktop machine.
-
- 3. When matching a UTF-8 string, the test for a valid string at the start has
- been extended. If start_offset is not zero, PCRE now checks that it points
- to a byte that is the start of a UTF-8 character. If not, it returns
- PCRE_ERROR_BADUTF8_OFFSET (-11). Note: the whole string is still checked;
- this is necessary because there may be backward assertions in the pattern.
- When matching the same subject several times, it may save resources to use
- PCRE_NO_UTF8_CHECK on all but the first call if the string is long.
-
- 4. The code for checking the validity of UTF-8 strings has been tightened so
- that it rejects (a) strings containing 0xfe or 0xff bytes and (b) strings
- containing "overlong sequences".
-
- 5. Fixed a bug (appearing twice) that I could not find any way of exploiting!
- I had written "if ((digitab[*p++] && chtab_digit) == 0)" where the "&&"
- should have been "&", but it just so happened that all the cases this let
- through by mistake were picked up later in the function.
-
- 6. I had used a variable called "isblank" - this is a C99 function, causing
- some compilers to warn. To avoid this, I renamed it (as "blankclass").
-
- 7. Cosmetic: (a) only output another newline at the end of pcretest if it is
- prompting; (b) run "./pcretest /dev/null" at the start of the test script
- so the version is shown; (c) stop "make test" echoing "./RunTest".
-
- 8. Added patches from David Burgess to enable PCRE to run on EBCDIC systems.
-
- 9. The prototype for memmove() for systems that don't have it was using
- size_t, but the inclusion of the header that defines size_t was later. I've
- moved the #includes for the C headers earlier to avoid this.
-
-10. Added some adjustments to the code to make it easier to compiler on certain
- special systems:
-
- (a) Some "const" qualifiers were missing.
- (b) Added the macro EXPORT before all exported functions; by default this
- is defined to be empty.
- (c) Changed the dftables auxiliary program (that builds chartables.c) so
- that it reads its output file name as an argument instead of writing
- to the standard output and assuming this can be redirected.
-
-11. In UTF-8 mode, if a recursive reference (e.g. (?1)) followed a character
- class containing characters with values greater than 255, PCRE compilation
- went into a loop.
-
-12. A recursive reference to a subpattern that was within another subpattern
- that had a minimum quantifier of zero caused PCRE to crash. For example,
- (x(y(?2))z)? provoked this bug with a subject that got as far as the
- recursion. If the recursively-called subpattern itself had a zero repeat,
- that was OK.
-
-13. In pcretest, the buffer for reading a data line was set at 30K, but the
- buffer into which it was copied (for escape processing) was still set at
- 1024, so long lines caused crashes.
-
-14. A pattern such as /[ab]{1,3}+/ failed to compile, giving the error
- "internal error: code overflow...". This applied to any character class
- that was followed by a possessive quantifier.
-
-15. Modified the Makefile to add libpcre.la as a prerequisite for
- libpcreposix.la because I was told this is needed for a parallel build to
- work.
-
-16. If a pattern that contained .* following optional items at the start was
- studied, the wrong optimizing data was generated, leading to matching
- errors. For example, studying /[ab]*.*c/ concluded, erroneously, that any
- matching string must start with a or b or c. The correct conclusion for
- this pattern is that a match can start with any character.
-
-
-Version 4.4 13-Aug-03
----------------------
-
- 1. In UTF-8 mode, a character class containing characters with values between
- 127 and 255 was not handled correctly if the compiled pattern was studied.
- In fixing this, I have also improved the studying algorithm for such
- classes (slightly).
-
- 2. Three internal functions had redundant arguments passed to them. Removal
- might give a very teeny performance improvement.
-
- 3. Documentation bug: the value of the capture_top field in a callout is *one
- more than* the number of the hightest numbered captured substring.
-
- 4. The Makefile linked pcretest and pcregrep with -lpcre, which could result
- in incorrectly linking with a previously installed version. They now link
- explicitly with libpcre.la.
-
- 5. configure.in no longer needs to recognize Cygwin specially.
-
- 6. A problem in pcre.in for Windows platforms is fixed.
-
- 7. If a pattern was successfully studied, and the -d (or /D) flag was given to
- pcretest, it used to include the size of the study block as part of its
- output. Unfortunately, the structure contains a field that has a different
- size on different hardware architectures. This meant that the tests that
- showed this size failed. As the block is currently always of a fixed size,
- this information isn't actually particularly useful in pcretest output, so
- I have just removed it.
-
- 8. Three pre-processor statements accidentally did not start in column 1.
- Sadly, there are *still* compilers around that complain, even though
- standard C has not required this for well over a decade. Sigh.
-
- 9. In pcretest, the code for checking callouts passed small integers in the
- callout_data field, which is a void * field. However, some picky compilers
- complained about the casts involved for this on 64-bit systems. Now
- pcretest passes the address of the small integer instead, which should get
- rid of the warnings.
-
-10. By default, when in UTF-8 mode, PCRE now checks for valid UTF-8 strings at
- both compile and run time, and gives an error if an invalid UTF-8 sequence
- is found. There is a option for disabling this check in cases where the
- string is known to be correct and/or the maximum performance is wanted.
-
-11. In response to a bug report, I changed one line in Makefile.in from
-
- -Wl,--out-implib,.libs/lib@WIN_PREFIX@pcreposix.dll.a \
- to
- -Wl,--out-implib,.libs/@WIN_PREFIX@libpcreposix.dll.a \
-
- to look similar to other lines, but I have no way of telling whether this
- is the right thing to do, as I do not use Windows. No doubt I'll get told
- if it's wrong...
-
-
-Version 4.3 21-May-03
----------------------
-
-1. Two instances of @WIN_PREFIX@ omitted from the Windows targets in the
- Makefile.
-
-2. Some refactoring to improve the quality of the code:
-
- (i) The utf8_table... variables are now declared "const".
-
- (ii) The code for \cx, which used the "case flipping" table to upper case
- lower case letters, now just substracts 32. This is ASCII-specific,
- but the whole concept of \cx is ASCII-specific, so it seems
- reasonable.
-
- (iii) PCRE was using its character types table to recognize decimal and
- hexadecimal digits in the pattern. This is silly, because it handles
- only 0-9, a-f, and A-F, but the character types table is locale-
- specific, which means strange things might happen. A private
- table is now used for this - though it costs 256 bytes, a table is
- much faster than multiple explicit tests. Of course, the standard
- character types table is still used for matching digits in subject
- strings against \d.
-
- (iv) Strictly, the identifier ESC_t is reserved by POSIX (all identifiers
- ending in _t are). So I've renamed it as ESC_tee.
-
-3. The first argument for regexec() in the POSIX wrapper should have been
- defined as "const".
-
-4. Changed pcretest to use malloc() for its buffers so that they can be
- Electric Fenced for debugging.
-
-5. There were several places in the code where, in UTF-8 mode, PCRE would try
- to read one or more bytes before the start of the subject string. Often this
- had no effect on PCRE's behaviour, but in some circumstances it could
- provoke a segmentation fault.
-
-6. A lookbehind at the start of a pattern in UTF-8 mode could also cause PCRE
- to try to read one or more bytes before the start of the subject string.
-
-7. A lookbehind in a pattern matched in non-UTF-8 mode on a PCRE compiled with
- UTF-8 support could misbehave in various ways if the subject string
- contained bytes with the 0x80 bit set and the 0x40 bit unset in a lookbehind
- area. (PCRE was not checking for the UTF-8 mode flag, and trying to move
- back over UTF-8 characters.)
-
-
-Version 4.2 14-Apr-03
----------------------
-
-1. Typo "#if SUPPORT_UTF8" instead of "#ifdef SUPPORT_UTF8" fixed.
-
-2. Changes to the building process, supplied by Ronald Landheer-Cieslak
- [ON_WINDOWS]: new variable, "#" on non-Windows platforms
- [NOT_ON_WINDOWS]: new variable, "#" on Windows platforms
- [WIN_PREFIX]: new variable, "cyg" for Cygwin
- * Makefile.in: use autoconf substitution for OBJEXT, EXEEXT, BUILD_OBJEXT
- and BUILD_EXEEXT
- Note: automatic setting of the BUILD variables is not yet working
- set CPPFLAGS and BUILD_CPPFLAGS (but don't use yet) - should be used at
- compile-time but not at link-time
- [LINK]: use for linking executables only
- make different versions for Windows and non-Windows
- [LINKLIB]: new variable, copy of UNIX-style LINK, used for linking
- libraries
- [LINK_FOR_BUILD]: new variable
- [OBJEXT]: use throughout
- [EXEEXT]: use throughout
- <winshared>: new target
- <wininstall>: new target
- <dftables.o>: use native compiler
- <dftables>: use native linker
- <install>: handle Windows platform correctly
- <clean>: ditto
- <check>: ditto
- copy DLL to top builddir before testing
-
- As part of these changes, -no-undefined was removed again. This was reported
- to give trouble on HP-UX 11.0, so getting rid of it seems like a good idea
- in any case.
-
-3. Some tidies to get rid of compiler warnings:
-
- . In the match_data structure, match_limit was an unsigned long int, whereas
- match_call_count was an int. I've made them both unsigned long ints.
-
- . In pcretest the fact that a const uschar * doesn't automatically cast to
- a void * provoked a warning.
-
- . Turning on some more compiler warnings threw up some "shadow" variables
- and a few more missing casts.
-
-4. If PCRE was complied with UTF-8 support, but called without the PCRE_UTF8
- option, a class that contained a single character with a value between 128
- and 255 (e.g. /[\xFF]/) caused PCRE to crash.
-
-5. If PCRE was compiled with UTF-8 support, but called without the PCRE_UTF8
- option, a class that contained several characters, but with at least one
- whose value was between 128 and 255 caused PCRE to crash.
-
-
-Version 4.1 12-Mar-03
----------------------
-
-1. Compiling with gcc -pedantic found a couple of places where casts were
-needed, and a string in dftables.c that was longer than standard compilers are
-required to support.
-
-2. Compiling with Sun's compiler found a few more places where the code could
-be tidied up in order to avoid warnings.
-
-3. The variables for cross-compiling were called HOST_CC and HOST_CFLAGS; the
-first of these names is deprecated in the latest Autoconf in favour of the name
-CC_FOR_BUILD, because "host" is typically used to mean the system on which the
-compiled code will be run. I can't find a reference for HOST_CFLAGS, but by
-analogy I have changed it to CFLAGS_FOR_BUILD.
-
-4. Added -no-undefined to the linking command in the Makefile, because this is
-apparently helpful for Windows. To make it work, also added "-L. -lpcre" to the
-linking step for the pcreposix library.
-
-5. PCRE was failing to diagnose the case of two named groups with the same
-name.
-
-6. A problem with one of PCRE's optimizations was discovered. PCRE remembers a
-literal character that is needed in the subject for a match, and scans along to
-ensure that it is present before embarking on the full matching process. This
-saves time in cases of nested unlimited repeats that are never going to match.
-Problem: the scan can take a lot of time if the subject is very long (e.g.
-megabytes), thus penalizing straightforward matches. It is now done only if the
-amount of subject to be scanned is less than 1000 bytes.
-
-7. A lesser problem with the same optimization is that it was recording the
-first character of an anchored pattern as "needed", thus provoking a search
-right along the subject, even when the first match of the pattern was going to
-fail. The "needed" character is now not set for anchored patterns, unless it
-follows something in the pattern that is of non-fixed length. Thus, it still
-fulfils its original purpose of finding quick non-matches in cases of nested
-unlimited repeats, but isn't used for simple anchored patterns such as /^abc/.
-
-
-Version 4.0 17-Feb-03
----------------------
-
-1. If a comment in an extended regex that started immediately after a meta-item
-extended to the end of string, PCRE compiled incorrect data. This could lead to
-all kinds of weird effects. Example: /#/ was bad; /()#/ was bad; /a#/ was not.
-
-2. Moved to autoconf 2.53 and libtool 1.4.2.
-
-3. Perl 5.8 no longer needs "use utf8" for doing UTF-8 things. Consequently,
-the special perltest8 script is no longer needed - all the tests can be run
-from a single perltest script.
-
-4. From 5.004, Perl has not included the VT character (0x0b) in the set defined
-by \s. It has now been removed in PCRE. This means it isn't recognized as
-whitespace in /x regexes too, which is the same as Perl. Note that the POSIX
-class [:space:] *does* include VT, thereby creating a mess.
-
-5. Added the class [:blank:] (a GNU extension from Perl 5.8) to match only
-space and tab.
-
-6. Perl 5.005 was a long time ago. It's time to amalgamate the tests that use
-its new features into the main test script, reducing the number of scripts.
-
-7. Perl 5.8 has changed the meaning of patterns like /a(?i)b/. Earlier versions
-were backward compatible, and made the (?i) apply to the whole pattern, as if
-/i were given. Now it behaves more logically, and applies the option setting
-only to what follows. PCRE has been changed to follow suit. However, if it
-finds options settings right at the start of the pattern, it extracts them into
-the global options, as before. Thus, they show up in the info data.
-
-8. Added support for the \Q...\E escape sequence. Characters in between are
-treated as literals. This is slightly different from Perl in that $ and @ are
-also handled as literals inside the quotes. In Perl, they will cause variable
-interpolation. Note the following examples:
-
- Pattern PCRE matches Perl matches
-
- \Qabc$xyz\E abc$xyz abc followed by the contents of $xyz
- \Qabc\$xyz\E abc\$xyz abc\$xyz
- \Qabc\E\$\Qxyz\E abc$xyz abc$xyz
-
-For compatibility with Perl, \Q...\E sequences are recognized inside character
-classes as well as outside them.
-
-9. Re-organized 3 code statements in pcretest to avoid "overflow in
-floating-point constant arithmetic" warnings from a Microsoft compiler. Added a
-(size_t) cast to one statement in pcretest and one in pcreposix to avoid
-signed/unsigned warnings.
-
-10. SunOS4 doesn't have strtoul(). This was used only for unpicking the -o
-option for pcretest, so I've replaced it by a simple function that does just
-that job.
-
-11. pcregrep was ending with code 0 instead of 2 for the commands "pcregrep" or
-"pcregrep -".
-
-12. Added "possessive quantifiers" ?+, *+, ++, and {,}+ which come from Sun's
-Java package. This provides some syntactic sugar for simple cases of what my
-documentation calls "once-only subpatterns". A pattern such as x*+ is the same
-as (?>x*). In other words, if what is inside (?>...) is just a single repeated
-item, you can use this simplified notation. Note that only makes sense with
-greedy quantifiers. Consequently, the use of the possessive quantifier forces
-greediness, whatever the setting of the PCRE_UNGREEDY option.
-
-13. A change of greediness default within a pattern was not taking effect at
-the current level for patterns like /(b+(?U)a+)/. It did apply to parenthesized
-subpatterns that followed. Patterns like /b+(?U)a+/ worked because the option
-was abstracted outside.
-
-14. PCRE now supports the \G assertion. It is true when the current matching
-position is at the start point of the match. This differs from \A when the
-starting offset is non-zero. Used with the /g option of pcretest (or similar
-code), it works in the same way as it does for Perl's /g option. If all
-alternatives of a regex begin with \G, the expression is anchored to the start
-match position, and the "anchored" flag is set in the compiled expression.
-
-15. Some bugs concerning the handling of certain option changes within patterns
-have been fixed. These applied to options other than (?ims). For example,
-"a(?x: b c )d" did not match "XabcdY" but did match "Xa b c dY". It should have
-been the other way round. Some of this was related to change 7 above.
-
-16. PCRE now gives errors for /[.x.]/ and /[=x=]/ as unsupported POSIX
-features, as Perl does. Previously, PCRE gave the warnings only for /[[.x.]]/
-and /[[=x=]]/. PCRE now also gives an error for /[:name:]/ because it supports
-POSIX classes only within a class (e.g. /[[:alpha:]]/).
-
-17. Added support for Perl's \C escape. This matches one byte, even in UTF8
-mode. Unlike ".", it always matches newline, whatever the setting of
-PCRE_DOTALL. However, PCRE does not permit \C to appear in lookbehind
-assertions. Perl allows it, but it doesn't (in general) work because it can't
-calculate the length of the lookbehind. At least, that's the case for Perl
-5.8.0 - I've been told they are going to document that it doesn't work in
-future.
-
-18. Added an error diagnosis for escapes that PCRE does not support: these are
-\L, \l, \N, \P, \p, \U, \u, and \X.
-
-19. Although correctly diagnosing a missing ']' in a character class, PCRE was
-reading past the end of the pattern in cases such as /[abcd/.
-
-20. PCRE was getting more memory than necessary for patterns with classes that
-contained both POSIX named classes and other characters, e.g. /[[:space:]abc/.
-
-21. Added some code, conditional on #ifdef VPCOMPAT, to make life easier for
-compiling PCRE for use with Virtual Pascal.
-
-22. Small fix to the Makefile to make it work properly if the build is done
-outside the source tree.
-
-23. Added a new extension: a condition to go with recursion. If a conditional
-subpattern starts with (?(R) the "true" branch is used if recursion has
-happened, whereas the "false" branch is used only at the top level.
-
-24. When there was a very long string of literal characters (over 255 bytes
-without UTF support, over 250 bytes with UTF support), the computation of how
-much memory was required could be incorrect, leading to segfaults or other
-strange effects.
-
-25. PCRE was incorrectly assuming anchoring (either to start of subject or to
-start of line for a non-DOTALL pattern) when a pattern started with (.*) and
-there was a subsequent back reference to those brackets. This meant that, for
-example, /(.*)\d+\1/ failed to match "abc123bc". Unfortunately, it isn't
-possible to check for precisely this case. All we can do is abandon the
-optimization if .* occurs inside capturing brackets when there are any back
-references whatsoever. (See below for a better fix that came later.)
-
-26. The handling of the optimization for finding the first character of a
-non-anchored pattern, and for finding a character that is required later in the
-match were failing in some cases. This didn't break the matching; it just
-failed to optimize when it could. The way this is done has been re-implemented.
-
-27. Fixed typo in error message for invalid (?R item (it said "(?p").
-
-28. Added a new feature that provides some of the functionality that Perl
-provides with (?{...}). The facility is termed a "callout". The way it is done
-in PCRE is for the caller to provide an optional function, by setting
-pcre_callout to its entry point. Like pcre_malloc and pcre_free, this is a
-global variable. By default it is unset, which disables all calling out. To get
-the function called, the regex must include (?C) at appropriate points. This
-is, in fact, equivalent to (?C0), and any number <= 255 may be given with (?C).
-This provides a means of identifying different callout points. When PCRE
-reaches such a point in the regex, if pcre_callout has been set, the external
-function is called. It is provided with data in a structure called
-pcre_callout_block, which is defined in pcre.h. If the function returns 0,
-matching continues; if it returns a non-zero value, the match at the current
-point fails. However, backtracking will occur if possible. [This was changed
-later and other features added - see item 49 below.]
-
-29. pcretest is upgraded to test the callout functionality. It provides a
-callout function that displays information. By default, it shows the start of
-the match and the current position in the text. There are some new data escapes
-to vary what happens:
-
- \C+ in addition, show current contents of captured substrings
- \C- do not supply a callout function
- \C!n return 1 when callout number n is reached
- \C!n!m return 1 when callout number n is reached for the mth time
-
-30. If pcregrep was called with the -l option and just a single file name, it
-output "<stdin>" if a match was found, instead of the file name.
-
-31. Improve the efficiency of the POSIX API to PCRE. If the number of capturing
-slots is less than POSIX_MALLOC_THRESHOLD, use a block on the stack to pass to
-pcre_exec(). This saves a malloc/free per call. The default value of
-POSIX_MALLOC_THRESHOLD is 10; it can be changed by --with-posix-malloc-threshold
-when configuring.
-
-32. The default maximum size of a compiled pattern is 64K. There have been a
-few cases of people hitting this limit. The code now uses macros to handle the
-storing of links as offsets within the compiled pattern. It defaults to 2-byte
-links, but this can be changed to 3 or 4 bytes by --with-link-size when
-configuring. Tests 2 and 5 work only with 2-byte links because they output
-debugging information about compiled patterns.
-
-33. Internal code re-arrangements:
-
-(a) Moved the debugging function for printing out a compiled regex into
- its own source file (printint.c) and used #include to pull it into
- pcretest.c and, when DEBUG is defined, into pcre.c, instead of having two
- separate copies.
-
-(b) Defined the list of op-code names for debugging as a macro in
- internal.h so that it is next to the definition of the opcodes.
-
-(c) Defined a table of op-code lengths for simpler skipping along compiled
- code. This is again a macro in internal.h so that it is next to the
- definition of the opcodes.
-
-34. Added support for recursive calls to individual subpatterns, along the
-lines of Robin Houston's patch (but implemented somewhat differently).
-
-35. Further mods to the Makefile to help Win32. Also, added code to pcregrep to
-allow it to read and process whole directories in Win32. This code was
-contributed by Lionel Fourquaux; it has not been tested by me.
-
-36. Added support for named subpatterns. The Python syntax (?P<name>...) is
-used to name a group. Names consist of alphanumerics and underscores, and must
-be unique. Back references use the syntax (?P=name) and recursive calls use
-(?P>name) which is a PCRE extension to the Python extension. Groups still have
-numbers. The function pcre_fullinfo() can be used after compilation to extract
-a name/number map. There are three relevant calls:
-
- PCRE_INFO_NAMEENTRYSIZE yields the size of each entry in the map
- PCRE_INFO_NAMECOUNT yields the number of entries
- PCRE_INFO_NAMETABLE yields a pointer to the map.
-
-The map is a vector of fixed-size entries. The size of each entry depends on
-the length of the longest name used. The first two bytes of each entry are the
-group number, most significant byte first. There follows the corresponding
-name, zero terminated. The names are in alphabetical order.
-
-37. Make the maximum literal string in the compiled code 250 for the non-UTF-8
-case instead of 255. Making it the same both with and without UTF-8 support
-means that the same test output works with both.
-
-38. There was a case of malloc(0) in the POSIX testing code in pcretest. Avoid
-calling malloc() with a zero argument.
-
-39. Change 25 above had to resort to a heavy-handed test for the .* anchoring
-optimization. I've improved things by keeping a bitmap of backreferences with
-numbers 1-31 so that if .* occurs inside capturing brackets that are not in
-fact referenced, the optimization can be applied. It is unlikely that a
-relevant occurrence of .* (i.e. one which might indicate anchoring or forcing
-the match to follow \n) will appear inside brackets with a number greater than
-31, but if it does, any back reference > 31 suppresses the optimization.
-
-40. Added a new compile-time option PCRE_NO_AUTO_CAPTURE. This has the effect
-of disabling numbered capturing parentheses. 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 will acquire numbers in the usual
-way).
-
-41. Redesigned the return codes from the match() function into yes/no/error so
-that errors can be passed back from deep inside the nested calls. A malloc
-failure while inside a recursive subpattern call now causes the
-PCRE_ERROR_NOMEMORY return instead of quietly going wrong.
-
-42. It is now possible to set a limit on the number of times the match()
-function is called in a call to pcre_exec(). This facility makes it possible to
-limit the amount of recursion and backtracking, though not in a directly
-obvious way, because the match() function is used in a number of different
-circumstances. The count starts from zero for each position in the subject
-string (for non-anchored patterns). The default limit is, for compatibility, a
-large number, namely 10 000 000. You can change this in two ways:
-
-(a) When configuring PCRE before making, you can use --with-match-limit=n
- to set a default value for the compiled library.
-
-(b) For each call to pcre_exec(), you can pass a pcre_extra block in which
- a different value is set. See 45 below.
-
-If the limit is exceeded, pcre_exec() returns PCRE_ERROR_MATCHLIMIT.
-
-43. Added a new function pcre_config(int, void *) to enable run-time extraction
-of things that can be changed at compile time. The first argument specifies
-what is wanted and the second points to where the information is to be placed.
-The current list of available information is:
-
- PCRE_CONFIG_UTF8
-
-The output is an integer that is set to one if UTF-8 support is available;
-otherwise it is set to zero.
-
- PCRE_CONFIG_NEWLINE
-
-The output is an integer that it set to the value of the code that is used for
-newline. It is either LF (10) or CR (13).
-
- PCRE_CONFIG_LINK_SIZE
-
-The output is an integer that contains the number of bytes used for internal
-linkage in compiled expressions. The value is 2, 3, or 4. See item 32 above.
-
- PCRE_CONFIG_POSIX_MALLOC_THRESHOLD
-
-The output is an integer that contains the threshold above which the POSIX
-interface uses malloc() for output vectors. See item 31 above.
-
- PCRE_CONFIG_MATCH_LIMIT
-
-The output is an unsigned integer that contains the default limit of the number
-of match() calls in a pcre_exec() execution. See 42 above.
-
-44. pcretest has been upgraded by the addition of the -C option. This causes it
-to extract all the available output from the new pcre_config() function, and to
-output it. The program then exits immediately.
-
-45. A need has arisen to pass over additional data with calls to pcre_exec() in
-order to support additional features. One way would have been to define
-pcre_exec2() (for example) with extra arguments, but this would not have been
-extensible, and would also have required all calls to the original function to
-be mapped to the new one. Instead, I have chosen to extend the mechanism that
-is used for passing in "extra" data from pcre_study().
-
-The pcre_extra structure is now exposed and defined in pcre.h. It currently
-contains the following fields:
-
- flags a bitmap indicating which of the following fields are set
- study_data opaque data from pcre_study()
- match_limit a way of specifying a limit on match() calls for a specific
- call to pcre_exec()
- callout_data data for callouts (see 49 below)
-
-The flag bits are also defined in pcre.h, and are
-
- PCRE_EXTRA_STUDY_DATA
- PCRE_EXTRA_MATCH_LIMIT
- PCRE_EXTRA_CALLOUT_DATA
-
-The pcre_study() function now returns one of these new pcre_extra blocks, with
-the actual study data pointed to by the study_data field, and the
-PCRE_EXTRA_STUDY_DATA flag set. This can be passed directly to pcre_exec() as
-before. That is, this change is entirely upwards-compatible and requires no
-change to existing code.
-
-If you want to pass in additional data to pcre_exec(), you can either place it
-in a pcre_extra block provided by pcre_study(), or create your own pcre_extra
-block.
-
-46. pcretest has been extended to test the PCRE_EXTRA_MATCH_LIMIT feature. If a
-data string contains the escape sequence \M, pcretest calls pcre_exec() several
-times with different match limits, until it finds the minimum value needed for
-pcre_exec() to complete. The value is then output. This can be instructive; for
-most simple matches the number is quite small, but for pathological cases it
-gets very large very quickly.
-
-47. There's a new option for pcre_fullinfo() called PCRE_INFO_STUDYSIZE. It
-returns the size of the data block pointed to by the study_data field in a
-pcre_extra block, that is, the value that was passed as the argument to
-pcre_malloc() when PCRE was getting memory in which to place the information
-created by pcre_study(). The fourth argument should point to a size_t variable.
-pcretest has been extended so that this information is shown after a successful
-pcre_study() call when information about the compiled regex is being displayed.
-
-48. Cosmetic change to Makefile: there's no need to have / after $(DESTDIR)
-because what follows is always an absolute path. (Later: it turns out that this
-is more than cosmetic for MinGW, because it doesn't like empty path
-components.)
-
-49. Some changes have been made to the callout feature (see 28 above):
-
-(i) A callout function now has three choices for what it returns:
-
- 0 => success, carry on matching
- > 0 => failure at this point, but backtrack if possible
- < 0 => serious error, return this value from pcre_exec()
-
- Negative values should normally be chosen from the set of PCRE_ERROR_xxx
- values. In particular, returning PCRE_ERROR_NOMATCH forces a standard
- "match failed" error. The error number PCRE_ERROR_CALLOUT is reserved for
- use by callout functions. It will never be used by PCRE itself.
-
-(ii) The pcre_extra structure (see 45 above) has a void * field called
- callout_data, with corresponding flag bit PCRE_EXTRA_CALLOUT_DATA. The
- pcre_callout_block structure has a field of the same name. The contents of
- the field passed in the pcre_extra structure are passed to the callout
- function in the corresponding field in the callout block. This makes it
- easier to use the same callout-containing regex from multiple threads. For
- testing, the pcretest program has a new data escape
-
- \C*n pass the number n (may be negative) as callout_data
-
- If the callout function in pcretest receives a non-zero value as
- callout_data, it returns that value.
-
-50. Makefile wasn't handling CFLAGS properly when compiling dftables. Also,
-there were some redundant $(CFLAGS) in commands that are now specified as
-$(LINK), which already includes $(CFLAGS).
-
-51. Extensions to UTF-8 support are listed below. These all apply when (a) PCRE
-has been compiled with UTF-8 support *and* pcre_compile() has been compiled
-with the PCRE_UTF8 flag. Patterns that are compiled without that flag assume
-one-byte characters throughout. Note that case-insensitive matching applies
-only to characters whose values are less than 256. PCRE doesn't support the
-notion of cases for higher-valued characters.
-
-(i) A character class whose characters are all within 0-255 is handled as
- a bit map, and the map is inverted for negative classes. Previously, a
- character > 255 always failed to match such a class; however it should
- match if the class was a negative one (e.g. [^ab]). This has been fixed.
-
-(ii) A negated character class with a single character < 255 is coded as
- "not this character" (OP_NOT). This wasn't working properly when the test
- character was multibyte, either singly or repeated.
-
-(iii) Repeats of multibyte characters are now handled correctly in UTF-8
- mode, for example: \x{100}{2,3}.
-
-(iv) The character escapes \b, \B, \d, \D, \s, \S, \w, and \W (either
- singly or repeated) now correctly test multibyte characters. However,
- PCRE doesn't recognize any characters with values greater than 255 as
- digits, spaces, or word characters. Such characters always match \D, \S,
- and \W, and never match \d, \s, or \w.
-
-(v) Classes may now contain characters and character ranges with values
- greater than 255. For example: [ab\x{100}-\x{400}].
-
-(vi) pcregrep now has a --utf-8 option (synonym -u) which makes it call
- PCRE in UTF-8 mode.
-
-52. The info request value PCRE_INFO_FIRSTCHAR has been renamed
-PCRE_INFO_FIRSTBYTE because it is a byte value. However, the old name is
-retained for backwards compatibility. (Note that LASTLITERAL is also a byte
-value.)
-
-53. The single man page has become too large. I have therefore split it up into
-a number of separate man pages. These also give rise to individual HTML pages;
-these are now put in a separate directory, and there is an index.html page that
-lists them all. Some hyperlinking between the pages has been installed.
-
-54. Added convenience functions for handling named capturing parentheses.
-
-55. Unknown escapes inside character classes (e.g. [\M]) and escapes that
-aren't interpreted therein (e.g. [\C]) are literals in Perl. This is now also
-true in PCRE, except when the PCRE_EXTENDED option is set, in which case they
-are faulted.
-
-56. Introduced HOST_CC and HOST_CFLAGS which can be set in the environment when
-calling configure. These values are used when compiling the dftables.c program
-which is run to generate the source of the default character tables. They
-default to the values of CC and CFLAGS. If you are cross-compiling PCRE,
-you will need to set these values.
-
-57. Updated the building process for Windows DLL, as provided by Fred Cox.
-
-
-Version 3.9 02-Jan-02
----------------------
-
-1. A bit of extraneous text had somehow crept into the pcregrep documentation.
-
-2. If --disable-static was given, the building process failed when trying to
-build pcretest and pcregrep. (For some reason it was using libtool to compile
-them, which is not right, as they aren't part of the library.)
-
-
-Version 3.8 18-Dec-01
----------------------
-
-1. The experimental UTF-8 code was completely screwed up. It was packing the
-bytes in the wrong order. How dumb can you get?
-
-
-Version 3.7 29-Oct-01
----------------------
-
-1. In updating pcretest to check change 1 of version 3.6, I screwed up.
-This caused pcretest, when used on the test data, to segfault. Unfortunately,
-this didn't happen under Solaris 8, where I normally test things.
-
-2. The Makefile had to be changed to make it work on BSD systems, where 'make'
-doesn't seem to recognize that ./xxx and xxx are the same file. (This entry
-isn't in ChangeLog distributed with 3.7 because I forgot when I hastily made
-this fix an hour or so after the initial 3.7 release.)
-
-
-Version 3.6 23-Oct-01
----------------------
-
-1. Crashed with /(sens|respons)e and \1ibility/ and "sense and sensibility" if
-offsets passed as NULL with zero offset count.
-
-2. The config.guess and config.sub files had not been updated when I moved to
-the latest autoconf.
-
-
-Version 3.5 15-Aug-01
----------------------
-
-1. Added some missing #if !defined NOPOSIX conditionals in pcretest.c that
-had been forgotten.
-
-2. By using declared but undefined structures, we can avoid using "void"
-definitions in pcre.h while keeping the internal definitions of the structures
-private.
-
-3. The distribution is now built using autoconf 2.50 and libtool 1.4. From a
-user point of view, this means that both static and shared libraries are built
-by default, but this can be individually controlled. More of the work of
-handling this static/shared cases is now inside libtool instead of PCRE's make
-file.
-
-4. The pcretest utility is now installed along with pcregrep because it is
-useful for users (to test regexs) and by doing this, it automatically gets
-relinked by libtool. The documentation has been turned into a man page, so
-there are now .1, .txt, and .html versions in /doc.
-
-5. Upgrades to pcregrep:
- (i) Added long-form option names like gnu grep.
- (ii) Added --help to list all options with an explanatory phrase.
- (iii) Added -r, --recursive to recurse into sub-directories.
- (iv) Added -f, --file to read patterns from a file.
-
-6. pcre_exec() was referring to its "code" argument before testing that
-argument for NULL (and giving an error if it was NULL).
-
-7. Upgraded Makefile.in to allow for compiling in a different directory from
-the source directory.
-
-8. Tiny buglet in pcretest: when pcre_fullinfo() was called to retrieve the
-options bits, the pointer it was passed was to an int instead of to an unsigned
-long int. This mattered only on 64-bit systems.
-
-9. Fixed typo (3.4/1) in pcre.h again. Sigh. I had changed pcre.h (which is
-generated) instead of pcre.in, which it its source. Also made the same change
-in several of the .c files.
-
-10. A new release of gcc defines printf() as a macro, which broke pcretest
-because it had an ifdef in the middle of a string argument for printf(). Fixed
-by using separate calls to printf().
-
-11. Added --enable-newline-is-cr and --enable-newline-is-lf to the configure
-script, to force use of CR or LF instead of \n in the source. On non-Unix
-systems, the value can be set in config.h.
-
-12. The limit of 200 on non-capturing parentheses is a _nesting_ limit, not an
-absolute limit. Changed the text of the error message to make this clear, and
-likewise updated the man page.
-
-13. The limit of 99 on the number of capturing subpatterns has been removed.
-The new limit is 65535, which I hope will not be a "real" limit.
-
-
-Version 3.4 22-Aug-00
----------------------
-
-1. Fixed typo in pcre.h: unsigned const char * changed to const unsigned char *.
-
-2. Diagnose condition (?(0) as an error instead of crashing on matching.
-
-
-Version 3.3 01-Aug-00
----------------------
-
-1. If an octal character was given, but the value was greater than \377, it
-was not getting masked to the least significant bits, as documented. This could
-lead to crashes in some systems.
-
-2. Perl 5.6 (if not earlier versions) accepts classes like [a-\d] and treats
-the hyphen as a literal. PCRE used to give an error; it now behaves like Perl.
-
-3. Added the functions pcre_free_substring() and pcre_free_substring_list().
-These just pass their arguments on to (pcre_free)(), but they are provided
-because some uses of PCRE bind it to non-C systems that can call its functions,
-but cannot call free() or pcre_free() directly.
-
-4. Add "make test" as a synonym for "make check". Corrected some comments in
-the Makefile.
-
-5. Add $(DESTDIR)/ in front of all the paths in the "install" target in the
-Makefile.
-
-6. Changed the name of pgrep to pcregrep, because Solaris has introduced a
-command called pgrep for grepping around the active processes.
-
-7. Added the beginnings of support for UTF-8 character strings.
-
-8. Arranged for the Makefile to pass over the settings of CC, CFLAGS, and
-RANLIB to ./ltconfig so that they are used by libtool. I think these are all
-the relevant ones. (AR is not passed because ./ltconfig does its own figuring
-out for the ar command.)
-
-
-Version 3.2 12-May-00
----------------------
-
-This is purely a bug fixing release.
-
-1. If the pattern /((Z)+|A)*/ was matched agained ZABCDEFG it matched Z instead
-of ZA. This was just one example of several cases that could provoke this bug,
-which was introduced by change 9 of version 2.00. The code for breaking
-infinite loops after an iteration that matches an empty string was't working
-correctly.
-
-2. The pcretest program was not imitating Perl correctly for the pattern /a*/g
-when matched against abbab (for example). After matching an empty string, it
-wasn't forcing anchoring when setting PCRE_NOTEMPTY for the next attempt; this
-caused it to match further down the string than it should.
-
-3. The code contained an inclusion of sys/types.h. It isn't clear why this
-was there because it doesn't seem to be needed, and it causes trouble on some
-systems, as it is not a Standard C header. It has been removed.
-
-4. Made 4 silly changes to the source to avoid stupid compiler warnings that
-were reported on the Macintosh. The changes were from
-
- while ((c = *(++ptr)) != 0 && c != '\n');
-to
- while ((c = *(++ptr)) != 0 && c != '\n') ;
-
-Totally extraordinary, but if that's what it takes...
-
-5. PCRE is being used in one environment where neither memmove() nor bcopy() is
-available. Added HAVE_BCOPY and an autoconf test for it; if neither
-HAVE_MEMMOVE nor HAVE_BCOPY is set, use a built-in emulation function which
-assumes the way PCRE uses memmove() (always moving upwards).
-
-6. PCRE is being used in one environment where strchr() is not available. There
-was only one use in pcre.c, and writing it out to avoid strchr() probably gives
-faster code anyway.
-
-
-Version 3.1 09-Feb-00
----------------------
-
-The only change in this release is the fixing of some bugs in Makefile.in for
-the "install" target:
-
-(1) It was failing to install pcreposix.h.
-
-(2) It was overwriting the pcre.3 man page with the pcreposix.3 man page.
-
-
-Version 3.0 01-Feb-00
----------------------
-
-1. Add support for the /+ modifier to perltest (to output $` like it does in
-pcretest).
-
-2. Add support for the /g modifier to perltest.
-
-3. Fix pcretest so that it behaves even more like Perl for /g when the pattern
-matches null strings.
-
-4. Fix perltest so that it doesn't do unwanted things when fed an empty
-pattern. Perl treats empty patterns specially - it reuses the most recent
-pattern, which is not what we want. Replace // by /(?#)/ in order to avoid this
-effect.
-
-5. The POSIX interface was broken in that it was just handing over the POSIX
-captured string vector to pcre_exec(), but (since release 2.00) PCRE has
-required a bigger vector, with some working space on the end. This means that
-the POSIX wrapper now has to get and free some memory, and copy the results.
-
-6. Added some simple autoconf support, placing the test data and the
-documentation in separate directories, re-organizing some of the
-information files, and making it build pcre-config (a GNU standard). Also added
-libtool support for building PCRE as a shared library, which is now the
-default.
-
-7. Got rid of the leading zero in the definition of PCRE_MINOR because 08 and
-09 are not valid octal constants. Single digits will be used for minor values
-less than 10.
-
-8. Defined REG_EXTENDED and REG_NOSUB as zero in the POSIX header, so that
-existing programs that set these in the POSIX interface can use PCRE without
-modification.
-
-9. Added a new function, pcre_fullinfo() with an extensible interface. It can
-return all that pcre_info() returns, plus additional data. The pcre_info()
-function is retained for compatibility, but is considered to be obsolete.
-
-10. Added experimental recursion feature (?R) to handle one common case that
-Perl 5.6 will be able to do with (?p{...}).
-
-11. Added support for POSIX character classes like [:alpha:], which Perl is
-adopting.
-
-
-Version 2.08 31-Aug-99
-----------------------
-
-1. When startoffset was not zero and the pattern began with ".*", PCRE was not
-trying to match at the startoffset position, but instead was moving forward to
-the next newline as if a previous match had failed.
-
-2. pcretest was not making use of PCRE_NOTEMPTY when repeating for /g and /G,
-and could get into a loop if a null string was matched other than at the start
-of the subject.
-
-3. Added definitions of PCRE_MAJOR and PCRE_MINOR to pcre.h so the version can
-be distinguished at compile time, and for completeness also added PCRE_DATE.
-
-5. Added Paul Sokolovsky's minor changes to make it easy to compile a Win32 DLL
-in GnuWin32 environments.
-
-
-Version 2.07 29-Jul-99
-----------------------
-
-1. The documentation is now supplied in plain text form and HTML as well as in
-the form of man page sources.
-
-2. C++ compilers don't like assigning (void *) values to other pointer types.
-In particular this affects malloc(). Although there is no problem in Standard
-C, I've put in casts to keep C++ compilers happy.
-
-3. Typo on pcretest.c; a cast of (unsigned char *) in the POSIX regexec() call
-should be (const char *).
-
-4. If NOPOSIX is defined, pcretest.c compiles without POSIX support. This may
-be useful for non-Unix systems who don't want to bother with the POSIX stuff.
-However, I haven't made this a standard facility. The documentation doesn't
-mention it, and the Makefile doesn't support it.
-
-5. The Makefile now contains an "install" target, with editable destinations at
-the top of the file. The pcretest program is not installed.
-
-6. pgrep -V now gives the PCRE version number and date.
-
-7. Fixed bug: a zero repetition after a literal string (e.g. /abcde{0}/) was
-causing the entire string to be ignored, instead of just the last character.
-
-8. If a pattern like /"([^\\"]+|\\.)*"/ is applied in the normal way to a
-non-matching string, it can take a very, very long time, even for strings of
-quite modest length, because of the nested recursion. PCRE now does better in
-some of these cases. It does this by remembering the last required literal
-character in the pattern, and pre-searching the subject to ensure it is present
-before running the real match. In other words, it applies a heuristic to detect
-some types of certain failure quickly, and in the above example, if presented
-with a string that has no trailing " it gives "no match" very quickly.
-
-9. A new runtime option PCRE_NOTEMPTY causes null string matches to be ignored;
-other alternatives are tried instead.
-
-
-Version 2.06 09-Jun-99
-----------------------
-
-1. Change pcretest's output for amount of store used to show just the code
-space, because the remainder (the data block) varies in size between 32-bit and
-64-bit systems.
-
-2. Added an extra argument to pcre_exec() to supply an offset in the subject to
-start matching at. This allows lookbehinds to work when searching for multiple
-occurrences in a string.
-
-3. Added additional options to pcretest for testing multiple occurrences:
-
- /+ outputs the rest of the string that follows a match
- /g loops for multiple occurrences, using the new startoffset argument
- /G loops for multiple occurrences by passing an incremented pointer
-
-4. PCRE wasn't doing the "first character" optimization for patterns starting
-with \b or \B, though it was doing it for other lookbehind assertions. That is,
-it wasn't noticing that a match for a pattern such as /\bxyz/ has to start with
-the letter 'x'. On long subject strings, this gives a significant speed-up.
-
-
-Version 2.05 21-Apr-99
-----------------------
-
-1. Changed the type of magic_number from int to long int so that it works
-properly on 16-bit systems.
-
-2. Fixed a bug which caused patterns starting with .* not to work correctly
-when the subject string contained newline characters. PCRE was assuming
-anchoring for such patterns in all cases, which is not correct because .* will
-not pass a newline unless PCRE_DOTALL is set. It now assumes anchoring only if
-DOTALL is set at top level; otherwise it knows that patterns starting with .*
-must be retried after every newline in the subject.
-
-
-Version 2.04 18-Feb-99
-----------------------
-
-1. For parenthesized subpatterns with repeats whose minimum was zero, the
-computation of the store needed to hold the pattern was incorrect (too large).
-If such patterns were nested a few deep, this could multiply and become a real
-problem.
-
-2. Added /M option to pcretest to show the memory requirement of a specific
-pattern. Made -m a synonym of -s (which does this globally) for compatibility.
-
-3. Subpatterns of the form (regex){n,m} (i.e. limited maximum) were being
-compiled in such a way that the backtracking after subsequent failure was
-pessimal. Something like (a){0,3} was compiled as (a)?(a)?(a)? instead of
-((a)((a)(a)?)?)? with disastrous performance if the maximum was of any size.
-
-
-Version 2.03 02-Feb-99
-----------------------
-
-1. Fixed typo and small mistake in man page.
-
-2. Added 4th condition (GPL supersedes if conflict) and created separate
-LICENCE file containing the conditions.
-
-3. Updated pcretest so that patterns such as /abc\/def/ work like they do in
-Perl, that is the internal \ allows the delimiter to be included in the
-pattern. Locked out the use of \ as a delimiter. If \ immediately follows
-the final delimiter, add \ to the end of the pattern (to test the error).
-
-4. Added the convenience functions for extracting substrings after a successful
-match. Updated pcretest to make it able to test these functions.
-
-
-Version 2.02 14-Jan-99
-----------------------
-
-1. Initialized the working variables associated with each extraction so that
-their saving and restoring doesn't refer to uninitialized store.
-
-2. Put dummy code into study.c in order to trick the optimizer of the IBM C
-compiler for OS/2 into generating correct code. Apparently IBM isn't going to
-fix the problem.
-
-3. Pcretest: the timing code wasn't using LOOPREPEAT for timing execution
-calls, and wasn't printing the correct value for compiling calls. Increased the
-default value of LOOPREPEAT, and the number of significant figures in the
-times.
-
-4. Changed "/bin/rm" in the Makefile to "-rm" so it works on Windows NT.
-
-5. Renamed "deftables" as "dftables" to get it down to 8 characters, to avoid
-a building problem on Windows NT with a FAT file system.
-
-
-Version 2.01 21-Oct-98
-----------------------
-
-1. Changed the API for pcre_compile() to allow for the provision of a pointer
-to character tables built by pcre_maketables() in the current locale. If NULL
-is passed, the default tables are used.
-
-
-Version 2.00 24-Sep-98
-----------------------
-
-1. Since the (>?) facility is in Perl 5.005, don't require PCRE_EXTRA to enable
-it any more.
-
-2. Allow quantification of (?>) groups, and make it work correctly.
-
-3. The first character computation wasn't working for (?>) groups.
-
-4. Correct the implementation of \Z (it is permitted to match on the \n at the
-end of the subject) and add 5.005's \z, which really does match only at the
-very end of the subject.
-
-5. Remove the \X "cut" facility; Perl doesn't have it, and (?> is neater.
-
-6. Remove the ability to specify CASELESS, MULTILINE, DOTALL, and
-DOLLAR_END_ONLY at runtime, to make it possible to implement the Perl 5.005
-localized options. All options to pcre_study() were also removed.
-
-7. Add other new features from 5.005:
-
- $(?<= positive lookbehind
- $(?<! negative lookbehind
- (?imsx-imsx) added the unsetting capability
- such a setting is global if at outer level; local otherwise
- (?imsx-imsx:) non-capturing groups with option setting
- (?(cond)re|re) conditional pattern matching
-
- A backreference to itself in a repeated group matches the previous
- captured string.
-
-8. General tidying up of studying (both automatic and via "study")
-consequential on the addition of new assertions.
-
-9. As in 5.005, unlimited repeated groups that could match an empty substring
-are no longer faulted at compile time. Instead, the loop is forcibly broken at
-runtime if any iteration does actually match an empty substring.
-
-10. Include the RunTest script in the distribution.
-
-11. Added tests from the Perl 5.005_02 distribution. This showed up a few
-discrepancies, some of which were old and were also with respect to 5.004. They
-have now been fixed.
-
-
-Version 1.09 28-Apr-98
-----------------------
-
-1. A negated single character class followed by a quantifier with a minimum
-value of one (e.g. [^x]{1,6} ) was not compiled correctly. This could lead to
-program crashes, or just wrong answers. This did not apply to negated classes
-containing more than one character, or to minima other than one.
-
-
-Version 1.08 27-Mar-98
-----------------------
-
-1. Add PCRE_UNGREEDY to invert the greediness of quantifiers.
-
-2. Add (?U) and (?X) to set PCRE_UNGREEDY and PCRE_EXTRA respectively. The
-latter must appear before anything that relies on it in the pattern.
-
-
-Version 1.07 16-Feb-98
-----------------------
-
-1. A pattern such as /((a)*)*/ was not being diagnosed as in error (unlimited
-repeat of a potentially empty string).
-
-
-Version 1.06 23-Jan-98
-----------------------
-
-1. Added Markus Oberhumer's little patches for C++.
-
-2. Literal strings longer than 255 characters were broken.
-
-
-Version 1.05 23-Dec-97
-----------------------
-
-1. Negated character classes containing more than one character were failing if
-PCRE_CASELESS was set at run time.
-
-
-Version 1.04 19-Dec-97
-----------------------
-
-1. Corrected the man page, where some "const" qualifiers had been omitted.
-
-2. Made debugging output print "{0,xxx}" instead of just "{,xxx}" to agree with
-input syntax.
-
-3. Fixed memory leak which occurred when a regex with back references was
-matched with an offsets vector that wasn't big enough. The temporary memory
-that is used in this case wasn't being freed if the match failed.
-
-4. Tidied pcretest to ensure it frees memory that it gets.
-
-5. Temporary memory was being obtained in the case where the passed offsets
-vector was exactly big enough.
-
-6. Corrected definition of offsetof() from change 5 below.
-
-7. I had screwed up change 6 below and broken the rules for the use of
-setjmp(). Now fixed.
-
-
-Version 1.03 18-Dec-97
-----------------------
-
-1. A erroneous regex with a missing opening parenthesis was correctly
-diagnosed, but PCRE attempted to access brastack[-1], which could cause crashes
-on some systems.
-
-2. Replaced offsetof(real_pcre, code) by offsetof(real_pcre, code[0]) because
-it was reported that one broken compiler failed on the former because "code" is
-also an independent variable.
-
-3. The erroneous regex a[]b caused an array overrun reference.
-
-4. A regex ending with a one-character negative class (e.g. /[^k]$/) did not
-fail on data ending with that character. (It was going on too far, and checking
-the next character, typically a binary zero.) This was specific to the
-optimized code for single-character negative classes.
-
-5. Added a contributed patch from the TIN world which does the following:
-
- + Add an undef for memmove, in case the the system defines a macro for it.
-
- + Add a definition of offsetof(), in case there isn't one. (I don't know
- the reason behind this - offsetof() is part of the ANSI standard - but
- it does no harm).
-
- + Reduce the ifdef's in pcre.c using macro DPRINTF, thereby eliminating
- most of the places where whitespace preceded '#'. I have given up and
- allowed the remaining 2 cases to be at the margin.
-
- + Rename some variables in pcre to eliminate shadowing. This seems very
- pedantic, but does no harm, of course.
-
-6. Moved the call to setjmp() into its own function, to get rid of warnings
-from gcc -Wall, and avoided calling it at all unless PCRE_EXTRA is used.
-
-7. Constructs such as \d{8,} were compiling into the equivalent of
-\d{8}\d{0,65527} instead of \d{8}\d* which didn't make much difference to the
-outcome, but in this particular case used more store than had been allocated,
-which caused the bug to be discovered because it threw up an internal error.
-
-8. The debugging code in both pcre and pcretest for outputting the compiled
-form of a regex was going wrong in the case of back references followed by
-curly-bracketed repeats.
-
-
-Version 1.02 12-Dec-97
-----------------------
-
-1. Typos in pcre.3 and comments in the source fixed.
-
-2. Applied a contributed patch to get rid of places where it used to remove
-'const' from variables, and fixed some signed/unsigned and uninitialized
-variable warnings.
-
-3. Added the "runtest" target to Makefile.
-
-4. Set default compiler flag to -O2 rather than just -O.
-
-
-Version 1.01 19-Nov-97
-----------------------
-
-1. PCRE was failing to diagnose unlimited repeat of empty string for patterns
-like /([ab]*)*/, that is, for classes with more than one character in them.
-
-2. Likewise, it wasn't diagnosing patterns with "once-only" subpatterns, such
-as /((?>a*))*/ (a PCRE_EXTRA facility).
-
-
-Version 1.00 18-Nov-97
-----------------------
-
-1. Added compile-time macros to support systems such as SunOS4 which don't have
-memmove() or strerror() but have other things that can be used instead.
-
-2. Arranged that "make clean" removes the executables.
-
-
-Version 0.99 27-Oct-97
-----------------------
-
-1. Fixed bug in code for optimizing classes with only one character. It was
-initializing a 32-byte map regardless, which could cause it to run off the end
-of the memory it had got.
-
-2. Added, conditional on PCRE_EXTRA, the proposed (?>REGEX) construction.
-
-
-Version 0.98 22-Oct-97
-----------------------
-
-1. Fixed bug in code for handling temporary memory usage when there are more
-back references than supplied space in the ovector. This could cause segfaults.
-
-
-Version 0.97 21-Oct-97
-----------------------
-
-1. Added the \X "cut" facility, conditional on PCRE_EXTRA.
-
-2. Optimized negated single characters not to use a bit map.
-
-3. Brought error texts together as macro definitions; clarified some of them;
-fixed one that was wrong - it said "range out of order" when it meant "invalid
-escape sequence".
-
-4. Changed some char * arguments to const char *.
-
-5. Added PCRE_NOTBOL and PCRE_NOTEOL (from POSIX).
-
-6. Added the POSIX-style API wrapper in pcreposix.a and testing facilities in
-pcretest.
-
-
-Version 0.96 16-Oct-97
-----------------------
-
-1. Added a simple "pgrep" utility to the distribution.
-
-2. Fixed an incompatibility with Perl: "{" is now treated as a normal character
-unless it appears in one of the precise forms "{ddd}", "{ddd,}", or "{ddd,ddd}"
-where "ddd" means "one or more decimal digits".
-
-3. Fixed serious bug. If a pattern had a back reference, but the call to
-pcre_exec() didn't supply a large enough ovector to record the related
-identifying subpattern, the match always failed. PCRE now remembers the number
-of the largest back reference, and gets some temporary memory in which to save
-the offsets during matching if necessary, in order to ensure that
-backreferences always work.
-
-4. Increased the compatibility with Perl in a number of ways:
-
- (a) . no longer matches \n by default; an option PCRE_DOTALL is provided
- to request this handling. The option can be set at compile or exec time.
-
- (b) $ matches before a terminating newline by default; an option
- PCRE_DOLLAR_ENDONLY is provided to override this (but not in multiline
- mode). The option can be set at compile or exec time.
-
- (c) The handling of \ followed by a digit other than 0 is now supposed to be
- the same as Perl's. If the decimal number it represents is less than 10
- or there aren't that many previous left capturing parentheses, an octal
- escape is read. Inside a character class, it's always an octal escape,
- even if it is a single digit.
-
- (d) An escaped but undefined alphabetic character is taken as a literal,
- unless PCRE_EXTRA is set. Currently this just reserves the remaining
- escapes.
-
- (e) {0} is now permitted. (The previous item is removed from the compiled
- pattern).
-
-5. Changed all the names of code files so that the basic parts are no longer
-than 10 characters, and abolished the teeny "globals.c" file.
-
-6. Changed the handling of character classes; they are now done with a 32-byte
-bit map always.
-
-7. Added the -d and /D options to pcretest to make it possible to look at the
-internals of compilation without having to recompile pcre.
-
-
-Version 0.95 23-Sep-97
-----------------------
-
-1. Fixed bug in pre-pass concerning escaped "normal" characters such as \x5c or
-\x20 at the start of a run of normal characters. These were being treated as
-real characters, instead of the source characters being re-checked.
-
-
-Version 0.94 18-Sep-97
-----------------------
-
-1. The functions are now thread-safe, with the caveat that the global variables
-containing pointers to malloc() and free() or alternative functions are the
-same for all threads.
-
-2. Get pcre_study() to generate a bitmap of initial characters for non-
-anchored patterns when this is possible, and use it if passed to pcre_exec().
-
-
-Version 0.93 15-Sep-97
-----------------------
-
-1. /(b)|(:+)/ was computing an incorrect first character.
-
-2. Add pcre_study() to the API and the passing of pcre_extra to pcre_exec(),
-but not actually doing anything yet.
-
-3. Treat "-" characters in classes that cannot be part of ranges as literals,
-as Perl does (e.g. [-az] or [az-]).
-
-4. Set the anchored flag if a branch starts with .* or .*? because that tests
-all possible positions.
-
-5. Split up into different modules to avoid including unneeded functions in a
-compiled binary. However, compile and exec are still in one module. The "study"
-function is split off.
-
-6. The character tables are now in a separate module whose source is generated
-by an auxiliary program - but can then be edited by hand if required. There are
-now no calls to isalnum(), isspace(), isdigit(), isxdigit(), tolower() or
-toupper() in the code.
-
-7. Turn the malloc/free funtions variables into pcre_malloc and pcre_free and
-make them global. Abolish the function for setting them, as the caller can now
-set them directly.
-
-
-Version 0.92 11-Sep-97
-----------------------
-
-1. A repeat with a fixed maximum and a minimum of 1 for an ordinary character
-(e.g. /a{1,3}/) was broken (I mis-optimized it).
-
-2. Caseless matching was not working in character classes if the characters in
-the pattern were in upper case.
-
-3. Make ranges like [W-c] work in the same way as Perl for caseless matching.
-
-4. Make PCRE_ANCHORED public and accept as a compile option.
-
-5. Add an options word to pcre_exec() and accept PCRE_ANCHORED and
-PCRE_CASELESS at run time. Add escapes \A and \I to pcretest to cause it to
-pass them.
-
-6. Give an error if bad option bits passed at compile or run time.
-
-7. Add PCRE_MULTILINE at compile and exec time, and (?m) as well. Add \M to
-pcretest to cause it to pass that flag.
-
-8. Add pcre_info(), to get the number of identifying subpatterns, the stored
-options, and the first character, if set.
-
-9. Recognize C+ or C{n,m} where n >= 1 as providing a fixed starting character.
-
-
-Version 0.91 10-Sep-97
-----------------------
-
-1. PCRE was failing to diagnose unlimited repeats of subpatterns that could
-match the empty string as in /(a*)*/. It was looping and ultimately crashing.
-
-2. PCRE was looping on encountering an indefinitely repeated back reference to
-a subpattern that had matched an empty string, e.g. /(a|)\1*/. It now does what
-Perl does - treats the match as successful.
-
-****
diff --git a/ext/pcre/pcrelib/LICENCE b/ext/pcre/pcrelib/LICENCE
deleted file mode 100644
index 09a242c101..0000000000
--- a/ext/pcre/pcrelib/LICENCE
+++ /dev/null
@@ -1,54 +0,0 @@
-PCRE LICENCE
-------------
-
-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 <ph10@cam.ac.uk>
-
-University of Cambridge Computing Service,
-Cambridge, England. Phone: +44 1223 334714.
-
-Copyright (c) 1997-2003 University of Cambridge
-
-Permission is granted to anyone to use this software for any purpose on any
-computer system, and to redistribute it freely, subject to the following
-restrictions:
-
-1. This software is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
-
-2. The origin of this software must not be misrepresented, either by
- explicit claim or by omission. In practice, this means that if you use
- PCRE in software that you distribute to others, commercially or
- otherwise, you must put a sentence like this
-
- Regular expression support is provided by the PCRE library package,
- which is open source software, written by Philip Hazel, and copyright
- by the University of Cambridge, England.
-
- somewhere reasonably visible in your documentation and in any relevant
- files or online help data or similar. A reference to the ftp site for
- the source, that is, to
-
- ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/
-
- should also be given in the documentation. However, this condition is not
- intended to apply to whole chains of software. If package A includes PCRE,
- it must acknowledge it, but if package B is software that includes package
- A, the condition is not imposed on package B (unless it uses PCRE
- independently).
-
-3. Altered versions must be plainly marked as such, and must not be
- misrepresented as being the original software.
-
-4. If PCRE is embedded in any software that is released under the GNU
- General Purpose Licence (GPL), or Lesser General Purpose Licence (LGPL),
- then the terms of that licence shall supersede any condition above with
- which it is incompatible.
-
-The documentation for PCRE, supplied in the "doc" directory, is distributed
-under the same terms as the software itself.
-
-End
diff --git a/ext/pcre/pcrelib/NEWS b/ext/pcre/pcrelib/NEWS
deleted file mode 100644
index 26219749e9..0000000000
--- a/ext/pcre/pcrelib/NEWS
+++ /dev/null
@@ -1,154 +0,0 @@
-News about PCRE releases
-------------------------
-
-Release 4.5 01-Dec-03
----------------------
-
-Again mainly a bug-fix and tidying release, with only a couple of new features:
-
-1. It's possible now to compile PCRE so that it does not use recursive
-function calls when matching. Instead it gets memory from the heap. This slows
-things down, but may be necessary on systems with limited stacks.
-
-2. UTF-8 string checking has been tightened to reject overlong sequences and to
-check that a starting offset points to the start of a character. Failure of the
-latter returns a new error code: PCRE_ERROR_BADUTF8_OFFSET.
-
-3. PCRE can now be compiled for systems that use EBCDIC code.
-
-
-Release 4.4 21-Aug-03
----------------------
-
-This is mainly a bug-fix and tidying release. The only new feature is that PCRE
-checks UTF-8 strings for validity by default. There is an option to suppress
-this, just in case anybody wants that teeny extra bit of performance.
-
-
-Releases 4.1 - 4.3
-------------------
-
-Sorry, I forgot about updating the NEWS file for these releases. Please take a
-look at ChangeLog.
-
-
-Release 4.0 17-Feb-03
----------------------
-
-There have been a lot of changes for the 4.0 release, adding additional
-functionality and mending bugs. Below is a list of the highlights of the new
-functionality. For full details of these features, please consult the
-documentation. For a complete list of changes, see the ChangeLog file.
-
-1. Support for Perl's \Q...\E escapes.
-
-2. "Possessive quantifiers" ?+, *+, ++, and {,}+ which come from Sun's Java
-package. They provide some syntactic sugar for simple cases of "atomic
-grouping".
-
-3. Support for the \G assertion. It is true when the current matching position
-is at the start point of the match.
-
-4. A new feature that provides some of the functionality that Perl provides
-with (?{...}). The facility is termed a "callout". The way it is done in PCRE
-is for the caller to provide an optional function, by setting pcre_callout to
-its entry point. To get the function called, the regex must include (?C) at
-appropriate points.
-
-5. Support for recursive calls to individual subpatterns. This makes it really
-easy to get totally confused.
-
-6. Support for named subpatterns. The Python syntax (?P<name>...) is used to
-name a group.
-
-7. Several extensions to UTF-8 support; it is now fairly complete. There is an
-option for pcregrep to make it operate in UTF-8 mode.
-
-8. The single man page has been split into a number of separate man pages.
-These also give rise to individual HTML pages which are put in a separate
-directory. There is an index.html page that lists them all. Some hyperlinking
-between the pages has been installed.
-
-
-Release 3.5 15-Aug-01
----------------------
-
-1. The configuring system has been upgraded to use later versions of autoconf
-and libtool. By default it builds both a shared and a static library if the OS
-supports it. You can use --disable-shared or --disable-static on the configure
-command if you want only one of them.
-
-2. The pcretest utility is now installed along with pcregrep because it is
-useful for users (to test regexs) and by doing this, it automatically gets
-relinked by libtool. The documentation has been turned into a man page, so
-there are now .1, .txt, and .html versions in /doc.
-
-3. Upgrades to pcregrep:
- (i) Added long-form option names like gnu grep.
- (ii) Added --help to list all options with an explanatory phrase.
- (iii) Added -r, --recursive to recurse into sub-directories.
- (iv) Added -f, --file to read patterns from a file.
-
-4. Added --enable-newline-is-cr and --enable-newline-is-lf to the configure
-script, to force use of CR or LF instead of \n in the source. On non-Unix
-systems, the value can be set in config.h.
-
-5. The limit of 200 on non-capturing parentheses is a _nesting_ limit, not an
-absolute limit. Changed the text of the error message to make this clear, and
-likewise updated the man page.
-
-6. The limit of 99 on the number of capturing subpatterns has been removed.
-The new limit is 65535, which I hope will not be a "real" limit.
-
-
-Release 3.3 01-Aug-00
----------------------
-
-There is some support for UTF-8 character strings. This is incomplete and
-experimental. The documentation describes what is and what is not implemented.
-Otherwise, this is just a bug-fixing release.
-
-
-Release 3.0 01-Feb-00
----------------------
-
-1. A "configure" script is now used to configure PCRE for Unix systems. It
-builds a Makefile, a config.h file, and the pcre-config script.
-
-2. PCRE is built as a shared library by default.
-
-3. There is support for POSIX classes such as [:alpha:].
-
-5. There is an experimental recursion feature.
-
-----------------------------------------------------------------------------
- IMPORTANT FOR THOSE UPGRADING FROM VERSIONS BEFORE 2.00
-
-Please note that there has been a change in the API such that a larger
-ovector is required at matching time, to provide some additional workspace.
-The new man page has details. This change was necessary in order to support
-some of the new functionality in Perl 5.005.
-
- IMPORTANT FOR THOSE UPGRADING FROM VERSION 2.00
-
-Another (I hope this is the last!) change has been made to the API for the
-pcre_compile() function. An additional argument has been added to make it
-possible to pass over a pointer to character tables built in the current
-locale by pcre_maketables(). To use the default tables, this new arguement
-should be passed as NULL.
-
- IMPORTANT FOR THOSE UPGRADING FROM VERSION 2.05
-
-Yet another (and again I hope this really is the last) change has been made
-to the API for the pcre_exec() function. An additional argument has been
-added to make it possible to start the match other than at the start of the
-subject string. This is important if there are lookbehinds. The new man
-page has the details, but you just want to convert existing programs, all
-you need to do is to stick in a new fifth argument to pcre_exec(), with a
-value of zero. For example, change
-
- pcre_exec(pattern, extra, subject, length, options, ovec, ovecsize)
-to
- pcre_exec(pattern, extra, subject, length, 0, options, ovec, ovecsize)
-
-****
diff --git a/ext/pcre/pcrelib/NON-UNIX-USE b/ext/pcre/pcrelib/NON-UNIX-USE
deleted file mode 100644
index c015b214bd..0000000000
--- a/ext/pcre/pcrelib/NON-UNIX-USE
+++ /dev/null
@@ -1,122 +0,0 @@
-Compiling PCRE on non-Unix systems
-----------------------------------
-
-See below for comments on Cygwin or MinGW usage. I (Philip Hazel) have no
-knowledge of Windows sytems and how their libraries work. The items in the
-PCRE Makefile that relate to anything other than Unix-like systems have been
-contributed by PCRE users. There are some other comments and files in the
-Contrib directory on the ftp site that you may find useful.
-
-The following are generic comments about building PCRE:
-
-If you want to compile PCRE for a non-Unix system (or perhaps, more strictly,
-for a system that does not support "configure" and make files), note that PCRE
-consists entirely of code written in Standard C, and so should compile
-successfully on any machine with a Standard C compiler and library, using
-normal compiling commands to do the following:
-
-(1) Copy or rename the file config.in as config.h, and change the macros that
-define HAVE_STRERROR and HAVE_MEMMOVE to define them as 1 rather than 0.
-Unfortunately, because of the way Unix autoconf works, the default setting has
-to be 0. You may also want to make changes to other macros in config.h. In
-particular, if you want to force a specific value for newline, you can define
-the NEWLINE macro. The default is to use '\n', thereby using whatever value
-your compiler gives to '\n'.
-
-(2) Copy or rename the file pcre.in as pcre.h, and change the macro definitions
-for PCRE_MAJOR, PCRE_MINOR, and PCRE_DATE near its start to the values set in
-configure.in.
-
-(3) Compile dftables.c as a stand-alone program, and then run it with
-the single argument "chartables.c". This generates a set of standard
-character tables and writes them to that file.
-
-(4) Compile maketables.c, get.c, study.c and pcre.c and link them all
-together into an object library in whichever form your system keeps such
-libraries. This is the pcre library (chartables.c is included by means of an
-#include directive). If your system has static and shared libraries, you may
-have to do this once for each type.
-
-(5) Similarly, compile pcreposix.c and link it (on its own) as the pcreposix
-library.
-
-(6) Compile the test program pcretest.c. This needs the functions in the
-pcre and pcreposix libraries when linking.
-
-(7) Run pcretest on the testinput files in the testdata directory, and check
-that the output matches the corresponding testoutput files. You must use the
--i option when checking testinput2. Note that the supplied files are in Unix
-format, with just LF characters as line terminators. You may need to edit them
-to change this if your system uses a different convention.
-
-If you have a system without "configure" but where you can use a Makefile, edit
-Makefile.in to create Makefile, substituting suitable values for the variables
-at the head of the file.
-
-Some help in building a Win32 DLL of PCRE in GnuWin32 environments was
-contributed by Paul Sokolovsky. These environments are Mingw32
-(http://www.xraylith.wisc.edu/~khan/software/gnu-win32/) and CygWin
-(http://sourceware.cygnus.com/cygwin/). Paul comments:
-
- For CygWin, set CFLAGS=-mno-cygwin, and do 'make dll'. You'll get
- pcre.dll (containing pcreposix also), libpcre.dll.a, and dynamically
- linked pgrep and pcretest. If you have /bin/sh, run RunTest (three
- main test go ok, locale not supported).
-
-Changes to do MinGW with autoconf 2.50 were supplied by Fred Cox
-<sailorFred@yahoo.com>, who comments as follows:
-
- If you are using the PCRE DLL, the normal Unix style configure && make &&
- make check && make install should just work[*]. If you want to statically
- link against the .a file, you must define PCRE_STATIC before including
- pcre.h, otherwise the pcre_malloc and pcre_free exported functions will be
- declared __declspec(dllimport), with hilarious results. See the configure.in
- and pcretest.c for how it is done for the static test.
-
- Also, there will only be a libpcre.la, not a libpcreposix.la, as you
- would expect from the Unix version. The single DLL includes the pcreposix
- interface.
-
-[*] But note that the supplied test files are in Unix format, with just LF
-characters as line terminators. You will have to edit them to change to CR LF
-terminators.
-
-A script for building PCRE using Borland's C++ compiler for use with VPASCAL
-was contributed by Alexander Tokarev. It is called makevp.bat.
-
-These are some further comments about Win32 builds from Mark Evans. They
-were contributed before Fred Cox's changes were made, so it is possible that
-they may no longer be relevant.
-
-"The documentation for Win32 builds is a bit shy. Under MSVC6 I
-followed their instructions to the letter, but there were still
-some things missing.
-
-(1) Must #define STATIC for entire project if linking statically.
- (I see no reason to use DLLs for code this compact.) This of
- course is a project setting in MSVC under Preprocessor.
-
-(2) Missing some #ifdefs relating to the function pointers
- pcre_malloc and pcre_free. See my solution below. (The stubs
- may not be mandatory but they made me feel better.)"
-
-=========================
-#ifdef _WIN32
-#include <malloc.h>
-
-void* malloc_stub(size_t N)
-{ return malloc(N); }
-void free_stub(void* p)
-{ free(p); }
-void *(*pcre_malloc)(size_t) = &malloc_stub;
-void (*pcre_free)(void *) = &free_stub;
-
-#else
-
-void *(*pcre_malloc)(size_t) = malloc;
-void (*pcre_free)(void *) = free;
-
-#endif
-=========================
-
-****
diff --git a/ext/pcre/pcrelib/README b/ext/pcre/pcrelib/README
deleted file mode 100644
index 879ba04f48..0000000000
--- a/ext/pcre/pcrelib/README
+++ /dev/null
@@ -1,365 +0,0 @@
-README file for PCRE (Perl-compatible regular expression library)
------------------------------------------------------------------
-
-The latest release of PCRE is always available from
-
- ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-xxx.tar.gz
-
-Please read the NEWS file if you are upgrading from a previous release.
-
-PCRE has its own native API, but a set of "wrapper" functions that are based on
-the POSIX API are also supplied in the library libpcreposix. Note that this
-just provides a POSIX calling interface to PCRE: the regular expressions
-themselves still follow Perl syntax and semantics. The header file
-for the POSIX-style functions is called pcreposix.h. The official POSIX name is
-regex.h, but I didn't want to risk possible problems with existing files of
-that name by distributing it that way. To use it with an existing program that
-uses the POSIX API, it will have to be renamed or pointed at by a link.
-
-If you are using the POSIX interface to PCRE and there is already a POSIX regex
-library installed on your system, you must take care when linking programs to
-ensure that they link with PCRE's libpcreposix library. Otherwise they may pick
-up the "real" POSIX functions of the same name.
-
-
-Contributions by users of PCRE
-------------------------------
-
-You can find contributions from PCRE users in the directory
-
- ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/Contrib
-
-where there is also a README file giving brief descriptions of what they are.
-Several of them provide support for compiling PCRE on various flavours of
-Windows systems (I myself do not use Windows). Some are complete in themselves;
-others are pointers to URLs containing relevant files.
-
-
-Building PCRE on a Unix-like system
------------------------------------
-
-To build PCRE on a Unix-like system, first run the "configure" command from the
-PCRE distribution directory, with your current directory set to the directory
-where you want the files to be created. This command is a standard GNU
-"autoconf" configuration script, for which generic instructions are supplied in
-INSTALL.
-
-Most commonly, people build PCRE within its own distribution directory, and in
-this case, on many systems, just running "./configure" is sufficient, but the
-usual methods of changing standard defaults are available. For example,
-
-CFLAGS='-O2 -Wall' ./configure --prefix=/opt/local
-
-specifies that the C compiler should be run with the flags '-O2 -Wall' instead
-of the default, and that "make install" should install PCRE under /opt/local
-instead of the default /usr/local.
-
-If you want to build in a different directory, just run "configure" with that
-directory as current. For example, suppose you have unpacked the PCRE source
-into /source/pcre/pcre-xxx, but you want to build it in /build/pcre/pcre-xxx:
-
-cd /build/pcre/pcre-xxx
-/source/pcre/pcre-xxx/configure
-
-There are some optional features that can be included or omitted from the PCRE
-library. You can read more about them in the pcrebuild man page.
-
-. If you want to make use of the support for UTF-8 character strings in PCRE,
- you must add --enable-utf8 to the "configure" command. Without it, the code
- for handling UTF-8 is not included in the library. (Even when included, it
- still has to be enabled by an option at run time.)
-
-. You can build PCRE to recognized CR or NL as the newline character, instead
- of whatever your compiler uses for "\n", by adding --newline-is-cr or
- --newline-is-nl to the "configure" command, respectively. Only do this if you
- really understand what you are doing. On traditional Unix-like systems, the
- newline character is NL.
-
-. When called via the POSIX interface, PCRE uses malloc() to get additional
- storage for processing capturing parentheses if there are more than 10 of
- them. You can increase this threshold by setting, for example,
-
- --with-posix-malloc-threshold=20
-
- on the "configure" command.
-
-. PCRE has a counter which can be set to limit the amount of resources it uses.
- If the limit is exceeded during a match, the match fails. The default is ten
- million. You can change the default by setting, for example,
-
- --with-match-limit=500000
-
- on the "configure" command. This is just the default; individual calls to
- pcre_exec() can supply their own value. There is discussion on the pcreapi
- man page.
-
-. The default maximum compiled pattern size is around 64K. You can increase
- this by adding --with-link-size=3 to the "configure" command. You can
- increase it even more by setting --with-link-size=4, but this is unlikely
- ever to be necessary. If you build PCRE with an increased link size, test 2
- (and 5 if you are using UTF-8) will fail. Part of the output of these tests
- is a representation of the compiled pattern, and this changes with the link
- size.
-
-. You can build PCRE so that its match() function does not call itself
- recursively. Instead, it uses blocks of data from the heap via special
- functions pcre_stack_malloc() and pcre_stack_free() to save data that would
- otherwise be saved on the stack. To build PCRE like this, use
-
- --disable-stack-for-recursion
-
- on the "configure" command. PCRE runs more slowly in this mode, but it may be
- necessary in environments with limited stack sizes.
-
-The "configure" script builds five files:
-
-. libtool is a script that builds shared and/or static libraries
-. Makefile is built by copying Makefile.in and making substitutions.
-. config.h is built by copying config.in and making substitutions.
-. pcre-config is built by copying pcre-config.in and making substitutions.
-. RunTest is a script for running tests
-
-Once "configure" has run, you can run "make". It builds two libraries called
-libpcre and libpcreposix, a test program called pcretest, and the pcregrep
-command. You can use "make install" to copy these, the public header files
-pcre.h and pcreposix.h, and the man pages to appropriate live directories on
-your system, in the normal way.
-
-Running "make install" also installs the command pcre-config, which can be used
-to recall information about the PCRE configuration and installation. For
-example,
-
- pcre-config --version
-
-prints the version number, and
-
- pcre-config --libs
-
-outputs information about where the library is installed. This command can be
-included in makefiles for programs that use PCRE, saving the programmer from
-having to remember too many details.
-
-
-Shared libraries on Unix-like systems
--------------------------------------
-
-The default distribution builds PCRE as two shared libraries and two static
-libraries, as long as the operating system supports shared libraries. Shared
-library support relies on the "libtool" script which is built as part of the
-"configure" process.
-
-The libtool script is used to compile and link both shared and static
-libraries. They are placed in a subdirectory called .libs when they are newly
-built. The programs pcretest and pcregrep are built to use these uninstalled
-libraries (by means of wrapper scripts in the case of shared libraries). When
-you use "make install" to install shared libraries, pcregrep and pcretest are
-automatically re-built to use the newly installed shared libraries before being
-installed themselves. However, the versions left in the source directory still
-use the uninstalled libraries.
-
-To build PCRE using static libraries only you must use --disable-shared when
-configuring it. For example
-
-./configure --prefix=/usr/gnu --disable-shared
-
-Then run "make" in the usual way. Similarly, you can use --disable-static to
-build only shared libraries.
-
-
-Cross-compiling on a Unix-like system
--------------------------------------
-
-You can specify CC and CFLAGS in the normal way to the "configure" command, in
-order to cross-compile PCRE for some other host. However, during the building
-process, the dftables.c source file is compiled *and run* on the local host, in
-order to generate the default character tables (the chartables.c file). It
-therefore needs to be compiled with the local compiler, not the cross compiler.
-You can do this by specifying CC_FOR_BUILD (and if necessary CFLAGS_FOR_BUILD)
-when calling the "configure" command. If they are not specified, they default
-to the values of CC and CFLAGS.
-
-
-Building on non-Unix systems
-----------------------------
-
-For a non-Unix system, read the comments in the file NON-UNIX-USE, though if
-the system supports the use of "configure" and "make" you may be able to build
-PCRE in the same way as for Unix systems.
-
-PCRE has been compiled on Windows systems and on Macintoshes, but I don't know
-the details because I don't use those systems. It should be straightforward to
-build PCRE on any system that has a Standard C compiler, because it uses only
-Standard C functions.
-
-
-Testing PCRE
-------------
-
-To test PCRE on a Unix system, run the RunTest script that is created by the
-configuring process. (This can also be run by "make runtest", "make check", or
-"make test".) For other systems, see the instructions in NON-UNIX-USE.
-
-The script runs the pcretest test program (which is documented in its own man
-page) on each of the testinput files (in the testdata directory) in turn,
-and compares the output with the contents of the corresponding testoutput file.
-A file called testtry is used to hold the output from pcretest. To run pcretest
-on just one of the test files, give its number as an argument to RunTest, for
-example:
-
- RunTest 2
-
-The first file can also be fed directly into the perltest script to check that
-Perl gives the same results. The only difference you should see is in the first
-few lines, where the Perl version is given instead of the PCRE version.
-
-The second set of tests check pcre_fullinfo(), pcre_info(), pcre_study(),
-pcre_copy_substring(), pcre_get_substring(), pcre_get_substring_list(), error
-detection, and run-time flags that are specific to PCRE, as well as the POSIX
-wrapper API. It also uses the debugging flag to check some of the internals of
-pcre_compile().
-
-If you build PCRE with a locale setting that is not the standard C locale, the
-character tables may be different (see next paragraph). In some cases, this may
-cause failures in the second set of tests. For example, in a locale where the
-isprint() function yields TRUE for characters in the range 128-255, the use of
-[:isascii:] inside a character class defines a different set of characters, and
-this shows up in this test as a difference in the compiled code, which is being
-listed for checking. Where the comparison test output contains [\x00-\x7f] the
-test will contain [\x00-\xff], and similarly in some other cases. This is not a
-bug in PCRE.
-
-The third set of tests checks pcre_maketables(), the facility for building a
-set of character tables for a specific locale and using them instead of the
-default tables. The tests make use of the "fr_FR" (French) locale. Before
-running the test, the script checks for the presence of this locale by running
-the "locale" command. If that command fails, or if it doesn't include "fr_FR"
-in the list of available locales, the third test cannot be run, and a comment
-is output to say why. If running this test produces instances of the error
-
- ** Failed to set locale "fr_FR"
-
-in the comparison output, it means that locale is not available on your system,
-despite being listed by "locale". This does not mean that PCRE is broken.
-
-The fourth test checks the UTF-8 support. It is not run automatically unless
-PCRE is built with UTF-8 support. To do this you must set --enable-utf8 when
-running "configure". This file can be also fed directly to the perltest script,
-provided you are running Perl 5.8 or higher. (For Perl 5.6, a small patch,
-commented in the script, can be be used.)
-
-The fifth and final file tests error handling with UTF-8 encoding, and internal
-UTF-8 features of PCRE that are not relevant to Perl.
-
-
-Character tables
-----------------
-
-PCRE uses four tables for manipulating and identifying characters. The final
-argument of the pcre_compile() function is a pointer to a block of memory
-containing the concatenated tables. A call to pcre_maketables() can be used to
-generate a set of tables in the current locale. If the final argument for
-pcre_compile() is passed as NULL, a set of default tables that is built into
-the binary is used.
-
-The source file called chartables.c contains the default set of tables. This is
-not supplied in the distribution, but is built by the program dftables
-(compiled from dftables.c), which uses the ANSI C character handling functions
-such as isalnum(), isalpha(), isupper(), islower(), etc. to build the table
-sources. This means that the default C locale which is set for your system will
-control the contents of these default tables. You can change the default tables
-by editing chartables.c and then re-building PCRE. If you do this, you should
-probably also edit Makefile to ensure that the file doesn't ever get
-re-generated.
-
-The first two 256-byte tables provide lower casing and case flipping functions,
-respectively. The next table consists of three 32-byte bit maps which identify
-digits, "word" characters, and white space, respectively. These are used when
-building 32-byte bit maps that represent character classes.
-
-The final 256-byte table has bits indicating various character types, as
-follows:
-
- 1 white space character
- 2 letter
- 4 decimal digit
- 8 hexadecimal digit
- 16 alphanumeric or '_'
- 128 regular expression metacharacter or binary zero
-
-You should not alter the set of characters that contain the 128 bit, as that
-will cause PCRE to malfunction.
-
-
-Manifest
---------
-
-The distribution should contain the following files:
-
-(A) The actual source files of the PCRE library functions and their
- headers:
-
- dftables.c auxiliary program for building chartables.c
- get.c )
- maketables.c )
- study.c ) source of
- pcre.c ) the functions
- pcreposix.c )
- printint.c )
- pcre.in "source" for the header for the external API; pcre.h
- is built from this by "configure"
- pcreposix.h header for the external POSIX wrapper API
- internal.h header for internal use
- config.in template for config.h, which is built by configure
-
-(B) Auxiliary files:
-
- AUTHORS information about the author of PCRE
- ChangeLog log of changes to the code
- INSTALL generic installation instructions
- LICENCE conditions for the use of PCRE
- COPYING the same, using GNU's standard name
- Makefile.in template for Unix Makefile, which is built by configure
- NEWS important changes in this release
- NON-UNIX-USE notes on building PCRE on non-Unix systems
- README this file
- RunTest.in template for a Unix shell script for running tests
- config.guess ) files used by libtool,
- config.sub ) used only when building a shared library
- configure a configuring shell script (built by autoconf)
- configure.in the autoconf input used to build configure
- doc/Tech.Notes notes on the encoding
- doc/*.3 man page sources for the PCRE functions
- doc/*.1 man page sources for pcregrep and pcretest
- doc/html/* HTML documentation
- doc/pcre.txt plain text version of the man pages
- doc/pcretest.txt plain text documentation of test program
- doc/perltest.txt plain text documentation of Perl test program
- install-sh a shell script for installing files
- ltmain.sh file used to build a libtool script
- pcretest.c comprehensive test program
- pcredemo.c simple demonstration of coding calls to PCRE
- perltest Perl test program
- pcregrep.c source of a grep utility that uses PCRE
- pcre-config.in source of script which retains PCRE information
- testdata/testinput1 test data, compatible with Perl
- testdata/testinput2 test data for error messages and non-Perl things
- testdata/testinput3 test data for locale-specific tests
- testdata/testinput4 test data for UTF-8 tests compatible with Perl
- testdata/testinput5 test data for other UTF-8 tests
- testdata/testoutput1 test results corresponding to testinput1
- testdata/testoutput2 test results corresponding to testinput2
- testdata/testoutput3 test results corresponding to testinput3
- testdata/testoutput4 test results corresponding to testinput4
- testdata/testoutput5 test results corresponding to testinput5
-
-(C) Auxiliary files for Win32 DLL
-
- dll.mk
- pcre.def
-
-(D) Auxiliary file for VPASCAL
-
- makevp.bat
-
-Philip Hazel <ph10@cam.ac.uk>
-December 2003
diff --git a/ext/pcre/pcrelib/chartables.c b/ext/pcre/pcrelib/chartables.c
deleted file mode 100644
index 55e413cfca..0000000000
--- a/ext/pcre/pcrelib/chartables.c
+++ /dev/null
@@ -1,183 +0,0 @@
-/*************************************************
-* Perl-Compatible Regular Expressions *
-*************************************************/
-
-/* This file is automatically written by the dftables auxiliary
-program. If you edit it by hand, you might like to edit the Makefile to
-prevent its ever being regenerated.
-
-This file is #included in the compilation of pcre.c to build the default
-character tables which are used when no tables are passed to the compile
-function. */
-
-static unsigned char pcre_default_tables[] = {
-
-/* This table is a lower casing table. */
-
- 0, 1, 2, 3, 4, 5, 6, 7,
- 8, 9, 10, 11, 12, 13, 14, 15,
- 16, 17, 18, 19, 20, 21, 22, 23,
- 24, 25, 26, 27, 28, 29, 30, 31,
- 32, 33, 34, 35, 36, 37, 38, 39,
- 40, 41, 42, 43, 44, 45, 46, 47,
- 48, 49, 50, 51, 52, 53, 54, 55,
- 56, 57, 58, 59, 60, 61, 62, 63,
- 64, 97, 98, 99,100,101,102,103,
- 104,105,106,107,108,109,110,111,
- 112,113,114,115,116,117,118,119,
- 120,121,122, 91, 92, 93, 94, 95,
- 96, 97, 98, 99,100,101,102,103,
- 104,105,106,107,108,109,110,111,
- 112,113,114,115,116,117,118,119,
- 120,121,122,123,124,125,126,127,
- 128,129,130,131,132,133,134,135,
- 136,137,138,139,140,141,142,143,
- 144,145,146,147,148,149,150,151,
- 152,153,154,155,156,157,158,159,
- 160,161,162,163,164,165,166,167,
- 168,169,170,171,172,173,174,175,
- 176,177,178,179,180,181,182,183,
- 184,185,186,187,188,189,190,191,
- 192,193,194,195,196,197,198,199,
- 200,201,202,203,204,205,206,207,
- 208,209,210,211,212,213,214,215,
- 216,217,218,219,220,221,222,223,
- 224,225,226,227,228,229,230,231,
- 232,233,234,235,236,237,238,239,
- 240,241,242,243,244,245,246,247,
- 248,249,250,251,252,253,254,255,
-
-/* This table is a case flipping table. */
-
- 0, 1, 2, 3, 4, 5, 6, 7,
- 8, 9, 10, 11, 12, 13, 14, 15,
- 16, 17, 18, 19, 20, 21, 22, 23,
- 24, 25, 26, 27, 28, 29, 30, 31,
- 32, 33, 34, 35, 36, 37, 38, 39,
- 40, 41, 42, 43, 44, 45, 46, 47,
- 48, 49, 50, 51, 52, 53, 54, 55,
- 56, 57, 58, 59, 60, 61, 62, 63,
- 64, 97, 98, 99,100,101,102,103,
- 104,105,106,107,108,109,110,111,
- 112,113,114,115,116,117,118,119,
- 120,121,122, 91, 92, 93, 94, 95,
- 96, 65, 66, 67, 68, 69, 70, 71,
- 72, 73, 74, 75, 76, 77, 78, 79,
- 80, 81, 82, 83, 84, 85, 86, 87,
- 88, 89, 90,123,124,125,126,127,
- 128,129,130,131,132,133,134,135,
- 136,137,138,139,140,141,142,143,
- 144,145,146,147,148,149,150,151,
- 152,153,154,155,156,157,158,159,
- 160,161,162,163,164,165,166,167,
- 168,169,170,171,172,173,174,175,
- 176,177,178,179,180,181,182,183,
- 184,185,186,187,188,189,190,191,
- 192,193,194,195,196,197,198,199,
- 200,201,202,203,204,205,206,207,
- 208,209,210,211,212,213,214,215,
- 216,217,218,219,220,221,222,223,
- 224,225,226,227,228,229,230,231,
- 232,233,234,235,236,237,238,239,
- 240,241,242,243,244,245,246,247,
- 248,249,250,251,252,253,254,255,
-
-/* This table contains bit maps for various character classes.
-Each map is 32 bytes long and the bits run from the least
-significant end of each byte. The classes that have their own
-maps are: space, xdigit, digit, upper, lower, word, graph
-print, punct, and cntrl. Other classes are built from combinations. */
-
- 0x00,0x3e,0x00,0x00,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,0x00,0x00,0xff,0x03,
- 0x7e,0x00,0x00,0x00,0x7e,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,0xff,0x03,
- 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,0x00,
- 0xfe,0xff,0xff,0x07,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,0x00,0xfe,0xff,0xff,0x07,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
-
- 0x00,0x00,0x00,0x00,0x00,0x00,0xff,0x03,
- 0xfe,0xff,0xff,0x87,0xfe,0xff,0xff,0x07,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
-
- 0x00,0x00,0x00,0x00,0xfe,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
-
- 0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
-
- 0x00,0x00,0x00,0x00,0xfe,0xff,0x00,0xfc,
- 0x01,0x00,0x00,0xf8,0x01,0x00,0x00,0x78,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
-
- 0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
-
-/* This table identifies various classes of character by individual bits:
- 0x01 white space character
- 0x02 letter
- 0x04 decimal digit
- 0x08 hexadecimal digit
- 0x10 alphanumeric or '_'
- 0x80 regular expression metacharacter or binary zero
-*/
-
- 0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 0- 7 */
- 0x00,0x01,0x01,0x00,0x01,0x01,0x00,0x00, /* 8- 15 */
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 16- 23 */
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 24- 31 */
- 0x01,0x00,0x00,0x00,0x80,0x00,0x00,0x00, /* - ' */
- 0x80,0x80,0x80,0x80,0x00,0x00,0x80,0x00, /* ( - / */
- 0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c, /* 0 - 7 */
- 0x1c,0x1c,0x00,0x00,0x00,0x00,0x00,0x80, /* 8 - ? */
- 0x00,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x12, /* @ - G */
- 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, /* H - O */
- 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, /* P - W */
- 0x12,0x12,0x12,0x80,0x00,0x00,0x80,0x10, /* X - _ */
- 0x00,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x12, /* ` - g */
- 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, /* h - o */
- 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, /* p - w */
- 0x12,0x12,0x12,0x80,0x80,0x00,0x00,0x00, /* x -127 */
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 128-135 */
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 136-143 */
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 144-151 */
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 152-159 */
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 160-167 */
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 168-175 */
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 176-183 */
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 184-191 */
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 192-199 */
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 200-207 */
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 208-215 */
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 216-223 */
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 224-231 */
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 232-239 */
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 240-247 */
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};/* 248-255 */
-
-/* End of chartables.c */
diff --git a/ext/pcre/pcrelib/dftables.c b/ext/pcre/pcrelib/dftables.c
deleted file mode 100644
index ea66e09054..0000000000
--- a/ext/pcre/pcrelib/dftables.c
+++ /dev/null
@@ -1,167 +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 <ph10@cam.ac.uk>
-
- Copyright (c) 1997-2004 University of Cambridge
-
------------------------------------------------------------------------------
-Permission is granted to anyone to use this software for any purpose on any
-computer system, and to redistribute it freely, subject to the following
-restrictions:
-
-1. This software is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
-
-2. The origin of this software must not be misrepresented, either by
- explicit claim or by omission.
-
-3. Altered versions must be plainly marked as such, and must not be
- misrepresented as being the original software.
-
-4. If PCRE is embedded in any software that is released under the GNU
- General Purpose Licence (GPL), then the terms of that licence shall
- supersede any condition above with which it is incompatible.
------------------------------------------------------------------------------
-
-See the file Tech.Notes for some information on the internals.
-*/
-
-
-/* This is a support program to generate the file chartables.c, containing
-character tables of various kinds. They are built according to the default C
-locale and used as the default tables by PCRE. Now that pcre_maketables is
-a function visible to the outside world, we make use of its code from here in
-order to be consistent. */
-
-#include <ctype.h>
-#include <stdio.h>
-#include <string.h>
-
-#include "internal.h"
-
-#define DFTABLES /* maketables.c notices this */
-#include "maketables.c"
-
-
-int main(int argc, char **argv)
-{
-int i;
-FILE *f;
-const unsigned char *tables = pcre_maketables();
-
-if (argc != 2)
- {
- fprintf(stderr, "dftables: one filename argument is required\n");
- return 1;
- }
-
-f = fopen(argv[1], "w");
-if (f == NULL)
- {
- fprintf(stderr, "dftables: failed to open %s for writing\n", argv[1]);
- return 1;
- }
-
-/* There are two fprintf() calls here, because gcc in pedantic mode complains
-about the very long string otherwise. */
-
-fprintf(f,
- "/*************************************************\n"
- "* Perl-Compatible Regular Expressions *\n"
- "*************************************************/\n\n"
- "/* This file is automatically written by the dftables auxiliary \n"
- "program. If you edit it by hand, you might like to edit the Makefile to \n"
- "prevent its ever being regenerated.\n\n");
-fprintf(f,
- "This file is #included in the compilation of pcre.c to build the default\n"
- "character tables which are used when no tables are passed to the compile\n"
- "function. */\n\n"
- "static unsigned char pcre_default_tables[] = {\n\n"
- "/* This table is a lower casing table. */\n\n");
-
-fprintf(f, " ");
-for (i = 0; i < 256; i++)
- {
- if ((i & 7) == 0 && i != 0) fprintf(f, "\n ");
- fprintf(f, "%3d", *tables++);
- if (i != 255) fprintf(f, ",");
- }
-fprintf(f, ",\n\n");
-
-fprintf(f, "/* This table is a case flipping table. */\n\n");
-
-fprintf(f, " ");
-for (i = 0; i < 256; i++)
- {
- if ((i & 7) == 0 && i != 0) fprintf(f, "\n ");
- fprintf(f, "%3d", *tables++);
- if (i != 255) fprintf(f, ",");
- }
-fprintf(f, ",\n\n");
-
-fprintf(f,
- "/* This table contains bit maps for various character classes.\n"
- "Each map is 32 bytes long and the bits run from the least\n"
- "significant end of each byte. The classes that have their own\n"
- "maps are: space, xdigit, digit, upper, lower, word, graph\n"
- "print, punct, and cntrl. Other classes are built from combinations. */\n\n");
-
-fprintf(f, " ");
-for (i = 0; i < cbit_length; i++)
- {
- if ((i & 7) == 0 && i != 0)
- {
- if ((i & 31) == 0) fprintf(f, "\n");
- fprintf(f, "\n ");
- }
- fprintf(f, "0x%02x", *tables++);
- if (i != cbit_length - 1) fprintf(f, ",");
- }
-fprintf(f, ",\n\n");
-
-fprintf(f,
- "/* This table identifies various classes of character by individual bits:\n"
- " 0x%02x white space character\n"
- " 0x%02x letter\n"
- " 0x%02x decimal digit\n"
- " 0x%02x hexadecimal digit\n"
- " 0x%02x alphanumeric or '_'\n"
- " 0x%02x regular expression metacharacter or binary zero\n*/\n\n",
- ctype_space, ctype_letter, ctype_digit, ctype_xdigit, ctype_word,
- ctype_meta);
-
-fprintf(f, " ");
-for (i = 0; i < 256; i++)
- {
- if ((i & 7) == 0 && i != 0)
- {
- fprintf(f, " /* ");
- if (isprint(i-8)) fprintf(f, " %c -", i-8);
- else fprintf(f, "%3d-", i-8);
- if (isprint(i-1)) fprintf(f, " %c ", i-1);
- else fprintf(f, "%3d", i-1);
- fprintf(f, " */\n ");
- }
- fprintf(f, "0x%02x", *tables++);
- if (i != 255) fprintf(f, ",");
- }
-
-fprintf(f, "};/* ");
-if (isprint(i-8)) fprintf(f, " %c -", i-8);
- else fprintf(f, "%3d-", i-8);
-if (isprint(i-1)) fprintf(f, " %c ", i-1);
- else fprintf(f, "%3d", i-1);
-fprintf(f, " */\n\n/* End of chartables.c */\n");
-
-fclose(f);
-return 0;
-}
-
-/* End of dftables.c */
diff --git a/ext/pcre/pcrelib/doc/Tech.Notes b/ext/pcre/pcrelib/doc/Tech.Notes
deleted file mode 100644
index 73c31c7ca1..0000000000
--- a/ext/pcre/pcrelib/doc/Tech.Notes
+++ /dev/null
@@ -1,281 +0,0 @@
-Technical Notes about PCRE
---------------------------
-
-Many years ago I implemented some regular expression functions to an algorithm
-suggested by Martin Richards. These were not Unix-like in form, and were quite
-restricted in what they could do by comparison with Perl. The interesting part
-about the algorithm was that the amount of space required to hold the compiled
-form of an expression was known in advance. The code to apply an expression did
-not operate by backtracking, as the original Henry Spencer code and current
-Perl code does, but instead checked all possibilities simultaneously by keeping
-a list of current states and checking all of them as it advanced through the
-subject string. (In the terminology of Jeffrey Friedl's book, it was a "DFA
-algorithm".) When the pattern was all used up, all remaining states were
-possible matches, and the one matching the longest subset of the subject string
-was chosen. This did not necessarily maximize the individual wild portions of
-the pattern, as is expected in Unix and Perl-style regular expressions.
-
-By contrast, the code originally written by Henry Spencer and subsequently
-heavily modified for Perl actually compiles the expression twice: once in a
-dummy mode in order to find out how much store will be needed, and then for
-real. The execution function operates by backtracking and maximizing (or,
-optionally, minimizing in Perl) the amount of the subject that matches
-individual wild portions of the pattern. This is an "NFA algorithm" in Friedl's
-terminology.
-
-For the set of functions that forms PCRE (which are unrelated to those
-mentioned above), I tried at first to invent an algorithm that used an amount
-of store bounded by a multiple of the number of characters in the pattern, to
-save on compiling time. However, because of the greater complexity in Perl
-regular expressions, I couldn't do this. In any case, a first pass through the
-pattern is needed, for a number of reasons. PCRE works by running a very
-degenerate first pass to calculate a maximum store size, and then a second pass
-to do the real compile - which may use a bit less than the predicted amount of
-store. The idea is that this is going to turn out faster because the first pass
-is degenerate and the second pass can just store stuff straight into the
-vector. It does make the compiling functions bigger, of course, but they have
-got quite big anyway to handle all the Perl stuff.
-
-The compiled form of a pattern is a vector of bytes, containing items of
-variable length. The first byte in an item is an opcode, and the length of the
-item is either implicit in the opcode or contained in the data bytes which
-follow it. A list of all the opcodes follows:
-
-Opcodes with no following data
-------------------------------
-
-These items are all just one byte long
-
- OP_END end of pattern
- OP_ANY match any character
- 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
- OP_CIRC ^ (start of data, or after \n in multiline)
- OP_NOT_WORD_BOUNDARY \W
- OP_WORD_BOUNDARY \w
- OP_NOT_DIGIT \D
- OP_DIGIT \d
- OP_NOT_WHITESPACE \S
- OP_WHITESPACE \s
- OP_NOT_WORDCHAR \W
- OP_WORDCHAR \w
- OP_EODN match end of data or \n at end: \Z
- OP_EOD match end of data: \z
- OP_DOLL $ (end of data, or before \n in multiline)
-
-
-Repeating single characters
----------------------------
-
-The common repeats (*, +, ?) when applied to a single character appear as
-two-byte items using the following opcodes:
-
- OP_STAR
- OP_MINSTAR
- OP_PLUS
- OP_MINPLUS
- OP_QUERY
- OP_MINQUERY
-
-Those with "MIN" in their name are the minimizing versions. Each is followed by
-the character that is to be repeated. Other repeats make use of
-
- OP_UPTO
- OP_MINUPTO
- OP_EXACT
-
-which are followed by a two-byte count (most significant first) and the
-repeated character. OP_UPTO matches from 0 to the given number. A repeat with a
-non-zero minimum and a fixed maximum is coded as an OP_EXACT followed by an
-OP_UPTO (or OP_MINUPTO).
-
-
-Repeating character types
--------------------------
-
-Repeats of things like \d are done exactly as for single characters, except
-that instead of a character, the opcode for the type is stored in the data
-byte. The opcodes are:
-
- OP_TYPESTAR
- OP_TYPEMINSTAR
- OP_TYPEPLUS
- OP_TYPEMINPLUS
- OP_TYPEQUERY
- OP_TYPEMINQUERY
- OP_TYPEUPTO
- OP_TYPEMINUPTO
- OP_TYPEEXACT
-
-
-Matching a character string
----------------------------
-
-The OP_CHARS opcode is followed by a one-byte count and then that number of
-characters. If there are more than 255 characters in sequence, successive
-instances of OP_CHARS are used.
-
-
-Character classes
------------------
-
-If there is only one character, OP_CHARS is used for a positive class,
-and OP_NOT for a negative one (that is, for something like [^a]). However, in
-UTF-8 mode, this applies only to characters with values < 128, because OP_NOT
-is confined to single bytes.
-
-Another set of repeating opcodes (OP_NOTSTAR etc.) are used for a repeated,
-negated, single-character class. The normal ones (OP_STAR etc.) are used for a
-repeated positive single-character class.
-
-When there's more than one character in a class and all the characters are less
-than 256, OP_CLASS is used for a positive class, and OP_NCLASS for a negative
-one. In either case, the opcode is followed by a 32-byte bit map containing a 1
-bit for every character that is acceptable. The bits are counted from the least
-significant end of each byte.
-
-The reason for having both OP_CLASS and OP_NCLASS is so that, in UTF-8 mode,
-subject characters with values greater than 256 can be handled correctly. For
-OP_CLASS they don't match, whereas for OP_NCLASS they do.
-
-For classes containing characters with values > 255, OP_XCLASS is used. It
-optionally uses a bit map (if any characters lie within it), followed by a list
-of pairs and single characters. There is a flag character than indicates
-whether it's a positive or a negative class.
-
-
-Back references
----------------
-
-OP_REF is followed by two bytes containing the reference number.
-
-
-Repeating character classes and back references
------------------------------------------------
-
-Single-character classes are handled specially (see above). This applies to
-OP_CLASS and OP_REF. In both cases, the repeat information follows the base
-item. The matching code looks at the following opcode to see if it is one of
-
- OP_CRSTAR
- OP_CRMINSTAR
- OP_CRPLUS
- OP_CRMINPLUS
- OP_CRQUERY
- OP_CRMINQUERY
- OP_CRRANGE
- OP_CRMINRANGE
-
-All but the last two are just single-byte items. The others are followed by
-four bytes of data, comprising the minimum and maximum repeat counts.
-
-
-Brackets and alternation
-------------------------
-
-A pair of non-capturing (round) brackets is wrapped round each expression at
-compile time, so alternation always happens in the context of brackets.
-
-Non-capturing brackets use the opcode OP_BRA, while capturing brackets use
-OP_BRA+1, OP_BRA+2, etc. [Note for North Americans: "bracket" to some English
-speakers, including myself, can be round, square, curly, or pointy. Hence this
-usage.]
-
-Originally PCRE was limited to 99 capturing brackets (so as not to use up all
-the opcodes). From release 3.5, there is no limit. What happens is that the
-first ones, up to EXTRACT_BASIC_MAX are handled with separate opcodes, as
-above. If there are more, the opcode is set to EXTRACT_BASIC_MAX+1, and the
-first operation in the bracket is OP_BRANUMBER, followed by a 2-byte bracket
-number. This opcode is ignored while matching, but is fished out when handling
-the bracket itself. (They could have all been done like this, but I was making
-minimal changes.)
-
-A bracket opcode is followed by two bytes which give the offset to the next
-alternative OP_ALT or, if there aren't any branches, to the matching KET
-opcode. Each OP_ALT is followed by two bytes giving the offset to the next one,
-or to the KET opcode.
-
-OP_KET is used for subpatterns that do not repeat indefinitely, while
-OP_KETRMIN and OP_KETRMAX are used for indefinite repetitions, minimally or
-maximally respectively. All three are followed by two bytes giving (as a
-positive number) the offset back to the matching BRA 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.
-
-A subpattern with an indefinite maximum repetition is replicated in the
-compiled data its minimum number of times (or once with a BRAZERO if the
-minimum is zero), with the final copy terminating with a KETRMIN or KETRMAX as
-appropriate.
-
-A subpattern with a bounded maximum repetition is replicated in a nested
-fashion up to the maximum number of times, with BRAZERO or BRAMINZERO before
-each replication after the minimum, so that, for example, (abc){2,5} is
-compiled as (abc)(abc)((abc)((abc)(abc)?)?)?. The 99 and 200 bracket limits do
-not apply to these internally generated brackets.
-
-
-Assertions
-----------
-
-Forward assertions are just like other subpatterns, but starting with one of
-the opcodes OP_ASSERT or OP_ASSERT_NOT. Backward assertions use the opcodes
-OP_ASSERTBACK and OP_ASSERTBACK_NOT, and the first opcode inside the assertion
-is OP_REVERSE, followed by a two byte count of the number of characters to move
-back the pointer in the subject string. When operating in UTF-8 mode, the count
-is a character count rather than a byte count. A separate count is present in
-each alternative of a lookbehind assertion, allowing them to have different
-fixed lengths.
-
-
-Once-only subpatterns
----------------------
-
-These are also just like other subpatterns, but they start with the opcode
-OP_ONCE.
-
-
-Conditional subpatterns
------------------------
-
-These are like other subpatterns, but they start with the opcode OP_COND. If
-the condition is a back reference, this is stored at the start of the
-subpattern using the opcode OP_CREF followed by two bytes containing the
-reference number. If the condition is "in recursion" (coded as "(?(R)"), the
-same scheme is used, with a "reference number" of 0xffff. Otherwise, a
-conditional subpattern always starts with one of the assertions.
-
-
-Recursion
----------
-
-Recursion either matches the current regex, or some subexpression. The opcode
-OP_RECURSE is followed by an value which is the offset to the starting bracket
-from the start of the whole pattern.
-
-
-Callout
--------
-
-OP_CALLOUT is followed by one byte of data that holds a callout number in the
-range 0 to 255.
-
-
-Changing options
-----------------
-
-If any of the /i, /m, or /s options are changed within a pattern, an OP_OPT
-opcode is compiled, followed by one byte containing the new settings of these
-flags. If there are several alternatives, there is an occurrence of OP_OPT at
-the start of all those following the first options change, to set appropriate
-options for the start of the alternative. Immediately after the end of the
-group there is another such item to reset the flags to their previous values. A
-change of flag right at the very start of the pattern can be handled entirely
-at compile time, and so does not cause anything to be put into the compiled
-data.
-
-Philip Hazel
-August 2003
diff --git a/ext/pcre/pcrelib/doc/pcre.txt b/ext/pcre/pcrelib/doc/pcre.txt
deleted file mode 100644
index 698baa52e1..0000000000
--- a/ext/pcre/pcrelib/doc/pcre.txt
+++ /dev/null
@@ -1,3169 +0,0 @@
-This file contains a concatenation of the PCRE man pages, converted to plain
-text format for ease of searching with a text editor, or for use on systems
-that do not have a man page processor. The small individual files that give
-synopses of each function in the library have not been included. There are
-separate text files for the pcregrep and pcretest commands.
------------------------------------------------------------------------------
-
-PCRE(3) PCRE(3)
-
-
-
-NAME
- PCRE - Perl-compatible regular expressions
-
-DESCRIPTION
-
- 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. The current implementation of PCRE (release
- 4.x) corresponds approximately with Perl 5.8, including support for
- UTF-8 encoded strings. However, this support has to be explicitly
- enabled; it is not the default.
-
- PCRE is written in C and released as a C library. However, a number of
- people have written wrappers and interfaces of various kinds. A C++
- class is included in these contributions, which can be found in the
- Contrib directory at the primary FTP site, which is:
-
- ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre
-
- Details of exactly which Perl regular expression features are and are
- not supported by PCRE are given in separate documents. See the pcrepat-
- tern and pcrecompat pages.
-
- Some features of PCRE can be included, excluded, or changed when the
- library is built. The pcre_config() function makes it possible for a
- client to discover which features are available. Documentation about
- building PCRE for various operating systems can be found in the README
- file in the source distribution.
-
-
-USER DOCUMENTATION
-
- The user documentation for PCRE has been split up into a number of dif-
- ferent sections. In the "man" format, each of these is a separate "man
- page". In the HTML format, each is a separate page, linked from the
- index page. In the plain text format, all the sections are concate-
- nated, for ease of searching. The sections are as follows:
-
- pcre this document
- pcreapi details of PCRE's native API
- pcrebuild options for building PCRE
- pcrecallout details of the callout feature
- pcrecompat discussion of Perl compatibility
- pcregrep description of the pcregrep command
- pcrepattern syntax and semantics of supported
- regular expressions
- pcreperform discussion of performance issues
- pcreposix the POSIX-compatible API
- pcresample discussion of the sample program
- pcretest the pcretest testing command
-
- In addition, in the "man" and HTML formats, there is a short page for
- each library function, listing its arguments and results.
-
-
-LIMITATIONS
-
- There are some size limitations in PCRE but it is hoped that they will
- never in practice be relevant.
-
- The maximum length of a compiled pattern is 65539 (sic) bytes if PCRE
- is compiled with the default internal linkage size of 2. If you want to
- process regular expressions that are truly enormous, you can compile
- PCRE with an internal linkage size of 3 or 4 (see the README file in
- the source distribution and the pcrebuild documentation for details).
- If these cases the limit is substantially larger. However, the speed
- of execution will be slower.
-
- All values in repeating quantifiers must be less than 65536. The maxi-
- mum number of capturing subpatterns is 65535.
-
- There is no limit to the number of non-capturing subpatterns, but the
- maximum depth of nesting of all kinds of parenthesized subpattern,
- including capturing subpatterns, assertions, and other types of subpat-
- tern, is 200.
-
- The maximum length of a subject string is the largest positive number
- that an integer variable can hold. However, PCRE uses recursion to han-
- dle subpatterns and indefinite repetition. This means that the avail-
- able stack space may limit the size of a subject string that can be
- processed by certain patterns.
-
-
-UTF-8 SUPPORT
-
- Starting at release 3.3, PCRE has had some support for character
- strings encoded in the UTF-8 format. For release 4.0 this has been
- greatly extended to cover most common requirements.
-
- In order process UTF-8 strings, you must build PCRE to include UTF-8
- support in the code, and, in addition, you must call pcre_compile()
- with the PCRE_UTF8 option flag. When you do this, both the pattern and
- any subject strings that are matched against it are treated as UTF-8
- strings instead of just strings of bytes.
-
- If you compile PCRE with UTF-8 support, but do not use it at run time,
- the library will be a bit bigger, but the additional run time overhead
- is limited to testing the PCRE_UTF8 flag in several places, so should
- not be very large.
-
- The following comments apply when PCRE is running in UTF-8 mode:
-
- 1. When you set the PCRE_UTF8 flag, the strings passed as patterns and
- subjects are checked for validity on entry to the relevant functions.
- If an invalid UTF-8 string is passed, an error return is given. In some
- situations, you may already know that your strings are valid, and
- therefore want to skip these checks in order to improve performance. If
- you set the PCRE_NO_UTF8_CHECK flag at compile time or at run time,
- PCRE assumes that the pattern or subject it is given (respectively)
- contains only valid UTF-8 codes. In this case, it does not diagnose an
- invalid UTF-8 string. If you pass an invalid UTF-8 string to PCRE when
- PCRE_NO_UTF8_CHECK is set, the results are undefined. Your program may
- crash.
-
- 2. In a pattern, the escape sequence \x{...}, where the contents of the
- braces is a string of hexadecimal digits, is interpreted as a UTF-8
- character whose code number is the given hexadecimal number, for exam-
- ple: \x{1234}. If a non-hexadecimal digit appears between the braces,
- the item is not recognized. This escape sequence can be used either as
- a literal, or within a character class.
-
- 3. The original hexadecimal escape sequence, \xhh, matches a two-byte
- UTF-8 character if the value is greater than 127.
-
- 4. Repeat quantifiers apply to complete UTF-8 characters, not to indi-
- vidual bytes, for example: \x{100}{3}.
-
- 5. The dot metacharacter matches one UTF-8 character instead of a
- single byte.
-
- 6. The escape sequence \C can be used to match a single byte in UTF-8
- mode, but its use can lead to some strange effects.
-
- 7. The character escapes \b, \B, \d, \D, \s, \S, \w, and \W correctly
- test characters of any code value, but the characters that PCRE recog-
- nizes as digits, spaces, or word characters remain the same set as
- before, all with values less than 256.
-
- 8. Case-insensitive matching applies only to characters whose values
- are less than 256. PCRE does not support the notion of "case" for
- higher-valued characters.
-
- 9. PCRE does not support the use of Unicode tables and properties or
- the Perl escapes \p, \P, and \X.
-
-
-AUTHOR
-
- Philip Hazel <ph10@cam.ac.uk>
- University Computing Service,
- Cambridge CB2 3QG, England.
- Phone: +44 1223 334714
-
-Last updated: 20 August 2003
-Copyright (c) 1997-2003 University of Cambridge.
------------------------------------------------------------------------------
-
-PCRE(3) PCRE(3)
-
-
-
-NAME
- PCRE - Perl-compatible regular expressions
-
-PCRE BUILD-TIME OPTIONS
-
- This document describes the optional features of PCRE that can be
- selected when the library is compiled. They are all selected, or dese-
- lected, by providing options to the configure script which is run
- before the make command. The complete list of options for configure
- (which includes the standard ones such as the selection of the instal-
- lation directory) can be obtained by running
-
- ./configure --help
-
- The following sections describe certain options whose names begin with
- --enable or --disable. These settings specify changes to the defaults
- for the configure command. Because of the way that configure works,
- --enable and --disable always come in pairs, so the complementary
- option always exists as well, but as it specifies the default, it is
- not described.
-
-
-UTF-8 SUPPORT
-
- To build PCRE with support for UTF-8 character strings, add
-
- --enable-utf8
-
- to the configure command. Of itself, this does not make PCRE treat
- strings as UTF-8. As well as compiling PCRE with this option, you also
- have have to set the PCRE_UTF8 option when you call the pcre_compile()
- function.
-
-
-CODE VALUE OF NEWLINE
-
- By default, PCRE treats character 10 (linefeed) as the newline charac-
- ter. This is the normal newline character on Unix-like systems. You can
- compile PCRE to use character 13 (carriage return) instead by adding
-
- --enable-newline-is-cr
-
- to the configure command. For completeness there is also a --enable-
- newline-is-lf option, which explicitly specifies linefeed as the new-
- line character.
-
-
-BUILDING SHARED AND STATIC LIBRARIES
-
- The PCRE building process uses libtool to build both shared and static
- Unix libraries by default. You can suppress one of these by adding one
- of
-
- --disable-shared
- --disable-static
-
- to the configure command, as required.
-
-
-POSIX MALLOC USAGE
-
- When PCRE is called through the POSIX interface (see the pcreposix
- documentation), additional working storage is required for holding the
- pointers to capturing substrings because PCRE requires three integers
- per substring, whereas the POSIX interface provides only two. If the
- number of expected substrings is small, the wrapper function uses space
- on the stack, because this is faster than using malloc() for each call.
- The default threshold above which the stack is no longer used is 10; it
- can be changed by adding a setting such as
-
- --with-posix-malloc-threshold=20
-
- to the configure command.
-
-
-LIMITING PCRE RESOURCE USAGE
-
- Internally, PCRE has a function called match() which it calls repeat-
- edly (possibly recursively) when performing a matching operation. By
- limiting the number of times this function may be called, a limit can
- be placed on the resources used by a single call to pcre_exec(). The
- limit can be changed at run time, as described in the pcreapi documen-
- tation. The default is 10 million, but this can be changed by adding a
- setting such as
-
- --with-match-limit=500000
-
- to the configure command.
-
-
-HANDLING VERY LARGE PATTERNS
-
- Within a compiled pattern, offset values are used to point from one
- part to another (for example, from an opening parenthesis to an alter-
- nation metacharacter). By default two-byte values are used for these
- offsets, leading to a maximum size for a compiled pattern of around
- 64K. This is sufficient to handle all but the most gigantic patterns.
- Nevertheless, some people do want to process enormous patterns, so it
- is possible to compile PCRE to use three-byte or four-byte offsets by
- adding a setting such as
-
- --with-link-size=3
-
- to the configure command. The value given must be 2, 3, or 4. Using
- longer offsets slows down the operation of PCRE because it has to load
- additional bytes when handling them.
-
- If you build PCRE with an increased link size, test 2 (and test 5 if
- you are using UTF-8) will fail. Part of the output of these tests is a
- representation of the compiled pattern, and this changes with the link
- size.
-
-
-AVOIDING EXCESSIVE STACK USAGE
-
- PCRE implements backtracking while matching by making recursive calls
- to an internal function called match(). In environments where the size
- of the stack is limited, this can severely limit PCRE's operation. (The
- Unix environment does not usually suffer from this problem.) An alter-
- native approach that uses memory from the heap to remember data,
- instead of using recursive function calls, has been implemented to work
- round this problem. If you want to build a version of PCRE that works
- this way, add
-
- --disable-stack-for-recursion
-
- to the configure command. With this configuration, PCRE will use the
- pcre_stack_malloc and pcre_stack_free variables to call memory
- management functions. Separate functions are provided because the usage
- is very predictable: the block sizes requested are always the same, and
- the blocks are always freed in reverse order. A calling program might
- be able to implement optimized functions that perform better than the
- standard malloc() and free() functions. PCRE runs noticeably more
- slowly when built in this way.
-
-
-USING EBCDIC CODE
-
- PCRE assumes by default that it will run in an environment where the
- character code is ASCII (or UTF-8, which is a superset of ASCII). PCRE
- can, however, be compiled to run in an EBCDIC environment by adding
-
- --enable-ebcdic
-
- to the configure command.
-
-Last updated: 09 December 2003
-Copyright (c) 1997-2003 University of Cambridge.
------------------------------------------------------------------------------
-
-PCRE(3) PCRE(3)
-
-
-
-NAME
- PCRE - Perl-compatible regular expressions
-
-SYNOPSIS OF PCRE API
-
- #include <pcre.h>
-
- pcre *pcre_compile(const char *pattern, int options,
- const char **errptr, int *erroffset,
- const unsigned char *tableptr);
-
- pcre_extra *pcre_study(const pcre *code, int options,
- const char **errptr);
-
- int pcre_exec(const pcre *code, const pcre_extra *extra,
- const char *subject, int length, int startoffset,
- int options, int *ovector, int ovecsize);
-
- int pcre_copy_named_substring(const pcre *code,
- const char *subject, int *ovector,
- int stringcount, const char *stringname,
- char *buffer, int buffersize);
-
- int pcre_copy_substring(const char *subject, int *ovector,
- int stringcount, int stringnumber, char *buffer,
- int buffersize);
-
- int pcre_get_named_substring(const pcre *code,
- const char *subject, int *ovector,
- int stringcount, const char *stringname,
- const char **stringptr);
-
- int pcre_get_stringnumber(const pcre *code,
- const char *name);
-
- int pcre_get_substring(const char *subject, int *ovector,
- int stringcount, int stringnumber,
- const char **stringptr);
-
- int pcre_get_substring_list(const char *subject,
- int *ovector, int stringcount, const char ***listptr);
-
- void pcre_free_substring(const char *stringptr);
-
- void pcre_free_substring_list(const char **stringptr);
-
- const unsigned char *pcre_maketables(void);
-
- int pcre_fullinfo(const pcre *code, const pcre_extra *extra,
- int what, void *where);
-
- int pcre_info(const pcre *code, int *optptr, int *firstcharptr);
-
- int pcre_config(int what, void *where);
-
- char *pcre_version(void);
-
- void *(*pcre_malloc)(size_t);
-
- void (*pcre_free)(void *);
-
- void *(*pcre_stack_malloc)(size_t);
-
- void (*pcre_stack_free)(void *);
-
- int (*pcre_callout)(pcre_callout_block *);
-
-
-PCRE API
-
- PCRE has its own native API, which is described in this document. There
- is also a set of wrapper functions that correspond to the POSIX regular
- expression API. These are described in the pcreposix documentation.
-
- The native API function prototypes are defined in the header file
- pcre.h, and on Unix systems the library itself is called libpcre.a, so
- can be accessed by adding -lpcre to the command for linking an applica-
- tion which calls it. The header file defines the macros PCRE_MAJOR and
- PCRE_MINOR to contain the major and minor release numbers for the
- library. Applications can use these to include support for different
- releases.
-
- The functions pcre_compile(), pcre_study(), and pcre_exec() are used
- for compiling and matching regular expressions. A sample program that
- demonstrates the simplest way of using them is given in the file pcre-
- demo.c. The pcresample documentation describes how to run it.
-
- There are convenience functions for extracting captured substrings from
- a matched subject string. They are:
-
- pcre_copy_substring()
- pcre_copy_named_substring()
- pcre_get_substring()
- pcre_get_named_substring()
- pcre_get_substring_list()
-
- pcre_free_substring() and pcre_free_substring_list() are also provided,
- to free the memory used for extracted strings.
-
- The function pcre_maketables() is used (optionally) to build a set of
- character tables in the current locale for passing to pcre_compile().
-
- The function pcre_fullinfo() is used to find out information about a
- compiled pattern; pcre_info() is an obsolete version which returns only
- some of the available information, but is retained for backwards com-
- patibility. The function pcre_version() returns a pointer to a string
- containing the version of PCRE and its date of release.
-
- The global variables pcre_malloc and pcre_free initially contain the
- entry points of the standard malloc() and free() functions respec-
- tively. PCRE calls the memory management functions via these variables,
- so a calling program can replace them if it wishes to intercept the
- calls. This should be done before calling any PCRE functions.
-
- The global variables pcre_stack_malloc and pcre_stack_free are also
- indirections to memory management functions. These special functions
- are used only when PCRE is compiled to use the heap for remembering
- data, instead of recursive function calls. This is a non-standard way
- of building PCRE, for use in environments that have limited stacks.
- Because of the greater use of memory management, it runs more slowly.
- Separate functions are provided so that special-purpose external code
- can be used for this case. When used, these functions are always called
- in a stack-like manner (last obtained, first freed), and always for
- memory blocks of the same size.
-
- The global variable pcre_callout initially contains NULL. It can be set
- by the caller to a "callout" function, which PCRE will then call at
- specified points during a matching operation. Details are given in the
- pcrecallout documentation.
-
-
-MULTITHREADING
-
- The PCRE functions can be used in multi-threading applications, with
- the proviso that the memory management functions pointed to by
- pcre_malloc, pcre_free, pcre_stack_malloc, and pcre_stack_free, and the
- callout function pointed to by pcre_callout, are shared by all threads.
-
- The compiled form of a regular expression is not altered during match-
- ing, so the same compiled pattern can safely be used by several threads
- at once.
-
-
-CHECKING BUILD-TIME OPTIONS
-
- int pcre_config(int what, void *where);
-
- The function pcre_config() makes it possible for a PCRE client to dis-
- cover which optional features have been compiled into the PCRE library.
- The pcrebuild documentation has more details about these optional fea-
- tures.
-
- The first argument for pcre_config() is an integer, specifying which
- information is required; the second argument is a pointer to a variable
- into which the information is placed. The following information is
- available:
-
- PCRE_CONFIG_UTF8
-
- The output is an integer that is set to one if UTF-8 support is avail-
- able; otherwise it is set to zero.
-
- PCRE_CONFIG_NEWLINE
-
- The output is an integer that is set to the value of the code that is
- used for the newline character. It is either linefeed (10) or carriage
- return (13), and should normally be the standard character for your
- operating system.
-
- PCRE_CONFIG_LINK_SIZE
-
- The output is an integer that contains the number of bytes used for
- internal linkage in compiled regular expressions. The value is 2, 3, or
- 4. Larger values allow larger regular expressions to be compiled, at
- the expense of slower matching. The default value of 2 is sufficient
- for all but the most massive patterns, since it allows the compiled
- pattern to be up to 64K in size.
-
- PCRE_CONFIG_POSIX_MALLOC_THRESHOLD
-
- The output is an integer that contains the threshold above which the
- POSIX interface uses malloc() for output vectors. Further details are
- given in the pcreposix documentation.
-
- PCRE_CONFIG_MATCH_LIMIT
-
- The output is an integer that gives the default limit for the number of
- internal matching function calls in a pcre_exec() execution. Further
- details are given with pcre_exec() below.
-
- PCRE_CONFIG_STACKRECURSE
-
- The output is an integer that is set to one if internal recursion is
- implemented by recursive function calls that use the stack to remember
- their state. This is the usual way that PCRE is compiled. The output is
- zero if PCRE was compiled to use blocks of data on the heap instead of
- recursive function calls. In this case, pcre_stack_malloc and
- pcre_stack_free are called to manage memory blocks on the heap, thus
- avoiding the use of the stack.
-
-
-COMPILING A PATTERN
-
- pcre *pcre_compile(const char *pattern, int options,
- const char **errptr, int *erroffset,
- const unsigned char *tableptr);
-
-
- The function pcre_compile() is called to compile a pattern into an
- internal form. The pattern is a C string terminated by a binary zero,
- and is passed in the argument pattern. A pointer to a single block of
- memory that is obtained via pcre_malloc is returned. This contains the
- compiled code and related data. The pcre type is defined for the
- returned block; this is a typedef for a structure whose contents are
- not externally defined. It is up to the caller to free the memory when
- it is no longer required.
-
- Although the compiled code of a PCRE regex is relocatable, that is, it
- does not depend on memory location, the complete pcre data block is not
- fully relocatable, because it contains a copy of the tableptr argument,
- which is an address (see below).
-
- The options argument contains independent bits that affect the compila-
- tion. It should be zero if no options are required. Some of the
- options, in particular, those that are compatible with Perl, can also
- be set and unset from within the pattern (see the detailed description
- of regular expressions in the pcrepattern documentation). For these
- options, the contents of the options argument specifies their initial
- settings at the start of compilation and execution. The PCRE_ANCHORED
- option can be set at the time of matching as well as at compile time.
-
- If errptr is NULL, pcre_compile() returns NULL immediately. Otherwise,
- if compilation of a pattern fails, pcre_compile() returns NULL, and
- sets the variable pointed to by errptr to point to a textual error mes-
- sage. The offset from the start of the pattern to the character where
- the error was discovered is placed in the variable pointed to by
- erroffset, which must not be NULL. If it is, an immediate error is
- given.
-
- If the final argument, tableptr, is NULL, PCRE uses a default set of
- character tables which are built when it is compiled, using the default
- C locale. Otherwise, tableptr must be the result of a call to
- pcre_maketables(). See the section on locale support below.
-
- This code fragment shows a typical straightforward call to pcre_com-
- pile():
-
- pcre *re;
- const char *error;
- int erroffset;
- re = pcre_compile(
- "^A.*Z", /* the pattern */
- 0, /* default options */
- &error, /* for error message */
- &erroffset, /* for error offset */
- NULL); /* use default character tables */
-
- The following option bits are defined:
-
- PCRE_ANCHORED
-
- If this bit is set, the pattern is forced to be "anchored", that is, it
- is constrained to match only at the first matching point in the string
- which is being searched (the "subject string"). This effect can also be
- achieved by appropriate constructs in the pattern itself, which is the
- only way to do it in Perl.
-
- PCRE_CASELESS
-
- If this bit is set, letters in the pattern match both upper and lower
- case letters. It is equivalent to Perl's /i option, and it can be
- changed within a pattern by a (?i) option setting.
-
- PCRE_DOLLAR_ENDONLY
-
- If this bit is set, a dollar metacharacter in the pattern matches only
- at the end of the subject string. Without this option, a dollar also
- matches immediately before the final character if it is a newline (but
- not before any other newlines). The PCRE_DOLLAR_ENDONLY option is
- ignored if PCRE_MULTILINE is set. There is no equivalent to this option
- in Perl, and no way to set it within a pattern.
-
- PCRE_DOTALL
-
- If this bit is set, a dot metacharater in the pattern matches all char-
- acters, including newlines. Without it, newlines are excluded. This
- option is equivalent to Perl's /s option, and it can be changed within
- a pattern by a (?s) option setting. A negative class such as [^a]
- always matches a newline character, independent of the setting of this
- option.
-
- PCRE_EXTENDED
-
- If this bit is set, whitespace data characters in the pattern are
- totally ignored except when escaped or inside a character class.
- Whitespace does not include the VT character (code 11). In addition,
- characters between an unescaped # outside a character class and the
- next newline character, inclusive, are also ignored. This is equivalent
- to Perl's /x option, and it can be changed within a pattern by a (?x)
- option setting.
-
- This option makes it possible to include comments inside complicated
- patterns. Note, however, that this applies only to data characters.
- Whitespace characters may never appear within special character
- sequences in a pattern, for example within the sequence (?( which
- introduces a conditional subpattern.
-
- PCRE_EXTRA
-
- This option was invented in order to turn on additional functionality
- of PCRE that is incompatible with Perl, but it is currently of very
- little use. When set, any backslash in a pattern that is followed by a
- letter that has no special meaning causes an error, thus reserving
- these combinations for future expansion. By default, as in Perl, a
- backslash followed by a letter with no special meaning is treated as a
- literal. There are at present no other features controlled by this
- option. It can also be set by a (?X) option setting within a pattern.
-
- PCRE_MULTILINE
-
- By default, PCRE treats the subject string as consisting of a single
- "line" of characters (even if it actually contains several 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_DOL-
- LAR_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 any new-
- line 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 "\n" charac-
- ters in a subject string, or no occurrences of ^ or $ in a pattern,
- setting PCRE_MULTILINE has no effect.
-
- 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).
- 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
- 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 if PCRE has been built to include UTF-8
- support. 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. 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 performance 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 there is a similar option for sup-
- pressing the checking of subject strings passed to pcre_exec().
-
-
-
-STUDYING A PATTERN
-
- pcre_extra *pcre_study(const pcre *code, int options,
- const char **errptr);
-
- When a 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 match-
- ing. The function pcre_study() takes a pointer to a compiled pattern as
- its first argument. If studing the pattern produces additional informa-
- tion 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 a pcre_study() can be passed directly to
- pcre_exec(). However, the pcre_extra block also contains other fields
- that can be set by the caller before the block is passed; these are
- described below. If studying the pattern does not produce any addi-
- tional information, pcre_study() returns NULL. In that circumstance, if
- the calling program wants to pass some of the other fields to
- pcre_exec(), it must set up its own pcre_extra block.
-
- The second argument contains option bits. At present, no options are
- defined for pcre_study(), 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 points to a textual error mes-
- sage. You should therefore test the error pointer for NULL after call-
- ing pcre_study(), to be sure that it has run successfully.
-
- This is a typical call to pcre_study():
-
- pcre_extra *pe;
- pe = pcre_study(
- re, /* result of pcre_compile() */
- 0, /* no options exist */
- &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-
- ble starting characters is created.
-
-
-LOCALE SUPPORT
-
- PCRE handles caseless matching, and determines whether characters are
- letters, digits, or whatever, by reference to a set of tables. When
- running in UTF-8 mode, this applies only to characters with codes less
- than 256. The library contains a default set of tables that is created
- in the default C locale when PCRE is compiled. This is used when the
- final argument of pcre_compile() is NULL, and is sufficient for many
- applications.
-
- An alternative set of tables can, however, be supplied. Such tables are
- built by calling the pcre_maketables() function, which has no argu-
- ments, in the relevant locale. The result can then be passed to
- pcre_compile() as often as necessary. For example, to build and use
- tables that are appropriate for the French locale (where accented char-
- acters with codes greater than 128 are treated as letters), the follow-
- ing code could be used:
-
- setlocale(LC_CTYPE, "fr");
- tables = pcre_maketables();
- re = pcre_compile(..., tables);
-
- The tables are built in memory that is obtained via pcre_malloc. The
- pointer that is passed to pcre_compile is saved with the compiled pat-
- tern, and the same tables are used via this pointer by pcre_study() and
- pcre_exec(). Thus, for any single pattern, compilation, studying and
- matching all happen in the same locale, but different patterns can be
- compiled in different locales. It is the caller's responsibility to
- ensure that the memory containing the tables remains available for as
- long as it is needed.
-
-
-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-
- 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
- success, or one of the following negative numbers:
-
- PCRE_ERROR_NULL the argument code was NULL
- the argument where was NULL
- PCRE_ERROR_BADMAGIC the "magic number" was not found
- PCRE_ERROR_BADOPTION the value of what was invalid
-
- Here is a typical call of pcre_fullinfo(), to obtain the length of the
- compiled pattern:
-
- int rc;
- unsigned long int length;
- rc = pcre_fullinfo(
- re, /* result of pcre_compile() */
- pe, /* result of pcre_study(), or NULL */
- 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
- 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
- there are no back references.
-
- PCRE_INFO_CAPTURECOUNT
-
- Return the number of capturing subpatterns in the pattern. The fourth
- argument should point to an int variable.
-
- PCRE_INFO_FIRSTBYTE
-
- Return information about the first byte of any matched string, for a
- non-anchored pattern. (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, e.g. from a pattern such as
- (cat|cow|coyote), it is returned in the integer pointed to by where.
- Otherwise, if either
-
- (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
- -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
- 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-
- able.
-
- 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
- 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
- example, for the pattern /^a\d+z\d+/ the returned value is "z", but for
- /^a\dz\d/ the returned value is -1.
-
- PCRE_INFO_NAMECOUNT
- 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-
- ses, which still acquire a number. A caller that wants to extract data
- from a named subpattern must convert the name to a number in order to
- access the correct pointers in the output vector (described with
- pcre_exec() below). In order to do this, it must first use these three
- values to obtain the name-to-number mapping table for the pattern.
-
- 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
- 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.
- For example, consider the following pattern (assume PCRE_EXTENDED is
- set, so white space - including newlines - is ignored):
-
- (?P<date> (?P<year>(\d\d)?\d\d) -
- (?P<month>\d\d) - (?P<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,
- with non-printing bytes shows in hex, and undefined bytes shown as ??:
-
- 00 01 d a t e 00 ??
- 00 05 d a y 00 ?? ??
- 00 04 m o n t h 00
- 00 02 y e a r 00 ??
-
- When writing code to extract data from named subpatterns, remember that
- the length of each entry may be different for each compiled pattern.
-
- 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
- option bits are those specified in the call to pcre_compile(), modified
- by any top-level option settings within the pattern itself.
-
- 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
- \A always
- \G always
- .* if PCRE_DOTALL is set and there are no back
- references to the subpattern in which .* appears
-
- For such patterns, the PCRE_ANCHORED bit is set in the options returned
- by pcre_fullinfo().
-
- PCRE_INFO_SIZE
-
- 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.
-
- PCRE_INFO_STUDYSIZE
-
- Returns 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
- 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
- variable.
-
-
-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-
- 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
- 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
- any matched string (see PCRE_INFO_FIRSTBYTE above).
-
-
-MATCHING A PATTERN
-
- int pcre_exec(const pcre *code, const pcre_extra *extra,
- 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
- pre-compiled pattern, which is passed in the code argument. If the pat-
- tern has been studied, the result of the study should be passed in the
- extra argument.
-
- Here is an example of a simple call to pcre_exec():
-
- int rc;
- int ovector[30];
- rc = pcre_exec(
- re, /* result of pcre_compile() */
- NULL, /* we didn't study the pattern */
- "some string", /* the subject string */
- 11, /* the length of the subject string */
- 0, /* start at offset 0 in the subject */
- 0, /* default options */
- ovector, /* vector for substring information */
- 30); /* number of elements in the vector */
-
- 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 fields in the block are as follows:
-
- unsigned long int flags;
- void *study_data;
- unsigned long int match_limit;
- void *callout_data;
-
- The flags field is a bitmap that specifies which of the other fields
- are set. The flag bits are:
-
- PCRE_EXTRA_STUDY_DATA
- PCRE_EXTRA_MATCH_LIMIT
- PCRE_EXTRA_CALLOUT_DATA
-
- 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 can
- add to the block by setting the other fields.
-
- 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
- repeats. Internally, PCRE uses a function called match() which it calls
- repeatedly (sometimes recursively). The limit is imposed on the number
- of times this function is called during a match, which has the effect
- of limiting the amount of recursion and backtracking that can take
- place. For patterns that are not anchored, the count starts from zero
- for each position in the subject string.
-
- The default limit for the library can be set when PCRE is built; the
- default default is 10 million, which handles all but the most extreme
- cases. You can reduce the default by suppling pcre_exec() with a
- pcre_extra block in which match_limit is set to a smaller value, and
- PCRE_EXTRA_MATCH_LIMIT is set in the flags field. If the limit is
- exceeded, pcre_exec() returns PCRE_ERROR_MATCHLIMIT.
-
- The pcre_callout field is used in conjunction with the "callout" fea-
- ture, which is described in the pcrecallout documentation.
-
- The PCRE_ANCHORED option can be passed in the options argument, whose
- unused bits must be zero. This limits pcre_exec() to matching at the
- first matching position. However, 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.
-
- When PCRE_UTF8 was set at compile time, the validity of the subject as
- a UTF-8 string is automatically checked, and the value of startoffset
- is also checked to ensure that it points to the start of a UTF-8 char-
- acter. If an invalid UTF-8 sequence of bytes is found, pcre_exec()
- returns the error PCRE_ERROR_BADUTF8. If startoffset contains 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-
- acter, is undefined. Your program may crash.
-
- There are also three further options that can be set only at matching
- time:
-
- PCRE_NOTBOL
-
- The first character of the 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.
-
- PCRE_NOTEOL
-
- The end of the string is not the end of a line, so the dollar metachar-
- acter should not match it nor (except in multiline mode) a newline
- immediately before it. Setting this without PCRE_MULTILINE (at compile
- time) causes dollar never to match.
-
- 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
- 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
- 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
- Perl's behaviour after matching a null string by first trying the match
- again at the same offset with PCRE_NOTEMPTY set, and then if that fails
- by advancing the starting offset (see below) and trying an ordinary
- match again.
-
- The subject string is passed to pcre_exec() as a pointer in subject, a
- length in length, and a starting byte offset in startoffset. 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.
-
- If the pattern was compiled with the PCRE_UTF8 option, the subject must
- be a sequence of bytes that is a valid UTF-8 string, and the starting
- offset must point to the beginning of a UTF-8 character. If an invalid
- UTF-8 string or offset is passed, an error (either PCRE_ERROR_BADUTF8
- or PCRE_ERROR_BADUTF8_OFFSET) is returned, unless the option
- PCRE_NO_UTF8_CHECK is set, in which case PCRE's behaviour is not
- defined.
-
- 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-
- cess. Setting startoffset differs from just passing over a shortened
- string and setting PCRE_NOTBOL in the case of a pattern that begins
- with any kind of lookbehind. For example, consider the pattern
-
- \Biss\B
-
- which finds occurrences of "iss" in the middle of words. (\B matches
- only if the current position in the subject is not a word boundary.)
- When applied to the string "Mississipi" the first call to pcre_exec()
- finds the first occurrence. If pcre_exec() is called again with just
- the remainder of the subject, namely "issipi", it does not match,
- because \B is always false at the start of the subject, which is deemed
- to be a word boundary. However, if pcre_exec() is passed the entire
- string again, but with startoffset set to 4, it finds the second
- occurrence of "iss" because it is able to look behind the starting
- point to discover that it is preceded by a letter.
-
- If a non-zero starting offset is passed when the pattern is anchored,
- one attempt to match at the given offset is tried. This can only suc-
- ceed if the pattern does not require the match to be at the start of
- the subject.
-
- In general, a pattern matches a certain portion of the subject, and in
- addition, further substrings from the subject may be picked out by
- parts of the pattern. Following the usage in Jeffrey Friedl's book,
- this is called "capturing" in what follows, and the phrase "capturing
- subpattern" is used for a fragment of a pattern that picks out a sub-
- 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. The first two-thirds of the vector is
- used to pass back captured substrings, each substring using a pair of
- integers. The remaining third of the vector is used as workspace by
- pcre_exec() while matching capturing subpatterns, and is not available
- for passing back information. The length passed in ovecsize should
- always be a multiple of three. If it is not, it is rounded down.
-
- When a match has been 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 the number of
- pairs that have been set. 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.
-
- Some convenience functions are provided for extracting the captured
- substrings as separate strings. These are described in the following
- section.
-
- It is possible for an 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)
- subpatterns 1 and 3 are matched, but 2 is not. When this happens, both
- offset values corresponding to the unused subpattern are set to -1.
-
- If a capturing subpattern is matched repeatedly, it is the last portion
- of the string that it matched that gets returned.
-
- If the vector is too small to hold all the captured substrings, it is
- used as far as possible (up to two-thirds of its length), and the func-
- tion returns a value of zero. In particular, 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 refer-
- ences and the ovector isn't big enough to remember the related sub-
- strings, PCRE has to get additional memory for use during matching.
- Thus it is usually advisable to supply an ovector.
-
- Note that pcre_info() can be used to find out how many capturing sub-
- patterns 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.
-
- If pcre_exec() fails, it returns a negative number. The following are
- defined in the header file:
-
- PCRE_ERROR_NOMATCH (-1)
-
- The subject string did not match the pattern.
-
- PCRE_ERROR_NULL (-2)
-
- Either code or subject was passed as NULL, or ovector was NULL and
- ovecsize was not zero.
-
- PCRE_ERROR_BADOPTION (-3)
-
- An unrecognized bit was set in the options argument.
-
- PCRE_ERROR_BADMAGIC (-4)
-
- 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. This is the error
- it gives when the magic number isn't present.
-
- PCRE_ERROR_UNKNOWN_NODE (-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
- overwriting of the compiled pattern.
-
- PCRE_ERROR_NOMEMORY (-6)
-
- 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
- memory is freed at the end of matching.
-
- PCRE_ERROR_NOSUBSTRING (-7)
-
- 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 recursion and 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.
- See the pcrecallout documentation for details.
-
- PCRE_ERROR_BADUTF8 (-10)
-
- 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-
- ter.
-
-
-EXTRACTING CAPTURED SUBSTRINGS BY NUMBER
-
- int pcre_copy_substring(const char *subject, int *ovector,
- int stringcount, int stringnumber, char *buffer,
- int buffersize);
-
- int pcre_get_substring(const char *subject, int *ovector,
- int stringcount, int stringnumber,
- const char **stringptr);
-
- 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
- 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
- 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.
-
- The first three arguments are the same for all three of these func-
- tions: subject is the subject string which 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
- 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
- be the size of 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, while
- 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
-
- PCRE_ERROR_NOMEMORY (-6)
-
- 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
- single block of memory which 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
-
- 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
- empty string. This can be distinguished from a genuine zero-length sub-
- 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_substring_list() can be used to free the memory returned by a
- previous call of pcre_get_substring() or pcre_get_substring_list(),
- respectively. 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 which cannot use
- pcre_free directly; it is for these cases that the functions are pro-
- vided.
-
-
-EXTRACTING CAPTURED SUBSTRINGS BY NAME
-
- int pcre_copy_named_substring(const pcre *code,
- const char *subject, int *ovector,
- int stringcount, const char *stringname,
- char *buffer, int buffersize);
-
- int pcre_get_stringnumber(const pcre *code,
- const char *name);
-
- int pcre_get_named_substring(const pcre *code,
- const char *subject, int *ovector,
- int stringcount, const char *stringname,
- const char **stringptr);
-
- To extract a substring by name, you first have to find associated num-
- ber. This can be done by calling pcre_get_stringnumber(). The first
- argument is the compiled pattern, and the second is the name. For exam-
- ple, for this pattern
-
- ab(?<xxx>\d+)...
-
- the number of the subpattern called "xxx" is 1. Given the number, you
- can then 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 functions that
- extract by number, and so are not re-described here. There are just two
- differences.
-
- 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
- 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.
-
-Last updated: 09 December 2003
-Copyright (c) 1997-2003 University of Cambridge.
------------------------------------------------------------------------------
-
-PCRE(3) PCRE(3)
-
-
-
-NAME
- PCRE - Perl-compatible regular expressions
-
-PCRE CALLOUTS
-
- int (*pcre_callout)(pcre_callout_block *);
-
- PCRE provides a feature called "callout", which is a means of temporar-
- ily passing control to the caller of PCRE in the middle of pattern
- matching. 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 all calling out.
-
- Within a regular expression, (?C) indicates the points at which the
- external function is to be called. Different callout points can be
- identified by putting 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
-
- During matching, when PCRE reaches a callout point (and pcre_callout is
- set), the external function is called. Its only argument is a pointer
- to a pcre_callout block. This contains the following variables:
-
- int version;
- int callout_number;
- int *offset_vector;
- const char *subject;
- int subject_length;
- int start_match;
- int current_position;
- int capture_top;
- int capture_last;
- void *callout_data;
-
- The version field is an integer containing the version number of the
- block format. The current version is zero. The version number may
- change in future if additional fields are added, but the intention is
- never to remove any of the existing fields.
-
- The callout_number field contains the number of the callout, as com-
- piled into the pattern (that is, the number after ?C).
-
- The offset_vector field is a pointer to the vector of offsets that was
- passed by the caller to pcre_exec(). The contents can be inspected in
- order to extract substrings that have been matched so far, in the same
- way as for extracting substrings after a match has completed.
-
- The subject and subject_length fields contain copies the values that
- were passed to pcre_exec().
-
- The start_match field contains the offset within the subject at which
- the current match attempt started. If the pattern is not anchored, the
- callout function may be called several times for different starting
- points.
-
- The current_position field contains the offset within the subject of
- the current match pointer.
-
- The capture_top field contains one more than the number of the highest
- numbered captured substring so far. If no substrings have been
- captured, the value of capture_top is one.
-
- The capture_last field contains the number of the most recently cap-
- tured substring.
-
- The callout_data field contains a value that is passed to pcre_exec()
- by the caller specifically so that it can be passed back in callouts.
- It is passed in the pcre_callout field of the pcre_extra data struc-
- ture. If no such data was passed, the value of callout_data in a
- pcre_callout block is NULL. There is a description of the pcre_extra
- structure in the pcreapi documentation.
-
-
-
-RETURN VALUES
-
- The callout function returns an integer. If the value is zero, matching
- proceeds as normal. If the value is greater than zero, matching fails
- at the current point, but backtracking to test other possibilities goes
- ahead, just as if a lookahead assertion had failed. If the value is
- less than zero, the match is abandoned, and pcre_exec() returns the
- value.
-
- Negative values should normally be chosen from the set of
- PCRE_ERROR_xxx values. In particular, PCRE_ERROR_NOMATCH forces a stan-
- dard "no match" failure. The error number PCRE_ERROR_CALLOUT is
- reserved for use by callout functions; it will never be used by PCRE
- itself.
-
-Last updated: 21 January 2003
-Copyright (c) 1997-2003 University of Cambridge.
------------------------------------------------------------------------------
-
-PCRE(3) PCRE(3)
-
-
-
-NAME
- PCRE - Perl-compatible regular expressions
-
-DIFFERENCES FROM PERL
-
- This document describes the differences in the ways that PCRE and Perl
- handle regular expressions. The differences described here are with
- respect to Perl 5.8.
-
- 1. PCRE does not have full UTF-8 support. Details of what it does have
- are given in the section on UTF-8 support in the main pcre page.
-
- 2. PCRE does not allow repeat quantifiers on lookahead assertions. Perl
- permits them, but they do not mean what you might think. For example,
- (?!a){3} does not assert that the next three characters are not "a". It
- just asserts that the next character is not "a" three times.
-
- 3. Capturing subpatterns that occur inside negative lookahead asser-
- tions are counted, but their entries in the offsets vector are never
- set. Perl sets its numerical variables from any such patterns that are
- matched before the assertion fails to match something (thereby succeed-
- ing), but only if the negative lookahead assertion contains just one
- branch.
-
- 4. Though binary zero characters are supported in the subject string,
- they are not allowed in a pattern string because it is passed as a nor-
- mal C string, terminated by zero. The escape sequence "\0" can be used
- in the pattern to represent a binary zero.
-
- 5. The following Perl escape sequences are not supported: \l, \u, \L,
- \U, \P, \p, \N, and \X. In fact these are implemented by Perl's general
- string-handling and are not part of its pattern matching engine. If any
- of these are encountered by PCRE, an error is generated.
-
- 6. PCRE does support the \Q...\E escape for quoting substrings. Charac-
- ters in between are treated as literals. This is slightly different
- from Perl in that $ and @ are also handled as literals inside the
- quotes. In Perl, they cause variable interpolation (but of course PCRE
- does not have variables). Note the following examples:
-
- Pattern PCRE matches Perl matches
-
- \Qabc$xyz\E abc$xyz abc followed by the
- contents of $xyz
- \Qabc\$xyz\E abc\$xyz abc\$xyz
- \Qabc\E\$\Qxyz\E abc$xyz abc$xyz
-
- The \Q...\E sequence is recognized both inside and outside character
- classes.
-
- 7. Fairly obviously, PCRE does not support the (?{code}) and (?p{code})
- constructions. However, there is some experimental support for recur-
- sive patterns using the non-Perl items (?R), (?number) and (?P>name).
- Also, the PCRE "callout" feature allows an external function to be
- called during pattern matching.
-
- 8. There are some differences that are concerned with the settings of
- captured strings when part of a pattern is repeated. For example,
- matching "aba" against the pattern /^(a(b)?)+$/ in Perl leaves $2
- unset, but in PCRE it is set to "b".
-
- 9. PCRE provides some extensions to the Perl regular expression
- facilities:
-
- (a) Although lookbehind assertions must match fixed length strings,
- each alternative branch of a lookbehind assertion can match a different
- length of string. Perl requires them all to have the same length.
-
- (b) If PCRE_DOLLAR_ENDONLY is set and PCRE_MULTILINE is not set, the $
- meta-character matches only at the very end of the string.
-
- (c) If PCRE_EXTRA is set, a backslash followed by a letter with no spe-
- cial meaning is faulted.
-
- (d) If PCRE_UNGREEDY is set, the greediness of the repetition quanti-
- fiers is inverted, that is, by default they are not greedy, but if fol-
- lowed by a question mark they are.
-
- (e) PCRE_ANCHORED can be used to force a pattern to be tried only at
- the first matching position in the subject string.
-
- (f) The PCRE_NOTBOL, PCRE_NOTEOL, PCRE_NOTEMPTY, and PCRE_NO_AUTO_CAP-
- TURE options for pcre_exec() have no Perl equivalents.
-
- (g) The (?R), (?number), and (?P>name) constructs allows for recursive
- pattern matching (Perl can do this using the (?p{code}) construct,
- which PCRE cannot support.)
-
- (h) PCRE supports named capturing substrings, using the Python syntax.
-
- (i) PCRE supports the possessive quantifier "++" syntax, taken from
- Sun's Java package.
-
- (j) The (R) condition, for testing recursion, is a PCRE extension.
-
- (k) The callout facility is PCRE-specific.
-
-Last updated: 09 December 2003
-Copyright (c) 1997-2003 University of Cambridge.
------------------------------------------------------------------------------
-
-PCRE(3) PCRE(3)
-
-
-
-NAME
- PCRE - Perl-compatible regular expressions
-
-PCRE REGULAR EXPRESSION DETAILS
-
- The syntax and semantics of the regular expressions supported by PCRE
- are described below. Regular expressions are also described in the Perl
- documentation and in a number of other books, some of which have copi-
- ous examples. Jeffrey Friedl's "Mastering Regular Expressions", pub-
- lished by O'Reilly, covers them in great detail. The description here
- is intended as reference documentation.
-
- The basic operation of PCRE is on strings of bytes. However, there is
- also support for UTF-8 character strings. To use this support you must
- build PCRE to include UTF-8 support, and then call pcre_compile() with
- the PCRE_UTF8 option. How this affects the pattern matching is men-
- tioned in several places below. There is also a summary of UTF-8 fea-
- tures in the section on UTF-8 support in the main pcre page.
-
- A regular expression is a pattern that is matched against a subject
- string from left to right. Most characters stand for themselves in a
- pattern, and match the corresponding characters in the subject. As a
- trivial example, the pattern
-
- The quick brown fox
-
- matches a portion of a subject string that is identical to itself. The
- power of regular expressions comes from the ability to include alterna-
- tives and repetitions in the pattern. These are encoded in the pattern
- by the use of meta-characters, which do not stand for themselves but
- instead are interpreted in some special way.
-
- There are two different sets of meta-characters: those that are recog-
- nized anywhere in the pattern except within square brackets, and those
- that are recognized in square brackets. Outside square brackets, the
- meta-characters are as follows:
-
- \ general escape character with several uses
- ^ assert start of string (or line, in multiline mode)
- $ assert end of string (or line, in multiline mode)
- . match any character except newline (by default)
- [ start character class definition
- | start of alternative branch
- ( start subpattern
- ) end subpattern
- ? extends the meaning of (
- also 0 or 1 quantifier
- also quantifier minimizer
- * 0 or more quantifier
- + 1 or more quantifier
- also "possessive quantifier"
- { start min/max quantifier
-
- Part of a pattern that is in square brackets is called a "character
- class". In a character class the only meta-characters are:
-
- \ general escape character
- ^ negate the class, but only if the first character
- - indicates character range
- [ POSIX character class (only if followed by POSIX
- syntax)
- ] terminates the character class
-
- The following sections describe the use of each of the meta-characters.
-
-
-BACKSLASH
-
- The backslash character has several uses. Firstly, if it is followed by
- a non-alphameric character, it takes away any special meaning that
- character may have. This use of backslash as an escape character
- applies both inside and outside character classes.
-
- For example, if you want to match a * character, you write \* in the
- pattern. This escaping action applies whether or not the following
- character would otherwise be interpreted as a meta-character, so it is
- always safe to precede a non-alphameric with backslash to specify that
- it stands for itself. In particular, if you want to match a backslash,
- you write \\.
-
- If a pattern is compiled with the PCRE_EXTENDED option, whitespace in
- the pattern (other than in a character class) and characters between a
- # outside a character class and the next newline character are ignored.
- An escaping backslash can be used to include a whitespace or # charac-
- ter as part of the pattern.
-
- If you want to remove the special meaning from a sequence of charac-
- ters, you can do so by putting them between \Q and \E. This is differ-
- ent from Perl in that $ and @ are handled as literals in \Q...\E
- sequences in PCRE, whereas in Perl, $ and @ cause variable interpola-
- tion. Note the following examples:
-
- Pattern PCRE matches Perl matches
-
- \Qabc$xyz\E abc$xyz abc followed by the
- contents of $xyz
- \Qabc\$xyz\E abc\$xyz abc\$xyz
- \Qabc\E\$\Qxyz\E abc$xyz abc$xyz
-
- The \Q...\E sequence is recognized both inside and outside character
- classes.
-
- A second use of backslash provides a way of encoding non-printing char-
- acters in patterns in a visible manner. There is no restriction on the
- appearance of non-printing characters, apart from the binary zero that
- terminates a pattern, but when a pattern is being prepared by text
- editing, it is usually easier to use one of the following escape
- sequences than the binary character it represents:
-
- \a alarm, that is, the BEL character (hex 07)
- \cx "control-x", where x is any character
- \e escape (hex 1B)
- \f formfeed (hex 0C)
- \n newline (hex 0A)
- \r carriage return (hex 0D)
- \t tab (hex 09)
- \ddd character with octal code ddd, or backreference
- \xhh character with hex code hh
- \x{hhh..} character with hex code hhh... (UTF-8 mode only)
-
- The precise effect of \cx is as follows: if x is a lower case letter,
- it is converted to upper case. Then bit 6 of the character (hex 40) is
- inverted. Thus \cz becomes hex 1A, but \c{ becomes hex 3B, while \c;
- becomes hex 7B.
-
- After \x, from zero to two hexadecimal digits are read (letters can be
- in upper or lower case). In UTF-8 mode, any number of hexadecimal dig-
- its may appear between \x{ and }, but the value of the character code
- must be less than 2**31 (that is, the maximum hexadecimal value is
- 7FFFFFFF). If characters other than hexadecimal digits appear between
- \x{ and }, or if there is no terminating }, this form of escape is not
- recognized. Instead, the initial \x will be interpreted as a basic hex-
- adecimal escape, with no following digits, giving a byte whose value is
- zero.
-
- Characters whose value is less than 256 can be defined by either of the
- two syntaxes for \x when PCRE is in UTF-8 mode. There is no difference
- in the way they are handled. For example, \xdc is exactly the same as
- \x{dc}.
-
- After \0 up to two further octal digits are read. In both cases, if
- there are fewer than two digits, just those that are present are used.
- Thus the sequence \0\x\07 specifies two binary zeros followed by a BEL
- character (code value 7). Make sure you supply two digits after the
- initial zero if the character that follows is itself an octal digit.
-
- The handling of a backslash followed by a digit other than 0 is compli-
- cated. Outside a character class, PCRE reads it and any following dig-
- its as a decimal number. If the number is less than 10, or if there
- have been at least that many previous capturing left parentheses in the
- expression, the entire sequence is taken as a back reference. A
- description of how this works is given later, following the discussion
- of parenthesized subpatterns.
-
- Inside a character class, or if the decimal number is greater than 9
- and there have not been that many capturing subpatterns, PCRE re-reads
- up to three octal digits following the backslash, and generates a sin-
- gle byte from the least significant 8 bits of the value. Any subsequent
- digits stand for themselves. For example:
-
- \040 is another way of writing a space
- \40 is the same, provided there are fewer than 40
- previous capturing subpatterns
- \7 is always a back reference
- \11 might be a back reference, or another way of
- writing a tab
- \011 is always a tab
- \0113 is a tab followed by the character "3"
- \113 might be a back reference, otherwise the
- character with octal code 113
- \377 might be a back reference, otherwise
- the byte consisting entirely of 1 bits
- \81 is either a back reference, or a binary zero
- followed by the two characters "8" and "1"
-
- Note that octal values of 100 or greater must not be introduced by a
- leading zero, because no more than three octal digits are ever read.
-
- All the sequences that define a single byte value or a single UTF-8
- character (in UTF-8 mode) can be used both inside and outside character
- classes. In addition, inside a character class, the sequence \b is
- interpreted as the backspace character (hex 08). Outside a character
- class it has a different meaning (see below).
-
- The third use of backslash is for specifying generic character types:
-
- \d any decimal digit
- \D any character that is not a decimal digit
- \s any whitespace character
- \S any character that is not a whitespace character
- \w any "word" character
- \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,
- of each pair.
-
- In UTF-8 mode, characters with values greater than 255 never match \d,
- \s, or \w, and always match \D, \S, and \W.
-
- 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).
-
- A "word" character is any letter or digit or the underscore character,
- that is, any character which can be part of a Perl "word". The defini-
- tion of letters and digits is controlled by PCRE's character tables,
- and may vary if locale- specific matching is taking place (see "Locale
- support" in the pcreapi page). For example, in the "fr" (French)
- locale, some character codes greater than 128 are used for accented
- letters, and these are matched by \w.
-
- 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
- of them fail, since there is no character to match.
-
- The fourth 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
- \B matches when not at a word boundary
- \A matches at start of subject
- \Z matches at end of subject or before newline at end
- \z matches at end of subject
- \G matches at first matching position in subject
-
- 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
- string if the first or last character matches \w, respectively.
-
- The \A, \Z, and \z assertions differ from the traditional circumflex
- and dollar (described below) 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.
-
- They are not affected by the PCRE_NOTBOL or PCRE_NOTEOL options. If the
- startoffset argument of pcre_exec() is non-zero, indicating that match-
- ing is to start at a point other than the beginning of the subject, \A
- can never match. The difference between \Z and \z is that \Z matches
- before a newline that is the last character of the string as well as at
- the end of the string, 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-
- 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
- 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
- at a time, it cannot reproduce this behaviour.
-
- 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.
-
-
-CIRCUMFLEX AND DOLLAR
-
- Outside a character class, in the default matching mode, the circumflex
- character is an assertion which 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
- constructs that can cause a pattern to be anchored.)
-
- A dollar character is an assertion which is true only if the current
- matching point is at the end of the subject string, or immediately
- before a newline character that is the last character in 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 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
- 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, they match immedi-
- ately after and immediately before an internal newline character,
- respectively, in addition to matching at the start and end of the sub-
- ject string. For example, the pattern /^abc$/ matches the subject
- string "def\nabc" 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 cir-
- cumflex 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 PCRE_MULTILINE is set or
- not.
-
-
-FULL STOP (PERIOD, DOT)
-
- Outside a character class, a dot in the pattern matches any one charac-
- ter in the subject, including a non-printing character, but not (by
- default) newline. In UTF-8 mode, a dot matches any UTF-8 character,
- which might be more than one byte long, except (by default) for new-
- line. If the PCRE_DOTALL option is set, dots match newlines as well.
- The handling of dot is entirely independent of the handling of circum-
- flex and dollar, the only relationship being that they both involve
- newline characters. 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 a new-
- line. The feature is provided in Perl in order to match individual
- bytes in UTF-8 mode. Because it breaks up UTF-8 characters into indi-
- vidual bytes, what remains in the string may be a malformed UTF-8
- string. For this reason it is best avoided.
-
- PCRE does not allow \C to appear in lookbehind assertions (see below),
- because in UTF-8 mode it makes it impossible to calculate the length of
- the lookbehind.
-
-
-SQUARE BRACKETS
-
- 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
- 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
- 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
- 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.
- Note that a circumflex is just a convenient notation for specifying the
- characters which are in the class by enumerating those that are not. It
- is not an assertion: it still consumes a character from the subject
- string, and 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
- 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. PCRE does not support the
- concept of case for characters with values greater than 255.
-
- The newline character is never treated in any special way in character
- classes, whatever the setting of the PCRE_DOTALL or PCRE_MULTILINE
- options is. A class such as [^a] will always match a newline.
-
- 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 single class containing a range followed by two separate
- 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
- 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 if character tables for the
- "fr" locale are in use, [\xc8-\xcb] matches accented E characters in
- both cases.
-
- The character types \d, \D, \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 circumflex 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.
-
- All non-alphameric characters other than \, -, ^ (at the start) and the
- terminating ] are non-special in character classes, but it does no harm
- if they are escaped.
-
-
-POSIX CHARACTER CLASSES
-
- Perl supports the POSIX notation for character classes, which uses
- names enclosed by [: and :] within the enclosing square brackets. PCRE
- also supports this notation. For example,
-
- [01[:alpha:]%]
-
- matches "0", "1", any alphabetic character, or "%". The supported class
- names are
-
- alnum letters and digits
- alpha letters
- ascii character codes 0 - 127
- blank space or tab only
- cntrl control characters
- digit decimal digits (same as \d)
- graph printing characters, excluding space
- lower lower case letters
- print printing characters, including space
- punct printing characters, excluding letters and digits
- space white space (not quite the same as \s)
- upper upper case letters
- 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
- 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
- by a ^ character after the colon. For example,
-
- [12[:^digit:]]
-
- 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.
-
- In UTF-8 mode, characters with values greater than 255 do not match any
- of the POSIX character classes.
-
-
-VERTICAL BAR
-
- 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
- string). The matching process tries each alternative in turn, from
- left to right, and the first one that succeeds is used. If the alterna-
- tives are within a subpattern (defined below), "succeeds" means match-
- ing the rest of the main pattern as well as the alternative in the sub-
- pattern.
-
-
-INTERNAL OPTION SETTING
-
- The settings of the PCRE_CASELESS, PCRE_MULTILINE, PCRE_DOTALL, and
- PCRE_EXTENDED options 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
- m for PCRE_MULTILINE
- s for PCRE_DOTALL
- x for PCRE_EXTENDED
-
- 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
- hyphen, the option is unset.
-
- 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 affects only that part of the cur-
- rent 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
- 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
- some very weird behaviour otherwise.
-
- The PCRE-specific options PCRE_UNGREEDY and PCRE_EXTRA can be changed
- in the same way as the Perl-compatible options by using the characters
- U and X respectively. The (?X) flag setting is special in that it must
- always occur earlier in the pattern than any of the additional features
- it turns on, even when it is at top level. It is best put at the start.
-
-
-SUBPATTERNS
-
- Subpatterns are delimited by parentheses (round brackets), which can be
- nested. Marking part of a pattern as a subpattern does two things:
-
- 1. It localizes a set of alternatives. For example, the pattern
-
- cat(aract|erpillar|)
-
- matches one of the words "cat", "cataract", or "caterpillar". Without
- the parentheses, it would match "cataract", "erpillar" or the empty
- string.
-
- 2. It sets up the subpattern as a capturing subpattern (as defined
- above). 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 the numbers of the capturing
- subpatterns.
-
- For example, if the string "the red king" is matched against the pat-
- tern
-
- the ((red|white) (king|queen))
-
- 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
- matched against the pattern
-
- the ((?:red|white) (king|queen))
-
- the captured substrings are "white queen" and "queen", and are numbered
- 1 and 2. The maximum number of capturing subpatterns is 65535, and the
- maximum depth of nesting of all subpatterns, both capturing and non-
- capturing, is 200.
-
- 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
- "Saturday".
-
-
-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 the difficulty, PCRE supports the naming of sub-
- patterns, something that Perl does not provide. The Python syntax
- (?P<name>...) is used. Names consist of alphanumeric characters and
- underscores, and must be unique within a pattern.
-
- Named capturing parentheses are still allocated numbers as well as
- names. The PCRE API provides function calls for extracting the name-to-
- number translation table from a compiled pattern. For further details
- see the pcreapi documentation.
-
-
-REPETITION
-
- Repetition is specified by quantifiers, which can follow any of the
- following items:
-
- a literal data character
- the . metacharacter
- the \C escape sequence
- escapes such as \d that match single characters
- a character class
- 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,
- 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. Thus
-
- [aeiou]{3,}
-
- matches at least 3 successive vowels, but may match many more, while
-
- \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-
- 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
- individual bytes. Thus, for example, \x{100}{2} matches two UTF-8 char-
- acters, each of which is represented by a two-byte sequence.
-
- The quantifier {0} is permitted, causing the expression to behave as if
- the previous item and the quantifier were not present.
-
- For convenience (and historical compatibility) the three most common
- quantifiers have single-character abbreviations:
-
- * is equivalent to {0,}
- + is equivalent to {1,}
- ? is equivalent to {0,1}
-
- It is possible to construct infinite loops by following a subpattern
- that can match no characters with a quantifier that has no upper limit,
- for example:
-
- (a?)*
-
- Earlier versions of Perl and PCRE used to give an error at compile time
- for such patterns. However, because there are cases where this can be
- useful, such patterns are now accepted, but if any repetition of the
- subpattern does in fact match no characters, the loop is forcibly bro-
- ken.
-
- By default, the quantifiers are "greedy", that is, they match as much
- as possible (up to the maximum number of permitted times), without
- causing the rest of the pattern to fail. The classic example of where
- this gives problems is in trying to match comments in C programs. These
- appear between the sequences /* and */ and within the sequence, indi-
- vidual * and / characters may appear. An attempt to match C comments by
- applying the pattern
-
- /\*.*\*/
-
- to the string
-
- /* first command */ not comment /* second comment */
-
- fails, because it matches the entire string owing to the greediness of
- the .* item.
-
- However, if a quantifier is followed by a question mark, it ceases to
- be greedy, and instead matches the minimum number of times possible, so
- the pattern
-
- /\*.*?\*/
-
- does the right thing with the C comments. The meaning of the various
- quantifiers is not otherwise changed, just the preferred number of
- matches. Do not confuse this use of question mark with its use as a
- quantifier in its own right. Because it has two uses, it can sometimes
- appear doubled, as in
-
- \d??\d
-
- which matches one digit by preference, but can match two if that is the
- only way the rest of the pattern matches.
-
- If the PCRE_UNGREEDY option is set (an option which is not available in
- Perl), the quantifiers are not greedy by default, but individual ones
- can be made greedy by following them with a question mark. In other
- words, it inverts the default behaviour.
-
- When a parenthesized subpattern is quantified with a minimum repeat
- count that is greater than 1 or with a limited maximum, more store is
- required for the compiled pattern, in proportion to the size of the
- minimum or maximum.
-
- If a pattern starts with .* or .{0,} and the PCRE_DOTALL option (equiv-
- alent to Perl's /s) is set, thus allowing the . to match newlines, the
- pattern is implicitly anchored, because whatever follows will be tried
- against every character position in the subject string, so there is no
- point in retrying the overall match at any position after the first.
- PCRE normally treats such a pattern as though it were preceded by \A.
-
- In cases where it is known that the subject string contains no new-
- lines, it is worth setting PCRE_DOTALL in order to obtain this opti-
- mization, or alternatively using ^ to indicate anchoring explicitly.
-
- However, there is one situation where the optimization cannot be used.
- When .* is inside capturing parentheses that are the subject of a
- backreference elsewhere in the pattern, a match at the start may fail,
- and a later one succeed. Consider, for example:
-
- (.*)abc\1
-
- If the subject is "xyz123abc123" the match point is the fourth charac-
- ter. For this reason, such a pattern is not implicitly anchored.
-
- When a capturing subpattern is repeated, the value captured is the sub-
- string that matched the final iteration. For example, after
-
- (tweedle[dume]{3}\s*)+
-
- has matched "tweedledum tweedledee" the value of the captured substring
- is "tweedledee". However, if there are nested capturing subpatterns,
- the corresponding captured values may have been set in previous itera-
- tions. For example, after
-
- /(a|(b))+/
-
- matches "aba" the value of the second captured substring is "b".
-
-
-ATOMIC GROUPING AND POSSESSIVE QUANTIFIERS
-
- With both maximizing and minimizing repetition, failure of what follows
- normally causes the repeated item to be re-evaluated to see if a dif-
- ferent number of repeats allows the rest of the pattern to match. Some-
- times it is useful to prevent this, either to change the nature of the
- match, or to cause it fail earlier than it otherwise might, when the
- author of the pattern knows there is no point in carrying on.
-
- Consider, for example, the pattern \d+foo when applied to the subject
- line
-
- 123456bar
-
- After matching all 6 digits and then failing to match "foo", the normal
- action of the matcher is to try again with only 5 digits matching the
- \d+ item, and then with 4, and so on, before ultimately failing.
- "Atomic grouping" (a term taken from Jeffrey Friedl's book) provides
- the means for specifying that once a subpattern has matched, it is not
- to be re-evaluated in this way.
-
- If we use atomic grouping for the previous example, the matcher would
- give up immediately on failing to match "foo" the first time. The nota-
- tion is a kind of special parenthesis, starting with (?> as in this
- example:
-
- (?>\d+)foo
-
- This kind of parenthesis "locks up" the part of the pattern it con-
- tains once it has matched, and a failure further into the pattern is
- prevented from backtracking into it. Backtracking past it to previous
- items, however, works as normal.
-
- An alternative description is that a subpattern of this type matches
- the string of characters that an identical standalone pattern would
- match, if anchored at the current point in the subject string.
-
- Atomic grouping subpatterns are not capturing subpatterns. Simple cases
- such as the above example can be thought of as a maximizing repeat that
- must swallow everything it can. So, while both \d+ and \d+? are pre-
- pared to adjust the number of digits they match in order to make the
- rest of the pattern match, (?>\d+) can only match an entire sequence of
- digits.
-
- Atomic groups in general can of course contain arbitrarily complicated
- subpatterns, and can be nested. However, when the subpattern for an
- atomic group is just a single repeated item, as in the example above, a
- simpler notation, called a "possessive quantifier" can be used. This
- consists of an additional + character following a quantifier. Using
- this notation, the previous example can be rewritten as
-
- \d++bar
-
- Possessive quantifiers are always greedy; the setting of the
- PCRE_UNGREEDY option is ignored. They are a convenient notation for the
- simpler forms of atomic group. However, there is no difference in the
- meaning or processing of a possessive quantifier and the equivalent
- atomic group.
-
- The possessive quantifier syntax is an extension to the Perl syntax. It
- originates in Sun's Java package.
-
- When a pattern contains an unlimited repeat inside a subpattern that
- can itself be repeated an unlimited number of times, the use of an
- atomic group is the only way to avoid some failing matches taking a
- very long time indeed. The pattern
-
- (\D+|<\d+>)*[!?]
-
- matches an unlimited number of substrings that either consist of non-
- digits, or digits enclosed in <>, followed by either ! or ?. When it
- matches, it runs quickly. However, if it is applied to
-
- aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-
- it takes a long time before reporting failure. This is because the
- string can be divided between the two repeats in a large number of
- ways, and all have to be tried. (The example used [!?] rather than a
- single character at the end, because both PCRE and Perl have an opti-
- mization that allows for fast failure when a single character is used.
- They remember the last single character that is required for a match,
- and fail early if it is not present in the string.) If the pattern is
- changed to
-
- ((?>\D+)|<\d+>)*[!?]
-
- sequences of non-digits cannot be broken, and failure happens quickly.
-
-
-BACK REFERENCES
-
- Outside a character class, a backslash followed by a digit greater than
- 0 (and possibly further digits) is a back reference to a capturing sub-
- pattern earlier (that is, to its left) in the pattern, provided there
- have been that many previous capturing left parentheses.
-
- However, if the decimal number following the backslash is less than 10,
- it is always taken as a back reference, and causes an error only if
- there are not that many capturing left parentheses in the entire pat-
- tern. In other words, the parentheses that are referenced need not be
- to the left of the reference for numbers less than 10. See the section
- entitled "Backslash" above for further details of the handling of dig-
- its following a backslash.
-
- A back reference matches whatever actually matched the capturing sub-
- pattern in the current subject string, rather than anything matching
- the subpattern itself (see "Subpatterns as subroutines" below for a way
- of doing that). So the pattern
-
- (sens|respons)e and \1ibility
-
- matches "sense and sensibility" and "response and responsibility", but
- not "sense and responsibility". If caseful matching is in force at the
- time of the back reference, the case of letters is relevant. For exam-
- ple,
-
- ((?i)rah)\s+\1
-
- matches "rah rah" and "RAH RAH", but not "RAH rah", even though the
- original capturing subpattern is matched caselessly.
-
- Back references to named subpatterns use the Python syntax (?P=name).
- We could rewrite the above example as follows:
-
- (?<p1>(?i)rah)\s+(?P=p1)
-
- There may be more than one back reference to the same subpattern. If a
- subpattern has not actually been used in a particular match, any back
- references to it always fail. For example, the pattern
-
- (a|(bc))\2
-
- always fails if it starts to match "a" rather than "bc". Because there
- may be many capturing parentheses in a pattern, all digits following
- the backslash are taken as part of a potential back reference number.
- If the pattern continues with a digit character, some delimiter must be
- used to terminate the back reference. If the PCRE_EXTENDED option is
- set, this can be whitespace. Otherwise an empty comment can be used.
-
- A back reference that occurs inside the parentheses to which it refers
- fails when the subpattern is first used, so, for example, (a\1) never
- matches. However, such references can be useful inside repeated sub-
- patterns. For example, the pattern
-
- (a|b\1)+
-
- matches any number of "a"s and also "aba", "ababbaa" etc. At each iter-
- ation of the subpattern, the back reference matches the character
- string corresponding to the previous iteration. In order for this to
- work, the pattern must be such that the first iteration does not need
- to match the back reference. This can be done using alternation, as in
- the example above, or by a quantifier with a minimum of zero.
-
-
-ASSERTIONS
-
- An assertion is a test on the characters following or preceding the
- current matching point that does not actually consume any characters.
- The simple assertions coded as \b, \B, \A, \G, \Z, \z, ^ and $ are
- described above. More complicated assertions are coded as subpatterns.
- There are two kinds: those that look ahead of the current position in
- the subject string, and those that look behind it.
-
- An assertion subpattern is matched in the normal way, except that it
- does not cause the current matching position to be changed. Lookahead
- assertions start with (?= for positive assertions and (?! for negative
- assertions. For example,
-
- \w+(?=;)
-
- matches a word followed by a semicolon, but does not include the semi-
- colon in the match, and
-
- foo(?!bar)
-
- matches any occurrence of "foo" that is not followed by "bar". Note
- that the apparently similar pattern
-
- (?!foo)bar
-
- does not find an occurrence of "bar" that is preceded by something
- other than "foo"; it finds any occurrence of "bar" whatsoever, because
- the assertion (?!foo) is always true when the next three characters are
- "bar". A lookbehind assertion is needed to achieve this effect.
-
- If you want to force a matching failure at some point in a pattern, the
- most convenient way to do it is with (?!) because an empty string
- always matches, so an assertion that requires there not to be an empty
- string must always fail.
-
- Lookbehind assertions start with (?<= for positive assertions and (?<!
- for negative assertions. For example,
-
- (?<!foo)bar
-
- does find an occurrence of "bar" that is not preceded by "foo". The
- contents of a lookbehind assertion are restricted such that all the
- strings it matches must have a fixed length. However, if there are sev-
- eral alternatives, they do not all have to have the same fixed length.
- Thus
-
- (?<=bullock|donkey)
-
- is permitted, but
-
- (?<!dogs?|cats?)
-
- causes an error at compile time. Branches that match different length
- strings are permitted only at the top level of a lookbehind assertion.
- This is an extension compared with Perl (at least for 5.8), which
- requires all branches to match the same length of string. An assertion
- such as
-
- (?<=ab(c|de))
-
- is not permitted, because its single top-level branch can match two
- different lengths, but it is acceptable if rewritten to use two top-
- level branches:
-
- (?<=abc|abde)
-
- The implementation of lookbehind assertions is, for each alternative,
- to temporarily move the current position back by the fixed width and
- then try to match. If there are insufficient characters before the cur-
- rent position, the match is deemed to fail.
-
- PCRE does not allow the \C escape (which matches a single byte in UTF-8
- mode) to appear in lookbehind assertions, because it makes it impossi-
- ble to calculate the length of the lookbehind.
-
- Atomic groups can be used in conjunction with lookbehind assertions to
- specify efficient matching at the end of the subject string. Consider a
- simple pattern such as
-
- abcd$
-
- when applied to a long string that does not match. Because matching
- proceeds from left to right, PCRE will look for each "a" in the subject
- and then see if what follows matches the rest of the pattern. If the
- pattern is specified as
-
- ^.*abcd$
-
- the initial .* matches the entire string at first, but when this fails
- (because there is no following "a"), it backtracks to match all but the
- last character, then all but the last two characters, and so on. Once
- again the search for "a" covers the entire string, from right to left,
- so we are no better off. However, if the pattern is written as
-
- ^(?>.*)(?<=abcd)
-
- or, equivalently,
-
- ^.*+(?<=abcd)
-
- there can be no backtracking for the .* item; it can match only the
- entire string. The subsequent lookbehind assertion does a single test
- on the last four characters. If it fails, the match fails immediately.
- For long strings, this approach makes a significant difference to the
- processing time.
-
- Several assertions (of any sort) may occur in succession. For example,
-
- (?<=\d{3})(?<!999)foo
-
- matches "foo" preceded by three digits that are not "999". Notice that
- each of the assertions is applied independently at the same point in
- the subject string. First there is a check that the previous three
- characters are all digits, and then there is a check that the same
- three characters are not "999". This pattern does not match "foo" pre-
- ceded by six characters, the first of which are digits and the last
- three of which are not "999". For example, it doesn't match "123abc-
- foo". A pattern to do that is
-
- (?<=\d{3}...)(?<!999)foo
-
- This time the first assertion looks at the preceding six characters,
- checking that the first three are digits, and then the second assertion
- checks that the preceding three characters are not "999".
-
- Assertions can be nested in any combination. For example,
-
- (?<=(?<!foo)bar)baz
-
- matches an occurrence of "baz" that is preceded by "bar" which in turn
- is not preceded by "foo", while
-
- (?<=\d{3}(?!999)...)foo
-
- is another pattern which matches "foo" preceded by three digits and any
- three characters that are not "999".
-
- Assertion subpatterns are not capturing subpatterns, and may not be
- repeated, because it makes no sense to assert the same thing several
- times. If any kind of assertion contains capturing subpatterns within
- it, these are counted for the purposes of numbering the capturing sub-
- patterns in the whole pattern. However, substring capturing is carried
- out only for positive assertions, because it does not make sense for
- negative assertions.
-
-
-CONDITIONAL SUBPATTERNS
-
- It is possible to cause the matching process to obey a subpattern con-
- ditionally or to choose between two alternative subpatterns, depending
- on the result of an assertion, or whether a previous capturing
- subpattern matched or not. The two possible forms of conditional sub-
- pattern are
-
- (?(condition)yes-pattern)
- (?(condition)yes-pattern|no-pattern)
-
- If the condition is satisfied, the yes-pattern is used; otherwise the
- no-pattern (if present) is used. If there are more than two alterna-
- tives in the subpattern, a compile-time error occurs.
-
- There are three kinds of condition. If the text between the parentheses
- consists of a sequence of digits, the condition is satisfied if the
- capturing subpattern of that number has previously matched. The number
- must be greater than zero. Consider the following pattern, which con-
- tains non-significant white space to make it more readable (assume the
- PCRE_EXTENDED option) and to divide it into three parts for ease of
- discussion:
-
- ( \( )? [^()]+ (?(1) \) )
-
- The first part matches an optional opening parenthesis, and if that
- character is present, sets it as the first captured substring. The sec-
- ond part matches one or more characters that are not parentheses. The
- third part is a conditional subpattern that tests whether the first set
- of parentheses matched or not. If they did, that is, if subject started
- with an opening parenthesis, the condition is true, and so the yes-pat-
- tern is executed and a closing parenthesis is required. Otherwise,
- since no-pattern is not present, the subpattern matches nothing. In
- other words, this pattern matches a sequence of non-parentheses,
- optionally enclosed in parentheses.
-
- If the condition is the string (R), it is satisfied if a recursive call
- to the pattern or subpattern has been made. At "top level", the condi-
- tion is false. This is a PCRE extension. Recursive patterns are
- described in the next section.
-
- If the condition is not a sequence of digits or (R), it must be an
- assertion. This may be a positive or negative lookahead or lookbehind
- assertion. Consider this pattern, again containing non-significant
- white space, and with the two alternatives on the second line:
-
- (?(?=[^a-z]*[a-z])
- \d{2}-[a-z]{3}-\d{2} | \d{2}-\d{2}-\d{2} )
-
- The condition is a positive lookahead assertion that matches an
- optional sequence of non-letters followed by a letter. In other words,
- it tests for the presence of at least one letter in the subject. If a
- letter is found, the subject is matched against the first alternative;
- otherwise it is matched against the second. This pattern matches
- strings in one of the two forms dd-aaa-dd or dd-dd-dd, where aaa are
- letters and dd are digits.
-
-
-COMMENTS
-
- The sequence (?# marks the start of a comment which continues up to the
- next closing parenthesis. Nested parentheses are not permitted. The
- characters that make up a comment play no part in the pattern matching
- at all.
-
- If the PCRE_EXTENDED option is set, an unescaped # character outside a
- character class introduces a comment that continues up to the next new-
- line character in the pattern.
-
-
-RECURSIVE PATTERNS
-
- Consider the problem of matching a string in parentheses, allowing for
- unlimited nested parentheses. Without the use of recursion, the best
- that can be done is to use a pattern that matches up to some fixed
- depth of nesting. It is not possible to handle an arbitrary nesting
- depth. Perl has provided an experimental facility that allows regular
- expressions to recurse (amongst other things). It does this by interpo-
- lating Perl code in the expression at run time, and the code can refer
- to the expression itself. A Perl pattern to solve the parentheses prob-
- lem can be created like this:
-
- $re = qr{\( (?: (?>[^()]+) | (?p{$re}) )* \)}x;
-
- The (?p{...}) item interpolates Perl code at run time, and in this case
- refers recursively to the pattern in which it appears. Obviously, PCRE
- cannot support the interpolation of Perl code. Instead, it supports
- some special syntax for recursion of the entire pattern, and also for
- individual subpattern recursion.
-
- The special item that consists of (? followed by a number greater than
- zero and a closing parenthesis is a recursive call of the subpattern of
- the given number, provided that it occurs inside that subpattern. (If
- not, it is a "subroutine" call, which is described in the next sec-
- tion.) The special item (?R) is a recursive call of the entire regular
- expression.
-
- For example, this PCRE pattern solves the nested parentheses problem
- (assume the PCRE_EXTENDED option is set so that white space is
- ignored):
-
- \( ( (?>[^()]+) | (?R) )* \)
-
- First it matches an opening parenthesis. Then it matches any number of
- substrings which can either be a sequence of non-parentheses, or a
- recursive match of the pattern itself (that is a correctly parenthe-
- sized substring). Finally there is a closing parenthesis.
-
- If this were part of a larger pattern, you would not want to recurse
- the entire pattern, so instead you could use this:
-
- ( \( ( (?>[^()]+) | (?1) )* \) )
-
- We have put the pattern into parentheses, and caused the recursion to
- refer to them instead of the whole pattern. In a larger pattern, keep-
- ing track of parenthesis numbers can be tricky. It may be more conve-
- nient to use named parentheses instead. For this, PCRE uses (?P>name),
- which is an extension to the Python syntax that PCRE uses for named
- parentheses (Perl does not provide named parentheses). We could rewrite
- the above example as follows:
-
- (?P<pn> \( ( (?>[^()]+) | (?P>pn) )* \) )
-
- This particular example pattern contains nested unlimited repeats, and
- so the use of atomic grouping for matching strings of non-parentheses
- is important when applying the pattern to strings that do not match.
- For example, when this pattern is applied to
-
- (aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa()
-
- it yields "no match" quickly. However, if atomic grouping is not used,
- the match runs for a very long time indeed because there are so many
- different ways the + and * repeats can carve up the subject, and all
- have to be tested before failure can be reported.
-
- At the end of a match, the values set for any capturing subpatterns are
- those from the outermost level of the recursion at which the subpattern
- value is set. If you want to obtain intermediate values, a callout
- function can be used (see below and the pcrecallout documentation). If
- the pattern above is matched against
-
- (ab(cd)ef)
-
- the value for the capturing parentheses is "ef", which is the last
- value taken on at the top level. If additional parentheses are added,
- giving
-
- \( ( ( (?>[^()]+) | (?R) )* ) \)
- ^ ^
- ^ ^
-
- the string they capture is "ab(cd)ef", the contents of the top level
- parentheses. If there are more than 15 capturing parentheses in a pat-
- tern, PCRE has to obtain extra memory to store data during a recursion,
- which it does by using pcre_malloc, freeing it via pcre_free after-
- wards. If no memory can be obtained, the match fails with the
- PCRE_ERROR_NOMEMORY error.
-
- Do not confuse the (?R) item with the condition (R), which tests for
- recursion. Consider this pattern, which matches text in angle brack-
- ets, allowing for arbitrary nesting. Only digits are allowed in nested
- brackets (that is, when recursing), whereas any characters are permit-
- ted at the outer level.
-
- < (?: (?(R) \d++ | [^<>]*+) | (?R)) * >
-
- In this pattern, (?(R) is the start of a conditional subpattern, with
- two different alternatives for the recursive and non-recursive cases.
- The (?R) item is the actual recursive call.
-
-
-SUBPATTERNS AS SUBROUTINES
-
- If the syntax for a recursive subpattern reference (either by number or
- by name) is used outside the parentheses to which it refers, it oper-
- ates like a subroutine in a programming language. An earlier example
- pointed out that the pattern
-
- (sens|respons)e and \1ibility
-
- matches "sense and sensibility" and "response and responsibility", but
- not "sense and responsibility". If instead the pattern
-
- (sens|respons)e and (?1)ibility
-
- is used, it does match "sense and responsibility" as well as the other
- two strings. Such references must, however, follow the subpattern to
- which they refer.
-
-
-CALLOUTS
-
- Perl has a feature whereby using the sequence (?{...}) causes arbitrary
- 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
- 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
- points:
-
- (?C1)abc(?C2)def
-
- 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, and, optionally, one item of data originally supplied
- by the caller of pcre_exec(). The callout function may cause matching
- to backtrack, or to fail altogether. A complete description of the
- interface to the callout function is given in the pcrecallout documen-
- tation.
-
-Last updated: 03 February 2003
-Copyright (c) 1997-2003 University of Cambridge.
------------------------------------------------------------------------------
-
-PCRE(3) PCRE(3)
-
-
-
-NAME
- PCRE - Perl-compatible regular expressions
-
-PCRE PERFORMANCE
-
- Certain items that may appear in regular expression patterns are more
- efficient than others. It is more efficient to use a character class
- like [aeiou] than a set of alternatives such as (a|e|i|o|u). In gen-
- eral, the simplest construction that provides the required behaviour is
- usually the most efficient. Jeffrey Friedl's book contains a lot of
- discussion about optimizing regular expressions for efficient perfor-
- mance.
-
- When a pattern begins with .* not in parentheses, or in parentheses
- that are not the subject of a backreference, and the PCRE_DOTALL option
- is set, the pattern is implicitly anchored by PCRE, since it can match
- only at the start of a subject string. However, if PCRE_DOTALL is not
- set, PCRE cannot make this optimization, because the . metacharacter
- does not then match a newline, and if the subject string contains new-
- lines, the pattern may match from the character immediately following
- one of them instead of from the very start. For example, the pattern
-
- .*second
-
- matches the subject "first\nand second" (where \n stands for a newline
- character), with the match starting at the seventh character. In order
- to do this, PCRE has to retry the match starting after every newline in
- the subject.
-
- If you are using such a pattern with subject strings that do not con-
- tain newlines, the best performance is obtained by setting PCRE_DOTALL,
- or starting the pattern with ^.* to indicate explicit anchoring. That
- saves PCRE from having to scan along the subject looking for a newline
- to restart at.
-
- Beware of patterns that contain nested indefinite repeats. These can
- take a long time to run when applied to a string that does not match.
- Consider the pattern fragment
-
- (a+)*
-
- This can match "aaaa" in 33 different ways, and this number increases
- very rapidly as the string gets longer. (The * repeat can match 0, 1,
- 2, 3, or 4 times, and for each of those cases other than 0, the +
- repeats can match different numbers of times.) When the remainder of
- the pattern is such that the entire match is going to fail, PCRE has in
- principle to try every possible variation, and this can take an
- extremely long time.
-
- An optimization catches some of the more simple cases such as
-
- (a+)*b
-
- where a literal character follows. Before embarking on the standard
- matching procedure, PCRE checks that there is a "b" later in the sub-
- ject string, and if there is not, it fails the match immediately. How-
- ever, when there is no following literal this optimization cannot be
- used. You can see the difference by comparing the behaviour of
-
- (a+)*\d
-
- with the pattern above. The former gives a failure almost instantly
- when applied to a whole line of "a" characters, whereas the latter
- takes an appreciable time with strings longer than about 20 characters.
-
-Last updated: 03 February 2003
-Copyright (c) 1997-2003 University of Cambridge.
------------------------------------------------------------------------------
-
-PCRE(3) PCRE(3)
-
-
-
-NAME
- PCRE - Perl-compatible regular expressions.
-
-SYNOPSIS OF POSIX API
- #include <pcreposix.h>
-
- int regcomp(regex_t *preg, const char *pattern,
- int cflags);
-
- int regexec(regex_t *preg, const char *string,
- size_t nmatch, regmatch_t pmatch[], int eflags);
-
- size_t regerror(int errcode, const regex_t *preg,
- char *errbuf, size_t errbuf_size);
-
- void regfree(regex_t *preg);
-
-
-DESCRIPTION
-
- This set of functions provides a POSIX-style API to the PCRE regular
- expression package. See the pcreapi documentation for a description of
- the native API, which contains additional functionality.
-
- The functions described here are just wrapper functions that ultimately
- call the PCRE native API. Their prototypes are defined in the
- pcreposix.h header file, and on Unix systems the library itself is
- called pcreposix.a, so can be accessed by adding -lpcreposix to the
- command for linking an application which uses them. Because the POSIX
- functions call the native ones, it is also necessary to add -lpcre.
-
- I have implemented only those option bits that can be reasonably mapped
- to PCRE native options. In addition, the options REG_EXTENDED and
- REG_NOSUB are defined with the value zero. They have no effect, but
- since programs that are written to the POSIX interface often use them,
- this makes it easier to slot in PCRE as a replacement library. Other
- POSIX options are not even defined.
-
- When PCRE is called via these functions, it is only the API that is
- POSIX-like in style. The syntax and semantics of the regular expres-
- sions themselves are still those of Perl, subject to the setting of
- various PCRE options, as described below. "POSIX-like in style" means
- that the API approximates to the POSIX definition; it is not fully
- POSIX-compatible, and in multi-byte encoding domains it is probably
- even less compatible.
-
- The header for these functions is supplied as pcreposix.h to avoid any
- potential clash with other POSIX libraries. It can, of course, be
- renamed or aliased as regex.h, which is the "correct" name. It provides
- two structure types, regex_t for compiled internal forms, and reg-
- match_t for returning captured substrings. It also defines some con-
- stants whose names start with "REG_"; these are used for setting
- options and identifying error codes.
-
-
-COMPILING A PATTERN
-
- The function regcomp() is called to compile a pattern into an internal
- form. The pattern is a C string terminated by a binary zero, and is
- passed in the argument pattern. The preg argument is a pointer to a
- regex_t structure which is used as a base for storing information about
- the compiled expression.
-
- The argument cflags is either zero, or contains one or more of the bits
- defined by the following macros:
-
- REG_ICASE
-
- The PCRE_CASELESS option is set when the expression is passed for com-
- pilation to the native function.
-
- REG_NEWLINE
-
- The PCRE_MULTILINE option is set when the expression is passed for com-
- pilation to the native function. Note that this does not mimic the
- defined POSIX behaviour for REG_NEWLINE (see the following section).
-
- In the absence of these flags, no options are passed to the native
- function. This means the the regex is compiled with PCRE default
- semantics. In particular, the way it handles newline characters in the
- subject string is the Perl way, not the POSIX way. Note that setting
- PCRE_MULTILINE has only some of the effects specified for REG_NEWLINE.
- It does not affect the way newlines are matched by . (they aren't) or
- by a negative class such as [^a] (they are).
-
- The yield of regcomp() is zero on success, and non-zero otherwise. The
- preg structure is filled in on success, and one member of the structure
- is public: re_nsub contains the number of capturing subpatterns in the
- regular expression. Various error codes are defined in the header file.
-
-
-MATCHING NEWLINE CHARACTERS
-
- This area is not simple, because POSIX and Perl take different views of
- things. It is not possible to get PCRE to obey POSIX semantics, but
- then PCRE was never intended to be a POSIX engine. The following table
- lists the different possibilities for matching newline characters in
- PCRE:
-
- Default Change with
-
- . matches newline no PCRE_DOTALL
- newline matches [^a] yes not changeable
- $ matches \n at end yes PCRE_DOLLARENDONLY
- $ matches \n in middle no PCRE_MULTILINE
- ^ matches \n in middle no PCRE_MULTILINE
-
- This is the equivalent table for POSIX:
-
- Default Change with
-
- . matches newline yes REG_NEWLINE
- newline matches [^a] yes REG_NEWLINE
- $ matches \n at end no REG_NEWLINE
- $ matches \n in middle no REG_NEWLINE
- ^ matches \n in middle no REG_NEWLINE
-
- PCRE's behaviour is the same as Perl's, except that there is no equiva-
- lent for PCRE_DOLLARENDONLY in Perl. In both PCRE and Perl, there is no
- way to stop newline from matching [^a].
-
- The default POSIX newline handling can be obtained by setting
- PCRE_DOTALL and PCRE_DOLLARENDONLY, but there is no way to make PCRE
- behave exactly as for the REG_NEWLINE action.
-
-
-MATCHING A PATTERN
-
- The function regexec() is called to match a pre-compiled pattern preg
- against a given string, which is terminated by a zero byte, subject to
- the options in eflags. These can be:
-
- REG_NOTBOL
-
- The PCRE_NOTBOL option is set when calling the underlying PCRE matching
- function.
-
- REG_NOTEOL
-
- The PCRE_NOTEOL option is set when calling the underlying PCRE matching
- function.
-
- The portion of the string that was matched, and also any captured sub-
- strings, are returned via the pmatch argument, which points to an array
- of nmatch structures of type regmatch_t, containing the members rm_so
- and rm_eo. These contain the offset to the first character of each sub-
- string and the offset to the first character after the end of each sub-
- string, respectively. The 0th element of the vector relates to the
- entire portion of string that was matched; subsequent elements relate
- to the capturing subpatterns of the regular expression. Unused entries
- in the array have both structure members set to -1.
-
- A successful match yields a zero return; various error codes are
- defined in the header file, of which REG_NOMATCH is the "expected"
- failure code.
-
-
-ERROR MESSAGES
-
- The regerror() function maps a non-zero errorcode from either regcomp()
- or regexec() to a printable message. If preg is not NULL, the error
- should have arisen from the use of that structure. A message terminated
- by a binary zero is placed in errbuf. The length of the message,
- including the zero, is limited to errbuf_size. The yield of the func-
- tion is the size of buffer needed to hold the whole message.
-
-
-STORAGE
-
- Compiling a regular expression causes memory to be allocated and asso-
- ciated with the preg structure. The function regfree() frees all such
- memory, after which preg may no longer be used as a compiled expres-
- sion.
-
-
-AUTHOR
-
- Philip Hazel <ph10@cam.ac.uk>
- University Computing Service,
- Cambridge CB2 3QG, England.
-
-Last updated: 03 February 2003
-Copyright (c) 1997-2003 University of Cambridge.
------------------------------------------------------------------------------
-
-PCRE(3) PCRE(3)
-
-
-
-NAME
- PCRE - Perl-compatible regular expressions
-
-PCRE SAMPLE PROGRAM
-
- A simple, complete demonstration program, to get you started with using
- PCRE, is supplied in the file pcredemo.c in the PCRE distribution.
-
- The program compiles the regular expression that is its first argument,
- and matches it against the subject string in its second argument. No
- PCRE options are set, and default character tables are used. If match-
- ing succeeds, the program outputs the portion of the subject that
- matched, together with the contents of any captured substrings.
-
- If the -g option is given on the command line, the program then goes on
- to check for further matches of the same regular expression in the same
- subject string. The logic is a little bit tricky because of the possi-
- bility of matching an empty string. Comments in the code explain what
- is going on.
-
- On a Unix system that has PCRE installed in /usr/local, you can compile
- the demonstration program using a command like this:
-
- gcc -o pcredemo pcredemo.c -I/usr/local/include \
- -L/usr/local/lib -lpcre
-
- Then you can run simple tests like this:
-
- ./pcredemo 'cat|dog' 'the cat sat on the mat'
- ./pcredemo -g 'cat|dog' 'the dog sat on the cat'
-
- Note that there is a much more comprehensive test program, called
- pcretest, which supports many more facilities for testing regular
- expressions and the PCRE library. The pcredemo program is provided as a
- simple coding example.
-
- On some operating systems (e.g. Solaris) you may get an error like this
- when you try to run pcredemo:
-
- ld.so.1: a.out: fatal: libpcre.so.0: open failed: No such file or
- directory
-
- This is caused by the way shared library support works on those sys-
- tems. You need to add
-
- -R/usr/local/lib
-
- to the compile command to get round this problem.
-
-Last updated: 28 January 2003
-Copyright (c) 1997-2003 University of Cambridge.
------------------------------------------------------------------------------
-
diff --git a/ext/pcre/pcrelib/get.c b/ext/pcre/pcrelib/get.c
deleted file mode 100644
index 8556d9508d..0000000000
--- a/ext/pcre/pcrelib/get.c
+++ /dev/null
@@ -1,349 +0,0 @@
-/*************************************************
-* Perl-Compatible Regular Expressions *
-*************************************************/
-
-/*
-This 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. See
-the file Tech.Notes for some information on the internals.
-
-Written by: Philip Hazel <ph10@cam.ac.uk>
-
- Copyright (c) 1997-2004 University of Cambridge
-
------------------------------------------------------------------------------
-Permission is granted to anyone to use this software for any purpose on any
-computer system, and to redistribute it freely, subject to the following
-restrictions:
-
-1. This software is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
-
-2. The origin of this software must not be misrepresented, either by
- explicit claim or by omission.
-
-3. Altered versions must be plainly marked as such, and must not be
- misrepresented as being the original software.
-
-4. If PCRE is embedded in any software that is released under the GNU
- General Purpose Licence (GPL), then the terms of that licence shall
- supersede any condition above with which it is incompatible.
------------------------------------------------------------------------------
-*/
-
-/* This module contains some convenience functions for extracting substrings
-from the subject string after a regex match has succeeded. The original idea
-for these functions came from Scott Wimer <scottw@cgibuilder.com>. */
-
-
-/* Include the internals header, which itself includes Standard C headers plus
-the external pcre header. */
-
-#include "internal.h"
-
-
-/*************************************************
-* Find number for named string *
-*************************************************/
-
-/* This function is used by the two extraction functions below, as well
-as being generally available.
-
-Arguments:
- code the compiled regex
- stringname the name whose number is required
-
-Returns: the number of the named parentheses, or a negative number
- (PCRE_ERROR_NOSUBSTRING) if not found
-*/
-
-int
-pcre_get_stringnumber(const pcre *code, const char *stringname)
-{
-int rc;
-int entrysize;
-int top, bot;
-uschar *nametable;
-
-if ((rc = pcre_fullinfo(code, NULL, PCRE_INFO_NAMECOUNT, &top)) != 0)
- return rc;
-if (top <= 0) return PCRE_ERROR_NOSUBSTRING;
-
-if ((rc = pcre_fullinfo(code, NULL, PCRE_INFO_NAMEENTRYSIZE, &entrysize)) != 0)
- return rc;
-if ((rc = pcre_fullinfo(code, NULL, PCRE_INFO_NAMETABLE, &nametable)) != 0)
- return rc;
-
-bot = 0;
-while (top > bot)
- {
- int mid = (top + bot) / 2;
- uschar *entry = nametable + entrysize*mid;
- int c = strcmp(stringname, (char *)(entry + 2));
- if (c == 0) return (entry[0] << 8) + entry[1];
- if (c > 0) bot = mid + 1; else top = mid;
- }
-
-return PCRE_ERROR_NOSUBSTRING;
-}
-
-
-
-/*************************************************
-* Copy captured string to given buffer *
-*************************************************/
-
-/* This function copies a single captured substring into a given buffer.
-Note that we use memcpy() rather than strncpy() in case there are binary zeros
-in the string.
-
-Arguments:
- subject the subject string that was matched
- ovector pointer to the offsets table
- stringcount the number of substrings that were captured
- (i.e. the yield of the pcre_exec call, unless
- that was zero, in which case it should be 1/3
- of the offset table size)
- stringnumber the number of the required substring
- buffer where to put the substring
- size the size of the buffer
-
-Returns: if successful:
- the length of the copied string, not including the zero
- that is put on the end; can be zero
- if not successful:
- PCRE_ERROR_NOMEMORY (-6) buffer too small
- PCRE_ERROR_NOSUBSTRING (-7) no such captured substring
-*/
-
-int
-pcre_copy_substring(const char *subject, int *ovector, int stringcount,
- int stringnumber, char *buffer, int size)
-{
-int yield;
-if (stringnumber < 0 || stringnumber >= stringcount)
- return PCRE_ERROR_NOSUBSTRING;
-stringnumber *= 2;
-yield = ovector[stringnumber+1] - ovector[stringnumber];
-if (size < yield + 1) return PCRE_ERROR_NOMEMORY;
-memcpy(buffer, subject + ovector[stringnumber], yield);
-buffer[yield] = 0;
-return yield;
-}
-
-
-
-/*************************************************
-* Copy named captured string to given buffer *
-*************************************************/
-
-/* This function copies a single captured substring into a given buffer,
-identifying it by name.
-
-Arguments:
- code the compiled regex
- subject the subject string that was matched
- ovector pointer to the offsets table
- stringcount the number of substrings that were captured
- (i.e. the yield of the pcre_exec call, unless
- that was zero, in which case it should be 1/3
- of the offset table size)
- stringname the name of the required substring
- buffer where to put the substring
- size the size of the buffer
-
-Returns: if successful:
- the length of the copied string, not including the zero
- that is put on the end; can be zero
- if not successful:
- PCRE_ERROR_NOMEMORY (-6) buffer too small
- PCRE_ERROR_NOSUBSTRING (-7) no such captured substring
-*/
-
-int
-pcre_copy_named_substring(const pcre *code, const char *subject, int *ovector,
- int stringcount, const char *stringname, char *buffer, int size)
-{
-int n = pcre_get_stringnumber(code, stringname);
-if (n <= 0) return n;
-return pcre_copy_substring(subject, ovector, stringcount, n, buffer, size);
-}
-
-
-
-/*************************************************
-* Copy all captured strings to new store *
-*************************************************/
-
-/* This function gets one chunk of store and builds a list of pointers and all
-of the captured substrings in it. A NULL pointer is put on the end of the list.
-
-Arguments:
- subject the subject string that was matched
- ovector pointer to the offsets table
- stringcount the number of substrings that were captured
- (i.e. the yield of the pcre_exec call, unless
- that was zero, in which case it should be 1/3
- of the offset table size)
- listptr set to point to the list of pointers
-
-Returns: if successful: 0
- if not successful:
- PCRE_ERROR_NOMEMORY (-6) failed to get store
-*/
-
-int
-pcre_get_substring_list(const char *subject, int *ovector, int stringcount,
- const char ***listptr)
-{
-int i;
-int size = sizeof(char *);
-int double_count = stringcount * 2;
-char **stringlist;
-char *p;
-
-for (i = 0; i < double_count; i += 2)
- size += sizeof(char *) + ovector[i+1] - ovector[i] + 1;
-
-stringlist = (char **)(pcre_malloc)(size);
-if (stringlist == NULL) return PCRE_ERROR_NOMEMORY;
-
-*listptr = (const char **)stringlist;
-p = (char *)(stringlist + stringcount + 1);
-
-for (i = 0; i < double_count; i += 2)
- {
- int len = ovector[i+1] - ovector[i];
- memcpy(p, subject + ovector[i], len);
- *stringlist++ = p;
- p += len;
- *p++ = 0;
- }
-
-*stringlist = NULL;
-return 0;
-}
-
-
-
-/*************************************************
-* Free store obtained by get_substring_list *
-*************************************************/
-
-/* This function exists for the benefit of people calling PCRE from non-C
-programs that can call its functions, but not free() or (pcre_free)() directly.
-
-Argument: the result of a previous pcre_get_substring_list()
-Returns: nothing
-*/
-
-void
-pcre_free_substring_list(const char **pointer)
-{
-(pcre_free)((void *)pointer);
-}
-
-
-
-/*************************************************
-* Copy captured string to new store *
-*************************************************/
-
-/* This function copies a single captured substring into a piece of new
-store
-
-Arguments:
- subject the subject string that was matched
- ovector pointer to the offsets table
- stringcount the number of substrings that were captured
- (i.e. the yield of the pcre_exec call, unless
- that was zero, in which case it should be 1/3
- of the offset table size)
- stringnumber the number of the required substring
- stringptr where to put a pointer to the substring
-
-Returns: if successful:
- the length of the string, not including the zero that
- is put on the end; can be zero
- if not successful:
- PCRE_ERROR_NOMEMORY (-6) failed to get store
- PCRE_ERROR_NOSUBSTRING (-7) substring not present
-*/
-
-int
-pcre_get_substring(const char *subject, int *ovector, int stringcount,
- int stringnumber, const char **stringptr)
-{
-int yield;
-char *substring;
-if (stringnumber < 0 || stringnumber >= stringcount)
- return PCRE_ERROR_NOSUBSTRING;
-stringnumber *= 2;
-yield = ovector[stringnumber+1] - ovector[stringnumber];
-substring = (char *)(pcre_malloc)(yield + 1);
-if (substring == NULL) return PCRE_ERROR_NOMEMORY;
-memcpy(substring, subject + ovector[stringnumber], yield);
-substring[yield] = 0;
-*stringptr = substring;
-return yield;
-}
-
-
-
-/*************************************************
-* Copy named captured string to new store *
-*************************************************/
-
-/* This function copies a single captured substring, identified by name, into
-new store.
-
-Arguments:
- code the compiled regex
- subject the subject string that was matched
- ovector pointer to the offsets table
- stringcount the number of substrings that were captured
- (i.e. the yield of the pcre_exec call, unless
- that was zero, in which case it should be 1/3
- of the offset table size)
- stringname the name of the required substring
- stringptr where to put the pointer
-
-Returns: if successful:
- the length of the copied string, not including the zero
- that is put on the end; can be zero
- if not successful:
- PCRE_ERROR_NOMEMORY (-6) couldn't get memory
- PCRE_ERROR_NOSUBSTRING (-7) no such captured substring
-*/
-
-int
-pcre_get_named_substring(const pcre *code, const char *subject, int *ovector,
- int stringcount, const char *stringname, const char **stringptr)
-{
-int n = pcre_get_stringnumber(code, stringname);
-if (n <= 0) return n;
-return pcre_get_substring(subject, ovector, stringcount, n, stringptr);
-}
-
-
-
-
-/*************************************************
-* Free store obtained by get_substring *
-*************************************************/
-
-/* This function exists for the benefit of people calling PCRE from non-C
-programs that can call its functions, but not free() or (pcre_free)() directly.
-
-Argument: the result of a previous pcre_get_substring()
-Returns: nothing
-*/
-
-void
-pcre_free_substring(const char *pointer)
-{
-(pcre_free)((void *)pointer);
-}
-
-/* End of get.c */
diff --git a/ext/pcre/pcrelib/internal.h b/ext/pcre/pcrelib/internal.h
deleted file mode 100644
index 544f1c2736..0000000000
--- a/ext/pcre/pcrelib/internal.h
+++ /dev/null
@@ -1,709 +0,0 @@
-/*************************************************
-* Perl-Compatible Regular Expressions *
-*************************************************/
-
-
-/* This 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. See
-the file Tech.Notes for some information on the internals.
-
-Written by: Philip Hazel <ph10@cam.ac.uk>
-
- Copyright (c) 1997-2003 University of Cambridge
-
------------------------------------------------------------------------------
-Permission is granted to anyone to use this software for any purpose on any
-computer system, and to redistribute it freely, subject to the following
-restrictions:
-
-1. This software is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
-
-2. The origin of this software must not be misrepresented, either by
- explicit claim or by omission.
-
-3. Altered versions must be plainly marked as such, and must not be
- misrepresented as being the original software.
-
-4. If PCRE is embedded in any software that is released under the GNU
- General Purpose Licence (GPL), then the terms of that licence shall
- supersede any condition above with which it is incompatible.
------------------------------------------------------------------------------
-*/
-
-/* This header contains definitions that are shared between the different
-modules, but which are not relevant to the outside. */
-
-/* Get the definitions provided by running "configure" */
-
-#ifdef PHP_WIN32
-# include "config.w32.h"
-#elif defined(NETWARE)
-# include "config.nw.h"
-#else
-# include "php_config.h"
-#endif
-
-#ifndef PCRE_SPY
-#define PCRE_DEFINITION /* Win32 __declspec(export) trigger for .dll */
-#endif
-
-/* The value of NEWLINE determines the newline character. The default is to
-leave it up to the compiler, but some sites want to force a particular value.
-On Unix systems, "configure" can be used to override this default. */
-
-#ifndef NEWLINE
-#define NEWLINE '\n'
-#endif
-
-/* The value of MATCH_LIMIT determines the default number of times the match()
-function can be called during a single execution of pcre_exec(). (There is a
-runtime method of setting a different limit.) The limit exists in order to
-catch runaway regular expressions that take for ever to determine that they do
-not match. The default is set very large so that it does not accidentally catch
-legitimate cases. On Unix systems, "configure" can be used to override this
-default default. */
-
-#ifndef MATCH_LIMIT
-#define MATCH_LIMIT 10000000
-#endif
-
-/* If you are compiling for a system that needs some magic to be inserted
- * before the definition of an exported function, define this macro to contain
- * the relevant magic. It apears at the start of every exported function. */
-
-#define EXPORT
-
-#include "pcre.h"
-
-/* When compiling for use with the Virtual Pascal compiler, these functions
-need to have their names changed. PCRE must be compiled with the -DVPCOMPAT
-option on the command line. */
-
-#ifdef VPCOMPAT
-#define strncmp(s1,s2,m) _strncmp(s1,s2,m)
-#define memcpy(d,s,n) _memcpy(d,s,n)
-#define memmove(d,s,n) _memmove(d,s,n)
-#define memset(s,c,n) _memset(s,c,n)
-#else /* VPCOMPAT */
-
-/* To cope with SunOS4 and other systems that lack memmove() but have bcopy(),
-define a macro for memmove() if HAVE_MEMMOVE is false, provided that HAVE_BCOPY
-is set. Otherwise, include an emulating function for those systems that have
-neither (there some non-Unix environments where this is the case). This assumes
-that all calls to memmove are moving strings upwards in store, which is the
-case in PCRE. */
-
-/* Standard C headers plus the external interface definition. The only time
-setjmp and stdarg are used is when NO_RECURSE is set. */
-
-#include <ctype.h>
-#include <limits.h>
-#include <setjmp.h>
-#include <stdarg.h>
-#include <stddef.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#if ! HAVE_MEMMOVE
-#undef memmove /* some systems may have a macro */
-#if HAVE_BCOPY
-#define memmove(a, b, c) bcopy(b, a, c)
-#else /* HAVE_BCOPY */
-void *
-pcre_memmove(unsigned char *dest, const unsigned char *src, size_t n)
-{
-int i;
-dest += n;
-src += n;
-for (i = 0; i < n; ++i) *(--dest) = *(--src);
-}
-#define memmove(a, b, c) pcre_memmove(a, b, c)
-#endif /* not HAVE_BCOPY */
-#endif /* not HAVE_MEMMOVE */
-#endif /* not VPCOMPAT */
-
-
-/* PCRE keeps offsets in its compiled code as 2-byte quantities by default.
-These are used, for example, to link from the start of a subpattern to its
-alternatives and its end. The use of 2 bytes per offset limits the size of the
-compiled regex to around 64K, which is big enough for almost everybody.
-However, I received a request for an even bigger limit. For this reason, and
-also to make the code easier to maintain, the storing and loading of offsets
-from the byte string is now handled by the macros that are defined here.
-
-The macros are controlled by the value of LINK_SIZE. This defaults to 2 in
-the config.h file, but can be overridden by using -D on the command line. This
-is automated on Unix systems via the "configure" command. */
-
-#if LINK_SIZE == 2
-
-#define PUT(a,n,d) \
- (a[n] = (d) >> 8), \
- (a[(n)+1] = (d) & 255)
-
-#define GET(a,n) \
- (((a)[n] << 8) | (a)[(n)+1])
-
-#define MAX_PATTERN_SIZE (1 << 16)
-
-
-#elif LINK_SIZE == 3
-
-#define PUT(a,n,d) \
- (a[n] = (d) >> 16), \
- (a[(n)+1] = (d) >> 8), \
- (a[(n)+2] = (d) & 255)
-
-#define GET(a,n) \
- (((a)[n] << 16) | ((a)[(n)+1] << 8) | (a)[(n)+2])
-
-#define MAX_PATTERN_SIZE (1 << 24)
-
-
-#elif LINK_SIZE == 4
-
-#define PUT(a,n,d) \
- (a[n] = (d) >> 24), \
- (a[(n)+1] = (d) >> 16), \
- (a[(n)+2] = (d) >> 8), \
- (a[(n)+3] = (d) & 255)
-
-#define GET(a,n) \
- (((a)[n] << 24) | ((a)[(n)+1] << 16) | ((a)[(n)+2] << 8) | (a)[(n)+3])
-
-#define MAX_PATTERN_SIZE (1 << 30) /* Keep it positive */
-
-
-#else
-#error LINK_SIZE must be either 2, 3, or 4
-#endif
-
-
-/* Convenience macro defined in terms of the others */
-
-#define PUTINC(a,n,d) PUT(a,n,d), a += LINK_SIZE
-
-
-/* PCRE uses some other 2-byte quantities that do not change when the size of
-offsets changes. There are used for repeat counts and for other things such as
-capturing parenthesis numbers in back references. */
-
-#define PUT2(a,n,d) \
- a[n] = (d) >> 8; \
- a[(n)+1] = (d) & 255
-
-#define GET2(a,n) \
- (((a)[n] << 8) | (a)[(n)+1])
-
-#define PUT2INC(a,n,d) PUT2(a,n,d), a += 2
-
-
-/* In case there is no definition of offsetof() provided - though any proper
-Standard C system should have one. */
-
-#ifndef offsetof
-#define offsetof(p_type,field) ((size_t)&(((p_type *)0)->field))
-#endif
-
-/* These are the public options that can change during matching. */
-
-#define PCRE_IMS (PCRE_CASELESS|PCRE_MULTILINE|PCRE_DOTALL)
-
-/* Private options flags start at the most significant end of the four bytes,
-but skip the top bit so we can use ints for convenience without getting tangled
-with negative values. The public options defined in pcre.h start at the least
-significant end. Make sure they don't overlap, though now that we have expanded
-to four bytes there is plenty of space. */
-
-#define PCRE_FIRSTSET 0x40000000 /* first_byte is set */
-#define PCRE_REQCHSET 0x20000000 /* req_byte is set */
-#define PCRE_STARTLINE 0x10000000 /* start after \n for multiline */
-#define PCRE_ICHANGED 0x08000000 /* i option changes within regex */
-
-/* Options for the "extra" block produced by pcre_study(). */
-
-#define PCRE_STUDY_MAPPED 0x01 /* a map of starting chars exists */
-
-/* Masks for identifying the public options which are permitted at compile
-time, run time or study time, respectively. */
-
-#define PUBLIC_OPTIONS \
- (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)
-
-#define PUBLIC_EXEC_OPTIONS \
- (PCRE_ANCHORED|PCRE_NOTBOL|PCRE_NOTEOL|PCRE_NOTEMPTY|PCRE_NO_UTF8_CHECK)
-
-#define PUBLIC_STUDY_OPTIONS 0 /* None defined */
-
-/* Magic number to provide a small check against being handed junk. */
-
-#define MAGIC_NUMBER 0x50435245UL /* 'PCRE' */
-
-/* Negative values for the firstchar and reqchar variables */
-
-#define REQ_UNSET (-2)
-#define REQ_NONE (-1)
-
-/* Flags added to firstbyte or reqbyte; a "non-literal" item is either a
-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 */
-
-typedef int BOOL;
-
-#define FALSE 0
-#define TRUE 1
-
-/* Escape items that are just an encoding of a particular data value. Note that
-ESC_n is defined as yet another macro, which is set in config.h to either \n
-(the default) or \r (which some people want). */
-
-#ifndef ESC_e
-#define ESC_e 27
-#endif
-
-#ifndef ESC_f
-#define ESC_f '\f'
-#endif
-
-#ifndef ESC_n
-#define ESC_n NEWLINE
-#endif
-
-#ifndef ESC_r
-#define ESC_r '\r'
-#endif
-
-/* We can't officially use ESC_t because it is a POSIX reserved identifier
-(presumably because of all the others like size_t). */
-
-#ifndef ESC_tee
-#define ESC_tee '\t'
-#endif
-
-/* These are escaped items that aren't just an encoding of a particular data
-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 \1, \2, \3, etc. There is 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 a
-character. 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_B, ESC_b, ESC_D, ESC_d, ESC_S, ESC_s, ESC_W,
- ESC_w, ESC_dum1, ESC_C, ESC_Z, ESC_z, ESC_E, ESC_Q, ESC_REF };
-
-/* Flag bits and data types for the extended class (OP_XCLASS) for classes that
-contain UTF-8 characters with values greater than 255. */
-
-#define XCL_NOT 0x01 /* Flag: this is a negative class */
-#define XCL_MAP 0x02 /* Flag: a 32-byte map is present */
-
-#define XCL_END 0 /* Marks end of individual items */
-#define XCL_SINGLE 1 /* Single item (one multibyte char) follows */
-#define XCL_RANGE 2 /* A range (two multibyte chars) follows */
-
-
-/* Opcode table: OP_BRA must be last, as all values >= it are used for brackets
-that extract substrings. Starting from 1 (i.e. after OP_END), the values up to
-OP_EOD must correspond in order to the list of escapes immediately above.
-Note that whenever this list is updated, the two macro definitions that follow
-must also be updated to match. */
-
-enum {
- OP_END, /* 0 End of pattern */
-
- /* Values corresponding to backslashed metacharacters */
-
- OP_SOD, /* 1 Start of data: \A */
- OP_SOM, /* 2 Start of match (subject + offset): \G */
- OP_NOT_WORD_BOUNDARY, /* 3 \B */
- OP_WORD_BOUNDARY, /* 4 \b */
- OP_NOT_DIGIT, /* 5 \D */
- OP_DIGIT, /* 6 \d */
- OP_NOT_WHITESPACE, /* 7 \S */
- OP_WHITESPACE, /* 8 \s */
- OP_NOT_WORDCHAR, /* 9 \W */
- OP_WORDCHAR, /* 10 \w */
- OP_ANY, /* 11 Match any character */
- OP_ANYBYTE, /* 12 Match any byte (\C); different to OP_ANY for UTF-8 */
- OP_EODN, /* 13 End of data or \n at end of data: \Z. */
- OP_EOD, /* 14 End of data: \z */
-
- OP_OPT, /* 15 Set runtime options */
- OP_CIRC, /* 16 Start of line - varies with multiline switch */
- OP_DOLL, /* 17 End of line - varies with multiline switch */
- OP_CHARS, /* 18 Match string of characters */
- OP_NOT, /* 19 Match anything but the following char */
-
- OP_STAR, /* 20 The maximizing and minimizing versions of */
- OP_MINSTAR, /* 21 all these opcodes must come in pairs, with */
- OP_PLUS, /* 22 the minimizing one second. */
- OP_MINPLUS, /* 23 This first set applies to single characters */
- OP_QUERY, /* 24 */
- OP_MINQUERY, /* 25 */
- OP_UPTO, /* 26 From 0 to n matches */
- OP_MINUPTO, /* 27 */
- OP_EXACT, /* 28 Exactly n matches */
-
- OP_NOTSTAR, /* 29 The maximizing and minimizing versions of */
- OP_NOTMINSTAR, /* 30 all these opcodes must come in pairs, with */
- OP_NOTPLUS, /* 31 the minimizing one second. */
- OP_NOTMINPLUS, /* 32 This set applies to "not" single characters */
- OP_NOTQUERY, /* 33 */
- OP_NOTMINQUERY, /* 34 */
- OP_NOTUPTO, /* 35 From 0 to n matches */
- OP_NOTMINUPTO, /* 36 */
- OP_NOTEXACT, /* 37 Exactly n matches */
-
- OP_TYPESTAR, /* 38 The maximizing and minimizing versions of */
- OP_TYPEMINSTAR, /* 39 all these opcodes must come in pairs, with */
- OP_TYPEPLUS, /* 40 the minimizing one second. These codes must */
- OP_TYPEMINPLUS, /* 41 be in exactly the same order as those above. */
- OP_TYPEQUERY, /* 42 This set applies to character types such as \d */
- OP_TYPEMINQUERY, /* 43 */
- OP_TYPEUPTO, /* 44 From 0 to n matches */
- OP_TYPEMINUPTO, /* 45 */
- OP_TYPEEXACT, /* 46 Exactly n matches */
-
- OP_CRSTAR, /* 47 The maximizing and minimizing versions of */
- OP_CRMINSTAR, /* 48 all these opcodes must come in pairs, with */
- OP_CRPLUS, /* 49 the minimizing one second. These codes must */
- OP_CRMINPLUS, /* 50 be in exactly the same order as those above. */
- OP_CRQUERY, /* 51 These are for character classes and back refs */
- OP_CRMINQUERY, /* 52 */
- OP_CRRANGE, /* 53 These are different to the three seta above. */
- OP_CRMINRANGE, /* 54 */
-
- OP_CLASS, /* 55 Match a character class, chars < 256 only */
- OP_NCLASS, /* 56 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, /* 57 Extended class for handling UTF-8 chars within the
- class. This does both positive and negative. */
-
- OP_REF, /* 58 Match a back reference */
- OP_RECURSE, /* 59 Match a numbered subpattern (possibly recursive) */
- OP_CALLOUT, /* 60 Call out to external function if provided */
-
- OP_ALT, /* 61 Start of alternation */
- OP_KET, /* 62 End of group that doesn't have an unbounded repeat */
- OP_KETRMAX, /* 63 These two must remain together and in this */
- OP_KETRMIN, /* 64 order. They are for groups the repeat for ever. */
-
- /* The assertions must come before ONCE and COND */
-
- OP_ASSERT, /* 65 Positive lookahead */
- OP_ASSERT_NOT, /* 66 Negative lookahead */
- OP_ASSERTBACK, /* 67 Positive lookbehind */
- OP_ASSERTBACK_NOT, /* 68 Negative lookbehind */
- OP_REVERSE, /* 69 Move pointer back - used in lookbehind assertions */
-
- /* ONCE 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, /* 70 Once matched, don't back up into the subpattern */
- OP_COND, /* 71 Conditional group */
- OP_CREF, /* 72 Used to hold an extraction string number (cond ref) */
-
- OP_BRAZERO, /* 73 These two must remain together and in this */
- OP_BRAMINZERO, /* 74 order. */
-
- OP_BRANUMBER, /* 75 Used for extracting brackets whose number is greater
- than can fit into an opcode. */
-
- OP_BRA /* 76 This and greater values are used for brackets that
- extract substrings up to a basic limit. After that,
- use is made of OP_BRANUMBER. */
-};
-
-/* WARNING: There is an implicit assumption in study.c that all opcodes are
-less than 128 in value. This makes handling UTF-8 character sequences easier.
-*/
-
-
-/* This macro defines textual names for all the opcodes. There are used only
-for debugging, in pcre.c when DEBUG is defined, and also in pcretest.c. The
-macro is referenced only in printint.c. */
-
-#define OP_NAME_LIST \
- "End", "\\A", "\\G", "\\B", "\\b", "\\D", "\\d", \
- "\\S", "\\s", "\\W", "\\w", "Any", "Anybyte", "\\Z", "\\z", \
- "Opt", "^", "$", "chars", "not", \
- "*", "*?", "+", "+?", "?", "??", "{", "{", "{", \
- "*", "*?", "+", "+?", "?", "??", "{", "{", "{", \
- "*", "*?", "+", "+?", "?", "??", "{", "{", "{", \
- "*", "*?", "+", "+?", "?", "??", "{", "{", \
- "class", "nclass", "xclass", "Ref", "Recurse", "Callout", \
- "Alt", "Ket", "KetRmax", "KetRmin", "Assert", "Assert not", \
- "AssertB", "AssertB not", "Reverse", "Once", "Cond", "Cond ref",\
- "Brazero", "Braminzero", "Branumber", "Bra"
-
-
-/* This macro defines the length of fixed length operations in the compiled
-regex. The lengths are used when searching for specific things, and also in the
-debugging printing of a compiled regex. We use a macro so that it can be
-incorporated both into pcre.c and pcretest.c without being publicly exposed.
-
-As things have been extended, some of these are no longer fixed lenths, but are
-minima instead. For example, the length of a single-character repeat may vary
-in UTF-8 mode. The code that uses this table must know about such things. */
-
-#define OP_LENGTHS \
- 1, /* End */ \
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /* \A, \G, \B, \B, \D, \d, \S, \s, \W, \w */ \
- 1, 1, 1, 1, 2, 1, 1, /* Any, Anybyte, \Z, \z, Opt, ^, $ */ \
- 2, /* Chars - the minimum length */ \
- 2, /* not */ \
- /* Positive single-char repeats ** These are */ \
- 2, 2, 2, 2, 2, 2, /* *, *?, +, +?, ?, ?? ** minima in */ \
- 4, 4, 4, /* upto, minupto, exact ** UTF-8 mode */ \
- /* Negative single-char repeats - only for chars < 256 */ \
- 2, 2, 2, 2, 2, 2, /* NOT *, *?, +, +?, ?, ?? */ \
- 4, 4, 4, /* NOT upto, minupto, exact */ \
- /* Positive type repeats */ \
- 2, 2, 2, 2, 2, 2, /* Type *, *?, +, +?, ?, ?? */ \
- 4, 4, 4, /* Type upto, minupto, exact */ \
- /* Character class & ref repeats */ \
- 1, 1, 1, 1, 1, 1, /* *, *?, +, +?, ?, ?? */ \
- 5, 5, /* CRRANGE, CRMINRANGE */ \
- 33, /* CLASS */ \
- 33, /* NCLASS */ \
- 0, /* XCLASS - variable length */ \
- 3, /* REF */ \
- 1+LINK_SIZE, /* RECURSE */ \
- 2, /* CALLOUT */ \
- 1+LINK_SIZE, /* Alt */ \
- 1+LINK_SIZE, /* Ket */ \
- 1+LINK_SIZE, /* KetRmax */ \
- 1+LINK_SIZE, /* KetRmin */ \
- 1+LINK_SIZE, /* Assert */ \
- 1+LINK_SIZE, /* Assert not */ \
- 1+LINK_SIZE, /* Assert behind */ \
- 1+LINK_SIZE, /* Assert behind not */ \
- 1+LINK_SIZE, /* Reverse */ \
- 1+LINK_SIZE, /* Once */ \
- 1+LINK_SIZE, /* COND */ \
- 3, /* CREF */ \
- 1, 1, /* BRAZERO, BRAMINZERO */ \
- 3, /* BRANUMBER */ \
- 1+LINK_SIZE /* BRA */ \
-
-
-/* The highest extraction number before we have to start using additional
-bytes. (Originally PCRE didn't have support for extraction counts highter than
-this number.) The value is limited by the number of opcodes left after OP_BRA,
-i.e. 255 - OP_BRA. We actually set it a bit lower to leave room for additional
-opcodes. */
-
-#define EXTRACT_BASIC_MAX 150
-
-/* A magic value for OP_CREF to indicate the "in recursion" condition. */
-
-#define CREF_RECURSE 0xffff
-
-/* The texts of compile-time error messages are defined as macros here so that
-they can be accessed by the POSIX wrapper and converted into error codes. Yes,
-I could have used error codes in the first place, but didn't feel like changing
-just to accommodate the POSIX wrapper. */
-
-#define ERR1 "\\ at end of pattern"
-#define ERR2 "\\c at end of pattern"
-#define ERR3 "unrecognized character follows \\"
-#define ERR4 "numbers out of order in {} quantifier"
-#define ERR5 "number too big in {} quantifier"
-#define ERR6 "missing terminating ] for character class"
-#define ERR7 "invalid escape sequence in character class"
-#define ERR8 "range out of order in character class"
-#define ERR9 "nothing to repeat"
-#define ERR10 "operand of unlimited repeat could match the empty string"
-#define ERR11 "internal error: unexpected repeat"
-#define ERR12 "unrecognized character after (?"
-#define ERR13 "POSIX named classes are supported only within a class"
-#define ERR14 "missing )"
-#define ERR15 "reference to non-existent subpattern"
-#define ERR16 "erroffset passed as NULL"
-#define ERR17 "unknown option bit(s) set"
-#define ERR18 "missing ) after comment"
-#define ERR19 "parentheses nested too deeply"
-#define ERR20 "regular expression too large"
-#define ERR21 "failed to get memory"
-#define ERR22 "unmatched parentheses"
-#define ERR23 "internal error: code overflow"
-#define ERR24 "unrecognized character after (?<"
-#define ERR25 "lookbehind assertion is not fixed length"
-#define ERR26 "malformed number after (?("
-#define ERR27 "conditional group contains more than two branches"
-#define ERR28 "assertion expected after (?("
-#define ERR29 "(?R or (?digits must be followed by )"
-#define ERR30 "unknown POSIX class name"
-#define ERR31 "POSIX collating elements are not supported"
-#define ERR32 "this version of PCRE is not compiled with PCRE_UTF8 support"
-#define ERR33 "spare error"
-#define ERR34 "character value in \\x{...} sequence is too large"
-#define ERR35 "invalid condition (?(0)"
-#define ERR36 "\\C not allowed in lookbehind assertion"
-#define ERR37 "PCRE does not support \\L, \\l, \\N, \\P, \\p, \\U, \\u, or \\X"
-#define ERR38 "number after (?C is > 255"
-#define ERR39 "closing ) for (?C expected"
-#define ERR40 "recursive call could loop indefinitely"
-#define ERR41 "unrecognized character after (?P"
-#define ERR42 "syntax error after (?P"
-#define ERR43 "two named groups have the same name"
-#define ERR44 "invalid UTF-8 string"
-
-/* All character handling must be done as unsigned characters. Otherwise there
-are problems with top-bit-set characters and functions such as isspace().
-However, we leave the interface to the outside world as char *, because that
-should make things easier for callers. We define a short type for unsigned char
-to save lots of typing. I tried "uchar", but it causes problems on Digital
-Unix, where it is defined in sys/types, so use "uschar" instead. */
-
-typedef unsigned char uschar;
-
-/* 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. */
-
-typedef struct real_pcre {
- unsigned long int magic_number;
- size_t size; /* Total that was malloced */
- const unsigned char *tables; /* Pointer to tables */
- unsigned long int options;
- unsigned short int top_bracket;
- unsigned short int top_backref;
- unsigned short int first_byte;
- unsigned short int req_byte;
- unsigned short int name_entry_size; /* Size of any name items; 0 => none */
- unsigned short int name_count; /* Number of name items */
-} real_pcre;
-
-/* The format of the block used to store data from pcre_study(). */
-
-typedef struct pcre_study_data {
- size_t size; /* Total that was malloced */
- uschar options;
- uschar start_bits[32];
-} pcre_study_data;
-
-/* Structure for passing "static" information around between the functions
-doing the compiling, so that they are thread-safe. */
-
-typedef struct compile_data {
- const uschar *lcc; /* Points to lower casing table */
- const uschar *fcc; /* Points to case-flipping table */
- const uschar *cbits; /* Points to character type table */
- const uschar *ctypes; /* Points to table of type maps */
- const uschar *start_code; /* The start of the compiled code */
- uschar *name_table; /* The name/number table */
- int names_found; /* Number of entries so far */
- int name_entry_size; /* Size of each entry */
- int top_backref; /* Maximum back reference */
- unsigned int backref_map; /* Bitmap of low back refs */
- int req_varyopt; /* "After variable item" flag for reqbyte */
-} compile_data;
-
-/* Structure for maintaining a chain of pointers to the currently incomplete
-branches, for testing for left recursion. */
-
-typedef struct branch_chain {
- struct branch_chain *outer;
- uschar *current;
-} branch_chain;
-
-/* Structure for items in a linked list that represents an explicit recursive
-call within the pattern. */
-
-typedef struct recursion_info {
- struct recursion_info *prevrec; /* Previous recursion record (or NULL) */
- int group_num; /* Number of group that was called */
- const uschar *after_call; /* "Return value": points after the call in the expr */
- const uschar *save_start; /* Old value of md->start_match */
- int *offset_save; /* Pointer to start of saved offsets */
- int saved_max; /* Number of saved offsets */
-} recursion_info;
-
-/* When compiling in a mode that doesn't use recursive calls to match(),
-a structure is used to remember local variables on the heap. It is defined in
-pcre.c, close to the match() function, so that it is easy to keep it in step
-with any changes of local variable. However, the pointer to the current frame
-must be saved in some "static" place over a longjmp(). We declare the
-structure here so that we can put a pointer in the match_data structure.
-NOTE: This isn't used for a "normal" compilation of pcre. */
-
-struct heapframe;
-
-/* Structure for passing "static" information around between the functions
-doing the matching, so that they are thread-safe. */
-
-typedef struct match_data {
- unsigned long int match_call_count; /* As it says */
- unsigned long int match_limit;/* As it says */
- int *offset_vector; /* Offset vector */
- int offset_end; /* One past the end */
- int offset_max; /* The maximum usable for return data */
- const uschar *lcc; /* Points to lower casing table */
- const uschar *ctypes; /* Points to table of type maps */
- BOOL offset_overflow; /* Set if too many extractions */
- BOOL notbol; /* NOTBOL flag */
- BOOL noteol; /* NOTEOL flag */
- BOOL utf8; /* UTF8 flag */
- BOOL endonly; /* Dollar not before final \n */
- BOOL notempty; /* Empty string match not wanted */
- const uschar *start_code; /* For use when recursing */
- const uschar *start_subject; /* Start of the subject string */
- const uschar *end_subject; /* End of the subject string */
- const uschar *start_match; /* Start of this match attempt */
- const uschar *end_match_ptr; /* Subject position at end match */
- int end_offset_top; /* Highwater mark at end of match */
- int capture_last; /* Most recent capture number */
- int start_offset; /* The start offset value */
- recursion_info *recursive; /* Linked list of recursion data */
- void *callout_data; /* To pass back to callouts */
- struct heapframe *thisframe; /* Used only when compiling for no recursion */
-} match_data;
-
-/* Bit definitions for entries in the pcre_ctypes table. */
-
-#define ctype_space 0x01
-#define ctype_letter 0x02
-#define ctype_digit 0x04
-#define ctype_xdigit 0x08
-#define ctype_word 0x10 /* alphameric or '_' */
-#define ctype_meta 0x80 /* regexp meta char or zero (end pattern) */
-
-/* Offsets for the bitmap tables in pcre_cbits. Each table contains a set
-of bits for a class map. Some classes are built by combining these tables. */
-
-#define cbit_space 0 /* [:space:] or \s */
-#define cbit_xdigit 32 /* [:xdigit:] */
-#define cbit_digit 64 /* [:digit:] or \d */
-#define cbit_upper 96 /* [:upper:] */
-#define cbit_lower 128 /* [:lower:] */
-#define cbit_word 160 /* [:word:] or \w */
-#define cbit_graph 192 /* [:graph:] */
-#define cbit_print 224 /* [:print:] */
-#define cbit_punct 256 /* [:punct:] */
-#define cbit_cntrl 288 /* [:cntrl:] */
-#define cbit_length 320 /* Length of the cbits table */
-
-/* Offsets of the various tables from the base tables pointer, and
-total length. */
-
-#define lcc_offset 0
-#define fcc_offset 256
-#define cbits_offset 512
-#define ctypes_offset (cbits_offset + cbit_length)
-#define tables_length (ctypes_offset + 256)
-
-/* End of internal.h */
diff --git a/ext/pcre/pcrelib/maketables.c b/ext/pcre/pcrelib/maketables.c
deleted file mode 100644
index 8cfcd729c9..0000000000
--- a/ext/pcre/pcrelib/maketables.c
+++ /dev/null
@@ -1,140 +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 <ph10@cam.ac.uk>
-
- Copyright (c) 1997-2004 University of Cambridge
-
------------------------------------------------------------------------------
-Permission is granted to anyone to use this software for any purpose on any
-computer system, and to redistribute it freely, subject to the following
-restrictions:
-
-1. This software is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
-
-2. The origin of this software must not be misrepresented, either by
- explicit claim or by omission.
-
-3. Altered versions must be plainly marked as such, and must not be
- misrepresented as being the original software.
-
-4. If PCRE is embedded in any software that is released under the GNU
- General Purpose Licence (GPL), then the terms of that licence shall
- supersede any condition above with which it is incompatible.
------------------------------------------------------------------------------
-
-See the file Tech.Notes for some information on the internals.
-*/
-
-
-/* This file is compiled on its own as part of the PCRE library. However,
-it is also included in the compilation of dftables.c, in which case the macro
-DFTABLES is defined. */
-
-#ifndef DFTABLES
-#include "internal.h"
-#endif
-
-
-
-/*************************************************
-* Create PCRE character tables *
-*************************************************/
-
-/* This function builds a set of character tables for use by PCRE and returns
-a pointer to them. They are build using the ctype functions, and consequently
-their contents will depend upon the current locale setting. When compiled as
-part of the library, the store is obtained via pcre_malloc(), but when compiled
-inside dftables, use malloc().
-
-Arguments: none
-Returns: pointer to the contiguous block of data
-*/
-
-const unsigned char *
-pcre_maketables(void)
-{
-unsigned char *yield, *p;
-int i;
-
-#ifndef DFTABLES
-yield = (unsigned char*)(pcre_malloc)(tables_length);
-#else
-yield = (unsigned char*)malloc(tables_length);
-#endif
-
-if (yield == NULL) return NULL;
-p = yield;
-
-/* First comes the lower casing table */
-
-for (i = 0; i < 256; i++) *p++ = tolower(i);
-
-/* Next the case-flipping table */
-
-for (i = 0; i < 256; i++) *p++ = islower(i)? toupper(i) : tolower(i);
-
-/* Then the character class tables. Don't try to be clever and save effort
-on exclusive ones - in some locales things may be different. Note that the
-table for "space" includes everything "isspace" gives, including VT in the
-default locale. This makes it work for the POSIX class [:space:]. */
-
-memset(p, 0, cbit_length);
-for (i = 0; i < 256; i++)
- {
- if (isdigit(i))
- {
- p[cbit_digit + i/8] |= 1 << (i&7);
- p[cbit_word + i/8] |= 1 << (i&7);
- }
- if (isupper(i))
- {
- p[cbit_upper + i/8] |= 1 << (i&7);
- p[cbit_word + i/8] |= 1 << (i&7);
- }
- if (islower(i))
- {
- p[cbit_lower + i/8] |= 1 << (i&7);
- p[cbit_word + i/8] |= 1 << (i&7);
- }
- if (i == '_') p[cbit_word + i/8] |= 1 << (i&7);
- if (isspace(i)) p[cbit_space + i/8] |= 1 << (i&7);
- if (isxdigit(i))p[cbit_xdigit + i/8] |= 1 << (i&7);
- if (isgraph(i)) p[cbit_graph + i/8] |= 1 << (i&7);
- if (isprint(i)) p[cbit_print + i/8] |= 1 << (i&7);
- if (ispunct(i)) p[cbit_punct + i/8] |= 1 << (i&7);
- if (iscntrl(i)) p[cbit_cntrl + i/8] |= 1 << (i&7);
- }
-p += cbit_length;
-
-/* Finally, the character type table. In this, we exclude VT from the white
-space chars, because Perl doesn't recognize it as such for \s and for comments
-within regexes. */
-
-for (i = 0; i < 256; i++)
- {
- int x = 0;
- if (i != 0x0b && isspace(i)) x += ctype_space;
- if (isalpha(i)) x += ctype_letter;
- if (isdigit(i)) x += ctype_digit;
- if (isxdigit(i)) x += ctype_xdigit;
- if (isalnum(i) || i == '_') x += ctype_word;
-
- /* Note: strchr includes the terminating zero in the characters it considers.
- In this instance, that is ok because we want binary zero to be flagged as a
- meta-character, which in this sense is any character that terminates a run
- of data characters. */
-
- if (strchr("*+?{^.$|()[", i) != 0) x += ctype_meta; *p++ = x; }
-
-return yield;
-}
-
-/* End of maketables.c */
diff --git a/ext/pcre/pcrelib/pcre.c b/ext/pcre/pcrelib/pcre.c
deleted file mode 100644
index e50b9b69e3..0000000000
--- a/ext/pcre/pcrelib/pcre.c
+++ /dev/null
@@ -1,8304 +0,0 @@
-/*************************************************
-* Perl-Compatible Regular Expressions *
-*************************************************/
-
-/*
-This 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. See
-the file Tech.Notes for some information on the internals.
-
-Written by: Philip Hazel <ph10@cam.ac.uk>
-
- Copyright (c) 1997-2004 University of Cambridge
-
------------------------------------------------------------------------------
-Permission is granted to anyone to use this software for any purpose on any
-computer system, and to redistribute it freely, subject to the following
-restrictions:
-
-1. This software is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
-
-2. The origin of this software must not be misrepresented, either by
- explicit claim or by omission.
-
-3. Altered versions must be plainly marked as such, and must not be
- misrepresented as being the original software.
-
-4. If PCRE is embedded in any software that is released under the GNU
- General Purpose Licence (GPL), then the terms of that licence shall
- supersede any condition above with which it is incompatible.
------------------------------------------------------------------------------
-*/
-
-
-/* Define DEBUG to get debugging output on stdout. */
-/* #define DEBUG */
-
-/* Use a macro for debugging printing, 'cause that eliminates the use of #ifdef
-inline, and there are *still* stupid compilers about that don't like indented
-pre-processor statements. I suppose it's only been 10 years... */
-
-#ifdef DEBUG
-#define DPRINTF(p) printf p
-#else
-#define DPRINTF(p) /*nothing*/
-#endif
-
-/* Include the internals header, which itself includes "config.h", the Standard
-C headers, and the external pcre header. */
-
-#include "internal.h"
-
-
-/* Allow compilation as C++ source code, should anybody want to do that. */
-
-#ifdef __cplusplus
-#define class pcre_class
-#endif
-
-
-/* Maximum number of items on the nested bracket stacks at compile time. This
-applies to the nesting of all kinds of parentheses. It does not limit
-un-nested, non-capturing parentheses. This number can be made bigger if
-necessary - it is used to dimension one int and one unsigned char vector at
-compile time. */
-
-#define BRASTACK_SIZE 200
-
-
-/* Maximum number of ints of offset to save on the stack for recursive calls.
-If the offset vector is bigger, malloc is used. This should be a multiple of 3,
-because the offset vector is always a multiple of 3 long. */
-
-#define REC_STACK_SAVE_MAX 30
-
-
-/* The number of bytes in a literal character string above which we can't add
-any more is set at 250 in order to allow for UTF-8 characters. (In theory it
-could be 255 when UTF-8 support is excluded, but that means that some of the
-test output would be different, which just complicates things.) */
-
-#define MAXLIT 250
-
-
-/* The maximum remaining length of subject we are prepared to search for a
-req_byte match. */
-
-#define REQ_BYTE_MAX 1000
-
-
-/* Table of sizes for the fixed-length opcodes. It's defined in a macro so that
-the definition is next to the definition of the opcodes in internal.h. */
-
-static const uschar OP_lengths[] = { OP_LENGTHS };
-
-/* Min and max values for the common repeats; for the maxima, 0 => infinity */
-
-static const char rep_min[] = { 0, 0, 1, 1, 0, 0 };
-static const char rep_max[] = { 0, 0, 0, 0, 1, 1 };
-
-/* Table for handling escaped characters in the range '0'-'z'. Positive returns
-are simple data values; negative values are for special things like \d and so
-on. Zero means further processing is needed (for things like \x), or the escape
-is invalid. */
-
-#if !EBCDIC /* This is the "normal" table for ASCII systems */
-static const short int escapes[] = {
- 0, 0, 0, 0, 0, 0, 0, 0, /* 0 - 7 */
- 0, 0, ':', ';', '<', '=', '>', '?', /* 8 - ? */
- '@', -ESC_A, -ESC_B, -ESC_C, -ESC_D, -ESC_E, 0, -ESC_G, /* @ - G */
- 0, 0, 0, 0, 0, 0, 0, 0, /* H - O */
- 0, -ESC_Q, 0, -ESC_S, 0, 0, 0, -ESC_W, /* P - W */
- 0, 0, -ESC_Z, '[', '\\', ']', '^', '_', /* X - _ */
- '`', 7, -ESC_b, 0, -ESC_d, ESC_e, ESC_f, 0, /* ` - g */
- 0, 0, 0, 0, 0, 0, ESC_n, 0, /* h - o */
- 0, 0, ESC_r, -ESC_s, ESC_tee, 0, 0, -ESC_w, /* p - w */
- 0, 0, -ESC_z /* x - z */
-};
-
-#else /* This is the "abnormal" table for EBCDIC systems */
-static const short int escapes[] = {
-/* 48 */ 0, 0, 0, '.', '<', '(', '+', '|',
-/* 50 */ '&', 0, 0, 0, 0, 0, 0, 0,
-/* 58 */ 0, 0, '!', '$', '*', ')', ';', '~',
-/* 60 */ '-', '/', 0, 0, 0, 0, 0, 0,
-/* 68 */ 0, 0, '|', ',', '%', '_', '>', '?',
-/* 70 */ 0, 0, 0, 0, 0, 0, 0, 0,
-/* 78 */ 0, '`', ':', '#', '@', '\'', '=', '"',
-/* 80 */ 0, 7, -ESC_b, 0, -ESC_d, ESC_e, ESC_f, 0,
-/* 88 */ 0, 0, 0, '{', 0, 0, 0, 0,
-/* 90 */ 0, 0, 0, 'l', 0, ESC_n, 0, 0,
-/* 98 */ 0, ESC_r, 0, '}', 0, 0, 0, 0,
-/* A0 */ 0, '~', -ESC_s, ESC_tee, 0, 0, -ESC_w, 0,
-/* A8 */ 0,-ESC_z, 0, 0, 0, '[', 0, 0,
-/* B0 */ 0, 0, 0, 0, 0, 0, 0, 0,
-/* B8 */ 0, 0, 0, 0, 0, ']', '=', '-',
-/* C0 */ '{',-ESC_A, -ESC_B, -ESC_C, -ESC_D,-ESC_E, 0, -ESC_G,
-/* C8 */ 0, 0, 0, 0, 0, 0, 0, 0,
-/* D0 */ '}', 0, 0, 0, 0, 0, 0, 0,
-/* D8 */-ESC_Q, 0, 0, 0, 0, 0, 0, 0,
-/* E0 */ '\\', 0, -ESC_S, 0, 0, 0, -ESC_W, 0,
-/* E8 */ 0,-ESC_Z, 0, 0, 0, 0, 0, 0,
-/* F0 */ 0, 0, 0, 0, 0, 0, 0, 0,
-/* F8 */ 0, 0, 0, 0, 0, 0, 0, 0
-};
-#endif
-
-
-/* Tables of names of POSIX character classes and their lengths. The list is
-terminated by a zero length entry. The first three must be alpha, upper, lower,
-as this is assumed for handling case independence. */
-
-static const char *const posix_names[] = {
- "alpha", "lower", "upper",
- "alnum", "ascii", "blank", "cntrl", "digit", "graph",
- "print", "punct", "space", "word", "xdigit" };
-
-static const uschar posix_name_lengths[] = {
- 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 4, 6, 0 };
-
-/* Table of class bit maps for each POSIX class; up to three may be combined
-to form the class. The table for [:blank:] is dynamically modified to remove
-the vertical space characters. */
-
-static const int posix_class_maps[] = {
- cbit_lower, cbit_upper, -1, /* alpha */
- cbit_lower, -1, -1, /* lower */
- cbit_upper, -1, -1, /* upper */
- cbit_digit, cbit_lower, cbit_upper, /* alnum */
- cbit_print, cbit_cntrl, -1, /* ascii */
- cbit_space, -1, -1, /* blank - a GNU extension */
- cbit_cntrl, -1, -1, /* cntrl */
- cbit_digit, -1, -1, /* digit */
- cbit_graph, -1, -1, /* graph */
- cbit_print, -1, -1, /* print */
- cbit_punct, -1, -1, /* punct */
- cbit_space, -1, -1, /* space */
- cbit_word, -1, -1, /* word - a Perl extension */
- cbit_xdigit,-1, -1 /* xdigit */
-};
-
-/* Table to identify digits and hex digits. This is used when compiling
-patterns. Note that the tables in chartables are dependent on the locale, and
-may mark arbitrary characters as digits - but the PCRE compiling code expects
-to handle only 0-9, a-z, and A-Z as digits when compiling. That is why we have
-a private table here. It costs 256 bytes, but it is a lot faster than doing
-character value tests (at least in some simple cases I timed), and in some
-applications one wants PCRE to compile efficiently as well as match
-efficiently.
-
-For convenience, we use the same bit definitions as in chartables:
-
- 0x04 decimal digit
- 0x08 hexadecimal digit
-
-Then we can use ctype_digit and ctype_xdigit in the code. */
-
-#if !EBCDIC /* This is the "normal" case, for ASCII systems */
-static const unsigned char digitab[] =
- {
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 0- 7 */
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 8- 15 */
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 16- 23 */
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 24- 31 */
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* - ' */
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* ( - / */
- 0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c, /* 0 - 7 */
- 0x0c,0x0c,0x00,0x00,0x00,0x00,0x00,0x00, /* 8 - ? */
- 0x00,0x08,0x08,0x08,0x08,0x08,0x08,0x00, /* @ - G */
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* H - O */
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* P - W */
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* X - _ */
- 0x00,0x08,0x08,0x08,0x08,0x08,0x08,0x00, /* ` - g */
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* h - o */
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* p - w */
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* x -127 */
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 128-135 */
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 136-143 */
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 144-151 */
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 152-159 */
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 160-167 */
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 168-175 */
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 176-183 */
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 184-191 */
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 192-199 */
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 200-207 */
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 208-215 */
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 216-223 */
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 224-231 */
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 232-239 */
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 240-247 */
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};/* 248-255 */
-
-#else /* This is the "abnormal" case, for EBCDIC systems */
-static const unsigned char digitab[] =
- {
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 0- 7 0 */
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 8- 15 */
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 16- 23 10 */
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 24- 31 */
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 32- 39 20 */
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 40- 47 */
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 48- 55 30 */
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 56- 63 */
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* - 71 40 */
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 72- | */
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* & - 87 50 */
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 88- ¬ */
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* - -103 60 */
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 104- ? */
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 112-119 70 */
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 120- " */
- 0x00,0x08,0x08,0x08,0x08,0x08,0x08,0x00, /* 128- g 80 */
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* h -143 */
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 144- p 90 */
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* q -159 */
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 160- x A0 */
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* y -175 */
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* ^ -183 B0 */
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 184-191 */
- 0x00,0x08,0x08,0x08,0x08,0x08,0x08,0x00, /* { - G C0 */
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* H -207 */
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* } - P D0 */
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* Q -223 */
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* \ - X E0 */
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* Y -239 */
- 0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c, /* 0 - 7 F0 */
- 0x0c,0x0c,0x00,0x00,0x00,0x00,0x00,0x00};/* 8 -255 */
-
-static const unsigned char ebcdic_chartab[] = { /* chartable partial dup */
- 0x80,0x00,0x00,0x00,0x00,0x01,0x00,0x00, /* 0- 7 */
- 0x00,0x00,0x00,0x00,0x01,0x01,0x00,0x00, /* 8- 15 */
- 0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00, /* 16- 23 */
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 24- 31 */
- 0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00, /* 32- 39 */
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 40- 47 */
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 48- 55 */
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 56- 63 */
- 0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* - 71 */
- 0x00,0x00,0x00,0x80,0x00,0x80,0x80,0x80, /* 72- | */
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* & - 87 */
- 0x00,0x00,0x00,0x80,0x80,0x80,0x00,0x00, /* 88- ¬ */
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* - -103 */
- 0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x80, /* 104- ? */
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 112-119 */
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 120- " */
- 0x00,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x12, /* 128- g */
- 0x12,0x12,0x00,0x00,0x00,0x00,0x00,0x00, /* h -143 */
- 0x00,0x12,0x12,0x12,0x12,0x12,0x12,0x12, /* 144- p */
- 0x12,0x12,0x00,0x00,0x00,0x00,0x00,0x00, /* q -159 */
- 0x00,0x00,0x12,0x12,0x12,0x12,0x12,0x12, /* 160- x */
- 0x12,0x12,0x00,0x00,0x00,0x00,0x00,0x00, /* y -175 */
- 0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* ^ -183 */
- 0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00, /* 184-191 */
- 0x80,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x12, /* { - G */
- 0x12,0x12,0x00,0x00,0x00,0x00,0x00,0x00, /* H -207 */
- 0x00,0x12,0x12,0x12,0x12,0x12,0x12,0x12, /* } - P */
- 0x12,0x12,0x00,0x00,0x00,0x00,0x00,0x00, /* Q -223 */
- 0x00,0x00,0x12,0x12,0x12,0x12,0x12,0x12, /* \ - X */
- 0x12,0x12,0x00,0x00,0x00,0x00,0x00,0x00, /* Y -239 */
- 0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c, /* 0 - 7 */
- 0x1c,0x1c,0x00,0x00,0x00,0x00,0x00,0x00};/* 8 -255 */
-#endif
-
-
-/* Definition to allow mutual recursion */
-
-static BOOL
- compile_regex(int, int, int *, uschar **, const uschar **, const char **,
- BOOL, int, int *, int *, branch_chain *, compile_data *);
-
-/* Structure for building a chain of data that actually lives on the
-stack, for holding the values of the subject pointer at the start of each
-subpattern, so as to detect when an empty string has been matched by a
-subpattern - to break infinite loops. When NO_RECURSE is set, these blocks
-are on the heap, not on the stack. */
-
-typedef struct eptrblock {
- struct eptrblock *epb_prev;
- const uschar *epb_saved_eptr;
-} eptrblock;
-
-/* Flag bits for the match() function */
-
-#define match_condassert 0x01 /* Called to check a condition assertion */
-#define match_isgroup 0x02 /* Set if start of bracketed group */
-
-/* Non-error returns from the match() function. Error returns are externally
-defined PCRE_ERROR_xxx codes, which are all negative. */
-
-#define MATCH_MATCH 1
-#define MATCH_NOMATCH 0
-
-
-
-/*************************************************
-* Global variables *
-*************************************************/
-
-/* PCRE is thread-clean and doesn't use any global variables in the normal
-sense. However, it calls memory allocation and free functions via the four
-indirections below, and it can optionally do callouts. These values can be
-changed by the caller, but are shared between all threads. However, when
-compiling for Virtual Pascal, things are done differently (see pcre.in). */
-
-#ifndef VPCOMPAT
-#ifdef __cplusplus
-extern "C" void *(*pcre_malloc)(size_t) = malloc;
-extern "C" void (*pcre_free)(void *) = free;
-extern "C" void *(*pcre_stack_malloc)(size_t) = malloc;
-extern "C" void (*pcre_stack_free)(void *) = free;
-extern "C" int (*pcre_callout)(pcre_callout_block *) = NULL;
-#else
-void *(*pcre_malloc)(size_t) = malloc;
-void (*pcre_free)(void *) = free;
-void *(*pcre_stack_malloc)(size_t) = malloc;
-void (*pcre_stack_free)(void *) = free;
-int (*pcre_callout)(pcre_callout_block *) = NULL;
-#endif
-#endif
-
-
-/*************************************************
-* Macros and tables for character handling *
-*************************************************/
-
-/* When UTF-8 encoding is being used, a character is no longer just a single
-byte. The macros for character handling generate simple sequences when used in
-byte-mode, and more complicated ones for UTF-8 characters. */
-
-#ifndef SUPPORT_UTF8
-#define GETCHAR(c, eptr) c = *eptr;
-#define GETCHARINC(c, eptr) c = *eptr++;
-#define GETCHARINCTEST(c, eptr) c = *eptr++;
-#define GETCHARLEN(c, eptr, len) c = *eptr;
-#define BACKCHAR(eptr)
-
-#else /* SUPPORT_UTF8 */
-
-/* Get the next UTF-8 character, not advancing the pointer. This is called when
-we know we are in UTF-8 mode. */
-
-#define GETCHAR(c, eptr) \
- c = *eptr; \
- if ((c & 0xc0) == 0xc0) \
- { \
- int gcii; \
- int gcaa = utf8_table4[c & 0x3f]; /* Number of additional bytes */ \
- int gcss = 6*gcaa; \
- c = (c & utf8_table3[gcaa]) << gcss; \
- for (gcii = 1; gcii <= gcaa; gcii++) \
- { \
- gcss -= 6; \
- c |= (eptr[gcii] & 0x3f) << gcss; \
- } \
- }
-
-/* Get the next UTF-8 character, advancing the pointer. This is called when we
-know we are in UTF-8 mode. */
-
-#define GETCHARINC(c, eptr) \
- c = *eptr++; \
- if ((c & 0xc0) == 0xc0) \
- { \
- int gcaa = utf8_table4[c & 0x3f]; /* Number of additional bytes */ \
- int gcss = 6*gcaa; \
- c = (c & utf8_table3[gcaa]) << gcss; \
- while (gcaa-- > 0) \
- { \
- gcss -= 6; \
- c |= (*eptr++ & 0x3f) << gcss; \
- } \
- }
-
-/* Get the next character, testing for UTF-8 mode, and advancing the pointer */
-
-#define GETCHARINCTEST(c, eptr) \
- c = *eptr++; \
- if (md->utf8 && (c & 0xc0) == 0xc0) \
- { \
- int gcaa = utf8_table4[c & 0x3f]; /* Number of additional bytes */ \
- int gcss = 6*gcaa; \
- c = (c & utf8_table3[gcaa]) << gcss; \
- while (gcaa-- > 0) \
- { \
- gcss -= 6; \
- c |= (*eptr++ & 0x3f) << gcss; \
- } \
- }
-
-/* Get the next UTF-8 character, not advancing the pointer, incrementing length
-if there are extra bytes. This is called when we know we are in UTF-8 mode. */
-
-#define GETCHARLEN(c, eptr, len) \
- c = *eptr; \
- if ((c & 0xc0) == 0xc0) \
- { \
- int gcii; \
- int gcaa = utf8_table4[c & 0x3f]; /* Number of additional bytes */ \
- int gcss = 6*gcaa; \
- c = (c & utf8_table3[gcaa]) << gcss; \
- for (gcii = 1; gcii <= gcaa; gcii++) \
- { \
- gcss -= 6; \
- c |= (eptr[gcii] & 0x3f) << gcss; \
- } \
- len += gcaa; \
- }
-
-/* If the pointer is not at the start of a character, move it back until
-it is. Called only in UTF-8 mode. */
-
-#define BACKCHAR(eptr) while((*eptr & 0xc0) == 0x80) eptr--;
-
-#endif
-
-
-
-/*************************************************
-* Default character tables *
-*************************************************/
-
-/* A default set of character tables is included in the PCRE binary. Its source
-is built by the maketables auxiliary program, which uses the default C ctypes
-functions, and put in the file chartables.c. These tables are used by PCRE
-whenever the caller of pcre_compile() does not provide an alternate set of
-tables. */
-
-#include "chartables.c"
-
-
-
-#ifdef SUPPORT_UTF8
-/*************************************************
-* Tables for UTF-8 support *
-*************************************************/
-
-/* These are the breakpoints for different numbers of bytes in a UTF-8
-character. */
-
-static const int utf8_table1[] =
- { 0x7f, 0x7ff, 0xffff, 0x1fffff, 0x3ffffff, 0x7fffffff};
-
-/* These are the indicator bits and the mask for the data bits to set in the
-first byte of a character, indexed by the number of additional bytes. */
-
-static const int utf8_table2[] = { 0, 0xc0, 0xe0, 0xf0, 0xf8, 0xfc};
-static const int utf8_table3[] = { 0xff, 0x1f, 0x0f, 0x07, 0x03, 0x01};
-
-/* Table of the number of extra characters, indexed by the first character
-masked with 0x3f. The highest number for a valid UTF-8 character is in fact
-0x3d. */
-
-static const uschar utf8_table4[] = {
- 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
- 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
- 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 };
-
-
-/*************************************************
-* Convert character value to UTF-8 *
-*************************************************/
-
-/* This function takes an integer value in the range 0 - 0x7fffffff
-and encodes it as a UTF-8 character in 0 to 6 bytes.
-
-Arguments:
- cvalue the character value
- buffer pointer to buffer for result - at least 6 bytes long
-
-Returns: number of characters placed in the buffer
-*/
-
-static int
-ord2utf8(int cvalue, uschar *buffer)
-{
-register int i, j;
-for (i = 0; i < sizeof(utf8_table1)/sizeof(int); i++)
- if (cvalue <= utf8_table1[i]) break;
-buffer += i;
-for (j = i; j > 0; j--)
- {
- *buffer-- = 0x80 | (cvalue & 0x3f);
- cvalue >>= 6;
- }
-*buffer = utf8_table2[i] | cvalue;
-return i + 1;
-}
-#endif
-
-
-
-/*************************************************
-* Print compiled regex *
-*************************************************/
-
-/* The code for doing this is held in a separate file that is also included in
-pcretest.c. It defines a function called print_internals(). */
-
-#ifdef DEBUG
-#include "printint.c"
-#endif
-
-
-
-/*************************************************
-* Return version string *
-*************************************************/
-
-#define STRING(a) # a
-#define XSTRING(s) STRING(s)
-
-EXPORT const char *
-pcre_version(void)
-{
-return XSTRING(PCRE_MAJOR) "." XSTRING(PCRE_MINOR) " " XSTRING(PCRE_DATE);
-}
-
-
-
-
-/*************************************************
-* (Obsolete) Return info about compiled pattern *
-*************************************************/
-
-/* This is the original "info" function. It picks potentially useful data out
-of the private structure, but its interface was too rigid. It remains for
-backwards compatibility. The public options are passed back in an int - though
-the re->options field has been expanded to a long int, all the public options
-at the low end of it, and so even on 16-bit systems this will still be OK.
-Therefore, I haven't changed the API for pcre_info().
-
-Arguments:
- external_re points to compiled code
- optptr where to pass back the options
- first_byte where to pass back the first character,
- or -1 if multiline and all branches start ^,
- or -2 otherwise
-
-Returns: number of capturing subpatterns
- or negative values on error
-*/
-
-EXPORT int
-pcre_info(const pcre *external_re, int *optptr, int *first_byte)
-{
-const real_pcre *re = (const real_pcre *)external_re;
-if (re == NULL) return PCRE_ERROR_NULL;
-if (re->magic_number != MAGIC_NUMBER) return PCRE_ERROR_BADMAGIC;
-if (optptr != NULL) *optptr = (int)(re->options & PUBLIC_OPTIONS);
-if (first_byte != NULL)
- *first_byte = ((re->options & PCRE_FIRSTSET) != 0)? re->first_byte :
- ((re->options & PCRE_STARTLINE) != 0)? -1 : -2;
-return re->top_bracket;
-}
-
-
-
-/*************************************************
-* Return info about compiled pattern *
-*************************************************/
-
-/* This is a newer "info" function which has an extensible interface so
-that additional items can be added compatibly.
-
-Arguments:
- external_re points to compiled code
- extra_data points extra data, or NULL
- what what information is required
- where where to put the information
-
-Returns: 0 if data returned, negative on error
-*/
-
-EXPORT int
-pcre_fullinfo(const pcre *external_re, const pcre_extra *extra_data, int what,
- void *where)
-{
-const real_pcre *re = (const real_pcre *)external_re;
-const pcre_study_data *study = NULL;
-
-if (re == NULL || where == NULL) return PCRE_ERROR_NULL;
-if (re->magic_number != MAGIC_NUMBER) return PCRE_ERROR_BADMAGIC;
-
-if (extra_data != NULL && (extra_data->flags & PCRE_EXTRA_STUDY_DATA) != 0)
- study = (const pcre_study_data *)extra_data->study_data;
-
-switch (what)
- {
- case PCRE_INFO_OPTIONS:
- *((unsigned long int *)where) = re->options & PUBLIC_OPTIONS;
- break;
-
- case PCRE_INFO_SIZE:
- *((size_t *)where) = re->size;
- break;
-
- case PCRE_INFO_STUDYSIZE:
- *((size_t *)where) = (study == NULL)? 0 : study->size;
- break;
-
- case PCRE_INFO_CAPTURECOUNT:
- *((int *)where) = re->top_bracket;
- break;
-
- case PCRE_INFO_BACKREFMAX:
- *((int *)where) = re->top_backref;
- break;
-
- case PCRE_INFO_FIRSTBYTE:
- *((int *)where) =
- ((re->options & PCRE_FIRSTSET) != 0)? re->first_byte :
- ((re->options & PCRE_STARTLINE) != 0)? -1 : -2;
- break;
-
- case PCRE_INFO_FIRSTTABLE:
- *((const uschar **)where) =
- (study != NULL && (study->options & PCRE_STUDY_MAPPED) != 0)?
- study->start_bits : NULL;
- break;
-
- case PCRE_INFO_LASTLITERAL:
- *((int *)where) =
- ((re->options & PCRE_REQCHSET) != 0)? re->req_byte : -1;
- break;
-
- case PCRE_INFO_NAMEENTRYSIZE:
- *((int *)where) = re->name_entry_size;
- break;
-
- case PCRE_INFO_NAMECOUNT:
- *((int *)where) = re->name_count;
- break;
-
- case PCRE_INFO_NAMETABLE:
- *((const uschar **)where) = (const uschar *)re + sizeof(real_pcre);
- break;
-
- default: return PCRE_ERROR_BADOPTION;
- }
-
-return 0;
-}
-
-
-
-/*************************************************
-* Return info about what features are configured *
-*************************************************/
-
-/* This is function which has an extensible interface so that additional items
-can be added compatibly.
-
-Arguments:
- what what information is required
- where where to put the information
-
-Returns: 0 if data returned, negative on error
-*/
-
-EXPORT int
-pcre_config(int what, void *where)
-{
-switch (what)
- {
- case PCRE_CONFIG_UTF8:
-#ifdef SUPPORT_UTF8
- *((int *)where) = 1;
-#else
- *((int *)where) = 0;
-#endif
- break;
-
- case PCRE_CONFIG_NEWLINE:
- *((int *)where) = NEWLINE;
- break;
-
- case PCRE_CONFIG_LINK_SIZE:
- *((int *)where) = LINK_SIZE;
- break;
-
- case PCRE_CONFIG_POSIX_MALLOC_THRESHOLD:
- *((int *)where) = POSIX_MALLOC_THRESHOLD;
- break;
-
- case PCRE_CONFIG_MATCH_LIMIT:
- *((unsigned int *)where) = MATCH_LIMIT;
- break;
-
- case PCRE_CONFIG_STACKRECURSE:
-#ifdef NO_RECURSE
- *((int *)where) = 0;
-#else
- *((int *)where) = 1;
-#endif
- break;
-
- default: return PCRE_ERROR_BADOPTION;
- }
-
-return 0;
-}
-
-
-
-#ifdef DEBUG
-/*************************************************
-* Debugging function to print chars *
-*************************************************/
-
-/* Print a sequence of chars in printable format, stopping at the end of the
-subject if the requested.
-
-Arguments:
- p points to characters
- length number to print
- is_subject TRUE if printing from within md->start_subject
- md pointer to matching data block, if is_subject is TRUE
-
-Returns: nothing
-*/
-
-static void
-pchars(const uschar *p, int length, BOOL is_subject, match_data *md)
-{
-int c;
-if (is_subject && length > md->end_subject - p) length = md->end_subject - p;
-while (length-- > 0)
- if (isprint(c = *(p++))) printf("%c", c); else printf("\\x%02x", c);
-}
-#endif
-
-
-
-
-/*************************************************
-* Handle escapes *
-*************************************************/
-
-/* This function is called when a \ has been encountered. It either returns a
-positive value for a simple escape such as \n, or a negative value which
-encodes one of the more complicated things such as \d. When UTF-8 is enabled,
-a positive value greater than 255 may be returned. On entry, ptr is pointing at
-the \. On exit, it is on the final character of the escape sequence.
-
-Arguments:
- ptrptr points to the pattern position pointer
- errorptr points to the pointer to the error message
- bracount number of previous extracting brackets
- options the options bits
- isclass TRUE if inside a character class
-
-Returns: zero or positive => a data character
- negative => a special escape sequence
- on error, errorptr is set
-*/
-
-static int
-check_escape(const uschar **ptrptr, const char **errorptr, int bracount,
- int options, BOOL isclass)
-{
-const uschar *ptr = *ptrptr;
-int c, i;
-
-/* If backslash is at the end of the pattern, it's an error. */
-
-c = *(++ptr);
-if (c == 0) *errorptr = ERR1;
-
-/* Non-alphamerics are literals. For digits or letters, do an initial lookup in
-a table. A non-zero result is something that can be returned immediately.
-Otherwise further processing may be required. */
-
-#if !EBCDIC /* ASCII coding */
-else if (c < '0' || c > 'z') {} /* Not alphameric */
-else if ((i = escapes[c - '0']) != 0) c = i;
-
-#else /* EBCDIC coding */
-else if (c < 'a' || (ebcdic_chartab[c] & 0x0E) == 0) {} /* Not alphameric */
-else if ((i = escapes[c - 0x48]) != 0) c = i;
-#endif
-
-/* Escapes that need further processing, or are illegal. */
-
-else
- {
- const uschar *oldptr;
- switch (c)
- {
- /* A number of Perl escapes are not handled by PCRE. We give an explicit
- error. */
-
- case 'l':
- case 'L':
- case 'N':
- case 'p':
- case 'P':
- case 'u':
- case 'U':
- case 'X':
- *errorptr = ERR37;
- break;
-
- /* The handling of escape sequences consisting of a string of digits
- starting with one that is not zero is not straightforward. By experiment,
- the way Perl works seems to be as follows:
-
- Outside a character class, the digits are read as a decimal number. If the
- number is less than 10, or if there are that many previous extracting
- left brackets, then it is a back reference. Otherwise, up to three octal
- digits are read to form an escaped byte. Thus \123 is likely to be octal
- 123 (cf \0123, which is octal 012 followed by the literal 3). If the octal
- value is greater than 377, the least significant 8 bits are taken. Inside a
- character class, \ followed by a digit is always an octal number. */
-
- case '1': case '2': case '3': case '4': case '5':
- case '6': case '7': case '8': case '9':
-
- if (!isclass)
- {
- oldptr = ptr;
- c -= '0';
- while ((digitab[ptr[1]] & ctype_digit) != 0)
- c = c * 10 + *(++ptr) - '0';
- if (c < 10 || c <= bracount)
- {
- c = -(ESC_REF + c);
- break;
- }
- ptr = oldptr; /* Put the pointer back and fall through */
- }
-
- /* Handle an octal number following \. If the first digit is 8 or 9, Perl
- generates a binary zero byte and treats the digit as a following literal.
- Thus we have to pull back the pointer by one. */
-
- if ((c = *ptr) >= '8')
- {
- ptr--;
- c = 0;
- break;
- }
-
- /* \0 always starts an octal number, but we may drop through to here with a
- larger first octal digit. */
-
- case '0':
- c -= '0';
- while(i++ < 2 && ptr[1] >= '0' && ptr[1] <= '7')
- c = c * 8 + *(++ptr) - '0';
- c &= 255; /* Take least significant 8 bits */
- break;
-
- /* \x is complicated when UTF-8 is enabled. \x{ddd} is a character number
- which can be greater than 0xff, but only if the ddd are hex digits. */
-
- case 'x':
-#ifdef SUPPORT_UTF8
- if (ptr[1] == '{' && (options & PCRE_UTF8) != 0)
- {
- const uschar *pt = ptr + 2;
- register int count = 0;
- c = 0;
- while ((digitab[*pt] & ctype_xdigit) != 0)
- {
- int cc = *pt++;
- count++;
-#if !EBCDIC /* ASCII coding */
- if (cc >= 'a') cc -= 32; /* Convert to upper case */
- c = c * 16 + cc - ((cc < 'A')? '0' : ('A' - 10));
-#else /* EBCDIC coding */
- if (cc >= 'a' && cc <= 'z') cc += 64; /* Convert to upper case */
- c = c * 16 + cc - ((cc >= '0')? '0' : ('A' - 10));
-#endif
- }
- if (*pt == '}')
- {
- if (c < 0 || count > 8) *errorptr = ERR34;
- ptr = pt;
- break;
- }
- /* If the sequence of hex digits does not end with '}', then we don't
- recognize this construct; fall through to the normal \x handling. */
- }
-#endif
-
- /* Read just a single hex char */
-
- c = 0;
- while (i++ < 2 && (digitab[ptr[1]] & ctype_xdigit) != 0)
- {
- int cc; /* Some compilers don't like ++ */
- cc = *(++ptr); /* in initializers */
-#if !EBCDIC /* ASCII coding */
- if (cc >= 'a') cc -= 32; /* Convert to upper case */
- c = c * 16 + cc - ((cc < 'A')? '0' : ('A' - 10));
-#else /* EBCDIC coding */
- if (cc <= 'z') cc += 64; /* Convert to upper case */
- c = c * 16 + cc - ((cc >= '0')? '0' : ('A' - 10));
-#endif
- }
- break;
-
- /* Other special escapes not starting with a digit are straightforward */
-
- case 'c':
- c = *(++ptr);
- if (c == 0)
- {
- *errorptr = ERR2;
- return 0;
- }
-
- /* A letter is upper-cased; then the 0x40 bit is flipped. This coding
- is ASCII-specific, but then the whole concept of \cx is ASCII-specific.
- (However, an EBCDIC equivalent has now been added.) */
-
-#if !EBCDIC /* ASCII coding */
- if (c >= 'a' && c <= 'z') c -= 32;
- c ^= 0x40;
-#else /* EBCDIC coding */
- if (c >= 'a' && c <= 'z') c += 64;
- c ^= 0xC0;
-#endif
- break;
-
- /* PCRE_EXTRA enables extensions to Perl in the matter of escapes. Any
- other alphameric following \ is an error if PCRE_EXTRA was set; otherwise,
- for Perl compatibility, it is a literal. This code looks a bit odd, but
- there used to be some cases other than the default, and there may be again
- in future, so I haven't "optimized" it. */
-
- default:
- if ((options & PCRE_EXTRA) != 0) switch(c)
- {
- default:
- *errorptr = ERR3;
- break;
- }
- break;
- }
- }
-
-*ptrptr = ptr;
-return c;
-}
-
-
-
-/*************************************************
-* Check for counted repeat *
-*************************************************/
-
-/* This function is called when a '{' is encountered in a place where it might
-start a quantifier. It looks ahead to see if it really is a quantifier or not.
-It is only a quantifier if it is one of the forms {ddd} {ddd,} or {ddd,ddd}
-where the ddds are digits.
-
-Arguments:
- p pointer to the first char after '{'
-
-Returns: TRUE or FALSE
-*/
-
-static BOOL
-is_counted_repeat(const uschar *p)
-{
-if ((digitab[*p++] & ctype_digit) == 0) return FALSE;
-while ((digitab[*p] & ctype_digit) != 0) p++;
-if (*p == '}') return TRUE;
-
-if (*p++ != ',') return FALSE;
-if (*p == '}') return TRUE;
-
-if ((digitab[*p++] & ctype_digit) == 0) return FALSE;
-while ((digitab[*p] & ctype_digit) != 0) p++;
-
-return (*p == '}');
-}
-
-
-
-/*************************************************
-* Read repeat counts *
-*************************************************/
-
-/* Read an item of the form {n,m} and return the values. This is called only
-after is_counted_repeat() has confirmed that a repeat-count quantifier exists,
-so the syntax is guaranteed to be correct, but we need to check the values.
-
-Arguments:
- p pointer to first char after '{'
- minp pointer to int for min
- maxp pointer to int for max
- returned as -1 if no max
- errorptr points to pointer to error message
-
-Returns: pointer to '}' on success;
- current ptr on error, with errorptr set
-*/
-
-static const uschar *
-read_repeat_counts(const uschar *p, int *minp, int *maxp, const char **errorptr)
-{
-int min = 0;
-int max = -1;
-
-while ((digitab[*p] & ctype_digit) != 0) min = min * 10 + *p++ - '0';
-
-if (*p == '}') max = min; else
- {
- if (*(++p) != '}')
- {
- max = 0;
- while((digitab[*p] & ctype_digit) != 0) max = max * 10 + *p++ - '0';
- if (max < min)
- {
- *errorptr = ERR4;
- return p;
- }
- }
- }
-
-/* Do paranoid checks, then fill in the required variables, and pass back the
-pointer to the terminating '}'. */
-
-if (min > 65535 || max > 65535)
- *errorptr = ERR5;
-else
- {
- *minp = min;
- *maxp = max;
- }
-return p;
-}
-
-
-
-/*************************************************
-* Find first significant op code *
-*************************************************/
-
-/* This is called by several functions that scan a compiled expression looking
-for a fixed first character, or an anchoring op code etc. It skips over things
-that do not influence this. For some calls, a change of option is important.
-
-Arguments:
- code pointer to the start of the group
- options pointer to external options
- optbit the option bit whose changing is significant, or
- zero if none are
-
-Returns: pointer to the first significant opcode
-*/
-
-static const uschar*
-first_significant_code(const uschar *code, int *options, int optbit)
-{
-for (;;)
- {
- switch ((int)*code)
- {
- case OP_OPT:
- if (optbit > 0 && ((int)code[1] & optbit) != (*options & optbit))
- *options = (int)code[1];
- code += 2;
- break;
-
- case OP_ASSERT_NOT:
- case OP_ASSERTBACK:
- case OP_ASSERTBACK_NOT:
- do code += GET(code, 1); while (*code == OP_ALT);
- /* Fall through */
-
- case OP_CALLOUT:
- case OP_CREF:
- case OP_BRANUMBER:
- case OP_WORD_BOUNDARY:
- case OP_NOT_WORD_BOUNDARY:
- code += OP_lengths[*code];
- break;
-
- default:
- return code;
- }
- }
-/* Control never reaches here */
-}
-
-
-
-
-/*************************************************
-* Find the fixed length of a pattern *
-*************************************************/
-
-/* Scan a pattern and compute the fixed length of subject that will match it,
-if the length is fixed. This is needed for dealing with backward assertions.
-In UTF8 mode, the result is in characters rather than bytes.
-
-Arguments:
- code points to the start of the pattern (the bracket)
- options the compiling options
-
-Returns: the fixed length, or -1 if there is no fixed length,
- or -2 if \C was encountered
-*/
-
-static int
-find_fixedlength(uschar *code, int options)
-{
-int length = -1;
-
-register int branchlength = 0;
-register uschar *cc = code + 1 + LINK_SIZE;
-
-/* Scan along the opcodes for this branch. If we get to the end of the
-branch, check the length against that of the other branches. */
-
-for (;;)
- {
- int d;
- register int op = *cc;
- if (op >= OP_BRA) op = OP_BRA;
-
- switch (op)
- {
- case OP_BRA:
- case OP_ONCE:
- case OP_COND:
- d = find_fixedlength(cc, options);
- if (d < 0) return d;
- branchlength += d;
- do cc += GET(cc, 1); while (*cc == OP_ALT);
- cc += 1 + LINK_SIZE;
- break;
-
- /* Reached end of a branch; if it's a ket it is the end of a nested
- call. If it's ALT it is an alternation in a nested call. If it is
- END it's the end of the outer call. All can be handled by the same code. */
-
- case OP_ALT:
- case OP_KET:
- case OP_KETRMAX:
- case OP_KETRMIN:
- case OP_END:
- if (length < 0) length = branchlength;
- else if (length != branchlength) return -1;
- if (*cc != OP_ALT) return length;
- cc += 1 + LINK_SIZE;
- branchlength = 0;
- break;
-
- /* Skip over assertive subpatterns */
-
- case OP_ASSERT:
- case OP_ASSERT_NOT:
- case OP_ASSERTBACK:
- case OP_ASSERTBACK_NOT:
- do cc += GET(cc, 1); while (*cc == OP_ALT);
- /* Fall through */
-
- /* Skip over things that don't match chars */
-
- case OP_REVERSE:
- case OP_BRANUMBER:
- case OP_CREF:
- case OP_OPT:
- case OP_CALLOUT:
- case OP_SOD:
- case OP_SOM:
- case OP_EOD:
- case OP_EODN:
- case OP_CIRC:
- case OP_DOLL:
- case OP_NOT_WORD_BOUNDARY:
- case OP_WORD_BOUNDARY:
- cc += OP_lengths[*cc];
- break;
-
- /* Handle char strings. In UTF-8 mode we must count characters, not bytes.
- This requires a scan of the string, unfortunately. We assume valid UTF-8
- strings, so all we do is reduce the length by one for every byte whose bits
- are 10xxxxxx. */
-
- case OP_CHARS:
- branchlength += *(++cc);
-#ifdef SUPPORT_UTF8
- if ((options & PCRE_UTF8) != 0)
- for (d = 1; d <= *cc; d++)
- if ((cc[d] & 0xc0) == 0x80) branchlength--;
-#endif
- cc += *cc + 1;
- break;
-
- /* Handle exact repetitions. The count is already in characters, but we
- need to skip over a multibyte character in UTF8 mode. */
-
- case OP_EXACT:
- branchlength += GET2(cc,1);
- cc += 4;
-#ifdef SUPPORT_UTF8
- if ((options & PCRE_UTF8) != 0)
- {
- while((*cc & 0x80) == 0x80) cc++;
- }
-#endif
- break;
-
- case OP_TYPEEXACT:
- branchlength += GET2(cc,1);
- cc += 4;
- break;
-
- /* Handle single-char matchers */
-
- case OP_NOT_DIGIT:
- case OP_DIGIT:
- case OP_NOT_WHITESPACE:
- case OP_WHITESPACE:
- case OP_NOT_WORDCHAR:
- case OP_WORDCHAR:
- case OP_ANY:
- branchlength++;
- cc++;
- break;
-
- /* The single-byte matcher isn't allowed */
-
- case OP_ANYBYTE:
- return -2;
-
- /* Check a class for variable quantification */
-
-#ifdef SUPPORT_UTF8
- case OP_XCLASS:
- cc += GET(cc, 1) - 33;
- /* Fall through */
-#endif
-
- case OP_CLASS:
- case OP_NCLASS:
- cc += 33;
-
- switch (*cc)
- {
- case OP_CRSTAR:
- case OP_CRMINSTAR:
- case OP_CRQUERY:
- case OP_CRMINQUERY:
- return -1;
-
- case OP_CRRANGE:
- case OP_CRMINRANGE:
- if (GET2(cc,1) != GET2(cc,3)) return -1;
- branchlength += GET2(cc,1);
- cc += 5;
- break;
-
- default:
- branchlength++;
- }
- break;
-
- /* Anything else is variable length */
-
- default:
- return -1;
- }
- }
-/* Control never gets here */
-}
-
-
-
-
-/*************************************************
-* Scan compiled regex for numbered bracket *
-*************************************************/
-
-/* This little function scans through a compiled pattern until it finds a
-capturing bracket with the given number.
-
-Arguments:
- code points to start of expression
- utf8 TRUE in UTF-8 mode
- number the required bracket number
-
-Returns: pointer to the opcode for the bracket, or NULL if not found
-*/
-
-static const uschar *
-find_bracket(const uschar *code, BOOL utf8, int number)
-{
-#ifndef SUPPORT_UTF8
-utf8 = utf8; /* Stop pedantic compilers complaining */
-#endif
-
-for (;;)
- {
- register int c = *code;
- if (c == OP_END) return NULL;
- else if (c == OP_CHARS) code += code[1] + OP_lengths[c];
- else if (c > OP_BRA)
- {
- int n = c - OP_BRA;
- if (n > EXTRACT_BASIC_MAX) n = GET2(code, 2+LINK_SIZE);
- if (n == number) return (uschar *)code;
- code += OP_lengths[OP_BRA];
- }
- else
- {
- code += OP_lengths[c];
-
-#ifdef SUPPORT_UTF8
-
- /* In UTF-8 mode, opcodes that are followed by a character may be followed
- by a multi-byte character. The length in the table is a minimum, so we have
- to scan along to skip the extra characters. All opcodes are less than 128,
- so we can use relatively efficient code. */
-
- if (utf8) switch(c)
- {
- case OP_EXACT:
- case OP_UPTO:
- case OP_MINUPTO:
- case OP_STAR:
- case OP_MINSTAR:
- case OP_PLUS:
- case OP_MINPLUS:
- case OP_QUERY:
- case OP_MINQUERY:
- while ((*code & 0xc0) == 0x80) code++;
- break;
-
- /* XCLASS is used for classes that cannot be represented just by a bit
- map. This includes negated single high-valued characters. The length in
- the table is zero; the actual length is stored in the compled code. */
-
- case OP_XCLASS:
- code += GET(code, 1) + 1;
- break;
- }
-#endif
- }
- }
-}
-
-
-
-/*************************************************
-* Scan compiled regex for recursion reference *
-*************************************************/
-
-/* This little function scans through a compiled pattern until it finds an
-instance of OP_RECURSE.
-
-Arguments:
- code points to start of expression
- utf8 TRUE in UTF-8 mode
-
-Returns: pointer to the opcode for OP_RECURSE, or NULL if not found
-*/
-
-static const uschar *
-find_recurse(const uschar *code, BOOL utf8)
-{
-#ifndef SUPPORT_UTF8
-utf8 = utf8; /* Stop pedantic compilers complaining */
-#endif
-
-for (;;)
- {
- register int c = *code;
- if (c == OP_END) return NULL;
- else if (c == OP_RECURSE) return code;
- else if (c == OP_CHARS) code += code[1] + OP_lengths[c];
- else if (c > OP_BRA)
- {
- code += OP_lengths[OP_BRA];
- }
- else
- {
- code += OP_lengths[c];
-
-#ifdef SUPPORT_UTF8
-
- /* In UTF-8 mode, opcodes that are followed by a character may be followed
- by a multi-byte character. The length in the table is a minimum, so we have
- to scan along to skip the extra characters. All opcodes are less than 128,
- so we can use relatively efficient code. */
-
- if (utf8) switch(c)
- {
- case OP_EXACT:
- case OP_UPTO:
- case OP_MINUPTO:
- case OP_STAR:
- case OP_MINSTAR:
- case OP_PLUS:
- case OP_MINPLUS:
- case OP_QUERY:
- case OP_MINQUERY:
- while ((*code & 0xc0) == 0x80) code++;
- break;
-
- /* XCLASS is used for classes that cannot be represented just by a bit
- map. This includes negated single high-valued characters. The length in
- the table is zero; the actual length is stored in the compled code. */
-
- case OP_XCLASS:
- code += GET(code, 1) + 1;
- break;
- }
-#endif
- }
- }
-}
-
-
-
-/*************************************************
-* Scan compiled branch for non-emptiness *
-*************************************************/
-
-/* This function scans through a branch of a compiled pattern to see whether it
-can match the empty string or not. It is called only from could_be_empty()
-below. Note that first_significant_code() skips over assertions. If we hit an
-unclosed bracket, we return "empty" - this means we've struck an inner bracket
-whose current branch will already have been scanned.
-
-Arguments:
- code points to start of search
- endcode points to where to stop
- utf8 TRUE if in UTF8 mode
-
-Returns: TRUE if what is matched could be empty
-*/
-
-static BOOL
-could_be_empty_branch(const uschar *code, const uschar *endcode, BOOL utf8)
-{
-register int c;
-for (code = first_significant_code(code + 1 + LINK_SIZE, NULL, 0);
- code < endcode;
- code = first_significant_code(code + OP_lengths[c], NULL, 0))
- {
- const uschar *ccode;
-
- c = *code;
-
- if (c >= OP_BRA)
- {
- BOOL empty_branch;
- if (GET(code, 1) == 0) return TRUE; /* Hit unclosed bracket */
-
- /* Scan a closed bracket */
-
- empty_branch = FALSE;
- do
- {
- if (!empty_branch && could_be_empty_branch(code, endcode, utf8))
- empty_branch = TRUE;
- code += GET(code, 1);
- }
- while (*code == OP_ALT);
- if (!empty_branch) return FALSE; /* All branches are non-empty */
- code += 1 + LINK_SIZE;
- c = *code;
- }
-
- else switch (c)
- {
- /* Check for quantifiers after a class */
-
-#ifdef SUPPORT_UTF8
- case OP_XCLASS:
- ccode = code + GET(code, 1);
- goto CHECK_CLASS_REPEAT;
-#endif
-
- case OP_CLASS:
- case OP_NCLASS:
- ccode = code + 33;
-
-#ifdef SUPPORT_UTF8
- CHECK_CLASS_REPEAT:
-#endif
-
- switch (*ccode)
- {
- case OP_CRSTAR: /* These could be empty; continue */
- case OP_CRMINSTAR:
- case OP_CRQUERY:
- case OP_CRMINQUERY:
- break;
-
- default: /* Non-repeat => class must match */
- case OP_CRPLUS: /* These repeats aren't empty */
- case OP_CRMINPLUS:
- return FALSE;
-
- case OP_CRRANGE:
- case OP_CRMINRANGE:
- if (GET2(ccode, 1) > 0) return FALSE; /* Minimum > 0 */
- break;
- }
- break;
-
- /* Opcodes that must match a character */
-
- case OP_NOT_DIGIT:
- case OP_DIGIT:
- case OP_NOT_WHITESPACE:
- case OP_WHITESPACE:
- case OP_NOT_WORDCHAR:
- case OP_WORDCHAR:
- case OP_ANY:
- case OP_ANYBYTE:
- case OP_CHARS:
- case OP_NOT:
- case OP_PLUS:
- case OP_MINPLUS:
- case OP_EXACT:
- case OP_NOTPLUS:
- case OP_NOTMINPLUS:
- case OP_NOTEXACT:
- case OP_TYPEPLUS:
- case OP_TYPEMINPLUS:
- case OP_TYPEEXACT:
- return FALSE;
-
- /* End of branch */
-
- case OP_KET:
- case OP_KETRMAX:
- case OP_KETRMIN:
- case OP_ALT:
- return TRUE;
-
- /* In UTF-8 mode, STAR, MINSTAR, QUERY, MINQUERY, UPTO, and MINUPTO may be
- followed by a multibyte character */
-
-#ifdef SUPPORT_UTF8
- case OP_STAR:
- case OP_MINSTAR:
- case OP_QUERY:
- case OP_MINQUERY:
- case OP_UPTO:
- case OP_MINUPTO:
- if (utf8) while ((code[2] & 0xc0) == 0x80) code++;
- break;
-#endif
- }
- }
-
-return TRUE;
-}
-
-
-
-/*************************************************
-* Scan compiled regex for non-emptiness *
-*************************************************/
-
-/* This function is called to check for left recursive calls. We want to check
-the current branch of the current pattern to see if it could match the empty
-string. If it could, we must look outwards for branches at other levels,
-stopping when we pass beyond the bracket which is the subject of the recursion.
-
-Arguments:
- code points to start of the recursion
- endcode points to where to stop (current RECURSE item)
- bcptr points to the chain of current (unclosed) branch starts
- utf8 TRUE if in UTF-8 mode
-
-Returns: TRUE if what is matched could be empty
-*/
-
-static BOOL
-could_be_empty(const uschar *code, const uschar *endcode, branch_chain *bcptr,
- BOOL utf8)
-{
-while (bcptr != NULL && bcptr->current >= code)
- {
- if (!could_be_empty_branch(bcptr->current, endcode, utf8)) return FALSE;
- bcptr = bcptr->outer;
- }
-return TRUE;
-}
-
-
-
-/*************************************************
-* Check for POSIX class syntax *
-*************************************************/
-
-/* This function is called when the sequence "[:" or "[." or "[=" is
-encountered in a character class. It checks whether this is followed by an
-optional ^ and then a sequence of letters, terminated by a matching ":]" or
-".]" or "=]".
-
-Argument:
- ptr pointer to the initial [
- endptr where to return the end pointer
- cd pointer to compile data
-
-Returns: TRUE or FALSE
-*/
-
-static BOOL
-check_posix_syntax(const uschar *ptr, const uschar **endptr, compile_data *cd)
-{
-int terminator; /* Don't combine these lines; the Solaris cc */
-terminator = *(++ptr); /* compiler warns about "non-constant" initializer. */
-if (*(++ptr) == '^') ptr++;
-while ((cd->ctypes[*ptr] & ctype_letter) != 0) ptr++;
-if (*ptr == terminator && ptr[1] == ']')
- {
- *endptr = ptr;
- return TRUE;
- }
-return FALSE;
-}
-
-
-
-
-/*************************************************
-* Check POSIX class name *
-*************************************************/
-
-/* This function is called to check the name given in a POSIX-style class entry
-such as [:alnum:].
-
-Arguments:
- ptr points to the first letter
- len the length of the name
-
-Returns: a value representing the name, or -1 if unknown
-*/
-
-static int
-check_posix_name(const uschar *ptr, int len)
-{
-register int yield = 0;
-while (posix_name_lengths[yield] != 0)
- {
- if (len == posix_name_lengths[yield] &&
- strncmp((const char *)ptr, posix_names[yield], len) == 0) return yield;
- yield++;
- }
-return -1;
-}
-
-
-/*************************************************
-* Adjust OP_RECURSE items in repeated group *
-*************************************************/
-
-/* OP_RECURSE items contain an offset from the start of the regex to the group
-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 is the job of this function. Before it is called, the
-partially compiled regex must be temporarily terminated with OP_END.
-
-Arguments:
- group points to the start of the group
- adjust the amount by which the group is to be moved
- utf8 TRUE in UTF-8 mode
- cd contains pointers to tables etc.
-
-Returns: nothing
-*/
-
-static void
-adjust_recurse(uschar *group, int adjust, BOOL utf8, compile_data *cd)
-{
-uschar *ptr = group;
-while ((ptr = (uschar *)find_recurse(ptr, utf8)) != NULL)
- {
- int offset = GET(ptr, 1);
- if (cd->start_code + offset >= group) PUT(ptr, 1, offset + adjust);
- ptr += 1 + LINK_SIZE;
- }
-}
-
-
-
-/*************************************************
-* Compile one branch *
-*************************************************/
-
-/* Scan the pattern, compiling it into the code vector. If the options are
-changed during the branch, the pointer is used to change the external options
-bits.
-
-Arguments:
- optionsptr pointer to the option bits
- brackets points to number of extracting brackets used
- code points to the pointer to the current code point
- ptrptr points to the current pattern pointer
- errorptr points to pointer to error message
- firstbyteptr set to initial literal character, or < 0 (REQ_UNSET, REQ_NONE)
- reqbyteptr set to the last literal character required, else < 0
- bcptr points to current branch chain
- cd contains pointers to tables etc.
-
-Returns: TRUE on success
- FALSE, with *errorptr set on error
-*/
-
-static BOOL
-compile_branch(int *optionsptr, int *brackets, uschar **codeptr,
- const uschar **ptrptr, const char **errorptr, int *firstbyteptr,
- int *reqbyteptr, branch_chain *bcptr, compile_data *cd)
-{
-int repeat_type, op_type;
-int repeat_min = 0, repeat_max = 0; /* To please picky compilers */
-int bravalue = 0;
-int length;
-int greedy_default, greedy_non_default;
-int firstbyte, reqbyte;
-int zeroreqbyte, zerofirstbyte;
-int req_caseopt, reqvary, tempreqvary;
-int condcount = 0;
-int options = *optionsptr;
-register int c;
-register uschar *code = *codeptr;
-uschar *tempcode;
-BOOL inescq = FALSE;
-BOOL groupsetfirstbyte = FALSE;
-const uschar *ptr = *ptrptr;
-const uschar *tempptr;
-uschar *previous = NULL;
-uschar class[32];
-
-#ifdef SUPPORT_UTF8
-BOOL class_utf8;
-BOOL utf8 = (options & PCRE_UTF8) != 0;
-uschar *class_utf8data;
-uschar utf8_char[6];
-#else
-BOOL utf8 = FALSE;
-#endif
-
-/* Set up the default and non-default settings for greediness */
-
-greedy_default = ((options & PCRE_UNGREEDY) != 0);
-greedy_non_default = greedy_default ^ 1;
-
-/* Initialize no first char, no required char. REQ_UNSET means "no char
-matching encountered yet". It gets changed to REQ_NONE if we hit something that
-matches a non-fixed char first char; reqbyte just remains unset if we never
-find one.
-
-When we hit a repeat whose minimum is zero, we may have to adjust these values
-to take the zero repeat into account. This is implemented by setting them to
-zerofirstbyte and zeroreqbyte when such a repeat is encountered. The individual
-item types that can be repeated set these backoff variables appropriately. */
-
-firstbyte = reqbyte = zerofirstbyte = zeroreqbyte = REQ_UNSET;
-
-/* The variable req_caseopt contains either the REQ_CASELESS value or zero,
-according to the current setting of the caseless flag. REQ_CASELESS is a bit
-value > 255. It is added into the firstbyte or reqbyte variables to record the
-case status of the value. */
-
-req_caseopt = ((options & PCRE_CASELESS) != 0)? REQ_CASELESS : 0;
-
-/* Switch on next character until the end of the branch */
-
-for (;; ptr++)
- {
- BOOL negate_class;
- BOOL possessive_quantifier;
- int class_charcount;
- int class_lastchar;
- int newoptions;
- int recno;
- int skipbytes;
- int subreqbyte;
- int subfirstbyte;
-
- c = *ptr;
- if (inescq && c != 0) goto NORMAL_CHAR;
-
- if ((options & PCRE_EXTENDED) != 0)
- {
- if ((cd->ctypes[c] & ctype_space) != 0) continue;
- if (c == '#')
- {
- /* The space before the ; is to avoid a warning on a silly compiler
- on the Macintosh. */
- while ((c = *(++ptr)) != 0 && c != NEWLINE) ;
- if (c != 0) continue; /* Else fall through to handle end of string */
- }
- }
-
- switch(c)
- {
- /* The branch terminates at end of string, |, or ). */
-
- case 0:
- case '|':
- case ')':
- *firstbyteptr = firstbyte;
- *reqbyteptr = reqbyte;
- *codeptr = code;
- *ptrptr = ptr;
- return TRUE;
-
- /* Handle single-character metacharacters. In multiline mode, ^ disables
- the setting of any following char as a first character. */
-
- case '^':
- if ((options & PCRE_MULTILINE) != 0)
- {
- if (firstbyte == REQ_UNSET) firstbyte = REQ_NONE;
- }
- previous = NULL;
- *code++ = OP_CIRC;
- break;
-
- case '$':
- previous = NULL;
- *code++ = OP_DOLL;
- break;
-
- /* There can never be a first char if '.' is first, whatever happens about
- repeats. The value of reqbyte doesn't change either. */
-
- case '.':
- if (firstbyte == REQ_UNSET) firstbyte = REQ_NONE;
- zerofirstbyte = firstbyte;
- zeroreqbyte = reqbyte;
- previous = code;
- *code++ = OP_ANY;
- break;
-
- /* Character classes. If the included characters are all < 255 in value, we
- build a 32-byte bitmap of the permitted characters, except in the special
- case where there is only one such character. For negated classes, we build
- the map as usual, then invert it at the end. However, we use a different
- opcode so that data characters > 255 can be handled correctly.
-
- If the class contains characters outside the 0-255 range, a different
- 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.
- */
-
- case '[':
- previous = code;
-
- /* PCRE supports POSIX class stuff inside a class. Perl gives an error if
- they are encountered at the top level, so we'll do that too. */
-
- if ((ptr[1] == ':' || ptr[1] == '.' || ptr[1] == '=') &&
- check_posix_syntax(ptr, &tempptr, cd))
- {
- *errorptr = (ptr[1] == ':')? ERR13 : ERR31;
- goto FAILED;
- }
-
- /* If the first character is '^', set the negation flag and skip it. */
-
- if ((c = *(++ptr)) == '^')
- {
- negate_class = TRUE;
- c = *(++ptr);
- }
- else
- {
- negate_class = FALSE;
- }
-
- /* Keep a count of chars with values < 256 so that we can optimize the case
- of just a single character (as long as it's < 256). For higher valued UTF-8
- characters, we don't yet do any optimization. */
-
- class_charcount = 0;
- class_lastchar = -1;
-
-#ifdef SUPPORT_UTF8
- class_utf8 = FALSE; /* No chars >= 256 */
- class_utf8data = code + LINK_SIZE + 34; /* For UTF-8 items */
-#endif
-
- /* Initialize the 32-char bit map to all zeros. We have to build the
- map in a temporary bit of store, in case the class contains only 1
- character (< 256), because in that case the compiled code doesn't use the
- bit map. */
-
- memset(class, 0, 32 * sizeof(uschar));
-
- /* Process characters until ] is reached. By writing this as a "do" it
- means that an initial ] is taken as a data character. The first pass
- through the regex checked the overall syntax, so we don't need to be very
- strict here. At the start of the loop, c contains the first byte of the
- character. */
-
- do
- {
-#ifdef SUPPORT_UTF8
- if (utf8 && c > 127)
- { /* Braces are required because the */
- GETCHARLEN(c, ptr, ptr); /* macro generates multiple statements */
- }
-#endif
-
- /* Inside \Q...\E everything is literal except \E */
-
- if (inescq)
- {
- if (c == '\\' && ptr[1] == 'E')
- {
- inescq = FALSE;
- ptr++;
- continue;
- }
- else goto LONE_SINGLE_CHARACTER;
- }
-
- /* Handle POSIX class names. Perl allows a negation extension of the
- form [:^name:]. A square bracket that doesn't match the syntax is
- treated as a literal. We also recognize the POSIX constructions
- [.ch.] and [=ch=] ("collating elements") and fault them, as Perl
- 5.6 and 5.8 do. */
-
- if (c == '[' &&
- (ptr[1] == ':' || ptr[1] == '.' || ptr[1] == '=') &&
- check_posix_syntax(ptr, &tempptr, cd))
- {
- BOOL local_negate = FALSE;
- int posix_class, i;
- register const uschar *cbits = cd->cbits;
-
- if (ptr[1] != ':')
- {
- *errorptr = ERR31;
- goto FAILED;
- }
-
- ptr += 2;
- if (*ptr == '^')
- {
- local_negate = TRUE;
- ptr++;
- }
-
- posix_class = check_posix_name(ptr, tempptr - ptr);
- if (posix_class < 0)
- {
- *errorptr = ERR30;
- goto FAILED;
- }
-
- /* If matching is caseless, upper and lower are converted to
- alpha. This relies on the fact that the class table starts with
- alpha, lower, upper as the first 3 entries. */
-
- if ((options & PCRE_CASELESS) != 0 && posix_class <= 2)
- posix_class = 0;
-
- /* Or into the map we are building up to 3 of the static class
- tables, or their negations. The [:blank:] class sets up the same
- chars as the [:space:] class (all white space). We remove the vertical
- white space chars afterwards. */
-
- posix_class *= 3;
- for (i = 0; i < 3; i++)
- {
- BOOL blankclass = strncmp((char *)ptr, "blank", 5) == 0;
- int taboffset = posix_class_maps[posix_class + i];
- if (taboffset < 0) break;
- if (local_negate)
- {
- for (c = 0; c < 32; c++) class[c] |= ~cbits[c+taboffset];
- if (blankclass) class[1] |= 0x3c;
- }
- else
- {
- for (c = 0; c < 32; c++) class[c] |= cbits[c+taboffset];
- if (blankclass) class[1] &= ~0x3c;
- }
- }
-
- ptr = tempptr + 1;
- class_charcount = 10; /* Set > 1; assumes more than 1 per class */
- continue; /* End of POSIX syntax handling */
- }
-
- /* Backslash may introduce a single character, or it may introduce one
- of the specials, which just set a flag. Escaped items are checked for
- validity in the pre-compiling pass. The sequence \b is a special case.
- Inside a class (and only there) it is treated as backspace. Elsewhere
- it marks a word boundary. Other escapes have preset maps ready to
- or into the one we are building. We assume they have more than one
- character in them, so set class_charcount bigger than one. */
-
- if (c == '\\')
- {
- c = check_escape(&ptr, errorptr, *brackets, options, TRUE);
- if (-c == ESC_b) c = '\b'; /* \b is backslash in a class */
-
- if (-c == ESC_Q) /* Handle start of quoted string */
- {
- if (ptr[1] == '\\' && ptr[2] == 'E')
- {
- ptr += 2; /* avoid empty string */
- }
- else inescq = TRUE;
- continue;
- }
-
- else if (c < 0)
- {
- register const uschar *cbits = cd->cbits;
- class_charcount = 10; /* Greater than 1 is what matters */
- switch (-c)
- {
- case ESC_d:
- for (c = 0; c < 32; c++) class[c] |= cbits[c+cbit_digit];
- continue;
-
- case ESC_D:
- for (c = 0; c < 32; c++) class[c] |= ~cbits[c+cbit_digit];
- continue;
-
- case ESC_w:
- for (c = 0; c < 32; c++) class[c] |= cbits[c+cbit_word];
- continue;
-
- case ESC_W:
- for (c = 0; c < 32; c++) class[c] |= ~cbits[c+cbit_word];
- continue;
-
- case ESC_s:
- for (c = 0; c < 32; c++) class[c] |= cbits[c+cbit_space];
- class[1] &= ~0x08; /* Perl 5.004 onwards omits VT from \s */
- continue;
-
- case ESC_S:
- for (c = 0; c < 32; c++) class[c] |= ~cbits[c+cbit_space];
- class[1] |= 0x08; /* Perl 5.004 onwards omits VT from \s */
- continue;
-
- /* Unrecognized escapes are faulted if PCRE is running in its
- strict mode. By default, for compatibility with Perl, they are
- treated as literals. */
-
- default:
- if ((options & PCRE_EXTRA) != 0)
- {
- *errorptr = ERR7;
- goto FAILED;
- }
- c = *ptr; /* The final character */
- }
- }
-
- /* Fall through if we have a single character (c >= 0). This may be
- > 256 in UTF-8 mode. */
-
- } /* End of backslash handling */
-
- /* A single character may be followed by '-' to form a range. However,
- Perl does not permit ']' to be the end of the range. A '-' character
- here is treated as a literal. */
-
- if (ptr[1] == '-' && ptr[2] != ']')
- {
- int d;
- ptr += 2;
-
-#ifdef SUPPORT_UTF8
- if (utf8)
- { /* Braces are required because the */
- GETCHARLEN(d, ptr, ptr); /* macro generates multiple statements */
- }
- else
-#endif
- d = *ptr;
-
- /* The second part of a range can be a single-character escape, but
- not any of the other escapes. Perl 5.6 treats a hyphen as a literal
- in such circumstances. */
-
- if (d == '\\')
- {
- const uschar *oldptr = ptr;
- d = check_escape(&ptr, errorptr, *brackets, options, TRUE);
-
- /* \b is backslash; any other special means the '-' was literal */
-
- if (d < 0)
- {
- if (d == -ESC_b) d = '\b'; else
- {
- ptr = oldptr - 2;
- goto LONE_SINGLE_CHARACTER; /* A few lines below */
- }
- }
- }
-
- /* Check that the two values are in the correct order */
-
- if (d < c)
- {
- *errorptr = ERR8;
- goto FAILED;
- }
-
- /* If d is greater than 255, we can't just use the bit map, so set up
- for the UTF-8 supporting class type. If we are not caseless, we can
- just set up a single range. If we are caseless, the characters < 256
- are handled with a bitmap, in order to get the case-insensitive
- handling. */
-
-#ifdef SUPPORT_UTF8
- if (d > 255)
- {
- class_utf8 = TRUE;
- *class_utf8data++ = XCL_RANGE;
- if ((options & PCRE_CASELESS) == 0)
- {
- class_utf8data += ord2utf8(c, class_utf8data);
- class_utf8data += ord2utf8(d, class_utf8data);
- continue; /* Go get the next char in the class */
- }
- class_utf8data += ord2utf8(256, class_utf8data);
- class_utf8data += ord2utf8(d, class_utf8data);
- d = 255;
- /* Fall through */
- }
-#endif
- /* We use the bit map if the range is entirely < 255, or if part of it
- is < 255 and matching is caseless. */
-
- for (; c <= d; c++)
- {
- class[c/8] |= (1 << (c&7));
- if ((options & PCRE_CASELESS) != 0)
- {
- int uc = cd->fcc[c]; /* flip case */
- class[uc/8] |= (1 << (uc&7));
- }
- class_charcount++; /* in case a one-char range */
- class_lastchar = c;
- }
-
- continue; /* Go get the next char in the class */
- }
-
- /* Handle a lone single character - we can get here for a normal
- non-escape char, or after \ that introduces a single character. */
-
- LONE_SINGLE_CHARACTER:
-
- /* Handle a multibyte character */
-
-#ifdef SUPPORT_UTF8
- if (utf8 && c > 255)
- {
- class_utf8 = TRUE;
- *class_utf8data++ = XCL_SINGLE;
- class_utf8data += ord2utf8(c, class_utf8data);
- }
- else
-#endif
- /* Handle a single-byte character */
- {
- class [c/8] |= (1 << (c&7));
- if ((options & PCRE_CASELESS) != 0)
- {
- c = cd->fcc[c]; /* flip case */
- class[c/8] |= (1 << (c&7));
- }
- class_charcount++;
- class_lastchar = c;
- }
- }
-
- /* Loop until ']' reached; the check for end of string happens inside the
- loop. This "while" is the end of the "do" above. */
-
- while ((c = *(++ptr)) != ']' || inescq);
-
- /* If class_charcount is 1, we saw precisely one character with a value <
- 256. In UTF-8 mode, we can optimize if there were no characters >= 256 and
- the one character is < 128. In non-UTF-8 mode we can always optimize.
-
- The optimization throws away the bit map. We turn the item into a
- 1-character OP_CHARS if it's positive, or OP_NOT if it's negative. Note
- that OP_NOT does not support multibyte characters. In the positive case, it
- can cause firstbyte to be set. Otherwise, there can be no first char if
- this item is first, whatever repeat count may follow. In the case of
- reqbyte, save the previous value for reinstating. */
-
-#ifdef SUPPORT_UTF8
- if (class_charcount == 1 &&
- (!utf8 ||
- (!class_utf8 && class_lastchar < 128)))
-#else
- if (class_charcount == 1)
-#endif
- {
- zeroreqbyte = reqbyte;
- if (negate_class)
- {
- if (firstbyte == REQ_UNSET) firstbyte = REQ_NONE;
- zerofirstbyte = firstbyte;
- *code++ = OP_NOT;
- }
- else
- {
- if (firstbyte == REQ_UNSET)
- {
- zerofirstbyte = REQ_NONE;
- firstbyte = class_lastchar | req_caseopt;
- }
- else
- {
- zerofirstbyte = firstbyte;
- reqbyte = class_lastchar | req_caseopt | cd->req_varyopt;
- }
- *code++ = OP_CHARS;
- *code++ = 1;
- }
- *code++ = class_lastchar;
- break; /* End of class handling */
- } /* End of 1-byte optimization */
-
- /* Otherwise, if this is the first thing in the branch, there can be no
- first char setting, whatever the repeat count. Any reqbyte setting must
- remain unchanged after any kind of repeat. */
-
- if (firstbyte == REQ_UNSET) firstbyte = REQ_NONE;
- zerofirstbyte = firstbyte;
- zeroreqbyte = reqbyte;
-
- /* If there are characters with values > 255, we have to compile an
- extended class, with its own opcode. If there are no characters < 256,
- we can omit the bitmap. */
-
-#ifdef SUPPORT_UTF8
- if (class_utf8)
- {
- *class_utf8data++ = XCL_END; /* Marks the end of extra data */
- *code++ = OP_XCLASS;
- code += LINK_SIZE;
- *code = negate_class? XCL_NOT : 0;
-
- /* If the map is required, install it, and move on to the end of
- the extra data */
-
- if (class_charcount > 0)
- {
- *code++ |= XCL_MAP;
- memcpy(code, class, 32);
- code = class_utf8data;
- }
-
- /* If the map is not required, slide down the extra data. */
-
- else
- {
- int len = class_utf8data - (code + 33);
- memmove(code + 1, code + 33, len);
- code += len + 1;
- }
-
- /* Now fill in the complete length of the item */
-
- PUT(previous, 1, code - previous);
- break; /* End of class handling */
- }
-#endif
-
- /* If there are no characters > 255, negate the 32-byte map if necessary,
- and copy it into the code vector. If this is the first thing in the branch,
- there can be no first char setting, whatever the repeat count. Any reqbyte
- setting must remain unchanged after any kind of repeat. */
-
- if (negate_class)
- {
- *code++ = OP_NCLASS;
- for (c = 0; c < 32; c++) code[c] = ~class[c];
- }
- else
- {
- *code++ = OP_CLASS;
- memcpy(code, class, 32);
- }
- code += 32;
- break;
-
- /* Various kinds of repeat */
-
- case '{':
- if (!is_counted_repeat(ptr+1)) goto NORMAL_CHAR;
- ptr = read_repeat_counts(ptr+1, &repeat_min, &repeat_max, errorptr);
- if (*errorptr != NULL) goto FAILED;
- goto REPEAT;
-
- case '*':
- repeat_min = 0;
- repeat_max = -1;
- goto REPEAT;
-
- case '+':
- repeat_min = 1;
- repeat_max = -1;
- goto REPEAT;
-
- case '?':
- repeat_min = 0;
- repeat_max = 1;
-
- REPEAT:
- if (previous == NULL)
- {
- *errorptr = ERR9;
- goto FAILED;
- }
-
- if (repeat_min == 0)
- {
- firstbyte = zerofirstbyte; /* Adjust for zero repeat */
- reqbyte = zeroreqbyte; /* Ditto */
- }
-
- /* Remember whether this is a variable length repeat */
-
- reqvary = (repeat_min == repeat_max)? 0 : REQ_VARY;
-
- op_type = 0; /* Default single-char op codes */
- possessive_quantifier = FALSE; /* Default not possessive quantifier */
-
- /* Save start of previous item, in case we have to move it up to make space
- for an inserted OP_ONCE for the additional '+' extension. */
-
- tempcode = previous;
-
- /* If the next character is '+', we have a possessive quantifier. This
- implies greediness, whatever the setting of the PCRE_UNGREEDY option.
- If the next character is '?' this is a minimizing repeat, by default,
- but if PCRE_UNGREEDY is set, it works the other way round. We change the
- repeat type to the non-default. */
-
- if (ptr[1] == '+')
- {
- repeat_type = 0; /* Force greedy */
- possessive_quantifier = TRUE;
- ptr++;
- }
- else if (ptr[1] == '?')
- {
- repeat_type = greedy_non_default;
- ptr++;
- }
- else repeat_type = greedy_default;
-
- /* If previous was a recursion, we need to wrap it inside brackets so that
- it can be replicated if necessary. */
-
- if (*previous == OP_RECURSE)
- {
- memmove(previous + 1 + LINK_SIZE, previous, 1 + LINK_SIZE);
- code += 1 + LINK_SIZE;
- *previous = OP_BRA;
- PUT(previous, 1, code - previous);
- *code = OP_KET;
- PUT(code, 1, code - previous);
- code += 1 + LINK_SIZE;
- }
-
- /* If previous was a string of characters, chop off the last one and use it
- as the subject of the repeat. If there was only one character, we can
- abolish the previous item altogether. If a one-char item has a minumum of
- more than one, ensure that it is set in reqbyte - it might not be if a
- sequence such as x{3} is the first thing in a branch because the x will
- have gone into firstbyte instead. */
-
- if (*previous == OP_CHARS)
- {
- /* Deal with UTF-8 characters that take up more than one byte. It's
- easier to write this out separately than try to macrify it. Use c to
- hold the length of the character in bytes, plus 0x80 to flag that it's a
- length rather than a small character. */
-
-#ifdef SUPPORT_UTF8
- if (utf8 && (code[-1] & 0x80) != 0)
- {
- uschar *lastchar = code - 1;
- while((*lastchar & 0xc0) == 0x80) lastchar--;
- c = code - lastchar; /* Length of UTF-8 character */
- memcpy(utf8_char, lastchar, c); /* Save the char */
- if (lastchar == previous + 2) /* There was only one character */
- {
- code = previous; /* Abolish the previous item */
- }
- else
- {
- previous[1] -= c; /* Adjust length of previous */
- code = lastchar; /* Lost char off the end */
- tempcode = code; /* Adjust position to be moved for '+' */
- }
- c |= 0x80; /* Flag c as a length */
- }
- else
-#endif
-
- /* Handle the case of a single byte - either with no UTF8 support, or
- with UTF-8 disabled, or for a UTF-8 character < 128. */
-
- {
- c = *(--code);
- if (code == previous + 2) /* There was only one character */
- {
- code = previous; /* Abolish the previous item */
- if (repeat_min > 1) reqbyte = c | req_caseopt | cd->req_varyopt;
- }
- else
- {
- previous[1]--; /* adjust length */
- tempcode = code; /* Adjust position to be moved for '+' */
- }
- }
-
- goto OUTPUT_SINGLE_REPEAT; /* Code shared with single character types */
- }
-
- /* If previous was a single negated character ([^a] or similar), we use
- one of the special opcodes, replacing it. The code is shared with single-
- character repeats by setting opt_type to add a suitable offset into
- repeat_type. OP_NOT is currently used only for single-byte chars. */
-
- else if (*previous == OP_NOT)
- {
- op_type = OP_NOTSTAR - OP_STAR; /* Use "not" opcodes */
- c = previous[1];
- code = previous;
- goto OUTPUT_SINGLE_REPEAT;
- }
-
- /* If previous was a character type match (\d or similar), abolish it and
- create a suitable repeat item. The code is shared with single-character
- repeats by setting op_type to add a suitable offset into repeat_type. */
-
- else if (*previous < OP_EODN)
- {
- op_type = OP_TYPESTAR - OP_STAR; /* Use type opcodes */
- c = *previous;
- code = previous;
-
- OUTPUT_SINGLE_REPEAT:
-
- /* If the maximum is zero then the minimum must also be zero; Perl allows
- this case, so we do too - by simply omitting the item altogether. */
-
- if (repeat_max == 0) goto END_REPEAT;
-
- /* Combine the op_type with the repeat_type */
-
- repeat_type += op_type;
-
- /* A minimum of zero is handled either as the special case * or ?, or as
- an UPTO, with the maximum given. */
-
- if (repeat_min == 0)
- {
- if (repeat_max == -1) *code++ = OP_STAR + repeat_type;
- else if (repeat_max == 1) *code++ = OP_QUERY + repeat_type;
- else
- {
- *code++ = OP_UPTO + repeat_type;
- PUT2INC(code, 0, repeat_max);
- }
- }
-
- /* The case {1,} is handled as the special case + */
-
- else if (repeat_min == 1 && repeat_max == -1)
- *code++ = OP_PLUS + repeat_type;
-
- /* The case {n,n} is just an EXACT, while the general case {n,m} is
- handled as an EXACT followed by an UPTO. An EXACT of 1 is optimized. */
-
- else
- {
- if (repeat_min != 1)
- {
- *code++ = OP_EXACT + op_type; /* NB EXACT doesn't have repeat_type */
- PUT2INC(code, 0, repeat_min);
- }
-
- /* If the mininum is 1 and the previous item was a character string,
- we either have to put back the item that got cancelled if the string
- length was 1, or add the character back onto the end of a longer
- string. For a character type nothing need be done; it will just get
- put back naturally. Note that the final character is always going to
- get added below, so we leave code ready for its insertion. */
-
- else if (*previous == OP_CHARS)
- {
- if (code == previous) code += 2; else
-
- /* In UTF-8 mode, a multibyte char has its length in c, with the 0x80
- bit set as a flag. The length will always be between 2 and 6. */
-
-#ifdef SUPPORT_UTF8
- if (utf8 && c >= 128) previous[1] += c & 7; else
-#endif
- previous[1]++;
- }
-
- /* For a single negated character we also have to put back the
- item that got cancelled. At present this applies only to single byte
- characters in any mode. */
-
- else if (*previous == OP_NOT) code++;
-
- /* If the maximum is unlimited, insert an OP_STAR. Before doing so,
- we have to insert the character for the previous code. In UTF-8 mode,
- long characters have their length in c, with the 0x80 bit as a flag. */
-
- if (repeat_max < 0)
- {
-#ifdef SUPPORT_UTF8
- if (utf8 && c >= 128)
- {
- memcpy(code, utf8_char, c & 7);
- code += c & 7;
- }
- else
-#endif
- *code++ = c;
- *code++ = OP_STAR + repeat_type;
- }
-
- /* Else insert an UPTO if the max is greater than the min, again
- preceded by the character, for the previously inserted code. */
-
- else if (repeat_max != repeat_min)
- {
-#ifdef SUPPORT_UTF8
- if (utf8 && c >= 128)
- {
- memcpy(code, utf8_char, c & 7);
- code += c & 7;
- }
- else
-#endif
- *code++ = c;
- repeat_max -= repeat_min;
- *code++ = OP_UPTO + repeat_type;
- PUT2INC(code, 0, repeat_max);
- }
- }
-
- /* The character or character type itself comes last in all cases. */
-
-#ifdef SUPPORT_UTF8
- if (utf8 && c >= 128)
- {
- memcpy(code, utf8_char, c & 7);
- code += c & 7;
- }
- else
-#endif
-
- *code++ = c;
- }
-
- /* If previous was a character class or a back reference, we put the repeat
- stuff after it, but just skip the item if the repeat was {0,0}. */
-
- else if (*previous == OP_CLASS ||
- *previous == OP_NCLASS ||
-#ifdef SUPPORT_UTF8
- *previous == OP_XCLASS ||
-#endif
- *previous == OP_REF)
- {
- if (repeat_max == 0)
- {
- code = previous;
- goto END_REPEAT;
- }
- if (repeat_min == 0 && repeat_max == -1)
- *code++ = OP_CRSTAR + repeat_type;
- else if (repeat_min == 1 && repeat_max == -1)
- *code++ = OP_CRPLUS + repeat_type;
- else if (repeat_min == 0 && repeat_max == 1)
- *code++ = OP_CRQUERY + repeat_type;
- else
- {
- *code++ = OP_CRRANGE + repeat_type;
- PUT2INC(code, 0, repeat_min);
- if (repeat_max == -1) repeat_max = 0; /* 2-byte encoding for max */
- PUT2INC(code, 0, repeat_max);
- }
- }
-
- /* If previous was a bracket group, we may have to replicate it in certain
- cases. */
-
- else if (*previous >= OP_BRA || *previous == OP_ONCE ||
- *previous == OP_COND)
- {
- register int i;
- int ketoffset = 0;
- int len = code - previous;
- uschar *bralink = NULL;
-
- /* If the maximum repeat count is unlimited, find the end of the bracket
- by scanning through from the start, and compute the offset back to it
- from the current code pointer. There may be an OP_OPT setting following
- the final KET, so we can't find the end just by going back from the code
- pointer. */
-
- if (repeat_max == -1)
- {
- register uschar *ket = previous;
- do ket += GET(ket, 1); while (*ket != OP_KET);
- ketoffset = code - ket;
- }
-
- /* The case of a zero minimum is special because of the need to stick
- OP_BRAZERO in front of it, and because the group appears once in the
- data, whereas in other cases it appears the minimum number of times. For
- this reason, it is simplest to treat this case separately, as otherwise
- the code gets far too messy. There are several special subcases when the
- minimum is zero. */
-
- 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 group, because the offset is from the start of the whole
- regex. Temporarily terminate the pattern while doing this. */
-
- if (repeat_max <= 1)
- {
- *code = OP_END;
- adjust_recurse(previous, 1, utf8, cd);
- memmove(previous+1, previous, len);
- code++;
- *previous++ = OP_BRAZERO + repeat_type;
- }
-
- /* If the maximum is greater than 1 and limited, we have to replicate
- in a nested fashion, sticking OP_BRAZERO before each set of brackets.
- The first one has to be handled carefully because it's the original
- copy, which has to be moved up. The remainder can be handled by code
- that is common with the non-zero minimum case below. We have to
- adjust the value or repeat_max, since one less copy is required. Once
- again, we may have to adjust any OP_RECURSE calls inside the group. */
-
- else
- {
- int offset;
- *code = OP_END;
- adjust_recurse(previous, 2 + LINK_SIZE, utf8, cd);
- memmove(previous + 2 + LINK_SIZE, previous, len);
- code += 2 + LINK_SIZE;
- *previous++ = OP_BRAZERO + repeat_type;
- *previous++ = OP_BRA;
-
- /* We chain together the bracket offset fields that have to be
- filled in later when the ends of the brackets are reached. */
-
- offset = (bralink == NULL)? 0 : previous - bralink;
- bralink = previous;
- PUTINC(previous, 0, offset);
- }
-
- repeat_max--;
- }
-
- /* If the minimum is greater than zero, replicate the group as many
- times as necessary, and adjust the maximum to the number of subsequent
- copies that we need. If we set a first char from the group, and didn't
- set a required char, copy the latter from the former. */
-
- else
- {
- if (repeat_min > 1)
- {
- if (groupsetfirstbyte && reqbyte < 0) reqbyte = firstbyte;
- for (i = 1; i < repeat_min; i++)
- {
- memcpy(code, previous, len);
- code += len;
- }
- }
- if (repeat_max > 0) repeat_max -= repeat_min;
- }
-
- /* This code is common to both the zero and non-zero minimum cases. If
- the maximum is limited, it replicates the group in a nested fashion,
- remembering the bracket starts on a stack. In the case of a zero minimum,
- the first one was set up above. In all cases the repeat_max now specifies
- the number of additional copies needed. */
-
- if (repeat_max >= 0)
- {
- for (i = repeat_max - 1; i >= 0; i--)
- {
- *code++ = OP_BRAZERO + repeat_type;
-
- /* All but the final copy start a new nesting, maintaining the
- chain of brackets outstanding. */
-
- if (i != 0)
- {
- int offset;
- *code++ = OP_BRA;
- offset = (bralink == NULL)? 0 : code - bralink;
- bralink = code;
- PUTINC(code, 0, offset);
- }
-
- memcpy(code, previous, len);
- code += len;
- }
-
- /* Now chain through the pending brackets, and fill in their length
- fields (which are holding the chain links pro tem). */
-
- while (bralink != NULL)
- {
- int oldlinkoffset;
- int offset = code - bralink + 1;
- uschar *bra = code - offset;
- oldlinkoffset = GET(bra, 1);
- bralink = (oldlinkoffset == 0)? NULL : bralink - oldlinkoffset;
- *code++ = OP_KET;
- PUTINC(code, 0, offset);
- PUT(bra, 1, offset);
- }
- }
-
- /* If the maximum is unlimited, set a repeater in the final copy. We
- can't just offset backwards from the current code point, because we
- don't know if there's been an options resetting after the ket. The
- correct offset was computed above. */
-
- else code[-ketoffset] = OP_KETRMAX + repeat_type;
- }
-
- /* Else there's some kind of shambles */
-
- else
- {
- *errorptr = ERR11;
- goto FAILED;
- }
-
- /* If the character following a repeat is '+', we wrap the entire repeated
- item inside OP_ONCE brackets. This is just syntactic sugar, taken from
- Sun's Java package. The repeated item starts at tempcode, not at previous,
- which might be the first part of a string whose (former) last char we
- repeated. However, we don't support '+' after a greediness '?'. */
-
- if (possessive_quantifier)
- {
- int len = code - tempcode;
- memmove(tempcode + 1+LINK_SIZE, tempcode, len);
- code += 1 + LINK_SIZE;
- len += 1 + LINK_SIZE;
- tempcode[0] = OP_ONCE;
- *code++ = OP_KET;
- PUTINC(code, 0, len);
- PUT(tempcode, 1, len);
- }
-
- /* In all case we no longer have a previous item. We also set the
- "follows varying string" flag for subsequently encountered reqbytes if
- it isn't already set and we have just passed a varying length item. */
-
- END_REPEAT:
- previous = NULL;
- cd->req_varyopt |= reqvary;
- break;
-
-
- /* Start of nested bracket sub-expression, or comment or lookahead or
- lookbehind or option setting or condition. First deal with special things
- that can come after a bracket; all are introduced by ?, and the appearance
- of any of them means that this is not a referencing group. They were
- checked for validity in the first pass over the string, so we don't have to
- check for syntax errors here. */
-
- case '(':
- newoptions = options;
- skipbytes = 0;
-
- if (*(++ptr) == '?')
- {
- int set, unset;
- int *optset;
-
- switch (*(++ptr))
- {
- case '#': /* Comment; skip to ket */
- ptr++;
- while (*ptr != ')') ptr++;
- continue;
-
- case ':': /* Non-extracting bracket */
- bravalue = OP_BRA;
- ptr++;
- break;
-
- case '(':
- bravalue = OP_COND; /* Conditional group */
-
- /* Condition to test for recursion */
-
- if (ptr[1] == 'R')
- {
- code[1+LINK_SIZE] = OP_CREF;
- PUT2(code, 2+LINK_SIZE, CREF_RECURSE);
- skipbytes = 3;
- ptr += 3;
- }
-
- /* Condition to test for a numbered subpattern match. We know that
- if a digit follows ( then there will just be digits until ) because
- the syntax was checked in the first pass. */
-
- else if ((digitab[ptr[1]] && ctype_digit) != 0)
- {
- int condref; /* Don't amalgamate; some compilers */
- condref = *(++ptr) - '0'; /* grumble at autoincrement in declaration */
- while (*(++ptr) != ')') condref = condref*10 + *ptr - '0';
- if (condref == 0)
- {
- *errorptr = ERR35;
- goto FAILED;
- }
- ptr++;
- code[1+LINK_SIZE] = OP_CREF;
- PUT2(code, 2+LINK_SIZE, condref);
- skipbytes = 3;
- }
- /* For conditions that are assertions, we just fall through, having
- set bravalue above. */
- break;
-
- case '=': /* Positive lookahead */
- bravalue = OP_ASSERT;
- ptr++;
- break;
-
- case '!': /* Negative lookahead */
- bravalue = OP_ASSERT_NOT;
- ptr++;
- break;
-
- case '<': /* Lookbehinds */
- switch (*(++ptr))
- {
- case '=': /* Positive lookbehind */
- bravalue = OP_ASSERTBACK;
- ptr++;
- break;
-
- case '!': /* Negative lookbehind */
- bravalue = OP_ASSERTBACK_NOT;
- ptr++;
- break;
- }
- break;
-
- case '>': /* One-time brackets */
- bravalue = OP_ONCE;
- ptr++;
- break;
-
- case 'C': /* Callout - may be followed by digits */
- *code++ = OP_CALLOUT;
- {
- int n = 0;
- while ((digitab[*(++ptr)] & ctype_digit) != 0)
- n = n * 10 + *ptr - '0';
- if (n > 255)
- {
- *errorptr = ERR38;
- goto FAILED;
- }
- *code++ = n;
- }
- previous = NULL;
- continue;
-
- case 'P': /* Named subpattern handling */
- if (*(++ptr) == '<') /* Definition */
- {
- int i, namelen;
- uschar *slot = cd->name_table;
- const uschar *name; /* Don't amalgamate; some compilers */
- name = ++ptr; /* grumble at autoincrement in declaration */
-
- while (*ptr++ != '>');
- namelen = ptr - name - 1;
-
- for (i = 0; i < cd->names_found; i++)
- {
- int crc = memcmp(name, slot+2, namelen);
- if (crc == 0)
- {
- if (slot[2+namelen] == 0)
- {
- *errorptr = ERR43;
- goto FAILED;
- }
- crc = -1; /* Current name is substring */
- }
- if (crc < 0)
- {
- memmove(slot + cd->name_entry_size, slot,
- (cd->names_found - i) * cd->name_entry_size);
- break;
- }
- slot += cd->name_entry_size;
- }
-
- PUT2(slot, 0, *brackets + 1);
- memcpy(slot + 2, name, namelen);
- slot[2+namelen] = 0;
- cd->names_found++;
- goto NUMBERED_GROUP;
- }
-
- if (*ptr == '=' || *ptr == '>') /* Reference or recursion */
- {
- int i, namelen;
- int type = *ptr++;
- const uschar *name = ptr;
- uschar *slot = cd->name_table;
-
- while (*ptr != ')') ptr++;
- namelen = ptr - name;
-
- for (i = 0; i < cd->names_found; i++)
- {
- if (strncmp((char *)name, (char *)slot+2, namelen) == 0) break;
- slot += cd->name_entry_size;
- }
- if (i >= cd->names_found)
- {
- *errorptr = ERR15;
- goto FAILED;
- }
-
- recno = GET2(slot, 0);
-
- if (type == '>') goto HANDLE_RECURSION; /* A few lines below */
-
- /* Back reference */
-
- previous = code;
- *code++ = OP_REF;
- PUT2INC(code, 0, recno);
- cd->backref_map |= (recno < 32)? (1 << recno) : 1;
- if (recno > cd->top_backref) cd->top_backref = recno;
- continue;
- }
-
- /* Should never happen */
- break;
-
- case 'R': /* Pattern recursion */
- ptr++; /* Same as (?0) */
- /* Fall through */
-
- /* Recursion or "subroutine" call */
-
- case '0': case '1': case '2': case '3': case '4':
- case '5': case '6': case '7': case '8': case '9':
- {
- const uschar *called;
- recno = 0;
- while((digitab[*ptr] & ctype_digit) != 0)
- recno = recno * 10 + *ptr++ - '0';
-
- /* Come here from code above that handles a named recursion */
-
- HANDLE_RECURSION:
-
- previous = code;
-
- /* Find the bracket that is being referenced. Temporarily end the
- regex in case it doesn't exist. */
-
- *code = OP_END;
- called = (recno == 0)?
- cd->start_code : find_bracket(cd->start_code, utf8, recno);
-
- if (called == NULL)
- {
- *errorptr = ERR15;
- goto FAILED;
- }
-
- /* If the subpattern is still open, this is a recursive call. We
- check to see if this is a left recursion that could loop for ever,
- and diagnose that case. */
-
- if (GET(called, 1) == 0 && could_be_empty(called, code, bcptr, utf8))
- {
- *errorptr = ERR40;
- goto FAILED;
- }
-
- /* Insert the recursion/subroutine item */
-
- *code = OP_RECURSE;
- PUT(code, 1, called - cd->start_code);
- code += 1 + LINK_SIZE;
- }
- continue;
-
- /* Character after (? not specially recognized */
-
- default: /* Option setting */
- set = unset = 0;
- optset = &set;
-
- while (*ptr != ')' && *ptr != ':')
- {
- switch (*ptr++)
- {
- case '-': optset = &unset; break;
-
- case 'i': *optset |= PCRE_CASELESS; break;
- case 'm': *optset |= PCRE_MULTILINE; break;
- case 's': *optset |= PCRE_DOTALL; break;
- case 'x': *optset |= PCRE_EXTENDED; break;
- case 'U': *optset |= PCRE_UNGREEDY; break;
- case 'X': *optset |= PCRE_EXTRA; break;
- }
- }
-
- /* Set up the changed option bits, but don't change anything yet. */
-
- newoptions = (options | set) & (~unset);
-
- /* If the options ended with ')' this is not the start of a nested
- group with option changes, so the options change at this level. 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.
-
- Note that if this item is right at the start of the pattern, the
- options will have been abstracted and made global, so there will be no
- change to compile. */
-
- if (*ptr == ')')
- {
- if ((options & PCRE_IMS) != (newoptions & PCRE_IMS))
- {
- *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;
-
- previous = NULL; /* This item can't be repeated */
- continue; /* It is complete */
- }
-
- /* If the options ended with ':' we are heading into a nested group
- with possible change of options. Such groups are non-capturing and are
- not assertions of any kind. All we need to do is skip over the ':';
- the newoptions value is handled below. */
-
- bravalue = OP_BRA;
- ptr++;
- }
- }
-
- /* If PCRE_NO_AUTO_CAPTURE is set, all unadorned brackets become
- non-capturing and behave like (?:...) brackets */
-
- else if ((options & PCRE_NO_AUTO_CAPTURE) != 0)
- {
- bravalue = OP_BRA;
- }
-
- /* Else we have a referencing group; adjust the opcode. If the bracket
- number is greater than EXTRACT_BASIC_MAX, we set the opcode one higher, and
- arrange for the true number to follow later, in an OP_BRANUMBER item. */
-
- else
- {
- NUMBERED_GROUP:
- if (++(*brackets) > EXTRACT_BASIC_MAX)
- {
- bravalue = OP_BRA + EXTRACT_BASIC_MAX + 1;
- code[1+LINK_SIZE] = OP_BRANUMBER;
- PUT2(code, 2+LINK_SIZE, *brackets);
- skipbytes = 3;
- }
- else bravalue = OP_BRA + *brackets;
- }
-
- /* Process nested bracketed re. Assertions may not be repeated, but other
- kinds can be. We copy code into a non-register variable in order to be able
- to pass its address because some compilers complain otherwise. Pass in a
- new setting for the ims options if they have changed. */
-
- previous = (bravalue >= OP_ONCE)? code : NULL;
- *code = bravalue;
- tempcode = code;
- tempreqvary = cd->req_varyopt; /* Save value before bracket */
-
- if (!compile_regex(
- newoptions, /* The complete new option state */
- options & PCRE_IMS, /* The previous ims option state */
- brackets, /* Extracting bracket count */
- &tempcode, /* Where to put code (updated) */
- &ptr, /* Input pointer (updated) */
- errorptr, /* Where to put an error message */
- (bravalue == OP_ASSERTBACK ||
- bravalue == OP_ASSERTBACK_NOT), /* TRUE if back assert */
- skipbytes, /* Skip over OP_COND/OP_BRANUMBER */
- &subfirstbyte, /* For possible first char */
- &subreqbyte, /* For possible last char */
- bcptr, /* Current branch chain */
- cd)) /* Tables block */
- goto FAILED;
-
- /* At the end of compiling, code is still pointing to the start of the
- group, while tempcode has been updated to point past the end of the group
- and any option resetting that may follow it. The pattern pointer (ptr)
- is on the bracket. */
-
- /* If this is a conditional bracket, check that there are no more than
- two branches in the group. */
-
- else if (bravalue == OP_COND)
- {
- uschar *tc = code;
- condcount = 0;
-
- do {
- condcount++;
- tc += GET(tc,1);
- }
- while (*tc != OP_KET);
-
- if (condcount > 2)
- {
- *errorptr = ERR27;
- goto FAILED;
- }
-
- /* If there is just one branch, we must not make use of its firstbyte or
- reqbyte, because this is equivalent to an empty second branch. */
-
- if (condcount == 1) subfirstbyte = subreqbyte = REQ_NONE;
- }
-
- /* Handle updating of the required and first characters. Update for normal
- brackets of all kinds, and conditions with two branches (see code above).
- If the bracket is followed by a quantifier with zero repeat, we have to
- back off. Hence the definition of zeroreqbyte and zerofirstbyte outside the
- main loop so that they can be accessed for the back off. */
-
- zeroreqbyte = reqbyte;
- zerofirstbyte = firstbyte;
- groupsetfirstbyte = FALSE;
-
- if (bravalue >= OP_BRA || bravalue == OP_ONCE || bravalue == OP_COND)
- {
- /* If we have not yet set a firstbyte in this branch, take it from the
- subpattern, remembering that it was set here so that a repeat of more
- than one can replicate it as reqbyte if necessary. If the subpattern has
- no firstbyte, set "none" for the whole branch. In both cases, a zero
- repeat forces firstbyte to "none". */
-
- if (firstbyte == REQ_UNSET)
- {
- if (subfirstbyte >= 0)
- {
- firstbyte = subfirstbyte;
- groupsetfirstbyte = TRUE;
- }
- else firstbyte = REQ_NONE;
- zerofirstbyte = REQ_NONE;
- }
-
- /* If firstbyte was previously set, convert the subpattern's firstbyte
- into reqbyte if there wasn't one, using the vary flag that was in
- existence beforehand. */
-
- else if (subfirstbyte >= 0 && subreqbyte < 0)
- subreqbyte = subfirstbyte | tempreqvary;
-
- /* If the subpattern set a required byte (or set a first byte that isn't
- really the first byte - see above), set it. */
-
- if (subreqbyte >= 0) reqbyte = subreqbyte;
- }
-
- /* For a forward assertion, we take the reqbyte, if set. This can be
- helpful if the pattern that follows the assertion doesn't set a different
- char. For example, it's useful for /(?=abcde).+/. We can't set firstbyte
- for an assertion, however because it leads to incorrect effect for patterns
- such as /(?=a)a.+/ when the "real" "a" would then become a reqbyte instead
- of a firstbyte. This is overcome by a scan at the end if there's no
- firstbyte, looking for an asserted first char. */
-
- else if (bravalue == OP_ASSERT && subreqbyte >= 0) reqbyte = subreqbyte;
-
- /* Now update the main code pointer to the end of the group. */
-
- code = tempcode;
-
- /* Error if hit end of pattern */
-
- if (*ptr != ')')
- {
- *errorptr = ERR14;
- goto FAILED;
- }
- break;
-
- /* Check \ for being a real metacharacter; if not, fall through and handle
- it as a data character at the start of a string. Escape items are checked
- for validity in the pre-compiling pass. */
-
- case '\\':
- tempptr = ptr;
- c = check_escape(&ptr, errorptr, *brackets, options, FALSE);
-
- /* Handle metacharacters introduced by \. For ones like \d, the ESC_ values
- are arranged to be the negation of the corresponding OP_values. For the
- back references, the values are ESC_REF plus the reference number. Only
- back references and those types that consume a character may be repeated.
- We can test for values between ESC_b and ESC_Z for the latter; this may
- have to change if any new ones are ever created. */
-
- if (c < 0)
- {
- if (-c == ESC_Q) /* Handle start of quoted string */
- {
- if (ptr[1] == '\\' && ptr[2] == 'E') ptr += 2; /* avoid empty string */
- else inescq = TRUE;
- continue;
- }
-
- /* For metasequences that actually match a character, we disable the
- setting of a first character if it hasn't already been set. */
-
- if (firstbyte == REQ_UNSET && -c > ESC_b && -c < ESC_Z)
- firstbyte = REQ_NONE;
-
- /* Set values to reset to if this is followed by a zero repeat. */
-
- zerofirstbyte = firstbyte;
- zeroreqbyte = reqbyte;
-
- /* Back references are handled specially */
-
- if (-c >= ESC_REF)
- {
- int number = -c - ESC_REF;
- previous = code;
- *code++ = OP_REF;
- PUT2INC(code, 0, number);
- }
- else
- {
- previous = (-c > ESC_b && -c < ESC_Z)? code : NULL;
- *code++ = -c;
- }
- continue;
- }
-
- /* Data character: reset and fall through */
-
- ptr = tempptr;
- c = '\\';
-
- /* Handle a run of data characters until a metacharacter is encountered.
- The first character is guaranteed not to be whitespace or # when the
- extended flag is set. */
-
- NORMAL_CHAR:
- default:
- previous = code;
- *code = OP_CHARS;
- code += 2;
- length = 0;
-
- do
- {
- /* If in \Q...\E, check for the end; if not, we always have a literal */
-
- if (inescq)
- {
- if (c == '\\' && ptr[1] == 'E')
- {
- inescq = FALSE;
- ptr++;
- }
- else
- {
- *code++ = c;
- length++;
- }
- continue;
- }
-
- /* Skip white space and comments for /x patterns */
-
- if ((options & PCRE_EXTENDED) != 0)
- {
- if ((cd->ctypes[c] & ctype_space) != 0) continue;
- if (c == '#')
- {
- /* The space before the ; is to avoid a warning on a silly compiler
- on the Macintosh. */
- while ((c = *(++ptr)) != 0 && c != NEWLINE) ;
- if (c == 0) break;
- continue;
- }
- }
-
- /* Backslash may introduce a data char or a metacharacter. Escaped items
- are checked for validity in the pre-compiling pass. Stop the string
- before a metaitem. */
-
- if (c == '\\')
- {
- tempptr = ptr;
- c = check_escape(&ptr, errorptr, *brackets, options, FALSE);
- if (c < 0) { ptr = tempptr; break; }
-
- /* If a character is > 127 in UTF-8 mode, we have to turn it into
- two or more bytes in the UTF-8 encoding. */
-
-#ifdef SUPPORT_UTF8
- if (utf8 && c > 127)
- {
- uschar buffer[8];
- int len = ord2utf8(c, buffer);
- for (c = 0; c < len; c++) *code++ = buffer[c];
- length += len;
- continue;
- }
-#endif
- }
-
- /* Ordinary character or single-char escape */
-
- *code++ = c;
- length++;
- }
-
- /* This "while" is the end of the "do" above. */
-
- while (length < MAXLIT && (cd->ctypes[c = *(++ptr)] & ctype_meta) == 0);
-
- /* Update the first and last requirements. These are always bytes, even in
- UTF-8 mode. However, there is a special case to be considered when there
- are only one or two characters. Because this gets messy in UTF-8 mode, the
- code is kept separate. When we get here "length" contains the number of
- bytes. */
-
-#ifdef SUPPORT_UTF8
- if (utf8 && length > 1)
- {
- uschar *t = previous + 3; /* After this code, t */
- while (t < code && (*t & 0xc0) == 0x80) t++; /* follows the 1st char */
-
- /* Handle the case when there is only one multibyte character. It must
- have at least two bytes because of the "length > 1" test above. */
-
- if (t == code)
- {
- /* If no previous first byte, set it from this character, but revert to
- none on a zero repeat. */
-
- if (firstbyte == REQ_UNSET)
- {
- zerofirstbyte = REQ_NONE;
- firstbyte = previous[2];
- }
-
- /* Otherwise, leave the first byte value alone, and don't change it on
- a zero repeat */
-
- else zerofirstbyte = firstbyte;
-
- /* In both cases, a zero repeat resets the previous required byte */
-
- zeroreqbyte = reqbyte;
- }
-
- /* Handle the case when there is more than one character. These may be
- single-byte or multibyte characters */
-
- else
- {
- t = code - 1; /* After this code, t is at the */
- while ((*t & 0xc0) == 0x80) t--; /* start of the last character */
-
- /* If no previous first byte, set it from the first character, and
- retain it on a zero repeat (of the last character). The required byte
- is reset on a zero repeat, either to the byte before the last
- character, unless this is the first byte of the string. In that case,
- it reverts to its previous value. */
-
- if (firstbyte == REQ_UNSET)
- {
- zerofirstbyte = firstbyte = previous[2] | req_caseopt;
- zeroreqbyte = (t - 1 == previous + 2)?
- reqbyte : t[-1] | req_caseopt | cd->req_varyopt;
- }
-
- /* If there was a previous first byte, leave it alone, and don't change
- it on a zero repeat. The required byte is reset on a zero repeat to the
- byte before the last character. */
-
- else
- {
- zerofirstbyte = firstbyte;
- zeroreqbyte = t[-1] | req_caseopt | cd->req_varyopt;
- }
- }
-
- /* In all cases (we know length > 1), the new required byte is the last
- byte of the string. */
-
- reqbyte = code[-1] | req_caseopt | cd->req_varyopt;
- }
-
- else /* End of UTF-8 coding */
-#endif
-
- /* This is the code for non-UTF-8 operation, either without UTF-8 support,
- or when UTF-8 is not enabled. */
-
- {
- /* firstbyte was not previously set; take it from this string */
-
- if (firstbyte == REQ_UNSET)
- {
- if (length == 1)
- {
- zerofirstbyte = REQ_NONE;
- firstbyte = previous[2] | req_caseopt;
- zeroreqbyte = reqbyte;
- }
- else
- {
- zerofirstbyte = firstbyte = previous[2] | req_caseopt;
- zeroreqbyte = (length > 2)?
- (code[-2] | req_caseopt | cd->req_varyopt) : reqbyte;
- reqbyte = code[-1] | req_caseopt | cd->req_varyopt;
- }
- }
-
- /* firstbyte was previously set */
-
- else
- {
- zerofirstbyte = firstbyte;
- zeroreqbyte = (length == 1)? reqbyte :
- code[-2] | req_caseopt | cd->req_varyopt;
- reqbyte = code[-1] | req_caseopt | cd->req_varyopt;
- }
- }
-
- /* Set the length in the data vector, and advance to the next state. */
-
- previous[1] = length;
- if (length < MAXLIT) ptr--;
- break;
- }
- } /* end of big loop */
-
-/* Control never reaches here by falling through, only by a goto for all the
-error states. Pass back the position in the pattern so that it can be displayed
-to the user for diagnosing the error. */
-
-FAILED:
-*ptrptr = ptr;
-return FALSE;
-}
-
-
-
-
-/*************************************************
-* Compile sequence of alternatives *
-*************************************************/
-
-/* On entry, ptr is pointing past the bracket character, but on return
-it points to the closing bracket, or vertical bar, or end of string.
-The code variable is pointing at the byte into which the BRA operator has been
-stored. If the ims options are changed at the start (for a (?ims: group) or
-during any branch, we need to insert an OP_OPT item at the start of every
-following branch to ensure they get set correctly at run time, and also pass
-the new options into every subsequent branch compile.
-
-Argument:
- options option bits, including any changes for this subpattern
- oldims previous settings of ims option bits
- brackets -> int containing the number of extracting brackets used
- codeptr -> the address of the current code pointer
- ptrptr -> the address of the current pattern pointer
- errorptr -> pointer to error message
- lookbehind TRUE if this is a lookbehind assertion
- skipbytes skip this many bytes at start (for OP_COND, OP_BRANUMBER)
- firstbyteptr place to put the first required character, or a negative number
- reqbyteptr place to put the last required character, or a negative number
- bcptr pointer to the chain of currently open branches
- cd points to the data block with tables pointers etc.
-
-Returns: TRUE on success
-*/
-
-static BOOL
-compile_regex(int options, int oldims, int *brackets, uschar **codeptr,
- const uschar **ptrptr, const char **errorptr, BOOL lookbehind, int skipbytes,
- int *firstbyteptr, int *reqbyteptr, branch_chain *bcptr, compile_data *cd)
-{
-const uschar *ptr = *ptrptr;
-uschar *code = *codeptr;
-uschar *last_branch = code;
-uschar *start_bracket = code;
-uschar *reverse_count = NULL;
-int firstbyte, reqbyte;
-int branchfirstbyte, branchreqbyte;
-branch_chain bc;
-
-bc.outer = bcptr;
-bc.current = code;
-
-firstbyte = reqbyte = REQ_UNSET;
-
-/* Offset is set zero to mark that this bracket is still open */
-
-PUT(code, 1, 0);
-code += 1 + LINK_SIZE + skipbytes;
-
-/* Loop for each alternative branch */
-
-for (;;)
- {
- /* Handle a change of ims options at the start of the branch */
-
- if ((options & PCRE_IMS) != oldims)
- {
- *code++ = OP_OPT;
- *code++ = options & PCRE_IMS;
- }
-
- /* Set up dummy OP_REVERSE if lookbehind assertion */
-
- if (lookbehind)
- {
- *code++ = OP_REVERSE;
- reverse_count = code;
- PUTINC(code, 0, 0);
- }
-
- /* Now compile the branch */
-
- if (!compile_branch(&options, brackets, &code, &ptr, errorptr,
- &branchfirstbyte, &branchreqbyte, &bc, cd))
- {
- *ptrptr = ptr;
- return FALSE;
- }
-
- /* If this is the first branch, the firstbyte and reqbyte values for the
- branch become the values for the regex. */
-
- if (*last_branch != OP_ALT)
- {
- firstbyte = branchfirstbyte;
- reqbyte = branchreqbyte;
- }
-
- /* If this is not the first branch, the first char and reqbyte have to
- match the values from all the previous branches, except that if the previous
- value for reqbyte didn't have REQ_VARY set, it can still match, and we set
- REQ_VARY for the regex. */
-
- else
- {
- /* If we previously had a firstbyte, but it doesn't match the new branch,
- we have to abandon the firstbyte for the regex, but if there was previously
- no reqbyte, it takes on the value of the old firstbyte. */
-
- if (firstbyte >= 0 && firstbyte != branchfirstbyte)
- {
- if (reqbyte < 0) reqbyte = firstbyte;
- firstbyte = REQ_NONE;
- }
-
- /* If we (now or from before) have no firstbyte, a firstbyte from the
- branch becomes a reqbyte if there isn't a branch reqbyte. */
-
- if (firstbyte < 0 && branchfirstbyte >= 0 && branchreqbyte < 0)
- branchreqbyte = branchfirstbyte;
-
- /* Now ensure that the reqbytes match */
-
- if ((reqbyte & ~REQ_VARY) != (branchreqbyte & ~REQ_VARY))
- reqbyte = REQ_NONE;
- else reqbyte |= branchreqbyte; /* To "or" REQ_VARY */
- }
-
- /* If lookbehind, check that this branch matches a fixed-length string,
- and put the length into the OP_REVERSE item. Temporarily mark the end of
- the branch with OP_END. */
-
- if (lookbehind)
- {
- int length;
- *code = OP_END;
- length = find_fixedlength(last_branch, options);
- DPRINTF(("fixed length = %d\n", length));
- if (length < 0)
- {
- *errorptr = (length == -2)? ERR36 : ERR25;
- *ptrptr = ptr;
- return FALSE;
- }
- PUT(reverse_count, 0, length);
- }
-
- /* Reached end of expression, either ')' or end of pattern. Go back through
- the alternative branches and reverse the chain of offsets, with the field in
- the BRA item now becoming an offset to the first alternative. If there are
- no alternatives, it points to the end of the group. The length in the
- terminating ket is always the length of the whole bracketed item. If any of
- the ims options were changed inside the group, compile a resetting op-code
- following, except at the very end of the pattern. Return leaving the pointer
- at the terminating char. */
-
- if (*ptr != '|')
- {
- int length = code - last_branch;
- do
- {
- int prev_length = GET(last_branch, 1);
- PUT(last_branch, 1, length);
- length = prev_length;
- last_branch -= length;
- }
- while (length > 0);
-
- /* Fill in the ket */
-
- *code = OP_KET;
- PUT(code, 1, code - start_bracket);
- code += 1 + LINK_SIZE;
-
- /* Resetting option if needed */
-
- if ((options & PCRE_IMS) != oldims && *ptr == ')')
- {
- *code++ = OP_OPT;
- *code++ = oldims;
- }
-
- /* Set values to pass back */
-
- *codeptr = code;
- *ptrptr = ptr;
- *firstbyteptr = firstbyte;
- *reqbyteptr = reqbyte;
- return TRUE;
- }
-
- /* Another branch follows; insert an "or" node. Its length field points back
- to the previous branch while the bracket remains open. At the end the chain
- is reversed. It's done like this so that the start of the bracket has a
- zero offset until it is closed, making it possible to detect recursion. */
-
- *code = OP_ALT;
- PUT(code, 1, code - last_branch);
- bc.current = last_branch = code;
- code += 1 + LINK_SIZE;
- ptr++;
- }
-/* Control never reaches here */
-}
-
-
-
-
-/*************************************************
-* Check for anchored expression *
-*************************************************/
-
-/* Try to find out if this is an anchored regular expression. Consider each
-alternative branch. If they all start with OP_SOD or OP_CIRC, or with a bracket
-all of whose alternatives start with OP_SOD or OP_CIRC (recurse ad lib), then
-it's anchored. However, if this is a multiline pattern, then only OP_SOD
-counts, since OP_CIRC can match in the middle.
-
-We can also consider a regex to be anchored if OP_SOM starts all its branches.
-This is the code for \G, which means "match at start of match position, taking
-into account the match offset".
-
-A branch is also implicitly anchored if it starts with .* and DOTALL is set,
-because that will try the rest of the pattern at all possible matching points,
-so there is no point trying again.... er ....
-
-.... except when the .* appears inside capturing parentheses, and there is a
-subsequent back reference to those parentheses. We haven't enough information
-to catch that case precisely.
-
-At first, the best we could do was to detect when .* was in capturing brackets
-and the highest back reference was greater than or equal to that level.
-However, by keeping a bitmap of the first 31 back references, we can catch some
-of the more common cases more precisely.
-
-Arguments:
- code points to start of expression (the bracket)
- options points to the options setting
- bracket_map a bitmap of which brackets we are inside while testing; this
- handles up to substring 31; after that we just have to take
- the less precise approach
- backref_map the back reference bitmap
-
-Returns: TRUE or FALSE
-*/
-
-static BOOL
-is_anchored(register const uschar *code, int *options, unsigned int bracket_map,
- unsigned int backref_map)
-{
-do {
- const uschar *scode =
- first_significant_code(code + 1+LINK_SIZE, options, PCRE_MULTILINE);
- register int op = *scode;
-
- /* Capturing brackets */
-
- if (op > OP_BRA)
- {
- int new_map;
- op -= OP_BRA;
- if (op > EXTRACT_BASIC_MAX) op = GET2(scode, 2+LINK_SIZE);
- new_map = bracket_map | ((op < 32)? (1 << op) : 1);
- if (!is_anchored(scode, options, new_map, backref_map)) return FALSE;
- }
-
- /* Other brackets */
-
- else if (op == OP_BRA || op == OP_ASSERT || op == OP_ONCE || op == OP_COND)
- {
- 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. */
-
- else if ((op == OP_TYPESTAR || op == OP_TYPEMINSTAR) &&
- (*options & PCRE_DOTALL) != 0)
- {
- if (scode[1] != OP_ANY || (bracket_map & backref_map) != 0) return FALSE;
- }
-
- /* Check for explicit anchoring */
-
- else if (op != OP_SOD && op != OP_SOM &&
- ((*options & PCRE_MULTILINE) != 0 || op != OP_CIRC))
- return FALSE;
- code += GET(code, 1);
- }
-while (*code == OP_ALT); /* Loop for each alternative */
-return TRUE;
-}
-
-
-
-/*************************************************
-* Check for starting with ^ or .* *
-*************************************************/
-
-/* This is called to find out if every branch starts with ^ or .* so that
-"first char" processing can be done to speed things up in multiline
-matching and for non-DOTALL patterns that start with .* (which must start at
-the beginning or after \n). As in the case of is_anchored() (see above), we
-have to take account of back references to capturing brackets that contain .*
-because in that case we can't make the assumption.
-
-Arguments:
- code points to start of expression (the bracket)
- bracket_map a bitmap of which brackets we are inside while testing; this
- handles up to substring 31; after that we just have to take
- the less precise approach
- backref_map the back reference bitmap
-
-Returns: TRUE or FALSE
-*/
-
-static BOOL
-is_startline(const uschar *code, unsigned int bracket_map,
- unsigned int backref_map)
-{
-do {
- const uschar *scode = first_significant_code(code + 1+LINK_SIZE, NULL, 0);
- register int op = *scode;
-
- /* Capturing brackets */
-
- if (op > OP_BRA)
- {
- int new_map;
- op -= OP_BRA;
- if (op > EXTRACT_BASIC_MAX) op = GET2(scode, 2+LINK_SIZE);
- new_map = bracket_map | ((op < 32)? (1 << op) : 1);
- if (!is_startline(scode, new_map, backref_map)) return FALSE;
- }
-
- /* Other brackets */
-
- else if (op == OP_BRA || op == OP_ASSERT || op == OP_ONCE || op == OP_COND)
- { if (!is_startline(scode, bracket_map, backref_map)) return FALSE; }
-
- /* .* is not anchored unless DOTALL is set and it isn't in brackets that
- may be referenced. */
-
- else if (op == OP_TYPESTAR || op == OP_TYPEMINSTAR)
- {
- if (scode[1] != OP_ANY || (bracket_map & backref_map) != 0) return FALSE;
- }
-
- /* Check for explicit circumflex */
-
- else if (op != OP_CIRC) return FALSE;
- code += GET(code, 1);
- }
-while (*code == OP_ALT); /* Loop for each alternative */
-return TRUE;
-}
-
-
-
-/*************************************************
-* Check for asserted fixed first char *
-*************************************************/
-
-/* During compilation, the "first char" settings from forward assertions are
-discarded, because they can cause conflicts with actual literals that follow.
-However, if we end up without a first char setting for an unanchored pattern,
-it is worth scanning the regex to see if there is an initial asserted first
-char. If all branches start with the same asserted char, or with a bracket all
-of whose alternatives start with the same asserted char (recurse ad lib), then
-we return that char, otherwise -1.
-
-Arguments:
- code points to start of expression (the bracket)
- options pointer to the options (used to check casing changes)
- inassert TRUE if in an assertion
-
-Returns: -1 or the fixed first char
-*/
-
-static int
-find_firstassertedchar(const uschar *code, int *options, BOOL inassert)
-{
-register int c = -1;
-do {
- int d;
- const uschar *scode =
- first_significant_code(code + 1+LINK_SIZE, options, PCRE_CASELESS);
- register int op = *scode;
-
- if (op >= OP_BRA) op = OP_BRA;
-
- switch(op)
- {
- default:
- return -1;
-
- case OP_BRA:
- case OP_ASSERT:
- case OP_ONCE:
- case OP_COND:
- if ((d = find_firstassertedchar(scode, options, op == OP_ASSERT)) < 0)
- return -1;
- if (c < 0) c = d; else if (c != d) return -1;
- break;
-
- case OP_EXACT: /* Fall through */
- scode++;
-
- case OP_CHARS: /* Fall through */
- scode++;
-
- case OP_PLUS:
- case OP_MINPLUS:
- if (!inassert) return -1;
- if (c < 0)
- {
- c = scode[1];
- if ((*options & PCRE_CASELESS) != 0) c |= REQ_CASELESS;
- }
- else if (c != scode[1]) return -1;
- break;
- }
-
- code += GET(code, 1);
- }
-while (*code == OP_ALT);
-return c;
-}
-
-
-
-
-#ifdef SUPPORT_UTF8
-/*************************************************
-* Validate a UTF-8 string *
-*************************************************/
-
-/* This function is called (optionally) at the start of compile or match, to
-validate that a supposed UTF-8 string is actually valid. The early check means
-that subsequent code can assume it is dealing with a valid string. The check
-can be turned off for maximum performance, but then consequences of supplying
-an invalid string are then undefined.
-
-Arguments:
- string points to the string
- length length of string, or -1 if the string is zero-terminated
-
-Returns: < 0 if the string is a valid UTF-8 string
- >= 0 otherwise; the value is the offset of the bad byte
-*/
-
-static int
-valid_utf8(const uschar *string, int length)
-{
-register const uschar *p;
-
-if (length < 0)
- {
- for (p = string; *p != 0; p++);
- length = p - string;
- }
-
-for (p = string; length-- > 0; p++)
- {
- register int ab;
- register int c = *p;
- if (c < 128) continue;
- if ((c & 0xc0) != 0xc0) return p - string;
- ab = utf8_table4[c & 0x3f]; /* Number of additional bytes */
- if (length < ab) return p - string;
- length -= ab;
-
- /* Check top bits in the second byte */
- if ((*(++p) & 0xc0) != 0x80) return p - string;
-
- /* Check for overlong sequences for each different length */
- switch (ab)
- {
- /* Check for xx00 000x */
- case 1:
- if ((c & 0x3e) == 0) return p - string;
- continue; /* We know there aren't any more bytes to check */
-
- /* Check for 1110 0000, xx0x xxxx */
- case 2:
- if (c == 0xe0 && (*p & 0x20) == 0) return p - string;
- break;
-
- /* Check for 1111 0000, xx00 xxxx */
- case 3:
- if (c == 0xf0 && (*p & 0x30) == 0) return p - string;
- break;
-
- /* Check for 1111 1000, xx00 0xxx */
- case 4:
- if (c == 0xf8 && (*p & 0x38) == 0) return p - string;
- break;
-
- /* Check for leading 0xfe or 0xff, and then for 1111 1100, xx00 00xx */
- case 5:
- if (c == 0xfe || c == 0xff ||
- (c == 0xfc && (*p & 0x3c) == 0)) return p - string;
- break;
- }
-
- /* Check for valid bytes after the 2nd, if any; all must start 10 */
- while (--ab > 0)
- {
- if ((*(++p) & 0xc0) != 0x80) return p - string;
- }
- }
-
-return -1;
-}
-#endif
-
-
-
-/*************************************************
-* Compile a Regular Expression *
-*************************************************/
-
-/* This function takes a string and returns a pointer to a block of store
-holding a compiled version of the expression.
-
-Arguments:
- pattern the regular expression
- options various option bits
- errorptr pointer to pointer to error text
- erroroffset ptr offset in pattern where error was detected
- tables pointer to character tables or NULL
-
-Returns: pointer to compiled data block, or NULL on error,
- with errorptr and erroroffset set
-*/
-
-EXPORT pcre *
-pcre_compile(const char *pattern, int options, const char **errorptr,
- int *erroroffset, const unsigned char *tables)
-{
-real_pcre *re;
-int length = 1 + LINK_SIZE; /* For initial BRA plus length */
-int runlength;
-int c, firstbyte, reqbyte;
-int bracount = 0;
-int branch_extra = 0;
-int branch_newextra;
-int item_count = -1;
-int name_count = 0;
-int max_name_size = 0;
-#ifdef SUPPORT_UTF8
-int lastcharlength = 0;
-BOOL utf8;
-BOOL class_utf8;
-#endif
-BOOL inescq = FALSE;
-unsigned int brastackptr = 0;
-size_t size;
-uschar *code;
-const uschar *codestart;
-const uschar *ptr;
-compile_data compile_block;
-int brastack[BRASTACK_SIZE];
-uschar bralenstack[BRASTACK_SIZE];
-
-/* We can't pass back an error message if errorptr is NULL; I guess the best we
-can do is just return NULL. */
-
-if (errorptr == NULL) return NULL;
-*errorptr = NULL;
-
-/* However, we can give a message for this error */
-
-if (erroroffset == NULL)
- {
- *errorptr = ERR16;
- return NULL;
- }
-*erroroffset = 0;
-
-/* Can't support UTF8 unless PCRE has been compiled to include the code. */
-
-#ifdef SUPPORT_UTF8
-utf8 = (options & PCRE_UTF8) != 0;
-if (utf8 && (options & PCRE_NO_UTF8_CHECK) == 0 &&
- (*erroroffset = valid_utf8((uschar *)pattern, -1)) >= 0)
- {
- *errorptr = ERR44;
- return NULL;
- }
-#else
-if ((options & PCRE_UTF8) != 0)
- {
- *errorptr = ERR32;
- return NULL;
- }
-#endif
-
-if ((options & ~PUBLIC_OPTIONS) != 0)
- {
- *errorptr = ERR17;
- return NULL;
- }
-
-/* Set up pointers to the individual character tables */
-
-if (tables == NULL) tables = pcre_default_tables;
-compile_block.lcc = tables + lcc_offset;
-compile_block.fcc = tables + fcc_offset;
-compile_block.cbits = tables + cbits_offset;
-compile_block.ctypes = tables + ctypes_offset;
-
-/* Maximum back reference and backref bitmap. This is updated for numeric
-references during the first pass, but for named references during the actual
-compile pass. The bitmap records up to 31 back references to help in deciding
-whether (.*) can be treated as anchored or not. */
-
-compile_block.top_backref = 0;
-compile_block.backref_map = 0;
-
-/* Reflect pattern for debugging output */
-
-DPRINTF(("------------------------------------------------------------------\n"));
-DPRINTF(("%s\n", pattern));
-
-/* The first thing to do is to make a pass over the pattern to compute the
-amount of store required to hold the compiled code. This does not have to be
-perfect as long as errors are overestimates. At the same time we can detect any
-flag settings right at the start, and extract them. Make an attempt to correct
-for any counted white space if an "extended" flag setting appears late in the
-pattern. We can't be so clever for #-comments. */
-
-ptr = (const uschar *)(pattern - 1);
-while ((c = *(++ptr)) != 0)
- {
- int min, max;
- int class_optcount;
- int bracket_length;
- int duplength;
-
- /* If we are inside a \Q...\E sequence, all chars are literal */
-
- if (inescq) goto NORMAL_CHAR;
-
- /* Otherwise, first check for ignored whitespace and comments */
-
- if ((options & PCRE_EXTENDED) != 0)
- {
- if ((compile_block.ctypes[c] & ctype_space) != 0) continue;
- if (c == '#')
- {
- /* The space before the ; is to avoid a warning on a silly compiler
- on the Macintosh. */
- while ((c = *(++ptr)) != 0 && c != NEWLINE) ;
- if (c == 0) break;
- continue;
- }
- }
-
- item_count++; /* Is zero for the first non-comment item */
-
- switch(c)
- {
- /* A backslashed item may be an escaped "normal" character or a
- character type. For a "normal" character, put the pointers and
- character back so that tests for whitespace etc. in the input
- are done correctly. */
-
- case '\\':
- {
- const uschar *save_ptr = ptr;
- c = check_escape(&ptr, errorptr, bracount, options, FALSE);
- if (*errorptr != NULL) goto PCRE_ERROR_RETURN;
- if (c >= 0)
- {
- ptr = save_ptr;
- c = '\\';
- goto NORMAL_CHAR;
- }
- }
-
- /* If \Q, enter "literal" mode */
-
- if (-c == ESC_Q)
- {
- inescq = TRUE;
- continue;
- }
-
- /* Other escapes need one byte, and are of length one for repeats */
-
- length++;
-#ifdef SUPPORT_UTF8
- lastcharlength = 1;
-#endif
-
- /* A back reference needs an additional 2 bytes, plus either one or 5
- bytes for a repeat. We also need to keep the value of the highest
- back reference. */
-
- if (c <= -ESC_REF)
- {
- int refnum = -c - ESC_REF;
- compile_block.backref_map |= (refnum < 32)? (1 << refnum) : 1;
- if (refnum > compile_block.top_backref)
- compile_block.top_backref = refnum;
- length += 2; /* For single back reference */
- if (ptr[1] == '{' && is_counted_repeat(ptr+2))
- {
- ptr = read_repeat_counts(ptr+2, &min, &max, errorptr);
- if (*errorptr != NULL) goto PCRE_ERROR_RETURN;
- if ((min == 0 && (max == 1 || max == -1)) ||
- (min == 1 && max == -1))
- length++;
- else length += 5;
- if (ptr[1] == '?') ptr++;
- }
- }
- continue;
-
- case '^': /* Single-byte metacharacters */
- case '.':
- case '$':
- length++;
-#ifdef SUPPORT_UTF8
- lastcharlength = 1;
-#endif
- continue;
-
- case '*': /* These repeats won't be after brackets; */
- case '+': /* those are handled separately */
- case '?':
- length++;
- goto POSESSIVE; /* A few lines below */
-
- /* This covers the cases of braced repeats after a single char, metachar,
- class, or back reference. */
-
- case '{':
- if (!is_counted_repeat(ptr+1)) goto NORMAL_CHAR;
- ptr = read_repeat_counts(ptr+1, &min, &max, errorptr);
- if (*errorptr != NULL) goto PCRE_ERROR_RETURN;
-
- /* These special cases just insert one extra opcode */
-
- if ((min == 0 && (max == 1 || max == -1)) ||
- (min == 1 && max == -1))
- length++;
-
- /* These cases might insert additional copies of a preceding character. */
-
- else
- {
-#ifdef SUPPORT_UTF8
- /* In UTF-8 mode, we should find the length in lastcharlength */
- if (utf8)
- {
- if (min != 1)
- {
- length -= lastcharlength; /* Uncount the original char or metachar */
- if (min > 0) length += 3 + lastcharlength;
- }
- length += lastcharlength + ((max > 0)? 3 : 1);
- }
- else
-#endif
-
- /* Not UTF-8 mode: all characters are one byte */
- {
- if (min != 1)
- {
- length--; /* Uncount the original char or metachar */
- if (min > 0) length += 4;
- }
-
- length += (max > 0)? 4 : 2;
- }
- }
-
- if (ptr[1] == '?') ptr++; /* Needs no extra length */
-
- POSESSIVE: /* Test for possessive quantifier */
- if (ptr[1] == '+')
- {
- ptr++;
- length += 2 + 2*LINK_SIZE; /* Allow for atomic brackets */
- }
- continue;
-
- /* An alternation contains an offset to the next branch or ket. If any ims
- options changed in the previous branch(es), and/or if we are in a
- lookbehind assertion, extra space will be needed at the start of the
- branch. This is handled by branch_extra. */
-
- case '|':
- length += 1 + LINK_SIZE + branch_extra;
- continue;
-
- /* A character class uses 33 characters provided that all the character
- values are less than 256. Otherwise, it uses a bit map for low valued
- characters, and individual items for others. Don't worry about character
- types that aren't allowed in classes - they'll get picked up during the
- compile. A character class that contains only one single-byte character
- uses 2 or 3 bytes, depending on whether it is negated or not. Notice this
- where we can. (In UTF-8 mode we can do this only for chars < 128.) */
-
- case '[':
- class_optcount = 0;
-
-#ifdef SUPPORT_UTF8
- class_utf8 = FALSE;
-#endif
-
- if (*(++ptr) == '^') ptr++;
-
- /* Written as a "do" so that an initial ']' is taken as data */
-
- if (*ptr != 0) do
- {
- /* Inside \Q...\E everything is literal except \E */
-
- if (inescq)
- {
- if (*ptr != '\\' || ptr[1] != 'E') goto NON_SPECIAL_CHARACTER;
- inescq = FALSE;
- ptr += 1;
- continue;
- }
-
- /* Outside \Q...\E, check for escapes */
-
- if (*ptr == '\\')
- {
-#ifdef SUPPORT_UTF8
- int prevchar = ptr[-1];
-#endif
- int ch = check_escape(&ptr, errorptr, bracount, options, TRUE);
- if (*errorptr != NULL) goto PCRE_ERROR_RETURN;
-
- /* \b is backspace inside a class */
-
- if (-ch == ESC_b) ch = '\b';
-
- /* \Q enters quoting mode */
-
- if (-ch == ESC_Q)
- {
- inescq = TRUE;
- continue;
- }
-
- /* Handle escapes that turn into characters */
-
- if (ch >= 0)
- {
-#ifdef SUPPORT_UTF8
- if (utf8)
- {
- if (ch > 127) class_optcount = 10; /* Ensure > 1 */
- if (ch > 255)
- {
- uschar buffer[6];
- if (!class_utf8)
- {
- class_utf8 = TRUE;
- length += LINK_SIZE + 1 + 1;
- }
- length += 1 + ord2utf8(ch, buffer);
-
- /* If this wide character is preceded by '-', add an extra 2 to
- the length in case the previous character was < 128, because in
- this case the whole range will be put into the list. */
-
- if (prevchar == '-') length += 2;
- }
- }
-#endif
- class_optcount++; /* for possible optimization */
- }
- else class_optcount = 10; /* \d, \s etc; make sure > 1 */
- }
-
- /* Check the syntax for POSIX stuff. The bits we actually handle are
- checked during the real compile phase. */
-
- else if (*ptr == '[' && check_posix_syntax(ptr, &ptr, &compile_block))
- {
- ptr++;
- class_optcount = 10; /* Make sure > 1 */
- }
-
- /* Anything else just increments the possible optimization count. If
- there are wide characters, we are going to have to use an XCLASS. */
-
- else
- {
- NON_SPECIAL_CHARACTER:
- class_optcount++;
-
-#ifdef SUPPORT_UTF8
- if (utf8)
- {
- int ch;
- int extra = 0;
- GETCHARLEN(ch, ptr, extra);
- if (ch > 127) class_optcount = 10; /* No optimization possible */
- if (ch > 255)
- {
- if (!class_utf8)
- {
- class_utf8 = TRUE;
- length += LINK_SIZE + 1 + 1;
- }
- length += 2 + extra;
-
- /* If this wide character is preceded by '-', add an extra 2 to
- the length in case the previous character was < 128, because in
- this case the whole range will be put into the list. */
-
- if (ptr[-1] == '-') length += 2;
-
- /* Advance to the end of this character */
-
- ptr += extra;
- }
- }
-#endif
- }
- }
- while (*(++ptr) != 0 && (inescq || *ptr != ']')); /* Concludes "do" above */
-
- if (*ptr == 0) /* Missing terminating ']' */
- {
- *errorptr = ERR6;
- goto PCRE_ERROR_RETURN;
- }
-
- /* We can optimize when there was only one optimizable character. Repeats
- for positive and negated single one-byte chars are handled by the general
- code. Here, we handle repeats for the class opcodes. */
-
- if (class_optcount == 1) length += 3; else
- {
- length += 33;
-
- /* A repeat needs either 1 or 5 bytes. If it is a possessive quantifier,
- we also need extra for wrapping the whole thing in a sub-pattern. */
-
- if (*ptr != 0 && ptr[1] == '{' && is_counted_repeat(ptr+2))
- {
- ptr = read_repeat_counts(ptr+2, &min, &max, errorptr);
- if (*errorptr != NULL) goto PCRE_ERROR_RETURN;
- if ((min == 0 && (max == 1 || max == -1)) ||
- (min == 1 && max == -1))
- length++;
- else length += 5;
- if (ptr[1] == '+')
- {
- ptr++;
- length += 2 + 2*LINK_SIZE;
- }
- else if (ptr[1] == '?') ptr++;
- }
- }
- continue;
-
- /* Brackets may be genuine groups or special things */
-
- case '(':
- branch_newextra = 0;
- bracket_length = 1 + LINK_SIZE;
-
- /* Handle special forms of bracket, which all start (? */
-
- if (ptr[1] == '?')
- {
- int set, unset;
- int *optset;
-
- switch (c = ptr[2])
- {
- /* Skip over comments entirely */
- case '#':
- ptr += 3;
- while (*ptr != 0 && *ptr != ')') ptr++;
- if (*ptr == 0)
- {
- *errorptr = ERR18;
- goto PCRE_ERROR_RETURN;
- }
- continue;
-
- /* Non-referencing groups and lookaheads just move the pointer on, and
- then behave like a non-special bracket, except that they don't increment
- the count of extracting brackets. Ditto for the "once only" bracket,
- which is in Perl from version 5.005. */
-
- case ':':
- case '=':
- case '!':
- case '>':
- ptr += 2;
- break;
-
- /* (?R) specifies a recursive call to the regex, which is an extension
- to provide the facility which can be obtained by (?p{perl-code}) in
- Perl 5.6. In Perl 5.8 this has become (??{perl-code}).
-
- From PCRE 4.00, items such as (?3) specify subroutine-like "calls" to
- the appropriate numbered brackets. This includes both recursive and
- non-recursive calls. (?R) is now synonymous with (?0). */
-
- case 'R':
- ptr++;
-
- case '0': case '1': case '2': case '3': case '4':
- case '5': case '6': case '7': case '8': case '9':
- ptr += 2;
- if (c != 'R')
- while ((digitab[*(++ptr)] & ctype_digit) != 0);
- if (*ptr != ')')
- {
- *errorptr = ERR29;
- goto PCRE_ERROR_RETURN;
- }
- length += 1 + LINK_SIZE;
-
- /* If this item is quantified, it will get wrapped inside brackets so
- as to use the code for quantified brackets. We jump down and use the
- code that handles this for real brackets. */
-
- if (ptr[1] == '+' || ptr[1] == '*' || ptr[1] == '?' || ptr[1] == '{')
- {
- length += 2 + 2 * LINK_SIZE; /* to make bracketed */
- duplength = 5 + 3 * LINK_SIZE;
- goto HANDLE_QUANTIFIED_BRACKETS;
- }
- continue;
-
- /* (?C) is an extension which provides "callout" - to provide a bit of
- the functionality of the Perl (?{...}) feature. An optional number may
- follow (default is zero). */
-
- case 'C':
- ptr += 2;
- while ((digitab[*(++ptr)] & ctype_digit) != 0);
- if (*ptr != ')')
- {
- *errorptr = ERR39;
- goto PCRE_ERROR_RETURN;
- }
- length += 2;
- continue;
-
- /* Named subpatterns are an extension copied from Python */
-
- case 'P':
- ptr += 3;
- if (*ptr == '<')
- {
- const uschar *p; /* Don't amalgamate; some compilers */
- p = ++ptr; /* grumble at autoincrement in declaration */
- while ((compile_block.ctypes[*ptr] & ctype_word) != 0) ptr++;
- if (*ptr != '>')
- {
- *errorptr = ERR42;
- goto PCRE_ERROR_RETURN;
- }
- name_count++;
- if (ptr - p > max_name_size) max_name_size = (ptr - p);
- break;
- }
-
- if (*ptr == '=' || *ptr == '>')
- {
- while ((compile_block.ctypes[*(++ptr)] & ctype_word) != 0);
- if (*ptr != ')')
- {
- *errorptr = ERR42;
- goto PCRE_ERROR_RETURN;
- }
- break;
- }
-
- /* Unknown character after (?P */
-
- *errorptr = ERR41;
- goto PCRE_ERROR_RETURN;
-
- /* Lookbehinds are in Perl from version 5.005 */
-
- case '<':
- ptr += 3;
- if (*ptr == '=' || *ptr == '!')
- {
- branch_newextra = 1 + LINK_SIZE;
- length += 1 + LINK_SIZE; /* For the first branch */
- break;
- }
- *errorptr = ERR24;
- goto PCRE_ERROR_RETURN;
-
- /* Conditionals are in Perl from version 5.005. The bracket must either
- be followed by a number (for bracket reference) or by an assertion
- group, or (a PCRE extension) by 'R' for a recursion test. */
-
- case '(':
- if (ptr[3] == 'R' && ptr[4] == ')')
- {
- ptr += 4;
- length += 3;
- }
- else if ((digitab[ptr[3]] & ctype_digit) != 0)
- {
- ptr += 4;
- length += 3;
- while ((digitab[*ptr] & ctype_digit) != 0) ptr++;
- if (*ptr != ')')
- {
- *errorptr = ERR26;
- goto PCRE_ERROR_RETURN;
- }
- }
- else /* An assertion must follow */
- {
- ptr++; /* Can treat like ':' as far as spacing is concerned */
- if (ptr[2] != '?' ||
- (ptr[3] != '=' && ptr[3] != '!' && ptr[3] != '<') )
- {
- ptr += 2; /* To get right offset in message */
- *errorptr = ERR28;
- goto PCRE_ERROR_RETURN;
- }
- }
- break;
-
- /* Else loop checking valid options until ) is met. Anything else is an
- error. If we are without any brackets, i.e. at top level, the settings
- act as if specified in the options, so massage the options immediately.
- This is for backward compatibility with Perl 5.004. */
-
- default:
- set = unset = 0;
- optset = &set;
- ptr += 2;
-
- for (;; ptr++)
- {
- c = *ptr;
- switch (c)
- {
- case 'i':
- *optset |= PCRE_CASELESS;
- continue;
-
- case 'm':
- *optset |= PCRE_MULTILINE;
- continue;
-
- case 's':
- *optset |= PCRE_DOTALL;
- continue;
-
- case 'x':
- *optset |= PCRE_EXTENDED;
- continue;
-
- case 'X':
- *optset |= PCRE_EXTRA;
- continue;
-
- case 'U':
- *optset |= PCRE_UNGREEDY;
- continue;
-
- case '-':
- optset = &unset;
- continue;
-
- /* A termination by ')' indicates an options-setting-only item; if
- this is at the very start of the pattern (indicated by item_count
- being zero), we use it to set the global options. This is helpful
- when analyzing the pattern for first characters, etc. Otherwise
- nothing is done here and it is handled during the compiling
- process.
-
- [Historical note: Up to Perl 5.8, options settings at top level
- were always global settings, wherever they appeared in the pattern.
- That is, they were equivalent to an external setting. From 5.8
- onwards, they apply only to what follows (which is what you might
- expect).] */
-
- case ')':
- if (item_count == 0)
- {
- options = (options | set) & (~unset);
- set = unset = 0; /* To save length */
- item_count--; /* To allow for several */
- }
-
- /* Fall through */
-
- /* A termination by ':' indicates the start of a nested group with
- the given options set. This is again handled at compile time, but
- we must allow for compiled space if any of the ims options are
- set. We also have to allow for resetting space at the end of
- the group, which is why 4 is added to the length and not just 2.
- If there are several changes of options within the same group, this
- will lead to an over-estimate on the length, but this shouldn't
- matter very much. We also have to allow for resetting options at
- the start of any alternations, which we do by setting
- branch_newextra to 2. Finally, we record whether the case-dependent
- flag ever changes within the regex. This is used by the "required
- character" code. */
-
- case ':':
- if (((set|unset) & PCRE_IMS) != 0)
- {
- length += 4;
- branch_newextra = 2;
- if (((set|unset) & PCRE_CASELESS) != 0) options |= PCRE_ICHANGED;
- }
- goto END_OPTIONS;
-
- /* Unrecognized option character */
-
- default:
- *errorptr = ERR12;
- goto PCRE_ERROR_RETURN;
- }
- }
-
- /* If we hit a closing bracket, that's it - this is a freestanding
- option-setting. We need to ensure that branch_extra is updated if
- necessary. The only values branch_newextra can have here are 0 or 2.
- If the value is 2, then branch_extra must either be 2 or 5, depending
- on whether this is a lookbehind group or not. */
-
- END_OPTIONS:
- if (c == ')')
- {
- if (branch_newextra == 2 &&
- (branch_extra == 0 || branch_extra == 1+LINK_SIZE))
- branch_extra += branch_newextra;
- continue;
- }
-
- /* If options were terminated by ':' control comes here. Fall through
- to handle the group below. */
- }
- }
-
- /* Extracting brackets must be counted so we can process escapes in a
- Perlish way. If the number exceeds EXTRACT_BASIC_MAX we are going to
- need an additional 3 bytes of store per extracting bracket. However, if
- PCRE_NO_AUTO)CAPTURE is set, unadorned brackets become non-capturing, so we
- must leave the count alone (it will aways be zero). */
-
- else if ((options & PCRE_NO_AUTO_CAPTURE) == 0)
- {
- bracount++;
- if (bracount > EXTRACT_BASIC_MAX) bracket_length += 3;
- }
-
- /* Save length for computing whole length at end if there's a repeat that
- requires duplication of the group. Also save the current value of
- branch_extra, and start the new group with the new value. If non-zero, this
- will either be 2 for a (?imsx: group, or 3 for a lookbehind assertion. */
-
- if (brastackptr >= sizeof(brastack)/sizeof(int))
- {
- *errorptr = ERR19;
- goto PCRE_ERROR_RETURN;
- }
-
- bralenstack[brastackptr] = branch_extra;
- branch_extra = branch_newextra;
-
- brastack[brastackptr++] = length;
- length += bracket_length;
- continue;
-
- /* Handle ket. Look for subsequent max/min; for certain sets of values we
- have to replicate this bracket up to that many times. If brastackptr is
- 0 this is an unmatched bracket which will generate an error, but take care
- not to try to access brastack[-1] when computing the length and restoring
- the branch_extra value. */
-
- case ')':
- length += 1 + LINK_SIZE;
- if (brastackptr > 0)
- {
- duplength = length - brastack[--brastackptr];
- branch_extra = bralenstack[brastackptr];
- }
- else duplength = 0;
-
- /* The following code is also used when a recursion such as (?3) is
- followed by a quantifier, because in that case, it has to be wrapped inside
- brackets so that the quantifier works. The value of duplength must be
- set before arrival. */
-
- HANDLE_QUANTIFIED_BRACKETS:
-
- /* Leave ptr at the final char; for read_repeat_counts this happens
- automatically; for the others we need an increment. */
-
- if ((c = ptr[1]) == '{' && is_counted_repeat(ptr+2))
- {
- ptr = read_repeat_counts(ptr+2, &min, &max, errorptr);
- if (*errorptr != NULL) goto PCRE_ERROR_RETURN;
- }
- else if (c == '*') { min = 0; max = -1; ptr++; }
- else if (c == '+') { min = 1; max = -1; ptr++; }
- else if (c == '?') { min = 0; max = 1; ptr++; }
- else { min = 1; max = 1; }
-
- /* If the minimum is zero, we have to allow for an OP_BRAZERO before the
- group, and if the maximum is greater than zero, we have to replicate
- maxval-1 times; each replication acquires an OP_BRAZERO plus a nesting
- bracket set. */
-
- if (min == 0)
- {
- length++;
- if (max > 0) length += (max - 1) * (duplength + 3 + 2*LINK_SIZE);
- }
-
- /* When the minimum is greater than zero, we have to replicate up to
- minval-1 times, with no additions required in the copies. Then, if there
- is a limited maximum we have to replicate up to maxval-1 times allowing
- for a BRAZERO item before each optional copy and nesting brackets for all
- but one of the optional copies. */
-
- else
- {
- length += (min - 1) * duplength;
- if (max > min) /* Need this test as max=-1 means no limit */
- length += (max - min) * (duplength + 3 + 2*LINK_SIZE)
- - (2 + 2*LINK_SIZE);
- }
-
- /* Allow space for once brackets for "possessive quantifier" */
-
- if (ptr[1] == '+')
- {
- ptr++;
- length += 2 + 2*LINK_SIZE;
- }
- continue;
-
- /* Non-special character. For a run of such characters the length required
- is the number of characters + 2, except that the maximum run length is
- MAXLIT. We won't get a skipped space or a non-data escape or the start of a
- # comment as the first character, so the length can't be zero. */
-
- NORMAL_CHAR:
- default:
- length += 2;
- runlength = 0;
- do
- {
-#ifdef SUPPORT_UTF8
- lastcharlength = 1; /* Need length of last char for UTF-8 repeats */
-#endif
-
- /* If in a \Q...\E sequence, check for end; otherwise it's a literal */
- if (inescq)
- {
- if (c == '\\' && ptr[1] == 'E')
- {
- inescq = FALSE;
- ptr++;
- }
- else runlength++;
- continue;
- }
-
- /* Skip whitespace and comments for /x */
-
- if ((options & PCRE_EXTENDED) != 0)
- {
- if ((compile_block.ctypes[c] & ctype_space) != 0) continue;
- if (c == '#')
- {
- /* The space before the ; is to avoid a warning on a silly compiler
- on the Macintosh. */
- while ((c = *(++ptr)) != 0 && c != NEWLINE) ;
- continue;
- }
- }
-
- /* Backslash may introduce a data char or a metacharacter; stop the
- string before the latter. */
-
- if (c == '\\')
- {
- const uschar *saveptr = ptr;
- c = check_escape(&ptr, errorptr, bracount, options, FALSE);
- if (*errorptr != NULL) goto PCRE_ERROR_RETURN;
- if (c < 0) { ptr = saveptr; break; }
-
- /* In UTF-8 mode, add on the number of additional bytes needed to
- encode this character, and save the total length in case this is a
- final char that is repeated. */
-
-#ifdef SUPPORT_UTF8
- if (utf8 && c > 127)
- {
- int i;
- for (i = 0; i < sizeof(utf8_table1)/sizeof(int); i++)
- if (c <= utf8_table1[i]) break;
- runlength += i;
- lastcharlength += i;
- }
-#endif
- }
-
- /* Ordinary character or single-char escape */
-
- runlength++;
- }
-
- /* This "while" is the end of the "do" above. */
-
- while (runlength < MAXLIT &&
- (compile_block.ctypes[c = *(++ptr)] & ctype_meta) == 0);
-
- /* If we hit a meta-character, back off to point to it */
-
- if (runlength < MAXLIT) ptr--;
-
- /* If the last char in the string is a UTF-8 multibyte character, we must
- set lastcharlength correctly. If it was specified as an escape, this will
- already have been done above. However, we also have to support in-line
- UTF-8 characters, so check backwards from where we are. */
-
-#ifdef SUPPORT_UTF8
- if (utf8)
- {
- const uschar *lastptr = ptr - 1;
- if ((*lastptr & 0x80) != 0)
- {
- while((*lastptr & 0xc0) == 0x80) lastptr--;
- lastcharlength = ptr - lastptr;
- }
- }
-#endif
-
- length += runlength;
- continue;
- }
- }
-
-length += 2 + LINK_SIZE; /* For final KET and END */
-
-if (length > MAX_PATTERN_SIZE)
- {
- *errorptr = ERR20;
- return NULL;
- }
-
-/* Compute the size of data block needed and get it, either from malloc or
-externally provided function. */
-
-size = length + sizeof(real_pcre) + name_count * (max_name_size + 3);
-re = (real_pcre *)(pcre_malloc)(size);
-
-if (re == NULL)
- {
- *errorptr = ERR21;
- return NULL;
- }
-
-/* Put in the magic number, and save the size, options, and table pointer */
-
-re->magic_number = MAGIC_NUMBER;
-re->size = size;
-re->options = options;
-re->tables = tables;
-re->name_entry_size = max_name_size + 3;
-re->name_count = name_count;
-
-/* The starting points of the name/number translation table and of the code are
-passed around in the compile data block. */
-
-compile_block.names_found = 0;
-compile_block.name_entry_size = max_name_size + 3;
-compile_block.name_table = (uschar *)re + sizeof(real_pcre);
-codestart = compile_block.name_table + re->name_entry_size * re->name_count;
-compile_block.start_code = codestart;
-compile_block.req_varyopt = 0;
-
-/* Set up a starting, non-extracting bracket, then compile the expression. On
-error, *errorptr will be set non-NULL, so we don't need to look at the result
-of the function here. */
-
-ptr = (const uschar *)pattern;
-code = (uschar *)codestart;
-*code = OP_BRA;
-bracount = 0;
-(void)compile_regex(options, options & PCRE_IMS, &bracount, &code, &ptr,
- errorptr, FALSE, 0, &firstbyte, &reqbyte, NULL, &compile_block);
-re->top_bracket = bracount;
-re->top_backref = compile_block.top_backref;
-
-/* If not reached end of pattern on success, there's an excess bracket. */
-
-if (*errorptr == NULL && *ptr != 0) *errorptr = ERR22;
-
-/* Fill in the terminating state and check for disastrous overflow, but
-if debugging, leave the test till after things are printed out. */
-
-*code++ = OP_END;
-
-#ifndef DEBUG
-if (code - codestart > length) *errorptr = ERR23;
-#endif
-
-/* Give an error if there's back reference to a non-existent capturing
-subpattern. */
-
-if (re->top_backref > re->top_bracket) *errorptr = ERR15;
-
-/* Failed to compile, or error while post-processing */
-
-if (*errorptr != NULL)
- {
- (pcre_free)(re);
- PCRE_ERROR_RETURN:
- *erroroffset = ptr - (const uschar *)pattern;
- return NULL;
- }
-
-/* If the anchored option was not passed, set the flag if we can determine that
-the pattern is anchored by virtue of ^ characters or \A or anything else (such
-as starting with .* when DOTALL is set).
-
-Otherwise, if we know what the first character has to be, save it, because that
-speeds up unanchored matches no end. If not, see if we can set the
-PCRE_STARTLINE flag. This is helpful for multiline matches when all branches
-start with ^. and also when all branches start with .* for non-DOTALL matches.
-*/
-
-if ((options & PCRE_ANCHORED) == 0)
- {
- int temp_options = options;
- if (is_anchored(codestart, &temp_options, 0, compile_block.backref_map))
- re->options |= PCRE_ANCHORED;
- else
- {
- if (firstbyte < 0)
- firstbyte = find_firstassertedchar(codestart, &temp_options, FALSE);
- if (firstbyte >= 0) /* Remove caseless flag for non-caseable chars */
- {
- int ch = firstbyte & 255;
- re->first_byte = ((firstbyte & REQ_CASELESS) != 0 &&
- compile_block.fcc[ch] == ch)? ch : firstbyte;
- re->options |= PCRE_FIRSTSET;
- }
- else if (is_startline(codestart, 0, compile_block.backref_map))
- re->options |= PCRE_STARTLINE;
- }
- }
-
-/* For an anchored pattern, we use the "required byte" only if it follows a
-variable length item in the regex. Remove the caseless flag for non-caseable
-chars. */
-
-if (reqbyte >= 0 &&
- ((re->options & PCRE_ANCHORED) == 0 || (reqbyte & REQ_VARY) != 0))
- {
- int ch = reqbyte & 255;
- re->req_byte = ((reqbyte & REQ_CASELESS) != 0 &&
- compile_block.fcc[ch] == ch)? (reqbyte & ~REQ_CASELESS) : reqbyte;
- re->options |= PCRE_REQCHSET;
- }
-
-/* Print out the compiled data for debugging */
-
-#ifdef DEBUG
-
-printf("Length = %d top_bracket = %d top_backref = %d\n",
- length, re->top_bracket, re->top_backref);
-
-if (re->options != 0)
- {
- printf("%s%s%s%s%s%s%s%s%s\n",
- ((re->options & PCRE_ANCHORED) != 0)? "anchored " : "",
- ((re->options & PCRE_CASELESS) != 0)? "caseless " : "",
- ((re->options & PCRE_ICHANGED) != 0)? "case state changed " : "",
- ((re->options & PCRE_EXTENDED) != 0)? "extended " : "",
- ((re->options & PCRE_MULTILINE) != 0)? "multiline " : "",
- ((re->options & PCRE_DOTALL) != 0)? "dotall " : "",
- ((re->options & PCRE_DOLLAR_ENDONLY) != 0)? "endonly " : "",
- ((re->options & PCRE_EXTRA) != 0)? "extra " : "",
- ((re->options & PCRE_UNGREEDY) != 0)? "ungreedy " : "");
- }
-
-if ((re->options & PCRE_FIRSTSET) != 0)
- {
- int ch = re->first_byte & 255;
- const char *caseless = ((re->first_byte & REQ_CASELESS) == 0)? "" : " (caseless)";
- if (isprint(ch)) printf("First char = %c%s\n", ch, caseless);
- else printf("First char = \\x%02x%s\n", ch, caseless);
- }
-
-if ((re->options & PCRE_REQCHSET) != 0)
- {
- int ch = re->req_byte & 255;
- const char *caseless = ((re->req_byte & REQ_CASELESS) == 0)? "" : " (caseless)";
- if (isprint(ch)) printf("Req char = %c%s\n", ch, caseless);
- else printf("Req char = \\x%02x%s\n", ch, caseless);
- }
-
-print_internals(re, stdout);
-
-/* This check is done here in the debugging case so that the code that
-was compiled can be seen. */
-
-if (code - codestart > length)
- {
- *errorptr = ERR23;
- (pcre_free)(re);
- *erroroffset = ptr - (uschar *)pattern;
- return NULL;
- }
-#endif
-
-return (pcre *)re;
-}
-
-
-
-/*************************************************
-* Match a back-reference *
-*************************************************/
-
-/* If a back reference hasn't been set, the length that is passed is greater
-than the number of characters left in the string, so the match fails.
-
-Arguments:
- offset index into the offset vector
- eptr points into the subject
- length length to be matched
- md points to match data block
- ims the ims flags
-
-Returns: TRUE if matched
-*/
-
-static BOOL
-match_ref(int offset, register const uschar *eptr, int length, match_data *md,
- unsigned long int ims)
-{
-const uschar *p = md->start_subject + md->offset_vector[offset];
-
-#ifdef DEBUG
-if (eptr >= md->end_subject)
- printf("matching subject <null>");
-else
- {
- printf("matching subject ");
- pchars(eptr, length, TRUE, md);
- }
-printf(" against backref ");
-pchars(p, length, FALSE, md);
-printf("\n");
-#endif
-
-/* Always fail if not enough characters left */
-
-if (length > md->end_subject - eptr) return FALSE;
-
-/* Separate the caselesss case for speed */
-
-if ((ims & PCRE_CASELESS) != 0)
- {
- while (length-- > 0)
- if (md->lcc[*p++] != md->lcc[*eptr++]) return FALSE;
- }
-else
- { while (length-- > 0) if (*p++ != *eptr++) return FALSE; }
-
-return TRUE;
-}
-
-
-#ifdef SUPPORT_UTF8
-/*************************************************
-* Match character against an XCLASS *
-*************************************************/
-
-/* This function is called from within the XCLASS code below, to match a
-character against an extended class which might match values > 255.
-
-Arguments:
- c the character
- data points to the flag byte of the XCLASS data
-
-Returns: TRUE if character matches, else FALSE
-*/
-
-static BOOL
-match_xclass(int c, const uschar *data)
-{
-int t;
-BOOL negated = (*data & XCL_NOT) != 0;
-
-/* Character values < 256 are matched against a bitmap, if one is present. If
-not, we still carry on, because there may be ranges that start below 256 in the
-additional data. */
-
-if (c < 256)
- {
- if ((*data & XCL_MAP) != 0 && (data[1 + c/8] & (1 << (c&7))) != 0)
- return !negated; /* char found */
- }
-
-/* Now match against the list of large chars or ranges that end with a large
-char. First skip the bit map if present. */
-
-if ((*data++ & XCL_MAP) != 0) data += 32;
-
-while ((t = *data++) != XCL_END)
- {
- int x, y;
- GETCHARINC(x, data);
- if (t == XCL_SINGLE)
- {
- if (c == x) return !negated;
- }
- else
- {
- GETCHARINC(y, data);
- if (c >= x && c <= y) return !negated;
- }
- }
-
-return negated; /* char was not found */
-}
-#endif
-
-
-/***************************************************************************
-****************************************************************************
- RECURSION IN THE match() FUNCTION
-
-The match() function is highly recursive. Some regular expressions can cause
-it to recurse thousands of times. I was writing for Unix, so I just let it
-call itself recursively. This uses the stack for saving everything that has
-to be saved for a recursive call. On Unix, the stack can be large, and this
-works fine.
-
-It turns out that on non-Unix systems there are problems with programs that
-use a lot of stack. (This despite the fact that every last chip has oodles
-of memory these days, and techniques for extending the stack have been known
-for decades.) So....
-
-There is a fudge, triggered by defining NO_RECURSE, which avoids recursive
-calls by keeping local variables that need to be preserved in blocks of memory
-obtained from malloc instead instead of on the stack. Macros are used to
-achieve this so that the actual code doesn't look very different to what it
-always used to.
-****************************************************************************
-***************************************************************************/
-
-
-/* These versions of the macros use the stack, as normal */
-
-#ifndef NO_RECURSE
-#define REGISTER register
-#define RMATCH(rx,ra,rb,rc,rd,re,rf,rg) rx = match(ra,rb,rc,rd,re,rf,rg)
-#define RRETURN(ra) return ra
-#else
-
-
-/* These versions of the macros manage a private stack on the heap. Note
-that the rd argument of RMATCH isn't actually used. It's the md argument of
-match(), which never actually changes. */
-
-#define REGISTER
-
-#define RMATCH(rx,ra,rb,rc,rd,re,rf,rg)\
- {\
- heapframe *newframe = (pcre_stack_malloc)(sizeof(heapframe));\
- if (setjmp(frame->Xwhere) == 0)\
- {\
- newframe->Xeptr = ra;\
- newframe->Xecode = rb;\
- newframe->Xoffset_top = rc;\
- newframe->Xims = re;\
- newframe->Xeptrb = rf;\
- newframe->Xflags = rg;\
- newframe->Xprevframe = frame;\
- frame = newframe;\
- DPRINTF(("restarting from line %d\n", __LINE__));\
- goto HEAP_RECURSE;\
- }\
- else\
- {\
- DPRINTF(("longjumped back to line %d\n", __LINE__));\
- frame = md->thisframe;\
- rx = frame->Xresult;\
- }\
- }
-
-#define RRETURN(ra)\
- {\
- heapframe *newframe = frame;\
- frame = newframe->Xprevframe;\
- (pcre_stack_free)(newframe);\
- if (frame != NULL)\
- {\
- frame->Xresult = ra;\
- md->thisframe = frame;\
- longjmp(frame->Xwhere, 1);\
- }\
- return ra;\
- }
-
-
-/* Structure for remembering the local variables in a private frame */
-
-typedef struct heapframe {
- struct heapframe *Xprevframe;
-
- /* Function arguments that may change */
-
- const uschar *Xeptr;
- const uschar *Xecode;
- int Xoffset_top;
- long int Xims;
- eptrblock *Xeptrb;
- int Xflags;
-
- /* Function local variables */
-
- const uschar *Xcallpat;
- const uschar *Xcharptr;
- const uschar *Xdata;
- const uschar *Xlastptr;
- const uschar *Xnext;
- const uschar *Xpp;
- const uschar *Xprev;
- const uschar *Xsaved_eptr;
-
- recursion_info Xnew_recursive;
-
- BOOL Xcur_is_word;
- BOOL Xcondition;
- BOOL Xminimize;
- BOOL Xprev_is_word;
-
- unsigned long int Xoriginal_ims;
-
- int Xctype;
- int Xfc;
- int Xfi;
- int Xlength;
- int Xmax;
- int Xmin;
- int Xnumber;
- int Xoffset;
- int Xop;
- int Xsave_capture_last;
- int Xsave_offset1, Xsave_offset2, Xsave_offset3;
- int Xstacksave[REC_STACK_SAVE_MAX];
-
- eptrblock Xnewptrb;
-
- /* Place to pass back result, and where to jump back to */
-
- int Xresult;
- jmp_buf Xwhere;
-
-} heapframe;
-
-#endif
-
-
-/***************************************************************************
-***************************************************************************/
-
-
-
-/*************************************************
-* Match from current position *
-*************************************************/
-
-/* On entry ecode points to the first opcode, and eptr to the first character
-in the subject string, while eptrb holds the value of eptr at the start of the
-last bracketed group - used for breaking infinite loops matching zero-length
-strings. This function is called recursively in many circumstances. Whenever it
-returns a negative (error) response, the outer incarnation must also return the
-same response.
-
-Performance note: It might be tempting to extract commonly used fields from the
-md structure (e.g. utf8, end_subject) into individual variables to improve
-performance. Tests using gcc on a SPARC disproved this; in the first case, it
-made performance worse.
-
-Arguments:
- eptr pointer in subject
- ecode position in code
- offset_top current top pointer
- md pointer to "static" info for the match
- ims current /i, /m, and /s options
- eptrb pointer to chain of blocks containing eptr at start of
- brackets - for testing for empty matches
- flags can contain
- match_condassert - this is an assertion condition
- match_isgroup - this is the start of a bracketed group
-
-Returns: MATCH_MATCH if matched ) these values are >= 0
- MATCH_NOMATCH if failed to match )
- a negative PCRE_ERROR_xxx value if aborted by an error condition
- (e.g. stopped by recursion limit)
-*/
-
-static int
-match(REGISTER const uschar *eptr, REGISTER const uschar *ecode,
- int offset_top, match_data *md, unsigned long int ims, eptrblock *eptrb,
- int flags)
-{
-/* These variables do not need to be preserved over recursion in this function,
-so they can be ordinary variables in all cases. Mark them with "register"
-because they are used a lot in loops. */
-
-register int rrc; /* Returns from recursive calls */
-register int i; /* Used for loops not involving calls to RMATCH() */
-register int c; /* Character values not kept over RMATCH() calls */
-
-/* When recursion is not being used, all "local" variables that have to be
-preserved over calls to RMATCH() are part of a "frame" which is obtained from
-heap storage. Set up the top-level frame here; others are obtained from the
-heap whenever RMATCH() does a "recursion". See the macro definitions above. */
-
-#ifdef NO_RECURSE
-heapframe *frame = (pcre_stack_malloc)(sizeof(heapframe));
-frame->Xprevframe = NULL; /* Marks the top level */
-
-/* Copy in the original argument variables */
-
-frame->Xeptr = eptr;
-frame->Xecode = ecode;
-frame->Xoffset_top = offset_top;
-frame->Xims = ims;
-frame->Xeptrb = eptrb;
-frame->Xflags = flags;
-
-/* This is where control jumps back to to effect "recursion" */
-
-HEAP_RECURSE:
-
-/* Macros make the argument variables come from the current frame */
-
-#define eptr frame->Xeptr
-#define ecode frame->Xecode
-#define offset_top frame->Xoffset_top
-#define ims frame->Xims
-#define eptrb frame->Xeptrb
-#define flags frame->Xflags
-
-/* Ditto for the local variables */
-
-#define callpat frame->Xcallpat
-#define charptr frame->Xcharptr
-#define data frame->Xdata
-#define lastptr frame->Xlastptr
-#define next frame->Xnext
-#define pp frame->Xpp
-#define prev frame->Xprev
-#define saved_eptr frame->Xsaved_eptr
-
-#define new_recursive frame->Xnew_recursive
-
-#define cur_is_word frame->Xcur_is_word
-#define condition frame->Xcondition
-#define minimize frame->Xminimize
-#define prev_is_word frame->Xprev_is_word
-
-#define original_ims frame->Xoriginal_ims
-
-#define ctype frame->Xctype
-#define fc frame->Xfc
-#define fi frame->Xfi
-#define length frame->Xlength
-#define max frame->Xmax
-#define min frame->Xmin
-#define number frame->Xnumber
-#define offset frame->Xoffset
-#define op frame->Xop
-#define save_capture_last frame->Xsave_capture_last
-#define save_offset1 frame->Xsave_offset1
-#define save_offset2 frame->Xsave_offset2
-#define save_offset3 frame->Xsave_offset3
-#define stacksave frame->Xstacksave
-
-#define newptrb frame->Xnewptrb
-
-/* When recursion is being used, local variables are allocated on the stack and
-get preserved during recursion in the normal way. In this environment, fi and
-i, and fc and c, can be the same variables. */
-
-#else
-#define fi i
-#define fc c
-
-const uschar *callpat; /* Many of these variables are used ony */
-const uschar *charptr; /* small blocks of the code. My normal */
-const uschar *data; /* style of coding would have declared */
-const uschar *lastptr; /* them within each of those blocks. */
-const uschar *next; /* However, in order to accommodate the */
-const uschar *pp; /* version of this code that uses an */
-const uschar *prev; /* external "stack" implemented on the */
-const uschar *saved_eptr; /* heap, it is easier to declare them */
- /* all here, so the declarations can */
-recursion_info new_recursive; /* be cut out in a block. The only */
- /* declarations within blocks below are */
-BOOL cur_is_word; /* for variables that do not have to */
-BOOL condition; /* be preserved over a recursive call */
-BOOL minimize; /* to RMATCH(). */
-BOOL prev_is_word;
-
-unsigned long int original_ims;
-
-int ctype;
-int length;
-int max;
-int min;
-int number;
-int offset;
-int op;
-int save_capture_last;
-int save_offset1, save_offset2, save_offset3;
-int stacksave[REC_STACK_SAVE_MAX];
-
-eptrblock newptrb;
-#endif
-
-
-/* OK, now we can get on with the real code of the function. Recursion is
-specified by the macros RMATCH and RRETURN. When NO_RECURSE is *not* defined,
-these just turn into a recursive call to match() and a "return", respectively.
-However, RMATCH isn't like a function call because it's quite a complicated
-macro. It has to be used in one particular way. This shouldn't, however, impact
-performance when true recursion is being used. */
-
-if (md->match_call_count++ >= md->match_limit) RRETURN(PCRE_ERROR_MATCHLIMIT);
-
-original_ims = ims; /* Save for resetting on ')' */
-
-/* At the start of a bracketed group, add the current subject pointer to the
-stack of such pointers, to be re-instated at the end of the group when we hit
-the closing ket. When match() is called in other circumstances, we don't add to
-this stack. */
-
-if ((flags & match_isgroup) != 0)
- {
- newptrb.epb_prev = eptrb;
- newptrb.epb_saved_eptr = eptr;
- eptrb = &newptrb;
- }
-
-/* Now start processing the operations. */
-
-for (;;)
- {
- op = *ecode;
- minimize = FALSE;
-
- /* Opening capturing bracket. If there is space in the offset vector, save
- the current subject position in the working slot at the top of the vector. We
- mustn't change the current values of the data slot, because they may be set
- from a previous iteration of this group, and be referred to by a reference
- inside the group.
-
- If the bracket fails to match, we need to restore this value and also the
- values of the final offsets, in case they were set by a previous iteration of
- the same bracket.
-
- If there isn't enough space in the offset vector, treat this as if it were a
- non-capturing bracket. Don't worry about setting the flag for the error case
- here; that is handled in the code for KET. */
-
- if (op > OP_BRA)
- {
- number = op - OP_BRA;
-
- /* For extended extraction brackets (large number), we have to fish out the
- number from a dummy opcode at the start. */
-
- if (number > EXTRACT_BASIC_MAX)
- number = GET2(ecode, 2+LINK_SIZE);
- offset = number << 1;
-
-#ifdef DEBUG
- printf("start bracket %d subject=", number);
- pchars(eptr, 16, TRUE, md);
- printf("\n");
-#endif
-
- if (offset < md->offset_max)
- {
- save_offset1 = md->offset_vector[offset];
- save_offset2 = md->offset_vector[offset+1];
- save_offset3 = md->offset_vector[md->offset_end - number];
- save_capture_last = md->capture_last;
-
- DPRINTF(("saving %d %d %d\n", save_offset1, save_offset2, save_offset3));
- md->offset_vector[md->offset_end - number] = eptr - md->start_subject;
-
- do
- {
- RMATCH(rrc, eptr, ecode + 1 + LINK_SIZE, offset_top, md, ims, eptrb,
- match_isgroup);
- if (rrc != MATCH_NOMATCH) RRETURN(rrc);
- md->capture_last = save_capture_last;
- ecode += GET(ecode, 1);
- }
- while (*ecode == OP_ALT);
-
- DPRINTF(("bracket %d failed\n", number));
-
- md->offset_vector[offset] = save_offset1;
- md->offset_vector[offset+1] = save_offset2;
- md->offset_vector[md->offset_end - number] = save_offset3;
-
- RRETURN(MATCH_NOMATCH);
- }
-
- /* Insufficient room for saving captured contents */
-
- else op = OP_BRA;
- }
-
- /* Other types of node can be handled by a switch */
-
- switch(op)
- {
- case OP_BRA: /* Non-capturing bracket: optimized */
- DPRINTF(("start bracket 0\n"));
- do
- {
- RMATCH(rrc, eptr, ecode + 1 + LINK_SIZE, offset_top, md, ims, eptrb,
- match_isgroup);
- if (rrc != MATCH_NOMATCH) RRETURN(rrc);
- ecode += GET(ecode, 1);
- }
- while (*ecode == OP_ALT);
- DPRINTF(("bracket 0 failed\n"));
- RRETURN(MATCH_NOMATCH);
-
- /* Conditional group: compilation checked that there are no more than
- two branches. If the condition is false, skipping the first branch takes us
- past the end if there is only one branch, but that's OK because that is
- exactly what going to the ket would do. */
-
- case OP_COND:
- if (ecode[LINK_SIZE+1] == OP_CREF) /* Condition extract or recurse test */
- {
- offset = GET2(ecode, LINK_SIZE+2) << 1; /* Doubled ref number */
- condition = (offset == CREF_RECURSE * 2)?
- (md->recursive != NULL) :
- (offset < offset_top && md->offset_vector[offset] >= 0);
- RMATCH(rrc, eptr, ecode + (condition?
- (LINK_SIZE + 4) : (LINK_SIZE + 1 + GET(ecode, 1))),
- offset_top, md, ims, eptrb, match_isgroup);
- RRETURN(rrc);
- }
-
- /* The condition is an assertion. Call match() to evaluate it - setting
- the final argument TRUE causes it to stop at the end of an assertion. */
-
- else
- {
- RMATCH(rrc, eptr, ecode + 1 + LINK_SIZE, offset_top, md, ims, NULL,
- match_condassert | match_isgroup);
- if (rrc == MATCH_MATCH)
- {
- ecode += 1 + LINK_SIZE + GET(ecode, LINK_SIZE+2);
- while (*ecode == OP_ALT) ecode += GET(ecode, 1);
- }
- else if (rrc != MATCH_NOMATCH)
- {
- RRETURN(rrc); /* Need braces because of following else */
- }
- else ecode += GET(ecode, 1);
- RMATCH(rrc, eptr, ecode + 1 + LINK_SIZE, offset_top, md, ims, eptrb,
- match_isgroup);
- RRETURN(rrc);
- }
- /* Control never reaches here */
-
- /* Skip over conditional reference or large extraction number data if
- encountered. */
-
- case OP_CREF:
- case OP_BRANUMBER:
- ecode += 3;
- break;
-
- /* End of the pattern. If we are in a recursion, we should restore the
- offsets appropriately and continue from after the call. */
-
- case OP_END:
- if (md->recursive != NULL && md->recursive->group_num == 0)
- {
- recursion_info *rec = md->recursive;
- DPRINTF(("Hit the end in a (?0) recursion\n"));
- md->recursive = rec->prevrec;
- memmove(md->offset_vector, rec->offset_save,
- rec->saved_max * sizeof(int));
- md->start_match = rec->save_start;
- ims = original_ims;
- ecode = rec->after_call;
- break;
- }
-
- /* Otherwise, if PCRE_NOTEMPTY is set, fail if we have matched an empty
- string - backtracking will then try other alternatives, if any. */
-
- if (md->notempty && eptr == md->start_match) RRETURN(MATCH_NOMATCH);
- md->end_match_ptr = eptr; /* Record where we ended */
- md->end_offset_top = offset_top; /* and how many extracts were taken */
- RRETURN(MATCH_MATCH);
-
- /* Change option settings */
-
- case OP_OPT:
- ims = ecode[1];
- ecode += 2;
- DPRINTF(("ims set to %02lx\n", ims));
- break;
-
- /* Assertion brackets. Check the alternative branches in turn - the
- matching won't pass the KET for an assertion. If any one branch matches,
- the assertion is true. Lookbehind assertions have an OP_REVERSE item at the
- start of each branch to move the current point backwards, so the code at
- this level is identical to the lookahead case. */
-
- case OP_ASSERT:
- case OP_ASSERTBACK:
- do
- {
- RMATCH(rrc, eptr, ecode + 1 + LINK_SIZE, offset_top, md, ims, NULL,
- match_isgroup);
- if (rrc == MATCH_MATCH) break;
- if (rrc != MATCH_NOMATCH) RRETURN(rrc);
- ecode += GET(ecode, 1);
- }
- while (*ecode == OP_ALT);
- if (*ecode == OP_KET) RRETURN(MATCH_NOMATCH);
-
- /* If checking an assertion for a condition, return MATCH_MATCH. */
-
- if ((flags & match_condassert) != 0) RRETURN(MATCH_MATCH);
-
- /* Continue from after the assertion, updating the offsets high water
- mark, since extracts may have been taken during the assertion. */
-
- do ecode += GET(ecode,1); while (*ecode == OP_ALT);
- ecode += 1 + LINK_SIZE;
- offset_top = md->end_offset_top;
- continue;
-
- /* Negative assertion: all branches must fail to match */
-
- case OP_ASSERT_NOT:
- case OP_ASSERTBACK_NOT:
- do
- {
- RMATCH(rrc, eptr, ecode + 1 + LINK_SIZE, offset_top, md, ims, NULL,
- match_isgroup);
- if (rrc == MATCH_MATCH) RRETURN(MATCH_NOMATCH);
- if (rrc != MATCH_NOMATCH) RRETURN(rrc);
- ecode += GET(ecode,1);
- }
- while (*ecode == OP_ALT);
-
- if ((flags & match_condassert) != 0) RRETURN(MATCH_MATCH);
-
- ecode += 1 + LINK_SIZE;
- continue;
-
- /* Move the subject pointer back. This occurs only at the start of
- each branch of a lookbehind assertion. If we are too close to the start to
- move back, this match function fails. When working with UTF-8 we move
- back a number of characters, not bytes. */
-
- case OP_REVERSE:
-#ifdef SUPPORT_UTF8
- if (md->utf8)
- {
- c = GET(ecode,1);
- for (i = 0; i < c; i++)
- {
- eptr--;
- if (eptr < md->start_subject) RRETURN(MATCH_NOMATCH);
- BACKCHAR(eptr)
- }
- }
- else
-#endif
-
- /* No UTF-8 support, or not in UTF-8 mode: count is byte count */
-
- {
- eptr -= GET(ecode,1);
- if (eptr < md->start_subject) RRETURN(MATCH_NOMATCH);
- }
-
- /* Skip to next op code */
-
- ecode += 1 + LINK_SIZE;
- break;
-
- /* The callout item calls an external function, if one is provided, passing
- details of the match so far. This is mainly for debugging, though the
- function is able to force a failure. */
-
- case OP_CALLOUT:
- if (pcre_callout != NULL)
- {
- pcre_callout_block cb;
- cb.version = 0; /* Version 0 of the callout block */
- cb.callout_number = ecode[1];
- cb.offset_vector = md->offset_vector;
- cb.subject = (const char *)md->start_subject;
- cb.subject_length = md->end_subject - md->start_subject;
- cb.start_match = md->start_match - md->start_subject;
- cb.current_position = eptr - md->start_subject;
- cb.capture_top = offset_top/2;
- cb.capture_last = md->capture_last;
- cb.callout_data = md->callout_data;
- if ((rrc = (*pcre_callout)(&cb)) > 0) RRETURN(MATCH_NOMATCH);
- if (rrc < 0) RRETURN(rrc);
- }
- ecode += 2;
- break;
-
- /* Recursion either matches the current regex, or some subexpression. The
- offset data is the offset to the starting bracket from the start of the
- whole pattern. (This is so that it works from duplicated subpatterns.)
-
- If there are any capturing brackets started but not finished, we have to
- save their starting points and reinstate them after the recursion. However,
- we don't know how many such there are (offset_top records the completed
- total) so we just have to save all the potential data. There may be up to
- 65535 such values, which is too large to put on the stack, but using malloc
- for small numbers seems expensive. As a compromise, the stack is used when
- there are no more than REC_STACK_SAVE_MAX values to store; otherwise malloc
- is used. A problem is what to do if the malloc fails ... there is no way of
- returning to the top level with an error. Save the top REC_STACK_SAVE_MAX
- values on the stack, and accept that the rest may be wrong.
-
- There are also other values that have to be saved. We use a chained
- sequence of blocks that actually live on the stack. Thanks to Robin Houston
- for the original version of this logic. */
-
- case OP_RECURSE:
- {
- callpat = md->start_code + GET(ecode, 1);
- new_recursive.group_num = *callpat - OP_BRA;
-
- /* For extended extraction brackets (large number), we have to fish out
- the number from a dummy opcode at the start. */
-
- if (new_recursive.group_num > EXTRACT_BASIC_MAX)
- new_recursive.group_num = GET2(callpat, 2+LINK_SIZE);
-
- /* Add to "recursing stack" */
-
- new_recursive.prevrec = md->recursive;
- md->recursive = &new_recursive;
-
- /* Find where to continue from afterwards */
-
- ecode += 1 + LINK_SIZE;
- new_recursive.after_call = ecode;
-
- /* Now save the offset data. */
-
- new_recursive.saved_max = md->offset_end;
- if (new_recursive.saved_max <= REC_STACK_SAVE_MAX)
- new_recursive.offset_save = stacksave;
- else
- {
- new_recursive.offset_save =
- (int *)(pcre_malloc)(new_recursive.saved_max * sizeof(int));
- if (new_recursive.offset_save == NULL) RRETURN(PCRE_ERROR_NOMEMORY);
- }
-
- memcpy(new_recursive.offset_save, md->offset_vector,
- new_recursive.saved_max * sizeof(int));
- new_recursive.save_start = md->start_match;
- md->start_match = eptr;
-
- /* OK, now we can do the recursion. For each top-level alternative we
- restore the offset and recursion data. */
-
- DPRINTF(("Recursing into group %d\n", new_recursive.group_num));
- do
- {
- RMATCH(rrc, eptr, callpat + 1 + LINK_SIZE, offset_top, md, ims,
- eptrb, match_isgroup);
- if (rrc == MATCH_MATCH)
- {
- md->recursive = new_recursive.prevrec;
- if (new_recursive.offset_save != stacksave)
- (pcre_free)(new_recursive.offset_save);
- RRETURN(MATCH_MATCH);
- }
- else if (rrc != MATCH_NOMATCH) RRETURN(rrc);
-
- md->recursive = &new_recursive;
- memcpy(md->offset_vector, new_recursive.offset_save,
- new_recursive.saved_max * sizeof(int));
- callpat += GET(callpat, 1);
- }
- while (*callpat == OP_ALT);
-
- DPRINTF(("Recursion didn't match\n"));
- md->recursive = new_recursive.prevrec;
- if (new_recursive.offset_save != stacksave)
- (pcre_free)(new_recursive.offset_save);
- RRETURN(MATCH_NOMATCH);
- }
- /* Control never reaches here */
-
- /* "Once" brackets are like assertion brackets except that after a match,
- the point in the subject string is not moved back. Thus there can never be
- a move back into the brackets. Friedl calls these "atomic" subpatterns.
- Check the alternative branches in turn - the matching won't pass the KET
- for this kind of subpattern. If any one branch matches, we carry on as at
- the end of a normal bracket, leaving the subject pointer. */
-
- case OP_ONCE:
- {
- prev = ecode;
- saved_eptr = eptr;
-
- do
- {
- RMATCH(rrc, eptr, ecode + 1 + LINK_SIZE, offset_top, md, ims,
- eptrb, match_isgroup);
- if (rrc == MATCH_MATCH) break;
- if (rrc != MATCH_NOMATCH) RRETURN(rrc);
- ecode += GET(ecode,1);
- }
- while (*ecode == OP_ALT);
-
- /* If hit the end of the group (which could be repeated), fail */
-
- if (*ecode != OP_ONCE && *ecode != OP_ALT) RRETURN(MATCH_NOMATCH);
-
- /* Continue as from after the assertion, updating the offsets high water
- mark, since extracts may have been taken. */
-
- do ecode += GET(ecode,1); while (*ecode == OP_ALT);
-
- offset_top = md->end_offset_top;
- eptr = md->end_match_ptr;
-
- /* For a non-repeating ket, just continue at this level. This also
- happens for a repeating ket if no characters were matched in the group.
- This is the forcible breaking of infinite loops as implemented in Perl
- 5.005. If there is an options reset, it will get obeyed in the normal
- course of events. */
-
- if (*ecode == OP_KET || eptr == saved_eptr)
- {
- ecode += 1+LINK_SIZE;
- break;
- }
-
- /* The repeating kets try the rest of the pattern or restart from the
- preceding bracket, in the appropriate order. We need to reset any options
- that changed within the bracket before re-running it, so check the next
- opcode. */
-
- if (ecode[1+LINK_SIZE] == OP_OPT)
- {
- ims = (ims & ~PCRE_IMS) | ecode[4];
- DPRINTF(("ims set to %02lx at group repeat\n", ims));
- }
-
- if (*ecode == OP_KETRMIN)
- {
- RMATCH(rrc, eptr, ecode + 1 + LINK_SIZE, offset_top, md, ims, eptrb, 0);
- if (rrc != MATCH_NOMATCH) RRETURN(rrc);
- RMATCH(rrc, eptr, prev, offset_top, md, ims, eptrb, match_isgroup);
- if (rrc != MATCH_NOMATCH) RRETURN(rrc);
- }
- else /* OP_KETRMAX */
- {
- RMATCH(rrc, eptr, prev, offset_top, md, ims, eptrb, match_isgroup);
- if (rrc != MATCH_NOMATCH) RRETURN(rrc);
- RMATCH(rrc, eptr, ecode + 1+LINK_SIZE, offset_top, md, ims, eptrb, 0);
- if (rrc != MATCH_NOMATCH) RRETURN(rrc);
- }
- }
- RRETURN(MATCH_NOMATCH);
-
- /* An alternation is the end of a branch; scan along to find the end of the
- bracketed group and go to there. */
-
- case OP_ALT:
- 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. */
-
- case OP_BRAZERO:
- {
- next = ecode+1;
- RMATCH(rrc, eptr, next, offset_top, md, ims, eptrb, match_isgroup);
- if (rrc != MATCH_NOMATCH) RRETURN(rrc);
- do next += GET(next,1); while (*next == OP_ALT);
- ecode = next + 1+LINK_SIZE;
- }
- break;
-
- case OP_BRAMINZERO:
- {
- next = ecode+1;
- do next += GET(next,1); while (*next == OP_ALT);
- RMATCH(rrc, eptr, next + 1+LINK_SIZE, offset_top, md, ims, eptrb,
- match_isgroup);
- if (rrc != MATCH_NOMATCH) RRETURN(rrc);
- ecode++;
- }
- break;
-
- /* End of a group, repeated or non-repeating. If we are at the end of
- an assertion "group", stop matching and return MATCH_MATCH, but record the
- current high water mark for use by positive assertions. Do this also
- for the "once" (not-backup up) groups. */
-
- case OP_KET:
- case OP_KETRMIN:
- case OP_KETRMAX:
- {
- prev = ecode - GET(ecode, 1);
- saved_eptr = eptrb->epb_saved_eptr;
-
- /* Back up the stack of bracket start pointers. */
-
- eptrb = eptrb->epb_prev;
-
- if (*prev == OP_ASSERT || *prev == OP_ASSERT_NOT ||
- *prev == OP_ASSERTBACK || *prev == OP_ASSERTBACK_NOT ||
- *prev == OP_ONCE)
- {
- md->end_match_ptr = eptr; /* For ONCE */
- md->end_offset_top = offset_top;
- RRETURN(MATCH_MATCH);
- }
-
- /* In all other cases except a conditional group we have to check the
- group number back at the start and if necessary complete handling an
- extraction by setting the offsets and bumping the high water mark. */
-
- if (*prev != OP_COND)
- {
- number = *prev - OP_BRA;
-
- /* For extended extraction brackets (large number), we have to fish out
- the number from a dummy opcode at the start. */
-
- if (number > EXTRACT_BASIC_MAX) number = GET2(prev, 2+LINK_SIZE);
- offset = number << 1;
-
-#ifdef DEBUG
- printf("end bracket %d", number);
- printf("\n");
-#endif
-
- /* Test for a numbered group. This includes groups called as a result
- of recursion. Note that whole-pattern recursion is coded as a recurse
- into group 0, so it won't be picked up here. Instead, we catch it when
- the OP_END is reached. */
-
- if (number > 0)
- {
- md->capture_last = number;
- if (offset >= md->offset_max) md->offset_overflow = TRUE; else
- {
- md->offset_vector[offset] =
- md->offset_vector[md->offset_end - number];
- md->offset_vector[offset+1] = eptr - md->start_subject;
- if (offset_top <= offset) offset_top = offset + 2;
- }
-
- /* Handle a recursively called group. Restore the offsets
- appropriately and continue from after the call. */
-
- if (md->recursive != NULL && md->recursive->group_num == number)
- {
- recursion_info *rec = md->recursive;
- DPRINTF(("Recursion (%d) succeeded - continuing\n", number));
- md->recursive = rec->prevrec;
- md->start_match = rec->save_start;
- memcpy(md->offset_vector, rec->offset_save,
- rec->saved_max * sizeof(int));
- ecode = rec->after_call;
- ims = original_ims;
- break;
- }
- }
- }
-
- /* Reset the value of the ims flags, in case they got changed during
- the group. */
-
- ims = original_ims;
- DPRINTF(("ims reset to %02lx\n", ims));
-
- /* For a non-repeating ket, just continue at this level. This also
- happens for a repeating ket if no characters were matched in the group.
- This is the forcible breaking of infinite loops as implemented in Perl
- 5.005. If there is an options reset, it will get obeyed in the normal
- course of events. */
-
- if (*ecode == OP_KET || eptr == saved_eptr)
- {
- ecode += 1 + LINK_SIZE;
- break;
- }
-
- /* The repeating kets try the rest of the pattern or restart from the
- preceding bracket, in the appropriate order. */
-
- if (*ecode == OP_KETRMIN)
- {
- RMATCH(rrc, eptr, ecode + 1+LINK_SIZE, offset_top, md, ims, eptrb, 0);
- if (rrc != MATCH_NOMATCH) RRETURN(rrc);
- RMATCH(rrc, eptr, prev, offset_top, md, ims, eptrb, match_isgroup);
- if (rrc != MATCH_NOMATCH) RRETURN(rrc);
- }
- else /* OP_KETRMAX */
- {
- RMATCH(rrc, eptr, prev, offset_top, md, ims, eptrb, match_isgroup);
- if (rrc != MATCH_NOMATCH) RRETURN(rrc);
- RMATCH(rrc, eptr, ecode + 1+LINK_SIZE, offset_top, md, ims, eptrb, 0);
- if (rrc != MATCH_NOMATCH) RRETURN(rrc);
- }
- }
-
- RRETURN(MATCH_NOMATCH);
-
- /* Start of subject unless notbol, or after internal newline if multiline */
-
- case OP_CIRC:
- if (md->notbol && eptr == md->start_subject) RRETURN(MATCH_NOMATCH);
- if ((ims & PCRE_MULTILINE) != 0)
- {
- if (eptr != md->start_subject && eptr[-1] != NEWLINE)
- RRETURN(MATCH_NOMATCH);
- ecode++;
- break;
- }
- /* ... else fall through */
-
- /* Start of subject assertion */
-
- case OP_SOD:
- if (eptr != md->start_subject) RRETURN(MATCH_NOMATCH);
- ecode++;
- break;
-
- /* Start of match assertion */
-
- case OP_SOM:
- if (eptr != md->start_subject + md->start_offset) RRETURN(MATCH_NOMATCH);
- ecode++;
- break;
-
- /* Assert before internal newline if multiline, or before a terminating
- newline unless endonly is set, else end of subject unless noteol is set. */
-
- case OP_DOLL:
- if ((ims & PCRE_MULTILINE) != 0)
- {
- if (eptr < md->end_subject)
- { if (*eptr != NEWLINE) RRETURN(MATCH_NOMATCH); }
- else
- { if (md->noteol) RRETURN(MATCH_NOMATCH); }
- ecode++;
- break;
- }
- else
- {
- if (md->noteol) RRETURN(MATCH_NOMATCH);
- if (!md->endonly)
- {
- if (eptr < md->end_subject - 1 ||
- (eptr == md->end_subject - 1 && *eptr != NEWLINE))
- RRETURN(MATCH_NOMATCH);
- ecode++;
- break;
- }
- }
- /* ... else fall through */
-
- /* End of subject assertion (\z) */
-
- case OP_EOD:
- if (eptr < md->end_subject) RRETURN(MATCH_NOMATCH);
- ecode++;
- break;
-
- /* End of subject or ending \n assertion (\Z) */
-
- case OP_EODN:
- if (eptr < md->end_subject - 1 ||
- (eptr == md->end_subject - 1 && *eptr != NEWLINE)) RRETURN(MATCH_NOMATCH);
- ecode++;
- break;
-
- /* Word boundary assertions */
-
- case OP_NOT_WORD_BOUNDARY:
- case OP_WORD_BOUNDARY:
- {
-
- /* Find out if the previous and current characters are "word" characters.
- It takes a bit more work in UTF-8 mode. Characters > 255 are assumed to
- be "non-word" characters. */
-
-#ifdef SUPPORT_UTF8
- if (md->utf8)
- {
- if (eptr == md->start_subject) prev_is_word = FALSE; else
- {
- lastptr = eptr - 1;
- while((*lastptr & 0xc0) == 0x80) lastptr--;
- GETCHAR(c, lastptr);
- prev_is_word = c < 256 && (md->ctypes[c] & ctype_word) != 0;
- }
- if (eptr >= md->end_subject) cur_is_word = FALSE; else
- {
- GETCHAR(c, eptr);
- cur_is_word = c < 256 && (md->ctypes[c] & ctype_word) != 0;
- }
- }
- else
-#endif
-
- /* More streamlined when not in UTF-8 mode */
-
- {
- prev_is_word = (eptr != md->start_subject) &&
- ((md->ctypes[eptr[-1]] & ctype_word) != 0);
- cur_is_word = (eptr < md->end_subject) &&
- ((md->ctypes[*eptr] & ctype_word) != 0);
- }
-
- /* Now see if the situation is what we want */
-
- if ((*ecode++ == OP_WORD_BOUNDARY)?
- cur_is_word == prev_is_word : cur_is_word != prev_is_word)
- RRETURN(MATCH_NOMATCH);
- }
- break;
-
- /* Match a single character type; inline for speed */
-
- case OP_ANY:
- if ((ims & PCRE_DOTALL) == 0 && eptr < md->end_subject && *eptr == NEWLINE)
- RRETURN(MATCH_NOMATCH);
- if (eptr++ >= md->end_subject) RRETURN(MATCH_NOMATCH);
-#ifdef SUPPORT_UTF8
- if (md->utf8)
- while (eptr < md->end_subject && (*eptr & 0xc0) == 0x80) eptr++;
-#endif
- ecode++;
- break;
-
- /* Match a single byte, even in UTF-8 mode. This opcode really does match
- any byte, even newline, independent of the setting of PCRE_DOTALL. */
-
- case OP_ANYBYTE:
- if (eptr++ >= md->end_subject) RRETURN(MATCH_NOMATCH);
- ecode++;
- break;
-
- case OP_NOT_DIGIT:
- if (eptr >= md->end_subject) RRETURN(MATCH_NOMATCH);
- GETCHARINCTEST(c, eptr);
- if (
-#ifdef SUPPORT_UTF8
- c < 256 &&
-#endif
- (md->ctypes[c] & ctype_digit) != 0
- )
- RRETURN(MATCH_NOMATCH);
- ecode++;
- break;
-
- case OP_DIGIT:
- if (eptr >= md->end_subject) RRETURN(MATCH_NOMATCH);
- GETCHARINCTEST(c, eptr);
- if (
-#ifdef SUPPORT_UTF8
- c >= 256 ||
-#endif
- (md->ctypes[c] & ctype_digit) == 0
- )
- RRETURN(MATCH_NOMATCH);
- ecode++;
- break;
-
- case OP_NOT_WHITESPACE:
- if (eptr >= md->end_subject) RRETURN(MATCH_NOMATCH);
- GETCHARINCTEST(c, eptr);
- if (
-#ifdef SUPPORT_UTF8
- c < 256 &&
-#endif
- (md->ctypes[c] & ctype_space) != 0
- )
- RRETURN(MATCH_NOMATCH);
- ecode++;
- break;
-
- case OP_WHITESPACE:
- if (eptr >= md->end_subject) RRETURN(MATCH_NOMATCH);
- GETCHARINCTEST(c, eptr);
- if (
-#ifdef SUPPORT_UTF8
- c >= 256 ||
-#endif
- (md->ctypes[c] & ctype_space) == 0
- )
- RRETURN(MATCH_NOMATCH);
- ecode++;
- break;
-
- case OP_NOT_WORDCHAR:
- if (eptr >= md->end_subject) RRETURN(MATCH_NOMATCH);
- GETCHARINCTEST(c, eptr);
- if (
-#ifdef SUPPORT_UTF8
- c < 256 &&
-#endif
- (md->ctypes[c] & ctype_word) != 0
- )
- RRETURN(MATCH_NOMATCH);
- ecode++;
- break;
-
- case OP_WORDCHAR:
- if (eptr >= md->end_subject) RRETURN(MATCH_NOMATCH);
- GETCHARINCTEST(c, eptr);
- if (
-#ifdef SUPPORT_UTF8
- c >= 256 ||
-#endif
- (md->ctypes[c] & ctype_word) == 0
- )
- RRETURN(MATCH_NOMATCH);
- ecode++;
- break;
-
- /* Match a back reference, possibly repeatedly. Look past the end of the
- item to see if there is repeat information following. The code is similar
- to that for character classes, but repeated for efficiency. Then obey
- similar code to character type repeats - written out again for speed.
- However, if the referenced string is the empty string, always treat
- it as matched, any number of times (otherwise there could be infinite
- loops). */
-
- case OP_REF:
- {
- offset = GET2(ecode, 1) << 1; /* Doubled ref number */
- ecode += 3; /* Advance past item */
-
- /* 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. */
-
- length = (offset >= offset_top || md->offset_vector[offset] < 0)?
- md->end_subject - eptr + 1 :
- md->offset_vector[offset+1] - md->offset_vector[offset];
-
- /* Set up for repetition, or handle the non-repeated case */
-
- switch (*ecode)
- {
- case OP_CRSTAR:
- case OP_CRMINSTAR:
- case OP_CRPLUS:
- case OP_CRMINPLUS:
- case OP_CRQUERY:
- case OP_CRMINQUERY:
- c = *ecode++ - OP_CRSTAR;
- minimize = (c & 1) != 0;
- min = rep_min[c]; /* Pick up values from tables; */
- max = rep_max[c]; /* zero for max => infinity */
- if (max == 0) max = INT_MAX;
- break;
-
- case OP_CRRANGE:
- case OP_CRMINRANGE:
- minimize = (*ecode == OP_CRMINRANGE);
- min = GET2(ecode, 1);
- max = GET2(ecode, 3);
- if (max == 0) max = INT_MAX;
- ecode += 5;
- break;
-
- default: /* No repeat follows */
- if (!match_ref(offset, eptr, length, md, ims)) RRETURN(MATCH_NOMATCH);
- eptr += length;
- continue; /* With the main loop */
- }
-
- /* If the length of the reference is zero, just continue with the
- main loop. */
-
- if (length == 0) continue;
-
- /* First, ensure the minimum number of matches are present. We get back
- the length of the reference string explicitly rather than passing the
- address of eptr, so that eptr can be a register variable. */
-
- for (i = 1; i <= min; i++)
- {
- if (!match_ref(offset, eptr, length, md, ims)) RRETURN(MATCH_NOMATCH);
- eptr += length;
- }
-
- /* If min = max, continue at the same level without recursion.
- They are not both allowed to be zero. */
-
- if (min == max) continue;
-
- /* If minimizing, keep trying and advancing the pointer */
-
- if (minimize)
- {
- for (fi = min;; fi++)
- {
- RMATCH(rrc, eptr, ecode, offset_top, md, ims, eptrb, 0);
- if (rrc != MATCH_NOMATCH) RRETURN(rrc);
- if (fi >= max || !match_ref(offset, eptr, length, md, ims))
- RRETURN(MATCH_NOMATCH);
- eptr += length;
- }
- /* Control never gets here */
- }
-
- /* If maximizing, find the longest string and work backwards */
-
- else
- {
- pp = eptr;
- for (i = min; i < max; i++)
- {
- if (!match_ref(offset, eptr, length, md, ims)) break;
- eptr += length;
- }
- while (eptr >= pp)
- {
- RMATCH(rrc, eptr, ecode, offset_top, md, ims, eptrb, 0);
- if (rrc != MATCH_NOMATCH) RRETURN(rrc);
- eptr -= length;
- }
- RRETURN(MATCH_NOMATCH);
- }
- }
- /* Control never gets here */
-
-
-
- /* Match a bit-mapped character class, possibly repeatedly. This op code is
- used when all the characters in the class have values in the range 0-255.
- The only difference between OP_CLASS and OP_NCLASS occurs when a data
- character outside the range is encountered.
-
- First, look past the end of the item to see if there is repeat information
- following. Then obey similar code to character type repeats - written out
- again for speed. */
-
- case OP_NCLASS:
- case OP_CLASS:
- {
- data = ecode + 1; /* Save for matching */
- ecode += 33; /* Advance past the item */
-
- switch (*ecode)
- {
- case OP_CRSTAR:
- case OP_CRMINSTAR:
- case OP_CRPLUS:
- case OP_CRMINPLUS:
- case OP_CRQUERY:
- case OP_CRMINQUERY:
- c = *ecode++ - OP_CRSTAR;
- minimize = (c & 1) != 0;
- min = rep_min[c]; /* Pick up values from tables; */
- max = rep_max[c]; /* zero for max => infinity */
- if (max == 0) max = INT_MAX;
- break;
-
- case OP_CRRANGE:
- case OP_CRMINRANGE:
- minimize = (*ecode == OP_CRMINRANGE);
- min = GET2(ecode, 1);
- max = GET2(ecode, 3);
- if (max == 0) max = INT_MAX;
- ecode += 5;
- break;
-
- default: /* No repeat follows */
- min = max = 1;
- break;
- }
-
- /* First, ensure the minimum number of matches are present. */
-
-#ifdef SUPPORT_UTF8
- /* UTF-8 mode */
- if (md->utf8)
- {
- for (i = 1; i <= min; i++)
- {
- if (eptr >= md->end_subject) RRETURN(MATCH_NOMATCH);
- GETCHARINC(c, eptr);
- if (c > 255)
- {
- if (op == OP_CLASS) RRETURN(MATCH_NOMATCH);
- }
- else
- {
- if ((data[c/8] & (1 << (c&7))) == 0) RRETURN(MATCH_NOMATCH);
- }
- }
- }
- else
-#endif
- /* Not UTF-8 mode */
- {
- for (i = 1; i <= min; i++)
- {
- if (eptr >= md->end_subject) RRETURN(MATCH_NOMATCH);
- c = *eptr++;
- if ((data[c/8] & (1 << (c&7))) == 0) RRETURN(MATCH_NOMATCH);
- }
- }
-
- /* If max == min we can continue with the main loop without the
- need to recurse. */
-
- if (min == max) continue;
-
- /* If minimizing, keep testing the rest of the expression and advancing
- the pointer while it matches the class. */
-
- if (minimize)
- {
-#ifdef SUPPORT_UTF8
- /* UTF-8 mode */
- if (md->utf8)
- {
- for (fi = min;; fi++)
- {
- RMATCH(rrc, eptr, ecode, offset_top, md, ims, eptrb, 0);
- if (rrc != MATCH_NOMATCH) RRETURN(rrc);
- if (fi >= max || eptr >= md->end_subject) RRETURN(MATCH_NOMATCH);
- GETCHARINC(c, eptr);
- if (c > 255)
- {
- if (op == OP_CLASS) RRETURN(MATCH_NOMATCH);
- }
- else
- {
- if ((data[c/8] & (1 << (c&7))) == 0) RRETURN(MATCH_NOMATCH);
- }
- }
- }
- else
-#endif
- /* Not UTF-8 mode */
- {
- for (fi = min;; fi++)
- {
- RMATCH(rrc, eptr, ecode, offset_top, md, ims, eptrb, 0);
- if (rrc != MATCH_NOMATCH) RRETURN(rrc);
- if (fi >= max || eptr >= md->end_subject) RRETURN(MATCH_NOMATCH);
- c = *eptr++;
- if ((data[c/8] & (1 << (c&7))) == 0) RRETURN(MATCH_NOMATCH);
- }
- }
- /* Control never gets here */
- }
-
- /* If maximizing, find the longest possible run, then work backwards. */
-
- else
- {
- pp = eptr;
-
-#ifdef SUPPORT_UTF8
- /* UTF-8 mode */
- if (md->utf8)
- {
- for (i = min; i < max; i++)
- {
- int len = 1;
- if (eptr >= md->end_subject) break;
- GETCHARLEN(c, eptr, len);
- if (c > 255)
- {
- if (op == OP_CLASS) break;
- }
- else
- {
- if ((data[c/8] & (1 << (c&7))) == 0) break;
- }
- eptr += len;
- }
- for (;;)
- {
- RMATCH(rrc, eptr, ecode, offset_top, md, ims, eptrb, 0);
- if (rrc != MATCH_NOMATCH) RRETURN(rrc);
- if (eptr-- == pp) break; /* Stop if tried at original pos */
- BACKCHAR(eptr);
- }
- }
- else
-#endif
- /* Not UTF-8 mode */
- {
- for (i = min; i < max; i++)
- {
- if (eptr >= md->end_subject) break;
- c = *eptr;
- if ((data[c/8] & (1 << (c&7))) == 0) break;
- eptr++;
- }
- while (eptr >= pp)
- {
- RMATCH(rrc, eptr, ecode, offset_top, md, ims, eptrb, 0);
- eptr--;
- if (rrc != MATCH_NOMATCH) RRETURN(rrc);
- }
- }
-
- RRETURN(MATCH_NOMATCH);
- }
- }
- /* Control never gets here */
-
-
- /* Match an extended character class. This opcode is encountered only
- in UTF-8 mode, because that's the only time it is compiled. */
-
-#ifdef SUPPORT_UTF8
- case OP_XCLASS:
- {
- data = ecode + 1 + LINK_SIZE; /* Save for matching */
- ecode += GET(ecode, 1); /* Advance past the item */
-
- switch (*ecode)
- {
- case OP_CRSTAR:
- case OP_CRMINSTAR:
- case OP_CRPLUS:
- case OP_CRMINPLUS:
- case OP_CRQUERY:
- case OP_CRMINQUERY:
- c = *ecode++ - OP_CRSTAR;
- minimize = (c & 1) != 0;
- min = rep_min[c]; /* Pick up values from tables; */
- max = rep_max[c]; /* zero for max => infinity */
- if (max == 0) max = INT_MAX;
- break;
-
- case OP_CRRANGE:
- case OP_CRMINRANGE:
- minimize = (*ecode == OP_CRMINRANGE);
- min = GET2(ecode, 1);
- max = GET2(ecode, 3);
- if (max == 0) max = INT_MAX;
- ecode += 5;
- break;
-
- default: /* No repeat follows */
- min = max = 1;
- break;
- }
-
- /* First, ensure the minimum number of matches are present. */
-
- for (i = 1; i <= min; i++)
- {
- if (eptr >= md->end_subject) RRETURN(MATCH_NOMATCH);
- GETCHARINC(c, eptr);
- if (!match_xclass(c, data)) RRETURN(MATCH_NOMATCH);
- }
-
- /* If max == min we can continue with the main loop without the
- need to recurse. */
-
- if (min == max) continue;
-
- /* If minimizing, keep testing the rest of the expression and advancing
- the pointer while it matches the class. */
-
- if (minimize)
- {
- for (fi = min;; fi++)
- {
- RMATCH(rrc, eptr, ecode, offset_top, md, ims, eptrb, 0);
- if (rrc != MATCH_NOMATCH) RRETURN(rrc);
- if (fi >= max || eptr >= md->end_subject) RRETURN(MATCH_NOMATCH);
- GETCHARINC(c, eptr);
- if (!match_xclass(c, data)) RRETURN(MATCH_NOMATCH);
- }
- /* Control never gets here */
- }
-
- /* If maximizing, find the longest possible run, then work backwards. */
-
- else
- {
- pp = eptr;
- for (i = min; i < max; i++)
- {
- int len = 1;
- if (eptr >= md->end_subject) break;
- GETCHARLEN(c, eptr, len);
- if (!match_xclass(c, data)) break;
- eptr += len;
- }
- for(;;)
- {
- RMATCH(rrc, eptr, ecode, offset_top, md, ims, eptrb, 0);
- if (rrc != MATCH_NOMATCH) RRETURN(rrc);
- if (eptr-- == pp) break; /* Stop if tried at original pos */
- BACKCHAR(eptr)
- }
- RRETURN(MATCH_NOMATCH);
- }
-
- /* Control never gets here */
- }
-#endif /* End of XCLASS */
-
- /* Match a run of characters */
-
- case OP_CHARS:
- {
- register int slen = ecode[1];
- ecode += 2;
-
-#ifdef DEBUG /* Sigh. Some compilers never learn. */
- if (eptr >= md->end_subject)
- printf("matching subject <null> against pattern ");
- else
- {
- printf("matching subject ");
- pchars(eptr, slen, TRUE, md);
- printf(" against pattern ");
- }
- pchars(ecode, slen, FALSE, md);
- printf("\n");
-#endif
-
- if (slen > md->end_subject - eptr) RRETURN(MATCH_NOMATCH);
- if ((ims & PCRE_CASELESS) != 0)
- {
- while (slen-- > 0)
- if (md->lcc[*ecode++] != md->lcc[*eptr++])
- RRETURN(MATCH_NOMATCH);
- }
- else
- {
- while (slen-- > 0) if (*ecode++ != *eptr++) RRETURN(MATCH_NOMATCH);
- }
- }
- break;
-
- /* Match a single character repeatedly; different opcodes share code. */
-
- case OP_EXACT:
- min = max = GET2(ecode, 1);
- ecode += 3;
- goto REPEATCHAR;
-
- case OP_UPTO:
- case OP_MINUPTO:
- min = 0;
- max = GET2(ecode, 1);
- minimize = *ecode == OP_MINUPTO;
- ecode += 3;
- goto REPEATCHAR;
-
- case OP_STAR:
- case OP_MINSTAR:
- case OP_PLUS:
- case OP_MINPLUS:
- case OP_QUERY:
- case OP_MINQUERY:
- c = *ecode++ - OP_STAR;
- minimize = (c & 1) != 0;
- min = rep_min[c]; /* Pick up values from tables; */
- max = rep_max[c]; /* zero for max => infinity */
- if (max == 0) max = INT_MAX;
-
- /* Common code for all repeated single-character matches. We can give
- up quickly if there are fewer than the minimum number of characters left in
- the subject. */
-
- REPEATCHAR:
-#ifdef SUPPORT_UTF8
- if (md->utf8)
- {
- length = 1;
- charptr = ecode;
- GETCHARLEN(fc, ecode, length);
- if (min * length > md->end_subject - eptr) RRETURN(MATCH_NOMATCH);
- ecode += length;
-
- /* Handle multibyte character matching specially here. There is no
- support for any kind of casing for multibyte characters. */
-
- if (length > 1)
- {
- for (i = 1; i <= min; i++)
- {
- if (memcmp(eptr, charptr, length) != 0) RRETURN(MATCH_NOMATCH);
- eptr += length;
- }
-
- if (min == max) continue;
-
- if (minimize)
- {
- for (fi = min;; fi++)
- {
- RMATCH(rrc, eptr, ecode, offset_top, md, ims, eptrb, 0);
- if (rrc != MATCH_NOMATCH) RRETURN(rrc);
- if (fi >= max ||
- eptr >= md->end_subject ||
- memcmp(eptr, charptr, length) != 0)
- RRETURN(MATCH_NOMATCH);
- eptr += length;
- }
- /* Control never gets here */
- }
- else
- {
- pp = eptr;
- for (i = min; i < max; i++)
- {
- if (eptr > md->end_subject - length ||
- memcmp(eptr, charptr, length) != 0)
- break;
- eptr += length;
- }
- while (eptr >= pp)
- {
- RMATCH(rrc, eptr, ecode, offset_top, md, ims, eptrb, 0);
- if (rrc != MATCH_NOMATCH) RRETURN(rrc);
- eptr -= length;
- }
- RRETURN(MATCH_NOMATCH);
- }
- /* Control never gets here */
- }
-
- /* If the length of a UTF-8 character is 1, we fall through here, and
- obey the code as for non-UTF-8 characters below, though in this case the
- value of fc will always be < 128. */
- }
- else
-#endif
-
- /* When not in UTF-8 mode, load a single-byte character. */
- {
- if (min > md->end_subject - eptr) RRETURN(MATCH_NOMATCH);
- fc = *ecode++;
- }
-
- /* The value of fc at this point is always less than 256, though we may or
- may not be in UTF-8 mode. The code is duplicated for the caseless and
- caseful cases, for speed, since matching characters is likely to be quite
- common. First, ensure the minimum number of matches are present. If min =
- max, continue at the same level without recursing. Otherwise, if
- minimizing, keep trying the rest of the expression and advancing one
- matching character if failing, up to the maximum. Alternatively, if
- maximizing, find the maximum number of characters and work backwards. */
-
- DPRINTF(("matching %c{%d,%d} against subject %.*s\n", fc, min, max,
- max, eptr));
-
- if ((ims & PCRE_CASELESS) != 0)
- {
- fc = md->lcc[fc];
- for (i = 1; i <= min; i++)
- if (fc != md->lcc[*eptr++]) RRETURN(MATCH_NOMATCH);
- if (min == max) continue;
- if (minimize)
- {
- for (fi = min;; fi++)
- {
- RMATCH(rrc, eptr, ecode, offset_top, md, ims, eptrb, 0);
- if (rrc != MATCH_NOMATCH) RRETURN(rrc);
- if (fi >= max || eptr >= md->end_subject ||
- fc != md->lcc[*eptr++])
- RRETURN(MATCH_NOMATCH);
- }
- /* Control never gets here */
- }
- else
- {
- pp = eptr;
- for (i = min; i < max; i++)
- {
- if (eptr >= md->end_subject || fc != md->lcc[*eptr]) break;
- eptr++;
- }
- while (eptr >= pp)
- {
- RMATCH(rrc, eptr, ecode, offset_top, md, ims, eptrb, 0);
- eptr--;
- if (rrc != MATCH_NOMATCH) RRETURN(rrc);
- }
- RRETURN(MATCH_NOMATCH);
- }
- /* Control never gets here */
- }
-
- /* Caseful comparisons (includes all multi-byte characters) */
-
- else
- {
- for (i = 1; i <= min; i++) if (fc != *eptr++) RRETURN(MATCH_NOMATCH);
- if (min == max) continue;
- if (minimize)
- {
- for (fi = min;; fi++)
- {
- RMATCH(rrc, eptr, ecode, offset_top, md, ims, eptrb, 0);
- if (rrc != MATCH_NOMATCH) RRETURN(rrc);
- if (fi >= max || eptr >= md->end_subject || fc != *eptr++)
- RRETURN(MATCH_NOMATCH);
- }
- /* Control never gets here */
- }
- else
- {
- pp = eptr;
- for (i = min; i < max; i++)
- {
- if (eptr >= md->end_subject || fc != *eptr) break;
- eptr++;
- }
- while (eptr >= pp)
- {
- RMATCH(rrc, eptr, ecode, offset_top, md, ims, eptrb, 0);
- eptr--;
- if (rrc != MATCH_NOMATCH) RRETURN(rrc);
- }
- RRETURN(MATCH_NOMATCH);
- }
- }
- /* Control never gets here */
-
- /* Match a negated single one-byte character. The character we are
- checking can be multibyte. */
-
- case OP_NOT:
- if (eptr >= md->end_subject) RRETURN(MATCH_NOMATCH);
- ecode++;
- GETCHARINCTEST(c, eptr);
- if ((ims & PCRE_CASELESS) != 0)
- {
-#ifdef SUPPORT_UTF8
- if (c < 256)
-#endif
- c = md->lcc[c];
- if (md->lcc[*ecode++] == c) RRETURN(MATCH_NOMATCH);
- }
- else
- {
- if (*ecode++ == c) RRETURN(MATCH_NOMATCH);
- }
- break;
-
- /* Match a negated single one-byte character repeatedly. This is almost a
- repeat of the code for a repeated single character, but I haven't found a
- nice way of commoning these up that doesn't require a test of the
- positive/negative option for each character match. Maybe that wouldn't add
- very much to the time taken, but character matching *is* what this is all
- about... */
-
- case OP_NOTEXACT:
- min = max = GET2(ecode, 1);
- ecode += 3;
- goto REPEATNOTCHAR;
-
- case OP_NOTUPTO:
- case OP_NOTMINUPTO:
- min = 0;
- max = GET2(ecode, 1);
- minimize = *ecode == OP_NOTMINUPTO;
- ecode += 3;
- goto REPEATNOTCHAR;
-
- case OP_NOTSTAR:
- case OP_NOTMINSTAR:
- case OP_NOTPLUS:
- case OP_NOTMINPLUS:
- case OP_NOTQUERY:
- case OP_NOTMINQUERY:
- c = *ecode++ - OP_NOTSTAR;
- minimize = (c & 1) != 0;
- min = rep_min[c]; /* Pick up values from tables; */
- max = rep_max[c]; /* zero for max => infinity */
- if (max == 0) max = INT_MAX;
-
- /* Common code for all repeated single-character (less than 255) matches.
- We can give up quickly if there are fewer than the minimum number of
- characters left in the subject. */
-
- REPEATNOTCHAR:
- if (min > md->end_subject - eptr) RRETURN(MATCH_NOMATCH);
- fc = *ecode++;
-
- /* The code is duplicated for the caseless and caseful cases, for speed,
- since matching characters is likely to be quite common. First, ensure the
- minimum number of matches are present. If min = max, continue at the same
- level without recursing. Otherwise, if minimizing, keep trying the rest of
- the expression and advancing one matching character if failing, up to the
- maximum. Alternatively, if maximizing, find the maximum number of
- characters and work backwards. */
-
- DPRINTF(("negative matching %c{%d,%d} against subject %.*s\n", fc, min, max,
- max, eptr));
-
- if ((ims & PCRE_CASELESS) != 0)
- {
- fc = md->lcc[fc];
-
-#ifdef SUPPORT_UTF8
- /* UTF-8 mode */
- if (md->utf8)
- {
- register int d;
- for (i = 1; i <= min; i++)
- {
- GETCHARINC(d, eptr);
- if (d < 256) d = md->lcc[d];
- if (fc == d) RRETURN(MATCH_NOMATCH);
- }
- }
- else
-#endif
-
- /* Not UTF-8 mode */
- {
- for (i = 1; i <= min; i++)
- if (fc == md->lcc[*eptr++]) RRETURN(MATCH_NOMATCH);
- }
-
- if (min == max) continue;
-
- if (minimize)
- {
-#ifdef SUPPORT_UTF8
- /* UTF-8 mode */
- if (md->utf8)
- {
- register int d;
- for (fi = min;; fi++)
- {
- RMATCH(rrc, eptr, ecode, offset_top, md, ims, eptrb, 0);
- if (rrc != MATCH_NOMATCH) RRETURN(rrc);
- GETCHARINC(d, eptr);
- if (d < 256) d = md->lcc[d];
- if (fi >= max || eptr >= md->end_subject || fc == d)
- RRETURN(MATCH_NOMATCH);
- }
- }
- else
-#endif
- /* Not UTF-8 mode */
- {
- for (fi = min;; fi++)
- {
- RMATCH(rrc, eptr, ecode, offset_top, md, ims, eptrb, 0);
- if (rrc != MATCH_NOMATCH) RRETURN(rrc);
- if (fi >= max || eptr >= md->end_subject || fc == md->lcc[*eptr++])
- RRETURN(MATCH_NOMATCH);
- }
- }
- /* Control never gets here */
- }
-
- /* Maximize case */
-
- else
- {
- pp = eptr;
-
-#ifdef SUPPORT_UTF8
- /* UTF-8 mode */
- if (md->utf8)
- {
- register int d;
- for (i = min; i < max; i++)
- {
- int len = 1;
- if (eptr >= md->end_subject) break;
- GETCHARLEN(d, eptr, len);
- if (d < 256) d = md->lcc[d];
- if (fc == d) break;
- eptr += len;
- }
- for(;;)
- {
- RMATCH(rrc, eptr, ecode, offset_top, md, ims, eptrb, 0);
- if (rrc != MATCH_NOMATCH) RRETURN(rrc);
- if (eptr-- == pp) break; /* Stop if tried at original pos */
- BACKCHAR(eptr);
- }
- }
- else
-#endif
- /* Not UTF-8 mode */
- {
- for (i = min; i < max; i++)
- {
- if (eptr >= md->end_subject || fc == md->lcc[*eptr]) break;
- eptr++;
- }
- while (eptr >= pp)
- {
- RMATCH(rrc, eptr, ecode, offset_top, md, ims, eptrb, 0);
- if (rrc != MATCH_NOMATCH) RRETURN(rrc);
- eptr--;
- }
- }
-
- RRETURN(MATCH_NOMATCH);
- }
- /* Control never gets here */
- }
-
- /* Caseful comparisons */
-
- else
- {
-#ifdef SUPPORT_UTF8
- /* UTF-8 mode */
- if (md->utf8)
- {
- register int d;
- for (i = 1; i <= min; i++)
- {
- GETCHARINC(d, eptr);
- if (fc == d) RRETURN(MATCH_NOMATCH);
- }
- }
- else
-#endif
- /* Not UTF-8 mode */
- {
- for (i = 1; i <= min; i++)
- if (fc == *eptr++) RRETURN(MATCH_NOMATCH);
- }
-
- if (min == max) continue;
-
- if (minimize)
- {
-#ifdef SUPPORT_UTF8
- /* UTF-8 mode */
- if (md->utf8)
- {
- register int d;
- for (fi = min;; fi++)
- {
- RMATCH(rrc, eptr, ecode, offset_top, md, ims, eptrb, 0);
- if (rrc != MATCH_NOMATCH) RRETURN(rrc);
- GETCHARINC(d, eptr);
- if (fi >= max || eptr >= md->end_subject || fc == d)
- RRETURN(MATCH_NOMATCH);
- }
- }
- else
-#endif
- /* Not UTF-8 mode */
- {
- for (fi = min;; fi++)
- {
- RMATCH(rrc, eptr, ecode, offset_top, md, ims, eptrb, 0);
- if (rrc != MATCH_NOMATCH) RRETURN(rrc);
- if (fi >= max || eptr >= md->end_subject || fc == *eptr++)
- RRETURN(MATCH_NOMATCH);
- }
- }
- /* Control never gets here */
- }
-
- /* Maximize case */
-
- else
- {
- pp = eptr;
-
-#ifdef SUPPORT_UTF8
- /* UTF-8 mode */
- if (md->utf8)
- {
- register int d;
- for (i = min; i < max; i++)
- {
- int len = 1;
- if (eptr >= md->end_subject) break;
- GETCHARLEN(d, eptr, len);
- if (fc == d) break;
- eptr += len;
- }
- for(;;)
- {
- RMATCH(rrc, eptr, ecode, offset_top, md, ims, eptrb, 0);
- if (rrc != MATCH_NOMATCH) RRETURN(rrc);
- if (eptr-- == pp) break; /* Stop if tried at original pos */
- BACKCHAR(eptr);
- }
- }
- else
-#endif
- /* Not UTF-8 mode */
- {
- for (i = min; i < max; i++)
- {
- if (eptr >= md->end_subject || fc == *eptr) break;
- eptr++;
- }
- while (eptr >= pp)
- {
- RMATCH(rrc, eptr, ecode, offset_top, md, ims, eptrb, 0);
- if (rrc != MATCH_NOMATCH) RRETURN(rrc);
- eptr--;
- }
- }
-
- RRETURN(MATCH_NOMATCH);
- }
- }
- /* Control never gets here */
-
- /* Match a single character type repeatedly; several different opcodes
- share code. This is very similar to the code for single characters, but we
- repeat it in the interests of efficiency. */
-
- case OP_TYPEEXACT:
- min = max = GET2(ecode, 1);
- minimize = TRUE;
- ecode += 3;
- goto REPEATTYPE;
-
- case OP_TYPEUPTO:
- case OP_TYPEMINUPTO:
- min = 0;
- max = GET2(ecode, 1);
- minimize = *ecode == OP_TYPEMINUPTO;
- ecode += 3;
- goto REPEATTYPE;
-
- case OP_TYPESTAR:
- case OP_TYPEMINSTAR:
- case OP_TYPEPLUS:
- case OP_TYPEMINPLUS:
- case OP_TYPEQUERY:
- case OP_TYPEMINQUERY:
- c = *ecode++ - OP_TYPESTAR;
- minimize = (c & 1) != 0;
- min = rep_min[c]; /* Pick up values from tables; */
- max = rep_max[c]; /* zero for max => infinity */
- if (max == 0) max = INT_MAX;
-
- /* Common code for all repeated single character type matches. Note that
- in UTF-8 mode, '.' matches a character of any length, but for the other
- character types, the valid characters are all one-byte long. */
-
- REPEATTYPE:
- ctype = *ecode++; /* Code for the character type */
-
- /* First, ensure the minimum number of matches are present. Use inline
- code for maximizing the speed, and do the type test once at the start
- (i.e. keep it out of the loop). Also we can test that there are at least
- the minimum number of bytes before we start. This isn't as effective in
- UTF-8 mode, but it does no harm. Separate the UTF-8 code completely as that
- is tidier. */
-
- if (min > md->end_subject - eptr) RRETURN(MATCH_NOMATCH);
- if (min > 0)
- {
-#ifdef SUPPORT_UTF8
- if (md->utf8) switch(ctype)
- {
- case OP_ANY:
- for (i = 1; i <= min; i++)
- {
- if (eptr >= md->end_subject ||
- (*eptr++ == NEWLINE && (ims & PCRE_DOTALL) == 0))
- RRETURN(MATCH_NOMATCH);
- while (eptr < md->end_subject && (*eptr & 0xc0) == 0x80) eptr++;
- }
- break;
-
- case OP_ANYBYTE:
- eptr += min;
- break;
-
- case OP_NOT_DIGIT:
- for (i = 1; i <= min; i++)
- {
- if (eptr >= md->end_subject) RRETURN(MATCH_NOMATCH);
- GETCHARINC(c, eptr);
- if (c < 256 && (md->ctypes[c] & ctype_digit) != 0)
- RRETURN(MATCH_NOMATCH);
- }
- break;
-
- case OP_DIGIT:
- for (i = 1; i <= min; i++)
- {
- if (eptr >= md->end_subject ||
- *eptr >= 128 || (md->ctypes[*eptr++] & ctype_digit) == 0)
- RRETURN(MATCH_NOMATCH);
- /* No need to skip more bytes - we know it's a 1-byte character */
- }
- break;
-
- case OP_NOT_WHITESPACE:
- for (i = 1; i <= min; i++)
- {
- if (eptr >= md->end_subject ||
- (*eptr < 128 && (md->ctypes[*eptr++] & ctype_space) != 0))
- RRETURN(MATCH_NOMATCH);
- while (eptr < md->end_subject && (*eptr & 0xc0) == 0x80) eptr++;
- }
- break;
-
- case OP_WHITESPACE:
- for (i = 1; i <= min; i++)
- {
- if (eptr >= md->end_subject ||
- *eptr >= 128 || (md->ctypes[*eptr++] & ctype_space) == 0)
- RRETURN(MATCH_NOMATCH);
- /* No need to skip more bytes - we know it's a 1-byte character */
- }
- break;
-
- case OP_NOT_WORDCHAR:
- for (i = 1; i <= min; i++)
- {
- if (eptr >= md->end_subject ||
- (*eptr < 128 && (md->ctypes[*eptr++] & ctype_word) != 0))
- RRETURN(MATCH_NOMATCH);
- while (eptr < md->end_subject && (*eptr & 0xc0) == 0x80) eptr++;
- }
- break;
-
- case OP_WORDCHAR:
- for (i = 1; i <= min; i++)
- {
- if (eptr >= md->end_subject ||
- *eptr >= 128 || (md->ctypes[*eptr++] & ctype_word) == 0)
- RRETURN(MATCH_NOMATCH);
- /* No need to skip more bytes - we know it's a 1-byte character */
- }
- break;
- }
- else
-#endif
-
- /* Code for the non-UTF-8 case for minimum matching */
-
- switch(ctype)
- {
- case OP_ANY:
- if ((ims & PCRE_DOTALL) == 0)
- {
- for (i = 1; i <= min; i++)
- if (*eptr++ == NEWLINE) RRETURN(MATCH_NOMATCH);
- }
- else eptr += min;
- break;
-
- case OP_ANYBYTE:
- eptr += min;
- break;
-
- case OP_NOT_DIGIT:
- for (i = 1; i <= min; i++)
- if ((md->ctypes[*eptr++] & ctype_digit) != 0) RRETURN(MATCH_NOMATCH);
- break;
-
- case OP_DIGIT:
- for (i = 1; i <= min; i++)
- if ((md->ctypes[*eptr++] & ctype_digit) == 0) RRETURN(MATCH_NOMATCH);
- break;
-
- case OP_NOT_WHITESPACE:
- for (i = 1; i <= min; i++)
- if ((md->ctypes[*eptr++] & ctype_space) != 0) RRETURN(MATCH_NOMATCH);
- break;
-
- case OP_WHITESPACE:
- for (i = 1; i <= min; i++)
- if ((md->ctypes[*eptr++] & ctype_space) == 0) RRETURN(MATCH_NOMATCH);
- break;
-
- case OP_NOT_WORDCHAR:
- for (i = 1; i <= min; i++)
- if ((md->ctypes[*eptr++] & ctype_word) != 0)
- RRETURN(MATCH_NOMATCH);
- break;
-
- case OP_WORDCHAR:
- for (i = 1; i <= min; i++)
- if ((md->ctypes[*eptr++] & ctype_word) == 0)
- RRETURN(MATCH_NOMATCH);
- break;
- }
- }
-
- /* If min = max, continue at the same level without recursing */
-
- if (min == max) continue;
-
- /* If minimizing, we have to test the rest of the pattern before each
- subsequent match. Again, separate the UTF-8 case for speed. */
-
- if (minimize)
- {
-#ifdef SUPPORT_UTF8
- /* UTF-8 mode */
- if (md->utf8)
- {
- for (fi = min;; fi++)
- {
- RMATCH(rrc, eptr, ecode, offset_top, md, ims, eptrb, 0);
- if (rrc != MATCH_NOMATCH) RRETURN(rrc);
- if (fi >= max || eptr >= md->end_subject) RRETURN(MATCH_NOMATCH);
-
- GETCHARINC(c, eptr);
- switch(ctype)
- {
- case OP_ANY:
- if ((ims & PCRE_DOTALL) == 0 && c == NEWLINE) RRETURN(MATCH_NOMATCH);
- break;
-
- case OP_ANYBYTE:
- break;
-
- case OP_NOT_DIGIT:
- if (c < 256 && (md->ctypes[c] & ctype_digit) != 0)
- RRETURN(MATCH_NOMATCH);
- break;
-
- case OP_DIGIT:
- if (c >= 256 || (md->ctypes[c] & ctype_digit) == 0)
- RRETURN(MATCH_NOMATCH);
- break;
-
- case OP_NOT_WHITESPACE:
- if (c < 256 && (md->ctypes[c] & ctype_space) != 0)
- RRETURN(MATCH_NOMATCH);
- break;
-
- case OP_WHITESPACE:
- if (c >= 256 || (md->ctypes[c] & ctype_space) == 0)
- RRETURN(MATCH_NOMATCH);
- break;
-
- case OP_NOT_WORDCHAR:
- if (c < 256 && (md->ctypes[c] & ctype_word) != 0)
- RRETURN(MATCH_NOMATCH);
- break;
-
- case OP_WORDCHAR:
- if (c >= 256 && (md->ctypes[c] & ctype_word) == 0)
- RRETURN(MATCH_NOMATCH);
- break;
- }
- }
- }
- else
-#endif
- /* Not UTF-8 mode */
- {
- for (fi = min;; fi++)
- {
- RMATCH(rrc, eptr, ecode, offset_top, md, ims, eptrb, 0);
- if (rrc != MATCH_NOMATCH) RRETURN(rrc);
- if (fi >= max || eptr >= md->end_subject) RRETURN(MATCH_NOMATCH);
- c = *eptr++;
- switch(ctype)
- {
- case OP_ANY:
- if ((ims & PCRE_DOTALL) == 0 && c == NEWLINE) RRETURN(MATCH_NOMATCH);
- break;
-
- case OP_ANYBYTE:
- break;
-
- case OP_NOT_DIGIT:
- if ((md->ctypes[c] & ctype_digit) != 0) RRETURN(MATCH_NOMATCH);
- break;
-
- case OP_DIGIT:
- if ((md->ctypes[c] & ctype_digit) == 0) RRETURN(MATCH_NOMATCH);
- break;
-
- case OP_NOT_WHITESPACE:
- if ((md->ctypes[c] & ctype_space) != 0) RRETURN(MATCH_NOMATCH);
- break;
-
- case OP_WHITESPACE:
- if ((md->ctypes[c] & ctype_space) == 0) RRETURN(MATCH_NOMATCH);
- break;
-
- case OP_NOT_WORDCHAR:
- if ((md->ctypes[c] & ctype_word) != 0) RRETURN(MATCH_NOMATCH);
- break;
-
- case OP_WORDCHAR:
- if ((md->ctypes[c] & ctype_word) == 0) RRETURN(MATCH_NOMATCH);
- break;
- }
- }
- }
- /* Control never gets here */
- }
-
- /* If maximizing it is worth using inline code for speed, doing the type
- test once at the start (i.e. keep it out of the loop). Again, keep the
- UTF-8 stuff separate. */
-
- else
- {
- pp = eptr;
-
-#ifdef SUPPORT_UTF8
- /* UTF-8 mode */
-
- if (md->utf8)
- {
- switch(ctype)
- {
- case OP_ANY:
-
- /* Special code is required for UTF8, but when the maximum is unlimited
- we don't need it, so we repeat the non-UTF8 code. This is probably
- worth it, because .* is quite a common idiom. */
-
- if (max < INT_MAX)
- {
- if ((ims & PCRE_DOTALL) == 0)
- {
- for (i = min; i < max; i++)
- {
- if (eptr >= md->end_subject || *eptr == NEWLINE) break;
- eptr++;
- while (eptr < md->end_subject && (*eptr & 0xc0) == 0x80) eptr++;
- }
- }
- else
- {
- for (i = min; i < max; i++)
- {
- eptr++;
- while (eptr < md->end_subject && (*eptr & 0xc0) == 0x80) eptr++;
- }
- }
- }
-
- /* Handle unlimited UTF-8 repeat */
-
- else
- {
- if ((ims & PCRE_DOTALL) == 0)
- {
- for (i = min; i < max; i++)
- {
- if (eptr >= md->end_subject || *eptr == NEWLINE) break;
- eptr++;
- }
- break;
- }
- else
- {
- c = max - min;
- if (c > md->end_subject - eptr) c = md->end_subject - eptr;
- eptr += c;
- }
- }
- break;
-
- /* The byte case is the same as non-UTF8 */
-
- case OP_ANYBYTE:
- c = max - min;
- if (c > md->end_subject - eptr) c = md->end_subject - eptr;
- eptr += c;
- break;
-
- case OP_NOT_DIGIT:
- for (i = min; i < max; i++)
- {
- int len = 1;
- if (eptr >= md->end_subject) break;
- GETCHARLEN(c, eptr, len);
- if (c < 256 && (md->ctypes[c] & ctype_digit) != 0) break;
- eptr+= len;
- }
- break;
-
- case OP_DIGIT:
- for (i = min; i < max; i++)
- {
- int len = 1;
- if (eptr >= md->end_subject) break;
- GETCHARLEN(c, eptr, len);
- if (c >= 256 ||(md->ctypes[c] & ctype_digit) == 0) break;
- eptr+= len;
- }
- break;
-
- case OP_NOT_WHITESPACE:
- for (i = min; i < max; i++)
- {
- int len = 1;
- if (eptr >= md->end_subject) break;
- GETCHARLEN(c, eptr, len);
- if (c < 256 && (md->ctypes[c] & ctype_space) != 0) break;
- eptr+= len;
- }
- break;
-
- case OP_WHITESPACE:
- for (i = min; i < max; i++)
- {
- int len = 1;
- if (eptr >= md->end_subject) break;
- GETCHARLEN(c, eptr, len);
- if (c >= 256 ||(md->ctypes[c] & ctype_space) == 0) break;
- eptr+= len;
- }
- break;
-
- case OP_NOT_WORDCHAR:
- for (i = min; i < max; i++)
- {
- int len = 1;
- if (eptr >= md->end_subject) break;
- GETCHARLEN(c, eptr, len);
- if (c < 256 && (md->ctypes[c] & ctype_word) != 0) break;
- eptr+= len;
- }
- break;
-
- case OP_WORDCHAR:
- for (i = min; i < max; i++)
- {
- int len = 1;
- if (eptr >= md->end_subject) break;
- GETCHARLEN(c, eptr, len);
- if (c >= 256 || (md->ctypes[c] & ctype_word) == 0) break;
- eptr+= len;
- }
- break;
- }
-
- /* eptr is now past the end of the maximum run */
-
- for(;;)
- {
- RMATCH(rrc, eptr, ecode, offset_top, md, ims, eptrb, 0);
- if (rrc != MATCH_NOMATCH) RRETURN(rrc);
- if (eptr-- == pp) break; /* Stop if tried at original pos */
- BACKCHAR(eptr);
- }
- }
- else
-#endif
-
- /* Not UTF-8 mode */
- {
- switch(ctype)
- {
- case OP_ANY:
- if ((ims & PCRE_DOTALL) == 0)
- {
- for (i = min; i < max; i++)
- {
- if (eptr >= md->end_subject || *eptr == NEWLINE) break;
- eptr++;
- }
- break;
- }
- /* For DOTALL case, fall through and treat as \C */
-
- case OP_ANYBYTE:
- c = max - min;
- if (c > md->end_subject - eptr) c = md->end_subject - eptr;
- eptr += c;
- break;
-
- case OP_NOT_DIGIT:
- for (i = min; i < max; i++)
- {
- if (eptr >= md->end_subject || (md->ctypes[*eptr] & ctype_digit) != 0)
- break;
- eptr++;
- }
- break;
-
- case OP_DIGIT:
- for (i = min; i < max; i++)
- {
- if (eptr >= md->end_subject || (md->ctypes[*eptr] & ctype_digit) == 0)
- break;
- eptr++;
- }
- break;
-
- case OP_NOT_WHITESPACE:
- for (i = min; i < max; i++)
- {
- if (eptr >= md->end_subject || (md->ctypes[*eptr] & ctype_space) != 0)
- break;
- eptr++;
- }
- break;
-
- case OP_WHITESPACE:
- for (i = min; i < max; i++)
- {
- if (eptr >= md->end_subject || (md->ctypes[*eptr] & ctype_space) == 0)
- break;
- eptr++;
- }
- break;
-
- case OP_NOT_WORDCHAR:
- for (i = min; i < max; i++)
- {
- if (eptr >= md->end_subject || (md->ctypes[*eptr] & ctype_word) != 0)
- break;
- eptr++;
- }
- break;
-
- case OP_WORDCHAR:
- for (i = min; i < max; i++)
- {
- if (eptr >= md->end_subject || (md->ctypes[*eptr] & ctype_word) == 0)
- break;
- eptr++;
- }
- break;
- }
-
- /* eptr is now past the end of the maximum run */
-
- while (eptr >= pp)
- {
- RMATCH(rrc, eptr, ecode, offset_top, md, ims, eptrb, 0);
- eptr--;
- if (rrc != MATCH_NOMATCH) RRETURN(rrc);
- }
- }
-
- /* Get here if we can't make it match with any permitted repetitions */
-
- RRETURN(MATCH_NOMATCH);
- }
- /* Control never gets here */
-
- /* There's been some horrible disaster. Since all codes > OP_BRA are
- for capturing brackets, and there shouldn't be any gaps between 0 and
- OP_BRA, arrival here can only mean there is something seriously wrong
- in the code above or the OP_xxx definitions. */
-
- default:
- DPRINTF(("Unknown opcode %d\n", *ecode));
- RRETURN(PCRE_ERROR_UNKNOWN_NODE);
- }
-
- /* Do not stick any code in here without much thought; it is assumed
- that "continue" in the code above comes out to here to repeat the main
- loop. */
-
- } /* End of main loop */
-/* Control never reaches here */
-}
-
-
-/***************************************************************************
-****************************************************************************
- RECURSION IN THE match() FUNCTION
-
-Undefine all the macros that were defined above to handle this. */
-
-#ifdef NO_RECURSE
-#undef eptr
-#undef ecode
-#undef offset_top
-#undef ims
-#undef eptrb
-#undef flags
-
-#undef callpat
-#undef charptr
-#undef data
-#undef lastptr
-#undef next
-#undef pp
-#undef prev
-#undef saved_eptr
-
-#undef new_recursive
-
-#undef cur_is_word
-#undef condition
-#undef minimize
-#undef prev_is_word
-
-#undef original_ims
-
-#undef ctype
-#undef length
-#undef max
-#undef min
-#undef number
-#undef offset
-#undef op
-#undef save_capture_last
-#undef save_offset1
-#undef save_offset2
-#undef save_offset3
-#undef stacksave
-
-#undef newptrb
-
-#endif
-
-/* These two are defined as macros in both cases */
-
-#undef fc
-#undef fi
-
-/***************************************************************************
-***************************************************************************/
-
-
-
-/*************************************************
-* Execute a Regular Expression *
-*************************************************/
-
-/* This function applies a compiled re to a subject string and picks out
-portions of the string if it matches. Two elements in the vector are set for
-each substring: the offsets to the start and end of the substring.
-
-Arguments:
- external_re points to the compiled expression
- extra_data points to extra data or is NULL
- subject points to the subject string
- length length of subject string (may contain binary zeros)
- start_offset where to start in the subject string
- options option bits
- offsets points to a vector of ints to be filled in with offsets
- offsetcount the number of elements in the vector
-
-Returns: > 0 => success; value is the number of elements filled in
- = 0 => success, but offsets is not big enough
- -1 => failed to match
- < -1 => some kind of unexpected problem
-*/
-
-EXPORT int
-pcre_exec(const pcre *external_re, const pcre_extra *extra_data,
- const char *subject, int length, int start_offset, int options, int *offsets,
- int offsetcount)
-{
-int rc, resetcount, ocount;
-int first_byte = -1;
-int req_byte = -1;
-int req_byte2 = -1;
-unsigned long int ims = 0;
-BOOL using_temporary_offsets = FALSE;
-BOOL anchored;
-BOOL startline;
-BOOL first_byte_caseless = FALSE;
-BOOL req_byte_caseless = FALSE;
-match_data match_block;
-const uschar *start_bits = NULL;
-const uschar *start_match = (const uschar *)subject + start_offset;
-const uschar *end_subject;
-const uschar *req_byte_ptr = start_match - 1;
-const pcre_study_data *study;
-const real_pcre *re = (const real_pcre *)external_re;
-
-/* Plausibility checks */
-
-if ((options & ~PUBLIC_EXEC_OPTIONS) != 0) return PCRE_ERROR_BADOPTION;
-if (re == NULL || subject == NULL ||
- (offsets == NULL && offsetcount > 0)) return PCRE_ERROR_NULL;
-
-/* Fish out the optional data from the extra_data structure, first setting
-the default values. */
-
-study = NULL;
-match_block.match_limit = MATCH_LIMIT;
-match_block.callout_data = NULL;
-
-if (extra_data != NULL)
- {
- register unsigned int flags = extra_data->flags;
- if ((flags & PCRE_EXTRA_STUDY_DATA) != 0)
- study = (const pcre_study_data *)extra_data->study_data;
- if ((flags & PCRE_EXTRA_MATCH_LIMIT) != 0)
- match_block.match_limit = extra_data->match_limit;
- if ((flags & PCRE_EXTRA_CALLOUT_DATA) != 0)
- match_block.callout_data = extra_data->callout_data;
- }
-
-/* Now we have re supposedly pointing to the regex */
-
-if (re->magic_number != MAGIC_NUMBER) return PCRE_ERROR_BADMAGIC;
-
-anchored = ((re->options | options) & PCRE_ANCHORED) != 0;
-startline = (re->options & PCRE_STARTLINE) != 0;
-
-match_block.start_code =
- (const uschar *)re + sizeof(real_pcre) + re->name_count * re->name_entry_size;
-match_block.start_subject = (const uschar *)subject;
-match_block.start_offset = start_offset;
-match_block.end_subject = match_block.start_subject + length;
-end_subject = match_block.end_subject;
-
-match_block.endonly = (re->options & PCRE_DOLLAR_ENDONLY) != 0;
-match_block.utf8 = (re->options & PCRE_UTF8) != 0;
-
-match_block.notbol = (options & PCRE_NOTBOL) != 0;
-match_block.noteol = (options & PCRE_NOTEOL) != 0;
-match_block.notempty = (options & PCRE_NOTEMPTY) != 0;
-
-match_block.recursive = NULL; /* No recursion at top level */
-
-match_block.lcc = re->tables + lcc_offset;
-match_block.ctypes = re->tables + ctypes_offset;
-
-/* Check a UTF-8 string if required. Unfortunately there's no way of passing
-back the character offset. */
-
-#ifdef SUPPORT_UTF8
-if (match_block.utf8 && (options & PCRE_NO_UTF8_CHECK) == 0)
- {
- if (valid_utf8((uschar *)subject, length) >= 0)
- return PCRE_ERROR_BADUTF8;
- if (start_offset > 0 && start_offset < length)
- {
- int tb = ((uschar *)subject)[start_offset];
- if (tb > 127)
- {
- tb &= 0xc0;
- if (tb != 0 && tb != 0xc0) return PCRE_ERROR_BADUTF8_OFFSET;
- }
- }
- }
-#endif
-
-/* The ims options can vary during the matching as a result of the presence
-of (?ims) items in the pattern. They are kept in a local variable so that
-restoring at the exit of a group is easy. */
-
-ims = re->options & (PCRE_CASELESS|PCRE_MULTILINE|PCRE_DOTALL);
-
-/* If the expression has got more back references than the offsets supplied can
-hold, we get a temporary bit of working store to use during the matching.
-Otherwise, we can use the vector supplied, rounding down its size to a multiple
-of 3. */
-
-ocount = offsetcount - (offsetcount % 3);
-
-if (re->top_backref > 0 && re->top_backref >= ocount/3)
- {
- ocount = re->top_backref * 3 + 3;
- match_block.offset_vector = (int *)(pcre_malloc)(ocount * sizeof(int));
- if (match_block.offset_vector == NULL) return PCRE_ERROR_NOMEMORY;
- using_temporary_offsets = TRUE;
- DPRINTF(("Got memory to hold back references\n"));
- }
-else match_block.offset_vector = offsets;
-
-match_block.offset_end = ocount;
-match_block.offset_max = (2*ocount)/3;
-match_block.offset_overflow = FALSE;
-match_block.capture_last = -1;
-
-/* Compute the minimum number of offsets that we need to reset each time. Doing
-this makes a huge difference to execution time when there aren't many brackets
-in the pattern. */
-
-resetcount = 2 + re->top_bracket * 2;
-if (resetcount > offsetcount) resetcount = ocount;
-
-/* Reset the working variable associated with each extraction. These should
-never be used unless previously set, but they get saved and restored, and so we
-initialize them to avoid reading uninitialized locations. */
-
-if (match_block.offset_vector != NULL)
- {
- register int *iptr = match_block.offset_vector + ocount;
- register int *iend = iptr - resetcount/2 + 1;
- while (--iptr >= iend) *iptr = -1;
- }
-
-/* Set up the first character to match, if available. The first_byte value is
-never set for an anchored regular expression, but the anchoring may be forced
-at run time, so we have to test for anchoring. The first char may be unset for
-an unanchored pattern, of course. If there's no first char and the pattern was
-studied, there may be a bitmap of possible first characters. */
-
-if (!anchored)
- {
- if ((re->options & PCRE_FIRSTSET) != 0)
- {
- first_byte = re->first_byte & 255;
- if ((first_byte_caseless = ((re->first_byte & REQ_CASELESS) != 0)) == TRUE)
- first_byte = match_block.lcc[first_byte];
- }
- else
- if (!startline && study != NULL &&
- (study->options & PCRE_STUDY_MAPPED) != 0)
- start_bits = study->start_bits;
- }
-
-/* For anchored or unanchored matches, there may be a "last known required
-character" set. */
-
-if ((re->options & PCRE_REQCHSET) != 0)
- {
- req_byte = re->req_byte & 255;
- req_byte_caseless = (re->req_byte & REQ_CASELESS) != 0;
- req_byte2 = (re->tables + fcc_offset)[req_byte]; /* case flipped */
- }
-
-/* Loop for handling unanchored repeated matching attempts; for anchored regexs
-the loop runs just once. */
-
-do
- {
- register int *iptr = match_block.offset_vector;
- register int *iend = iptr + resetcount;
-
- /* Reset the maximum number of extractions we might see. */
-
- while (iptr < iend) *iptr++ = -1;
-
- /* Advance to a unique first char if possible */
-
- if (first_byte >= 0)
- {
- if (first_byte_caseless)
- while (start_match < end_subject &&
- match_block.lcc[*start_match] != first_byte)
- start_match++;
- else
- while (start_match < end_subject && *start_match != first_byte)
- start_match++;
- }
-
- /* Or to just after \n for a multiline match if possible */
-
- else if (startline)
- {
- if (start_match > match_block.start_subject + start_offset)
- {
- while (start_match < end_subject && start_match[-1] != NEWLINE)
- start_match++;
- }
- }
-
- /* Or to a non-unique first char after study */
-
- else if (start_bits != NULL)
- {
- while (start_match < end_subject)
- {
- register int c = *start_match;
- if ((start_bits[c/8] & (1 << (c&7))) == 0) start_match++; else break;
- }
- }
-
-#ifdef DEBUG /* Sigh. Some compilers never learn. */
- printf(">>>> Match against: ");
- pchars(start_match, end_subject - start_match, TRUE, &match_block);
- printf("\n");
-#endif
-
- /* If req_byte is set, we know that that character must appear in the subject
- for the match to succeed. If the first character is set, req_byte must be
- later in the subject; otherwise the test starts at the match point. This
- optimization can save a huge amount of backtracking in patterns with nested
- unlimited repeats that aren't going to match. Writing separate code for
- cased/caseless versions makes it go faster, as does using an autoincrement
- and backing off on a match.
-
- HOWEVER: when the subject string is very, very long, searching to its end can
- take a long time, and give bad performance on quite ordinary patterns. This
- showed up when somebody was matching /^C/ on a 32-megabyte string... so we
- don't do this when the string is sufficiently long. */
-
- if (req_byte >= 0 && end_subject - start_match < REQ_BYTE_MAX)
- {
- register const uschar *p = start_match + ((first_byte >= 0)? 1 : 0);
-
- /* We don't need to repeat the search if we haven't yet reached the
- place we found it at last time. */
-
- if (p > req_byte_ptr)
- {
- if (req_byte_caseless)
- {
- while (p < end_subject)
- {
- register int pp = *p++;
- if (pp == req_byte || pp == req_byte2) { p--; break; }
- }
- }
- else
- {
- while (p < end_subject)
- {
- if (*p++ == req_byte) { p--; break; }
- }
- }
-
- /* If we can't find the required character, break the matching loop */
-
- if (p >= end_subject) break;
-
- /* If we have found the required character, save the point where we
- found it, so that we don't search again next time round the loop if
- the start hasn't passed this character yet. */
-
- req_byte_ptr = p;
- }
- }
-
- /* When a match occurs, substrings will be set for all internal extractions;
- we just need to set up the whole thing as substring 0 before returning. If
- there were too many extractions, set the return code to zero. In the case
- where we had to get some local store to hold offsets for backreferences, copy
- those back references that we can. In this case there need not be overflow
- if certain parts of the pattern were not used. */
-
- match_block.start_match = start_match;
- match_block.match_call_count = 0;
-
- rc = match(start_match, match_block.start_code, 2, &match_block, ims, NULL,
- match_isgroup);
-
- if (rc == MATCH_NOMATCH)
- {
- start_match++;
-#ifdef SUPPORT_UTF8
- if (match_block.utf8)
- while((*start_match & 0xc0) == 0x80) start_match++;
-#endif
- continue;
- }
-
- if (rc != MATCH_MATCH)
- {
- DPRINTF((">>>> error: returning %d\n", rc));
- return rc;
- }
-
- /* We have a match! Copy the offset information from temporary store if
- necessary */
-
- if (using_temporary_offsets)
- {
- if (offsetcount >= 4)
- {
- memcpy(offsets + 2, match_block.offset_vector + 2,
- (offsetcount - 2) * sizeof(int));
- DPRINTF(("Copied offsets from temporary memory\n"));
- }
- if (match_block.end_offset_top > offsetcount)
- match_block.offset_overflow = TRUE;
-
- DPRINTF(("Freeing temporary memory\n"));
- (pcre_free)(match_block.offset_vector);
- }
-
- rc = match_block.offset_overflow? 0 : match_block.end_offset_top/2;
-
- if (offsetcount < 2) rc = 0; else
- {
- offsets[0] = start_match - match_block.start_subject;
- offsets[1] = match_block.end_match_ptr - match_block.start_subject;
- }
-
- DPRINTF((">>>> returning %d\n", rc));
- return rc;
- }
-
-/* This "while" is the end of the "do" above */
-
-while (!anchored && start_match <= end_subject);
-
-if (using_temporary_offsets)
- {
- DPRINTF(("Freeing temporary memory\n"));
- (pcre_free)(match_block.offset_vector);
- }
-
-DPRINTF((">>>> returning PCRE_ERROR_NOMATCH\n"));
-
-return PCRE_ERROR_NOMATCH;
-}
-
-/* End of pcre.c */
diff --git a/ext/pcre/pcrelib/pcre.def b/ext/pcre/pcrelib/pcre.def
deleted file mode 100644
index 4f6c4bff40..0000000000
--- a/ext/pcre/pcrelib/pcre.def
+++ /dev/null
@@ -1,22 +0,0 @@
-EXPORTS
-
-pcre_malloc DATA
-pcre_free DATA
-
-pcre_compile
-pcre_copy_substring
-pcre_exec
-pcre_get_substring
-pcre_get_substring_list
-pcre_free_substring
-pcre_free_substring_list
-pcre_info
-pcre_fullinfo
-pcre_maketables
-pcre_study
-pcre_version
-
-regcomp
-regexec
-regerror
-regfree
diff --git a/ext/pcre/pcrelib/pcre.h b/ext/pcre/pcrelib/pcre.h
deleted file mode 100644
index 6582ca9e71..0000000000
--- a/ext/pcre/pcrelib/pcre.h
+++ /dev/null
@@ -1,195 +0,0 @@
-/*************************************************
-* Perl-Compatible Regular Expressions *
-*************************************************/
-
-/* Copyright (c) 1997-2003 University of Cambridge */
-
-#ifndef _PCRE_H
-#define _PCRE_H
-
-/* The file pcre.h is build by "configure". Do not edit it; instead
-make changes to pcre.in. */
-
-#include "php_compat.h"
-
-#define PCRE_MAJOR 4
-#define PCRE_MINOR 5
-#define PCRE_DATE 01-December-2003
-
-/* Win32 uses DLL by default */
-
-#ifdef _WIN32
-# ifdef PCRE_DEFINITION
-# ifdef DLL_EXPORT
-# define PCRE_DATA_SCOPE __declspec(dllexport)
-# endif
-# else
-# ifndef PCRE_STATIC
-# define PCRE_DATA_SCOPE extern __declspec(dllimport)
-# endif
-# endif
-#endif
-#ifndef PCRE_DATA_SCOPE
-# define PCRE_DATA_SCOPE extern
-#endif
-
-/* Have to include stdlib.h in order to ensure that size_t is defined;
-it is needed here for malloc. */
-
-#include <stdlib.h>
-
-/* Allow for C++ users */
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/* Options */
-
-#define PCRE_CASELESS 0x0001
-#define PCRE_MULTILINE 0x0002
-#define PCRE_DOTALL 0x0004
-#define PCRE_EXTENDED 0x0008
-#define PCRE_ANCHORED 0x0010
-#define PCRE_DOLLAR_ENDONLY 0x0020
-#define PCRE_EXTRA 0x0040
-#define PCRE_NOTBOL 0x0080
-#define PCRE_NOTEOL 0x0100
-#define PCRE_UNGREEDY 0x0200
-#define PCRE_NOTEMPTY 0x0400
-#define PCRE_UTF8 0x0800
-#define PCRE_NO_AUTO_CAPTURE 0x1000
-#define PCRE_NO_UTF8_CHECK 0x2000
-
-/* Exec-time and get/set-time error codes */
-
-#define PCRE_ERROR_NOMATCH (-1)
-#define PCRE_ERROR_NULL (-2)
-#define PCRE_ERROR_BADOPTION (-3)
-#define PCRE_ERROR_BADMAGIC (-4)
-#define PCRE_ERROR_UNKNOWN_NODE (-5)
-#define PCRE_ERROR_NOMEMORY (-6)
-#define PCRE_ERROR_NOSUBSTRING (-7)
-#define PCRE_ERROR_MATCHLIMIT (-8)
-#define PCRE_ERROR_CALLOUT (-9) /* Never used by PCRE itself */
-#define PCRE_ERROR_BADUTF8 (-10)
-#define PCRE_ERROR_BADUTF8_OFFSET (-11)
-
-/* Request types for pcre_fullinfo() */
-
-#define PCRE_INFO_OPTIONS 0
-#define PCRE_INFO_SIZE 1
-#define PCRE_INFO_CAPTURECOUNT 2
-#define PCRE_INFO_BACKREFMAX 3
-#define PCRE_INFO_FIRSTBYTE 4
-#define PCRE_INFO_FIRSTCHAR 4 /* For backwards compatibility */
-#define PCRE_INFO_FIRSTTABLE 5
-#define PCRE_INFO_LASTLITERAL 6
-#define PCRE_INFO_NAMEENTRYSIZE 7
-#define PCRE_INFO_NAMECOUNT 8
-#define PCRE_INFO_NAMETABLE 9
-#define PCRE_INFO_STUDYSIZE 10
-
-/* Request types for pcre_config() */
-
-#define PCRE_CONFIG_UTF8 0
-#define PCRE_CONFIG_NEWLINE 1
-#define PCRE_CONFIG_LINK_SIZE 2
-#define PCRE_CONFIG_POSIX_MALLOC_THRESHOLD 3
-#define PCRE_CONFIG_MATCH_LIMIT 4
-#define PCRE_CONFIG_STACKRECURSE 5
-
-/* Bit flags for the pcre_extra structure */
-
-#define PCRE_EXTRA_STUDY_DATA 0x0001
-#define PCRE_EXTRA_MATCH_LIMIT 0x0002
-#define PCRE_EXTRA_CALLOUT_DATA 0x0004
-
-/* Types */
-
-struct real_pcre; /* declaration; the definition is private */
-typedef struct real_pcre pcre;
-
-/* The structure for passing additional data to pcre_exec(). This is defined in
-such as way as to be extensible. */
-
-typedef struct pcre_extra {
- unsigned long int flags; /* Bits for which fields are set */
- void *study_data; /* Opaque data from pcre_study() */
- unsigned long int match_limit; /* Maximum number of calls to match() */
- void *callout_data; /* Data passed back in callouts */
-} pcre_extra;
-
-/* The structure for passing out data via the pcre_callout_function. We use a
-structure so that new fields can be added on the end in future versions,
-without changing the API of the function, thereby allowing old clients to work
-without modification. */
-
-typedef struct pcre_callout_block {
- int version; /* Identifies version of block */
- /* ------------------------ Version 0 ------------------------------- */
- int callout_number; /* Number compiled into pattern */
- int *offset_vector; /* The offset vector */
- const char *subject; /* The subject being matched */
- int subject_length; /* The length of the subject */
- int start_match; /* Offset to start of this match attempt */
- int current_position; /* Where we currently are */
- int capture_top; /* Max current capture */
- int capture_last; /* Most recently closed capture */
- void *callout_data; /* Data passed in with the call */
- /* ------------------------------------------------------------------ */
-} pcre_callout_block;
-
-/* Indirection for store get and free functions. These can be set to
-alternative malloc/free functions if required. Special ones are used in the
-non-recursive case for "frames". There is also an optional callout function
-that is triggered by the (?) regex item. Some magic is required for Win32 DLL;
-it is null on other OS. For Virtual Pascal, these have to be different again.
-*/
-
-#ifndef VPCOMPAT
-PCRE_DATA_SCOPE void *(*pcre_malloc)(size_t);
-PCRE_DATA_SCOPE void (*pcre_free)(void *);
-PCRE_DATA_SCOPE void *(*pcre_stack_malloc)(size_t);
-PCRE_DATA_SCOPE void (*pcre_stack_free)(void *);
-PCRE_DATA_SCOPE int (*pcre_callout)(pcre_callout_block *);
-#else /* VPCOMPAT */
-extern void *pcre_malloc(size_t);
-extern void pcre_free(void *);
-extern void *pcre_stack_malloc(size_t);
-extern void pcre_stack_free(void *);
-extern int pcre_callout(pcre_callout_block *);
-#endif /* VPCOMPAT */
-
-/* Exported PCRE functions */
-
-extern pcre *pcre_compile(const char *, int, const char **,
- int *, const unsigned char *);
-extern int pcre_config(int, void *);
-extern int pcre_copy_named_substring(const pcre *, const char *,
- int *, int, const char *, char *, int);
-extern int pcre_copy_substring(const char *, int *, int, int,
- char *, int);
-extern int pcre_exec(const pcre *, const pcre_extra *,
- const char *, int, int, int, int *, int);
-extern void pcre_free_substring(const char *);
-extern void pcre_free_substring_list(const char **);
-extern int pcre_fullinfo(const pcre *, const pcre_extra *, int,
- void *);
-extern int pcre_get_named_substring(const pcre *, const char *,
- int *, int, const char *, const char **);
-extern int pcre_get_stringnumber(const pcre *, const char *);
-extern int pcre_get_substring(const char *, int *, int, int,
- const char **);
-extern int pcre_get_substring_list(const char *, int *, int,
- const char ***);
-extern int pcre_info(const pcre *, int *, int *);
-extern const unsigned char *pcre_maketables(void);
-extern pcre_extra *pcre_study(const pcre *, int, const char **);
-extern const char *pcre_version(void);
-
-#ifdef __cplusplus
-} /* extern "C" */
-#endif
-
-#endif /* End of pcre.h */
diff --git a/ext/pcre/pcrelib/pcregrep.c b/ext/pcre/pcrelib/pcregrep.c
deleted file mode 100644
index 7a06993d19..0000000000
--- a/ext/pcre/pcrelib/pcregrep.c
+++ /dev/null
@@ -1,642 +0,0 @@
-/*************************************************
-* pcregrep program *
-*************************************************/
-
-/* This is a grep program that uses the PCRE regular expression library to do
-its pattern matching. On a Unix or Win32 system it can recurse into
-directories. */
-
-#include <ctype.h>
-#include <stdio.h>
-#include <string.h>
-#include <stdlib.h>
-#include <errno.h>
-#include "config.h"
-#include "pcre.h"
-
-#define FALSE 0
-#define TRUE 1
-
-typedef int BOOL;
-
-#define VERSION "3.0 14-Jan-2003"
-#define MAX_PATTERN_COUNT 100
-
-
-/*************************************************
-* Global variables *
-*************************************************/
-
-static char *pattern_filename = NULL;
-static int pattern_count = 0;
-static pcre **pattern_list;
-static pcre_extra **hints_list;
-
-static BOOL count_only = FALSE;
-static BOOL filenames = TRUE;
-static BOOL filenames_only = FALSE;
-static BOOL invert = FALSE;
-static BOOL number = FALSE;
-static BOOL recurse = FALSE;
-static BOOL silent = FALSE;
-static BOOL whole_lines = FALSE;
-
-/* Structure for options and list of them */
-
-typedef struct option_item {
- int one_char;
- const char *long_name;
- const char *help_text;
-} option_item;
-
-static option_item optionlist[] = {
- { -1, "help", "display this help and exit" },
- { 'c', "count", "print only a count of matching lines per FILE" },
- { 'h', "no-filename", "suppress the prefixing filename on output" },
- { 'i', "ignore-case", "ignore case distinctions" },
- { 'l', "files-with-matches", "print only FILE names containing matches" },
- { 'n', "line-number", "print line number with output lines" },
- { 'r', "recursive", "recursively scan sub-directories" },
- { 's', "no-messages", "suppress error messages" },
- { 'u', "utf-8", "use UTF-8 mode" },
- { 'V', "version", "print version information and exit" },
- { 'v', "invert-match", "select non-matching lines" },
- { 'x', "line-regex", "force PATTERN to match only whole lines" },
- { 'x', "line-regexp", "force PATTERN to match only whole lines" },
- { 0, NULL, NULL }
-};
-
-
-/*************************************************
-* Functions for directory scanning *
-*************************************************/
-
-/* These functions are defined so that they can be made system specific,
-although at present the only ones are for Unix, Win32, and for "no directory
-recursion support". */
-
-
-/************* Directory scanning in Unix ***********/
-
-#if IS_UNIX
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <dirent.h>
-
-typedef DIR directory_type;
-
-static int
-isdirectory(char *filename)
-{
-struct stat statbuf;
-if (stat(filename, &statbuf) < 0)
- return 0; /* In the expectation that opening as a file will fail */
-return ((statbuf.st_mode & S_IFMT) == S_IFDIR)? '/' : 0;
-}
-
-static directory_type *
-opendirectory(char *filename)
-{
-return opendir(filename);
-}
-
-static char *
-readdirectory(directory_type *dir)
-{
-for (;;)
- {
- struct dirent *dent = readdir(dir);
- if (dent == NULL) return NULL;
- if (strcmp(dent->d_name, ".") != 0 && strcmp(dent->d_name, "..") != 0)
- return dent->d_name;
- }
-return NULL; /* Keep compiler happy; never executed */
-}
-
-static void
-closedirectory(directory_type *dir)
-{
-closedir(dir);
-}
-
-
-/************* Directory scanning in Win32 ***********/
-
-/* I (Philip Hazel) have no means of testing this code. It was contributed by
-Lionel Fourquaux. */
-
-
-#elif HAVE_WIN32API
-
-#ifndef STRICT
-# define STRICT
-#endif
-#ifndef WIN32_LEAN_AND_MEAN
-# define WIN32_LEAN_AND_MEAN
-#endif
-#include <windows.h>
-
-typedef struct directory_type
-{
-HANDLE handle;
-BOOL first;
-WIN32_FIND_DATA data;
-} directory_type;
-
-int
-isdirectory(char *filename)
-{
-DWORD attr = GetFileAttributes(filename);
-if (attr == INVALID_FILE_ATTRIBUTES)
- return 0;
-return ((attr & FILE_ATTRIBUTE_DIRECTORY) != 0) ? '/' : 0;
-}
-
-directory_type *
-opendirectory(char *filename)
-{
-size_t len;
-char *pattern;
-directory_type *dir;
-DWORD err;
-len = strlen(filename);
-pattern = (char *) malloc(len + 3);
-dir = (directory_type *) malloc(sizeof(*dir));
-if ((pattern == NULL) || (dir == NULL))
- {
- fprintf(stderr, "pcregrep: malloc failed\n");
- exit(2);
- }
-memcpy(pattern, filename, len);
-memcpy(&(pattern[len]), "\\*", 3);
-dir->handle = FindFirstFile(pattern, &(dir->data));
-if (dir->handle != INVALID_HANDLE_VALUE)
- {
- free(pattern);
- dir->first = TRUE;
- return dir;
- }
-err = GetLastError();
-free(pattern);
-free(dir);
-errno = (err == ERROR_ACCESS_DENIED) ? EACCES : ENOENT;
-return NULL;
-}
-
-char *
-readdirectory(directory_type *dir)
-{
-for (;;)
- {
- if (!dir->first)
- {
- if (!FindNextFile(dir->handle, &(dir->data)))
- return NULL;
- }
- else
- {
- dir->first = FALSE;
- }
- if (strcmp(dir->data.cFileName, ".") != 0 && strcmp(dir->data.cFileName, "..") != 0)
- return dir->data.cFileName;
- }
-#ifndef _MSC_VER
-return NULL; /* Keep compiler happy; never executed */
-#endif
-}
-
-void
-closedirectory(directory_type *dir)
-{
-FindClose(dir->handle);
-free(dir);
-}
-
-
-/************* Directory scanning when we can't do it ***********/
-
-/* The type is void, and apart from isdirectory(), the functions do nothing. */
-
-#else
-
-typedef void directory_type;
-
-int isdirectory(char *filename) { return FALSE; }
-directory_type * opendirectory(char *filename) {}
-char *readdirectory(directory_type *dir) {}
-void closedirectory(directory_type *dir) {}
-
-#endif
-
-
-
-#if ! HAVE_STRERROR
-/*************************************************
-* Provide strerror() for non-ANSI libraries *
-*************************************************/
-
-/* Some old-fashioned systems still around (e.g. SunOS4) don't have strerror()
-in their libraries, but can provide the same facility by this simple
-alternative function. */
-
-extern int sys_nerr;
-extern char *sys_errlist[];
-
-char *
-strerror(int n)
-{
-if (n < 0 || n >= sys_nerr) return "unknown error number";
-return sys_errlist[n];
-}
-#endif /* HAVE_STRERROR */
-
-
-
-/*************************************************
-* Grep an individual file *
-*************************************************/
-
-static int
-pcregrep(FILE *in, char *name)
-{
-int rc = 1;
-int linenumber = 0;
-int count = 0;
-int offsets[99];
-char buffer[BUFSIZ];
-
-while (fgets(buffer, sizeof(buffer), in) != NULL)
- {
- BOOL match = FALSE;
- int i;
- int length = (int)strlen(buffer);
- if (length > 0 && buffer[length-1] == '\n') buffer[--length] = 0;
- linenumber++;
-
- for (i = 0; !match && i < pattern_count; i++)
- {
- match = pcre_exec(pattern_list[i], hints_list[i], buffer, length, 0, 0,
- offsets, 99) >= 0;
- if (match && whole_lines && offsets[1] != length) match = FALSE;
- }
-
- if (match != invert)
- {
- if (count_only) count++;
-
- else if (filenames_only)
- {
- fprintf(stdout, "%s\n", (name == NULL)? "<stdin>" : name);
- return 0;
- }
-
- else if (silent) return 0;
-
- else
- {
- if (name != NULL) fprintf(stdout, "%s:", name);
- if (number) fprintf(stdout, "%d:", linenumber);
- fprintf(stdout, "%s\n", buffer);
- }
-
- rc = 0;
- }
- }
-
-if (count_only)
- {
- if (name != NULL) fprintf(stdout, "%s:", name);
- fprintf(stdout, "%d\n", count);
- }
-
-return rc;
-}
-
-
-
-
-/*************************************************
-* Grep a file or recurse into a directory *
-*************************************************/
-
-static int
-grep_or_recurse(char *filename, BOOL dir_recurse, BOOL show_filenames,
- BOOL only_one_at_top)
-{
-int rc = 1;
-int sep;
-FILE *in;
-
-/* If the file is a directory and we are recursing, scan each file within it.
-The scanning code is localized so it can be made system-specific. */
-
-if ((sep = isdirectory(filename)) != 0 && dir_recurse)
- {
- char buffer[1024];
- char *nextfile;
- directory_type *dir = opendirectory(filename);
-
- if (dir == NULL)
- {
- fprintf(stderr, "pcregrep: Failed to open directory %s: %s\n", filename,
- strerror(errno));
- return 2;
- }
-
- while ((nextfile = readdirectory(dir)) != NULL)
- {
- int frc;
- sprintf(buffer, "%.512s%c%.128s", filename, sep, nextfile);
- frc = grep_or_recurse(buffer, dir_recurse, TRUE, FALSE);
- if (frc == 0 && rc == 1) rc = 0;
- }
-
- closedirectory(dir);
- return rc;
- }
-
-/* If the file is not a directory, or we are not recursing, scan it. If this is
-the first and only argument at top level, we don't show the file name (unless
-we are only showing the file name). Otherwise, control is via the
-show_filenames variable. */
-
-in = fopen(filename, "r");
-if (in == NULL)
- {
- fprintf(stderr, "pcregrep: Failed to open %s: %s\n", filename, strerror(errno));
- return 2;
- }
-
-rc = pcregrep(in, (filenames_only || (show_filenames && !only_one_at_top))?
- filename : NULL);
-fclose(in);
-return rc;
-}
-
-
-
-
-/*************************************************
-* Usage function *
-*************************************************/
-
-static int
-usage(int rc)
-{
-fprintf(stderr, "Usage: pcregrep [-Vcfhilnrsvx] [long-options] [pattern] [file1 file2 ...]\n");
-fprintf(stderr, "Type `pcregrep --help' for more information.\n");
-return rc;
-}
-
-
-
-
-/*************************************************
-* Help function *
-*************************************************/
-
-static void
-help(void)
-{
-option_item *op;
-
-printf("Usage: pcregrep [OPTION]... [PATTERN] [FILE1 FILE2 ...]\n");
-printf("Search for PATTERN in each FILE or standard input.\n");
-printf("PATTERN must be present if -f is not used.\n");
-printf("Example: pcregrep -i 'hello.*world' menu.h main.c\n\n");
-
-printf("Options:\n");
-
-for (op = optionlist; op->one_char != 0; op++)
- {
- int n;
- char s[4];
- if (op->one_char > 0) sprintf(s, "-%c,", op->one_char); else strcpy(s, " ");
- printf(" %s --%s%n", s, op->long_name, &n);
- n = 30 - n;
- if (n < 1) n = 1;
- printf("%.*s%s\n", n, " ", op->help_text);
- }
-
-printf("\n -f<filename> or --file=<filename>\n");
-printf(" Read patterns from <filename> instead of using a command line option.\n");
-printf(" Trailing white space is removed; blanks lines are ignored.\n");
-printf(" There is a maximum of %d patterns.\n", MAX_PATTERN_COUNT);
-
-printf("\nWith no FILE, read standard input. If fewer than two FILEs given, assume -h.\n");
-printf("Exit status is 0 if any matches, 1 if no matches, and 2 if trouble.\n");
-}
-
-
-
-
-/*************************************************
-* Handle an option *
-*************************************************/
-
-static int
-handle_option(int letter, int options)
-{
-switch(letter)
- {
- case -1: help(); exit(0);
- case 'c': count_only = TRUE; break;
- case 'h': filenames = FALSE; break;
- case 'i': options |= PCRE_CASELESS; break;
- case 'l': filenames_only = TRUE;
- case 'n': number = TRUE; break;
- case 'r': recurse = TRUE; break;
- case 's': silent = TRUE; break;
- case 'u': options |= PCRE_UTF8; break;
- case 'v': invert = TRUE; break;
- case 'x': whole_lines = TRUE; options |= PCRE_ANCHORED; break;
-
- case 'V':
- fprintf(stderr, "pcregrep version %s using ", VERSION);
- fprintf(stderr, "PCRE version %s\n", pcre_version());
- exit(0);
- break;
-
- default:
- fprintf(stderr, "pcregrep: Unknown option -%c\n", letter);
- exit(usage(2));
- }
-
-return options;
-}
-
-
-
-
-/*************************************************
-* Main program *
-*************************************************/
-
-int
-main(int argc, char **argv)
-{
-int i, j;
-int rc = 1;
-int options = 0;
-int errptr;
-const char *error;
-BOOL only_one_at_top;
-
-/* Process the options */
-
-for (i = 1; i < argc; i++)
- {
- if (argv[i][0] != '-') break;
-
- /* Missing options */
-
- if (argv[i][1] == 0) exit(usage(2));
-
- /* Long name options */
-
- if (argv[i][1] == '-')
- {
- option_item *op;
-
- if (strncmp(argv[i]+2, "file=", 5) == 0)
- {
- pattern_filename = argv[i] + 7;
- continue;
- }
-
- for (op = optionlist; op->one_char != 0; op++)
- {
- if (strcmp(argv[i]+2, op->long_name) == 0)
- {
- options = handle_option(op->one_char, options);
- break;
- }
- }
- if (op->one_char == 0)
- {
- fprintf(stderr, "pcregrep: Unknown option %s\n", argv[i]);
- exit(usage(2));
- }
- }
-
- /* One-char options */
-
- else
- {
- char *s = argv[i] + 1;
- while (*s != 0)
- {
- if (*s == 'f')
- {
- pattern_filename = s + 1;
- if (pattern_filename[0] == 0)
- {
- if (i >= argc - 1)
- {
- fprintf(stderr, "pcregrep: File name missing after -f\n");
- exit(usage(2));
- }
- pattern_filename = argv[++i];
- }
- break;
- }
- else options = handle_option(*s++, options);
- }
- }
- }
-
-pattern_list = (pcre **)malloc(MAX_PATTERN_COUNT * sizeof(pcre *));
-hints_list = (pcre_extra **)malloc(MAX_PATTERN_COUNT * sizeof(pcre_extra *));
-
-if (pattern_list == NULL || hints_list == NULL)
- {
- fprintf(stderr, "pcregrep: malloc failed\n");
- return 2;
- }
-
-/* Compile the regular expression(s). */
-
-if (pattern_filename != NULL)
- {
- FILE *f = fopen(pattern_filename, "r");
- char buffer[BUFSIZ];
- if (f == NULL)
- {
- fprintf(stderr, "pcregrep: Failed to open %s: %s\n", pattern_filename,
- strerror(errno));
- return 2;
- }
- while (fgets(buffer, sizeof(buffer), f) != NULL)
- {
- char *s = buffer + (int)strlen(buffer);
- if (pattern_count >= MAX_PATTERN_COUNT)
- {
- fprintf(stderr, "pcregrep: Too many patterns in file (max %d)\n",
- MAX_PATTERN_COUNT);
- return 2;
- }
- while (s > buffer && isspace((unsigned char)(s[-1]))) s--;
- if (s == buffer) continue;
- *s = 0;
- pattern_list[pattern_count] = pcre_compile(buffer, options, &error,
- &errptr, NULL);
- if (pattern_list[pattern_count++] == NULL)
- {
- fprintf(stderr, "pcregrep: Error in regex number %d at offset %d: %s\n",
- pattern_count, errptr, error);
- return 2;
- }
- }
- fclose(f);
- }
-
-/* If no file name, a single regex must be given inline */
-
-else
- {
- if (i >= argc) return usage(2);
- pattern_list[0] = pcre_compile(argv[i++], options, &error, &errptr, NULL);
- if (pattern_list[0] == NULL)
- {
- fprintf(stderr, "pcregrep: Error in regex at offset %d: %s\n", errptr,
- error);
- return 2;
- }
- pattern_count++;
- }
-
-/* Study the regular expressions, as we will be running them may times */
-
-for (j = 0; j < pattern_count; j++)
- {
- hints_list[j] = pcre_study(pattern_list[j], 0, &error);
- if (error != NULL)
- {
- char s[16];
- if (pattern_count == 1) s[0] = 0; else sprintf(s, " number %d", j);
- fprintf(stderr, "pcregrep: Error while studying regex%s: %s\n", s, error);
- return 2;
- }
- }
-
-/* If there are no further arguments, do the business on stdin and exit */
-
-if (i >= argc) return pcregrep(stdin, NULL);
-
-/* Otherwise, work through the remaining arguments as files or directories.
-Pass in the fact that there is only one argument at top level - this suppresses
-the file name if the argument is not a directory. */
-
-only_one_at_top = (i == argc - 1);
-if (filenames_only) filenames = TRUE;
-
-for (; i < argc; i++)
- {
- int frc = grep_or_recurse(argv[i], recurse, filenames, only_one_at_top);
- if (frc == 0 && rc == 1) rc = 0;
- }
-
-return rc;
-}
-
-/* End */
diff --git a/ext/pcre/pcrelib/pcreposix.c b/ext/pcre/pcrelib/pcreposix.c
deleted file mode 100644
index b2551bb3ee..0000000000
--- a/ext/pcre/pcrelib/pcreposix.c
+++ /dev/null
@@ -1,305 +0,0 @@
-/*************************************************
-* Perl-Compatible Regular Expressions *
-*************************************************/
-
-/*
-This 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. See
-the file Tech.Notes for some information on the internals.
-
-This module is a wrapper that provides a POSIX API to the underlying PCRE
-functions.
-
-Written by: Philip Hazel <ph10@cam.ac.uk>
-
- Copyright (c) 1997-2004 University of Cambridge
-
------------------------------------------------------------------------------
-Permission is granted to anyone to use this software for any purpose on any
-computer system, and to redistribute it freely, subject to the following
-restrictions:
-
-1. This software is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
-
-2. The origin of this software must not be misrepresented, either by
- explicit claim or by omission.
-
-3. Altered versions must be plainly marked as such, and must not be
- misrepresented as being the original software.
-
-4. If PCRE is embedded in any software that is released under the GNU
- General Purpose Licence (GPL), then the terms of that licence shall
- supersede any condition above with which it is incompatible.
------------------------------------------------------------------------------
-*/
-
-#include "internal.h"
-#include "pcreposix.h"
-#include "stdlib.h"
-
-
-
-/* Corresponding tables of PCRE error messages and POSIX error codes. */
-
-static const char *const estring[] = {
- ERR1, ERR2, ERR3, ERR4, ERR5, ERR6, ERR7, ERR8, ERR9, ERR10,
- ERR11, ERR12, ERR13, ERR14, ERR15, ERR16, ERR17, ERR18, ERR19, ERR20,
- ERR21, ERR22, ERR23, ERR24, ERR25, ERR26, ERR27, ERR29, ERR29, ERR30,
- ERR31, ERR32, ERR33, ERR34, ERR35, ERR36, ERR37, ERR38, ERR39, ERR40,
- ERR41, ERR42, ERR43, ERR44 };
-
-static const int eint[] = {
- REG_EESCAPE, /* "\\ at end of pattern" */
- REG_EESCAPE, /* "\\c at end of pattern" */
- REG_EESCAPE, /* "unrecognized character follows \\" */
- REG_BADBR, /* "numbers out of order in {} quantifier" */
- REG_BADBR, /* "number too big in {} quantifier" */
- REG_EBRACK, /* "missing terminating ] for character class" */
- REG_ECTYPE, /* "invalid escape sequence in character class" */
- REG_ERANGE, /* "range out of order in character class" */
- REG_BADRPT, /* "nothing to repeat" */
- REG_BADRPT, /* "operand of unlimited repeat could match the empty string" */
- REG_ASSERT, /* "internal error: unexpected repeat" */
- REG_BADPAT, /* "unrecognized character after (?" */
- REG_BADPAT, /* "POSIX named classes are supported only within a class" */
- REG_EPAREN, /* "missing )" */
- REG_ESUBREG, /* "reference to non-existent subpattern" */
- REG_INVARG, /* "erroffset passed as NULL" */
- REG_INVARG, /* "unknown option bit(s) set" */
- REG_EPAREN, /* "missing ) after comment" */
- REG_ESIZE, /* "parentheses nested too deeply" */
- REG_ESIZE, /* "regular expression too large" */
- REG_ESPACE, /* "failed to get memory" */
- REG_EPAREN, /* "unmatched brackets" */
- REG_ASSERT, /* "internal error: code overflow" */
- REG_BADPAT, /* "unrecognized character after (?<" */
- REG_BADPAT, /* "lookbehind assertion is not fixed length" */
- REG_BADPAT, /* "malformed number after (?(" */
- REG_BADPAT, /* "conditional group containe more than two branches" */
- REG_BADPAT, /* "assertion expected after (?(" */
- REG_BADPAT, /* "(?R or (?digits must be followed by )" */
- REG_ECTYPE, /* "unknown POSIX class name" */
- REG_BADPAT, /* "POSIX collating elements are not supported" */
- REG_INVARG, /* "this version of PCRE is not compiled with PCRE_UTF8 support" */
- REG_BADPAT, /* "spare error" */
- REG_BADPAT, /* "character value in \x{...} sequence is too large" */
- REG_BADPAT, /* "invalid condition (?(0)" */
- REG_BADPAT, /* "\\C not allowed in lookbehind assertion" */
- REG_EESCAPE, /* "PCRE does not support \\L, \\l, \\N, \\P, \\p, \\U, \\u, or \\X" */
- REG_BADPAT, /* "number after (?C is > 255" */
- REG_BADPAT, /* "closing ) for (?C expected" */
- REG_BADPAT, /* "recursive call could loop indefinitely" */
- REG_BADPAT, /* "unrecognized character after (?P" */
- REG_BADPAT, /* "syntax error after (?P" */
- REG_BADPAT, /* "two named groups have the same name" */
- REG_BADPAT /* "invalid UTF-8 string" */
-};
-
-/* Table of texts corresponding to POSIX error codes */
-
-static const char *const pstring[] = {
- "", /* Dummy for value 0 */
- "internal error", /* REG_ASSERT */
- "invalid repeat counts in {}", /* BADBR */
- "pattern error", /* BADPAT */
- "? * + invalid", /* BADRPT */
- "unbalanced {}", /* EBRACE */
- "unbalanced []", /* EBRACK */
- "collation error - not relevant", /* ECOLLATE */
- "bad class", /* ECTYPE */
- "bad escape sequence", /* EESCAPE */
- "empty expression", /* EMPTY */
- "unbalanced ()", /* EPAREN */
- "bad range inside []", /* ERANGE */
- "expression too big", /* ESIZE */
- "failed to get memory", /* ESPACE */
- "bad back reference", /* ESUBREG */
- "bad argument", /* INVARG */
- "match failed" /* NOMATCH */
-};
-
-
-
-
-/*************************************************
-* Translate PCRE text code to int *
-*************************************************/
-
-/* PCRE compile-time errors are given as strings defined as macros. We can just
-look them up in a table to turn them into POSIX-style error codes. */
-
-static int
-pcre_posix_error_code(const char *s)
-{
-size_t i;
-for (i = 0; i < sizeof(estring)/sizeof(char *); i++)
- if (strcmp(s, estring[i]) == 0) return eint[i];
-return REG_ASSERT;
-}
-
-
-
-/*************************************************
-* Translate error code to string *
-*************************************************/
-
-EXPORT size_t
-regerror(int errcode, const regex_t *preg, char *errbuf, size_t errbuf_size)
-{
-const char *message, *addmessage;
-size_t length, addlength;
-
-message = (errcode >= (int)(sizeof(pstring)/sizeof(char *)))?
- "unknown error code" : pstring[errcode];
-length = strlen(message) + 1;
-
-addmessage = " at offset ";
-addlength = (preg != NULL && (int)preg->re_erroffset != -1)?
- strlen(addmessage) + 6 : 0;
-
-if (errbuf_size > 0)
- {
- if (addlength > 0 && errbuf_size >= length + addlength)
- sprintf(errbuf, "%s%s%-6d", message, addmessage, (int)preg->re_erroffset);
- else
- {
- strncpy(errbuf, message, errbuf_size - 1);
- errbuf[errbuf_size-1] = 0;
- }
- }
-
-return length + addlength;
-}
-
-
-
-
-/*************************************************
-* Free store held by a regex *
-*************************************************/
-
-EXPORT void
-regfree(regex_t *preg)
-{
-(pcre_free)(preg->re_pcre);
-}
-
-
-
-
-/*************************************************
-* Compile a regular expression *
-*************************************************/
-
-/*
-Arguments:
- preg points to a structure for recording the compiled expression
- pattern the pattern to compile
- cflags compilation flags
-
-Returns: 0 on success
- various non-zero codes on failure
-*/
-
-EXPORT int
-regcomp(regex_t *preg, const char *pattern, int cflags)
-{
-const char *errorptr;
-int erroffset;
-int options = 0;
-
-if ((cflags & REG_ICASE) != 0) options |= PCRE_CASELESS;
-if ((cflags & REG_NEWLINE) != 0) options |= PCRE_MULTILINE;
-
-preg->re_pcre = pcre_compile(pattern, options, &errorptr, &erroffset, NULL);
-preg->re_erroffset = erroffset;
-
-if (preg->re_pcre == NULL) return pcre_posix_error_code(errorptr);
-
-preg->re_nsub = pcre_info((const pcre *)preg->re_pcre, NULL, NULL);
-return 0;
-}
-
-
-
-
-/*************************************************
-* Match a regular expression *
-*************************************************/
-
-/* Unfortunately, PCRE requires 3 ints of working space for each captured
-substring, so we have to get and release working store instead of just using
-the POSIX structures as was done in earlier releases when PCRE needed only 2
-ints. However, if the number of possible capturing brackets is small, use a
-block of store on the stack, to reduce the use of malloc/free. The threshold is
-in a macro that can be changed at configure time. */
-
-EXPORT int
-regexec(const regex_t *preg, const char *string, size_t nmatch,
- regmatch_t pmatch[], int eflags)
-{
-int rc;
-int options = 0;
-int *ovector = NULL;
-int small_ovector[POSIX_MALLOC_THRESHOLD * 3];
-BOOL allocated_ovector = FALSE;
-
-if ((eflags & REG_NOTBOL) != 0) options |= PCRE_NOTBOL;
-if ((eflags & REG_NOTEOL) != 0) options |= PCRE_NOTEOL;
-
-((regex_t *)preg)->re_erroffset = (size_t)(-1); /* Only has meaning after compile */
-
-if (nmatch > 0)
- {
- if (nmatch <= POSIX_MALLOC_THRESHOLD)
- {
- ovector = &(small_ovector[0]);
- }
- else
- {
- ovector = (int *)malloc(sizeof(int) * nmatch * 3);
- if (ovector == NULL) return REG_ESPACE;
- allocated_ovector = TRUE;
- }
- }
-
-rc = pcre_exec((const pcre *)preg->re_pcre, NULL, string, (int)strlen(string),
- 0, options, ovector, nmatch * 3);
-
-if (rc == 0) rc = nmatch; /* All captured slots were filled in */
-
-if (rc >= 0)
- {
- size_t i;
- for (i = 0; i < (size_t)rc; i++)
- {
- pmatch[i].rm_so = ovector[i*2];
- pmatch[i].rm_eo = ovector[i*2+1];
- }
- if (allocated_ovector) free(ovector);
- for (; i < nmatch; i++) pmatch[i].rm_so = pmatch[i].rm_eo = -1;
- return 0;
- }
-
-else
- {
- if (allocated_ovector) free(ovector);
- switch(rc)
- {
- case PCRE_ERROR_NOMATCH: return REG_NOMATCH;
- case PCRE_ERROR_NULL: return REG_INVARG;
- case PCRE_ERROR_BADOPTION: return REG_INVARG;
- case PCRE_ERROR_BADMAGIC: return REG_INVARG;
- case PCRE_ERROR_UNKNOWN_NODE: return REG_ASSERT;
- case PCRE_ERROR_NOMEMORY: return REG_ESPACE;
- case PCRE_ERROR_MATCHLIMIT: return REG_ESPACE;
- case PCRE_ERROR_BADUTF8: return REG_INVARG;
- case PCRE_ERROR_BADUTF8_OFFSET: return REG_INVARG;
- default: return REG_ASSERT;
- }
- }
-}
-
-/* End of pcreposix.c */
diff --git a/ext/pcre/pcrelib/pcreposix.h b/ext/pcre/pcrelib/pcreposix.h
deleted file mode 100644
index 2b97bf44f5..0000000000
--- a/ext/pcre/pcrelib/pcreposix.h
+++ /dev/null
@@ -1,88 +0,0 @@
-/*************************************************
-* Perl-Compatible Regular Expressions *
-*************************************************/
-
-/* Copyright (c) 1997-2003 University of Cambridge */
-
-#ifndef _PCREPOSIX_H
-#define _PCREPOSIX_H
-
-/* This is the header for the POSIX wrapper interface to the PCRE Perl-
-Compatible Regular Expression library. It defines the things POSIX says should
-be there. I hope. */
-
-/* Have to include stdlib.h in order to ensure that size_t is defined. */
-
-#include <stdlib.h>
-
-/* Allow for C++ users */
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/* Options defined by POSIX. */
-
-#define REG_ICASE 0x01
-#define REG_NEWLINE 0x02
-#define REG_NOTBOL 0x04
-#define REG_NOTEOL 0x08
-
-/* These are not used by PCRE, but by defining them we make it easier
-to slot PCRE into existing programs that make POSIX calls. */
-
-#define REG_EXTENDED 0
-#define REG_NOSUB 0
-
-/* Error values. Not all these are relevant or used by the wrapper. */
-
-enum {
- REG_ASSERT = 1, /* internal error ? */
- REG_BADBR, /* invalid repeat counts in {} */
- REG_BADPAT, /* pattern error */
- REG_BADRPT, /* ? * + invalid */
- REG_EBRACE, /* unbalanced {} */
- REG_EBRACK, /* unbalanced [] */
- REG_ECOLLATE, /* collation error - not relevant */
- REG_ECTYPE, /* bad class */
- REG_EESCAPE, /* bad escape sequence */
- REG_EMPTY, /* empty expression */
- REG_EPAREN, /* unbalanced () */
- REG_ERANGE, /* bad range inside [] */
- REG_ESIZE, /* expression too big */
- REG_ESPACE, /* failed to get memory */
- REG_ESUBREG, /* bad back reference */
- REG_INVARG, /* bad argument */
- REG_NOMATCH /* match failed */
-};
-
-
-/* The structure representing a compiled regular expression. */
-
-typedef struct {
- void *re_pcre;
- size_t re_nsub;
- size_t re_erroffset;
-} regex_t;
-
-/* The structure in which a captured offset is returned. */
-
-typedef int regoff_t;
-
-typedef struct {
- regoff_t rm_so;
- regoff_t rm_eo;
-} regmatch_t;
-
-/* The functions */
-
-extern int regcomp(regex_t *, const char *, int);
-extern int regexec(const regex_t *, const char *, size_t, regmatch_t *, int);
-extern size_t regerror(int, const regex_t *, char *, size_t);
-extern void regfree(regex_t *);
-
-#ifdef __cplusplus
-} /* extern "C" */
-#endif
-
-#endif /* End of pcreposix.h */
diff --git a/ext/pcre/pcrelib/pcretest.c b/ext/pcre/pcrelib/pcretest.c
deleted file mode 100644
index bcc661b684..0000000000
--- a/ext/pcre/pcrelib/pcretest.c
+++ /dev/null
@@ -1,1483 +0,0 @@
-/*************************************************
-* PCRE testing program *
-*************************************************/
-
-/* This program was hacked up as a tester for PCRE. I really should have
-written it more tidily in the first place. Will I ever learn? It has grown and
-been extended and consequently is now rather untidy in places. */
-
-#include <ctype.h>
-#include <stdio.h>
-#include <string.h>
-#include <stdlib.h>
-#include <time.h>
-#include <locale.h>
-
-/* We need the internal info for displaying the results of pcre_study(). Also
-for getting the opcodes for showing compiled code. */
-
-#define PCRE_SPY /* For Win32 build, import data, not export */
-#include "internal.h"
-
-/* It is possible to compile this test program without including support for
-testing the POSIX interface, though this is not available via the standard
-Makefile. */
-
-#if !defined NOPOSIX
-#include "pcreposix.h"
-#endif
-
-#ifndef CLOCKS_PER_SEC
-#ifdef CLK_TCK
-#define CLOCKS_PER_SEC CLK_TCK
-#else
-#define CLOCKS_PER_SEC 100
-#endif
-#endif
-
-#define LOOPREPEAT 50000
-
-#define BUFFER_SIZE 30000
-#define DBUFFER_SIZE BUFFER_SIZE
-
-
-static FILE *outfile;
-static int log_store = 0;
-static int callout_count;
-static int callout_extra;
-static int callout_fail_count;
-static int callout_fail_id;
-static int first_callout;
-static int show_malloc;
-static int use_utf8;
-static size_t gotten_store;
-
-
-static const int utf8_table1[] = {
- 0x0000007f, 0x000007ff, 0x0000ffff, 0x001fffff, 0x03ffffff, 0x7fffffff};
-
-static const int utf8_table2[] = {
- 0, 0xc0, 0xe0, 0xf0, 0xf8, 0xfc};
-
-static const int utf8_table3[] = {
- 0xff, 0x1f, 0x0f, 0x07, 0x03, 0x01};
-
-
-
-/*************************************************
-* Print compiled regex *
-*************************************************/
-
-/* The code for doing this is held in a separate file that is also included in
-pcre.c when it is compiled with the debug switch. It defines a function called
-print_internals(), which uses a table of opcode lengths defined by the macro
-OP_LENGTHS, whose name must be OP_lengths. */
-
-static uschar OP_lengths[] = { OP_LENGTHS };
-
-#include "printint.c"
-
-
-
-/*************************************************
-* Read number from string *
-*************************************************/
-
-/* We don't use strtoul() because SunOS4 doesn't have it. Rather than mess
-around with conditional compilation, just do the job by hand. It is only used
-for unpicking the -o argument, so just keep it simple.
-
-Arguments:
- str string to be converted
- endptr where to put the end pointer
-
-Returns: the unsigned long
-*/
-
-static int
-get_value(unsigned char *str, unsigned char **endptr)
-{
-int result = 0;
-while(*str != 0 && isspace(*str)) str++;
-while (isdigit(*str)) result = result * 10 + (int)(*str++ - '0');
-*endptr = str;
-return(result);
-}
-
-
-
-/*************************************************
-* Convert character value to UTF-8 *
-*************************************************/
-
-/* This function takes an integer value in the range 0 - 0x7fffffff
-and encodes it as a UTF-8 character in 0 to 6 bytes.
-
-Arguments:
- cvalue the character value
- buffer pointer to buffer for result - at least 6 bytes long
-
-Returns: number of characters placed in the buffer
- -1 if input character is negative
- 0 if input character is positive but too big (only when
- int is longer than 32 bits)
-*/
-
-static int
-ord2utf8(int cvalue, unsigned char *buffer)
-{
-register int i, j;
-for (i = 0; i < sizeof(utf8_table1)/sizeof(int); i++)
- if (cvalue <= utf8_table1[i]) break;
-if (i >= sizeof(utf8_table1)/sizeof(int)) return 0;
-if (cvalue < 0) return -1;
-
-buffer += i;
-for (j = i; j > 0; j--)
- {
- *buffer-- = 0x80 | (cvalue & 0x3f);
- cvalue >>= 6;
- }
-*buffer = utf8_table2[i] | cvalue;
-return i + 1;
-}
-
-
-/*************************************************
-* Convert UTF-8 string to value *
-*************************************************/
-
-/* This function takes one or more bytes that represents a UTF-8 character,
-and returns the value of the character.
-
-Argument:
- buffer a pointer to the byte vector
- vptr a pointer to an int to receive the value
-
-Returns: > 0 => the number of bytes consumed
- -6 to 0 => malformed UTF-8 character at offset = (-return)
-*/
-
-static int
-utf82ord(unsigned char *buffer, int *vptr)
-{
-int c = *buffer++;
-int d = c;
-int i, j, s;
-
-for (i = -1; i < 6; i++) /* i is number of additional bytes */
- {
- if ((d & 0x80) == 0) break;
- d <<= 1;
- }
-
-if (i == -1) { *vptr = c; return 1; } /* ascii character */
-if (i == 0 || i == 6) return 0; /* invalid UTF-8 */
-
-/* i now has a value in the range 1-5 */
-
-s = 6*i;
-d = (c & utf8_table3[i]) << s;
-
-for (j = 0; j < i; j++)
- {
- c = *buffer++;
- if ((c & 0xc0) != 0x80) return -(j+1);
- s -= 6;
- d |= (c & 0x3f) << s;
- }
-
-/* Check that encoding was the correct unique one */
-
-for (j = 0; j < sizeof(utf8_table1)/sizeof(int); j++)
- if (d <= utf8_table1[j]) break;
-if (j != i) return -(i+1);
-
-/* Valid value */
-
-*vptr = d;
-return i+1;
-}
-
-
-
-/*************************************************
-* Print character string *
-*************************************************/
-
-/* Character string printing function. Must handle UTF-8 strings in utf8
-mode. Yields number of characters printed. If handed a NULL file, just counts
-chars without printing. */
-
-static int pchars(unsigned char *p, int length, FILE *f)
-{
-int c;
-int yield = 0;
-
-while (length-- > 0)
- {
- if (use_utf8)
- {
- int rc = utf82ord(p, &c);
-
- if (rc > 0 && rc <= length + 1) /* Mustn't run over the end */
- {
- length -= rc - 1;
- p += rc;
- if (c < 256 && isprint(c))
- {
- if (f != NULL) fprintf(f, "%c", c);
- yield++;
- }
- else
- {
- int n;
- if (f != NULL) fprintf(f, "\\x{%02x}%n", c, &n);
- yield += n;
- }
- continue;
- }
- }
-
- /* Not UTF-8, or malformed UTF-8 */
-
- if (isprint(c = *(p++)))
- {
- if (f != NULL) fprintf(f, "%c", c);
- yield++;
- }
- else
- {
- if (f != NULL) fprintf(f, "\\x%02x", c);
- yield += 4;
- }
- }
-
-return yield;
-}
-
-
-
-/*************************************************
-* Callout function *
-*************************************************/
-
-/* Called from PCRE as a result of the (?C) item. We print out where we are in
-the match. Yield zero unless more callouts than the fail count, or the callout
-data is not zero. */
-
-static int callout(pcre_callout_block *cb)
-{
-FILE *f = (first_callout | callout_extra)? outfile : NULL;
-int i, pre_start, post_start;
-
-if (callout_extra)
- {
- fprintf(f, "Callout %d: last capture = %d\n",
- cb->callout_number, cb->capture_last);
-
- for (i = 0; i < cb->capture_top * 2; i += 2)
- {
- if (cb->offset_vector[i] < 0)
- fprintf(f, "%2d: <unset>\n", i/2);
- else
- {
- fprintf(f, "%2d: ", i/2);
- (void)pchars((unsigned char *)cb->subject + cb->offset_vector[i],
- cb->offset_vector[i+1] - cb->offset_vector[i], f);
- fprintf(f, "\n");
- }
- }
- }
-
-/* Re-print the subject in canonical form, the first time or if giving full
-datails. On subsequent calls in the same match, we use pchars just to find the
-printed lengths of the substrings. */
-
-if (f != NULL) fprintf(f, "--->");
-
-pre_start = pchars((unsigned char *)cb->subject, cb->start_match, f);
-post_start = pchars((unsigned char *)(cb->subject + cb->start_match),
- cb->current_position - cb->start_match, f);
-
-(void)pchars((unsigned char *)(cb->subject + cb->current_position),
- cb->subject_length - cb->current_position, f);
-
-if (f != NULL) fprintf(f, "\n");
-
-/* Always print appropriate indicators, with callout number if not already
-shown */
-
-if (callout_extra) fprintf(outfile, " ");
- else fprintf(outfile, "%3d ", cb->callout_number);
-
-for (i = 0; i < pre_start; i++) fprintf(outfile, " ");
-fprintf(outfile, "^");
-
-if (post_start > 0)
- {
- for (i = 0; i < post_start - 1; i++) fprintf(outfile, " ");
- fprintf(outfile, "^");
- }
-
-fprintf(outfile, "\n");
-first_callout = 0;
-
-if (cb->callout_data != NULL)
- {
- int callout_data = *((int *)(cb->callout_data));
- if (callout_data != 0)
- {
- fprintf(outfile, "Callout data = %d\n", callout_data);
- return callout_data;
- }
- }
-
-return (cb->callout_number != callout_fail_id)? 0 :
- (++callout_count >= callout_fail_count)? 1 : 0;
-}
-
-
-/*************************************************
-* Local malloc functions *
-*************************************************/
-
-/* Alternative malloc function, to test functionality and show the size of the
-compiled re. */
-
-static void *new_malloc(size_t size)
-{
-void *block = malloc(size);
-gotten_store = size;
-if (show_malloc)
- fprintf(outfile, "malloc %3d %p\n", size, block);
-return block;
-}
-
-static void new_free(void *block)
-{
-if (show_malloc)
- fprintf(outfile, "free %p\n", block);
-free(block);
-}
-
-
-/* For recursion malloc/free, to test stacking calls */
-
-static void *stack_malloc(size_t size)
-{
-void *block = malloc(size);
-if (show_malloc)
- fprintf(outfile, "stack_malloc %3d %p\n", size, block);
-return block;
-}
-
-static void stack_free(void *block)
-{
-if (show_malloc)
- fprintf(outfile, "stack_free %p\n", block);
-free(block);
-}
-
-
-/*************************************************
-* Call pcre_fullinfo() *
-*************************************************/
-
-/* Get one piece of information from the pcre_fullinfo() function */
-
-static void new_info(pcre *re, pcre_extra *study, int option, void *ptr)
-{
-int rc;
-if ((rc = pcre_fullinfo(re, study, option, ptr)) < 0)
- fprintf(outfile, "Error %d from pcre_fullinfo(%d)\n", rc, option);
-}
-
-
-
-/*************************************************
-* Main Program *
-*************************************************/
-
-/* Read lines from named file or stdin and write to named file or stdout; lines
-consist of a regular expression, in delimiters and optionally followed by
-options, followed by a set of test data, terminated by an empty line. */
-
-int main(int argc, char **argv)
-{
-FILE *infile = stdin;
-int options = 0;
-int study_options = 0;
-int op = 1;
-int timeit = 0;
-int showinfo = 0;
-int showstore = 0;
-int size_offsets = 45;
-int size_offsets_max;
-int *offsets;
-#if !defined NOPOSIX
-int posix = 0;
-#endif
-int debug = 0;
-int done = 0;
-
-unsigned char *buffer;
-unsigned char *dbuffer;
-
-/* Get buffers from malloc() so that Electric Fence will check their misuse
-when I am debugging. */
-
-buffer = (unsigned char *)malloc(BUFFER_SIZE);
-dbuffer = (unsigned char *)malloc(DBUFFER_SIZE);
-
-/* Static so that new_malloc can use it. */
-
-outfile = stdout;
-
-/* Scan options */
-
-while (argc > 1 && argv[op][0] == '-')
- {
- unsigned char *endptr;
-
- if (strcmp(argv[op], "-s") == 0 || strcmp(argv[op], "-m") == 0)
- showstore = 1;
- else if (strcmp(argv[op], "-t") == 0) timeit = 1;
- else if (strcmp(argv[op], "-i") == 0) showinfo = 1;
- else if (strcmp(argv[op], "-d") == 0) showinfo = debug = 1;
- else if (strcmp(argv[op], "-o") == 0 && argc > 2 &&
- ((size_offsets = get_value((unsigned char *)argv[op+1], &endptr)),
- *endptr == 0))
- {
- op++;
- argc--;
- }
-#if !defined NOPOSIX
- else if (strcmp(argv[op], "-p") == 0) posix = 1;
-#endif
- else if (strcmp(argv[op], "-C") == 0)
- {
- int rc;
- printf("PCRE version %s\n", pcre_version());
- printf("Compiled with\n");
- (void)pcre_config(PCRE_CONFIG_UTF8, &rc);
- printf(" %sUTF-8 support\n", rc? "" : "No ");
- (void)pcre_config(PCRE_CONFIG_NEWLINE, &rc);
- printf(" Newline character is %s\n", (rc == '\r')? "CR" : "LF");
- (void)pcre_config(PCRE_CONFIG_LINK_SIZE, &rc);
- printf(" Internal link size = %d\n", rc);
- (void)pcre_config(PCRE_CONFIG_POSIX_MALLOC_THRESHOLD, &rc);
- printf(" POSIX malloc threshold = %d\n", rc);
- (void)pcre_config(PCRE_CONFIG_MATCH_LIMIT, &rc);
- printf(" Default match limit = %d\n", rc);
- (void)pcre_config(PCRE_CONFIG_STACKRECURSE, &rc);
- printf(" Match recursion uses %s\n", rc? "stack" : "heap");
- exit(0);
- }
- else
- {
- printf("** Unknown or malformed option %s\n", argv[op]);
- printf("Usage: pcretest [-d] [-i] [-o <n>] [-p] [-s] [-t] [<input> [<output>]]\n");
- printf(" -C show PCRE compile-time options and exit\n");
- printf(" -d debug: show compiled code; implies -i\n"
- " -i show information about compiled pattern\n"
- " -o <n> set size of offsets vector to <n>\n");
-#if !defined NOPOSIX
- printf(" -p use POSIX interface\n");
-#endif
- printf(" -s output store information\n"
- " -t time compilation and execution\n");
- return 1;
- }
- op++;
- argc--;
- }
-
-/* Get the store for the offsets vector, and remember what it was */
-
-size_offsets_max = size_offsets;
-offsets = (int *)malloc(size_offsets_max * sizeof(int));
-if (offsets == NULL)
- {
- printf("** Failed to get %d bytes of memory for offsets vector\n",
- size_offsets_max * sizeof(int));
- return 1;
- }
-
-/* Sort out the input and output files */
-
-if (argc > 1)
- {
- infile = fopen(argv[op], "r");
- if (infile == NULL)
- {
- printf("** Failed to open %s\n", argv[op]);
- return 1;
- }
- }
-
-if (argc > 2)
- {
- outfile = fopen(argv[op+1], "w");
- if (outfile == NULL)
- {
- printf("** Failed to open %s\n", argv[op+1]);
- return 1;
- }
- }
-
-/* Set alternative malloc function */
-
-pcre_malloc = new_malloc;
-pcre_free = new_free;
-pcre_stack_malloc = stack_malloc;
-pcre_stack_free = stack_free;
-
-/* Heading line, then prompt for first regex if stdin */
-
-fprintf(outfile, "PCRE version %s\n\n", pcre_version());
-
-/* Main loop */
-
-while (!done)
- {
- pcre *re = NULL;
- pcre_extra *extra = NULL;
-
-#if !defined NOPOSIX /* There are still compilers that require no indent */
- regex_t preg;
- int do_posix = 0;
-#endif
-
- const char *error;
- unsigned char *p, *pp, *ppp;
- const unsigned char *tables = NULL;
- int do_study = 0;
- int do_debug = debug;
- int do_G = 0;
- int do_g = 0;
- int do_showinfo = showinfo;
- int do_showrest = 0;
- int erroroffset, len, delimiter;
-
- use_utf8 = 0;
-
- if (infile == stdin) printf(" re> ");
- if (fgets((char *)buffer, BUFFER_SIZE, infile) == NULL) break;
- if (infile != stdin) fprintf(outfile, "%s", (char *)buffer);
- fflush(outfile);
-
- p = buffer;
- while (isspace(*p)) p++;
- if (*p == 0) continue;
-
- /* Get the delimiter and seek the end of the pattern; if is isn't
- complete, read more. */
-
- delimiter = *p++;
-
- if (isalnum(delimiter) || delimiter == '\\')
- {
- fprintf(outfile, "** Delimiter must not be alphameric or \\\n");
- goto SKIP_DATA;
- }
-
- pp = p;
-
- for(;;)
- {
- while (*pp != 0)
- {
- if (*pp == '\\' && pp[1] != 0) pp++;
- else if (*pp == delimiter) break;
- pp++;
- }
- if (*pp != 0) break;
-
- len = BUFFER_SIZE - (pp - buffer);
- if (len < 256)
- {
- fprintf(outfile, "** Expression too long - missing delimiter?\n");
- goto SKIP_DATA;
- }
-
- if (infile == stdin) printf(" > ");
- if (fgets((char *)pp, len, infile) == NULL)
- {
- fprintf(outfile, "** Unexpected EOF\n");
- done = 1;
- goto CONTINUE;
- }
- if (infile != stdin) fprintf(outfile, "%s", (char *)pp);
- }
-
- /* If the first character after the delimiter is backslash, make
- the pattern end with backslash. This is purely to provide a way
- of testing for the error message when a pattern ends with backslash. */
-
- if (pp[1] == '\\') *pp++ = '\\';
-
- /* Terminate the pattern at the delimiter */
-
- *pp++ = 0;
-
- /* Look for options after final delimiter */
-
- options = 0;
- study_options = 0;
- log_store = showstore; /* default from command line */
-
- while (*pp != 0)
- {
- switch (*pp++)
- {
- case 'g': do_g = 1; break;
- case 'i': options |= PCRE_CASELESS; break;
- case 'm': options |= PCRE_MULTILINE; break;
- case 's': options |= PCRE_DOTALL; break;
- case 'x': options |= PCRE_EXTENDED; break;
-
- case '+': do_showrest = 1; break;
- case 'A': options |= PCRE_ANCHORED; break;
- case 'D': do_debug = do_showinfo = 1; break;
- case 'E': options |= PCRE_DOLLAR_ENDONLY; break;
- case 'G': do_G = 1; break;
- case 'I': do_showinfo = 1; break;
- case 'M': log_store = 1; break;
- case 'N': options |= PCRE_NO_AUTO_CAPTURE; break;
-
-#if !defined NOPOSIX
- case 'P': do_posix = 1; break;
-#endif
-
- case 'S': do_study = 1; break;
- case 'U': options |= PCRE_UNGREEDY; break;
- case 'X': options |= PCRE_EXTRA; break;
- case '8': options |= PCRE_UTF8; use_utf8 = 1; break;
- case '?': options |= PCRE_NO_UTF8_CHECK; break;
-
- case 'L':
- ppp = pp;
- while (*ppp != '\n' && *ppp != ' ') ppp++;
- *ppp = 0;
- if (setlocale(LC_CTYPE, (const char *)pp) == NULL)
- {
- fprintf(outfile, "** Failed to set locale \"%s\"\n", pp);
- goto SKIP_DATA;
- }
- tables = pcre_maketables();
- pp = ppp;
- break;
-
- case '\n': case ' ': break;
- default:
- fprintf(outfile, "** Unknown option '%c'\n", pp[-1]);
- goto SKIP_DATA;
- }
- }
-
- /* Handle compiling via the POSIX interface, which doesn't support the
- timing, showing, or debugging options, nor the ability to pass over
- local character tables. */
-
-#if !defined NOPOSIX
- if (posix || do_posix)
- {
- int rc;
- int cflags = 0;
- if ((options & PCRE_CASELESS) != 0) cflags |= REG_ICASE;
- if ((options & PCRE_MULTILINE) != 0) cflags |= REG_NEWLINE;
- rc = regcomp(&preg, (char *)p, cflags);
-
- /* Compilation failed; go back for another re, skipping to blank line
- if non-interactive. */
-
- if (rc != 0)
- {
- (void)regerror(rc, &preg, (char *)buffer, BUFFER_SIZE);
- fprintf(outfile, "Failed: POSIX code %d: %s\n", rc, buffer);
- goto SKIP_DATA;
- }
- }
-
- /* Handle compiling via the native interface */
-
- else
-#endif /* !defined NOPOSIX */
-
- {
- if (timeit)
- {
- register int i;
- clock_t time_taken;
- clock_t start_time = clock();
- for (i = 0; i < LOOPREPEAT; i++)
- {
- re = pcre_compile((char *)p, options, &error, &erroroffset, tables);
- if (re != NULL) free(re);
- }
- time_taken = clock() - start_time;
- fprintf(outfile, "Compile time %.3f milliseconds\n",
- (((double)time_taken * 1000.0) / (double)LOOPREPEAT) /
- (double)CLOCKS_PER_SEC);
- }
-
- re = pcre_compile((char *)p, options, &error, &erroroffset, tables);
-
- /* Compilation failed; go back for another re, skipping to blank line
- if non-interactive. */
-
- if (re == NULL)
- {
- fprintf(outfile, "Failed: %s at offset %d\n", error, erroroffset);
- SKIP_DATA:
- if (infile != stdin)
- {
- for (;;)
- {
- if (fgets((char *)buffer, BUFFER_SIZE, infile) == NULL)
- {
- done = 1;
- goto CONTINUE;
- }
- len = (int)strlen((char *)buffer);
- while (len > 0 && isspace(buffer[len-1])) len--;
- if (len == 0) break;
- }
- fprintf(outfile, "\n");
- }
- goto CONTINUE;
- }
-
- /* Compilation succeeded; print data if required. There are now two
- info-returning functions. The old one has a limited interface and
- returns only limited data. Check that it agrees with the newer one. */
-
- if (log_store)
- fprintf(outfile, "Memory allocation (code space): %d\n",
- (int)(gotten_store -
- sizeof(real_pcre) -
- ((real_pcre *)re)->name_count * ((real_pcre *)re)->name_entry_size));
-
- if (do_showinfo)
- {
- unsigned long int get_options;
- int old_first_char, old_options, old_count;
- int count, backrefmax, first_char, need_char;
- int nameentrysize, namecount;
- const uschar *nametable;
- size_t size;
-
- if (do_debug)
- {
- fprintf(outfile, "------------------------------------------------------------------\n");
- print_internals(re, outfile);
- }
-
- new_info(re, NULL, PCRE_INFO_OPTIONS, &get_options);
- new_info(re, NULL, PCRE_INFO_SIZE, &size);
- new_info(re, NULL, PCRE_INFO_CAPTURECOUNT, &count);
- new_info(re, NULL, PCRE_INFO_BACKREFMAX, &backrefmax);
- new_info(re, NULL, PCRE_INFO_FIRSTBYTE, &first_char);
- new_info(re, NULL, PCRE_INFO_LASTLITERAL, &need_char);
- new_info(re, NULL, PCRE_INFO_NAMEENTRYSIZE, &nameentrysize);
- new_info(re, NULL, PCRE_INFO_NAMECOUNT, &namecount);
- new_info(re, NULL, PCRE_INFO_NAMETABLE, (void *)&nametable);
-
- old_count = pcre_info(re, &old_options, &old_first_char);
- if (count < 0) fprintf(outfile,
- "Error %d from pcre_info()\n", count);
- else
- {
- if (old_count != count) fprintf(outfile,
- "Count disagreement: pcre_fullinfo=%d pcre_info=%d\n", count,
- old_count);
-
- if (old_first_char != first_char) fprintf(outfile,
- "First char disagreement: pcre_fullinfo=%d pcre_info=%d\n",
- first_char, old_first_char);
-
- if (old_options != (int)get_options) fprintf(outfile,
- "Options disagreement: pcre_fullinfo=%ld pcre_info=%d\n",
- get_options, old_options);
- }
-
- if (size != gotten_store) fprintf(outfile,
- "Size disagreement: pcre_fullinfo=%d call to malloc for %d\n",
- size, gotten_store);
-
- fprintf(outfile, "Capturing subpattern count = %d\n", count);
- if (backrefmax > 0)
- fprintf(outfile, "Max back reference = %d\n", backrefmax);
-
- if (namecount > 0)
- {
- fprintf(outfile, "Named capturing subpatterns:\n");
- while (namecount-- > 0)
- {
- fprintf(outfile, " %s %*s%3d\n", nametable + 2,
- nameentrysize - 3 - (int)strlen((char *)nametable + 2), "",
- GET2(nametable, 0));
- nametable += nameentrysize;
- }
- }
-
- if (get_options == 0) fprintf(outfile, "No options\n");
- else fprintf(outfile, "Options:%s%s%s%s%s%s%s%s%s%s\n",
- ((get_options & PCRE_ANCHORED) != 0)? " anchored" : "",
- ((get_options & PCRE_CASELESS) != 0)? " caseless" : "",
- ((get_options & PCRE_EXTENDED) != 0)? " extended" : "",
- ((get_options & PCRE_MULTILINE) != 0)? " multiline" : "",
- ((get_options & PCRE_DOTALL) != 0)? " dotall" : "",
- ((get_options & PCRE_DOLLAR_ENDONLY) != 0)? " dollar_endonly" : "",
- ((get_options & PCRE_EXTRA) != 0)? " extra" : "",
- ((get_options & PCRE_UNGREEDY) != 0)? " ungreedy" : "",
- ((get_options & PCRE_UTF8) != 0)? " utf8" : "",
- ((get_options & PCRE_NO_UTF8_CHECK) != 0)? " no_utf8_check" : "");
-
- if (((((real_pcre *)re)->options) & PCRE_ICHANGED) != 0)
- fprintf(outfile, "Case state changes\n");
-
- if (first_char == -1)
- {
- fprintf(outfile, "First char at start or follows \\n\n");
- }
- else if (first_char < 0)
- {
- fprintf(outfile, "No first char\n");
- }
- else
- {
- int ch = first_char & 255;
- const char *caseless = ((first_char & REQ_CASELESS) == 0)?
- "" : " (caseless)";
- if (isprint(ch))
- fprintf(outfile, "First char = \'%c\'%s\n", ch, caseless);
- else
- fprintf(outfile, "First char = %d%s\n", ch, caseless);
- }
-
- if (need_char < 0)
- {
- fprintf(outfile, "No need char\n");
- }
- else
- {
- int ch = need_char & 255;
- const char *caseless = ((need_char & REQ_CASELESS) == 0)?
- "" : " (caseless)";
- if (isprint(ch))
- fprintf(outfile, "Need char = \'%c\'%s\n", ch, caseless);
- else
- fprintf(outfile, "Need char = %d%s\n", ch, caseless);
- }
- }
-
- /* If /S was present, study the regexp to generate additional info to
- help with the matching. */
-
- if (do_study)
- {
- if (timeit)
- {
- register int i;
- clock_t time_taken;
- clock_t start_time = clock();
- for (i = 0; i < LOOPREPEAT; i++)
- extra = pcre_study(re, study_options, &error);
- time_taken = clock() - start_time;
- if (extra != NULL) free(extra);
- fprintf(outfile, " Study time %.3f milliseconds\n",
- (((double)time_taken * 1000.0) / (double)LOOPREPEAT) /
- (double)CLOCKS_PER_SEC);
- }
-
- extra = pcre_study(re, study_options, &error);
- if (error != NULL)
- fprintf(outfile, "Failed to study: %s\n", error);
- else if (extra == NULL)
- fprintf(outfile, "Study returned NULL\n");
-
- /* Don't output study size; at present it is in any case a fixed
- value, but it varies, depending on the computer architecture, and
- so messes up the test suite. */
-
- else if (do_showinfo)
- {
- size_t size;
- uschar *start_bits = NULL;
- new_info(re, extra, PCRE_INFO_STUDYSIZE, &size);
- new_info(re, extra, PCRE_INFO_FIRSTTABLE, &start_bits);
- /* fprintf(outfile, "Study size = %d\n", size); */
- if (start_bits == NULL)
- fprintf(outfile, "No starting character set\n");
- else
- {
- int i;
- int c = 24;
- fprintf(outfile, "Starting character set: ");
- for (i = 0; i < 256; i++)
- {
- if ((start_bits[i/8] & (1<<(i%8))) != 0)
- {
- if (c > 75)
- {
- fprintf(outfile, "\n ");
- c = 2;
- }
- if (isprint(i) && i != ' ')
- {
- fprintf(outfile, "%c ", i);
- c += 2;
- }
- else
- {
- fprintf(outfile, "\\x%02x ", i);
- c += 5;
- }
- }
- }
- fprintf(outfile, "\n");
- }
- }
- }
- }
-
- /* Read data lines and test them */
-
- for (;;)
- {
- unsigned char *q;
- unsigned char *bptr = dbuffer;
- int *use_offsets = offsets;
- int use_size_offsets = size_offsets;
- int callout_data = 0;
- int callout_data_set = 0;
- int count, c;
- int copystrings = 0;
- int find_match_limit = 0;
- int getstrings = 0;
- int getlist = 0;
- int gmatched = 0;
- int start_offset = 0;
- int g_notempty = 0;
-
- options = 0;
-
- pcre_callout = callout;
- first_callout = 1;
- callout_extra = 0;
- callout_count = 0;
- callout_fail_count = 999999;
- callout_fail_id = -1;
- show_malloc = 0;
-
- if (infile == stdin) printf("data> ");
- if (fgets((char *)buffer, BUFFER_SIZE, infile) == NULL)
- {
- done = 1;
- goto CONTINUE;
- }
- if (infile != stdin) fprintf(outfile, "%s", (char *)buffer);
-
- len = (int)strlen((char *)buffer);
- while (len > 0 && isspace(buffer[len-1])) len--;
- buffer[len] = 0;
- if (len == 0) break;
-
- p = buffer;
- while (isspace(*p)) p++;
-
- q = dbuffer;
- while ((c = *p++) != 0)
- {
- int i = 0;
- int n = 0;
-
- if (c == '\\') switch ((c = *p++))
- {
- case 'a': c = 7; break;
- case 'b': c = '\b'; break;
- case 'e': c = 27; break;
- case 'f': c = '\f'; break;
- case 'n': c = '\n'; break;
- case 'r': c = '\r'; break;
- case 't': c = '\t'; break;
- case 'v': c = '\v'; break;
-
- case '0': case '1': case '2': case '3':
- case '4': case '5': case '6': case '7':
- c -= '0';
- while (i++ < 2 && isdigit(*p) && *p != '8' && *p != '9')
- c = c * 8 + *p++ - '0';
- break;
-
- case 'x':
-
- /* Handle \x{..} specially - new Perl thing for utf8 */
-
- if (*p == '{')
- {
- unsigned char *pt = p;
- c = 0;
- while (isxdigit(*(++pt)))
- c = c * 16 + tolower(*pt) - ((isdigit(*pt))? '0' : 'W');
- if (*pt == '}')
- {
- unsigned char buff8[8];
- int ii, utn;
- utn = ord2utf8(c, buff8);
- for (ii = 0; ii < utn - 1; ii++) *q++ = buff8[ii];
- c = buff8[ii]; /* Last byte */
- p = pt + 1;
- break;
- }
- /* Not correct form; fall through */
- }
-
- /* Ordinary \x */
-
- c = 0;
- while (i++ < 2 && isxdigit(*p))
- {
- c = c * 16 + tolower(*p) - ((isdigit(*p))? '0' : 'W');
- p++;
- }
- break;
-
- case 0: /* Allows for an empty line */
- p--;
- continue;
-
- case 'A': /* Option setting */
- options |= PCRE_ANCHORED;
- continue;
-
- case 'B':
- options |= PCRE_NOTBOL;
- continue;
-
- case 'C':
- if (isdigit(*p)) /* Set copy string */
- {
- while(isdigit(*p)) n = n * 10 + *p++ - '0';
- copystrings |= 1 << n;
- }
- else if (isalnum(*p))
- {
- uschar name[256];
- uschar *npp = name;
- while (isalnum(*p)) *npp++ = *p++;
- *npp = 0;
- n = pcre_get_stringnumber(re, (char *)name);
- if (n < 0)
- fprintf(outfile, "no parentheses with name \"%s\"\n", name);
- else copystrings |= 1 << n;
- }
- else if (*p == '+')
- {
- callout_extra = 1;
- p++;
- }
- else if (*p == '-')
- {
- pcre_callout = NULL;
- p++;
- }
- else if (*p == '!')
- {
- callout_fail_id = 0;
- p++;
- while(isdigit(*p))
- callout_fail_id = callout_fail_id * 10 + *p++ - '0';
- callout_fail_count = 0;
- if (*p == '!')
- {
- p++;
- while(isdigit(*p))
- callout_fail_count = callout_fail_count * 10 + *p++ - '0';
- }
- }
- else if (*p == '*')
- {
- int sign = 1;
- callout_data = 0;
- if (*(++p) == '-') { sign = -1; p++; }
- while(isdigit(*p))
- callout_data = callout_data * 10 + *p++ - '0';
- callout_data *= sign;
- callout_data_set = 1;
- }
- continue;
-
- case 'G':
- if (isdigit(*p))
- {
- while(isdigit(*p)) n = n * 10 + *p++ - '0';
- getstrings |= 1 << n;
- }
- else if (isalnum(*p))
- {
- uschar name[256];
- uschar *npp = name;
- while (isalnum(*p)) *npp++ = *p++;
- *npp = 0;
- n = pcre_get_stringnumber(re, (char *)name);
- if (n < 0)
- fprintf(outfile, "no parentheses with name \"%s\"\n", name);
- else getstrings |= 1 << n;
- }
- continue;
-
- case 'L':
- getlist = 1;
- continue;
-
- case 'M':
- find_match_limit = 1;
- continue;
-
- case 'N':
- options |= PCRE_NOTEMPTY;
- continue;
-
- case 'O':
- while(isdigit(*p)) n = n * 10 + *p++ - '0';
- if (n > size_offsets_max)
- {
- size_offsets_max = n;
- free(offsets);
- use_offsets = offsets = (int *)malloc(size_offsets_max * sizeof(int));
- if (offsets == NULL)
- {
- printf("** Failed to get %d bytes of memory for offsets vector\n",
- size_offsets_max * sizeof(int));
- return 1;
- }
- }
- use_size_offsets = n;
- if (n == 0) use_offsets = NULL; /* Ensures it can't write to it */
- continue;
-
- case 'S':
- show_malloc = 1;
- continue;
-
- case 'Z':
- options |= PCRE_NOTEOL;
- continue;
-
- case '?':
- options |= PCRE_NO_UTF8_CHECK;
- continue;
- }
- *q++ = c;
- }
- *q = 0;
- len = q - dbuffer;
-
- /* Handle matching via the POSIX interface, which does not
- support timing or playing with the match limit or callout data. */
-
-#if !defined NOPOSIX
- if (posix || do_posix)
- {
- int rc;
- int eflags = 0;
- regmatch_t *pmatch = NULL;
- if (use_size_offsets > 0)
- pmatch = (regmatch_t *)malloc(sizeof(regmatch_t) * use_size_offsets);
- if ((options & PCRE_NOTBOL) != 0) eflags |= REG_NOTBOL;
- if ((options & PCRE_NOTEOL) != 0) eflags |= REG_NOTEOL;
-
- rc = regexec(&preg, (const char *)bptr, use_size_offsets, pmatch, eflags);
-
- if (rc != 0)
- {
- (void)regerror(rc, &preg, (char *)buffer, BUFFER_SIZE);
- fprintf(outfile, "No match: POSIX code %d: %s\n", rc, buffer);
- }
- else
- {
- size_t i;
- for (i = 0; i < (size_t)use_size_offsets; i++)
- {
- if (pmatch[i].rm_so >= 0)
- {
- fprintf(outfile, "%2d: ", (int)i);
- (void)pchars(dbuffer + pmatch[i].rm_so,
- pmatch[i].rm_eo - pmatch[i].rm_so, outfile);
- fprintf(outfile, "\n");
- if (i == 0 && do_showrest)
- {
- fprintf(outfile, " 0+ ");
- (void)pchars(dbuffer + pmatch[i].rm_eo, len - pmatch[i].rm_eo,
- outfile);
- fprintf(outfile, "\n");
- }
- }
- }
- }
- free(pmatch);
- }
-
- /* Handle matching via the native interface - repeats for /g and /G */
-
- else
-#endif /* !defined NOPOSIX */
-
- for (;; gmatched++) /* Loop for /g or /G */
- {
- if (timeit)
- {
- register int i;
- clock_t time_taken;
- clock_t start_time = clock();
- for (i = 0; i < LOOPREPEAT; i++)
- count = pcre_exec(re, extra, (char *)bptr, len,
- start_offset, options | g_notempty, use_offsets, use_size_offsets);
- time_taken = clock() - start_time;
- fprintf(outfile, "Execute time %.3f milliseconds\n",
- (((double)time_taken * 1000.0) / (double)LOOPREPEAT) /
- (double)CLOCKS_PER_SEC);
- }
-
- /* If find_match_limit is set, we want to do repeated matches with
- varying limits in order to find the minimum value. */
-
- if (find_match_limit)
- {
- int min = 0;
- int mid = 64;
- int max = -1;
-
- if (extra == NULL)
- {
- extra = (pcre_extra *)malloc(sizeof(pcre_extra));
- extra->flags = 0;
- }
- extra->flags |= PCRE_EXTRA_MATCH_LIMIT;
-
- for (;;)
- {
- extra->match_limit = mid;
- count = pcre_exec(re, extra, (char *)bptr, len, start_offset,
- options | g_notempty, use_offsets, use_size_offsets);
- if (count == PCRE_ERROR_MATCHLIMIT)
- {
- /* fprintf(outfile, "Testing match limit = %d\n", mid); */
- min = mid;
- mid = (mid == max - 1)? max : (max > 0)? (min + max)/2 : mid*2;
- }
- else if (count >= 0 || count == PCRE_ERROR_NOMATCH)
- {
- if (mid == min + 1)
- {
- fprintf(outfile, "Minimum match limit = %d\n", mid);
- break;
- }
- /* fprintf(outfile, "Testing match limit = %d\n", mid); */
- max = mid;
- mid = (min + mid)/2;
- }
- else break; /* Some other error */
- }
-
- extra->flags &= ~PCRE_EXTRA_MATCH_LIMIT;
- }
-
- /* If callout_data is set, use the interface with additional data */
-
- else if (callout_data_set)
- {
- if (extra == NULL)
- {
- extra = (pcre_extra *)malloc(sizeof(pcre_extra));
- extra->flags = 0;
- }
- extra->flags |= PCRE_EXTRA_CALLOUT_DATA;
- extra->callout_data = &callout_data;
- count = pcre_exec(re, extra, (char *)bptr, len, start_offset,
- options | g_notempty, use_offsets, use_size_offsets);
- extra->flags &= ~PCRE_EXTRA_CALLOUT_DATA;
- }
-
- /* The normal case is just to do the match once, with the default
- value of match_limit. */
-
- else count = pcre_exec(re, extra, (char *)bptr, len,
- start_offset, options | g_notempty, use_offsets, use_size_offsets);
-
- if (count == 0)
- {
- fprintf(outfile, "Matched, but too many substrings\n");
- count = use_size_offsets/3;
- }
-
- /* Matched */
-
- if (count >= 0)
- {
- int i;
- for (i = 0; i < count * 2; i += 2)
- {
- if (use_offsets[i] < 0)
- fprintf(outfile, "%2d: <unset>\n", i/2);
- else
- {
- fprintf(outfile, "%2d: ", i/2);
- (void)pchars(bptr + use_offsets[i],
- use_offsets[i+1] - use_offsets[i], outfile);
- fprintf(outfile, "\n");
- if (i == 0)
- {
- if (do_showrest)
- {
- fprintf(outfile, " 0+ ");
- (void)pchars(bptr + use_offsets[i+1], len - use_offsets[i+1],
- outfile);
- fprintf(outfile, "\n");
- }
- }
- }
- }
-
- for (i = 0; i < 32; i++)
- {
- if ((copystrings & (1 << i)) != 0)
- {
- char copybuffer[16];
- int rc = pcre_copy_substring((char *)bptr, use_offsets, count,
- i, copybuffer, sizeof(copybuffer));
- if (rc < 0)
- fprintf(outfile, "copy substring %d failed %d\n", i, rc);
- else
- fprintf(outfile, "%2dC %s (%d)\n", i, copybuffer, rc);
- }
- }
-
- for (i = 0; i < 32; i++)
- {
- if ((getstrings & (1 << i)) != 0)
- {
- const char *substring;
- int rc = pcre_get_substring((char *)bptr, use_offsets, count,
- i, &substring);
- if (rc < 0)
- fprintf(outfile, "get substring %d failed %d\n", i, rc);
- else
- {
- fprintf(outfile, "%2dG %s (%d)\n", i, substring, rc);
- /* free((void *)substring); */
- pcre_free_substring(substring);
- }
- }
- }
-
- if (getlist)
- {
- const char **stringlist;
- int rc = pcre_get_substring_list((char *)bptr, use_offsets, count,
- &stringlist);
- if (rc < 0)
- fprintf(outfile, "get substring list failed %d\n", rc);
- else
- {
- for (i = 0; i < count; i++)
- fprintf(outfile, "%2dL %s\n", i, stringlist[i]);
- if (stringlist[i] != NULL)
- fprintf(outfile, "string list not terminated by NULL\n");
- /* free((void *)stringlist); */
- pcre_free_substring_list(stringlist);
- }
- }
- }
-
- /* Failed to match. If this is a /g or /G loop and we previously set
- g_notempty after a null match, this is not necessarily the end.
- We want to advance the start offset, and continue. In the case of UTF-8
- matching, the advance must be one character, not one byte. Fudge the
- offset values to achieve this. We won't be at the end of the string -
- that was checked before setting g_notempty. */
-
- else
- {
- if (g_notempty != 0)
- {
- int onechar = 1;
- use_offsets[0] = start_offset;
- if (use_utf8)
- {
- while (start_offset + onechar < len)
- {
- int tb = bptr[start_offset+onechar];
- if (tb <= 127) break;
- tb &= 0xc0;
- if (tb != 0 && tb != 0xc0) onechar++;
- }
- }
- use_offsets[1] = start_offset + onechar;
- }
- else
- {
- if (count == PCRE_ERROR_NOMATCH)
- {
- if (gmatched == 0) fprintf(outfile, "No match\n");
- }
- else fprintf(outfile, "Error %d\n", count);
- break; /* Out of the /g loop */
- }
- }
-
- /* If not /g or /G we are done */
-
- if (!do_g && !do_G) break;
-
- /* If we have matched an empty string, first check to see if we are at
- the end of the subject. If so, the /g loop is over. Otherwise, mimic
- what Perl's /g options does. This turns out to be rather cunning. First
- we set PCRE_NOTEMPTY and PCRE_ANCHORED and try the match again at the
- same point. If this fails (picked up above) we advance to the next
- character. */
-
- g_notempty = 0;
- if (use_offsets[0] == use_offsets[1])
- {
- if (use_offsets[0] == len) break;
- g_notempty = PCRE_NOTEMPTY | PCRE_ANCHORED;
- }
-
- /* For /g, update the start offset, leaving the rest alone */
-
- if (do_g) start_offset = use_offsets[1];
-
- /* For /G, update the pointer and length */
-
- else
- {
- bptr += use_offsets[1];
- len -= use_offsets[1];
- }
- } /* End of loop for /g and /G */
- } /* End of loop for data lines */
-
- CONTINUE:
-
-#if !defined NOPOSIX
- if (posix || do_posix) regfree(&preg);
-#endif
-
- if (re != NULL) free(re);
- if (extra != NULL) free(extra);
- if (tables != NULL)
- {
- free((void *)tables);
- setlocale(LC_CTYPE, "C");
- }
- }
-
-if (infile == stdin) fprintf(outfile, "\n");
-return 0;
-}
-
-/* End */
diff --git a/ext/pcre/pcrelib/study.c b/ext/pcre/pcrelib/study.c
deleted file mode 100644
index 4484a3f992..0000000000
--- a/ext/pcre/pcrelib/study.c
+++ /dev/null
@@ -1,472 +0,0 @@
-/*************************************************
-* Perl-Compatible Regular Expressions *
-*************************************************/
-
-/*
-This 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. See
-the file Tech.Notes for some information on the internals.
-
-Written by: Philip Hazel <ph10@cam.ac.uk>
-
- Copyright (c) 1997-2004 University of Cambridge
-
------------------------------------------------------------------------------
-Permission is granted to anyone to use this software for any purpose on any
-computer system, and to redistribute it freely, subject to the following
-restrictions:
-
-1. This software is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
-
-2. The origin of this software must not be misrepresented, either by
- explicit claim or by omission.
-
-3. Altered versions must be plainly marked as such, and must not be
- misrepresented as being the original software.
-
-4. If PCRE is embedded in any software that is released under the GNU
- General Purpose Licence (GPL), then the terms of that licence shall
- supersede any condition above with which it is incompatible.
------------------------------------------------------------------------------
-*/
-
-
-/* Include the internals header, which itself includes Standard C headers plus
-the external pcre header. */
-
-#include "internal.h"
-
-
-
-/*************************************************
-* Set a bit and maybe its alternate case *
-*************************************************/
-
-/* Given a character, set its bit in the table, and also the bit for the other
-version of a letter if we are caseless.
-
-Arguments:
- start_bits points to the bit map
- c is the character
- caseless the caseless flag
- cd the block with char table pointers
-
-Returns: nothing
-*/
-
-static void
-set_bit(uschar *start_bits, int c, BOOL caseless, compile_data *cd)
-{
-start_bits[c/8] |= (1 << (c&7));
-if (caseless && (cd->ctypes[c] & ctype_letter) != 0)
- start_bits[cd->fcc[c]/8] |= (1 << (cd->fcc[c]&7));
-}
-
-
-
-/*************************************************
-* Create bitmap of starting chars *
-*************************************************/
-
-/* This function scans a compiled unanchored expression and attempts to build a
-bitmap of the set of initial characters. If it can't, it returns FALSE. As time
-goes by, we may be able to get more clever at doing this.
-
-Arguments:
- code points to an expression
- start_bits points to a 32-byte table, initialized to 0
- caseless the current state of the caseless flag
- utf8 TRUE if in UTF-8 mode
- cd the block with char table pointers
-
-Returns: TRUE if table built, FALSE otherwise
-*/
-
-static BOOL
-set_start_bits(const uschar *code, uschar *start_bits, BOOL caseless,
- BOOL utf8, compile_data *cd)
-{
-register int c;
-
-/* This next statement and the later reference to dummy are here in order to
-trick the optimizer of the IBM C compiler for OS/2 into generating correct
-code. Apparently IBM isn't going to fix the problem, and we would rather not
-disable optimization (in this module it actually makes a big difference, and
-the pcre module can use all the optimization it can get). */
-
-volatile int dummy;
-
-do
- {
- const uschar *tcode = code + 1 + LINK_SIZE;
- BOOL try_next = TRUE;
-
- while (try_next)
- {
- /* If a branch starts with a bracket or a positive lookahead assertion,
- recurse to set bits from within them. That's all for this branch. */
-
- if ((int)*tcode >= OP_BRA || *tcode == OP_ASSERT)
- {
- if (!set_start_bits(tcode, start_bits, caseless, utf8, cd))
- return FALSE;
- try_next = FALSE;
- }
-
- else switch(*tcode)
- {
- default:
- return FALSE;
-
- /* Skip over callout */
-
- case OP_CALLOUT:
- tcode += 2;
- break;
-
- /* Skip over extended extraction bracket number */
-
- case OP_BRANUMBER:
- tcode += 3;
- break;
-
- /* Skip over lookbehind and negative lookahead assertions */
-
- case OP_ASSERT_NOT:
- case OP_ASSERTBACK:
- case OP_ASSERTBACK_NOT:
- do tcode += GET(tcode, 1); while (*tcode == OP_ALT);
- tcode += 1+LINK_SIZE;
- break;
-
- /* Skip over an option setting, changing the caseless flag */
-
- case OP_OPT:
- caseless = (tcode[1] & PCRE_CASELESS) != 0;
- tcode += 2;
- break;
-
- /* BRAZERO does the bracket, but carries on. */
-
- case OP_BRAZERO:
- case OP_BRAMINZERO:
- if (!set_start_bits(++tcode, start_bits, caseless, utf8, cd))
- return FALSE;
- dummy = 1;
- 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:
- case OP_MINSTAR:
- case OP_QUERY:
- case OP_MINQUERY:
- set_bit(start_bits, tcode[1], caseless, cd);
- tcode += 2;
-#ifdef SUPPORT_UTF8
- if (utf8) while ((*tcode & 0xc0) == 0x80) tcode++;
-#endif
- break;
-
- /* Single-char upto sets the bit and tries the next */
-
- case OP_UPTO:
- case OP_MINUPTO:
- set_bit(start_bits, tcode[3], caseless, cd);
- tcode += 4;
-#ifdef SUPPORT_UTF8
- if (utf8) while ((*tcode & 0xc0) == 0x80) tcode++;
-#endif
- break;
-
- /* At least one single char sets the bit and stops */
-
- case OP_EXACT: /* Fall through */
- tcode++;
-
- case OP_CHARS: /* Fall through */
- tcode++;
-
- case OP_PLUS:
- case OP_MINPLUS:
- set_bit(start_bits, tcode[1], caseless, cd);
- try_next = FALSE;
- break;
-
- /* Single character type sets the bits and stops */
-
- case OP_NOT_DIGIT:
- for (c = 0; c < 32; c++)
- start_bits[c] |= ~cd->cbits[c+cbit_digit];
- try_next = FALSE;
- break;
-
- case OP_DIGIT:
- for (c = 0; c < 32; c++)
- start_bits[c] |= cd->cbits[c+cbit_digit];
- try_next = FALSE;
- break;
-
- case OP_NOT_WHITESPACE:
- for (c = 0; c < 32; c++)
- start_bits[c] |= ~cd->cbits[c+cbit_space];
- try_next = FALSE;
- break;
-
- case OP_WHITESPACE:
- for (c = 0; c < 32; c++)
- start_bits[c] |= cd->cbits[c+cbit_space];
- try_next = FALSE;
- break;
-
- case OP_NOT_WORDCHAR:
- for (c = 0; c < 32; c++)
- start_bits[c] |= ~cd->cbits[c+cbit_word];
- try_next = FALSE;
- break;
-
- case OP_WORDCHAR:
- for (c = 0; c < 32; c++)
- start_bits[c] |= cd->cbits[c+cbit_word];
- try_next = FALSE;
- break;
-
- /* One or more character type fudges the pointer and restarts, knowing
- it will hit a single character type and stop there. */
-
- case OP_TYPEPLUS:
- case OP_TYPEMINPLUS:
- tcode++;
- break;
-
- case OP_TYPEEXACT:
- tcode += 3;
- break;
-
- /* Zero or more repeats of character types set the bits and then
- try again. */
-
- case OP_TYPEUPTO:
- case OP_TYPEMINUPTO:
- tcode += 2; /* Fall through */
-
- case OP_TYPESTAR:
- case OP_TYPEMINSTAR:
- case OP_TYPEQUERY:
- case OP_TYPEMINQUERY:
- switch(tcode[1])
- {
- case OP_ANY:
- return FALSE;
-
- case OP_NOT_DIGIT:
- for (c = 0; c < 32; c++)
- start_bits[c] |= ~cd->cbits[c+cbit_digit];
- break;
-
- case OP_DIGIT:
- for (c = 0; c < 32; c++)
- start_bits[c] |= cd->cbits[c+cbit_digit];
- break;
-
- case OP_NOT_WHITESPACE:
- for (c = 0; c < 32; c++)
- start_bits[c] |= ~cd->cbits[c+cbit_space];
- break;
-
- case OP_WHITESPACE:
- for (c = 0; c < 32; c++)
- start_bits[c] |= cd->cbits[c+cbit_space];
- break;
-
- case OP_NOT_WORDCHAR:
- for (c = 0; c < 32; c++)
- start_bits[c] |= ~cd->cbits[c+cbit_word];
- break;
-
- case OP_WORDCHAR:
- for (c = 0; c < 32; c++)
- start_bits[c] |= cd->cbits[c+cbit_word];
- break;
- }
-
- tcode += 2;
- break;
-
- /* Character class where all the information is in a bit map: set the
- bits and either carry on or not, according to the repeat count. If it was
- a negative class, and we are operating with UTF-8 characters, any byte
- with a value >= 0xc4 is a potentially valid starter because it starts a
- character with a value > 255. */
-
- case OP_NCLASS:
- if (utf8)
- {
- start_bits[24] |= 0xf0; /* Bits for 0xc4 - 0xc8 */
- memset(start_bits+25, 0xff, 7); /* Bits for 0xc9 - 0xff */
- }
- /* Fall through */
-
- case OP_CLASS:
- {
- tcode++;
-
- /* In UTF-8 mode, the bits in a bit map correspond to character
- values, not to byte values. However, the bit map we are constructing is
- for byte values. So we have to do a conversion for characters whose
- value is > 127. In fact, there are only two possible starting bytes for
- characters in the range 128 - 255. */
-
- if (utf8)
- {
- for (c = 0; c < 16; c++) start_bits[c] |= tcode[c];
- for (c = 128; c < 256; c++)
- {
- if ((tcode[c/8] && (1 << (c&7))) != 0)
- {
- int d = (c >> 6) | 0xc0; /* Set bit for this starter */
- start_bits[d/8] |= (1 << (d&7)); /* and then skip on to the */
- c = (c & 0xc0) + 0x40 - 1; /* next relevant character. */
- }
- }
- }
-
- /* In non-UTF-8 mode, the two bit maps are completely compatible. */
-
- else
- {
- for (c = 0; c < 32; c++) start_bits[c] |= tcode[c];
- }
-
- /* Advance past the bit map, and act on what follows */
-
- tcode += 32;
- switch (*tcode)
- {
- case OP_CRSTAR:
- case OP_CRMINSTAR:
- case OP_CRQUERY:
- case OP_CRMINQUERY:
- tcode++;
- break;
-
- case OP_CRRANGE:
- case OP_CRMINRANGE:
- if (((tcode[1] << 8) + tcode[2]) == 0) tcode += 5;
- else try_next = FALSE;
- break;
-
- default:
- try_next = FALSE;
- break;
- }
- }
- break; /* End of bitmap class handling */
-
- } /* End of switch */
- } /* End of try_next loop */
-
- code += GET(code, 1); /* Advance to next branch */
- }
-while (*code == OP_ALT);
-return TRUE;
-}
-
-
-
-/*************************************************
-* Study a compiled expression *
-*************************************************/
-
-/* This function is handed a compiled expression that it must study to produce
-information that will speed up the matching. It returns a pcre_extra block
-which then gets handed back to pcre_exec().
-
-Arguments:
- re points to the compiled expression
- options contains option bits
- errorptr points to where to place error messages;
- set NULL unless error
-
-Returns: pointer to a pcre_extra block, with study_data filled in and the
- appropriate flag set;
- NULL on error or if no optimization possible
-*/
-
-EXPORT pcre_extra *
-pcre_study(const pcre *external_re, int options, const char **errorptr)
-{
-uschar start_bits[32];
-pcre_extra *extra;
-pcre_study_data *study;
-const real_pcre *re = (const real_pcre *)external_re;
-uschar *code = (uschar *)re + sizeof(real_pcre) +
- (re->name_count * re->name_entry_size);
-compile_data compile_block;
-
-*errorptr = NULL;
-
-if (re == NULL || re->magic_number != MAGIC_NUMBER)
- {
- *errorptr = "argument is not a compiled regular expression";
- return NULL;
- }
-
-if ((options & ~PUBLIC_STUDY_OPTIONS) != 0)
- {
- *errorptr = "unknown or incorrect option bit(s) set";
- return NULL;
- }
-
-/* For an anchored pattern, or an unanchored pattern that has a first char, or
-a multiline pattern that matches only at "line starts", no further processing
-at present. */
-
-if ((re->options & (PCRE_ANCHORED|PCRE_FIRSTSET|PCRE_STARTLINE)) != 0)
- return NULL;
-
-/* Set the character tables in the block which is passed around */
-
-compile_block.lcc = re->tables + lcc_offset;
-compile_block.fcc = re->tables + fcc_offset;
-compile_block.cbits = re->tables + cbits_offset;
-compile_block.ctypes = re->tables + ctypes_offset;
-
-/* See if we can find a fixed set of initial characters for the pattern. */
-
-memset(start_bits, 0, 32 * sizeof(uschar));
-if (!set_start_bits(code, start_bits, (re->options & PCRE_CASELESS) != 0,
- (re->options & PCRE_UTF8) != 0, &compile_block)) return NULL;
-
-/* Get a pcre_extra block and a pcre_study_data block. The study data is put in
-the latter, which is pointed to by the former, which may also get additional
-data set later by the calling program. At the moment, the size of
-pcre_study_data is fixed. We nevertheless save it in a field for returning via
-the pcre_fullinfo() function so that if it becomes variable in the future, we
-don't have to change that code. */
-
-extra = (pcre_extra *)(pcre_malloc)
- (sizeof(pcre_extra) + sizeof(pcre_study_data));
-
-if (extra == NULL)
- {
- *errorptr = "failed to get memory";
- return NULL;
- }
-
-study = (pcre_study_data *)((char *)extra + sizeof(pcre_extra));
-extra->flags = PCRE_EXTRA_STUDY_DATA;
-extra->study_data = study;
-
-study->size = sizeof(pcre_study_data);
-study->options = PCRE_STUDY_MAPPED;
-memcpy(study->start_bits, start_bits, sizeof(start_bits));
-
-return extra;
-}
-
-/* End of study.c */
diff --git a/ext/pcre/pcrelib/testdata/testinput1 b/ext/pcre/pcrelib/testdata/testinput1
deleted file mode 100644
index c64257685b..0000000000
--- a/ext/pcre/pcrelib/testdata/testinput1
+++ /dev/null
@@ -1,3808 +0,0 @@
-/the quick brown fox/
- the quick brown fox
- The quick brown FOX
- What do you know about the quick brown fox?
- What do you know about THE QUICK BROWN FOX?
-
-/The quick brown fox/i
- the quick brown fox
- The quick brown FOX
- What do you know about the quick brown fox?
- What do you know about THE QUICK BROWN FOX?
-
-/abcd\t\n\r\f\a\e\071\x3b\$\\\?caxyz/
- abcd\t\n\r\f\a\e9;\$\\?caxyz
-
-/a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz/
- abxyzpqrrrabbxyyyypqAzz
- abxyzpqrrrabbxyyyypqAzz
- aabxyzpqrrrabbxyyyypqAzz
- aaabxyzpqrrrabbxyyyypqAzz
- aaaabxyzpqrrrabbxyyyypqAzz
- abcxyzpqrrrabbxyyyypqAzz
- aabcxyzpqrrrabbxyyyypqAzz
- aaabcxyzpqrrrabbxyyyypAzz
- aaabcxyzpqrrrabbxyyyypqAzz
- aaabcxyzpqrrrabbxyyyypqqAzz
- aaabcxyzpqrrrabbxyyyypqqqAzz
- aaabcxyzpqrrrabbxyyyypqqqqAzz
- aaabcxyzpqrrrabbxyyyypqqqqqAzz
- aaabcxyzpqrrrabbxyyyypqqqqqqAzz
- aaaabcxyzpqrrrabbxyyyypqAzz
- abxyzzpqrrrabbxyyyypqAzz
- aabxyzzzpqrrrabbxyyyypqAzz
- aaabxyzzzzpqrrrabbxyyyypqAzz
- aaaabxyzzzzpqrrrabbxyyyypqAzz
- abcxyzzpqrrrabbxyyyypqAzz
- aabcxyzzzpqrrrabbxyyyypqAzz
- aaabcxyzzzzpqrrrabbxyyyypqAzz
- aaaabcxyzzzzpqrrrabbxyyyypqAzz
- aaaabcxyzzzzpqrrrabbbxyyyypqAzz
- aaaabcxyzzzzpqrrrabbbxyyyyypqAzz
- aaabcxyzpqrrrabbxyyyypABzz
- aaabcxyzpqrrrabbxyyyypABBzz
- >>>aaabxyzpqrrrabbxyyyypqAzz
- >aaaabxyzpqrrrabbxyyyypqAzz
- >>>>abcxyzpqrrrabbxyyyypqAzz
- *** Failers
- abxyzpqrrabbxyyyypqAzz
- abxyzpqrrrrabbxyyyypqAzz
- abxyzpqrrrabxyyyypqAzz
- aaaabcxyzzzzpqrrrabbbxyyyyyypqAzz
- aaaabcxyzzzzpqrrrabbbxyyypqAzz
- aaabcxyzpqrrrabbxyyyypqqqqqqqAzz
-
-/^(abc){1,2}zz/
- abczz
- abcabczz
- *** Failers
- zz
- abcabcabczz
- >>abczz
-
-/^(b+?|a){1,2}?c/
- bc
- bbc
- bbbc
- bac
- bbac
- aac
- abbbbbbbbbbbc
- bbbbbbbbbbbac
- *** Failers
- aaac
- abbbbbbbbbbbac
-
-/^(b+|a){1,2}c/
- bc
- bbc
- bbbc
- bac
- bbac
- aac
- abbbbbbbbbbbc
- bbbbbbbbbbbac
- *** Failers
- aaac
- abbbbbbbbbbbac
-
-/^(b+|a){1,2}?bc/
- bbc
-
-/^(b*|ba){1,2}?bc/
- babc
- bbabc
- bababc
- *** Failers
- bababbc
- babababc
-
-/^(ba|b*){1,2}?bc/
- babc
- bbabc
- bababc
- *** Failers
- bababbc
- babababc
-
-/^\ca\cA\c[\c{\c:/
- \x01\x01\e;z
-
-/^[ab\]cde]/
- athing
- bthing
- ]thing
- cthing
- dthing
- ething
- *** Failers
- fthing
- [thing
- \\thing
-
-/^[]cde]/
- ]thing
- cthing
- dthing
- ething
- *** Failers
- athing
- fthing
-
-/^[^ab\]cde]/
- fthing
- [thing
- \\thing
- *** Failers
- athing
- bthing
- ]thing
- cthing
- dthing
- ething
-
-/^[^]cde]/
- athing
- fthing
- *** Failers
- ]thing
- cthing
- dthing
- ething
-
-/^\/
-
-
-/^ÿ/
- ÿ
-
-/^[0-9]+$/
- 0
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 100
- *** Failers
- abc
-
-/^.*nter/
- enter
- inter
- uponter
-
-/^xxx[0-9]+$/
- xxx0
- xxx1234
- *** Failers
- xxx
-
-/^.+[0-9][0-9][0-9]$/
- x123
- xx123
- 123456
- *** Failers
- 123
- x1234
-
-/^.+?[0-9][0-9][0-9]$/
- x123
- xx123
- 123456
- *** Failers
- 123
- x1234
-
-/^([^!]+)!(.+)=apquxz\.ixr\.zzz\.ac\.uk$/
- abc!pqr=apquxz.ixr.zzz.ac.uk
- *** Failers
- !pqr=apquxz.ixr.zzz.ac.uk
- abc!=apquxz.ixr.zzz.ac.uk
- abc!pqr=apquxz:ixr.zzz.ac.uk
- abc!pqr=apquxz.ixr.zzz.ac.ukk
-
-/:/
- Well, we need a colon: somewhere
- *** Fail if we don't
-
-/([\da-f:]+)$/i
- 0abc
- abc
- fed
- E
- ::
- 5f03:12C0::932e
- fed def
- Any old stuff
- *** Failers
- 0zzz
- gzzz
- fed\x20
- Any old rubbish
-
-/^.*\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/
- .1.2.3
- A.12.123.0
- *** Failers
- .1.2.3333
- 1.2.3
- 1234.2.3
-
-/^(\d+)\s+IN\s+SOA\s+(\S+)\s+(\S+)\s*\(\s*$/
- 1 IN SOA non-sp1 non-sp2(
- 1 IN SOA non-sp1 non-sp2 (
- *** Failers
- 1IN SOA non-sp1 non-sp2(
-
-/^[a-zA-Z\d][a-zA-Z\d\-]*(\.[a-zA-Z\d][a-zA-z\d\-]*)*\.$/
- a.
- Z.
- 2.
- ab-c.pq-r.
- sxk.zzz.ac.uk.
- x-.y-.
- *** Failers
- -abc.peq.
-
-/^\*\.[a-z]([a-z\-\d]*[a-z\d]+)?(\.[a-z]([a-z\-\d]*[a-z\d]+)?)*$/
- *.a
- *.b0-a
- *.c3-b.c
- *.c-a.b-c
- *** Failers
- *.0
- *.a-
- *.a-b.c-
- *.c-a.0-c
-
-/^(?=ab(de))(abd)(e)/
- abde
-
-/^(?!(ab)de|x)(abd)(f)/
- abdf
-
-/^(?=(ab(cd)))(ab)/
- abcd
-
-/^[\da-f](\.[\da-f])*$/i
- a.b.c.d
- A.B.C.D
- a.b.c.1.2.3.C
-
-/^\".*\"\s*(;.*)?$/
- \"1234\"
- \"abcd\" ;
- \"\" ; rhubarb
- *** Failers
- \"1234\" : things
-
-/^$/
- \
- *** Failers
-
-/ ^ a (?# begins with a) b\sc (?# then b c) $ (?# then end)/x
- ab c
- *** Failers
- abc
- ab cde
-
-/(?x) ^ a (?# begins with a) b\sc (?# then b c) $ (?# then end)/
- ab c
- *** Failers
- abc
- ab cde
-
-/^ a\ b[c ]d $/x
- a bcd
- a b d
- *** Failers
- abcd
- ab d
-
-/^(a(b(c)))(d(e(f)))(h(i(j)))(k(l(m)))$/
- abcdefhijklm
-
-/^(?:a(b(c)))(?:d(e(f)))(?:h(i(j)))(?:k(l(m)))$/
- abcdefhijklm
-
-/^[\w][\W][\s][\S][\d][\D][\b][\n][\c]][\022]/
- a+ Z0+\x08\n\x1d\x12
-
-/^[.^$|()*+?{,}]+/
- .^\$(*+)|{?,?}
-
-/^a*\w/
- z
- az
- aaaz
- a
- aa
- aaaa
- a+
- aa+
-
-/^a*?\w/
- z
- az
- aaaz
- a
- aa
- aaaa
- a+
- aa+
-
-/^a+\w/
- az
- aaaz
- aa
- aaaa
- aa+
-
-/^a+?\w/
- az
- aaaz
- aa
- aaaa
- aa+
-
-/^\d{8}\w{2,}/
- 1234567890
- 12345678ab
- 12345678__
- *** Failers
- 1234567
-
-/^[aeiou\d]{4,5}$/
- uoie
- 1234
- 12345
- aaaaa
- *** Failers
- 123456
-
-/^[aeiou\d]{4,5}?/
- uoie
- 1234
- 12345
- aaaaa
- 123456
-
-/\A(abc|def)=(\1){2,3}\Z/
- abc=abcabc
- def=defdefdef
- *** Failers
- abc=defdef
-
-/^(a)(b)(c)(d)(e)(f)(g)(h)(i)(j)(k)\11*(\3\4)\1(?#)2$/
- abcdefghijkcda2
- abcdefghijkkkkcda2
-
-/(cat(a(ract|tonic)|erpillar)) \1()2(3)/
- cataract cataract23
- catatonic catatonic23
- caterpillar caterpillar23
-
-
-/^From +([^ ]+) +[a-zA-Z][a-zA-Z][a-zA-Z] +[a-zA-Z][a-zA-Z][a-zA-Z] +[0-9]?[0-9] +[0-9][0-9]:[0-9][0-9]/
- From abcd Mon Sep 01 12:33:02 1997
-
-/^From\s+\S+\s+([a-zA-Z]{3}\s+){2}\d{1,2}\s+\d\d:\d\d/
- From abcd Mon Sep 01 12:33:02 1997
- From abcd Mon Sep 1 12:33:02 1997
- *** Failers
- From abcd Sep 01 12:33:02 1997
-
-/^12.34/s
- 12\n34
- 12\r34
-
-/\w+(?=\t)/
- the quick brown\t fox
-
-/foo(?!bar)(.*)/
- foobar is foolish see?
-
-/(?:(?!foo)...|^.{0,2})bar(.*)/
- foobar crowbar etc
- barrel
- 2barrel
- A barrel
-
-/^(\D*)(?=\d)(?!123)/
- abc456
- *** Failers
- abc123
-
-/^1234(?# test newlines
- inside)/
- 1234
-
-/^1234 #comment in extended re
- /x
- 1234
-
-/#rhubarb
- abcd/x
- abcd
-
-/^abcd#rhubarb/x
- abcd
-
-/^(a)\1{2,3}(.)/
- aaab
- aaaab
- aaaaab
- aaaaaab
-
-/(?!^)abc/
- the abc
- *** Failers
- abc
-
-/(?=^)abc/
- abc
- *** Failers
- the abc
-
-/^[ab]{1,3}(ab*|b)/
- aabbbbb
-
-/^[ab]{1,3}?(ab*|b)/
- aabbbbb
-
-/^[ab]{1,3}?(ab*?|b)/
- aabbbbb
-
-/^[ab]{1,3}(ab*?|b)/
- aabbbbb
-
-/ (?: [\040\t] | \(
-(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
-\) )* # optional leading comment
-(?: (?:
-[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
-(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
-|
-" (?: # opening quote...
-[^\\\x80-\xff\n\015"] # Anything except backslash and quote
-| # or
-\\ [^\x80-\xff] # Escaped something (something != CR)
-)* " # closing quote
-) # initial word
-(?: (?: [\040\t] | \(
-(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
-\) )* \. (?: [\040\t] | \(
-(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
-\) )* (?:
-[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
-(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
-|
-" (?: # opening quote...
-[^\\\x80-\xff\n\015"] # Anything except backslash and quote
-| # or
-\\ [^\x80-\xff] # Escaped something (something != CR)
-)* " # closing quote
-) )* # further okay, if led by a period
-(?: [\040\t] | \(
-(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
-\) )* @ (?: [\040\t] | \(
-(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
-\) )* (?:
-[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
-(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
-| \[ # [
-(?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
-\] # ]
-) # initial subdomain
-(?: #
-(?: [\040\t] | \(
-(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
-\) )* \. # if led by a period...
-(?: [\040\t] | \(
-(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
-\) )* (?:
-[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
-(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
-| \[ # [
-(?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
-\] # ]
-) # ...further okay
-)*
-# address
-| # or
-(?:
-[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
-(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
-|
-" (?: # opening quote...
-[^\\\x80-\xff\n\015"] # Anything except backslash and quote
-| # or
-\\ [^\x80-\xff] # Escaped something (something != CR)
-)* " # closing quote
-) # one word, optionally followed by....
-(?:
-[^()<>@,;:".\\\[\]\x80-\xff\000-\010\012-\037] | # atom and space parts, or...
-\(
-(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
-\) | # comments, or...
-
-" (?: # opening quote...
-[^\\\x80-\xff\n\015"] # Anything except backslash and quote
-| # or
-\\ [^\x80-\xff] # Escaped something (something != CR)
-)* " # closing quote
-# quoted strings
-)*
-< (?: [\040\t] | \(
-(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
-\) )* # leading <
-(?: @ (?: [\040\t] | \(
-(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
-\) )* (?:
-[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
-(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
-| \[ # [
-(?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
-\] # ]
-) # initial subdomain
-(?: #
-(?: [\040\t] | \(
-(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
-\) )* \. # if led by a period...
-(?: [\040\t] | \(
-(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
-\) )* (?:
-[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
-(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
-| \[ # [
-(?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
-\] # ]
-) # ...further okay
-)*
-
-(?: (?: [\040\t] | \(
-(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
-\) )* , (?: [\040\t] | \(
-(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
-\) )* @ (?: [\040\t] | \(
-(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
-\) )* (?:
-[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
-(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
-| \[ # [
-(?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
-\] # ]
-) # initial subdomain
-(?: #
-(?: [\040\t] | \(
-(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
-\) )* \. # if led by a period...
-(?: [\040\t] | \(
-(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
-\) )* (?:
-[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
-(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
-| \[ # [
-(?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
-\] # ]
-) # ...further okay
-)*
-)* # further okay, if led by comma
-: # closing colon
-(?: [\040\t] | \(
-(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
-\) )* )? # optional route
-(?:
-[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
-(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
-|
-" (?: # opening quote...
-[^\\\x80-\xff\n\015"] # Anything except backslash and quote
-| # or
-\\ [^\x80-\xff] # Escaped something (something != CR)
-)* " # closing quote
-) # initial word
-(?: (?: [\040\t] | \(
-(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
-\) )* \. (?: [\040\t] | \(
-(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
-\) )* (?:
-[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
-(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
-|
-" (?: # opening quote...
-[^\\\x80-\xff\n\015"] # Anything except backslash and quote
-| # or
-\\ [^\x80-\xff] # Escaped something (something != CR)
-)* " # closing quote
-) )* # further okay, if led by a period
-(?: [\040\t] | \(
-(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
-\) )* @ (?: [\040\t] | \(
-(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
-\) )* (?:
-[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
-(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
-| \[ # [
-(?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
-\] # ]
-) # initial subdomain
-(?: #
-(?: [\040\t] | \(
-(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
-\) )* \. # if led by a period...
-(?: [\040\t] | \(
-(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
-\) )* (?:
-[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
-(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
-| \[ # [
-(?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
-\] # ]
-) # ...further okay
-)*
-# address spec
-(?: [\040\t] | \(
-(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
-\) )* > # trailing >
-# name and address
-) (?: [\040\t] | \(
-(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
-\) )* # optional trailing comment
-/x
- Alan Other <user\@dom.ain>
- <user\@dom.ain>
- user\@dom.ain
- \"A. Other\" <user.1234\@dom.ain> (a comment)
- A. Other <user.1234\@dom.ain> (a comment)
- \"/s=user/ou=host/o=place/prmd=uu.yy/admd= /c=gb/\"\@x400-re.lay
- A missing angle <user\@some.where
- *** Failers
- The quick brown fox
-
-/[\040\t]* # Nab whitespace.
-(?:
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: # (
-(?: \\ [^\x80-\xff] |
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
-\) # )
-) # special
-[^\\\x80-\xff\n\015()] * # normal*
-)* # )*
-\) # )
-[\040\t]* )* # If comment found, allow more spaces.
-# optional leading comment
-(?:
-(?:
-[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
-(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
-# Atom
-| # or
-" # "
-[^\\\x80-\xff\n\015"] * # normal
-(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015"] * )* # ( special normal* )*
-" # "
-# Quoted string
-)
-[\040\t]* # Nab whitespace.
-(?:
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: # (
-(?: \\ [^\x80-\xff] |
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
-\) # )
-) # special
-[^\\\x80-\xff\n\015()] * # normal*
-)* # )*
-\) # )
-[\040\t]* )* # If comment found, allow more spaces.
-(?:
-\.
-[\040\t]* # Nab whitespace.
-(?:
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: # (
-(?: \\ [^\x80-\xff] |
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
-\) # )
-) # special
-[^\\\x80-\xff\n\015()] * # normal*
-)* # )*
-\) # )
-[\040\t]* )* # If comment found, allow more spaces.
-(?:
-[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
-(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
-# Atom
-| # or
-" # "
-[^\\\x80-\xff\n\015"] * # normal
-(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015"] * )* # ( special normal* )*
-" # "
-# Quoted string
-)
-[\040\t]* # Nab whitespace.
-(?:
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: # (
-(?: \\ [^\x80-\xff] |
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
-\) # )
-) # special
-[^\\\x80-\xff\n\015()] * # normal*
-)* # )*
-\) # )
-[\040\t]* )* # If comment found, allow more spaces.
-# additional words
-)*
-@
-[\040\t]* # Nab whitespace.
-(?:
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: # (
-(?: \\ [^\x80-\xff] |
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
-\) # )
-) # special
-[^\\\x80-\xff\n\015()] * # normal*
-)* # )*
-\) # )
-[\040\t]* )* # If comment found, allow more spaces.
-(?:
-[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
-(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
-|
-\[ # [
-(?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
-\] # ]
-)
-[\040\t]* # Nab whitespace.
-(?:
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: # (
-(?: \\ [^\x80-\xff] |
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
-\) # )
-) # special
-[^\\\x80-\xff\n\015()] * # normal*
-)* # )*
-\) # )
-[\040\t]* )* # If comment found, allow more spaces.
-# optional trailing comments
-(?:
-\.
-[\040\t]* # Nab whitespace.
-(?:
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: # (
-(?: \\ [^\x80-\xff] |
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
-\) # )
-) # special
-[^\\\x80-\xff\n\015()] * # normal*
-)* # )*
-\) # )
-[\040\t]* )* # If comment found, allow more spaces.
-(?:
-[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
-(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
-|
-\[ # [
-(?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
-\] # ]
-)
-[\040\t]* # Nab whitespace.
-(?:
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: # (
-(?: \\ [^\x80-\xff] |
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
-\) # )
-) # special
-[^\\\x80-\xff\n\015()] * # normal*
-)* # )*
-\) # )
-[\040\t]* )* # If comment found, allow more spaces.
-# optional trailing comments
-)*
-# address
-| # or
-(?:
-[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
-(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
-# Atom
-| # or
-" # "
-[^\\\x80-\xff\n\015"] * # normal
-(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015"] * )* # ( special normal* )*
-" # "
-# Quoted string
-)
-# leading word
-[^()<>@,;:".\\\[\]\x80-\xff\000-\010\012-\037] * # "normal" atoms and or spaces
-(?:
-(?:
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: # (
-(?: \\ [^\x80-\xff] |
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
-\) # )
-) # special
-[^\\\x80-\xff\n\015()] * # normal*
-)* # )*
-\) # )
-|
-" # "
-[^\\\x80-\xff\n\015"] * # normal
-(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015"] * )* # ( special normal* )*
-" # "
-) # "special" comment or quoted string
-[^()<>@,;:".\\\[\]\x80-\xff\000-\010\012-\037] * # more "normal"
-)*
-<
-[\040\t]* # Nab whitespace.
-(?:
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: # (
-(?: \\ [^\x80-\xff] |
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
-\) # )
-) # special
-[^\\\x80-\xff\n\015()] * # normal*
-)* # )*
-\) # )
-[\040\t]* )* # If comment found, allow more spaces.
-# <
-(?:
-@
-[\040\t]* # Nab whitespace.
-(?:
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: # (
-(?: \\ [^\x80-\xff] |
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
-\) # )
-) # special
-[^\\\x80-\xff\n\015()] * # normal*
-)* # )*
-\) # )
-[\040\t]* )* # If comment found, allow more spaces.
-(?:
-[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
-(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
-|
-\[ # [
-(?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
-\] # ]
-)
-[\040\t]* # Nab whitespace.
-(?:
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: # (
-(?: \\ [^\x80-\xff] |
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
-\) # )
-) # special
-[^\\\x80-\xff\n\015()] * # normal*
-)* # )*
-\) # )
-[\040\t]* )* # If comment found, allow more spaces.
-# optional trailing comments
-(?:
-\.
-[\040\t]* # Nab whitespace.
-(?:
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: # (
-(?: \\ [^\x80-\xff] |
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
-\) # )
-) # special
-[^\\\x80-\xff\n\015()] * # normal*
-)* # )*
-\) # )
-[\040\t]* )* # If comment found, allow more spaces.
-(?:
-[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
-(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
-|
-\[ # [
-(?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
-\] # ]
-)
-[\040\t]* # Nab whitespace.
-(?:
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: # (
-(?: \\ [^\x80-\xff] |
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
-\) # )
-) # special
-[^\\\x80-\xff\n\015()] * # normal*
-)* # )*
-\) # )
-[\040\t]* )* # If comment found, allow more spaces.
-# optional trailing comments
-)*
-(?: ,
-[\040\t]* # Nab whitespace.
-(?:
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: # (
-(?: \\ [^\x80-\xff] |
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
-\) # )
-) # special
-[^\\\x80-\xff\n\015()] * # normal*
-)* # )*
-\) # )
-[\040\t]* )* # If comment found, allow more spaces.
-@
-[\040\t]* # Nab whitespace.
-(?:
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: # (
-(?: \\ [^\x80-\xff] |
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
-\) # )
-) # special
-[^\\\x80-\xff\n\015()] * # normal*
-)* # )*
-\) # )
-[\040\t]* )* # If comment found, allow more spaces.
-(?:
-[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
-(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
-|
-\[ # [
-(?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
-\] # ]
-)
-[\040\t]* # Nab whitespace.
-(?:
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: # (
-(?: \\ [^\x80-\xff] |
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
-\) # )
-) # special
-[^\\\x80-\xff\n\015()] * # normal*
-)* # )*
-\) # )
-[\040\t]* )* # If comment found, allow more spaces.
-# optional trailing comments
-(?:
-\.
-[\040\t]* # Nab whitespace.
-(?:
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: # (
-(?: \\ [^\x80-\xff] |
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
-\) # )
-) # special
-[^\\\x80-\xff\n\015()] * # normal*
-)* # )*
-\) # )
-[\040\t]* )* # If comment found, allow more spaces.
-(?:
-[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
-(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
-|
-\[ # [
-(?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
-\] # ]
-)
-[\040\t]* # Nab whitespace.
-(?:
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: # (
-(?: \\ [^\x80-\xff] |
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
-\) # )
-) # special
-[^\\\x80-\xff\n\015()] * # normal*
-)* # )*
-\) # )
-[\040\t]* )* # If comment found, allow more spaces.
-# optional trailing comments
-)*
-)* # additional domains
-:
-[\040\t]* # Nab whitespace.
-(?:
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: # (
-(?: \\ [^\x80-\xff] |
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
-\) # )
-) # special
-[^\\\x80-\xff\n\015()] * # normal*
-)* # )*
-\) # )
-[\040\t]* )* # If comment found, allow more spaces.
-# optional trailing comments
-)? # optional route
-(?:
-[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
-(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
-# Atom
-| # or
-" # "
-[^\\\x80-\xff\n\015"] * # normal
-(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015"] * )* # ( special normal* )*
-" # "
-# Quoted string
-)
-[\040\t]* # Nab whitespace.
-(?:
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: # (
-(?: \\ [^\x80-\xff] |
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
-\) # )
-) # special
-[^\\\x80-\xff\n\015()] * # normal*
-)* # )*
-\) # )
-[\040\t]* )* # If comment found, allow more spaces.
-(?:
-\.
-[\040\t]* # Nab whitespace.
-(?:
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: # (
-(?: \\ [^\x80-\xff] |
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
-\) # )
-) # special
-[^\\\x80-\xff\n\015()] * # normal*
-)* # )*
-\) # )
-[\040\t]* )* # If comment found, allow more spaces.
-(?:
-[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
-(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
-# Atom
-| # or
-" # "
-[^\\\x80-\xff\n\015"] * # normal
-(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015"] * )* # ( special normal* )*
-" # "
-# Quoted string
-)
-[\040\t]* # Nab whitespace.
-(?:
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: # (
-(?: \\ [^\x80-\xff] |
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
-\) # )
-) # special
-[^\\\x80-\xff\n\015()] * # normal*
-)* # )*
-\) # )
-[\040\t]* )* # If comment found, allow more spaces.
-# additional words
-)*
-@
-[\040\t]* # Nab whitespace.
-(?:
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: # (
-(?: \\ [^\x80-\xff] |
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
-\) # )
-) # special
-[^\\\x80-\xff\n\015()] * # normal*
-)* # )*
-\) # )
-[\040\t]* )* # If comment found, allow more spaces.
-(?:
-[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
-(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
-|
-\[ # [
-(?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
-\] # ]
-)
-[\040\t]* # Nab whitespace.
-(?:
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: # (
-(?: \\ [^\x80-\xff] |
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
-\) # )
-) # special
-[^\\\x80-\xff\n\015()] * # normal*
-)* # )*
-\) # )
-[\040\t]* )* # If comment found, allow more spaces.
-# optional trailing comments
-(?:
-\.
-[\040\t]* # Nab whitespace.
-(?:
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: # (
-(?: \\ [^\x80-\xff] |
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
-\) # )
-) # special
-[^\\\x80-\xff\n\015()] * # normal*
-)* # )*
-\) # )
-[\040\t]* )* # If comment found, allow more spaces.
-(?:
-[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
-(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
-|
-\[ # [
-(?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
-\] # ]
-)
-[\040\t]* # Nab whitespace.
-(?:
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: # (
-(?: \\ [^\x80-\xff] |
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
-\) # )
-) # special
-[^\\\x80-\xff\n\015()] * # normal*
-)* # )*
-\) # )
-[\040\t]* )* # If comment found, allow more spaces.
-# optional trailing comments
-)*
-# address spec
-> # >
-# name and address
-)
-/x
- Alan Other <user\@dom.ain>
- <user\@dom.ain>
- user\@dom.ain
- \"A. Other\" <user.1234\@dom.ain> (a comment)
- A. Other <user.1234\@dom.ain> (a comment)
- \"/s=user/ou=host/o=place/prmd=uu.yy/admd= /c=gb/\"\@x400-re.lay
- A missing angle <user\@some.where
- *** Failers
- The quick brown fox
-
-/abc\0def\00pqr\000xyz\0000AB/
- abc\0def\00pqr\000xyz\0000AB
- abc456 abc\0def\00pqr\000xyz\0000ABCDE
-
-/abc\x0def\x00pqr\x000xyz\x0000AB/
- abc\x0def\x00pqr\x000xyz\x0000AB
- abc456 abc\x0def\x00pqr\x000xyz\x0000ABCDE
-
-/^[\000-\037]/
- \0A
- \01B
- \037C
-
-/\0*/
- \0\0\0\0
-
-/A\x0{2,3}Z/
- The A\x0\x0Z
- An A\0\x0\0Z
- *** Failers
- A\0Z
- A\0\x0\0\x0Z
-
-/^(cow|)\1(bell)/
- cowcowbell
- bell
- *** Failers
- cowbell
-
-/^\s/
- \040abc
- \x0cabc
- \nabc
- \rabc
- \tabc
- *** Failers
- abc
-
-/^a b
-
- c/x
- abc
-
-/^(a|)\1*b/
- ab
- aaaab
- b
- *** Failers
- acb
-
-/^(a|)\1+b/
- aab
- aaaab
- b
- *** Failers
- ab
-
-/^(a|)\1?b/
- ab
- aab
- b
- *** Failers
- acb
-
-/^(a|)\1{2}b/
- aaab
- b
- *** Failers
- ab
- aab
- aaaab
-
-/^(a|)\1{2,3}b/
- aaab
- aaaab
- b
- *** Failers
- ab
- aab
- aaaaab
-
-/ab{1,3}bc/
- abbbbc
- abbbc
- abbc
- *** Failers
- abc
- abbbbbc
-
-/([^.]*)\.([^:]*):[T ]+(.*)/
- track1.title:TBlah blah blah
-
-/([^.]*)\.([^:]*):[T ]+(.*)/i
- track1.title:TBlah blah blah
-
-/([^.]*)\.([^:]*):[t ]+(.*)/i
- track1.title:TBlah blah blah
-
-/^[W-c]+$/
- WXY_^abc
- ***Failers
- wxy
-
-/^[W-c]+$/i
- WXY_^abc
- wxy_^ABC
-
-/^[\x3f-\x5F]+$/i
- WXY_^abc
- wxy_^ABC
-
-/^abc$/m
- abc
- qqq\nabc
- abc\nzzz
- qqq\nabc\nzzz
-
-/^abc$/
- abc
- *** Failers
- qqq\nabc
- abc\nzzz
- qqq\nabc\nzzz
-
-/\Aabc\Z/m
- abc
- abc\n
- *** Failers
- qqq\nabc
- abc\nzzz
- qqq\nabc\nzzz
-
-/\A(.)*\Z/s
- abc\ndef
-
-/\A(.)*\Z/m
- *** Failers
- abc\ndef
-
-/(?:b)|(?::+)/
- b::c
- c::b
-
-/[-az]+/
- az-
- *** Failers
- b
-
-/[az-]+/
- za-
- *** Failers
- b
-
-/[a\-z]+/
- a-z
- *** Failers
- b
-
-/[a-z]+/
- abcdxyz
-
-/[\d-]+/
- 12-34
- *** Failers
- aaa
-
-/[\d-z]+/
- 12-34z
- *** Failers
- aaa
-
-/\x5c/
- \\
-
-/\x20Z/
- the Zoo
- *** Failers
- Zulu
-
-/(abc)\1/i
- abcabc
- ABCabc
- abcABC
-
-/ab{3cd/
- ab{3cd
-
-/ab{3,cd/
- ab{3,cd
-
-/ab{3,4a}cd/
- ab{3,4a}cd
-
-/{4,5a}bc/
- {4,5a}bc
-
-/^a.b/
- a\rb
- *** Failers
- a\nb
-
-/abc$/
- abc
- abc\n
- *** Failers
- abc\ndef
-
-/(abc)\123/
- abc\x53
-
-/(abc)\223/
- abc\x93
-
-/(abc)\323/
- abc\xd3
-
-/(abc)\500/
- abc\x40
- abc\100
-
-/(abc)\5000/
- abc\x400
- abc\x40\x30
- abc\1000
- abc\100\x30
- abc\100\060
- abc\100\60
-
-/abc\81/
- abc\081
- abc\0\x38\x31
-
-/abc\91/
- abc\091
- abc\0\x39\x31
-
-/(a)(b)(c)(d)(e)(f)(g)(h)(i)(j)(k)(l)\12\123/
- abcdefghijkllS
-
-/(a)(b)(c)(d)(e)(f)(g)(h)(i)(j)(k)\12\123/
- abcdefghijk\12S
-
-/ab\gdef/
- abgdef
-
-/a{0}bc/
- bc
-
-/(a|(bc)){0,0}?xyz/
- xyz
-
-/abc[\10]de/
- abc\010de
-
-/abc[\1]de/
- abc\1de
-
-/(abc)[\1]de/
- abc\1de
-
-/(?s)a.b/
- a\nb
-
-/^([^a])([^\b])([^c]*)([^d]{3,4})/
- baNOTccccd
- baNOTcccd
- baNOTccd
- bacccd
- *** Failers
- anything
- b\bc
- baccd
-
-/[^a]/
- Abc
-
-/[^a]/i
- Abc
-
-/[^a]+/
- AAAaAbc
-
-/[^a]+/i
- AAAaAbc
-
-/[^a]+/
- bbb\nccc
-
-/[^k]$/
- abc
- *** Failers
- abk
-
-/[^k]{2,3}$/
- abc
- kbc
- kabc
- *** Failers
- abk
- akb
- akk
-
-/^\d{8,}\@.+[^k]$/
- 12345678\@a.b.c.d
- 123456789\@x.y.z
- *** Failers
- 12345678\@x.y.uk
- 1234567\@a.b.c.d
-
-/(a)\1{8,}/
- aaaaaaaaa
- aaaaaaaaaa
- *** Failers
- aaaaaaa
-
-/[^a]/
- aaaabcd
- aaAabcd
-
-/[^a]/i
- aaaabcd
- aaAabcd
-
-/[^az]/
- aaaabcd
- aaAabcd
-
-/[^az]/i
- aaaabcd
- aaAabcd
-
-/\000\001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037\040\041\042\043\044\045\046\047\050\051\052\053\054\055\056\057\060\061\062\063\064\065\066\067\070\071\072\073\074\075\076\077\100\101\102\103\104\105\106\107\110\111\112\113\114\115\116\117\120\121\122\123\124\125\126\127\130\131\132\133\134\135\136\137\140\141\142\143\144\145\146\147\150\151\152\153\154\155\156\157\160\161\162\163\164\165\166\167\170\171\172\173\174\175\176\177\200\201\202\203\204\205\206\207\210\211\212\213\214\215\216\217\220\221\222\223\224\225\226\227\230\231\232\233\234\235\236\237\240\241\242\243\244\245\246\247\250\251\252\253\254\255\256\257\260\261\262\263\264\265\266\267\270\271\272\273\274\275\276\277\300\301\302\303\304\305\306\307\310\311\312\313\314\315\316\317\320\321\322\323\324\325\326\327\330\331\332\333\334\335\336\337\340\341\342\343\344\345\346\347\350\351\352\353\354\355\356\357\360\361\362\363\364\365\366\367\370\371\372\373\374\375\376\377/
- \000\001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037\040\041\042\043\044\045\046\047\050\051\052\053\054\055\056\057\060\061\062\063\064\065\066\067\070\071\072\073\074\075\076\077\100\101\102\103\104\105\106\107\110\111\112\113\114\115\116\117\120\121\122\123\124\125\126\127\130\131\132\133\134\135\136\137\140\141\142\143\144\145\146\147\150\151\152\153\154\155\156\157\160\161\162\163\164\165\166\167\170\171\172\173\174\175\176\177\200\201\202\203\204\205\206\207\210\211\212\213\214\215\216\217\220\221\222\223\224\225\226\227\230\231\232\233\234\235\236\237\240\241\242\243\244\245\246\247\250\251\252\253\254\255\256\257\260\261\262\263\264\265\266\267\270\271\272\273\274\275\276\277\300\301\302\303\304\305\306\307\310\311\312\313\314\315\316\317\320\321\322\323\324\325\326\327\330\331\332\333\334\335\336\337\340\341\342\343\344\345\346\347\350\351\352\353\354\355\356\357\360\361\362\363\364\365\366\367\370\371\372\373\374\375\376\377
-
-/P[^*]TAIRE[^*]{1,6}?LL/
- xxxxxxxxxxxPSTAIREISLLxxxxxxxxx
-
-/P[^*]TAIRE[^*]{1,}?LL/
- xxxxxxxxxxxPSTAIREISLLxxxxxxxxx
-
-/(\.\d\d[1-9]?)\d+/
- 1.230003938
- 1.875000282
- 1.235
-
-/(\.\d\d((?=0)|\d(?=\d)))/
- 1.230003938
- 1.875000282
- *** Failers
- 1.235
-
-/a(?)b/
- ab
-
-/\b(foo)\s+(\w+)/i
- Food is on the foo table
-
-/foo(.*)bar/
- The food is under the bar in the barn.
-
-/foo(.*?)bar/
- The food is under the bar in the barn.
-
-/(.*)(\d*)/
- I have 2 numbers: 53147
-
-/(.*)(\d+)/
- I have 2 numbers: 53147
-
-/(.*?)(\d*)/
- I have 2 numbers: 53147
-
-/(.*?)(\d+)/
- I have 2 numbers: 53147
-
-/(.*)(\d+)$/
- I have 2 numbers: 53147
-
-/(.*?)(\d+)$/
- I have 2 numbers: 53147
-
-/(.*)\b(\d+)$/
- I have 2 numbers: 53147
-
-/(.*\D)(\d+)$/
- I have 2 numbers: 53147
-
-/^\D*(?!123)/
- ABC123
-
-/^(\D*)(?=\d)(?!123)/
- ABC445
- *** Failers
- ABC123
-
-/^[W-]46]/
- W46]789
- -46]789
- *** Failers
- Wall
- Zebra
- 42
- [abcd]
- ]abcd[
-
-/^[W-\]46]/
- W46]789
- Wall
- Zebra
- Xylophone
- 42
- [abcd]
- ]abcd[
- \\backslash
- *** Failers
- -46]789
- well
-
-/\d\d\/\d\d\/\d\d\d\d/
- 01/01/2000
-
-/word (?:[a-zA-Z0-9]+ ){0,10}otherword/
- word cat dog elephant mussel cow horse canary baboon snake shark otherword
- word cat dog elephant mussel cow horse canary baboon snake shark
-
-/word (?:[a-zA-Z0-9]+ ){0,300}otherword/
- word cat dog elephant mussel cow horse canary baboon snake shark the quick brown fox and the lazy dog and several other words getting close to thirty by now I hope
-
-/^(a){0,0}/
- bcd
- abc
- aab
-
-/^(a){0,1}/
- bcd
- abc
- aab
-
-/^(a){0,2}/
- bcd
- abc
- aab
-
-/^(a){0,3}/
- bcd
- abc
- aab
- aaa
-
-/^(a){0,}/
- bcd
- abc
- aab
- aaa
- aaaaaaaa
-
-/^(a){1,1}/
- bcd
- abc
- aab
-
-/^(a){1,2}/
- bcd
- abc
- aab
-
-/^(a){1,3}/
- bcd
- abc
- aab
- aaa
-
-/^(a){1,}/
- bcd
- abc
- aab
- aaa
- aaaaaaaa
-
-/.*\.gif/
- borfle\nbib.gif\nno
-
-/.{0,}\.gif/
- borfle\nbib.gif\nno
-
-/.*\.gif/m
- borfle\nbib.gif\nno
-
-/.*\.gif/s
- borfle\nbib.gif\nno
-
-/.*\.gif/ms
- borfle\nbib.gif\nno
-
-/.*$/
- borfle\nbib.gif\nno
-
-/.*$/m
- borfle\nbib.gif\nno
-
-/.*$/s
- borfle\nbib.gif\nno
-
-/.*$/ms
- borfle\nbib.gif\nno
-
-/.*$/
- borfle\nbib.gif\nno\n
-
-/.*$/m
- borfle\nbib.gif\nno\n
-
-/.*$/s
- borfle\nbib.gif\nno\n
-
-/.*$/ms
- borfle\nbib.gif\nno\n
-
-/(.*X|^B)/
- abcde\n1234Xyz
- BarFoo
- *** Failers
- abcde\nBar
-
-/(.*X|^B)/m
- abcde\n1234Xyz
- BarFoo
- abcde\nBar
-
-/(.*X|^B)/s
- abcde\n1234Xyz
- BarFoo
- *** Failers
- abcde\nBar
-
-/(.*X|^B)/ms
- abcde\n1234Xyz
- BarFoo
- abcde\nBar
-
-/(?s)(.*X|^B)/
- abcde\n1234Xyz
- BarFoo
- *** Failers
- abcde\nBar
-
-/(?s:.*X|^B)/
- abcde\n1234Xyz
- BarFoo
- *** Failers
- abcde\nBar
-
-/^.*B/
- **** Failers
- abc\nB
-
-/(?s)^.*B/
- abc\nB
-
-/(?m)^.*B/
- abc\nB
-
-/(?ms)^.*B/
- abc\nB
-
-/(?ms)^B/
- abc\nB
-
-/(?s)B$/
- B\n
-
-/^[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]/
- 123456654321
-
-/^\d\d\d\d\d\d\d\d\d\d\d\d/
- 123456654321
-
-/^[\d][\d][\d][\d][\d][\d][\d][\d][\d][\d][\d][\d]/
- 123456654321
-
-/^[abc]{12}/
- abcabcabcabc
-
-/^[a-c]{12}/
- abcabcabcabc
-
-/^(a|b|c){12}/
- abcabcabcabc
-
-/^[abcdefghijklmnopqrstuvwxy0123456789]/
- n
- *** Failers
- z
-
-/abcde{0,0}/
- abcd
- *** Failers
- abce
-
-/ab[cd]{0,0}e/
- abe
- *** Failers
- abcde
-
-/ab(c){0,0}d/
- abd
- *** Failers
- abcd
-
-/a(b*)/
- a
- ab
- abbbb
- *** Failers
- bbbbb
-
-/ab\d{0}e/
- abe
- *** Failers
- ab1e
-
-/"([^\\"]+|\\.)*"/
- the \"quick\" brown fox
- \"the \\\"quick\\\" brown fox\"
-
-/.*?/g+
- abc
-
-/\b/g+
- abc
-
-/\b/+g
- abc
-
-//g
- abc
-
-/<tr([\w\W\s\d][^<>]{0,})><TD([\w\W\s\d][^<>]{0,})>([\d]{0,}\.)(.*)((<BR>([\w\W\s\d][^<>]{0,})|[\s]{0,}))<\/a><\/TD><TD([\w\W\s\d][^<>]{0,})>([\w\W\s\d][^<>]{0,})<\/TD><TD([\w\W\s\d][^<>]{0,})>([\w\W\s\d][^<>]{0,})<\/TD><\/TR>/is
- <TR BGCOLOR='#DBE9E9'><TD align=left valign=top>43.<a href='joblist.cfm?JobID=94 6735&Keyword='>Word Processor<BR>(N-1286)</a></TD><TD align=left valign=top>Lega lstaff.com</TD><TD align=left valign=top>CA - Statewide</TD></TR>
-
-/a[^a]b/
- acb
- a\nb
-
-/a.b/
- acb
- *** Failers
- a\nb
-
-/a[^a]b/s
- acb
- a\nb
-
-/a.b/s
- acb
- a\nb
-
-/^(b+?|a){1,2}?c/
- bac
- bbac
- bbbac
- bbbbac
- bbbbbac
-
-/^(b+|a){1,2}?c/
- bac
- bbac
- bbbac
- bbbbac
- bbbbbac
-
-/(?!\A)x/m
- x\nb\n
- a\bx\n
-
-/\x0{ab}/
- \0{ab}
-
-/(A|B)*?CD/
- CD
-
-/(A|B)*CD/
- CD
-
-/(AB)*?\1/
- ABABAB
-
-/(AB)*\1/
- ABABAB
-
-/(?<!bar)foo/
- foo
- catfood
- arfootle
- rfoosh
- *** Failers
- barfoo
- towbarfoo
-
-/\w{3}(?<!bar)foo/
- catfood
- *** Failers
- foo
- barfoo
- towbarfoo
-
-/(?<=(foo)a)bar/
- fooabar
- *** Failers
- bar
- foobbar
-
-/\Aabc\z/m
- abc
- *** Failers
- abc\n
- qqq\nabc
- abc\nzzz
- qqq\nabc\nzzz
-
-"(?>.*/)foo"
- /this/is/a/very/long/line/in/deed/with/very/many/slashes/in/it/you/see/
-
-"(?>.*/)foo"
- /this/is/a/very/long/line/in/deed/with/very/many/slashes/in/and/foo
-
-/(?>(\.\d\d[1-9]?))\d+/
- 1.230003938
- 1.875000282
- *** Failers
- 1.235
-
-/^((?>\w+)|(?>\s+))*$/
- now is the time for all good men to come to the aid of the party
- *** Failers
- this is not a line with only words and spaces!
-
-/(\d+)(\w)/
- 12345a
- 12345+
-
-/((?>\d+))(\w)/
- 12345a
- *** Failers
- 12345+
-
-/(?>a+)b/
- aaab
-
-/((?>a+)b)/
- aaab
-
-/(?>(a+))b/
- aaab
-
-/(?>b)+/
- aaabbbccc
-
-/(?>a+|b+|c+)*c/
- aaabbbbccccd
-
-/((?>[^()]+)|\([^()]*\))+/
- ((abc(ade)ufh()()x
-
-/\(((?>[^()]+)|\([^()]+\))+\)/
- (abc)
- (abc(def)xyz)
- *** Failers
- ((()aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-
-/a(?-i)b/i
- ab
- Ab
- *** Failers
- aB
- AB
-
-/(a (?x)b c)d e/
- a bcd e
- *** Failers
- a b cd e
- abcd e
- a bcde
-
-/(a b(?x)c d (?-x)e f)/
- a bcde f
- *** Failers
- abcdef
-
-/(a(?i)b)c/
- abc
- aBc
- *** Failers
- abC
- aBC
- Abc
- ABc
- ABC
- AbC
-
-/a(?i:b)c/
- abc
- aBc
- *** Failers
- ABC
- abC
- aBC
-
-/a(?i:b)*c/
- aBc
- aBBc
- *** Failers
- aBC
- aBBC
-
-/a(?=b(?i)c)\w\wd/
- abcd
- abCd
- *** Failers
- aBCd
- abcD
-
-/(?s-i:more.*than).*million/i
- more than million
- more than MILLION
- more \n than Million
- *** Failers
- MORE THAN MILLION
- more \n than \n million
-
-/(?:(?s-i)more.*than).*million/i
- more than million
- more than MILLION
- more \n than Million
- *** Failers
- MORE THAN MILLION
- more \n than \n million
-
-/(?>a(?i)b+)+c/
- abc
- aBbc
- aBBc
- *** Failers
- Abc
- abAb
- abbC
-
-/(?=a(?i)b)\w\wc/
- abc
- aBc
- *** Failers
- Ab
- abC
- aBC
-
-/(?<=a(?i)b)(\w\w)c/
- abxxc
- aBxxc
- *** Failers
- Abxxc
- ABxxc
- abxxC
-
-/(?:(a)|b)(?(1)A|B)/
- aA
- bB
- *** Failers
- aB
- bA
-
-/^(a)?(?(1)a|b)+$/
- aa
- b
- bb
- *** Failers
- ab
-
-/^(?(?=abc)\w{3}:|\d\d)$/
- abc:
- 12
- *** Failers
- 123
- xyz
-
-/^(?(?!abc)\d\d|\w{3}:)$/
- abc:
- 12
- *** Failers
- 123
- xyz
-
-/(?(?<=foo)bar|cat)/
- foobar
- cat
- fcat
- focat
- *** Failers
- foocat
-
-/(?(?<!foo)cat|bar)/
- foobar
- cat
- fcat
- focat
- *** Failers
- foocat
-
-/( \( )? [^()]+ (?(1) \) |) /x
- abcd
- (abcd)
- the quick (abcd) fox
- (abcd
-
-/( \( )? [^()]+ (?(1) \) ) /x
- abcd
- (abcd)
- the quick (abcd) fox
- (abcd
-
-/^(?(2)a|(1)(2))+$/
- 12
- 12a
- 12aa
- *** Failers
- 1234
-
-/((?i)blah)\s+\1/
- blah blah
- BLAH BLAH
- Blah Blah
- blaH blaH
- *** Failers
- blah BLAH
- Blah blah
- blaH blah
-
-/((?i)blah)\s+(?i:\1)/
- blah blah
- BLAH BLAH
- Blah Blah
- blaH blaH
- blah BLAH
- Blah blah
- blaH blah
-
-/(?>a*)*/
- a
- aa
- aaaa
-
-/(abc|)+/
- abc
- abcabc
- abcabcabc
- xyz
-
-/([a]*)*/
- a
- aaaaa
-
-/([ab]*)*/
- a
- b
- ababab
- aaaabcde
- bbbb
-
-/([^a]*)*/
- b
- bbbb
- aaa
-
-/([^ab]*)*/
- cccc
- abab
-
-/([a]*?)*/
- a
- aaaa
-
-/([ab]*?)*/
- a
- b
- abab
- baba
-
-/([^a]*?)*/
- b
- bbbb
- aaa
-
-/([^ab]*?)*/
- c
- cccc
- baba
-
-/(?>a*)*/
- a
- aaabcde
-
-/((?>a*))*/
- aaaaa
- aabbaa
-
-/((?>a*?))*/
- aaaaa
- aabbaa
-
-/(?(?=[^a-z]+[a-z]) \d{2}-[a-z]{3}-\d{2} | \d{2}-\d{2}-\d{2} ) /x
- 12-sep-98
- 12-09-98
- *** Failers
- sep-12-98
-
-/(?<=(foo))bar\1/
- foobarfoo
- foobarfootling
- *** Failers
- foobar
- barfoo
-
-/(?i:saturday|sunday)/
- saturday
- sunday
- Saturday
- Sunday
- SATURDAY
- SUNDAY
- SunDay
-
-/(a(?i)bc|BB)x/
- abcx
- aBCx
- bbx
- BBx
- *** Failers
- abcX
- aBCX
- bbX
- BBX
-
-/^([ab](?i)[cd]|[ef])/
- ac
- aC
- bD
- elephant
- Europe
- frog
- France
- *** Failers
- Africa
-
-/^(ab|a(?i)[b-c](?m-i)d|x(?i)y|z)/
- ab
- aBd
- xy
- xY
- zebra
- Zambesi
- *** Failers
- aCD
- XY
-
-/(?<=foo\n)^bar/m
- foo\nbar
- *** Failers
- bar
- baz\nbar
-
-/(?<=(?<!foo)bar)baz/
- barbaz
- barbarbaz
- koobarbaz
- *** Failers
- baz
- foobarbaz
-
-/The case of aaaaaa is missed out below because I think Perl 5.005_02 gets/
-/it wrong; it sets $1 to aaa rather than aa. Compare the following test,/
-/where it does set $1 to aa when matching aaaaaa./
-
-/^(a\1?){4}$/
- a
- aa
- aaa
- aaaa
- aaaaa
- aaaaaaa
- aaaaaaaa
- aaaaaaaaa
- aaaaaaaaaa
- aaaaaaaaaaa
- aaaaaaaaaaaa
- aaaaaaaaaaaaa
- aaaaaaaaaaaaaa
- aaaaaaaaaaaaaaa
- aaaaaaaaaaaaaaaa
-
-/^(a\1?)(a\1?)(a\2?)(a\3?)$/
- a
- aa
- aaa
- aaaa
- aaaaa
- aaaaaa
- aaaaaaa
- aaaaaaaa
- aaaaaaaaa
- aaaaaaaaaa
- aaaaaaaaaaa
- aaaaaaaaaaaa
- aaaaaaaaaaaaa
- aaaaaaaaaaaaaa
- aaaaaaaaaaaaaaa
- aaaaaaaaaaaaaaaa
-
-/The following tests are taken from the Perl 5.005 test suite; some of them/
-/are compatible with 5.004, but I'd rather not have to sort them out./
-
-/abc/
- abc
- xabcy
- ababc
- *** Failers
- xbc
- axc
- abx
-
-/ab*c/
- abc
-
-/ab*bc/
- abc
- abbc
- abbbbc
-
-/.{1}/
- abbbbc
-
-/.{3,4}/
- abbbbc
-
-/ab{0,}bc/
- abbbbc
-
-/ab+bc/
- abbc
- *** Failers
- abc
- abq
-
-/ab{1,}bc/
-
-/ab+bc/
- abbbbc
-
-/ab{1,}bc/
- abbbbc
-
-/ab{1,3}bc/
- abbbbc
-
-/ab{3,4}bc/
- abbbbc
-
-/ab{4,5}bc/
- *** Failers
- abq
- abbbbc
-
-/ab?bc/
- abbc
- abc
-
-/ab{0,1}bc/
- abc
-
-/ab?bc/
-
-/ab?c/
- abc
-
-/ab{0,1}c/
- abc
-
-/^abc$/
- abc
- *** Failers
- abbbbc
- abcc
-
-/^abc/
- abcc
-
-/^abc$/
-
-/abc$/
- aabc
- *** Failers
- aabc
- aabcd
-
-/^/
- abc
-
-/$/
- abc
-
-/a.c/
- abc
- axc
-
-/a.*c/
- axyzc
-
-/a[bc]d/
- abd
- *** Failers
- axyzd
- abc
-
-/a[b-d]e/
- ace
-
-/a[b-d]/
- aac
-
-/a[-b]/
- a-
-
-/a[b-]/
- a-
-
-/a]/
- a]
-
-/a[]]b/
- a]b
-
-/a[^bc]d/
- aed
- *** Failers
- abd
- abd
-
-/a[^-b]c/
- adc
-
-/a[^]b]c/
- adc
- *** Failers
- a-c
- a]c
-
-/\ba\b/
- a-
- -a
- -a-
-
-/\by\b/
- *** Failers
- xy
- yz
- xyz
-
-/\Ba\B/
- *** Failers
- a-
- -a
- -a-
-
-/\By\b/
- xy
-
-/\by\B/
- yz
-
-/\By\B/
- xyz
-
-/\w/
- a
-
-/\W/
- -
- *** Failers
- -
- a
-
-/a\sb/
- a b
-
-/a\Sb/
- a-b
- *** Failers
- a-b
- a b
-
-/\d/
- 1
-
-/\D/
- -
- *** Failers
- -
- 1
-
-/[\w]/
- a
-
-/[\W]/
- -
- *** Failers
- -
- a
-
-/a[\s]b/
- a b
-
-/a[\S]b/
- a-b
- *** Failers
- a-b
- a b
-
-/[\d]/
- 1
-
-/[\D]/
- -
- *** Failers
- -
- 1
-
-/ab|cd/
- abc
- abcd
-
-/()ef/
- def
-
-/$b/
-
-/a\(b/
- a(b
-
-/a\(*b/
- ab
- a((b
-
-/a\\b/
- a\b
-
-/((a))/
- abc
-
-/(a)b(c)/
- abc
-
-/a+b+c/
- aabbabc
-
-/a{1,}b{1,}c/
- aabbabc
-
-/a.+?c/
- abcabc
-
-/(a+|b)*/
- ab
-
-/(a+|b){0,}/
- ab
-
-/(a+|b)+/
- ab
-
-/(a+|b){1,}/
- ab
-
-/(a+|b)?/
- ab
-
-/(a+|b){0,1}/
- ab
-
-/[^ab]*/
- cde
-
-/abc/
- *** Failers
- b
-
-
-/a*/
-
-
-/([abc])*d/
- abbbcd
-
-/([abc])*bcd/
- abcd
-
-/a|b|c|d|e/
- e
-
-/(a|b|c|d|e)f/
- ef
-
-/abcd*efg/
- abcdefg
-
-/ab*/
- xabyabbbz
- xayabbbz
-
-/(ab|cd)e/
- abcde
-
-/[abhgefdc]ij/
- hij
-
-/^(ab|cd)e/
-
-/(abc|)ef/
- abcdef
-
-/(a|b)c*d/
- abcd
-
-/(ab|ab*)bc/
- abc
-
-/a([bc]*)c*/
- abc
-
-/a([bc]*)(c*d)/
- abcd
-
-/a([bc]+)(c*d)/
- abcd
-
-/a([bc]*)(c+d)/
- abcd
-
-/a[bcd]*dcdcde/
- adcdcde
-
-/a[bcd]+dcdcde/
- *** Failers
- abcde
- adcdcde
-
-/(ab|a)b*c/
- abc
-
-/((a)(b)c)(d)/
- abcd
-
-/[a-zA-Z_][a-zA-Z0-9_]*/
- alpha
-
-/^a(bc+|b[eh])g|.h$/
- abh
-
-/(bc+d$|ef*g.|h?i(j|k))/
- effgz
- ij
- reffgz
- *** Failers
- effg
- bcdd
-
-/((((((((((a))))))))))/
- a
-
-/((((((((((a))))))))))\10/
- aa
-
-/(((((((((a)))))))))/
- a
-
-/multiple words of text/
- *** Failers
- aa
- uh-uh
-
-/multiple words/
- multiple words, yeah
-
-/(.*)c(.*)/
- abcde
-
-/\((.*), (.*)\)/
- (a, b)
-
-/[k]/
-
-/abcd/
- abcd
-
-/a(bc)d/
- abcd
-
-/a[-]?c/
- ac
-
-/(abc)\1/
- abcabc
-
-/([a-c]*)\1/
- abcabc
-
-/(a)|\1/
- a
- *** Failers
- ab
- x
-
-/(([a-c])b*?\2)*/
- ababbbcbc
-
-/(([a-c])b*?\2){3}/
- ababbbcbc
-
-/((\3|b)\2(a)x)+/
- aaaxabaxbaaxbbax
-
-/((\3|b)\2(a)){2,}/
- bbaababbabaaaaabbaaaabba
-
-/abc/i
- ABC
- XABCY
- ABABC
- *** Failers
- aaxabxbaxbbx
- XBC
- AXC
- ABX
-
-/ab*c/i
- ABC
-
-/ab*bc/i
- ABC
- ABBC
-
-/ab*?bc/i
- ABBBBC
-
-/ab{0,}?bc/i
- ABBBBC
-
-/ab+?bc/i
- ABBC
-
-/ab+bc/i
- *** Failers
- ABC
- ABQ
-
-/ab{1,}bc/i
-
-/ab+bc/i
- ABBBBC
-
-/ab{1,}?bc/i
- ABBBBC
-
-/ab{1,3}?bc/i
- ABBBBC
-
-/ab{3,4}?bc/i
- ABBBBC
-
-/ab{4,5}?bc/i
- *** Failers
- ABQ
- ABBBBC
-
-/ab??bc/i
- ABBC
- ABC
-
-/ab{0,1}?bc/i
- ABC
-
-/ab??bc/i
-
-/ab??c/i
- ABC
-
-/ab{0,1}?c/i
- ABC
-
-/^abc$/i
- ABC
- *** Failers
- ABBBBC
- ABCC
-
-/^abc/i
- ABCC
-
-/^abc$/i
-
-/abc$/i
- AABC
-
-/^/i
- ABC
-
-/$/i
- ABC
-
-/a.c/i
- ABC
- AXC
-
-/a.*?c/i
- AXYZC
-
-/a.*c/i
- *** Failers
- AABC
- AXYZD
-
-/a[bc]d/i
- ABD
-
-/a[b-d]e/i
- ACE
- *** Failers
- ABC
- ABD
-
-/a[b-d]/i
- AAC
-
-/a[-b]/i
- A-
-
-/a[b-]/i
- A-
-
-/a]/i
- A]
-
-/a[]]b/i
- A]B
-
-/a[^bc]d/i
- AED
-
-/a[^-b]c/i
- ADC
- *** Failers
- ABD
- A-C
-
-/a[^]b]c/i
- ADC
-
-/ab|cd/i
- ABC
- ABCD
-
-/()ef/i
- DEF
-
-/$b/i
- *** Failers
- A]C
- B
-
-/a\(b/i
- A(B
-
-/a\(*b/i
- AB
- A((B
-
-/a\\b/i
- A\B
-
-/((a))/i
- ABC
-
-/(a)b(c)/i
- ABC
-
-/a+b+c/i
- AABBABC
-
-/a{1,}b{1,}c/i
- AABBABC
-
-/a.+?c/i
- ABCABC
-
-/a.*?c/i
- ABCABC
-
-/a.{0,5}?c/i
- ABCABC
-
-/(a+|b)*/i
- AB
-
-/(a+|b){0,}/i
- AB
-
-/(a+|b)+/i
- AB
-
-/(a+|b){1,}/i
- AB
-
-/(a+|b)?/i
- AB
-
-/(a+|b){0,1}/i
- AB
-
-/(a+|b){0,1}?/i
- AB
-
-/[^ab]*/i
- CDE
-
-/abc/i
-
-/a*/i
-
-
-/([abc])*d/i
- ABBBCD
-
-/([abc])*bcd/i
- ABCD
-
-/a|b|c|d|e/i
- E
-
-/(a|b|c|d|e)f/i
- EF
-
-/abcd*efg/i
- ABCDEFG
-
-/ab*/i
- XABYABBBZ
- XAYABBBZ
-
-/(ab|cd)e/i
- ABCDE
-
-/[abhgefdc]ij/i
- HIJ
-
-/^(ab|cd)e/i
- ABCDE
-
-/(abc|)ef/i
- ABCDEF
-
-/(a|b)c*d/i
- ABCD
-
-/(ab|ab*)bc/i
- ABC
-
-/a([bc]*)c*/i
- ABC
-
-/a([bc]*)(c*d)/i
- ABCD
-
-/a([bc]+)(c*d)/i
- ABCD
-
-/a([bc]*)(c+d)/i
- ABCD
-
-/a[bcd]*dcdcde/i
- ADCDCDE
-
-/a[bcd]+dcdcde/i
-
-/(ab|a)b*c/i
- ABC
-
-/((a)(b)c)(d)/i
- ABCD
-
-/[a-zA-Z_][a-zA-Z0-9_]*/i
- ALPHA
-
-/^a(bc+|b[eh])g|.h$/i
- ABH
-
-/(bc+d$|ef*g.|h?i(j|k))/i
- EFFGZ
- IJ
- REFFGZ
- *** Failers
- ADCDCDE
- EFFG
- BCDD
-
-/((((((((((a))))))))))/i
- A
-
-/((((((((((a))))))))))\10/i
- AA
-
-/(((((((((a)))))))))/i
- A
-
-/(?:(?:(?:(?:(?:(?:(?:(?:(?:(a))))))))))/i
- A
-
-/(?:(?:(?:(?:(?:(?:(?:(?:(?:(a|b|c))))))))))/i
- C
-
-/multiple words of text/i
- *** Failers
- AA
- UH-UH
-
-/multiple words/i
- MULTIPLE WORDS, YEAH
-
-/(.*)c(.*)/i
- ABCDE
-
-/\((.*), (.*)\)/i
- (A, B)
-
-/[k]/i
-
-/abcd/i
- ABCD
-
-/a(bc)d/i
- ABCD
-
-/a[-]?c/i
- AC
-
-/(abc)\1/i
- ABCABC
-
-/([a-c]*)\1/i
- ABCABC
-
-/a(?!b)./
- abad
-
-/a(?=d)./
- abad
-
-/a(?=c|d)./
- abad
-
-/a(?:b|c|d)(.)/
- ace
-
-/a(?:b|c|d)*(.)/
- ace
-
-/a(?:b|c|d)+?(.)/
- ace
- acdbcdbe
-
-/a(?:b|c|d)+(.)/
- acdbcdbe
-
-/a(?:b|c|d){2}(.)/
- acdbcdbe
-
-/a(?:b|c|d){4,5}(.)/
- acdbcdbe
-
-/a(?:b|c|d){4,5}?(.)/
- acdbcdbe
-
-/((foo)|(bar))*/
- foobar
-
-/a(?:b|c|d){6,7}(.)/
- acdbcdbe
-
-/a(?:b|c|d){6,7}?(.)/
- acdbcdbe
-
-/a(?:b|c|d){5,6}(.)/
- acdbcdbe
-
-/a(?:b|c|d){5,6}?(.)/
- acdbcdbe
-
-/a(?:b|c|d){5,7}(.)/
- acdbcdbe
-
-/a(?:b|c|d){5,7}?(.)/
- acdbcdbe
-
-/a(?:b|(c|e){1,2}?|d)+?(.)/
- ace
-
-/^(.+)?B/
- AB
-
-/^([^a-z])|(\^)$/
- .
-
-/^[<>]&/
- <&OUT
-
-/^(a\1?){4}$/
- aaaaaaaaaa
- *** Failers
- AB
- aaaaaaaaa
- aaaaaaaaaaa
-
-/^(a(?(1)\1)){4}$/
- aaaaaaaaaa
- *** Failers
- aaaaaaaaa
- aaaaaaaaaaa
-
-/(?:(f)(o)(o)|(b)(a)(r))*/
- foobar
-
-/(?<=a)b/
- ab
- *** Failers
- cb
- b
-
-/(?<!c)b/
- ab
- b
- b
-
-/(?:..)*a/
- aba
-
-/(?:..)*?a/
- aba
-
-/^(?:b|a(?=(.)))*\1/
- abc
-
-/^(){3,5}/
- abc
-
-/^(a+)*ax/
- aax
-
-/^((a|b)+)*ax/
- aax
-
-/^((a|bc)+)*ax/
- aax
-
-/(a|x)*ab/
- cab
-
-/(a)*ab/
- cab
-
-/(?:(?i)a)b/
- ab
-
-/((?i)a)b/
- ab
-
-/(?:(?i)a)b/
- Ab
-
-/((?i)a)b/
- Ab
-
-/(?:(?i)a)b/
- *** Failers
- cb
- aB
-
-/((?i)a)b/
-
-/(?i:a)b/
- ab
-
-/((?i:a))b/
- ab
-
-/(?i:a)b/
- Ab
-
-/((?i:a))b/
- Ab
-
-/(?i:a)b/
- *** Failers
- aB
- aB
-
-/((?i:a))b/
-
-/(?:(?-i)a)b/i
- ab
-
-/((?-i)a)b/i
- ab
-
-/(?:(?-i)a)b/i
- aB
-
-/((?-i)a)b/i
- aB
-
-/(?:(?-i)a)b/i
- *** Failers
- aB
- Ab
-
-/((?-i)a)b/i
-
-/(?:(?-i)a)b/i
- aB
-
-/((?-i)a)b/i
- aB
-
-/(?:(?-i)a)b/i
- *** Failers
- Ab
- AB
-
-/((?-i)a)b/i
-
-/(?-i:a)b/i
- ab
-
-/((?-i:a))b/i
- ab
-
-/(?-i:a)b/i
- aB
-
-/((?-i:a))b/i
- aB
-
-/(?-i:a)b/i
- *** Failers
- AB
- Ab
-
-/((?-i:a))b/i
-
-/(?-i:a)b/i
- aB
-
-/((?-i:a))b/i
- aB
-
-/(?-i:a)b/i
- *** Failers
- Ab
- AB
-
-/((?-i:a))b/i
-
-/((?-i:a.))b/i
- *** Failers
- AB
- a\nB
-
-/((?s-i:a.))b/i
- a\nB
-
-/(?:c|d)(?:)(?:a(?:)(?:b)(?:b(?:))(?:b(?:)(?:b)))/
- cabbbb
-
-/(?:c|d)(?:)(?:aaaaaaaa(?:)(?:bbbbbbbb)(?:bbbbbbbb(?:))(?:bbbbbbbb(?:)(?:bbbbbbbb)))/
- caaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
-
-/(ab)\d\1/i
- Ab4ab
- ab4Ab
-
-/foo\w*\d{4}baz/
- foobar1234baz
-
-/x(~~)*(?:(?:F)?)?/
- x~~
-
-/^a(?#xxx){3}c/
- aaac
-
-/^a (?#xxx) (?#yyy) {3}c/x
- aaac
-
-/(?<![cd])b/
- *** Failers
- B\nB
- dbcb
-
-/(?<![cd])[ab]/
- dbaacb
-
-/(?<!(c|d))b/
-
-/(?<!(c|d))[ab]/
- dbaacb
-
-/(?<!cd)[ab]/
- cdaccb
-
-/^(?:a?b?)*$/
- *** Failers
- dbcb
- a--
-
-/((?s)^a(.))((?m)^b$)/
- a\nb\nc\n
-
-/((?m)^b$)/
- a\nb\nc\n
-
-/(?m)^b/
- a\nb\n
-
-/(?m)^(b)/
- a\nb\n
-
-/((?m)^b)/
- a\nb\n
-
-/\n((?m)^b)/
- a\nb\n
-
-/((?s).)c(?!.)/
- a\nb\nc\n
- a\nb\nc\n
-
-/((?s)b.)c(?!.)/
- a\nb\nc\n
- a\nb\nc\n
-
-/^b/
-
-/()^b/
- *** Failers
- a\nb\nc\n
- a\nb\nc\n
-
-/((?m)^b)/
- a\nb\nc\n
-
-/(?(1)a|b)/
-
-/(?(1)b|a)/
- a
-
-/(x)?(?(1)a|b)/
- *** Failers
- a
- a
-
-/(x)?(?(1)b|a)/
- a
-
-/()?(?(1)b|a)/
- a
-
-/()(?(1)b|a)/
-
-/()?(?(1)a|b)/
- a
-
-/^(\()?blah(?(1)(\)))$/
- (blah)
- blah
- *** Failers
- a
- blah)
- (blah
-
-/^(\(+)?blah(?(1)(\)))$/
- (blah)
- blah
- *** Failers
- blah)
- (blah
-
-/(?(?!a)a|b)/
-
-/(?(?!a)b|a)/
- a
-
-/(?(?=a)b|a)/
- *** Failers
- a
- a
-
-/(?(?=a)a|b)/
- a
-
-/(?=(a+?))(\1ab)/
- aaab
-
-/^(?=(a+?))\1ab/
-
-/(\w+:)+/
- one:
-
-/$(?<=^(a))/
- a
-
-/(?=(a+?))(\1ab)/
- aaab
-
-/^(?=(a+?))\1ab/
- *** Failers
- aaab
- aaab
-
-/([\w:]+::)?(\w+)$/
- abcd
- xy:z:::abcd
-
-/^[^bcd]*(c+)/
- aexycd
-
-/(a*)b+/
- caab
-
-/([\w:]+::)?(\w+)$/
- abcd
- xy:z:::abcd
- *** Failers
- abcd:
- abcd:
-
-/^[^bcd]*(c+)/
- aexycd
-
-/(>a+)ab/
-
-/(?>a+)b/
- aaab
-
-/([[:]+)/
- a:[b]:
-
-/([[=]+)/
- a=[b]=
-
-/([[.]+)/
- a.[b].
-
-/((?>a+)b)/
- aaab
-
-/(?>(a+))b/
- aaab
-
-/((?>[^()]+)|\([^()]*\))+/
- ((abc(ade)ufh()()x
-
-/a\Z/
- *** Failers
- aaab
- a\nb\n
-
-/b\Z/
- a\nb\n
-
-/b\z/
-
-/b\Z/
- a\nb
-
-/b\z/
- a\nb
- *** Failers
-
-/^(?>(?(1)\.|())[^\W_](?>[a-z0-9-]*[^\W_])?)+$/
- a
- abc
- a-b
- 0-9
- a.b
- 5.6.7
- the.quick.brown.fox
- a100.b200.300c
- 12-ab.1245
- ***Failers
- \
- .a
- -a
- a-
- a.
- a_b
- a.-
- a..
- ab..bc
- the.quick.brown.fox-
- the.quick.brown.fox.
- the.quick.brown.fox_
- the.quick.brown.fox+
-
-/(?>.*)(?<=(abcd|wxyz))/
- alphabetabcd
- endingwxyz
- *** Failers
- a rather long string that doesn't end with one of them
-
-/word (?>(?:(?!otherword)[a-zA-Z0-9]+ ){0,30})otherword/
- word cat dog elephant mussel cow horse canary baboon snake shark otherword
- word cat dog elephant mussel cow horse canary baboon snake shark
-
-/word (?>[a-zA-Z0-9]+ ){0,30}otherword/
- word cat dog elephant mussel cow horse canary baboon snake shark the quick brown fox and the lazy dog and several other words getting close to thirty by now I hope
-
-/(?<=\d{3}(?!999))foo/
- 999foo
- 123999foo
- *** Failers
- 123abcfoo
-
-/(?<=(?!...999)\d{3})foo/
- 999foo
- 123999foo
- *** Failers
- 123abcfoo
-
-/(?<=\d{3}(?!999)...)foo/
- 123abcfoo
- 123456foo
- *** Failers
- 123999foo
-
-/(?<=\d{3}...)(?<!999)foo/
- 123abcfoo
- 123456foo
- *** Failers
- 123999foo
-
-/<a[\s]+href[\s]*=[\s]* # find <a href=
- ([\"\'])? # find single or double quote
- (?(1) (.*?)\1 | ([^\s]+)) # if quote found, match up to next matching
- # quote, otherwise match up to next space
-/isx
- <a href=abcd xyz
- <a href=\"abcd xyz pqr\" cats
- <a href=\'abcd xyz pqr\' cats
-
-/<a\s+href\s*=\s* # find <a href=
- (["'])? # find single or double quote
- (?(1) (.*?)\1 | (\S+)) # if quote found, match up to next matching
- # quote, otherwise match up to next space
-/isx
- <a href=abcd xyz
- <a href=\"abcd xyz pqr\" cats
- <a href = \'abcd xyz pqr\' cats
-
-/<a\s+href(?>\s*)=(?>\s*) # find <a href=
- (["'])? # find single or double quote
- (?(1) (.*?)\1 | (\S+)) # if quote found, match up to next matching
- # quote, otherwise match up to next space
-/isx
- <a href=abcd xyz
- <a href=\"abcd xyz pqr\" cats
- <a href = \'abcd xyz pqr\' cats
-
-/((Z)+|A)*/
- ZABCDEFG
-
-/(Z()|A)*/
- ZABCDEFG
-
-/(Z(())|A)*/
- ZABCDEFG
-
-/((?>Z)+|A)*/
- ZABCDEFG
-
-/((?>)+|A)*/
- ZABCDEFG
-
-/a*/g
- abbab
-
-/^[a-\d]/
- abcde
- -things
- 0digit
- *** Failers
- bcdef
-
-/^[\d-a]/
- abcde
- -things
- 0digit
- *** Failers
- bcdef
-
-/[[:space:]]+/
- > \x09\x0a\x0c\x0d\x0b<
-
-/[[:blank:]]+/
- > \x09\x0a\x0c\x0d\x0b<
-
-/[\s]+/
- > \x09\x0a\x0c\x0d\x0b<
-
-/\s+/
- > \x09\x0a\x0c\x0d\x0b<
-
-/a b/x
- ab
-
-/(?!\A)x/m
- a\nxb\n
-
-/(?!^)x/m
- a\nxb\n
-
-/abc\Qabc\Eabc/
- abcabcabc
-
-/abc\Q(*+|\Eabc/
- abc(*+|abc
-
-/ abc\Q abc\Eabc/x
- abc abcabc
- *** Failers
- abcabcabc
-
-/abc#comment
- \Q#not comment
- literal\E/x
- abc#not comment\n literal
-
-/abc#comment
- \Q#not comment
- literal/x
- abc#not comment\n literal
-
-/abc#comment
- \Q#not comment
- literal\E #more comment
- /x
- abc#not comment\n literal
-
-/abc#comment
- \Q#not comment
- literal\E #more comment/x
- abc#not comment\n literal
-
-/\Qabc\$xyz\E/
- abc\\\$xyz
-
-/\Qabc\E\$\Qxyz\E/
- abc\$xyz
-
-/\Gabc/
- abc
- *** Failers
- xyzabc
-
-/\Gabc./g
- abc1abc2xyzabc3
-
-/abc./g
- abc1abc2xyzabc3
-
-/a(?x: b c )d/
- XabcdY
- *** Failers
- Xa b c d Y
-
-/((?x)x y z | a b c)/
- XabcY
- AxyzB
-
-/(?i)AB(?-i)C/
- XabCY
- *** Failers
- XabcY
-
-/((?i)AB(?-i)C|D)E/
- abCE
- DE
- *** Failers
- abcE
- abCe
- dE
- De
-
-/(.*)\d+\1/
- abc123abc
- abc123bc
-
-/(.*)\d+\1/s
- abc123abc
- abc123bc
-
-/((.*))\d+\1/
- abc123abc
- abc123bc
-
-/-- This tests for an IPv6 address in the form where it can have up to --/
-/-- eight components, one and only one of which is empty. This must be --/
-/-- an internal component. --/
-
-/^(?!:) # colon disallowed at start
- (?: # start of item
- (?: [0-9a-f]{1,4} | # 1-4 hex digits or
- (?(1)0 | () ) ) # if null previously matched, fail; else null
- : # followed by colon
- ){1,7} # end item; 1-7 of them required
- [0-9a-f]{1,4} $ # final hex number at end of string
- (?(1)|.) # check that there was an empty component
- /xi
- a123::a123
- a123:b342::abcd
- a123:b342::324e:abcd
- a123:ddde:b342::324e:abcd
- a123:ddde:b342::324e:dcba:abcd
- a123:ddde:9999:b342::324e:dcba:abcd
- *** Failers
- 1:2:3:4:5:6:7:8
- a123:bce:ddde:9999:b342::324e:dcba:abcd
- a123::9999:b342::324e:dcba:abcd
- abcde:2:3:4:5:6:7:8
- ::1
- abcd:fee0:123::
- :1
- 1:
-
-/ End of testinput1 /
diff --git a/ext/pcre/pcrelib/testdata/testinput2 b/ext/pcre/pcrelib/testdata/testinput2
deleted file mode 100644
index 2dd498a713..0000000000
--- a/ext/pcre/pcrelib/testdata/testinput2
+++ /dev/null
@@ -1,1162 +0,0 @@
-/(a)b|/
-
-/abc/
- abc
- defabc
- \Aabc
- *** Failers
- \Adefabc
- ABC
-
-/^abc/
- abc
- \Aabc
- *** Failers
- defabc
- \Adefabc
-
-/a+bc/
-
-/a*bc/
-
-/a{3}bc/
-
-/(abc|a+z)/
-
-/^abc$/
- abc
- *** Failers
- def\nabc
-
-/ab\gdef/X
-
-/(?X)ab\gdef/X
-
-/x{5,4}/
-
-/z{65536}/
-
-/[abcd/
-
-/[\B]/
-
-/[z-a]/
-
-/^*/
-
-/(abc/
-
-/(?# abc/
-
-/(?z)abc/
-
-/.*b/
-
-/.*?b/
-
-/cat|dog|elephant/
- this sentence eventually mentions a cat
- this sentences rambles on and on for a while and then reaches elephant
-
-/cat|dog|elephant/S
- this sentence eventually mentions a cat
- this sentences rambles on and on for a while and then reaches elephant
-
-/cat|dog|elephant/iS
- this sentence eventually mentions a CAT cat
- this sentences rambles on and on for a while to elephant ElePhant
-
-/a|[bcd]/S
-
-/(a|[^\dZ])/S
-
-/(a|b)*[\s]/S
-
-/(ab\2)/
-
-/{4,5}abc/
-
-/(a)(b)(c)\2/
- abcb
- \O0abcb
- \O3abcb
- \O6abcb
- \O9abcb
- \O12abcb
-
-/(a)bc|(a)(b)\2/
- abc
- \O0abc
- \O3abc
- \O6abc
- aba
- \O0aba
- \O3aba
- \O6aba
- \O9aba
- \O12aba
-
-/abc$/E
- abc
- *** Failers
- abc\n
- abc\ndef
-
-/(a)(b)(c)(d)(e)\6/
-
-/the quick brown fox/
- the quick brown fox
- this is a line with the quick brown fox
-
-/the quick brown fox/A
- the quick brown fox
- *** Failers
- this is a line with the quick brown fox
-
-/ab(?z)cd/
-
-/^abc|def/
- abcdef
- abcdef\B
-
-/.*((abc)$|(def))/
- defabc
- \Zdefabc
-
-/abc/P
- abc
- *** Failers
-
-/^abc|def/P
- abcdef
- abcdef\B
-
-/.*((abc)$|(def))/P
- defabc
- \Zdefabc
-
-/the quick brown fox/P
- the quick brown fox
- *** Failers
- The Quick Brown Fox
-
-/the quick brown fox/Pi
- the quick brown fox
- The Quick Brown Fox
-
-/abc.def/P
- *** Failers
- abc\ndef
-
-/abc$/P
- abc
- abc\n
-
-/(abc)\2/P
-
-/(abc\1)/P
- abc
-
-/)/
-
-/a[]b/
-
-/[^aeiou ]{3,}/
- co-processors, and for
-
-/<.*>/
- abc<def>ghi<klm>nop
-
-/<.*?>/
- abc<def>ghi<klm>nop
-
-/<.*>/U
- abc<def>ghi<klm>nop
-
-/(?U)<.*>/
- abc<def>ghi<klm>nop
-
-/<.*?>/U
- abc<def>ghi<klm>nop
-
-/={3,}/U
- abc========def
-
-/(?U)={3,}?/
- abc========def
-
-/(?<!bar|cattle)foo/
- foo
- catfoo
- *** Failers
- the barfoo
- and cattlefoo
-
-/(?<=a+)b/
-
-/(?<=aaa|b{0,3})b/
-
-/(?<!(foo)a\1)bar/
-
-/(?i)abc/
-
-/(a|(?m)a)/
-
-/(?i)^1234/
-
-/(^b|(?i)^d)/
-
-/(?s).*/
-
-/[abcd]/S
-
-/(?i)[abcd]/S
-
-/(?m)[xy]|(b|c)/S
-
-/(^a|^b)/m
-
-/(?i)(^a|^b)/m
-
-/(a)(?(1)a|b|c)/
-
-/(?(?=a)a|b|c)/
-
-/(?(1a)/
-
-/(?(?i))/
-
-/(?(abc))/
-
-/(?(?<ab))/
-
-/((?s)blah)\s+\1/
-
-/((?i)blah)\s+\1/
-
-/((?i)b)/DS
-
-/(a*b|(?i:c*(?-i)d))/S
-
-/a$/
- a
- a\n
- *** Failers
- \Za
- \Za\n
-
-/a$/m
- a
- a\n
- \Za\n
- *** Failers
- \Za
-
-/\Aabc/m
-
-/^abc/m
-
-/^((a+)(?U)([ab]+)(?-U)([bc]+)(\w*))/
- aaaaabbbbbcccccdef
-
-/(?<=foo)[ab]/S
-
-/(?<!foo)(alpha|omega)/S
-
-/(?!alphabet)[ab]/S
-
-/(?<=foo\n)^bar/m
-
-/(?>^abc)/m
- abc
- def\nabc
- *** Failers
- defabc
-
-/(?<=ab(c+)d)ef/
-
-/(?<=ab(?<=c+)d)ef/
-
-/(?<=ab(c|de)f)g/
-
-/The next three are in testinput2 because they have variable length branches/
-
-/(?<=bullock|donkey)-cart/
- the bullock-cart
- a donkey-cart race
- *** Failers
- cart
- horse-and-cart
-
-/(?<=ab(?i)x|y|z)/
-
-/(?>.*)(?<=(abcd)|(xyz))/
- alphabetabcd
- endingxyz
-
-/(?<=ab(?i)x(?-i)y|(?i)z|b)ZZ/
- abxyZZ
- abXyZZ
- ZZZ
- zZZ
- bZZ
- BZZ
- *** Failers
- ZZ
- abXYZZ
- zzz
- bzz
-
-/(?<!(foo)a)bar/
- bar
- foobbar
- *** Failers
- fooabar
-
-/This one is here because Perl 5.005_02 doesn't fail it/
-
-/^(a)?(?(1)a|b)+$/
- *** Failers
- a
-
-/This one is here because I think Perl 5.005_02 gets the setting of $1 wrong/
-
-/^(a\1?){4}$/
- aaaaaa
-
-/These are syntax tests from Perl 5.005/
-
-/a[b-a]/
-
-/a[]b/
-
-/a[/
-
-/*a/
-
-/(*)b/
-
-/abc)/
-
-/(abc/
-
-/a**/
-
-/)(/
-
-/\1/
-
-/\2/
-
-/(a)|\2/
-
-/a[b-a]/i
-
-/a[]b/i
-
-/a[/i
-
-/*a/i
-
-/(*)b/i
-
-/abc)/i
-
-/(abc/i
-
-/a**/i
-
-/)(/i
-
-/:(?:/
-
-/(?<%)b/
-
-/a(?{)b/
-
-/a(?{{})b/
-
-/a(?{}})b/
-
-/a(?{"{"})b/
-
-/a(?{"{"}})b/
-
-/(?(1?)a|b)/
-
-/(?(1)a|b|c)/
-
-/[a[:xyz:/
-
-/(?<=x+)y/
-
-/a{37,17}/
-
-/abc/\
-
-/abc/\P
-
-/abc/\i
-
-/(a)bc(d)/
- abcd
- abcd\C2
- abcd\C5
-
-/(.{20})/
- abcdefghijklmnopqrstuvwxyz
- abcdefghijklmnopqrstuvwxyz\C1
- abcdefghijklmnopqrstuvwxyz\G1
-
-/(.{15})/
- abcdefghijklmnopqrstuvwxyz
- abcdefghijklmnopqrstuvwxyz\C1\G1
-
-/(.{16})/
- abcdefghijklmnopqrstuvwxyz
- abcdefghijklmnopqrstuvwxyz\C1\G1\L
-
-/^(a|(bc))de(f)/
- adef\G1\G2\G3\G4\L
- bcdef\G1\G2\G3\G4\L
- adefghijk\C0
-
-/^abc\00def/
- abc\00def\L\C0
-
-/word ((?:[a-zA-Z0-9]+ )((?:[a-zA-Z0-9]+ )((?:[a-zA-Z0-9]+ )((?:[a-zA-Z0-9]+
-)((?:[a-zA-Z0-9]+ )((?:[a-zA-Z0-9]+ )((?:[a-zA-Z0-9]+ )((?:[a-zA-Z0-9]+
-)?)?)?)?)?)?)?)?)?otherword/M
-
-/.*X/D
-
-/.*X/Ds
-
-/(.*X|^B)/D
-
-/(.*X|^B)/Ds
-
-/(?s)(.*X|^B)/D
-
-/(?s:.*X|^B)/D
-
-/\Biss\B/+
- Mississippi
-
-/\Biss\B/+P
- Mississippi
-
-/iss/G+
- Mississippi
-
-/\Biss\B/G+
- Mississippi
-
-/\Biss\B/g+
- Mississippi
- *** Failers
- Mississippi\A
-
-/(?<=[Ms])iss/g+
- Mississippi
-
-/(?<=[Ms])iss/G+
- Mississippi
-
-/^iss/g+
- ississippi
-
-/.*iss/g+
- abciss\nxyzisspqr
-
-/.i./+g
- Mississippi
- Mississippi\A
- Missouri river
- Missouri river\A
-
-/^.is/+g
- Mississippi
-
-/^ab\n/g+
- ab\nab\ncd
-
-/^ab\n/mg+
- ab\nab\ncd
-
-/abc/
-
-/abc|bac/
-
-/(abc|bac)/
-
-/(abc|(c|dc))/
-
-/(abc|(d|de)c)/
-
-/a*/
-
-/a+/
-
-/(baa|a+)/
-
-/a{0,3}/
-
-/baa{3,}/
-
-/"([^\\"]+|\\.)*"/
-
-/(abc|ab[cd])/
-
-/(a|.)/
-
-/a|ba|\w/
-
-/abc(?=pqr)/
-
-/...(?<=abc)/
-
-/abc(?!pqr)/
-
-/ab./
-
-/ab[xyz]/
-
-/abc*/
-
-/ab.c*/
-
-/a.c*/
-
-/.c*/
-
-/ac*/
-
-/(a.c*|b.c*)/
-
-/a.c*|aba/
-
-/.+a/
-
-/(?=abcda)a.*/
-
-/(?=a)a.*/
-
-/a(b)*/
-
-/a\d*/
-
-/ab\d*/
-
-/a(\d)*/
-
-/abcde{0,0}/
-
-/ab\d+/
-
-/a(?(1)b)/
-
-/a(?(1)bag|big)/
-
-/a(?(1)bag|big)*/
-
-/a(?(1)bag|big)+/
-
-/a(?(1)b..|b..)/
-
-/ab\d{0}e/
-
-/a?b?/
- a
- b
- ab
- \
- *** Failers
- \N
-
-/|-/
- abcd
- -abc
- \Nab-c
- *** Failers
- \Nabc
-
-/a*(b+)(z)(z)/P
- aaaabbbbzzzz
- aaaabbbbzzzz\O0
- aaaabbbbzzzz\O1
- aaaabbbbzzzz\O2
- aaaabbbbzzzz\O3
- aaaabbbbzzzz\O4
- aaaabbbbzzzz\O5
-
-/^.?abcd/S
-
-/\( # ( at start
- (?: # Non-capturing bracket
- (?>[^()]+) # Either a sequence of non-brackets (no backtracking)
- | # Or
- (?R) # Recurse - i.e. nested bracketed string
- )* # Zero or more contents
- \) # Closing )
- /x
- (abcd)
- (abcd)xyz
- xyz(abcd)
- (ab(xy)cd)pqr
- (ab(xycd)pqr
- () abc ()
- 12(abcde(fsh)xyz(foo(bar))lmno)89
- *** Failers
- abcd
- abcd)
- (abcd
-
-/\( ( (?>[^()]+) | (?R) )* \) /xg
- (ab(xy)cd)pqr
- 1(abcd)(x(y)z)pqr
-
-/\( (?: (?>[^()]+) | (?R) ) \) /x
- (abcd)
- (ab(xy)cd)
- (a(b(c)d)e)
- ((ab))
- *** Failers
- ()
-
-/\( (?: (?>[^()]+) | (?R) )? \) /x
- ()
- 12(abcde(fsh)xyz(foo(bar))lmno)89
-
-/\( ( (?>[^()]+) | (?R) )* \) /x
- (ab(xy)cd)
-
-/\( ( ( (?>[^()]+) | (?R) )* ) \) /x
- (ab(xy)cd)
-
-/\( (123)? ( ( (?>[^()]+) | (?R) )* ) \) /x
- (ab(xy)cd)
- (123ab(xy)cd)
-
-/\( ( (123)? ( (?>[^()]+) | (?R) )* ) \) /x
- (ab(xy)cd)
- (123ab(xy)cd)
-
-/\( (((((((((( ( (?>[^()]+) | (?R) )* )))))))))) \) /x
- (ab(xy)cd)
-
-/\( ( ( (?>[^()<>]+) | ((?>[^()]+)) | (?R) )* ) \) /x
- (abcd(xyz<p>qrs)123)
-
-/\( ( ( (?>[^()]+) | ((?R)) )* ) \) /x
- (ab(cd)ef)
- (ab(cd(ef)gh)ij)
-
-/^[[:alnum:]]/D
-
-/^[[:alpha:]]/D
-
-/^[[:ascii:]]/D
-
-/^[[:blank:]]/D
-
-/^[[:cntrl:]]/D
-
-/^[[:digit:]]/D
-
-/^[[:graph:]]/D
-
-/^[[:lower:]]/D
-
-/^[[:print:]]/D
-
-/^[[:punct:]]/D
-
-/^[[:space:]]/D
-
-/^[[:upper:]]/D
-
-/^[[:xdigit:]]/D
-
-/^[[:word:]]/D
-
-/^[[:^cntrl:]]/D
-
-/^[12[:^digit:]]/D
-
-/^[[:^blank:]]/D
-
-/[01[:alpha:]%]/D
-
-/[[.ch.]]/
-
-/[[=ch=]]/
-
-/[[:rhubarb:]]/
-
-/[[:upper:]]/i
- A
- a
-
-/[[:lower:]]/i
- A
- a
-
-/((?-i)[[:lower:]])[[:lower:]]/i
- ab
- aB
- *** Failers
- Ab
- AB
-
-/[\200-\410]/
-
-/^(?(0)f|b)oo/
-
-/This one's here because of the large output vector needed/
-
-/(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\w+)\s+(\270)/
- \O900 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 ABC ABC
-
-/This one's here because Perl does this differently and PCRE can't at present/
-
-/(main(O)?)+/
- mainmain
- mainOmain
-
-/These are all cases where Perl does it differently (nested captures)/
-
-/^(a(b)?)+$/
- aba
-
-/^(aa(bb)?)+$/
- aabbaa
-
-/^(aa|aa(bb))+$/
- aabbaa
-
-/^(aa(bb)??)+$/
- aabbaa
-
-/^(?:aa(bb)?)+$/
- aabbaa
-
-/^(aa(b(b))?)+$/
- aabbaa
-
-/^(?:aa(b(b))?)+$/
- aabbaa
-
-/^(?:aa(b(?:b))?)+$/
- aabbaa
-
-/^(?:aa(bb(?:b))?)+$/
- aabbbaa
-
-/^(?:aa(b(?:bb))?)+$/
- aabbbaa
-
-/^(?:aa(?:b(b))?)+$/
- aabbaa
-
-/^(?:aa(?:b(bb))?)+$/
- aabbbaa
-
-/^(aa(b(bb))?)+$/
- aabbbaa
-
-/^(aa(bb(bb))?)+$/
- aabbbbaa
-
-/--------------------------------------------------------------------/
-
-/#/xMD
-
-/a#/xMD
-
-/[\s]/D
-
-/[\S]/D
-
-/a(?i)b/D
- ab
- aB
- *** Failers
- AB
-
-/(a(?i)b)/D
- ab
- aB
- *** Failers
- AB
-
-/ (?i)abc/xD
-
-/#this is a comment
- (?i)abc/xD
-
-/123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890/D
-
-/\Q123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890/D
-
-/\Q\E/D
- \
-
-/\Q\Ex/D
-
-/ \Q\E/D
-
-/a\Q\E/D
- abc
- bca
- bac
-
-/a\Q\Eb/D
- abc
-
-/\Q\Eabc/D
-
-/x*+\w/D
- ****Failers
- xxxxx
-
-/x?+/D
-
-/x++/D
-
-/x{1,3}+/D
-
-/(x)*+/D
-
-/^(\w++|\s++)*$/
- now is the time for all good men to come to the aid of the party
- *** Failers
- this is not a line with only words and spaces!
-
-/(\d++)(\w)/
- 12345a
- *** Failers
- 12345+
-
-/a++b/
- aaab
-
-/(a++b)/
- aaab
-
-/(a++)b/
- aaab
-
-/([^()]++|\([^()]*\))+/
- ((abc(ade)ufh()()x
-
-/\(([^()]++|\([^()]+\))+\)/
- (abc)
- (abc(def)xyz)
- *** Failers
- ((()aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-
-/(abc){1,3}+/D
-
-/a+?+/
-
-/a{2,3}?+b/
-
-/(?U)a+?+/
-
-/a{2,3}?+b/U
-
-/x(?U)a++b/D
- xaaaab
-
-/(?U)xa++b/D
- xaaaab
-
-/^((a+)(?U)([ab]+)(?-U)([bc]+)(\w*))/D
-
-/^x(?U)a+b/D
-
-/^x(?U)(a+)b/D
-
-/[.x.]/
-
-/[=x=]/
-
-/[:x:]/
-
-/\l/
-
-/\L/
-
-/\N{name}/
-
-/\pP/
-
-/\PP/
-
-/\p{prop}/
-
-/\P{prop}/
-
-/\u/
-
-/\U/
-
-/\X/
-
-/[/
-
-/[a-/
-
-/[[:space:]/
-
-/[\s]/DM
-
-/[[:space:]]/DM
-
-/[[:space:]abcde]/DM
-
-/< (?: (?(R) \d++ | [^<>]*+) | (?R)) * >/x
- <>
- <abcd>
- <abc <123> hij>
- <abc <def> hij>
- <abc<>def>
- <abc<>
- *** Failers
- <abc
-
-|8J\$WE\<\.rX\+ix\[d1b\!H\#\?vV0vrK\:ZH1\=2M\>iV\;\?aPhFB\<\*vW\@QW\@sO9\}cfZA\-i\'w\%hKd6gt1UJP\,15_\#QY\$M\^Mss_U\/\]\&LK9\[5vQub\^w\[KDD\<EjmhUZ\?\.akp2dF\>qmj\;2\}YWFdYx\.Ap\]hjCPTP\(n28k\+3\;o\&WXqs\/gOXdr\$\:r\'do0\;b4c\(f_Gr\=\"\\4\)\[01T7ajQJvL\$W\~mL_sS\/4h\:x\*\[ZN\=KLs\&L5zX\/\/\>it\,o\:aU\(\;Z\>pW\&T7oP\'2K\^E\:x9\'c\[\%z\-\,64JQ5AeH_G\#KijUKghQw\^\\vea3a\?kka_G\$8\#\`\*kynsxzBLru\'\]k_\[7FrVx\}\^\=\$blx\>s\-N\%j\;D\*aZDnsw\:YKZ\%Q\.Kne9\#hP\?\+b3\(SOvL\,\^\;\&u5\@\?5C5Bhb\=m\-vEh_L15Jl\]U\)0RP6\{q\%L\^_z5E\'Dw6X\b|DM
-
-|\$\<\.X\+ix\[d1b\!H\#\?vV0vrK\:ZH1\=2M\>iV\;\?aPhFB\<\*vW\@QW\@sO9\}cfZA\-i\'w\%hKd6gt1UJP\,15_\#QY\$M\^Mss_U\/\]\&LK9\[5vQub\^w\[KDD\<EjmhUZ\?\.akp2dF\>qmj\;2\}YWFdYx\.Ap\]hjCPTP\(n28k\+3\;o\&WXqs\/gOXdr\$\:r\'do0\;b4c\(f_Gr\=\"\\4\)\[01T7ajQJvL\$W\~mL_sS\/4h\:x\*\[ZN\=KLs\&L5zX\/\/\>it\,o\:aU\(\;Z\>pW\&T7oP\'2K\^E\:x9\'c\[\%z\-\,64JQ5AeH_G\#KijUKghQw\^\\vea3a\?kka_G\$8\#\`\*kynsxzBLru\'\]k_\[7FrVx\}\^\=\$blx\>s\-N\%j\;D\*aZDnsw\:YKZ\%Q\.Kne9\#hP\?\+b3\(SOvL\,\^\;\&u5\@\?5C5Bhb\=m\-vEh_L15Jl\]U\)0RP6\{q\%L\^_z5E\'Dw6X\b|DM
-
-/(.*)\d+\1/I
-
-/(.*)\d+/I
-
-/(.*)\d+\1/Is
-
-/(.*)\d+/Is
-
-/(.*(xyz))\d+\2/I
-
-/((.*))\d+\1/I
- abc123bc
-
-/a[b]/I
-
-/(?=a).*/I
-
-/(?=abc).xyz/iI
-
-/(?=abc)(?i).xyz/I
-
-/(?=a)(?=b)/I
-
-/(?=.)a/I
-
-/((?=abcda)a)/I
-
-/((?=abcda)ab)/I
-
-/()a/I
-
-/(?(1)ab|ac)/I
-
-/(?(1)abz|acz)/I
-
-/(?(1)abz)/I
-
-/(?(1)abz)123/I
-
-/(a)+/I
-
-/(a){2,3}/I
-
-/(a)*/I
-
-/[a]/I
-
-/[ab]/I
-
-/[ab]/IS
-
-/[^a]/I
-
-/\d456/I
-
-/\d456/IS
-
-/a^b/I
-
-/^a/mI
- abcde
- xy\nabc
- *** Failers
- xyabc
-
-/c|abc/I
-
-/(?i)[ab]/IS
-
-/[ab](?i)cd/IS
-
-/abc(?C)def/
- abcdef
- 1234abcdef
- *** Failers
- abcxyz
- abcxyzf
-
-/abc(?C)de(?C1)f/
- 123abcdef
-
-/(?C1)\dabc(?C2)def/
- 1234abcdef
- *** Failers
- abcdef
-
-/(?C255)ab/
-
-/(?C256)ab/
-
-/(?Cab)xx/
-
-/(?C12vr)x/
-
-/abc(?C)def/
- *** Failers
- \x83\x0\x61bcdef
-
-/(abc)(?C)de(?C1)f/
- 123abcdef
- 123abcdef\C+
- 123abcdef\C-
- *** Failers
- 123abcdef\C!1
-
-/(?C0)(abc(?C1))*/
- abcabcabc
- abcabc\C!1!3
- *** Failers
- abcabcabc\C!1!3
-
-/(\d{3}(?C))*/
- 123\C+
- 123456\C+
- 123456789\C+
-
-/((xyz)(?C)p|(?C1)xyzabc)/
- xyzabc\C+
-
-/(X)((xyz)(?C)p|(?C1)xyzabc)/
- Xxyzabc\C+
-
-/(?=(abc))(?C)abcdef/
- abcdef\C+
-
-/(?!(abc)(?C1)d)(?C2)abcxyz/
- abcxyz\C+
-
-/(?<=(abc)(?C))xyz/
- abcxyz\C+
-
-/(?C)abc/
-
-/(?C)^abc/
-
-/(?C)a|b/S
-
-/(?R)/
-
-/(a|(?R))/
-
-/(ab|(bc|(de|(?R))))/
-
-/x(ab|(bc|(de|(?R))))/
- xab
- xbc
- xde
- xxab
- xxxab
- *** Failers
- xyab
-
-/(ab|(bc|(de|(?1))))/
-
-/x(ab|(bc|(de|(?1)x)x)x)/
-
-/^([^()]|\((?1)*\))*$/
- abc
- a(b)c
- a(b(c))d
- *** Failers)
- a(b(c)d
-
-/^>abc>([^()]|\((?1)*\))*<xyz<$/
- >abc>123<xyz<
- >abc>1(2)3<xyz<
- >abc>(1(2)3)<xyz<
-
-/(a(?1)b)/D
-
-/(a(?1)+b)/D
-
-/^\W*(?:((.)\W*(?1)\W*\2|)|((.)\W*(?3)\W*\4|\W*.\W*))\W*$/i
- 1221
- Satan, oscillate my metallic sonatas!
- A man, a plan, a canal: Panama!
- Able was I ere I saw Elba.
- *** Failers
- The quick brown fox
-
-/^(\d+|\((?1)([+*-])(?1)\)|-(?1))$/
- 12
- (((2+2)*-3)-7)
- -12
- *** Failers
- ((2+2)*-3)-7)
-
-/^(x(y|(?1){2})z)/
- xyz
- xxyzxyzz
- *** Failers
- xxyzz
- xxyzxyzxyzz
-
-/((< (?: (?(R) \d++ | [^<>]*+) | (?2)) * >))/x
- <>
- <abcd>
- <abc <123> hij>
- <abc <def> hij>
- <abc<>def>
- <abc<>
- *** Failers
- <abc
-
-/(?1)/
-
-/((?2)(abc)/
-
-/^(abc)def(?1)/
- abcdefabc
-
-/^(a|b|c)=(?1)+/
- a=a
- a=b
- a=bc
-
-/^(a|b|c)=((?1))+/
- a=a
- a=b
- a=bc
-
-/a(?P<name1>b|c)d(?P<longername2>e)/D
- abde
- acde
-
-/(?:a(?P<c>c(?P<d>d)))(?P<a>a)/D
-
-/(?P<a>a)...(?P=a)bbb(?P>a)d/D
-
-/ End of testinput2 /
diff --git a/ext/pcre/pcrelib/testdata/testinput3 b/ext/pcre/pcrelib/testdata/testinput3
deleted file mode 100644
index 391aa62069..0000000000
--- a/ext/pcre/pcrelib/testdata/testinput3
+++ /dev/null
@@ -1,65 +0,0 @@
-/^[\w]+/
- *** Failers
- École
-
-/^[\w]+/Lfr
- École
-
-/^[\w]+/
- *** Failers
- École
-
-/^[\W]+/
- École
-
-/^[\W]+/Lfr
- *** Failers
- École
-
-/[\b]/
- \b
- *** Failers
- a
-
-/[\b]/Lfr
- \b
- *** Failers
- a
-
-/^\w+/
- *** Failers
- École
-
-/^\w+/Lfr
- École
-
-/(.+)\b(.+)/
- École
-
-/(.+)\b(.+)/Lfr
- *** Failers
- École
-
-/École/i
- École
- *** Failers
- école
-
-/École/iLfr
- École
- école
-
-/\w/IS
-
-/\w/ISLfr
-
-/^[\xc8-\xc9]/iLfr
- École
- école
-
-/^[\xc8-\xc9]/Lfr
- École
- *** Failers
- école
-
-/ End of testinput3 /
diff --git a/ext/pcre/pcrelib/testdata/testinput4 b/ext/pcre/pcrelib/testdata/testinput4
deleted file mode 100644
index 51d6b97632..0000000000
--- a/ext/pcre/pcrelib/testdata/testinput4
+++ /dev/null
@@ -1,155 +0,0 @@
-/-- Do not use the \x{} construct except with patterns that have the --/
-/-- /8 option set, because PCRE doesn't recognize them as UTF-8 unless --/
-/-- that option is set. However, the latest Perls recognize them always. --/
-
-/a.b/8
- acb
- a\x7fb
- a\x{100}b
- *** Failers
- a\nb
-
-/a(.{3})b/8
- a\x{4000}xyb
- a\x{4000}\x7fyb
- a\x{4000}\x{100}yb
- *** Failers
- a\x{4000}b
- ac\ncb
-
-/a(.*?)(.)/
- a\xc0\x88b
-
-/a(.*?)(.)/8
- a\x{100}b
-
-/a(.*)(.)/
- a\xc0\x88b
-
-/a(.*)(.)/8
- a\x{100}b
-
-/a(.)(.)/
- a\xc0\x92bcd
-
-/a(.)(.)/8
- a\x{240}bcd
-
-/a(.?)(.)/
- a\xc0\x92bcd
-
-/a(.?)(.)/8
- a\x{240}bcd
-
-/a(.??)(.)/
- a\xc0\x92bcd
-
-/a(.??)(.)/8
- a\x{240}bcd
-
-/a(.{3})b/8
- a\x{1234}xyb
- a\x{1234}\x{4321}yb
- a\x{1234}\x{4321}\x{3412}b
- *** Failers
- a\x{1234}b
- ac\ncb
-
-/a(.{3,})b/8
- a\x{1234}xyb
- a\x{1234}\x{4321}yb
- a\x{1234}\x{4321}\x{3412}b
- axxxxbcdefghijb
- a\x{1234}\x{4321}\x{3412}\x{3421}b
- *** Failers
- a\x{1234}b
-
-/a(.{3,}?)b/8
- a\x{1234}xyb
- a\x{1234}\x{4321}yb
- a\x{1234}\x{4321}\x{3412}b
- axxxxbcdefghijb
- a\x{1234}\x{4321}\x{3412}\x{3421}b
- *** Failers
- a\x{1234}b
-
-/a(.{3,5})b/8
- a\x{1234}xyb
- a\x{1234}\x{4321}yb
- a\x{1234}\x{4321}\x{3412}b
- axxxxbcdefghijb
- a\x{1234}\x{4321}\x{3412}\x{3421}b
- axbxxbcdefghijb
- axxxxxbcdefghijb
- *** Failers
- a\x{1234}b
- axxxxxxbcdefghijb
-
-/a(.{3,5}?)b/8
- a\x{1234}xyb
- a\x{1234}\x{4321}yb
- a\x{1234}\x{4321}\x{3412}b
- axxxxbcdefghijb
- a\x{1234}\x{4321}\x{3412}\x{3421}b
- axbxxbcdefghijb
- axxxxxbcdefghijb
- *** Failers
- a\x{1234}b
- axxxxxxbcdefghijb
-
-/^[a\x{c0}]/8
- *** Failers
- \x{100}
-
-/(?<=aXb)cd/8
- aXbcd
-
-/(?<=a\x{100}b)cd/8
- a\x{100}bcd
-
-/(?<=a\x{100000}b)cd/8
- a\x{100000}bcd
-
-/(?:\x{100}){3}b/8
- \x{100}\x{100}\x{100}b
- *** Failers
- \x{100}\x{100}b
-
-/\x{ab}/8
- \x{ab}
- \xc2\xab
- *** Failers
- \x00{ab}
-
-/(?<=(.))X/8
- WXYZ
- \x{256}XYZ
- *** Failers
- XYZ
-
-/X(\C{3})/8
- X\x{1234}
-
-/X(\C{4})/8
- X\x{1234}YZ
-
-/X\C*/8
- XYZabcdce
-
-/X\C*?/8
- XYZabcde
-
-/X\C{3,5}/8
- Xabcdefg
- X\x{1234}
- X\x{1234}YZ
- X\x{1234}\x{512}
- X\x{1234}\x{512}YZ
-
-/X\C{3,5}?/8
- Xabcdefg
- X\x{1234}
- X\x{1234}YZ
- X\x{1234}\x{512}
-
-/ End of testinput4 /
diff --git a/ext/pcre/pcrelib/testdata/testinput5 b/ext/pcre/pcrelib/testdata/testinput5
deleted file mode 100644
index 81fe233e6b..0000000000
--- a/ext/pcre/pcrelib/testdata/testinput5
+++ /dev/null
@@ -1,91 +0,0 @@
-/\x{100}/8DM
-
-/\x{1000}/8DM
-
-/\x{10000}/8DM
-
-/\x{100000}/8DM
-
-/\x{1000000}/8DM
-
-/\x{4000000}/8DM
-
-/\x{7fffFFFF}/8DM
-
-/[\x{ff}]/8DM
-
-/[\x{100}]/8DM
-
-/\x{ffffffff}/8
-
-/\x{100000000}/8
-
-/^\x{100}a\x{1234}/8
- \x{100}a\x{1234}bcd
-
-/\x80/8D
-
-/\xff/8D
-
-/\x{0041}\x{2262}\x{0391}\x{002e}/D8
- \x{0041}\x{2262}\x{0391}\x{002e}
-
-/\x{D55c}\x{ad6d}\x{C5B4}/D8
- \x{D55c}\x{ad6d}\x{C5B4}
-
-/\x{65e5}\x{672c}\x{8a9e}/D8
- \x{65e5}\x{672c}\x{8a9e}
-
-/\x{80}/D8
-
-/\x{084}/D8
-
-/\x{104}/D8
-
-/\x{861}/D8
-
-/\x{212ab}/D8
-
-/.{3,5}X/D8
- \x{212ab}\x{212ab}\x{212ab}\x{861}X
-
-
-/.{3,5}?/D8
- \x{212ab}\x{212ab}\x{212ab}\x{861}
-
-/-- These tests are here rather than in testinput4 because Perl 5.6 has --/
-/-- some problems with UTF-8 support, in the area of \x{..} where the --/
-/-- value is < 255. It grumbles about invalid UTF-8 strings. --/
-
-/^[a\x{c0}]b/8
- \x{c0}b
-
-/^([a\x{c0}]*?)aa/8
- a\x{c0}aaaa/
-
-/^([a\x{c0}]*?)aa/8
- a\x{c0}aaaa/
- a\x{c0}a\x{c0}aaa/
-
-/^([a\x{c0}]*)aa/8
- a\x{c0}aaaa/
- a\x{c0}a\x{c0}aaa/
-
-/^([a\x{c0}]*)a\x{c0}/8
- a\x{c0}aaaa/
- a\x{c0}a\x{c0}aaa/
-
-/-- --/
-
-/(?<=\C)X/8
- Should produce an error diagnostic
-
-/-- This one is here not because it's different to Perl, but because the --/
-/-- way the captured single-byte is displayed. (In Perl it becomes a --/
-/-- character, and you can't tell the difference.) --/
-
-/X(\C)(.*)/8
- X\x{1234}
- X\nabc
-
-/ End of testinput5 /
diff --git a/ext/pcre/pcrelib/testdata/testinput6 b/ext/pcre/pcrelib/testdata/testinput6
deleted file mode 100644
index 00748513c6..0000000000
--- a/ext/pcre/pcrelib/testdata/testinput6
+++ /dev/null
@@ -1,78 +0,0 @@
-/\x{100}/8DM
-
-/\x{1000}/8DM
-
-/\x{10000}/8DM
-
-/\x{100000}/8DM
-
-/\x{1000000}/8DM
-
-/\x{4000000}/8DM
-
-/\x{7fffFFFF}/8DM
-
-/[\x{ff}]/8DM
-
-/[\x{100}]/8DM
-
-/\x{ffffffff}/8
-
-/\x{100000000}/8
-
-/^\x{100}a\x{1234}/8
- \x{100}a\x{1234}bcd
-
-/\x80/8D
-
-/\xff/8D
-
-/\x{0041}\x{2262}\x{0391}\x{002e}/D8
- \x{0041}\x{2262}\x{0391}\x{002e}
-
-/\x{D55c}\x{ad6d}\x{C5B4}/D8
- \x{D55c}\x{ad6d}\x{C5B4}
-
-/\x{65e5}\x{672c}\x{8a9e}/D8
- \x{65e5}\x{672c}\x{8a9e}
-
-/\x{80}/D8
-
-/\x{084}/D8
-
-/\x{104}/D8
-
-/\x{861}/D8
-
-/\x{212ab}/D8
-
-/.{3,5}X/D8
- \x{212ab}\x{212ab}\x{212ab}\x{861}X
-
-
-/.{3,5}?/D8
- \x{212ab}\x{212ab}\x{212ab}\x{861}
-
-/-- These tests are here rather than in testinput5 because Perl 5.6 has --/
-/-- some problems with UTF-8 support, in the area of \x{..} where the --/
-/-- value is < 255. It grumbles about invalid UTF-8 strings. --/
-
-/^[a\x{c0}]b/8
- \x{c0}b
-
-/^([a\x{c0}]*?)aa/8
- a\x{c0}aaaa/
-
-/^([a\x{c0}]*?)aa/8
- a\x{c0}aaaa/
- a\x{c0}a\x{c0}aaa/
-
-/^([a\x{c0}]*)aa/8
- a\x{c0}aaaa/
- a\x{c0}a\x{c0}aaa/
-
-/^([a\x{c0}]*)a\x{c0}/8
- a\x{c0}aaaa/
- a\x{c0}a\x{c0}aaa/
-
-/ End of testinput6 /
diff --git a/ext/pcre/pcrelib/testdata/testoutput1 b/ext/pcre/pcrelib/testdata/testoutput1
deleted file mode 100644
index 81bf6cef3d..0000000000
--- a/ext/pcre/pcrelib/testdata/testoutput1
+++ /dev/null
@@ -1,6222 +0,0 @@
-PCRE version 3.92 11-Sep-2002
-
-/the quick brown fox/
- the quick brown fox
- 0: the quick brown fox
- The quick brown FOX
-No match
- What do you know about the quick brown fox?
- 0: the quick brown fox
- What do you know about THE QUICK BROWN FOX?
-No match
-
-/The quick brown fox/i
- the quick brown fox
- 0: the quick brown fox
- The quick brown FOX
- 0: The quick brown FOX
- What do you know about the quick brown fox?
- 0: the quick brown fox
- What do you know about THE QUICK BROWN FOX?
- 0: THE QUICK BROWN FOX
-
-/abcd\t\n\r\f\a\e\071\x3b\$\\\?caxyz/
- abcd\t\n\r\f\a\e9;\$\\?caxyz
- 0: abcd\x09\x0a\x0d\x0c\x07\x1b9;$\?caxyz
-
-/a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz/
- abxyzpqrrrabbxyyyypqAzz
- 0: abxyzpqrrrabbxyyyypqAzz
- abxyzpqrrrabbxyyyypqAzz
- 0: abxyzpqrrrabbxyyyypqAzz
- aabxyzpqrrrabbxyyyypqAzz
- 0: aabxyzpqrrrabbxyyyypqAzz
- aaabxyzpqrrrabbxyyyypqAzz
- 0: aaabxyzpqrrrabbxyyyypqAzz
- aaaabxyzpqrrrabbxyyyypqAzz
- 0: aaaabxyzpqrrrabbxyyyypqAzz
- abcxyzpqrrrabbxyyyypqAzz
- 0: abcxyzpqrrrabbxyyyypqAzz
- aabcxyzpqrrrabbxyyyypqAzz
- 0: aabcxyzpqrrrabbxyyyypqAzz
- aaabcxyzpqrrrabbxyyyypAzz
- 0: aaabcxyzpqrrrabbxyyyypAzz
- aaabcxyzpqrrrabbxyyyypqAzz
- 0: aaabcxyzpqrrrabbxyyyypqAzz
- aaabcxyzpqrrrabbxyyyypqqAzz
- 0: aaabcxyzpqrrrabbxyyyypqqAzz
- aaabcxyzpqrrrabbxyyyypqqqAzz
- 0: aaabcxyzpqrrrabbxyyyypqqqAzz
- aaabcxyzpqrrrabbxyyyypqqqqAzz
- 0: aaabcxyzpqrrrabbxyyyypqqqqAzz
- aaabcxyzpqrrrabbxyyyypqqqqqAzz
- 0: aaabcxyzpqrrrabbxyyyypqqqqqAzz
- aaabcxyzpqrrrabbxyyyypqqqqqqAzz
- 0: aaabcxyzpqrrrabbxyyyypqqqqqqAzz
- aaaabcxyzpqrrrabbxyyyypqAzz
- 0: aaaabcxyzpqrrrabbxyyyypqAzz
- abxyzzpqrrrabbxyyyypqAzz
- 0: abxyzzpqrrrabbxyyyypqAzz
- aabxyzzzpqrrrabbxyyyypqAzz
- 0: aabxyzzzpqrrrabbxyyyypqAzz
- aaabxyzzzzpqrrrabbxyyyypqAzz
- 0: aaabxyzzzzpqrrrabbxyyyypqAzz
- aaaabxyzzzzpqrrrabbxyyyypqAzz
- 0: aaaabxyzzzzpqrrrabbxyyyypqAzz
- abcxyzzpqrrrabbxyyyypqAzz
- 0: abcxyzzpqrrrabbxyyyypqAzz
- aabcxyzzzpqrrrabbxyyyypqAzz
- 0: aabcxyzzzpqrrrabbxyyyypqAzz
- aaabcxyzzzzpqrrrabbxyyyypqAzz
- 0: aaabcxyzzzzpqrrrabbxyyyypqAzz
- aaaabcxyzzzzpqrrrabbxyyyypqAzz
- 0: aaaabcxyzzzzpqrrrabbxyyyypqAzz
- aaaabcxyzzzzpqrrrabbbxyyyypqAzz
- 0: aaaabcxyzzzzpqrrrabbbxyyyypqAzz
- aaaabcxyzzzzpqrrrabbbxyyyyypqAzz
- 0: aaaabcxyzzzzpqrrrabbbxyyyyypqAzz
- aaabcxyzpqrrrabbxyyyypABzz
- 0: aaabcxyzpqrrrabbxyyyypABzz
- aaabcxyzpqrrrabbxyyyypABBzz
- 0: aaabcxyzpqrrrabbxyyyypABBzz
- >>>aaabxyzpqrrrabbxyyyypqAzz
- 0: aaabxyzpqrrrabbxyyyypqAzz
- >aaaabxyzpqrrrabbxyyyypqAzz
- 0: aaaabxyzpqrrrabbxyyyypqAzz
- >>>>abcxyzpqrrrabbxyyyypqAzz
- 0: abcxyzpqrrrabbxyyyypqAzz
- *** Failers
-No match
- abxyzpqrrabbxyyyypqAzz
-No match
- abxyzpqrrrrabbxyyyypqAzz
-No match
- abxyzpqrrrabxyyyypqAzz
-No match
- aaaabcxyzzzzpqrrrabbbxyyyyyypqAzz
-No match
- aaaabcxyzzzzpqrrrabbbxyyypqAzz
-No match
- aaabcxyzpqrrrabbxyyyypqqqqqqqAzz
-No match
-
-/^(abc){1,2}zz/
- abczz
- 0: abczz
- 1: abc
- abcabczz
- 0: abcabczz
- 1: abc
- *** Failers
-No match
- zz
-No match
- abcabcabczz
-No match
- >>abczz
-No match
-
-/^(b+?|a){1,2}?c/
- bc
- 0: bc
- 1: b
- bbc
- 0: bbc
- 1: b
- bbbc
- 0: bbbc
- 1: bb
- bac
- 0: bac
- 1: a
- bbac
- 0: bbac
- 1: a
- aac
- 0: aac
- 1: a
- abbbbbbbbbbbc
- 0: abbbbbbbbbbbc
- 1: bbbbbbbbbbb
- bbbbbbbbbbbac
- 0: bbbbbbbbbbbac
- 1: a
- *** Failers
-No match
- aaac
-No match
- abbbbbbbbbbbac
-No match
-
-/^(b+|a){1,2}c/
- bc
- 0: bc
- 1: b
- bbc
- 0: bbc
- 1: bb
- bbbc
- 0: bbbc
- 1: bbb
- bac
- 0: bac
- 1: a
- bbac
- 0: bbac
- 1: a
- aac
- 0: aac
- 1: a
- abbbbbbbbbbbc
- 0: abbbbbbbbbbbc
- 1: bbbbbbbbbbb
- bbbbbbbbbbbac
- 0: bbbbbbbbbbbac
- 1: a
- *** Failers
-No match
- aaac
-No match
- abbbbbbbbbbbac
-No match
-
-/^(b+|a){1,2}?bc/
- bbc
- 0: bbc
- 1: b
-
-/^(b*|ba){1,2}?bc/
- babc
- 0: babc
- 1: ba
- bbabc
- 0: bbabc
- 1: ba
- bababc
- 0: bababc
- 1: ba
- *** Failers
-No match
- bababbc
-No match
- babababc
-No match
-
-/^(ba|b*){1,2}?bc/
- babc
- 0: babc
- 1: ba
- bbabc
- 0: bbabc
- 1: ba
- bababc
- 0: bababc
- 1: ba
- *** Failers
-No match
- bababbc
-No match
- babababc
-No match
-
-/^\ca\cA\c[\c{\c:/
- \x01\x01\e;z
- 0: \x01\x01\x1b;z
-
-/^[ab\]cde]/
- athing
- 0: a
- bthing
- 0: b
- ]thing
- 0: ]
- cthing
- 0: c
- dthing
- 0: d
- ething
- 0: e
- *** Failers
-No match
- fthing
-No match
- [thing
-No match
- \\thing
-No match
-
-/^[]cde]/
- ]thing
- 0: ]
- cthing
- 0: c
- dthing
- 0: d
- ething
- 0: e
- *** Failers
-No match
- athing
-No match
- fthing
-No match
-
-/^[^ab\]cde]/
- fthing
- 0: f
- [thing
- 0: [
- \\thing
- 0: \
- *** Failers
- 0: *
- athing
-No match
- bthing
-No match
- ]thing
-No match
- cthing
-No match
- dthing
-No match
- ething
-No match
-
-/^[^]cde]/
- athing
- 0: a
- fthing
- 0: f
- *** Failers
- 0: *
- ]thing
-No match
- cthing
-No match
- dthing
-No match
- ething
-No match
-
-/^\/
-
- 0: \x81
-
-/^ÿ/
- ÿ
- 0: \xff
-
-/^[0-9]+$/
- 0
- 0: 0
- 1
- 0: 1
- 2
- 0: 2
- 3
- 0: 3
- 4
- 0: 4
- 5
- 0: 5
- 6
- 0: 6
- 7
- 0: 7
- 8
- 0: 8
- 9
- 0: 9
- 10
- 0: 10
- 100
- 0: 100
- *** Failers
-No match
- abc
-No match
-
-/^.*nter/
- enter
- 0: enter
- inter
- 0: inter
- uponter
- 0: uponter
-
-/^xxx[0-9]+$/
- xxx0
- 0: xxx0
- xxx1234
- 0: xxx1234
- *** Failers
-No match
- xxx
-No match
-
-/^.+[0-9][0-9][0-9]$/
- x123
- 0: x123
- xx123
- 0: xx123
- 123456
- 0: 123456
- *** Failers
-No match
- 123
-No match
- x1234
- 0: x1234
-
-/^.+?[0-9][0-9][0-9]$/
- x123
- 0: x123
- xx123
- 0: xx123
- 123456
- 0: 123456
- *** Failers
-No match
- 123
-No match
- x1234
- 0: x1234
-
-/^([^!]+)!(.+)=apquxz\.ixr\.zzz\.ac\.uk$/
- abc!pqr=apquxz.ixr.zzz.ac.uk
- 0: abc!pqr=apquxz.ixr.zzz.ac.uk
- 1: abc
- 2: pqr
- *** Failers
-No match
- !pqr=apquxz.ixr.zzz.ac.uk
-No match
- abc!=apquxz.ixr.zzz.ac.uk
-No match
- abc!pqr=apquxz:ixr.zzz.ac.uk
-No match
- abc!pqr=apquxz.ixr.zzz.ac.ukk
-No match
-
-/:/
- Well, we need a colon: somewhere
- 0: :
- *** Fail if we don't
-No match
-
-/([\da-f:]+)$/i
- 0abc
- 0: 0abc
- 1: 0abc
- abc
- 0: abc
- 1: abc
- fed
- 0: fed
- 1: fed
- E
- 0: E
- 1: E
- ::
- 0: ::
- 1: ::
- 5f03:12C0::932e
- 0: 5f03:12C0::932e
- 1: 5f03:12C0::932e
- fed def
- 0: def
- 1: def
- Any old stuff
- 0: ff
- 1: ff
- *** Failers
-No match
- 0zzz
-No match
- gzzz
-No match
- fed\x20
-No match
- Any old rubbish
-No match
-
-/^.*\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/
- .1.2.3
- 0: .1.2.3
- 1: 1
- 2: 2
- 3: 3
- A.12.123.0
- 0: A.12.123.0
- 1: 12
- 2: 123
- 3: 0
- *** Failers
-No match
- .1.2.3333
-No match
- 1.2.3
-No match
- 1234.2.3
-No match
-
-/^(\d+)\s+IN\s+SOA\s+(\S+)\s+(\S+)\s*\(\s*$/
- 1 IN SOA non-sp1 non-sp2(
- 0: 1 IN SOA non-sp1 non-sp2(
- 1: 1
- 2: non-sp1
- 3: non-sp2
- 1 IN SOA non-sp1 non-sp2 (
- 0: 1 IN SOA non-sp1 non-sp2 (
- 1: 1
- 2: non-sp1
- 3: non-sp2
- *** Failers
-No match
- 1IN SOA non-sp1 non-sp2(
-No match
-
-/^[a-zA-Z\d][a-zA-Z\d\-]*(\.[a-zA-Z\d][a-zA-z\d\-]*)*\.$/
- a.
- 0: a.
- Z.
- 0: Z.
- 2.
- 0: 2.
- ab-c.pq-r.
- 0: ab-c.pq-r.
- 1: .pq-r
- sxk.zzz.ac.uk.
- 0: sxk.zzz.ac.uk.
- 1: .uk
- x-.y-.
- 0: x-.y-.
- 1: .y-
- *** Failers
-No match
- -abc.peq.
-No match
-
-/^\*\.[a-z]([a-z\-\d]*[a-z\d]+)?(\.[a-z]([a-z\-\d]*[a-z\d]+)?)*$/
- *.a
- 0: *.a
- *.b0-a
- 0: *.b0-a
- 1: 0-a
- *.c3-b.c
- 0: *.c3-b.c
- 1: 3-b
- 2: .c
- *.c-a.b-c
- 0: *.c-a.b-c
- 1: -a
- 2: .b-c
- 3: -c
- *** Failers
-No match
- *.0
-No match
- *.a-
-No match
- *.a-b.c-
-No match
- *.c-a.0-c
-No match
-
-/^(?=ab(de))(abd)(e)/
- abde
- 0: abde
- 1: de
- 2: abd
- 3: e
-
-/^(?!(ab)de|x)(abd)(f)/
- abdf
- 0: abdf
- 1: <unset>
- 2: abd
- 3: f
-
-/^(?=(ab(cd)))(ab)/
- abcd
- 0: ab
- 1: abcd
- 2: cd
- 3: ab
-
-/^[\da-f](\.[\da-f])*$/i
- a.b.c.d
- 0: a.b.c.d
- 1: .d
- A.B.C.D
- 0: A.B.C.D
- 1: .D
- a.b.c.1.2.3.C
- 0: a.b.c.1.2.3.C
- 1: .C
-
-/^\".*\"\s*(;.*)?$/
- \"1234\"
- 0: "1234"
- \"abcd\" ;
- 0: "abcd" ;
- 1: ;
- \"\" ; rhubarb
- 0: "" ; rhubarb
- 1: ; rhubarb
- *** Failers
-No match
- \"1234\" : things
-No match
-
-/^$/
- \
- 0:
- *** Failers
-No match
-
-/ ^ a (?# begins with a) b\sc (?# then b c) $ (?# then end)/x
- ab c
- 0: ab c
- *** Failers
-No match
- abc
-No match
- ab cde
-No match
-
-/(?x) ^ a (?# begins with a) b\sc (?# then b c) $ (?# then end)/
- ab c
- 0: ab c
- *** Failers
-No match
- abc
-No match
- ab cde
-No match
-
-/^ a\ b[c ]d $/x
- a bcd
- 0: a bcd
- a b d
- 0: a b d
- *** Failers
-No match
- abcd
-No match
- ab d
-No match
-
-/^(a(b(c)))(d(e(f)))(h(i(j)))(k(l(m)))$/
- abcdefhijklm
- 0: abcdefhijklm
- 1: abc
- 2: bc
- 3: c
- 4: def
- 5: ef
- 6: f
- 7: hij
- 8: ij
- 9: j
-10: klm
-11: lm
-12: m
-
-/^(?:a(b(c)))(?:d(e(f)))(?:h(i(j)))(?:k(l(m)))$/
- abcdefhijklm
- 0: abcdefhijklm
- 1: bc
- 2: c
- 3: ef
- 4: f
- 5: ij
- 6: j
- 7: lm
- 8: m
-
-/^[\w][\W][\s][\S][\d][\D][\b][\n][\c]][\022]/
- a+ Z0+\x08\n\x1d\x12
- 0: a+ Z0+\x08\x0a\x1d\x12
-
-/^[.^$|()*+?{,}]+/
- .^\$(*+)|{?,?}
- 0: .^$(*+)|{?,?}
-
-/^a*\w/
- z
- 0: z
- az
- 0: az
- aaaz
- 0: aaaz
- a
- 0: a
- aa
- 0: aa
- aaaa
- 0: aaaa
- a+
- 0: a
- aa+
- 0: aa
-
-/^a*?\w/
- z
- 0: z
- az
- 0: a
- aaaz
- 0: a
- a
- 0: a
- aa
- 0: a
- aaaa
- 0: a
- a+
- 0: a
- aa+
- 0: a
-
-/^a+\w/
- az
- 0: az
- aaaz
- 0: aaaz
- aa
- 0: aa
- aaaa
- 0: aaaa
- aa+
- 0: aa
-
-/^a+?\w/
- az
- 0: az
- aaaz
- 0: aa
- aa
- 0: aa
- aaaa
- 0: aa
- aa+
- 0: aa
-
-/^\d{8}\w{2,}/
- 1234567890
- 0: 1234567890
- 12345678ab
- 0: 12345678ab
- 12345678__
- 0: 12345678__
- *** Failers
-No match
- 1234567
-No match
-
-/^[aeiou\d]{4,5}$/
- uoie
- 0: uoie
- 1234
- 0: 1234
- 12345
- 0: 12345
- aaaaa
- 0: aaaaa
- *** Failers
-No match
- 123456
-No match
-
-/^[aeiou\d]{4,5}?/
- uoie
- 0: uoie
- 1234
- 0: 1234
- 12345
- 0: 1234
- aaaaa
- 0: aaaa
- 123456
- 0: 1234
-
-/\A(abc|def)=(\1){2,3}\Z/
- abc=abcabc
- 0: abc=abcabc
- 1: abc
- 2: abc
- def=defdefdef
- 0: def=defdefdef
- 1: def
- 2: def
- *** Failers
-No match
- abc=defdef
-No match
-
-/^(a)(b)(c)(d)(e)(f)(g)(h)(i)(j)(k)\11*(\3\4)\1(?#)2$/
- abcdefghijkcda2
- 0: abcdefghijkcda2
- 1: a
- 2: b
- 3: c
- 4: d
- 5: e
- 6: f
- 7: g
- 8: h
- 9: i
-10: j
-11: k
-12: cd
- abcdefghijkkkkcda2
- 0: abcdefghijkkkkcda2
- 1: a
- 2: b
- 3: c
- 4: d
- 5: e
- 6: f
- 7: g
- 8: h
- 9: i
-10: j
-11: k
-12: cd
-
-/(cat(a(ract|tonic)|erpillar)) \1()2(3)/
- cataract cataract23
- 0: cataract cataract23
- 1: cataract
- 2: aract
- 3: ract
- 4:
- 5: 3
- catatonic catatonic23
- 0: catatonic catatonic23
- 1: catatonic
- 2: atonic
- 3: tonic
- 4:
- 5: 3
- caterpillar caterpillar23
- 0: caterpillar caterpillar23
- 1: caterpillar
- 2: erpillar
- 3: <unset>
- 4:
- 5: 3
-
-
-/^From +([^ ]+) +[a-zA-Z][a-zA-Z][a-zA-Z] +[a-zA-Z][a-zA-Z][a-zA-Z] +[0-9]?[0-9] +[0-9][0-9]:[0-9][0-9]/
- From abcd Mon Sep 01 12:33:02 1997
- 0: From abcd Mon Sep 01 12:33
- 1: abcd
-
-/^From\s+\S+\s+([a-zA-Z]{3}\s+){2}\d{1,2}\s+\d\d:\d\d/
- From abcd Mon Sep 01 12:33:02 1997
- 0: From abcd Mon Sep 01 12:33
- 1: Sep
- From abcd Mon Sep 1 12:33:02 1997
- 0: From abcd Mon Sep 1 12:33
- 1: Sep
- *** Failers
-No match
- From abcd Sep 01 12:33:02 1997
-No match
-
-/^12.34/s
- 12\n34
- 0: 12\x0a34
- 12\r34
- 0: 12\x0d34
-
-/\w+(?=\t)/
- the quick brown\t fox
- 0: brown
-
-/foo(?!bar)(.*)/
- foobar is foolish see?
- 0: foolish see?
- 1: lish see?
-
-/(?:(?!foo)...|^.{0,2})bar(.*)/
- foobar crowbar etc
- 0: rowbar etc
- 1: etc
- barrel
- 0: barrel
- 1: rel
- 2barrel
- 0: 2barrel
- 1: rel
- A barrel
- 0: A barrel
- 1: rel
-
-/^(\D*)(?=\d)(?!123)/
- abc456
- 0: abc
- 1: abc
- *** Failers
-No match
- abc123
-No match
-
-/^1234(?# test newlines
- inside)/
- 1234
- 0: 1234
-
-/^1234 #comment in extended re
- /x
- 1234
- 0: 1234
-
-/#rhubarb
- abcd/x
- abcd
- 0: abcd
-
-/^abcd#rhubarb/x
- abcd
- 0: abcd
-
-/^(a)\1{2,3}(.)/
- aaab
- 0: aaab
- 1: a
- 2: b
- aaaab
- 0: aaaab
- 1: a
- 2: b
- aaaaab
- 0: aaaaa
- 1: a
- 2: a
- aaaaaab
- 0: aaaaa
- 1: a
- 2: a
-
-/(?!^)abc/
- the abc
- 0: abc
- *** Failers
-No match
- abc
-No match
-
-/(?=^)abc/
- abc
- 0: abc
- *** Failers
-No match
- the abc
-No match
-
-/^[ab]{1,3}(ab*|b)/
- aabbbbb
- 0: aabb
- 1: b
-
-/^[ab]{1,3}?(ab*|b)/
- aabbbbb
- 0: aabbbbb
- 1: abbbbb
-
-/^[ab]{1,3}?(ab*?|b)/
- aabbbbb
- 0: aa
- 1: a
-
-/^[ab]{1,3}(ab*?|b)/
- aabbbbb
- 0: aabb
- 1: b
-
-/ (?: [\040\t] | \(
-(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
-\) )* # optional leading comment
-(?: (?:
-[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
-(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
-|
-" (?: # opening quote...
-[^\\\x80-\xff\n\015"] # Anything except backslash and quote
-| # or
-\\ [^\x80-\xff] # Escaped something (something != CR)
-)* " # closing quote
-) # initial word
-(?: (?: [\040\t] | \(
-(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
-\) )* \. (?: [\040\t] | \(
-(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
-\) )* (?:
-[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
-(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
-|
-" (?: # opening quote...
-[^\\\x80-\xff\n\015"] # Anything except backslash and quote
-| # or
-\\ [^\x80-\xff] # Escaped something (something != CR)
-)* " # closing quote
-) )* # further okay, if led by a period
-(?: [\040\t] | \(
-(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
-\) )* @ (?: [\040\t] | \(
-(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
-\) )* (?:
-[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
-(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
-| \[ # [
-(?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
-\] # ]
-) # initial subdomain
-(?: #
-(?: [\040\t] | \(
-(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
-\) )* \. # if led by a period...
-(?: [\040\t] | \(
-(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
-\) )* (?:
-[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
-(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
-| \[ # [
-(?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
-\] # ]
-) # ...further okay
-)*
-# address
-| # or
-(?:
-[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
-(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
-|
-" (?: # opening quote...
-[^\\\x80-\xff\n\015"] # Anything except backslash and quote
-| # or
-\\ [^\x80-\xff] # Escaped something (something != CR)
-)* " # closing quote
-) # one word, optionally followed by....
-(?:
-[^()<>@,;:".\\\[\]\x80-\xff\000-\010\012-\037] | # atom and space parts, or...
-\(
-(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
-\) | # comments, or...
-
-" (?: # opening quote...
-[^\\\x80-\xff\n\015"] # Anything except backslash and quote
-| # or
-\\ [^\x80-\xff] # Escaped something (something != CR)
-)* " # closing quote
-# quoted strings
-)*
-< (?: [\040\t] | \(
-(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
-\) )* # leading <
-(?: @ (?: [\040\t] | \(
-(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
-\) )* (?:
-[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
-(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
-| \[ # [
-(?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
-\] # ]
-) # initial subdomain
-(?: #
-(?: [\040\t] | \(
-(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
-\) )* \. # if led by a period...
-(?: [\040\t] | \(
-(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
-\) )* (?:
-[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
-(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
-| \[ # [
-(?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
-\] # ]
-) # ...further okay
-)*
-
-(?: (?: [\040\t] | \(
-(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
-\) )* , (?: [\040\t] | \(
-(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
-\) )* @ (?: [\040\t] | \(
-(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
-\) )* (?:
-[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
-(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
-| \[ # [
-(?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
-\] # ]
-) # initial subdomain
-(?: #
-(?: [\040\t] | \(
-(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
-\) )* \. # if led by a period...
-(?: [\040\t] | \(
-(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
-\) )* (?:
-[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
-(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
-| \[ # [
-(?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
-\] # ]
-) # ...further okay
-)*
-)* # further okay, if led by comma
-: # closing colon
-(?: [\040\t] | \(
-(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
-\) )* )? # optional route
-(?:
-[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
-(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
-|
-" (?: # opening quote...
-[^\\\x80-\xff\n\015"] # Anything except backslash and quote
-| # or
-\\ [^\x80-\xff] # Escaped something (something != CR)
-)* " # closing quote
-) # initial word
-(?: (?: [\040\t] | \(
-(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
-\) )* \. (?: [\040\t] | \(
-(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
-\) )* (?:
-[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
-(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
-|
-" (?: # opening quote...
-[^\\\x80-\xff\n\015"] # Anything except backslash and quote
-| # or
-\\ [^\x80-\xff] # Escaped something (something != CR)
-)* " # closing quote
-) )* # further okay, if led by a period
-(?: [\040\t] | \(
-(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
-\) )* @ (?: [\040\t] | \(
-(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
-\) )* (?:
-[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
-(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
-| \[ # [
-(?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
-\] # ]
-) # initial subdomain
-(?: #
-(?: [\040\t] | \(
-(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
-\) )* \. # if led by a period...
-(?: [\040\t] | \(
-(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
-\) )* (?:
-[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
-(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
-| \[ # [
-(?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
-\] # ]
-) # ...further okay
-)*
-# address spec
-(?: [\040\t] | \(
-(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
-\) )* > # trailing >
-# name and address
-) (?: [\040\t] | \(
-(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
-\) )* # optional trailing comment
-/x
- Alan Other <user\@dom.ain>
- 0: Alan Other <user@dom.ain>
- <user\@dom.ain>
- 0: user@dom.ain
- user\@dom.ain
- 0: user@dom.ain
- \"A. Other\" <user.1234\@dom.ain> (a comment)
- 0: "A. Other" <user.1234@dom.ain> (a comment)
- A. Other <user.1234\@dom.ain> (a comment)
- 0: Other <user.1234@dom.ain> (a comment)
- \"/s=user/ou=host/o=place/prmd=uu.yy/admd= /c=gb/\"\@x400-re.lay
- 0: "/s=user/ou=host/o=place/prmd=uu.yy/admd= /c=gb/"@x400-re.lay
- A missing angle <user\@some.where
- 0: user@some.where
- *** Failers
-No match
- The quick brown fox
-No match
-
-/[\040\t]* # Nab whitespace.
-(?:
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: # (
-(?: \\ [^\x80-\xff] |
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
-\) # )
-) # special
-[^\\\x80-\xff\n\015()] * # normal*
-)* # )*
-\) # )
-[\040\t]* )* # If comment found, allow more spaces.
-# optional leading comment
-(?:
-(?:
-[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
-(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
-# Atom
-| # or
-" # "
-[^\\\x80-\xff\n\015"] * # normal
-(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015"] * )* # ( special normal* )*
-" # "
-# Quoted string
-)
-[\040\t]* # Nab whitespace.
-(?:
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: # (
-(?: \\ [^\x80-\xff] |
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
-\) # )
-) # special
-[^\\\x80-\xff\n\015()] * # normal*
-)* # )*
-\) # )
-[\040\t]* )* # If comment found, allow more spaces.
-(?:
-\.
-[\040\t]* # Nab whitespace.
-(?:
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: # (
-(?: \\ [^\x80-\xff] |
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
-\) # )
-) # special
-[^\\\x80-\xff\n\015()] * # normal*
-)* # )*
-\) # )
-[\040\t]* )* # If comment found, allow more spaces.
-(?:
-[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
-(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
-# Atom
-| # or
-" # "
-[^\\\x80-\xff\n\015"] * # normal
-(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015"] * )* # ( special normal* )*
-" # "
-# Quoted string
-)
-[\040\t]* # Nab whitespace.
-(?:
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: # (
-(?: \\ [^\x80-\xff] |
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
-\) # )
-) # special
-[^\\\x80-\xff\n\015()] * # normal*
-)* # )*
-\) # )
-[\040\t]* )* # If comment found, allow more spaces.
-# additional words
-)*
-@
-[\040\t]* # Nab whitespace.
-(?:
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: # (
-(?: \\ [^\x80-\xff] |
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
-\) # )
-) # special
-[^\\\x80-\xff\n\015()] * # normal*
-)* # )*
-\) # )
-[\040\t]* )* # If comment found, allow more spaces.
-(?:
-[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
-(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
-|
-\[ # [
-(?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
-\] # ]
-)
-[\040\t]* # Nab whitespace.
-(?:
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: # (
-(?: \\ [^\x80-\xff] |
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
-\) # )
-) # special
-[^\\\x80-\xff\n\015()] * # normal*
-)* # )*
-\) # )
-[\040\t]* )* # If comment found, allow more spaces.
-# optional trailing comments
-(?:
-\.
-[\040\t]* # Nab whitespace.
-(?:
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: # (
-(?: \\ [^\x80-\xff] |
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
-\) # )
-) # special
-[^\\\x80-\xff\n\015()] * # normal*
-)* # )*
-\) # )
-[\040\t]* )* # If comment found, allow more spaces.
-(?:
-[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
-(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
-|
-\[ # [
-(?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
-\] # ]
-)
-[\040\t]* # Nab whitespace.
-(?:
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: # (
-(?: \\ [^\x80-\xff] |
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
-\) # )
-) # special
-[^\\\x80-\xff\n\015()] * # normal*
-)* # )*
-\) # )
-[\040\t]* )* # If comment found, allow more spaces.
-# optional trailing comments
-)*
-# address
-| # or
-(?:
-[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
-(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
-# Atom
-| # or
-" # "
-[^\\\x80-\xff\n\015"] * # normal
-(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015"] * )* # ( special normal* )*
-" # "
-# Quoted string
-)
-# leading word
-[^()<>@,;:".\\\[\]\x80-\xff\000-\010\012-\037] * # "normal" atoms and or spaces
-(?:
-(?:
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: # (
-(?: \\ [^\x80-\xff] |
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
-\) # )
-) # special
-[^\\\x80-\xff\n\015()] * # normal*
-)* # )*
-\) # )
-|
-" # "
-[^\\\x80-\xff\n\015"] * # normal
-(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015"] * )* # ( special normal* )*
-" # "
-) # "special" comment or quoted string
-[^()<>@,;:".\\\[\]\x80-\xff\000-\010\012-\037] * # more "normal"
-)*
-<
-[\040\t]* # Nab whitespace.
-(?:
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: # (
-(?: \\ [^\x80-\xff] |
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
-\) # )
-) # special
-[^\\\x80-\xff\n\015()] * # normal*
-)* # )*
-\) # )
-[\040\t]* )* # If comment found, allow more spaces.
-# <
-(?:
-@
-[\040\t]* # Nab whitespace.
-(?:
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: # (
-(?: \\ [^\x80-\xff] |
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
-\) # )
-) # special
-[^\\\x80-\xff\n\015()] * # normal*
-)* # )*
-\) # )
-[\040\t]* )* # If comment found, allow more spaces.
-(?:
-[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
-(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
-|
-\[ # [
-(?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
-\] # ]
-)
-[\040\t]* # Nab whitespace.
-(?:
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: # (
-(?: \\ [^\x80-\xff] |
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
-\) # )
-) # special
-[^\\\x80-\xff\n\015()] * # normal*
-)* # )*
-\) # )
-[\040\t]* )* # If comment found, allow more spaces.
-# optional trailing comments
-(?:
-\.
-[\040\t]* # Nab whitespace.
-(?:
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: # (
-(?: \\ [^\x80-\xff] |
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
-\) # )
-) # special
-[^\\\x80-\xff\n\015()] * # normal*
-)* # )*
-\) # )
-[\040\t]* )* # If comment found, allow more spaces.
-(?:
-[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
-(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
-|
-\[ # [
-(?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
-\] # ]
-)
-[\040\t]* # Nab whitespace.
-(?:
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: # (
-(?: \\ [^\x80-\xff] |
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
-\) # )
-) # special
-[^\\\x80-\xff\n\015()] * # normal*
-)* # )*
-\) # )
-[\040\t]* )* # If comment found, allow more spaces.
-# optional trailing comments
-)*
-(?: ,
-[\040\t]* # Nab whitespace.
-(?:
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: # (
-(?: \\ [^\x80-\xff] |
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
-\) # )
-) # special
-[^\\\x80-\xff\n\015()] * # normal*
-)* # )*
-\) # )
-[\040\t]* )* # If comment found, allow more spaces.
-@
-[\040\t]* # Nab whitespace.
-(?:
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: # (
-(?: \\ [^\x80-\xff] |
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
-\) # )
-) # special
-[^\\\x80-\xff\n\015()] * # normal*
-)* # )*
-\) # )
-[\040\t]* )* # If comment found, allow more spaces.
-(?:
-[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
-(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
-|
-\[ # [
-(?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
-\] # ]
-)
-[\040\t]* # Nab whitespace.
-(?:
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: # (
-(?: \\ [^\x80-\xff] |
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
-\) # )
-) # special
-[^\\\x80-\xff\n\015()] * # normal*
-)* # )*
-\) # )
-[\040\t]* )* # If comment found, allow more spaces.
-# optional trailing comments
-(?:
-\.
-[\040\t]* # Nab whitespace.
-(?:
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: # (
-(?: \\ [^\x80-\xff] |
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
-\) # )
-) # special
-[^\\\x80-\xff\n\015()] * # normal*
-)* # )*
-\) # )
-[\040\t]* )* # If comment found, allow more spaces.
-(?:
-[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
-(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
-|
-\[ # [
-(?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
-\] # ]
-)
-[\040\t]* # Nab whitespace.
-(?:
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: # (
-(?: \\ [^\x80-\xff] |
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
-\) # )
-) # special
-[^\\\x80-\xff\n\015()] * # normal*
-)* # )*
-\) # )
-[\040\t]* )* # If comment found, allow more spaces.
-# optional trailing comments
-)*
-)* # additional domains
-:
-[\040\t]* # Nab whitespace.
-(?:
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: # (
-(?: \\ [^\x80-\xff] |
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
-\) # )
-) # special
-[^\\\x80-\xff\n\015()] * # normal*
-)* # )*
-\) # )
-[\040\t]* )* # If comment found, allow more spaces.
-# optional trailing comments
-)? # optional route
-(?:
-[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
-(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
-# Atom
-| # or
-" # "
-[^\\\x80-\xff\n\015"] * # normal
-(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015"] * )* # ( special normal* )*
-" # "
-# Quoted string
-)
-[\040\t]* # Nab whitespace.
-(?:
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: # (
-(?: \\ [^\x80-\xff] |
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
-\) # )
-) # special
-[^\\\x80-\xff\n\015()] * # normal*
-)* # )*
-\) # )
-[\040\t]* )* # If comment found, allow more spaces.
-(?:
-\.
-[\040\t]* # Nab whitespace.
-(?:
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: # (
-(?: \\ [^\x80-\xff] |
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
-\) # )
-) # special
-[^\\\x80-\xff\n\015()] * # normal*
-)* # )*
-\) # )
-[\040\t]* )* # If comment found, allow more spaces.
-(?:
-[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
-(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
-# Atom
-| # or
-" # "
-[^\\\x80-\xff\n\015"] * # normal
-(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015"] * )* # ( special normal* )*
-" # "
-# Quoted string
-)
-[\040\t]* # Nab whitespace.
-(?:
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: # (
-(?: \\ [^\x80-\xff] |
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
-\) # )
-) # special
-[^\\\x80-\xff\n\015()] * # normal*
-)* # )*
-\) # )
-[\040\t]* )* # If comment found, allow more spaces.
-# additional words
-)*
-@
-[\040\t]* # Nab whitespace.
-(?:
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: # (
-(?: \\ [^\x80-\xff] |
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
-\) # )
-) # special
-[^\\\x80-\xff\n\015()] * # normal*
-)* # )*
-\) # )
-[\040\t]* )* # If comment found, allow more spaces.
-(?:
-[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
-(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
-|
-\[ # [
-(?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
-\] # ]
-)
-[\040\t]* # Nab whitespace.
-(?:
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: # (
-(?: \\ [^\x80-\xff] |
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
-\) # )
-) # special
-[^\\\x80-\xff\n\015()] * # normal*
-)* # )*
-\) # )
-[\040\t]* )* # If comment found, allow more spaces.
-# optional trailing comments
-(?:
-\.
-[\040\t]* # Nab whitespace.
-(?:
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: # (
-(?: \\ [^\x80-\xff] |
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
-\) # )
-) # special
-[^\\\x80-\xff\n\015()] * # normal*
-)* # )*
-\) # )
-[\040\t]* )* # If comment found, allow more spaces.
-(?:
-[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
-(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
-|
-\[ # [
-(?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
-\] # ]
-)
-[\040\t]* # Nab whitespace.
-(?:
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: # (
-(?: \\ [^\x80-\xff] |
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
-\) # )
-) # special
-[^\\\x80-\xff\n\015()] * # normal*
-)* # )*
-\) # )
-[\040\t]* )* # If comment found, allow more spaces.
-# optional trailing comments
-)*
-# address spec
-> # >
-# name and address
-)
-/x
- Alan Other <user\@dom.ain>
- 0: Alan Other <user@dom.ain>
- <user\@dom.ain>
- 0: user@dom.ain
- user\@dom.ain
- 0: user@dom.ain
- \"A. Other\" <user.1234\@dom.ain> (a comment)
- 0: "A. Other" <user.1234@dom.ain>
- A. Other <user.1234\@dom.ain> (a comment)
- 0: Other <user.1234@dom.ain>
- \"/s=user/ou=host/o=place/prmd=uu.yy/admd= /c=gb/\"\@x400-re.lay
- 0: "/s=user/ou=host/o=place/prmd=uu.yy/admd= /c=gb/"@x400-re.lay
- A missing angle <user\@some.where
- 0: user@some.where
- *** Failers
-No match
- The quick brown fox
-No match
-
-/abc\0def\00pqr\000xyz\0000AB/
- abc\0def\00pqr\000xyz\0000AB
- 0: abc\x00def\x00pqr\x00xyz\x000AB
- abc456 abc\0def\00pqr\000xyz\0000ABCDE
- 0: abc\x00def\x00pqr\x00xyz\x000AB
-
-/abc\x0def\x00pqr\x000xyz\x0000AB/
- abc\x0def\x00pqr\x000xyz\x0000AB
- 0: abc\x0def\x00pqr\x000xyz\x0000AB
- abc456 abc\x0def\x00pqr\x000xyz\x0000ABCDE
- 0: abc\x0def\x00pqr\x000xyz\x0000AB
-
-/^[\000-\037]/
- \0A
- 0: \x00
- \01B
- 0: \x01
- \037C
- 0: \x1f
-
-/\0*/
- \0\0\0\0
- 0: \x00\x00\x00\x00
-
-/A\x0{2,3}Z/
- The A\x0\x0Z
- 0: A\x00\x00Z
- An A\0\x0\0Z
- 0: A\x00\x00\x00Z
- *** Failers
-No match
- A\0Z
-No match
- A\0\x0\0\x0Z
-No match
-
-/^(cow|)\1(bell)/
- cowcowbell
- 0: cowcowbell
- 1: cow
- 2: bell
- bell
- 0: bell
- 1:
- 2: bell
- *** Failers
-No match
- cowbell
-No match
-
-/^\s/
- \040abc
- 0:
- \x0cabc
- 0: \x0c
- \nabc
- 0: \x0a
- \rabc
- 0: \x0d
- \tabc
- 0: \x09
- *** Failers
-No match
- abc
-No match
-
-/^a b
-
- c/x
- abc
- 0: abc
-
-/^(a|)\1*b/
- ab
- 0: ab
- 1: a
- aaaab
- 0: aaaab
- 1: a
- b
- 0: b
- 1:
- *** Failers
-No match
- acb
-No match
-
-/^(a|)\1+b/
- aab
- 0: aab
- 1: a
- aaaab
- 0: aaaab
- 1: a
- b
- 0: b
- 1:
- *** Failers
-No match
- ab
-No match
-
-/^(a|)\1?b/
- ab
- 0: ab
- 1: a
- aab
- 0: aab
- 1: a
- b
- 0: b
- 1:
- *** Failers
-No match
- acb
-No match
-
-/^(a|)\1{2}b/
- aaab
- 0: aaab
- 1: a
- b
- 0: b
- 1:
- *** Failers
-No match
- ab
-No match
- aab
-No match
- aaaab
-No match
-
-/^(a|)\1{2,3}b/
- aaab
- 0: aaab
- 1: a
- aaaab
- 0: aaaab
- 1: a
- b
- 0: b
- 1:
- *** Failers
-No match
- ab
-No match
- aab
-No match
- aaaaab
-No match
-
-/ab{1,3}bc/
- abbbbc
- 0: abbbbc
- abbbc
- 0: abbbc
- abbc
- 0: abbc
- *** Failers
-No match
- abc
-No match
- abbbbbc
-No match
-
-/([^.]*)\.([^:]*):[T ]+(.*)/
- track1.title:TBlah blah blah
- 0: track1.title:TBlah blah blah
- 1: track1
- 2: title
- 3: Blah blah blah
-
-/([^.]*)\.([^:]*):[T ]+(.*)/i
- track1.title:TBlah blah blah
- 0: track1.title:TBlah blah blah
- 1: track1
- 2: title
- 3: Blah blah blah
-
-/([^.]*)\.([^:]*):[t ]+(.*)/i
- track1.title:TBlah blah blah
- 0: track1.title:TBlah blah blah
- 1: track1
- 2: title
- 3: Blah blah blah
-
-/^[W-c]+$/
- WXY_^abc
- 0: WXY_^abc
- ***Failers
-No match
- wxy
-No match
-
-/^[W-c]+$/i
- WXY_^abc
- 0: WXY_^abc
- wxy_^ABC
- 0: wxy_^ABC
-
-/^[\x3f-\x5F]+$/i
- WXY_^abc
- 0: WXY_^abc
- wxy_^ABC
- 0: wxy_^ABC
-
-/^abc$/m
- abc
- 0: abc
- qqq\nabc
- 0: abc
- abc\nzzz
- 0: abc
- qqq\nabc\nzzz
- 0: abc
-
-/^abc$/
- abc
- 0: abc
- *** Failers
-No match
- qqq\nabc
-No match
- abc\nzzz
-No match
- qqq\nabc\nzzz
-No match
-
-/\Aabc\Z/m
- abc
- 0: abc
- abc\n
- 0: abc
- *** Failers
-No match
- qqq\nabc
-No match
- abc\nzzz
-No match
- qqq\nabc\nzzz
-No match
-
-/\A(.)*\Z/s
- abc\ndef
- 0: abc\x0adef
- 1: f
-
-/\A(.)*\Z/m
- *** Failers
- 0: *** Failers
- 1: s
- abc\ndef
-No match
-
-/(?:b)|(?::+)/
- b::c
- 0: b
- c::b
- 0: ::
-
-/[-az]+/
- az-
- 0: az-
- *** Failers
- 0: a
- b
-No match
-
-/[az-]+/
- za-
- 0: za-
- *** Failers
- 0: a
- b
-No match
-
-/[a\-z]+/
- a-z
- 0: a-z
- *** Failers
- 0: a
- b
-No match
-
-/[a-z]+/
- abcdxyz
- 0: abcdxyz
-
-/[\d-]+/
- 12-34
- 0: 12-34
- *** Failers
-No match
- aaa
-No match
-
-/[\d-z]+/
- 12-34z
- 0: 12-34z
- *** Failers
-No match
- aaa
-No match
-
-/\x5c/
- \\
- 0: \
-
-/\x20Z/
- the Zoo
- 0: Z
- *** Failers
-No match
- Zulu
-No match
-
-/(abc)\1/i
- abcabc
- 0: abcabc
- 1: abc
- ABCabc
- 0: ABCabc
- 1: ABC
- abcABC
- 0: abcABC
- 1: abc
-
-/ab{3cd/
- ab{3cd
- 0: ab{3cd
-
-/ab{3,cd/
- ab{3,cd
- 0: ab{3,cd
-
-/ab{3,4a}cd/
- ab{3,4a}cd
- 0: ab{3,4a}cd
-
-/{4,5a}bc/
- {4,5a}bc
- 0: {4,5a}bc
-
-/^a.b/
- a\rb
- 0: a\x0db
- *** Failers
-No match
- a\nb
-No match
-
-/abc$/
- abc
- 0: abc
- abc\n
- 0: abc
- *** Failers
-No match
- abc\ndef
-No match
-
-/(abc)\123/
- abc\x53
- 0: abcS
- 1: abc
-
-/(abc)\223/
- abc\x93
- 0: abc\x93
- 1: abc
-
-/(abc)\323/
- abc\xd3
- 0: abc\xd3
- 1: abc
-
-/(abc)\500/
- abc\x40
- 0: abc@
- 1: abc
- abc\100
- 0: abc@
- 1: abc
-
-/(abc)\5000/
- abc\x400
- 0: abc@0
- 1: abc
- abc\x40\x30
- 0: abc@0
- 1: abc
- abc\1000
- 0: abc@0
- 1: abc
- abc\100\x30
- 0: abc@0
- 1: abc
- abc\100\060
- 0: abc@0
- 1: abc
- abc\100\60
- 0: abc@0
- 1: abc
-
-/abc\81/
- abc\081
- 0: abc\x0081
- abc\0\x38\x31
- 0: abc\x0081
-
-/abc\91/
- abc\091
- 0: abc\x0091
- abc\0\x39\x31
- 0: abc\x0091
-
-/(a)(b)(c)(d)(e)(f)(g)(h)(i)(j)(k)(l)\12\123/
- abcdefghijkllS
- 0: abcdefghijkllS
- 1: a
- 2: b
- 3: c
- 4: d
- 5: e
- 6: f
- 7: g
- 8: h
- 9: i
-10: j
-11: k
-12: l
-
-/(a)(b)(c)(d)(e)(f)(g)(h)(i)(j)(k)\12\123/
- abcdefghijk\12S
- 0: abcdefghijk\x0aS
- 1: a
- 2: b
- 3: c
- 4: d
- 5: e
- 6: f
- 7: g
- 8: h
- 9: i
-10: j
-11: k
-
-/ab\gdef/
- abgdef
- 0: abgdef
-
-/a{0}bc/
- bc
- 0: bc
-
-/(a|(bc)){0,0}?xyz/
- xyz
- 0: xyz
-
-/abc[\10]de/
- abc\010de
- 0: abc\x08de
-
-/abc[\1]de/
- abc\1de
- 0: abc\x01de
-
-/(abc)[\1]de/
- abc\1de
- 0: abc\x01de
- 1: abc
-
-/(?s)a.b/
- a\nb
- 0: a\x0ab
-
-/^([^a])([^\b])([^c]*)([^d]{3,4})/
- baNOTccccd
- 0: baNOTcccc
- 1: b
- 2: a
- 3: NOT
- 4: cccc
- baNOTcccd
- 0: baNOTccc
- 1: b
- 2: a
- 3: NOT
- 4: ccc
- baNOTccd
- 0: baNOTcc
- 1: b
- 2: a
- 3: NO
- 4: Tcc
- bacccd
- 0: baccc
- 1: b
- 2: a
- 3:
- 4: ccc
- *** Failers
- 0: *** Failers
- 1: *
- 2: *
- 3: * Fail
- 4: ers
- anything
-No match
- b\bc
-No match
- baccd
-No match
-
-/[^a]/
- Abc
- 0: A
-
-/[^a]/i
- Abc
- 0: b
-
-/[^a]+/
- AAAaAbc
- 0: AAA
-
-/[^a]+/i
- AAAaAbc
- 0: bc
-
-/[^a]+/
- bbb\nccc
- 0: bbb\x0accc
-
-/[^k]$/
- abc
- 0: c
- *** Failers
- 0: s
- abk
-No match
-
-/[^k]{2,3}$/
- abc
- 0: abc
- kbc
- 0: bc
- kabc
- 0: abc
- *** Failers
- 0: ers
- abk
-No match
- akb
-No match
- akk
-No match
-
-/^\d{8,}\@.+[^k]$/
- 12345678\@a.b.c.d
- 0: 12345678@a.b.c.d
- 123456789\@x.y.z
- 0: 123456789@x.y.z
- *** Failers
-No match
- 12345678\@x.y.uk
-No match
- 1234567\@a.b.c.d
-No match
-
-/(a)\1{8,}/
- aaaaaaaaa
- 0: aaaaaaaaa
- 1: a
- aaaaaaaaaa
- 0: aaaaaaaaaa
- 1: a
- *** Failers
-No match
- aaaaaaa
-No match
-
-/[^a]/
- aaaabcd
- 0: b
- aaAabcd
- 0: A
-
-/[^a]/i
- aaaabcd
- 0: b
- aaAabcd
- 0: b
-
-/[^az]/
- aaaabcd
- 0: b
- aaAabcd
- 0: A
-
-/[^az]/i
- aaaabcd
- 0: b
- aaAabcd
- 0: b
-
-/\000\001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037\040\041\042\043\044\045\046\047\050\051\052\053\054\055\056\057\060\061\062\063\064\065\066\067\070\071\072\073\074\075\076\077\100\101\102\103\104\105\106\107\110\111\112\113\114\115\116\117\120\121\122\123\124\125\126\127\130\131\132\133\134\135\136\137\140\141\142\143\144\145\146\147\150\151\152\153\154\155\156\157\160\161\162\163\164\165\166\167\170\171\172\173\174\175\176\177\200\201\202\203\204\205\206\207\210\211\212\213\214\215\216\217\220\221\222\223\224\225\226\227\230\231\232\233\234\235\236\237\240\241\242\243\244\245\246\247\250\251\252\253\254\255\256\257\260\261\262\263\264\265\266\267\270\271\272\273\274\275\276\277\300\301\302\303\304\305\306\307\310\311\312\313\314\315\316\317\320\321\322\323\324\325\326\327\330\331\332\333\334\335\336\337\340\341\342\343\344\345\346\347\350\351\352\353\354\355\356\357\360\361\362\363\364\365\366\367\370\371\372\373\374\375\376\377/
- \000\001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037\040\041\042\043\044\045\046\047\050\051\052\053\054\055\056\057\060\061\062\063\064\065\066\067\070\071\072\073\074\075\076\077\100\101\102\103\104\105\106\107\110\111\112\113\114\115\116\117\120\121\122\123\124\125\126\127\130\131\132\133\134\135\136\137\140\141\142\143\144\145\146\147\150\151\152\153\154\155\156\157\160\161\162\163\164\165\166\167\170\171\172\173\174\175\176\177\200\201\202\203\204\205\206\207\210\211\212\213\214\215\216\217\220\221\222\223\224\225\226\227\230\231\232\233\234\235\236\237\240\241\242\243\244\245\246\247\250\251\252\253\254\255\256\257\260\261\262\263\264\265\266\267\270\271\272\273\274\275\276\277\300\301\302\303\304\305\306\307\310\311\312\313\314\315\316\317\320\321\322\323\324\325\326\327\330\331\332\333\334\335\336\337\340\341\342\343\344\345\346\347\350\351\352\353\354\355\356\357\360\361\362\363\364\365\366\367\370\371\372\373\374\375\376\377
- 0: \x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~\x7f\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab\xac\xad\xae\xaf\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff
-
-/P[^*]TAIRE[^*]{1,6}?LL/
- xxxxxxxxxxxPSTAIREISLLxxxxxxxxx
- 0: PSTAIREISLL
-
-/P[^*]TAIRE[^*]{1,}?LL/
- xxxxxxxxxxxPSTAIREISLLxxxxxxxxx
- 0: PSTAIREISLL
-
-/(\.\d\d[1-9]?)\d+/
- 1.230003938
- 0: .230003938
- 1: .23
- 1.875000282
- 0: .875000282
- 1: .875
- 1.235
- 0: .235
- 1: .23
-
-/(\.\d\d((?=0)|\d(?=\d)))/
- 1.230003938
- 0: .23
- 1: .23
- 2:
- 1.875000282
- 0: .875
- 1: .875
- 2: 5
- *** Failers
-No match
- 1.235
-No match
-
-/a(?)b/
- ab
- 0: ab
-
-/\b(foo)\s+(\w+)/i
- Food is on the foo table
- 0: foo table
- 1: foo
- 2: table
-
-/foo(.*)bar/
- The food is under the bar in the barn.
- 0: food is under the bar in the bar
- 1: d is under the bar in the
-
-/foo(.*?)bar/
- The food is under the bar in the barn.
- 0: food is under the bar
- 1: d is under the
-
-/(.*)(\d*)/
- I have 2 numbers: 53147
- 0: I have 2 numbers: 53147
- 1: I have 2 numbers: 53147
- 2:
-
-/(.*)(\d+)/
- I have 2 numbers: 53147
- 0: I have 2 numbers: 53147
- 1: I have 2 numbers: 5314
- 2: 7
-
-/(.*?)(\d*)/
- I have 2 numbers: 53147
- 0:
- 1:
- 2:
-
-/(.*?)(\d+)/
- I have 2 numbers: 53147
- 0: I have 2
- 1: I have
- 2: 2
-
-/(.*)(\d+)$/
- I have 2 numbers: 53147
- 0: I have 2 numbers: 53147
- 1: I have 2 numbers: 5314
- 2: 7
-
-/(.*?)(\d+)$/
- I have 2 numbers: 53147
- 0: I have 2 numbers: 53147
- 1: I have 2 numbers:
- 2: 53147
-
-/(.*)\b(\d+)$/
- I have 2 numbers: 53147
- 0: I have 2 numbers: 53147
- 1: I have 2 numbers:
- 2: 53147
-
-/(.*\D)(\d+)$/
- I have 2 numbers: 53147
- 0: I have 2 numbers: 53147
- 1: I have 2 numbers:
- 2: 53147
-
-/^\D*(?!123)/
- ABC123
- 0: AB
-
-/^(\D*)(?=\d)(?!123)/
- ABC445
- 0: ABC
- 1: ABC
- *** Failers
-No match
- ABC123
-No match
-
-/^[W-]46]/
- W46]789
- 0: W46]
- -46]789
- 0: -46]
- *** Failers
-No match
- Wall
-No match
- Zebra
-No match
- 42
-No match
- [abcd]
-No match
- ]abcd[
-No match
-
-/^[W-\]46]/
- W46]789
- 0: W
- Wall
- 0: W
- Zebra
- 0: Z
- Xylophone
- 0: X
- 42
- 0: 4
- [abcd]
- 0: [
- ]abcd[
- 0: ]
- \\backslash
- 0: \
- *** Failers
-No match
- -46]789
-No match
- well
-No match
-
-/\d\d\/\d\d\/\d\d\d\d/
- 01/01/2000
- 0: 01/01/2000
-
-/word (?:[a-zA-Z0-9]+ ){0,10}otherword/
- word cat dog elephant mussel cow horse canary baboon snake shark otherword
- 0: word cat dog elephant mussel cow horse canary baboon snake shark otherword
- word cat dog elephant mussel cow horse canary baboon snake shark
-No match
-
-/word (?:[a-zA-Z0-9]+ ){0,300}otherword/
- word cat dog elephant mussel cow horse canary baboon snake shark the quick brown fox and the lazy dog and several other words getting close to thirty by now I hope
-No match
-
-/^(a){0,0}/
- bcd
- 0:
- abc
- 0:
- aab
- 0:
-
-/^(a){0,1}/
- bcd
- 0:
- abc
- 0: a
- 1: a
- aab
- 0: a
- 1: a
-
-/^(a){0,2}/
- bcd
- 0:
- abc
- 0: a
- 1: a
- aab
- 0: aa
- 1: a
-
-/^(a){0,3}/
- bcd
- 0:
- abc
- 0: a
- 1: a
- aab
- 0: aa
- 1: a
- aaa
- 0: aaa
- 1: a
-
-/^(a){0,}/
- bcd
- 0:
- abc
- 0: a
- 1: a
- aab
- 0: aa
- 1: a
- aaa
- 0: aaa
- 1: a
- aaaaaaaa
- 0: aaaaaaaa
- 1: a
-
-/^(a){1,1}/
- bcd
-No match
- abc
- 0: a
- 1: a
- aab
- 0: a
- 1: a
-
-/^(a){1,2}/
- bcd
-No match
- abc
- 0: a
- 1: a
- aab
- 0: aa
- 1: a
-
-/^(a){1,3}/
- bcd
-No match
- abc
- 0: a
- 1: a
- aab
- 0: aa
- 1: a
- aaa
- 0: aaa
- 1: a
-
-/^(a){1,}/
- bcd
-No match
- abc
- 0: a
- 1: a
- aab
- 0: aa
- 1: a
- aaa
- 0: aaa
- 1: a
- aaaaaaaa
- 0: aaaaaaaa
- 1: a
-
-/.*\.gif/
- borfle\nbib.gif\nno
- 0: bib.gif
-
-/.{0,}\.gif/
- borfle\nbib.gif\nno
- 0: bib.gif
-
-/.*\.gif/m
- borfle\nbib.gif\nno
- 0: bib.gif
-
-/.*\.gif/s
- borfle\nbib.gif\nno
- 0: borfle\x0abib.gif
-
-/.*\.gif/ms
- borfle\nbib.gif\nno
- 0: borfle\x0abib.gif
-
-/.*$/
- borfle\nbib.gif\nno
- 0: no
-
-/.*$/m
- borfle\nbib.gif\nno
- 0: borfle
-
-/.*$/s
- borfle\nbib.gif\nno
- 0: borfle\x0abib.gif\x0ano
-
-/.*$/ms
- borfle\nbib.gif\nno
- 0: borfle\x0abib.gif\x0ano
-
-/.*$/
- borfle\nbib.gif\nno\n
- 0: no
-
-/.*$/m
- borfle\nbib.gif\nno\n
- 0: borfle
-
-/.*$/s
- borfle\nbib.gif\nno\n
- 0: borfle\x0abib.gif\x0ano\x0a
-
-/.*$/ms
- borfle\nbib.gif\nno\n
- 0: borfle\x0abib.gif\x0ano\x0a
-
-/(.*X|^B)/
- abcde\n1234Xyz
- 0: 1234X
- 1: 1234X
- BarFoo
- 0: B
- 1: B
- *** Failers
-No match
- abcde\nBar
-No match
-
-/(.*X|^B)/m
- abcde\n1234Xyz
- 0: 1234X
- 1: 1234X
- BarFoo
- 0: B
- 1: B
- abcde\nBar
- 0: B
- 1: B
-
-/(.*X|^B)/s
- abcde\n1234Xyz
- 0: abcde\x0a1234X
- 1: abcde\x0a1234X
- BarFoo
- 0: B
- 1: B
- *** Failers
-No match
- abcde\nBar
-No match
-
-/(.*X|^B)/ms
- abcde\n1234Xyz
- 0: abcde\x0a1234X
- 1: abcde\x0a1234X
- BarFoo
- 0: B
- 1: B
- abcde\nBar
- 0: B
- 1: B
-
-/(?s)(.*X|^B)/
- abcde\n1234Xyz
- 0: abcde\x0a1234X
- 1: abcde\x0a1234X
- BarFoo
- 0: B
- 1: B
- *** Failers
-No match
- abcde\nBar
-No match
-
-/(?s:.*X|^B)/
- abcde\n1234Xyz
- 0: abcde\x0a1234X
- BarFoo
- 0: B
- *** Failers
-No match
- abcde\nBar
-No match
-
-/^.*B/
- **** Failers
-No match
- abc\nB
-No match
-
-/(?s)^.*B/
- abc\nB
- 0: abc\x0aB
-
-/(?m)^.*B/
- abc\nB
- 0: B
-
-/(?ms)^.*B/
- abc\nB
- 0: abc\x0aB
-
-/(?ms)^B/
- abc\nB
- 0: B
-
-/(?s)B$/
- B\n
- 0: B
-
-/^[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]/
- 123456654321
- 0: 123456654321
-
-/^\d\d\d\d\d\d\d\d\d\d\d\d/
- 123456654321
- 0: 123456654321
-
-/^[\d][\d][\d][\d][\d][\d][\d][\d][\d][\d][\d][\d]/
- 123456654321
- 0: 123456654321
-
-/^[abc]{12}/
- abcabcabcabc
- 0: abcabcabcabc
-
-/^[a-c]{12}/
- abcabcabcabc
- 0: abcabcabcabc
-
-/^(a|b|c){12}/
- abcabcabcabc
- 0: abcabcabcabc
- 1: c
-
-/^[abcdefghijklmnopqrstuvwxy0123456789]/
- n
- 0: n
- *** Failers
-No match
- z
-No match
-
-/abcde{0,0}/
- abcd
- 0: abcd
- *** Failers
-No match
- abce
-No match
-
-/ab[cd]{0,0}e/
- abe
- 0: abe
- *** Failers
-No match
- abcde
-No match
-
-/ab(c){0,0}d/
- abd
- 0: abd
- *** Failers
-No match
- abcd
-No match
-
-/a(b*)/
- a
- 0: a
- 1:
- ab
- 0: ab
- 1: b
- abbbb
- 0: abbbb
- 1: bbbb
- *** Failers
- 0: a
- 1:
- bbbbb
-No match
-
-/ab\d{0}e/
- abe
- 0: abe
- *** Failers
-No match
- ab1e
-No match
-
-/"([^\\"]+|\\.)*"/
- the \"quick\" brown fox
- 0: "quick"
- 1: quick
- \"the \\\"quick\\\" brown fox\"
- 0: "the \"quick\" brown fox"
- 1: brown fox
-
-/.*?/g+
- abc
- 0:
- 0+ abc
- 0: a
- 0+ bc
- 0:
- 0+ bc
- 0: b
- 0+ c
- 0:
- 0+ c
- 0: c
- 0+
- 0:
- 0+
-
-/\b/g+
- abc
- 0:
- 0+ abc
- 0:
- 0+
-
-/\b/+g
- abc
- 0:
- 0+ abc
- 0:
- 0+
-
-//g
- abc
- 0:
- 0:
- 0:
- 0:
-
-/<tr([\w\W\s\d][^<>]{0,})><TD([\w\W\s\d][^<>]{0,})>([\d]{0,}\.)(.*)((<BR>([\w\W\s\d][^<>]{0,})|[\s]{0,}))<\/a><\/TD><TD([\w\W\s\d][^<>]{0,})>([\w\W\s\d][^<>]{0,})<\/TD><TD([\w\W\s\d][^<>]{0,})>([\w\W\s\d][^<>]{0,})<\/TD><\/TR>/is
- <TR BGCOLOR='#DBE9E9'><TD align=left valign=top>43.<a href='joblist.cfm?JobID=94 6735&Keyword='>Word Processor<BR>(N-1286)</a></TD><TD align=left valign=top>Lega lstaff.com</TD><TD align=left valign=top>CA - Statewide</TD></TR>
- 0: <TR BGCOLOR='#DBE9E9'><TD align=left valign=top>43.<a href='joblist.cfm?JobID=94 6735&Keyword='>Word Processor<BR>(N-1286)</a></TD><TD align=left valign=top>Lega lstaff.com</TD><TD align=left valign=top>CA - Statewide</TD></TR>
- 1: BGCOLOR='#DBE9E9'
- 2: align=left valign=top
- 3: 43.
- 4: <a href='joblist.cfm?JobID=94 6735&Keyword='>Word Processor<BR>(N-1286)
- 5:
- 6:
- 7: <unset>
- 8: align=left valign=top
- 9: Lega lstaff.com
-10: align=left valign=top
-11: CA - Statewide
-
-/a[^a]b/
- acb
- 0: acb
- a\nb
- 0: a\x0ab
-
-/a.b/
- acb
- 0: acb
- *** Failers
-No match
- a\nb
-No match
-
-/a[^a]b/s
- acb
- 0: acb
- a\nb
- 0: a\x0ab
-
-/a.b/s
- acb
- 0: acb
- a\nb
- 0: a\x0ab
-
-/^(b+?|a){1,2}?c/
- bac
- 0: bac
- 1: a
- bbac
- 0: bbac
- 1: a
- bbbac
- 0: bbbac
- 1: a
- bbbbac
- 0: bbbbac
- 1: a
- bbbbbac
- 0: bbbbbac
- 1: a
-
-/^(b+|a){1,2}?c/
- bac
- 0: bac
- 1: a
- bbac
- 0: bbac
- 1: a
- bbbac
- 0: bbbac
- 1: a
- bbbbac
- 0: bbbbac
- 1: a
- bbbbbac
- 0: bbbbbac
- 1: a
-
-/(?!\A)x/m
- x\nb\n
-No match
- a\bx\n
- 0: x
-
-/\x0{ab}/
- \0{ab}
- 0: \x00{ab}
-
-/(A|B)*?CD/
- CD
- 0: CD
-
-/(A|B)*CD/
- CD
- 0: CD
-
-/(AB)*?\1/
- ABABAB
- 0: ABAB
- 1: AB
-
-/(AB)*\1/
- ABABAB
- 0: ABABAB
- 1: AB
-
-/(?<!bar)foo/
- foo
- 0: foo
- catfood
- 0: foo
- arfootle
- 0: foo
- rfoosh
- 0: foo
- *** Failers
-No match
- barfoo
-No match
- towbarfoo
-No match
-
-/\w{3}(?<!bar)foo/
- catfood
- 0: catfoo
- *** Failers
-No match
- foo
-No match
- barfoo
-No match
- towbarfoo
-No match
-
-/(?<=(foo)a)bar/
- fooabar
- 0: bar
- 1: foo
- *** Failers
-No match
- bar
-No match
- foobbar
-No match
-
-/\Aabc\z/m
- abc
- 0: abc
- *** Failers
-No match
- abc\n
-No match
- qqq\nabc
-No match
- abc\nzzz
-No match
- qqq\nabc\nzzz
-No match
-
-"(?>.*/)foo"
- /this/is/a/very/long/line/in/deed/with/very/many/slashes/in/it/you/see/
-No match
-
-"(?>.*/)foo"
- /this/is/a/very/long/line/in/deed/with/very/many/slashes/in/and/foo
- 0: /this/is/a/very/long/line/in/deed/with/very/many/slashes/in/and/foo
-
-/(?>(\.\d\d[1-9]?))\d+/
- 1.230003938
- 0: .230003938
- 1: .23
- 1.875000282
- 0: .875000282
- 1: .875
- *** Failers
-No match
- 1.235
-No match
-
-/^((?>\w+)|(?>\s+))*$/
- now is the time for all good men to come to the aid of the party
- 0: now is the time for all good men to come to the aid of the party
- 1: party
- *** Failers
-No match
- this is not a line with only words and spaces!
-No match
-
-/(\d+)(\w)/
- 12345a
- 0: 12345a
- 1: 12345
- 2: a
- 12345+
- 0: 12345
- 1: 1234
- 2: 5
-
-/((?>\d+))(\w)/
- 12345a
- 0: 12345a
- 1: 12345
- 2: a
- *** Failers
-No match
- 12345+
-No match
-
-/(?>a+)b/
- aaab
- 0: aaab
-
-/((?>a+)b)/
- aaab
- 0: aaab
- 1: aaab
-
-/(?>(a+))b/
- aaab
- 0: aaab
- 1: aaa
-
-/(?>b)+/
- aaabbbccc
- 0: bbb
-
-/(?>a+|b+|c+)*c/
- aaabbbbccccd
- 0: aaabbbbc
-
-/((?>[^()]+)|\([^()]*\))+/
- ((abc(ade)ufh()()x
- 0: abc(ade)ufh()()x
- 1: x
-
-/\(((?>[^()]+)|\([^()]+\))+\)/
- (abc)
- 0: (abc)
- 1: abc
- (abc(def)xyz)
- 0: (abc(def)xyz)
- 1: xyz
- *** Failers
-No match
- ((()aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-No match
-
-/a(?-i)b/i
- ab
- 0: ab
- Ab
- 0: Ab
- *** Failers
-No match
- aB
-No match
- AB
-No match
-
-/(a (?x)b c)d e/
- a bcd e
- 0: a bcd e
- 1: a bc
- *** Failers
-No match
- a b cd e
-No match
- abcd e
-No match
- a bcde
-No match
-
-/(a b(?x)c d (?-x)e f)/
- a bcde f
- 0: a bcde f
- 1: a bcde f
- *** Failers
-No match
- abcdef
-No match
-
-/(a(?i)b)c/
- abc
- 0: abc
- 1: ab
- aBc
- 0: aBc
- 1: aB
- *** Failers
-No match
- abC
-No match
- aBC
-No match
- Abc
-No match
- ABc
-No match
- ABC
-No match
- AbC
-No match
-
-/a(?i:b)c/
- abc
- 0: abc
- aBc
- 0: aBc
- *** Failers
-No match
- ABC
-No match
- abC
-No match
- aBC
-No match
-
-/a(?i:b)*c/
- aBc
- 0: aBc
- aBBc
- 0: aBBc
- *** Failers
-No match
- aBC
-No match
- aBBC
-No match
-
-/a(?=b(?i)c)\w\wd/
- abcd
- 0: abcd
- abCd
- 0: abCd
- *** Failers
-No match
- aBCd
-No match
- abcD
-No match
-
-/(?s-i:more.*than).*million/i
- more than million
- 0: more than million
- more than MILLION
- 0: more than MILLION
- more \n than Million
- 0: more \x0a than Million
- *** Failers
-No match
- MORE THAN MILLION
-No match
- more \n than \n million
-No match
-
-/(?:(?s-i)more.*than).*million/i
- more than million
- 0: more than million
- more than MILLION
- 0: more than MILLION
- more \n than Million
- 0: more \x0a than Million
- *** Failers
-No match
- MORE THAN MILLION
-No match
- more \n than \n million
-No match
-
-/(?>a(?i)b+)+c/
- abc
- 0: abc
- aBbc
- 0: aBbc
- aBBc
- 0: aBBc
- *** Failers
-No match
- Abc
-No match
- abAb
-No match
- abbC
-No match
-
-/(?=a(?i)b)\w\wc/
- abc
- 0: abc
- aBc
- 0: aBc
- *** Failers
-No match
- Ab
-No match
- abC
-No match
- aBC
-No match
-
-/(?<=a(?i)b)(\w\w)c/
- abxxc
- 0: xxc
- 1: xx
- aBxxc
- 0: xxc
- 1: xx
- *** Failers
-No match
- Abxxc
-No match
- ABxxc
-No match
- abxxC
-No match
-
-/(?:(a)|b)(?(1)A|B)/
- aA
- 0: aA
- 1: a
- bB
- 0: bB
- *** Failers
-No match
- aB
-No match
- bA
-No match
-
-/^(a)?(?(1)a|b)+$/
- aa
- 0: aa
- 1: a
- b
- 0: b
- bb
- 0: bb
- *** Failers
-No match
- ab
-No match
-
-/^(?(?=abc)\w{3}:|\d\d)$/
- abc:
- 0: abc:
- 12
- 0: 12
- *** Failers
-No match
- 123
-No match
- xyz
-No match
-
-/^(?(?!abc)\d\d|\w{3}:)$/
- abc:
- 0: abc:
- 12
- 0: 12
- *** Failers
-No match
- 123
-No match
- xyz
-No match
-
-/(?(?<=foo)bar|cat)/
- foobar
- 0: bar
- cat
- 0: cat
- fcat
- 0: cat
- focat
- 0: cat
- *** Failers
-No match
- foocat
-No match
-
-/(?(?<!foo)cat|bar)/
- foobar
- 0: bar
- cat
- 0: cat
- fcat
- 0: cat
- focat
- 0: cat
- *** Failers
-No match
- foocat
-No match
-
-/( \( )? [^()]+ (?(1) \) |) /x
- abcd
- 0: abcd
- (abcd)
- 0: (abcd)
- 1: (
- the quick (abcd) fox
- 0: the quick
- (abcd
- 0: abcd
-
-/( \( )? [^()]+ (?(1) \) ) /x
- abcd
- 0: abcd
- (abcd)
- 0: (abcd)
- 1: (
- the quick (abcd) fox
- 0: the quick
- (abcd
- 0: abcd
-
-/^(?(2)a|(1)(2))+$/
- 12
- 0: 12
- 1: 1
- 2: 2
- 12a
- 0: 12a
- 1: 1
- 2: 2
- 12aa
- 0: 12aa
- 1: 1
- 2: 2
- *** Failers
-No match
- 1234
-No match
-
-/((?i)blah)\s+\1/
- blah blah
- 0: blah blah
- 1: blah
- BLAH BLAH
- 0: BLAH BLAH
- 1: BLAH
- Blah Blah
- 0: Blah Blah
- 1: Blah
- blaH blaH
- 0: blaH blaH
- 1: blaH
- *** Failers
-No match
- blah BLAH
-No match
- Blah blah
-No match
- blaH blah
-No match
-
-/((?i)blah)\s+(?i:\1)/
- blah blah
- 0: blah blah
- 1: blah
- BLAH BLAH
- 0: BLAH BLAH
- 1: BLAH
- Blah Blah
- 0: Blah Blah
- 1: Blah
- blaH blaH
- 0: blaH blaH
- 1: blaH
- blah BLAH
- 0: blah BLAH
- 1: blah
- Blah blah
- 0: Blah blah
- 1: Blah
- blaH blah
- 0: blaH blah
- 1: blaH
-
-/(?>a*)*/
- a
- 0: a
- aa
- 0: aa
- aaaa
- 0: aaaa
-
-/(abc|)+/
- abc
- 0: abc
- 1:
- abcabc
- 0: abcabc
- 1:
- abcabcabc
- 0: abcabcabc
- 1:
- xyz
- 0:
- 1:
-
-/([a]*)*/
- a
- 0: a
- 1:
- aaaaa
- 0: aaaaa
- 1:
-
-/([ab]*)*/
- a
- 0: a
- 1:
- b
- 0: b
- 1:
- ababab
- 0: ababab
- 1:
- aaaabcde
- 0: aaaab
- 1:
- bbbb
- 0: bbbb
- 1:
-
-/([^a]*)*/
- b
- 0: b
- 1:
- bbbb
- 0: bbbb
- 1:
- aaa
- 0:
- 1:
-
-/([^ab]*)*/
- cccc
- 0: cccc
- 1:
- abab
- 0:
- 1:
-
-/([a]*?)*/
- a
- 0:
- 1:
- aaaa
- 0:
- 1:
-
-/([ab]*?)*/
- a
- 0:
- 1:
- b
- 0:
- 1:
- abab
- 0:
- 1:
- baba
- 0:
- 1:
-
-/([^a]*?)*/
- b
- 0:
- 1:
- bbbb
- 0:
- 1:
- aaa
- 0:
- 1:
-
-/([^ab]*?)*/
- c
- 0:
- 1:
- cccc
- 0:
- 1:
- baba
- 0:
- 1:
-
-/(?>a*)*/
- a
- 0: a
- aaabcde
- 0: aaa
-
-/((?>a*))*/
- aaaaa
- 0: aaaaa
- 1:
- aabbaa
- 0: aa
- 1:
-
-/((?>a*?))*/
- aaaaa
- 0:
- 1:
- aabbaa
- 0:
- 1:
-
-/(?(?=[^a-z]+[a-z]) \d{2}-[a-z]{3}-\d{2} | \d{2}-\d{2}-\d{2} ) /x
- 12-sep-98
- 0: 12-sep-98
- 12-09-98
- 0: 12-09-98
- *** Failers
-No match
- sep-12-98
-No match
-
-/(?<=(foo))bar\1/
- foobarfoo
- 0: barfoo
- 1: foo
- foobarfootling
- 0: barfoo
- 1: foo
- *** Failers
-No match
- foobar
-No match
- barfoo
-No match
-
-/(?i:saturday|sunday)/
- saturday
- 0: saturday
- sunday
- 0: sunday
- Saturday
- 0: Saturday
- Sunday
- 0: Sunday
- SATURDAY
- 0: SATURDAY
- SUNDAY
- 0: SUNDAY
- SunDay
- 0: SunDay
-
-/(a(?i)bc|BB)x/
- abcx
- 0: abcx
- 1: abc
- aBCx
- 0: aBCx
- 1: aBC
- bbx
- 0: bbx
- 1: bb
- BBx
- 0: BBx
- 1: BB
- *** Failers
-No match
- abcX
-No match
- aBCX
-No match
- bbX
-No match
- BBX
-No match
-
-/^([ab](?i)[cd]|[ef])/
- ac
- 0: ac
- 1: ac
- aC
- 0: aC
- 1: aC
- bD
- 0: bD
- 1: bD
- elephant
- 0: e
- 1: e
- Europe
- 0: E
- 1: E
- frog
- 0: f
- 1: f
- France
- 0: F
- 1: F
- *** Failers
-No match
- Africa
-No match
-
-/^(ab|a(?i)[b-c](?m-i)d|x(?i)y|z)/
- ab
- 0: ab
- 1: ab
- aBd
- 0: aBd
- 1: aBd
- xy
- 0: xy
- 1: xy
- xY
- 0: xY
- 1: xY
- zebra
- 0: z
- 1: z
- Zambesi
- 0: Z
- 1: Z
- *** Failers
-No match
- aCD
-No match
- XY
-No match
-
-/(?<=foo\n)^bar/m
- foo\nbar
- 0: bar
- *** Failers
-No match
- bar
-No match
- baz\nbar
-No match
-
-/(?<=(?<!foo)bar)baz/
- barbaz
- 0: baz
- barbarbaz
- 0: baz
- koobarbaz
- 0: baz
- *** Failers
-No match
- baz
-No match
- foobarbaz
-No match
-
-/The case of aaaaaa is missed out below because I think Perl 5.005_02 gets/
-/it wrong; it sets $1 to aaa rather than aa. Compare the following test,/
-No match
-/where it does set $1 to aa when matching aaaaaa./
-No match
-
-/^(a\1?){4}$/
- a
-No match
- aa
-No match
- aaa
-No match
- aaaa
- 0: aaaa
- 1: a
- aaaaa
- 0: aaaaa
- 1: a
- aaaaaaa
- 0: aaaaaaa
- 1: a
- aaaaaaaa
-No match
- aaaaaaaaa
-No match
- aaaaaaaaaa
- 0: aaaaaaaaaa
- 1: aaaa
- aaaaaaaaaaa
-No match
- aaaaaaaaaaaa
-No match
- aaaaaaaaaaaaa
-No match
- aaaaaaaaaaaaaa
-No match
- aaaaaaaaaaaaaaa
-No match
- aaaaaaaaaaaaaaaa
-No match
-
-/^(a\1?)(a\1?)(a\2?)(a\3?)$/
- a
-No match
- aa
-No match
- aaa
-No match
- aaaa
- 0: aaaa
- 1: a
- 2: a
- 3: a
- 4: a
- aaaaa
- 0: aaaaa
- 1: a
- 2: aa
- 3: a
- 4: a
- aaaaaa
- 0: aaaaaa
- 1: a
- 2: aa
- 3: a
- 4: aa
- aaaaaaa
- 0: aaaaaaa
- 1: a
- 2: aa
- 3: aaa
- 4: a
- aaaaaaaa
-No match
- aaaaaaaaa
-No match
- aaaaaaaaaa
- 0: aaaaaaaaaa
- 1: a
- 2: aa
- 3: aaa
- 4: aaaa
- aaaaaaaaaaa
-No match
- aaaaaaaaaaaa
-No match
- aaaaaaaaaaaaa
-No match
- aaaaaaaaaaaaaa
-No match
- aaaaaaaaaaaaaaa
-No match
- aaaaaaaaaaaaaaaa
-No match
-
-/The following tests are taken from the Perl 5.005 test suite; some of them/
-/are compatible with 5.004, but I'd rather not have to sort them out./
-No match
-
-/abc/
- abc
- 0: abc
- xabcy
- 0: abc
- ababc
- 0: abc
- *** Failers
-No match
- xbc
-No match
- axc
-No match
- abx
-No match
-
-/ab*c/
- abc
- 0: abc
-
-/ab*bc/
- abc
- 0: abc
- abbc
- 0: abbc
- abbbbc
- 0: abbbbc
-
-/.{1}/
- abbbbc
- 0: a
-
-/.{3,4}/
- abbbbc
- 0: abbb
-
-/ab{0,}bc/
- abbbbc
- 0: abbbbc
-
-/ab+bc/
- abbc
- 0: abbc
- *** Failers
-No match
- abc
-No match
- abq
-No match
-
-/ab{1,}bc/
-
-/ab+bc/
- abbbbc
- 0: abbbbc
-
-/ab{1,}bc/
- abbbbc
- 0: abbbbc
-
-/ab{1,3}bc/
- abbbbc
- 0: abbbbc
-
-/ab{3,4}bc/
- abbbbc
- 0: abbbbc
-
-/ab{4,5}bc/
- *** Failers
-No match
- abq
-No match
- abbbbc
-No match
-
-/ab?bc/
- abbc
- 0: abbc
- abc
- 0: abc
-
-/ab{0,1}bc/
- abc
- 0: abc
-
-/ab?bc/
-
-/ab?c/
- abc
- 0: abc
-
-/ab{0,1}c/
- abc
- 0: abc
-
-/^abc$/
- abc
- 0: abc
- *** Failers
-No match
- abbbbc
-No match
- abcc
-No match
-
-/^abc/
- abcc
- 0: abc
-
-/^abc$/
-
-/abc$/
- aabc
- 0: abc
- *** Failers
-No match
- aabc
- 0: abc
- aabcd
-No match
-
-/^/
- abc
- 0:
-
-/$/
- abc
- 0:
-
-/a.c/
- abc
- 0: abc
- axc
- 0: axc
-
-/a.*c/
- axyzc
- 0: axyzc
-
-/a[bc]d/
- abd
- 0: abd
- *** Failers
-No match
- axyzd
-No match
- abc
-No match
-
-/a[b-d]e/
- ace
- 0: ace
-
-/a[b-d]/
- aac
- 0: ac
-
-/a[-b]/
- a-
- 0: a-
-
-/a[b-]/
- a-
- 0: a-
-
-/a]/
- a]
- 0: a]
-
-/a[]]b/
- a]b
- 0: a]b
-
-/a[^bc]d/
- aed
- 0: aed
- *** Failers
-No match
- abd
-No match
- abd
-No match
-
-/a[^-b]c/
- adc
- 0: adc
-
-/a[^]b]c/
- adc
- 0: adc
- *** Failers
-No match
- a-c
- 0: a-c
- a]c
-No match
-
-/\ba\b/
- a-
- 0: a
- -a
- 0: a
- -a-
- 0: a
-
-/\by\b/
- *** Failers
-No match
- xy
-No match
- yz
-No match
- xyz
-No match
-
-/\Ba\B/
- *** Failers
- 0: a
- a-
-No match
- -a
-No match
- -a-
-No match
-
-/\By\b/
- xy
- 0: y
-
-/\by\B/
- yz
- 0: y
-
-/\By\B/
- xyz
- 0: y
-
-/\w/
- a
- 0: a
-
-/\W/
- -
- 0: -
- *** Failers
- 0: *
- -
- 0: -
- a
-No match
-
-/a\sb/
- a b
- 0: a b
-
-/a\Sb/
- a-b
- 0: a-b
- *** Failers
-No match
- a-b
- 0: a-b
- a b
-No match
-
-/\d/
- 1
- 0: 1
-
-/\D/
- -
- 0: -
- *** Failers
- 0: *
- -
- 0: -
- 1
-No match
-
-/[\w]/
- a
- 0: a
-
-/[\W]/
- -
- 0: -
- *** Failers
- 0: *
- -
- 0: -
- a
-No match
-
-/a[\s]b/
- a b
- 0: a b
-
-/a[\S]b/
- a-b
- 0: a-b
- *** Failers
-No match
- a-b
- 0: a-b
- a b
-No match
-
-/[\d]/
- 1
- 0: 1
-
-/[\D]/
- -
- 0: -
- *** Failers
- 0: *
- -
- 0: -
- 1
-No match
-
-/ab|cd/
- abc
- 0: ab
- abcd
- 0: ab
-
-/()ef/
- def
- 0: ef
- 1:
-
-/$b/
-
-/a\(b/
- a(b
- 0: a(b
-
-/a\(*b/
- ab
- 0: ab
- a((b
- 0: a((b
-
-/a\\b/
- a\b
-No match
-
-/((a))/
- abc
- 0: a
- 1: a
- 2: a
-
-/(a)b(c)/
- abc
- 0: abc
- 1: a
- 2: c
-
-/a+b+c/
- aabbabc
- 0: abc
-
-/a{1,}b{1,}c/
- aabbabc
- 0: abc
-
-/a.+?c/
- abcabc
- 0: abc
-
-/(a+|b)*/
- ab
- 0: ab
- 1: b
-
-/(a+|b){0,}/
- ab
- 0: ab
- 1: b
-
-/(a+|b)+/
- ab
- 0: ab
- 1: b
-
-/(a+|b){1,}/
- ab
- 0: ab
- 1: b
-
-/(a+|b)?/
- ab
- 0: a
- 1: a
-
-/(a+|b){0,1}/
- ab
- 0: a
- 1: a
-
-/[^ab]*/
- cde
- 0: cde
-
-/abc/
- *** Failers
-No match
- b
-No match
-
-
-/a*/
-
-
-/([abc])*d/
- abbbcd
- 0: abbbcd
- 1: c
-
-/([abc])*bcd/
- abcd
- 0: abcd
- 1: a
-
-/a|b|c|d|e/
- e
- 0: e
-
-/(a|b|c|d|e)f/
- ef
- 0: ef
- 1: e
-
-/abcd*efg/
- abcdefg
- 0: abcdefg
-
-/ab*/
- xabyabbbz
- 0: ab
- xayabbbz
- 0: a
-
-/(ab|cd)e/
- abcde
- 0: cde
- 1: cd
-
-/[abhgefdc]ij/
- hij
- 0: hij
-
-/^(ab|cd)e/
-
-/(abc|)ef/
- abcdef
- 0: ef
- 1:
-
-/(a|b)c*d/
- abcd
- 0: bcd
- 1: b
-
-/(ab|ab*)bc/
- abc
- 0: abc
- 1: a
-
-/a([bc]*)c*/
- abc
- 0: abc
- 1: bc
-
-/a([bc]*)(c*d)/
- abcd
- 0: abcd
- 1: bc
- 2: d
-
-/a([bc]+)(c*d)/
- abcd
- 0: abcd
- 1: bc
- 2: d
-
-/a([bc]*)(c+d)/
- abcd
- 0: abcd
- 1: b
- 2: cd
-
-/a[bcd]*dcdcde/
- adcdcde
- 0: adcdcde
-
-/a[bcd]+dcdcde/
- *** Failers
-No match
- abcde
-No match
- adcdcde
-No match
-
-/(ab|a)b*c/
- abc
- 0: abc
- 1: ab
-
-/((a)(b)c)(d)/
- abcd
- 0: abcd
- 1: abc
- 2: a
- 3: b
- 4: d
-
-/[a-zA-Z_][a-zA-Z0-9_]*/
- alpha
- 0: alpha
-
-/^a(bc+|b[eh])g|.h$/
- abh
- 0: bh
-
-/(bc+d$|ef*g.|h?i(j|k))/
- effgz
- 0: effgz
- 1: effgz
- ij
- 0: ij
- 1: ij
- 2: j
- reffgz
- 0: effgz
- 1: effgz
- *** Failers
-No match
- effg
-No match
- bcdd
-No match
-
-/((((((((((a))))))))))/
- a
- 0: a
- 1: a
- 2: a
- 3: a
- 4: a
- 5: a
- 6: a
- 7: a
- 8: a
- 9: a
-10: a
-
-/((((((((((a))))))))))\10/
- aa
- 0: aa
- 1: a
- 2: a
- 3: a
- 4: a
- 5: a
- 6: a
- 7: a
- 8: a
- 9: a
-10: a
-
-/(((((((((a)))))))))/
- a
- 0: a
- 1: a
- 2: a
- 3: a
- 4: a
- 5: a
- 6: a
- 7: a
- 8: a
- 9: a
-
-/multiple words of text/
- *** Failers
-No match
- aa
-No match
- uh-uh
-No match
-
-/multiple words/
- multiple words, yeah
- 0: multiple words
-
-/(.*)c(.*)/
- abcde
- 0: abcde
- 1: ab
- 2: de
-
-/\((.*), (.*)\)/
- (a, b)
- 0: (a, b)
- 1: a
- 2: b
-
-/[k]/
-
-/abcd/
- abcd
- 0: abcd
-
-/a(bc)d/
- abcd
- 0: abcd
- 1: bc
-
-/a[-]?c/
- ac
- 0: ac
-
-/(abc)\1/
- abcabc
- 0: abcabc
- 1: abc
-
-/([a-c]*)\1/
- abcabc
- 0: abcabc
- 1: abc
-
-/(a)|\1/
- a
- 0: a
- 1: a
- *** Failers
- 0: a
- 1: a
- ab
- 0: a
- 1: a
- x
-No match
-
-/(([a-c])b*?\2)*/
- ababbbcbc
- 0: ababb
- 1: bb
- 2: b
-
-/(([a-c])b*?\2){3}/
- ababbbcbc
- 0: ababbbcbc
- 1: cbc
- 2: c
-
-/((\3|b)\2(a)x)+/
- aaaxabaxbaaxbbax
- 0: bbax
- 1: bbax
- 2: b
- 3: a
-
-/((\3|b)\2(a)){2,}/
- bbaababbabaaaaabbaaaabba
- 0: bbaaaabba
- 1: bba
- 2: b
- 3: a
-
-/abc/i
- ABC
- 0: ABC
- XABCY
- 0: ABC
- ABABC
- 0: ABC
- *** Failers
-No match
- aaxabxbaxbbx
-No match
- XBC
-No match
- AXC
-No match
- ABX
-No match
-
-/ab*c/i
- ABC
- 0: ABC
-
-/ab*bc/i
- ABC
- 0: ABC
- ABBC
- 0: ABBC
-
-/ab*?bc/i
- ABBBBC
- 0: ABBBBC
-
-/ab{0,}?bc/i
- ABBBBC
- 0: ABBBBC
-
-/ab+?bc/i
- ABBC
- 0: ABBC
-
-/ab+bc/i
- *** Failers
-No match
- ABC
-No match
- ABQ
-No match
-
-/ab{1,}bc/i
-
-/ab+bc/i
- ABBBBC
- 0: ABBBBC
-
-/ab{1,}?bc/i
- ABBBBC
- 0: ABBBBC
-
-/ab{1,3}?bc/i
- ABBBBC
- 0: ABBBBC
-
-/ab{3,4}?bc/i
- ABBBBC
- 0: ABBBBC
-
-/ab{4,5}?bc/i
- *** Failers
-No match
- ABQ
-No match
- ABBBBC
-No match
-
-/ab??bc/i
- ABBC
- 0: ABBC
- ABC
- 0: ABC
-
-/ab{0,1}?bc/i
- ABC
- 0: ABC
-
-/ab??bc/i
-
-/ab??c/i
- ABC
- 0: ABC
-
-/ab{0,1}?c/i
- ABC
- 0: ABC
-
-/^abc$/i
- ABC
- 0: ABC
- *** Failers
-No match
- ABBBBC
-No match
- ABCC
-No match
-
-/^abc/i
- ABCC
- 0: ABC
-
-/^abc$/i
-
-/abc$/i
- AABC
- 0: ABC
-
-/^/i
- ABC
- 0:
-
-/$/i
- ABC
- 0:
-
-/a.c/i
- ABC
- 0: ABC
- AXC
- 0: AXC
-
-/a.*?c/i
- AXYZC
- 0: AXYZC
-
-/a.*c/i
- *** Failers
-No match
- AABC
- 0: AABC
- AXYZD
-No match
-
-/a[bc]d/i
- ABD
- 0: ABD
-
-/a[b-d]e/i
- ACE
- 0: ACE
- *** Failers
-No match
- ABC
-No match
- ABD
-No match
-
-/a[b-d]/i
- AAC
- 0: AC
-
-/a[-b]/i
- A-
- 0: A-
-
-/a[b-]/i
- A-
- 0: A-
-
-/a]/i
- A]
- 0: A]
-
-/a[]]b/i
- A]B
- 0: A]B
-
-/a[^bc]d/i
- AED
- 0: AED
-
-/a[^-b]c/i
- ADC
- 0: ADC
- *** Failers
-No match
- ABD
-No match
- A-C
-No match
-
-/a[^]b]c/i
- ADC
- 0: ADC
-
-/ab|cd/i
- ABC
- 0: AB
- ABCD
- 0: AB
-
-/()ef/i
- DEF
- 0: EF
- 1:
-
-/$b/i
- *** Failers
-No match
- A]C
-No match
- B
-No match
-
-/a\(b/i
- A(B
- 0: A(B
-
-/a\(*b/i
- AB
- 0: AB
- A((B
- 0: A((B
-
-/a\\b/i
- A\B
-No match
-
-/((a))/i
- ABC
- 0: A
- 1: A
- 2: A
-
-/(a)b(c)/i
- ABC
- 0: ABC
- 1: A
- 2: C
-
-/a+b+c/i
- AABBABC
- 0: ABC
-
-/a{1,}b{1,}c/i
- AABBABC
- 0: ABC
-
-/a.+?c/i
- ABCABC
- 0: ABC
-
-/a.*?c/i
- ABCABC
- 0: ABC
-
-/a.{0,5}?c/i
- ABCABC
- 0: ABC
-
-/(a+|b)*/i
- AB
- 0: AB
- 1: B
-
-/(a+|b){0,}/i
- AB
- 0: AB
- 1: B
-
-/(a+|b)+/i
- AB
- 0: AB
- 1: B
-
-/(a+|b){1,}/i
- AB
- 0: AB
- 1: B
-
-/(a+|b)?/i
- AB
- 0: A
- 1: A
-
-/(a+|b){0,1}/i
- AB
- 0: A
- 1: A
-
-/(a+|b){0,1}?/i
- AB
- 0:
-
-/[^ab]*/i
- CDE
- 0: CDE
-
-/abc/i
-
-/a*/i
-
-
-/([abc])*d/i
- ABBBCD
- 0: ABBBCD
- 1: C
-
-/([abc])*bcd/i
- ABCD
- 0: ABCD
- 1: A
-
-/a|b|c|d|e/i
- E
- 0: E
-
-/(a|b|c|d|e)f/i
- EF
- 0: EF
- 1: E
-
-/abcd*efg/i
- ABCDEFG
- 0: ABCDEFG
-
-/ab*/i
- XABYABBBZ
- 0: AB
- XAYABBBZ
- 0: A
-
-/(ab|cd)e/i
- ABCDE
- 0: CDE
- 1: CD
-
-/[abhgefdc]ij/i
- HIJ
- 0: HIJ
-
-/^(ab|cd)e/i
- ABCDE
-No match
-
-/(abc|)ef/i
- ABCDEF
- 0: EF
- 1:
-
-/(a|b)c*d/i
- ABCD
- 0: BCD
- 1: B
-
-/(ab|ab*)bc/i
- ABC
- 0: ABC
- 1: A
-
-/a([bc]*)c*/i
- ABC
- 0: ABC
- 1: BC
-
-/a([bc]*)(c*d)/i
- ABCD
- 0: ABCD
- 1: BC
- 2: D
-
-/a([bc]+)(c*d)/i
- ABCD
- 0: ABCD
- 1: BC
- 2: D
-
-/a([bc]*)(c+d)/i
- ABCD
- 0: ABCD
- 1: B
- 2: CD
-
-/a[bcd]*dcdcde/i
- ADCDCDE
- 0: ADCDCDE
-
-/a[bcd]+dcdcde/i
-
-/(ab|a)b*c/i
- ABC
- 0: ABC
- 1: AB
-
-/((a)(b)c)(d)/i
- ABCD
- 0: ABCD
- 1: ABC
- 2: A
- 3: B
- 4: D
-
-/[a-zA-Z_][a-zA-Z0-9_]*/i
- ALPHA
- 0: ALPHA
-
-/^a(bc+|b[eh])g|.h$/i
- ABH
- 0: BH
-
-/(bc+d$|ef*g.|h?i(j|k))/i
- EFFGZ
- 0: EFFGZ
- 1: EFFGZ
- IJ
- 0: IJ
- 1: IJ
- 2: J
- REFFGZ
- 0: EFFGZ
- 1: EFFGZ
- *** Failers
-No match
- ADCDCDE
-No match
- EFFG
-No match
- BCDD
-No match
-
-/((((((((((a))))))))))/i
- A
- 0: A
- 1: A
- 2: A
- 3: A
- 4: A
- 5: A
- 6: A
- 7: A
- 8: A
- 9: A
-10: A
-
-/((((((((((a))))))))))\10/i
- AA
- 0: AA
- 1: A
- 2: A
- 3: A
- 4: A
- 5: A
- 6: A
- 7: A
- 8: A
- 9: A
-10: A
-
-/(((((((((a)))))))))/i
- A
- 0: A
- 1: A
- 2: A
- 3: A
- 4: A
- 5: A
- 6: A
- 7: A
- 8: A
- 9: A
-
-/(?:(?:(?:(?:(?:(?:(?:(?:(?:(a))))))))))/i
- A
- 0: A
- 1: A
-
-/(?:(?:(?:(?:(?:(?:(?:(?:(?:(a|b|c))))))))))/i
- C
- 0: C
- 1: C
-
-/multiple words of text/i
- *** Failers
-No match
- AA
-No match
- UH-UH
-No match
-
-/multiple words/i
- MULTIPLE WORDS, YEAH
- 0: MULTIPLE WORDS
-
-/(.*)c(.*)/i
- ABCDE
- 0: ABCDE
- 1: AB
- 2: DE
-
-/\((.*), (.*)\)/i
- (A, B)
- 0: (A, B)
- 1: A
- 2: B
-
-/[k]/i
-
-/abcd/i
- ABCD
- 0: ABCD
-
-/a(bc)d/i
- ABCD
- 0: ABCD
- 1: BC
-
-/a[-]?c/i
- AC
- 0: AC
-
-/(abc)\1/i
- ABCABC
- 0: ABCABC
- 1: ABC
-
-/([a-c]*)\1/i
- ABCABC
- 0: ABCABC
- 1: ABC
-
-/a(?!b)./
- abad
- 0: ad
-
-/a(?=d)./
- abad
- 0: ad
-
-/a(?=c|d)./
- abad
- 0: ad
-
-/a(?:b|c|d)(.)/
- ace
- 0: ace
- 1: e
-
-/a(?:b|c|d)*(.)/
- ace
- 0: ace
- 1: e
-
-/a(?:b|c|d)+?(.)/
- ace
- 0: ace
- 1: e
- acdbcdbe
- 0: acd
- 1: d
-
-/a(?:b|c|d)+(.)/
- acdbcdbe
- 0: acdbcdbe
- 1: e
-
-/a(?:b|c|d){2}(.)/
- acdbcdbe
- 0: acdb
- 1: b
-
-/a(?:b|c|d){4,5}(.)/
- acdbcdbe
- 0: acdbcdb
- 1: b
-
-/a(?:b|c|d){4,5}?(.)/
- acdbcdbe
- 0: acdbcd
- 1: d
-
-/((foo)|(bar))*/
- foobar
- 0: foobar
- 1: bar
- 2: foo
- 3: bar
-
-/a(?:b|c|d){6,7}(.)/
- acdbcdbe
- 0: acdbcdbe
- 1: e
-
-/a(?:b|c|d){6,7}?(.)/
- acdbcdbe
- 0: acdbcdbe
- 1: e
-
-/a(?:b|c|d){5,6}(.)/
- acdbcdbe
- 0: acdbcdbe
- 1: e
-
-/a(?:b|c|d){5,6}?(.)/
- acdbcdbe
- 0: acdbcdb
- 1: b
-
-/a(?:b|c|d){5,7}(.)/
- acdbcdbe
- 0: acdbcdbe
- 1: e
-
-/a(?:b|c|d){5,7}?(.)/
- acdbcdbe
- 0: acdbcdb
- 1: b
-
-/a(?:b|(c|e){1,2}?|d)+?(.)/
- ace
- 0: ace
- 1: c
- 2: e
-
-/^(.+)?B/
- AB
- 0: AB
- 1: A
-
-/^([^a-z])|(\^)$/
- .
- 0: .
- 1: .
-
-/^[<>]&/
- <&OUT
- 0: <&
-
-/^(a\1?){4}$/
- aaaaaaaaaa
- 0: aaaaaaaaaa
- 1: aaaa
- *** Failers
-No match
- AB
-No match
- aaaaaaaaa
-No match
- aaaaaaaaaaa
-No match
-
-/^(a(?(1)\1)){4}$/
- aaaaaaaaaa
- 0: aaaaaaaaaa
- 1: aaaa
- *** Failers
-No match
- aaaaaaaaa
-No match
- aaaaaaaaaaa
-No match
-
-/(?:(f)(o)(o)|(b)(a)(r))*/
- foobar
- 0: foobar
- 1: f
- 2: o
- 3: o
- 4: b
- 5: a
- 6: r
-
-/(?<=a)b/
- ab
- 0: b
- *** Failers
-No match
- cb
-No match
- b
-No match
-
-/(?<!c)b/
- ab
- 0: b
- b
- 0: b
- b
- 0: b
-
-/(?:..)*a/
- aba
- 0: aba
-
-/(?:..)*?a/
- aba
- 0: a
-
-/^(?:b|a(?=(.)))*\1/
- abc
- 0: ab
- 1: b
-
-/^(){3,5}/
- abc
- 0:
- 1:
-
-/^(a+)*ax/
- aax
- 0: aax
- 1: a
-
-/^((a|b)+)*ax/
- aax
- 0: aax
- 1: a
- 2: a
-
-/^((a|bc)+)*ax/
- aax
- 0: aax
- 1: a
- 2: a
-
-/(a|x)*ab/
- cab
- 0: ab
-
-/(a)*ab/
- cab
- 0: ab
-
-/(?:(?i)a)b/
- ab
- 0: ab
-
-/((?i)a)b/
- ab
- 0: ab
- 1: a
-
-/(?:(?i)a)b/
- Ab
- 0: Ab
-
-/((?i)a)b/
- Ab
- 0: Ab
- 1: A
-
-/(?:(?i)a)b/
- *** Failers
-No match
- cb
-No match
- aB
-No match
-
-/((?i)a)b/
-
-/(?i:a)b/
- ab
- 0: ab
-
-/((?i:a))b/
- ab
- 0: ab
- 1: a
-
-/(?i:a)b/
- Ab
- 0: Ab
-
-/((?i:a))b/
- Ab
- 0: Ab
- 1: A
-
-/(?i:a)b/
- *** Failers
-No match
- aB
-No match
- aB
-No match
-
-/((?i:a))b/
-
-/(?:(?-i)a)b/i
- ab
- 0: ab
-
-/((?-i)a)b/i
- ab
- 0: ab
- 1: a
-
-/(?:(?-i)a)b/i
- aB
- 0: aB
-
-/((?-i)a)b/i
- aB
- 0: aB
- 1: a
-
-/(?:(?-i)a)b/i
- *** Failers
-No match
- aB
- 0: aB
- Ab
-No match
-
-/((?-i)a)b/i
-
-/(?:(?-i)a)b/i
- aB
- 0: aB
-
-/((?-i)a)b/i
- aB
- 0: aB
- 1: a
-
-/(?:(?-i)a)b/i
- *** Failers
-No match
- Ab
-No match
- AB
-No match
-
-/((?-i)a)b/i
-
-/(?-i:a)b/i
- ab
- 0: ab
-
-/((?-i:a))b/i
- ab
- 0: ab
- 1: a
-
-/(?-i:a)b/i
- aB
- 0: aB
-
-/((?-i:a))b/i
- aB
- 0: aB
- 1: a
-
-/(?-i:a)b/i
- *** Failers
-No match
- AB
-No match
- Ab
-No match
-
-/((?-i:a))b/i
-
-/(?-i:a)b/i
- aB
- 0: aB
-
-/((?-i:a))b/i
- aB
- 0: aB
- 1: a
-
-/(?-i:a)b/i
- *** Failers
-No match
- Ab
-No match
- AB
-No match
-
-/((?-i:a))b/i
-
-/((?-i:a.))b/i
- *** Failers
-No match
- AB
-No match
- a\nB
-No match
-
-/((?s-i:a.))b/i
- a\nB
- 0: a\x0aB
- 1: a\x0a
-
-/(?:c|d)(?:)(?:a(?:)(?:b)(?:b(?:))(?:b(?:)(?:b)))/
- cabbbb
- 0: cabbbb
-
-/(?:c|d)(?:)(?:aaaaaaaa(?:)(?:bbbbbbbb)(?:bbbbbbbb(?:))(?:bbbbbbbb(?:)(?:bbbbbbbb)))/
- caaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
- 0: caaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
-
-/(ab)\d\1/i
- Ab4ab
- 0: Ab4ab
- 1: Ab
- ab4Ab
- 0: ab4Ab
- 1: ab
-
-/foo\w*\d{4}baz/
- foobar1234baz
- 0: foobar1234baz
-
-/x(~~)*(?:(?:F)?)?/
- x~~
- 0: x~~
- 1: ~~
-
-/^a(?#xxx){3}c/
- aaac
- 0: aaac
-
-/^a (?#xxx) (?#yyy) {3}c/x
- aaac
- 0: aaac
-
-/(?<![cd])b/
- *** Failers
-No match
- B\nB
-No match
- dbcb
-No match
-
-/(?<![cd])[ab]/
- dbaacb
- 0: a
-
-/(?<!(c|d))b/
-
-/(?<!(c|d))[ab]/
- dbaacb
- 0: a
-
-/(?<!cd)[ab]/
- cdaccb
- 0: b
-
-/^(?:a?b?)*$/
- *** Failers
-No match
- dbcb
-No match
- a--
-No match
-
-/((?s)^a(.))((?m)^b$)/
- a\nb\nc\n
- 0: a\x0ab
- 1: a\x0a
- 2: \x0a
- 3: b
-
-/((?m)^b$)/
- a\nb\nc\n
- 0: b
- 1: b
-
-/(?m)^b/
- a\nb\n
- 0: b
-
-/(?m)^(b)/
- a\nb\n
- 0: b
- 1: b
-
-/((?m)^b)/
- a\nb\n
- 0: b
- 1: b
-
-/\n((?m)^b)/
- a\nb\n
- 0: \x0ab
- 1: b
-
-/((?s).)c(?!.)/
- a\nb\nc\n
- 0: \x0ac
- 1: \x0a
- a\nb\nc\n
- 0: \x0ac
- 1: \x0a
-
-/((?s)b.)c(?!.)/
- a\nb\nc\n
- 0: b\x0ac
- 1: b\x0a
- a\nb\nc\n
- 0: b\x0ac
- 1: b\x0a
-
-/^b/
-
-/()^b/
- *** Failers
-No match
- a\nb\nc\n
-No match
- a\nb\nc\n
-No match
-
-/((?m)^b)/
- a\nb\nc\n
- 0: b
- 1: b
-
-/(?(1)a|b)/
-
-/(?(1)b|a)/
- a
- 0: a
-
-/(x)?(?(1)a|b)/
- *** Failers
-No match
- a
-No match
- a
-No match
-
-/(x)?(?(1)b|a)/
- a
- 0: a
-
-/()?(?(1)b|a)/
- a
- 0: a
-
-/()(?(1)b|a)/
-
-/()?(?(1)a|b)/
- a
- 0: a
- 1:
-
-/^(\()?blah(?(1)(\)))$/
- (blah)
- 0: (blah)
- 1: (
- 2: )
- blah
- 0: blah
- *** Failers
-No match
- a
-No match
- blah)
-No match
- (blah
-No match
-
-/^(\(+)?blah(?(1)(\)))$/
- (blah)
- 0: (blah)
- 1: (
- 2: )
- blah
- 0: blah
- *** Failers
-No match
- blah)
-No match
- (blah
-No match
-
-/(?(?!a)a|b)/
-
-/(?(?!a)b|a)/
- a
- 0: a
-
-/(?(?=a)b|a)/
- *** Failers
-No match
- a
-No match
- a
-No match
-
-/(?(?=a)a|b)/
- a
- 0: a
-
-/(?=(a+?))(\1ab)/
- aaab
- 0: aab
- 1: a
- 2: aab
-
-/^(?=(a+?))\1ab/
-
-/(\w+:)+/
- one:
- 0: one:
- 1: one:
-
-/$(?<=^(a))/
- a
- 0:
- 1: a
-
-/(?=(a+?))(\1ab)/
- aaab
- 0: aab
- 1: a
- 2: aab
-
-/^(?=(a+?))\1ab/
- *** Failers
-No match
- aaab
-No match
- aaab
-No match
-
-/([\w:]+::)?(\w+)$/
- abcd
- 0: abcd
- 1: <unset>
- 2: abcd
- xy:z:::abcd
- 0: xy:z:::abcd
- 1: xy:z:::
- 2: abcd
-
-/^[^bcd]*(c+)/
- aexycd
- 0: aexyc
- 1: c
-
-/(a*)b+/
- caab
- 0: aab
- 1: aa
-
-/([\w:]+::)?(\w+)$/
- abcd
- 0: abcd
- 1: <unset>
- 2: abcd
- xy:z:::abcd
- 0: xy:z:::abcd
- 1: xy:z:::
- 2: abcd
- *** Failers
- 0: Failers
- 1: <unset>
- 2: Failers
- abcd:
-No match
- abcd:
-No match
-
-/^[^bcd]*(c+)/
- aexycd
- 0: aexyc
- 1: c
-
-/(>a+)ab/
-
-/(?>a+)b/
- aaab
- 0: aaab
-
-/([[:]+)/
- a:[b]:
- 0: :[
- 1: :[
-
-/([[=]+)/
- a=[b]=
- 0: =[
- 1: =[
-
-/([[.]+)/
- a.[b].
- 0: .[
- 1: .[
-
-/((?>a+)b)/
- aaab
- 0: aaab
- 1: aaab
-
-/(?>(a+))b/
- aaab
- 0: aaab
- 1: aaa
-
-/((?>[^()]+)|\([^()]*\))+/
- ((abc(ade)ufh()()x
- 0: abc(ade)ufh()()x
- 1: x
-
-/a\Z/
- *** Failers
-No match
- aaab
-No match
- a\nb\n
-No match
-
-/b\Z/
- a\nb\n
- 0: b
-
-/b\z/
-
-/b\Z/
- a\nb
- 0: b
-
-/b\z/
- a\nb
- 0: b
- *** Failers
-No match
-
-/^(?>(?(1)\.|())[^\W_](?>[a-z0-9-]*[^\W_])?)+$/
- a
- 0: a
- 1:
- abc
- 0: abc
- 1:
- a-b
- 0: a-b
- 1:
- 0-9
- 0: 0-9
- 1:
- a.b
- 0: a.b
- 1:
- 5.6.7
- 0: 5.6.7
- 1:
- the.quick.brown.fox
- 0: the.quick.brown.fox
- 1:
- a100.b200.300c
- 0: a100.b200.300c
- 1:
- 12-ab.1245
- 0: 12-ab.1245
- 1:
- ***Failers
-No match
- \
-No match
- .a
-No match
- -a
-No match
- a-
-No match
- a.
-No match
- a_b
-No match
- a.-
-No match
- a..
-No match
- ab..bc
-No match
- the.quick.brown.fox-
-No match
- the.quick.brown.fox.
-No match
- the.quick.brown.fox_
-No match
- the.quick.brown.fox+
-No match
-
-/(?>.*)(?<=(abcd|wxyz))/
- alphabetabcd
- 0: alphabetabcd
- 1: abcd
- endingwxyz
- 0: endingwxyz
- 1: wxyz
- *** Failers
-No match
- a rather long string that doesn't end with one of them
-No match
-
-/word (?>(?:(?!otherword)[a-zA-Z0-9]+ ){0,30})otherword/
- word cat dog elephant mussel cow horse canary baboon snake shark otherword
- 0: word cat dog elephant mussel cow horse canary baboon snake shark otherword
- word cat dog elephant mussel cow horse canary baboon snake shark
-No match
-
-/word (?>[a-zA-Z0-9]+ ){0,30}otherword/
- word cat dog elephant mussel cow horse canary baboon snake shark the quick brown fox and the lazy dog and several other words getting close to thirty by now I hope
-No match
-
-/(?<=\d{3}(?!999))foo/
- 999foo
- 0: foo
- 123999foo
- 0: foo
- *** Failers
-No match
- 123abcfoo
-No match
-
-/(?<=(?!...999)\d{3})foo/
- 999foo
- 0: foo
- 123999foo
- 0: foo
- *** Failers
-No match
- 123abcfoo
-No match
-
-/(?<=\d{3}(?!999)...)foo/
- 123abcfoo
- 0: foo
- 123456foo
- 0: foo
- *** Failers
-No match
- 123999foo
-No match
-
-/(?<=\d{3}...)(?<!999)foo/
- 123abcfoo
- 0: foo
- 123456foo
- 0: foo
- *** Failers
-No match
- 123999foo
-No match
-
-/<a[\s]+href[\s]*=[\s]* # find <a href=
- ([\"\'])? # find single or double quote
- (?(1) (.*?)\1 | ([^\s]+)) # if quote found, match up to next matching
- # quote, otherwise match up to next space
-/isx
- <a href=abcd xyz
- 0: <a href=abcd
- 1: <unset>
- 2: <unset>
- 3: abcd
- <a href=\"abcd xyz pqr\" cats
- 0: <a href="abcd xyz pqr"
- 1: "
- 2: abcd xyz pqr
- <a href=\'abcd xyz pqr\' cats
- 0: <a href='abcd xyz pqr'
- 1: '
- 2: abcd xyz pqr
-
-/<a\s+href\s*=\s* # find <a href=
- (["'])? # find single or double quote
- (?(1) (.*?)\1 | (\S+)) # if quote found, match up to next matching
- # quote, otherwise match up to next space
-/isx
- <a href=abcd xyz
- 0: <a href=abcd
- 1: <unset>
- 2: <unset>
- 3: abcd
- <a href=\"abcd xyz pqr\" cats
- 0: <a href="abcd xyz pqr"
- 1: "
- 2: abcd xyz pqr
- <a href = \'abcd xyz pqr\' cats
- 0: <a href = 'abcd xyz pqr'
- 1: '
- 2: abcd xyz pqr
-
-/<a\s+href(?>\s*)=(?>\s*) # find <a href=
- (["'])? # find single or double quote
- (?(1) (.*?)\1 | (\S+)) # if quote found, match up to next matching
- # quote, otherwise match up to next space
-/isx
- <a href=abcd xyz
- 0: <a href=abcd
- 1: <unset>
- 2: <unset>
- 3: abcd
- <a href=\"abcd xyz pqr\" cats
- 0: <a href="abcd xyz pqr"
- 1: "
- 2: abcd xyz pqr
- <a href = \'abcd xyz pqr\' cats
- 0: <a href = 'abcd xyz pqr'
- 1: '
- 2: abcd xyz pqr
-
-/((Z)+|A)*/
- ZABCDEFG
- 0: ZA
- 1: A
- 2: Z
-
-/(Z()|A)*/
- ZABCDEFG
- 0: ZA
- 1: A
- 2:
-
-/(Z(())|A)*/
- ZABCDEFG
- 0: ZA
- 1: A
- 2:
- 3:
-
-/((?>Z)+|A)*/
- ZABCDEFG
- 0: ZA
- 1: A
-
-/((?>)+|A)*/
- ZABCDEFG
- 0:
- 1:
-
-/a*/g
- abbab
- 0: a
- 0:
- 0:
- 0: a
- 0:
- 0:
-
-/^[a-\d]/
- abcde
- 0: a
- -things
- 0: -
- 0digit
- 0: 0
- *** Failers
-No match
- bcdef
-No match
-
-/^[\d-a]/
- abcde
- 0: a
- -things
- 0: -
- 0digit
- 0: 0
- *** Failers
-No match
- bcdef
-No match
-
-/[[:space:]]+/
- > \x09\x0a\x0c\x0d\x0b<
- 0: \x09\x0a\x0c\x0d\x0b
-
-/[[:blank:]]+/
- > \x09\x0a\x0c\x0d\x0b<
- 0: \x09
-
-/[\s]+/
- > \x09\x0a\x0c\x0d\x0b<
- 0: \x09\x0a\x0c\x0d
-
-/\s+/
- > \x09\x0a\x0c\x0d\x0b<
- 0: \x09\x0a\x0c\x0d
-
-/a b/x
- ab
-No match
-
-/(?!\A)x/m
- a\nxb\n
- 0: x
-
-/(?!^)x/m
- a\nxb\n
-No match
-
-/abc\Qabc\Eabc/
- abcabcabc
- 0: abcabcabc
-
-/abc\Q(*+|\Eabc/
- abc(*+|abc
- 0: abc(*+|abc
-
-/ abc\Q abc\Eabc/x
- abc abcabc
- 0: abc abcabc
- *** Failers
-No match
- abcabcabc
-No match
-
-/abc#comment
- \Q#not comment
- literal\E/x
- abc#not comment\n literal
- 0: abc#not comment\x0a literal
-
-/abc#comment
- \Q#not comment
- literal/x
- abc#not comment\n literal
- 0: abc#not comment\x0a literal
-
-/abc#comment
- \Q#not comment
- literal\E #more comment
- /x
- abc#not comment\n literal
- 0: abc#not comment\x0a literal
-
-/abc#comment
- \Q#not comment
- literal\E #more comment/x
- abc#not comment\n literal
- 0: abc#not comment\x0a literal
-
-/\Qabc\$xyz\E/
- abc\\\$xyz
- 0: abc\$xyz
-
-/\Qabc\E\$\Qxyz\E/
- abc\$xyz
- 0: abc$xyz
-
-/\Gabc/
- abc
- 0: abc
- *** Failers
-No match
- xyzabc
-No match
-
-/\Gabc./g
- abc1abc2xyzabc3
- 0: abc1
- 0: abc2
-
-/abc./g
- abc1abc2xyzabc3
- 0: abc1
- 0: abc2
- 0: abc3
-
-/a(?x: b c )d/
- XabcdY
- 0: abcd
- *** Failers
-No match
- Xa b c d Y
-No match
-
-/((?x)x y z | a b c)/
- XabcY
- 0: abc
- 1: abc
- AxyzB
- 0: xyz
- 1: xyz
-
-/(?i)AB(?-i)C/
- XabCY
- 0: abC
- *** Failers
-No match
- XabcY
-No match
-
-/((?i)AB(?-i)C|D)E/
- abCE
- 0: abCE
- 1: abC
- DE
- 0: DE
- 1: D
- *** Failers
-No match
- abcE
-No match
- abCe
-No match
- dE
-No match
- De
-No match
-
-/(.*)\d+\1/
- abc123abc
- 0: abc123abc
- 1: abc
- abc123bc
- 0: bc123bc
- 1: bc
-
-/(.*)\d+\1/s
- abc123abc
- 0: abc123abc
- 1: abc
- abc123bc
- 0: bc123bc
- 1: bc
-
-/((.*))\d+\1/
- abc123abc
- 0: abc123abc
- 1: abc
- 2: abc
- abc123bc
- 0: bc123bc
- 1: bc
- 2: bc
-
-/-- This tests for an IPv6 address in the form where it can have up to --/
-/-- eight components, one and only one of which is empty. This must be --/
-No match
-/-- an internal component. --/
-No match
-
-/^(?!:) # colon disallowed at start
- (?: # start of item
- (?: [0-9a-f]{1,4} | # 1-4 hex digits or
- (?(1)0 | () ) ) # if null previously matched, fail; else null
- : # followed by colon
- ){1,7} # end item; 1-7 of them required
- [0-9a-f]{1,4} $ # final hex number at end of string
- (?(1)|.) # check that there was an empty component
- /xi
- a123::a123
- 0: a123::a123
- 1:
- a123:b342::abcd
- 0: a123:b342::abcd
- 1:
- a123:b342::324e:abcd
- 0: a123:b342::324e:abcd
- 1:
- a123:ddde:b342::324e:abcd
- 0: a123:ddde:b342::324e:abcd
- 1:
- a123:ddde:b342::324e:dcba:abcd
- 0: a123:ddde:b342::324e:dcba:abcd
- 1:
- a123:ddde:9999:b342::324e:dcba:abcd
- 0: a123:ddde:9999:b342::324e:dcba:abcd
- 1:
- *** Failers
-No match
- 1:2:3:4:5:6:7:8
-No match
- a123:bce:ddde:9999:b342::324e:dcba:abcd
-No match
- a123::9999:b342::324e:dcba:abcd
-No match
- abcde:2:3:4:5:6:7:8
-No match
- ::1
-No match
- abcd:fee0:123::
-No match
- :1
-No match
- 1:
-No match
-
-/ End of testinput1 /
-
diff --git a/ext/pcre/pcrelib/testdata/testoutput2 b/ext/pcre/pcrelib/testdata/testoutput2
deleted file mode 100644
index 2d1db0fb13..0000000000
--- a/ext/pcre/pcrelib/testdata/testoutput2
+++ /dev/null
@@ -1,4088 +0,0 @@
-PCRE version 3.92 11-Sep-2002
-
-/(a)b|/
-Capturing subpattern count = 1
-No options
-No first char
-No need char
-
-/abc/
-Capturing subpattern count = 0
-No options
-First char = 'a'
-Need char = 'c'
- abc
- 0: abc
- defabc
- 0: abc
- \Aabc
- 0: abc
- *** Failers
-No match
- \Adefabc
-No match
- ABC
-No match
-
-/^abc/
-Capturing subpattern count = 0
-Options: anchored
-No first char
-Need char = 'c'
- abc
- 0: abc
- \Aabc
- 0: abc
- *** Failers
-No match
- defabc
-No match
- \Adefabc
-No match
-
-/a+bc/
-Capturing subpattern count = 0
-No options
-First char = 'a'
-Need char = 'c'
-
-/a*bc/
-Capturing subpattern count = 0
-No options
-No first char
-Need char = 'c'
-
-/a{3}bc/
-Capturing subpattern count = 0
-No options
-First char = 'a'
-Need char = 'c'
-
-/(abc|a+z)/
-Capturing subpattern count = 1
-No options
-First char = 'a'
-No need char
-
-/^abc$/
-Capturing subpattern count = 0
-Options: anchored
-No first char
-Need char = 'c'
- abc
- 0: abc
- *** Failers
-No match
- def\nabc
-No match
-
-/ab\gdef/X
-Failed: unrecognized character follows \ at offset 3
-
-/(?X)ab\gdef/X
-Failed: unrecognized character follows \ at offset 7
-
-/x{5,4}/
-Failed: numbers out of order in {} quantifier at offset 5
-
-/z{65536}/
-Failed: number too big in {} quantifier at offset 7
-
-/[abcd/
-Failed: missing terminating ] for character class at offset 5
-
-/[\B]/
-Failed: invalid escape sequence in character class at offset 2
-
-/[z-a]/
-Failed: range out of order in character class at offset 3
-
-/^*/
-Failed: nothing to repeat at offset 1
-
-/(abc/
-Failed: missing ) at offset 4
-
-/(?# abc/
-Failed: missing ) after comment at offset 7
-
-/(?z)abc/
-Failed: unrecognized character after (? at offset 2
-
-/.*b/
-Capturing subpattern count = 0
-No options
-First char at start or follows \n
-Need char = 'b'
-
-/.*?b/
-Capturing subpattern count = 0
-No options
-First char at start or follows \n
-Need char = 'b'
-
-/cat|dog|elephant/
-Capturing subpattern count = 0
-No options
-No first char
-No need char
- this sentence eventually mentions a cat
- 0: cat
- this sentences rambles on and on for a while and then reaches elephant
- 0: elephant
-
-/cat|dog|elephant/S
-Capturing subpattern count = 0
-No options
-No first char
-No need char
-Starting character set: c d e
- this sentence eventually mentions a cat
- 0: cat
- this sentences rambles on and on for a while and then reaches elephant
- 0: elephant
-
-/cat|dog|elephant/iS
-Capturing subpattern count = 0
-Options: caseless
-No first char
-No need char
-Starting character set: C D E c d e
- this sentence eventually mentions a CAT cat
- 0: CAT
- this sentences rambles on and on for a while to elephant ElePhant
- 0: elephant
-
-/a|[bcd]/S
-Capturing subpattern count = 0
-No options
-No first char
-No need char
-Starting character set: a b c d
-
-/(a|[^\dZ])/S
-Capturing subpattern count = 1
-No options
-No first char
-No need char
-Starting character set: \x00 \x01 \x02 \x03 \x04 \x05 \x06 \x07 \x08 \x09 \x0a
- \x0b \x0c \x0d \x0e \x0f \x10 \x11 \x12 \x13 \x14 \x15 \x16 \x17 \x18 \x19
- \x1a \x1b \x1c \x1d \x1e \x1f \x20 ! " # $ % & ' ( ) * + , - . / : ; < = >
- ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y [ \ ] ^ _ ` a b c d
- e f g h i j k l m n o p q r s t u v w x y z { | } ~ \x7f \x80 \x81 \x82 \x83
- \x84 \x85 \x86 \x87 \x88 \x89 \x8a \x8b \x8c \x8d \x8e \x8f \x90 \x91 \x92
- \x93 \x94 \x95 \x96 \x97 \x98 \x99 \x9a \x9b \x9c \x9d \x9e \x9f \xa0 \xa1
- \xa2 \xa3 \xa4 \xa5 \xa6 \xa7 \xa8 \xa9 \xaa \xab \xac \xad \xae \xaf \xb0
- \xb1 \xb2 \xb3 \xb4 \xb5 \xb6 \xb7 \xb8 \xb9 \xba \xbb \xbc \xbd \xbe \xbf
- \xc0 \xc1 \xc2 \xc3 \xc4 \xc5 \xc6 \xc7 \xc8 \xc9 \xca \xcb \xcc \xcd \xce
- \xcf \xd0 \xd1 \xd2 \xd3 \xd4 \xd5 \xd6 \xd7 \xd8 \xd9 \xda \xdb \xdc \xdd
- \xde \xdf \xe0 \xe1 \xe2 \xe3 \xe4 \xe5 \xe6 \xe7 \xe8 \xe9 \xea \xeb \xec
- \xed \xee \xef \xf0 \xf1 \xf2 \xf3 \xf4 \xf5 \xf6 \xf7 \xf8 \xf9 \xfa \xfb
- \xfc \xfd \xfe \xff
-
-/(a|b)*[\s]/S
-Capturing subpattern count = 1
-No options
-No first char
-No need char
-Starting character set: \x09 \x0a \x0c \x0d \x20 a b
-
-/(ab\2)/
-Failed: reference to non-existent subpattern at offset 6
-
-/{4,5}abc/
-Failed: nothing to repeat at offset 4
-
-/(a)(b)(c)\2/
-Capturing subpattern count = 3
-Max back reference = 2
-No options
-First char = 'a'
-Need char = 'c'
- abcb
- 0: abcb
- 1: a
- 2: b
- 3: c
- \O0abcb
-Matched, but too many substrings
- \O3abcb
-Matched, but too many substrings
- 0: abcb
- \O6abcb
-Matched, but too many substrings
- 0: abcb
- 1: a
- \O9abcb
-Matched, but too many substrings
- 0: abcb
- 1: a
- 2: b
- \O12abcb
- 0: abcb
- 1: a
- 2: b
- 3: c
-
-/(a)bc|(a)(b)\2/
-Capturing subpattern count = 3
-Max back reference = 2
-No options
-First char = 'a'
-No need char
- abc
- 0: abc
- 1: a
- \O0abc
-Matched, but too many substrings
- \O3abc
-Matched, but too many substrings
- 0: abc
- \O6abc
- 0: abc
- 1: a
- aba
- 0: aba
- 1: <unset>
- 2: a
- 3: b
- \O0aba
-Matched, but too many substrings
- \O3aba
-Matched, but too many substrings
- 0: aba
- \O6aba
-Matched, but too many substrings
- 0: aba
- 1: <unset>
- \O9aba
-Matched, but too many substrings
- 0: aba
- 1: <unset>
- 2: a
- \O12aba
- 0: aba
- 1: <unset>
- 2: a
- 3: b
-
-/abc$/E
-Capturing subpattern count = 0
-Options: dollar_endonly
-First char = 'a'
-Need char = 'c'
- abc
- 0: abc
- *** Failers
-No match
- abc\n
-No match
- abc\ndef
-No match
-
-/(a)(b)(c)(d)(e)\6/
-Failed: reference to non-existent subpattern at offset 17
-
-/the quick brown fox/
-Capturing subpattern count = 0
-No options
-First char = 't'
-Need char = 'x'
- the quick brown fox
- 0: the quick brown fox
- this is a line with the quick brown fox
- 0: the quick brown fox
-
-/the quick brown fox/A
-Capturing subpattern count = 0
-Options: anchored
-No first char
-Need char = 'x'
- the quick brown fox
- 0: the quick brown fox
- *** Failers
-No match
- this is a line with the quick brown fox
-No match
-
-/ab(?z)cd/
-Failed: unrecognized character after (? at offset 4
-
-/^abc|def/
-Capturing subpattern count = 0
-No options
-No first char
-No need char
- abcdef
- 0: abc
- abcdef\B
- 0: def
-
-/.*((abc)$|(def))/
-Capturing subpattern count = 3
-No options
-First char at start or follows \n
-No need char
- defabc
- 0: defabc
- 1: abc
- 2: abc
- \Zdefabc
- 0: def
- 1: def
- 2: <unset>
- 3: def
-
-/abc/P
- abc
- 0: abc
- *** Failers
-No match: POSIX code 17: match failed
-
-/^abc|def/P
- abcdef
- 0: abc
- abcdef\B
- 0: def
-
-/.*((abc)$|(def))/P
- defabc
- 0: defabc
- 1: abc
- 2: abc
- \Zdefabc
- 0: def
- 1: def
- 3: def
-
-/the quick brown fox/P
- the quick brown fox
- 0: the quick brown fox
- *** Failers
-No match: POSIX code 17: match failed
- The Quick Brown Fox
-No match: POSIX code 17: match failed
-
-/the quick brown fox/Pi
- the quick brown fox
- 0: the quick brown fox
- The Quick Brown Fox
- 0: The Quick Brown Fox
-
-/abc.def/P
- *** Failers
-No match: POSIX code 17: match failed
- abc\ndef
-No match: POSIX code 17: match failed
-
-/abc$/P
- abc
- 0: abc
- abc\n
- 0: abc
-
-/(abc)\2/P
-Failed: POSIX code 15: bad back reference at offset 7
-
-/(abc\1)/P
- abc
-No match: POSIX code 17: match failed
-
-/)/
-Failed: unmatched parentheses at offset 0
-
-/a[]b/
-Failed: missing terminating ] for character class at offset 4
-
-/[^aeiou ]{3,}/
-Capturing subpattern count = 0
-No options
-No first char
-No need char
- co-processors, and for
- 0: -pr
-
-/<.*>/
-Capturing subpattern count = 0
-No options
-First char = '<'
-Need char = '>'
- abc<def>ghi<klm>nop
- 0: <def>ghi<klm>
-
-/<.*?>/
-Capturing subpattern count = 0
-No options
-First char = '<'
-Need char = '>'
- abc<def>ghi<klm>nop
- 0: <def>
-
-/<.*>/U
-Capturing subpattern count = 0
-Options: ungreedy
-First char = '<'
-Need char = '>'
- abc<def>ghi<klm>nop
- 0: <def>
-
-/(?U)<.*>/
-Capturing subpattern count = 0
-Options: ungreedy
-First char = '<'
-Need char = '>'
- abc<def>ghi<klm>nop
- 0: <def>
-
-/<.*?>/U
-Capturing subpattern count = 0
-Options: ungreedy
-First char = '<'
-Need char = '>'
- abc<def>ghi<klm>nop
- 0: <def>ghi<klm>
-
-/={3,}/U
-Capturing subpattern count = 0
-Options: ungreedy
-First char = '='
-Need char = '='
- abc========def
- 0: ===
-
-/(?U)={3,}?/
-Capturing subpattern count = 0
-Options: ungreedy
-First char = '='
-Need char = '='
- abc========def
- 0: ========
-
-/(?<!bar|cattle)foo/
-Capturing subpattern count = 0
-No options
-First char = 'f'
-Need char = 'o'
- foo
- 0: foo
- catfoo
- 0: foo
- *** Failers
-No match
- the barfoo
-No match
- and cattlefoo
-No match
-
-/(?<=a+)b/
-Failed: lookbehind assertion is not fixed length at offset 6
-
-/(?<=aaa|b{0,3})b/
-Failed: lookbehind assertion is not fixed length at offset 14
-
-/(?<!(foo)a\1)bar/
-Failed: lookbehind assertion is not fixed length at offset 12
-
-/(?i)abc/
-Capturing subpattern count = 0
-Options: caseless
-First char = 'a' (caseless)
-Need char = 'c' (caseless)
-
-/(a|(?m)a)/
-Capturing subpattern count = 1
-No options
-First char = 'a'
-No need char
-
-/(?i)^1234/
-Capturing subpattern count = 0
-Options: anchored caseless
-No first char
-Need char = '4'
-
-/(^b|(?i)^d)/
-Capturing subpattern count = 1
-Options: anchored
-Case state changes
-No first char
-No need char
-
-/(?s).*/
-Capturing subpattern count = 0
-Options: anchored dotall
-No first char
-No need char
-
-/[abcd]/S
-Capturing subpattern count = 0
-No options
-No first char
-No need char
-Starting character set: a b c d
-
-/(?i)[abcd]/S
-Capturing subpattern count = 0
-Options: caseless
-No first char
-No need char
-Starting character set: A B C D a b c d
-
-/(?m)[xy]|(b|c)/S
-Capturing subpattern count = 1
-Options: multiline
-No first char
-No need char
-Starting character set: b c x y
-
-/(^a|^b)/m
-Capturing subpattern count = 1
-Options: multiline
-First char at start or follows \n
-No need char
-
-/(?i)(^a|^b)/m
-Capturing subpattern count = 1
-Options: caseless multiline
-First char at start or follows \n
-No need char
-
-/(a)(?(1)a|b|c)/
-Failed: conditional group contains more than two branches at offset 13
-
-/(?(?=a)a|b|c)/
-Failed: conditional group contains more than two branches at offset 12
-
-/(?(1a)/
-Failed: malformed number after (?( at offset 4
-
-/(?(?i))/
-Failed: assertion expected after (?( at offset 3
-
-/(?(abc))/
-Failed: assertion expected after (?( at offset 3
-
-/(?(?<ab))/
-Failed: unrecognized character after (?< at offset 5
-
-/((?s)blah)\s+\1/
-Capturing subpattern count = 1
-Max back reference = 1
-No options
-First char = 'b'
-Need char = 'h'
-
-/((?i)blah)\s+\1/
-Capturing subpattern count = 1
-Max back reference = 1
-No options
-Case state changes
-First char = 'b' (caseless)
-Need char = 'h' (caseless)
-
-/((?i)b)/DS
-------------------------------------------------------------------
- 0 16 Bra 0
- 3 8 Bra 1
- 6 01 Opt
- 8 1 b
- 11 8 Ket
- 14 00 Opt
- 16 16 Ket
- 19 End
-------------------------------------------------------------------
-Capturing subpattern count = 1
-No options
-Case state changes
-First char = 'b' (caseless)
-No need char
-Study returned NULL
-
-/(a*b|(?i:c*(?-i)d))/S
-Capturing subpattern count = 1
-No options
-Case state changes
-No first char
-No need char
-Starting character set: C a b c d
-
-/a$/
-Capturing subpattern count = 0
-No options
-First char = 'a'
-No need char
- a
- 0: a
- a\n
- 0: a
- *** Failers
-No match
- \Za
-No match
- \Za\n
-No match
-
-/a$/m
-Capturing subpattern count = 0
-Options: multiline
-First char = 'a'
-No need char
- a
- 0: a
- a\n
- 0: a
- \Za\n
- 0: a
- *** Failers
-No match
- \Za
-No match
-
-/\Aabc/m
-Capturing subpattern count = 0
-Options: anchored multiline
-No first char
-Need char = 'c'
-
-/^abc/m
-Capturing subpattern count = 0
-Options: multiline
-First char at start or follows \n
-Need char = 'c'
-
-/^((a+)(?U)([ab]+)(?-U)([bc]+)(\w*))/
-Capturing subpattern count = 5
-Options: anchored
-No first char
-Need char = 'a'
- aaaaabbbbbcccccdef
- 0: aaaaabbbbbcccccdef
- 1: aaaaabbbbbcccccdef
- 2: aaaaa
- 3: b
- 4: bbbbccccc
- 5: def
-
-/(?<=foo)[ab]/S
-Capturing subpattern count = 0
-No options
-No first char
-No need char
-Starting character set: a b
-
-/(?<!foo)(alpha|omega)/S
-Capturing subpattern count = 1
-No options
-No first char
-Need char = 'a'
-Starting character set: a o
-
-/(?!alphabet)[ab]/S
-Capturing subpattern count = 0
-No options
-No first char
-No need char
-Starting character set: a b
-
-/(?<=foo\n)^bar/m
-Capturing subpattern count = 0
-Options: multiline
-First char at start or follows \n
-Need char = 'r'
-
-/(?>^abc)/m
-Capturing subpattern count = 0
-Options: multiline
-First char at start or follows \n
-Need char = 'c'
- abc
- 0: abc
- def\nabc
- 0: abc
- *** Failers
-No match
- defabc
-No match
-
-/(?<=ab(c+)d)ef/
-Failed: lookbehind assertion is not fixed length at offset 11
-
-/(?<=ab(?<=c+)d)ef/
-Failed: lookbehind assertion is not fixed length at offset 12
-
-/(?<=ab(c|de)f)g/
-Failed: lookbehind assertion is not fixed length at offset 13
-
-/The next three are in testinput2 because they have variable length branches/
-Capturing subpattern count = 0
-No options
-First char = 'T'
-Need char = 's'
-
-/(?<=bullock|donkey)-cart/
-Capturing subpattern count = 0
-No options
-First char = '-'
-Need char = 't'
- the bullock-cart
- 0: -cart
- a donkey-cart race
- 0: -cart
- *** Failers
-No match
- cart
-No match
- horse-and-cart
-No match
-
-/(?<=ab(?i)x|y|z)/
-Capturing subpattern count = 0
-No options
-Case state changes
-No first char
-No need char
-
-/(?>.*)(?<=(abcd)|(xyz))/
-Capturing subpattern count = 2
-No options
-First char at start or follows \n
-No need char
- alphabetabcd
- 0: alphabetabcd
- 1: abcd
- endingxyz
- 0: endingxyz
- 1: <unset>
- 2: xyz
-
-/(?<=ab(?i)x(?-i)y|(?i)z|b)ZZ/
-Capturing subpattern count = 0
-No options
-Case state changes
-First char = 'Z'
-Need char = 'Z'
- abxyZZ
- 0: ZZ
- abXyZZ
- 0: ZZ
- ZZZ
- 0: ZZ
- zZZ
- 0: ZZ
- bZZ
- 0: ZZ
- BZZ
- 0: ZZ
- *** Failers
-No match
- ZZ
-No match
- abXYZZ
-No match
- zzz
-No match
- bzz
-No match
-
-/(?<!(foo)a)bar/
-Capturing subpattern count = 1
-No options
-First char = 'b'
-Need char = 'r'
- bar
- 0: bar
- foobbar
- 0: bar
- *** Failers
-No match
- fooabar
-No match
-
-/This one is here because Perl 5.005_02 doesn't fail it/
-Capturing subpattern count = 0
-No options
-First char = 'T'
-Need char = 't'
-
-/^(a)?(?(1)a|b)+$/
-Capturing subpattern count = 1
-Options: anchored
-No first char
-No need char
- *** Failers
-No match
- a
-No match
-
-/This one is here because I think Perl 5.005_02 gets the setting of $1 wrong/
-Capturing subpattern count = 0
-No options
-First char = 'T'
-Need char = 'g'
-
-/^(a\1?){4}$/
-Capturing subpattern count = 1
-Max back reference = 1
-Options: anchored
-No first char
-Need char = 'a'
- aaaaaa
- 0: aaaaaa
- 1: aa
-
-/These are syntax tests from Perl 5.005/
-Capturing subpattern count = 0
-No options
-First char = 'T'
-Need char = '5'
-
-/a[b-a]/
-Failed: range out of order in character class at offset 4
-
-/a[]b/
-Failed: missing terminating ] for character class at offset 4
-
-/a[/
-Failed: missing terminating ] for character class at offset 2
-
-/*a/
-Failed: nothing to repeat at offset 0
-
-/(*)b/
-Failed: nothing to repeat at offset 1
-
-/abc)/
-Failed: unmatched parentheses at offset 3
-
-/(abc/
-Failed: missing ) at offset 4
-
-/a**/
-Failed: nothing to repeat at offset 2
-
-/)(/
-Failed: unmatched parentheses at offset 0
-
-/\1/
-Failed: reference to non-existent subpattern at offset 2
-
-/\2/
-Failed: reference to non-existent subpattern at offset 2
-
-/(a)|\2/
-Failed: reference to non-existent subpattern at offset 6
-
-/a[b-a]/i
-Failed: range out of order in character class at offset 4
-
-/a[]b/i
-Failed: missing terminating ] for character class at offset 4
-
-/a[/i
-Failed: missing terminating ] for character class at offset 2
-
-/*a/i
-Failed: nothing to repeat at offset 0
-
-/(*)b/i
-Failed: nothing to repeat at offset 1
-
-/abc)/i
-Failed: unmatched parentheses at offset 3
-
-/(abc/i
-Failed: missing ) at offset 4
-
-/a**/i
-Failed: nothing to repeat at offset 2
-
-/)(/i
-Failed: unmatched parentheses at offset 0
-
-/:(?:/
-Failed: missing ) at offset 4
-
-/(?<%)b/
-Failed: unrecognized character after (?< at offset 3
-
-/a(?{)b/
-Failed: unrecognized character after (? at offset 3
-
-/a(?{{})b/
-Failed: unrecognized character after (? at offset 3
-
-/a(?{}})b/
-Failed: unrecognized character after (? at offset 3
-
-/a(?{"{"})b/
-Failed: unrecognized character after (? at offset 3
-
-/a(?{"{"}})b/
-Failed: unrecognized character after (? at offset 3
-
-/(?(1?)a|b)/
-Failed: malformed number after (?( at offset 4
-
-/(?(1)a|b|c)/
-Failed: conditional group contains more than two branches at offset 10
-
-/[a[:xyz:/
-Failed: missing terminating ] for character class at offset 8
-
-/(?<=x+)y/
-Failed: lookbehind assertion is not fixed length at offset 6
-
-/a{37,17}/
-Failed: numbers out of order in {} quantifier at offset 7
-
-/abc/\
-Failed: \ at end of pattern at offset 4
-
-/abc/\P
-Failed: POSIX code 9: bad escape sequence at offset 4
-
-/abc/\i
-Failed: \ at end of pattern at offset 4
-
-/(a)bc(d)/
-Capturing subpattern count = 2
-No options
-First char = 'a'
-Need char = 'd'
- abcd
- 0: abcd
- 1: a
- 2: d
- abcd\C2
- 0: abcd
- 1: a
- 2: d
- 2C d (1)
- abcd\C5
- 0: abcd
- 1: a
- 2: d
-copy substring 5 failed -7
-
-/(.{20})/
-Capturing subpattern count = 1
-No options
-No first char
-No need char
- abcdefghijklmnopqrstuvwxyz
- 0: abcdefghijklmnopqrst
- 1: abcdefghijklmnopqrst
- abcdefghijklmnopqrstuvwxyz\C1
- 0: abcdefghijklmnopqrst
- 1: abcdefghijklmnopqrst
-copy substring 1 failed -6
- abcdefghijklmnopqrstuvwxyz\G1
- 0: abcdefghijklmnopqrst
- 1: abcdefghijklmnopqrst
- 1G abcdefghijklmnopqrst (20)
-
-/(.{15})/
-Capturing subpattern count = 1
-No options
-No first char
-No need char
- abcdefghijklmnopqrstuvwxyz
- 0: abcdefghijklmno
- 1: abcdefghijklmno
- abcdefghijklmnopqrstuvwxyz\C1\G1
- 0: abcdefghijklmno
- 1: abcdefghijklmno
- 1C abcdefghijklmno (15)
- 1G abcdefghijklmno (15)
-
-/(.{16})/
-Capturing subpattern count = 1
-No options
-No first char
-No need char
- abcdefghijklmnopqrstuvwxyz
- 0: abcdefghijklmnop
- 1: abcdefghijklmnop
- abcdefghijklmnopqrstuvwxyz\C1\G1\L
- 0: abcdefghijklmnop
- 1: abcdefghijklmnop
-copy substring 1 failed -6
- 1G abcdefghijklmnop (16)
- 0L abcdefghijklmnop
- 1L abcdefghijklmnop
-
-/^(a|(bc))de(f)/
-Capturing subpattern count = 3
-Options: anchored
-No first char
-Need char = 'f'
- adef\G1\G2\G3\G4\L
- 0: adef
- 1: a
- 2: <unset>
- 3: f
- 1G a (1)
- 2G (0)
- 3G f (1)
-get substring 4 failed -7
- 0L adef
- 1L a
- 2L
- 3L f
- bcdef\G1\G2\G3\G4\L
- 0: bcdef
- 1: bc
- 2: bc
- 3: f
- 1G bc (2)
- 2G bc (2)
- 3G f (1)
-get substring 4 failed -7
- 0L bcdef
- 1L bc
- 2L bc
- 3L f
- adefghijk\C0
- 0: adef
- 1: a
- 2: <unset>
- 3: f
- 0C adef (4)
-
-/^abc\00def/
-Capturing subpattern count = 0
-Options: anchored
-No first char
-Need char = 'f'
- abc\00def\L\C0
- 0: abc\x00def
- 0C abc (7)
- 0L abc
-
-/word ((?:[a-zA-Z0-9]+ )((?:[a-zA-Z0-9]+ )((?:[a-zA-Z0-9]+ )((?:[a-zA-Z0-9]+
-)((?:[a-zA-Z0-9]+ )((?:[a-zA-Z0-9]+ )((?:[a-zA-Z0-9]+ )((?:[a-zA-Z0-9]+
-)?)?)?)?)?)?)?)?)?otherword/M
-Memory allocation (code space): 428
-Capturing subpattern count = 8
-No options
-First char = 'w'
-Need char = 'd'
-
-/.*X/D
-------------------------------------------------------------------
- 0 8 Bra 0
- 3 Any*
- 5 1 X
- 8 8 Ket
- 11 End
-------------------------------------------------------------------
-Capturing subpattern count = 0
-No options
-First char at start or follows \n
-Need char = 'X'
-
-/.*X/Ds
-------------------------------------------------------------------
- 0 8 Bra 0
- 3 Any*
- 5 1 X
- 8 8 Ket
- 11 End
-------------------------------------------------------------------
-Capturing subpattern count = 0
-Options: anchored dotall
-No first char
-Need char = 'X'
-
-/(.*X|^B)/D
-------------------------------------------------------------------
- 0 21 Bra 0
- 3 8 Bra 1
- 6 Any*
- 8 1 X
- 11 7 Alt
- 14 ^
- 15 1 B
- 18 15 Ket
- 21 21 Ket
- 24 End
-------------------------------------------------------------------
-Capturing subpattern count = 1
-No options
-First char at start or follows \n
-No need char
-
-/(.*X|^B)/Ds
-------------------------------------------------------------------
- 0 21 Bra 0
- 3 8 Bra 1
- 6 Any*
- 8 1 X
- 11 7 Alt
- 14 ^
- 15 1 B
- 18 15 Ket
- 21 21 Ket
- 24 End
-------------------------------------------------------------------
-Capturing subpattern count = 1
-Options: anchored dotall
-No first char
-No need char
-
-/(?s)(.*X|^B)/D
-------------------------------------------------------------------
- 0 21 Bra 0
- 3 8 Bra 1
- 6 Any*
- 8 1 X
- 11 7 Alt
- 14 ^
- 15 1 B
- 18 15 Ket
- 21 21 Ket
- 24 End
-------------------------------------------------------------------
-Capturing subpattern count = 1
-Options: anchored dotall
-No first char
-No need char
-
-/(?s:.*X|^B)/D
-------------------------------------------------------------------
- 0 27 Bra 0
- 3 10 Bra 0
- 6 04 Opt
- 8 Any*
- 10 1 X
- 13 9 Alt
- 16 04 Opt
- 18 ^
- 19 1 B
- 22 19 Ket
- 25 00 Opt
- 27 27 Ket
- 30 End
-------------------------------------------------------------------
-Capturing subpattern count = 0
-No options
-First char at start or follows \n
-No need char
-
-/\Biss\B/+
-Capturing subpattern count = 0
-No options
-First char = 'i'
-Need char = 's'
- Mississippi
- 0: iss
- 0+ issippi
-
-/\Biss\B/+P
- Mississippi
- 0: iss
- 0+ issippi
-
-/iss/G+
-Capturing subpattern count = 0
-No options
-First char = 'i'
-Need char = 's'
- Mississippi
- 0: iss
- 0+ issippi
- 0: iss
- 0+ ippi
-
-/\Biss\B/G+
-Capturing subpattern count = 0
-No options
-First char = 'i'
-Need char = 's'
- Mississippi
- 0: iss
- 0+ issippi
-
-/\Biss\B/g+
-Capturing subpattern count = 0
-No options
-First char = 'i'
-Need char = 's'
- Mississippi
- 0: iss
- 0+ issippi
- 0: iss
- 0+ ippi
- *** Failers
-No match
- Mississippi\A
-No match
-
-/(?<=[Ms])iss/g+
-Capturing subpattern count = 0
-No options
-First char = 'i'
-Need char = 's'
- Mississippi
- 0: iss
- 0+ issippi
- 0: iss
- 0+ ippi
-
-/(?<=[Ms])iss/G+
-Capturing subpattern count = 0
-No options
-First char = 'i'
-Need char = 's'
- Mississippi
- 0: iss
- 0+ issippi
-
-/^iss/g+
-Capturing subpattern count = 0
-Options: anchored
-No first char
-Need char = 's'
- ississippi
- 0: iss
- 0+ issippi
-
-/.*iss/g+
-Capturing subpattern count = 0
-No options
-First char at start or follows \n
-Need char = 's'
- abciss\nxyzisspqr
- 0: abciss
- 0+ \x0axyzisspqr
- 0: xyziss
- 0+ pqr
-
-/.i./+g
-Capturing subpattern count = 0
-No options
-No first char
-Need char = 'i'
- Mississippi
- 0: Mis
- 0+ sissippi
- 0: sis
- 0+ sippi
- 0: sip
- 0+ pi
- Mississippi\A
- 0: Mis
- 0+ sissippi
- 0: sis
- 0+ sippi
- 0: sip
- 0+ pi
- Missouri river
- 0: Mis
- 0+ souri river
- 0: ri
- 0+ river
- 0: riv
- 0+ er
- Missouri river\A
- 0: Mis
- 0+ souri river
-
-/^.is/+g
-Capturing subpattern count = 0
-Options: anchored
-No first char
-Need char = 's'
- Mississippi
- 0: Mis
- 0+ sissippi
-
-/^ab\n/g+
-Capturing subpattern count = 0
-Options: anchored
-No first char
-Need char = 10
- ab\nab\ncd
- 0: ab\x0a
- 0+ ab\x0acd
-
-/^ab\n/mg+
-Capturing subpattern count = 0
-Options: multiline
-First char at start or follows \n
-Need char = 10
- ab\nab\ncd
- 0: ab\x0a
- 0+ ab\x0acd
- 0: ab\x0a
- 0+ cd
-
-/abc/
-Capturing subpattern count = 0
-No options
-First char = 'a'
-Need char = 'c'
-
-/abc|bac/
-Capturing subpattern count = 0
-No options
-No first char
-Need char = 'c'
-
-/(abc|bac)/
-Capturing subpattern count = 1
-No options
-No first char
-Need char = 'c'
-
-/(abc|(c|dc))/
-Capturing subpattern count = 2
-No options
-No first char
-Need char = 'c'
-
-/(abc|(d|de)c)/
-Capturing subpattern count = 2
-No options
-No first char
-Need char = 'c'
-
-/a*/
-Capturing subpattern count = 0
-No options
-No first char
-No need char
-
-/a+/
-Capturing subpattern count = 0
-No options
-First char = 'a'
-No need char
-
-/(baa|a+)/
-Capturing subpattern count = 1
-No options
-No first char
-Need char = 'a'
-
-/a{0,3}/
-Capturing subpattern count = 0
-No options
-No first char
-No need char
-
-/baa{3,}/
-Capturing subpattern count = 0
-No options
-First char = 'b'
-Need char = 'a'
-
-/"([^\\"]+|\\.)*"/
-Capturing subpattern count = 1
-No options
-First char = '"'
-Need char = '"'
-
-/(abc|ab[cd])/
-Capturing subpattern count = 1
-No options
-First char = 'a'
-No need char
-
-/(a|.)/
-Capturing subpattern count = 1
-No options
-No first char
-No need char
-
-/a|ba|\w/
-Capturing subpattern count = 0
-No options
-No first char
-No need char
-
-/abc(?=pqr)/
-Capturing subpattern count = 0
-No options
-First char = 'a'
-Need char = 'r'
-
-/...(?<=abc)/
-Capturing subpattern count = 0
-No options
-No first char
-No need char
-
-/abc(?!pqr)/
-Capturing subpattern count = 0
-No options
-First char = 'a'
-Need char = 'c'
-
-/ab./
-Capturing subpattern count = 0
-No options
-First char = 'a'
-Need char = 'b'
-
-/ab[xyz]/
-Capturing subpattern count = 0
-No options
-First char = 'a'
-Need char = 'b'
-
-/abc*/
-Capturing subpattern count = 0
-No options
-First char = 'a'
-Need char = 'b'
-
-/ab.c*/
-Capturing subpattern count = 0
-No options
-First char = 'a'
-Need char = 'b'
-
-/a.c*/
-Capturing subpattern count = 0
-No options
-First char = 'a'
-No need char
-
-/.c*/
-Capturing subpattern count = 0
-No options
-No first char
-No need char
-
-/ac*/
-Capturing subpattern count = 0
-No options
-First char = 'a'
-No need char
-
-/(a.c*|b.c*)/
-Capturing subpattern count = 1
-No options
-No first char
-No need char
-
-/a.c*|aba/
-Capturing subpattern count = 0
-No options
-First char = 'a'
-No need char
-
-/.+a/
-Capturing subpattern count = 0
-No options
-No first char
-Need char = 'a'
-
-/(?=abcda)a.*/
-Capturing subpattern count = 0
-No options
-First char = 'a'
-Need char = 'a'
-
-/(?=a)a.*/
-Capturing subpattern count = 0
-No options
-First char = 'a'
-No need char
-
-/a(b)*/
-Capturing subpattern count = 1
-No options
-First char = 'a'
-No need char
-
-/a\d*/
-Capturing subpattern count = 0
-No options
-First char = 'a'
-No need char
-
-/ab\d*/
-Capturing subpattern count = 0
-No options
-First char = 'a'
-Need char = 'b'
-
-/a(\d)*/
-Capturing subpattern count = 1
-No options
-First char = 'a'
-No need char
-
-/abcde{0,0}/
-Capturing subpattern count = 0
-No options
-First char = 'a'
-Need char = 'd'
-
-/ab\d+/
-Capturing subpattern count = 0
-No options
-First char = 'a'
-Need char = 'b'
-
-/a(?(1)b)/
-Capturing subpattern count = 0
-No options
-First char = 'a'
-No need char
-
-/a(?(1)bag|big)/
-Capturing subpattern count = 0
-No options
-First char = 'a'
-Need char = 'g'
-
-/a(?(1)bag|big)*/
-Capturing subpattern count = 0
-No options
-First char = 'a'
-No need char
-
-/a(?(1)bag|big)+/
-Capturing subpattern count = 0
-No options
-First char = 'a'
-Need char = 'g'
-
-/a(?(1)b..|b..)/
-Capturing subpattern count = 0
-No options
-First char = 'a'
-Need char = 'b'
-
-/ab\d{0}e/
-Capturing subpattern count = 0
-No options
-First char = 'a'
-Need char = 'e'
-
-/a?b?/
-Capturing subpattern count = 0
-No options
-No first char
-No need char
- a
- 0: a
- b
- 0: b
- ab
- 0: ab
- \
- 0:
- *** Failers
- 0:
- \N
-No match
-
-/|-/
-Capturing subpattern count = 0
-No options
-No first char
-No need char
- abcd
- 0:
- -abc
- 0:
- \Nab-c
- 0: -
- *** Failers
- 0:
- \Nabc
-No match
-
-/a*(b+)(z)(z)/P
- aaaabbbbzzzz
- 0: aaaabbbbzz
- 1: bbbb
- 2: z
- 3: z
- aaaabbbbzzzz\O0
- aaaabbbbzzzz\O1
- 0: aaaabbbbzz
- aaaabbbbzzzz\O2
- 0: aaaabbbbzz
- 1: bbbb
- aaaabbbbzzzz\O3
- 0: aaaabbbbzz
- 1: bbbb
- 2: z
- aaaabbbbzzzz\O4
- 0: aaaabbbbzz
- 1: bbbb
- 2: z
- 3: z
- aaaabbbbzzzz\O5
- 0: aaaabbbbzz
- 1: bbbb
- 2: z
- 3: z
-
-/^.?abcd/S
-Capturing subpattern count = 0
-Options: anchored
-No first char
-Need char = 'd'
-Study returned NULL
-
-/\( # ( at start
- (?: # Non-capturing bracket
- (?>[^()]+) # Either a sequence of non-brackets (no backtracking)
- | # Or
- (?R) # Recurse - i.e. nested bracketed string
- )* # Zero or more contents
- \) # Closing )
- /x
-Capturing subpattern count = 0
-Options: extended
-First char = '('
-Need char = ')'
- (abcd)
- 0: (abcd)
- (abcd)xyz
- 0: (abcd)
- xyz(abcd)
- 0: (abcd)
- (ab(xy)cd)pqr
- 0: (ab(xy)cd)
- (ab(xycd)pqr
- 0: (xycd)
- () abc ()
- 0: ()
- 12(abcde(fsh)xyz(foo(bar))lmno)89
- 0: (abcde(fsh)xyz(foo(bar))lmno)
- *** Failers
-No match
- abcd
-No match
- abcd)
-No match
- (abcd
-No match
-
-/\( ( (?>[^()]+) | (?R) )* \) /xg
-Capturing subpattern count = 1
-Options: extended
-First char = '('
-Need char = ')'
- (ab(xy)cd)pqr
- 0: (ab(xy)cd)
- 1: cd
- 1(abcd)(x(y)z)pqr
- 0: (abcd)
- 1: abcd
- 0: (x(y)z)
- 1: z
-
-/\( (?: (?>[^()]+) | (?R) ) \) /x
-Capturing subpattern count = 0
-Options: extended
-First char = '('
-Need char = ')'
- (abcd)
- 0: (abcd)
- (ab(xy)cd)
- 0: (xy)
- (a(b(c)d)e)
- 0: (c)
- ((ab))
- 0: ((ab))
- *** Failers
-No match
- ()
-No match
-
-/\( (?: (?>[^()]+) | (?R) )? \) /x
-Capturing subpattern count = 0
-Options: extended
-First char = '('
-Need char = ')'
- ()
- 0: ()
- 12(abcde(fsh)xyz(foo(bar))lmno)89
- 0: (fsh)
-
-/\( ( (?>[^()]+) | (?R) )* \) /x
-Capturing subpattern count = 1
-Options: extended
-First char = '('
-Need char = ')'
- (ab(xy)cd)
- 0: (ab(xy)cd)
- 1: cd
-
-/\( ( ( (?>[^()]+) | (?R) )* ) \) /x
-Capturing subpattern count = 2
-Options: extended
-First char = '('
-Need char = ')'
- (ab(xy)cd)
- 0: (ab(xy)cd)
- 1: ab(xy)cd
- 2: cd
-
-/\( (123)? ( ( (?>[^()]+) | (?R) )* ) \) /x
-Capturing subpattern count = 3
-Options: extended
-First char = '('
-Need char = ')'
- (ab(xy)cd)
- 0: (ab(xy)cd)
- 1: <unset>
- 2: ab(xy)cd
- 3: cd
- (123ab(xy)cd)
- 0: (123ab(xy)cd)
- 1: 123
- 2: ab(xy)cd
- 3: cd
-
-/\( ( (123)? ( (?>[^()]+) | (?R) )* ) \) /x
-Capturing subpattern count = 3
-Options: extended
-First char = '('
-Need char = ')'
- (ab(xy)cd)
- 0: (ab(xy)cd)
- 1: ab(xy)cd
- 2: <unset>
- 3: cd
- (123ab(xy)cd)
- 0: (123ab(xy)cd)
- 1: 123ab(xy)cd
- 2: 123
- 3: cd
-
-/\( (((((((((( ( (?>[^()]+) | (?R) )* )))))))))) \) /x
-Capturing subpattern count = 11
-Options: extended
-First char = '('
-Need char = ')'
- (ab(xy)cd)
- 0: (ab(xy)cd)
- 1: ab(xy)cd
- 2: ab(xy)cd
- 3: ab(xy)cd
- 4: ab(xy)cd
- 5: ab(xy)cd
- 6: ab(xy)cd
- 7: ab(xy)cd
- 8: ab(xy)cd
- 9: ab(xy)cd
-10: ab(xy)cd
-11: cd
-
-/\( ( ( (?>[^()<>]+) | ((?>[^()]+)) | (?R) )* ) \) /x
-Capturing subpattern count = 3
-Options: extended
-First char = '('
-Need char = ')'
- (abcd(xyz<p>qrs)123)
- 0: (abcd(xyz<p>qrs)123)
- 1: abcd(xyz<p>qrs)123
- 2: 123
- 3: <unset>
-
-/\( ( ( (?>[^()]+) | ((?R)) )* ) \) /x
-Capturing subpattern count = 3
-Options: extended
-First char = '('
-Need char = ')'
- (ab(cd)ef)
- 0: (ab(cd)ef)
- 1: ab(cd)ef
- 2: ef
- 3: (cd)
- (ab(cd(ef)gh)ij)
- 0: (ab(cd(ef)gh)ij)
- 1: ab(cd(ef)gh)ij
- 2: ij
- 3: (cd(ef)gh)
-
-/^[[:alnum:]]/D
-------------------------------------------------------------------
- 0 37 Bra 0
- 3 ^
- 4 [0-9A-Za-z]
- 37 37 Ket
- 40 End
-------------------------------------------------------------------
-Capturing subpattern count = 0
-Options: anchored
-No first char
-No need char
-
-/^[[:alpha:]]/D
-------------------------------------------------------------------
- 0 37 Bra 0
- 3 ^
- 4 [A-Za-z]
- 37 37 Ket
- 40 End
-------------------------------------------------------------------
-Capturing subpattern count = 0
-Options: anchored
-No first char
-No need char
-
-/^[[:ascii:]]/D
-------------------------------------------------------------------
- 0 37 Bra 0
- 3 ^
- 4 [\x00-\x7f]
- 37 37 Ket
- 40 End
-------------------------------------------------------------------
-Capturing subpattern count = 0
-Options: anchored
-No first char
-No need char
-
-/^[[:blank:]]/D
-------------------------------------------------------------------
- 0 37 Bra 0
- 3 ^
- 4 [\x09 ]
- 37 37 Ket
- 40 End
-------------------------------------------------------------------
-Capturing subpattern count = 0
-Options: anchored
-No first char
-No need char
-
-/^[[:cntrl:]]/D
-------------------------------------------------------------------
- 0 37 Bra 0
- 3 ^
- 4 [\x00-\x1f\x7f]
- 37 37 Ket
- 40 End
-------------------------------------------------------------------
-Capturing subpattern count = 0
-Options: anchored
-No first char
-No need char
-
-/^[[:digit:]]/D
-------------------------------------------------------------------
- 0 37 Bra 0
- 3 ^
- 4 [0-9]
- 37 37 Ket
- 40 End
-------------------------------------------------------------------
-Capturing subpattern count = 0
-Options: anchored
-No first char
-No need char
-
-/^[[:graph:]]/D
-------------------------------------------------------------------
- 0 37 Bra 0
- 3 ^
- 4 [!-~]
- 37 37 Ket
- 40 End
-------------------------------------------------------------------
-Capturing subpattern count = 0
-Options: anchored
-No first char
-No need char
-
-/^[[:lower:]]/D
-------------------------------------------------------------------
- 0 37 Bra 0
- 3 ^
- 4 [a-z]
- 37 37 Ket
- 40 End
-------------------------------------------------------------------
-Capturing subpattern count = 0
-Options: anchored
-No first char
-No need char
-
-/^[[:print:]]/D
-------------------------------------------------------------------
- 0 37 Bra 0
- 3 ^
- 4 [ -~]
- 37 37 Ket
- 40 End
-------------------------------------------------------------------
-Capturing subpattern count = 0
-Options: anchored
-No first char
-No need char
-
-/^[[:punct:]]/D
-------------------------------------------------------------------
- 0 37 Bra 0
- 3 ^
- 4 [!-/:-@[-`{-~]
- 37 37 Ket
- 40 End
-------------------------------------------------------------------
-Capturing subpattern count = 0
-Options: anchored
-No first char
-No need char
-
-/^[[:space:]]/D
-------------------------------------------------------------------
- 0 37 Bra 0
- 3 ^
- 4 [\x09-\x0d ]
- 37 37 Ket
- 40 End
-------------------------------------------------------------------
-Capturing subpattern count = 0
-Options: anchored
-No first char
-No need char
-
-/^[[:upper:]]/D
-------------------------------------------------------------------
- 0 37 Bra 0
- 3 ^
- 4 [A-Z]
- 37 37 Ket
- 40 End
-------------------------------------------------------------------
-Capturing subpattern count = 0
-Options: anchored
-No first char
-No need char
-
-/^[[:xdigit:]]/D
-------------------------------------------------------------------
- 0 37 Bra 0
- 3 ^
- 4 [0-9A-Fa-f]
- 37 37 Ket
- 40 End
-------------------------------------------------------------------
-Capturing subpattern count = 0
-Options: anchored
-No first char
-No need char
-
-/^[[:word:]]/D
-------------------------------------------------------------------
- 0 37 Bra 0
- 3 ^
- 4 [0-9A-Z_a-z]
- 37 37 Ket
- 40 End
-------------------------------------------------------------------
-Capturing subpattern count = 0
-Options: anchored
-No first char
-No need char
-
-/^[[:^cntrl:]]/D
-------------------------------------------------------------------
- 0 37 Bra 0
- 3 ^
- 4 [ -~\x80-\xff]
- 37 37 Ket
- 40 End
-------------------------------------------------------------------
-Capturing subpattern count = 0
-Options: anchored
-No first char
-No need char
-
-/^[12[:^digit:]]/D
-------------------------------------------------------------------
- 0 37 Bra 0
- 3 ^
- 4 [\x00-/1-2:-\xff]
- 37 37 Ket
- 40 End
-------------------------------------------------------------------
-Capturing subpattern count = 0
-Options: anchored
-No first char
-No need char
-
-/^[[:^blank:]]/D
-------------------------------------------------------------------
- 0 37 Bra 0
- 3 ^
- 4 [\x00-\x08\x0a-\x1f!-\xff]
- 37 37 Ket
- 40 End
-------------------------------------------------------------------
-Capturing subpattern count = 0
-Options: anchored
-No first char
-No need char
-
-/[01[:alpha:]%]/D
-------------------------------------------------------------------
- 0 36 Bra 0
- 3 [%0-1A-Za-z]
- 36 36 Ket
- 39 End
-------------------------------------------------------------------
-Capturing subpattern count = 0
-No options
-No first char
-No need char
-
-/[[.ch.]]/
-Failed: POSIX collating elements are not supported at offset 1
-
-/[[=ch=]]/
-Failed: POSIX collating elements are not supported at offset 1
-
-/[[:rhubarb:]]/
-Failed: unknown POSIX class name at offset 3
-
-/[[:upper:]]/i
-Capturing subpattern count = 0
-Options: caseless
-No first char
-No need char
- A
- 0: A
- a
- 0: a
-
-/[[:lower:]]/i
-Capturing subpattern count = 0
-Options: caseless
-No first char
-No need char
- A
- 0: A
- a
- 0: a
-
-/((?-i)[[:lower:]])[[:lower:]]/i
-Capturing subpattern count = 1
-Options: caseless
-Case state changes
-No first char
-No need char
- ab
- 0: ab
- 1: a
- aB
- 0: aB
- 1: a
- *** Failers
- 0: ai
- 1: a
- Ab
-No match
- AB
-No match
-
-/[\200-\410]/
-Failed: range out of order in character class at offset 9
-
-/^(?(0)f|b)oo/
-Failed: invalid condition (?(0) at offset 5
-
-/This one's here because of the large output vector needed/
-Capturing subpattern count = 0
-No options
-First char = 'T'
-Need char = 'd'
-
-/(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\w+)\s+(\270)/
-Capturing subpattern count = 271
-Max back reference = 270
-No options
-No first char
-No need char
- \O900 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 ABC ABC
- 0: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 ABC ABC
- 1: 1
- 2: 2
- 3: 3
- 4: 4
- 5: 5
- 6: 6
- 7: 7
- 8: 8
- 9: 9
-10: 10
-11: 11
-12: 12
-13: 13
-14: 14
-15: 15
-16: 16
-17: 17
-18: 18
-19: 19
-20: 20
-21: 21
-22: 22
-23: 23
-24: 24
-25: 25
-26: 26
-27: 27
-28: 28
-29: 29
-30: 30
-31: 31
-32: 32
-33: 33
-34: 34
-35: 35
-36: 36
-37: 37
-38: 38
-39: 39
-40: 40
-41: 41
-42: 42
-43: 43
-44: 44
-45: 45
-46: 46
-47: 47
-48: 48
-49: 49
-50: 50
-51: 51
-52: 52
-53: 53
-54: 54
-55: 55
-56: 56
-57: 57
-58: 58
-59: 59
-60: 60
-61: 61
-62: 62
-63: 63
-64: 64
-65: 65
-66: 66
-67: 67
-68: 68
-69: 69
-70: 70
-71: 71
-72: 72
-73: 73
-74: 74
-75: 75
-76: 76
-77: 77
-78: 78
-79: 79
-80: 80
-81: 81
-82: 82
-83: 83
-84: 84
-85: 85
-86: 86
-87: 87
-88: 88
-89: 89
-90: 90
-91: 91
-92: 92
-93: 93
-94: 94
-95: 95
-96: 96
-97: 97
-98: 98
-99: 99
-100: 100
-101: 101
-102: 102
-103: 103
-104: 104
-105: 105
-106: 106
-107: 107
-108: 108
-109: 109
-110: 110
-111: 111
-112: 112
-113: 113
-114: 114
-115: 115
-116: 116
-117: 117
-118: 118
-119: 119
-120: 120
-121: 121
-122: 122
-123: 123
-124: 124
-125: 125
-126: 126
-127: 127
-128: 128
-129: 129
-130: 130
-131: 131
-132: 132
-133: 133
-134: 134
-135: 135
-136: 136
-137: 137
-138: 138
-139: 139
-140: 140
-141: 141
-142: 142
-143: 143
-144: 144
-145: 145
-146: 146
-147: 147
-148: 148
-149: 149
-150: 150
-151: 151
-152: 152
-153: 153
-154: 154
-155: 155
-156: 156
-157: 157
-158: 158
-159: 159
-160: 160
-161: 161
-162: 162
-163: 163
-164: 164
-165: 165
-166: 166
-167: 167
-168: 168
-169: 169
-170: 170
-171: 171
-172: 172
-173: 173
-174: 174
-175: 175
-176: 176
-177: 177
-178: 178
-179: 179
-180: 180
-181: 181
-182: 182
-183: 183
-184: 184
-185: 185
-186: 186
-187: 187
-188: 188
-189: 189
-190: 190
-191: 191
-192: 192
-193: 193
-194: 194
-195: 195
-196: 196
-197: 197
-198: 198
-199: 199
-200: 200
-201: 201
-202: 202
-203: 203
-204: 204
-205: 205
-206: 206
-207: 207
-208: 208
-209: 209
-210: 210
-211: 211
-212: 212
-213: 213
-214: 214
-215: 215
-216: 216
-217: 217
-218: 218
-219: 219
-220: 220
-221: 221
-222: 222
-223: 223
-224: 224
-225: 225
-226: 226
-227: 227
-228: 228
-229: 229
-230: 230
-231: 231
-232: 232
-233: 233
-234: 234
-235: 235
-236: 236
-237: 237
-238: 238
-239: 239
-240: 240
-241: 241
-242: 242
-243: 243
-244: 244
-245: 245
-246: 246
-247: 247
-248: 248
-249: 249
-250: 250
-251: 251
-252: 252
-253: 253
-254: 254
-255: 255
-256: 256
-257: 257
-258: 258
-259: 259
-260: 260
-261: 261
-262: 262
-263: 263
-264: 264
-265: 265
-266: 266
-267: 267
-268: 268
-269: 269
-270: ABC
-271: ABC
-
-/This one's here because Perl does this differently and PCRE can't at present/
-Capturing subpattern count = 0
-No options
-First char = 'T'
-Need char = 't'
-
-/(main(O)?)+/
-Capturing subpattern count = 2
-No options
-First char = 'm'
-Need char = 'n'
- mainmain
- 0: mainmain
- 1: main
- mainOmain
- 0: mainOmain
- 1: main
- 2: O
-
-/These are all cases where Perl does it differently (nested captures)/
-Capturing subpattern count = 1
-No options
-First char = 'T'
-Need char = 's'
-
-/^(a(b)?)+$/
-Capturing subpattern count = 2
-Options: anchored
-No first char
-Need char = 'a'
- aba
- 0: aba
- 1: a
- 2: b
-
-/^(aa(bb)?)+$/
-Capturing subpattern count = 2
-Options: anchored
-No first char
-Need char = 'a'
- aabbaa
- 0: aabbaa
- 1: aa
- 2: bb
-
-/^(aa|aa(bb))+$/
-Capturing subpattern count = 2
-Options: anchored
-No first char
-Need char = 'a'
- aabbaa
- 0: aabbaa
- 1: aa
- 2: bb
-
-/^(aa(bb)??)+$/
-Capturing subpattern count = 2
-Options: anchored
-No first char
-Need char = 'a'
- aabbaa
- 0: aabbaa
- 1: aa
- 2: bb
-
-/^(?:aa(bb)?)+$/
-Capturing subpattern count = 1
-Options: anchored
-No first char
-Need char = 'a'
- aabbaa
- 0: aabbaa
- 1: bb
-
-/^(aa(b(b))?)+$/
-Capturing subpattern count = 3
-Options: anchored
-No first char
-Need char = 'a'
- aabbaa
- 0: aabbaa
- 1: aa
- 2: bb
- 3: b
-
-/^(?:aa(b(b))?)+$/
-Capturing subpattern count = 2
-Options: anchored
-No first char
-Need char = 'a'
- aabbaa
- 0: aabbaa
- 1: bb
- 2: b
-
-/^(?:aa(b(?:b))?)+$/
-Capturing subpattern count = 1
-Options: anchored
-No first char
-Need char = 'a'
- aabbaa
- 0: aabbaa
- 1: bb
-
-/^(?:aa(bb(?:b))?)+$/
-Capturing subpattern count = 1
-Options: anchored
-No first char
-Need char = 'a'
- aabbbaa
- 0: aabbbaa
- 1: bbb
-
-/^(?:aa(b(?:bb))?)+$/
-Capturing subpattern count = 1
-Options: anchored
-No first char
-Need char = 'a'
- aabbbaa
- 0: aabbbaa
- 1: bbb
-
-/^(?:aa(?:b(b))?)+$/
-Capturing subpattern count = 1
-Options: anchored
-No first char
-Need char = 'a'
- aabbaa
- 0: aabbaa
- 1: b
-
-/^(?:aa(?:b(bb))?)+$/
-Capturing subpattern count = 1
-Options: anchored
-No first char
-Need char = 'a'
- aabbbaa
- 0: aabbbaa
- 1: bb
-
-/^(aa(b(bb))?)+$/
-Capturing subpattern count = 3
-Options: anchored
-No first char
-Need char = 'a'
- aabbbaa
- 0: aabbbaa
- 1: aa
- 2: bbb
- 3: bb
-
-/^(aa(bb(bb))?)+$/
-Capturing subpattern count = 3
-Options: anchored
-No first char
-Need char = 'a'
- aabbbbaa
- 0: aabbbbaa
- 1: aa
- 2: bbbb
- 3: bb
-
-/--------------------------------------------------------------------/
-Capturing subpattern count = 0
-No options
-First char = '-'
-Need char = '-'
-
-/#/xMD
-Memory allocation (code space): 7
-------------------------------------------------------------------
- 0 3 Bra 0
- 3 3 Ket
- 6 End
-------------------------------------------------------------------
-Capturing subpattern count = 0
-Options: extended
-No first char
-No need char
-
-/a#/xMD
-Memory allocation (code space): 13
-------------------------------------------------------------------
- 0 6 Bra 0
- 3 1 a
- 6 6 Ket
- 9 End
-------------------------------------------------------------------
-Capturing subpattern count = 0
-Options: extended
-First char = 'a'
-No need char
-
-/[\s]/D
-------------------------------------------------------------------
- 0 36 Bra 0
- 3 [\x09-\x0a\x0c-\x0d ]
- 36 36 Ket
- 39 End
-------------------------------------------------------------------
-Capturing subpattern count = 0
-No options
-No first char
-No need char
-
-/[\S]/D
-------------------------------------------------------------------
- 0 36 Bra 0
- 3 [\x00-\x08\x0b\x0e-\x1f!-\xff]
- 36 36 Ket
- 39 End
-------------------------------------------------------------------
-Capturing subpattern count = 0
-No options
-No first char
-No need char
-
-/a(?i)b/D
-------------------------------------------------------------------
- 0 11 Bra 0
- 3 1 a
- 6 01 Opt
- 8 1 b
- 11 11 Ket
- 14 End
-------------------------------------------------------------------
-Capturing subpattern count = 0
-No options
-Case state changes
-First char = 'a'
-Need char = 'b' (caseless)
- ab
- 0: ab
- aB
- 0: aB
- *** Failers
-No match
- AB
-No match
-
-/(a(?i)b)/D
-------------------------------------------------------------------
- 0 19 Bra 0
- 3 11 Bra 1
- 6 1 a
- 9 01 Opt
- 11 1 b
- 14 11 Ket
- 17 00 Opt
- 19 19 Ket
- 22 End
-------------------------------------------------------------------
-Capturing subpattern count = 1
-No options
-Case state changes
-First char = 'a'
-Need char = 'b' (caseless)
- ab
- 0: ab
- 1: ab
- aB
- 0: aB
- 1: aB
- *** Failers
-No match
- AB
-No match
-
-/ (?i)abc/xD
-------------------------------------------------------------------
- 0 8 Bra 0
- 3 3 abc
- 8 8 Ket
- 11 End
-------------------------------------------------------------------
-Capturing subpattern count = 0
-Options: caseless extended
-First char = 'a' (caseless)
-Need char = 'c' (caseless)
-
-/#this is a comment
- (?i)abc/xD
-------------------------------------------------------------------
- 0 8 Bra 0
- 3 3 abc
- 8 8 Ket
- 11 End
-------------------------------------------------------------------
-Capturing subpattern count = 0
-Options: caseless extended
-First char = 'a' (caseless)
-Need char = 'c' (caseless)
-
-/123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890/D
-------------------------------------------------------------------
- 0 307 Bra 0
- 3 250 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890
-255 50 12345678901234567890123456789012345678901234567890
-307 307 Ket
-310 End
-------------------------------------------------------------------
-Capturing subpattern count = 0
-No options
-First char = '1'
-Need char = '0'
-
-/\Q123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890/D
-------------------------------------------------------------------
- 0 307 Bra 0
- 3 250 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890
-255 50 12345678901234567890123456789012345678901234567890
-307 307 Ket
-310 End
-------------------------------------------------------------------
-Capturing subpattern count = 0
-No options
-First char = '1'
-Need char = '0'
-
-/\Q\E/D
-------------------------------------------------------------------
- 0 3 Bra 0
- 3 3 Ket
- 6 End
-------------------------------------------------------------------
-Capturing subpattern count = 0
-No options
-No first char
-No need char
- \
- 0:
-
-/\Q\Ex/D
-------------------------------------------------------------------
- 0 6 Bra 0
- 3 1 x
- 6 6 Ket
- 9 End
-------------------------------------------------------------------
-Capturing subpattern count = 0
-No options
-First char = 'x'
-No need char
-
-/ \Q\E/D
-------------------------------------------------------------------
- 0 6 Bra 0
- 3 1
- 6 6 Ket
- 9 End
-------------------------------------------------------------------
-Capturing subpattern count = 0
-No options
-First char = ' '
-No need char
-
-/a\Q\E/D
-------------------------------------------------------------------
- 0 6 Bra 0
- 3 1 a
- 6 6 Ket
- 9 End
-------------------------------------------------------------------
-Capturing subpattern count = 0
-No options
-First char = 'a'
-No need char
- abc
- 0: a
- bca
- 0: a
- bac
- 0: a
-
-/a\Q\Eb/D
-------------------------------------------------------------------
- 0 9 Bra 0
- 3 1 a
- 6 1 b
- 9 9 Ket
- 12 End
-------------------------------------------------------------------
-Capturing subpattern count = 0
-No options
-First char = 'a'
-Need char = 'b'
- abc
- 0: ab
-
-/\Q\Eabc/D
-------------------------------------------------------------------
- 0 8 Bra 0
- 3 3 abc
- 8 8 Ket
- 11 End
-------------------------------------------------------------------
-Capturing subpattern count = 0
-No options
-First char = 'a'
-Need char = 'c'
-
-/x*+\w/D
-------------------------------------------------------------------
- 0 12 Bra 0
- 3 5 Once
- 6 x*
- 8 5 Ket
- 11 \w
- 12 12 Ket
- 15 End
-------------------------------------------------------------------
-Capturing subpattern count = 0
-No options
-No first char
-No need char
- ****Failers
- 0: F
- xxxxx
-No match
-
-/x?+/D
-------------------------------------------------------------------
- 0 11 Bra 0
- 3 5 Once
- 6 x?
- 8 5 Ket
- 11 11 Ket
- 14 End
-------------------------------------------------------------------
-Capturing subpattern count = 0
-No options
-No first char
-No need char
-
-/x++/D
-------------------------------------------------------------------
- 0 11 Bra 0
- 3 5 Once
- 6 x+
- 8 5 Ket
- 11 11 Ket
- 14 End
-------------------------------------------------------------------
-Capturing subpattern count = 0
-No options
-First char = 'x'
-No need char
-
-/x{1,3}+/D
-------------------------------------------------------------------
- 0 16 Bra 0
- 3 10 Once
- 6 1 x
- 9 x{,2}
- 13 10 Ket
- 16 16 Ket
- 19 End
-------------------------------------------------------------------
-Capturing subpattern count = 0
-No options
-First char = 'x'
-No need char
-
-/(x)*+/D
-------------------------------------------------------------------
- 0 19 Bra 0
- 3 13 Once
- 6 Brazero
- 7 6 Bra 1
- 10 1 x
- 13 6 KetRmax
- 16 13 Ket
- 19 19 Ket
- 22 End
-------------------------------------------------------------------
-Capturing subpattern count = 1
-No options
-No first char
-No need char
-
-/^(\w++|\s++)*$/
-Capturing subpattern count = 1
-Options: anchored
-No first char
-No need char
- now is the time for all good men to come to the aid of the party
- 0: now is the time for all good men to come to the aid of the party
- 1: party
- *** Failers
-No match
- this is not a line with only words and spaces!
-No match
-
-/(\d++)(\w)/
-Capturing subpattern count = 2
-No options
-No first char
-No need char
- 12345a
- 0: 12345a
- 1: 12345
- 2: a
- *** Failers
-No match
- 12345+
-No match
-
-/a++b/
-Capturing subpattern count = 0
-No options
-First char = 'a'
-Need char = 'b'
- aaab
- 0: aaab
-
-/(a++b)/
-Capturing subpattern count = 1
-No options
-First char = 'a'
-Need char = 'b'
- aaab
- 0: aaab
- 1: aaab
-
-/(a++)b/
-Capturing subpattern count = 1
-No options
-First char = 'a'
-Need char = 'b'
- aaab
- 0: aaab
- 1: aaa
-
-/([^()]++|\([^()]*\))+/
-Capturing subpattern count = 1
-No options
-No first char
-No need char
- ((abc(ade)ufh()()x
- 0: abc(ade)ufh()()x
- 1: x
-
-/\(([^()]++|\([^()]+\))+\)/
-Capturing subpattern count = 1
-No options
-First char = '('
-Need char = ')'
- (abc)
- 0: (abc)
- 1: abc
- (abc(def)xyz)
- 0: (abc(def)xyz)
- 1: xyz
- *** Failers
-No match
- ((()aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-No match
-
-/(abc){1,3}+/D
-------------------------------------------------------------------
- 0 50 Bra 0
- 3 44 Once
- 6 8 Bra 1
- 9 3 abc
- 14 8 Ket
- 17 Brazero
- 18 26 Bra 0
- 21 8 Bra 1
- 24 3 abc
- 29 8 Ket
- 32 Brazero
- 33 8 Bra 1
- 36 3 abc
- 41 8 Ket
- 44 26 Ket
- 47 44 Ket
- 50 50 Ket
- 53 End
-------------------------------------------------------------------
-Capturing subpattern count = 1
-No options
-First char = 'a'
-Need char = 'c'
-
-/a+?+/
-Failed: nothing to repeat at offset 3
-
-/a{2,3}?+b/
-Failed: nothing to repeat at offset 7
-
-/(?U)a+?+/
-Failed: nothing to repeat at offset 7
-
-/a{2,3}?+b/U
-Failed: nothing to repeat at offset 7
-
-/x(?U)a++b/D
-------------------------------------------------------------------
- 0 17 Bra 0
- 3 1 x
- 6 5 Once
- 9 a+
- 11 5 Ket
- 14 1 b
- 17 17 Ket
- 20 End
-------------------------------------------------------------------
-Capturing subpattern count = 0
-No options
-First char = 'x'
-Need char = 'b'
- xaaaab
- 0: xaaaab
-
-/(?U)xa++b/D
-------------------------------------------------------------------
- 0 17 Bra 0
- 3 1 x
- 6 5 Once
- 9 a+
- 11 5 Ket
- 14 1 b
- 17 17 Ket
- 20 End
-------------------------------------------------------------------
-Capturing subpattern count = 0
-Options: ungreedy
-First char = 'x'
-Need char = 'b'
- xaaaab
- 0: xaaaab
-
-/^((a+)(?U)([ab]+)(?-U)([bc]+)(\w*))/D
-------------------------------------------------------------------
- 0 106 Bra 0
- 3 ^
- 4 99 Bra 1
- 7 5 Bra 2
- 10 a+
- 12 5 Ket
- 15 37 Bra 3
- 18 [a-b]+?
- 52 37 Ket
- 55 37 Bra 4
- 58 [b-c]+
- 92 37 Ket
- 95 5 Bra 5
- 98 \w*
-100 5 Ket
-103 99 Ket
-106 106 Ket
-109 End
-------------------------------------------------------------------
-Capturing subpattern count = 5
-Options: anchored
-No first char
-Need char = 'a'
-
-/^x(?U)a+b/D
-------------------------------------------------------------------
- 0 12 Bra 0
- 3 ^
- 4 1 x
- 7 a+?
- 9 1 b
- 12 12 Ket
- 15 End
-------------------------------------------------------------------
-Capturing subpattern count = 0
-Options: anchored
-No first char
-Need char = 'b'
-
-/^x(?U)(a+)b/D
-------------------------------------------------------------------
- 0 18 Bra 0
- 3 ^
- 4 1 x
- 7 5 Bra 1
- 10 a+?
- 12 5 Ket
- 15 1 b
- 18 18 Ket
- 21 End
-------------------------------------------------------------------
-Capturing subpattern count = 1
-Options: anchored
-No first char
-Need char = 'b'
-
-/[.x.]/
-Failed: POSIX collating elements are not supported at offset 0
-
-/[=x=]/
-Failed: POSIX collating elements are not supported at offset 0
-
-/[:x:]/
-Failed: POSIX named classes are supported only within a class at offset 0
-
-/\l/
-Failed: PCRE does not support \L, \l, \N, \P, \p, \U, \u, or \X at offset 1
-
-/\L/
-Failed: PCRE does not support \L, \l, \N, \P, \p, \U, \u, or \X at offset 1
-
-/\N{name}/
-Failed: PCRE does not support \L, \l, \N, \P, \p, \U, \u, or \X at offset 1
-
-/\pP/
-Failed: PCRE does not support \L, \l, \N, \P, \p, \U, \u, or \X at offset 1
-
-/\PP/
-Failed: PCRE does not support \L, \l, \N, \P, \p, \U, \u, or \X at offset 1
-
-/\p{prop}/
-Failed: PCRE does not support \L, \l, \N, \P, \p, \U, \u, or \X at offset 1
-
-/\P{prop}/
-Failed: PCRE does not support \L, \l, \N, \P, \p, \U, \u, or \X at offset 1
-
-/\u/
-Failed: PCRE does not support \L, \l, \N, \P, \p, \U, \u, or \X at offset 1
-
-/\U/
-Failed: PCRE does not support \L, \l, \N, \P, \p, \U, \u, or \X at offset 1
-
-/\X/
-Failed: PCRE does not support \L, \l, \N, \P, \p, \U, \u, or \X at offset 1
-
-/[/
-Failed: missing terminating ] for character class at offset 1
-
-/[a-/
-Failed: missing terminating ] for character class at offset 3
-
-/[[:space:]/
-Failed: missing terminating ] for character class at offset 10
-
-/[\s]/DM
-Memory allocation (code space): 40
-------------------------------------------------------------------
- 0 36 Bra 0
- 3 [\x09-\x0a\x0c-\x0d ]
- 36 36 Ket
- 39 End
-------------------------------------------------------------------
-Capturing subpattern count = 0
-No options
-No first char
-No need char
-
-/[[:space:]]/DM
-Memory allocation (code space): 40
-------------------------------------------------------------------
- 0 36 Bra 0
- 3 [\x09-\x0d ]
- 36 36 Ket
- 39 End
-------------------------------------------------------------------
-Capturing subpattern count = 0
-No options
-No first char
-No need char
-
-/[[:space:]abcde]/DM
-Memory allocation (code space): 40
-------------------------------------------------------------------
- 0 36 Bra 0
- 3 [\x09-\x0d a-e]
- 36 36 Ket
- 39 End
-------------------------------------------------------------------
-Capturing subpattern count = 0
-No options
-No first char
-No need char
-
-/< (?: (?(R) \d++ | [^<>]*+) | (?R)) * >/x
-Capturing subpattern count = 0
-Options: extended
-First char = '<'
-Need char = '>'
- <>
- 0: <>
- <abcd>
- 0: <abcd>
- <abc <123> hij>
- 0: <abc <123> hij>
- <abc <def> hij>
- 0: <def>
- <abc<>def>
- 0: <abc<>def>
- <abc<>
- 0: <>
- *** Failers
-No match
- <abc
-No match
-
-|8J\$WE\<\.rX\+ix\[d1b\!H\#\?vV0vrK\:ZH1\=2M\>iV\;\?aPhFB\<\*vW\@QW\@sO9\}cfZA\-i\'w\%hKd6gt1UJP\,15_\#QY\$M\^Mss_U\/\]\&LK9\[5vQub\^w\[KDD\<EjmhUZ\?\.akp2dF\>qmj\;2\}YWFdYx\.Ap\]hjCPTP\(n28k\+3\;o\&WXqs\/gOXdr\$\:r\'do0\;b4c\(f_Gr\=\"\\4\)\[01T7ajQJvL\$W\~mL_sS\/4h\:x\*\[ZN\=KLs\&L5zX\/\/\>it\,o\:aU\(\;Z\>pW\&T7oP\'2K\^E\:x9\'c\[\%z\-\,64JQ5AeH_G\#KijUKghQw\^\\vea3a\?kka_G\$8\#\`\*kynsxzBLru\'\]k_\[7FrVx\}\^\=\$blx\>s\-N\%j\;D\*aZDnsw\:YKZ\%Q\.Kne9\#hP\?\+b3\(SOvL\,\^\;\&u5\@\?5C5Bhb\=m\-vEh_L15Jl\]U\)0RP6\{q\%L\^_z5E\'Dw6X\b|DM
-Memory allocation (code space): 421
-------------------------------------------------------------------
- 0 417 Bra 0
- 3 250 8J$WE<.rX+ix[d1b!H#?vV0vrK:ZH1=2M>iV;?aPhFB<*vW@QW@sO9}cfZA-i'w%hKd6gt1UJP,15_#QY$M^Mss_U/]&LK9[5vQub^w[KDD<EjmhUZ?.akp2dF>qmj;2}YWFdYx.Ap]hjCPTP(n28k+3;o&WXqs/gOXdr$:r'do0;b4c(f_Gr="\4)[01T7ajQJvL$W~mL_sS/4h:x*[ZN=KLs&L5zX//>it,o:aU(;Z>pW&T7oP'2K^E:
-255 159 x9'c[%z-,64JQ5AeH_G#KijUKghQw^\vea3a?kka_G$8#`*kynsxzBLru']k_[7FrVx}^=$blx>s-N%j;D*aZDnsw:YKZ%Q.Kne9#hP?+b3(SOvL,^;&u5@?5C5Bhb=m-vEh_L15Jl]U)0RP6{q%L^_z5E'Dw6X
-416 \b
-417 417 Ket
-420 End
-------------------------------------------------------------------
-Capturing subpattern count = 0
-No options
-First char = '8'
-Need char = 'X'
-
-|\$\<\.X\+ix\[d1b\!H\#\?vV0vrK\:ZH1\=2M\>iV\;\?aPhFB\<\*vW\@QW\@sO9\}cfZA\-i\'w\%hKd6gt1UJP\,15_\#QY\$M\^Mss_U\/\]\&LK9\[5vQub\^w\[KDD\<EjmhUZ\?\.akp2dF\>qmj\;2\}YWFdYx\.Ap\]hjCPTP\(n28k\+3\;o\&WXqs\/gOXdr\$\:r\'do0\;b4c\(f_Gr\=\"\\4\)\[01T7ajQJvL\$W\~mL_sS\/4h\:x\*\[ZN\=KLs\&L5zX\/\/\>it\,o\:aU\(\;Z\>pW\&T7oP\'2K\^E\:x9\'c\[\%z\-\,64JQ5AeH_G\#KijUKghQw\^\\vea3a\?kka_G\$8\#\`\*kynsxzBLru\'\]k_\[7FrVx\}\^\=\$blx\>s\-N\%j\;D\*aZDnsw\:YKZ\%Q\.Kne9\#hP\?\+b3\(SOvL\,\^\;\&u5\@\?5C5Bhb\=m\-vEh_L15Jl\]U\)0RP6\{q\%L\^_z5E\'Dw6X\b|DM
-Memory allocation (code space): 416
-------------------------------------------------------------------
- 0 412 Bra 0
- 3 250 $<.X+ix[d1b!H#?vV0vrK:ZH1=2M>iV;?aPhFB<*vW@QW@sO9}cfZA-i'w%hKd6gt1UJP,15_#QY$M^Mss_U/]&LK9[5vQub^w[KDD<EjmhUZ?.akp2dF>qmj;2}YWFdYx.Ap]hjCPTP(n28k+3;o&WXqs/gOXdr$:r'do0;b4c(f_Gr="\4)[01T7ajQJvL$W~mL_sS/4h:x*[ZN=KLs&L5zX//>it,o:aU(;Z>pW&T7oP'2K^E:x9'c[
-255 154 %z-,64JQ5AeH_G#KijUKghQw^\vea3a?kka_G$8#`*kynsxzBLru']k_[7FrVx}^=$blx>s-N%j;D*aZDnsw:YKZ%Q.Kne9#hP?+b3(SOvL,^;&u5@?5C5Bhb=m-vEh_L15Jl]U)0RP6{q%L^_z5E'Dw6X
-411 \b
-412 412 Ket
-415 End
-------------------------------------------------------------------
-Capturing subpattern count = 0
-No options
-First char = '$'
-Need char = 'X'
-
-/(.*)\d+\1/I
-Capturing subpattern count = 1
-Max back reference = 1
-No options
-No first char
-No need char
-
-/(.*)\d+/I
-Capturing subpattern count = 1
-No options
-First char at start or follows \n
-No need char
-
-/(.*)\d+\1/Is
-Capturing subpattern count = 1
-Max back reference = 1
-Options: dotall
-No first char
-No need char
-
-/(.*)\d+/Is
-Capturing subpattern count = 1
-Options: anchored dotall
-No first char
-No need char
-
-/(.*(xyz))\d+\2/I
-Capturing subpattern count = 2
-Max back reference = 2
-No options
-No first char
-Need char = 'z'
-
-/((.*))\d+\1/I
-Capturing subpattern count = 2
-Max back reference = 1
-No options
-No first char
-No need char
- abc123bc
- 0: bc123bc
- 1: bc
- 2: bc
-
-/a[b]/I
-Capturing subpattern count = 0
-No options
-First char = 'a'
-Need char = 'b'
-
-/(?=a).*/I
-Capturing subpattern count = 0
-No options
-First char = 'a'
-No need char
-
-/(?=abc).xyz/iI
-Capturing subpattern count = 0
-Options: caseless
-First char = 'a' (caseless)
-Need char = 'z' (caseless)
-
-/(?=abc)(?i).xyz/I
-Capturing subpattern count = 0
-No options
-Case state changes
-First char = 'a'
-Need char = 'z' (caseless)
-
-/(?=a)(?=b)/I
-Capturing subpattern count = 0
-No options
-First char = 'a'
-No need char
-
-/(?=.)a/I
-Capturing subpattern count = 0
-No options
-First char = 'a'
-No need char
-
-/((?=abcda)a)/I
-Capturing subpattern count = 1
-No options
-First char = 'a'
-Need char = 'a'
-
-/((?=abcda)ab)/I
-Capturing subpattern count = 1
-No options
-First char = 'a'
-Need char = 'b'
-
-/()a/I
-Capturing subpattern count = 1
-No options
-No first char
-Need char = 'a'
-
-/(?(1)ab|ac)/I
-Capturing subpattern count = 0
-No options
-First char = 'a'
-No need char
-
-/(?(1)abz|acz)/I
-Capturing subpattern count = 0
-No options
-First char = 'a'
-Need char = 'z'
-
-/(?(1)abz)/I
-Capturing subpattern count = 0
-No options
-No first char
-No need char
-
-/(?(1)abz)123/I
-Capturing subpattern count = 0
-No options
-No first char
-Need char = '3'
-
-/(a)+/I
-Capturing subpattern count = 1
-No options
-First char = 'a'
-No need char
-
-/(a){2,3}/I
-Capturing subpattern count = 1
-No options
-First char = 'a'
-Need char = 'a'
-
-/(a)*/I
-Capturing subpattern count = 1
-No options
-No first char
-No need char
-
-/[a]/I
-Capturing subpattern count = 0
-No options
-First char = 'a'
-No need char
-
-/[ab]/I
-Capturing subpattern count = 0
-No options
-No first char
-No need char
-
-/[ab]/IS
-Capturing subpattern count = 0
-No options
-No first char
-No need char
-Starting character set: a b
-
-/[^a]/I
-Capturing subpattern count = 0
-No options
-No first char
-No need char
-
-/\d456/I
-Capturing subpattern count = 0
-No options
-No first char
-Need char = '6'
-
-/\d456/IS
-Capturing subpattern count = 0
-No options
-No first char
-Need char = '6'
-Starting character set: 0 1 2 3 4 5 6 7 8 9
-
-/a^b/I
-Capturing subpattern count = 0
-No options
-First char = 'a'
-Need char = 'b'
-
-/^a/mI
-Capturing subpattern count = 0
-Options: multiline
-First char at start or follows \n
-Need char = 'a'
- abcde
- 0: a
- xy\nabc
- 0: a
- *** Failers
-No match
- xyabc
-No match
-
-/c|abc/I
-Capturing subpattern count = 0
-No options
-No first char
-Need char = 'c'
-
-/(?i)[ab]/IS
-Capturing subpattern count = 0
-Options: caseless
-No first char
-No need char
-Starting character set: A B a b
-
-/[ab](?i)cd/IS
-Capturing subpattern count = 0
-No options
-Case state changes
-No first char
-Need char = 'd' (caseless)
-Starting character set: a b
-
-/abc(?C)def/
-Capturing subpattern count = 0
-No options
-First char = 'a'
-Need char = 'f'
- abcdef
---->abcdef
- 0 ^ ^
- 0: abcdef
- 1234abcdef
---->1234abcdef
- 0 ^ ^
- 0: abcdef
- *** Failers
-No match
- abcxyz
-No match
- abcxyzf
---->abcxyzf
- 0 ^ ^
-No match
-
-/abc(?C)de(?C1)f/
-Capturing subpattern count = 0
-No options
-First char = 'a'
-Need char = 'f'
- 123abcdef
---->123abcdef
- 0 ^ ^
- 1 ^ ^
- 0: abcdef
-
-/(?C1)\dabc(?C2)def/
-Capturing subpattern count = 0
-No options
-No first char
-Need char = 'f'
- 1234abcdef
---->1234abcdef
- 1 ^
- 1 ^
- 1 ^
- 1 ^
- 2 ^ ^
- 0: 4abcdef
- *** Failers
-No match
- abcdef
---->abcdef
- 1 ^
- 1 ^
- 1 ^
- 1 ^
- 1 ^
- 1 ^
-No match
-
-/(?C255)ab/
-Capturing subpattern count = 0
-No options
-First char = 'a'
-Need char = 'b'
-
-/(?C256)ab/
-Failed: number after (?C is > 255 at offset 6
-
-/(?Cab)xx/
-Failed: closing ) for (?C expected at offset 3
-
-/(?C12vr)x/
-Failed: closing ) for (?C expected at offset 5
-
-/abc(?C)def/
-Capturing subpattern count = 0
-No options
-First char = 'a'
-Need char = 'f'
- *** Failers
-No match
- \x83\x0\x61bcdef
---->\x83\x00abcdef
- 0 ^ ^
- 0: abcdef
-
-/(abc)(?C)de(?C1)f/
-Capturing subpattern count = 1
-No options
-First char = 'a'
-Need char = 'f'
- 123abcdef
---->123abcdef
- 0 ^ ^
- 1 ^ ^
- 0: abcdef
- 1: abc
- 123abcdef\C+
-Callout 0: last capture = 1
- 0: <unset>
- 1: abc
---->123abcdef
- ^ ^
-Callout 1: last capture = 1
- 0: <unset>
- 1: abc
---->123abcdef
- ^ ^
- 0: abcdef
- 1: abc
- 123abcdef\C-
- 0: abcdef
- 1: abc
- *** Failers
-No match
- 123abcdef\C!1
---->123abcdef
- 0 ^ ^
- 1 ^ ^
-No match
-
-/(?C0)(abc(?C1))*/
-Capturing subpattern count = 1
-No options
-No first char
-No need char
- abcabcabc
---->abcabcabc
- 0 ^
- 1 ^ ^
- 1 ^ ^
- 1 ^ ^
- 0: abcabcabc
- 1: abc
- abcabc\C!1!3
---->abcabc
- 0 ^
- 1 ^ ^
- 1 ^ ^
- 0: abcabc
- 1: abc
- *** Failers
---->*** Failers
- 0 ^
- 0:
- abcabcabc\C!1!3
---->abcabcabc
- 0 ^
- 1 ^ ^
- 1 ^ ^
- 1 ^ ^
- 0: abcabc
- 1: abc
-
-/(\d{3}(?C))*/
-Capturing subpattern count = 1
-No options
-No first char
-No need char
- 123\C+
-Callout 0: last capture = -1
- 0: <unset>
---->123
- ^ ^
- 0: 123
- 1: 123
- 123456\C+
-Callout 0: last capture = -1
- 0: <unset>
---->123456
- ^ ^
-Callout 0: last capture = 1
- 0: <unset>
- 1: 123
---->123456
- ^ ^
- 0: 123456
- 1: 456
- 123456789\C+
-Callout 0: last capture = -1
- 0: <unset>
---->123456789
- ^ ^
-Callout 0: last capture = 1
- 0: <unset>
- 1: 123
---->123456789
- ^ ^
-Callout 0: last capture = 1
- 0: <unset>
- 1: 456
---->123456789
- ^ ^
- 0: 123456789
- 1: 789
-
-/((xyz)(?C)p|(?C1)xyzabc)/
-Capturing subpattern count = 2
-No options
-First char = 'x'
-No need char
- xyzabc\C+
-Callout 0: last capture = 2
- 0: <unset>
- 1: <unset>
- 2: xyz
---->xyzabc
- ^ ^
-Callout 1: last capture = -1
- 0: <unset>
---->xyzabc
- ^
- 0: xyzabc
- 1: xyzabc
-
-/(X)((xyz)(?C)p|(?C1)xyzabc)/
-Capturing subpattern count = 3
-No options
-First char = 'X'
-Need char = 'x'
- Xxyzabc\C+
-Callout 0: last capture = 3
- 0: <unset>
- 1: X
- 2: <unset>
- 3: xyz
---->Xxyzabc
- ^ ^
-Callout 1: last capture = 1
- 0: <unset>
- 1: X
---->Xxyzabc
- ^^
- 0: Xxyzabc
- 1: X
- 2: xyzabc
-
-/(?=(abc))(?C)abcdef/
-Capturing subpattern count = 1
-No options
-First char = 'a'
-Need char = 'f'
- abcdef\C+
-Callout 0: last capture = 1
- 0: <unset>
- 1: abc
---->abcdef
- ^
- 0: abcdef
- 1: abc
-
-/(?!(abc)(?C1)d)(?C2)abcxyz/
-Capturing subpattern count = 1
-No options
-First char = 'a'
-Need char = 'z'
- abcxyz\C+
-Callout 1: last capture = 1
- 0: <unset>
- 1: abc
---->abcxyz
- ^ ^
-Callout 2: last capture = -1
- 0: <unset>
---->abcxyz
- ^
- 0: abcxyz
-
-/(?<=(abc)(?C))xyz/
-Capturing subpattern count = 1
-No options
-First char = 'x'
-Need char = 'z'
- abcxyz\C+
-Callout 0: last capture = 1
- 0: <unset>
- 1: abc
---->abcxyz
- ^
- 0: xyz
- 1: abc
-
-/(?C)abc/
-Capturing subpattern count = 0
-No options
-First char = 'a'
-Need char = 'c'
-
-/(?C)^abc/
-Capturing subpattern count = 0
-Options: anchored
-No first char
-Need char = 'c'
-
-/(?C)a|b/S
-Capturing subpattern count = 0
-No options
-No first char
-No need char
-Starting character set: a b
-
-/(?R)/
-Failed: recursive call could loop indefinitely at offset 3
-
-/(a|(?R))/
-Failed: recursive call could loop indefinitely at offset 6
-
-/(ab|(bc|(de|(?R))))/
-Failed: recursive call could loop indefinitely at offset 15
-
-/x(ab|(bc|(de|(?R))))/
-Capturing subpattern count = 3
-No options
-First char = 'x'
-No need char
- xab
- 0: xab
- 1: ab
- xbc
- 0: xbc
- 1: bc
- 2: bc
- xde
- 0: xde
- 1: de
- 2: de
- 3: de
- xxab
- 0: xxab
- 1: xab
- 2: xab
- 3: xab
- xxxab
- 0: xxxab
- 1: xxab
- 2: xxab
- 3: xxab
- *** Failers
-No match
- xyab
-No match
-
-/(ab|(bc|(de|(?1))))/
-Failed: recursive call could loop indefinitely at offset 15
-
-/x(ab|(bc|(de|(?1)x)x)x)/
-Failed: recursive call could loop indefinitely at offset 16
-
-/^([^()]|\((?1)*\))*$/
-Capturing subpattern count = 1
-Options: anchored
-No first char
-No need char
- abc
- 0: abc
- 1: c
- a(b)c
- 0: a(b)c
- 1: c
- a(b(c))d
- 0: a(b(c))d
- 1: d
- *** Failers)
-No match
- a(b(c)d
-No match
-
-/^>abc>([^()]|\((?1)*\))*<xyz<$/
-Capturing subpattern count = 1
-Options: anchored
-No first char
-Need char = '<'
- >abc>123<xyz<
- 0: >abc>123<xyz<
- 1: 3
- >abc>1(2)3<xyz<
- 0: >abc>1(2)3<xyz<
- 1: 3
- >abc>(1(2)3)<xyz<
- 0: >abc>(1(2)3)<xyz<
- 1: (1(2)3)
-
-/(a(?1)b)/D
-------------------------------------------------------------------
- 0 18 Bra 0
- 3 12 Bra 1
- 6 1 a
- 9 3 Recurse
- 12 1 b
- 15 12 Ket
- 18 18 Ket
- 21 End
-------------------------------------------------------------------
-Capturing subpattern count = 1
-No options
-First char = 'a'
-Need char = 'b'
-
-/(a(?1)+b)/D
-------------------------------------------------------------------
- 0 24 Bra 0
- 3 18 Bra 1
- 6 1 a
- 9 6 Bra 0
- 12 3 Recurse
- 15 6 KetRmax
- 18 1 b
- 21 18 Ket
- 24 24 Ket
- 27 End
-------------------------------------------------------------------
-Capturing subpattern count = 1
-No options
-First char = 'a'
-Need char = 'b'
-
-/^\W*(?:((.)\W*(?1)\W*\2|)|((.)\W*(?3)\W*\4|\W*.\W*))\W*$/i
-Capturing subpattern count = 4
-Max back reference = 4
-Options: anchored caseless
-No first char
-No need char
- 1221
- 0: 1221
- 1: 1221
- 2: 1
- Satan, oscillate my metallic sonatas!
- 0: Satan, oscillate my metallic sonatas!
- 1: <unset>
- 2: <unset>
- 3: Satan, oscillate my metallic sonatas
- 4: S
- A man, a plan, a canal: Panama!
- 0: A man, a plan, a canal: Panama!
- 1: <unset>
- 2: <unset>
- 3: A man, a plan, a canal: Panama
- 4: A
- Able was I ere I saw Elba.
- 0: Able was I ere I saw Elba.
- 1: <unset>
- 2: <unset>
- 3: Able was I ere I saw Elba
- 4: A
- *** Failers
-No match
- The quick brown fox
-No match
-
-/^(\d+|\((?1)([+*-])(?1)\)|-(?1))$/
-Capturing subpattern count = 2
-Options: anchored
-No first char
-No need char
- 12
- 0: 12
- 1: 12
- (((2+2)*-3)-7)
- 0: (((2+2)*-3)-7)
- 1: (((2+2)*-3)-7)
- 2: -
- -12
- 0: -12
- 1: -12
- *** Failers
-No match
- ((2+2)*-3)-7)
-No match
-
-/^(x(y|(?1){2})z)/
-Capturing subpattern count = 2
-Options: anchored
-No first char
-Need char = 'z'
- xyz
- 0: xyz
- 1: xyz
- 2: y
- xxyzxyzz
- 0: xxyzxyzz
- 1: xxyzxyzz
- 2: xyzxyz
- *** Failers
-No match
- xxyzz
-No match
- xxyzxyzxyzz
-No match
-
-/((< (?: (?(R) \d++ | [^<>]*+) | (?2)) * >))/x
-Capturing subpattern count = 2
-Options: extended
-First char = '<'
-Need char = '>'
- <>
- 0: <>
- 1: <>
- 2: <>
- <abcd>
- 0: <abcd>
- 1: <abcd>
- 2: <abcd>
- <abc <123> hij>
- 0: <abc <123> hij>
- 1: <abc <123> hij>
- 2: <abc <123> hij>
- <abc <def> hij>
- 0: <def>
- 1: <def>
- 2: <def>
- <abc<>def>
- 0: <abc<>def>
- 1: <abc<>def>
- 2: <abc<>def>
- <abc<>
- 0: <>
- 1: <>
- 2: <>
- *** Failers
-No match
- <abc
-No match
-
-/(?1)/
-Failed: reference to non-existent subpattern at offset 3
-
-/((?2)(abc)/
-Failed: reference to non-existent subpattern at offset 4
-
-/^(abc)def(?1)/
-Capturing subpattern count = 1
-Options: anchored
-No first char
-Need char = 'f'
- abcdefabc
- 0: abcdefabc
- 1: abc
-
-/^(a|b|c)=(?1)+/
-Capturing subpattern count = 1
-Options: anchored
-No first char
-Need char = '='
- a=a
- 0: a=a
- 1: a
- a=b
- 0: a=b
- 1: a
- a=bc
- 0: a=bc
- 1: a
-
-/^(a|b|c)=((?1))+/
-Capturing subpattern count = 2
-Options: anchored
-No first char
-Need char = '='
- a=a
- 0: a=a
- 1: a
- 2: a
- a=b
- 0: a=b
- 1: a
- 2: b
- a=bc
- 0: a=bc
- 1: a
- 2: c
-
-/a(?P<name1>b|c)d(?P<longername2>e)/D
-------------------------------------------------------------------
- 0 33 Bra 0
- 3 1 a
- 6 6 Bra 1
- 9 1 b
- 12 6 Alt
- 15 1 c
- 18 12 Ket
- 21 1 d
- 24 6 Bra 2
- 27 1 e
- 30 6 Ket
- 33 33 Ket
- 36 End
-------------------------------------------------------------------
-Capturing subpattern count = 2
-Named capturing subpatterns:
- longername2 2
- name1 1
-No options
-First char = 'a'
-Need char = 'e'
- abde
- 0: abde
- 1: b
- 2: e
- acde
- 0: acde
- 1: c
- 2: e
-
-/(?:a(?P<c>c(?P<d>d)))(?P<a>a)/D
-------------------------------------------------------------------
- 0 39 Bra 0
- 3 24 Bra 0
- 6 1 a
- 9 15 Bra 1
- 12 1 c
- 15 6 Bra 2
- 18 1 d
- 21 6 Ket
- 24 15 Ket
- 27 24 Ket
- 30 6 Bra 3
- 33 1 a
- 36 6 Ket
- 39 39 Ket
- 42 End
-------------------------------------------------------------------
-Capturing subpattern count = 3
-Named capturing subpatterns:
- a 3
- c 1
- d 2
-No options
-First char = 'a'
-Need char = 'a'
-
-/(?P<a>a)...(?P=a)bbb(?P>a)d/D
-------------------------------------------------------------------
- 0 29 Bra 0
- 3 6 Bra 1
- 6 1 a
- 9 6 Ket
- 12 Any
- 13 Any
- 14 Any
- 15 \1
- 18 3 bbb
- 23 3 Recurse
- 26 1 d
- 29 29 Ket
- 32 End
-------------------------------------------------------------------
-Capturing subpattern count = 1
-Named capturing subpatterns:
- a 1
-No options
-First char = 'a'
-Need char = 'd'
-
-/ End of testinput2 /
-Capturing subpattern count = 0
-No options
-First char = ' '
-Need char = ' '
-
diff --git a/ext/pcre/pcrelib/testdata/testoutput3 b/ext/pcre/pcrelib/testdata/testoutput3
deleted file mode 100644
index 8cc3e8dc64..0000000000
--- a/ext/pcre/pcrelib/testdata/testoutput3
+++ /dev/null
@@ -1,116 +0,0 @@
-PCRE version 3.92 11-Sep-2002
-
-/^[\w]+/
- *** Failers
-No match
- École
-No match
-
-/^[\w]+/Lfr
- École
- 0: École
-
-/^[\w]+/
- *** Failers
-No match
- École
-No match
-
-/^[\W]+/
- École
- 0: \xc9
-
-/^[\W]+/Lfr
- *** Failers
- 0: ***
- École
-No match
-
-/[\b]/
- \b
- 0: \x08
- *** Failers
-No match
- a
-No match
-
-/[\b]/Lfr
- \b
- 0: \x08
- *** Failers
-No match
- a
-No match
-
-/^\w+/
- *** Failers
-No match
- École
-No match
-
-/^\w+/Lfr
- École
- 0: École
-
-/(.+)\b(.+)/
- École
- 0: \xc9cole
- 1: \xc9
- 2: cole
-
-/(.+)\b(.+)/Lfr
- *** Failers
- 0: *** Failers
- 1: ***
- 2: Failers
- École
-No match
-
-/École/i
- École
- 0: \xc9cole
- *** Failers
-No match
- école
-No match
-
-/École/iLfr
- École
- 0: École
- école
- 0: école
-
-/\w/IS
-Capturing subpattern count = 0
-No options
-No first char
-No need char
-Starting character set: 0 1 2 3 4 5 6 7 8 9 A B C D E F G H I J K L M N O P
- Q R S T U V W X Y Z _ a b c d e f g h i j k l m n o p q r s t u v w x y z
-
-/\w/ISLfr
-Capturing subpattern count = 0
-No options
-No first char
-No need char
-Starting character set: 0 1 2 3 4 5 6 7 8 9 A B C D E F G H I J K L M N O P
- Q R S T U V W X Y Z _ a b c d e f g h i j k l m n o p q r s t u v w x y z
- À Á Â Ã Ä Å Æ Ç È É Ê Ë Ì Í Î Ï Ð Ñ Ò Ó Ô Õ Ö Ø Ù Ú Û Ü Ý Þ ß à á â ã ä å
- æ ç è é ê ë ì í î ï ð ñ ò ó ô õ ö ø ù ú û ü ý þ ÿ
-
-/^[\xc8-\xc9]/iLfr
- École
- 0: É
- école
- 0: é
-
-/^[\xc8-\xc9]/Lfr
- École
- 0: É
- *** Failers
-No match
- école
-No match
-
-/ End of testinput3 /
-
diff --git a/ext/pcre/pcrelib/testdata/testoutput4 b/ext/pcre/pcrelib/testdata/testoutput4
deleted file mode 100644
index 3018c9baa7..0000000000
--- a/ext/pcre/pcrelib/testdata/testoutput4
+++ /dev/null
@@ -1,304 +0,0 @@
-PCRE version 3.92 11-Sep-2002
-
-/-- Do not use the \x{} construct except with patterns that have the --/
-/-- /8 option set, because PCRE doesn't recognize them as UTF-8 unless --/
-No match
-/-- that option is set. However, the latest Perls recognize them always. --/
-No match
-
-/a.b/8
- acb
- 0: acb
- a\x7fb
- 0: a\x{7f}b
- a\x{100}b
- 0: a\x{100}b
- *** Failers
-No match
- a\nb
-No match
-
-/a(.{3})b/8
- a\x{4000}xyb
- 0: a\x{4000}xyb
- 1: \x{4000}xy
- a\x{4000}\x7fyb
- 0: a\x{4000}\x{7f}yb
- 1: \x{4000}\x{7f}y
- a\x{4000}\x{100}yb
- 0: a\x{4000}\x{100}yb
- 1: \x{4000}\x{100}y
- *** Failers
-No match
- a\x{4000}b
-No match
- ac\ncb
-No match
-
-/a(.*?)(.)/
- a\xc0\x88b
- 0: a\xc0
- 1:
- 2: \xc0
-
-/a(.*?)(.)/8
- a\x{100}b
- 0: a\x{100}
- 1:
- 2: \x{100}
-
-/a(.*)(.)/
- a\xc0\x88b
- 0: a\xc0\x88b
- 1: \xc0\x88
- 2: b
-
-/a(.*)(.)/8
- a\x{100}b
- 0: a\x{100}b
- 1: \x{100}
- 2: b
-
-/a(.)(.)/
- a\xc0\x92bcd
- 0: a\xc0\x92
- 1: \xc0
- 2: \x92
-
-/a(.)(.)/8
- a\x{240}bcd
- 0: a\x{240}b
- 1: \x{240}
- 2: b
-
-/a(.?)(.)/
- a\xc0\x92bcd
- 0: a\xc0\x92
- 1: \xc0
- 2: \x92
-
-/a(.?)(.)/8
- a\x{240}bcd
- 0: a\x{240}b
- 1: \x{240}
- 2: b
-
-/a(.??)(.)/
- a\xc0\x92bcd
- 0: a\xc0
- 1:
- 2: \xc0
-
-/a(.??)(.)/8
- a\x{240}bcd
- 0: a\x{240}
- 1:
- 2: \x{240}
-
-/a(.{3})b/8
- a\x{1234}xyb
- 0: a\x{1234}xyb
- 1: \x{1234}xy
- a\x{1234}\x{4321}yb
- 0: a\x{1234}\x{4321}yb
- 1: \x{1234}\x{4321}y
- a\x{1234}\x{4321}\x{3412}b
- 0: a\x{1234}\x{4321}\x{3412}b
- 1: \x{1234}\x{4321}\x{3412}
- *** Failers
-No match
- a\x{1234}b
-No match
- ac\ncb
-No match
-
-/a(.{3,})b/8
- a\x{1234}xyb
- 0: a\x{1234}xyb
- 1: \x{1234}xy
- a\x{1234}\x{4321}yb
- 0: a\x{1234}\x{4321}yb
- 1: \x{1234}\x{4321}y
- a\x{1234}\x{4321}\x{3412}b
- 0: a\x{1234}\x{4321}\x{3412}b
- 1: \x{1234}\x{4321}\x{3412}
- axxxxbcdefghijb
- 0: axxxxbcdefghijb
- 1: xxxxbcdefghij
- a\x{1234}\x{4321}\x{3412}\x{3421}b
- 0: a\x{1234}\x{4321}\x{3412}\x{3421}b
- 1: \x{1234}\x{4321}\x{3412}\x{3421}
- *** Failers
-No match
- a\x{1234}b
-No match
-
-/a(.{3,}?)b/8
- a\x{1234}xyb
- 0: a\x{1234}xyb
- 1: \x{1234}xy
- a\x{1234}\x{4321}yb
- 0: a\x{1234}\x{4321}yb
- 1: \x{1234}\x{4321}y
- a\x{1234}\x{4321}\x{3412}b
- 0: a\x{1234}\x{4321}\x{3412}b
- 1: \x{1234}\x{4321}\x{3412}
- axxxxbcdefghijb
- 0: axxxxb
- 1: xxxx
- a\x{1234}\x{4321}\x{3412}\x{3421}b
- 0: a\x{1234}\x{4321}\x{3412}\x{3421}b
- 1: \x{1234}\x{4321}\x{3412}\x{3421}
- *** Failers
-No match
- a\x{1234}b
-No match
-
-/a(.{3,5})b/8
- a\x{1234}xyb
- 0: a\x{1234}xyb
- 1: \x{1234}xy
- a\x{1234}\x{4321}yb
- 0: a\x{1234}\x{4321}yb
- 1: \x{1234}\x{4321}y
- a\x{1234}\x{4321}\x{3412}b
- 0: a\x{1234}\x{4321}\x{3412}b
- 1: \x{1234}\x{4321}\x{3412}
- axxxxbcdefghijb
- 0: axxxxb
- 1: xxxx
- a\x{1234}\x{4321}\x{3412}\x{3421}b
- 0: a\x{1234}\x{4321}\x{3412}\x{3421}b
- 1: \x{1234}\x{4321}\x{3412}\x{3421}
- axbxxbcdefghijb
- 0: axbxxb
- 1: xbxx
- axxxxxbcdefghijb
- 0: axxxxxb
- 1: xxxxx
- *** Failers
-No match
- a\x{1234}b
-No match
- axxxxxxbcdefghijb
-No match
-
-/a(.{3,5}?)b/8
- a\x{1234}xyb
- 0: a\x{1234}xyb
- 1: \x{1234}xy
- a\x{1234}\x{4321}yb
- 0: a\x{1234}\x{4321}yb
- 1: \x{1234}\x{4321}y
- a\x{1234}\x{4321}\x{3412}b
- 0: a\x{1234}\x{4321}\x{3412}b
- 1: \x{1234}\x{4321}\x{3412}
- axxxxbcdefghijb
- 0: axxxxb
- 1: xxxx
- a\x{1234}\x{4321}\x{3412}\x{3421}b
- 0: a\x{1234}\x{4321}\x{3412}\x{3421}b
- 1: \x{1234}\x{4321}\x{3412}\x{3421}
- axbxxbcdefghijb
- 0: axbxxb
- 1: xbxx
- axxxxxbcdefghijb
- 0: axxxxxb
- 1: xxxxx
- *** Failers
-No match
- a\x{1234}b
-No match
- axxxxxxbcdefghijb
-No match
-
-/^[a\x{c0}]/8
- *** Failers
-No match
- \x{100}
-No match
-
-/(?<=aXb)cd/8
- aXbcd
- 0: cd
-
-/(?<=a\x{100}b)cd/8
- a\x{100}bcd
- 0: cd
-
-/(?<=a\x{100000}b)cd/8
- a\x{100000}bcd
- 0: cd
-
-/(?:\x{100}){3}b/8
- \x{100}\x{100}\x{100}b
- 0: \x{100}\x{100}\x{100}b
- *** Failers
-No match
- \x{100}\x{100}b
-No match
-
-/\x{ab}/8
- \x{ab}
- 0: \x{ab}
- \xc2\xab
- 0: \x{ab}
- *** Failers
-No match
- \x00{ab}
-No match
-
-/(?<=(.))X/8
- WXYZ
- 0: X
- 1: W
- \x{256}XYZ
- 0: X
- 1: \x{256}
- *** Failers
-No match
- XYZ
-No match
-
-/X(\C{3})/8
- X\x{1234}
- 0: X\x{1234}
- 1: \x{1234}
-
-/X(\C{4})/8
- X\x{1234}YZ
- 0: X\x{1234}Y
- 1: \x{1234}Y
-
-/X\C*/8
- XYZabcdce
- 0: XYZabcdce
-
-/X\C*?/8
- XYZabcde
- 0: X
-
-/X\C{3,5}/8
- Xabcdefg
- 0: Xabcde
- X\x{1234}
- 0: X\x{1234}
- X\x{1234}YZ
- 0: X\x{1234}YZ
- X\x{1234}\x{512}
- 0: X\x{1234}\x{512}
- X\x{1234}\x{512}YZ
- 0: X\x{1234}\x{512}
-
-/X\C{3,5}?/8
- Xabcdefg
- 0: Xabc
- X\x{1234}
- 0: X\x{1234}
- X\x{1234}YZ
- 0: X\x{1234}
- X\x{1234}\x{512}
- 0: X\x{1234}
-
-/ End of testinput4 /
-
diff --git a/ext/pcre/pcrelib/testdata/testoutput5 b/ext/pcre/pcrelib/testdata/testoutput5
deleted file mode 100644
index 01daca505e..0000000000
--- a/ext/pcre/pcrelib/testdata/testoutput5
+++ /dev/null
@@ -1,339 +0,0 @@
-PCRE version 3.92 11-Sep-2002
-
-/\x{100}/8DM
-Memory allocation (code space): 11
-------------------------------------------------------------------
- 0 7 Bra 0
- 3 2 \xc4\x80
- 7 7 Ket
- 10 End
-------------------------------------------------------------------
-Capturing subpattern count = 0
-Options: utf8
-First char = 196
-Need char = 128
-
-/\x{1000}/8DM
-Memory allocation (code space): 12
-------------------------------------------------------------------
- 0 8 Bra 0
- 3 3 \xe1\x80\x80
- 8 8 Ket
- 11 End
-------------------------------------------------------------------
-Capturing subpattern count = 0
-Options: utf8
-First char = 225
-Need char = 128
-
-/\x{10000}/8DM
-Memory allocation (code space): 13
-------------------------------------------------------------------
- 0 9 Bra 0
- 3 4 \xf0\x90\x80\x80
- 9 9 Ket
- 12 End
-------------------------------------------------------------------
-Capturing subpattern count = 0
-Options: utf8
-First char = 240
-Need char = 128
-
-/\x{100000}/8DM
-Memory allocation (code space): 13
-------------------------------------------------------------------
- 0 9 Bra 0
- 3 4 \xf4\x80\x80\x80
- 9 9 Ket
- 12 End
-------------------------------------------------------------------
-Capturing subpattern count = 0
-Options: utf8
-First char = 244
-Need char = 128
-
-/\x{1000000}/8DM
-Memory allocation (code space): 14
-------------------------------------------------------------------
- 0 10 Bra 0
- 3 5 \xf9\x80\x80\x80\x80
- 10 10 Ket
- 13 End
-------------------------------------------------------------------
-Capturing subpattern count = 0
-Options: utf8
-First char = 249
-Need char = 128
-
-/\x{4000000}/8DM
-Memory allocation (code space): 15
-------------------------------------------------------------------
- 0 11 Bra 0
- 3 6 \xfc\x84\x80\x80\x80\x80
- 11 11 Ket
- 14 End
-------------------------------------------------------------------
-Capturing subpattern count = 0
-Options: utf8
-First char = 252
-Need char = 128
-
-/\x{7fffFFFF}/8DM
-Memory allocation (code space): 15
-------------------------------------------------------------------
- 0 11 Bra 0
- 3 6 \xfd\xbf\xbf\xbf\xbf\xbf
- 11 11 Ket
- 14 End
-------------------------------------------------------------------
-Capturing subpattern count = 0
-Options: utf8
-First char = 253
-Need char = 191
-
-/[\x{ff}]/8DM
-Memory allocation (code space): 40
-------------------------------------------------------------------
- 0 6 Bra 0
- 3 1 \xff
- 6 6 Ket
- 9 End
-------------------------------------------------------------------
-Capturing subpattern count = 0
-Options: utf8
-First char = 255
-No need char
-
-/[\x{100}]/8DM
-Failed: characters with values > 255 are not yet supported in classes at offset 7
-
-/\x{ffffffff}/8
-Failed: character value in \x{...} sequence is too large at offset 11
-
-/\x{100000000}/8
-Failed: character value in \x{...} sequence is too large at offset 12
-
-/^\x{100}a\x{1234}/8
- \x{100}a\x{1234}bcd
- 0: \x{100}a\x{1234}
-
-/\x80/8D
-------------------------------------------------------------------
- 0 7 Bra 0
- 3 2 \xc2\x80
- 7 7 Ket
- 10 End
-------------------------------------------------------------------
-Capturing subpattern count = 0
-Options: utf8
-First char = 194
-Need char = 128
-
-/\xff/8D
-------------------------------------------------------------------
- 0 7 Bra 0
- 3 2 \xc3\xbf
- 7 7 Ket
- 10 End
-------------------------------------------------------------------
-Capturing subpattern count = 0
-Options: utf8
-First char = 195
-Need char = 191
-
-/\x{0041}\x{2262}\x{0391}\x{002e}/D8
-------------------------------------------------------------------
- 0 12 Bra 0
- 3 7 A\xe2\x89\xa2\xce\x91.
- 12 12 Ket
- 15 End
-------------------------------------------------------------------
-Capturing subpattern count = 0
-Options: utf8
-First char = 'A'
-Need char = '.'
- \x{0041}\x{2262}\x{0391}\x{002e}
- 0: A\x{2262}\x{391}.
-
-/\x{D55c}\x{ad6d}\x{C5B4}/D8
-------------------------------------------------------------------
- 0 14 Bra 0
- 3 9 \xed\x95\x9c\xea\xb5\xad\xec\x96\xb4
- 14 14 Ket
- 17 End
-------------------------------------------------------------------
-Capturing subpattern count = 0
-Options: utf8
-First char = 237
-Need char = 180
- \x{D55c}\x{ad6d}\x{C5B4}
- 0: \x{d55c}\x{ad6d}\x{c5b4}
-
-/\x{65e5}\x{672c}\x{8a9e}/D8
-------------------------------------------------------------------
- 0 14 Bra 0
- 3 9 \xe6\x97\xa5\xe6\x9c\xac\xe8\xaa\x9e
- 14 14 Ket
- 17 End
-------------------------------------------------------------------
-Capturing subpattern count = 0
-Options: utf8
-First char = 230
-Need char = 158
- \x{65e5}\x{672c}\x{8a9e}
- 0: \x{65e5}\x{672c}\x{8a9e}
-
-/\x{80}/D8
-------------------------------------------------------------------
- 0 7 Bra 0
- 3 2 \xc2\x80
- 7 7 Ket
- 10 End
-------------------------------------------------------------------
-Capturing subpattern count = 0
-Options: utf8
-First char = 194
-Need char = 128
-
-/\x{084}/D8
-------------------------------------------------------------------
- 0 7 Bra 0
- 3 2 \xc2\x84
- 7 7 Ket
- 10 End
-------------------------------------------------------------------
-Capturing subpattern count = 0
-Options: utf8
-First char = 194
-Need char = 132
-
-/\x{104}/D8
-------------------------------------------------------------------
- 0 7 Bra 0
- 3 2 \xc4\x84
- 7 7 Ket
- 10 End
-------------------------------------------------------------------
-Capturing subpattern count = 0
-Options: utf8
-First char = 196
-Need char = 132
-
-/\x{861}/D8
-------------------------------------------------------------------
- 0 8 Bra 0
- 3 3 \xe0\xa1\xa1
- 8 8 Ket
- 11 End
-------------------------------------------------------------------
-Capturing subpattern count = 0
-Options: utf8
-First char = 224
-Need char = 161
-
-/\x{212ab}/D8
-------------------------------------------------------------------
- 0 9 Bra 0
- 3 4 \xf0\xa1\x8a\xab
- 9 9 Ket
- 12 End
-------------------------------------------------------------------
-Capturing subpattern count = 0
-Options: utf8
-First char = 240
-Need char = 171
-
-/.{3,5}X/D8
-------------------------------------------------------------------
- 0 14 Bra 0
- 3 Any{3}
- 7 Any{0,2}
- 11 1 X
- 14 14 Ket
- 17 End
-------------------------------------------------------------------
-Capturing subpattern count = 0
-Options: utf8
-No first char
-Need char = 'X'
- \x{212ab}\x{212ab}\x{212ab}\x{861}X
- 0: \x{212ab}\x{212ab}\x{212ab}\x{861}X
-
-
-/.{3,5}?/D8
-------------------------------------------------------------------
- 0 11 Bra 0
- 3 Any{3}
- 7 Any{0,2}?
- 11 11 Ket
- 14 End
-------------------------------------------------------------------
-Capturing subpattern count = 0
-Options: utf8
-No first char
-No need char
- \x{212ab}\x{212ab}\x{212ab}\x{861}
- 0: \x{212ab}\x{212ab}\x{212ab}
-
-/-- These tests are here rather than in testinput4 because Perl 5.6 has --/
-/-- some problems with UTF-8 support, in the area of \x{..} where the --/
-No match
-/-- value is < 255. It grumbles about invalid UTF-8 strings. --/
-No match
-
-/^[a\x{c0}]b/8
- \x{c0}b
- 0: \x{c0}b
-
-/^([a\x{c0}]*?)aa/8
- a\x{c0}aaaa/
- 0: a\x{c0}aa
- 1: a\x{c0}
-
-/^([a\x{c0}]*?)aa/8
- a\x{c0}aaaa/
- 0: a\x{c0}aa
- 1: a\x{c0}
- a\x{c0}a\x{c0}aaa/
- 0: a\x{c0}a\x{c0}aa
- 1: a\x{c0}a\x{c0}
-
-/^([a\x{c0}]*)aa/8
- a\x{c0}aaaa/
- 0: a\x{c0}aaaa
- 1: a\x{c0}aa
- a\x{c0}a\x{c0}aaa/
- 0: a\x{c0}a\x{c0}aaa
- 1: a\x{c0}a\x{c0}a
-
-/^([a\x{c0}]*)a\x{c0}/8
- a\x{c0}aaaa/
- 0: a\x{c0}
- 1:
- a\x{c0}a\x{c0}aaa/
- 0: a\x{c0}a\x{c0}
- 1: a\x{c0}
-
-/-- --/
-
-/(?<=\C)X/8
-Failed: \C not allowed in lookbehind assertion at offset 6
-
-/-- This one is here not because it's different to Perl, but because the --/
-/-- way the captured single-byte is displayed. (In Perl it becomes a --/
-No match
-/-- character, and you can't tell the difference.) --/
-No match
-
-/X(\C)(.*)/8
- X\x{1234}
- 0: X\x{1234}
- 1: \xe1
- 2: \x88\xb4
- X\nabc
- 0: X\x{0a}abc
- 1: \x{0a}
- 2: abc
-
-/ End of testinput5 /
-
diff --git a/ext/pcre/pcrelib/testdata/testoutput6 b/ext/pcre/pcrelib/testdata/testoutput6
deleted file mode 100644
index fcf084670f..0000000000
--- a/ext/pcre/pcrelib/testdata/testoutput6
+++ /dev/null
@@ -1,319 +0,0 @@
-PCRE version 3.9 02-Jan-2002
-
-/\x{100}/8DM
-Memory allocation (code space): 11
-------------------------------------------------------------------
- 0 7 Bra 0
- 3 2 \xc4\x80
- 7 7 Ket
- 10 End
-------------------------------------------------------------------
-Capturing subpattern count = 0
-Options: utf8
-First char = 196
-Need char = 128
-
-/\x{1000}/8DM
-Memory allocation (code space): 12
-------------------------------------------------------------------
- 0 8 Bra 0
- 3 3 \xe1\x80\x80
- 8 8 Ket
- 11 End
-------------------------------------------------------------------
-Capturing subpattern count = 0
-Options: utf8
-First char = 225
-Need char = 128
-
-/\x{10000}/8DM
-Memory allocation (code space): 13
-------------------------------------------------------------------
- 0 9 Bra 0
- 3 4 \xf0\x90\x80\x80
- 9 9 Ket
- 12 End
-------------------------------------------------------------------
-Capturing subpattern count = 0
-Options: utf8
-First char = 240
-Need char = 128
-
-/\x{100000}/8DM
-Memory allocation (code space): 13
-------------------------------------------------------------------
- 0 9 Bra 0
- 3 4 \xf4\x80\x80\x80
- 9 9 Ket
- 12 End
-------------------------------------------------------------------
-Capturing subpattern count = 0
-Options: utf8
-First char = 244
-Need char = 128
-
-/\x{1000000}/8DM
-Memory allocation (code space): 14
-------------------------------------------------------------------
- 0 10 Bra 0
- 3 5 \xf9\x80\x80\x80\x80
- 10 10 Ket
- 13 End
-------------------------------------------------------------------
-Capturing subpattern count = 0
-Options: utf8
-First char = 249
-Need char = 128
-
-/\x{4000000}/8DM
-Memory allocation (code space): 15
-------------------------------------------------------------------
- 0 11 Bra 0
- 3 6 \xfc\x84\x80\x80\x80\x80
- 11 11 Ket
- 14 End
-------------------------------------------------------------------
-Capturing subpattern count = 0
-Options: utf8
-First char = 252
-Need char = 128
-
-/\x{7fffFFFF}/8DM
-Memory allocation (code space): 15
-------------------------------------------------------------------
- 0 11 Bra 0
- 3 6 \xfd\xbf\xbf\xbf\xbf\xbf
- 11 11 Ket
- 14 End
-------------------------------------------------------------------
-Capturing subpattern count = 0
-Options: utf8
-First char = 253
-Need char = 191
-
-/[\x{ff}]/8DM
-Memory allocation (code space): 40
-------------------------------------------------------------------
- 0 6 Bra 0
- 3 1 \xff
- 6 6 Ket
- 9 End
-------------------------------------------------------------------
-Capturing subpattern count = 0
-Options: utf8
-First char = 255
-No need char
-
-/[\x{100}]/8DM
-Memory allocation (code space): 40
-Failed: characters with values > 255 are not yet supported in classes at offset 7
-
-/\x{ffffffff}/8
-Failed: character value in \x{...} sequence is too large at offset 11
-
-/\x{100000000}/8
-Failed: character value in \x{...} sequence is too large at offset 12
-
-/^\x{100}a\x{1234}/8
- \x{100}a\x{1234}bcd
- 0: \x{100}a\x{1234}
-
-/\x80/8D
-------------------------------------------------------------------
- 0 7 Bra 0
- 3 2 \xc2\x80
- 7 7 Ket
- 10 End
-------------------------------------------------------------------
-Capturing subpattern count = 0
-Options: utf8
-First char = 194
-Need char = 128
-
-/\xff/8D
-------------------------------------------------------------------
- 0 7 Bra 0
- 3 2 \xc3\xbf
- 7 7 Ket
- 10 End
-------------------------------------------------------------------
-Capturing subpattern count = 0
-Options: utf8
-First char = 195
-Need char = 191
-
-/\x{0041}\x{2262}\x{0391}\x{002e}/D8
-------------------------------------------------------------------
- 0 12 Bra 0
- 3 7 A\xe2\x89\xa2\xce\x91.
- 12 12 Ket
- 15 End
-------------------------------------------------------------------
-Capturing subpattern count = 0
-Options: utf8
-First char = 'A'
-Need char = '.'
- \x{0041}\x{2262}\x{0391}\x{002e}
- 0: A\x{2262}\x{391}.
-
-/\x{D55c}\x{ad6d}\x{C5B4}/D8
-------------------------------------------------------------------
- 0 14 Bra 0
- 3 9 \xed\x95\x9c\xea\xb5\xad\xec\x96\xb4
- 14 14 Ket
- 17 End
-------------------------------------------------------------------
-Capturing subpattern count = 0
-Options: utf8
-First char = 237
-Need char = 180
- \x{D55c}\x{ad6d}\x{C5B4}
- 0: \x{d55c}\x{ad6d}\x{c5b4}
-
-/\x{65e5}\x{672c}\x{8a9e}/D8
-------------------------------------------------------------------
- 0 14 Bra 0
- 3 9 \xe6\x97\xa5\xe6\x9c\xac\xe8\xaa\x9e
- 14 14 Ket
- 17 End
-------------------------------------------------------------------
-Capturing subpattern count = 0
-Options: utf8
-First char = 230
-Need char = 158
- \x{65e5}\x{672c}\x{8a9e}
- 0: \x{65e5}\x{672c}\x{8a9e}
-
-/\x{80}/D8
-------------------------------------------------------------------
- 0 7 Bra 0
- 3 2 \xc2\x80
- 7 7 Ket
- 10 End
-------------------------------------------------------------------
-Capturing subpattern count = 0
-Options: utf8
-First char = 194
-Need char = 128
-
-/\x{084}/D8
-------------------------------------------------------------------
- 0 7 Bra 0
- 3 2 \xc2\x84
- 7 7 Ket
- 10 End
-------------------------------------------------------------------
-Capturing subpattern count = 0
-Options: utf8
-First char = 194
-Need char = 132
-
-/\x{104}/D8
-------------------------------------------------------------------
- 0 7 Bra 0
- 3 2 \xc4\x84
- 7 7 Ket
- 10 End
-------------------------------------------------------------------
-Capturing subpattern count = 0
-Options: utf8
-First char = 196
-Need char = 132
-
-/\x{861}/D8
-------------------------------------------------------------------
- 0 8 Bra 0
- 3 3 \xe0\xa1\xa1
- 8 8 Ket
- 11 End
-------------------------------------------------------------------
-Capturing subpattern count = 0
-Options: utf8
-First char = 224
-Need char = 161
-
-/\x{212ab}/D8
-------------------------------------------------------------------
- 0 9 Bra 0
- 3 4 \xf0\xa1\x8a\xab
- 9 9 Ket
- 12 End
-------------------------------------------------------------------
-Capturing subpattern count = 0
-Options: utf8
-First char = 240
-Need char = 171
-
-/.{3,5}X/D8
-------------------------------------------------------------------
- 0 14 Bra 0
- 3 Any{3}
- 7 Any{0,2}
- 11 1 X
- 14 14 Ket
- 17 End
-------------------------------------------------------------------
-Capturing subpattern count = 0
-Options: utf8
-No first char
-Need char = 'X'
- \x{212ab}\x{212ab}\x{212ab}\x{861}X
- 0: \x{212ab}\x{212ab}\x{212ab}\x{861}X
-
-
-/.{3,5}?/D8
-------------------------------------------------------------------
- 0 11 Bra 0
- 3 Any{3}
- 7 Any{0,2}?
- 11 11 Ket
- 14 End
-------------------------------------------------------------------
-Capturing subpattern count = 0
-Options: utf8
-No first char
-No need char
- \x{212ab}\x{212ab}\x{212ab}\x{861}
- 0: \x{212ab}\x{212ab}\x{212ab}
-
-/-- These tests are here rather than in testinput5 because Perl 5.6 has --/
-/-- some problems with UTF-8 support, in the area of \x{..} where the --/
-No match
-/-- value is < 255. It grumbles about invalid UTF-8 strings. --/
-No match
-
-/^[a\x{c0}]b/8
- \x{c0}b
- 0: \x{c0}b
-
-/^([a\x{c0}]*?)aa/8
- a\x{c0}aaaa/
- 0: a\x{c0}aa
- 1: a\x{c0}
-
-/^([a\x{c0}]*?)aa/8
- a\x{c0}aaaa/
- 0: a\x{c0}aa
- 1: a\x{c0}
- a\x{c0}a\x{c0}aaa/
- 0: a\x{c0}a\x{c0}aa
- 1: a\x{c0}a\x{c0}
-
-/^([a\x{c0}]*)aa/8
- a\x{c0}aaaa/
- 0: a\x{c0}aaaa
- 1: a\x{c0}aa
- a\x{c0}a\x{c0}aaa/
- 0: a\x{c0}a\x{c0}aaa
- 1: a\x{c0}a\x{c0}a
-
-/^([a\x{c0}]*)a\x{c0}/8
- a\x{c0}aaaa/
- 0: a\x{c0}
- 1:
- a\x{c0}a\x{c0}aaa/
- 0: a\x{c0}a\x{c0}
- 1: a\x{c0}
-
-/ End of testinput6 /
-
diff --git a/ext/pcre/php_pcre.c b/ext/pcre/php_pcre.c
deleted file mode 100644
index 6f5a7aea66..0000000000
--- a/ext/pcre/php_pcre.c
+++ /dev/null
@@ -1,1629 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Andrei Zmievski <andrei@php.net> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "php.h"
-#include "php_globals.h"
-#include "php_pcre.h"
-#include "ext/standard/info.h"
-#include "ext/standard/php_smart_str.h"
-
-#if HAVE_PCRE || HAVE_BUNDLED_PCRE
-
-#include "ext/standard/php_string.h"
-
-#define PREG_PATTERN_ORDER 1
-#define PREG_SET_ORDER 2
-#define PREG_OFFSET_CAPTURE (1<<8)
-
-#define PREG_SPLIT_NO_EMPTY (1<<0)
-#define PREG_SPLIT_DELIM_CAPTURE (1<<1)
-#define PREG_SPLIT_OFFSET_CAPTURE (1<<2)
-
-#define PREG_REPLACE_EVAL (1<<0)
-
-#define PREG_GREP_INVERT (1<<0)
-
-
-ZEND_DECLARE_MODULE_GLOBALS(pcre)
-
-static void php_free_pcre_cache(void *data)
-{
- pcre_cache_entry *pce = (pcre_cache_entry *) data;
- if (!pce) return;
- pefree(pce->re, 1);
-#if HAVE_SETLOCALE
- if ((void*)pce->tables) pefree((void*)pce->tables, 1);
- pefree(pce->locale, 1);
-#endif
-}
-
-
-static void php_pcre_init_globals(zend_pcre_globals *pcre_globals TSRMLS_DC)
-{
- zend_hash_init(&pcre_globals->pcre_cache, 0, NULL, php_free_pcre_cache, 1);
-}
-
-static void php_pcre_shutdown_globals(zend_pcre_globals *pcre_globals TSRMLS_DC)
-{
- zend_hash_destroy(&pcre_globals->pcre_cache);
-}
-
-
-/* {{{ PHP_MINFO_FUNCTION(pcre) */
-static PHP_MINFO_FUNCTION(pcre)
-{
- php_info_print_table_start();
- php_info_print_table_row(2, "PCRE (Perl Compatible Regular Expressions) Support", "enabled" );
- php_info_print_table_row(2, "PCRE Library Version", pcre_version() );
- php_info_print_table_end();
-}
-/* }}} */
-
-/* {{{ PHP_MINIT_FUNCTION(pcre) */
-static PHP_MINIT_FUNCTION(pcre)
-{
- ZEND_INIT_MODULE_GLOBALS(pcre, php_pcre_init_globals, php_pcre_shutdown_globals);
-
- REGISTER_LONG_CONSTANT("PREG_PATTERN_ORDER", PREG_PATTERN_ORDER, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("PREG_SET_ORDER", PREG_SET_ORDER, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("PREG_OFFSET_CAPTURE", PREG_OFFSET_CAPTURE, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("PREG_SPLIT_NO_EMPTY", PREG_SPLIT_NO_EMPTY, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("PREG_SPLIT_DELIM_CAPTURE", PREG_SPLIT_DELIM_CAPTURE, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("PREG_SPLIT_OFFSET_CAPTURE", PREG_SPLIT_OFFSET_CAPTURE, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("PREG_GREP_INVERT", PREG_GREP_INVERT, CONST_CS | CONST_PERSISTENT);
-
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ PHP_MSHUTDOWN_FUNCTION(pcre) */
-static PHP_MSHUTDOWN_FUNCTION(pcre)
-{
-#ifndef ZTS
- php_pcre_shutdown_globals(&pcre_globals TSRMLS_CC);
-#endif
-
- return SUCCESS;
-}
-/* }}} */
-
-#define PCRE_CACHE_SIZE 4096
-
-/* {{{ static pcre_clean_cache */
-static int pcre_clean_cache(void *data, void *arg TSRMLS_DC)
-{
- int *num_clean = (int *)arg;
-
- if (*num_clean > 0) {
- (*num_clean)--;
- return 1;
- } else {
- return 0;
- }
-}
-/* }}} */
-
-/* {{{ pcre_get_compiled_regex
- */
-PHPAPI pcre* pcre_get_compiled_regex(char *regex, pcre_extra **extra, int *preg_options TSRMLS_DC)
-{
- int compile_options;
- return pcre_get_compiled_regex_ex(regex, extra, preg_options, &compile_options TSRMLS_CC);
-}
-/* }}} */
-
-/* {{{ pcre_get_compiled_regex_ex
- */
-PHPAPI pcre* pcre_get_compiled_regex_ex(char *regex, pcre_extra **extra, int *preg_options, int *compile_options TSRMLS_DC)
-{
- pcre *re = NULL;
- int coptions = 0;
- int soptions = 0;
- const char *error;
- int erroffset;
- char delimiter;
- char start_delimiter;
- char end_delimiter;
- char *p, *pp;
- char *pattern;
- int regex_len;
- int do_study = 0;
- int poptions = 0;
- unsigned const char *tables = NULL;
-#if HAVE_SETLOCALE
- char *locale = setlocale(LC_CTYPE, NULL);
-#endif
- pcre_cache_entry *pce;
- pcre_cache_entry new_entry;
-
- /* Try to lookup the cached regex entry, and if successful, just pass
- back the compiled pattern, otherwise go on and compile it. */
- regex_len = strlen(regex);
- if (zend_hash_find(&PCRE_G(pcre_cache), regex, regex_len+1, (void **)&pce) == SUCCESS) {
-#if HAVE_SETLOCALE
- if (!strcmp(pce->locale, locale)) {
-#endif
- *extra = pce->extra;
- *preg_options = pce->preg_options;
- *compile_options = pce->compile_options;
- return pce->re;
-#if HAVE_SETLOCALE
- }
-#endif
- }
-
- p = regex;
-
- /* Parse through the leading whitespace, and display a warning if we
- get to the end without encountering a delimiter. */
- while (isspace((int)*(unsigned char *)p)) p++;
- if (*p == 0) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Empty regular expression");
- return NULL;
- }
-
- /* Get the delimiter and display a warning if it is alphanumeric
- or a backslash. */
- delimiter = *p++;
- if (isalnum((int)*(unsigned char *)&delimiter) || delimiter == '\\') {
- php_error_docref(NULL TSRMLS_CC,E_WARNING, "Delimiter must not be alphanumeric or backslash");
- return NULL;
- }
-
- start_delimiter = delimiter;
- if ((pp = strchr("([{< )]}> )]}>", delimiter)))
- delimiter = pp[5];
- end_delimiter = delimiter;
-
- if (start_delimiter == end_delimiter) {
- /* We need to iterate through the pattern, searching for the ending delimiter,
- but skipping the backslashed delimiters. If the ending delimiter is not
- found, display a warning. */
- pp = p;
- while (*pp != 0) {
- if (*pp == '\\' && pp[1] != 0) pp++;
- else if (*pp == delimiter)
- break;
- pp++;
- }
- if (*pp == 0) {
- php_error_docref(NULL TSRMLS_CC,E_WARNING, "No ending delimiter '%c' found", delimiter);
- return NULL;
- }
- } else {
- /* We iterate through the pattern, searching for the matching ending
- * delimiter. For each matching starting delimiter, we increment nesting
- * level, and decrement it for each matching ending delimiter. If we
- * reach the end of the pattern without matching, display a warning.
- */
- int brackets = 1; /* brackets nesting level */
- pp = p;
- while (*pp != 0) {
- if (*pp == '\\' && pp[1] != 0) pp++;
- else if (*pp == end_delimiter && --brackets <= 0)
- break;
- else if (*pp == start_delimiter)
- brackets++;
- pp++;
- }
- if (*pp == 0) {
- php_error_docref(NULL TSRMLS_CC,E_WARNING, "No ending matching delimiter '%c' found", end_delimiter);
- return NULL;
- }
- }
-
- /* Make a copy of the actual pattern. */
- pattern = estrndup(p, pp-p);
-
- /* Move on to the options */
- pp++;
-
- /* Clear out preg options */
- *preg_options = 0;
-
- /* Parse through the options, setting appropriate flags. Display
- a warning if we encounter an unknown modifier. */
- while (*pp != 0) {
- switch (*pp++) {
- /* Perl compatible options */
- case 'i': coptions |= PCRE_CASELESS; break;
- case 'm': coptions |= PCRE_MULTILINE; break;
- case 's': coptions |= PCRE_DOTALL; break;
- case 'x': coptions |= PCRE_EXTENDED; break;
-
- /* PCRE specific options */
- case 'A': coptions |= PCRE_ANCHORED; break;
- case 'D': coptions |= PCRE_DOLLAR_ENDONLY;break;
- case 'S': do_study = 1; break;
- case 'U': coptions |= PCRE_UNGREEDY; break;
- case 'X': coptions |= PCRE_EXTRA; break;
- case 'u': coptions |= PCRE_UTF8; break;
-
- /* Custom preg options */
- case 'e': poptions |= PREG_REPLACE_EVAL; break;
-
- case ' ':
- case '\n':
- break;
-
- default:
- php_error_docref(NULL TSRMLS_CC,E_WARNING, "Unknown modifier '%c'", pp[-1]);
- efree(pattern);
- return NULL;
- }
- }
-
-#if HAVE_SETLOCALE
- if (strcmp(locale, "C"))
- tables = pcre_maketables();
-#endif
-
- /* Compile pattern and display a warning if compilation failed. */
- re = pcre_compile(pattern,
- coptions,
- &error,
- &erroffset,
- tables);
-
- if (re == NULL) {
- php_error_docref(NULL TSRMLS_CC,E_WARNING, "Compilation failed: %s at offset %d", error, erroffset);
- efree(pattern);
- return NULL;
- }
-
- /* If study option was specified, study the pattern and
- store the result in extra for passing to pcre_exec. */
- if (do_study) {
- *extra = pcre_study(re, soptions, &error);
- if (error != NULL) {
- php_error_docref(NULL TSRMLS_CC,E_WARNING, "Error while studying pattern");
- }
- }
-
- *preg_options = poptions;
- *compile_options = coptions;
-
- efree(pattern);
-
- /*
- * If we reached cache limit, clean out the items from the head of the list;
- * these are supposedly the oldest ones (but not necessarily the least used
- * ones).
- */
- if (zend_hash_num_elements(&PCRE_G(pcre_cache)) == PCRE_CACHE_SIZE) {
- int num_clean = PCRE_CACHE_SIZE / 8;
- zend_hash_apply_with_argument(&PCRE_G(pcre_cache), pcre_clean_cache, &num_clean TSRMLS_CC);
- }
-
- /* Store the compiled pattern and extra info in the cache. */
- new_entry.re = re;
- new_entry.extra = *extra;
- new_entry.preg_options = poptions;
- new_entry.compile_options = coptions;
-#if HAVE_SETLOCALE
- new_entry.locale = pestrdup(locale, 1);
- new_entry.tables = tables;
-#endif
- zend_hash_update(&PCRE_G(pcre_cache), regex, regex_len+1, (void *)&new_entry,
- sizeof(pcre_cache_entry), NULL);
-
- return re;
-}
-/* }}} */
-
-/* {{{ add_offset_pair */
-static inline void add_offset_pair(zval *result, char *str, int len, int offset, char *name)
-{
- zval *match_pair;
-
- ALLOC_ZVAL(match_pair);
- array_init(match_pair);
- INIT_PZVAL(match_pair);
-
- /* Add (match, offset) to the return value */
- add_next_index_stringl(match_pair, str, len, 1);
- add_next_index_long(match_pair, offset);
-
- if (name) {
- zval_add_ref(&match_pair);
- zend_hash_update(Z_ARRVAL_P(result), name, strlen(name)+1, &match_pair, sizeof(zval *), NULL);
- }
- zend_hash_next_index_insert(Z_ARRVAL_P(result), &match_pair, sizeof(zval *), NULL);
-}
-/* }}} */
-
-/* {{{ php_pcre_match
- */
-static void php_pcre_match(INTERNAL_FUNCTION_PARAMETERS, int global)
-{
- /* parameters */
- char *regex; /* Regular expression */
- char *subject; /* String to match against */
- int regex_len;
- int subject_len;
- zval *subpats = NULL; /* Array for subpatterns */
- long flags; /* Match control flags */
-
- zval *result_set, /* Holds a set of subpatterns after
- a global match */
- **match_sets = NULL; /* An array of sets of matches for each
- subpattern after a global match */
- pcre *re = NULL; /* Compiled regular expression */
- pcre_extra *extra = NULL; /* Holds results of studying */
- int exoptions = 0; /* Execution options */
- int preg_options = 0; /* Custom preg options */
- int count = 0; /* Count of matched subpatterns */
- int *offsets; /* Array of subpattern offsets */
- int num_subpats; /* Number of captured subpatterns */
- int size_offsets; /* Size of the offsets array */
- long start_offset = 0; /* Where the new search starts */
- int matched; /* Has anything matched */
- int subpats_order = 0; /* Order of subpattern matches */
- int offset_capture = 0;/* Capture match offsets: yes/no */
- 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 */
- int i, rc;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, ((global) ? "ssz|ll" : "ss|zll"), &regex, &regex_len,
- &subject, &subject_len, &subpats, &flags, &start_offset) == FAILURE) {
- RETURN_FALSE;
- }
-
- if (global)
- subpats_order = PREG_PATTERN_ORDER;
-
- if (ZEND_NUM_ARGS() > 3) {
- offset_capture = flags & PREG_OFFSET_CAPTURE;
- /*
- * subpats_order is pre-set to pattern mode so we change it only if
- * necessary.
- */
- if (flags & 0xff) {
- subpats_order = flags & 0xff;
- }
- if ((global && (subpats_order < PREG_PATTERN_ORDER || subpats_order > PREG_SET_ORDER)) ||
- (!global && subpats_order != 0)) {
- zend_error(E_WARNING, "Wrong value for parameter 4 in call to %s()", get_active_function_name(TSRMLS_C));
- return;
- }
- }
-
- /* Overwrite the passed-in value for subpatterns with an empty array. */
- if (subpats != NULL) {
- zval_dtor(subpats);
- array_init(subpats);
- }
-
- /* Negative offset counts from the end of the string. */
- if (start_offset < 0) {
- start_offset = subject_len + start_offset;
- if (start_offset < 0) {
- start_offset = 0;
- }
- }
-
- /* Compile regex or get it from cache. */
- if ((re = pcre_get_compiled_regex(regex, &extra, &preg_options TSRMLS_CC)) == NULL) {
- RETURN_FALSE;
- }
-
- /* Calculate the size of the offsets array, and allocate memory for it. */
- rc = pcre_fullinfo(re, extra, PCRE_INFO_CAPTURECOUNT, &num_subpats);
- if (rc < 0) {
- php_error(E_WARNING, "%s: internal pcre_fullinfo() error %d",
- get_active_function_name(TSRMLS_C), rc);
- RETURN_FALSE;
- }
- 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 they 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(re, extra, PCRE_INFO_NAMECOUNT, &name_cnt);
- if (rc < 0) {
- php_error(E_WARNING, "%s: internal pcre_fullinfo() error %d",
- get_active_function_name(TSRMLS_C), rc);
- RETURN_FALSE;
- }
- if (name_cnt > 0) {
- int rc1, rc2;
- rc1 = pcre_fullinfo(re, extra, PCRE_INFO_NAMETABLE, &name_table);
- rc2 = pcre_fullinfo(re, extra, PCRE_INFO_NAMEENTRYSIZE, &name_size);
- rc = rc2 ? rc2 : rc1;
- if (rc < 0) {
- php_error(E_WARNING, "%s: internal pcre_fullinfo() error %d",
- get_active_function_name(TSRMLS_C), rc);
- RETURN_FALSE;
- }
-
- while (ni++ < name_cnt) {
- name_idx = 0xff * name_table[0] + name_table[1];
- subpat_names[name_idx] = name_table + 2;
- name_table += name_size;
- }
- }
- }
-
- /* 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);
- for (i=0; i<num_subpats; i++) {
- ALLOC_ZVAL(match_sets[i]);
- array_init(match_sets[i]);
- INIT_PZVAL(match_sets[i]);
- }
- }
-
- match = NULL;
- matched = 0;
-
- do {
- /* Execute the regular expression. */
- count = pcre_exec(re, extra, subject, subject_len, start_offset,
- exoptions|g_notempty, offsets, size_offsets);
-
- /* Check for too many substrings condition. */
- if (count == 0) {
- zend_error(E_NOTICE, "Matched, but too many substrings");
- count = size_offsets/3;
- }
-
- /* If something has matched */
- if (count >= 0) {
- matched++;
- match = subject + offsets[0];
-
- /* If subpatterns array has been passed, fill it in with values. */
- if (subpats != NULL) {
- /* Try to get the list of substrings and display a warning if failed. */
- if (pcre_get_substring_list(subject, offsets, count, &stringlist) < 0) {
- efree(subpat_names);
- efree(offsets);
- efree(re);
- zend_error(E_WARNING, "Get subpatterns list failed");
- return;
- }
-
- if (global) { /* global pattern matching */
- if (subpats_order == PREG_PATTERN_ORDER) {
- /* For each subpattern, insert it into the appropriate array. */
- for (i = 0; i < count; i++) {
- if (offset_capture) {
- add_offset_pair(match_sets[i], (char *)stringlist[i],
- offsets[(i<<1)+1] - offsets[i<<1], offsets[i<<1], NULL);
- } else {
- add_next_index_stringl(match_sets[i], (char *)stringlist[i],
- offsets[(i<<1)+1] - offsets[i<<1], 1);
- }
- }
- /*
- * If the number of captured subpatterns on this run is
- * less than the total possible number, pad the result
- * arrays with empty strings.
- */
- if (count < num_subpats) {
- for (; i < num_subpats; i++) {
- add_next_index_string(match_sets[i], "", 1);
- }
- }
- } else {
- /* Allocate the result set array */
- ALLOC_ZVAL(result_set);
- array_init(result_set);
- INIT_PZVAL(result_set);
-
- /* Add all the subpatterns to it */
- for (i = 0; i < count; i++) {
- if (offset_capture) {
- add_offset_pair(result_set, (char *)stringlist[i],
- offsets[(i<<1)+1] - offsets[i<<1], offsets[i<<1], subpat_names[i]);
- } else {
- if (subpat_names[i]) {
- add_assoc_stringl(result_set, subpat_names[i], (char *)stringlist[i],
- offsets[(i<<1)+1] - offsets[i<<1], 1);
- }
- add_next_index_stringl(result_set, (char *)stringlist[i],
- offsets[(i<<1)+1] - offsets[i<<1], 1);
- }
- }
- /* And add it to the output array */
- zend_hash_next_index_insert(Z_ARRVAL_P(subpats), &result_set, sizeof(zval *), NULL);
- }
- } else { /* single pattern matching */
- /* For each subpattern, insert it into the subpatterns array. */
- for (i = 0; i < count; i++) {
- if (offset_capture) {
- add_offset_pair(subpats, (char *)stringlist[i],
- offsets[(i<<1)+1] - offsets[i<<1],
- offsets[i<<1], subpat_names[i]);
- } else {
- if (subpat_names[i]) {
- add_assoc_stringl(subpats, subpat_names[i], (char *)stringlist[i],
- offsets[(i<<1)+1] - offsets[i<<1], 1);
- }
- add_next_index_stringl(subpats, (char *)stringlist[i],
- offsets[(i<<1)+1] - offsets[i<<1], 1);
- }
- }
- }
-
- pcre_free((void *) stringlist);
- }
- }
- else { /* Failed to match */
- /* If we previously set PCRE_NOTEMPTY after a null match,
- this is not necessarily the end. We need to advance
- the start offset, and continue. Fudge the offset values
- to achieve this, unless we're already at the end of the string. */
- if (g_notempty != 0 && start_offset < subject_len) {
- offsets[0] = start_offset;
- offsets[1] = start_offset + 1;
- } else
- break;
- }
-
- /* If we have matched an empty string, mimic what Perl's /g options does.
- This turns out to be rather cunning. First we set PCRE_NOTEMPTY and try
- the match again at the same point. If this fails (picked up above) we
- advance to the next character. */
- g_notempty = (offsets[1] == offsets[0])? PCRE_NOTEMPTY | PCRE_ANCHORED : 0;
-
- /* Advance to the position right after the last full match */
- start_offset = offsets[1];
- } while (global);
-
- /* Add the match sets to the output array and clean up */
- if (global && subpats_order == PREG_PATTERN_ORDER) {
- for (i = 0; i < num_subpats; i++) {
- if (subpat_names[i]) {
- zend_hash_update(Z_ARRVAL_P(subpats), subpat_names[i],
- strlen(subpat_names[i])+1, &match_sets[i], sizeof(zval *), NULL);
- }
- zend_hash_next_index_insert(Z_ARRVAL_P(subpats), &match_sets[i], sizeof(zval *), NULL);
- }
- efree(match_sets);
- }
-
- efree(offsets);
- efree(subpat_names);
-
- RETVAL_LONG(matched);
-}
-/* }}} */
-
-/* {{{ proto int preg_match(string pattern, string subject [, array subpatterns [, int flags [, int offset]]])
- Perform a Perl-style regular expression match */
-PHP_FUNCTION(preg_match)
-{
- php_pcre_match(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0);
-}
-/* }}} */
-
-/* {{{ proto int preg_match_all(string pattern, string subject, array subpatterns [, int flags [, int offset]])
- Perform a Perl-style global regular expression match */
-PHP_FUNCTION(preg_match_all)
-{
- php_pcre_match(INTERNAL_FUNCTION_PARAM_PASSTHRU, 1);
-}
-/* }}} */
-
-/* {{{ preg_get_backref
- */
-static int preg_get_backref(char **str, int *backref)
-{
- register char in_brace = 0;
- register char *walk = *str;
-
- if (walk[1] == 0)
- return 0;
-
- if (*walk == '$' && walk[1] == '{') {
- in_brace = 1;
- walk++;
- }
- walk++;
-
- if (*walk >= '0' && *walk <= '9') {
- *backref = *walk - '0';
- walk++;
- } else
- return 0;
-
- if (*walk && *walk >= '0' && *walk <= '9') {
- *backref = *backref * 10 + *walk - '0';
- walk++;
- }
-
- if (in_brace) {
- if (*walk == 0 || *walk != '}')
- return 0;
- else
- walk++;
- }
-
- *str = walk;
- return 1;
-}
-/* }}} */
-
-/* {{{ preg_do_repl_func
- */
-static int preg_do_repl_func(zval *function, char *subject, int *offsets, int count, char **result TSRMLS_DC)
-{
- zval *retval_ptr; /* Function return value */
- zval **args[1]; /* Argument to pass to function */
- zval *subpats; /* Captured subpatterns */
- int result_len; /* Return value length */
- int i;
-
- MAKE_STD_ZVAL(subpats);
- array_init(subpats);
- for (i = 0; i < count; i++)
- 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) {
- convert_to_string_ex(&retval_ptr);
- *result = estrndup(Z_STRVAL_P(retval_ptr), Z_STRLEN_P(retval_ptr));
- result_len = Z_STRLEN_P(retval_ptr);
- zval_ptr_dtor(&retval_ptr);
- } else {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to call custom replacement function");
- result_len = offsets[1] - offsets[0];
- *result = estrndup(&subject[offsets[0]], result_len);
- }
- zval_dtor(subpats);
- FREE_ZVAL(subpats);
-
- return result_len;
-}
-/* }}} */
-
-/* {{{ preg_do_eval
- */
-static int preg_do_eval(char *eval_str, int eval_str_len, char *subject,
- int *offsets, int count, char **result TSRMLS_DC)
-{
- zval retval; /* Return value from evaluation */
- char *eval_str_end, /* End of eval string */
- *match, /* Current match for a backref */
- *esc_match, /* Quote-escaped match */
- *walk, /* Used to walk the code string */
- *segment, /* Start of segment to append while walking */
- walk_last; /* Last walked character */
- int match_len; /* Length of the match */
- int esc_match_len; /* Length of the quote-escaped match */
- int result_len; /* Length of the result of the evaluation */
- int backref; /* Current backref */
- char *compiled_string_description;
- smart_str code = {0};
-
- eval_str_end = eval_str + eval_str_len;
- walk = segment = eval_str;
- walk_last = 0;
-
- while (walk < eval_str_end) {
- /* If found a backreference.. */
- if ('\\' == *walk || '$' == *walk) {
- smart_str_appendl(&code, segment, walk - segment);
- if (walk_last == '\\') {
- code.c[code.len-1] = *walk++;
- segment = walk;
- walk_last = 0;
- continue;
- }
- segment = walk;
- if (preg_get_backref(&walk, &backref)) {
- if (backref < count) {
- /* Find the corresponding string match and substitute it
- in instead of the backref */
- match = subject + offsets[backref<<1];
- match_len = offsets[(backref<<1)+1] - offsets[backref<<1];
- if (match_len)
- esc_match = php_addslashes(match, match_len, &esc_match_len, 0 TSRMLS_CC);
- else {
- esc_match = match;
- esc_match_len = 0;
- }
- } else {
- esc_match = "";
- esc_match_len = 0;
- match_len = 0;
- }
- smart_str_appendl(&code, esc_match, esc_match_len);
-
- segment = walk;
-
- /* Clean up and reassign */
- if (esc_match_len)
- efree(esc_match);
- continue;
- }
- }
- walk++;
- walk_last = walk[-1];
- }
- smart_str_appendl(&code, segment, walk - segment);
- smart_str_0(&code);
-
- compiled_string_description = zend_make_compiled_string_description("regexp code" TSRMLS_CC);
- /* Run the code */
- if (zend_eval_string(code.c, &retval, compiled_string_description TSRMLS_CC) == FAILURE) {
- efree(compiled_string_description);
- php_error_docref(NULL TSRMLS_CC,E_ERROR, "Failed evaluating code:\n%s", code.c);
- /* zend_error() does not return in this case */
- }
- efree(compiled_string_description);
- convert_to_string(&retval);
-
- /* Save the return value and its length */
- *result = estrndup(Z_STRVAL(retval), Z_STRLEN(retval));
- result_len = Z_STRLEN(retval);
-
- /* Clean up */
- zval_dtor(&retval);
- smart_str_free(&code);
-
- return result_len;
-}
-/* }}} */
-
-/* {{{ php_pcre_replace
- */
-PHPAPI char *php_pcre_replace(char *regex, int regex_len,
- char *subject, int subject_len,
- zval *replace_val, int is_callable_replace,
- int *result_len, int limit TSRMLS_DC)
-{
- pcre *re = NULL; /* Compiled regular expression */
- pcre_extra *extra = NULL; /* Holds results of studying */
- int exoptions = 0; /* Execution options */
- int preg_options = 0; /* Custom preg options */
- int count = 0; /* Count of matched subpatterns */
- int *offsets; /* Array of subpattern offsets */
- int size_offsets; /* Size of the offsets array */
- int new_len; /* Length of needed storage */
- int alloc_len; /* Actual allocated length */
- int eval_result_len=0; /* Length of the eval'ed or
- function-returned string */
- int match_len; /* Length of the current match */
- int backref; /* Backreference number */
- int eval; /* If the replacement string should be eval'ed */
- int start_offset; /* Where the new search starts */
- int g_notempty=0; /* If the match should not be empty */
- int replace_len=0; /* Length of replacement string */
- char *result, /* Result of replacement */
- *replace=NULL, /* Replacement string */
- *new_buf, /* Temporary buffer for re-allocation */
- *walkbuf, /* Location of current replacement in the result */
- *walk, /* Used to walk the replacement string */
- *match, /* The current match */
- *piece, /* The current piece of subject */
- *replace_end=NULL, /* End of replacement string */
- *eval_result, /* Result of eval or custom function */
- walk_last; /* Last walked character */
- int rc;
-
- /* Compile regex or get it from cache. */
- if ((re = pcre_get_compiled_regex(regex, &extra, &preg_options TSRMLS_CC)) == NULL) {
- return NULL;
- }
-
- eval = preg_options & PREG_REPLACE_EVAL;
- if (is_callable_replace) {
- if (eval) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "/e modifier cannot be used with replacement callback");
- return NULL;
- }
- } else {
- replace = Z_STRVAL_P(replace_val);
- replace_len = Z_STRLEN_P(replace_val);
- replace_end = replace + replace_len;
- }
-
- /* Calculate the size of the offsets array, and allocate memory for it. */
- rc = pcre_fullinfo(re, extra, PCRE_INFO_CAPTURECOUNT, &size_offsets);
- if (rc < 0) {
- php_error(E_WARNING, "%s: internal pcre_fullinfo() error %d",
- get_active_function_name(TSRMLS_C), rc);
- return NULL;
- }
- size_offsets = (size_offsets + 1) * 3;
- offsets = (int *)safe_emalloc(size_offsets, sizeof(int), 0);
-
- alloc_len = 2 * subject_len + 1;
- result = safe_emalloc(alloc_len, sizeof(char), 0);
-
- /* Initialize */
- match = NULL;
- *result_len = 0;
- start_offset = 0;
-
- while (1) {
- /* Execute the regular expression. */
- count = pcre_exec(re, extra, subject, subject_len, start_offset,
- exoptions|g_notempty, offsets, size_offsets);
-
- /* Check for too many substrings condition. */
- if (count == 0) {
- php_error_docref(NULL TSRMLS_CC,E_NOTICE, "Matched, but too many substrings");
- count = size_offsets/3;
- }
-
- piece = subject + start_offset;
-
- if (count > 0 && (limit == -1 || limit > 0)) {
- /* Set the match location in subject */
- match = subject + offsets[0];
-
- new_len = *result_len + offsets[0] - start_offset; /* part before the match */
-
- /* If evaluating, do it and add the return string's length */
- if (eval) {
- eval_result_len = preg_do_eval(replace, replace_len, subject,
- offsets, count, &eval_result TSRMLS_CC);
- 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);
- new_len += eval_result_len;
- } else { /* do regular substitution */
- walk = replace;
- walk_last = 0;
- while (walk < replace_end) {
- if ('\\' == *walk || '$' == *walk) {
- if (walk_last == '\\') {
- walk++;
- walk_last = 0;
- continue;
- }
- if (preg_get_backref(&walk, &backref)) {
- if (backref < count)
- new_len += offsets[(backref<<1)+1] - offsets[backref<<1];
- continue;
- }
- }
- new_len++;
- walk++;
- walk_last = walk[-1];
- }
- }
-
- if (new_len + 1 > alloc_len) {
- alloc_len = 1 + alloc_len + 2 * new_len;
- new_buf = emalloc(alloc_len);
- memcpy(new_buf, result, *result_len);
- efree(result);
- result = new_buf;
- }
- /* copy the part of the string before the match */
- memcpy(&result[*result_len], piece, match-piece);
- *result_len += match-piece;
-
- /* copy replacement and backrefs */
- walkbuf = result + *result_len;
-
- /* If evaluating or using custom function, copy result to the buffer
- * and clean up. */
- if (eval || is_callable_replace) {
- memcpy(walkbuf, eval_result, eval_result_len);
- *result_len += eval_result_len;
- STR_FREE(eval_result);
- } else { /* do regular backreference copying */
- walk = replace;
- walk_last = 0;
- while (walk < replace_end) {
- if ('\\' == *walk || '$' == *walk) {
- if (walk_last == '\\') {
- *(walkbuf-1) = *walk++;
- walk_last = 0;
- continue;
- }
- if (preg_get_backref(&walk, &backref)) {
- if (backref < count) {
- match_len = offsets[(backref<<1)+1] - offsets[backref<<1];
- memcpy(walkbuf, subject + offsets[backref<<1], match_len);
- walkbuf += match_len;
- }
- continue;
- }
- }
- *walkbuf++ = *walk++;
- walk_last = walk[-1];
- }
- *walkbuf = '\0';
- /* increment the result length by how much we've added to the string */
- *result_len += walkbuf - (result + *result_len);
- }
-
- if (limit != -1)
- limit--;
-
- } else { /* Failed to match */
- /* If we previously set PCRE_NOTEMPTY after a null match,
- this is not necessarily the end. We need to advance
- the start offset, and continue. Fudge the offset values
- to achieve this, unless we're already at the end of the string. */
- if (g_notempty != 0 && start_offset < subject_len) {
- offsets[0] = start_offset;
- offsets[1] = start_offset + 1;
- memcpy(&result[*result_len], piece, 1);
- (*result_len)++;
- } else {
- new_len = *result_len + subject_len - start_offset;
- if (new_len + 1 > alloc_len) {
- alloc_len = new_len + 1; /* now we know exactly how long it is */
- new_buf = safe_emalloc(alloc_len, sizeof(char), 0);
- memcpy(new_buf, result, *result_len);
- efree(result);
- result = new_buf;
- }
- /* stick that last bit of string on our output */
- memcpy(&result[*result_len], piece, subject_len - start_offset);
- *result_len += subject_len - start_offset;
- result[*result_len] = '\0';
- break;
- }
- }
-
- /* If we have matched an empty string, mimic what Perl's /g options does.
- This turns out to be rather cunning. First we set PCRE_NOTEMPTY and try
- the match again at the same point. If this fails (picked up above) we
- advance to the next character. */
- g_notempty = (offsets[1] == offsets[0])? PCRE_NOTEMPTY | PCRE_ANCHORED : 0;
-
- /* Advance to the next piece. */
- start_offset = offsets[1];
- }
-
- efree(offsets);
-
- return result;
-}
-/* }}} */
-
-/* {{{ php_replace_in_subject
- */
-static char *php_replace_in_subject(zval *regex, zval *replace, zval **subject, int *result_len, int limit, zend_bool is_callable_replace TSRMLS_DC)
-{
- zval **regex_entry,
- **replace_entry = NULL,
- *replace_value,
- empty_replace;
- char *subject_value,
- *result;
- int subject_len;
-
- /* Make sure we're dealing with strings. */
- convert_to_string_ex(subject);
- /* FIXME: This might need to be changed to STR_EMPTY_ALLOC(). Check if this zval could be dtor()'ed somehow */
- ZVAL_STRINGL(&empty_replace, "", 0, 0);
-
- /* If regex is an array */
- if (Z_TYPE_P(regex) == IS_ARRAY) {
- /* Duplicate subject string for repeated replacement */
- subject_value = estrndup(Z_STRVAL_PP(subject), Z_STRLEN_PP(subject));
- subject_len = Z_STRLEN_PP(subject);
- *result_len = subject_len;
-
- zend_hash_internal_pointer_reset(Z_ARRVAL_P(regex));
-
- replace_value = replace;
- if (Z_TYPE_P(replace) == IS_ARRAY && !is_callable_replace)
- zend_hash_internal_pointer_reset(Z_ARRVAL_P(replace));
-
- /* For each entry in the regex array, get the entry */
- while (zend_hash_get_current_data(Z_ARRVAL_P(regex), (void **)&regex_entry) == SUCCESS) {
- /* Make sure we're dealing with strings. */
- convert_to_string_ex(regex_entry);
-
- /* If replace is an array and not a callable construct */
- if (Z_TYPE_P(replace) == IS_ARRAY && !is_callable_replace) {
- /* Get current entry */
- if (zend_hash_get_current_data(Z_ARRVAL_P(replace), (void **)&replace_entry) == SUCCESS) {
- if (!is_callable_replace) {
- convert_to_string_ex(replace_entry);
- }
- replace_value = *replace_entry;
- zend_hash_move_forward(Z_ARRVAL_P(replace));
- } else {
- /* We've run out of replacement strings, so use an empty one */
- replace_value = &empty_replace;
- }
- }
-
- /* Do the actual replacement and put the result back into subject_value
- for further replacements. */
- if ((result = php_pcre_replace(Z_STRVAL_PP(regex_entry),
- Z_STRLEN_PP(regex_entry),
- subject_value,
- subject_len,
- replace_value,
- is_callable_replace,
- result_len,
- limit TSRMLS_CC)) != NULL) {
- efree(subject_value);
- subject_value = result;
- subject_len = *result_len;
- }
-
- zend_hash_move_forward(Z_ARRVAL_P(regex));
- }
-
- return subject_value;
- } else {
- result = php_pcre_replace(Z_STRVAL_P(regex),
- Z_STRLEN_P(regex),
- Z_STRVAL_PP(subject),
- Z_STRLEN_PP(subject),
- replace,
- is_callable_replace,
- result_len,
- limit TSRMLS_CC);
- return result;
- }
-}
-/* }}} */
-
-/* {{{ preg_replace_impl
- */
-static void preg_replace_impl(INTERNAL_FUNCTION_PARAMETERS, zend_bool is_callable_replace)
-{
- zval **regex,
- **replace,
- **subject,
- **limit,
- **subject_entry;
- char *result;
- int result_len;
- int limit_val = -1;
- char *string_key;
- ulong num_key;
- char *callback_name = NULL;
-
- /* Get function parameters and do error-checking. */
- if (ZEND_NUM_ARGS() < 3 || ZEND_NUM_ARGS() > 4 ||
- zend_get_parameters_ex(ZEND_NUM_ARGS(), &regex, &replace, &subject, &limit) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- if (!is_callable_replace && Z_TYPE_PP(replace) == IS_ARRAY && Z_TYPE_PP(regex) != IS_ARRAY) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Parameter mismatch, pattern is a string while replacement in an array.");
- RETURN_FALSE;
- }
-
- SEPARATE_ZVAL(replace);
- if (Z_TYPE_PP(replace) != IS_ARRAY)
- convert_to_string_ex(replace);
- if (is_callable_replace) {
- if (!zend_is_callable(*replace, 0, &callback_name)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "requires argument 2, '%s', to be a valid callback", callback_name);
- efree(callback_name);
- *return_value = **subject;
- zval_copy_ctor(return_value);
- return;
- }
- efree(callback_name);
- }
-
- SEPARATE_ZVAL(regex);
- SEPARATE_ZVAL(subject);
-
- if (ZEND_NUM_ARGS() > 3) {
- convert_to_long_ex(limit);
- limit_val = Z_LVAL_PP(limit);
- }
-
- if (Z_TYPE_PP(regex) != IS_ARRAY)
- convert_to_string_ex(regex);
-
- /* if subject is an array */
- if (Z_TYPE_PP(subject) == IS_ARRAY) {
- array_init(return_value);
- zend_hash_internal_pointer_reset(Z_ARRVAL_PP(subject));
-
- /* For each subject entry, convert it to string, then perform replacement
- and add the result to the return_value array. */
- while (zend_hash_get_current_data(Z_ARRVAL_PP(subject), (void **)&subject_entry) == SUCCESS) {
- SEPARATE_ZVAL(subject_entry);
- if ((result = php_replace_in_subject(*regex, *replace, subject_entry, &result_len, limit_val, is_callable_replace TSRMLS_CC)) != NULL) {
- /* Add to return array */
- switch(zend_hash_get_current_key(Z_ARRVAL_PP(subject), &string_key, &num_key, 0))
- {
- case HASH_KEY_IS_STRING:
- add_assoc_stringl(return_value, string_key, result, result_len, 0);
- break;
-
- case HASH_KEY_IS_LONG:
- add_index_stringl(return_value, num_key, result, result_len, 0);
- break;
- }
- }
-
- zend_hash_move_forward(Z_ARRVAL_PP(subject));
- }
- }
- else { /* if subject is not an array */
- if ((result = php_replace_in_subject(*regex, *replace, subject, &result_len, limit_val, is_callable_replace TSRMLS_CC)) != NULL) {
- RETVAL_STRINGL(result, result_len, 0);
- }
- }
-}
-/* }}} */
-
-/* {{{ proto string preg_replace(mixed regex, mixed replace, mixed subject [, int limit])
- Perform Perl-style regular expression replacement. */
-PHP_FUNCTION(preg_replace)
-{
- preg_replace_impl(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0);
-}
-/* }}} */
-
-/* {{{ proto string preg_replace_callback(mixed regex, mixed callback, mixed subject [, int limit])
- Perform Perl-style regular expression replacement using replacement callback. */
-PHP_FUNCTION(preg_replace_callback)
-{
- preg_replace_impl(INTERNAL_FUNCTION_PARAM_PASSTHRU, 1);
-}
-/* }}} */
-
-/* {{{ proto array preg_split(string pattern, string subject [, int limit [, int flags]])
- Split string into an array using a perl-style regular expression as a delimiter */
-PHP_FUNCTION(preg_split)
-{
- zval **regex, /* Regular expression to split by */
- **subject, /* Subject string to split */
- **limit, /* Number of pieces to return */
- **flags;
- pcre *re = NULL; /* Compiled regular expression */
- pcre *re_bump = NULL; /* Regex instance for empty matches */
- pcre_extra *extra = NULL; /* Holds results of studying */
- pcre_extra *extra_bump = NULL; /* Almost dummy */
- int *offsets; /* Array of subpattern offsets */
- int size_offsets; /* Size of the offsets array */
- int exoptions = 0; /* Execution options */
- int preg_options = 0; /* Custom preg options */
- int coptions = 0; /* Custom preg options */
- int argc; /* Argument count */
- int limit_val = -1; /* Integer value of limit */
- int no_empty = 0; /* If NO_EMPTY flag is set */
- int delim_capture = 0; /* If delimiters should be captured */
- int offset_capture = 0;/* If offsets should be captured */
- int count = 0; /* Count of matched subpatterns */
- int start_offset; /* Where the new search starts */
- int next_offset; /* End of the last delimiter match + 1 */
- int g_notempty = 0; /* If the match should not be empty */
- char *match, /* The current match */
- *last_match; /* Location of last match */
- int rc;
-
- /* Get function parameters and do error checking */
- argc = ZEND_NUM_ARGS();
- if (argc < 2 || argc > 4 || zend_get_parameters_ex(argc, &regex, &subject, &limit, &flags) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- if (argc > 2) {
- convert_to_long_ex(limit);
- limit_val = Z_LVAL_PP(limit);
- if (limit_val == 0)
- limit_val = -1;
-
- if (argc > 3) {
- convert_to_long_ex(flags);
- no_empty = Z_LVAL_PP(flags) & PREG_SPLIT_NO_EMPTY;
- delim_capture = Z_LVAL_PP(flags) & PREG_SPLIT_DELIM_CAPTURE;
- offset_capture = Z_LVAL_PP(flags) & PREG_SPLIT_OFFSET_CAPTURE;
- }
- }
-
- /* Make sure we're dealing with strings */
- convert_to_string_ex(regex);
- convert_to_string_ex(subject);
-
- /* Compile regex or get it from cache. */
- if ((re = pcre_get_compiled_regex_ex(Z_STRVAL_PP(regex), &extra, &preg_options, &coptions TSRMLS_CC)) == NULL) {
- RETURN_FALSE;
- }
-
- /* Initialize return value */
- array_init(return_value);
-
- /* Calculate the size of the offsets array, and allocate memory for it. */
- rc = pcre_fullinfo(re, extra, PCRE_INFO_CAPTURECOUNT, &size_offsets);
- if (rc < 0) {
- php_error(E_WARNING, "%s: internal pcre_fullinfo() error %d",
- get_active_function_name(TSRMLS_C), rc);
- RETURN_FALSE;
- }
- size_offsets = (size_offsets + 1) * 3;
- offsets = (int *)safe_emalloc(size_offsets, sizeof(int), 0);
-
- /* Start at the beginning of the string */
- start_offset = 0;
- next_offset = 0;
- last_match = Z_STRVAL_PP(subject);
- match = NULL;
-
- /* Get next piece if no limit or limit not yet reached and something matched*/
- while ((limit_val == -1 || limit_val > 1)) {
- count = pcre_exec(re, extra, Z_STRVAL_PP(subject),
- Z_STRLEN_PP(subject), start_offset,
- exoptions|g_notempty, offsets, size_offsets);
-
- /* Check for too many substrings condition. */
- if (count == 0) {
- php_error_docref(NULL TSRMLS_CC,E_NOTICE, "Matched, but too many substrings");
- count = size_offsets/3;
- }
-
- /* If something matched */
- if (count > 0) {
- match = Z_STRVAL_PP(subject) + offsets[0];
-
- if (!no_empty || &Z_STRVAL_PP(subject)[offsets[0]] != last_match) {
-
- if (offset_capture) {
- /* Add (match, offset) pair to the return value */
- add_offset_pair(return_value, last_match, &Z_STRVAL_PP(subject)[offsets[0]]-last_match, next_offset, NULL);
- } else {
- /* Add the piece to the return value */
- add_next_index_stringl(return_value, last_match,
- &Z_STRVAL_PP(subject)[offsets[0]]-last_match, 1);
- }
-
- /* One less left to do */
- if (limit_val != -1)
- limit_val--;
- }
-
- last_match = &Z_STRVAL_PP(subject)[offsets[1]];
- next_offset = offsets[1];
-
- if (delim_capture) {
- int i, match_len;
- for (i = 1; i < count; i++) {
- match_len = offsets[(i<<1)+1] - offsets[i<<1];
- /* If we have matched a delimiter */
- if (!no_empty || match_len > 0) {
- if (offset_capture) {
- add_offset_pair(return_value, &Z_STRVAL_PP(subject)[offsets[i<<1]], match_len, offsets[i<<1], NULL);
- } else {
- add_next_index_stringl(return_value,
- &Z_STRVAL_PP(subject)[offsets[i<<1]],
- match_len, 1);
- }
- }
- }
- }
- } else { /* Failed to match */
- /* If we previously set PCRE_NOTEMPTY after a null match,
- this is not necessarily the end. We need to advance
- the start offset, and continue. Fudge the offset values
- to achieve this, unless we're already at the end of the string. */
- if (g_notempty != 0 && start_offset < Z_STRLEN_PP(subject)) {
- if (coptions & PCRE_UTF8) {
- if (re_bump == NULL) {
- int dummy;
-
- if ((re_bump = pcre_get_compiled_regex("/./u", &extra_bump, &dummy TSRMLS_CC)) == NULL) {
- RETURN_FALSE;
- }
- }
- count = pcre_exec(re_bump, extra_bump, Z_STRVAL_PP(subject),
- Z_STRLEN_PP(subject), start_offset,
- exoptions, offsets, size_offsets);
- if (count < 1) {
- php_error_docref(NULL TSRMLS_CC,E_NOTICE, "Unknown error");
- offsets[0] = start_offset;
- offsets[1] = start_offset + 1;
- }
- } else {
- offsets[0] = start_offset;
- offsets[1] = start_offset + 1;
- }
- } else
- break;
- }
-
- /* If we have matched an empty string, mimic what Perl's /g options does.
- This turns out to be rather cunning. First we set PCRE_NOTEMPTY and try
- the match again at the same point. If this fails (picked up above) we
- advance to the next character. */
- g_notempty = (offsets[1] == offsets[0])? PCRE_NOTEMPTY | PCRE_ANCHORED : 0;
-
- /* Advance to the position right after the last full match */
- start_offset = offsets[1];
- }
-
-
- if (!no_empty || start_offset != Z_STRLEN_PP(subject))
- {
- if (offset_capture) {
- /* Add the last (match, offset) pair to the return value */
- add_offset_pair(return_value, &Z_STRVAL_PP(subject)[start_offset], Z_STRLEN_PP(subject) - start_offset, start_offset, NULL);
- } else {
- /* Add the last piece to the return value */
- add_next_index_stringl(return_value, last_match, Z_STRVAL_PP(subject) + Z_STRLEN_PP(subject) - last_match, 1);
- }
- }
-
-
- /* Clean up */
- efree(offsets);
-}
-/* }}} */
-
-/* {{{ proto string preg_quote(string str, string delim_char)
- Quote regular expression characters plus an optional character */
-PHP_FUNCTION(preg_quote)
-{
- zval **in_str_arg; /* Input string argument */
- zval **delim; /* Additional delimiter argument */
- char *in_str, /* Input string */
- *in_str_end, /* End of the input string */
- *out_str, /* Output string with quoted characters */
- *p, /* Iterator for input string */
- *q, /* Iterator for output string */
- delim_char=0, /* Delimiter character to be quoted */
- c; /* Current character */
- zend_bool quote_delim = 0; /* Whether to quote additional delim char */
-
- /* Get the arguments and check for errors */
- if (ZEND_NUM_ARGS() < 1 || ZEND_NUM_ARGS() > 2 ||
- zend_get_parameters_ex(ZEND_NUM_ARGS(), &in_str_arg, &delim) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- /* Make sure we're working with strings */
- convert_to_string_ex(in_str_arg);
- in_str = Z_STRVAL_PP(in_str_arg);
- in_str_end = Z_STRVAL_PP(in_str_arg) + Z_STRLEN_PP(in_str_arg);
-
- /* Nothing to do if we got an empty string */
- if (in_str == in_str_end) {
- RETVAL_STRINGL("", 0, 1);
- }
-
- if (ZEND_NUM_ARGS() == 2) {
- convert_to_string_ex(delim);
- if (Z_STRLEN_PP(delim) > 0) {
- delim_char = Z_STRVAL_PP(delim)[0];
- quote_delim = 1;
- }
- }
-
- /* Allocate enough memory so that even if each character
- is quoted, we won't run out of room */
- out_str = safe_emalloc(2, Z_STRLEN_PP(in_str_arg), 1);
-
- /* Go through the string and quote necessary characters */
- for(p = in_str, q = out_str; p != in_str_end; p++) {
- c = *p;
- switch(c) {
- case '.':
- case '\\':
- case '+':
- case '*':
- case '?':
- case '[':
- case '^':
- case ']':
- case '$':
- case '(':
- case ')':
- case '{':
- case '}':
- case '=':
- case '!':
- case '>':
- case '<':
- case '|':
- case ':':
- *q++ = '\\';
- *q++ = c;
- break;
-
- case '\0':
- *q++ = '\\';
- *q++ = '0';
- break;
-
- default:
- if (quote_delim && c == delim_char)
- *q++ = '\\';
- *q++ = c;
- break;
- }
- }
- *q = '\0';
-
- /* Reallocate string and return it */
- RETVAL_STRINGL(erealloc(out_str, q - out_str + 1), q - out_str, 0);
-}
-/* }}} */
-
-/* {{{ proto array preg_grep(string regex, array input)
- Searches array and returns entries which match regex */
-PHP_FUNCTION(preg_grep)
-{
- zval **regex, /* Regular expression */
- **input, /* Input array */
- **flags,
- **entry; /* An entry in the input array */
- pcre *re = NULL; /* Compiled regular expression */
- pcre_extra *extra = NULL; /* Holds results of studying */
- int preg_options = 0; /* Custom preg options */
- int *offsets; /* Array of subpattern offsets */
- int size_offsets; /* Size of the offsets array */
- int count = 0; /* Count of matched subpatterns */
- char *string_key;
- ulong num_key;
- zend_bool invert = 0; /* Whether to return non-matching
- entries */
- int rc;
-
- /* Get arguments and do error checking */
-
- if (ZEND_NUM_ARGS() < 2 || ZEND_NUM_ARGS() > 3 ||
- zend_get_parameters_ex(ZEND_NUM_ARGS(), &regex, &input, &flags) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- if (Z_TYPE_PP(input) != IS_ARRAY) {
- php_error_docref(NULL TSRMLS_CC,E_WARNING, "Second argument to preg_grep() should be an array");
- return;
- }
-
- SEPARATE_ZVAL(input);
-
- /* Make sure regex is a string */
- convert_to_string_ex(regex);
-
- if (ZEND_NUM_ARGS() > 2) {
- convert_to_long_ex(flags);
- invert = (Z_LVAL_PP(flags) & PREG_GREP_INVERT) ? 1 : 0;
- }
-
- /* Compile regex or get it from cache. */
- if ((re = pcre_get_compiled_regex(Z_STRVAL_PP(regex), &extra, &preg_options TSRMLS_CC)) == NULL) {
- RETURN_FALSE;
- }
-
- /* Calculate the size of the offsets array, and allocate memory for it. */
- rc = pcre_fullinfo(re, extra, PCRE_INFO_CAPTURECOUNT, &size_offsets);
- if (rc < 0) {
- php_error(E_WARNING, "%s: internal pcre_fullinfo() error %d",
- get_active_function_name(TSRMLS_C), rc);
- RETURN_FALSE;
- }
- size_offsets = (size_offsets + 1) * 3;
- offsets = (int *)safe_emalloc(size_offsets, sizeof(int), 0);
-
- /* Initialize return array */
- array_init(return_value);
-
- /* Go through the input array */
- zend_hash_internal_pointer_reset(Z_ARRVAL_PP(input));
- while(zend_hash_get_current_data(Z_ARRVAL_PP(input), (void **)&entry) == SUCCESS) {
-
- convert_to_string_ex(entry);
-
- /* Perform the match */
- count = pcre_exec(re, extra, Z_STRVAL_PP(entry),
- Z_STRLEN_PP(entry), 0,
- 0, offsets, size_offsets);
-
- /* Check for too many substrings condition. */
- if (count == 0) {
- php_error_docref(NULL TSRMLS_CC, E_NOTICE, "Matched, but too many substrings");
- count = size_offsets/3;
- }
-
- /* If the entry fits our requirements */
- if ((count > 0 && !invert) ||
- (count < 0 && invert)) {
- (*entry)->refcount++;
-
- /* Add to return array */
- switch(zend_hash_get_current_key(Z_ARRVAL_PP(input), &string_key, &num_key, 0))
- {
- case HASH_KEY_IS_STRING:
- zend_hash_update(Z_ARRVAL_P(return_value), string_key,
- strlen(string_key)+1, entry, sizeof(zval *), NULL);
- break;
-
- case HASH_KEY_IS_LONG:
- zend_hash_index_update(Z_ARRVAL_P(return_value), num_key, entry,
- sizeof(zval *), NULL);
- break;
- }
- }
-
- zend_hash_move_forward(Z_ARRVAL_PP(input));
- }
-
- /* Clean up */
- efree(offsets);
-}
-/* }}} */
-
-/* {{{ module definition structures */
-
-function_entry pcre_functions[] = {
- PHP_FE(preg_match, third_arg_force_ref)
- PHP_FE(preg_match_all, third_arg_force_ref)
- PHP_FE(preg_replace, NULL)
- PHP_FE(preg_replace_callback, NULL)
- PHP_FE(preg_split, NULL)
- PHP_FE(preg_quote, NULL)
- PHP_FE(preg_grep, NULL)
- {NULL, NULL, NULL}
-};
-
-zend_module_entry pcre_module_entry = {
- STANDARD_MODULE_HEADER,
- "pcre",
- pcre_functions,
- PHP_MINIT(pcre),
- PHP_MSHUTDOWN(pcre),
- NULL,
- NULL,
- PHP_MINFO(pcre),
- NO_VERSION_YET,
- STANDARD_MODULE_PROPERTIES
-};
-
-#ifdef COMPILE_DL_PCRE
-ZEND_GET_MODULE(pcre)
-# ifdef PHP_WIN32
-# include "zend_arg_defs.c"
-# endif
-#endif
-
-/* }}} */
-
-#endif /* HAVE_PCRE || HAVE_BUNDLED_PCRE */
-
-/*
- * 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/pcre/php_pcre.h b/ext/pcre/php_pcre.h
deleted file mode 100644
index 94d300f180..0000000000
--- a/ext/pcre/php_pcre.h
+++ /dev/null
@@ -1,80 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Andrei Zmievski <andrei@php.net> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-#ifndef PHP_PCRE_H
-#define PHP_PCRE_H
-
-#if HAVE_PCRE || HAVE_BUNDLED_PCRE
-
-#if HAVE_BUNDLED_PCRE
-#include "pcrelib/pcre.h"
-#else
-#include "pcre.h"
-#endif
-
-#if HAVE_LOCALE_H
-#include <locale.h>
-#endif
-
-PHP_FUNCTION(preg_match);
-PHP_FUNCTION(preg_match_all);
-PHP_FUNCTION(preg_replace);
-PHP_FUNCTION(preg_replace_callback);
-PHP_FUNCTION(preg_split);
-PHP_FUNCTION(preg_quote);
-PHP_FUNCTION(preg_grep);
-
-PHPAPI char *php_pcre_replace(char *regex, int regex_len, char *subject, int subject_len, zval *replace_val, int is_callable_replace, int *result_len, int limit TSRMLS_DC);
-PHPAPI pcre* pcre_get_compiled_regex(char *regex, pcre_extra **extra, int *options TSRMLS_DC);
-PHPAPI pcre* pcre_get_compiled_regex_ex(char *regex, pcre_extra **extra, int *preg_options, int *coptions TSRMLS_DC);
-
-extern zend_module_entry pcre_module_entry;
-#define pcre_module_ptr &pcre_module_entry
-
-typedef struct {
- pcre *re;
- pcre_extra *extra;
- int preg_options;
-#if HAVE_SETLOCALE
- char *locale;
- unsigned const char *tables;
-#endif
- int compile_options;
-} pcre_cache_entry;
-
-ZEND_BEGIN_MODULE_GLOBALS(pcre)
- HashTable pcre_cache;
-ZEND_END_MODULE_GLOBALS(pcre)
-
-#ifdef ZTS
-# define PCRE_G(v) TSRMG(pcre_globals_id, zend_pcre_globals *, v)
-#else
-# define PCRE_G(v) (pcre_globals.v)
-#endif
-
-#else
-
-#define pcre_module_ptr NULL
-
-#endif /* HAVE_PCRE || HAVE_BUNDLED_PCRE */
-
-#define phpext_pcre_ptr pcre_module_ptr
-
-#endif /* PHP_PCRE_H */
diff --git a/ext/pcre/tests/bug20528.phpt b/ext/pcre/tests/bug20528.phpt
deleted file mode 100644
index 8182fd9bfe..0000000000
--- a/ext/pcre/tests/bug20528.phpt
+++ /dev/null
@@ -1,24 +0,0 @@
---TEST--
-Bug #20528 (preg_split() drops characters (re-opens Bug #15413))
---FILE--
-<?php
- $data = '(#11/19/2002#)';
- var_dump(preg_split('/\b/', $data));
-?>
---EXPECT--
-array(7) {
- [0]=>
- string(2) "(#"
- [1]=>
- string(2) "11"
- [2]=>
- string(1) "/"
- [3]=>
- string(2) "19"
- [4]=>
- string(1) "/"
- [5]=>
- string(4) "2002"
- [6]=>
- string(2) "#)"
-}
diff --git a/ext/pcre/tests/bug21732.phpt b/ext/pcre/tests/bug21732.phpt
deleted file mode 100644
index 3dfc41e19f..0000000000
--- a/ext/pcre/tests/bug21732.phpt
+++ /dev/null
@@ -1,29 +0,0 @@
---TEST--
-Bug #21732 (preg_replace() segfaults with invalid parameters)
---INI--
-error_reporting=0
---FILE--
-<?php
-class foo {
- function cb($param) {
- var_dump($param);
- return "yes!";
- }
-}
-
-var_dump(preg_replace('', array(), ''));
-var_dump(preg_replace_callback("/(ab)(cd)(e)/", array(new foo(), "cb"), 'abcde'));
-?>
---EXPECT--
-bool(false)
-array(4) {
- [0]=>
- string(5) "abcde"
- [1]=>
- string(2) "ab"
- [2]=>
- string(2) "cd"
- [3]=>
- string(1) "e"
-}
-string(4) "yes!"
diff --git a/ext/pcre/tests/bug26927.phpt b/ext/pcre/tests/bug26927.phpt
deleted file mode 100644
index 25b6b2e572..0000000000
--- a/ext/pcre/tests/bug26927.phpt
+++ /dev/null
@@ -1,11 +0,0 @@
---TEST--
-Bug #26927 (preg_quote() does not escape \0)
---FILE--
-<?php
- $str = "a\000b";
- $str_quoted = preg_quote($str);
- var_dump(preg_match("!{$str_quoted}!", $str), $str_quoted);
-?>
---EXPECT--
-int(1)
-string(4) "a\0b"
diff --git a/ext/pcre/tests/bug27103.phpt b/ext/pcre/tests/bug27103.phpt
deleted file mode 100644
index 185225d310..0000000000
--- a/ext/pcre/tests/bug27103.phpt
+++ /dev/null
@@ -1,37 +0,0 @@
---TEST--
-Bug #27103 (preg_split('//u') incorrectly splits UTF-8 strings into octets)
---FILE--
-<?php
-function iter($ar)
-{
- foreach ($ar as $c) {
- echo htmlentities($c, 0, "UTF-8"), ": ", strlen($c), "\n";
- }
-}
-$teststr = "\xe2\x82\xac hi there";
-iter(preg_split('//u', $teststr, -1, PREG_SPLIT_NO_EMPTY));
-preg_match_all('/./u', $teststr, $matches);
-iter($matches[0]);
-?>
---EXPECT--
-&euro;: 3
- : 1
-h: 1
-i: 1
- : 1
-t: 1
-h: 1
-e: 1
-r: 1
-e: 1
-&euro;: 3
- : 1
-h: 1
-i: 1
- : 1
-t: 1
-h: 1
-e: 1
-r: 1
-e: 1
-
diff --git a/ext/pdo/CREDITS b/ext/pdo/CREDITS
deleted file mode 100755
index e650219359..0000000000
--- a/ext/pdo/CREDITS
+++ /dev/null
@@ -1,2 +0,0 @@
-PHP Data Objects
-Wez Furlong, Marcus Boerger, Sterling Hughes, George Schlossnagle
diff --git a/ext/pdo/EXPERIMENTAL b/ext/pdo/EXPERIMENTAL
deleted file mode 100644
index e69de29bb2..0000000000
--- a/ext/pdo/EXPERIMENTAL
+++ /dev/null
diff --git a/ext/pdo/Makefile.frag b/ext/pdo/Makefile.frag
deleted file mode 100644
index c28a5cee50..0000000000
--- a/ext/pdo/Makefile.frag
+++ /dev/null
@@ -1,31 +0,0 @@
-phpincludedir=$(prefix)/include/php
-
-PDO_HEADER_FILES= \
- php_pdo.h \
- php_pdo_driver.h
-
-install-pdo-headers:
- echo "Installing PDO headers: $(INSTALL_ROOT)$(phpincludedir)/ext/pdo/"
- $(mkinstalldirs) $(INSTALL_ROOT)$(phpincludedir)/ext/pdo
- for f in $(PDO_HEADER_FILES); do \
- if test -f "$(top_srcdir)/$$f"; then \
- $(INSTALL_DATA) $(top_srcdir)/$$f $(INSTALL_ROOT)$(phpincludedir)/ext/pdo; \
- elif test -f "$(top_builddir)/$$f"; then \
- $(INSTALL_DATA) $(top_builddir)/$$f $(INSTALL_ROOT)$(phpincludedir)/ext/pdo; \
- elif test -f "$(top_srcdir)/ext/pdo/$$f"; then \
- $(INSTALL_DATA) $(top_srcdir)/ext/pdo/$$f $(INSTALL_ROOT)$(phpincludedir)/ext/pdo; \
- elif test -f "$(top_builddir)/ext/pdo/$$f"; then \
- $(INSTALL_DATA) $(top_builddir)/ext/pdo/$$f $(INSTALL_ROOT)$(phpincludedir)/ext/pdo; \
- else \
- echo "hmmm"; \
- fi \
- done;
-
-# mini hack
-install: $(all_targets) $(install_targets) install-pdo-headers
-
-$(top_srcdir)/ext/pdo/pdo_sql_parser.c: $(top_srcdir)/ext/pdo/pdo_sql_parser.re
- re2c -b $(top_srcdir)/ext/pdo/pdo_sql_parser.re > $@
-
-$(srcdir)/pdo_sql_parser.c: $(srcdir)/pdo_sql_parser.re
- re2c -b $(srcdir)/pdo_sql_parser.re > $@
diff --git a/ext/pdo/README b/ext/pdo/README
deleted file mode 100755
index ea3ee74fb6..0000000000
--- a/ext/pdo/README
+++ /dev/null
@@ -1,56 +0,0 @@
-$Id$
-
-PHP Data Objects
-================
-
-Concept: Data Access Abstraction
-
-Goals:
-
-1/ Be light-weight
-2/ Provide common API for common database operations
-3/ Be performant
-4/ Keep majority of PHP specific stuff in the PDO core (such as persistent
- resource management); drivers should only have to worry about getting the
- data and not about PHP internals.
-
-
-Transactions and autocommit
-===========================
-
-When you create a database handle, you *should* specify the autocommit
-behaviour that you require. PDO will default to autocommit on.
-
-$dbh = new PDO("...", $user, $pass, array(PDO_ATTR_AUTOCOMMIT => true));
-
-When auto-commit is on, the driver will implicitly commit each query as it is
-executed. This works fine for most simple tasks but can be significantly
-slower when you are making a large number of udpates.
-
-$dbh = new PDO("...", $user, $pass, array(PDO_ATTR_AUTOCOMMIT => false));
-
-When auto-commit is off, you must then use $dbh->beginWork() to initiate a
-transaction. When your work is done, you then call $dbh->commit() or
-$dbh->rollBack() to persist or abort your changes respectively.
-Not all databases support transactions.
-
-You can change the auto-commit mode at run-time:
-
-$dbh->setAttribute(PDO_ATTR_AUTOCOMMIT, false);
-
-Regardless of the error handling mode set on the database handle, if the
-autocommit mode cannot be changed, an exception will be thrown.
-
-Some drivers will allow you to temporarily disable autocommit if you call
-$dbh->beginWork(). When you commit() or rollBack() such a transaction, the
-handle will switch back to autocommit mode again. If the mode could not be
-changed, an exception will be raised, as noted above.
-
-When the database handle is closed or destroyed (or at request end for
-persistent handles), the driver will implicitly rollBack(). It is your
-responsibility to call commit() when you are done making changes and
-autocommit is turned off.
-
-vim:tw=78:et
-
-
diff --git a/ext/pdo/TODO b/ext/pdo/TODO
deleted file mode 100755
index 43da3fe9a6..0000000000
--- a/ext/pdo/TODO
+++ /dev/null
@@ -1,25 +0,0 @@
-$Id$
-
-In no particular order:
-
-Low-level:
-
-- Scanner for :named placeholders and prepare()/execute() emulation (George)
-- $dbh->quote()
-- Exceptions and unified error API
-- Scrollable cursors
-- meta data from driver, such as server version and supported features
-- field meta data from statement handles
-- $dbh->exec() for one-shot SQL
-- LOB support via Streams API
-- persistent handles
-- iterator support
-- "lazy" fetch support
-
-Not-so-low-level:
-- hash key case folding for portabilitiy, ala sqlite.assoc_case, but not using an ini option.
-- fetchAll(), single row, single column fetches etc.
-
-Could be more...
-
-vim:tw=78:et
diff --git a/ext/pdo/config.m4 b/ext/pdo/config.m4
deleted file mode 100755
index 60e6039550..0000000000
--- a/ext/pdo/config.m4
+++ /dev/null
@@ -1,10 +0,0 @@
-dnl $Id$
-dnl config.m4 for extension pdo
-
-PHP_ARG_ENABLE(pdo, whether to enable PDO support,
-[ --enable-pdo Enable PHP Data Objects support])
-
-if test "$PHP_PDO" != "no"; then
- PHP_NEW_EXTENSION(pdo, pdo.c pdo_dbh.c pdo_stmt.c pdo_sql_parser.c, $ext_shared)
- PHP_ADD_MAKEFILE_FRAGMENT
-fi
diff --git a/ext/pdo/config.w32 b/ext/pdo/config.w32
deleted file mode 100755
index 112c7d9fce..0000000000
--- a/ext/pdo/config.w32
+++ /dev/null
@@ -1,9 +0,0 @@
-// $Id$
-// vim:ft=javascript
-
-ARG_ENABLE("pdo", "Enable PHP Data Objects support", "no");
-
-if (PHP_PDO != "no") {
- EXTENSION('pdo', 'pdo.c pdo_dbh.c pdo_stmt.c pdo_sql_parser.c');
-}
-
diff --git a/ext/pdo/package.xml b/ext/pdo/package.xml
deleted file mode 100755
index 963d3e939b..0000000000
--- a/ext/pdo/package.xml
+++ /dev/null
@@ -1,84 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-<!DOCTYPE package SYSTEM "../pear/package.dtd">
-<package version="1.0">
- <name>PDO</name>
- <summary>PHP Data Objects Interface</summary>
- <maintainers>
- <maintainer>
- <user>wez</user>
- <name>Wez Furlong</name>
- <email>wez@php.net</email>
- <role>lead</role>
- </maintainer>
- <maintainer>
- <user>helly</user>
- <name>Marcus Boerger</name>
- <email>helly@php.net</email>
- <role>lead</role>
- </maintainer>
- <maintainer>
- <user>iliaa</user>
- <name>Ilia Alshanetsky</name>
- <email>iliaa@php.net</email>
- <role>lead</role>
- </maintainer>
- <maintainer>
- <user>gschlossnagle</user>
- <name>George Schlossnagle</name>
- <email>george@omniti.com</email>
- <role>lead</role>
- </maintainer>
- </maintainers>
- <description>
- PDO provides a uniform data access interface, sporting advanced features such
- as prepared statements and bound parameters. PDO drivers are dynamically
- loadable and may be developed independently from the core, but still accessed
- using the same API.
- </description>
- <license>PHP</license>
- <release>
- <state>alpha</state>
- <version>0.1.1</version>
- <date>2004-05-21</date>
-
- <notes>
-Note that PDO on its own is useless.
-You need to install a PDO database driver to make use of it,
-check http://pecl.php.net for a list of available PDO drivers.
-
-It is highly recommended that you update to the latest PHP 5 snapshot before using PDO.
-You can obtain it from http://snaps.php.net.
-
-If you are running on Windows, you should download:
-http://snaps.php.net/win32/php5-win32-latest.zip
-http://snaps.php.net/win32/PECL_5_0/php_pdo.dll
-
-You can find additional PDO drivers at:
-http://snaps.php.net/win32/PECL_5_0/
-
- </notes>
-
- <filelist>
- <file role="src" name="config.m4"/>
- <file role="src" name="config.w32"/>
- <file role="src" name="pdo.c"/>
- <file role="src" name="pdo_dbh.c"/>
- <file role="src" name="pdo_stmt.c"/>
- <file role="src" name="php_pdo.h"/>
- <file role="src" name="php_pdo_driver.h"/>
- <file role="src" name="php_pdo_int.h"/>
- <file role="src" name="pdo_sql_parser.re"/>
- <file role="src" name="pdo_sql_parser.c"/>
- <file role="src" name="php_pdo_sql_parser.h"/>
- <file role="src" name="Makefile.frag"/>
-
- <file role="doc" name="README"/>
- <file role="doc" name="TODO"/>
- <file role="doc" name="pdo.php"/>
- <file role="doc" name="CREDITS"/>
- </filelist>
- <deps>
- <dep type="php" rel="ge" version="5.0.0RC3-dev"/>
- </deps>
- </release>
-</package>
diff --git a/ext/pdo/pdo.c b/ext/pdo/pdo.c
deleted file mode 100755
index 295e8f3c82..0000000000
--- a/ext/pdo/pdo.c
+++ /dev/null
@@ -1,316 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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> |
- | Marcus Boerger <helly@php.net> |
- | Sterling Hughes <sterling@php.net> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <ctype.h>
-#include "php.h"
-#include "php_ini.h"
-#include "ext/standard/info.h"
-#include "php_pdo.h"
-#include "php_pdo_driver.h"
-#include "php_pdo_int.h"
-#include "zend_exceptions.h"
-
-ZEND_DECLARE_MODULE_GLOBALS(pdo)
-
-/* True global resources - no need for thread safety here */
-
-/* the registry of PDO drivers */
-static HashTable pdo_driver_hash;
-
-/* we use persistent resources for the driver connection stuff */
-static int le_ppdo;
-
-/* for exceptional circumstances */
-zend_class_entry *pdo_exception_ce;
-
-PDO_API zend_class_entry *php_pdo_get_exception(void)
-{
- return pdo_exception_ce;
-}
-
-zend_class_entry *pdo_dbh_ce, *pdo_dbstmt_ce, *pdo_row_ce;
-
-/* {{{ pdo_functions[] */
-function_entry pdo_functions[] = {
- {NULL, NULL, NULL}
-};
-/* }}} */
-
-/* {{{ pdo_module_entry */
-zend_module_entry pdo_module_entry = {
- STANDARD_MODULE_HEADER,
- "PDO",
- pdo_functions,
- PHP_MINIT(pdo),
- PHP_MSHUTDOWN(pdo),
- PHP_RINIT(pdo),
- PHP_RSHUTDOWN(pdo),
- PHP_MINFO(pdo),
- "0.1.1",
- STANDARD_MODULE_PROPERTIES
-};
-/* }}} */
-
-#ifdef COMPILE_DL_PDO
-ZEND_GET_MODULE(pdo)
-#endif
-
-/* {{{ PHP_INI */
-PHP_INI_BEGIN()
- STD_PHP_INI_ENTRY("pdo.global_value", "42", PHP_INI_ALL, OnUpdateLong, global_value, zend_pdo_globals, pdo_globals)
-PHP_INI_END()
-/* }}} */
-
-/* {{{ php_pdo_init_globals */
-static void php_pdo_init_globals(zend_pdo_globals *pdo_globals)
-{
- pdo_globals->global_value = 0;
-}
-/* }}} */
-
-PDO_API int php_pdo_register_driver(pdo_driver_t *driver)
-{
- if (driver->api_version != PDO_DRIVER_API) {
- zend_error(E_ERROR, "failed api version check");
- return FAILURE;
- }
- if (!zend_hash_exists(&module_registry, "pdo", sizeof("pdo"))) {
- zend_error(E_ERROR, "You MUST load PDO before loading any PDO drivers");
- return FAILURE; /* NOTREACHED */
- }
-
- return zend_hash_add(&pdo_driver_hash, (char*)driver->driver_name, driver->driver_name_len,
- (void**)&driver, sizeof(driver), NULL);
-}
-
-PDO_API void php_pdo_unregister_driver(pdo_driver_t *driver)
-{
- if (!zend_hash_exists(&module_registry, "pdo", sizeof("pdo"))) {
- return;
- }
-
- zend_hash_del(&pdo_driver_hash, (char*)driver->driver_name, driver->driver_name_len);
-}
-
-pdo_driver_t *pdo_find_driver(const char *name, int namelen)
-{
- pdo_driver_t **driver = NULL;
-
- zend_hash_find(&pdo_driver_hash, (char*)name, namelen, (void**)&driver);
-
- return driver ? *driver : NULL;
-}
-
-PDO_API int php_pdo_parse_data_source(const char *data_source,
- unsigned long data_source_len, struct pdo_data_src_parser *parsed,
- int nparams)
-{
- int i, j;
- int valstart = -1;
- int semi = -1;
- int optstart = 0;
- int nlen;
- int n_matches = 0;
-
- i = 0;
- while (i < data_source_len) {
- /* looking for NAME= */
-
- if (data_source[i] == '\0') {
- break;
- }
-
- if (data_source[i] != '=') {
- ++i;
- continue;
- }
-
- valstart = ++i;
-
- /* now we're looking for VALUE; or just VALUE<NUL> */
- semi = -1;
- while (i < data_source_len) {
- if (data_source[i] == '\0') {
- semi = i++;
- break;
- }
- if (data_source[i] == ';') {
- semi = i++;
- break;
- }
- ++i;
- }
-
- if (semi == -1) {
- semi = i;
- }
-
- /* find the entry in the array */
- nlen = valstart - optstart - 1;
- for (j = 0; j < nparams; j++) {
- if (0 == strncmp(data_source + optstart, parsed[j].optname, nlen) && parsed[j].optname[nlen] == '\0') {
- /* got a match */
- if (parsed[j].freeme) {
- efree(parsed[j].optval);
- }
- parsed[j].optval = estrndup(data_source + valstart, semi - valstart);
- parsed[j].freeme = 1;
- ++n_matches;
- break;
- }
- }
-
- while (i < data_source_len && isspace(data_source[i])) {
- i++;
- }
-
- optstart = i;
- }
-
- return n_matches;
-}
-
-
-/* {{{ PHP_MINIT_FUNCTION */
-PHP_MINIT_FUNCTION(pdo)
-{
- zend_class_entry ce;
-
- ZEND_INIT_MODULE_GLOBALS(pdo, php_pdo_init_globals, NULL);
- REGISTER_INI_ENTRIES();
-
- zend_hash_init(&pdo_driver_hash, 0, NULL, NULL, 1);
-
- REGISTER_LONG_CONSTANT("PDO_PARAM_NULL", (long)PDO_PARAM_NULL, CONST_CS|CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("PDO_PARAM_INT", (long)PDO_PARAM_INT, CONST_CS|CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("PDO_PARAM_STR", (long)PDO_PARAM_STR, CONST_CS|CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("PDO_PARAM_LOB", (long)PDO_PARAM_LOB, CONST_CS|CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("PDO_PARAM_STMT", (long)PDO_PARAM_STMT, CONST_CS|CONST_PERSISTENT);
-
- REGISTER_LONG_CONSTANT("PDO_FETCH_LAZY", (long)PDO_FETCH_LAZY, CONST_CS|CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("PDO_FETCH_ASSOC",(long)PDO_FETCH_ASSOC, CONST_CS|CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("PDO_FETCH_NUM", (long)PDO_FETCH_NUM, CONST_CS|CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("PDO_FETCH_BOTH", (long)PDO_FETCH_BOTH, CONST_CS|CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("PDO_FETCH_OBJ", (long)PDO_FETCH_OBJ, CONST_CS|CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("PDO_FETCH_BOUND",(long)PDO_FETCH_BOUND, CONST_CS|CONST_PERSISTENT);
-
- REGISTER_LONG_CONSTANT("PDO_ATTR_AUTOCOMMIT", (long)PDO_ATTR_AUTOCOMMIT, CONST_CS|CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("PDO_ATTR_SCROLL", (long)PDO_ATTR_SCROLL, CONST_CS|CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("PDO_ATTR_PREFETCH", (long)PDO_ATTR_PREFETCH, CONST_CS|CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("PDO_ATTR_TIMEOUT", (long)PDO_ATTR_TIMEOUT, CONST_CS|CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("PDO_ATTR_ERRMODE", (long)PDO_ATTR_ERRMODE, CONST_CS|CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("PDO_ATTR_SERVER_VERSION", (long)PDO_ATTR_SERVER_VERSION, CONST_CS|CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("PDO_ATTR_CLIENT_VERSION", (long)PDO_ATTR_CLIENT_VERSION, CONST_CS|CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("PDO_ATTR_SERVER_INFO", (long)PDO_ATTR_SERVER_INFO, CONST_CS|CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("PDO_ATTR_CONNECTION_STATUS", (long)PDO_ATTR_CONNECTION_STATUS, CONST_CS|CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("PDO_ATTR_CASE", (long)PDO_ATTR_CASE, CONST_CS|CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("PDO_ATTR_CURSOR_NAME", (long)PDO_ATTR_CURSOR_NAME, CONST_CS|CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("PDO_ATTR_CURSOR", (long)PDO_ATTR_CURSOR, CONST_CS|CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("PDO_ATTR_ORACLE_NULLS", (long)PDO_ATTR_ORACLE_NULLS, CONST_CS|CONST_PERSISTENT);
-
- REGISTER_LONG_CONSTANT("PDO_ERRMODE_SILENT", (long)PDO_ERRMODE_SILENT, CONST_CS|CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("PDO_ERRMODE_WARNING", (long)PDO_ERRMODE_WARNING, CONST_CS|CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("PDO_ERRMODE_EXCEPTION", (long)PDO_ERRMODE_EXCEPTION, CONST_CS|CONST_PERSISTENT);
-
- REGISTER_LONG_CONSTANT("PDO_CASE_NATURAL", (long)PDO_CASE_NATURAL, CONST_CS|CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("PDO_CASE_LOWER", (long)PDO_CASE_LOWER, CONST_CS|CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("PDO_CASE_UPPER", (long)PDO_CASE_UPPER, CONST_CS|CONST_PERSISTENT);
-
- REGISTER_LONG_CONSTANT("PDO_ERR_NONE", (long)PDO_ERR_NONE, CONST_CS|CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("PDO_ERR_CANT_MAP", (long)PDO_ERR_CANT_MAP, CONST_CS|CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("PDO_ERR_SYNTAX", (long)PDO_ERR_SYNTAX, CONST_CS|CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("PDO_ERR_CONSTRAINT", (long)PDO_ERR_CONSTRAINT, CONST_CS|CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("PDO_ERR_NOT_FOUND", (long)PDO_ERR_NOT_FOUND, CONST_CS|CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("PDO_ERR_ALREADY_EXISTS", (long)PDO_ERR_ALREADY_EXISTS, CONST_CS|CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("PDO_ERR_NOT_IMPLEMENTED", (long)PDO_ERR_NOT_IMPLEMENTED, CONST_CS|CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("PDO_ERR_MISMATCH", (long)PDO_ERR_MISMATCH, CONST_CS|CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("PDO_ERR_TRUNCATED", (long)PDO_ERR_TRUNCATED, CONST_CS|CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("PDO_ERR_DISCONNECTED", (long)PDO_ERR_DISCONNECTED, CONST_CS|CONST_PERSISTENT);
-
- INIT_CLASS_ENTRY(ce, "PDOException", NULL);
- pdo_exception_ce = zend_register_internal_class_ex(&ce, zend_exception_get_default(), NULL TSRMLS_CC);
- zend_declare_property_null(pdo_exception_ce, "errorInfo", sizeof("errorInfo")-1, ZEND_ACC_PUBLIC TSRMLS_CC);
-
- INIT_CLASS_ENTRY(ce, "PDO", pdo_dbh_functions);
- ce.create_object = pdo_dbh_new;
- pdo_dbh_ce = zend_register_internal_class(&ce TSRMLS_CC);
-
- INIT_CLASS_ENTRY(ce, "PDOStatement", pdo_dbstmt_functions);
- ce.create_object = pdo_dbstmt_new;
- pdo_dbstmt_ce = zend_register_internal_class(&ce TSRMLS_CC);
-
- INIT_CLASS_ENTRY(ce, "PDORow", pdo_row_functions);
- ce.create_object = pdo_row_new;
- pdo_row_ce = zend_register_internal_class(&ce TSRMLS_CC);
-
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ PHP_MSHUTDOWN_FUNCTION */
-PHP_MSHUTDOWN_FUNCTION(pdo)
-{
- UNREGISTER_INI_ENTRIES();
- zend_hash_destroy(&pdo_driver_hash);
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ PHP_RINIT_FUNCTION */
-PHP_RINIT_FUNCTION(pdo)
-{
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ PHP_RSHUTDOWN_FUNCTION */
-PHP_RSHUTDOWN_FUNCTION(pdo)
-{
- /* TODO: visit persistent handles: for each persistent statement handle,
- * remove bound parameter associations */
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ PHP_MINFO_FUNCTION */
-PHP_MINFO_FUNCTION(pdo)
-{
- php_info_print_table_start();
- php_info_print_table_header(2, "pdo support", "enabled");
- php_info_print_table_end();
-
- DISPLAY_INI_ENTRIES();
-}
-/* }}} */
-
-/*
- * 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/pdo.php b/ext/pdo/pdo.php
deleted file mode 100755
index 78300d82b5..0000000000
--- a/ext/pdo/pdo.php
+++ /dev/null
@@ -1,35 +0,0 @@
-<?php
-
-//$x = new PDO("oci:dbname=hostname", 'php', 'php');
-$x = new PDO("odbc:ram", 'php', 'php', array(PDO_ATTR_AUTOCOMMIT => 0));
-$stmt = $x->prepare("select NAME, VALUE from test where value like ?");
-
-$the_name = 'bar%';
-$stmt->execute(array($the_name)) or die("failed to execute!");
-$stmt->bindColumn('VALUE', $value);
-
-while ($row = $stmt->fetch()) {
- echo "name=$row[NAME] value=$row[VALUE]\n";
- echo "value is $value\n";
- echo "\n";
-}
-
-echo "Let's try an update\n";
-
-$stmt = $x->prepare("INSERT INTO test (NAME, VALUE) VALUES (:name, :value)");
-
-$stmt->bindParam(":name", $the_name, PDO_PARAM_STR, 32);
-$stmt->bindParam(":value", $the_value, PDO_PARAM_STR, 32);
-
-for ($i = 0; $i < 4; $i++) {
- $the_name = "foo" . rand();
- $the_value = "bar" . rand();
-
- if (!$stmt->execute()) {
- break;
- }
-}
-
-echo "All done\n";
-
-?>
diff --git a/ext/pdo/pdo_dbh.c b/ext/pdo/pdo_dbh.c
deleted file mode 100755
index 23503a7303..0000000000
--- a/ext/pdo/pdo_dbh.c
+++ /dev/null
@@ -1,721 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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> |
- | Marcus Boerger <helly@php.net> |
- | Sterling Hughes <sterling@php.net> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-/* The PDO Database Handle Class */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "php.h"
-#include "php_ini.h"
-#include "ext/standard/info.h"
-#include "php_pdo.h"
-#include "php_pdo_driver.h"
-#include "php_pdo_int.h"
-#include "zend_exceptions.h"
-#include "zend_object_handlers.h"
-
-void pdo_handle_error(pdo_dbh_t *dbh, pdo_stmt_t *stmt TSRMLS_DC)
-{
- enum pdo_error_type *pdo_err = &dbh->error_code;
- const char *msg = "<<Unknown>>";
- char *supp = NULL;
- long native_code = 0;
- char *message = NULL;
- zval *info = NULL;
-
- if (dbh->error_mode == PDO_ERRMODE_SILENT) {
- return;
- }
-
- if (stmt) {
- pdo_err = &stmt->error_code;
- }
-
- switch (*pdo_err) {
- case PDO_ERR_NONE: msg = "No error"; break;
- case PDO_ERR_CANT_MAP: msg = "Consult errorInfo() for more details"; break;
- case PDO_ERR_SYNTAX: msg = "Syntax Error"; break;
- case PDO_ERR_CONSTRAINT:msg = "Constraint violation"; break;
- case PDO_ERR_NOT_FOUND: msg = "Not found"; break;
- case PDO_ERR_ALREADY_EXISTS: msg = "Already exists"; break;
- case PDO_ERR_NOT_IMPLEMENTED: msg = "Not Implemented"; break;
- case PDO_ERR_MISMATCH: msg = "Mismatch"; break;
- case PDO_ERR_TRUNCATED: msg = "Truncated"; break;
- case PDO_ERR_DISCONNECTED: msg = "Disconnected"; break;
- default: msg = "<<Invalid>>";
- }
-
- if (dbh->methods->fetch_err) {
-
- MAKE_STD_ZVAL(info);
- array_init(info);
-
- add_next_index_long(info, *pdo_err);
-
- if (dbh->methods->fetch_err(dbh, stmt, info TSRMLS_CC)) {
- zval **item;
-
- if (SUCCESS == zend_hash_index_find(Z_ARRVAL_P(info), 1, (void**)&item)) {
- native_code = Z_LVAL_PP(item);
- }
-
- if (SUCCESS == zend_hash_index_find(Z_ARRVAL_P(info), 2, (void**)&item)) {
- supp = estrndup(Z_STRVAL_PP(item), Z_STRLEN_PP(item));
- }
- }
- }
-
- if (supp && *pdo_err == PDO_ERR_CANT_MAP) {
- spprintf(&message, 0, "%ld %s", native_code, supp);
- } else if (supp) {
- spprintf(&message, 0, "%s: %ld %s", msg, native_code, supp);
- } else {
- spprintf(&message, 0, "%s", msg);
- }
-
- if (dbh->error_mode == PDO_ERRMODE_WARNING) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", message);
-
- if (info) {
- zval_ptr_dtor(&info);
- }
- } else {
- zval *ex;
- zend_class_entry *def_ex = zend_exception_get_default(), *pdo_ex = php_pdo_get_exception();
-
- MAKE_STD_ZVAL(ex);
- object_init_ex(ex, pdo_ex);
-
- zend_update_property_string(def_ex, ex, "message", sizeof("message")-1, message TSRMLS_CC);
- zend_update_property_long(def_ex, ex, "code", sizeof("code")-1, *pdo_err TSRMLS_CC);
-
- if (info) {
- zend_update_property(pdo_ex, ex, "errorInfo", sizeof("errorInfo")-1, info TSRMLS_CC);
- }
-
- zend_throw_exception_object(ex TSRMLS_CC);
- }
-
- if (message) {
- efree(message);
- }
-
- if (supp) {
- efree(supp);
- }
-}
-
-/* {{{ proto object PDO::__construct(string dsn, string username, string passwd [, array driver_opts])
- */
-static PHP_FUNCTION(dbh_constructor)
-{
- zval *object = getThis();
- pdo_dbh_t *dbh = NULL;
- zend_bool is_persistent = FALSE;
- char *data_source;
- int data_source_len;
- char *colon;
- char *username=NULL, *password=NULL;
- int usernamelen, passwordlen;
- pdo_driver_t *driver = NULL;
- zval *driver_options = NULL;
-
- if (FAILURE == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|ssa!", &data_source, &data_source_len,
- &username, &usernamelen, &password, &passwordlen, &driver_options)) {
- ZVAL_NULL(object);
- return;
- }
-
- /* parse the data source name */
- colon = strchr(data_source, ':');
-
- if (!colon) {
- zend_throw_exception_ex(php_pdo_get_exception(), PDO_ERR_SYNTAX TSRMLS_CC, "invalid data source name");
- ZVAL_NULL(object);
- return;
- }
-
- driver = pdo_find_driver(data_source, colon - data_source);
-
- if (!driver) {
- /* NB: don't want to include the data_source in the error message as
- * it might contain a password */
- zend_throw_exception_ex(php_pdo_get_exception(), PDO_ERR_NOT_FOUND TSRMLS_CC, "could not find driver");
- ZVAL_NULL(object);
- return;
- }
-
- dbh = (pdo_dbh_t *) zend_object_store_get_object(object TSRMLS_CC);
-
- if (dbh == NULL) {
- /* need this check for persistent allocations */
- zend_throw_exception_ex(php_pdo_get_exception(), PDO_ERR_NONE TSRMLS_CC, "out of memory!?");
- }
- dbh->is_persistent = is_persistent;
- dbh->data_source_len = strlen(colon + 1);
- /* when persistent stuff is done, we should check the return values here
- * too */
- dbh->data_source = (const char*)pestrdup(colon + 1, is_persistent);
- dbh->username = username ? pestrdup(username, is_persistent) : NULL;
- dbh->password = password ? pestrdup(password, is_persistent) : NULL;
-
- dbh->auto_commit = pdo_attr_lval(driver_options, PDO_ATTR_AUTOCOMMIT, 1 TSRMLS_CC);
-
- if (driver->db_handle_factory(dbh, driver_options TSRMLS_CC)) {
- /* all set */
-
- if (is_persistent) {
- /* register in the persistent list etc. */
- /* we should also need to replace the object store entry,
- since it was created with emalloc */
- ;
- }
- return;
- }
-
- /* the connection failed; things will tidy up in free_storage */
- /* XXX raise exception */
- ZVAL_NULL(object);
-}
-/* }}} */
-
-/* {{{ proto object PDO::prepare(string statment [, int options [, array driver_options]])
- Prepares a statement for execution and returns a statement object */
-/* TODO: options will be a PDO specific bitmask controlling such things as
- * cursor type. */
-static PHP_METHOD(PDO, prepare)
-{
- pdo_dbh_t *dbh = zend_object_store_get_object(getThis() TSRMLS_CC);
- pdo_stmt_t *stmt;
- char *statement;
- int statement_len;
- zval *driver_options = NULL;
- long options = 0;
-
- if (FAILURE == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|la", &statement,
- &statement_len, &options, &driver_options)) {
- RETURN_FALSE;
- }
-
- PDO_DBH_CLEAR_ERR();
- stmt = ecalloc(1, sizeof(*stmt));
- /* unconditionally keep this for later reference */
- stmt->query_string = estrndup(statement, statement_len);
- stmt->query_stringlen = statement_len;
- if (dbh->methods->preparer(dbh, statement, statement_len, stmt, options, driver_options TSRMLS_CC)) {
- /* prepared; create a statement object for PHP land to access it */
- Z_TYPE_P(return_value) = IS_OBJECT;
- Z_OBJ_HANDLE_P(return_value) = zend_objects_store_put(stmt, NULL, pdo_dbstmt_free_storage, NULL TSRMLS_CC);
- Z_OBJ_HT_P(return_value) = &pdo_dbstmt_object_handlers;
-
- /* give it a reference to me */
- stmt->database_object_handle = *getThis();
- zend_objects_store_add_ref(getThis() TSRMLS_CC);
- stmt->dbh = dbh;
-
- /* we haven't created a lazy object yet */
- ZVAL_NULL(&stmt->lazy_object_ref);
-
- stmt->refcount = 1;
- return;
- }
- efree(stmt);
- PDO_HANDLE_DBH_ERR();
- RETURN_FALSE;
-}
-/* }}} */
-
-/* {{{ proto bool PDO::beginTransaction()
- Initiates a transaction */
-static PHP_METHOD(PDO, beginTransaction)
-{
- pdo_dbh_t *dbh = zend_object_store_get_object(getThis() TSRMLS_CC);
-
- if (dbh->in_txn) {
- zend_throw_exception_ex(php_pdo_get_exception(), PDO_ERR_NONE TSRMLS_CC, "There is already an active transaction");
- RETURN_FALSE;
- }
-
- if (!dbh->methods->begin) {
- /* TODO: this should be an exception; see the auto-commit mode
- * comments below */
- zend_throw_exception_ex(php_pdo_get_exception(), PDO_ERR_NONE TSRMLS_CC, "This driver doesn't support transactions");
- RETURN_FALSE;
- }
-
- if (dbh->methods->begin(dbh TSRMLS_CC)) {
- dbh->in_txn = 1;
- RETURN_TRUE;
- }
-
- PDO_HANDLE_DBH_ERR();
- RETURN_FALSE;
-}
-/* }}} */
-
-/* {{{ proto bool PDO::commit()
- Commit a transaction */
-static PHP_METHOD(PDO, commit)
-{
- pdo_dbh_t *dbh = zend_object_store_get_object(getThis() TSRMLS_CC);
-
- if (!dbh->in_txn) {
- zend_throw_exception_ex(php_pdo_get_exception(), PDO_ERR_NONE TSRMLS_CC, "There is no active transaction");
- RETURN_FALSE;
- }
-
- if (dbh->methods->commit(dbh TSRMLS_CC)) {
- dbh->in_txn = 0;
- RETURN_TRUE;
- }
-
- PDO_HANDLE_DBH_ERR();
- RETURN_FALSE;
-}
-/* }}} */
-
-/* {{{ proto bool PDO::rollBack()
- roll back a transaction */
-static PHP_METHOD(PDO, rollBack)
-{
- pdo_dbh_t *dbh = zend_object_store_get_object(getThis() TSRMLS_CC);
-
- if (!dbh->in_txn) {
- zend_throw_exception_ex(php_pdo_get_exception(), PDO_ERR_NONE TSRMLS_CC, "There is no active transaction");
- RETURN_FALSE;
- }
-
- if (dbh->methods->rollback(dbh TSRMLS_CC)) {
- dbh->in_txn = 0;
- RETURN_TRUE;
- }
-
- PDO_HANDLE_DBH_ERR();
- RETURN_FALSE;
-}
-/* }}} */
-
-/* {{{ proto bool PDO::setAttribute(long attribute, mixed value)
- Set an attribute */
-static PHP_METHOD(PDO, setAttribute)
-{
- pdo_dbh_t *dbh = zend_object_store_get_object(getThis() TSRMLS_CC);
- long attr;
- zval *value = NULL;
-
- if (FAILURE == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "lz!", &attr, &value)) {
- RETURN_FALSE;
- }
-
- switch (attr) {
- case PDO_ATTR_ERRMODE:
- convert_to_long(value);
- switch (Z_LVAL_P(value)) {
- case PDO_ERRMODE_SILENT:
- case PDO_ERRMODE_WARNING:
- case PDO_ERRMODE_EXCEPTION:
- dbh->error_mode = Z_LVAL_P(value);
- RETURN_TRUE;
- default:
- zend_throw_exception_ex(php_pdo_get_exception(), PDO_ERR_SYNTAX TSRMLS_CC, "Error mode %d is invalid", Z_LVAL_P(value));
- }
- RETURN_FALSE;
-
- case PDO_ATTR_CASE:
- convert_to_long(value);
- switch (Z_LVAL_P(value)) {
- case PDO_CASE_NATURAL:
- case PDO_CASE_UPPER:
- case PDO_CASE_LOWER:
- dbh->desired_case = Z_LVAL_P(value);
- RETURN_TRUE;
- default:
- zend_throw_exception_ex(php_pdo_get_exception(), PDO_ERR_SYNTAX TSRMLS_CC, "Case folding mode %d is invalid", Z_LVAL_P(value));
- }
- RETURN_FALSE;
-
- case PDO_ATTR_ORACLE_NULLS:
- convert_to_long(value);
- dbh->oracle_nulls = Z_LVAL_P(value) ? 1 : 0;
- RETURN_TRUE;
-
- default:
- ;
- }
-
- if (!dbh->methods->set_attribute) {
- goto fail;
- }
-
- PDO_DBH_CLEAR_ERR();
- if (dbh->methods->set_attribute(dbh, attr, value TSRMLS_CC)) {
- RETURN_TRUE;
- }
-
-fail:
- if (attr == PDO_ATTR_AUTOCOMMIT) {
- zend_throw_exception_ex(php_pdo_get_exception(), PDO_ERR_NONE TSRMLS_CC, "The auto-commit mode cannot be changed for this driver");
- } else if (!dbh->methods->set_attribute) {
- /* XXX: do something better here */
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "This driver doesn't support setting attributes");
- } else {
- PDO_HANDLE_DBH_ERR();
- }
- RETURN_FALSE;
-}
-/* }}} */
-
-/* {{{ proto mixed PDO::getAttribute(long attribute)
- Get an attribute */
-static PHP_METHOD(PDO, getAttribute)
-{
- pdo_dbh_t *dbh = zend_object_store_get_object(getThis() TSRMLS_CC);
- long attr;
-
- if (FAILURE == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &attr)) {
- RETURN_FALSE;
- }
-
- if (!dbh->methods->get_attribute) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "This driver doesn't support fetching attributes");
- RETURN_FALSE;
- }
-
- PDO_DBH_CLEAR_ERR();
- switch (dbh->methods->get_attribute(dbh, attr, return_value TSRMLS_CC)) {
- case -1:
- PDO_HANDLE_DBH_ERR();
- RETURN_FALSE;
-
- case 0:
- /* XXX: should do something better here */
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "This driver doesn't support fetching %ld attribute", attr);
- break;
-
- default:
- return;
- }
-}
-/* }}} */
-
-/* {{{ proto long PDO::exec(string query)
- Execute a query that does not return a row set, returning the number of affected rows */
-static PHP_METHOD(PDO, exec)
-{
- pdo_dbh_t *dbh = zend_object_store_get_object(getThis() TSRMLS_CC);
- char *statement;
- int statement_len;
- long ret;
-
- if (FAILURE == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &statement, &statement_len)) {
- RETURN_FALSE;
- }
-
- if (!statement_len) {
- RETURN_FALSE;
- }
- PDO_DBH_CLEAR_ERR();
- ret = dbh->methods->doer(dbh, statement, statement_len TSRMLS_CC);
- if(ret == -1) {
- PDO_HANDLE_DBH_ERR();
- RETURN_FALSE;
- } else {
- RETURN_LONG(ret);
- }
-}
-/* }}} */
-
-
-/* {{{ proto int PDO::lastInsertId()
- Returns the number id of rows that we affected by the last call to PDO::exec(). Not always meaningful. */
-static PHP_METHOD(PDO, lastInsertId)
-{
- pdo_dbh_t *dbh = zend_object_store_get_object(getThis() TSRMLS_CC);
-
- if (ZEND_NUM_ARGS()) {
- RETURN_FALSE;
- }
-
- PDO_DBH_CLEAR_ERR();
- if (!dbh->methods->last_id) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "This driver does not support last inserted id retrieval.");
- } else {
- RETURN_LONG(dbh->methods->last_id(dbh TSRMLS_CC));
- }
-}
-/* }}} */
-
-/* {{{ proto int PDO::errorCode()
- Fetch the error code associated with the last operation on the database handle */
-static PHP_METHOD(PDO, errorCode)
-{
- pdo_dbh_t *dbh = zend_object_store_get_object(getThis() TSRMLS_CC);
-
- if (ZEND_NUM_ARGS()) {
- RETURN_FALSE;
- }
-
- RETURN_LONG(dbh->error_code);
-}
-/* }}} */
-
-/* {{{ proto int PDO::errorInfo()
- Fetch extended error information associated with the last operation on the database handle */
-static PHP_METHOD(PDO, errorInfo)
-{
- pdo_dbh_t *dbh = zend_object_store_get_object(getThis() TSRMLS_CC);
-
- if (ZEND_NUM_ARGS()) {
- RETURN_FALSE;
- }
-
- array_init(return_value);
- add_next_index_long(return_value, dbh->error_code);
-
- if (dbh->methods->fetch_err) {
- dbh->methods->fetch_err(dbh, NULL, return_value TSRMLS_CC);
- }
-}
-/* }}} */
-
-
-function_entry pdo_dbh_functions[] = {
- PHP_ME_MAPPING(__construct, dbh_constructor, NULL)
- PHP_ME(PDO, prepare, NULL, ZEND_ACC_PUBLIC)
- PHP_ME(PDO, beginTransaction,NULL, ZEND_ACC_PUBLIC)
- PHP_ME(PDO, commit, NULL, ZEND_ACC_PUBLIC)
- PHP_ME(PDO, rollBack, NULL, ZEND_ACC_PUBLIC)
- PHP_ME(PDO, setAttribute, NULL, ZEND_ACC_PUBLIC)
- PHP_ME(PDO, exec, NULL, ZEND_ACC_PUBLIC)
- PHP_ME(PDO, lastInsertId, NULL, ZEND_ACC_PUBLIC)
- PHP_ME(PDO, errorCode, NULL, ZEND_ACC_PUBLIC)
- PHP_ME(PDO, errorInfo, NULL, ZEND_ACC_PUBLIC)
- PHP_ME(PDO, getAttribute, NULL, ZEND_ACC_PUBLIC)
-
- {NULL, NULL, NULL}
-};
-
-/* {{{ overloaded object handlers for PDO class */
-static zval *dbh_prop_read(zval *object, zval *member, int type TSRMLS_DC)
-{
- zval *return_value;
-
- MAKE_STD_ZVAL(return_value);
- ZVAL_NULL(return_value);
-
- return return_value;
-}
-
-static void dbh_prop_write(zval *object, zval *member, zval *value TSRMLS_DC)
-{
- return;
-}
-
-static zval *dbh_read_dim(zval *object, zval *offset, int type TSRMLS_DC)
-{
- zval *return_value;
-
- MAKE_STD_ZVAL(return_value);
- ZVAL_NULL(return_value);
-
- return return_value;
-}
-
-static void dbh_write_dim(zval *object, zval *offset, zval *value TSRMLS_DC)
-{
- return;
-}
-
-static int dbh_prop_exists(zval *object, zval *member, int check_empty TSRMLS_DC)
-{
- return 0;
-}
-
-static int dbh_dim_exists(zval *object, zval *member, int check_empty TSRMLS_DC)
-{
- return 0;
-}
-
-static void dbh_prop_delete(zval *object, zval *offset TSRMLS_DC)
-{
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Cannot delete properties from a PDO DBH");
-}
-
-static void dbh_dim_delete(zval *object, zval *offset TSRMLS_DC)
-{
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Cannot delete dimensions from a PDO DBH");
-}
-
-static HashTable *dbh_get_properties(zval *object TSRMLS_DC)
-{
- return NULL;
-}
-
-static union _zend_function *dbh_method_get(zval *object, char *method_name, int method_len TSRMLS_DC)
-{
- zend_function *fbc;
- char *lc_method_name;
- pdo_dbh_t *dbh = zend_object_store_get_object(object TSRMLS_CC);
-
- lc_method_name = emalloc(method_len + 1);
- zend_str_tolower_copy(lc_method_name, method_name, method_len);
-
- if (zend_hash_find(&dbh->ce->function_table, lc_method_name, method_len+1, (void**)&fbc) == FAILURE) {
- efree(lc_method_name);
- return NULL;
- }
-
- efree(lc_method_name);
- return fbc;
-}
-
-static int dbh_call_method(char *method, INTERNAL_FUNCTION_PARAMETERS)
-{
- return FAILURE;
-}
-
-
-static union _zend_function *dbh_get_ctor(zval *object TSRMLS_DC)
-{
- static zend_internal_function ctor = {0};
- ctor.type = ZEND_INTERNAL_FUNCTION;
- ctor.function_name = "__construct";
- ctor.scope = pdo_dbh_ce;
- ctor.handler = ZEND_FN(dbh_constructor);
-
- return (union _zend_function*)&ctor;
-}
-
-static zend_class_entry *dbh_get_ce(zval *object TSRMLS_DC)
-{
- pdo_dbh_t *dbh = zend_object_store_get_object(object TSRMLS_CC);
- return dbh->ce;
-}
-
-static int dbh_get_classname(zval *object, char **class_name, zend_uint *class_name_len, int parent TSRMLS_DC)
-{
- pdo_dbh_t *dbh = zend_object_store_get_object(object TSRMLS_CC);
-
- *class_name = estrndup("PDO", sizeof("PDO")-1);
- *class_name_len = sizeof("PDO")-1;
- return 0;
-}
-
-static int dbh_compare(zval *object1, zval *object2 TSRMLS_DC)
-{
- return -1;
-}
-
-static zend_object_handlers pdo_dbh_object_handlers = {
- ZEND_OBJECTS_STORE_HANDLERS,
- dbh_prop_read,
- dbh_prop_write,
- dbh_read_dim,
- dbh_write_dim,
- NULL,
- NULL,
- NULL,
- dbh_prop_exists,
- dbh_prop_delete,
- dbh_dim_exists,
- dbh_dim_delete,
- dbh_get_properties,
- dbh_method_get,
- dbh_call_method,
- dbh_get_ctor,
- dbh_get_ce,
- dbh_get_classname,
- dbh_compare,
- NULL, /* cast */
- NULL
-};
-
-
-static void pdo_dbh_free_storage(zend_object *object TSRMLS_DC)
-{
- pdo_dbh_t *dbh = (pdo_dbh_t*)object;
-
- if (!dbh) {
- return;
- }
-
- if (dbh->is_persistent) {
- /* XXX: don't really free it, just delete the rsrc id */
- return;
- }
- if(dbh->properties) {
- zend_hash_destroy(dbh->properties);
- /* XXX: this should be probably changed to pefree() when persistent
- * connections will be properly implemented
- * */
- efree(dbh->properties);
- }
- if (dbh->methods) {
- dbh->methods->closer(dbh TSRMLS_CC);
- }
-
- if (dbh->data_source) {
- pefree((char *)dbh->data_source, dbh->is_persistent);
- }
- if (dbh->username) {
- pefree(dbh->username, dbh->is_persistent);
- }
- if (dbh->password) {
- pefree(dbh->password, dbh->is_persistent);
- }
-
- pefree(dbh, dbh->is_persistent);
-}
-
-zend_object_value pdo_dbh_new(zend_class_entry *ce TSRMLS_DC)
-{
- zend_object_value retval;
- pdo_dbh_t *dbh;
-
- dbh = emalloc(sizeof(*dbh));
- memset(dbh, 0, sizeof(*dbh));
- dbh->ce = ce;
- ALLOC_HASHTABLE(dbh->properties);
- zend_hash_init(dbh->properties, 0, NULL, ZVAL_PTR_DTOR, 0);
-
- retval.handle = zend_objects_store_put(dbh, NULL, pdo_dbh_free_storage, NULL TSRMLS_CC);
- if(ce == pdo_dbh_ce) {
- retval.handlers = &pdo_dbh_object_handlers;
- }
- else {
- retval.handlers = &std_object_handlers;
- }
- return retval;
-}
-
-/* }}} */
-
-/*
- * 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/pdo_sql_parser.c b/ext/pdo/pdo_sql_parser.c
deleted file mode 100644
index 5c4ee0ac06..0000000000
--- a/ext/pdo/pdo_sql_parser.c
+++ /dev/null
@@ -1,317 +0,0 @@
-/* Generated by re2c 0.5 on Fri May 21 17:33:58 2004 */
-#line 1 "/home/george/src/pecl/pdo/pdo_sql_parser.re"
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: George Schlossnagle <george@omniti.com> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#include "php.h"
-#include "php_pdo_driver.h"
-
-#define PDO_PARSER_TEXT 1
-#define PDO_PARSER_BIND 2
-#define PDO_PARSER_BIND_POS 3
-#define PDO_PARSER_EOI 4
-
-#define RET(i) {s->cur = cursor; return i; }
-
-#define YYCTYPE char
-#define YYCURSOR cursor
-#define YYLIMIT s->lim
-#define YYMARKER s->ptr
-#define YYFILL(n)
-
-typedef struct Scanner {
- char *lim, *ptr, *cur, *tok;
-} Scanner;
-
-static int scan(Scanner *s)
-{
- char *cursor = s->cur;
- std:
- s->tok = cursor;
- #line 54
-
-
- {
- YYCTYPE yych;
- unsigned int yyaccept;
- static unsigned char yybm[] = {
- 0, 168, 168, 168, 168, 168, 168, 168,
- 168, 168, 168, 168, 168, 168, 168, 168,
- 168, 168, 168, 168, 168, 168, 168, 168,
- 168, 168, 168, 168, 168, 168, 168, 168,
- 168, 168, 0, 168, 168, 168, 168, 192,
- 168, 168, 168, 168, 168, 168, 168, 168,
- 184, 184, 184, 184, 184, 184, 184, 184,
- 184, 184, 160, 168, 168, 168, 168, 160,
- 168, 184, 184, 184, 184, 184, 184, 184,
- 184, 184, 184, 184, 184, 184, 184, 184,
- 184, 184, 184, 184, 184, 184, 184, 184,
- 184, 184, 184, 168, 8, 168, 168, 184,
- 168, 184, 184, 184, 184, 184, 184, 184,
- 184, 184, 184, 184, 184, 184, 184, 184,
- 184, 184, 184, 184, 184, 184, 184, 184,
- 184, 184, 184, 168, 168, 168, 168, 168,
- 168, 168, 168, 168, 168, 168, 168, 168,
- 168, 168, 168, 168, 168, 168, 168, 168,
- 168, 168, 168, 168, 168, 168, 168, 168,
- 168, 168, 168, 168, 168, 168, 168, 168,
- 168, 168, 168, 168, 168, 168, 168, 168,
- 168, 168, 168, 168, 168, 168, 168, 168,
- 168, 168, 168, 168, 168, 168, 168, 168,
- 168, 168, 168, 168, 168, 168, 168, 168,
- 168, 168, 168, 168, 168, 168, 168, 168,
- 168, 168, 168, 168, 168, 168, 168, 168,
- 168, 168, 168, 168, 168, 168, 168, 168,
- 168, 168, 168, 168, 168, 168, 168, 168,
- 168, 168, 168, 168, 168, 168, 168, 168,
- 168, 168, 168, 168, 168, 168, 168, 168,
- 168, 168, 168, 168, 168, 168, 168, 168,
- 168, 168, 168, 168, 168, 168, 168, 168,
- };
- goto yy0;
-yy1: ++YYCURSOR;
-yy0:
- if((YYLIMIT - YYCURSOR) < 2) YYFILL(2);
- yych = *YYCURSOR;
- if(yybm[0+yych] & 8) goto yy8;
- if(yych <= '\000') goto yy11;
- if(yych <= '&') goto yy2;
- if(yych <= '\'') goto yy4;
- if(yych <= '>') goto yy5;
- goto yy6;
-yy2: yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych >= '\001') goto yy24;
-yy3:
-#line 61
- { RET(PDO_PARSER_TEXT); }
-yy4: yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '\000') goto yy3;
- if(yych == '"') goto yy3;
- goto yy17;
-yy5: yych = *++YYCURSOR;
- if(yybm[0+yych] & 16) goto yy13;
- goto yy3;
-yy6: yych = *++YYCURSOR;
-yy7:
-#line 60
- { RET(PDO_PARSER_BIND_POS); }
-yy8: ++YYCURSOR;
- if(YYLIMIT == YYCURSOR) YYFILL(1);
- yych = *YYCURSOR;
-yy9: if(yybm[0+yych] & 8) goto yy8;
-yy10:
-#line 62
- { RET(PDO_PARSER_TEXT); }
-yy11: yych = *++YYCURSOR;
-yy12:
-#line 63
- { RET(PDO_PARSER_EOI); }
-yy13: ++YYCURSOR;
- if(YYLIMIT == YYCURSOR) YYFILL(1);
- yych = *YYCURSOR;
-yy14: if(yybm[0+yych] & 16) goto yy13;
-yy15:
-#line 59
- { RET(PDO_PARSER_BIND); }
-yy16: ++YYCURSOR;
- if(YYLIMIT == YYCURSOR) YYFILL(1);
- yych = *YYCURSOR;
-yy17: if(yybm[0+yych] & 32) goto yy16;
- if(yych <= '&') goto yy18;
- if(yych <= '\'') goto yy19;
- goto yy22;
-yy18: YYCURSOR = YYMARKER;
- switch(yyaccept){
- case 1: goto yy21;
- case 0: goto yy3;
- }
-yy19: yyaccept = 1;
- YYMARKER = ++YYCURSOR;
- if(YYLIMIT == YYCURSOR) YYFILL(1);
- yych = *YYCURSOR;
-yy20: if(yybm[0+yych] & 32) goto yy16;
- if(yych <= '&') goto yy21;
- if(yych <= '\'') goto yy19;
- goto yy22;
-yy21:
-#line 58
- { RET(PDO_PARSER_TEXT); }
-yy22: ++YYCURSOR;
- if(YYLIMIT == YYCURSOR) YYFILL(1);
- yych = *YYCURSOR;
- if(yych == '\'') goto yy16;
- goto yy18;
-yy23: ++YYCURSOR;
- if(YYLIMIT == YYCURSOR) YYFILL(1);
- yych = *YYCURSOR;
-yy24: if(yybm[0+yych] & 128) goto yy23;
- if(yych <= '\000') goto yy18;
- if(yych <= '[') goto yy26;
-yy25: ++YYCURSOR;
- if(YYLIMIT == YYCURSOR) YYFILL(1);
- yych = *YYCURSOR;
- if(yych == '"') goto yy23;
- goto yy18;
-yy26: yych = *++YYCURSOR;
-yy27:
-#line 57
- { RET(PDO_PARSER_TEXT); }
-}
-#line 64
-
-}
-
-int pdo_parse_params(pdo_stmt_t *stmt, char *inquery, int inquery_len, char **outquery,
- int *outquery_len TSRMLS_DC)
-{
- Scanner s;
- char *ptr;
- int t;
- int bindno = 0;
- int newbuffer_len;
- int padding;
- HashTable *params = stmt->bound_params;
- struct pdo_bound_param_data *param;
- /* allocate buffer for query with expanded binds, ptr is our writing pointer */
- newbuffer_len = inquery_len;
-
- /* calculate the possible padding factor due to quoting */
- if(stmt->dbh->max_escaped_char_length) {
- padding = stmt->dbh->max_escaped_char_length;
- } else {
- padding = 3;
- }
- if(params) {
- zend_hash_internal_pointer_reset(params);
- while (SUCCESS == zend_hash_get_current_data(params, (void**)&param)) {
- if(param->parameter) {
- convert_to_string(param->parameter);
- /* accomodate a string that needs to be fully quoted
- bind placeholders are at least 2 characters, so
- the accomodate their own "'s
- */
- newbuffer_len += padding * Z_STRLEN_P(param->parameter);
- }
- zend_hash_move_forward(params);
- }
- }
- *outquery = (char *) emalloc(newbuffer_len + 1);
- *outquery_len = 0;
-
- ptr = *outquery;
- s.cur = inquery;
- s.lim = inquery + inquery_len;
- while((t = scan(&s)) != PDO_PARSER_EOI) {
- if(t == PDO_PARSER_TEXT) {
- memcpy(ptr, s.tok, s.cur - s.tok);
- ptr += (s.cur - s.tok);
- *outquery_len += (s.cur - s.tok);
- }
- else if(t == PDO_PARSER_BIND) {
- if(!params) {
- /* error */
- efree(*outquery);
- *outquery = NULL;
- return (int) (s.cur - inquery);
- }
- /* lookup bind first via hash and then index */
- /* stupid keys need to be null-terminated, even though we know their length */
- if((SUCCESS == zend_hash_find(params, s.tok, s.cur-s.tok,(void **)&param))
- ||
- (SUCCESS == zend_hash_index_find(params, bindno, (void **)&param)))
- {
- char *quotedstr;
- int quotedstrlen;
- /* restore the in-string key, doesn't need null-termination here */
- /* currently everything is a string here */
-
- /* quote the bind value if necessary */
- if(stmt->dbh->methods->quoter(stmt->dbh, Z_STRVAL_P(param->parameter),
- Z_STRLEN_P(param->parameter), &quotedstr, &quotedstrlen TSRMLS_CC))
- {
- memcpy(ptr, quotedstr, quotedstrlen);
- ptr += quotedstrlen;
- *outquery_len += quotedstrlen;
- efree(quotedstr);
- } else {
- memcpy(ptr, Z_STRVAL_P(param->parameter), Z_STRLEN_P(param->parameter));
- ptr += Z_STRLEN_P(param->parameter);
- *outquery_len += (Z_STRLEN_P(param->parameter));
- }
- }
- else {
- /* error and cleanup */
- efree(*outquery);
- *outquery = NULL;
- return (int) (s.cur - inquery);
- }
- bindno++;
- }
- else if(t == PDO_PARSER_BIND_POS) {
- if(!params) {
- /* error */
- efree(*outquery);
- *outquery = NULL;
- return (int) (s.cur - inquery);
- }
- /* lookup bind by index */
- if(SUCCESS == zend_hash_index_find(params, bindno, (void **)&param))
- {
- char *quotedstr;
- int quotedstrlen;
- /* currently everything is a string here */
-
- /* quote the bind value if necessary */
- if(stmt->dbh->methods->quoter(stmt->dbh, Z_STRVAL_P(param->parameter),
- Z_STRLEN_P(param->parameter), &quotedstr, &quotedstrlen TSRMLS_CC))
- {
- memcpy(ptr, quotedstr, quotedstrlen);
- ptr += quotedstrlen;
- *outquery_len += quotedstrlen;
- efree(quotedstr);
- } else {
- memcpy(ptr, Z_STRVAL_P(param->parameter), Z_STRLEN_P(param->parameter));
- ptr += Z_STRLEN_P(param->parameter);
- *outquery_len += (Z_STRLEN_P(param->parameter));
- }
- }
- else {
- /* error and cleanup */
- efree(*outquery);
- *outquery = NULL;
- return (int) (s.cur - inquery);
- }
- bindno++;
- }
- }
- *ptr = '\0';
- return 0;
-}
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- * vim600: noet sw=4 ts=4 fdm=marker ft=c
- * vim<600: noet sw=4 ts=4
- */
diff --git a/ext/pdo/pdo_sql_parser.re b/ext/pdo/pdo_sql_parser.re
deleted file mode 100644
index 412f70ae06..0000000000
--- a/ext/pdo/pdo_sql_parser.re
+++ /dev/null
@@ -1,201 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: George Schlossnagle <george@omniti.com> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#include "php.h"
-#include "php_pdo_driver.h"
-
-#define PDO_PARSER_TEXT 1
-#define PDO_PARSER_BIND 2
-#define PDO_PARSER_BIND_POS 3
-#define PDO_PARSER_EOI 4
-
-#define RET(i) {s->cur = cursor; return i; }
-
-#define YYCTYPE char
-#define YYCURSOR cursor
-#define YYLIMIT s->lim
-#define YYMARKER s->ptr
-#define YYFILL(n)
-
-typedef struct Scanner {
- char *lim, *ptr, *cur, *tok;
-} Scanner;
-
-static int scan(Scanner *s)
-{
- char *cursor = s->cur;
- std:
- s->tok = cursor;
- /*!re2c
- BINDCHR = [:][a-zA-Z0-9_]+;
- QUESTION = [?];
- SPECIALS = [:?"'];
- ESCQQ = [\\]["];
- ESCQ = [\\]['];
- EOF = [\000];
- ANYNOEOF = [\001-\377];
- */
-
- /*!re2c
- (["] (ESCQQ|ANYNOEOF\[\\"])* ["]) { RET(PDO_PARSER_TEXT); }
- (['] (ESCQ|ANYNOEOF\[\\"])* [']) { RET(PDO_PARSER_TEXT); }
- BINDCHR { RET(PDO_PARSER_BIND); }
- QUESTION { RET(PDO_PARSER_BIND_POS); }
- SPECIALS { RET(PDO_PARSER_TEXT); }
- (ANYNOEOF\SPECIALS)+ { RET(PDO_PARSER_TEXT); }
- EOF { RET(PDO_PARSER_EOI); }
- */
-}
-
-int pdo_parse_params(pdo_stmt_t *stmt, char *inquery, int inquery_len, char **outquery,
- int *outquery_len TSRMLS_DC)
-{
- Scanner s;
- char *ptr;
- int t;
- int bindno = 0;
- int newbuffer_len;
- int padding;
- HashTable *params = stmt->bound_params;
- struct pdo_bound_param_data *param;
- /* allocate buffer for query with expanded binds, ptr is our writing pointer */
- newbuffer_len = inquery_len;
-
- /* calculate the possible padding factor due to quoting */
- if(stmt->dbh->max_escaped_char_length) {
- padding = stmt->dbh->max_escaped_char_length;
- } else {
- padding = 3;
- }
- if(params) {
- zend_hash_internal_pointer_reset(params);
- while (SUCCESS == zend_hash_get_current_data(params, (void**)&param)) {
- if(param->parameter) {
- convert_to_string(param->parameter);
- /* accomodate a string that needs to be fully quoted
- bind placeholders are at least 2 characters, so
- the accomodate their own "'s
- */
- newbuffer_len += padding * Z_STRLEN_P(param->parameter);
- }
- zend_hash_move_forward(params);
- }
- }
- *outquery = (char *) emalloc(newbuffer_len + 1);
- *outquery_len = 0;
-
- ptr = *outquery;
- s.cur = inquery;
- s.lim = inquery + inquery_len;
- while((t = scan(&s)) != PDO_PARSER_EOI) {
- if(t == PDO_PARSER_TEXT) {
- memcpy(ptr, s.tok, s.cur - s.tok);
- ptr += (s.cur - s.tok);
- *outquery_len += (s.cur - s.tok);
- }
- else if(t == PDO_PARSER_BIND) {
- if(!params) {
- /* error */
- efree(*outquery);
- *outquery = NULL;
- return (int) (s.cur - inquery);
- }
- /* lookup bind first via hash and then index */
- /* stupid keys need to be null-terminated, even though we know their length */
- if((SUCCESS == zend_hash_find(params, s.tok, s.cur-s.tok,(void **)&param))
- ||
- (SUCCESS == zend_hash_index_find(params, bindno, (void **)&param)))
- {
- char *quotedstr;
- int quotedstrlen;
- /* restore the in-string key, doesn't need null-termination here */
- /* currently everything is a string here */
-
- /* quote the bind value if necessary */
- if(stmt->dbh->methods->quoter(stmt->dbh, Z_STRVAL_P(param->parameter),
- Z_STRLEN_P(param->parameter), &quotedstr, &quotedstrlen TSRMLS_CC))
- {
- memcpy(ptr, quotedstr, quotedstrlen);
- ptr += quotedstrlen;
- *outquery_len += quotedstrlen;
- efree(quotedstr);
- } else {
- memcpy(ptr, Z_STRVAL_P(param->parameter), Z_STRLEN_P(param->parameter));
- ptr += Z_STRLEN_P(param->parameter);
- *outquery_len += (Z_STRLEN_P(param->parameter));
- }
- }
- else {
- /* error and cleanup */
- efree(*outquery);
- *outquery = NULL;
- return (int) (s.cur - inquery);
- }
- bindno++;
- }
- else if(t == PDO_PARSER_BIND_POS) {
- if(!params) {
- /* error */
- efree(*outquery);
- *outquery = NULL;
- return (int) (s.cur - inquery);
- }
- /* lookup bind by index */
- if(SUCCESS == zend_hash_index_find(params, bindno, (void **)&param))
- {
- char *quotedstr;
- int quotedstrlen;
- /* currently everything is a string here */
-
- /* quote the bind value if necessary */
- if(stmt->dbh->methods->quoter(stmt->dbh, Z_STRVAL_P(param->parameter),
- Z_STRLEN_P(param->parameter), &quotedstr, &quotedstrlen TSRMLS_CC))
- {
- memcpy(ptr, quotedstr, quotedstrlen);
- ptr += quotedstrlen;
- *outquery_len += quotedstrlen;
- efree(quotedstr);
- } else {
- memcpy(ptr, Z_STRVAL_P(param->parameter), Z_STRLEN_P(param->parameter));
- ptr += Z_STRLEN_P(param->parameter);
- *outquery_len += (Z_STRLEN_P(param->parameter));
- }
- }
- else {
- /* error and cleanup */
- efree(*outquery);
- *outquery = NULL;
- return (int) (s.cur - inquery);
- }
- bindno++;
- }
- }
- *ptr = '\0';
- return 0;
-}
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- * vim600: noet sw=4 ts=4 fdm=marker ft=c
- * vim<600: noet sw=4 ts=4
- */
diff --git a/ext/pdo/pdo_stmt.c b/ext/pdo/pdo_stmt.c
deleted file mode 100755
index 745c3455b5..0000000000
--- a/ext/pdo/pdo_stmt.c
+++ /dev/null
@@ -1,1111 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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> |
- | Marcus Boerger <helly@php.net> |
- | Sterling Hughes <sterling@php.net> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-/* The PDO Statement Handle Class */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "php.h"
-#include "php_ini.h"
-#include "ext/standard/info.h"
-#include "php_pdo.h"
-#include "php_pdo_driver.h"
-#include "php_pdo_int.h"
-#include "php_pdo_sql_parser.h"
-#include "zend_exceptions.h"
-
-#if COMPILE_DL_PDO
-/* {{{ content from zend_arg_defs.c:
- * since it is a .c file, it won't be installed for use by PECL extensions, so we include it here. */
-ZEND_BEGIN_ARG_INFO(first_arg_force_ref, 0)
- ZEND_ARG_PASS_INFO(1)
-ZEND_END_ARG_INFO();
-
-
-ZEND_BEGIN_ARG_INFO(second_arg_force_ref, 0)
- ZEND_ARG_PASS_INFO(0)
- ZEND_ARG_PASS_INFO(1)
-ZEND_END_ARG_INFO();
-
-ZEND_BEGIN_ARG_INFO(third_arg_force_ref, 0)
- ZEND_ARG_PASS_INFO(0)
- ZEND_ARG_PASS_INFO(0)
- ZEND_ARG_PASS_INFO(1)
-ZEND_END_ARG_INFO();
-
-
-ZEND_BEGIN_ARG_INFO(fourth_arg_force_ref, 0)
- ZEND_ARG_PASS_INFO(0)
- ZEND_ARG_PASS_INFO(0)
- ZEND_ARG_PASS_INFO(0)
- ZEND_ARG_PASS_INFO(1)
-ZEND_END_ARG_INFO();
-
-ZEND_BEGIN_ARG_INFO(all_args_by_ref, 1)
-ZEND_END_ARG_INFO();
-/* }}} */
-#endif
-
-static PHP_FUNCTION(dbstmt_constructor) /* {{{ */
-{
- php_error_docref(NULL TSRMLS_CC, E_ERROR, "You should not create a PDOStatement manually");
-}
-/* }}} */
-
-/* trigger callback hook for parameters */
-static int dispatch_param_event(pdo_stmt_t *stmt, enum pdo_param_event event_type TSRMLS_DC)
-{
- int ret = 1, is_param = 1;
- struct pdo_bound_param_data *param;
- HashTable *ht;
-
- if (!stmt->methods->param_hook) {
- return 1;
- }
-
- ht = stmt->bound_params;
-
-iterate:
- if (ht) {
- zend_hash_internal_pointer_reset(ht);
- while (SUCCESS == zend_hash_get_current_data(ht, (void**)&param)) {
-
- if (!stmt->methods->param_hook(stmt, param, event_type TSRMLS_CC)) {
- ret = 0;
- break;
- }
-
- zend_hash_move_forward(ht);
- }
- }
- if (ret && is_param) {
- ht = stmt->bound_columns;
- is_param = 0;
- goto iterate;
- }
-
- return ret;
-}
-
-static int describe_columns(pdo_stmt_t *stmt TSRMLS_DC)
-{
- int col;
-
- stmt->columns = ecalloc(stmt->column_count, sizeof(struct pdo_column_data));
-
- for (col = 0; col < stmt->column_count; col++) {
- if (!stmt->methods->describer(stmt, col TSRMLS_CC)) {
- return 0;
- }
-
- /* if we are applying case conversions on column names, do so now */
- if (stmt->dbh->native_case != stmt->dbh->desired_case && stmt->dbh->desired_case != PDO_CASE_NATURAL) {
- char *s = stmt->columns[col].name;
-
- switch (stmt->dbh->desired_case) {
- case PDO_CASE_UPPER:
- while (*s != '\0') {
- *s = toupper(*s);
- s++;
- }
- break;
- case PDO_CASE_LOWER:
- while (*s != '\0') {
- *s = tolower(*s);
- s++;
- }
- break;
- default:
- ;
- }
- }
-
- /* update the column index on named bound parameters */
- if (stmt->bound_params) {
- struct pdo_bound_param_data *param;
-
- if (SUCCESS == zend_hash_find(stmt->bound_params, stmt->columns[col].name,
- stmt->columns[col].namelen, (void**)&param)) {
- param->paramno = col;
- }
- }
- if (stmt->bound_columns) {
- struct pdo_bound_param_data *param;
-
- if (SUCCESS == zend_hash_find(stmt->bound_columns, stmt->columns[col].name,
- stmt->columns[col].namelen, (void**)&param)) {
- param->paramno = col;
- }
- }
-
- }
- return 1;
-}
-
-static void get_lazy_object(pdo_stmt_t *stmt, zval *return_value TSRMLS_DC)
-{
- if (Z_TYPE(stmt->lazy_object_ref) == IS_NULL) {
- Z_TYPE(stmt->lazy_object_ref) = IS_OBJECT;
- Z_OBJ_HANDLE(stmt->lazy_object_ref) = zend_objects_store_put(stmt, NULL, pdo_row_free_storage, NULL TSRMLS_CC);
- Z_OBJ_HT(stmt->lazy_object_ref) = &pdo_row_object_handlers;
- stmt->refcount++;
- }
- Z_TYPE_P(return_value) = IS_OBJECT;
- Z_OBJ_HANDLE_P(return_value) = Z_OBJ_HANDLE(stmt->lazy_object_ref);
- Z_OBJ_HT_P(return_value) = Z_OBJ_HT(stmt->lazy_object_ref);
-}
-
-static void param_dtor(void *data)
-{
- struct pdo_bound_param_data *param = (struct pdo_bound_param_data *)data;
- TSRMLS_FETCH();
-
- /* tell the driver that it is going away */
- if (param->stmt->methods->param_hook) {
- param->stmt->methods->param_hook(param->stmt, param, PDO_PARAM_EVT_FREE TSRMLS_CC);
- }
-
- if (param->name) {
- efree(param->name);
- }
-
- zval_ptr_dtor(&(param->parameter));
- if (param->driver_params) {
- zval_ptr_dtor(&(param->driver_params));
- }
-}
-
-static int really_register_bound_param(struct pdo_bound_param_data *param, pdo_stmt_t *stmt, int is_param TSRMLS_DC)
-{
- HashTable *hash;
- struct pdo_bound_param_data *pparam = NULL;
-
- hash = is_param ? stmt->bound_params : stmt->bound_columns;
-
- if (!hash) {
- ALLOC_HASHTABLE(hash);
- zend_hash_init(hash, 13, NULL, param_dtor, 0);
-
- if (is_param) {
- stmt->bound_params = hash;
- } else {
- stmt->bound_columns = hash;
- }
- }
-
- if (param->param_type == PDO_PARAM_STR && param->max_value_len <= 0) {
- convert_to_string(param->parameter);
- /* XXX: need to provide a way to set this to something sane, or
- * investigate a better way to set the length of output parameters in
- * the drivers themselves */
- param->max_value_len = Z_STRLEN_P(param->parameter);
- }
-
- param->stmt = stmt;
- param->is_param = is_param;
-
- ZVAL_ADDREF(param->parameter);
- if (param->driver_params) {
- ZVAL_ADDREF(param->driver_params);
- }
-
- if (param->name && stmt->columns) {
- /* try to map the name to the column */
- int i;
-
- for (i = 0; i < stmt->column_count; i++) {
- if (strcmp(stmt->columns[i].name, param->name) == 0) {
- param->paramno = i;
- break;
- }
- }
-
- if (param->paramno == -1) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Did not found column name '%s' in the defined columns; it will not be bound", param->name);
- }
- }
-
- if (param->name) {
- param->name = estrndup(param->name, param->namelen);
- zend_hash_update(hash, param->name, param->namelen, param, sizeof(*param), (void**)&pparam);
- } else {
- zend_hash_index_update(hash, param->paramno, param, sizeof(*param), (void**)&pparam);
- }
-
- /* tell the driver we just created a parameter */
- if (stmt->methods->param_hook) {
- return stmt->methods->param_hook(stmt, pparam, PDO_PARAM_EVT_ALLOC TSRMLS_CC);
- }
-
- return 1;
-}
-
-
-/* {{{ proto bool PDOStatement::execute([array $bound_input_params])
- Execute a prepared statement, optionally binding parameters */
-static PHP_METHOD(PDOStatement, execute)
-{
- pdo_stmt_t *stmt = (pdo_stmt_t*)zend_object_store_get_object(getThis() TSRMLS_CC);
- zval *input_params = NULL;
- int ret = 1;
-
- if (FAILURE == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|a!", &input_params)) {
- RETURN_FALSE;
- }
-
- PDO_STMT_CLEAR_ERR();
-
- if (input_params) {
- struct pdo_bound_param_data param;
- zval **tmp;
- uint str_length;
- ulong num_index;
-
- zend_hash_internal_pointer_reset(Z_ARRVAL_P(input_params));
- while (SUCCESS == zend_hash_get_current_data(Z_ARRVAL_P(input_params), (void*)&tmp)) {
- memset(&param, 0, sizeof(param));
-
- if (HASH_KEY_IS_STRING == zend_hash_get_current_key_ex(Z_ARRVAL_P(input_params),
- &param.name, &str_length, &num_index, 0, NULL)) {
- /* yes this is correct. we don't want to count the null byte. ask wez */
- param.namelen = str_length - 1;
- param.paramno = -1;
- } else {
- /* we're okay to be zero based here */
- if (num_index < 0) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid parameter index");
- RETURN_FALSE;
- }
- param.paramno = num_index;
- }
-
- param.param_type = PDO_PARAM_STR;
- param.parameter = *tmp;
-
- if (!really_register_bound_param(&param, stmt, 1 TSRMLS_CC)) {
- RETURN_FALSE;
- }
-
- zend_hash_move_forward(Z_ARRVAL_P(input_params));
- }
- }
-
- if (!stmt->dbh->supports_placeholders) {
- int error_pos;
- /* handle the emulated parameter binding,
- * stmt->active_query_string holds the query with binds expanded and
- * quoted.
- */
- if((error_pos = pdo_parse_params(stmt, stmt->query_string, stmt->query_stringlen,
- &stmt->active_query_string, &stmt->active_query_stringlen)) != 0) {
- // parse error in handling the query
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Error emulating placeholder binding in query at %.*s....", error_pos, stmt->query_string);
- RETURN_FALSE;
- }
- } else if (!dispatch_param_event(stmt, PDO_PARAM_EVT_EXEC_PRE TSRMLS_CC)) {
- PDO_HANDLE_STMT_ERR();
- RETURN_FALSE;
- }
- if (stmt->methods->executer(stmt TSRMLS_CC)) {
- if (stmt->active_query_string) {
- efree(stmt->active_query_string);
- stmt->active_query_string = NULL;
- }
- if (!stmt->executed) {
- /* this is the first execute */
-
- if (stmt->dbh->alloc_own_columns) {
- /* for "big boy" drivers, we need to allocate memory to fetch
- * the results into, so lets do that now */
- ret = describe_columns(stmt TSRMLS_CC);
- }
-
- stmt->executed = 1;
- }
-
- if (ret && !dispatch_param_event(stmt, PDO_PARAM_EVT_EXEC_POST TSRMLS_CC)) {
- RETURN_FALSE;
- }
-
- RETURN_BOOL(ret);
- }
- if (stmt->active_query_string) {
- efree(stmt->active_query_string);
- stmt->active_query_string = NULL;
- }
- PDO_HANDLE_STMT_ERR();
- RETURN_FALSE;
-}
-/* }}} */
-
-static inline void fetch_value(pdo_stmt_t *stmt, zval *dest, int colno TSRMLS_DC)
-{
- struct pdo_column_data *col;
- char *value = NULL;
- unsigned long value_len = 0;
-
- col = &stmt->columns[colno];
-
- value = NULL;
- value_len = 0;
-
- stmt->methods->get_col(stmt, colno, &value, &value_len TSRMLS_CC);
-
- switch (col->param_type) {
- case PDO_PARAM_STR:
- if (value && !(value_len == 0 && stmt->dbh->oracle_nulls)) {
- ZVAL_STRINGL(dest, value, value_len, 1);
- break;
- }
- default:
- ZVAL_NULL(dest);
- }
-}
-
-static int do_fetch_common(pdo_stmt_t *stmt, int do_bind TSRMLS_DC)
-{
- if (!dispatch_param_event(stmt, PDO_PARAM_EVT_FETCH_PRE TSRMLS_CC)) {
- return 0;
- }
-
- if (!stmt->methods->fetcher(stmt TSRMLS_CC)) {
- return 0;
- }
-
- /* some drivers might need to describe the columns now */
- if (!stmt->columns && !describe_columns(stmt TSRMLS_CC)) {
- return 0;
- }
-
- if (!dispatch_param_event(stmt, PDO_PARAM_EVT_FETCH_POST TSRMLS_CC)) {
- return 0;
- }
-
- if (do_bind && stmt->bound_columns) {
- /* update those bound column variables now */
- struct pdo_bound_param_data *param;
-
- zend_hash_internal_pointer_reset(stmt->bound_columns);
- while (SUCCESS == zend_hash_get_current_data(stmt->bound_columns, (void**)&param)) {
- if (param->paramno >= 0) {
- convert_to_string(param->parameter);
-
- /* delete old value */
- zval_dtor(param->parameter);
-
- /* set new value */
- fetch_value(stmt, param->parameter, param->paramno TSRMLS_CC);
-
- /* TODO: some smart thing that avoids duplicating the value in the
- * general loop below. For now, if you're binding output columns,
- * it's better to use LAZY or BOUND fetches if you want to shave
- * off those cycles */
- }
-
- zend_hash_move_forward(stmt->bound_columns);
- }
- }
-
- return 1;
-}
-
-/* perform a fetch. If do_bind is true, update any bound columns.
- * If return_value is not null, store values into it according to HOW. */
-static int do_fetch(pdo_stmt_t *stmt, int do_bind, zval *return_value, enum pdo_fetch_type how TSRMLS_DC)
-{
- enum pdo_fetch_type really_how = how;
-
- if (!do_fetch_common(stmt, do_bind TSRMLS_CC)) {
- return 0;
- }
-
- if (how == PDO_FETCH_BOUND) {
- RETVAL_TRUE;
- return 1;
- }
-
- if (return_value) {
- int i;
-
- if (how == PDO_FETCH_LAZY) {
- get_lazy_object(stmt, return_value TSRMLS_CC);
- return 1;
- }
-
- array_init(return_value);
-
- if (how == PDO_FETCH_OBJ) {
- how = PDO_FETCH_ASSOC;
- }
-
- for (i = 0; i < stmt->column_count; i++) {
- zval *val;
- MAKE_STD_ZVAL(val);
- fetch_value(stmt, val, i TSRMLS_CC);
-
- if (how == PDO_FETCH_ASSOC || how == PDO_FETCH_BOTH) {
- add_assoc_zval(return_value, stmt->columns[i].name, val);
- }
- if (how == PDO_FETCH_NUM || how == PDO_FETCH_BOTH) {
- add_next_index_zval(return_value, val);
- }
-
- if (how == PDO_FETCH_BOTH) {
- ZVAL_ADDREF(val);
- }
- }
-
- if (really_how == PDO_FETCH_OBJ) {
- object_and_properties_init(return_value, ZEND_STANDARD_CLASS_DEF_PTR, Z_ARRVAL_P(return_value));
- }
- }
-
- return 1;
-}
-
-/* {{{ proto mixed PDOStatement::fetch([int $how = PDO_FETCH_BOTH])
- Fetches the next row and returns it, or false if there are no more rows */
-static PHP_METHOD(PDOStatement, fetch)
-{
- long how = PDO_FETCH_BOTH;
- pdo_stmt_t *stmt = (pdo_stmt_t*)zend_object_store_get_object(getThis() TSRMLS_CC);
-
- if (FAILURE == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|l", &how)) {
- RETURN_FALSE;
- }
-
- PDO_STMT_CLEAR_ERR();
- if (!do_fetch(stmt, TRUE, return_value, how TSRMLS_CC)) {
- PDO_HANDLE_STMT_ERR();
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-/* {{{ proto string PDOStatement::fetchSingle()
- Returns a data of the 1st column in the result set. */
-static PHP_METHOD(PDOStatement, fetchSingle)
-{
- pdo_stmt_t *stmt = (pdo_stmt_t*)zend_object_store_get_object(getThis() TSRMLS_CC);
-
- if (ZEND_NUM_ARGS()) {
- RETURN_FALSE;
- }
-
- PDO_STMT_CLEAR_ERR();
- if (!do_fetch_common(stmt, TRUE TSRMLS_CC)) {
- PDO_HANDLE_STMT_ERR();
- RETURN_FALSE;
- }
-
- fetch_value(stmt, return_value, 0 TSRMLS_CC);
-}
-/* }}} */
-
-/* {{{ proto array PDOStatement::fetchAll([int $how = PDO_FETCH_BOTH])
- Returns an array of all of the results. */
-static PHP_METHOD(PDOStatement, fetchAll)
-{
- pdo_stmt_t *stmt = (pdo_stmt_t*)zend_object_store_get_object(getThis() TSRMLS_CC);
- long how = PDO_FETCH_BOTH;
- zval *data;
-
- if (FAILURE == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|l", &how)) {
- RETURN_FALSE;
- }
-
- PDO_STMT_CLEAR_ERR();
- MAKE_STD_ZVAL(data);
- if (!do_fetch(stmt, TRUE, data, how TSRMLS_CC)) {
- FREE_ZVAL(data);
- PDO_HANDLE_STMT_ERR();
- RETURN_FALSE;
- }
-
- array_init(return_value);
- do {
- add_next_index_zval(return_value, data);
- MAKE_STD_ZVAL(data);
- } while (do_fetch(stmt, TRUE, data, how TSRMLS_CC));
- FREE_ZVAL(data);
-}
-/* }}} */
-
-static int register_bound_param(INTERNAL_FUNCTION_PARAMETERS, pdo_stmt_t *stmt, int is_param)
-{
- struct pdo_bound_param_data param = {0};
-
- param.paramno = -1;
- param.param_type = PDO_PARAM_STR;
-
- if (FAILURE == zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, ZEND_NUM_ARGS() TSRMLS_CC,
- "lz|llz!", &param.paramno, &param.parameter, &param.param_type, &param.max_value_len,
- &param.driver_params)) {
- if (FAILURE == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "sz|llz!", &param.name,
- &param.namelen, &param.parameter, &param.param_type, &param.max_value_len,
- &param.driver_params)) {
- return 0;
- }
- }
-
- if (param.paramno > 0) {
- --param.paramno; /* make it zero-based internally */
- } else if (!param.name) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid parameter number: columns are 1-based");
- return 0;
- }
-
- return really_register_bound_param(&param, stmt, is_param TSRMLS_CC);
-}
-
-/* {{{ proto bool PDOStatement::bindParam(mixed $paramno, mixed &$param [, int $type [, int $maxlen [, mixed $driverdata]]])
- bind a parameter to a PHP variable. $paramno is the 1-based position of the placeholder in the SQL statement (but can be the parameter name for drivers that support named placeholders). This isn't supported by all drivers. It should be called prior to execute(). */
-static PHP_METHOD(PDOStatement, bindParam)
-{
- pdo_stmt_t *stmt = (pdo_stmt_t*)zend_object_store_get_object(getThis() TSRMLS_CC);
- RETURN_BOOL(register_bound_param(INTERNAL_FUNCTION_PARAM_PASSTHRU, stmt, TRUE));
-}
-/* }}} */
-
-/* {{{ proto bool PDOStatement::bindColumn(mixed $column, mixed &$param [, int $type [, int $maxlen [, mixed $driverdata]]])
- bind a column to a PHP variable. On each row fetch $param will contain the value of the corresponding column. $column is the 1-based offset of the column, or the column name. For portability, don't call this before execute(). */
-static PHP_METHOD(PDOStatement, bindColumn)
-{
- pdo_stmt_t *stmt = (pdo_stmt_t*)zend_object_store_get_object(getThis() TSRMLS_CC);
- RETURN_BOOL(register_bound_param(INTERNAL_FUNCTION_PARAM_PASSTHRU, stmt, FALSE));
-}
-/* }}} */
-
-/* {{{ proto int PDOStatement::rowCount()
- Returns the number of rows in a result set, or the number of rows affected by the last execute(). It is not always meaningful. */
-static PHP_METHOD(PDOStatement, rowCount)
-{
- pdo_stmt_t *stmt = (pdo_stmt_t*)zend_object_store_get_object(getThis() TSRMLS_CC);
-
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "This statement is not a scrollable cursor and does not know the row count");
- RETURN_FALSE;
-}
-/* }}} */
-
-/* {{{ proto int PDOStatement::errorCode()
- Fetch the error code associated with the last operation on the statement handle */
-static PHP_METHOD(PDOStatement, errorCode)
-{
- pdo_stmt_t *stmt = (pdo_stmt_t*)zend_object_store_get_object(getThis() TSRMLS_CC);
-
- if (ZEND_NUM_ARGS()) {
- RETURN_FALSE;
- }
-
- RETURN_LONG(stmt->error_code);
-}
-/* }}} */
-
-/* {{{ proto array PDOStatement::errorInfo()
- Fetch extended error information associated with the last operation on the statement handle */
-static PHP_METHOD(PDOStatement, errorInfo)
-{
- pdo_stmt_t *stmt = (pdo_stmt_t*)zend_object_store_get_object(getThis() TSRMLS_CC);
-
- if (ZEND_NUM_ARGS()) {
- RETURN_FALSE;
- }
-
- array_init(return_value);
- add_next_index_long(return_value, stmt->error_code);
-
- if (stmt->dbh->methods->fetch_err) {
- stmt->dbh->methods->fetch_err(stmt->dbh, stmt, return_value TSRMLS_CC);
- }
-}
-/* }}} */
-
-/* {{{ proto bool PDOStatement::setAttribute(long attribute, mixed value)
- Set an attribute */
-static PHP_METHOD(PDOStatement, setAttribute)
-{
- pdo_stmt_t *stmt = (pdo_stmt_t*)zend_object_store_get_object(getThis() TSRMLS_CC);
- long attr;
- zval *value = NULL;
-
- if (FAILURE == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "lz!", &attr, &value)) {
- RETURN_FALSE;
- }
-
- if (!stmt->methods->set_attribute) {
- goto fail;
- }
-
- PDO_STMT_CLEAR_ERR();
- if (stmt->methods->set_attribute(stmt, attr, value TSRMLS_CC)) {
- RETURN_TRUE;
- }
-
-fail:
- if (!stmt->methods->set_attribute) {
- /* XXX: do something better here */
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "This driver doesn't support setting attributes");
- } else {
- PDO_HANDLE_STMT_ERR();
- }
- RETURN_FALSE;
-}
-/* }}} */
-
-/* {{{ proto mixed PDOStatement::getAttribute(long attribute)
- Get an attribute */
-static PHP_METHOD(PDOStatement, getAttribute)
-{
- pdo_stmt_t *stmt = (pdo_stmt_t*)zend_object_store_get_object(getThis() TSRMLS_CC);
- long attr;
-
- if (FAILURE == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &attr)) {
- RETURN_FALSE;
- }
-
- if (!stmt->methods->get_attribute) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "This driver doesn't support fetching attributes");
- RETURN_FALSE;
- }
-
- PDO_STMT_CLEAR_ERR();
- switch (stmt->methods->get_attribute(stmt, attr, return_value TSRMLS_CC)) {
- case -1:
- PDO_HANDLE_STMT_ERR();
- RETURN_FALSE;
-
- case 0:
- /* XXX: should do something better here */
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "This driver doesn't support fetching %ld attribute", attr);
- break;
-
- default:
- return;
- }
-}
-/* }}} */
-
-function_entry pdo_dbstmt_functions[] = {
- PHP_ME(PDOStatement, execute, NULL, ZEND_ACC_PUBLIC)
- PHP_ME(PDOStatement, fetch, NULL, ZEND_ACC_PUBLIC)
- PHP_ME(PDOStatement, bindParam, second_arg_force_ref, ZEND_ACC_PUBLIC)
- PHP_ME(PDOStatement, bindColumn, second_arg_force_ref, ZEND_ACC_PUBLIC)
- PHP_ME(PDOStatement, rowCount, NULL, ZEND_ACC_PUBLIC)
- PHP_ME(PDOStatement, fetchSingle, NULL, ZEND_ACC_PUBLIC)
- PHP_ME(PDOStatement, fetchAll, NULL, ZEND_ACC_PUBLIC)
- PHP_ME(PDOStatement, errorCode, NULL, ZEND_ACC_PUBLIC)
- PHP_ME(PDOStatement, errorInfo, NULL, ZEND_ACC_PUBLIC)
- PHP_ME(PDOStatement, setAttribute, NULL, ZEND_ACC_PUBLIC)
- PHP_ME(PDOStatement, getAttribute, NULL, ZEND_ACC_PUBLIC)
- {NULL, NULL, NULL}
-};
-
-/* {{{ overloaded handlers for PDOStatement class */
-static zval *dbstmt_prop_read(zval *object, zval *member, int type TSRMLS_DC)
-{
- zval *return_value;
- pdo_stmt_t * stmt = (pdo_stmt_t *) zend_object_store_get_object(object TSRMLS_CC);
-
- convert_to_string(member);
-
- if(strcmp(Z_STRVAL_P(member), "queryString") == 0) {
- MAKE_STD_ZVAL(return_value);
- ZVAL_STRINGL(return_value, stmt->query_string, stmt->query_stringlen, 1);
- } else {
- MAKE_STD_ZVAL(return_value);
- ZVAL_NULL(return_value);
- }
- return return_value;
-}
-
-static void dbstmt_prop_write(zval *object, zval *member, zval *value TSRMLS_DC)
-{
- return;
-}
-
-static zval *dbstmt_read_dim(zval *object, zval *offset, int type TSRMLS_DC)
-{
- zval *return_value;
-
- MAKE_STD_ZVAL(return_value);
- ZVAL_NULL(return_value);
-
- return return_value;
-}
-
-static void dbstmt_write_dim(zval *object, zval *offset, zval *value TSRMLS_DC)
-{
- return;
-}
-
-static int dbstmt_prop_exists(zval *object, zval *member, int check_empty TSRMLS_DC)
-{
- return 0;
-}
-
-static int dbstmt_dim_exists(zval *object, zval *member, int check_empty TSRMLS_DC)
-{
- return 0;
-}
-
-static void dbstmt_prop_delete(zval *object, zval *offset TSRMLS_DC)
-{
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Cannot delete properties from a PDOStatement");
-}
-
-static void dbstmt_dim_delete(zval *object, zval *offset TSRMLS_DC)
-{
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Cannot delete dimensions from a PDOStatement");
-}
-
-static HashTable *dbstmt_get_properties(zval *object TSRMLS_DC)
-{
- return NULL;
-}
-
-static union _zend_function *dbstmt_method_get(zval *object, char *method_name, int method_len TSRMLS_DC)
-{
- zend_function *fbc;
- char *lc_method_name;
-
- lc_method_name = emalloc(method_len + 1);
- zend_str_tolower_copy(lc_method_name, method_name, method_len);
-
- if (zend_hash_find(&pdo_dbstmt_ce->function_table, lc_method_name, method_len+1, (void**)&fbc) == FAILURE) {
- efree(lc_method_name);
- return NULL;
- }
-
- efree(lc_method_name);
- return fbc;
-}
-
-static int dbstmt_call_method(char *method, INTERNAL_FUNCTION_PARAMETERS)
-{
- return FAILURE;
-}
-
-static union _zend_function *dbstmt_get_ctor(zval *object TSRMLS_DC)
-{
- static zend_internal_function ctor = {0};
-
- ctor.type = ZEND_INTERNAL_FUNCTION;
- ctor.function_name = "__construct";
- ctor.scope = pdo_dbstmt_ce;
- ctor.handler = ZEND_FN(dbstmt_constructor);
-
- return (union _zend_function*)&ctor;
-}
-
-static zend_class_entry *dbstmt_get_ce(zval *object TSRMLS_DC)
-{
- return pdo_dbstmt_ce;
-}
-
-static int dbstmt_get_classname(zval *object, char **class_name, zend_uint *class_name_len, int parent TSRMLS_DC)
-{
- *class_name = estrndup("PDOStatement", sizeof("PDOStatement")-1);
- *class_name_len = sizeof("PDOStatement")-1;
- return 0;
-}
-
-static int dbstmt_compare(zval *object1, zval *object2 TSRMLS_DC)
-{
- return -1;
-}
-
-zend_object_handlers pdo_dbstmt_object_handlers = {
- ZEND_OBJECTS_STORE_HANDLERS,
- dbstmt_prop_read,
- dbstmt_prop_write,
- dbstmt_read_dim,
- dbstmt_write_dim,
- NULL,
- NULL,
- NULL,
- dbstmt_prop_exists,
- dbstmt_prop_delete,
- dbstmt_dim_exists,
- dbstmt_dim_delete,
- dbstmt_get_properties,
- dbstmt_method_get,
- dbstmt_call_method,
- dbstmt_get_ctor,
- dbstmt_get_ce,
- dbstmt_get_classname,
- dbstmt_compare,
- NULL, /* cast */
- NULL
-};
-
-static void free_statement(pdo_stmt_t *stmt TSRMLS_DC)
-{
- if (stmt->methods && stmt->methods->dtor) {
- stmt->methods->dtor(stmt TSRMLS_CC);
- }
- if (stmt->query_string) {
- efree(stmt->query_string);
- }
-
- if (stmt->column_count) {
- int i;
- struct pdo_column_data *cols = stmt->columns;
-
- for (i = 0; i < stmt->column_count; i++) {
- efree(cols[i].name);
- }
- }
- if (stmt->columns) {
- efree(stmt->columns);
- }
-
- if (stmt->bound_params) {
- zend_hash_destroy(stmt->bound_params);
- FREE_HASHTABLE(stmt->bound_params);
- }
- if (stmt->bound_columns) {
- zend_hash_destroy(stmt->bound_columns);
- FREE_HASHTABLE(stmt->bound_columns);
- }
-
- zend_objects_store_del_ref(&stmt->database_object_handle TSRMLS_CC);
- efree(stmt);
-}
-
-void pdo_dbstmt_free_storage(zend_object *object TSRMLS_DC)
-{
- pdo_stmt_t *stmt = (pdo_stmt_t*)object;
-
- if (--stmt->refcount == 0) {
- free_statement(stmt TSRMLS_CC);
- }
-}
-
-zend_object_value pdo_dbstmt_new(zend_class_entry *ce TSRMLS_DC)
-{
- zend_object_value retval;
-
- retval.handle = zend_objects_store_put(NULL, NULL, pdo_dbstmt_free_storage, NULL TSRMLS_CC);
- retval.handlers = &pdo_dbstmt_object_handlers;
-
- return retval;
-}
-/* }}} */
-
-/* {{{ overloaded handlers for PDORow class (used by PDO_FETCH_LAZY) */
-
-function_entry pdo_row_functions[] = {
- {NULL, NULL, NULL}
-};
-
-static zval *row_prop_or_dim_read(zval *object, zval *member, int type TSRMLS_DC)
-{
- zval *return_value;
- pdo_stmt_t * stmt = (pdo_stmt_t *) zend_object_store_get_object(object TSRMLS_CC);
- int colno = -1;
-
- MAKE_STD_ZVAL(return_value);
-
- if (Z_TYPE_P(member) == IS_LONG) {
- if (Z_LVAL_P(member) >= 0 && Z_LVAL_P(member) < stmt->column_count) {
- fetch_value(stmt, return_value, Z_LVAL_P(member) TSRMLS_CC);
- }
- } else {
- convert_to_string(member);
- /* TODO: replace this with a hash of available column names to column
- * numbers */
- 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 TSRMLS_CC);
- break;
- }
- }
- }
-
- return return_value;
-}
-
-static void row_prop_or_dim_write(zval *object, zval *member, zval *value TSRMLS_DC)
-{
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "This PDORow is not from a writable result set");
-}
-
-static int row_prop_or_dim_exists(zval *object, zval *member, int check_empty TSRMLS_DC)
-{
- pdo_stmt_t * stmt = (pdo_stmt_t *) zend_object_store_get_object(object TSRMLS_CC);
- int colno = -1;
-
- if (Z_TYPE_P(member) == IS_LONG) {
- return Z_LVAL_P(member) >= 0 && Z_LVAL_P(member) < stmt->column_count;
- } else {
- convert_to_string(member);
-
- /* TODO: replace this with a hash of available column names to column
- * numbers */
- for (colno = 0; colno < stmt->column_count; colno++) {
- if (strcmp(stmt->columns[colno].name, Z_STRVAL_P(member)) == 0) {
- return 1;
- }
- }
- }
-
- return 0;
-}
-
-static void row_prop_or_dim_delete(zval *object, zval *offset TSRMLS_DC)
-{
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Cannot delete properties from a PDORow");
-}
-
-static HashTable *row_get_properties(zval *object TSRMLS_DC)
-{
- zval *tmp;
- pdo_stmt_t * stmt = (pdo_stmt_t *) zend_object_store_get_object(object TSRMLS_CC);
- int i;
- HashTable *ht;
-
- MAKE_STD_ZVAL(tmp);
- array_init(tmp);
-
- for (i = 0; i < stmt->column_count; i++) {
- zval *val;
- MAKE_STD_ZVAL(val);
- fetch_value(stmt, val, i TSRMLS_CC);
-
- add_assoc_zval(tmp, stmt->columns[i].name, val);
- }
-
- ht = Z_ARRVAL_P(tmp);
-
- ZVAL_NULL(tmp);
- FREE_ZVAL(tmp);
-
- return ht;
-}
-
-static union _zend_function *row_method_get(zval *object, char *method_name, int method_len TSRMLS_DC)
-{
- zend_function *fbc;
- char *lc_method_name;
-
- lc_method_name = emalloc(method_len + 1);
- zend_str_tolower_copy(lc_method_name, method_name, method_len);
-
- if (zend_hash_find(&pdo_row_ce->function_table, lc_method_name, method_len+1, (void**)&fbc) == FAILURE) {
- efree(lc_method_name);
- return NULL;
- }
-
- efree(lc_method_name);
- return fbc;
-}
-
-static int row_call_method(char *method, INTERNAL_FUNCTION_PARAMETERS)
-{
- return FAILURE;
-}
-
-static union _zend_function *row_get_ctor(zval *object TSRMLS_DC)
-{
- static zend_internal_function ctor = {0};
-
- ctor.type = ZEND_INTERNAL_FUNCTION;
- ctor.function_name = "__construct";
- ctor.scope = pdo_row_ce;
- ctor.handler = ZEND_FN(dbstmt_constructor);
-
- return (union _zend_function*)&ctor;
-}
-
-static zend_class_entry *row_get_ce(zval *object TSRMLS_DC)
-{
- return pdo_dbstmt_ce;
-}
-
-static int row_get_classname(zval *object, char **class_name, zend_uint *class_name_len, int parent TSRMLS_DC)
-{
- *class_name = estrndup("PDORow", sizeof("PDORow")-1);
- *class_name_len = sizeof("PDORow")-1;
- return 0;
-}
-
-static int row_compare(zval *object1, zval *object2 TSRMLS_DC)
-{
- return -1;
-}
-
-zend_object_handlers pdo_row_object_handlers = {
- ZEND_OBJECTS_STORE_HANDLERS,
- row_prop_or_dim_read,
- row_prop_or_dim_write,
- row_prop_or_dim_read,
- row_prop_or_dim_write,
- NULL,
- NULL,
- NULL,
- row_prop_or_dim_exists,
- row_prop_or_dim_delete,
- row_prop_or_dim_exists,
- row_prop_or_dim_delete,
- row_get_properties,
- row_method_get,
- row_call_method,
- row_get_ctor,
- row_get_ce,
- row_get_classname,
- row_compare,
- NULL, /* cast */
- NULL
-};
-
-void pdo_row_free_storage(zend_object *object TSRMLS_DC)
-{
- pdo_stmt_t *stmt = (pdo_stmt_t*)object;
-
- ZVAL_NULL(&stmt->lazy_object_ref);
-
- if (--stmt->refcount == 0) {
- free_statement(stmt TSRMLS_CC);
- }
-}
-
-zend_object_value pdo_row_new(zend_class_entry *ce TSRMLS_DC)
-{
- zend_object_value retval;
-
- retval.handle = zend_objects_store_put(NULL, NULL, pdo_row_free_storage, NULL TSRMLS_CC);
- retval.handlers = &pdo_row_object_handlers;
-
- return retval;
-}
-/* }}} */
-
-/*
- * 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/php_pdo.h b/ext/pdo/php_pdo.h
deleted file mode 100755
index a7fbd90894..0000000000
--- a/ext/pdo/php_pdo.h
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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$ */
-
-#ifndef PHP_PDO_H
-#define PHP_PDO_H
-
-extern zend_module_entry pdo_module_entry;
-#define phpext_pdo_ptr &pdo_module_entry
-
-#ifdef PHP_WIN32
-# ifdef PDO_EXPORTS
-# define PDO_API __declspec(dllexport)
-# elif defined(COMPILE_DL_PDO)
-# define PDO_API __declspec(dllimport)
-# else
-# define PDO_API /* nothing special */
-# endif
-#else
-# define PDO_API /* nothing special */
-#endif
-
-#ifdef ZTS
-# include "TSRM.h"
-#endif
-
-PHP_MINIT_FUNCTION(pdo);
-PHP_MSHUTDOWN_FUNCTION(pdo);
-PHP_RINIT_FUNCTION(pdo);
-PHP_RSHUTDOWN_FUNCTION(pdo);
-PHP_MINFO_FUNCTION(pdo);
-
-ZEND_BEGIN_MODULE_GLOBALS(pdo)
- long global_value;
-ZEND_END_MODULE_GLOBALS(pdo)
-
-#ifdef ZTS
-# define PDOG(v) TSRMG(pdo_globals_id, zend_pdo_globals *, v)
-#else
-# define PDOG(v) (pdo_globals.v)
-#endif
-
-#endif /* PHP_PDO_H */
-
-
-/*
- * 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/php_pdo_driver.h b/ext/pdo/php_pdo_driver.h
deleted file mode 100755
index 2acd860b92..0000000000
--- a/ext/pdo/php_pdo_driver.h
+++ /dev/null
@@ -1,427 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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$ */
-
-#ifndef PHP_PDO_DRIVER_H
-#define PHP_PDO_DRIVER_H
-
-#include "php_pdo.h"
-
-/* forward declarations */
-typedef struct _pdo_dbh_t pdo_dbh_t;
-typedef struct _pdo_stmt_t pdo_stmt_t;
-struct pdo_bound_param_data;
-
-#ifndef TRUE
-# define TRUE 1
-#endif
-#ifndef FALSE
-# define FALSE 0
-#endif
-
-#define PDO_DRIVER_API 20040513
-
-enum pdo_param_type {
- PDO_PARAM_NULL,
- PDO_PARAM_INT,
- PDO_PARAM_STR,
- PDO_PARAM_LOB,
- PDO_PARAM_STMT, /* hierarchical result set */
-
-};
-
-enum pdo_fetch_type {
- PDO_FETCH_LAZY,
- PDO_FETCH_ASSOC,
- PDO_FETCH_NUM,
- PDO_FETCH_BOTH,
- PDO_FETCH_OBJ,
- PDO_FETCH_BOUND, /* return true/false only; rely on bound columns */
-};
-
-enum pdo_attribute_type {
- PDO_ATTR_AUTOCOMMIT, /* use to turn on or off auto-commit mode */
- PDO_ATTR_SCROLL, /* ask for a scrollable cursor (when you prepare()) */
- PDO_ATTR_PREFETCH, /* configure the prefetch size for drivers that support it */
- PDO_ATTR_TIMEOUT, /* connection timeout in seconds */
- PDO_ATTR_ERRMODE, /* control how errors are handled */
- PDO_ATTR_SERVER_VERSION, /* database server version */
- PDO_ATTR_CLIENT_VERSION, /* client library version */
- PDO_ATTR_SERVER_INFO, /* server information */
- PDO_ATTR_CONNECTION_STATUS, /* connection status */
- PDO_ATTR_CASE, /* control case folding for portability */
- PDO_ATTR_CURSOR_NAME, /* name a cursor for use in "WHERE CURRENT OF <name>" */
- PDO_ATTR_CURSOR, /* cursor type */
- PDO_ATTR_ORACLE_NULLS, /* convert empty strings to NULL */
-
- /* this defines the start of the range for driver specific options.
- * Drivers should define their own attribute constants beginning with this
- * value. */
- PDO_ATTR_DRIVER_SPECIFIC = 1000
-};
-
-enum pdo_cursor_type {
- PDO_CURSOR_FWDONLY, /* forward only cursor (default) */
- PDO_CURSOR_SCROLL, /* scrollable cursor */
-};
-
-/* generic error code values.
- * Don't want to go overboard with these.
- * */
-enum pdo_error_type {
- PDO_ERR_NONE, /* no error condition */
- PDO_ERR_CANT_MAP, /* no way to map native error to the generic codes; consult the native error for more info */
- PDO_ERR_SYNTAX,
- PDO_ERR_CONSTRAINT,
- PDO_ERR_NOT_FOUND,
- PDO_ERR_ALREADY_EXISTS,
- PDO_ERR_NOT_IMPLEMENTED,
- PDO_ERR_MISMATCH,
- PDO_ERR_TRUNCATED,
- PDO_ERR_DISCONNECTED,
-};
-
-enum pdo_error_mode {
- PDO_ERRMODE_SILENT, /* just set error codes */
- PDO_ERRMODE_WARNING, /* raise E_WARNING */
- PDO_ERRMODE_EXCEPTION, /* throw exceptions */
-};
-
-enum pdo_case_conversion {
- PDO_CASE_NATURAL,
- PDO_CASE_UPPER,
- PDO_CASE_LOWER
-};
-
-/* {{{ utils for reading attributes set as driver_options */
-static inline long pdo_attr_lval(zval *options, enum pdo_fetch_type option_name, long defval TSRMLS_DC)
-{
- zval **v;
-
- if (options && SUCCESS == zend_hash_index_find(Z_ARRVAL_P(options), option_name, (void**)&v)) {
- convert_to_long_ex(v);
- return Z_LVAL_PP(v);
- }
- return defval;
-}
-/* }}} */
-
-/* This structure is registered with PDO when a PDO driver extension is
- * initialized */
-typedef struct {
- const char *driver_name;
- unsigned long driver_name_len;
- unsigned long api_version; /* needs to be compatible with PDO */
-
-#define PDO_DRIVER_HEADER(name) \
- #name, sizeof(#name)-1, \
- PDO_DRIVER_API
-
- /* create driver specific portion of the database handle and stash it into
- * the dbh. dbh contains the data source string and flags for this
- * instance */
- int (*db_handle_factory)(pdo_dbh_t *dbh, zval *driver_options TSRMLS_DC);
-
-} pdo_driver_t;
-
-/* {{{ methods for a database handle */
-
-/* close or otherwise disconnect the database */
-typedef int (*pdo_dbh_close_func)(pdo_dbh_t *dbh TSRMLS_DC);
-
-/* prepare a statement and stash driver specific portion into stmt */
-typedef int (*pdo_dbh_prepare_func)(pdo_dbh_t *dbh, const char *sql, long sql_len, pdo_stmt_t *stmt, long options, zval *driver_options TSRMLS_DC);
-
-/* execute a statement (that does not return a result set) */
-typedef long (*pdo_dbh_do_func)(pdo_dbh_t *dbh, const char *sql, long sql_len TSRMLS_DC);
-
-/* quote a string */
-typedef int (*pdo_dbh_quote_func)(pdo_dbh_t *dbh, const char *unquoted, int unquotedlen, char **quoted, int *quotedlen TSRMLS_DC);
-
-/* transaction related */
-typedef int (*pdo_dbh_txn_func)(pdo_dbh_t *dbh TSRMLS_DC);
-
-/* setting of attributes */
-typedef int (*pdo_dbh_set_attr_func)(pdo_dbh_t *dbh, long attr, zval *val TSRMLS_DC);
-
-/* return last insert id */
-typedef long (*pdo_dbh_last_id_func)(pdo_dbh_t *dbh TSRMLS_DC);
-
-/* fetch error information. if stmt is not null, fetch information pertaining
- * to the statement, otherwise fetch global error information. The driver
- * should add the following information to the array "info" in this order:
- * - native error code
- * - string representation of the error code ... any other optional driver
- * specific data ... */
-typedef int (*pdo_dbh_fetch_error_func)(pdo_dbh_t *dbh, pdo_stmt_t *stmt, zval *info TSRMLS_DC);
-
-/* fetching of attributes */
-typedef int (*pdo_dbh_get_attr_func)(pdo_dbh_t *dbh, long attr, zval *val TSRMLS_DC);
-
-struct pdo_dbh_methods {
- pdo_dbh_close_func closer;
- pdo_dbh_prepare_func preparer;
- pdo_dbh_do_func doer;
- pdo_dbh_quote_func quoter;
- pdo_dbh_txn_func begin;
- pdo_dbh_txn_func commit;
- pdo_dbh_txn_func rollback;
- pdo_dbh_set_attr_func set_attribute;
- pdo_dbh_last_id_func last_id;
- pdo_dbh_fetch_error_func fetch_err;
- pdo_dbh_get_attr_func get_attribute;
-};
-
-/* }}} */
-
-/* {{{ methods for a statement handle */
-
-/* free the statement handle */
-typedef int (*pdo_stmt_dtor_func)(pdo_stmt_t *stmt TSRMLS_DC);
-
-/* start the query */
-typedef int (*pdo_stmt_execute_func)(pdo_stmt_t *stmt TSRMLS_DC);
-
-/* causes the next row in the set to be fetched; indicates if there are no
- * more rows */
-typedef int (*pdo_stmt_fetch_func)(pdo_stmt_t *stmt TSRMLS_DC);
-
-/* queries information about the type of a column, by index (0 based).
- * Driver should populate stmt->columns[colno] with appropriate info */
-typedef int (*pdo_stmt_describe_col_func)(pdo_stmt_t *stmt, int colno TSRMLS_DC);
-
-/* retrieves pointer and size of the value for a column */
-typedef int (*pdo_stmt_get_col_data_func)(pdo_stmt_t *stmt, int colno, char **ptr, unsigned long *len TSRMLS_DC);
-
-/* hook for bound params */
-enum pdo_param_event {
- PDO_PARAM_EVT_ALLOC,
- PDO_PARAM_EVT_FREE,
- PDO_PARAM_EVT_EXEC_PRE,
- PDO_PARAM_EVT_EXEC_POST,
- PDO_PARAM_EVT_FETCH_PRE,
- PDO_PARAM_EVT_FETCH_POST,
-};
-
-typedef int (*pdo_stmt_param_hook_func)(pdo_stmt_t *stmt, struct pdo_bound_param_data *param, enum pdo_param_event event_type TSRMLS_DC);
-
-/* setting of attributes */
-typedef int (*pdo_stmt_set_attr_func)(pdo_stmt_t *stmt, long attr, zval *val TSRMLS_DC);
-
-/* fetching of attributes */
-typedef int (*pdo_stmt_get_attr_func)(pdo_stmt_t *stmt, long attr, zval *val TSRMLS_DC);
-
-
-struct pdo_stmt_methods {
- pdo_stmt_dtor_func dtor;
- pdo_stmt_execute_func executer;
- pdo_stmt_fetch_func fetcher;
- pdo_stmt_describe_col_func describer;
- pdo_stmt_get_col_data_func get_col;
- pdo_stmt_param_hook_func param_hook;
- pdo_stmt_set_attr_func set_attribute;
- pdo_stmt_get_attr_func get_attribute;
-};
-
-/* }}} */
-
-enum pdo_placeholder_support {
- PDO_PLACEHOLDER_NONE=0,
- PDO_PLACEHOLDER_NAMED=1,
- PDO_PLACEHOLDER_POSITIONAL=2
-};
-
-/* represents a connection to a database */
-struct _pdo_dbh_t {
- /* these items mst appear in this order at the beginning of the
- struct so that this can be cast as a zend_object. we need this
- to allow the extending class to escape all the custom handlers
- that PDO decalres.
- */
- zend_class_entry *ce;
- HashTable *properties;
- unsigned int in_get:1;
- unsigned int in_set:1;
-
- /* driver specific methods */
- struct pdo_dbh_methods *methods;
- /* driver specific data */
- void *driver_data;
-
- /* credentials */
- char *username, *password;
-
- /* if true, then data stored and pointed at by this handle must all be
- * persistently allocated */
- unsigned is_persistent:1;
-
- /* if true, driver should act as though a COMMIT were executed between
- * each executed statement; otherwise, COMMIT must be carried out manually
- * */
- unsigned auto_commit:1;
-
- /* if true, the handle has been closed and will not function anymore */
- unsigned is_closed:1;
-
- /* if true, the driver requires that memory be allocated explicitly for
- * the columns that are returned */
- unsigned alloc_own_columns:1;
-
- /* if true, the driver supports placeholders and can implement
- * bindParam() for its prepared statements, if false, PDO should
- * emulate prepare and bind on its behalf */
- unsigned supports_placeholders:2;
-
- /* if true, commit or rollBack is allowed to be called */
- unsigned in_txn:1;
-
- /* max length a single character can become after correct quoting */
- unsigned max_escaped_char_length:3;
-
- /* when set, convert empty strings to NULL */
- unsigned oracle_nulls:1;
-
- /* the sum of the number of bits here and the bit fields preceeding should
- * equal 32 */
- unsigned _reserved_flags:21;
-
- /* data source string used to open this handle */
- const char *data_source;
- unsigned long data_source_len;
-
- /* the global error code. */
- enum pdo_error_type error_code;
-
- enum pdo_error_mode error_mode;
-
- enum pdo_case_conversion native_case, desired_case;
-
-#if 0
- /* persistent hash key associated with this handle */
- const char *persistent_id;
- /* and the list id associated with it */
- int persistent_rsrc_id;
-#endif
-};
-
-/* describes a column */
-struct pdo_column_data {
- char *name;
- long namelen;
- unsigned long maxlen;
- enum pdo_param_type param_type;
- unsigned long precision;
-};
-
-/* describes a bound parameter */
-struct pdo_bound_param_data {
- long paramno; /* if -1, then it has a name, and we don't know the index *yet* */
- char *name;
- long namelen;
-
- long max_value_len; /* as a hint for pre-allocation */
-
- zval *parameter; /* the variable itself */
- enum pdo_param_type param_type; /* desired or suggested type */
-
- zval *driver_params; /* optional parameter(s) for the driver */
- void *driver_data;
-
- pdo_stmt_t *stmt; /* for convenience in dtor */
- int is_param; /* parameter or column ? */
-};
-
-/* represents a prepared statement */
-struct _pdo_stmt_t {
- /* driver specifics */
- struct pdo_stmt_methods *methods;
- void *driver_data;
-
- /* if true, we've already successfully executed this statement at least
- * once */
- unsigned executed:1;
- unsigned _reserved:31;
-
- /* the number of columns in the result set; not valid until after
- * the statement has been executed at least once. In some cases, might
- * not be valid until fetch (at the driver level) has been called at least once.
- * */
- int column_count;
- struct pdo_column_data *columns;
-
- /* we want to keep the dbh alive while we live, so we own a reference */
- zval database_object_handle;
- pdo_dbh_t *dbh;
-
- /* keep track of bound input parameters. Some drivers support
- * input/output parameters, but you can't rely on that working */
- HashTable *bound_params;
- /* keep track of PHP variables bound to named (or positional) columns
- * in the result set */
- HashTable *bound_columns;
-
- /* not always meaningful */
- long row_count;
-
- /* used to hold the statement's current query */
- char *query_string;
- int query_stringlen;
-
- /* the copy of the query with expanded binds ONLY for emulated-prepare drivers */
- char *active_query_string;
- int active_query_stringlen;
-
- /* the cursor specific error code. */
- enum pdo_error_type error_code;
-
- /* for lazy fetches, we always return the same lazy object handle.
- * Let's keep it here. */
- zval lazy_object_ref;
- unsigned long refcount;
-};
-
-/* call this in MINIT to register your PDO driver */
-PDO_API int php_pdo_register_driver(pdo_driver_t *driver);
-/* call this in MSHUTDOWN to unregister your PDO driver */
-PDO_API void php_pdo_unregister_driver(pdo_driver_t *driver);
-
-/* For the convenience of drivers, this function will parse a data source
- * string, of the form "name=value; name2=value2" and populate variables
- * according to the data you pass in and array of pdo_data_src_parser structures */
-struct pdo_data_src_parser {
- const char *optname;
- char *optval;
- int freeme;
-};
-
-PDO_API int php_pdo_parse_data_source(const char *data_source,
- unsigned long data_source_len, struct pdo_data_src_parser *parsed,
- int nparams);
-
-PDO_API zend_class_entry *php_pdo_get_exception(void);
-
-#endif /* PHP_PDO_DRIVER_H */
-/*
- * 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/php_pdo_int.h b/ext/pdo/php_pdo_int.h
deleted file mode 100755
index 882ee904e1..0000000000
--- a/ext/pdo/php_pdo_int.h
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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> |
- | Marcus Boerger <helly@php.net> |
- | Sterling Hughes <sterling@php.net> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-/* Stuff private to the PDO extension and not for consumption by PDO drivers
- * */
-extern zend_class_entry *pdo_exception_ce;
-
-extern zend_object_value pdo_dbh_new(zend_class_entry *ce TSRMLS_DC);
-extern function_entry pdo_dbh_functions[];
-extern zend_class_entry *pdo_dbh_ce;
-
-extern zend_object_value pdo_dbstmt_new(zend_class_entry *ce TSRMLS_DC);
-extern function_entry pdo_dbstmt_functions[];
-extern zend_class_entry *pdo_dbstmt_ce;
-void pdo_dbstmt_free_storage(zend_object *object TSRMLS_DC);
-extern zend_object_handlers pdo_dbstmt_object_handlers;
-
-extern zend_object_value pdo_row_new(zend_class_entry *ce TSRMLS_DC);
-extern function_entry pdo_row_functions[];
-extern zend_class_entry *pdo_row_ce;
-void pdo_row_free_storage(zend_object *object TSRMLS_DC);
-extern zend_object_handlers pdo_row_object_handlers;
-
-
-extern pdo_driver_t *pdo_find_driver(const char *name, int namelen);
-
-extern void pdo_handle_error(pdo_dbh_t *dbh, pdo_stmt_t *stmt TSRMLS_DC);
-
-#define PDO_DBH_CLEAR_ERR() dbh->error_code = PDO_ERR_NONE
-#define PDO_STMT_CLEAR_ERR() stmt->error_code = PDO_ERR_NONE
-#define PDO_HANDLE_DBH_ERR() if (dbh->error_code) { pdo_handle_error(dbh, NULL TSRMLS_CC); }
-#define PDO_HANDLE_STMT_ERR() if (stmt->error_code) { pdo_handle_error(stmt->dbh, stmt TSRMLS_CC); }
-
-
-/*
- * 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/php_pdo_sql_parser.h b/ext/pdo/php_pdo_sql_parser.h
deleted file mode 100644
index 4bb92cc212..0000000000
--- a/ext/pdo/php_pdo_sql_parser.h
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: George Schlossnagle <george@omniti.com> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifndef PHP_PDO_MYSQL_SQL_PARSER_H
-#define PHP_PDO_MYSQL_SQL_PARSER_H
-#include "php.h"
-int pdo_parse_params(pdo_stmt_t *stmt, char *inquery, int inquery_len, char **outquery,
- int *outquery_len);
-
-#endif
diff --git a/ext/pdo_firebird/CREDITS b/ext/pdo_firebird/CREDITS
deleted file mode 100644
index a33294b69c..0000000000
--- a/ext/pdo_firebird/CREDITS
+++ /dev/null
@@ -1,2 +0,0 @@
-Firebird/InterBase driver for PDO
-Ard Biesheuvel
diff --git a/ext/pdo_firebird/EXPERIMENTAL b/ext/pdo_firebird/EXPERIMENTAL
deleted file mode 100644
index e69de29bb2..0000000000
--- a/ext/pdo_firebird/EXPERIMENTAL
+++ /dev/null
diff --git a/ext/pdo_firebird/config.m4 b/ext/pdo_firebird/config.m4
deleted file mode 100644
index 8af5e9b6d0..0000000000
--- a/ext/pdo_firebird/config.m4
+++ /dev/null
@@ -1,49 +0,0 @@
-dnl
-dnl $Id$
-dnl
-
-PHP_ARG_WITH(pdo-firebird,for Firebird support for PDO,
-[ --with-pdo-firebird[=DIR] Include Firebird support for PDO. DIR is the Firebird base
- install directory, defaults to /opt/firebird])
-
-if test "$PHP_PDO_FIREBIRD" != "no"; then
- if test "$PHP_PDO_FIREBIRD" = "yes"; then
- FIREBIRD_INCDIR=/opt/firebird/include
- FIREBIRD_LIBDIR=/opt/firebird/lib
- else
- FIREBIRD_INCDIR=$PHP_PDO_FIREBIRD/include
- FIREBIRD_LIBDIR=$PHP_PDO_FIREBIRD/lib
- fi
-
- PHP_CHECK_LIBRARY(gds, isc_detach_database,
- [
- FIREBIRD_LIBNAME=gds
- ], [
- PHP_CHECK_LIBRARY(ib_util, isc_detach_database,
- [
- FIREBIRD_LIBNAME=ib_util
- ], [
- AC_MSG_ERROR([libgds or libib_util not found! Check config.log for more information.])
- ], [
- -L$FIREBIRD_LIBDIR
- ])
- ], [
- -L$FIREBIRD_LIBDIR
- ])
-
- if test -f $prefix/include/php/ext/pdo/php_pdo_driver.h; then
- pdo_inc_path=$prefix/include/php/ext
- elif test -f $abs_srcdir/include/php/ext/pdo/php_pdo_driver.h; then
- pdo_inc_path=$abs_srcdir/ext
- elif test -f ext/pdo/php_pdo_driver.h; then
- pdo_inc_path=ext
- else
- AC_MSG_ERROR([Cannot find php_pdo_driver.h.])
- fi
-
- PHP_ADD_LIBRARY_WITH_PATH($FIREBIRD_LIBNAME, $FIREBIRD_LIBDIR, PDO_FIREBIRD_SHARED_LIBADD)
- PHP_ADD_INCLUDE($FIREBIRD_INCDIR)
- AC_DEFINE(HAVE_PDO_FIREBIRD,1,[ ])
- PHP_NEW_EXTENSION(pdo_firebird, pdo_firebird.c firebird_driver.c firebird_statement.c, $ext_shared,,-I$pdo_inc_path)
- PHP_SUBST(PDO_FIREBIRD_SHARED_LIBADD)
-fi
diff --git a/ext/pdo_firebird/config.w32 b/ext/pdo_firebird/config.w32
deleted file mode 100644
index 30b87c2d1d..0000000000
--- a/ext/pdo_firebird/config.w32
+++ /dev/null
@@ -1,18 +0,0 @@
-// $Id$
-// vim:ft=javascript
-
-ARG_WITH("pdo-firebird", "Firebird support for PDO", "no");
-
-if (PHP_PDO_FIREBIRD != "no") {
-
- if ((CHECK_LIB("fbclient_ms.lib", "pdo_firebird", PHP_PHP_BUILD + "\\interbase\\lib_ms;" + PHP_PDO_FIREBIRD)
- || CHECK_LIB("gds32_ms.lib", "pdo_firebird", PHP_PHP_BUILD + "\\interbase\\lib_ms;" + PHP_PDO_FIREBIRD)
- ) && CHECK_HEADER_ADD_INCLUDE("ibase.h", "CFLAGS_PDO_FIREBIRD", PHP_PHP_BUILD + "\\interbase\\include;" + PHP_PDO_FIREBIRD)) {
-
- EXTENSION("pdo_firebird", "pdo_firebird.c firebird_driver.c firebird_statement.c");
- ADD_FLAG('CFLAGS_PDO_FIREBIRD', "/I ..\\pecl");
- } else {
- WARNING("pdo_firebird not enabled; libraries and headers not found");
- }
- ADD_EXTENSION_DEP('pdo_firebird', 'pdo');
-}
diff --git a/ext/pdo_firebird/firebird_driver.c b/ext/pdo_firebird/firebird_driver.c
deleted file mode 100644
index 251e80ef5f..0000000000
--- a/ext/pdo_firebird/firebird_driver.c
+++ /dev/null
@@ -1,659 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Ard Biesheuvel <abies@php.net> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#define _GNU_SOURCE
-
-#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_firebird.h"
-#include "php_pdo_firebird_int.h"
-
-static int firebird_alloc_prepare_stmt(pdo_dbh_t*, const char*, long, XSQLDA*, isc_stmt_handle*,
- HashTable* TSRMLS_DC);
-
-/* map driver specific error message to PDO error */
-void _firebird_error(pdo_dbh_t *dbh, pdo_stmt_t *stmt, char const *file, long line TSRMLS_DC) /* {{{ */
-{
- pdo_firebird_db_handle *H = stmt ? ((pdo_firebird_stmt *)stmt->driver_data)->H
- : (pdo_firebird_db_handle *)dbh->driver_data;
- enum pdo_error_type *const error_code = stmt ? &stmt->error_code : &dbh->error_code;
-
- switch (isc_sqlcode(H->isc_status)) {
-
- case 0:
- *error_code = PDO_ERR_NONE;
- break;
- default:
- *error_code = PDO_ERR_CANT_MAP;
- break;
- case -104:
- *error_code = PDO_ERR_SYNTAX;
- break;
- case -530:
- case -803:
- *error_code = PDO_ERR_CONSTRAINT;
- break;
- case -204:
- case -205:
- case -206:
- case -829:
- *error_code = PDO_ERR_NOT_FOUND;
- break;
-
- *error_code = PDO_ERR_ALREADY_EXISTS;
- break;
-
- *error_code = PDO_ERR_NOT_IMPLEMENTED;
- break;
- case -313:
- case -804:
- *error_code = PDO_ERR_MISMATCH;
- break;
- case -303:
- case -314:
- case -413:
- *error_code = PDO_ERR_TRUNCATED;
- break;
-
- *error_code = PDO_ERR_DISCONNECTED;
- break;
- }
-}
-/* }}} */
-
-#define RECORD_ERROR(dbh) _firebird_error(dbh, NULL, __FILE__, __LINE__ TSRMLS_CC)
-
-/* called by PDO to close a db handle */
-static int firebird_handle_closer(pdo_dbh_t *dbh TSRMLS_DC) /* {{{ */
-{
- pdo_firebird_db_handle *H = (pdo_firebird_db_handle *)dbh->driver_data;
-
- if (dbh->in_txn) {
- if (dbh->auto_commit) {
- if (isc_commit_transaction(H->isc_status, &H->tr)) {
- RECORD_ERROR(dbh);
- }
- } else {
- if (isc_rollback_transaction(H->isc_status, &H->tr)) {
- RECORD_ERROR(dbh);
- }
- }
- }
-
- if (isc_detach_database(H->isc_status, &H->db)) {
- RECORD_ERROR(dbh);
- }
-
- pefree(H, dbh->is_persistent);
-
- return 0;
-}
-/* }}} */
-
-/* called by PDO to prepare an SQL query */
-static int firebird_handle_preparer(pdo_dbh_t *dbh, const char *sql, long sql_len, /* {{{ */
- pdo_stmt_t *stmt, long options, zval *driver_options TSRMLS_DC)
-{
- pdo_firebird_db_handle *H = (pdo_firebird_db_handle *)dbh->driver_data;
- pdo_firebird_stmt *S = NULL;
- HashTable *np;
-
- do {
- isc_stmt_handle s = NULL;
- XSQLDA num_sqlda;
- static char const info[] = { isc_info_sql_stmt_type };
- char result[8];
-
- num_sqlda.version = PDO_FB_SQLDA_VERSION;
- num_sqlda.sqln = 1;
-
- ALLOC_HASHTABLE(np);
- zend_hash_init(np, 8, NULL, NULL, 0);
-
- /* allocate and prepare statement */
- if (!firebird_alloc_prepare_stmt(dbh, sql, sql_len, &num_sqlda, &s, np TSRMLS_CC)) {
- break;
- }
-
- /* allocate a statement handle struct of the right size (struct out_sqlda is inlined) */
- S = ecalloc(1, sizeof(*S)-sizeof(XSQLDA) + XSQLDA_LENGTH(num_sqlda.sqld));
- S->H = H;
- S->stmt = s;
- S->fetch_buf = ecalloc(1,sizeof(char*) * num_sqlda.sqld);
- S->out_sqlda.version = PDO_FB_SQLDA_VERSION;
- S->out_sqlda.sqln = stmt->column_count = num_sqlda.sqld;
- S->named_params = np;
-
- /* determine the statement type */
- if (isc_dsql_sql_info(H->isc_status, &s, sizeof(info), const_cast(info), sizeof(result),
- result)) {
- break;
- }
- S->statement_type = result[3];
-
- /* fill the output sqlda with information about the prepared query */
- if (isc_dsql_describe(H->isc_status, &s, PDO_FB_SQLDA_VERSION, &S->out_sqlda)) {
- RECORD_ERROR(dbh);
- break;
- }
-
- /* allocate the input descriptors */
- if (isc_dsql_describe_bind(H->isc_status, &s, PDO_FB_SQLDA_VERSION, &num_sqlda)) {
- break;
- }
-
- if (num_sqlda.sqld) {
- S->in_sqlda = ecalloc(1,XSQLDA_LENGTH(num_sqlda.sqld));
- S->in_sqlda->version = PDO_FB_SQLDA_VERSION;
- S->in_sqlda->sqln = num_sqlda.sqld;
-
- if (isc_dsql_describe_bind(H->isc_status, &s, PDO_FB_SQLDA_VERSION, S->in_sqlda)) {
- break;
- }
- }
-
- stmt->driver_data = S;
- stmt->methods = &firebird_stmt_methods;
-
- return 1;
-
- } while (0);
-
- RECORD_ERROR(dbh);
-
- zend_hash_destroy(np);
- FREE_HASHTABLE(np);
-
- if (S) {
- if (S->in_sqlda) {
- efree(S->in_sqlda);
- }
- efree(S);
- }
-
- return 0;
-}
-/* }}} */
-
-/* called by PDO to execute a statement that doesn't produce a result set */
-static long firebird_handle_doer(pdo_dbh_t *dbh, const char *sql, long sql_len TSRMLS_DC) /* {{{ */
-{
- pdo_firebird_db_handle *H = (pdo_firebird_db_handle *)dbh->driver_data;
- isc_stmt_handle stmt = NULL;
- static char const info_count[] = { isc_info_sql_records };
- char result[64];
- int ret = 0;
- XSQLDA in_sqlda, out_sqlda;
-
- /* TODO no placeholders in exec() for now */
- in_sqlda.version = out_sqlda.version = PDO_FB_SQLDA_VERSION;
- in_sqlda.sqld = out_sqlda.sqld = 0;
-
- /* allocate and prepare statement */
- if (!firebird_alloc_prepare_stmt(dbh, sql, sql_len, &out_sqlda, &stmt, 0 TSRMLS_CC)) {
- return -1;
- }
-
- /* execute the statement */
- if (isc_dsql_execute2(H->isc_status, &H->tr, &stmt, PDO_FB_SQLDA_VERSION, &in_sqlda, &out_sqlda)) {
- RECORD_ERROR(dbh);
- return -1;
- }
-
- /* find out how many rows were affected */
- if (isc_dsql_sql_info(H->isc_status, &stmt, sizeof(info_count), const_cast(info_count),
- sizeof(result), result)) {
- RECORD_ERROR(dbh);
- return -1;
- }
-
- if (result[0] == isc_info_sql_records) {
- unsigned i = 3, result_size = isc_vax_integer(&result[1],2);
-
- while (result[i] != isc_info_end && i < result_size) {
- short len = (short)isc_vax_integer(&result[i+1],2);
- if (result[i] != isc_info_req_select_count) {
- ret += isc_vax_integer(&result[i+3],len);
- }
- i += len+3;
- }
- }
-
- /* commit if we're in auto_commit mode */
- if (dbh->auto_commit && isc_commit_retaining(H->isc_status, &H->tr)) {
- RECORD_ERROR(dbh);
- }
-
- return ret;
-}
-/* }}} */
-
-/* called by the PDO SQL parser to add quotes to values that are copied into SQL */
-static int firebird_handle_quoter(pdo_dbh_t *dbh, const char *unquoted, int unquotedlen, /* {{{ */
- char **quoted, int *quotedlen TSRMLS_DC)
-{
- int qcount = 0;
- char const *c;
-
- /* Firebird only requires single quotes to be doubled if string lengths are used */
-
- /* count the number of ' characters */
- for (c = unquoted; (c = strchr(c,'\'')); qcount++, c++);
-
- if (!qcount) {
- return 0;
- } else {
- char const *l, *r;
- char *c;
-
- *quotedlen = unquotedlen + qcount;
- *quoted = c = emalloc(*quotedlen+1);
-
- /* foreach (chunk that ends in a quote) */
- for (l = unquoted; (r = strchr(l,'\'')); l = r+1) {
-
- /* copy the chunk */
- strncpy(c, l, r-l);
- c += (r-l);
-
- /* add the second quote */
- *c++ = '\'';
- }
-
- /* copy the remainder */
- strncpy(c, l, *quotedlen-(c-*quoted));
-
- return 1;
- }
-}
-/* }}} */
-
-/* called by PDO to start a transaction */
-static int firebird_handle_begin(pdo_dbh_t *dbh TSRMLS_DC) /* {{{ */
-{
- pdo_firebird_db_handle *H = (pdo_firebird_db_handle *)dbh->driver_data;
- char tpb[8] = { isc_tpb_version3 }, *ptpb = tpb+1;
-#if abies_0
- if (dbh->transaction_flags & PDO_TRANS_ISOLATION_LEVEL) {
- if (dbh->transaction_flags & PDO_TRANS_READ_UNCOMMITTED) {
- /* this is a poor fit, but it's all we have */
- *ptpb++ = isc_tpb_read_committed;
- *ptpb++ = isc_tpb_rec_version;
- dbh->transaction_flags &= ~(PDO_TRANS_ISOLATION_LEVEL^PDO_TRANS_READ_UNCOMMITTED);
- } else if (dbh->transaction_flags & PDO_TRANS_READ_COMMITTED) {
- *ptpb++ = isc_tpb_read_committed;
- *ptpb++ = isc_tpb_no_rec_version;
- dbh->transaction_flags &= ~(PDO_TRANS_ISOLATION_LEVEL^PDO_TRANS_READ_COMMITTED);
- } else if (dbh->transaction_flags & PDO_TRANS_REPEATABLE_READ) {
- *ptpb++ = isc_tpb_concurrency;
- dbh->transaction_flags &= ~(PDO_TRANS_ISOLATION_LEVEL^PDO_TRANS_REPEATABLE_READ);
- } else {
- *ptpb++ = isc_tpb_consistency;
- dbh->transaction_flags &= ~(PDO_TRANS_ISOLATION_LEVEL^PDO_TRANS_SERIALIZABLE);
- }
- }
-
- if (dbh->transaction_flags & PDO_TRANS_ACCESS_MODE) {
- if (dbh->transaction_flags & PDO_TRANS_READONLY) {
- *ptpb++ = isc_tpb_read;
- dbh->transaction_flags &= ~(PDO_TRANS_ACCESS_MODE^PDO_TRANS_READONLY);
- } else {
- *ptpb++ = isc_tpb_write;
- dbh->transaction_flags &= ~(PDO_TRANS_ACCESS_MODE^PDO_TRANS_READWRITE);
- }
- }
-
- if (dbh->transaction_flags & PDO_TRANS_CONFLICT_RESOLUTION) {
- if (dbh->transaction_flags & PDO_TRANS_RETRY) {
- *ptpb++ = isc_tpb_wait;
- dbh->transaction_flags &= ~(PDO_TRANS_CONFLICT_RESOLUTION^PDO_TRANS_RETRY);
- } else {
- *ptpb++ = isc_tpb_nowait;
- dbh->transaction_flags &= ~(PDO_TRANS_CONFLICT_RESOLUTION^PDO_TRANS_ABORT);
- }
- }
-#endif
- if (isc_start_transaction(H->isc_status, &H->tr, 1, &H->db, (unsigned short)(ptpb-tpb), tpb)) {
- RECORD_ERROR(dbh);
- return 0;
- }
- return 1;
-}
-/* }}} */
-
-/* called by PDO to commit a transaction */
-static int firebird_handle_commit(pdo_dbh_t *dbh TSRMLS_DC) /* {{{ */
-{
- pdo_firebird_db_handle *H = (pdo_firebird_db_handle *)dbh->driver_data;
-
- if (isc_commit_transaction(H->isc_status, &H->tr)) {
- RECORD_ERROR(dbh);
- return 0;
- }
- return 1;
-}
-/* }}} */
-
-/* called by PDO to rollback a transaction */
-static int firebird_handle_rollback(pdo_dbh_t *dbh TSRMLS_DC) /* {{{ */
-{
- pdo_firebird_db_handle *H = (pdo_firebird_db_handle *)dbh->driver_data;
-
- if (isc_rollback_transaction(H->isc_status, &H->tr)) {
- RECORD_ERROR(dbh);
- return 0;
- }
- return 1;
-}
-/* }}} */
-
-/* used by prepare and exec to allocate a statement handle and prepare the SQL */
-static int firebird_alloc_prepare_stmt(pdo_dbh_t *dbh, const char *sql, long sql_len, /* {{{ */
- XSQLDA *out_sqlda, isc_stmt_handle *s, HashTable *named_params TSRMLS_DC)
-{
- pdo_firebird_db_handle *H = (pdo_firebird_db_handle *)dbh->driver_data;
- char *c, *new_sql, in_quote, in_param, pname[64], *ppname;
- long l, pindex = -1;
-
- /* Firebird allows SQL statements up to 64k, so bail if it doesn't fit */
- if (sql_len > SHORT_MAX) {
- dbh->error_code = PDO_ERR_TRUNCATED;
- return 0;
- }
-
- /* start a new transaction implicitly if auto_commit is enabled and no transaction is open */
- if (dbh->auto_commit && !dbh->in_txn) {
- /* dbh->transaction_flags = PDO_TRANS_READ_UNCOMMITTED; */
-
- if (!firebird_handle_begin(dbh TSRMLS_CC)) {
- return 0;
- }
- dbh->in_txn = 1;
- }
-
- /* allocate the statement */
- if (isc_dsql_allocate_statement(H->isc_status, &H->db, s)) {
- RECORD_ERROR(dbh);
- return 0;
- }
-
- /* in order to support named params, which Firebird itself doesn't,
- we need to replace :foo by ?, and store the name we just replaced */
- new_sql = c = emalloc(sql_len+1);
-
- for (l = in_quote = in_param = 0; l <= sql_len; ++l) {
- if ( !(in_quote ^= (sql[l] == '\''))) {
- if (!in_param) {
- switch (sql[l]) {
- case ':':
- in_param = 1;
- ppname = pname;
- case '?':
- *c++ = '?';
- ++pindex;
- continue;
- }
- } else {
- if ((in_param &= (sql[l] == '_') || (sql[l] >= 'A' && sql[l] <= 'Z')
- || (sql[l] >= 'a' && sql[l] <= 'z') || (sql[l] >= '0' && sql[l] <= '9'))) {
- *ppname++ = sql[l];
- continue;
- } else {
- *ppname++ = 0;
- if (named_params) {
- zend_hash_update(named_params, pname, (unsigned int)(ppname-pname),
- (void*)&pindex, sizeof(long)+1,NULL);
- }
- }
- }
- }
- *c++ = sql[l];
- }
-
- /* prepare the statement */
- if (isc_dsql_prepare(H->isc_status, &H->tr, s, 0, new_sql, PDO_FB_DIALECT, out_sqlda)) {
- RECORD_ERROR(dbh);
- efree(new_sql);
- return 0;
- }
-
- efree(new_sql);
- return 1;
-}
-/* }}} */
-
-/* called by PDO to set a driver-specific dbh attribute */
-static int firebird_handle_set_attribute(pdo_dbh_t *dbh, long attr, zval *val TSRMLS_DC) /* {{{ */
-{
- pdo_firebird_db_handle *H = (pdo_firebird_db_handle *)dbh->driver_data;
-
- switch (attr) {
- case PDO_ATTR_AUTOCOMMIT:
-
- convert_to_boolean(val);
-
- /* ignore if the new value equals the old one */
- if (dbh->auto_commit ^ Z_BVAL_P(val)) {
- if (dbh->in_txn) {
- if (Z_BVAL_P(val)) {
- /* turning on auto_commit with an open transaction is illegal, because
- we won't know what to do with it */
- H->last_app_error = "Cannot enable auto-commit while a transaction is already open";
- return 0;
- } else {
- /* close the transaction */
- if (!firebird_handle_commit(dbh TSRMLS_CC)) {
- break;
- }
- dbh->in_txn = 0;
- }
- }
- dbh->auto_commit = Z_BVAL_P(val);
- }
- return 1;
- }
- return 0;
-}
-/* }}} */
-
-/* callback to used to report database server info */
-static void firebird_info_cb(void *arg, char const *s) /* {{{ */
-{
- if (arg) {
- if (*(char*)arg) { /* second call */
- strcat(arg, " ");
- }
- strcat(arg, s);
- }
-}
-/* }}} */
-
-/* called by PDO to get a driver-specific dbh attribute */
-static int firebird_handle_get_attribute(pdo_dbh_t const *dbh, long attr, zval *val TSRMLS_DC) /* {{{ */
-{
- pdo_firebird_db_handle *H = (pdo_firebird_db_handle *)dbh->driver_data;
-
- switch (attr) {
- char tmp[200];
-
- case PDO_ATTR_AUTOCOMMIT:
- ZVAL_LONG(val,dbh->auto_commit);
- return 1;
-
- case PDO_ATTR_CONNECTION_STATUS:
- ZVAL_BOOL(val, !isc_version(&H->db, firebird_info_cb, NULL));
- return 1;
-
- case PDO_ATTR_CLIENT_VERSION: {
-#if defined(__GNUC__) || defined(PHP_WIN32)
- info_func_t info_func = NULL;
-#ifdef __GNUC__
- info_func = (info_func_t)dlsym(RTLD_DEFAULT, "isc_get_client_version");
-#else
- HMODULE l = GetModuleHandle("fbclient");
-
- if (!l && !(l = GetModuleHandle("gds32"))) {
- break;
- }
- info_func = (info_func_t)GetProcAddress(l, "isc_get_client_version");
-#endif
- if (info_func) {
- info_func(tmp);
- ZVAL_STRING(val,tmp,1);
- } else {
- ZVAL_STRING(val,"Firebird 1.0/Interbase 6",1);
- }
-#else
- ZVAL_NULL(val);
-#endif
- }
- return 1;
-
- case PDO_ATTR_SERVER_VERSION:
- case PDO_ATTR_SERVER_INFO:
- *tmp = 0;
-
- if (!isc_version(&H->db, firebird_info_cb, (void*)tmp)) {
- ZVAL_STRING(val,tmp,1);
- return 1;
- }
- }
- return 0;
-}
-/* }}} */
-
-/* called by PDO to retrieve driver-specific information about an error that has occurred */
-static int pdo_firebird_fetch_error_func(pdo_dbh_t *dbh, pdo_stmt_t *stmt, zval *info TSRMLS_DC) /* {{{ */
-{
- pdo_firebird_db_handle *H = (pdo_firebird_db_handle *)dbh->driver_data;
- ISC_STATUS *s = H->isc_status;
- char buf[400];
- long i = 0, l, sqlcode = isc_sqlcode(s);
-
- if (sqlcode) {
- add_next_index_long(info, sqlcode);
-
- while ((l = isc_interprete(&buf[i],&s))) {
- i += l;
- strcpy(&buf[i++], " ");
- }
- add_next_index_string(info, buf, 1);
- } else {
- add_next_index_long(info, -999);
- add_next_index_string(info, const_cast(H->last_app_error),1);
- }
- return 1;
-}
-/* }}} */
-
-static struct pdo_dbh_methods firebird_methods = { /* {{{ */
- firebird_handle_closer,
- firebird_handle_preparer,
- firebird_handle_doer,
- firebird_handle_quoter,
- firebird_handle_begin,
- firebird_handle_commit,
- firebird_handle_rollback,
- firebird_handle_set_attribute,
- NULL, /* last_id not supported */
- pdo_firebird_fetch_error_func,
- firebird_handle_get_attribute,
-};
-/* }}} */
-
-/* the driver-specific PDO handle constructor */
-static int pdo_firebird_handle_factory(pdo_dbh_t *dbh, zval *driver_options TSRMLS_DC) /* {{{ */
-{
- struct pdo_data_src_parser vars[] = {
- { "dbname", NULL, 0 },
- { "charset", NULL, 0 },
- { "role", NULL, 0 }
- };
- int i, ret = 0;
- pdo_firebird_db_handle *H = dbh->driver_data = pecalloc(1,sizeof(*H),dbh->is_persistent);
-
- php_pdo_parse_data_source(dbh->data_source, dbh->data_source_len, vars, 2);
-
- do {
- static char const dpb_flags[] = {
- isc_dpb_user_name, isc_dpb_password, isc_dpb_lc_ctype, isc_dpb_sql_role_name };
- char const *dpb_values[] = { dbh->username, dbh->password, vars[1].optval, vars[2].optval };
- char dpb_buffer[256] = { isc_dpb_version1 }, *dpb;
-
- dpb = dpb_buffer + 1;
-
- /* loop through all the provided arguments and set dpb fields accordingly */
- for (i = 0; i < sizeof(dpb_flags); ++i) {
- if (dpb_values[i]) {
- dpb += sprintf(dpb, "%c%c%s", dpb_flags[i], (unsigned char)strlen(dpb_values[i]),
- dpb_values[i]);
- }
- }
-
- /* fire it up baby! */
- if (isc_attach_database(H->isc_status, 0, vars[0].optval, &H->db,(short)(dpb-dpb_buffer),
- dpb_buffer)) {
- break;
- }
-
- dbh->methods = &firebird_methods;
- dbh->supports_placeholders = PDO_PLACEHOLDER_POSITIONAL;
- dbh->native_case = PDO_CASE_UPPER;
- dbh->alloc_own_columns = 1;
-
- ret = 1;
-
- } while (0);
-
- for (i = 0; i < sizeof(vars)/sizeof(vars[0]); ++i) {
- if (vars[i].freeme) {
- efree(vars[i].optval);
- }
- }
-
- if (!ret) {
- firebird_handle_closer(dbh TSRMLS_CC);
- }
-
- return ret;
-}
-/* }}} */
-
-pdo_driver_t pdo_firebird_driver = { /* {{{ */
- PDO_DRIVER_HEADER(firebird),
- pdo_firebird_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_firebird/firebird_statement.c b/ext/pdo_firebird/firebird_statement.c
deleted file mode 100644
index ee325453ec..0000000000
--- a/ext/pdo_firebird/firebird_statement.c
+++ /dev/null
@@ -1,696 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Ard Biesheuvel <abies@php.net> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#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_firebird.h"
-#include "php_pdo_firebird_int.h"
-
-#include <time.h>
-
-#define RECORD_ERROR(stmt) _firebird_error(NULL, stmt, __FILE__, __LINE__ TSRMLS_CC)
-
-/* free the allocated space for passing field values to the db and back */
-static void free_sqlda(XSQLDA const *sqlda) /* {{{ */
-{
- int i;
-
- for (i = 0; i < sqlda->sqld; ++i) {
- XSQLVAR const *var = &sqlda->sqlvar[i];
-
- if (var->sqlind) {
- efree(var->sqlind);
- }
- }
-}
-/* }}} */
-
-/* called by PDO to clean up a statement handle */
-static int firebird_stmt_dtor(pdo_stmt_t *stmt TSRMLS_DC) /* {{{ */
-{
- pdo_firebird_stmt *S = (pdo_firebird_stmt*)stmt->driver_data;
- int result = 1, i;
-
- /* release the statement */
- if (isc_dsql_free_statement(S->H->isc_status, &S->stmt, DSQL_drop)) {
- RECORD_ERROR(stmt);
- result = 0;
- }
-
- /* clean up the fetch buffers if they have been used */
- for (i = 0; i < S->out_sqlda.sqld; ++i) {
- if (S->fetch_buf[i]) {
- efree(S->fetch_buf[i]);
- }
- }
- efree(S->fetch_buf);
-
- zend_hash_destroy(S->named_params);
- FREE_HASHTABLE(S->named_params);
-
- /* clean up the input descriptor */
- if (S->in_sqlda) {
- free_sqlda(S->in_sqlda);
- efree(S->in_sqlda);
- }
-
- free_sqlda(&S->out_sqlda);
- efree(S);
-
- return result;
-}
-/* }}} */
-
-/* called by PDO to execute a prepared query */
-static int firebird_stmt_execute(pdo_stmt_t *stmt TSRMLS_DC) /* {{{ */
-{
- pdo_firebird_stmt *S = (pdo_firebird_stmt*)stmt->driver_data;
- pdo_firebird_db_handle *H = S->H;
-
- do {
- /* named cursors should be closed first */
- if (*S->name && isc_dsql_free_statement(H->isc_status, &S->stmt, DSQL_close)) {
- break;
- }
-
- /* assume all params have been bound */
-
- if ((S->statement_type == isc_info_sql_stmt_exec_procedure &&
- isc_dsql_execute2(H->isc_status, &H->tr, &S->stmt, PDO_FB_SQLDA_VERSION,
- S->in_sqlda, &S->out_sqlda))
- || isc_dsql_execute(H->isc_status, &H->tr, &S->stmt, PDO_FB_SQLDA_VERSION,
- S->in_sqlda)) {
- break;
- }
-
- /* commit? */
- if (stmt->dbh->auto_commit && isc_commit_retaining(H->isc_status, &H->tr)) {
- break;
- }
-
- *S->name = 0;
- S->exhausted = 0;
-
- return 1;
- } while (0);
-
- RECORD_ERROR(stmt);
-
- return 0;
-}
-/* }}} */
-
-/* called by PDO to fetch the next row from a statement */
-static int firebird_stmt_fetch(pdo_stmt_t *stmt TSRMLS_DC) /* {{{ */
-{
- pdo_firebird_stmt *S = (pdo_firebird_stmt*)stmt->driver_data;
- pdo_firebird_db_handle *H = S->H;
-
- if (!stmt->executed) {
- stmt->error_code = PDO_ERR_CANT_MAP;
- H->last_app_error = "Cannot fetch from a closed cursor";
- } else if (!S->exhausted) {
-
- /* an EXECUTE PROCEDURE statement can be fetched from once, without calling the API, because
- * the result was returned in the execute call */
- if (S->statement_type == isc_info_sql_stmt_exec_procedure) {
- S->exhausted = 1;
- } else {
- if (isc_dsql_fetch(H->isc_status, &S->stmt, PDO_FB_SQLDA_VERSION, &S->out_sqlda)) {
- if (H->isc_status[0] && H->isc_status[1]) {
- RECORD_ERROR(stmt);
- }
- S->exhausted = 1;
- return 0;
- }
- }
- return 1;
- }
- return 0;
-}
-/* }}} */
-
-/* called by PDO to retrieve information about the fields being returned */
-static int firebird_stmt_describe(pdo_stmt_t *stmt, int colno TSRMLS_DC) /* {{{ */
-{
- pdo_firebird_stmt *S = (pdo_firebird_stmt*)stmt->driver_data;
- struct pdo_column_data *col = &stmt->columns[colno];
- XSQLVAR *var = &S->out_sqlda.sqlvar[colno];
-
- /* allocate storage for the column */
- var->sqlind = (void*)emalloc(var->sqllen + 2*sizeof(short));
- var->sqldata = &((char*)var->sqlind)[sizeof(short)];
-
- col->precision = -var->sqlscale;
- col->maxlen = var->sqllen;
- col->namelen = var->aliasname_length;
- col->name = estrndup(var->aliasname,var->aliasname_length);
-
- return 1;
-}
-/* }}} */
-
-#if abies_0
-/* internal function to override return types of parameters */
-static void set_param_type(enum pdo_param_type *param_type, XSQLVAR const *var) /* {{{ */
-{
- /* set the param type after the field type */
- switch (var->sqltype & ~1) {
- case SQL_INT64:
-#if SIZEOF_LONG < 8
- if (0) /* always a string if its size exceeds native long */
-#endif
- case SQL_SHORT:
- case SQL_LONG:
- if (var->sqlscale == 0) {
- *param_type = PDO_PARAM_INT;
- break;
- }
- case SQL_TEXT:
- case SQL_VARYING:
- case SQL_TYPE_DATE:
- case SQL_TYPE_TIME:
- case SQL_TIMESTAMP:
- case SQL_BLOB:
- *param_type = PDO_PARAM_STR;
- break;
- case SQL_FLOAT:
- case SQL_DOUBLE:
- *param_type = PDO_PARAM_DBL;
- break;
- }
-}
-/* }}} */
-#endif
-
-#define FETCH_BUF(buf,type,len,lenvar) ((buf) = (buf) ? (buf) : \
- emalloc((len) ? (len * sizeof(type)) : ((*(unsigned long*)lenvar) = sizeof(type))))
-
-/* fetch a blob into a fetch buffer */
-static int firebird_fetch_blob(pdo_stmt_t *stmt, int colno, char **ptr, /* {{{ */
- unsigned long *len, ISC_QUAD *blob_id TSRMLS_DC)
-{
- pdo_firebird_stmt *S = (pdo_firebird_stmt*)stmt->driver_data;
- pdo_firebird_db_handle *H = S->H;
- isc_blob_handle blobh = NULL;
- char const bl_item = isc_info_blob_total_length;
- char bl_info[20];
- unsigned short i;
- int result = *len = 0;
-
- if (isc_open_blob(H->isc_status, &H->db, &H->tr, &blobh, blob_id)) {
- RECORD_ERROR(stmt);
- return 0;
- }
-
- if (isc_blob_info(H->isc_status, &blobh, 1, const_cast(&bl_item),
- sizeof(bl_info), bl_info)) {
- RECORD_ERROR(stmt);
- goto fetch_blob_end;
- }
-
- /* find total length of blob's data */
- for (i = 0; i < sizeof(bl_info); ) {
- unsigned short item_len;
- char item = bl_info[i++];
-
- if (item == isc_info_end || item == isc_info_truncated || item == isc_info_error
- || i >= sizeof(bl_info)) {
- H->last_app_error = "Couldn't determine BLOB size";
- goto fetch_blob_end;
- }
-
- item_len = (unsigned short) isc_vax_integer(&bl_info[i], 2);
-
- if (item == isc_info_blob_total_length) {
- *len = isc_vax_integer(&bl_info[i+2], item_len);
- break;
- }
- i += item_len+2;
- }
-
- /* we've found the blob's length, now fetch! */
-
- if (*len) {
- unsigned long cur_len;
- unsigned short seg_len;
- ISC_STATUS stat;
-
- *ptr = S->fetch_buf[colno] = erealloc(*ptr, *len+1);
-
- for (cur_len = stat = 0; (!stat || stat == isc_segment) && cur_len < *len; cur_len += seg_len) {
-
- unsigned short chunk_size = (*len-cur_len) > USHRT_MAX ? USHRT_MAX
- : (unsigned short)(*len-cur_len);
-
- stat = isc_get_segment(H->isc_status, &blobh, &seg_len, chunk_size, &(*ptr)[cur_len]);
- }
-
- (*ptr)[*len++] = '\0';
-
- if (H->isc_status[0] == 1 && (stat != 0 && stat != isc_segstr_eof && stat != isc_segment)) {
- H->last_app_error = "Error reading from BLOB";
- goto fetch_blob_end;
- }
- }
- result = 1;
-
-fetch_blob_end:
- if (isc_close_blob(H->isc_status, &blobh)) {
- RECORD_ERROR(stmt);
- return 0;
- }
- return result;
-}
-/* }}} */
-
-static int firebird_stmt_get_col(pdo_stmt_t *stmt, int colno, char **ptr, /* {{{ */
- unsigned long *len TSRMLS_DC)
-{
- pdo_firebird_stmt *S = (pdo_firebird_stmt*)stmt->driver_data;
- XSQLVAR const *var = &S->out_sqlda.sqlvar[colno];
-
- if (*var->sqlind == -1) {
- /* A NULL value */
- *ptr = NULL;
- *len = 0;
- } else {
- /* override the column param type */
- /* set_param_type(&stmt->columns[colno].param_type,var); */
- stmt->columns[colno].param_type = PDO_PARAM_STR;
-
- if (var->sqlscale < 0) {
- static ISC_INT64 const scales[] = { 1, 10, 100, 1000, 10000, 100000, 1000000,
- 100000000, 1000000000, 1000000000, LL_LIT(10000000000),LL_LIT(100000000000),
- LL_LIT(10000000000000), LL_LIT(100000000000000),LL_LIT(1000000000000000),
- LL_LIT(1000000000000000),LL_LIT(1000000000000000000) };
- ISC_INT64 n, f = scales[-var->sqlscale];
-
- switch (var->sqltype & ~1) {
- case SQL_SHORT:
- n = *(short*)var->sqldata;
- break;
- case SQL_LONG:
- n = *(ISC_LONG*)var->sqldata;
- break;
- case SQL_INT64:
- n = *(ISC_INT64*)var->sqldata;
- }
-
- *ptr = FETCH_BUF(S->fetch_buf[colno], char, 24, NULL);
-
- if (n >= 0) {
- *len = sprintf(*ptr, "%" LL_MASK "d.%0*" LL_MASK "d",
- n / f, -var->sqlscale, n % f);
- } else if (n < -f) {
- *len = sprintf(*ptr, "%" LL_MASK "d.%0*" LL_MASK "d",
- n / f, -var->sqlscale, -n % f);
- } else {
- *len = sprintf(*ptr, "-0.%0*" LL_MASK "d", -var->sqlscale, -n % f);
- }
- } else {
- switch (var->sqltype & ~1) {
- struct tm t;
- char *fmt;
-
-/**
-* For the time being, this code has been changed to convert every returned value to a string
-* before passing it back up to the PDO driver.
-*/
-
- case SQL_VARYING:
- *ptr = &var->sqldata[2];
- *len = *(short*)var->sqldata;
- break;
- case SQL_TEXT:
- *ptr = var->sqldata;
- *len = var->sqllen;
- break;
-// --- cut here ---
- case SQL_SHORT:
- *ptr = FETCH_BUF(S->fetch_buf[colno], char, 24, NULL);
- *len = sprintf(*ptr, "%d", *(short*)var->sqldata);
- break;
- case SQL_LONG:
- *ptr = FETCH_BUF(S->fetch_buf[colno], char, 24, NULL);
- *len = sprintf(*ptr, "%ld", *(ISC_LONG*)var->sqldata);
- break;
- case SQL_INT64:
- *ptr = FETCH_BUF(S->fetch_buf[colno], char, 24, NULL);
- *len = sprintf(*ptr, "%" LL_MASK "d", *(ISC_INT64*)var->sqldata);
- break;
- case SQL_FLOAT:
- *ptr = FETCH_BUF(S->fetch_buf[colno], char, 24, NULL);
- *len = sprintf(*ptr, "%f", *(float*)var->sqldata);
- break;
- case SQL_DOUBLE:
- *ptr = FETCH_BUF(S->fetch_buf[colno], char, 24, NULL);
- *len = sprintf(*ptr, "%f" , *(double*)var->sqldata);
- break;
-// --- cut here ---
-#if abies_0
- case SQL_SHORT:
- *ptr = FETCH_BUF(S->fetch_buf[colno], long, 0, *len);
- *(long*)*ptr = *(short*)var->sqldata;
- break;
- case SQL_LONG:
-#if SIZEOF_LONG == 8
- *ptr = FETCH_BUF(S->fetch_buf[colno], long, 0, *len);
- *(long*)*ptr = *(ISC_LONG*)var->sqldata;
-#else
- *ptr = var->sqldata;
-#endif
- break;
- case SQL_INT64:
- *len = sizeof(long);
-#if SIZEOF_LONG == 8
- *ptr = var->sqldata;
-#else
- *ptr = FETCH_BUF(S->fetch_buf[colno], char, 20, NULL);
- *len = sprintf(*ptr, "%" LL_MASK "d", *(ISC_INT64*)var->sqldata);
-#endif
- break;
- case SQL_FLOAT:
- *ptr = FETCH_BUF(S->fetch_buf[colno], double, 0, *len);
- *(double*)*ptr = *(float*)var->sqldata;
- break;
- case SQL_DOUBLE:
- *ptr = var->sqldata;
- *len = sizeof(double);
- break;
-#endif
- case SQL_TYPE_DATE:
- isc_decode_sql_date((ISC_DATE*)var->sqldata, &t);
- fmt = INI_STR("ibase.dateformat");
- if (0) {
- case SQL_TYPE_TIME:
- isc_decode_sql_time((ISC_TIME*)var->sqldata, &t);
- fmt = INI_STR("ibase.timeformat");
- } else if (0) {
- case SQL_TIMESTAMP:
- isc_decode_timestamp((ISC_TIMESTAMP*)var->sqldata, &t);
- fmt = INI_STR("ibase.timestampformat");
- }
-
- /* convert the timestamp into a string */
- *ptr = FETCH_BUF(S->fetch_buf[colno], char, *len = 80, NULL);
- *len = strftime(*ptr, *len, fmt, &t);
- break;
- case SQL_BLOB:
- return firebird_fetch_blob(stmt,colno,ptr,len,
- (ISC_QUAD*)var->sqldata TSRMLS_CC);
- }
- }
- }
- return 1;
-}
-/* }}} */
-
-static int firebird_bind_blob(pdo_stmt_t *stmt, ISC_QUAD *blob_id, zval *param TSRMLS_DC)
-{
- pdo_firebird_stmt *S = (pdo_firebird_stmt*)stmt->driver_data;
- pdo_firebird_db_handle *H = S->H;
- isc_blob_handle h = NULL;
- unsigned long put_cnt = 0, rem_cnt;
- unsigned short chunk_size;
- int result = 1;
-
- if (isc_create_blob(H->isc_status, &H->db, &H->tr, &h, blob_id)) {
- RECORD_ERROR(stmt);
- return 0;
- }
-
- SEPARATE_ZVAL(&param);
-
- convert_to_string_ex(&param);
-
- for (rem_cnt = Z_STRLEN_P(param); rem_cnt > 0; rem_cnt -= chunk_size) {
-
- chunk_size = rem_cnt > USHRT_MAX ? USHRT_MAX : (unsigned short)rem_cnt;
-
- if (isc_put_segment(H->isc_status, &h, chunk_size, &Z_STRVAL_P(param)[put_cnt])) {
- RECORD_ERROR(stmt);
- result = 0;
- break;
- }
- put_cnt += chunk_size;
- }
-
- zval_dtor(param);
-
- if (isc_close_blob(H->isc_status, &h)) {
- RECORD_ERROR(stmt);
- return 0;
- }
- return result;
-}
-
-static int firebird_stmt_param_hook(pdo_stmt_t *stmt, struct pdo_bound_param_data *param, /* {{{ */
- enum pdo_param_event event_type TSRMLS_DC)
-{
- pdo_firebird_stmt *S = (pdo_firebird_stmt*)stmt->driver_data;
- XSQLDA *sqlda = param->is_param ? S->in_sqlda : &S->out_sqlda;
- XSQLVAR *var;
-
- if (event_type == PDO_PARAM_EVT_FREE) { /* not used */
- return 1;
- }
-
- if (!sqlda || param->paramno >= sqlda->sqld) {
- stmt->error_code = PDO_ERR_NOT_FOUND;
- S->H->last_app_error = "Invalid parameter index";
- return 0;
- }
- if (param->is_param && param->paramno == -1) {
- long *index;
-
- /* try to determine the index by looking in the named_params hash */
- if (SUCCESS == zend_hash_find(S->named_params, param->name, param->namelen+1, (void*)&index)) {
- param->paramno = *index;
- } else {
- /* ... or by looking in the input descriptor */
- int i;
-
- for (i = 0; i < sqlda->sqld; ++i) {
- XSQLVAR *var = &sqlda->sqlvar[i];
-
- if ((var->aliasname_length && !strncasecmp(param->name, var->aliasname,
- min(param->namelen, var->aliasname_length)))
- || (var->sqlname_length && !strncasecmp(param->name, var->sqlname,
- min(param->namelen, var->sqlname_length)))) {
- param->paramno = i;
- break;
- }
- }
- if (i >= sqlda->sqld) {
- stmt->error_code = PDO_ERR_NOT_FOUND;
- S->H->last_app_error = "Invalid parameter name";
- return 0;
- }
- }
- }
-
- var = &sqlda->sqlvar[param->paramno];
-
- switch (event_type) {
- char *value;
- unsigned long value_len;
-
- case PDO_PARAM_EVT_ALLOC:
- if (param->is_param) {
- /* allocate the parameter */
- var->sqlind = (void*)emalloc(var->sqllen + 2*sizeof(short));
- var->sqldata = &((char*)var->sqlind)[sizeof(short)];
- }
- break;
-
- case PDO_PARAM_EVT_EXEC_PRE:
- if (!param->is_param) {
- break;
- }
-
- *var->sqlind = 0;
-
- switch (var->sqltype & ~1) {
- case SQL_ARRAY:
- stmt->error_code = PDO_ERR_NOT_IMPLEMENTED;
- S->H->last_app_error = "Cannot bind to array field";
- return 0;
-
- case SQL_BLOB:
- return firebird_bind_blob(stmt, (ISC_QUAD*)var->sqldata,
- param->parameter TSRMLS_CC);
- }
-
- /* check if a NULL should be inserted */
- switch (Z_TYPE_P(param->parameter)) {
- int force_null;
-
- case IS_LONG:
- var->sqltype = sizeof(long) == 8 ? SQL_INT64 : SQL_LONG;
- var->sqldata = (void*)&Z_LVAL_P(param->parameter);
- var->sqllen = sizeof(long);
- break;
- case IS_DOUBLE:
- var->sqltype = SQL_DOUBLE;
- var->sqldata = (void*)&Z_DVAL_P(param->parameter);
- var->sqllen = sizeof(double);
- break;
- case IS_STRING:
- force_null = 0;
-
- /* for these types, an empty string can be handled like a NULL value */
- switch (var->sqltype & ~1) {
- case SQL_SHORT:
- case SQL_LONG:
- case SQL_INT64:
- case SQL_FLOAT:
- case SQL_DOUBLE:
- case SQL_TIMESTAMP:
- case SQL_TYPE_DATE:
- case SQL_TYPE_TIME:
- force_null = (Z_STRLEN_P(param->parameter) == 0);
- }
- if (!force_null) {
- var->sqltype = SQL_TEXT;
- var->sqldata = Z_STRVAL_P(param->parameter);
- var->sqllen = Z_STRLEN_P(param->parameter);
- break;
- }
- case IS_NULL:
- /* complain if this field doesn't allow NULL values */
- if (~var->sqltype & 1) {
- stmt->error_code = PDO_ERR_CONSTRAINT;
- S->H->last_app_error = "Parameter requires non-null value";
- return 0;
- }
- *var->sqlind = -1;
- break;
- default:
- stmt->error_code = PDO_ERR_NOT_IMPLEMENTED;
- S->H->last_app_error = "Binding arrays/objects is not supported";
- return 0;
- }
- break;
-
- case PDO_PARAM_EVT_FETCH_POST:
- value = NULL;
- value_len = 0;
-
- if (firebird_stmt_get_col(stmt, param->paramno, &value, &value_len TSRMLS_CC)) {
- switch (param->param_type) {
- case PDO_PARAM_STR:
- if (value) {
- ZVAL_STRINGL(param->parameter, value, value_len, 1);
- break;
- }
- case PDO_PARAM_INT:
- if (value) {
- ZVAL_LONG(param->parameter, *(long*)value);
- break;
- }
-#if abies_0
- case PDO_PARAM_DBL:
- if (value) {
- ZVAL_DOUBLE(param->parameter, *(double*)value);
- break;
- }
-#endif
- default:
- ZVAL_NULL(param->parameter);
- }
- return 1;
- }
- return 0;
- default:
- ;
- }
- return 1;
-}
-/* }}} */
-
-static int firebird_stmt_set_attribute(pdo_stmt_t *stmt, long attr, zval *val TSRMLS_DC) /* {{{ */
-{
- pdo_firebird_stmt *S = (pdo_firebird_stmt*)stmt->driver_data;
-
- switch (attr) {
- default:
- return 0;
- case PDO_ATTR_CURSOR_NAME:
- convert_to_string(val);
-
- if (isc_dsql_set_cursor_name(S->H->isc_status, &S->stmt, Z_STRVAL_P(val),0)) {
- RECORD_ERROR(stmt);
- return 0;
- }
- strncpy(S->name, Z_STRVAL_P(val), sizeof(S->name));
- S->name[sizeof(S->name)] = 0;
- break;
- }
- return 1;
-}
-/* }}} */
-
-static int firebird_stmt_get_attribute(pdo_stmt_t *stmt, long attr, zval *val TSRMLS_DC) /* {{{ */
-{
- pdo_firebird_stmt *S = (pdo_firebird_stmt*)stmt->driver_data;
-
- switch (attr) {
- default:
- return 0;
- case PDO_ATTR_CURSOR_NAME:
- if (*S->name) {
- ZVAL_STRING(val,S->name,1);
- } else {
- ZVAL_NULL(val);
- }
- break;
- }
- return 1;
-}
-/* }}} */
-
-struct pdo_stmt_methods firebird_stmt_methods = { /* {{{ */
- firebird_stmt_dtor,
- firebird_stmt_execute,
- firebird_stmt_fetch,
- firebird_stmt_describe,
- firebird_stmt_get_col,
- firebird_stmt_param_hook,
- firebird_stmt_set_attribute,
- firebird_stmt_get_attribute
-};
-/* }}} */
-
-/*
- * 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_firebird/package.xml b/ext/pdo_firebird/package.xml
deleted file mode 100644
index 92973b9b12..0000000000
--- a/ext/pdo_firebird/package.xml
+++ /dev/null
@@ -1,55 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-<!DOCTYPE package SYSTEM "../pear/package.dtd">
-<package version="1.0"><!-- $Id: package.xml,v 1.5 2004-06-23 13:42:06 abies Exp $ -->
- <name>PDO_FIREBIRD</name>
- <summary>Firebird/InterBase 6 driver for PDO</summary>
- <maintainers>
- <maintainer>
- <user>abies</user>
- <name>Ard Biesheuvel</name>
- <email>abies@php.net</email>
- <role>lead</role>
- </maintainer>
- </maintainers>
- <configureoptions>
- <configureoption name="with-pdo-firebird" prompt="dir"/>
-</configureoptions>
- <description>
- This extension provides a Firebird/InterBase driver for PDO. It supports
- all versions of Firebird and InterBase versions 6 and up.
- </description>
- <license>PHP</license>
- <release>
- <state>alpha</state>
- <version>0.1</version>
- <date>2004-06-23</date>
-
- <notes>
- To compile and run this module, you will need to have the main PDO module and Firebird's
- or InterBase's client library installed on your system.
- </notes>
-
- <filelist>
- <file role="doc" name="CREDITS"/>
-
- <file role="src" name="config.m4"/>
- <file role="src" name="config.w32"/>
- <file role="src" name="firebird_driver.c"/>
- <file role="src" name="firebird_statement.c"/>
- <file role="src" name="pdo_firebird.c"/>
- <file role="src" name="php_pdo_firebird.h"/>
- <file role="src" name="php_pdo_firebird_int.h"/>
-
- <dir name="tests">
- <file role="test">connect.phpt</file>
- <file role="test">ddl.phpt</file>
- <file role="test">execute.phpt</file>
- </dir>
-
- </filelist>
- <deps>
- <dep type="php" rel="ge" version="5.0.0"/>
- <dep type="ext" rel="ge" name="pdo" version="0.1"/>
- </deps>
- </release>
-</package>
diff --git a/ext/pdo_firebird/pdo_firebird.c b/ext/pdo_firebird/pdo_firebird.c
deleted file mode 100644
index 4e63546942..0000000000
--- a/ext/pdo_firebird/pdo_firebird.c
+++ /dev/null
@@ -1,87 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Ard Biesheuvel <abies@php.net> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#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_firebird.h"
-#include "php_pdo_firebird_int.h"
-
-function_entry pdo_firebird_functions[] = { /* {{{ */
- {NULL, NULL, NULL}
-};
-/* }}} */
-
-zend_module_entry pdo_firebird_module_entry = { /* {{{ */
- STANDARD_MODULE_HEADER,
- "PDO_Firebird",
- pdo_firebird_functions,
- PHP_MINIT(pdo_firebird),
- PHP_MSHUTDOWN(pdo_firebird),
- NULL,
- NULL,
- PHP_MINFO(pdo_firebird),
- "0.1",
- STANDARD_MODULE_PROPERTIES
-};
-/* }}} */
-
-#ifdef COMPILE_DL_PDO_FIREBIRD
-ZEND_GET_MODULE(pdo_firebird)
-#endif
-
-PHP_MINIT_FUNCTION(pdo_firebird) /* {{{ */
-{
- php_pdo_register_driver(&pdo_firebird_driver);
-
- return SUCCESS;
-}
-/* }}} */
-
-PHP_MSHUTDOWN_FUNCTION(pdo_firebird) /* {{{ */
-{
- php_pdo_unregister_driver(&pdo_firebird_driver);
-
- return SUCCESS;
-}
-/* }}} */
-
-PHP_MINFO_FUNCTION(pdo_firebird) /* {{{ */
-{
- php_info_print_table_start();
- php_info_print_table_header(2, "PDO Driver for Firebird/InterBase", "enabled");
- php_info_print_table_end();
-}
-/* }}} */
-
-/*
- * 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_firebird/php_pdo_firebird.h b/ext/pdo_firebird/php_pdo_firebird.h
deleted file mode 100644
index 83b2e9304a..0000000000
--- a/ext/pdo_firebird/php_pdo_firebird.h
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Ard Biesheuvel <abies@php.net> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifndef PHP_PDO_FIREBIRD_H
-#define PHP_PDO_FIREBIRD_H
-
-extern zend_module_entry pdo_firebird_module_entry;
-#define phpext_pdo_firebird_ptr &pdo_firebird_module_entry
-
-#ifdef PHP_WIN32
-# ifdef PDO_FIREBIRD_EXPORTS
-# define PDO_FB_API __declspec(dllexport)
-# elif defined(COMPILE_DL_PDO_FIREBIRD)
-# define PDO_FB_API __declspec(dllimport)
-# else
-# define PDO_FB_API
-# endif
-#else
-# define PDO_FB_API
-#endif
-
-#ifdef ZTS
-#include "TSRM.h"
-#endif
-
-PHP_MINIT_FUNCTION(pdo_firebird);
-PHP_MSHUTDOWN_FUNCTION(pdo_firebird);
-PHP_RINIT_FUNCTION(pdo_firebird);
-PHP_RSHUTDOWN_FUNCTION(pdo_firebird);
-PHP_MINFO_FUNCTION(pdo_firebird);
-
-#endif /* PHP_PDO_FIREBIRD_H */
-
-/*
- * 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_firebird/php_pdo_firebird_int.h b/ext/pdo_firebird/php_pdo_firebird_int.h
deleted file mode 100644
index 7e0e2e66a8..0000000000
--- a/ext/pdo_firebird/php_pdo_firebird_int.h
+++ /dev/null
@@ -1,127 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Ard Biesheuvel <abies@php.net> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifndef PHP_PDO_FIREBIRD_INT_H
-#define PHP_PDO_FIREBIRD_INT_H
-
-#include <ibase.h>
-
-#ifdef SQLDA_VERSION
-#define PDO_FB_SQLDA_VERSION SQLDA_VERSION
-#else
-#define PDO_FB_SQLDA_VERSION 1
-#endif
-
-#define PDO_FB_DIALECT 3
-
-#define SHORT_MAX (1 << (8*sizeof(short)-1))
-
-#if SIZEOF_LONG == 8
-# define LL_MASK l
-# define LL_LIT(lit) lit ## L
-#else
-# ifdef PHP_WIN32
-# define LL_MASK "I64"
-# define LL_LIT(lit) lit ## I64
-# else
-# define LL_MASK "ll"
-# define LL_LIT(lit) lit ## LL
-# endif
-#endif
-
-/* Firebird API has a couple of missing const decls in its API */
-#define const_cast(s) ((char*)(s))
-
-#ifdef PHP_WIN32
-typedef void (__stdcall *info_func_t)(char*);
-#else
-typedef void (*info_func_t)(char*);
-#endif
-
-#ifndef min
-#define min(a,b) ((a)<(b)?(a):(b))
-#endif
-
-typedef struct {
-
- /* the result of the last API call */
- ISC_STATUS isc_status[20];
-
- /* the connection handle */
- isc_db_handle db;
-
- /* the transaction handle */
- isc_tr_handle tr;
-
- /* the last error that didn't come from the API */
- char const *last_app_error;
-
-} pdo_firebird_db_handle;
-
-
-typedef struct {
-
- /* the link that owns this statement */
- pdo_firebird_db_handle *H;
-
- /* the statement handle */
- isc_stmt_handle stmt;
-
- /* the name of the cursor (if it has one) */
- char name[32];
-
- /* the type of statement that was issued */
- char statement_type:8;
-
- /* whether EOF was reached for this statement */
- unsigned exhausted:1;
-
- unsigned _reserved:23;
-
- /* the named params that were converted to ?'s by the driver */
- HashTable *named_params;
-
- /* allocated space to convert fields values to other types */
- char **fetch_buf;
-
- /* the input SQLDA */
- XSQLDA *in_sqlda;
-
- /* the output SQLDA */
- XSQLDA out_sqlda; /* last member */
-
-} pdo_firebird_stmt;
-
-extern pdo_driver_t pdo_firebird_driver;
-
-extern struct pdo_stmt_methods firebird_stmt_methods;
-
-void _firebird_error(pdo_dbh_t *dbh, pdo_stmt_t *stmt, char const *file, long line TSRMLS_DC);
-
-#endif /* PHP_PDO_FIREBIRD_INT_H */
-
-/*
- * 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_firebird/tests/connect.phpt b/ext/pdo_firebird/tests/connect.phpt
deleted file mode 100644
index e4bb8ef54e..0000000000
--- a/ext/pdo_firebird/tests/connect.phpt
+++ /dev/null
@@ -1,16 +0,0 @@
---TEST--
-PDO_Firebird: connect/disconnect
---SKIPIF--
-<?php include("skipif.inc"); ?>
---FILE--
-<?php /* $Id$ */
-
- require("testdb.inc");
-
- $db = new PDO("firebird:dbname=$test_base",$user,$password) or die;
- unset($db);
- echo "done\n";
-
-?>
---EXPECT--
-done
diff --git a/ext/pdo_firebird/tests/ddl.phpt b/ext/pdo_firebird/tests/ddl.phpt
deleted file mode 100644
index 7709bb3f07..0000000000
--- a/ext/pdo_firebird/tests/ddl.phpt
+++ /dev/null
@@ -1,37 +0,0 @@
---TEST--
-PDO_Firebird: DDL/transactions
---SKIPIF--
-<?php include("skipif.inc"); ?>
---FILE--
-<?php /* $Id$ */
-
- require("testdb.inc");
-
- $db = new PDO("firebird:dbname=$test_base",$user,$password) or die;
- $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->beginTransaction();
- var_dump($db->exec("INSERT INTO ddl (text) VALUES ('bla')"));
- var_dump($db->exec("UPDATE ddl SET text='blabla'"));
- $db->rollback();
-
- $db->beginTransaction();
- var_dump($db->exec("DELETE FROM ddl"));
- $db->commit();
-
- unset($db);
- echo "done\n";
-
-?>
---EXPECT--
-int(1)
-int(1)
-int(0)
-done
diff --git a/ext/pdo_firebird/tests/execute.phpt b/ext/pdo_firebird/tests/execute.phpt
deleted file mode 100644
index 8975048325..0000000000
--- a/ext/pdo_firebird/tests/execute.phpt
+++ /dev/null
@@ -1,65 +0,0 @@
---TEST--
-PDO_Firebird: prepare/execute/binding
---SKIPIF--
-<?php include("skipif.inc"); ?>
---INI--
-ibase.timestampformat=%Y-%m-%d %H:%M:%S
---FILE--
-<?php /* $Id$ */
-
- require("testdb.inc");
-
- $db = new PDO("firebird:dbname=$test_base",$user,$password) or die;
-
- var_dump($db->getAttribute(PDO_ATTR_CONNECTION_STATUS));
-
- $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)");
- $db->exec("INSERT INTO ddl (id,text) VALUES (1,'bla')");
-
- $s = $db->prepare("SELECT * FROM ddl WHERE id=? FOR UPDATE");
-
- $s->bindParam(1,$id = 0);
- $s->bindColumn("TEXT",$var = null);
- $id = 1;
- $s->execute();
- $s->setAttribute(PDO_ATTR_CURSOR_NAME, "c");
-
- var_dump($id);
-
- var_dump($s->fetch());
-
- var_dump($var);
-
- var_dump($db->exec("UPDATE ddl SET id=2 WHERE CURRENT OF c"));
-
- var_dump($s->fetch());
-
- unset($s);
- unset($db);
- echo "done\n";
-
-?>
---EXPECT--
-bool(true)
-int(1)
-array(6) {
- ["ID"]=>
- string(1) "1"
- [0]=>
- string(1) "1"
- ["TEXT"]=>
- string(3) "bla"
- [1]=>
- string(3) "bla"
- ["DATETIME"]=>
- string(19) "2000-02-12 00:00:00"
- [2]=>
- string(19) "2000-02-12 00:00:00"
-}
-string(3) "bla"
-int(1)
-bool(false)
-done
diff --git a/ext/pdo_firebird/tests/skipif.inc b/ext/pdo_firebird/tests/skipif.inc
deleted file mode 100644
index 5a6cd372d1..0000000000
--- a/ext/pdo_firebird/tests/skipif.inc
+++ /dev/null
@@ -1,5 +0,0 @@
-<?php /* $Id$ */
-
-if (!extension_loaded("interbase") || !extension_loaded("pdo_firebird")) print "skip";
-
-?>
diff --git a/ext/pdo_firebird/tests/testdb.inc b/ext/pdo_firebird/tests/testdb.inc
deleted file mode 100644
index f6951a7b13..0000000000
--- a/ext/pdo_firebird/tests/testdb.inc
+++ /dev/null
@@ -1,34 +0,0 @@
-<?php /* $Id$ */
-
-$user = 'SYSDBA';
-$password = 'masterkey';
-ini_set('ibase.default_user',$user);
-ini_set('ibase.default_password',$password);
-
-/* we need just the generated name, not the file itself */
-unlink($test_base = tempnam('/tmp',"php_ibase_test"));
-
-function init_db()
-{
- global $test_base, $user, $password;
-
- $test_db = ibase_query(IBASE_CREATE,sprintf("CREATE DATABASE '%s' USER '%s' PASSWORD '%s'",
- $test_base, $user, $password));
- $tr = ibase_trans($test_db);
- ibase_query($tr,"create table test1 (i integer, c varchar(100))");
- ibase_commit_ret($tr);
- ibase_query($tr,"insert into test1(i, c) values(1, 'test table not created with isql')");
- ibase_commit($tr);
- ibase_close($test_db);
-}
-
-function cleanup_db()
-{
- global $test_base;
-
- $r = ibase_connect($test_base);
- ibase_drop_db($r);
-}
-
-register_shutdown_function('cleanup_db');
-init_db();
diff --git a/ext/pdo_mysql/CREDITS b/ext/pdo_mysql/CREDITS
deleted file mode 100755
index 0735d9a1e8..0000000000
--- a/ext/pdo_mysql/CREDITS
+++ /dev/null
@@ -1,2 +0,0 @@
-mySQL 3.x driver for PDO
-George Schlossnagle
diff --git a/ext/pdo_mysql/config.m4 b/ext/pdo_mysql/config.m4
deleted file mode 100755
index 3b93869599..0000000000
--- a/ext/pdo_mysql/config.m4
+++ /dev/null
@@ -1,71 +0,0 @@
-dnl
-dnl $Id$
-dnl
-
-AC_DEFUN(MYSQL_LIB_CHK, [
- str="$MYSQL_DIR/$1/libmysqlclient.*"
- for j in `echo $str`; do
- if test -r $j; then
- MYSQL_LIB_DIR=$MYSQL_DIR/$1
- break 2
- fi
- done
-])
-
-PHP_ARG_WITH(pdo-mysql, for MySQL support for PDO,
-[ --with-pdo-mysql[=DIR] Include MySQL support. DIR is the MySQL base directory.])
-
-if test "$PHP_PDO_MYSQL" != "no"; then
- AC_DEFINE(HAVE_MYSQL, 1, [Whether you have MySQL])
-
- for i in $PHP_PDO_MYSQL /usr/local /usr ; do
- MYSQL_DIR=$i
- PDO_MYSQL_CONFIG=$MYSQL_DIR/bin/mysql_config
- if test -r $i/include/mysql; then
- MYSQL_INC_DIR=$i/include/mysql
- else
- MYSQL_INC_DIR=$i/include
- fi
- if test -r $i/lib/mysql; then
- MYSQL_LIBS=$i/lib/mysql
- else
- MYSQL_LIBS=$i/lib
- fi
- if test -x $PDO_MYSQL_CONFIG; then
- break
- fi
- done
-
- if test -z "$MYSQL_DIR"; then
- AC_MSG_ERROR([Cannot find MySQL header files under $PHP_MYSQL.
-Note that the MySQL client library is not bundled anymore.])
- fi
-
- PDO_MYSQL_LIBS=`$PDO_MYSQL_CONFIG --libs`
- PDO_MYSQL_SOCKET=`$PDO_MYSQL_CONFIG --socket`
-
- AC_DEFINE_UNQUOTED(PDO_MYSQL_UNIX_ADDR, "$PDO_MYSQL_SOCKET", [ ])
-
- PHP_ADD_LIBRARY_WITH_PATH(mysqlclient, $MYSQL_LIBS, PDO_MYSQL_SHARED_LIBADD)
- PHP_ADD_INCLUDE($MYSQL_INC_DIR)
-
- if test -f $prefix/include/php/ext/pdo/php_pdo_driver.h; then
- pdo_inc_path=$prefix/include/php/ext
- elif test -f $abs_srcdir/include/php/ext/pdo/php_pdo_driver.h; then
- pdo_inc_path=$abs_srcdir/ext
- elif test -f ext/pdo/php_pdo_driver.h; then
- pdo_inc_path=ext
- else
- AC_MSG_ERROR([Cannot find php_pdo_driver.h.])
- fi
-
- PHP_NEW_EXTENSION(pdo_mysql, pdo_mysql.c mysql_driver.c mysql_statement.c, $ext_shared,,-I$pdo_inc_path)
- PHP_ADD_EXTENSION_DEP(pdo_mysql, pdo)
- PDO_MYSQL_MODULE_TYPE=external
- PDO_MYSQL_INCLUDE=-I$MYSQL_INC_DIR
-
- PHP_SUBST(PDO_MYSQL_SHARED_LIBADD)
- PHP_SUBST_OLD(PDO_MYSQL_MODULE_TYPE)
- PHP_SUBST_OLD(PDO_MYSQL_LIBS)
- PHP_SUBST_OLD(PDO_MYSQL_INCLUDE)
-fi
diff --git a/ext/pdo_mysql/config.w32 b/ext/pdo_mysql/config.w32
deleted file mode 100644
index 24b2f7cf53..0000000000
--- a/ext/pdo_mysql/config.w32
+++ /dev/null
@@ -1,15 +0,0 @@
-// $Id$
-// vim:ft=javascript
-
-ARG_WITH("pdo-mysql", "MySQL support for PDO", "no");
-
-if (PHP_PDO_MYSQL != "no") {
- if (CHECK_LIB("libmysql.lib", "pdo_mysql", PHP_PDO_MYSQL) &&
- CHECK_HEADER_ADD_INCLUDE("mysql.h", "CFLAGS_PDO_MYSQL", PHP_PHP_BUILD + "\\include\\mysql;" + PHP_PDO_MYSQL)) {
- EXTENSION("pdo_mysql", "pdo_mysql.c mysql_driver.c mysql_statement.c");
- ADD_FLAG('CFLAGS_PDO_MYSQL', "/I ..\\pecl");
- } else {
- WARNING("pdo_mysql not enabled; libraries and headers not found");
- }
- ADD_EXTENSION_DEP('pdo_mysql', 'pdo');
-}
diff --git a/ext/pdo_mysql/mysql_driver.c b/ext/pdo_mysql/mysql_driver.c
deleted file mode 100755
index 876f1767fe..0000000000
--- a/ext/pdo_mysql/mysql_driver.c
+++ /dev/null
@@ -1,344 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: George Schlossnagle <george@omniti.com> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#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_mysql.h"
-#include "php_pdo_mysql_int.h"
-#include "zend_exceptions.h"
-
-int _pdo_mysql_error(pdo_dbh_t *dbh, pdo_stmt_t *stmt, const char *file, int line TSRMLS_DC) /* {{{ */
-{
- pdo_mysql_db_handle *H = (pdo_mysql_db_handle *)dbh->driver_data;
- enum pdo_error_type *pdo_err = stmt ? &stmt->error_code : &dbh->error_code;
- pdo_mysql_error_info *einfo = &H->einfo;
-
- einfo->errcode = mysql_errno(H->server);
- einfo->file = file;
- einfo->line = line;
-
- if (einfo->errmsg) {
- efree(einfo->errmsg);
- einfo->errmsg = NULL;
- }
-
- if (einfo->errcode) {
- einfo->errmsg = estrdup(mysql_error(H->server));
- } else { /* no error */
- *pdo_err = PDO_ERR_NONE;
- return 0;
- }
-
- switch (einfo->errcode) {
- case 1007: /* database already exists */
- case 1050: /* table already exists */
- case 1086: /* file already exists */
- case 1125: /* function already exists */
- *pdo_err = PDO_ERR_ALREADY_EXISTS;
- break;
-
- case 1008: /* database does not exist */
- case 1029: /* view does not exist */
- case 1072: /* key column does not exist */
- case 1091: /* column/key does not exist */
- case 1146: /* table does not exist */
- case 1176: /* key not found in table */
- *pdo_err = PDO_ERR_NOT_FOUND;
- break;
-
- case 1152: /* aborted connection */
- case 1154: /* cannot read from connection pipe */
- case 1184: /* aborted new connection */
- case 1159: /* timeout */
- case 1160: /* timeout */
- case 1161: /* timeout */
- *pdo_err = PDO_ERR_DISCONNECTED;
- break;
-
- case 1089: /* unsupported sub-key */
- case 1163: /* blob/text not supported inside table */
- case 1164: /* no auto-incremenet support */
- case 1174: /* no RAID support */
- case 1178: /* table handler does not support something */
- case 1185: /* binary dump not supported */
- case 1214: /* FULLTEXT not supported */
- case 1235: /* something not supported by MySQL version */
- *pdo_err = PDO_ERR_NOT_IMPLEMENTED;
- break;
-
- case 1252: /* character set mismatch */
- *pdo_err = PDO_ERR_MISMATCH;
- break;
-
- case 1264: /* data truncated */
- *pdo_err = PDO_ERR_TRUNCATED;
- break;
-
- case 1169: /* unique constraint */
- case 1216: /* foreign key constraint */
- case 1217: /* foreign key constraint */
- *pdo_err = PDO_ERR_CONSTRAINT;
- break;
-
- case 1064: /* query parse error */
- case 1065: /* empty query */
- /* XXX: MySQL has all sorts of errors that can be considered syntax errors, specifically
- dealing with table creation & modifications, do we want to include them here?
- */
- *pdo_err = PDO_ERR_SYNTAX;
- break;
-
- default:
- *pdo_err = PDO_ERR_CANT_MAP;
- break;
- }
-
- if (!dbh->methods) {
- zend_throw_exception_ex(php_pdo_get_exception(), *pdo_err TSRMLS_CC, "[%d] %s",
- einfo->errcode, einfo->errmsg);
- }
-
- return einfo->errcode;
-}
-/* }}} */
-
-static int pdo_mysql_fetch_error_func(pdo_dbh_t *dbh, pdo_stmt_t *stmt, zval *info TSRMLS_DC)
-{
- pdo_mysql_db_handle *H = (pdo_mysql_db_handle *)dbh->driver_data;
- pdo_mysql_error_info *einfo = &H->einfo;
-
- if (einfo->errcode) {
- add_next_index_long(info, einfo->errcode);
- add_next_index_string(info, einfo->errmsg, 1);
- }
-
- return 1;
-}
-
-static int mysql_handle_closer(pdo_dbh_t *dbh TSRMLS_DC) /* {{{ */
-{
- pdo_mysql_db_handle *H = (pdo_mysql_db_handle *)dbh->driver_data;
-
- if (H) {
- if (H->server) {
- mysql_close(H->server);
- H->server = NULL;
- }
- if (H->einfo.errmsg) {
- efree(H->einfo.errmsg);
- H->einfo.errmsg = NULL;
- }
- efree(H);
- dbh->driver_data = NULL;
- }
- return 0;
-}
-/* }}} */
-
-static int mysql_handle_preparer(pdo_dbh_t *dbh, const char *sql, long sql_len, pdo_stmt_t *stmt, long options, zval *driver_options TSRMLS_DC)
-{
- pdo_mysql_db_handle *H = (pdo_mysql_db_handle *)dbh->driver_data;
- pdo_mysql_stmt *S = ecalloc(1, sizeof(pdo_mysql_stmt));
-
- S->H = H;
- stmt->driver_data = S;
- stmt->methods = &mysql_stmt_methods;
-
- return 1;
-}
-
-static long mysql_handle_doer(pdo_dbh_t *dbh, const char *sql, long sql_len TSRMLS_DC)
-{
- pdo_mysql_db_handle *H = (pdo_mysql_db_handle *)dbh->driver_data;
-
- if (mysql_real_query(H->server, sql, sql_len)) {
- pdo_mysql_error(dbh);
- return -1;
- } else {
- return mysql_affected_rows(H->server);
- }
-}
-
-static long pdo_mysql_last_insert_id(pdo_dbh_t *dbh TSRMLS_DC)
-{
- pdo_mysql_db_handle *H = (pdo_mysql_db_handle *)dbh->driver_data;
-
- return (long) mysql_insert_id(H->server);
-}
-
-static int mysql_handle_quoter(pdo_dbh_t *dbh, const char *unquoted, int unquotedlen, char **quoted, int *quotedlen TSRMLS_DC)
-{
- pdo_mysql_db_handle *H = (pdo_mysql_db_handle *)dbh->driver_data;
- *quoted = emalloc(2*unquotedlen + 3);
- (*quoted)[0] = '"';
- *quotedlen = mysql_real_escape_string(H->server, *quoted + 1, unquoted, unquotedlen);
- (*quoted)[*quotedlen + 1] = '"';
- (*quoted)[*quotedlen + 2] = '\0';
- *quotedlen += 2;
- return 1;
-}
-
-static int pdo_mysql_get_attribute(pdo_dbh_t *dbh, long attr, zval *return_value TSRMLS_DC)
-{
- pdo_mysql_db_handle *H = (pdo_mysql_db_handle *)dbh->driver_data;
-
- switch (attr) {
- case PDO_ATTR_CLIENT_VERSION:
- ZVAL_STRING(return_value, (char *)mysql_get_client_info(), 1);
- break;
-
- case PDO_ATTR_SERVER_VERSION:
- ZVAL_STRING(return_value, (char *)mysql_get_server_info(H->server), 1);
- break;
-
- case PDO_ATTR_CONNECTION_STATUS:
- ZVAL_STRING(return_value, (char *)mysql_get_host_info(H->server), 1);
- break;
-
- case PDO_ATTR_SERVER_INFO: {
- char *tmp;
-
- if ((tmp = (char *)mysql_stat(H->server))) {
- ZVAL_STRING(return_value, tmp, 1);
- } else {
- pdo_mysql_error(dbh);
- return -1;
- }
- }
- break;
-
- default:
- return 0;
- }
-
- return 1;
-}
-
-static struct pdo_dbh_methods mysql_methods = {
- mysql_handle_closer,
- mysql_handle_preparer,
- mysql_handle_doer,
- mysql_handle_quoter,
- NULL,
- NULL,
- NULL,
- NULL,
- pdo_mysql_last_insert_id,
- pdo_mysql_fetch_error_func,
- pdo_mysql_get_attribute
-};
-
-#ifndef PDO_MYSQL_UNIX_ADDR
-# define PDO_MYSQL_UNIX_ADDR "MySQL"
-#endif
-
-static int pdo_mysql_handle_factory(pdo_dbh_t *dbh, zval *driver_options TSRMLS_DC) /* {{{ */
-{
- pdo_mysql_db_handle *H;
- int i, ret = 0;
- char *host = NULL, *unix_socket = NULL;
- unsigned int port;
- char *dbname;
- struct pdo_data_src_parser vars[] = {
- { "charset", NULL, 0 },
- { "dbname", "", 0 },
- { "host", "localhost", 0 },
- { "port", "3306", 0 },
- { "unix_socket", PDO_MYSQL_UNIX_ADDR, 0 },
- };
-
- php_pdo_parse_data_source(dbh->data_source, dbh->data_source_len, vars, 4);
-
- H = pecalloc(1, sizeof(pdo_mysql_db_handle), dbh->is_persistent);
-
- H->einfo.errcode = 0;
- H->einfo.errmsg = NULL;
-
- /* allocate an environment */
-
- /* handle for the server */
- H->server = mysql_init(NULL);
- dbh->driver_data = H;
-
- /* handle MySQL options */
- if (driver_options) {
- long connect_timeout = pdo_attr_lval(driver_options, PDO_ATTR_TIMEOUT, 30 TSRMLS_CC);
-
- if (mysql_options(H->server, MYSQL_OPT_CONNECT_TIMEOUT, (const char *)&connect_timeout)) {
- pdo_mysql_error(dbh);
- goto cleanup;
- }
- }
-
- if (vars[2].optval && strcmp("localhost", vars[2].optval)) {
- host = vars[2].optval;
- port = atoi(vars[3].optval);
- } else {
- host = ".";
- unix_socket = vars[4].optval;
- }
- dbname = vars[1].optval;
- if (mysql_real_connect(H->server, host, dbh->username, dbh->password, dbname, port, unix_socket, 0) == NULL) {
- pdo_mysql_error(dbh);
- goto cleanup;
- }
-
- H->attached = 1;
-
- dbh->alloc_own_columns = 1;
- dbh->supports_placeholders = 0;
- dbh->max_escaped_char_length = 2;
- dbh->methods = &mysql_methods;
-
- ret = 1;
-
-cleanup:
- for (i = 0; i < sizeof(vars)/sizeof(vars[0]); i++) {
- if (vars[i].freeme) {
- efree(vars[i].optval);
- }
- }
-
- dbh->methods = &mysql_methods;
-
- return ret;
-}
-/* }}} */
-
-pdo_driver_t pdo_mysql_driver = {
- PDO_DRIVER_HEADER(mysql),
- pdo_mysql_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_mysql/mysql_statement.c b/ext/pdo_mysql/mysql_statement.c
deleted file mode 100755
index 0714debe25..0000000000
--- a/ext/pdo_mysql/mysql_statement.c
+++ /dev/null
@@ -1,169 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: George Schlossnagle <george@omniti.com> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#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_mysql.h"
-#include "php_pdo_mysql_int.h"
-
-
-static int pdo_mysql_stmt_dtor(pdo_stmt_t *stmt TSRMLS_DC)
-{
- pdo_mysql_stmt *S = (pdo_mysql_stmt*)stmt->driver_data;
- int i;
-
- if (S->result) {
- /* free the resource */
- mysql_free_result(S->result);
- S->result = NULL;
- }
- if(S->cols) {
- efree(S->cols);
- S->cols = NULL;
- }
- efree(S);
- return 1;
-}
-
-static int pdo_mysql_stmt_execute(pdo_stmt_t *stmt TSRMLS_DC)
-{
- pdo_dbh_t *dbh = stmt->dbh;
- pdo_mysql_stmt *S = (pdo_mysql_stmt*)stmt->driver_data;
- pdo_mysql_db_handle *H = S->H;
-
- if (stmt->executed) {
- /* ensure that we free any previous unfetched results */
- if(S->result) {
- mysql_free_result(S->result);
- S->result = NULL;
- }
- }
- if (mysql_real_query(H->server, stmt->active_query_string, stmt->active_query_stringlen) != 0) {
- pdo_mysql_error_stmt(stmt);
- return 0;
- }
- if ((S->result = mysql_use_result(H->server)) == NULL) {
- /* could've been INSERT/UPDATE/DELETE query */
- if (!mysql_affected_rows(H->server)) {
- pdo_mysql_error_stmt(stmt);
- return 0;
- }
- return 1;
- }
- if (!stmt->executed) {
- stmt->column_count = (int) mysql_num_fields(S->result);
- S->cols = ecalloc(stmt->column_count, sizeof(pdo_mysql_column));
- }
- return 1;
-}
-
-static int pdo_mysql_stmt_param_hook(pdo_stmt_t *stmt, struct pdo_bound_param_data *param,
- enum pdo_param_event event_type TSRMLS_DC)
-{
- return 1;
-}
-
-static int pdo_mysql_stmt_fetch(pdo_stmt_t *stmt TSRMLS_DC)
-{
- pdo_mysql_stmt *S = (pdo_mysql_stmt*)stmt->driver_data;
- if (!S->result) {
- return 0;
- }
- if((S->current_data = mysql_fetch_row(S->result)) == NULL) {
- /* there seems to be no way of distinguishing 'no data' from 'error' */
- pdo_mysql_error_stmt(stmt);
- return 0;
- }
- S->current_lengths = mysql_fetch_lengths(S->result);
- return 1;
-}
-
-static int pdo_mysql_stmt_describe(pdo_stmt_t *stmt, int colno TSRMLS_DC)
-{
- pdo_mysql_stmt *S = (pdo_mysql_stmt*)stmt->driver_data;
- MYSQL_RES *R = S->result;
- MYSQL_FIELD *F;
- struct pdo_column_data *cols = stmt->columns;
- unsigned int num_fields, i;
-
- if (!S->result) {
- return 0;
- }
- /* fetch all on demand, this seems easiest
- ** if we've been here before bail out
- */
- if(cols[0].name) {
- return 1;
- }
- num_fields = mysql_num_fields(R);
- F = mysql_fetch_fields(R);
- for(i=0; i < num_fields; i++) {
- int namelen;
- namelen = strlen(F[i].name);
- cols[i].precision = F[i].decimals;
- cols[i].maxlen = F[i].length;
- cols[i].namelen = namelen;
- /* FIXME where does this get freed? */
- cols[i].name = estrndup(F[i].name, namelen + 1);
- cols[i].param_type = PDO_PARAM_STR;
- }
- return 1;
-}
-
-static int pdo_mysql_stmt_get_col(pdo_stmt_t *stmt, int colno, char **ptr, unsigned long *len TSRMLS_DC)
-{
- pdo_mysql_stmt *S = (pdo_mysql_stmt*)stmt->driver_data;
- if(S->current_data == NULL || !S->result) {
- return 0;
- }
- if(colno >= mysql_num_fields(S->result)) {
- /* error invalid column */
- pdo_mysql_error_stmt(stmt);
- return 0;
- }
- *ptr = S->current_data[colno];
- *len = S->current_lengths[colno];
- return 1;
-}
-
-struct pdo_stmt_methods mysql_stmt_methods = {
- pdo_mysql_stmt_dtor,
- pdo_mysql_stmt_execute,
- pdo_mysql_stmt_fetch,
- pdo_mysql_stmt_describe,
- pdo_mysql_stmt_get_col,
- pdo_mysql_stmt_param_hook
-};
-
-/*
- * 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_mysql/package.xml b/ext/pdo_mysql/package.xml
deleted file mode 100644
index 0ac427e985..0000000000
--- a/ext/pdo_mysql/package.xml
+++ /dev/null
@@ -1,48 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-<!DOCTYPE package SYSTEM "../pear/package.dtd">
-<package version="1.0">
- <name>pdo_mysql</name>
- <summary>Mysql 3.x/4.0 driver for PDO</summary>
- <maintainers>
- <maintainer>
- <user>gschlossnagle</user>
- <name>George Schlossnagle</name>
- <email>george@omniti.com</email>
- <role>lead</role>
- </maintainer>
- <maintainer>
- <user>iliaa</user>
- <name>Ilia Alshanetsky</name>
- <email>iliaa@php.net</email>
- <role>lead</role>
- </maintainer>
- </maintainers>
- <description>
- This extension provides a Mysql 3.x/4.0 driver for PDO.
- </description>
- <license>PHP</license>
- <release>
- <state>alpha</state>
- <version>0.1</version>
- <date>2004-05-18</date>
-
- <notes>
- Hope it works!
- </notes>
-
- <filelist>
- <file role="src" name="config.m4"/>
- <file role="src" name="pdo_mysql.c"/>
- <file role="src" name="mysql_driver.c"/>
- <file role="src" name="mysql_statement.c"/>
- <file role="src" name="php_pdo_mysql.h"/>
- <file role="src" name="php_pdo_mysql_int.h"/>
-
- <file role="doc" name="CREDITS"/>
- </filelist>
- <deps>
- <dep type="php" rel="ge" version="5.0.0"/>
- <dep type="ext" name="pdo" rel="ge" version="0.1"/>
- </deps>
- </release>
-</package>
diff --git a/ext/pdo_mysql/pdo_mysql.c b/ext/pdo_mysql/pdo_mysql.c
deleted file mode 100755
index 25583db845..0000000000
--- a/ext/pdo_mysql/pdo_mysql.c
+++ /dev/null
@@ -1,94 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: George Schlossnagle <george@omniti.com> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#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_mysql.h"
-#include "php_pdo_mysql_int.h"
-
-/* {{{ pdo_mysql_functions[] */
-function_entry pdo_mysql_functions[] = {
- {NULL, NULL, NULL}
-};
-/* }}} */
-
-/* {{{ pdo_mysql_module_entry */
-zend_module_entry pdo_mysql_module_entry = {
- STANDARD_MODULE_HEADER,
- "pdo_mysql",
- pdo_mysql_functions,
- PHP_MINIT(pdo_mysql),
- PHP_MSHUTDOWN(pdo_mysql),
- NULL,
- NULL,
- PHP_MINFO(pdo_mysql),
- "0.1",
- STANDARD_MODULE_PROPERTIES
-};
-/* }}} */
-
-#ifdef COMPILE_DL_PDO_MYSQL
-ZEND_GET_MODULE(pdo_mysql)
-#endif
-
-/* true global environment */
-
-/* {{{ PHP_MINIT_FUNCTION
- */
-PHP_MINIT_FUNCTION(pdo_mysql)
-{
- return php_pdo_register_driver(&pdo_mysql_driver);
-}
-/* }}} */
-
-/* {{{ PHP_MSHUTDOWN_FUNCTION
- */
-PHP_MSHUTDOWN_FUNCTION(pdo_mysql)
-{
- php_pdo_unregister_driver(&pdo_mysql_driver);
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ PHP_MINFO_FUNCTION
- */
-PHP_MINFO_FUNCTION(pdo_mysql)
-{
- php_info_print_table_start();
- php_info_print_table_header(2, "PDO Driver for MySQL 3.x Client Libraries", "enabled");
- php_info_print_table_end();
-}
-/* }}} */
-
-/*
- * 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_mysql/php_pdo_mysql.h b/ext/pdo_mysql/php_pdo_mysql.h
deleted file mode 100755
index 1fed28bd5e..0000000000
--- a/ext/pdo_mysql/php_pdo_mysql.h
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: George Schlossnagle <george@omniti.com> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifndef PHP_PDO_MYSQL_H
-#define PHP_PDO_MYSQL_H
-
-extern zend_module_entry pdo_mysql_module_entry;
-#define phpext_pdo_mysql_ptr &pdo_mysql_module_entry
-
-#ifdef PHP_WIN32
-#define PHP_PDO_MYSQL_API __declspec(dllexport)
-#else
-#define PHP_PDO_MYSQL_API
-#endif
-
-#ifdef ZTS
-#include "TSRM.h"
-#endif
-
-PHP_MINIT_FUNCTION(pdo_mysql);
-PHP_MSHUTDOWN_FUNCTION(pdo_mysql);
-PHP_RINIT_FUNCTION(pdo_mysql);
-PHP_RSHUTDOWN_FUNCTION(pdo_mysql);
-PHP_MINFO_FUNCTION(pdo_mysql);
-
-#endif /* PHP_PDO_MYSQL_H */
-
-
-/*
- * 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_mysql/php_pdo_mysql_int.h b/ext/pdo_mysql/php_pdo_mysql_int.h
deleted file mode 100755
index 8498bb0f89..0000000000
--- a/ext/pdo_mysql/php_pdo_mysql_int.h
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: George Schlossnagle <george@omniti.com> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifndef PHP_PDO_MYSQL_INT_H
-#define PHP_PDO_MYSQL_INT_H
-
-#include <mysql.h>
-
-typedef struct {
- const char *file;
- int line;
- unsigned int errcode;
- char *errmsg;
-} pdo_mysql_error_info;
-
-/* stuff we use in a mySQL database handle */
-typedef struct {
- MYSQL *server;
-
- unsigned attached:1;
- unsigned _reserved:31;
-
- pdo_mysql_error_info einfo;
-} pdo_mysql_db_handle;
-
-typedef struct {
- MYSQL_FIELD *def;
-} pdo_mysql_column;
-
-typedef struct {
- pdo_mysql_db_handle *H;
- MYSQL_RES *result;
- MYSQL_ROW current_data;
- long *current_lengths;
- pdo_mysql_column *cols;
-} pdo_mysql_stmt;
-
-typedef struct {
- char *repr;
- long repr_len;
- int mysql_type;
- void *thing; /* for LOBS, REFCURSORS etc. */
-} pdo_mysql_bound_param;
-
-extern pdo_driver_t pdo_mysql_driver;
-
-extern int _pdo_mysql_error(pdo_dbh_t *dbh, pdo_stmt_t *stmt, const char *file, int line TSRMLS_DC);
-#define pdo_mysql_error(s) _pdo_mysql_error(s, NULL, __FILE__, __LINE__ TSRMLS_CC)
-#define pdo_mysql_error_stmt(s) _pdo_mysql_error(stmt->dbh, stmt, __FILE__, __LINE__ TSRMLS_CC)
-
-extern struct pdo_stmt_methods mysql_stmt_methods;
-#endif
diff --git a/ext/pdo_oci/CREDITS b/ext/pdo_oci/CREDITS
deleted file mode 100755
index 63e863a22d..0000000000
--- a/ext/pdo_oci/CREDITS
+++ /dev/null
@@ -1,2 +0,0 @@
-Oracle (OCI) driver for PDO
-Wez Furlong
diff --git a/ext/pdo_oci/EXPERIMENTAL b/ext/pdo_oci/EXPERIMENTAL
deleted file mode 100644
index e69de29bb2..0000000000
--- a/ext/pdo_oci/EXPERIMENTAL
+++ /dev/null
diff --git a/ext/pdo_oci/config.m4 b/ext/pdo_oci/config.m4
deleted file mode 100755
index 7b31a953fc..0000000000
--- a/ext/pdo_oci/config.m4
+++ /dev/null
@@ -1,142 +0,0 @@
-dnl $Id$
-
-AC_DEFUN(AC_PDO_OCI_VERSION,[
- AC_MSG_CHECKING([Oracle version])
- if test -s "$PDO_OCI_DIR/orainst/unix.rgs"; then
- PDO_OCI_VERSION=`grep '"ocommon"' $PDO_OCI_DIR/orainst/unix.rgs | sed 's/[ ][ ]*/:/g' | cut -d: -f 6 | cut -c 2-4`
- test -z "$PDO_OCI_VERSION" && PDO_OCI_VERSION=7.3
- elif test -f $PDO_OCI_DIR/lib/libclntsh.$SHLIB_SUFFIX_NAME.10.1; then
- PDO_OCI_VERSION=10.1
- elif test -f $PDO_OCI_DIR/lib/libclntsh.$SHLIB_SUFFIX_NAME.9.0; then
- PDO_OCI_VERSION=9.0
- elif test -f $PDO_OCI_DIR/lib/libclntsh.$SHLIB_SUFFIX_NAME.8.0; then
- PDO_OCI_VERSION=8.1
- elif test -f $PDO_OCI_DIR/lib/libclntsh.$SHLIB_SUFFIX_NAME.1.0; then
- PDO_OCI_VERSION=8.0
- elif test -f $PDO_OCI_DIR/lib/libclntsh.a; then
- if test -f $PDO_OCI_DIR/lib/libcore4.a; then
- PDO_OCI_VERSION=8.0
- else
- PDO_OCI_VERSION=8.1
- fi
- else
- AC_MSG_ERROR(Oracle-OCI needed libraries not found under $PDO_OCI_DIR)
- fi
- AC_MSG_RESULT($PDO_OCI_VERSION)
-])
-
-PHP_ARG_WITH(pdo-oci, Oracle OCI support for PDO,
-[ --with-pdo-oci[=DIR] Include Oracle-oci support. Default DIR is ORACLE_HOME.])
-
-if test "$PHP_PDO_OCI" != "no"; then
- AC_MSG_CHECKING([Oracle Install-Dir])
- if test "$PHP_PDO_OCI" = "yes" -o -z "$PHP_PDO_OCI"; then
- PDO_OCI_DIR=$ORACLE_HOME
- else
- PDO_OCI_DIR=$PHP_PDO_OCI
- fi
- AC_MSG_RESULT($PDO_OCI_DIR :$PHP_PDO_OCI:)
-
- if test -d "$PDO_OCI_DIR/rdbms/public"; then
- PHP_ADD_INCLUDE($PDO_OCI_DIR/rdbms/public)
- PDO_OCI_INCLUDES="$PDO_OCI_INCLUDES -I$PDO_OCI_DIR/rdbms/public"
- fi
- if test -d "$PDO_OCI_DIR/rdbms/demo"; then
- PHP_ADD_INCLUDE($PDO_OCI_DIR/rdbms/demo)
- PDO_OCI_INCLUDES="$PDO_OCI_INCLUDES -I$PDO_OCI_DIR/rdbms/demo"
- fi
- if test -d "$PDO_OCI_DIR/network/public"; then
- PHP_ADD_INCLUDE($PDO_OCI_DIR/network/public)
- PDO_OCI_INCLUDES="$PDO_OCI_INCLUDES -I$PDO_OCI_DIR/network/public"
- fi
- if test -d "$PDO_OCI_DIR/plsql/public"; then
- PHP_ADD_INCLUDE($PDO_OCI_DIR/plsql/public)
- PDO_OCI_INCLUDES="$PDO_OCI_INCLUDES -I$PDO_OCI_DIR/plsql/public"
- fi
-
- if test -f "$PDO_OCI_DIR/lib/sysliblist"; then
- PHP_EVAL_LIBLINE(`cat $PDO_OCI_DIR/lib/sysliblist`, PDO_OCI_SYSLIB)
- elif test -f "$PDO_OCI_DIR/rdbms/lib/sysliblist"; then
- PHP_EVAL_LIBLINE(`cat $PDO_OCI_DIR/rdbms/lib/sysliblist`, PDO_OCI_SYSLIB)
- fi
-
- AC_PDO_OCI_VERSION($PDO_OCI_DIR)
- case $PDO_OCI_VERSION in
- 8.0)
- PHP_ADD_LIBRARY_WITH_PATH(nlsrtl3, "", PDO_OCI_SHARED_LIBADD)
- PHP_ADD_LIBRARY_WITH_PATH(core4, "", PDO_OCI_SHARED_LIBADD)
- PHP_ADD_LIBRARY_WITH_PATH(psa, "", PDO_OCI_SHARED_LIBADD)
- PHP_ADD_LIBRARY_WITH_PATH(clntsh, $PDO_OCI_DIR/lib, PDO_OCI_SHARED_LIBADD)
- ;;
-
- 8.1)
- PHP_ADD_LIBRARY(clntsh, 1, PDO_OCI_SHARED_LIBADD)
- PHP_ADD_LIBPATH($PDO_OCI_DIR/lib, PDO_OCI_SHARED_LIBADD)
- ;;
-
- 9.0)
- PHP_ADD_LIBRARY(clntsh, 1, PDO_OCI_SHARED_LIBADD)
- PHP_ADD_LIBPATH($PDO_OCI_DIR/lib, PDO_OCI_SHARED_LIBADD)
-
- ;;
-
- 10.1)
- PHP_ADD_LIBRARY(clntsh, 1, PDO_OCI_SHARED_LIBADD)
- PHP_ADD_LIBPATH($PDO_OCI_DIR/lib, PDO_OCI_SHARED_LIBADD)
- ;;
- *)
- AC_MSG_ERROR(Unsupported Oracle version!)
- ;;
- esac
-
- PHP_CHECK_LIBRARY(clntsh, OCIEnvCreate,
- [
- AC_DEFINE(HAVE_OCIENVCREATE,1,[ ])
- ], [], [
- -L$PDO_OCI_DIR/lib $PDO_OCI_SHARED_LIBADD
- ])
-
- PHP_CHECK_LIBRARY(clntsh, OCIEnvNlsCreate,
- [
- AC_DEFINE(HAVE_OCIENVNLSCREATE,1,[ ])
- ], [], [
- -L$PDO_OCI_DIR/lib $PDO_OCI_SHARED_LIBADD
- ])
-
- dnl
- dnl Check if we need to add -locijdbc8
- dnl
- PHP_CHECK_LIBRARY(clntsh, OCILobIsTemporary,
- [
- AC_DEFINE(HAVE_OCILOBISTEMPORARY,1,[ ])
- ], [
- PHP_CHECK_LIBRARY(ocijdbc8, OCILobIsTemporary,
- [
- PHP_ADD_LIBRARY(ocijdbc8, 1, PDO_OCI_SHARED_LIBADD)
- AC_DEFINE(HAVE_OCILOBISTEMPORARY,1,[ ])
- ], [], [
- -L$PDO_OCI_DIR/lib $PDO_OCI_SHARED_LIBADD
- ])
- ], [
- -L$PDO_OCI_DIR/lib $PDO_OCI_SHARED_LIBADD
- ])
-
- dnl
- dnl Check if we have collections
- dnl
- PHP_CHECK_LIBRARY(clntsh, OCICollAssign,
- [
- AC_DEFINE(HAVE_OCICOLLASSIGN,1,[ ])
- ], [], [
- -L$PDO_OCI_DIR/lib $PDO_OCI_SHARED_LIBADD
- ])
-
-
-
- PHP_NEW_EXTENSION(pdo_oci, pdo_oci.c oci_driver.c oci_statement.c, $ext_shared,,-I\$prefix/include/php/ext)
-
- PHP_SUBST_OLD(PDO_OCI_SHARED_LIBADD)
- PHP_SUBST_OLD(PDO_OCI_DIR)
- PHP_SUBST_OLD(PDO_OCI_VERSION)
-
-fi
diff --git a/ext/pdo_oci/config.w32 b/ext/pdo_oci/config.w32
deleted file mode 100755
index 353e28f711..0000000000
--- a/ext/pdo_oci/config.w32
+++ /dev/null
@@ -1,42 +0,0 @@
-// $Id$
-// vim:ft=javascript
-
-ARG_WITH("pdo-oci", "Oracle OCI support for PDO", "no");
-
-if (PHP_PDO_OCI != "no") {
-
- php_oci_dirs = new Array(
- PHP_PDO_OCI,
- PHP_PDO_OCI + "\\oci",
- PHP_PHP_BUILD + "\\oci92",
- PHP_PHP_BUILD + "\\oci805"
- );
-
- php_oci_lib_paths = "";
- php_oci_inc_paths = "";
-
- // find the oracle install
- for (i = 0; i < php_oci_dirs.length; i++) {
- php_oci_lib_paths += php_oci_dirs[i] + "\\lib;";
- php_oci_lib_paths += php_oci_dirs[i] + "\\lib\\msvc;";
- php_oci_inc_paths += php_oci_dirs[i] + "\\include;";
- }
-
- pdo_oci_header = CHECK_HEADER_ADD_INCLUDE("oci.h", "CFLAGS_PDO_OCI", php_oci_inc_paths);
-
- if (pdo_oci_header && CHECK_LIB("oci.lib", "pdo_oci", php_oci_lib_paths)) {
-
- EXTENSION('pdo_oci', 'pdo_oci.c oci_driver.c oci_statement.c');
- ADD_FLAG('CFLAGS_PDO_OCI', "/I ..\\pecl");
-
- /* probe for some functions not present in older versions */
- pdo_oci_inc_dir = FSO.GetFolder(pdo_oci_header);
- CHECK_FUNC_IN_HEADER('oci.h', 'OCIEnvCreate', pdo_oci_inc_dir);
- CHECK_FUNC_IN_HEADER('ociap.h', 'OCIEnvNlsCreate', pdo_oci_inc_dir);
-
- } else {
- WARNING("pdo-oci not enabled; libraries and headers not found");
- }
- ADD_EXTENSION_DEP('pdo_oci', 'pdo');
-}
-
diff --git a/ext/pdo_oci/oci_driver.c b/ext/pdo_oci/oci_driver.c
deleted file mode 100755
index 0793a32e7a..0000000000
--- a/ext/pdo_oci/oci_driver.c
+++ /dev/null
@@ -1,481 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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$ */
-
-#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_oci.h"
-#include "php_pdo_oci_int.h"
-#include "Zend/zend_exceptions.h"
-
-static int pdo_oci_fetch_error_func(pdo_dbh_t *dbh, pdo_stmt_t *stmt, zval *info TSRMLS_DC) /* {{{ */
-{
- pdo_oci_db_handle *H = (pdo_oci_db_handle *)dbh->driver_data;
- pdo_oci_error_info *einfo;
-
- einfo = &H->einfo;
-
- if (stmt) {
- pdo_oci_stmt *S = (pdo_oci_stmt*)stmt->driver_data;
-
- if (S->einfo.errmsg) {
- einfo = &S->einfo;
- }
- }
-
- add_next_index_long(info, einfo->errcode);
- add_next_index_string(info, einfo->errmsg, 1);
-
- return 1;
-}
-/* }}} */
-
-ub4 _oci_error(OCIError *err, pdo_dbh_t *dbh, pdo_stmt_t *stmt, char *what, sword status, const char *file, int line TSRMLS_DC) /* {{{ */
-{
- text errbuf[1024] = "<<Unknown>>";
- pdo_oci_db_handle *H = (pdo_oci_db_handle *)dbh->driver_data;
- pdo_oci_error_info *einfo;
- pdo_oci_stmt *S = NULL;
- enum pdo_error_type *pdo_err = &dbh->error_code;
-
- einfo = &H->einfo;
-
- if (stmt) {
- S = (pdo_oci_stmt*)stmt->driver_data;
- einfo = &S->einfo;
- pdo_err = &stmt->error_code;
- }
-
- einfo->errcode = 0;
- einfo->file = file;
- einfo->line = line;
- if (einfo->errmsg) {
- efree(einfo->errmsg);
- einfo->errmsg = NULL;
- }
-
- switch (status) {
- case OCI_SUCCESS:
- *pdo_err = PDO_ERR_NONE;
- break;
- case OCI_ERROR:
- OCIErrorGet(err, (ub4)1, NULL, &einfo->errcode, errbuf, (ub4)sizeof(errbuf), OCI_HTYPE_ERROR);
- spprintf(&einfo->errmsg, 0, "%s: %s (%s:%d)", what, errbuf, file, line);
- break;
- case OCI_SUCCESS_WITH_INFO:
- OCIErrorGet(err, (ub4)1, NULL, &einfo->errcode, errbuf, (ub4)sizeof(errbuf), OCI_HTYPE_ERROR);
- spprintf(&einfo->errmsg, 0, "%s: OCI_SUCCESS_WITH_INFO: %s (%s:%d)", what, errbuf, file, line);
- break;
- case OCI_NEED_DATA:
- spprintf(&einfo->errmsg, 0, "%s: OCI_NEED_DATA (%s:%d)", what, file, line);
- break;
- case OCI_NO_DATA:
- spprintf(&einfo->errmsg, 0, "%s: OCI_NO_DATA (%s:%d)", what, file, line);
- break;
- case OCI_INVALID_HANDLE:
- spprintf(&einfo->errmsg, 0, "%s: OCI_INVALID_HANDLE (%s:%d)", what, file, line);
- break;
- case OCI_STILL_EXECUTING:
- spprintf(&einfo->errmsg, 0, "%s: OCI_STILL_EXECUTING (%s:%d)", what, file, line);
- break;
- case OCI_CONTINUE:
- spprintf(&einfo->errmsg, 0, "%s: OCI_CONTINUE (%s:%d)", what, file, line);
- break;
- }
-
- switch (einfo->errcode) {
- case 1013: /* user requested cancel of current operation */
- zend_bailout();
- break;
-
- case 955: /* ORA-00955: name is already used by an existing object */
- *pdo_err = PDO_ERR_ALREADY_EXISTS;
- break;
-
- case 12154: /* ORA-12154: TNS:could not resolve service name */
- *pdo_err = PDO_ERR_NOT_FOUND;
- break;
-
- case 22: /* ORA-00022: invalid session id */
- case 1012: /* ORA-01012: */
- case 3113: /* ORA-03133: end of file on communication channel */
- case 604:
- case 1041:
- /* consider the connection closed */
- dbh->is_closed = 1;
- H->attached = 0;
- *pdo_err = PDO_ERR_DISCONNECTED;
- break;
-
- default:
- *pdo_err = PDO_ERR_CANT_MAP;
- }
-
- /* little mini hack so that we can use this code from the dbh ctor */
- if (!dbh->methods) {
- zend_throw_exception_ex(php_pdo_get_exception(), *pdo_err TSRMLS_CC, einfo->errmsg);
- }
-
- return einfo->errcode;
-}
-/* }}} */
-
-static int oci_handle_closer(pdo_dbh_t *dbh TSRMLS_DC) /* {{{ */
-{
- pdo_oci_db_handle *H = (pdo_oci_db_handle *)dbh->driver_data;
-
- if (H->svc) {
- /* rollback any outstanding work */
- OCITransRollback(H->svc, H->err, 0);
- }
-
- if (H->session) {
- OCIHandleFree(H->session, OCI_HTYPE_SESSION);
- H->session = NULL;
- }
-
- if (H->svc) {
- OCIHandleFree(H->svc, OCI_HTYPE_SVCCTX);
- H->svc = NULL;
- }
-
- if (H->server && H->attached) {
- H->last_err = OCIServerDetach(H->server, H->err, OCI_DEFAULT);
- if (H->last_err) {
- oci_drv_error("OCIServerDetach");
- }
- H->attached = 0;
- }
-
- if (H->server) {
- OCIHandleFree(H->server, OCI_HTYPE_SERVER);
- H->server = NULL;
- }
-
- OCIHandleFree(H->err, OCI_HTYPE_ERROR);
- H->err = NULL;
-
- if (H->charset && H->env) {
- OCIHandleFree(H->env, OCI_HTYPE_ENV);
- H->env = NULL;
- }
-
- pefree(H, dbh->is_persistent);
-
- return 0;
-}
-/* }}} */
-
-static int oci_handle_preparer(pdo_dbh_t *dbh, const char *sql, long sql_len, pdo_stmt_t *stmt, long options, zval *driver_options TSRMLS_DC) /* {{{ */
-{
- pdo_oci_db_handle *H = (pdo_oci_db_handle *)dbh->driver_data;
- pdo_oci_stmt *S = ecalloc(1, sizeof(*S));
-
- S->H = H;
-
- /* create an OCI statement handle */
- OCIHandleAlloc(H->env, (dvoid*)&S->stmt, OCI_HTYPE_STMT, 0, NULL);
-
- /* and our own private error handle */
- OCIHandleAlloc(H->env, (dvoid*)&S->err, OCI_HTYPE_ERROR, 0, NULL);
-
- if (sql_len) {
- H->last_err = OCIStmtPrepare(S->stmt, H->err, (text*)sql, sql_len, OCI_NTV_SYNTAX, OCI_DEFAULT);
-
- if (H->last_err) {
- H->last_err = oci_drv_error("OCIStmtPrepare");
- OCIHandleFree(S->stmt, OCI_HTYPE_STMT);
- OCIHandleFree(S->err, OCI_HTYPE_ERROR);
- efree(S);
- return 0;
- }
- }
-
- stmt->driver_data = S;
- stmt->methods = &oci_stmt_methods;
-
- return 1;
-}
-/* }}} */
-
-static long oci_handle_doer(pdo_dbh_t *dbh, const char *sql, long sql_len TSRMLS_DC) /* {{{ */
-{
- pdo_oci_db_handle *H = (pdo_oci_db_handle *)dbh->driver_data;
- OCIStmt *stmt;
- ub2 stmt_type;
- ub4 rowcount;
- int ret = -1;
-
- OCIHandleAlloc(H->env, (dvoid*)&stmt, OCI_HTYPE_STMT, 0, NULL);
-
- H->last_err = OCIStmtPrepare(stmt, H->err, (text*)sql, sql_len, OCI_NTV_SYNTAX, OCI_DEFAULT);
- if (H->last_err) {
- H->last_err = oci_drv_error("OCIStmtPrepare");
- OCIHandleFree(stmt, OCI_HTYPE_STMT);
- return -1;
- }
-
- H->last_err = OCIAttrGet(stmt, OCI_HTYPE_STMT, &stmt_type, 0, OCI_ATTR_STMT_TYPE, H->err);
-
- if (stmt_type == OCI_STMT_SELECT) {
- /* invalid usage; cancel it */
- OCIHandleFree(stmt, OCI_HTYPE_STMT);
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "issuing a SELECT query here is invalid");
- return -1;
- }
-
- /* now we are good to go */
- H->last_err = OCIStmtExecute(H->svc, stmt, H->err, 1, 0, NULL, NULL,
- (dbh->auto_commit && !dbh->in_txn) ? OCI_COMMIT_ON_SUCCESS : OCI_DEFAULT);
-
- if (H->last_err) {
- H->last_err = oci_drv_error("OCIStmtExecute");
- } else {
- /* return the number of affected rows */
- H->last_err = OCIAttrGet(stmt, OCI_HTYPE_STMT, &rowcount, 0, OCI_ATTR_ROW_COUNT, H->err);
- ret = rowcount;
- }
-
- OCIHandleFree(stmt, OCI_HTYPE_STMT);
-
- return ret;
-}
-/* }}} */
-
-static int oci_handle_quoter(pdo_dbh_t *dbh, const char *unquoted, int unquotedlen, char **quoted, int *quotedlen TSRMLS_DC) /* {{{ */
-{
- pdo_oci_db_handle *H = (pdo_oci_db_handle *)dbh->driver_data;
-
- return 0;
-}
-/* }}} */
-
-static int oci_handle_begin(pdo_dbh_t *dbh TSRMLS_DC) /* {{{ */
-{
- /* with Oracle, there is nothing special to be done */
- return 1;
-}
-/* }}} */
-
-static int oci_handle_commit(pdo_dbh_t *dbh TSRMLS_DC) /* {{{ */
-{
- pdo_oci_db_handle *H = (pdo_oci_db_handle *)dbh->driver_data;
-
- H->last_err = OCITransCommit(H->svc, H->err, 0);
-
- if (H->last_err) {
- H->last_err = oci_drv_error("OCITransCommit");
- return 0;
- }
- return 1;
-}
-/* }}} */
-
-static int oci_handle_rollback(pdo_dbh_t *dbh TSRMLS_DC) /* {{{ */
-{
- pdo_oci_db_handle *H = (pdo_oci_db_handle *)dbh->driver_data;
-
- H->last_err = OCITransRollback(H->svc, H->err, 0);
-
- if (H->last_err) {
- H->last_err = oci_drv_error("OCITransRollback");
- return 0;
- }
- return 1;
-}
-/* }}} */
-
-static int oci_handle_set_attribute(pdo_dbh_t *dbh, long attr, zval *val TSRMLS_DC) /* {{{ */
-{
- pdo_oci_db_handle *H = (pdo_oci_db_handle *)dbh->driver_data;
-
- if (attr == PDO_ATTR_AUTOCOMMIT) {
- if (dbh->in_txn) {
- /* Assume they want to commit whatever is outstanding */
- H->last_err = OCITransCommit(H->svc, H->err, 0);
-
- if (H->last_err) {
- H->last_err = oci_drv_error("OCITransCommit");
- return 0;
- }
- dbh->in_txn = 0;
- }
-
- convert_to_long(val);
-
- dbh->auto_commit = Z_LVAL_P(val);
- return 1;
- } else {
- return 0;
- }
-
-}
-/* }}} */
-
-static struct pdo_dbh_methods oci_methods = {
- oci_handle_closer,
- oci_handle_preparer,
- oci_handle_doer,
- oci_handle_quoter,
- oci_handle_begin,
- oci_handle_commit,
- oci_handle_rollback,
- oci_handle_set_attribute,
- NULL,
- pdo_oci_fetch_error_func,
-};
-
-static int pdo_oci_handle_factory(pdo_dbh_t *dbh, zval *driver_options TSRMLS_DC) /* {{{ */
-{
- pdo_oci_db_handle *H;
- int i, ret = 0;
- struct pdo_data_src_parser vars[] = {
- { "charset", NULL, 0 },
- { "dbname", "", 0 }
- };
-
- php_pdo_parse_data_source(dbh->data_source, dbh->data_source_len, vars, 4);
-
- H = pecalloc(1, sizeof(*H), dbh->is_persistent);
- dbh->driver_data = H;
-
- /* allocate an environment */
-#if HAVE_OCIENVNLSCREATE
- if (vars[0].optval) {
- H->charset = OCINlsCharSetNameToId(pdo_oci_Env, vars[0].optval);
- if (H->charset) {
- OCIEnvNlsCreate(&H->env, PDO_OCI_INIT_MODE, 0, NULL, NULL, NULL, 0, NULL, H->charset, H->charset);
- }
- }
-#endif
- if (H->env == NULL) {
- /* use the global environment */
- H->env = pdo_oci_Env;
- }
-
- /* something to hold errors */
- OCIHandleAlloc(H->env, (dvoid **)&H->err, OCI_HTYPE_ERROR, 0, NULL);
-
- /* handle for the server */
- OCIHandleAlloc(H->env, (dvoid **)&H->server, OCI_HTYPE_SERVER, 0, NULL);
-
- H->last_err = OCIServerAttach(H->server, H->err, (text*)vars[1].optval,
- strlen(vars[1].optval), OCI_DEFAULT);
-
- if (H->last_err) {
- oci_drv_error("pdo_oci_handle_factory");
- goto cleanup;
- }
-
- H->attached = 1;
-
- /* create a service context */
- H->last_err = OCIHandleAlloc(H->env, (dvoid**)&H->svc, OCI_HTYPE_SVCCTX, 0, NULL);
- if (H->last_err) {
- oci_drv_error("OCIHandleAlloc: OCI_HTYPE_SVCCTX");
- goto cleanup;
- }
-
- H->last_err = OCIHandleAlloc(H->env, (dvoid**)&H->session, OCI_HTYPE_SESSION, 0, NULL);
- if (H->last_err) {
- oci_drv_error("OCIHandleAlloc: OCI_HTYPE_SESSION");
- goto cleanup;
- }
-
- /* set server handle into service handle */
- H->last_err = OCIAttrSet(H->svc, OCI_HTYPE_SVCCTX, H->server, 0, OCI_ATTR_SERVER, H->err);
- if (H->last_err) {
- oci_drv_error("OCIAttrSet: OCI_ATTR_SERVER");
- goto cleanup;
- }
-
- /* username */
- H->last_err = OCIAttrSet(H->session, OCI_HTYPE_SESSION,
- dbh->username, strlen(dbh->username),
- OCI_ATTR_USERNAME, H->err);
- if (H->last_err) {
- oci_drv_error("OCIAttrSet: OCI_ATTR_USERNAME");
- goto cleanup;
- }
-
- /* password */
- H->last_err = OCIAttrSet(H->session, OCI_HTYPE_SESSION,
- dbh->password, strlen(dbh->password),
- OCI_ATTR_PASSWORD, H->err);
- if (H->last_err) {
- oci_drv_error("OCIAttrSet: OCI_ATTR_PASSWORD");
- goto cleanup;
- }
-
- /* Now fire up the session */
- H->last_err = OCISessionBegin(H->svc, H->err, H->session, OCI_CRED_RDBMS, OCI_DEFAULT);
- if (H->last_err) {
- oci_drv_error("OCISessionBegin:");
- goto cleanup;
- }
-
- /* set the server handle into service handle */
- H->last_err = OCIAttrSet(H->svc, OCI_HTYPE_SVCCTX, H->session, 0, OCI_ATTR_SESSION, H->err);
- if (H->last_err) {
- oci_drv_error("OCIAttrSet: OCI_ATTR_SESSION:");
- goto cleanup;
- }
-
- dbh->methods = &oci_methods;
- dbh->alloc_own_columns = 1;
- dbh->supports_placeholders = PDO_PLACEHOLDER_NAMED;
- dbh->native_case = PDO_CASE_UPPER;
-
- ret = 1;
-
-cleanup:
- for (i = 0; i < sizeof(vars)/sizeof(vars[0]); i++) {
- if (vars[i].freeme) {
- efree(vars[i].optval);
- }
- }
-
- if (!ret) {
- oci_handle_closer(dbh TSRMLS_CC);
- }
-
- return ret;
-}
-/* }}} */
-
-pdo_driver_t pdo_oci_driver = {
- PDO_DRIVER_HEADER(oci),
- pdo_oci_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_oci/oci_statement.c b/ext/pdo_oci/oci_statement.c
deleted file mode 100755
index 07b2237d94..0000000000
--- a/ext/pdo_oci/oci_statement.c
+++ /dev/null
@@ -1,429 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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$ */
-
-#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_oci.h"
-#include "php_pdo_oci_int.h"
-#include "Zend/zend_extensions.h"
-
-#define STMT_CALL(name, params) \
- S->last_err = name params; \
- S->last_err = _oci_error(S->err, stmt->dbh, stmt, #name, S->last_err, __FILE__, __LINE__ TSRMLS_CC); \
- if (S->last_err) { \
- return 0; \
- }
-
-#define STMT_CALL_MSG(name, msg, params) \
- S->last_err = name params; \
- S->last_err = _oci_error(S->err, stmt->dbh, stmt, #name ": " #msg, S->last_err, __FILE__, __LINE__ TSRMLS_CC); \
- if (S->last_err) { \
- return 0; \
- }
-
-
-static int oci_stmt_dtor(pdo_stmt_t *stmt TSRMLS_DC)
-{
- pdo_oci_stmt *S = (pdo_oci_stmt*)stmt->driver_data;
- HashTable *BC = stmt->bound_columns;
- HashTable *BP = stmt->bound_params;
-
- int i;
-
- if (S->stmt) {
- /* cancel server side resources for the statement if we didn't
- * fetch it all */
- OCIStmtFetch(S->stmt, S->err, 0, OCI_FETCH_NEXT, OCI_DEFAULT);
-
- /* free the handle */
- OCIHandleFree(S->stmt, OCI_HTYPE_STMT);
- S->stmt = NULL;
- }
- if (S->err) {
- OCIHandleFree(S->err, OCI_HTYPE_ERROR);
- S->err = NULL;
- }
-
- if (BC) {
- zend_hash_destroy(BC);
- efree(stmt->bound_columns);
- }
-
- if (BP) {
- zend_hash_destroy(BP);
- efree(stmt->bound_params);
- }
-
- if (S->cols) {
- for (i = 0; i < stmt->column_count; i++) {
- if (S->cols[i].data) {
- efree(S->cols[i].data);
- }
- }
- efree(S->cols);
- S->cols = NULL;
- }
- efree(S);
-
- return 1;
-}
-
-static int oci_stmt_execute(pdo_stmt_t *stmt TSRMLS_DC)
-{
- pdo_oci_stmt *S = (pdo_oci_stmt*)stmt->driver_data;
- ub4 rowcount;
-
- if (!S->stmt_type) {
- STMT_CALL_MSG(OCIAttrGet, "OCI_ATTR_STMT_TYPE",
- (S->stmt, OCI_HTYPE_STMT, &S->stmt_type, 0, OCI_ATTR_STMT_TYPE, S->err));
- }
-
- if (stmt->executed) {
- /* ensure that we cancel the cursor from a previous fetch */
- OCIStmtFetch(S->stmt, S->err, 0, OCI_FETCH_NEXT, OCI_DEFAULT);
- }
-
- STMT_CALL(OCIStmtExecute, (S->H->svc, S->stmt, S->err,
- S->stmt_type == OCI_STMT_SELECT ? 0 : 1, 0, NULL, NULL,
- (stmt->dbh->auto_commit && !stmt->dbh->in_txn) ? OCI_COMMIT_ON_SUCCESS : OCI_DEFAULT));
-
- if (!stmt->executed) {
- ub4 colcount;
- /* do first-time-only definition of bind/mapping stuff */
-
- /* how many columns do we have ? */
- STMT_CALL_MSG(OCIAttrGet, "ATTR_PARAM_COUNT",
- (S->stmt, OCI_HTYPE_STMT, &colcount, 0, OCI_ATTR_PARAM_COUNT, S->err));
-
- stmt->column_count = (int)colcount;
-
- S->cols = ecalloc(colcount, sizeof(pdo_oci_column));
- }
-
- STMT_CALL_MSG(OCIAttrGet, "ATTR_ROW_COUNT",
- (S->stmt, OCI_HTYPE_STMT, &rowcount, 0, OCI_ATTR_ROW_COUNT, S->err));
- stmt->row_count = (long)rowcount;
-
- return 1;
-}
-
-static sb4 oci_bind_input_cb(dvoid *ctx, OCIBind *bindp, ub4 iter, ub4 index, dvoid **bufpp,
- ub4 *alenp, ub1 *piecep, dvoid **indpp)
-{
- struct pdo_bound_param_data *param = (struct pdo_bound_param_data*)ctx;
- pdo_oci_bound_param *P = (pdo_oci_bound_param*)ecalloc(1, sizeof(pdo_oci_bound_param));
- TSRMLS_FETCH();
-
- if (!param || !param->parameter) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "param is NULL in oci_bind_input_cb; this should not happen");
- return OCI_ERROR;
- }
-
- *indpp = &P->indicator;
-
- if (ZVAL_IS_NULL(param->parameter)) {
- /* insert a NULL value into the column */
- P->indicator = -1; /* NULL */
- *bufpp = 0;
- *alenp = -1;
- } else if (!P->thing) {
- /* regular string bind */
- convert_to_string(param->parameter);
- *bufpp = Z_STRVAL_P(param->parameter);
- *alenp = Z_STRLEN_P(param->parameter);
- } else {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "P->thing should not be set??");
- return OCI_ERROR;
- }
-
- *piecep = OCI_ONE_PIECE;
- return OCI_CONTINUE;
-}
-
-static sb4 oci_bind_output_cb(dvoid *ctx, OCIBind *bindp, ub4 iter, ub4 index, dvoid **bufpp, ub4 **alenpp,
- ub1 *piecep, dvoid **indpp, ub2 **rcodepp)
-{
- struct pdo_bound_param_data *param = (struct pdo_bound_param_data*)ctx;
- pdo_oci_bound_param *P = (pdo_oci_bound_param*)ecalloc(1, sizeof(pdo_oci_bound_param));
- TSRMLS_FETCH();
-
- if (!param || !param->parameter) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "param is NULL in oci_bind_output_cb; this should not happen");
- return OCI_ERROR;
- }
-
- if (Z_TYPE_P(param->parameter) == IS_OBJECT || Z_TYPE_P(param->parameter) == IS_RESOURCE) {
- return OCI_CONTINUE;
- }
-
- convert_to_string(param->parameter);
- zval_dtor(param->parameter);
-
- Z_STRLEN_P(param->parameter) = param->max_value_len;
- Z_STRVAL_P(param->parameter) = emalloc(Z_STRLEN_P(param->parameter)+1);
-
-
- *alenpp = &P->actual_len;
- *bufpp = Z_STRVAL_P(param->parameter);
- *piecep = OCI_ONE_PIECE;
- *rcodepp = &P->retcode;
- *indpp = &P->indicator;
-
- return OCI_CONTINUE;
-}
-
-static int oci_stmt_param_hook(pdo_stmt_t *stmt, struct pdo_bound_param_data *param,
- enum pdo_param_event event_type TSRMLS_DC)
-{
- pdo_oci_stmt *S = (pdo_oci_stmt*)stmt->driver_data;
-
- /* we're only interested in parameters for prepared SQL right now */
- if (param->is_param) {
- pdo_oci_bound_param *P;
- sb4 value_sz = -1;
-
- P = (pdo_oci_bound_param*)param->driver_data;
-
- switch (event_type) {
- case PDO_PARAM_EVT_ALLOC:
- P = (pdo_oci_bound_param*)ecalloc(1, sizeof(pdo_oci_bound_param));
- param->driver_data = P;
-
- /* figure out what we're doing */
- switch (param->param_type) {
- case PDO_PARAM_LOB:
- case PDO_PARAM_STMT:
- return 0;
-
- case PDO_PARAM_STR:
- default:
- P->oci_type = SQLT_CHR;
- convert_to_string(param->parameter);
- value_sz = param->max_value_len + 1;
- P->actual_len = Z_STRLEN_P(param->parameter);
-
- }
-
- if (param->name) {
- STMT_CALL(OCIBindByName, (S->stmt,
- &P->bind, S->err, (text*)param->name,
- param->namelen, 0, value_sz, P->oci_type,
- &P->indicator, 0, &P->retcode, 0, 0,
- OCI_DATA_AT_EXEC));
- } else {
- STMT_CALL(OCIBindByPos, (S->stmt,
- &P->bind, S->err, param->paramno+1,
- 0, value_sz, P->oci_type,
- &P->indicator, 0, &P->retcode, 0, 0,
- OCI_DATA_AT_EXEC));
- }
-
- STMT_CALL(OCIBindDynamic, (P->bind,
- S->err,
- param, oci_bind_input_cb,
- param, oci_bind_output_cb));
-
- return 1;
-
- case PDO_PARAM_EVT_EXEC_PRE:
- P->indicator = 0;
- return 1;
-
- case PDO_PARAM_EVT_EXEC_POST:
- /* fixup stuff set in motion in oci_bind_output_cb */
- if (P->indicator == -1) {
- /* set up a NULL value */
- if (Z_TYPE_P(param->parameter) == IS_STRING
-#if ZEND_EXTENSION_API_NO < 220040718
- && Z_STRVAL_P(param->parameter) != empty_string
-#endif
- ) {
- /* OCI likes to stick non-terminated strings in things */
- *Z_STRVAL_P(param->parameter) = '\0';
- }
- zval_dtor(param->parameter);
- ZVAL_NULL(param->parameter);
- } else if (Z_TYPE_P(param->parameter) == IS_STRING
-#if ZEND_EXTENSION_API_NO < 220040718
- && Z_STRVAL_P(param->parameter) != empty_string
-#endif
- ) {
- Z_STRLEN_P(param->parameter) = P->actual_len;
- Z_STRVAL_P(param->parameter) = erealloc(Z_STRVAL_P(param->parameter), P->actual_len+1);
- Z_STRVAL_P(param->parameter)[P->actual_len] = '\0';
- }
-
- return 1;
- }
- }
-
- return 1;
-}
-
-static int oci_stmt_fetch(pdo_stmt_t *stmt TSRMLS_DC)
-{
- pdo_oci_stmt *S = (pdo_oci_stmt*)stmt->driver_data;
-
- S->last_err = OCIStmtFetch(S->stmt, S->err, 1, OCI_FETCH_NEXT, OCI_DEFAULT);
-
- if (S->last_err == OCI_NO_DATA) {
- /* no (more) data */
- return 0;
- }
-
- if (S->last_err == OCI_NEED_DATA) {
- oci_stmt_error("OCI_NEED_DATA");
- return 0;
- }
-
- if (S->last_err == OCI_SUCCESS_WITH_INFO || S->last_err == OCI_SUCCESS) {
- return 1;
- }
-
- oci_stmt_error("OCIStmtFetch");
-
- return 0;
-}
-
-static int oci_stmt_describe(pdo_stmt_t *stmt, int colno TSRMLS_DC)
-{
- pdo_oci_stmt *S = (pdo_oci_stmt*)stmt->driver_data;
- OCIParam *param = NULL;
- text *colname;
- ub2 dtype, data_size, scale, precis;
- ub4 namelen;
- struct pdo_column_data *col = &stmt->columns[colno];
- zend_bool dyn = FALSE;
-
- /* describe the column */
- STMT_CALL(OCIParamGet, (S->stmt, OCI_HTYPE_STMT, S->err, (dvoid*)&param, colno+1));
-
- /* what type ? */
- STMT_CALL_MSG(OCIAttrGet, "OCI_ATTR_DATA_TYPE",
- (param, OCI_DTYPE_PARAM, &dtype, 0, OCI_ATTR_DATA_TYPE, S->err));
-
- /* how big ? */
- STMT_CALL_MSG(OCIAttrGet, "OCI_ATTR_DATA_SIZE",
- (param, OCI_DTYPE_PARAM, &data_size, 0, OCI_ATTR_DATA_SIZE, S->err));
-
- /* scale ? */
- STMT_CALL_MSG(OCIAttrGet, "OCI_ATTR_SCALE",
- (param, OCI_DTYPE_PARAM, &scale, 0, OCI_ATTR_SCALE, S->err));
-
- /* precision ? */
- STMT_CALL_MSG(OCIAttrGet, "OCI_ATTR_PRECISION",
- (param, OCI_DTYPE_PARAM, &precis, 0, OCI_ATTR_PRECISION, S->err));
-
- /* name ? */
- STMT_CALL_MSG(OCIAttrGet, "OCI_ATTR_NAME",
- (param, OCI_DTYPE_PARAM, &colname, &namelen, OCI_ATTR_NAME, S->err));
-
- col->precision = scale;
- col->maxlen = data_size;
- col->namelen = namelen;
- col->name = estrndup(colname, namelen);
-
- /* how much room do we need to store the field */
- switch (dtype) {
- case SQLT_BIN:
- default:
- dyn = FALSE;
- if (dtype == SQLT_DAT || dtype == SQLT_NUM
-#ifdef SQLT_TIMESTAMP
- || dtype == SQLT_TIMESTAMP
-#endif
-#ifdef SQLT_TIMESTAMP_TZ
- || dtype == SQLT_TIMESTAMP_TZ
-#endif
- ) {
- /* should be big enough for most date formats and numbers */
- S->cols[colno].datalen = 512;
- } else {
- S->cols[colno].datalen = col->maxlen;
- }
- if (dtype == SQLT_BIN) {
- S->cols[colno].datalen *= 3;
- }
- S->cols[colno].data = emalloc(S->cols[colno].datalen + 1);
- dtype = SQLT_CHR;
-
- /* returning data as a string */
- col->param_type = PDO_PARAM_STR;
- }
-
- if (!dyn) {
- STMT_CALL(OCIDefineByPos, (S->stmt, &S->cols[colno].def, S->err, colno+1,
- S->cols[colno].data, S->cols[colno].datalen, dtype, &S->cols[colno].indicator,
- &S->cols[colno].fetched_len, &S->cols[colno].retcode, OCI_DEFAULT));
- }
-
- return 1;
-}
-
-static int oci_stmt_get_col(pdo_stmt_t *stmt, int colno, char **ptr, unsigned long *len TSRMLS_DC)
-{
- pdo_oci_stmt *S = (pdo_oci_stmt*)stmt->driver_data;
- pdo_oci_column *C = &S->cols[colno];
-
- /* check the indicator to ensure that the data is intact */
- if (C->indicator == -1) {
- /* A NULL value */
- *ptr = NULL;
- *len = 0;
- return 1;
- } else if (C->indicator == 0) {
- /* it was stored perfectly */
- *ptr = C->data;
- *len = C->fetched_len;
- return 1;
- } else {
- /* it was truncated */
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "column %d data was too large for buffer and was truncated to fit it", colno);
-
- *ptr = C->data;
- *len = C->fetched_len;
- return 1;
- }
-}
-
-struct pdo_stmt_methods oci_stmt_methods = {
- oci_stmt_dtor,
- oci_stmt_execute,
- oci_stmt_fetch,
- oci_stmt_describe,
- oci_stmt_get_col,
- oci_stmt_param_hook
-};
-
-/*
- * 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_oci/package.xml b/ext/pdo_oci/package.xml
deleted file mode 100755
index df6f3b9e02..0000000000
--- a/ext/pdo_oci/package.xml
+++ /dev/null
@@ -1,47 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-<!DOCTYPE package SYSTEM "../pear/package.dtd">
-<package version="1.0">
- <name>PDO_OCI</name>
- <summary>Oracle Call Interface driver for PDO</summary>
- <maintainers>
- <maintainer>
- <user>wez</user>
- <name>Wez Furlong</name>
- <email>wez@php.net</email>
- <role>lead</role>
- </maintainer>
- </maintainers>
- <description>
- This extension provides an Oracle driver for PDO.
- </description>
- <license>PHP</license>
- <release>
- <state>alpha</state>
- <version>0.1</version>
- <date>2004-05-21</date>
-
- <notes>
- You need to install the PDO core module before you can make use of this one.
- You also require Oracle OCI 8 or higher client libraries installed on the machine where you intend to build and/or use it.
-
- If you are running on windows, you can download the binary from here:
- http://snaps.php.net/win32/PECL_5_0/php_pdo_oci.dll
- </notes>
-
- <filelist>
- <file role="src" name="config.m4"/>
- <file role="src" name="config.w32"/>
- <file role="src" name="pdo_oci.c"/>
- <file role="src" name="oci_driver.c"/>
- <file role="src" name="oci_statement.c"/>
- <file role="src" name="php_pdo_oci.h"/>
- <file role="src" name="php_pdo_oci_int.h"/>
-
- <file role="doc" name="CREDITS"/>
- </filelist>
- <deps>
- <dep type="php" rel="ge" version="5.0.0RC3dev"/>
- <dep type="ext" rel="ge" name="pdo" version="0.1"/>
- </deps>
- </release>
-</package>
diff --git a/ext/pdo_oci/pdo_oci.c b/ext/pdo_oci/pdo_oci.c
deleted file mode 100755
index 5712f8634d..0000000000
--- a/ext/pdo_oci/pdo_oci.c
+++ /dev/null
@@ -1,120 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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$ */
-
-#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_oci.h"
-#include "php_pdo_oci_int.h"
-
-/* {{{ pdo_oci_functions[] */
-function_entry pdo_oci_functions[] = {
- {NULL, NULL, NULL}
-};
-/* }}} */
-
-/* {{{ pdo_oci_module_entry */
-zend_module_entry pdo_oci_module_entry = {
- STANDARD_MODULE_HEADER,
- "PDO_OCI",
- pdo_oci_functions,
- PHP_MINIT(pdo_oci),
- PHP_MSHUTDOWN(pdo_oci),
- NULL,
- NULL,
- PHP_MINFO(pdo_oci),
- "0.1",
- STANDARD_MODULE_PROPERTIES
-};
-/* }}} */
-
-#ifdef COMPILE_DL_PDO_OCI
-ZEND_GET_MODULE(pdo_oci)
-#endif
-
-const ub4 PDO_OCI_INIT_MODE =
-#if 0 && defined(OCI_SHARED)
- /* shared mode is known to be bad for PHP */
- OCI_SHARED
-#else
- OCI_DEFAULT
-#endif
-#ifdef OCI_OBJECT
- |OCI_OBJECT
-#endif
-#ifdef ZTS
- |OCI_THREADED
-#endif
- ;
-
-/* true global environment */
-OCIEnv *pdo_oci_Env = NULL;
-
-/* {{{ PHP_MINIT_FUNCTION
- */
-PHP_MINIT_FUNCTION(pdo_oci)
-{
- php_pdo_register_driver(&pdo_oci_driver);
-
-#if HAVE_OCIENVCREATE
- OCIEnvCreate(&pdo_oci_Env, PDO_OCI_INIT_MODE, NULL, NULL, NULL, NULL, 0, NULL);
-#else
- OCIInitialize(PDO_OCI_INIT_MODE, NULL, NULL, NULL, NULL);
- OCIEnvInit(&pdo_oci_Env, OCI_DEFAULT, 0, NULL);
-#endif
-
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ PHP_MSHUTDOWN_FUNCTION
- */
-PHP_MSHUTDOWN_FUNCTION(pdo_oci)
-{
- php_pdo_unregister_driver(&pdo_oci_driver);
- OCIHandleFree((dvoid*)pdo_oci_Env, OCI_HTYPE_ENV);
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ PHP_MINFO_FUNCTION
- */
-PHP_MINFO_FUNCTION(pdo_oci)
-{
- php_info_print_table_start();
- php_info_print_table_header(2, "PDO Driver for OCI 8 and later", "enabled");
- php_info_print_table_end();
-}
-/* }}} */
-
-/*
- * 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_oci/php_pdo_oci.h b/ext/pdo_oci/php_pdo_oci.h
deleted file mode 100755
index fe9f24749f..0000000000
--- a/ext/pdo_oci/php_pdo_oci.h
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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$ */
-
-#ifndef PHP_PDO_OCI_H
-#define PHP_PDO_OCI_H
-
-extern zend_module_entry pdo_oci_module_entry;
-#define phpext_pdo_oci_ptr &pdo_oci_module_entry
-
-#ifdef PHP_WIN32
-#define PHP_PDO_OCI_API __declspec(dllexport)
-#else
-#define PHP_PDO_OCI_API
-#endif
-
-#ifdef ZTS
-#include "TSRM.h"
-#endif
-
-PHP_MINIT_FUNCTION(pdo_oci);
-PHP_MSHUTDOWN_FUNCTION(pdo_oci);
-PHP_RINIT_FUNCTION(pdo_oci);
-PHP_RSHUTDOWN_FUNCTION(pdo_oci);
-PHP_MINFO_FUNCTION(pdo_oci);
-
-#endif /* PHP_PDO_OCI_H */
-
-
-/*
- * 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_oci/php_pdo_oci_int.h b/ext/pdo_oci/php_pdo_oci_int.h
deleted file mode 100755
index d20baba47c..0000000000
--- a/ext/pdo_oci/php_pdo_oci_int.h
+++ /dev/null
@@ -1,89 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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$ */
-
-#include <oci.h>
-
-typedef struct {
- const char *file;
- int line;
- sb4 errcode;
- char *errmsg;
-} pdo_oci_error_info;
-
-/* stuff we use in an OCI database handle */
-typedef struct {
- OCIServer *server;
- OCISession *session;
- OCIEnv *env;
- OCIError *err;
- OCISvcCtx *svc;
- /* OCI9; 0 == use NLS_LANG */
- ub2 charset;
- sword last_err;
-
- unsigned attached:1;
- unsigned _reserved:31;
-
- pdo_oci_error_info einfo;
-} pdo_oci_db_handle;
-
-typedef struct {
- OCIDefine *def;
- ub2 fetched_len;
- ub2 retcode;
- sb2 indicator;
-
- char *data;
- unsigned long datalen;
-
-} pdo_oci_column;
-
-typedef struct {
- pdo_oci_db_handle *H;
- OCIStmt *stmt;
- OCIError *err;
- sword last_err;
- ub2 stmt_type;
-
- pdo_oci_column *cols;
- pdo_oci_error_info einfo;
-} pdo_oci_stmt;
-
-typedef struct {
- OCIBind *bind; /* allocated by OCI */
- sb2 oci_type;
- sb2 indicator;
- ub2 retcode;
-
- ub4 actual_len;
-
- dvoid *thing; /* for LOBS, REFCURSORS etc. */
-} pdo_oci_bound_param;
-
-extern const ub4 PDO_OCI_INIT_MODE;
-extern pdo_driver_t pdo_oci_driver;
-extern OCIEnv *pdo_oci_Env;
-
-ub4 _oci_error(OCIError *err, pdo_dbh_t *dbh, pdo_stmt_t *stmt, char *what, sword status, const char *file, int line TSRMLS_DC);
-#define oci_drv_error(w) _oci_error(H->err, dbh, NULL, w, H->last_err, __FILE__, __LINE__ TSRMLS_CC)
-#define oci_stmt_error(w) _oci_error(S->err, stmt->dbh, stmt, w, S->last_err, __FILE__, __LINE__ TSRMLS_CC)
-
-extern struct pdo_stmt_methods oci_stmt_methods;
-
diff --git a/ext/pdo_oci/tests/connect.phpt b/ext/pdo_oci/tests/connect.phpt
deleted file mode 100644
index 9c79e86a40..0000000000
--- a/ext/pdo_oci/tests/connect.phpt
+++ /dev/null
@@ -1,17 +0,0 @@
---TEST--
-PDO_OCI: connect
---SKIPIF--
-<?php # vim:ft=php
-if (!extension_loaded("pdo_oci")) print "skip";
-?>
---FILE--
-<?php /* $Id$ */
-
-require "settings.inc";
-
-$db = new PDO("oci:dbname=$dbase",$user,$password) or die("connect error");
-echo "done\n";
-
-?>
---EXPECT--
-done
diff --git a/ext/pdo_oci/tests/settings.inc b/ext/pdo_oci/tests/settings.inc
deleted file mode 100644
index cbbaeda491..0000000000
--- a/ext/pdo_oci/tests/settings.inc
+++ /dev/null
@@ -1,13 +0,0 @@
-<?php /* $Id$ */
-
-/*
- * Please, change user, password and dbase to match your configuration.
- * */
-
-$user = "system";
-$password = "manager";
-$dbase = "dbase";
-
-$schema = "system";
-
-?>
diff --git a/ext/pdo_odbc/CREDITS b/ext/pdo_odbc/CREDITS
deleted file mode 100755
index b5af9df356..0000000000
--- a/ext/pdo_odbc/CREDITS
+++ /dev/null
@@ -1,2 +0,0 @@
-ODBC driver for PDO
-Wez Furlong
diff --git a/ext/pdo_odbc/EXPERIMENTAL b/ext/pdo_odbc/EXPERIMENTAL
deleted file mode 100644
index e69de29bb2..0000000000
--- a/ext/pdo_odbc/EXPERIMENTAL
+++ /dev/null
diff --git a/ext/pdo_odbc/config.m4 b/ext/pdo_odbc/config.m4
deleted file mode 100755
index e69a8a6bc7..0000000000
--- a/ext/pdo_odbc/config.m4
+++ /dev/null
@@ -1,111 +0,0 @@
-dnl $Id$
-dnl config.m4 for extension pdo_odbc
-
-AC_DEFUN(PDO_ODBC_HELP_TEXT, [[
- --with-pdo-odbc=flavour,dir Add support for "flavour" ODBC drivers,
- looking for include and lib dirs under "dir"
-
- flavour can be one of:
- ibm-db2, unixODBC
-
- You may omit the ,dir part to use a reasonable default for
- the flavour you have selected. e.g.:
- --with-pdo-odbc=unixODBC
- will check for unixODBC under /usr/local
-
- This extension will always be created as a shared extension
- named pdo_odbc.so
-]])
-
-PHP_ARG_WITH(pdo-odbc, ODBC v3 driver for PDO, PDO_ODBC_HELP_TEXT)
-
-AC_DEFUN([PDO_ODBC_CHECK_HEADER],[
- if test -f $PDO_ODBC_INCDIR/$1 ; then
- AC_DEFINE([HAVE_]translit($1,a-z_.-,A-Z___), 1, [ ])
- fi
-])
-
-AC_MSG_CHECKING(which ODBC flavour you want)
-if test "$PHP_PDO_ODBC" != "no" && test "$PHP_PDO_ODBC" != "yes" ; then
- pdo_odbc_flavour=`echo $withval | cut -d, -f1`
- pdo_odbc_dir=`echo $withval | cut -d, -f2`
-
- if test "$pdo_odbc_dir" = "$withval" ; then
- pdo_odbc_dir=""
- fi
-
- case $pdo_odbc_flavour in
- ibm-db2)
- pdo_odbc_def_libdir=/home/db2inst/sqllib/lib
- pdo_odbc_def_incdir=/home/db2inst1/sqllib/include
- pdo_odbc_def_lib=-ldb2
- ;;
-
- unixODBC)
- pdo_odbc_def_libdir=/usr/local/lib
- pdo_odbc_def_incdir=/usr/local/include
- pdo_odbc_def_lib=-lodbc
- ;;
-
- *)
- AC_MSG_ERROR(Unknown ODBC flavour $pdo_odbc_flavour
-PDO_ODBC_HELP_TEXT
-)
- ;;
- esac
-
- if test "$pdo_odbc_dir" != "" ; then
- PDO_ODBC_INCDIR="$pdo_odbc_dir/include"
- PDO_ODBC_LIBDIR="$pdo_odbc_dir/lib"
- else
- PDO_ODBC_INCDIR="$pdo_odbc_def_incdir"
- PDO_ODBC_LIBDIR="$pdo_odbc_def_libdir"
- fi
-
- AC_MSG_RESULT([$pdo_odbc_flavour
- libs $PDO_ODBC_LIBDIR,
- headers $PDO_ODBC_INCDIR])
-
- if ! test -d "$PDO_ODBC_LIBDIR" ; then
- AC_MSG_WARN([library dir $PDO_ODBC_LIBDIR does not exist])
- fi
-
- dnl yick time
- PDO_ODBC_CHECK_HEADER(odbc.h)
- PDO_ODBC_CHECK_HEADER(iodbc.h)
- PDO_ODBC_CHECK_HEADER(sqlunix.h)
- PDO_ODBC_CHECK_HEADER(sqltypes.h)
- PDO_ODBC_CHECK_HEADER(sqlucode.h)
- PDO_ODBC_CHECK_HEADER(sql.h)
- PDO_ODBC_CHECK_HEADER(isql.h)
- PDO_ODBC_CHECK_HEADER(sqlext.h)
- PDO_ODBC_CHECK_HEADER(isqlext.h)
- PDO_ODBC_CHECK_HEADER(udbcext.h)
- PDO_ODBC_CHECK_HEADER(sqlcli1.h)
- PDO_ODBC_CHECK_HEADER(LibraryManager.h)
- PDO_ODBC_CHECK_HEADER(cli0core.h)
- PDO_ODBC_CHECK_HEADER(cli0ext.h)
- PDO_ODBC_CHECK_HEADER(cli0cli.h)
- PDO_ODBC_CHECK_HEADER(cli0defs.h)
- PDO_ODBC_CHECK_HEADER(cli0env.h)
-
- PDO_ODBC_INCLUDE="-I$PDO_ODBC_INCDIR -DPDO_ODBC_TYPE=\\\"$pdo_odbc_flavour\\\""
- PDO_ODBC_LFLAGS="-L$PDO_ODBC_LIBDIR"
- PDO_ODBC_LIBS="$pdo_odbc_def_lib"
-
- LDFLAGS="$PDO_ODBC_LFLAGS $PDO_ODBC_LIBS -lm -ldl"
- AC_TRY_LINK_FUNC([SQLAllocHandle],[],[
- AC_MSG_ERROR([[Your ODBC libraries either do not exist, or do not appear to be ODBC3 compatible]])
- ])
- LDFLAGS=$save_old_LDFLAGS
- PHP_EVAL_LIBLINE($PDO_ODBC_LIBS $PDO_ODBC_LFLAGS, [PDO_ODBC_SHARED_LIBADD])
- PHP_SUBST(PDO_ODBC_SHARED_LIBADD)
-
- PHP_NEW_EXTENSION(pdo_odbc, pdo_odbc.c odbc_driver.c odbc_stmt.c, yes,,-I\$prefix/include/php/ext $PDO_ODBC_INCLUDE)
-else
- AC_MSG_ERROR(
-Unknown ODBC flavour $PHP_PDO_ODBC
-PDO_ODBC_HELP_TEXT
-)
-fi
-
diff --git a/ext/pdo_odbc/config.w32 b/ext/pdo_odbc/config.w32
deleted file mode 100755
index d7cc443f17..0000000000
--- a/ext/pdo_odbc/config.w32
+++ /dev/null
@@ -1,15 +0,0 @@
-// $Id$
-// vim:ft=javascript
-
-ARG_WITH("pdo-odbc", "ODBC support for PDO", "no");
-
-if (PHP_PDO_ODBC != "no") {
- if (CHECK_LIB("odbc32.lib", "pdo_odbc") && CHECK_LIB("odbccp32.lib", "pdo_odbc")) {
- EXTENSION("pdo_odbc", "pdo_odbc.c odbc_driver.c odbc_stmt.c");
- CHECK_HEADER_ADD_INCLUDE('sql.h', 'CFLAGS_PDO_ODBC');
- CHECK_HEADER_ADD_INCLUDE('sqlext.h', 'CFLAGS_PDO_ODBC');
- ADD_FLAG('CFLAGS_PDO_ODBC', "/I ..\\pecl");
- }
- ADD_EXTENSION_DEP('pdo_odbc', 'pdo');
-}
-
diff --git a/ext/pdo_odbc/odbc_driver.c b/ext/pdo_odbc/odbc_driver.c
deleted file mode 100755
index e3d557bb00..0000000000
--- a/ext/pdo_odbc/odbc_driver.c
+++ /dev/null
@@ -1,410 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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$ */
-
-#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 struct {
- char state[6];
- enum pdo_error_type err;
-} odbc_to_pdo_err_map[] = {
- /* this table maps ODBC V3 SQLSTATE codes to PDO_ERR codes */
- { "42S01", PDO_ERR_ALREADY_EXISTS },
- { "42S11", PDO_ERR_ALREADY_EXISTS },
- { "42S21", PDO_ERR_ALREADY_EXISTS },
- { "IM001", PDO_ERR_NOT_IMPLEMENTED },
- { "42S22", PDO_ERR_NOT_FOUND },
- { "42S12", PDO_ERR_NOT_FOUND },
- { "42S02", PDO_ERR_NOT_FOUND },
- { "42000", PDO_ERR_SYNTAX },
- { "23000", PDO_ERR_CONSTRAINT },
- { "22025", PDO_ERR_SYNTAX },
- { "22019", PDO_ERR_SYNTAX },
- { "22018", PDO_ERR_SYNTAX },
- { "08S01", PDO_ERR_DISCONNECTED },
- { "01S07", PDO_ERR_TRUNCATED },
-
-};
-
-static HashTable err_hash;
-
-void pdo_odbc_fini_error_table(void)
-{
- zend_hash_destroy(&err_hash);
-}
-
-void pdo_odbc_init_error_table(void)
-{
- int i;
-
- zend_hash_init(&err_hash, 0, NULL, NULL, 1);
-
- for (i = 0; i < sizeof(odbc_to_pdo_err_map)/sizeof(odbc_to_pdo_err_map[0]); i++) {
- zend_hash_add(&err_hash, odbc_to_pdo_err_map[i].state, sizeof(odbc_to_pdo_err_map[i].state),
- &odbc_to_pdo_err_map[i].err, sizeof(odbc_to_pdo_err_map[i].err), NULL);
- }
-}
-
-static enum pdo_error_type pdo_odbc_map_error(char *state)
-{
- enum pdo_error_type *p_err;
- if (SUCCESS == zend_hash_find(&err_hash, state, sizeof(odbc_to_pdo_err_map[0].state), (void**)&p_err)) {
- return *p_err;
- }
- return PDO_ERR_CANT_MAP;
-}
-
-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: %d %s [SQL State %s] (%s:%d)",
- einfo->what, einfo->last_error, einfo->last_err_msg, einfo->last_state, 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) /* {{{ */
-{
- RETCODE rc;
- SWORD errmsgsize;
- pdo_odbc_db_handle *H = (pdo_odbc_db_handle*)dbh->driver_data;
- pdo_odbc_errinfo *einfo = &H->einfo;
- pdo_odbc_stmt *S = NULL;
- enum 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;
- }
-
- rc = SQLError(H->env, H->dbc, statement, einfo->last_state, &einfo->last_error,
- einfo->last_err_msg, sizeof(einfo->last_err_msg)-1, &errmsgsize);
-
- einfo->last_err_msg[errmsgsize] = '\0';
- einfo->file = file;
- einfo->line = line;
- einfo->what = what;
-
- *pdo_err = pdo_odbc_map_error(einfo->last_state);
-
- if (!dbh->methods) {
- zend_throw_exception_ex(php_pdo_get_exception(), *pdo_err TSRMLS_CC, "%s: %d %s [SQL State %s]",
- what, einfo->last_error, einfo->last_err_msg, einfo->last_state);
- }
-}
-/* }}} */
-
-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);
- }
- SQLFreeHandle(SQL_HANDLE_ENV, H->env);
- pefree(H, dbh->is_persistent);
-
- return 0;
-}
-
-static int odbc_handle_preparer(pdo_dbh_t *dbh, const char *sql, long sql_len, pdo_stmt_t *stmt, long options, 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;
-
- S->H = H;
-
- rc = SQLAllocHandle(SQL_HANDLE_STMT, H->dbc, &S->stmt);
-
- if (rc == SQL_INVALID_HANDLE || rc == SQL_ERROR) {
- efree(S);
- 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) {
- SQLUINTEGER cursor;
-
- switch (cursor_type) {
- case PDO_CURSOR_SCROLL:
- cursor = SQL_CURSOR_STATIC;
- default:
- ;
- }
-
- rc = SQLSetStmtAttr(S->stmt, SQL_CURSOR_TYPE, (void*)cursor, SQL_IS_UINTEGER);
- if (rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) {
- pdo_odbc_stmt_error("SQLSetStmtOption: SQL_CURSOR_TYPE");
- SQLFreeHandle(SQL_HANDLE_STMT, S->stmt);
- return 0;
- }
- }
-
- rc = SQLPrepare(S->stmt, (char*)sql, SQL_NTS);
-
- if (rc != SQL_SUCCESS) {
- pdo_odbc_stmt_error("SQLPrepare");
- }
-
- if (rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) {
- SQLFreeHandle(SQL_HANDLE_STMT, S->stmt);
- return 0;
- }
-
- stmt->driver_data = S;
- stmt->methods = &odbc_stmt_methods;
-
- 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_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;
- }
-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 TSRMLS_DC)
-{
- pdo_odbc_db_handle *H = (pdo_odbc_db_handle *)dbh->driver_data;
-
- return 0;
-}
-
-static int odbc_handle_begin(pdo_dbh_t *dbh TSRMLS_DC)
-{
- /* with ODBC, there is nothing special to be done */
- 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;
- }
- }
- 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;
- }
- }
- return 1;
-}
-
-
-
-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,
- NULL, /* get attr */
-};
-
-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");
- odbc_handle_closer(dbh TSRMLS_CC);
- return 0;
- }
-
-#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");
- odbc_handle_closer(dbh TSRMLS_CC);
- return 0;
- }
- }
-#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)");
- odbc_handle_closer(dbh TSRMLS_CC);
- return 0;
- }
-
- if (!dbh->auto_commit) {
- rc = SQLSetConnectAttr(H->dbc, SQL_ATTR_AUTOCOMMIT, SQL_AUTOCOMMIT_OFF, SQL_IS_UINTEGER);
- if (rc != SQL_SUCCESS) {
- pdo_odbc_drv_error("SQLSetConnectAttr AUTOCOMMIT = OFF");
- odbc_handle_closer(dbh TSRMLS_CC);
- return 0;
- }
- }
-
- /* 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_UINTEGER);
- if (rc != SQL_SUCCESS) {
- pdo_odbc_drv_error("SQLSetConnectAttr SQL_ODBC_CURSORS");
- odbc_handle_closer(dbh TSRMLS_CC);
- return 0;
- }
-
-
- 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 && !strstr(dbh->data_source, "uid") && !strstr(dbh->data_source, "UID")) {
- char *dsn = pemalloc(strlen(dbh->data_source) + strlen(dbh->username) + strlen(dbh->password) + sizeof(";UID=;PWD="), dbh->is_persistent);
- sprintf(dsn, "%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");
- odbc_handle_closer(dbh TSRMLS_CC);
- return 0;
- }
-
- /* 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;
- dbh->supports_placeholders = PDO_PLACEHOLDER_POSITIONAL;
-
- return 1;
-}
-/* }}} */
-
-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
deleted file mode 100755
index 807b607803..0000000000
--- a/ext/pdo_odbc/odbc_stmt.c
+++ /dev/null
@@ -1,262 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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$ */
-
-#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 int odbc_stmt_dtor(pdo_stmt_t *stmt TSRMLS_DC)
-{
- pdo_odbc_stmt *S = (pdo_odbc_stmt*)stmt->driver_data;
- int i;
-
- if (S->stmt != SQL_NULL_HANDLE) {
- if (stmt->executed) {
- SQLCancel(S->stmt);
- }
- SQLFreeHandle(SQL_HANDLE_STMT, S->stmt);
- S->stmt = SQL_NULL_HANDLE;
- }
-
- if (S->cols) {
- for (i = 0; i < stmt->column_count; i++) {
- if (S->cols[i].data) {
- efree(S->cols[i].data);
- }
- }
- efree(S->cols);
- S->cols = NULL;
- }
- 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;
-
- if (stmt->executed) {
- SQLCancel(S->stmt);
- }
-
- rc = SQLExecute(S->stmt);
-
- 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;
- }
-
- 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));
- }
-
- 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, ctype, scale, nullable;
- UDWORD precision;
-
- /* we're only interested in parameters for prepared SQL right now */
- if (param->is_param) {
-
- switch (event_type) {
- case PDO_PARAM_EVT_ALLOC:
-
- /* figure out what we're doing */
- switch (param->param_type) {
- case PDO_PARAM_LOB:
- case PDO_PARAM_STMT:
- return 0;
-
- case PDO_PARAM_STR:
- default:
- convert_to_string(param->parameter);
- }
-
- SQLDescribeParam(S->stmt, param->paramno+1, &sqltype, &precision, &scale, &nullable);
- if (sqltype == SQL_BINARY || sqltype == SQL_VARBINARY || sqltype == SQL_LONGVARBINARY) {
- ctype = SQL_C_BINARY;
- } else {
- ctype = SQL_C_CHAR;
- }
-
- rc = SQLBindParameter(S->stmt, param->paramno+1,
- SQL_PARAM_INPUT, ctype, sqltype, precision, scale,
- Z_STRVAL_P(param->parameter), 0,
- /* XXX: this has the wrong type for DB2 */
- &Z_STRLEN_P(param->parameter)
- );
-
- return 1;
- }
- }
- return 1;
-}
-
-static int odbc_stmt_fetch(pdo_stmt_t *stmt TSRMLS_DC)
-{
- pdo_odbc_stmt *S = (pdo_odbc_stmt*)stmt->driver_data;
- RETCODE rc;
-
- rc = SQLFetch(S->stmt);
-
- if (rc == SQL_SUCCESS || rc == SQL_SUCCESS_WITH_INFO) {
- return 1;
- }
-
- if (rc == SQL_NO_DATA) {
- return 0;
- }
-
- pdo_odbc_stmt_error("SQLFetch");
-
- 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;
-
- rc = SQLDescribeCol(S->stmt, colno+1, S->cols[colno].colname,
- sizeof(S->cols[colno].colname)-1, &colnamelen,
- &S->cols[colno].coltype, &colsize, NULL, NULL);
-
- col->maxlen = S->cols[colno].datalen = colsize;
- col->namelen = colnamelen;
- col->name = S->cols[colno].colname;
-
- S->cols[colno].data = emalloc(colsize+1);
-
- /* returning data as a string */
- col->param_type = PDO_PARAM_STR;
-
- /* tell ODBC to put it straight into our buffer */
- rc = SQLBindCol(S->stmt, colno+1, SQL_C_CHAR, S->cols[colno].data,
- S->cols[colno].datalen, &S->cols[colno].fetched_len);
-
- return 1;
-}
-
-static int odbc_stmt_get_col(pdo_stmt_t *stmt, int colno, char **ptr, unsigned long *len TSRMLS_DC)
-{
- pdo_odbc_stmt *S = (pdo_odbc_stmt*)stmt->driver_data;
- pdo_odbc_column *C = &S->cols[colno];
-
- /* 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";
- stmt->error_code = PDO_ERR_NOT_IMPLEMENTED;
- S->einfo.last_state[0] = '\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,
- NULL
-};
-
-/*
- * 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/package.xml b/ext/pdo_odbc/package.xml
deleted file mode 100755
index 7b86564b46..0000000000
--- a/ext/pdo_odbc/package.xml
+++ /dev/null
@@ -1,53 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-<!DOCTYPE package SYSTEM "../pear/package.dtd">
-<package version="1.0">
- <name>PDO_ODBC</name>
- <summary>ODBC v3 Interface driver for PDO</summary>
- <maintainers>
- <maintainer>
- <user>wez</user>
- <name>Wez Furlong</name>
- <email>wez@php.net</email>
- <role>lead</role>
- </maintainer>
- </maintainers>
- <configureoptions>
- <configureoption name="with-pdo-odbc" prompt="flavour,dir? (just leave blank for help)"/>
-</configureoptions>
- <description>
- This extension provides an ODBC v3 driver for PDO. It supports unixODBC
- and IBM DB2 libraries, and will support more in future releases.
- </description>
- <license>PHP</license>
- <release>
- <state>alpha</state>
- <version>0.1.1</version>
- <date>2004-05-22</date>
-
- <notes>
- You need to install the PDO core module before you can make use of this one.
- You also require either IBM DB2 CLI libraries or unixODBC.
-
- If you are running on windows, you can download the binary from here:
- http://snaps.php.net/win32/PECL_5_0/php_pdo_odbc.dll
-
- This release features working error reporting(!) and ODBC connection pooling.
- </notes>
-
- <filelist>
- <file role="src" name="config.m4"/>
- <file role="src" name="config.w32"/>
- <file role="src" name="pdo_odbc.c"/>
- <file role="src" name="odbc_driver.c"/>
- <file role="src" name="odbc_stmt.c"/>
- <file role="src" name="php_pdo_odbc.h"/>
- <file role="src" name="php_pdo_odbc_int.h"/>
-
- <file role="doc" name="CREDITS"/>
- </filelist>
- <deps>
- <dep type="php" rel="ge" version="5.0.0RC3dev"/>
- <dep type="ext" rel="ge" name="pdo" version="0.1"/>
- </deps>
- </release>
-</package>
diff --git a/ext/pdo_odbc/pdo_odbc.c b/ext/pdo_odbc/pdo_odbc.c
deleted file mode 100755
index e8dc26b5ae..0000000000
--- a/ext/pdo_odbc/pdo_odbc.c
+++ /dev/null
@@ -1,155 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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$ */
-
-#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"
-
-#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
-
-/* {{{ pdo_odbc_functions[] */
-function_entry pdo_odbc_functions[] = {
- {NULL, NULL, NULL}
-};
-/* }}} */
-
-/* {{{ pdo_odbc_module_entry */
-zend_module_entry pdo_odbc_module_entry = {
- STANDARD_MODULE_HEADER,
- "PDO_ODBC",
- pdo_odbc_functions,
- PHP_MINIT(pdo_odbc),
- PHP_MSHUTDOWN(pdo_odbc),
- NULL,
- NULL,
- PHP_MINFO(pdo_odbc),
- "0.1.1",
- STANDARD_MODULE_PROPERTIES
-};
-/* }}} */
-
-#ifdef COMPILE_DL_PDO_ODBC
-ZEND_GET_MODULE(pdo_odbc)
-#endif
-
-#ifdef SQL_ATTR_CONNECTION_POOLING
-SQLUINTEGER pdo_odbc_pool_on = SQL_CP_OFF;
-SQLUINTEGER pdo_odbc_pool_mode = SQL_CP_ONE_PER_HENV;
-#endif
-
-/* {{{ PHP_MINIT_FUNCTION */
-PHP_MINIT_FUNCTION(pdo_odbc)
-{
-#ifdef SQL_ATTR_CONNECTION_POOLING
- char *pooling_val = NULL;
-#endif
-
- if (FAILURE == php_pdo_register_driver(&pdo_odbc_driver)) {
- return FAILURE;
- }
-
- pdo_odbc_init_error_table();
-
-#ifdef SQL_ATTR_CONNECTION_POOLING
- /* ugh, we don't really .ini stuff in PDO, but since ODBC connection
- * pooling is process wide, we can't set it from within the scope of a
- * request without affecting others, which goes against our isolated request
- * policy. So, we use cfg_get_string here to check it this once.
- * */
- if (FAILURE == cfg_get_string("pdo_odbc.connection_pooling", &pooling_val) || pooling_val == NULL) {
- pooling_val = "strict";
- }
- if (strcasecmp(pooling_val, "strict") == 0 || strcmp(pooling_val, "1") == 0) {
- pdo_odbc_pool_on = SQL_CP_ONE_PER_HENV;
- pdo_odbc_pool_mode = SQL_CP_STRICT_MATCH;
- } else if (strcasecmp(pooling_val, "relaxed") == 0) {
- pdo_odbc_pool_on = SQL_CP_ONE_PER_HENV;
- pdo_odbc_pool_mode = SQL_CP_RELAXED_MATCH;
- } else if (*pooling_val == '\0' || strcasecmp(pooling_val, "off") == 0) {
- pdo_odbc_pool_on = SQL_CP_OFF;
- } else {
- php_error_docref(NULL TSRMLS_CC, E_ERROR, "Error in pdo_odbc.connection_pooling configuration. Value MUST be one of 'strict', 'relaxed' or 'off'");
- return FAILURE;
- }
-
- if (pdo_odbc_pool_on != SQL_CP_OFF) {
- SQLSetEnvAttr(SQL_NULL_HANDLE, SQL_ATTR_CONNECTION_POOLING, (void*)pdo_odbc_pool_on, 0);
- }
-#endif
-
- REGISTER_LONG_CONSTANT("PDO_ODBC_ATTR_USE_CURSOR_LIBRARY", PDO_ODBC_ATTR_USE_CURSOR_LIBRARY, CONST_CS|CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("PDO_ODBC_SQL_USE_IF_NEEDED", SQL_CUR_USE_IF_NEEDED, CONST_CS|CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("PDO_ODBC_SQL_USE_DRIVER", SQL_CUR_USE_DRIVER, CONST_CS|CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("PDO_ODBC_SQL_USE_ODBC", SQL_CUR_USE_ODBC, CONST_CS|CONST_PERSISTENT);
-
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ PHP_MSHUTDOWN_FUNCTION
- */
-PHP_MSHUTDOWN_FUNCTION(pdo_odbc)
-{
- php_pdo_unregister_driver(&pdo_odbc_driver);
- pdo_odbc_fini_error_table();
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ PHP_MINFO_FUNCTION
- */
-PHP_MINFO_FUNCTION(pdo_odbc)
-{
- php_info_print_table_start();
- php_info_print_table_header(2, "PDO Driver for ODBC (" PDO_ODBC_TYPE ")" , "enabled");
-#ifdef SQL_ATTR_CONNECTION_POOLING
- php_info_print_table_row(2, "ODBC Connection Pooling", pdo_odbc_pool_on == SQL_CP_OFF ?
- "Disabled" : (pdo_odbc_pool_mode == SQL_CP_STRICT_MATCH ? "Enabled, strict matching" : "Enabled, relaxed matching"));
-#else
- php_info_print_table_row(2, "ODBC Connection Pooling", "Not supported in this build");
-#endif
- php_info_print_table_end();
-
-}
-/* }}} */
-
-/*
- * 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/php_pdo_odbc.h b/ext/pdo_odbc/php_pdo_odbc.h
deleted file mode 100644
index 1c2dcf4197..0000000000
--- a/ext/pdo_odbc/php_pdo_odbc.h
+++ /dev/null
@@ -1,81 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifndef PHP_PDO_ODBC_H
-#define PHP_PDO_ODBC_H
-
-extern zend_module_entry pdo_odbc_module_entry;
-#define phpext_pdo_odbc_ptr &pdo_odbc_module_entry
-
-#ifdef PHP_WIN32
-#define PHP_PDO_ODBC_API __declspec(dllexport)
-#else
-#define PHP_PDO_ODBC_API
-#endif
-
-#ifdef ZTS
-#include "TSRM.h"
-#endif
-
-PHP_MINIT_FUNCTION(pdo_odbc);
-PHP_MSHUTDOWN_FUNCTION(pdo_odbc);
-PHP_RINIT_FUNCTION(pdo_odbc);
-PHP_RSHUTDOWN_FUNCTION(pdo_odbc);
-PHP_MINFO_FUNCTION(pdo_odbc);
-
-PHP_FUNCTION(confirm_pdo_odbc_compiled); /* For testing, remove later. */
-
-/*
- Declare any global variables you may need between the BEGIN
- and END macros here:
-
-ZEND_BEGIN_MODULE_GLOBALS(pdo_odbc)
- long global_value;
- char *global_string;
-ZEND_END_MODULE_GLOBALS(pdo_odbc)
-*/
-
-/* In every utility function you add that needs to use variables
- in php_pdo_odbc_globals, call TSRMLS_FETCH(); after declaring other
- variables used by that function, or better yet, pass in TSRMLS_CC
- after the last function argument and declare your utility function
- with TSRMLS_DC after the last declared argument. Always refer to
- the globals in your function as PDO_ODBC_G(variable). You are
- encouraged to rename these macros something shorter, see
- examples in any other php module directory.
-*/
-
-#ifdef ZTS
-#define PDO_ODBC_G(v) TSRMG(pdo_odbc_globals_id, zend_pdo_odbc_globals *, v)
-#else
-#define PDO_ODBC_G(v) (pdo_odbc_globals.v)
-#endif
-
-#endif /* PHP_PDO_ODBC_H */
-
-
-/*
- * 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/php_pdo_odbc_int.h b/ext/pdo_odbc/php_pdo_odbc_int.h
deleted file mode 100755
index e249be5687..0000000000
--- a/ext/pdo_odbc/php_pdo_odbc_int.h
+++ /dev/null
@@ -1,163 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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$ */
-
-/* {{{ 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
-
-/* }}} */
-
-/* {{{ 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[32];
-} pdo_odbc_column;
-
-typedef struct {
- PDO_ODBC_HSTMT stmt;
- pdo_odbc_column *cols;
- pdo_odbc_db_handle *H;
- pdo_odbc_errinfo einfo;
-} pdo_odbc_stmt;
-
-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/CREDITS b/ext/pdo_pgsql/CREDITS
deleted file mode 100644
index bbb7b94428..0000000000
--- a/ext/pdo_pgsql/CREDITS
+++ /dev/null
@@ -1,2 +0,0 @@
-PostgreSQL driver for PDO
-Edin Kadribasic, Ilia Alshanetsky
diff --git a/ext/pdo_pgsql/config.m4 b/ext/pdo_pgsql/config.m4
deleted file mode 100644
index 2ead970e9d..0000000000
--- a/ext/pdo_pgsql/config.m4
+++ /dev/null
@@ -1,102 +0,0 @@
-dnl
-dnl $Id$
-dnl
-
-AC_DEFUN(PHP_PGSQL_CHECK_FUNCTIONS,[
-])
-
-PHP_ARG_WITH(pdo-pgsql,for PostgreSQL support for PDO,
-[ --with-pdo-pgsql[=DIR] Include PDO PostgreSQL support. DIR
- is the PostgreSQL base install directory
- or the path to pg_config.])
-
-if test "$PHP_PDO_PGSQL" != "no"; then
- PHP_EXPAND_PATH($PGSQL_INCLUDE, PGSQL_INCLUDE)
-
- AC_MSG_CHECKING(for pg_config)
- for i in $PHP_PDO_PGSQL $PHP_PDO_PGSQL/bin /usr/local/pgsql/bin /usr/local/bin /usr/bin ""; do
- if test -x $i/pg_config; then
- PG_CONFIG="$i/pg_config"
- break;
- fi
- done
-
- if test -n "$PG_CONFIG"; then
- AC_MSG_RESULT([$PG_CONFIG])
- PGSQL_INCLUDE=`$PG_CONFIG --includedir`
- PGSQL_LIBDIR=`$PG_CONFIG --libdir`
- AC_DEFINE(HAVE_PG_CONFIG_H,1,[Whether to have pg_config.h])
- else
- AC_MSG_RESULT(not found)
- if test "$PHP_PDO_PGSQL" = "yes"; then
- PGSQL_SEARCH_PATHS="/usr /usr/local /usr/local/pgsql"
- else
- PGSQL_SEARCH_PATHS=$PHP_PDO_PGSQL
- fi
-
- for i in $PGSQL_SEARCH_PATHS; do
- for j in include include/pgsql include/postgres include/postgresql ""; do
- if test -r "$i/$j/libpq-fe.h"; then
- PGSQL_INC_BASE=$i
- PGSQL_INCLUDE=$i/$j
- if test -r "$i/$j/pg_config.h"; then
- AC_DEFINE(HAVE_PG_CONFIG_H,1,[Whether to have pg_config.h])
- fi
- fi
- done
-
- for j in lib lib/pgsql lib/postgres lib/postgresql ""; do
- if test -f "$i/$j/libpq.so" || test -f "$i/$j/libpq.a"; then
- PGSQL_LIBDIR=$i/$j
- fi
- done
- done
- fi
-
- if test -z "$PGSQL_INCLUDE"; then
- AC_MSG_ERROR(Cannot find libpq-fe.h. Please specify correct PostgreSQL installation path)
- fi
-
- if test -z "$PGSQL_LIBDIR"; then
- AC_MSG_ERROR(Cannot find libpq.so. Please specify correct PostgreSQL installation path)
- fi
-
- if test -z "$PGSQL_INCLUDE" -a -z "$PGSQL_LIBDIR" ; then
- AC_MSG_ERROR([Unable to find libpq anywhere under $withval])
- fi
-
- AC_DEFINE(HAVE_PDO_PGSQL,1,[Whether to build PostgreSQL for PDO support or not])
- old_LIBS=$LIBS
- old_LDFLAGS=$LDFLAGS
- LDFLAGS="$LDFLAGS -L$PGSQL_LIBDIR"
- AC_CHECK_LIB(pq, PQescapeString,AC_DEFINE(HAVE_PQESCAPE,1,[PostgreSQL 7.2.0 or later]))
- AC_CHECK_LIB(pq, PQsetnonblocking,AC_DEFINE(HAVE_PQSETNONBLOCKING,1,[PostgreSQL 7.0.x or later]))
- AC_CHECK_LIB(pq, PQcmdTuples,AC_DEFINE(HAVE_PQCMDTUPLES,1,[Broken libpq under windows]))
- AC_CHECK_LIB(pq, PQoidValue,AC_DEFINE(HAVE_PQOIDVALUE,1,[Older PostgreSQL]))
- AC_CHECK_LIB(pq, PQclientEncoding,AC_DEFINE(HAVE_PQCLIENTENCODING,1,[PostgreSQL 7.0.x or later]))
- AC_CHECK_LIB(pq, PQparameterStatus,AC_DEFINE(HAVE_PQPARAMETERSTATUS,1,[PostgreSQL 7.4 or later]))
- AC_CHECK_LIB(pq, PQprotocolVersion,AC_DEFINE(HAVE_PQPROTOCOLVERSION,1,[PostgreSQL 7.4 or later]))
- AC_CHECK_LIB(pq, PQtransactionStatus,AC_DEFINE(HAVE_PGTRANSACTIONSTATUS,1,[PostgreSQL 7.4 or later]))
- AC_CHECK_LIB(pq, pg_encoding_to_char,AC_DEFINE(HAVE_PGSQL_WITH_MULTIBYTE_SUPPORT,1,[Whether libpq is compiled with --enable-multibye]))
- LIBS=$old_LIBS
- LDFLAGS=$old_LDFLAGS
-
- PHP_ADD_LIBRARY_WITH_PATH(pq, $PGSQL_LIBDIR, PDO_PGSQL_SHARED_LIBADD)
- PHP_SUBST(PDO_PGSQL_SHARED_LIBADD)
-
- PHP_ADD_INCLUDE($PGSQL_INCLUDE)
-
-dnl find PDO sources
- if test -f $prefix/include/php/ext/pdo/php_pdo_driver.h; then
- pdo_inc_path=$prefix/include/php/ext
- elif test -f $abs_srcdir/ext/pdo/php_pdo_driver.h; then
- pdo_inc_path=$abs_srcdir/ext
- elif test -f ext/pdo/php_pdo_driver.h; then
- pdo_inc_path=ext
- else
- AC_MSG_ERROR([Cannot find php_pdo_driver.h.])
- fi
-
- PHP_NEW_EXTENSION(pdo_pgsql, pdo_pgsql.c pgsql_driver.c pgsql_statement.c, $ext_shared,,-I$pdo_inc_path)
- PHP_ADD_EXTENSION_DEP(pdo_pgsql, pdo)
-fi
diff --git a/ext/pdo_pgsql/config.w32 b/ext/pdo_pgsql/config.w32
deleted file mode 100644
index eaa232dfc9..0000000000
--- a/ext/pdo_pgsql/config.w32
+++ /dev/null
@@ -1,16 +0,0 @@
-// $Id$
-// vim:ft=javascript
-
-ARG_WITH("pdo-pgsql", "PostgreSQL support for PDO", "no");
-
-if (PHP_PDO_PGSQL != "no") {
- if (CHECK_LIB("libpq.lib", "pdo_pgsql", PHP_PDO_PGSQL) &&
- CHECK_HEADER_ADD_INCLUDE("libpq-fe.h", "CFLAGS_PDO_PGSQL", PHP_PDO_PGSQL + ";" + PHP_PHP_BUILD + "\\include\\pgsql")) {
- EXTENSION("pdo_pgsql", "pdo_pgsql.c pgsql_driver.c pgsql_statement.c");
- ADD_FLAG('CFLAGS_PDO_PGSQL', "/I ..\\pecl");
- AC_DEFINE('HAVE_PDO_PGSQL', 1, 'Have PostgreSQL library');
- } else {
- WARNING("pdo_pgsql not enabled; libraries and headers not found");
- }
- ADD_EXTENSION_DEP('pdo_pgsql', 'pdo');
-}
diff --git a/ext/pdo_pgsql/package.xml b/ext/pdo_pgsql/package.xml
deleted file mode 100644
index 290f66bdbf..0000000000
--- a/ext/pdo_pgsql/package.xml
+++ /dev/null
@@ -1,53 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-<!DOCTYPE package SYSTEM "../pear/package.dtd">
-<package version="1.0">
- <name>PDO_PGSQL</name>
- <summary>PostgreSQL driver for PDO</summary>
- <maintainers>
- <maintainer>
- <user>edink</user>
- <name>Edin Kadribasic</name>
- <email>edink@php.net</email>
- <role>lead</role>
- </maintainer>
- <maintainer>
- <user>iliaa</user>
- <name>Ilia Alshanetsky</name>
- <email>iliaa@php.net</email>
- <role>lead</role>
- </maintainer>
- </maintainers>
- <description>
- This extension provides an PostgreSQL driver for PDO.
- </description>
- <license>PHP</license>
- <release>
- <state>alpha</state>
- <version>0.1</version>
- <date>2004-05-21</date>
-
- <notes>
- You need to install the PDO core module before you can make use of this one.
- You also require PostgreSQL client libraries installed on the machine where you intend to build and/or use it.
-
- If you are running on windows, you can download the binary from here:
- http://snaps.php.net/win32/PECL_5_0/php_pdo_pgsql.dll
- </notes>
-
- <filelist>
- <file role="src" name="config.m4"/>
- <file role="src" name="config.w32"/>
- <file role="src" name="pdo_pgsql.c"/>
- <file role="src" name="pgsql_driver.c"/>
- <file role="src" name="pgsql_statement.c"/>
- <file role="src" name="php_pdo_pgsql.h"/>
- <file role="src" name="php_pdo_pgsql_int.h"/>
-
- <file role="doc" name="CREDITS"/>
- </filelist>
- <deps>
- <dep type="php" rel="ge" version="5.0.0RC3dev"/>
- <dep type="ext" rel="ge" name="pdo" version="0.1"/>
- </deps>
- </release>
-</package>
diff --git a/ext/pdo_pgsql/pdo_pgsql.c b/ext/pdo_pgsql/pdo_pgsql.c
deleted file mode 100644
index f6c4616e7a..0000000000
--- a/ext/pdo_pgsql/pdo_pgsql.c
+++ /dev/null
@@ -1,113 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Edin Kadribasic <edink@emini.dk> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#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_pgsql.h"
-#include "php_pdo_pgsql_int.h"
-
-/* {{{ pdo_pgsql_functions[] */
-function_entry pdo_pgsql_functions[] = {
- {NULL, NULL, NULL}
-};
-/* }}} */
-
-/* {{{ pdo_pgsql_module_entry */
-zend_module_entry pdo_pgsql_module_entry = {
- STANDARD_MODULE_HEADER,
- "pdo_pgsql",
- pdo_pgsql_functions,
- PHP_MINIT(pdo_pgsql),
- PHP_MSHUTDOWN(pdo_pgsql),
- PHP_RINIT(pdo_pgsql),
- PHP_RSHUTDOWN(pdo_pgsql),
- PHP_MINFO(pdo_pgsql),
- "0.1",
- STANDARD_MODULE_PROPERTIES
-};
-/* }}} */
-
-#ifdef COMPILE_DL_PDO_PGSQL
-ZEND_GET_MODULE(pdo_pgsql)
-#endif
-
-/* true global environment */
-
-/* {{{ PHP_MINIT_FUNCTION
- */
-PHP_MINIT_FUNCTION(pdo_pgsql)
-{
- php_pdo_register_driver(&pdo_pgsql_driver);
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ PHP_MSHUTDOWN_FUNCTION
- */
-PHP_MSHUTDOWN_FUNCTION(pdo_pgsql)
-{
- php_pdo_unregister_driver(&pdo_pgsql_driver);
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ PHP_RINIT_FUNCTION
- */
-PHP_RINIT_FUNCTION(pdo_pgsql)
-{
- // php_pdo_register_driver(&pdo_pgsql_driver);
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ PHP_MSHUTDOWN_FUNCTION
- */
-PHP_RSHUTDOWN_FUNCTION(pdo_pgsql)
-{
- // php_pdo_unregister_driver(&pdo_pgsql_driver);
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ PHP_MINFO_FUNCTION
- */
-PHP_MINFO_FUNCTION(pdo_pgsql)
-{
- php_info_print_table_start();
- php_info_print_table_header(2, "PDO Driver for PostgreSQL", "enabled");
- php_info_print_table_end();
-}
-/* }}} */
-
-/*
- * 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/pgsql_driver.c b/ext/pdo_pgsql/pgsql_driver.c
deleted file mode 100644
index f30b39ecc8..0000000000
--- a/ext/pdo_pgsql/pgsql_driver.c
+++ /dev/null
@@ -1,391 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Edin Kadribasic <edink@emini.dk> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#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 "pg_config.h" /* needed for PG_VERSION */
-#include "php_pdo_pgsql.h"
-#include "php_pdo_pgsql_int.h"
-#include "zend_exceptions.h"
-
-static char * _pdo_pgsql_trim_message(const char *message)
-{
- register int i = strlen(message)-1;
-
- if (i>1 && (message[i-1] == '\r' || message[i-1] == '\n') && message[i] == '.') {
- --i;
- }
- while (i>0 && (message[i] == '\r' || message[i] == '\n')) {
- --i;
- }
- ++i;
- return estrndup(message, i);
-}
-
-int _pdo_pgsql_error(pdo_dbh_t *dbh, pdo_stmt_t *stmt, int errcode, const char *file, int line TSRMLS_DC) /* {{{ */
-{
- pdo_pgsql_db_handle *H = (pdo_pgsql_db_handle *)dbh->driver_data;
- enum pdo_error_type *pdo_err = stmt ? &stmt->error_code : &dbh->error_code;
- pdo_pgsql_error_info *einfo = &H->einfo;
- char *errmsg = PQerrorMessage(H->server);
-
- einfo->errcode = errcode;
- einfo->file = file;
- einfo->line = line;
-
- if (einfo->errmsg) {
- efree(einfo->errmsg);
- einfo->errmsg = NULL;
- }
-
- switch (errcode) {
- case PGRES_EMPTY_QUERY:
- *pdo_err = PDO_ERR_SYNTAX;
- break;
-
- default:
- *pdo_err = PDO_ERR_CANT_MAP;
- break;
- }
-
- if (errmsg) {
- einfo->errmsg = _pdo_pgsql_trim_message(errmsg);
- }
-
- if (!dbh->methods) {
- zend_throw_exception_ex(php_pdo_get_exception(), *pdo_err TSRMLS_CC, "[%d] %s",
- einfo->errcode, einfo->errmsg);
- }
-
- return errcode;
-}
-/* }}} */
-
-static int pdo_pgsql_fetch_error_func(pdo_dbh_t *dbh, pdo_stmt_t *stmt, zval *info TSRMLS_DC) /* {{{ */
-{
- pdo_pgsql_db_handle *H = (pdo_pgsql_db_handle *)dbh->driver_data;
- pdo_pgsql_error_info *einfo = &H->einfo;
-
- if (einfo->errcode) {
- add_next_index_long(info, einfo->errcode);
- add_next_index_string(info, einfo->errmsg, 1);
- }
-
- return 1;
-}
-/* }}} */
-
-static int pgsql_handle_closer(pdo_dbh_t *dbh TSRMLS_DC) /* {{{ */
-{
- pdo_pgsql_db_handle *H = (pdo_pgsql_db_handle *)dbh->driver_data;
- if (H) {
- if (H->server) {
- PQfinish(H->server);
- H->server = NULL;
- }
- if (H->einfo.errmsg) {
- efree(H->einfo.errmsg);
- H->einfo.errmsg = NULL;
- }
- pefree(H, dbh->is_persistent);
- dbh->driver_data = NULL;
- }
- return 0;
-}
-/* }}} */
-
-static int pgsql_handle_preparer(pdo_dbh_t *dbh, const char *sql, long sql_len, pdo_stmt_t *stmt, long options, zval *driver_options TSRMLS_DC)
-{
- pdo_pgsql_db_handle *H = (pdo_pgsql_db_handle *)dbh->driver_data;
- pdo_pgsql_stmt *S = ecalloc(1, sizeof(pdo_pgsql_stmt));
-
- S->H = H;
- stmt->driver_data = S;
- stmt->methods = &pgsql_stmt_methods;
-
- return 1;
-}
-
-static long pgsql_handle_doer(pdo_dbh_t *dbh, const char *sql, long sql_len TSRMLS_DC)
-{
- pdo_pgsql_db_handle *H = (pdo_pgsql_db_handle *)dbh->driver_data;
- PGresult *res;
-
- if (!(res = PQexec(H->server, sql))) {
- /* fatal error */
- pdo_pgsql_error(dbh, PGRES_FATAL_ERROR);
- return 0;
- } else {
- ExecStatusType qs = PQresultStatus(res);
- if (qs != PGRES_COMMAND_OK && qs != PGRES_TUPLES_OK) {
- pdo_pgsql_error(dbh, qs);
- PQclear(res);
- return 0;
- }
- H->pgoid = PQoidValue(res);
- PQclear(res);
- }
-
- return 1;
-}
-
-static int pgsql_handle_quoter(pdo_dbh_t *dbh, const char *unquoted, int unquotedlen, char **quoted, int *quotedlen TSRMLS_DC)
-{
- unsigned char *escaped;
-
- /* escapedlen returned by PQescapeBytea() accounts for trailing 0 */
- escaped = PQescapeBytea(unquoted, unquotedlen, quotedlen);
- *quotedlen += 1;
- *quoted = emalloc(*quotedlen + 1);
- memcpy((*quoted)+1, escaped, *quotedlen-2);
- (*quoted)[0] = '\'';
- (*quoted)[*quotedlen-1] = '\'';
- (*quoted)[*quotedlen] = '\0';
- free(escaped);
-
- return 1;
-}
-
-static long pdo_pgsql_last_insert_id(pdo_dbh_t *dbh TSRMLS_DC)
-{
- pdo_pgsql_db_handle *H = (pdo_pgsql_db_handle *)dbh->driver_data;
-
- if (H->pgoid == InvalidOid) {
- return -1;
- }
-
- return (long) H->pgoid;
-}
-
-static int pdo_pgsql_get_attribute(pdo_dbh_t *dbh, long attr, zval *return_value TSRMLS_DC)
-{
- pdo_pgsql_db_handle *H = (pdo_pgsql_db_handle *)dbh->driver_data;
-
- switch (attr) {
- case PDO_ATTR_CLIENT_VERSION:
- ZVAL_STRING(return_value, PG_VERSION, 1);
- break;
-
- case PDO_ATTR_SERVER_VERSION:
-#ifdef HAVE_PQPROTOCOLVERSION
- if (PQprotocolVersion(H->server) >= 3) { /* PostgreSQL 7.4 or later */
- ZVAL_STRING(return_value, (char*)PQparameterStatus(H->server, "server_version"), 1);
- } else /* emulate above via a query */
-#endif
- {
- PGresult *res = PQexec(H->server, "SELECT VERSION()");
- if (res && PQresultStatus(res) == PGRES_TUPLES_OK) {
- ZVAL_STRING(return_value, (char *)PQgetvalue(res, 0, 0), 1);
- }
-
- if (res) {
- PQclear(res);
- }
- }
- break;
-
- case PDO_ATTR_CONNECTION_STATUS:
- switch (PQstatus(H->server)) {
- case CONNECTION_STARTED:
- ZVAL_STRINGL(return_value, "Waiting for connection to be made.", sizeof("Waiting for connection to be made.")-1, 1);
- break;
-
- case CONNECTION_MADE:
- case CONNECTION_OK:
- ZVAL_STRINGL(return_value, "Connection OK; waiting to send.", sizeof("Connection OK; waiting to send.")-1, 1);
- break;
-
- case CONNECTION_AWAITING_RESPONSE:
- ZVAL_STRINGL(return_value, "Waiting for a response from the server.", sizeof("Waiting for a response from the server.")-1, 1);
- break;
-
- case CONNECTION_AUTH_OK:
- ZVAL_STRINGL(return_value, "Received authentication; waiting for backend start-up to finish.", sizeof("Received authentication; waiting for backend start-up to finish.")-1, 1);
- break;
-#ifdef CONNECTION_SSL_STARTUP
- case CONNECTION_SSL_STARTUP:
- ZVAL_STRINGL(return_value, "Negotiating SSL encryption.", sizeof("Negotiating SSL encryption.")-1, 1);
- break;
-#endif
- case CONNECTION_SETENV:
- ZVAL_STRINGL(return_value, "Negotiating environment-driven parameter settings.", sizeof("Negotiating environment-driven parameter settings.")-1, 1);
- break;
-
- case CONNECTION_BAD:
- default:
- ZVAL_STRINGL(return_value, "Bad connection.", sizeof("Bad connection.")-1, 1);
- break;
- }
- break;
-
- case PDO_ATTR_SERVER_INFO: {
- int spid = PQbackendPID(H->server);
- char *tmp;
-#ifdef HAVE_PQPROTOCOLVERSION
- spprintf(&tmp, 0,
- "PID: %d; Client Encoding: %s; Is Superuser: %s; Session Authorization: %s; Date Style: %s",
- spid,
- (char*)PQparameterStatus(H->server, "client_encoding"),
- (char*)PQparameterStatus(H->server, "is_superuser"),
- (char*)PQparameterStatus(H->server, "session_authorization"),
- (char*)PQparameterStatus(H->server, "DateStyle"));
-#else
- spprintf(&tmp, 0, "PID: %d", spid);
-#endif
- ZVAL_STRING(return_value, tmp, 0);
- }
- break;
-
- default:
- return 0;
- }
-
- return 1;
-}
-
-static int pdo_pgsql_transaction_cmd(const char *cmd, pdo_dbh_t *dbh TSRMLS_DC)
-{
- pdo_pgsql_db_handle *H = (pdo_pgsql_db_handle *)dbh->driver_data;
- PGresult *res;
- int ret = 1;
-
- res = PQexec(H->server, cmd);
-
- if (PQresultStatus(res) != PGRES_COMMAND_OK) {
- ret = 0;
- }
-
- PQclear(res);
- return ret;
-}
-
-static int pgsql_handle_begin(pdo_dbh_t *dbh TSRMLS_DC)
-{
- return pdo_pgsql_transaction_cmd("BEGIN", dbh TSRMLS_CC);
-}
-
-static int pgsql_handle_commit(pdo_dbh_t *dbh TSRMLS_DC)
-{
- return pdo_pgsql_transaction_cmd("COMMIT", dbh TSRMLS_CC);
-}
-
-static int pgsql_handle_rollback(pdo_dbh_t *dbh TSRMLS_DC)
-{
- return pdo_pgsql_transaction_cmd("ROLLBACK", dbh TSRMLS_CC);
-}
-
-static struct pdo_dbh_methods pgsql_methods = {
- pgsql_handle_closer,
- pgsql_handle_preparer,
- pgsql_handle_doer,
- pgsql_handle_quoter,
- pgsql_handle_begin,
- pgsql_handle_commit,
- pgsql_handle_rollback,
- NULL,
- pdo_pgsql_last_insert_id,
- pdo_pgsql_fetch_error_func,
- pdo_pgsql_get_attribute
-};
-
-static int pdo_pgsql_handle_factory(pdo_dbh_t *dbh, zval *driver_options TSRMLS_DC) /* {{{ */
-{
- pdo_pgsql_db_handle *H;
- int ret = 0;
- char *conn_str, *p, *e;
-
- H = pecalloc(1, sizeof(pdo_pgsql_db_handle), dbh->is_persistent);
- dbh->driver_data = H;
-
- H->einfo.errcode = 0;
- H->einfo.errmsg = NULL;
-
- /* PostgreSQL wants params in the connect string to be separated by spaces,
- * if the PDO standard semicolons are used, we convert them to spaces
- */
- e = (char *) dbh->data_source + strlen(dbh->data_source);
- p = (char *) dbh->data_source;
- while ((p = memchr(p, ';', (e - p)))) {
- *p = ' ';
- }
-
- /* support both full connection string & connection string + login and/or password */
- if (!dbh->username || !dbh->password) {
- conn_str = (char *) dbh->data_source;
- } else if (dbh->username && dbh->password) {
- spprintf(&conn_str, 0, "%s user=%s password=%s", dbh->data_source, dbh->username, dbh->password);
- } else if (dbh->username) {
- spprintf(&conn_str, 0, "%s user=%s", dbh->data_source, dbh->username);
- } else {
- spprintf(&conn_str, 0, "%s password=%s", dbh->data_source, dbh->password);
- }
-
- H->server = PQconnectdb(dbh->data_source);
-
- if (conn_str != dbh->data_source) {
- efree(conn_str);
- }
-
- if (PQstatus(H->server) != CONNECTION_OK) {
- pdo_pgsql_error(dbh, PGRES_FATAL_ERROR);
- goto cleanup;
- }
-
- H->attached = 1;
- H->pgoid = -1;
-
- dbh->methods = &pgsql_methods;
- dbh->alloc_own_columns = 1;
- dbh->supports_placeholders = PDO_PLACEHOLDER_NONE;
- dbh->max_escaped_char_length = 2;
-
- ret = 1;
-
-cleanup:
- dbh->methods = &pgsql_methods;
- if (!ret) {
- pgsql_handle_closer(dbh TSRMLS_CC);
- }
-
- return ret;
-}
-/* }}} */
-
-pdo_driver_t pdo_pgsql_driver = {
- PDO_DRIVER_HEADER(pgsql),
- pdo_pgsql_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_pgsql/pgsql_statement.c b/ext/pdo_pgsql/pgsql_statement.c
deleted file mode 100644
index 8808e91ef7..0000000000
--- a/ext/pdo_pgsql/pgsql_statement.c
+++ /dev/null
@@ -1,157 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Edin Kadribasic <edink@emini.dk> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#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_pgsql.h"
-#include "php_pdo_pgsql_int.h"
-
-
-static int pgsql_stmt_dtor(pdo_stmt_t *stmt TSRMLS_DC)
-{
- pdo_pgsql_stmt *S = (pdo_pgsql_stmt*)stmt->driver_data;
- int i;
-
- if (S->result) {
- /* free the resource */
- PQclear(S->result);
- S->result = NULL;
- }
- if(S->cols) {
- efree(S->cols);
- S->cols = NULL;
- }
- efree(S);
- return 1;
-}
-
-static int pgsql_stmt_execute(pdo_stmt_t *stmt TSRMLS_DC)
-{
- pdo_dbh_t *dbh = stmt->dbh;
- pdo_pgsql_stmt *S = (pdo_pgsql_stmt*)stmt->driver_data;
- pdo_pgsql_db_handle *H = S->H;
- ExecStatusType status;
-
- if (stmt->executed) {
- /* ensure that we free any previous unfetched results */
- if(S->result) {
- PQclear(S->result);
- S->result = NULL;
- }
- }
-
- S->result = PQexec(H->server, stmt->active_query_string);
- status = PQresultStatus(S->result);
-
- if (status != PGRES_COMMAND_OK && status != PGRES_TUPLES_OK) {
- pdo_pgsql_error_stmt(stmt, status);
- return 0;
- }
-
- if(!stmt->executed) {
- stmt->column_count = (int) PQnfields(S->result);
- S->cols = ecalloc(stmt->column_count, sizeof(pdo_pgsql_column));
- }
-
-
- if (status == PGRES_COMMAND_OK) {
- stmt->row_count = (long)atoi(PQcmdTuples(S->result));
- } else {
- stmt->row_count = (long)PQntuples(S->result);
- }
-
- return 1;
-}
-
-static int pgsql_stmt_param_hook(pdo_stmt_t *stmt, struct pdo_bound_param_data *param,
- enum pdo_param_event event_type TSRMLS_DC)
-{
- return 1;
-}
-
-static int pgsql_stmt_fetch(pdo_stmt_t *stmt TSRMLS_DC)
-{
- pdo_pgsql_stmt *S = (pdo_pgsql_stmt*)stmt->driver_data;
-
- if (S->current_row < stmt->row_count) {
- S->current_row++;
- return 1;
- } else {
- return 0;
- }
-}
-
-static int pgsql_stmt_describe(pdo_stmt_t *stmt, int colno TSRMLS_DC)
-{
- pdo_pgsql_stmt *S = (pdo_pgsql_stmt*)stmt->driver_data;
- struct pdo_column_data *cols = stmt->columns;
-
- if (!S->result) {
- return 0;
- }
-
- cols[colno].name = estrdup(PQfname(S->result, colno));
- cols[colno].namelen = strlen(cols[colno].name);
- cols[colno].maxlen = PQfsize(S->result, colno);
- cols[colno].precision = PQfmod(S->result, colno);
- cols[colno].param_type = PDO_PARAM_STR;
-
- return 1;
-}
-
-static int pgsql_stmt_get_col(pdo_stmt_t *stmt, int colno, char **ptr, unsigned long *len TSRMLS_DC)
-{
- pdo_pgsql_stmt *S = (pdo_pgsql_stmt*)stmt->driver_data;
-
- if (!S->result) {
- return 0;
- }
-
- /* We have already increased count by 1 in pgsql_stmt_fetch() */
- *ptr = PQgetvalue(S->result, S->current_row - 1, colno);
- *len = PQgetlength(S->result, S->current_row - 1, colno);
-
- return 1;
-}
-
-struct pdo_stmt_methods pgsql_stmt_methods = {
- pgsql_stmt_dtor,
- pgsql_stmt_execute,
- pgsql_stmt_fetch,
- pgsql_stmt_describe,
- pgsql_stmt_get_col,
- pgsql_stmt_param_hook
-};
-
-/*
- * 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/php_pdo_pgsql.h b/ext/pdo_pgsql/php_pdo_pgsql.h
deleted file mode 100644
index bcfd2bb2cd..0000000000
--- a/ext/pdo_pgsql/php_pdo_pgsql.h
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Edin Kadribasic <edink@emini.dk> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifndef PHP_PDO_PGSQL_H
-#define PHP_PDO_PGSQL_H
-
-#if HAVE_PDO_PGSQL
-
-#include <libpq-fe.h>
-
-extern zend_module_entry pdo_pgsql_module_entry;
-#define phpext_pdo_pgsql_ptr &pdo_pgsql_module_entry
-
-#ifdef PHP_WIN32
-#define PHP_PDO_PGSQL_API __declspec(dllexport)
-#else
-#define PHP_PDO_PGSQL_API
-#endif
-
-#ifdef ZTS
-#include "TSRM.h"
-#endif
-
-PHP_MINIT_FUNCTION(pdo_pgsql);
-PHP_MSHUTDOWN_FUNCTION(pdo_pgsql);
-PHP_RINIT_FUNCTION(pdo_pgsql);
-PHP_RSHUTDOWN_FUNCTION(pdo_pgsql);
-PHP_MINFO_FUNCTION(pdo_pgsql);
-
-#endif /* HAVE_PDO_PGSQL */
-#endif /* PHP_PDO_PGSQL_H */
-
-
-/*
- * 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/php_pdo_pgsql_int.h b/ext/pdo_pgsql/php_pdo_pgsql_int.h
deleted file mode 100644
index 27d84277b9..0000000000
--- a/ext/pdo_pgsql/php_pdo_pgsql_int.h
+++ /dev/null
@@ -1,80 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Edin Kadribasic <edink@emini.dk> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifndef PHP_PDO_PGSQL_INT_H
-#define PHP_PDO_PGSQL_INT_H
-
-#if HAVE_PDO_PGSQL
-
-#include <libpq-fe.h>
-
-typedef struct {
- const char *file;
- int line;
- unsigned int errcode;
- char *errmsg;
-} pdo_pgsql_error_info;
-
-/* stuff we use in a pgsql database handle */
-typedef struct {
- PGconn *server;
- unsigned attached:1;
- unsigned _reserved:31;
- pdo_pgsql_error_info einfo;
- Oid pgoid;
-} pdo_pgsql_db_handle;
-
-typedef struct {
- char *def;
-} pdo_pgsql_column;
-
-typedef struct {
- pdo_pgsql_db_handle *H;
- PGresult *result;
- int current_row;
- pdo_pgsql_column *cols;
-} pdo_pgsql_stmt;
-
-typedef struct {
- char *repr;
- long repr_len;
- int pgsql_type;
- void *thing; /* for LOBS, REFCURSORS etc. */
-} pdo_pgsql_bound_param;
-
-extern pdo_driver_t pdo_pgsql_driver;
-
-extern int _pdo_pgsql_error(pdo_dbh_t *dbh, pdo_stmt_t *stmt, int errcode, const char *file, int line TSRMLS_DC);
-#define pdo_pgsql_error(d,e) _pdo_pgsql_error(d, NULL, e, __FILE__, __LINE__ TSRMLS_CC)
-#define pdo_pgsql_error_stmt(s,e) _pdo_pgsql_error(s->dbh, s, e, __FILE__, __LINE__ TSRMLS_CC)
-
-extern struct pdo_stmt_methods pgsql_stmt_methods;
-
-#endif /* HAVE_PDO_PGSQL */
-#endif /* PHP_PDO_PGSQL_INT_H */
-
-/*
- * 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/pfpro/CREDITS b/ext/pfpro/CREDITS
deleted file mode 100644
index 1b57a7f25b..0000000000
--- a/ext/pfpro/CREDITS
+++ /dev/null
@@ -1,2 +0,0 @@
-Verisign Payflow Pro
-John Donagher, David Croft
diff --git a/ext/pfpro/TODO b/ext/pfpro/TODO
deleted file mode 100644
index a10a191e80..0000000000
--- a/ext/pfpro/TODO
+++ /dev/null
@@ -1,12 +0,0 @@
-John Donagher <jdonagher@php.net> - 20010501
-############################################
-- XMLPay support??
-- Add test cases
-
-pfpro_process[_raw]:
-- Expose API-level context control optionally to user
-- Figure out what Verisign's pfproCompleteTransaction() purpose is and why it
- corrupts the response data
-
-pfpro_process:
-- Fix response parsing to ignore delimiters [&=] in response data values
diff --git a/ext/pfpro/config.m4 b/ext/pfpro/config.m4
deleted file mode 100644
index b18abd3ab5..0000000000
--- a/ext/pfpro/config.m4
+++ /dev/null
@@ -1,70 +0,0 @@
-dnl
-dnl $Id$
-dnl
-
-PHP_ARG_WITH(pfpro, for Verisign Payflow Pro support,
-[ --with-pfpro[=DIR] Include Verisign Payflow Pro support.])
-
-if test "$PHP_PFPRO" != "no"; then
- PFPRO_LIB=libpfpro.so
- PFPRO_HDR=pfpro.h
-
- for i in $PHP_PFPRO /usr/local /usr; do
- if test -r $i/$PFPRO_HDR; then
- PFPRO_INC_DIR=$i
- elif test -r $i/include/$PFPRO_HDR; then
- PFPRO_INC_DIR=$i/include
- elif test -r $i/lib/$PFPRO_HDR; then
- PFPRO_INC_DIR=$i/lib
- elif test -r $i/bin/$PFPRO_HDR; then
- PFPRO_INC_DIR=$i/bin
- fi
-
- if test -r $i/$PFPRO_LIB; then
- PFPRO_LIB_DIR=$i
- elif test -r $i/lib/$PFPRO_LIB; then
- PFPRO_LIB_DIR=$i/lib
- fi
-
- test -n "$PFPRO_INC_DIR" && test -n "$PFPRO_LIB_DIR" && break
- done
-
- if test -z "$PFPRO_INC_DIR"; then
- AC_MSG_ERROR([Could not find pfpro.h. Please make sure you have the
- Verisign Payflow Pro SDK installed. Use
- ./configure --with-pfpro=<pfpro-dir> if necessary])
- fi
-
- if test -z "$PFPRO_LIB_DIR"; then
- AC_MSG_ERROR([Could not find libpfpro.so. Please make sure you have the
- Verisign Payflow Pro SDK installed. Use
- ./configure --with-pfpro=<pfpro-dir> if necessary])
- fi
-
- dnl
- dnl Check version of SDK
- dnl
- PHP_CHECK_LIBRARY(pfpro, pfproInit,
- [
- PFPRO_VERSION=3
- ], [
- PHP_CHECK_LIBRARY(pfpro, PNInit,
- [
- PFPRO_VERSION=2
- ], [
- AC_MSG_ERROR([The pfpro extension requires version 2 or 3 of the SDK])
- ], [
- -L$PFPRO_LIB_DIR
- ])
- ], [
- -L$PFPRO_LIB_DIR
- ])
-
- AC_DEFINE_UNQUOTED(PFPRO_VERSION, $PFPRO_VERSION, [Version of SDK])
- PHP_ADD_INCLUDE($PFPRO_INC_DIR)
- PHP_ADD_LIBRARY_WITH_PATH(pfpro, $PFPRO_LIB_DIR, PFPRO_SHARED_LIBADD)
-
- PHP_NEW_EXTENSION(pfpro, pfpro.c, $ext_shared)
- PHP_SUBST(PFPRO_SHARED_LIBADD)
- AC_DEFINE(HAVE_PFPRO, 1, [ ])
-fi
diff --git a/ext/pfpro/pfpro.c b/ext/pfpro/pfpro.c
deleted file mode 100644
index a493ce3f0d..0000000000
--- a/ext/pfpro/pfpro.c
+++ /dev/null
@@ -1,549 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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. |
- +----------------------------------------------------------------------+
- | Authors: David Croft <david@infotrek.co.uk>, |
- | John Donagher <john@webmeta.com> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "php.h"
-#include "php_pfpro.h"
-
-#if HAVE_PFPRO
-
-/* {{{ includes */
-#include "php_ini.h"
-#include "ext/standard/info.h"
-#include "ext/standard/php_string.h"
-#include <pfpro.h>
-/* }}} */
-
-/* {{{ zts */
-ZEND_DECLARE_MODULE_GLOBALS(pfpro)
-/* }}} */
-
-/* {{{ Function table */
-function_entry pfpro_functions[] = {
- PHP_FE(pfpro_version, NULL)
- PHP_FE(pfpro_init, NULL)
- PHP_FE(pfpro_cleanup, NULL)
- PHP_FE(pfpro_process_raw, NULL)
- PHP_FE(pfpro_process, NULL)
- {NULL, NULL, NULL}
-};
-/* }}} */
-
-/* {{{ Zend module entry */
-zend_module_entry pfpro_module_entry = {
- STANDARD_MODULE_HEADER,
- "pfpro",
- pfpro_functions,
- PHP_MINIT(pfpro),
- PHP_MSHUTDOWN(pfpro),
- PHP_RINIT(pfpro), /* request start */
- PHP_RSHUTDOWN(pfpro), /* request end */
- PHP_MINFO(pfpro),
- NO_VERSION_YET,
- STANDARD_MODULE_PROPERTIES
-};
-/* }}} */
-
-/* {{{ dl() stuff */
-#ifdef COMPILE_DL_PFPRO
-ZEND_GET_MODULE(pfpro)
-#endif
-/* }}} */
-
-/* {{{ initialization defaults */
-PHP_INI_BEGIN()
- STD_PHP_INI_ENTRY("pfpro.defaulthost", "test-payflow.verisign.com", PHP_INI_ALL, OnUpdateString, defaulthost, zend_pfpro_globals, pfpro_globals)
- STD_PHP_INI_ENTRY("pfpro.defaultport", "443", PHP_INI_ALL, OnUpdateLong, defaultport, zend_pfpro_globals, pfpro_globals)
- STD_PHP_INI_ENTRY("pfpro.defaulttimeout", "30", PHP_INI_ALL, OnUpdateLong, defaulttimeout, zend_pfpro_globals, pfpro_globals)
- STD_PHP_INI_ENTRY("pfpro.proxyaddress", "", PHP_INI_ALL, OnUpdateString, proxyaddress, zend_pfpro_globals, pfpro_globals)
- STD_PHP_INI_ENTRY("pfpro.proxyport", "", PHP_INI_ALL, OnUpdateLong, proxyport, zend_pfpro_globals, pfpro_globals)
- STD_PHP_INI_ENTRY("pfpro.proxylogon", "", PHP_INI_ALL, OnUpdateString, proxylogon, zend_pfpro_globals, pfpro_globals)
- STD_PHP_INI_ENTRY("pfpro.proxypassword", "", PHP_INI_ALL, OnUpdateString, proxypassword, zend_pfpro_globals, pfpro_globals)
-PHP_INI_END()
-
-/* {{{ php_extname_init_globals
- */
-static void php_pfpro_init_globals(zend_pfpro_globals *pfpro_globals)
-{
- pfpro_globals->initialized = 0;
- pfpro_globals->defaulthost = NULL;
- pfpro_globals->defaultport = 0;
- pfpro_globals->defaulttimeout = 0;
- pfpro_globals->proxyaddress = NULL;
- pfpro_globals->proxyport = 0;
- pfpro_globals->proxylogon = NULL;
- pfpro_globals->proxypassword = NULL;
-}
-/* }}} */
-
-PHP_MINIT_FUNCTION(pfpro)
-{
- ZEND_INIT_MODULE_GLOBALS(pfpro, php_pfpro_init_globals, NULL);
- REGISTER_INI_ENTRIES();
- return SUCCESS;
-}
-
-PHP_MSHUTDOWN_FUNCTION(pfpro)
-{
- UNREGISTER_INI_ENTRIES();
- return SUCCESS;
-}
-
-PHP_RINIT_FUNCTION(pfpro)
-{
- PFPROG(initialized) = 0;
-
- return SUCCESS;
-}
-
-PHP_RSHUTDOWN_FUNCTION(pfpro)
-{
- if (PFPROG(initialized) == 1) {
- pfproCleanup();
- }
-
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ minfo registration */
-PHP_MINFO_FUNCTION(pfpro)
-{
- php_info_print_table_start();
- php_info_print_table_row(2, "Verisign Payflow Pro support", "enabled");
- php_info_print_table_row(2, "libpfpro version", pfproVersion());
- php_info_print_table_end();
-
- DISPLAY_INI_ENTRIES();
-}
-/* }}} */
-
-/* {{{ proto string pfpro_version()
- Returns the version of the Payflow Pro library */
-PHP_FUNCTION(pfpro_version)
-{
- if (ZEND_NUM_ARGS() != 0) {
- WRONG_PARAM_COUNT;
- }
-
- RETURN_STRING((char *)pfproVersion(), 1);
-}
-/* }}} */
-
-/* {{{ proto bool pfpro_init()
- Initializes the Payflow Pro library */
-PHP_FUNCTION(pfpro_init)
-{
- if (ZEND_NUM_ARGS() != 0) {
- WRONG_PARAM_COUNT;
- }
-
- pfproInit();
-
- PFPROG(initialized) = 1;
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto bool pfpro_cleanup()
- Shuts down the Payflow Pro library */
-PHP_FUNCTION(pfpro_cleanup)
-{
- if (ZEND_NUM_ARGS() != 0) {
- WRONG_PARAM_COUNT;
- }
-
- pfproCleanup();
-
- PFPROG(initialized) = 0;
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto string pfpro_process_raw(string parmlist [, string hostaddress [, int port, [, int timeout [, string proxyAddress [, int proxyPort [, string proxyLogon [, string proxyPassword]]]]]]])
- Raw Payflow Pro transaction processing */
-PHP_FUNCTION(pfpro_process_raw)
-{
- zval ***args;
- char *parmlist = NULL;
- char *address = NULL;
- int port = PFPROG(defaultport);
- int timeout = PFPROG(defaulttimeout);
- char *proxyAddress = PFPROG(proxyaddress);
- int proxyPort = PFPROG(proxyport);
- char *proxyLogon = PFPROG(proxylogon);
- char *proxyPassword = PFPROG(proxypassword);
- int freeaddress = 0;
-#if PFPRO_VERSION < 3
- char response[512] = "";
-#else
- int context;
- char *response;
-#endif
-
- if (ZEND_NUM_ARGS() < 1 || ZEND_NUM_ARGS() > 8) {
- WRONG_PARAM_COUNT;
- }
-
- args = (zval ***) safe_emalloc(sizeof(zval **), ZEND_NUM_ARGS(), 0);
-
- if (zend_get_parameters_array_ex(ZEND_NUM_ARGS(), args) == FAILURE) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to read parameters in pfpro_process_raw()");
- efree(args);
- RETURN_FALSE;
- }
-
- switch (ZEND_NUM_ARGS()) {
- case 8:
- convert_to_string_ex(args[7]);
- proxyPassword = Z_STRVAL_PP(args[7]);
- /* fall through */
-
- case 7:
- convert_to_string_ex(args[6]);
- proxyLogon = Z_STRVAL_PP(args[6]);
- /* fall through */
-
- case 6:
- convert_to_long_ex(args[5]);
- proxyPort = Z_LVAL_PP(args[5]);
- /* fall through */
-
- case 5:
- convert_to_string_ex(args[4]);
- proxyAddress = Z_STRVAL_PP(args[4]);
- /* fall through */
-
- case 4:
- convert_to_long_ex(args[3]);
- timeout = Z_LVAL_PP(args[3]);
- /* fall through */
-
- case 3:
- convert_to_long_ex(args[2]);
- port = Z_LVAL_PP(args[2]);
- /* fall through */
-
- case 2:
- convert_to_string_ex(args[1]);
- address = Z_STRVAL_PP(args[1]);
- }
-
- convert_to_string_ex(args[0]);
- parmlist = Z_STRVAL_PP(args[0]);
-
- efree(args);
-
- if (address == NULL) {
- address = estrdup(PFPROG(defaulthost));
- freeaddress = 1;
- }
-
-#if PFPRO_VERSION < 3
- /* Blank the response buffer */
- memset(response, 0, sizeof(response));
-#endif
-
- /* Initialize the library if needed */
-
- if (PFPROG(initialized) == 0) {
- pfproInit();
- PFPROG(initialized) = 1;
- }
-
- /* Perform the transaction */
-
-#if PFPRO_VERSION < 3
- ProcessPNTransaction(address, port, proxyAddress, proxyPort, proxyLogon, proxyPassword, parmlist, strlen(parmlist), timeout, response);
-#else
- pfproCreateContext(&context, address, port, timeout, proxyAddress, proxyPort, proxyLogon, proxyPassword);
- pfproSubmitTransaction(context, parmlist, strlen(parmlist), &response);
- pfproDestroyContext(context);
-#endif
-
- if (freeaddress) {
- efree(address);
- }
-
- RETURN_STRING(response, 1);
-}
-/* }}} */
-
-/* {{{ proto array pfpro_process(array parmlist [, string hostaddress [, int port, [, int timeout [, string proxyAddress [, int proxyPort [, string proxyLogon [, string proxyPassword]]]]]]])
- Payflow Pro transaction processing using arrays */
-PHP_FUNCTION(pfpro_process)
-{
- zval ***args;
- HashTable *target_hash;
- ulong num_key;
- char *string_key;
- zval **entry;
- int pass;
- char *parmlist = NULL;
- char *address = NULL;
- int port = PFPROG(defaultport);
- int timeout = PFPROG(defaulttimeout);
- char *proxyAddress = PFPROG(proxyaddress);
- int proxyPort = PFPROG(proxyport);
- char *proxyLogon = PFPROG(proxylogon);
- char *proxyPassword = PFPROG(proxypassword);
- int parmlength = 0;
- int freeaddress = 0;
-#if PFPRO_VERSION < 3
- char response[512] = "";
-#else
- int context;
- char *response;
-#endif
- char tmpbuf[128];
- char *var,*val,*strtok_buf=NULL; /* Pointers for string manipulation */
-
- if (ZEND_NUM_ARGS() < 1 || ZEND_NUM_ARGS() > 8) {
- WRONG_PARAM_COUNT;
- }
-
- args = (zval ***) safe_emalloc(sizeof(zval **), ZEND_NUM_ARGS(), 0);
-
- if (zend_get_parameters_array_ex(ZEND_NUM_ARGS(), args) == FAILURE) {
- efree(args);
- php_error_docref(NULL TSRMLS_CC, E_ERROR, "Unable to read parameters in pfpro_process()");
- RETURN_FALSE;
- }
-
- if (Z_TYPE_PP(args[0]) != IS_ARRAY) {
- efree(args);
- php_error_docref(NULL TSRMLS_CC, E_ERROR, "First parameter to pfpro_process() must be an array");
- RETURN_FALSE;
- }
-
- switch (ZEND_NUM_ARGS()) {
- case 8:
- convert_to_string_ex(args[7]);
- proxyPassword = Z_STRVAL_PP(args[7]);
- /* fall through */
-
- case 7:
- convert_to_string_ex(args[6]);
- proxyLogon = Z_STRVAL_PP(args[6]);
- /* fall through */
-
- case 6:
- convert_to_long_ex(args[5]);
- proxyPort = Z_LVAL_PP(args[5]);
- /* fall through */
-
- case 5:
- convert_to_string_ex(args[4]);
- proxyAddress = Z_STRVAL_PP(args[4]);
- /* fall through */
-
- case 4:
- convert_to_long_ex(args[3]);
- timeout = Z_LVAL_PP(args[3]);
- /* fall through */
-
- case 3:
- convert_to_long_ex(args[2]);
- port = Z_LVAL_PP(args[2]);
- /* fall through */
-
- case 2:
- convert_to_string_ex(args[1]);
- address = Z_STRVAL_PP(args[1]);
- }
-
- /* Concatenate the passed array as specified by Verisign.
- Basically it's all key=value&key=value, the only exception
- being if the value contains = or &, in which case we also
- encode the length, e.g. key[5]=bl&ah */
-
- target_hash = HASH_OF(*args[0]);
-
- for (pass = 0; pass <= 1; pass ++) {
-
- parmlength = 0;
- /* we go around the array twice. the first time to calculate
- the string length, the second time to actually store it */
-
- zend_hash_internal_pointer_reset(target_hash);
-
- while (zend_hash_get_current_data(target_hash, (void **)&entry) == SUCCESS) {
-
- if (parmlength > 0) {
- if (pass == 1)
- strcpy(parmlist + parmlength, "&");
- parmlength += 1;
- }
-
- switch (zend_hash_get_current_key(target_hash, &string_key, &num_key, 0)) {
-
- case HASH_KEY_IS_STRING:
-
- if (pass == 1)
- strcpy(parmlist + parmlength, string_key);
- parmlength += strlen(string_key);
-
- break;
-
- case HASH_KEY_IS_LONG:
-
- sprintf(tmpbuf, "%ld", num_key);
- if (pass == 1)
- strcpy(parmlist + parmlength, tmpbuf);
- parmlength += strlen(tmpbuf);
-
- break;
-
- default:
- if (parmlist) {
- efree(parmlist);
- }
- efree(args);
- php_error_docref(NULL TSRMLS_CC, E_ERROR, "pfpro_process() array keys must be strings or integers");
- RETURN_FALSE;
- }
-
-
- switch (Z_TYPE_PP(entry)) {
- case IS_STRING:
- if (strchr(Z_STRVAL_PP(entry), '&')
- || strchr(Z_STRVAL_PP(entry), '=')) {
- sprintf(tmpbuf, "[%d]=", Z_STRLEN_PP(entry));
- if (pass == 1)
- strcpy(parmlist + parmlength, tmpbuf);
- parmlength += strlen(tmpbuf);
- } else {
- if (pass == 1)
- strcpy(parmlist + parmlength, "=");
- parmlength += 1;
- }
-
- if (pass == 1)
- strcpy(parmlist + parmlength, Z_STRVAL_PP(entry));
- parmlength += Z_STRLEN_PP(entry);
-
- break;
-
- case IS_LONG:
- sprintf(tmpbuf, "=%ld", Z_LVAL_PP(entry));
- if (pass == 1)
- strcpy(parmlist + parmlength, tmpbuf);
- parmlength += strlen(tmpbuf);
-
- break;
-
- case IS_DOUBLE:
- sprintf(tmpbuf, "=%.2f", Z_DVAL_PP(entry));
- if (pass == 1)
- strcpy(parmlist + parmlength, tmpbuf);
- parmlength += strlen(tmpbuf);
-
- break;
-
- default:
- if (parmlist) {
- efree(parmlist);
- }
- efree(args);
- php_error_docref(NULL TSRMLS_CC, E_ERROR, "pfpro_process() array values must be strings, ints or floats");
- RETURN_FALSE;
- }
- zend_hash_move_forward(target_hash);
- }
-
- if (pass == 0) {
- parmlist = emalloc(parmlength + 1);
- }
- }
-
- efree(args);
-
- if (address == NULL) {
- address = estrdup(PFPROG(defaulthost));
- freeaddress = 1;
- }
-
- /* Allocate the array for the response now - so we catch any errors
- from this BEFORE we knock it off to the bank */
-
- array_init(return_value);
-
-#if PFPRO_VERSION < 3
- /* Blank the response buffer */
- memset(response, 0, sizeof(response));
-#endif
-
- /* Initialize the library if needed */
-
- if (PFPROG(initialized) == 0) {
- pfproInit();
- PFPROG(initialized) = 1;
- }
-
- /* Perform the transaction */
-
-#if PFPRO_VERSION < 3
- ProcessPNTransaction(address, port, proxyAddress, proxyPort, proxyLogon, proxyPassword, parmlist, strlen(parmlist), timeout, response);
-#else
- pfproCreateContext(&context, address, port, timeout, proxyAddress, proxyPort, proxyLogon, proxyPassword);
- pfproSubmitTransaction(context, parmlist, strlen(parmlist), &response);
- pfproDestroyContext(context);
-#endif
-
- if (freeaddress) {
- efree(address);
- }
-
- if (parmlist) {
- efree(parmlist);
- }
-
- /* This final chunk of code is to walk the returned string
- * and build the return array to the user.
- */
- var = php_strtok_r(response, "&", &strtok_buf);
-
- while (var) {
- val = strchr(var, '=');
- if (val) { /* have a value */
- *val++ = '\0';
- add_assoc_string(return_value, var, val, 1);
- }
- var = php_strtok_r(NULL, "&", &strtok_buf);
- }
-}
-/* }}} */
-
-#endif /* HAVE_PFPRO */
-
-/*
- * 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/pfpro/php_pfpro.h b/ext/pfpro/php_pfpro.h
deleted file mode 100644
index 283e215270..0000000000
--- a/ext/pfpro/php_pfpro.h
+++ /dev/null
@@ -1,85 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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. |
- +----------------------------------------------------------------------+
- | Authors: David Croft <david@infotrek.co.uk> |
- | John Donagher <john@webmeta.com> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifndef PHP_PFPRO_H
-#define PHP_PFPRO_H
-
-#if HAVE_PFPRO
-
-extern zend_module_entry pfpro_module_entry;
-#define phpext_pfpro_ptr &pfpro_module_entry
-
-#ifdef PHP_WIN32
-#define PHP_PFPRO_API __declspec(dllexport)
-#else
-#define PHP_PFPRO_API
-#endif
-
-#if PFPRO_VERSION < 3
-#define pfproVersion() PNVersion()
-#define pfproInit() PNInit()
-#define pfproCleanup() PNCleanup()
-#endif
-
-PHP_MINIT_FUNCTION(pfpro);
-PHP_MSHUTDOWN_FUNCTION(pfpro);
-PHP_RINIT_FUNCTION(pfpro);
-PHP_RSHUTDOWN_FUNCTION(pfpro);
-PHP_MINFO_FUNCTION(pfpro);
-
-PHP_FUNCTION(pfpro_version); /* Return library version */
-PHP_FUNCTION(pfpro_init); /* Initialise pfpro gateway */
-PHP_FUNCTION(pfpro_cleanup); /* Shut down cleanly */
-PHP_FUNCTION(pfpro_process_raw); /* Raw transaction processing */
-PHP_FUNCTION(pfpro_process); /* Transaction processing */
-
-ZEND_BEGIN_MODULE_GLOBALS(pfpro)
- int initialized;
- char *defaulthost;
- long defaultport;
- long defaulttimeout;
- char *proxyaddress;
- long proxyport;
- char *proxylogon;
- char *proxypassword;
-ZEND_END_MODULE_GLOBALS(pfpro)
-
-#ifdef ZTS
-#define PFPROG(v) TSRMG(pfpro_globals_id, zend_pfpro_globals *, v)
-#else
-#define PFPROG(v) (pfpro_globals.v)
-#endif
-
-#else
-
-#define phpext_pfpro_ptr NULL
-
-#endif
-
-#endif /* PHP_PFPRO_H */
-
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- */
diff --git a/ext/pgsql/CREDITS b/ext/pgsql/CREDITS
deleted file mode 100644
index 846d37c2f5..0000000000
--- a/ext/pgsql/CREDITS
+++ /dev/null
@@ -1,2 +0,0 @@
-PostgreSQL
-Jouni Ahto, Zeev Suraski, Yasuo Ohgaki
diff --git a/ext/pgsql/README b/ext/pgsql/README
deleted file mode 100644
index 2b4c412338..0000000000
--- a/ext/pgsql/README
+++ /dev/null
@@ -1,235 +0,0 @@
-==== About This Module ===
-PostgreSQL module provides access to PostgreSQL server from
-PHP script. This module uses PostgreSQL C client lib called libpq.
-It is important that you use libpq that is later than backend
-(PostgreSQL Server) version. Otherwise, you may experience
-strange problems.
-
-Please send e-mail to yohgaki@php.net if you have comments for
-pgsql module. I appreciate your feedback.
-
-==== API Change ===
-Older PHP than 4.2.0, pg_loimport()/pg_loexport() connection
-parameter as last parameter, not like other functions. From 4.2.0,
-connection parameter became 1st parameter. Old syntax is preserved,
-but it will raise NOTICE error message.
-
-pg_connect()/pg_pconnect() has obsolete multi parameter syntax.
-This syntax will be deleted in 4.3.0 or later.
-
-Omitting connectin parameter is NOT recommended. Connection
-parameter may be required for future PHP version. Specify connection
-always if you don't want to rewrite code when it is changed.
-
-==== Function Name Change ====
-Function names are going to be changed to confirm coding
-standard. MySQL module has been done this already. Function names will
-be changed as follows.
-
-pg_errormessage -> pg_error_message
-pg_cmdtuples -> pg_affected_rows
-pg_fieldnum -> pg_field_num
-and so on. Except pg_cmdtuples, under scores '_' will be added to
-names.
-
-Older names will become aliases of new functions for backward
-compatibility.
-
-Manual will be updated when this change is commited to CVS source.
-
-==== Configure Option Notes ====
-You cannot specify PostgreSQL source directly to build PostgreSQL
-module with specific version. You need to install PostgreSQL
-somewhere in your system to build PHP with PostgreSQL support.
-
-==== Note For PostgreSQL 7.2 ====
-I've tested upto 7.2.2.
-
-==== TODO List ===
-Make pg_convert() smater.
- - Better regex
- - User defiend type support
-Support async connection.
-
-==== Experimental Functions =====
-
-WARNING: API/behavior may be changed without notice.
-
-Async query can improve application performance
-*significantly*. Please test and report any failure to
-yohgaki@php.net
-
-There are some cases that async functions blocks process. Even if
-process was blocked, functions work as expected. (except it blocks
-process) These are cases that process is blocked. Refer to libpq
-manual for details. Followings are common cases that async functions
-are blocked.
-
- - If libpq is compile with USE_SSL, some async functions are
- blocked.
- - If libpq under Win32 is *NOT* compiled with
- WIN32_NON_BLOCKING_CONNECTIONS, non-blocking connection will block.
-
-Async function may also block if you have not retrive result and
-send or execute query. If there is result left on connection,
-pg_send_query() will block until last query is completed.
-
-Garbages are cleaned when resource is cleaned up. There is no need to
-clean up query result if it is not needed.
-
-Please refer to libpq manual or source for details.
-These functions are *NOT* supposed to be documented, yet.
-API may be changed.
-
-NOTE: These functions are added in PHP 4.2.0 unless they are mentioned.
-
--------------------------------------------------------------------
-bool pg_send_query(resource connection, string query)
-
-Sends async query to backend. Result may be retrieved with
-pg_get_result(). It does not accept multiple query, but it accepts
-multiple queries at once. Each result may be retrieved separately by
-pg_get_result().
-
---------------------------------------------------------------------
-bool pg_cancel_query(resource connection)
-
-Cancels currently executing async query already sent to PostgreSQL
-server. This function is useful when user request time consuming query
-to server. It cannot cancel query executed by pg_exec(), since
-pg_exec() is a blocking function.
-
---------------------------------------------------------------------
-resource pg_get_result(resource conn)
-
-Gets pgsql query result resource. Returned value can be fed to
-pg_result()/pg_fetch_*(). pg_get_result() may block if result is not
-ready to be retrived. Use pg_is_busy() to check result is ready to be
-retrieved or not. If multiple query is sent to backend, it may be
-retrieved one by one using pg_get_result(). If there is no result left
-in connection, it returns false.
-
---------------------------------------------------------------------
-bool pg_connection_busy(resource connection)
-
-Returns connections is executing query or not.
-
---------------------------------------------------------------------
-int pg_connection_status(resource connection)
-
-Gets connection status. It returns PGSQL_CONNECTION_OK or
-PGSQL_CONNECTION_BAD.
-
---------------------------------------------------------------------
-bool pg_connection_reset(resource connection)
-
-Resets communication port to Postgresql server using the same
-connection parameter. It's useful for error recovery.
-
---------------------------------------------------------------------
-string pg_result_error(resource result)
-
-Get error message associated with result
-
---------------------------------------------------------------------
-int pg_result_status(resource result)
-
-Get status of query result
-
---------------------------------------------------------------------
-
-
-Copy functions
-
---------------------------------------------------------------------
-mixed pg_copy_to(int connection_id, string table_name,
- [, string delim [, string null_as]])
-
-nt pg_copy_from(int connection_id, string table_name, array rows
- [, string delim [, string null_as]])
-
---------------------------------------------------------------------
-
-Utility functions
-
---------------------------------------------------------------------
-string pg_escape_string(string data)
-Escape string or binary for SQL statemen (7.2 or later)
-
-
-string pg_escape_bytea(string data)
-Escape string or binary for SQL statement (7.2 or later)
-
---------------------------------------------------------------------
-
-Large Object Functions
-
---------------------------------------------------------------------
-int pg_lo_tell(resource large_object)
-Returns current position of large object
-
---------------------------------------------------------------------
-bool pg_lo_lseek(resource large_object, int offset[, int whence])
-Seeks position of large object
-
---------------------------------------------------------------------
-
-Notice message function
-
---------------------------------------------------------------------
-
-string pg_last_notice(resource connection)
-Returns the last notice set by the backend
-
-This function is fully implemed in only in current CVS version.
-PHP 4.3.0 supposed to included fully implemented version.
-
-NOTE: Added in PHP 4.0.6, but there is bug in notice message handling
-in PHP 4.0.6. Do no use 4.0.6 with pgsql module!!
-
---------------------------------------------------------------------
-
-Utility functions (for PHP 4.3.0)
-
---------------------------------------------------------------------
-array pg_metadata(resource db, string table)
- Get metadata
-
---------------------------------------------------------------------
-array pg_convert(resource db, string table, array values)
- Check and convert values for PostgreSQL SQL statement
-
---------------------------------------------------------------------
-bool pg_insert(resource db, string table, array values[, bool convert[, bool async]])
- Insert values (filed=>value) to table
-
---------------------------------------------------------------------
-bool pg_update(resource db, string table, array fields, array ids[, bool convert[, bool async]])
- Update table using values (field=>value) and ids (id=>value)
-
---------------------------------------------------------------------
-bool pg_delete(resource db, string table, array ids[, bool convert[, bool async]])
- Delete records has ids (id=>value)
-
---------------------------------------------------------------------
-array pg_select(resource db, string table, array ids[, bool convert])
- Select records that has ids (id=>value)
-
---------------------------------------------------------------------
-array pg_get_notify([resource db[, notify]])
- Get notify message on the connection
-
---------------------------------------------------------------------
-string pg_unescape_bytea(string bytea_data)
- Unescape bytea field data
-
---------------------------------------------------------------------
-bool pg_ping(resource db)
- ping database connection and try to reset connection if it's
- broken
-
--------------------------------------------------------------------
-
-Again, experimental functions are subject to be changed without
-notice.
-
diff --git a/ext/pgsql/config.m4 b/ext/pgsql/config.m4
deleted file mode 100644
index b6ebfb1a57..0000000000
--- a/ext/pgsql/config.m4
+++ /dev/null
@@ -1,91 +0,0 @@
-dnl
-dnl $Id$
-dnl
-
-AC_DEFUN(PHP_PGSQL_CHECK_FUNCTIONS,[
-])
-
-PHP_ARG_WITH(pgsql,for PostgreSQL support,
-[ --with-pgsql[=DIR] Include PostgreSQL support. DIR is the PostgreSQL
- base install directory or the path to pg_config.])
-
-if test "$PHP_PGSQL" != "no"; then
- PHP_EXPAND_PATH($PGSQL_INCLUDE, PGSQL_INCLUDE)
-
- AC_MSG_CHECKING(for pg_config)
- for i in $PHP_PGSQL $PHP_PGSQL/bin /usr/local/pgsql/bin /usr/local/bin /usr/bin ""; do
- if test -x $i/pg_config; then
- PG_CONFIG="$i/pg_config"
- break;
- fi
- done
-
- if test -n "$PG_CONFIG"; then
- AC_MSG_RESULT([$PG_CONFIG])
- PGSQL_INCLUDE=`$PG_CONFIG --includedir`
- PGSQL_LIBDIR=`$PG_CONFIG --libdir`
- AC_DEFINE(HAVE_PG_CONFIG_H,1,[Whether to have pg_config.h])
- else
- AC_MSG_RESULT(not found)
- if test "$PHP_PGSQL" = "yes"; then
- PGSQL_SEARCH_PATHS="/usr /usr/local /usr/local/pgsql"
- else
- PGSQL_SEARCH_PATHS=$PHP_PGSQL
- fi
-
- for i in $PGSQL_SEARCH_PATHS; do
- for j in include include/pgsql include/postgres include/postgresql ""; do
- if test -r "$i/$j/libpq-fe.h"; then
- PGSQL_INC_BASE=$i
- PGSQL_INCLUDE=$i/$j
- if test -r "$i/$j/pg_config.h"; then
- AC_DEFINE(HAVE_PG_CONFIG_H,1,[Whether to have pg_config.h])
- fi
- fi
- done
-
- for j in lib lib/pgsql lib/postgres lib/postgresql ""; do
- if test -f "$i/$j/libpq.so" || test -f "$i/$j/libpq.a"; then
- PGSQL_LIBDIR=$i/$j
- fi
- done
- done
- fi
-
- if test -z "$PGSQL_INCLUDE"; then
- AC_MSG_ERROR(Cannot find libpq-fe.h. Please specify correct PostgreSQL installation path)
- fi
-
- if test -z "$PGSQL_LIBDIR"; then
- AC_MSG_ERROR(Cannot find libpq.so. Please specify correct PostgreSQL installation path)
- fi
-
- if test -z "$PGSQL_INCLUDE" -a -z "$PGSQL_LIBDIR" ; then
- AC_MSG_ERROR([Unable to find libpq anywhere under $withval])
- fi
-
- AC_DEFINE(HAVE_PGSQL,1,[Whether to build PostgreSQL support or not])
- old_LIBS=$LIBS
- old_LDFLAGS=$LDFLAGS
- LDFLAGS="$LDFLAGS -L$PGSQL_LIBDIR"
- AC_CHECK_LIB(pq, PQescapeString,AC_DEFINE(HAVE_PQESCAPE,1,[PostgreSQL 7.2.0 or later]))
- AC_CHECK_LIB(pq, PQsetnonblocking,AC_DEFINE(HAVE_PQSETNONBLOCKING,1,[PostgreSQL 7.0.x or later]))
- AC_CHECK_LIB(pq, PQcmdTuples,AC_DEFINE(HAVE_PQCMDTUPLES,1,[Broken libpq under windows]))
- AC_CHECK_LIB(pq, PQoidValue,AC_DEFINE(HAVE_PQOIDVALUE,1,[Older PostgreSQL]))
- AC_CHECK_LIB(pq, PQclientEncoding,AC_DEFINE(HAVE_PQCLIENTENCODING,1,[PostgreSQL 7.0.x or later]))
- AC_CHECK_LIB(pq, PQparameterStatus,AC_DEFINE(HAVE_PQPARAMETERSTATUS,1,[PostgreSQL 7.4 or later]))
- AC_CHECK_LIB(pq, PQprotocolVersion,AC_DEFINE(HAVE_PQPROTOCOLVERSION,1,[PostgreSQL 7.4 or later]))
- AC_CHECK_LIB(pq, PQtransactionStatus,AC_DEFINE(HAVE_PGTRANSACTIONSTATUS,1,[PostgreSQL 7.4 or later]))
- AC_CHECK_LIB(pq, pg_encoding_to_char,AC_DEFINE(HAVE_PGSQL_WITH_MULTIBYTE_SUPPORT,1,[Whether libpq is compiled with --enable-multibye]))
- LIBS=$old_LIBS
- LDFLAGS=$old_LDFLAGS
-
- PHP_ADD_LIBRARY_WITH_PATH(pq, $PGSQL_LIBDIR, PGSQL_SHARED_LIBADD)
- PHP_SUBST(PGSQL_SHARED_LIBADD)
-
- PHP_ADD_INCLUDE($PGSQL_INCLUDE)
-
- PHP_NEW_EXTENSION(pgsql, pgsql.c, $ext_shared)
-fi
-
-
diff --git a/ext/pgsql/config.w32 b/ext/pgsql/config.w32
deleted file mode 100644
index c66959d302..0000000000
--- a/ext/pgsql/config.w32
+++ /dev/null
@@ -1,15 +0,0 @@
-// $Id$
-// vim:ft=javascript
-
-ARG_WITH("pgsql", "PostgreSQL support", "no");
-
-if (PHP_PGSQL != "no") {
- if (CHECK_LIB("libpq.lib", "pgsql", PHP_PGSQL) &&
- CHECK_HEADER_ADD_INCLUDE("libpq-fe.h", "CFLAGS_PGSQL", PHP_PHP_BUILD + "\\include\\pgsql;" + PHP_PGSQL)) {
- EXTENSION("pgsql", "pgsql.c");
- AC_DEFINE('HAVE_PGSQL', 1, 'Have PostgreSQL library');
- ADD_FLAG("CFLAGS_PGSQL", "/D HAVE_PQCMDTUPLES /D HAVE_PQCLIENTENCODING /D HAVE_PQESCAPE /D HAVE_PG_CONFIG_H /D PGSQL_EXPORTS");
- } else {
- WARNING("pgsql not enabled; libraries and headers not found");
- }
-}
diff --git a/ext/pgsql/mysql_users.php b/ext/pgsql/mysql_users.php
deleted file mode 100644
index 65a2c33967..0000000000
--- a/ext/pgsql/mysql_users.php
+++ /dev/null
@@ -1,82 +0,0 @@
-<?php
-/*
- * File: mysql_users.php
- * Author: Yasuo Ohgaki <yohgaki@php.net>
- *
- * This file contains example user defined functions that does
- * similar to MySQL functions. They can be implemented as module
- * functions, but there won't be many users need them.
- *
- * Requires: PostgreSQL 7.2.x
- */
-
-/*
- * mysql_list_dbs()
- *
- * This function should be needed, since PostgreSQL connection
- * binds database.
- */
-function pg_list_dbs($db)
-{
- assert(is_resource($db));
- $query = '
-SELECT
- d.datname as "Name",
- u.usename as "Owner",
- pg_encoding_to_char(d.encoding) as "Encoding"
-FROM
- pg_database d LEFT JOIN pg_user u ON d.datdba = u.usesysid
-ORDER BY 1;
-';
- return pg_query($db, $query);
-}
-
-
-/*
- * mysql_list_tables()
- */
-function pg_list_tables($db)
-{
- assert(is_resource($db));
- $query = "
-SELECT
- c.relname as \"Name\",
- CASE c.relkind WHEN 'r' THEN 'table' WHEN 'v' THEN 'view' WHEN 'i' THEN 'index' WHEN 'S' THEN 'sequence' WHEN 's' THEN 'special' END as \"Type\",
- u.usename as \"Owner\"
-FROM
- pg_class c LEFT JOIN pg_user u ON c.relowner = u.usesysid
-WHERE
- c.relkind IN ('r','v','S','')
- AND c.relname !~ '^pg_'
-ORDER BY 1;
-";
- return pg_query($db, $query);
-}
-
-/*
- * mysql_list_fields()
- *
- * See also pg_meta_data(). It returns field defintion as array.
- */
-function pg_list_fields($db, $table)
-{
- assert(is_resource($db));
- $query = "
-SELECT
- a.attname,
- format_type(a.atttypid, a.atttypmod),
- a.attnotnull,
- a.atthasdef,
- a.attnum
-FROM
- pg_class c,
- pg_attribute a
-WHERE
- c.relname = '".$table."'
- AND a.attnum > 0 AND a.attrelid = c.oid
-ORDER BY a.attnum;
-";
- return pg_query($db, $query);
-}
-
-?>
diff --git a/ext/pgsql/pgsql.c b/ext/pgsql/pgsql.c
deleted file mode 100644
index 786be839fc..0000000000
--- a/ext/pgsql/pgsql.c
+++ /dev/null
@@ -1,4783 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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. |
- +----------------------------------------------------------------------+
- | Authors: Zeev Suraski <zeev@zend.com> |
- | Jouni Ahto <jouni.ahto@exdec.fi> |
- | Yasuo Ohgaki <yohgaki@php.net> |
- | Youichi Iwakiri <yiwakiri@st.rim.or.jp> (pg_copy_*) |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-#include <stdlib.h>
-
-#define PHP_PGSQL_PRIVATE 1
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#define SMART_STR_PREALLOC 512
-
-#include "php.h"
-#include "php_ini.h"
-#include "ext/standard/php_standard.h"
-#include "ext/standard/php_smart_str.h"
-#include "php_pgsql.h"
-#include "php_globals.h"
-#include "zend_exceptions.h"
-
-#if HAVE_PGSQL
-
-#ifndef InvalidOid
-#define InvalidOid ((Oid) 0)
-#endif
-
-#define PGSQL_ASSOC 1<<0
-#define PGSQL_NUM 1<<1
-#define PGSQL_BOTH (PGSQL_ASSOC|PGSQL_NUM)
-
-#define PGSQL_STATUS_LONG 1
-#define PGSQL_STATUS_STRING 2
-
-#define PGSQL_MAX_LENGTH_OF_LONG 30
-#define PGSQL_MAX_LENGTH_OF_DOUBLE 60
-
-#define PGSQL_RETURN_OID(oid) do { \
- if (oid > LONG_MAX) { \
- smart_str s = {0}; \
- smart_str_append_unsigned(&s, oid); \
- smart_str_0(&s); \
- RETURN_STRINGL(s.c, s.len, 0); \
- } \
- RETURN_LONG((long)oid); \
-} while(0)
-
-
-#if HAVE_PQSETNONBLOCKING
-#define PQ_SETNONBLOCKING(pg_link, flag) PQsetnonblocking(pg_link, flag)
-#else
-#define PQ_SETNONBLOCKING(pg_link, flag) 0
-#endif
-
-#define CHECK_DEFAULT_LINK(x) if ((x) == -1) { php_error_docref(NULL TSRMLS_CC, E_WARNING, "No PostgreSQL link opened yet"); }
-
-/* {{{ pgsql_functions[]
- */
-function_entry pgsql_functions[] = {
- /* connection functions */
- PHP_FE(pg_connect, NULL)
- PHP_FE(pg_pconnect, NULL)
- PHP_FE(pg_close, NULL)
- PHP_FE(pg_connection_status, NULL)
- PHP_FE(pg_connection_busy, NULL)
- PHP_FE(pg_connection_reset, NULL)
- PHP_FE(pg_host, NULL)
- PHP_FE(pg_dbname, NULL)
- PHP_FE(pg_port, NULL)
- PHP_FE(pg_tty, NULL)
- PHP_FE(pg_options, NULL)
- PHP_FE(pg_version, NULL)
- PHP_FE(pg_ping, NULL)
-#if HAVE_PQPARAMETERSTATUS
- PHP_FE(pg_parameter_status, NULL)
-#endif
- /* query functions */
- PHP_FE(pg_query, NULL)
- PHP_FE(pg_send_query, NULL)
- PHP_FE(pg_cancel_query, NULL)
- /* result functions */
- PHP_FE(pg_fetch_result, NULL)
- PHP_FE(pg_fetch_row, NULL)
- PHP_FE(pg_fetch_assoc, NULL)
- PHP_FE(pg_fetch_array, NULL)
- PHP_FE(pg_fetch_object, NULL)
- PHP_FE(pg_fetch_all, NULL)
- PHP_FE(pg_affected_rows,NULL)
- PHP_FE(pg_get_result, NULL)
- PHP_FE(pg_result_seek, NULL)
- PHP_FE(pg_result_status,NULL)
- PHP_FE(pg_free_result, NULL)
- PHP_FE(pg_last_oid, NULL)
- PHP_FE(pg_num_rows, NULL)
- PHP_FE(pg_num_fields, NULL)
- PHP_FE(pg_field_name, NULL)
- PHP_FE(pg_field_num, NULL)
- PHP_FE(pg_field_size, NULL)
- PHP_FE(pg_field_type, NULL)
- PHP_FE(pg_field_prtlen, NULL)
- PHP_FE(pg_field_is_null,NULL)
- /* async message function */
- PHP_FE(pg_get_notify, NULL)
- PHP_FE(pg_get_pid, NULL)
- /* error message functions */
- PHP_FE(pg_result_error, NULL)
- PHP_FE(pg_last_error, NULL)
- PHP_FE(pg_last_notice, NULL)
- /* copy functions */
- PHP_FE(pg_put_line, NULL)
- PHP_FE(pg_end_copy, NULL)
- PHP_FE(pg_copy_to, NULL)
- PHP_FE(pg_copy_from, NULL)
- /* debug functions */
- PHP_FE(pg_trace, NULL)
- PHP_FE(pg_untrace, NULL)
- /* large object functions */
- PHP_FE(pg_lo_create, NULL)
- PHP_FE(pg_lo_unlink, NULL)
- PHP_FE(pg_lo_open, NULL)
- PHP_FE(pg_lo_close, NULL)
- PHP_FE(pg_lo_read, NULL)
- PHP_FE(pg_lo_write, NULL)
- PHP_FE(pg_lo_read_all, NULL)
- PHP_FE(pg_lo_import, NULL)
- PHP_FE(pg_lo_export, NULL)
- PHP_FE(pg_lo_seek, NULL)
- PHP_FE(pg_lo_tell, NULL)
- /* utility functions */
-#if HAVE_PQESCAPE
- PHP_FE(pg_escape_string,NULL)
- PHP_FE(pg_escape_bytea, NULL)
- PHP_FE(pg_unescape_bytea, NULL)
-#endif
-#if HAVE_PQCLIENTENCODING
- PHP_FE(pg_client_encoding, NULL)
- PHP_FE(pg_set_client_encoding, NULL)
-#endif
- /* misc function */
- PHP_FE(pg_meta_data, NULL)
- PHP_FE(pg_convert, NULL)
- PHP_FE(pg_insert, NULL)
- PHP_FE(pg_update, NULL)
- PHP_FE(pg_delete, NULL)
- PHP_FE(pg_select, NULL)
- /* aliases for downwards compatibility */
- PHP_FALIAS(pg_exec, pg_query, NULL)
- PHP_FALIAS(pg_getlastoid, pg_last_oid, NULL)
- PHP_FALIAS(pg_cmdtuples, pg_affected_rows, NULL)
- PHP_FALIAS(pg_errormessage, pg_last_error, NULL)
- PHP_FALIAS(pg_numrows, pg_num_rows, NULL)
- PHP_FALIAS(pg_numfields, pg_num_fields, NULL)
- PHP_FALIAS(pg_fieldname, pg_field_name, NULL)
- PHP_FALIAS(pg_fieldsize, pg_field_size, NULL)
- PHP_FALIAS(pg_fieldtype, pg_field_type, NULL)
- PHP_FALIAS(pg_fieldnum, pg_field_num, NULL)
- PHP_FALIAS(pg_fieldprtlen, pg_field_prtlen, NULL)
- PHP_FALIAS(pg_fieldisnull, pg_field_is_null, NULL)
- PHP_FALIAS(pg_freeresult, pg_free_result, NULL)
- PHP_FALIAS(pg_result, pg_fetch_result, NULL)
- PHP_FALIAS(pg_loreadall, pg_lo_read_all, NULL)
- PHP_FALIAS(pg_locreate, pg_lo_create, NULL)
- PHP_FALIAS(pg_lounlink, pg_lo_unlink, NULL)
- PHP_FALIAS(pg_loopen, pg_lo_open, NULL)
- PHP_FALIAS(pg_loclose, pg_lo_close, NULL)
- PHP_FALIAS(pg_loread, pg_lo_read, NULL)
- PHP_FALIAS(pg_lowrite, pg_lo_write, NULL)
- PHP_FALIAS(pg_loimport, pg_lo_import, NULL)
- PHP_FALIAS(pg_loexport, pg_lo_export, NULL)
-#if HAVE_PQCLIENTENCODING
- PHP_FALIAS(pg_clientencoding, pg_client_encoding, NULL)
- PHP_FALIAS(pg_setclientencoding, pg_set_client_encoding, NULL)
-#endif
- {NULL, NULL, NULL}
-};
-/* }}} */
-
-/* {{{ pgsql_module_entry
- */
-zend_module_entry pgsql_module_entry = {
- STANDARD_MODULE_HEADER,
- "pgsql",
- pgsql_functions,
- PHP_MINIT(pgsql),
- PHP_MSHUTDOWN(pgsql),
- PHP_RINIT(pgsql),
- PHP_RSHUTDOWN(pgsql),
- PHP_MINFO(pgsql),
- NO_VERSION_YET,
- STANDARD_MODULE_PROPERTIES
-};
-/* }}} */
-
-#ifdef COMPILE_DL_PGSQL
-ZEND_GET_MODULE(pgsql)
-#endif
-
-static int le_link, le_plink, le_result, le_lofp, le_string;
-
-ZEND_DECLARE_MODULE_GLOBALS(pgsql);
-
-/* {{{ _php_pgsql_trim_message */
-static char * _php_pgsql_trim_message(const char *message, int *len)
-{
- register int i = strlen(message)-1;
-
- if (i>1 && (message[i-1] == '\r' || message[i-1] == '\n') && message[i] == '.') {
- --i;
- }
- while (i>0 && (message[i] == '\r' || message[i] == '\n')) {
- --i;
- }
- ++i;
- if (len) {
- *len = i;
- }
- return estrndup(message, i);
-}
-/* }}} */
-
-/* {{{ _php_pgsql_trim_result */
-static inline char * _php_pgsql_trim_result(PGconn * pgsql, char **buf)
-{
- return *buf = _php_pgsql_trim_message(PQerrorMessage(pgsql), NULL);
-}
-/* }}} */
-
-#define PQErrorMessageTrim(pgsql, buf) _php_pgsql_trim_result(pgsql, buf)
-
-#define PHP_PQ_ERROR(text, pgsql) { \
- char *msgbuf = _php_pgsql_trim_message(PQerrorMessage(pgsql), NULL); \
- php_error_docref(NULL TSRMLS_CC, E_WARNING, text, msgbuf); \
- efree(msgbuf); \
-} \
-
-/* {{{ php_pgsql_set_default_link
- */
-static void php_pgsql_set_default_link(int id TSRMLS_DC)
-{
- zend_list_addref(id);
-
- if (PGG(default_link) != -1) {
- zend_list_delete(PGG(default_link));
- }
-
- PGG(default_link) = id;
-}
-/* }}} */
-
-/* {{{ _close_pgsql_link
- */
-static void _close_pgsql_link(zend_rsrc_list_entry *rsrc TSRMLS_DC)
-{
- PGconn *link = (PGconn *)rsrc->ptr;
- PGresult *res;
-
- while ((res = PQgetResult(link))) {
- PQclear(res);
- }
- PQfinish(link);
- PGG(num_links)--;
-}
-/* }}} */
-
-/* {{{ _close_pgsql_plink
- */
-static void _close_pgsql_plink(zend_rsrc_list_entry *rsrc TSRMLS_DC)
-{
- PGconn *link = (PGconn *)rsrc->ptr;
- PGresult *res;
-
- while ((res = PQgetResult(link))) {
- PQclear(res);
- }
- PQfinish(link);
- PGG(num_persistent)--;
- PGG(num_links)--;
-}
-/* }}} */
-
-/* {{{ _php_pgsql_notice_handler
- */
-static void _php_pgsql_notice_handler(void *resource_id, const char *message)
-{
- php_pgsql_notice *notice;
-
- TSRMLS_FETCH();
- if (! PGG(ignore_notices)) {
- notice = (php_pgsql_notice *)emalloc(sizeof(php_pgsql_notice));
- notice->message = _php_pgsql_trim_message(message, &notice->len);
- if (PGG(log_notices)) {
- php_error_docref(NULL TSRMLS_CC, E_NOTICE, "%s", notice->message);
- }
- zend_hash_index_update(&PGG(notices), *(int *)resource_id, (void **)&notice, sizeof(php_pgsql_notice *), NULL);
- }
-}
-/* }}} */
-
-#define PHP_PGSQL_NOTICE_PTR_DTOR (void (*)(void *))_php_pgsql_notice_ptr_dtor
-
-/* {{{ _php_pgsql_notice_dtor
- */
-static void _php_pgsql_notice_ptr_dtor(void **ptr)
-{
- php_pgsql_notice *notice = (php_pgsql_notice *)*ptr;
- efree(notice->message);
- efree(notice);
-}
-/* }}} */
-
-/* {{{ _rollback_transactions
- */
-static int _rollback_transactions(zend_rsrc_list_entry *rsrc TSRMLS_DC)
-{
- PGconn *link;
- PGresult *res;
- int orig;
-
- if (Z_TYPE_P(rsrc) != le_plink)
- return 0;
-
- link = (PGconn *) rsrc->ptr;
-
- if (PQ_SETNONBLOCKING(link, 0)) {
- php_error_docref("ref.pgsql" TSRMLS_CC, E_NOTICE, "Cannot set connection to blocking mode");
- return -1;
- }
-
- while ((res = PQgetResult(link))) {
- PQclear(res);
- }
-#if HAVE_PGTRANSACTIONSTATUS && HAVE_PQPROTOCOLVERSION
- if ((PQprotocolVersion(link) >= 3 && PQtransactionStatus(link) != PQTRANS_IDLE) || PQprotocolVersion(link) < 3)
-#endif
- {
- orig = PGG(ignore_notices);
- PGG(ignore_notices) = 1;
-#if HAVE_PGTRANSACTIONSTATUS && HAVE_PQPROTOCOLVERSION
- res = PQexec(link,"ROLLBACK;");
-#else
- res = PQexec(link,"BEGIN;");
- PQclear(res);
- res = PQexec(link,"ROLLBACK;");
-#endif
- PQclear(res);
- PGG(ignore_notices) = orig;
- }
-
- return 0;
-}
-/* }}} */
-
-/* {{{ _free_ptr
- */
-static void _free_ptr(zend_rsrc_list_entry *rsrc TSRMLS_DC)
-{
- pgLofp *lofp = (pgLofp *)rsrc->ptr;
- efree(lofp);
-}
-/* }}} */
-
-/* {{{ _free_result
- */
-static void _free_result(zend_rsrc_list_entry *rsrc TSRMLS_DC)
-{
- pgsql_result_handle *pg_result = (pgsql_result_handle *)rsrc->ptr;
-
- PQclear(pg_result->result);
- efree(pg_result);
-}
-/* }}} */
-
-/* {{{ PHP_INI
- */
-PHP_INI_BEGIN()
-STD_PHP_INI_BOOLEAN( "pgsql.allow_persistent", "1", PHP_INI_SYSTEM, OnUpdateBool, allow_persistent, zend_pgsql_globals, pgsql_globals)
-STD_PHP_INI_ENTRY_EX("pgsql.max_persistent", "-1", PHP_INI_SYSTEM, OnUpdateLong, max_persistent, zend_pgsql_globals, pgsql_globals, display_link_numbers)
-STD_PHP_INI_ENTRY_EX("pgsql.max_links", "-1", PHP_INI_SYSTEM, OnUpdateLong, max_links, zend_pgsql_globals, pgsql_globals, display_link_numbers)
-STD_PHP_INI_BOOLEAN( "pgsql.auto_reset_persistent", "0", PHP_INI_SYSTEM, OnUpdateBool, auto_reset_persistent, zend_pgsql_globals, pgsql_globals)
-STD_PHP_INI_BOOLEAN( "pgsql.ignore_notice", "0", PHP_INI_ALL, OnUpdateBool, ignore_notices, zend_pgsql_globals, pgsql_globals)
-STD_PHP_INI_BOOLEAN( "pgsql.log_notice", "0", PHP_INI_ALL, OnUpdateBool, log_notices, zend_pgsql_globals, pgsql_globals)
-PHP_INI_END()
-/* }}} */
-
-/* {{{ php_pgsql_init_globals
- */
-static void php_pgsql_init_globals(zend_pgsql_globals *pgsql_globals)
-{
- memset(pgsql_globals, 0, sizeof(zend_pgsql_globals));
- /* Initilize notice message hash at MINIT only */
- zend_hash_init_ex(&pgsql_globals->notices, 0, NULL, PHP_PGSQL_NOTICE_PTR_DTOR, 1, 0);
-}
-/* }}} */
-
-/* {{{ PHP_MINIT_FUNCTION
- */
-PHP_MINIT_FUNCTION(pgsql)
-{
- ZEND_INIT_MODULE_GLOBALS(pgsql, php_pgsql_init_globals, NULL);
-
- REGISTER_INI_ENTRIES();
-
- le_link = zend_register_list_destructors_ex(_close_pgsql_link, NULL, "pgsql link", module_number);
- le_plink = zend_register_list_destructors_ex(NULL, _close_pgsql_plink, "pgsql link persistent", module_number);
- le_result = zend_register_list_destructors_ex(_free_result, NULL, "pgsql result", module_number);
- le_lofp = zend_register_list_destructors_ex(_free_ptr, NULL, "pgsql large object", module_number);
- le_string = zend_register_list_destructors_ex(_free_ptr, NULL, "pgsql string", module_number);
- /* For connection option */
- REGISTER_LONG_CONSTANT("PGSQL_CONNECT_FORCE_NEW", PGSQL_CONNECT_FORCE_NEW, CONST_CS | CONST_PERSISTENT);
- /* For pg_fetch_array() */
- REGISTER_LONG_CONSTANT("PGSQL_ASSOC", PGSQL_ASSOC, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("PGSQL_NUM", PGSQL_NUM, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("PGSQL_BOTH", PGSQL_BOTH, CONST_CS | CONST_PERSISTENT);
- /* For pg_connection_status() */
- REGISTER_LONG_CONSTANT("PGSQL_CONNECTION_BAD", CONNECTION_BAD, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("PGSQL_CONNECTION_OK", CONNECTION_OK, CONST_CS | CONST_PERSISTENT);
- /* For lo_seek() */
- REGISTER_LONG_CONSTANT("PGSQL_SEEK_SET", SEEK_SET, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("PGSQL_SEEK_CUR", SEEK_CUR, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("PGSQL_SEEK_END", SEEK_END, CONST_CS | CONST_PERSISTENT);
- /* For pg_result_status() return value type */
- REGISTER_LONG_CONSTANT("PGSQL_STATUS_LONG", PGSQL_STATUS_LONG, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("PGSQL_STATUS_STRING", PGSQL_STATUS_STRING, CONST_CS | CONST_PERSISTENT);
- /* For pg_result_status() return value */
- REGISTER_LONG_CONSTANT("PGSQL_EMPTY_QUERY", PGRES_EMPTY_QUERY, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("PGSQL_COMMAND_OK", PGRES_COMMAND_OK, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("PGSQL_TUPLES_OK", PGRES_TUPLES_OK, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("PGSQL_COPY_OUT", PGRES_COPY_OUT, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("PGSQL_COPY_IN", PGRES_COPY_IN, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("PGSQL_BAD_RESPONSE", PGRES_BAD_RESPONSE, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("PGSQL_NONFATAL_ERROR", PGRES_NONFATAL_ERROR, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("PGSQL_FATAL_ERROR", PGRES_FATAL_ERROR, CONST_CS | CONST_PERSISTENT);
- /* pg_convert options */
- REGISTER_LONG_CONSTANT("PGSQL_CONV_IGNORE_DEFAULT", PGSQL_CONV_IGNORE_DEFAULT, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("PGSQL_CONV_FORCE_NULL", PGSQL_CONV_FORCE_NULL, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("PGSQL_CONV_IGNORE_NOT_NULL", PGSQL_CONV_IGNORE_NOT_NULL, CONST_CS | CONST_PERSISTENT);
- /* pg_insert/update/delete/select options */
- REGISTER_LONG_CONSTANT("PGSQL_DML_NO_CONV", PGSQL_DML_NO_CONV, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("PGSQL_DML_EXEC", PGSQL_DML_EXEC, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("PGSQL_DML_ASYNC", PGSQL_DML_ASYNC, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("PGSQL_DML_STRING", PGSQL_DML_STRING, CONST_CS | CONST_PERSISTENT);
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ PHP_MSHUTDOWN_FUNCTION
- */
-PHP_MSHUTDOWN_FUNCTION(pgsql)
-{
- UNREGISTER_INI_ENTRIES();
- zend_hash_destroy(&PGG(notices));
-
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ PHP_RINIT_FUNCTION
- */
-PHP_RINIT_FUNCTION(pgsql)
-{
- PGG(default_link)=-1;
- PGG(num_links) = PGG(num_persistent);
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ PHP_RSHUTDOWN_FUNCTION
- */
-PHP_RSHUTDOWN_FUNCTION(pgsql)
-{
- /* clean up notice messages */
- zend_hash_clean(&PGG(notices));
- /* clean up persistent connection */
- zend_hash_apply(&EG(persistent_list), (apply_func_t) _rollback_transactions TSRMLS_CC);
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ PHP_MINFO_FUNCTION
- */
-PHP_MINFO_FUNCTION(pgsql)
-{
- char buf[256];
-
- php_info_print_table_start();
- php_info_print_table_header(2, "PostgreSQL Support", "enabled");
-#if HAVE_PG_CONFIG_H
- php_info_print_table_row(2, "PostgreSQL(libpq) Version", PG_VERSION);
-#ifdef HAVE_PGSQL_WITH_MULTIBYTE_SUPPORT
- php_info_print_table_row(2, "Multibyte character support", "enabled");
-#else
- php_info_print_table_row(2, "Multibyte character support", "disabled");
-#endif
-#ifdef USE_SSL
- php_info_print_table_row(2, "SSL support", "enabled");
-#else
- php_info_print_table_row(2, "SSL support", "disabled");
-#endif
-#endif /* HAVE_PG_CONFIG_H */
- sprintf(buf, "%ld", PGG(num_persistent));
- php_info_print_table_row(2, "Active Persistent Links", buf);
- sprintf(buf, "%ld", PGG(num_links));
- php_info_print_table_row(2, "Active Links", buf);
- php_info_print_table_end();
-
- DISPLAY_INI_ENTRIES();
-}
-/* }}} */
-
-
-/* {{{ php_pgsql_do_connect
- */
-static void php_pgsql_do_connect(INTERNAL_FUNCTION_PARAMETERS, int persistent)
-{
- char *host=NULL,*port=NULL,*options=NULL,*tty=NULL,*dbname=NULL,*connstring=NULL;
- PGconn *pgsql;
- smart_str str = {0};
- zval **args[5];
- int i, connect_type = 0;
- PGresult *pg_result;
-
- if (ZEND_NUM_ARGS() < 1 || ZEND_NUM_ARGS() > 5
- || zend_get_parameters_array_ex(ZEND_NUM_ARGS(), args) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- smart_str_appends(&str, "pgsql");
-
- for (i = 0; i < ZEND_NUM_ARGS(); i++) {
- convert_to_string_ex(args[i]);
- smart_str_appendc(&str, '_');
- smart_str_appendl(&str, Z_STRVAL_PP(args[i]), Z_STRLEN_PP(args[i]));
- }
-
- smart_str_0(&str);
-
- if (ZEND_NUM_ARGS() == 1) { /* new style, using connection string */
- connstring = Z_STRVAL_PP(args[0]);
- } else if (ZEND_NUM_ARGS() == 2 ) { /* Safe to add conntype_option, since 2 args was illegal */
- connstring = Z_STRVAL_PP(args[0]);
- convert_to_long_ex(args[1]);
- connect_type = Z_LVAL_PP(args[1]);
- } else {
- host = Z_STRVAL_PP(args[0]);
- port = Z_STRVAL_PP(args[1]);
- dbname = Z_STRVAL_PP(args[ZEND_NUM_ARGS()-1]);
-
- switch (ZEND_NUM_ARGS()) {
- case 5:
- tty = Z_STRVAL_PP(args[3]);
- /* fall through */
- case 4:
- options = Z_STRVAL_PP(args[2]);
- break;
- }
- }
-
- if (persistent && PGG(allow_persistent)) {
- list_entry *le;
-
- /* try to find if we already have this link in our persistent list */
- if (zend_hash_find(&EG(persistent_list), str.c, str.len+1, (void **) &le)==FAILURE) { /* we don't */
- list_entry new_le;
-
- if (PGG(max_links)!=-1 && PGG(num_links)>=PGG(max_links)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING,
- "Cannot create new link. Too many open links (%ld)", PGG(num_links));
- goto err;
- }
- if (PGG(max_persistent)!=-1 && PGG(num_persistent)>=PGG(max_persistent)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING,
- "Cannot create new link. Too many open persistent links (%ld)", PGG(num_persistent));
- goto err;
- }
-
- /* create the link */
- if (connstring) {
- pgsql=PQconnectdb(connstring);
- } else {
- pgsql=PQsetdb(host,port,options,tty,dbname);
- }
- if (pgsql==NULL || PQstatus(pgsql)==CONNECTION_BAD) {
- PHP_PQ_ERROR("Unable to connect to PostgreSQL server: %s", pgsql)
- if (pgsql) {
- PQfinish(pgsql);
- }
- goto err;
- }
-
- /* hash it up */
- Z_TYPE(new_le) = le_plink;
- new_le.ptr = pgsql;
- if (zend_hash_update(&EG(persistent_list), str.c, str.len+1, (void *) &new_le, sizeof(list_entry), NULL)==FAILURE) {
- goto err;
- }
- PGG(num_links)++;
- PGG(num_persistent)++;
- } else { /* we do */
- if (Z_TYPE_P(le) != le_plink) {
- RETURN_FALSE;
- }
- /* ensure that the link did not die */
- if (PGG(auto_reset_persistent) & 1) {
- /* need to send & get something from backend to
- make sure we catch CONNECTION_BAD everytime */
- PGresult *pg_result;
- pg_result = PQexec(le->ptr, "select 1");
- PQclear(pg_result);
- }
- if (PQstatus(le->ptr)==CONNECTION_BAD) { /* the link died */
- if (le->ptr == NULL) {
- if (connstring) {
- le->ptr=PQconnectdb(connstring);
- } else {
- le->ptr=PQsetdb(host,port,options,tty,dbname);
- }
- }
- else {
- PQreset(le->ptr);
- }
- if (le->ptr==NULL || PQstatus(le->ptr)==CONNECTION_BAD) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING,"PostgreSQL link lost, unable to reconnect");
- zend_hash_del(&EG(persistent_list),str.c,str.len+1);
- goto err;
- }
- }
- pgsql = (PGconn *) le->ptr;
-#if HAVE_PQPROTOCOLVERSION && HAVE_PQPARAMETERSTATUS
- if (PQprotocolVersion(pgsql) >= 3 && atof(PQparameterStatus(pgsql, "server_version")) >= 7.2) {
-#else
- if (atof(PG_VERSION) >= 7.2) {
-#endif
- pg_result = PQexec(pgsql, "RESET ALL;");
- PQclear(pg_result);
- }
- }
- ZEND_REGISTER_RESOURCE(return_value, pgsql, le_plink);
- } else { /* Non persistent connection */
- list_entry *index_ptr,new_index_ptr;
-
- /* first we check the hash for the hashed_details key. if it exists,
- * it should point us to the right offset where the actual pgsql link sits.
- * if it doesn't, open a new pgsql link, add it to the resource list,
- * and add a pointer to it with hashed_details as the key.
- */
- if (!(connect_type & PGSQL_CONNECT_FORCE_NEW)
- && zend_hash_find(&EG(regular_list),str.c,str.len+1,(void **) &index_ptr)==SUCCESS) {
- int type,link;
- void *ptr;
-
- if (Z_TYPE_P(index_ptr) != le_index_ptr) {
- RETURN_FALSE;
- }
- link = (int) index_ptr->ptr;
- ptr = zend_list_find(link,&type); /* check if the link is still there */
- if (ptr && (type==le_link || type==le_plink)) {
- Z_LVAL_P(return_value) = link;
- zend_list_addref(link);
- php_pgsql_set_default_link(link TSRMLS_CC);
- Z_TYPE_P(return_value) = IS_RESOURCE;
- goto cleanup;
- } else {
- zend_hash_del(&EG(regular_list),str.c,str.len+1);
- }
- }
- if (PGG(max_links)!=-1 && PGG(num_links)>=PGG(max_links)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Cannot create new link. Too many open links (%ld)", PGG(num_links));
- goto err;
- }
- if (connstring) {
- pgsql = PQconnectdb(connstring);
- } else {
- pgsql = PQsetdb(host,port,options,tty,dbname);
- }
- if (pgsql==NULL || PQstatus(pgsql)==CONNECTION_BAD) {
- PHP_PQ_ERROR("Unable to connect to PostgreSQL server: %s", pgsql);
- if (pgsql) {
- PQfinish(pgsql);
- }
- goto err;
- }
-
- /* add it to the list */
- ZEND_REGISTER_RESOURCE(return_value, pgsql, le_link);
-
- /* add it to the hash */
- new_index_ptr.ptr = (void *) Z_LVAL_P(return_value);
- Z_TYPE(new_index_ptr) = le_index_ptr;
- if (zend_hash_update(&EG(regular_list),str.c,str.len+1,(void *) &new_index_ptr, sizeof(list_entry), NULL)==FAILURE) {
- goto err;
- }
- PGG(num_links)++;
- }
- /* set notice processer */
- if (! PGG(ignore_notices) && Z_TYPE_P(return_value) == IS_RESOURCE) {
- PQsetNoticeProcessor(pgsql, _php_pgsql_notice_handler, (void *)&Z_RESVAL_P(return_value));
- }
- php_pgsql_set_default_link(Z_LVAL_P(return_value) TSRMLS_CC);
-
-cleanup:
- smart_str_free(&str);
- return;
-
-err:
- smart_str_free(&str);
- RETURN_FALSE;
-}
-/* }}} */
-
-#if 0
-/* {{{ php_pgsql_get_default_link
- */
-static int php_pgsql_get_default_link(INTERNAL_FUNCTION_PARAMETERS)
-{
- if (PGG(default_link)==-1) { /* no link opened yet, implicitly open one */
- ht = 0;
- php_pgsql_do_connect(INTERNAL_FUNCTION_PARAM_PASSTHRU,0);
- }
- return PGG(default_link);
-}
-/* }}} */
-#endif
-
-/* {{{ proto resource pg_connect(string connection_string[, int connect_type] | [string host, string port [, string options [, string tty,]]] string database)
- Open a PostgreSQL connection */
-PHP_FUNCTION(pg_connect)
-{
- php_pgsql_do_connect(INTERNAL_FUNCTION_PARAM_PASSTHRU,0);
-}
-/* }}} */
-
-/* {{{ proto resource pg_pconnect(string connection_string | [string host, string port [, string options [, string tty,]]] string database)
- Open a persistent PostgreSQL connection */
-PHP_FUNCTION(pg_pconnect)
-{
- php_pgsql_do_connect(INTERNAL_FUNCTION_PARAM_PASSTHRU,1);
-}
-/* }}} */
-
-/* {{{ proto bool pg_close([resource connection])
- Close a PostgreSQL connection */
-PHP_FUNCTION(pg_close)
-{
- zval **pgsql_link = NULL;
- int id;
- PGconn *pgsql;
-
- switch (ZEND_NUM_ARGS()) {
- case 0:
- id = PGG(default_link);
- CHECK_DEFAULT_LINK(id);
- break;
- case 1:
- if (zend_get_parameters_ex(1, &pgsql_link)==FAILURE) {
- RETURN_FALSE;
- }
- id = -1;
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
- if (pgsql_link == NULL && id == -1) {
- RETURN_FALSE;
- }
-
- ZEND_FETCH_RESOURCE2(pgsql, PGconn *, pgsql_link, id, "PostgreSQL link", le_link, le_plink);
-
- if (id==-1) { /* explicit resource number */
- zend_list_delete(Z_RESVAL_PP(pgsql_link));
- }
-
- if (id!=-1
- || (pgsql_link && Z_RESVAL_PP(pgsql_link)==PGG(default_link))) {
- zend_list_delete(PGG(default_link));
- PGG(default_link) = -1;
- }
-
- RETURN_TRUE;
-}
-/* }}} */
-
-
-#define PHP_PG_DBNAME 1
-#define PHP_PG_ERROR_MESSAGE 2
-#define PHP_PG_OPTIONS 3
-#define PHP_PG_PORT 4
-#define PHP_PG_TTY 5
-#define PHP_PG_HOST 6
-#define PHP_PG_VERSION 7
-
-/* {{{ php_pgsql_get_link_info
- */
-static void php_pgsql_get_link_info(INTERNAL_FUNCTION_PARAMETERS, int entry_type)
-{
- zval **pgsql_link = NULL;
- int id = -1;
- PGconn *pgsql;
- char *msgbuf;
-
- switch(ZEND_NUM_ARGS()) {
- case 0:
- id = PGG(default_link);
- CHECK_DEFAULT_LINK(id);
- break;
- case 1:
- if (zend_get_parameters_ex(1, &pgsql_link)==FAILURE) {
- RETURN_FALSE;
- }
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
- if (pgsql_link == NULL && id == -1) {
- RETURN_FALSE;
- }
-
- ZEND_FETCH_RESOURCE2(pgsql, PGconn *, pgsql_link, id, "PostgreSQL link", le_link, le_plink);
-
- switch(entry_type) {
- case PHP_PG_DBNAME:
- Z_STRVAL_P(return_value) = PQdb(pgsql);
- break;
- case PHP_PG_ERROR_MESSAGE:
- RETURN_STRING(PQErrorMessageTrim(pgsql, &msgbuf), 0);
- return;
- case PHP_PG_OPTIONS:
- Z_STRVAL_P(return_value) = PQoptions(pgsql);
- break;
- case PHP_PG_PORT:
- Z_STRVAL_P(return_value) = PQport(pgsql);
- break;
- case PHP_PG_TTY:
- Z_STRVAL_P(return_value) = PQtty(pgsql);
- break;
- case PHP_PG_HOST:
- Z_STRVAL_P(return_value) = PQhost(pgsql);
- break;
- case PHP_PG_VERSION:
- array_init(return_value);
- add_assoc_string(return_value, "client", PG_VERSION, 1);
-#if HAVE_PQPROTOCOLVERSION
- add_assoc_long(return_value, "protocol", PQprotocolVersion(pgsql));
-#if HAVE_PQPARAMETERSTATUS
- if (PQprotocolVersion(pgsql) >= 3) {
- add_assoc_string(return_value, "server", (char*)PQparameterStatus(pgsql, "server_version"), 1);
- }
-#endif
-#endif
- return;
- default:
- RETURN_FALSE;
- }
- if (Z_STRVAL_P(return_value)) {
- Z_STRLEN_P(return_value) = strlen(Z_STRVAL_P(return_value));
- Z_STRVAL_P(return_value) = (char *) estrdup(Z_STRVAL_P(return_value));
- } else {
- Z_STRLEN_P(return_value) = 0;
- Z_STRVAL_P(return_value) = (char *) estrdup("");
- }
- Z_TYPE_P(return_value) = IS_STRING;
-}
-/* }}} */
-
-/* {{{ proto string pg_dbname([resource connection])
- Get the database name */
-PHP_FUNCTION(pg_dbname)
-{
- php_pgsql_get_link_info(INTERNAL_FUNCTION_PARAM_PASSTHRU,PHP_PG_DBNAME);
-}
-/* }}} */
-
-/* {{{ proto string pg_last_error([resource connection])
- Get the error message string */
-PHP_FUNCTION(pg_last_error)
-{
- php_pgsql_get_link_info(INTERNAL_FUNCTION_PARAM_PASSTHRU,PHP_PG_ERROR_MESSAGE);
-}
-/* }}} */
-
-/* {{{ proto string pg_options([resource connection])
- Get the options associated with the connection */
-PHP_FUNCTION(pg_options)
-{
- php_pgsql_get_link_info(INTERNAL_FUNCTION_PARAM_PASSTHRU,PHP_PG_OPTIONS);
-}
-/* }}} */
-
-/* {{{ proto int pg_port([resource connection])
- Return the port number associated with the connection */
-PHP_FUNCTION(pg_port)
-{
- php_pgsql_get_link_info(INTERNAL_FUNCTION_PARAM_PASSTHRU,PHP_PG_PORT);
-}
-/* }}} */
-
-/* {{{ proto string pg_tty([resource connection])
- Return the tty name associated with the connection */
-PHP_FUNCTION(pg_tty)
-{
- php_pgsql_get_link_info(INTERNAL_FUNCTION_PARAM_PASSTHRU,PHP_PG_TTY);
-}
-/* }}} */
-
-/* {{{ proto string pg_host([resource connection])
- Returns the host name associated with the connection */
-PHP_FUNCTION(pg_host)
-{
- php_pgsql_get_link_info(INTERNAL_FUNCTION_PARAM_PASSTHRU,PHP_PG_HOST);
-}
-/* }}} */
-
-/* {{{ proto array pg_version([resource connection])
- Returns an array with client, protocol and server version (when available) */
-PHP_FUNCTION(pg_version)
-{
- php_pgsql_get_link_info(INTERNAL_FUNCTION_PARAM_PASSTHRU,PHP_PG_VERSION);
-}
-/* }}} */
-
-#if HAVE_PQPARAMETERSTATUS
-/* {{{ proto string|false pg_parameter_status([resource connection,] string param_name)
- Returns the value of a server parameter */
-PHP_FUNCTION(pg_parameter_status)
-{
- zval *pgsql_link;
- int id;
- PGconn *pgsql;
- char *param;
- int len;
-
- if (zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, ZEND_NUM_ARGS() TSRMLS_CC, "rs", &pgsql_link, &param, &len) == SUCCESS) {
- id = -1;
- } else if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &param, &len) == SUCCESS) {
- pgsql_link = NULL;
- id = PGG(default_link);
- } else {
- RETURN_FALSE;
- }
- if (pgsql_link == NULL && id == -1) {
- RETURN_FALSE;
- }
-
- ZEND_FETCH_RESOURCE2(pgsql, PGconn *, &pgsql_link, id, "PostgreSQL link", le_link, le_plink);
-
- param = (char*)PQparameterStatus(pgsql, param);
- if (param) {
- RETURN_STRING(param, 1);
- } else {
- RETURN_FALSE;
- }
-}
-/* }}} */
-#endif
-
-/* {{{ proto bool pg_ping([resource connection])
- Ping database. If connection is bad, try to reconnect. */
-PHP_FUNCTION(pg_ping)
-{
- zval *pgsql_link;
- int id;
- PGconn *pgsql;
- PGresult *res;
-
- if (zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, ZEND_NUM_ARGS() TSRMLS_CC, "r", &pgsql_link) == SUCCESS) {
- id = -1;
- } else {
- pgsql_link = NULL;
- id = PGG(default_link);
- }
- if (pgsql_link == NULL && id == -1) {
- RETURN_FALSE;
- }
-
- ZEND_FETCH_RESOURCE2(pgsql, PGconn *, &pgsql_link, id, "PostgreSQL link", le_link, le_plink);
-
- /* ping connection */
- res = PQexec(pgsql, "SELECT 1;");
- PQclear(res);
-
- /* check status. */
- if (PQstatus(pgsql) == CONNECTION_OK)
- RETURN_TRUE;
-
- /* reset connection if it's broken */
- PQreset(pgsql);
- if (PQstatus(pgsql) == CONNECTION_OK) {
- RETURN_TRUE;
- }
- RETURN_FALSE;
-}
-/* }}} */
-
-/* {{{ proto resource pg_query([resource connection,] string query)
- Execute a query */
-PHP_FUNCTION(pg_query)
-{
- zval **query, **pgsql_link = NULL;
- int id = -1;
- int leftover = 0;
- PGconn *pgsql;
- PGresult *pgsql_result;
- ExecStatusType status;
- pgsql_result_handle *pg_result;
-
- switch(ZEND_NUM_ARGS()) {
- case 1:
- if (zend_get_parameters_ex(1, &query)==FAILURE) {
- RETURN_FALSE;
- }
- id = PGG(default_link);
- CHECK_DEFAULT_LINK(id);
- break;
- case 2:
- if (zend_get_parameters_ex(2, &pgsql_link, &query)==FAILURE) {
- RETURN_FALSE;
- }
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
- if (pgsql_link == NULL && id == -1) {
- RETURN_FALSE;
- }
-
- ZEND_FETCH_RESOURCE2(pgsql, PGconn *, pgsql_link, id, "PostgreSQL link", le_link, le_plink);
-
- convert_to_string_ex(query);
- if (PQ_SETNONBLOCKING(pgsql, 0)) {
- php_error_docref(NULL TSRMLS_CC, E_NOTICE,"Cannot set connection to blocking mode");
- RETURN_FALSE;
- }
- while ((pgsql_result = PQgetResult(pgsql))) {
- PQclear(pgsql_result);
- leftover = 1;
- }
- if (leftover) {
- php_error_docref(NULL TSRMLS_CC, E_NOTICE, "Found results on this connection. Use pg_get_result() to get these results first");
- }
- pgsql_result = PQexec(pgsql, Z_STRVAL_PP(query));
- if ((PGG(auto_reset_persistent) & 2) && PQstatus(pgsql) != CONNECTION_OK) {
- PQclear(pgsql_result);
- PQreset(pgsql);
- pgsql_result = PQexec(pgsql, Z_STRVAL_PP(query));
- }
-
- if (pgsql_result) {
- status = PQresultStatus(pgsql_result);
- } else {
- status = (ExecStatusType) PQstatus(pgsql);
- }
-
- switch (status) {
- case PGRES_EMPTY_QUERY:
- case PGRES_BAD_RESPONSE:
- case PGRES_NONFATAL_ERROR:
- case PGRES_FATAL_ERROR:
- PHP_PQ_ERROR("Query failed: %s", pgsql);
- PQclear(pgsql_result);
- RETURN_FALSE;
- break;
- case PGRES_COMMAND_OK: /* successful command that did not return rows */
- default:
- if (pgsql_result) {
- pg_result = (pgsql_result_handle *) emalloc(sizeof(pgsql_result_handle));
- pg_result->conn = pgsql;
- pg_result->result = pgsql_result;
- pg_result->row = 0;
- ZEND_REGISTER_RESOURCE(return_value, pg_result, le_result);
- } else {
- PQclear(pgsql_result);
- RETURN_FALSE;
- }
- break;
- }
-}
-/* }}} */
-
-#define PHP_PG_NUM_ROWS 1
-#define PHP_PG_NUM_FIELDS 2
-#define PHP_PG_CMD_TUPLES 3
-
-/* {{{ php_pgsql_get_result_info
- */
-static void php_pgsql_get_result_info(INTERNAL_FUNCTION_PARAMETERS, int entry_type)
-{
- zval **result;
- PGresult *pgsql_result;
- pgsql_result_handle *pg_result;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &result)==FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(pg_result, pgsql_result_handle *, result, -1, "PostgreSQL result", le_result);
-
- pgsql_result = pg_result->result;
-
- switch (entry_type) {
- case PHP_PG_NUM_ROWS:
- Z_LVAL_P(return_value) = PQntuples(pgsql_result);
- break;
- case PHP_PG_NUM_FIELDS:
- Z_LVAL_P(return_value) = PQnfields(pgsql_result);
- break;
- case PHP_PG_CMD_TUPLES:
-#if HAVE_PQCMDTUPLES
- Z_LVAL_P(return_value) = atoi(PQcmdTuples(pgsql_result));
-#else
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Not supported under this build");
- Z_LVAL_P(return_value) = 0;
-#endif
- break;
- default:
- RETURN_FALSE;
- }
- Z_TYPE_P(return_value) = IS_LONG;
-}
-/* }}} */
-
-/* {{{ proto int pg_num_rows(resource result)
- Return the number of rows in the result */
-PHP_FUNCTION(pg_num_rows)
-{
- php_pgsql_get_result_info(INTERNAL_FUNCTION_PARAM_PASSTHRU,PHP_PG_NUM_ROWS);
-}
-/* }}} */
-
-/* {{{ proto int pg_num_fields(resource result)
- Return the number of fields in the result */
-PHP_FUNCTION(pg_num_fields)
-{
- php_pgsql_get_result_info(INTERNAL_FUNCTION_PARAM_PASSTHRU,PHP_PG_NUM_FIELDS);
-}
-/* }}} */
-
-/* {{{ proto int pg_affected_rows(resource result)
- Returns the number of affected tuples */
-PHP_FUNCTION(pg_affected_rows)
-{
- php_pgsql_get_result_info(INTERNAL_FUNCTION_PARAM_PASSTHRU,PHP_PG_CMD_TUPLES);
-}
-/* }}} */
-
-/* {{{ proto string pg_last_notice(resource connection)
- Returns the last notice set by the backend */
-PHP_FUNCTION(pg_last_notice)
-{
- zval *pgsql_link;
- PGconn *pg_link;
- int id = -1;
- php_pgsql_notice **notice;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r",
- &pgsql_link) == FAILURE) {
- return;
- }
- /* Just to check if user passed valid resoruce */
- ZEND_FETCH_RESOURCE2(pg_link, PGconn *, &pgsql_link, id, "PostgreSQL link", le_link, le_plink);
-
- if (zend_hash_index_find(&PGG(notices), Z_RESVAL_P(pgsql_link), (void **)&notice) == FAILURE) {
- RETURN_FALSE;
- }
- RETURN_STRINGL((*notice)->message, (*notice)->len, 1);
-}
-/* }}} */
-
-/* {{{ get_field_name
- */
-static char *get_field_name(PGconn *pgsql, Oid oid, HashTable *list TSRMLS_DC)
-{
- PGresult *result;
- smart_str str = {0};
- list_entry *field_type;
- char *ret=NULL;
-
- /* try to lookup the type in the resource list */
- smart_str_appends(&str, "pgsql_oid_");
- smart_str_append_unsigned(&str, oid);
- smart_str_0(&str);
-
- if (zend_hash_find(list,str.c,str.len+1,(void **) &field_type)==SUCCESS) {
- ret = estrdup((char *)field_type->ptr);
- } else { /* hash all oid's */
- int i,num_rows;
- int oid_offset,name_offset;
- char *tmp_oid, *end_ptr, *tmp_name;
- list_entry new_oid_entry;
-
- if ((result = PQexec(pgsql,"select oid,typname from pg_type")) == NULL || PQresultStatus(result) != PGRES_TUPLES_OK) {
- if (result) {
- PQclear(result);
- }
- smart_str_free(&str);
- return STR_EMPTY_ALLOC();
- }
- num_rows = PQntuples(result);
- oid_offset = PQfnumber(result,"oid");
- name_offset = PQfnumber(result,"typname");
-
- for (i=0; i<num_rows; i++) {
- if ((tmp_oid = PQgetvalue(result,i,oid_offset))==NULL) {
- continue;
- }
-
- str.len = 0;
- smart_str_appends(&str, "pgsql_oid_");
- smart_str_appends(&str, tmp_oid);
- smart_str_0(&str);
-
- if ((tmp_name = PQgetvalue(result,i,name_offset))==NULL) {
- continue;
- }
- Z_TYPE(new_oid_entry) = le_string;
- new_oid_entry.ptr = estrdup(tmp_name);
- zend_hash_update(list,str.c,str.len+1,(void *) &new_oid_entry, sizeof(list_entry), NULL);
- if (!ret && strtoul(tmp_oid, &end_ptr, 10)==oid) {
- ret = estrdup(tmp_name);
- }
- }
- PQclear(result);
- }
-
- smart_str_free(&str);
- return ret;
-}
-/* }}} */
-
-#define PHP_PG_FIELD_NAME 1
-#define PHP_PG_FIELD_SIZE 2
-#define PHP_PG_FIELD_TYPE 3
-
-/* {{{ php_pgsql_get_field_info
- */
-static void php_pgsql_get_field_info(INTERNAL_FUNCTION_PARAMETERS, int entry_type)
-{
- zval **result, **field;
- PGresult *pgsql_result;
- pgsql_result_handle *pg_result;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &result, &field)==FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(pg_result, pgsql_result_handle *, result, -1, "PostgreSQL result", le_result);
-
- pgsql_result = pg_result->result;
- convert_to_long_ex(field);
-
- if (Z_LVAL_PP(field) < 0 || Z_LVAL_PP(field) >= PQnfields(pgsql_result)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Bad field offset specified");
- RETURN_FALSE;
- }
-
- switch (entry_type) {
- case PHP_PG_FIELD_NAME:
- Z_STRVAL_P(return_value) = PQfname(pgsql_result, Z_LVAL_PP(field));
- Z_STRLEN_P(return_value) = strlen(Z_STRVAL_P(return_value));
- Z_STRVAL_P(return_value) = estrndup(Z_STRVAL_P(return_value),Z_STRLEN_P(return_value));
- Z_TYPE_P(return_value) = IS_STRING;
- break;
- case PHP_PG_FIELD_SIZE:
- Z_LVAL_P(return_value) = PQfsize(pgsql_result, Z_LVAL_PP(field));
- Z_TYPE_P(return_value) = IS_LONG;
- break;
- case PHP_PG_FIELD_TYPE:
- Z_STRVAL_P(return_value) = get_field_name(pg_result->conn, PQftype(pgsql_result, Z_LVAL_PP(field)), &EG(regular_list) TSRMLS_CC);
- Z_STRLEN_P(return_value) = strlen(Z_STRVAL_P(return_value));
- Z_TYPE_P(return_value) = IS_STRING;
- break;
- default:
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-/* {{{ proto string pg_field_name(resource result, int field_number)
- Returns the name of the field */
-PHP_FUNCTION(pg_field_name)
-{
- php_pgsql_get_field_info(INTERNAL_FUNCTION_PARAM_PASSTHRU,PHP_PG_FIELD_NAME);
-}
-/* }}} */
-
-/* {{{ proto int pg_field_size(resource result, int field_number)
- Returns the internal size of the field */
-PHP_FUNCTION(pg_field_size)
-{
- php_pgsql_get_field_info(INTERNAL_FUNCTION_PARAM_PASSTHRU,PHP_PG_FIELD_SIZE);
-}
-/* }}} */
-
-/* {{{ proto string pg_field_type(resource result, int field_number)
- Returns the type name for the given field */
-PHP_FUNCTION(pg_field_type)
-{
- php_pgsql_get_field_info(INTERNAL_FUNCTION_PARAM_PASSTHRU,PHP_PG_FIELD_TYPE);
-}
-/* }}} */
-
-/* {{{ proto int pg_field_num(resource result, string field_name)
- Returns the field number of the named field */
-PHP_FUNCTION(pg_field_num)
-{
- zval **result, **field;
- PGresult *pgsql_result;
- pgsql_result_handle *pg_result;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &result, &field)==FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(pg_result, pgsql_result_handle *, result, -1, "PostgreSQL result", le_result);
-
- pgsql_result = pg_result->result;
-
- convert_to_string_ex(field);
- Z_LVAL_P(return_value) = PQfnumber(pgsql_result, Z_STRVAL_PP(field));
- Z_TYPE_P(return_value) = IS_LONG;
-}
-/* }}} */
-
-/* {{{ proto mixed pg_fetch_result(resource result, [int row_number,] mixed field_name)
- Returns values from a result identifier */
-PHP_FUNCTION(pg_fetch_result)
-{
- zval **result, **row, **field=NULL;
- PGresult *pgsql_result;
- pgsql_result_handle *pg_result;
- int field_offset, pgsql_row;
-
- if ((ZEND_NUM_ARGS() != 3 || zend_get_parameters_ex(3, &result, &row, &field)==FAILURE) &&
- (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &result, &field)==FAILURE)) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(pg_result, pgsql_result_handle *, result, -1, "PostgreSQL result", le_result);
-
- pgsql_result = pg_result->result;
- if (ZEND_NUM_ARGS() == 2) {
- if (pg_result->row < 0)
- pg_result->row = 0;
- pgsql_row = pg_result->row;
- if (pgsql_row >= PQntuples(pgsql_result)) {
- RETURN_FALSE;
- }
- } else {
- convert_to_long_ex(row);
- pgsql_row = Z_LVAL_PP(row);
- if (pgsql_row < 0 || pgsql_row >= PQntuples(pgsql_result)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to jump to row %ld on PostgreSQL result index %ld",
- Z_LVAL_PP(row), Z_LVAL_PP(result));
- RETURN_FALSE;
- }
- }
- switch(Z_TYPE_PP(field)) {
- case IS_STRING:
- field_offset = PQfnumber(pgsql_result, Z_STRVAL_PP(field));
- break;
- default:
- convert_to_long_ex(field);
- field_offset = Z_LVAL_PP(field);
- break;
- }
- if (field_offset<0 || field_offset>=PQnfields(pgsql_result)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Bad column offset specified");
- RETURN_FALSE;
- }
-
- 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;
- }
-}
-/* }}} */
-
-/* {{{ void php_pgsql_fetch_hash */
-static void php_pgsql_fetch_hash(INTERNAL_FUNCTION_PARAMETERS, long result_type, int into_object)
-{
- zval *result, *zrow;
- PGresult *pgsql_result;
- pgsql_result_handle *pg_result;
- int i, num_fields, pgsql_row, use_row;
- long row;
- char *element, *field_name;
- uint element_len;
- zval *ctor_params = NULL;
- zend_class_entry *ce = NULL;
-
- if (into_object) {
- char *class_name;
- int class_name_len;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r|zsz", &result, &zrow, &class_name, &class_name_len, &ctor_params) == FAILURE) {
- return;
- }
- if (ZEND_NUM_ARGS() < 3) {
- ce = zend_standard_class_def;
- } else {
- ce = zend_fetch_class(class_name, class_name_len, ZEND_FETCH_CLASS_AUTO TSRMLS_CC);
- }
- if (!ce) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Could not find class '%s'", class_name);
- return;
- }
- result_type = PGSQL_ASSOC;
- } else {
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r|zl", &result, &zrow, &result_type) == FAILURE) {
- return;
- }
- }
- use_row = ZEND_NUM_ARGS() > 1 && Z_TYPE_P(zrow) != IS_NULL;
- if (use_row) {
- convert_to_long_ex(&zrow);
- row = Z_LVAL_P(zrow);
- }
-
- if (!(result_type & PGSQL_BOTH)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid result type");
- RETURN_FALSE;
- }
-
- ZEND_FETCH_RESOURCE(pg_result, pgsql_result_handle *, &result, -1, "PostgreSQL result", le_result);
-
- pgsql_result = pg_result->result;
-
- if (use_row) {
- pgsql_row = row;
- pg_result->row = pgsql_row;
- if (pgsql_row < 0 || pgsql_row >= PQntuples(pgsql_result)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to jump to row %ld on PostgreSQL result index %ld",
- row, Z_LVAL_P(result));
- RETURN_FALSE;
- }
- } else {
- /* If 2nd param is NULL, use internal row counter to access next row */
- pgsql_row = pg_result->row;
- if (pgsql_row < 0 || pgsql_row >= PQntuples(pgsql_result)) {
- RETURN_FALSE;
- }
- pg_result->row++;
- }
-
- array_init(return_value);
- for (i = 0, num_fields = PQnfields(pgsql_result); i < num_fields; i++) {
- if (PQgetisnull(pgsql_result, pgsql_row, i)) {
- if (result_type & PGSQL_NUM) {
- add_index_null(return_value, i);
- }
- if (result_type & PGSQL_ASSOC) {
- field_name = PQfname(pgsql_result, i);
- add_assoc_null(return_value, field_name);
- }
- } else {
- element = PQgetvalue(pgsql_result, pgsql_row, i);
- element_len = (element ? strlen(element) : 0);
- if (element) {
- char *data;
- int data_len;
- int should_copy=0;
-
- if (PG(magic_quotes_runtime)) {
- data = php_addslashes(element, element_len, &data_len, 0 TSRMLS_CC);
- } else {
- data = safe_estrndup(element, element_len);
- data_len = element_len;
- }
-
- if (result_type & PGSQL_NUM) {
- add_index_stringl(return_value, i, data, data_len, should_copy);
- should_copy=1;
- }
-
- if (result_type & PGSQL_ASSOC) {
- field_name = PQfname(pgsql_result, i);
- add_assoc_stringl(return_value, field_name, data, data_len, should_copy);
- }
- }
- }
- }
-
- if (into_object) {
- zval dataset = *return_value;
- zend_fcall_info fci;
- zend_fcall_info_cache fcc;
- zval *retval_ptr;
-
- object_and_properties_init(return_value, ce, NULL);
- zend_merge_properties(return_value, Z_ARRVAL(dataset), 1 TSRMLS_CC);
-
- if (ce->constructor) {
- fci.size = sizeof(fci);
- fci.function_table = &ce->function_table;
- fci.function_name = NULL;
- fci.symbol_table = NULL;
- fci.object_pp = &return_value;
- fci.retval_ptr_ptr = &retval_ptr;
- if (ctor_params && Z_TYPE_P(ctor_params) != IS_NULL) {
- if (Z_TYPE_P(ctor_params) == IS_ARRAY) {
- HashTable *ht = Z_ARRVAL_P(ctor_params);
- Bucket *p;
-
- fci.param_count = 0;
- fci.params = emalloc(sizeof(zval*) * ht->nNumOfElements);
- p = ht->pListHead;
- while (p != NULL) {
- fci.params[fci.param_count++] = (zval**)p->pData;
- p = p->pListNext;
- }
- } else {
- /* Two problems why we throw exceptions here: PHP is typeless
- * and hence passing one argument that's not an array could be
- * by mistake and the other way round is possible, too. The
- * single value is an array. Also we'd have to make that one
- * argument passed by reference.
- */
- zend_throw_exception(zend_exception_get_default(), "Parameter ctor_params must be an array", 0 TSRMLS_CC);
- return;
- }
- } else {
- fci.param_count = 0;
- fci.params = NULL;
- }
- fci.no_separation = 1;
-
- fcc.initialized = 1;
- fcc.function_handler = ce->constructor;
- fcc.calling_scope = EG(scope);
- fcc.object_pp = &return_value;
-
- if (zend_call_function(&fci, &fcc TSRMLS_CC) == FAILURE) {
- zend_throw_exception_ex(zend_exception_get_default(), 0 TSRMLS_CC, "Could not execute %s::%s()", ce->name, ce->constructor->common.function_name);
- } else {
- if (retval_ptr) {
- zval_ptr_dtor(&retval_ptr);
- }
- }
- if (fci.params) {
- efree(fci.params);
- }
- } else if (ctor_params) {
- zend_throw_exception_ex(zend_exception_get_default(), 0 TSRMLS_CC, "Class %s does not have a constructor hence you cannot use ctor_params", ce->name);
- }
- }
-}
-/* }}} */
-
-/* {{{ proto array pg_fetch_row(resource result [, int row [, int result_type]])
- Get a row as an enumerated array */
-PHP_FUNCTION(pg_fetch_row)
-{
- php_pgsql_fetch_hash(INTERNAL_FUNCTION_PARAM_PASSTHRU, PGSQL_NUM, 0);
-}
-/* }}} */
-
-/* {{{ proto array pg_fetch_assoc(resource result [, int row])
- Fetch a row as an assoc array */
-PHP_FUNCTION(pg_fetch_assoc)
-{
- /* pg_fetch_assoc() is added from PHP 4.3.0. It should raise error, when
- there is 3rd parameter */
- if (ZEND_NUM_ARGS() > 2)
- WRONG_PARAM_COUNT;
- php_pgsql_fetch_hash(INTERNAL_FUNCTION_PARAM_PASSTHRU, PGSQL_ASSOC, 0);
-}
-/* }}} */
-
-/* {{{ proto array pg_fetch_array(resource result [, int row [, int result_type]])
- Fetch a row as an array */
-PHP_FUNCTION(pg_fetch_array)
-{
- php_pgsql_fetch_hash(INTERNAL_FUNCTION_PARAM_PASSTHRU, PGSQL_BOTH, 0);
-}
-/* }}} */
-
-/* {{{ proto object pg_fetch_object(resource result [, int row [, string class_name [, NULL|array ctor_params]]])
- Fetch a row as an object */
-PHP_FUNCTION(pg_fetch_object)
-{
- /* pg_fetch_object() allowed result_type used to be. 3rd parameter
- must be allowed for compatibility */
- php_pgsql_fetch_hash(INTERNAL_FUNCTION_PARAM_PASSTHRU, PGSQL_ASSOC, 1);
-}
-/* }}} */
-
-/* {{{ proto array pg_fetch_all(resource result)
- Fetch all rows into array */
-PHP_FUNCTION(pg_fetch_all)
-{
- zval *result;
- PGresult *pgsql_result;
- pgsql_result_handle *pg_result;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r",
- &result) == FAILURE) {
- return;
- }
-
- ZEND_FETCH_RESOURCE(pg_result, pgsql_result_handle *, &result, -1, "PostgreSQL result", le_result);
-
- pgsql_result = pg_result->result;
- array_init(return_value);
- if (php_pgsql_result2array(pgsql_result, return_value TSRMLS_CC) == FAILURE) {
- zval_dtor(return_value);
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-/* {{{ proto bool pg_result_seek(resource result, int offset)
- Set internal row offset */
-PHP_FUNCTION(pg_result_seek)
-{
- zval *result;
- long row;
- pgsql_result_handle *pg_result;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rl", &result, &row) == FAILURE) {
- return;
- }
-
- ZEND_FETCH_RESOURCE(pg_result, pgsql_result_handle *, &result, -1, "PostgreSQL result", le_result);
-
- if (row < 0 || row >= PQntuples(pg_result->result)) {
- RETURN_FALSE;
- }
-
- /* seek to offset */
- pg_result->row = row;
- RETURN_TRUE;
-}
-/* }}} */
-
-
-#define PHP_PG_DATA_LENGTH 1
-#define PHP_PG_DATA_ISNULL 2
-
-/* {{{ php_pgsql_data_info
- */
-static void php_pgsql_data_info(INTERNAL_FUNCTION_PARAMETERS, int entry_type)
-{
- zval **result, **row, **field;
- PGresult *pgsql_result;
- pgsql_result_handle *pg_result;
- int field_offset, pgsql_row;
-
- if ((ZEND_NUM_ARGS() != 3 || zend_get_parameters_ex(3, &result, &row, &field)==FAILURE) &&
- (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &result, &field)==FAILURE)) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(pg_result, pgsql_result_handle *, result, -1, "PostgreSQL result", le_result);
-
- pgsql_result = pg_result->result;
- if (ZEND_NUM_ARGS() == 2) {
- if (pg_result->row < 0)
- pg_result->row = 0;
- pgsql_row = pg_result->row;
- if (pgsql_row < 0 || pgsql_row >= PQntuples(pgsql_result)) {
- RETURN_FALSE;
- }
- } else {
- convert_to_long_ex(row);
- pgsql_row = Z_LVAL_PP(row);
- if (pgsql_row < 0 || pgsql_row >= PQntuples(pgsql_result)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to jump to row %ld on PostgreSQL result index %ld",
- Z_LVAL_PP(row), Z_LVAL_PP(result));
- RETURN_FALSE;
- }
- }
-
- switch(Z_TYPE_PP(field)) {
- case IS_STRING:
- convert_to_string_ex(field);
- field_offset = PQfnumber(pgsql_result, Z_STRVAL_PP(field));
- break;
- default:
- convert_to_long_ex(field);
- field_offset = Z_LVAL_PP(field);
- break;
- }
- if (field_offset < 0 || field_offset >= PQnfields(pgsql_result)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Bad column offset specified");
- RETURN_FALSE;
- }
-
- switch (entry_type) {
- case PHP_PG_DATA_LENGTH:
- Z_LVAL_P(return_value) = PQgetlength(pgsql_result, pgsql_row, field_offset);
- break;
- case PHP_PG_DATA_ISNULL:
- Z_LVAL_P(return_value) = PQgetisnull(pgsql_result, pgsql_row, field_offset);
- break;
- }
- Z_TYPE_P(return_value) = IS_LONG;
-}
-/* }}} */
-
-/* {{{ proto int pg_field_prtlen(resource result, [int row,] mixed field_name_or_number)
- Returns the printed length */
-PHP_FUNCTION(pg_field_prtlen)
-{
- php_pgsql_data_info(INTERNAL_FUNCTION_PARAM_PASSTHRU, PHP_PG_DATA_LENGTH);
-}
-/* }}} */
-
-/* {{{ proto int pg_field_is_null(resource result, [int row,] mixed field_name_or_number)
- Test if a field is NULL */
-PHP_FUNCTION(pg_field_is_null)
-{
- php_pgsql_data_info(INTERNAL_FUNCTION_PARAM_PASSTHRU, PHP_PG_DATA_ISNULL);
-}
-/* }}} */
-
-/* {{{ proto bool pg_free_result(resource result)
- Free result memory */
-PHP_FUNCTION(pg_free_result)
-{
- zval **result;
- pgsql_result_handle *pg_result;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &result)==FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(pg_result, pgsql_result_handle *, result, -1, "PostgreSQL result", le_result);
- if (Z_LVAL_PP(result) == 0) {
- RETURN_FALSE;
- }
- zend_list_delete(Z_LVAL_PP(result));
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto string pg_last_oid(resource result)
- Returns the last object identifier */
-PHP_FUNCTION(pg_last_oid)
-{
- zval **result;
- PGresult *pgsql_result;
- pgsql_result_handle *pg_result;
-#ifdef HAVE_PQOIDVALUE
- Oid oid;
-#endif
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &result)==FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(pg_result, pgsql_result_handle *, result, -1, "PostgreSQL result", le_result);
- pgsql_result = pg_result->result;
-#ifdef HAVE_PQOIDVALUE
- oid = PQoidValue(pgsql_result);
- if (oid == InvalidOid) {
- RETURN_FALSE;
- }
- PGSQL_RETURN_OID(oid);
-#else
- Z_STRVAL_P(return_value) = (char *) PQoidStatus(pgsql_result);
- if (Z_STRVAL_P(return_value)) {
- RETURN_STRING(Z_STRVAL_P(return_value), 1);
- }
- RETURN_STRING("", 1);
-#endif
-}
-/* }}} */
-
-/* {{{ proto bool pg_trace(string filename [, string mode [, resource connection]])
- Enable tracing a PostgreSQL connection */
-PHP_FUNCTION(pg_trace)
-{
- zval **z_filename, **z_mode, **pgsql_link = NULL;
- int id = -1;
- PGconn *pgsql;
- char *mode = "w";
- FILE *fp = NULL;
- php_stream *stream;
- id = PGG(default_link);
-
- switch (ZEND_NUM_ARGS()) {
- case 1:
- if (zend_get_parameters_ex(1, &z_filename)==FAILURE) {
- RETURN_FALSE;
- }
- CHECK_DEFAULT_LINK(id);
- break;
- case 2:
- if (zend_get_parameters_ex(2, &z_filename, &z_mode)==FAILURE) {
- RETURN_FALSE;
- }
- CHECK_DEFAULT_LINK(id);
- convert_to_string_ex(z_mode);
- mode = Z_STRVAL_PP(z_mode);
- break;
- case 3:
- if (zend_get_parameters_ex(3, &z_filename, &z_mode, &pgsql_link)==FAILURE) {
- RETURN_FALSE;
- }
- convert_to_string_ex(z_mode);
- mode = Z_STRVAL_PP(z_mode);
- break;
- default:
- ZEND_WRONG_PARAM_COUNT();
- break;
- }
- if (pgsql_link == NULL && id == -1) {
- RETURN_FALSE;
- }
-
- ZEND_FETCH_RESOURCE2(pgsql, PGconn *, pgsql_link, id, "PostgreSQL link", le_link, le_plink);
- convert_to_string_ex(z_filename);
-
- stream = php_stream_open_wrapper(Z_STRVAL_PP(z_filename), mode, ENFORCE_SAFE_MODE|REPORT_ERRORS, NULL);
-
- if (!stream) {
- RETURN_FALSE;
- }
-
- if (FAILURE == php_stream_cast(stream, PHP_STREAM_AS_STDIO, (void**)fp, REPORT_ERRORS)) {
- php_stream_close(stream);
- RETURN_FALSE;
- }
- php_stream_auto_cleanup(stream);
- PQtrace(pgsql, fp);
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto bool pg_untrace([resource connection])
- Disable tracing of a PostgreSQL connection */
-PHP_FUNCTION(pg_untrace)
-{
- zval **pgsql_link = NULL;
- int id = -1;
- PGconn *pgsql;
-
- switch (ZEND_NUM_ARGS()) {
- case 0:
- id = PGG(default_link);
- CHECK_DEFAULT_LINK(id);
- break;
- case 1:
- if (zend_get_parameters_ex(1, &pgsql_link)==FAILURE) {
- RETURN_FALSE;
- }
- break;
- default:
- ZEND_WRONG_PARAM_COUNT();
- break;
- }
- if (pgsql_link == NULL && id == -1) {
- RETURN_FALSE;
- }
-
- ZEND_FETCH_RESOURCE2(pgsql, PGconn *, pgsql_link, id, "PostgreSQL link", le_link, le_plink);
- PQuntrace(pgsql);
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto int pg_lo_create([resource connection])
- Create a large object */
-PHP_FUNCTION(pg_lo_create)
-{
- zval **pgsql_link = NULL;
- PGconn *pgsql;
- Oid pgsql_oid;
- int id = -1;
-
- switch(ZEND_NUM_ARGS()) {
- case 0:
- id = PGG(default_link);
- CHECK_DEFAULT_LINK(id);
- break;
- case 1:
- if (zend_get_parameters_ex(1, &pgsql_link)==FAILURE) {
- RETURN_FALSE;
- }
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
- if (pgsql_link == NULL && id == -1) {
- RETURN_FALSE;
- }
-
- ZEND_FETCH_RESOURCE2(pgsql, PGconn *, pgsql_link, id, "PostgreSQL link", le_link, le_plink);
-
- /* NOTE: Archive modes not supported until I get some more data. Don't think anybody's
- using it anyway. I believe it's also somehow related to the 'time travel' feature of
- PostgreSQL, that's on the list of features to be removed... Create modes not supported.
- What's the use of an object that can be only written to, but not read from, and vice
- versa? Beats me... And the access type (r/w) must be specified again when opening
- the object, probably (?) overrides this. (Jouni)
- */
-
- if ((pgsql_oid = lo_creat(pgsql, INV_READ|INV_WRITE)) == InvalidOid) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to create PostgreSQL large object");
- RETURN_FALSE;
- }
- PGSQL_RETURN_OID(pgsql_oid);
-}
-/* }}} */
-
-/* {{{ proto bool pg_lo_unlink([resource connection,] string large_object_oid)
- Delete a large object */
-PHP_FUNCTION(pg_lo_unlink)
-{
- zval *pgsql_link = NULL;
- long oid_long;
- char *oid_string, *end_ptr;
- int oid_strlen;
- PGconn *pgsql;
- Oid oid;
- int id = -1;
- int argc = ZEND_NUM_ARGS();
-
- /* accept string type since Oid type is unsigned int */
- if (zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, argc TSRMLS_CC,
- "rs", &pgsql_link, &oid_string, &oid_strlen) == SUCCESS) {
- oid = (Oid)strtoul(oid_string, &end_ptr, 10);
- if ((oid_string+oid_strlen) != end_ptr) {
- /* wrong integer format */
- php_error_docref(NULL TSRMLS_CC, E_NOTICE, "Wrong OID value passed");
- RETURN_FALSE;
- }
- }
- else if (zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, argc TSRMLS_CC,
- "rl", &pgsql_link, &oid_long) == SUCCESS) {
- if (oid_long <= InvalidOid) {
- php_error_docref(NULL TSRMLS_CC, E_NOTICE, "Invalid OID specified");
- RETURN_FALSE;
- }
- oid = (Oid)oid_long;
- }
- else if (zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, argc TSRMLS_CC,
- "s", &oid_string, &oid_strlen) == SUCCESS) {
- oid = (Oid)strtoul(oid_string, &end_ptr, 10);
- if ((oid_string+oid_strlen) != end_ptr) {
- /* wrong integer format */
- php_error_docref(NULL TSRMLS_CC, E_NOTICE, "Wrong OID value passed");
- RETURN_FALSE;
- }
- id = PGG(default_link);
- CHECK_DEFAULT_LINK(id);
- }
- else if (zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, argc TSRMLS_CC,
- "l", &oid_long) == SUCCESS) {
- if (oid_long <= InvalidOid) {
- php_error_docref(NULL TSRMLS_CC, E_NOTICE, "Invalid OID is specified");
- RETURN_FALSE;
- }
- oid = (Oid)oid_long;
- id = PGG(default_link);
- CHECK_DEFAULT_LINK(id);
- }
- else {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Requires 1 or 2 arguments");
- RETURN_FALSE;
- }
- if (pgsql_link == NULL && id == -1) {
- RETURN_FALSE;
- }
-
- ZEND_FETCH_RESOURCE2(pgsql, PGconn *, &pgsql_link, id, "PostgreSQL link", le_link, le_plink);
-
- if (lo_unlink(pgsql, oid) == -1) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to delete PostgreSQL large object %u", oid);
- RETURN_FALSE;
- }
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto resource pg_lo_open([resource connection,] int large_object_oid, string mode)
- Open a large object and return fd */
-PHP_FUNCTION(pg_lo_open)
-{
- zval *pgsql_link = NULL;
- long oid_long;
- char *oid_string, *end_ptr, *mode_string;
- int oid_strlen, mode_strlen;
- PGconn *pgsql;
- Oid oid;
- int id = -1, pgsql_mode=0, pgsql_lofd;
- int create=0;
- pgLofp *pgsql_lofp;
- int argc = ZEND_NUM_ARGS();
-
- /* accept string type since Oid is unsigned int */
- if (zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, argc TSRMLS_CC,
- "rss", &pgsql_link, &oid_string, &oid_strlen, &mode_string, &mode_strlen) == SUCCESS) {
- oid = (Oid)strtoul(oid_string, &end_ptr, 10);
- if ((oid_string+oid_strlen) != end_ptr) {
- /* wrong integer format */
- php_error_docref(NULL TSRMLS_CC, E_NOTICE, "Wrong OID value passed");
- RETURN_FALSE;
- }
- }
- else if (zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, argc TSRMLS_CC,
- "rls", &pgsql_link, &oid_long, &mode_string, &mode_strlen) == SUCCESS) {
- if (oid_long <= InvalidOid) {
- php_error_docref(NULL TSRMLS_CC, E_NOTICE, "Invalid OID specified");
- RETURN_FALSE;
- }
- oid = (Oid)oid_long;
- }
- else if (zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, argc TSRMLS_CC,
- "ss", &oid_string, &oid_strlen, &mode_string, &mode_strlen) == SUCCESS) {
- oid = (Oid)strtoul(oid_string, &end_ptr, 10);
- if ((oid_string+oid_strlen) != end_ptr) {
- /* wrong integer format */
- php_error_docref(NULL TSRMLS_CC, E_NOTICE, "Wrong OID value passed");
- RETURN_FALSE;
- }
- id = PGG(default_link);
- CHECK_DEFAULT_LINK(id);
- }
- else if (zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, argc TSRMLS_CC,
- "ls", &oid_long, &mode_string, &mode_strlen) == SUCCESS) {
- if (oid_long <= InvalidOid) {
- php_error_docref(NULL TSRMLS_CC, E_NOTICE, "Invalid OID specified");
- RETURN_FALSE;
- }
- oid = (Oid)oid_long;
- id = PGG(default_link);
- CHECK_DEFAULT_LINK(id);
- }
- else {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Requires 1 or 2 arguments");
- RETURN_FALSE;
- }
- if (pgsql_link == NULL && id == -1) {
- RETURN_FALSE;
- }
-
- ZEND_FETCH_RESOURCE2(pgsql, PGconn *, &pgsql_link, id, "PostgreSQL link", le_link, le_plink);
-
- /* r/w/+ is little bit more PHP-like than INV_READ/INV_WRITE and a lot of
- faster to type. Unfortunately, doesn't behave the same way as fopen()...
- (Jouni)
- */
-
- if (strchr(mode_string, 'r') == mode_string) {
- pgsql_mode |= INV_READ;
- if (strchr(mode_string, '+') == mode_string+1) {
- pgsql_mode |= INV_WRITE;
- }
- }
- if (strchr(mode_string, 'w') == mode_string) {
- pgsql_mode |= INV_WRITE;
- create = 1;
- if (strchr(mode_string, '+') == mode_string+1) {
- pgsql_mode |= INV_READ;
- }
- }
-
- pgsql_lofp = (pgLofp *) emalloc(sizeof(pgLofp));
-
- if ((pgsql_lofd = lo_open(pgsql, oid, pgsql_mode)) == -1) {
- if (create) {
- if ((oid = lo_creat(pgsql, INV_READ|INV_WRITE)) == 0) {
- efree(pgsql_lofp);
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to create PostgreSQL large object");
- RETURN_FALSE;
- } else {
- if ((pgsql_lofd = lo_open(pgsql, oid, pgsql_mode)) == -1) {
- if (lo_unlink(pgsql, oid) == -1) {
- efree(pgsql_lofp);
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Something is really messed up! Your database is badly corrupted in a way NOT related to PHP");
- RETURN_FALSE;
- }
- efree(pgsql_lofp);
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to open PostgreSQL large object");
- RETURN_FALSE;
- } else {
- pgsql_lofp->conn = pgsql;
- pgsql_lofp->lofd = pgsql_lofd;
- Z_LVAL_P(return_value) = zend_list_insert(pgsql_lofp, le_lofp);
- Z_TYPE_P(return_value) = IS_LONG;
- }
- }
- } else {
- efree(pgsql_lofp);
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to open PostgreSQL large object");
- RETURN_FALSE;
- }
- } else {
- pgsql_lofp->conn = pgsql;
- pgsql_lofp->lofd = pgsql_lofd;
- ZEND_REGISTER_RESOURCE(return_value, pgsql_lofp, le_lofp);
- }
-}
-/* }}} */
-
-/* {{{ proto bool pg_lo_close(resource large_object)
- Close a large object */
-PHP_FUNCTION(pg_lo_close)
-{
- zval **pgsql_lofp;
- pgLofp *pgsql;
-
- switch(ZEND_NUM_ARGS()) {
- case 1:
- if (zend_get_parameters_ex(1, &pgsql_lofp)==FAILURE) {
- RETURN_FALSE;
- }
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
-
- ZEND_FETCH_RESOURCE(pgsql, pgLofp *, pgsql_lofp, -1, "PostgreSQL large object", le_lofp);
-
- if (lo_close((PGconn *)pgsql->conn, pgsql->lofd) < 0) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to close PostgreSQL large object descriptor %d", pgsql->lofd);
- RETVAL_FALSE;
- } else {
- RETVAL_TRUE;
- }
-
- zend_list_delete(Z_RESVAL_PP(pgsql_lofp));
- return;
-}
-/* }}} */
-
-#define PGSQL_LO_READ_BUF_SIZE 8192
-
-/* {{{ proto string pg_lo_read(resource large_object [, int len])
- Read a large object */
-PHP_FUNCTION(pg_lo_read)
-{
- zval **pgsql_id, **len;
- int buf_len = PGSQL_LO_READ_BUF_SIZE, nbytes;
- char *buf;
- pgLofp *pgsql;
-
- if (ZEND_NUM_ARGS() < 1 || ZEND_NUM_ARGS() > 2 ||
- zend_get_parameters_ex(ZEND_NUM_ARGS(), &pgsql_id, &len) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(pgsql, pgLofp *, pgsql_id, -1, "PostgreSQL large object", le_lofp);
-
- if (ZEND_NUM_ARGS() > 1) {
- convert_to_long_ex(len);
- buf_len = Z_LVAL_PP(len);
- }
-
- buf = (char *) safe_emalloc(sizeof(char), (buf_len+1), 0);
- if ((nbytes = lo_read((PGconn *)pgsql->conn, pgsql->lofd, buf, buf_len))<0) {
- efree(buf);
- RETURN_FALSE;
- }
-
- buf[nbytes] = '\0';
- RETURN_STRINGL(buf, nbytes, 0);
-}
-/* }}} */
-
-/* {{{ proto int pg_lo_write(resource large_object, string buf [, int len])
- Write a large object */
-PHP_FUNCTION(pg_lo_write)
-{
- zval **pgsql_id, **str, **z_len;
- int nbytes;
- int len;
- pgLofp *pgsql;
- int argc = ZEND_NUM_ARGS();
-
- if (argc < 2 || argc > 3 ||
- zend_get_parameters_ex(argc, &pgsql_id, &str, &z_len) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_string_ex(str);
-
- if (argc > 2) {
- convert_to_long_ex(z_len);
- if (Z_LVAL_PP(z_len) > Z_STRLEN_PP(str)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Cannot write more than buffer size %d. Tried to write %ld",
- Z_STRLEN_PP(str), Z_LVAL_PP(z_len));
- RETURN_FALSE;
- }
- if (Z_LVAL_PP(z_len) < 0) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Buffer size must be larger than 0, but %ld was specified", Z_LVAL_PP(z_len));
- RETURN_FALSE;
- }
- len = Z_LVAL_PP(z_len);
- }
- else {
- len = Z_STRLEN_PP(str);
- }
-
- ZEND_FETCH_RESOURCE(pgsql, pgLofp *, pgsql_id, -1, "PostgreSQL large object", le_lofp);
-
- if ((nbytes = lo_write((PGconn *)pgsql->conn, pgsql->lofd, Z_STRVAL_PP(str), len)) == -1) {
- RETURN_FALSE;
- }
-
- RETURN_LONG(nbytes);
-}
-/* }}} */
-
-/* {{{ proto int pg_lo_read_all(resource large_object)
- Read a large object and send straight to browser */
-PHP_FUNCTION(pg_lo_read_all)
-{
- zval **pgsql_id;
- int tbytes;
- volatile int nbytes;
- char buf[PGSQL_LO_READ_BUF_SIZE];
- pgLofp *pgsql;
-
- switch(ZEND_NUM_ARGS()) {
- case 1:
- if (zend_get_parameters_ex(1, &pgsql_id)==FAILURE) {
- RETURN_FALSE;
- }
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
-
- ZEND_FETCH_RESOURCE(pgsql, pgLofp *, pgsql_id, -1, "PostgreSQL large object", le_lofp);
-
- tbytes = 0;
- while ((nbytes = lo_read((PGconn *)pgsql->conn, pgsql->lofd, buf, PGSQL_LO_READ_BUF_SIZE))>0) {
- php_body_write(buf, nbytes TSRMLS_CC);
- tbytes += nbytes;
- }
- RETURN_LONG(tbytes);
-}
-/* }}} */
-
-/* {{{ proto int pg_lo_import([resource connection, ] string filename)
- Import large object direct from filesystem */
-PHP_FUNCTION(pg_lo_import)
-{
- zval *pgsql_link = NULL;
- char *file_in;
- int id = -1, name_len;
- int argc = ZEND_NUM_ARGS();
- PGconn *pgsql;
- Oid oid;
-
- if (zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, argc TSRMLS_CC,
- "rs", &pgsql_link, &file_in, &name_len) == SUCCESS) {
- ;
- }
- else if (zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, argc TSRMLS_CC,
- "s", &file_in, &name_len) == SUCCESS) {
- id = PGG(default_link);
- CHECK_DEFAULT_LINK(id);
- }
- else if (zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, argc TSRMLS_CC,
- "sr", &file_in, &name_len, &pgsql_link ) == SUCCESS) {
- php_error_docref(NULL TSRMLS_CC, E_NOTICE, "Old API is used");
- }
- else {
- WRONG_PARAM_COUNT;
- }
-
- if (PG(safe_mode) &&(!php_checkuid(file_in, NULL, CHECKUID_CHECK_FILE_AND_DIR))) {
- RETURN_FALSE;
- }
-
- if (php_check_open_basedir(file_in TSRMLS_CC)) {
- RETURN_FALSE;
- }
-
- if (pgsql_link == NULL && id == -1) {
- RETURN_FALSE;
- }
-
- ZEND_FETCH_RESOURCE2(pgsql, PGconn *, &pgsql_link, id, "PostgreSQL link", le_link, le_plink);
-
- oid = lo_import(pgsql, file_in);
-
- if (oid == InvalidOid) {
- RETURN_FALSE;
- }
- PGSQL_RETURN_OID(oid);
-}
-/* }}} */
-
-/* {{{ proto bool pg_lo_export([resource connection, ] int objoid, string filename)
- Export large object direct to filesystem */
-PHP_FUNCTION(pg_lo_export)
-{
- zval *pgsql_link = NULL;
- char *file_out, *oid_string, *end_ptr;
- int oid_strlen;
- int id = -1, name_len;
- long oid_long;
- Oid oid;
- PGconn *pgsql;
- int argc = ZEND_NUM_ARGS();
-
- /* allow string to handle large OID value correctly */
- if (zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, argc TSRMLS_CC,
- "rls", &pgsql_link, &oid_long, &file_out, &name_len) == SUCCESS) {
- if (oid_long <= InvalidOid) {
- php_error_docref(NULL TSRMLS_CC, E_NOTICE, "Invalid OID specified");
- RETURN_FALSE;
- }
- oid = (Oid)oid_long;
- }
- else if (zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, argc TSRMLS_CC,
- "rss", &pgsql_link, &oid_string, &oid_strlen, &file_out, &name_len) == SUCCESS) {
- oid = (Oid)strtoul(oid_string, &end_ptr, 10);
- if ((oid_string+oid_strlen) != end_ptr) {
- /* wrong integer format */
- php_error_docref(NULL TSRMLS_CC, E_NOTICE, "Wrong OID value passed");
- RETURN_FALSE;
- }
- }
- else if (zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, argc TSRMLS_CC,
- "ls", &oid_long, &file_out, &name_len) == SUCCESS) {
- if (oid_long <= InvalidOid) {
- php_error_docref(NULL TSRMLS_CC, E_NOTICE, "Invalid OID specified");
- RETURN_FALSE;
- }
- oid = (Oid)oid_long;
- id = PGG(default_link);
- CHECK_DEFAULT_LINK(id);
- }
- else if (zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, argc TSRMLS_CC,
- "ss", &oid_string, &oid_strlen, &file_out, &name_len) == SUCCESS) {
- oid = (Oid)strtoul(oid_string, &end_ptr, 10);
- if ((oid_string+oid_strlen) != end_ptr) {
- /* wrong integer format */
- php_error_docref(NULL TSRMLS_CC, E_NOTICE, "Wrong OID value passed");
- RETURN_FALSE;
- }
- id = PGG(default_link);
- CHECK_DEFAULT_LINK(id);
- }
- else if (zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, argc TSRMLS_CC,
- "ssr", &oid_string, &oid_strlen, &file_out, &name_len, &pgsql_link) == SUCCESS) {
- oid = (Oid)strtoul(oid_string, &end_ptr, 10);
- if ((oid_string+oid_strlen) != end_ptr) {
- /* wrong integer format */
- php_error_docref(NULL TSRMLS_CC, E_NOTICE, "Wrong OID value passed");
- RETURN_FALSE;
- }
- }
- else if (zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, argc TSRMLS_CC,
- "lsr", &oid_long, &file_out, &name_len, &pgsql_link) == SUCCESS) {
- php_error_docref(NULL TSRMLS_CC, E_NOTICE, "Old API is used");
- if (oid_long <= InvalidOid) {
- php_error_docref(NULL TSRMLS_CC, E_NOTICE, "Invalid OID specified");
- RETURN_FALSE;
- }
- oid = (Oid)oid_long;
- }
- else {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Requires 2 or 3 arguments");
- RETURN_FALSE;
- }
-
- if (PG(safe_mode) &&(!php_checkuid(file_out, NULL, CHECKUID_CHECK_FILE_AND_DIR))) {
- RETURN_FALSE;
- }
-
- if (php_check_open_basedir(file_out TSRMLS_CC)) {
- RETURN_FALSE;
- }
-
- if (pgsql_link == NULL && id == -1) {
- RETURN_FALSE;
- }
-
- ZEND_FETCH_RESOURCE2(pgsql, PGconn *, &pgsql_link, id, "PostgreSQL link", le_link, le_plink);
-
- if (lo_export(pgsql, oid, file_out)) {
- RETURN_TRUE;
- }
- RETURN_FALSE;
-}
-/* }}} */
-
-/* {{{ proto bool pg_lo_seek(resource large_object, int offset [, int whence])
- Seeks position of large object */
-PHP_FUNCTION(pg_lo_seek)
-{
- zval *pgsql_id = NULL;
- long offset = 0, whence = SEEK_CUR;
- pgLofp *pgsql;
- int argc = ZEND_NUM_ARGS();
-
- if (zend_parse_parameters(argc TSRMLS_CC, "rl|l", &pgsql_id, &offset, &whence) == FAILURE) {
- return;
- }
- if (whence != SEEK_SET && whence != SEEK_CUR && whence != SEEK_END) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid whence parameter");
- return;
- }
-
- ZEND_FETCH_RESOURCE(pgsql, pgLofp *, &pgsql_id, -1, "PostgreSQL large object", le_lofp);
-
- if (lo_lseek((PGconn *)pgsql->conn, pgsql->lofd, offset, whence) > -1) {
- RETURN_TRUE;
- } else {
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-/* {{{ proto int pg_lo_tell(resource large_object)
- Returns current position of large object */
-PHP_FUNCTION(pg_lo_tell)
-{
- zval *pgsql_id = NULL;
- int offset = 0;
- pgLofp *pgsql;
- int argc = ZEND_NUM_ARGS();
-
- if (zend_parse_parameters(argc TSRMLS_CC, "r", &pgsql_id) == FAILURE) {
- return;
- }
-
- ZEND_FETCH_RESOURCE(pgsql, pgLofp *, &pgsql_id, -1, "PostgreSQL large object", le_lofp);
-
- offset = lo_tell((PGconn *)pgsql->conn, pgsql->lofd);
- RETURN_LONG(offset);
-}
-/* }}} */
-
-#ifdef HAVE_PQCLIENTENCODING
-/* {{{ proto int pg_set_client_encoding([resource connection,] string encoding)
- Set client encoding */
-PHP_FUNCTION(pg_set_client_encoding)
-{
- zval **encoding, **pgsql_link = NULL;
- int id = -1;
- PGconn *pgsql;
-
- switch(ZEND_NUM_ARGS()) {
- case 1:
- if (zend_get_parameters_ex(1, &encoding)==FAILURE) {
- RETURN_FALSE;
- }
- id = PGG(default_link);
- CHECK_DEFAULT_LINK(id);
- break;
- case 2:
- if (zend_get_parameters_ex(2, &pgsql_link, &encoding)==FAILURE) {
- RETURN_FALSE;
- }
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
- if (pgsql_link == NULL && id == -1) {
- RETURN_FALSE;
- }
-
- ZEND_FETCH_RESOURCE2(pgsql, PGconn *, pgsql_link, id, "PostgreSQL link", le_link, le_plink);
-
- convert_to_string_ex(encoding);
- Z_LVAL_P(return_value) = PQsetClientEncoding(pgsql, Z_STRVAL_PP(encoding));
- Z_TYPE_P(return_value) = IS_LONG;
-
-}
-/* }}} */
-
-/* {{{ proto string pg_client_encoding([resource connection])
- Get the current client encoding */
-PHP_FUNCTION(pg_client_encoding)
-{
- zval **pgsql_link = NULL;
- int id = -1;
- PGconn *pgsql;
-
- switch(ZEND_NUM_ARGS()) {
- case 0:
- id = PGG(default_link);
- CHECK_DEFAULT_LINK(id);
- break;
- case 1:
- if (zend_get_parameters_ex(1, &pgsql_link)==FAILURE) {
- RETURN_FALSE;
- }
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
- if (pgsql_link == NULL && id == -1) {
- RETURN_FALSE;
- }
-
- ZEND_FETCH_RESOURCE2(pgsql, PGconn *, pgsql_link, id, "PostgreSQL link", le_link, le_plink);
-
- /* Just do the same as found in PostgreSQL sources... */
-
-#ifndef HAVE_PGSQL_WITH_MULTIBYTE_SUPPORT
-#define pg_encoding_to_char(x) "SQL_ASCII"
-#endif
-
- Z_STRVAL_P(return_value)
- = (char *) pg_encoding_to_char(PQclientEncoding(pgsql));
- Z_STRLEN_P(return_value) = strlen(Z_STRVAL_P(return_value));
- Z_STRVAL_P(return_value) = (char *) estrdup(Z_STRVAL_P(return_value));
- Z_TYPE_P(return_value) = IS_STRING;
-}
-/* }}} */
-#endif
-
-
-#define COPYBUFSIZ 8192
-
-/* {{{ proto bool pg_end_copy([resource connection])
- Sync with backend. Completes the Copy command */
-PHP_FUNCTION(pg_end_copy)
-{
- zval **pgsql_link = NULL;
- int id = -1;
- PGconn *pgsql;
- int result = 0;
-
- switch(ZEND_NUM_ARGS()) {
- case 0:
- id = PGG(default_link);
- CHECK_DEFAULT_LINK(id);
- break;
- case 1:
- if (zend_get_parameters_ex(1, &pgsql_link)==FAILURE) {
- RETURN_FALSE;
- }
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
- if (pgsql_link == NULL && id == -1) {
- RETURN_FALSE;
- }
-
- ZEND_FETCH_RESOURCE2(pgsql, PGconn *, pgsql_link, id, "PostgreSQL link", le_link, le_plink);
-
- result = PQendcopy(pgsql);
-
- if (result!=0) {
- PHP_PQ_ERROR("Query failed: %s", pgsql);
- RETURN_FALSE;
- }
- RETURN_TRUE;
-}
-/* }}} */
-
-
-/* {{{ proto bool pg_put_line([resource connection,] string query)
- Send null-terminated string to backend server*/
-PHP_FUNCTION(pg_put_line)
-{
- zval **query, **pgsql_link = NULL;
- int id = -1;
- PGconn *pgsql;
- int result = 0;
-
- switch(ZEND_NUM_ARGS()) {
- case 1:
- if (zend_get_parameters_ex(1, &query)==FAILURE) {
- RETURN_FALSE;
- }
- id = PGG(default_link);
- CHECK_DEFAULT_LINK(id);
- break;
- case 2:
- if (zend_get_parameters_ex(2, &pgsql_link, &query)==FAILURE) {
- RETURN_FALSE;
- }
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
- if (pgsql_link == NULL && id == -1) {
- RETURN_FALSE;
- }
-
- ZEND_FETCH_RESOURCE2(pgsql, PGconn *, pgsql_link, id, "PostgreSQL link", le_link, le_plink);
-
- convert_to_string_ex(query);
- result = PQputline(pgsql, Z_STRVAL_PP(query));
-
- if (result==EOF) {
- PHP_PQ_ERROR("Query failed: %s", pgsql);
- RETURN_FALSE;
- }
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto array pg_copy_to(resource connection, string table_name [, string delimiter [, string null_as]])
- Copy table to array */
-PHP_FUNCTION(pg_copy_to)
-{
- zval *pgsql_link;
- char *table_name, *pg_delim = NULL, *pg_null_as = NULL;
- int table_name_len, pg_delim_len, pg_null_as_len;
- char *query;
- char *query_template = "COPY \"\" TO STDOUT DELIMITERS ':' WITH NULL AS ''";
- int id = -1;
- PGconn *pgsql;
- PGresult *pgsql_result;
- ExecStatusType status;
- int copydone = 0;
- char copybuf[COPYBUFSIZ];
- char *csv = (char *)NULL;
- int ret;
- int argc = ZEND_NUM_ARGS();
-
- if (zend_parse_parameters(argc TSRMLS_CC, "rs|ss",
- &pgsql_link, &table_name, &table_name_len,
- &pg_delim, &pg_delim_len, &pg_null_as, &pg_null_as_len) == FAILURE) {
- return;
- }
- if (!pg_delim) {
- pg_delim = "\t";
- }
- if (!pg_null_as) {
- pg_null_as = safe_estrdup("\\\\N");
- }
-
- ZEND_FETCH_RESOURCE2(pgsql, PGconn *, &pgsql_link, id, "PostgreSQL link", le_link, le_plink);
-
- query = (char *)emalloc(strlen(query_template) + strlen(table_name) + strlen(pg_null_as) + 1);
- sprintf(query, "COPY \"%s\" TO STDOUT DELIMITERS '%c' WITH NULL AS '%s'",
- table_name, *pg_delim, pg_null_as);
-
- while ((pgsql_result = PQgetResult(pgsql))) {
- PQclear(pgsql_result);
- }
- pgsql_result = PQexec(pgsql, query);
- efree(pg_null_as);
- efree(query);
-
- if (pgsql_result) {
- status = PQresultStatus(pgsql_result);
- } else {
- status = (ExecStatusType) PQstatus(pgsql);
- }
-
- switch (status) {
- case PGRES_COPY_OUT:
- if (pgsql_result) {
- PQclear(pgsql_result);
- array_init(return_value);
- while (!copydone)
- {
- if ((ret = PQgetline(pgsql, copybuf, COPYBUFSIZ))) {
- PHP_PQ_ERROR("getline failed: %s", pgsql);
- RETURN_FALSE;
- }
-
- if (copybuf[0] == '\\' &&
- copybuf[1] == '.' &&
- copybuf[2] == '\0')
- {
- copydone = 1;
- }
- else
- {
- if (csv == (char *)NULL) {
- csv = estrdup(copybuf);
- } else {
- csv = (char *)erealloc(csv, strlen(csv) + sizeof(char)*(COPYBUFSIZ+1));
- strcat(csv, copybuf);
- }
-
- switch (ret)
- {
- case EOF:
- copydone = 1;
- case 0:
- add_next_index_string(return_value, csv, 1);
- efree(csv);
- csv = (char *)NULL;
- break;
- case 1:
- break;
- }
- }
- }
- if (PQendcopy(pgsql)) {
- PHP_PQ_ERROR("endcopy failed: %s", pgsql);
- RETURN_FALSE;
- }
- while ((pgsql_result = PQgetResult(pgsql))) {
- PQclear(pgsql_result);
- }
- } else {
- PQclear(pgsql_result);
- RETURN_FALSE;
- }
- break;
- default:
- PQclear(pgsql_result);
- PHP_PQ_ERROR("Copy command failed: %s", pgsql);
- RETURN_FALSE;
- break;
- }
-}
-/* }}} */
-
-/* {{{ proto bool pg_copy_from(resource connection, string table_name , array rows [, string delimiter [, string null_as]])
- Copy table from array */
-PHP_FUNCTION(pg_copy_from)
-{
- zval *pgsql_link = NULL, *pg_rows;
- zval **tmp;
- char *table_name, *pg_delim = NULL, *pg_null_as = NULL;
- int table_name_len, pg_delim_len, pg_null_as_len;
- char *query;
- char *query_template = "COPY \"\" FROM STDIN DELIMITERS ':' WITH NULL AS ''";
- HashPosition pos;
- int id = -1;
- PGconn *pgsql;
- PGresult *pgsql_result;
- ExecStatusType status;
- int argc = ZEND_NUM_ARGS();
-
- if (zend_parse_parameters(argc TSRMLS_CC, "rs/a|ss",
- &pgsql_link, &table_name, &table_name_len, &pg_rows,
- &pg_delim, &pg_delim_len, &pg_null_as, &pg_null_as_len) == FAILURE) {
- return;
- }
- if (!pg_delim) {
- pg_delim = "\t";
- }
- if (!pg_null_as) {
- pg_null_as = safe_estrdup("\\\\N");
- }
-
- ZEND_FETCH_RESOURCE2(pgsql, PGconn *, &pgsql_link, id, "PostgreSQL link", le_link, le_plink);
-
- query = (char *)emalloc(strlen(query_template) + strlen(table_name) + strlen(pg_null_as) + 1);
- sprintf(query, "COPY \"%s\" FROM STDIN DELIMITERS '%c' WITH NULL AS '%s'",
- table_name, *pg_delim, pg_null_as);
- while ((pgsql_result = PQgetResult(pgsql))) {
- PQclear(pgsql_result);
- }
- pgsql_result = PQexec(pgsql, query);
-
- efree(pg_null_as);
- efree(query);
-
- if (pgsql_result) {
- status = PQresultStatus(pgsql_result);
- } else {
- status = (ExecStatusType) PQstatus(pgsql);
- }
-
- switch (status) {
- case PGRES_COPY_IN:
- if (pgsql_result) {
- PQclear(pgsql_result);
- zend_hash_internal_pointer_reset_ex(Z_ARRVAL_P(pg_rows), &pos);
- while (zend_hash_get_current_data_ex(Z_ARRVAL_P(pg_rows), (void **) &tmp, &pos) == SUCCESS) {
- convert_to_string_ex(tmp);
- query = (char *)emalloc(Z_STRLEN_PP(tmp) +2);
- strcpy(query, Z_STRVAL_PP(tmp));
- if(*(query+Z_STRLEN_PP(tmp)-1) != '\n')
- strcat(query, "\n");
- if (PQputline(pgsql, query)) {
- efree(query);
- PHP_PQ_ERROR("copy failed: %s", pgsql);
- RETURN_FALSE;
- }
- efree(query);
- zend_hash_move_forward_ex(Z_ARRVAL_P(pg_rows), &pos);
- }
- if (PQputline(pgsql, "\\.\n") == EOF) {
- PHP_PQ_ERROR("putline failed: %s", pgsql);
- RETURN_FALSE;
- }
- if (PQendcopy(pgsql)) {
- PHP_PQ_ERROR("endcopy failed: %s", pgsql);
- RETURN_FALSE;
- }
- while ((pgsql_result = PQgetResult(pgsql))) {
- PQclear(pgsql_result);
- }
- } else {
- PQclear(pgsql_result);
- RETURN_FALSE;
- }
- RETURN_TRUE;
- break;
- default:
- PQclear(pgsql_result);
- PHP_PQ_ERROR("Copy command failed: %s", pgsql);
- RETURN_FALSE;
- break;
- }
-}
-/* }}} */
-
-#ifdef HAVE_PQESCAPE
-/* {{{ proto string pg_escape_string(string data)
- Escape string for text/char type */
-PHP_FUNCTION(pg_escape_string)
-{
- char *from = NULL, *to = NULL;
- int to_len;
- int from_len;
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s",
- &from, &from_len) == FAILURE) {
- return;
- }
-
- to = (char *)safe_emalloc(from_len, 2, 1);
- to_len = (int)PQescapeString(to, from, from_len);
- RETURN_STRINGL(to, to_len, 0);
-}
-/* }}} */
-
-/* {{{ proto string pg_escape_bytea(string data)
- Escape binary for bytea type */
-PHP_FUNCTION(pg_escape_bytea)
-{
- char *from = NULL, *to = NULL;
- size_t to_len;
- int from_len;
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s",
- &from, &from_len) == FAILURE) {
- return;
- }
-
- to = (char *)PQescapeBytea((unsigned char*)from, from_len, &to_len);
- RETVAL_STRINGL(to, to_len-1, 1); /* to_len includes addtional '\0' */
- free(to);
-}
-/* }}} */
-
-/* PQunescapeBytea() from PostgreSQL 7.3 to provide bytea unescape feature to 7.2 users.
- Renamed to php_pgsql_unescape_bytea() */
-/*
- * PQunescapeBytea - converts the null terminated string representation
- * of a bytea, strtext, into binary, filling a buffer. It returns a
- * pointer to the buffer which is NULL on error, and the size of the
- * buffer in retbuflen. The pointer may subsequently be used as an
- * argument to the function free(3). It is the reverse of PQescapeBytea.
- *
- * The following transformations are reversed:
- * '\0' == ASCII 0 == \000
- * '\'' == ASCII 39 == \'
- * '\\' == ASCII 92 == \\
- *
- * States:
- * 0 normal 0->1->2->3->4
- * 1 \ 1->5
- * 2 \0 1->6
- * 3 \00
- * 4 \000
- * 5 \'
- * 6 \\
- */
-static unsigned char * php_pgsql_unescape_bytea(unsigned char *strtext, size_t *retbuflen)
-{
- size_t buflen;
- unsigned char *buffer,
- *sp,
- *bp;
- unsigned int state = 0;
-
- if (strtext == NULL)
- return NULL;
- buflen = strlen(strtext); /* will shrink, also we discover if
- * strtext */
- buffer = (unsigned char *) emalloc(buflen); /* isn't NULL terminated */
- for (bp = buffer, sp = strtext; *sp != '\0'; bp++, sp++)
- {
- switch (state)
- {
- case 0:
- if (*sp == '\\')
- state = 1;
- *bp = *sp;
- break;
- case 1:
- if (*sp == '\'') /* state=5 */
- { /* replace \' with 39 */
- bp--;
- *bp = '\'';
- buflen--;
- state = 0;
- }
- else if (*sp == '\\') /* state=6 */
- { /* replace \\ with 92 */
- bp--;
- *bp = '\\';
- buflen--;
- state = 0;
- }
- else
- {
- if (isdigit(*sp))
- state = 2;
- else
- state = 0;
- *bp = *sp;
- }
- break;
- case 2:
- if (isdigit(*sp))
- state = 3;
- else
- state = 0;
- *bp = *sp;
- break;
- case 3:
- if (isdigit(*sp)) /* state=4 */
- {
- unsigned char *start, *end, buf[4]; /* 000 + '\0' */
-
- bp -= 3;
- memcpy(buf, sp-2, 3);
- buf[3] = '\0';
- start = buf;
- *bp = (unsigned char)strtoul(start, (char **)&end, 8);
- buflen -= 3;
- state = 0;
- }
- else
- {
- *bp = *sp;
- state = 0;
- }
- break;
- }
- }
- buffer = erealloc(buffer, buflen+1);
- buffer[buflen] = '\0';
-
- *retbuflen = buflen;
- return buffer;
-}
-
-/* {{{ proto string pg_unescape_bytea(string data)
- Unescape binary for bytea type */
-PHP_FUNCTION(pg_unescape_bytea)
-{
- char *from = NULL, *to = NULL;
- size_t to_len;
- int from_len;
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s",
- &from, &from_len) == FAILURE) {
- return;
- }
-
- to = (char *)php_pgsql_unescape_bytea((unsigned char*)from, &to_len);
- if (!to) {
- RETURN_FALSE;
- }
- RETVAL_STRINGL(to, to_len, 0);
-}
-/* }}} */
-#endif
-
-/* {{{ proto string pg_result_error(resource result)
- Get error message associated with result */
-PHP_FUNCTION(pg_result_error)
-{
- zval *result;
- PGresult *pgsql_result;
- pgsql_result_handle *pg_result;
- char *err = NULL;
-
- if (zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, ZEND_NUM_ARGS() TSRMLS_CC, "r",
- &result) == FAILURE) {
- RETURN_FALSE;
- }
-
- ZEND_FETCH_RESOURCE(pg_result, pgsql_result_handle *, &result, -1, "PostgreSQL result", le_result);
-
- pgsql_result = pg_result->result;
- if (!pgsql_result) {
- RETURN_FALSE;
- }
- err = (char *)PQresultErrorMessage(pgsql_result);
- RETURN_STRING(err,1);
-}
-/* }}} */
-
-/* {{{ proto int pg_connection_status(resource connnection)
- Get connection status */
-PHP_FUNCTION(pg_connection_status)
-{
- zval *pgsql_link = NULL;
- int id = -1;
- PGconn *pgsql;
-
- if (zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, ZEND_NUM_ARGS() TSRMLS_CC, "r",
- &pgsql_link) == FAILURE) {
- RETURN_FALSE;
- }
-
- ZEND_FETCH_RESOURCE2(pgsql, PGconn *, &pgsql_link, id, "PostgreSQL link", le_link, le_plink);
-
- RETURN_LONG(PQstatus(pgsql));
-}
-
-/* }}} */
-
-/* {{{ proto bool pg_connection_reset(resource connection)
- Reset connection (reconnect) */
-PHP_FUNCTION(pg_connection_reset)
-{
- zval *pgsql_link;
- int id = -1;
- PGconn *pgsql;
-
- if (zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, ZEND_NUM_ARGS() TSRMLS_CC, "r",
- &pgsql_link) == FAILURE) {
- RETURN_FALSE;
- }
-
- ZEND_FETCH_RESOURCE2(pgsql, PGconn *, &pgsql_link, id, "PostgreSQL link", le_link, le_plink);
-
- PQreset(pgsql);
- if (PQstatus(pgsql) == CONNECTION_BAD) {
- RETURN_FALSE;
- }
- RETURN_TRUE;
-}
-
-/* }}} */
-
-#define PHP_PG_ASYNC_IS_BUSY 1
-#define PHP_PG_ASYNC_REQUEST_CANCEL 2
-
-/* {{{ php_pgsql_flush_query
- */
-static int php_pgsql_flush_query(PGconn *pgsql TSRMLS_DC)
-{
- PGresult *res;
- int leftover = 0;
-
- if (PQ_SETNONBLOCKING(pgsql, 1)) {
- php_error_docref(NULL TSRMLS_CC, E_NOTICE,"Cannot set connection to nonblocking mode");
- return -1;
- }
- while ((res = PQgetResult(pgsql))) {
- PQclear(res);
- leftover++;
- }
- PQ_SETNONBLOCKING(pgsql, 0);
- return leftover;
-}
-/* }}} */
-
-/* {{{ php_pgsql_do_async
- */
-static void php_pgsql_do_async(INTERNAL_FUNCTION_PARAMETERS, int entry_type)
-{
- zval *pgsql_link;
- int id = -1;
- PGconn *pgsql;
- PGresult *pgsql_result;
-
- if (zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, ZEND_NUM_ARGS() TSRMLS_CC, "r",
- &pgsql_link) == FAILURE) {
- RETURN_FALSE;
- }
-
- ZEND_FETCH_RESOURCE2(pgsql, PGconn *, &pgsql_link, id, "PostgreSQL link", le_link, le_plink);
-
- if (PQ_SETNONBLOCKING(pgsql, 1)) {
- php_error_docref(NULL TSRMLS_CC, E_NOTICE, "Cannot set connection to nonblocking mode");
- RETURN_FALSE;
- }
- switch(entry_type) {
- case PHP_PG_ASYNC_IS_BUSY:
- PQconsumeInput(pgsql);
- Z_LVAL_P(return_value) = PQisBusy(pgsql);
- Z_TYPE_P(return_value) = IS_LONG;
- break;
- case PHP_PG_ASYNC_REQUEST_CANCEL:
- Z_LVAL_P(return_value) = PQrequestCancel(pgsql);
- Z_TYPE_P(return_value) = IS_LONG;
- while ((pgsql_result = PQgetResult(pgsql))) {
- PQclear(pgsql_result);
- }
- break;
- default:
- php_error_docref(NULL TSRMLS_CC, E_ERROR, "PostgreSQL module error, please report this error");
- break;
- }
- if (PQ_SETNONBLOCKING(pgsql, 0)) {
- php_error_docref(NULL TSRMLS_CC, E_NOTICE, "Cannot set connection to blocking mode");
- }
- convert_to_boolean_ex(&return_value);
-}
-/* }}} */
-
-/* {{{ proto bool pg_cancel_query(resource connection)
- Cancel request */
-PHP_FUNCTION(pg_cancel_query)
-{
- php_pgsql_do_async(INTERNAL_FUNCTION_PARAM_PASSTHRU, PHP_PG_ASYNC_REQUEST_CANCEL);
-}
-/* }}} */
-
-/* {{{ proto bool pg_connection_busy(resource connection)
- Get connection is busy or not */
-PHP_FUNCTION(pg_connection_busy)
-{
- php_pgsql_do_async(INTERNAL_FUNCTION_PARAM_PASSTHRU, PHP_PG_ASYNC_IS_BUSY);
-}
-/* }}} */
-
-/* {{{ proto bool pg_send_query(resource connection, string qeury)
- Send asynchronous query */
-PHP_FUNCTION(pg_send_query)
-{
- zval *pgsql_link;
- char *query;
- int len;
- int id = -1;
- PGconn *pgsql;
- PGresult *res;
- int leftover = 0;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rs",
- &pgsql_link, &query, &len) == FAILURE) {
- return;
- }
-
- ZEND_FETCH_RESOURCE2(pgsql, PGconn *, &pgsql_link, id, "PostgreSQL link", le_link, le_plink);
-
- if (PQ_SETNONBLOCKING(pgsql, 1)) {
- php_error_docref(NULL TSRMLS_CC, E_NOTICE, "Cannot set connection to nonblocking mode");
- RETURN_FALSE;
- }
- while ((res = PQgetResult(pgsql))) {
- PQclear(res);
- leftover = 1;
- }
- if (leftover) {
- php_error_docref(NULL TSRMLS_CC, E_NOTICE, "There are results on this connection. Call pg_get_result() until it returns FALSE");
- }
- if (!PQsendQuery(pgsql, query)) {
- if ((PGG(auto_reset_persistent) & 2) && PQstatus(pgsql) != CONNECTION_OK) {
- PQreset(pgsql);
- }
- if (!PQsendQuery(pgsql, query)) {
- RETURN_FALSE;
- }
- }
- if (PQ_SETNONBLOCKING(pgsql, 0)) {
- php_error_docref(NULL TSRMLS_CC, E_NOTICE, "Cannot set connection to blocking mode");
- }
- RETURN_TRUE;
-}
-/* }}} */
-
-
-/* {{{ proto resource pg_get_result(resource connection)
- Get asynchronous query result */
-PHP_FUNCTION(pg_get_result)
-{
- zval *pgsql_link;
- int id = -1;
- PGconn *pgsql;
- PGresult *pgsql_result;
- pgsql_result_handle *pg_result;
-
- if (zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, ZEND_NUM_ARGS() TSRMLS_CC, "r",
- &pgsql_link) == FAILURE) {
- RETURN_FALSE;
- }
-
- ZEND_FETCH_RESOURCE2(pgsql, PGconn *, &pgsql_link, id, "PostgreSQL link", le_link, le_plink);
-
- pgsql_result = PQgetResult(pgsql);
- if (!pgsql_result) {
- /* no result */
- RETURN_FALSE;
- }
- pg_result = (pgsql_result_handle *) emalloc(sizeof(pgsql_result_handle));
- pg_result->conn = pgsql;
- pg_result->result = pgsql_result;
- pg_result->row = 0;
- ZEND_REGISTER_RESOURCE(return_value, pg_result, le_result);
-}
-/* }}} */
-
-/* {{{ proto mixed pg_result_status(resource result[, long result_type])
- Get status of query result */
-PHP_FUNCTION(pg_result_status)
-{
- zval *result;
- long result_type = PGSQL_STATUS_LONG;
- ExecStatusType status;
- PGresult *pgsql_result;
- pgsql_result_handle *pg_result;
-
- if (zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, ZEND_NUM_ARGS() TSRMLS_CC, "r|l",
- &result, &result_type) == FAILURE) {
- RETURN_FALSE;
- }
-
- ZEND_FETCH_RESOURCE(pg_result, pgsql_result_handle *, &result, -1, "PostgreSQL result", le_result);
-
- pgsql_result = pg_result->result;
- if (result_type == PGSQL_STATUS_LONG) {
- status = PQresultStatus(pgsql_result);
- RETURN_LONG((int)status);
- }
- else if (result_type == PGSQL_STATUS_STRING) {
- RETURN_STRING(PQcmdStatus(pgsql_result), 1);
- }
- else {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Optional 2nd parameter should be PGSQL_STATUS_LONG or PGSQL_STATUS_STRING");
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-
-/* {{{ proto array pg_get_notify([resource connection[, result_type]])
- Get asynchronous notification */
-PHP_FUNCTION(pg_get_notify)
-{
- zval *pgsql_link;
- int id = -1;
- long result_type = PGSQL_ASSOC;
- PGconn *pgsql;
- PGnotify *pgsql_notify;
-
- if (zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, ZEND_NUM_ARGS() TSRMLS_CC, "r|l",
- &pgsql_link, &result_type) == FAILURE) {
- RETURN_FALSE;
- }
-
- ZEND_FETCH_RESOURCE2(pgsql, PGconn *, &pgsql_link, id, "PostgreSQL link", le_link, le_plink);
-
- PQconsumeInput(pgsql);
- pgsql_notify = PQnotifies(pgsql);
- if (!pgsql_notify) {
- /* no notify message */
- RETURN_FALSE;
- }
- array_init(return_value);
- if (result_type & (PGSQL_NUM|PGSQL_BOTH)) {
- add_index_string(return_value, 0, pgsql_notify->relname, 1);
- add_index_long(return_value, 1, pgsql_notify->be_pid);
- }
- if (result_type & (PGSQL_ASSOC|PGSQL_BOTH)) {
- add_assoc_string(return_value, "message", pgsql_notify->relname, 1);
- add_assoc_long(return_value, "pid", pgsql_notify->be_pid);
- }
-}
-/* }}} */
-
-/* {{{ proto int pg_get_pid([resource connection)
- Get backend(server) pid */
-PHP_FUNCTION(pg_get_pid)
-{
- zval *pgsql_link;
- int id = -1;
- PGconn *pgsql;
-
- if (zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, ZEND_NUM_ARGS() TSRMLS_CC, "r",
- &pgsql_link) == FAILURE) {
- RETURN_FALSE;
- }
-
- ZEND_FETCH_RESOURCE2(pgsql, PGconn *, &pgsql_link, id, "PostgreSQL link", le_link, le_plink);
-
- RETURN_LONG(PQbackendPID(pgsql));
-}
-/* }}} */
-
-/* {{{ php_pgsql_meta_data
- * TODO: Add meta_data cache for better performance
- */
-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;
- smart_str querystr = {0};
- int new_len;
- int i, num_rows;
- zval *elem;
-
- 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 "
- "WHERE a.attnum > 0 AND a.attrelid = c.oid AND c.relname = '");
-
- tmp_name = php_addslashes((char *)table_name, strlen(table_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);
-
- 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);
- smart_str_free(&querystr);
- PQclear(pg_result);
- return FAILURE;
- }
- smart_str_free(&querystr);
-
- for (i = 0; i < num_rows; i++) {
- char *name;
- MAKE_STD_ZVAL(elem);
- array_init(elem);
- add_assoc_long(elem, "num", atoi(PQgetvalue(pg_result,i,1)));
- add_assoc_string(elem, "type", PQgetvalue(pg_result,i,2), 1);
- add_assoc_long(elem, "len", atoi(PQgetvalue(pg_result,i,3)));
- if (!strcmp(PQgetvalue(pg_result,i,4), "t")) {
- add_assoc_bool(elem, "not null", 1);
- }
- else {
- add_assoc_bool(elem, "not null", 0);
- }
- if (!strcmp(PQgetvalue(pg_result,i,5), "t")) {
- add_assoc_bool(elem, "has default", 1);
- }
- else {
- add_assoc_bool(elem, "has default", 0);
- }
- add_assoc_long(elem, "array dims", atoi(PQgetvalue(pg_result,i,6)));
- name = PQgetvalue(pg_result,i,0);
- add_assoc_zval(meta, name, elem);
- }
- PQclear(pg_result);
-
- return SUCCESS;
-}
-
-/* }}} */
-
-
-/* {{{ proto array pg_meta_data(resource db, string table)
- Get meta_data */
-PHP_FUNCTION(pg_meta_data)
-{
- zval *pgsql_link;
- char *table_name;
- uint table_name_len;
- PGconn *pgsql;
- int id = -1;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rs",
- &pgsql_link, &table_name, &table_name_len) == FAILURE) {
- return;
- }
-
- ZEND_FETCH_RESOURCE2(pgsql, PGconn *, &pgsql_link, id, "PostgreSQL link", le_link, le_plink);
-
- array_init(return_value);
- if (php_pgsql_meta_data(pgsql, table_name, return_value TSRMLS_CC) == FAILURE) {
- zval_dtor(return_value); /* destroy array */
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-/* {{{ php_pgsql_get_data_type
- */
-static php_pgsql_data_type php_pgsql_get_data_type(const char *type_name, size_t len)
-{
- /* This is stupid way to do. I'll fix it when I decied how to support
- user defined types. (Yasuo) */
-
- /* boolean */
- if (!strcmp(type_name, "bool")|| !strcmp(type_name, "boolean"))
- return PG_BOOL;
- /* object id */
- if (!strcmp(type_name, "oid"))
- return PG_OID;
- /* integer */
- if (!strcmp(type_name, "int2") || !strcmp(type_name, "smallint"))
- return PG_INT2;
- if (!strcmp(type_name, "int4") || !strcmp(type_name, "integer"))
- return PG_INT4;
- if (!strcmp(type_name, "int8") || !strcmp(type_name, "bigint"))
- return PG_INT8;
- /* real and other */
- if (!strcmp(type_name, "float4") || !strcmp(type_name, "real"))
- return PG_FLOAT4;
- if (!strcmp(type_name, "float8") || !strcmp(type_name, "double precision"))
- return PG_FLOAT8;
- if (!strcmp(type_name, "numeric"))
- return PG_NUMERIC;
- if (!strcmp(type_name, "money"))
- return PG_MONEY;
- /* character */
- if (!strcmp(type_name, "text"))
- return PG_TEXT;
- if (!strcmp(type_name, "bpchar") || !strcmp(type_name, "character"))
- return PG_CHAR;
- if (!strcmp(type_name, "varchar") || !strcmp(type_name, "character varying"))
- return PG_VARCHAR;
- /* time and interval */
- if (!strcmp(type_name, "abstime"))
- return PG_UNIX_TIME;
- if (!strcmp(type_name, "reltime"))
- return PG_UNIX_TIME_INTERVAL;
- if (!strcmp(type_name, "tinterval"))
- return PG_UNIX_TIME_INTERVAL;
- if (!strcmp(type_name, "date"))
- return PG_DATE;
- if (!strcmp(type_name, "time"))
- return PG_TIME;
- if (!strcmp(type_name, "time with time zone") || !strcmp(type_name, "timetz"))
- return PG_TIME_WITH_TIMEZONE;
- if (!strcmp(type_name, "timestamp without time zone") || !strcmp(type_name, "timestamp"))
- return PG_TIMESTAMP;
- if (!strcmp(type_name, "timestamp with time zone") || !strcmp(type_name, "timestamptz"))
- return PG_TIMESTAMP_WITH_TIMEZONE;
- if (!strcmp(type_name, "interval"))
- return PG_INTERVAL;
- /* binary */
- if (!strcmp(type_name, "bytea"))
- return PG_BYTEA;
- /* network */
- if (!strcmp(type_name, "cidr"))
- return PG_CIDR;
- if (!strcmp(type_name, "inet"))
- return PG_INET;
- if (!strcmp(type_name, "macaddr"))
- return PG_MACADDR;
- /* bit */
- if (!strcmp(type_name, "bit"))
- return PG_BIT;
- if (!strcmp(type_name, "bit varying"))
- return PG_VARBIT;
- /* geometric */
- if (!strcmp(type_name, "line"))
- return PG_LINE;
- if (!strcmp(type_name, "lseg"))
- return PG_LSEG;
- if (!strcmp(type_name, "box"))
- return PG_BOX;
- if (!strcmp(type_name, "path"))
- return PG_PATH;
- if (!strcmp(type_name, "point"))
- return PG_POINT;
- if (!strcmp(type_name, "polygon"))
- return PG_POLYGON;
- if (!strcmp(type_name, "circle"))
- return PG_CIRCLE;
-
- return PG_UNKNOWN;
-}
-/* }}} */
-
-/* {{{ php_pgsql_convert_match
- * test field value with regular expression specified.
- */
-static int php_pgsql_convert_match(const char *str, const char *regex , int icase TSRMLS_DC)
-{
- regex_t re;
- regmatch_t *subs;
- int regopt = REG_EXTENDED;
- int regerr, ret = SUCCESS;
-
- if (icase) {
- regopt |= REG_ICASE;
- }
-
- regerr = regcomp(&re, regex, regopt);
- if (regerr) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Cannot compile regex");
- regfree(&re);
- return FAILURE;
- }
- subs = (regmatch_t *)ecalloc(sizeof(regmatch_t), re.re_nsub+1);
-
- regerr = regexec(&re, str, re.re_nsub+1, subs, 0);
- if (regerr == REG_NOMATCH) {
-#ifdef PHP_DEBUG
- php_error_docref(NULL TSRMLS_CC, E_NOTICE, "'%s' does not match with '%s'", str, regex);
-#endif
- ret = FAILURE;
- }
- else if (regerr) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Cannot exec regex");
- ret = FAILURE;
- }
- regfree(&re);
- efree(subs);
- return ret;
-}
-
-/* }}} */
-
-/* {{{ php_pgsql_add_quote
- * add quotes around string.
- */
-static int php_pgsql_add_quotes(zval *src, zend_bool should_free TSRMLS_DC)
-{
- smart_str str = {0};
-
- assert(Z_TYPE_P(src) == IS_STRING);
- assert(should_free == 1 || should_free == 0);
-
- smart_str_appendc(&str, '\'');
- smart_str_appendl(&str, Z_STRVAL_P(src), Z_STRLEN_P(src));
- smart_str_appendc(&str, '\'');
- smart_str_0(&str);
-
- if (should_free) {
- efree(Z_STRVAL_P(src));
- }
- Z_STRVAL_P(src) = str.c;
- Z_STRLEN_P(src) = str.len;
-
- return SUCCESS;
-}
-/* }}} */
-
-#define PGSQL_CONV_CHECK_IGNORE() \
- if (!err && Z_TYPE_P(new_val) == IS_STRING && !strcmp(Z_STRVAL_P(new_val), "NULL")) { \
- /* if new_value is string "NULL" and field has default value, remove element to use default value */ \
- if (!(opt & PGSQL_CONV_IGNORE_DEFAULT) && Z_BVAL_PP(has_default)) { \
- zval_dtor(new_val); \
- FREE_ZVAL(new_val); \
- skip_field = 1; \
- } \
- /* raise error if it's not null and cannot be ignored */ \
- else if (!(opt & PGSQL_CONV_IGNORE_NOT_NULL) && Z_BVAL_PP(not_null)) { \
- php_error_docref(NULL TSRMLS_CC, E_NOTICE, "Detected NULL for 'NOT NULL' field '%s'", field ); \
- err = 1; \
- } \
- }
-
-/* {{{ php_pgsql_convert
- * check and convert array values (fieldname=>vlaue pair) for sql
- */
-PHP_PGSQL_API int php_pgsql_convert(PGconn *pg_link, const char *table_name, const zval *values, zval *result, ulong opt TSRMLS_DC)
-{
- HashPosition pos;
- char *field = NULL;
- uint field_len = -1;
- ulong num_idx = -1;
- zval *meta, **def, **type, **not_null, **has_default, **val, *new_val;
- int new_len, key_type, err = 0, skip_field;
-
- assert(pg_link != NULL);
- assert(Z_TYPE_P(values) == IS_ARRAY);
- assert(Z_TYPE_P(result) == IS_ARRAY);
- assert(!(opt & ~PGSQL_CONV_OPTS));
-
- if (!table_name) {
- return FAILURE;
- }
- MAKE_STD_ZVAL(meta);
- array_init(meta);
- if (php_pgsql_meta_data(pg_link, table_name, meta TSRMLS_CC) == FAILURE) {
- zval_dtor(meta);
- FREE_ZVAL(meta);
- return FAILURE;
- }
- for (zend_hash_internal_pointer_reset_ex(Z_ARRVAL_P(values), &pos);
- zend_hash_get_current_data_ex(Z_ARRVAL_P(values), (void **)&val, &pos) == SUCCESS;
- zend_hash_move_forward_ex(Z_ARRVAL_P(values), &pos)) {
- skip_field = 0;
-
- if ((key_type = zend_hash_get_current_key_ex(Z_ARRVAL_P(values), &field, &field_len, &num_idx, 0, &pos)) == HASH_KEY_NON_EXISTANT) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Failed to get array key type");
- err = 1;
- }
- if (!err && key_type == HASH_KEY_IS_LONG) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Accepts only string key for values");
- err = 1;
- }
- if (!err && key_type == HASH_KEY_NON_EXISTANT) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Accepts only string key for values");
- err = 1;
- }
- if (!err && zend_hash_find(Z_ARRVAL_P(meta), field, field_len, (void **)&def) == FAILURE) {
- php_error_docref(NULL TSRMLS_CC, E_NOTICE, "Invalid field name (%s) in values", field);
- err = 1;
- }
- if (!err && zend_hash_find(Z_ARRVAL_PP(def), "type", sizeof("type"), (void **)&type) == FAILURE) {
- php_error_docref(NULL TSRMLS_CC, E_NOTICE, "Detected broken meta data. Missing 'type'");
- err = 1;
- }
- if (!err && zend_hash_find(Z_ARRVAL_PP(def), "not null", sizeof("not null"), (void **)&not_null) == FAILURE) {
- php_error_docref(NULL TSRMLS_CC, E_NOTICE, "Detected broken meta data. Missing 'not null'");
- err = 1;
- }
- if (!err && zend_hash_find(Z_ARRVAL_PP(def), "has default", sizeof("has default"), (void **)&has_default) == FAILURE) {
- php_error_docref(NULL TSRMLS_CC, E_NOTICE, "Detected broken meta data. Missing 'has default'");
- err = 1;
- }
- if (!err && (Z_TYPE_PP(val) == IS_ARRAY ||
- Z_TYPE_PP(val) == IS_OBJECT ||
- Z_TYPE_PP(val) == IS_CONSTANT_ARRAY)) {
- php_error_docref(NULL TSRMLS_CC, E_NOTICE, "Expects scaler values as field values");
- err = 1;
- }
- if (err) {
- break; /* break out for() */
- }
- MAKE_STD_ZVAL(new_val);
- switch(php_pgsql_get_data_type(Z_STRVAL_PP(type), Z_STRLEN_PP(type)))
- {
- case PG_BOOL:
- switch (Z_TYPE_PP(val)) {
- case IS_STRING:
- if (Z_STRLEN_PP(val) == 0) {
- ZVAL_STRING(new_val, "NULL", 1);
- }
- else {
- if (!strcmp(Z_STRVAL_PP(val), "t") || !strcmp(Z_STRVAL_PP(val), "T") ||
- !strcmp(Z_STRVAL_PP(val), "y") || !strcmp(Z_STRVAL_PP(val), "Y") ||
- !strcmp(Z_STRVAL_PP(val), "true") || !strcmp(Z_STRVAL_PP(val), "True") ||
- !strcmp(Z_STRVAL_PP(val), "yes") || !strcmp(Z_STRVAL_PP(val), "Yes") ||
- !strcmp(Z_STRVAL_PP(val), "1")) {
- ZVAL_STRING(new_val, "'t'", 1);
- }
- else if (!strcmp(Z_STRVAL_PP(val), "f") || !strcmp(Z_STRVAL_PP(val), "F") ||
- !strcmp(Z_STRVAL_PP(val), "n") || !strcmp(Z_STRVAL_PP(val), "N") ||
- !strcmp(Z_STRVAL_PP(val), "false") || !strcmp(Z_STRVAL_PP(val), "False") ||
- !strcmp(Z_STRVAL_PP(val), "no") || !strcmp(Z_STRVAL_PP(val), "No") ||
- !strcmp(Z_STRVAL_PP(val), "0")) {
- ZVAL_STRING(new_val, "'f'", 1);
- }
- else {
- php_error_docref(NULL TSRMLS_CC, E_NOTICE, "Detected invalid value (%s) for PostgreSQL %s field (%s)", Z_STRVAL_PP(val), Z_STRVAL_PP(type), field);
- err = 1;
- }
- }
- break;
-
- case IS_LONG:
- case IS_BOOL:
- if (Z_LVAL_PP(val)) {
- ZVAL_STRING(new_val, "'t'", 1);
- }
- else {
- ZVAL_STRING(new_val, "'f'", 1);
- }
- break;
-
- case IS_NULL:
- ZVAL_STRING(new_val, "NULL", 1);
- break;
-
- default:
- err = 1;
- }
- PGSQL_CONV_CHECK_IGNORE();
- if (err) {
- php_error_docref(NULL TSRMLS_CC, E_NOTICE, "Expects string, null, long or boolelan value for PostgreSQL '%s' (%s)", Z_STRVAL_PP(type), field);
- }
- break;
-
- case PG_OID:
- case PG_INT2:
- case PG_INT4:
- case PG_INT8:
- switch (Z_TYPE_PP(val)) {
- case IS_STRING:
- if (Z_STRLEN_PP(val) == 0) {
- ZVAL_STRING(new_val, "NULL", 1);
- }
- else {
- /* FIXME: better regex must be used */
- if (php_pgsql_convert_match(Z_STRVAL_PP(val), "^([+-]{0,1}[0-9]+)$", 0 TSRMLS_CC) == FAILURE) {
- err = 1;
- }
- else {
- ZVAL_STRING(new_val, Z_STRVAL_PP(val), 1);
- }
- }
- break;
-
- case IS_DOUBLE:
- ZVAL_DOUBLE(new_val, Z_DVAL_PP(val));
- convert_to_long_ex(&new_val);
- break;
-
- case IS_LONG:
- ZVAL_LONG(new_val, Z_LVAL_PP(val));
- break;
-
- case IS_NULL:
- ZVAL_STRING(new_val, "NULL", 1);
- break;
-
- default:
- err = 1;
- }
- PGSQL_CONV_CHECK_IGNORE();
- if (err) {
- php_error_docref(NULL TSRMLS_CC, E_NOTICE, "Expects NULL, string, long or double value for pgsql '%s' (%s)", Z_STRVAL_PP(type), field);
- }
- break;
-
- case PG_NUMERIC:
- case PG_MONEY:
- case PG_FLOAT4:
- case PG_FLOAT8:
- switch (Z_TYPE_PP(val)) {
- case IS_STRING:
- if (Z_STRLEN_PP(val) == 0) {
- ZVAL_STRING(new_val, "NULL", 1);
- }
- else {
- /* FIXME: better regex must be used */
- if (php_pgsql_convert_match(Z_STRVAL_PP(val), "^([+-]{0,1}[0-9]+)|([+-]{0,1}[0-9]*[\\.][0-9]+)|([+-]{0,1}[0-9]+[\\.][0-9]*)$", 0 TSRMLS_CC) == FAILURE) {
- err = 1;
- }
- else {
- ZVAL_STRING(new_val, Z_STRVAL_PP(val), 1);
- }
- }
- break;
-
- case IS_LONG:
- ZVAL_LONG(new_val, Z_LVAL_PP(val));
- break;
-
- case IS_DOUBLE:
- ZVAL_DOUBLE(new_val, Z_DVAL_PP(val));
- break;
-
- case IS_NULL:
- ZVAL_STRING(new_val, "NULL", 1);
- break;
-
- default:
- err = 1;
- }
- PGSQL_CONV_CHECK_IGNORE();
- if (err) {
- php_error_docref(NULL TSRMLS_CC, E_NOTICE, "Expects NULL, string, long or double value for PostgreSQL '%s' (%s)", Z_STRVAL_PP(type), field);
- }
- break;
-
- case PG_TEXT:
- case PG_CHAR:
- case PG_VARCHAR:
- switch (Z_TYPE_PP(val)) {
- case IS_STRING:
- if (Z_STRLEN_PP(val) == 0) {
- if (opt & PGSQL_CONV_FORCE_NULL) {
- ZVAL_STRING(new_val, "NULL", 1);
- } else {
- ZVAL_STRING(new_val, "''", 1);
- }
- }
- else {
- Z_TYPE_P(new_val) = IS_STRING;
-#if HAVE_PQESCAPE
- {
- char *tmp;
- tmp = (char *)safe_emalloc(Z_STRLEN_PP(val), 2, 1);
- Z_STRLEN_P(new_val) = (int)PQescapeString(tmp, Z_STRVAL_PP(val), Z_STRLEN_PP(val));
- Z_STRVAL_P(new_val) = tmp;
- }
-#else
- Z_STRVAL_P(new_val) = php_addslashes(Z_STRVAL_PP(val), Z_STRLEN_PP(val), &Z_STRLEN_P(new_val), 0 TSRMLS_CC);
-#endif
- php_pgsql_add_quotes(new_val, 1 TSRMLS_CC);
- }
- break;
-
- case IS_LONG:
- ZVAL_LONG(new_val, Z_LVAL_PP(val));
- convert_to_string_ex(&new_val);
- break;
-
- case IS_DOUBLE:
- ZVAL_DOUBLE(new_val, Z_DVAL_PP(val));
- convert_to_string_ex(&new_val);
- break;
-
- case IS_NULL:
- ZVAL_STRING(new_val, "NULL", 1);
- break;
-
- default:
- err = 1;
- }
- PGSQL_CONV_CHECK_IGNORE();
- if (err) {
- php_error_docref(NULL TSRMLS_CC, E_NOTICE, "Expects NULL, string, long or double value for PostgreSQL '%s' (%s)", Z_STRVAL_PP(type), field);
- }
- break;
-
- case PG_UNIX_TIME:
- case PG_UNIX_TIME_INTERVAL:
- /* these are the actallay a integer */
- switch (Z_TYPE_PP(val)) {
- case IS_STRING:
- if (Z_STRLEN_PP(val) == 0) {
- ZVAL_STRING(new_val, "NULL", 1);
- }
- else {
- /* FIXME: Better regex must be used */
- if (php_pgsql_convert_match(Z_STRVAL_PP(val), "^[0-9]+$", 0 TSRMLS_CC) == FAILURE) {
- err = 1;
- }
- else {
- ZVAL_STRING(new_val, Z_STRVAL_PP(val), 1);
- convert_to_long_ex(&new_val);
- }
- }
- break;
-
- case IS_DOUBLE:
- ZVAL_DOUBLE(new_val, Z_DVAL_PP(val));
- convert_to_long_ex(&new_val);
- break;
-
- case IS_LONG:
- ZVAL_LONG(new_val, Z_LVAL_PP(val));
- break;
-
- case IS_NULL:
- ZVAL_STRING(new_val, "NULL", 1);
- break;
-
- default:
- err = 1;
- }
- PGSQL_CONV_CHECK_IGNORE();
- if (err) {
- php_error_docref(NULL TSRMLS_CC, E_NOTICE, "Expects NULL, string, long or double value for '%s' (%s)", Z_STRVAL_PP(type), field);
- }
- break;
-
- case PG_CIDR:
- case PG_INET:
- switch (Z_TYPE_PP(val)) {
- case IS_STRING:
- if (Z_STRLEN_PP(val) == 0) {
- ZVAL_STRING(new_val, "NULL", 1);
- }
- else {
- /* FIXME: Better regex must be used */
- if (php_pgsql_convert_match(Z_STRVAL_PP(val), "^([0-9]{1,3}\\.){3}[0-9]{1,3}(/[0-9]{1,2}){0,1}$", 0 TSRMLS_CC) == FAILURE) {
- err = 1;
- }
- else {
- ZVAL_STRING(new_val, Z_STRVAL_PP(val), 1);
- php_pgsql_add_quotes(new_val, 1 TSRMLS_CC);
- }
- }
- break;
-
- case IS_NULL:
- ZVAL_STRING(new_val, "NULL", 1);
- break;
-
- default:
- err = 1;
- }
- PGSQL_CONV_CHECK_IGNORE();
- if (err) {
- php_error_docref(NULL TSRMLS_CC, E_NOTICE, "Expects NULL or string for '%s' (%s)", Z_STRVAL_PP(type), field);
- }
- break;
-
- case PG_TIME_WITH_TIMEZONE:
- case PG_TIMESTAMP:
- case PG_TIMESTAMP_WITH_TIMEZONE:
- switch(Z_TYPE_PP(val)) {
- case IS_STRING:
- if (Z_STRLEN_PP(val) == 0) {
- ZVAL_STRING(new_val, "NULL", 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,5})){0,1})){0,1}$", 1 TSRMLS_CC) == FAILURE) {
- err = 1;
- }
- else {
- ZVAL_STRING(new_val, Z_STRVAL_PP(val), 1);
- php_pgsql_add_quotes(new_val, 1 TSRMLS_CC);
- }
- }
- break;
-
- case IS_NULL:
- ZVAL_STRING(new_val, "NULL", 1);
- break;
-
- default:
- err = 1;
- }
- PGSQL_CONV_CHECK_IGNORE();
- if (err) {
- php_error_docref(NULL TSRMLS_CC, E_NOTICE, "Expects NULL or string for PostgreSQL %s field (%s)", Z_STRVAL_PP(type), field);
- }
- break;
-
- case PG_DATE:
- switch(Z_TYPE_PP(val)) {
- case IS_STRING:
- if (Z_STRLEN_PP(val) == 0) {
- ZVAL_STRING(new_val, "NULL", 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})$", 1 TSRMLS_CC) == FAILURE) {
- err = 1;
- }
- else {
- ZVAL_STRING(new_val, Z_STRVAL_PP(val), 1);
- php_pgsql_add_quotes(new_val, 1 TSRMLS_CC);
- }
- }
- break;
-
- case IS_NULL:
- ZVAL_STRING(new_val, "NULL", 1);
- break;
-
- default:
- err = 1;
- }
- PGSQL_CONV_CHECK_IGNORE();
- if (err) {
- php_error_docref(NULL TSRMLS_CC, E_NOTICE, "Expects NULL or string for PostgreSQL %s field (%s)", Z_STRVAL_PP(type), field);
- }
- break;
-
- case PG_TIME:
- switch(Z_TYPE_PP(val)) {
- case IS_STRING:
- if (Z_STRLEN_PP(val) == 0) {
- ZVAL_STRING(new_val, "NULL", 1);
- }
- else {
- /* FIXME: better regex must be used */
- if (php_pgsql_convert_match(Z_STRVAL_PP(val), "^(([0-9]{1,2}:[0-9]{1,2}){1}(:[0-9]{1,2}){0,1})){0,1}$", 1 TSRMLS_CC) == FAILURE) {
- err = 1;
- }
- else {
- ZVAL_STRING(new_val, Z_STRVAL_PP(val), 1);
- php_pgsql_add_quotes(new_val, 1 TSRMLS_CC);
- }
- }
- break;
-
- case IS_NULL:
- ZVAL_STRING(new_val, "NULL", 1);
- break;
-
- default:
- err = 1;
- }
- PGSQL_CONV_CHECK_IGNORE();
- if (err) {
- php_error_docref(NULL TSRMLS_CC, E_NOTICE, "Expects NULL or string for PostgreSQL %s field (%s)", Z_STRVAL_PP(type), field);
- }
- break;
-
- case PG_INTERVAL:
- switch(Z_TYPE_PP(val)) {
- case IS_STRING:
- if (Z_STRLEN_PP(val) == 0) {
- ZVAL_STRING(new_val, "NULL", 1);
- }
- else {
-
- /* From the Postgres docs:
-
- interval values can be written with the following syntax:
- [@] quantity unit [quantity unit...] [direction]
-
- Where: quantity is a number (possibly signed); unit is second, minute, hour,
- day, week, month, year, decade, century, millennium, or abbreviations or
- plurals of these units [note not *all* abbreviations] ; direction can be
- ago or empty. The at sign (@) is optional noise.
-
- ...
-
- Quantities of days, hours, minutes, and seconds can be specified without explicit
- unit markings. For example, '1 12:59:10' is read the same as '1 day 12 hours 59 min 10
- sec'.
- */
- if (php_pgsql_convert_match(Z_STRVAL_PP(val),
- "^(@?[ \\t]+)?("
-
- /* Textual time units and their abbreviations: */
- "(([-+]?[ \\t]+)?"
- "[0-9]+(\\.[0-9]*)?[ \\t]*"
- "(millenniums|millennia|millennium|mil|mils|"
- "centuries|century|cent|c|"
- "decades|decade|dec|decs|"
- "years|year|y|"
- "months|month|mon|"
- "weeks|week|w|"
- "days|day|d|"
- "hours|hour|hr|hrs|h|"
- "minutes|minute|mins|min|m|"
- "seconds|second|secs|sec|s))+|"
-
- /* Textual time units plus (dd)* hh[:mm[:ss]] */
- "((([-+]?[ \\t]+)?"
- "[0-9]+(\\.[0-9]*)?[ \\t]*"
- "(millenniums|millennia|millennium|mil|mils|"
- "centuries|century|cent|c|"
- "decades|decade|dec|decs|"
- "years|year|y|"
- "months|month|mon|"
- "weeks|week|w|"
- "days|day|d))+"
- "([-+]?[ \\t]+"
- "([0-9]+[ \\t]+)+" /* dd */
- "(([0-9]{1,2}:){0,2}[0-9]{0,2})" /* hh:[mm:[ss]] */
- ")?))"
- "([ \\t]+ago)?$",
- 1 TSRMLS_CC) == FAILURE) {
- err = 1;
- }
- else {
- ZVAL_STRING(new_val, Z_STRVAL_PP(val), 1);
- php_pgsql_add_quotes(new_val, 1 TSRMLS_CC);
- }
- }
- break;
-
- case IS_NULL:
- ZVAL_STRING(new_val, "NULL", 1);
- break;
-
- default:
- err = 1;
- }
- PGSQL_CONV_CHECK_IGNORE();
- if (err) {
- php_error_docref(NULL TSRMLS_CC, E_NOTICE, "Expects NULL or string for PostgreSQL %s field (%s)", Z_STRVAL_PP(type), field);
- }
- break;
-#ifdef HAVE_PQESCAPE
- case PG_BYTEA:
- switch (Z_TYPE_PP(val)) {
- case IS_STRING:
- if (Z_STRLEN_PP(val) == 0) {
- ZVAL_STRING(new_val, "NULL", 1);
- }
- else {
- unsigned char *tmp;
- size_t to_len;
- tmp = PQescapeBytea(Z_STRVAL_PP(val), Z_STRLEN_PP(val), &to_len);
- Z_TYPE_P(new_val) = IS_STRING;
- Z_STRLEN_P(new_val) = to_len-1; /* PQescapeBytea's to_len includes additional '\0' */
- Z_STRVAL_P(new_val) = emalloc(to_len);
- memcpy(Z_STRVAL_P(new_val), tmp, to_len);
- free(tmp);
- php_pgsql_add_quotes(new_val, 1 TSRMLS_CC);
-
- }
- break;
-
- case IS_LONG:
- ZVAL_LONG(new_val, Z_LVAL_PP(val));
- convert_to_string_ex(&new_val);
- break;
-
- case IS_DOUBLE:
- ZVAL_DOUBLE(new_val, Z_DVAL_PP(val));
- convert_to_string_ex(&new_val);
- break;
-
- case IS_NULL:
- ZVAL_STRING(new_val, "NULL", 1);
- break;
-
- default:
- err = 1;
- }
- PGSQL_CONV_CHECK_IGNORE();
- if (err) {
- php_error_docref(NULL TSRMLS_CC, E_NOTICE, "Expects NULL, string, long or double value for PostgreSQL '%s' (%s)", Z_STRVAL_PP(type), field);
- }
- break;
-
-#endif
- case PG_MACADDR:
- switch(Z_TYPE_PP(val)) {
- case IS_STRING:
- if (Z_STRLEN_PP(val) == 0) {
- ZVAL_STRING(new_val, "NULL", 1);
- }
- else {
- if (php_pgsql_convert_match(Z_STRVAL_PP(val), "^([0-9a-f]{2,2}:){5,5}[0-9a-f]{2,2}$", 1 TSRMLS_CC) == FAILURE) {
- err = 1;
- }
- else {
- ZVAL_STRING(new_val, Z_STRVAL_PP(val), 1);
- php_pgsql_add_quotes(new_val, 1 TSRMLS_CC);
- }
- }
- break;
-
- case IS_NULL:
- ZVAL_STRING(new_val, "NULL", 1);
- break;
-
- default:
- err = 1;
- }
- PGSQL_CONV_CHECK_IGNORE();
- if (err) {
- php_error_docref(NULL TSRMLS_CC, E_NOTICE, "Expects NULL or string for PostgreSQL %s field (%s)", Z_STRVAL_PP(type), field);
- }
- break;
-
- /* bit */
- case PG_BIT:
- case PG_VARBIT:
- /* geometric */
- case PG_LINE:
- case PG_LSEG:
- case PG_POINT:
- case PG_BOX:
- case PG_PATH:
- case PG_POLYGON:
- case PG_CIRCLE:
- php_error_docref(NULL TSRMLS_CC, E_NOTICE, "PostgreSQL '%s' type (%s) is not supported", Z_STRVAL_PP(type), field);
- err = 1;
- break;
-
- case PG_UNKNOWN:
- default:
- php_error_docref(NULL TSRMLS_CC, E_NOTICE, "Unknown or system data type '%s' for '%s'", Z_STRVAL_PP(type), field);
- err = 1;
- break;
- } /* switch */
-
- if (err) {
- zval_dtor(new_val);
- FREE_ZVAL(new_val);
- break; /* break out for() */
- }
- if (!skip_field) {
- /* If field is NULL and HAS DEFAULT, should be skipped */
- field = php_addslashes(field, strlen(field), &new_len, 0 TSRMLS_CC);
- add_assoc_zval(result, field, new_val);
- efree(field);
- }
- } /* for */
- zval_dtor(meta);
- FREE_ZVAL(meta);
-
- if (err) {
- /* shouldn't destroy & free zval here */
- return FAILURE;
- }
- return SUCCESS;
-}
-/* }}} */
-
-
-/* {{{ proto array pg_convert(resource db, string table, array values[, int options])
- Check and convert values for PostgreSQL SQL statement */
-PHP_FUNCTION(pg_convert)
-{
- zval *pgsql_link, *values;
- char *table_name;
- int table_name_len;
- ulong option = 0;
- PGconn *pg_link;
- int id = -1;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC,
- "rsa|l", &pgsql_link, &table_name, &table_name_len, &values, &option) == FAILURE) {
- return;
- }
- if (option & ~PGSQL_CONV_OPTS) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid option is specified");
- RETURN_FALSE;
- }
- if (!table_name_len) {
- php_error_docref(NULL TSRMLS_CC, E_NOTICE, "Table name is invalid");
- RETURN_FALSE;
- }
-
- ZEND_FETCH_RESOURCE2(pg_link, PGconn *, &pgsql_link, id, "PostgreSQL link", le_link, le_plink);
-
- if (php_pgsql_flush_query(pg_link TSRMLS_CC)) {
- php_error_docref(NULL TSRMLS_CC, E_NOTICE, "Detected unhandled result(s) in connection");
- }
- array_init(return_value);
- if (php_pgsql_convert(pg_link, table_name, values, return_value, option TSRMLS_CC) == FAILURE) {
- zval_dtor(return_value);
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-static int do_exec(smart_str *querystr, int expect, PGconn *pg_link, ulong opt TSRMLS_DC)
-{
- if (opt & PGSQL_DML_ASYNC) {
- if (PQsendQuery(pg_link, querystr->c)) {
- return 0;
- }
- }
- else {
- PGresult *pg_result;
-
- pg_result = PQexec(pg_link, querystr->c);
- if (PQresultStatus(pg_result) == expect) {
- PQclear(pg_result);
- return 0;
- } else {
- php_error_docref(NULL TSRMLS_CC, E_NOTICE, "Failed to execute '%s'", querystr->c);
- PQclear(pg_result);
- }
- }
-
- return -1;
-}
-
-/* {{{ php_pgsql_insert
- */
-PHP_PGSQL_API int php_pgsql_insert(PGconn *pg_link, const char *table, zval *var_array, ulong opt, char **sql TSRMLS_DC)
-{
- zval **val, *converted = NULL;
- char buf[256];
- char *fld;
- smart_str querystr = {0};
- int key_type, ret = FAILURE;
- uint fld_len;
- ulong num_idx;
- HashPosition pos;
-
- assert(pg_link != NULL);
- assert(table != NULL);
- assert(Z_TYPE_P(var_array) == IS_ARRAY);
-
- if (zend_hash_num_elements(Z_ARRVAL_P(var_array)) == 0) {
- return FAILURE;
- }
-
- /* convert input array if needed */
- if (!(opt & PGSQL_DML_NO_CONV)) {
- MAKE_STD_ZVAL(converted);
- array_init(converted);
- if (php_pgsql_convert(pg_link, table, var_array, converted, (opt & PGSQL_CONV_OPTS) TSRMLS_CC) == FAILURE) {
- goto cleanup;
- }
- var_array = converted;
- }
-
- smart_str_appends(&querystr, "INSERT INTO ");
- smart_str_appends(&querystr, table);
- smart_str_appends(&querystr, " (");
-
- zend_hash_internal_pointer_reset_ex(Z_ARRVAL_P(var_array), &pos);
- while ((key_type = zend_hash_get_current_key_ex(Z_ARRVAL_P(var_array), &fld,
- &fld_len, &num_idx, 0, &pos)) != HASH_KEY_NON_EXISTANT) {
- if (key_type == HASH_KEY_IS_LONG) {
- php_error_docref(NULL TSRMLS_CC, E_NOTICE, "Expects associative array for values to be inserted");
- goto cleanup;
- }
- smart_str_appendl(&querystr, fld, fld_len - 1);
- smart_str_appendc(&querystr, ',');
- zend_hash_move_forward_ex(Z_ARRVAL_P(var_array), &pos);
- }
- querystr.len--;
- smart_str_appends(&querystr, ") VALUES (");
-
- /* make values string */
- for (zend_hash_internal_pointer_reset_ex(Z_ARRVAL_P(var_array), &pos);
- zend_hash_get_current_data_ex(Z_ARRVAL_P(var_array), (void **)&val, &pos) == SUCCESS;
- zend_hash_move_forward_ex(Z_ARRVAL_P(var_array), &pos)) {
-
- /* we can avoid the key_type check here, because we tested it in the other loop */
- switch(Z_TYPE_PP(val)) {
- case IS_STRING:
- smart_str_appendl(&querystr, Z_STRVAL_PP(val), Z_STRLEN_PP(val));
- break;
- case IS_LONG:
- smart_str_append_long(&querystr, Z_LVAL_PP(val));
- break;
- case IS_DOUBLE:
- smart_str_appendl(&querystr, buf, sprintf(buf, "%f", Z_DVAL_PP(val)));
- break;
- default:
- /* should not happen */
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Report this error to php-dev@lists.php.net, type = %d", Z_TYPE_PP(val));
- goto cleanup;
- break;
- }
- smart_str_appendc(&querystr, ',');
- }
- /* Remove the trailing "," */
- querystr.len--;
- smart_str_appends(&querystr, ");");
- smart_str_0(&querystr);
-
- if ((opt & (PGSQL_DML_EXEC|PGSQL_DML_ASYNC)) &&
- do_exec(&querystr, PGRES_COMMAND_OK, pg_link, (opt & PGSQL_CONV_OPTS) TSRMLS_CC) == 0) {
- ret = SUCCESS;
- }
- else if (opt & PGSQL_DML_STRING) {
- ret = SUCCESS;
- }
-
-cleanup:
- if (!(opt & PGSQL_DML_NO_CONV)) {
- zval_dtor(converted);
- FREE_ZVAL(converted);
- }
- if (ret == SUCCESS && (opt & PGSQL_DML_STRING)) {
- *sql = querystr.c;
- }
- else {
- smart_str_free(&querystr);
- }
- return ret;
-}
-/* }}} */
-
-/* {{{ proto mixed pg_insert(resource db, string table, array values[, int options])
- Insert values (filed=>value) to table */
-PHP_FUNCTION(pg_insert)
-{
- zval *pgsql_link, *values;
- char *table, *sql = NULL;
- int table_len;
- ulong option = PGSQL_DML_EXEC;
- PGconn *pg_link;
- int id = -1, argc = ZEND_NUM_ARGS();
-
- if (zend_parse_parameters(argc TSRMLS_CC, "rsa|l",
- &pgsql_link, &table, &table_len, &values, &option) == FAILURE) {
- return;
- }
- if (option & ~(PGSQL_CONV_OPTS|PGSQL_DML_NO_CONV|PGSQL_DML_EXEC|PGSQL_DML_ASYNC|PGSQL_DML_STRING)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid option is specified");
- RETURN_FALSE;
- }
-
- ZEND_FETCH_RESOURCE2(pg_link, PGconn *, &pgsql_link, id, "PostgreSQL link", le_link, le_plink);
-
- if (php_pgsql_flush_query(pg_link TSRMLS_CC)) {
- php_error_docref(NULL TSRMLS_CC, E_NOTICE, "Detected unhandled result(s) in connection");
- }
- if (php_pgsql_insert(pg_link, table, values, option, &sql TSRMLS_CC) == FAILURE) {
- RETURN_FALSE;
- }
- if (option & PGSQL_DML_STRING) {
- RETURN_STRING(sql, 0);
- }
- RETURN_TRUE;
-}
-/* }}} */
-
-static inline int build_assignment_string(smart_str *querystr, HashTable *ht, const char *pad, int pad_len TSRMLS_DC)
-{
- HashPosition pos;
- uint fld_len;
- int key_type;
- ulong num_idx;
- char *fld;
- char buf[256];
- zval **val;
-
- for (zend_hash_internal_pointer_reset_ex(ht, &pos);
- zend_hash_get_current_data_ex(ht, (void **)&val, &pos) == SUCCESS;
- zend_hash_move_forward_ex(ht, &pos)) {
- key_type = zend_hash_get_current_key_ex(ht, &fld, &fld_len, &num_idx, 0, &pos);
- if (key_type == HASH_KEY_IS_LONG) {
- php_error_docref(NULL TSRMLS_CC, E_NOTICE, "Expects associative array for values to be inserted");
- return -1;
- }
- smart_str_appendl(querystr, fld, fld_len - 1);
- smart_str_appendc(querystr, '=');
-
- switch(Z_TYPE_PP(val)) {
- case IS_STRING:
- smart_str_appendl(querystr, Z_STRVAL_PP(val), Z_STRLEN_PP(val));
- break;
- case IS_LONG:
- smart_str_append_long(querystr, Z_LVAL_PP(val));
- break;
- case IS_DOUBLE:
- smart_str_appendl(querystr, buf, sprintf(buf, "%f", Z_DVAL_PP(val)));
- break;
- default:
- /* should not happen */
- php_error_docref(NULL TSRMLS_CC, E_NOTICE, "Expects scaler values other than NULL. Need to convert?");
- return -1;
- }
- smart_str_appendl(querystr, pad, pad_len);
- }
- querystr->len -= pad_len;
-
- return 0;
-}
-
-/* {{{ php_pgsql_update
- */
-PHP_PGSQL_API int php_pgsql_update(PGconn *pg_link, const char *table, zval *var_array, zval *ids_array, ulong opt, char **sql TSRMLS_DC)
-{
- zval *var_converted = NULL, *ids_converted = NULL;
- smart_str querystr = {0};
- int ret = FAILURE;
-
- assert(pg_link != NULL);
- assert(table != NULL);
- assert(Z_TYPE_P(var_array) == IS_ARRAY);
- assert(Z_TYPE_P(ids_array) == IS_ARRAY);
- assert(!(opt & ~(PGSQL_CONV_OPTS|PGSQL_DML_NO_CONV|PGSQL_DML_EXEC|PGSQL_DML_STRING)));
-
- if (zend_hash_num_elements(Z_ARRVAL_P(var_array)) == 0
- || zend_hash_num_elements(Z_ARRVAL_P(ids_array)) == 0) {
- return FAILURE;
- }
-
- if (!(opt & PGSQL_DML_NO_CONV)) {
- MAKE_STD_ZVAL(var_converted);
- array_init(var_converted);
- if (php_pgsql_convert(pg_link, table, var_array, var_converted, (opt & PGSQL_CONV_OPTS) TSRMLS_CC) == FAILURE) {
- goto cleanup;
- }
- var_array = var_converted;
- MAKE_STD_ZVAL(ids_converted);
- array_init(ids_converted);
- if (php_pgsql_convert(pg_link, table, ids_array, ids_converted, (opt & PGSQL_CONV_OPTS) TSRMLS_CC) == FAILURE) {
- goto cleanup;
- }
- ids_array = ids_converted;
- }
-
- smart_str_appends(&querystr, "UPDATE ");
- smart_str_appends(&querystr, table);
- smart_str_appends(&querystr, " SET ");
-
- if (build_assignment_string(&querystr, Z_ARRVAL_P(var_array), ",", 1 TSRMLS_CC))
- goto cleanup;
-
- smart_str_appends(&querystr, " WHERE ");
-
- if (build_assignment_string(&querystr, Z_ARRVAL_P(ids_array), " AND ", sizeof(" AND ")-1 TSRMLS_CC))
- goto cleanup;
-
- smart_str_appendc(&querystr, ';');
- smart_str_0(&querystr);
-
- if ((opt & PGSQL_DML_EXEC) && do_exec(&querystr, PGRES_COMMAND_OK, pg_link, opt TSRMLS_CC) == 0) {
- ret = SUCCESS;
- } else if (opt & PGSQL_DML_STRING) {
- ret = SUCCESS;
- }
-
-cleanup:
- if (var_converted) {
- zval_dtor(var_converted);
- FREE_ZVAL(var_converted);
- }
- if (ids_converted) {
- zval_dtor(ids_converted);
- FREE_ZVAL(ids_converted);
- }
- if (ret == SUCCESS && (opt & PGSQL_DML_STRING)) {
- *sql = querystr.c;
- }
- else {
- smart_str_free(&querystr);
- }
- return ret;
-}
-/* }}} */
-
-/* {{{ proto mixed pg_update(resource db, string table, array fields, array ids[, int options])
- Update table using values (field=>value) and ids (id=>value) */
-PHP_FUNCTION(pg_update)
-{
- zval *pgsql_link, *values, *ids;
- char *table, *sql = NULL;
- int table_len;
- ulong option = PGSQL_DML_EXEC;
- PGconn *pg_link;
- int id = -1, argc = ZEND_NUM_ARGS();
-
- if (zend_parse_parameters(argc TSRMLS_CC, "rsaa|l",
- &pgsql_link, &table, &table_len, &values, &ids, &option) == FAILURE) {
- return;
- }
- if (option & ~(PGSQL_CONV_OPTS|PGSQL_DML_NO_CONV|PGSQL_DML_EXEC|PGSQL_DML_STRING)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid option is specified");
- RETURN_FALSE;
- }
-
- ZEND_FETCH_RESOURCE2(pg_link, PGconn *, &pgsql_link, id, "PostgreSQL link", le_link, le_plink);
-
- if (php_pgsql_flush_query(pg_link TSRMLS_CC)) {
- php_error_docref(NULL TSRMLS_CC, E_NOTICE, "Detected unhandled result(s) in connection");
- }
- if (php_pgsql_update(pg_link, table, values, ids, option, &sql TSRMLS_CC) == FAILURE) {
- RETURN_FALSE;
- }
- if (option & PGSQL_DML_STRING) {
- RETURN_STRING(sql, 0);
- }
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ php_pgsql_delete
- */
-PHP_PGSQL_API int php_pgsql_delete(PGconn *pg_link, const char *table, zval *ids_array, ulong opt, char **sql TSRMLS_DC)
-{
- zval *ids_converted = NULL;
- smart_str querystr = {0};
- int ret = FAILURE;
-
- assert(pg_link != NULL);
- assert(table != NULL);
- assert(Z_TYPE_P(ids_array) == IS_ARRAY);
- assert(!(opt & ~(PGSQL_CONV_FORCE_NULL|PGSQL_DML_EXEC|PGSQL_DML_STRING)));
-
- if (zend_hash_num_elements(Z_ARRVAL_P(ids_array)) == 0) {
- return FAILURE;
- }
-
- if (!(opt & PGSQL_DML_NO_CONV)) {
- MAKE_STD_ZVAL(ids_converted);
- array_init(ids_converted);
- if (php_pgsql_convert(pg_link, table, ids_array, ids_converted, (opt & PGSQL_CONV_OPTS) TSRMLS_CC) == FAILURE) {
- goto cleanup;
- }
- ids_array = ids_converted;
- }
-
- smart_str_appends(&querystr, "DELETE FROM ");
- smart_str_appends(&querystr, table);
- smart_str_appends(&querystr, " WHERE ");
-
- if (build_assignment_string(&querystr, Z_ARRVAL_P(ids_array), " AND ", sizeof(" AND ")-1 TSRMLS_CC))
- goto cleanup;
-
- smart_str_appendc(&querystr, ';');
- smart_str_0(&querystr);
-
- if ((opt & PGSQL_DML_EXEC) && do_exec(&querystr, PGRES_COMMAND_OK, pg_link, opt TSRMLS_CC) == 0) {
- ret = SUCCESS;
- } else if (opt & PGSQL_DML_STRING) {
- ret = SUCCESS;
- }
-
-cleanup:
- if (!(opt & PGSQL_DML_NO_CONV)) {
- zval_dtor(ids_converted);
- FREE_ZVAL(ids_converted);
- }
- if (ret == SUCCESS && (opt & PGSQL_DML_STRING)) {
- *sql = estrdup(querystr.c);
- }
- else {
- smart_str_free(&querystr);
- }
- return ret;
-}
-/* }}} */
-
-/* {{{ proto mixed pg_delete(resource db, string table, array ids[, int options])
- Delete records has ids (id=>value) */
-PHP_FUNCTION(pg_delete)
-{
- zval *pgsql_link, *ids;
- char *table, *sql = NULL;
- int table_len;
- ulong option = PGSQL_DML_EXEC;
- PGconn *pg_link;
- int id = -1, argc = ZEND_NUM_ARGS();
-
- if (zend_parse_parameters(argc TSRMLS_CC, "rsa|l",
- &pgsql_link, &table, &table_len, &ids, &option) == FAILURE) {
- return;
- }
- if (option & ~(PGSQL_CONV_FORCE_NULL|PGSQL_DML_NO_CONV|PGSQL_DML_EXEC|PGSQL_DML_STRING)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid option is specified");
- RETURN_FALSE;
- }
-
- ZEND_FETCH_RESOURCE2(pg_link, PGconn *, &pgsql_link, id, "PostgreSQL link", le_link, le_plink);
-
- if (php_pgsql_flush_query(pg_link TSRMLS_CC)) {
- php_error_docref(NULL TSRMLS_CC, E_NOTICE, "Detected unhandled result(s) in connection");
- }
- if (php_pgsql_delete(pg_link, table, ids, option, &sql TSRMLS_CC) == FAILURE) {
- RETURN_FALSE;
- }
- if (option & PGSQL_DML_STRING) {
- RETURN_STRING(sql, 0);
- }
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ php_pgsql_result2array
- */
-PHP_PGSQL_API int php_pgsql_result2array(PGresult *pg_result, zval *ret_array TSRMLS_DC)
-{
- zval *row;
- char *field_name, *element, *data;
- size_t num_fields, element_len, data_len;
- int pg_numrows, pg_row;
- uint i;
- assert(Z_TYPE_P(ret_array) == IS_ARRAY);
-
- if ((pg_numrows = PQntuples(pg_result)) <= 0) {
- return FAILURE;
- }
- for (pg_row = 0; pg_row < pg_numrows; pg_row++) {
- MAKE_STD_ZVAL(row);
- array_init(row);
- add_index_zval(ret_array, pg_row, row);
- for (i = 0, num_fields = PQnfields(pg_result); i < num_fields; i++) {
- if (PQgetisnull(pg_result, pg_row, i)) {
- field_name = PQfname(pg_result, i);
- add_assoc_null(row, field_name);
- } else {
- element = PQgetvalue(pg_result, pg_row, i);
- element_len = (element ? strlen(element) : 0);
- if (element) {
- if (PG(magic_quotes_runtime)) {
- data = php_addslashes(element, element_len, &data_len, 0 TSRMLS_CC);
- } else {
- data = safe_estrndup(element, element_len);
- data_len = element_len;
- }
- field_name = PQfname(pg_result, i);
- add_assoc_stringl(row, field_name, data, data_len, 0);
- }
- }
- }
- }
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ php_pgsql_select
- */
-PHP_PGSQL_API int php_pgsql_select(PGconn *pg_link, const char *table, zval *ids_array, zval *ret_array, ulong opt, char **sql TSRMLS_DC)
-{
- zval *ids_converted = NULL;
- smart_str querystr = {0};
- int ret = FAILURE;
- PGresult *pg_result;
-
- assert(pg_link != NULL);
- assert(table != NULL);
- assert(Z_TYPE_P(ids_array) == IS_ARRAY);
- assert(Z_TYPE_P(ret_array) == IS_ARRAY);
- assert(!(opt & ~(PGSQL_CONV_OPTS|PGSQL_DML_NO_CONV|PGSQL_DML_EXEC|PGSQL_DML_ASYNC|PGSQL_DML_STRING)));
-
- if (zend_hash_num_elements(Z_ARRVAL_P(ids_array)) == 0) {
- return FAILURE;
- }
-
- if (!(opt & PGSQL_DML_NO_CONV)) {
- MAKE_STD_ZVAL(ids_converted);
- array_init(ids_converted);
- if (php_pgsql_convert(pg_link, table, ids_array, ids_converted, (opt & PGSQL_CONV_OPTS) TSRMLS_CC) == FAILURE) {
- goto cleanup;
- }
- ids_array = ids_converted;
- }
-
- smart_str_appends(&querystr, "SELECT * FROM ");
- smart_str_appends(&querystr, table);
- smart_str_appends(&querystr, " WHERE ");
-
- if (build_assignment_string(&querystr, Z_ARRVAL_P(ids_array), " AND ", sizeof(" AND ")-1 TSRMLS_CC))
- goto cleanup;
-
- smart_str_appendc(&querystr, ';');
- smart_str_0(&querystr);
-
- pg_result = PQexec(pg_link, querystr.c);
- if (PQresultStatus(pg_result) == PGRES_TUPLES_OK) {
- ret = php_pgsql_result2array(pg_result, ret_array TSRMLS_CC);
- } else {
- php_error_docref(NULL TSRMLS_CC, E_NOTICE, "Failed to execute '%s'", querystr.c);
- }
- PQclear(pg_result);
-
-cleanup:
- if (!(opt & PGSQL_DML_NO_CONV)) {
- zval_dtor(ids_converted);
- FREE_ZVAL(ids_converted);
- }
- if (ret == SUCCESS && (opt & PGSQL_DML_STRING)) {
- *sql = querystr.c;
- }
- else {
- smart_str_free(&querystr);
- }
- return ret;
-}
-/* }}} */
-
-/* {{{ proto mixed pg_select(resource db, string table, array ids[, int options])
- Select records that has ids (id=>value) */
-PHP_FUNCTION(pg_select)
-{
- zval *pgsql_link, *ids;
- char *table, *sql = NULL;
- int table_len;
- ulong option = PGSQL_DML_EXEC;
- PGconn *pg_link;
- int id = -1, argc = ZEND_NUM_ARGS();
-
- if (zend_parse_parameters(argc TSRMLS_CC, "rsa|l",
- &pgsql_link, &table, &table_len, &ids, &option) == FAILURE) {
- return;
- }
- if (option & ~(PGSQL_CONV_FORCE_NULL|PGSQL_DML_NO_CONV|PGSQL_DML_EXEC|PGSQL_DML_ASYNC|PGSQL_DML_STRING)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid option is specified");
- RETURN_FALSE;
- }
-
- ZEND_FETCH_RESOURCE2(pg_link, PGconn *, &pgsql_link, id, "PostgreSQL link", le_link, le_plink);
-
- if (php_pgsql_flush_query(pg_link TSRMLS_CC)) {
- php_error_docref(NULL TSRMLS_CC, E_NOTICE, "Detected unhandled result(s) in connection");
- }
- array_init(return_value);
- if (php_pgsql_select(pg_link, table, ids, return_value, option, &sql TSRMLS_CC) == FAILURE) {
- zval_dtor(return_value);
- RETURN_FALSE;
- }
- if (option & PGSQL_DML_STRING) {
- zval_dtor(return_value);
- RETURN_STRING(sql, 0);
- }
- return;
-}
-/* }}} */
-
-#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/pgsql/pgsql.dsp b/ext/pgsql/pgsql.dsp
deleted file mode 100644
index 098469f36d..0000000000
--- a/ext/pgsql/pgsql.dsp
+++ /dev/null
@@ -1,167 +0,0 @@
-# Microsoft Developer Studio Project File - Name="pgsql" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=pgsql - Win32 Debug_TS
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "pgsql.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "pgsql.mak" CFG="pgsql - Win32 Debug_TS"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "pgsql - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "pgsql - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "pgsql - Win32 Release_TS" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "pgsql - Win32 Debug_TS" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "pgsql - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release"
-# PROP Intermediate_Dir "Release"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "PGSQL_EXPORTS" /YX /FD /c
-# ADD CPP /nologo /MD /W3 /GX /O2 /I "..\..\..\php_build\include\pgsql" /I "..\.." /I "..\..\main" /I "..\..\Zend" /I "..\..\TSRM" /D "NDEBUG" /D ZEND_DEBUG=0 /D "PGSQL_EXPORTS" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "ZEND_WIN32" /D "PHP_WIN32" /D "COMPILE_DL_PGSQL" /D HAVE_PGSQL=1 /D "HAVE_PQCMDTUPLES" /D "HAVE_PQCLIENTENCODING" /D "HAVE_PQESCAPE" /D "HAVE_PG_CONFIG_H" /FD /c
-# SUBTRACT CPP /YX
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386
-# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ws2_32.lib libpqdll.lib php5ts.lib /nologo /dll /machine:I386 /nodefaultlib:"msvcrt.lib" /out:"../../Release/pgsql.dll" /libpath:"..\..\..\PostgreSQL\lib" /libpath:"..\..\Release_TS" /libpath:"..\..\Release_TS_Inline"
-
-!ELSEIF "$(CFG)" == "pgsql - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug"
-# PROP Intermediate_Dir "Debug"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "PGSQL_EXPORTS" /YX /FD /GZ /c
-# ADD CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /I "..\..\..\php_build\include\pgsql" /I "..\.." /I "..\..\main" /I "..\..\Zend" /I "..\..\TSRM" /D "_DEBUG" /D ZEND_DEBUG=1 /D "PGSQL_EXPORTS" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "ZEND_WIN32" /D "PHP_WIN32" /D "COMPILE_DL_PGSQL" /D HAVE_PGSQL=1 /D "HAVE_PQCMDTUPLES" /D "HAVE_PQCLIENTENCODING" /D "HAVE_PQESCAPE" /D "HAVE_PG_CONFIG_H" /YX /FD /GZ /c
-# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /nodefaultlib:"msvcrtd.lib" /out:"../../Debug/pgsql.dll" /pdbtype:sept
-
-!ELSEIF "$(CFG)" == "pgsql - Win32 Release_TS"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release_TS"
-# PROP BASE Intermediate_Dir "Release_TS"
-# PROP BASE Ignore_Export_Lib 0
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release_TS"
-# PROP Intermediate_Dir "Release_TS"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MD /W3 /GX /O2 /I "..\.." /I "..\..\Zend" /I "..\..\..\PostgreSQL\include" /I "..\..\..\bindlib_w32" /D "NDEBUG" /D "ZTS" /D "PGSQL_EXPORTS" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "ZEND_WIN32" /D "PHP_WIN32" /D "COMPILE_DL_PGSQL" /D HAVE_PGSQL=1 /D ZTS=1 /FD /c
-# SUBTRACT BASE CPP /YX
-# ADD CPP /nologo /MD /W3 /GX /O2 /I "..\..\..\php_build\include\pgsql" /I "..\.." /I "..\..\main" /I "..\..\Zend" /I "..\..\TSRM" /D "NDEBUG" /D "ZTS" /D ZEND_DEBUG=0 /D "PGSQL_EXPORTS" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "ZEND_WIN32" /D "PHP_WIN32" /D "COMPILE_DL_PGSQL" /D HAVE_PGSQL=1 /D "HAVE_PQCMDTUPLES" /D "HAVE_PQCLIENTENCODING" /D "HAVE_PQESCAPE" /D "HAVE_PG_CONFIG_H" /FR /FD /c
-# SUBTRACT CPP /YX
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ws2_32.lib libpqdll.lib php5ts.lib /nologo /dll /machine:I386 /libpath:"..\..\..\PostgreSQL\lib" /libpath:"..\..\Release_TS"
-# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ws2_32.lib libpq.lib php5ts.lib /nologo /dll /machine:I386 /out:"../../Release_TS/php_pgsql.dll" /libpath:"..\..\..\php_build\postgresql\src\interfaces\libpq\Release" /libpath:"..\..\Release_TS" /libpath:"..\..\Release_TS_Inline"
-
-!ELSEIF "$(CFG)" == "pgsql - Win32 Debug_TS"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug_TS"
-# PROP BASE Intermediate_Dir "Debug_TS"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug_TS"
-# PROP Intermediate_Dir "Debug_TS"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "_DEBUG" /D "PGSQL_EXPORTS" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "ZEND_WIN32" /D "PHP_WIN32" /D "COMPILE_DL_PGSQL" /D HAVE_PGSQL=1 /D ZTS=1 /YX /FD /GZ /c
-# ADD CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /I "..\..\..\php_build\include\pgsql" /I "..\.." /I "..\..\main" /I "..\..\Zend" /I "..\..\TSRM" /D "_DEBUG" /D "ZTS" /D ZEND_DEBUG=1 /D "PGSQL_EXPORTS" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "ZEND_WIN32" /D "PHP_WIN32" /D "COMPILE_DL_PGSQL" /D HAVE_PGSQL=1 /D "HAVE_PQCMDTUPLES" /D "HAVE_PQCLIENTENCODING" /D "HAVE_PQESCAPE" /D "HAVE_PG_CONFIG_H" /YX /FD /GZ /c
-# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib libpq.lib /nologo /dll /debug /machine:I386 /out:"../../Debug_TS/pgsql.dll" /pdbtype:sept
-
-!ENDIF
-
-# Begin Target
-
-# Name "pgsql - Win32 Release"
-# Name "pgsql - Win32 Debug"
-# Name "pgsql - Win32 Release_TS"
-# Name "pgsql - Win32 Debug_TS"
-# Begin Group "Source Files"
-
-# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
-# Begin Source File
-
-SOURCE=.\pgsql.c
-# End Source File
-# End Group
-# Begin Group "Header Files"
-
-# PROP Default_Filter "h;hpp;hxx;hm;inl"
-# Begin Source File
-
-SOURCE=.\php_pgsql.h
-# End Source File
-# End Group
-# End Target
-# End Project
diff --git a/ext/pgsql/pgsql.mak b/ext/pgsql/pgsql.mak
deleted file mode 100644
index 908056acfb..0000000000
--- a/ext/pgsql/pgsql.mak
+++ /dev/null
@@ -1,170 +0,0 @@
-# Temporarily here -- later may go into some batch file
-# which will set this as an environment variable
-PROJECT_ROOT = ..\..
-
-# Module details
-MODULE_NAME = phppgsql
-MODULE_DESC = "PHP 4.3 - PostgreSQL Extension"
-VMAJ = 3
-VMIN = 0
-VREV = 0
-
-#include the common settings
-include $(PROJECT_ROOT)/netware/common.mif
-
-# Build type defaults to 'release'
-ifndef BUILD
-BUILD = release
-endif
-
-# Extensions of all input and output files
-.SUFFIXES:
-.SUFFIXES: .nlm .lib .obj .cpp .c .msg .mlc .mdb .xdc .d
-
-# Source files
-C_SRC = pgsql.c \
- start.c
-
-CPP_SRC_NODIR = $(notdir $(CPP_SRC))
-C_SRC_NODIR = $(notdir $(C_SRC))
-SRC_DIR = $(dir $(CPP_SRC) $(C_SRC))
-
-# Library files
-LIBRARY =
-
-# Destination directories and files
-OBJ_DIR = $(BUILD)
-FINAL_DIR = $(BUILD)
-OBJECTS = $(addprefix $(OBJ_DIR)/,$(CPP_SRC_NODIR:.c=.obj) $(C_SRC_NODIR:.c=.obj))
-DEPDS = $(addprefix $(OBJ_DIR)/,$(CPP_SRC_NODIR:.c=.d) $(C_SRC_NODIR:.c=.d))
-
-# Binary file
-ifndef BINARY
- BINARY=$(FINAL_DIR)\$(MODULE_NAME).nlm
-endif
-
-# Compile flags
-C_FLAGS += -c -maxerrors 25 -msgstyle gcc -wchar_t on -bool on -processor Pentium
-C_FLAGS += -nostdinc -nosyspath
-C_FLAGS += -relax_pointers # To remove type-casting errors
-C_FLAGS += -DNETWARE -DZTS -DNEW_LIBC -DUSE_OLD_FUNCTIONS
-C_FLAGS += -D__BIT_TYPES_DEFINED__ -DCOMPILE_DL_PGSQL=1
-C_FLAGS += -I. -I- -I$(PROJECT_ROOT) -I$(PROJECT_ROOT)/main
-C_FLAGS += -I$(PROJECT_ROOT)/ext/standard -I$(PROJECT_ROOT)/netware
-C_FLAGS += -I$(PROJECT_ROOT)/zend -I$(PROJECT_ROOT)/tsrm
-C_FLAGS += -I$(SDK_DIR)/include -I$(MWCIncludes)
-C_FLAGS += -I$(WINSOCK_DIR)/include/nlm -I$(WINSOCK_DIR)/include
-
-
-# Extra stuff based on debug / release builds
-ifeq '$(BUILD)' 'debug'
- SYM_FILE = $(FINAL_DIR)\$(MODULE_NAME).sym
- C_FLAGS += -inline smart -sym on -sym codeview4 -opt off -opt intrinsics -DDEBUGGING -DDKFBPON
- C_FLAGS += -exc cw -DZEND_DEBUG=1
- LD_FLAGS += -sym on -sym codeview4 -osym $(SYM_FILE)
- export MWLibraryFiles=$(SDK_DIR)/imports/libcpre.o;mwcrtld.lib
-else
- C_FLAGS += -opt speed -inline on -inline smart -inline auto -sym off -opt intrinsics
- C_FLAGS += -opt level=4 -DZEND_DEBUG=0
- LD_FLAGS += -sym off
- export MWLibraryFiles=$(SDK_DIR)/imports/libcpre.o;mwcrtl.lib
-endif
-
-
-# Dependencies
-MODULE = LibC \
- phplib \
- libpq
-IMPORT = @$(SDK_DIR)/imports/libc.imp \
- @$(SDK_DIR)/imports/ws2nlm.imp \
- @$(MPK_DIR)/import/mpkOrg.imp \
- @$(PROJECT_ROOT)/netware/phplib.imp \
- @$(PROJECT_ROOT)/netware/libpq.imp
-EXPORT = ($(MODULE_NAME)) get_module
-API = OutputToScreen
-
-# Virtual paths
-vpath %.cpp .
-vpath %.c . ..\..\netware
-vpath %.obj $(OBJ_DIR)
-
-
-all: prebuild project
-
-.PHONY: all
-
-prebuild:
- @if not exist $(OBJ_DIR) md $(OBJ_DIR)
-
-project: $(BINARY)
- @echo Build complete.
-
-$(OBJ_DIR)/%.d: %.cpp
- @echo Building Dependencies for $(<F)
- @$(CC) -M $< $(C_FLAGS) -o $@
-
-$(OBJ_DIR)/%.d: %.c
- @echo Building Dependencies for $(<F)
- @$(CC) -M $< $(C_FLAGS) -o $@
-
-$(OBJ_DIR)/%.obj: %.cpp
- @echo Compiling $?...
- @$(CC) $< $(C_FLAGS) -o $@
-
-$(OBJ_DIR)/%.obj: %.c
- @echo Compiling $?...
- @$(CC) $< $(C_FLAGS) -o $@
-
-
-$(BINARY): $(OBJECTS)
- @echo Import $(IMPORT) > $(basename $@).def
-ifdef API
- @echo Import $(API) >> $(basename $@).def
-endif
- @echo Module $(MODULE) >> $(basename $@).def
-ifdef EXPORT
- @echo Export $(EXPORT) >> $(basename $@).def
-endif
- @echo AutoUnload >> $(basename $@).def
-ifeq '$(BUILD)' 'debug'
- @echo Debug >> $(basename $@).def
-endif
- @echo Flag_On 0x00000008 >> $(basename $@).def
- @echo Start _LibCPrelude >> $(basename $@).def
- @echo Exit _LibCPostlude >> $(basename $@).def
-
- $(MPKTOOL) $(XDCFLAGS) $(basename $@).xdc
- @echo xdcdata $(basename $@).xdc >> $(basename $@).def
-
- @echo Linking $@...
- @echo $(LD_FLAGS) -commandfile $(basename $@).def > $(basename $@).link
-
- @echo $(LIBRARY) $(OBJECTS) >> $(basename $@).link
-
- @$(LINK) @$(basename $@).link
-
-
-.PHONY: clean
-clean: cleanobj cleanbin
-
-.PHONY: cleand
-cleand:
- @echo Deleting all dependency files...
- -@del "$(OBJ_DIR)\*.d"
-
-.PHONY: cleanobj
-cleanobj:
- @echo Deleting all object files...
- -@del "$(OBJ_DIR)\*.obj"
-
-.PHONY: cleanbin
-cleanbin:
- @echo Deleting binary files...
- -@del "$(FINAL_DIR)\$(MODULE_NAME).nlm"
- @echo Deleting MAP, DEF files, etc....
- -@del "$(FINAL_DIR)\$(MODULE_NAME).map"
- -@del "$(FINAL_DIR)\$(MODULE_NAME).def"
- -@del "$(FINAL_DIR)\$(MODULE_NAME).link"
-ifeq '$(BUILD)' 'debug'
- -@del $(FINAL_DIR)\$(MODULE_NAME).sym
-endif
diff --git a/ext/pgsql/php_pgsql.h b/ext/pgsql/php_pgsql.h
deleted file mode 100644
index f25acc9072..0000000000
--- a/ext/pgsql/php_pgsql.h
+++ /dev/null
@@ -1,271 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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. |
- +----------------------------------------------------------------------+
- | Authors: Zeev Suraski <zeev@zend.com> |
- | Jouni Ahto <jouni.ahto@exdec.fi> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-#ifndef PHP_PGSQL_H
-#define PHP_PGSQL_H
-
-#if HAVE_PGSQL
-
-extern zend_module_entry pgsql_module_entry;
-#define pgsql_module_ptr &pgsql_module_entry
-
-#ifdef PHP_PGSQL_PRIVATE
-#undef SOCKET_SIZE_TYPE
-#include <libpq-fe.h>
-
-#ifdef PHP_WIN32
-#define INV_WRITE 0x00020000
-#define INV_READ 0x00040000
-#undef PHP_PGSQL_API
-#ifdef PGSQL_EXPORTS
-#define PHP_PGSQL_API __declspec(dllexport)
-#else
-#define PHP_PGSQL_API __declspec(dllimport)
-#endif
-#else
-#include <libpq/libpq-fs.h>
-#define PHP_PGSQL_API /* nothing special */
-#endif
-
-#ifdef HAVE_PG_CONFIG_H
-#include <pg_config.h>
-#endif
-
-#ifdef HAVE_PGSQL_WITH_MULTIBYTE_SUPPORT
-const char * pg_encoding_to_char(int encoding);
-#endif
-
-PHP_MINIT_FUNCTION(pgsql);
-PHP_MSHUTDOWN_FUNCTION(pgsql);
-PHP_RINIT_FUNCTION(pgsql);
-PHP_RSHUTDOWN_FUNCTION(pgsql);
-PHP_MINFO_FUNCTION(pgsql);
-/* connection functions */
-PHP_FUNCTION(pg_connect);
-PHP_FUNCTION(pg_pconnect);
-PHP_FUNCTION(pg_close);
-PHP_FUNCTION(pg_connection_reset);
-PHP_FUNCTION(pg_connection_status);
-PHP_FUNCTION(pg_connection_busy);
-PHP_FUNCTION(pg_host);
-PHP_FUNCTION(pg_dbname);
-PHP_FUNCTION(pg_port);
-PHP_FUNCTION(pg_tty);
-PHP_FUNCTION(pg_options);
-PHP_FUNCTION(pg_version);
-PHP_FUNCTION(pg_ping);
-#if HAVE_PQPARAMETERSTATUS
-PHP_FUNCTION(pg_parameter_status);
-#endif
-/* query functions */
-PHP_FUNCTION(pg_query);
-PHP_FUNCTION(pg_send_query);
-PHP_FUNCTION(pg_cancel_query);
-/* result functions */
-PHP_FUNCTION(pg_fetch_assoc);
-PHP_FUNCTION(pg_fetch_array);
-PHP_FUNCTION(pg_fetch_object);
-PHP_FUNCTION(pg_fetch_result);
-PHP_FUNCTION(pg_fetch_row);
-PHP_FUNCTION(pg_fetch_all);
-PHP_FUNCTION(pg_affected_rows);
-PHP_FUNCTION(pg_get_result);
-PHP_FUNCTION(pg_result_seek);
-PHP_FUNCTION(pg_result_status);
-PHP_FUNCTION(pg_free_result);
-PHP_FUNCTION(pg_last_oid);
-PHP_FUNCTION(pg_num_rows);
-PHP_FUNCTION(pg_num_fields);
-PHP_FUNCTION(pg_field_name);
-PHP_FUNCTION(pg_field_num);
-PHP_FUNCTION(pg_field_size);
-PHP_FUNCTION(pg_field_type);
-PHP_FUNCTION(pg_field_prtlen);
-PHP_FUNCTION(pg_field_is_null);
-/* async message functions */
-PHP_FUNCTION(pg_get_notify);
-PHP_FUNCTION(pg_get_pid);
-/* error message functions */
-PHP_FUNCTION(pg_result_error);
-PHP_FUNCTION(pg_last_error);
-PHP_FUNCTION(pg_last_notice);
-/* copy functions */
-PHP_FUNCTION(pg_put_line);
-PHP_FUNCTION(pg_end_copy);
-PHP_FUNCTION(pg_copy_to);
-PHP_FUNCTION(pg_copy_from);
-/* large object functions */
-PHP_FUNCTION(pg_lo_create);
-PHP_FUNCTION(pg_lo_unlink);
-PHP_FUNCTION(pg_lo_open);
-PHP_FUNCTION(pg_lo_close);
-PHP_FUNCTION(pg_lo_read);
-PHP_FUNCTION(pg_lo_write);
-PHP_FUNCTION(pg_lo_read_all);
-PHP_FUNCTION(pg_lo_import);
-PHP_FUNCTION(pg_lo_export);
-PHP_FUNCTION(pg_lo_seek);
-PHP_FUNCTION(pg_lo_tell);
-
-/* debugging functions */
-PHP_FUNCTION(pg_trace);
-PHP_FUNCTION(pg_untrace);
-
-/* utility functions */
-PHP_FUNCTION(pg_client_encoding);
-PHP_FUNCTION(pg_set_client_encoding);
-#if HAVE_PQESCAPE
-PHP_FUNCTION(pg_escape_string);
-PHP_FUNCTION(pg_escape_bytea);
-PHP_FUNCTION(pg_unescape_bytea);
-#endif
-
-/* misc functions */
-PHP_FUNCTION(pg_meta_data);
-PHP_FUNCTION(pg_convert);
-PHP_FUNCTION(pg_insert);
-PHP_FUNCTION(pg_update);
-PHP_FUNCTION(pg_delete);
-PHP_FUNCTION(pg_select);
-
-/* connection options - ToDo: Add async connection option */
-#define PGSQL_CONNECT_FORCE_NEW (1<<1)
-/* php_pgsql_convert options */
-#define PGSQL_CONV_IGNORE_DEFAULT (1<<1) /* Do not use DEAFULT value by removing field from returned array */
-#define PGSQL_CONV_FORCE_NULL (1<<2) /* Convert to NULL if string is null string */
-#define PGSQL_CONV_IGNORE_NOT_NULL (1<<3) /* Ignore NOT NULL constraints */
-#define PGSQL_CONV_OPTS (PGSQL_CONV_IGNORE_DEFAULT|PGSQL_CONV_FORCE_NULL|PGSQL_CONV_IGNORE_NOT_NULL)
-/* php_pgsql_insert/update/select/delete options */
-#define PGSQL_DML_NO_CONV (1<<8) /* Do not call php_pgsql_convert() */
-#define PGSQL_DML_EXEC (1<<9) /* Execute query */
-#define PGSQL_DML_ASYNC (1<<10) /* Do async query */
-#define PGSQL_DML_STRING (1<<11) /* Return query string */
-
-/* exported functions */
-PHP_PGSQL_API int php_pgsql_meta_data(PGconn *pg_link, const char *table_name, zval *meta TSRMLS_DC);
-PHP_PGSQL_API int php_pgsql_convert(PGconn *pg_link, const char *table_name, const zval *values, zval *result, ulong opt TSRMLS_DC);
-PHP_PGSQL_API int php_pgsql_insert(PGconn *pg_link, const char *table, zval *values, ulong opt, char **sql TSRMLS_DC);
-PHP_PGSQL_API int php_pgsql_update(PGconn *pg_link, const char *table, zval *values, zval *ids, ulong opt , char **sql TSRMLS_DC);
-PHP_PGSQL_API int php_pgsql_delete(PGconn *pg_link, const char *table, zval *ids, ulong opt, char **sql TSRMLS_DC);
-PHP_PGSQL_API int php_pgsql_select(PGconn *pg_link, const char *table, zval *ids, zval *ret_array, ulong opt, char **sql TSRMLS_DC);
-PHP_PGSQL_API int php_pgsql_result2array(PGresult *pg_result, zval *ret_array TSRMLS_DC);
-
-/* internal functions */
-static void php_pgsql_do_connect(INTERNAL_FUNCTION_PARAMETERS,int persistent);
-static void php_pgsql_get_link_info(INTERNAL_FUNCTION_PARAMETERS, int entry_type);
-static void php_pgsql_get_result_info(INTERNAL_FUNCTION_PARAMETERS, int entry_type);
-static char *get_field_name(PGconn *pgsql, Oid oid, HashTable *list TSRMLS_DC);
-static void php_pgsql_get_field_info(INTERNAL_FUNCTION_PARAMETERS, int entry_type);
-static void php_pgsql_data_info(INTERNAL_FUNCTION_PARAMETERS, int entry_type);
-static void php_pgsql_do_async(INTERNAL_FUNCTION_PARAMETERS,int entry_type);
-
-typedef enum _php_pgsql_data_type {
- /* boolean */
- PG_BOOL,
- /* number */
- PG_OID,
- PG_INT2,
- PG_INT4,
- PG_INT8,
- PG_FLOAT4,
- PG_FLOAT8,
- PG_NUMERIC,
- PG_MONEY,
- /* character */
- PG_TEXT,
- PG_CHAR,
- PG_VARCHAR,
- /* time and interval */
- PG_UNIX_TIME,
- PG_UNIX_TIME_INTERVAL,
- PG_DATE,
- PG_TIME,
- PG_TIME_WITH_TIMEZONE,
- PG_TIMESTAMP,
- PG_TIMESTAMP_WITH_TIMEZONE,
- PG_INTERVAL,
- /* binary */
- PG_BYTEA,
- /* network */
- PG_CIDR,
- PG_INET,
- PG_MACADDR,
- /* bit */
- PG_BIT,
- PG_VARBIT,
- /* geometoric */
- PG_LINE,
- PG_LSEG,
- PG_POINT,
- PG_BOX,
- PG_PATH,
- PG_POLYGON,
- PG_CIRCLE,
- /* unkown and system */
- PG_UNKNOWN
-} php_pgsql_data_type;
-
-typedef struct pgLofp {
- PGconn *conn;
- int lofd;
-} pgLofp;
-
-typedef struct _php_pgsql_result_handle {
- PGconn *conn;
- PGresult *result;
- int row;
-} pgsql_result_handle;
-
-typedef struct _php_pgsql_notice {
- char *message;
- size_t len;
-} php_pgsql_notice;
-
-ZEND_BEGIN_MODULE_GLOBALS(pgsql)
- long default_link; /* default link when connection is omitted */
- long num_links,num_persistent;
- long max_links,max_persistent;
- long allow_persistent;
- long auto_reset_persistent;
- int le_lofp,le_string;
- int ignore_notices,log_notices;
- HashTable notices; /* notice message for each connection */
-ZEND_END_MODULE_GLOBALS(pgsql)
-
-ZEND_EXTERN_MODULE_GLOBALS(pgsql)
-
-#ifdef ZTS
-# define PGG(v) TSRMG(pgsql_globals_id, zend_pgsql_globals *, v)
-#else
-# define PGG(v) (pgsql_globals.v)
-#endif
-
-#endif
-
-#else
-
-#define pgsql_module_ptr NULL
-
-#endif
-
-#define phpext_pgsql_ptr pgsql_module_ptr
-
-#endif /* PHP_PGSQL_H */
diff --git a/ext/pgsql/tests/01createdb.phpt b/ext/pgsql/tests/01createdb.phpt
deleted file mode 100644
index 15849396c6..0000000000
--- a/ext/pgsql/tests/01createdb.phpt
+++ /dev/null
@@ -1,28 +0,0 @@
---TEST--
-PostgreSQL create db
---SKIPIF--
-<?php include("skipif.inc"); ?>
---FILE--
-<?php
-// create test table
-
-include('config.inc');
-
-$db = pg_connect($conn_str);
-if (!@pg_num_rows(@pg_query($db, "SELECT * FROM ".$table_name)))
-{
- @pg_query($db,$table_def); // Create table here
- for ($i=0; $i < $num_test_record; $i++) {
- pg_query($db,"INSERT INTO ".$table_name." VALUES ($i, 'ABC');");
- }
-}
-else {
- echo pg_last_error()."\n";
-}
-
-pg_close($db);
-
-echo "OK";
-?>
---EXPECT--
-OK
diff --git a/ext/pgsql/tests/02connection.phpt b/ext/pgsql/tests/02connection.phpt
deleted file mode 100644
index 4f21fcdf91..0000000000
--- a/ext/pgsql/tests/02connection.phpt
+++ /dev/null
@@ -1,53 +0,0 @@
---TEST--
-PostgreSQL connection
---SKIPIF--
-<?php include("skipif.inc"); ?>
---FILE--
-<?php
-// connection function tests
-
-include('config.inc');
-
-$db = pg_pconnect($conn_str);
-var_dump($db);
-
-if (pg_connection_status($db) != PGSQL_CONNECTION_OK)
-{
- echo "pg_connection_status() error\n";
-}
-if (!pg_connection_reset($db))
-{
- echo "pg_connection_reset() error\n";
-}
-if (pg_connection_busy($db))
-{
- echo "pg_connection_busy() error\n";
-}
-if (!pg_host($db))
-{
- echo "pg_host() error\n";
-}
-if (!pg_dbname($db))
-{
- echo "pg_dbname() error\n";
-}
-if (!pg_port($db))
-{
- echo "pg_port() error\n";
-}
-if (pg_tty($db))
-{
- echo "pg_tty() error\n";
-}
-if (pg_options($db))
-{
- echo "pg_options() error\n";
-}
-
-pg_close($db);
-
-?>
-===DONE===
---EXPECTF--
-resource(%d) of type (pgsql link%s)
-===DONE===
diff --git a/ext/pgsql/tests/03sync_query.phpt b/ext/pgsql/tests/03sync_query.phpt
deleted file mode 100644
index 96827fe5a2..0000000000
--- a/ext/pgsql/tests/03sync_query.phpt
+++ /dev/null
@@ -1,53 +0,0 @@
---TEST--
-PostgreSQL sync query
---SKIPIF--
-<?php include("skipif.inc"); ?>
---FILE--
-<?php
-
-include('config.inc');
-
-$db = pg_connect($conn_str);
-
-$result = pg_query($db, "SELECT * FROM ".$table_name.";");
-if (!($rows = pg_num_rows($result)))
-{
- echo "pg_num_row() error\n";
-}
-for ($i=0; $i < $rows; $i++)
-{
- pg_fetch_array($result, $i, PGSQL_NUM);
-}
-for ($i=0; $i < $rows; $i++)
-{
- pg_fetch_object($result);
-}
-for ($i=0; $i < $rows; $i++)
-{
- pg_fetch_row($result, $i);
-}
-for ($i=0; $i < $rows; $i++)
-{
- pg_fetch_result($result, $i, 0);
-}
-
-pg_result_error($result);
-pg_num_rows(pg_query($db, "SELECT * FROM ".$table_name.";"));
-pg_num_fields(pg_query($db, "SELECT * FROM ".$table_name.";"));
-pg_field_name($result, 0);
-pg_field_num($result, $field_name);
-pg_field_size($result, 0);
-pg_field_type($result, 0);
-pg_field_prtlen($result, 0);
-pg_field_is_null($result, 0);
-
-$result = pg_query($db, "INSERT INTO ".$table_name." VALUES (9999, 'ABC');");
-pg_last_oid($result);
-
-pg_free_result($result);
-pg_close($db);
-
-echo "OK";
-?>
---EXPECT--
-OK
diff --git a/ext/pgsql/tests/04async_query.phpt b/ext/pgsql/tests/04async_query.phpt
deleted file mode 100644
index 7711240a79..0000000000
--- a/ext/pgsql/tests/04async_query.phpt
+++ /dev/null
@@ -1,65 +0,0 @@
---TEST--
-PostgreSQL async query
---SKIPIF--
-<?php include("skipif.inc"); ?>
---FILE--
-<?php
-
-include('config.inc');
-
-$db = pg_connect($conn_str);
-
-if (!pg_send_query($db, "SELECT * FROM ".$table_name.";")) {
- echo "pg_send_query() error\n";
-}
-while(pg_connection_busy($db)); // busy wait: intended
-if (pg_connection_status($db) === PGSQL_CONNECTION_BAD) {
- echo "pg_connection_status() error\n";
-}
-if (!($result = pg_get_result($db)))
-{
- echo "pg_get_result() error\n";
-}
-
-if (!($rows = pg_num_rows($result))) {
- echo "pg_num_rows() error\n";
-}
-for ($i=0; $i < $rows; $i++)
-{
- pg_fetch_array($result, $i, PGSQL_NUM);
-}
-for ($i=0; $i < $rows; $i++)
-{
- pg_fetch_object($result);
-}
-for ($i=0; $i < $rows; $i++)
-{
- pg_fetch_row($result, $i);
-}
-for ($i=0; $i < $rows; $i++)
-{
- pg_fetch_result($result, $i, 0);
-}
-
-pg_num_rows(pg_query($db, "SELECT * FROM ".$table_name.";"));
-pg_num_fields(pg_query($db, "SELECT * FROM ".$table_name.";"));
-pg_field_name($result, 0);
-pg_field_num($result, $field_name);
-pg_field_size($result, 0);
-pg_field_type($result, 0);
-pg_field_prtlen($result, 0);
-pg_field_is_null($result, 0);
-
-if (!pg_send_query($db, "INSERT INTO ".$table_name." VALUES (8888, 'GGG');"))
-{
- echo "pg_send_query() error\n";
-}
-
-pg_last_oid($result);
-pg_free_result($result);
-
-
-echo "OK";
-?>
---EXPECT--
-OK
diff --git a/ext/pgsql/tests/05large_object.phpt b/ext/pgsql/tests/05large_object.phpt
deleted file mode 100644
index a6f30195ae..0000000000
--- a/ext/pgsql/tests/05large_object.phpt
+++ /dev/null
@@ -1,82 +0,0 @@
---TEST--
-PostgreSQL large object
---SKIPIF--
-<?php include("skipif.inc"); ?>
---FILE--
-<?php
-
-include('config.inc');
-
-$db = pg_connect($conn_str);
-
-echo "create/write/close LO\n";
-pg_exec ($db, "begin");
-$oid = pg_lo_create ($db);
-if (!$oid) echo ("pg_lo_create() error\n");
-$handle = pg_lo_open ($db, $oid, "w");
-if (!$handle) echo ("pg_lo_open() error\n");
-pg_lo_write ($handle, "large object data\n");
-pg_lo_close ($handle);
-pg_exec ($db, "commit");
-
-echo "open/read/tell/seek/close LO\n";
-pg_exec ($db, "begin");
-$handle = pg_lo_open ($db, $oid, "w");
-pg_lo_read($handle, 100);
-pg_lo_tell($handle);
-pg_lo_seek($handle, 2);
-pg_lo_close($handle);
-pg_exec ($db, "commit");
-
-echo "open/read_all/close LO\n";
-pg_exec ($db, "begin");
-$handle = pg_lo_open ($db, $oid, "w");
-pg_lo_read_all($handle);
-if (pg_last_error()) echo "pg_lo_read_all() error\n".pg_last_error();
-pg_lo_close($handle);
-pg_exec ($db, "commit");
-
-echo "unlink LO\n";
-pg_exec ($db, "begin");
-pg_lo_unlink($db, $oid) or print("pg_lo_unlink() error 1\n");
-pg_exec ($db, "commit");
-
-// more pg_lo_unlink() tests
-echo "Test without connection\n";
-pg_exec ($db, "begin");
-$oid = pg_lo_create ($db) or print("pg_lo_create() error\n");
-pg_lo_unlink($oid) or print("pg_lo_unlink() error 2\n");
-pg_exec ($db, "commit");
-
-echo "Test with string oid value\n";
-pg_exec ($db, "begin");
-$oid = pg_lo_create ($db) or print("pg_lo_create() error\n");
-pg_lo_unlink($db, (string)$oid) or print("pg_lo_unlink() error 3\n");
-pg_exec ($db, "commit");
-
-echo "import/export LO\n";
-$path = dirname(__FILE__) . '/';
-pg_query($db, 'begin');
-$oid = pg_lo_import($db, $path . 'php.gif');
-pg_query($db, 'commit');
-pg_query($db, 'begin');
-@unlink($path . 'php.gif.exported');
-pg_lo_export($oid, $path . 'php.gif.exported', $db);
-if (!file_exists($path . 'php.gif.exported')) {
- echo "Export failed\n";
-}
-@unlink($path . 'php.gif.exported');
-pg_query($db, 'commit');
-
-echo "OK";
-?>
---EXPECT--
-create/write/close LO
-open/read/tell/seek/close LO
-open/read_all/close LO
-large object data
-unlink LO
-Test without connection
-Test with string oid value
-import/export LO
-OK
diff --git a/ext/pgsql/tests/06copy.phpt b/ext/pgsql/tests/06copy.phpt
deleted file mode 100644
index e5823c43a5..0000000000
--- a/ext/pgsql/tests/06copy.phpt
+++ /dev/null
@@ -1,15 +0,0 @@
---TEST--
-PostgreSQL copy functions
---SKIPIF--
-<?php include("skipif.inc"); ?>
---FILE--
-<?php
-
-include('config.inc');
-
-
-echo "OK";
-
-?>
---EXPECT--
-OK
diff --git a/ext/pgsql/tests/07optional.phpt b/ext/pgsql/tests/07optional.phpt
deleted file mode 100644
index e73a9cffe0..0000000000
--- a/ext/pgsql/tests/07optional.phpt
+++ /dev/null
@@ -1,19 +0,0 @@
---TEST--
-PostgreSQL optional functions
---SKIPIF--
-<?php include("skipif.inc"); ?>
---FILE--
-<?php
-// optional functions
-
-include('config.inc');
-
-$db = pg_connect($conn_str);
-$enc = pg_client_encoding($db);
-
-pg_set_client_encoding($db, $enc);
-
-echo "OK";
-?>
---EXPECT--
-OK
diff --git a/ext/pgsql/tests/08escape.phpt b/ext/pgsql/tests/08escape.phpt
deleted file mode 100644
index c5a3877e37..0000000000
--- a/ext/pgsql/tests/08escape.phpt
+++ /dev/null
@@ -1,69 +0,0 @@
---TEST--
-PostgreSQL escape functions
---SKIPIF--
-<?php include("skipif.inc"); ?>
---FILE--
-<?php
-
-include 'config.inc';
-define('FILE_NAME', dirname(__FILE__) . '/php.gif');
-
-// pg_escape_string() test
-$before = "ABC\\ABC\'";
-$expect = "ABC\\\\ABC\\'";
-$after = pg_escape_string($before);
-if ($expect === $after) {
- echo "pg_escape_string() is Ok\n";
-}
-else {
- echo "pg_escape_string() is NOT Ok\n";
- var_dump($before);
- var_dump($after);
- var_dump($expect);
-}
-
-// pg_escape_bytea() test
-$before = "ABC\\ABC";
-$expect = "ABC\\\\\\\\ABC";
-$after = pg_escape_bytea($before);
-if ($expect === $after) {
- echo "pg_escape_bytea() is Ok\n";
-}
-else {
- echo "pg_escape_byte() is NOT Ok\n";
- var_dump($before);
- var_dump($after);
- var_dump($expect);
-}
-
-// Test using database
-$data = file_get_contents(FILE_NAME);
-$db = pg_connect($conn_str);
-
-// Insert binary to DB
-$escaped_data = pg_escape_bytea($data);
-pg_query("DELETE FROM ".$table_name." WHERE num = -9999;");
-$sql = "INSERT INTO ".$table_name." (num, bin) VALUES (-9999, CAST ('".$escaped_data."' AS BYTEA));";
-pg_query($db, $sql);
-
-// Retrieve binary from DB
-$sql = "SELECT bin::bytea FROM ".$table_name." WHERE num = -9999";
-$result = pg_query($db, $sql);
-$row = pg_fetch_array($result, 0, PGSQL_ASSOC);
-
-// Compare
-// Need to wait PostgreSQL 7.3.x for PQunescapeBytea()
-// if ($data === pg_unescape_bytea($row['bin'])) {
-// echo "pg_escape_bytea() actually works with databse\n";
-// }
-// else {
-// echo "pg_escape_bytea() is broken\n";
-// }
-
-?>
---EXPECT--
-pg_escape_string() is NOT Ok
-string(9) "ABC\ABC\'"
-string(12) "ABC\\ABC\\''"
-string(10) "ABC\\ABC\'"
-pg_escape_bytea() is Ok
diff --git a/ext/pgsql/tests/09notice.phpt b/ext/pgsql/tests/09notice.phpt
deleted file mode 100644
index ccb0c80823..0000000000
--- a/ext/pgsql/tests/09notice.phpt
+++ /dev/null
@@ -1,28 +0,0 @@
---TEST--
-PostgreSQL notice function
---SKIPIF--
-<?php include("skipif.inc"); ?>
---INI--
-pgsql.log_notice=1
-pgsql.ignore_notices=0
---FILE--
-<?php
-include 'config.inc';
-
-$db = pg_connect($conn_str);
-pg_query($db, "BEGIN;");
-pg_query($db, "BEGIN;");
-
-$msg = pg_last_notice($db);
-if ($msg === FALSE) {
- echo "Cannot find notice message in hash\n";
- var_dump($msg);
-}
-echo $msg."\n";
-echo "pg_last_notice() is Ok\n";
-
-?>
---EXPECTF--
-Notice: pg_query(): %s already a transaction in progress in %s on line %d
-%s already a transaction in progress
-pg_last_notice() is Ok
diff --git a/ext/pgsql/tests/10pg_convert.phpt b/ext/pgsql/tests/10pg_convert.phpt
deleted file mode 100644
index b88b8e5798..0000000000
--- a/ext/pgsql/tests/10pg_convert.phpt
+++ /dev/null
@@ -1,26 +0,0 @@
---TEST--
-PostgreSQL pg_convert()
---SKIPIF--
-<?php include("skipif.inc"); ?>
---FILE--
-<?php
-error_reporting(E_ALL);
-
-include 'config.inc';
-
-$db = pg_connect($conn_str);
-
-$fields = array('num'=>'1234', 'str'=>'AAA', 'bin'=>'BBB');
-$converted = pg_convert($db, $table_name, $fields);
-
-var_dump($converted);
-?>
---EXPECT--
-array(3) {
- ["num"]=>
- string(4) "1234"
- ["str"]=>
- string(5) "'AAA'"
- ["bin"]=>
- string(5) "'BBB'"
-}
diff --git a/ext/pgsql/tests/11pg_meta_data.phpt b/ext/pgsql/tests/11pg_meta_data.phpt
deleted file mode 100644
index a7f8ed47fc..0000000000
--- a/ext/pgsql/tests/11pg_meta_data.phpt
+++ /dev/null
@@ -1,64 +0,0 @@
---TEST--
-PostgreSQL pg_metadata()
---SKIPIF--
-<?php include("skipif.inc"); ?>
---FILE--
-<?php
-error_reporting(E_ALL);
-
-include 'config.inc';
-
-$db = pg_connect($conn_str);
-
-$meta = pg_meta_data($db, $table_name);
-
-var_dump($meta);
-?>
---EXPECT--
-array(3) {
- ["num"]=>
- array(6) {
- ["num"]=>
- int(1)
- ["type"]=>
- string(4) "int4"
- ["len"]=>
- int(4)
- ["not null"]=>
- bool(false)
- ["has default"]=>
- bool(false)
- ["array dims"]=>
- int(0)
- }
- ["str"]=>
- array(6) {
- ["num"]=>
- int(2)
- ["type"]=>
- string(4) "text"
- ["len"]=>
- int(-1)
- ["not null"]=>
- bool(false)
- ["has default"]=>
- bool(false)
- ["array dims"]=>
- int(0)
- }
- ["bin"]=>
- array(6) {
- ["num"]=>
- int(3)
- ["type"]=>
- string(5) "bytea"
- ["len"]=>
- int(-1)
- ["not null"]=>
- bool(false)
- ["has default"]=>
- bool(false)
- ["array dims"]=>
- int(0)
- }
-}
diff --git a/ext/pgsql/tests/12pg_insert.phpt b/ext/pgsql/tests/12pg_insert.phpt
deleted file mode 100644
index 8d98f220fd..0000000000
--- a/ext/pgsql/tests/12pg_insert.phpt
+++ /dev/null
@@ -1,21 +0,0 @@
---TEST--
-PostgreSQL pg_insert()
---SKIPIF--
-<?php include("skipif.inc"); ?>
---FILE--
-<?php
-error_reporting(E_ALL);
-
-include 'config.inc';
-
-$db = pg_connect($conn_str);
-$fields = array('num'=>'1234', 'str'=>'AAA', 'bin'=>'BBB');
-
-pg_insert($db, $table_name, $fields) or print "Error in test 1\n";
-echo pg_insert($db, $table_name, $fields, PGSQL_DML_STRING)."\n";
-
-echo "Ok\n";
-?>
---EXPECT--
-INSERT INTO php_pgsql_test (num,str,bin) VALUES (1234,'AAA','BBB');
-Ok
diff --git a/ext/pgsql/tests/13pg_select.phpt b/ext/pgsql/tests/13pg_select.phpt
deleted file mode 100644
index 55e88db731..0000000000
--- a/ext/pgsql/tests/13pg_select.phpt
+++ /dev/null
@@ -1,34 +0,0 @@
---TEST--
-PostgreSQL pg_select()
---SKIPIF--
-<?php include("skipif.inc"); ?>
---FILE--
-<?php
-error_reporting(E_ALL);
-
-include 'config.inc';
-
-$db = pg_connect($conn_str);
-$fields = array('num'=>'1234', 'str'=>'ABC', 'bin'=>'XYZ');
-$ids = array('num'=>'1234');
-
-$res = pg_select($db, $table_name, $ids) or print "Error\n";
-var_dump($res);
-echo pg_select($db, $table_name, $ids, PGSQL_DML_STRING)."\n";
-echo "Ok\n";
-
-?>
---EXPECT--
-array(1) {
- [0]=>
- array(3) {
- ["num"]=>
- string(4) "1234"
- ["str"]=>
- string(3) "AAA"
- ["bin"]=>
- string(3) "BBB"
- }
-}
-SELECT * FROM php_pgsql_test WHERE num=1234;
-Ok
diff --git a/ext/pgsql/tests/14pg_update.phpt b/ext/pgsql/tests/14pg_update.phpt
deleted file mode 100644
index ef8d7e49bd..0000000000
--- a/ext/pgsql/tests/14pg_update.phpt
+++ /dev/null
@@ -1,22 +0,0 @@
---TEST--
-PostgreSQL pg_update()
---SKIPIF--
-<?php include("skipif.inc"); ?>
---FILE--
-<?php
-error_reporting(E_ALL);
-
-include 'config.inc';
-
-$db = pg_connect($conn_str);
-$fields = array('num'=>'1234', 'str'=>'ABC', 'bin'=>'XYZ');
-$ids = array('num'=>'1234');
-
-pg_update($db, $table_name, $fields, $ids) or print "Error in test 1\n";
-echo pg_update($db, $table_name, $fields, $ids, PGSQL_DML_STRING)."\n";
-
-echo "Ok\n";
-?>
---EXPECT--
-UPDATE php_pgsql_test SET num=1234,str='ABC',bin='XYZ' WHERE num=1234;
-Ok
diff --git a/ext/pgsql/tests/15pg_delete.phpt b/ext/pgsql/tests/15pg_delete.phpt
deleted file mode 100644
index e35f4ba78e..0000000000
--- a/ext/pgsql/tests/15pg_delete.phpt
+++ /dev/null
@@ -1,23 +0,0 @@
---TEST--
-PostgreSQL pg_delete()
---SKIPIF--
-<?php include("skipif.inc"); ?>
---FILE--
-<?php
-error_reporting(E_ALL);
-
-include 'config.inc';
-
-$db = pg_connect($conn_str);
-
-$fields = array('num'=>'1234', 'str'=>'XXX', 'bin'=>'YYY');
-$ids = array('num'=>'1234');
-if (!pg_delete($db, $table_name, $ids)) {
- echo "Error\n";
-}
-else {
- echo "Ok\n";
-}
-?>
---EXPECT--
-Ok
diff --git a/ext/pgsql/tests/16pg_result_status.phpt b/ext/pgsql/tests/16pg_result_status.phpt
deleted file mode 100644
index 268dc9fd64..0000000000
--- a/ext/pgsql/tests/16pg_result_status.phpt
+++ /dev/null
@@ -1,19 +0,0 @@
---TEST--
-PostgreSQL pg_result_status()
---SKIPIF--
-<?php include("skipif.inc"); ?>
---FILE--
-<?php
-include 'config.inc';
-
-$db = pg_connect($conn_str);
-
-$sql = "SELECT * FROM ".$table_name." WHERE num = -2";
-$result = pg_query($db, "BEGIN;END");
-
-echo pg_result_status($result)."\n";
-echo pg_result_status($result, PGSQL_STATUS_STRING)."\n";
-?>
---EXPECT--
-1
-COMMIT
diff --git a/ext/pgsql/tests/17result.phpt b/ext/pgsql/tests/17result.phpt
deleted file mode 100644
index c3f9959aa2..0000000000
--- a/ext/pgsql/tests/17result.phpt
+++ /dev/null
@@ -1,67 +0,0 @@
---TEST--
-PostgreSQL pg_fetch_*() functions
---SKIPIF--
-<?php include("skipif.inc"); ?>
---FILE--
-<?php
-error_reporting(E_ALL);
-
-include 'config.inc';
-
-$db = pg_connect($conn_str);
-
-$sql = "SELECT * FROM $table_name";
-$result = pg_query($db, $sql) or die('Cannot qeury db');
-$rows = pg_num_rows($result);
-
-var_dump(pg_result_seek($result, 1));
-var_dump(pg_fetch_object($result));
-var_dump(pg_fetch_array($result, 1));
-var_dump(pg_fetch_row($result, 1));
-var_dump(pg_fetch_assoc($result, 1));
-var_dump(pg_result_seek($result, 0));
-
-echo "Ok\n";
-?>
---EXPECT--
-bool(true)
-object(stdClass)#1 (3) {
- ["num"]=>
- string(1) "1"
- ["str"]=>
- string(3) "ABC"
- ["bin"]=>
- NULL
-}
-array(6) {
- [0]=>
- string(1) "1"
- ["num"]=>
- string(1) "1"
- [1]=>
- string(3) "ABC"
- ["str"]=>
- string(3) "ABC"
- [2]=>
- NULL
- ["bin"]=>
- NULL
-}
-array(3) {
- [0]=>
- string(1) "1"
- [1]=>
- string(3) "ABC"
- [2]=>
- NULL
-}
-array(3) {
- ["num"]=>
- string(1) "1"
- ["str"]=>
- string(3) "ABC"
- ["bin"]=>
- NULL
-}
-bool(true)
-Ok
diff --git a/ext/pgsql/tests/18pg_escape_bytea.phpt b/ext/pgsql/tests/18pg_escape_bytea.phpt
deleted file mode 100644
index 43f98c4467..0000000000
--- a/ext/pgsql/tests/18pg_escape_bytea.phpt
+++ /dev/null
@@ -1,28 +0,0 @@
---TEST--
-PostgreSQL pg_escape_bytea() functions
---SKIPIF--
-<?php include("skipif.inc"); ?>
---FILE--
-<?php
-// optional functions
-
-include('config.inc');
-
-$image = file_get_contents(dirname(__FILE__) . '/php.gif');
-$esc_image = pg_escape_bytea($image);
-
-$db = pg_connect($conn_str);
-pg_query($db, 'INSERT INTO '.$table_name.' (num, bin) VALUES (9876, \''.$esc_image.'\');');
-$result = pg_query($db, 'SELECT * FROM '.$table_name.' WHERE num = 9876');
-$rows = pg_fetch_all($result);
-$unesc_image = pg_unescape_bytea($rows[0]['bin']);
-
-if ($unesc_image !== $image) {
- echo "NG";
-}
-else {
- echo "OK";
-}
-?>
---EXPECT--
-OK
diff --git a/ext/pgsql/tests/19pg_ping.phpt b/ext/pgsql/tests/19pg_ping.phpt
deleted file mode 100644
index 9059bde470..0000000000
--- a/ext/pgsql/tests/19pg_ping.phpt
+++ /dev/null
@@ -1,15 +0,0 @@
---TEST--
-PostgreSQL pg_ping() functions
---SKIPIF--
-<?php include("skipif.inc"); ?>
---FILE--
-<?php
-// optional functions
-
-include('config.inc');
-
-$db = pg_connect($conn_str);
-var_dump(pg_ping($db));
-?>
---EXPECT--
-bool(true)
diff --git a/ext/pgsql/tests/20pg_get_pid.phpt b/ext/pgsql/tests/20pg_get_pid.phpt
deleted file mode 100644
index 06cdfa8656..0000000000
--- a/ext/pgsql/tests/20pg_get_pid.phpt
+++ /dev/null
@@ -1,17 +0,0 @@
---TEST--
-PostgreSQL pg_get_pid() functions
---SKIPIF--
-<?php include("skipif.inc"); ?>
---FILE--
-<?php
-// optional functions
-
-include('config.inc');
-
-$db = pg_connect($conn_str);
-$pid = pg_get_pid($db);
-
-is_integer($pid) ? print 'OK' : print 'NG';
-?>
---EXPECT--
-OK
diff --git a/ext/pgsql/tests/21pg_get_notify.phpt b/ext/pgsql/tests/21pg_get_notify.phpt
deleted file mode 100644
index 9171fc01aa..0000000000
--- a/ext/pgsql/tests/21pg_get_notify.phpt
+++ /dev/null
@@ -1,20 +0,0 @@
---TEST--
-PostgreSQL pg_get_notify() functions
---SKIPIF--
-<?php include("skipif.inc"); ?>
---FILE--
-<?php
-// optional functions
-
-include('config.inc');
-
-$db = pg_connect($conn_str);
-pg_query($db, 'LISTEN test_msg');
-pg_query($db, 'NOTIFY test_msg');
-
-$msg = pg_get_notify($db);
-
-isset($msg['message'],$msg['pid']) ? print 'OK' : print 'NG';
-?>
---EXPECT--
-OK
diff --git a/ext/pgsql/tests/22pg_fetch_object.phpt b/ext/pgsql/tests/22pg_fetch_object.phpt
deleted file mode 100755
index 4f2f5dc184..0000000000
--- a/ext/pgsql/tests/22pg_fetch_object.phpt
+++ /dev/null
@@ -1,37 +0,0 @@
---TEST--
-PostgreSQL pg_fetch_object()
---SKIPIF--
-<?php include("skipif.inc"); ?>
---FILE--
-<?php
-error_reporting(E_ALL);
-
-include 'config.inc';
-
-class test_class {
- function __construct($arg1, $arg2) {
- echo __METHOD__ . "($arg1,$arg2)\n";
- }
-}
-
-$db = pg_connect($conn_str);
-
-$sql = "SELECT * FROM $table_name";
-$result = pg_query($db, $sql) or die('Cannot qeury db');
-$rows = pg_num_rows($result);
-
-var_dump(pg_fetch_object($result, NULL, 'test_class', array(1, 2)));
-
-echo "Ok\n";
-?>
---EXPECT--
-test_class::__construct(1,2)
-object(test_class)#1 (3) {
- ["num"]=>
- string(1) "0"
- ["str"]=>
- string(3) "ABC"
- ["bin"]=>
- NULL
-}
-Ok
diff --git a/ext/pgsql/tests/80_bug14383.phpt b/ext/pgsql/tests/80_bug14383.phpt
deleted file mode 100644
index c60e11c19a..0000000000
--- a/ext/pgsql/tests/80_bug14383.phpt
+++ /dev/null
@@ -1,37 +0,0 @@
---TEST--
-Bug #14383
---SKIPIF--
-<?php
-require_once(dirname(__FILE__).'/../../dba/tests/skipif.inc');
-require_once('skipif.inc');
-?>
---FILE--
-<?php
-require_once('config.inc');
-
-$dbh = @pg_connect($conn_str);
-if (!$dbh) {
- die ("Could not connect to the server");
-}
-pg_close($dbh);
-
-require_once(dirname(__FILE__).'/../../dba/tests/test.inc');
-require_once(dirname(__FILE__).'/../../dba/tests/dba_handler.inc');
-
-?>
---EXPECTF--
-database handler: %s
-3NYNYY
-Content String 2
-Content 2 replaced
-Read during write:%sallowed
-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 newline at end of file
diff --git a/ext/pgsql/tests/80_bug24499.phpt b/ext/pgsql/tests/80_bug24499.phpt
deleted file mode 100755
index ddb3c58a21..0000000000
--- a/ext/pgsql/tests/80_bug24499.phpt
+++ /dev/null
@@ -1,66 +0,0 @@
---TEST--
-Bug #24499 Notice: Undefined property: stdClass::
---SKIPIF--
-<?php
-require_once('skipif.inc');
-?>
---FILE--
-<?php
-
-require_once('config.inc');
-
-$dbh = @pg_connect($conn_str);
-if (!$dbh) {
- die ("Could not connect to the server");
-}
-
-@pg_query("DROP SEQUENCE id_id_seq");
-@pg_query("DROP TABLE id");
-pg_query("CREATE TABLE id (id SERIAL, t INT)");
-
-for ($i=0; $i<4; $i++) {
- pg_query("INSERT INTO id (t) VALUES ($i)");
-}
-
-class Id
-{
- public $id;
-
- public function getId()
- {
- global $dbh;
-
- $q = pg_query($dbh, "SELECT id FROM id");
- print_r(pg_fetch_array($q));
- print_r(pg_fetch_array($q));
- $id = pg_fetch_object($q);
- var_dump($id);
- return $id->id;
- }
-}
-
-$id = new Id();
-var_dump($id->getId());
-
-pg_close($dbh);
-
-echo "Done\n";
-
-?>
---EXPECTF--
-Array
-(
- [0] => 1
- [id] => 1
-)
-Array
-(
- [0] => 2
- [id] => 2
-)
-object(stdClass)#%d (1) {
- ["id"]=>
- string(1) "3"
-}
-string(1) "3"
-Done
diff --git a/ext/pgsql/tests/80_bug27597.phpt b/ext/pgsql/tests/80_bug27597.phpt
deleted file mode 100755
index aa04a4a225..0000000000
--- a/ext/pgsql/tests/80_bug27597.phpt
+++ /dev/null
@@ -1,60 +0,0 @@
---TEST--
-Bug #27597 pg_fetch_array not returning false
---SKIPIF--
-<?php
-require_once('skipif.inc');
-?>
---FILE--
-<?php
-
-require_once('config.inc');
-
-$dbh = @pg_connect($conn_str);
-if (!$dbh) {
- die ("Could not connect to the server");
-}
-
-@pg_query("DROP TABLE id");
-pg_query("CREATE TABLE id (id INT)");
-
-for ($i=0; $i<4; $i++) {
- pg_query("INSERT INTO id (id) VALUES ($i)");
-}
-
-function xi_fetch_array($res, $type = PGSQL_ASSOC) {
- $a = pg_fetch_array($res, NULL, $type) ;
- return $a ;
-}
-
-$res = pg_query("SELECT * FROM id");
-$i = 0; // endless-loop protection
-while($row = xi_fetch_array($res)) {
- print_r($row);
- if ($i++ > 4) {
- echo "ENDLESS-LOOP";
- exit(1);
- }
-}
-
-pg_close($dbh);
-
-?>
-===DONE===
---EXPECTF--
-Array
-(
- [id] => 0
-)
-Array
-(
- [id] => 1
-)
-Array
-(
- [id] => 2
-)
-Array
-(
- [id] => 3
-)
-===DONE===
diff --git a/ext/pgsql/tests/98old_api.phpt b/ext/pgsql/tests/98old_api.phpt
deleted file mode 100644
index 2667e097e3..0000000000
--- a/ext/pgsql/tests/98old_api.phpt
+++ /dev/null
@@ -1,33 +0,0 @@
---TEST--
-PostgreSQL old api
---SKIPIF--
-<?php include("skipif.inc"); ?>
---FILE--
-<?php
-
-include('config.inc');
-
-$db = pg_connect($conn_str);
-$result = pg_exec("SELECT * FROM ".$table_name);
-pg_numrows($result);
-pg_numfields($result);
-pg_fieldname($result, 0);
-pg_fieldsize($result, $field_name);
-pg_fieldtype($result, 0);
-pg_fieldprtlen($result, 0);
-pg_fieldisnull($result, 0);
-
-pg_result($result,0,0);
-$result = pg_exec("INSERT INTO ".$table_name." VALUES (7777, 'KKK')");
-$oid = pg_getlastoid($result);
-pg_freeresult($result);
-pg_errormessage();
-$result = pg_exec("UPDATE ".$table_name." SET str = 'QQQ' WHERE str like 'RGD';");
-pg_cmdtuples($result);
-
-
-
-echo "OK";
-?>
---EXPECT--
-OK
diff --git a/ext/pgsql/tests/9999dropdb.phpt b/ext/pgsql/tests/9999dropdb.phpt
deleted file mode 100644
index c60eeda8d6..0000000000
--- a/ext/pgsql/tests/9999dropdb.phpt
+++ /dev/null
@@ -1,18 +0,0 @@
---TEST--
-PostgreSQL drop db
---SKIPIF--
-<?php include("skipif.inc"); ?>
---FILE--
-<?php
-// drop test table
-
-include('config.inc');
-
-$db = pg_connect($conn_str);
-pg_query($db, "DROP TABLE ".$table_name);
-
-echo "OK";
-
-?>
---EXPECT--
-OK
diff --git a/ext/pgsql/tests/README b/ext/pgsql/tests/README
deleted file mode 100644
index 1a29a34e64..0000000000
--- a/ext/pgsql/tests/README
+++ /dev/null
@@ -1,16 +0,0 @@
-Test scripts assumes:
- - PostgreSQL server is installed locally
- - there is a PostgreSQL account for the users running the test scripts
- - there is database named "test"
-
-For instance, if your login name is 'testuser', you should have PostgreSQL
-user account named 'testuser' and grant that user access to the database
-'test'.
-
-If you have account and database, type "createdb test" from command prompt
-to create the database to execute the test scripts. By executing the above
-command as the same user running the tests you ensure that the user is
-granted access to the database.
-
-If you find problems in PostgreSQL module, please mail to
-intenals@lists.php.net, helly@php.net or yohgaki@php.net.
diff --git a/ext/pgsql/tests/config.inc b/ext/pgsql/tests/config.inc
deleted file mode 100644
index 2b5f05a71d..0000000000
--- a/ext/pgsql/tests/config.inc
+++ /dev/null
@@ -1,12 +0,0 @@
-<?php
-// These vars are used to connect db and create test table.
-// values can be set to meet your environment
-
-$conn_str = "host=localhost dbname=test"; // connection string
-$table_name = "php_pgsql_test"; // test table that should be exist
-$num_test_record = 1000; // Number of records to create
-
-$table_def = "CREATE TABLE php_pgsql_test (num int, str text, bin bytea);"; // Test table
-$field_name = "num"; // For pg_field_num()
-
-?> \ No newline at end of file
diff --git a/ext/pgsql/tests/php.gif b/ext/pgsql/tests/php.gif
deleted file mode 100644
index 7beda43fd4..0000000000
--- a/ext/pgsql/tests/php.gif
+++ /dev/null
Binary files differ
diff --git a/ext/pgsql/tests/skipif.inc b/ext/pgsql/tests/skipif.inc
deleted file mode 100644
index 043a0bd8d2..0000000000
--- a/ext/pgsql/tests/skipif.inc
+++ /dev/null
@@ -1,18 +0,0 @@
-<?php
-// This script prints "skip" unless:
-// * the pgsql extension is built-in or loadable, AND
-// * there is a database called "test" accessible
-// with no username/password, AND
-// * we have create/drop privileges on the entire "test"
-// database
-
-include("config.inc");
-
-if (!extension_loaded("pgsql")) {
- die("skip\n");
-}
-$conn = @pg_connect($conn_str);
-if (!is_resource($conn)) {
- die("skip could not connect\n");
-}
-?> \ No newline at end of file
diff --git a/ext/posix/CREDITS b/ext/posix/CREDITS
deleted file mode 100644
index c769635d91..0000000000
--- a/ext/posix/CREDITS
+++ /dev/null
@@ -1,2 +0,0 @@
-Posix
-Kristian Köhntopp
diff --git a/ext/posix/config.m4 b/ext/posix/config.m4
deleted file mode 100644
index fc3767e98b..0000000000
--- a/ext/posix/config.m4
+++ /dev/null
@@ -1,13 +0,0 @@
-dnl
-dnl $Id$
-dnl
-
-PHP_ARG_ENABLE(posix,whether to enable POSIX-like functions,
-[ --disable-posix Disable POSIX-like functions], yes)
-
-if test "$PHP_POSIX" = "yes"; then
- AC_DEFINE(HAVE_POSIX, 1, [whether to include POSIX-like functions])
- PHP_NEW_EXTENSION(posix, posix.c, $ext_shared)
-
- AC_CHECK_FUNCS(seteuid setegid setsid getsid setpgid getpgid ctermid mkfifo getrlimit)
-fi
diff --git a/ext/posix/package.xml b/ext/posix/package.xml
deleted file mode 100644
index 1abe815c1f..0000000000
--- a/ext/posix/package.xml
+++ /dev/null
@@ -1,49 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1" ?>
-<!DOCTYPE package SYSTEM "../pear/package.dtd">
-<package>
- <name>pcntl</name>
- <summary>Process control functions</summary>
- <maintainers>
- <maintainer>
- <user>???</user>
- <name>Jason Greene</name>
- <email>jason@inetgurus.net</email>
- <role>lead</role>
- </maintainer>
- </maintainers>
- <description>
-Process Control support in PHP implements the Unix style
-of process creation, program execution, signal handling
-and process termination. Process Control should not be
-enabled within a webserver environment and unexpected
-results may happen if any Process Control functions
-are used within a webserver environment.
- </description>
- <license>PHP</license>
- <release>
- <state>beta</state>
- <version>5.0.0rc1</version>
- <date>2004-03-19</date>
- <notes>
-package.xml added to support intallation using pear installer
- </notes>
- <filelist>
- <file role="doc" name="CREDITS"/>
- <file role="doc" name="README"/>
- <file role="src" name="config.m4"/>
- <file role="src" name="pcntl.c"/>
- <file role="src" name="php_pcntl.h"/>
- <file role="src" name="php_signal.c"/>
- <file role="src" name="php_signal.h"/>
- <file role="test" name="test-pcntl.php"/>
- <file role="test" name="tests/001.phpt"/>
- </filelist>
- <deps>
- <dep type="php" rel="ge" version="5" />
- <!-- doesn't work yet <dep type="os" rel="has" name="unix"/> -->
- </deps>
- </release>
-</package>
-<!--
-vim:et:ts=1:sw=1
--->
diff --git a/ext/posix/php_posix.h b/ext/posix/php_posix.h
deleted file mode 100644
index 1970c2dab9..0000000000
--- a/ext/posix/php_posix.h
+++ /dev/null
@@ -1,124 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Kristian Koehntopp <kris@koehntopp.de> |
- +----------------------------------------------------------------------+
- */
-
-
-/* $Id$ */
-
-#ifndef PHP_POSIX_H
-#define PHP_POSIX_H
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#if HAVE_POSIX
-#ifndef DLEXPORT
-#define DLEXPORT
-#endif
-
-extern zend_module_entry posix_module_entry;
-#define posix_module_ptr &posix_module_entry
-
-/* POSIX.1, 3.3 */
-PHP_FUNCTION(posix_kill);
-
-/* POSIX.1, 4.1 */
-PHP_FUNCTION(posix_getpid);
-PHP_FUNCTION(posix_getppid);
-
-/* POSIX.1, 4.2 */
-PHP_FUNCTION(posix_getuid);
-PHP_FUNCTION(posix_getgid);
-PHP_FUNCTION(posix_geteuid);
-PHP_FUNCTION(posix_getegid);
-PHP_FUNCTION(posix_setuid);
-PHP_FUNCTION(posix_setgid);
-#ifdef HAVE_SETEUID
-PHP_FUNCTION(posix_seteuid);
-#endif
-#ifdef HAVE_SETEGID
-PHP_FUNCTION(posix_setegid);
-#endif
-PHP_FUNCTION(posix_getgroups);
-PHP_FUNCTION(posix_getlogin);
-
-/* POSIX.1, 4.3 */
-PHP_FUNCTION(posix_getpgrp);
-#ifdef HAVE_SETSID
-PHP_FUNCTION(posix_setsid);
-#endif
-PHP_FUNCTION(posix_setpgid);
-/* Non-Posix functions which are common */
-#ifdef HAVE_GETPGID
-PHP_FUNCTION(posix_getpgid);
-#endif
-#ifdef HAVE_GETSID
-PHP_FUNCTION(posix_getsid);
-#endif
-
-/* POSIX.1, 4.4 */
-PHP_FUNCTION(posix_uname);
-PHP_FUNCTION(posix_times);
-
-/* POSIX.1, 4.5 */
-#ifdef HAVE_CTERMID
-PHP_FUNCTION(posix_ctermid);
-#endif
-PHP_FUNCTION(posix_ttyname);
-PHP_FUNCTION(posix_isatty);
-
-/* POSIX.1, 5.2 */
-PHP_FUNCTION(posix_getcwd);
-
-/* POSIX.1, 5.4 */
-#ifdef HAVE_MKFIFO
-PHP_FUNCTION(posix_mkfifo);
-#endif
-
-/* POSIX.1, 9.2 */
-PHP_FUNCTION(posix_getgrnam);
-PHP_FUNCTION(posix_getgrgid);
-PHP_FUNCTION(posix_getpwnam);
-PHP_FUNCTION(posix_getpwuid);
-
-#ifdef HAVE_GETRLIMIT
-PHP_FUNCTION(posix_getrlimit);
-#endif
-
-PHP_FUNCTION(posix_get_last_error);
-PHP_FUNCTION(posix_strerror);
-
-ZEND_BEGIN_MODULE_GLOBALS(posix)
- int last_error;
-ZEND_END_MODULE_GLOBALS(posix)
-
-#ifdef ZTS
-# define POSIX_G(v) TSRMG(posix_globals_id, zend_posix_globals *, v)
-#else
-# define POSIX_G(v) (posix_globals.v)
-#endif
-
-#else
-
-#define posix_module_ptr NULL
-
-#endif
-
-#define phpext_posix_ptr posix_module_ptr
-
-#endif /* PHP_POSIX_H */
diff --git a/ext/posix/posix.c b/ext/posix/posix.c
deleted file mode 100644
index 107c38d26a..0000000000
--- a/ext/posix/posix.c
+++ /dev/null
@@ -1,914 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Kristian Koehntopp <kris@koehntopp.de> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "php.h"
-#include <unistd.h>
-#include "ext/standard/info.h"
-#include "ext/standard/php_string.h"
-#include "php_posix.h"
-
-
-#if HAVE_POSIX
-
-#ifdef HAVE_SYS_TIME_H
-#include <sys/time.h>
-#endif
-
-#include <sys/resource.h>
-#include <sys/utsname.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <signal.h>
-#include <sys/times.h>
-#include <errno.h>
-#include <grp.h>
-#include <pwd.h>
-
-ZEND_DECLARE_MODULE_GLOBALS(posix)
-
-/* {{{ posix_functions[]
- */
-function_entry posix_functions[] = {
- /* POSIX.1, 3.3 */
- PHP_FE(posix_kill, NULL)
-
- /* POSIX.1, 4.1 */
- PHP_FE(posix_getpid, NULL)
- PHP_FE(posix_getppid, NULL)
-
- /* POSIX.1, 4.2 */
- PHP_FE(posix_getuid, NULL)
- PHP_FE(posix_setuid, NULL)
- PHP_FE(posix_geteuid, NULL)
-#ifdef HAVE_SETEUID
- PHP_FE(posix_seteuid, NULL)
-#endif
- PHP_FE(posix_getgid, NULL)
- PHP_FE(posix_setgid, NULL)
- PHP_FE(posix_getegid, NULL)
-#ifdef HAVE_SETEGID
- PHP_FE(posix_setegid, NULL)
-#endif
- PHP_FE(posix_getgroups, NULL)
- PHP_FE(posix_getlogin, NULL)
-
- /* POSIX.1, 4.3 */
- PHP_FE(posix_getpgrp, NULL)
-#ifdef HAVE_SETSID
- PHP_FE(posix_setsid, NULL)
-#endif
- PHP_FE(posix_setpgid, NULL)
- /* Non-Posix functions which are common */
-#ifdef HAVE_GETPGID
- PHP_FE(posix_getpgid, NULL)
-#endif /* HAVE_GETPGID */
-#ifdef HAVE_GETSID
- PHP_FE(posix_getsid, NULL)
-#endif /* HAVE_GETSID */
-
- /* POSIX.1, 4.4 */
- PHP_FE(posix_uname, NULL)
-
- /* POSIX.1, 4.5 */
- PHP_FE(posix_times, NULL)
-
- /* POSIX.1, 4.7 */
-#ifdef HAVE_CTERMID
- PHP_FE(posix_ctermid, NULL)
-#endif
- PHP_FE(posix_ttyname, NULL)
- PHP_FE(posix_isatty, NULL)
-
- /* POSIX.1, 5.2 */
- PHP_FE(posix_getcwd, NULL)
-
- /* POSIX.1, 5.4 */
-#ifdef HAVE_MKFIFO
- PHP_FE(posix_mkfifo, NULL)
-#endif
-
- /* POSIX.1, 9.2 */
- PHP_FE(posix_getgrnam, NULL)
- PHP_FE(posix_getgrgid, NULL)
- PHP_FE(posix_getpwnam, NULL)
- PHP_FE(posix_getpwuid, NULL)
-
-#ifdef HAVE_GETRLIMIT
- PHP_FE(posix_getrlimit, NULL)
-#endif
-
- PHP_FE(posix_get_last_error, NULL)
- PHP_FALIAS(posix_errno, posix_get_last_error, NULL)
- PHP_FE(posix_strerror, NULL)
-
- {NULL, NULL, NULL}
-};
-/* }}} */
-
-/* {{{ PHP_MINFO_FUNCTION
- */
-static PHP_MINFO_FUNCTION(posix)
-{
- php_info_print_table_start();
- php_info_print_table_row(2, "Revision", "$Revision$");
- php_info_print_table_end();
-}
-/* }}} */
-
-static void php_posix_init_globals(zend_posix_globals *posix_globals TSRMLS_DC)
-{
- posix_globals->last_error = 0;
-}
-
-/* {{{ PHP_MINIT_FUNCTION(posix)
- */
-static PHP_MINIT_FUNCTION(posix)
-{
- ZEND_INIT_MODULE_GLOBALS(posix, php_posix_init_globals, NULL);
- return SUCCESS;
-}
-/* }}} */
-
-static PHP_MINFO_FUNCTION(posix);
-
-/* {{{ posix_module_entry
- */
-zend_module_entry posix_module_entry = {
- STANDARD_MODULE_HEADER,
- "posix",
- posix_functions,
- PHP_MINIT(posix),
- NULL,
- NULL,
- NULL,
- PHP_MINFO(posix),
- NO_VERSION_YET,
- STANDARD_MODULE_PROPERTIES
-};
-/* }}} */
-
-#ifdef COMPILE_DL_POSIX
-ZEND_GET_MODULE(posix)
-#endif
-
-#define PHP_POSIX_NO_ARGS if (ZEND_NUM_ARGS()) return;
-
-#define PHP_POSIX_RETURN_LONG_FUNC(func_name) \
- PHP_POSIX_NO_ARGS \
- RETURN_LONG(func_name());
-
-#define PHP_POSIX_SINGLE_ARG_FUNC(func_name) \
- long val; \
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &val) == FAILURE) return; \
- if (func_name(val) < 0) { \
- POSIX_G(last_error) = errno; \
- RETURN_FALSE; \
- } \
- RETURN_TRUE;
-
-/* {{{ proto bool posix_kill(int pid, int sig)
- Send a signal to a process (POSIX.1, 3.3.2) */
-
-PHP_FUNCTION(posix_kill)
-{
- long pid, sig;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ll", &pid, &sig) == FAILURE)
- return;
-
- if (kill(pid, sig) < 0) {
- POSIX_G(last_error) = errno;
- RETURN_FALSE;
- }
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto int posix_getpid(void)
- Get the current process id (POSIX.1, 4.1.1) */
-PHP_FUNCTION(posix_getpid)
-{
- PHP_POSIX_RETURN_LONG_FUNC(getpid);
-}
-/* }}} */
-
-/* {{{ proto int posix_getppid(void)
- Get the parent process id (POSIX.1, 4.1.1) */
-PHP_FUNCTION(posix_getppid)
-{
- PHP_POSIX_RETURN_LONG_FUNC(getppid);
-}
-/* }}} */
-
-/* {{{ proto int posix_getuid(void)
- Get the current user id (POSIX.1, 4.2.1) */
-PHP_FUNCTION(posix_getuid)
-{
- PHP_POSIX_RETURN_LONG_FUNC(getuid);
-}
-/* }}} */
-
-/* {{{ proto int posix_getgid(void)
- Get the current group id (POSIX.1, 4.2.1) */
-PHP_FUNCTION(posix_getgid)
-{
- PHP_POSIX_RETURN_LONG_FUNC(getgid);
-}
-/* }}} */
-
-/* {{{ proto int posix_geteuid(void)
- Get the current effective user id (POSIX.1, 4.2.1) */
-PHP_FUNCTION(posix_geteuid)
-{
- PHP_POSIX_RETURN_LONG_FUNC(geteuid);
-}
-/* }}} */
-
-/* {{{ proto int posix_getegid(void)
- Get the current effective group id (POSIX.1, 4.2.1) */
-PHP_FUNCTION(posix_getegid)
-{
- PHP_POSIX_RETURN_LONG_FUNC(getegid);
-}
-/* }}} */
-
-/* {{{ proto bool posix_setuid(long uid)
- Set user id (POSIX.1, 4.2.2) */
-PHP_FUNCTION(posix_setuid)
-{
- PHP_POSIX_SINGLE_ARG_FUNC(setuid);
-}
-/* }}} */
-
-/* {{{ proto bool posix_setgid(int uid)
- Set group id (POSIX.1, 4.2.2) */
-PHP_FUNCTION(posix_setgid)
-{
- PHP_POSIX_SINGLE_ARG_FUNC(setgid);
-}
-/* }}} */
-
-/* {{{ proto bool posix_seteuid(long uid)
- Set effective user id */
-#ifdef HAVE_SETEUID
-PHP_FUNCTION(posix_seteuid)
-{
- PHP_POSIX_SINGLE_ARG_FUNC(seteuid);
-}
-#endif
-/* }}} */
-
-/* {{{ proto bool posix_setegid(long uid)
- Set effective group id */
-#ifdef HAVE_SETEGID
-PHP_FUNCTION(posix_setegid)
-{
- PHP_POSIX_SINGLE_ARG_FUNC(setegid);
-}
-#endif
-/* }}} */
-
-/* {{{ proto array posix_getgroups(void)
- Get supplementary group id's (POSIX.1, 4.2.3) */
-PHP_FUNCTION(posix_getgroups)
-{
- gid_t gidlist[NGROUPS_MAX];
- int result;
- int i;
-
- PHP_POSIX_NO_ARGS;
-
- if ((result = getgroups(NGROUPS_MAX, gidlist)) < 0) {
- POSIX_G(last_error) = errno;
- RETURN_FALSE;
- }
-
- array_init(return_value);
-
- for (i=0; i<result; i++) {
- add_next_index_long(return_value, gidlist[i]);
- }
-}
-/* }}} */
-
-/* {{{ proto string posix_getlogin(void)
- Get user name (POSIX.1, 4.2.4) */
-PHP_FUNCTION(posix_getlogin)
-{
- char *p;
-
- PHP_POSIX_NO_ARGS;
-
- if (NULL == (p = getlogin())) {
- POSIX_G(last_error) = errno;
- RETURN_FALSE;
- }
-
- RETURN_STRING(p, 1);
-}
-/* }}} */
-
-/* {{{ proto int posix_getpgrp(void)
- Get current process group id (POSIX.1, 4.3.1) */
-PHP_FUNCTION(posix_getpgrp)
-{
- PHP_POSIX_RETURN_LONG_FUNC(getpgrp);
-}
-/* }}} */
-
-/* {{{ proto int posix_setsid(void)
- Create session and set process group id (POSIX.1, 4.3.2) */
-#ifdef HAVE_SETSID
-PHP_FUNCTION(posix_setsid)
-{
- PHP_POSIX_RETURN_LONG_FUNC(setsid);
-}
-#endif
-/* }}} */
-
-/* {{{ proto bool posix_setpgid(int pid, int pgid)
- Set process group id for job control (POSIX.1, 4.3.3) */
-PHP_FUNCTION(posix_setpgid)
-{
- long pid, pgid;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ll", &pid, &pgid) == FAILURE)
- return;
-
- if (setpgid(pid, pgid) < 0) {
- POSIX_G(last_error) = errno;
- RETURN_FALSE;
- }
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto int posix_getpgid(void)
- Get the process group id of the specified process (This is not a POSIX function, but a SVR4ism, so we compile conditionally) */
-#ifdef HAVE_GETPGID
-PHP_FUNCTION(posix_getpgid)
-{
- PHP_POSIX_SINGLE_ARG_FUNC(getpgid);
-}
-#endif
-/* }}} */
-
-/* {{{ proto int posix_getsid(void)
- Get process group id of session leader (This is not a POSIX function, but a SVR4ism, so be compile conditionally) */
-#ifdef HAVE_GETSID
-PHP_FUNCTION(posix_getsid)
-{
- PHP_POSIX_SINGLE_ARG_FUNC(getsid);
-}
-#endif
-/* }}} */
-
-/* {{{ proto array posix_uname(void)
- Get system name (POSIX.1, 4.4.1) */
-PHP_FUNCTION(posix_uname)
-{
- struct utsname u;
-
- PHP_POSIX_NO_ARGS;
-
- if (uname(&u) < 0) {
- POSIX_G(last_error) = errno;
- RETURN_FALSE;
- }
-
- array_init(return_value);
-
- add_assoc_string(return_value, "sysname", u.sysname, 1);
- add_assoc_string(return_value, "nodename", u.nodename, 1);
- 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
- add_assoc_string(return_value, "domainname", u.domainname, 1);
-#endif
-}
-/* }}} */
-
-/* POSIX.1, 4.5.1 time() - Get System Time
- already covered by PHP
- */
-
-/* {{{ proto array posix_times(void)
- Get process times (POSIX.1, 4.5.2) */
-PHP_FUNCTION(posix_times)
-{
- struct tms t;
- clock_t ticks;
-
- PHP_POSIX_NO_ARGS;
-
- if((ticks = times(&t)) < 0) {
- POSIX_G(last_error) = errno;
- RETURN_FALSE;
- }
-
- array_init(return_value);
-
- add_assoc_long(return_value, "ticks", ticks); /* clock ticks */
- add_assoc_long(return_value, "utime", t.tms_utime); /* user time */
- add_assoc_long(return_value, "stime", t.tms_stime); /* system time */
- add_assoc_long(return_value, "cutime", t.tms_cutime); /* user time of children */
- add_assoc_long(return_value, "cstime", t.tms_cstime); /* system time of children */
-}
-/* }}} */
-
-/* POSIX.1, 4.6.1 getenv() - Environment Access
- already covered by PHP
-*/
-
-/* {{{ proto string posix_ctermid(void)
- Generate terminal path name (POSIX.1, 4.7.1) */
-#ifdef HAVE_CTERMID
-PHP_FUNCTION(posix_ctermid)
-{
- char buffer[L_ctermid];
-
- PHP_POSIX_NO_ARGS;
-
- if (NULL == ctermid(buffer)) {
- /* Found no documentation how the defined behaviour is when this
- * function fails
- */
- POSIX_G(last_error) = errno;
- RETURN_FALSE;
- }
-
- RETURN_STRING(buffer, 1);
-}
-#endif
-/* }}} */
-
-/* Checks if the provides resource is a stream and if it provides a file descriptor */
-static int php_posix_stream_get_fd(zval *zfp, int *fd TSRMLS_DC)
-{
- php_stream *stream;
-
- php_stream_from_zval_no_verify(stream, &zfp);
-
- if (stream == NULL) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "expects argument 1 to be a valid stream resource");
- return 0;
- }
- if (php_stream_can_cast(stream, PHP_STREAM_AS_FD) == SUCCESS) {
- php_stream_cast(stream, PHP_STREAM_AS_FD, (void*)fd, 0);
- } else {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "could not use stream of type '%s'",
- stream->ops->label);
- return 0;
- }
- return 1;
-}
-
-/* {{{ proto string posix_ttyname(int fd)
- Determine terminal device name (POSIX.1, 4.7.2) */
-PHP_FUNCTION(posix_ttyname)
-{
- zval *z_fd;
- char *p;
- int fd;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z", &z_fd) == FAILURE)
- return;
-
- switch (Z_TYPE_P(z_fd)) {
- case IS_RESOURCE:
- if (!php_posix_stream_get_fd(z_fd, &fd TSRMLS_CC)) {
- RETURN_FALSE;
- }
- break;
- default:
- convert_to_long(z_fd);
- fd = Z_LVAL_P(z_fd);
- }
-
- if (NULL == (p = ttyname(fd))) {
- POSIX_G(last_error) = errno;
- RETURN_FALSE;
- }
-
- RETURN_STRING(p, 1);
-}
-/* }}} */
-
-/* {{{ proto bool posix_isatty(int fd)
- Determine if filedesc is a tty (POSIX.1, 4.7.1) */
-PHP_FUNCTION(posix_isatty)
-{
- zval *z_fd;
- int fd;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z", &z_fd) == FAILURE)
- return;
-
- switch (Z_TYPE_P(z_fd)) {
- case IS_RESOURCE:
- if (!php_posix_stream_get_fd(z_fd, &fd TSRMLS_CC)) {
- RETURN_FALSE;
- }
- break;
- default:
- convert_to_long(z_fd);
- fd = Z_LVAL_P(z_fd);
- }
-
- if (isatty(fd)) {
- RETURN_TRUE;
- } else {
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-/*
- POSIX.1, 4.8.1 sysconf() - TODO
- POSIX.1, 5.7.1 pathconf(), fpathconf() - TODO
-
- POSIX.1, 5.1.2 opendir(), readdir(), rewinddir(), closedir()
- POSIX.1, 5.2.1 chdir()
- already supported by PHP
- */
-
-/* {{{ proto string posix_getcwd(void)
- Get working directory pathname (POSIX.1, 5.2.2) */
-PHP_FUNCTION(posix_getcwd)
-{
- char buffer[MAXPATHLEN];
- char *p;
-
- PHP_POSIX_NO_ARGS;
-
- p = VCWD_GETCWD(buffer, MAXPATHLEN);
- if (!p) {
- POSIX_G(last_error) = errno;
- RETURN_FALSE;
- }
-
- RETURN_STRING(buffer, 1);
-}
-/* }}} */
-
-/*
- POSIX.1, 5.3.x open(), creat(), umask()
- POSIX.1, 5.4.1 link()
- already supported by PHP.
- */
-
-/* {{{ proto bool posix_mkfifo(string pathname, int mode)
- Make a FIFO special file (POSIX.1, 5.4.2) */
-#ifdef HAVE_MKFIFO
-PHP_FUNCTION(posix_mkfifo)
-{
- char *path;
- int path_len;
- long mode;
- int result;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "sl", &path, &path_len, &mode) == FAILURE)
- return;
-
- if (PG(safe_mode) && (!php_checkuid(path, NULL, CHECKUID_ALLOW_ONLY_DIR))) {
- RETURN_FALSE;
- }
-
- result = mkfifo(path, mode);
- if (result < 0) {
- POSIX_G(last_error) = errno;
- RETURN_FALSE;
- }
-
- RETURN_TRUE;
-}
-#endif
-/* }}} */
-
-/* Takes a pointer to posix group and a pointer to an already initialized ZVAL
- * array container and fills the array with the posix group member data. */
-int php_posix_group_to_array(struct group *g, zval *array_group) {
- zval *array_members;
- int count;
-
- if (NULL == g)
- return 0;
-
- if (array_group == NULL || Z_TYPE_P(array_group) != IS_ARRAY)
- return 0;
-
- MAKE_STD_ZVAL(array_members);
- array_init(array_members);
-
- add_assoc_string(array_group, "name", g->gr_name, 1);
- add_assoc_string(array_group, "passwd", g->gr_passwd, 1);
- for (count=0; g->gr_mem[count] != NULL; count++) {
- add_next_index_string(array_members, g->gr_mem[count], 1);
- }
- zend_hash_update(Z_ARRVAL_P(array_group), "members", sizeof("members"), (void*)&array_members, sizeof(zval*), NULL);
- add_assoc_long(array_group, "gid", g->gr_gid);
- return 1;
-}
-
-/*
- POSIX.1, 5.5.1 unlink()
- POSIX.1, 5.5.2 rmdir()
- POSIX.1, 5.5.3 rename()
- POSIX.1, 5.6.x stat(), access(), chmod(), utime()
- already supported by PHP (access() not supported, because it is
- braindead and dangerous and gives outdated results).
-
- POSIX.1, 6.x most I/O functions already supported by PHP.
- POSIX.1, 7.x tty functions, TODO
- POSIX.1, 8.x interactions with other C language functions
- POSIX.1, 9.x system database access
- */
-
-/* {{{ proto array posix_getgrnam(string groupname)
- Group database access (POSIX.1, 9.2.1) */
-PHP_FUNCTION(posix_getgrnam)
-{
- char *name;
- struct group *g;
- int name_len;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &name, &name_len) == FAILURE)
- return;
-
- if (NULL == (g = getgrnam(name))) {
- POSIX_G(last_error) = errno;
- RETURN_FALSE;
- }
-
- array_init(return_value);
-
- if (!php_posix_group_to_array(g, return_value)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "unable to convert posix group to array");
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-/* {{{ proto array posix_getgrgid(long gid)
- Group database access (POSIX.1, 9.2.1) */
-PHP_FUNCTION(posix_getgrgid)
-{
- long gid;
- struct group *g;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &gid) == FAILURE)
- return;
-
- if (NULL == (g = getgrgid(gid))) {
- POSIX_G(last_error) = errno;
- RETURN_FALSE;
- }
-
- array_init(return_value);
-
- if (!php_posix_group_to_array(g, return_value)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "unable to convert posix group struct to array");
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-int php_posix_passwd_to_array(struct passwd *pw, zval *return_value) {
- if (NULL == pw)
- return 0;
- if (NULL == return_value || Z_TYPE_P(return_value) != IS_ARRAY)
- return 0;
-
- add_assoc_string(return_value, "name", pw->pw_name, 1);
- add_assoc_string(return_value, "passwd", pw->pw_passwd, 1);
- add_assoc_long (return_value, "uid", pw->pw_uid);
- add_assoc_long (return_value, "gid", pw->pw_gid);
- add_assoc_string(return_value, "gecos", pw->pw_gecos, 1);
- add_assoc_string(return_value, "dir", pw->pw_dir, 1);
- add_assoc_string(return_value, "shell", pw->pw_shell, 1);
- return 1;
-}
-
-/* {{{ proto array posix_getpwnam(string groupname)
- User database access (POSIX.1, 9.2.2) */
-PHP_FUNCTION(posix_getpwnam)
-{
- struct passwd *pw;
- char *name;
- int name_len;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &name, &name_len) == FAILURE)
- return;
-
- if (NULL == (pw = getpwnam(name))) {
- POSIX_G(last_error) = errno;
- RETURN_FALSE;
- }
-
- array_init(return_value);
-
- if (!php_posix_passwd_to_array(pw, return_value)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "unable to convert posix passwd struct to array");
- RETURN_FALSE;
- }
-
-}
-/* }}} */
-
-/* {{{ proto array posix_getpwuid(long uid)
- User database access (POSIX.1, 9.2.2) */
-PHP_FUNCTION(posix_getpwuid)
-{
- long uid;
- struct passwd *pw;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &uid) == FAILURE)
- return;
-
- if (NULL == (pw = getpwuid(uid))) {
- POSIX_G(last_error) = errno;
- RETURN_FALSE;
- }
-
- array_init(return_value);
-
- if (!php_posix_passwd_to_array(pw, return_value)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "unable to convert posix passwd struct to array");
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-
-#ifdef HAVE_GETRLIMIT
-
-#define UNLIMITED_STRING "unlimited"
-
-/* {{{ posix_addlimit
- */
-static int posix_addlimit(int limit, char *name, zval *return_value TSRMLS_DC) {
- int result;
- struct rlimit rl;
- char hard[80];
- char soft[80];
-
- snprintf(hard, 80, "hard %s", name);
- snprintf(soft, 80, "soft %s", name);
-
- result = getrlimit(limit, &rl);
- if (result < 0) {
- POSIX_G(last_error) = errno;
- return FAILURE;
- }
-
- if (rl.rlim_cur == RLIM_INFINITY) {
- add_assoc_stringl(return_value, soft, UNLIMITED_STRING, sizeof(UNLIMITED_STRING)-1, 1);
- } else {
- add_assoc_long(return_value, soft, rl.rlim_cur);
- }
-
- if (rl.rlim_max == RLIM_INFINITY) {
- add_assoc_stringl(return_value, hard, UNLIMITED_STRING, sizeof(UNLIMITED_STRING)-1, 1);
- } else {
- add_assoc_long(return_value, hard, rl.rlim_max);
- }
-
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ limits[]
- */
-struct limitlist {
- int limit;
- char *name;
-} limits[] = {
-#ifdef RLIMIT_CORE
- { RLIMIT_CORE, "core" },
-#endif
-
-#ifdef RLIMIT_DATA
- { RLIMIT_DATA, "data" },
-#endif
-
-#ifdef RLIMIT_STACK
- { RLIMIT_STACK, "stack" },
-#endif
-
-#ifdef RLIMIT_VMEM
- { RLIMIT_VMEM, "virtualmem" },
-#endif
-
-#ifdef RLIMIT_AS
- { RLIMIT_AS, "totalmem" },
-#endif
-
-#ifdef RLIMIT_RSS
- { RLIMIT_RSS, "rss" },
-#endif
-
-#ifdef RLIMIT_NPROC
- { RLIMIT_NPROC, "maxproc" },
-#endif
-
-#ifdef RLIMIT_MEMLOCK
- { RLIMIT_MEMLOCK, "memlock" },
-#endif
-
-#ifdef RLIMIT_CPU
- { RLIMIT_CPU, "cpu" },
-#endif
-
-#ifdef RLIMIT_FSIZE
- { RLIMIT_FSIZE, "filesize" },
-#endif
-
-#ifdef RLIMIT_NOFILE
- { RLIMIT_NOFILE, "openfiles" },
-#endif
-
-#ifdef RLIMIT_OFILE
- { RLIMIT_OFILE, "openfiles" },
-#endif
-
- { 0, NULL }
-};
-/* }}} */
-
-
-/* {{{ proto array posix_getrlimit(void)
- Get system resource consumption limits (This is not a POSIX function, but a BSDism and a SVR4ism. We compile conditionally) */
-PHP_FUNCTION(posix_getrlimit)
-{
- struct limitlist *l = NULL;
-
- PHP_POSIX_NO_ARGS;
-
- array_init(return_value);
-
- for (l=limits; l->name; l++) {
- if (posix_addlimit(l->limit, l->name, return_value TSRMLS_CC) == FAILURE)
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-#endif /* HAVE_GETRLIMIT */
-
-/* {{{ proto int posix_get_last_error(void)
- Retrieve the error number set by the last posix function which failed. */
-PHP_FUNCTION(posix_get_last_error)
-{
- PHP_POSIX_NO_ARGS;
-
- RETURN_LONG(POSIX_G(last_error));
-}
-/* }}} */
-
-/* {{{ proto string posix_strerror(int errno)
- Retrieve the system error message associated with the given errno. */
-PHP_FUNCTION(posix_strerror)
-{
- long error;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &error) == FAILURE)
- return;
-
- RETURN_STRING(strerror(error), 1);
-}
-/* }}} */
-
-#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/pspell/CREDITS b/ext/pspell/CREDITS
deleted file mode 100644
index a7919d4b7c..0000000000
--- a/ext/pspell/CREDITS
+++ /dev/null
@@ -1,2 +0,0 @@
-Pspell
-Vlad Krupin
diff --git a/ext/pspell/README b/ext/pspell/README
deleted file mode 100644
index 4969a81bb4..0000000000
--- a/ext/pspell/README
+++ /dev/null
@@ -1,51 +0,0 @@
-README file for pspell (spellchecker) module for PHP
-----------------------------------------------------
-
-The latest release of pspell is always available from
-
- http://pspell.sourceforge.net/
-
-This module was developed and tested with aspell-.31.1 and pspell-.11.0.2,
-although slightly earlier (and hopefully later) versions of those libraries
-should work as well.
-
-General notes
--------------
-
-Please, note that somewhere around version .27.x (I believe) aspell stopped
-working with the aspell module for php. This is due to the fact that the
-author changed things around a bit, and suggested that people link to pspell
-in the future rather than to aspell. That's exactly what this module is for.
-It has the same basic functionality as aspell (and more features are being
-added). I did not want to modify existing aspell module, because it would
-break things for those who are using older aspell, or result in very ugly code.
-Rather, I wrote a new module - pspell.
-
-
-Building pspell on a Unix system
---------------------------------
-
-In order to use pspell, you need to have *both* aspell and pspell libraries
-installed, and they have to be compatible with each other. Get the latest
-release of both at the URL given above.
-
-I expect the libraries to be in /usr/local (that's the default when you
-cofigure pspell and aspell with their 'configure' scripts woth no parameters).
-If that location is different, please specify it in --with-pspell=PATH, where
-PATH is the path you specified for pspell libraries.
-
-Notes on personalized dictionaries
-----------------------------------
-
-It is now possible to have personalized dictionaries with pspell. This is
-achieved by opening a dictionary with pspell_new_personal() rather than
-pspell_new() and specifying the custom dictionary as the first parameter.
-The parameter probably should begin with '/' because otherwise it will
-be relative to $HOME, which is probably set to "/root". This is probably not
-what you want because you need write access for nobody to be able to write
-to a dictionary. Once the dictionary is open, you can use
-pspell_add_to_personal() to add words to the wordlist and finally
-pspell_save_wordlist() to save it.
-
-Note that at this moment pspell_save_wordlist() will return TRUE, even if
-there was an error. This will be changed once pspell library is fixed. \ No newline at end of file
diff --git a/ext/pspell/config.m4 b/ext/pspell/config.m4
deleted file mode 100644
index 955ddbf770..0000000000
--- a/ext/pspell/config.m4
+++ /dev/null
@@ -1,36 +0,0 @@
-dnl
-dnl $Id$
-dnl
-
-PHP_ARG_WITH(pspell,for PSPELL support,
-[ --with-pspell[=DIR] Include PSPELL support.
- GNU Aspell version 0.50.0 or higher required.])
-
-if test "$PHP_PSPELL" != "no"; then
- PHP_NEW_EXTENSION(pspell, pspell.c, $ext_shared)
- if test "$PHP_PSPELL" != "yes"; then
- PSPELL_SEARCH_DIRS=$PHP_PSPELL
- else
- PSPELL_SEARCH_DIRS="/usr/local /usr"
- fi
- for i in $PSPELL_SEARCH_DIRS; do
- if test -f $i/include/pspell/pspell.h; then
- PSPELL_DIR=$i
- PSPELL_INCDIR=$i/include/pspell
- elif test -f $i/include/pspell.h; then
- PSPELL_DIR=$i
- PSPELL_INCDIR=$i/include
- fi
- done
-
- if test -z "$PSPELL_DIR"; then
- AC_MSG_ERROR(Cannot find pspell)
- fi
-
- PSPELL_LIBDIR=$PSPELL_DIR/lib
-
- AC_DEFINE(HAVE_PSPELL,1,[ ])
- PHP_SUBST(PSPELL_SHARED_LIBADD)
- PHP_ADD_LIBRARY_WITH_PATH(pspell, $PSPELL_LIBDIR, PSPELL_SHARED_LIBADD)
- PHP_ADD_INCLUDE($PSPELL_INCDIR)
-fi
diff --git a/ext/pspell/config.w32 b/ext/pspell/config.w32
deleted file mode 100644
index 741a4bc8f0..0000000000
--- a/ext/pspell/config.w32
+++ /dev/null
@@ -1,16 +0,0 @@
-// $Id$
-// vim:ft=javascript
-
-ARG_WITH("pspell", "pspell/aspell (whatever it's called this month) support", "no");
-
-if (PHP_PSPELL != "no") {
-
- if (CHECK_HEADER_ADD_INCLUDE("pspell.h", "CFLAGS_PSPELL", PHP_PHP_BUILD + "\\include\\pspell;" + PHP_PSPELL) &&
- CHECK_LIB("aspell*.lib", "pspell", PHP_PSPELL)) {
- EXTENSION('pspell', 'pspell.c');
- AC_DEFINE('HAVE_PSPELL', 1);
- } else {
- WARNING("pspell not enabled; libraries and headers not found");
- }
-}
-
diff --git a/ext/pspell/php_pspell.h b/ext/pspell/php_pspell.h
deleted file mode 100644
index 2111fdecc1..0000000000
--- a/ext/pspell/php_pspell.h
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Vlad Krupin <phpdevel@echospace.com> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifndef _PSPELL_H
-#define _PSPELL_H
-#if HAVE_PSPELL
-extern zend_module_entry pspell_module_entry;
-#define pspell_module_ptr &pspell_module_entry
-
-PHP_MINIT_FUNCTION(pspell);
-PHP_MINFO_FUNCTION(pspell);
-PHP_FUNCTION(pspell_new);
-PHP_FUNCTION(pspell_new_personal);
-PHP_FUNCTION(pspell_new_config);
-PHP_FUNCTION(pspell_check);
-PHP_FUNCTION(pspell_suggest);
-PHP_FUNCTION(pspell_store_replacement);
-PHP_FUNCTION(pspell_add_to_personal);
-PHP_FUNCTION(pspell_add_to_session);
-PHP_FUNCTION(pspell_clear_session);
-PHP_FUNCTION(pspell_save_wordlist);
-PHP_FUNCTION(pspell_config_create);
-PHP_FUNCTION(pspell_config_runtogether);
-PHP_FUNCTION(pspell_config_mode);
-PHP_FUNCTION(pspell_config_ignore);
-PHP_FUNCTION(pspell_config_personal);
-PHP_FUNCTION(pspell_config_dict_dir);
-PHP_FUNCTION(pspell_config_data_dir);
-PHP_FUNCTION(pspell_config_repl);
-PHP_FUNCTION(pspell_config_save_repl);
-#else
-#define pspell_module_ptr NULL
-#endif
-
-#define phpext_pspell_ptr pspell_module_ptr
-
-#endif /* _PSPELL_H */
diff --git a/ext/pspell/pspell.c b/ext/pspell/pspell.c
deleted file mode 100644
index 4b15e25bd2..0000000000
--- a/ext/pspell/pspell.c
+++ /dev/null
@@ -1,954 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Vlad Krupin <phpdevel@echospace.com> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#define IS_EXT_MODULE
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "php.h"
-
-#include <stdlib.h>
-#include <ctype.h>
-#include <stdio.h>
-
-#if HAVE_PSPELL
-
-/* this will enforce compatibility in .12 version (broken after .11.2) */
-#define USE_ORIGINAL_MANAGER_FUNCS
-
-#include "php_pspell.h"
-#include <pspell.h>
-#include "ext/standard/info.h"
-
-#define PSPELL_FAST 1L
-#define PSPELL_NORMAL 2L
-#define PSPELL_BAD_SPELLERS 3L
-#define PSPELL_SPEED_MASK_INTERNAL 3L
-#define PSPELL_RUN_TOGETHER 8L
-
-/* Largest ignored word can be 999 characters (this seems sane enough),
- * and it takes 3 bytes to represent that (see pspell_config_ignore)
- */
-#define PSPELL_LARGEST_WORD 3
-
-/* {{{ pspell_functions[]
- */
-function_entry pspell_functions[] = {
- PHP_FE(pspell_new, NULL)
- PHP_FE(pspell_new_personal, NULL)
- PHP_FE(pspell_new_config, NULL)
- PHP_FE(pspell_check, NULL)
- PHP_FE(pspell_suggest, NULL)
- PHP_FE(pspell_store_replacement, NULL)
- PHP_FE(pspell_add_to_personal, NULL)
- PHP_FE(pspell_add_to_session, NULL)
- PHP_FE(pspell_clear_session, NULL)
- PHP_FE(pspell_save_wordlist, NULL)
- PHP_FE(pspell_config_create, NULL)
- PHP_FE(pspell_config_runtogether, NULL)
- PHP_FE(pspell_config_mode, NULL)
- PHP_FE(pspell_config_ignore, NULL)
- PHP_FE(pspell_config_personal, NULL)
- PHP_FE(pspell_config_dict_dir, NULL)
- PHP_FE(pspell_config_data_dir, NULL)
- PHP_FE(pspell_config_repl, NULL)
- PHP_FE(pspell_config_save_repl, NULL)
- {NULL, NULL, NULL}
-};
-/* }}} */
-
-static int le_pspell, le_pspell_config;
-
-zend_module_entry pspell_module_entry = {
- STANDARD_MODULE_HEADER,
- "pspell", pspell_functions, PHP_MINIT(pspell), NULL, NULL, NULL, PHP_MINFO(pspell), NO_VERSION_YET, STANDARD_MODULE_PROPERTIES
-};
-
-#ifdef COMPILE_DL_PSPELL
-ZEND_GET_MODULE(pspell)
-#endif
-
-static void php_pspell_close(zend_rsrc_list_entry *rsrc TSRMLS_DC)
-{
- PspellManager *manager = (PspellManager *)rsrc->ptr;
-
- delete_pspell_manager(manager);
-}
-
-static void php_pspell_close_config(zend_rsrc_list_entry *rsrc TSRMLS_DC)
-{
- PspellConfig *config = (PspellConfig *)rsrc->ptr;
-
- delete_pspell_config(config);
-}
-
-/* {{{ PHP_MINIT_FUNCTION
- */
-PHP_MINIT_FUNCTION(pspell)
-{
- REGISTER_LONG_CONSTANT("PSPELL_FAST", PSPELL_FAST, CONST_PERSISTENT | CONST_CS);
- REGISTER_LONG_CONSTANT("PSPELL_NORMAL", PSPELL_NORMAL, CONST_PERSISTENT | CONST_CS);
- REGISTER_LONG_CONSTANT("PSPELL_BAD_SPELLERS", PSPELL_BAD_SPELLERS, CONST_PERSISTENT | CONST_CS);
- REGISTER_LONG_CONSTANT("PSPELL_RUN_TOGETHER", PSPELL_RUN_TOGETHER, CONST_PERSISTENT | CONST_CS);
- le_pspell = zend_register_list_destructors_ex(php_pspell_close, NULL, "pspell", module_number);
- le_pspell_config = zend_register_list_destructors_ex(php_pspell_close_config, NULL, "pspell config", module_number);
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ proto int pspell_new(string language [, string spelling [, string jargon [, string encoding [, int mode]]]])
- Load a dictionary */
-PHP_FUNCTION(pspell_new)
-{
- zval **language,**spelling,**jargon,**encoding,**pmode;
- long mode = 0L, speed = 0L;
- int argc;
- int ind;
-
-#ifdef PHP_WIN32
- TCHAR aspell_dir[200];
- TCHAR data_dir[220];
- TCHAR dict_dir[220];
- HKEY hkey;
- DWORD dwType,dwLen;
-#endif
-
- PspellCanHaveError *ret;
- PspellManager *manager;
- PspellConfig *config;
-
- argc = ZEND_NUM_ARGS();
- if (argc < 1 || argc > 5 || zend_get_parameters_ex(argc,&language,&spelling,&jargon,&encoding,&pmode) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- config = new_pspell_config();
-
-#ifdef PHP_WIN32
- /* If aspell was installed using installer, we should have a key
- * pointing to the location of the dictionaries
- */
- if(0 == RegOpenKey(HKEY_LOCAL_MACHINE, "Software\\Aspell", &hkey)) {
- RegQueryValueEx(hkey, "", NULL, &dwType, (LPBYTE)&aspell_dir, &dwLen);
- RegCloseKey(hkey);
- strcpy(data_dir, aspell_dir);
- strcat(data_dir, "\\data");
- strcpy(dict_dir, aspell_dir);
- strcat(dict_dir, "\\dict");
-
- pspell_config_replace(config, "data-dir", data_dir);
- pspell_config_replace(config, "dict-dir", dict_dir);
- }
-#endif
-
- convert_to_string_ex(language);
- pspell_config_replace(config, "language-tag", Z_STRVAL_PP(language));
-
- if(argc > 1){
- convert_to_string_ex(spelling);
- if(Z_STRLEN_PP(spelling) > 0){
- pspell_config_replace(config, "spelling", Z_STRVAL_PP(spelling));
- }
- }
-
- if(argc > 2){
- convert_to_string_ex(jargon);
- if(Z_STRLEN_PP(jargon) > 0){
- pspell_config_replace(config, "jargon", Z_STRVAL_PP(jargon));
- }
- }
-
- if(argc > 3){
- convert_to_string_ex(encoding);
- if(Z_STRLEN_PP(encoding) > 0){
- pspell_config_replace(config, "encoding", Z_STRVAL_PP(encoding));
- }
- }
-
- if(argc > 4){
- convert_to_long_ex(pmode);
- mode = Z_LVAL_PP(pmode);
- speed = mode & PSPELL_SPEED_MASK_INTERNAL;
-
- /* First check what mode we want (how many suggestions) */
- if(speed == PSPELL_FAST){
- pspell_config_replace(config, "sug-mode", "fast");
- }else if(speed == PSPELL_NORMAL){
- pspell_config_replace(config, "sug-mode", "normal");
- }else if(speed == PSPELL_BAD_SPELLERS){
- pspell_config_replace(config, "sug-mode", "bad-spellers");
- }
-
- /* Then we see if run-together words should be treated as valid components */
- if(mode & PSPELL_RUN_TOGETHER){
- pspell_config_replace(config, "run-together", "true");
- }
- }
-
- ret = new_pspell_manager(config);
- delete_pspell_config(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));
- RETURN_FALSE;
- }
-
- manager = to_pspell_manager(ret);
- ind = zend_list_insert(manager, le_pspell);
- RETURN_LONG(ind);
-}
-/* }}} */
-
-/* {{{ proto int pspell_new_personal(string personal, string language [, string spelling [, string jargon [, string encoding [, int mode]]]])
- Load a dictionary with a personal wordlist*/
-PHP_FUNCTION(pspell_new_personal)
-{
- zval **personal, **language,**spelling,**jargon,**encoding,**pmode;
- long mode = 0L, speed = 0L;
- int argc;
- int ind;
-
-#ifdef PHP_WIN32
- TCHAR aspell_dir[200];
- TCHAR data_dir[220];
- TCHAR dict_dir[220];
- HKEY hkey;
- DWORD dwType,dwLen;
-#endif
-
- PspellCanHaveError *ret;
- PspellManager *manager;
- PspellConfig *config;
-
- argc = ZEND_NUM_ARGS();
- if (argc < 2 || argc > 6 || zend_get_parameters_ex(argc,&personal,&language,&spelling,&jargon,&encoding,&pmode) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- config = new_pspell_config();
-
-#ifdef PHP_WIN32
- /* If aspell was installed using installer, we should have a key
- * pointing to the location of the dictionaries
- */
- if(0 == RegOpenKey(HKEY_LOCAL_MACHINE, "Software\\Aspell", &hkey)) {
- RegQueryValueEx(hkey, "", NULL, &dwType, (LPBYTE)&aspell_dir, &dwLen);
- RegCloseKey(hkey);
- strcpy(data_dir, aspell_dir);
- strcat(data_dir, "\\data");
- strcpy(dict_dir, aspell_dir);
- strcat(dict_dir, "\\dict");
-
- pspell_config_replace(config, "data-dir", data_dir);
- pspell_config_replace(config, "dict-dir", dict_dir);
- }
-#endif
-
- convert_to_string_ex(personal);
-
- if (PG(safe_mode) && (!php_checkuid(Z_STRVAL_PP(personal), NULL, CHECKUID_CHECK_FILE_AND_DIR))) {
- RETURN_FALSE;
- }
-
- if (php_check_open_basedir(Z_STRVAL_PP(personal) TSRMLS_CC)) {
- RETURN_FALSE;
- }
-
- pspell_config_replace(config, "personal", Z_STRVAL_PP(personal));
- pspell_config_replace(config, "save-repl", "false");
-
- convert_to_string_ex(language);
- pspell_config_replace(config, "language-tag", Z_STRVAL_PP(language));
-
- if(argc > 2){
- convert_to_string_ex(spelling);
- if(Z_STRLEN_PP(spelling) > 0){
- pspell_config_replace(config, "spelling", Z_STRVAL_PP(spelling));
- }
- }
-
- if(argc > 3){
- convert_to_string_ex(jargon);
- if(Z_STRLEN_PP(jargon) > 0){
- pspell_config_replace(config, "jargon", Z_STRVAL_PP(jargon));
- }
- }
-
- if(argc > 4){
- convert_to_string_ex(encoding);
- if(Z_STRLEN_PP(encoding) > 0){
- pspell_config_replace(config, "encoding", Z_STRVAL_PP(encoding));
- }
- }
-
- if(argc > 5){
- convert_to_long_ex(pmode);
- mode = Z_LVAL_PP(pmode);
- speed = mode & PSPELL_SPEED_MASK_INTERNAL;
-
- /* First check what mode we want (how many suggestions) */
- if(speed == PSPELL_FAST){
- pspell_config_replace(config, "sug-mode", "fast");
- }else if(speed == PSPELL_NORMAL){
- pspell_config_replace(config, "sug-mode", "normal");
- }else if(speed == PSPELL_BAD_SPELLERS){
- pspell_config_replace(config, "sug-mode", "bad-spellers");
- }
-
- /* Then we see if run-together words should be treated as valid components */
- if(mode & PSPELL_RUN_TOGETHER){
- pspell_config_replace(config, "run-together", "true");
- }
- }
-
- ret = new_pspell_manager(config);
- delete_pspell_config(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));
- RETURN_FALSE;
- }
-
- manager = to_pspell_manager(ret);
- ind = zend_list_insert(manager, le_pspell);
- RETURN_LONG(ind);
-}
-/* }}} */
-
-/* {{{ proto int pspell_new_config(int config)
- Load a dictionary based on the given config */
-PHP_FUNCTION(pspell_new_config)
-{
- int type;
- zval **conf;
- int argc;
- int ind;
-
- PspellCanHaveError *ret;
- PspellManager *manager;
- PspellConfig *config;
-
- argc = ZEND_NUM_ARGS();
- if (argc != 1 || zend_get_parameters_ex(argc,&conf) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long_ex(conf);
- config = (PspellConfig *) zend_list_find(Z_LVAL_PP(conf), &type);
-
- if (config == NULL || type != le_pspell_config) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "%ld is not a PSPELL config index", Z_LVAL_PP(conf));
- RETURN_FALSE;
- }
-
- ret = new_pspell_manager(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));
- RETURN_FALSE;
- }
-
- manager = to_pspell_manager(ret);
- ind = zend_list_insert(manager, le_pspell);
- RETURN_LONG(ind);
-}
-/* }}} */
-
-/* {{{ proto bool pspell_check(int pspell, string word)
- Returns true if word is valid */
-PHP_FUNCTION(pspell_check)
-{
- int type;
- zval **scin,**word;
- PspellManager *manager;
-
- int argc;
- argc = ZEND_NUM_ARGS();
- if (argc != 2 || zend_get_parameters_ex(argc, &scin,&word) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long_ex(scin);
- convert_to_string_ex(word);
- manager = (PspellManager *) zend_list_find(Z_LVAL_PP(scin), &type);
- if(!manager){
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "%ld is not a PSPELL result index", Z_LVAL_PP(scin));
- RETURN_FALSE;
- }
-
- if(pspell_manager_check(manager, Z_STRVAL_PP(word))){
- RETURN_TRUE;
- }else{
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-/* {{{ proto array pspell_suggest(int pspell, string word)
- Returns array of suggestions */
-PHP_FUNCTION(pspell_suggest)
-{
- zval **scin, **word;
- int argc;
- PspellManager *manager;
- int type;
- const PspellWordList *wl;
- const char *sug;
-
- argc = ZEND_NUM_ARGS();
- if(argc != 2 || zend_get_parameters_ex(argc, &scin,&word) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long_ex(scin);
- convert_to_string_ex(word);
- manager = (PspellManager *) zend_list_find(Z_LVAL_PP(scin), &type);
- if(!manager){
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "%ld is not a PSPELL result index", Z_LVAL_PP(scin));
- RETURN_FALSE;
- }
-
- array_init(return_value);
-
- wl = pspell_manager_suggest(manager, Z_STRVAL_PP(word));
- if(wl){
- PspellStringEmulation *els = pspell_word_list_elements(wl);
- while((sug = pspell_string_emulation_next(els)) != 0){
- add_next_index_string(return_value,(char *)sug,1);
- }
- delete_pspell_string_emulation(els);
- }else{
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "PSPELL had a problem. details: %s ", pspell_manager_error_message(manager));
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-/* {{{ proto bool pspell_store_replacement(int pspell, string misspell, string correct)
- Notify the dictionary of a user-selected replacement */
-PHP_FUNCTION(pspell_store_replacement)
-{
- int type;
- zval **scin,**miss,**corr;
- PspellManager *manager;
-
- int argc;
- argc = ZEND_NUM_ARGS();
- if (argc != 3 || zend_get_parameters_ex(argc, &scin,&miss,&corr) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long_ex(scin);
- convert_to_string_ex(miss);
- convert_to_string_ex(corr);
- manager = (PspellManager *) zend_list_find(Z_LVAL_PP(scin), &type);
- if(!manager){
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "%ld is not a PSPELL result index", Z_LVAL_PP(scin));
- RETURN_FALSE;
- }
-
- pspell_manager_store_replacement(manager, Z_STRVAL_PP(miss), Z_STRVAL_PP(corr));
- if(pspell_manager_error_number(manager) == 0){
- RETURN_TRUE;
- }else{
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "pspell_store_replacement() gave error: %s", pspell_manager_error_message(manager));
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-/* {{{ proto bool pspell_add_to_personal(int pspell, string word)
- Adds a word to a personal list */
-PHP_FUNCTION(pspell_add_to_personal)
-{
- int type;
- zval **scin,**word;
- PspellManager *manager;
-
- int argc;
- argc = ZEND_NUM_ARGS();
- if (argc != 2 || zend_get_parameters_ex(argc, &scin,&word) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long_ex(scin);
- convert_to_string_ex(word);
- manager = (PspellManager *) zend_list_find(Z_LVAL_PP(scin), &type);
- if(!manager){
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "%ld is not a PSPELL result index", Z_LVAL_PP(scin));
- RETURN_FALSE;
- }
-
- /*If the word is empty, we have to return; otherwise we'll segfault! ouch!*/
- if(Z_STRLEN_PP(word) == 0){
- RETURN_FALSE;
- }
-
- pspell_manager_add_to_personal(manager, Z_STRVAL_PP(word));
- if(pspell_manager_error_number(manager) == 0){
- RETURN_TRUE;
- }else{
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "pspell_add_to_personal() gave error: %s", pspell_manager_error_message(manager));
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-/* {{{ proto bool pspell_add_to_session(int pspell, string word)
- Adds a word to the current session */
-PHP_FUNCTION(pspell_add_to_session)
-{
- int type;
- zval **scin,**word;
- PspellManager *manager;
-
- int argc;
- argc = ZEND_NUM_ARGS();
- if (argc != 2 || zend_get_parameters_ex(argc, &scin,&word) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long_ex(scin);
- convert_to_string_ex(word);
- manager = (PspellManager *) zend_list_find(Z_LVAL_PP(scin), &type);
- if(!manager){
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "%ld is not a PSPELL result index", Z_LVAL_PP(scin));
- RETURN_FALSE;
- }
-
- /*If the word is empty, we have to return; otherwise we'll segfault! ouch!*/
- if(Z_STRLEN_PP(word) == 0){
- RETURN_FALSE;
- }
-
- pspell_manager_add_to_session(manager, Z_STRVAL_PP(word));
- if(pspell_manager_error_number(manager) == 0){
- RETURN_TRUE;
- }else{
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "pspell_add_to_session() gave error: %s", pspell_manager_error_message(manager));
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-/* {{{ proto bool pspell_clear_session(int pspell)
- Clears the current session */
-PHP_FUNCTION(pspell_clear_session)
-{
- int type;
- zval **scin;
- PspellManager *manager;
-
- int argc;
- argc = ZEND_NUM_ARGS();
- if (argc != 1 || zend_get_parameters_ex(argc, &scin) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long_ex(scin);
- manager = (PspellManager *) zend_list_find(Z_LVAL_PP(scin), &type);
- if(!manager){
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "%ld is not a PSPELL result index", Z_LVAL_PP(scin));
- RETURN_FALSE;
- }
-
- pspell_manager_clear_session(manager);
- if(pspell_manager_error_number(manager) == 0){
- RETURN_TRUE;
- }else{
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "pspell_clear_session() gave error: %s", pspell_manager_error_message(manager));
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-/* {{{ proto bool pspell_save_wordlist(int pspell)
- Saves the current (personal) wordlist */
-PHP_FUNCTION(pspell_save_wordlist)
-{
- int type;
- zval **scin;
- PspellManager *manager;
-
- int argc;
- argc = ZEND_NUM_ARGS();
- if (argc != 1 || zend_get_parameters_ex(argc, &scin) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long_ex(scin);
- manager = (PspellManager *) zend_list_find(Z_LVAL_PP(scin), &type);
- if(!manager){
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "%ld is not a PSPELL result index", Z_LVAL_PP(scin));
- RETURN_FALSE;
- }
-
- pspell_manager_save_all_word_lists(manager);
-
- if(pspell_manager_error_number(manager) == 0){
- RETURN_TRUE;
- }else{
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "pspell_save_wordlist() gave error: %s", pspell_manager_error_message(manager));
- RETURN_FALSE;
- }
-
-}
-/* }}} */
-
-/* {{{ proto int pspell_config_create(string language [, string spelling [, string jargon [, string encoding]]])
- Create a new config to be used later to create a manager */
-PHP_FUNCTION(pspell_config_create)
-{
- zval **language,**spelling,**jargon,**encoding;
- int argc;
- int ind;
-
- PspellConfig *config;
-
-#ifdef PHP_WIN32
- TCHAR aspell_dir[200];
- TCHAR data_dir[220];
- TCHAR dict_dir[220];
- HKEY hkey;
- DWORD dwType,dwLen;
-#endif
-
- argc = ZEND_NUM_ARGS();
- if (argc < 1 || argc > 4 || zend_get_parameters_ex(argc,&language,&spelling,&jargon,&encoding) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- config = new_pspell_config();
-
-#ifdef PHP_WIN32
- /* If aspell was installed using installer, we should have a key
- * pointing to the location of the dictionaries
- */
- if(0 == RegOpenKey(HKEY_LOCAL_MACHINE, "Software\\Aspell", &hkey)) {
- RegQueryValueEx(hkey, "", NULL, &dwType, (LPBYTE)&aspell_dir, &dwLen);
- RegCloseKey(hkey);
- strcpy(data_dir, aspell_dir);
- strcat(data_dir, "\\data");
- strcpy(dict_dir, aspell_dir);
- strcat(dict_dir, "\\dict");
-
- pspell_config_replace(config, "data-dir", data_dir);
- pspell_config_replace(config, "dict-dir", dict_dir);
- }
-#endif
-
- convert_to_string_ex(language);
- pspell_config_replace(config, "language-tag", Z_STRVAL_PP(language));
-
- if(argc > 1){
- convert_to_string_ex(spelling);
- if(Z_STRLEN_PP(spelling) > 0){
- pspell_config_replace(config, "spelling", Z_STRVAL_PP(spelling));
- }
- }
-
- if(argc > 2){
- convert_to_string_ex(jargon);
- if(Z_STRLEN_PP(jargon) > 0){
- pspell_config_replace(config, "jargon", Z_STRVAL_PP(jargon));
- }
- }
-
- if(argc > 3){
- convert_to_string_ex(encoding);
- if(Z_STRLEN_PP(encoding) > 0){
- pspell_config_replace(config, "encoding", Z_STRVAL_PP(encoding));
- }
- }
-
- /* By default I do not want to write anything anywhere because it'll try to write to $HOME
- which is not what we want */
- pspell_config_replace(config, "save-repl", "false");
-
- ind = zend_list_insert(config, le_pspell_config);
- RETURN_LONG(ind);
-}
-/* }}} */
-
-/* {{{ proto bool pspell_config_runtogether(int conf, bool runtogether)
- Consider run-together words as valid components */
-PHP_FUNCTION(pspell_config_runtogether)
-{
- int type;
- zval **sccin, **runtogether;
- int argc;
-
- PspellConfig *config;
-
- argc = ZEND_NUM_ARGS();
- if (argc != 2 || zend_get_parameters_ex(argc,&sccin,&runtogether) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long_ex(sccin);
- config = (PspellConfig *) zend_list_find(Z_LVAL_PP(sccin), &type);
- if(!config){
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "%ld is not a PSPELL config index", Z_LVAL_PP(sccin));
- RETURN_FALSE;
- }
-
- convert_to_boolean_ex(runtogether);
- pspell_config_replace(config, "run-together", Z_LVAL_PP(runtogether) ? "true" : "false");
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto bool pspell_config_mode(int conf, long mode)
- Select mode for config (PSPELL_FAST, PSPELL_NORMAL or PSPELL_BAD_SPELLERS) */
-PHP_FUNCTION(pspell_config_mode)
-{
- int type;
- zval **sccin, **mode;
- int argc;
-
- PspellConfig *config;
-
- argc = ZEND_NUM_ARGS();
- if (argc != 2 || zend_get_parameters_ex(argc,&sccin,&mode) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long_ex(sccin);
- config = (PspellConfig *) zend_list_find(Z_LVAL_PP(sccin), &type);
- if(!config){
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "%ld is not a PSPELL config index", Z_LVAL_PP(sccin));
- RETURN_FALSE;
- }
-
- convert_to_long_ex(mode);
-
- /* First check what mode we want (how many suggestions) */
- if(Z_LVAL_PP(mode) == PSPELL_FAST){
- pspell_config_replace(config, "sug-mode", "fast");
- }else if(Z_LVAL_PP(mode) == PSPELL_NORMAL){
- pspell_config_replace(config, "sug-mode", "normal");
- }else if(Z_LVAL_PP(mode) == PSPELL_BAD_SPELLERS){
- pspell_config_replace(config, "sug-mode", "bad-spellers");
- }
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto bool pspell_config_ignore(int conf, int ignore)
- Ignore words <= n chars */
-PHP_FUNCTION(pspell_config_ignore)
-{
- int type;
- zval **sccin, **pignore;
- int argc;
-
- int loc = PSPELL_LARGEST_WORD;
- char ignore_str[PSPELL_LARGEST_WORD + 1];
- long ignore = 0L;
-
- PspellConfig *config;
-
- argc = ZEND_NUM_ARGS();
- if (argc != 2 || zend_get_parameters_ex(argc,&sccin,&pignore) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long_ex(sccin);
- config = (PspellConfig *) zend_list_find(Z_LVAL_PP(sccin), &type);
- if(!config){
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "%ld is not a PSPELL config index", Z_LVAL_PP(sccin));
- RETURN_FALSE;
- }
-
- convert_to_long_ex(pignore);
- ignore = Z_LVAL_PP(pignore);
-
- /* The following is a very hackish way to convert a long to a string
- (actually only the numbers 0-999 will get converted properly, but that should
- be sufficient). If anyone knows of a better way to convert an integer to a string,
- please, fix it.*/
- ignore_str[loc] = '\0';
- while(ignore > 0){
- if(loc == 0){
- break;
- }
- ignore_str[--loc] = '0' + (ignore % 10);
- ignore /= 10;
- }
- if(ignore_str[loc] == '\0'){
- ignore_str[--loc] = '0';
- }
-
- pspell_config_replace(config, "ignore", &ignore_str[loc]);
- RETURN_TRUE;
-}
-/* }}} */
-
-static void pspell_config_path(INTERNAL_FUNCTION_PARAMETERS, char *option)
-{
- int type;
- zval **sccin, **value;
- int argc;
- PspellConfig *config;
-
- argc = ZEND_NUM_ARGS();
- if (argc != 2 || zend_get_parameters_ex(argc, &sccin, &value) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long_ex(sccin);
- config = (PspellConfig *) zend_list_find(Z_LVAL_PP(sccin), &type);
- if (!config) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "%ld is not a PSPELL config index", Z_LVAL_PP(sccin));
- RETURN_FALSE;
- }
-
- convert_to_string_ex(value);
-
- if (PG(safe_mode) && (!php_checkuid(Z_STRVAL_PP(value), NULL, CHECKUID_CHECK_FILE_AND_DIR))) {
- RETURN_FALSE;
- }
-
- if (php_check_open_basedir(Z_STRVAL_PP(value) TSRMLS_CC)) {
- RETURN_FALSE;
- }
-
- pspell_config_replace(config, option, Z_STRVAL_PP(value));
-
- RETURN_TRUE;
-}
-
-/* {{{ proto bool pspell_config_personal(int conf, string personal)
- Use a personal dictionary for this config */
-PHP_FUNCTION(pspell_config_personal)
-{
- pspell_config_path(INTERNAL_FUNCTION_PARAM_PASSTHRU, "personal");
-}
-/* }}} */
-
-/* {{{ proto bool pspell_config_dict_dir(int conf, string directory)
- location of the main word list */
-PHP_FUNCTION(pspell_config_dict_dir)
-{
- pspell_config_path(INTERNAL_FUNCTION_PARAM_PASSTHRU, "dict-dir");
-}
-/* }}} */
-
-/* {{{ proto bool pspell_config_data_dir(int conf, string directory)
- location of language data files */
-PHP_FUNCTION(pspell_config_data_dir)
-{
- pspell_config_path(INTERNAL_FUNCTION_PARAM_PASSTHRU, "data-dir");
-}
-/* }}} */
-
-/* {{{ proto bool pspell_config_repl(int conf, string repl)
- Use a personal dictionary with replacement pairs for this config */
-PHP_FUNCTION(pspell_config_repl)
-{
- int type;
- zval **sccin, **repl;
- int argc;
-
- PspellConfig *config;
-
- argc = ZEND_NUM_ARGS();
- if (argc != 2 || zend_get_parameters_ex(argc,&sccin,&repl) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long_ex(sccin);
- config = (PspellConfig *) zend_list_find(Z_LVAL_PP(sccin), &type);
- if(!config){
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "%ld is not a PSPELL config index", Z_LVAL_PP(sccin));
- RETURN_FALSE;
- }
-
- pspell_config_replace(config, "save-repl", "true");
-
- convert_to_string_ex(repl);
-
- if (PG(safe_mode) && (!php_checkuid(Z_STRVAL_PP(repl), NULL, CHECKUID_CHECK_FILE_AND_DIR))) {
- RETURN_FALSE;
- }
-
- if (php_check_open_basedir(Z_STRVAL_PP(repl) TSRMLS_CC)) {
- RETURN_FALSE;
- }
-
- pspell_config_replace(config, "repl", Z_STRVAL_PP(repl));
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto bool pspell_config_save_repl(int conf, bool save)
- Save replacement pairs when personal list is saved for this config */
-PHP_FUNCTION(pspell_config_save_repl)
-{
- int type;
- zval **sccin, **save;
- int argc;
-
- PspellConfig *config;
-
- argc = ZEND_NUM_ARGS();
- if (argc != 2 || zend_get_parameters_ex(argc,&sccin,&save) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long_ex(sccin);
- config = (PspellConfig *) zend_list_find(Z_LVAL_PP(sccin), &type);
- if(!config){
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "%ld is not a PSPELL config index", Z_LVAL_PP(sccin));
- RETURN_FALSE;
- }
-
- convert_to_boolean_ex(save);
- pspell_config_replace(config, "save-repl", Z_LVAL_PP(save) ? "true" : "false");
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ PHP_MINFO_FUNCTION
- */
-PHP_MINFO_FUNCTION(pspell)
-{
- php_info_print_table_start();
- php_info_print_table_row(2, "PSpell Support", "enabled");
- php_info_print_table_end();
-}
-/* }}} */
-
-#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/pspell/pspell.dsp b/ext/pspell/pspell.dsp
deleted file mode 100644
index f310099d89..0000000000
--- a/ext/pspell/pspell.dsp
+++ /dev/null
@@ -1,112 +0,0 @@
-# Microsoft Developer Studio Project File - Name="pspell" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=pspell - Win32 Debug_TS
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "pspell.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "pspell.mak" CFG="pspell - Win32 Debug_TS"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "pspell - Win32 Debug_TS" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "pspell - Win32 Release_TS" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "pspell - Win32 Debug_TS"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "pspell___Win32_Debug_TS"
-# PROP BASE Intermediate_Dir "pspell___Win32_Debug_TS"
-# PROP BASE Ignore_Export_Lib 0
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug_TS"
-# PROP Intermediate_Dir "Debug_TS"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /I "..\.." /I "..\..\main" /I "..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\..\zlib" /I "..\..\TSRM" /D ZEND_DEBUG=1 /D "WIN32" /D "ZEND_WIN32" /D "PHP_WIN32" /D "_WINDOWS" /YX /FD /GZ /c
-# ADD CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /I "..\.." /I "..\..\main" /I "..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\..\zlib" /I "..\..\TSRM" /I "..\..\..\aspell\include\pspell" /I "..\..\..\php_build\include\pspell." /D ZEND_DEBUG=1 /D "_DEBUG" /D ZTS=1 /D HAVE_PSPELL=1 /D "COMPILE_DL_PSPELL" /D "WIN32" /D "ZEND_WIN32" /D "PHP_WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "PSPELL_EXPORTS" /YX /FD /GZ /c
-# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 php5ts_debug.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /out:"..\..\Debug_TS/php_pspell.dll" /pdbtype:sept /libpath:"..\..\Debug_TS"
-# ADD LINK32 php5ts_debug.lib aspell-15.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /out:"..\..\Debug_TS/php_pspell.dll" /pdbtype:sept /libpath:"..\..\Debug_TS" /libpath:"..\..\..\aspell\lib"
-
-!ELSEIF "$(CFG)" == "pspell - Win32 Release_TS"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "pspell___Win32_Release_TS"
-# PROP BASE Intermediate_Dir "pspell___Win32_Release_TS"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release_TS"
-# PROP Intermediate_Dir "Release_TS"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "PSPELL_EXPORTS" /YX /FD /c
-# ADD CPP /nologo /MT /W3 /GX /O2 /I "..\.." /I "..\..\main" /I "..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\..\zlib" /I "..\..\TSRM" /I "..\..\..\aspell\include\pspell" /I "..\..\..\php_build\include\pspell" /D ZEND_DEBUG=0 /D "NDEBUG" /D ZTS=1 /D HAVE_PSPELL=1 /D "COMPILE_DL_PSPELL" /D "WIN32" /D "ZEND_WIN32" /D "PHP_WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "PSPELL_EXPORTS" /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386
-# ADD LINK32 php5ts.lib aspell-15.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 /out:"..\..\Release_TS/php_pspell.dll" /libpath:"..\..\Release_TS" /libpath:"..\..\..\aspell\lib"
-
-!ENDIF
-
-# Begin Target
-
-# Name "pspell - Win32 Debug_TS"
-# Name "pspell - Win32 Release_TS"
-# Begin Group "Source Files"
-
-# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
-# Begin Source File
-
-SOURCE=.\pspell.c
-# End Source File
-# End Group
-# Begin Group "Header Files"
-
-# PROP Default_Filter "h;hpp;hxx;hm;inl"
-# Begin Source File
-
-SOURCE=.\php_pspell.h
-# End Source File
-# End Group
-# Begin Group "Resource Files"
-
-# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
-# End Group
-# End Target
-# End Project
diff --git a/ext/pspell/tests/01pspell_basic.phpt b/ext/pspell/tests/01pspell_basic.phpt
deleted file mode 100644
index 107690e088..0000000000
--- a/ext/pspell/tests/01pspell_basic.phpt
+++ /dev/null
@@ -1,140 +0,0 @@
---TEST--
-pspell basic tests (warning: may fail with pspell/aspell < GNU Aspell 0.50.3)
---SKIPIF--
-<?php
- if (!extension_loaded("pspell")) print "skip";
- if (!@pspell_new ("en", "", "", "", (PSPELL_FAST|PSPELL_RUN_TOGETHER))) {
- die("skip English dictionary is not avaliable");
- }
-?>
---FILE--
-<?php // $Id$
-
-error_reporting(E_ALL);
-$string = "";
-$string .= "I will not buy this record, it is scratched. ";
-$string .= "Sorry ";
-$string .= "I will not buy this record, it is scratched. ";
-$string .= "Uh, no, no, no. This is a tobacconist's ";
-$string .= "Ah! I will not buy this tobacconist's, it is scratched. ";
-$string .= "No, no, no, no. Tobacco... um... cigarettes (holds up a pack). ";
-$string .= "Ya! See-gar-ets! Ya! Uh... My hovercraft is full of eels. ";
-$string .= "Sorry? ";
-$string .= "My hovercraft (pantomimes puffing a cigarette)... is full of eels (pretends to strike a match). ";
-$string .= "Ahh, matches!";
-
-$pspell = pspell_new ("en", "", "", "", (PSPELL_FAST|PSPELL_RUN_TOGETHER));
-$array = explode(' ',preg_replace('/[^a-zA-Z0-9 ]/','',$string));
-for($i=0,$u=count($array);$i<$u;++$i) {
- echo $array[$i].' : ';
- if (!pspell_check($pspell, $array[$i])) {
- echo "..false\n";
- $suggestions = pspell_suggest ($pspell, $array[$i]);
-
- foreach ($suggestions as $suggestion) {
- echo "Possible spelling: $suggestion\n";
- }
- } else {
- echo "true\n";
- }
-}
-?>
---EXPECT--
-I : true
-will : true
-not : true
-buy : true
-this : true
-record : true
-it : true
-is : true
-scratched : true
-Sorry : true
-I : true
-will : true
-not : true
-buy : true
-this : true
-record : true
-it : true
-is : true
-scratched : true
-Uh : true
-no : true
-no : true
-no : true
-This : true
-is : true
-a : true
-tobacconists : true
-Ah : true
-I : true
-will : true
-not : true
-buy : true
-this : true
-tobacconists : true
-it : true
-is : true
-scratched : true
-No : true
-no : true
-no : true
-no : true
-Tobacco : true
-um : true
-cigarettes : true
-holds : true
-up : true
-a : true
-pack : true
-Ya : true
-Seegarets : ..false
-Possible spelling: Secrets
-Possible spelling: Regrets
-Possible spelling: Secretes
-Possible spelling: Egrets
-Possible spelling: Segre's
-Possible spelling: Seagate's
-Possible spelling: Regreets
-Possible spelling: Segregates
-Possible spelling: Sergeants
-Possible spelling: Sugariest
-Possible spelling: Garrets
-Possible spelling: Socrates
-Possible spelling: Egret's
-Possible spelling: Separates
-Possible spelling: Cigarettes
-Possible spelling: Sugared
-Possible spelling: Scarlets
-Ya : true
-Uh : true
-My : true
-hovercraft : true
-is : true
-full : true
-of : true
-eels : true
-Sorry : true
-My : true
-hovercraft : true
-pantomimes : true
-puffing : true
-a : true
-cigarette : true
-is : true
-full : true
-of : true
-eels : true
-pretends : true
-to : true
-strike : true
-a : true
-match : true
-Ahh : ..false
-Possible spelling: Shh
-Possible spelling: Ah
-Possible spelling: Aha
-Possible spelling: Ash
-Possible spelling: Ha
-matches : true
diff --git a/ext/readline/CREDITS b/ext/readline/CREDITS
deleted file mode 100644
index 02e44a44d4..0000000000
--- a/ext/readline/CREDITS
+++ /dev/null
@@ -1,2 +0,0 @@
-Readline
-Thies C. Arntzen
diff --git a/ext/readline/README.libedit b/ext/readline/README.libedit
deleted file mode 100644
index a19371056e..0000000000
--- a/ext/readline/README.libedit
+++ /dev/null
@@ -1,4 +0,0 @@
-This library can be built with libedit - non-GPL drop-in readline replacement.
-Libedit can be obtained from http://sourceforge.net/projects/libedit/
-It is taken from NetBSD (http://www.netbsd.org/) CVS repository and modified
-to work as stand-alone library.
diff --git a/ext/readline/config.m4 b/ext/readline/config.m4
deleted file mode 100644
index 8ed89206e8..0000000000
--- a/ext/readline/config.m4
+++ /dev/null
@@ -1,98 +0,0 @@
-dnl
-dnl $Id$
-dnl
-
-PHP_ARG_WITH(libedit,for libedit readline replacement,
-[ --with-libedit[=DIR] Include libedit readline replacement (CLI/CGI only).])
-
-PHP_ARG_WITH(readline,for readline support,
-[ --with-readline[=DIR] Include readline support (CLI/CGI only).])
-
-if test "$PHP_READLINE" != "no"; then
- for i in $PHP_READLINE /usr/local /usr; do
- test -f $i/include/readline/readline.h && READLINE_DIR=$i && break
- done
-
- if test -z "$READLINE_DIR"; then
- AC_MSG_ERROR(Please reinstall readline - I cannot find readline.h)
- fi
-
- PHP_ADD_INCLUDE($READLINE_DIR/include)
-
- PHP_READLINE_LIBS=""
- AC_CHECK_LIB(ncurses, tgetent,
- [
- PHP_ADD_LIBRARY(ncurses,,READLINE_SHARED_LIBADD)
- PHP_READLINE_LIBS="$PHP_READLINE_LIBS -lncurses"
- ],[
- AC_CHECK_LIB(termcap, tgetent,
- [
- PHP_ADD_LIBRARY(termcap,,READLINE_SHARED_LIBADD)
- PHP_READLINE_LIBS="$PHP_READLINE_LIBS -ltermcap"
- ])
- ])
-
- PHP_CHECK_LIBRARY(readline, readline,
- [
- PHP_ADD_LIBRARY_WITH_PATH(readline, $READLINE_DIR/lib, READLINE_SHARED_LIBADD)
- ], [
- AC_MSG_ERROR(readline library not found)
- ], [
- -L$READLINE_DIR/lib $PHP_READLINE_LIBS
- ])
-
- PHP_CHECK_LIBRARY(readline, rl_callback_read_char,
- [
- AC_DEFINE(HAVE_RL_CALLBACK_READ_CHAR, 1, [ ])
- ],[],[
- -L$READLINE_DIR/lib $PHP_READLINE_LIBS
- ])
-
- PHP_CHECK_LIBRARY(history, add_history,
- [
- PHP_ADD_LIBRARY_WITH_PATH(history, $READLINE_DIR/lib, READLINE_SHARED_LIBADD)
- ], [
- AC_MSG_ERROR(history library required by readline not found)
- ], [
- -L$READLINE_DIR/lib $PHP_READLINE_LIBS
- ])
-
- PHP_NEW_EXTENSION(readline, readline.c, $ext_shared, cli)
- PHP_SUBST(READLINE_SHARED_LIBADD)
- AC_DEFINE(HAVE_LIBREADLINE, 1, [ ])
-
-elif test "$PHP_LIBEDIT" != "no"; then
-
- for i in $PHP_LIBEDIT /usr/local /usr; do
- test -f $i/include/readline/readline.h && LIBEDIT_DIR=$i && break
- done
-
- if test -z "$LIBEDIT_DIR"; then
- AC_MSG_ERROR(Please reinstall libedit - I cannot find readline.h)
- fi
-
- PHP_ADD_INCLUDE($LIBEDIT_DIR/include)
-
- AC_CHECK_LIB(ncurses, tgetent,
- [
- PHP_ADD_LIBRARY(ncurses,,READLINE_SHARED_LIBADD)
- ],[
- AC_CHECK_LIB(termcap, tgetent,
- [
- PHP_ADD_LIBRARY(termcap,,READLINE_SHARED_LIBADD)
- ])
- ])
-
- PHP_CHECK_LIBRARY(edit, readline,
- [
- PHP_ADD_LIBRARY_WITH_PATH(edit, $LIBEDIT_DIR/lib, READLINE_SHARED_LIBADD)
- ], [
- AC_MSG_ERROR(edit library required by readline not found)
- ], [
- -L$READLINE_DIR/lib
- ])
-
- PHP_NEW_EXTENSION(readline, readline.c, $ext_shared, cli)
- PHP_SUBST(READLINE_SHARED_LIBADD)
- AC_DEFINE(HAVE_LIBEDIT, 1, [ ])
-fi
diff --git a/ext/readline/php_readline.h b/ext/readline/php_readline.h
deleted file mode 100644
index 852fd3b96b..0000000000
--- a/ext/readline/php_readline.h
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Thies C. Arntzen <thies@thieso.net> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifndef PHP_READLINE_H
-#define PHP_READLINE_H
-
-#if HAVE_LIBREADLINE || HAVE_LIBEDIT
-#ifdef ZTS
-#warning Readline module will *NEVER* be thread-safe
-#endif
-
-extern zend_module_entry readline_module_entry;
-#define phpext_readline_ptr &readline_module_entry
-
-#else
-
-#define phpext_readline_ptr NULL
-
-#endif /* HAVE_LIBREADLINE */
-
-#endif /* PHP_READLINE_H */
-
diff --git a/ext/readline/readline.c b/ext/readline/readline.c
deleted file mode 100644
index 3084b8abd7..0000000000
--- a/ext/readline/readline.c
+++ /dev/null
@@ -1,537 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Thies C. Arntzen <thies@thieso.net> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-/* {{{ includes & prototypes */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "php.h"
-#include "php_readline.h"
-
-#if HAVE_LIBREADLINE || HAVE_LIBEDIT
-
-#include <readline/readline.h>
-#ifndef HAVE_LIBEDIT
-#include <readline/history.h>
-#endif
-
-PHP_FUNCTION(readline);
-PHP_FUNCTION(readline_add_history);
-PHP_FUNCTION(readline_info);
-PHP_FUNCTION(readline_clear_history);
-#ifndef HAVE_LIBEDIT
-PHP_FUNCTION(readline_list_history);
-#endif
-PHP_FUNCTION(readline_read_history);
-PHP_FUNCTION(readline_write_history);
-PHP_FUNCTION(readline_completion_function);
-
-#if HAVE_RL_CALLBACK_READ_CHAR
-PHP_FUNCTION(readline_callback_handler_install);
-PHP_FUNCTION(readline_callback_read_char);
-PHP_FUNCTION(readline_callback_handler_remove);
-
-static zval *_prepped_callback = NULL;
-
-#endif
-
-static char *_readline_completion = NULL;
-static zval _readline_array;
-
-PHP_MINIT_FUNCTION(readline);
-PHP_RSHUTDOWN_FUNCTION(readline);
-
-/* }}} */
-/* {{{ module stuff */
-
-static zend_function_entry php_readline_functions[] = {
- PHP_FE(readline, NULL)
- PHP_FE(readline_info, NULL)
- PHP_FE(readline_add_history, NULL)
- PHP_FE(readline_clear_history, NULL)
-#ifndef HAVE_LIBEDIT
- PHP_FE(readline_list_history, NULL)
-#endif
- PHP_FE(readline_read_history, NULL)
- PHP_FE(readline_write_history, NULL)
- PHP_FE(readline_completion_function,NULL)
-#if HAVE_RL_CALLBACK_READ_CHAR
- PHP_FE(readline_callback_handler_install, NULL)
- PHP_FE(readline_callback_read_char, NULL)
- PHP_FE(readline_callback_handler_remove, NULL)
-#endif
- {NULL, NULL, NULL}
-};
-
-zend_module_entry readline_module_entry = {
- STANDARD_MODULE_HEADER,
- "readline",
- php_readline_functions,
- PHP_MINIT(readline),
- NULL,
- NULL,
- PHP_RSHUTDOWN(readline),
- NULL,
- NO_VERSION_YET,
- STANDARD_MODULE_PROPERTIES
-};
-
-#ifdef COMPILE_DL_READLINE
-ZEND_GET_MODULE(readline)
-#endif
-
-PHP_MINIT_FUNCTION(readline)
-{
- using_history();
- return SUCCESS;
-}
-
-PHP_RSHUTDOWN_FUNCTION(readline)
-{
- if (_readline_completion)
- efree(_readline_completion);
-#if HAVE_RL_CALLBACK_READ_CHAR
- if (_prepped_callback) {
- rl_callback_handler_remove();
- FREE_ZVAL(_prepped_callback);
- _prepped_callback = 0;
- }
-#endif
-
- return SUCCESS;
-}
-
-/* }}} */
-/* {{{ proto string readline([string prompt])
- Reads a line */
-PHP_FUNCTION(readline)
-{
- char *result;
- pval **arg;
- int ac = ZEND_NUM_ARGS();
-
- if (ac < 0 || ac > 1 || zend_get_parameters_ex(ac, &arg) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- if (ac == 1) {
- convert_to_string_ex(arg);
- }
-
- result = readline(ac?Z_STRVAL_PP(arg):NULL);
-
- if (! result) {
- RETURN_FALSE;
- } else {
- RETVAL_STRING(result,1);
- free(result);
- }
-}
-
-/* }}} */
-/* {{{ proto mixed readline_info([string varname] [, string newvalue])
- Gets/sets various internal readline variables. */
-
-#define SAFE_STRING(s) ((s)?(s):"")
-
-PHP_FUNCTION(readline_info)
-{
- zval **what;
- zval **value;
- int oldval;
- char *oldstr;
- int ac = ZEND_NUM_ARGS();
-
- if (ac < 0 || ac > 2 || zend_get_parameters_ex(ac, &what, &value) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- if (ac == 0) {
- array_init(return_value);
- add_assoc_string(return_value,"line_buffer",SAFE_STRING(rl_line_buffer),1);
- add_assoc_long(return_value,"point",rl_point);
- add_assoc_long(return_value,"end",rl_end);
-#ifdef HAVE_LIBREADLINE
- add_assoc_long(return_value,"mark",rl_mark);
- add_assoc_long(return_value,"done",rl_done);
- add_assoc_long(return_value,"pending_input",rl_pending_input);
- add_assoc_string(return_value,"prompt",SAFE_STRING(rl_prompt),1);
- add_assoc_string(return_value,"terminal_name",SAFE_STRING(rl_terminal_name),1);
-#endif
-#if HAVE_ERASE_EMPTY_LINE
- add_assoc_long(return_value,"erase_empty_line",rl_erase_empty_line);
-#endif
- add_assoc_string(return_value,"library_version",SAFE_STRING(rl_library_version),1);
- add_assoc_string(return_value,"readline_name",SAFE_STRING(rl_readline_name),1);
- } else {
- convert_to_string_ex(what);
-
- if (! strcasecmp(Z_STRVAL_PP(what),"line_buffer")) {
- oldstr = rl_line_buffer;
- if (ac == 2) {
- /* XXX if (rl_line_buffer) free(rl_line_buffer); */
- convert_to_string_ex(value);
- rl_line_buffer = strdup(Z_STRVAL_PP(value));
- }
- RETVAL_STRING(SAFE_STRING(oldstr),1);
- } else if (! strcasecmp(Z_STRVAL_PP(what),"point")) {
- RETVAL_LONG(rl_point);
- } else if (! strcasecmp(Z_STRVAL_PP(what),"end")) {
- RETVAL_LONG(rl_end);
-#ifdef HAVE_LIBREADLINE
- } else if (! strcasecmp(Z_STRVAL_PP(what),"mark")) {
- RETVAL_LONG(rl_mark);
- } else if (! strcasecmp(Z_STRVAL_PP(what),"done")) {
- oldval = rl_done;
- if (ac == 2) {
- convert_to_long_ex(value);
- rl_done = Z_LVAL_PP(value);
- }
- RETVAL_LONG(oldval);
- } else if (! strcasecmp(Z_STRVAL_PP(what),"pending_input")) {
- oldval = rl_pending_input;
- if (ac == 2) {
- convert_to_string_ex(value);
- rl_pending_input = Z_STRVAL_PP(value)[0];
- }
- RETVAL_LONG(oldval);
- } else if (! strcasecmp(Z_STRVAL_PP(what),"prompt")) {
- RETVAL_STRING(SAFE_STRING(rl_prompt),1);
- } else if (! strcasecmp(Z_STRVAL_PP(what),"terminal_name")) {
- RETVAL_STRING(SAFE_STRING(rl_terminal_name),1);
-#endif
-#if HAVE_ERASE_EMPTY_LINE
- } else if (! strcasecmp(Z_STRVAL_PP(what),"erase_empty_line")) {
- oldval = rl_erase_empty_line;
- if (ac == 2) {
- convert_to_long_ex(value);
- rl_erase_empty_line = Z_LVAL_PP(value);
- }
- RETVAL_LONG(oldval);
-#endif
- } else if (! strcasecmp(Z_STRVAL_PP(what),"library_version")) {
- RETVAL_STRING(SAFE_STRING(rl_library_version),1);
- } else if (! strcasecmp(Z_STRVAL_PP(what),"readline_name")) {
- oldstr = rl_readline_name;
- if (ac == 2) {
- /* XXX if (rl_readline_name) free(rl_readline_name); */
- convert_to_string_ex(value);
- rl_readline_name = strdup(Z_STRVAL_PP(value));;
- }
- RETVAL_STRING(SAFE_STRING(oldstr),1);
- }
- }
-}
-
-/* }}} */
-/* {{{ proto bool readline_add_history([string prompt])
- Adds a line to the history */
-PHP_FUNCTION(readline_add_history)
-{
- pval **arg;
- int ac = ZEND_NUM_ARGS();
-
- if (ac != 1 || zend_get_parameters_ex(ac, &arg) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex(arg);
-
- add_history(Z_STRVAL_PP(arg));
-
- RETURN_TRUE;
-}
-
-/* }}} */
-/* {{{ proto bool readline_clear_history(void)
- Clears the history */
-PHP_FUNCTION(readline_clear_history)
-{
- int ac = ZEND_NUM_ARGS();
-
- if (ac != 0) {
- WRONG_PARAM_COUNT;
- }
-
- clear_history();
-
- RETURN_TRUE;
-}
-
-/* }}} */
-/* {{{ proto array readline_list_history(void)
- Lists the history */
-#ifndef HAVE_LIBEDIT
-PHP_FUNCTION(readline_list_history)
-{
- HIST_ENTRY **history;
- int ac = ZEND_NUM_ARGS();
-
- if (ac) {
- WRONG_PARAM_COUNT;
- }
-
- history = history_list();
-
- array_init(return_value);
-
- if (history) {
- int i;
- for (i = 0; history[i]; i++) {
- add_next_index_string(return_value,history[i]->line,1);
- }
- }
-}
-#endif
-/* }}} */
-/* {{{ proto bool readline_read_history([string filename] [, int from] [,int to])
- Reads the history */
-PHP_FUNCTION(readline_read_history)
-{
- pval **arg;
- char *filename = NULL;
- int ac = ZEND_NUM_ARGS();
-
- if (ac < 0 || ac > 1 || zend_get_parameters_ex(ac, &arg) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- /* XXX from & to NYI */
-
- if (ac == 1) {
- convert_to_string_ex(arg);
- filename = Z_STRVAL_PP(arg);
- }
-
- if (read_history(filename)) {
- RETURN_FALSE;
- } else {
- RETURN_TRUE;
- }
-}
-
-/* }}} */
-/* {{{ proto bool readline_write_history([string filename])
- Writes the history */
-PHP_FUNCTION(readline_write_history)
-{
- pval **arg;
- char *filename = NULL;
- int ac = ZEND_NUM_ARGS();
-
- if (ac < 0 || ac > 1 || zend_get_parameters_ex(ac, &arg) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- if (ac == 1) {
- convert_to_string_ex(arg);
- filename = Z_STRVAL_PP(arg);
- }
-
- if (write_history(filename)) {
- RETURN_FALSE;
- } else {
- RETURN_TRUE;
- }
-}
-
-/* }}} */
-/* {{{ proto bool readline_completion_function(string funcname)
- Readline completion function? */
-
-static char *_readline_command_generator(char *text,int state)
-{
- HashTable *myht = Z_ARRVAL(_readline_array);
- zval **entry;
-
- if (! state) {
- zend_hash_internal_pointer_reset(myht);
- }
-
- while (zend_hash_get_current_data(myht, (void **)&entry) == SUCCESS) {
- zend_hash_move_forward(myht);
-
- convert_to_string_ex(entry);
- if (strncmp (Z_STRVAL_PP(entry), text, strlen(text)) == 0) {
- return (strdup(Z_STRVAL_PP(entry)));
- }
- }
-
- return NULL;
-}
-
-static zval *_readline_string_zval(const char *str)
-{
- zval *ret;
- int len = strlen(str);
- MAKE_STD_ZVAL(ret);
-
- Z_TYPE_P(ret) = IS_STRING;
- Z_STRLEN_P(ret) = len;
- Z_STRVAL_P(ret) = estrndup(str, len);
- return ret;
-}
-
-static zval *_readline_long_zval(long l)
-{
- zval *ret;
- MAKE_STD_ZVAL(ret);
-
- Z_TYPE_P(ret) = IS_LONG;
- Z_LVAL_P(ret) = l;
- return ret;
-}
-
-static char **_readline_completion_cb(char *text, int start, int end)
-{
- zval *params[4];
- int i;
- char **matches = NULL;
- TSRMLS_FETCH();
-
- params[0]=_readline_string_zval(_readline_completion);
- params[1]=_readline_string_zval(text);
- params[2]=_readline_long_zval(start);
- params[3]=_readline_long_zval(end);
-
- if (call_user_function(CG(function_table), NULL, params[0], &_readline_array, 3, params+1 TSRMLS_CC) == SUCCESS) {
- if (Z_TYPE(_readline_array) == IS_ARRAY) {
- matches = completion_matches(text,_readline_command_generator);
- }
- }
-
- for (i = 0; i < 4; i++) {
- zval_ptr_dtor(&params[i]);
- }
- zval_dtor(&_readline_array);
-
- return matches;
-}
-
-PHP_FUNCTION(readline_completion_function)
-{
- pval **arg;
- int ac = ZEND_NUM_ARGS();
-
- if (ac < 0 || ac > 1 || zend_get_parameters_ex(ac, &arg) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- if (ac == 1) {
- convert_to_string_ex(arg);
-
- if (_readline_completion)
- efree(_readline_completion);
-
- _readline_completion = estrdup(Z_STRVAL_PP(arg));
- rl_attempted_completion_function = _readline_completion_cb;
- }
-
- RETURN_TRUE;
-}
-
-/* }}} */
-
-#if HAVE_RL_CALLBACK_READ_CHAR
-
-static void php_rl_callback_handler(char *the_line)
-{
- zval *params[1];
- zval dummy;
- TSRMLS_FETCH();
-
- ZVAL_NULL(&dummy);
-
- params[0] = _readline_string_zval(the_line);
-
- call_user_function(CG(function_table), NULL, _prepped_callback, &dummy, 1, params TSRMLS_CC);
-
- zval_ptr_dtor(&params[0]);
- zval_dtor(&dummy);
-}
-
-/* {{{ proto void readline_callback_handler_install(string prompt, mixed callback)
- Initializes the readline callback interface and terminal, prints the prompt and returns immediately */
-PHP_FUNCTION(readline_callback_handler_install)
-{
- zval *callback;
- char *name = NULL;
- char *prompt;
- int prompt_len;
-
- if (FAILURE == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "sz", &prompt, &prompt_len, &callback)) {
- return;
- }
-
- if (!zend_is_callable(callback, 0, &name)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s is not callable", name);
- RETURN_FALSE;
- }
-
- if (_prepped_callback) {
- rl_callback_handler_remove();
- FREE_ZVAL(_prepped_callback);
- }
-
- MAKE_STD_ZVAL(_prepped_callback);
- *_prepped_callback = *callback;
- zval_copy_ctor(_prepped_callback);
-
- rl_callback_handler_install(prompt, php_rl_callback_handler);
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto void readline_callback_read_char()
- Informs the readline callback interface that a character is ready for input */
-PHP_FUNCTION(readline_callback_read_char)
-{
- if (_prepped_callback) {
- rl_callback_read_char();
- }
-}
-/* }}} */
-
-/* {{{ proto bool readline_callback_handler_remove()
- Removes a previously installed callback handler and restores terminal settings */
-PHP_FUNCTION(readline_callback_handler_remove)
-{
- if (_prepped_callback) {
- rl_callback_handler_remove();
- FREE_ZVAL(_prepped_callback);
- _prepped_callback = 0;
- RETURN_TRUE;
- }
- RETURN_FALSE;
-}
-/* }}} */
-#endif
-
-
-#endif /* HAVE_LIBREADLINE */
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- */
diff --git a/ext/recode/CREDITS b/ext/recode/CREDITS
deleted file mode 100644
index 2b07813086..0000000000
--- a/ext/recode/CREDITS
+++ /dev/null
@@ -1,2 +0,0 @@
-Recode
-Kristian Köhntopp
diff --git a/ext/recode/config.m4 b/ext/recode/config.m4
deleted file mode 100644
index aa94914df8..0000000000
--- a/ext/recode/config.m4
+++ /dev/null
@@ -1,64 +0,0 @@
-dnl
-dnl $Id$
-dnl
-
-PHP_ARG_WITH(recode,for recode support,
-[ --with-recode[=DIR] Include recode support.])
-
-if test "$PHP_RECODE" != "no"; then
- RECODE_LIST="$PHP_RECODE /usr/local /usr /opt"
-
- for i in $RECODE_LIST; do
- if test -f $i/include/recode.h; then
- RECODE_DIR=$i
- RECODE_INC=include
- RECODE_LIB=lib
- fi
- if test -f $i/include/recode/recode.h; then
- RECODE_DIR=$i
- RECODE_INC=include/recode
- RECODE_LIB=lib/recode
- fi
- if test -f $i/recode/include/recode.h; then
- RECODE_DIR=$i/recode
- RECODE_INC=include
- RECODE_LIB=lib
- fi
- test -n "$RECODE_DIR" && break
- done
-
- if test -z "$RECODE_DIR"; then
- AC_MSG_ERROR([Can not find recode.h anywhere under $RECODE_LIST.])
- fi
-
- PHP_CHECK_LIBRARY(recode, recode_format_table,
- [
- PHP_ADD_LIBRARY_WITH_PATH(recode, $RECODE_DIR/$RECODE_LIB, RECODE_SHARED_LIBADD)
- ], [
- old_LDFLAGS=$LDFLAGS
- old_LIBS=$LIBS
- LDFLAGS="$LDFLAGS -L$RECODE_DIR/$RECODE_LIB"
- LIBS="$LIBS -lrecode"
- AC_TRY_LINK(
- [
-char *program_name;
- ],[
-recode_format_table();
- ],[
- PHP_ADD_LIBRARY_DEFER_WITH_PATH(recode, $RECODE_DIR/$RECODE_LIB, RECODE_SHARED_LIBADD)
- AC_DEFINE(HAVE_BROKEN_RECODE, 1, [Whether we have librecode 3.5])
- ],[
- AC_MSG_ERROR(I cannot link librecode (-L$RECODE_DIR/$RECODE_LIB -lrecode). Is it installed?)
- ])
- LIBS=$old_LIBS
- LDFLAGS=$old_LDFLAGS
- ], [
- -L$RECODE_DIR/$RECODE_LIB
- ])
-
- AC_DEFINE(HAVE_LIBRECODE, 1, [Whether we have librecode 3.5 or higher])
- PHP_ADD_INCLUDE($RECODE_DIR/$RECODE_INC)
- PHP_SUBST(RECODE_SHARED_LIBADD)
- AC_CHECK_HEADERS(stdbool.h)
- PHP_NEW_EXTENSION(recode, recode.c, $ext_shared)
-fi
diff --git a/ext/recode/config9.m4 b/ext/recode/config9.m4
deleted file mode 100644
index 1ee6a6d3f0..0000000000
--- a/ext/recode/config9.m4
+++ /dev/null
@@ -1,14 +0,0 @@
-dnl
-dnl $Id$
-dnl
-
-dnl Check for extensions with which Recode can not work
-if test "$PHP_RECODE" != "no"; then
- test "$PHP_IMAP" != "no" && recode_conflict="$recode_conflict imap"
- test "$PHP_MYSQL" != "no" && recode_conflict="$recode_conflict mysql"
- test "$PHP_YAZ" != "no" && recode_conflict="$recode_conflict yaz"
-
- if test -n "$recode_conflict"; then
- AC_MSG_ERROR([recode extension can not be configured together with:$recode_conflict])
- fi
-fi
diff --git a/ext/recode/php_recode.h b/ext/recode/php_recode.h
deleted file mode 100644
index 4f96e50c2e..0000000000
--- a/ext/recode/php_recode.h
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Kristian Koehntopp <kris@koehntopp.de> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifndef PHP_RECODE_H
-#define PHP_RECODE_H
-
-#if HAVE_LIBRECODE
-
-extern zend_module_entry recode_module_entry;
-#define phpext_recode_ptr &recode_module_entry
-
-PHP_MINIT_FUNCTION(recode);
-PHP_MSHUTDOWN_FUNCTION(recode);
-PHP_MINFO_FUNCTION(recode);
-PHP_FUNCTION(recode_string);
-PHP_FUNCTION(recode_file);
-
-#else
-#define phpext_recode_ptr NULL
-#endif
-
-#endif /* PHP_RECODE_H */
diff --git a/ext/recode/recode.c b/ext/recode/recode.c
deleted file mode 100644
index b852e30b52..0000000000
--- a/ext/recode/recode.c
+++ /dev/null
@@ -1,240 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Kristian Koehntopp <kris@koehntopp.de> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-/* {{{ includes & prototypes */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "php.h"
-#include "php_streams.h"
-
-#if HAVE_LIBRECODE
-
-/* For recode 3.5 */
-#if HAVE_BROKEN_RECODE
-extern char *program_name;
-char *program_name = "php";
-#endif
-
-#ifdef HAVE_STDBOOL_H
-# include <stdbool.h>
-#else
- typedef enum {false = 0, true = 1} bool;
-#endif
-
-#include <stdio.h>
-#include <sys/types.h>
-#include <unistd.h>
-#include <recode.h>
-
-#include "php_recode.h"
-#include "ext/standard/info.h"
-#include "ext/standard/file.h"
-#include "ext/standard/php_string.h"
-
-/* }}} */
-
-ZEND_BEGIN_MODULE_GLOBALS(recode)
- RECODE_OUTER outer;
-ZEND_END_MODULE_GLOBALS(recode)
-
-#ifdef ZTS
-# define ReSG(v) TSRMG(recode_globals_id, zend_recode_globals *, v)
-#else
-# define ReSG(v) (recode_globals.v)
-#endif
-
-ZEND_DECLARE_MODULE_GLOBALS(recode);
-
-/* {{{ module stuff */
-static zend_function_entry php_recode_functions[] = {
- PHP_FE(recode_string, NULL)
- PHP_FE(recode_file, NULL)
- PHP_FALIAS(recode, recode_string, NULL)
- {NULL, NULL, NULL}
-};
-
-zend_module_entry recode_module_entry = {
- STANDARD_MODULE_HEADER,
- "recode",
- php_recode_functions,
- PHP_MINIT(recode),
- PHP_MSHUTDOWN(recode),
- NULL,
- NULL,
- PHP_MINFO(recode),
- NO_VERSION_YET,
- STANDARD_MODULE_PROPERTIES
-};
-
-#ifdef COMPILE_DL_RECODE
-ZEND_GET_MODULE(recode)
-#endif
-
-static void php_recode_init_globals (zend_recode_globals *rg)
-{
- rg->outer = NULL;
-}
-
-PHP_MINIT_FUNCTION(recode)
-{
- ZEND_INIT_MODULE_GLOBALS(recode, php_recode_init_globals, NULL);
-
- ReSG(outer) = recode_new_outer(false);
- if (ReSG(outer) == NULL) {
- return FAILURE;
- }
-
- return SUCCESS;
-}
-
-PHP_MSHUTDOWN_FUNCTION(recode)
-{
- if (ReSG(outer)) {
- recode_delete_outer(ReSG(outer));
- }
- return SUCCESS;
-}
-
-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$");
- php_info_print_table_end();
-}
-
-/* {{{ proto string recode_string(string request, string str)
- Recode string str according to request string */
-PHP_FUNCTION(recode_string)
-{
- RECODE_REQUEST request = NULL;
- char *r = NULL;
- bool success;
- int r_len = 0, r_alen = 0;
- int req_len, str_len;
- char *req, *str;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ss", &req, &req_len, &str, &str_len) == FAILURE) {
- return;
- }
-
- request = recode_new_request(ReSG(outer));
-
- if (request == NULL) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Cannot allocate request structure");
- RETURN_FALSE;
- }
-
- success = recode_scan_request(request, req);
- if (!success) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Illegal recode request '%s'", req);
- goto error_exit;
- }
-
- recode_buffer_to_buffer(request, str, str_len, &r, &r_len, &r_alen);
- if (!r) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Recoding failed.");
- goto error_exit;
- }
-
- RETVAL_STRINGL(r, r_len, 1);
- free(r);
- /* FALLTHROUGH */
-
-error_exit:
- if (request)
- recode_delete_request(request);
-
- if (!r)
- RETURN_FALSE;
-
- return;
-}
-/* }}} */
-
-/* {{{ proto bool recode_file(string request, resource input, resource output)
- Recode file input into file output according to request */
-PHP_FUNCTION(recode_file)
-{
- RECODE_REQUEST request = NULL;
- int success;
- zval **req;
- zval **input, **output;
- php_stream *instream, *outstream;
- FILE *in_fp, *out_fp;
-
- if (ZEND_NUM_ARGS() != 3 || zend_get_parameters_ex(3, &req, &input, &output) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- php_stream_from_zval(instream, input);
- php_stream_from_zval(outstream, output);
-
- if (FAILURE == php_stream_cast(instream, PHP_STREAM_AS_STDIO, (void**)&in_fp, REPORT_ERRORS)) {
- RETURN_FALSE;
- }
-
- if (FAILURE == php_stream_cast(outstream, PHP_STREAM_AS_STDIO, (void**)&out_fp, REPORT_ERRORS)) {
- RETURN_FALSE;
- }
-
- convert_to_string_ex(req);
-
- request = recode_new_request(ReSG(outer));
- if (request == NULL) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Cannot allocate request structure");
- RETURN_FALSE;
- }
-
- success = recode_scan_request(request, Z_STRVAL_PP(req));
- if (!success) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Illegal recode request '%s'", Z_STRVAL_PP(req));
- goto error_exit;
- }
-
- success = recode_file_to_file(request, in_fp, out_fp);
- if (!success) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Recoding failed.");
- goto error_exit;
- }
-
- if (request)
- recode_delete_request(request);
- RETURN_TRUE;
-
-error_exit:
- if (request)
- recode_delete_request(request);
-
- RETURN_FALSE;
-}
-/* }}} */
-
-#endif
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- */
diff --git a/ext/reflection/tests/bug26640.phpt b/ext/reflection/tests/bug26640.phpt
deleted file mode 100755
index 2cbd0d23d4..0000000000
--- a/ext/reflection/tests/bug26640.phpt
+++ /dev/null
@@ -1,25 +0,0 @@
---TEST--
-Bug #26640 (__autoload() not invoked by Reflection classes)
---FILE--
-<?php
-
-function __autoload($c)
-{
- class autoload_class
- {
- public function __construct()
- {
- print "autoload success\n";
- }
- }
-}
-
-$a = new ReflectionClass('autoload_class');
-
-if (is_object($a)) {
- echo "OK\n";
-}
-
-?>
---EXPECT--
-OK
diff --git a/ext/reflection/tests/exception.inc b/ext/reflection/tests/exception.inc
deleted file mode 100644
index 8570b6b360..0000000000
--- a/ext/reflection/tests/exception.inc
+++ /dev/null
@@ -1,16 +0,0 @@
-<?php
-class reflectionException extends reflection_exception {
- function MyException($_errno, $_errmsg) {
- $this->errno = $_errno;
- $this->errmsg = $_errmsg;
- }
-
- function getErrno() {
- return $this->errno;
- }
-
- function getErrmsg() {
- return $this->errmsg;
- }
-}
-?>
diff --git a/ext/reflection/tests/invoke.phpt b/ext/reflection/tests/invoke.phpt
deleted file mode 100755
index a79b0e0b06..0000000000
--- a/ext/reflection/tests/invoke.phpt
+++ /dev/null
@@ -1,42 +0,0 @@
---TEST--
-invoke with non object or null value
---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/parameters_001.phpt b/ext/reflection/tests/parameters_001.phpt
deleted file mode 100755
index 709944677f..0000000000
--- a/ext/reflection/tests/parameters_001.phpt
+++ /dev/null
@@ -1,38 +0,0 @@
---TEST--
-Check for parameter being optional
---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/static_properties_002.phpt b/ext/reflection/tests/static_properties_002.phpt
deleted file mode 100755
index 29b84a8e65..0000000000
--- a/ext/reflection/tests/static_properties_002.phpt
+++ /dev/null
@@ -1,62 +0,0 @@
---TEST--
-ZE2 Inheriting static properties
---SKIPIF--
-<?php if (version_compare(zend_version(), '2.0.0-dev', '<')) die('skip ZendEngine 2 needed'); ?>
---FILE--
-<?php
-
-class base {
- static protected $prop = 2;
-
- static function show() {
- echo __METHOD__ . '(' . self::$prop . ")\n";
- }
-
- static function inc() {
- base::$prop++;
- echo __METHOD__ . "()\n";
- }
-}
-
-class derived extends base {
- static public $prop;
-
- static function show() {
- echo __METHOD__ . '(' . self::$prop . ")\n";
- }
-
- static function inc() {
- derived::$prop++;
- echo __METHOD__ . "()\n";
- }
-}
-
-base::show();
-derived::show();
-
-base::inc();
-
-base::show();
-derived::show();
-
-derived::inc();
-
-base::show();
-derived::show();
-
-$r = new ReflectionClass('derived');
-echo 'Number of properties: '. count($r->getStaticProperties()) . "\n";
-
-echo "Done\n";
-?>
---EXPECTF--
-base::show(2)
-derived::show(2)
-base::inc()
-base::show(3)
-derived::show(3)
-derived::inc()
-base::show(4)
-derived::show(4)
-Number of properties: 1
-Done
diff --git a/ext/session/CREDITS b/ext/session/CREDITS
deleted file mode 100644
index 79659c7035..0000000000
--- a/ext/session/CREDITS
+++ /dev/null
@@ -1,2 +0,0 @@
-Sessions
-Sascha Schumann, Andrei Zmievski
diff --git a/ext/session/config.m4 b/ext/session/config.m4
deleted file mode 100644
index 3f74899676..0000000000
--- a/ext/session/config.m4
+++ /dev/null
@@ -1,31 +0,0 @@
-dnl
-dnl $Id$
-dnl
-
-PHP_ARG_ENABLE(session, whether to enable PHP sessions,
-[ --disable-session Disable session support], yes)
-
-PHP_ARG_WITH(mm,for mm support,
-[ --with-mm[=DIR] Include mm support for session storage], no, no)
-
-if test "$PHP_SESSION" != "no"; then
- PHP_PWRITE_TEST
- PHP_PREAD_TEST
- PHP_NEW_EXTENSION(session, session.c mod_files.c mod_mm.c mod_user.c, $ext_shared)
- PHP_SUBST(SESSION_SHARED_LIBADD)
- AC_DEFINE(HAVE_PHP_SESSION,1,[ ])
-fi
-
-if test "$PHP_MM" != "no"; then
- for i in $PHP_MM /usr/local /usr; do
- test -f "$i/include/mm.h" && MM_DIR=$i && break
- done
-
- if test -z "$MM_DIR" ; then
- AC_MSG_ERROR(cannot find mm library)
- fi
-
- PHP_ADD_LIBRARY_WITH_PATH(mm, $MM_DIR/lib, SESSION_SHARED_LIBADD)
- PHP_ADD_INCLUDE($MM_DIR/include)
- AC_DEFINE(HAVE_LIBMM, 1, [Whether you have libmm])
-fi
diff --git a/ext/session/config.w32 b/ext/session/config.w32
deleted file mode 100644
index fd568f3c3e..0000000000
--- a/ext/session/config.w32
+++ /dev/null
@@ -1,11 +0,0 @@
-// $Id$
-// vim:ft=javascript
-
-ARG_ENABLE("session", "session support", "yes");
-
-if (PHP_SESSION == "yes") {
- EXTENSION("session", "session.c mod_files.c mod_mm.c mod_user.c", false /* never shared */);
- AC_DEFINE("HAVE_PHP_SESSION", 1, "Session support");
-}
-
-
diff --git a/ext/session/mod_files.c b/ext/session/mod_files.c
deleted file mode 100644
index adcb476f6e..0000000000
--- a/ext/session/mod_files.c
+++ /dev/null
@@ -1,423 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Sascha Schumann <sascha@schumann.cx> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-#include "php.h"
-
-#include <sys/stat.h>
-#include <sys/types.h>
-
-#if HAVE_SYS_FILE_H
-#include <sys/file.h>
-#endif
-
-#if HAVE_DIRENT_H
-#include <dirent.h>
-#endif
-
-#ifdef PHP_WIN32
-#include "win32/readdir.h"
-#endif
-#include <time.h>
-
-#include <fcntl.h>
-#include <errno.h>
-
-#if HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-
-#include "php_session.h"
-#include "mod_files.h"
-#include "ext/standard/flock_compat.h"
-#include "php_open_temporary_file.h"
-
-#define FILE_PREFIX "sess_"
-
-typedef struct {
- int fd;
- char *lastkey;
- char *basedir;
- size_t basedir_len;
- size_t dirdepth;
- size_t st_size;
- int filemode;
-} ps_files;
-
-ps_module ps_mod_files = {
- PS_MOD(files)
-};
-
-/* If you change the logic here, please also update the error message in
- * ps_files_open() appropriately */
-static int ps_files_valid_key(const char *key)
-{
- size_t len;
- const char *p;
- char c;
- int ret = 1;
-
- for (p = key; (c = *p); p++) {
- /* valid characters are a..z,A..Z,0..9 */
- if (!((c >= 'a' && c <= 'z')
- || (c >= 'A' && c <= 'Z')
- || (c >= '0' && c <= '9')
- || c == ','
- || c == '-')) {
- ret = 0;
- break;
- }
- }
-
- len = p - key;
-
- if (len == 0)
- ret = 0;
-
- return ret;
-}
-
-static char *ps_files_path_create(char *buf, size_t buflen, ps_files *data, const char *key)
-{
- size_t key_len;
- const char *p;
- int i;
- int n;
-
- key_len = strlen(key);
- if (key_len <= data->dirdepth || buflen <
- (strlen(data->basedir) + 2 * data->dirdepth + key_len + 5 + sizeof(FILE_PREFIX)))
- return NULL;
- p = key;
- memcpy(buf, data->basedir, data->basedir_len);
- n = data->basedir_len;
- buf[n++] = PHP_DIR_SEPARATOR;
- for (i = 0; i < (int)data->dirdepth; i++) {
- buf[n++] = *p++;
- buf[n++] = PHP_DIR_SEPARATOR;
- }
- memcpy(buf + n, FILE_PREFIX, sizeof(FILE_PREFIX) - 1);
- n += sizeof(FILE_PREFIX) - 1;
- memcpy(buf + n, key, key_len);
- n += key_len;
- buf[n] = '\0';
-
- return buf;
-}
-
-#ifndef O_BINARY
-#define O_BINARY 0
-#endif
-
-static void ps_files_close(ps_files *data)
-{
- if (data->fd != -1) {
-#ifdef PHP_WIN32
- /* On Win32 locked files that are closed without being explicitly unlocked
- will be unlocked only when "system resources become available". */
- flock(data->fd, LOCK_UN);
-#endif
- close(data->fd);
- data->fd = -1;
- }
-}
-
-static void ps_files_open(ps_files *data, const char *key TSRMLS_DC)
-{
- char buf[MAXPATHLEN];
-
- if (data->fd < 0 || !data->lastkey || strcmp(key, data->lastkey)) {
- if (data->lastkey) {
- efree(data->lastkey);
- data->lastkey = NULL;
- }
-
- ps_files_close(data);
-
- if (!ps_files_valid_key(key)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "The session id contains illegal characters, valid characters are a-z, A-Z, 0-9 and '-,'");
- return;
- }
- if (!ps_files_path_create(buf, sizeof(buf), data, key))
- return;
-
- data->lastkey = estrdup(key);
-
- data->fd = VCWD_OPEN_MODE(buf, O_CREAT | O_RDWR | O_BINARY,
- data->filemode);
-
- if (data->fd != -1) {
- flock(data->fd, LOCK_EX);
-
-#ifdef F_SETFD
- if (fcntl(data->fd, F_SETFD, 1)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "fcntl(%d, F_SETFD, 1) failed: %s (%d)", data->fd, strerror(errno), errno);
- }
-#endif
- } else {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "open(%s, O_RDWR) failed: %s (%d)", buf,
- strerror(errno), errno);
- }
- }
-}
-
-static int ps_files_cleanup_dir(const char *dirname, int maxlifetime TSRMLS_DC)
-{
- DIR *dir;
- char dentry[sizeof(struct dirent) + MAXPATHLEN];
- struct dirent *entry = (struct dirent *) &dentry;
- struct stat sbuf;
- char buf[MAXPATHLEN];
- time_t now;
- int nrdels = 0;
- size_t dirname_len;
-
- dir = opendir(dirname);
- if (!dir) {
- php_error_docref(NULL TSRMLS_CC, E_NOTICE, "ps_files_cleanup_dir: opendir(%s) failed: %s (%d)\n", dirname, strerror(errno), errno);
- return (0);
- }
-
- time(&now);
-
- dirname_len = strlen(dirname);
-
- /* Prepare buffer (dirname never changes) */
- memcpy(buf, dirname, dirname_len);
- buf[dirname_len] = PHP_DIR_SEPARATOR;
-
- while (php_readdir_r(dir, (struct dirent *) dentry, &entry) == 0 && entry) {
- /* does the file start with our prefix? */
- if (!strncmp(entry->d_name, FILE_PREFIX, sizeof(FILE_PREFIX) - 1)) {
- size_t entry_len;
-
- entry_len = strlen(entry->d_name);
- /* does it fit into our buffer? */
- if (entry_len + dirname_len + 2 < MAXPATHLEN) {
- /* create the full path.. */
- memcpy(buf + dirname_len + 1, entry->d_name, entry_len);
- /* NUL terminate it and */
- buf[dirname_len + entry_len + 1] = '\0';
- /* check whether its last access was more than maxlifet ago */
- if (VCWD_STAT(buf, &sbuf) == 0 &&
- (now - sbuf.st_mtime) > maxlifetime) {
- VCWD_UNLINK(buf);
- nrdels++;
- }
- }
- }
- }
-
- closedir(dir);
-
- return (nrdels);
-}
-
-#define PS_FILES_DATA ps_files *data = PS_GET_MOD_DATA()
-
-PS_OPEN_FUNC(files)
-{
- ps_files *data;
- const char *p, *last;
- const char *argv[3];
- int argc = 0;
- size_t dirdepth = 0;
- int filemode = 0600;
-
- if (*save_path == '\0') {
- /* if save path is an empty string, determine the temporary dir */
- save_path = php_get_temporary_directory();
- }
-
- /* split up input parameter */
- last = save_path;
- p = strchr(save_path, ';');
- while (p) {
- argv[argc++] = last;
- last = ++p;
- p = strchr(p, ';');
- if (argc > 1) break;
- }
- argv[argc++] = last;
-
- if (argc > 1) {
- errno = 0;
- dirdepth = (size_t) strtol(argv[0], NULL, 10);
- if (errno == ERANGE) {
- php_error(E_WARNING,
- "The first parameter in session.save_path is invalid");
- return FAILURE;
- }
- }
-
- if (argc > 2) {
- errno = 0;
- filemode = strtol(argv[1], NULL, 8);
- if (errno == ERANGE || filemode < 0 || filemode > 07777) {
- php_error(E_WARNING,
- "The second parameter in session.save_path is invalid");
- return FAILURE;
- }
- }
- save_path = argv[argc - 1];
-
- data = emalloc(sizeof(*data));
- memset(data, 0, sizeof(*data));
-
- data->fd = -1;
- data->dirdepth = dirdepth;
- data->filemode = filemode;
- data->basedir_len = strlen(save_path);
- data->basedir = estrndup(save_path, data->basedir_len);
-
- PS_SET_MOD_DATA(data);
-
- return SUCCESS;
-}
-
-PS_CLOSE_FUNC(files)
-{
- PS_FILES_DATA;
-
- ps_files_close(data);
-
- if (data->lastkey)
- efree(data->lastkey);
- efree(data->basedir);
- efree(data);
- *mod_data = NULL;
-
- return SUCCESS;
-}
-
-PS_READ_FUNC(files)
-{
- long n;
- struct stat sbuf;
- PS_FILES_DATA;
-
- ps_files_open(data, key TSRMLS_CC);
- if (data->fd < 0)
- return FAILURE;
-
- if (fstat(data->fd, &sbuf))
- return FAILURE;
-
- data->st_size = *vallen = sbuf.st_size;
-
- if (sbuf.st_size == 0) {
- *val = STR_EMPTY_ALLOC();
- return SUCCESS;
- }
-
- *val = emalloc(sbuf.st_size);
-
-#if defined(HAVE_PREAD)
- n = pread(data->fd, *val, sbuf.st_size, 0);
-#else
- lseek(data->fd, 0, SEEK_SET);
- n = read(data->fd, *val, sbuf.st_size);
-#endif
-
- if (n != sbuf.st_size) {
- if (n == -1)
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "read failed: %s (%d)", strerror(errno), errno);
- else
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "read returned less bytes than requested");
- efree(*val);
- return FAILURE;
- }
-
- return SUCCESS;
-}
-
-PS_WRITE_FUNC(files)
-{
- long n;
- PS_FILES_DATA;
-
- ps_files_open(data, key TSRMLS_CC);
- if (data->fd < 0)
- return FAILURE;
-
- /*
- * truncate file, if the amount of new data is smaller than
- * the existing data set.
- */
-
- if (vallen < (int)data->st_size)
- ftruncate(data->fd, 0);
-
-#if defined(HAVE_PWRITE)
- n = pwrite(data->fd, val, vallen, 0);
-#else
- lseek(data->fd, 0, SEEK_SET);
- n = write(data->fd, val, vallen);
-#endif
-
- if (n != vallen) {
- if (n == -1)
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "write failed: %s (%d)", strerror(errno), errno);
- else
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "write wrote less bytes than requested");
- return FAILURE;
- }
-
- return SUCCESS;
-}
-
-PS_DESTROY_FUNC(files)
-{
- char buf[MAXPATHLEN];
- PS_FILES_DATA;
-
- if (!ps_files_path_create(buf, sizeof(buf), data, key))
- return FAILURE;
-
- ps_files_close(data);
-
- if (VCWD_UNLINK(buf) == -1) {
- return FAILURE;
- }
-
- return SUCCESS;
-}
-
-PS_GC_FUNC(files)
-{
- PS_FILES_DATA;
-
- /* we don't perform any cleanup, if dirdepth is larger than 0.
- we return SUCCESS, since all cleanup should be handled by
- an external entity (i.e. find -ctime x | xargs rm) */
-
- if (data->dirdepth == 0)
- *nrdels = ps_files_cleanup_dir(data->basedir, maxlifetime TSRMLS_CC);
-
- return SUCCESS;
-}
-
-/*
- * 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/session/mod_files.h b/ext/session/mod_files.h
deleted file mode 100644
index c185a03b03..0000000000
--- a/ext/session/mod_files.h
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Sascha Schumann <sascha@schumann.cx> |
- +----------------------------------------------------------------------+
- */
-
-#ifndef MOD_FILES_H
-#define MOD_FILES_H
-
-extern ps_module ps_mod_files;
-#define ps_files_ptr &ps_mod_files
-
-PS_FUNCS(files);
-
-#endif
diff --git a/ext/session/mod_files.sh b/ext/session/mod_files.sh
deleted file mode 100644
index 4d6a681d9c..0000000000
--- a/ext/session/mod_files.sh
+++ /dev/null
@@ -1,16 +0,0 @@
-#! /bin/sh
-
-if test "$2" = ""; then
- echo "usage: $0 basedir depth"
- exit 1
-fi
-
-if test "$2" = "0"; then
- exit 0
-fi
-
-for i in a b c d e f 0 1 2 3 4 5 6 7 8 9; do
- newpath="$1/$i"
- mkdir $newpath || exit 1
- sh $0 $newpath `expr $2 - 1`
-done
diff --git a/ext/session/mod_mm.c b/ext/session/mod_mm.c
deleted file mode 100644
index f5bdbb57ae..0000000000
--- a/ext/session/mod_mm.c
+++ /dev/null
@@ -1,437 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Sascha Schumann <sascha@schumann.cx> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-#include "php.h"
-
-#ifdef HAVE_LIBMM
-
-#include <unistd.h>
-#include <mm.h>
-#include <time.h>
-#include <sys/stat.h>
-#include <sys/types.h>
-#include <fcntl.h>
-
-#include "php_session.h"
-#include "mod_mm.h"
-#include "SAPI.h"
-
-#ifdef ZTS
-# error mm is not thread-safe
-#endif
-
-#define PS_MM_FILE "session_mm_"
-
-/* For php_uint32 */
-#include "ext/standard/basic_functions.h"
-
-/*
- * this list holds all data associated with one session
- */
-
-typedef struct ps_sd {
- struct ps_sd *next;
- php_uint32 hv; /* hash value of key */
- time_t ctime; /* time of last change */
- void *data;
- size_t datalen; /* amount of valid data */
- size_t alloclen; /* amount of allocated memory for data */
- char key[1]; /* inline key */
-} ps_sd;
-
-typedef struct {
- MM *mm;
- ps_sd **hash;
- php_uint32 hash_max;
- php_uint32 hash_cnt;
- pid_t owner;
-} ps_mm;
-
-static ps_mm *ps_mm_instance = NULL;
-
-#if 0
-#define ps_mm_debug(a) printf a
-#else
-#define ps_mm_debug(a)
-#endif
-
-static inline php_uint32 ps_sd_hash(const char *data, int len)
-{
- php_uint32 h;
- const char *e = data + len;
-
- for (h = 2166136261U; data < e; ) {
- h *= 16777619;
- h ^= *data++;
- }
-
- return h;
-}
-
-static void hash_split(ps_mm *data)
-{
- php_uint32 nmax;
- ps_sd **nhash;
- ps_sd **ohash, **ehash;
- ps_sd *ps, *next;
-
- nmax = ((data->hash_max + 1) << 1) - 1;
- nhash = mm_calloc(data->mm, nmax + 1, sizeof(*data->hash));
-
- if (!nhash) {
- /* no further memory to expand hash table */
- return;
- }
-
- ehash = data->hash + data->hash_max + 1;
- for (ohash = data->hash; ohash < ehash; ohash++) {
- for (ps = *ohash; ps; ps = next) {
- next = ps->next;
- ps->next = nhash[ps->hv & nmax];
- nhash[ps->hv & nmax] = ps;
- }
- }
- mm_free(data->mm, data->hash);
-
- data->hash = nhash;
- data->hash_max = nmax;
-}
-
-static ps_sd *ps_sd_new(ps_mm *data, const char *key)
-{
- php_uint32 hv, slot;
- ps_sd *sd;
- int keylen;
-
- keylen = strlen(key);
-
- sd = mm_malloc(data->mm, sizeof(ps_sd) + keylen);
- if (!sd) {
- TSRMLS_FETCH();
-
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "mm_malloc failed, avail %d, err %s", mm_available(data->mm), mm_error());
- return NULL;
- }
-
- hv = ps_sd_hash(key, keylen);
- slot = hv & data->hash_max;
-
- sd->ctime = 0;
- sd->hv = hv;
- sd->data = NULL;
- sd->alloclen = sd->datalen = 0;
-
- memcpy(sd->key, key, keylen + 1);
-
- sd->next = data->hash[slot];
- data->hash[slot] = sd;
-
- data->hash_cnt++;
-
- if (!sd->next) {
- if (data->hash_cnt >= data->hash_max)
- hash_split(data);
- }
-
- ps_mm_debug(("inserting %s(%p) into slot %d\n", key, sd, slot));
-
- return sd;
-}
-
-static void ps_sd_destroy(ps_mm *data, ps_sd *sd)
-{
- php_uint32 slot;
-
- slot = ps_sd_hash(sd->key, strlen(sd->key)) & data->hash_max;
-
- if (data->hash[slot] == sd)
- data->hash[slot] = sd->next;
- else {
- ps_sd *prev;
-
- /* There must be some entry before the one we want to delete */
- for (prev = data->hash[slot]; prev->next != sd; prev = prev->next);
- prev->next = sd->next;
- }
-
- data->hash_cnt--;
- if (sd->data)
- mm_free(data->mm, sd->data);
- mm_free(data->mm, sd);
-}
-
-static ps_sd *ps_sd_lookup(ps_mm *data, const char *key, int rw)
-{
- php_uint32 hv, slot;
- ps_sd *ret, *prev;
-
- hv = ps_sd_hash(key, strlen(key));
- slot = hv & data->hash_max;
-
- for (prev = NULL, ret = data->hash[slot]; ret; prev = ret, ret = ret->next)
- if (ret->hv == hv && !strcmp(ret->key, key))
- break;
-
- if (ret && rw && ret != data->hash[slot]) {
- /* Move the entry to the top of the linked list */
-
- if (prev)
- prev->next = ret->next;
- ret->next = data->hash[slot];
- data->hash[slot] = ret;
- }
-
- ps_mm_debug(("lookup(%s): ret=%p,hv=%u,slot=%d\n", key, ret, hv, slot));
-
- return ret;
-}
-
-ps_module ps_mod_mm = {
- PS_MOD(mm)
-};
-
-#define PS_MM_DATA ps_mm *data = PS_GET_MOD_DATA()
-
-static int ps_mm_initialize(ps_mm *data, const char *path)
-{
- data->owner = getpid();
- data->mm = mm_create(0, path);
- if (!data->mm) {
- return FAILURE;
- }
-
- data->hash_cnt = 0;
- data->hash_max = 511;
- data->hash = mm_calloc(data->mm, data->hash_max + 1, sizeof(ps_sd *));
- if (!data->hash) {
- mm_destroy(data->mm);
- return FAILURE;
- }
-
- return SUCCESS;
-}
-
-static void ps_mm_destroy(ps_mm *data)
-{
- int h;
- ps_sd *sd, *next;
-
- /* This function is called during each module shutdown,
- but we must not release the shared memory pool, when
- an Apache child dies! */
- if (data->owner != getpid()) return;
-
- for (h = 0; h < data->hash_max + 1; h++)
- for (sd = data->hash[h]; sd; sd = next) {
- next = sd->next;
- ps_sd_destroy(data, sd);
- }
-
- mm_free(data->mm, data->hash);
- mm_destroy(data->mm);
- free(data);
-}
-
-PHP_MINIT_FUNCTION(ps_mm)
-{
- int save_path_len = strlen(PS(save_path));
- int mod_name_len = strlen(sapi_module.name);
- char *ps_mm_path, euid[30];
- int ret;
-
- ps_mm_instance = calloc(sizeof(*ps_mm_instance), 1);
- if (!ps_mm_instance)
- return FAILURE;
-
- if (!sprintf(euid,"%d", geteuid()))
- return FAILURE;
-
- /* Directory + '/' + File + Module Name + Effective UID + \0 */
- ps_mm_path = emalloc(save_path_len+1+sizeof(PS_MM_FILE)+mod_name_len+strlen(euid)+1);
-
- memcpy(ps_mm_path, PS(save_path), save_path_len + 1);
- if (save_path_len > 0 && ps_mm_path[save_path_len - 1] != DEFAULT_SLASH) {
- ps_mm_path[save_path_len] = DEFAULT_SLASH;
- ps_mm_path[save_path_len+1] = '\0';
- }
- strcat(ps_mm_path, PS_MM_FILE);
- strcat(ps_mm_path, sapi_module.name);
- strcat(ps_mm_path, euid);
-
- ret = ps_mm_initialize(ps_mm_instance, ps_mm_path);
-
- efree(ps_mm_path);
-
- if (ret != SUCCESS) {
- free(ps_mm_instance);
- ps_mm_instance = NULL;
- return FAILURE;
- }
-
- php_session_register_module(&ps_mod_mm);
- return SUCCESS;
-}
-
-PHP_MSHUTDOWN_FUNCTION(ps_mm)
-{
- if (ps_mm_instance) {
- ps_mm_destroy(ps_mm_instance);
- return SUCCESS;
- }
- return FAILURE;
-}
-
-PS_OPEN_FUNC(mm)
-{
- ps_mm_debug(("open: ps_mm_instance=%p\n", ps_mm_instance));
-
- if (!ps_mm_instance)
- return FAILURE;
-
- PS_SET_MOD_DATA(ps_mm_instance);
-
- return SUCCESS;
-}
-
-PS_CLOSE_FUNC(mm)
-{
- PS_SET_MOD_DATA(NULL);
-
- return SUCCESS;
-}
-
-PS_READ_FUNC(mm)
-{
- PS_MM_DATA;
- ps_sd *sd;
- int ret = FAILURE;
-
- mm_lock(data->mm, MM_LOCK_RD);
-
- sd = ps_sd_lookup(data, key, 0);
- if (sd) {
- *vallen = sd->datalen;
- *val = emalloc(sd->datalen + 1);
- memcpy(*val, sd->data, sd->datalen);
- (*val)[sd->datalen] = '\0';
- ret = SUCCESS;
- }
-
- mm_unlock(data->mm);
-
- return ret;
-}
-
-PS_WRITE_FUNC(mm)
-{
- PS_MM_DATA;
- ps_sd *sd;
-
- mm_lock(data->mm, MM_LOCK_RW);
-
- sd = ps_sd_lookup(data, key, 1);
- if (!sd) {
- sd = ps_sd_new(data, key);
- ps_mm_debug(("new entry for %s\n", key));
- }
-
- if (sd) {
- if (vallen >= sd->alloclen) {
- if (data->mm)
- mm_free(data->mm, sd->data);
- sd->alloclen = vallen + 1;
- sd->data = mm_malloc(data->mm, sd->alloclen);
-
- if (!sd->data) {
- ps_sd_destroy(data, sd);
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "cannot allocate new data segment");
- sd = NULL;
- }
- }
- if (sd) {
- sd->datalen = vallen;
- memcpy(sd->data, val, vallen);
- time(&sd->ctime);
- }
- }
-
- mm_unlock(data->mm);
-
- return sd ? SUCCESS : FAILURE;
-}
-
-PS_DESTROY_FUNC(mm)
-{
- PS_MM_DATA;
- ps_sd *sd;
-
- mm_lock(data->mm, MM_LOCK_RW);
-
- sd = ps_sd_lookup(data, key, 0);
- if (sd)
- ps_sd_destroy(data, sd);
-
- mm_unlock(data->mm);
-
- return SUCCESS;
-}
-
-PS_GC_FUNC(mm)
-{
- PS_MM_DATA;
- time_t limit;
- ps_sd **ohash, **ehash;
- ps_sd *sd, *next;
-
- *nrdels = 0;
- ps_mm_debug(("gc\n"));
-
- time(&limit);
-
- limit -= maxlifetime;
-
- mm_lock(data->mm, MM_LOCK_RW);
-
- ehash = data->hash + data->hash_max + 1;
- for (ohash = data->hash; ohash < ehash; ohash++)
- for (sd = *ohash; sd; sd = next) {
- next = sd->next;
- if (sd->ctime < limit) {
- ps_mm_debug(("purging %s\n", sd->key));
- ps_sd_destroy(data, sd);
- (*nrdels)++;
- }
- }
-
- mm_unlock(data->mm);
-
- return SUCCESS;
-}
-
-#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/session/mod_mm.h b/ext/session/mod_mm.h
deleted file mode 100644
index 47c46acf1a..0000000000
--- a/ext/session/mod_mm.h
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Sascha Schumann <sascha@schumann.cx> |
- +----------------------------------------------------------------------+
- */
-
-#ifndef MOD_MM_H
-#define MOD_MM_H
-
-#ifdef HAVE_LIBMM
-
-#include "php_session.h"
-
-PHP_MINIT_FUNCTION(ps_mm);
-PHP_MSHUTDOWN_FUNCTION(ps_mm);
-
-extern ps_module ps_mod_mm;
-#define ps_mm_ptr &ps_mod_mm
-
-PS_FUNCS(mm);
-
-#endif
-#endif
diff --git a/ext/session/mod_user.c b/ext/session/mod_user.c
deleted file mode 100644
index fb849a7c12..0000000000
--- a/ext/session/mod_user.c
+++ /dev/null
@@ -1,184 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Sascha Schumann <sascha@schumann.cx> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-#include "php.h"
-#include "php_session.h"
-#include "mod_user.h"
-
-ps_module ps_mod_user = {
- PS_MOD(user)
-};
-
-#define SESS_ZVAL_LONG(val, a) \
-{ \
- MAKE_STD_ZVAL(a); \
- Z_TYPE_P(a) = IS_LONG; \
- Z_LVAL_P(a) = val; \
-}
-
-#define SESS_ZVAL_STRING(vl, a) \
-{ \
- int len = strlen(vl); \
- MAKE_STD_ZVAL(a); \
- Z_TYPE_P(a) = IS_STRING; \
- Z_STRLEN_P(a) = len; \
- Z_STRVAL_P(a) = estrndup(vl, len); \
-}
-
-#define SESS_ZVAL_STRINGN(vl, ln, a) \
-{ \
- MAKE_STD_ZVAL(a); \
- Z_TYPE_P(a) = IS_STRING; \
- Z_STRLEN_P(a) = ln; \
- Z_STRVAL_P(a) = estrndup(vl, ln); \
-}
-
-
-static zval *ps_call_handler(zval *func, int argc, zval **argv TSRMLS_DC)
-{
- int i;
- zval *retval = NULL;
-
- MAKE_STD_ZVAL(retval);
- if (call_user_function(EG(function_table), NULL, func, retval,
- argc, argv TSRMLS_CC) == FAILURE) {
- zval_ptr_dtor(&retval);
- retval = NULL;
- }
-
- for (i = 0; i < argc; i++) {
- zval_ptr_dtor(&argv[i]);
- }
-
- return retval;
-}
-
-#define STDVARS \
- zval *retval; \
- int ret = FAILURE; \
- ps_user *mdata = PS_GET_MOD_DATA(); \
- if (!mdata) \
- return FAILURE
-
-#define PSF(a) mdata->name.ps_##a
-
-#define FINISH \
- if (retval) { \
- convert_to_long(retval); \
- ret = Z_LVAL_P(retval); \
- zval_ptr_dtor(&retval); \
- } \
- return ret
-
-PS_OPEN_FUNC(user)
-{
- zval *args[2];
- STDVARS;
-
- SESS_ZVAL_STRING(save_path, args[0]);
- SESS_ZVAL_STRING(session_name, args[1]);
-
- retval = ps_call_handler(PSF(open), 2, args TSRMLS_CC);
-
- FINISH;
-}
-
-PS_CLOSE_FUNC(user)
-{
- int i;
- STDVARS;
-
- retval = ps_call_handler(PSF(close), 0, NULL TSRMLS_CC);
-
- for (i = 0; i < 6; i++)
- zval_ptr_dtor(&mdata->names[i]);
- efree(mdata);
-
- PS_SET_MOD_DATA(NULL);
-
- FINISH;
-}
-
-PS_READ_FUNC(user)
-{
- zval *args[1];
- STDVARS;
-
- SESS_ZVAL_STRING(key, args[0]);
-
- retval = ps_call_handler(PSF(read), 1, args TSRMLS_CC);
-
- if (retval) {
- if (Z_TYPE_P(retval) == IS_STRING) {
- *val = estrndup(Z_STRVAL_P(retval), Z_STRLEN_P(retval));
- *vallen = Z_STRLEN_P(retval);
- ret = SUCCESS;
- }
- zval_ptr_dtor(&retval);
- }
-
- return ret;
-}
-
-PS_WRITE_FUNC(user)
-{
- zval *args[2];
- STDVARS;
-
- SESS_ZVAL_STRING(key, args[0]);
- SESS_ZVAL_STRINGN(val, vallen, args[1]);
-
- retval = ps_call_handler(PSF(write), 2, args TSRMLS_CC);
-
- FINISH;
-}
-
-PS_DESTROY_FUNC(user)
-{
- zval *args[1];
- STDVARS;
-
- SESS_ZVAL_STRING(key, args[0]);
-
- retval = ps_call_handler(PSF(destroy), 1, args TSRMLS_CC);
-
- FINISH;
-}
-
-PS_GC_FUNC(user)
-{
- zval *args[1];
- STDVARS;
-
- SESS_ZVAL_LONG(maxlifetime, args[0]);
-
- retval = ps_call_handler(PSF(gc), 1, args TSRMLS_CC);
-
- FINISH;
-}
-
-/*
- * 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/session/mod_user.h b/ext/session/mod_user.h
deleted file mode 100644
index 79e28a3941..0000000000
--- a/ext/session/mod_user.h
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Sascha Schumann <sascha@schumann.cx> |
- +----------------------------------------------------------------------+
- */
-
-#ifndef MOD_USER_H
-#define MOD_USER_H
-
-typedef union {
- zval *names[6];
- struct {
- zval *ps_open;
- zval *ps_close;
- zval *ps_read;
- zval *ps_write;
- zval *ps_destroy;
- zval *ps_gc;
- } name;
-} ps_user;
-
-extern ps_module ps_mod_user;
-#define ps_user_ptr &ps_mod_user
-
-PS_FUNCS(user);
-
-#endif
diff --git a/ext/session/package.xml b/ext/session/package.xml
deleted file mode 100644
index e176dc3d82..0000000000
--- a/ext/session/package.xml
+++ /dev/null
@@ -1,82 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1" ?>
-<!DOCTYPE package SYSTEM "../pear/package.dtd">
-<package>
- <name>session</name>
- <summary>Session handling functions</summary>
- <maintainers>
- <maintainer>
- <user>sascha</user>
- <name>Sascha Schumann</name>
- <email>sas@php.net</email>
- <role>lead</role>
- </maintainer>
- <maintainer>
- <user>andrei</user>
- <name>Andrei Zmievski</name>
- <email>andrei@php.net</email>
- <role>lead</role>
- </maintainer>
- </maintainers>
- <description>
-Session support in PHP consists of a way to preserve certain data
-across subsequent accesses. This enables you to build more customized
-applications and increase the appeal of your web site.
- </description>
- <license>PHP</license>
- <release>
- <state>beta</state>
- <version>5.0.0rc1</version>
- <date>2004-03-19</date>
- <notes>
-package.xml added to support intallation using pear installer
- </notes>
- <filelist>
- <file role="doc" name="CREDITS"/>
- <file role="src" name="config.m4"/>
- <file role="src" name="config.w32"/>
- <file role="src" name="mod_files.c"/>
- <file role="src" name="mod_files.h"/>
- <file role="src" name="mod_files.sh"/>
- <file role="src" name="mod_mm.c"/>
- <file role="src" name="mod_mm.h"/>
- <file role="src" name="mod_user.c"/>
- <file role="src" name="mod_user.h"/>
- <file role="src" name="php_session.h"/>
- <file role="src" name="session.c"/>
- <file role="test" name="tests/001.phpt"/>
- <file role="test" name="tests/002.phpt"/>
- <file role="test" name="tests/bug25745.phpt"/>
- <file role="test" name="tests/001.phpt"/>
- <file role="test" name="tests/002.phpt"/>
- <file role="test" name="tests/003.phpt"/>
- <file role="test" name="tests/004.phpt"/>
- <file role="test" name="tests/005.phpt"/>
- <file role="test" name="tests/006.phpt"/>
- <file role="test" name="tests/007.phpt"/>
- <file role="test" name="tests/008-php4.2.3.phpt"/>
- <file role="test" name="tests/008.phpt"/>
- <file role="test" name="tests/009.phpt"/>
- <file role="test" name="tests/010.phpt"/>
- <file role="test" name="tests/011.phpt"/>
- <file role="test" name="tests/012.phpt"/>
- <file role="test" name="tests/013.phpt"/>
- <file role="test" name="tests/014.phpt"/>
- <file role="test" name="tests/015.phpt"/>
- <file role="test" name="tests/016.phpt"/>
- <file role="test" name="tests/017.phpt"/>
- <file role="test" name="tests/018.phpt"/>
- <file role="test" name="tests/019.phpt"/>
- <file role="test" name="tests/020.phpt"/>
- <file role="test" name="tests/021.phpt"/>
- <file role="test" name="tests/skipif.inc"/>
- <file role="test" name="tests/bug26862.phpt"/>
- <file role="test" name="tests/bug24592.phpt"/>
- </filelist>
- <deps>
- <dep type="php" rel="ge" version="5" />
- </deps>
- </release>
-</package>
-<!--
-vim:et:ts=1:sw=1
--->
diff --git a/ext/session/php_session.h b/ext/session/php_session.h
deleted file mode 100644
index 19ce366f26..0000000000
--- a/ext/session/php_session.h
+++ /dev/null
@@ -1,236 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Sascha Schumann <sascha@schumann.cx> |
- +----------------------------------------------------------------------+
- */
-
-#ifndef PHP_SESSION_H
-#define PHP_SESSION_H
-
-#include "ext/standard/php_var.h"
-
-#define PHP_SESSION_API 20020330
-
-#define PS_OPEN_ARGS void **mod_data, const char *save_path, const char *session_name TSRMLS_DC
-#define PS_CLOSE_ARGS void **mod_data TSRMLS_DC
-#define PS_READ_ARGS void **mod_data, const char *key, char **val, int *vallen TSRMLS_DC
-#define PS_WRITE_ARGS void **mod_data, const char *key, const char *val, const int vallen TSRMLS_DC
-#define PS_DESTROY_ARGS void **mod_data, const char *key TSRMLS_DC
-#define PS_GC_ARGS void **mod_data, int maxlifetime, int *nrdels TSRMLS_DC
-#define PS_CREATE_SID_ARGS void **mod_data, int *newlen TSRMLS_DC
-
-/* default create id function */
-PHPAPI char *php_session_create_id(PS_CREATE_SID_ARGS);
-
-typedef struct ps_module_struct {
- const char *s_name;
- int (*s_open)(PS_OPEN_ARGS);
- int (*s_close)(PS_CLOSE_ARGS);
- int (*s_read)(PS_READ_ARGS);
- int (*s_write)(PS_WRITE_ARGS);
- int (*s_destroy)(PS_DESTROY_ARGS);
- int (*s_gc)(PS_GC_ARGS);
- char *(*s_create_sid)(PS_CREATE_SID_ARGS);
-} ps_module;
-
-#define PS_GET_MOD_DATA() *mod_data
-#define PS_SET_MOD_DATA(a) *mod_data = (a)
-
-#define PS_OPEN_FUNC(x) int ps_open_##x(PS_OPEN_ARGS)
-#define PS_CLOSE_FUNC(x) int ps_close_##x(PS_CLOSE_ARGS)
-#define PS_READ_FUNC(x) int ps_read_##x(PS_READ_ARGS)
-#define PS_WRITE_FUNC(x) int ps_write_##x(PS_WRITE_ARGS)
-#define PS_DESTROY_FUNC(x) int ps_delete_##x(PS_DESTROY_ARGS)
-#define PS_GC_FUNC(x) int ps_gc_##x(PS_GC_ARGS)
-#define PS_CREATE_SID_FUNC(x) char *ps_create_sid_##x(PS_CREATE_SID_ARGS)
-
-#define PS_FUNCS(x) \
- PS_OPEN_FUNC(x); \
- PS_CLOSE_FUNC(x); \
- PS_READ_FUNC(x); \
- PS_WRITE_FUNC(x); \
- PS_DESTROY_FUNC(x); \
- PS_GC_FUNC(x); \
- PS_CREATE_SID_FUNC(x)
-
-#define PS_MOD(x) \
- #x, ps_open_##x, ps_close_##x, ps_read_##x, ps_write_##x, \
- ps_delete_##x, ps_gc_##x, php_session_create_id
-
-/* SID enabled module handler definitions */
-#define PS_FUNCS_SID(x) \
- PS_OPEN_FUNC(x); \
- PS_CLOSE_FUNC(x); \
- PS_READ_FUNC(x); \
- PS_WRITE_FUNC(x); \
- PS_DESTROY_FUNC(x); \
- PS_GC_FUNC(x); \
- PS_CREATE_SID_FUNC(x)
-
-#define PS_MOD_SID(x) \
- #x, ps_open_##x, ps_close_##x, ps_read_##x, ps_write_##x, \
- ps_delete_##x, ps_gc_##x, ps_create_sid_##x
-
-typedef enum {
- php_session_disabled,
- php_session_none,
- php_session_active
-} php_session_status;
-
-typedef struct _php_ps_globals {
- char *save_path;
- char *session_name;
- char *id;
- char *extern_referer_chk;
- char *entropy_file;
- char *cache_limiter;
- long entropy_length;
- long cookie_lifetime;
- char *cookie_path;
- char *cookie_domain;
- zend_bool cookie_secure;
- ps_module *mod;
- void *mod_data;
- php_session_status session_status;
- long gc_probability;
- long gc_divisor;
- long gc_maxlifetime;
- int module_number;
- long cache_expire;
- zend_bool bug_compat; /* Whether to behave like PHP 4.2 and earlier */
- zend_bool bug_compat_warn; /* Whether to warn about it */
- const struct ps_serializer_struct *serializer;
- zval *http_session_vars;
- zend_bool auto_start;
- zend_bool use_cookies;
- zend_bool use_only_cookies;
- zend_bool use_trans_sid; /* contains the INI value of whether to use trans-sid */
- zend_bool apply_trans_sid; /* whether or not to enable trans-sid for the current request */
-
- long hash_func;
- long hash_bits_per_character;
- int send_cookie;
- int define_sid;
-} php_ps_globals;
-
-typedef php_ps_globals zend_ps_globals;
-
-extern zend_module_entry session_module_entry;
-#define phpext_session_ptr &session_module_entry
-
-PHP_FUNCTION(session_name);
-PHP_FUNCTION(session_module_name);
-PHP_FUNCTION(session_save_path);
-PHP_FUNCTION(session_id);
-PHP_FUNCTION(session_regenerate_id);
-PHP_FUNCTION(session_decode);
-PHP_FUNCTION(session_register);
-PHP_FUNCTION(session_unregister);
-PHP_FUNCTION(session_is_registered);
-PHP_FUNCTION(session_encode);
-PHP_FUNCTION(session_start);
-PHP_FUNCTION(session_destroy);
-PHP_FUNCTION(session_unset);
-PHP_FUNCTION(session_set_save_handler);
-PHP_FUNCTION(session_cache_expire);
-PHP_FUNCTION(session_cache_limiter);
-PHP_FUNCTION(session_set_cookie_params);
-PHP_FUNCTION(session_get_cookie_params);
-PHP_FUNCTION(session_write_close);
-
-#ifdef ZTS
-#define PS(v) TSRMG(ps_globals_id, php_ps_globals *, v)
-#else
-#define PS(v) (ps_globals.v)
-#endif
-
-#define PS_SERIALIZER_ENCODE_ARGS char **newstr, int *newlen TSRMLS_DC
-#define PS_SERIALIZER_DECODE_ARGS const char *val, int vallen TSRMLS_DC
-
-typedef struct ps_serializer_struct {
- const char *name;
- int (*encode)(PS_SERIALIZER_ENCODE_ARGS);
- int (*decode)(PS_SERIALIZER_DECODE_ARGS);
-} ps_serializer;
-
-#define PS_SERIALIZER_ENCODE_NAME(x) ps_srlzr_encode_##x
-#define PS_SERIALIZER_DECODE_NAME(x) ps_srlzr_decode_##x
-
-#define PS_SERIALIZER_ENCODE_FUNC(x) \
- int PS_SERIALIZER_ENCODE_NAME(x)(PS_SERIALIZER_ENCODE_ARGS)
-#define PS_SERIALIZER_DECODE_FUNC(x) \
- int PS_SERIALIZER_DECODE_NAME(x)(PS_SERIALIZER_DECODE_ARGS)
-
-#define PS_SERIALIZER_FUNCS(x) \
- PS_SERIALIZER_ENCODE_FUNC(x); \
- PS_SERIALIZER_DECODE_FUNC(x)
-
-#define PS_SERIALIZER_ENTRY(x) \
- { #x, PS_SERIALIZER_ENCODE_NAME(x), PS_SERIALIZER_DECODE_NAME(x) }
-
-PHPAPI void session_adapt_url(const char *, size_t, char **, size_t * TSRMLS_DC);
-
-void php_add_session_var(char *name, size_t namelen TSRMLS_DC);
-void php_set_session_var(char *name, size_t namelen, zval *state_val, php_unserialize_data_t *var_hash TSRMLS_DC);
-int php_get_session_var(char *name, size_t namelen, zval ***state_var TSRMLS_DC);
-
-PHPAPI int php_session_register_module(ps_module *);
-
-PHPAPI int php_session_register_serializer(const char *name,
- int (*encode)(PS_SERIALIZER_ENCODE_ARGS),
- int (*decode)(PS_SERIALIZER_DECODE_ARGS));
-
-PHPAPI void php_session_set_id(char *id TSRMLS_DC);
-PHPAPI void php_session_start(TSRMLS_D);
-
-#define PS_ADD_VARL(name,namelen) do { \
- php_add_session_var(name, namelen TSRMLS_CC); \
-} while (0)
-
-#define PS_ADD_VAR(name) PS_ADD_VARL(name, strlen(name))
-
-#define PS_DEL_VARL(name,namelen) do { \
- if (PS(http_session_vars)) { \
- zend_hash_del(Z_ARRVAL_P(PS(http_session_vars)), name, namelen+1); \
- } \
-} while (0)
-
-
-#define PS_ENCODE_VARS \
- char *key; \
- uint key_length; \
- ulong num_key; \
- zval **struc;
-
-#define PS_ENCODE_LOOP(code) \
- { \
- HashTable *_ht = Z_ARRVAL_P(PS(http_session_vars)); \
- \
- for (zend_hash_internal_pointer_reset(_ht); \
- zend_hash_get_current_key_ex(_ht, &key, &key_length, &num_key, 0, NULL) == HASH_KEY_IS_STRING; \
- zend_hash_move_forward(_ht)) { \
- key_length--; \
- if (php_get_session_var(key, key_length, &struc TSRMLS_CC) == SUCCESS) { \
- code; \
- } \
- } \
- }
-
-PHPAPI ZEND_EXTERN_MODULE_GLOBALS(ps)
-
-void php_session_auto_start(void *data);
-void php_session_shutdown(void *data);
-
-#endif
diff --git a/ext/session/session.c b/ext/session/session.c
deleted file mode 100644
index d263ac6d6e..0000000000
--- a/ext/session/session.c
+++ /dev/null
@@ -1,1839 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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. |
- +----------------------------------------------------------------------+
- | Authors: Sascha Schumann <sascha@schumann.cx> |
- | Andrei Zmievski <andrei@php.net> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "php.h"
-
-#ifdef PHP_WIN32
-#include "win32/time.h"
-#else
-#include <sys/time.h>
-#endif
-
-#include <sys/stat.h>
-#include <fcntl.h>
-
-#include "php_ini.h"
-#include "SAPI.h"
-#include "php_session.h"
-#include "ext/standard/md5.h"
-#include "ext/standard/sha1.h"
-#include "ext/standard/php_var.h"
-#include "ext/standard/datetime.h"
-#include "ext/standard/php_lcg.h"
-#include "ext/standard/url_scanner_ex.h"
-#include "ext/standard/php_rand.h" /* for RAND_MAX */
-#include "ext/standard/info.h"
-#include "ext/standard/php_smart_str.h"
-
-#include "mod_files.h"
-#include "mod_user.h"
-
-#ifdef HAVE_LIBMM
-#include "mod_mm.h"
-#endif
-
-/* {{{ session_functions[]
- */
-function_entry session_functions[] = {
- PHP_FE(session_name, NULL)
- PHP_FE(session_module_name, NULL)
- PHP_FE(session_save_path, NULL)
- PHP_FE(session_id, NULL)
- PHP_FE(session_regenerate_id, NULL)
- PHP_FE(session_decode, NULL)
- PHP_FE(session_register, NULL)
- PHP_FE(session_unregister, NULL)
- PHP_FE(session_is_registered, NULL)
- PHP_FE(session_encode, NULL)
- PHP_FE(session_start, NULL)
- PHP_FE(session_destroy, NULL)
- PHP_FE(session_unset, NULL)
- PHP_FE(session_set_save_handler, NULL)
- PHP_FE(session_cache_limiter, NULL)
- PHP_FE(session_cache_expire, NULL)
- PHP_FE(session_set_cookie_params, NULL)
- PHP_FE(session_get_cookie_params, NULL)
- PHP_FE(session_write_close, NULL)
- PHP_FALIAS(session_commit, session_write_close, NULL)
- {NULL, NULL, NULL}
-};
-/* }}} */
-
-PHPAPI ZEND_DECLARE_MODULE_GLOBALS(ps);
-
-static ps_module *_php_find_ps_module(char *name TSRMLS_DC);
-static const ps_serializer *_php_find_ps_serializer(char *name TSRMLS_DC);
-
-#define SESSION_CHECK_ACTIVE_STATE \
- if (PS(session_status) == php_session_active) { \
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "A session is active. You cannot change the session module's ini settings at this time."); \
- return FAILURE; \
- } \
-
-static PHP_INI_MH(OnUpdateSaveHandler)
-{
- SESSION_CHECK_ACTIVE_STATE;
-
- PS(mod) = _php_find_ps_module(new_value TSRMLS_CC);
-
- if (PG(modules_activated) && !PS(mod)) {
- php_error_docref(NULL TSRMLS_CC, E_ERROR, "Cannot find save handler %s", new_value);
- }
-
- return SUCCESS;
-}
-
-static PHP_INI_MH(OnUpdateTransSid)
-{
- SESSION_CHECK_ACTIVE_STATE;
-
- if (!strncasecmp(new_value, "on", sizeof("on"))) {
- PS(use_trans_sid) = (zend_bool) 1;
- } else {
- PS(use_trans_sid) = (zend_bool) atoi(new_value);
- }
-
- return SUCCESS;
-}
-
-static PHP_INI_MH(OnUpdateSerializer)
-{
- SESSION_CHECK_ACTIVE_STATE;
-
- PS(serializer) = _php_find_ps_serializer(new_value TSRMLS_CC);
-
- if (PG(modules_activated) && !PS(serializer)) {
- php_error_docref(NULL TSRMLS_CC, E_ERROR, "Cannot find serialization handler %s", new_value);
- }
-
- return SUCCESS;
-}
-
-
-/* {{{ PHP_INI
- */
-PHP_INI_BEGIN()
- STD_PHP_INI_BOOLEAN("session.bug_compat_42", "1", PHP_INI_ALL, OnUpdateBool, bug_compat, php_ps_globals, ps_globals)
- STD_PHP_INI_BOOLEAN("session.bug_compat_warn", "1", PHP_INI_ALL, OnUpdateBool, bug_compat_warn, php_ps_globals, ps_globals)
- STD_PHP_INI_ENTRY("session.save_path", "", PHP_INI_ALL, OnUpdateString, save_path, php_ps_globals, ps_globals)
- STD_PHP_INI_ENTRY("session.name", "PHPSESSID", PHP_INI_ALL, OnUpdateString, session_name, php_ps_globals, ps_globals)
- PHP_INI_ENTRY("session.save_handler", "files", PHP_INI_ALL, OnUpdateSaveHandler)
- STD_PHP_INI_BOOLEAN("session.auto_start", "0", PHP_INI_ALL, OnUpdateBool, auto_start, php_ps_globals, ps_globals)
- STD_PHP_INI_ENTRY("session.gc_probability", "1", PHP_INI_ALL, OnUpdateLong, gc_probability, php_ps_globals, ps_globals)
- STD_PHP_INI_ENTRY("session.gc_divisor", "100", PHP_INI_ALL, OnUpdateLong, gc_divisor, php_ps_globals, ps_globals)
- STD_PHP_INI_ENTRY("session.gc_maxlifetime", "1440", PHP_INI_ALL, OnUpdateLong, gc_maxlifetime, php_ps_globals, ps_globals)
- PHP_INI_ENTRY("session.serialize_handler", "php", PHP_INI_ALL, OnUpdateSerializer)
- STD_PHP_INI_ENTRY("session.cookie_lifetime", "0", PHP_INI_ALL, OnUpdateLong, cookie_lifetime, php_ps_globals, ps_globals)
- STD_PHP_INI_ENTRY("session.cookie_path", "/", PHP_INI_ALL, OnUpdateString, cookie_path, php_ps_globals, ps_globals)
- STD_PHP_INI_ENTRY("session.cookie_domain", "", PHP_INI_ALL, OnUpdateString, cookie_domain, php_ps_globals, ps_globals)
- STD_PHP_INI_BOOLEAN("session.cookie_secure", "", PHP_INI_ALL, OnUpdateBool, cookie_secure, php_ps_globals, ps_globals)
- STD_PHP_INI_BOOLEAN("session.use_cookies", "1", PHP_INI_ALL, OnUpdateBool, use_cookies, php_ps_globals, ps_globals)
- STD_PHP_INI_BOOLEAN("session.use_only_cookies", "0", PHP_INI_ALL, OnUpdateBool, use_only_cookies, php_ps_globals, ps_globals)
- STD_PHP_INI_ENTRY("session.referer_check", "", PHP_INI_ALL, OnUpdateString, extern_referer_chk, php_ps_globals, ps_globals)
- STD_PHP_INI_ENTRY("session.entropy_file", "", PHP_INI_ALL, OnUpdateString, entropy_file, php_ps_globals, ps_globals)
- STD_PHP_INI_ENTRY("session.entropy_length", "0", PHP_INI_ALL, OnUpdateLong, entropy_length, php_ps_globals, ps_globals)
- STD_PHP_INI_ENTRY("session.cache_limiter", "nocache", PHP_INI_ALL, OnUpdateString, cache_limiter, php_ps_globals, ps_globals)
- STD_PHP_INI_ENTRY("session.cache_expire", "180", PHP_INI_ALL, OnUpdateLong, cache_expire, php_ps_globals, ps_globals)
- PHP_INI_ENTRY("session.use_trans_sid", "0", PHP_INI_ALL, OnUpdateTransSid)
- STD_PHP_INI_ENTRY("session.hash_function", "0", PHP_INI_ALL, OnUpdateLong, hash_func, php_ps_globals, ps_globals)
- STD_PHP_INI_ENTRY("session.hash_bits_per_character", "4", PHP_INI_ALL, OnUpdateLong, hash_bits_per_character, php_ps_globals, ps_globals)
-
- /* Commented out until future discussion */
- /* PHP_INI_ENTRY("session.encode_sources", "globals,track", PHP_INI_ALL, NULL) */
-PHP_INI_END()
-/* }}} */
-
-PS_SERIALIZER_FUNCS(php);
-PS_SERIALIZER_FUNCS(php_binary);
-
-#define MAX_SERIALIZERS 10
-
-static ps_serializer ps_serializers[MAX_SERIALIZERS + 1] = {
- PS_SERIALIZER_ENTRY(php),
- PS_SERIALIZER_ENTRY(php_binary)
-};
-
-#define MAX_MODULES 10
-
-static ps_module *ps_modules[MAX_MODULES + 1] = {
- ps_files_ptr,
- ps_user_ptr
-};
-
-#define IF_SESSION_VARS() \
- if (PS(http_session_vars) && PS(http_session_vars)->type == IS_ARRAY)
-
-PHPAPI int php_session_register_serializer(const char *name,
- int (*encode)(PS_SERIALIZER_ENCODE_ARGS),
- int (*decode)(PS_SERIALIZER_DECODE_ARGS))
-{
- int ret = -1;
- int i;
-
- for (i = 0; i < MAX_SERIALIZERS; i++) {
- if (ps_serializers[i].name == NULL) {
- ps_serializers[i].name = name;
- ps_serializers[i].encode = encode;
- ps_serializers[i].decode = decode;
- ps_serializers[i + 1].name = NULL;
- ret = 0;
- break;
- }
- }
-
- return ret;
-}
-
-PHPAPI int php_session_register_module(ps_module *ptr)
-{
- int ret = -1;
- int i;
-
- for (i = 0; i < MAX_MODULES; i++) {
- if (!ps_modules[i]) {
- ps_modules[i] = ptr;
- ret = 0;
- break;
- }
- }
-
- return ret;
-}
-
-PHP_MINIT_FUNCTION(session);
-PHP_RINIT_FUNCTION(session);
-PHP_MSHUTDOWN_FUNCTION(session);
-PHP_RSHUTDOWN_FUNCTION(session);
-PHP_MINFO_FUNCTION(session);
-
-static void php_rinit_session_globals(TSRMLS_D);
-static void php_rshutdown_session_globals(TSRMLS_D);
-static zend_bool php_session_destroy(TSRMLS_D);
-
-zend_module_entry session_module_entry = {
- STANDARD_MODULE_HEADER,
- "session",
- session_functions,
- PHP_MINIT(session), PHP_MSHUTDOWN(session),
- PHP_RINIT(session), PHP_RSHUTDOWN(session),
- PHP_MINFO(session),
- NO_VERSION_YET,
- STANDARD_MODULE_PROPERTIES
-};
-
-#ifdef COMPILE_DL_SESSION
-ZEND_GET_MODULE(session)
-#endif
-
-typedef struct {
- char *name;
- void (*func)(TSRMLS_D);
-} php_session_cache_limiter_t;
-
-#define CACHE_LIMITER(name) _php_cache_limiter_##name
-#define CACHE_LIMITER_FUNC(name) static void CACHE_LIMITER(name)(TSRMLS_D)
-#define CACHE_LIMITER_ENTRY(name) { #name, CACHE_LIMITER(name) },
-
-#define ADD_HEADER(a) sapi_add_header(a, strlen(a), 1);
-
-#define MAX_STR 512
-
-void php_add_session_var(char *name, size_t namelen TSRMLS_DC)
-{
- zval **sym_track = NULL;
-
- zend_hash_find(Z_ARRVAL_P(PS(http_session_vars)), name, namelen + 1,
- (void *) &sym_track);
-
- /*
- * Set up a proper reference between $_SESSION["x"] and $x.
- */
-
- if (PG(register_globals)) {
- zval **sym_global = NULL;
-
- zend_hash_find(&EG(symbol_table), name, namelen + 1,
- (void *) &sym_global);
-
- if (sym_global == NULL && sym_track == NULL) {
- zval *empty_var;
-
- ALLOC_INIT_ZVAL(empty_var); /* this sets refcount to 1 */
- empty_var->refcount = 0; /* our module does not maintain a ref */
- /* The next call will increase refcount by NR_OF_SYM_TABLES==2 */
- zend_set_hash_symbol(empty_var, name, namelen, 1, 2, Z_ARRVAL_P(PS(http_session_vars)), &EG(symbol_table));
- } else if (sym_global == NULL) {
- SEPARATE_ZVAL_IF_NOT_REF(sym_track);
- zend_set_hash_symbol(*sym_track, name, namelen, 1, 1, &EG(symbol_table));
- } else if (sym_track == NULL) {
- SEPARATE_ZVAL_IF_NOT_REF(sym_global);
- zend_set_hash_symbol(*sym_global, name, namelen, 1, 1, Z_ARRVAL_P(PS(http_session_vars)));
- }
- } else {
- if (sym_track == NULL) {
- zval *empty_var;
-
- ALLOC_INIT_ZVAL(empty_var);
- ZEND_SET_SYMBOL_WITH_LENGTH(Z_ARRVAL_P(PS(http_session_vars)), name, namelen+1, empty_var, 1, 0);
- }
- }
-}
-
-void php_set_session_var(char *name, size_t namelen, zval *state_val, php_unserialize_data_t *var_hash TSRMLS_DC)
-{
- if (PG(register_globals)) {
- zval **old_symbol;
- if (zend_hash_find(&EG(symbol_table),name,namelen+1,(void *)&old_symbol) == SUCCESS) {
-
- /*
- * A global symbol with the same name exists already. That
- * symbol might have been created by other means (e.g. $_GET).
- *
- * hash_update in zend_set_hash_symbol is not good, because
- * it will leave referenced variables (such as local instances
- * of a global variable) dangling.
- *
- * BTW: if you use register_globals references between
- * session-vars won't work because of this very reason!
- */
-
-
- REPLACE_ZVAL_VALUE(old_symbol,state_val,1);
-
- /*
- * The following line will update the reference table used for
- * unserialization. It is optional, because some storage
- * formats may not be able to represent references.
- */
-
- if (var_hash) {
- PHP_VAR_UNSERIALIZE_ZVAL_CHANGED(var_hash,state_val,*old_symbol);
- }
-
- zend_set_hash_symbol(*old_symbol, name, namelen, 1, 1, Z_ARRVAL_P(PS(http_session_vars)));
- } else {
- zend_set_hash_symbol(state_val, name, namelen, 1, 2, Z_ARRVAL_P(PS(http_session_vars)), &EG(symbol_table));
- }
- } else IF_SESSION_VARS() {
- zend_set_hash_symbol(state_val, name, namelen, PZVAL_IS_REF(state_val), 1, Z_ARRVAL_P(PS(http_session_vars)));
- }
-}
-
-int php_get_session_var(char *name, size_t namelen, zval ***state_var TSRMLS_DC)
-{
- int ret = FAILURE;
-
- IF_SESSION_VARS() {
- ret = zend_hash_find(Z_ARRVAL_P(PS(http_session_vars)), name,
- namelen+1, (void **) state_var);
-
- /*
- * If register_globals is enabled, and
- * if there is an entry for the slot in $_SESSION, and
- * if that entry is still set to NULL, and
- * if the global var exists, then
- * we prefer the same key in the global sym table
- */
-
- if (PG(register_globals) && ret == SUCCESS
- && Z_TYPE_PP(*state_var) == IS_NULL) {
- zval **tmp;
-
- if (zend_hash_find(&EG(symbol_table), name, namelen + 1,
- (void **) &tmp) == SUCCESS) {
- *state_var = tmp;
- }
- }
- }
-
- return ret;
-}
-
-#define PS_BIN_NR_OF_BITS 8
-#define PS_BIN_UNDEF (1<<(PS_BIN_NR_OF_BITS-1))
-#define PS_BIN_MAX (PS_BIN_UNDEF-1)
-
-PS_SERIALIZER_ENCODE_FUNC(php_binary)
-{
- smart_str buf = {0};
- php_serialize_data_t var_hash;
- PS_ENCODE_VARS;
-
- PHP_VAR_SERIALIZE_INIT(var_hash);
-
- PS_ENCODE_LOOP(
- if (key_length > PS_BIN_MAX) continue;
- smart_str_appendc(&buf, (unsigned char) key_length);
- smart_str_appendl(&buf, key, key_length);
-
- php_var_serialize(&buf, struc, &var_hash TSRMLS_CC);
- } else {
- if (key_length > PS_BIN_MAX) continue;
- smart_str_appendc(&buf, (unsigned char) (key_length & PS_BIN_UNDEF));
- smart_str_appendl(&buf, key, key_length);
- );
-
- if (newlen) *newlen = buf.len;
- *newstr = buf.c;
- PHP_VAR_SERIALIZE_DESTROY(var_hash);
-
- return SUCCESS;
-}
-
-PS_SERIALIZER_DECODE_FUNC(php_binary)
-{
- const char *p;
- char *name;
- const char *endptr = val + vallen;
- zval *current;
- int namelen;
- int has_value;
- php_unserialize_data_t var_hash;
-
- PHP_VAR_UNSERIALIZE_INIT(var_hash);
-
- for (p = val; p < endptr; ) {
- namelen = *p & (~PS_BIN_UNDEF);
- has_value = *p & PS_BIN_UNDEF ? 0 : 1;
-
- name = estrndup(p + 1, namelen);
-
- p += namelen + 1;
-
- if (has_value) {
- MAKE_STD_ZVAL(current);
- if (php_var_unserialize(&current, &p, endptr, &var_hash TSRMLS_CC)) {
- php_set_session_var(name, namelen, current, &var_hash TSRMLS_CC);
- }
- zval_ptr_dtor(&current);
- }
- PS_ADD_VARL(name, namelen);
- efree(name);
- }
-
- PHP_VAR_UNSERIALIZE_DESTROY(var_hash);
-
- return SUCCESS;
-}
-
-#define PS_DELIMITER '|'
-#define PS_UNDEF_MARKER '!'
-
-PS_SERIALIZER_ENCODE_FUNC(php)
-{
- smart_str buf = {0};
- php_serialize_data_t var_hash;
- PS_ENCODE_VARS;
-
- PHP_VAR_SERIALIZE_INIT(var_hash);
-
- PS_ENCODE_LOOP(
- smart_str_appendl(&buf, key, (unsigned char) key_length);
- if (memchr(key, PS_DELIMITER, key_length)) {
- PHP_VAR_SERIALIZE_DESTROY(var_hash);
- smart_str_free(&buf);
- return FAILURE;
- }
- smart_str_appendc(&buf, PS_DELIMITER);
-
- php_var_serialize(&buf, struc, &var_hash TSRMLS_CC);
- } else {
- smart_str_appendc(&buf, PS_UNDEF_MARKER);
- smart_str_appendl(&buf, key, key_length);
- smart_str_appendc(&buf, PS_DELIMITER);
- );
-
- if (newlen) *newlen = buf.len;
- *newstr = buf.c;
-
- PHP_VAR_SERIALIZE_DESTROY(var_hash);
- return SUCCESS;
-}
-
-PS_SERIALIZER_DECODE_FUNC(php)
-{
- const char *p, *q;
- char *name;
- const char *endptr = val + vallen;
- zval *current;
- int namelen;
- int has_value;
- php_unserialize_data_t var_hash;
-
- PHP_VAR_UNSERIALIZE_INIT(var_hash);
-
- p = val;
-
- while (p < endptr) {
- q = p;
- while (*q != PS_DELIMITER)
- if (++q >= endptr) goto break_outer_loop;
-
- if (p[0] == PS_UNDEF_MARKER) {
- p++;
- has_value = 0;
- } else {
- has_value = 1;
- }
-
- namelen = q - p;
- name = estrndup(p, namelen);
- q++;
-
- if (has_value) {
- ALLOC_INIT_ZVAL(current);
- if (php_var_unserialize(&current, &q, endptr, &var_hash TSRMLS_CC)) {
- php_set_session_var(name, namelen, current, &var_hash TSRMLS_CC);
- }
- zval_ptr_dtor(&current);
- }
- PS_ADD_VARL(name, namelen);
- efree(name);
-
- p = q;
- }
-break_outer_loop:
-
- PHP_VAR_UNSERIALIZE_DESTROY(var_hash);
-
- return SUCCESS;
-}
-
-static void php_session_track_init(TSRMLS_D)
-{
- zval *session_vars = NULL;
-
- /* Unconditionally destroy existing arrays -- possible dirty data */
- zend_hash_del(&EG(symbol_table), "HTTP_SESSION_VARS",
- sizeof("HTTP_SESSION_VARS"));
- zend_hash_del(&EG(symbol_table), "_SESSION", sizeof("_SESSION"));
-
- MAKE_STD_ZVAL(session_vars);
- array_init(session_vars);
- PS(http_session_vars) = session_vars;
-
- ZEND_SET_GLOBAL_VAR_WITH_LENGTH("HTTP_SESSION_VARS", sizeof("HTTP_SESSION_VARS"), PS(http_session_vars), 2, 1);
- ZEND_SET_GLOBAL_VAR_WITH_LENGTH("_SESSION", sizeof("_SESSION"), PS(http_session_vars), 2, 1);
-}
-
-static char *php_session_encode(int *newlen TSRMLS_DC)
-{
- char *ret = NULL;
-
- IF_SESSION_VARS() {
- if (PS(serializer)->encode(&ret, newlen TSRMLS_CC) == FAILURE)
- ret = NULL;
- } else {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Cannot encode non-existent session.");
- }
-
- return ret;
-}
-
-static void php_session_decode(const char *val, int vallen TSRMLS_DC)
-{
- if (PS(serializer)->decode(val, vallen TSRMLS_CC) == FAILURE) {
- php_session_destroy(TSRMLS_C);
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Failed to decode session object. Session has been destroyed.");
- }
-}
-
-
-/*
- * Note that we cannot use the BASE64 alphabet here, because
- * it contains "/" and "+": both are unacceptable for simple inclusion
- * into URLs.
- */
-
-static char hexconvtab[] = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ,-";
-
-enum {
- PS_HASH_FUNC_MD5,
- PS_HASH_FUNC_SHA1
-};
-
-/* returns a pointer to the byte after the last valid character in out */
-static char *bin_to_readable(char *in, size_t inlen, char *out, char nbits)
-{
- unsigned char *p, *q;
- unsigned short w;
- int mask;
- int have;
-
- p = in;
- q = in + inlen;
-
- w = 0;
- have = 0;
- mask = (1 << nbits) - 1;
-
- while (1) {
- if (have < nbits) {
- if (p < q) {
- w |= *p++ << have;
- have += 8;
- } else {
- /* consumed everything? */
- if (have == 0) break;
- /* No? We need a final round */
- have = nbits;
- }
- }
-
- /* consume nbits */
- *out++ = hexconvtab[w & mask];
- w >>= nbits;
- have -= nbits;
- }
-
- *out = '\0';
- return out;
-}
-
-PHPAPI char *php_session_create_id(PS_CREATE_SID_ARGS)
-{
- PHP_MD5_CTX md5_context;
- PHP_SHA1_CTX sha1_context;
- unsigned char digest[21];
- int digest_len;
- int j;
- char *buf;
- struct timeval tv;
- zval **array;
- zval **token;
- char *remote_addr = NULL;
-
- gettimeofday(&tv, NULL);
-
- if (zend_hash_find(&EG(symbol_table), "_SERVER",
- sizeof("_SERVER"), (void **) &array) == SUCCESS &&
- Z_TYPE_PP(array) == IS_ARRAY &&
- zend_hash_find(Z_ARRVAL_PP(array), "REMOTE_ADDR",
- sizeof("REMOTE_ADDR"), (void **) &token) == SUCCESS) {
- remote_addr = Z_STRVAL_PP(token);
- }
-
- buf = emalloc(100);
-
- /* maximum 15+19+19+10 bytes */
- sprintf(buf, "%.15s%ld%ld%0.8f", remote_addr ? remote_addr : "",
- tv.tv_sec, tv.tv_usec, php_combined_lcg(TSRMLS_C) * 10);
-
- switch (PS(hash_func)) {
- case PS_HASH_FUNC_MD5:
- PHP_MD5Init(&md5_context);
- PHP_MD5Update(&md5_context, buf, strlen(buf));
- digest_len = 16;
- break;
- case PS_HASH_FUNC_SHA1:
- PHP_SHA1Init(&sha1_context);
- PHP_SHA1Update(&sha1_context, buf, strlen(buf));
- digest_len = 20;
- break;
- default:
- php_error_docref(NULL TSRMLS_CC, E_ERROR, "Invalid session hash function");
- efree(buf);
- return NULL;
- }
-
- if (PS(entropy_length) > 0) {
- int fd;
-
- fd = VCWD_OPEN(PS(entropy_file), O_RDONLY);
- if (fd >= 0) {
- unsigned char rbuf[2048];
- int n;
- int to_read = PS(entropy_length);
-
- while (to_read > 0) {
- n = read(fd, rbuf, MIN(to_read, sizeof(rbuf)));
- if (n <= 0) break;
-
- switch (PS(hash_func)) {
- case PS_HASH_FUNC_MD5:
- PHP_MD5Update(&md5_context, rbuf, n);
- break;
- case PS_HASH_FUNC_SHA1:
- PHP_SHA1Update(&sha1_context, rbuf, n);
- break;
- }
- to_read -= n;
- }
- close(fd);
- }
- }
-
- switch (PS(hash_func)) {
- case PS_HASH_FUNC_MD5:
- PHP_MD5Final(digest, &md5_context);
- break;
- case PS_HASH_FUNC_SHA1:
- PHP_SHA1Final(digest, &sha1_context);
- break;
- }
-
- if (PS(hash_bits_per_character) < 4
- || PS(hash_bits_per_character) > 6) {
- PS(hash_bits_per_character) = 4;
-
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "The ini setting hash_bits_per_character is out of range (should be 4, 5, or 6) - using 4 for now");
- }
- j = (int) (bin_to_readable(digest, digest_len, buf, PS(hash_bits_per_character)) - buf);
-
- if (newlen)
- *newlen = j;
- return buf;
-}
-
-static void php_session_initialize(TSRMLS_D)
-{
- char *val;
- int vallen;
-
- if (!PS(mod)) {
- php_error_docref(NULL TSRMLS_CC, E_ERROR, "No storage module chosen - failed to initialize session.");
- return;
- }
-
- /* Open session handler first */
- if (PS(mod)->s_open(&PS(mod_data), PS(save_path), PS(session_name) TSRMLS_CC) == FAILURE) {
- php_error_docref(NULL TSRMLS_CC, E_ERROR, "Failed to initialize storage module: %s (path: %s)", PS(mod)->s_name, PS(save_path));
- return;
- }
-
- /* If there is no ID, use session module to create one */
- if (!PS(id))
- PS(id) = PS(mod)->s_create_sid(&PS(mod_data), NULL TSRMLS_CC);
-
- /* Read data */
- /* Question: if you create a SID here, should you also try to read data?
- * I'm not sure, but while not doing so will remove one session operation
- * it could prove usefull for those sites which wish to have "default"
- * session information
- */
- php_session_track_init(TSRMLS_C);
- if (PS(mod)->s_read(&PS(mod_data), PS(id), &val, &vallen TSRMLS_CC) == SUCCESS) {
- php_session_decode(val, vallen TSRMLS_CC);
- efree(val);
- }
-}
-
-static int migrate_global(HashTable *ht, HashPosition *pos TSRMLS_DC)
-{
- char *str;
- uint str_len;
- ulong num_key;
- int n;
- zval **val;
- int ret = 0;
-
- n = zend_hash_get_current_key_ex(ht, &str, &str_len, &num_key, 0, pos);
-
- switch (n) {
- case HASH_KEY_IS_STRING:
- if (zend_hash_find(&EG(symbol_table), str, str_len,
- (void **) &val) == SUCCESS
- && val && Z_TYPE_PP(val) != IS_NULL) {
- ZEND_SET_SYMBOL_WITH_LENGTH(ht, str, str_len, *val,
- (*val)->refcount + 1 , 1);
- ret = 1;
- }
- break;
- case HASH_KEY_IS_LONG:
- php_error_docref(NULL TSRMLS_CC, E_NOTICE, "The session bug compatibility code will not "
- "try to locate the global variable $%lu due to its "
- "numeric nature.", num_key);
- break;
- }
-
- return ret;
-}
-
-static void php_session_save_current_state(TSRMLS_D)
-{
- int ret = FAILURE;
-
- IF_SESSION_VARS() {
- if (PS(bug_compat) && !PG(register_globals)) {
- HashTable *ht = Z_ARRVAL_P(PS(http_session_vars));
- HashPosition pos;
- zval **val;
- int do_warn = 0;
-
- zend_hash_internal_pointer_reset_ex(ht, &pos);
-
- while (zend_hash_get_current_data_ex(ht,
- (void **) &val, &pos) != FAILURE) {
- if (Z_TYPE_PP(val) == IS_NULL) {
- if (migrate_global(ht, &pos TSRMLS_CC))
- do_warn = 1;
- }
- zend_hash_move_forward_ex(ht, &pos);
- }
-
- if (do_warn && PS(bug_compat_warn)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Your script possibly relies on a session side-effect which existed until PHP 4.2.3. Please be advised that the session extension does not consider global variables as a source of data, unless register_globals is enabled. You can disable this functionality and this warning by setting session.bug_compat_42 or session.bug_compat_warn to off, respectively.");
- }
- }
-
- if (PS(mod_data)) {
- char *val;
- int vallen;
-
- val = php_session_encode(&vallen TSRMLS_CC);
- if (val) {
- ret = PS(mod)->s_write(&PS(mod_data), PS(id), val, vallen TSRMLS_CC);
- efree(val);
- } else {
- ret = PS(mod)->s_write(&PS(mod_data), PS(id), "", 0 TSRMLS_CC);
- }
- }
-
- if (ret == FAILURE)
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Failed to write session data (%s). Please "
- "verify that the current setting of session.save_path "
- "is correct (%s)",
- PS(mod)->s_name,
- PS(save_path));
- }
-
- if (PS(mod_data))
- PS(mod)->s_close(&PS(mod_data) TSRMLS_CC);
-}
-
-static char *month_names[] = {
- "Jan", "Feb", "Mar", "Apr", "May", "Jun",
- "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"
-};
-
-static char *week_days[] = {
- "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"
-};
-
-static void strcpy_gmt(char *ubuf, time_t *when)
-{
- char buf[MAX_STR];
- struct tm tm;
- int n;
-
- php_gmtime_r(when, &tm);
-
- n = sprintf(buf, "%s, %02d %s %d %02d:%02d:%02d GMT", /* SAFE */
- week_days[tm.tm_wday], tm.tm_mday,
- month_names[tm.tm_mon], tm.tm_year + 1900,
- tm.tm_hour, tm.tm_min,
- tm.tm_sec);
- memcpy(ubuf, buf, n);
- ubuf[n] = '\0';
-}
-
-static void last_modified(TSRMLS_D)
-{
- const char *path;
- struct stat sb;
- char buf[MAX_STR + 1];
-
- path = SG(request_info).path_translated;
- if (path) {
- if (VCWD_STAT(path, &sb) == -1) {
- return;
- }
-
-#define LAST_MODIFIED "Last-Modified: "
- memcpy(buf, LAST_MODIFIED, sizeof(LAST_MODIFIED) - 1);
- strcpy_gmt(buf + sizeof(LAST_MODIFIED) - 1, &sb.st_mtime);
- ADD_HEADER(buf);
- }
-}
-
-CACHE_LIMITER_FUNC(public)
-{
- char buf[MAX_STR + 1];
- struct timeval tv;
- time_t now;
-
- gettimeofday(&tv, NULL);
- now = tv.tv_sec + PS(cache_expire) * 60;
-#define EXPIRES "Expires: "
- memcpy(buf, EXPIRES, sizeof(EXPIRES) - 1);
- strcpy_gmt(buf + sizeof(EXPIRES) - 1, &now);
- ADD_HEADER(buf);
-
- sprintf(buf, "Cache-Control: public, max-age=%ld", PS(cache_expire) * 60); /* SAFE */
- ADD_HEADER(buf);
-
- last_modified(TSRMLS_C);
-}
-
-CACHE_LIMITER_FUNC(private_no_expire)
-{
- char buf[MAX_STR + 1];
-
- sprintf(buf, "Cache-Control: private, max-age=%ld, pre-check=%ld", PS(cache_expire) * 60, PS(cache_expire) * 60); /* SAFE */
- ADD_HEADER(buf);
-
- last_modified(TSRMLS_C);
-}
-
-CACHE_LIMITER_FUNC(private)
-{
- ADD_HEADER("Expires: Thu, 19 Nov 1981 08:52:00 GMT");
- CACHE_LIMITER(private_no_expire)(TSRMLS_C);
-}
-
-CACHE_LIMITER_FUNC(nocache)
-{
- ADD_HEADER("Expires: Thu, 19 Nov 1981 08:52:00 GMT");
- /* For HTTP/1.1 conforming clients and the rest (MSIE 5) */
- ADD_HEADER("Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0");
- /* For HTTP/1.0 conforming clients */
- ADD_HEADER("Pragma: no-cache");
-}
-
-static php_session_cache_limiter_t php_session_cache_limiters[] = {
- CACHE_LIMITER_ENTRY(public)
- CACHE_LIMITER_ENTRY(private)
- CACHE_LIMITER_ENTRY(private_no_expire)
- CACHE_LIMITER_ENTRY(nocache)
- {0}
-};
-
-static int php_session_cache_limiter(TSRMLS_D)
-{
- php_session_cache_limiter_t *lim;
-
- if (PS(cache_limiter)[0] == '\0') return 0;
-
- if (SG(headers_sent)) {
- char *output_start_filename = php_get_output_start_filename(TSRMLS_C);
- int output_start_lineno = php_get_output_start_lineno(TSRMLS_C);
-
- if (output_start_filename) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Cannot send session cache limiter - headers already sent (output started at %s:%d)",
- output_start_filename, output_start_lineno);
- } else {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Cannot send session cache limiter - headers already sent");
- }
- return -2;
- }
-
- for (lim = php_session_cache_limiters; lim->name; lim++) {
- if (!strcasecmp(lim->name, PS(cache_limiter))) {
- lim->func(TSRMLS_C);
- return 0;
- }
- }
-
- return -1;
-}
-
-#define COOKIE_SET_COOKIE "Set-Cookie: "
-#define COOKIE_EXPIRES "; expires="
-#define COOKIE_PATH "; path="
-#define COOKIE_DOMAIN "; domain="
-#define COOKIE_SECURE "; secure"
-
-static void php_session_send_cookie(TSRMLS_D)
-{
- smart_str ncookie = {0};
- char *date_fmt = NULL;
-
- if (SG(headers_sent)) {
- char *output_start_filename = php_get_output_start_filename(TSRMLS_C);
- int output_start_lineno = php_get_output_start_lineno(TSRMLS_C);
-
- if (output_start_filename) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Cannot send session cookie - headers already sent by (output started at %s:%d)",
- output_start_filename, output_start_lineno);
- } else {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Cannot send session cookie - headers already sent");
- }
- return;
- }
-
- smart_str_appends(&ncookie, COOKIE_SET_COOKIE);
- smart_str_appends(&ncookie, PS(session_name));
- smart_str_appendc(&ncookie, '=');
- smart_str_appends(&ncookie, PS(id));
-
- if (PS(cookie_lifetime) > 0) {
- struct timeval tv;
- time_t t;
-
- gettimeofday(&tv, NULL);
- t = tv.tv_sec + PS(cookie_lifetime);
-
- if (t > 0) {
- date_fmt = php_std_date(t TSRMLS_CC);
- smart_str_appends(&ncookie, COOKIE_EXPIRES);
- smart_str_appends(&ncookie, date_fmt);
- efree(date_fmt);
- }
- }
-
- if (PS(cookie_path)[0]) {
- smart_str_appends(&ncookie, COOKIE_PATH);
- smart_str_appends(&ncookie, PS(cookie_path));
- }
-
- if (PS(cookie_domain)[0]) {
- smart_str_appends(&ncookie, COOKIE_DOMAIN);
- smart_str_appends(&ncookie, PS(cookie_domain));
- }
-
- if (PS(cookie_secure)) {
- smart_str_appends(&ncookie, COOKIE_SECURE);
- }
-
- smart_str_0(&ncookie);
-
- sapi_add_header_ex(ncookie.c, ncookie.len, 0, 0 TSRMLS_CC);
-}
-
-static ps_module *_php_find_ps_module(char *name TSRMLS_DC)
-{
- ps_module *ret = NULL;
- ps_module **mod;
- int i;
-
- for (i = 0, mod = ps_modules; i < MAX_MODULES; i++, mod++)
- if (*mod && !strcasecmp(name, (*mod)->s_name)) {
- ret = *mod;
- break;
- }
-
- return ret;
-}
-
-static const ps_serializer *_php_find_ps_serializer(char *name TSRMLS_DC)
-{
- const ps_serializer *ret = NULL;
- const ps_serializer *mod;
-
- for (mod = ps_serializers; mod->name; mod++)
- if (!strcasecmp(name, mod->name)) {
- ret = mod;
- break;
- }
-
- return ret;
-}
-
-#define PPID2SID \
- convert_to_string((*ppid)); \
- PS(id) = estrndup(Z_STRVAL_PP(ppid), Z_STRLEN_PP(ppid))
-
-static void php_session_reset_id(TSRMLS_D)
-{
- int module_number = PS(module_number);
-
- if (PS(use_cookies)) {
- php_session_send_cookie(TSRMLS_C);
- }
-
- /* if the SID constant exists, destroy it. */
- zend_hash_del(EG(zend_constants), "sid", sizeof("sid"));
-
- if (PS(define_sid)) {
- smart_str var = {0};
-
- smart_str_appends(&var, PS(session_name));
- smart_str_appendc(&var, '=');
- smart_str_appends(&var, PS(id));
- smart_str_0(&var);
- REGISTER_STRINGL_CONSTANT("SID", var.c, var.len, 0);
- } else {
- REGISTER_STRINGL_CONSTANT("SID", STR_EMPTY_ALLOC(), 0, 1);
- }
-
- if (PS(apply_trans_sid)) {
- php_url_scanner_reset_vars(TSRMLS_C);
- php_url_scanner_add_var(PS(session_name), strlen(PS(session_name)), PS(id), strlen(PS(id)), 1 TSRMLS_CC);
- }
-}
-
-PHPAPI void php_session_start(TSRMLS_D)
-{
- zval **ppid;
- zval **data;
- char *p;
- int nrand;
- int lensess;
-
- PS(apply_trans_sid) = PS(use_trans_sid);
-
- PS(define_sid) = 1;
- PS(send_cookie) = 1;
- if (PS(session_status) != php_session_none) {
- php_error(E_NOTICE, "A session had already been started - ignoring session_start()");
- return;
- }
-
- lensess = strlen(PS(session_name));
-
-
- /*
- * Cookies are preferred, because initially
- * cookie and get variables will be available.
- */
-
- if (!PS(id)) {
- if (zend_hash_find(&EG(symbol_table), "_COOKIE",
- sizeof("_COOKIE"), (void **) &data) == SUCCESS &&
- Z_TYPE_PP(data) == IS_ARRAY &&
- zend_hash_find(Z_ARRVAL_PP(data), PS(session_name),
- lensess + 1, (void **) &ppid) == SUCCESS) {
- PPID2SID;
- PS(apply_trans_sid) = 0;
- PS(send_cookie) = 0;
- PS(define_sid) = 0;
- }
-
- if (!PS(use_only_cookies) && !PS(id) &&
- zend_hash_find(&EG(symbol_table), "_GET",
- sizeof("_GET"), (void **) &data) == SUCCESS &&
- Z_TYPE_PP(data) == IS_ARRAY &&
- zend_hash_find(Z_ARRVAL_PP(data), PS(session_name),
- lensess + 1, (void **) &ppid) == SUCCESS) {
- PPID2SID;
- PS(send_cookie) = 0;
- }
-
- if (!PS(use_only_cookies) && !PS(id) &&
- zend_hash_find(&EG(symbol_table), "_POST",
- sizeof("_POST"), (void **) &data) == SUCCESS &&
- Z_TYPE_PP(data) == IS_ARRAY &&
- zend_hash_find(Z_ARRVAL_PP(data), PS(session_name),
- lensess + 1, (void **) &ppid) == SUCCESS) {
- PPID2SID;
- PS(send_cookie) = 0;
- }
- }
-
- /* check the REQUEST_URI symbol for a string of the form
- '<session-name>=<session-id>' to allow URLs of the form
- http://yoursite/<session-name>=<session-id>/script.php */
-
- if (!PS(use_only_cookies) && !PS(id) && PG(http_globals)[TRACK_VARS_SERVER] &&
- zend_hash_find(Z_ARRVAL_P(PG(http_globals)[TRACK_VARS_SERVER]), "REQUEST_URI",
- sizeof("REQUEST_URI"), (void **) &data) == SUCCESS &&
- Z_TYPE_PP(data) == IS_STRING &&
- (p = strstr(Z_STRVAL_PP(data), PS(session_name))) &&
- p[lensess] == '=') {
- char *q;
-
- p += lensess + 1;
- if ((q = strpbrk(p, "/?\\")))
- PS(id) = estrndup(p, q - p);
- }
-
- /* check whether the current request was referred to by
- an external site which invalidates the previously found id */
-
- if (PS(id) &&
- PS(extern_referer_chk)[0] != '\0' &&
- PG(http_globals)[TRACK_VARS_SERVER] &&
- zend_hash_find(Z_ARRVAL_P(PG(http_globals)[TRACK_VARS_SERVER]), "HTTP_REFERER",
- sizeof("HTTP_REFERER"), (void **) &data) == SUCCESS &&
- Z_TYPE_PP(data) == IS_STRING &&
- Z_STRLEN_PP(data) != 0 &&
- strstr(Z_STRVAL_PP(data), PS(extern_referer_chk)) == NULL) {
- efree(PS(id));
- PS(id) = NULL;
- PS(send_cookie) = 1;
- if (PS(use_trans_sid))
- PS(apply_trans_sid) = 1;
- }
-
- php_session_initialize(TSRMLS_C);
-
- if (!PS(use_cookies) && PS(send_cookie)) {
- if (PS(use_trans_sid))
- PS(apply_trans_sid) = 1;
- PS(send_cookie) = 0;
- }
-
- php_session_reset_id(TSRMLS_C);
-
- PS(session_status) = php_session_active;
-
- php_session_cache_limiter(TSRMLS_C);
-
- if (PS(mod_data) && PS(gc_probability) > 0) {
- int nrdels = -1;
-
- nrand = (int) ((float) PS(gc_divisor) * php_combined_lcg(TSRMLS_C));
- if (nrand < PS(gc_probability)) {
- PS(mod)->s_gc(&PS(mod_data), PS(gc_maxlifetime), &nrdels TSRMLS_CC);
-#if 0
- if (nrdels != -1)
- php_error_docref(NULL TSRMLS_CC, E_NOTICE, "purged %d expired session objects", nrdels);
-#endif
- }
- }
-}
-
-static zend_bool php_session_destroy(TSRMLS_D)
-{
- zend_bool retval = SUCCESS;
-
- if (PS(session_status) != php_session_active) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Trying to destroy uninitialized session");
- return FAILURE;
- }
-
- if (PS(mod)->s_destroy(&PS(mod_data), PS(id) TSRMLS_CC) == FAILURE) {
- retval = FAILURE;
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Session object destruction failed");
- }
-
- php_rshutdown_session_globals(TSRMLS_C);
- php_rinit_session_globals(TSRMLS_C);
-
- return retval;
-}
-
-
-/* {{{ proto void session_set_cookie_params(int lifetime [, string path [, string domain [, bool secure]]])
- Set session cookie parameters */
-PHP_FUNCTION(session_set_cookie_params)
-{
- zval **lifetime, **path, **domain, **secure;
-
- if (!PS(use_cookies))
- return;
-
- if (ZEND_NUM_ARGS() < 1 || ZEND_NUM_ARGS() > 4 ||
- zend_get_parameters_ex(ZEND_NUM_ARGS(), &lifetime, &path, &domain, &secure) == FAILURE)
- WRONG_PARAM_COUNT;
-
- convert_to_string_ex(lifetime);
- zend_alter_ini_entry("session.cookie_lifetime", sizeof("session.cookie_lifetime"), Z_STRVAL_PP(lifetime), Z_STRLEN_PP(lifetime), PHP_INI_USER, PHP_INI_STAGE_RUNTIME);
-
- if (ZEND_NUM_ARGS() > 1) {
- convert_to_string_ex(path);
- zend_alter_ini_entry("session.cookie_path", sizeof("session.cookie_path"), Z_STRVAL_PP(path), Z_STRLEN_PP(path), PHP_INI_USER, PHP_INI_STAGE_RUNTIME);
-
- if (ZEND_NUM_ARGS() > 2) {
- convert_to_string_ex(domain);
- zend_alter_ini_entry("session.cookie_domain", sizeof("session.cookie_domain"), Z_STRVAL_PP(domain), Z_STRLEN_PP(domain), PHP_INI_USER, PHP_INI_STAGE_RUNTIME);
- if (ZEND_NUM_ARGS() > 3) {
- convert_to_long_ex(secure);
- zend_alter_ini_entry("session.cookie_secure", sizeof("session.cookie_secure"), Z_BVAL_PP(secure)?"1":"0", 1, PHP_INI_USER, PHP_INI_STAGE_RUNTIME);
- }
- }
- }
-}
-/* }}} */
-
-/* {{{ proto array session_get_cookie_params(void)
- Return the session cookie parameters */
-PHP_FUNCTION(session_get_cookie_params)
-{
- if (ZEND_NUM_ARGS() != 0) {
- WRONG_PARAM_COUNT;
- }
-
- array_init(return_value);
-
- add_assoc_long(return_value, "lifetime", PS(cookie_lifetime));
- add_assoc_string(return_value, "path", PS(cookie_path), 1);
- add_assoc_string(return_value, "domain", PS(cookie_domain), 1);
- add_assoc_bool(return_value, "secure", PS(cookie_secure));
-}
-/* }}} */
-
-/* {{{ proto string session_name([string newname])
- Return the current session name. If newname is given, the session name is replaced with newname */
-PHP_FUNCTION(session_name)
-{
- zval **p_name;
- int ac = ZEND_NUM_ARGS();
- char *old;
-
- if (ac < 0 || ac > 1 || zend_get_parameters_ex(ac, &p_name) == FAILURE)
- WRONG_PARAM_COUNT;
-
- old = estrdup(PS(session_name));
-
- if (ac == 1) {
- convert_to_string_ex(p_name);
- zend_alter_ini_entry("session.name", sizeof("session.name"), Z_STRVAL_PP(p_name), Z_STRLEN_PP(p_name), PHP_INI_USER, PHP_INI_STAGE_RUNTIME);
- }
-
- RETVAL_STRING(old, 0);
-}
-/* }}} */
-
-/* {{{ proto string session_module_name([string newname])
- Return the current module name used for accessing session data. If newname is given, the module name is replaced with newname */
-PHP_FUNCTION(session_module_name)
-{
- zval **p_name;
- int ac = ZEND_NUM_ARGS();
-
- if (ac < 0 || ac > 1 || zend_get_parameters_ex(ac, &p_name) == FAILURE)
- WRONG_PARAM_COUNT;
-
- if (ac == 1) {
- convert_to_string_ex(p_name);
- if (!_php_find_ps_module(Z_STRVAL_PP(p_name) TSRMLS_CC)) {
- php_error_docref(NULL TSRMLS_CC, E_ERROR, "Cannot find named PHP session module (%s)",
- Z_STRVAL_PP(p_name));
- RETURN_FALSE;
- }
- if (PS(mod_data)) {
- PS(mod)->s_close(&PS(mod_data) TSRMLS_CC);
- }
- PS(mod_data) = NULL;
-
- RETVAL_STRING(safe_estrdup(PS(mod)->s_name), 0);
-
- zend_alter_ini_entry("session.save_handler", sizeof("session.save_handler"), Z_STRVAL_PP(p_name), Z_STRLEN_PP(p_name), PHP_INI_USER, PHP_INI_STAGE_RUNTIME);
- } else {
- RETURN_STRING(safe_estrdup(PS(mod)->s_name), 0);
- }
-}
-/* }}} */
-
-/* {{{ proto void session_set_save_handler(string open, string close, string read, string write, string destroy, string gc)
- Sets user-level functions */
-PHP_FUNCTION(session_set_save_handler)
-{
- zval **args[6];
- int i;
- ps_user *mdata;
-
- if (ZEND_NUM_ARGS() != 6 || zend_get_parameters_array_ex(6, args) == FAILURE)
- WRONG_PARAM_COUNT;
-
- if (PS(session_status) != php_session_none)
- RETURN_FALSE;
-
- zend_alter_ini_entry("session.save_handler", sizeof("session.save_handler"), "user", sizeof("user")-1, PHP_INI_USER, PHP_INI_STAGE_RUNTIME);
-
- mdata = emalloc(sizeof(*mdata));
-
- for (i = 0; i < 6; i++) {
- ZVAL_ADDREF(*args[i]);
- mdata->names[i] = *args[i];
- }
-
- PS(mod_data) = (void *) mdata;
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto string session_save_path([string newname])
- Return the current save path passed to module_name. If newname is given, the save path is replaced with newname */
-PHP_FUNCTION(session_save_path)
-{
- zval **p_name;
- int ac = ZEND_NUM_ARGS();
- char *old;
-
- if (ac < 0 || ac > 1 || zend_get_parameters_ex(ac, &p_name) == FAILURE)
- WRONG_PARAM_COUNT;
-
- old = estrdup(PS(save_path));
-
- if (ac == 1) {
- convert_to_string_ex(p_name);
- zend_alter_ini_entry("session.save_path", sizeof("session.save_path"), Z_STRVAL_PP(p_name), Z_STRLEN_PP(p_name), PHP_INI_USER, PHP_INI_STAGE_RUNTIME);
- }
-
- RETVAL_STRING(old, 0);
-}
-/* }}} */
-
-/* {{{ proto string session_id([string newid])
- Return the current session id. If newid is given, the session id is replaced with newid */
-PHP_FUNCTION(session_id)
-{
- zval **p_name;
- int ac = ZEND_NUM_ARGS();
- char *old;
-
- if (ac < 0 || ac > 1 || zend_get_parameters_ex(ac, &p_name) == FAILURE)
- WRONG_PARAM_COUNT;
-
- if (PS(id)) {
- old = estrdup(PS(id));
- } else {
- old = STR_EMPTY_ALLOC();
- }
-
- if (ac == 1) {
- convert_to_string_ex(p_name);
- if (PS(id)) efree(PS(id));
- PS(id) = estrndup(Z_STRVAL_PP(p_name), Z_STRLEN_PP(p_name));
- }
-
- RETVAL_STRING(old, 0);
-}
-/* }}} */
-
-/* {{{ proto bool session_regenerate_id()
- Update the current session id with a newly generated one. */
-PHP_FUNCTION(session_regenerate_id)
-{
- if (PS(session_status) == php_session_active) {
- if (PS(id)) efree(PS(id));
-
- PS(id) = PS(mod)->s_create_sid(&PS(mod_data), NULL TSRMLS_CC);
-
- php_session_reset_id(TSRMLS_C);
-
- RETURN_TRUE;
- }
- RETURN_FALSE;
-}
-/* }}} */
-
-/* {{{ proto string session_cache_limiter([string new_cache_limiter])
- Return the current cache limiter. If new_cache_limited is given, the current cache_limiter is replaced with new_cache_limiter */
-PHP_FUNCTION(session_cache_limiter)
-{
- zval **p_cache_limiter;
- int ac = ZEND_NUM_ARGS();
- char *old;
-
- if (ac < 0 || ac > 1 || zend_get_parameters_ex(ac, &p_cache_limiter) == FAILURE)
- WRONG_PARAM_COUNT;
-
- old = estrdup(PS(cache_limiter));
-
- if (ac == 1) {
- convert_to_string_ex(p_cache_limiter);
- zend_alter_ini_entry("session.cache_limiter", sizeof("session.cache_limiter"), Z_STRVAL_PP(p_cache_limiter), Z_STRLEN_PP(p_cache_limiter), PHP_INI_USER, PHP_INI_STAGE_RUNTIME);
- }
-
- RETVAL_STRING(old, 0);
-}
-/* }}} */
-
-/* {{{ proto int session_cache_expire([int new_cache_expire])
- Return the current cache expire. If new_cache_expire is given, the current cache_expire is replaced with new_cache_expire */
-PHP_FUNCTION(session_cache_expire)
-{
- zval **p_cache_expire;
- int ac = ZEND_NUM_ARGS();
- long old;
-
- old = PS(cache_expire);
-
- if (ac < 0 || ac > 1 || zend_get_parameters_ex(ac, &p_cache_expire) == FAILURE)
- WRONG_PARAM_COUNT;
-
- if (ac == 1) {
- convert_to_long_ex(p_cache_expire);
- PS(cache_expire) = Z_LVAL_PP(p_cache_expire);
- }
-
- RETVAL_LONG(old);
-}
-/* }}} */
-
-/* {{{ static void php_register_var(zval** entry TSRMLS_DC) */
-static void php_register_var(zval** entry TSRMLS_DC)
-{
- zval **value;
-
- if (Z_TYPE_PP(entry) == IS_ARRAY) {
- zend_hash_internal_pointer_reset(Z_ARRVAL_PP(entry));
-
- while (zend_hash_get_current_data(Z_ARRVAL_PP(entry), (void**)&value) == SUCCESS) {
- php_register_var(value TSRMLS_CC);
- zend_hash_move_forward(Z_ARRVAL_PP(entry));
- }
- } else {
- convert_to_string_ex(entry);
-
- if ((strcmp(Z_STRVAL_PP(entry), "HTTP_SESSION_VARS") != 0) &&
- (strcmp(Z_STRVAL_PP(entry), "_SESSION") != 0)) {
- PS_ADD_VARL(Z_STRVAL_PP(entry), Z_STRLEN_PP(entry));
- }
- }
-}
-/* }}} */
-
-/* {{{ proto bool session_register(mixed var_names [, mixed ...])
- Adds varname(s) to the list of variables which are freezed at the session end */
-PHP_FUNCTION(session_register)
-{
- zval ***args;
- int argc = ZEND_NUM_ARGS();
- int i;
-
- if (argc <= 0)
- RETURN_FALSE
- else
- args = (zval ***)safe_emalloc(argc, sizeof(zval **), 0);
-
- if (zend_get_parameters_array_ex(argc, args) == FAILURE) {
- efree(args);
- WRONG_PARAM_COUNT;
- }
-
- if (PS(session_status) == php_session_none)
- php_session_start(TSRMLS_C);
-
- for (i = 0; i < argc; i++) {
- if (Z_TYPE_PP(args[i]) == IS_ARRAY)
- SEPARATE_ZVAL(args[i]);
- php_register_var(args[i] TSRMLS_CC);
- }
-
- efree(args);
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto bool session_unregister(string varname)
- Removes varname from the list of variables which are freezed at the session end */
-PHP_FUNCTION(session_unregister)
-{
- zval **p_name;
- int ac = ZEND_NUM_ARGS();
-
- if (ac != 1 || zend_get_parameters_ex(ac, &p_name) == FAILURE)
- WRONG_PARAM_COUNT;
-
- convert_to_string_ex(p_name);
-
- PS_DEL_VARL(Z_STRVAL_PP(p_name), Z_STRLEN_PP(p_name));
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto bool session_is_registered(string varname)
- Checks if a variable is registered in session */
-PHP_FUNCTION(session_is_registered)
-{
- zval **p_name;
- zval *p_var;
- int ac = ZEND_NUM_ARGS();
-
- if (ac != 1 || zend_get_parameters_ex(ac, &p_name) == FAILURE)
- WRONG_PARAM_COUNT;
-
- convert_to_string_ex(p_name);
-
- if (PS(session_status) == php_session_none)
- RETURN_FALSE;
-
- IF_SESSION_VARS() {
- if (zend_hash_find(Z_ARRVAL_P(PS(http_session_vars)),
- Z_STRVAL_PP(p_name), Z_STRLEN_PP(p_name)+1,
- (void **)&p_var) == SUCCESS) {
- RETURN_TRUE;
- }
- }
- RETURN_FALSE;
-}
-/* }}} */
-
-/* {{{ proto string session_encode(void)
- Serializes the current setup and returns the serialized representation */
-PHP_FUNCTION(session_encode)
-{
- int len;
- char *enc;
-
- if (ZEND_NUM_ARGS() != 0) {
- WRONG_PARAM_COUNT;
- }
-
- enc = php_session_encode(&len TSRMLS_CC);
- if (enc == NULL) {
- RETURN_FALSE;
- }
-
- RETVAL_STRINGL(enc, len, 0);
-}
-/* }}} */
-
-/* {{{ proto bool session_decode(string data)
- Deserializes data and reinitializes the variables */
-PHP_FUNCTION(session_decode)
-{
- zval **str;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &str) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- if (PS(session_status) == php_session_none) {
- RETURN_FALSE;
- }
-
- convert_to_string_ex(str);
-
- php_session_decode(Z_STRVAL_PP(str), Z_STRLEN_PP(str) TSRMLS_CC);
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto bool session_start(void)
- Begin session - reinitializes freezed variables, registers browsers etc */
-PHP_FUNCTION(session_start)
-{
- /* skipping check for non-zero args for performance reasons here ?*/
- php_session_start(TSRMLS_C);
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto bool session_destroy(void)
- Destroy the current session and all data associated with it */
-PHP_FUNCTION(session_destroy)
-{
- if (ZEND_NUM_ARGS() != 0) {
- WRONG_PARAM_COUNT;
- }
-
- if (php_session_destroy(TSRMLS_C) == SUCCESS) {
- RETURN_TRUE;
- } else {
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-
-/* {{{ proto void session_unset(void)
- Unset all registered variables */
-PHP_FUNCTION(session_unset)
-{
- if (PS(session_status) == php_session_none)
- RETURN_FALSE;
-
- IF_SESSION_VARS() {
- HashTable *ht = Z_ARRVAL_P(PS(http_session_vars));
-
- if (PG(register_globals)) {
- uint str_len;
- char *str;
- ulong num_key;
- HashPosition pos;
-
- zend_hash_internal_pointer_reset_ex(ht, &pos);
-
- while (zend_hash_get_current_key_ex(ht, &str, &str_len, &num_key,
- 0, &pos) == HASH_KEY_IS_STRING) {
- zend_hash_del(&EG(symbol_table), str, str_len);
- zend_hash_move_forward_ex(ht, &pos);
- }
- }
-
- /* Clean $_SESSION. */
- zend_hash_clean(ht);
- }
-}
-/* }}} */
-
-PHPAPI void session_adapt_url(const char *url, size_t urllen, char **new, size_t *newlen TSRMLS_DC)
-{
- if (PS(apply_trans_sid) && (PS(session_status) == php_session_active)) {
- *new = php_url_scanner_adapt_single_url(url, urllen, PS(session_name), PS(id), newlen TSRMLS_CC);
- }
-}
-
-static void php_rinit_session_globals(TSRMLS_D)
-{
- PS(id) = NULL;
- PS(session_status) = php_session_none;
- PS(mod_data) = NULL;
- PS(http_session_vars) = NULL;
-}
-
-static void php_rshutdown_session_globals(TSRMLS_D)
-{
- if (PS(mod_data)) {
- PS(mod)->s_close(&PS(mod_data) TSRMLS_CC);
- }
- if (PS(id)) {
- efree(PS(id));
- }
-}
-
-
-PHP_RINIT_FUNCTION(session)
-{
- php_rinit_session_globals(TSRMLS_C);
-
- if (PS(mod) == NULL) {
- char *value;
-
- value = zend_ini_string("session.save_handler", sizeof("session.save_handler"), 0);
- if (value) {
- PS(mod) = _php_find_ps_module(value TSRMLS_CC);
- }
-
- if (!PS(mod)) {
- /* current status is unusable */
- PS(session_status) = php_session_disabled;
- return SUCCESS;
- }
- }
-
- if (PS(auto_start)) {
- php_session_start(TSRMLS_C);
- }
-
- return SUCCESS;
-}
-
-static void php_session_flush(TSRMLS_D)
-{
- if(PS(session_status)==php_session_active) {
- php_session_save_current_state(TSRMLS_C);
- PS(session_status)=php_session_none;
- }
-}
-
-/* {{{ proto void session_write_close(void)
- Write session data and end session */
-PHP_FUNCTION(session_write_close)
-{
- php_session_flush(TSRMLS_C);
-}
-
-PHP_RSHUTDOWN_FUNCTION(session)
-{
- php_session_flush(TSRMLS_C);
- php_rshutdown_session_globals(TSRMLS_C);
- return SUCCESS;
-}
-/* }}} */
-
-static void php_minit_session_globals(php_ps_globals *ps_globals)
-{
- ps_globals->save_path = NULL;
- ps_globals->session_name = NULL;
- ps_globals->id = NULL;
- ps_globals->mod = NULL;
- ps_globals->mod_data = NULL;
- ps_globals->session_status = php_session_none;
- ps_globals->http_session_vars = NULL;
-}
-
-PHP_MINIT_FUNCTION(session)
-{
-#ifdef ZTS
- php_ps_globals *ps_globals;
-
- ts_allocate_id(&ps_globals_id, sizeof(php_ps_globals), (ts_allocate_ctor) php_minit_session_globals, NULL);
- ps_globals = ts_resource(ps_globals_id);
-#else
- php_minit_session_globals(&ps_globals);
-#endif
-
- zend_register_auto_global("_SESSION", sizeof("_SESSION")-1, NULL TSRMLS_CC);
-
- PS(module_number) = module_number; /* if we really need this var we need to init it in zts mode as well! */
-
- PS(session_status) = php_session_none;
- REGISTER_INI_ENTRIES();
-
-#ifdef HAVE_LIBMM
- PHP_MINIT(ps_mm) (INIT_FUNC_ARGS_PASSTHRU);
-#endif
- return SUCCESS;
-}
-
-PHP_MSHUTDOWN_FUNCTION(session)
-{
- UNREGISTER_INI_ENTRIES();
-
-#ifdef HAVE_LIBMM
- PHP_MSHUTDOWN(ps_mm) (SHUTDOWN_FUNC_ARGS_PASSTHRU);
-#endif
-
- return SUCCESS;
-}
-
-
-PHP_MINFO_FUNCTION(session)
-{
- ps_module **mod;
- ps_serializer *ser;
- smart_str save_handlers = {0};
- smart_str ser_handlers = {0};
- int i;
-
- /* Get save handlers */
- for (i = 0, mod = ps_modules; i < MAX_MODULES; i++, mod++) {
- if (*mod && (*mod)->s_name) {
- smart_str_appends(&save_handlers, (*mod)->s_name);
- smart_str_appendc(&save_handlers, ' ');
- }
- }
-
- /* Get serializer handlers */
- for (i = 0, ser = ps_serializers; i < MAX_SERIALIZERS; i++, ser++) {
- if (ser && ser->name) {
- smart_str_appends(&ser_handlers, ser->name);
- smart_str_appendc(&ser_handlers, ' ');
- }
- }
-
- php_info_print_table_start();
- php_info_print_table_row(2, "Session Support", "enabled" );
-
- if (save_handlers.c) {
- smart_str_0(&save_handlers);
- php_info_print_table_row(2, "Registered save handlers", save_handlers.c);
- smart_str_free(&save_handlers);
- } else {
- php_info_print_table_row(2, "Registered save handlers", "none");
- }
-
- if (ser_handlers.c) {
- smart_str_0(&ser_handlers);
- php_info_print_table_row(2, "Registered serializer handlers", ser_handlers.c);
- smart_str_free(&ser_handlers);
- } else {
- php_info_print_table_row(2, "Registered serializer handlers", "none");
- }
-
- php_info_print_table_end();
-
- DISPLAY_INI_ENTRIES();
-}
-
-
-/*
- * 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/session/tests/001.phpt b/ext/session/tests/001.phpt
deleted file mode 100644
index 75d5df1632..0000000000
--- a/ext/session/tests/001.phpt
+++ /dev/null
@@ -1,33 +0,0 @@
---TEST--
-session object serialization
---SKIPIF--
-<?php include('skipif.inc'); ?>
---INI--
-session.use_cookies=0
-session.cache_limiter=
-register_globals=1
-session.serialize_handler=php
---FILE--
-<?php
-error_reporting(E_ALL);
-
-class foo {
- public $bar = "ok";
-
- function method() { $this->yes = "done"; }
-}
-
-$baz = new foo;
-$baz->method();
-
-$arr[3] = new foo;
-$arr[3]->method();
-
-session_register("baz");
-session_register("arr");
-
-print session_encode()."\n";
-
-session_destroy();
---EXPECT--
-baz|O:3:"foo":2:{s:3:"bar";s:2:"ok";s:3:"yes";s:4:"done";}arr|a:1:{i:3;O:3:"foo":2:{s:3:"bar";s:2:"ok";s:3:"yes";s:4:"done";}}
diff --git a/ext/session/tests/002.phpt b/ext/session/tests/002.phpt
deleted file mode 100644
index 6fff01e773..0000000000
--- a/ext/session/tests/002.phpt
+++ /dev/null
@@ -1,11 +0,0 @@
---TEST--
-session_unset() without a initialized session
---SKIPIF--
-<?php include('skipif.inc'); ?>
---FILE--
-<?php
-error_reporting(E_ALL);
-session_unset();
-print "ok\n";
---EXPECT--
-ok
diff --git a/ext/session/tests/003.phpt b/ext/session/tests/003.phpt
deleted file mode 100644
index fed90902cd..0000000000
--- a/ext/session/tests/003.phpt
+++ /dev/null
@@ -1,44 +0,0 @@
---TEST--
-session object deserialization
---SKIPIF--
-<?php include('skipif.inc'); ?>
---INI--
-session.use_cookies=0
-session.cache_limiter=
-register_globals=1
-session.serialize_handler=php
---FILE--
-<?php
-error_reporting(E_ALL);
-
-class foo {
- public $bar = "ok";
- function method() { $this->yes++; }
-}
-
-session_id("abtest");
-session_start();
-session_decode('baz|O:3:"foo":2:{s:3:"bar";s:2:"ok";s:3:"yes";i:1;}arr|a:1:{i:3;O:3:"foo":2:{s:3:"bar";s:2:"ok";s:3:"yes";i:1;}}');
-
-$baz->method();
-$arr[3]->method();
-
-var_dump($baz);
-var_dump($arr);
-session_destroy();
---EXPECT--
-object(foo)#1 (2) {
- ["bar"]=>
- string(2) "ok"
- ["yes"]=>
- int(2)
-}
-array(1) {
- [3]=>
- object(foo)#2 (2) {
- ["bar"]=>
- string(2) "ok"
- ["yes"]=>
- int(2)
- }
-}
diff --git a/ext/session/tests/004.phpt b/ext/session/tests/004.phpt
deleted file mode 100644
index 2040476bc0..0000000000
--- a/ext/session/tests/004.phpt
+++ /dev/null
@@ -1,111 +0,0 @@
---TEST--
-session_set_save_handler test
---SKIPIF--
-<?php include('skipif.inc'); ?>
---INI--
-session.use_cookies=0
-session.cache_limiter=
-register_globals=1
-session.name=PHPSESSID
-session.serialize_handler=php
---FILE--
-<?php
-error_reporting(E_ALL);
-
-class handler {
- public $data = 'baz|O:3:"foo":2:{s:3:"bar";s:2:"ok";s:3:"yes";i:1;}arr|a:1:{i:3;O:3:"foo":2:{s:3:"bar";s:2:"ok";s:3:"yes";i:1;}}';
- function open($save_path, $session_name)
- {
- print "OPEN: $session_name\n";
- return true;
- }
- function close()
- {
- return true;
- }
- function read($key)
- {
- print "READ: $key\n";
- return $GLOBALS["hnd"]->data;
- }
-
- function write($key, $val)
- {
- print "WRITE: $key, $val\n";
- $GLOBALS["hnd"]->data = $val;
- return true;
- }
-
- function destroy($key)
- {
- print "DESTROY: $key\n";
- return true;
- }
-
- function gc() { return true; }
-}
-
-$hnd = new handler;
-
-class foo {
- public $bar = "ok";
- function method() { $this->yes++; }
-}
-
-session_set_save_handler(array($hnd, "open"), array($hnd, "close"), array($hnd, "read"), array($hnd, "write"), array($hnd, "destroy"), array($hnd, "gc"));
-
-session_id("abtest");
-session_start();
-$baz->method();
-$arr[3]->method();
-
-var_dump($baz);
-var_dump($arr);
-
-session_write_close();
-
-session_set_save_handler(array($hnd, "open"), array($hnd, "close"), array($hnd, "read"), array($hnd, "write"), array($hnd, "destroy"), array($hnd, "gc"));
-session_start();
-
-var_dump($baz);
-var_dump($arr);
-
-session_destroy();
-?>
---EXPECT--
-OPEN: PHPSESSID
-READ: abtest
-object(foo)#2 (2) {
- ["bar"]=>
- string(2) "ok"
- ["yes"]=>
- int(2)
-}
-array(1) {
- [3]=>
- object(foo)#3 (2) {
- ["bar"]=>
- string(2) "ok"
- ["yes"]=>
- int(2)
- }
-}
-WRITE: abtest, baz|O:3:"foo":2:{s:3:"bar";s:2:"ok";s:3:"yes";i:2;}arr|a:1:{i:3;O:3:"foo":2:{s:3:"bar";s:2:"ok";s:3:"yes";i:2;}}
-OPEN: PHPSESSID
-READ: abtest
-object(foo)#4 (2) {
- ["bar"]=>
- string(2) "ok"
- ["yes"]=>
- int(2)
-}
-array(1) {
- [3]=>
- object(foo)#2 (2) {
- ["bar"]=>
- string(2) "ok"
- ["yes"]=>
- int(2)
- }
-}
-DESTROY: abtest
diff --git a/ext/session/tests/005.phpt b/ext/session/tests/005.phpt
deleted file mode 100644
index 5638376b9d..0000000000
--- a/ext/session/tests/005.phpt
+++ /dev/null
@@ -1,146 +0,0 @@
---TEST--
-custom save handler, multiple session_start()s, complex data structure test.
---SKIPIF--
-<?php include('skipif.inc'); ?>
---INI--
-session.use_cookies=0
-session.cache_limiter=
-register_globals=1
-session.name=PHPSESSID
-session.serialize_handler=php
---FILE--
-<?php
-
-error_reporting(E_ALL);
-
-class handler {
- public $data = 'baz|O:3:"foo":2:{s:3:"bar";s:2:"ok";s:3:"yes";i:1;}arr|a:1:{i:3;O:3:"foo":2:{s:3:"bar";s:2:"ok";s:3:"yes";i:1;}}';
- function open($save_path, $session_name)
- {
- print "OPEN: $session_name\n";
- return true;
- }
- function close()
- {
- print "CLOSE\n";
- return true;
- }
- function read($key)
- {
- print "READ: $key\n";
- return $GLOBALS["hnd"]->data;
- }
-
- function write($key, $val)
- {
- print "WRITE: $key, $val\n";
- $GLOBALS["hnd"]->data = $val;
- return true;
- }
-
- function destroy($key)
- {
- print "DESTROY: $key\n";
- return true;
- }
-
- function gc() { return true; }
-}
-
-$hnd = new handler;
-
-class foo {
- public $bar = "ok";
- function method() { $this->yes++; }
-}
-
-session_set_save_handler(array($hnd, "open"), array($hnd, "close"), array($hnd, "read"), array($hnd, "write"), array($hnd, "destroy"), array($hnd, "gc"));
-
-session_id("abtest");
-session_start();
-$baz->method();
-$arr[3]->method();
-
-var_dump($baz);
-var_dump($arr);
-
-session_write_close();
-
-session_set_save_handler(array($hnd, "open"), array($hnd, "close"), array($hnd, "read"), array($hnd, "write"), array($hnd, "destroy"), array($hnd, "gc"));
-session_start();
-$baz->method();
-$arr[3]->method();
-
-
-$c = 123;
-session_register("c");
-var_dump($baz); var_dump($arr); var_dump($c);
-
-session_write_close();
-
-session_set_save_handler(array($hnd, "open"), array($hnd, "close"), array($hnd, "read"), array($hnd, "write"), array($hnd, "destroy"), array($hnd, "gc"));
-session_start();
-var_dump($baz); var_dump($arr); var_dump($c);
-
-session_destroy();
-?>
---EXPECT--
-OPEN: PHPSESSID
-READ: abtest
-object(foo)#2 (2) {
- ["bar"]=>
- string(2) "ok"
- ["yes"]=>
- int(2)
-}
-array(1) {
- [3]=>
- object(foo)#3 (2) {
- ["bar"]=>
- string(2) "ok"
- ["yes"]=>
- int(2)
- }
-}
-WRITE: abtest, baz|O:3:"foo":2:{s:3:"bar";s:2:"ok";s:3:"yes";i:2;}arr|a:1:{i:3;O:3:"foo":2:{s:3:"bar";s:2:"ok";s:3:"yes";i:2;}}
-CLOSE
-OPEN: PHPSESSID
-READ: abtest
-object(foo)#4 (2) {
- ["bar"]=>
- string(2) "ok"
- ["yes"]=>
- int(3)
-}
-array(1) {
- [3]=>
- object(foo)#2 (2) {
- ["bar"]=>
- string(2) "ok"
- ["yes"]=>
- int(3)
- }
-}
-int(123)
-WRITE: abtest, baz|O:3:"foo":2:{s:3:"bar";s:2:"ok";s:3:"yes";i:3;}arr|a:1:{i:3;O:3:"foo":2:{s:3:"bar";s:2:"ok";s:3:"yes";i:3;}}c|i:123;
-CLOSE
-OPEN: PHPSESSID
-READ: abtest
-object(foo)#3 (2) {
- ["bar"]=>
- string(2) "ok"
- ["yes"]=>
- int(3)
-}
-array(1) {
- [3]=>
- object(foo)#4 (2) {
- ["bar"]=>
- string(2) "ok"
- ["yes"]=>
- int(3)
- }
-}
-int(123)
-DESTROY: abtest
-CLOSE
diff --git a/ext/session/tests/006.phpt b/ext/session/tests/006.phpt
deleted file mode 100644
index fb355976fb..0000000000
--- a/ext/session/tests/006.phpt
+++ /dev/null
@@ -1,70 +0,0 @@
---TEST--
-correct instantiation of references between variables in sessions
---SKIPIF--
-<?php include('skipif.inc'); ?>
---INI--
-session.use_cookies=0
-session.cache_limiter=
-register_globals=1
-session.serialize_handler=php
---FILE--
-<?php
-error_reporting(E_ALL);
-
-session_id("abtest");
-session_start();
-
-class a {
- public $test = "hallo";
-}
-
-class b {
- public $a;
- function b(&$a) {
- $this->a = &$a;
- }
-}
-
-$a = new a();
-$b = new b($a);
-
-echo "original values:\n";
-var_dump($a,$b);
-
-session_register("a");
-session_register("b");
-session_write_close();
-
-session_unregister("a");
-session_unregister("b");
-
-session_start();
-
-echo "values after session:\n";
-var_dump($a,$b);
-?>
---EXPECTF--
-original values:
-object(a)#%d (1) {
- ["test"]=>
- string(5) "hallo"
-}
-object(b)#%d (1) {
- ["a"]=>
- &object(a)#%d (1) {
- ["test"]=>
- string(5) "hallo"
- }
-}
-values after session:
-object(a)#%d (1) {
- ["test"]=>
- string(5) "hallo"
-}
-object(b)#%d (1) {
- ["a"]=>
- &object(a)#%d (1) {
- ["test"]=>
- string(5) "hallo"
- }
-} \ No newline at end of file
diff --git a/ext/session/tests/007.phpt b/ext/session/tests/007.phpt
deleted file mode 100644
index 7e13ab27e3..0000000000
--- a/ext/session/tests/007.phpt
+++ /dev/null
@@ -1,59 +0,0 @@
---TEST--
-bug compatibility: unset($c) with enabled register_globals
---SKIPIF--
-<?php include('skipif.inc'); ?>
---INI--
-session.use_cookies=0
-session.cache_limiter=
-register_globals=1
-session.bug_compat_42=1
-session.serialize_handler=php
---FILE--
-<?php
-error_reporting(E_ALL);
-
-session_id("abtest");
-
-### Phase 1 cleanup
-session_start();
-session_destroy();
-
-### Phase 2 $HTTP_SESSION_VARS["c"] does not contain any value
-session_id("abtest");
-session_register("c");
-unset($c);
-$c = 3.14;
-session_write_close();
-unset($HTTP_SESSION_VARS);
-unset($c);
-
-### Phase 3 $HTTP_SESSION_VARS["c"] is set
-session_start();
-var_dump($c);
-var_dump($HTTP_SESSION_VARS);
-unset($c);
-$c = 2.78;
-
-session_write_close();
-unset($HTTP_SESSION_VARS);
-unset($c);
-
-### Phase 4 final
-
-session_start();
-var_dump($c);
-var_dump($HTTP_SESSION_VARS);
-
-session_destroy();
-?>
---EXPECT--
-float(3.14)
-array(1) {
- ["c"]=>
- &float(3.14)
-}
-float(3.14)
-array(1) {
- ["c"]=>
- &float(3.14)
-}
diff --git a/ext/session/tests/008-php4.2.3.phpt b/ext/session/tests/008-php4.2.3.phpt
deleted file mode 100644
index 2785ddc2e8..0000000000
--- a/ext/session/tests/008-php4.2.3.phpt
+++ /dev/null
@@ -1,68 +0,0 @@
---TEST--
-bug compatibility: global is used albeit register_globals=0
---SKIPIF--
-<?php include('skipif.inc');
- if (version_compare(PHP_VERSION,"4.2.3-dev", "<")) die("skip this is for PHP >= 4.2.3");
-?>
---INI--
-session.use_cookies=0
-session.cache_limiter=
-register_globals=0
-session.bug_compat_42=1
-session.bug_compat_warn=1
-track_errors=1
-log_errors=0
-html_errors=0
-display_errors=1
-error_reporting=2039;
-session.serialize_handler=php
---FILE--
-<?php
-session_id("abtest");
-
-### Phase 1 cleanup
-session_start();
-session_destroy();
-
-### Phase 2 $HTTP_SESSION_VARS["c"] does not contain any value
-session_id("abtest");
-session_register("c");
-var_dump($c);
-unset($c);
-$c = 3.14;
-@session_write_close(); // this generates an E_WARNING which will be printed
-// by $php_errormsg so we can use "@" here. ANY further message IS an error.
-echo $php_errormsg."\n";
-unset($HTTP_SESSION_VARS);
-unset($c);
-
-### Phase 3 $HTTP_SESSION_VARS["c"] is set
-session_start();
-var_dump($HTTP_SESSION_VARS);
-unset($c);
-$c = 2.78;
-
-session_write_close();
-unset($HTTP_SESSION_VARS);
-unset($c);
-
-### Phase 4 final
-
-session_start();
-var_dump($c);
-var_dump($HTTP_SESSION_VARS);
-
-session_destroy();
-?>
---EXPECTF--
-NULL
-Your script possibly relies on a session side-effect which existed until PHP 4.2.3. Please be advised that the session extension does not consider global variables as a source of data, unless register_globals is enabled. You can disable this functionality and this warning by setting session.bug_compat_42 or session.bug_compat_warn to off, respectively.
-array(1) {
- ["c"]=>
- float(3.14)
-}
-NULL
-array(1) {
- ["c"]=>
- float(3.14)
-}
diff --git a/ext/session/tests/008.phpt b/ext/session/tests/008.phpt
deleted file mode 100644
index 044a6f2536..0000000000
--- a/ext/session/tests/008.phpt
+++ /dev/null
@@ -1,61 +0,0 @@
---TEST--
-bug compatibility: global is used albeit register_globals=0
---SKIPIF--
-<?php include('skipif.inc');
- if (version_compare(PHP_VERSION,"4.2.3-dev", ">=")) die("skip this is for PHP < 4.2.3");
-?>
---INI--
-session.use_cookies=0
-session.cache_limiter=
-register_globals=0
-session.bug_compat_42=1
-session.bug_compat_warn=0
---FILE--
-<?php
-error_reporting(E_ALL & ~E_NOTICE);
-
-session_id("abtest");
-
-### Phase 1 cleanup
-session_start();
-session_destroy();
-
-### Phase 2 $HTTP_SESSION_VARS["c"] does not contain any value
-session_id("abtest");
-session_register("c");
-var_dump($c);
-unset($c);
-$c = 3.14;
-session_write_close();
-unset($HTTP_SESSION_VARS);
-unset($c);
-
-### Phase 3 $HTTP_SESSION_VARS["c"] is set
-session_start();
-var_dump($HTTP_SESSION_VARS);
-unset($c);
-$c = 2.78;
-
-session_write_close();
-unset($HTTP_SESSION_VARS);
-unset($c);
-
-### Phase 4 final
-
-session_start();
-var_dump($c);
-var_dump($HTTP_SESSION_VARS);
-
-session_destroy();
-?>
---EXPECT--
-NULL
-array(1) {
- ["c"]=>
- float(3.14)
-}
-NULL
-array(1) {
- ["c"]=>
- float(3.14)
-}
diff --git a/ext/session/tests/009.phpt b/ext/session/tests/009.phpt
deleted file mode 100644
index a79cb931aa..0000000000
--- a/ext/session/tests/009.phpt
+++ /dev/null
@@ -1,57 +0,0 @@
---TEST--
-unset($_SESSION["name"]); should work with register_globals=off
---SKIPIF--
-<?php include('skipif.inc'); ?>
---INI--
-session.use_cookies=0
-session.cache_limiter=
-register_globals=0
-session.bug_compat_42=1
-session.bug_compat_warn=0
-session.serialize_handler=php
---FILE--
-<?php
-error_reporting(E_ALL);
-
-session_id("abtest");
-
-### Phase 1 cleanup
-session_start();
-session_destroy();
-
-### Phase 2 $HTTP_SESSION_VARS["c"] does not contain any value
-session_id("abtest");
-session_start();
-var_dump($HTTP_SESSION_VARS);
-$HTTP_SESSION_VARS["name"] = "foo";
-var_dump($HTTP_SESSION_VARS);
-session_write_close();
-
-### Phase 3 $HTTP_SESSION_VARS["c"] is set
-session_start();
-var_dump($HTTP_SESSION_VARS);
-unset($HTTP_SESSION_VARS["name"]);
-var_dump($HTTP_SESSION_VARS);
-session_write_close();
-
-### Phase 4 final
-
-session_start();
-var_dump($HTTP_SESSION_VARS);
-session_destroy();
-?>
---EXPECT--
-array(0) {
-}
-array(1) {
- ["name"]=>
- string(3) "foo"
-}
-array(1) {
- ["name"]=>
- string(3) "foo"
-}
-array(0) {
-}
-array(0) {
-}
diff --git a/ext/session/tests/010.phpt b/ext/session/tests/010.phpt
deleted file mode 100644
index e1af8ce87f..0000000000
--- a/ext/session/tests/010.phpt
+++ /dev/null
@@ -1,19 +0,0 @@
---TEST--
-$session_array = explode(";", session_encode()); should not segfault
---SKIPIF--
-<?php include('skipif.inc'); ?>
---INI--
-session.use_cookies=0
-session.cache_limiter=
-register_globals=0
-session.bug_compat_42=1
-session.bug_compat_warn=0
---FILE--
-<?php
-error_reporting(E_ALL);
-
-$session_array = explode(";", @session_encode());
-print "I live\n";
-?>
---EXPECT--
-I live
diff --git a/ext/session/tests/011.phpt b/ext/session/tests/011.phpt
deleted file mode 100644
index 6aaa6bd797..0000000000
--- a/ext/session/tests/011.phpt
+++ /dev/null
@@ -1,20 +0,0 @@
---TEST--
-session_decode(); should not segfault
---SKIPIF--
-<?php include('skipif.inc'); ?>
---INI--
-session.use_cookies=0
-session.cache_limiter=
-register_globals=0
-session.bug_compat_42=1
-session.bug_compat_warn=0
---FILE--
-<?php
-error_reporting(E_ALL);
-
-@session_decode("garbage data and no session started");
-@session_decode("userid|s:5:\"mazen\";chatRoom|s:1:\"1\";");
-print "I live\n";
-?>
---EXPECT--
-I live
diff --git a/ext/session/tests/012.phpt b/ext/session/tests/012.phpt
deleted file mode 100644
index 2bfee9b3de..0000000000
--- a/ext/session/tests/012.phpt
+++ /dev/null
@@ -1,34 +0,0 @@
---TEST--
-registering $_SESSION should not segfault
---SKIPIF--
-<?php include('skipif.inc'); ?>
---INI--
-session.use_cookies=0
-session.cache_limiter=
-register_globals=1
-session.bug_compat_42=1
-session.bug_compat_warn=0
-session.serialize_handler=php
---FILE--
-<?php
-error_reporting(E_ALL);
-
-### Absurd example, value of $_SESSION does not matter
-
-session_id("abtest");
-session_start();
-session_register("_SESSION");
-$_SESSION = "kk";
-
-session_write_close();
-
-### Restart to test for $_SESSION brokenness
-
-session_start();
-$_SESSION = "kk";
-session_destroy();
-
-print "I live\n";
-?>
---EXPECT--
-I live
diff --git a/ext/session/tests/013.phpt b/ext/session/tests/013.phpt
deleted file mode 100644
index 77c1353054..0000000000
--- a/ext/session/tests/013.phpt
+++ /dev/null
@@ -1,26 +0,0 @@
---TEST--
-redefining SID should not cause warnings
---SKIPIF--
-<?php include('skipif.inc'); ?>
---INI--
-session.use_cookies=0
-session.cache_limiter=
-register_globals=1
-session.bug_compat_42=1
-session.bug_compat_warn=0
-session.serialize_handler=php
---FILE--
-<?php
-error_reporting(E_ALL);
-
-session_id("abtest");
-session_start();
-session_destroy();
-session_id("abtest2");
-session_start();
-session_destroy();
-
-print "I live\n";
-?>
---EXPECT--
-I live
diff --git a/ext/session/tests/014.phpt b/ext/session/tests/014.phpt
deleted file mode 100644
index 3f22186839..0000000000
--- a/ext/session/tests/014.phpt
+++ /dev/null
@@ -1,41 +0,0 @@
---TEST--
-a script should not be able to modify session.use_trans_sid
---SKIPIF--
-<?php include('skipif.inc'); ?>
---INI--
-session.use_trans_sid=1
-session.use_cookies=0
-session.cache_limiter=
-register_globals=1
-session.bug_compat_42=1
-session.bug_compat_warn=0
-session.name=PHPSESSID
-session.serialize_handler=php
---FILE--
-<?php
-error_reporting(E_ALL);
-
-session_id("abtest");
-session_start();
-
-?>
-<a href="/link">
-<?php
-ini_set("session.use_trans_sid","0");
-?>
-<a href="/link">
-<?php
-ini_set("session.use_trans_sid","1");
-?>
-<a href="/link">
-<?php
-session_destroy();
-?>
---EXPECTF--
-<a href="/link?PHPSESSID=abtest">
-
-Warning: ini_set(): A session is active. You cannot change the session module's ini settings at this time. in %s on line %d
-<a href="/link?PHPSESSID=abtest">
-
-Warning: ini_set(): A session is active. You cannot change the session module's ini settings at this time. in %s on line %d
-<a href="/link?PHPSESSID=abtest">
diff --git a/ext/session/tests/015.phpt b/ext/session/tests/015.phpt
deleted file mode 100644
index 53929b1672..0000000000
--- a/ext/session/tests/015.phpt
+++ /dev/null
@@ -1,24 +0,0 @@
---TEST--
-use_trans_sid should not affect SID
---SKIPIF--
-<?php include('skipif.inc'); ?>
---INI--
-session.use_trans_sid=1
-session.use_cookies=0
-session.cache_limiter=
-arg_separator.output=&
-session.name=PHPSESSID
-session.serialize_handler=php
---FILE--
-<?php
-error_reporting(E_ALL);
-
-session_id("abtest");
-session_start();
-?>
-<a href="/link?<?php echo SID; ?>">
-<?php
-session_destroy();
-?>
---EXPECT--
-<a href="/link?PHPSESSID=abtest&PHPSESSID=abtest">
diff --git a/ext/session/tests/016.phpt b/ext/session/tests/016.phpt
deleted file mode 100644
index 21cd0ec929..0000000000
--- a/ext/session/tests/016.phpt
+++ /dev/null
@@ -1,21 +0,0 @@
---TEST--
-invalid session.save_path should not cause a segfault
---SKIPIF--
-<?php include('skipif.inc'); ?>
---INI--
-session.save_path="123;:/really\\completely:::/invalid;;,23123;213"
-session.use_cookies=0
-session.cache_limiter=
-session.save_handler=files
-session.serialize_handler=php
---FILE--
-<?php
-error_reporting(E_ALL);
-
-@session_start();
-$HTTP_SESSION_VARS["test"] = 1;
-@session_write_close();
-print "I live\n";
-?>
---EXPECT--
-I live
diff --git a/ext/session/tests/017.phpt b/ext/session/tests/017.phpt
deleted file mode 100644
index 2a11fed85b..0000000000
--- a/ext/session/tests/017.phpt
+++ /dev/null
@@ -1,25 +0,0 @@
---TEST--
-setting $_SESSION before session_start() should not cause segfault
---SKIPIF--
-<?php include('skipif.inc'); ?>
---INI--
-session.use_cookies=0
-session.cache_limiter=
-session.serialize_handler=php
---FILE--
-<?php
-
-error_reporting(E_ALL);
-
-class Kill {
- function Kill() {
- global $HTTP_SESSION_VARS;
- session_start();
- }
-}
-$k = new Kill();
-
-print "I live\n";
-?>
---EXPECT--
-I live
diff --git a/ext/session/tests/018.phpt b/ext/session/tests/018.phpt
deleted file mode 100644
index 0b84978ed2..0000000000
--- a/ext/session/tests/018.phpt
+++ /dev/null
@@ -1,24 +0,0 @@
---TEST--
-rewriter correctly handles attribute names which contain dashes
---SKIPIF--
-<?php include('skipif.inc'); ?>
---INI--
-session.use_cookies=0
-session.cache_limiter=
-session.use_trans_sid=1
-session.name=PHPSESSID
-session.serialize_handler=php
---FILE--
-<?php
-
-error_reporting(E_ALL);
-
-session_id("abtest");
-session_start();
-?>
-<form accept-charset="ISO-8859-15, ISO-8859-1" action=url.php>
-<?php
-session_destroy();
-?>
---EXPECT--
-<form accept-charset="ISO-8859-15, ISO-8859-1" action=url.php><input type="hidden" name="PHPSESSID" value="abtest" />
diff --git a/ext/session/tests/019.phpt b/ext/session/tests/019.phpt
deleted file mode 100644
index e9f8699440..0000000000
--- a/ext/session/tests/019.phpt
+++ /dev/null
@@ -1,72 +0,0 @@
---TEST--
-serializing references test case using globals
---SKIPIF--
-<?php include('skipif.inc'); ?>
---INI--
-session.use_cookies=0
-session.cache_limiter=
-register_globals=1
-session.serialize_handler=php
---FILE--
-<?php
-
-error_reporting(E_ALL);
-
-class TFoo {
- public $c;
- function TFoo($c) {
- $this->c = $c;
- }
- function inc() {
- $this->c++;
- }
-}
-
-session_id("abtest");
-session_start();
-session_register('o1', 'o2' );
-
-$o1 = new TFoo(42);
-$o2 =& $o1;
-
-session_write_close();
-
-unset($o1);
-unset($o2);
-
-session_start();
-
-var_dump($_SESSION);
-
-$o1->inc();
-$o2->inc();
-
-var_dump($_SESSION);
-
-session_destroy();
-?>
---EXPECTF--
-array(2) {
- ["o1"]=>
- &object(TFoo)#%d (1) {
- ["c"]=>
- int(42)
- }
- ["o2"]=>
- &object(TFoo)#%d (1) {
- ["c"]=>
- int(42)
- }
-}
-array(2) {
- ["o1"]=>
- &object(TFoo)#%d (1) {
- ["c"]=>
- int(44)
- }
- ["o2"]=>
- &object(TFoo)#%d (1) {
- ["c"]=>
- int(44)
- }
-}
diff --git a/ext/session/tests/020.phpt b/ext/session/tests/020.phpt
deleted file mode 100644
index c9571ef20d..0000000000
--- a/ext/session/tests/020.phpt
+++ /dev/null
@@ -1,25 +0,0 @@
---TEST--
-rewriter uses arg_seperator.output for modifying URLs
---SKIPIF--
-<?php include('skipif.inc'); ?>
---INI--
-session.use_cookies=0
-session.cache_limiter=
-session.use_trans_sid=1
-arg_separator.output=&amp;
-session.name=PHPSESSID
-session.serialize_handler=php
---FILE--
-<?php
-
-error_reporting(E_ALL);
-
-session_id("abtest");
-session_start();
-?>
-<a href="link.php?a=b">
-<?php
-session_destroy();
-?>
---EXPECT--
-<a href="link.php?a=b&amp;PHPSESSID=abtest">
diff --git a/ext/session/tests/021.phpt b/ext/session/tests/021.phpt
deleted file mode 100644
index b45406438e..0000000000
--- a/ext/session/tests/021.phpt
+++ /dev/null
@@ -1,61 +0,0 @@
---TEST--
-rewriter handles form and fieldset tags correctly
---SKIPIF--
-<?php include('skipif.inc'); ?>
---INI--
-session.use_cookies=0
-session.cache_limiter=
-session.use_trans_sid=1
-url_rewriter.tags="a=href,area=href,frame=src,input=src,form=,fieldset="
-session.name=PHPSESSID
-session.serialize_handler=php
---FILE--
-<?php
-
-error_reporting(E_ALL);
-
-session_id("abtest");
-session_start();
-?>
-<form>
-<fieldset>
-<?php
-
-ob_flush();
-
-ini_set("url_rewriter.tags", "a=href,area=href,frame=src,input=src,form=");
-
-?>
-<form>
-<fieldset>
-<?php
-
-ob_flush();
-
-ini_set("url_rewriter.tags", "a=href,area=href,frame=src,input=src,form=fakeentry");
-
-?>
-<form>
-<fieldset>
-<?php
-
-ob_flush();
-
-ini_set("url_rewriter.tags", "a=href,fieldset=,area=href,frame=src,input=src");
-
-?>
-<form>
-<fieldset>
-<?php
-
-session_destroy();
-?>
---EXPECT--
-<form><input type="hidden" name="PHPSESSID" value="abtest" />
-<fieldset><input type="hidden" name="PHPSESSID" value="abtest" />
-<form><input type="hidden" name="PHPSESSID" value="abtest" />
-<fieldset>
-<form><input type="hidden" name="PHPSESSID" value="abtest" />
-<fieldset>
-<form>
-<fieldset><input type="hidden" name="PHPSESSID" value="abtest" />
diff --git a/ext/session/tests/bug24592.phpt b/ext/session/tests/bug24592.phpt
deleted file mode 100644
index e13c89a5f0..0000000000
--- a/ext/session/tests/bug24592.phpt
+++ /dev/null
@@ -1,35 +0,0 @@
---TEST--
-Bug #24592 (crash when multiple NULL values are being stored)
---SKIPIF--
-<?php include('skipif.inc'); ?>
---INI--
-register_globals=0
-html_errors=0
---FILE--
-<?php
-@session_start();
-
-$foo = $_SESSION['foo'];
-$bar = $_SESSION['bar'];
-
-var_dump($foo, $bar, $_SESSION);
-
-$_SESSION['foo'] = $foo;
-$_SESSION['bar'] = $bar;
-
-var_dump($_SESSION);
-?>
---EXPECTF--
-Notice: Undefined index: foo in %s on line %d
-
-Notice: Undefined index: bar in %s on line %d
-NULL
-NULL
-array(0) {
-}
-array(2) {
- ["foo"]=>
- NULL
- ["bar"]=>
- NULL
-}
diff --git a/ext/session/tests/bug26862.phpt b/ext/session/tests/bug26862.phpt
deleted file mode 100644
index 01533929e6..0000000000
--- a/ext/session/tests/bug26862.phpt
+++ /dev/null
@@ -1,22 +0,0 @@
---TEST--
-Bug #26862 (ob_flush() before output_reset_rewrite_vars() results in data loss)
---SKIPIF--
-<?php include('skipif.inc'); ?>
---INI--
-register_globals=0
-html_errors=0
-session.use_trans_sid=0
---FILE--
-<?php
-session_start();
-output_add_rewrite_var('var', 'value');
-
-echo '<a href="file.php">link</a>';
-
-ob_flush();
-
-output_reset_rewrite_vars();
-echo '<a href="file.php">link</a>';
-?>
---EXPECT--
-<a href="file.php?var=value">link</a><a href="file.php">link</a>
diff --git a/ext/session/tests/skipif.inc b/ext/session/tests/skipif.inc
deleted file mode 100644
index 6e3eae0862..0000000000
--- a/ext/session/tests/skipif.inc
+++ /dev/null
@@ -1,25 +0,0 @@
-<?php
-// This script prints "skip" if condition does not meet.
-if (!extension_loaded("session") && ini_get("enable_dl")) {
- $dlext = (substr(PHP_OS, 0, 3) == "WIN") ? ".dll" : ".so";
- @dl("session$dlext");
-}
-if (!extension_loaded("session")) {
- die("skip Session module not loaded");
-}
-$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");
- }
- }
-}
-?>
diff --git a/ext/shmop/CREDITS b/ext/shmop/CREDITS
deleted file mode 100644
index caab89e208..0000000000
--- a/ext/shmop/CREDITS
+++ /dev/null
@@ -1,2 +0,0 @@
-Shared Memory Operations
-Slava Poliakov, Ilia Alshanetsky
diff --git a/ext/shmop/README b/ext/shmop/README
deleted file mode 100644
index 5ec15861b8..0000000000
--- a/ext/shmop/README
+++ /dev/null
@@ -1,69 +0,0 @@
-last update Jan 2, 2002 (hackie@prohost.org/ilia@prohost.org)
-
-Shared Memory Operations Extension to PHP
-
- While developing a search deamon we needed a php based front end
- to communicate the deamon via SHM. PHP already had a shared memory
- extention (sysvshm) written by Christian Cartus <cartus@atrior.de>,
- unfortunatly this extention was designed with PHP only in mind and
- offers high level features which are extremly bothersome for basic SHM
- we had in mind. After spending a day trying to reverse engineer and figure
- out the format of sysvshm we decided that it would be much easier to
- add our own extention to php for simple SHM operations, we were right :)).
-
-the functions are:
-
-int shmop_open(int key, string flags, int mode, int size)
-
- key - the key of/for the shared memory block
- flags - 4 flags are avalible
- a for read only access (sets SHM_RDONLY)
- w for read & write access
- c create or open an existing segment (sets IPC_CREATE)
- n create a new segment and fail if one already exists under same name (sets IPC_CREATE|IPC_EXCL)
- (the n flag is mostly useful for security perpouses, so that you don't end up opening a faked segment
- if someone guesses your key)
- mode - acsess mode same as for a file (0644) for example
- size - size of the block in bytes
-
- returns an indentifier
-
-
-char shmop_read(int shmid, int start, int count)
-
- shmid - shmid from which to read
- start - offset from which to start reading
- count - how many bytes to read
-
- returns the data read
-
-int shmop_write(int shmid, string data, int offset)
-
- shmid - shmid from which to read
- data - string to put into shared memory
- offset - offset in shm to write from
-
- returns bytes written
-
-int shmop_size(int shmid)
-
- shmid - shmid for which to return the size
-
- returns the size in bytes of the shm segment
-
-
-int shmop_delete(int shmid)
-
- marks the segment for deletion, the segment will be deleted when all processes mapping it will detach
-
- shmid - shmid which to mark for deletion
-
- returns 1 if all ok, zero on failure
-
-int shmop_close(int shmid)
-
- shmid - shmid which to close
-
- returns zero
-
-
diff --git a/ext/shmop/config.m4 b/ext/shmop/config.m4
deleted file mode 100644
index 6c1709d715..0000000000
--- a/ext/shmop/config.m4
+++ /dev/null
@@ -1,8 +0,0 @@
-dnl $Id$
-PHP_ARG_ENABLE(shmop, whether to enable shmop support,
-[ --enable-shmop Enable shmop support])
-
-if test "$PHP_SHMOP" != "no"; then
- AC_DEFINE(HAVE_SHMOP, 1, [ ])
- PHP_NEW_EXTENSION(shmop, shmop.c, $ext_shared)
-fi
diff --git a/ext/shmop/config.w32 b/ext/shmop/config.w32
deleted file mode 100644
index 9302184af6..0000000000
--- a/ext/shmop/config.w32
+++ /dev/null
@@ -1,9 +0,0 @@
-// $Id$
-// vim:ft=javascript
-
-ARG_ENABLE("shmop", "shmop support", "no");
-
-if (PHP_SHMOP == "yes") {
- EXTENSION("shmop", "shmop.c");
- AC_DEFINE('HAVE_SHMOP', 1, 'Have SHMOP support');
-}
diff --git a/ext/shmop/package.xml b/ext/shmop/package.xml
deleted file mode 100644
index b77ddd5be0..0000000000
--- a/ext/shmop/package.xml
+++ /dev/null
@@ -1,47 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1" ?>
-<!DOCTYPE package SYSTEM "../pear/package.dtd">
-<package>
- <name>shmop</name>
- <summary>Portable shared memory access</summary>
- <maintainers>
- <maintainer>
- <user>iliaa</user>
- <name>Ilia Alshanetsky</name>
- <email>ilia@prohost.org</email>
- <role>lead</role>
- </maintainer>
- <maintainer>
- <name>Slava Poliakov</name>
- <email>hackie@prohost.org</email>
- <role>developer</role>
- </maintainer>
- </maintainers>
- <description>
- Portable Shared Memory access
- </description>
- <license>PHP</license>
- <release>
- <state>stable</state>
- <version>5.0.0rc1</version>
- <date>2004-03-19</date>
- <notes>
-package.xml added to support intallation using pear installer
- </notes>
- <filelist>
- <file role="doc" name="CREDITS"/>
- <file role="doc" name="README"/>
- <file role="src" name="config.m4"/>
- <file role="src" name="config.w32"/>
- <file role="src" name="shmop.dsp"/>
- <file role="src" name="shmop.c"/>
- <file role="src" name="php_shmop.h"/>
- <file role="test" name="tests/001.phpt"/>
- </filelist>
- <deps>
- <dep type="php" rel="ge" version="5" />
- </deps>
- </release>
-</package>
-<!--
-vim:et:ts=1:sw=1
--->
diff --git a/ext/shmop/php_shmop.h b/ext/shmop/php_shmop.h
deleted file mode 100644
index 485826d0c0..0000000000
--- a/ext/shmop/php_shmop.h
+++ /dev/null
@@ -1,84 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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. |
- +----------------------------------------------------------------------+
- | Authors: Slava Poliakov <hackie@prohost.org> |
- | Ilia Alshanetsky <ilia@prohost.org> |
- +----------------------------------------------------------------------+
- */
-#ifndef PHP_SHMOP_H
-#define PHP_SHMOP_H
-
-#if HAVE_SHMOP
-
-extern zend_module_entry shmop_module_entry;
-#define phpext_shmop_ptr &shmop_module_entry
-
-#ifdef PHP_WIN32
-#define PHP_SHMOP_API __declspec(dllexport)
-#else
-#define PHP_SHMOP_API
-#endif
-
-PHP_MINIT_FUNCTION(shmop);
-PHP_MSHUTDOWN_FUNCTION(shmop);
-PHP_RINIT_FUNCTION(shmop);
-PHP_RSHUTDOWN_FUNCTION(shmop);
-PHP_MINFO_FUNCTION(shmop);
-
-PHP_FUNCTION(shmop_open);
-PHP_FUNCTION(shmop_read);
-PHP_FUNCTION(shmop_close);
-PHP_FUNCTION(shmop_size);
-PHP_FUNCTION(shmop_write);
-PHP_FUNCTION(shmop_delete);
-
-#ifdef PHP_WIN32
-typedef int key_t;
-#endif
-
-struct php_shmop
-{
- int shmid;
- key_t key;
- int shmflg;
- int shmatflg;
- char *addr;
- int size;
-};
-
-typedef struct {
- int le_shmop;
-} php_shmop_globals;
-
-#ifdef ZTS
-#define SHMOPG(v) TSRMG(shmop_globals_id, php_shmop_globals *, v)
-#else
-#define SHMOPG(v) (shmop_globals.v)
-#endif
-
-#else
-
-#define phpext_shmop_ptr NULL
-
-#endif
-
-#endif /* PHP_SHMOP_H */
-
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- */
diff --git a/ext/shmop/shmop.c b/ext/shmop/shmop.c
deleted file mode 100644
index 78d9e1b973..0000000000
--- a/ext/shmop/shmop.c
+++ /dev/null
@@ -1,368 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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. |
- +----------------------------------------------------------------------+
- | Authors: Slava Poliakov <hackie@prohost.org> |
- | Ilia Alshanetsky <ilia@prohost.org> |
- +----------------------------------------------------------------------+
- */
-/* $Id$ */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "php.h"
-#include "php_ini.h"
-#include "php_shmop.h"
-# ifndef PHP_WIN32
-# include <sys/ipc.h>
-# include <sys/shm.h>
-#else
-#include "tsrm_win32.h"
-#endif
-
-
-#if HAVE_SHMOP
-
-#include "ext/standard/info.h"
-
-#ifdef ZTS
-int shmop_globals_id;
-#else
-php_shmop_globals shmop_globals;
-#endif
-
-int shm_type;
-
-/* {{{ shmop_functions[]
- */
-function_entry shmop_functions[] = {
- PHP_FE(shmop_open, NULL)
- PHP_FE(shmop_read, NULL)
- PHP_FE(shmop_close, NULL)
- PHP_FE(shmop_size, NULL)
- PHP_FE(shmop_write, NULL)
- PHP_FE(shmop_delete, NULL)
- {NULL, NULL, NULL} /* Must be the last line in shmop_functions[] */
-};
-/* }}} */
-
-/* {{{ shmop_module_entry
- */
-zend_module_entry shmop_module_entry = {
- STANDARD_MODULE_HEADER,
- "shmop",
- shmop_functions,
- PHP_MINIT(shmop),
- PHP_MSHUTDOWN(shmop),
- NULL,
- NULL,
- PHP_MINFO(shmop),
- NO_VERSION_YET,
- STANDARD_MODULE_PROPERTIES
-};
-/* }}} */
-
-#ifdef COMPILE_DL_SHMOP
-ZEND_GET_MODULE(shmop)
-#endif
-
-/* {{{ rsclean
- */
-static void rsclean(zend_rsrc_list_entry *rsrc TSRMLS_DC)
-{
- struct php_shmop *shmop = (struct php_shmop *)rsrc->ptr;
-
- shmdt(shmop->addr);
- efree(shmop);
-}
-/* }}} */
-
-/* {{{ PHP_MINIT_FUNCTION
- */
-PHP_MINIT_FUNCTION(shmop)
-{
- shm_type = zend_register_list_destructors_ex(rsclean, NULL, "shmop", module_number);
-
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ PHP_MSHUTDOWN_FUNCTION
- */
-PHP_MSHUTDOWN_FUNCTION(shmop)
-{
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ PHP_MINFO_FUNCTION
- */
-PHP_MINFO_FUNCTION(shmop)
-{
- php_info_print_table_start();
- php_info_print_table_row(2, "shmop support", "enabled");
- php_info_print_table_end();
-}
-/* }}} */
-
-/* {{{ proto int shmop_open (int key, string flags, int mode, int size)
- gets and attaches a shared memory segment */
-PHP_FUNCTION(shmop_open)
-{
- long key, mode, size;
- struct php_shmop *shmop;
- struct shmid_ds shm;
- int rsid;
- char *flags;
- int flags_len;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "lsll", &key, &flags, &flags_len, &mode, &size) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- if (flags_len != 1) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s is not a valid flag", flags);
- RETURN_FALSE;
- }
-
- shmop = emalloc(sizeof(struct php_shmop));
- memset(shmop, 0, sizeof(struct php_shmop));
-
- shmop->key = key;
- shmop->shmflg |= mode;
-
- switch (flags[0])
- {
- case 'a':
- shmop->shmatflg |= SHM_RDONLY;
- break;
- case 'c':
- shmop->shmflg |= IPC_CREAT;
- shmop->size = size;
- break;
- case 'n':
- shmop->shmflg |= (IPC_CREAT | IPC_EXCL);
- shmop->size = size;
- break;
- case 'w':
- /* noop
- shm segment is being opened for read & write
- will fail if segment does not exist
- */
- break;
- default:
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "invalid access mode");
- efree(shmop);
- RETURN_FALSE;
- }
-
- shmop->shmid = shmget(shmop->key, shmop->size, shmop->shmflg);
- if (shmop->shmid == -1) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "unable to attach or create shared memory segment");
- efree(shmop);
- RETURN_FALSE;
- }
-
- if (shmctl(shmop->shmid, IPC_STAT, &shm)) {
- efree(shmop);
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "unable to get shared memory segment information");
- RETURN_FALSE;
- }
-
- shmop->addr = shmat(shmop->shmid, 0, shmop->shmatflg);
- if (shmop->addr == (char*) -1) {
- efree(shmop);
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "unable to attach to shared memory segment");
- RETURN_FALSE;
- }
-
- shmop->size = shm.shm_segsz;
-
- rsid = zend_list_insert(shmop, shm_type);
- RETURN_LONG(rsid);
-}
-/* }}} */
-
-/* {{{ proto string shmop_read (int shmid, int start, int count)
- reads from a shm segment */
-PHP_FUNCTION(shmop_read)
-{
- long shmid, start, count;
- struct php_shmop *shmop;
- int type;
- char *startaddr;
- int bytes;
- char *return_string;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "lll", &shmid, &start, &count) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- shmop = zend_list_find(shmid, &type);
-
- if (!shmop) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "no shared memory segment with an id of [%lu]", shmid);
- RETURN_FALSE;
- }
-
- if (start < 0 || start > shmop->size) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "start is out of range");
- RETURN_FALSE;
- }
-
- if (start + count > shmop->size) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "count is out of range");
- RETURN_FALSE;
- }
-
- if (count < 0 ){
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "count is out of range");
- RETURN_FALSE;
- }
-
- startaddr = shmop->addr + start;
- bytes = count ? count : shmop->size - start;
-
- return_string = emalloc(bytes+1);
- memcpy(return_string, startaddr, bytes);
- return_string[bytes] = 0;
-
- RETURN_STRINGL(return_string, bytes, 0);
-}
-/* }}} */
-
-/* {{{ proto void shmop_close (int shmid)
- closes a shared memory segment */
-PHP_FUNCTION(shmop_close)
-{
- long shmid;
- struct php_shmop *shmop;
- int type;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &shmid) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- shmop = zend_list_find(shmid, &type);
-
- if (!shmop) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "no shared memory segment with an id of [%lu]", shmid);
- RETURN_FALSE;
- }
-
- zend_list_delete(shmid);
-}
-/* }}} */
-
-/* {{{ proto int shmop_size (int shmid)
- returns the shm size */
-PHP_FUNCTION(shmop_size)
-{
- long shmid;
- struct php_shmop *shmop;
- int type;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &shmid) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- shmop = zend_list_find(shmid, &type);
-
- if (!shmop) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "no shared memory segment with an id of [%lu]", shmid);
- RETURN_FALSE;
- }
-
- RETURN_LONG(shmop->size);
-}
-/* }}} */
-
-/* {{{ proto int shmop_write (int shmid, string data, int offset)
- writes to a shared memory segment */
-PHP_FUNCTION(shmop_write)
-{
- struct php_shmop *shmop;
- int type;
- int writesize;
- long shmid, offset;
- char *data;
- int data_len;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "lsl", &shmid, &data, &data_len, &offset) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- shmop = zend_list_find(shmid, &type);
-
- if (!shmop) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "no shared memory segment with an id of [%lu]", shmid);
- RETURN_FALSE;
- }
-
- if ((shmop->shmatflg & SHM_RDONLY) == SHM_RDONLY) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "trying to write to a read only segment");
- RETURN_FALSE;
- }
-
- if (offset > shmop->size) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "offset out of range");
- RETURN_FALSE;
- }
-
- writesize = (data_len < shmop->size - offset) ? data_len : shmop->size - offset;
- memcpy(shmop->addr + offset, data, writesize);
-
- RETURN_LONG(writesize);
-}
-/* }}} */
-
-/* {{{ proto bool shmop_delete (int shmid)
- mark segment for deletion */
-PHP_FUNCTION(shmop_delete)
-{
- long shmid;
- struct php_shmop *shmop;
- int type;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &shmid) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- shmop = zend_list_find(shmid, &type);
-
- if (!shmop) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "no shared memory segment with an id of [%lu]", shmid);
- RETURN_FALSE;
- }
-
- if (shmctl(shmop->shmid, IPC_RMID, NULL)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "can't mark segment for deletion (are you the owner?)");
- RETURN_FALSE;
- }
-
- RETURN_TRUE;
-}
-/* }}} */
-
-#endif /* HAVE_SHMOP */
-
-/*
- * 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/shmop/shmop.dsp b/ext/shmop/shmop.dsp
deleted file mode 100644
index 848f0bdc91..0000000000
--- a/ext/shmop/shmop.dsp
+++ /dev/null
@@ -1,107 +0,0 @@
-# Microsoft Developer Studio Project File - Name="shmop" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=shmop - Win32 Debug_TS
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "shmop.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "shmop.mak" CFG="shmop - Win32 Debug_TS"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "shmop - Win32 Release_TS" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "shmop - Win32 Debug_TS" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "shmop - Win32 Release_TS"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release_TS"
-# PROP BASE Intermediate_Dir "Release_TS"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release_TS"
-# PROP Intermediate_Dir "Release_TS"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "SHMOP_EXPORTS" /YX /FD /c
-# ADD CPP /nologo /MD /W3 /GX /O2 /I "..\..\\" /I "..\..\main" /I "..\..\TSRM" /I "..\..\ZEND" /D "WIN32" /D ZEND_WIN32=1 /D PHP_WIN32=1 /D "NDEBUG" /D "PHP_EXPORTS" /D "HAVE_SHMOP" /D COMPILE_DL_SHMOP=1 /D ZEND_DEBUG=0 /D "ZTS" /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x407 /d "NDEBUG"
-# ADD RSC /l 0x407 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386
-# ADD LINK32 php5ts.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 /out:"..\..\Release_TS/php_shmop.dll" /libpath:"..\..\Release_TS" /libpath:"..\..\Release_TS_Inline"
-
-!ELSEIF "$(CFG)" == "shmop - Win32 Debug_TS"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug_TS"
-# PROP BASE Intermediate_Dir "Debug_TS"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug_TS"
-# PROP Intermediate_Dir "Debug_TS"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "SHMOP_EXPORTS" /YX /FD /GZ /c
-# ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "..\..\\" /I "..\..\main" /I "..\..\TSRM" /I "..\..\ZEND" /D "WIN32" /D ZEND_DEBUG=1 /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "PHP_EXPORTS" /D "COMPILE_DL_SHMOP" /D "ZEND_WIN32" /D "PHP_WIN32" /D HAVE_SHMOP=1 /D ZTS=1 /YX /FD /GZ /c
-# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x407 /d "_DEBUG"
-# ADD RSC /l 0x407 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 php5ts_debug.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /out:"..\..\Debug_TS/php_shmop.dll" /pdbtype:sept /libpath:"..\..\Debug_TS"
-
-!ENDIF
-
-# Begin Target
-
-# Name "shmop - Win32 Release_TS"
-# Name "shmop - Win32 Debug_TS"
-# Begin Group "Source Files"
-
-# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
-# Begin Source File
-
-SOURCE=.\shmop.c
-# End Source File
-# End Group
-# Begin Group "Header Files"
-
-# PROP Default_Filter "h;hpp;hxx;hm;inl"
-# Begin Source File
-
-SOURCE=.\php_shmop.h
-# End Source File
-# End Group
-# End Target
-# End Project
diff --git a/ext/shmop/tests/001.phpt b/ext/shmop/tests/001.phpt
deleted file mode 100644
index 1a1b926308..0000000000
--- a/ext/shmop/tests/001.phpt
+++ /dev/null
@@ -1,91 +0,0 @@
---TEST--
-shmop extension test
---SKIPIF--
-<?php
- if (!extension_loaded("shmop")) {
- die("skip shmop() extension not avaliable");
- }
-?>
---FILE--
-<?php
- $hex_shm_id = 0xff3;
- $write_d1 = "test #1 of the shmop() extension";
- $write_d2 = "test #2 append data to shared memory segment";
-
- echo "shm open for create: ";
- $shm_id = shmop_open($hex_shm_id, "n", 0644, 1024);
- if (!$shm_id) {
- die("failed\n");
- } else {
- echo "ok\n";
- }
-
- echo "shm size is: " . ($shm_size = shmop_size($shm_id)) . "\n";
-
- echo "shm write test #1: ";
- $written = shmop_write($shm_id, $write_d1, 0);
- if ($written != strlen($write_d1)) {
- echo "failed\n";
- } else {
- echo "ok\n";
- }
-
- echo "data in memory is: " . shmop_read($shm_id, 0, $written) . "\n";
-
- shmop_close($shm_id);
-
- echo "shm open for read only: ";
- $shm_id = shmop_open($hex_shm_id, "a", 0644, 1024);
- if (!$shm_id) {
- echo "failed\n";
- } else {
- echo "ok\n";
- }
-
- echo "data in memory is: " . shmop_read($shm_id, 0, $written) . "\n";
-
- /* try to append data to the shared memory segment, this should fail */
- @shmop_write($shm_id, $write_d1, $written);
- echo $php_errormsg . "\n";
-
- shmop_close($shm_id);
-
- echo "shm open for read only: ";
- $shm_id = shmop_open($hex_shm_id, "w", 0644, 1024);
- if (!$shm_id) {
- echo "failed\n";
- } else {
- echo "ok\n";
- }
-
- echo "shm write test #1: ";
- $written = shmop_write($shm_id, $write_d2, $written);
- if ($written != strlen($write_d2)) {
- die("failed\n");
- } else {
- echo "ok\n";
- }
-
- echo "data in memory is: " . shmop_read($shm_id, 0, strlen($write_d1 . $write_d2)) . "\n";
-
- echo "deletion of shm segment: ";
- if (!shmop_delete($shm_id)) {
- echo "failed\n";
- } else {
- echo "ok\n";
- }
-
- shmop_close($shm_id);
-?>
---EXPECT--
-shm open for create: ok
-shm size is: 1024
-shm write test #1: ok
-data in memory is: test #1 of the shmop() extension
-shm open for read only: ok
-data in memory is: test #1 of the shmop() extension
-trying to write to a read only segment
-shm open for read only: ok
-shm write test #1: ok
-data in memory is: test #1 of the shmop() extensiontest #2 append data to shared memory segment
-deletion of shm segment: ok
diff --git a/ext/simplexml/CREDITS b/ext/simplexml/CREDITS
deleted file mode 100644
index bff168d767..0000000000
--- a/ext/simplexml/CREDITS
+++ /dev/null
@@ -1,2 +0,0 @@
-SimpleXML
-Sterling Hughes, Marcus Boerger, Rob Richards
diff --git a/ext/simplexml/README b/ext/simplexml/README
deleted file mode 100755
index bb9240d103..0000000000
--- a/ext/simplexml/README
+++ /dev/null
@@ -1,34 +0,0 @@
-SimpleXML is meant to be an easy way to access XML data.
-
-SimpleXML objects follow four basic rules:
-
-1) properties denote element iterators
-2) numeric indices denote elements
-3) non numeric indices denote attributes
-4) string conversion allows to access TEXT data
-
-When iterating properties then the extension always iterates over
-all nodes with that element name. Thus method children() must be
-called to iterate over subnodes. But also doing the following:
-foreach ($obj->node_name as $elem) {
- // do something with $elem
-}
-always results in iteration of 'node_name' elements. So no further
-check is needed to distinguish the number of nodes of that type.
-
-When an elements TEXT data is being accessed through a property
-then the result does not include the TEXT data of subelements.
-
-Known issues
-============
-
-Due to engine problems it is currently not possible to access
-a subelement by index 0: $object->property[0].
-
-TODO
-====
-
-At the moment property access to multiple elements of the same
-name returns an array of SimpleXML objects. This should be an
-object of a new type instead so that all kinds of linkage,
-assignment and deleting would work.
diff --git a/ext/simplexml/config.m4 b/ext/simplexml/config.m4
deleted file mode 100644
index 1869c20561..0000000000
--- a/ext/simplexml/config.m4
+++ /dev/null
@@ -1,22 +0,0 @@
-dnl $Id$
-dnl config.m4 for extension simplexml
-
-PHP_ARG_ENABLE(simplexml, whether to enable simplexml support,
-[ --disable-simplexml Disable simplexml support], yes)
-
-if test -z "$PHP_LIBXML_DIR"; then
- PHP_ARG_WITH(libxml-dir, libxml2 install dir,
- [ --with-libxml-dir=DIR SimpleXML: libxml2 install prefix], no, no)
-fi
-
-if test "$PHP_SIMPLEXML" != "no" && test "$PHP_LIBXML" != "no"; then
-
- PHP_SETUP_LIBXML(SIMPLEXML_SHARED_LIBADD, [
- AC_DEFINE(HAVE_SIMPLEXML,1,[ ])
- PHP_NEW_EXTENSION(simplexml, simplexml.c, $ext_shared)
- PHP_SUBST(SIMPLEXML_SHARED_LIBADD)
- ], [
- AC_MSG_ERROR([xml2-config not found. Please check your libxml2 installation.])
- ])
- PHP_ADD_EXTENSION_DEP(simplexml, libxml)
-fi
diff --git a/ext/simplexml/config.w32 b/ext/simplexml/config.w32
deleted file mode 100644
index 26a87f1c14..0000000000
--- a/ext/simplexml/config.w32
+++ /dev/null
@@ -1,16 +0,0 @@
-// $Id$
-// vim:ft=javascript
-
-ARG_WITH("simplexml", "Simple XML support", "yes");
-
-if (PHP_SIMPLEXML == "yes" && PHP_LIBXML == "yes") {
- EXTENSION("simplexml", "simplexml.c");
- AC_DEFINE("HAVE_SIMPLEXML", 1, "Simple XML support");
- if (!PHP_SIMPLEXML_SHARED) {
- ADD_FLAG("CFLAGS_SIMPLEXML", "/D LIBXML_STATIC");
- }
- ADD_EXTENSION_DEP('simplexml', 'libxml');
- ADD_EXTENSION_DEP('simplexml', 'spl', true);
-}
-
-
diff --git a/ext/simplexml/examples/book.php b/ext/simplexml/examples/book.php
deleted file mode 100644
index 0416df861b..0000000000
--- a/ext/simplexml/examples/book.php
+++ /dev/null
@@ -1,8 +0,0 @@
-<?php
-$books = simplexml_load_file('book.xml');
-//var_dump($books);
-$books = $books->book;
-foreach ($books as $book) {
- echo "{$book->title} was written by {$book->author}\n";
-}
-?>
diff --git a/ext/simplexml/examples/book.xml b/ext/simplexml/examples/book.xml
deleted file mode 100644
index ea40508e01..0000000000
--- a/ext/simplexml/examples/book.xml
+++ /dev/null
@@ -1,10 +0,0 @@
-<books>
- <book>
- <title>The Grapes of Wrath</title>
- <author>John Steinbeck</author>
- </book>
- <book>
- <title>The Pearl</title>
- <author>John Steinbeck</author>
- </book>
-</books>
diff --git a/ext/simplexml/examples/interop.php b/ext/simplexml/examples/interop.php
deleted file mode 100644
index 9e38ec1110..0000000000
--- a/ext/simplexml/examples/interop.php
+++ /dev/null
@@ -1,27 +0,0 @@
-<?php
-$dom = new domDocument;
-$dom->load("book.xml");
-if(!$dom) {
- echo "Error while parsing the document\n";
- exit;
-}
-print "As SimpleXML\n";
-
-$s = simplexml_import_dom($dom);
-$books = $s->book;
-foreach ($books as $book) {
- echo "{$book->title} was written by {$book->author}\n";
-}
-
-print "As DOM \n";
-
-$dom = dom_import_simplexml($s);
-$books = $dom->getElementsByTagName("book");
-foreach ($books as $book) {
- $title = $book->getElementsByTagName("title");
- $author = $book->getElementsByTagName("author");
- echo $title[0]->firstChild->data . " was written by ". $author[0]->firstChild->data . "\n";
-}
-
-
-?>
diff --git a/ext/simplexml/examples/security.php b/ext/simplexml/examples/security.php
deleted file mode 100644
index 17897b3fd7..0000000000
--- a/ext/simplexml/examples/security.php
+++ /dev/null
@@ -1,6 +0,0 @@
-<?php
-$s = simplexml_load_file('security.xml');
-echo $s->id;
-$s->id = 20;
-$s->asXML('security.new.xml');
-?>
diff --git a/ext/simplexml/examples/security.xml b/ext/simplexml/examples/security.xml
deleted file mode 100644
index d954a02335..0000000000
--- a/ext/simplexml/examples/security.xml
+++ /dev/null
@@ -1,4 +0,0 @@
-<?xml version="1.0"?>
-<security>
- <id>15</id>
-</security>
diff --git a/ext/simplexml/examples/xpath.php b/ext/simplexml/examples/xpath.php
deleted file mode 100644
index 8fcd9878ab..0000000000
--- a/ext/simplexml/examples/xpath.php
+++ /dev/null
@@ -1,9 +0,0 @@
-<?php
-$books = simplexml_load_file('book.xml');
-
-$xpath_result = $books->xpath("/books/book/title");
-foreach($xpath_result as $entry ) {
- print "$entry \n";
-}
-
-?>
diff --git a/ext/simplexml/php_simplexml.h b/ext/simplexml/php_simplexml.h
deleted file mode 100644
index 573b36603f..0000000000
--- a/ext/simplexml/php_simplexml.h
+++ /dev/null
@@ -1,94 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Sterling Hughes <sterling@php.net> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifndef PHP_SIMPLEXML_H
-#define PHP_SIMPLEXML_H
-
-extern zend_module_entry simplexml_module_entry;
-#define phpext_simplexml_ptr &simplexml_module_entry
-
-#ifdef PHP_WIN32
-#define PHP_SIMPLEXML_API __declspec(dllexport)
-#else
-#define PHP_SIMPLEXML_API
-#endif
-
-#ifdef ZTS
-#include "TSRM.h"
-#endif
-
-#include "ext/libxml/php_libxml.h"
-#include <libxml/parser.h>
-#include <libxml/parserInternals.h>
-#include <libxml/tree.h>
-#include <libxml/uri.h>
-#include <libxml/xmlerror.h>
-#include <libxml/xinclude.h>
-#include <libxml/xpath.h>
-#include <libxml/xpathInternals.h>
-#include <libxml/xpointer.h>
-#include <libxml/xmlschemas.h>
-
-PHP_MINIT_FUNCTION(simplexml);
-PHP_MSHUTDOWN_FUNCTION(simplexml);
-#if HAVE_SPL && !defined(COMPILE_DL_SPL)
-PHP_RINIT_FUNCTION(simplexml);
-#endif
-PHP_MINFO_FUNCTION(simplexml);
-
-typedef struct {
- zend_object zo;
- php_libxml_node_ptr *node;
- php_libxml_ref_obj *document;
- HashTable *properties;
- xmlXPathContextPtr xpath;
- struct {
- int itertype;
- char *name;
- char *nsprefix;
- int type;
- zval *data;
- } iter;
-} php_sxe_object;
-
-#define SXE_ITER_NONE 0
-#define SXE_ITER_ELEMENT 1
-#define SXE_ITER_CHILD 2
-#define SXE_ITER_ATTRLIST 3
-
-#ifdef ZTS
-#define SIMPLEXML_G(v) TSRMG(simplexml_globals_id, zend_simplexml_globals *, v)
-#else
-#define SIMPLEXML_G(v) (simplexml_globals.v)
-#endif
-
-ZEND_API zend_class_entry *sxe_get_element_class_entry();
-
-#endif
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * indent-tabs-mode: t
- * End:
- * vim600: fdm=marker
- * vim: noet sw=4 ts=4
- */
diff --git a/ext/simplexml/php_simplexml_exports.h b/ext/simplexml/php_simplexml_exports.h
deleted file mode 100755
index 445605fdf5..0000000000
--- a/ext/simplexml/php_simplexml_exports.h
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Sterling Hughes <sterling@php.net> |
- | Marcus Boerger <helly@php.net> |
- | Rob Richards <rrichards@php.net> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifndef PHP_SIMPLEXML_EXPORTS_H
-#define PHP_SIMPLEXML_EXPORTS_H
-
-#include "php_simplexml.h"
-
-#define SKIP_TEXT(__p) \
- if ((__p)->type == XML_TEXT_NODE) { \
- goto next_iter; \
- }
-
-#define GET_NODE(__s, __n) { \
- if ((__s)->node && (__s)->node->node) { \
- __n = (__s)->node->node; \
- } else { \
- __n = NULL; \
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Node no longer exists"); \
- } \
-}
-
-ZEND_API zend_object_value sxe_object_new(zend_class_entry *ce TSRMLS_DC);
-/* {{{ php_sxe_fetch_object()
- */
-static inline php_sxe_object *
-php_sxe_fetch_object(zval *object TSRMLS_DC)
-{
- return (php_sxe_object *) zend_object_store_get_object(object TSRMLS_CC);
-}
-/* }}} */
-
-ZEND_API void php_sxe_reset_iterator(php_sxe_object *sxe TSRMLS_DC);
-ZEND_API void php_sxe_move_forward_iterator(php_sxe_object *sxe TSRMLS_DC);
-
-#endif /* PHP_SIMPLEXML_EXPORTS_H */
-
-/**
- * Local Variables:
- * c-basic-offset: 4
- * tab-width: 4
- * indent-tabs-mode: t
- * End:
- * vim600: fdm=marker
- * vim: noet sw=4 ts=4
- */
diff --git a/ext/simplexml/simplexml.c b/ext/simplexml/simplexml.c
deleted file mode 100644
index 3464c1b3a9..0000000000
--- a/ext/simplexml/simplexml.c
+++ /dev/null
@@ -1,1743 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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. |
- +----------------------------------------------------------------------+
- | Authors: Sterling Hughes <sterling@php.net> |
- | Marcus Boerger <helly@php.net> |
- | Rob Richards <rrichards@php.net> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "php.h"
-#if HAVE_LIBXML && HAVE_SIMPLEXML
-
-#include "php_ini.h"
-#include "ext/standard/info.h"
-#include "ext/standard/php_string.h"
-#include "php_simplexml.h"
-#include "php_simplexml_exports.h"
-#include "zend_exceptions.h"
-#include "zend_interfaces.h"
-#if HAVE_SPL && !defined(COMPILE_DL_SPL)
-#include "ext/spl/spl_sxe.h"
-#endif
-
-zend_class_entry *sxe_class_entry = NULL;
-
-ZEND_API zend_class_entry *sxe_get_element_class_entry()
-{
- return sxe_class_entry;
-}
-
-#define SXE_ME(func, arg_info, flags) PHP_ME(simplexml_element, func, arg_info, flags)
-
-#define SXE_METHOD(func) PHP_METHOD(simplexml_element, func)
-
-static php_sxe_object* php_sxe_object_new(zend_class_entry *ce TSRMLS_DC);
-static zend_object_value php_sxe_register_object(php_sxe_object * TSRMLS_DC);
-
-/* {{{ _node_as_zval()
- */
-static void _node_as_zval(php_sxe_object *sxe, xmlNodePtr node, zval *value, int itertype, char *name, char *prefix TSRMLS_DC)
-{
- php_sxe_object *subnode;
-
- subnode = php_sxe_object_new(sxe->zo.ce TSRMLS_CC);
- subnode->document = sxe->document;
- subnode->document->refcount++;
- subnode->iter.type = itertype;
- if (name) {
- subnode->iter.name = xmlStrdup(name);
- }
- if (prefix) {
- subnode->iter.nsprefix = xmlStrdup(prefix);
- }
-
- php_libxml_increment_node_ptr((php_libxml_node_object *)subnode, node, NULL TSRMLS_CC);
-
- value->type = IS_OBJECT;
- value->value.obj = php_sxe_register_object(subnode TSRMLS_CC);
-}
-/* }}} */
-
-#define APPEND_PREV_ELEMENT(__c, __v) \
- if ((__c) == 1) { \
- array_init(return_value); \
- add_next_index_zval(return_value, __v); \
- }
-
-#define APPEND_CUR_ELEMENT(__c, __v) \
- if (++(__c) > 1) { \
- add_next_index_zval(return_value, __v); \
- }
-
-#define GET_NODE(__s, __n) { \
- if ((__s)->node && (__s)->node->node) { \
- __n = (__s)->node->node; \
- } else { \
- __n = NULL; \
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Node no longer exists"); \
- } \
-}
-
-static xmlNodePtr php_sxe_get_first_node(php_sxe_object *sxe, xmlNodePtr node TSRMLS_DC) {
- php_sxe_object *intern;
- xmlNodePtr retnode = NULL;
-
- if (sxe && sxe->iter.type != SXE_ITER_NONE) {
- php_sxe_reset_iterator(sxe TSRMLS_CC);
- if (sxe->iter.data) {
- intern = (php_sxe_object *)zend_object_store_get_object(sxe->iter.data TSRMLS_CC);
- GET_NODE(intern, retnode)
- }
- return retnode;
- } else {
- return node;
- }
-}
-
-/* {{{ match_ns()
- */
-static inline int
-match_ns(php_sxe_object *sxe, xmlNodePtr node, xmlChar *name)
-{
- if (name == NULL && (node->ns == NULL || node->ns->prefix == NULL)) {
- return 1;
- }
-
- if (node->ns && !xmlStrcmp(node->ns->href, name)) {
- return 1;
- }
-
- return 0;
-}
-/* }}} */
-
-/* {{{ sxe_get_element_node()
- */
-static xmlNodePtr sxe_get_element_by_offset(php_sxe_object *sxe, long offset, xmlNodePtr node) {
- long nodendx = 0;
-
- if (sxe->iter.type == SXE_ITER_NONE) {
- return NULL;
- }
- while (node && nodendx <= offset) {
- SKIP_TEXT(node)
- if (node->type == XML_ELEMENT_NODE && match_ns(sxe, node, sxe->iter.nsprefix)) {
- if (sxe->iter.type == SXE_ITER_CHILD || (
- sxe->iter.type == SXE_ITER_ELEMENT && !xmlStrcmp(node->name, sxe->iter.name))) {
- if (nodendx == offset) {
- break;
- }
- nodendx++;
- }
- }
-next_iter:
- node = node->next;
- }
-
- return node;
-}
-/* }}} */
-
-/* {{{ sxe_prop_dim_read()
- */
-static zval * sxe_prop_dim_read(zval *object, zval *member, zend_bool elements, zend_bool attribs, zend_bool silent TSRMLS_DC)
-{
- zval *return_value;
- php_sxe_object *sxe;
- char *name;
- xmlNodePtr node;
- xmlAttrPtr attr;
- zval tmp_zv;
- int nodendx = 0;
-
- sxe = php_sxe_fetch_object(object TSRMLS_CC);
-
- if (Z_TYPE_P(member) == IS_LONG) {
- if (sxe->iter.type != SXE_ITER_ATTRLIST) {
- attribs = 0;
- elements = 1;
- }
- } else {
- if (Z_TYPE_P(member) != IS_STRING) {
- tmp_zv = *member;
- zval_copy_ctor(&tmp_zv);
- member = &tmp_zv;
- convert_to_string(member);
- }
- }
-
- MAKE_STD_ZVAL(return_value);
- ZVAL_NULL(return_value);
-
- name = Z_STRVAL_P(member);
-
- GET_NODE(sxe, node);
-
- if (sxe->iter.type != SXE_ITER_CHILD && sxe->iter.type != SXE_ITER_ATTRLIST) {
- node = php_sxe_get_first_node(sxe, node TSRMLS_CC);
- }
-
- if (node) {
- if (attribs) {
- if (Z_TYPE_P(member) == IS_LONG && sxe->iter.type != SXE_ITER_ATTRLIST) {
- attr = NULL;
- } else {
- attr = node->properties;
- if (Z_TYPE_P(member) == IS_LONG) {
- while (attr && nodendx <= Z_LVAL_P(member)) {
- if (match_ns(sxe, (xmlNodePtr) attr, sxe->iter.nsprefix)) {
- if (nodendx == Z_LVAL_P(member)) {
- _node_as_zval(sxe, (xmlNodePtr) attr, return_value, SXE_ITER_NONE, NULL, sxe->iter.nsprefix TSRMLS_CC);
- break;
- }
- nodendx++;
- }
- attr = attr->next;
- }
- } else {
- while (attr) {
- if (!xmlStrcmp(attr->name, name) && match_ns(sxe, (xmlNodePtr) attr, sxe->iter.nsprefix)) {
- _node_as_zval(sxe, (xmlNodePtr) attr, return_value, SXE_ITER_NONE, NULL, sxe->iter.nsprefix TSRMLS_CC);
- break;
- }
- attr = attr->next;
- }
- }
- }
- }
-
- if (elements) {
- if (!sxe->node) {
- php_libxml_increment_node_ptr((php_libxml_node_object *)sxe, node, NULL TSRMLS_CC);
- }
- if (Z_TYPE_P(member) == IS_LONG) {
- if (sxe->iter.type == SXE_ITER_CHILD) {
- node = php_sxe_get_first_node(sxe, node TSRMLS_CC);
- }
- node = sxe_get_element_by_offset(sxe, Z_LVAL_P(member), node);
- if (node) {
- _node_as_zval(sxe, node, return_value, SXE_ITER_NONE, NULL, sxe->iter.nsprefix TSRMLS_CC);
- }
- } else {
- _node_as_zval(sxe, node, return_value, SXE_ITER_ELEMENT, name, sxe->iter.nsprefix TSRMLS_CC);
- }
- }
- }
-
- return_value->refcount = 0;
- return_value->is_ref = 0;
-
- if (member == &tmp_zv) {
- zval_dtor(&tmp_zv);
- }
-
- return return_value;
-}
-/* }}} */
-
-/* {{{ sxe_property_read()
- */
-static zval * sxe_property_read(zval *object, zval *member, int type TSRMLS_DC)
-{
- return sxe_prop_dim_read(object, member, 1, 0, type == BP_VAR_IS TSRMLS_CC);
-}
-/* }}} */
-
-/* {{{ sxe_dimension_read()
- */
-static zval * sxe_dimension_read(zval *object, zval *offset, int type TSRMLS_DC)
-{
- return sxe_prop_dim_read(object, offset, 0, 1, 0 TSRMLS_CC);
-}
-/* }}} */
-
-/* {{{ change_node_zval()
- */
-static void change_node_zval(xmlNodePtr node, zval *value TSRMLS_DC)
-{
- zval value_copy;
-
- switch (Z_TYPE_P(value)) {
- case IS_LONG:
- case IS_BOOL:
- case IS_DOUBLE:
- case IS_NULL:
- if (value->refcount > 1) {
- value_copy = *value;
- zval_copy_ctor(&value_copy);
- value = &value_copy;
- }
- convert_to_string(value);
- /* break missing intentionally */
- case IS_STRING:
- xmlNodeSetContentLen(node, Z_STRVAL_P(value), Z_STRLEN_P(value));
- if (value == &value_copy) {
- zval_dtor(value);
- }
- break;
- default:
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "It is not possible to assign complex types to nodes");
- break;
- }
-}
-/* }}} */
-
-/* {{{ sxe_property_write()
- */
-static void sxe_prop_dim_write(zval *object, zval *member, zval *value, zend_bool elements, zend_bool attribs TSRMLS_DC)
-{
- php_sxe_object *sxe;
- char *name;
- xmlNodePtr node;
- xmlNodePtr newnode = NULL;
- xmlNodePtr tempnode;
- xmlAttrPtr attr = NULL;
- int counter = 0;
- int is_attr = 0;
- int nodendx = 0;
- zval tmp_zv, trim_zv;
-
- if (!member) {
- /* This happens when the user did: $sxe[] = $value
- * and could also be E_PARSE, but we use this only during parsing
- * and this is during runtime.
- */
- php_error_docref(NULL TSRMLS_CC, E_ERROR, "Cannot create unnamed attribute");
- return;
- }
-
-
- sxe = php_sxe_fetch_object(object TSRMLS_CC);
-
- if (Z_TYPE_P(member) == IS_LONG) {
- if (sxe->iter.type != SXE_ITER_ATTRLIST) {
- attribs = 0;
- elements = 1;
- }
- } else {
- if (Z_TYPE_P(member) != IS_STRING) {
- trim_zv = *member;
- zval_copy_ctor(&trim_zv);
- convert_to_string(&trim_zv);
- php_trim(Z_STRVAL(trim_zv), Z_STRLEN(trim_zv), NULL, 0, &tmp_zv, 3 TSRMLS_CC);
- zval_dtor(&trim_zv);
- member = &tmp_zv;
- }
-
- if (!Z_STRLEN_P(member)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Cannot write or create unnamed %s", attribs ? "attribute" : "element");
- if (member == &tmp_zv) {
- zval_dtor(&tmp_zv);
- }
- return;
- }
- }
-
- name = Z_STRVAL_P(member);
-
- GET_NODE(sxe, node);
-
- if (sxe->iter.type != SXE_ITER_ATTRLIST) {
- node = php_sxe_get_first_node(sxe, node TSRMLS_CC);
- }
-
- if (node) {
- if (attribs) {
- attr = node->properties;
- if (Z_TYPE_P(member) == IS_LONG) {
- while (attr && nodendx <= Z_LVAL_P(member)) {
- if (match_ns(sxe, (xmlNodePtr) attr, sxe->iter.nsprefix)) {
- if (nodendx == Z_LVAL_P(member)) {
- is_attr = 1;
- ++counter;
- break;
- }
- nodendx++;
- }
- attr = attr->next;
- }
- } else {
- while (attr) {
- if (!xmlStrcmp(attr->name, name) && match_ns(sxe, (xmlNodePtr) attr, sxe->iter.nsprefix)) {
- is_attr = 1;
- ++counter;
- break;
- }
- attr = attr->next;
- }
- }
-
- }
-
- if (elements) {
- if (Z_TYPE_P(member) == IS_LONG) {
- newnode = sxe_get_element_by_offset(sxe, Z_LVAL_P(member), node);
- if (newnode) {
- ++counter;
- }
- } else {
- node = node->children;
- while (node) {
- SKIP_TEXT(node);
-
- if (!xmlStrcmp(node->name, name)) {
- newnode = node;
- ++counter;
- }
-
-next_iter:
- node = node->next;
- }
- }
- }
-
- if (counter == 1) {
- if (is_attr) {
- newnode = (xmlNodePtr) attr;
- }
- while ((tempnode = (xmlNodePtr) newnode->children)) {
- xmlUnlinkNode(tempnode);
- php_libxml_node_free_resource((xmlNodePtr) tempnode TSRMLS_CC);
- }
- change_node_zval(newnode, value TSRMLS_CC);
- } else if (counter > 1) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Cannot assign to an array of nodes (duplicate subnodes or attr detected)\n");
- } else {
- if (attribs) {
- switch (Z_TYPE_P(value)) {
- case IS_LONG:
- case IS_BOOL:
- case IS_DOUBLE:
- case IS_NULL:
- convert_to_string(value);
- case IS_STRING:
- newnode = (xmlNodePtr)xmlNewProp(node, name, Z_STRVAL_P(value));
- break;
- default:
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "It is not yet possible to assign complex types to attributes");
- }
- }
- }
- }
-
- if (member == &tmp_zv) {
- zval_dtor(&tmp_zv);
- }
-}
-/* }}} */
-
-/* {{{ sxe_property_write()
- */
-static void sxe_property_write(zval *object, zval *member, zval *value TSRMLS_DC)
-{
- sxe_prop_dim_write(object, member, value, 1, 0 TSRMLS_CC);
-}
-/* }}} */
-
-/* {{{ sxe_dimension_write()
- */
-static void sxe_dimension_write(zval *object, zval *offset, zval *value TSRMLS_DC)
-{
- sxe_prop_dim_write(object, offset, value, 0, 1 TSRMLS_CC);
-}
-/* }}} */
-
-/* {{{ sxe_prop_dim_exists()
- */
-static int sxe_prop_dim_exists(zval *object, zval *member, int check_empty, zend_bool elements, zend_bool attribs TSRMLS_DC)
-{
- php_sxe_object *sxe;
- char *name;
- xmlNodePtr node;
- xmlAttrPtr attr = NULL;
- int exists = 0;
-
- sxe = php_sxe_fetch_object(object TSRMLS_CC);
-
- name = Z_STRVAL_P(member);
-
- GET_NODE(sxe, node);
-
- if (Z_TYPE_P(member) == IS_LONG) {
- if (sxe->iter.type != SXE_ITER_ATTRLIST) {
- attribs = 0;
- elements = 1;
- if (sxe->iter.type == SXE_ITER_CHILD) {
- node = php_sxe_get_first_node(sxe, node TSRMLS_CC);
- }
- }
- }
-
- if (sxe->iter.type != SXE_ITER_CHILD && sxe->iter.type != SXE_ITER_ATTRLIST) {
- node = php_sxe_get_first_node(sxe, node TSRMLS_CC);
- }
-
- if (node) {
- if (attribs) {
- attr = node->properties;
- while (attr) {
- if (!xmlStrcmp(attr->name, name) && match_ns(sxe, (xmlNodePtr) attr, sxe->iter.nsprefix)) {
- exists = 1;
- break;
- }
-
- attr = attr->next;
- }
- }
-
- if (elements) {
- if (Z_TYPE_P(member) == IS_LONG) {
- if (sxe->iter.type == SXE_ITER_CHILD) {
- node = php_sxe_get_first_node(sxe, node TSRMLS_CC);
- }
- node = sxe_get_element_by_offset(sxe, Z_LVAL_P(member), node);
- }
- else {
- if (Z_TYPE_P(member) != IS_STRING) {
- zval tmp_zv = *member;
- zval_copy_ctor(&tmp_zv);
- member = &tmp_zv;
- convert_to_string(member);
- }
- node = node->children;
- while (node) {
- xmlNodePtr nnext;
- nnext = node->next;
- if (!xmlStrcmp(node->name, Z_STRVAL_P(member))) {
- break;
- }
- node = nnext;
- }
- }
- if (node) {
- exists = 1;
- }
- }
- }
-
- return exists;
-}
-/* }}} */
-
-/* {{{ sxe_property_exists()
- */
-static int sxe_property_exists(zval *object, zval *member, int check_empty TSRMLS_DC)
-{
- return sxe_prop_dim_exists(object, member, check_empty, 1, 0 TSRMLS_CC);
-}
-/* }}} */
-
-/* {{{ sxe_property_exists()
- */
-static int sxe_dimension_exists(zval *object, zval *member, int check_empty TSRMLS_DC)
-{
- return sxe_prop_dim_exists(object, member, check_empty, 0, 1 TSRMLS_CC);
-}
-/* }}} */
-
-/* {{{ sxe_prop_dim_delete()
- */
-static void sxe_prop_dim_delete(zval *object, zval *member, zend_bool elements, zend_bool attribs TSRMLS_DC)
-{
- php_sxe_object *sxe;
- xmlNodePtr node;
- xmlNodePtr nnext;
- xmlAttrPtr attr;
- xmlAttrPtr anext;
- zval tmp_zv;
-
- if (Z_TYPE_P(member) != IS_STRING) {
- tmp_zv = *member;
- zval_copy_ctor(&tmp_zv);
- member = &tmp_zv;
- convert_to_string(member);
- }
-
- sxe = php_sxe_fetch_object(object TSRMLS_CC);
-
- GET_NODE(sxe, node);
- node = php_sxe_get_first_node(sxe, node TSRMLS_CC);
-
- if (node) {
- if (attribs) {
- attr = node->properties;
- while (attr) {
- anext = attr->next;
- if (!xmlStrcmp(attr->name, Z_STRVAL_P(member)) && match_ns(sxe, (xmlNodePtr) attr, sxe->iter.nsprefix)) {
- xmlUnlinkNode((xmlNodePtr) attr);
- php_libxml_node_free_resource((xmlNodePtr) attr TSRMLS_CC);
- break;
- }
- attr = anext;
- }
- }
-
- if (elements) {
- node = node->children;
- while (node) {
- nnext = node->next;
-
- SKIP_TEXT(node);
-
- if (!xmlStrcmp(node->name, Z_STRVAL_P(member))) {
- xmlUnlinkNode(node);
- php_libxml_node_free_resource(node TSRMLS_CC);
- }
-
-next_iter:
- node = nnext;
- }
- }
- }
-
- if (member == &tmp_zv) {
- zval_dtor(&tmp_zv);
- }
-}
-/* }}} */
-
-/* {{{ sxe_property_delete()
- */
-static void sxe_property_delete(zval *object, zval *member TSRMLS_DC)
-{
- sxe_prop_dim_delete(object, member, 1, 0 TSRMLS_CC);
-}
-/* }}} */
-
-/* {{{ sxe_dimension_unset()
- */
-static void sxe_dimension_delete(zval *object, zval *offset TSRMLS_DC)
-{
- sxe_prop_dim_delete(object, offset, 0, 1 TSRMLS_CC);
-}
-/* }}} */
-
-/* {{{ _get_base_node_value()
- */
-static void
-_get_base_node_value(php_sxe_object *sxe_ref, xmlNodePtr node, zval **value TSRMLS_DC)
-{
- php_sxe_object *subnode;
- xmlChar *contents;
-
- MAKE_STD_ZVAL(*value);
-
- if (node->children && node->children->type == XML_TEXT_NODE && !xmlIsBlankNode(node->children)) {
- contents = xmlNodeListGetString(node->doc, node->children, 1);
- if (contents) {
- ZVAL_STRING(*value, contents, 1);
- xmlFree(contents);
- }
- } else {
- subnode = php_sxe_object_new(sxe_ref->zo.ce TSRMLS_CC);
- subnode->document = sxe_ref->document;
- subnode->document->refcount++;
- php_libxml_increment_node_ptr((php_libxml_node_object *)subnode, node, NULL TSRMLS_CC);
-
- (*value)->type = IS_OBJECT;
- (*value)->value.obj = php_sxe_register_object(subnode TSRMLS_CC);
- /*zval_add_ref(value);*/
- }
-}
-/* }}} */
-
-/* {{{ sxe_properties_get()
- */
-static HashTable *
-sxe_properties_get(zval *object TSRMLS_DC)
-{
- zval **data_ptr;
- zval *value;
- zval *newptr;
- HashTable *rv;
- php_sxe_object *sxe;
- char *name;
- xmlNodePtr node;
- ulong h;
- int namelen;
-
- sxe = php_sxe_fetch_object(object TSRMLS_CC);
-
- if (sxe->properties) {
- zend_hash_clean(sxe->properties);
- rv = sxe->properties;
- } else {
- ALLOC_HASHTABLE(rv);
- zend_hash_init(rv, 0, NULL, ZVAL_PTR_DTOR, 0);
- sxe->properties = rv;
- }
-
- GET_NODE(sxe, node);
- node = php_sxe_get_first_node(sxe, node TSRMLS_CC);
-
- if (node) {
- node = node->children;
-
- while (node) {
- if (node->children != NULL || node->prev != NULL || node->next != NULL) {
- SKIP_TEXT(node);
- } else {
- if (node->type == XML_TEXT_NODE) {
- MAKE_STD_ZVAL(value);
- ZVAL_STRING(value, xmlNodeListGetString(node->doc, node, 1), 1);
- zend_hash_next_index_insert(rv, &value, sizeof(zval *), NULL);
- goto next_iter;
- }
- }
-
- name = (char *) node->name;
- if (!name) {
- goto next_iter;
- } else {
- namelen = xmlStrlen(node->name) + 1;
- }
-
- _get_base_node_value(sxe, node, &value TSRMLS_CC);
-
- h = zend_hash_func(name, namelen);
- if (zend_hash_quick_find(rv, name, namelen, h, (void **) &data_ptr) == SUCCESS) {
- if (Z_TYPE_PP(data_ptr) == IS_ARRAY) {
- zend_hash_next_index_insert(Z_ARRVAL_PP(data_ptr), &value, sizeof(zval *), NULL);
- } else {
- MAKE_STD_ZVAL(newptr);
- array_init(newptr);
-
- zval_add_ref(data_ptr);
- zend_hash_next_index_insert(Z_ARRVAL_P(newptr), data_ptr, sizeof(zval *), NULL);
- zend_hash_next_index_insert(Z_ARRVAL_P(newptr), &value, sizeof(zval *), NULL);
-
- zend_hash_quick_update(rv, name, namelen, h, &newptr, sizeof(zval *), NULL);
- }
- } else {
- zend_hash_quick_update(rv, name, namelen, h, &value, sizeof(zval *), NULL);
- }
-
-next_iter:
- node = node->next;
- }
- }
-
- return rv;
-}
-/* }}} */
-
-/* {{{ sxe_objects_compare()
- */
-static int
-sxe_objects_compare(zval *object1, zval *object2 TSRMLS_DC)
-{
- php_sxe_object *sxe1;
- php_sxe_object *sxe2;
-
- sxe1 = php_sxe_fetch_object(object1 TSRMLS_CC);
- sxe2 = php_sxe_fetch_object(object2 TSRMLS_CC);
-
- if (sxe1->node == NULL) {
- if (sxe2->node) {
- return 1;
- } else if (sxe1->document->ptr == sxe2->document->ptr) {
- return 0;
- }
- } else {
- return !(sxe1->node == sxe2->node);
- }
- return 1;
-}
-/* }}} */
-
-/* {{{ array SimpleXMLElement::xpath(string path)
- Runs XPath query on the XML data */
-SXE_METHOD(xpath)
-{
- php_sxe_object *sxe;
- zval *value;
- char *query;
- int query_len;
- int i;
- int nsnbr = 0;
- xmlNsPtr *ns = NULL;
- xmlXPathObjectPtr retval;
- xmlNodeSetPtr result;
- xmlNodePtr nodeptr;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &query, &query_len) == FAILURE) {
- return;
- }
-
- sxe = php_sxe_fetch_object(getThis() TSRMLS_CC);
- if (!sxe->xpath) {
- sxe->xpath = xmlXPathNewContext((xmlDocPtr) sxe->document->ptr);
- }
- if (!sxe->node) {
- php_libxml_increment_node_ptr((php_libxml_node_object *)sxe, xmlDocGetRootElement((xmlDocPtr) sxe->document->ptr), NULL TSRMLS_CC);
- }
-
- sxe->xpath->node = sxe->node->node;
-
- ns = xmlGetNsList((xmlDocPtr) sxe->document->ptr, (xmlNodePtr) sxe->node->node);
- if (ns != NULL) {
- while (ns[nsnbr] != NULL) {
- nsnbr++;
- }
- }
-
- sxe->xpath->namespaces = ns;
- sxe->xpath->nsNr = nsnbr;
-
- retval = xmlXPathEval(query, sxe->xpath);
- if (ns != NULL) {
- xmlFree(ns);
- sxe->xpath->namespaces = NULL;
- sxe->xpath->nsNr = 0;
- }
-
- if (!retval) {
- RETURN_FALSE;
- }
-
- result = retval->nodesetval;
- if (!result) {
- xmlXPathFreeObject(retval);
- RETURN_FALSE;
- }
-
- array_init(return_value);
-
- for (i = 0; i < result->nodeNr; ++i) {
- nodeptr = result->nodeTab[i];
- if (nodeptr->type == XML_TEXT_NODE || nodeptr->type == XML_ELEMENT_NODE || nodeptr->type == XML_ATTRIBUTE_NODE) {
- MAKE_STD_ZVAL(value);
- /**
- * Detect the case where the last selector is text(), simplexml
- * always accesses the text() child by default, therefore we assign
- * to the parent node.
- */
- if (nodeptr->type == XML_TEXT_NODE) {
- _node_as_zval(sxe, nodeptr->parent, value, SXE_ITER_NONE, NULL, NULL TSRMLS_CC);
- } else {
- _node_as_zval(sxe, nodeptr, value, SXE_ITER_NONE, NULL, NULL TSRMLS_CC);
- }
-
- add_next_index_zval(return_value, value);
- }
- }
-
- xmlXPathFreeObject(retval);
-}
-
-SXE_METHOD(registerXPathNamespace)
-{
- php_sxe_object *sxe;
- int prefix_len, ns_uri_len;
- char *prefix, *ns_uri;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ss", &prefix, &prefix_len, &ns_uri, &ns_uri_len) == FAILURE) {
- return;
- }
-
- sxe = php_sxe_fetch_object(getThis() TSRMLS_CC);
- if (!sxe->xpath) {
- sxe->xpath = xmlXPathNewContext((xmlDocPtr) sxe->document->ptr);
- }
-
- if (xmlXPathRegisterNs(sxe->xpath, prefix, ns_uri) != 0) {
- RETURN_FALSE
- }
- RETURN_TRUE;
-}
-
-/* }}} */
-
-/* {{{ proto string SimpleXMLElement::asXML([string filename])
- Return a well-formed XML string based on SimpleXML element */
-SXE_METHOD(asXML)
-{
- php_sxe_object *sxe;
- xmlNodePtr node;
- xmlOutputBufferPtr outbuf;
- xmlChar *strval;
- int strval_len;
- char *filename;
- int filename_len;
-
- if (ZEND_NUM_ARGS() > 1) {
- RETURN_FALSE;
- }
-
- if (ZEND_NUM_ARGS() == 1) {
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &filename, &filename_len) == FAILURE) {
- RETURN_FALSE;
- }
-
- sxe = php_sxe_fetch_object(getThis() TSRMLS_CC);
- GET_NODE(sxe, node);
- node = php_sxe_get_first_node(sxe, node TSRMLS_CC);
-
- if (node) {
- if (XML_DOCUMENT_NODE == node->parent->type) {
- xmlSaveFile(filename, (xmlDocPtr) sxe->document->ptr);
- } else {
- outbuf = xmlOutputBufferCreateFilename(filename, NULL, 0);
-
- if (outbuf == NULL) {
- RETURN_FALSE;
- }
-
- xmlNodeDumpOutput(outbuf, (xmlDocPtr) sxe->document->ptr, node, 0, 1, NULL);
- xmlOutputBufferClose(outbuf);
- RETURN_TRUE;
- }
- } else {
- RETURN_FALSE;
- }
- }
-
- sxe = php_sxe_fetch_object(getThis() TSRMLS_CC);
- GET_NODE(sxe, node);
- node = php_sxe_get_first_node(sxe, node TSRMLS_CC);
-
- if (node) {
- if (XML_DOCUMENT_NODE == node->parent->type) {
- xmlDocDumpMemory((xmlDocPtr) sxe->document->ptr, &strval, &strval_len);
- } else {
- /* Should we be passing encoding information instead of NULL? */
- outbuf = xmlAllocOutputBuffer(NULL);
-
- if (outbuf == NULL) {
- RETURN_FALSE;
- }
-
- xmlNodeDumpOutput(outbuf, (xmlDocPtr) sxe->document->ptr, node, 0, 1, ((xmlDocPtr) sxe->document->ptr)->encoding);
- xmlOutputBufferFlush(outbuf);
- strval = xmlStrndup(outbuf->buffer->content, outbuf->buffer->use);
- xmlOutputBufferClose(outbuf);
- }
-
- RETVAL_STRINGL(strval, strlen(strval), 1);
- xmlFree(strval);
- } else {
- RETVAL_FALSE;
- }
-}
-/* }}} */
-
-/* {{{ proto object SimpleXMLElement::children()
- Finds children of given node */
-SXE_METHOD(children)
-{
- php_sxe_object *sxe;
- char *nsprefix = NULL;
- int nsprefix_len;
- xmlNodePtr node;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|s!", &nsprefix, &nsprefix_len) == FAILURE) {
- return;
- }
-
- sxe = php_sxe_fetch_object(getThis() TSRMLS_CC);
- GET_NODE(sxe, node);
- node = php_sxe_get_first_node(sxe, node TSRMLS_CC);
-
- _node_as_zval(sxe, node, return_value, SXE_ITER_CHILD, NULL, nsprefix TSRMLS_CC);
-
-}
-/* }}} */
-
-/* {{{ proto array SimpleXMLElement::attributes([string ns])
- Identifies an element's attributes */
-SXE_METHOD(attributes)
-{
- php_sxe_object *sxe;
- char *nsprefix = NULL;
- int nsprefix_len;
- xmlNodePtr node;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|s!", &nsprefix, &nsprefix_len) == FAILURE) {
- return;
- }
-
- sxe = php_sxe_fetch_object(getThis() TSRMLS_CC);
- GET_NODE(sxe, node);
- node = php_sxe_get_first_node(sxe, node TSRMLS_CC);
-
- _node_as_zval(sxe, node, return_value, SXE_ITER_ATTRLIST, NULL, nsprefix TSRMLS_CC);
-}
-/* }}} */
-
-/* {{{ cast_object()
- */
-static int
-cast_object(zval *object, int type, char *contents TSRMLS_DC)
-{
- if (contents) {
- ZVAL_STRINGL(object, contents, strlen(contents), 1);
- } else {
- ZVAL_NULL(object);
- }
- object->refcount = 1;
- object->is_ref = 0;
-
- switch (type) {
- case IS_STRING:
- convert_to_string(object);
- break;
- case IS_BOOL:
- convert_to_boolean(object);
- break;
- case IS_LONG:
- convert_to_long(object);
- break;
- case IS_DOUBLE:
- convert_to_double(object);
- break;
- default:
- return FAILURE;
- }
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ sxe_object_cast()
- */
-static int
-sxe_object_cast(zval *readobj, zval *writeobj, int type, int should_free TSRMLS_DC)
-{
- php_sxe_object *sxe;
- char *contents = NULL;
- xmlNodePtr node;
- zval free_obj;
- int rv;
-
- sxe = php_sxe_fetch_object(readobj TSRMLS_CC);
-
- if (should_free) {
- free_obj = *writeobj;
- }
-
- if (sxe->iter.type != SXE_ITER_NONE) {
- node = php_sxe_get_first_node(sxe, NULL TSRMLS_CC);
- if (node) {
- contents = xmlNodeListGetString((xmlDocPtr) sxe->document->ptr, node->children, 1);
- }
- } else {
- if (!sxe->node) {
- if (sxe->document) {
- php_libxml_increment_node_ptr((php_libxml_node_object *)sxe, xmlDocGetRootElement((xmlDocPtr) sxe->document->ptr), NULL TSRMLS_CC);
- }
- }
-
- if (sxe->node && sxe->node->node) {
- if (sxe->node->node->children) {
- contents = xmlNodeListGetString((xmlDocPtr) sxe->document->ptr, sxe->node->node->children, 1);
- }
- }
- }
-
- rv = cast_object(writeobj, type, contents TSRMLS_CC);
-
- if (contents) {
- xmlFree(contents);
- }
- if (should_free) {
- zval_dtor(&free_obj);
- }
- return rv;
-}
-/* }}} */
-
-static zval *sxe_get_value(zval *z TSRMLS_DC)
-{
- zval *retval;
-
- MAKE_STD_ZVAL(retval);
-
- if (sxe_object_cast(z, retval, IS_STRING, 0 TSRMLS_CC)==FAILURE) {
- zend_error(E_ERROR, "Unable to cast node to string");
- }
-
- retval->refcount = 0;
- return retval;
-}
-
-
-static zend_object_handlers sxe_object_handlers = {
- ZEND_OBJECTS_STORE_HANDLERS,
- sxe_property_read,
- sxe_property_write,
- sxe_dimension_read,
- sxe_dimension_write,
- NULL,
- sxe_get_value, /* get */
- NULL,
- sxe_property_exists,
- sxe_property_delete,
- sxe_dimension_exists,
- sxe_dimension_delete,
- sxe_properties_get,
- NULL, /* zend_get_std_object_handlers()->get_method,*/
- NULL, /* zend_get_std_object_handlers()->call_method,*/
- NULL, /* zend_get_std_object_handlers()->get_constructor, */
- NULL, /* zend_get_std_object_handlers()->get_class_entry,*/
- NULL, /* zend_get_std_object_handlers()->get_class_name,*/
- sxe_objects_compare,
- sxe_object_cast,
- NULL
-};
-
-static zend_object_handlers sxe_ze1_object_handlers = {
- ZEND_OBJECTS_STORE_HANDLERS,
- sxe_property_read,
- sxe_property_write,
- sxe_dimension_read,
- sxe_dimension_write,
- NULL,
- sxe_get_value, /* get */
- NULL,
- sxe_property_exists,
- sxe_property_delete,
- sxe_dimension_exists,
- sxe_dimension_delete,
- sxe_properties_get,
- NULL, /* zend_get_std_object_handlers()->get_method,*/
- NULL, /* zend_get_std_object_handlers()->call_method,*/
- NULL, /* zend_get_std_object_handlers()->get_constructor, */
- NULL, /* zend_get_std_object_handlers()->get_class_entry,*/
- NULL, /* zend_get_std_object_handlers()->get_class_name,*/
- sxe_objects_compare,
- sxe_object_cast,
- NULL
-};
-
-static zend_object_value sxe_object_ze1_clone(zval *zobject TSRMLS_DC)
-{
- php_error(E_ERROR, "Cannot clone object of class %s due to 'zend.ze1_compatibility_mode'", Z_OBJCE_P(zobject)->name);
- /* Return zobject->value.obj just to satisfy compiler */
- return zobject->value.obj;
-}
-
-/* {{{ sxe_object_clone()
- */
-static void
-sxe_object_clone(void *object, void **clone_ptr TSRMLS_DC)
-{
- php_sxe_object *sxe = (php_sxe_object *) object;
- php_sxe_object *clone;
- xmlNodePtr nodep = NULL;
- xmlDocPtr docp = NULL;
-
- clone = php_sxe_object_new(sxe->zo.ce TSRMLS_CC);
- clone->document = sxe->document;
- if (clone->document) {
- clone->document->refcount++;
- docp = clone->document->ptr;
- }
- if (sxe->node) {
- nodep = xmlDocCopyNode(sxe->node->node, docp, 1);
- }
-
- php_libxml_increment_node_ptr((php_libxml_node_object *)clone, nodep, NULL TSRMLS_CC);
-
- *clone_ptr = (void *) clone;
-}
-/* }}} */
-
-/* {{{ sxe_object_dtor()
- */
-static void sxe_object_dtor(void *object, zend_object_handle handle TSRMLS_DC)
-{
- /* dtor required to cleanup iterator related data properly */
-
- php_sxe_object *sxe;
-
- sxe = (php_sxe_object *) object;
-
- if (sxe->iter.data) {
- zval_ptr_dtor(&sxe->iter.data);
- sxe->iter.data = NULL;
- }
-
- if (sxe->iter.name) {
- xmlFree(sxe->iter.name);
- sxe->iter.name = NULL;
- }
- if (sxe->iter.nsprefix) {
- xmlFree(sxe->iter.nsprefix);
- sxe->iter.nsprefix = NULL;
- }
-}
-
-/* {{{ sxe_object_free_storage()
- */
-static void sxe_object_free_storage(void *object TSRMLS_DC)
-{
- php_sxe_object *sxe;
-
- sxe = (php_sxe_object *) object;
-
- zend_hash_destroy(sxe->zo.properties);
- FREE_HASHTABLE(sxe->zo.properties);
-
- php_libxml_node_decrement_resource((php_libxml_node_object *)sxe TSRMLS_CC);
-
- if (sxe->xpath) {
- xmlXPathFreeContext(sxe->xpath);
- }
-
- if (sxe->properties) {
- zend_hash_destroy(sxe->properties);
- FREE_HASHTABLE(sxe->properties);
- }
-
- efree(object);
-}
-/* }}} */
-
-/* {{{ php_sxe_object_new()
- */
-static php_sxe_object* php_sxe_object_new(zend_class_entry *ce TSRMLS_DC)
-{
- php_sxe_object *intern;
-
- intern = ecalloc(1, sizeof(php_sxe_object));
- intern->zo.ce = ce;
-
- intern->iter.type = SXE_ITER_NONE;
- intern->iter.nsprefix = NULL;
- intern->iter.name = NULL;
-
- ALLOC_HASHTABLE(intern->zo.properties);
- zend_hash_init(intern->zo.properties, 0, NULL, ZVAL_PTR_DTOR, 0);
-
- return intern;
-}
-/* }}} */
-
-/* {{{ php_sxe_register_object
- */
-static zend_object_value
-php_sxe_register_object(php_sxe_object *intern TSRMLS_DC)
-{
- zend_object_value rv;
-
- rv.handle = zend_objects_store_put(intern, sxe_object_dtor, (zend_objects_free_object_storage_t)sxe_object_free_storage, sxe_object_clone TSRMLS_CC);
- if (EG(ze1_compatibility_mode)) {
- rv.handlers = (zend_object_handlers *) &sxe_ze1_object_handlers;
- } else {
- rv.handlers = (zend_object_handlers *) &sxe_object_handlers;
- }
-
- return rv;
-}
-/* }}} */
-
-/* {{{ sxe_object_new()
- */
-ZEND_API zend_object_value
-sxe_object_new(zend_class_entry *ce TSRMLS_DC)
-{
- php_sxe_object *intern;
-
- intern = php_sxe_object_new(ce TSRMLS_CC);
- return php_sxe_register_object(intern TSRMLS_CC);
-}
-/* }}} */
-
-/* {{{ proto simplemxml_element simplexml_load_file(string filename [, string class_name])
- Load a filename and return a simplexml_element object to allow for processing */
-PHP_FUNCTION(simplexml_load_file)
-{
- php_sxe_object *sxe;
- char *filename;
- int filename_len;
- xmlDocPtr docp;
- char *classname = "";
- int classname_len = 0;
- zend_class_entry *ce= sxe_class_entry;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|s", &filename, &filename_len, &classname, &classname_len) == FAILURE) {
- return;
- }
-
- docp = xmlParseFile(filename);
- if (! docp) {
- RETURN_FALSE;
- }
-
- if (classname_len) {
- zend_class_entry **pce;
- if (zend_lookup_class(classname, classname_len, &pce TSRMLS_CC) == FAILURE) {
- php_error_docref(NULL TSRMLS_CC, E_ERROR, "Class %s does not exist", classname);
- }
- ce = *pce;
- }
-
- sxe = php_sxe_object_new(ce TSRMLS_CC);
- php_libxml_increment_doc_ref((php_libxml_node_object *)sxe, docp TSRMLS_CC);
- php_libxml_increment_node_ptr((php_libxml_node_object *)sxe, xmlDocGetRootElement(docp), NULL TSRMLS_CC);
-
- return_value->type = IS_OBJECT;
- return_value->value.obj = php_sxe_register_object(sxe TSRMLS_CC);
-}
-/* }}} */
-
-/* {{{ proto simplemxml_element simplexml_load_string(string data [, string class_name])
- Load a string and return a simplexml_element object to allow for processing */
-PHP_FUNCTION(simplexml_load_string)
-{
- php_sxe_object *sxe;
- char *data;
- int data_len;
- xmlDocPtr docp;
- char *classname = "";
- int classname_len = 0;
- zend_class_entry *ce= sxe_class_entry;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|s", &data, &data_len, &classname, &classname_len) == FAILURE) {
- return;
- }
-
- docp = xmlParseMemory(data, data_len);
- if (! docp) {
- RETURN_FALSE;
- }
-
- if (classname_len) {
- zend_class_entry **pce;
- if (zend_lookup_class(classname, classname_len, &pce TSRMLS_CC) == FAILURE) {
- php_error_docref(NULL TSRMLS_CC, E_ERROR, "Class %s does not exist", classname);
- }
- ce = *pce;
- }
-
- sxe = php_sxe_object_new(ce TSRMLS_CC);
- php_libxml_increment_doc_ref((php_libxml_node_object *)sxe, docp TSRMLS_CC);
- php_libxml_increment_node_ptr((php_libxml_node_object *)sxe, xmlDocGetRootElement(docp), NULL TSRMLS_CC);
-
- return_value->type = IS_OBJECT;
- return_value->value.obj = php_sxe_register_object(sxe TSRMLS_CC);
-}
-/* }}} */
-
-
-/* {{{ proto SimpleXMLElement::__construct()
- SimpleXMLElement constructor */
-SXE_METHOD(__construct)
-{
- php_sxe_object *sxe = php_sxe_fetch_object(getThis() TSRMLS_CC);
- char *data;
- int data_len;
- xmlDocPtr docp;
-
- php_set_error_handling(EH_THROW, zend_exception_get_default() TSRMLS_CC);
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &data, &data_len) == FAILURE) {
- php_std_error_handling();
- return;
- }
-
- php_std_error_handling();
- docp = xmlParseMemory(data, data_len);
- if (!docp) {
- ((php_libxml_node_object *)sxe)->document = NULL;
- zend_throw_exception(zend_exception_get_default(), "String could not be parsed as XML", 0 TSRMLS_CC);
- return;
- }
-
- php_libxml_increment_doc_ref((php_libxml_node_object *)sxe, docp TSRMLS_CC);
- php_libxml_increment_node_ptr((php_libxml_node_object *)sxe, xmlDocGetRootElement(docp), NULL TSRMLS_CC);
-}
-/* }}} */
-
-
-typedef struct {
- zend_object_iterator intern;
- php_sxe_object *sxe;
-} php_sxe_iterator;
-
-static void php_sxe_iterator_dtor(zend_object_iterator *iter TSRMLS_DC);
-static int php_sxe_iterator_valid(zend_object_iterator *iter TSRMLS_DC);
-static void php_sxe_iterator_current_data(zend_object_iterator *iter, zval ***data TSRMLS_DC);
-static int php_sxe_iterator_current_key(zend_object_iterator *iter, char **str_key, uint *str_key_len, ulong *int_key TSRMLS_DC);
-static void php_sxe_iterator_move_forward(zend_object_iterator *iter TSRMLS_DC);
-static void php_sxe_iterator_rewind(zend_object_iterator *iter TSRMLS_DC);
-
-zend_object_iterator_funcs php_sxe_iterator_funcs = {
- php_sxe_iterator_dtor,
- php_sxe_iterator_valid,
- php_sxe_iterator_current_data,
- php_sxe_iterator_current_key,
- php_sxe_iterator_move_forward,
- php_sxe_iterator_rewind,
-};
-
-ZEND_API void php_sxe_reset_iterator(php_sxe_object *sxe TSRMLS_DC)
-{
- xmlNodePtr node;
- char *prefix;
-
- if (sxe->iter.data) {
- zval_ptr_dtor(&sxe->iter.data);
- sxe->iter.data = NULL;
- }
-
- GET_NODE(sxe, node)
-
- if (node) {
- switch (sxe->iter.type) {
- case SXE_ITER_ELEMENT:
- case SXE_ITER_CHILD:
- case SXE_ITER_NONE:
- node = node->children;
- break;
- case SXE_ITER_ATTRLIST:
- node = (xmlNodePtr) node->properties;
- }
- }
-
- prefix = sxe->iter.nsprefix;
-
- while (node) {
- SKIP_TEXT(node);
- if (sxe->iter.type != SXE_ITER_ATTRLIST && node->type == XML_ELEMENT_NODE) {
- if (sxe->iter.type == SXE_ITER_ELEMENT) {
- if (!xmlStrcmp(node->name, sxe->iter.name) && match_ns(sxe, node, prefix)) {
- break;
- }
- } else {
- if (match_ns(sxe, node, prefix)) {
- break;
- }
- }
- } else {
- if (node->type == XML_ATTRIBUTE_NODE) {
- if (match_ns(sxe, node, sxe->iter.nsprefix)) {
- break;
- }
- }
- }
-next_iter:
- node = node->next;
- }
-
- if (node) {
- ALLOC_INIT_ZVAL(sxe->iter.data);
- _node_as_zval(sxe, node, sxe->iter.data, SXE_ITER_NONE, NULL, sxe->iter.nsprefix TSRMLS_CC);
- }
-}
-
-zend_object_iterator *php_sxe_get_iterator(zend_class_entry *ce, zval *object TSRMLS_DC)
-{
- php_sxe_iterator *iterator = emalloc(sizeof(php_sxe_iterator));
-
- object->refcount++;
- iterator->intern.data = (void*)object;
- iterator->intern.funcs = &php_sxe_iterator_funcs;
- iterator->sxe = php_sxe_fetch_object(object TSRMLS_CC);
-
- return (zend_object_iterator*)iterator;
-}
-
-static void php_sxe_iterator_dtor(zend_object_iterator *iter TSRMLS_DC)
-{
- php_sxe_iterator *iterator = (php_sxe_iterator *)iter;
-
- /* cleanup handled in sxe_object_dtor as we dont always have an iterator wrapper */
- if (iterator->intern.data) {
- zval_ptr_dtor((zval**)&iterator->intern.data);
- }
-
- efree(iterator);
-}
-
-static int php_sxe_iterator_valid(zend_object_iterator *iter TSRMLS_DC)
-{
- php_sxe_iterator *iterator = (php_sxe_iterator *)iter;
-
- return iterator->sxe->iter.data ? SUCCESS : FAILURE;
-}
-
-static void php_sxe_iterator_current_data(zend_object_iterator *iter, zval ***data TSRMLS_DC)
-{
- php_sxe_iterator *iterator = (php_sxe_iterator *)iter;
-
- *data = &iterator->sxe->iter.data;
-}
-
-static int php_sxe_iterator_current_key(zend_object_iterator *iter, char **str_key, uint *str_key_len, ulong *int_key TSRMLS_DC)
-{
- zval *curobj;
- xmlNodePtr curnode = NULL;
- php_sxe_object *intern;
- int namelen;
-
- php_sxe_iterator *iterator = (php_sxe_iterator *)iter;
- curobj = iterator->sxe->iter.data;
-
- intern = (php_sxe_object *)zend_object_store_get_object(curobj TSRMLS_CC);
- if (intern != NULL && intern->node != NULL) {
- curnode = (xmlNodePtr)((php_libxml_node_ptr *)intern->node)->node;
- }
-
- namelen = xmlStrlen(curnode->name);
- *str_key = estrndup(curnode->name, namelen);
- *str_key_len = namelen + 1;
- return HASH_KEY_IS_STRING;
-
-}
-
-ZEND_API void php_sxe_move_forward_iterator(php_sxe_object *sxe TSRMLS_DC)
-{
- xmlNodePtr node = NULL;
- php_sxe_object *intern;
- char *prefix;
-
- if (sxe->iter.data) {
- intern = (php_sxe_object *)zend_object_store_get_object(sxe->iter.data TSRMLS_CC);
- GET_NODE(intern, node)
- zval_ptr_dtor(&sxe->iter.data);
- sxe->iter.data = NULL;
- }
-
- if (node) {
- node = node->next;
- }
-
- prefix = sxe->iter.nsprefix;
-
- while (node) {
- SKIP_TEXT(node);
-
- if (sxe->iter.type != SXE_ITER_ATTRLIST && node->type == XML_ELEMENT_NODE) {
- if (sxe->iter.type == SXE_ITER_ELEMENT) {
- if (!xmlStrcmp(node->name, sxe->iter.name) && match_ns(sxe, node, prefix)) {
- break;
- }
- } else {
- if (match_ns(sxe, node, prefix)) {
- break;
- }
- }
- } else {
- if (node->type == XML_ATTRIBUTE_NODE) {
- if (match_ns(sxe, node, sxe->iter.nsprefix)) {
- break;
- }
- }
- }
-next_iter:
- node = node->next;
- }
-
- if (node) {
- ALLOC_INIT_ZVAL(sxe->iter.data);
- _node_as_zval(sxe, node, sxe->iter.data, SXE_ITER_NONE, NULL, sxe->iter.nsprefix TSRMLS_CC);
- }
-}
-
-static void php_sxe_iterator_move_forward(zend_object_iterator *iter TSRMLS_DC)
-{
- php_sxe_iterator *iterator = (php_sxe_iterator *)iter;
- php_sxe_move_forward_iterator(iterator->sxe TSRMLS_CC);
-}
-
-static void php_sxe_iterator_rewind(zend_object_iterator *iter TSRMLS_DC)
-{
- php_sxe_object *sxe;
-
- php_sxe_iterator *iterator = (php_sxe_iterator *)iter;
- sxe = iterator->sxe;
-
- php_sxe_reset_iterator(sxe TSRMLS_CC);
-}
-
-
-void *simplexml_export_node(zval *object TSRMLS_DC)
-{
- php_sxe_object *sxe;
- xmlNodePtr node;
-
- sxe = php_sxe_fetch_object(object TSRMLS_CC);
- GET_NODE(sxe, node);
- return php_sxe_get_first_node(sxe, node TSRMLS_CC);
-}
-
-#ifdef HAVE_DOM
-/* {{{ proto simplemxml_element simplexml_import_dom(domNode node [, string class_name])
- Get a simplexml_element object from dom to allow for processing */
-PHP_FUNCTION(simplexml_import_dom)
-{
- php_sxe_object *sxe;
- zval *node;
- php_libxml_node_object *object;
- xmlNodePtr nodep = NULL;
- char *classname = "";
- int classname_len = 0;
- zend_class_entry *ce= sxe_class_entry;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "o|s", &node, &classname, &classname_len) == FAILURE) {
- return;
- }
-
- object = (php_libxml_node_object *)zend_object_store_get_object(node TSRMLS_CC);
-
- nodep = php_libxml_import_node(node TSRMLS_CC);
-
- if (nodep) {
- if (nodep->doc == NULL) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Imported Node must have associated Document");
- RETURN_NULL();
- }
- if (nodep->type == XML_DOCUMENT_NODE || nodep->type == XML_HTML_DOCUMENT_NODE) {
- nodep = xmlDocGetRootElement((xmlDocPtr) nodep);
- }
- }
-
- if (nodep && nodep->type == XML_ELEMENT_NODE) {
- if (classname_len) {
- zend_class_entry **pce;
- if (zend_lookup_class(classname, classname_len, &pce TSRMLS_CC) == FAILURE) {
- php_error_docref(NULL TSRMLS_CC, E_ERROR, "Class %s does not exist", classname);
- }
- ce = *pce;
- }
-
- sxe = php_sxe_object_new(ce TSRMLS_CC);
- sxe->document = object->document;
- php_libxml_increment_doc_ref((php_libxml_node_object *)sxe, nodep->doc TSRMLS_CC);
- php_libxml_increment_node_ptr((php_libxml_node_object *)sxe, nodep, NULL TSRMLS_CC);
-
- return_value->type = IS_OBJECT;
- return_value->value.obj = php_sxe_register_object(sxe TSRMLS_CC);
- } else {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid Nodetype to import");
- RETVAL_NULL();
- }
-}
-/* }}} */
-#endif
-
-function_entry simplexml_functions[] = {
- PHP_FE(simplexml_load_file, NULL)
- PHP_FE(simplexml_load_string, NULL)
-#ifdef HAVE_DOM
- PHP_FE(simplexml_import_dom, NULL)
-#endif
- {NULL, NULL, NULL}
-};
-
-zend_module_entry simplexml_module_entry = {
- STANDARD_MODULE_HEADER,
- "SimpleXML",
- simplexml_functions,
- PHP_MINIT(simplexml),
- PHP_MSHUTDOWN(simplexml),
- NULL,
- NULL,
- PHP_MINFO(simplexml),
- "0.1",
- STANDARD_MODULE_PROPERTIES
-};
-
-#ifdef COMPILE_DL_SIMPLEXML
-ZEND_GET_MODULE(simplexml)
-#endif
-
-/* the method table */
-/* each method can have its own parameters and visibility */
-static zend_function_entry sxe_functions[] = {
- SXE_ME(__construct, NULL, ZEND_ACC_PUBLIC|ZEND_ACC_FINAL) /* must be called */
- SXE_ME(asXML, NULL, ZEND_ACC_PUBLIC)
- SXE_ME(xpath, NULL, ZEND_ACC_PUBLIC)
- SXE_ME(registerXPathNamespace, NULL, ZEND_ACC_PUBLIC)
- SXE_ME(attributes, NULL, ZEND_ACC_PUBLIC)
- SXE_ME(children, NULL, ZEND_ACC_PUBLIC)
- {NULL, NULL, NULL}
-};
-
-/* {{{ PHP_MINIT_FUNCTION(simplexml)
- */
-PHP_MINIT_FUNCTION(simplexml)
-{
- zend_class_entry sxe;
-
- INIT_CLASS_ENTRY(sxe, "SimpleXMLElement", sxe_functions);
- sxe.create_object = sxe_object_new;
- sxe_class_entry = zend_register_internal_class(&sxe TSRMLS_CC);
- sxe_class_entry->get_iterator = php_sxe_get_iterator;
- zend_class_implements(sxe_class_entry TSRMLS_CC, 1, zend_ce_traversable);
- sxe_object_handlers.get_method = zend_get_std_object_handlers()->get_method;
- sxe_object_handlers.get_constructor = zend_get_std_object_handlers()->get_constructor;
- sxe_object_handlers.get_class_entry = zend_get_std_object_handlers()->get_class_entry;
- sxe_object_handlers.get_class_name = zend_get_std_object_handlers()->get_class_name;
-
- sxe_ze1_object_handlers.get_method = zend_get_std_object_handlers()->get_method;
- sxe_ze1_object_handlers.get_constructor = zend_get_std_object_handlers()->get_constructor;
- sxe_ze1_object_handlers.get_class_entry = zend_get_std_object_handlers()->get_class_entry;
- sxe_ze1_object_handlers.get_class_name = zend_get_std_object_handlers()->get_class_name;
- sxe_ze1_object_handlers.clone_obj = sxe_object_ze1_clone;
-
-#if HAVE_SPL && !defined(COMPILE_DL_SPL)
- if (zend_get_module_started("spl") == SUCCESS) {
- PHP_MINIT(spl_sxe)(INIT_FUNC_ARGS_PASSTHRU);
- }
-#endif /* HAVE_SPL */
-
- php_libxml_register_export(sxe_class_entry, simplexml_export_node);
-
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ PHP_MSHUTDOWN_FUNCTION(simplexml)
- */
-PHP_MSHUTDOWN_FUNCTION(simplexml)
-{
- sxe_class_entry = NULL;
- return SUCCESS;
-}
-/* }}} */
-/* {{{ PHP_MINFO_FUNCTION(simplexml)
- */
-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$");
- php_info_print_table_row(2, "Schema support",
-#ifdef LIBXML_SCHEMAS_ENABLED
- "enabled");
-#else
- "not available");
-#endif
- php_info_print_table_end();
-}
-/* }}} */
-
-#endif
-
-/**
- * Local Variables:
- * c-basic-offset: 4
- * tab-width: 4
- * indent-tabs-mode: t
- * End:
- * vim600: fdm=marker
- * vim: noet sw=4 ts=4
- */
diff --git a/ext/simplexml/simplexml.dsp b/ext/simplexml/simplexml.dsp
deleted file mode 100644
index 79df918703..0000000000
--- a/ext/simplexml/simplexml.dsp
+++ /dev/null
@@ -1,111 +0,0 @@
-# Microsoft Developer Studio Project File - Name="simplexml" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=simplexml - Win32 Debug_TS
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "simplexml.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "simplexml.mak" CFG="simplexml - Win32 Debug_TS"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "simplexml - Win32 Debug_TS" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "simplexml - Win32 Release_TS" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "simplexml - Win32 Debug_TS"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug_TS"
-# PROP BASE Intermediate_Dir "Debug_TS"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "c:\php\5d\extensions"
-# PROP Intermediate_Dir "Debug_TS"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "SIMPLEXML_EXPORTS" /YX /FD /GZ /c
-# ADD CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /I "..\..\..\php5" /I "..\..\..\php5\main" /I "..\..\..\php5\Zend" /I "..\..\..\php5\TSRM" /D ZEND_DEBUG=1 /D ZTS=1 /D "ZEND_WIN32" /D "PHP_WIN32" /D COMPILE_DL_SIMPLEXML=1 /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "SIMPLEXML_EXPORTS" /D "LIBXML_THREAD_ENABLED" /YX /FD /GZ /c
-# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 php5ts_debug.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept /libpath:"..\..\..\php5\Debug_TS"
-
-!ELSEIF "$(CFG)" == "simplexml - Win32 Release_TS"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release_TS"
-# PROP BASE Intermediate_Dir "Release_TS"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release_TS"
-# PROP Intermediate_Dir "Release_TS"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "SIMPLEXML_EXPORTS" /YX /FD /c
-# ADD CPP /nologo /MT /W3 /GX /O2 /I "..\..\..\php5\main" /I "..\..\..\php5\Zend" /I "..\..\..\php5\TSRM" /I "..\..\..\php5\win32" /I "..\..\..\php5" /D ZTS=1 /D ZEND_DEBUG=0 /D "ZEND_WIN32" /D "PHP_WIN32" /D COMPILE_DL_SIMPLEXML=1 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "SIMPLEXML_EXPORTS" /D "LIBXML_THREAD_ENABLED" /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386
-# ADD LINK32 php5ts.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 /libpath:"..\..\..\php5\Release_TS" /libpath:"..\..\..\php5\Release_TS_Inline"
-
-!ENDIF
-
-# Begin Target
-
-# Name "simplexml - Win32 Debug_TS"
-# Name "simplexml - Win32 Release_TS"
-# Begin Group "Source Files"
-
-# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
-# Begin Source File
-
-SOURCE=.\simplexml.c
-# End Source File
-# End Group
-# Begin Group "Header Files"
-
-# PROP Default_Filter "h;hpp;hxx;hm;inl"
-# Begin Source File
-
-SOURCE=.\php_simplexml.h
-# End Source File
-# End Group
-# Begin Group "Resource Files"
-
-# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
-# End Group
-# End Target
-# End Project
diff --git a/ext/simplexml/tests/001.phpt b/ext/simplexml/tests/001.phpt
deleted file mode 100644
index cacc2d3066..0000000000
--- a/ext/simplexml/tests/001.phpt
+++ /dev/null
@@ -1,43 +0,0 @@
---TEST--
-SimpleXML: Simple document
---SKIPIF--
-<?php if (!extension_loaded("simplexml")) print "skip"; ?>
---FILE--
-<?php
-
-$sxe = simplexml_load_file(dirname(__FILE__).'/sxe.xml');
-
-print_r($sxe);
-
-echo "---Done---\n";
-
-?>
---EXPECT--
-SimpleXMLElement Object
-(
- [elem1] => SimpleXMLElement Object
- (
- [comment] => SimpleXMLElement Object
- (
- )
-
- [elem2] => SimpleXMLElement Object
- (
- [elem3] => SimpleXMLElement Object
- (
- [elem4] => SimpleXMLElement Object
- (
- [test] => SimpleXMLElement Object
- (
- )
-
- )
-
- )
-
- )
-
- )
-
-)
----Done---
diff --git a/ext/simplexml/tests/002.phpt b/ext/simplexml/tests/002.phpt
deleted file mode 100644
index 95d644fe71..0000000000
--- a/ext/simplexml/tests/002.phpt
+++ /dev/null
@@ -1,62 +0,0 @@
---TEST--
-SimpleXML and clone
---SKIPIF--
-<?php if (!extension_loaded("simplexml")) print "skip"; ?>
---FILE--
-<?php
-
-$xml =<<<EOF
-<?xml version='1.0'?>
-<!DOCTYPE sxe SYSTEM "notfound.dtd">
-<sxe id="elem1">
- <elem1 attr1='first'>
- <!-- comment -->
- <elem2>
- <elem3>
- <elem4>
- <?test processing instruction ?>
- </elem4>
- </elem3>
- </elem2>
- </elem1>
-</sxe>
-EOF;
-
-$sxe = simplexml_load_string($xml);
-
-$copy = clone $sxe;
-
-print_r($copy);
-
-echo "---Done---\n";
-
-?>
---EXPECT--
-SimpleXMLElement Object
-(
- [elem1] => SimpleXMLElement Object
- (
- [comment] => SimpleXMLElement Object
- (
- )
-
- [elem2] => SimpleXMLElement Object
- (
- [elem3] => SimpleXMLElement Object
- (
- [elem4] => SimpleXMLElement Object
- (
- [test] => SimpleXMLElement Object
- (
- )
-
- )
-
- )
-
- )
-
- )
-
-)
----Done---
diff --git a/ext/simplexml/tests/003.phpt b/ext/simplexml/tests/003.phpt
deleted file mode 100755
index 96aad372da..0000000000
--- a/ext/simplexml/tests/003.phpt
+++ /dev/null
@@ -1,69 +0,0 @@
---TEST--
-SimpleXML and Entities
---SKIPIF--
-<?php if (!extension_loaded("simplexml")) print "skip"; ?>
---FILE--
-<?php
-
-$xml =<<<EOF
-<?xml version='1.0'?>
-<!DOCTYPE sxe SYSTEM "notfound.dtd" [
-<!ENTITY included-entity "This is text included from an entity">
-]>
-<sxe id="elem1">
- Plain text.
- <elem1 attr1='first'>
- <!-- comment -->
- <elem2>
- <elem3>
- &included-entity;
- <elem4>
- <?test processing instruction ?>
- </elem4>
- </elem3>
- </elem2>
- </elem1>
-</sxe>
-EOF;
-
-$sxe = simplexml_load_string($xml);
-
-print_r($sxe);
-
-echo "---Done---\n";
-
-?>
---EXPECT--
-SimpleXMLElement Object
-(
- [elem1] => SimpleXMLElement Object
- (
- [comment] => SimpleXMLElement Object
- (
- )
-
- [elem2] => SimpleXMLElement Object
- (
- [elem3] => SimpleXMLElement Object
- (
- [included-entity] => SimpleXMLElement Object
- (
- [included-entity] => This is text included from an entity
- )
-
- [elem4] => SimpleXMLElement Object
- (
- [test] => SimpleXMLElement Object
- (
- )
-
- )
-
- )
-
- )
-
- )
-
-)
----Done---
diff --git a/ext/simplexml/tests/004.phpt b/ext/simplexml/tests/004.phpt
deleted file mode 100755
index 392b1d4981..0000000000
--- a/ext/simplexml/tests/004.phpt
+++ /dev/null
@@ -1,65 +0,0 @@
---TEST--
-SimpleXML and CDATA
---SKIPIF--
-<?php if (!extension_loaded("simplexml")) print "skip"; ?>
---FILE--
-<?php
-
-$sxe = simplexml_load_string(<<<EOF
-<?xml version='1.0'?>
-<!DOCTYPE sxe SYSTEM "notfound.dtd">
-<sxe id="elem1">
- Plain text.
- <elem1 attr1='first'>
- <!-- comment -->
- <elem2>
- <![CDATA[CDATA block]]>
- <elem3>
- <elem4>
- <?test processing instruction ?>
- </elem4>
- </elem3>
- </elem2>
- </elem1>
-</sxe>
-EOF
-);
-
-print_r($sxe);
-
-$elem1 = $sxe->elem1;
-$elem2 = $elem1->elem2;
-var_dump(trim((string)$elem2));
-
-?>
-===DONE===
---EXPECT--
-SimpleXMLElement Object
-(
- [elem1] => SimpleXMLElement Object
- (
- [comment] => SimpleXMLElement Object
- (
- )
-
- [elem2] => SimpleXMLElement Object
- (
- [elem3] => SimpleXMLElement Object
- (
- [elem4] => SimpleXMLElement Object
- (
- [test] => SimpleXMLElement Object
- (
- )
-
- )
-
- )
-
- )
-
- )
-
-)
-string(11) "CDATA block"
-===DONE===
diff --git a/ext/simplexml/tests/005.phpt b/ext/simplexml/tests/005.phpt
deleted file mode 100755
index 237a5d2616..0000000000
--- a/ext/simplexml/tests/005.phpt
+++ /dev/null
@@ -1,40 +0,0 @@
---TEST--
-SimpleXML and text data
---SKIPIF--
-<?php if (!extension_loaded("simplexml")) print "skip"; ?>
---FILE--
-<?php
-
-$sxe = simplexml_load_string(<<<EOF
-<?xml version='1.0'?>
-<!DOCTYPE sxe SYSTEM "notfound.dtd">
-<sxe id="elem1">
- Plain text.
- <elem1 attr1='first'>
- <!-- comment -->
- <elem2>
- Here we have some text data.
- <elem3>
- And here some more.
- <elem4>
- Wow once again.
- </elem4>
- </elem3>
- </elem2>
- </elem1>
-</sxe>
-EOF
-);
-
-var_dump(trim($sxe->elem1->elem2));
-var_dump(trim($sxe->elem1->elem2->elem3));
-var_dump(trim($sxe->elem1->elem2->elem3->elem4));
-
-echo "---Done---\n";
-
-?>
---EXPECT--
-string(28) "Here we have some text data."
-string(19) "And here some more."
-string(15) "Wow once again."
----Done---
diff --git a/ext/simplexml/tests/006.phpt b/ext/simplexml/tests/006.phpt
deleted file mode 100755
index 9360b2dff3..0000000000
--- a/ext/simplexml/tests/006.phpt
+++ /dev/null
@@ -1,80 +0,0 @@
---TEST--
-SimpleXML and foreach
---SKIPIF--
-<?php if (!extension_loaded("simplexml")) print "skip"; ?>
---FILE--
-<?php
-
-$sxe = simplexml_load_string(<<<EOF
-<?xml version='1.0'?>
-<!DOCTYPE sxe SYSTEM "notfound.dtd">
-<sxe id="elem1">
- Plain text.
- <elem1 attr1='first'>
- Bla bla 1.
- <!-- comment -->
- <elem2>
- Here we have some text data.
- <elem3>
- And here some more.
- <elem4>
- Wow once again.
- </elem4>
- </elem3>
- </elem2>
- </elem1>
- <elem11 attr2='second'>
- Bla bla 2.
- <elem111>
- Foo Bar
- </elem111>
- </elem11>
-</sxe>
-EOF
-);
-
-foreach($sxe as $name => $data) {
- var_dump($name);
- var_dump(trim($data));
-}
-
-echo "===CLONE===\n";
-
-foreach(clone $sxe as $name => $data) {
- var_dump($name);
- var_dump(trim($data));
-}
-
-echo "===ELEMENT===\n";
-
-foreach($sxe->elem11 as $name => $data) {
- var_dump($name);
- var_dump(trim($data));
-}
-
-echo "===COMMENT===\n";
-
-foreach($sxe->elem1 as $name => $data) {
- var_dump($name);
- var_dump(trim($data));
-}
-
-?>
-===DONE===
---EXPECT--
-string(5) "elem1"
-string(10) "Bla bla 1."
-string(6) "elem11"
-string(10) "Bla bla 2."
-===CLONE===
-string(5) "elem1"
-string(10) "Bla bla 1."
-string(6) "elem11"
-string(10) "Bla bla 2."
-===ELEMENT===
-string(6) "elem11"
-string(10) "Bla bla 2."
-===COMMENT===
-string(5) "elem1"
-string(10) "Bla bla 1."
-===DONE===
diff --git a/ext/simplexml/tests/007.phpt b/ext/simplexml/tests/007.phpt
deleted file mode 100755
index b55d324966..0000000000
--- a/ext/simplexml/tests/007.phpt
+++ /dev/null
@@ -1,92 +0,0 @@
---TEST--
-SimpleXML and attributes
---SKIPIF--
-<?php if (!extension_loaded("simplexml")) print "skip"; ?>
---FILE--
-<?php
-
-$xml =<<<EOF
-<?xml version='1.0'?>
-<!DOCTYPE sxe SYSTEM "notfound.dtd">
-<sxe id="elem1">
- <elem1 attr1='first'>
- <!-- comment -->
- <elem2>
- <elem3>
- <elem4>
- <?test processing instruction ?>
- </elem4>
- </elem3>
- </elem2>
- </elem1>
-</sxe>
-EOF;
-
-$sxe = simplexml_load_string($xml);
-
-echo "===Property===\n";
-var_dump($sxe->elem1);
-echo "===Array===\n";
-var_dump($sxe['id']);
-var_dump($sxe->elem1['attr1']);
-echo "===Set===\n";
-$sxe['id'] = "Changed1";
-var_dump($sxe['id']);
-$sxe->elem1['attr1'] = 12;
-var_dump($sxe->elem1['attr1']);
-echo "===Unset===\n";
-unset($sxe['id']);
-var_dump($sxe['id']);
-unset($sxe->elem1['attr1']);
-var_dump($sxe->elem1['attr1']);
-echo "===Misc.===\n";
-$a = 4;
-var_dump($a);
-$dummy = $sxe->elem1[$a];
-var_dump($a);
-?>
-===Done===
---EXPECTF--
-===Property===
-object(SimpleXMLElement)#%d (2) {
- ["comment"]=>
- object(SimpleXMLElement)#%d (0) {
- }
- ["elem2"]=>
- object(SimpleXMLElement)#%d (1) {
- ["elem3"]=>
- object(SimpleXMLElement)#%d (1) {
- ["elem4"]=>
- object(SimpleXMLElement)#%d (1) {
- ["test"]=>
- object(SimpleXMLElement)#%d (0) {
- }
- }
- }
- }
-}
-===Array===
-object(SimpleXMLElement)#%d (1) {
- [0]=>
- string(5) "elem1"
-}
-object(SimpleXMLElement)#%d (1) {
- [0]=>
- string(5) "first"
-}
-===Set===
-object(SimpleXMLElement)#%d (1) {
- [0]=>
- string(8) "Changed1"
-}
-object(SimpleXMLElement)#%d (1) {
- [0]=>
- string(2) "12"
-}
-===Unset===
-NULL
-NULL
-===Misc.===
-int(4)
-int(4)
-===Done===
diff --git a/ext/simplexml/tests/008.phpt b/ext/simplexml/tests/008.phpt
deleted file mode 100644
index 3554b32040..0000000000
--- a/ext/simplexml/tests/008.phpt
+++ /dev/null
@@ -1,39 +0,0 @@
---TEST--
-SimpleXML and XPath
---SKIPIF--
-<?php if (!extension_loaded("simplexml")) print "skip"; ?>
---FILE--
-<?php
-
-$xml =<<<EOF
-<?xml version='1.0'?>
-<!DOCTYPE sxe SYSTEM "notfound.dtd">
-<sxe id="elem1">
- <elem1 attr1='first'>
- <!-- comment -->
- <elem2>
- <elem3>
- <elem4>
- <?test processing instruction ?>
- </elem4>
- </elem3>
- </elem2>
- </elem1>
-</sxe>
-EOF;
-
-$sxe = simplexml_load_string($xml);
-
-var_dump($sxe->xpath("elem1/elem2/elem3/elem4"));
-var_dump($sxe->xpath("***"));
-?>
---EXPECTF--
-array(1) {
- [0]=>
- object(SimpleXMLElement)#%d (1) {
- ["test"]=>
- object(SimpleXMLElement)#%d (0) {
- }
- }
-}
-bool(false)
diff --git a/ext/simplexml/tests/009.phpt b/ext/simplexml/tests/009.phpt
deleted file mode 100755
index 2115dd3142..0000000000
--- a/ext/simplexml/tests/009.phpt
+++ /dev/null
@@ -1,45 +0,0 @@
---TEST--
-SimpleXML and foreach
---SKIPIF--
-<?php if (!extension_loaded("simplexml")) print "skip"; ?>
---FILE--
-<?php
-$sxe = simplexml_load_string(<<<EOF
-<?xml version='1.0'?>
-<!DOCTYPE sxe SYSTEM "notfound.dtd">
-<sxe id="elem1">
- Plain text.
- <elem1 attr1='first'>
- Bla bla 1.
- <!-- comment -->
- <elem2>
- Here we have some text data.
- <elem3>
- And here some more.
- <elem4>
- Wow once again.
- </elem4>
- </elem3>
- </elem2>
- </elem1>
- <elem11 attr2='second'>
- Bla bla 2.
- </elem11>
-</sxe>
-EOF
-);
-foreach($sxe->children() as $name=>$val) {
- var_dump($name);
- var_dump(get_class($val));
- var_dump(trim((string)$val));
-}
-?>
-===DONE===
---EXPECT--
-string(5) "elem1"
-string(16) "SimpleXMLElement"
-string(10) "Bla bla 1."
-string(6) "elem11"
-string(16) "SimpleXMLElement"
-string(10) "Bla bla 2."
-===DONE===
diff --git a/ext/simplexml/tests/010.phpt b/ext/simplexml/tests/010.phpt
deleted file mode 100644
index ea6c7fd079..0000000000
--- a/ext/simplexml/tests/010.phpt
+++ /dev/null
@@ -1,63 +0,0 @@
---TEST--
-SimpleXML: Simple Inheritance
---SKIPIF--
-<?php if (!extension_loaded("simplexml")) print "skip"; ?>
---FILE--
-<?php
-
-class simplexml_inherited extends SimpleXMLElement
-{
-}
-
-$xml =<<<EOF
-<?xml version='1.0'?>
-<!DOCTYPE sxe SYSTEM "notfound.dtd">
-<sxe id="elem1">
- <elem1 attr1='first'>
- <!-- comment -->
- <elem2>
- <elem3>
- <elem4>
- <?test processing instruction ?>
- </elem4>
- </elem3>
- </elem2>
- </elem1>
-</sxe>
-EOF;
-
-$sxe = simplexml_load_string($xml, 'simplexml_inherited');
-
-print_r($sxe);
-
-?>
-===DONE===
---EXPECT--
-simplexml_inherited Object
-(
- [elem1] => simplexml_inherited Object
- (
- [comment] => simplexml_inherited Object
- (
- )
-
- [elem2] => simplexml_inherited Object
- (
- [elem3] => simplexml_inherited Object
- (
- [elem4] => simplexml_inherited Object
- (
- [test] => simplexml_inherited Object
- (
- )
-
- )
-
- )
-
- )
-
- )
-
-)
-===DONE===
diff --git a/ext/simplexml/tests/011.phpt b/ext/simplexml/tests/011.phpt
deleted file mode 100755
index f48c9f1eec..0000000000
--- a/ext/simplexml/tests/011.phpt
+++ /dev/null
@@ -1,47 +0,0 @@
---TEST--
-SimpleXML and echo/print
---SKIPIF--
-<?php
- if (!extension_loaded('simplexml')) print 'skip';
-?>
---FILE--
-<?php
-
-$xml =<<<EOF
-<?xml version="1.0" encoding="ISO-8859-1" ?>
-<foo>
- <bar>bar</bar>
- <baz>baz1</baz>
- <baz>baz2</baz>
-</foo>
-EOF;
-
-$sxe = simplexml_load_string($xml);
-
-echo "===BAR===\n";
-echo $sxe->bar;
-echo "\n";
-
-echo "===BAZ===\n";
-echo $sxe->baz;
-echo "\n";
-
-echo "===BAZ0===\n";
-echo $sxe->baz[0];
-echo "\n";
-
-echo "===BAZ1===\n";
-print $sxe->baz[1];
-echo "\n";
-?>
-===DONE===
---EXPECT--
-===BAR===
-bar
-===BAZ===
-baz1
-===BAZ0===
-baz1
-===BAZ1===
-baz2
-===DONE===
diff --git a/ext/simplexml/tests/012.phpt b/ext/simplexml/tests/012.phpt
deleted file mode 100755
index 79c01107fe..0000000000
--- a/ext/simplexml/tests/012.phpt
+++ /dev/null
@@ -1,39 +0,0 @@
---TEST--
-SimpleXML and Attribute creation
---SKIPIF--
-<?php
- if (!extension_loaded('simplexml')) print 'skip';
-?>
---FILE--
-<?php
-
-$xml =<<<EOF
-<?xml version="1.0" encoding="ISO-8859-1" ?>
-<foo/>
-EOF;
-
-$sxe = simplexml_load_string($xml);
-
-
-$sxe[""] = "warning";
-$sxe["attr"] = "value";
-
-echo $sxe->asXML();
-
-$sxe["attr"] = "new value";
-
-echo $sxe->asXML();
-
-$sxe[] = "error";
-
-?>
-===DONE===
---EXPECTF--
-
-Warning: main(): Cannot write or create unnamed attribute in %s012.php on line %d
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<foo attr="value"/>
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<foo attr="new value"/>
-
-Fatal error: main(): Cannot create unnamed attribute in %s012.php on line %d
diff --git a/ext/simplexml/tests/013.phpt b/ext/simplexml/tests/013.phpt
deleted file mode 100755
index fbd80b0c44..0000000000
--- a/ext/simplexml/tests/013.phpt
+++ /dev/null
@@ -1,23 +0,0 @@
---TEST--
-SimpleXML and Split text content
---SKIPIF--
-<?php
- if (!extension_loaded('simplexml')) print 'skip';
-?>
---FILE--
-<?php
-
-$xml =<<<EOF
-<?xml version="1.0" encoding="ISO-8859-1" ?>
-<foo>bar<baz/>bar</foo>
-EOF;
-
-$sxe = simplexml_load_string($xml);
-
-var_dump((string)$sxe);
-
-?>
-===DONE===
---EXPECT--
-string(6) "barbar"
-===DONE===
diff --git a/ext/simplexml/tests/014.phpt b/ext/simplexml/tests/014.phpt
deleted file mode 100644
index d1d736e7b5..0000000000
--- a/ext/simplexml/tests/014.phpt
+++ /dev/null
@@ -1,60 +0,0 @@
---TEST--
-SimpleXML: adding/removing attributes (direct)
---SKIPIF--
-<?php if (!extension_loaded("simplexml")) print "skip"; ?>
---FILE--
-<?php
-$xml =<<<EOF
-<people>
- <person name="Joe"></person>
-</people>
-EOF;
-
-$people = simplexml_load_string($xml);
-var_dump($people->person['name']);
-var_dump($people->person['age']);
-$person = $people->person;
-$person['name'] = "XXX";
-var_dump($people->person['name']);
-$people->person['age'] = 30;
-var_dump($people->person['age']);
-echo "---Unset:---\n";
-unset($people->person['age']);
-echo "---Unset?---\n";
-var_dump($people->person['age']);
-var_dump(isset($people->person['age']));
-$people->person['age'] = 30;
-echo "---Unsupported---\n";
-var_dump($people->person['age']);
-$people->person['age'] += 5;
-var_dump($people->person['age']);
-?>
-===DONE===
---EXPECTF--
-object(SimpleXMLElement)#%d (1) {
- [0]=>
- string(3) "Joe"
-}
-NULL
-object(SimpleXMLElement)#%d (1) {
- [0]=>
- string(3) "XXX"
-}
-object(SimpleXMLElement)#%d (1) {
- [0]=>
- string(2) "30"
-}
----Unset:---
----Unset?---
-NULL
-bool(false)
----Unsupported---
-object(SimpleXMLElement)#%d (1) {
- [0]=>
- string(2) "30"
-}
-object(SimpleXMLElement)#%d (1) {
- [0]=>
- string(2) "35"
-}
-===DONE===
diff --git a/ext/simplexml/tests/014a.phpt b/ext/simplexml/tests/014a.phpt
deleted file mode 100755
index 770cb44812..0000000000
--- a/ext/simplexml/tests/014a.phpt
+++ /dev/null
@@ -1,56 +0,0 @@
---TEST--
-SimpleXML: adding/removing attributes (single)
---SKIPIF--
-<?php if (!extension_loaded("simplexml")) print "skip"; ?>
---FILE--
-<?php
-$xml =<<<EOF
-<people>
- <person name="Joe"></person>
-</people>
-EOF;
-
-$people = simplexml_load_string($xml);
-var_dump($people->person[0]['name']);
-var_dump($people->person[0]['age']);
-$person = $people->person[0];
-$person['name'] = "XXX";
-var_dump($people->person[0]['name']);
-$people->person[0]['age'] = 30;
-var_dump($people->person[0]['age']);
-echo "---Unset:---\n";
-unset($people->person[0]['age']);
-echo "---Unset?---\n";
-var_dump($people->person[0]['age']);
-var_dump(isset($people->person[0]['age']));
-echo "---Unsupported---\n";
-var_dump($people->person[0]['age']);
-$people->person['age'] += 5;
-var_dump($people->person[0]['age']);
-?>
-===DONE===
---EXPECTF--
-object(SimpleXMLElement)#%d (1) {
- [0]=>
- string(3) "Joe"
-}
-NULL
-object(SimpleXMLElement)#%d (1) {
- [0]=>
- string(3) "XXX"
-}
-object(SimpleXMLElement)#%d (1) {
- [0]=>
- string(2) "30"
-}
----Unset:---
----Unset?---
-NULL
-bool(false)
----Unsupported---
-NULL
-object(SimpleXMLElement)#%d (1) {
- [0]=>
- string(1) "5"
-}
-===DONE=== \ No newline at end of file
diff --git a/ext/simplexml/tests/014b.phpt b/ext/simplexml/tests/014b.phpt
deleted file mode 100755
index 14bd6ce864..0000000000
--- a/ext/simplexml/tests/014b.phpt
+++ /dev/null
@@ -1,55 +0,0 @@
---TEST--
-SimpleXML: adding/removing attributes (second)
---SKIPIF--
-<?php if (!extension_loaded("simplexml")) print "skip"; ?>
---FILE--
-<?php
-$xml =<<<EOF
-<people>
- <person name="Joe"></person>
- <person name="Boe"></person>
-</people>
-EOF;
-
-$people = simplexml_load_string($xml);
-var_dump($people->person[0]['name']);
-var_dump($people->person[1]['age']);
-$person = $people->person[1];
-$person['name'] = "XXX";
-var_dump($people->person[1]['name']);
-$people->person[1]['age'] = 30;
-var_dump($people->person[1]['age']);
-echo "---Unset:---\n";
-unset($people->person[1]['age']);
-echo "---Unset?---\n";
-var_dump($people->person[1]['age']);
-var_dump(isset($people->person[1]['age']));
-echo "---Unsupported---\n";
-$people->person[1]['age'] += 5;
-var_dump($people->person[1]['age']);
-?>
-===DONE===
---EXPECTF--
-object(SimpleXMLElement)#%d (1) {
- [0]=>
- string(3) "Joe"
-}
-NULL
-object(SimpleXMLElement)#%d (1) {
- [0]=>
- string(3) "XXX"
-}
-object(SimpleXMLElement)#%d (1) {
- [0]=>
- string(2) "30"
-}
----Unset:---
----Unset?---
-NULL
-bool(false)
----Unsupported---
-object(SimpleXMLElement)#%d (1) {
- [0]=>
- string(1) "5"
-}
-===DONE=== \ No newline at end of file
diff --git a/ext/simplexml/tests/015.phpt b/ext/simplexml/tests/015.phpt
deleted file mode 100644
index 11e9cd55cd..0000000000
--- a/ext/simplexml/tests/015.phpt
+++ /dev/null
@@ -1,56 +0,0 @@
---TEST--
-SimpleXML: accessing singular subnode as array
---SKIPIF--
-<?php if (!extension_loaded("simplexml")) print "skip"; ?>
---FILE--
-<?php
-$xml =<<<EOF
-<people>
- <person name="Joe"></person>
-</people>
-EOF;
-
-$xml2 =<<<EOF
-<people>
- <person name="Joe"></person>
- <person name="Boe"></person>
-</people>
-EOF;
-
-$people = simplexml_load_string($xml);
-var_dump($people->person['name']);
-var_dump($people->person[0]['name']);
-//$people->person['name'] = "XXX";
-//var_dump($people->person['name']);
-//var_dump($people->person[0]['name']);
-//$people->person[0]['name'] = "YYY";
-//var_dump($people->person['name']);
-//var_dump($people->person[0]['name']);
-//unset($people->person[0]['name']);
-//var_dump($people->person['name']);
-//var_dump($people->person[0]['name']);
-//var_dump(isset($people->person['name']));
-//var_dump(isset($people->person[0]['name']));
-$people = simplexml_load_string($xml2);
-var_dump($people->person[0]['name']);
-var_dump($people->person[1]['name']);
-?>
-===DONE===
---EXPECTF--
-object(SimpleXMLElement)#%d (1) {
- [0]=>
- string(3) "Joe"
-}
-object(SimpleXMLElement)#%d (1) {
- [0]=>
- string(3) "Joe"
-}
-object(SimpleXMLElement)#%d (1) {
- [0]=>
- string(3) "Joe"
-}
-object(SimpleXMLElement)#%d (1) {
- [0]=>
- string(3) "Boe"
-}
-===DONE===
diff --git a/ext/simplexml/tests/016.phpt b/ext/simplexml/tests/016.phpt
deleted file mode 100644
index ab80a7a19a..0000000000
--- a/ext/simplexml/tests/016.phpt
+++ /dev/null
@@ -1,57 +0,0 @@
---TEST--
-SimpleXML: modifying attributes of singular subnode
---SKIPIF--
-<?php if (!extension_loaded("simplexml")) print "skip"; ?>
---FILE--
-<?php
-$xml =<<<EOF
-<people>
- <person name="Joe"></person>
-</people>
-EOF;
-
-$people = simplexml_load_string($xml);
-var_dump($people->person['name']);
-$people->person['name'] = $people->person['name'] . 'Foo';
-var_dump($people->person['name']);
-$people->person['name'] .= 'Bar';
-var_dump($people->person['name']);
-
-echo "---[0]---\n";
-
-$people = simplexml_load_string($xml);
-var_dump($people->person[0]['name']);
-$people->person[0]['name'] = $people->person[0]['name'] . 'Foo';
-var_dump($people->person[0]['name']);
-$people->person[0]['name'] .= 'Bar';
-var_dump($people->person[0]['name']);
-
-?>
-===DONE===
---EXPECTF--
-object(SimpleXMLElement)#%d (1) {
- [0]=>
- string(3) "Joe"
-}
-object(SimpleXMLElement)#%d (1) {
- [0]=>
- string(6) "JoeFoo"
-}
-object(SimpleXMLElement)#%d (1) {
- [0]=>
- string(9) "JoeFooBar"
-}
----[0]---
-object(SimpleXMLElement)#%d (1) {
- [0]=>
- string(3) "Joe"
-}
-object(SimpleXMLElement)#%d (1) {
- [0]=>
- string(6) "JoeFoo"
-}
-object(SimpleXMLElement)#%d (1) {
- [0]=>
- string(9) "JoeFooBar"
-}
-===DONE===
diff --git a/ext/simplexml/tests/017.phpt b/ext/simplexml/tests/017.phpt
deleted file mode 100644
index 776b00c785..0000000000
--- a/ext/simplexml/tests/017.phpt
+++ /dev/null
@@ -1,86 +0,0 @@
---TEST--
-SimpleXML: iteration through subnodes
---SKIPIF--
-<?php if (!extension_loaded("simplexml")) print "skip"; ?>
---FILE--
-<?php
-$xml =<<<EOF
-<people>
- <person name="Joe">
- <child name="Ann" />
- <child name="Marray" />
- </person>
- <person name="Boe">
- <child name="Joe" />
- <child name="Ann" />
- </person>
-</people>
-EOF;
-$xml1 =<<<EOF
-<people>
- <person name="Joe">
- <child name="Ann" />
- </person>
-</people>
-EOF;
-
-function print_xml($xml) {
- foreach($xml->children() as $person) {
- echo "person: ".$person['name']."\n";
- foreach($person->children() as $child) {
- echo " child: ".$child['name']."\n";
- }
- }
-}
-
-function print_xml2($xml) {
- $persons = 2;
- for ($i=0;$i<$persons;$i++) {
- echo "person: ".$xml->person[$i]['name']."\n";
- $children = 2;
- for ($j=0;$j<$children;$j++) {
- echo " child: ".$xml->person[$i]->child[$j]['name']."\n";
- }
- }
-}
-
-echo "---11---\n";
-print_xml(simplexml_load_string($xml));
-echo "---12---\n";
-print_xml(simplexml_load_string($xml1));
-echo "---21---\n";
-print_xml2(simplexml_load_string($xml));
-echo "---22---\n";
-print_xml2(simplexml_load_string($xml1));
-?>
-===DONE===
---EXPECTF--
----11---
-person: Joe
- child: Ann
- child: Marray
-person: Boe
- child: Joe
- child: Ann
----12---
-person: Joe
- child: Ann
----21---
-person: Joe
- child: Ann
- child: Marray
-person: Boe
- child: Joe
- child: Ann
----22---
-person: Joe
- child: Ann
- child:
-person:
-
-Notice: Trying to get property of non-object in %s017.php on line %d
- child:
-
-Notice: Trying to get property of non-object in %s017.php on line %d
- child:
-===DONE===
diff --git a/ext/simplexml/tests/018.phpt b/ext/simplexml/tests/018.phpt
deleted file mode 100644
index e5c810944e..0000000000
--- a/ext/simplexml/tests/018.phpt
+++ /dev/null
@@ -1,65 +0,0 @@
---TEST--
-SimpleXML: iteration through subnodes and attributes
---SKIPIF--
-<?php if (!extension_loaded("simplexml")) print "skip"; ?>
---FILE--
-<?php
-$xml =<<<EOF
-<people>
- <person name="Joe">
- Text1
- <child name="Ann" />
- Text2
- <child name="Marray" />
- Text3
- </person>
- <person name="Boe">
- <child name="Joe" />
- <child name="Ann" />
- </person>
-</people>
-EOF;
-$xml1 =<<<EOF
-<people>
- <person name="Joe">
- <child />
- </person>
-</people>
-EOF;
-
-function traverse_xml($pad,$xml) {
- foreach($xml->children() as $name => $node) {
- echo $pad."<$name";
- foreach($node->attributes() as $attr => $value) {
- echo " $attr=\"$value\"";
- }
- echo ">\n";
- traverse_xml($pad." ",$node);
- echo $pad."</$name>\n";
- }
-}
-
-traverse_xml("",simplexml_load_string($xml));
-echo "----------\n";
-traverse_xml("",simplexml_load_string($xml1));
-echo "---Done---\n";
-?>
---EXPECT--
-<person name="Joe">
- <child name="Ann">
- </child>
- <child name="Marray">
- </child>
-</person>
-<person name="Boe">
- <child name="Joe">
- </child>
- <child name="Ann">
- </child>
-</person>
-----------
-<person name="Joe">
- <child>
- </child>
-</person>
----Done--- \ No newline at end of file
diff --git a/ext/simplexml/tests/019.phpt b/ext/simplexml/tests/019.phpt
deleted file mode 100755
index a54a1bdd52..0000000000
--- a/ext/simplexml/tests/019.phpt
+++ /dev/null
@@ -1,80 +0,0 @@
---TEST--
-SimpleXML and foreach with children()
---SKIPIF--
-<?php if (!extension_loaded("simplexml")) print "skip"; ?>
---FILE--
-<?php
-
-$sxe = simplexml_load_string(<<<EOF
-<?xml version='1.0'?>
-<!DOCTYPE sxe SYSTEM "notfound.dtd">
-<sxe id="elem1">
- Plain text.
- <elem1 attr1='first'>
- Bla bla 1.
- <!-- comment -->
- <elem2>
- Here we have some text data.
- <elem3>
- And here some more.
- <elem4>
- Wow once again.
- </elem4>
- </elem3>
- </elem2>
- </elem1>
- <elem11 attr2='second'>
- Bla bla 2.
- <elem111>
- Foo Bar
- </elem111>
- </elem11>
-</sxe>
-EOF
-);
-
-foreach($sxe->children() as $name => $data) {
- var_dump($name);
- var_dump(trim($data));
-}
-
-echo "===CLONE===\n";
-
-foreach(clone $sxe->children() as $name => $data) {
- var_dump($name);
- var_dump(trim($data));
-}
-
-echo "===ELEMENT===\n";
-
-foreach($sxe->elem11->children() as $name => $data) {
- var_dump($name);
- var_dump(trim($data));
-}
-
-echo "===COMMENT===\n";
-
-foreach($sxe->elem1->children() as $name => $data) {
- var_dump($name);
- var_dump(trim($data));
-}
-
-?>
-===DONE===
---EXPECT--
-string(5) "elem1"
-string(10) "Bla bla 1."
-string(6) "elem11"
-string(10) "Bla bla 2."
-===CLONE===
-string(5) "elem1"
-string(10) "Bla bla 1."
-string(6) "elem11"
-string(10) "Bla bla 2."
-===ELEMENT===
-string(7) "elem111"
-string(7) "Foo Bar"
-===COMMENT===
-string(5) "elem2"
-string(28) "Here we have some text data."
-===DONE===
diff --git a/ext/simplexml/tests/020.phpt b/ext/simplexml/tests/020.phpt
deleted file mode 100755
index a2a328736c..0000000000
--- a/ext/simplexml/tests/020.phpt
+++ /dev/null
@@ -1,21 +0,0 @@
---TEST--
-SimpleXML attribute compared to string
---SKIPIF--
-<?php if (!extension_loaded("simplexml")) print "skip"; ?>
---FILE--
-<?php
-
-$doc = simplexml_load_string('<root><name attr="foo">bar</name></root>');
-print $doc->name["attr"];
-print "\n";
-if ($doc->name["attr"] == "foo") {
- print "Works\n";
-} else {
- print "Error\n";
-}
-?>
-===DONE===
---EXPECT--
-foo
-Works
-===DONE===
diff --git a/ext/simplexml/tests/021.phpt b/ext/simplexml/tests/021.phpt
deleted file mode 100644
index e58e26d6ee..0000000000
--- a/ext/simplexml/tests/021.phpt
+++ /dev/null
@@ -1,25 +0,0 @@
---TEST--
-SimpleXML element check
---SKIPIF--
-<?php if (!extension_loaded("simplexml")) print "skip"; ?>
---FILE--
-<?php
-
-$ok = 1;
-$doc = simplexml_load_string('<root><exists>foo</exists></root>');
-if(!isset($doc->exists)) {
- $ok *= 0;
-}
-if(isset($doc->doesnotexist)) {
- $ok *= 0;
-}
-if ($ok) {
- print "Works\n";
-} else {
- print "Error\n";
-}
-?>
-===DONE===
---EXPECT--
-Works
-===DONE===
diff --git a/ext/simplexml/tests/book.xml b/ext/simplexml/tests/book.xml
deleted file mode 100644
index ea40508e01..0000000000
--- a/ext/simplexml/tests/book.xml
+++ /dev/null
@@ -1,10 +0,0 @@
-<books>
- <book>
- <title>The Grapes of Wrath</title>
- <author>John Steinbeck</author>
- </book>
- <book>
- <title>The Pearl</title>
- <author>John Steinbeck</author>
- </book>
-</books>
diff --git a/ext/simplexml/tests/bug24392.phpt b/ext/simplexml/tests/bug24392.phpt
deleted file mode 100644
index 0a462e5770..0000000000
--- a/ext/simplexml/tests/bug24392.phpt
+++ /dev/null
@@ -1,22 +0,0 @@
---TEST--
-Bug #24392 (empty namespaces causing confusion)
---SKIPIF--
-<?php if (!extension_loaded("simplexml")) print "skip simplexml extension is not loaded"; ?>
---FILE--
-<?php
-$s = simplexml_load_file(dirname(__FILE__).'/bug24392.xml');
-foreach ($s->item as $item) {
- echo $item->title . "\n";
-}
-?>
---EXPECT--
-EU Parliament to Vote on New Patent Rules
-Most Powerful Amateur Rocket in Canada
-GF FX 5900 Ultra vs. ATi Radeon 9800 Pro
-PHP 5 Beta 1
-Engaging with the OSS Community
-Pure Math, Pure Joy
-Windows Tech Writer Looks at Linux
-US Cell Phone Users Discover SMS Spam
-Verizon Sues Nextel For Espionage
-Introduction to Debian
diff --git a/ext/simplexml/tests/bug24392.xml b/ext/simplexml/tests/bug24392.xml
deleted file mode 100644
index d669f1df41..0000000000
--- a/ext/simplexml/tests/bug24392.xml
+++ /dev/null
@@ -1,76 +0,0 @@
-<?xml version="1.0"?>
-
-<rdf:RDF
-xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-xmlns="http://my.netscape.com/rdf/simple/0.9/">
-
-<channel>
-<title>Slashdot</title>
-<link>http://slashdot.org/</link>
-<description>News for nerds, stuff that matters</description>
-</channel>
-
-<image>
-<title>Slashdot</title>
-<url>http://images.slashdot.org/topics/topicslashdot.gif</url>
-<link>http://slashdot.org/</link>
-</image>
-
-<item>
-<title>EU Parliament to Vote on New Patent Rules</title>
-<link>http://slashdot.org/article.pl?sid=03/06/30/002211</link>
-</item>
-
-<item>
-<title>Most Powerful Amateur Rocket in Canada</title>
-<link>http://slashdot.org/article.pl?sid=03/06/29/2121211</link>
-</item>
-
-<item>
-<title>GF FX 5900 Ultra vs. ATi Radeon 9800 Pro</title>
-<link>http://slashdot.org/article.pl?sid=03/06/29/202218</link>
-</item>
-
-<item>
-<title>PHP 5 Beta 1</title>
-<link>http://slashdot.org/article.pl?sid=03/06/29/1957253</link>
-</item>
-
-<item>
-<title>Engaging with the OSS Community</title>
-<link>http://slashdot.org/article.pl?sid=03/06/29/1913235</link>
-</item>
-
-<item>
-<title>Pure Math, Pure Joy</title>
-<link>http://slashdot.org/article.pl?sid=03/06/29/183258</link>
-</item>
-
-<item>
-<title>Windows Tech Writer Looks at Linux</title>
-<link>http://slashdot.org/article.pl?sid=03/06/29/1554201</link>
-</item>
-
-<item>
-<title>US Cell Phone Users Discover SMS Spam</title>
-<link>http://slashdot.org/article.pl?sid=03/06/29/1542249</link>
-</item>
-
-<item>
-<title>Verizon Sues Nextel For Espionage</title>
-<link>http://slashdot.org/article.pl?sid=03/06/29/1443230</link>
-</item>
-
-<item>
-<title>Introduction to Debian</title>
-<link>http://slashdot.org/article.pl?sid=03/06/29/1424213</link>
-</item>
-
-<textinput>
-<title>Search Slashdot</title>
-<description>Search Slashdot stories</description>
-<name>query</name>
-<link>http://slashdot.org/search.pl</link>
-</textinput>
-
-</rdf:RDF> \ No newline at end of file
diff --git a/ext/simplexml/tests/bug25756.xsd b/ext/simplexml/tests/bug25756.xsd
deleted file mode 100644
index 427b7a1a14..0000000000
--- a/ext/simplexml/tests/bug25756.xsd
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
- <xsd:element name="foo" type="foo-type" />
- <xsd:complexType name="item-type">
- <xsd:all>
- <xsd:element name="product-name" type="xsd:string"
- minOccurs="1" maxOccurs="1"/>
- <xsd:element name="quantity" type="xsd:decimal"
- minOccurs="1" maxOccurs="1"/>
- </xsd:all>
- </xsd:complexType>
- <xsd:complexType name="foo-type">
- <xsd:sequence>
- <xsd:element name="items" minoccurs="1" maxOccurs="1">
- <xsd:complexType>
- <xsd:sequence>
- <xsd:element name="item" type="item-type"
- minOccurs="0" maxOccurs="unbounded" />
- </xsd:sequence>
- </xsd:complexType>
- </xsd:element>
- </xsd:sequence>
- </xsd:complexType>
-</xsd:schema>
diff --git a/ext/simplexml/tests/bug25756_1.xml b/ext/simplexml/tests/bug25756_1.xml
deleted file mode 100644
index 33ab30be10..0000000000
--- a/ext/simplexml/tests/bug25756_1.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<foo>
- <items>
- <item>
- <product-name>abc</product-name>
- <quantity>123</quantity>
- </item>
- <item>
- <product-name>def</product-name>
- <quantity>456</quantity>
- </item>
- </items>
-</foo>
diff --git a/ext/simplexml/tests/bug25756_2.xml b/ext/simplexml/tests/bug25756_2.xml
deleted file mode 100644
index 53037ef769..0000000000
--- a/ext/simplexml/tests/bug25756_2.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<foo>
- <items>
- <item>
- <product-name>abc</product-name>
- <quantity>abc</quantity>
- </item>
- <item>
- <product-name>abc</product-name>
- <quantity>123</quantity>
- </item>
- </items>
-</foo>
diff --git a/ext/simplexml/tests/bug26976.phpt b/ext/simplexml/tests/bug26976.phpt
deleted file mode 100644
index 657c229737..0000000000
--- a/ext/simplexml/tests/bug26976.phpt
+++ /dev/null
@@ -1,28 +0,0 @@
---TEST--
-Bug #26976 (Can not access array elements using array indices)
---SKIPIF--
-<?php if (!extension_loaded("simplexml")) print "skip simplexml extension is not loaded"; ?>
---FILE--
-<?php
-
-$root = simplexml_load_string(
-'<?xml version="1.0"?>
-<root>
- <child>a</child>
- <child>b</child>
- <child>c</child>
- <child>d</child>
-</root>
-');
-
-echo $root->child[0], "\n";
-echo $root->child[1], "\n";
-echo $root->child[2], "\n";
-echo $root->child[3], "\n";
-
-?>
---EXPECT--
-a
-b
-c
-d
diff --git a/ext/simplexml/tests/bug27010.phpt b/ext/simplexml/tests/bug27010.phpt
deleted file mode 100755
index 9ba9f7b6bd..0000000000
--- a/ext/simplexml/tests/bug27010.phpt
+++ /dev/null
@@ -1,32 +0,0 @@
---TEST--
-#27010: segfault and node text not displayed when returned from children()
---FILE--
-<?php
-
-$xml=<<<EOF
-<drinks xmlns:hot="http://www.example.com/hot">
- <hot:drink><hot:name>Coffee</hot:name></hot:drink>
- <hot:drink><hot:name>Tea</hot:name></hot:drink>
- <drink><name>Cola</name></drink>
- <drink><name>Juice</name></drink>
-</drinks>
-EOF;
-
-$sxe = simplexml_load_string($xml);
-
-foreach ($sxe as $element_name => $element) {
- print "$element_name is $element->name\n";
-}
-
-foreach ($sxe->children('http://www.example.com/hot') as $element_name => $element) {
- print "$element_name is $element->name\n";
-}
-
-?>
-===DONE===
---EXPECT--
-drink is Cola
-drink is Juice
-drink is Coffee
-drink is Tea
-===DONE===
diff --git a/ext/simplexml/tests/profile01.phpt b/ext/simplexml/tests/profile01.phpt
deleted file mode 100644
index 91b9544f66..0000000000
--- a/ext/simplexml/tests/profile01.phpt
+++ /dev/null
@@ -1,18 +0,0 @@
---TEST--
-SimpleXML [profile]: Accessing a simple node
---SKIPIF--
-<?php if (!extension_loaded("simplexml")) print "skip"; ?>
---FILE--
-<?php
-$root = simplexml_load_string('<?xml version="1.0"?>
-<root>
- <child>Hello</child>
-</root>
-');
-
-echo $root->child;
-echo "\n---Done---\n";
-?>
---EXPECT--
-Hello
----Done---
diff --git a/ext/simplexml/tests/profile02.phpt b/ext/simplexml/tests/profile02.phpt
deleted file mode 100644
index 14b5bb86b2..0000000000
--- a/ext/simplexml/tests/profile02.phpt
+++ /dev/null
@@ -1,21 +0,0 @@
---TEST--
-SimpleXML [profile]: Accessing an array of subnodes
---SKIPIF--
-<?php if (!extension_loaded("simplexml")) print "skip"; ?>
---FILE--
-<?php
-$root = simplexml_load_string('<?xml version="1.0"?>
-<root>
- <child>Hello</child>
- <child>World</child>
-</root>
-');
-
-foreach ($root->child as $child) {
- echo "$child ";
-}
-echo "\n---Done---\n";
-?>
---EXPECT--
-Hello World
----Done---
diff --git a/ext/simplexml/tests/profile03.phpt b/ext/simplexml/tests/profile03.phpt
deleted file mode 100644
index 14f1c5fe88..0000000000
--- a/ext/simplexml/tests/profile03.phpt
+++ /dev/null
@@ -1,18 +0,0 @@
---TEST--
-SimpleXML [profile]: Accessing an attribute
---SKIPIF--
-<?php if (!extension_loaded("simplexml")) print "skip"; ?>
---FILE--
-<?php
-$root = simplexml_load_string('<?xml version="1.0"?>
-<root>
- <child attribute="Sample" />
-</root>
-');
-
-echo $root->child['attribute'];
-echo "\n---Done---\n";
-?>
---EXPECT--
-Sample
----Done---
diff --git a/ext/simplexml/tests/profile04.phpt b/ext/simplexml/tests/profile04.phpt
deleted file mode 100644
index 27714e9927..0000000000
--- a/ext/simplexml/tests/profile04.phpt
+++ /dev/null
@@ -1,18 +0,0 @@
---TEST--
-SimpleXML [profile]: Accessing a namespaced element
---SKIPIF--
-<?php if (!extension_loaded("simplexml")) print "skip"; ?>
---FILE--
-<?php
-$root = simplexml_load_string('<?xml version="1.0"?>
-<root xmlns:reserved="reserved-ns">
- <reserved:child>Hello</reserved:child>
-</root>
-');
-
-echo $root->children('reserved-ns')->child;
-echo "\n---Done---\n";
-?>
---EXPECT--
-Hello
----Done---
diff --git a/ext/simplexml/tests/profile05.phpt b/ext/simplexml/tests/profile05.phpt
deleted file mode 100644
index f69622118a..0000000000
--- a/ext/simplexml/tests/profile05.phpt
+++ /dev/null
@@ -1,18 +0,0 @@
---TEST--
-SimpleXML [profile]: Accessing an aliased namespaced element
---SKIPIF--
-<?php if (!extension_loaded("simplexml")) print "skip"; ?>
---FILE--
-<?php
-error_reporting(E_ALL & ~E_NOTICE);
-$root = simplexml_load_string('<?xml version="1.0"?>
-<root xmlns:reserved="reserved-ns">
- <reserved:child>Hello</reserved:child>
-</root>
-');
-
-echo $root->children('reserved')->child;
-echo "\n---Done---\n";
-?>
---EXPECT--
----Done---
diff --git a/ext/simplexml/tests/profile06.phpt b/ext/simplexml/tests/profile06.phpt
deleted file mode 100644
index e519fa9d64..0000000000
--- a/ext/simplexml/tests/profile06.phpt
+++ /dev/null
@@ -1,20 +0,0 @@
---TEST--
-SimpleXML [profile]: Accessing a namespaced attribute
---SKIPIF--
-<?php if (!extension_loaded("simplexml")) print "skip"; ?>
---FILE--
-<?php
-error_reporting(E_ALL & ~E_NOTICE);
-$root = simplexml_load_string('<?xml version="1.0"?>
-<root xmlns:reserved="reserved-ns">
- <child reserved:attribute="Sample" />
-</root>
-');
-
-$attr = $root->child->attributes('reserved-ns');
-echo $attr['attribute'];
-echo "\n---Done---\n";
-?>
---EXPECT--
-Sample
----Done---
diff --git a/ext/simplexml/tests/profile07.phpt b/ext/simplexml/tests/profile07.phpt
deleted file mode 100644
index c8a4269274..0000000000
--- a/ext/simplexml/tests/profile07.phpt
+++ /dev/null
@@ -1,23 +0,0 @@
---TEST--
-SimpleXML [profile]: Accessing an aliased namespaced attribute
---SKIPIF--
-<?php if (!extension_loaded("simplexml")) print "skip"; ?>
---FILE--
-<?php
-error_reporting(E_ALL & ~E_NOTICE);
-$root = simplexml_load_string('<?xml version="1.0"?>
-<root xmlns:reserved="reserved-ns">
- <child reserved:attribute="Sample" />
-</root>
-');
-
-$rsattr = $root->child->attributes('reserved');
-$myattr = $root->child->attributes('reserved-ns');
-
-echo $rsattr['attribute'];
-echo $myattr['attribute'];
-echo "\n---Done---\n";
-?>
---EXPECT--
-Sample
----Done---
diff --git a/ext/simplexml/tests/profile08.phpt b/ext/simplexml/tests/profile08.phpt
deleted file mode 100644
index bbb69b75a8..0000000000
--- a/ext/simplexml/tests/profile08.phpt
+++ /dev/null
@@ -1,18 +0,0 @@
---TEST--
-SimpleXML [profile]: Accessing a namespaced attribute without a namespace
---SKIPIF--
-<?php if (!extension_loaded("simplexml")) print "skip"; ?>
---FILE--
-<?php
-error_reporting(E_ALL & ~E_NOTICE);
-$root = simplexml_load_string('<?xml version="1.0"?>
-<root xmlns:reserved="reserved-ns">
- <child reserved:attribute="Sample" />
-</root>
-');
-
-echo $root->child['attribute'];
-echo "\n---Done---\n";
-?>
---EXPECT--
----Done---
diff --git a/ext/simplexml/tests/profile09.phpt b/ext/simplexml/tests/profile09.phpt
deleted file mode 100644
index 714572df1e..0000000000
--- a/ext/simplexml/tests/profile09.phpt
+++ /dev/null
@@ -1,19 +0,0 @@
---TEST--
-SimpleXML [profile]: Accessing a namespaced element without a namespace
---SKIPIF--
-<?php if (!extension_loaded("simplexml")) print "skip"; ?>
---FILE--
-<?php
-error_reporting(E_ALL & ~E_NOTICE);
-$root = simplexml_load_string('<?xml version="1.0"?>
-<root xmlns:reserved="reserved-ns">
- <reserved:child>Hello</reserved:child>
-</root>
-');
-
-echo $root->child;
-echo "\n---Done---\n";
-?>
---EXPECT--
-
----Done---
diff --git a/ext/simplexml/tests/profile10.phpt b/ext/simplexml/tests/profile10.phpt
deleted file mode 100644
index 6ef7456c51..0000000000
--- a/ext/simplexml/tests/profile10.phpt
+++ /dev/null
@@ -1,25 +0,0 @@
---TEST--
-SimpleXML [profile]: Accessing two attributes with the same name, but different namespaces
---SKIPIF--
-<?php if (!extension_loaded("simplexml")) print "skip"; ?>
---FILE--
-<?php
-error_reporting(E_ALL & ~E_NOTICE);
-$root = simplexml_load_string('<?xml version="1.0"?>
-<root xmlns:reserved="reserved-ns" xmlns:special="special-ns">
- <child reserved:attribute="Sample" special:attribute="Test" />
-</root>
-');
-
-$rsattr = $root->child->attributes('reserved-ns');
-$spattr = $root->child->attributes('special-ns');
-
-echo $rsattr['attribute'];
-echo "\n";
-echo $spattr['attribute'];
-echo "\n---Done---\n";
-?>
---EXPECT--
-Sample
-Test
----Done---
diff --git a/ext/simplexml/tests/profile11.phpt b/ext/simplexml/tests/profile11.phpt
deleted file mode 100644
index e68e6bd510..0000000000
--- a/ext/simplexml/tests/profile11.phpt
+++ /dev/null
@@ -1,26 +0,0 @@
---TEST--
-SimpleXML [profile]: Accessing two elements with the same name, but different namespaces
---SKIPIF--
-<?php if (!extension_loaded("simplexml")) print "skip"; ?>
---FILE--
-<?php
-error_reporting(E_ALL & ~E_NOTICE);
-$root = simplexml_load_string('<?xml version="1.0"?>
-<root xmlns:reserved="reserved-ns" xmlns:special="special-ns">
- <reserved:child>Hello</reserved:child>
- <special:child>World</special:child>
-</root>
-');
-
-echo $root->children('reserved-ns')->child;
-echo "\n";
-echo $root->children('special-ns')->child;
-foreach ($root->child as $child) {
- echo "$child\n";
-}
-echo "\n---Done---\n";
-?>
---EXPECT--
-Hello
-World
----Done---
diff --git a/ext/simplexml/tests/simplexml_import_dom.phpt b/ext/simplexml/tests/simplexml_import_dom.phpt
deleted file mode 100755
index c66ba8f087..0000000000
--- a/ext/simplexml/tests/simplexml_import_dom.phpt
+++ /dev/null
@@ -1,22 +0,0 @@
---TEST--
-Interop: simplexml_import_dom
---SKIPIF--
-<?php if (!extension_loaded("simplexml")) print "skip"; ?>
-<?php if (!extension_loaded("dom")) print "skip. dom extension not loaded"; ?>
---FILE--
-<?php
-$dom = new domDocument;
-$dom->load(dirname(__FILE__)."/book.xml");
-if(!$dom) {
- echo "Error while parsing the document\n";
- exit;
-}
-$s = simplexml_import_dom($dom);
-$books = $s->book;
-foreach ($books as $book) {
- echo "{$book->title} was written by {$book->author}\n";
-}
-?>
---EXPECT--
-The Grapes of Wrath was written by John Steinbeck
-The Pearl was written by John Steinbeck
diff --git a/ext/simplexml/tests/sxe.dtd b/ext/simplexml/tests/sxe.dtd
deleted file mode 100755
index 8a8dde4308..0000000000
--- a/ext/simplexml/tests/sxe.dtd
+++ /dev/null
@@ -1,21 +0,0 @@
-<?xml encoding='US-ASCII'?>
-
-<!ELEMENT sxe elem1, elem 11>
-<!ATTLIST sxe id CDATA #implied>
-
-<!ELEMENT elem1 elem2>
-<!ATTLIST elem1 attr1 CDATA #required
- attr2 CDATA "default>
-
-<!ELEMENT elem2 elem3>
-<!ATTLIST elem2>
-
-<!ELEMENT elem3 elem4>
-<!ATTLIST elem3>
-
-<!ELEMENT elem4 EMPTY>
-<!ATTLIST elem4>
-
-<!ELEMENT elem11 EMPTY>
-<!ATTLIST elem11>
-
diff --git a/ext/simplexml/tests/sxe.ent b/ext/simplexml/tests/sxe.ent
deleted file mode 100755
index 8f86465c2a..0000000000
--- a/ext/simplexml/tests/sxe.ent
+++ /dev/null
@@ -1 +0,0 @@
-<!ENTITY included-entity "This is text included from an entity">
diff --git a/ext/simplexml/tests/sxe.xml b/ext/simplexml/tests/sxe.xml
deleted file mode 100755
index 909b4e652c..0000000000
--- a/ext/simplexml/tests/sxe.xml
+++ /dev/null
@@ -1,17 +0,0 @@
-<?xml version='1.0'?>
-<!DOCTYPE sxe SYSTEM "notfound.dtd" [
-<!ENTITY % incent SYSTEM "sxe.ent">
-%incent;
-]>
-<sxe id="elem1">
- <elem1 attr1='first'>
- <!-- comment -->
- <elem2>
- <elem3>
- <elem4>
- <?test processing instruction ?>
- </elem4>
- </elem3>
- </elem2>
- </elem1>
-</sxe> \ No newline at end of file
diff --git a/ext/skeleton/CREDITS b/ext/skeleton/CREDITS
deleted file mode 100644
index 58fc71019a..0000000000
--- a/ext/skeleton/CREDITS
+++ /dev/null
@@ -1 +0,0 @@
-extname \ No newline at end of file
diff --git a/ext/skeleton/EXPERIMENTAL b/ext/skeleton/EXPERIMENTAL
deleted file mode 100644
index e69de29bb2..0000000000
--- a/ext/skeleton/EXPERIMENTAL
+++ /dev/null
diff --git a/ext/skeleton/create_stubs b/ext/skeleton/create_stubs
deleted file mode 100755
index 61957289d0..0000000000
--- a/ext/skeleton/create_stubs
+++ /dev/null
@@ -1,289 +0,0 @@
-#!/usr/bin/awk -f
-
-function gobble(s, x)
-{
- sub(/^ /, "", line)
- match(line, "^" "(" s ")")
- x = substr(line, 1, RLENGTH)
- line = substr(line, RLENGTH+1)
- return x
-}
-
-function convert(i, j, t)
-{
- type = argtypes[i,j]
- name = argnames[i,j]
- opt = optionals[i,j]
- tabs = x = ""
-
- for (i = 0; i < t; i++) { tabs = tabs "\t" }
-
- if (type == "int" || type == "long") {
- longs = longs "\tlong " name ";\n"
- } else if (type == "bool" || type == "boolean") {
- bools = bools "\tzend_bool " name ";\n"
- } else if (type == "double" || type == "float") {
- doubles = doubles "\tdouble " name ";\n"
- } else if (type == "string") {
- strings = strings "\tchar *" name " = NULL;\n"
- ints = ints "\tint " name "_len;\n"
- } else if (type == "array" || type == "object" || type == "mixed") {
- zvals = zvals "\tzval *" name " = NULL;\n"
- } else if (type == "resource" || type == "handle") {
- zvals = zvals "\tzval *" name " = NULL;\n"
- resources = resources "\tif (" name ") {\n" \
- "\t\tZEND_FETCH_RESOURCE(???, ???, " name ", " name "_id, \"???\", ???_rsrc_id);\n\t}\n"
- ints = ints "\tint " name "_id = -1;\n"
- }
-}
-
-function comment(s)
-{
- if (i_know_what_to_do_shut_up_i_dont_need_your_help_mode) {
- return
- } else {
- return s
- }
-}
-
-BEGIN {
- name = "[_A-Za-z][_A-Za-z0-9]*"
- type = "int|long|double|float|string|bool|boolean|array|object|resource|handle|mixed|void"
- spec = "l|l|d|d|s|b|b|a|o|r|r|z|"
- num_funcs = 0
-
-# create a map from type name to the spec
- split(type, type_array, "\|")
- split(spec, spec_array, "\|")
- for (i in type_array) {
- spec_map[type_array[i]] = spec_array[i]
- }
-
- if (xml && xml != "yes") {
- xmldoc = xml
- } else {
- xmldoc = extname "/" extname ".xml"
- }
-
-
- xmlhead = "<?xml version='1.0' encoding='iso-8859-1'?>\n" \
- "<!-- $Revision$ -->\n" \
- " <reference id=\"ref." extname "\">\n" \
- " <title> functions</title>\n" \
- " <titleabbrev></titleabbrev>\n\n" \
- " <partintro>\n" \
- " &warn.experimental;\n" \
- " <para>\n" \
- " </para>\n" \
- " </partintro>\n\n";
-
- xmlfoot = " </reference>\n\n" \
- "<!-- Keep this comment at the end of the file\n" \
- "Local variables:\n" \
- "mode: sgml\n" \
- "sgml-omittag:t\n" \
- "sgml-shorttag:t\n" \
- "sgml-minimize-attributes:nil\n" \
- "sgml-always-quote-attributes:t\n" \
- "sgml-indent-step:1\n" \
- "sgml-indent-data:t\n" \
- "indent-tabs-mode:nil\n" \
- "sgml-parent-document:nil\n" \
- "sgml-default-dtd-file:\"../../manual.ced\"\n" \
- "sgml-exposed-tags:nil\n" \
- "sgml-local-catalogs:nil\n" \
- "sgml-local-ecat-files:nil\n" \
- "End:\n" \
- "vim600: syn=xml fen fdm=syntax fdl=2 si\n" \
- "vim: et tw=78 syn=sgml\n" \
- "vi: ts=1 sw=1\n" \
- "-->\n"
-}
-
-{
- args_max = args_min = optional = i = spec_opt = 0
- line = $0
- spec_str = "\""
-
-## php extension must use lower case function names.
-## this will translate any capitalized letter to lowercase
-## and warn the user
- if (match(func_name,"[A-Z]") != 0) {
- printf("NOTICE: lower casing function name '%s'\n",func_name)
- func_name = tolower(func_name)
- }
- func_type = gobble(type);
- func_name = gobble(name);
-
- if (gobble("\\(")) {
- if (gobble("\\[")) optional = 1
- while (arg_type = gobble(type)) {
- arg_name = gobble(name)
- if(arg_type == "void") {
- args_max = 0;
- args_min = 0;
- break;
- } else {
- argtypes[num_funcs,args_max] = arg_type
- argnames[num_funcs,args_max] = arg_name
-
- args_max++
- if (optional) {
- if (!spec_opt) {
- spec_str = spec_str "|"
- spec_opt = 1
- }
- optionals[num_funcs,i] = optional
- } else {
- args_min++
- }
- spec_str = spec_str spec_map[arg_type]
-
- if (x = gobble("\\[")) {
- optional++
- }
-
- y = gobble(",")
- if (!x && y && optional) {
- grouped_optional_param[num_funcs,i] = 1
- }
- i++
- }
- }
- }
-
-# if (x = gobble("\\)")) {
- gobble("\\]* *\\)")
- sub(/^[ \t]+/, "", line)
- fcomments[num_funcs] = line
-# }
-
- spec_str = spec_str "\""
-
- funcs[num_funcs] = func_name
- types[num_funcs] = func_type
- maxargs[num_funcs] = args_max
- minargs[num_funcs] = args_min
- specs[num_funcs] = spec_str
- spec_opts[num_funcs] = spec_opt
-
- num_funcs++
-}
-
-END {
- if (xml) print xmlhead > xmldoc
- for (i = 0; i < num_funcs; i++) {
- compareargc = maxargs[i] - minargs[i]
- closefetch = fetchargs = zvals = xmlparams = funcvals = resources = handleargs = closeopts = ""
- ints = longs = doubles = strings = bools = zvals = ""
-
- proto = "/* {{{ proto " types[i] " " funcs[i] "("
-
- refid = funcs[i]
- gsub(/_/, "-", refid)
- xmlstr = " <refentry id=\"function." refid "\">\n" \
- " <refnamediv>\n" \
- " <refname>" funcs[i] "</refname>\n" \
- " <refpurpose>" fcomments[i] "</refpurpose>\n" \
- " </refnamediv>\n" \
- " <refsect1>\n" \
- " <title>Description</title>\n" \
- " <funcsynopsis>\n" \
- " <funcprototype>\n" \
- " <funcdef>" types[i] " <function>" funcs[i] "</function></funcdef>\n"
-
- if (maxargs[i]>0) {
- fetchargs = "\tif (zend_parse_parameters("
- ints = ints "\tint argc = ZEND_NUM_ARGS();\n"
- fetchargs = fetchargs "argc TSRMLS_CC, " specs[i]
- } else {
- fetchargs = fetchargs "\tif (ZEND_NUM_ARGS() != 0) {\n\t\tWRONG_PARAM_COUNT;\n\t}"
- xmlparams = xmlparams " <void/>\n"
- }
-
- for (j = 0; j < maxargs[i]; j++) {
-
- fetchargs = fetchargs ", "
-
- fetchargs = fetchargs "&" argnames[i,j]
- if (argtypes[i,j] == "string") {
- fetchargs = fetchargs ", &" argnames[i,j] "_len"
- }
-
- xmlparams = xmlparams " <paramdef>" argtypes[i,j]
- if (j > minargs[i]-1) {
- if (!grouped_optional_param[i,j-1]) {
- if (j > 0) proto = proto " "
- proto = proto "["
- closeopts = closeopts "]"
- }
- xmlparams = xmlparams "\n <parameter><optional>" \
- argnames[i,j] \
- "</optional></parameter>\n </paramdef>\n"
- } else {
- xmlparams = xmlparams \
- " <parameter>" \
- argnames[i,j] \
- "</parameter></paramdef>\n"
- }
-
- if (j > 0) proto = proto ", "
- proto = proto argtypes[i,j] " " argnames[i,j]
-
- convert(i, j, 1)
- }
-
- proto = proto closeopts ")\n " fcomments[i] " */\nPHP_FUNCTION(" funcs[i] ")\n{"
- if (maxargs[i]>0) {
- fetchargs = fetchargs ") == FAILURE)" closefetch " \n\t\treturn;\n"
- }
- funcvals = strings ints longs doubles bools zvals
- xmlstr = xmlstr xmlparams \
- " </funcprototype>\n" \
- " </funcsynopsis>\n" \
- " &warn.experimental.func;\n" \
- " <para>\n" \
- " &warn.undocumented.func;\n" \
- " </para>\n" \
- " </refsect1>\n" \
- " </refentry>\n"
-
- print proto > stubfile
- if (funcvals) print funcvals > stubfile
- if (fetchargs) print fetchargs > stubfile
- if (resources) {
- print resources > stubfile
- if (!stubs) print "" > extname "/function_warning"
- }
- if (!i_know_what_to_do_shut_up_i_dont_need_your_help_mode) {
- print "\tphp_error(E_WARNING, \"" funcs[i] ": not yet implemented\");" > stubfile
- }
- print "}\n/* }}} */\n" > stubfile
-
- if (stubs) {
- h_stubs = h_stubs "PHP_FUNCTION(" funcs[i] ");\n"
- c_stubs = c_stubs "\tPHP_FE(" funcs[i] ",\tNULL)\n"
- } else {
- print "PHP_FUNCTION(" funcs[i] ");" > extname "/function_declarations"
- print "\tPHP_FE(" funcs[i] ",\tNULL)" > extname "/function_entries"
- }
-
- if (xml) print xmlstr > xmldoc
- }
-
- if (stubs) {
- print "\n/* ----------------------------------------------------------- */\n" > stubfile
- print c_stubs > stubfile
- print "\n/* ----------------------------------------------------------- */\n" > stubfile
- print h_stubs > stubfile
- }
-
- if (xml) print xmlfoot > xmldoc
-}
-
-#
-# Local variables:
-# tab-width: 2
-# c-basic-offset: 2
-# End:
-
diff --git a/ext/skeleton/php_skeleton.h b/ext/skeleton/php_skeleton.h
deleted file mode 100644
index 7508f4f979..0000000000
--- a/ext/skeleton/php_skeleton.h
+++ /dev/null
@@ -1,56 +0,0 @@
-/* __header_here__ */
-
-#ifndef PHP_EXTNAME_H
-#define PHP_EXTNAME_H
-
-extern zend_module_entry extname_module_entry;
-#define phpext_extname_ptr &extname_module_entry
-
-#ifdef PHP_WIN32
-#define PHP_EXTNAME_API __declspec(dllexport)
-#else
-#define PHP_EXTNAME_API
-#endif
-
-#ifdef ZTS
-#include "TSRM.h"
-#endif
-
-PHP_MINIT_FUNCTION(extname);
-PHP_MSHUTDOWN_FUNCTION(extname);
-PHP_RINIT_FUNCTION(extname);
-PHP_RSHUTDOWN_FUNCTION(extname);
-PHP_MINFO_FUNCTION(extname);
-
-PHP_FUNCTION(confirm_extname_compiled); /* For testing, remove later. */
-/* __function_declarations_here__ */
-
-/*
- Declare any global variables you may need between the BEGIN
- and END macros here:
-
-ZEND_BEGIN_MODULE_GLOBALS(extname)
- long global_value;
- char *global_string;
-ZEND_END_MODULE_GLOBALS(extname)
-*/
-
-/* In every utility function you add that needs to use variables
- in php_extname_globals, call TSRMLS_FETCH(); after declaring other
- variables used by that function, or better yet, pass in TSRMLS_CC
- after the last function argument and declare your utility function
- with TSRMLS_DC after the last declared argument. Always refer to
- the globals in your function as EXTNAME_G(variable). You are
- encouraged to rename these macros something shorter, see
- examples in any other php module directory.
-*/
-
-#ifdef ZTS
-#define EXTNAME_G(v) TSRMG(extname_globals_id, zend_extname_globals *, v)
-#else
-#define EXTNAME_G(v) (extname_globals.v)
-#endif
-
-#endif /* PHP_EXTNAME_H */
-
-/* __footer_here__ */
diff --git a/ext/skeleton/skeleton.c b/ext/skeleton/skeleton.c
deleted file mode 100644
index 021b76e789..0000000000
--- a/ext/skeleton/skeleton.c
+++ /dev/null
@@ -1,167 +0,0 @@
-/* __header_here__ */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "php.h"
-#include "php_ini.h"
-#include "ext/standard/info.h"
-#include "php_extname.h"
-
-/* If you declare any globals in php_extname.h uncomment this:
-ZEND_DECLARE_MODULE_GLOBALS(extname)
-*/
-
-/* True global resources - no need for thread safety here */
-static int le_extname;
-
-/* {{{ extname_functions[]
- *
- * Every user visible function must have an entry in extname_functions[].
- */
-function_entry extname_functions[] = {
- PHP_FE(confirm_extname_compiled, NULL) /* For testing, remove later. */
- /* __function_entries_here__ */
- {NULL, NULL, NULL} /* Must be the last line in extname_functions[] */
-};
-/* }}} */
-
-/* {{{ extname_module_entry
- */
-zend_module_entry extname_module_entry = {
-#if ZEND_MODULE_API_NO >= 20010901
- STANDARD_MODULE_HEADER,
-#endif
- "extname",
- extname_functions,
- PHP_MINIT(extname),
- PHP_MSHUTDOWN(extname),
- PHP_RINIT(extname), /* Replace with NULL if there's nothing to do at request start */
- PHP_RSHUTDOWN(extname), /* Replace with NULL if there's nothing to do at request end */
- PHP_MINFO(extname),
-#if ZEND_MODULE_API_NO >= 20010901
- "0.1", /* Replace with version number for your extension */
-#endif
- STANDARD_MODULE_PROPERTIES
-};
-/* }}} */
-
-#ifdef COMPILE_DL_EXTNAME
-ZEND_GET_MODULE(extname)
-#endif
-
-/* {{{ PHP_INI
- */
-/* Remove comments and fill if you need to have entries in php.ini
-PHP_INI_BEGIN()
- STD_PHP_INI_ENTRY("extname.global_value", "42", PHP_INI_ALL, OnUpdateLong, global_value, zend_extname_globals, extname_globals)
- STD_PHP_INI_ENTRY("extname.global_string", "foobar", PHP_INI_ALL, OnUpdateString, global_string, zend_extname_globals, extname_globals)
-PHP_INI_END()
-*/
-/* }}} */
-
-/* {{{ php_extname_init_globals
- */
-/* Uncomment this function if you have INI entries
-static void php_extname_init_globals(zend_extname_globals *extname_globals)
-{
- extname_globals->global_value = 0;
- extname_globals->global_string = NULL;
-}
-*/
-/* }}} */
-
-/* {{{ PHP_MINIT_FUNCTION
- */
-PHP_MINIT_FUNCTION(extname)
-{
- /* If you have INI entries, uncomment these lines
- ZEND_INIT_MODULE_GLOBALS(extname, php_extname_init_globals, NULL);
- REGISTER_INI_ENTRIES();
- */
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ PHP_MSHUTDOWN_FUNCTION
- */
-PHP_MSHUTDOWN_FUNCTION(extname)
-{
- /* uncomment this line if you have INI entries
- UNREGISTER_INI_ENTRIES();
- */
- return SUCCESS;
-}
-/* }}} */
-
-/* Remove if there's nothing to do at request start */
-/* {{{ PHP_RINIT_FUNCTION
- */
-PHP_RINIT_FUNCTION(extname)
-{
- return SUCCESS;
-}
-/* }}} */
-
-/* Remove if there's nothing to do at request end */
-/* {{{ PHP_RSHUTDOWN_FUNCTION
- */
-PHP_RSHUTDOWN_FUNCTION(extname)
-{
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ PHP_MINFO_FUNCTION
- */
-PHP_MINFO_FUNCTION(extname)
-{
- php_info_print_table_start();
- php_info_print_table_header(2, "extname support", "enabled");
- php_info_print_table_end();
-
- /* Remove comments if you have entries in php.ini
- DISPLAY_INI_ENTRIES();
- */
-}
-/* }}} */
-
-
-/* Remove the following function when you have succesfully modified config.m4
- so that your module can be compiled into PHP, it exists only for testing
- purposes. */
-
-/* Every user-visible function in PHP should document itself in the source */
-/* {{{ proto string confirm_extname_compiled(string arg)
- Return a string to confirm that the module is compiled in */
-PHP_FUNCTION(confirm_extname_compiled)
-{
- char *arg = NULL;
- int arg_len, len;
- char string[256];
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &arg, &arg_len) == FAILURE) {
- return;
- }
-
- len = sprintf(string, "Congratulations! You have successfully modified ext/%.78s/config.m4. Module %.78s is now compiled into PHP.", "extname", arg);
- RETURN_STRINGL(string, len, 1);
-}
-/* }}} */
-/* The previous line is meant for vim and emacs, so it can correctly fold and
- unfold functions in source code. See the corresponding marks just before
- function definition, where the functions purpose is also documented. Please
- follow this convention for the convenience of others editing your code.
-*/
-
-/* __function_stubs_here__ */
-
-/*
- * 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/skeleton/skeleton.dsp b/ext/skeleton/skeleton.dsp
deleted file mode 100644
index c3c67c7e34..0000000000
--- a/ext/skeleton/skeleton.dsp
+++ /dev/null
@@ -1,113 +0,0 @@
-# Microsoft Developer Studio Project File - Name="extname" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=extname - Win32 Release_TS
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "extname.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "extname.mak" CFG="extname - Win32 Release_TS"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "extname - Win32 Release_TS" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "extname - Win32 Debug_TS" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "extname - Win32 Release_TS"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release_TS"
-# PROP BASE Intermediate_Dir "Release_TS"
-# PROP BASE Ignore_Export_Lib 0
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release_TS"
-# PROP Intermediate_Dir "Release_TS"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MT /W3 /GX /O2 /I "..\.." /I "..\..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\..\TSRM" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "COMPILE_DL_EXTNAME" /D ZTS=1 /YX /FD /c
-# ADD CPP /nologo /MD /W3 /GX /O2 /I "..\.." /I "..\..\main" /I "..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\TSRM" /D ZEND_DEBUG=0 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "EXTNAME_EXPORTS" /D "COMPILE_DL_EXTNAME" /D ZTS=1 /D "ZEND_WIN32" /D "PHP_WIN32" /D HAVE_EXTNAME=1 /D "LIBZEND_EXPORTS" /FR /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x406 /d "NDEBUG"
-# ADD RSC /l 0x406 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib php5ts.lib /nologo /dll /machine:I386
-# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib php5ts.lib /nologo /dll /machine:I386 /out:"..\..\Release_TS/php_extname.dll" /libpath:"..\..\Release_TS" /libpath:"..\..\Release_TS_Inline"
-
-!ELSEIF "$(CFG)" == "extname - Win32 Debug_TS"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Debug_TS"
-# PROP BASE Intermediate_Dir "Debug_TS"
-# PROP BASE Ignore_Export_Lib 0
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Debug_TS"
-# PROP Intermediate_Dir "Debug_TS"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MT /W3 /GX /O2 /I "..\.." /I "..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\TSRM" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "COMPILE_DL_EXTNAME" /D ZTS=1 /YX /FD /c
-# ADD CPP /nologo /MDd /W3 /GX /O2 /I "..\.." /I "..\..\main" /I "..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\TSRM" /D ZEND_DEBUG=1 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "EXTNAME_EXPORTS" /D "COMPILE_DL_EXTNAME" /D ZTS=1 /D "ZEND_WIN32" /D "PHP_WIN32" /D HAVE_EXTNAME=1 /D "LIBZEND_EXPORTS" /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x406 /d "NDEBUG"
-# ADD RSC /l 0x406 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib php5ts.lib /nologo /dll /machine:I386
-# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib php5ts_debug.lib /nologo /dll /machine:I386 /out:"..\..\Debug_TS/php_extname.dll" /libpath:"..\..\Debug_TS"
-
-!ENDIF
-
-# Begin Target
-
-# Name "extname - Win32 Release_TS"
-# Name "extname - Win32 Debug_TS"
-# Begin Group "Source Files"
-
-# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
-# Begin Source File
-
-SOURCE=.\extname.c
-# End Source File
-# End Group
-# Begin Group "Header Files"
-
-# PROP Default_Filter "h;hpp;hxx;hm;inl"
-# Begin Source File
-
-SOURCE=.\php_extname.h
-# End Source File
-# End Group
-# Begin Group "Resource Files"
-
-# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
-# End Group
-# End Target
-# End Project
diff --git a/ext/skeleton/skeleton.php b/ext/skeleton/skeleton.php
deleted file mode 100644
index 12e1e64bb4..0000000000
--- a/ext/skeleton/skeleton.php
+++ /dev/null
@@ -1,19 +0,0 @@
-<?
-if(!extension_loaded('extname')) {
- dl('extname.' . PHP_SHLIB_SUFFIX);
-}
-$module = 'extname';
-$functions = get_extension_funcs($module);
-echo "Functions available in the test extension:<br>\n";
-foreach($functions as $func) {
- echo $func."<br>\n";
-}
-echo "<br>\n";
-$function = 'confirm_' . $module . '_compiled';
-if (extension_loaded($module)) {
- $str = $function($module);
-} else {
- $str = "Module $module is not compiled into PHP";
-}
-echo "$str\n";
-?>
diff --git a/ext/skeleton/tests/001.phpt b/ext/skeleton/tests/001.phpt
deleted file mode 100644
index a375577e1b..0000000000
--- a/ext/skeleton/tests/001.phpt
+++ /dev/null
@@ -1,21 +0,0 @@
---TEST--
-Check for extname presence
---SKIPIF--
-<?php if (!extension_loaded("extname")) print "skip"; ?>
---FILE--
-<?php
-echo "extname extension is available";
-/*
- you can add regression tests for your extension here
-
- the output of your test code has to be equal to the
- text in the --EXPECT-- section below for the tests
- to pass, differences between the output and the
- expected text are interpreted as failure
-
- see php5/README.TESTING for further information on
- writing regression tests
-*/
-?>
---EXPECT--
-extname extension is available
diff --git a/ext/snmp/CREDITS b/ext/snmp/CREDITS
deleted file mode 100644
index 2ff38dbe6d..0000000000
--- a/ext/snmp/CREDITS
+++ /dev/null
@@ -1,2 +0,0 @@
-SNMP
-Rasmus Lerdorf, Harrie Hazewinkel, Mike Jackson, Steven Lawrance, Johann Hanne
diff --git a/ext/snmp/config.m4 b/ext/snmp/config.m4
deleted file mode 100644
index 455bc31cac..0000000000
--- a/ext/snmp/config.m4
+++ /dev/null
@@ -1,138 +0,0 @@
-dnl
-dnl $Id$
-dnl
-
-PHP_ARG_WITH(snmp,for SNMP support,
-[ --with-snmp[=DIR] Include SNMP support.])
-
-PHP_ARG_WITH(openssl-dir,OpenSSL dir for SNMP,
-[ --with-openssl-dir[=DIR] SNMP: openssl install prefix.], no, no)
-
-if test "$PHP_SNMP" != "no"; then
-
- dnl
- dnl Try net-snmp first
- dnl
- if test "$PHP_SNMP" = "yes"; then
- AC_PATH_PROG(SNMP_CONFIG,net-snmp-config,,[/usr/local/bin:$PATH])
- else
- SNMP_CONFIG="$PHP_SNMP/bin/net-snmp-config"
- fi
-
- if test -x "$SNMP_CONFIG"; then
- SNMP_LIBS=`$SNMP_CONFIG --netsnmp-libs`
- SNMP_LIBS="$SNMP_LIBS `$SNMP_CONFIG --external-libs`"
- SNMP_PREFIX=`$SNMP_CONFIG --prefix`
-
- if test -n "$SNMP_LIBS" && test -n "$SNMP_PREFIX"; then
- PHP_ADD_INCLUDE(${SNMP_PREFIX}/include)
- PHP_EVAL_LIBLINE($SNMP_LIBS, SNMP_SHARED_LIBADD)
- AC_DEFINE(HAVE_NET_SNMP,1,[ ])
- SNMP_LIBNAME=netsnmp
- else
- AC_MSG_ERROR([Could not find the required paths. Please check your net-snmp installation.])
- fi
- else
-
- dnl
- dnl Try ucd-snmp if net-snmp test failed
- dnl
-
- if test "$PHP_SNMP" = "yes"; then
- for i in /usr/include /usr/local/include; do
- test -f $i/snmp.h && SNMP_INCDIR=$i
- test -f $i/ucd-snmp/snmp.h && SNMP_INCDIR=$i/ucd-snmp
- test -f $i/snmp/snmp.h && SNMP_INCDIR=$i/snmp
- test -f $i/snmp/include/ucd-snmp/snmp.h && SNMP_INCDIR=$i/snmp/include/ucd-snmp
- done
- for i in /usr /usr/snmp /usr/local /usr/local/snmp; do
- test -f $i/lib/libsnmp.a -o -f $i/lib/libsnmp.$SHLIB_SUFFIX_NAME && SNMP_LIBDIR=$i/lib
- done
- else
- SNMP_INCDIR=$PHP_SNMP/include
- test -d $PHP_SNMP/include/ucd-snmp && SNMP_INCDIR=$PHP_SNMP/include/ucd-snmp
- SNMP_LIBDIR=$PHP_SNMP/lib
- fi
-
- if test -z "$SNMP_INCDIR"; then
- AC_MSG_ERROR(snmp.h not found. Check your SNMP installation.)
- elif test -z "$SNMP_LIBDIR"; then
- AC_MSG_ERROR(libsnmp not found. Check your SNMP installation.)
- fi
-
- old_CPPFLAGS=$CPPFLAGS
- CPPFLAGS=-I$SNMP_INCDIR
- AC_CHECK_HEADERS(default_store.h)
- if test "$ac_cv_header_default_store_h" = "yes"; then
- AC_MSG_CHECKING(for OpenSSL support in SNMP libraries)
- AC_EGREP_CPP(yes,[
-#include <ucd-snmp-config.h>
-#if USE_OPENSSL
- yes
-#endif
- ],[
- SNMP_SSL=yes
- ],[
- SNMP_SSL=no
- ])
- fi
- CPPFLAGS=$old_CPPFLAGS
- AC_MSG_RESULT($SNMP_SSL)
-
- if test "$SNMP_SSL" = "yes"; then
- if test "$PHP_OPENSSL_DIR" != "no"; then
- PHP_OPENSSL=$PHP_OPENSSL_DIR
- fi
-
- if test "$PHP_OPENSSL" = "no"; then
- AC_MSG_ERROR([The UCD-SNMP in this system is built with SSL support.
-
- Add --with-openssl-dir=DIR to your configure line.])
- else
- PHP_SETUP_OPENSSL(SNMP_SHARED_LIBADD, [], [
- AC_MSG_ERROR([SNMP: OpenSSL check failed. Please check config.log for more information.])
- ])
- fi
- fi
-
- AC_CHECK_LIB(kstat, kstat_read, [ PHP_ADD_LIBRARY(kstat,,SNMP_SHARED_LIBADD) ])
- PHP_ADD_INCLUDE($SNMP_INCDIR)
- PHP_ADD_LIBRARY_WITH_PATH(snmp, $SNMP_LIBDIR, SNMP_SHARED_LIBADD)
- SNMP_LIBNAME=snmp
- fi
-
- dnl Check whether snmp_parse_oid() exists.
- PHP_CHECK_LIBRARY($SNMP_LIBNAME, snmp_parse_oid,
- [
- AC_DEFINE(HAVE_SNMP_PARSE_OID, 1, [ ])
- ], [], [
- $SNMP_SHARED_LIBADD
- ])
-
- dnl Test build.
- PHP_CHECK_LIBRARY($SNMP_LIBNAME, init_snmp,
- [
- AC_DEFINE(HAVE_SNMP,1,[ ])
- ], [
- AC_MSG_ERROR([SNMP sanity check failed. Please check config.log for more information.])
- ], [
- $SNMP_SHARED_LIBADD
- ])
-
- PHP_NEW_EXTENSION(snmp, snmp.c, $ext_shared)
- PHP_SUBST(SNMP_SHARED_LIBADD)
-fi
-
-
-AC_MSG_CHECKING(whether to enable UCD SNMP hack)
-AC_ARG_ENABLE(ucd-snmp-hack,
-[ --enable-ucd-snmp-hack Enable UCD SNMP hack],[
- if test "$enableval" = "yes" ; then
- AC_DEFINE(UCD_SNMP_HACK, 1, [ ])
- AC_MSG_RESULT(yes)
- else
- AC_MSG_RESULT(no)
- fi
-],[
- AC_MSG_RESULT(no)
-])
diff --git a/ext/snmp/config.w32 b/ext/snmp/config.w32
deleted file mode 100644
index 4bf6750d41..0000000000
--- a/ext/snmp/config.w32
+++ /dev/null
@@ -1,18 +0,0 @@
-// $Id$
-// vim:ft=javascript
-
-ARG_WITH("snmp", "SNMP support", "no");
-
-if (PHP_SNMP != "no") {
-
- if (CHECK_HEADER_ADD_INCLUDE("snmp.h", "CFLAGS_SNMP", PHP_PHP_BUILD + "\\include\\ucd-snmp;" + PHP_PHP_BUILD + "\\include\\net-snmp;" + PHP_SNMP) &&
- CHECK_LIB("libsnmp.lib", "snmp", PHP_SNMP)) {
- EXTENSION('snmp', 'snmp.c');
-
- AC_DEFINE('HAVE_SNMP', 1);
-
- } else {
- WARNING("snmp not enabled; libraries and headers not found");
- }
-}
-
diff --git a/ext/snmp/php_snmp.h b/ext/snmp/php_snmp.h
deleted file mode 100644
index e923ca11a3..0000000000
--- a/ext/snmp/php_snmp.h
+++ /dev/null
@@ -1,84 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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. |
- +----------------------------------------------------------------------+
- | Authors: Rasmus Lerdorf <rasmus@php.net> |
- | Mike Jackson <mhjack@tscnet.com> |
- | Steven Lawrance <slawrance@technologist.com> |
- | Harrie Hazewinkel <harrie@lisanza.net> |
- | Johann Hanne <jonny@nurfuerspam.de> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifndef PHP_SNMP_H
-#define PHP_SNMP_H
-
-#if HAVE_SNMP
-
-#ifndef DLEXPORT
-#define DLEXPORT
-#endif
-
-extern zend_module_entry snmp_module_entry;
-#define snmp_module_ptr &snmp_module_entry
-
-#ifdef ZTS
-#include "TSRM.h"
-#endif
-
-PHP_MINIT_FUNCTION(snmp);
-PHP_MINFO_FUNCTION(snmp);
-
-PHP_FUNCTION(snmpget);
-PHP_FUNCTION(snmpgetnext);
-PHP_FUNCTION(snmpwalk);
-PHP_FUNCTION(snmprealwalk);
-PHP_FUNCTION(snmp_get_quick_print);
-PHP_FUNCTION(snmp_set_quick_print);
-PHP_FUNCTION(snmp_set_enum_print);
-PHP_FUNCTION(snmp_set_oid_numeric_print);
-PHP_FUNCTION(snmpset);
-
-PHP_FUNCTION(snmp3_get);
-PHP_FUNCTION(snmp3_getnext);
-PHP_FUNCTION(snmp3_walk);
-PHP_FUNCTION(snmp3_real_walk);
-PHP_FUNCTION(snmp3_set);
-
-PHP_FUNCTION(snmp_set_valueretrieval);
-PHP_FUNCTION(snmp_get_valueretrieval);
-
-PHP_FUNCTION(snmp_read_mib);
-
-
-ZEND_BEGIN_MODULE_GLOBALS(snmp)
- int valueretrieval;
-ZEND_END_MODULE_GLOBALS(snmp)
-
-#ifdef ZTS
-#define SNMP_G(v) TSRMG(snmp_globals_id, zend_snmp_globals *, v)
-#else
-#define SNMP_G(v) (snmp_globals.v)
-#endif
-
-#else
-
-#define snmp_module_ptr NULL
-
-#endif /* HAVE_SNMP */
-
-#define phpext_snmp_ptr snmp_module_ptr
-
-#endif /* PHP_SNMP_H */
diff --git a/ext/snmp/snmp.c b/ext/snmp/snmp.c
deleted file mode 100644
index 2100008a2e..0000000000
--- a/ext/snmp/snmp.c
+++ /dev/null
@@ -1,1099 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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. |
- +----------------------------------------------------------------------+
- | Authors: Rasmus Lerdorf <rasmus@php.net> |
- | Mike Jackson <mhjack@tscnet.com> |
- | Steven Lawrance <slawrance@technologist.com> |
- | Harrie Hazewinkel <harrie@lisanza.net> |
- | Johann Hanne <jonny@nurfuerspam.de> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "php.h"
-#include "ext/standard/info.h"
-#include "php_snmp.h"
-
-#if HAVE_SNMP
-
-#include <sys/types.h>
-#ifdef PHP_WIN32
-#include <winsock2.h>
-#include <errno.h>
-#include <process.h>
-#include "win32/time.h"
-#elif defined(NETWARE)
-#ifdef USE_WINSOCK
-/*#include <ws2nlm.h>*/
-#include <novsock2.h>
-#else
-#include <sys/socket.h>
-#endif
-#include <errno.h>
-/*#include <process.h>*/
-#ifdef NEW_LIBC
-#include <sys/timeval.h>
-#else
-#include "netware/time_nw.h"
-#endif
-#else
-#include <sys/socket.h>
-#include <netinet/in.h>
-#include <arpa/inet.h>
-#ifndef _OSD_POSIX
-#include <sys/errno.h>
-#else
-#include <errno.h> /* BS2000/OSD uses <errno.h>, not <sys/errno.h> */
-#endif
-#include <netdb.h>
-#endif
-#ifdef HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-
-#ifndef __P
-#ifdef __GNUC__
-#define __P(args) args
-#else
-#define __P(args) ()
-#endif
-#endif
-
-#ifdef HAVE_NET_SNMP
-#include <net-snmp/net-snmp-config.h>
-#include <net-snmp/net-snmp-includes.h>
-#else
-#ifdef HAVE_DEFAULT_STORE_H
-#include "default_store.h"
-#endif
-#include "asn1.h"
-#include "snmp_api.h"
-#include "snmp_client.h"
-#include "snmp_impl.h"
-#include "snmp.h"
-#include "snmpv3.h"
-#include "keytools.h"
-#include "parse.h"
-#include "mib.h"
-#ifndef PHP_WIN32
-/* this doesn't appear to be needed under win32 (perhaps at all)
- * and the header file is not present in my UCD-SNMP headers */
-# include "version.h"
-#endif
-#include "transform_oids.h"
-#endif
-/* Ugly macro, since the length of OIDs in UCD-SNMP and NET-SNMP
- * is different and this way the code is not full of 'ifdef's.
- */
-#define OIDSIZE(p) (sizeof(p)/sizeof(oid))
-
-/* For really old ucd-snmp versions.. */
-#ifndef HAVE_SNMP_PARSE_OID
-#define snmp_parse_oid read_objid
-#endif
-
-#define SNMP_VALUE_LIBRARY 0
-#define SNMP_VALUE_PLAIN 1
-#define SNMP_VALUE_OBJECT 2
-
-ZEND_DECLARE_MODULE_GLOBALS(snmp)
-
-/* constant - can be shared among threads */
-static oid objid_mib[] = {1, 3, 6, 1, 2, 1};
-
-/* {{{ snmp_functions[]
- */
-function_entry snmp_functions[] = {
- PHP_FE(snmpget, NULL)
- PHP_FE(snmpgetnext, NULL)
- PHP_FE(snmpwalk, NULL)
- PHP_FE(snmprealwalk, NULL)
- PHP_FALIAS(snmpwalkoid, snmprealwalk, NULL)
- PHP_FE(snmp_get_quick_print, NULL)
- PHP_FE(snmp_set_quick_print, NULL)
-#ifdef HAVE_NET_SNMP
- PHP_FE(snmp_set_enum_print, NULL)
- PHP_FE(snmp_set_oid_numeric_print, NULL)
-#endif
- PHP_FE(snmpset, NULL)
-
- PHP_FE(snmp3_get, NULL)
- PHP_FE(snmp3_getnext, NULL)
- PHP_FE(snmp3_walk, NULL)
- PHP_FE(snmp3_real_walk, NULL)
- PHP_FE(snmp3_set, NULL)
- PHP_FE(snmp_set_valueretrieval, NULL)
- PHP_FE(snmp_get_valueretrieval, NULL)
-
- PHP_FE(snmp_read_mib, NULL)
- {NULL,NULL,NULL}
-};
-/* }}} */
-
-/* {{{ snmp_module_entry
- */
-zend_module_entry snmp_module_entry = {
- STANDARD_MODULE_HEADER,
- "snmp",
- snmp_functions,
- PHP_MINIT(snmp),
- NULL,
- NULL,
- NULL,
- PHP_MINFO(snmp),
- NO_VERSION_YET,
- STANDARD_MODULE_PROPERTIES
-};
-/* }}} */
-
-#ifdef COMPILE_DL_SNMP
-ZEND_GET_MODULE(snmp)
-#endif
-
-/* THREAD_LS snmp_module php_snmp_module; - may need one of these at some point */
-
-/* {{{ php_snmp_init_globals
- */
-static void php_snmp_init_globals(zend_snmp_globals *snmp_globals)
-{
- snmp_globals->valueretrieval = 0;
-}
-/* }}} */
-
-/* {{{ PHP_MINIT_FUNCTION
- */
-PHP_MINIT_FUNCTION(snmp)
-{
- init_snmp("snmpapp");
-
- ZEND_INIT_MODULE_GLOBALS(snmp, php_snmp_init_globals, NULL);
-
- REGISTER_LONG_CONSTANT("SNMP_VALUE_LIBRARY", SNMP_VALUE_LIBRARY, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("SNMP_VALUE_PLAIN", SNMP_VALUE_PLAIN, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("SNMP_VALUE_OBJECT", SNMP_VALUE_OBJECT, CONST_CS | CONST_PERSISTENT);
-
- REGISTER_LONG_CONSTANT("SNMP_BIT_STR", ASN_BIT_STR, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("SNMP_OCTET_STR", ASN_OCTET_STR, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("SNMP_OPAQUE", ASN_OPAQUE, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("SNMP_NULL", ASN_NULL, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("SNMP_OBJECT_ID", ASN_OBJECT_ID, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("SNMP_IPADDRESS", ASN_IPADDRESS, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("SNMP_COUNTER", ASN_GAUGE, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("SNMP_UNSIGNED", ASN_UNSIGNED, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("SNMP_TIMETICKS", ASN_TIMETICKS, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("SNMP_UINTEGER", ASN_UINTEGER, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("SNMP_INTEGER", ASN_INTEGER, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("SNMP_COUNTER64", ASN_COUNTER64, CONST_CS | CONST_PERSISTENT);
-
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ PHP_MINFO_FUNCTION
- */
-PHP_MINFO_FUNCTION(snmp)
-{
- php_info_print_table_start();
-#ifdef HAVE_NET_SNMP
- php_info_print_table_row(2, "NET-SNMP Support", "enabled");
- php_info_print_table_row(2, "NET-SNMP Version", netsnmp_get_version());
-#else
- php_info_print_table_row(2, "UCD-SNMP Support", "enabled");
- php_info_print_table_row(2, "UCD-SNMP Version", VersionInfo);
-#endif
- php_info_print_table_end();
-}
-/* }}} */
-
-static void php_snmp_getvalue(struct variable_list *vars, zval *snmpval TSRMLS_DC)
-{
- zval *val;
-#if I64CHARSZ > 2047
- char buf[I64CHARSZ + 1];
-#else
- char buf[2048];
-#endif
-
- buf[0] = 0;
-
- if (SNMP_G(valueretrieval) == 0) {
-#ifdef HAVE_NET_SNMP
- snprint_value(buf, sizeof(buf), vars->name, vars->name_length, vars);
-#else
- sprint_value(buf,vars->name, vars->name_length, vars);
-#endif
- ZVAL_STRING(snmpval, buf, 1);
- return;
- }
-
- MAKE_STD_ZVAL(val);
-
- switch (vars->type) {
- case ASN_BIT_STR: /* 0x03, asn1.h */
- ZVAL_STRINGL(val, vars->val.bitstring, vars->val_len, 1);
- break;
-
- case ASN_OCTET_STR: /* 0x04, asn1.h */
- case ASN_OPAQUE: /* 0x44, snmp_impl.h */
- ZVAL_STRINGL(val, vars->val.string, vars->val_len, 1);
- break;
-
- case ASN_NULL: /* 0x05, asn1.h */
- ZVAL_NULL(val);
- break;
-
- case ASN_OBJECT_ID: /* 0x06, asn1.h */
-#ifdef HAVE_NET_SNMP
- snprint_objid(buf, sizeof(buf), vars->val.objid, vars->val_len / sizeof(oid));
-#else
- sprint_objid(buf, vars->val.objid, vars->val_len / sizeof(oid));
-#endif
-
- ZVAL_STRING(val, buf, 1);
- break;
-
- case ASN_IPADDRESS: /* 0x40, snmp_impl.h */
- snprintf(buf, sizeof(buf)-1, "%d.%d.%d.%d",
- (vars->val.string)[0], (vars->val.string)[1],
- (vars->val.string)[2], (vars->val.string)[3]);
- buf[sizeof(buf)-1]=0;
- ZVAL_STRING(val, buf, 1);
- break;
-
- case ASN_COUNTER: /* 0x41, snmp_impl.h */
- case ASN_GAUGE: /* 0x42, snmp_impl.h */
- /* ASN_UNSIGNED is the same as ASN_GAUGE */
- case ASN_TIMETICKS: /* 0x43, snmp_impl.h */
- case ASN_UINTEGER: /* 0x47, snmp_impl.h */
- snprintf(buf, sizeof(buf)-1, "%lu", *vars->val.integer);
- buf[sizeof(buf)-1]=0;
- ZVAL_STRING(val, buf, 1);
- break;
-
- case ASN_INTEGER: /* 0x02, asn1.h */
- snprintf(buf, sizeof(buf)-1, "%ld", *vars->val.integer);
- buf[sizeof(buf)-1]=0;
- ZVAL_STRING(val, buf, 1);
- break;
-
- case ASN_COUNTER64: /* 0x46, snmp_impl.h */
- printU64(buf, vars->val.counter64);
- ZVAL_STRING(val, buf, 1);
- break;
-
- default:
- ZVAL_STRING(val, "Unknown value type", 1);
- break;
- }
-
- if (SNMP_G(valueretrieval) == 1) {
- *snmpval = *val;
- zval_copy_ctor(snmpval);
- } else {
- object_init(snmpval);
- add_property_long(snmpval, "type", vars->type);
- add_property_zval(snmpval, "value", val);
- }
-}
-
-/* {{{ php_snmp_internal
-*
-* Generic SNMP object fetcher (for both v3 and v1)
-*
-* st=1 snmpget() - query an agent and return a single value.
-* st=2 snmpget() - query an agent and return the next single value.
-* st=3 snmpwalk() - walk the mib and return a single dimensional array
-* containing the values.
-* st=4 snmprealwalk() and snmpwalkoid() - walk the mib and return an
-* array of oid,value pairs.
-* st=5-8 ** Reserved **
-* st=11 snmpset() - query an agent and set a single value
-*
-*/
-static void php_snmp_internal(INTERNAL_FUNCTION_PARAMETERS, int st,
- struct snmp_session *session,
- char *objid,
- char type,
- char* value)
-{
- struct snmp_session *ss;
- struct snmp_pdu *pdu=NULL, *response;
- struct variable_list *vars;
- oid name[MAX_NAME_LEN];
- int name_length;
- oid root[MAX_NAME_LEN];
- int rootlen = 0;
- int gotroot = 0;
- int status, count;
- char buf[2048];
- char buf2[2048];
- int keepwalking=1;
- char *err;
- zval *snmpval = NULL;
-
- if (st >= 3) { /* walk */
- rootlen = MAX_NAME_LEN;
- if (strlen(objid)) { /* on a walk, an empty string means top of tree - no error */
- if (snmp_parse_oid(objid, root, &rootlen)) {
- gotroot = 1;
- } else {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid object identifier: %s", objid);
- }
- }
-
- if (!gotroot) {
- memmove((char *) root, (char *) objid_mib, sizeof(objid_mib));
- rootlen = sizeof(objid_mib) / sizeof(oid);
- gotroot = 1;
- }
- }
-
- if ((ss = snmp_open(session)) == NULL) {
- snmp_error(session, NULL, NULL, &err);
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Could not open snmp connection: %s", err);
- free(err);
- RETURN_FALSE;
- }
-
- if (st >= 3) {
- memmove((char *)name, (char *)root, rootlen * sizeof(oid));
- name_length = rootlen;
- switch(st) {
- case 3:
- case 4:
- array_init(return_value);
- break;
- default:
- RETVAL_TRUE;
- break;
- }
- }
-
- while (keepwalking) {
- keepwalking = 0;
- if ((st == 1) || (st == 2)) {
- pdu = snmp_pdu_create((st == 1) ? 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;
- }
- snmp_add_null_var(pdu, name, name_length);
- } else if (st == 11) {
- pdu = snmp_pdu_create(SNMP_MSG_SET);
- if (snmp_add_var(pdu, name, name_length, type, value)) {
-#ifdef HAVE_NET_SNMP
- snprint_objid(buf, sizeof(buf), name, name_length);
-#else
- 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_close(ss);
- RETURN_FALSE;
- }
- } else if (st >= 3) {
- pdu = snmp_pdu_create(SNMP_MSG_GETNEXT);
- snmp_add_null_var(pdu, name, name_length);
- }
-
-retry:
- status = snmp_synch_response(ss, pdu, &response);
- if (status == STAT_SUCCESS) {
- if (response->errstat == SNMP_ERR_NOERROR) {
- for (vars = response->variables; vars; vars = vars->next_variable) {
- if (st >= 3 && st != 11 &&
- (vars->name_length < rootlen || memcmp(root, vars->name, rootlen * sizeof(oid)))) {
- continue; /* not part of this subtree */
- }
-
- if (st != 11) {
- MAKE_STD_ZVAL(snmpval);
- php_snmp_getvalue(vars, snmpval TSRMLS_CC);
- }
-
- if (st == 1) {
- *return_value = *snmpval;
- zval_copy_ctor(return_value);
- snmp_close(ss);
- return;
- } else if (st == 2) {
- *return_value = *snmpval;
- zval_copy_ctor(return_value);
- snmp_close(ss);
- return;
- } else if (st == 3) {
- add_next_index_zval(return_value,snmpval); /* Add to returned array */
- } else if (st == 4) {
-#ifdef HAVE_NET_SNMP
- snprint_objid(buf2, sizeof(buf2), vars->name, vars->name_length);
-#else
- sprint_objid(buf2, vars->name, vars->name_length);
-#endif
- add_assoc_zval(return_value,buf2,snmpval);
- }
- if (st >= 3 && st != 11) {
- if (vars->type != SNMP_ENDOFMIBVIEW &&
- vars->type != SNMP_NOSUCHOBJECT && vars->type != SNMP_NOSUCHINSTANCE) {
- memmove((char *)name, (char *)vars->name,vars->name_length * sizeof(oid));
- name_length = vars->name_length;
- keepwalking = 1;
- }
- }
- }
- } else {
- if (st != 3 || response->errstat != SNMP_ERR_NOSUCHNAME) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Error in packet: %s", snmp_errstring(response->errstat));
- if (response->errstat == SNMP_ERR_NOSUCHNAME) {
- for (count=1, vars = response->variables; vars && count != response->errindex;
- vars = vars->next_variable, count++);
- if (vars) {
-#ifdef HAVE_NET_SNMP
- snprint_objid(buf, sizeof(buf), vars->name, vars->name_length);
-#else
- sprint_objid(buf,vars->name, vars->name_length);
-#endif
- }
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "This name does not exist: %s",buf);
- }
- if (st == 1) {
- if ((pdu = snmp_fix_pdu(response, SNMP_MSG_GET)) != NULL) {
- goto retry;
- }
- } else if (st == 11) {
- if ((pdu = snmp_fix_pdu(response, SNMP_MSG_SET)) != NULL) {
- goto retry;
- }
- } else if (st >= 2) { /* Here we do both getnext and walks. */
- if ((pdu = snmp_fix_pdu(response, SNMP_MSG_GETNEXT)) != NULL) {
- goto retry;
- }
- }
- snmp_close(ss);
- RETURN_FALSE;
- }
- }
- } else if (status == STAT_TIMEOUT) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "No response from %s", session->peername);
- if (st == 3 || st == 4) {
- zval_dtor(return_value);
- }
- snmp_close(ss);
- RETURN_FALSE;
- } else { /* status == STAT_ERROR */
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "An error occurred, quitting");
- if (st == 3 || st == 4) {
- zval_dtor(return_value);
- }
- snmp_close(ss);
- RETURN_FALSE;
- }
- if (response) {
- snmp_free_pdu(response);
- }
- } /* keepwalking */
- snmp_close(ss);
-}
-/* }}} */
-
-/* {{{ php_snmp
-*
-* Generic SNMPv1 handler
-* This function makes use of the internal SNMP object fetcher.
-* The object fetcher is shared with SNMPv3.
-*
-* st=1 snmpget() - query an agent and return a single value.
-* st=2 snmpgetnext() - query an agent and return the next single value.
-* st=3 snmpwalk() - walk the mib and return a single dimensional array
-* containing the values.
-* st=4 snmprealwalk() and snmpwalkoid() - walk the mib and return an
-* array of oid,value pairs.
-* st=5-8 ** Reserved **
-* st=11 snmpset() - query an agent and set a single value
-*
-*/
-static void php_snmp(INTERNAL_FUNCTION_PARAMETERS, int st)
-{
- zval **a1, **a2, **a3, **a4, **a5, **a6, **a7;
- struct snmp_session session;
- long timeout=SNMP_DEFAULT_TIMEOUT;
- long retries=SNMP_DEFAULT_RETRIES;
- int myargc = ZEND_NUM_ARGS();
- char type = (char) 0;
- char *value = (char *) 0;
- char hostname[MAX_NAME_LEN];
- int remote_port = 161;
- char *pptr;
-
- if (myargc < 3 || myargc > 7 ||
- zend_get_parameters_ex(myargc, &a1, &a2, &a3, &a4, &a5, &a6, &a7) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_string_ex(a1);
- convert_to_string_ex(a2);
- convert_to_string_ex(a3);
-
- if (st == 11) {
- if (myargc < 5) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_string_ex(a4);
- convert_to_string_ex(a5);
-
- if(myargc > 5) {
- convert_to_long_ex(a6);
- timeout = Z_LVAL_PP(a6);
- }
-
- if(myargc > 6) {
- convert_to_long_ex(a7);
- retries = Z_LVAL_PP(a7);
- }
-
- type = Z_STRVAL_PP(a4)[0];
- value = Z_STRVAL_PP(a5);
- } else {
- if(myargc > 3) {
- convert_to_long_ex(a4);
- timeout = Z_LVAL_PP(a4);
- }
-
- if(myargc > 4) {
- convert_to_long_ex(a5);
- retries = Z_LVAL_PP(a5);
- }
- }
-
- snmp_sess_init(&session);
- strlcpy(hostname, Z_STRVAL_PP(a1), sizeof(hostname));
- if ((pptr = strchr (hostname, ':'))) {
- remote_port = strtol (pptr + 1, NULL, 0);
- }
-
- session.peername = hostname;
- session.remote_port = remote_port;
- session.version = SNMP_VERSION_1;
- /*
- * FIXME: potential memory leak
- * This is a workaround for an "artifact" (Mike Slifcak)
- * in (at least) ucd-snmp 3.6.1 which frees
- * memory it did not allocate
- */
-#ifdef UCD_SNMP_HACK
- session.community = (u_char *)strdup(Z_STRVAL_PP(a2)); /* memory freed by SNMP library, strdup NOT estrdup */
-#else
- session.community = (u_char *)Z_STRVAL_PP(a2);
-#endif
- session.community_len = Z_STRLEN_PP(a2);
- session.retries = retries;
- session.timeout = timeout;
-
- session.authenticator = NULL;
-
- php_snmp_internal(INTERNAL_FUNCTION_PARAM_PASSTHRU, st, &session, Z_STRVAL_PP(a3), type, value);
-}
-/* }}} */
-
-/* {{{ proto string snmpget(string host, string community, string object_id [, int timeout [, int retries]])
- Fetch a SNMP object */
-PHP_FUNCTION(snmpget)
-{
- php_snmp(INTERNAL_FUNCTION_PARAM_PASSTHRU,1);
-}
-/* }}} */
-
-/* {{{ proto string snmpgetnext(string host, string community, string object_id [, int timeout [, int retries]])
- Fetch a SNMP object */
-PHP_FUNCTION(snmpgetnext)
-{
- php_snmp(INTERNAL_FUNCTION_PARAM_PASSTHRU,2);
-}
-/* }}} */
-
-/* {{{ proto array snmpwalk(string host, string community, string object_id [, int timeout [, int retries]])
- Return all objects under the specified object id */
-PHP_FUNCTION(snmpwalk)
-{
- php_snmp(INTERNAL_FUNCTION_PARAM_PASSTHRU,3);
-}
-/* }}} */
-
-/* {{{ proto array snmprealwalk(string host, string community, string object_id [, int timeout [, int retries]])
- Return all objects including their respective object id withing the specified one */
-PHP_FUNCTION(snmprealwalk)
-{
- php_snmp(INTERNAL_FUNCTION_PARAM_PASSTHRU,4);
-}
-/* }}} */
-
-/* {{{ proto bool snmp_get_quick_print(void)
- Return the current status of quick_print */
-PHP_FUNCTION(snmp_get_quick_print)
-{
- if (ZEND_NUM_ARGS() != 0) {
- WRONG_PARAM_COUNT;
- }
-
-#ifdef HAVE_NET_SNMP
- RETURN_BOOL(netsnmp_ds_get_boolean(NETSNMP_DS_LIBRARY_ID, NETSNMP_DS_LIB_QUICK_PRINT));
-#else
- RETURN_BOOL(snmp_get_quick_print());
-#endif
-}
-/* }}} */
-
-/* {{{ proto void snmp_set_quick_print(int quick_print)
- Return all objects including their respective object id withing the specified one */
-PHP_FUNCTION(snmp_set_quick_print)
-{
- int argc = ZEND_NUM_ARGS();
- long a1;
-
- if (zend_parse_parameters(argc TSRMLS_CC, "l", &a1) == FAILURE) {
- return;
- }
-
-#ifdef HAVE_NET_SNMP
- netsnmp_ds_set_boolean(NETSNMP_DS_LIBRARY_ID, NETSNMP_DS_LIB_QUICK_PRINT, (int) a1);
-#else
- snmp_set_quick_print((int)a1);
-#endif
-}
-/* }}} */
-
-#ifdef HAVE_NET_SNMP
-/* {{{ proto void snmp_set_enum_print(int enum_print)
- Return all values that are enums with their enum value instead of the raw integer */
-PHP_FUNCTION(snmp_set_enum_print)
-{
- int argc = ZEND_NUM_ARGS();
- long a1;
-
- if (zend_parse_parameters(argc TSRMLS_CC, "l", &a1) == FAILURE) {
- return;
- }
-
- netsnmp_ds_set_boolean(NETSNMP_DS_LIBRARY_ID, NETSNMP_DS_LIB_PRINT_NUMERIC_ENUM, (int) a1);
-}
-/* }}} */
-
-/* {{{ proto void snmp_set_oid_numeric_print(int oid_numeric_print)
- Return all objects including their respective object id withing the specified one */
-PHP_FUNCTION(snmp_set_oid_numeric_print)
-{
- int argc = ZEND_NUM_ARGS();
- long a1;
-
- if (zend_parse_parameters(argc TSRMLS_CC, "l", &a1) == FAILURE) {
- return;
- }
- if ((int) a1 != 0) {
- netsnmp_ds_set_int(NETSNMP_DS_LIBRARY_ID,
- NETSNMP_DS_LIB_OID_OUTPUT_FORMAT,
- NETSNMP_OID_OUTPUT_NUMERIC);
- }
-}
-/* }}} */
-#endif
-
-/* {{{ proto int snmpset(string host, string community, string object_id, string type, mixed value [, int timeout [, int retries]])
- Set the value of a SNMP object */
-PHP_FUNCTION(snmpset)
-{
- php_snmp(INTERNAL_FUNCTION_PARAM_PASSTHRU,11);
-}
-/* }}} */
-
-/* {{{ int netsnmp_session_set_sec_name(struct snmp_session *s, char *name)
- Set the security name in the snmpv3 session */
-static int netsnmp_session_set_sec_name(struct snmp_session *s, char *name)
-{
- if ((s) && (name)) {
- s->securityName = strdup(name);
- s->securityNameLen = strlen(s->securityName);
- return (0);
- }
- return (-1);
-}
-/* }}} */
-
-/* {{{ int netsnmp_session_set_sec_level(struct snmp_session *s, char *level)
- Set the security level in the snmpv3 session */
-static int netsnmp_session_set_sec_level(struct snmp_session *s, char *level TSRMLS_DC)
-{
- if ((s) && (level)) {
- if (!strcasecmp(level, "noAuthNoPriv") || !strcasecmp(level, "nanp")) {
- s->securityLevel = SNMP_SEC_LEVEL_NOAUTH;
- return (0);
- } else if (!strcasecmp(level, "authNoPriv") || !strcasecmp(level, "anp")) {
- s->securityLevel = SNMP_SEC_LEVEL_AUTHNOPRIV;
- return (0);
- } else if (!strcasecmp(level, "authPriv") || !strcasecmp(level, "ap")) {
- s->securityLevel = SNMP_SEC_LEVEL_AUTHPRIV;
- return (0);
- }
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid security level: %s", level);
- }
- return (-1);
-}
-/* }}} */
-
-/* {{{ int netsnmp_session_set_auth_protocol(struct snmp_session *s, char *prot)
- Set the authentication protocol in the snmpv3 session */
-static int netsnmp_session_set_auth_protocol(struct snmp_session *s, char *prot TSRMLS_DC)
-{
- if ((s) && (prot)) {
- if (!strcasecmp(prot, "MD5")) {
- s->securityAuthProto = usmHMACMD5AuthProtocol;
- s->securityAuthProtoLen = OIDSIZE(usmHMACMD5AuthProtocol);
- return (0);
- } else if (!strcasecmp(prot, "SHA")) {
- s->securityAuthProto = usmHMACSHA1AuthProtocol;
- s->securityAuthProtoLen = OIDSIZE(usmHMACSHA1AuthProtocol);
- return (0);
- } else if (strlen(prot)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid authentication protocol: %s", prot);
- }
- }
- return (-1);
-}
-/* }}} */
-
-/* {{{ int netsnmp_session_set_sec_protocol(struct snmp_session *s, char *prot)
- Set the security protocol in the snmpv3 session */
-static int netsnmp_session_set_sec_protocol(struct snmp_session *s, char *prot TSRMLS_DC)
-{
- if ((s) && (prot)) {
- if (!strcasecmp(prot, "DES")) {
- s->securityPrivProto = usmDESPrivProtocol;
- s->securityPrivProtoLen = OIDSIZE(usmDESPrivProtocol);
- return (0);
-#ifdef HAVE_AES
- } else if (!strcasecmp(prot, "AES128")) {
- s->securityPrivProto = usmAES128PrivProtocol;
- s->securityPrivProtoLen = OIDSIZE(usmAES128PrivProtocol);
- return (0);
- } else if (!strcasecmp(prot, "AES192")) {
- s->securityPrivProto = usmAES192PrivProtocol;
- s->securityPrivProtoLen = OIDSIZE(usmAES192PrivProtocol);
- return (0);
- } else if (!strcasecmp(prot, "AES256")) {
- s->securityPrivProto = usmAES256PrivProtocol;
- s->securityPrivProtoLen = OIDSIZE(usmAES256PrivProtocol);
- return (0);
-#endif
- } else if (strlen(prot)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid privacy protocol: %s", prot);
- }
- }
- return (-1);
-}
-/* }}} */
-
-/* {{{ int netsnmp_session_gen_auth_key(struct snmp_session *s, char *pass)
- Make key from pass phrase in the snmpv3 session */
-static int netsnmp_session_gen_auth_key(struct snmp_session *s, char *pass TSRMLS_DC)
-{
- /*
- * make master key from pass phrases
- */
- if ((s) && (pass) && strlen(pass)) {
- s->securityAuthKeyLen = USM_AUTH_KU_LEN;
- if (s->securityAuthProto == NULL) {
- /* get .conf set default */
- oid *def = get_default_authtype(&(s->securityAuthProtoLen));
- s->securityAuthProto = snmp_duplicate_objid(def, s->securityAuthProtoLen);
- }
- if (s->securityAuthProto == NULL) {
- /* assume MD5 */
- s->securityAuthProto =
- snmp_duplicate_objid(usmHMACMD5AuthProtocol, OIDSIZE(usmHMACMD5AuthProtocol));
- s->securityAuthProtoLen = OIDSIZE(usmHMACMD5AuthProtocol);
- }
- if (generate_Ku(s->securityAuthProto, s->securityAuthProtoLen,
- (u_char *) pass, strlen(pass),
- s->securityAuthKey, &(s->securityAuthKeyLen)) != SNMPERR_SUCCESS) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Error generating a key for authentication pass phrase");
- return (-2);
- }
- return (0);
- }
- return (-1);
-}
-/* }}} */
-
-/* {{{ int netsnmp_session_gen_sec_key(struct snmp_session *s, u_char *pass)
- Make key from pass phrase in the snmpv3 session */
-static int netsnmp_session_gen_sec_key(struct snmp_session *s, u_char *pass TSRMLS_DC)
-{
- if ((s) && (pass) && strlen(pass)) {
- s->securityPrivKeyLen = USM_PRIV_KU_LEN;
- if (s->securityPrivProto == NULL) {
- /* get .conf set default */
- oid *def = get_default_privtype(&(s->securityPrivProtoLen));
- s->securityPrivProto = snmp_duplicate_objid(def, s->securityPrivProtoLen);
- }
- if (s->securityPrivProto == NULL) {
- /* assume DES */
- s->securityPrivProto = snmp_duplicate_objid(usmDESPrivProtocol,
- OIDSIZE(usmDESPrivProtocol));
- s->securityPrivProtoLen = OIDSIZE(usmDESPrivProtocol);
- }
- if (generate_Ku(s->securityAuthProto, s->securityAuthProtoLen,
- pass, strlen(pass),
- s->securityPrivKey, &(s->securityPrivKeyLen)) != SNMPERR_SUCCESS) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Error generating a key for privacy pass phrase");
- return (-2);
- }
- return (0);
- }
- return (-1);
-}
-/* }}} */
-
-
-/* {{{ proto void php_snmpv3(INTERNAL_FUNCTION_PARAMETERS, int st)
-*
-* Generic SNMPv3 object fetcher
-* From here is passed on the the common internal object fetcher.
-*
-* st=1 snmp3_get() - query an agent and return a single value.
-* st=2 snmp3_getnext() - query an agent and return the next single value.
-* st=3 snmp3_walk() - walk the mib and return a single dimensional array
-* containing the values.
-* st=4 snmp3_real_walk() - walk the mib and return an
-* array of oid,value pairs.
-* st=11 snmp3_set() - query an agent and set a single value
-*
-*/
-static void php_snmpv3(INTERNAL_FUNCTION_PARAMETERS, int st)
-{
- zval **a1, **a2, **a3, **a4, **a5, **a6, **a7, **a8, **a9, **a10, **a11, **a12;
- struct snmp_session session;
- long timeout=SNMP_DEFAULT_TIMEOUT;
- long retries=SNMP_DEFAULT_RETRIES;
- int myargc = ZEND_NUM_ARGS();
- char type = (char) 0;
- char *value = (char *) 0;
- char hostname[MAX_NAME_LEN];
- int remote_port = 161;
- char *pptr;
-
- if (myargc < 8 || myargc > 12 ||
- zend_get_parameters_ex(myargc, &a1, &a2, &a3, &a4, &a5, &a6, &a7, &a8, &a9, &a10, &a11, &a12) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- snmp_sess_init(&session);
- /* This is all SNMPv3 */
- session.version = SNMP_VERSION_3;
-
- /* Reading the hostname and its optional non-default port number */
- convert_to_string_ex(a1);
- strlcpy(hostname, Z_STRVAL_PP(a1), sizeof(hostname));
- if ((pptr = strchr (hostname, ':'))) {
- remote_port = strtol (pptr + 1, NULL, 0);
- }
- session.peername = hostname;
- session.remote_port = remote_port;
-
- /* Setting the security name. */
- convert_to_string_ex(a2);
- if (netsnmp_session_set_sec_name(&session, Z_STRVAL_PP(a2))) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Could net set security name: %s", Z_STRVAL_PP(a2));
- RETURN_FALSE;
- }
-
- /* Setting the security level. */
- convert_to_string_ex(a3);
- if (netsnmp_session_set_sec_level(&session, Z_STRVAL_PP(a3) TSRMLS_CC)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid security level: %s", Z_STRVAL_PP(a3));
- RETURN_FALSE;
- }
-
- /* Setting the authentication protocol. */
- convert_to_string_ex(a4);
- if (netsnmp_session_set_auth_protocol(&session, Z_STRVAL_PP(a4) TSRMLS_CC)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid authentication protocol: %s", Z_STRVAL_PP(a4));
- RETURN_FALSE;
- }
-
- /* Setting the authentication passphrase. */
- convert_to_string_ex(a5);
- if (netsnmp_session_gen_auth_key(&session, Z_STRVAL_PP(a5) TSRMLS_CC)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Could not generate key for authentication pass phrase: %s", Z_STRVAL_PP(a4));
- RETURN_FALSE;
- }
-
- /* Setting the security protocol. */
- convert_to_string_ex(a6);
- if (netsnmp_session_set_sec_protocol(&session, Z_STRVAL_PP(a6) TSRMLS_CC) &&
- (0 != strlen(Z_STRVAL_PP(a6)))) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid security protocol: %s", Z_STRVAL_PP(a6));
- RETURN_FALSE;
- }
-
- /* Setting the security protocol passphrase. */
- convert_to_string_ex(a7);
- if (netsnmp_session_gen_sec_key(&session, Z_STRVAL_PP(a7) TSRMLS_CC) &&
- (0 != strlen(Z_STRVAL_PP(a7)))) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Could not generate key for security pass phrase: %s", Z_STRVAL_PP(a7));
- RETURN_FALSE;
- }
-
- if (st == 11) {
- if (myargc < 10) {
- WRONG_PARAM_COUNT;
- }
- if (myargc > 10) {
- convert_to_long_ex(a11);
- timeout = Z_LVAL_PP(a11);
- }
- if (myargc > 11) {
- convert_to_long_ex(a12);
- retries = Z_LVAL_PP(a12);
- }
- convert_to_string_ex(a9);
- convert_to_string_ex(a10);
- type = Z_STRVAL_PP(a9)[0];
- value = Z_STRVAL_PP(a10);
- } else {
- if (myargc > 8) {
- convert_to_long_ex(a9);
- timeout = Z_LVAL_PP(a9);
- }
- if (myargc > 9) {
- convert_to_long_ex(a10);
- retries = Z_LVAL_PP(a10);
- }
- }
-
- session.retries = retries;
- session.timeout = timeout;
-
- php_snmp_internal(INTERNAL_FUNCTION_PARAM_PASSTHRU, st, &session, Z_STRVAL_PP(a8), type, value);
-}
-/* }}} */
-
-/* {{{ proto int snmp3_get(string host, string sec_name, string sec_level, string auth_protocol, string auth_passphrase, string priv_protocol, string priv_passphrase, string object_id [, int timeout [, int retries]])
- Fetch the value of a SNMP object */
-PHP_FUNCTION(snmp3_get)
-{
- php_snmpv3(INTERNAL_FUNCTION_PARAM_PASSTHRU, 1);
-}
-/* }}} */
-
-/* {{{ proto int snmp3_getnext(string host, string sec_name, string sec_level, string auth_protocol, string auth_passphrase, string priv_protocol, string priv_passphrase, string object_id [, int timeout [, int retries]])
- Fetch the value of a SNMP object */
-PHP_FUNCTION(snmp3_getnext)
-{
- php_snmpv3(INTERNAL_FUNCTION_PARAM_PASSTHRU, 2);
-}
-/* }}} */
-
-/* {{{ proto int snmp3_walk(string host, string sec_name, string sec_level, string auth_protocol, string auth_passphrase, string priv_protocol, string priv_passphrase, string object_id [, int timeout [, int retries]])
- Fetch the value of a SNMP object */
-PHP_FUNCTION(snmp3_walk)
-{
- php_snmpv3(INTERNAL_FUNCTION_PARAM_PASSTHRU, 3);
-}
-/* }}} */
-
-/* {{{ proto int snmp3_real_walk(string host, string sec_name, string sec_level, string auth_protocol, string auth_passphrase, string priv_protocol, string priv_passphrase, string object_id [, int timeout [, int retries]])
- Fetch the value of a SNMP object */
-PHP_FUNCTION(snmp3_real_walk)
-{
- php_snmpv3(INTERNAL_FUNCTION_PARAM_PASSTHRU, 4);
-}
-/* }}} */
-
-/* {{{ proto int snmp3_set(string host, string sec_name, string sec_level, string auth_protocol, string auth_passphrase, string priv_protocol, string priv_passphrase, string object_id, string type, mixed value [, int timeout [, int retries]])
- Fetch the value of a SNMP object */
-PHP_FUNCTION(snmp3_set)
-{
- php_snmpv3(INTERNAL_FUNCTION_PARAM_PASSTHRU, 11);
-}
-/* }}} */
-
-/* {{{ proto int snmp_set_valueretrieval(int method)
- Specify the method how the SNMP values will be returned */
-PHP_FUNCTION(snmp_set_valueretrieval)
-{
- zval **method;
-
- if (ZEND_NUM_ARGS() != 1 ||
- zend_get_parameters_ex(ZEND_NUM_ARGS(), &method) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long_ex(method);
-
- if ((Z_LVAL_PP(method) == SNMP_VALUE_LIBRARY) ||
- (Z_LVAL_PP(method) == SNMP_VALUE_PLAIN) ||
- (Z_LVAL_PP(method) == SNMP_VALUE_OBJECT)) {
- SNMP_G(valueretrieval) = Z_LVAL_PP(method);
- }
-}
-/* }}} */
-
-/* {{{ proto int snmp_get_valueretrieval()
- Return the method how the SNMP values will be returned */
-PHP_FUNCTION(snmp_get_valueretrieval)
-{
- RETURN_LONG(SNMP_G(valueretrieval));
-}
-/* }}} */
-
-/* {{{ proto int snmp_read_mib(string filename)
- Reads and parses a MIB file into the active MIB tree. */
-PHP_FUNCTION(snmp_read_mib)
-{
- zval **filename;
-
- if (ZEND_NUM_ARGS() != 1 ||
- zend_get_parameters_ex(ZEND_NUM_ARGS(), &filename) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_string_ex(filename);
-
- /* Prevent read_mib() from printing any errors. */
- snmp_disable_stderrlog();
-
- if (!read_mib(Z_STRVAL_PP(filename))) {
- char *error = strerror(errno);
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Error while reading MIB file '%s': %s", Z_STRVAL_PP(filename), error);
- RETURN_FALSE;
- }
- RETURN_TRUE;
-}
-/* }}} */
-
-#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/snmp/snmp.dsp b/ext/snmp/snmp.dsp
deleted file mode 100644
index 3cc62338bd..0000000000
--- a/ext/snmp/snmp.dsp
+++ /dev/null
@@ -1,109 +0,0 @@
-# Microsoft Developer Studio Project File - Name="snmp" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=snmp - Win32 Release_TS
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "snmp.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "snmp.mak" CFG="snmp - Win32 Release_TS"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "snmp - Win32 Release_TS" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "snmp - Win32 Debug_TS" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "snmp - Win32 Release_TS"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release_TS"
-# PROP BASE Intermediate_Dir "Release_TS"
-# PROP BASE Ignore_Export_Lib 0
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release_TS"
-# PROP Intermediate_Dir "Release_TS"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MT /W3 /GX /O2 /I "..\.." /I "..\..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\..\TSRM" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "COMPILE_DL_SNMP" /D ZTS=1 /YX /FD /c
-# ADD CPP /nologo /MD /W3 /GX /O2 /I "..\.." /I "..\..\main" /I "..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\TSRM" /D ZEND_DEBUG=0 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "SNMP_EXPORTS" /D "COMPILE_DL_SNMP" /D ZTS=1 /D "ZEND_WIN32" /D "PHP_WIN32" /D HAVE_SNMP=1 /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x406 /d "NDEBUG"
-# ADD RSC /l 0x406 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib php5ts.lib /nologo /dll /machine:I386
-# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib php5ts.lib libsnmp.lib wsock32.lib /nologo /dll /machine:I386 /out:"..\..\Release_TS/php_snmp.dll" /libpath:"..\..\Release_TS" /libpath:"..\..\Release_TS_Inline"
-
-!ELSEIF "$(CFG)" == "snmp - Win32 Debug_TS"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Debug_TS"
-# PROP BASE Intermediate_Dir "Debug_TS"
-# PROP BASE Ignore_Export_Lib 0
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Debug_TS"
-# PROP Intermediate_Dir "Debug_TS"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MT /W3 /GX /O2 /I "..\.." /I "..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\TSRM" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "COMPILE_DL_SNMP" /D ZTS=1 /YX /FD /c
-# ADD CPP /nologo /MDd /W3 /GX /O2 /I "..\.." /I "..\..\main" /I "..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\TSRM" /D ZEND_DEBUG=1 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "SNMP_EXPORTS" /D "COMPILE_DL_SNMP" /D ZTS=1 /D "ZEND_WIN32" /D "PHP_WIN32" /D HAVE_SNMP=1 /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x406 /d "NDEBUG"
-# ADD RSC /l 0x406 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib php5ts.lib /nologo /dll /machine:I386
-# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib php5ts_debug.lib libsnmp.lib wsock32.lib /nologo /dll /machine:I386 /out:"..\..\Debug_TS/php_snmp.dll" /libpath:"..\..\Debug_TS"
-
-!ENDIF
-
-# Begin Target
-
-# Name "snmp - Win32 Release_TS"
-# Name "snmp - Win32 Debug_TS"
-# Begin Group "Source Files"
-
-# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
-# Begin Source File
-
-SOURCE=.\snmp.c
-# End Source File
-# End Group
-# Begin Group "Header Files"
-
-# PROP Default_Filter "h;hpp;hxx;hm;inl"
-# Begin Source File
-
-SOURCE=.\php_snmp.h
-# End Source File
-# End Group
-# End Target
-# End Project
diff --git a/ext/snmp/winsnmp.c b/ext/snmp/winsnmp.c
deleted file mode 100644
index 188d526ff5..0000000000
--- a/ext/snmp/winsnmp.c
+++ /dev/null
@@ -1,249 +0,0 @@
-/*
-Created from the snmputil sample in the Microsoft SDK for NT
-*/
-
-#include "php.h"
-#if COMPILE_DL
-#include "../phpdl.h"
-#include "functions/dl.h"
-#endif
-#include "php_snmp.h"
-#include <sys/types.h>
-
-#include <stdio.h>
-#include <string.h>
-#include <malloc.h>
-
-#if HAVE_SNMP
-
-#include <snmp.h>
-#include <mgmtapi.h>
-
-/* {{{ snmp_functions[]
- */
-function_entry snmp_functions[] = {
- {"snmpget", php3_snmpget, NULL},
- {"snmpwalk", php3_snmpwalk, NULL},
- {NULL,NULL,NULL}
-};
-/* }}} */
-
-/* {{{ snmp_module_entry
- */
-zend_module_entry snmp_module_entry = {
- STANDARD_MODULE_HEADER,
- "SNMP",
- snmp_functions,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NO_VERSION_YET,
- STANDARD_MODULE_PROPERTIES
-};
-/* }}} */
-
-#if COMPILE_DL
-DLEXPORT zend_module_entry *get_module() { return &snmp_module_entry; }
-#endif
-
-#define GET 1
-#define WALK 2
-#define GETNEXT 3
-
-#define TIMEOUT 6000 /* milliseconds */
-#define RETRIES 3
-
-/* {{{ _php_snmp
- */
-void _php_snmp(INTERNAL_FUNCTION_PARAMETERS, int st) {
- pval *a1, *a2, *a3;
- INT operation;
- LPSTR agent;
- LPSTR community;
- RFC1157VarBindList variableBindings;
- LPSNMP_MGR_SESSION session;
-
- INT timeout = TIMEOUT;
- INT retries = RETRIES;
-
- BYTE requestType;
- AsnInteger errorStatus;
- AsnInteger errorIndex;
- AsnObjectIdentifier oid;
- char *chkPtr = NULL;
-
- if (zend_get_parameters_ex(3, &a1, &a2, &a3) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex(a1);
- convert_to_string_ex(a2);
- convert_to_string_ex(a3);
-
- agent=Z_STRVAL_PP(a1);
- community=Z_STRVAL_PP(a2);
- operation=st;
- SnmpMgrStrToOid(Z_STRVAL_PP(a3), &oid);
-
-/*
- I've limited this to only one oid, but we can create a
- list of oid's here, and expand the function to take multiple
- oid's
-*/
- variableBindings.list->name = oid;
- variableBindings.list->value.asnType = ASN_NULL;
- variableBindings.len = 1;
-
-/* Establish a SNMP session to communicate with the remote agent. The
- community, communications timeout, and communications retry count
- for the session are also required.
-*/
- if ((session = SnmpMgrOpen(agent, community, timeout, retries)) == NULL){
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "error on SnmpMgrOpen %d\n", GetLastError());
- }
-
- /* Determine and perform the requested operation.*/
- if (operation == GET || operation == GETNEXT){
- /* Get and GetNext are relatively simple operations to perform.
- Simply initiate the request and process the result and/or
- possible error conditions. */
-
- if (operation == GET){
- requestType = ASN_RFC1157_GETREQUEST;
- } else {
- requestType = ASN_RFC1157_GETNEXTREQUEST;
- }
-
- /* Request that the API carry out the desired operation.*/
- if (!SnmpMgrRequest(session, requestType, &variableBindings,
- &errorStatus, &errorIndex)){
- /* The API is indicating an error. */
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "error on SnmpMgrRequest %d\n", GetLastError());
- } else {
- /* The API succeeded, errors may be indicated from the remote
- agent. */
- if (errorStatus > 0){
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Error: errorStatus=%d, errorIndex=%d\n",
- errorStatus, errorIndex);
- } else {
- /* Display the resulting variable bindings.*/
- UINT i;
- char *str = NULL;
-
- for(i=0; i < variableBindings.len; i++)
- {
- SnmpMgrOidToStr(&variableBindings.list[i].name, &str);
- php_printf("Variable = %s\n", str);
- if (str) SNMP_free(str);
-
- php_printf("Value = ");
- SnmpUtilPrintAsnAny(&variableBindings.list[i].value);
-
- php_printf("\n");
- } /* end for() */
- }
- }
-
- /* Free the variable bindings that have been allocated.*/
- SnmpUtilVarBindListFree(&variableBindings);
- }
- else if (operation == WALK)
- {
- /* Walk is a common term used to indicate that all MIB variables
- under a given OID are to be traversed and displayed. This is
- a more complex operation requiring tests and looping in addition
- to the steps for get/getnext above. */
- AsnObjectIdentifier root;
- AsnObjectIdentifier tempOid;
-
- SnmpUtilOidCpy(&root, &variableBindings.list[0].name);
- requestType = ASN_RFC1157_GETNEXTREQUEST;
-
- while(1)
- {
- if (!SnmpMgrRequest(session, requestType, &variableBindings,
- &errorStatus, &errorIndex)){
- /* The API is indicating an error.*/
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "error on SnmpMgrRequest %d\n", GetLastError());
- break;
- }
- else
- {
- /* The API succeeded, errors may be indicated from the remote
- agent.
- Test for end of subtree or end of MIB. */
- if (errorStatus == SNMP_ERRORSTATUS_NOSUCHNAME ||
- SnmpUtilOidNCmp(&variableBindings.list[0].name,
- &root, root.idLength))
- {
- PUTS("End of MIB subtree.\n\n");
- break;
- }
-
- /* Test for general error conditions or sucesss. */
- if (errorStatus > 0){
- php_error_docref(NULL TSRMLS_CC, E_ERROR,"Error: errorStatus=%d, errorIndex=%d \n", errorStatus, errorIndex);
- break;
- }
- else
- {
- /* Display resulting variable binding for this iteration. */
- char *str = NULL;
-
- SnmpMgrOidToStr(&variableBindings.list[0].name, &str);
- php_printf("Variable = %s\n", str);
- if (str) SNMP_free(str);
-
- php_printf("Value = ");
- SnmpUtilPrintAsnAny(&variableBindings.list[0].value);
-
- php_printf("\n");
- }
- } /* end if () */
- /* Prepare for the next iteration. Make sure returned oid is
- preserved and the returned value is freed.
- */
- SnmpUtilOidCpy(&tempOid, &variableBindings.list[0].name);
- SnmpUtilVarBindFree(&variableBindings.list[0]);
- SnmpUtilOidCpy(&variableBindings.list[0].name, &tempOid);
- variableBindings.list[0].value.asnType = ASN_NULL;
- SnmpUtilOidFree(&tempOid);
- } /* end while() */
- /* Free the variable bindings that have been allocated.*/
- SnmpUtilVarBindListFree(&variableBindings);
- SnmpUtilOidFree(&root);
- } /* end if (operation) */
-
-
- /* Close SNMP session with the remote agent.*/
- if (!SnmpMgrClose(session)){
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "error on SnmpMgrClose %d\n", GetLastError());
- }
-}
-/* }}} */
-
-/* {{{ php3_snmpget
- */
-DLEXPORT void php3_snmpget(INTERNAL_FUNCTION_PARAMETERS) {
- _php_snmp(INTERNAL_FUNCTION_PARAM_PASSTHRU,1);
-}
-/* }}} */
-
-/* {{{ php3_snmpwalk
- */
-DLEXPORT void php3_snmpwalk(INTERNAL_FUNCTION_PARAMETERS) {
- _php_snmp(INTERNAL_FUNCTION_PARAM_PASSTHRU,2);
-}
-/* }}} */
-
-#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/soap/CREDITS b/ext/soap/CREDITS
deleted file mode 100644
index 83c9b1cc5c..0000000000
--- a/ext/soap/CREDITS
+++ /dev/null
@@ -1,2 +0,0 @@
-SOAP
-Brad Lafountain, Shane Caraveo, Dmitry Stogov
diff --git a/ext/soap/EXPERIMENTAL b/ext/soap/EXPERIMENTAL
deleted file mode 100644
index e69de29bb2..0000000000
--- a/ext/soap/EXPERIMENTAL
+++ /dev/null
diff --git a/ext/soap/TODO b/ext/soap/TODO
deleted file mode 100644
index edee329fdb..0000000000
--- a/ext/soap/TODO
+++ /dev/null
@@ -1,100 +0,0 @@
-General
--------
-- make sure soapserver.map(), soap_encode_to_xml() and soap_encode_to_zval() are really need
-- reimplement SoapObject::__getfunctions() and SoapObject::__gettypes()
- to return structures instead of strings
-- error handling???
-
-SOAP
-----
-- SOAP routing
-- root attribute (it is defined by SOAP 1.1, but not SOAP 1.2)
-- make sure soap 1.1 and 1.2 are supported fully
-
-Encoding
---------
-? full support for standard simple types (
- ? language, (pattern: "[a-zA-Z]{1,8}(-[a-zA-Z0-9]{1,8})*")
- ? NMTOKEN, (pattern: "\c+") (\c: [a-zA-Z0-9.\-_:])
- ? NMTOKENS, (list: NMTOKEN, minLength: 1)
- ? Name, (pattern: "\i\c*") (\i: [a-zA-Z_:]
- ? NCName, (pattern: "[\i-[:]][\c-[:]]*")
- ? ID, (base: NCName)
- ? IDREF, (base: NCName)
- ? IDREFS, (list: IDREF; minLength: 1)
- ? ENTITY, (base: NCName)
- ? ENTITIES, (list: ENTITY; minLength: 1)
- ? duration)
-? full support for standard date/time types (
- ? dateTime,
- ? time,
- ? date,
- ? gYearMonth,
- ? gYear,
- ? gMonthDay,
- ? gDay,
- ? gMonth)
-? proper encoding of standard hexBinary type
-? proper encoding of standard base64Binary type
-? full support for arrays
- - SOAP 1.1 encoding of arrays with holes (partially transmitted and sparse arrays)
- SOAP 1.2 doesn't support partially transmitted and sparse arrays
-- references to external resources
-? support for "nillable" and "nil"
-? default values of <element>
-? provide schema 1999/2001 support???
-? make internal refrences for soap encoding (use seralization logic)???
-? provide user space overriding of serialization certin objects and types???
-
-WSDL
-----
-? server part support for "document" style encoding
-? support for <fault>, <soap:fault>
-? <soap:headerfault>
-- <soap:body> parts attribute (with MIME/DIME binding)
-- MIME binding
-- DIME binding
-- support for portType/operation parameterOrder attribute
-- support for binding operation input/output name attribute (part of overloading)
-- function/method overloading/redeclaration (test(int); test(string))
-- wsdl auto generation
-- HTTP GET/POST binding
-- SOAP security extension
-
-Schema
-------
-- <redefine>
-? support for user defined simple types
- ? restiction
- ? enumeration
- ? length (for string, anyURI, hexBinary, base64Binary and derived) list???
- ? minLength (for string, hexBinary, base64Binary and derived) list???
- ? maxLength (for string, hexBinary, base64Binary and derived) list???
- + whiteSpace (preserve, replace [#x9,#xA,#xD=>#x20], collapse [replace+?])
- - pattern
- - minExclusive (for numeric, date types)
- - minInclusive (for numeric, date types)
- - maxExclusive (for numeric, date types)
- - maxInclusive (for numeric, date types)
- - totalDigits (for decimal)
- - fractionDigits (for decimal)
- ? union
-? support for user defined complex types
- ? full support for content model encoding/decoding
- - <any>
- - <anyAttribute>
-
-Transport
----------
-? HTTP status codes
-? HTTP chunked Transfer-Encoding
-? support for HTTP compression (gzip,x-gzip,defalte)
-- transport abstraction layer???
-
-Interop Testing
----------------
-- more interop rounds/groups
-
-UDDI
-----
-- ???
diff --git a/ext/soap/TODO.old b/ext/soap/TODO.old
deleted file mode 100644
index a1cc15c397..0000000000
--- a/ext/soap/TODO.old
+++ /dev/null
@@ -1,39 +0,0 @@
-TODO:
-make sure soap 1.1 and 1.2 is supported fully
-Better WSDL support Client and server (how much validation is needed here?)
-UDDI??
-make internal refrences for soap encoding (use seralization logic)
-add ini option for always soap_error_handler
-provide user space overriding of serialization certin objects and types
-serialization in general needs to be polished/finished... all xsd types
-make perstistant objects and work with or without register_globals on
-look to see if php-soap will work with out always_populate_raw_post_data on
-see if client will work with ssl.. should be eaiser with php_streams
-work on soap seralizer (php serialization)
--work on a soap-service 'regiestry' and 'proxy' (apache soap style)
--convert all string mainpulation to use smart_str
-make the 'soap' packet abstract.. maybe incorperate xml-rpc
-make the transport layer abstract.. what other transport layers are needed?... who uses smtp? what about jabber?
-make $soap_object->data = 'text'; maybe invoke a set_*() and/or get_*() method
-when using wsdls and function names are similar find the best match
- void test(int);
- void test(string);
- maybe use the same alogrithim as ext/java.
-investigate further http keep_alive... inital testing proved slower.. maybe php_streams will speed things up..
-provide schema 1999/2001 support....
-through memory leak testing
-possible using shared memory for sdl caching...
-api for clearing/checking sdl caching...
-make php-soap work as a standalone server using php_streams and the new socket extension
-http authication
-proxy support
-wsdl generation static and auto (.net style (http://server.com/soapserver.php?WSDL)) using phpdoc parsing engine
-interpo testing...
-BENCHMARKING...... lets prove how fast it is.
-do some more work on website
-
-does this list stop... what exactly have i done?
-im sure im forgetting 20 thousand more things....
-
-
- - brad
diff --git a/ext/soap/config.m4 b/ext/soap/config.m4
deleted file mode 100644
index 73d2b1e673..0000000000
--- a/ext/soap/config.m4
+++ /dev/null
@@ -1,20 +0,0 @@
-dnl $Id$
-dnl config.m4 for extension soap
-
-PHP_ARG_ENABLE(soap, whether to enable soap support,
-[ --enable-soap Include SOAP support.])
-
-if test -z "$PHP_LIBXML_DIR"; then
- PHP_ARG_WITH(libxml-dir, libxml2 install dir,
- [ --with-libxml-dir=DIR XML: libxml2 install prefix], no, no)
-fi
-
-if test "$PHP_SOAP" != "no" && test "$PHP_LIBXML" != "no"; then
- PHP_SETUP_LIBXML(SOAP_SHARED_LIBADD, [
- AC_DEFINE(HAVE_SOAP,1,[ ])
- PHP_NEW_EXTENSION(soap, soap.c php_encoding.c php_http.c php_packet_soap.c php_schema.c php_sdl.c php_xml.c, $ext_shared)
- PHP_SUBST(SOAP_SHARED_LIBADD)
- ], [
- AC_MSG_ERROR([xml2-config not found. Please check your libxml2 installation.])
- ])
-fi
diff --git a/ext/soap/config.w32 b/ext/soap/config.w32
deleted file mode 100644
index 048fd70ca1..0000000000
--- a/ext/soap/config.w32
+++ /dev/null
@@ -1,15 +0,0 @@
-// $Id$
-// vim:ft=javascript
-
-ARG_ENABLE("soap", "SOAP support", "no");
-
-if (PHP_SOAP != "no" && PHP_LIBXML == "yes") {
- EXTENSION('soap', 'soap.c php_encoding.c php_http.c php_packet_soap.c php_schema.c php_sdl.c php_xml.c');
- AC_DEFINE('HAVE_PHP_SOAP', 1, "SOAP support");
-
- if (!PHP_SOAP_SHARED) {
- ADD_FLAG('CFLAGS_SOAP', "/D LIBXML_STATIC ");
- }
- ADD_EXTENSION_DEP('soap', 'libxml');
-}
-
diff --git a/ext/soap/interop/client_round2.php b/ext/soap/interop/client_round2.php
deleted file mode 100644
index c1307472c4..0000000000
--- a/ext/soap/interop/client_round2.php
+++ /dev/null
@@ -1,113 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-
-<html>
-<head>
- <title>Round 2 Interop Client Tests</title>
-</head>
-
-<body>
-<a href="index.php">Back to Interop Index</a><br>
-<p>&nbsp;</p>
-<?php
-require_once 'client_round2_interop.php';
-
-$iop = new Interop_Client();
-
-function endpointList($test,$sel_endpoint)
-{
- global $iop;
- $iop->getEndpoints($test);
- echo "<select name='endpoint'>\n";
- echo "<option value=''>-- All Endpoints --</option>\n";
- foreach ($iop->endpoints as $epname => $epinfo) {
- $selected = '';
- if ($sel_endpoint == $epname) $selected = ' SELECTED';
- echo "<option value='$epname'$selected>$epname</option>\n";
- }
- echo "</select>\n";
-}
-function methodList($test,$sel_method)
-{
- global $iop;
- global $soap_tests;
-
- echo "<select name='method'>\n";
- echo "<option value='ALL'>-- Run All Methods --</option>\n";
- $prev_method = "";
- foreach ($soap_tests[$test] as $x) {
- $method = $x->test_name;
- if ($method != $prev_method) {
- $prev_method = $method;
- $selected = '';
- if ($sel_method == $method) $selected = ' SELECTED';
- echo "<option value='$method'$selected>$method</option>\n";
- }
- }
- echo "</select>\n";
-}
-
-function endpointTestForm($test, $endpoint, $method, $paramType, $useWSDL)
-{
- global $PHP_SELF;
- if (!$test) $test = 'base';
- echo "Round 2 '$test' Selected<br>\n";
- echo "Select endpoint and method to run:<br>\n";
- echo "<form action='$PHP_SELF' method='post'>\n";
- echo "<input type='hidden' name='test' value='$test'>\n";
- endpointList($test, $endpoint);
- methodList($test, $method);
- echo "<select name='paramType'>";
-// echo "<option value='all'>-- All --</option>";
- echo "<option value='soapval'".($paramType=='soapval'?' selected':'').">soap value</option>";
- echo "<option value='php'".($paramType=='php'?' selected':'').">php internal type</option></select>\n";
- echo "<select name='useWSDL'>";
-// echo "<option value='all'>-- All --</option>";
- echo "<option value='0'>go Direct</option>";
- echo "<option value='1'".($useWSDL?' selected':'').">use WSDL</option></select>\n";
- echo "<input type='submit' value='Go'>\n";
- echo "</form><br>\n";
-}
-
-function testSelectForm($selected_test = NULL)
-{
- global $iop, $PHP_SELF;
- echo "Select a Round 2 test case to run:<br>\n";
- echo "<form action='$PHP_SELF' method='post'>\n";
- echo "<select name='test'>\n";
- foreach ($iop->tests as $test) {
- $selected = '';
- if ($selected_test == $test) $selected = ' SELECTED';
- echo "<option value='$test'$selected>$test</option>\n";
- }
- echo "</select>\n";
- echo "<input type='submit' value='Go'>\n";
- echo "</form><br>\n";
-}
-
-testSelectForm($_POST['test']);
-endpointTestForm($_POST['test'],$_POST['endpoint'],$_POST['method'],$_POST['paramType'],$_POST['useWSDL']);
-
-if ($_POST['test'] && array_key_exists('endpoint', $_POST) && array_key_exists('method', $_POST)) {
- // here we execute the orders
- echo "<h2>Calling {$_POST['method']} at {$_POST['endpoint']}</h2>\n";
- echo "NOTE: wire's are slightly modified to display better in web browsers.<br>\n";
-
- $iop->currentTest = $_POST['test']; // see $tests above
- $iop->paramType = $_POST['paramType']; // 'php' or 'soapval'
- $iop->useWSDL = $_POST['useWSDL']; // 1= do wsdl tests
- $iop->numServers = 0; // 0 = all
- $iop->specificEndpoint = $_POST['endpoint']; // test only this endpoint
- $iop->testMethod = $_POST['method']=='ALL'?'':$_POST['method']; // test only this method
- $iop->skipEndpointList = array(); // endpoints to skip
- $iop->nosave = 0; // 1= disable saving results to database
- // debug output
- $iop->show = 0;
- $iop->debug = 0;
- $iop->showFaults = 0; // used in result table output
- echo '<pre>';
- $iop->doTest(); // run a single set of tests using above options
- echo '</pre>';
-}
-?>
-</body>
-</html>
diff --git a/ext/soap/interop/client_round2_interop.php b/ext/soap/interop/client_round2_interop.php
deleted file mode 100644
index a8a3fad810..0000000000
--- a/ext/soap/interop/client_round2_interop.php
+++ /dev/null
@@ -1,785 +0,0 @@
-<?php
-//
-// +----------------------------------------------------------------------+
-// | PHP Version 4 |
-// +----------------------------------------------------------------------+
-// | Copyright (c) 1997-2003 The PHP Group |
-// +----------------------------------------------------------------------+
-// | This source file is subject to version 2.02 of the PHP license, |
-// | that is bundled with this package in the file LICENSE, and is |
-// | available at through the world-wide-web at |
-// | http://www.php.net/license/2_02.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. |
-// +----------------------------------------------------------------------+
-// | Authors: Shane Caraveo <Shane@Caraveo.com> |
-// +----------------------------------------------------------------------+
-//
-// $Id$
-//
-require_once 'DB.php'; // PEAR/DB
-require_once 'client_round2_params.php';
-require_once 'test.utility.php';
-require_once 'config.php';
-
-error_reporting(E_ALL ^ E_NOTICE);
-
-class Interop_Client
-{
- // database DNS
- var $DSN = "";
-
- var $baseURL = "";
-
- // our central interop server, where we can get the list of endpoints
- var $interopServer = "http://www.whitemesa.net/wsdl/interopInfo.wsdl";
-
- // our local endpoint, will always get added to the database for all tests
- var $localEndpoint;
-
- // specify testing
- var $currentTest = 'base'; // see $tests above
- var $paramType = 'php'; // 'php' or 'soapval'
- var $useWSDL = 0; // 1= do wsdl tests
- var $numServers = 0; // 0 = all
- var $specificEndpoint = ''; // test only this endpoint
- var $testMethod = ''; // test only this method
- var $skipEndpointList = array(); // endpoints to skip
- var $nosave = 0;
- var $startAt = ''; // start in list at this endpoint
- // debug output
- var $show = 1;
- var $debug = 0;
- var $showFaults = 0; // used in result table output
-
- // PRIVATE VARIABLES
- var $dbc = NULL;
- var $totals = array();
- var $tests = array('base','GroupB', 'GroupC');
- var $paramTypes = array('php', 'soapval');
- var $endpoints = array();
- var $html = 1;
-
- function Interop_Client() {
- global $interopConfig;
- $this->DSN = $interopConfig['DSN'];
- $this->baseURL = $interopConfig['baseURL'];
- //$this->baseURL = 'http://'.$_SERVER['HTTP_HOST'].dirname($_SERVER['PHP_SELF']);
- // set up the database connection
- $this->dbc = DB::connect($this->DSN, true);
- // if it errors out, just ignore it and rely on regular methods
- if (DB::isError($this->dbc)) {
- echo $this->dbc->getMessage();
- $this->dbc = NULL;
- }
- // set up local endpoint
- $this->localEndpoint['base'] = (object)array(
- 'endpointName'=>'PHP ext/soap',
- 'endpointURL'=>$this->baseURL.'/server_round2_base.php',
- 'wsdlURL'=>$this->baseURL.'/interop.wsdl.php'
- );
- $this->localEndpoint['GroupB'] = (object)array(
- 'endpointName'=>'PHP ext/soap',
- 'endpointURL'=>$this->baseURL.'/server_round2_groupB.php',
- 'wsdlURL'=>$this->baseURL.'/interopB.wsdl.php'
- );
- $this->localEndpoint['GroupC'] = (object)array(
- 'endpointName'=>'PHP ext/soap',
- 'endpointURL'=>$this->baseURL.'/server_round2_groupC.php',
- 'wsdlURL'=>$this->baseURL.'/echoheadersvc.wsdl.php');
- }
-
- function _fetchEndpoints(&$soapclient, $test) {
- $this->_getEndpoints($test, 1);
-
- // retreive endpoints from the endpoint server
- $endpointArray = $soapclient->__call("GetEndpointInfo",array("groupName"=>$test),array('soapaction'=>"http://soapinterop.org/",'uri'=>"http://soapinterop.org/"));
- if (is_soap_fault($endpointArray) || PEAR::isError($endpointArray)) {
- if ($this->html) print "<pre>";
- print $soapclient->wire."\n";
- print_r($endpointArray);
- if ($this->html) print "</pre>";
- print "\n";
- return;
- }
-
- // add our local endpoint
- if ($this->localEndpoint[$test]) {
- array_push($endpointArray, $this->localEndpoint[$test]);
- }
-
- if (!$endpointArray) return;
-
- // reset the status to zero
- $res = $this->dbc->query("update endpoints set status = 0 where class='$test'");
- if (DB::isError($res)) {
- die ($res->getMessage());
- }
- if (is_object($res)) $res->free();
- // save new endpoints into database
- foreach($endpointArray as $k => $v){
- if (array_key_exists($v->endpointName,$this->endpoints)) {
- $res = $this->dbc->query("update endpoints set endpointURL='{$v->endpointURL}', wsdlURL='{$v->wsdlURL}', status=1 where id={$this->endpoints[$v->endpointName]['id']}");
- } else {
- $res = $this->dbc->query("insert into endpoints (endpointName,endpointURL,wsdlURL,class) values('{$v->endpointName}','{$v->endpointURL}','{$v->wsdlURL}','$test')");
- }
- if (DB::isError($res)) {
- die ($res->getMessage());
- }
- if (is_object($res)) $res->free();
- }
- }
-
- /**
- * fetchEndpoints
- * retreive endpoints interop server
- *
- * @return boolean result
- * @access private
- */
- function fetchEndpoints($test = NULL) {
- // fetch from the interop server
- try {
- $soapclient = new SoapClient($this->interopServer);
- if ($test) {
- $this->_fetchEndpoints($soapclient, $test);
- } else {
- foreach ($this->tests as $test) {
- $this->_fetchEndpoints($soapclient, $test);
- }
- $test = 'base';
- }
- } catch (SoapFault $fault) {
- if ($this->html) {
- echo "<pre>$fault</pre>\n";
- } else {
- echo "$fault\n";
- }
- return NULL;
- }
- // retreive all endpoints now
- $this->currentTest = $test;
- $x = $this->_getEndpoints($test);
- return $x;
- }
-
- /**
- * getEndpoints
- * retreive endpoints from either database or interop server
- *
- * @param string base (see local var $tests)
- * @param boolean all (if false, only get valid endpoints, status=1)
- * @return boolean result
- * @access private
- */
- function getEndpoints($base = 'base', $all = 0) {
- if (!$this->_getEndpoints($base, $all)) {
- return $this->fetchEndpoints($base);
- }
- return TRUE;
- }
-
- /**
- * _getEndpoints
- * retreive endpoints from database
- *
- * @param string base (see local var $tests)
- * @param boolean all (if false, only get valid endpoints, status=1)
- * @return boolean result
- * @access private
- */
- function _getEndpoints($base = "", $all = 0) {
- $this->endpoints = array();
-
- // build sql
- $sql = "select * from endpoints ";
- if ($base) {
- $sql .= "where class='$base' ";
- if (!$all) $sql .= "and status=1";
- } else
- if (!$all) $sql .= "where status=1";
- $sql .= " order by endpointName";
-
-
- $db_ep = $this->dbc->getAll($sql,NULL, DB_FETCHMODE_ASSOC );
- if (DB::isError($db_ep)) {
- echo $sql."\n";
- echo $db_ep->getMessage();
- return FALSE;
- }
- // rearange the array
- foreach ($db_ep as $entry) {
- $this->endpoints[$entry['endpointName']] = $entry;
- }
-
- if (count($this->endpoints) > 0) {
- $this->currentTest = $base;
- return TRUE;
- }
- return FALSE;
- }
-
- /**
- * getResults
- * retreive results from the database, stuff them into the endpoint array
- *
- * @access private
- */
- function getResults($test = 'base', $type = 'php', $wsdl = 0) {
- // be sure we have the right endpoints for this test result
- $this->getEndpoints($test);
-
- // retreive the results and put them into the endpoint info
- $sql = "select * from results where class='$test' and type='$type' and wsdl=$wsdl";
- $results = $this->dbc->getAll($sql,NULL, DB_FETCHMODE_ASSOC );
- foreach ($results as $result) {
- // find the endpoint
- foreach ($this->endpoints as $epn => $epi) {
- if ($epi['id'] == $result['endpoint']) {
- // store the info
- $this->endpoints[$epn]['methods'][$result['function']] = $result;
- break;
- }
- }
- }
- }
-
- /**
- * saveResults
- * save the results of a method test into the database
- *
- * @access private
- */
- function _saveResults($endpoint_id, &$soap_test) {
- if ($this->nosave) return;
-
- $result = $soap_test->result;
- $wire = $result['wire'];
- if ($result['success']) {
- $success = 'OK';
- $error = '';
- } else {
- $success = $result['fault']->faultcode;
- $pos = strpos($success,':');
- if ($pos !== false) {
- $success = substr($success,$pos+1);
- }
- $error = $result['fault']->faultstring;
- if (!$wire) $wire= $result['fault']->detail;
- }
-
- $test_name = $soap_test->test_name;
-
- $sql = "delete from results where endpoint=$endpoint_id ".
- "and class='$this->currentTest' and type='$this->paramType' ".
- "and wsdl=$this->useWSDL and function=".
- $this->dbc->quote($test_name);
- #echo "\n".$sql;
- $res = $this->dbc->query($sql);
- if (DB::isError($res)) {
- die ($res->getMessage());
- }
- if (is_object($res)) $res->free();
-
- $sql = "insert into results (endpoint,stamp,class,type,wsdl,function,result,error,wire) ".
- "values($endpoint_id,".time().",'$this->currentTest',".
- "'$this->paramType',$this->useWSDL,".
- $this->dbc->quote($test_name).",".
- $this->dbc->quote($success).",".
- $this->dbc->quote($error).",".
- ($wire?$this->dbc->quote($wire):"''").")";
- #echo "\n".$sql;
- $res = $this->dbc->query($sql);
-
- if (DB::isError($res)) {
- die ($res->getMessage());
- }
- if (is_object($res)) $res->free();
- }
-
- /**
- * decodeSoapval
- * decodes a soap value to php type, used for test result comparisions
- *
- * @param SOAP_Value soapval
- * @return mixed result
- * @access public
- */
- function decodeSoapval($soapval)
- {
- if (gettype($soapval) == "object" &&
- (strcasecmp(get_class($soapval),"SoapParam") == 0 ||
- strcasecmp(get_class($soapval),"SoapVar") == 0)) {
- if (strcasecmp(get_class($soapval),"SoapParam") == 0)
- $val = $soapval->param_data->enc_value;
- else
- $val = $soapval->enc_value;
- } else {
- $val = $soapval;
- }
- if (is_array($val)) {
- foreach($val as $k => $v) {
- if (gettype($v) == "object" &&
- (strcasecmp(get_class($soapval),"SoapParam") == 0 ||
- strcasecmp(get_class($soapval),"SoapVar") == 0)) {
- $val[$k] = $this->decodeSoapval($v);
- }
- }
- }
- return $val;
- }
-
- /**
- * compareResult
- * compare two php types for a match
- *
- * @param string expect
- * @param string test_result
- * @return boolean result
- * @access public
- */
- function compareResult($expect, $result, $type = NULL)
- {
- return compare($expect, $result);
- }
-
-
- /**
- * doEndpointMethod
- * run a method on an endpoint and store it's results to the database
- *
- * @param array endpoint_info
- * @param SOAP_Test test
- * @return boolean result
- * @access public
- */
- function doEndpointMethod(&$endpoint_info, &$soap_test) {
- $ok = FALSE;
-
- // prepare a holder for the test results
- $soap_test->result['class'] = $this->currentTest;
- $soap_test->result['type'] = $this->paramType;
- $soap_test->result['wsdl'] = $this->useWSDL;
-
- if ($this->useWSDL) {
- if (array_key_exists('wsdlURL',$endpoint_info)) {
- if (!array_key_exists('client',$endpoint_info)) {
- try {
- $endpoint_info['client'] = new SoapClient($endpoint_info['wsdlURL'], array("trace"=>1));
- } catch (SoapFault $ex) {
- $endpoint_info['client']->wsdl->fault = $ex;
- }
- }
- $soap =& $endpoint_info['client'];
-
- # XXX how do we determine a failure on retreiving/parsing wsdl?
- if ($soap->wsdl->fault) {
- $fault = $soap->wsdl->fault;
- $soap_test->setResult(0,'WSDL',
- $fault->faultstring."\n\n".$fault->detail,
- $fault->faultstring,
- $fault
- );
- return FALSE;
- }
- } else {
- $fault = new SoapFault('WSDL',"no WSDL defined for $endpoint");
- $soap_test->setResult(0,'WSDL',
- $fault->faultstring,
- $fault->faultstring,
- $fault
- );
- return FALSE;
- }
- $namespace = false;
- $soapaction = false;
- } else {
- $namespace = $soapaction = 'http://soapinterop.org/';
- // hack to make tests work with MS SoapToolkit
- // it's the only one that uses this soapaction, and breaks if
- // it isn't right. Can't wait for soapaction to be fully depricated
- if ($this->currentTest == 'base' &&
- strstr($endpoint_info['endpointName'],'MS SOAP ToolKit 2.0')) {
- $soapaction = 'urn:soapinterop';
- }
- if (!array_key_exists('client',$endpoint_info)) {
- $endpoint_info['client'] = new SoapClient(null,array('location'=>$endpoint_info['endpointURL'],'uri'=>$soapaction,'trace'=>1));
- }
- $soap = $endpoint_info['client'];
- }
-// // add headers to the test
-// if ($soap_test->headers) {
-// // $header is already a SOAP_Header class
-// foreach ($soap_test->headers as $header) {
-// $soap->addHeader($header);
-// }
-// }
- // XXX no way to set encoding
- // this lets us set UTF-8, US-ASCII or other
- //$soap->setEncoding($soap_test->encoding);
-try {
- if ($this->useWSDL && !$soap_test->headers && !$soap_test->headers_expect) {
- $args = '';
- foreach ($soap_test->method_params as $pname => $param) {
- $arg = '$soap_test->method_params["'.$pname.'"]';
- $args .= $args?','.$arg:$arg;
- }
- $return = eval('return $soap->'.$soap_test->method_name.'('.$args.');');
- } else {
- if ($soap_test->headers || $soap_test->headers_expect) {
- $return = $soap->__call($soap_test->method_name,$soap_test->method_params,array('soapaction'=>$soapaction,'uri'=>$namespace), $soap_test->headers, $result_headers);
- } else {
- $return = $soap->__call($soap_test->method_name,$soap_test->method_params,array('soapaction'=>$soapaction,'uri'=>$namespace));
- }
- }
-} catch (SoapFault $ex) {
- $return = $ex;
-}
-
- if(!is_soap_fault($return)){
- if ($soap_test->expect !== NULL) {
- $sent = $soap_test->expect;
- } else if (is_array($soap_test->method_params) && count($soap_test->method_params) == 1) {
- reset($soap_test->method_params);
- $sent = current($soap_test->method_params);
- } else if (is_array($soap_test->method_params) && count($soap_test->method_params) == 0) {
- $sent = null;
- } else {
- $sent = $soap_test->method_params;
- }
-
- // compare header results
- $headers_ok = TRUE;
- if ($soap_test->headers || $soap_test->headers_expect) {
- $headers_ok = $this->compareResult($soap_test->headers_expect, $result_headers);
- }
-
- # we need to decode what we sent so we can compare!
- $sent_d = $this->decodeSoapval($sent);
-
- $soap_test->result['sent'] = $sent;
- $soap_test->result['return'] = $return;
-
- // compare the results with what we sent
-
- if ($soap_test->cmp_func !== NULL) {
- $cmp_func = $soap_test->cmp_func;
- $ok = $cmp_func($sent_d,$return);
- } else {
- $ok = $this->compareResult($sent_d,$return, $sent->type);
- if (!$ok && $soap_test->expect) {
- $ok = $this->compareResult($soap_test->expect,$return);
- }
- }
-
- // save the wire
- $wire = "REQUEST:\n".str_replace('" ',"\" \n",str_replace('>',">\n",$soap->__getlastrequest()))."\n\n".
- "RESPONSE:\n".str_replace('" ',"\" \n",str_replace('>',">\n",$soap->__getlastresponse()))."\n\n".
- "EXPECTED:\n".var_dump_str($sent_d)."\n".
- "RESULTL:\n".var_dump_str($return);
- if ($soap_test->headers_expect) {
- $wire .= "\nEXPECTED HEADERS:\n".var_dump_str($soap_test->headers_expect)."\n".
- "RESULT HEADERS:\n".var_dump_str($result_headers);
- }
- #print "Wire:".htmlentities($wire);
-
- if($ok){
- if (!$headers_ok) {
- $fault = new SoapFault('HEADER','The returned result did not match what we expected to receive');
- $soap_test->setResult(0,$fault->faultcode,
- $wire,
- $fault->faultstring,
- $fault
- );
- } else {
- $soap_test->setResult(1,'OK',$wire);
- $success = TRUE;
- }
- } else {
- $fault = new SoapFault('RESULT','The returned result did not match what we expected to receive');
- $soap_test->setResult(0,$fault->faultcode,
- $wire,
- $fault->faultstring,
- $fault
- );
- }
- } else {
- $fault = $return;
- if ($soap_test->expect_fault) {
- $ok = 1;
- $res = 'OK';
- } else {
- $ok = 0;
- $res =$fault->faultcode;
- $pos = strpos($res,':');
- if ($pos !== false) {
- $res = substr($res,$pos+1);
- }
- }
- // save the wire
- $wire = "REQUEST:\n".str_replace('" ',"\" \n",str_replace('>',">\n",$soap->__getlastrequest()))."\n\n".
- "RESPONSE:\n".str_replace('" ',"\" \n",str_replace('>',">\n",$soap->__getlastresponse()))."\n".
- "RESULTL:\n".var_dump_str($return);
- #print "Wire:".htmlentities($wire);
-
- $soap_test->setResult($ok,$res, $wire,$fault->faultstring, $fault);
-
- }
- return $ok;
- }
-
-
- /**
- * doTest
- * run a single round of tests
- *
- * @access public
- */
- function doTest() {
- global $soap_tests;
- // get endpoints for this test
- $this->getEndpoints($this->currentTest);
- #clear totals
- $this->totals = array();
-
- $i = 0;
- foreach($this->endpoints as $endpoint => $endpoint_info){
-
- // if we specify an endpoint, skip until we find it
- if ($this->specificEndpoint && $endpoint != $this->specificEndpoint) continue;
- if ($this->useWSDL && !$endpoint_info['endpointURL']) continue;
-
- $skipendpoint = FALSE;
- $this->totals['servers']++;
- #$endpoint_info['tests'] = array();
-
- if ($this->show) {
- print "Processing $endpoint at {$endpoint_info['endpointURL']}";
- if ($this->html) print "<br>\n"; else print "\n";
- }
-
- foreach($soap_tests[$this->currentTest] as $soap_test) {
- //foreach(array_keys($method_params[$this->currentTest][$this->paramType]) as $method)
-
- // only run the type of test we're looking for (php or soapval)
- if ($soap_test->type != $this->paramType) continue;
-
- // if we haven't reached our startpoint, skip
- if ($this->startAt && $this->startAt != $endpoint_info['endpointName']) continue;
- $this->startAt = '';
-
- // if this is in our skip list, skip it
- if (in_array($endpoint, $this->skipEndpointList)) {
- $skipendpoint = TRUE;
- $skipfault = new SoapFault('SKIP','endpoint skipped');
- $soap_test->setResult(0,$fault->faultcode, '',
- $skipfault->faultstring,
- $skipfault
- );
- #$endpoint_info['tests'][] = &$soap_test;
- #$soap_test->showTestResult($this->debug, $this->html);
- #$this->_saveResults($endpoint_info['id'], $soap_test->method_name);
- $soap_test->result = NULL;
- continue;
- }
-
- // if we're looking for a specific method, skip unless we have it
- if ($this->testMethod && strcmp($this->testMethod,$soap_test->test_name) != 0) continue;
-
- // if we are skipping the rest of the tests (due to error) note a fault
- if ($skipendpoint) {
- $soap_test->setResult(0,$fault->faultcode, '',
- $skipfault->faultstring,
- $skipfault
- );
- #$endpoint_info['tests'][] = &$soap_test;
- $this->totals['fail']++;
- } else {
- // run the endpoint test
- if ($this->doEndpointMethod($endpoint_info, $soap_test)) {
- $this->totals['success']++;
- } else {
- $skipendpoint = $soap_test->result['fault']->faultcode=='HTTP'
- && strstr($soap_test->result['fault']->faultstring,'Connect Error');
- $skipfault = $soap_test->result['fault'];
- $this->totals['fail']++;
- }
- #$endpoint_info['tests'][] = &$soap_test;
- }
- $soap_test->showTestResult($this->debug, $this->html);
- $this->_saveResults($endpoint_info['id'], $soap_test);
- $soap_test->result = NULL;
- $this->totals['calls']++;
- }
- if ($this->numservers && ++$i >= $this->numservers) break;
- }
- }
-
- function doGroupTests() {
- $dowsdl = array(0,1);
- foreach($dowsdl as $usewsdl) {
- $this->useWSDL = $usewsdl;
- foreach($this->paramTypes as $ptype) {
- // skip a pointless test
- if ($usewsdl && $ptype == 'soapval') break;
- $this->paramType = $ptype;
- $this->doTest();
- }
- }
- }
-
- /**
- * doTests
- * go all out. This takes time.
- *
- * @access public
- */
- function doTests() {
- // the mother of all interop tests
- $dowsdl = array(0,1);
- foreach($this->tests as $test) {
- $this->currentTest = $test;
- foreach($dowsdl as $usewsdl) {
- $this->useWSDL = $usewsdl;
- foreach($this->paramTypes as $ptype) {
- // skip a pointless test
- if ($usewsdl && $ptype == 'soapval') break;
- $this->paramType = $ptype;
- $this->doTest();
- }
- }
- }
- }
-
- // ***********************************************************
- // output functions
-
- /**
- * getResults
- * retreive results from the database, stuff them into the endpoint array
- *
- * @access private
- */
- function getMethodList($test = 'base') {
- // retreive the results and put them into the endpoint info
- $sql = "select distinct(function) from results where class='$test' order by function";
- $results = $this->dbc->getAll($sql);
- $ar = array();
- foreach($results as $result) {
- $ar[] = $result[0];
- }
- return $ar;
- }
-
- function outputTable()
- {
- $methods = $this->getMethodList($this->currentTest);
- if (!$methods) return;
- $this->getResults($this->currentTest,$this->paramType,$this->useWSDL);
-
- echo "<b>Testing $this->currentTest ";
- if ($this->useWSDL) echo "using WSDL ";
- else echo "using Direct calls ";
- echo "with $this->paramType values</b><br>\n";
-
- // calculate totals for this table
- $this->totals['success'] = 0;
- $this->totals['fail'] = 0;
- $this->totals['servers'] = 0; #count($this->endpoints);
- foreach ($this->endpoints as $endpoint => $endpoint_info) {
- if (count($endpoint_info['methods']) > 0) {
- $this->totals['servers']++;
- foreach ($methods as $method) {
- $r = $endpoint_info['methods'][$method]['result'];
- if ($r == 'OK') $this->totals['success']++;
- else $this->totals['fail']++;
- }
- } else {
- unset($this->endpoints[$endpoint]);
- }
- }
- $this->totals['calls'] = count($methods) * $this->totals['servers'];
-
- echo "\n\n<b>Servers: {$this->totals['servers']} Calls: {$this->totals['calls']} Success: {$this->totals['success']} Fail: {$this->totals['fail']}</b><br>\n";
-
- echo "<table border=\"1\" cellspacing=\"0\" cellpadding=\"2\">\n";
- echo "<tr><td class=\"BLANK\">Endpoint</td>\n";
- foreach ($methods as $method) {
- $info = split(':', $method);
- echo "<td class='BLANK' valign='top'>";
- foreach ($info as $m) {
- $hi = split(',',$m);
- echo '<b>'.$hi[0]."</b><br>\n";
- if (count($hi) > 1) {
- echo "&nbsp;&nbsp;Actor=".($hi[1]?'Target':'Not Target')."<br>\n";
- echo "&nbsp;&nbsp;MustUnderstand=$hi[2]<br>\n";
- }
- }
- echo "</td>\n";
- }
- echo "</tr>\n";
- $faults = array();
- $fi = 0;
- foreach ($this->endpoints as $endpoint => $endpoint_info) {
- if (array_key_exists('wsdlURL',$endpoint_info)) {
- echo "<tr><td class=\"BLANK\"><a href=\"{$endpoint_info['wsdlURL']}\">$endpoint</a></td>\n";
- } else {
- echo "<tr><td class=\"BLANK\">$endpoint</td>\n";
- }
- foreach ($methods as $method) {
- $id = $endpoint_info['methods'][$method]['id'];
- $r = $endpoint_info['methods'][$method]['result'];
- $e = $endpoint_info['methods'][$method]['error'];
- if ($e) {
- $faults[$fi++] = $e;
- }
- if ($r) {
- echo "<td class='$r'><a href='$PHP_SELF?wire=$id'>$r</a></td>\n";
- } else {
- echo "<td class='untested'>untested</td>\n";
- }
- }
- echo "</tr>\n";
- }
- echo "</table><br>\n";
- if ($this->showFaults && count($faults) > 0) {
- echo "<b>ERROR Details:</b><br>\n<ul>\n";
- # output more error detail
- foreach ($faults as $fault) {
- echo '<li>'.HTMLSpecialChars($fault)."</li>\n";
- }
- }
- echo "</ul><br><br>\n";
- }
-
- function outputTables() {
- // the mother of all interop tests
- $dowsdl = array(0,1);
- foreach($this->tests as $test) {
- $this->currentTest = $test;
- foreach($dowsdl as $usewsdl) {
- $this->useWSDL = $usewsdl;
- foreach($this->paramTypes as $ptype) {
- // skip a pointless test
- if ($usewsdl && $ptype == 'soapval') break;
- $this->paramType = $ptype;
- $this->outputTable();
- }
- }
- }
- }
-
- function showWire($id) {
- $results = $this->dbc->getAll("select * from results where id=$id",NULL, DB_FETCHMODE_ASSOC );
- #$wire = preg_replace("/>/",">\n",$results[0]['wire']);
- $wire = $results[0]['wire'];
- if ($this->html) print "<pre>";
- echo "\n".HTMLSpecialChars($wire);
- if ($this->html) print "</pre>";
- print "\n";
- }
-
-}
-
-?> \ No newline at end of file
diff --git a/ext/soap/interop/client_round2_params.php b/ext/soap/interop/client_round2_params.php
deleted file mode 100644
index 04f9fd64a4..0000000000
--- a/ext/soap/interop/client_round2_params.php
+++ /dev/null
@@ -1,622 +0,0 @@
-<?php
-//
-// +----------------------------------------------------------------------+
-// | PHP Version 4 |
-// +----------------------------------------------------------------------+
-// | Copyright (c) 1997-2003 The PHP Group |
-// +----------------------------------------------------------------------+
-// | This source file is subject to version 2.02 of the PHP license, |
-// | that is bundled with this package in the file LICENSE, and is |
-// | available at through the world-wide-web at |
-// | http://www.php.net/license/2_02.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. |
-// +----------------------------------------------------------------------+
-// | Authors: Shane Caraveo <Shane@Caraveo.com> |
-// +----------------------------------------------------------------------+
-//
-// $Id$
-//
-
-define('SOAP_TEST_ACTOR_OTHER','http://some/other/actor');
-
-class SOAP_Test {
- var $type = 'php';
- var $test_name = NULL;
- var $method_name = NULL;
- var $method_params = NULL;
- var $cmp_func = NULL;
- var $expect = NULL;
- var $expect_fault = FALSE;
- var $headers = NULL;
- var $headers_expect = NULL;
- var $result = array();
- var $show = 1;
- var $debug = 0;
- var $encoding = 'UTF-8';
-
- function SOAP_Test($methodname, $params, $expect = NULL, $cmp_func = NULL) {
- # XXX we have to do this to make php-soap happy with NULL params
- if (!$params) $params = array();
-
- if (strchr($methodname,'(')) {
- preg_match('/(.*)\((.*)\)/',$methodname,$matches);
- $this->test_name = $methodname;
- $this->method_name = $matches[1];
- } else {
- $this->test_name = $this->method_name = $methodname;
- }
- $this->method_params = $params;
- if ($expect !== NULL) {
- $this->expect = $expect;
- }
- if ($cmp_func !== NULL) {
- $this->cmp_func = $cmp_func;
- }
-
- // determine test type
- if ($params) {
- $v = array_values($params);
- if (gettype($v[0]) == 'object' &&
- (get_class($v[0]) == 'SoapVar' || get_class($v[0]) == 'SoapParam'))
- $this->type = 'soapval';
- }
- }
-
- function setResult($ok, $result, $wire, $error = '', $fault = NULL)
- {
- $this->result['success'] = $ok;
- $this->result['result'] = $result;
- $this->result['error'] = $error;
- $this->result['wire'] = $wire;
- $this->result['fault'] = $fault;
- }
-
- /**
- * showMethodResult
- * print simple output about a methods result
- *
- * @param array endpoint_info
- * @param string method
- * @access public
- */
- function showTestResult($debug = 0, $html = 0) {
- // debug output
- if ($debug) $this->show = 1;
- if ($debug) {
- echo str_repeat("-",50).$html?"<br>\n":"\n";
- }
-
- echo "testing $this->test_name : ";
-
- if ($debug) {
- print "method params: ";
- print_r($this->params);
- print "\n";
- }
-
- $ok = $this->result['success'];
- if ($ok) {
- if ($html) {
- print "<font color=\"#00cc00\">SUCCESS</font>\n";
- } else {
- print "SUCCESS\n";
- }
- } else {
- $fault = $this->result['fault'];
- if ($fault) {
- $res = $fault->faultcode;
- $pos = strpos($res,':');
- if ($pos !== false) {
- $res = substr($res,$pos+1);
- }
- if ($html) {
- print "<font color=\"#ff0000\">FAILED: [$res] {$fault->faultstring}</font>\n";
- } else {
- print "FAILED: [$res] {$fault->faultstring}\n";
- }
- } else {
- if ($html) {
- print "<font color=\"#ff0000\">FAILED: ".$this->result['result']."</font>\n";
- } else {
- print "FAILED: ".$this->result['result']."\n";
- }
- }
- }
- if ($debug) {
- if ($html) {
- echo "<pre>\n".htmlentities($this->result['wire'])."</pre>\n";
- } else {
- echo "\n".htmlentities($this->result['wire'])."\n";
- }
- }
- }
-}
-
-# XXX I know this isn't quite right, need to deal with this better
-function make_2d($x, $y)
-{
- for ($_x = 0; $_x < $x; $_x++) {
- for ($_y = 0; $_y < $y; $_y++) {
- $a[$_x][$_y] = "x{$_x}y{$_y}";
- }
- }
- return $a;
-}
-
-function soap_value($name, $value, $type, $type_name=NULL, $type_ns=NULL) {
- return new SoapParam(new SoapVar($value,$type,$type_name,$type_ns),$name);
-}
-
-class SOAPStruct {
- var $varString;
- var $varInt;
- var $varFloat;
- function SOAPStruct($s, $i, $f) {
- $this->varString = $s;
- $this->varInt = $i;
- $this->varFloat = $f;
- }
-}
-
-//***********************************************************
-// Base echoString
-
-$soap_tests['base'][] = new SOAP_Test('echoString', array('inputString' => 'hello world!'));
-$soap_tests['base'][] = new SOAP_Test('echoString', array('inputString' => soap_value('inputString','hello world',XSD_STRING)));
-$soap_tests['base'][] = new SOAP_Test('echoString(empty)', array('inputString' => ''));
-$soap_tests['base'][] = new SOAP_Test('echoString(empty)', array('inputString' => soap_value('inputString','',XSD_STRING)));
-$soap_tests['base'][] = new SOAP_Test('echoString(null)', array('inputString' => NULL));
-$soap_tests['base'][] = new SOAP_Test('echoString(null)', array('inputString' => soap_value('inputString',NULL,XSD_STRING)));
-//$soap_tests['base'][] = new SOAP_Test('echoString(entities)', array('inputString' => ">,<,&,\",',0:\x00",1:\x01,2:\x02,3:\x03,4:\x04,5:\x05,6:\x06,7:\x07,8:\x08,9:\x09,10:\x0a,11:\x0b,12:\x0c,13:\x0d,14:\x0e,15:\x0f,16:\x10,17:\x11,18:\x12,19:\x13,20:\x14,21:\x15,22:\x16,23:\x17,24:\x18,25:\x19,26:\x1a,27:\x1b,28:\x1c,29:\x1d,30:\x1e,31:\x1f"));
-//$soap_tests['base'][] = new SOAP_Test('echoString(entities)', array('inputString' => soap_value('inputString',">,<,&,\",',0:\x00",1:\x01,2:\x02,3:\x03,4:\x04,5:\x05,6:\x06,7:\x07,8:\x08,9:\x09,10:\x0a,11:\x0b,12:\x0c,13:\x0d,14:\x0e,15:\x0f,16:\x10,17:\x11,18:\x12,19:\x13,20:\x14,21:\x15,22:\x16,23:\x17,24:\x18,25:\x19,26:\x1a,27:\x1b,28:\x1c,29:\x1d,30:\x1e,31:\x1f",XSD_STRING)));
-$soap_tests['base'][] = new SOAP_Test('echoString(entities)', array('inputString' => ">,<,&,\",',\\,\n"));
-$soap_tests['base'][] = new SOAP_Test('echoString(entities)', array('inputString' => soap_value('inputString',">,<,&,\",',\\,\n",XSD_STRING)));
-$test = new SOAP_Test('echoString(utf-8)', array('inputString' => utf8_encode('ỗÈéóÒ₧⅜ỗỸ')));
-$test->encoding = 'UTF-8';
-$soap_tests['base'][] = $test;
-$test = new SOAP_Test('echoString(utf-8)', array('inputString' => soap_value('inputString',utf8_encode('ỗÈéóÒ₧⅜ỗỸ'),XSD_STRING)));
-$test->encoding = 'UTF-8';
-$soap_tests['base'][] = $test;
-
-//***********************************************************
-// Base echoStringArray
-
-$soap_tests['base'][] = new SOAP_Test('echoStringArray',
- array('inputStringArray' => array('good','bad')));
-$soap_tests['base'][] = new SOAP_Test('echoStringArray',
- array('inputStringArray' =>
- soap_value('inputStringArray',array('good','bad'),SOAP_ENC_ARRAY,"ArrayOfstring","http://soapinterop.org/xsd")));
-
-$soap_tests['base'][] = new SOAP_Test('echoStringArray(one)',
- array('inputStringArray' => array('good')));
-$soap_tests['base'][] = new SOAP_Test('echoStringArray(one)',
- array('inputStringArray' =>
- soap_value('inputStringArray',array('good'),SOAP_ENC_ARRAY,"ArrayOfstring","http://soapinterop.org/xsd")));
-
-// empty array test
-$soap_tests['base'][] = new SOAP_Test('echoStringArray(empty)', array('inputStringArray' => array()));
-$soap_tests['base'][] = new SOAP_Test('echoStringArray(empty)', array('inputStringArray' => soap_value('inputStringArray',array(),SOAP_ENC_ARRAY,"ArrayOfstring","http://soapinterop.org/xsd")));
-
-# XXX NULL Arrays not supported
-// null array test
-$soap_tests['base'][] = new SOAP_Test('echoStringArray(null)', array('inputStringArray' => NULL));
-$soap_tests['base'][] = new SOAP_Test('echoStringArray(null)', array('inputStringArray' => soap_value('inputStringArray',NULL,SOAP_ENC_ARRAY,"ArrayOfstring","http://soapinterop.org/xsd")));
-
-//***********************************************************
-// Base echoInteger
-$x = new SOAP_Test('echoInteger', array('inputInteger' => 34345));
-$soap_tests['base'][] = new SOAP_Test('echoInteger', array('inputInteger' => 34345));
-$soap_tests['base'][] = new SOAP_Test('echoInteger', array('inputInteger' => soap_value('inputInteger',12345,XSD_INT)));
-
-//***********************************************************
-// Base echoIntegerArray
-
-$soap_tests['base'][] = new SOAP_Test('echoIntegerArray', array('inputIntegerArray' => array(1,234324324,2)));
-$soap_tests['base'][] = new SOAP_Test('echoIntegerArray',
- array('inputIntegerArray' =>
- soap_value('inputIntegerArray',
- array(new SoapVar(12345,XSD_INT),new SoapVar(654321,XSD_INT)),
- SOAP_ENC_ARRAY,"ArrayOfint","http://soapinterop.org/xsd")));
-
-//***********************************************************
-// Base echoFloat
-
-$soap_tests['base'][] = new SOAP_Test('echoFloat', array('inputFloat' => 342.23));
-$soap_tests['base'][] = new SOAP_Test('echoFloat', array('inputFloat' => soap_value('inputFloat',123.45,XSD_FLOAT)));
-
-//***********************************************************
-// Base echoFloatArray
-
-$soap_tests['base'][] = new SOAP_Test('echoFloatArray', array('inputFloatArray' => array(1.3223,34.2,325.325)));
-$soap_tests['base'][] = new SOAP_Test('echoFloatArray',
- array('inputFloatArray' =>
- soap_value('inputFloatArray',
- array(new SoapVar(123.45,XSD_FLOAT),new SoapVar(654.321,XSD_FLOAT)),
- SOAP_ENC_ARRAY,"ArrayOffloat","http://soapinterop.org/xsd")));
-//***********************************************************
-// Base echoStruct
-
-$soapstruct = new SOAPStruct('arg',34,325.325);
-# XXX no way to set a namespace!!!
-$soapsoapstruct = soap_value('inputStruct',$soapstruct,SOAP_ENC_OBJECT,"SOAPStruct","http://soapinterop.org/xsd");
-$soap_tests['base'][] = new SOAP_Test('echoStruct', array('inputStruct' =>$soapstruct));
-$soap_tests['base'][] = new SOAP_Test('echoStruct', array('inputStruct' =>$soapsoapstruct));
-
-//***********************************************************
-// Base echoStructArray
-
-$soap_tests['base'][] = new SOAP_Test('echoStructArray', array('inputStructArray' => array(
- $soapstruct,$soapstruct,$soapstruct)));
-$soap_tests['base'][] = new SOAP_Test('echoStructArray', array('inputStructArray' =>
- soap_value('inputStructArray',array(
- new SoapVar($soapstruct,SOAP_ENC_OBJECT,"SOAPStruct","http://soapinterop.org/xsd"),
- new SoapVar($soapstruct,SOAP_ENC_OBJECT,"SOAPStruct","http://soapinterop.org/xsd"),
- new SoapVar($soapstruct,SOAP_ENC_OBJECT,"SOAPStruct","http://soapinterop.org/xsd")),
- SOAP_ENC_ARRAY,"ArrayOfSOAPStruct","http://soapinterop.org/xsd")));
-
-
-//***********************************************************
-// Base echoVoid
-
-$soap_tests['base'][] = new SOAP_Test('echoVoid', NULL);
-$test = new SOAP_Test('echoVoid', NULL);
-$test->type = 'soapval';
-$soap_tests['base'][] = $test;
-
-//***********************************************************
-// Base echoBase64
-
-$soap_tests['base'][] = new SOAP_Test('echoBase64', array('inputBase64' => 'TmVicmFza2E='));
-$soap_tests['base'][] = new SOAP_Test('echoBase64', array('inputBase64' =>
- soap_value('inputBase64','TmVicmFza2E=',XSD_BASE64BINARY)));
-
-//***********************************************************
-// Base echoHexBinary
-
-$soap_tests['base'][] = new SOAP_Test('echoHexBinary', array('inputHexBinary' => '736F61707834'),'736F61707834','hex_compare');
-$soap_tests['base'][] = new SOAP_Test('echoHexBinary', array('inputHexBinary' =>
- soap_value('inputHexBinary','736F61707834',XSD_HEXBINARY)),'736F61707834','hex_compare');
-
-//***********************************************************
-// Base echoDecimal
-
-# XXX test fails because php-soap incorrectly sets decimal to long rather than float
-$soap_tests['base'][] = new SOAP_Test('echoDecimal', array('inputDecimal' => '12345.67890'));
-$soap_tests['base'][] = new SOAP_Test('echoDecimal', array('inputDecimal' =>
- soap_value('inputDecimal','12345.67890',XSD_DECIMAL)));
-
-//***********************************************************
-// Base echoDate
-
-# php-soap doesn't handle datetime types properly yet
-$soap_tests['base'][] = new SOAP_Test('echoDate', array('inputDate' => '2001-05-24T17:31:41Z'), null, 'date_compare');
-$soap_tests['base'][] = new SOAP_Test('echoDate', array('inputDate' =>
- soap_value('inputDate','2001-05-24T17:31:41Z',XSD_DATETIME)), null, 'date_compare');
-
-//***********************************************************
-// Base echoBoolean
-
-# php-soap sends boolean as zero or one, which is ok, but to be explicit, send true or false.
-$soap_tests['base'][] = new SOAP_Test('echoBoolean(true)', array('inputBoolean' => TRUE));
-$soap_tests['base'][] = new SOAP_Test('echoBoolean(true)', array('inputBoolean' =>
- soap_value('inputBoolean',TRUE,XSD_BOOLEAN)));
-$soap_tests['base'][] = new SOAP_Test('echoBoolean(false)', array('inputBoolean' => FALSE));
-$soap_tests['base'][] = new SOAP_Test('echoBoolean(false)', array('inputBoolean' =>
- soap_value('inputBoolean',FALSE,XSD_BOOLEAN)));
-$soap_tests['base'][] = new SOAP_Test('echoBoolean(1)', array('inputBoolean' => 1),true);
-$soap_tests['base'][] = new SOAP_Test('echoBoolean(1)', array('inputBoolean' =>
- soap_value('inputBoolean',1,XSD_BOOLEAN)),true);
-$soap_tests['base'][] = new SOAP_Test('echoBoolean(0)', array('inputBoolean' => 0),false);
-$soap_tests['base'][] = new SOAP_Test('echoBoolean(0)', array('inputBoolean' =>
- soap_value('inputBoolean',0,XSD_BOOLEAN)),false);
-
-
-
-//***********************************************************
-// GROUP B
-
-
-//***********************************************************
-// GroupB echoStructAsSimpleTypes
-
-$expect = array(
- 'outputString'=>'arg',
- 'outputInteger'=>34,
- 'outputFloat'=>325.325
- );
-$soap_tests['GroupB'][] = new SOAP_Test('echoStructAsSimpleTypes',
- array('inputStruct' => (object)array(
- 'varString'=>'arg',
- 'varInt'=>34,
- 'varFloat'=>325.325
- )), $expect);
-$soap_tests['GroupB'][] = new SOAP_Test('echoStructAsSimpleTypes',
- array('inputStruct' =>
- soap_value('inputStruct',
- (object)array('varString' => 'arg',
- 'varInt' => 34,
- 'varFloat' => 325.325
- ), SOAP_ENC_OBJECT, "SOAPStruct","http://soapinterop.org/xsd")), $expect);
-
-//***********************************************************
-// GroupB echoSimpleTypesAsStruct
-
-$expect =
- (object)array(
- 'varString'=>'arg',
- 'varInt'=>34,
- 'varFloat'=>325.325
- );
-$soap_tests['GroupB'][] = new SOAP_Test('echoSimpleTypesAsStruct',
- array(
- 'inputString'=>'arg',
- 'inputInteger'=>34,
- 'inputFloat'=>325.325
- ), $expect);
-$soap_tests['GroupB'][] = new SOAP_Test('echoSimpleTypesAsStruct',
- array(
- soap_value('inputString','arg', XSD_STRING),
- soap_value('inputInteger',34, XSD_INT),
- soap_value('inputFloat',325.325, XSD_FLOAT)
- ), $expect);
-
-//***********************************************************
-// GroupB echo2DStringArray
-
-$soap_tests['GroupB'][] = new SOAP_Test('echo2DStringArray',
- array('input2DStringArray' => make_2d(3,3)));
-
-$multidimarray =
- soap_value('input2DStringArray',
- array(
- array('row0col0', 'row0col1', 'row0col2'),
- array('row1col0', 'row1col1', 'row1col2')
- ), SOAP_ENC_ARRAY
- );
-//$multidimarray->options['flatten'] = TRUE;
-$soap_tests['GroupB'][] = new SOAP_Test('echo2DStringArray',
- array('input2DStringArray' => $multidimarray));
-
-//***********************************************************
-// GroupB echoNestedStruct
-
-$strstr = (object)array(
- 'varString'=>'arg',
- 'varInt'=>34,
- 'varFloat'=>325.325,
- 'varStruct' => (object)array(
- 'varString'=>'arg',
- 'varInt'=>34,
- 'varFloat'=>325.325
- ));
-$soap_tests['GroupB'][] = new SOAP_Test('echoNestedStruct',
- array('inputStruct' => $strstr));
-$soap_tests['GroupB'][] = new SOAP_Test('echoNestedStruct',
- array('inputStruct' =>
- soap_value('inputStruct',
- (object)array(
- 'varString'=>'arg',
- 'varInt'=>34,
- 'varFloat'=>325.325,
- 'varStruct' => new SoapVar((object)array(
- 'varString'=>'arg',
- 'varInt'=>34,
- 'varFloat'=>325.325
- ), SOAP_ENC_OBJECT, "SOAPStruct","http://soapinterop.org/xsd")
- ), SOAP_ENC_OBJECT, "SOAPStructStruct","http://soapinterop.org/xsd"
- )),$strstr);
-
-//***********************************************************
-// GroupB echoNestedArray
-
-$arrstr = (object)array(
- 'varString'=>'arg',
- 'varInt'=>34,
- 'varFloat'=>325.325,
- 'varArray' => array('red','blue','green')
- );
-$soap_tests['GroupB'][] = new SOAP_Test('echoNestedArray',
- array('inputStruct' => $arrstr));
-$soap_tests['GroupB'][] = new SOAP_Test('echoNestedArray',
- array('inputStruct' =>
- soap_value('inputStruct',
- (object)array('varString' => 'arg',
- 'varInt' => 34,
- 'varFloat' => 325.325,
- 'varArray' =>
- new SoapVar(array("red", "blue", "green"), SOAP_ENC_ARRAY, "ArrayOfstring","http://soapinterop.org/xsd")
- ), SOAP_ENC_OBJECT, "SOAPArrayStruct","http://soapinterop.org/xsd"
- )),$arrstr);
-
-
-//***********************************************************
-// GROUP C header tests
-
-//***********************************************************
-// echoMeStringRequest
-
-// echoMeStringRequest with endpoint as header destination, doesn't have to understand
-$test = new SOAP_Test('echoVoid(echoMeStringRequest mustUnderstand=0 actor=next)', NULL);
-$test->headers[] = new SoapHeader('http://soapinterop.org/echoheader/','echoMeStringRequest', 'hello world', 0, SOAP_ACTOR_NEXT);
-$test->headers_expect = array('echoMeStringResponse'=>'hello world');
-$soap_tests['GroupC'][] = $test;
-
-$test = new SOAP_Test('echoVoid(echoMeStringRequest mustUnderstand=0 actor=next)', NULL);
-$test->type = 'soapval';
-$test->headers[] = new SoapHeader('http://soapinterop.org/echoheader/','echoMeStringRequest', new SoapVar('hello world',XSD_STRING), 0, SOAP_ACTOR_NEXT);
-$test->headers_expect = array('echoMeStringResponse'=>'hello world');
-$soap_tests['GroupC'][] = $test;
-
-// echoMeStringRequest with endpoint as header destination, must understand
-$test = new SOAP_Test('echoVoid(echoMeStringRequest mustUnderstand=1 actor=next)', NULL);
-$test->headers[] = new SoapHeader('http://soapinterop.org/echoheader/','echoMeStringRequest', 'hello world', 1, SOAP_ACTOR_NEXT);
-$test->headers_expect = array('echoMeStringResponse'=>'hello world');
-$soap_tests['GroupC'][] = $test;
-
-$test = new SOAP_Test('echoVoid(echoMeStringRequest mustUnderstand=1 actor=next)', NULL);
-$test->type = 'soapval';
-$test->headers[] = new SoapHeader('http://soapinterop.org/echoheader/','echoMeStringRequest', new SoapVar('hello world',XSD_STRING), 1, SOAP_ACTOR_NEXT);
-$test->headers_expect = array('echoMeStringResponse'=>'hello world');
-$soap_tests['GroupC'][] = $test;
-
-// echoMeStringRequest with endpoint NOT header destination, doesn't have to understand
-$test = new SOAP_Test('echoVoid(echoMeStringRequest mustUnderstand=0 actor=other)', NULL);
-$test->headers[] = new SoapHeader('http://soapinterop.org/echoheader/','echoMeStringRequest', 'hello world', 0, SOAP_TEST_ACTOR_OTHER);
-$test->headers_expect = array();
-$soap_tests['GroupC'][] = $test;
-
-$test = new SOAP_Test('echoVoid(echoMeStringRequest mustUnderstand=0 actor=other)', NULL);
-$test->type = 'soapval';
-$test->headers[] = new SoapHeader('http://soapinterop.org/echoheader/','echoMeStringRequest', new SoapVar('hello world',XSD_STRING), 0, SOAP_TEST_ACTOR_OTHER);
-$test->headers_expect = array();
-$soap_tests['GroupC'][] = $test;
-
-// echoMeStringRequest with endpoint NOT header destination, must understand
-$test = new SOAP_Test('echoVoid(echoMeStringRequest mustUnderstand=1 actor=other)', NULL);
-$test->headers[] = new SoapHeader('http://soapinterop.org/echoheader/','echoMeStringRequest', 'hello world', 1, SOAP_TEST_ACTOR_OTHER);
-$test->headers_expect = array();
-$soap_tests['GroupC'][] = $test;
-
-$test = new SOAP_Test('echoVoid(echoMeStringRequest mustUnderstand=1 actor=other)', NULL);
-$test->type = 'soapval';
-$test->headers[] = new SoapHeader('http://soapinterop.org/echoheader/','echoMeStringRequest', new SoapVar('hello world', XSD_STRING), 1, SOAP_TEST_ACTOR_OTHER);
-$test->headers_expect = array();
-$soap_tests['GroupC'][] = $test;
-
-// echoMeStringRequest with endpoint header destination, must understand,
-// invalid namespace, should recieve a fault
-$test = new SOAP_Test('echoVoid(echoMeStringRequest invalid namespace)', NULL);
-$test->headers[] = new SoapHeader('http://unknown.org/echoheader/','echoMeStringRequest', 'hello world', 1, SOAP_ACTOR_NEXT);
-$test->headers_expect = array();
-$test->expect_fault = TRUE;
-$soap_tests['GroupC'][] = $test;
-
-$test = new SOAP_Test('echoVoid(echoMeStringRequest invalid namespace)', NULL);
-$test->type = 'soapval';
-$test->headers[] = new SoapHeader('http://unknown.org/echoheader/','echoMeStringRequest', new SoapVar('hello world', XSD_STRING), 1, SOAP_ACTOR_NEXT);
-$test->headers_expect = array();
-$test->expect_fault = TRUE;
-$soap_tests['GroupC'][] = $test;
-
-//***********************************************************
-// echoMeStructRequest
-
-// echoMeStructRequest with endpoint as header destination, doesn't have to understand
-$test = new SOAP_Test('echoVoid(echoMeStructRequest mustUnderstand=0 actor=next)', NULL);
-$test->headers[] = new SoapHeader('http://soapinterop.org/echoheader/','echoMeStructRequest',
- new SOAPStruct('arg',34,325.325), 0, SOAP_ACTOR_NEXT);
-$test->headers_expect =
- array('echoMeStructResponse'=> (object)array('varString'=>'arg','varInt'=>34,'varFloat'=>325.325));
-$soap_tests['GroupC'][] = $test;
-
-$test = new SOAP_Test('echoVoid(echoMeStructRequest mustUnderstand=0 actor=next)', NULL);
-$test->type = 'soapval';
-$test->headers[] = new SoapHeader('http://soapinterop.org/echoheader/','echoMeStructRequest',
- new SoapVar(new SOAPStruct('arg',34,325.325),SOAP_ENC_OBJECT,"SOAPStruct","http://soapinterop.org/xsd"),
- 0, SOAP_ACTOR_NEXT);
-$test->headers_expect =
- array('echoMeStructResponse'=> (object)array('varString'=>'arg','varInt'=>34,'varFloat'=>325.325));
-$soap_tests['GroupC'][] = $test;
-
-// echoMeStructRequest with endpoint as header destination, must understand
-$test = new SOAP_Test('echoVoid(echoMeStructRequest mustUnderstand=1 actor=next)', NULL);
-$test->headers[] = new SoapHeader('http://soapinterop.org/echoheader/','echoMeStructRequest',
- new SOAPStruct('arg',34,325.325), 1, SOAP_ACTOR_NEXT);
-$test->headers_expect =
- array('echoMeStructResponse'=> (object)array('varString'=>'arg','varInt'=>34,'varFloat'=>325.325));
-$soap_tests['GroupC'][] = $test;
-
-$test = new SOAP_Test('echoVoid(echoMeStructRequest mustUnderstand=1 actor=next)', NULL);
-$test->type = 'soapval';
-$test->headers[] = new SoapHeader('http://soapinterop.org/echoheader/','echoMeStructRequest',
- new SoapVar(new SOAPStruct('arg',34,325.325),SOAP_ENC_OBJECT,"SOAPStruct","http://soapinterop.org/xsd"),
- 1, SOAP_ACTOR_NEXT);
-$test->headers_expect =
- array('echoMeStructResponse'=> (object)array('varString'=>'arg','varInt'=>34,'varFloat'=>325.325));
-$soap_tests['GroupC'][] = $test;
-
-// echoMeStructRequest with endpoint NOT header destination, doesn't have to understand
-$test = new SOAP_Test('echoVoid(echoMeStructRequest mustUnderstand=0 actor=other)', NULL);
-$test->headers[] = new SoapHeader('http://soapinterop.org/echoheader/','echoMeStructRequest',
- new SOAPStruct('arg',34,325.325), 0, SOAP_TEST_ACTOR_OTHER);
-$test->headers_expect = array();
-$soap_tests['GroupC'][] = $test;
-
-$test = new SOAP_Test('echoVoid(echoMeStructRequest mustUnderstand=0 actor=other)', NULL);
-$test->type = 'soapval';
-$test->headers[] = new SoapHeader('http://soapinterop.org/echoheader/','echoMeStructRequest',
- new SoapVar(new SOAPStruct('arg',34,325.325),SOAP_ENC_OBJECT,"SOAPStruct","http://soapinterop.org/xsd"),
- 0, SOAP_TEST_ACTOR_OTHER);
-$test->headers_expect = array();
-$soap_tests['GroupC'][] = $test;
-
-// echoMeStructRequest with endpoint NOT header destination, must understand
-$test = new SOAP_Test('echoVoid(echoMeStructRequest mustUnderstand=1 actor=other)', NULL);
-$test->headers[] = new SoapHeader('http://soapinterop.org/echoheader/','echoMeStructRequest',
- new SOAPStruct('arg',34,325.325), 1, SOAP_TEST_ACTOR_OTHER);
-$test->headers_expect = array();
-$soap_tests['GroupC'][] = $test;
-
-$test = new SOAP_Test('echoVoid(echoMeStructRequest mustUnderstand=1 actor=other)', NULL);
-$test->type = 'soapval';
-$test->headers[] = new SoapHeader('http://soapinterop.org/echoheader/','echoMeStructRequest',
- new SoapVar(new SOAPStruct('arg',34,325.325),SOAP_ENC_OBJECT,"SOAPStruct","http://soapinterop.org/xsd"),
- 1, SOAP_TEST_ACTOR_OTHER);
-$test->headers_expect = array();
-$soap_tests['GroupC'][] = $test;
-
-//***********************************************************
-// echoMeUnknown
-
-// echoMeUnknown with endpoint as header destination, doesn't have to understand
-$test = new SOAP_Test('echoVoid(echoMeUnknown mustUnderstand=0 actor=next)', NULL);
-$test->headers[] = new SoapHeader('http://soapinterop.org/echoheader/','echoMeUnknown', 'nobody understands me!',0,SOAP_ACTOR_NEXT);
-$test->headers_expect = array();
-$soap_tests['GroupC'][] = $test;
-
-$test = new SOAP_Test('echoVoid(echoMeUnknown mustUnderstand=0 actor=next)', NULL);
-$test->type = 'soapval';
-$test->headers[] = new SoapHeader('http://soapinterop.org/echoheader/','echoMeUnknown', new SoapVar('nobody understands me!',XSD_STRING),0,SOAP_ACTOR_NEXT);
-$test->headers_expect = array();
-$soap_tests['GroupC'][] = $test;
-
-// echoMeUnknown with endpoint as header destination, must understand
-$test = new SOAP_Test('echoVoid(echoMeUnknown mustUnderstand=1 actor=next)', NULL);
-$test->headers[] = new SoapHeader('http://soapinterop.org/echoheader/','echoMeUnknown', 'nobody understands me!',1,SOAP_ACTOR_NEXT);
-$test->headers_expect = array();
-$test->expect_fault = TRUE;
-$soap_tests['GroupC'][] = $test;
-
-$test = new SOAP_Test('echoVoid(echoMeUnknown mustUnderstand=1 actor=next)', NULL);
-$test->type = 'soapval';
-$test->headers[] = new SoapHeader('http://soapinterop.org/echoheader/','echoMeUnknown', new SoapVar('nobody understands me!',XSD_STRING),1,SOAP_ACTOR_NEXT);
-$test->headers_expect = array();
-$test->expect_fault = TRUE;
-$soap_tests['GroupC'][] = $test;
-
-// echoMeUnknown with endpoint NOT header destination, doesn't have to understand
-$test = new SOAP_Test('echoVoid(echoMeUnknown mustUnderstand=0 actor=other)', NULL);
-$test->headers[] = new SoapHeader('http://soapinterop.org/echoheader/','echoMeUnknown', 'nobody understands me!',0,SOAP_TEST_ACTOR_OTHER);
-$test->headers_expect = array();
-$soap_tests['GroupC'][] = $test;
-
-$test = new SOAP_Test('echoVoid(echoMeUnknown mustUnderstand=0 actor=other)', NULL);
-$test->type = 'soapval';
-$test->headers[] = new SoapHeader('http://soapinterop.org/echoheader/','echoMeUnknown', new SoapVar('nobody understands me!',XSD_STRING),0,SOAP_TEST_ACTOR_OTHER);
-$test->headers_expect = array();
-$soap_tests['GroupC'][] = $test;
-
-// echoMeUnknown with endpoint NOT header destination, must understand
-$test = new SOAP_Test('echoVoid(echoMeUnknown mustUnderstand=1 actor=other)', NULL);
-$test->headers[] = new SoapHeader('http://soapinterop.org/echoheader/','echoMeUnknown', 'nobody understands me!',1,SOAP_TEST_ACTOR_OTHER);
-$test->headers_expect = array();
-$soap_tests['GroupC'][] = $test;
-
-$test = new SOAP_Test('echoVoid(echoMeUnknown mustUnderstand=1 actor=other)', NULL);
-$test->type = 'soapval';
-$test->headers[] = new SoapHeader('http://soapinterop.org/echoheader/','echoMeUnknown', new SoapVar('nobody understands me!',XSD_STRING),1,SOAP_TEST_ACTOR_OTHER);
-$test->headers_expect = array();
-$soap_tests['GroupC'][] = $test;
-?>
diff --git a/ext/soap/interop/client_round2_results.php b/ext/soap/interop/client_round2_results.php
deleted file mode 100644
index 52e89c3ded..0000000000
--- a/ext/soap/interop/client_round2_results.php
+++ /dev/null
@@ -1,75 +0,0 @@
-<?php
-// NOTE: do not run this directly under a web server, as it will take a very long
-// time to execute. Run from a command line or something, and redirect output
-// to an html file.
-//
-// +----------------------------------------------------------------------+
-// | PHP Version 4 |
-// +----------------------------------------------------------------------+
-// | Copyright (c) 1997-2003 The PHP Group |
-// +----------------------------------------------------------------------+
-// | This source file is subject to version 2.02 of the PHP license, |
-// | that is bundled with this package in the file LICENSE, and is |
-// | available at through the world-wide-web at |
-// | http://www.php.net/license/2_02.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. |
-// +----------------------------------------------------------------------+
-// | Authors: Shane Caraveo <Shane@Caraveo.com> |
-// +----------------------------------------------------------------------+
-//
-// $Id$
-//
-require_once 'client_round2_interop.php';
-?>
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-
-<html>
-<head>
-<style>
-TD { background-color: Red; }
-TD.BLANK { background-color: White; }
-TD.OK { background-color: Lime; }
-TD.RESULT { background-color: Green; }
-TD.untested { background-color: White; }
-TD.CONNECT { background-color: Yellow; }
-TD.TRANSPORT { background-color: Yellow; }
-TD.WSDL { background-color: Yellow; }
-TD.WSDLCACHE { background-color: Yellow; }
-TD.WSDLPARSER { background-color: Yellow; }
-TD.HTTP { background-color: Yellow; }
-TD.SMTP { background-color: Yellow; }
-</style>
- <title>PHP SOAP Client Interop Test Results</title>
-</head>
-
-<body bgcolor="White" text="Black">
-<h2 align="center">PHP SOAP Client Interop Test Results: Round2</h2>
-
-<a href="index.php">Back to Interop Index</a><br>
-<p>&nbsp;</p>
-
-<?php
-$iop = new Interop_Client();
-
-if ($_GET['detail'] == 1) $iop->showFaults = 1;
-
-if ($_GET['wire']) {
- $iop->showWire($_GET['wire']);
-} else {
- $iop->getEndpoints();
- $iop->getResults();
-
- if ($_GET['test']) {
- $iop->currentTest = $_GET['test'];
- $iop->useWSDL = $_GET['wsdl']?$_GET['wsdl']:0;
- $iop->paramType = $_GET['type']?$_GET['type']:'php';
- $iop->outputTable();
- } else {
- $iop->outputTables();
- }
-}
-?>
-</body>
-</html>
diff --git a/ext/soap/interop/client_round2_run.php b/ext/soap/interop/client_round2_run.php
deleted file mode 100644
index 1a1f9a8ea4..0000000000
--- a/ext/soap/interop/client_round2_run.php
+++ /dev/null
@@ -1,53 +0,0 @@
-<?php
-// +----------------------------------------------------------------------+
-// | PHP Version 4 |
-// +----------------------------------------------------------------------+
-// | Copyright (c) 1997-2003 The PHP Group |
-// +----------------------------------------------------------------------+
-// | This source file is subject to version 2.02 of the PHP license, |
-// | that is bundled with this package in the file LICENSE, and is |
-// | available at through the world-wide-web at |
-// | http://www.php.net/license/2_02.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. |
-// +----------------------------------------------------------------------+
-// | Authors: Shane Caraveo <Shane@Caraveo.com> |
-// +----------------------------------------------------------------------+
-//
-// $Id$
-//
-
-set_time_limit(0);
-require_once 'client_round2_interop.php';
-
-$iop = new Interop_Client();
-$iop->html = 0;
-
-// force a fetch of endpoints, this happens irregardless if no endpoints in database
-$iop->fetchEndpoints();
-
-// set some options
-$iop->currentTest = 'GroupC'; // see $tests above
-$iop->paramType = 'php'; // 'php' or 'soapval'
-$iop->useWSDL = 1; // 1= do wsdl tests
-$iop->numServers = 0; // 0 = all
-//$iop->specificEndpoint = 'PHP ext/soap'; // test only this endpoint
-//$iop->testMethod = 'echoString'; // test only this method
-
-// endpoints to skip
-//$iop->skipEndpointList = array('Apache Axis','IONA XMLBus','IONA XMLBus (CORBA)','MS SOAP ToolKit 2.0','MS SOAP ToolKit 3.0','Spheon JSOAP','SQLData SOAP Server','WASP Advanced 3.0');
-$iop->startAt='';
-$iop->nosave = 0; // 1= disable saving results to database
-// debug output
-$iop->show = 1;
-$iop->debug = 0;
-$iop->showFaults = 0; // used in result table output
-
-$iop->doTest(); // run a single set of tests using above options
-#$iop->doGroupTests(); // run a group of tests set in $currentTest
-#$iop->doTests(); // run all tests, ignore above options
-#$iop->outputTables();
-echo "done\n";
-
-?>
diff --git a/ext/soap/interop/config.php.dist b/ext/soap/interop/config.php.dist
deleted file mode 100644
index afdeaf9f6c..0000000000
--- a/ext/soap/interop/config.php.dist
+++ /dev/null
@@ -1,5 +0,0 @@
-<?php
-// configuration items
-$interopConfig['DSN'] = 'mysql://root@localhost/soapinterop';
-$interopConfig['baseURL'] = 'http://localhost/soap/interop';
-?> \ No newline at end of file
diff --git a/ext/soap/interop/database_round2.sql b/ext/soap/interop/database_round2.sql
deleted file mode 100644
index 6834b0eeae..0000000000
--- a/ext/soap/interop/database_round2.sql
+++ /dev/null
@@ -1,44 +0,0 @@
-# phpMyAdmin MySQL-Dump
-# version 2.2.5
-# http://phpwizard.net/phpMyAdmin/
-# http://phpmyadmin.sourceforge.net/ (download page)
-#
-# Host: localhost
-# Generation Time: Apr 08, 2002 at 08:32 PM
-# Server version: 3.23.49
-# PHP Version: 4.1.1
-# Database : `interop`
-# --------------------------------------------------------
-
-#
-# Table structure for table `endpoints`
-#
-
-CREATE TABLE endpoints (
- id int(11) NOT NULL auto_increment,
- endpointName varchar(50) NOT NULL default '',
- endpointURL varchar(255) NOT NULL default '',
- wsdlURL varchar(255) NOT NULL default '',
- class varchar(20) NOT NULL default '',
- status int(11) NOT NULL default '1',
- PRIMARY KEY (id)
-) TYPE=MyISAM;
-# --------------------------------------------------------
-
-#
-# Table structure for table `results`
-#
-
-CREATE TABLE results (
- id int(11) NOT NULL auto_increment,
- endpoint int(11) NOT NULL default '0',
- stamp int(11) NOT NULL default '0',
- class varchar(10) NOT NULL default '',
- type varchar(10) default NULL,
- wsdl int(11) NOT NULL default '0',
- function varchar(255) NOT NULL default '',
- result varchar(25) NOT NULL default '',
- error text,
- wire text NOT NULL,
- PRIMARY KEY (id)
-) TYPE=MyISAM;
diff --git a/ext/soap/interop/echoheadersvc.wsdl.php b/ext/soap/interop/echoheadersvc.wsdl.php
deleted file mode 100644
index e7070242a3..0000000000
--- a/ext/soap/interop/echoheadersvc.wsdl.php
+++ /dev/null
@@ -1,398 +0,0 @@
-<?php
-header("Content-Type: text/xml");
-echo '<?xml version="1.0"?>';
-echo "\n";
-?>
-<definitions name="InteropTest" targetNamespace="http://soapinterop.org/" xmlns="http://schemas.xmlsoap.org/wsdl/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:tns="http://soapinterop.org/" xmlns:s="http://soapinterop.org/xsd" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">
-
- <types>
- <schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="http://soapinterop.org/xsd">
-
- <import namespace="http://schemas.xmlsoap.org/soap/encoding/" />
-
- <complexType name="ArrayOfstring">
- <complexContent>
- <restriction base="SOAP-ENC:Array">
- <attribute ref="SOAP-ENC:arrayType" wsdl:arrayType="string[]"/>
- </restriction>
- </complexContent>
- </complexType>
- <complexType name="ArrayOfint">
- <complexContent>
- <restriction base="SOAP-ENC:Array">
- <attribute ref="SOAP-ENC:arrayType" wsdl:arrayType="int[]"/>
- </restriction>
- </complexContent>
- </complexType>
- <complexType name="ArrayOffloat">
- <complexContent>
- <restriction base="SOAP-ENC:Array">
- <attribute ref="SOAP-ENC:arrayType" wsdl:arrayType="float[]"/>
- </restriction>
- </complexContent>
- </complexType>
- <complexType name="ArrayOfSOAPStruct">
- <complexContent>
- <restriction base="SOAP-ENC:Array">
- <attribute ref="SOAP-ENC:arrayType" wsdl:arrayType="s:SOAPStruct[]"/>
- </restriction>
- </complexContent>
- </complexType>
- <complexType name="SOAPStruct">
- <all>
- <element name="varString" type="string" nillable="true"/>
- <element name="varInt" type="int" nillable="true"/>
- <element name="varFloat" type="float" nillable="true"/>
- </all>
- </complexType>
- </schema>
- </types>
-
- <message name="echoHeaderString_Request">
- <part name="echoMeStringRequest" type="xsd:string"/>
- </message>
- <message name="echoHeaderString_Response">
- <part name="echoMeStringResponse" type="xsd:string"/>
- </message>
- <message name="echoHeaderStruct_Request">
- <part name="echoMeStructRequest" type="s:SOAPStruct"/>
- </message>
- <message name="echoHeaderStruct_Response">
- <part name="echoMeStructResponse" type="s:SOAPStruct"/>
- </message>
- <message name="echoStringRequest">
- <part name="inputString" type="xsd:string"/>
- </message>
- <message name="echoStringResponse">
- <part name="return" type="xsd:string"/>
- </message>
- <message name="echoStringArrayRequest">
- <part name="inputStringArray" type="s:ArrayOfstring"/>
- </message>
- <message name="echoStringArrayResponse">
- <part name="return" type="s:ArrayOfstring"/>
- </message>
- <message name="echoIntegerRequest">
- <part name="inputInteger" type="xsd:int"/>
- </message>
- <message name="echoIntegerResponse">
- <part name="return" type="xsd:int"/>
- </message>
- <message name="echoIntegerArrayRequest">
- <part name="inputIntegerArray" type="s:ArrayOfint"/>
- </message>
- <message name="echoIntegerArrayResponse">
- <part name="return" type="s:ArrayOfint"/>
- </message>
- <message name="echoFloatRequest">
- <part name="inputFloat" type="xsd:float"/>
- </message>
- <message name="echoFloatResponse">
- <part name="return" type="xsd:float"/>
- </message>
- <message name="echoFloatArrayRequest">
- <part name="inputFloatArray" type="s:ArrayOffloat"/>
- </message>
- <message name="echoFloatArrayResponse">
- <part name="return" type="s:ArrayOffloat"/>
- </message>
- <message name="echoStructRequest">
- <part name="inputStruct" type="s:SOAPStruct"/>
- </message>
- <message name="echoStructResponse">
- <part name="return" type="s:SOAPStruct"/>
- </message>
- <message name="echoStructArrayRequest">
- <part name="inputStructArray" type="s:ArrayOfSOAPStruct"/>
- </message>
- <message name="echoStructArrayResponse">
- <part name="return" type="s:ArrayOfSOAPStruct"/>
- </message>
- <message name="echoVoidRequest"/>
- <message name="echoVoidResponse"/>
- <message name="echoBase64Request">
- <part name="inputBase64" type="xsd:base64Binary"/>
- </message>
- <message name="echoBase64Response">
- <part name="return" type="xsd:base64Binary"/>
- </message>
- <message name="echoDateRequest">
- <part name="inputDate" type="xsd:dateTime"/>
- </message>
- <message name="echoDateResponse">
- <part name="return" type="xsd:dateTime"/>
- </message>
- <message name="echoHexBinaryRequest">
- <part name="inputHexBinary" type="xsd:hexBinary"/>
- </message>
- <message name="echoHexBinaryResponse">
- <part name="return" type="xsd:hexBinary"/>
- </message>
- <message name="echoDecimalRequest">
- <part name="inputDecimal" type="xsd:decimal"/>
- </message>
- <message name="echoDecimalResponse">
- <part name="return" type="xsd:decimal"/>
- </message>
- <message name="echoBooleanRequest">
- <part name="inputBoolean" type="xsd:boolean"/>
- </message>
- <message name="echoBooleanResponse">
- <part name="return" type="xsd:boolean"/>
- </message>
-
- <portType name="InteropTestPortType">
- <operation name="echoString" parameterOrder="inputString">
- <input message="tns:echoStringRequest"/>
- <output message="tns:echoStringResponse"/>
- </operation>
- <operation name="echoStringArray" parameterOrder="inputStringArray">
- <input message="tns:echoStringArrayRequest"/>
- <output message="tns:echoStringArrayResponse"/>
- </operation>
- <operation name="echoInteger" parameterOrder="inputInteger">
- <input message="tns:echoIntegerRequest"/>
- <output message="tns:echoIntegerResponse"/>
- </operation>
- <operation name="echoIntegerArray" parameterOrder="inputIntegerArray">
- <input message="tns:echoIntegerArrayRequest"/>
- <output message="tns:echoIntegerArrayResponse"/>
- </operation>
- <operation name="echoFloat" parameterOrder="inputFloat">
- <input message="tns:echoFloatRequest"/>
- <output message="tns:echoFloatResponse"/>
- </operation>
- <operation name="echoFloatArray" parameterOrder="inputFloatArray">
- <input message="tns:echoFloatArrayRequest"/>
- <output message="tns:echoFloatArrayResponse"/>
- </operation>
- <operation name="echoStruct" parameterOrder="inputStruct">
- <input message="tns:echoStructRequest"/>
- <output message="tns:echoStructResponse"/>
- </operation>
- <operation name="echoStructArray" parameterOrder="inputStructArray">
- <input message="tns:echoStructArrayRequest"/>
- <output message="tns:echoStructArrayResponse"/>
- </operation>
- <operation name="echoVoid">
- <input message="tns:echoVoidRequest"/>
- <output message="tns:echoVoidResponse"/>
- </operation>
- <operation name="echoBase64" parameterOrder="inputBase64">
- <input message="tns:echoBase64Request"/>
- <output message="tns:echoBase64Response"/>
- </operation>
- <operation name="echoDate" parameterOrder="inputDate">
- <input message="tns:echoDateRequest"/>
- <output message="tns:echoDateResponse"/>
- </operation>
- <operation name="echoHexBinary" parameterOrder="inputHexBinary">
- <input message="tns:echoHexBinaryRequest"/>
- <output message="tns:echoHexBinaryResponse"/>
- </operation>
- <operation name="echoDecimal" parameterOrder="inputDecimal">
- <input message="tns:echoDecimalRequest"/>
- <output message="tns:echoDecimalResponse"/>
- </operation>
- <operation name="echoBoolean" parameterOrder="inputBoolean">
- <input message="tns:echoBooleanRequest"/>
- <output message="tns:echoBooleanResponse"/>
- </operation>
- </portType>
-
- <binding name="InteropEchoHeaderBinding" type="tns:InteropTestPortType">
- <soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/>
-
- <operation name="echoString">
- <soap:operation soapAction="http://soapinterop.org/"/>
- <input>
- <soap:body use="encoded" namespace="http://soapinterop.org/" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
- <soap:header use="encoded" message="tns:echoHeaderString_Request" part="echoMeStringRequest" namespace="http://soapinterop.org/echoheader/" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
- <soap:header use="encoded" message="tns:echoHeaderStruct_Request" part="echoMeStructRequest" namespace="http://soapinterop.org/echoheader/" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
- </input>
- <output>
- <soap:body use="encoded" namespace="http://soapinterop.org/" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
- <soap:header use="encoded" message="tns:echoHeaderString_Response" part="echoMeStringResponse" namespace="http://soapinterop.org/echoheader/" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
- <soap:header use="encoded" message="tns:echoHeaderStruct_Response" part="echoMeStructResponse" namespace="http://soapinterop.org/echoheader/" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
- </output>
- </operation>
- <operation name="echoStringArray">
- <soap:operation soapAction="http://soapinterop.org/"/>
- <input>
- <soap:body use="encoded" namespace="http://soapinterop.org/" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
- <soap:header use="encoded" message="tns:echoHeaderString_Request" part="echoMeStringRequest" namespace="http://soapinterop.org/echoheader/" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
- <soap:header use="encoded" message="tns:echoHeaderStruct_Request" part="echoMeStructRequest" namespace="http://soapinterop.org/echoheader/" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
- </input>
- <output>
- <soap:body use="encoded" namespace="http://soapinterop.org/" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
- <soap:header use="encoded" message="tns:echoHeaderString_Response" part="echoMeStringResponse" namespace="http://soapinterop.org/echoheader/" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
- <soap:header use="encoded" message="tns:echoHeaderStruct_Response" part="echoMeStructResponse" namespace="http://soapinterop.org/echoheader/" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
- </output>
- </operation>
- <operation name="echoInteger">
- <soap:operation soapAction="http://soapinterop.org/"/>
- <input>
- <soap:body use="encoded" namespace="http://soapinterop.org/" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
- <soap:header use="encoded" message="tns:echoHeaderString_Request" part="echoMeStringRequest" namespace="http://soapinterop.org/echoheader/" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
- <soap:header use="encoded" message="tns:echoHeaderStruct_Request" part="echoMeStructRequest" namespace="http://soapinterop.org/echoheader/" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
- </input>
- <output>
- <soap:body use="encoded" namespace="http://soapinterop.org/" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
- <soap:header use="encoded" message="tns:echoHeaderString_Response" part="echoMeStringResponse" namespace="http://soapinterop.org/echoheader/" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
- <soap:header use="encoded" message="tns:echoHeaderStruct_Response" part="echoMeStructResponse" namespace="http://soapinterop.org/echoheader/" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
- </output>
- </operation>
- <operation name="echoIntegerArray">
- <soap:operation soapAction="http://soapinterop.org/"/>
- <input>
- <soap:body use="encoded" namespace="http://soapinterop.org/" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
- <soap:header use="encoded" message="tns:echoHeaderString_Request" part="echoMeStringRequest" namespace="http://soapinterop.org/echoheader/" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
- <soap:header use="encoded" message="tns:echoHeaderStruct_Request" part="echoMeStructRequest" namespace="http://soapinterop.org/echoheader/" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
- </input>
- <output>
- <soap:body use="encoded" namespace="http://soapinterop.org/" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
- <soap:header use="encoded" message="tns:echoHeaderString_Response" part="echoMeStringResponse" namespace="http://soapinterop.org/echoheader/" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
- <soap:header use="encoded" message="tns:echoHeaderStruct_Response" part="echoMeStructResponse" namespace="http://soapinterop.org/echoheader/" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
- </output>
- </operation>
- <operation name="echoFloat">
- <soap:operation soapAction="http://soapinterop.org/"/>
- <input>
- <soap:body use="encoded" namespace="http://soapinterop.org/" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
- <soap:header use="encoded" message="tns:echoHeaderString_Request" part="echoMeStringRequest" namespace="http://soapinterop.org/echoheader/" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
- <soap:header use="encoded" message="tns:echoHeaderStruct_Request" part="echoMeStructRequest" namespace="http://soapinterop.org/echoheader/" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
- </input>
- <output>
- <soap:body use="encoded" namespace="http://soapinterop.org/" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
- <soap:header use="encoded" message="tns:echoHeaderString_Response" part="echoMeStringResponse" namespace="http://soapinterop.org/echoheader/" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
- <soap:header use="encoded" message="tns:echoHeaderStruct_Response" part="echoMeStructResponse" namespace="http://soapinterop.org/echoheader/" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
- </output>
- </operation>
- <operation name="echoFloatArray">
- <soap:operation soapAction="http://soapinterop.org/"/>
- <input>
- <soap:body use="encoded" namespace="http://soapinterop.org/" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
- <soap:header use="encoded" message="tns:echoHeaderString_Request" part="echoMeStringRequest" namespace="http://soapinterop.org/echoheader/" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
- <soap:header use="encoded" message="tns:echoHeaderStruct_Request" part="echoMeStructRequest" namespace="http://soapinterop.org/echoheader/" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
- </input>
- <output>
- <soap:body use="encoded" namespace="http://soapinterop.org/" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
- <soap:header use="encoded" message="tns:echoHeaderString_Response" part="echoMeStringResponse" namespace="http://soapinterop.org/echoheader/" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
- <soap:header use="encoded" message="tns:echoHeaderStruct_Response" part="echoMeStructResponse" namespace="http://soapinterop.org/echoheader/" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
- </output>
- </operation>
- <operation name="echoStruct">
- <soap:operation soapAction="http://soapinterop.org/"/>
- <input>
- <soap:body use="encoded" namespace="http://soapinterop.org/" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
- <soap:header use="encoded" message="tns:echoHeaderString_Request" part="echoMeStringRequest" namespace="http://soapinterop.org/echoheader/" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
- <soap:header use="encoded" message="tns:echoHeaderStruct_Request" part="echoMeStructRequest" namespace="http://soapinterop.org/echoheader/" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
- </input>
- <output>
- <soap:body use="encoded" namespace="http://soapinterop.org/" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
- <soap:header use="encoded" message="tns:echoHeaderString_Response" part="echoMeStringResponse" namespace="http://soapinterop.org/echoheader/" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
- <soap:header use="encoded" message="tns:echoHeaderStruct_Response" part="echoMeStructResponse" namespace="http://soapinterop.org/echoheader/" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
- </output>
- </operation>
- <operation name="echoStructArray">
- <soap:operation soapAction="http://soapinterop.org/"/>
- <input>
- <soap:body use="encoded" namespace="http://soapinterop.org/" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
- <soap:header use="encoded" message="tns:echoHeaderString_Request" part="echoMeStringRequest" namespace="http://soapinterop.org/echoheader/" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
- <soap:header use="encoded" message="tns:echoHeaderStruct_Request" part="echoMeStructRequest" namespace="http://soapinterop.org/echoheader/" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
- </input>
- <output>
- <soap:body use="encoded" namespace="http://soapinterop.org/" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
- <soap:header use="encoded" message="tns:echoHeaderString_Response" part="echoMeStringResponse" namespace="http://soapinterop.org/echoheader/" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
- <soap:header use="encoded" message="tns:echoHeaderStruct_Response" part="echoMeStructResponse" namespace="http://soapinterop.org/echoheader/" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
- </output>
- </operation>
- <operation name="echoVoid">
- <soap:operation soapAction="http://soapinterop.org/"/>
- <input>
- <soap:body use="encoded" namespace="http://soapinterop.org/" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
- <soap:header use="encoded" message="tns:echoHeaderString_Request" part="echoMeStringRequest" namespace="http://soapinterop.org/echoheader/" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
- <soap:header use="encoded" message="tns:echoHeaderStruct_Request" part="echoMeStructRequest" namespace="http://soapinterop.org/echoheader/" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
- </input>
- <output>
- <soap:body use="encoded" namespace="http://soapinterop.org/" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
- <soap:header use="encoded" message="tns:echoHeaderString_Response" part="echoMeStringResponse" namespace="http://soapinterop.org/echoheader/" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
- <soap:header use="encoded" message="tns:echoHeaderStruct_Response" part="echoMeStructResponse" namespace="http://soapinterop.org/echoheader/" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
- </output>
- </operation>
- <operation name="echoBase64">
- <soap:operation soapAction="http://soapinterop.org/"/>
- <input>
- <soap:body use="encoded" namespace="http://soapinterop.org/" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
- <soap:header use="encoded" message="tns:echoHeaderString_Request" part="echoMeStringRequest" namespace="http://soapinterop.org/echoheader/" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
- <soap:header use="encoded" message="tns:echoHeaderStruct_Request" part="echoMeStructRequest" namespace="http://soapinterop.org/echoheader/" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
- </input>
- <output>
- <soap:body use="encoded" namespace="http://soapinterop.org/" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
- <soap:header use="encoded" message="tns:echoHeaderString_Response" part="echoMeStringResponse" namespace="http://soapinterop.org/echoheader/" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
- <soap:header use="encoded" message="tns:echoHeaderStruct_Response" part="echoMeStructResponse" namespace="http://soapinterop.org/echoheader/" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
- </output>
- </operation>
- <operation name="echoDate">
- <soap:operation soapAction="http://soapinterop.org/"/>
- <input>
- <soap:body use="encoded" namespace="http://soapinterop.org/" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
- <soap:header use="encoded" message="tns:echoHeaderString_Request" part="echoMeStringRequest" namespace="http://soapinterop.org/echoheader/" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
- <soap:header use="encoded" message="tns:echoHeaderStruct_Request" part="echoMeStructRequest" namespace="http://soapinterop.org/echoheader/" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
- </input>
- <output>
- <soap:body use="encoded" namespace="http://soapinterop.org/" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
- <soap:header use="encoded" message="tns:echoHeaderString_Response" part="echoMeStringResponse" namespace="http://soapinterop.org/echoheader/" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
- <soap:header use="encoded" message="tns:echoHeaderStruct_Response" part="echoMeStructResponse" namespace="http://soapinterop.org/echoheader/" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
- </output>
- </operation>
- <operation name="echoHexBinary">
- <soap:operation soapAction="http://soapinterop.org/"/>
- <input>
- <soap:body use="encoded" namespace="http://soapinterop.org/" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
- <soap:header use="encoded" message="tns:echoHeaderString_Request" part="echoMeStringRequest" namespace="http://soapinterop.org/echoheader/" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
- <soap:header use="encoded" message="tns:echoHeaderStruct_Request" part="echoMeStructRequest" namespace="http://soapinterop.org/echoheader/" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
- </input>
- <output>
- <soap:body use="encoded" namespace="http://soapinterop.org/" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
- <soap:header use="encoded" message="tns:echoHeaderString_Response" part="echoMeStringResponse" namespace="http://soapinterop.org/echoheader/" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
- <soap:header use="encoded" message="tns:echoHeaderStruct_Response" part="echoMeStructResponse" namespace="http://soapinterop.org/echoheader/" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
- </output>
- </operation>
- <operation name="echoDecimal">
- <soap:operation soapAction="http://soapinterop.org/"/>
- <input>
- <soap:body use="encoded" namespace="http://soapinterop.org/" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
- <soap:header use="encoded" message="tns:echoHeaderString_Request" part="echoMeStringRequest" namespace="http://soapinterop.org/echoheader/" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
- <soap:header use="encoded" message="tns:echoHeaderStruct_Request" part="echoMeStructRequest" namespace="http://soapinterop.org/echoheader/" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
- </input>
- <output>
- <soap:body use="encoded" namespace="http://soapinterop.org/" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
- <soap:header use="encoded" message="tns:echoHeaderString_Response" part="echoMeStringResponse" namespace="http://soapinterop.org/echoheader/" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
- <soap:header use="encoded" message="tns:echoHeaderStruct_Response" part="echoMeStructResponse" namespace="http://soapinterop.org/echoheader/" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
- </output>
- </operation>
- <operation name="echoBoolean">
- <soap:operation soapAction="http://soapinterop.org/"/>
- <input>
- <soap:body use="encoded" namespace="http://soapinterop.org/" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
- <soap:header use="encoded" message="tns:echoHeaderString_Request" part="echoMeStringRequest" namespace="http://soapinterop.org/echoheader/" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
- <soap:header use="encoded" message="tns:echoHeaderStruct_Request" part="echoMeStructRequest" namespace="http://soapinterop.org/echoheader/" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
- </input>
- <output>
- <soap:body use="encoded" namespace="http://soapinterop.org/" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
- <soap:header use="encoded" message="tns:echoHeaderString_Response" part="echoMeStringResponse" namespace="http://soapinterop.org/echoheader/" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
- <soap:header use="encoded" message="tns:echoHeaderStruct_Response" part="echoMeStructResponse" namespace="http://soapinterop.org/echoheader/" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
- </output>
- </operation>
-
- </binding>
-
- <service name="interopLabEchoHeader">
-
- <port name="interopPortEchoHdr" binding="tns:InteropEchoHeaderBinding">
- <soap:address location="<?php echo ((isset($_SERVER['HTTPS'])?"https://":"http://").$_SERVER['HTTP_HOST'].dirname($_SERVER['PHP_SELF']));?>/server_round2_groupC.php"/>
- </port>
-
- </service>
-</definitions>
diff --git a/ext/soap/interop/index.php b/ext/soap/interop/index.php
deleted file mode 100644
index 1ae25d92f0..0000000000
--- a/ext/soap/interop/index.php
+++ /dev/null
@@ -1,59 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-
-<html>
-<head>
- <title>PHP SOAP Interop</title>
-</head>
-<?php
-// get our endpoint
-$server = $_SERVER['HTTP_HOST'].':'.$_SERVER['SERVER_PORT'];
-$base = (isset($_SERVER['HTTPS'])?"https://":"http://").$server.dirname($_SERVER['PHP_SELF'])."/interop.wsdl.php";
-$groupb = (isset($_SERVER['HTTPS'])?"https://":"http://").$server.dirname($_SERVER['PHP_SELF'])."/interopB.wsdl.php";
-$groupc = (isset($_SERVER['HTTPS'])?"https://":"http://").$server.dirname($_SERVER['PHP_SELF'])."/echoheadersvc.wsdl.php";
-?>
-<body>
-
-<h2 align='center'>PHP SOAP Interop</h2>
-<p>Welcome to the PHP SOAP Interop pages. These pages are set up for
-SOAP Builder interop tests. You can find out more about the interop tests
-at <a href="http://www.whitemesa.com/interop.htm">White Mesa</a>.</p>
-<p>Currently Round 2 base, Group B and Group C interop tests are enabled.</p>
-
-<h3>Round 2 Interop Server</h3>
-Base WSDL: <a href="<?php echo $base ?>"><?php echo $base ?></a><br>
-Group B WSDL: <a href="<?php echo $groupb ?>"><?php echo $groupb ?></a><br>
-Group C WSDL: <a href="<?php echo $groupc ?>"><?php echo $groupc ?></a><br>
-
-<h3>Interop Client</h3>
-
-<p>Notes: Tests are done both "Direct" and with "WSDL". WSDL tests use the supplied interop WSDL
-to run the tests against. The Direct method uses an internal prebuilt list of methods and parameters
-for the test.</p>
-<p>Tests are also run against two methods of generating method parameters. The first, 'php', attempts
-to directly serialize PHP variables into soap values. The second method, 'soapval', uses a SoapParam and SoapVar
-classes to define what the type of the value is.</p>
-
-<h3>Client Test Interface</h3>
-<p>The <a href="client_round2.php">client interface</a> allows you to run the PHP SOAP
-Client against a choosen interop server. Each run updates the results database below.</p>
-
-<h3>Interop Client Test Results</h3>
-<p>This is a database of the current test results using PHP SOAP Clients against interop servers.</p>
-<p>More detail (wire) about errors (marked yellow or red) can be obtained by clicking on the
-link in the result box. If we have an HTTP error
-attempting to connect to the endpoint, we will mark all consecutive attempts as errors, and skip
-testing that endpoint. This reduces the time it takes to run the tests if a server is unavailable.</p>
-<ul>
-<li><a href="client_round2_results.php?test=base&type=php&wsdl=0">Base results using PHP native types</a></li>
-<li><a href="client_round2_results.php?test=base&type=soapval&wsdl=0">Base results using SOAP types</a></li>
-<li><a href="client_round2_results.php?test=base&type=php&wsdl=1">Base results using PHP native types with WSDL</a></li>
-<li><a href="client_round2_results.php?test=GroupB&type=php&wsdl=0">Group B results using PHP native types</a></li>
-<li><a href="client_round2_results.php?test=GroupB&type=soapval&wsdl=0">Group B results using SOAP types</a></li>
-<li><a href="client_round2_results.php?test=GroupB&type=php&wsdl=1">Group B results using PHP native types with WSDL</a></li>
-<li><a href="client_round2_results.php?test=GroupC&type=php&wsdl=0">Group C results using PHP native types</a></li>
-<li><a href="client_round2_results.php?test=GroupC&type=soapval&wsdl=0">Group C results using SOAP types</a></li>
-<li><a href="client_round2_results.php?test=GroupC&type=php&wsdl=1">Group C results using PHP native types with WSDL</a></li>
-<li><a href="client_round2_results.php">Show All Results</a></li>
-</ul>
-</body>
-</html>
diff --git a/ext/soap/interop/interop.wsdl.php b/ext/soap/interop/interop.wsdl.php
deleted file mode 100644
index 6ed2d17d66..0000000000
--- a/ext/soap/interop/interop.wsdl.php
+++ /dev/null
@@ -1,336 +0,0 @@
-<?php
-header("Content-Type: text/xml");
-echo '<?xml version="1.0"?>';
-echo "\n";
-?>
-<definitions name="InteropTest"
- xmlns:xsd="http://www.w3.org/2001/XMLSchema"
- xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"
- xmlns:tns="http://soapinterop.org/"
- xmlns:s="http://soapinterop.org/xsd"
- xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
- xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
- xmlns="http://schemas.xmlsoap.org/wsdl/"
- targetNamespace="http://soapinterop.org/">
-
- <types>
- <schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="http://soapinterop.org/xsd">
- <xsd:import namespace="http://schemas.xmlsoap.org/soap/encoding/" />
- <xsd:import namespace="http://schemas.xmlsoap.org/wsdl/" />
- <xsd:complexType name="ArrayOfstring">
- <xsd:complexContent>
- <xsd:restriction base="SOAP-ENC:Array">
- <xsd:attribute ref="SOAP-ENC:arrayType" wsdl:arrayType="string[]"/>
- </xsd:restriction>
- </xsd:complexContent>
- </xsd:complexType>
- <xsd:complexType name="ArrayOfint">
- <xsd:complexContent>
- <xsd:restriction base="SOAP-ENC:Array">
- <xsd:attribute ref="SOAP-ENC:arrayType" wsdl:arrayType="int[]"/>
- </xsd:restriction>
- </xsd:complexContent>
- </xsd:complexType>
- <xsd:complexType name="ArrayOffloat">
- <xsd:complexContent>
- <xsd:restriction base="SOAP-ENC:Array">
- <xsd:attribute ref="SOAP-ENC:arrayType" wsdl:arrayType="float[]"/>
- </xsd:restriction>
- </xsd:complexContent>
- </xsd:complexType>
- <xsd:complexType name="SOAPStruct">
- <xsd:all>
- <xsd:element name="varString" type="string"/>
- <xsd:element name="varInt" type="int"/>
- <xsd:element name="varFloat" type="float"/>
- </xsd:all>
- </xsd:complexType>
- <xsd:complexType name="ArrayOfSOAPStruct">
- <xsd:complexContent>
- <xsd:restriction base="SOAP-ENC:Array">
- <xsd:attribute ref="SOAP-ENC:arrayType" wsdl:arrayType="s:SOAPStruct[]"/>
- </xsd:restriction>
- </xsd:complexContent>
- </xsd:complexType>
- </schema>
- </types>
-
- <message name="echoStringRequest">
- <part name="inputString" type="xsd:string" />
- </message>
- <message name="echoStringResponse">
- <part name="outputString" type="xsd:string" />
- </message>
- <message name="echoStringArrayRequest">
- <part name="inputStringArray" type="s:ArrayOfstring" />
- </message>
- <message name="echoStringArrayResponse">
- <part name="outputStringArray" type="s:ArrayOfstring" />
- </message>
- <message name="echoIntegerRequest">
- <part name="inputInteger" type="xsd:int" />
- </message>
- <message name="echoIntegerResponse">
- <part name="outputInteger" type="xsd:int" />
- </message>
- <message name="echoIntegerArrayRequest">
- <part name="inputIntegerArray" type="s:ArrayOfint" />
- </message>
- <message name="echoIntegerArrayResponse">
- <part name="outputIntegerArray" type="s:ArrayOfint" />
- </message>
- <message name="echoFloatRequest">
- <part name="inputFloat" type="xsd:float" />
- </message>
- <message name="echoFloatResponse">
- <part name="outputFloat" type="xsd:float" />
- </message>
- <message name="echoFloatArrayRequest">
- <part name="inputFloatArray" type="s:ArrayOffloat" />
- </message>
- <message name="echoFloatArrayResponse">
- <part name="outputFloatArray" type="s:ArrayOffloat" />
- </message>
- <message name="echoStructRequest">
- <part name="inputStruct" type="s:SOAPStruct" />
- </message>
- <message name="echoStructResponse">
- <part name="outputStruct" type="s:SOAPStruct" />
- </message>
- <message name="echoStructArrayRequest">
- <part name="inputStructArray" type="s:ArrayOfSOAPStruct" />
- </message>
- <message name="echoStructArrayResponse">
- <part name="outputStructArray" type="s:ArrayOfSOAPStruct" />
- </message>
- <message name="echoVoidRequest">
- </message>
- <message name="echoVoidResponse">
- </message>
- <message name="echoBase64Request">
- <part name="inputBase64" type="xsd:base64Binary" />
- </message>
- <message name="echoBase64Response">
- <part name="outputBase64" type="xsd:base64Binary" />
- </message>
- <message name="echoDateRequest">
- <part name="inputDate" type="xsd:dateTime" />
- </message>
- <message name="echoDateResponse">
- <part name="outputDate" type="xsd:dateTime" />
- </message>
- <message name="echoHexBinaryRequest">
- <part name="inputHexBinary" type="xsd:hexBinary" />
- </message>
- <message name="echoHexBinaryResponse">
- <part name="outputHexBinary" type="xsd:hexBinary" />
- </message>
- <message name="echoDecimalRequest">
- <part name="inputDecimal" type="xsd:decimal" />
- </message>
- <message name="echoDecimalResponse">
- <part name="outputDecimal" type="xsd:decimal" />
- </message>
- <message name="echoBooleanRequest">
- <part name="inputBoolean" type="xsd:boolean" />
- </message>
- <message name="echoBooleanResponse">
- <part name="outputBoolean" type="xsd:boolean" />
- </message>
-
- <portType name="InteropTestPortType">
- <operation name="echoString">
- <input message="tns:echoStringRequest"/>
- <output message="tns:echoStringResponse"/>
- </operation>
- <operation name="echoStringArray">
- <input message="tns:echoStringArrayRequest"/>
- <output message="tns:echoStringArrayResponse"/>
- </operation>
- <operation name="echoInteger">
- <input message="tns:echoIntegerRequest"/>
- <output message="tns:echoIntegerResponse"/>
- </operation>
- <operation name="echoIntegerArray">
- <input message="tns:echoIntegerArrayRequest"/>
- <output message="tns:echoIntegerArrayResponse"/>
- </operation>
- <operation name="echoFloat">
- <input message="tns:echoFloatRequest"/>
- <output message="tns:echoFloatResponse"/>
- </operation>
- <operation name="echoFloatArray">
- <input message="tns:echoFloatArrayRequest"/>
- <output message="tns:echoFloatArrayResponse"/>
- </operation>
- <operation name="echoStruct">
- <input message="tns:echoStructRequest"/>
- <output message="tns:echoStructResponse"/>
- </operation>
- <operation name="echoStructArray">
- <input message="tns:echoStructArrayRequest"/>
- <output message="tns:echoStructArrayResponse"/>
- </operation>
- <operation name="echoVoid">
- <input message="tns:echoVoidRequest"/>
- <output message="tns:echoVoidResponse"/>
- </operation>
- <operation name="echoBase64">
- <input message="tns:echoBase64Request"/>
- <output message="tns:echoBase64Response"/>
- </operation>
- <operation name="echoDate">
- <input message="tns:echoDateRequest"/>
- <output message="tns:echoDateResponse"/>
- </operation>
- <operation name="echoHexBinary">
- <input message="tns:echoHexBinaryRequest"/>
- <output message="tns:echoHexBinaryResponse"/>
- </operation>
- <operation name="echoDecimal">
- <input message="tns:echoDecimalRequest"/>
- <output message="tns:echoDecimalResponse"/>
- </operation>
- <operation name="echoBoolean">
- <input message="tns:echoBooleanRequest"/>
- <output message="tns:echoBooleanResponse"/>
- </operation>
- </portType>
-
- <binding name="InteropTestBinding" type="tns:InteropTestPortType">
- <soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/>
- <operation name="echoString">
- <soap:operation soapAction="http://" style="rpc"/>
- <input>
- <soap:body use="encoded" namespace="http://soapinterop.org/" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
- </input>
- <output>
- <soap:body use="encoded" namespace="http://soapinterop.org/" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
- </output>
- </operation>
- <operation name="echoStringArray">
- <soap:operation soapAction="http://" style="rpc"/>
- <input>
- <soap:body use="encoded" namespace="http://soapinterop.org/" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
- </input>
- <output>
- <soap:body use="encoded" namespace="http://soapinterop.org/" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
- </output>
- </operation>
- <operation name="echoInteger">
- <soap:operation soapAction="http://" style="rpc"/>
- <input>
- <soap:body use="encoded" namespace="http://soapinterop.org/" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
- </input>
- <output>
- <soap:body use="encoded" namespace="http://soapinterop.org/" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
- </output>
- </operation>
- <operation name="echoIntegerArray">
- <soap:operation soapAction="http://" style="rpc"/>
- <input>
- <soap:body use="encoded" namespace="http://soapinterop.org/" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
- </input>
- <output>
- <soap:body use="encoded" namespace="http://soapinterop.org/" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
- </output>
- </operation>
- <operation name="echoFloat">
- <soap:operation soapAction="http://" style="rpc"/>
- <input>
- <soap:body use="encoded" namespace="http://soapinterop.org/" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
- </input>
- <output>
- <soap:body use="encoded" namespace="http://soapinterop.org/" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
- </output>
- </operation>
- <operation name="echoFloatArray">
- <soap:operation soapAction="http://" style="rpc"/>
- <input>
- <soap:body use="encoded" namespace="http://soapinterop.org/" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
- </input>
- <output>
- <soap:body use="encoded" namespace="http://soapinterop.org/" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
- </output>
- </operation>
- <operation name="echoStruct">
- <soap:operation soapAction="http://" style="rpc"/>
- <input>
- <soap:body use="encoded" namespace="http://soapinterop.org/" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
- </input>
- <output>
- <soap:body use="encoded" namespace="http://soapinterop.org/" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
- </output>
- </operation>
- <operation name="echoStructArray">
- <soap:operation soapAction="http://" style="rpc"/>
- <input>
- <soap:body use="encoded" namespace="http://soapinterop.org/" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
- </input>
- <output>
- <soap:body use="encoded" namespace="http://soapinterop.org/" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
- </output>
- </operation>
- <operation name="echoVoid">
- <soap:operation soapAction="http://" style="rpc"/>
- <input>
- <soap:body use="encoded" namespace="http://soapinterop.org/" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
- </input>
- <output>
- <soap:body use="encoded" namespace="http://soapinterop.org/" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
- </output>
- </operation>
- <operation name="echoBase64">
- <soap:operation soapAction="http://" style="rpc"/>
- <input>
- <soap:body use="encoded" namespace="http://soapinterop.org/" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
- </input>
- <output>
- <soap:body use="encoded" namespace="http://soapinterop.org/" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
- </output>
- </operation>
- <operation name="echoDate">
- <soap:operation soapAction="http://" style="rpc"/>
- <input>
- <soap:body use="encoded" namespace="http://soapinterop.org/" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
- </input>
- <output>
- <soap:body use="encoded" namespace="http://soapinterop.org/" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
- </output>
- </operation>
- <operation name="echoHexBinary">
- <soap:operation soapAction="http://" style="rpc"/>
- <input>
- <soap:body use="encoded" namespace="http://soapinterop.org/" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
- </input>
- <output>
- <soap:body use="encoded" namespace="http://soapinterop.org/" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
- </output>
- </operation>
- <operation name="echoDecimal">
- <soap:operation soapAction="http://" style="rpc"/>
- <input>
- <soap:body use="encoded" namespace="http://soapinterop.org/" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
- </input>
- <output>
- <soap:body use="encoded" namespace="http://soapinterop.org/" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
- </output>
- </operation>
- <operation name="echoBoolean">
- <soap:operation soapAction="http://" style="rpc"/>
- <input>
- <soap:body use="encoded" namespace="http://soapinterop.org/" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
- </input>
- <output>
- <soap:body use="encoded" namespace="http://soapinterop.org/" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
- </output>
- </operation>
- </binding>
-
- <service name="InteropTest">
- <port name="InteropTestPort" binding="tns:InteropTestBinding">
- <soap:address location="<?php echo ((isset($_SERVER['HTTPS'])?"https://":"http://").$_SERVER['HTTP_HOST'].dirname($_SERVER['PHP_SELF']));?>/server_round2_base.php"/>
- </port>
- </service>
-
-</definitions>
diff --git a/ext/soap/interop/interopB.wsdl.php b/ext/soap/interop/interopB.wsdl.php
deleted file mode 100644
index 3113b1c2fe..0000000000
--- a/ext/soap/interop/interopB.wsdl.php
+++ /dev/null
@@ -1,196 +0,0 @@
-<?php
-header("Content-Type: text/xml");
-echo '<?xml version="1.0"?>';
-echo "\n";
-?>
-<definitions name="InteropTest"
- targetNamespace="http://soapinterop.org/"
- xmlns="http://schemas.xmlsoap.org/wsdl/"
- xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
- xmlns:xsd="http://www.w3.org/2001/XMLSchema"
- xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"
- xmlns:tns="http://soapinterop.org/"
- xmlns:s="http://soapinterop.org/xsd"
- xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">
-
- <types>
- <schema xmlns="http://www.w3.org/2001/XMLSchema"
- targetNamespace="http://soapinterop.org/xsd">
-
- <import namespace="http://schemas.xmlsoap.org/soap/encoding/" />
-
- <complexType name="ArrayOfstring">
- <complexContent>
- <restriction base="SOAP-ENC:Array">
- <attribute ref="SOAP-ENC:arrayType" wsdl:arrayType="string[]"/>
- </restriction>
- </complexContent>
- </complexType>
- <complexType name="ArrayOfint">
- <complexContent>
- <restriction base="SOAP-ENC:Array">
- <attribute ref="SOAP-ENC:arrayType" wsdl:arrayType="int[]"/>
- </restriction>
- </complexContent>
- </complexType>
- <complexType name="ArrayOffloat">
- <complexContent>
- <restriction base="SOAP-ENC:Array">
- <attribute ref="SOAP-ENC:arrayType" wsdl:arrayType="float[]"/>
- </restriction>
- </complexContent>
- </complexType>
- <complexType name="ArrayOfSOAPStruct">
- <complexContent>
- <restriction base="SOAP-ENC:Array">
- <attribute ref="SOAP-ENC:arrayType" wsdl:arrayType="s:SOAPStruct[]"/>
- </restriction>
- </complexContent>
- </complexType>
- <complexType name="SOAPStruct">
- <all>
- <element name="varString" type="string" nillable="true"/>
- <element name="varInt" type="int" nillable="true"/>
- <element name="varFloat" type="float" nillable="true"/>
- </all>
- </complexType>
- <complexType name="SOAPStructStruct">
- <all>
- <element name="varString" type="string" nillable="true"/>
- <element name="varInt" type="int" nillable="true"/>
- <element name="varFloat" type="float" nillable="true"/>
- <element name="varStruct" type="s:SOAPStruct"/>
- </all>
- </complexType>
- <complexType name="SOAPArrayStruct">
- <all>
- <element name="varString" type="string" nillable="true"/>
- <element name="varInt" type="int" nillable="true"/>
- <element name="varFloat" type="float" nillable="true"/>
- <element name="varArray" type="s:ArrayOfstring"/>
- </all>
- </complexType>
- <complexType name="ArrayOfString2D">
- <complexContent>
- <restriction base="SOAP-ENC:Array">
- <attribute ref="SOAP-ENC:arrayType" wsdl:arrayType="string[,]"/>
- </restriction>
- </complexContent>
- </complexType>
- </schema>
- </types>
-
- <message name="echoStructAsSimpleTypesRequest">
- <part name="inputStruct" type="s:SOAPStruct"/>
- </message>
- <message name="echoStructAsSimpleTypesResponse">
- <part name="outputString" type="xsd:string"/>
- <part name="outputInteger" type="xsd:int"/>
- <part name="outputFloat" type="xsd:float"/>
- </message>
- <message name="echoSimpleTypesAsStructRequest">
- <part name="inputString" type="xsd:string"/>
- <part name="inputInteger" type="xsd:int"/>
- <part name="inputFloat" type="xsd:float"/>
- </message>
- <message name="echoSimpleTypesAsStructResponse">
- <part name="return" type="s:SOAPStruct"/>
- </message>
- <message name="echo2DStringArrayRequest">
- <part name="input2DStringArray" type="s:ArrayOfString2D"/>
- </message>
- <message name="echo2DStringArrayResponse">
- <part name="return" type="s:ArrayOfString2D"/>
- </message>
- <message name="echoNestedStructRequest">
- <part name="inputStruct" type="s:SOAPStructStruct"/>
- </message>
- <message name="echoNestedStructResponse">
- <part name="return" type="s:SOAPStructStruct"/>
- </message>
- <message name="echoNestedArrayRequest">
- <part name="inputStruct" type="s:SOAPArrayStruct"/>
- </message>
- <message name="echoNestedArrayResponse">
- <part name="return" type="s:SOAPArrayStruct"/>
- </message>
-
- <portType name="InteropTestPortTypeB">
- <operation name="echoStructAsSimpleTypes" parameterOrder="inputStruct outputString outputInteger outputFloat">
- <input message="tns:echoStructAsSimpleTypesRequest" name="echoStructAsSimpleTypes"/>
- <output message="tns:echoStructAsSimpleTypesResponse" name="echoStructAsSimpleTypesResponse"/>
- </operation>
- <operation name="echoSimpleTypesAsStruct" parameterOrder="inputString inputInteger inputFloat">
- <input message="tns:echoSimpleTypesAsStructRequest" name="echoSimpleTypesAsStruct"/>
- <output message="tns:echoSimpleTypesAsStructResponse" name="echoSimpleTypesAsStructResponse"/>
- </operation>
- <operation name="echo2DStringArray" parameterOrder="input2DStringArray">
- <input message="tns:echo2DStringArrayRequest" name="echo2DStringArray"/>
- <output message="tns:echo2DStringArrayResponse" name="echo2DStringArrayResponse"/>
- </operation>
- <operation name="echoNestedStruct" parameterOrder="inputStruct">
- <input message="tns:echoNestedStructRequest" name="echoNestedStruct"/>
- <output message="tns:echoNestedStructResponse" name="echoNestedStructResponse"/>
- </operation>
- <operation name="echoNestedArray" parameterOrder="inputStruct">
- <input message="tns:echoNestedArrayRequest" name="echoNestedArray"/>
- <output message="tns:echoNestedArrayResponse" name="echoNestedArrayResponse"/>
- </operation>
- </portType>
-
- <binding name="InteropTestSoapBindingB" type="tns:InteropTestPortTypeB">
- <soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/>
- <operation name="echoStructAsSimpleTypes">
- <soap:operation soapAction="http://soapinterop.org/"/>
- <input>
- <soap:body use="encoded" namespace="http://soapinterop.org/" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
- </input>
- <output>
- <soap:body use="encoded" namespace="http://soapinterop.org/" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
- </output>
- </operation>
- <operation name="echoSimpleTypesAsStruct">
- <soap:operation soapAction="http://soapinterop.org/"/>
- <input>
- <soap:body use="encoded" namespace="http://soapinterop.org/" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
- </input>
- <output>
- <soap:body use="encoded" namespace="http://soapinterop.org/" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
- </output>
- </operation>
- <operation name="echo2DStringArray">
- <soap:operation soapAction="http://soapinterop.org/"/>
- <input>
- <soap:body use="encoded" namespace="http://soapinterop.org/" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
- </input>
- <output>
- <soap:body use="encoded" namespace="http://soapinterop.org/" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
- </output>
- </operation>
- <operation name="echoNestedStruct">
- <soap:operation soapAction="http://soapinterop.org/"/>
- <input>
- <soap:body use="encoded" namespace="http://soapinterop.org/" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
- </input>
- <output>
- <soap:body use="encoded" namespace="http://soapinterop.org/" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
- </output>
- </operation>
- <operation name="echoNestedArray">
- <soap:operation soapAction="http://soapinterop.org/"/>
- <input>
- <soap:body use="encoded" namespace="http://soapinterop.org/" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
- </input>
- <output>
- <soap:body use="encoded" namespace="http://soapinterop.org/" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
- </output>
- </operation>
- </binding>
-
- <service name="interopLabB">
- <port name="interopTestPortB" binding="tns:InteropTestSoapBindingB">
- <soap:address location="<?php echo ((isset($_SERVER['HTTPS'])?"https://":"http://").$_SERVER['HTTP_HOST'].dirname($_SERVER['PHP_SELF']));?>/server_round2_groupB.php"/>
- </port>
- </service>
-
-</definitions>
diff --git a/ext/soap/interop/server_round2_base.php b/ext/soap/interop/server_round2_base.php
deleted file mode 100644
index 50c98aa139..0000000000
--- a/ext/soap/interop/server_round2_base.php
+++ /dev/null
@@ -1,105 +0,0 @@
-<?
-//
-// +----------------------------------------------------------------------+
-// | PHP Version 4 |
-// +----------------------------------------------------------------------+
-// | Copyright (c) 1997-2003 The PHP Group |
-// +----------------------------------------------------------------------+
-// | This source file is subject to version 2.02 of the PHP license, |
-// | that is bundled with this package in the file LICENSE, and is |
-// | available at through the world-wide-web at |
-// | http://www.php.net/license/2_02.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. |
-// +----------------------------------------------------------------------+
-// | Authors: Shane Caraveo <Shane@Caraveo.com> Port to PEAR and more |
-// | Authors: Dietrich Ayala <dietrich@ganx4.com> Original Author |
-// +----------------------------------------------------------------------+
-//
-// $Id$
-//
-
-class SOAP_Interop_Base {
-
- function echoString($inputString)
- {
- return $inputString;
- }
-
- function echoStringArray($inputStringArray)
- {
- return $inputStringArray;
- }
-
-
- function echoInteger($inputInteger)
- {
- return $inputInteger;
- }
-
- function echoIntegerArray($inputIntegerArray)
- {
- return $inputIntegerArray;
- }
-
- function echoFloat($inputFloat)
- {
- return $inputFloat;
- }
-
- function echoFloatArray($inputFloatArray)
- {
- return $inputFloatArray;
- }
-
- function echoStruct($inputStruct)
- {
- return $inputStruct;
- }
-
- function echoStructArray($inputStructArray)
- {
- return $inputStructArray;
- }
-
- function echoVoid()
- {
- return NULL;
- }
-
- function echoBase64($b_encoded)
- {
- return $b_encoded;
- }
-
- function echoDate($timeInstant)
- {
- return $timeInstant;
- }
-
- function echoHexBinary($hb)
- {
- return $hb;
- }
-
- function echoDecimal($dec)
- {
- return $dec;
- }
-
- function echoBoolean($boolean)
- {
- return $boolean;
- }
-
- function echoMimeAttachment($stuff)
- {
- return new SOAP_Attachment('return','application/octet-stream',NULL,$stuff);
- }
-}
-
-$server = new SoapServer((isset($_SERVER['HTTPS'])?"https://":"http://").$_SERVER['HTTP_HOST'].dirname($_SERVER['PHP_SELF'])."/interop.wsdl.php");
-$server->setClass("SOAP_Interop_Base");
-$server->handle();
-?> \ No newline at end of file
diff --git a/ext/soap/interop/server_round2_groupB.php b/ext/soap/interop/server_round2_groupB.php
deleted file mode 100644
index a390a4c75a..0000000000
--- a/ext/soap/interop/server_round2_groupB.php
+++ /dev/null
@@ -1,58 +0,0 @@
-<?
-//
-// +----------------------------------------------------------------------+
-// | PHP Version 4 |
-// +----------------------------------------------------------------------+
-// | Copyright (c) 1997-2003 The PHP Group |
-// +----------------------------------------------------------------------+
-// | This source file is subject to version 2.02 of the PHP license, |
-// | that is bundled with this package in the file LICENSE, and is |
-// | available at through the world-wide-web at |
-// | http://www.php.net/license/2_02.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. |
-// +----------------------------------------------------------------------+
-// | Authors: Shane Caraveo <Shane@Caraveo.com> Port to PEAR and more |
-// | Authors: Dietrich Ayala <dietrich@ganx4.com> Original Author |
-// +----------------------------------------------------------------------+
-//
-// $Id$
-//
-
-class SOAP_Interop_GroupB {
-
- function echoStructAsSimpleTypes ($struct)
- {
- return array('outputString' => $struct->varString,
- 'outputInteger' => $struct->varInt,
- 'outputFloat' => $struct->varFloat);
- }
-
- function echoSimpleTypesAsStruct($string, $int, $float)
- {
- return (object)array("varString" => $string,
- "varInt" => $int,
- "varFloat" => $float);
- }
-
- function echoNestedStruct($struct)
- {
- return $struct;
- }
-
- function echo2DStringArray($ary)
- {
- return $ary;
- }
-
- function echoNestedArray($ary)
- {
- return $ary;
- }
-}
-
-$server = new SoapServer((isset($_SERVER['HTTPS'])?"https://":"http://").$_SERVER['HTTP_HOST'].dirname($_SERVER['PHP_SELF'])."/interopB.wsdl.php");
-$server->setClass("SOAP_Interop_GroupB");
-$server->handle();
-?> \ No newline at end of file
diff --git a/ext/soap/interop/server_round2_groupC.php b/ext/soap/interop/server_round2_groupC.php
deleted file mode 100644
index 25241d0429..0000000000
--- a/ext/soap/interop/server_round2_groupC.php
+++ /dev/null
@@ -1,43 +0,0 @@
-<?
-//
-// +----------------------------------------------------------------------+
-// | PHP Version 4 |
-// +----------------------------------------------------------------------+
-// | Copyright (c) 1997-2003 The PHP Group |
-// +----------------------------------------------------------------------+
-// | This source file is subject to version 2.02 of the PHP license, |
-// | that is bundled with this package in the file LICENSE, and is |
-// | available at through the world-wide-web at |
-// | http://www.php.net/license/2_02.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. |
-// +----------------------------------------------------------------------+
-// | Authors: Shane Caraveo <Shane@Caraveo.com> |
-// +----------------------------------------------------------------------+
-//
-// $Id$
-//
-
-class SOAP_Interop_GroupC {
- var $method_namespace = 'http://soapinterop.org/echoheader/';
-
- function echoMeStringRequest($string)
- {
- return new SoapHeader($this->method_namespace, "echoMeStringResponse", $string);
- }
-
- function echoMeStructRequest($struct)
- {
- return new SoapHeader($this->method_namespace, "echoMeStructResponse", $struct);
- }
-
- function echoVoid()
- {
- }
-}
-
-$server = new SoapServer((isset($_SERVER['HTTPS'])?"https://":"http://").$_SERVER['HTTP_HOST'].dirname($_SERVER['PHP_SELF'])."/echoheadersvc.wsdl.php");
-$server->setClass("SOAP_Interop_GroupC");
-$server->handle();
-?> \ No newline at end of file
diff --git a/ext/soap/interop/test.utility.php b/ext/soap/interop/test.utility.php
deleted file mode 100644
index 5b1f699c9b..0000000000
--- a/ext/soap/interop/test.utility.php
+++ /dev/null
@@ -1,143 +0,0 @@
-<?php
-
-function timestamp_to_soap_datetime($t) {
- return date('Y-m-d\TH:i:sO',$t);
-}
-
-function soap_datetime_to_timestamp($t) {
- /* Ignore Microsecconds */
- $iso8601 = '(-?[0-9]{4})-([0-9]{2})-([0-9]{2})T([0-9]{2}):([0-9]{2}):([0-9]{2})(\.[0-9]*)?(Z|[+\-][0-9]{4}|[+\-][0-9]{2}:[0-9]{2})?';
- if (!is_int($t)) {
- if (!ereg($iso8601,$t,$r)) {
- return false;
- }
- $t = gmmktime($r[4],$r[5],$r[6],$r[2],$r[3],$r[1]);
- if (!empty($r[8]) && $r[8] != 'Z') {
- $op = substr($r[8],0,1);
- $h = substr($r[8],1,2);
- if (strstr($r[8],':')) {
- $m = substr($r[8],4,2);
- } else {
- $m = substr($r[8],3,2);
- }
- $t += (($op == "-"?1:-1) * $h * 60 + $m) * 60;
- }
- }
- return $t;
-}
-
-function date_compare($f1,$f2)
-{
- return soap_datetime_to_timestamp($f1) == soap_datetime_to_timestamp($f2);
-}
-
-function hex_compare($f1, $f2)
-{
- return strcasecmp($f1,$f2) == 0;
-}
-
-function number_compare($f1, $f2)
-{
- # figure out which has the least fractional digits
- preg_match('/.*?\.(.*)/',$f1,$m1);
- preg_match('/.*?\.(.*)/',$f2,$m2);
- #print_r($m1);
- # always use at least 2 digits of precision
- $d = max(min(strlen(count($m1)?$m1[1]:'0'),strlen(count($m2)?$m2[1]:'0')),2);
- $f1 = round($f1, $d);
- $f2 = round($f2, $d);
- return $f1 == $f2;
-// return bccomp($f1, $f2, $d) == 0;
-}
-
-function boolean_compare($f1, $f2)
-{
- if (($f1 == 'true' || $f1 === TRUE || $f1 != 0) &&
- ($f2 == 'true' || $f2 === TRUE || $f2 != 0)) return TRUE;
- if (($f1 == 'false' || $f1 === FALSE || $f1 == 0) &&
- ($f2 == 'false' || $f2 === FALSE || $f2 == 0)) return TRUE;
- return FALSE;
-}
-
-function string_compare($e1, $e2)
-{
- if (is_numeric($e1) && is_numeric($e2)) {
- return number_compare($e1, $e2);
- }
- # handle dateTime comparison
- $e1_type = gettype($e1);
- $e2_type = gettype($e2);
- $ok = FALSE;
- if ($e1_type == "string") {
-// $dt = new SOAP_Type_dateTime();
-// $ok = $dt->compare($e1, $e2) == 0;
- $oj = false;
- }
- return $ok || $e1 == $e2 || strcasecmp(trim($e1), trim($e2)) == 0;
-}
-
-function array_compare(&$ar1, &$ar2) {
- if (gettype($ar1) != 'array' || gettype($ar2) != 'array') return FALSE;
- if (count($ar1) != count($ar2)) return FALSE;
- foreach ($ar1 as $k => $v) {
- if (!array_key_exists($k,$ar2)) return FALSE;
- if (!compare($v,$ar2[$k])) return FALSE;
- }
- return TRUE;
-}
-
-function object_compare(&$obj1, &$obj2) {
- if (gettype($obj1) != 'object' || gettype($obj2) != 'object') return FALSE;
-// if (class_name(obj1) != class_name(obj2)) return FALSE;
- $ar1 = (array)$obj1;
- $ar2 = (array)$obj2;
- return array_compare($ar1,$ar2);
-}
-
-function compare(&$x,&$y) {
- $ok = 0;
- $x_type = gettype($x);
- $y_type = gettype($y);
- if ($x_type == $y_type) {
- if ($x_type == "array") {
- $ok = array_compare($x, $y);
- } else if ($x_type == "object") {
- $ok = object_compare($x, $y);
- } else if ($x_type == "double") {
- $ok = number_compare($x, $y);
-// } else if ($x_type == 'boolean') {
-// $ok = boolean_compare($x, $y);
- } else {
- $ok = ($x == $y);
-// $ok = string_compare($expect, $result);
- }
- }
- return $ok;
-}
-
-
-function parseMessage($msg)
-{
- # strip line endings
- #$msg = preg_replace('/\r|\n/', ' ', $msg);
- $response = new SOAP_Parser($msg);
- if ($response->fault) {
- return $response->fault->getFault();
- }
- $return = $response->getResponse();
- $v = $response->decode($return);
- if (gettype($v) == 'array' && count($v)==1) {
- return array_shift($v);
- }
- return $v;
-}
-
-function var_dump_str($var) {
- ob_start();
- var_dump($var);
- $res = ob_get_contents();
- ob_end_clean();
- return $res;
-}
-
-?> \ No newline at end of file
diff --git a/ext/soap/package.xml b/ext/soap/package.xml
deleted file mode 100644
index e43fd36024..0000000000
--- a/ext/soap/package.xml
+++ /dev/null
@@ -1,64 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1" ?>
-<!-- do not use the "Type" attribute here, that one is only for
- generated package.xml files -->
-<package>
- <name>ext_soap</name>
- <summary>Provides SOAP Services</summary>
- <description>
- Description of package....
- </description>
- <status>beta</status>
- <maintainers>
- <maintainer>
- <user>rodif_bl</user>
- <name>Brad Lafountain</name>
- <email>rodif_bl@yahoo.com</email>
- <role>lead</role>
- </maintainer>
- <maintainer>
- <user>shane</user>
- <name>Shane Caraveo</name>
- <email>shane@caraveo.com</email>
- <role>lead</role>
- </maintainer>
- <maintainer>
- <user>dmitry</user>
- <name>Dmitry Stogov</name>
- <email>dmitry@zend.com</email>
- <role>lead</role>
- </maintainer>
- </maintainers>
- <license>PHP</license>
- <release>
- <version>0.1</version>
- <date>2002-07-07</date>
- <state>alpha</state>
- <notes>
- - First offical PEAR/PECL release
- </notes>
- </release>
- <filelist>
- <dir name="/">
- <file role="doc">CREDITS</file>
- <file role="doc">EXPERIMENTAL</file>
- <file role="doc">TODO</file>
- <file role="src">config.m4</file>
- <file role="src">php_encoding.c</file>
- <file role="src">php_encoding.h</file>
- <file role="src">php_http.c</file>
- <file role="src">php_http.h</file>
- <file role="src">php_packet_soap.c</file>
- <file role="src">php_packet_soap.h</file>
- <file role="src">php_schema.c</file>
- <file role="src">php_schema.h</file>
- <file role="src">php_sdl.c</file>
- <file role="src">php_sdl.h</file>
- <file role="src">php_soap.h</file>
- <file role="src">php_soap.h</file>
- <file role="src">php_xml.c</file>
- <file role="src">php_xml.h</file>
- <file role="src">soap.c</file>
- <file role="src">php_soap.dsp</file>
- </dir>
- </filelist>
-</package>
diff --git a/ext/soap/php_encoding.c b/ext/soap/php_encoding.c
deleted file mode 100644
index 9978612868..0000000000
--- a/ext/soap/php_encoding.c
+++ /dev/null
@@ -1,2873 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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. |
- +----------------------------------------------------------------------+
- | Authors: Brad Lafountain <rodif_bl@yahoo.com> |
- | Shane Caraveo <shane@caraveo.com> |
- | Dmitry Stogov <dmitry@zend.com> |
- +----------------------------------------------------------------------+
-*/
-/* $Id$ */
-
-#include <time.h>
-
-#include "php_soap.h"
-
-/* zval type decode */
-static zval *to_zval_double(encodeTypePtr type, xmlNodePtr data);
-static zval *to_zval_long(encodeTypePtr type, xmlNodePtr data);
-static zval *to_zval_ulong(encodeTypePtr type, xmlNodePtr data);
-static zval *to_zval_bool(encodeTypePtr type, xmlNodePtr data);
-static zval *to_zval_string(encodeTypePtr type, xmlNodePtr data);
-static zval *to_zval_stringr(encodeTypePtr type, xmlNodePtr data);
-static zval *to_zval_stringc(encodeTypePtr type, xmlNodePtr data);
-static zval *to_zval_stringb(encodeTypePtr type, xmlNodePtr data);
-static zval *to_zval_map(encodeTypePtr type, xmlNodePtr data);
-static zval *to_zval_null(encodeTypePtr type, xmlNodePtr data);
-
-static xmlNodePtr to_xml_long(encodeTypePtr type, zval *data, int style, xmlNodePtr parent);
-static xmlNodePtr to_xml_ulong(encodeTypePtr type, zval *data, int style, xmlNodePtr parent);
-static xmlNodePtr to_xml_double(encodeTypePtr type, zval *data, int style, xmlNodePtr parent);
-static xmlNodePtr to_xml_bool(encodeTypePtr type, zval *data, int style, xmlNodePtr parent);
-
-/* String encode */
-static xmlNodePtr to_xml_string(encodeTypePtr type, zval *data, int style, xmlNodePtr parent);
-static xmlNodePtr to_xml_stringl(encodeTypePtr type, zval *data, int style, xmlNodePtr parent);
-
-/* Null encode */
-static xmlNodePtr to_xml_null(encodeTypePtr type, zval *data, int style, xmlNodePtr parent);
-
-/* Array encode */
-static xmlNodePtr guess_array_map(encodeTypePtr type, zval *data, int style, xmlNodePtr parent);
-static xmlNodePtr to_xml_map(encodeTypePtr type, zval *data, int style, xmlNodePtr parent);
-
-static xmlNodePtr to_xml_list(encodeTypePtr enc, zval *data, int style, xmlNodePtr parent);
-static xmlNodePtr to_xml_list1(encodeTypePtr enc, zval *data, int style, xmlNodePtr parent);
-
-/* Datetime encode/decode */
-static xmlNodePtr to_xml_datetime_ex(encodeTypePtr type, zval *data, char *format, int style, xmlNodePtr parent);
-static xmlNodePtr to_xml_datetime(encodeTypePtr type, zval *data, int style, xmlNodePtr parent);
-static xmlNodePtr to_xml_time(encodeTypePtr type, zval *data, int style, xmlNodePtr parent);
-static xmlNodePtr to_xml_date(encodeTypePtr type, zval *data, int style, xmlNodePtr parent);
-static xmlNodePtr to_xml_gyearmonth(encodeTypePtr type, zval *data, int style, xmlNodePtr parent);
-static xmlNodePtr to_xml_gyear(encodeTypePtr type, zval *data, int style, xmlNodePtr parent);
-static xmlNodePtr to_xml_gmonthday(encodeTypePtr type, zval *data, int style, xmlNodePtr parent);
-static xmlNodePtr to_xml_gday(encodeTypePtr type, zval *data, int style, xmlNodePtr parent);
-static xmlNodePtr to_xml_gmonth(encodeTypePtr type, zval *data, int style, xmlNodePtr parent);
-static xmlNodePtr to_xml_duration(encodeTypePtr type, zval *data, int style, xmlNodePtr parent);
-
-static zval *to_zval_object(encodeTypePtr type, xmlNodePtr data);
-static zval *to_zval_array(encodeTypePtr type, xmlNodePtr data);
-
-static xmlNodePtr to_xml_object(encodeTypePtr type, zval *data, int style, xmlNodePtr parent);
-static xmlNodePtr to_xml_array(encodeTypePtr type, zval *data, int style, xmlNodePtr parent);
-
-/* Try and guess for non-wsdl clients and servers */
-static zval *guess_zval_convert(encodeTypePtr type, xmlNodePtr data);
-static xmlNodePtr guess_xml_convert(encodeTypePtr type, zval *data, int style, xmlNodePtr parent);
-
-static int is_map(zval *array);
-static void get_array_type(xmlNodePtr node, zval *array, smart_str *out_type TSRMLS_DC);
-
-static xmlNodePtr check_and_resolve_href(xmlNodePtr data);
-
-static encodePtr get_conversion(int encode);
-
-static void get_type_str(xmlNodePtr node, const char* ns, const char* type, smart_str* ret);
-static void set_ns_and_type_ex(xmlNodePtr node, char *ns, char *type);
-
-static void set_ns_and_type(xmlNodePtr node, encodeTypePtr type);
-
-#define FIND_XML_NULL(xml,zval) \
- { \
- xmlAttrPtr null; \
- if (!xml) { \
- ZVAL_NULL(zval); \
- return zval; \
- } \
- if (xml->properties) { \
- null = get_attribute(xml->properties, "nil"); \
- if (null) { \
- ZVAL_NULL(zval); \
- return zval; \
- } \
- } \
- }
-
-#define FIND_ZVAL_NULL(zval, xml, style) \
-{ \
- if (!zval || Z_TYPE_P(zval) == IS_NULL) { \
- if (style == SOAP_ENCODED) {\
- xmlSetProp(xml, "xsi:nil", "1"); \
- } \
- return xml; \
- } \
-}
-
-encode defaultEncoding[] = {
- {{UNKNOWN_TYPE, NULL, NULL, NULL}, guess_zval_convert, guess_xml_convert},
-
- {{IS_NULL, "nil", XSI_NAMESPACE, NULL}, to_zval_null, to_xml_null},
- {{IS_STRING, XSD_STRING_STRING, XSD_NAMESPACE, NULL}, to_zval_string, to_xml_string},
- {{IS_LONG, XSD_INT_STRING, XSD_NAMESPACE, NULL}, to_zval_long, to_xml_long},
- {{IS_DOUBLE, XSD_FLOAT_STRING, XSD_NAMESPACE, NULL}, to_zval_double, to_xml_double},
- {{IS_BOOL, XSD_BOOLEAN_STRING, XSD_NAMESPACE, NULL}, to_zval_bool, to_xml_bool},
- {{IS_CONSTANT, XSD_STRING_STRING, XSD_NAMESPACE, NULL}, to_zval_string, to_xml_string},
- {{IS_ARRAY, SOAP_ENC_ARRAY_STRING, SOAP_1_1_ENC_NAMESPACE, NULL}, to_zval_array, guess_array_map},
- {{IS_CONSTANT_ARRAY, SOAP_ENC_ARRAY_STRING, SOAP_1_1_ENC_NAMESPACE, NULL}, to_zval_array, to_xml_array},
- {{IS_OBJECT, SOAP_ENC_OBJECT_STRING, SOAP_1_1_ENC_NAMESPACE, NULL}, to_zval_object, to_xml_object},
- {{IS_ARRAY, SOAP_ENC_ARRAY_STRING, SOAP_1_2_ENC_NAMESPACE, NULL}, to_zval_array, guess_array_map},
- {{IS_CONSTANT_ARRAY, SOAP_ENC_ARRAY_STRING, SOAP_1_2_ENC_NAMESPACE, NULL}, to_zval_array, to_xml_array},
- {{IS_OBJECT, SOAP_ENC_OBJECT_STRING, SOAP_1_2_ENC_NAMESPACE, NULL}, to_zval_object, to_xml_object},
-
- {{XSD_STRING, XSD_STRING_STRING, XSD_NAMESPACE, NULL}, to_zval_string, to_xml_string},
- {{XSD_BOOLEAN, XSD_BOOLEAN_STRING, XSD_NAMESPACE, NULL}, to_zval_bool, to_xml_bool},
- {{XSD_DECIMAL, XSD_DECIMAL_STRING, XSD_NAMESPACE, NULL}, to_zval_stringc, to_xml_string},
- {{XSD_FLOAT, XSD_FLOAT_STRING, XSD_NAMESPACE, NULL}, to_zval_double, to_xml_double},
- {{XSD_DOUBLE, XSD_DOUBLE_STRING, XSD_NAMESPACE, NULL}, to_zval_double, to_xml_double},
-
- {{XSD_DATETIME, XSD_DATETIME_STRING, XSD_NAMESPACE, NULL}, to_zval_stringc, to_xml_datetime},
- {{XSD_TIME, XSD_TIME_STRING, XSD_NAMESPACE, NULL}, to_zval_stringc, to_xml_time},
- {{XSD_DATE, XSD_DATE_STRING, XSD_NAMESPACE, NULL}, to_zval_stringc, to_xml_date},
- {{XSD_GYEARMONTH, XSD_GYEARMONTH_STRING, XSD_NAMESPACE, NULL}, to_zval_stringc, to_xml_gyearmonth},
- {{XSD_GYEAR, XSD_GYEAR_STRING, XSD_NAMESPACE, NULL}, to_zval_stringc, to_xml_gyear},
- {{XSD_GMONTHDAY, XSD_GMONTHDAY_STRING, XSD_NAMESPACE, NULL}, to_zval_stringc, to_xml_gmonthday},
- {{XSD_GDAY, XSD_GDAY_STRING, XSD_NAMESPACE, NULL}, to_zval_stringc, to_xml_gday},
- {{XSD_GMONTH, XSD_GMONTH_STRING, XSD_NAMESPACE, NULL}, to_zval_stringc, to_xml_gmonth},
- {{XSD_DURATION, XSD_DURATION_STRING, XSD_NAMESPACE, NULL}, to_zval_stringc, to_xml_duration},
-
- {{XSD_HEXBINARY, XSD_HEXBINARY_STRING, XSD_NAMESPACE, NULL}, to_zval_stringb, to_xml_stringl},
- {{XSD_BASE64BINARY, XSD_BASE64BINARY_STRING, XSD_NAMESPACE, NULL}, to_zval_stringb, to_xml_stringl},
-
- {{XSD_LONG, XSD_LONG_STRING, XSD_NAMESPACE, NULL}, to_zval_long, to_xml_long},
- {{XSD_INT, XSD_INT_STRING, XSD_NAMESPACE, NULL}, to_zval_long, to_xml_long},
- {{XSD_SHORT, XSD_SHORT_STRING, XSD_NAMESPACE, NULL}, to_zval_long, to_xml_long},
- {{XSD_BYTE, XSD_BYTE_STRING, XSD_NAMESPACE, NULL}, to_zval_long, to_xml_long},
- {{XSD_NONPOSITIVEINTEGER, XSD_NONPOSITIVEINTEGER_STRING, XSD_NAMESPACE, NULL}, to_zval_long, to_xml_long},
- {{XSD_POSITIVEINTEGER, XSD_POSITIVEINTEGER_STRING, XSD_NAMESPACE, NULL}, to_zval_long, to_xml_long},
- {{XSD_NONNEGATIVEINTEGER, XSD_NONNEGATIVEINTEGER_STRING, XSD_NAMESPACE, NULL}, to_zval_long, to_xml_long},
- {{XSD_NEGATIVEINTEGER, XSD_NEGATIVEINTEGER_STRING, XSD_NAMESPACE, NULL}, to_zval_long, to_xml_long},
- {{XSD_UNSIGNEDBYTE, XSD_UNSIGNEDBYTE_STRING, XSD_NAMESPACE, NULL}, to_zval_long, to_xml_long},
- {{XSD_UNSIGNEDSHORT, XSD_UNSIGNEDSHORT_STRING, XSD_NAMESPACE, NULL}, to_zval_long, to_xml_long},
- {{XSD_UNSIGNEDINT, XSD_UNSIGNEDINT_STRING, XSD_NAMESPACE, NULL}, to_zval_long, to_xml_long},
- {{XSD_UNSIGNEDLONG, XSD_UNSIGNEDLONG_STRING, XSD_NAMESPACE, NULL}, to_zval_ulong, to_xml_ulong},
-
- {{XSD_ANYTYPE, XSD_ANYTYPE_STRING, XSD_NAMESPACE, NULL}, guess_zval_convert, guess_xml_convert},
- {{XSD_UR_TYPE, XSD_UR_TYPE_STRING, XSD_NAMESPACE, NULL}, guess_zval_convert, guess_xml_convert},
- {{XSD_ANYURI, XSD_ANYURI_STRING, XSD_NAMESPACE, NULL}, to_zval_stringc, to_xml_string},
- {{XSD_QNAME, XSD_QNAME_STRING, XSD_NAMESPACE, NULL}, to_zval_stringc, to_xml_string},
- {{XSD_NOTATION, XSD_NOTATION_STRING, XSD_NAMESPACE, NULL}, to_zval_stringc, to_xml_string},
- {{XSD_NORMALIZEDSTRING, XSD_NORMALIZEDSTRING_STRING, XSD_NAMESPACE, NULL}, to_zval_stringr, to_xml_string},
- {{XSD_TOKEN, XSD_TOKEN_STRING, XSD_NAMESPACE, NULL}, to_zval_stringc, to_xml_string},
- {{XSD_LANGUAGE, XSD_LANGUAGE_STRING, XSD_NAMESPACE, NULL}, to_zval_stringc, to_xml_string},
- {{XSD_NMTOKEN, XSD_NMTOKEN_STRING, XSD_NAMESPACE, NULL}, to_zval_stringc, to_xml_string},
- {{XSD_NMTOKENS, XSD_NMTOKENS_STRING, XSD_NAMESPACE, NULL}, to_zval_stringc, to_xml_list1},
- {{XSD_NAME, XSD_NAME_STRING, XSD_NAMESPACE, NULL}, to_zval_stringc, to_xml_string},
- {{XSD_NCNAME, XSD_NCNAME_STRING, XSD_NAMESPACE, NULL}, to_zval_stringc, to_xml_string},
- {{XSD_ID, XSD_ID_STRING, XSD_NAMESPACE, NULL}, to_zval_stringc, to_xml_string},
- {{XSD_IDREF, XSD_IDREF_STRING, XSD_NAMESPACE, NULL}, to_zval_stringc, to_xml_string},
- {{XSD_IDREFS, XSD_IDREFS_STRING, XSD_NAMESPACE, NULL}, to_zval_stringc, to_xml_list1},
- {{XSD_ENTITY, XSD_ENTITY_STRING, XSD_NAMESPACE, NULL}, to_zval_stringc, to_xml_string},
- {{XSD_ENTITIES, XSD_ENTITIES_STRING, XSD_NAMESPACE, NULL}, to_zval_stringc, to_xml_list1},
-
- {{APACHE_MAP, APACHE_MAP_STRING, APACHE_NAMESPACE, NULL}, to_zval_map, to_xml_map},
-
- {{SOAP_ENC_OBJECT, SOAP_ENC_OBJECT_STRING, SOAP_1_1_ENC_NAMESPACE, NULL}, to_zval_object, to_xml_object},
- {{SOAP_ENC_ARRAY, SOAP_ENC_ARRAY_STRING, SOAP_1_1_ENC_NAMESPACE, NULL}, to_zval_array, to_xml_array},
- {{SOAP_ENC_OBJECT, SOAP_ENC_OBJECT_STRING, SOAP_1_2_ENC_NAMESPACE, NULL}, to_zval_object, to_xml_object},
- {{SOAP_ENC_ARRAY, SOAP_ENC_ARRAY_STRING, SOAP_1_2_ENC_NAMESPACE, NULL}, to_zval_array, to_xml_array},
-
- /* support some of the 1999 data types */
- {{XSD_STRING, XSD_STRING_STRING, XSD_1999_NAMESPACE, NULL}, to_zval_string, to_xml_string},
- {{XSD_BOOLEAN, XSD_BOOLEAN_STRING, XSD_1999_NAMESPACE, NULL}, to_zval_bool, to_xml_bool},
- {{XSD_DECIMAL, XSD_DECIMAL_STRING, XSD_1999_NAMESPACE, NULL}, to_zval_stringc, to_xml_string},
- {{XSD_FLOAT, XSD_FLOAT_STRING, XSD_1999_NAMESPACE, NULL}, to_zval_double, to_xml_double},
- {{XSD_DOUBLE, XSD_DOUBLE_STRING, XSD_1999_NAMESPACE, NULL}, to_zval_double, to_xml_double},
-
- {{XSD_LONG, XSD_LONG_STRING, XSD_1999_NAMESPACE, NULL}, to_zval_long, to_xml_long},
- {{XSD_INT, XSD_INT_STRING, XSD_1999_NAMESPACE, NULL}, to_zval_long, to_xml_long},
- {{XSD_SHORT, XSD_SHORT_STRING, XSD_1999_NAMESPACE, NULL}, to_zval_long, to_xml_long},
- {{XSD_BYTE, XSD_BYTE_STRING, XSD_1999_NAMESPACE, NULL}, to_zval_long, to_xml_long},
- {{XSD_1999_TIMEINSTANT, XSD_1999_TIMEINSTANT_STRING, XSD_1999_NAMESPACE, NULL}, to_zval_stringc, to_xml_string},
-
- {{END_KNOWN_TYPES, NULL, NULL, NULL}, guess_zval_convert, guess_xml_convert}
-};
-
-void whiteSpace_replace(char* str)
-{
- while (*str != '\0') {
- if (*str == '\x9' || *str == '\xA' || *str == '\xD') {
- *str = ' ';
- }
- str++;
- }
-}
-
-void whiteSpace_collapse(char* str)
-{
- char *pos;
- char old;
-
- pos = str;
- whiteSpace_replace(str);
- while (*str == ' ') {
- str++;
- }
- old = '\0';
- while (*str != '\0') {
- if (*str != ' ' || old != ' ') {
- *pos = *str;
- pos++;
- }
- old = *str;
- str++;
- }
- if (old == ' ') {
- --pos;
- }
- *pos = '\0';
-}
-
-xmlNodePtr master_to_xml(encodePtr encode, zval *data, int style, xmlNodePtr parent)
-{
- xmlNodePtr node = NULL;
- TSRMLS_FETCH();
-
- /* Special handling of class SoapVar */
- if (data &&
- Z_TYPE_P(data) == IS_OBJECT &&
- Z_OBJCE_P(data) == soap_var_class_entry) {
- zval **ztype, **zdata, **zns, **zstype, **zname, **znamens;
- encodePtr enc = NULL;
- HashTable *ht = Z_OBJPROP_P(data);
-
- if (zend_hash_find(ht, "enc_type", sizeof("enc_type"), (void **)&ztype) == FAILURE) {
- soap_error0(E_ERROR, "Encoding: SoapVar hasn't 'enc_type' propery");
- }
-
- if (SOAP_GLOBAL(sdl) && encode == NULL) {
- if (zend_hash_find(ht, "enc_stype", sizeof("enc_stype"), (void **)&zstype) == SUCCESS) {
- if (zend_hash_find(ht, "enc_ns", sizeof("enc_ns"), (void **)&zns) == SUCCESS) {
- enc = get_encoder(SOAP_GLOBAL(sdl), Z_STRVAL_PP(zns), Z_STRVAL_PP(zstype));
- } else {
- enc = get_encoder(SOAP_GLOBAL(sdl), NULL, Z_STRVAL_PP(zstype));
- }
- }
- }
- if (enc == NULL) {
- enc = get_conversion(Z_LVAL_P(*ztype));
- }
-
- if (zend_hash_find(ht, "enc_value", sizeof("enc_value"), (void **)&zdata) == FAILURE) {
- node = master_to_xml(enc, NULL, style, parent);
- } else {
- node = master_to_xml(enc, *zdata, style, parent);
- }
-
- if (style == SOAP_ENCODED || (SOAP_GLOBAL(sdl) && encode == NULL)) {
- if (zend_hash_find(ht, "enc_stype", sizeof("enc_stype"), (void **)&zstype) == SUCCESS) {
- if (style == SOAP_LITERAL) {
- encode_add_ns(node, XSI_NAMESPACE);
- }
- if (zend_hash_find(ht, "enc_ns", sizeof("enc_ns"), (void **)&zns) == SUCCESS) {
- set_ns_and_type_ex(node, Z_STRVAL_PP(zns), Z_STRVAL_PP(zstype));
- } else {
- set_ns_and_type_ex(node, NULL, Z_STRVAL_PP(zstype));
- }
- }
- }
-
- if (zend_hash_find(ht, "enc_name", sizeof("enc_name"), (void **)&zname) == SUCCESS) {
- xmlNodeSetName(node, Z_STRVAL_PP(zname));
- }
- if (zend_hash_find(ht, "enc_namens", sizeof("enc_namens"), (void **)&znamens) == SUCCESS) {
- xmlNsPtr nsp = encode_add_ns(node, Z_STRVAL_PP(znamens));
- xmlSetNs(node, nsp);
- }
- } else {
- if (encode == NULL) {
- encode = get_conversion(UNKNOWN_TYPE);
- }
- if (encode->to_xml_before) {
- data = encode->to_xml_before(&encode->details, data);
- }
- if (encode->to_xml) {
- node = encode->to_xml(&encode->details, data, style, parent);
- }
- if (encode->to_xml_after) {
- node = encode->to_xml_after(&encode->details, node, style);
- }
- }
- return node;
-}
-
-zval *master_to_zval(encodePtr encode, xmlNodePtr data)
-{
- zval *ret = NULL;
- TSRMLS_FETCH();
-
- if (encode == NULL) {
- encode = get_conversion(UNKNOWN_TYPE);
- }
- data = check_and_resolve_href(data);
- if (encode->to_zval_before) {
- data = encode->to_zval_before(&encode->details, data, 0);
- }
- if (encode->to_zval) {
- ret = encode->to_zval(&encode->details, data);
- }
- if (encode->to_zval_after) {
- ret = encode->to_zval_after(&encode->details, ret);
- }
- return ret;
-}
-
-#ifdef HAVE_PHP_DOMXML
-zval *to_xml_before_user(encodeTypePtr type, zval *data)
-{
- TSRMLS_FETCH();
-
- if (type.map->map_functions.to_xml_before) {
- if (call_user_function(EG(function_table), NULL, type.map->map_functions.to_xml_before, data, 1, &data TSRMLS_CC) == FAILURE) {
- soap_error0(E_ERROR, "Encoding: Error calling to_xml_before");
- }
- }
- return data;
-}
-
-xmlNodePtr to_xml_user(encodeTypePtr type, zval *data, int style, xmlNodePtr parent)
-{
- zval *ret, **addr;
- xmlNodePtr node;
- TSRMLS_FETCH();
-
- if (type.map->map_functions.to_xml) {
- MAKE_STD_ZVAL(ret);
- if (call_user_function(EG(function_table), NULL, type.map->map_functions.to_xml, ret, 1, &data TSRMLS_CC) == FAILURE) {
- soap_error0(E_ERROR, "Encoding: Error calling to_xml");
- }
-
- if (Z_TYPE_P(ret) != IS_OBJECT) {
- soap_error0(E_ERROR, "Encoding: Error serializing object from to_xml_user");
- }
-
- if (zend_hash_index_find(Z_OBJPROP_P(ret), 1, (void **)&addr) == SUCCESS) {
- node = (xmlNodePtr)Z_LVAL_PP(addr);
- node = xmlCopyNode(node, 1);
- set_ns_and_type(node, type);
- }
- zval_ptr_dtor(&ret);
- }
- return node;
-}
-
-xmlNodePtr to_xml_after_user(encodeTypePtr type, xmlNodePtr node, int style)
-{
- zval *ret, *param, **addr;
- int found;
- TSRMLS_FETCH();
-
- if (type.map->map_functions.to_xml_after) {
- MAKE_STD_ZVAL(ret);
- MAKE_STD_ZVAL(param);
- param = php_domobject_new(node, &found, NULL TSRMLS_CC);
-
- if (call_user_function(EG(function_table), NULL, type.map->map_functions.to_xml_after, ret, 1, &param TSRMLS_CC) == FAILURE) {
- soap_error0(E_ERROR, "Encoding: Error calling to_xml_after");
- }
- if (zend_hash_index_find(Z_OBJPROP_P(ret), 1, (void **)&addr) == SUCCESS) {
- node = (xmlNodePtr)Z_LVAL_PP(addr);
- set_ns_and_type(node, type);
- }
- zval_ptr_dtor(&ret);
- zval_ptr_dtor(&param);
- }
- return node;
-}
-
-xmlNodePtr to_zval_before_user(encodeTypePtr type, xmlNodePtr node, int style)
-{
- zval *ret, *param, **addr;
- int found;
- TSRMLS_FETCH();
-
- if (type.map->map_functions.to_zval_before) {
- MAKE_STD_ZVAL(ret);
- MAKE_STD_ZVAL(param);
- param = php_domobject_new(node, &found, NULL TSRMLS_CC);
-
- if (call_user_function(EG(function_table), NULL, type.map->map_functions.to_zval_before, ret, 1, &param TSRMLS_CC) == FAILURE) {
- soap_error0(E_ERROR, "Encoding: Error calling to_zval_before");
- }
- if (zend_hash_index_find(Z_OBJPROP_P(ret), 1, (void **)&addr) == SUCCESS) {
- node = (xmlNodePtr)Z_LVAL_PP(addr);
- set_ns_and_type(node, type);
- }
- zval_ptr_dtor(&ret);
- zval_ptr_dtor(&param);
- }
- return node;
-}
-
-zval *to_zval_user(encodeTypePtr type, xmlNodePtr node)
-{
- zval *ret, *param;
- int found;
- TSRMLS_FETCH();
-
- if (type.map->map_functions.to_zval) {
- MAKE_STD_ZVAL(ret);
- MAKE_STD_ZVAL(param);
- param = php_domobject_new(node, &found, NULL TSRMLS_CC);
-
- if (call_user_function(EG(function_table), NULL, type.map->map_functions.to_zval, ret, 1, &param TSRMLS_CC) == FAILURE) {
- soap_error0(E_ERROR, "Encoding: Error calling to_zval");
- }
- zval_ptr_dtor(&param);
- efree(param);
- }
- return ret;
-}
-
-zval *to_zval_after_user(encodeTypePtr type, zval *data)
-{
- TSRMLS_FETCH();
-
- if (type.map->map_functions.to_zval_after) {
- if (call_user_function(EG(function_table), NULL, type.map->map_functions.to_zval_after, data, 1, &data TSRMLS_CC) == FAILURE) {
- soap_error0(E_ERROR, "Encoding: Error calling to_zval_after");
- }
- }
- return data;
-}
-#endif
-
-/* TODO: get rid of "bogus".. ither by passing in the already created xmlnode or passing in the node name */
-/* String encode/decode */
-static zval *to_zval_string(encodeTypePtr type, xmlNodePtr data)
-{
- zval *ret;
- MAKE_STD_ZVAL(ret);
- FIND_XML_NULL(data, ret);
- if (data && data->children) {
- if (data->children->type == XML_TEXT_NODE && data->children->next == NULL) {
- TSRMLS_FETCH();
-
- if (SOAP_GLOBAL(encoding) != NULL) {
- xmlBufferPtr in = xmlBufferCreateStatic(data->children->content, strlen(data->children->content));
- xmlBufferPtr out = xmlBufferCreate();
- int n = xmlCharEncOutFunc(SOAP_GLOBAL(encoding), out, in);
-
- if (n >= 0) {
- ZVAL_STRING(ret, (char*)xmlBufferContent(out), 1);
- } else {
- ZVAL_STRING(ret, data->children->content, 1);
- }
- xmlBufferFree(out);
- xmlBufferFree(in);
- } else {
- ZVAL_STRING(ret, data->children->content, 1);
- }
- } else if (data->children->type == XML_CDATA_SECTION_NODE && data->children->next == NULL) {
- ZVAL_STRING(ret, data->children->content, 1);
- } else {
- soap_error0(E_ERROR, "Encoding: Violation of encoding rules");
- }
- } else {
- ZVAL_EMPTY_STRING(ret);
- }
- return ret;
-}
-
-static zval *to_zval_stringr(encodeTypePtr type, xmlNodePtr data)
-{
- zval *ret;
- MAKE_STD_ZVAL(ret);
- FIND_XML_NULL(data, ret);
- if (data && data->children) {
- if (data->children->type == XML_TEXT_NODE && data->children->next == NULL) {
- TSRMLS_FETCH();
-
- whiteSpace_replace(data->children->content);
- if (SOAP_GLOBAL(encoding) != NULL) {
- xmlBufferPtr in = xmlBufferCreateStatic(data->children->content, strlen(data->children->content));
- xmlBufferPtr out = xmlBufferCreate();
- int n = xmlCharEncOutFunc(SOAP_GLOBAL(encoding), out, in);
-
- if (n >= 0) {
- ZVAL_STRING(ret, (char*)xmlBufferContent(out), 1);
- } else {
- ZVAL_STRING(ret, data->children->content, 1);
- }
- xmlBufferFree(out);
- xmlBufferFree(in);
- } else {
- ZVAL_STRING(ret, data->children->content, 1);
- }
- } else if (data->children->type == XML_CDATA_SECTION_NODE && data->children->next == NULL) {
- ZVAL_STRING(ret, data->children->content, 1);
- } else {
- soap_error0(E_ERROR, "Encoding: Violation of encoding rules");
- }
- } else {
- ZVAL_EMPTY_STRING(ret);
- }
- return ret;
-}
-
-static zval *to_zval_stringc(encodeTypePtr type, xmlNodePtr data)
-{
- zval *ret;
- MAKE_STD_ZVAL(ret);
- FIND_XML_NULL(data, ret);
- if (data && data->children) {
- if (data->children->type == XML_TEXT_NODE && data->children->next == NULL) {
- TSRMLS_FETCH();
-
- whiteSpace_collapse(data->children->content);
- if (SOAP_GLOBAL(encoding) != NULL) {
- xmlBufferPtr in = xmlBufferCreateStatic(data->children->content, strlen(data->children->content));
- xmlBufferPtr out = xmlBufferCreate();
- int n = xmlCharEncOutFunc(SOAP_GLOBAL(encoding), out, in);
-
- if (n >= 0) {
- ZVAL_STRING(ret, (char*)xmlBufferContent(out), 1);
- } else {
- ZVAL_STRING(ret, data->children->content, 1);
- }
- xmlBufferFree(out);
- xmlBufferFree(in);
- } else {
- ZVAL_STRING(ret, data->children->content, 1);
- }
- } else if (data->children->type == XML_CDATA_SECTION_NODE && data->children->next == NULL) {
- ZVAL_STRING(ret, data->children->content, 1);
- } else {
- soap_error0(E_ERROR, "Encoding: Violation of encoding rules");
- }
- } else {
- ZVAL_EMPTY_STRING(ret);
- }
- return ret;
-}
-
-static zval *to_zval_stringb(encodeTypePtr type, xmlNodePtr data)
-{
- zval *ret;
- MAKE_STD_ZVAL(ret);
- FIND_XML_NULL(data, ret);
- if (data && data->children) {
- if (data->children->type == XML_TEXT_NODE && data->children->next == NULL) {
- whiteSpace_collapse(data->children->content);
- ZVAL_STRING(ret, data->children->content, 1);
- } else if (data->children->type == XML_CDATA_SECTION_NODE && data->children->next == NULL) {
- ZVAL_STRING(ret, data->children->content, 1);
- } else {
- soap_error0(E_ERROR, "Encoding: Violation of encoding rules");
- }
- } else {
- ZVAL_EMPTY_STRING(ret);
- }
- return ret;
-}
-
-static xmlNodePtr to_xml_string(encodeTypePtr type, zval *data, int style, xmlNodePtr parent)
-{
- xmlNodePtr ret;
- char *str;
- int new_len;
- TSRMLS_FETCH();
-
- ret = xmlNewNode(NULL,"BOGUS");
- xmlAddChild(parent, ret);
- FIND_ZVAL_NULL(data, ret, style);
-
- if (Z_TYPE_P(data) == IS_STRING) {
- str = php_escape_html_entities(Z_STRVAL_P(data), Z_STRLEN_P(data), &new_len, 0, 0, NULL TSRMLS_CC);
- } else {
- zval tmp = *data;
-
- zval_copy_ctor(&tmp);
- convert_to_string(&tmp);
- str = php_escape_html_entities(Z_STRVAL(tmp), Z_STRLEN(tmp), &new_len, 0, 0, NULL TSRMLS_CC);
- zval_dtor(&tmp);
- }
-
- if (SOAP_GLOBAL(encoding) != NULL) {
- xmlBufferPtr in = xmlBufferCreateStatic(str, new_len);
- xmlBufferPtr out = xmlBufferCreate();
- int n = xmlCharEncInFunc(SOAP_GLOBAL(encoding), out, in);
-
- if (n >= 0) {
- efree(str);
- str = estrdup(xmlBufferContent(out));
- new_len = n;
- } else if (!xmlCheckUTF8(str)) {
- soap_error1(E_ERROR, "Encoding: string '%s' is not a valid utf-8 string", str);
- }
- xmlBufferFree(out);
- xmlBufferFree(in);
- } else if (!xmlCheckUTF8(str)) {
- soap_error1(E_ERROR, "Encoding: string '%s' is not a valid utf-8 string", str);
- }
-
- xmlNodeSetContentLen(ret, str, new_len);
- efree(str);
-
- if (style == SOAP_ENCODED) {
- set_ns_and_type(ret, type);
- }
- return ret;
-}
-
-static xmlNodePtr to_xml_stringl(encodeTypePtr type, zval *data, int style, xmlNodePtr parent)
-{
- xmlNodePtr ret;
-
- ret = xmlNewNode(NULL,"BOGUS");
- xmlAddChild(parent, ret);
- FIND_ZVAL_NULL(data, ret, style);
-
- if (Z_TYPE_P(data) == IS_STRING) {
- xmlNodeSetContentLen(ret, Z_STRVAL_P(data), Z_STRLEN_P(data));
- } else {
- zval tmp = *data;
-
- zval_copy_ctor(&tmp);
- convert_to_string(&tmp);
- xmlNodeSetContentLen(ret, Z_STRVAL(tmp), Z_STRLEN(tmp));
- zval_dtor(&tmp);
- }
-
- if (style == SOAP_ENCODED) {
- set_ns_and_type(ret, type);
- }
- return ret;
-}
-
-static zval *to_zval_double(encodeTypePtr type, xmlNodePtr data)
-{
- zval *ret;
- MAKE_STD_ZVAL(ret);
- FIND_XML_NULL(data, ret);
-
- if (data && data->children) {
- if (data->children->type == XML_TEXT_NODE && data->children->next == NULL) {
- whiteSpace_collapse(data->children->content);
- ZVAL_DOUBLE(ret, atof(data->children->content));
- } else {
- soap_error0(E_ERROR, "Encoding: Violation of encoding rules");
- }
- } else {
- ZVAL_NULL(ret);
- }
- return ret;
-}
-
-static zval *to_zval_long(encodeTypePtr type, xmlNodePtr data)
-{
- zval *ret;
- MAKE_STD_ZVAL(ret);
- FIND_XML_NULL(data, ret);
-
- if (data && data->children) {
- if (data->children->type == XML_TEXT_NODE && data->children->next == NULL) {
- whiteSpace_collapse(data->children->content);
- ZVAL_LONG(ret, atol(data->children->content));
- } else {
- soap_error0(E_ERROR, "Encoding: Violation of encoding rules");
- }
- } else {
- ZVAL_NULL(ret);
- }
- return ret;
-}
-
-static zval *to_zval_ulong(encodeTypePtr type, xmlNodePtr data)
-{
- zval *ret;
- MAKE_STD_ZVAL(ret);
- FIND_XML_NULL(data, ret);
-
- if (data && data->children) {
- if (data->children->type == XML_TEXT_NODE && data->children->next == NULL) {
- whiteSpace_collapse(data->children->content);
- errno = 0;
- ret->value.lval = strtol(data->children->content, NULL, 0);
- if (errno == ERANGE) { /* overflow */
- ret->value.dval = strtod(data->children->content, NULL);
- ret->type = IS_DOUBLE;
- } else {
- ret->type = IS_LONG;
- }
- } else {
- soap_error0(E_ERROR, "Encoding: Violation of encoding rules");
- }
- } else {
- ZVAL_NULL(ret);
- }
- return ret;
-}
-
-static xmlNodePtr to_xml_long(encodeTypePtr type, zval *data, int style, xmlNodePtr parent)
-{
- xmlNodePtr ret;
- zval tmp;
-
- ret = xmlNewNode(NULL,"BOGUS");
- xmlAddChild(parent, ret);
- FIND_ZVAL_NULL(data, ret, style);
-
- tmp = *data;
- zval_copy_ctor(&tmp);
- if (Z_TYPE(tmp) != IS_LONG) {
- convert_to_long(&tmp);
- }
- convert_to_string(&tmp);
- xmlNodeSetContentLen(ret, Z_STRVAL(tmp), Z_STRLEN(tmp));
- zval_dtor(&tmp);
-
- if (style == SOAP_ENCODED) {
- set_ns_and_type(ret, type);
- }
- return ret;
-}
-
-static xmlNodePtr to_xml_ulong(encodeTypePtr type, zval *data, int style, xmlNodePtr parent)
-{
- xmlNodePtr ret;
-
- ret = xmlNewNode(NULL,"BOGUS");
- xmlAddChild(parent, ret);
- FIND_ZVAL_NULL(data, ret, style);
-
- if (Z_TYPE_P(data) == IS_DOUBLE) {
- char s[16];
- sprintf(s, "%0.0f",Z_DVAL_P(data));
- xmlNodeSetContent(ret, s);
- } else {
- zval tmp = *data;
-
- zval_copy_ctor(&tmp);
- if (Z_TYPE(tmp) != IS_LONG) {
- convert_to_long(&tmp);
- }
- convert_to_string(&tmp);
- xmlNodeSetContentLen(ret, Z_STRVAL(tmp), Z_STRLEN(tmp));
- zval_dtor(&tmp);
- }
-
- if (style == SOAP_ENCODED) {
- set_ns_and_type(ret, type);
- }
- return ret;
-}
-
-static xmlNodePtr to_xml_double(encodeTypePtr type, zval *data, int style, xmlNodePtr parent)
-{
- xmlNodePtr ret;
- zval tmp;
-
- ret = xmlNewNode(NULL,"BOGUS");
- xmlAddChild(parent, ret);
- FIND_ZVAL_NULL(data, ret, style);
-
- tmp = *data;
- zval_copy_ctor(&tmp);
- if (Z_TYPE(tmp) != IS_DOUBLE) {
- convert_to_double(&tmp);
- }
- convert_to_string(&tmp);
- xmlNodeSetContentLen(ret, Z_STRVAL(tmp), Z_STRLEN(tmp));
- zval_dtor(&tmp);
-
- if (style == SOAP_ENCODED) {
- set_ns_and_type(ret, type);
- }
- return ret;
-}
-
-static zval *to_zval_bool(encodeTypePtr type, xmlNodePtr data)
-{
- zval *ret;
- MAKE_STD_ZVAL(ret);
- FIND_XML_NULL(data, ret);
-
- if (data && data->children) {
- if (data->children->type == XML_TEXT_NODE && data->children->next == NULL) {
- whiteSpace_collapse(data->children->content);
- if (stricmp(data->children->content,"true") == 0 ||
- stricmp(data->children->content,"t") == 0 ||
- strcmp(data->children->content,"1") == 0) {
- ZVAL_BOOL(ret, 1);
- } else {
- ZVAL_BOOL(ret, 0);
- }
- } else {
- soap_error0(E_ERROR, "Encoding: Violation of encoding rules");
- }
- } else {
- ZVAL_NULL(ret);
- }
- return ret;
-}
-
-static xmlNodePtr to_xml_bool(encodeTypePtr type, zval *data, int style, xmlNodePtr parent)
-{
- xmlNodePtr ret;
- zval tmp;
-
- ret = xmlNewNode(NULL,"BOGUS");
- xmlAddChild(parent, ret);
- FIND_ZVAL_NULL(data, ret, style);
-
- if (Z_TYPE_P(data) != IS_BOOL) {
- tmp = *data;
- zval_copy_ctor(&tmp);
- convert_to_boolean(data);
- data = &tmp;
- }
-
- if (data->value.lval == 1) {
- xmlNodeSetContent(ret, "1");
- } else {
- xmlNodeSetContent(ret, "0");
- }
-
- if (data == &tmp) {
- zval_dtor(&tmp);
- }
-
- if (style == SOAP_ENCODED) {
- set_ns_and_type(ret, type);
- }
- return ret;
-}
-
-/* Null encode/decode */
-static zval *to_zval_null(encodeTypePtr type, xmlNodePtr data)
-{
- zval *ret;
- MAKE_STD_ZVAL(ret);
- ZVAL_NULL(ret);
- return ret;
-}
-
-static xmlNodePtr to_xml_null(encodeTypePtr type, zval *data, int style, xmlNodePtr parent)
-{
- xmlNodePtr ret;
-
- ret = xmlNewNode(NULL,"BOGUS");
- xmlAddChild(parent, ret);
- if (style == SOAP_ENCODED) {
- xmlSetProp(ret, "xsi:nil", "1");
- }
- return ret;
-}
-
-static void model_to_zval_object(zval *ret, sdlContentModelPtr model, xmlNodePtr data, sdlPtr sdl TSRMLS_DC)
-{
- switch (model->kind) {
- case XSD_CONTENT_ELEMENT:
- if (model->u.element->name) {
- xmlNodePtr node = get_node(data->children, model->u.element->name);
- if (node) {
- zval *val;
-
- if (node && node->children && node->children->content) {
- if (model->u.element->fixed && strcmp(model->u.element->fixed,node->children->content) != 0) {
- soap_error3(E_ERROR, "Encoding: Element '%s' has fixed value '%s' (value '%s' is not allowed)", model->u.element->name, model->u.element->fixed, node->children->content);
- }
- val = master_to_zval(model->u.element->encode, node);
- } else if (model->u.element->fixed) {
- xmlNodePtr dummy = xmlNewNode(NULL, "BOGUS");
- xmlNodeSetContent(dummy, model->u.element->fixed);
- val = master_to_zval(model->u.element->encode, dummy);
- xmlFreeNode(dummy);
- } else if (model->u.element->def && !model->u.element->nillable) {
- xmlNodePtr dummy = xmlNewNode(NULL, "BOGUS");
- xmlNodeSetContent(dummy, model->u.element->def);
- val = master_to_zval(model->u.element->encode, dummy);
- xmlFreeNode(dummy);
- } else {
- val = master_to_zval(model->u.element->encode, node);
- }
- if ((node = get_node(node->next, model->u.element->name)) != NULL) {
- zval *array;
-
- MAKE_STD_ZVAL(array);
- array_init(array);
- add_next_index_zval(array, val);
- do {
- if (node && node->children && node->children->content) {
- if (model->u.element->fixed && strcmp(model->u.element->fixed,node->children->content) != 0) {
- soap_error3(E_ERROR, "Encoding: Element '%s' has fixed value '%s' (value '%s' is not allowed)", model->u.element->name, model->u.element->fixed, node->children->content);
- }
- val = master_to_zval(model->u.element->encode, node);
- } else if (model->u.element->fixed) {
- xmlNodePtr dummy = xmlNewNode(NULL, "BOGUS");
- xmlNodeSetContent(dummy, model->u.element->fixed);
- val = master_to_zval(model->u.element->encode, dummy);
- xmlFreeNode(dummy);
- } else if (model->u.element->def && !model->u.element->nillable) {
- xmlNodePtr dummy = xmlNewNode(NULL, "BOGUS");
- xmlNodeSetContent(dummy, model->u.element->def);
- val = master_to_zval(model->u.element->encode, dummy);
- xmlFreeNode(dummy);
- } else {
- val = master_to_zval(model->u.element->encode, node);
- }
- add_next_index_zval(array, val);
- } while ((node = get_node(node->next, model->u.element->name)) != NULL);
- val = array;
- }
-#ifdef ZEND_ENGINE_2
- val->refcount--;
-#endif
- add_property_zval(ret, model->u.element->name, val);
- }
- }
- break;
- case XSD_CONTENT_SEQUENCE:
- case XSD_CONTENT_ALL:
- case XSD_CONTENT_CHOICE: {
- sdlContentModelPtr *tmp;
- HashPosition pos;
-
- zend_hash_internal_pointer_reset_ex(model->u.content, &pos);
- while (zend_hash_get_current_data_ex(model->u.content, (void**)&tmp, &pos) == SUCCESS) {
- model_to_zval_object(ret, *tmp, data, sdl TSRMLS_CC);
- zend_hash_move_forward_ex(model->u.content, &pos);
- }
- break;
- }
- case XSD_CONTENT_GROUP:
- model_to_zval_object(ret, model->u.group->model, data, sdl TSRMLS_CC);
- break;
- default:
- break;
- }
-}
-
-/* Struct encode/decode */
-static zval *to_zval_object(encodeTypePtr type, xmlNodePtr data)
-{
- zval *ret;
- xmlNodePtr trav;
- sdlPtr sdl;
- sdlTypePtr sdlType = type->sdl_type;
- TSRMLS_FETCH();
-
- sdl = SOAP_GLOBAL(sdl);
- if (sdlType) {
- if (sdlType->kind == XSD_TYPEKIND_RESTRICTION &&
- sdlType->encode && type != &sdlType->encode->details) {
- encodePtr enc;
-
- enc = sdlType->encode;
- while (enc && enc->details.sdl_type &&
- enc->details.sdl_type->kind != XSD_TYPEKIND_SIMPLE &&
- enc->details.sdl_type->kind != XSD_TYPEKIND_LIST &&
- enc->details.sdl_type->kind != XSD_TYPEKIND_UNION) {
- enc = enc->details.sdl_type->encode;
- }
- if (enc) {
- zval *base;
-
- MAKE_STD_ZVAL(ret);
-
- object_init(ret);
- base = master_to_zval(enc, data);
-#ifdef ZEND_ENGINE_2
- base->refcount--;
-#endif
- add_property_zval(ret, "_", base);
- } else {
- MAKE_STD_ZVAL(ret);
- FIND_XML_NULL(data, ret);
- object_init(ret);
- }
- } else if (sdlType->kind == XSD_TYPEKIND_EXTENSION &&
- sdlType->encode &&
- type != &sdlType->encode->details) {
- if (sdlType->encode->details.sdl_type &&
- sdlType->encode->details.sdl_type->kind != XSD_TYPEKIND_SIMPLE &&
- sdlType->encode->details.sdl_type->kind != XSD_TYPEKIND_LIST &&
- sdlType->encode->details.sdl_type->kind != XSD_TYPEKIND_UNION) {
- ret = master_to_zval(sdlType->encode, data);
- FIND_XML_NULL(data, ret);
- } else {
- zval *base;
-
- MAKE_STD_ZVAL(ret);
-
- object_init(ret);
- base = master_to_zval(sdlType->encode, data);
-#ifdef ZEND_ENGINE_2
- base->refcount--;
-#endif
- add_property_zval(ret, "_", base);
- }
- } else {
- MAKE_STD_ZVAL(ret);
- FIND_XML_NULL(data, ret);
- object_init(ret);
- }
- if (sdlType->model) {
- model_to_zval_object(ret, sdlType->model, data, sdl TSRMLS_CC);
- }
- if (sdlType->attributes) {
- sdlAttributePtr *attr;
- HashPosition pos;
-
- zend_hash_internal_pointer_reset_ex(sdlType->attributes, &pos);
- while (zend_hash_get_current_data_ex(sdlType->attributes, (void**)&attr, &pos) == SUCCESS) {
- if ((*attr)->name) {
- xmlAttrPtr val = get_attribute(data->properties, (*attr)->name);
- xmlChar *str_val = NULL;
-
- if (val && val->children && val->children->content) {
- str_val = val->children->content;
- if ((*attr)->fixed && strcmp((*attr)->fixed,str_val) != 0) {
- soap_error3(E_ERROR, "Encoding: Attribute '%s' has fixed value '%s' (value '%s' is not allowed)", (*attr)->name, (*attr)->fixed, str_val);
- }
- } else if ((*attr)->fixed) {
- str_val = (*attr)->fixed;
- } else if ((*attr)->def) {
- str_val = (*attr)->def;
- }
- if (str_val) {
- xmlNodePtr dummy;
- zval *data;
-
- dummy = xmlNewNode(NULL, "BOGUS");
- xmlNodeSetContent(dummy, str_val);
- data = master_to_zval((*attr)->encode, dummy);
- xmlFreeNode(dummy);
-#ifdef ZEND_ENGINE_2
- data->refcount--;
-#endif
- add_property_zval(ret, (*attr)->name, data);
- }
- }
- zend_hash_move_forward_ex(sdlType->attributes, &pos);
- }
- }
- } else {
-
- MAKE_STD_ZVAL(ret);
- FIND_XML_NULL(data, ret);
- object_init(ret);
-
- trav = data->children;
-
- while (trav != NULL) {
- if (trav->type == XML_ELEMENT_NODE) {
- zval *tmpVal;
-
- tmpVal = master_to_zval(NULL, trav);
-#ifdef ZEND_ENGINE_2
- tmpVal->refcount--;
-#endif
- add_property_zval(ret, (char *)trav->name, tmpVal);
- }
- trav = trav->next;
- }
- }
- return ret;
-}
-
-static int model_to_xml_object(xmlNodePtr node, sdlContentModelPtr model, HashTable *prop, int style, int strict)
-{
- switch (model->kind) {
- case XSD_CONTENT_ELEMENT: {
- zval **data;
- xmlNodePtr property;
- encodePtr enc;
-
- if (zend_hash_find(prop, model->u.element->name, strlen(model->u.element->name)+1, (void**)&data) == SUCCESS) {
- enc = model->u.element->encode;
- if ((model->max_occurs == -1 || model->max_occurs > 1) && Z_TYPE_PP(data) == IS_ARRAY) {
- HashTable *ht = Z_ARRVAL_PP(data);
- zval **val;
-
- zend_hash_internal_pointer_reset(ht);
- while (zend_hash_get_current_data(ht,(void**)&val) == SUCCESS) {
- if (Z_TYPE_PP(val) == IS_NULL && model->u.element->nillable) {
- property = xmlNewNode(NULL,"BOGUS");
- xmlAddChild(node, property);
- if (style == SOAP_ENCODED) {
- xmlSetProp(property, "xsi:nil", "1");
- } else {
- xmlNsPtr xsi = encode_add_ns(property,XSI_NAMESPACE);
- xmlSetNsProp(property, xsi, "nil", "1");
- }
- } else {
- property = master_to_xml(enc, *val, style, node);
- if (property->children && property->children->content &&
- model->u.element->fixed && strcmp(model->u.element->fixed,property->children->content) != 0) {
- soap_error3(E_ERROR, "Encoding: Element '%s' has fixed value '%s' (value '%s' is not allowed)", model->u.element->name, model->u.element->fixed, property->children->content);
- }
- }
- xmlNodeSetName(property, model->u.element->name);
- if (style == SOAP_LITERAL && model->u.element->namens) {
- xmlNsPtr nsp = encode_add_ns(property, model->u.element->namens);
- xmlSetNs(property, nsp);
- }
- zend_hash_move_forward(ht);
- }
- } else {
- if (Z_TYPE_PP(data) == IS_NULL && model->u.element->nillable) {
- property = xmlNewNode(NULL,"BOGUS");
- xmlAddChild(node, property);
- if (style == SOAP_ENCODED) {
- xmlSetProp(property, "xsi:nil", "1");
- } else {
- xmlNsPtr xsi = encode_add_ns(property,XSI_NAMESPACE);
- xmlSetNsProp(property, xsi, "nil", "1");
- }
- } else {
- property = master_to_xml(enc, *data, style, node);
- if (property->children && property->children->content &&
- model->u.element->fixed && strcmp(model->u.element->fixed,property->children->content) != 0) {
- soap_error3(E_ERROR, "Encoding: Element '%s' has fixed value '%s' (value '%s' is not allowed)", model->u.element->name, model->u.element->fixed, property->children->content);
- }
- }
- xmlNodeSetName(property, model->u.element->name);
- if (style == SOAP_LITERAL && model->u.element->namens) {
- xmlNsPtr nsp = encode_add_ns(property, model->u.element->namens);
- xmlSetNs(property, nsp);
- }
- }
- return 1;
- } else if (model->min_occurs == 0) {
- return 2;
- } else {
- if (strict) {
- soap_error1(E_ERROR, "Encoding: object hasn't '%s' property", model->u.element->name);
- }
- return 0;
- }
- break;
- }
- case XSD_CONTENT_SEQUENCE:
- case XSD_CONTENT_ALL: {
- sdlContentModelPtr *tmp;
- HashPosition pos;
-
- zend_hash_internal_pointer_reset_ex(model->u.content, &pos);
- while (zend_hash_get_current_data_ex(model->u.content, (void**)&tmp, &pos) == SUCCESS) {
- if (!model_to_xml_object(node, *tmp, prop, style, model->min_occurs > 0)) {
- return 0;
- }
- zend_hash_move_forward_ex(model->u.content, &pos);
- }
- return 1;
- }
- case XSD_CONTENT_CHOICE: {
- sdlContentModelPtr *tmp;
- HashPosition pos;
- int ret = 0;
-
- zend_hash_internal_pointer_reset_ex(model->u.content, &pos);
- while (zend_hash_get_current_data_ex(model->u.content, (void**)&tmp, &pos) == SUCCESS) {
- int tmp_ret = model_to_xml_object(node, *tmp, prop, style, 0);
- if (tmp_ret == 1) {
- return 1;
- } else if (tmp_ret != 0) {
- ret = 1;
- }
- zend_hash_move_forward_ex(model->u.content, &pos);
- }
- return ret;
- }
- case XSD_CONTENT_GROUP: {
- return model_to_xml_object(node, model->u.group->model, prop, style, model->min_occurs > 0);
- }
- default:
- break;
- }
- return 1;
-}
-
-static sdlTypePtr model_array_element(sdlContentModelPtr model)
-{
- switch (model->kind) {
- case XSD_CONTENT_ELEMENT: {
- if (model->max_occurs == -1 || model->max_occurs > 1) {
- return model->u.element;
- } else {
- return NULL;
- }
- }
- case XSD_CONTENT_SEQUENCE:
- case XSD_CONTENT_ALL:
- case XSD_CONTENT_CHOICE: {
- sdlContentModelPtr *tmp;
- HashPosition pos;
-
- if (zend_hash_num_elements(model->u.content) != 1) {
- return NULL;
- }
- zend_hash_internal_pointer_reset_ex(model->u.content, &pos);
- zend_hash_get_current_data_ex(model->u.content, (void**)&tmp, &pos);
- return model_array_element(*tmp);
- }
- case XSD_CONTENT_GROUP: {
- return model_array_element(model->u.group->model);
- }
- default:
- break;
- }
- return NULL;
-}
-
-static xmlNodePtr to_xml_object(encodeTypePtr type, zval *data, int style, xmlNodePtr parent)
-{
- xmlNodePtr xmlParam;
- HashTable *prop;
- int i;
- sdlTypePtr sdlType = type->sdl_type;
- TSRMLS_FETCH();
-
- if (!data || Z_TYPE_P(data) == IS_NULL) {
- xmlParam = xmlNewNode(NULL,"BOGUS");
- xmlAddChild(parent, xmlParam);
- if (style == SOAP_ENCODED) {
- xmlSetProp(xmlParam, "xsi:nil", "1");
- }
- return xmlParam;
- }
-
- if (sdlType) {
- prop = NULL;
- if (Z_TYPE_P(data) == IS_OBJECT) {
- prop = Z_OBJPROP_P(data);
- } else if (Z_TYPE_P(data) == IS_ARRAY) {
- prop = Z_ARRVAL_P(data);
- }
- if (sdlType->kind == XSD_TYPEKIND_RESTRICTION &&
- sdlType->encode && type != &sdlType->encode->details) {
- encodePtr enc;
-
- enc = sdlType->encode;
- while (enc && enc->details.sdl_type &&
- enc->details.sdl_type->kind != XSD_TYPEKIND_SIMPLE &&
- enc->details.sdl_type->kind != XSD_TYPEKIND_LIST &&
- enc->details.sdl_type->kind != XSD_TYPEKIND_UNION) {
- enc = enc->details.sdl_type->encode;
- }
- if (enc) {
- zval **tmp;
- if (prop && zend_hash_find(prop, "_", sizeof("_"), (void**)&tmp) == SUCCESS) {
- xmlParam = master_to_xml(enc, *tmp, style, parent);
- } else if (prop == NULL) {
- xmlParam = master_to_xml(enc, data, style, parent);
- } else {
- xmlParam = xmlNewNode(NULL,"BOGUS");
- xmlAddChild(parent, xmlParam);
- }
- } else {
- xmlParam = xmlNewNode(NULL,"BOGUS");
- xmlAddChild(parent, xmlParam);
- }
- } else if (sdlType->kind == XSD_TYPEKIND_EXTENSION &&
- sdlType->encode && type != &sdlType->encode->details) {
- if (sdlType->encode->details.sdl_type &&
- sdlType->encode->details.sdl_type->kind != XSD_TYPEKIND_SIMPLE &&
- sdlType->encode->details.sdl_type->kind != XSD_TYPEKIND_LIST &&
- sdlType->encode->details.sdl_type->kind != XSD_TYPEKIND_UNION) {
- xmlParam = master_to_xml(sdlType->encode, data, style, parent);
- } else {
- zval **tmp;
-
- if (prop && zend_hash_find(prop, "_", sizeof("_"), (void**)&tmp) == SUCCESS) {
- xmlParam = master_to_xml(sdlType->encode, *tmp, style, parent);
- } else if (prop == NULL) {
- xmlParam = master_to_xml(sdlType->encode, data, style, parent);
- } else {
- xmlParam = xmlNewNode(NULL,"BOGUS");
- xmlAddChild(parent, xmlParam);
- }
- }
- } else {
- xmlParam = xmlNewNode(NULL,"BOGUS");
- xmlAddChild(parent, xmlParam);
- }
- FIND_ZVAL_NULL(data, xmlParam, style);
-
- if (prop != NULL) {
- sdlTypePtr array_el;
-
- if (Z_TYPE_P(data) == IS_ARRAY &&
- !is_map(data) &&
- sdlType->attributes == NULL &&
- sdlType->model != NULL &&
- (array_el = model_array_element(sdlType->model)) != NULL) {
- zval **val;
-
- zend_hash_internal_pointer_reset(prop);
- while (zend_hash_get_current_data(prop,(void**)&val) == SUCCESS) {
- xmlNodePtr property;
- if (Z_TYPE_PP(val) == IS_NULL && array_el->nillable) {
- property = xmlNewNode(NULL,"BOGUS");
- xmlAddChild(xmlParam, property);
- if (style == SOAP_ENCODED) {
- xmlSetProp(property, "xsi:nil", "1");
- } else {
- xmlNsPtr xsi = encode_add_ns(property,XSI_NAMESPACE);
- xmlSetNsProp(property, xsi, "nil", "1");
- }
- } else {
- property = master_to_xml(array_el->encode, *val, style, xmlParam);
- }
- xmlNodeSetName(property, array_el->name);
- if (style == SOAP_LITERAL && array_el->namens) {
- xmlNsPtr nsp = encode_add_ns(property, array_el->namens);
- xmlSetNs(property, nsp);
- }
- zend_hash_move_forward(prop);
- }
- } else if (sdlType->model) {
- model_to_xml_object(xmlParam, sdlType->model, prop, style, 1);
- }
- if (sdlType->attributes) {
- sdlAttributePtr *attr;
- zval **data;
- HashPosition pos;
-
- zend_hash_internal_pointer_reset_ex(sdlType->attributes, &pos);
- while (zend_hash_get_current_data_ex(sdlType->attributes, (void**)&attr, &pos) == SUCCESS) {
- if ((*attr)->name) {
- if (zend_hash_find(prop, (*attr)->name, strlen((*attr)->name)+1, (void**)&data) == SUCCESS) {
- xmlNodePtr dummy;
-
- dummy = master_to_xml((*attr)->encode, *data, SOAP_LITERAL, xmlParam);
- if (dummy->children && dummy->children->content) {
- if ((*attr)->fixed && strcmp((*attr)->fixed,dummy->children->content) != 0) {
- soap_error3(E_ERROR, "Encoding: Attribute '%s' has fixed value '%s' (value '%s' is not allowed)", (*attr)->name, (*attr)->fixed, dummy->children->content);
- }
- if ((*attr)->namens &&
- (type->ns == NULL || strcmp((*attr)->namens, type->ns))) {
- xmlNsPtr nsp = encode_add_ns(xmlParam, (*attr)->namens);
-
- xmlSetNsProp(xmlParam, nsp, (*attr)->name, dummy->children->content);
- } else {
- xmlSetProp(xmlParam, (*attr)->name, dummy->children->content);
- }
- }
- xmlUnlinkNode(dummy);
- xmlFreeNode(dummy);
- }
- }
- zend_hash_move_forward_ex(sdlType->attributes, &pos);
- }
- }
- }
- if (style == SOAP_ENCODED) {
- set_ns_and_type(xmlParam, type);
- }
- } else {
- xmlParam = xmlNewNode(NULL,"BOGUS");
- xmlAddChild(parent, xmlParam);
- FIND_ZVAL_NULL(data, xmlParam, style);
-
- prop = NULL;
- if (Z_TYPE_P(data) == IS_OBJECT) {
- prop = Z_OBJPROP_P(data);
- } else if (Z_TYPE_P(data) == IS_ARRAY) {
- prop = Z_ARRVAL_P(data);
- }
- if (prop != NULL) {
- i = zend_hash_num_elements(prop);
- zend_hash_internal_pointer_reset(prop);
-
- for (;i > 0;i--) {
- xmlNodePtr property;
- zval **zprop;
- char *str_key;
- ulong index;
- int key_type;
-
- key_type = zend_hash_get_current_key(prop, &str_key, &index, FALSE);
- zend_hash_get_current_data(prop, (void **)&zprop);
-
- property = master_to_xml(get_conversion((*zprop)->type), (*zprop), style, xmlParam);
-
- if (key_type == HASH_KEY_IS_STRING) {
- xmlNodeSetName(property, str_key);
- }
- zend_hash_move_forward(prop);
- }
- }
- if (style == SOAP_ENCODED) {
- set_ns_and_type(xmlParam, type);
- }
- }
- return xmlParam;
-}
-
-/* Array encode/decode */
-static xmlNodePtr guess_array_map(encodeTypePtr type, zval *data, int style, xmlNodePtr parent)
-{
- encodePtr enc = NULL;
- TSRMLS_FETCH();
-
- if (data && Z_TYPE_P(data) == IS_ARRAY) {
- if (is_map(data)) {
- enc = get_conversion(APACHE_MAP);
- } else {
- enc = get_conversion(SOAP_ENC_ARRAY);
- }
- }
- if (!enc) {
- enc = get_conversion(IS_NULL);
- }
-
- return master_to_xml(enc, data, style, parent);
-}
-
-static int calc_dimension_12(const char* str)
-{
- int i = 0, flag = 0;
- while (*str != '\0' && (*str < '0' || *str > '9') && (*str != '*')) {
- str++;
- }
- if (*str == '*') {
- i++;
- str++;
- }
- while (*str != '\0') {
- if (*str >= '0' && *str <= '9') {
- if (flag == 0) {
- i++;
- flag = 1;
- }
- } else if (*str == '*') {
- soap_error0(E_ERROR, "Encoding: '*' may only be first arraySize value in list");
- } else {
- flag = 0;
- }
- str++;
- }
- return i;
-}
-
-static int* get_position_12(int dimension, const char* str)
-{
- int *pos;
- int i = -1, flag = 0;
-
- pos = safe_emalloc(sizeof(int), dimension, 0);
- memset(pos,0,sizeof(int)*dimension);
- while (*str != '\0' && (*str < '0' || *str > '9') && (*str != '*')) {
- str++;
- }
- if (*str == '*') {
- str++;
- i++;
- }
- while (*str != '\0') {
- if (*str >= '0' && *str <= '9') {
- if (flag == 0) {
- i++;
- flag = 1;
- }
- pos[i] = (pos[i]*10)+(*str-'0');
- } else if (*str == '*') {
- soap_error0(E_ERROR, "Encoding: '*' may only be first arraySize value in list");
- } else {
- flag = 0;
- }
- str++;
- }
- return pos;
-}
-
-static int calc_dimension(const char* str)
-{
- int i = 1;
- while (*str != ']' && *str != '\0') {
- if (*str == ',') {
- i++;
- }
- str++;
- }
- return i;
-}
-
-static void get_position_ex(int dimension, const char* str, int** pos)
-{
- int i = 0;
-
- memset(*pos,0,sizeof(int)*dimension);
- while (*str != ']' && *str != '\0' && i < dimension) {
- if (*str >= '0' && *str <= '9') {
- (*pos)[i] = ((*pos)[i]*10)+(*str-'0');
- } else if (*str == ',') {
- i++;
- }
- str++;
- }
-}
-
-static int* get_position(int dimension, const char* str)
-{
- int *pos;
-
- pos = safe_emalloc(sizeof(int), dimension, 0);
- get_position_ex(dimension, str, &pos);
- return pos;
-}
-
-static void add_xml_array_elements(xmlNodePtr xmlParam,
- sdlTypePtr type,
- encodePtr enc,
- xmlNsPtr ns,
- int dimension ,
- int* dims,
- zval* data,
- int style)
-{
- int j;
-
- if (data && Z_TYPE_P(data) == IS_ARRAY) {
- zend_hash_internal_pointer_reset(data->value.ht);
- for (j=0; j<dims[0]; j++) {
- zval **zdata;
-
- if (zend_hash_get_current_data(data->value.ht, (void **)&zdata) != SUCCESS) {
- zdata = NULL;
- }
- if (dimension == 1) {
- xmlNodePtr xparam;
-
- if (zdata) {
- if (enc == NULL) {
- TSRMLS_FETCH();
- xparam = master_to_xml(get_conversion((*zdata)->type), (*zdata), style, xmlParam);
- } else {
- xparam = master_to_xml(enc, (*zdata), style, xmlParam);
- }
- } else {
- xparam = xmlNewNode(NULL,"BOGUS");
- xmlAddChild(xmlParam, xparam);
- }
-
- if (type) {
- xmlNodeSetName(xparam, type->name);
- } else if (style == SOAP_LITERAL && enc && enc->details.type_str) {
- xmlNodeSetName(xparam, enc->details.type_str);
- xmlSetNs(xparam, ns);
- } else {
- xmlNodeSetName(xparam, "item");
- }
- } else {
- if (zdata) {
- add_xml_array_elements(xmlParam, type, enc, ns, dimension-1, dims+1, *zdata, style);
- } else {
- add_xml_array_elements(xmlParam, type, enc, ns, dimension-1, dims+1, NULL, style);
- }
- }
- zend_hash_move_forward(data->value.ht);
- }
- } else {
- for (j=0; j<dims[0]; j++) {
- if (dimension == 1) {
- xmlNodePtr xparam;
-
- xparam = xmlNewNode(NULL,"BOGUS");
- xmlAddChild(xmlParam, xparam);
- if (type) {
- xmlNodeSetName(xparam, type->name);
- } else if (style == SOAP_LITERAL && enc && enc->details.type_str) {
- xmlNodeSetName(xparam, enc->details.type_str);
- xmlSetNs(xparam, ns);
- } else {
- xmlNodeSetName(xparam, "item");
- }
- } else {
- add_xml_array_elements(xmlParam, type, enc, ns, dimension-1, dims+1, NULL, style);
- }
- }
- }
-}
-
-static inline int array_num_elements(HashTable* ht)
-{
- if (ht->pListTail && ht->pListTail->nKeyLength == 0) {
- return ht->pListTail->h-1;
- }
- return 0;
-}
-
-static xmlNodePtr to_xml_array(encodeTypePtr type, zval *data, int style, xmlNodePtr parent)
-{
- sdlTypePtr sdl_type = type->sdl_type;
- sdlTypePtr element_type = NULL;
- smart_str array_type = {0}, array_size = {0};
- int i;
- xmlNodePtr xmlParam;
- encodePtr enc = NULL;
- int dimension = 1;
- int* dims;
- int soap_version;
-
- TSRMLS_FETCH();
-
- soap_version = SOAP_GLOBAL(soap_version);
-
- xmlParam = xmlNewNode(NULL,"BOGUS");
- xmlAddChild(parent, xmlParam);
-
- FIND_ZVAL_NULL(data, xmlParam, style);
-
- if (Z_TYPE_P(data) == IS_ARRAY) {
- sdlAttributePtr *arrayType;
- sdlExtraAttributePtr *ext;
- sdlTypePtr elementType;
-
- i = zend_hash_num_elements(Z_ARRVAL_P(data));
-
- if (sdl_type &&
- sdl_type->attributes &&
- zend_hash_find(sdl_type->attributes, SOAP_1_1_ENC_NAMESPACE":arrayType",
- sizeof(SOAP_1_1_ENC_NAMESPACE":arrayType"),
- (void **)&arrayType) == SUCCESS &&
- zend_hash_find((*arrayType)->extraAttributes, WSDL_NAMESPACE":arrayType", sizeof(WSDL_NAMESPACE":arrayType"), (void **)&ext) == SUCCESS) {
-
- char *value, *end;
- zval** el;
-
- value = estrdup((*ext)->val);
- end = strrchr(value,'[');
- if (end) {
- *end = '\0';
- end++;
- dimension = calc_dimension(end);
- }
- if ((*ext)->ns != NULL) {
- enc = get_encoder(SOAP_GLOBAL(sdl), (*ext)->ns, value);
- get_type_str(xmlParam, (*ext)->ns, value, &array_type);
- } else {
- smart_str_appends(&array_type, value);
- }
-
- dims = safe_emalloc(sizeof(int), dimension, 0);
- dims[0] = i;
- el = &data;
- for (i = 1; i < dimension; i++) {
- if (el != NULL && Z_TYPE_PP(el) == IS_ARRAY &&
- zend_hash_num_elements(Z_ARRVAL_PP(el)) > 0) {
- zend_hash_internal_pointer_reset(Z_ARRVAL_PP(el));
- zend_hash_get_current_data(Z_ARRVAL_PP(el), (void**)&el);
- if (Z_TYPE_PP(el) == IS_ARRAY) {
- dims[i] = zend_hash_num_elements(Z_ARRVAL_PP(el));
- } else {
- dims[i] = 0;
- }
- }
- }
-
- smart_str_append_long(&array_size, dims[0]);
- for (i=1; i<dimension; i++) {
- smart_str_appendc(&array_size, ',');
- smart_str_append_long(&array_size, dims[i]);
- }
-
- efree(value);
-
- } else if (sdl_type &&
- sdl_type->attributes &&
- zend_hash_find(sdl_type->attributes, SOAP_1_2_ENC_NAMESPACE":itemType",
- sizeof(SOAP_1_2_ENC_NAMESPACE":itemType"),
- (void **)&arrayType) == SUCCESS &&
- zend_hash_find((*arrayType)->extraAttributes, WSDL_NAMESPACE":itemType", sizeof(WSDL_NAMESPACE":itemType"), (void **)&ext) == SUCCESS) {
- if ((*ext)->ns != NULL) {
- enc = get_encoder(SOAP_GLOBAL(sdl), (*ext)->ns, (*ext)->val);
- get_type_str(xmlParam, (*ext)->ns, (*ext)->val, &array_type);
- } else {
- smart_str_appends(&array_type, (*ext)->val);
- }
- if (zend_hash_find(sdl_type->attributes, SOAP_1_2_ENC_NAMESPACE":arraySize",
- sizeof(SOAP_1_2_ENC_NAMESPACE":arraySize"),
- (void **)&arrayType) == SUCCESS &&
- zend_hash_find((*arrayType)->extraAttributes, WSDL_NAMESPACE":arraySize", sizeof(WSDL_NAMESPACE":arraysize"), (void **)&ext) == SUCCESS) {
- dimension = calc_dimension_12((*ext)->val);
- dims = get_position_12(dimension, (*ext)->val);
- if (dims[0] == 0) {dims[0] = i;}
-
- smart_str_append_long(&array_size, dims[0]);
- for (i=1; i<dimension; i++) {
- smart_str_appendc(&array_size, ',');
- smart_str_append_long(&array_size, dims[i]);
- }
- } else {
- dims = emalloc(sizeof(int));
- *dims = 0;
- smart_str_append_long(&array_size, i);
- }
- } else if (sdl_type &&
- sdl_type->attributes &&
- zend_hash_find(sdl_type->attributes, SOAP_1_2_ENC_NAMESPACE":arraySize",
- sizeof(SOAP_1_2_ENC_NAMESPACE":arraySize"),
- (void **)&arrayType) == SUCCESS &&
- zend_hash_find((*arrayType)->extraAttributes, WSDL_NAMESPACE":arraySize", sizeof(WSDL_NAMESPACE":arraySize"), (void **)&ext) == SUCCESS) {
- dimension = calc_dimension_12((*ext)->val);
- dims = get_position_12(dimension, (*ext)->val);
- if (dims[0] == 0) {dims[0] = i;}
-
- smart_str_append_long(&array_size, dims[0]);
- for (i=1; i<dimension; i++) {
- smart_str_appendc(&array_size, ',');
- smart_str_append_long(&array_size, dims[i]);
- }
-
- if (sdl_type && sdl_type->elements &&
- zend_hash_num_elements(sdl_type->elements) == 1 &&
- (zend_hash_internal_pointer_reset(sdl_type->elements),
- zend_hash_get_current_data(sdl_type->elements, (void**)&elementType) == SUCCESS) &&
- (elementType = *(sdlTypePtr*)elementType) != NULL &&
- elementType->encode && elementType->encode->details.type_str) {
- element_type = elementType;
- enc = elementType->encode;
- get_type_str(xmlParam, elementType->encode->details.ns, elementType->encode->details.type_str, &array_type);
- } else {
- get_array_type(xmlParam, data, &array_type TSRMLS_CC);
- enc = get_encoder_ex(SOAP_GLOBAL(sdl), array_type.c, array_type.len);
- }
- } else if (sdl_type && sdl_type->elements &&
- zend_hash_num_elements(sdl_type->elements) == 1 &&
- (zend_hash_internal_pointer_reset(sdl_type->elements),
- zend_hash_get_current_data(sdl_type->elements, (void**)&elementType) == SUCCESS) &&
- (elementType = *(sdlTypePtr*)elementType) != NULL &&
- elementType->encode && elementType->encode->details.type_str) {
-
- element_type = elementType;
- enc = elementType->encode;
- get_type_str(xmlParam, elementType->encode->details.ns, elementType->encode->details.type_str, &array_type);
-
- smart_str_append_long(&array_size, i);
-
- dims = safe_emalloc(sizeof(int), dimension, 0);
- dims[0] = i;
- } else {
-
- get_array_type(xmlParam, data, &array_type TSRMLS_CC);
- enc = get_encoder_ex(SOAP_GLOBAL(sdl), array_type.c, array_type.len);
- smart_str_append_long(&array_size, i);
- dims = safe_emalloc(sizeof(int), dimension, 0);
- dims[0] = i;
- }
-
- if (style == SOAP_ENCODED) {
- if (soap_version == SOAP_1_1) {
- smart_str_0(&array_type);
- if (strcmp(array_type.c,"xsd:anyType") == 0) {
- smart_str_free(&array_type);
- smart_str_appendl(&array_type,"xsd:ur-type",sizeof("xsd:ur-type")-1);
- }
- smart_str_appendc(&array_type, '[');
- smart_str_append(&array_type, &array_size);
- smart_str_appendc(&array_type, ']');
- smart_str_0(&array_type);
- xmlSetProp(xmlParam, SOAP_1_1_ENC_NS_PREFIX":arrayType", array_type.c);
- } else {
- int i = 0;
- while (i < array_size.len) {
- if (array_size.c[i] == ',') {array_size.c[i] = ' ';}
- ++i;
- }
- smart_str_0(&array_type);
- smart_str_0(&array_size);
- xmlSetProp(xmlParam, SOAP_1_2_ENC_NS_PREFIX":itemType", array_type.c);
- xmlSetProp(xmlParam, SOAP_1_2_ENC_NS_PREFIX":arraySize", array_size.c);
- }
- }
- smart_str_free(&array_type);
- smart_str_free(&array_size);
-
- add_xml_array_elements(xmlParam, element_type, enc, enc?encode_add_ns(xmlParam,enc->details.ns):NULL, dimension, dims, data, style);
- efree(dims);
- }
- if (style == SOAP_ENCODED) {
- set_ns_and_type(xmlParam, type);
- }
- return xmlParam;
-}
-
-static zval *to_zval_array(encodeTypePtr type, xmlNodePtr data)
-{
- zval *ret;
- xmlNodePtr trav;
- encodePtr enc = NULL;
- int dimension = 1;
- int* dims = NULL;
- int* pos = NULL;
- xmlAttrPtr attr;
- sdlPtr sdl;
- sdlAttributePtr *arrayType;
- sdlExtraAttributePtr *ext;
- sdlTypePtr elementType;
-
- TSRMLS_FETCH();
-
- MAKE_STD_ZVAL(ret);
- FIND_XML_NULL(data, ret);
- sdl = SOAP_GLOBAL(sdl);
-
- if (data &&
- (attr = get_attribute(data->properties,"arrayType")) &&
- attr->children && attr->children->content) {
- char *type, *end, *ns;
- xmlNsPtr nsptr;
-
- parse_namespace(attr->children->content, &type, &ns);
- nsptr = xmlSearchNs(attr->doc, attr->parent, ns);
-
- end = strrchr(type,'[');
- if (end) {
- *end = '\0';
- dimension = calc_dimension(end+1);
- dims = get_position(dimension, end+1);
- }
- if (nsptr != NULL) {
- enc = get_encoder(SOAP_GLOBAL(sdl), nsptr->href, type);
- }
- efree(type);
- if (ns) {efree(ns);}
-
- } else if ((attr = get_attribute(data->properties,"itemType")) &&
- attr->children &&
- attr->children->content) {
- char *type, *ns;
- xmlNsPtr nsptr;
-
- parse_namespace(attr->children->content, &type, &ns);
- nsptr = xmlSearchNs(attr->doc, attr->parent, ns);
- if (nsptr != NULL) {
- enc = get_encoder(SOAP_GLOBAL(sdl), nsptr->href, type);
- }
- efree(type);
- if (ns) {efree(ns);}
-
- if ((attr = get_attribute(data->properties,"arraySize")) &&
- attr->children && attr->children->content) {
- dimension = calc_dimension_12(attr->children->content);
- dims = get_position_12(dimension, attr->children->content);
- } else {
- dims = emalloc(sizeof(int));
- *dims = 0;
- }
-
- } else if ((attr = get_attribute(data->properties,"arraySize")) &&
- attr->children && attr->children->content) {
-
- dimension = calc_dimension_12(attr->children->content);
- dims = get_position_12(dimension, attr->children->content);
-
- } else if (type->sdl_type != NULL &&
- type->sdl_type->attributes != NULL &&
- zend_hash_find(type->sdl_type->attributes, SOAP_1_1_ENC_NAMESPACE":arrayType",
- sizeof(SOAP_1_1_ENC_NAMESPACE":arrayType"),
- (void **)&arrayType) == SUCCESS &&
- zend_hash_find((*arrayType)->extraAttributes, WSDL_NAMESPACE":arrayType", sizeof(WSDL_NAMESPACE":arrayType"), (void **)&ext) == SUCCESS) {
- char *type, *end;
-
- type = estrdup((*ext)->val);
- end = strrchr(type,'[');
- if (end) {
- *end = '\0';
- }
- if ((*ext)->ns != NULL) {
- enc = get_encoder(SOAP_GLOBAL(sdl), (*ext)->ns, type);
- }
- efree(type);
-
- dims = emalloc(sizeof(int));
- *dims = 0;
-
- } else if (type->sdl_type != NULL &&
- type->sdl_type->attributes != NULL &&
- zend_hash_find(type->sdl_type->attributes, SOAP_1_2_ENC_NAMESPACE":itemType",
- sizeof(SOAP_1_2_ENC_NAMESPACE":itemType"),
- (void **)&arrayType) == SUCCESS &&
- zend_hash_find((*arrayType)->extraAttributes, WSDL_NAMESPACE":itemType", sizeof(WSDL_NAMESPACE":itemType"), (void **)&ext) == SUCCESS) {
-
- if ((*ext)->ns != NULL) {
- enc = get_encoder(SOAP_GLOBAL(sdl), (*ext)->ns, (*ext)->val);
- }
-
- if (zend_hash_find(type->sdl_type->attributes, SOAP_1_2_ENC_NAMESPACE":arraySize",
- sizeof(SOAP_1_2_ENC_NAMESPACE":arraySize"),
- (void **)&arrayType) == SUCCESS &&
- zend_hash_find((*arrayType)->extraAttributes, WSDL_NAMESPACE":arraySize", sizeof(WSDL_NAMESPACE":arraysize"), (void **)&ext) == SUCCESS) {
- dimension = calc_dimension_12((*ext)->val);
- dims = get_position_12(dimension, (*ext)->val);
- } else {
- dims = emalloc(sizeof(int));
- *dims = 0;
- }
- } else if (type->sdl_type != NULL &&
- type->sdl_type->attributes != NULL &&
- zend_hash_find(type->sdl_type->attributes, SOAP_1_2_ENC_NAMESPACE":arraySize",
- sizeof(SOAP_1_2_ENC_NAMESPACE":arraySize"),
- (void **)&arrayType) == SUCCESS &&
- zend_hash_find((*arrayType)->extraAttributes, WSDL_NAMESPACE":arraySize", sizeof(WSDL_NAMESPACE":arraysize"), (void **)&ext) == SUCCESS) {
-
- dimension = calc_dimension_12((*ext)->val);
- dims = get_position_12(dimension, (*ext)->val);
- if (type->sdl_type && type->sdl_type->elements &&
- zend_hash_num_elements(type->sdl_type->elements) == 1 &&
- (zend_hash_internal_pointer_reset(type->sdl_type->elements),
- zend_hash_get_current_data(type->sdl_type->elements, (void**)&elementType) == SUCCESS) &&
- (elementType = *(sdlTypePtr*)elementType) != NULL &&
- elementType->encode) {
- enc = elementType->encode;
- }
- } else if (type->sdl_type && type->sdl_type->elements &&
- zend_hash_num_elements(type->sdl_type->elements) == 1 &&
- (zend_hash_internal_pointer_reset(type->sdl_type->elements),
- zend_hash_get_current_data(type->sdl_type->elements, (void**)&elementType) == SUCCESS) &&
- (elementType = *(sdlTypePtr*)elementType) != NULL &&
- elementType->encode) {
- enc = elementType->encode;
- }
- if (dims == NULL) {
- dimension = 1;
- dims = emalloc(sizeof(int));
- *dims = 0;
- }
- pos = safe_emalloc(sizeof(int), dimension, 0);
- memset(pos,0,sizeof(int)*dimension);
- if (data &&
- (attr = get_attribute(data->properties,"offset")) &&
- attr->children && attr->children->content) {
- char* tmp = strrchr(attr->children->content,'[');
-
- if (tmp == NULL) {
- tmp = attr->children->content;
- }
- get_position_ex(dimension, tmp, &pos);
- }
-
- array_init(ret);
- trav = data->children;
- while (trav) {
- if (trav->type == XML_ELEMENT_NODE) {
- int i;
- zval *tmpVal, *ar;
- xmlAttrPtr position = get_attribute(trav->properties,"position");
-
- tmpVal = master_to_zval(enc, trav);
- if (position != NULL && position->children && position->children->content) {
- char* tmp = strrchr(position->children->content,'[');
- if (tmp == NULL) {
- tmp = position->children->content;
- }
- get_position_ex(dimension, tmp, &pos);
- }
-
- /* Get/Create intermediate arrays for multidimensional arrays */
- i = 0;
- ar = ret;
- while (i < dimension-1) {
- zval** ar2;
- if (zend_hash_index_find(Z_ARRVAL_P(ar), pos[i], (void**)&ar2) == SUCCESS) {
- ar = *ar2;
- } else {
- zval *tmpAr;
- MAKE_STD_ZVAL(tmpAr);
- array_init(tmpAr);
- zend_hash_index_update(Z_ARRVAL_P(ar), pos[i], &tmpAr, sizeof(zval*), (void**)&ar2);
- ar = *ar2;
- }
- i++;
- }
- zend_hash_index_update(Z_ARRVAL_P(ar), pos[i], &tmpVal, sizeof(zval *), NULL);
-
- /* Increment position */
- i = dimension;
- while (i > 0) {
- i--;
- pos[i]++;
- if (pos[i] >= dims[i]) {
- if (i > 0) {
- pos[i] = 0;
- } else {
- /* TODO: Array index overflow */
- }
- } else {
- break;
- }
- }
- }
- trav = trav->next;
- }
- efree(dims);
- efree(pos);
- return ret;
-}
-
-/* Map encode/decode */
-static xmlNodePtr to_xml_map(encodeTypePtr type, zval *data, int style, xmlNodePtr parent)
-{
- xmlNodePtr xmlParam;
- int i;
- TSRMLS_FETCH();
-
- xmlParam = xmlNewNode(NULL,"BOGUS");
- xmlAddChild(parent, xmlParam);
- FIND_ZVAL_NULL(data, xmlParam, style);
-
- if (Z_TYPE_P(data) == IS_ARRAY) {
- i = zend_hash_num_elements(Z_ARRVAL_P(data));
- zend_hash_internal_pointer_reset(data->value.ht);
- for (;i > 0;i--) {
- xmlNodePtr xparam, item;
- xmlNodePtr key;
- zval **temp_data;
- char *key_val;
- int int_val;
-
- zend_hash_get_current_data(data->value.ht, (void **)&temp_data);
- if (Z_TYPE_PP(temp_data) != IS_NULL) {
- item = xmlNewNode(NULL,"item");
- xmlAddChild(xmlParam, item);
- key = xmlNewNode(NULL,"key");
- xmlAddChild(item,key);
- if (zend_hash_get_current_key(data->value.ht, &key_val, (long *)&int_val, FALSE) == HASH_KEY_IS_STRING) {
- if (style == SOAP_ENCODED) {
- xmlSetProp(key, "xsi:type", "xsd:string");
- }
- xmlNodeSetContent(key, key_val);
- } else {
- smart_str tmp = {0};
- smart_str_append_long(&tmp, int_val);
- smart_str_0(&tmp);
-
- if (style == SOAP_ENCODED) {
- xmlSetProp(key, "xsi:type", "xsd:int");
- }
- xmlNodeSetContentLen(key, tmp.c, tmp.len);
-
- smart_str_free(&tmp);
- }
-
- xparam = master_to_xml(get_conversion((*temp_data)->type), (*temp_data), style, item);
-
- xmlNodeSetName(xparam, "value");
- }
- zend_hash_move_forward(data->value.ht);
- }
- }
- if (style == SOAP_ENCODED) {
- set_ns_and_type(xmlParam, type);
- }
-
- return xmlParam;
-}
-
-static zval *to_zval_map(encodeTypePtr type, xmlNodePtr data)
-{
- zval *ret, *key, *value;
- xmlNodePtr trav, item, xmlKey, xmlValue;
- TSRMLS_FETCH();
-
- MAKE_STD_ZVAL(ret);
- FIND_XML_NULL(data, ret);
-
- if (data && data->children) {
- array_init(ret);
- trav = data->children;
-
- trav = data->children;
- FOREACHNODE(trav, "item", item) {
- xmlKey = get_node(item->children, "key");
- if (!xmlKey) {
- soap_error0(E_ERROR, "Encoding: Can't decode apache map, missing key");
- }
-
- xmlValue = get_node(item->children, "value");
- if (!xmlKey) {
- soap_error0(E_ERROR, "Encoding: Can't decode apache map, missing value");
- }
-
- key = master_to_zval(NULL, xmlKey);
- value = master_to_zval(NULL, xmlValue);
-
- if (Z_TYPE_P(key) == IS_STRING) {
- zend_hash_update(Z_ARRVAL_P(ret), Z_STRVAL_P(key), Z_STRLEN_P(key) + 1, &value, sizeof(zval *), NULL);
- } else if (Z_TYPE_P(key) == IS_LONG) {
- zend_hash_index_update(Z_ARRVAL_P(ret), Z_LVAL_P(key), &value, sizeof(zval *), NULL);
- } else {
- soap_error0(E_ERROR, "Encoding: Can't decode apache map, only Strings or Longs are allowd as keys");
- }
- zval_ptr_dtor(&key);
- }
- ENDFOREACH(trav);
- } else {
- ZVAL_NULL(ret);
- }
- return ret;
-}
-
-/* Unknown encode/decode */
-static xmlNodePtr guess_xml_convert(encodeTypePtr type, zval *data, int style, xmlNodePtr parent)
-{
- encodePtr enc;
- xmlNodePtr ret;
- TSRMLS_FETCH();
-
- if (data) {
- enc = get_conversion(data->type);
- } else {
- enc = get_conversion(IS_NULL);
- }
- ret = master_to_xml(enc, data, style, parent);
-/*
- if (style == SOAP_LITERAL && SOAP_GLOBAL(sdl)) {
- encode_add_ns(node, XSI_NAMESPACE);
- set_ns_and_type(ret, &enc->details);
- }
-*/
- return ret;
-}
-
-static zval *guess_zval_convert(encodeTypePtr type, xmlNodePtr data)
-{
- encodePtr enc = NULL;
- xmlAttrPtr tmpattr;
- char *type_name = NULL;
- zval *ret;
- TSRMLS_FETCH();
-
- data = check_and_resolve_href(data);
-
- if (data == NULL) {
- enc = get_conversion(IS_NULL);
- } else if (data->properties && get_attribute_ex(data->properties, "nil", XSI_NAMESPACE)) {
- enc = get_conversion(IS_NULL);
- } else {
- tmpattr = get_attribute_ex(data->properties,"type", XSI_NAMESPACE);
- if (tmpattr != NULL) {
- type_name = tmpattr->children->content;
- enc = get_encoder_from_prefix(SOAP_GLOBAL(sdl), data, tmpattr->children->content);
- if (enc != NULL) {
- encodePtr tmp = enc;
- while (tmp &&
- tmp->details.sdl_type != NULL &&
- tmp->details.sdl_type->kind != XSD_TYPEKIND_COMPLEX) {
- if (tmp == enc) {
- enc = NULL;
- break;
- }
- tmp = tmp->details.sdl_type->encode;
- }
- }
- }
-
- if (enc == NULL) {
- /* Didn't have a type, totally guess here */
- /* Logic: has children = IS_OBJECT else IS_STRING */
- xmlNodePtr trav;
-
- if (get_attribute(data->properties, "arrayType") ||
- get_attribute(data->properties, "itemType") ||
- get_attribute(data->properties, "arraySize")) {
- enc = get_conversion(SOAP_ENC_ARRAY);
- } else {
- enc = get_conversion(XSD_STRING);
- trav = data->children;
- while (trav != NULL) {
- if (trav->type == XML_ELEMENT_NODE) {
- enc = get_conversion(SOAP_ENC_OBJECT);
- break;
- }
- trav = trav->next;
- }
- }
- }
- }
- ret = master_to_zval(enc, data);
- if (SOAP_GLOBAL(sdl) && type_name && enc->details.sdl_type) {
- zval* soapvar;
- char *ns, *cptype;
- xmlNsPtr nsptr;
-
- MAKE_STD_ZVAL(soapvar);
- object_init_ex(soapvar, soap_var_class_entry);
- add_property_long(soapvar, "enc_type", enc->details.type);
-#ifdef ZEND_ENGINE_2
- ret->refcount--;
-#endif
- add_property_zval(soapvar, "enc_value", ret);
- parse_namespace(type_name, &cptype, &ns);
- nsptr = xmlSearchNs(data->doc, data, ns);
- add_property_string(soapvar, "enc_stype", cptype, 1);
- if (nsptr) {
- add_property_string(soapvar, "enc_ns", (char*)nsptr->href, 1);
- }
- efree(cptype);
- if (ns) {efree(ns);}
- ret = soapvar;
- }
- return ret;
-}
-
-/* Time encode/decode */
-static xmlNodePtr to_xml_datetime_ex(encodeTypePtr type, zval *data, char *format, int style, xmlNodePtr parent)
-{
- /* logic hacked from ext/standard/datetime.c */
- struct tm *ta, tmbuf;
- time_t timestamp;
- int max_reallocs = 5;
- size_t buf_len=64, real_len;
- char *buf;
- char tzbuf[6];
-
- xmlNodePtr xmlParam;
-
- xmlParam = xmlNewNode(NULL,"BOGUS");
- xmlAddChild(parent, xmlParam);
- FIND_ZVAL_NULL(data, xmlParam, style);
-
- if (Z_TYPE_P(data) == IS_LONG) {
- timestamp = Z_LVAL_P(data);
- ta = php_localtime_r(&timestamp, &tmbuf);
- /*ta = php_gmtime_r(&timestamp, &tmbuf);*/
-
- buf = (char *) emalloc(buf_len);
- while ((real_len = strftime(buf, buf_len, format, ta)) == buf_len || real_len == 0) {
- buf_len *= 2;
- buf = (char *) erealloc(buf, buf_len);
- if (!--max_reallocs) break;
- }
-
- /* Time zone support */
-#ifdef HAVE_TM_GMTOFF
- sprintf(tzbuf, "%c%02d%02d", (ta->tm_gmtoff < 0) ? '-' : '+', abs(ta->tm_gmtoff / 3600), abs( (ta->tm_gmtoff % 3600) / 60 ));
-#else
-# ifdef __CYGWIN__
- sprintf(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
- sprintf(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));
-# endif
-#endif
- if (strcmp(tzbuf,"+0000") == 0) {
- strcpy(tzbuf,"Z");
- real_len++;
- } else {
- real_len += 5;
- }
- if (real_len >= buf_len) {
- buf = (char *) erealloc(buf, real_len+1);
- }
- strcat(buf, tzbuf);
-
- xmlNodeSetContent(xmlParam, buf);
- efree(buf);
- } else if (Z_TYPE_P(data) == IS_STRING) {
- xmlNodeSetContentLen(xmlParam, Z_STRVAL_P(data), Z_STRLEN_P(data));
- }
-
- if (style == SOAP_ENCODED) {
- set_ns_and_type(xmlParam, type);
- }
- return xmlParam;
-}
-
-static xmlNodePtr to_xml_duration(encodeTypePtr type, zval *data, int style, xmlNodePtr parent)
-{
- /* TODO: '-'?P([0-9]+Y)?([0-9]+M)?([0-9]+D)?T([0-9]+H)?([0-9]+M)?([0-9]+S)? */
- return to_xml_string(type, data, style, parent);
-}
-
-static xmlNodePtr to_xml_datetime(encodeTypePtr type, zval *data, int style, xmlNodePtr parent)
-{
- return to_xml_datetime_ex(type, data, "%Y-%m-%dT%H:%M:%S", style, parent);
-}
-
-static xmlNodePtr to_xml_time(encodeTypePtr type, zval *data, int style, xmlNodePtr parent)
-{
- /* TODO: microsecconds */
- return to_xml_datetime_ex(type, data, "%H:%M:%S", style, parent);
-}
-
-static xmlNodePtr to_xml_date(encodeTypePtr type, zval *data, int style, xmlNodePtr parent)
-{
- return to_xml_datetime_ex(type, data, "%Y-%m-%d", style, parent);
-}
-
-static xmlNodePtr to_xml_gyearmonth(encodeTypePtr type, zval *data, int style, xmlNodePtr parent)
-{
- return to_xml_datetime_ex(type, data, "%Y-%m", style, parent);
-}
-
-static xmlNodePtr to_xml_gyear(encodeTypePtr type, zval *data, int style, xmlNodePtr parent)
-{
- return to_xml_datetime_ex(type, data, "%Y", style, parent);
-}
-
-static xmlNodePtr to_xml_gmonthday(encodeTypePtr type, zval *data, int style, xmlNodePtr parent)
-{
- return to_xml_datetime_ex(type, data, "--%m-%d", style, parent);
-}
-
-static xmlNodePtr to_xml_gday(encodeTypePtr type, zval *data, int style, xmlNodePtr parent)
-{
- return to_xml_datetime_ex(type, data, "---%d", style, parent);
-}
-
-static xmlNodePtr to_xml_gmonth(encodeTypePtr type, zval *data, int style, xmlNodePtr parent)
-{
- return to_xml_datetime_ex(type, data, "--%m--", style, parent);
-}
-
-static zval* to_zval_list(encodeTypePtr enc, xmlNodePtr data) {
- /*FIXME*/
- return to_zval_stringc(enc, data);
-}
-
-static xmlNodePtr to_xml_list(encodeTypePtr enc, zval *data, int style, xmlNodePtr parent) {
- xmlNodePtr ret;
- encodePtr list_enc = NULL;
-
- if (enc->sdl_type && enc->sdl_type->kind == XSD_TYPEKIND_LIST && enc->sdl_type->elements) {
- sdlTypePtr *type;
-
- zend_hash_internal_pointer_reset(enc->sdl_type->elements);
- if (zend_hash_get_current_data(enc->sdl_type->elements, (void**)&type) == SUCCESS) {
- list_enc = (*type)->encode;
- }
- }
-
- ret = xmlNewNode(NULL,"BOGUS");
- xmlAddChild(parent, ret);
- FIND_ZVAL_NULL(data, ret, style);
- if (Z_TYPE_P(data) == IS_ARRAY) {
- zval **tmp;
- smart_str list = {0};
- HashTable *ht = Z_ARRVAL_P(data);
-
- zend_hash_internal_pointer_reset(ht);
- while (zend_hash_get_current_data(ht, (void**)&tmp) == SUCCESS) {
- xmlNodePtr dummy = master_to_xml(list_enc, *tmp, SOAP_LITERAL, ret);
- if (dummy && dummy->children && dummy->children->content) {
- if (list.len != 0) {
- smart_str_appendc(&list, ' ');
- }
- smart_str_appends(&list, dummy->children->content);
- } else {
- soap_error0(E_ERROR, "Encoding: Violation of encoding rules");
- }
- xmlUnlinkNode(dummy);
- xmlFreeNode(dummy);
- zend_hash_move_forward(ht);
- }
- smart_str_0(&list);
- xmlNodeSetContentLen(ret, list.c, list.len);
- smart_str_free(&list);
- } else {
- zval tmp = *data;
- char *str, *start, *next;
- smart_str list = {0};
-
- if (Z_TYPE_P(data) != IS_STRING) {
- zval_copy_ctor(&tmp);
- convert_to_string(&tmp);
- data = &tmp;
- }
- str = estrndup(Z_STRVAL_P(data), Z_STRLEN_P(data));
- whiteSpace_collapse(str);
- start = str;
- while (start != NULL && *start != '\0') {
- xmlNodePtr dummy;
- zval dummy_zval;
-
- next = strchr(start,' ');
- if (next != NULL) {
- *next = '\0';
- next++;
- }
- ZVAL_STRING(&dummy_zval, start, 0);
- dummy = master_to_xml(list_enc, &dummy_zval, SOAP_LITERAL, ret);
- if (dummy && dummy->children && dummy->children->content) {
- if (list.len != 0) {
- smart_str_appendc(&list, ' ');
- }
- smart_str_appends(&list, dummy->children->content);
- } else {
- soap_error0(E_ERROR, "Encoding: Violation of encoding rules");
- }
- xmlUnlinkNode(dummy);
- xmlFreeNode(dummy);
-
- start = next;
- }
- smart_str_0(&list);
- xmlNodeSetContentLen(ret, list.c, list.len);
- smart_str_free(&list);
- efree(str);
- if (data == &tmp) {zval_dtor(&tmp);}
- }
- return ret;
-}
-
-static xmlNodePtr to_xml_list1(encodeTypePtr enc, zval *data, int style, xmlNodePtr parent) {
- /*FIXME: minLength=1 */
- return to_xml_list(enc,data,style, parent);
-}
-
-static zval* to_zval_union(encodeTypePtr enc, xmlNodePtr data) {
- /*FIXME*/
- return to_zval_list(enc, data);
-}
-
-static xmlNodePtr to_xml_union(encodeTypePtr enc, zval *data, int style, xmlNodePtr parent) {
- /*FIXME*/
- return to_xml_list(enc,data,style, parent);
-}
-
-zval *sdl_guess_convert_zval(encodeTypePtr enc, xmlNodePtr data)
-{
- sdlTypePtr type;
-
- type = enc->sdl_type;
- if (type == NULL) {
- return guess_zval_convert(enc, data);
- }
-/*FIXME: restriction support
- if (type && type->restrictions &&
- data && data->children && data->children->content) {
- if (type->restrictions->whiteSpace && type->restrictions->whiteSpace->value) {
- if (strcmp(type->restrictions->whiteSpace->value,"replace") == 0) {
- whiteSpace_replace(data->children->content);
- } else if (strcmp(type->restrictions->whiteSpace->value,"collapse") == 0) {
- whiteSpace_collapse(data->children->content);
- }
- }
- if (type->restrictions->enumeration) {
- if (!zend_hash_exists(type->restrictions->enumeration,data->children->content,strlen(data->children->content)+1)) {
- soap_error1(E_WARNING, "Encoding: Restriction: invalid enumeration value \"%s\"", data->children->content);
- }
- }
- if (type->restrictions->minLength &&
- strlen(data->children->content) < type->restrictions->minLength->value) {
- soap_error0(E_WARNING, "Encoding: Restriction: length less then 'minLength'");
- }
- if (type->restrictions->maxLength &&
- strlen(data->children->content) > type->restrictions->maxLength->value) {
- soap_error0(E_WARNING, "Encoding: Restriction: length greater then 'maxLength'");
- }
- if (type->restrictions->length &&
- strlen(data->children->content) != type->restrictions->length->value) {
- soap_error0(E_WARNING, "Encoding: Restriction: length is not equal to 'length'");
- }
- }
-*/
- switch (type->kind) {
- case XSD_TYPEKIND_SIMPLE:
- if (type->encode && enc != &type->encode->details) {
- return master_to_zval(type->encode, data);
- } else {
- return guess_zval_convert(enc, data);
- }
- break;
- case XSD_TYPEKIND_LIST:
- return to_zval_list(enc, data);
- case XSD_TYPEKIND_UNION:
- return to_zval_union(enc, data);
- case XSD_TYPEKIND_COMPLEX:
- case XSD_TYPEKIND_RESTRICTION:
- case XSD_TYPEKIND_EXTENSION:
- if (type->encode &&
- (type->encode->details.type == IS_ARRAY ||
- type->encode->details.type == SOAP_ENC_ARRAY)) {
- return to_zval_array(enc, data);
- }
- return to_zval_object(enc, data);
- default:
- soap_error0(E_ERROR, "Encoding: Internal Error");
- return guess_zval_convert(enc, data);
- }
-}
-
-xmlNodePtr sdl_guess_convert_xml(encodeTypePtr enc, zval *data, int style, xmlNodePtr parent)
-{
- sdlTypePtr type;
- xmlNodePtr ret = NULL;
-
- type = enc->sdl_type;
-
- if (type == NULL) {
- ret = guess_xml_convert(enc, data, style, parent);
- if (style == SOAP_ENCODED) {
- set_ns_and_type(ret, enc);
- }
- return ret;
- }
-/*FIXME: restriction support
- if (type) {
- if (type->restrictions && Z_TYPE_P(data) == IS_STRING) {
- if (type->restrictions->enumeration) {
- if (!zend_hash_exists(type->restrictions->enumeration,Z_STRVAL_P(data),Z_STRLEN_P(data)+1)) {
- soap_error1(E_WARNING, "Encoding: Restriction: invalid enumeration value \"%s\".", Z_STRVAL_P(data));
- }
- }
- if (type->restrictions->minLength &&
- Z_STRLEN_P(data) < type->restrictions->minLength->value) {
- soap_error0(E_WARNING, "Encoding: Restriction: length less then 'minLength'");
- }
- if (type->restrictions->maxLength &&
- Z_STRLEN_P(data) > type->restrictions->maxLength->value) {
- soap_error0(E_WARNING, "Encoding: Restriction: length greater then 'maxLength'");
- }
- if (type->restrictions->length &&
- Z_STRLEN_P(data) != type->restrictions->length->value) {
- soap_error0(E_WARNING, "Encoding: Restriction: length is not equal to 'length'");
- }
- }
- }
-*/
- switch(type->kind) {
- case XSD_TYPEKIND_SIMPLE:
- if (type->encode && enc != &type->encode->details) {
- ret = master_to_xml(type->encode, data, style, parent);
- } else {
- ret = guess_xml_convert(enc, data, style, parent);
- }
- break;
- case XSD_TYPEKIND_LIST:
- ret = to_xml_list(enc, data, style, parent);
- break;
- case XSD_TYPEKIND_UNION:
- ret = to_xml_union(enc, data, style, parent);
- break;
- case XSD_TYPEKIND_COMPLEX:
- case XSD_TYPEKIND_RESTRICTION:
- case XSD_TYPEKIND_EXTENSION:
- if (type->encode &&
- (type->encode->details.type == IS_ARRAY ||
- type->encode->details.type == SOAP_ENC_ARRAY)) {
- ret = to_xml_array(enc, data, style, parent);
- } else {
- ret = to_xml_object(enc, data, style, parent);
- }
- break;
- default:
- soap_error0(E_ERROR, "Encoding: Internal Error");
- break;
- }
- if (style == SOAP_ENCODED) {
- set_ns_and_type(ret, enc);
- }
- return ret;
-}
-
-static xmlNodePtr check_and_resolve_href(xmlNodePtr data)
-{
- if (data && data->properties) {
- xmlAttrPtr href;
-
- href = data->properties;
- while (1) {
- href = get_attribute(href, "href");
- if (href == NULL || href->ns == NULL) {break;}
- href = href->next;
- }
- if (href) {
- /* Internal href try and find node */
- if (href->children->content[0] == '#') {
- xmlNodePtr ret = get_node_with_attribute_recursive(data->doc->children, NULL, "id", &href->children->content[1]);
- if (!ret) {
- soap_error1(E_ERROR, "Encoding: Unresolved reference '%s'", href->children->content);
- }
- return ret;
- } else {
- /* TODO: External href....? */
- soap_error1(E_ERROR, "Encoding: External reference '%s'", href->children->content);
- }
- }
- /* SOAP 1.2 enc:id enc:ref */
- href = get_attribute_ex(data->properties, "ref", SOAP_1_2_ENC_NAMESPACE);
- if (href) {
- char* id;
- xmlNodePtr ret;
-
- if (href->children->content[0] == '#') {
- id = href->children->content+1;
- } else {
- id = href->children->content;
- }
- ret = get_node_with_attribute_recursive_ex(data->doc->children, NULL, NULL, "id", id, SOAP_1_2_ENC_NAMESPACE);
- if (!ret) {
- soap_error1(E_ERROR, "Encoding: Unresolved reference '%s'", href->children->content);
- } else if (ret == data) {
- soap_error1(E_ERROR, "Encoding: Violation of id and ref information items '%s'", href->children->content);
- }
- return ret;
- }
- }
- return data;
-}
-
-static void set_ns_and_type(xmlNodePtr node, encodeTypePtr type)
-{
- set_ns_and_type_ex(node, type->ns, type->type_str);
-}
-
-static void set_ns_and_type_ex(xmlNodePtr node, char *ns, char *type)
-{
- smart_str nstype = {0};
- get_type_str(node, ns, type, &nstype);
- xmlSetProp(node, "xsi:type", nstype.c);
- smart_str_free(&nstype);
-}
-
-xmlNsPtr encode_add_ns(xmlNodePtr node, const char* ns)
-{
- xmlNsPtr xmlns;
-
- if (ns == NULL) {
- return NULL;
- }
-
- xmlns = xmlSearchNsByHref(node->doc,node,ns);
- if (xmlns == NULL) {
- char* prefix;
- TSRMLS_FETCH();
-
- if (zend_hash_find(&SOAP_GLOBAL(defEncNs), (char*)ns, strlen(ns) + 1, (void **)&prefix) == SUCCESS) {
- xmlns = xmlNewNs(node->doc->children,ns,prefix);
- } else {
- smart_str prefix = {0};
- int num = ++SOAP_GLOBAL(cur_uniq_ns);
-
- smart_str_appendl(&prefix, "ns", 2);
- smart_str_append_long(&prefix, num);
- smart_str_0(&prefix);
- xmlns = xmlNewNs(node->doc->children,ns,prefix.c);
- smart_str_free(&prefix);
- }
- }
- return xmlns;
-}
-
-void encode_reset_ns()
-{
- TSRMLS_FETCH();
- SOAP_GLOBAL(cur_uniq_ns) = 0;
-}
-
-static encodePtr get_conversion(int encode)
-{
- encodePtr *enc = NULL;
- TSRMLS_FETCH();
-
- if (zend_hash_index_find(&SOAP_GLOBAL(defEncIndex), encode, (void **)&enc) == FAILURE) {
- if (SOAP_GLOBAL(overrides)) {
- smart_str nscat = {0};
-
- smart_str_appendl(&nscat, (*enc)->details.ns, strlen((*enc)->details.ns));
- smart_str_appendc(&nscat, ':');
- smart_str_appendl(&nscat, (*enc)->details.type_str, strlen((*enc)->details.type_str));
- smart_str_0(&nscat);
-
- if (zend_hash_find(SOAP_GLOBAL(overrides), nscat.c, nscat.len + 1, (void **)&enc) == FAILURE) {
- smart_str_free(&nscat);
- soap_error0(E_ERROR, "Encoding: Cannot find encoding");
- return NULL;
- } else {
- smart_str_free(&nscat);
- return *enc;
- }
- } else {
- soap_error0(E_ERROR, "Encoding: Cannot find encoding");
- return NULL;
- }
- } else {
- return *enc;
- }
-}
-
-static int is_map(zval *array)
-{
- int i, count = zend_hash_num_elements(Z_ARRVAL_P(array));
-
- zend_hash_internal_pointer_reset(Z_ARRVAL_P(array));
- for (i = 0;i < count;i++) {
- if (zend_hash_get_current_key_type(Z_ARRVAL_P(array)) == HASH_KEY_IS_STRING) {
- return TRUE;
- }
- zend_hash_move_forward(Z_ARRVAL_P(array));
- }
- return FALSE;
-}
-
-static void get_array_type(xmlNodePtr node, zval *array, smart_str *type TSRMLS_DC)
-{
- HashTable *ht = HASH_OF(array);
- int i, count, cur_type, prev_type, different;
- zval **tmp;
- char *prev_stype = NULL, *cur_stype = NULL, *prev_ns = NULL, *cur_ns = NULL;
-
- if (!array || Z_TYPE_P(array) != IS_ARRAY) {
- smart_str_appendl(type, "xsd:anyType", 11);
- }
-
- different = FALSE;
- cur_type = prev_type = 0;
- count = zend_hash_num_elements(ht);
-
- zend_hash_internal_pointer_reset(ht);
- for (i = 0;i < count;i++) {
- zend_hash_get_current_data(ht, (void **)&tmp);
-
- if (Z_TYPE_PP(tmp) == IS_OBJECT &&
- Z_OBJCE_PP(tmp) == soap_var_class_entry) {
- zval **ztype;
-
- if (zend_hash_find(Z_OBJPROP_PP(tmp), "enc_type", sizeof("enc_type"), (void **)&ztype) == FAILURE) {
- soap_error0(E_ERROR, "Encoding: SoapVar hasn't 'enc_type' property");
- }
- cur_type = Z_LVAL_PP(ztype);
-
- if (zend_hash_find(Z_OBJPROP_PP(tmp), "enc_stype", sizeof("enc_stype"), (void **)&ztype) == SUCCESS) {
- cur_stype = Z_STRVAL_PP(ztype);
- } else {
- cur_stype = NULL;
- }
-
- if (zend_hash_find(Z_OBJPROP_PP(tmp), "enc_ns", sizeof("enc_ns"), (void **)&ztype) == SUCCESS) {
- cur_ns = Z_STRVAL_PP(ztype);
- } else {
- cur_ns = NULL;
- }
-
- } else if (Z_TYPE_PP(tmp) == IS_ARRAY && is_map(*tmp)) {
- cur_type = APACHE_MAP;
- cur_stype = NULL;
- cur_ns = NULL;
- } else {
- cur_type = Z_TYPE_PP(tmp);
- cur_stype = NULL;
- cur_ns = NULL;
- }
-
- if (i > 0) {
- if ((cur_type != prev_type) ||
- (cur_stype != NULL && prev_stype != NULL && strcmp(cur_stype,prev_stype) != 0) ||
- (cur_stype == NULL && cur_stype != prev_stype) ||
- (cur_ns != NULL && prev_ns != NULL && strcmp(cur_ns,prev_ns) != 0) ||
- (cur_ns == NULL && cur_ns != prev_ns)) {
- different = TRUE;
- break;
- }
- }
-
- prev_type = cur_type;
- prev_stype = cur_stype;
- prev_ns = cur_ns;
- zend_hash_move_forward(ht);
- }
-
- if (different || count == 0) {
- smart_str_appendl(type, "xsd:anyType", 11);
- } else {
- if (cur_stype != NULL) {
- if (cur_ns) {
- xmlNsPtr ns = encode_add_ns(node,cur_ns);
- smart_str_appends(type,ns->prefix);
- smart_str_appendc(type,':');
- }
- smart_str_appends(type,cur_stype);
- smart_str_0(type);
- } else {
- encodePtr enc;
-
- enc = get_conversion(cur_type);
- get_type_str(node, enc->details.ns, enc->details.type_str, type);
- }
- }
-}
-
-static void get_type_str(xmlNodePtr node, const char* ns, const char* type, smart_str* ret)
-{
- TSRMLS_FETCH();
-
- if (ns) {
- xmlNsPtr xmlns;
- if (SOAP_GLOBAL(soap_version) == SOAP_1_2 &&
- strcmp(ns,SOAP_1_1_ENC_NAMESPACE) == 0) {
- ns = SOAP_1_2_ENC_NAMESPACE;
- } else if (SOAP_GLOBAL(soap_version) == SOAP_1_1 &&
- strcmp(ns,SOAP_1_2_ENC_NAMESPACE) == 0) {
- ns = SOAP_1_1_ENC_NAMESPACE;
- }
- xmlns = encode_add_ns(node,ns);
- smart_str_appends(ret, xmlns->prefix);
- smart_str_appendc(ret, ':');
- }
- smart_str_appendl(ret, type, strlen(type));
- smart_str_0(ret);
-}
-
-static void delete_mapping(void *data)
-{
- soapMappingPtr map = (soapMappingPtr)data;
-
- if (map->ns) {
- efree(map->ns);
- }
- if (map->ctype) {
- efree(map->ctype);
- }
-
- if (map->type == SOAP_MAP_FUNCTION) {
- if (map->map_functions.to_xml_before) {
- zval_ptr_dtor(&map->map_functions.to_xml_before);
- }
- if (map->map_functions.to_xml) {
- zval_ptr_dtor(&map->map_functions.to_xml);
- }
- if (map->map_functions.to_xml_after) {
- zval_ptr_dtor(&map->map_functions.to_xml_after);
- }
- if (map->map_functions.to_zval_before) {
- zval_ptr_dtor(&map->map_functions.to_zval_before);
- }
- if (map->map_functions.to_zval) {
- zval_ptr_dtor(&map->map_functions.to_zval);
- }
- if (map->map_functions.to_zval_after) {
- zval_ptr_dtor(&map->map_functions.to_zval_after);
- }
- }
- efree(map);
-}
-
-void delete_encoder(void *encode)
-{
- encodePtr t = *((encodePtr*)encode);
- if (t->details.ns) {
- efree(t->details.ns);
- }
- if (t->details.type_str) {
- efree(t->details.type_str);
- }
- if (t->details.map) {
- delete_mapping(t->details.map);
- }
- efree(t);
-}
diff --git a/ext/soap/php_encoding.h b/ext/soap/php_encoding.h
deleted file mode 100644
index 1e26cdb535..0000000000
--- a/ext/soap/php_encoding.h
+++ /dev/null
@@ -1,221 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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. |
- +----------------------------------------------------------------------+
- | Authors: Brad Lafountain <rodif_bl@yahoo.com> |
- | Shane Caraveo <shane@caraveo.com> |
- | Dmitry Stogov <dmitry@zend.com> |
- +----------------------------------------------------------------------+
-*/
-/* $Id$ */
-
-#ifndef PHP_ENCODING_H
-#define PHP_ENCODING_H
-
-#define XSD_1999_NAMESPACE "http://www.w3.org/1999/XMLSchema"
-#define XSD_1999_TIMEINSTANT 401
-#define XSD_1999_TIMEINSTANT_STRING "timeInstant"
-
-#define SOAP_1_1_ENV_NAMESPACE "http://schemas.xmlsoap.org/soap/envelope/"
-#define SOAP_1_1_ENV_NS_PREFIX "SOAP-ENV"
-
-#define SOAP_1_2_ENV_NAMESPACE "http://www.w3.org/2003/05/soap-envelope"
-#define SOAP_1_2_ENV_NS_PREFIX "env"
-
-#define SOAP_1_1_ENC_NAMESPACE "http://schemas.xmlsoap.org/soap/encoding/"
-#define SOAP_1_1_ENC_NS_PREFIX "SOAP-ENC"
-
-#define SOAP_1_2_ENC_NAMESPACE "http://www.w3.org/2003/05/soap-encoding"
-#define SOAP_1_2_ENC_NS_PREFIX "enc"
-
-#define SCHEMA_NAMESPACE "http://www.w3.org/2001/XMLSchema"
-#define XSD_NAMESPACE "http://www.w3.org/2001/XMLSchema"
-#define XSD_NS_PREFIX "xsd"
-#define XSI_NAMESPACE "http://www.w3.org/2001/XMLSchema-instance"
-#define XSI_NS_PREFIX "xsi"
-#define XML_NAMESPACE "http://www.w3.org/XML/1998/namespace"
-#define XML_NS_PREFIX "xml"
-
-#define XSD_STRING 101
-#define XSD_STRING_STRING "string"
-#define XSD_BOOLEAN 102
-#define XSD_BOOLEAN_STRING "boolean"
-#define XSD_DECIMAL 103
-#define XSD_DECIMAL_STRING "decimal"
-#define XSD_FLOAT 104
-#define XSD_FLOAT_STRING "float"
-#define XSD_DOUBLE 105
-#define XSD_DOUBLE_STRING "double"
-#define XSD_DURATION 106
-#define XSD_DURATION_STRING "duration"
-#define XSD_DATETIME 107
-#define XSD_DATETIME_STRING "dateTime"
-#define XSD_TIME 108
-#define XSD_TIME_STRING "time"
-#define XSD_DATE 109
-#define XSD_DATE_STRING "date"
-#define XSD_GYEARMONTH 110
-#define XSD_GYEARMONTH_STRING "gYearMonth"
-#define XSD_GYEAR 111
-#define XSD_GYEAR_STRING "gYear"
-#define XSD_GMONTHDAY 112
-#define XSD_GMONTHDAY_STRING "gMonthDay"
-#define XSD_GDAY 113
-#define XSD_GDAY_STRING "gDay"
-#define XSD_GMONTH 114
-#define XSD_GMONTH_STRING "gMonth"
-#define XSD_HEXBINARY 115
-#define XSD_HEXBINARY_STRING "hexBinary"
-#define XSD_BASE64BINARY 116
-#define XSD_BASE64BINARY_STRING "base64Binary"
-#define XSD_ANYURI 117
-#define XSD_ANYURI_STRING "anyURI"
-#define XSD_QNAME 118
-#define XSD_QNAME_STRING "QName"
-#define XSD_NOTATION 119
-#define XSD_NOTATION_STRING "NOTATION"
-#define XSD_NORMALIZEDSTRING 120
-#define XSD_NORMALIZEDSTRING_STRING "normalizedString"
-#define XSD_TOKEN 121
-#define XSD_TOKEN_STRING "token"
-#define XSD_LANGUAGE 122
-#define XSD_LANGUAGE_STRING "language"
-#define XSD_NMTOKEN 123
-#define XSD_NMTOKEN_STRING "NMTOKEN"
-#define XSD_NAME 124
-#define XSD_NAME_STRING "Name"
-#define XSD_NCNAME 125
-#define XSD_NCNAME_STRING "NCName"
-#define XSD_ID 126
-#define XSD_ID_STRING "ID"
-#define XSD_IDREF 127
-#define XSD_IDREF_STRING "IDREF"
-#define XSD_IDREFS 128
-#define XSD_IDREFS_STRING "IDREFS"
-#define XSD_ENTITY 129
-#define XSD_ENTITY_STRING "ENTITY"
-#define XSD_ENTITIES 130
-#define XSD_ENTITIES_STRING "ENTITIES"
-#define XSD_INTEGER 131
-#define XSD_INTEGER_STRING "integer"
-#define XSD_NONPOSITIVEINTEGER 132
-#define XSD_NONPOSITIVEINTEGER_STRING "nonPositiveInteger"
-#define XSD_NEGATIVEINTEGER 133
-#define XSD_NEGATIVEINTEGER_STRING "negativeInteger"
-#define XSD_LONG 134
-#define XSD_LONG_STRING "long"
-#define XSD_INT 135
-#define XSD_INT_STRING "int"
-#define XSD_SHORT 136
-#define XSD_SHORT_STRING "short"
-#define XSD_BYTE 137
-#define XSD_BYTE_STRING "byte"
-#define XSD_NONNEGATIVEINTEGER 138
-#define XSD_NONNEGATIVEINTEGER_STRING "nonNegativeInteger"
-#define XSD_UNSIGNEDLONG 139
-#define XSD_UNSIGNEDLONG_STRING "unsignedLong"
-#define XSD_UNSIGNEDINT 140
-#define XSD_UNSIGNEDINT_STRING "unsignedInt"
-#define XSD_UNSIGNEDSHORT 141
-#define XSD_UNSIGNEDSHORT_STRING "unsignedShort"
-#define XSD_UNSIGNEDBYTE 142
-#define XSD_UNSIGNEDBYTE_STRING "unsignedByte"
-#define XSD_POSITIVEINTEGER 143
-#define XSD_POSITIVEINTEGER_STRING "positiveInteger"
-#define XSD_NMTOKENS 144
-#define XSD_NMTOKENS_STRING "NMTOKENS"
-#define XSD_ANYTYPE 145
-#define XSD_ANYTYPE_STRING "anyType"
-#define XSD_UR_TYPE 146
-#define XSD_UR_TYPE_STRING "ur-type"
-
-#define APACHE_NAMESPACE "http://xml.apache.org/xml-soap"
-#define APACHE_MAP 200
-#define APACHE_MAP_STRING "Map"
-
-#define SOAP_ENC_ARRAY 300
-#define SOAP_ENC_ARRAY_STRING "Array"
-#define SOAP_ENC_OBJECT 301
-#define SOAP_ENC_OBJECT_STRING "Struct"
-
-#define WSDL_NAMESPACE "http://schemas.xmlsoap.org/wsdl/"
-#define WSDL_NS_PREFIX "wsdl"
-
-#define WSDL_SOAP11_NAMESPACE "http://schemas.xmlsoap.org/wsdl/soap/"
-#define WSDL_SOAP12_NAMESPACE "http://schemas.xmlsoap.org/wsdl/soap12/"
-#define RPC_SOAP12_NAMESPACE "http://www.w3.org/2003/05/soap-rpc"
-#define RPC_SOAP12_NS_PREFIX "rpc"
-
-#define WSDL_HTTP11_NAMESPACE "http://schemas.xmlsoap.org/wsdl/http/"
-#define WSDL_HTTP12_NAMESPACE "http://www.w3.org/2003/05/soap/bindings/HTTP/"
-#define WSDL_HTTP_NS_PREFIX "http"
-
-#define WSDL_HTTP_TRANSPORT "http://schemas.xmlsoap.org/soap/http"
-
-#define WSDL_MIME_NAMESPACE "http://schemas.xmlsoap.org/wsdl/mime/"
-
-#define WSDL_DIME_NAMESPACE "http://schemas.xmlsoap.org/ws/2002/04/dime/wsdl/"
-#define WSDL_DIME_OPEN "http://schemas.xmlsoap.org/ws/2002/04/dime/open-layout"
-#define WSDL_DIME_CLOSED "http://schemas.xmlsoap.org/ws/2002/04/dime/closed-layout"
-
-#define UNKNOWN_TYPE 999998
-#define END_KNOWN_TYPES 999999
-
-struct _encodeType {
- int type;
- char *type_str;
- char *ns;
- sdlTypePtr sdl_type;
- soapMappingPtr map;
-};
-
-struct _encode {
- encodeType details;
- zval *(*to_zval)(encodeTypePtr type, xmlNodePtr data);
- xmlNodePtr (*to_xml)(encodeTypePtr type, zval *data, int style, xmlNodePtr parent);
-
- xmlNodePtr (*to_zval_before)(encodeTypePtr type, xmlNodePtr data, int style);
- zval *(*to_zval_after)(encodeTypePtr type, zval *data);
-
- zval *(*to_xml_before)(encodeTypePtr type, zval *data);
- xmlNodePtr (*to_xml_after)(encodeTypePtr type, xmlNodePtr data, int style);
-};
-
-/* Master functions all encode/decode should be called thur these functions */
-xmlNodePtr master_to_xml(encodePtr encode, zval *data, int style, xmlNodePtr parent);
-zval *master_to_zval(encodePtr encode, xmlNodePtr data);
-
-#ifdef HAVE_PHP_DOMXML
-/* user defined mapping */
-zval *to_xml_before_user(encodeTypePtr type, zval *data);
-xmlNodePtr to_xml_user(encodeTypePtr type, zval *data, int style, xmlNodePtr parent);
-xmlNodePtr to_xml_after_user(encodeTypePtr type, xmlNodePtr node, int style);
-xmlNodePtr to_zval_before_user(encodeTypePtr type, xmlNodePtr node, int style);
-zval *to_zval_user(encodeTypePtr type, xmlNodePtr node);
-zval *to_zval_after_user(encodeTypePtr type, zval *data);
-#endif
-
-void whiteSpace_replace(char* str);
-void whiteSpace_collapse(char* str);
-
-xmlNodePtr sdl_guess_convert_xml(encodeTypePtr enc, zval* data, int style, xmlNodePtr parent);
-zval *sdl_guess_convert_zval(encodeTypePtr enc, xmlNodePtr data);
-
-void encode_reset_ns();
-xmlNsPtr encode_add_ns(xmlNodePtr node, const char* ns);
-
-void delete_encoder(void *handle);
-
-extern encode defaultEncoding[];
-
-#endif
diff --git a/ext/soap/php_http.c b/ext/soap/php_http.c
deleted file mode 100644
index b4f9c2351a..0000000000
--- a/ext/soap/php_http.c
+++ /dev/null
@@ -1,969 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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. |
- +----------------------------------------------------------------------+
- | Authors: Brad Lafountain <rodif_bl@yahoo.com> |
- | Shane Caraveo <shane@caraveo.com> |
- | Dmitry Stogov <dmitry@zend.com> |
- +----------------------------------------------------------------------+
-*/
-/* $Id$ */
-
-#include "php_soap.h"
-#include "ext/standard/base64.h"
-
-static char *get_http_header_value(char *headers, char *type);
-static int get_http_body(php_stream *socketd, char *headers, char **response, int *out_size TSRMLS_DC);
-static int get_http_headers(php_stream *socketd,char **response, int *out_size TSRMLS_DC);
-
-#define smart_str_append_const(str, const) \
- smart_str_appendl(str,const,sizeof(const)-1)
-
-static int stream_alive(php_stream *stream TSRMLS_DC)
-{
- int socket;
- fd_set rfds;
- struct timeval tv;
- char buf;
-
- if (stream == NULL || stream->eof || php_stream_cast(stream, PHP_STREAM_AS_FD_FOR_SELECT, (void**)&socket, 0) != SUCCESS) {
- return FALSE;
- }
- if (socket == -1) {
- return FALSE;
- } else {
- FD_ZERO(&rfds);
- FD_SET(socket, &rfds);
- tv.tv_sec = 0;
- tv.tv_usec = 0;
- if (select(socket + 1, &rfds, NULL, NULL, &tv) > 0 && FD_ISSET(socket, &rfds)) {
- if (0 == recv(socket, &buf, sizeof(buf), MSG_PEEK) && php_socket_errno() != EAGAIN) {
- return FALSE;
- }
- }
- }
- return TRUE;
-}
-
-/* Proxy HTTP Authentication */
-static void proxy_authentication(zval* this_ptr, smart_str* soap_headers TSRMLS_DC)
-{
- zval **login, **password;
-
- if (zend_hash_find(Z_OBJPROP_P(this_ptr), "_proxy_login", sizeof("_proxy_login"), (void **)&login) == SUCCESS) {
- char* buf;
- int len;
- smart_str auth = {0};
-
- smart_str_appendl(&auth, Z_STRVAL_PP(login), Z_STRLEN_PP(login));
- smart_str_appendc(&auth, ':');
- if (zend_hash_find(Z_OBJPROP_P(this_ptr), "_proxy_password", sizeof("_proxy_password"), (void **)&password) == SUCCESS) {
- smart_str_appendl(&auth, Z_STRVAL_PP(password), Z_STRLEN_PP(password));
- }
- smart_str_0(&auth);
- buf = php_base64_encode(auth.c, auth.len, &len);
- smart_str_append_const(soap_headers, "Proxy-Authorization: Basic ");
- smart_str_appendl(soap_headers, buf, len);
- smart_str_append_const(soap_headers, "\r\n");
- efree(buf);
- smart_str_free(&auth);
- }
-}
-
-static php_stream* http_connect(zval* this_ptr, php_url *phpurl, int use_ssl, int *use_proxy TSRMLS_DC)
-{
- php_stream *stream;
- zval **proxy_host, **proxy_port;
- char *host;
-#ifdef ZEND_ENGINE_2
- char *name;
- long namelen;
-#endif
- int port;
- int old_error_reporting;
-
- if (zend_hash_find(Z_OBJPROP_P(this_ptr), "_proxy_host", sizeof("_proxy_host"), (void **) &proxy_host) == SUCCESS &&
- Z_TYPE_PP(proxy_host) == IS_STRING &&
- zend_hash_find(Z_OBJPROP_P(this_ptr), "_proxy_port", sizeof("_proxy_port"), (void **) &proxy_port) == SUCCESS &&
- Z_TYPE_PP(proxy_port) == IS_LONG) {
- host = Z_STRVAL_PP(proxy_host);
- port = Z_LVAL_PP(proxy_port);
- *use_proxy = 1;
- } else {
- host = phpurl->host;
- port = phpurl->port;
- }
-
- old_error_reporting = EG(error_reporting);
- EG(error_reporting) &= ~(E_WARNING|E_NOTICE|E_USER_WARNING|E_USER_NOTICE);
-
-#ifdef ZEND_ENGINE_2
- namelen = spprintf(&name, 0, "%s://%s:%d", (use_ssl && !*use_proxy)? "ssl" : "tcp", host, port);
- stream = php_stream_xport_create(name, namelen,
- ENFORCE_SAFE_MODE | REPORT_ERRORS,
- STREAM_XPORT_CLIENT | STREAM_XPORT_CONNECT,
- NULL /*persistent_id*/,
- NULL /*timeout*/,
- NULL, NULL, NULL);
- efree(name);
-#else
- stream = php_stream_sock_open_host(host, port, SOCK_STREAM, NULL, NULL);
-#endif
-
- /* SSL & proxy */
- if (stream && *use_proxy && use_ssl) {
- smart_str soap_headers = {0};
- char *http_headers;
- int http_header_size;
-
- smart_str_append_const(&soap_headers, "CONNECT ");
- smart_str_appends(&soap_headers, phpurl->host);
- smart_str_appendc(&soap_headers, ':');
- smart_str_append_unsigned(&soap_headers, phpurl->port);
- smart_str_append_const(&soap_headers, " HTTP/1.1\r\n");
- proxy_authentication(this_ptr, &soap_headers TSRMLS_CC);
- smart_str_append_const(&soap_headers, "\r\n");
- if (php_stream_write(stream, soap_headers.c, soap_headers.len) != soap_headers.len) {
- php_stream_close(stream);
- stream = NULL;
- }
- smart_str_free(&soap_headers);
-
- if (stream) {
- if (!get_http_headers(stream, &http_headers, &http_header_size TSRMLS_CC) || http_headers == NULL) {
- php_stream_close(stream);
- stream = NULL;
- }
- efree(http_headers);
- }
-#ifdef ZEND_ENGINE_2
- /* enable SSL transport layer */
- if (stream) {
- if (php_stream_xport_crypto_setup(stream, STREAM_CRYPTO_METHOD_SSLv23_CLIENT, NULL TSRMLS_CC) < 0 ||
- php_stream_xport_crypto_enable(stream, 1 TSRMLS_CC) < 0) {
- php_stream_close(stream);
- stream = NULL;
- }
- }
-#endif
- }
-
-#if !defined(ZEND_ENGINE_2) && defined(HAVE_OPENSSL_EXT)
- if (stream && use_ssl) {
- /* enable SSL transport layer */
- if (FAILURE == php_stream_sock_ssl_activate(stream, 1)) {
- php_stream_close(stream);
- stream = NULL;
- }
- }
-#endif
- EG(error_reporting) = old_error_reporting;
- return stream;
-}
-
-static int in_domain(const char *host, const char *domain)
-{
- if (domain[0] == '.') {
- int l1 = strlen(host);
- int l2 = strlen(domain);
- if (l1 > l2) {
- return strcmp(host+l1-l2,domain) == 0;
- } else {
- return 0;
- }
- } else {
- return strcmp(host,domain) == 0;
- }
-}
-
-int make_http_soap_request(zval *this_ptr,
- char *buf,
- int buf_size,
- char *location,
- char *soapaction,
- int soap_version,
- char **buffer,
- int *buffer_len TSRMLS_DC)
-{
- char *request;
- smart_str soap_headers = {0};
- int request_size, err;
- php_url *phpurl = NULL;
- php_stream *stream;
- zval **trace, **tmp;
- int use_proxy = 0;
- int use_ssl;
- char *http_headers, *http_body, *content_type, *http_version, *cookie_itt;
- int http_header_size, http_body_size, http_close;
- char *connection;
- int http_1_1 = 0;
- int http_status = 0;
- char *content_encoding;
-
- if (this_ptr == NULL || Z_TYPE_P(this_ptr) != IS_OBJECT) {
- return FALSE;
- }
-
- request = buf;
- request_size = buf_size;
- /* Compress request */
- if (zend_hash_find(Z_OBJPROP_P(this_ptr), "compression", sizeof("compression"), (void **)&tmp) == SUCCESS && Z_TYPE_PP(tmp) == IS_LONG) {
- int level = Z_LVAL_PP(tmp) & 0x0f;
- int kind = Z_LVAL_PP(tmp) & SOAP_COMPRESSION_DEFLATE;
-
- if ((Z_LVAL_PP(tmp) & SOAP_COMPRESSION_ACCEPT) != 0) {
- smart_str_append_const(&soap_headers,"Accept-Encoding: gzip, deflate\r\n");
- }
- if (level > 0) {
- zval func;
- zval retval;
- zval param1, param2, param3;
- zval *params[3];
- int n;
-
- params[0] = &param1;
- INIT_PZVAL(params[0]);
- params[1] = &param2;
- INIT_PZVAL(params[1]);
- params[2] = &param3;
- INIT_PZVAL(params[2]);
- ZVAL_STRINGL(params[0], buf, buf_size, 0);
- ZVAL_LONG(params[1], level);
- if (kind == SOAP_COMPRESSION_DEFLATE) {
- n = 2;
- ZVAL_STRING(&func, "gzcompress", 0);
- smart_str_append_const(&soap_headers,"Content-Encoding: deflate\r\n");
- } else {
- n = 3;
- ZVAL_STRING(&func, "gzencode", 0);
- smart_str_append_const(&soap_headers,"Content-Encoding: gzip\r\n");
- ZVAL_LONG(params[2], 1);
- }
- if (call_user_function(CG(function_table), (zval**)NULL, &func, &retval, n, params TSRMLS_CC) == SUCCESS &&
- Z_TYPE(retval) == IS_STRING) {
- request = Z_STRVAL(retval);
- request_size = Z_STRLEN(retval);
- } else {
- if (request != buf) {efree(request);}
- return FALSE;
- }
- }
- }
-
- if (zend_hash_find(Z_OBJPROP_P(this_ptr), "httpsocket", sizeof("httpsocket"), (void **)&tmp) == SUCCESS) {
- php_stream_from_zval_no_verify(stream,tmp);
- if (zend_hash_find(Z_OBJPROP_P(this_ptr), "_use_proxy", sizeof("_use_proxy"), (void **)&tmp) == SUCCESS && Z_TYPE_PP(tmp) == IS_LONG) {
- use_proxy = Z_LVAL_PP(tmp);
- }
- } else {
- stream = NULL;
- }
-
- if (location != NULL && location[0] != '\000') {
- phpurl = php_url_parse(location);
- }
-
-try_again:
- if (phpurl == NULL || phpurl->host == NULL) {
- if (phpurl != NULL) {php_url_free(phpurl);}
- if (request != buf) {efree(request);}
- add_soap_fault(this_ptr, "HTTP", "Unable to parse URL", NULL, NULL TSRMLS_CC);
- return FALSE;
- }
-
- use_ssl = 0;
- if (phpurl->scheme != NULL && strcmp(phpurl->scheme, "https") == 0) {
- use_ssl = 1;
- } else if (phpurl->scheme == NULL || strcmp(phpurl->scheme, "http") != 0) {
- php_url_free(phpurl);
- if (request != buf) {efree(request);}
- add_soap_fault(this_ptr, "HTTP", "Unknown protocol. Only http and https are allowed.", NULL, NULL TSRMLS_CC);
- return FALSE;
- }
-#ifdef ZEND_ENGINE_2
- if (use_ssl && php_stream_locate_url_wrapper("https://", NULL, STREAM_LOCATE_WRAPPERS_ONLY TSRMLS_CC) == NULL) {
- php_url_free(phpurl);
- if (request != buf) {efree(request);}
- add_soap_fault(this_ptr, "HTTP", "SSL support not available in this build", NULL, NULL TSRMLS_CC);
- return FALSE;
- }
-#else
-#ifndef HAVE_OPENSSL_EXT
- if (use_ssl) {
- php_url_free(phpurl);
- if (request != buf) {efree(request);}
- add_soap_fault(this_ptr, "HTTP", "SSL support not available in this build", NULL, NULL TSRMLS_CC);
- return FALSE;
- }
-#endif
-#endif
-
- if (phpurl->port == 0) {
- phpurl->port = use_ssl ? 443 : 80;
- }
-
- /* Check if request to the same host */
- if (stream != NULL) {
- php_url *orig;
- if (zend_hash_find(Z_OBJPROP_P(this_ptr), "httpurl", sizeof("httpurl"), (void **)&tmp) == SUCCESS &&
- (orig = (php_url *) zend_fetch_resource(tmp TSRMLS_CC, -1, "httpurl", NULL, 1, le_url)) != NULL &&
- ((use_proxy && !use_ssl) ||
- (((use_ssl && orig->scheme != NULL && strcmp(orig->scheme, "https") == 0) ||
- (!use_ssl && orig->scheme == NULL) ||
- (!use_ssl && strcmp(orig->scheme, "https") != 0)) &&
- strcmp(orig->host, phpurl->host) == 0 &&
- orig->port == phpurl->port))) {
- } else {
- php_stream_close(stream);
- zend_hash_del(Z_OBJPROP_P(this_ptr), "httpurl", sizeof("httpurl"));
- zend_hash_del(Z_OBJPROP_P(this_ptr), "httpsocket", sizeof("httpsocket"));
- zend_hash_del(Z_OBJPROP_P(this_ptr), "_use_proxy", sizeof("_use_proxy"));
- stream = NULL;
- use_proxy = 0;
- }
- }
-
- /* Check if keep-alive connection is still opened */
- if (stream != NULL && !stream_alive(stream TSRMLS_CC)) {
- php_stream_close(stream);
- zend_hash_del(Z_OBJPROP_P(this_ptr), "httpurl", sizeof("httpurl"));
- zend_hash_del(Z_OBJPROP_P(this_ptr), "httpsocket", sizeof("httpsocket"));
- zend_hash_del(Z_OBJPROP_P(this_ptr), "_use_proxy", sizeof("_use_proxy"));
- stream = NULL;
- use_proxy = 0;
- }
-
- if (!stream) {
- stream = http_connect(this_ptr, phpurl, use_ssl, &use_proxy TSRMLS_CC);
- if (stream) {
- php_stream_auto_cleanup(stream);
- add_property_resource(this_ptr, "httpsocket", php_stream_get_resource_id(stream));
- add_property_long(this_ptr, "_use_proxy", use_proxy);
- } else {
- php_url_free(phpurl);
- if (request != buf) {efree(request);}
- add_soap_fault(this_ptr, "HTTP", "Could not connect to host", NULL, NULL TSRMLS_CC);
- return FALSE;
- }
- }
-
- if (stream) {
- zval **cookies, **login, **password;
- int ret = zend_list_insert(phpurl, le_url);
-
- add_property_resource(this_ptr, "httpurl", ret);
- /*zend_list_addref(ret);*/
-
- smart_str_append_const(&soap_headers, "POST ");
- if (use_proxy && !use_ssl) {
- smart_str_appends(&soap_headers, phpurl->scheme);
- smart_str_append_const(&soap_headers, "://");
- smart_str_appends(&soap_headers, phpurl->host);
- smart_str_appendc(&soap_headers, ':');
- smart_str_append_unsigned(&soap_headers, phpurl->port);
- }
- if (phpurl->path) {
- smart_str_appends(&soap_headers, phpurl->path);
- }
- if (phpurl->query) {
- smart_str_appendc(&soap_headers, '?');
- smart_str_appends(&soap_headers, phpurl->query);
- }
- smart_str_append_const(&soap_headers, " HTTP/1.1\r\n"
- "Host: ");
- smart_str_appends(&soap_headers, phpurl->host);
- smart_str_append_const(&soap_headers, "\r\n"
- "Connection: Keep-Alive\r\n"
-/*
- "Connection: close\r\n"
- "Accept: text/html; text/xml; text/plain\r\n"
-*/
- "User-Agent: PHP SOAP 0.1\r\n");
- if (soap_version == SOAP_1_2) {
- smart_str_append_const(&soap_headers,"Content-Type: application/soap+xml; charset=\"utf-8");
- if (soapaction) {
- smart_str_append_const(&soap_headers,"\"; action=\"");
- smart_str_appends(&soap_headers, soapaction);
- }
- smart_str_append_const(&soap_headers,"\"\r\n");
- } else {
- smart_str_append_const(&soap_headers,"Content-Type: text/xml; charset=\"utf-8\"\r\n");
- if (soapaction) {
- smart_str_append_const(&soap_headers, "SOAPAction: \"");
- smart_str_appends(&soap_headers, soapaction);
- smart_str_append_const(&soap_headers, "\"\r\n");
- }
- }
- smart_str_append_const(&soap_headers,"Content-Length: ");
- smart_str_append_long(&soap_headers, request_size);
- smart_str_append_const(&soap_headers, "\r\n");
-
- /* HTTP Authentication */
- if (zend_hash_find(Z_OBJPROP_P(this_ptr), "_login", sizeof("_login"), (void **)&login) == SUCCESS) {
- char* buf;
- int len;
-
- smart_str auth = {0};
- smart_str_appendl(&auth, Z_STRVAL_PP(login), Z_STRLEN_PP(login));
- smart_str_appendc(&auth, ':');
- if (zend_hash_find(Z_OBJPROP_P(this_ptr), "_password", sizeof("_password"), (void **)&password) == SUCCESS) {
- smart_str_appendl(&auth, Z_STRVAL_PP(password), Z_STRLEN_PP(password));
- }
- smart_str_0(&auth);
- buf = php_base64_encode(auth.c, auth.len, &len);
- smart_str_append_const(&soap_headers, "Authorization: Basic ");
- smart_str_appendl(&soap_headers, buf, len);
- smart_str_append_const(&soap_headers, "\r\n");
- efree(buf);
- smart_str_free(&auth);
- }
-
- /* Proxy HTTP Authentication */
- if (use_proxy && !use_ssl) {
- proxy_authentication(this_ptr, &soap_headers TSRMLS_CC);
- }
-
- /* Send cookies along with request */
- if (zend_hash_find(Z_OBJPROP_P(this_ptr), "_cookies", sizeof("_cookies"), (void **)&cookies) == SUCCESS) {
- zval **data;
- char *key;
- int i, n;
-
- n = zend_hash_num_elements(Z_ARRVAL_PP(cookies));
- if (n > 0) {
- zend_hash_internal_pointer_reset(Z_ARRVAL_PP(cookies));
- smart_str_append_const(&soap_headers, "Cookie: ");
- for (i = 0; i < n; i++) {
- zend_hash_get_current_data(Z_ARRVAL_PP(cookies), (void **)&data);
- zend_hash_get_current_key(Z_ARRVAL_PP(cookies), &key, NULL, FALSE);
-
- if (Z_TYPE_PP(data) == IS_ARRAY) {
- zval** value;
-
- if (zend_hash_index_find(Z_ARRVAL_PP(data), 0, (void**)&value) == SUCCESS &&
- Z_TYPE_PP(value) == IS_STRING) {
- zval **tmp;
- if (zend_hash_index_find(Z_ARRVAL_PP(data), 1, (void**)&tmp) == SUCCESS &&
- strncmp(phpurl->path?phpurl->path:"/",Z_STRVAL_PP(tmp),Z_STRLEN_PP(tmp)) == 0 &&
- zend_hash_index_find(Z_ARRVAL_PP(data), 2, (void**)&tmp) == SUCCESS &&
- in_domain(phpurl->host,Z_STRVAL_PP(tmp)) &&
- (use_ssl || zend_hash_index_find(Z_ARRVAL_PP(data), 3, (void**)&tmp) == FAILURE)) {
- smart_str_appendl(&soap_headers, key, strlen(key));
- smart_str_appendc(&soap_headers, '=');
- smart_str_appendl(&soap_headers, Z_STRVAL_PP(value), Z_STRLEN_PP(value));
- smart_str_appendc(&soap_headers, ';');
- }
- }
- }
- zend_hash_move_forward(Z_ARRVAL_PP(cookies));
- }
- smart_str_append_const(&soap_headers, "\r\n");
- }
- }
- smart_str_append_const(&soap_headers, "\r\n");
- smart_str_0(&soap_headers);
- if (zend_hash_find(Z_OBJPROP_P(this_ptr), "trace", sizeof("trace"), (void **) &trace) == SUCCESS &&
- Z_LVAL_PP(trace) > 0) {
- add_property_stringl(this_ptr, "__last_request_headers", soap_headers.c, soap_headers.len, 1);
- }
- smart_str_appendl(&soap_headers, request, request_size);
- smart_str_0(&soap_headers);
-
- err = php_stream_write(stream, soap_headers.c, soap_headers.len);
- if (err != soap_headers.len) {
- if (request != buf) {efree(request);}
- smart_str_free(&soap_headers);
- php_stream_close(stream);
- zend_hash_del(Z_OBJPROP_P(this_ptr), "httpurl", sizeof("httpurl"));
- zend_hash_del(Z_OBJPROP_P(this_ptr), "httpsocket", sizeof("httpsocket"));
- zend_hash_del(Z_OBJPROP_P(this_ptr), "_use_proxy", sizeof("_use_proxy"));
- add_soap_fault(this_ptr, "HTTP", "Failed Sending HTTP SOAP request", NULL, NULL TSRMLS_CC);
- return FALSE;
- }
- smart_str_free(&soap_headers);
-
- }
-
- if (!get_http_headers(stream, &http_headers, &http_header_size TSRMLS_CC)) {
- if (request != buf) {efree(request);}
- php_stream_close(stream);
- zend_hash_del(Z_OBJPROP_P(this_ptr), "httpsocket", sizeof("httpsocket"));
- zend_hash_del(Z_OBJPROP_P(this_ptr), "_use_proxy", sizeof("_use_proxy"));
- add_soap_fault(this_ptr, "HTTP", "Error Fetching http headers", NULL, NULL TSRMLS_CC);
- return FALSE;
- }
-
- if (zend_hash_find(Z_OBJPROP_P(this_ptr), "trace", sizeof("trace"), (void **) &trace) == SUCCESS &&
- Z_LVAL_PP(trace) > 0) {
- add_property_stringl(this_ptr, "__last_response_headers", http_headers, http_header_size, 1);
- }
-
- /* Check to see what HTTP status was sent */
- http_version = get_http_header_value(http_headers,"HTTP/");
- if (http_version) {
- char *tmp;
-
- tmp = strstr(http_version," ");
-
- if (tmp != NULL) {
- tmp++;
- http_status = atoi(tmp);
- }
-
- /* Process HTTP status codes */
- if (http_status >= 200 && http_status < 300) {
- } else if (http_status >= 300 && http_status < 400) {
- char *loc;
-
- if ((loc = get_http_header_value(http_headers,"Location: ")) != NULL) {
- php_url *new_url = php_url_parse(loc);
- char *body;
- int body_size;
-
- if (new_url != NULL) {
- if (get_http_body(stream, http_headers, &body, &body_size TSRMLS_CC)) {
- efree(body);
- } else {
- php_stream_close(stream);
- zend_hash_del(Z_OBJPROP_P(this_ptr), "httpsocket", sizeof("httpsocket"));
- stream = NULL;
- }
- efree(http_version);
- efree(http_headers);
- efree(loc);
- if (new_url->scheme == NULL && new_url->path != NULL) {
- new_url->scheme = estrdup(phpurl->scheme);
- new_url->host = estrdup(phpurl->host);
- new_url->port = phpurl->port;
- if (new_url->path && new_url->path[0] != '/') {
- char *t = phpurl->path?phpurl->path:"/";
- char *p = strrchr(t, '/');
- char *s = emalloc((p - t) + strlen(new_url->path) + 2);
-
- strncpy(s, t, (p - t) + 1);
- s[(p - t) + 1] = 0;
- strcat(s, new_url->path);
- efree(new_url->path);
- new_url->path = s;
- }
- }
- phpurl = new_url;
- goto try_again;
- }
- }
-/*
- } else if (http_status == 400) {
- add_soap_fault(this_ptr, "HTTP", "Bad Request", NULL, NULL TSRMLS_CC);
- } else if (http_status == 401) {
- add_soap_fault(this_ptr, "HTTP", "Unauthorized Request", NULL, NULL TSRMLS_CC);
- } else if (http_status == 405) {
- add_soap_fault(this_ptr, "HTTP", "Method not allowed", NULL, NULL TSRMLS_CC);
- } else if (http_status == 415) {
- add_soap_fault(this_ptr, "HTTP", "Unsupported Media Type", NULL, NULL TSRMLS_CC);
- } else if (http_status >= 400 && http_status < 500) {
- add_soap_fault(this_ptr, "HTTP", "Client Error", NULL, NULL TSRMLS_CC);
- } else if (http_status == 500) {
- add_soap_fault(this_ptr, "HTTP", "Internal Server Error", NULL, NULL TSRMLS_CC);
- } else if (http_status >= 500 && http_status < 600) {
- add_soap_fault(this_ptr, "HTTP", "Server Error", NULL, NULL TSRMLS_CC);
- } else {
- add_soap_fault(this_ptr, "HTTP", "Unsupported HTTP status code", NULL, NULL TSRMLS_CC);
-*/
- }
-
- /* Try and get headers again */
- if (http_status == 100) {
- efree(http_headers);
- if (!get_http_headers(stream, &http_headers, &http_header_size TSRMLS_CC)) {
- if (request != buf) {efree(request);}
- php_stream_close(stream);
- zend_hash_del(Z_OBJPROP_P(this_ptr), "httpsocket", sizeof("httpsocket"));
- zend_hash_del(Z_OBJPROP_P(this_ptr), "_use_proxy", sizeof("_use_proxy"));
- add_soap_fault(this_ptr, "HTTP", "Error Fetching http headers", NULL, NULL TSRMLS_CC);
- return FALSE;
- }
- }
-
- if (strncmp(http_version,"1.1", 3)) {
- http_1_1 = 1;
- }
- efree(http_version);
- }
-
- /* Grab and send back every cookie */
-
- /* Not going to worry about Path: because
- we shouldn't be changing urls so path dont
- matter too much
- */
- cookie_itt = strstr(http_headers,"Set-Cookie: ");
- while (cookie_itt) {
- char *end_pos, *cookie;
- char *eqpos, *sempos;
- zval **cookies;
-
- if (zend_hash_find(Z_OBJPROP_P(this_ptr), "_cookies", sizeof("_cookies"), (void **)&cookies) == FAILURE) {
- zval *tmp_cookies;
- MAKE_STD_ZVAL(tmp_cookies);
- array_init(tmp_cookies);
- zend_hash_update(Z_OBJPROP_P(this_ptr), "_cookies", sizeof("_cookies"), &tmp_cookies, sizeof(zval *), (void **)&cookies);
- }
-
- end_pos = strstr(cookie_itt,"\r\n");
- cookie = get_http_header_value(cookie_itt,"Set-Cookie: ");
-
- eqpos = strstr(cookie, "=");
- sempos = strstr(cookie, ";");
- if (eqpos != NULL && (sempos == NULL || sempos > eqpos)) {
- smart_str name = {0};
- int cookie_len;
- zval *zcookie;
-
- if (sempos != NULL) {
- cookie_len = sempos-(eqpos+1);
- } else {
- cookie_len = strlen(cookie)-(eqpos-cookie)-1;
- }
-
- smart_str_appendl(&name, cookie, eqpos - cookie);
- smart_str_0(&name);
-
- ALLOC_INIT_ZVAL(zcookie);
- array_init(zcookie);
- add_index_stringl(zcookie, 0, eqpos + 1, cookie_len, 1);
-
- if (sempos != NULL) {
- char *options = cookie + cookie_len+1;
- while (*options) {
- while (*options == ' ') {options++;}
- sempos = strstr(options, ";");
- if (strstr(options,"path=") == options) {
- eqpos = options + sizeof("path=")-1;
- add_index_stringl(zcookie, 1, eqpos, sempos?(sempos-eqpos):strlen(eqpos), 1);
- } else if (strstr(options,"domain=") == options) {
- eqpos = options + sizeof("domain=")-1;
- add_index_stringl(zcookie, 2, eqpos, sempos?(sempos-eqpos):strlen(eqpos), 1);
- } else if (strstr(options,"secure") == options) {
- add_index_bool(zcookie, 3, 1);
- }
- if (sempos != NULL) {
- options = sempos+1;
- } else {
- break;
- }
- }
- }
- if (!zend_hash_index_exists(Z_ARRVAL_P(zcookie), 1)) {
- char *t = phpurl->path?phpurl->path:"/";
- char *c = strrchr(t, '/');
- if (c) {
- add_index_stringl(zcookie, 1, t, c-t, 1);
- }
- }
- if (!zend_hash_index_exists(Z_ARRVAL_P(zcookie), 2)) {
- add_index_string(zcookie, 2, phpurl->host, 1);
- }
-
- add_assoc_zval_ex(*cookies, name.c, name.len+1, zcookie);
- smart_str_free(&name);
- }
-
- cookie_itt = strstr(cookie_itt + sizeof("Set-Cookie: "), "Set-Cookie: ");
- efree(cookie);
- }
-
- if (!get_http_body(stream, http_headers, &http_body, &http_body_size TSRMLS_CC)) {
- if (request != buf) {efree(request);}
- php_stream_close(stream);
- efree(http_headers);
- zend_hash_del(Z_OBJPROP_P(this_ptr), "httpsocket", sizeof("httpsocket"));
- zend_hash_del(Z_OBJPROP_P(this_ptr), "_use_proxy", sizeof("_use_proxy"));
- add_soap_fault(this_ptr, "HTTP", "Error Fetching http body, No Content-Length, connection closed or chunked data", NULL, NULL TSRMLS_CC);
- return FALSE;
- }
-
- if (request != buf) {efree(request);}
-
- /* See if the server requested a close */
- http_close = TRUE;
- connection = get_http_header_value(http_headers,"Proxy-Connection: ");
- if (connection) {
- if (strncasecmp(connection, "Keep-Alive", sizeof("Keep-Alive")-1) == 0) {
- http_close = FALSE;
- }
- efree(connection);
-/*
- } else if (http_1_1) {
- http_close = FALSE;
-*/
- }
- connection = get_http_header_value(http_headers,"Connection: ");
- if (connection) {
- if (strncasecmp(connection, "Keep-Alive", sizeof("Keep-Alive")-1) == 0) {
- http_close = FALSE;
- }
- efree(connection);
-/*
- } else if (http_1_1) {
- http_close = FALSE;
-*/
- }
-
- if (http_close) {
- php_stream_close(stream);
- zend_hash_del(Z_OBJPROP_P(this_ptr), "httpsocket", sizeof("httpsocket"));
- zend_hash_del(Z_OBJPROP_P(this_ptr), "_use_proxy", sizeof("_use_proxy"));
- }
-
- /* Check and see if the server even sent a xml document */
- content_type = get_http_header_value(http_headers,"Content-Type: ");
- if (content_type) {
- char *pos = NULL;
- int cmplen;
- pos = strstr(content_type,";");
- if (pos != NULL) {
- cmplen = pos - content_type;
- } else {
- cmplen = strlen(content_type);
- }
- if (strncmp(content_type, "text/xml", cmplen) == 0 ||
- strncmp(content_type, "application/soap+xml", cmplen) == 0) {
-/*
- if (strncmp(http_body, "<?xml", 5)) {
- zval *err;
- MAKE_STD_ZVAL(err);
- ZVAL_STRINGL(err, http_body, http_body_size, 1);
- add_soap_fault(this_ptr, "HTTP", "Didn't recieve an xml document", NULL, err TSRMLS_CC);
- efree(content_type);
- efree(http_headers);
- efree(http_body);
- return FALSE;
- }
-*/
- }
- efree(content_type);
- }
-
- /* Decompress response */
- content_encoding = get_http_header_value(http_headers,"Content-Encoding: ");
- if (content_encoding) {
- zval func;
- zval retval;
- zval param;
- zval *params[1];
-
- if ((strcmp(content_encoding,"gzip") == 0 ||
- strcmp(content_encoding,"x-gzip") == 0) &&
- zend_hash_exists(EG(function_table), "gzinflate", sizeof("gzinflate"))) {
- ZVAL_STRING(&func, "gzinflate", 0);
- params[0] = &param;
- ZVAL_STRINGL(params[0], http_body+10, http_body_size-10, 0);
- INIT_PZVAL(params[0]);
- } else if (strcmp(content_encoding,"deflate") == 0 &&
- zend_hash_exists(EG(function_table), "gzuncompress", sizeof("gzuncompress"))) {
- ZVAL_STRING(&func, "gzuncompress", 0);
- params[0] = &param;
- ZVAL_STRINGL(params[0], http_body, http_body_size, 0);
- INIT_PZVAL(params[0]);
- } else {
- efree(content_encoding);
- efree(http_headers);
- efree(http_body);
- add_soap_fault(this_ptr, "HTTP", "Unknown Content-Encoding", NULL, NULL TSRMLS_CC);
- return FALSE;
- }
- if (call_user_function(CG(function_table), (zval**)NULL, &func, &retval, 1, params TSRMLS_CC) == SUCCESS &&
- Z_TYPE(retval) == IS_STRING) {
- efree(http_body);
- *buffer = Z_STRVAL(retval);
- *buffer_len = Z_STRLEN(retval);
- } else {
- efree(content_encoding);
- efree(http_headers);
- efree(http_body);
- add_soap_fault(this_ptr, "HTTP", "Can't uncompress compressed response", NULL, NULL TSRMLS_CC);
- return FALSE;
- }
- efree(content_encoding);
- } else {
- *buffer = http_body;
- *buffer_len = http_body_size;
- }
-
- efree(http_headers);
- return TRUE;
-}
-
-static char *get_http_header_value(char *headers, char *type)
-{
- char *pos, *tmp = NULL;
- int typelen, headerslen;
-
- typelen = strlen(type);
- headerslen = strlen(headers);
-
- /* header `titles' can be lower case, or any case combination, according
- * to the various RFC's. */
- pos = headers;
- do {
- /* start of buffer or start of line */
- if (strncasecmp(pos, type, typelen) == 0) {
- char *eol;
-
- /* match */
- tmp = pos + typelen;
- eol = strstr(tmp, "\r\n");
- if (eol == NULL) {
- eol = headers + headerslen;
- }
- return estrndup(tmp, eol - tmp);
- }
-
- /* find next line */
- pos = strstr(pos, "\r\n");
- if (pos) {
- pos += 2;
- }
-
- } while (pos);
-
- return NULL;
-}
-
-static int get_http_body(php_stream *stream, char *headers, char **response, int *out_size TSRMLS_DC)
-{
- char *header, *http_buf = NULL;
- int header_close = 0, header_chunked = 0, header_length = 0, http_buf_size = 0;
-
- header = get_http_header_value(headers, "Connection: ");
- if (header) {
- if(!strcmp(header, "close")) header_close = 1;
- efree(header);
- }
- header = get_http_header_value(headers, "Transfer-Encoding: ");
- if (header) {
- if(!strcmp(header, "chunked")) header_chunked = 1;
- efree(header);
- }
- header = get_http_header_value(headers, "Content-Length: ");
- if (header) {
- header_length = atoi(header);
- efree(header);
- }
-
- if (header_chunked) {
- char done, chunk_size[10];
-
- done = FALSE;
-
- while (!done) {
- int buf_size = 0;
-
- php_stream_gets(stream, chunk_size, sizeof(chunk_size));
- if (sscanf(chunk_size, "%x", &buf_size) > 0 ) {
- if (buf_size > 0) {
- int len_size = 0;
-
- if (http_buf_size + buf_size + 1 < 0) {
- efree(http_buf);
- return FALSE;
- }
- http_buf = erealloc(http_buf, http_buf_size + buf_size + 1);
-
- while (len_size < buf_size) {
- int len_read = php_stream_read(stream, http_buf + http_buf_size, buf_size - len_size);
- if (len_read <= 0) {
- /* Error or EOF */
- done = TRUE;
- break;
- }
- len_size += len_read;
- http_buf_size += len_read;
- }
- }
-
- /* Eat up '\r' '\n' */
- php_stream_getc(stream);
- php_stream_getc(stream);
- } else {
- /* Somthing wrong in chunked encoding */
- if (http_buf) {
- efree(http_buf);
- }
- return FALSE;
- }
- if (buf_size == 0) {
- done = TRUE;
- }
- }
-
- if (http_buf == NULL) {
- http_buf = emalloc(1);
- }
-
- } else if (header_length) {
- if (header_length < 0) {
- return FALSE;
- }
- http_buf = emalloc(header_length + 1);
- while (http_buf_size < header_length) {
- int len_read = php_stream_read(stream, http_buf + http_buf_size, header_length - http_buf_size);
- if (len_read <= 0) {
- break;
- }
- http_buf_size += len_read;
- }
- } else if (header_close) {
- do {
- int len_read;
- http_buf = erealloc(http_buf, http_buf_size + 4096 + 1);
- len_read = php_stream_read(stream, http_buf + http_buf_size, 4096);
- if (len_read > 0) {
- http_buf_size += len_read;
- }
- } while(!php_stream_eof(stream));
- } else {
- return FALSE;
- }
-
- http_buf[http_buf_size] = '\0';
- (*response) = http_buf;
- (*out_size) = http_buf_size;
- return TRUE;
-}
-
-static int get_http_headers(php_stream *stream, char **response, int *out_size TSRMLS_DC)
-{
- int done = FALSE;
- smart_str tmp_response = {0};
- char headerbuf[8192];
-
- while (!done) {
- if (!php_stream_gets(stream, headerbuf, sizeof(headerbuf))) {
- break;
- }
-
- if (strcmp(headerbuf, "\r\n") == 0) {
- /* empty line marks end of headers */
- done = TRUE;
- break;
- }
-
- /* add header to collection */
- smart_str_appends(&tmp_response, headerbuf);
- }
- smart_str_0(&tmp_response);
- (*response) = tmp_response.c;
- (*out_size) = tmp_response.len;
- return done;
-}
diff --git a/ext/soap/php_http.h b/ext/soap/php_http.h
deleted file mode 100644
index fc055a144a..0000000000
--- a/ext/soap/php_http.h
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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. |
- +----------------------------------------------------------------------+
- | Authors: Brad Lafountain <rodif_bl@yahoo.com> |
- | Shane Caraveo <shane@caraveo.com> |
- | Dmitry Stogov <dmitry@zend.com> |
- +----------------------------------------------------------------------+
-*/
-/* $Id$ */
-
-#ifndef PHP_HTTP_H
-#define PHP_HTTP_H
-
-int make_http_soap_request(zval *this_ptr,
- char *request,
- int request_size,
- char *location,
- char *soapaction,
- int soap_version,
- char **response,
- int *response_len TSRMLS_DC);
-
-#endif
diff --git a/ext/soap/php_packet_soap.c b/ext/soap/php_packet_soap.c
deleted file mode 100644
index 2b781e868e..0000000000
--- a/ext/soap/php_packet_soap.c
+++ /dev/null
@@ -1,391 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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. |
- +----------------------------------------------------------------------+
- | Authors: Brad Lafountain <rodif_bl@yahoo.com> |
- | Shane Caraveo <shane@caraveo.com> |
- | Dmitry Stogov <dmitry@zend.com> |
- +----------------------------------------------------------------------+
-*/
-/* $Id$ */
-
-#include "php_soap.h"
-
-/* SOAP client calls this function to parse response from SOAP server */
-int parse_packet_soap(zval *this_ptr, char *buffer, int buffer_size, sdlFunctionPtr fn, char *fn_name, zval *return_value, zval *soap_headers TSRMLS_DC)
-{
- char* envelope_ns = NULL;
- xmlDocPtr response;
- xmlNodePtr trav, env, head, body, resp, cur, fault;
- xmlAttrPtr attr;
- int param_count = 0;
- int soap_version = SOAP_1_1;
- HashTable *hdrs = NULL;
-
- ZVAL_NULL(return_value);
-
- /* Parse XML packet */
- response = soap_xmlParseMemory(buffer, buffer_size);
-
- if (!response) {
- add_soap_fault(this_ptr, "Client", "looks like we got no XML document", NULL, NULL TSRMLS_CC);
- return FALSE;
- }
- if (xmlGetIntSubset(response) != NULL) {
- add_soap_fault(this_ptr, "Client", "DTD are not supported by SOAP", NULL, NULL TSRMLS_CC);
- xmlFreeDoc(response);
- return FALSE;
- }
-
- /* Get <Envelope> element */
- env = NULL;
- trav = response->children;
- while (trav != NULL) {
- if (trav->type == XML_ELEMENT_NODE) {
- if (env == NULL && node_is_equal_ex(trav,"Envelope",SOAP_1_1_ENV_NAMESPACE)) {
- env = trav;
- envelope_ns = SOAP_1_1_ENV_NAMESPACE;
- soap_version = SOAP_1_1;
- } else if (env == NULL && node_is_equal_ex(trav,"Envelope",SOAP_1_2_ENV_NAMESPACE)) {
- env = trav;
- envelope_ns = SOAP_1_2_ENV_NAMESPACE;
- soap_version = SOAP_1_2;
- } else {
- add_soap_fault(this_ptr, "VersionMismatch", "Wrong Version", NULL, NULL TSRMLS_CC);
- xmlFreeDoc(response);
- return FALSE;
- }
- }
- trav = trav->next;
- }
- if (env == NULL) {
- add_soap_fault(this_ptr, "Client", "looks like we got XML without \"Envelope\" element", NULL, NULL TSRMLS_CC);
- xmlFreeDoc(response);
- return FALSE;
- }
-
- attr = env->properties;
- while (attr != NULL) {
- if (attr->ns == NULL) {
- add_soap_fault(this_ptr, "Client", "A SOAP Envelope element cannot have non Namespace qualified attributes", NULL, NULL TSRMLS_CC);
- xmlFreeDoc(response);
- return FALSE;
- } else if (attr_is_equal_ex(attr,"encodingStyle",SOAP_1_2_ENV_NAMESPACE)) {
- if (soap_version == SOAP_1_2) {
- add_soap_fault(this_ptr, "Client", "encodingStyle cannot be specified on the Envelope", NULL, NULL TSRMLS_CC);
- xmlFreeDoc(response);
- return FALSE;
- } else if (strcmp(attr->children->content,SOAP_1_1_ENC_NAMESPACE) != 0) {
- add_soap_fault(this_ptr, "Client", "Unknown data encoding style", NULL, NULL TSRMLS_CC);
- xmlFreeDoc(response);
- return FALSE;
- }
- }
- attr = attr->next;
- }
-
- /* Get <Header> element */
- head = NULL;
- trav = env->children;
- while (trav != NULL && trav->type != XML_ELEMENT_NODE) {
- trav = trav->next;
- }
- if (trav != NULL && node_is_equal_ex(trav,"Header",envelope_ns)) {
- head = trav;
- trav = trav->next;
- }
-
- /* Get <Body> element */
- body = NULL;
- while (trav != NULL && trav->type != XML_ELEMENT_NODE) {
- trav = trav->next;
- }
- if (trav != NULL && node_is_equal_ex(trav,"Body",envelope_ns)) {
- body = trav;
- trav = trav->next;
- }
- while (trav != NULL && trav->type != XML_ELEMENT_NODE) {
- trav = trav->next;
- }
- if (body == NULL) {
- add_soap_fault(this_ptr, "Client", "Body must be present in a SOAP envelope", NULL, NULL TSRMLS_CC);
- xmlFreeDoc(response);
- return FALSE;
- }
- attr = body->properties;
- while (attr != NULL) {
- if (attr->ns == NULL) {
- if (soap_version == SOAP_1_2) {
- add_soap_fault(this_ptr, "Client", "A SOAP Body element cannot have non Namespace qualified attributes", NULL, NULL TSRMLS_CC);
- xmlFreeDoc(response);
- return FALSE;
- }
- } else if (attr_is_equal_ex(attr,"encodingStyle",SOAP_1_2_ENV_NAMESPACE)) {
- if (soap_version == SOAP_1_2) {
- add_soap_fault(this_ptr, "Client", "encodingStyle cannot be specified on the Body", NULL, NULL TSRMLS_CC);
- xmlFreeDoc(response);
- return FALSE;
- } else if (strcmp(attr->children->content,SOAP_1_1_ENC_NAMESPACE) != 0) {
- add_soap_fault(this_ptr, "Client", "Unknown data encoding style", NULL, NULL TSRMLS_CC);
- xmlFreeDoc(response);
- return FALSE;
- }
- }
- attr = attr->next;
- }
- if (trav != NULL && soap_version == SOAP_1_2) {
- add_soap_fault(this_ptr, "Client", "A SOAP 1.2 envelope can contain only Header and Body", NULL, NULL TSRMLS_CC);
- xmlFreeDoc(response);
- return FALSE;
- }
-
- if (head != NULL) {
- attr = head->properties;
- while (attr != NULL) {
- if (attr->ns == NULL) {
- add_soap_fault(this_ptr, "Client", "A SOAP Header element cannot have non Namespace qualified attributes", NULL, NULL TSRMLS_CC);
- xmlFreeDoc(response);
- return FALSE;
- } else if (attr_is_equal_ex(attr,"encodingStyle",SOAP_1_2_ENV_NAMESPACE)) {
- if (soap_version == SOAP_1_2) {
- add_soap_fault(this_ptr, "Client", "encodingStyle cannot be specified on the Header", NULL, NULL TSRMLS_CC);
- xmlFreeDoc(response);
- return FALSE;
- } else if (strcmp(attr->children->content,SOAP_1_1_ENC_NAMESPACE) != 0) {
- add_soap_fault(this_ptr, "Client", "Unknown data encoding style", NULL, NULL TSRMLS_CC);
- xmlFreeDoc(response);
- return FALSE;
- }
- }
- attr = attr->next;
- }
- }
-
- /* Check if <Body> contains <Fault> element */
- fault = get_node_ex(body->children,"Fault",envelope_ns);
- if (fault != NULL) {
- char *faultcode = NULL, *faultstring = NULL, *faultactor = NULL;
- zval *details = NULL;
- xmlNodePtr tmp;
-
- if (soap_version == SOAP_1_1) {
- tmp = get_node(fault->children,"faultcode");
- if (tmp != NULL && tmp->children != NULL) {
- faultcode = tmp->children->content;
- }
-
- tmp = get_node(fault->children,"faultstring");
- if (tmp != NULL && tmp->children != NULL) {
- faultstring = tmp->children->content;
- }
-
- tmp = get_node(fault->children,"faultactor");
- if (tmp != NULL && tmp->children != NULL) {
- faultactor = tmp->children->content;
- }
-
- tmp = get_node(fault->children,"detail");
- if (tmp != NULL) {
- details = master_to_zval(NULL, tmp);
- }
- } else {
- tmp = get_node(fault->children,"Code");
- if (tmp != NULL && tmp->children != NULL) {
- tmp = get_node(tmp->children,"Value");
- if (tmp != NULL && tmp->children != NULL) {
- faultcode = tmp->children->content;
- }
- }
-
- tmp = get_node(fault->children,"Reason");
- if (tmp != NULL && tmp->children != NULL) {
- /* TODO: lang attribute */
- tmp = get_node(tmp->children,"Text");
- if (tmp != NULL && tmp->children != NULL) {
- faultstring = tmp->children->content;
- }
- }
-
- tmp = get_node(fault->children,"Detail");
- if (tmp != NULL) {
- details = master_to_zval(NULL, tmp);
- }
- }
- add_soap_fault(this_ptr, faultcode, faultstring, faultactor, details TSRMLS_CC);
- xmlFreeDoc(response);
- return FALSE;
- }
-
- /* Parse content of <Body> element */
- array_init(return_value);
- resp = body->children;
- while (resp != NULL && resp->type != XML_ELEMENT_NODE) {
- resp = resp->next;
- }
- if (resp != NULL) {
- if (fn != NULL && fn->binding && fn->binding->bindingType == BINDING_SOAP) {
- /* Function has WSDL description */
- sdlParamPtr *h_param, param = NULL;
- xmlNodePtr val = NULL;
- char *name, *ns = NULL;
- zval* tmp;
- sdlSoapBindingFunctionPtr fnb = (sdlSoapBindingFunctionPtr)fn->bindingAttributes;
- int res_count;
-
- hdrs = fnb->output.headers;
-
- if (fn->responseParameters) {
- res_count = zend_hash_num_elements(fn->responseParameters);
- zend_hash_internal_pointer_reset(fn->responseParameters);
- while (zend_hash_get_current_data(fn->responseParameters, (void **)&h_param) == SUCCESS) {
- param = (*h_param);
- if (fnb->style == SOAP_DOCUMENT) {
- if (param->element) {
- name = param->element->name;
- ns = param->element->namens;
-/*
- name = param->encode->details.type_str;
- ns = param->encode->details.ns;
-*/
- } else {
- name = param->paramName;
- }
- } else {
- name = fn->responseName;
- /* ns = ? */
- }
-
- /* Get value of parameter */
- cur = get_node_ex(resp, name, ns);
- if (!cur) {
- cur = get_node(resp, name);
- /* TODO: produce warning invalid ns */
- }
- if (cur) {
- if (fnb->style == SOAP_DOCUMENT) {
- val = cur;
- } else {
- val = get_node(cur->children, param->paramName);
- if (res_count == 1) {
- if (val == NULL) {
- val = get_node(cur->children, "return");
- }
- if (val == NULL) {
- val = get_node(cur->children, "result");
- }
- if (val == NULL && cur->children && cur->children->next == NULL) {
- val = cur->children;
- }
- }
- }
- }
-
- if (!val) {
- /* TODO: may be "nil" is not OK? */
- MAKE_STD_ZVAL(tmp);
- ZVAL_NULL(tmp);
-/*
- add_soap_fault(this_ptr, "Client", "Can't find response data", NULL, NULL TSRMLS_CC);
- xmlFreeDoc(response);
- return FALSE;
-*/
- } else {
- /* Decoding value of parameter */
- if (param != NULL) {
- tmp = master_to_zval(param->encode, val);
- } else {
- tmp = master_to_zval(NULL, val);
- }
- }
- add_assoc_zval(return_value, param->paramName, tmp);
-
- param_count++;
-
- zend_hash_move_forward(fn->responseParameters);
- }
- }
- } else {
- /* Function hasn't WSDL description */
- xmlNodePtr val;
- val = resp->children;
- while (val != NULL) {
- while (val && val->type != XML_ELEMENT_NODE) {
- val = val->next;
- }
- if (val != NULL) {
- if (!node_is_equal_ex(val,"result",RPC_SOAP12_NAMESPACE)) {
- zval *tmp;
-
- tmp = master_to_zval(NULL, val);
- if (val->name) {
- add_assoc_zval(return_value, (char*)val->name, tmp);
- } else {
- add_next_index_zval(return_value, tmp);
- }
- ++param_count;
- }
- val = val->next;
- }
- }
- }
- }
-
- if (Z_TYPE_P(return_value) == IS_ARRAY) {
- if (param_count == 0) {
- zval_dtor(return_value);
- ZVAL_NULL(return_value);
- } else if (param_count == 1) {
- zval *tmp;
-
- zend_hash_internal_pointer_reset(Z_ARRVAL_P(return_value));
- zend_hash_get_current_data(Z_ARRVAL_P(return_value), (void**)&tmp);
- tmp = *(zval**)tmp;
- tmp->refcount++;
- zval_dtor(return_value);
- *return_value = *tmp;
- FREE_ZVAL(tmp);
- }
- }
-
- if (soap_headers && head) {
- trav = head->children;
- while (trav != NULL) {
- if (trav->type == XML_ELEMENT_NODE) {
- encodePtr enc = NULL;
- zval* val;
-
- if (hdrs) {
- smart_str key = {0};
- sdlSoapBindingFunctionHeaderPtr *hdr;
-
- if (trav->ns) {
- smart_str_appends(&key,trav->ns->href);
- smart_str_appendc(&key,':');
- }
- smart_str_appends(&key,trav->name);
- smart_str_0(&key);
- if (zend_hash_find(hdrs, key.c, key.len+1, (void**)&hdr) == SUCCESS) {
- enc = (*hdr)->encode;
- }
- smart_str_free(&key);
- }
- val = master_to_zval(enc, trav);
- add_assoc_zval(soap_headers, (char*)trav->name, val);
- }
- trav = trav->next;
- }
- }
-
- xmlFreeDoc(response);
- return TRUE;
-}
diff --git a/ext/soap/php_packet_soap.h b/ext/soap/php_packet_soap.h
deleted file mode 100644
index 5eef76cd30..0000000000
--- a/ext/soap/php_packet_soap.h
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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. |
- +----------------------------------------------------------------------+
- | Authors: Brad Lafountain <rodif_bl@yahoo.com> |
- | Shane Caraveo <shane@caraveo.com> |
- | Dmitry Stogov <dmitry@zend.com> |
- +----------------------------------------------------------------------+
-*/
-/* $Id$ */
-
-#ifndef PHP_PACKET_SOAP_H
-#define PHP_PACKET_SOAP_H
-
-int parse_packet_soap(zval *this_ptr, char *buffer, int buffer_size, sdlFunctionPtr fn, char *fn_name, zval *return_value, zval *soap_headers TSRMLS_DC);
-
-#endif
diff --git a/ext/soap/php_schema.c b/ext/soap/php_schema.c
deleted file mode 100644
index 0fa5c4a08e..0000000000
--- a/ext/soap/php_schema.c
+++ /dev/null
@@ -1,2369 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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. |
- +----------------------------------------------------------------------+
- | Authors: Brad Lafountain <rodif_bl@yahoo.com> |
- | Shane Caraveo <shane@caraveo.com> |
- | Dmitry Stogov <dmitry@zend.com> |
- +----------------------------------------------------------------------+
-*/
-/* $Id$ */
-
-#include "php_soap.h"
-#include "libxml/uri.h"
-
-static int schema_simpleType(sdlPtr sdl, xmlAttrPtr tns, xmlNodePtr simpleType, sdlTypePtr cur_type);
-static int schema_complexType(sdlPtr sdl, xmlAttrPtr tns, xmlNodePtr compType, sdlTypePtr cur_type);
-static int schema_list(sdlPtr sdl, xmlAttrPtr tns, xmlNodePtr listType, sdlTypePtr cur_type);
-static int schema_union(sdlPtr sdl, xmlAttrPtr tns, xmlNodePtr unionType, sdlTypePtr cur_type);
-static int schema_simpleContent(sdlPtr sdl, xmlAttrPtr tns, xmlNodePtr simpCompType, sdlTypePtr cur_type);
-static int schema_restriction_simpleContent(sdlPtr sdl, xmlAttrPtr tns, xmlNodePtr restType, sdlTypePtr cur_type, int simpleType);
-static int schema_restriction_complexContent(sdlPtr sdl, xmlAttrPtr tns, xmlNodePtr restType, sdlTypePtr cur_type);
-static int schema_extension_simpleContent(sdlPtr sdl, xmlAttrPtr tns, xmlNodePtr extType, sdlTypePtr cur_type);
-static int schema_extension_complexContent(sdlPtr sdl, xmlAttrPtr tns, xmlNodePtr extType, sdlTypePtr cur_type);
-static int schema_sequence(sdlPtr sdl, xmlAttrPtr tns, xmlNodePtr seqType, sdlTypePtr cur_type, sdlContentModelPtr model);
-static int schema_all(sdlPtr sdl, xmlAttrPtr tns, xmlNodePtr extType, sdlTypePtr cur_type, sdlContentModelPtr model);
-static int schema_choice(sdlPtr sdl, xmlAttrPtr tns, xmlNodePtr choiceType, sdlTypePtr cur_type, sdlContentModelPtr model);
-static int schema_group(sdlPtr sdl, xmlAttrPtr tns, xmlNodePtr groupType, sdlTypePtr cur_type, sdlContentModelPtr model);
-static int schema_any(sdlPtr sdl, xmlAttrPtr tns, xmlNodePtr extType, sdlTypePtr cur_type, sdlContentModelPtr model);
-static int schema_element(sdlPtr sdl, xmlAttrPtr tns, xmlNodePtr element, sdlTypePtr cur_type, sdlContentModelPtr model);
-static int schema_attribute(sdlPtr sdl, xmlAttrPtr tns, xmlNodePtr attrType, sdlTypePtr cur_type, sdlCtx *ctx);
-static int schema_attributeGroup(sdlPtr sdl, xmlAttrPtr tns, xmlNodePtr attrType, sdlTypePtr cur_type, sdlCtx *ctx);
-
-static int schema_restriction_var_int(xmlNodePtr val, sdlRestrictionIntPtr *valptr);
-
-static int schema_restriction_var_char(xmlNodePtr val, sdlRestrictionCharPtr *valptr);
-
-static void schema_type_fixup(sdlCtx *ctx, sdlTypePtr type);
-
-static encodePtr create_encoder(sdlPtr sdl, sdlTypePtr cur_type, const char *ns, const char *type)
-{
- smart_str nscat = {0};
- encodePtr enc, *enc_ptr;
-
- if (sdl->encoders == NULL) {
- sdl->encoders = emalloc(sizeof(HashTable));
- zend_hash_init(sdl->encoders, 0, NULL, delete_encoder, 0);
- }
- smart_str_appends(&nscat, ns);
- smart_str_appendc(&nscat, ':');
- smart_str_appends(&nscat, type);
- smart_str_0(&nscat);
- if (zend_hash_find(sdl->encoders, nscat.c, nscat.len + 1, (void**)&enc_ptr) == SUCCESS) {
- enc = *enc_ptr;
- if (enc->details.ns) {
- efree(enc->details.ns);
- }
- if (enc->details.type_str) {
- efree(enc->details.type_str);
- }
- } else {
- enc_ptr = NULL;
- enc = emalloc(sizeof(encode));
- }
- memset(enc, 0, sizeof(encode));
-
- enc->details.ns = estrdup(ns);
- enc->details.type_str = estrdup(type);
- enc->details.sdl_type = cur_type;
- enc->to_xml = sdl_guess_convert_xml;
- enc->to_zval = sdl_guess_convert_zval;
-
- if (enc_ptr == NULL) {
- zend_hash_update(sdl->encoders, nscat.c, nscat.len + 1, &enc, sizeof(encodePtr), NULL);
- }
- smart_str_free(&nscat);
- return enc;
-}
-
-static encodePtr get_create_encoder(sdlPtr sdl, sdlTypePtr cur_type, const char *ns, const char *type)
-{
- encodePtr enc = NULL;
- smart_str nscat = {0};
-
- smart_str_appends(&nscat, ns);
- smart_str_appendc(&nscat, ':');
- smart_str_appends(&nscat, type);
- smart_str_0(&nscat);
-
- enc = get_encoder_ex(sdl, nscat.c, nscat.len);
- if (enc == NULL) {
- enc = create_encoder(sdl, cur_type, ns, type);
- }
-
- smart_str_free(&nscat);
- return enc;
-}
-
-static void schema_load_file(sdlCtx *ctx, xmlAttrPtr ns, xmlChar *location, xmlAttrPtr tns, int import) {
- if (location != NULL &&
- !zend_hash_exists(&ctx->docs, location, strlen(location)+1)) {
- xmlDocPtr doc;
- xmlNodePtr schema;
- xmlAttrPtr new_tns;
-
- doc = soap_xmlParseFile(location);
- if (doc == NULL) {
- soap_error1(E_ERROR, "Parsing Schema: can't import schema from '%s'", location);
- }
- schema = get_node(doc->children, "schema");
- if (schema == NULL) {
- xmlFreeDoc(doc);
- soap_error1(E_ERROR, "Parsing Schema: can't import schema from '%s'", location);
- }
- new_tns = get_attribute(schema->properties, "targetNamespace");
- if (import) {
- if (ns != NULL && (new_tns == NULL || strcmp(ns->children->content,new_tns->children->content) != 0)) {
- xmlFreeDoc(doc);
- soap_error2(E_ERROR, "Parsing Schema: can't import schema from '%s', unexpected 'targetNamespace'='%s'", location, new_tns->children->content);
- }
- if (ns == NULL && new_tns != NULL) {
- xmlFreeDoc(doc);
- soap_error2(E_ERROR, "Parsing Schema: can't import schema from '%s', unexpected 'targetNamespace'='%s'", location, new_tns->children->content);
- }
- } else {
- new_tns = get_attribute(schema->properties, "targetNamespace");
- if (new_tns == NULL) {
- if (tns != NULL) {
- xmlFreeDoc(doc);
- xmlSetProp(schema, "targetNamespace", tns->children->content);
- }
- } else if (tns != NULL && strcmp(tns->children->content,new_tns->children->content) != 0) {
- xmlFreeDoc(doc);
- soap_error1(E_ERROR, "Parsing Schema: can't include schema from '%s', different 'targetNamespace'", location);
- }
- }
- zend_hash_add(&ctx->docs, location, strlen(location)+1, (void**)&doc, sizeof(xmlDocPtr), NULL);
- load_schema(ctx, schema);
- }
-}
-
-/*
-2.6.1 xsi:type
-2.6.2 xsi:nil
-2.6.3 xsi:schemaLocation, xsi:noNamespaceSchemaLocation
-*/
-
-/*
-<schema
- attributeFormDefault = (qualified | unqualified) : unqualified
- blockDefault = (#all | List of (extension | restriction | substitution)) : ''
- elementFormDefault = (qualified | unqualified) : unqualified
- finalDefault = (#all | List of (extension | restriction)) : ''
- id = ID
- targetNamespace = anyURI
- version = token
- xml:lang = language
- {any attributes with non-schema namespace . . .}>
- Content: ((include | import | redefine | annotation)*, (((simpleType | complexType | group | attributeGroup) | element | attribute | notation), annotation*)*)
-</schema>
-*/
-int load_schema(sdlCtx *ctx,xmlNodePtr schema)
-{
- xmlNodePtr trav;
- xmlAttrPtr tns;
-
- if (!ctx->sdl->types) {
- ctx->sdl->types = emalloc(sizeof(HashTable));
- zend_hash_init(ctx->sdl->types, 0, NULL, delete_type, 0);
- }
- if (!ctx->attributes) {
- ctx->attributes = emalloc(sizeof(HashTable));
- zend_hash_init(ctx->attributes, 0, NULL, delete_attribute, 0);
- }
- if (!ctx->attributeGroups) {
- ctx->attributeGroups = emalloc(sizeof(HashTable));
- zend_hash_init(ctx->attributeGroups, 0, NULL, delete_type, 0);
- }
-
- tns = get_attribute(schema->properties, "targetNamespace");
- if (tns == NULL) {
- tns = xmlSetProp(schema, "targetNamespace", "");
- xmlNewNs(schema, "", NULL);
- }
-
- trav = schema->children;
- while (trav != NULL) {
- if (node_is_equal(trav,"include")) {
- xmlAttrPtr location;
-
- location = get_attribute(trav->properties, "schemaLocation");
- if (location == NULL) {
- soap_error0(E_ERROR, "Parsing Schema: include has no 'schemaLocation' attribute");
- } else {
- xmlChar *uri;
- xmlChar *base = xmlNodeGetBase(trav->doc, trav);
-
- if (base == NULL) {
- uri = xmlBuildURI(location->children->content, trav->doc->URL);
- } else {
- uri = xmlBuildURI(location->children->content, base);
- xmlFree(base);
- }
- schema_load_file(ctx,NULL,uri,tns,0);
- xmlFree(uri);
- }
-
- } else if (node_is_equal(trav,"redefine")) {
- xmlAttrPtr location;
-
- location = get_attribute(trav->properties, "schemaLocation");
- if (location == NULL) {
- soap_error0(E_ERROR, "Parsing Schema: redefine has no 'schemaLocation' attribute");
- } else {
- xmlChar *uri;
- xmlChar *base = xmlNodeGetBase(trav->doc, trav);
-
- if (base == NULL) {
- uri = xmlBuildURI(location->children->content, trav->doc->URL);
- } else {
- uri = xmlBuildURI(location->children->content, base);
- xmlFree(base);
- }
- schema_load_file(ctx,NULL,uri,tns,0);
- xmlFree(uri);
- /* TODO: <redefine> support */
- }
-
- } else if (node_is_equal(trav,"import")) {
- xmlAttrPtr ns, location;
- xmlChar *uri = NULL;
-
- ns = get_attribute(trav->properties, "namespace");
- location = get_attribute(trav->properties, "schemaLocation");
-
- if (ns != NULL && tns != NULL && strcmp(ns->children->content,tns->children->content) == 0) {
- soap_error1(E_ERROR, "Parsing Schema: can't import schema from '%s', namespace must not match the enclosing schema 'targetNamespace'", location->children->content);
- }
- if (location) {
- xmlChar *base = xmlNodeGetBase(trav->doc, trav);
-
- if (base == NULL) {
- uri = xmlBuildURI(location->children->content, trav->doc->URL);
- } else {
- uri = xmlBuildURI(location->children->content, base);
- xmlFree(base);
- }
- }
- schema_load_file(ctx,ns,uri,tns,1);
- if (uri != NULL) {xmlFree(uri);}
- } else if (node_is_equal(trav,"annotation")) {
- /* TODO: <annotation> support */
-/* annotation cleanup
- xmlNodePtr tmp = trav;
- trav = trav->next;
- xmlUnlinkNode(tmp);
- xmlFreeNode(tmp);
- continue;
-*/
- } else {
- break;
- }
- trav = trav->next;
- }
-
- while (trav != NULL) {
- if (node_is_equal(trav,"simpleType")) {
- schema_simpleType(ctx->sdl, tns, trav, NULL);
- } else if (node_is_equal(trav,"complexType")) {
- schema_complexType(ctx->sdl, tns, trav, NULL);
- } else if (node_is_equal(trav,"group")) {
- schema_group(ctx->sdl, tns, trav, NULL, NULL);
- } else if (node_is_equal(trav,"attributeGroup")) {
- schema_attributeGroup(ctx->sdl, tns, trav, NULL, ctx);
- } else if (node_is_equal(trav,"element")) {
- schema_element(ctx->sdl, tns, trav, NULL, NULL);
- } else if (node_is_equal(trav,"attribute")) {
- schema_attribute(ctx->sdl, tns, trav, NULL, ctx);
- } else if (node_is_equal(trav,"notation")) {
- /* TODO: <notation> support */
- } else if (node_is_equal(trav,"annotation")) {
- /* TODO: <annotation> support */
- } else {
- soap_error1(E_ERROR, "Parsing Schema: unexpected <%s> in schema", trav->name);
- }
- trav = trav->next;
- }
- return TRUE;
-}
-
-/*
-<simpleType
- final = (#all | (list | union | restriction))
- id = ID
- name = NCName
- {any attributes with non-schema namespace . . .}>
- Content: (annotation?, (restriction | list | union))
-</simpleType>
-*/
-static int schema_simpleType(sdlPtr sdl, xmlAttrPtr tns, xmlNodePtr simpleType, sdlTypePtr cur_type)
-{
- xmlNodePtr trav;
- xmlAttrPtr name, ns;
-
- ns = get_attribute(simpleType->properties, "targetNamespace");
- if (ns == NULL) {
- ns = tns;
- }
-
- name = get_attribute(simpleType->properties, "name");
- if (cur_type != NULL) {
- /* Anonymous type inside <element> or <restriction> */
- sdlTypePtr newType, *ptr;
-
- newType = emalloc(sizeof(sdlType));
- memset(newType, 0, sizeof(sdlType));
- newType->kind = XSD_TYPEKIND_SIMPLE;
- if (name != NULL) {
- newType->name = estrdup(name->children->content);
- newType->namens = estrdup(ns->children->content);
- } else {
- newType->name = estrdup(cur_type->name);
- newType->namens = estrdup(cur_type->namens);
- }
-
- zend_hash_next_index_insert(sdl->types, &newType, sizeof(sdlTypePtr), (void **)&ptr);
-
- if (sdl->encoders == NULL) {
- sdl->encoders = emalloc(sizeof(HashTable));
- zend_hash_init(sdl->encoders, 0, NULL, delete_encoder, 0);
- }
- cur_type->encode = emalloc(sizeof(encode));
- memset(cur_type->encode, 0, sizeof(encode));
- cur_type->encode->details.ns = estrdup(newType->namens);
- cur_type->encode->details.type_str = estrdup(newType->name);
- cur_type->encode->details.sdl_type = *ptr;
- cur_type->encode->to_xml = sdl_guess_convert_xml;
- cur_type->encode->to_zval = sdl_guess_convert_zval;
- zend_hash_next_index_insert(sdl->encoders, &cur_type->encode, sizeof(encodePtr), NULL);
-
- cur_type =*ptr;
-
- } else if (name != NULL) {
- sdlTypePtr newType, *ptr;
-
- newType = emalloc(sizeof(sdlType));
- memset(newType, 0, sizeof(sdlType));
- newType->kind = XSD_TYPEKIND_SIMPLE;
- newType->name = estrdup(name->children->content);
- newType->namens = estrdup(ns->children->content);
-
- if (cur_type == NULL) {
- zend_hash_next_index_insert(sdl->types, &newType, sizeof(sdlTypePtr), (void **)&ptr);
- } else {
- if (cur_type->elements == NULL) {
- cur_type->elements = emalloc(sizeof(HashTable));
- zend_hash_init(cur_type->elements, 0, NULL, delete_type, 0);
- }
- zend_hash_update(cur_type->elements, newType->name, strlen(newType->name)+1, &newType, sizeof(sdlTypePtr), (void **)&ptr);
- }
- cur_type = (*ptr);
-
- create_encoder(sdl, cur_type, ns->children->content, name->children->content);
- } else {
- soap_error0(E_ERROR, "Parsing Schema: simpleType has no 'name' attribute");
- }
-
- trav = simpleType->children;
- if (trav != NULL && node_is_equal(trav,"annotation")) {
- /* TODO: <annotation> support */
- trav = trav->next;
- }
- if (trav != NULL) {
- if (node_is_equal(trav,"restriction")) {
- schema_restriction_simpleContent(sdl, tns, trav, cur_type, 1);
- trav = trav->next;
- } else if (node_is_equal(trav,"list")) {
- cur_type->kind = XSD_TYPEKIND_LIST;
- schema_list(sdl, tns, trav, cur_type);
- trav = trav->next;
- } else if (node_is_equal(trav,"union")) {
- cur_type->kind = XSD_TYPEKIND_UNION;
- schema_union(sdl, tns, trav, cur_type);
- trav = trav->next;
- } else {
- soap_error1(E_ERROR, "Parsing Schema: unexpected <%s> in simpleType", trav->name);
- }
- } else {
- soap_error0(E_ERROR, "Parsing Schema: expected <restriction>, <list> or <union> in simpleType");
- }
- if (trav != NULL) {
- soap_error1(E_ERROR, "Parsing Schema: unexpected <%s> in simpleType", trav->name);
- }
-
- return TRUE;
-}
-
-/*
-<list
- id = ID
- itemType = QName
- {any attributes with non-schema namespace . . .}>
- Content: (annotation?, (simpleType?))
-</list>
-*/
-static int schema_list(sdlPtr sdl, xmlAttrPtr tns, xmlNodePtr listType, sdlTypePtr cur_type)
-{
- xmlNodePtr trav;
- xmlAttrPtr itemType;
-
- itemType = get_attribute(listType->properties, "itemType");
- if (itemType != NULL) {
- char *type, *ns;
- xmlNsPtr nsptr;
-
- parse_namespace(itemType->children->content, &type, &ns);
- nsptr = xmlSearchNs(listType->doc, listType, ns);
- if (nsptr != NULL) {
- sdlTypePtr newType, *tmp;
-
- newType = emalloc(sizeof(sdlType));
- memset(newType, 0, sizeof(sdlType));
-
- newType->name = estrdup(type);
- newType->namens = estrdup(nsptr->href);
-
- newType->encode = get_create_encoder(sdl, newType, (char *)nsptr->href, type);
-
- if (cur_type->elements == NULL) {
- cur_type->elements = emalloc(sizeof(HashTable));
- zend_hash_init(cur_type->elements, 0, NULL, delete_type, 0);
- }
- zend_hash_next_index_insert(cur_type->elements, &newType, sizeof(sdlTypePtr), (void **)&tmp);
- }
- if (type) {efree(type);}
- if (ns) {efree(ns);}
- }
-
- trav = listType->children;
- if (trav != NULL && node_is_equal(trav,"annotation")) {
- /* TODO: <annotation> support */
- trav = trav->next;
- }
- if (trav != NULL && node_is_equal(trav,"simpleType")) {
- sdlTypePtr newType, *tmp;
-
- if (itemType != NULL) {
- soap_error0(E_ERROR, "Parsing Schema: element has both 'itemType' attribute and subtype");
- }
-
- newType = emalloc(sizeof(sdlType));
- memset(newType, 0, sizeof(sdlType));
-
- newType->name = estrdup("anonymous");
- newType->namens = estrdup(tns->children->content);
-
- if (cur_type->elements == NULL) {
- cur_type->elements = emalloc(sizeof(HashTable));
- zend_hash_init(cur_type->elements, 0, NULL, delete_type, 0);
- }
- zend_hash_next_index_insert(cur_type->elements, &newType, sizeof(sdlTypePtr), (void **)&tmp);
-
- schema_simpleType(sdl, tns, trav, newType);
- trav = trav->next;
- }
- if (trav != NULL) {
- soap_error1(E_ERROR, "Parsing Schema: unexpected <%s> in list", trav->name);
- }
- return TRUE;
-}
-
-/*
-<union
- id = ID
- memberTypes = List of QName
- {any attributes with non-schema namespace . . .}>
- Content: (annotation?, (simpleType*))
-</union>
-*/
-static int schema_union(sdlPtr sdl, xmlAttrPtr tns, xmlNodePtr unionType, sdlTypePtr cur_type)
-{
- xmlNodePtr trav;
- xmlAttrPtr memberTypes;
-
- memberTypes = get_attribute(unionType->properties, "memberTypes");
- if (memberTypes != NULL) {
- char *str, *start, *end, *next;
- char *type, *ns;
- xmlNsPtr nsptr;
-
- str = estrdup(memberTypes->children->content);
- whiteSpace_collapse(str);
- start = str;
- while (start != NULL && *start != '\0') {
- end = strchr(start,' ');
- if (end == NULL) {
- next = NULL;
- } else {
- *end = '\0';
- next = end+1;
- }
-
- parse_namespace(start, &type, &ns);
- nsptr = xmlSearchNs(unionType->doc, unionType, ns);
- if (nsptr != NULL) {
- sdlTypePtr newType, *tmp;
-
- newType = emalloc(sizeof(sdlType));
- memset(newType, 0, sizeof(sdlType));
-
- newType->name = estrdup(type);
- newType->namens = estrdup(nsptr->href);
-
- newType->encode = get_create_encoder(sdl, newType, (char *)nsptr->href, type);
-
- if (cur_type->elements == NULL) {
- cur_type->elements = emalloc(sizeof(HashTable));
- zend_hash_init(cur_type->elements, 0, NULL, delete_type, 0);
- }
- zend_hash_next_index_insert(cur_type->elements, &newType, sizeof(sdlTypePtr), (void **)&tmp);
- }
- if (type) {efree(type);}
- if (ns) {efree(ns);}
-
- start = next;
- }
- efree(str);
- }
-
- trav = unionType->children;
- if (trav != NULL && node_is_equal(trav,"annotation")) {
- /* TODO: <annotation> support */
- trav = trav->next;
- }
- while (trav != NULL) {
- if (node_is_equal(trav,"simpleType")) {
- sdlTypePtr newType, *tmp;
-
- if (memberTypes != NULL) {
- soap_error0(E_ERROR, "Parsing Schema: union has both 'memberTypes' attribute and subtypes");
- }
-
- newType = emalloc(sizeof(sdlType));
- memset(newType, 0, sizeof(sdlType));
-
- newType->name = estrdup("anonymous");
- newType->namens = estrdup(tns->children->content);
-
- if (cur_type->elements == NULL) {
- cur_type->elements = emalloc(sizeof(HashTable));
- zend_hash_init(cur_type->elements, 0, NULL, delete_type, 0);
- }
- zend_hash_next_index_insert(cur_type->elements, &newType, sizeof(sdlTypePtr), (void **)&tmp);
-
- schema_simpleType(sdl, tns, trav, newType);
-
- } else {
- soap_error1(E_ERROR, "Parsing Schema: unexpected <%s> in union", trav->name);
- }
- trav = trav->next;
- }
- if (trav != NULL) {
- soap_error1(E_ERROR, "Parsing Schema: unexpected <%s> in union", trav->name);
- }
- return TRUE;
-}
-
-/*
-<simpleContent
- id = ID
- {any attributes with non-schema namespace . . .}>
- Content: (annotation?, (restriction | extension))
-</simpleContent>
-*/
-static int schema_simpleContent(sdlPtr sdl, xmlAttrPtr tns, xmlNodePtr simpCompType, sdlTypePtr cur_type)
-{
- xmlNodePtr trav;
-
- trav = simpCompType->children;
- if (trav != NULL && node_is_equal(trav,"annotation")) {
- /* TODO: <annotation> support */
- trav = trav->next;
- }
- if (trav != NULL) {
- if (node_is_equal(trav, "restriction")) {
- cur_type->kind = XSD_TYPEKIND_RESTRICTION;
- schema_restriction_simpleContent(sdl, tns, trav, cur_type, 0);
- trav = trav->next;
- } else if (node_is_equal(trav, "extension")) {
- cur_type->kind = XSD_TYPEKIND_EXTENSION;
- schema_extension_simpleContent(sdl, tns, trav, cur_type);
- trav = trav->next;
- } else {
- soap_error1(E_ERROR, "Parsing Schema: unexpected <%s> in simpleContent", trav->name);
- }
- } else {
- soap_error0(E_ERROR, "Parsing Schema: expected <restriction> or <extension> in simpleContent");
- }
- if (trav != NULL) {
- soap_error1(E_ERROR, "Parsing Schema: unexpected <%s> in simpleContent", trav->name);
- }
-
- return TRUE;
-}
-
-/*
-simpleType:<restriction
- base = QName
- id = ID
- {any attributes with non-schema namespace . . .}>
- Content: (annotation?, (simpleType?, (minExclusive | minInclusive | maxExclusive | maxInclusive | totalDigits | fractionDigits | length | minLength | maxLength | enumeration | whiteSpace | pattern)*)?)
-</restriction>
-simpleContent:<restriction
- base = QName
- id = ID
- {any attributes with non-schema namespace . . .}>
- Content: (annotation?, (simpleType?, (minExclusive | minInclusive | maxExclusive | maxInclusive | totalDigits | fractionDigits | length | minLength | maxLength | enumeration | whiteSpace | pattern)*)?, ((attribute | attributeGroup)*, anyAttribute?))
-</restriction>
-*/
-static int schema_restriction_simpleContent(sdlPtr sdl, xmlAttrPtr tns, xmlNodePtr restType, sdlTypePtr cur_type, int simpleType)
-{
- xmlNodePtr trav;
- xmlAttrPtr base;
-
- base = get_attribute(restType->properties, "base");
- if (base != NULL) {
- char *type, *ns;
- xmlNsPtr nsptr;
-
- parse_namespace(base->children->content, &type, &ns);
- nsptr = xmlSearchNs(restType->doc, restType, ns);
- if (nsptr != NULL) {
- cur_type->encode = get_create_encoder(sdl, cur_type, (char *)nsptr->href, type);
- }
- if (type) {efree(type);}
- if (ns) {efree(ns);}
- } else if (!simpleType) {
- soap_error0(E_ERROR, "Parsing Schema: restriction has no 'base' attribute");
- }
-
- if (cur_type->restrictions == NULL) {
- cur_type->restrictions = emalloc(sizeof(sdlRestrictions));
- memset(cur_type->restrictions, 0, sizeof(sdlRestrictions));
- }
-
- trav = restType->children;
- if (trav != NULL && node_is_equal(trav, "annotation")) {
- /* TODO: <annotation> support */
- trav = trav->next;
- }
- if (trav != NULL && node_is_equal(trav, "simpleType")) {
- schema_simpleType(sdl, tns, trav, cur_type);
- trav = trav->next;
- }
- while (trav != NULL) {
- if (node_is_equal(trav, "minExclusive")) {
- schema_restriction_var_int(trav, &cur_type->restrictions->minExclusive);
- } else if (node_is_equal(trav, "minInclusive")) {
- schema_restriction_var_int(trav, &cur_type->restrictions->minInclusive);
- } else if (node_is_equal(trav, "maxExclusive")) {
- schema_restriction_var_int(trav, &cur_type->restrictions->maxExclusive);
- } else if (node_is_equal(trav, "maxInclusive")) {
- schema_restriction_var_int(trav, &cur_type->restrictions->maxInclusive);
- } else if (node_is_equal(trav, "totalDigits")) {
- schema_restriction_var_int(trav, &cur_type->restrictions->totalDigits);
- } else if (node_is_equal(trav, "fractionDigits")) {
- schema_restriction_var_int(trav, &cur_type->restrictions->fractionDigits);
- } else if (node_is_equal(trav, "length")) {
- schema_restriction_var_int(trav, &cur_type->restrictions->length);
- } else if (node_is_equal(trav, "minLength")) {
- schema_restriction_var_int(trav, &cur_type->restrictions->minLength);
- } else if (node_is_equal(trav, "maxLength")) {
- schema_restriction_var_int(trav, &cur_type->restrictions->maxLength);
- } else if (node_is_equal(trav, "whiteSpace")) {
- schema_restriction_var_char(trav, &cur_type->restrictions->whiteSpace);
- } else if (node_is_equal(trav, "pattern")) {
- schema_restriction_var_char(trav, &cur_type->restrictions->pattern);
- } else if (node_is_equal(trav, "enumeration")) {
- sdlRestrictionCharPtr enumval = NULL;
-
- schema_restriction_var_char(trav, &enumval);
- if (cur_type->restrictions->enumeration == NULL) {
- cur_type->restrictions->enumeration = emalloc(sizeof(HashTable));
- zend_hash_init(cur_type->restrictions->enumeration, 0, NULL, delete_restriction_var_char, 0);
- }
- zend_hash_add(cur_type->restrictions->enumeration, enumval->value, strlen(enumval->value)+1, &enumval, sizeof(sdlRestrictionCharPtr), NULL);
- } else {
- break;
- }
- trav = trav->next;
- }
- if (!simpleType) {
- while (trav != NULL) {
- if (node_is_equal(trav,"attribute")) {
- schema_attribute(sdl, tns, trav, cur_type, NULL);
- } else if (node_is_equal(trav,"attributeGroup")) {
- schema_attributeGroup(sdl, tns, trav, cur_type, NULL);
- } else if (node_is_equal(trav,"anyAttribute")) {
- /* TODO: <anyAttribute> support */
- trav = trav->next;
- break;
- } else {
- soap_error1(E_ERROR, "Parsing Schema: unexpected <%s> in restriction", trav->name);
- }
- trav = trav->next;
- }
- }
- if (trav != NULL) {
- soap_error1(E_ERROR, "Parsing Schema: unexpected <%s> in restriction", trav->name);
- }
-
- return TRUE;
-}
-
-/*
-<restriction
- base = QName
- id = ID
- {any attributes with non-schema namespace . . .}>
- Content: (annotation?, (group | all | choice | sequence)?, ((attribute | attributeGroup)*, anyAttribute?))
-</restriction>
-*/
-static int schema_restriction_complexContent(sdlPtr sdl, xmlAttrPtr tns, xmlNodePtr restType, sdlTypePtr cur_type)
-{
- xmlAttrPtr base;
- xmlNodePtr trav;
-
- base = get_attribute(restType->properties, "base");
- if (base != NULL) {
- char *type, *ns;
- xmlNsPtr nsptr;
-
- parse_namespace(base->children->content, &type, &ns);
- nsptr = xmlSearchNs(restType->doc, restType, ns);
- if (nsptr != NULL) {
- cur_type->encode = get_create_encoder(sdl, cur_type, (char *)nsptr->href, type);
- }
- if (type) {efree(type);}
- if (ns) {efree(ns);}
- } else {
- soap_error0(E_ERROR, "Parsing Schema: restriction has no 'base' attribute");
- }
-
- trav = restType->children;
- if (trav != NULL && node_is_equal(trav,"annotation")) {
- /* TODO: <annotation> support */
- trav = trav->next;
- }
- if (trav != NULL) {
- if (node_is_equal(trav,"group")) {
- schema_group(sdl, tns, trav, cur_type, NULL);
- trav = trav->next;
- } else if (node_is_equal(trav,"all")) {
- schema_all(sdl, tns, trav, cur_type, NULL);
- trav = trav->next;
- } else if (node_is_equal(trav,"choice")) {
- schema_choice(sdl, tns, trav, cur_type, NULL);
- trav = trav->next;
- } else if (node_is_equal(trav,"sequence")) {
- schema_sequence(sdl, tns, trav, cur_type, NULL);
- trav = trav->next;
- }
- }
- while (trav != NULL) {
- if (node_is_equal(trav,"attribute")) {
- schema_attribute(sdl, tns, trav, cur_type, NULL);
- } else if (node_is_equal(trav,"attributeGroup")) {
- schema_attributeGroup(sdl, tns, trav, cur_type, NULL);
- } else if (node_is_equal(trav,"anyAttribute")) {
- /* TODO: <anyAttribute> support */
- trav = trav->next;
- break;
- } else {
- soap_error1(E_ERROR, "Parsing Schema: unexpected <%s> in restriction", trav->name);
- }
- trav = trav->next;
- }
- if (trav != NULL) {
- soap_error1(E_ERROR, "Parsing Schema: unexpected <%s> in restriction", trav->name);
- }
-
- return TRUE;
-}
-
-static int schema_restriction_var_int(xmlNodePtr val, sdlRestrictionIntPtr *valptr)
-{
- xmlAttrPtr fixed, value;
-
- if ((*valptr) == NULL) {
- (*valptr) = emalloc(sizeof(sdlRestrictionInt));
- }
- memset((*valptr), 0, sizeof(sdlRestrictionInt));
-
- fixed = get_attribute(val->properties, "fixed");
- (*valptr)->fixed = FALSE;
- if (fixed != NULL) {
- if (!strncmp(fixed->children->content, "true", sizeof("true")) ||
- !strncmp(fixed->children->content, "1", sizeof("1")))
- (*valptr)->fixed = TRUE;
- }
-
- value = get_attribute(val->properties, "value");
- if (value == NULL) {
- soap_error0(E_ERROR, "Parsing Schema: missing restriction value");
- }
-
- (*valptr)->value = atoi(value->children->content);
-
- return TRUE;
-}
-
-static int schema_restriction_var_char(xmlNodePtr val, sdlRestrictionCharPtr *valptr)
-{
- xmlAttrPtr fixed, value;
-
- if ((*valptr) == NULL) {
- (*valptr) = emalloc(sizeof(sdlRestrictionChar));
- }
- memset((*valptr), 0, sizeof(sdlRestrictionChar));
-
- fixed = get_attribute(val->properties, "fixed");
- (*valptr)->fixed = FALSE;
- if (fixed != NULL) {
- if (!strncmp(fixed->children->content, "true", sizeof("true")) ||
- !strncmp(fixed->children->content, "1", sizeof("1"))) {
- (*valptr)->fixed = TRUE;
- }
- }
-
- value = get_attribute(val->properties, "value");
- if (value == NULL) {
- soap_error0(E_ERROR, "Parsing Schema: missing restriction value");
- }
-
- (*valptr)->value = estrdup(value->children->content);
- return TRUE;
-}
-
-/*
-From simpleContent (not supported):
-<extension
- base = QName
- id = ID
- {any attributes with non-schema namespace . . .}>
- Content: (annotation?, ((attribute | attributeGroup)*, anyAttribute?))
-</extension>
-*/
-static int schema_extension_simpleContent(sdlPtr sdl, xmlAttrPtr tns, xmlNodePtr extType, sdlTypePtr cur_type)
-{
- xmlNodePtr trav;
- xmlAttrPtr base;
-
- base = get_attribute(extType->properties, "base");
- if (base != NULL) {
- char *type, *ns;
- xmlNsPtr nsptr;
-
- parse_namespace(base->children->content, &type, &ns);
- nsptr = xmlSearchNs(extType->doc, extType, ns);
- if (nsptr != NULL) {
- cur_type->encode = get_create_encoder(sdl, cur_type, (char *)nsptr->href, type);
- }
- if (type) {efree(type);}
- if (ns) {efree(ns);}
- } else {
- soap_error0(E_ERROR, "Parsing Schema: extension has no 'base' attribute");
- }
-
- trav = extType->children;
- if (trav != NULL && node_is_equal(trav,"annotation")) {
- /* TODO: <annotation> support */
- trav = trav->next;
- }
- while (trav != NULL) {
- if (node_is_equal(trav,"attribute")) {
- schema_attribute(sdl, tns, trav, cur_type, NULL);
- } else if (node_is_equal(trav,"attributeGroup")) {
- schema_attributeGroup(sdl, tns, trav, cur_type, NULL);
- } else if (node_is_equal(trav,"anyAttribute")) {
- /* TODO: <anyAttribute> support */
- trav = trav->next;
- break;
- } else {
- soap_error1(E_ERROR, "Parsing Schema: unexpected <%s> in extension", trav->name);
- }
- trav = trav->next;
- }
- if (trav != NULL) {
- soap_error1(E_ERROR, "Parsing Schema: unexpected <%s> in extension", trav->name);
- }
- return TRUE;
-}
-
-/*
-From complexContent:
-<extension
- base = QName
- id = ID
- {any attributes with non-schema namespace . . .}>
- Content: (annotation?, ((group | all | choice | sequence)?, ((attribute | attributeGroup)*, anyAttribute?)))
-</extension>
-*/
-static int schema_extension_complexContent(sdlPtr sdl, xmlAttrPtr tns, xmlNodePtr extType, sdlTypePtr cur_type)
-{
- xmlNodePtr trav;
- xmlAttrPtr base;
-
- base = get_attribute(extType->properties, "base");
- if (base != NULL) {
- char *type, *ns;
- xmlNsPtr nsptr;
-
- parse_namespace(base->children->content, &type, &ns);
- nsptr = xmlSearchNs(extType->doc, extType, ns);
- if (nsptr != NULL) {
- cur_type->encode = get_create_encoder(sdl, cur_type, (char *)nsptr->href, type);
- }
- if (type) {efree(type);}
- if (ns) {efree(ns);}
- } else {
- soap_error0(E_ERROR, "Parsing Schema: extension has no 'base' attribute");
- }
-
- trav = extType->children;
- if (trav != NULL && node_is_equal(trav,"annotation")) {
- /* TODO: <annotation> support */
- trav = trav->next;
- }
- if (trav != NULL) {
- if (node_is_equal(trav,"group")) {
- schema_group(sdl, tns, trav, cur_type, NULL);
- trav = trav->next;
- } else if (node_is_equal(trav,"all")) {
- schema_all(sdl, tns, trav, cur_type, NULL);
- trav = trav->next;
- } else if (node_is_equal(trav,"choice")) {
- schema_choice(sdl, tns, trav, cur_type, NULL);
- trav = trav->next;
- } else if (node_is_equal(trav,"sequence")) {
- schema_sequence(sdl, tns, trav, cur_type, NULL);
- trav = trav->next;
- }
- }
- while (trav != NULL) {
- if (node_is_equal(trav,"attribute")) {
- schema_attribute(sdl, tns, trav, cur_type, NULL);
- } else if (node_is_equal(trav,"attributeGroup")) {
- schema_attributeGroup(sdl, tns, trav, cur_type, NULL);
- } else if (node_is_equal(trav,"anyAttribute")) {
- /* TODO: <anyAttribute> support */
- trav = trav->next;
- break;
- } else {
- soap_error1(E_ERROR, "Parsing Schema: unexpected <%s> in extension", trav->name);
- }
- trav = trav->next;
- }
- if (trav != NULL) {
- soap_error1(E_ERROR, "Parsing Schema: unexpected <%s> in extension", trav->name);
- }
- return TRUE;
-}
-
-/*
-<all
- id = ID
- maxOccurs = 1 : 1
- minOccurs = (0 | 1) : 1
- {any attributes with non-schema namespace . . .}>
- Content: (annotation?, element*)
-</all>
-*/
-static int schema_all(sdlPtr sdl, xmlAttrPtr tns, xmlNodePtr all, sdlTypePtr cur_type, sdlContentModelPtr model)
-{
- xmlNodePtr trav;
- xmlAttrPtr attr;
- sdlContentModelPtr newModel;
-
- newModel = emalloc(sizeof(sdlContentModel));
- newModel->kind = XSD_CONTENT_ALL;
- newModel->u.content = emalloc(sizeof(HashTable));
- zend_hash_init(newModel->u.content, 0, NULL, delete_model, 0);
- if (model == NULL) {
- cur_type->model = newModel;
- } else {
- zend_hash_next_index_insert(model->u.content,&newModel,sizeof(sdlContentModelPtr), NULL);
- }
-
- newModel->min_occurs = 1;
- newModel->max_occurs = 1;
-
- attr = get_attribute(all->properties, "minOccurs");
- if (attr) {
- newModel->min_occurs = atoi(attr->children->content);
- }
-
- attr = get_attribute(all->properties, "maxOccurs");
- if (attr) {
- if (!strncmp(attr->children->content, "unbounded", sizeof("unbounded"))) {
- newModel->max_occurs = -1;
- } else {
- newModel->max_occurs = atoi(attr->children->content);
- }
- }
-
- trav = all->children;
- if (trav != NULL && node_is_equal(trav,"annotation")) {
- /* TODO: <annotation> support */
- trav = trav->next;
- }
- while (trav != NULL) {
- if (node_is_equal(trav,"element")) {
- schema_element(sdl, tns, trav, cur_type, newModel);
- } else {
- soap_error1(E_ERROR, "Parsing Schema: unexpected <%s> in all", trav->name);
- }
- trav = trav->next;
- }
- return TRUE;
-}
-
-/*
-<group
- name = NCName
- Content: (annotation?, (all | choice | sequence))
-</group>
-<group
- name = NCName
- ref = QName>
- Content: (annotation?)
-</group>
-*/
-static int schema_group(sdlPtr sdl, xmlAttrPtr tns, xmlNodePtr groupType, sdlTypePtr cur_type, sdlContentModelPtr model)
-{
- xmlNodePtr trav;
- xmlAttrPtr attr;
- xmlAttrPtr ns, name, ref = NULL;
- sdlContentModelPtr newModel;
-
- ns = get_attribute(groupType->properties, "targetNamespace");
- if (ns == NULL) {
- ns = tns;
- }
-
- name = get_attribute(groupType->properties, "name");
- if (name == NULL) {
- name = ref = get_attribute(groupType->properties, "ref");
- }
-
- if (name) {
- smart_str key = {0};
-
- if (ref) {
- char *type, *ns;
- xmlNsPtr nsptr;
-
- parse_namespace(ref->children->content, &type, &ns);
- nsptr = xmlSearchNs(groupType->doc, groupType, ns);
- if (nsptr != NULL) {
- smart_str_appends(&key, nsptr->href);
- smart_str_appendc(&key, ':');
- }
- smart_str_appends(&key, type);
- smart_str_0(&key);
-
- newModel = emalloc(sizeof(sdlContentModel));
- newModel->kind = XSD_CONTENT_GROUP_REF;
- newModel->u.group_ref = estrdup(key.c);
-
- if (type) {efree(type);}
- if (ns) {efree(ns);}
- } else {
- newModel = emalloc(sizeof(sdlContentModel));
- newModel->kind = XSD_CONTENT_SEQUENCE; /* will be redefined */
- newModel->u.content = emalloc(sizeof(HashTable));
- zend_hash_init(newModel->u.content, 0, NULL, delete_model, 0);
-
- smart_str_appends(&key, ns->children->content);
- smart_str_appendc(&key, ':');
- smart_str_appends(&key, name->children->content);
- smart_str_0(&key);
- }
-
- if (cur_type == NULL) {
- sdlTypePtr newType;
-
- newType = emalloc(sizeof(sdlType));
- memset(newType, 0, sizeof(sdlType));
-
- if (sdl->groups == NULL) {
- sdl->groups = emalloc(sizeof(HashTable));
- zend_hash_init(sdl->groups, 0, NULL, delete_type, 0);
- }
- if (zend_hash_add(sdl->groups, key.c, key.len+1, (void**)&newType, sizeof(sdlTypePtr), NULL) != SUCCESS) {
- soap_error1(E_ERROR, "Parsing Schema: group '%s' already defined", key.c);
- }
-
- cur_type = newType;
- }
- smart_str_free(&key);
-
- if (model == NULL) {
- cur_type->model = newModel;
- } else {
- zend_hash_next_index_insert(model->u.content, &newModel, sizeof(sdlContentModelPtr), NULL);
- }
- } else {
- soap_error0(E_ERROR, "Parsing Schema: group has no 'name' nor 'ref' attributes");
- }
-
- newModel->min_occurs = 1;
- newModel->max_occurs = 1;
-
- attr = get_attribute(groupType->properties, "minOccurs");
- if (attr) {
- newModel->min_occurs = atoi(attr->children->content);
- }
-
- attr = get_attribute(groupType->properties, "maxOccurs");
- if (attr) {
- if (!strncmp(attr->children->content, "unbounded", sizeof("unbounded"))) {
- newModel->max_occurs = -1;
- } else {
- newModel->max_occurs = atoi(attr->children->content);
- }
- }
-
- trav = groupType->children;
- if (trav != NULL && node_is_equal(trav,"annotation")) {
- /* TODO: <annotation> support */
- trav = trav->next;
- }
- if (trav != NULL) {
- if (node_is_equal(trav,"choice")) {
- if (ref != NULL) {
- soap_error0(E_ERROR, "Parsing Schema: group has both 'ref' attribute and subcontent");
- }
- newModel->kind = XSD_CONTENT_CHOICE;
- schema_choice(sdl, tns, trav, cur_type, newModel);
- trav = trav->next;
- } else if (node_is_equal(trav,"sequence")) {
- if (ref != NULL) {
- soap_error0(E_ERROR, "Parsing Schema: group has both 'ref' attribute and subcontent");
- }
- newModel->kind = XSD_CONTENT_SEQUENCE;
- schema_sequence(sdl, tns, trav, cur_type, newModel);
- trav = trav->next;
- } else if (node_is_equal(trav,"all")) {
- if (ref != NULL) {
- soap_error0(E_ERROR, "Parsing Schema: group has both 'ref' attribute and subcontent");
- }
- newModel->kind = XSD_CONTENT_ALL;
- schema_all(sdl, tns, trav, cur_type, newModel);
- trav = trav->next;
- } else {
- soap_error1(E_ERROR, "Parsing Schema: unexpected <%s> in group", trav->name);
- }
- }
- if (trav != NULL) {
- soap_error1(E_ERROR, "Parsing Schema: unexpected <%s> in group", trav->name);
- }
- return TRUE;
-}
-/*
-<choice
- id = ID
- maxOccurs = (nonNegativeInteger | unbounded) : 1
- minOccurs = nonNegativeInteger : 1
- {any attributes with non-schema namespace . . .}>
- Content: (annotation?, (element | group | choice | sequence | any)*)
-</choice>
-*/
-static int schema_choice(sdlPtr sdl, xmlAttrPtr tns, xmlNodePtr choiceType, sdlTypePtr cur_type, sdlContentModelPtr model)
-{
- xmlNodePtr trav;
- xmlAttrPtr attr;
- sdlContentModelPtr newModel;
-
- newModel = emalloc(sizeof(sdlContentModel));
- newModel->kind = XSD_CONTENT_CHOICE;
- newModel->u.content = emalloc(sizeof(HashTable));
- zend_hash_init(newModel->u.content, 0, NULL, delete_model, 0);
- if (model == NULL) {
- cur_type->model = newModel;
- } else {
- zend_hash_next_index_insert(model->u.content,&newModel,sizeof(sdlContentModelPtr), NULL);
- }
-
- newModel->min_occurs = 1;
- newModel->max_occurs = 1;
-
- attr = get_attribute(choiceType->properties, "minOccurs");
- if (attr) {
- newModel->min_occurs = atoi(attr->children->content);
- }
-
- attr = get_attribute(choiceType->properties, "maxOccurs");
- if (attr) {
- if (!strncmp(attr->children->content, "unbounded", sizeof("unbounded"))) {
- newModel->max_occurs = -1;
- } else {
- newModel->max_occurs = atoi(attr->children->content);
- }
- }
-
- trav = choiceType->children;
- if (trav != NULL && node_is_equal(trav,"annotation")) {
- /* TODO: <annotation> support */
- trav = trav->next;
- }
- while (trav != NULL) {
- if (node_is_equal(trav,"element")) {
- schema_element(sdl, tns, trav, cur_type, newModel);
- } else if (node_is_equal(trav,"group")) {
- schema_group(sdl, tns, trav, cur_type, newModel);
- } else if (node_is_equal(trav,"choice")) {
- schema_choice(sdl, tns, trav, cur_type, newModel);
- } else if (node_is_equal(trav,"sequence")) {
- schema_sequence(sdl, tns, trav, cur_type, newModel);
- } else if (node_is_equal(trav,"any")) {
- schema_any(sdl, tns, trav, cur_type, newModel);
- } else {
- soap_error1(E_ERROR, "Parsing Schema: unexpected <%s> in choice", trav->name);
- }
- trav = trav->next;
- }
- return TRUE;
-}
-
-/*
-<sequence
- id = ID
- maxOccurs = (nonNegativeInteger | unbounded) : 1
- minOccurs = nonNegativeInteger : 1
- {any attributes with non-schema namespace . . .}>
- Content: (annotation?, (element | group | choice | sequence | any)*)
-</sequence>
-*/
-static int schema_sequence(sdlPtr sdl, xmlAttrPtr tns, xmlNodePtr seqType, sdlTypePtr cur_type, sdlContentModelPtr model)
-{
- xmlNodePtr trav;
- xmlAttrPtr attr;
- sdlContentModelPtr newModel;
-
- newModel = emalloc(sizeof(sdlContentModel));
- newModel->kind = XSD_CONTENT_SEQUENCE;
- newModel->u.content = emalloc(sizeof(HashTable));
- zend_hash_init(newModel->u.content, 0, NULL, delete_model, 0);
- if (model == NULL) {
- cur_type->model = newModel;
- } else {
- zend_hash_next_index_insert(model->u.content,&newModel,sizeof(sdlContentModelPtr), NULL);
- }
-
- newModel->min_occurs = 1;
- newModel->max_occurs = 1;
-
- attr = get_attribute(seqType->properties, "minOccurs");
- if (attr) {
- newModel->min_occurs = atoi(attr->children->content);
- }
-
- attr = get_attribute(seqType->properties, "maxOccurs");
- if (attr) {
- if (!strncmp(attr->children->content, "unbounded", sizeof("unbounded"))) {
- newModel->max_occurs = -1;
- } else {
- newModel->max_occurs = atoi(attr->children->content);
- }
- }
-
- trav = seqType->children;
- if (trav != NULL && node_is_equal(trav,"annotation")) {
- /* TODO: <annotation> support */
- trav = trav->next;
- }
- while (trav != NULL) {
- if (node_is_equal(trav,"element")) {
- schema_element(sdl, tns, trav, cur_type, newModel);
- } else if (node_is_equal(trav,"group")) {
- schema_group(sdl, tns, trav, cur_type, newModel);
- } else if (node_is_equal(trav,"choice")) {
- schema_choice(sdl, tns, trav, cur_type, newModel);
- } else if (node_is_equal(trav,"sequence")) {
- schema_sequence(sdl, tns, trav, cur_type, newModel);
- } else if (node_is_equal(trav,"any")) {
- schema_any(sdl, tns, trav, cur_type, newModel);
- } else {
- soap_error1(E_ERROR, "Parsing Schema: unexpected <%s> in sequence", trav->name);
- }
- trav = trav->next;
- }
- return TRUE;
-}
-
-static int schema_any(sdlPtr sdl, xmlAttrPtr tns, xmlNodePtr extType, sdlTypePtr cur_type, sdlContentModelPtr model)
-{
- /* TODO: <any> support */
- return TRUE;
-}
-
-/*
-<complexContent
- id = ID
- mixed = boolean
- {any attributes with non-schema namespace . . .}>
- Content: (annotation?, (restriction | extension))
-</complexContent>
-*/
-static int schema_complexContent(sdlPtr sdl, xmlAttrPtr tns, xmlNodePtr compCont, sdlTypePtr cur_type)
-{
- xmlNodePtr trav;
-
- trav = compCont->children;
- if (trav != NULL && node_is_equal(trav,"annotation")) {
- /* TODO: <annotation> support */
- trav = trav->next;
- }
- if (trav != NULL) {
- if (node_is_equal(trav, "restriction")) {
- cur_type->kind = XSD_TYPEKIND_RESTRICTION;
- schema_restriction_complexContent(sdl, tns, trav, cur_type);
- trav = trav->next;
- } else if (node_is_equal(trav, "extension")) {
- cur_type->kind = XSD_TYPEKIND_EXTENSION;
- schema_extension_complexContent(sdl, tns, trav, cur_type);
- trav = trav->next;
- } else {
- soap_error1(E_ERROR, "Parsing Schema: unexpected <%s> in complexContent", trav->name);
- }
- } else {
- soap_error0(E_ERROR, "Parsing Schema: <restriction> or <extension> expected in complexContent");
- }
- if (trav != NULL) {
- soap_error1(E_ERROR, "Parsing Schema: unexpected <%s> in complexContent", trav->name);
- }
-
- return TRUE;
-}
-
-/*
-<complexType
- abstract = boolean : false
- block = (#all | List of (extension | restriction))
- final = (#all | List of (extension | restriction))
- id = ID
- mixed = boolean : false
- name = NCName
- {any attributes with non-schema namespace . . .}>
- Content: (annotation?, (simpleContent | complexContent | ((group | all | choice | sequence)?, ((attribute | attributeGroup)*, anyAttribute?))))
-</complexType>
-*/
-static int schema_complexType(sdlPtr sdl, xmlAttrPtr tns, xmlNodePtr compType, sdlTypePtr cur_type)
-{
- xmlNodePtr trav;
- xmlAttrPtr attrs, name, ns;
- TSRMLS_FETCH();
-
- attrs = compType->properties;
- ns = get_attribute(attrs, "targetNamespace");
- if (ns == NULL) {
- ns = tns;
- }
-
- name = get_attribute(attrs, "name");
- if (cur_type != NULL) {
- /* Anonymous type inside <element> */
- sdlTypePtr newType, *ptr;
-
- newType = emalloc(sizeof(sdlType));
- memset(newType, 0, sizeof(sdlType));
- newType->kind = XSD_TYPEKIND_COMPLEX;
- if (name != NULL) {
- newType->name = estrdup(name->children->content);
- newType->namens = estrdup(ns->children->content);
- } else {
- newType->name = estrdup(cur_type->name);
- newType->namens = estrdup(cur_type->namens);
- }
-
- zend_hash_next_index_insert(sdl->types, &newType, sizeof(sdlTypePtr), (void **)&ptr);
-
- if (sdl->encoders == NULL) {
- sdl->encoders = emalloc(sizeof(HashTable));
- zend_hash_init(sdl->encoders, 0, NULL, delete_encoder, 0);
- }
- cur_type->encode = emalloc(sizeof(encode));
- memset(cur_type->encode, 0, sizeof(encode));
- cur_type->encode->details.ns = estrdup(newType->namens);
- cur_type->encode->details.type_str = estrdup(newType->name);
- cur_type->encode->details.sdl_type = *ptr;
- cur_type->encode->to_xml = sdl_guess_convert_xml;
- cur_type->encode->to_zval = sdl_guess_convert_zval;
- zend_hash_next_index_insert(sdl->encoders, &cur_type->encode, sizeof(encodePtr), NULL);
-
- cur_type =*ptr;
-
- } else if (name) {
- sdlTypePtr newType, *ptr;
-
- newType = emalloc(sizeof(sdlType));
- memset(newType, 0, sizeof(sdlType));
- newType->kind = XSD_TYPEKIND_COMPLEX;
- newType->name = estrdup(name->children->content);
- newType->namens = estrdup(ns->children->content);
-
- zend_hash_next_index_insert(sdl->types, &newType, sizeof(sdlTypePtr), (void **)&ptr);
-
- cur_type = (*ptr);
- create_encoder(sdl, cur_type, ns->children->content, name->children->content);
- } else {
- soap_error0(E_ERROR, "Parsing Schema: complexType has no 'name' attribute");
- return FALSE;
- }
-
- trav = compType->children;
- if (trav != NULL && node_is_equal(trav, "annotation")) {
- /* TODO: <annotation> support */
- trav = trav->next;
- }
- if (trav != NULL) {
- if (node_is_equal(trav,"simpleContent")) {
- schema_simpleContent(sdl, tns, trav, cur_type);
- trav = trav->next;
- } else if (node_is_equal(trav,"complexContent")) {
- schema_complexContent(sdl, tns, trav, cur_type);
- trav = trav->next;
- } else {
- if (node_is_equal(trav,"group")) {
- schema_group(sdl, tns, trav, cur_type, NULL);
- trav = trav->next;
- } else if (node_is_equal(trav,"all")) {
- schema_all(sdl, tns, trav, cur_type, NULL);
- trav = trav->next;
- } else if (node_is_equal(trav,"choice")) {
- schema_choice(sdl, tns, trav, cur_type, NULL);
- trav = trav->next;
- } else if (node_is_equal(trav,"sequence")) {
- schema_sequence(sdl, tns, trav, cur_type, NULL);
- trav = trav->next;
- }
- while (trav != NULL) {
- if (node_is_equal(trav,"attribute")) {
- schema_attribute(sdl, tns, trav, cur_type, NULL);
- } else if (node_is_equal(trav,"attributeGroup")) {
- schema_attributeGroup(sdl, tns, trav, cur_type, NULL);
- } else if (node_is_equal(trav,"anyAttribute")) {
- /* TODO: <anyAttribute> support */
- trav = trav->next;
- break;
- } else {
- soap_error1(E_ERROR, "Parsing Schema: unexpected <%s> in complexType", trav->name);
- }
- trav = trav->next;
- }
- }
- }
- if (trav != NULL) {
- soap_error1(E_ERROR, "Parsing Schema: unexpected <%s> in complexType", trav->name);
- }
- return TRUE;
-}
-/*
-<element
- abstract = boolean : false
- block = (#all | List of (extension | restriction | substitution))
- default = string
- final = (#all | List of (extension | restriction))
- fixed = string
- form = (qualified | unqualified)
- id = ID
- maxOccurs = (nonNegativeInteger | unbounded) : 1
- minOccurs = nonNegativeInteger : 1
- name = NCName
- nillable = boolean : false
- ref = QName
- substitutionGroup = QName
- type = QName
- {any attributes with non-schema namespace . . .}>
- Content: (annotation?, ((simpleType | complexType)?, (unique | key | keyref)*))
-</element>
-*/
-static int schema_element(sdlPtr sdl, xmlAttrPtr tns, xmlNodePtr element, sdlTypePtr cur_type, sdlContentModelPtr model)
-{
- xmlNodePtr trav;
- xmlAttrPtr attrs, attr, ns, name, type, ref = NULL;
-
- attrs = element->properties;
- ns = get_attribute(attrs, "targetNamespace");
- if (ns == NULL) {
- ns = tns;
- }
-
- name = get_attribute(attrs, "name");
- if (name == NULL) {
- name = ref = get_attribute(attrs, "ref");
- }
-
- if (name) {
- HashTable *addHash;
- sdlTypePtr newType;
- smart_str key = {0};
-
- newType = emalloc(sizeof(sdlType));
- memset(newType, 0, sizeof(sdlType));
-
- if (ref) {
- smart_str nscat = {0};
- char *type, *ns;
- xmlNsPtr nsptr;
-
- parse_namespace(ref->children->content, &type, &ns);
- nsptr = xmlSearchNs(element->doc, element, ns);
- if (nsptr != NULL) {
- smart_str_appends(&nscat, nsptr->href);
- smart_str_appendc(&nscat, ':');
- newType->namens = estrdup(nsptr->href);
- }
- smart_str_appends(&nscat, type);
- newType->name = estrdup(type);
- smart_str_0(&nscat);
- if (type) {efree(type);}
- if (ns) {efree(ns);}
- newType->ref = estrdup(nscat.c);
- smart_str_free(&nscat);
- } else {
- newType->name = estrdup(name->children->content);
- newType->namens = estrdup(ns->children->content);
- }
-
- newType->nillable = FALSE;
-
- if (cur_type == NULL) {
- if (sdl->elements == NULL) {
- sdl->elements = emalloc(sizeof(HashTable));
- zend_hash_init(sdl->elements, 0, NULL, delete_type, 0);
- }
- addHash = sdl->elements;
- smart_str_appends(&key, newType->namens);
- smart_str_appendc(&key, ':');
- smart_str_appends(&key, newType->name);
- } else {
- if (cur_type->elements == NULL) {
- cur_type->elements = emalloc(sizeof(HashTable));
- zend_hash_init(cur_type->elements, 0, NULL, delete_type, 0);
- }
- addHash = cur_type->elements;
- smart_str_appends(&key, newType->name);
- }
-
- smart_str_0(&key);
- if (zend_hash_add(addHash, key.c, key.len + 1, &newType, sizeof(sdlTypePtr), NULL) != SUCCESS) {
- if (cur_type == NULL) {
- soap_error1(E_ERROR, "Parsing Schema: element '%s' already defined", key.c);
- } else {
- zend_hash_next_index_insert(addHash, &newType, sizeof(sdlTypePtr), NULL);
- }
- }
- smart_str_free(&key);
-
- if (model != NULL) {
- sdlContentModelPtr newModel = emalloc(sizeof(sdlContentModel));
-
- newModel->kind = XSD_CONTENT_ELEMENT;
- newModel->u.element = newType;
- newModel->min_occurs = 1;
- newModel->max_occurs = 1;
-
- attr = get_attribute(attrs, "maxOccurs");
- if (attr) {
- if (!strncmp(attr->children->content, "unbounded", sizeof("unbounded"))) {
- newModel->max_occurs = -1;
- } else {
- newModel->max_occurs = atoi(attr->children->content);
- }
- }
-
- attr = get_attribute(attrs, "minOccurs");
- if (attr) {
- newModel->min_occurs = atoi(attr->children->content);
- }
-
- zend_hash_next_index_insert(model->u.content, &newModel, sizeof(sdlContentModelPtr), NULL);
- }
- cur_type = newType;
- } else {
- soap_error0(E_ERROR, "Parsing Schema: element has no 'name' nor 'ref' attributes");
- }
-
- /* nillable = boolean : false */
- attrs = element->properties;
- attr = get_attribute(attrs, "nillable");
- if (attr) {
- if (ref != NULL) {
- soap_error0(E_ERROR, "Parsing Schema: element has both 'ref' and 'nillable' attributes");
- }
- if (!stricmp(attr->children->content, "true") ||
- !stricmp(attr->children->content, "1")) {
- cur_type->nillable = TRUE;
- } else {
- cur_type->nillable = FALSE;
- }
- } else {
- cur_type->nillable = FALSE;
- }
-
- attr = get_attribute(attrs, "fixed");
- if (attr) {
- if (ref != NULL) {
- soap_error0(E_ERROR, "Parsing Schema: element has both 'ref' and 'fixed' attributes");
- }
- cur_type->fixed = estrdup(attr->children->content);
- }
-
- attr = get_attribute(attrs, "default");
- if (attr) {
- if (ref != NULL) {
- soap_error0(E_ERROR, "Parsing Schema: element has both 'ref' and 'fixed' attributes");
- } else if (ref != NULL) {
- soap_error0(E_ERROR, "Parsing Schema: element has both 'default' and 'fixed' attributes");
- }
- cur_type->def = estrdup(attr->children->content);
- }
-
- /* type = QName */
- type = get_attribute(attrs, "type");
- if (type) {
- char *cptype, *str_ns;
- xmlNsPtr nsptr;
-
- if (ref != NULL) {
- soap_error0(E_ERROR, "Parsing Schema: element has both 'ref' and 'type' attributes");
- }
- parse_namespace(type->children->content, &cptype, &str_ns);
- nsptr = xmlSearchNs(element->doc, element, str_ns);
- if (nsptr != NULL) {
- cur_type->encode = get_create_encoder(sdl, cur_type, (char *)nsptr->href, (char *)cptype);
- }
- if (str_ns) {efree(str_ns);}
- if (cptype) {efree(cptype);}
- }
-
- trav = element->children;
- if (trav != NULL && node_is_equal(trav, "annotation")) {
- /* TODO: <annotation> support */
- trav = trav->next;
- }
- if (trav != NULL) {
- if (node_is_equal(trav,"simpleType")) {
- if (ref != NULL) {
- soap_error0(E_ERROR, "Parsing Schema: element has both 'ref' attribute and subtype");
- } else if (type != NULL) {
- soap_error0(E_ERROR, "Parsing Schema: element has both 'type' attribute and subtype");
- }
- schema_simpleType(sdl, tns, trav, cur_type);
- trav = trav->next;
- } else if (node_is_equal(trav,"complexType")) {
- if (ref != NULL) {
- soap_error0(E_ERROR, "Parsing Schema: element has both 'ref' attribute and subtype");
- } else if (type != NULL) {
- soap_error0(E_ERROR, "Parsing Schema: element has both 'type' attribute and subtype");
- }
- schema_complexType(sdl, tns, trav, cur_type);
- trav = trav->next;
- }
- }
- while (trav != NULL) {
- if (node_is_equal(trav,"unique")) {
- /* TODO: <unique> support */
- } else if (node_is_equal(trav,"key")) {
- /* TODO: <key> support */
- } else if (node_is_equal(trav,"keyref")) {
- /* TODO: <keyref> support */
- } else {
- soap_error1(E_ERROR, "Parsing Schema: unexpected <%s> in element", trav->name);
- }
- trav = trav->next;
- }
-
- return TRUE;
-}
-
-/*
-<attribute
- default = string
- fixed = string
- form = (qualified | unqualified)
- id = ID
- name = NCName
- ref = QName
- type = QName
- use = (optional | prohibited | required) : optional
- {any attributes with non-schema namespace . . .}>
- Content: (annotation?, (simpleType?))
-</attribute>
-*/
-static int schema_attribute(sdlPtr sdl, xmlAttrPtr tns, xmlNodePtr attrType, sdlTypePtr cur_type, sdlCtx *ctx)
-{
- sdlAttributePtr newAttr;
- xmlAttrPtr attr, name, ref = NULL, type = NULL;
- xmlNodePtr trav;
-
- name = get_attribute(attrType->properties, "name");
- if (name == NULL) {
- name = ref = get_attribute(attrType->properties, "ref");
- }
- if (name) {
- HashTable *addHash;
- smart_str key = {0};
-
- newAttr = emalloc(sizeof(sdlAttribute));
- memset(newAttr, 0, sizeof(sdlAttribute));
-
- if (ref) {
- char *attr_name, *ns;
- xmlNsPtr nsptr;
-
- parse_namespace(ref->children->content, &attr_name, &ns);
- nsptr = xmlSearchNs(attrType->doc, attrType, ns);
- if (nsptr != NULL) {
- smart_str_appends(&key, nsptr->href);
- smart_str_appendc(&key, ':');
- newAttr->namens = estrdup(nsptr->href);
- }
- smart_str_appends(&key, attr_name);
- smart_str_0(&key);
- newAttr->ref = estrdup(key.c);
- if (attr_name) {efree(attr_name);}
- if (ns) {efree(ns);}
- } else {
- xmlAttrPtr ns;
-
- ns = get_attribute(attrType->properties, "targetNamespace");
- if (ns == NULL) {
- ns = tns;
- }
- if (ns != NULL) {
- smart_str_appends(&key, ns->children->content);
- smart_str_appendc(&key, ':');
- newAttr->namens = estrdup(ns->children->content);
- }
- smart_str_appends(&key, name->children->content);
- smart_str_0(&key);
- }
-
- if (cur_type == NULL) {
- addHash = ctx->attributes;
- } else {
- if (cur_type->attributes == NULL) {
- cur_type->attributes = emalloc(sizeof(HashTable));
- zend_hash_init(cur_type->attributes, 0, NULL, delete_attribute, 0);
- }
- addHash = cur_type->attributes;
- }
-
- if (zend_hash_add(addHash, key.c, key.len + 1, &newAttr, sizeof(sdlAttributePtr), NULL) != SUCCESS) {
- soap_error1(E_ERROR, "Parsing Schema: attribute '%s' already defined", key.c);
- }
- smart_str_free(&key);
- } else{
- soap_error0(E_ERROR, "Parsing Schema: attribute has no 'name' nor 'ref' attributes");
- }
-
- /* type = QName */
- type = get_attribute(attrType->properties, "type");
- if (type) {
- char *cptype, *str_ns;
- xmlNsPtr nsptr;
-
- if (ref != NULL) {
- soap_error0(E_ERROR, "Parsing Schema: attribute has both 'ref' and 'type' attributes");
- }
- parse_namespace(type->children->content, &cptype, &str_ns);
- nsptr = xmlSearchNs(attrType->doc, attrType, str_ns);
- if (nsptr != NULL) {
- newAttr->encode = get_create_encoder(sdl, cur_type, (char *)nsptr->href, (char *)cptype);
- }
- if (str_ns) {efree(str_ns);}
- if (cptype) {efree(cptype);}
- }
-
- attr = attrType->properties;
- while (attr != NULL) {
- if (attr_is_equal_ex(attr, "default", SCHEMA_NAMESPACE)) {
- newAttr->def = estrdup(attr->children->content);
- } else if (attr_is_equal_ex(attr, "fixed", SCHEMA_NAMESPACE)) {
- newAttr->fixed = estrdup(attr->children->content);
- } else if (attr_is_equal_ex(attr, "form", SCHEMA_NAMESPACE)) {
- if (strncmp(attr->children->content,"qualified",sizeof("qualified")) == 0) {
- newAttr->form = XSD_FORM_QUALIFIED;
- } else if (strncmp(attr->children->content,"unqualified",sizeof("unqualified")) == 0) {
- newAttr->form = XSD_FORM_UNQUALIFIED;
- } else {
- newAttr->form = XSD_FORM_DEFAULT;
- }
- } else if (attr_is_equal_ex(attr, "id", SCHEMA_NAMESPACE)) {
- /* skip */
- } else if (attr_is_equal_ex(attr, "name", SCHEMA_NAMESPACE)) {
- newAttr->name = estrdup(attr->children->content);
- } else if (attr_is_equal_ex(attr, "ref", SCHEMA_NAMESPACE)) {
- /* already processed */
- } else if (attr_is_equal_ex(attr, "type", SCHEMA_NAMESPACE)) {
- /* already processed */
- } else if (attr_is_equal_ex(attr, "use", SCHEMA_NAMESPACE)) {
- if (strncmp(attr->children->content,"prohibited",sizeof("prohibited")) == 0) {
- newAttr->use = XSD_USE_PROHIBITED;
- } else if (strncmp(attr->children->content,"required",sizeof("required")) == 0) {
- newAttr->use = XSD_USE_REQUIRED;
- } else if (strncmp(attr->children->content,"optional",sizeof("optional")) == 0) {
- newAttr->use = XSD_USE_OPTIONAL;
- } else {
- newAttr->use = XSD_USE_DEFAULT;
- }
- } else {
- xmlNsPtr nsPtr = attr_find_ns(attr);
-
- if (strncmp(nsPtr->href, SCHEMA_NAMESPACE, sizeof(SCHEMA_NAMESPACE))) {
- smart_str key2 = {0};
- sdlExtraAttributePtr ext;
- xmlNsPtr nsptr;
- char *value, *ns;
-
- ext = emalloc(sizeof(sdlExtraAttribute));
- memset(ext, 0, sizeof(sdlExtraAttribute));
- parse_namespace(attr->children->content, &value, &ns);
- nsptr = xmlSearchNs(attr->doc, attr->parent, ns);
- if (nsptr) {
- ext->ns = estrdup(nsptr->href);
- ext->val = estrdup(value);
- } else {
- ext->val = estrdup(attr->children->content);
- }
- if (ns) {efree(ns);}
- efree(value);
-
- if (!newAttr->extraAttributes) {
- newAttr->extraAttributes = emalloc(sizeof(HashTable));
- zend_hash_init(newAttr->extraAttributes, 0, NULL, delete_extra_attribute, 0);
- }
-
- smart_str_appends(&key2, nsPtr->href);
- smart_str_appendc(&key2, ':');
- smart_str_appends(&key2, attr->name);
- smart_str_0(&key2);
- zend_hash_add(newAttr->extraAttributes, key2.c, key2.len + 1, &ext, sizeof(sdlExtraAttributePtr), NULL);
- smart_str_free(&key2);
- }
- }
- attr = attr->next;
- }
-
- trav = attrType->children;
- if (trav != NULL && node_is_equal(trav, "annotation")) {
- /* TODO: <annotation> support */
- trav = trav->next;
- }
- if (trav != NULL) {
- if (node_is_equal(trav,"simpleType")) {
- sdlTypePtr dummy_type;
- if (ref != NULL) {
- soap_error0(E_ERROR, "Parsing Schema: attribute has both 'ref' attribute and subtype");
- } else if (type != NULL) {
- soap_error0(E_ERROR, "Parsing Schema: attribute has both 'type' attribute and subtype");
- }
- dummy_type = emalloc(sizeof(sdlType));
- memset(dummy_type, 0, sizeof(sdlType));
- dummy_type->name = estrdup("anonymous");
- dummy_type->namens = estrdup(tns->children->content);
- schema_simpleType(sdl, tns, trav, dummy_type);
- newAttr->encode = dummy_type->encode;
- delete_type(&dummy_type);
- trav = trav->next;
- }
- }
- if (trav != NULL) {
- soap_error1(E_ERROR, "Parsing Schema: unexpected <%s> in attribute", trav->name);
- }
- return TRUE;
-}
-
-static int schema_attributeGroup(sdlPtr sdl, xmlAttrPtr tns, xmlNodePtr attrGroup, sdlTypePtr cur_type, sdlCtx *ctx)
-{
- xmlNodePtr trav;
- xmlAttrPtr name, ref = NULL;
-
-
- name = get_attribute(attrGroup->properties, "name");
- if (name == NULL) {
- name = ref = get_attribute(attrGroup->properties, "ref");
- }
- if (name) {
- if (cur_type == NULL) {
- xmlAttrPtr ns;
- sdlTypePtr newType;
- smart_str key = {0};
-
- ns = get_attribute(attrGroup->properties, "targetNamespace");
- if (ns == NULL) {
- ns = tns;
- }
- newType = emalloc(sizeof(sdlType));
- memset(newType, 0, sizeof(sdlType));
- newType->name = estrdup(name->children->content);
- newType->namens = estrdup(ns->children->content);
-
- smart_str_appends(&key, newType->namens);
- smart_str_appendc(&key, ':');
- smart_str_appends(&key, newType->name);
- smart_str_0(&key);
-
- if (zend_hash_add(ctx->attributeGroups, key.c, key.len + 1, &newType, sizeof(sdlTypePtr), NULL) != SUCCESS) {
- soap_error1(E_ERROR, "Parsing Schema: attributeGroup '%s' already defined", key.c);
- }
- cur_type = newType;
- smart_str_free(&key);
- } else if (ref) {
- sdlAttributePtr newAttr;
- char *group_name, *ns;
- smart_str key = {0};
- xmlNsPtr nsptr;
-
- if (cur_type->attributes == NULL) {
- cur_type->attributes = emalloc(sizeof(HashTable));
- zend_hash_init(cur_type->attributes, 0, NULL, delete_attribute, 0);
- }
- newAttr = emalloc(sizeof(sdlAttribute));
- memset(newAttr, 0, sizeof(sdlAttribute));
-
- parse_namespace(ref->children->content, &group_name, &ns);
- nsptr = xmlSearchNs(attrGroup->doc, attrGroup, ns);
- if (nsptr != NULL) {
- smart_str_appends(&key, nsptr->href);
- smart_str_appendc(&key, ':');
- }
- smart_str_appends(&key, group_name);
- smart_str_0(&key);
- newAttr->ref = estrdup(key.c);
- if (group_name) {efree(group_name);}
- if (ns) {efree(ns);}
- smart_str_free(&key);
-
- zend_hash_next_index_insert(cur_type->attributes, &newAttr, sizeof(sdlAttributePtr), NULL);
- cur_type = NULL;
- }
- } else{
- soap_error0(E_ERROR, "Parsing Schema: attributeGroup has no 'name' nor 'ref' attributes");
- }
-
- trav = attrGroup->children;
- if (trav != NULL && node_is_equal(trav, "annotation")) {
- /* TODO: <annotation> support */
- trav = trav->next;
- }
- while (trav != NULL) {
- if (node_is_equal(trav,"attribute")) {
- if (ref != NULL) {
- soap_error0(E_ERROR, "Parsing Schema: attributeGroup has both 'ref' attribute and subattribute");
- }
- schema_attribute(sdl, tns, trav, cur_type, NULL);
- } else if (node_is_equal(trav,"attributeGroup")) {
- if (ref != NULL) {
- soap_error0(E_ERROR, "Parsing Schema: attributeGroup has both 'ref' attribute and subattribute");
- }
- schema_attributeGroup(sdl, tns, trav, cur_type, NULL);
- } else if (node_is_equal(trav,"anyAttribute")) {
- if (ref != NULL) {
- soap_error0(E_ERROR, "Parsing Schema: attributeGroup has both 'ref' attribute and subattribute");
- }
- /* TODO: <anyAttribute> support */
- trav = trav->next;
- break;
- } else {
- soap_error1(E_ERROR, "Parsing Schema: unexpected <%s> in attributeGroup", trav->name);
- }
- trav = trav->next;
- }
- if (trav != NULL) {
- soap_error1(E_ERROR, "Parsing Schema: unexpected <%s> in attributeGroup", trav->name);
- }
- return TRUE;
-}
-
-static void copy_extra_attribute(void *attribute)
-{
- sdlExtraAttributePtr *attr = (sdlExtraAttributePtr*)attribute;
- sdlExtraAttributePtr new_attr;
-
- new_attr = emalloc(sizeof(sdlExtraAttribute));
- memcpy(new_attr, *attr, sizeof(sdlExtraAttribute));
- *attr = new_attr;
- if (new_attr->ns) {
- new_attr->ns = estrdup(new_attr->ns);
- }
- if (new_attr->val) {
- new_attr->val = estrdup(new_attr->val);
- }
-}
-
-static void schema_attribute_fixup(sdlCtx *ctx, sdlAttributePtr attr)
-{
- sdlAttributePtr *tmp;
-
- if (attr->ref != NULL) {
- if (ctx->attributes != NULL) {
- if (zend_hash_find(ctx->attributes, attr->ref, strlen(attr->ref)+1, (void**)&tmp) == SUCCESS) {
- schema_attribute_fixup(ctx, *tmp);
- if ((*tmp)->name != NULL && attr->name == NULL) {
- attr->name = estrdup((*tmp)->name);
- }
- if ((*tmp)->namens != NULL && attr->namens == NULL) {
- attr->namens = estrdup((*tmp)->namens);
- }
- if ((*tmp)->def != NULL && attr->def == NULL) {
- attr->def = estrdup((*tmp)->def);
- }
- if ((*tmp)->fixed != NULL && attr->fixed == NULL) {
- attr->fixed = estrdup((*tmp)->fixed);
- }
- if (attr->form == XSD_FORM_DEFAULT) {
- attr->form = (*tmp)->form;
- }
- if (attr->use == XSD_USE_DEFAULT) {
- attr->use = (*tmp)->use;
- }
- if ((*tmp)->extraAttributes != NULL) {
- xmlNodePtr node;
-
- attr->extraAttributes = emalloc(sizeof(HashTable));
- zend_hash_init(attr->extraAttributes, 0, NULL, delete_extra_attribute, 0);
- zend_hash_copy(attr->extraAttributes, (*tmp)->extraAttributes, copy_extra_attribute, &node, sizeof(xmlNodePtr));
- }
- attr->encode = (*tmp)->encode;
- }
- }
- if (attr->name == NULL && attr->ref != NULL) {
- char *name = strrchr(attr->ref, ':');
- if (*name) {
- attr->name = estrdup(name+1);
- } else{
- attr->name = estrdup(attr->ref);
- }
- }
- efree(attr->ref);
- attr->ref = NULL;
- }
-}
-
-static void schema_attributegroup_fixup(sdlCtx *ctx, sdlAttributePtr attr, HashTable *ht)
-{
- sdlTypePtr *tmp;
- sdlAttributePtr *tmp_attr;
-
- if (attr->ref != NULL) {
- if (ctx->attributeGroups != NULL) {
- if (zend_hash_find(ctx->attributeGroups, attr->ref, strlen(attr->ref)+1, (void**)&tmp) == SUCCESS) {
- if ((*tmp)->attributes) {
- zend_hash_internal_pointer_reset((*tmp)->attributes);
- while (zend_hash_get_current_data((*tmp)->attributes,(void**)&tmp_attr) == SUCCESS) {
- if (zend_hash_get_current_key_type((*tmp)->attributes) == HASH_KEY_IS_STRING) {
- char* key;
- uint key_len;
- sdlAttributePtr newAttr;
-
- schema_attribute_fixup(ctx,*tmp_attr);
-
- newAttr = emalloc(sizeof(sdlAttribute));
- memcpy(newAttr, *tmp_attr, sizeof(sdlAttribute));
- if (newAttr->def) {newAttr->def = estrdup(newAttr->def);}
- if (newAttr->fixed) {newAttr->fixed = estrdup(newAttr->fixed);}
- if (newAttr->namens) {newAttr->namens = estrdup(newAttr->namens);}
- if (newAttr->name) {newAttr->name = estrdup(newAttr->name);}
- if (newAttr->extraAttributes) {
- xmlNodePtr node;
- HashTable *ht = emalloc(sizeof(HashTable));
- zend_hash_init(ht, 0, NULL, delete_extra_attribute, 0);
- zend_hash_copy(ht, newAttr->extraAttributes, copy_extra_attribute, &node, sizeof(xmlNodePtr));
- newAttr->extraAttributes = ht;
- }
-
- zend_hash_get_current_key_ex((*tmp)->attributes, &key, &key_len, NULL, 0, NULL);
- zend_hash_add(ht, key, key_len, &newAttr, sizeof(sdlAttributePtr), NULL);
-
- zend_hash_move_forward((*tmp)->attributes);
- } else {
- ulong index;
-
- schema_attributegroup_fixup(ctx,*tmp_attr, ht);
- zend_hash_get_current_key((*tmp)->attributes, NULL, &index, 0);
- zend_hash_index_del((*tmp)->attributes, index);
- }
- }
- }
- }
- }
- efree(attr->ref);
- attr->ref = NULL;
- }
-}
-
-static void schema_content_model_fixup(sdlCtx *ctx, sdlContentModelPtr model)
-{
- switch (model->kind) {
- case XSD_CONTENT_GROUP_REF: {
- sdlTypePtr *tmp;
-
- if (ctx->sdl->groups && zend_hash_find(ctx->sdl->groups, model->u.group_ref, strlen(model->u.group_ref)+1, (void**)&tmp) == SUCCESS) {
- schema_type_fixup(ctx,*tmp);
- efree(model->u.group_ref);
- model->kind = XSD_CONTENT_GROUP;
- model->u.group = (*tmp);
- } else {
- soap_error0(E_ERROR, "Parsing Schema: unresolved group 'ref' attribute");
- }
- break;
- }
- case XSD_CONTENT_SEQUENCE:
- case XSD_CONTENT_ALL:
- case XSD_CONTENT_CHOICE: {
- sdlContentModelPtr *tmp;
-
- zend_hash_internal_pointer_reset(model->u.content);
- while (zend_hash_get_current_data(model->u.content, (void**)&tmp) == SUCCESS) {
- schema_content_model_fixup(ctx, *tmp);
- zend_hash_move_forward(model->u.content);
- }
- break;
- }
- default:
- break;
- }
-}
-
-static void schema_type_fixup(sdlCtx *ctx, sdlTypePtr type)
-{
- sdlTypePtr *tmp;
- sdlAttributePtr *attr;
-
- if (type->ref != NULL) {
- if (ctx->sdl->elements != NULL) {
- if (zend_hash_find(ctx->sdl->elements, type->ref, strlen(type->ref)+1, (void**)&tmp) == SUCCESS) {
- type->kind = (*tmp)->kind;
- type->encode = (*tmp)->encode;
- if ((*tmp)->nillable) {
- type->nillable = 1;
- }
- if ((*tmp)->fixed) {
- type->fixed = estrdup((*tmp)->fixed);
- }
- if ((*tmp)->def) {
- type->def = estrdup((*tmp)->def);
- }
- } else {
- soap_error0(E_ERROR, "Parsing Schema: unresolved element 'ref' attribute");
- }
- }
- efree(type->ref);
- type->ref = NULL;
- }
- if (type->elements) {
- zend_hash_internal_pointer_reset(type->elements);
- while (zend_hash_get_current_data(type->elements,(void**)&tmp) == SUCCESS) {
- schema_type_fixup(ctx,*tmp);
- zend_hash_move_forward(type->elements);
- }
- }
- if (type->model) {
- schema_content_model_fixup(ctx, type->model);
- }
- if (type->attributes) {
- zend_hash_internal_pointer_reset(type->attributes);
- while (zend_hash_get_current_data(type->attributes,(void**)&attr) == SUCCESS) {
- if (zend_hash_get_current_key_type(type->attributes) == HASH_KEY_IS_STRING) {
- schema_attribute_fixup(ctx,*attr);
- zend_hash_move_forward(type->attributes);
- } else {
- ulong index;
-
- schema_attributegroup_fixup(ctx,*attr,type->attributes);
- zend_hash_get_current_key(type->attributes, NULL, &index, 0);
- zend_hash_index_del(type->attributes, index);
- }
- }
- }
-}
-
-void schema_pass2(sdlCtx *ctx)
-{
- sdlPtr sdl = ctx->sdl;
- sdlAttributePtr *attr;
- sdlTypePtr *type;
-
- if (ctx->attributes) {
- zend_hash_internal_pointer_reset(ctx->attributes);
- while (zend_hash_get_current_data(ctx->attributes,(void**)&attr) == SUCCESS) {
- schema_attribute_fixup(ctx,*attr);
- zend_hash_move_forward(ctx->attributes);
- }
- }
- if (ctx->attributeGroups) {
- zend_hash_internal_pointer_reset(ctx->attributeGroups);
- while (zend_hash_get_current_data(ctx->attributeGroups,(void**)&type) == SUCCESS) {
- schema_type_fixup(ctx,*type);
- zend_hash_move_forward(ctx->attributeGroups);
- }
- }
- if (sdl->elements) {
- zend_hash_internal_pointer_reset(sdl->elements);
- while (zend_hash_get_current_data(sdl->elements,(void**)&type) == SUCCESS) {
- schema_type_fixup(ctx,*type);
- zend_hash_move_forward(sdl->elements);
- }
- }
- if (sdl->groups) {
- zend_hash_internal_pointer_reset(sdl->groups);
- while (zend_hash_get_current_data(sdl->groups,(void**)&type) == SUCCESS) {
- schema_type_fixup(ctx,*type);
- zend_hash_move_forward(sdl->groups);
- }
- }
- if (sdl->types) {
- zend_hash_internal_pointer_reset(sdl->types);
- while (zend_hash_get_current_data(sdl->types,(void**)&type) == SUCCESS) {
- schema_type_fixup(ctx,*type);
- zend_hash_move_forward(sdl->types);
- }
- }
- if (ctx->attributes) {
- zend_hash_destroy(ctx->attributes);
- efree(ctx->attributes);
- }
- if (ctx->attributeGroups) {
- zend_hash_destroy(ctx->attributeGroups);
- efree(ctx->attributeGroups);
- }
-}
-
-void delete_model(void *handle)
-{
- sdlContentModelPtr tmp = *((sdlContentModelPtr*)handle);
- switch (tmp->kind) {
- case XSD_CONTENT_ELEMENT:
- case XSD_CONTENT_GROUP:
- break;
- case XSD_CONTENT_SEQUENCE:
- case XSD_CONTENT_ALL:
- case XSD_CONTENT_CHOICE:
- zend_hash_destroy(tmp->u.content);
- efree(tmp->u.content);
- break;
- case XSD_CONTENT_GROUP_REF:
- efree(tmp->u.group_ref);
- break;
- }
- efree(tmp);
-}
-
-void delete_type(void *data)
-{
- sdlTypePtr type = *((sdlTypePtr*)data);
- if (type->name) {
- efree(type->name);
- }
- if (type->namens) {
- efree(type->namens);
- }
- if (type->def) {
- efree(type->def);
- }
- if (type->fixed) {
- efree(type->fixed);
- }
- if (type->elements) {
- zend_hash_destroy(type->elements);
- efree(type->elements);
- }
- if (type->attributes) {
- zend_hash_destroy(type->attributes);
- efree(type->attributes);
- }
- if (type->model) {
- delete_model((void**)&type->model);
- }
- if (type->restrictions) {
- delete_restriction_var_int(&type->restrictions->minExclusive);
- delete_restriction_var_int(&type->restrictions->minInclusive);
- delete_restriction_var_int(&type->restrictions->maxExclusive);
- delete_restriction_var_int(&type->restrictions->maxInclusive);
- delete_restriction_var_int(&type->restrictions->totalDigits);
- delete_restriction_var_int(&type->restrictions->fractionDigits);
- delete_restriction_var_int(&type->restrictions->length);
- delete_restriction_var_int(&type->restrictions->minLength);
- delete_restriction_var_int(&type->restrictions->maxLength);
- delete_restriction_var_char(&type->restrictions->whiteSpace);
- delete_restriction_var_char(&type->restrictions->pattern);
- if (type->restrictions->enumeration) {
- zend_hash_destroy(type->restrictions->enumeration);
- efree(type->restrictions->enumeration);
- }
- efree(type->restrictions);
- }
- efree(type);
-}
-
-void delete_extra_attribute(void *attribute)
-{
- sdlExtraAttributePtr attr = *((sdlExtraAttributePtr*)attribute);
-
- if (attr->ns) {
- efree(attr->ns);
- }
- if (attr->val) {
- efree(attr->val);
- }
- efree(attr);
-}
-
-void delete_attribute(void *attribute)
-{
- sdlAttributePtr attr = *((sdlAttributePtr*)attribute);
-
- if (attr->def) {
- efree(attr->def);
- }
- if (attr->fixed) {
- efree(attr->fixed);
- }
- if (attr->name) {
- efree(attr->name);
- }
- if (attr->namens) {
- efree(attr->namens);
- }
- if (attr->ref) {
- efree(attr->ref);
- }
- if (attr->extraAttributes) {
- zend_hash_destroy(attr->extraAttributes);
- efree(attr->extraAttributes);
- }
- efree(attr);
-}
-
-void delete_restriction_var_int(void *rvi)
-{
- sdlRestrictionIntPtr ptr = *((sdlRestrictionIntPtr*)rvi);
- if (ptr) {
- efree(ptr);
- }
-}
-
-void delete_restriction_var_char(void *srvc)
-{
- sdlRestrictionCharPtr ptr = *((sdlRestrictionCharPtr*)srvc);
- if (ptr) {
- if (ptr->value) {
- efree(ptr->value);
- }
- efree(ptr);
- }
-}
diff --git a/ext/soap/php_schema.h b/ext/soap/php_schema.h
deleted file mode 100644
index 9101725df3..0000000000
--- a/ext/soap/php_schema.h
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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. |
- +----------------------------------------------------------------------+
- | Authors: Brad Lafountain <rodif_bl@yahoo.com> |
- | Shane Caraveo <shane@caraveo.com> |
- | Dmitry Stogov <dmitry@zend.com> |
- +----------------------------------------------------------------------+
-*/
-/* $Id$ */
-
-#ifndef PHP_SCHEMA_H
-#define PHP_SCHEMA_H
-
-int load_schema(sdlCtx *ctx, xmlNodePtr schema);
-void schema_pass2(sdlCtx *ctx);
-
-void delete_model(void *handle);
-void delete_type(void *data);
-void delete_extra_attribute(void *attribute);
-void delete_attribute(void *attribute);
-void delete_restriction_var_int(void *rvi);
-void delete_restriction_var_char(void *srvc);
-#endif
diff --git a/ext/soap/php_sdl.c b/ext/soap/php_sdl.c
deleted file mode 100644
index 05237969bc..0000000000
--- a/ext/soap/php_sdl.c
+++ /dev/null
@@ -1,2377 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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. |
- +----------------------------------------------------------------------+
- | Authors: Brad Lafountain <rodif_bl@yahoo.com> |
- | Shane Caraveo <shane@caraveo.com> |
- | Dmitry Stogov <dmitry@zend.com> |
- +----------------------------------------------------------------------+
-*/
-/* $Id$ */
-
-#include "php_soap.h"
-#include "libxml/uri.h"
-
-#include "ext/standard/md5.h"
-#include "tsrm_virtual_cwd.h"
-
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <fcntl.h>
-
-#ifndef O_BINARY
-# define O_BINARY 0
-#endif
-
-static void delete_fault(void *fault);
-static void delete_binding(void *binding);
-static void delete_function(void *function);
-static void delete_parameter(void *paramater);
-static void delete_header(void *header);
-static void delete_document(void *doc_ptr);
-
-encodePtr get_encoder_from_prefix(sdlPtr sdl, xmlNodePtr node, const char *type)
-{
- encodePtr enc = NULL;
- xmlNsPtr nsptr;
- char *ns, *cptype;
-
- parse_namespace(type, &cptype, &ns);
- nsptr = xmlSearchNs(node->doc, node, ns);
- if (nsptr != NULL) {
- int ns_len = strlen(nsptr->href);
- int type_len = strlen(cptype);
- int len = ns_len + type_len + 1;
- char *nscat = emalloc(len + 1);
-
- memcpy(nscat, nsptr->href, ns_len);
- nscat[ns_len] = ':';
- memcpy(nscat+ns_len+1, cptype, type_len);
- nscat[len] = '\0';
-
- enc = get_encoder_ex(sdl, nscat, len);
- if (enc == NULL) {
- enc = get_encoder_ex(sdl, type, type_len);
- }
- efree(nscat);
- } else {
- enc = get_encoder_ex(sdl, type, strlen(type));
- }
- efree(cptype);
- if (ns) {efree(ns);}
- return enc;
-}
-
-static sdlTypePtr get_element(sdlPtr sdl, xmlNodePtr node, const char *type)
-{
- sdlTypePtr ret = NULL;
- TSRMLS_FETCH();
-
- if (sdl->elements) {
- xmlNsPtr nsptr;
- char *ns, *cptype;
- sdlTypePtr *sdl_type;
-
- parse_namespace(type, &cptype, &ns);
- nsptr = xmlSearchNs(node->doc, node, ns);
- if (nsptr != NULL) {
- int ns_len = strlen(nsptr->href);
- int type_len = strlen(cptype);
- int len = ns_len + type_len + 1;
- char *nscat = emalloc(len + 1);
-
- memcpy(nscat, nsptr->href, ns_len);
- nscat[ns_len] = ':';
- memcpy(nscat+ns_len+1, cptype, type_len);
- nscat[len] = '\0';
-
- if (zend_hash_find(sdl->elements, nscat, len + 1, (void **)&sdl_type) == SUCCESS) {
- ret = *sdl_type;
- } else if (zend_hash_find(sdl->elements, (char*)type, type_len + 1, (void **)&sdl_type) == SUCCESS) {
- ret = *sdl_type;
- }
- efree(nscat);
- } else {
- if (zend_hash_find(sdl->elements, (char*)type, strlen(type) + 1, (void **)&sdl_type) == SUCCESS) {
- ret = *sdl_type;
- }
- }
-
- efree(cptype);
- if (ns) {efree(ns);}
- }
- return ret;
-}
-
-encodePtr get_encoder(sdlPtr sdl, const char *ns, const char *type)
-{
- encodePtr enc = NULL;
- char *nscat;
- int ns_len = strlen(ns);
- int type_len = strlen(type);
- int len = ns_len + type_len + 1;
-
- nscat = emalloc(len + 1);
- memcpy(nscat, ns, ns_len);
- nscat[ns_len] = ':';
- memcpy(nscat+ns_len+1, type, type_len);
- nscat[len] = '\0';
-
- enc = get_encoder_ex(sdl, nscat, len);
-
- efree(nscat);
- return enc;
-}
-
-encodePtr get_encoder_ex(sdlPtr sdl, const char *nscat, int len)
-{
- encodePtr *enc;
- TSRMLS_FETCH();
-
- if (zend_hash_find(&SOAP_GLOBAL(defEnc), (char*)nscat, len + 1, (void **)&enc) == SUCCESS) {
- return (*enc);
- } else if (sdl && sdl->encoders && zend_hash_find(sdl->encoders, (char*)nscat, len + 1, (void **)&enc) == SUCCESS) {
- return (*enc);
- }
- return NULL;
-}
-
-sdlBindingPtr get_binding_from_type(sdlPtr sdl, int type)
-{
- sdlBindingPtr *binding;
-
- if (sdl == NULL) {
- return NULL;
- }
-
- for (zend_hash_internal_pointer_reset(sdl->bindings);
- zend_hash_get_current_data(sdl->bindings, (void **) &binding) == SUCCESS;
- zend_hash_move_forward(sdl->bindings)) {
- if ((*binding)->bindingType == type) {
- return *binding;
- }
- }
- return NULL;
-}
-
-sdlBindingPtr get_binding_from_name(sdlPtr sdl, char *name, char *ns)
-{
- sdlBindingPtr binding = NULL;
- smart_str key = {0};
-
- smart_str_appends(&key, ns);
- smart_str_appendc(&key, ':');
- smart_str_appends(&key, name);
- smart_str_0(&key);
-
- zend_hash_find(sdl->bindings, key.c, key.len, (void **)&binding);
-
- smart_str_free(&key);
- return binding;
-}
-
-static int is_wsdl_element(xmlNodePtr node)
-{
- if (node->ns && strcmp(node->ns->href,WSDL_NAMESPACE) != 0) {
- xmlAttrPtr attr;
- if ((attr = get_attribute_ex(node->properties, "required", WSDL_NAMESPACE)) != NULL &&
- attr->children && attr->children->content &&
- (strcmp(attr->children->content,"1") == 0 ||
- strcmp(attr->children->content,"true") == 0)) {
- soap_error1(E_ERROR, "Parsing WSDL: Unknown required WSDL extension '%s'", node->ns->href);
- }
- return 0;
- }
- return 1;
-}
-
-static void load_wsdl_ex(char *struri, sdlCtx *ctx, int include)
-{
- sdlPtr tmpsdl = ctx->sdl;
- xmlDocPtr wsdl;
- xmlNodePtr root, definitions, trav;
- xmlAttrPtr targetNamespace;
-
- if (zend_hash_exists(&ctx->docs, struri, strlen(struri)+1)) {
- return;
- }
-
- wsdl = soap_xmlParseFile(struri);
-
- if (!wsdl) {
- 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);
-
- root = wsdl->children;
- definitions = get_node_ex(root, "definitions", WSDL_NAMESPACE);
- if (!definitions) {
- if (include) {
- xmlNodePtr schema = get_node_ex(root, "schema", XSD_NAMESPACE);
- if (schema) {
- load_schema(ctx, schema);
- return;
- }
- }
- soap_error1(E_ERROR, "Parsing WSDL: Couldn't find <definitions> in '%s'", struri);
- }
-
- if (!include) {
- targetNamespace = get_attribute(definitions->properties, "targetNamespace");
- if (targetNamespace) {
- tmpsdl->target_ns = estrdup(targetNamespace->children->content);
- }
- }
-
- trav = definitions->children;
- while (trav != NULL) {
- if (!is_wsdl_element(trav)) {
- trav = trav->next;
- continue;
- }
- if (node_is_equal(trav,"types")) {
- /* TODO: Only one "types" is allowed */
- xmlNodePtr trav2 = trav->children;
-
- while (trav2 != NULL) {
- if (node_is_equal_ex(trav2, "schema", XSD_NAMESPACE)) {
- load_schema(ctx, trav2);
- } else if (is_wsdl_element(trav2) && !node_is_equal(trav2,"documentation")) {
- soap_error1(E_ERROR, "Parsing WSDL: Unexpected WSDL element <%s>", trav2->name);
- }
- trav2 = trav2->next;
- }
- } else if (node_is_equal(trav,"import")) {
- /* TODO: namespace ??? */
- xmlAttrPtr tmp = get_attribute(trav->properties, "location");
- if (tmp) {
- xmlChar *uri;
- xmlChar *base = xmlNodeGetBase(trav->doc, trav);
-
- if (base == NULL) {
- uri = xmlBuildURI(tmp->children->content, trav->doc->URL);
- } else {
- uri = xmlBuildURI(tmp->children->content, base);
- xmlFree(base);
- }
- load_wsdl_ex(uri, ctx, 1);
- xmlFree(uri);
- }
-
- } else if (node_is_equal(trav,"message")) {
- xmlAttrPtr name = get_attribute(trav->properties, "name");
- if (name && name->children && name->children->content) {
- if (zend_hash_add(&ctx->messages, name->children->content, strlen(name->children->content)+1,&trav, sizeof(xmlNodePtr), NULL) != SUCCESS) {
- soap_error1(E_ERROR, "Parsing WSDL: <message> '%s' already defined", name->children->content);
- }
- } else {
- soap_error0(E_ERROR, "Parsing WSDL: <message> hasn't name attribute");
- }
-
- } else if (node_is_equal(trav,"portType")) {
- xmlAttrPtr name = get_attribute(trav->properties, "name");
- if (name && name->children && name->children->content) {
- if (zend_hash_add(&ctx->portTypes, name->children->content, strlen(name->children->content)+1,&trav, sizeof(xmlNodePtr), NULL) != SUCCESS) {
- soap_error1(E_ERROR, "Parsing WSDL: <portType> '%s' already defined", name->children->content);
- }
- } else {
- soap_error0(E_ERROR, "Parsing WSDL: <portType> hasn't name attribute");
- }
-
- } else if (node_is_equal(trav,"binding")) {
- xmlAttrPtr name = get_attribute(trav->properties, "name");
- if (name && name->children && name->children->content) {
- if (zend_hash_add(&ctx->bindings, name->children->content, strlen(name->children->content)+1,&trav, sizeof(xmlNodePtr), NULL) != SUCCESS) {
- soap_error1(E_ERROR, "Parsing WSDL: <binding> '%s' already defined", name->children->content);
- }
- } else {
- soap_error0(E_ERROR, "Parsing WSDL: <binding> hasn't name attribute");
- }
-
- } else if (node_is_equal(trav,"service")) {
- xmlAttrPtr name = get_attribute(trav->properties, "name");
- if (name && name->children && name->children->content) {
- if (zend_hash_add(&ctx->services, name->children->content, strlen(name->children->content)+1,&trav, sizeof(xmlNodePtr), NULL) != SUCCESS) {
- soap_error1(E_ERROR, "Parsing WSDL: <service> '%s' already defined", name->children->content);
- }
- } else {
- soap_error0(E_ERROR, "Parsing WSDL: <service> hasn't name attribute");
- }
- } else if (!node_is_equal(trav,"documentation")) {
- soap_error1(E_ERROR, "Parsing WSDL: Unexpected WSDL element <%s>", trav->name);
- }
- trav = trav->next;
- }
-}
-
-static sdlSoapBindingFunctionHeaderPtr wsdl_soap_binding_header(sdlCtx* ctx, xmlNodePtr header, char* wsdl_soap_namespace, int fault)
-{
- xmlAttrPtr tmp;
- xmlNodePtr *message, part;
- char *ctype;
- sdlSoapBindingFunctionHeaderPtr h;
-
- tmp = get_attribute(header->properties, "message");
- if (!tmp) {
- soap_error0(E_ERROR, "Parsing WSDL: Missing message attribute for <header>");
- }
-
- ctype = strrchr(tmp->children->content,':');
- if (ctype == NULL) {
- ctype = tmp->children->content;
- } else {
- ++ctype;
- }
- if (zend_hash_find(&ctx->messages, ctype, strlen(ctype)+1, (void**)&message) != SUCCESS) {
- soap_error1(E_ERROR, "Parsing WSDL: Missing <message> with name '%s'", tmp->children->content);
- }
-
- tmp = get_attribute(header->properties, "part");
- if (!tmp) {
- soap_error0(E_ERROR, "Parsing WSDL: Missing part attribute for <header>");
- }
- part = get_node_with_attribute_ex((*message)->children, "part", WSDL_NAMESPACE, "name", tmp->children->content, NULL);
- if (!part) {
- soap_error1(E_ERROR, "Parsing WSDL: Missing part '%s' in <message>", tmp->children->content);
- }
-
- h = emalloc(sizeof(sdlSoapBindingFunctionHeader));
- memset(h, 0, sizeof(sdlSoapBindingFunctionHeader));
- h->name = estrdup(tmp->children->content);
-
- tmp = get_attribute(header->properties, "use");
- if (tmp && !strncmp(tmp->children->content, "encoded", sizeof("encoded"))) {
- h->use = SOAP_ENCODED;
- } else {
- h->use = SOAP_LITERAL;
- }
-
- tmp = get_attribute(header->properties, "namespace");
- if (tmp) {
- h->ns = estrdup(tmp->children->content);
- }
-
- if (h->use == SOAP_ENCODED) {
- tmp = get_attribute(header->properties, "encodingStyle");
- if (tmp) {
- if (strncmp(tmp->children->content,SOAP_1_1_ENC_NAMESPACE,sizeof(SOAP_1_1_ENC_NAMESPACE)) == 0) {
- h->encodingStyle = SOAP_ENCODING_1_1;
- } else if (strncmp(tmp->children->content,SOAP_1_2_ENC_NAMESPACE,sizeof(SOAP_1_2_ENC_NAMESPACE)) == 0) {
- h->encodingStyle = SOAP_ENCODING_1_2;
- } else {
- soap_error1(E_ERROR, "Parsing WSDL: Unknown encodingStyle '%s'", tmp->children->content);
- }
- } else {
- soap_error0(E_ERROR, "Parsing WSDL: Unspecified encodingStyle");
- }
- }
-
- tmp = get_attribute(part->properties, "type");
- if (tmp != NULL) {
- h->encode = get_encoder_from_prefix(ctx->sdl, part, tmp->children->content);
- } else {
- tmp = get_attribute(part->properties, "element");
- if (tmp != NULL) {
- h->element = get_element(ctx->sdl, part, tmp->children->content);
- if (h->element) {
- h->encode = h->element->encode;
- if (!h->ns && h->element->namens) {
- h->ns = estrdup(h->element->namens);
- }
- }
- }
- }
- if (!fault) {
- xmlNodePtr trav = header->children;
- while (trav != NULL) {
- if (node_is_equal_ex(trav, "headerfault", wsdl_soap_namespace)) {
- sdlSoapBindingFunctionHeaderPtr hf = wsdl_soap_binding_header(ctx, trav, wsdl_soap_namespace, 1);
- smart_str key = {0};
-
- if (h->headerfaults == NULL) {
- h->headerfaults = emalloc(sizeof(HashTable));
- zend_hash_init(h->headerfaults, 0, NULL, delete_header, 0);
- }
-
- if (hf->ns) {
- smart_str_appends(&key,hf->ns);
- smart_str_appendc(&key,':');
- }
- smart_str_appends(&key,hf->name);
- smart_str_0(&key);
- if (zend_hash_add(h->headerfaults, key.c, key.len+1, (void**)&hf, sizeof(sdlSoapBindingFunctionHeaderPtr), NULL) != SUCCESS) {
- delete_header((void**)&hf);
- }
- smart_str_free(&key);
- } else if (is_wsdl_element(trav) && !node_is_equal(trav,"documentation")) {
- soap_error1(E_ERROR, "Parsing WSDL: Unexpected WSDL element <%s>", trav->name);
- }
- trav = trav->next;
- }
- }
- return h;
-}
-
-static void wsdl_soap_binding_body(sdlCtx* ctx, xmlNodePtr node, char* wsdl_soap_namespace, sdlSoapBindingFunctionBody *binding, HashTable* params)
-{
- xmlNodePtr body, trav;
- xmlAttrPtr tmp;
-
- trav = node->children;
- while (trav != NULL) {
- if (node_is_equal_ex(trav, "body", wsdl_soap_namespace)) {
- body = trav;
-
- tmp = get_attribute(body->properties, "use");
- if (tmp && !strncmp(tmp->children->content, "literal", sizeof("literal"))) {
- binding->use = SOAP_LITERAL;
- } else {
- binding->use = SOAP_ENCODED;
- }
-
- tmp = get_attribute(body->properties, "namespace");
- if (tmp) {
- binding->ns = estrdup(tmp->children->content);
- }
-
- tmp = get_attribute(body->properties, "parts");
- if (tmp) {
- whiteSpace_collapse(tmp->children->content);
- binding->parts = estrdup(tmp->children->content);
- }
-
- if (binding->use == SOAP_ENCODED) {
- tmp = get_attribute(body->properties, "encodingStyle");
- if (tmp) {
- if (strncmp(tmp->children->content,SOAP_1_1_ENC_NAMESPACE,sizeof(SOAP_1_1_ENC_NAMESPACE)) == 0) {
- binding->encodingStyle = SOAP_ENCODING_1_1;
- } else if (strncmp(tmp->children->content,SOAP_1_2_ENC_NAMESPACE,sizeof(SOAP_1_2_ENC_NAMESPACE)) == 0) {
- binding->encodingStyle = SOAP_ENCODING_1_2;
- } else {
- soap_error1(E_ERROR, "Parsing WSDL: Unknown encodingStyle '%s'", tmp->children->content);
- }
- } else {
- soap_error0(E_ERROR, "Parsing WSDL: Unspecified encodingStyle");
- }
- }
- } else if (node_is_equal_ex(trav, "header", wsdl_soap_namespace)) {
- sdlSoapBindingFunctionHeaderPtr h = wsdl_soap_binding_header(ctx, trav, wsdl_soap_namespace, 0);
- smart_str key = {0};
-
- if (binding->headers == NULL) {
- binding->headers = emalloc(sizeof(HashTable));
- zend_hash_init(binding->headers, 0, NULL, delete_header, 0);
- }
-
- if (h->ns) {
- smart_str_appends(&key,h->ns);
- smart_str_appendc(&key,':');
- }
- smart_str_appends(&key,h->name);
- smart_str_0(&key);
- if (zend_hash_add(binding->headers, key.c, key.len+1, (void**)&h, sizeof(sdlSoapBindingFunctionHeaderPtr), NULL) != SUCCESS) {
- delete_header((void**)&h);
- }
- smart_str_free(&key);
- } else if (is_wsdl_element(trav) && !node_is_equal(trav,"documentation")) {
- soap_error1(E_ERROR, "Parsing WSDL: Unexpected WSDL element <%s>", trav->name);
- }
- trav = trav->next;
- }
-}
-
-static HashTable* wsdl_message(sdlCtx *ctx, char* message_name)
-{
- xmlNodePtr trav, part, message = NULL, *tmp;
- HashTable* parameters = NULL;
- char *ctype;
-
- ctype = strrchr(message_name,':');
- if (ctype == NULL) {
- ctype = message_name;
- } else {
- ++ctype;
- }
- if (zend_hash_find(&ctx->messages, ctype, strlen(ctype)+1, (void**)&tmp) != SUCCESS) {
- soap_error1(E_ERROR, "Parsing WSDL: Missing <message> with name '%s'", message_name);
- }
- message = *tmp;
-
- parameters = emalloc(sizeof(HashTable));
- zend_hash_init(parameters, 0, NULL, delete_parameter, 0);
-
- trav = message->children;
- while (trav != NULL) {
- xmlAttrPtr element, type, name;
- sdlParamPtr param;
-
- if (trav->ns != NULL && strcmp(trav->ns->href,WSDL_NAMESPACE) != 0) {
- soap_error1(E_ERROR, "Parsing WSDL: Unexpected extensibility element <%s>", trav->name);
- }
- if (node_is_equal(trav,"documentation")) {
- trav = trav->next;
- continue;
- }
- if (!node_is_equal(trav,"part")) {
- soap_error1(E_ERROR, "Parsing WSDL: Unexpected WSDL element <%s>", trav->name);
- }
- part = trav;
- param = emalloc(sizeof(sdlParam));
- memset(param,0,sizeof(sdlParam));
- param->order = 0;
-
- name = get_attribute(part->properties, "name");
- if (name == NULL) {
- soap_error1(E_ERROR, "Parsing WSDL: No name associated with <part> '%s'", message->name);
- }
-
- param->paramName = estrdup(name->children->content);
-
- type = get_attribute(part->properties, "type");
- if (type != NULL) {
- param->encode = get_encoder_from_prefix(ctx->sdl, part, type->children->content);
- } else {
- element = get_attribute(part->properties, "element");
- if (element != NULL) {
- param->element = get_element(ctx->sdl, part, element->children->content);
- if (param->element) {
- param->encode = param->element->encode;
- }
- }
- }
-
- zend_hash_next_index_insert(parameters, &param, sizeof(sdlParamPtr), NULL);
-
- trav = trav->next;
- }
- return parameters;
-}
-
-static sdlPtr load_wsdl(char *struri)
-{
- sdlCtx ctx;
- int i,n;
-
- memset(&ctx,0,sizeof(ctx));
- ctx.sdl = emalloc(sizeof(sdl));
- memset(ctx.sdl, 0, sizeof(sdl));
- ctx.sdl->source = estrdup(struri);
- zend_hash_init(&ctx.sdl->functions, 0, NULL, delete_function, 0);
-
- zend_hash_init(&ctx.docs, 0, NULL, delete_document, 0);
- zend_hash_init(&ctx.messages, 0, NULL, NULL, 0);
- zend_hash_init(&ctx.bindings, 0, NULL, NULL, 0);
- zend_hash_init(&ctx.portTypes, 0, NULL, NULL, 0);
- zend_hash_init(&ctx.services, 0, NULL, NULL, 0);
-
- load_wsdl_ex(struri,&ctx, 0);
- schema_pass2(&ctx);
-
- n = zend_hash_num_elements(&ctx.services);
- if (n > 0) {
- zend_hash_internal_pointer_reset(&ctx.services);
- for (i = 0; i < n; i++) {
- xmlNodePtr *tmp, service;
- xmlNodePtr trav, port;
-
- zend_hash_get_current_data(&ctx.services, (void **)&tmp);
- service = *tmp;
-
- trav = service->children;
- while (trav != NULL) {
- xmlAttrPtr type, name, bindingAttr, location;
- xmlNodePtr portType, operation;
- xmlNodePtr address, binding, trav2;
- char *ctype;
- sdlBindingPtr tmpbinding;
- char *wsdl_soap_namespace = NULL;
-
- if (!is_wsdl_element(trav) || node_is_equal(trav,"documentation")) {
- trav = trav->next;
- continue;
- }
- if (!node_is_equal(trav,"port")) {
- soap_error1(E_ERROR, "Parsing WSDL: Unexpected WSDL element <%s>", trav->name);
- }
-
- port = trav;
-
- tmpbinding = emalloc(sizeof(sdlBinding));
- memset(tmpbinding, 0, sizeof(sdlBinding));
-
- bindingAttr = get_attribute(port->properties, "binding");
- if (bindingAttr == NULL) {
- soap_error0(E_ERROR, "Parsing WSDL: No binding associated with <port>");
- }
-
- /* find address and figure out binding type */
- address = NULL;
- trav2 = port->children;
- while (trav2 != NULL) {
- if (node_is_equal(trav2,"address") && trav2->ns) {
- if (!strncmp(trav2->ns->href, WSDL_SOAP11_NAMESPACE, sizeof(WSDL_SOAP11_NAMESPACE))) {
- address = trav2;
- wsdl_soap_namespace = WSDL_SOAP11_NAMESPACE;
- tmpbinding->bindingType = BINDING_SOAP;
- } else if (!strncmp(trav2->ns->href, WSDL_SOAP12_NAMESPACE, sizeof(WSDL_SOAP12_NAMESPACE))) {
- address = trav2;
- wsdl_soap_namespace = WSDL_SOAP12_NAMESPACE;
- tmpbinding->bindingType = BINDING_SOAP;
- } else if (!strncmp(trav2->ns->href, RPC_SOAP12_NAMESPACE, sizeof(RPC_SOAP12_NAMESPACE))) {
- address = trav2;
- wsdl_soap_namespace = RPC_SOAP12_NAMESPACE;
- tmpbinding->bindingType = BINDING_SOAP;
- } else if (!strncmp(trav2->ns->href, WSDL_HTTP11_NAMESPACE, sizeof(WSDL_HTTP11_NAMESPACE))) {
- address = trav2;
- tmpbinding->bindingType = BINDING_HTTP;
- } else if (!strncmp(trav2->ns->href, WSDL_HTTP12_NAMESPACE, sizeof(WSDL_HTTP12_NAMESPACE))) {
- address = trav2;
- tmpbinding->bindingType = BINDING_HTTP;
- }
- }
- if (trav2 != address && is_wsdl_element(trav2) && !node_is_equal(trav2,"documentation")) {
- soap_error1(E_ERROR, "Parsing WSDL: Unexpected WSDL element <%s>", trav2->name);
- }
- trav2 = trav2->next;
- }
- if (!address) {
- soap_error0(E_ERROR, "Parsing WSDL: No address associated with <port>");
- }
-
- location = get_attribute(address->properties, "location");
- if (!location) {
- soap_error0(E_ERROR, "Parsing WSDL: No location associated with <port>");
- }
-
- tmpbinding->location = estrdup(location->children->content);
-
- ctype = strrchr(bindingAttr->children->content,':');
- if (ctype == NULL) {
- ctype = bindingAttr->children->content;
- } else {
- ++ctype;
- }
- if (zend_hash_find(&ctx.bindings, ctype, strlen(ctype)+1, (void*)&tmp) != SUCCESS) {
- soap_error1(E_ERROR, "Parsing WSDL: No <binding> element with name '%s'", ctype);
- }
- binding = *tmp;
-
- if (tmpbinding->bindingType == BINDING_SOAP) {
- sdlSoapBindingPtr soapBinding;
- xmlNodePtr soapBindingNode;
- xmlAttrPtr tmp;
-
- soapBinding = emalloc(sizeof(sdlSoapBinding));
- memset(soapBinding, 0, sizeof(sdlSoapBinding));
- soapBinding->style = SOAP_DOCUMENT;
-
- soapBindingNode = get_node_ex(binding->children, "binding", wsdl_soap_namespace);
- if (soapBindingNode) {
- tmp = get_attribute(soapBindingNode->properties, "style");
- if (tmp && !strncmp(tmp->children->content, "rpc", sizeof("rpc"))) {
- soapBinding->style = SOAP_RPC;
- }
-
- tmp = get_attribute(soapBindingNode->properties, "transport");
- if (tmp) {
- if (strncmp(tmp->children->content, WSDL_HTTP_TRANSPORT, sizeof(WSDL_HTTP_TRANSPORT)) == 0) {
- soapBinding->transport = SOAP_TRANSPORT_HTTP;
- } else {
- soap_error1(E_ERROR, "Parsing WSDL: PHP-SOAP doesn't support transport '%s'", tmp->children->content);
- }
- }
- }
- tmpbinding->bindingAttributes = (void *)soapBinding;
- }
-
- name = get_attribute(binding->properties, "name");
- if (name == NULL) {
- soap_error0(E_ERROR, "Parsing WSDL: Missing 'name' attribute for <binding>");
- }
- tmpbinding->name = estrdup(name->children->content);
-
- type = get_attribute(binding->properties, "type");
- if (type == NULL) {
- soap_error0(E_ERROR, "Parsing WSDL: Missing 'type' attribute for <binding>");
- }
-
- ctype = strrchr(type->children->content,':');
- if (ctype == NULL) {
- ctype = type->children->content;
- } else {
- ++ctype;
- }
- if (zend_hash_find(&ctx.portTypes, ctype, strlen(ctype)+1, (void**)&tmp) != SUCCESS) {
- soap_error1(E_ERROR, "Parsing WSDL: Missing <portType> with name '%s'", name->children->content);
- }
- portType = *tmp;
-
- trav2 = binding->children;
- while (trav2 != NULL) {
- sdlFunctionPtr function;
- xmlNodePtr input, output, fault, portTypeOperation, trav3;
- xmlAttrPtr op_name, paramOrder;
-
- if ((tmpbinding->bindingType == BINDING_SOAP &&
- node_is_equal_ex(trav2, "binding", wsdl_soap_namespace)) ||
- !is_wsdl_element(trav2) ||
- node_is_equal(trav2,"documentation")) {
- trav2 = trav2->next;
- continue;
- }
- if (!node_is_equal(trav2,"operation")) {
- soap_error1(E_ERROR, "Parsing WSDL: Unexpected WSDL element <%s>", trav2->name);
- }
-
- operation = trav2;
-
- op_name = get_attribute(operation->properties, "name");
- if (op_name == NULL) {
- soap_error0(E_ERROR, "Parsing WSDL: Missing 'name' attribute for <operation>");
- }
-
- trav3 = operation->children;
- while (trav3 != NULL) {
- if (tmpbinding->bindingType == BINDING_SOAP &&
- node_is_equal_ex(trav3, "operation", wsdl_soap_namespace)) {
- } else if (is_wsdl_element(trav3) &&
- !node_is_equal(trav3,"input") &&
- !node_is_equal(trav3,"output") &&
- !node_is_equal(trav3,"fault") &&
- !node_is_equal(trav3,"documentation")) {
- soap_error1(E_ERROR, "Parsing WSDL: Unexpected WSDL element <%s>", trav3->name);
- }
- trav3 = trav3->next;
- }
-
- portTypeOperation = get_node_with_attribute_ex(portType->children, "operation", WSDL_NAMESPACE, "name", op_name->children->content, NULL);
- if (portTypeOperation == NULL) {
- soap_error1(E_ERROR, "Parsing WSDL: Missing <portType>/<operation> with name '%s'", op_name->children->content);
- }
-
- function = emalloc(sizeof(sdlFunction));
- memset(function, 0, sizeof(sdlFunction));
- function->functionName = estrdup(op_name->children->content);
-
- if (tmpbinding->bindingType == BINDING_SOAP) {
- sdlSoapBindingFunctionPtr soapFunctionBinding;
- sdlSoapBindingPtr soapBinding;
- xmlNodePtr soapOperation;
- xmlAttrPtr tmp;
-
- soapFunctionBinding = emalloc(sizeof(sdlSoapBindingFunction));
- memset(soapFunctionBinding, 0, sizeof(sdlSoapBindingFunction));
- soapBinding = (sdlSoapBindingPtr)tmpbinding->bindingAttributes;
- soapFunctionBinding->style = soapBinding->style;
-
- soapOperation = get_node_ex(operation->children, "operation", wsdl_soap_namespace);
- if (soapOperation) {
- tmp = get_attribute(soapOperation->properties, "soapAction");
- if (tmp) {
- soapFunctionBinding->soapAction = estrdup(tmp->children->content);
- }
-
- tmp = get_attribute(soapOperation->properties, "style");
- if (tmp) {
- if (!strncmp(tmp->children->content, "rpc", sizeof("rpc"))) {
- soapFunctionBinding->style = SOAP_RPC;
- } else {
- soapFunctionBinding->style = SOAP_DOCUMENT;
- }
- } else {
- soapFunctionBinding->style = soapBinding->style;
- }
- }
-
- function->bindingAttributes = (void *)soapFunctionBinding;
- }
-
- input = get_node_ex(portTypeOperation->children, "input", WSDL_NAMESPACE);
- if (input != NULL) {
- xmlAttrPtr message, name;
-
- message = get_attribute(input->properties, "message");
- if (message == NULL) {
- soap_error1(E_ERROR, "Parsing WSDL: Missing name for <input> of '%s'", op_name->children->content);
- }
- function->requestParameters = wsdl_message(&ctx, message->children->content);
-
- name = get_attribute(input->properties, "name");
-/* FIXME
- if (name != NULL) {
- function->requestName = estrdup(name->children->content);
- } else {
-*/
- {
- function->requestName = estrdup(function->functionName);
- }
-
- if (tmpbinding->bindingType == BINDING_SOAP) {
- input = get_node_ex(operation->children, "input", WSDL_NAMESPACE);
- if (input != NULL) {
- sdlSoapBindingFunctionPtr soapFunctionBinding = function->bindingAttributes;
- wsdl_soap_binding_body(&ctx, input, wsdl_soap_namespace, &soapFunctionBinding->input, function->requestParameters);
- }
- }
- }
-
- output = get_node_ex(portTypeOperation->children, "output", WSDL_NAMESPACE);
- if (output != NULL) {
- xmlAttrPtr message, name;
-
- message = get_attribute(output->properties, "message");
- if (message == NULL) {
- soap_error1(E_ERROR, "Parsing WSDL: Missing name for <output> of '%s'", op_name->children->content);
- }
- function->responseParameters = wsdl_message(&ctx, message->children->content);
-
- name = get_attribute(output->properties, "name");
-/* FIXME
- if (name != NULL) {
- function->responseName = estrdup(name->children->content);
- } else if (input == NULL) {
- function->responseName = estrdup(function->functionName);
- } else {
-*/
- {
- int len = strlen(function->functionName);
- function->responseName = emalloc(len + sizeof("Response"));
- memcpy(function->responseName, function->functionName, len);
- memcpy(function->responseName+len, "Response", sizeof("Response"));
- }
-
- if (tmpbinding->bindingType == BINDING_SOAP) {
- output = get_node_ex(operation->children, "output", WSDL_NAMESPACE);
- if (output != NULL) {
- sdlSoapBindingFunctionPtr soapFunctionBinding = function->bindingAttributes;
- wsdl_soap_binding_body(&ctx, output, wsdl_soap_namespace, &soapFunctionBinding->output, function->responseParameters);
- }
- }
- }
-
- paramOrder = get_attribute(portTypeOperation->properties, "parameterOrder");
- if (paramOrder) {
- /* FIXME: */
- }
-
- fault = portTypeOperation->children;
- while (fault != NULL) {
- if (node_is_equal_ex(fault, "fault", WSDL_NAMESPACE)) {
- xmlAttrPtr message, name;
- sdlFaultPtr f;
-
- name = get_attribute(fault->properties, "name");
- if (name == NULL) {
- soap_error1(E_ERROR, "Parsing WSDL: Missing name for <fault> of '%s'", op_name->children->content);
- }
- message = get_attribute(fault->properties, "message");
- if (message == NULL) {
- soap_error1(E_ERROR, "Parsing WSDL: Missing name for <output> of '%s'", op_name->children->content);
- }
-
- f = emalloc(sizeof(sdlFault));
- memset(f, 0, sizeof(sdlFault));
-
- f->name = estrdup(name->children->content);
- f->details = wsdl_message(&ctx, message->children->content);
- if (f->details == NULL || zend_hash_num_elements(f->details) > 1) {
- soap_error1(E_ERROR, "Parsing WSDL: The fault message '%s' must have a single part", message->children->content);
- }
-
- if (tmpbinding->bindingType == BINDING_SOAP) {
- xmlNodePtr soap_fault = get_node_with_attribute_ex(operation->children, "fault", WSDL_NAMESPACE, "name", f->name, NULL);
- if (soap_fault != NULL) {
- xmlNodePtr trav = soap_fault->children;
- while (trav != NULL) {
- if (node_is_equal_ex(trav, "fault", wsdl_soap_namespace)) {
- xmlAttrPtr tmp;
- sdlSoapBindingFunctionFaultPtr binding;
-
- binding = f->bindingAttributes = emalloc(sizeof(sdlSoapBindingFunctionFault));
- memset(f->bindingAttributes, 0, sizeof(sdlSoapBindingFunctionFault));
-
- tmp = get_attribute(trav->properties, "use");
- if (tmp && !strncmp(tmp->children->content, "encoded", sizeof("encoded"))) {
- binding->use = SOAP_ENCODED;
- } else {
- binding->use = SOAP_LITERAL;
- }
-
- tmp = get_attribute(trav->properties, "namespace");
- if (tmp) {
- binding->ns = estrdup(tmp->children->content);
- }
-
- if (binding->use == SOAP_ENCODED) {
- tmp = get_attribute(trav->properties, "encodingStyle");
- if (tmp) {
- if (strncmp(tmp->children->content,SOAP_1_1_ENC_NAMESPACE,sizeof(SOAP_1_1_ENC_NAMESPACE)) == 0) {
- binding->encodingStyle = SOAP_ENCODING_1_1;
- } else if (strncmp(tmp->children->content,SOAP_1_2_ENC_NAMESPACE,sizeof(SOAP_1_2_ENC_NAMESPACE)) == 0) {
- binding->encodingStyle = SOAP_ENCODING_1_2;
- } else {
- soap_error1(E_ERROR, "Parsing WSDL: Unknown encodingStyle '%s'", tmp->children->content);
- }
- } else {
- soap_error0(E_ERROR, "Parsing WSDL: Unspecified encodingStyle");
- }
- }
- } else if (is_wsdl_element(trav) && !node_is_equal(trav,"documentation")) {
- soap_error1(E_ERROR, "Parsing WSDL: Unexpected WSDL element <%s>", trav->name);
- }
- trav = trav->next;
- }
- }
- }
- if (function->faults == NULL) {
- function->faults = emalloc(sizeof(HashTable));
- zend_hash_init(function->faults, 0, NULL, delete_fault, 0);
- }
- if (zend_hash_add(function->faults, f->name, strlen(f->name)+1, (void**)&f, sizeof(sdlFaultPtr), NULL) != SUCCESS) {
- soap_error2(E_ERROR, "Parsing WSDL: <fault> with name '%s' already defined in '%s'", f->name, op_name->children->content);
- }
- }
- fault = fault->next;
- }
-
- function->binding = tmpbinding;
-
- {
- char *tmp = estrdup(function->functionName);
- int len = strlen(tmp);
-
- if (zend_hash_add(&ctx.sdl->functions, php_strtolower(tmp, len), len+1, &function, sizeof(sdlFunctionPtr), NULL) != SUCCESS) {
- zend_hash_next_index_insert(&ctx.sdl->functions, &function, sizeof(sdlFunctionPtr), NULL);
- }
- efree(tmp);
- if (function->requestName != NULL && strcmp(function->requestName,function->functionName) != 0) {
- if (ctx.sdl->requests == NULL) {
- ctx.sdl->requests = emalloc(sizeof(HashTable));
- zend_hash_init(ctx.sdl->requests, 0, NULL, NULL, 0);
- }
- tmp = estrdup(function->requestName);
- len = strlen(tmp);
- zend_hash_add(ctx.sdl->requests, php_strtolower(tmp, len), len+1, &function, sizeof(sdlFunctionPtr), NULL);
- efree(tmp);
- }
- }
- trav2 = trav2->next;
- }
-
- if (!ctx.sdl->bindings) {
- ctx.sdl->bindings = emalloc(sizeof(HashTable));
- zend_hash_init(ctx.sdl->bindings, 0, NULL, delete_binding, 0);
- }
-
- zend_hash_add(ctx.sdl->bindings, tmpbinding->name, strlen(tmpbinding->name), &tmpbinding, sizeof(sdlBindingPtr), NULL);
- trav= trav->next;
- }
-
- zend_hash_move_forward(&ctx.services);
- }
- } else {
- soap_error0(E_ERROR, "Parsing WSDL: Couldn't bind to service");
- }
-
- zend_hash_destroy(&ctx.messages);
- zend_hash_destroy(&ctx.bindings);
- zend_hash_destroy(&ctx.portTypes);
- zend_hash_destroy(&ctx.services);
- zend_hash_destroy(&ctx.docs);
-
- return ctx.sdl;
-}
-
-#define WSDL_CACHE_VERSION 0x0a
-
-#define WSDL_CACHE_GET(ret,type,buf) memcpy(&ret,*buf,sizeof(type)); *buf += sizeof(type);
-#define WSDL_CACHE_GET_INT(ret,buf) ret = ((unsigned char)(*buf)[0])|((unsigned char)(*buf)[1]<<8)|((unsigned char)(*buf)[2]<<16)|((int)(*buf)[3]<<24); *buf += 4;
-#define WSDL_CACHE_GET_1(ret,type,buf) ret = (type)(**buf); (*buf)++;
-#define WSDL_CACHE_GET_N(ret,n,buf) memcpy(ret,*buf,n); *buf += n;
-#define WSDL_CACHE_SKIP(n,buf) *buf += n;
-
-#define WSDL_CACHE_PUT_INT(val,buf) smart_str_appendc(buf,val & 0xff); \
- smart_str_appendc(buf,(val >> 8) & 0xff); \
- smart_str_appendc(buf,(val >> 16) & 0xff); \
- smart_str_appendc(buf,(val >> 24) & 0xff);
-#define WSDL_CACHE_PUT_1(val,buf) smart_str_appendc(buf,val);
-#define WSDL_CACHE_PUT_N(val,n,buf) smart_str_appendl(buf,(char*)val,n);
-
-static char* sdl_deserialize_string(char **in)
-{
- char *s;
- int len;
-
- WSDL_CACHE_GET_INT(len, in);
- if (len == 0x7fffffff) {
- return NULL;
- } else {
- s = emalloc(len+1);
- WSDL_CACHE_GET_N(s, len, in);
- s[len] = '\0';
- return s;
- }
-}
-
-static void sdl_deserialize_key(HashTable* ht, void* data, char **in)
-{
- int len;
-
- WSDL_CACHE_GET_INT(len, in);
- if (len == 0) {
- zend_hash_next_index_insert(ht, &data, sizeof(void*), NULL);
- } else {
- zend_hash_add(ht, *in, len, &data, sizeof(void*), NULL);
- WSDL_CACHE_SKIP(len, in);
- }
-}
-
-static void sdl_deserialize_attribute(sdlAttributePtr attr, encodePtr *encoders, char **in)
-{
- int i;
-
- attr->name = sdl_deserialize_string(in);
- attr->namens = sdl_deserialize_string(in);
- attr->ref = sdl_deserialize_string(in);
- attr->def = sdl_deserialize_string(in);
- attr->fixed = sdl_deserialize_string(in);
- WSDL_CACHE_GET_1(attr->form, sdlForm, in);
- WSDL_CACHE_GET_1(attr->use, sdlUse, in);
- WSDL_CACHE_GET_INT(i, in);
- attr->encode = encoders[i];
- WSDL_CACHE_GET_INT(i, in);
- if (i > 0) {
- attr->extraAttributes = emalloc(sizeof(HashTable));
- zend_hash_init(attr->extraAttributes, i, NULL, delete_extra_attribute, 0);
- while (i > 0) {
- sdlExtraAttributePtr x = emalloc(sizeof(sdlExtraAttribute));
- sdl_deserialize_key(attr->extraAttributes, x, in);
- x->ns = sdl_deserialize_string(in);
- x->val = sdl_deserialize_string(in);
- --i;
- }
- }
-}
-
-static sdlRestrictionIntPtr sdl_deserialize_resriction_int(char **in)
-{
- if (**in == 1) {
- sdlRestrictionIntPtr x = emalloc(sizeof(sdlRestrictionInt));
- WSDL_CACHE_SKIP(1, in);
- WSDL_CACHE_GET_INT(x->value, in);
- WSDL_CACHE_GET_1(x->fixed, char, in);
- return x;
- } else {
- WSDL_CACHE_SKIP(1, in);
- return NULL;
- }
-}
-
-static sdlRestrictionCharPtr sdl_deserialize_resriction_char(char **in)
-{
- if (**in == 1) {
- sdlRestrictionCharPtr x = emalloc(sizeof(sdlRestrictionChar));
- WSDL_CACHE_SKIP(1, in);
- x->value = sdl_deserialize_string(in);
- WSDL_CACHE_GET_1(x->fixed, char, in);
- return x;
- } else {
- WSDL_CACHE_SKIP(1, in);
- return NULL;
- }
-}
-
-static sdlContentModelPtr sdl_deserialize_model(sdlTypePtr *types, sdlTypePtr *elements, char **in)
-{
- int i;
- sdlContentModelPtr model = emalloc(sizeof(sdlContentModel));
-
- WSDL_CACHE_GET_1(model->kind, sdlContentKind, in);
- WSDL_CACHE_GET_INT(model->min_occurs, in);
- WSDL_CACHE_GET_INT(model->max_occurs, in);
- switch (model->kind) {
- case XSD_CONTENT_ELEMENT:
- WSDL_CACHE_GET_INT(i, in);
- model->u.element = elements[i];
- break;
- case XSD_CONTENT_SEQUENCE:
- case XSD_CONTENT_ALL:
- case XSD_CONTENT_CHOICE:
- WSDL_CACHE_GET_INT(i, in);
- model->u.content = emalloc(sizeof(HashTable));
- zend_hash_init(model->u.content, i, NULL, delete_model, 0);
- while (i > 0) {
- sdlContentModelPtr x = sdl_deserialize_model(types, elements, in);
- zend_hash_next_index_insert(model->u.content,&x,sizeof(sdlContentModelPtr),NULL);
- i--;
- }
- break;
- case XSD_CONTENT_GROUP_REF:
- model->u.group_ref = sdl_deserialize_string(in);
- break;
- case XSD_CONTENT_GROUP:
- WSDL_CACHE_GET_INT(i, in);
- model->u.group = types[i];
- break;
- default:
- break;
- }
- return model;
-}
-
-static void sdl_deserialize_type(sdlTypePtr type, sdlTypePtr *types, encodePtr *encoders, char **in)
-{
- int i;
- sdlTypePtr *elements = NULL;
-
- WSDL_CACHE_GET_1(type->kind, sdlTypeKind, in);
- type->name = sdl_deserialize_string(in);
- type->namens = sdl_deserialize_string(in);
- type->def = sdl_deserialize_string(in);
- type->fixed = sdl_deserialize_string(in);
- type->ref = sdl_deserialize_string(in);
- WSDL_CACHE_GET_1(type->nillable, char, in);
-
- WSDL_CACHE_GET_INT(i, in);
- type->encode = encoders[i];
-
- if (**in == 1) {
- WSDL_CACHE_SKIP(1, in);
- type->restrictions = emalloc(sizeof(sdlRestrictions));
- /*memset(type->restrictions, 0, sizeof(sdlRestrictions));*/
- type->restrictions->minExclusive = sdl_deserialize_resriction_int(in);
- type->restrictions->minInclusive = sdl_deserialize_resriction_int(in);
- type->restrictions->maxExclusive = sdl_deserialize_resriction_int(in);
- type->restrictions->maxInclusive = sdl_deserialize_resriction_int(in);
- type->restrictions->totalDigits = sdl_deserialize_resriction_int(in);
- type->restrictions->fractionDigits = sdl_deserialize_resriction_int(in);
- type->restrictions->length = sdl_deserialize_resriction_int(in);
- type->restrictions->minLength = sdl_deserialize_resriction_int(in);
- type->restrictions->maxLength = sdl_deserialize_resriction_int(in);
- type->restrictions->whiteSpace = sdl_deserialize_resriction_char(in);
- type->restrictions->pattern = sdl_deserialize_resriction_char(in);
- WSDL_CACHE_GET_INT(i, in);
- if (i > 0) {
- type->restrictions->enumeration = emalloc(sizeof(HashTable));
- zend_hash_init(type->restrictions->enumeration, i, NULL, delete_restriction_var_char, 0);
- while (i > 0) {
- sdlRestrictionCharPtr x = sdl_deserialize_resriction_char(in);
- sdl_deserialize_key(type->restrictions->enumeration, x, in);
- --i;
- }
- } else {
- type->restrictions->enumeration = NULL;
- }
- } else {
- WSDL_CACHE_SKIP(1, in);
- }
-
- WSDL_CACHE_GET_INT(i, in);
- if (i > 0) {
- elements = emalloc((i+1) * sizeof(sdlTypePtr));
- elements[0] = NULL;
- type->elements = emalloc(sizeof(HashTable));
- zend_hash_init(type->elements, i, NULL, delete_type, 0);
- while (i > 0) {
- sdlTypePtr t = emalloc(sizeof(sdlType));
- memset(t, 0, sizeof(sdlType));
- sdl_deserialize_key(type->elements, t, in);
- sdl_deserialize_type(t, types, encoders, in);
- elements[i] = t;
- --i;
- }
- }
-
- WSDL_CACHE_GET_INT(i, in);
- if (i > 0) {
- type->attributes = emalloc(sizeof(HashTable));
- zend_hash_init(type->attributes, i, NULL, delete_attribute, 0);
- while (i > 0) {
- sdlAttributePtr attr = emalloc(sizeof(sdlAttribute));
- memset(attr, 0, sizeof(sdlAttribute));
- sdl_deserialize_key(type->attributes, attr, in);
- sdl_deserialize_attribute(attr, encoders, in);
- --i;
- }
- }
-
- if (**in != 0) {
- WSDL_CACHE_SKIP(1, in);
- type->model = sdl_deserialize_model(types, elements, in);
- } else {
- WSDL_CACHE_SKIP(1, in);
- }
- if (elements != NULL) {
- efree(elements);
- }
-}
-
-static void sdl_deserialize_encoder(encodePtr enc, sdlTypePtr *types, char **in)
-{
- int i;
-
- WSDL_CACHE_GET_INT(enc->details.type, in);
- enc->details.type_str = sdl_deserialize_string(in);
- enc->details.ns = sdl_deserialize_string(in);
- WSDL_CACHE_GET_INT(i, in);
- enc->details.sdl_type = types[i];
- enc->to_xml = sdl_guess_convert_xml;
- enc->to_zval = sdl_guess_convert_zval;
-}
-
-static void sdl_deserialize_soap_body(sdlSoapBindingFunctionBodyPtr body, encodePtr *encoders, sdlTypePtr *types, char **in)
-{
- int i, j, n;
-
- WSDL_CACHE_GET_1(body->use, sdlEncodingUse, in);
- if (body->use == SOAP_ENCODED) {
- WSDL_CACHE_GET_1(body->encodingStyle, sdlRpcEncodingStyle, in);
- } else {
- body->encodingStyle = SOAP_ENCODING_DEFAULT;
- }
- body->ns = sdl_deserialize_string(in);
- body->parts = sdl_deserialize_string(in);
- WSDL_CACHE_GET_INT(i, in);
- if (i > 0) {
- body->headers = emalloc(sizeof(HashTable));
- zend_hash_init(body->headers, i, NULL, delete_header, 0);
- while (i > 0) {
- sdlSoapBindingFunctionHeaderPtr tmp = emalloc(sizeof(sdlSoapBindingFunctionHeader));
- memset(tmp, 0, sizeof(sdlSoapBindingFunctionHeader));
- sdl_deserialize_key(body->headers, tmp, in);
- WSDL_CACHE_GET_1(tmp->use, sdlEncodingUse, in);
- if (tmp->use == SOAP_ENCODED) {
- WSDL_CACHE_GET_1(tmp->encodingStyle, sdlRpcEncodingStyle, in);
- } else {
- tmp->encodingStyle = SOAP_ENCODING_DEFAULT;
- }
- tmp->name = sdl_deserialize_string(in);
- tmp->ns = sdl_deserialize_string(in);
- WSDL_CACHE_GET_INT(n, in);
- tmp->encode = encoders[n];
- WSDL_CACHE_GET_INT(n, in);
- tmp->element = types[n];
- --i;
- WSDL_CACHE_GET_INT(j, in);
- if (j > 0) {
- tmp->headerfaults = emalloc(sizeof(HashTable));
- zend_hash_init(tmp->headerfaults, i, NULL, delete_header, 0);
- while (j > 0) {
- sdlSoapBindingFunctionHeaderPtr tmp2 = emalloc(sizeof(sdlSoapBindingFunctionHeader));
- memset(tmp2, 0, sizeof(sdlSoapBindingFunctionHeader));
- sdl_deserialize_key(tmp->headerfaults, tmp2, in);
- WSDL_CACHE_GET_1(tmp2->use, sdlEncodingUse, in);
- if (tmp2->use == SOAP_ENCODED) {
- WSDL_CACHE_GET_1(tmp2->encodingStyle, sdlRpcEncodingStyle, in);
- } else {
- tmp2->encodingStyle = SOAP_ENCODING_DEFAULT;
- }
- tmp2->name = sdl_deserialize_string(in);
- tmp2->ns = sdl_deserialize_string(in);
- WSDL_CACHE_GET_INT(n, in);
- tmp->encode = encoders[n];
- WSDL_CACHE_GET_INT(n, in);
- tmp->element = types[n];
- --j;
- }
- }
- }
- }
-}
-
-static HashTable* sdl_deserialize_parameters(encodePtr *encoders, sdlTypePtr *types, char **in)
-{
- int i, n;
- HashTable *ht;
-
- WSDL_CACHE_GET_INT(i, in);
- if (i == 0) {return NULL;}
- ht = emalloc(sizeof(HashTable));
- zend_hash_init(ht, i, NULL, delete_parameter, 0);
- while (i > 0) {
- sdlParamPtr param = emalloc(sizeof(sdlParam));
- sdl_deserialize_key(ht, param, in);
- param->paramName = sdl_deserialize_string(in);
- WSDL_CACHE_GET_INT(param->order, in);
- WSDL_CACHE_GET_INT(n, in);
- param->encode = encoders[n];
- WSDL_CACHE_GET_INT(n, in);
- param->element = types[n];
- --i;
- }
- return ht;
-}
-
-static sdlPtr get_sdl_from_cache(const char *fn, const char *uri, time_t t)
-{
- sdlPtr sdl;
- time_t old_t;
- int i, num_groups, num_types, num_elements, num_encoders, num_bindings, num_func;
- sdlFunctionPtr *functions = NULL;
- sdlBindingPtr *bindings;
- sdlTypePtr *types;
- encodePtr *encoders;
- encodePtr enc;
-
- int f;
- struct stat st;
- char *in, *buf;
-
- f = open(fn, O_RDONLY|O_BINARY);
- if (f < 0) {
- return NULL;
- }
- if (fstat(f, &st) != 0) {
- close(f);
- return NULL;
- }
- buf = in = emalloc(st.st_size);
- if (read(f, in, st.st_size) != st.st_size) {
- close(f);
- efree(in);
- return NULL;
- }
- close(f);
-
- if (strncmp(in,"wsdl",4) != 0 || in[4] != WSDL_CACHE_VERSION || in[5] != '\0') {
- unlink(fn);
- efree(buf);
- return NULL;
- }
- in += 6;
-
- WSDL_CACHE_GET(old_t, time_t, &in);
- if (old_t < t) {
- unlink(fn);
- efree(buf);
- return NULL;
- }
-
- WSDL_CACHE_GET_INT(i, &in);
- if (i == 0 && strncmp(in, uri, i) != 0) {
- unlink(fn);
- efree(buf);
- return NULL;
- }
- WSDL_CACHE_SKIP(i, &in);
-
- sdl = emalloc(sizeof(*sdl));
- memset(sdl, 0, sizeof(*sdl));
-
- sdl->source = sdl_deserialize_string(&in);
- sdl->target_ns = sdl_deserialize_string(&in);
-
- WSDL_CACHE_GET_INT(num_groups, &in);
- WSDL_CACHE_GET_INT(num_types, &in);
- WSDL_CACHE_GET_INT(num_elements, &in);
- WSDL_CACHE_GET_INT(num_encoders, &in);
-
- i = num_groups+num_types+num_elements;
- types = emalloc((i+1)*sizeof(sdlTypePtr));
- types[0] = NULL;
- while (i > 0) {
- types[i] = emalloc(sizeof(sdlType));
- memset(types[i], 0, sizeof(sdlType));
- i--;
- }
-
- i = num_encoders;
- enc = defaultEncoding;
- while (enc->details.type != END_KNOWN_TYPES) {
- i++; enc++;
- }
- encoders = emalloc((i+1)*sizeof(encodePtr));
- i = num_encoders;
- encoders[0] = NULL;
- while (i > 0) {
- encoders[i] = emalloc(sizeof(encode));
- memset(encoders[i], 0, sizeof(encode));
- i--;
- }
- i = num_encoders;
- enc = defaultEncoding;
- while (enc->details.type != END_KNOWN_TYPES) {
- encoders[++i] = enc++;
- }
-
- i = 1;
- if (num_groups > 0) {
- sdl->groups = emalloc(sizeof(HashTable));
- zend_hash_init(sdl->groups, num_groups, NULL, delete_type, 0);
- while (i < num_groups+1) {
- sdl_deserialize_key(sdl->groups, types[i], &in);
- sdl_deserialize_type(types[i], types, encoders, &in);
- i++;
- }
- }
-
- if (num_types > 0) {
- sdl->types = emalloc(sizeof(HashTable));
- zend_hash_init(sdl->types, num_types, NULL, delete_type, 0);
- while (i < num_groups+num_types+1) {
- sdl_deserialize_key(sdl->types, types[i], &in);
- sdl_deserialize_type(types[i], types, encoders, &in);
- i++;
- }
- }
-
- if (num_elements > 0) {
- sdl->elements = emalloc(sizeof(HashTable));
- zend_hash_init(sdl->elements, num_elements, NULL, delete_type, 0);
- while (i < num_groups+num_types+num_elements+1) {
- sdl_deserialize_key(sdl->elements, types[i], &in);
- sdl_deserialize_type(types[i], types, encoders, &in);
- i++;
- }
- }
-
- i = 1;
- if (num_encoders > 0) {
- sdl->encoders = emalloc(sizeof(HashTable));
- zend_hash_init(sdl->encoders, num_encoders, NULL, delete_encoder, 0);
- while (i < num_encoders+1) {
- sdl_deserialize_key(sdl->encoders, encoders[i], &in);
- sdl_deserialize_encoder(encoders[i], types, &in);
- i++;
- }
- }
-
- /* deserialize bindings */
- WSDL_CACHE_GET_INT(num_bindings, &in);
- bindings = emalloc(num_bindings*sizeof(sdlBindingPtr));
- if (num_bindings > 0) {
- sdl->bindings = emalloc(sizeof(HashTable));
- zend_hash_init(sdl->bindings, num_bindings, NULL, delete_binding, 0);
- for (i = 0; i < num_bindings; i++) {
- sdlBindingPtr binding = emalloc(sizeof(sdlBinding));
- memset(binding, 0, sizeof(sdlBinding));
- sdl_deserialize_key(sdl->bindings, binding, &in);
- binding->name = sdl_deserialize_string(&in);
- binding->location = sdl_deserialize_string(&in);
- WSDL_CACHE_GET_1(binding->bindingType,sdlBindingType,&in);
- if (binding->bindingType == BINDING_SOAP && *in != 0) {
- sdlSoapBindingPtr soap_binding = binding->bindingAttributes = emalloc(sizeof(sdlSoapBinding));
- WSDL_CACHE_GET_1(soap_binding->style,sdlEncodingStyle,&in);
- WSDL_CACHE_GET_1(soap_binding->transport,sdlTransport,&in);
- } else {
- WSDL_CACHE_SKIP(1,&in);
- }
- bindings[i] = binding;
- }
- }
-
- /* deserialize functions */
- WSDL_CACHE_GET_INT(num_func, &in);
- if (num_func > 0) {
- zend_hash_init(&sdl->functions, num_func, NULL, delete_function, 0);
- functions = emalloc(num_func*sizeof(sdlFunctionPtr));
- for (i = 0; i < num_func; i++) {
- int binding_num, num_faults;
- sdlFunctionPtr func = emalloc(sizeof(sdlFunction));
- sdl_deserialize_key(&sdl->functions, func, &in);
- func->functionName = sdl_deserialize_string(&in);
- func->requestName = sdl_deserialize_string(&in);
- func->responseName = sdl_deserialize_string(&in);
-
- WSDL_CACHE_GET_INT(binding_num, &in);
- if (binding_num == 0) {
- func->binding = NULL;
- } else {
- func->binding = bindings[binding_num-1];
- }
- if (func->binding && func->binding->bindingType == BINDING_SOAP && *in != 0) {
- sdlSoapBindingFunctionPtr binding = func->bindingAttributes = emalloc(sizeof(sdlSoapBindingFunction));
- memset(binding, 0, sizeof(sdlSoapBindingFunction));
- WSDL_CACHE_GET_1(binding->style,sdlEncodingStyle,&in);
- binding->soapAction = sdl_deserialize_string(&in);
- sdl_deserialize_soap_body(&binding->input, encoders, types, &in);
- sdl_deserialize_soap_body(&binding->output, encoders, types, &in);
- } else {
- WSDL_CACHE_SKIP(1, &in);
- func->bindingAttributes = NULL;
- }
-
- func->requestParameters = sdl_deserialize_parameters(encoders, types, &in);
- func->responseParameters = sdl_deserialize_parameters(encoders, types, &in);
-
- WSDL_CACHE_GET_INT(num_faults, &in);
- if (num_faults > 0) {
- int j;
-
- func->faults = emalloc(sizeof(HashTable));
- zend_hash_init(func->faults, num_faults, NULL, delete_fault, 0);
-
- for (j = 0; j < num_faults; j++) {
- sdlFaultPtr fault = emalloc(sizeof(sdlFault));
-
- sdl_deserialize_key(func->faults, fault, &in);
- fault->name =sdl_deserialize_string(&in);
- fault->details =sdl_deserialize_parameters(encoders, types, &in);
- if (*in != 0) {
- sdlSoapBindingFunctionFaultPtr binding = fault->bindingAttributes = emalloc(sizeof(sdlSoapBindingFunctionFault));
- memset(binding, 0, sizeof(sdlSoapBindingFunctionFault));
- WSDL_CACHE_GET_1(binding->use,sdlEncodingUse,&in);
- if (binding->use == SOAP_ENCODED) {
- WSDL_CACHE_GET_1(binding->encodingStyle, sdlRpcEncodingStyle, &in);
- } else {
- binding->encodingStyle = SOAP_ENCODING_DEFAULT;
- }
- binding->ns = sdl_deserialize_string(&in);
- } else {
- WSDL_CACHE_SKIP(1, &in);
- fault->bindingAttributes = NULL;
- }
- }
- } else {
- func->faults = NULL;
- }
- functions[i] = func;
- }
- }
-
- /* deserialize requests */
- WSDL_CACHE_GET_INT(i, &in);
- if (i > 0) {
- sdl->requests = emalloc(sizeof(HashTable));
- zend_hash_init(sdl->requests, i, NULL, NULL, 0);
- while (i > 0) {
- int function_num;
-
- WSDL_CACHE_GET_INT(function_num, &in);
- sdl_deserialize_key(sdl->requests, functions[function_num-1], &in);
- i--;
- }
- }
-
- if (functions) {
- efree(functions);
- }
- efree(bindings);
- efree(encoders);
- efree(types);
- efree(buf);
- return sdl;
-}
-
-static void sdl_serialize_string(const char *str, smart_str *out)
-{
- int i;
-
- if (str) {
- i = strlen(str);
- WSDL_CACHE_PUT_INT(i, out);
- if (i > 0) {
- WSDL_CACHE_PUT_N(str, i, out);
- }
- } else {
- WSDL_CACHE_PUT_INT(0x7fffffff, out);
- }
-}
-
-static void sdl_serialize_key(HashTable *ht, smart_str *out)
-{
- char *key;
- uint key_len;
- ulong index;
-
- if (zend_hash_get_current_key_ex(ht, &key, &key_len, &index, 0, NULL) == HASH_KEY_IS_STRING) {
- WSDL_CACHE_PUT_INT(key_len, out);
- WSDL_CACHE_PUT_N(key, key_len, out);
- } else {
- WSDL_CACHE_PUT_INT(0, out);
- }
-}
-
-static void sdl_serialize_encoder_ref(encodePtr enc, HashTable *tmp_encoders, smart_str *out) {
- if (enc) {
- int *encoder_num;
- if (zend_hash_find(tmp_encoders, (char*)&enc, sizeof(enc), (void**)&encoder_num) == SUCCESS) {
- WSDL_CACHE_PUT_INT(*encoder_num, out);
- } else {
- WSDL_CACHE_PUT_INT(0, out);
- }
- } else {
- WSDL_CACHE_PUT_INT(0, out);
- }
-}
-
-static void sdl_serialize_type_ref(sdlTypePtr type, HashTable *tmp_types, smart_str *out) {
- if (type) {
- int *type_num;
- if (zend_hash_find(tmp_types, (char*)&type, sizeof(type), (void**)&type_num) == SUCCESS) {
- WSDL_CACHE_PUT_INT(*type_num, out);
- } else {
- WSDL_CACHE_PUT_INT(0, out);
- }
- } else {
- WSDL_CACHE_PUT_INT(0,out);
- }
-}
-
-static void sdl_serialize_attribute(sdlAttributePtr attr, HashTable *tmp_encoders, smart_str *out)
-{
- int i;
-
- sdl_serialize_string(attr->name, out);
- sdl_serialize_string(attr->namens, out);
- sdl_serialize_string(attr->ref, out);
- sdl_serialize_string(attr->def, out);
- sdl_serialize_string(attr->fixed, out);
- WSDL_CACHE_PUT_1(attr->form, out);
- WSDL_CACHE_PUT_1(attr->use, out);
- sdl_serialize_encoder_ref(attr->encode, tmp_encoders, out);
- if (attr->extraAttributes) {
- i = zend_hash_num_elements(attr->extraAttributes);
- } else {
- i = 0;
- }
- WSDL_CACHE_PUT_INT(i, out);
- if (i > 0) {
- sdlExtraAttributePtr *tmp;
- zend_hash_internal_pointer_reset(attr->extraAttributes);
- while (zend_hash_get_current_data(attr->extraAttributes, (void**)&tmp) == SUCCESS) {
- sdl_serialize_key(attr->extraAttributes, out);
- sdl_serialize_string((*tmp)->ns, out);
- sdl_serialize_string((*tmp)->val, out);
- zend_hash_move_forward(attr->extraAttributes);
- }
- }
-}
-
-static void sdl_serialize_model(sdlContentModelPtr model, HashTable *tmp_types, HashTable *tmp_elements, smart_str *out)
-{
- WSDL_CACHE_PUT_1(model->kind, out);
- WSDL_CACHE_PUT_INT(model->min_occurs, out);
- WSDL_CACHE_PUT_INT(model->max_occurs, out);
- switch (model->kind) {
- case XSD_CONTENT_ELEMENT:
- sdl_serialize_type_ref(model->u.element, tmp_elements, out);
- break;
- case XSD_CONTENT_SEQUENCE:
- case XSD_CONTENT_ALL:
- case XSD_CONTENT_CHOICE: {
- sdlContentModelPtr *tmp;
- int i = zend_hash_num_elements(model->u.content);
-
- WSDL_CACHE_PUT_INT(i, out);
- zend_hash_internal_pointer_reset(model->u.content);
- while (zend_hash_get_current_data(model->u.content, (void**)&tmp) == SUCCESS) {
- sdl_serialize_model(*tmp, tmp_types, tmp_elements, out);
- zend_hash_move_forward(model->u.content);
- }
- }
- break;
- case XSD_CONTENT_GROUP_REF:
- sdl_serialize_string(model->u.group_ref,out);
- break;
- case XSD_CONTENT_GROUP:
- sdl_serialize_type_ref(model->u.group, tmp_types, out);
- break;
- default:
- break;
- }
-}
-
-static void sdl_serialize_resriction_int(sdlRestrictionIntPtr x, smart_str *out)
-{
- if (x) {
- WSDL_CACHE_PUT_1(1, out);
- WSDL_CACHE_PUT_INT(x->value, out);
- WSDL_CACHE_PUT_1(x->fixed, out);
- } else {
- WSDL_CACHE_PUT_1(0, out);
- }
-}
-
-static void sdl_serialize_resriction_char(sdlRestrictionCharPtr x, smart_str *out)
-{
- if (x) {
- WSDL_CACHE_PUT_1(1, out);
- sdl_serialize_string(x->value, out);
- WSDL_CACHE_PUT_1(x->fixed, out);
- } else {
- WSDL_CACHE_PUT_1(0, out);
- }
-}
-
-static void sdl_serialize_type(sdlTypePtr type, HashTable *tmp_encoders, HashTable *tmp_types, smart_str *out)
-{
- int i;
- HashTable *tmp_elements = NULL;
-
- WSDL_CACHE_PUT_1(type->kind, out);
- sdl_serialize_string(type->name, out);
- sdl_serialize_string(type->namens, out);
- sdl_serialize_string(type->def, out);
- sdl_serialize_string(type->fixed, out);
- sdl_serialize_string(type->ref, out);
- WSDL_CACHE_PUT_1(type->nillable, out);
- sdl_serialize_encoder_ref(type->encode, tmp_encoders, out);
-
- if (type->restrictions) {
- WSDL_CACHE_PUT_1(1, out);
- sdl_serialize_resriction_int(type->restrictions->minExclusive,out);
- sdl_serialize_resriction_int(type->restrictions->minInclusive,out);
- sdl_serialize_resriction_int(type->restrictions->maxExclusive,out);
- sdl_serialize_resriction_int(type->restrictions->maxInclusive,out);
- sdl_serialize_resriction_int(type->restrictions->totalDigits,out);
- sdl_serialize_resriction_int(type->restrictions->fractionDigits,out);
- sdl_serialize_resriction_int(type->restrictions->length,out);
- sdl_serialize_resriction_int(type->restrictions->minLength,out);
- sdl_serialize_resriction_int(type->restrictions->maxLength,out);
- sdl_serialize_resriction_char(type->restrictions->whiteSpace,out);
- sdl_serialize_resriction_char(type->restrictions->pattern,out);
- if (type->restrictions->enumeration) {
- i = zend_hash_num_elements(type->restrictions->enumeration);
- } else {
- i = 0;
- }
- WSDL_CACHE_PUT_INT(i, out);
- if (i > 0) {
- sdlRestrictionCharPtr *tmp;
-
- zend_hash_internal_pointer_reset(type->restrictions->enumeration);
- while (zend_hash_get_current_data(type->restrictions->enumeration, (void**)&tmp) == SUCCESS) {
- sdl_serialize_resriction_char(*tmp, out);
- sdl_serialize_key(type->restrictions->enumeration, out);
- zend_hash_move_forward(type->restrictions->enumeration);
- }
- }
- } else {
- WSDL_CACHE_PUT_1(0, out);
- }
- if (type->elements) {
- i = zend_hash_num_elements(type->elements);
- } else {
- i = 0;
- }
- WSDL_CACHE_PUT_INT(i, out);
- if (i > 0) {
- sdlTypePtr *tmp;
-
- tmp_elements = emalloc(sizeof(HashTable));
- zend_hash_init(tmp_elements, 0, NULL, NULL, 0);
-
- zend_hash_internal_pointer_reset(type->elements);
- while (zend_hash_get_current_data(type->elements, (void**)&tmp) == SUCCESS) {
- sdl_serialize_key(type->elements, out);
- sdl_serialize_type(*tmp, tmp_encoders, tmp_types, out);
- zend_hash_add(tmp_elements, (char*)tmp, sizeof(*tmp), &i, sizeof(int), NULL);
- i--;
- zend_hash_move_forward(type->elements);
- }
- }
-
- if (type->attributes) {
- i = zend_hash_num_elements(type->attributes);
- } else {
- i = 0;
- }
- WSDL_CACHE_PUT_INT(i, out);
- if (i > 0) {
- sdlAttributePtr *tmp;
- zend_hash_internal_pointer_reset(type->attributes);
- while (zend_hash_get_current_data(type->attributes, (void**)&tmp) == SUCCESS) {
- sdl_serialize_key(type->attributes, out);
- sdl_serialize_attribute(*tmp, tmp_encoders, out);
- zend_hash_move_forward(type->attributes);
- }
- }
- if (type->model) {
- WSDL_CACHE_PUT_1(1, out);
- sdl_serialize_model(type->model, tmp_types, tmp_elements, out);
- } else {
- WSDL_CACHE_PUT_1(0, out);
- }
- if (tmp_elements != NULL) {
- zend_hash_destroy(tmp_elements);
- efree(tmp_elements);
- }
-}
-
-static void sdl_serialize_encoder(encodePtr enc, HashTable *tmp_types, smart_str *out)
-{
- WSDL_CACHE_PUT_INT(enc->details.type, out);
- sdl_serialize_string(enc->details.type_str, out);
- sdl_serialize_string(enc->details.ns, out);
- sdl_serialize_type_ref(enc->details.sdl_type, tmp_types, out);
-}
-
-static void sdl_serialize_parameters(HashTable *ht, HashTable *tmp_encoders, HashTable *tmp_types, smart_str *out)
-{
- int i;
-
- if (ht) {
- i = zend_hash_num_elements(ht);
- } else {
- i = 0;
- }
- WSDL_CACHE_PUT_INT(i, out);
- if (i > 0) {
- sdlParamPtr *tmp;
-
- zend_hash_internal_pointer_reset(ht);
- while (zend_hash_get_current_data(ht, (void**)&tmp) == SUCCESS) {
- sdl_serialize_key(ht, out);
- sdl_serialize_string((*tmp)->paramName, out);
- WSDL_CACHE_PUT_INT((*tmp)->order, out);
- sdl_serialize_encoder_ref((*tmp)->encode, tmp_encoders, out);
- sdl_serialize_type_ref((*tmp)->element, tmp_types, out);
- zend_hash_move_forward(ht);
- }
- }
-}
-
-static void sdl_serialize_soap_body(sdlSoapBindingFunctionBodyPtr body, HashTable *tmp_encoders, HashTable *tmp_types, smart_str *out)
-{
- int i, j;
-
- WSDL_CACHE_PUT_1(body->use, out);
- if (body->use == SOAP_ENCODED) {
- WSDL_CACHE_PUT_1(body->encodingStyle, out);
- }
- sdl_serialize_string(body->ns, out);
- sdl_serialize_string(body->parts, out);
- if (body->headers) {
- i = zend_hash_num_elements(body->headers);
- } else {
- i = 0;
- }
- WSDL_CACHE_PUT_INT(i, out);
- if (i > 0) {
- sdlSoapBindingFunctionHeaderPtr *tmp;
- zend_hash_internal_pointer_reset(body->headers);
- while (zend_hash_get_current_data(body->headers, (void**)&tmp) == SUCCESS) {
- sdl_serialize_key(body->headers, out);
- WSDL_CACHE_PUT_1((*tmp)->use, out);
- if ((*tmp)->use == SOAP_ENCODED) {
- WSDL_CACHE_PUT_1((*tmp)->encodingStyle, out);
- }
- sdl_serialize_string((*tmp)->name, out);
- sdl_serialize_string((*tmp)->ns, out);
- sdl_serialize_encoder_ref((*tmp)->encode, tmp_encoders, out);
- sdl_serialize_type_ref((*tmp)->element, tmp_types, out);
- if ((*tmp)->headerfaults) {
- j = zend_hash_num_elements((*tmp)->headerfaults);
- } else {
- j = 0;
- }
- WSDL_CACHE_PUT_INT(j, out);
- if (j > 0) {
- sdlSoapBindingFunctionHeaderPtr *tmp2;
- zend_hash_internal_pointer_reset((*tmp)->headerfaults);
- while (zend_hash_get_current_data((*tmp)->headerfaults, (void**)&tmp2) == SUCCESS) {
- sdl_serialize_key((*tmp)->headerfaults, out);
- WSDL_CACHE_PUT_1((*tmp2)->use, out);
- if ((*tmp2)->use == SOAP_ENCODED) {
- WSDL_CACHE_PUT_1((*tmp2)->encodingStyle, out);
- }
- sdl_serialize_string((*tmp2)->name, out);
- sdl_serialize_string((*tmp2)->ns, out);
- sdl_serialize_encoder_ref((*tmp2)->encode, tmp_encoders, out);
- sdl_serialize_type_ref((*tmp2)->element, tmp_types, out);
- zend_hash_move_forward((*tmp)->headerfaults);
- }
- }
- zend_hash_move_forward(body->headers);
- }
- }
-}
-
-static void add_sdl_to_cache(const char *fn, const char *uri, time_t t, sdlPtr sdl)
-{
- smart_str buf = {0};
- smart_str *out = &buf;
- int i;
- int type_num = 1;
- int encoder_num = 1;
- int f;
- encodePtr enc;
- HashTable tmp_types;
- HashTable tmp_encoders;
- HashTable tmp_bindings;
- HashTable tmp_functions;
-
-#ifdef ZEND_WIN32
- f = open(fn,O_CREAT|O_WRONLY|O_EXCL|O_BINARY,S_IREAD|S_IWRITE);
-#else
- f = open(fn,O_CREAT|O_WRONLY|O_EXCL|O_BINARY,S_IREAD|S_IWRITE|S_IROTH|S_IWOTH|S_IRGRP|S_IWGRP);
-#endif
- if (f < 0) {return;}
-
- zend_hash_init(&tmp_types, 0, NULL, NULL, 0);
- zend_hash_init(&tmp_encoders, 0, NULL, NULL, 0);
- zend_hash_init(&tmp_bindings, 0, NULL, NULL, 0);
- zend_hash_init(&tmp_functions, 0, NULL, NULL, 0);
-
- WSDL_CACHE_PUT_N("wsdl", 4, out);
- WSDL_CACHE_PUT_1(WSDL_CACHE_VERSION,out);
- WSDL_CACHE_PUT_1(0,out);
- WSDL_CACHE_PUT_N(&t, sizeof(t), out);
-
- sdl_serialize_string(uri, out);
- sdl_serialize_string(sdl->source, out);
- sdl_serialize_string(sdl->target_ns, out);
-
- if (sdl->groups) {
- i = zend_hash_num_elements(sdl->groups);
- } else {
- i = 0;
- }
- WSDL_CACHE_PUT_INT(i, out);
- if (i > 0) {
- sdlTypePtr *tmp;
-
- zend_hash_internal_pointer_reset(sdl->groups);
- while (zend_hash_get_current_data(sdl->groups, (void**)&tmp) == SUCCESS) {
- zend_hash_add(&tmp_types, (char*)tmp, sizeof(*tmp), (void**)&type_num, sizeof(type_num), NULL);
- ++type_num;
- zend_hash_move_forward(sdl->groups);
- }
- }
-
- if (sdl->types) {
- i = zend_hash_num_elements(sdl->types);
- } else {
- i = 0;
- }
- WSDL_CACHE_PUT_INT(i, out);
- if (i > 0) {
- sdlTypePtr *tmp;
-
- zend_hash_internal_pointer_reset(sdl->types);
- while (zend_hash_get_current_data(sdl->types, (void**)&tmp) == SUCCESS) {
- zend_hash_add(&tmp_types, (char*)tmp, sizeof(*tmp), (void**)&type_num, sizeof(type_num), NULL);
- ++type_num;
- zend_hash_move_forward(sdl->types);
- }
- }
-
- if (sdl->elements) {
- i = zend_hash_num_elements(sdl->elements);
- } else {
- i = 0;
- }
- WSDL_CACHE_PUT_INT(i, out);
- if (i > 0) {
- sdlTypePtr *tmp;
-
- zend_hash_internal_pointer_reset(sdl->elements);
- while (zend_hash_get_current_data(sdl->elements, (void**)&tmp) == SUCCESS) {
- zend_hash_add(&tmp_types, (char*)tmp, sizeof(*tmp), (void**)&type_num, sizeof(type_num), NULL);
- ++type_num;
- zend_hash_move_forward(sdl->elements);
- }
- }
-
- if (sdl->encoders) {
- i = zend_hash_num_elements(sdl->encoders);
- } else {
- i = 0;
- }
- WSDL_CACHE_PUT_INT(i, out);
- if (i > 0) {
- encodePtr *tmp;
-
- zend_hash_internal_pointer_reset(sdl->encoders);
- while (zend_hash_get_current_data(sdl->encoders, (void**)&tmp) == SUCCESS) {
- zend_hash_add(&tmp_encoders, (char*)tmp, sizeof(*tmp), (void**)&encoder_num, sizeof(encoder_num), NULL);
- ++encoder_num;
- zend_hash_move_forward(sdl->encoders);
- }
- }
- enc = defaultEncoding;
- while (enc->details.type != END_KNOWN_TYPES) {
- zend_hash_add(&tmp_encoders, (char*)&enc, sizeof(encodePtr), (void**)&encoder_num, sizeof(encoder_num), NULL);
- enc++;
- ++encoder_num;
- }
-
- if (sdl->groups) {
- sdlTypePtr *tmp;
- zend_hash_internal_pointer_reset(sdl->groups);
- while (zend_hash_get_current_data(sdl->groups, (void**)&tmp) == SUCCESS) {
- sdl_serialize_key(sdl->groups, out);
- sdl_serialize_type(*tmp, &tmp_encoders, &tmp_types, out);
- zend_hash_move_forward(sdl->groups);
- }
- }
-
- if (sdl->types) {
- sdlTypePtr *tmp;
- zend_hash_internal_pointer_reset(sdl->types);
- while (zend_hash_get_current_data(sdl->types, (void**)&tmp) == SUCCESS) {
- sdl_serialize_key(sdl->types, out);
- sdl_serialize_type(*tmp, &tmp_encoders, &tmp_types, out);
- zend_hash_move_forward(sdl->types);
- }
- }
-
- if (sdl->elements) {
- sdlTypePtr *tmp;
- zend_hash_internal_pointer_reset(sdl->elements);
- while (zend_hash_get_current_data(sdl->elements, (void**)&tmp) == SUCCESS) {
- sdl_serialize_key(sdl->elements, out);
- sdl_serialize_type(*tmp, &tmp_encoders, &tmp_types, out);
- zend_hash_move_forward(sdl->elements);
- }
- }
-
- if (sdl->encoders) {
- encodePtr *tmp;
- zend_hash_internal_pointer_reset(sdl->encoders);
- while (zend_hash_get_current_data(sdl->encoders, (void**)&tmp) == SUCCESS) {
- sdl_serialize_key(sdl->encoders, out);
- sdl_serialize_encoder(*tmp, &tmp_types, out);
- zend_hash_move_forward(sdl->encoders);
- }
- }
-
- /* serialize bindings */
- if (sdl->bindings) {
- i = zend_hash_num_elements(sdl->bindings);
- } else {
- i = 0;
- }
- WSDL_CACHE_PUT_INT(i, out);
- if (i > 0) {
- sdlBindingPtr *tmp;
- int binding_num = 1;
-
- zend_hash_internal_pointer_reset(sdl->bindings);
- while (zend_hash_get_current_data(sdl->bindings, (void**)&tmp) == SUCCESS) {
- sdl_serialize_key(sdl->bindings, out);
- sdl_serialize_string((*tmp)->name, out);
- sdl_serialize_string((*tmp)->location, out);
- WSDL_CACHE_PUT_1((*tmp)->bindingType,out);
- if ((*tmp)->bindingType == BINDING_SOAP && (*tmp)->bindingAttributes != NULL) {
- sdlSoapBindingPtr binding = (sdlSoapBindingPtr)(*tmp)->bindingAttributes;
- WSDL_CACHE_PUT_1(binding->style, out);
- WSDL_CACHE_PUT_1(binding->transport, out);
- } else {
- WSDL_CACHE_PUT_1(0,out);
- }
-
- zend_hash_add(&tmp_bindings, (char*)tmp, sizeof(*tmp), (void**)&binding_num, sizeof(binding_num), NULL);
- binding_num++;
- zend_hash_move_forward(sdl->bindings);
- }
- }
-
- /* serialize functions */
- i = zend_hash_num_elements(&sdl->functions);
- WSDL_CACHE_PUT_INT(i, out);
- if (i > 0) {
- sdlFunctionPtr *tmp;
- int *binding_num;
- int function_num = 1;
-
- zend_hash_internal_pointer_reset(&sdl->functions);
- while (zend_hash_get_current_data(&sdl->functions, (void**)&tmp) == SUCCESS) {
- sdl_serialize_key(&sdl->functions, out);
- sdl_serialize_string((*tmp)->functionName, out);
- sdl_serialize_string((*tmp)->requestName, out);
- sdl_serialize_string((*tmp)->responseName, out);
-
- if ((*tmp)->binding == NULL ||
- zend_hash_find(&tmp_bindings,(char*)&(*tmp)->binding,sizeof((*tmp)->binding), (void**)&binding_num) != SUCCESS) {
- }
- WSDL_CACHE_PUT_INT(*binding_num, out);
- if (binding_num >= 0) {
- if ((*tmp)->binding->bindingType == BINDING_SOAP && (*tmp)->bindingAttributes != NULL) {
- sdlSoapBindingFunctionPtr binding = (sdlSoapBindingFunctionPtr)(*tmp)->bindingAttributes;
- WSDL_CACHE_PUT_1(binding->style, out);
- sdl_serialize_string(binding->soapAction, out);
- sdl_serialize_soap_body(&binding->input, &tmp_encoders, &tmp_types, out);
- sdl_serialize_soap_body(&binding->output, &tmp_encoders, &tmp_types, out);
- } else {
- WSDL_CACHE_PUT_1(0,out);
- }
- }
- sdl_serialize_parameters((*tmp)->requestParameters, &tmp_encoders, &tmp_types, out);
- sdl_serialize_parameters((*tmp)->responseParameters, &tmp_encoders, &tmp_types, out);
-
- if ((*tmp)->faults) {
- sdlFaultPtr *fault;
-
- WSDL_CACHE_PUT_INT(zend_hash_num_elements((*tmp)->faults), out);
-
- zend_hash_internal_pointer_reset((*tmp)->faults);
- while (zend_hash_get_current_data((*tmp)->faults, (void**)&fault) == SUCCESS) {
- sdl_serialize_key((*tmp)->faults, out);
- sdl_serialize_string((*fault)->name, out);
- sdl_serialize_parameters((*fault)->details, &tmp_encoders, &tmp_types, out);
- if ((*tmp)->binding->bindingType == BINDING_SOAP && (*fault)->bindingAttributes != NULL) {
- sdlSoapBindingFunctionFaultPtr binding = (sdlSoapBindingFunctionFaultPtr)(*fault)->bindingAttributes;
- WSDL_CACHE_PUT_1(binding->use, out);
- if (binding->use == SOAP_ENCODED) {
- WSDL_CACHE_PUT_1(binding->encodingStyle, out);
- }
- sdl_serialize_string(binding->ns, out);
- } else {
- WSDL_CACHE_PUT_1(0, out);
- }
- zend_hash_move_forward((*tmp)->faults);
- }
- } else {
- WSDL_CACHE_PUT_INT(0, out);
- }
-
- zend_hash_add(&tmp_functions, (char*)tmp, sizeof(*tmp), (void**)&function_num, sizeof(function_num), NULL);
- function_num++;
- zend_hash_move_forward(&sdl->functions);
- }
- }
-
- /* serialize requests */
- if (sdl->requests) {
- i = zend_hash_num_elements(sdl->requests);
- } else {
- i = 0;
- }
- WSDL_CACHE_PUT_INT(i, out);
- if (i > 0) {
- sdlFunctionPtr *tmp;
- int *function_num;
-
- zend_hash_internal_pointer_reset(sdl->requests);
- while (zend_hash_get_current_data(sdl->requests, (void**)&tmp) == SUCCESS) {
- if (zend_hash_find(&tmp_functions, (char*)tmp, sizeof(*tmp), (void**)&function_num) != SUCCESS) {
- }
- WSDL_CACHE_PUT_INT(*function_num, out);
- sdl_serialize_key(sdl->requests, out);
- zend_hash_move_forward(sdl->requests);
- }
- }
-
- write(f, buf.c, buf.len);
- close(f);
- smart_str_free(&buf);
- zend_hash_destroy(&tmp_functions);
- zend_hash_destroy(&tmp_bindings);
- zend_hash_destroy(&tmp_encoders);
- zend_hash_destroy(&tmp_types);
-}
-
-sdlPtr get_sdl(char *uri TSRMLS_DC)
-{
- sdlPtr sdl = NULL;
- char* old_error_code = SOAP_GLOBAL(error_code);
-
- SOAP_GLOBAL(error_code) = "WSDL";
-
- if (SOAP_GLOBAL(cache_enabled)) {
- char fn[MAXPATHLEN];
-
- if (strchr(uri,':') != NULL || IS_ABSOLUTE_PATH(uri,strlen(uri))) {
- strcpy(fn, uri);
- } else if (VCWD_REALPATH(uri, fn) == NULL) {
- sdl = load_wsdl(uri);
- }
- if (sdl == NULL) {
- char* key;
- time_t t = time(0);
- char md5str[33];
- PHP_MD5_CTX context;
- unsigned char digest[16];
- int len = strlen(SOAP_GLOBAL(cache_dir));
-
- md5str[0] = '\0';
- PHP_MD5Init(&context);
- PHP_MD5Update(&context, fn, strlen(fn));
- PHP_MD5Final(digest, &context);
- make_digest(md5str, digest);
- key = emalloc(len+sizeof("/wsdl-")-1+sizeof(md5str));
- memcpy(key,SOAP_GLOBAL(cache_dir),len);
- memcpy(key+len,"/wsdl-",sizeof("/wsdl-")-1);
- memcpy(key+len+sizeof("/wsdl-")-1,md5str,sizeof(md5str));
-
- if ((sdl = get_sdl_from_cache(key, fn, t-SOAP_GLOBAL(cache_ttl))) == NULL) {
- sdl = load_wsdl(fn);
- if (sdl != NULL) {
- add_sdl_to_cache(key, fn, t, sdl);
- }
- }
- efree(key);
- }
- } else {
- sdl = load_wsdl(uri);
- }
- SOAP_GLOBAL(error_code) = old_error_code;
- return sdl;
-}
-
-/* Deletes */
-void delete_sdl(void *handle)
-{
- sdlPtr tmp = (sdlPtr)handle;
-
- zend_hash_destroy(&tmp->functions);
- if (tmp->source) {
- efree(tmp->source);
- }
- if (tmp->target_ns) {
- efree(tmp->target_ns);
- }
- if (tmp->elements) {
- zend_hash_destroy(tmp->elements);
- efree(tmp->elements);
- }
- if (tmp->encoders) {
- zend_hash_destroy(tmp->encoders);
- efree(tmp->encoders);
- }
- if (tmp->types) {
- zend_hash_destroy(tmp->types);
- efree(tmp->types);
- }
- if (tmp->groups) {
- zend_hash_destroy(tmp->groups);
- efree(tmp->groups);
- }
- if (tmp->bindings) {
- zend_hash_destroy(tmp->bindings);
- efree(tmp->bindings);
- }
- if (tmp->requests) {
- zend_hash_destroy(tmp->requests);
- efree(tmp->requests);
- }
- efree(tmp);
-}
-
-static void delete_binding(void *data)
-{
- sdlBindingPtr binding = *((sdlBindingPtr*)data);
-
- if (binding->location) {
- efree(binding->location);
- }
- if (binding->name) {
- efree(binding->name);
- }
-
- if (binding->bindingType == BINDING_SOAP) {
- sdlSoapBindingPtr soapBind = binding->bindingAttributes;
- if (soapBind) {
- efree(soapBind);
- }
- }
- efree(binding);
-}
-
-static void delete_sdl_soap_binding_function_body(sdlSoapBindingFunctionBody body)
-{
- if (body.ns) {
- efree(body.ns);
- }
- if (body.parts) {
- efree(body.parts);
- }
- if (body.headers) {
- zend_hash_destroy(body.headers);
- efree(body.headers);
- }
-}
-
-static void delete_function(void *data)
-{
- sdlFunctionPtr function = *((sdlFunctionPtr*)data);
-
- if (function->functionName) {
- efree(function->functionName);
- }
- if (function->requestName) {
- efree(function->requestName);
- }
- if (function->responseName) {
- efree(function->responseName);
- }
- if (function->requestParameters) {
- zend_hash_destroy(function->requestParameters);
- efree(function->requestParameters);
- }
- if (function->responseParameters) {
- zend_hash_destroy(function->responseParameters);
- efree(function->responseParameters);
- }
- if (function->faults) {
- zend_hash_destroy(function->faults);
- efree(function->faults);
- }
-
- if (function->bindingAttributes &&
- function->binding && function->binding->bindingType == BINDING_SOAP) {
- sdlSoapBindingFunctionPtr soapFunction = function->bindingAttributes;
- if (soapFunction->soapAction) {
- efree(soapFunction->soapAction);
- }
- delete_sdl_soap_binding_function_body(soapFunction->input);
- delete_sdl_soap_binding_function_body(soapFunction->output);
- efree(soapFunction);
- }
- efree(function);
-}
-
-static void delete_parameter(void *data)
-{
- sdlParamPtr param = *((sdlParamPtr*)data);
- if (param->paramName) {
- efree(param->paramName);
- }
- efree(param);
-}
-
-static void delete_header(void *data)
-{
- sdlSoapBindingFunctionHeaderPtr hdr = *((sdlSoapBindingFunctionHeaderPtr*)data);
- if (hdr->name) {
- efree(hdr->name);
- }
- if (hdr->ns) {
- efree(hdr->ns);
- }
- if (hdr->headerfaults) {
- zend_hash_destroy(hdr->headerfaults);
- efree(hdr->headerfaults);
- }
- efree(hdr);
-}
-
-static void delete_fault(void *data)
-{
- sdlFaultPtr fault = *((sdlFaultPtr*)data);
- if (fault->name) {
- efree(fault->name);
- }
- if (fault->details) {
- zend_hash_destroy(fault->details);
- efree(fault->details);
- }
- if (fault->bindingAttributes) {
- sdlSoapBindingFunctionFaultPtr binding = (sdlSoapBindingFunctionFaultPtr)fault->bindingAttributes;
-
- if (binding->ns) {
- efree(binding->ns);
- }
- efree(fault->bindingAttributes);
- }
- efree(fault);
-}
-
-static void delete_document(void *doc_ptr)
-{
- xmlDocPtr doc = *((xmlDocPtr*)doc_ptr);
- xmlFreeDoc(doc);
-}
diff --git a/ext/soap/php_sdl.h b/ext/soap/php_sdl.h
deleted file mode 100644
index 77bb8d2b29..0000000000
--- a/ext/soap/php_sdl.h
+++ /dev/null
@@ -1,263 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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. |
- +----------------------------------------------------------------------+
- | Authors: Brad Lafountain <rodif_bl@yahoo.com> |
- | Shane Caraveo <shane@caraveo.com> |
- | Dmitry Stogov <dmitry@zend.com> |
- +----------------------------------------------------------------------+
-*/
-/* $Id$ */
-
-#ifndef PHP_SDL_H
-#define PHP_SDL_H
-
-#define XSD_WHITESPACE_COLLAPSE 1
-#define XSD_WHITESPACE_PRESERVE 1
-#define XSD_WHITESPACE_REPLACE 1
-
-typedef enum _sdlBindingType {
- BINDING_SOAP = 1,
- BINDING_HTTP = 2
-} sdlBindingType;
-
-typedef enum _sdlEncodingStyle {
- SOAP_RPC = 1,
- SOAP_DOCUMENT = 2
-} sdlEncodingStyle;
-
-typedef enum _sdlRpcEncodingStyle {
- SOAP_ENCODING_DEFAULT = 0,
- SOAP_ENCODING_1_1 = 1,
- SOAP_ENCODING_1_2 = 2
-} sdlRpcEncodingStyle;
-
-typedef enum _sdlEncodingUse {
- SOAP_ENCODED = 1,
- SOAP_LITERAL = 2
-} sdlEncodingUse;
-
-typedef enum _sdlTransport {
- SOAP_TRANSPORT_HTTP = 1
-} sdlTransport;
-
-struct _sdl {
- HashTable functions; /* array of sdlFunction */
- HashTable *types; /* array of sdlTypesPtr */
- HashTable *elements; /* array of sdlTypesPtr */
- HashTable *encoders; /* array of encodePtr */
- HashTable *bindings; /* array of sdlBindings (key'd by name) */
- HashTable *requests; /* array of sdlFunction (references) */
- HashTable *groups; /* array of sdlTypesPtr */
- char *target_ns;
- char *source;
-};
-
-typedef struct sdlCtx {
- sdlPtr sdl;
-
- HashTable docs; /* array of xmlDocPtr */
-
- HashTable messages; /* array of xmlNodePtr */
- HashTable bindings; /* array of xmlNodePtr */
- HashTable portTypes; /* array of xmlNodePtr */
- HashTable services; /* array of xmlNodePtr */
-
- HashTable *attributes; /* array of sdlAttributePtr */
- HashTable *attributeGroups; /* array of sdlTypesPtr */
-} sdlCtx;
-
-struct _sdlBinding {
- char *name;
- char *location;
- sdlBindingType bindingType;
- void *bindingAttributes; /* sdlSoapBindingPtr */
-};
-
-/* Soap Binding Specfic stuff */
-struct _sdlSoapBinding {
- sdlEncodingStyle style;
- sdlTransport transport; /* not implemented yet */
-};
-
-typedef struct _sdlSoapBindingFunctionHeader {
- char *name;
- char *ns;
- sdlEncodingUse use;
- sdlTypePtr element;
- encodePtr encode;
- sdlRpcEncodingStyle encodingStyle; /* not implemented yet */
- HashTable *headerfaults; /* array of sdlSoapBindingFunctionHeaderPtr */
-} sdlSoapBindingFunctionHeader, *sdlSoapBindingFunctionHeaderPtr;
-
-typedef struct _sdlSoapBindingFunctionFault {
- char *ns;
- sdlEncodingUse use;
- sdlRpcEncodingStyle encodingStyle; /* not implemented yet */
-} sdlSoapBindingFunctionFault, *sdlSoapBindingFunctionFaultPtr;
-
-struct _sdlSoapBindingFunctionBody {
- char *ns;
- sdlEncodingUse use;
- char *parts; /* not implemented yet */
- sdlRpcEncodingStyle encodingStyle; /* not implemented yet */
- HashTable *headers; /* array of sdlSoapBindingFunctionHeaderPtr */
-};
-
-struct _sdlSoapBindingFunction {
- char *soapAction;
- sdlEncodingStyle style;
-
- sdlSoapBindingFunctionBody input;
- sdlSoapBindingFunctionBody output;
-};
-
-struct _sdlRestrictionInt {
- int value;
- char fixed;
-};
-
-struct _sdlRestrictionChar {
- char *value;
- char fixed;
-};
-
-struct _sdlRestrictions {
- HashTable *enumeration; /* array of sdlRestrictionCharPtr */
- sdlRestrictionIntPtr minExclusive;
- sdlRestrictionIntPtr minInclusive;
- sdlRestrictionIntPtr maxExclusive;
- sdlRestrictionIntPtr maxInclusive;
- sdlRestrictionIntPtr totalDigits;
- sdlRestrictionIntPtr fractionDigits;
- sdlRestrictionIntPtr length;
- sdlRestrictionIntPtr minLength;
- sdlRestrictionIntPtr maxLength;
- sdlRestrictionCharPtr whiteSpace;
- sdlRestrictionCharPtr pattern;
-};
-
-typedef enum _sdlContentKind {
- XSD_CONTENT_ELEMENT,
- XSD_CONTENT_SEQUENCE,
- XSD_CONTENT_ALL,
- XSD_CONTENT_CHOICE,
- XSD_CONTENT_GROUP_REF,
- XSD_CONTENT_GROUP
-} sdlContentKind;
-
-
-typedef struct _sdlContentModel sdlContentModel, *sdlContentModelPtr;
-
-struct _sdlContentModel {
- sdlContentKind kind;
- int min_occurs;
- int max_occurs;
- union {
- sdlTypePtr element; /* pointer to element */
- sdlTypePtr group; /* pointer to group */
- HashTable *content; /* array of sdlContentModel for sequnce,all,choice*/
- char *group_ref; /* reference to group */
- } u;
-};
-
-typedef enum _sdlTypeKind {
- XSD_TYPEKIND_SIMPLE,
- XSD_TYPEKIND_LIST,
- XSD_TYPEKIND_UNION,
- XSD_TYPEKIND_COMPLEX,
- XSD_TYPEKIND_RESTRICTION,
- XSD_TYPEKIND_EXTENSION
-} sdlTypeKind;
-
-struct _sdlType {
- sdlTypeKind kind;
- char *name;
- char *namens;
- char nillable;
- HashTable *elements; /* array of sdlTypePtr */
- HashTable *attributes; /* array of sdlAttributePtr */
- sdlRestrictionsPtr restrictions;
- encodePtr encode;
- sdlContentModelPtr model;
- char *def;
- char *fixed;
- char *ref;
-};
-
-struct _sdlParam {
- int order;
- sdlTypePtr element;
- encodePtr encode;
- char *paramName;
-};
-
-typedef struct _sdlFault {
- char *name;
- HashTable *details; /* array of sdlParamPtr */
- void *bindingAttributes; /* sdlSoapBindingFunctionFaultPtr */
-} sdlFault, *sdlFaultPtr;
-
-struct _sdlFunction {
- char *functionName;
- char *requestName;
- char *responseName;
- HashTable *requestParameters; /* array of sdlParamPtr */
- HashTable *responseParameters; /* array of sdlParamPtr (this should only be one) */
- struct _sdlBinding *binding;
- void *bindingAttributes; /* sdlSoapBindingFunctionPtr */
- HashTable *faults; /* array of sdlFaultPtr */
-};
-
-typedef enum _sdlUse {
- XSD_USE_DEFAULT,
- XSD_USE_OPTIONAL,
- XSD_USE_PROHIBITED,
- XSD_USE_REQUIRED
-} sdlUse;
-
-typedef enum _sdlForm {
- XSD_FORM_DEFAULT,
- XSD_FORM_QUALIFIED,
- XSD_FORM_UNQUALIFIED
-} sdlForm;
-
-typedef struct _sdlExtraAttribute {
- char *ns;
- char *val;
-} sdlExtraAttribute, *sdlExtraAttributePtr;
-
-struct _sdlAttribute {
- char *name;
- char *namens;
- char *ref;
- char *def;
- char *fixed;
- sdlForm form;
- sdlUse use;
- HashTable *extraAttributes; /* array of sdlExtraAttribute */
- encodePtr encode;
-};
-
-sdlPtr get_sdl(char *uri TSRMLS_DC);
-
-encodePtr get_encoder_from_prefix(sdlPtr sdl, xmlNodePtr data, const char *type);
-encodePtr get_encoder(sdlPtr sdl, const char *ns, const char *type);
-encodePtr get_encoder_ex(sdlPtr sdl, const char *nscat, int len);
-
-sdlBindingPtr get_binding_from_type(sdlPtr sdl, int type);
-sdlBindingPtr get_binding_from_name(sdlPtr sdl, char *name, char *ns);
-
-void delete_sdl(void *handle);
-
-#endif
diff --git a/ext/soap/php_soap.dsp b/ext/soap/php_soap.dsp
deleted file mode 100644
index ef0c09f29b..0000000000
--- a/ext/soap/php_soap.dsp
+++ /dev/null
@@ -1,148 +0,0 @@
-# Microsoft Developer Studio Project File - Name="php_soap" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=php_soap - Win32 Debug_TS
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "php_soap.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "php_soap.mak" CFG="php_soap - Win32 Debug_TS"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "php_soap - Win32 Release_TS" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "php_soap - Win32 Debug_TS" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "php_soap - Win32 Release_TS"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release_TS"
-# PROP BASE Intermediate_Dir "Release_TS"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release_TS"
-# PROP Intermediate_Dir "Release_TS"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "PHP_SOAP_EXPORTS" /YX /FD /c
-# ADD CPP /nologo /MT /W3 /GX /O2 /I "..\.." /I "..\..\Zend" /I "..\..\TSRM" /I "..\..\main" /I "..\..\..\libxml2-2.4.12\include" /I "..\..\bind" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "PHP_SOAP_EXPORTSWS" /D "PHP_SOAP_EXPORTS" /D "ZEND_WIN32" /D "PHP_WIN32" /D "ZTS" /D ZEND_DEBUG=0 /D "COMPILE_DL_SOAP" /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386
-# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib php5ts.lib libxml2.lib wsock32.lib resolv.lib /nologo /dll /machine:I386 /out:"..\..\Release_TS\php_soap.dll" /libpath:"..\..\\" /libpath:"..\..\..\libxml2-2.4.12\lib" /libpath:"..\..\Release_TS"
-
-!ELSEIF "$(CFG)" == "php_soap - Win32 Debug_TS"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug_TS"
-# PROP BASE Intermediate_Dir "Debug_TS"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug_TS"
-# PROP Intermediate_Dir "Debug_TS"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "PHP_SOAP_EXPORTS" /YX /FD /GZ /c
-# ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "..\.." /I "..\..\Zend" /I "..\..\TSRM" /I "..\..\main" /I "..\..\..\libxml2-2.4.12\include" /I "..\..\bind" /D "WS" /D "_MBCS" /D "_USRDLL" /D "PHP_SOAP_EXPORTS" /D "WIN32" /D "ZEND_WIN32" /D "PHP_WIN32" /D "ZTS" /D ZEND_DEBUG=1 /D "COMPILE_DL_SOAP" /FR"Debug_TS/" /Fp"Debug_TS/soap.pch" /YX /Fo"Debug_TS/" /Fd"Debug_TS/" /FD /c
-# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib php5ts_debug.lib libxml2.lib wsock32.lib resolv.lib /nologo /dll /debug /machine:I386 /out:"..\..\Debug_TS\php_soap.dll" /pdbtype:sept /libpath:"..\..\\" /libpath:"..\..\..\libxml2-2.4.12\lib" /libpath:"..\..\Debug_TS"
-# SUBTRACT LINK32 /pdb:none /incremental:no
-
-!ENDIF
-
-# Begin Target
-
-# Name "php_soap - Win32 Release_TS"
-# Name "php_soap - Win32 Debug_TS"
-# Begin Group "Source Files"
-
-# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
-# Begin Source File
-
-SOURCE=.\php_encoding.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\php_http.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\php_schema.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\php_sdl.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\php_xml.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\soap.c
-# End Source File
-# End Group
-# Begin Group "Header Files"
-
-# PROP Default_Filter "h;hpp;hxx;hm;inl"
-# Begin Source File
-
-SOURCE=.\php_encoding.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\php_http.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\php_schema.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\php_sdl.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\php_soap.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\php_xml.h
-# End Source File
-# End Group
-# End Target
-# End Project
diff --git a/ext/soap/php_soap.h b/ext/soap/php_soap.h
deleted file mode 100644
index 7b631f9578..0000000000
--- a/ext/soap/php_soap.h
+++ /dev/null
@@ -1,202 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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. |
- +----------------------------------------------------------------------+
- | Authors: Brad Lafountain <rodif_bl@yahoo.com> |
- | Shane Caraveo <shane@caraveo.com> |
- | Dmitry Stogov <dmitry@zend.com> |
- +----------------------------------------------------------------------+
-*/
-/* $Id$ */
-
-#ifndef PHP_SOAP_H
-#define PHP_SOAP_H
-
-#include "php.h"
-#include "php_globals.h"
-#include "ext/standard/info.h"
-#include "ext/standard/php_standard.h"
-#include "ext/session/php_session.h"
-#include "ext/standard/php_smart_str.h"
-#include "php_ini.h"
-#include "SAPI.h"
-#include <libxml/parser.h>
-#include <libxml/xpath.h>
-
-#ifdef HAVE_PHP_DOMXML
-# include "ext/domxml/php_domxml.h"
-#endif
-
-#ifndef PHP_HAVE_STREAMS
-# error You lose - must be compiled against PHP 4.3.0 or later
-#endif
-
-#ifndef PHP_WIN32
-# define TRUE 1
-# define FALSE 0
-# define stricmp strcasecmp
-#endif
-
-extern int le_url;
-
-typedef struct _encodeType encodeType, *encodeTypePtr;
-typedef struct _encode encode, *encodePtr;
-
-typedef struct _sdl sdl, *sdlPtr;
-typedef struct _sdlRestrictionInt sdlRestrictionInt, *sdlRestrictionIntPtr;
-typedef struct _sdlRestrictionChar sdlRestrictionChar, *sdlRestrictionCharPtr;
-typedef struct _sdlRestrictions sdlRestrictions, *sdlRestrictionsPtr;
-typedef struct _sdlType sdlType, *sdlTypePtr;
-typedef struct _sdlParam sdlParam, *sdlParamPtr;
-typedef struct _sdlFunction sdlFunction, *sdlFunctionPtr;
-typedef struct _sdlAttribute sdlAttribute, *sdlAttributePtr;
-typedef struct _sdlBinding sdlBinding, *sdlBindingPtr;
-typedef struct _sdlSoapBinding sdlSoapBinding, *sdlSoapBindingPtr;
-typedef struct _sdlSoapBindingFunction sdlSoapBindingFunction, *sdlSoapBindingFunctionPtr;
-typedef struct _sdlSoapBindingFunctionBody sdlSoapBindingFunctionBody, *sdlSoapBindingFunctionBodyPtr;
-
-typedef struct _soapMapping soapMapping, *soapMappingPtr;
-typedef struct _soapService soapService, *soapServicePtr;
-
-#include "php_xml.h"
-#include "php_encoding.h"
-#include "php_sdl.h"
-#include "php_schema.h"
-#include "php_http.h"
-#include "php_packet_soap.h"
-
-struct _soapMapping {
- char *ns;
- char *ctype;
- int type;
-
- struct _map_functions {
- zval *to_xml_before;
- zval *to_xml;
- zval *to_xml_after;
- zval *to_zval_before;
- zval *to_zval;
- zval *to_zval_after;
- } map_functions;
-
- struct _map_class {
- int type;
- zend_class_entry *ce;
- } map_class;
-};
-
-struct _soapService {
- sdlPtr sdl;
-
- struct _soap_functions {
- HashTable *ft;
- int functions_all;
- } soap_functions;
-
- struct _soap_class {
- zend_class_entry *ce;
- zval **argv;
- int argc;
- int persistance;
- } soap_class;
-
- HashTable *mapping;
- int version;
- int type;
- char *actor;
- char *uri;
- xmlCharEncodingHandlerPtr encoding;
-};
-
-#define SOAP_CLASS 1
-#define SOAP_FUNCTIONS 2
-#define SOAP_FUNCTIONS_ALL 999
-
-#define SOAP_MAP_FUNCTION 1
-#define SOAP_MAP_CLASS 2
-
-#define SOAP_PERSISTENCE_SESSION 1
-#define SOAP_PERSISTENCE_REQUEST 2
-
-#define SOAP_1_1 1
-#define SOAP_1_2 2
-
-#define SOAP_ACTOR_NEXT 1
-#define SOAP_ACTOR_NONE 2
-#define SOAP_ACTOR_UNLIMATERECEIVER 3
-
-#define SOAP_1_1_ACTOR_NEXT "http://schemas.xmlsoap.org/soap/actor/next"
-
-#define SOAP_1_2_ACTOR_NEXT "http://www.w3.org/2003/05/soap-envelope/role/next"
-#define SOAP_1_2_ACTOR_NONE "http://www.w3.org/2003/05/soap-envelope/role/none"
-#define SOAP_1_2_ACTOR_UNLIMATERECEIVER "http://www.w3.org/2003/05/soap-envelope/role/ultimateReceiver"
-
-#define SOAP_COMPRESSION_ACCEPT 0x20
-#define SOAP_COMPRESSION_GZIP 0x00
-#define SOAP_COMPRESSION_DEFLATE 0x10
-
-ZEND_BEGIN_MODULE_GLOBALS(soap)
- HashTable defEncNs; /* mapping of default namespaces to prefixes */
- HashTable defEnc;
- HashTable defEncIndex;
- HashTable *overrides;
- int cur_uniq_ns;
- int soap_version;
- sdlPtr sdl;
- zend_bool use_soap_error_handler;
- char* error_code;
- zval* error_object;
- zend_bool cache_enabled;
- char* cache_dir;
- long cache_ttl;
- xmlCharEncodingHandlerPtr encoding;
-ZEND_END_MODULE_GLOBALS(soap)
-
-#ifdef PHP_WIN32
-#define PHP_SOAP_API __declspec(dllexport)
-#else
-#define PHP_SOAP_API
-#endif
-#ifdef ZTS
-#include "TSRM.h"
-#endif
-
-extern zend_module_entry soap_module_entry;
-#define soap_module_ptr &soap_module_entry
-#define phpext_soap_ptr soap_module_ptr
-
-ZEND_EXTERN_MODULE_GLOBALS(soap)
-
-#ifdef ZTS
-# define SOAP_GLOBAL(v) TSRMG(soap_globals_id, zend_soap_globals *, v)
-#else
-# define SOAP_GLOBAL(v) (soap_globals.v)
-#endif
-
-extern zend_class_entry* soap_var_class_entry;
-
-zval* add_soap_fault(zval *obj, char *fault_code, char *fault_string, char *fault_actor, zval *fault_detail TSRMLS_DC);
-
-#define soap_error0(severity, format) \
- php_error(severity, "SOAP-ERROR: " format)
-
-#define soap_error1(severity, format, param1) \
- php_error(severity, "SOAP-ERROR: " format, param1)
-
-#define soap_error2(severity, format, param1, param2) \
- php_error(severity, "SOAP-ERROR: " format, param1, param2)
-
-#define soap_error3(severity, format, param1, param2, param3) \
- php_error(severity, "SOAP-ERROR: " format, param1, param2, param3)
-
-#endif
diff --git a/ext/soap/php_xml.c b/ext/soap/php_xml.c
deleted file mode 100644
index 3746c805e1..0000000000
--- a/ext/soap/php_xml.c
+++ /dev/null
@@ -1,335 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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. |
- +----------------------------------------------------------------------+
- | Authors: Brad Lafountain <rodif_bl@yahoo.com> |
- | Shane Caraveo <shane@caraveo.com> |
- | Dmitry Stogov <dmitry@zend.com> |
- +----------------------------------------------------------------------+
-*/
-/* $Id$ */
-
-#include "php_soap.h"
-#include "libxml/parser.h"
-#include "libxml/parserInternals.h"
-
-/* Channel libxml file io layer through the PHP streams subsystem.
- * This allows use of ftps:// and https:// urls */
-
-static int is_blank(const char* str)
-{
- while (*str != '\0') {
- if (*str != ' ' && *str != 0x9 && *str != 0xa && *str != 0xd) {
- return 0;
- }
- str++;
- }
- return 1;
-}
-
-/* removes all empty text, comments and other insignoficant nodes */
-static void cleanup_xml_node(xmlNodePtr node)
-{
- xmlNodePtr trav;
- xmlNodePtr del = NULL;
-
- trav = node->children;
- while (trav != NULL) {
- if (del != NULL) {
- xmlUnlinkNode(del);
- xmlFreeNode(del);
- del = NULL;
- }
- if (trav->type == XML_TEXT_NODE) {
- if (is_blank(trav->content)) {
- del = trav;
- }
- } else if ((trav->type != XML_ELEMENT_NODE) &&
- (trav->type != XML_CDATA_SECTION_NODE)) {
- del = trav;
- } else if (trav->children != NULL) {
- cleanup_xml_node(trav);
- }
- trav = trav->next;
- }
- if (del != NULL) {
- xmlUnlinkNode(del);
- xmlFreeNode(del);
- }
-}
-
-static void soap_ignorableWhitespace(void *ctx, const xmlChar *ch, int len)
-{
-}
-
-static void soap_Comment(void *ctx, const xmlChar *value)
-{
-}
-
-xmlDocPtr soap_xmlParseFile(const char *filename)
-{
- xmlParserCtxtPtr ctxt = NULL;
- xmlDocPtr ret;
-
-/*
- xmlInitParser();
-*/
- ctxt = xmlCreateFileParserCtxt(filename);
- if (ctxt) {
- ctxt->keepBlanks = 0;
- ctxt->sax->ignorableWhitespace = soap_ignorableWhitespace;
- ctxt->sax->comment = soap_Comment;
- ctxt->sax->warning = NULL;
- ctxt->sax->error = NULL;
- /*ctxt->sax->fatalError = NULL;*/
- xmlParseDocument(ctxt);
- if (ctxt->wellFormed) {
- ret = ctxt->myDoc;
- if (ret->URL == NULL && ctxt->directory != NULL) {
- ret->URL = xmlStrdup(ctxt->directory);
- }
- } else {
- ret = NULL;
- xmlFreeDoc(ctxt->myDoc);
- ctxt->myDoc = NULL;
- }
- xmlFreeParserCtxt(ctxt);
- } else {
- ret = NULL;
- }
-
-/*
- xmlCleanupParser();
-*/
-
- if (ret) {
- cleanup_xml_node((xmlNodePtr)ret);
- }
- return ret;
-}
-
-xmlDocPtr soap_xmlParseMemory(const void *buf, size_t buf_size)
-{
- xmlParserCtxtPtr ctxt = NULL;
- xmlDocPtr ret;
-
-/*
- xmlInitParser();
-*/
- ctxt = xmlCreateMemoryParserCtxt(buf, buf_size);
- if (ctxt) {
- ctxt->sax->ignorableWhitespace = soap_ignorableWhitespace;
- ctxt->sax->comment = soap_Comment;
- ctxt->sax->warning = NULL;
- ctxt->sax->error = NULL;
- /*ctxt->sax->fatalError = NULL;*/
- xmlParseDocument(ctxt);
- if (ctxt->wellFormed) {
- ret = ctxt->myDoc;
- if (ret->URL == NULL && ctxt->directory != NULL) {
- ret->URL = xmlStrdup(ctxt->directory);
- }
- } else {
- ret = NULL;
- xmlFreeDoc(ctxt->myDoc);
- ctxt->myDoc = NULL;
- }
- xmlFreeParserCtxt(ctxt);
- } else {
- ret = NULL;
- }
-
-/*
- xmlCleanupParser();
-*/
-
-/*
- if (ret) {
- cleanup_xml_node((xmlNodePtr)ret);
- }
-*/
- return ret;
-}
-
-#ifndef ZEND_ENGINE_2
-int php_stream_xmlIO_match_wrapper(const char *filename)
-{
- TSRMLS_FETCH();
- return php_stream_locate_url_wrapper(filename, NULL, STREAM_LOCATE_WRAPPERS_ONLY TSRMLS_CC) ? 1 : 0;
-}
-
-void *php_stream_xmlIO_open_wrapper(const char *filename)
-{
- TSRMLS_FETCH();
- return php_stream_open_wrapper((char*)filename, "rb", ENFORCE_SAFE_MODE|REPORT_ERRORS, NULL);
-}
-
-int php_stream_xmlIO_read(void *context, char *buffer, int len)
-{
- TSRMLS_FETCH();
- return php_stream_read((php_stream*)context, buffer, len);
-}
-
-int php_stream_xmlIO_close(void *context)
-{
- TSRMLS_FETCH();
- return php_stream_close((php_stream*)context);
-}
-#endif
-
-xmlNsPtr attr_find_ns(xmlAttrPtr node)
-{
- if (node->ns) {
- return node->ns;
- } else if (node->parent->ns) {
- return node->parent->ns;
- } else {
- return xmlSearchNs(node->doc, node->parent, NULL);
- }
-}
-
-xmlNsPtr node_find_ns(xmlNodePtr node)
-{
- if (node->ns) {
- return node->ns;
- } else {
- return xmlSearchNs(node->doc, node, NULL);
- }
-}
-
-int attr_is_equal_ex(xmlAttrPtr node, char *name, char *ns)
-{
- if (name == NULL || strcmp(node->name, name) == 0) {
- if (ns) {
- xmlNsPtr nsPtr = attr_find_ns(node);
- if (nsPtr) {
- return (strcmp(nsPtr->href, ns) == 0);
- } else {
- return FALSE;
- }
- }
- return TRUE;
- }
- return FALSE;
-}
-
-int node_is_equal_ex(xmlNodePtr node, char *name, char *ns)
-{
- if (name == NULL || strcmp(node->name, name) == 0) {
- if (ns) {
- xmlNsPtr nsPtr = node_find_ns(node);
- if (nsPtr) {
- return (strcmp(nsPtr->href, ns) == 0);
- } else {
- return FALSE;
- }
- }
- return TRUE;
- }
- return FALSE;
-}
-
-
-xmlAttrPtr get_attribute_ex(xmlAttrPtr node, char *name, char *ns)
-{
- while (node!=NULL) {
- if (attr_is_equal_ex(node, name, ns)) {
- return node;
- }
- node = node->next;
- }
- return NULL;
-}
-
-xmlNodePtr get_node_ex(xmlNodePtr node, char *name, char *ns)
-{
- while (node!=NULL) {
- if (node_is_equal_ex(node, name, ns)) {
- return node;
- }
- node = node->next;
- }
- return NULL;
-}
-
-xmlNodePtr get_node_recurisve_ex(xmlNodePtr node, char *name, char *ns)
-{
- while (node != NULL) {
- if (node_is_equal_ex(node, name, ns)) {
- return node;
- } else if (node->children != NULL) {
- xmlNodePtr tmp = get_node_recurisve_ex(node->children, name, ns);
- if (tmp) {
- return tmp;
- }
- }
- node = node->next;
- }
- return NULL;
-}
-
-xmlNodePtr get_node_with_attribute_ex(xmlNodePtr node, char *name, char *name_ns, char *attribute, char *value, char *attr_ns)
-{
- xmlAttrPtr attr;
-
- while (node != NULL) {
- if (name != NULL) {
- node = get_node_ex(node, name, name_ns);
- if (node==NULL) {
- return NULL;
- }
- }
-
- attr = get_attribute_ex(node->properties, attribute, attr_ns);
- if (attr != NULL && strcmp(attr->children->content, value) == 0) {
- return node;
- }
- node = node->next;
- }
- return NULL;
-}
-
-xmlNodePtr get_node_with_attribute_recursive_ex(xmlNodePtr node, char *name, char *name_ns, char *attribute, char *value, char *attr_ns)
-{
- while (node != NULL) {
- if (node_is_equal_ex(node, name, name_ns)) {
- xmlAttrPtr attr = get_attribute_ex(node->properties, attribute, attr_ns);
- if (attr != NULL && strcmp(attr->children->content, value) == 0) {
- return node;
- }
- }
- if (node->children != NULL) {
- xmlNodePtr tmp = get_node_with_attribute_recursive_ex(node->children, name, name_ns, attribute, value, attr_ns);
- if (tmp) {
- return tmp;
- }
- }
- node = node->next;
- }
- return NULL;
-}
-
-int parse_namespace(const char *inval, char **value, char **namespace)
-{
- char *found = strrchr(inval, ':');
-
- if (found != NULL && found != inval) {
- (*namespace) = estrndup(inval, found - inval);
- (*value) = estrdup(++found);
- } else {
- (*value) = estrdup(inval);
- (*namespace) = NULL;
- }
-
- return FALSE;
-}
diff --git a/ext/soap/php_xml.h b/ext/soap/php_xml.h
deleted file mode 100644
index dfb31ffad2..0000000000
--- a/ext/soap/php_xml.h
+++ /dev/null
@@ -1,86 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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. |
- +----------------------------------------------------------------------+
- | Authors: Brad Lafountain <rodif_bl@yahoo.com> |
- | Shane Caraveo <shane@caraveo.com> |
- | Dmitry Stogov <dmitry@zend.com> |
- +----------------------------------------------------------------------+
-*/
-/* $Id$ */
-
-#ifndef PHP_SOAP_XML_H
-#define PHP_SOAP_XML_H
-
-#define get_attribute(node, name) get_attribute_ex(node, name, NULL)
-#define get_node(node, name) get_node_ex(node, name, NULL)
-#define get_node_recursive(node, name) get_node_recursive_ex(node, name, NULL)
-#define get_node_with_attribute(node, name, attr, val) get_node_with_attribute_ex(node, name, NULL, attr, val, NULL)
-#define get_node_with_attribute_recursive(node, name, attr, val) get_node_with_attribute_recursive_ex(node, name, NULL, attr, val, NULL)
-#define node_is_equal(node, name) node_is_equal_ex(node, name, NULL)
-#define attr_is_equal(node, name) attr_is_equal_ex(node, name, NULL)
-
-xmlDocPtr soap_xmlParseFile(const char *filename);
-xmlDocPtr soap_xmlParseMemory(const void *buf, size_t size);
-
-xmlNsPtr attr_find_ns(xmlAttrPtr node);
-xmlNsPtr node_find_ns(xmlNodePtr node);
-int attr_is_equal_ex(xmlAttrPtr node, char *name, char *ns);
-int node_is_equal_ex(xmlNodePtr node, char *name, char *ns);
-xmlAttrPtr get_attribute_ex(xmlAttrPtr node,char *name, char *ns);
-xmlNodePtr get_node_ex(xmlNodePtr node,char *name, char *ns);
-xmlNodePtr get_node_recursive_ex(xmlNodePtr node,char *name, char *ns);
-xmlNodePtr get_node_with_attribute_ex(xmlNodePtr node, char *name, char *name_ns, char *attribute, char *value, char *attr_ns);
-xmlNodePtr get_node_with_attribute_recursive_ex(xmlNodePtr node, char *name, char *name_ns, char *attribute, char *value, char *attr_ns);
-int parse_namespace(const char *inval,char **value,char **namespace);
-
-#ifndef ZEND_ENGINE_2
-int php_stream_xmlIO_match_wrapper(const char *filename);
-void *php_stream_xmlIO_open_wrapper(const char *filename);
-int php_stream_xmlIO_read(void *context, char *buffer, int len);
-int php_stream_xmlIO_close(void *context);
-#endif
-
-#define FOREACHATTRNODE(n,c,i) FOREACHATTRNODEEX(n,c,NULL,i)
-#define FOREACHATTRNODEEX(n,c,ns,i) \
- do { \
- if (n == NULL) { \
- break; \
- } \
- if (c) { \
- i = get_attribute_ex(n,c,ns); \
- } else { \
- i = n; \
- } \
- if (i != NULL) { \
- n = i;
-
-#define FOREACHNODE(n,c,i) FOREACHNODEEX(n,c,NULL,i)
-#define FOREACHNODEEX(n,c,ns,i) \
- do { \
- if (n == NULL) { \
- break; \
- } \
- if (c) { \
- i = get_node_ex(n,c,NULL); \
- } else { \
- i = n; \
- } \
- if(i != NULL) { \
- n = i;
-
-#define ENDFOREACH(n) \
- } \
- } while ((n = n->next));
-
-#endif
diff --git a/ext/soap/readme.html b/ext/soap/readme.html
deleted file mode 100644
index 98efff3c53..0000000000
--- a/ext/soap/readme.html
+++ /dev/null
@@ -1,646 +0,0 @@
-<HTML>
-<HEAD>
-<TITLE>PHP SOAP Manual</TITLE>
-<STYLE>
-TR{
- vertical-align: "top";
-}
-TH{
- text-align: "left";
-}
-TD:{
- text-align: "left";
-}
-</STYLE>
-</HEAD>
-<BODY>
-<A name="ref.soap">
-<H1>PHP SOAP</H1>
-<H2>Introduction</H2>
-<TABLE BORDER="1">
-<TR><TD ALIGN="center"><B>Warning</B></TD></TR>
-<TR><TD ALIGN="left">This extension is <I>EXPERIMENTAL</I>. The behaviour of this extension -- including the names of its functions and anything else documented about this extension -- may change without notice in a future release of PHP. Use this extension at your own risk.
-</TD></TR>
-</TABLE>
-<p>
-SOAP extension can be used to write SOAP Servers and Clients. It supports
-subsets of <a href="http://www.w3.org/TR/2000/NOTE-SOAP-20000508" target="_top">SOAP 1.1</a>,
-<a href="http://www.w3.org/TR/" target="_top">SOAP 1.2</a> and
-<a href="http://www.w3.org/TR/wsdl" target="_top">WSDL 1.1</a> specifications.
-</p>
-<HR>
-<H2>Requirements</H2>
-This extension makes use of the <A HREF="http://www.xmlsoft.org" TARGET="_top">GNOME XML library</A>. Download and install this library. You will need at least libxml-2.5.4.
-<HR>
-<H2>Installation</H2>
-This extension is only available if PHP was configured with --enable-soap.
-<HR>
-<H2>Runtime Configuration</H2>
-<p>The behaviour of these functions is affected by settings in php.ini.</p>
-<TABLE BORDER="1">
-<TR><TH>Name</TH><TH>Default</TH><TH>Changeable</TH></TR>
-<TR><TD>soap.wsdl_cache_enabled</TD><TD>"1"</TD><TD>PHP_INI_ALL</TD></TR>
-<TR><TD>soap.wsdl_cache_dir</TD><TD>"/tmp"</TD><TD>PHP_INI_ALL</TD></TR>
-<TR><TD>soap.wsdl_cache_ttl</TD><TD>86400</TD><TD>PHP_INI_ALL</TD></TR>
-</TABLE>
-</p>Here is a short explanation of the configuration directives.</p>
-<dl>
-<dt><b>soap.wsdl_cache_enabled</b> (boolean)</dt>
-<dd>enables or disables WSDL caching feature.</dd>
-<dt><b>soap.wsdl_cache_dir</b> (string)</dt>
-<dd>sets the directory name where SOAP extension will put cache files</dd>
-<dt><b>soap.wsdl_cache_ttl</b> (integer)</dt>
-<dd>(time to live) sets the number of second while cached file will be used instead of original one.</dd>
-</dl>
-
-
-<HR>
-<H2>Predefined Constants</H2>
-The constants below are defined by this extension, and will only be available when the extension has either been compiled into PHP or dynamically loaded at runtime.
-<TABLE BORDER="1">
-<TR><TH>Constant</TH><TH>Value</TH><TH>Description</TH></TR>
-<TR><TH>SOAP_1_1 (integer)</TH><TD>1</TD><TD>SOAP version - SOAP 1.1. Can be used as an option in SoapClient and SoapServer constructors.</TD></TR>
-<TR><TH>SOAP_1_2 (integer)</TH><TD>2</TD><TD>SOAP version - SOAP 1.2. Can be used as an option in SoapClient and SoapServer constructors.</TD></TR>
-<TR><TH>SOAP_FUNCTIONS_ALL (integer)</TH><TD>999</TD><TD>Allows to export all defined functions with SoapClient::addFunction</TD></TR>
-<TR><TH>SOAP_PERSISTENCE_SESSION (integer)</TH><TD>1</TD><TD>Allows making class passed to SoapServer::setClass persistent for a PHP session.</TD></TR>
-<TR><TH>SOAP_PERSISTENCE_REQUEST (integer)</TH><TD>2</TD><TD>Allows making class passed to SoapServer::setClass non-persistent for a PHP session.</TD></TR>
-<TR><TH>SOAP_ENCODED (integer)</TH><TD>1</TD><TD>Can be passed as <b>style</b> option to SoapClient constructor in nonWSDL mode.</TD></TR>
-<TR><TH>SOAP_LITERAL (integer)</TH><TD>2</TD><TD>Can be passed as <b>style</b> option to SoapClient constructor in nonWSDL mode.</TD></TR>
-<TR><TH>SOAP_RPC (integer)</TH><TD>1</TD><TD>Can be passed as <b>use</b> option to SoapClient constructor in nonWSDL mode.</TD></TR>
-<TR><TH>SOAP_DOCUMENT (integer)</TH><TD>2</TD><TD>Can be passed as <b>use</b> option to SoapClient constructor in nonWSDL mode.</TD></TR>
-<TR><TH>SOAP_ACTOR_NEXT (integer)</TH><TD>1</TD><TD>Can be passed as <b>actor</b> to SoapHeader constructor.</TD></TR>
-<TR><TH>SOAP_ACTOR_NONE (integer)</TH><TD>2</TD><TD>Can be passed as <b>actor</b> to SoapHeader constructor</TD></TR>
-<TR><TH>SOAP_ACTOR_UNLIMATERECEIVER (integer)</TH><TD>3</TD><TD>Can be passed as <b>actor</b> to SoapHeader constructor</TD></TR>
-<TR><TH>UNKNOWN_TYPE (integer)</TH><TD>999998</TD><TD>Encoding for unknown type. Can be passed to SoapVar constructor.</TD></TR>
-<TR><TH>XSD_STRING (integer)</TH><TD>101</TD><TD>Encoding for standard XMLSchema <b>string</b> type. Can be passed to SoapVar constructor.</TD></TR>
-<TR><TH>XSD_BOOLEAN (integer)</TH><TD>102</TD><TD>Encoding for standard XMLSchema <b>boolen</b> type. Can be passed to SoapVar constructor.</TD></TR>
-<TR><TH>XSD_DECIMAL (integer)</TH><TD>103</TD><TD>Encoding for standard XMLSchema <b>decimal</b> type. Can be passed to SoapVar constructor.</TD></TR>
-<TR><TH>XSD_FLOAT (integer)</TH><TD>104</TD><TD>Encoding for standard XMLSchema <b>float</b> type. Can be passed to SoapVar constructor.</TD></TR>
-<TR><TH>XSD_DOUBLE (integer)</TH><TD>105</TD><TD>Encoding for standard XMLSchema <b>double</b> type. Can be passed to SoapVar constructor.</TD></TR>
-<TR><TH>XSD_DURATION (integer)</TH><TD>106</TD><TD>Encoding for standard XMLSchema <b>duration</b> type. Can be passed to SoapVar constructor.</TD></TR>
-<TR><TH>XSD_DATETIME (integer)</TH><TD>107</TD><TD>Encoding for standard XMLSchema <b>dateTime</b> type. Can be passed to SoapVar constructor.</TD></TR>
-<TR><TH>XSD_TIME (integer)</TH><TD>108</TD><TD>Encoding for standard XMLSchema <b>time</b> type. Can be passed to SoapVar constructor.</TD></TR>
-<TR><TH>XSD_DATE (integer)</TH><TD>109</TD><TD>Encoding for standard XMLSchema <b>data</b> type. Can be passed to SoapVar constructor.</TD></TR>
-<TR><TH>XSD_GYEARMONTH (integer)</TH><TD>110</TD><TD>Encoding for standard XMLSchema <b>gYearMonth</b> type. Can be passed to SoapVar constructor.</TD></TR>
-<TR><TH>XSD_GYEAR (integer)</TH><TD>111</TD><TD>Encoding for standard XMLSchema <b>gYear</b> type. Can be passed to SoapVar constructor.</TD></TR>
-<TR><TH>XSD_GMONTHDAY (integer)</TH><TD>112</TD><TD>Encoding for standard XMLSchema <b>gMonthDay</b> type. Can be passed to SoapVar constructor.</TD></TR>
-<TR><TH>XSD_GDAY (integer)</TH><TD>113</TD><TD>Encoding for standard XMLSchema <b>gDay</b> type. Can be passed to SoapVar constructor.</TD></TR>
-<TR><TH>XSD_GMONTH (integer)</TH><TD>114</TD><TD>Encoding for standard XMLSchema <b>gMonth</b> type. Can be passed to SoapVar constructor.</TD></TR>
-<TR><TH>XSD_HEXBINARY (integer)</TH><TD>115</TD><TD>Encoding for standard XMLSchema <b>hexBinary</b> type. Can be passed to SoapVar constructor.</TD></TR>
-<TR><TH>XSD_BASE64BINARY (integer)</TH><TD>116</TD><TD>Encoding for standard XMLSchema <b>base64Binary</b> type. Can be passed to SoapVar constructor.</TD></TR>
-<TR><TH>XSD_ANYURI (integer)</TH><TD>117</TD><TD>Encoding for standard XMLSchema <b>anyURI</b> type. Can be passed to SoapVar constructor.</TD></TR>
-<TR><TH>XSD_QNAME (integer)</TH><TD>118</TD><TD>Encoding for standard XMLSchema <b>QName</b> type. Can be passed to SoapVar constructor.</TD></TR>
-<TR><TH>XSD_NOTATION (integer)</TH><TD>119</TD><TD>Encoding for standard XMLSchema <b>NOTATION</b> type. Can be passed to SoapVar constructor.</TD></TR>
-<TR><TH>XSD_NORMALIZEDSTRING (integer)</TH><TD>120</TD><TD>Encoding for standard XMLSchema <b>normalizedString</b> type. Can be passed to SoapVar constructor.</TD></TR>
-<TR><TH>XSD_TOKEN (integer)</TH><TD>121</TD><TD>Encoding for standard XMLSchema <b>token</b> type. Can be passed to SoapVar constructor.</TD></TR>
-<TR><TH>XSD_LANGUAGE (integer)</TH><TD>122</TD><TD>Encoding for standard XMLSchema <b>language</b> type. Can be passed to SoapVar constructor.</TD></TR>
-<TR><TH>XSD_NMTOKEN (integer)</TH><TD>123</TD><TD>Encoding for standard XMLSchema <b>NMTOKEN</b> type. Can be passed to SoapVar constructor.</TD></TR>
-<TR><TH>XSD_NAME (integer)</TH><TD>124</TD><TD>Encoding for standard XMLSchema <b>Name</b> type. Can be passed to SoapVar constructor.</TD></TR>
-<TR><TH>XSD_NCNAME (integer)</TH><TD>125</TD><TD>Encoding for standard XMLSchema <b>NCName</b> type. Can be passed to SoapVar constructor.</TD></TR>
-<TR><TH>XSD_ID (integer)</TH><TD>126</TD><TD>Encoding for standard XMLSchema <b>ID</b> type. Can be passed to SoapVar constructor.</TD></TR>
-<TR><TH>XSD_IDREF (integer)</TH><TD>127</TD><TD>Encoding for standard XMLSchema <b>IDREF</b> type. Can be passed to SoapVar constructor.</TD></TR>
-<TR><TH>XSD_IDREFS (integer)</TH><TD>128</TD><TD>Encoding for standard XMLSchema <b>IDREFS</b> type. Can be passed to SoapVar constructor.</TD></TR>
-<TR><TH>XSD_ENTITY (integer)</TH><TD>129</TD><TD>Encoding for standard XMLSchema <b>ENTITY</b> type. Can be passed to SoapVar constructor.</TD></TR>
-<TR><TH>XSD_ENTITIES (integer)</TH><TD>130</TD><TD>Encoding for standard XMLSchema <b>ENTITIES</b> type. Can be passed to SoapVar constructor.</TD></TR>
-<TR><TH>XSD_INTEGER (integer)</TH><TD>131</TD><TD>Encoding for standard XMLSchema <b>integer</b> type. Can be passed to SoapVar constructor.</TD></TR>
-<TR><TH>XSD_NONPOSITIVEINTEGER (integer)</TH><TD>132</TD><TD>Encoding for standard XMLSchema <b>nonPositiveInteger</b> type. Can be passed to SoapVar constructor.</TD></TR>
-<TR><TH>XSD_NEGATIVEINTEGER (integer)</TH><TD>133</TD><TD>Encoding for standard XMLSchema <b>negativeInteger</b> type. Can be passed to SoapVar constructor.</TD></TR>
-<TR><TH>XSD_LONG (integer)</TH><TD>134</TD><TD>Encoding for standard XMLSchema <b>long</b> type. Can be passed to SoapVar constructor.</TD></TR>
-<TR><TH>XSD_INT (integer)</TH><TD>135</TD><TD>Encoding for standard XMLSchema <b>int</b> type. Can be passed to SoapVar constructor.</TD></TR>
-<TR><TH>XSD_SHORT (integer)</TH><TD>136</TD><TD>Encoding for standard XMLSchema <b>short</b> type. Can be passed to SoapVar constructor.</TD></TR>
-<TR><TH>XSD_BYTE (integer)</TH><TD>137</TD><TD>Encoding for standard XMLSchema <b>byte</b> type. Can be passed to SoapVar constructor.</TD></TR>
-<TR><TH>XSD_NONNEGATIVEINTEGER (integer)</TH><TD>138</TD><TD>Encoding for standard XMLSchema <b>nonNegativeInteger</b> type. Can be passed to SoapVar constructor.</TD></TR>
-<TR><TH>XSD_UNSIGNEDLONG (integer)</TH><TD>139</TD><TD>Encoding for standard XMLSchema <b>unsignedLong</b> type. Can be passed to SoapVar constructor.</TD></TR>
-<TR><TH>XSD_UNSIGNEDINT (integer)</TH><TD>140</TD><TD>Encoding for standard XMLSchema <b>unsignedInt</b> type. Can be passed to SoapVar constructor.</TD></TR>
-<TR><TH>XSD_UNSIGNEDSHORT (integer)</TH><TD>141</TD><TD>Encoding for standard XMLSchema <b>unsignedShort</b> type. Can be passed to SoapVar constructor.</TD></TR>
-<TR><TH>XSD_UNSIGNEDBYTE (integer)</TH><TD>142</TD><TD>Encoding for standard XMLSchema <b>unsignedByte</b> type. Can be passed to SoapVar constructor.</TD></TR>
-<TR><TH>XSD_POSITIVEINTEGER (integer)</TH><TD>143</TD><TD>Encoding for standard XMLSchema <b>positiveInteger</b> type. Can be passed to SoapVar constructor.</TD></TR>
-<TR><TH>XSD_NMTOKENS (integer)</TH><TD>144</TD><TD>Encoding for standard XMLSchema <b>NMTOKENS</b> type. Can be passed to SoapVar constructor.</TD></TR>
-<TR><TH>XSD_ANYTYPE (integer)</TH><TD>145</TD><TD>Encoding for standard XMLSchema <b>anyType</b> type. Can be passed to SoapVar constructor.</TD></TR>
-<TR><TH>SOAP_ENC_ARRAY (integer)</TH><TD>300</TD><TD>Encoding for SOAP <b>Array</b> type. Can be passed to SoapVar constructor.</TD></TR>
-<TR><TH>SOAP_ENC_OBJECT (integer)</TH><TD>301</TD><TD>Encoding for SOAP <b>Struct</b> type. Can be passed to SoapVar constructor.</TD></TR>
-<TR><TH>XSD_1999_TIMEINSTANT (integer)</TH><TD>401</TD><TD>Encoding for old XMLSchema <b>timeInstant</b> type. Can be passed to SoapVar constructor.</TD></TR>
-<TR><TH>XSD_NAMESPACE (string)</TH><TD>&nbsp;</TD><TD>The XML Schema namespace.</TD></TR>
-<TR><TH>XSD_1999_NAMESPACE (string)</TH><TD>&nbsp;</TD><TD>The old XML Schema namespace.</TD></TR>
-</TABLE>
-<HR>
-<H2>Classes</H2>
-<h4>List of classes</h4>
-<table border="0">
-<tr><td><a href="#ref.soap.soapclient">SoapClient</a></td></tr>
-<tr><td><a href="#ref.soap.soapserver">SoapServer</a></td></tr>
-<tr><td><a href="#ref.soap.soapparam">SoapParam</a></td></tr>
-<tr><td><a href="#ref.soap.soapvar">SoapVar</a></td></tr>
-<tr><td><a href="#ref.soap.soapheader">SoapHeader</a></td></tr>
-<tr><td><a href="#ref.soap.soapfault">SoapFault</a></td></tr>
-</table>
-<a name="ref.soap.soapclient">
-<h4>SoapClient class</h4>
-A SOAP client, that allows calling remote methods on SOAP WebService over HTTP
-or HTTPS.
-<table border="0">
-<tr><td><a href="#ref.soap.soapclient.soapclient">SoapClient</a> -- SoapClient constructor</td></tr>
-<tr><td><a href="#ref.soap.soapclient.__call">__call</a> -- calls a SOAP function</td></tr>
-<tr><td><a href="#ref.soap.soapclient.__getlastrequest">__getLastRequest</a> -- returns last SOAP request</td></tr>
-<tr><td><a href="#ref.soap.soapclient.__getlastresponse">__getLastResponse</a> -- returns last SOAP response</td></tr>
-<tr><td><a href="#ref.soap.soapclient.__getfunctions">__getFunctions</a> -- returns list of SOAP functions</td></tr>
-<tr><td><a href="#ref.soap.soapclient.__gettypes">__getTypes</a> -- returns list of SOAP types</td></tr>
-</table>
-<a name="ref.soap.soapserver">
-<h4>SoapServer class</h4>
-This class can be used to build SOAP WebServices, which can be accessed from
-remote SOAP clients over HTTP or HTTPS.
-<table border="0">
-<tr><td><a href="#ref.soap.soapserver.soapserver">SoapServer</a> -- SoapServer constructor</td></tr>
-<tr><td><a href="#ref.soap.soapserver.addfunction">addFunction</a> -- adds one or several functions those will handle SOAP requests</td></tr>
-<tr><td><a href="#ref.soap.soapserver.setclass">setClass</a> -- sets class which will handle SOAP requests</td></tr>
-<tr><td><a href="#ref.soap.soapserver.getfunctions">getFunctions</a> -- returns list of defined functions</td></tr>
-<tr><td><a href="#ref.soap.soapserver.setpersistence">setPersistence</a> -- sets persistence mode of SoapServer</td></tr>
-<tr><td><a href="#ref.soap.soapserver.handle">handle</a> -- handles a SOAP request</td></tr>
-</table>
-<a name="ref.soap.soapparam">
-<h4>SoapParam class</h4>
-<p>
-SoapParam is a special low-level class for naming parameters and return values
-in nonWSDL mode. It is just a data holder and it has not any special method
-except constructor.
-</p>
-<table border="0">
-<tr><td><a href="#ref.soap.soapparam.soapparam">SoapParam</a> -- SoapParam constructor</td></tr>
-</table>
-<a name="ref.soap.soapvar">
-<h4>SoapVar classes</h4>
-<p>
-SoapVar is a special low-level class for encoding parameters and return values
-in nonWSDL mode. It is just a data holder and it has not any special method
-except constructor. It is useful when you like to set type property in SOAP
-request or response.
-</p>
-<table border="0">
-<tr><td><a href="#ref.soap.soapvar.soapvar">SoapVar</a> -- SoapVar constructor</td></tr>
-</table>
-<a name="ref.soap.soapheader">
-<h4>SoapHeader class</h4>
-<p>
-SoapHeader is a special low-level class for passing or returning SOAP headers.
-It is just a data holder and it has not any special method except constructor.
-</p>
-<table border="0">
-<tr><td><a href="#ref.soap.soapheader.soapheader">SoapHeader</a> -- SoapHeader constructor</td></tr>
-</table>
-<a name="ref.soap.soapfault">
-<h4>SoapFault class</h4>
-<p>
-SoapFault is a special class that can be used for error reporting during
-handling of SOAP request. It is derived form standard PHP Exception class,
-so it can be used to throw exceptions in server side and to catch tham on
-client side.
-</p>
-<table border="0">
-<tr><td><a href="#ref.soap.soapfault.soapfault">SoapFault</a> -- SoapFault constructor</td></tr>
-</table>
-<HR>
-<!--
-<H2>Examples</H2>
--->
-<h4>Table of Contents</h4>
-<table border="0">
-<tr><td><a href="#ref.soap.is_soap_fault">is_soap_fault</a> -- checks if SOAP call was failed</td></tr>
-<tr><td><a href="#ref.soap.soapclient.soapclient">SoapClient::SoapClient</a> -- SoapClient constructor</td></tr>
-<tr><td><a href="#ref.soap.soapclient.__call">SoapClient::__call</a> -- calls a SOAP function</td></tr>
-<tr><td><a href="#ref.soap.soapclient.__getlastrequest">SoapClient::__getLastRequest</a> -- returns last SOAP request</td></tr>
-<tr><td><a href="#ref.soap.soapclient.__getlastresponse">SoapClient::__getLastResponse</a> -- returns last SOAP response</td></tr>
-<tr><td><a href="#ref.soap.soapclient.__getfunctions">SoapClient::__getFunctions</a> -- returns list of SOAP functions</td></tr>
-<tr><td><a href="#ref.soap.soapclient.__gettypes">SoapClient::__getTypes</a> -- returns list of SOAP types</td></tr>
-<tr><td><a href="#ref.soap.soapserver.soapserver">SoapServer::SoapServer</a> -- SoapServer constructor</td></tr>
-<tr><td><a href="#ref.soap.soapserver.addfunction">SoapServer::addFunction</a> -- adds one or several functions those will handle SOAP requests</td></tr>
-<tr><td><a href="#ref.soap.soapserver.setclass">SoapServer::setClass</a> -- sets class which will handle SOAP requests</td></tr>
-<tr><td><a href="#ref.soap.soapserver.getfunctions">SoapServer::getFunctions</a> -- returns list of defined functions</td></tr>
-<tr><td><a href="#ref.soap.soapserver.setpersistence">SoapServer::setPersistence</a> -- sets persistence mode of SoapServer</td></tr>
-<tr><td><a href="#ref.soap.soapserver.handle">SoapServer::handle</a> -- handles a SOAP request</td></tr>
-<tr><td><a href="#ref.soap.soapparam.soapparam">SoapParam::SoapParam</a> -- SoapParam constructor</td></tr>
-<tr><td><a href="#ref.soap.soapvar.soapvar">SoapVar::SoapVar</a> -- SoapVar constructor</td></tr>
-<tr><td><a href="#ref.soap.soapheader.soapheader">SoapHeader::SoapHeader</a> -- SoapHeader constructor</td></tr>
-<tr><td><a href="#ref.soap.soapfault.soapfault">SoapFault::SoapFault</a> -- SoapFault constructor</td></tr>
-</table>
-
-<a name="ref.soap.is_soap_fault"></a>
-<h2>is_soap_fault</h2>
-<p>(PHP 5)</p>
-<p>checks if SOAP call was failed</p>
-<h3>Description</h3>
-<p>bool <b>is_soap_fault</b>(mixed obj)</p>
-<p>
-This function is useful when you like to check if the SOAP call was failed,
-but don't like to use exceptions. To use it you must create SoapClient object
-with <b>exceptions</b> option set to zero or false. In this case SOAP method
-will return a special SoapFault object which encapsulate the fault details
-(faultcode, faultstring, faultactor and faultdetails). If <b>exceptions</b> is
-not set then SOAP call will throw an exception on error.<br>
-is_soap_fault() functions checks if the given parameter is a SoapFault object.<br>
-</p>
-<h4>Example</h4>
-<TABLE BORDER="0" BGCOLOR="#E0E0E0"><TR><TD><PRE CLASS="php">
-&lt;?php
- $client = SoapClient("some.wsdl",array("exceptions"=>0));
- $result = $client->SomeFunction(...);
- if (is_soap_fault($result)) {
- trigger_error("SOAP Fault: (faultcode: {$result->faultcode}, faultstring: {$result->faulstring})", E_ERROR);
- }
-?&gt;</PRE></TD></TR></TABLE>
-<p>Standard method that used by SOAP extension for error reporting is excptions.</p>
-<TABLE BORDER="0" BGCOLOR="#E0E0E0"><TR><TD><PRE CLASS="php">
-&lt;?php
- try {
- $client = SoapClient("some.wsdl");
- $result = $client->SomeFunction(...);
- } catch (SoapFault $fault) {
- trigger_error("SOAP Fault: (faultcode: {$fault->faultcode}, faultstring: {$fault->faulstring})", E_ERROR);
- }
-?&gt;</PRE></TD></TR></TABLE>
-
-<a name="ref.soap.soapclient.soapclient"></a>
-<h2>SoapClient::SoapClient</h2>
-<p>(PHP 5)</p>
-<p>SoapClient constructor</p>
-<h3>Description</h3>
-<p><b>SoapClient</b>(mixed wsdl [, array options])</p>
-<p>
-The constructor allows creating SoapClient objects in WSDL or nonWSDL mode.
-The first case requires URI of WSDL file as first parameter and optional
-options array. The second case requires NULL as first parameter and options
-array with <b>location</b> and <b>uri</b> options set. Where <b>location</b> is
-a URL to request and <b>uri</b> is a target namespace of the SOAP service.
-<b>style</b> and <b>use</b> options has effect only on nonWSDL (in WSDL mode
-they comes from WSDL file). <b>soap_version</b> option allows to work as SOAP 1.1 or
-SOAP 1.2 client.
-Some additional optional options allow using HTTP authentication (<b>login</b>
-and <b>password</b>) and HTTP connection through proxy server (<b>proxy_host</b>,
-<b>proxy_port</b>, <b>proxy_login</b> and <b>proxy_password</b>).
-</p>
-<h4>Examples</h4>
-<TABLE BORDER="0" BGCOLOR="#E0E0E0"><TR><TD><PRE CLASS="php">
- $client = new SoapClient("some.wsdl");
-
- $client = new SoapClient("some.wsdl",array('soap_version' => SOAP_1_2));
-
- $client = new SoapClient("some.wsdl",array('login' => "some_name",
- 'password' => "some_password"));
-
- $client = new SoapClient("some.wsdl",array('proxy_host' => "localhost",
- 'proxy_port' => 8080));
-
- $client = new SoapClient("some.wsdl",array('proxy_host' => "localhost",
- 'proxy_port' => 8080,
- 'proxy_login' => "some_name",
- 'proxy_password' => "some_password"));
-
- $client = new SoapClient(null,array('location' => "http://localhost/soap.php",
- 'uri' => "http://test-uri/"));
-
- $client = new SoapClient(null,array('location' => "http://localhost/soap.php",
- 'uri' => "http://test-uri/",
- 'style' => SOAP_DOCUMENT,
- 'use' => SOAP_LITERAL));
-</PRE></TD></TR></TABLE>
-
-<a name="ref.soap.soapclient.__call"></a>
-<h2>SoapClient::__call</h2>
-<p>(PHP 5)</p>
-<p>calls a SOAP function</p>
-<h3>Description</h3>
-<p>mixed <b>__call</b>(string function_name, array arguments, [array options [, mixed input_headers [, mixed &output_headers]]])</p>
-<p>
-This is a low level API function to make a SOAP call. Usually in WSDL mode
-you can simple call SOAP functions as SoapClient methods. It is useful for
-nonWSDL mode when 'soapaction' is unknown, 'uri' is differ form default or
-when ypu like to send and/or receive SOAP Headers. To check if function call
-is failed check the result with is_soap_fault() function.<br>
-SOAP function may return one or several values. In the first case __call will
-return just the value of output parameter, in the second it will return
-array with named output parameters.
-</p>
-<h4>Examples</h4>
-<TABLE BORDER="0" BGCOLOR="#E0E0E0"><TR><TD><PRE CLASS="php">
- $client = new SoapClient("some.wsdl");
- $client->SomeFunction($a,$b,$c);
- $client->__call("SomeFunction",array($a,$b,$c));
- $client->__call("SomeFunction",array($a,$b,$c), NULL,
- new SoapHeader(...), $output_headers);
-
-
- $client = new SoapClient(null,array('location' => "http://localhost/soap.php",
- 'uri' => "http://test-uri/"));
- $client->SomeFunction($a,$b,$c);
- $client->__call("SomeFunction",array($a,$b,$c));
- $client->__call("SomeFunction",array($a,$b,$c),
- array('soapaction' => 'some_action',
- 'uri' => 'some_uri'));
-</PRE></TD></TR></TABLE>
-
-<a name="ref.soap.soapclient.__getlastrequest"></a>
-<h2>SoapClient::__getLastRequest</h2>
-<p>(PHP 5)</p>
-<p>returns last SOAP request</p>
-<h3>Description</h3>
-<p>string <b>__getLastRequest</b>()</p>
-<p>
-This function works only with SoapClient which was created with trace option.
-</p>
-<h4>Example</h4>
-<TABLE BORDER="0" BGCOLOR="#E0E0E0"><TR><TD><PRE CLASS="php">
-&lt;?php
- $client = SoapClient("some.wsdl", array('trace'=>1));
- $result = $client->SomeFunction(...);
- echo "REQUEST:\n".$client->__getLastRequest()."\n";
-?&gt;
-</PRE></TD></TR></TABLE>
-
-<a name="ref.soap.soapclient.__getlastresponse"></a>
-<h2>SoapClient::__getLastResponse</h2>
-<p>(PHP 5)</p>
-<p>returns last SOAP response</p>
-<h3>Description</h3>
-<p>string <b>__getLastResponse</b>()</p>
-<p>
-This function works only with SoapClient which was created with trace option.
-</p>
-<h4>Example</h4>
-<TABLE BORDER="0" BGCOLOR="#E0E0E0"><TR><TD><PRE CLASS="php">
-&lt;?php
- $client = SoapClient("some.wsdl", array('trace'=>1));
- $result = $client->SomeFunction(...);
- echo "RESPONSE:\n".$client->__getLastResponse()."\n";
-?&gt;
-</PRE></TD></TR></TABLE>
-
-<a name="ref.soap.soapclient.__getfunctions"></a>
-<h2>SoapClient::__getFunctions</h2>
-<p>(PHP 5)</p>
-<p>returns list of SOAP functions</p>
-<h3>Description</h3>
-<p>array <b>__getFunctions</b>()</p>
-<p>
-This function works only in WSDL mode.
-</p>
-<h4>Example</h4>
-<TABLE BORDER="0" BGCOLOR="#E0E0E0"><TR><TD><PRE CLASS="php">
-&lt;?php
- $client = SoapClient("some.wsdl");
- var_dump($client->__getFunctions());
-?&gt;
-</PRE></TD></TR></TABLE>
-
-<a name="ref.soap.soapclient.__gettypes"></a>
-<h2>SoapClient::__getTypes</h2>
-<p>(PHP 5)</p>
-<p>returns list of SOAP types</p>
-<h3>Description</h3>
-<p>array <b>__getTypes</b>()</p>
-<p>
-This function works only in WSDL mode.
-</p>
-<h4>Example</h4>
-<TABLE BORDER="0" BGCOLOR="#E0E0E0"><TR><TD><PRE CLASS="php">
-&lt;?php
- $client = SoapClient("some.wsdl");
- var_dump($client->__getTypes());
-?&gt;
-</PRE></TD></TR></TABLE>
-
-<a name="ref.soap.soapserver.soapserver"></a>
-<h2>SoapServer::SoapServer</h2>
-<p>(PHP 5)</p>
-<p>SoapServer constructor</p>
-<h3>Description</h3>
-<p><b>SoapServer</b>(mixed wsdl [, array options])</p>
-It allows creating SoapServer objects in WSDL or nonWSDL mode. In the first
-case <b>wsdl</b> must be set to URI of WSDL file. In the second <b>wsdl</b>
-must be set to null and <b>uti</b> option must be set. Additional options
-allow setting a default SOAP version (<b>soap_version</b>) and actor URI
-(<b>actor</b>).
-
-<h4>Examples</h4>
-<TABLE BORDER="0" BGCOLOR="#E0E0E0"><TR><TD><PRE CLASS="php">
- $server = new SoapServer("some.wsdl");
-
- $server = new SoapServer("some.wsdl",array('soap_version'=>SOAP_1_2));
-
- $server = new SoapServer("some.wsdl",array('actor'=>"http://example.org/ts-tests/C"));
-
- $server = new SoapServer(null,array('uri'=>"http://test-uri/"));
-</PRE></TD></TR></TABLE>
-
-<a name="ref.soap.soapserver.addfunction">
-<h2>SoapServer::addFunction</h2>
-<p>(PHP 5)</p>
-<p>adds one or several functions those will handle SOAP requests</p>
-<h3>Description</h3>
-<p>void <b>addFunction</b>(mixed functions)</p>
-Exports one or more functions for remote clients. To export one function pass
-function name into <b>functions</b> parameter as string. To export several
-functions pass an array of function names and to export all functions pass
-a special constant <b>SOAP_FUNCTIONS_ALL</b>.<br>
-Functions must receive all input arguments in the same order as defined
-in WSDL file (They should not receive any output parameters as arguments) and
-return one or more values. To return several values they must return array with
-named output parameters.
-<h4>Examples</h4>
-<TABLE BORDER="0" BGCOLOR="#E0E0E0"><TR><TD><PRE CLASS="php">
- function func($inputString) {
- return $inputString;
- }
- $server->addFunction("echoString");
-
- function echoTwoStrings($inputString1, $inputString2) {
- return array("outputString1"=>$inputString1,"outputString2"=>$inputString2);
- }
- $server->addFunction(array("echoString","echoTwoStrings"));
-
- $server->addFunction(SOAP_FUNCTIONS_ALL);
-</PRE></TD></TR></TABLE>
-
-<a name="ref.soap.soapserver.setclass"></a>
-<h2>SoapServer::setClass</h2>
-<p>(PHP 5)</p>
-<p>sets class which will handle SOAP requests</p>
-<h3>Description</h3>
-<p>void <b>setClass</b>(string class_name [, ...])</p>
-Exports all methods from specified class. Additional parameters will be passed
-to default class constructor during object creation. The object can be maiden
-persistent across request for a given PHP session with
-<a href="#ref.soap.soapserver.setpersistence">SoapServer::setPersistence</a> method.
-<h4>Examples</h4>
-<TABLE BORDER="0" BGCOLOR="#E0E0E0"><TR><TD><PRE CLASS="php">
- $server->setClass("foo");
-
- $server->setClass("foo", $arg1, $arg2);
-</PRE></TD></TR></TABLE>
-
-<a name="ref.soap.soapserver.getfunctions">
-<h2>SoapServer::getFunctions</h2>
-<p>(PHP 5)</p>
-<p>returns list of defined functions</p>
-<h3>Description</h3>
-<p>array <b>getFunctions</b>()</p>
-
-<a name="ref.soap.soapserver.setpersistence"></a>
-<h2>SoapServer::setPersistence</h2>
-<p>(PHP 5)</p>
-<p>sets persistence mode of SoapServer</p>
-<h3>Description</h3>
-<p>void <b>setPersistence</b>(int mode)</p>
-This function allows saving data between requests in PHP session. It works only
-with server that exports functions form class (see
-<a href="#ref.soap.soapserver.setclass">SoapServer:setCalss</a>).
-<h4>Examples</h4>
-<TABLE BORDER="0" BGCOLOR="#E0E0E0"><TR><TD><PRE CLASS="php">
- $server->setpersistence(SOAP_PERSISTENCE_SESSION);
-
- $server->setpersistence(SOAP_PERSISTENCE_REQUEST);
-</PRE></TD></TR></TABLE>
-
-<a name="ref.soap.soapserver.handle"></a>
-<h2>SoapServer::handle</h2>
-<p>(PHP 5)</p>
-<p>handles a SOAP request</p>
-<h3>Description</h3>
-<p>void <b>handle</b>([string soap_envelope])</p>
-It processes a SOAP request, call necessary functions, and send response back.
-It assumes request in input parameter or in global <b>$HTTP_RAW_POST_DATA</b> PHP variable
-if the argument is omitted.
-<h4>Example</h4>
-<TABLE BORDER="0" BGCOLOR="#E0E0E0"><TR><TD><PRE CLASS="php">
-&lt;?php
- function test($x) {
- return $x;
- }
-
- $server = new SoapServer(null,array('uri'=>"http://test-uri/"));
- $server->addFunction("test");
- $server->handle();
-?&gt;
-</PRE></TD></TR></TABLE>
-
-<a name="ref.soap.soapparam.soapparam"></a>
-<h2>SoapParam::SoapParam</h2>
-<p>(PHP 5)</p>
-<p>SoapParam constructor</p>
-<h3>Description</h3>
-<p><b>SoapParam</b>(mixed data, string name)</p>
-<p>
-SoapParam is a special low-level class for naming parameters and return values
-in nonWSDL mode. It is just a data holder and it has not any special method
-except constructor. The constructor takes <b>data</b> to pass or return and
-<b>name</b>. It is possible to pass parameter directly as PHP value, but in
-this case it will be named as <b><i>paramN</i></b> and SOAP Service may not
-understand it.
-</p>
-<h4>Example</h4>
-<TABLE BORDER="0" BGCOLOR="#E0E0E0"><TR><TD><PRE CLASS="php">
-&lt;?php
- $client = new SoapClient(null,array('location' => "http://localhost/soap.php",
- 'uri' => "http://test-uri/"));
- $client->SomeFunction(new SoapParam($a,"a"),
- new SoapParam($b,"b"),
- new SoapParam($c,"c"));
-?&gt;
-</PRE></TD></TR></TABLE>
-
-<a name="ref.soap.soapvar.soapvar"></a>
-<h2>SoapVar::SoapVar</h2>
-<p>(PHP 5)</p>
-<p>SoapVar constructor</p>
-<h3>Description</h3>
-<p><b>SoapVar</b>(mixed data, int encoding [, string type [, string type_ns [, string name [, string name_ns]]]])</p>
-<p>
-SoapVar is a special low-level class for encoding parameters and return values
-in nonWSDL mode. It is just a data holder and it has not any special method
-except constructor. It is useful when you like to set type property in SOAP
-request or response. The constructor takes <b>data</b> to pass or return,
-<b>encoding</b> ID to encode it (see <b><i>XSD_...</i></b> constants) and as
-option type name and namespace and value name and namespace.
-</p>
-<h4>Example</h4>
-<TABLE BORDER="0" BGCOLOR="#E0E0E0"><TR><TD><PRE CLASS="php">
-&lt;?php
- class SOAPStruct {
- function SOAPStruct($s, $i, $f) {
- $this->varString = $s;
- $this->varInt = $i;
- $this->varFloat = $f;
- }
- }
- $client = new SoapClient(null,array('location' => "http://localhost/soap.php",
- 'uri' => "http://test-uri/"));
- $struct = new SOAPStruct('arg',34,325.325);
- $soapstruct = new SoapVar($struct,SOAP_ENC_OBJECT,"SOAPStruct","http://soapinterop.org/xsd");
- $client->echoStruct(new SoapParam($soapstruct, "inputStruct"));
-?&gt;
-</PRE></TD></TR></TABLE>
-
-<a name="ref.soap.soapheader.soapheader"></a>
-<h2>SoapHeader::SoapHeader</h2>
-<p>(PHP 5)</p>
-<p>SoapHeader constructor</p>
-<h3>Description</h3>
-<p><b>SoapHeader</b>(string name_ns, string name [, mixed data [, bool must_understand [, mixed actor]]])</p>
-<p>
-SoapHeader is a special low-level class for passing or returning SOAP headers.
-It is just a data holder and it has not any special method except constructor.
-It can be used in <a href="#ref.soap.soapclient.__call">SoapClient::__call</a>
-method to pass SOAP header or in SOAP header handler to return header in SOAP
-response. <b>name_ns</b> and <b>name</b> are namespace and name of the SOAP
-header element. <b>data</b> is a SOAP header's content. It can be a PHP value
-or SoapVar object. <b>must_understand</b> and <b>actor</b> are values for
-<b><i>mustUnderstand</i></b> and <b><i>actor</i></b> attributes of this SOAP
-Header element.
-</p>
-<h4>Example</h4>
-<TABLE BORDER="0" BGCOLOR="#E0E0E0"><TR><TD><PRE CLASS="php">
-&lt;?php
- $client = new SoapClient(null,array('location' => "http://localhost/soap.php",
- 'uri' => "http://test-uri/"));
- $client->__call("echoVoid",NULL,NULL,
- new SoapHeader('http://soapinterop.org/echoheader/',
- 'echoMeStringRequest',
- 'hello world'));
-?&gt;
-</PRE></TD></TR></TABLE>
-
-<a name="ref.soap.soapfault.soapfault"></a>
-<h2>SoapFault::SoapFault</h2>
-<p>(PHP 5)</p>
-<p>SoapFault constructor</p>
-<h3>Description</h3>
-<p><b>SoapFault</b>(string faultcode, string faultstring [, string faultactor [, mixed details [, string faultname [, mixed headerfault]]]])</p>
-This class is useful when you like to send SOAP fault response from PHP handler.<br>
-<b>faultcode</b>, <b>faultstring</b>, <b>faultactor</b> and <b>details</b> are standard elements of SOAP Fault;<br>
-<b>faultname</b> is an optional parameter that can be used to select proper fault encoding from WSDL.<br>
-<b>headerfault</b> is an optional parameter that can be used during SOAP header handling to report error in response header.
-<h4>Example</h4>
-<TABLE BORDER="0" BGCOLOR="#E0E0E0"><TR><TD><PRE CLASS="php">
-&lt;?php
- function test($x) {
- return new SoapFault("Server","Some error message");
- }
-
- $server = new SoapServer(null,array('uri'=>"http://test-uri/"));
- $server->addFunction("test");
- $server->handle();
-?&gt;
-</PRE></TD></TR></TABLE>
-<p>It is possible to use PHP exception mechanism to throw SOAP Fault.</p>
-<TABLE BORDER="0" BGCOLOR="#E0E0E0"><TR><TD><PRE CLASS="php">
-&lt;?php
- function test($x) {
- throw new SoapFault("Server","Some error message");
- }
-
- $server = new SoapServer(null,array('uri'=>"http://test-uri/"));
- $server->addFunction("test");
- $server->handle();
-?&gt;
-</PRE></TD></TR></TABLE>
-</BODY>
-</HTML> \ No newline at end of file
diff --git a/ext/soap/soap.c b/ext/soap/soap.c
deleted file mode 100644
index f69a300972..0000000000
--- a/ext/soap/soap.c
+++ /dev/null
@@ -1,3967 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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. |
- +----------------------------------------------------------------------+
- | Authors: Brad Lafountain <rodif_bl@yahoo.com> |
- | Shane Caraveo <shane@caraveo.com> |
- | Dmitry Stogov <dmitry@zend.com> |
- +----------------------------------------------------------------------+
-*/
-/* $Id$ */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-#include "php_soap.h"
-#include "ext/session/php_session.h"
-#ifdef ZEND_ENGINE_2
-# include "zend_exceptions.h"
-#endif
-
-static int le_sdl = 0;
-int le_url = 0;
-static int le_service = 0;
-
-typedef struct _soapHeader {
- sdlFunctionPtr function;
- zval function_name;
- int mustUnderstand;
- int num_params;
- zval **parameters;
- zval retval;
- sdlSoapBindingFunctionHeaderPtr hdr;
- struct _soapHeader *next;
-} soapHeader;
-
-/* Local functions */
-static void function_to_string(sdlFunctionPtr function, smart_str *buf);
-static void type_to_string(sdlTypePtr type, smart_str *buf, int level);
-
-static void clear_soap_fault(zval *obj TSRMLS_DC);
-static void set_soap_fault(zval *obj, char *fault_code, char *fault_string, char *fault_actor, zval *fault_detail, char *name TSRMLS_DC);
-static void soap_server_fault(char* code, char* string, char *actor, zval* details, char *name TSRMLS_DC);
-static void soap_server_fault_ex(sdlFunctionPtr function, zval* fault, soapHeader* hdr TSRMLS_DC);
-
-static sdlParamPtr get_param(sdlFunctionPtr function, char *param_name, int index, int);
-static sdlFunctionPtr get_function(sdlPtr sdl, const char *function_name);
-static sdlFunctionPtr get_doc_function(sdlPtr sdl, xmlNodePtr node);
-
-static sdlFunctionPtr deserialize_function_call(sdlPtr sdl, xmlDocPtr request, char* actor, zval *function_name, int *num_params, zval **parameters[], int *version, soapHeader **headers TSRMLS_DC);
-static xmlDocPtr serialize_response_call(sdlFunctionPtr function, char *function_name,char *uri,zval *ret, soapHeader *headers, int version TSRMLS_DC);
-static xmlDocPtr serialize_function_call(zval *this_ptr, sdlFunctionPtr function, char *function_name, char *uri, zval **arguments, int arg_count, int version, HashTable *soap_headers TSRMLS_DC);
-static xmlNodePtr serialize_parameter(sdlParamPtr param,zval *param_val,int index,char *name, int style, xmlNodePtr parent TSRMLS_DC);
-static xmlNodePtr serialize_zval(zval *val, sdlParamPtr param, char *paramName, int style, xmlNodePtr parent TSRMLS_DC);
-
-static void delete_service(void *service);
-static void delete_url(void *handle);
-
-#ifndef ZEND_ENGINE_2
-static void soap_call_function_handler(INTERNAL_FUNCTION_PARAMETERS, zend_property_reference *property_reference);
-#endif
-
-static void soap_error_handler(int error_num, const char *error_filename, const uint error_lineno, const char *format, va_list args);
-
-#define SOAP_SERVER_BEGIN_CODE() \
- zend_bool _old_handler = SOAP_GLOBAL(use_soap_error_handler);\
- char* _old_error_code = SOAP_GLOBAL(error_code);\
- zval* _old_error_object = SOAP_GLOBAL(error_object);\
- int _old_soap_version = SOAP_GLOBAL(soap_version);\
- SOAP_GLOBAL(use_soap_error_handler) = 1;\
- SOAP_GLOBAL(error_code) = "Server";\
- SOAP_GLOBAL(error_object) = this_ptr;
-
-#define SOAP_SERVER_END_CODE() \
- SOAP_GLOBAL(use_soap_error_handler) = _old_handler;\
- SOAP_GLOBAL(error_code) = _old_error_code;\
- SOAP_GLOBAL(error_object) = _old_error_object;\
- SOAP_GLOBAL(soap_version) = _old_soap_version;
-
-#ifdef ZEND_ENGINE_2
-#define SOAP_CLIENT_BEGIN_CODE() \
- zend_bool _old_handler = SOAP_GLOBAL(use_soap_error_handler);\
- char* _old_error_code = SOAP_GLOBAL(error_code);\
- zval* _old_error_object = SOAP_GLOBAL(error_object);\
- int _old_soap_version = SOAP_GLOBAL(soap_version);\
- int _bailout = 0;\
- SOAP_GLOBAL(use_soap_error_handler) = 1;\
- SOAP_GLOBAL(error_code) = "Client";\
- SOAP_GLOBAL(error_object) = this_ptr;\
- zend_try {
-
-#define SOAP_CLIENT_END_CODE() \
- } zend_catch {\
- if (EG(exception) == NULL || \
- Z_TYPE_P(EG(exception)) != IS_OBJECT || \
- Z_OBJCE_P(EG(exception)) != soap_fault_class_entry) {\
- _bailout = 1;\
- }\
- } zend_end_try();\
- SOAP_GLOBAL(use_soap_error_handler) = _old_handler;\
- SOAP_GLOBAL(error_code) = _old_error_code;\
- SOAP_GLOBAL(error_object) = _old_error_object;\
- SOAP_GLOBAL(soap_version) = _old_soap_version;\
- if (_bailout) {\
- zend_bailout();\
- }
-#else
-#define SOAP_CLIENT_BEGIN_CODE() \
- zend_bool _old_handler = SOAP_GLOBAL(use_soap_error_handler);\
- char* _old_error_code = SOAP_GLOBAL(error_code);\
- zval* _old_error_object = SOAP_GLOBAL(error_object);\
- int _old_soap_version = SOAP_GLOBAL(soap_version);\
- SOAP_GLOBAL(use_soap_error_handler) = 1;\
- SOAP_GLOBAL(error_code) = "Client";\
- SOAP_GLOBAL(error_object) = this_ptr;
-
-#define SOAP_CLIENT_END_CODE() \
- SOAP_GLOBAL(use_soap_error_handler) = _old_handler;\
- SOAP_GLOBAL(error_code) = _old_error_code;\
- SOAP_GLOBAL(error_object) = _old_error_object;\
- SOAP_GLOBAL(soap_version) = _old_soap_version;
-#endif
-
-#define HTTP_RAW_POST_DATA "HTTP_RAW_POST_DATA"
-
-#define ZERO_PARAM() \
- if (ZEND_NUM_ARGS() != 0) \
- WRONG_PARAM_COUNT;
-
-#define FETCH_THIS_SDL(ss) \
- { \
- zval **__tmp; \
- if(FIND_SDL_PROPERTY(this_ptr,__tmp) != FAILURE) { \
- FETCH_SDL_RES(ss,__tmp); \
- } else { \
- ss = NULL; \
- } \
- }
-
-#define FIND_SDL_PROPERTY(ss,tmp) zend_hash_find(Z_OBJPROP_P(ss), "sdl", sizeof("sdl"), (void **)&tmp)
-#define FETCH_SDL_RES(ss,tmp) ss = (sdlPtr) zend_fetch_resource(tmp TSRMLS_CC, -1, "sdl", NULL, 1, le_sdl)
-
-#define FETCH_THIS_SERVICE(ss) \
- { \
- zval **tmp; \
- if (zend_hash_find(Z_OBJPROP_P(this_ptr),"service", sizeof("service"), (void **)&tmp) != FAILURE) { \
- ss = (soapServicePtr)zend_fetch_resource(tmp TSRMLS_CC, -1, "service", NULL, 1, le_service); \
- } else { \
- ss = NULL; \
- } \
- }
-
-static zend_class_entry* soap_class_entry;
-static zend_class_entry* soap_server_class_entry;
-static zend_class_entry* soap_fault_class_entry;
-static zend_class_entry* soap_header_class_entry;
-static zend_class_entry* soap_param_class_entry;
-zend_class_entry* soap_var_class_entry;
-
-ZEND_DECLARE_MODULE_GLOBALS(soap)
-
-static void (*old_error_handler)(int, const char *, const uint, const char*, va_list);
-
-#define PHP_SOAP_SERVER_CLASSNAME "SoapServer"
-#define PHP_SOAP_CLIENT_CLASSNAME "SoapClient"
-#define PHP_SOAP_VAR_CLASSNAME "SoapVar"
-#define PHP_SOAP_FAULT_CLASSNAME "SoapFault"
-#define PHP_SOAP_PARAM_CLASSNAME "SoapParam"
-#define PHP_SOAP_HEADER_CLASSNAME "SoapHeader"
-
-PHP_RINIT_FUNCTION(soap);
-PHP_MINIT_FUNCTION(soap);
-PHP_MSHUTDOWN_FUNCTION(soap);
-PHP_MINFO_FUNCTION(soap);
-
-#ifndef ZEND_ENGINE_2
-# ifndef PHP_METHOD
-# define PHP_METHOD(classname, name) ZEND_NAMED_FUNCTION(ZEND_FN(classname##_##name))
-# define PHP_ME(classname, name, arg_info, flags) ZEND_NAMED_FE(name, ZEND_FN(classname##_##name), arg_info)
-# endif
-
-static char *zend_str_tolower_copy(char *dest, const char *source, unsigned int length)
-{
- register unsigned char *str = (unsigned char*)source;
- register unsigned char *result = (unsigned char*)dest;
- register unsigned char *end = str + length;
-
- while (str < end) {
- *result++ = tolower((int)*str++);
- }
- *result = *end;
-
- return dest;
-}
-#endif
-
-/*
- Registry Functions
- TODO: this!
-*/
-PHP_FUNCTION(soap_encode_to_xml);
-PHP_FUNCTION(soap_encode_to_zval);
-PHP_FUNCTION(use_soap_error_handler);
-PHP_FUNCTION(is_soap_fault);
-
-
-/* Server Functions */
-PHP_METHOD(SoapServer, SoapServer);
-PHP_METHOD(SoapServer, setClass);
-PHP_METHOD(SoapServer, addFunction);
-PHP_METHOD(SoapServer, getFunctions);
-PHP_METHOD(SoapServer, handle);
-PHP_METHOD(SoapServer, setPersistence);
-PHP_METHOD(SoapServer, fault);
-#ifdef HAVE_PHP_DOMXML
-PHP_METHOD(PHP_SOAP_SERVER_CLASS, map);
-#endif
-
-/* Client Functions */
-PHP_METHOD(SoapClient, SoapClient);
-PHP_METHOD(SoapClient, __call);
-PHP_METHOD(SoapClient, __getLastRequest);
-PHP_METHOD(SoapClient, __getLastResponse);
-PHP_METHOD(SoapClient, __getLastRequestHeaders);
-PHP_METHOD(SoapClient, __getLastResponseHeaders);
-PHP_METHOD(SoapClient, __getFunctions);
-PHP_METHOD(SoapClient, __getTypes);
-PHP_METHOD(SoapClient, __doRequest);
-
-/* SoapVar Functions */
-PHP_METHOD(SoapVar, SoapVar);
-
-/* SoapFault Functions */
-PHP_METHOD(SoapFault, SoapFault);
-#ifdef ZEND_ENGINE_2
-PHP_METHOD(SoapFault, __toString);
-#endif
-
-/* SoapParam Functions */
-PHP_METHOD(SoapParam, SoapParam);
-
-/* SoapHeader Functions */
-PHP_METHOD(SoapHeader, SoapHeader);
-
-static zend_function_entry soap_functions[] = {
-#ifdef HAVE_PHP_DOMXML
- PHP_FE(soap_encode_to_xml, NULL)
- PHP_FE(soap_encode_to_zval, NULL)
-#endif
- PHP_FE(use_soap_error_handler, NULL)
- PHP_FE(is_soap_fault, NULL)
- {NULL, NULL, NULL}
-};
-
-static zend_function_entry soap_fault_functions[] = {
- PHP_ME(SoapFault, SoapFault, NULL, 0)
-#ifdef ZEND_ENGINE_2
- PHP_ME(SoapFault, __toString, NULL, 0)
-#endif
- {NULL, NULL, NULL}
-};
-
-static zend_function_entry soap_server_functions[] = {
- PHP_ME(SoapServer, SoapServer, NULL, 0)
- PHP_ME(SoapServer, setPersistence, NULL, 0)
- PHP_ME(SoapServer, setClass, NULL, 0)
- PHP_ME(SoapServer, addFunction, NULL, 0)
- PHP_ME(SoapServer, getFunctions, NULL, 0)
- PHP_ME(SoapServer, handle, NULL, 0)
- PHP_ME(SoapServer, fault, NULL, 0)
-#ifdef HAVE_PHP_DOMXML
- PHP_ME(SoapServer, map, NULL, 0)
-#endif
- {NULL, NULL, NULL}
-};
-
-#ifdef ZEND_ENGINE_2
-ZEND_BEGIN_ARG_INFO(__call_args, 0)
- ZEND_ARG_PASS_INFO(0)
- ZEND_ARG_PASS_INFO(0)
- ZEND_ARG_PASS_INFO(0)
- ZEND_ARG_PASS_INFO(0)
- ZEND_ARG_PASS_INFO(1)
-ZEND_END_ARG_INFO()
-#else
-unsigned char __call_args[] = { 5, BYREF_NONE, BYREF_NONE, BYREF_NONE, BYREF_NONE, BYREF_FORCE };
-#endif
-
-static zend_function_entry soap_client_functions[] = {
- PHP_ME(SoapClient, SoapClient, NULL, 0)
- PHP_ME(SoapClient, __call, __call_args, 0)
- PHP_ME(SoapClient, __getLastRequest, NULL, 0)
- PHP_ME(SoapClient, __getLastResponse, NULL, 0)
- PHP_ME(SoapClient, __getLastRequestHeaders, NULL, 0)
- PHP_ME(SoapClient, __getLastResponseHeaders, NULL, 0)
- PHP_ME(SoapClient, __getFunctions, NULL, 0)
- PHP_ME(SoapClient, __getTypes, NULL, 0)
- PHP_ME(SoapClient, __doRequest, NULL, 0)
- {NULL, NULL, NULL}
-};
-
-static zend_function_entry soap_var_functions[] = {
- PHP_ME(SoapVar, SoapVar, NULL, 0)
- {NULL, NULL, NULL}
-};
-
-static zend_function_entry soap_param_functions[] = {
- PHP_ME(SoapParam, SoapParam, NULL, 0)
- {NULL, NULL, NULL}
-};
-
-static zend_function_entry soap_header_functions[] = {
- PHP_ME(SoapHeader, SoapHeader, NULL, 0)
- {NULL, NULL, NULL}
-};
-
-zend_module_entry soap_module_entry = {
-#ifdef STANDARD_MODULE_HEADER
- STANDARD_MODULE_HEADER,
-#endif
- "soap",
- soap_functions,
- PHP_MINIT(soap),
- PHP_MSHUTDOWN(soap),
- PHP_RINIT(soap),
- NULL,
- PHP_MINFO(soap),
-#ifdef STANDARD_MODULE_HEADER
- NO_VERSION_YET,
-#endif
- STANDARD_MODULE_PROPERTIES,
-};
-
-#ifdef COMPILE_DL_SOAP
-ZEND_GET_MODULE(soap)
-#endif
-
-PHP_INI_BEGIN()
-STD_PHP_INI_ENTRY("soap.wsdl_cache_enabled", "1", PHP_INI_ALL, OnUpdateBool,
- cache_enabled, zend_soap_globals, soap_globals)
-STD_PHP_INI_ENTRY("soap.wsdl_cache_dir", "/tmp", PHP_INI_ALL, OnUpdateString,
- cache_dir, zend_soap_globals, soap_globals)
-#ifdef ZEND_ENGINE_2
-STD_PHP_INI_ENTRY("soap.wsdl_cache_ttl", "86400", PHP_INI_ALL, OnUpdateLong,
- cache_ttl, zend_soap_globals, soap_globals)
-#else
-STD_PHP_INI_ENTRY("soap.wsdl_cache_ttl", "86400", PHP_INI_ALL, OnUpdateInt,
- cache_ttl, zend_soap_globals, soap_globals)
-#endif
-PHP_INI_END()
-
-static void php_soap_init_globals(zend_soap_globals *soap_globals)
-{
- int i;
- long enc;
-
- zend_hash_init(&soap_globals->defEnc, 0, NULL, NULL, 1);
- zend_hash_init(&soap_globals->defEncIndex, 0, NULL, NULL, 1);
- zend_hash_init(&soap_globals->defEncNs, 0, NULL, NULL, 1);
-
- i = 0;
- do {
- enc = (long)&defaultEncoding[i];
-
- /* If has a ns and a str_type then index it */
- if (defaultEncoding[i].details.type_str) {
- if (defaultEncoding[i].details.ns != NULL) {
- char *ns_type;
- ns_type = emalloc(strlen(defaultEncoding[i].details.ns) + strlen(defaultEncoding[i].details.type_str) + 2);
- sprintf(ns_type, "%s:%s", defaultEncoding[i].details.ns, defaultEncoding[i].details.type_str);
- zend_hash_add(&soap_globals->defEnc, ns_type, strlen(ns_type) + 1, &enc, sizeof(encodePtr), NULL);
- efree(ns_type);
- } else {
- zend_hash_add(&soap_globals->defEnc, defaultEncoding[i].details.type_str, strlen(defaultEncoding[i].details.type_str) + 1, &enc, sizeof(encodePtr), NULL);
- }
- }
- /* Index everything by number */
- if (!zend_hash_index_exists(&soap_globals->defEncIndex, defaultEncoding[i].details.type)) {
- zend_hash_index_update(&soap_globals->defEncIndex, defaultEncoding[i].details.type, &enc, sizeof(encodePtr), NULL);
- }
- i++;
- } while (defaultEncoding[i].details.type != END_KNOWN_TYPES);
-
- /* hash by namespace */
- zend_hash_add(&soap_globals->defEncNs, XSD_1999_NAMESPACE, sizeof(XSD_1999_NAMESPACE), XSD_NS_PREFIX, sizeof(XSD_NS_PREFIX), NULL);
- zend_hash_add(&soap_globals->defEncNs, XSD_NAMESPACE, sizeof(XSD_NAMESPACE), XSD_NS_PREFIX, sizeof(XSD_NS_PREFIX), NULL);
- zend_hash_add(&soap_globals->defEncNs, XSI_NAMESPACE, sizeof(XSI_NAMESPACE), XSI_NS_PREFIX, sizeof(XSI_NS_PREFIX), NULL);
- zend_hash_add(&soap_globals->defEncNs, XML_NAMESPACE, sizeof(XML_NAMESPACE), XML_NS_PREFIX, sizeof(XML_NS_PREFIX), NULL);
- zend_hash_add(&soap_globals->defEncNs, SOAP_1_1_ENC_NAMESPACE, sizeof(SOAP_1_1_ENC_NAMESPACE), SOAP_1_1_ENC_NS_PREFIX, sizeof(SOAP_1_1_ENC_NS_PREFIX), NULL);
- zend_hash_add(&soap_globals->defEncNs, SOAP_1_2_ENC_NAMESPACE, sizeof(SOAP_1_2_ENC_NAMESPACE), SOAP_1_2_ENC_NS_PREFIX, sizeof(SOAP_1_2_ENC_NS_PREFIX), NULL);
-
- soap_globals->overrides = NULL;
- soap_globals->use_soap_error_handler = 0;
- soap_globals->error_code = NULL;
- soap_globals->error_object = NULL;
- soap_globals->sdl = NULL;
- soap_globals->soap_version = SOAP_1_1;
-}
-
-PHP_MSHUTDOWN_FUNCTION(soap)
-{
- zend_error_cb = old_error_handler;
- zend_hash_destroy(&SOAP_GLOBAL(defEnc));
- zend_hash_destroy(&SOAP_GLOBAL(defEncIndex));
- zend_hash_destroy(&SOAP_GLOBAL(defEncNs));
- UNREGISTER_INI_ENTRIES();
- return SUCCESS;
-}
-
-PHP_RINIT_FUNCTION(soap)
-{
- SOAP_GLOBAL(overrides) = NULL;
- SOAP_GLOBAL(use_soap_error_handler) = 0;
- SOAP_GLOBAL(error_code) = NULL;
- SOAP_GLOBAL(error_object) = NULL;
- SOAP_GLOBAL(sdl) = NULL;
- SOAP_GLOBAL(soap_version) = SOAP_1_1;
- SOAP_GLOBAL(encoding) = NULL;
- return SUCCESS;
-}
-
-PHP_MINIT_FUNCTION(soap)
-{
- zend_class_entry ce;
-
- /* TODO: add ini entry for always use soap errors */
- ZEND_INIT_MODULE_GLOBALS(soap, php_soap_init_globals, NULL);
- REGISTER_INI_ENTRIES();
-
-#ifndef ZEND_ENGINE_2
- /* Enable php stream/wrapper support for libxml */
- xmlRegisterDefaultInputCallbacks();
- xmlRegisterInputCallbacks(php_stream_xmlIO_match_wrapper, php_stream_xmlIO_open_wrapper,
- php_stream_xmlIO_read, php_stream_xmlIO_close);
-#endif
-
- /* Register SoapClient class */
- /* BIG NOTE : THIS EMITS AN COMPILATION WARNING UNDER ZE2 - handle_function_call deprecated.
- soap_call_function_handler should be of type struct _zend_function, not (*handle_function_call).
- */
-#ifdef ZEND_ENGINE_2
- {
- zend_internal_function fe;
-
- fe.type = ZEND_INTERNAL_FUNCTION;
- fe.handler = ZEND_FN(SoapClient___call);
- fe.function_name = NULL;
- fe.scope = NULL;
- fe.fn_flags = 0;
- fe.prototype = NULL;
- fe.num_args = 2;
- fe.arg_info = NULL;
- fe.pass_rest_by_reference = 0;
-
- INIT_OVERLOADED_CLASS_ENTRY(ce, PHP_SOAP_CLIENT_CLASSNAME, soap_client_functions,
- (zend_function *)&fe, NULL, NULL);
- soap_class_entry = zend_register_internal_class(&ce TSRMLS_CC);
- }
-#else
- INIT_OVERLOADED_CLASS_ENTRY(ce, PHP_SOAP_CLIENT_CLASSNAME, soap_client_functions, soap_call_function_handler, NULL, NULL);
- soap_class_entry = zend_register_internal_class(&ce TSRMLS_CC);
-#endif
-
- /* Register SoapVar class */
- INIT_CLASS_ENTRY(ce, PHP_SOAP_VAR_CLASSNAME, soap_var_functions);
- soap_var_class_entry = zend_register_internal_class(&ce TSRMLS_CC);
-
- /* Register SoapServer class */
- INIT_CLASS_ENTRY(ce, PHP_SOAP_SERVER_CLASSNAME, soap_server_functions);
- soap_server_class_entry = zend_register_internal_class(&ce TSRMLS_CC);
-
- /* Register SoapFault class */
- INIT_CLASS_ENTRY(ce, PHP_SOAP_FAULT_CLASSNAME, soap_fault_functions);
-#ifdef ZEND_ENGINE_2
- soap_fault_class_entry = zend_register_internal_class_ex(&ce, zend_exception_get_default(), NULL TSRMLS_CC);
-#else
- soap_fault_class_entry = zend_register_internal_class(&ce TSRMLS_CC);
-#endif
-
- /* Register SoapParam class */
- INIT_CLASS_ENTRY(ce, PHP_SOAP_PARAM_CLASSNAME, soap_param_functions);
- soap_param_class_entry = zend_register_internal_class(&ce TSRMLS_CC);
-
- INIT_CLASS_ENTRY(ce, PHP_SOAP_HEADER_CLASSNAME, soap_header_functions);
- soap_header_class_entry = zend_register_internal_class(&ce TSRMLS_CC);
-
- le_sdl = register_list_destructors(delete_sdl, NULL);
- le_url = register_list_destructors(delete_url, NULL);
- le_service = register_list_destructors(delete_service, NULL);
-
- REGISTER_LONG_CONSTANT("SOAP_1_1", SOAP_1_1, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("SOAP_1_2", SOAP_1_2, CONST_CS | CONST_PERSISTENT);
-
- REGISTER_LONG_CONSTANT("SOAP_PERSISTENCE_SESSION", SOAP_PERSISTENCE_SESSION, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("SOAP_PERSISTENCE_REQUEST", SOAP_PERSISTENCE_REQUEST, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("SOAP_FUNCTIONS_ALL", SOAP_FUNCTIONS_ALL, CONST_CS | CONST_PERSISTENT);
-
- REGISTER_LONG_CONSTANT("SOAP_ENCODED", SOAP_ENCODED, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("SOAP_LITERAL", SOAP_LITERAL, CONST_CS | CONST_PERSISTENT);
-
- REGISTER_LONG_CONSTANT("SOAP_RPC", SOAP_RPC, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("SOAP_DOCUMENT", SOAP_DOCUMENT, CONST_CS | CONST_PERSISTENT);
-
- REGISTER_LONG_CONSTANT("SOAP_ACTOR_NEXT", SOAP_ACTOR_NEXT, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("SOAP_ACTOR_NONE", SOAP_ACTOR_NONE, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("SOAP_ACTOR_UNLIMATERECEIVER", SOAP_ACTOR_UNLIMATERECEIVER, CONST_CS | CONST_PERSISTENT);
-
- REGISTER_LONG_CONSTANT("SOAP_COMPRESSION_ACCEPT", SOAP_COMPRESSION_ACCEPT, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("SOAP_COMPRESSION_GZIP", SOAP_COMPRESSION_GZIP, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("SOAP_COMPRESSION_DEFLATE", SOAP_COMPRESSION_DEFLATE, CONST_CS | CONST_PERSISTENT);
-
- REGISTER_LONG_CONSTANT("UNKNOWN_TYPE", UNKNOWN_TYPE, CONST_CS | CONST_PERSISTENT);
-
- REGISTER_LONG_CONSTANT("XSD_STRING", XSD_STRING, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("XSD_BOOLEAN", XSD_BOOLEAN, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("XSD_DECIMAL", XSD_DECIMAL, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("XSD_FLOAT", XSD_FLOAT, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("XSD_DOUBLE", XSD_DOUBLE, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("XSD_DURATION", XSD_DURATION, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("XSD_DATETIME", XSD_DATETIME, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("XSD_TIME", XSD_TIME, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("XSD_DATE", XSD_DATE, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("XSD_GYEARMONTH", XSD_GYEARMONTH, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("XSD_GYEAR", XSD_GYEAR, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("XSD_GMONTHDAY", XSD_GMONTHDAY, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("XSD_GDAY", XSD_GDAY, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("XSD_GMONTH", XSD_GMONTH, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("XSD_HEXBINARY", XSD_HEXBINARY, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("XSD_BASE64BINARY", XSD_BASE64BINARY, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("XSD_ANYURI", XSD_ANYURI, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("XSD_QNAME", XSD_QNAME, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("XSD_NOTATION", XSD_NOTATION, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("XSD_NORMALIZEDSTRING", XSD_NORMALIZEDSTRING, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("XSD_TOKEN", XSD_TOKEN, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("XSD_LANGUAGE", XSD_LANGUAGE, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("XSD_NMTOKEN", XSD_NMTOKEN, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("XSD_NAME", XSD_NAME, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("XSD_NCNAME", XSD_NCNAME, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("XSD_ID", XSD_ID, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("XSD_IDREF", XSD_IDREF, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("XSD_IDREFS", XSD_IDREFS, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("XSD_ENTITY", XSD_ENTITY, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("XSD_ENTITIES", XSD_ENTITIES, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("XSD_INTEGER", XSD_INTEGER, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("XSD_NONPOSITIVEINTEGER", XSD_NONPOSITIVEINTEGER, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("XSD_NEGATIVEINTEGER", XSD_NEGATIVEINTEGER, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("XSD_LONG", XSD_LONG, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("XSD_INT", XSD_INT, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("XSD_SHORT", XSD_SHORT, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("XSD_BYTE", XSD_BYTE, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("XSD_NONNEGATIVEINTEGER", XSD_NONNEGATIVEINTEGER, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("XSD_UNSIGNEDLONG", XSD_UNSIGNEDLONG, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("XSD_UNSIGNEDINT", XSD_UNSIGNEDINT, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("XSD_UNSIGNEDSHORT", XSD_UNSIGNEDSHORT, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("XSD_UNSIGNEDBYTE", XSD_UNSIGNEDBYTE, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("XSD_POSITIVEINTEGER", XSD_POSITIVEINTEGER, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("XSD_NMTOKENS", XSD_NMTOKENS, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("XSD_ANYTYPE", XSD_ANYTYPE, CONST_CS | CONST_PERSISTENT);
-
- REGISTER_LONG_CONSTANT("SOAP_ENC_OBJECT", SOAP_ENC_OBJECT, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("SOAP_ENC_ARRAY", SOAP_ENC_ARRAY, CONST_CS | CONST_PERSISTENT);
-
- REGISTER_LONG_CONSTANT("XSD_1999_TIMEINSTANT", XSD_1999_TIMEINSTANT, CONST_CS | CONST_PERSISTENT);
-
- REGISTER_STRING_CONSTANT("XSD_NAMESPACE", XSD_NAMESPACE, CONST_CS | CONST_PERSISTENT);
- REGISTER_STRING_CONSTANT("XSD_1999_NAMESPACE", XSD_1999_NAMESPACE, CONST_CS | CONST_PERSISTENT);
-
- old_error_handler = zend_error_cb;
- zend_error_cb = soap_error_handler;
-
- return SUCCESS;
-}
-
-PHP_MINFO_FUNCTION(soap)
-{
- php_info_print_table_start();
- php_info_print_table_row(2, "Soap Client", "enabled");
- php_info_print_table_row(2, "Soap Server", "enabled");
- php_info_print_table_end();
- DISPLAY_INI_ENTRIES();
-}
-
-#ifdef HAVE_PHP_DOMXML
-PHP_FUNCTION(soap_encode_to_xml)
-{
- zval *pzval, *ret;
- encodePtr enc;
- char *name;
- int found, name_len;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "sz", &name, &name_len, &pzval) == FAILURE) {
- php_error_docref(NULL TSRMLS_CC, E_ERROR, "wrong number of parameters");
- }
-
- enc = get_conversion(Z_TYPE_P(pzval));
- ret = php_domobject_new(serialize_zval(pzval, NULL, name, SOAP_ENCODED), &found, NULL TSRMLS_CC);
- *return_value = *ret;
- zval_copy_ctor(return_value);
- zval_ptr_dtor(&ret);
-}
-
-PHP_FUNCTION(soap_encode_to_zval)
-{
- zval *dom, **addr, *ret;
- xmlNodePtr node;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z", &dom) == FAILURE) {
- php_error_docref(NULL TSRMLS_CC, E_ERROR, "wrong number of parameters");
- }
-
- if (zend_hash_index_find(Z_OBJPROP_P(dom), 1, (void **)&addr) == FAILURE) {
- }
-
- node = (xmlNodePtr)Z_LVAL_PP(addr);
- ret = master_to_zval(NULL, node);
- *return_value = *ret;
-}
-#endif
-
-/* {{{ proto object SoapParam::SoapParam ( mixed data, string name)
- SoapParam constructor */
-PHP_METHOD(SoapParam, SoapParam)
-{
- zval *data;
- char *name;
- int name_length;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "zs", &data, &name, &name_length) == FAILURE) {
- php_error_docref(NULL TSRMLS_CC, E_ERROR, "Invalid arguments");
- }
-
-#ifndef ZEND_ENGINE_2
- zval_add_ref(&data);
-#endif
- add_property_stringl(this_ptr, "param_name", name, name_length, 1);
- add_property_zval(this_ptr, "param_data", data);
-}
-/* }}} */
-
-
-/* {{{ proto object SoapHeader::SoapHeader ( string namespace, string name [, mixed data [, bool mustUnderstand [, mixed actor]]])
- SoapHeader constructor */
-PHP_METHOD(SoapHeader, SoapHeader)
-{
- zval *data = NULL, *actor = NULL;
- char *name, *ns;
- int name_len, ns_len;
- zend_bool must_understand = 0;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ss|zbz", &ns, &ns_len, &name, &name_len, &data, &must_understand, &actor) == FAILURE) {
- php_error_docref(NULL TSRMLS_CC, E_ERROR, "Invalid arguments");
- }
-
- add_property_stringl(this_ptr, "namespace", ns, ns_len, 1);
- add_property_stringl(this_ptr, "name", name, name_len, 1);
- if (data) {
-#ifndef ZEND_ENGINE_2
- zval_add_ref(&data);
-#endif
- add_property_zval(this_ptr, "data", data);
- }
- add_property_bool(this_ptr, "mustUnderstand", must_understand);
- if (actor == NULL) {
- } else if (Z_TYPE_P(actor) == IS_LONG) {
- add_property_long(this_ptr, "actor", Z_LVAL_P(actor));
- } else if (Z_TYPE_P(actor) == IS_STRING) {
- add_property_stringl(this_ptr, "actor", Z_STRVAL_P(actor), Z_STRLEN_P(actor), 1);
- } else {
- php_error_docref(NULL TSRMLS_CC, E_ERROR, "Invalid arguments");
- }
-}
-
-/* {{{ proto object SoapFault::SoapFault ( string faultcode, string faultstring [, string faultactor [, mixed detail [, string faultname [, mixed headerfault]]]])
- SoapFault constructor */
-PHP_METHOD(SoapFault, SoapFault)
-{
- char *fault_string = NULL, *fault_code = NULL, *fault_actor = NULL, *name = NULL;
- int fault_string_len, fault_code_len, fault_actor_len, name_len;
- zval *details = NULL, *headerfault = NULL;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ss|s!z!s!z",
- &fault_code, &fault_code_len,
- &fault_string, &fault_string_len,
- &fault_actor, &fault_actor_len,
- &details, &name, &name_len, &headerfault) == FAILURE) {
- php_error_docref(NULL TSRMLS_CC, E_ERROR, "Invalid arguments");
- }
-
- set_soap_fault(this_ptr, fault_code, fault_string, fault_actor, details, name TSRMLS_CC);
- if (headerfault != NULL) {
- add_property_zval(this_ptr, "headerfault", headerfault);
- }
-}
-/* }}} */
-
-
-#ifdef ZEND_ENGINE_2
-/* {{{ proto object SoapFault::SoapFault ( string faultcode, string faultstring [, string faultactor [, mixed detail [, string faultname [, mixed headerfault]]]])
- SoapFault constructor */
-PHP_METHOD(SoapFault, __toString)
-{
- zval *faultcode, *faultstring, *file, *line, *trace;
- char *str;
- int len;
- zend_fcall_info fci;
- zval fname;
-
- faultcode = zend_read_property(soap_fault_class_entry, this_ptr, "faultcode", sizeof("faultcode")-1, 1 TSRMLS_CC);
- faultstring = zend_read_property(soap_fault_class_entry, this_ptr, "faultstring", sizeof("faultstring")-1, 1 TSRMLS_CC);
- file = zend_read_property(soap_fault_class_entry, this_ptr, "file", sizeof("file")-1, 1 TSRMLS_CC);
- line = zend_read_property(soap_fault_class_entry, this_ptr, "line", sizeof("line")-1, 1 TSRMLS_CC);
-
- ZVAL_STRINGL(&fname, "gettraceasstring", sizeof("gettraceasstring")-1, 0);
-
- fci.size = sizeof(fci);
- fci.function_table = &Z_OBJCE_P(getThis())->function_table;
- fci.function_name = &fname;
- fci.symbol_table = NULL;
- fci.object_pp = &getThis();
- fci.retval_ptr_ptr = &trace;
- fci.param_count = 0;
- fci.params = NULL;
- fci.no_separation = 1;
-
- zend_call_function(&fci, NULL TSRMLS_CC);
-
- len = spprintf(&str, 0, "SoapFault exception: [%s] %s in %s:%ld\nStack trace:\n%s",
- Z_STRVAL_P(faultcode), Z_STRVAL_P(faultstring), Z_STRVAL_P(file), Z_LVAL_P(line),
- Z_STRLEN_P(trace) ? Z_STRVAL_P(trace) : "#0 {main}\n");
-
- zval_ptr_dtor(&trace);
-
- RETURN_STRINGL(str, len, 0);
-}
-/* }}} */
-#endif
-
-/* {{{ proto object SoapVar::SoapVar ( mixed data, int encoding [, string type_name [, string type_namespace [, string node_name [, string node_namespace]]]])
- SoapVar constructor */
-PHP_METHOD(SoapVar, SoapVar)
-{
- zval *data, *type;
- char *stype = NULL, *ns = NULL, *name = NULL, *namens = NULL;
- int stype_len, ns_len, name_len, namens_len;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z!z|ssss", &data, &type, &stype, &stype_len, &ns, &ns_len, &name, &name_len, &namens, &namens_len) == FAILURE) {
- php_error_docref(NULL TSRMLS_CC, E_ERROR, "Invalid arguments");
- }
-
- if (Z_TYPE_P(type) == IS_NULL) {
- add_property_long(this_ptr, "enc_type", UNKNOWN_TYPE);
- } else {
- if (zend_hash_index_exists(&SOAP_GLOBAL(defEncIndex), Z_LVAL_P(type))) {
- add_property_long(this_ptr, "enc_type", Z_LVAL_P(type));
- } else {
- php_error_docref(NULL TSRMLS_CC, E_ERROR, "Invalid type ID");
- }
- }
-
- if (data) {
-#ifndef ZEND_ENGINE_2
- zval_add_ref(&data);
-#endif
- add_property_zval(this_ptr, "enc_value", data);
- }
-
- if (stype && strlen(stype) > 0) {
- add_property_stringl(this_ptr, "enc_stype", stype, stype_len, 1);
- }
- if (ns && strlen(ns) > 0) {
- add_property_stringl(this_ptr, "enc_ns", ns, ns_len, 1);
- }
- if (name && strlen(name) > 0) {
- add_property_stringl(this_ptr, "enc_name", name, name_len, 1);
- }
- if (namens && strlen(namens) > 0) {
- add_property_stringl(this_ptr, "enc_namens", namens, namens_len, 1);
- }
-}
-/* }}} */
-
-
-/* {{{ proto object SoapServer::SoapServer ( mixed wsdl [, array options])
- SoapServer constructor */
-PHP_METHOD(SoapServer, SoapServer)
-{
- soapServicePtr service;
- zval *wsdl, *options = NULL;
- int ret;
- int version = SOAP_1_1;
-
- SOAP_SERVER_BEGIN_CODE();
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z|a", &wsdl, &options) == FAILURE) {
- php_error_docref(NULL TSRMLS_CC, E_ERROR, "Invalid arguments");
- }
-
- if (Z_TYPE_P(wsdl) == IS_STRING) {
- } else if (Z_TYPE_P(wsdl) == IS_NULL) {
- wsdl = NULL;
- } else {
- php_error_docref(NULL TSRMLS_CC, E_ERROR, "Invalid arguments");
- }
-
- service = emalloc(sizeof(soapService));
- memset(service, 0, sizeof(soapService));
-
- if (options != NULL) {
- HashTable *ht = Z_ARRVAL_P(options);
- zval **tmp;
-
- if (zend_hash_find(ht, "soap_version", sizeof("soap_version"), (void**)&tmp) == SUCCESS) {
- if (Z_TYPE_PP(tmp) == IS_LONG ||
- (Z_LVAL_PP(tmp) == SOAP_1_1 && Z_LVAL_PP(tmp) == SOAP_1_2)) {
- version = Z_LVAL_PP(tmp);
- }
- }
-
- if (zend_hash_find(ht, "uri", sizeof("uri"), (void**)&tmp) == SUCCESS &&
- Z_TYPE_PP(tmp) == IS_STRING) {
- service->uri = estrndup(Z_STRVAL_PP(tmp), Z_STRLEN_PP(tmp));
- } else if (wsdl == NULL) {
- php_error_docref(NULL TSRMLS_CC, E_ERROR, "Invalid arguments. 'uri' option is required in nonWSDL mode.");
- return;
- }
-
- if (zend_hash_find(ht, "actor", sizeof("actor"), (void**)&tmp) == SUCCESS &&
- Z_TYPE_PP(tmp) == IS_STRING) {
- service->actor = estrndup(Z_STRVAL_PP(tmp), Z_STRLEN_PP(tmp));
- }
-
- if (zend_hash_find(ht, "encoding", sizeof("encoding"), (void**)&tmp) == SUCCESS &&
- Z_TYPE_PP(tmp) == IS_STRING) {
- xmlCharEncodingHandlerPtr encoding;
-
- encoding = xmlFindCharEncodingHandler(Z_STRVAL_PP(tmp));
- if (encoding == NULL) {
- php_error_docref(NULL TSRMLS_CC, E_ERROR, "Invalid arguments. Invalid 'encoding' option - '%s'.", Z_STRVAL_PP(tmp));
- } else {
- service->encoding = encoding;
- }
- }
-
- } else if (wsdl == NULL) {
- php_error_docref(NULL TSRMLS_CC, E_ERROR, "Invalid arguments. 'uri' option is required in nonWSDL mode.");
- }
-
- service->version = version;
- service->type = SOAP_FUNCTIONS;
- service->soap_functions.functions_all = FALSE;
- service->soap_functions.ft = emalloc(sizeof(HashTable));
- zend_hash_init(service->soap_functions.ft, 0, NULL, ZVAL_PTR_DTOR, 0);
-
- if (wsdl) {
- service->sdl = get_sdl(Z_STRVAL_P(wsdl) TSRMLS_CC);
- if (service->uri == NULL) {
- if (service->sdl->target_ns) {
- service->uri = estrdup(service->sdl->target_ns);
- } else {
- /*FIXME*/
- service->uri = estrdup("http://unknown-uri/");
- }
- }
- }
-
- ret = zend_list_insert(service, le_service);
- add_property_resource(this_ptr, "service", ret);
- zend_list_addref(ret);
-
- SOAP_SERVER_END_CODE();
-}
-/* }}} */
-
-
-#define NULL_OR_STRING(zval) \
- (!zval || Z_TYPE_P(zval) == IS_NULL || Z_TYPE_P(zval) == IS_STRING)
-
-#define IS_VALID_FUNCTION(zval) \
- (zval && Z_TYPE_P(zval) != IS_NULL)
-
-#ifdef HAVE_PHP_DOMXML
-PHP_FUNCTION(PHP_SOAP_SERVER_CLASS, map)
-{
- char *type, *class_name;
- zval *to_xml_before = NULL, *to_xml = NULL, *to_xml_after = NULL,
- *to_zval_before = NULL, *to_zval = NULL, *to_zval_after = NULL;
- int type_len, class_name_len;
- char *ns, *ctype;
- soapServicePtr service;
-
- SOAP_SERVER_BEGIN_CODE();
-
- if (zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, ZEND_NUM_ARGS() TSRMLS_CC, "sz|zzzzz",
- &type, &type_len, &to_xml_before, &to_xml, &to_xml_after, &to_zval_before, &to_zval,
- &to_zval_after) == SUCCESS && NULL_OR_STRING(to_xml_before) && NULL_OR_STRING(to_xml) &&
- NULL_OR_STRING(to_xml_after) && NULL_OR_STRING(to_zval_before) && NULL_OR_STRING(to_zval) &&
- NULL_OR_STRING(to_zval_after)) {
-
- soapMappingPtr map;
- encodePtr enc, new_enc;
- smart_str resloved_ns = {0};
-
- FETCH_THIS_SERVICE(service);
-
- new_enc = emalloc(sizeof(encode));
- memset(new_enc, 0, sizeof(encode));
-
- ctype = strrchr(type, ':');
- if (ctype) {
- smart_str_appendl(&resloved_ns, type, ctype - type);
- smart_str_0(&resloved_ns);
- ctype++;
- } else {
- ns = NULL;
- }
-
- if (ns) {
- if (zend_hash_find(SOAP_GLOBAL(defEncPrefix), resloved_ns.c, resloved_ns.len + 1, &ns) == SUCCESS) {
- enc = get_encoder(service->sdl, ns, ctype);
- smart_str_free(&resloved_ns);
- smart_str_appendl(&resloved_ns, ns, strlen(ns));
- smart_str_appendc(&resloved_ns, ':');
- smart_str_appendl(&resloved_ns, ctype, strlen(ctype));
- smart_str_0(&resloved_ns);
- type = resloved_ns.c;
- type_len = resloved_ns.len;
- } else {
- enc = get_encoder_ex(service->sdl, type);
- }
- } else {
- enc = get_encoder_ex(service->sdl, type);
- }
-
- new_enc->details.type = enc->details.type;
- new_enc->details.ns = estrdup(enc->details.ns);
- new_enc->details.type_str = estrdup(enc->details.type_str);
- new_enc->details.sdl_type = enc->details.sdl_type;
- new_enc->to_xml = enc->to_xml;
- new_enc->to_zval = enc->to_zval;
- new_enc->to_xml_before = enc->to_xml_before;
- new_enc->to_zval_before = enc->to_zval_before;
- new_enc->to_xml_after = enc->to_xml_after;
- new_enc->to_zval_after = enc->to_zval_after;
-
- map = emalloc(sizeof(soapMapping));
- memset(map, 0, sizeof(soapMapping));
-
- map->type = SOAP_MAP_FUNCTION;
- if (IS_VALID_FUNCTION(to_xml_before)) {
- zval_add_ref(&to_xml_before);
- map->map_functions.to_xml_before = to_xml_before;
- new_enc->to_xml_before = to_xml_before_user;
- }
- if (IS_VALID_FUNCTION(to_xml)) {
- zval_add_ref(&to_xml);
- map->map_functions.to_xml = to_xml;
- new_enc->to_xml = to_xml_user;
- }
- if (IS_VALID_FUNCTION(to_xml_after)) {
- zval_add_ref(&to_xml_after);
- map->map_functions.to_xml_after = to_xml_after;
- new_enc->to_xml_after = to_xml_after_user;
- }
- if (IS_VALID_FUNCTION(to_zval_before)) {
- zval_add_ref(&to_zval_before);
- map->map_functions.to_zval_before = to_zval_before;
- new_enc->to_zval_before = to_zval_before_user;
- }
- if (IS_VALID_FUNCTION(to_zval)) {
- zval_add_ref(&to_zval);
- map->map_functions.to_zval = to_zval;
- new_enc->to_zval = to_zval_user;
- }
- if (IS_VALID_FUNCTION(to_zval_after)) {
- zval_add_ref(&to_zval_after);
- map->map_functions.to_zval_after = to_zval_after;
- new_enc->to_zval_after = to_zval_after_user;
- }
-
- new_enc->details.map = map;
-
- if (!service->mapping) {
- service->mapping = emalloc(sizeof(HashTable));
- zend_hash_init(service->mapping, 0, NULL, delete_encoder, 0);
- }
- zend_hash_update(service->mapping, type, type_len + 1, &new_enc, sizeof(encodePtr), NULL);
- smart_str_free(&resloved_ns);
- } else if (zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, ZEND_NUM_ARGS() TSRMLS_CC, "ss|l", &type, &type_len, &class_name, &class_name_len, &type) == SUCCESS) {
- } else {
- php_error_docref(NULL TSRMLS_CC, E_ERROR, "Wrong number of parameters");
- }
-}
-#endif
-
-
-/* {{{ proto object SoapServer::SoapServer ( mixed wsdl [, array options])
- Sets persistence mode of SoapServer */
-PHP_METHOD(SoapServer, setPersistence)
-{
- soapServicePtr service;
- long value;
-
- SOAP_SERVER_BEGIN_CODE();
-
- FETCH_THIS_SERVICE(service);
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &value) != FAILURE) {
- if (service->type == SOAP_CLASS) {
- if (value == SOAP_PERSISTENCE_SESSION ||
- value == SOAP_PERSISTENCE_REQUEST) {
- service->soap_class.persistance = value;
- } else {
- php_error_docref(NULL TSRMLS_CC, E_ERROR, "Tried to set persistence with bogus value (%ld)", value);
- }
- } else {
- php_error_docref(NULL TSRMLS_CC, E_ERROR, "Tried to set persistence when you are using you SOAP SERVER in function mode, no persistence needed");
- }
- }
-
- SOAP_SERVER_END_CODE();
-}
-/* }}} */
-
-
-/* {{{ proto void SoapServer::setClass(string class_name [, mixed args])
- Sets class which will handle SOAP requests */
-PHP_METHOD(SoapServer, setClass)
-{
- soapServicePtr service;
-#ifdef ZEND_ENGINE_2
- zend_class_entry **ce;
-#else
- zend_class_entry *ce;
-#endif
- int found, argc;
- zval ***argv;
-
- SOAP_SERVER_BEGIN_CODE();
-
- FETCH_THIS_SERVICE(service);
-
- argc = ZEND_NUM_ARGS();
- argv = safe_emalloc(argc, sizeof(zval **), 0);
-
- if (argc < 1 || zend_get_parameters_array_ex(argc, argv) == FAILURE) {
- efree(argv);
- WRONG_PARAM_COUNT;
- }
-
- if (Z_TYPE_PP(argv[0]) == IS_STRING) {
-#ifdef ZEND_ENGINE_2
- found = zend_lookup_class(Z_STRVAL_PP(argv[0]), Z_STRLEN_PP(argv[0]), &ce TSRMLS_CC);
-#else
- char *class_name = estrdup(Z_STRVAL_PP(argv[0]));
- found = zend_hash_find(EG(class_table), php_strtolower(class_name, Z_STRLEN_PP(argv[0])), Z_STRLEN_PP(argv[0]) + 1, (void **)&ce);
- efree(class_name);
-#endif
- if (found != FAILURE) {
- service->type = SOAP_CLASS;
-#ifdef ZEND_ENGINE_2
- service->soap_class.ce = *ce;
-#else
- service->soap_class.ce = ce;
-#endif
- service->soap_class.persistance = SOAP_PERSISTENCE_REQUEST;
- service->soap_class.argc = argc - 1;
- if (service->soap_class.argc > 0) {
- int i;
- service->soap_class.argv = safe_emalloc(sizeof(zval), service->soap_class.argc, 0);
- for (i = 0;i < service->soap_class.argc;i++) {
- service->soap_class.argv[i] = *(argv[i + 1]);
- zval_add_ref(&service->soap_class.argv[i]);
- }
- }
- } else {
- php_error_docref(NULL TSRMLS_CC, E_ERROR, "Tried to set a non existant class (%s)", Z_STRVAL_PP(argv[0]));
- }
- } else {
- php_error_docref(NULL TSRMLS_CC, E_ERROR, "You must pass in a string");
- }
-
- efree(argv);
-
- SOAP_SERVER_END_CODE();
-}
-/* }}} */
-
-
-/* {{{ proto array SoapServer::getFunctions(void)
- Returns list of defined functions */
-PHP_METHOD(SoapServer, getFunctions)
-{
- soapServicePtr service;
- HashTable *ft = NULL;
-
- SOAP_SERVER_BEGIN_CODE();
-
- ZERO_PARAM()
- FETCH_THIS_SERVICE(service);
-
- array_init(return_value);
- if (service->type == SOAP_CLASS) {
- ft = &service->soap_class.ce->function_table;
- } else if (service->soap_functions.functions_all == TRUE) {
- ft = EG(function_table);
- } else if (service->soap_functions.ft != NULL) {
- zval **name;
- HashPosition pos;
-
- zend_hash_internal_pointer_reset_ex(service->soap_functions.ft, &pos);
- while (zend_hash_get_current_data_ex(service->soap_functions.ft, (void **)&name, &pos) != FAILURE) {
- add_next_index_string(return_value, Z_STRVAL_PP(name), 1);
- zend_hash_move_forward_ex(service->soap_functions.ft, &pos);
- }
- }
- if (ft != NULL) {
- zend_function *f;
- HashPosition pos;
- zend_hash_internal_pointer_reset_ex(ft, &pos);
- while (zend_hash_get_current_data_ex(ft, (void **)&f, &pos) != FAILURE) {
- if ((service->type != SOAP_CLASS) || (f->common.fn_flags & ZEND_ACC_PUBLIC)) {
- add_next_index_string(return_value, f->common.function_name, 1);
- }
- zend_hash_move_forward_ex(ft, &pos);
- }
- }
-
- SOAP_SERVER_END_CODE();
-}
-/* }}} */
-
-
-/* {{{ proto void SoapServer::addFunction(mixed functions)
- Adds one or several functions those will handle SOAP requests */
-PHP_METHOD(SoapServer, addFunction)
-{
- soapServicePtr service;
- zval *function_name, *function_copy;
- HashPosition pos;
-
- SOAP_SERVER_BEGIN_CODE();
-
- FETCH_THIS_SERVICE(service);
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z", &function_name) == FAILURE) {
- php_error_docref(NULL TSRMLS_CC, E_ERROR, "Invalid parameters passed");
- }
-
- /* TODO: could use zend_is_callable here */
-
- if (function_name->type == IS_ARRAY) {
- if (service->type == SOAP_FUNCTIONS) {
- zval **tmp_function, *function_copy;
-
- if (service->soap_functions.ft == NULL) {
- service->soap_functions.functions_all = FALSE;
- service->soap_functions.ft = emalloc(sizeof(HashTable));
- zend_hash_init(service->soap_functions.ft, 0, NULL, ZVAL_PTR_DTOR, 0);
- }
-
- zend_hash_internal_pointer_reset_ex(Z_ARRVAL_P(function_name), &pos);
- while (zend_hash_get_current_data_ex(Z_ARRVAL_P(function_name), (void **)&tmp_function, &pos) != FAILURE) {
- char *key;
- int key_len;
- zend_function *f;
-
- if (Z_TYPE_PP(tmp_function) != IS_STRING) {
- php_error_docref(NULL TSRMLS_CC, E_ERROR, "Tried to add a function that isn't a string");
- }
-
- key_len = Z_STRLEN_PP(tmp_function);
- key = emalloc(key_len + 1);
- zend_str_tolower_copy(key, Z_STRVAL_PP(tmp_function), key_len);
-
- if (zend_hash_find(EG(function_table), key, key_len+1, (void**)&f) == FAILURE) {
- php_error_docref(NULL TSRMLS_CC, E_ERROR, "Tried to add a non existant function '%s'", Z_STRVAL_PP(tmp_function));
- }
-
- MAKE_STD_ZVAL(function_copy);
- ZVAL_STRING(function_copy, f->common.function_name, 1);
- zend_hash_update(service->soap_functions.ft, key, key_len+1, &function_copy, sizeof(zval *), NULL);
-
- efree(key);
- zend_hash_move_forward_ex(Z_ARRVAL_P(function_name), &pos);
- }
- }
- } else if (function_name->type == IS_STRING) {
- char *key;
- int key_len;
- zend_function *f;
-
- key_len = Z_STRLEN_P(function_name);
- key = emalloc(key_len + 1);
- zend_str_tolower_copy(key, Z_STRVAL_P(function_name), key_len);
-
- if (zend_hash_find(EG(function_table), key, key_len+1, (void**)&f) == FAILURE) {
- php_error_docref(NULL TSRMLS_CC, E_ERROR, "Tried to add a non existant function '%s'", Z_STRVAL_P(function_name));
- }
- if (service->soap_functions.ft == NULL) {
- service->soap_functions.functions_all = FALSE;
- service->soap_functions.ft = emalloc(sizeof(HashTable));
- zend_hash_init(service->soap_functions.ft, 0, NULL, ZVAL_PTR_DTOR, 0);
- }
-
- MAKE_STD_ZVAL(function_copy);
- ZVAL_STRING(function_copy, f->common.function_name, 1);
- zend_hash_update(service->soap_functions.ft, key, key_len+1, &function_copy, sizeof(zval *), NULL);
- efree(key);
- } else if (function_name->type == IS_LONG) {
- if (Z_LVAL_P(function_name) == SOAP_FUNCTIONS_ALL) {
- if (service->soap_functions.ft != NULL) {
- zend_hash_destroy(service->soap_functions.ft);
- efree(service->soap_functions.ft);
- service->soap_functions.ft = NULL;
- }
- service->soap_functions.functions_all = TRUE;
- } else {
- php_error_docref(NULL TSRMLS_CC, E_ERROR, "Invalid value passed");
- }
- }
-
- SOAP_SERVER_END_CODE();
-}
-/* }}} */
-
-
-/* {{{ proto void SoapServer::handle ( [string soap_request])
- Handles a SOAP request */
-PHP_METHOD(SoapServer, handle)
-{
- int soap_version, old_soap_version;
- sdlPtr old_sdl = NULL;
- soapServicePtr service;
- xmlDocPtr doc_request, doc_return;
- zval function_name, **params, **raw_post, *soap_obj, retval, **server_vars;
- char *fn_name, cont_len[30];
- int num_params = 0, size, i, call_status = 0;
- xmlChar *buf;
- HashTable *function_table;
- soapHeader *soap_headers;
- sdlFunctionPtr function;
- char *arg = NULL;
- int arg_len;
- xmlCharEncodingHandlerPtr old_encoding;
-
- SOAP_SERVER_BEGIN_CODE();
-
- FETCH_THIS_SERVICE(service);
- SOAP_GLOBAL(soap_version) = service->version;
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|s", &arg, &arg_len) == FAILURE) {
- php_error_docref(NULL TSRMLS_CC, E_ERROR, "Invalid parameters passed");
- }
- INIT_ZVAL(retval);
-
- if (zend_hash_find(&EG(symbol_table), "_SERVER", sizeof("_SERVER"), (void **)&server_vars) == SUCCESS) {
- zval **req_method, **query_string;
- if (zend_hash_find(Z_ARRVAL_PP(server_vars), "REQUEST_METHOD", sizeof("REQUEST_METHOD"), (void **)&req_method) == SUCCESS) {
- if (!strcmp(Z_STRVAL_PP(req_method), "GET") && zend_hash_find(Z_ARRVAL_PP(server_vars), "QUERY_STRING", sizeof("QUERY_STRING"), (void **)&query_string) == SUCCESS) {
- if (stricmp(Z_STRVAL_PP(query_string), "wsdl") == 0) {
- if (service->sdl) {
-/*
- char *hdr = emalloc(sizeof("Location: ")+strlen(service->sdl->source));
- strcpy(hdr,"Location: ");
- strcat(hdr,service->sdl->source);
- sapi_add_header(hdr, sizeof("Location: ")+strlen(service->sdl->source)-1, 1);
- efree(hdr);
-*/
- zval readfile, readfile_ret, *param;
-
- INIT_ZVAL(readfile);
- INIT_ZVAL(readfile_ret);
- MAKE_STD_ZVAL(param);
-
- sapi_add_header("Content-Type: text/xml; charset=\"utf-8\"", sizeof("Content-Type: text/xml; charset=\"utf-8\"")-1, 1);
- ZVAL_STRING(param, service->sdl->source, 1);
- ZVAL_STRING(&readfile, "readfile", 1);
- if (call_user_function(EG(function_table), NULL, &readfile, &readfile_ret, 1, &param TSRMLS_CC) == FAILURE) {
- soap_server_fault("Server", "Couldn't find WSDL", NULL, NULL, NULL TSRMLS_CC);
- }
-
- zval_ptr_dtor(&param);
- zval_dtor(&readfile);
- zval_dtor(&readfile_ret);
-
- SOAP_SERVER_END_CODE();
- return;
- } else {
- soap_server_fault("Server", "WSDL generation is not supported yet", NULL, NULL, NULL TSRMLS_CC);
-/*
- sapi_add_header("Content-Type: text/xml; charset=\"utf-8\"", sizeof("Content-Type: text/xml; charset=\"utf-8\""), 1);
- PUTS("<?xml version=\"1.0\" ?>\n<definitions\n");
- PUTS(" xmlns=\"http://schemas.xmlsoap.org/wsdl/\"\n");
- PUTS(" targetNamespace=\"");
- PUTS(service->uri);
- PUTS("\">\n");
- PUTS("</definitions>");
-*/
- SOAP_SERVER_END_CODE();
- return;
- }
- }
- }
- }
- }
-
- if (php_start_ob_buffer(NULL, 0, 0 TSRMLS_CC) != SUCCESS) {
- php_error_docref(NULL TSRMLS_CC, E_ERROR,"ob_start failed");
- }
-
- if (ZEND_NUM_ARGS() == 0) {
- if (zend_hash_find(&EG(symbol_table), HTTP_RAW_POST_DATA, sizeof(HTTP_RAW_POST_DATA), (void **) &raw_post)!=FAILURE
- && ((*raw_post)->type==IS_STRING)) {
- zval **server_vars, **encoding;
-
- if (zend_hash_find(&EG(symbol_table), "_SERVER", sizeof("_SERVER"), (void **) &server_vars) == SUCCESS &&
- Z_TYPE_PP(server_vars) == IS_ARRAY &&
- zend_hash_find(Z_ARRVAL_PP(server_vars), "HTTP_CONTENT_ENCODING", sizeof("HTTP_CONTENT_ENCODING"), (void **) &encoding)==SUCCESS &&
- Z_TYPE_PP(encoding) == IS_STRING) {
- zval func;
- zval retval;
- zval param;
- zval *params[1];
-
- if ((strcmp(Z_STRVAL_PP(encoding),"gzip") == 0 ||
- strcmp(Z_STRVAL_PP(encoding),"x-gzip") == 0) &&
- zend_hash_exists(EG(function_table), "gzinflate", sizeof("gzinflate"))) {
- ZVAL_STRING(&func, "gzinflate", 0);
- params[0] = &param;
- ZVAL_STRINGL(params[0], Z_STRVAL_PP(raw_post)+10, Z_STRLEN_PP(raw_post)-10, 0);
- INIT_PZVAL(params[0]);
- } else if (strcmp(Z_STRVAL_PP(encoding),"deflate") == 0 &&
- zend_hash_exists(EG(function_table), "gzuncompress", sizeof("gzuncompress"))) {
- ZVAL_STRING(&func, "gzuncompress", 0);
- params[0] = &param;
- ZVAL_STRINGL(params[0], Z_STRVAL_PP(raw_post), Z_STRLEN_PP(raw_post), 0);
- INIT_PZVAL(params[0]);
- } else {
- php_error_docref(NULL TSRMLS_CC, E_ERROR,"Request is compressed with unknown compression '%s'",Z_STRVAL_PP(encoding));
- }
- if (call_user_function(CG(function_table), (zval**)NULL, &func, &retval, 1, params TSRMLS_CC) == SUCCESS &&
- Z_TYPE(retval) == IS_STRING) {
- doc_request = soap_xmlParseMemory(Z_STRVAL(retval),Z_STRLEN(retval));
- zval_dtor(&retval);
- } else {
- php_error_docref(NULL TSRMLS_CC, E_ERROR,"Can't uncompress compressed request");
- }
- } else {
- doc_request = soap_xmlParseMemory(Z_STRVAL_PP(raw_post),Z_STRLEN_PP(raw_post));
- }
- } else {
- if (zend_hash_find(&EG(symbol_table), "_SERVER", sizeof("_SERVER"), (void **)&server_vars) == SUCCESS) {
- zval **req_method;
- if (zend_hash_find(Z_ARRVAL_PP(server_vars), "REQUEST_METHOD", sizeof("REQUEST_METHOD"), (void **)&req_method) == SUCCESS) {
- if (!strcmp(Z_STRVAL_PP(req_method), "POST")) {
- if (!zend_ini_long("always_populate_raw_post_data", sizeof("always_populate_raw_post_data"), 0)) {
- php_error_docref(NULL TSRMLS_CC, E_ERROR, "PHP-SOAP requires 'always_populate_raw_post_data' to be on please check your php.ini file");
- }
- }
- }
- }
- soap_server_fault("Server", "Bad Request. Can't find HTTP_RAW_POST_DATA", NULL, NULL, NULL TSRMLS_CC);
- return;
- }
- } else {
- doc_request = soap_xmlParseMemory(arg,arg_len);
- }
-
- if (doc_request == NULL) {
- soap_server_fault("Client", "Bad Request", NULL, NULL, NULL TSRMLS_CC);
- }
- if (xmlGetIntSubset(doc_request) != NULL) {
- xmlNodePtr env = get_node(doc_request->children,"Envelope");
- if (env && env->ns) {
- if (strcmp(env->ns->href,SOAP_1_1_ENV_NAMESPACE) == 0) {
- SOAP_GLOBAL(soap_version) = SOAP_1_1;
- } else if (strcmp(env->ns->href,SOAP_1_2_ENV_NAMESPACE) == 0) {
- SOAP_GLOBAL(soap_version) = SOAP_1_2;
- }
- }
- xmlFreeDoc(doc_request);
- soap_server_fault("Server", "DTD are not supported by SOAP", NULL, NULL, NULL TSRMLS_CC);
- }
-
- old_sdl = SOAP_GLOBAL(sdl);
- SOAP_GLOBAL(sdl) = service->sdl;
- old_encoding = SOAP_GLOBAL(encoding);
- SOAP_GLOBAL(encoding) = service->encoding;
- old_soap_version = SOAP_GLOBAL(soap_version);
- function = deserialize_function_call(service->sdl, doc_request, service->actor, &function_name, &num_params, &params, &soap_version, &soap_headers TSRMLS_CC);
- xmlFreeDoc(doc_request);
-
- if (service->type == SOAP_CLASS) {
- soap_obj = NULL;
-#if HAVE_PHP_SESSION
- /* If persistent then set soap_obj from from the previous created session (if available) */
- if (service->soap_class.persistance == SOAP_PERSISTENCE_SESSION) {
- zval **tmp_soap;
-
- if (PS(session_status) != php_session_active &&
- PS(session_status) != php_session_disabled) {
- php_session_start(TSRMLS_C);
- }
-
- /* Find the soap object and assign */
- if (zend_hash_find(Z_ARRVAL_P(PS(http_session_vars)), "_bogus_session_name", sizeof("_bogus_session_name"), (void **) &tmp_soap) == SUCCESS &&
- Z_TYPE_PP(tmp_soap) == IS_OBJECT &&
- Z_OBJCE_PP(tmp_soap) == service->soap_class.ce) {
- soap_obj = *tmp_soap;
- }
- }
-#endif
- /* If new session or something wierd happned */
- if (soap_obj == NULL) {
- zval *tmp_soap;
-
- MAKE_STD_ZVAL(tmp_soap);
- object_init_ex(tmp_soap, service->soap_class.ce);
-
- /* Call constructor */
-#ifdef ZEND_ENGINE_2
- if (zend_hash_exists(&Z_OBJCE_P(tmp_soap)->function_table, ZEND_CONSTRUCTOR_FUNC_NAME, sizeof(ZEND_CONSTRUCTOR_FUNC_NAME))) {
- zval c_ret, constructor;
-
- INIT_ZVAL(c_ret);
- INIT_ZVAL(constructor);
-
- ZVAL_STRING(&constructor, ZEND_CONSTRUCTOR_FUNC_NAME, 1);
- if (call_user_function(NULL, &tmp_soap, &constructor, &c_ret, service->soap_class.argc, service->soap_class.argv TSRMLS_CC) == FAILURE) {
- php_error_docref(NULL TSRMLS_CC, E_ERROR, "Error calling constructor");
- }
- if (EG(exception)) {
- if (Z_TYPE_P(EG(exception)) == IS_OBJECT &&
- Z_OBJCE_P(EG(exception)) == soap_fault_class_entry) {
- soap_server_fault_ex(function, EG(exception), NULL TSRMLS_CC);
- } else {
- zval_dtor(&constructor);
- zval_dtor(&c_ret);
- zval_ptr_dtor(&tmp_soap);
- php_end_ob_buffer(0, 0 TSRMLS_CC);
- goto fail;
- }
- }
- zval_dtor(&constructor);
- zval_dtor(&c_ret);
- } else {
-#else
- {
-#endif
- int class_name_len = strlen(service->soap_class.ce->name);
- char *class_name = emalloc(class_name_len+1);
-
- memcpy(class_name, service->soap_class.ce->name,class_name_len+1);
- if (zend_hash_exists(&Z_OBJCE_P(tmp_soap)->function_table, php_strtolower(class_name, class_name_len), class_name_len+1)) {
- zval c_ret, constructor;
-
- INIT_ZVAL(c_ret);
- INIT_ZVAL(constructor);
-
- ZVAL_STRING(&constructor, service->soap_class.ce->name, 1);
- if (call_user_function(NULL, &tmp_soap, &constructor, &c_ret, service->soap_class.argc, service->soap_class.argv TSRMLS_CC) == FAILURE) {
- php_error_docref(NULL TSRMLS_CC, E_ERROR, "Error calling constructor");
- }
-#ifdef ZEND_ENGINE_2
- if (EG(exception)) {
- if (Z_TYPE_P(EG(exception)) == IS_OBJECT &&
- Z_OBJCE_P(EG(exception)) == soap_fault_class_entry) {
- soap_server_fault_ex(function, EG(exception), NULL TSRMLS_CC);
- } else {
- zval_dtor(&constructor);
- zval_dtor(&c_ret);
- efree(class_name);
- zval_ptr_dtor(&tmp_soap);
- php_end_ob_buffer(0, 0 TSRMLS_CC);
- goto fail;
- }
- }
-#endif
- zval_dtor(&constructor);
- zval_dtor(&c_ret);
- }
- efree(class_name);
- }
-#if HAVE_PHP_SESSION
- /* If session then update session hash with new object */
- if (service->soap_class.persistance == SOAP_PERSISTENCE_SESSION) {
- zval **tmp_soap_pp;
- if (zend_hash_update(Z_ARRVAL_P(PS(http_session_vars)), "_bogus_session_name", sizeof("_bogus_session_name"), &tmp_soap, sizeof(zval *), (void **)&tmp_soap_pp) == SUCCESS) {
- soap_obj = *tmp_soap_pp;
- }
- } else {
- soap_obj = tmp_soap;
- }
-#else
- soap_obj = tmp_soap;
-#endif
-
- }
-/* function_table = &(soap_obj->value.obj.ce->function_table);*/
- function_table = &((Z_OBJCE_P(soap_obj))->function_table);
- } else {
- if (service->soap_functions.functions_all == TRUE) {
- function_table = EG(function_table);
- } else {
- function_table = service->soap_functions.ft;
- }
- }
-
- doc_return = NULL;
-
- /* Process soap headers */
- if (soap_headers != NULL) {
- soapHeader *header = soap_headers;
- while (header != NULL) {
- soapHeader *h = header;
-
- header = header->next;
- if (service->sdl && !h->function && !h->hdr) {
- if (h->mustUnderstand) {
- soap_server_fault("MustUnderstand","Header not understood", NULL, NULL, NULL TSRMLS_CC);
- } else {
- continue;
- }
- }
-
- fn_name = estrndup(Z_STRVAL(h->function_name),Z_STRLEN(h->function_name));
- if (zend_hash_exists(function_table, php_strtolower(fn_name, Z_STRLEN(h->function_name)), Z_STRLEN(h->function_name) + 1)) {
- if (service->type == SOAP_CLASS) {
- call_status = call_user_function(NULL, &soap_obj, &h->function_name, &h->retval, h->num_params, h->parameters TSRMLS_CC);
- } else {
- call_status = call_user_function(EG(function_table), NULL, &h->function_name, &h->retval, h->num_params, h->parameters TSRMLS_CC);
- }
- if (call_status != SUCCESS) {
- php_error_docref(NULL TSRMLS_CC, E_ERROR, "Function '%s' call failed", Z_STRVAL(h->function_name));
- }
- if (Z_TYPE(h->retval) == IS_OBJECT &&
- Z_OBJCE(h->retval) == soap_fault_class_entry) {
- zval *headerfault = NULL, **tmp;
-
- if (zend_hash_find(Z_OBJPROP(h->retval), "headerfault", sizeof("headerfault"), (void**)&tmp) == SUCCESS &&
- Z_TYPE_PP(tmp) != IS_NULL) {
- headerfault = *tmp;
- }
- soap_server_fault_ex(function, &h->retval, h TSRMLS_CC);
-#ifdef ZEND_ENGINE_2
- } else if (EG(exception)) {
- if (Z_TYPE_P(EG(exception)) == IS_OBJECT &&
- Z_OBJCE_P(EG(exception)) == soap_fault_class_entry) {
- zval *headerfault = NULL, **tmp;
-
- if (zend_hash_find(Z_OBJPROP_P(EG(exception)), "headerfault", sizeof("headerfault"), (void**)&tmp) == SUCCESS &&
- Z_TYPE_PP(tmp) != IS_NULL) {
- headerfault = *tmp;
- }
- soap_server_fault_ex(function, EG(exception), h TSRMLS_CC);
- } else {
- efree(fn_name);
- if (soap_obj) {zval_ptr_dtor(&soap_obj);}
- php_end_ob_buffer(0, 0 TSRMLS_CC);
- goto fail;
- }
-#endif
- }
- } else if (h->mustUnderstand) {
- soap_server_fault("MustUnderstand","Header not understood", NULL, NULL, NULL TSRMLS_CC);
- }
- efree(fn_name);
- }
- }
-
- fn_name = estrndup(Z_STRVAL(function_name),Z_STRLEN(function_name));
- if (zend_hash_exists(function_table, php_strtolower(fn_name, Z_STRLEN(function_name)), Z_STRLEN(function_name) + 1) ||
- (service->type == SOAP_CLASS &&
- zend_hash_exists(function_table, ZEND_CALL_FUNC_NAME, sizeof(ZEND_CALL_FUNC_NAME)))) {
- if (service->type == SOAP_CLASS) {
- call_status = call_user_function(NULL, &soap_obj, &function_name, &retval, num_params, params TSRMLS_CC);
-#if HAVE_PHP_SESSION
- if (service->soap_class.persistance != SOAP_PERSISTENCE_SESSION) {
- zval_ptr_dtor(&soap_obj);
- }
-#else
- zval_ptr_dtor(&soap_obj);
-#endif
- } else {
- call_status = call_user_function(EG(function_table), NULL, &function_name, &retval, num_params, params TSRMLS_CC);
- }
- } else {
- php_error(E_ERROR, "Function '%s' doesn't exist", Z_STRVAL(function_name));
- }
- efree(fn_name);
-
-#ifdef ZEND_ENGINE_2
- if (EG(exception)) {
- if (Z_TYPE_P(EG(exception)) == IS_OBJECT &&
- Z_OBJCE_P(EG(exception)) == soap_fault_class_entry) {
- soap_server_fault_ex(function, EG(exception), NULL TSRMLS_CC);
- } else {
- if (soap_obj) {zval_ptr_dtor(&soap_obj);}
- php_end_ob_buffer(0, 0 TSRMLS_CC);
- goto fail;
- }
- }
-#endif
- if (call_status == SUCCESS) {
- char *response_name;
-
- if (Z_TYPE(retval) == IS_OBJECT &&
- Z_OBJCE(retval) == soap_fault_class_entry) {
- soap_server_fault_ex(function, &retval, NULL TSRMLS_CC);
- }
-
- if (function && function->responseName) {
- response_name = estrdup(function->responseName);
- } else {
- response_name = emalloc(Z_STRLEN(function_name) + sizeof("Response"));
- memcpy(response_name,Z_STRVAL(function_name),Z_STRLEN(function_name));
- memcpy(response_name+Z_STRLEN(function_name),"Response",sizeof("Response"));
- }
- SOAP_GLOBAL(overrides) = service->mapping;
- doc_return = serialize_response_call(function, response_name, service->uri, &retval, soap_headers, soap_version TSRMLS_CC);
- SOAP_GLOBAL(overrides) = NULL;
- efree(response_name);
- } else {
- php_error_docref(NULL TSRMLS_CC, E_ERROR, "Function '%s' call failed", Z_STRVAL(function_name));
- }
-
- /* Flush buffer */
- php_end_ob_buffer(0, 0 TSRMLS_CC);
-
- /* xmlDocDumpMemoryEnc(doc_return, &buf, &size, XML_CHAR_ENCODING_UTF8); */
- xmlDocDumpMemory(doc_return, &buf, &size);
-
- if (size == 0) {
- php_error_docref(NULL TSRMLS_CC, E_ERROR, "Dump memory failed");
- }
-
- sprintf(cont_len, "Content-Length: %d", size);
- sapi_add_header(cont_len, strlen(cont_len), 1);
- if (soap_version == SOAP_1_2) {
- sapi_add_header("Content-Type: application/soap+xml; charset=\"utf-8\"", sizeof("Content-Type: application/soap+xml; charset=\"utf-8\"")-1, 1);
- } else {
- sapi_add_header("Content-Type: text/xml; charset=\"utf-8\"", sizeof("Content-Type: text/xml; charset=\"utf-8\"")-1, 1);
- }
-
- xmlFreeDoc(doc_return);
- php_write(buf, size TSRMLS_CC);
- xmlFree(buf);
-
-fail:
- SOAP_GLOBAL(soap_version) = old_soap_version;
- SOAP_GLOBAL(encoding) = old_encoding;
- SOAP_GLOBAL(sdl) = old_sdl;
-
- /* Free soap headers */
- zval_dtor(&retval);
- while (soap_headers != NULL) {
- soapHeader *h = soap_headers;
- int i;
-
- soap_headers = soap_headers->next;
- i = h->num_params;
- while (i > 0) {
- zval_ptr_dtor(&h->parameters[--i]);
- }
- efree(h->parameters);
- zval_dtor(&h->function_name);
- zval_dtor(&h->retval);
- efree(h);
- }
-
- /* Free Memory */
- if (num_params > 0) {
- for (i = 0; i < num_params;i++) {
- zval_ptr_dtor(&params[i]);
- }
- efree(params);
- }
- zval_dtor(&function_name);
-
- SOAP_SERVER_END_CODE();
-}
-/* }}} */
-
-
-/* {{{ proto SoapServer::fault
- SoapServer::fault */
-PHP_METHOD(SoapServer, fault)
-{
- char *code, *string, *actor=NULL, *name=NULL;
- int code_len, string_len, actor_len, name_len;
- zval* details = NULL;
-
- SOAP_SERVER_BEGIN_CODE();
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ss|szs",
- &code, &code_len, &string, &string_len, &actor, &actor_len, &details,
- &name, &name_len) == FAILURE) {
- php_error_docref(NULL TSRMLS_CC, E_ERROR, "Invalid parameters");
- }
-
- soap_server_fault(code, string, actor, details, name TSRMLS_CC);
- SOAP_SERVER_END_CODE();
-}
-/* }}} */
-
-static void soap_server_fault_ex(sdlFunctionPtr function, zval* fault, soapHeader *hdr TSRMLS_DC)
-{
- int soap_version;
- xmlChar *buf, cont_len[30];
- int size;
- xmlDocPtr doc_return;
-
- soap_version = SOAP_GLOBAL(soap_version);
-
- doc_return = serialize_response_call(function, NULL, NULL, fault, hdr, soap_version TSRMLS_CC);
-
- xmlDocDumpMemory(doc_return, &buf, &size);
-
- /*
- Want to return HTTP 500 but apache wants to over write
- our fault code with their own handling... Figure this out later
- */
- sapi_add_header("HTTP/1.1 500 Internal Service Error", sizeof("HTTP/1.1 500 Internal Service Error")-1, 1);
- sprintf(cont_len,"Content-Length: %d", size);
- sapi_add_header(cont_len, strlen(cont_len), 1);
- if (soap_version == SOAP_1_2) {
- sapi_add_header("Content-Type: application/soap+xml; charset=\"utf-8\"", sizeof("Content-Type: application/soap+xml; charset=\"utf-8\"")-1, 1);
- } else {
- sapi_add_header("Content-Type: text/xml; charset=\"utf-8\"", sizeof("Content-Type: text/xml; charset=\"utf-8\"")-1, 1);
- }
- php_write(buf, size TSRMLS_CC);
-
- xmlFreeDoc(doc_return);
- xmlFree(buf);
- zend_bailout();
-}
-
-static void soap_server_fault(char* code, char* string, char *actor, zval* details, char* name TSRMLS_DC)
-{
- zval ret;
-
- INIT_ZVAL(ret);
-
- set_soap_fault(&ret, code, string, actor, details, name TSRMLS_CC);
- /* TODO: Which function */
- soap_server_fault_ex(NULL, &ret, NULL TSRMLS_CC);
-}
-
-static void soap_error_handler(int error_num, const char *error_filename, const uint error_lineno, const char *format, va_list args)
-{
- TSRMLS_FETCH();
-
- if (!SOAP_GLOBAL(use_soap_error_handler)) {
- old_error_handler(error_num, error_filename, error_lineno, format, args);
- return;
- }
-
- /*
- Trap all errors
- What do do with these warnings
- E_WARNING, E_NOTICE, E_CORE_WARNING, E_COMPILE_WARNING, E_USER_WARNING, E_USER_NOTICE
- */
- if (error_num == E_USER_ERROR || error_num == E_COMPILE_ERROR || error_num == E_CORE_ERROR ||
- error_num == E_ERROR || error_num == E_PARSE) {
- char* code = SOAP_GLOBAL(error_code);
- char buffer[1024];
- int buffer_len;
- zval outbuf, outbuflen;
-
- INIT_ZVAL(outbuf);
- INIT_ZVAL(outbuflen);
-
- buffer_len = vsnprintf(buffer, sizeof(buffer)-1, format, args);
- buffer[sizeof(buffer)-1]=0;
- if (buffer_len > sizeof(buffer) - 1 || buffer_len < 0) {
- buffer_len = sizeof(buffer) - 1;
- }
- if (SOAP_GLOBAL(error_object) &&
- Z_TYPE_P(SOAP_GLOBAL(error_object)) == IS_OBJECT &&
- Z_OBJCE_P(SOAP_GLOBAL(error_object)) == soap_class_entry) {
-#ifdef ZEND_ENGINE_2
- zval **tmp;
-
- if (zend_hash_find(Z_OBJPROP_P(SOAP_GLOBAL(error_object)), "_exceptions", sizeof("_exceptions"), (void **) &tmp) != SUCCESS ||
- Z_TYPE_PP(tmp) != IS_BOOL || Z_LVAL_PP(tmp) != 0) {
- zval *fault, *exception;
-
- if (code == NULL) {
- code = "Client";
- }
- fault = add_soap_fault(SOAP_GLOBAL(error_object), code, buffer, NULL, NULL TSRMLS_CC);
- MAKE_STD_ZVAL(exception);
- *exception = *fault;
- zval_copy_ctor(exception);
- INIT_PZVAL(exception);
- zend_throw_exception_object(exception TSRMLS_CC);
- zend_bailout();
- } else {
- old_error_handler(error_num, error_filename, error_lineno, format, args);
- }
-#else
- old_error_handler(error_num, error_filename, error_lineno, format, args);
-#endif
- } else {
- if (code == NULL) {
- code = "Server";
- }
- /* Get output buffer and send as fault detials */
- if (php_ob_get_length(&outbuflen TSRMLS_CC) != FAILURE && Z_LVAL(outbuflen) != 0) {
- php_ob_get_buffer(&outbuf TSRMLS_CC);
- }
- php_end_ob_buffer(0, 0 TSRMLS_CC);
-
- soap_server_fault(code, buffer, NULL, &outbuf, NULL TSRMLS_CC);
- }
- }
-}
-
-PHP_FUNCTION(use_soap_error_handler)
-{
- zend_bool handler = 1;
-
- ZVAL_BOOL(return_value, SOAP_GLOBAL(use_soap_error_handler));
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|b", &handler) == SUCCESS) {
- SOAP_GLOBAL(use_soap_error_handler) = handler;
- }
-}
-
-PHP_FUNCTION(is_soap_fault)
-{
- zval *fault;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z", &fault) == SUCCESS &&
- Z_TYPE_P(fault) == IS_OBJECT &&
- Z_OBJCE_P(fault) == soap_fault_class_entry) {
- RETURN_TRUE;
- }
- RETURN_FALSE
-}
-
-/* SoapClient functions */
-
-/* {{{ proto object SoapClient::SoapClient ( mixed wsdl [, array options])
- SoapClient constructor */
-PHP_METHOD(SoapClient, SoapClient)
-{
-
- zval *wsdl;
- zval *options = NULL;
- int soap_version = SOAP_1_1;
-
- SOAP_CLIENT_BEGIN_CODE();
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z|a", &wsdl, &options) == FAILURE) {
- php_error_docref(NULL TSRMLS_CC, E_ERROR, "Invalid parameters.");
- return;
- }
-
- if (Z_TYPE_P(wsdl) == IS_STRING) {
- } else if (Z_TYPE_P(wsdl) != IS_NULL ) {
- php_error_docref(NULL TSRMLS_CC, E_ERROR, "$wsdl must be string or null.");
- return;
- } else {
- wsdl = NULL;
- }
- if (options != NULL) {
- HashTable *ht = Z_ARRVAL_P(options);
- zval **tmp;
-
- if (wsdl == NULL) {
- /* Fetching non-WSDL mode options */
- if (zend_hash_find(ht, "location", sizeof("location"), (void**)&tmp) == SUCCESS &&
- Z_TYPE_PP(tmp) == IS_STRING) {
- add_property_stringl(this_ptr, "location", Z_STRVAL_PP(tmp), Z_STRLEN_PP(tmp), 1);
- } else {
- php_error_docref(NULL TSRMLS_CC, E_ERROR, "'location' option is requred in nonWSDL mode.");
- return;
- }
-
- if (zend_hash_find(ht, "uri", sizeof("uri"), (void**)&tmp) == SUCCESS &&
- Z_TYPE_PP(tmp) == IS_STRING) {
- add_property_stringl(this_ptr, "uri", Z_STRVAL_PP(tmp), Z_STRLEN_PP(tmp), 1);
- } else {
- php_error_docref(NULL TSRMLS_CC, E_ERROR, "'uri' option is requred in nonWSDL mode.");
- return;
- }
-
- if (zend_hash_find(ht, "style", sizeof("style"), (void**)&tmp) == SUCCESS &&
- Z_TYPE_PP(tmp) == IS_LONG &&
- (Z_LVAL_PP(tmp) == SOAP_RPC || Z_LVAL_PP(tmp) == SOAP_DOCUMENT)) {
- add_property_long(this_ptr, "style", Z_LVAL_PP(tmp));
- }
-
- if (zend_hash_find(ht, "use", sizeof("use"), (void**)&tmp) == SUCCESS &&
- Z_TYPE_PP(tmp) == IS_LONG &&
- (Z_LVAL_PP(tmp) == SOAP_LITERAL || Z_LVAL_PP(tmp) == SOAP_ENCODED)) {
- add_property_long(this_ptr, "use", Z_LVAL_PP(tmp));
- }
- }
-
- if (zend_hash_find(ht, "soap_version", sizeof("soap_version"), (void**)&tmp) == SUCCESS) {
- if (Z_TYPE_PP(tmp) == IS_LONG ||
- (Z_LVAL_PP(tmp) == SOAP_1_1 && Z_LVAL_PP(tmp) == SOAP_1_2)) {
- soap_version = Z_LVAL_PP(tmp);
- }
- }
- if (zend_hash_find(ht, "login", sizeof("login"), (void**)&tmp) == SUCCESS &&
- Z_TYPE_PP(tmp) == IS_STRING) {
- add_property_stringl(this_ptr, "_login", Z_STRVAL_PP(tmp), Z_STRLEN_PP(tmp), 1);
- if (zend_hash_find(ht, "password", sizeof("password"), (void**)&tmp) == SUCCESS &&
- Z_TYPE_PP(tmp) == IS_STRING) {
- add_property_stringl(this_ptr, "_password", Z_STRVAL_PP(tmp), Z_STRLEN_PP(tmp), 1);
- }
- }
- 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) {
- add_property_long(this_ptr, "_proxy_port", Z_LVAL_PP(tmp));
- }
- if (zend_hash_find(ht, "proxy_login", sizeof("proxy_login"), (void**)&tmp) == SUCCESS &&
- Z_TYPE_PP(tmp) == IS_STRING) {
- add_property_stringl(this_ptr, "_proxy_login", Z_STRVAL_PP(tmp), Z_STRLEN_PP(tmp), 1);
- if (zend_hash_find(ht, "proxy_password", sizeof("proxy_password"), (void**)&tmp) == SUCCESS &&
- Z_TYPE_PP(tmp) == IS_STRING) {
- add_property_stringl(this_ptr, "_proxy_password", Z_STRVAL_PP(tmp), Z_STRLEN_PP(tmp), 1);
- }
- }
- }
- if (zend_hash_find(ht, "trace", sizeof("trace"), (void**)&tmp) == SUCCESS &&
- (Z_TYPE_PP(tmp) == IS_BOOL || Z_TYPE_PP(tmp) == IS_LONG) &&
- Z_LVAL_PP(tmp) == 1) {
- add_property_long(this_ptr, "trace", 1);
- }
-#ifdef ZEND_ENGINE_2
- if (zend_hash_find(ht, "exceptions", sizeof("exceptions"), (void**)&tmp) == SUCCESS &&
- (Z_TYPE_PP(tmp) == IS_BOOL || Z_TYPE_PP(tmp) == IS_LONG) &&
- Z_LVAL_PP(tmp) == 0) {
- add_property_bool(this_ptr, "_exceptions", 0);
- }
-#endif
- if (zend_hash_find(ht, "compression", sizeof("compression"), (void**)&tmp) == SUCCESS &&
- Z_TYPE_PP(tmp) == IS_LONG &&
- zend_hash_exists(EG(function_table), "gzinflate", sizeof("gzinflate")) &&
- zend_hash_exists(EG(function_table), "gzdeflate", sizeof("gzdeflate")) &&
- zend_hash_exists(EG(function_table), "gzuncompress", sizeof("gzuncompress")) &&
- zend_hash_exists(EG(function_table), "gzcompress", sizeof("gzcompress")) &&
- zend_hash_exists(EG(function_table), "gzencode", sizeof("gzencode"))) {
- add_property_long(this_ptr, "compression", Z_LVAL_PP(tmp));
- }
- if (zend_hash_find(ht, "encoding", sizeof("encoding"), (void**)&tmp) == SUCCESS &&
- Z_TYPE_PP(tmp) == IS_STRING) {
- xmlCharEncodingHandlerPtr encoding;
-
- encoding = xmlFindCharEncodingHandler(Z_STRVAL_PP(tmp));
- if (encoding == NULL) {
- php_error_docref(NULL TSRMLS_CC, E_ERROR, "Invalid 'encoding' option - '%s'.", Z_STRVAL_PP(tmp));
- } else {
- xmlCharEncCloseFunc(encoding);
- add_property_stringl(this_ptr, "_encoding", Z_STRVAL_PP(tmp), Z_STRLEN_PP(tmp), 1);
- }
- }
- } else if (wsdl == NULL) {
- php_error_docref(NULL TSRMLS_CC, E_ERROR, "'location' and 'uri' options are requred in nonWSDL mode.");
- return;
- }
-
- add_property_long(this_ptr, "_soap_version", soap_version);
-
- if (wsdl) {
- int old_soap_version, ret;
- sdlPtr sdl;
-
- old_soap_version = SOAP_GLOBAL(soap_version);
- SOAP_GLOBAL(soap_version) = soap_version;
-
- sdl = get_sdl(Z_STRVAL_P(wsdl) TSRMLS_CC);
- ret = zend_list_insert(sdl, le_sdl);
-
- add_property_resource(this_ptr, "sdl", ret);
- zend_list_addref(ret);
-
- SOAP_GLOBAL(soap_version) = old_soap_version;
- }
-
- SOAP_CLIENT_END_CODE();
-}
-/* }}} */
-
-static int do_request(zval *this_ptr, xmlDoc *request, char *location, char *action, int version, zval *response TSRMLS_DC)
-{
- int ret = TRUE;
- char *buf;
- int buf_size;
- zval func, param0, param1, param2, param3;
- zval *params[4];
- zval **trace;
- zval **fault;
-
- INIT_ZVAL(*response);
-
- xmlDocDumpMemory(request, (xmlChar**)&buf, &buf_size);
- if (!buf) {
- add_soap_fault(this_ptr, "HTTP", "Error build soap request", NULL, NULL TSRMLS_CC);
- return FALSE;
- }
-
- if (zend_hash_find(Z_OBJPROP_P(this_ptr), "trace", sizeof("trace"), (void **) &trace) == SUCCESS &&
- Z_LVAL_PP(trace) > 0) {
- add_property_stringl(this_ptr, "__last_request", buf, buf_size, 1);
- }
-
- INIT_ZVAL(func);
- ZVAL_STRINGL(&func,"__doRequest",sizeof("__doRequest")-1,0);
- INIT_ZVAL(param0);
- params[0] = &param0;
- ZVAL_STRINGL(params[0], buf, buf_size, 0);
- INIT_ZVAL(param1);
- params[1] = &param1;
- if (location == NULL) {
- ZVAL_NULL(params[1]);
- } else {
- ZVAL_STRING(params[1], location, 0);
- }
- INIT_ZVAL(param2);
- params[2] = &param2;
- if (action == NULL) {
- ZVAL_NULL(params[2]);
- } else {
- ZVAL_STRING(params[2], action, 0);
- }
- INIT_ZVAL(param3);
- params[3] = &param3;
- ZVAL_LONG(params[3], version);
-
- if (call_user_function(NULL, &this_ptr, &func, response, 4, params TSRMLS_CC) != SUCCESS) {
- add_soap_fault(this_ptr, "Client", "SoapSlient::__doRequest() failed", NULL, NULL TSRMLS_CC);
- ret = FALSE;
- } else if (Z_TYPE_P(response) != IS_STRING) {
- ret = FALSE;
- } else if (zend_hash_find(Z_OBJPROP_P(this_ptr), "trace", sizeof("trace"), (void **) &trace) == SUCCESS &&
- Z_LVAL_PP(trace) > 0) {
- add_property_stringl(this_ptr, "__last_response", Z_STRVAL_P(response), Z_STRLEN_P(response), 1);
- }
- xmlFree(buf);
- if (ret && zend_hash_find(Z_OBJPROP_P(this_ptr), "__soap_fault", sizeof("__soap_fault"), (void **) &fault) == SUCCESS) {
- return FALSE;
- }
- return ret;
-}
-
-static void do_soap_call(zval* this_ptr,
- char* function,
- int function_len,
- int arg_count,
- zval** real_args,
- zval* return_value,
- char* soap_action,
- char* call_uri,
- HashTable* soap_headers,
- zval* output_headers
- TSRMLS_DC)
-{
- zval **tmp;
- zval **trace;
- sdlPtr sdl = NULL;
- sdlPtr old_sdl = NULL;
- sdlFunctionPtr fn;
- xmlDocPtr request = NULL;
- int ret = FALSE;
- int soap_version;
- zval response;
- xmlCharEncodingHandlerPtr old_encoding;
-
- SOAP_CLIENT_BEGIN_CODE();
-
- if (zend_hash_find(Z_OBJPROP_P(this_ptr), "trace", sizeof("trace"), (void **) &trace) == SUCCESS
- && Z_LVAL_PP(trace) > 0) {
- zend_hash_del(Z_OBJPROP_P(this_ptr), "__last_request", sizeof("__last_request"));
- zend_hash_del(Z_OBJPROP_P(this_ptr), "__last_response", sizeof("__last_response"));
- }
- if (zend_hash_find(Z_OBJPROP_P(this_ptr), "_soap_version", sizeof("_soap_version"), (void **) &tmp) == SUCCESS
- && Z_LVAL_PP(tmp) == SOAP_1_2) {
- soap_version = SOAP_1_2;
- } else {
- soap_version = SOAP_1_1;
- }
-
- if (FIND_SDL_PROPERTY(this_ptr,tmp) != FAILURE) {
- FETCH_SDL_RES(sdl,tmp);
- }
-
- clear_soap_fault(this_ptr TSRMLS_CC);
-
- SOAP_GLOBAL(soap_version) = soap_version;
- old_sdl = SOAP_GLOBAL(sdl);
- SOAP_GLOBAL(sdl) = sdl;
- old_encoding = SOAP_GLOBAL(encoding);
- if (zend_hash_find(Z_OBJPROP_P(this_ptr), "_encoding", sizeof("_encoding"), (void **) &tmp) == SUCCESS &&
- Z_TYPE_PP(tmp) == IS_STRING) {
- SOAP_GLOBAL(encoding) = xmlFindCharEncodingHandler(Z_STRVAL_PP(tmp));
- } else {
- SOAP_GLOBAL(encoding) = NULL;
- }
-
- if (sdl != NULL) {
- fn = get_function(sdl, function);
- if (fn != NULL) {
- sdlBindingPtr binding = fn->binding;
- if (binding->bindingType == BINDING_SOAP) {
- sdlSoapBindingFunctionPtr fnb = (sdlSoapBindingFunctionPtr)fn->bindingAttributes;
- request = serialize_function_call(this_ptr, fn, NULL, fnb->input.ns, real_args, arg_count, soap_version, soap_headers TSRMLS_CC);
- ret = do_request(this_ptr, request, binding->location, fnb->soapAction, soap_version, &response TSRMLS_CC);
- } else {
- request = serialize_function_call(this_ptr, fn, NULL, sdl->target_ns, real_args, arg_count, soap_version, soap_headers TSRMLS_CC);
- ret = do_request(this_ptr, request, binding->location, NULL, soap_version, &response TSRMLS_CC);
- }
-
- xmlFreeDoc(request);
-
- if (ret && Z_TYPE(response) == IS_STRING) {
- ret = parse_packet_soap(this_ptr, Z_STRVAL(response), Z_STRLEN(response), fn, NULL, return_value, output_headers TSRMLS_CC);
- }
-
- zval_dtor(&response);
-
- } else {
- smart_str error = {0};
- smart_str_appends(&error,"Function (\"");
- smart_str_appends(&error,function);
- smart_str_appends(&error,"\") is not a valid method for this service");
- smart_str_0(&error);
- add_soap_fault(this_ptr, "Client", error.c, NULL, NULL TSRMLS_CC);
- smart_str_free(&error);
- }
- } else {
- zval **uri, **location;
- smart_str action = {0};
-
- if (zend_hash_find(Z_OBJPROP_P(this_ptr), "uri", sizeof("uri"), (void *)&uri) == FAILURE) {
- add_soap_fault(this_ptr, "Client", "Error finding \"uri\" property", NULL, NULL TSRMLS_CC);
- } else if (zend_hash_find(Z_OBJPROP_P(this_ptr), "location", sizeof("location"),(void **) &location) == FAILURE) {
- add_soap_fault(this_ptr, "Client", "Error could not find \"location\" property", NULL, NULL TSRMLS_CC);
- } else {
- if (call_uri == NULL) {
- call_uri = Z_STRVAL_PP(uri);
- }
- request = serialize_function_call(this_ptr, NULL, function, call_uri, real_args, arg_count, soap_version, soap_headers TSRMLS_CC);
-
- if (soap_action == NULL) {
- smart_str_appends(&action, call_uri);
- smart_str_appendc(&action, '#');
- smart_str_appends(&action, function);
- } else {
- smart_str_appends(&action, soap_action);
- }
- smart_str_0(&action);
-
- ret = do_request(this_ptr, request, Z_STRVAL_PP(location), action.c, soap_version, &response TSRMLS_CC);
-
- smart_str_free(&action);
- xmlFreeDoc(request);
-
- if (ret && Z_TYPE(response) == IS_STRING) {
- ret = parse_packet_soap(this_ptr, Z_STRVAL(response), Z_STRLEN(response), NULL, function, return_value, output_headers TSRMLS_CC);
- }
-
- zval_dtor(&response);
- }
- }
-
- if (!ret) {
- zval** fault;
- if (zend_hash_find(Z_OBJPROP_P(this_ptr), "__soap_fault", sizeof("__soap_fault"), (void **) &fault) == SUCCESS) {
- *return_value = **fault;
- zval_copy_ctor(return_value);
- } else {
- *return_value = *add_soap_fault(this_ptr, "Client", "Unknown Error", NULL, NULL TSRMLS_CC);
- zval_copy_ctor(return_value);
- }
- } else {
- zval** fault;
- if (zend_hash_find(Z_OBJPROP_P(this_ptr), "__soap_fault", sizeof("__soap_fault"), (void **) &fault) == SUCCESS) {
- *return_value = **fault;
- zval_copy_ctor(return_value);
- }
- }
-#ifdef ZEND_ENGINE_2
- if (Z_TYPE_P(return_value) == IS_OBJECT &&
- Z_OBJCE_P(return_value) == soap_fault_class_entry &&
- (zend_hash_find(Z_OBJPROP_P(this_ptr), "_exceptions", sizeof("_exceptions"), (void **) &tmp) != SUCCESS ||
- Z_TYPE_PP(tmp) != IS_BOOL || Z_LVAL_PP(tmp) != 0)) {
- zval *exception;
-
- MAKE_STD_ZVAL(exception);
- *exception = *return_value;
- zval_copy_ctor(exception);
- INIT_PZVAL(exception);
- zend_throw_exception_object(exception TSRMLS_CC);
- }
-#endif
- if (SOAP_GLOBAL(encoding) != NULL) {
- xmlCharEncCloseFunc(SOAP_GLOBAL(encoding));
- }
- SOAP_GLOBAL(encoding) = old_encoding;
- SOAP_GLOBAL(sdl) = old_sdl;
- SOAP_CLIENT_END_CODE();
-}
-
-
-/* {{{ proto mixed SoapClient::__call ( string function_name [, array arguments [, array options [, array input_headers [, array output_headers]]]])
- Calls a SOAP function */
-PHP_METHOD(SoapClient, __call)
-{
- char *function, *soap_action = NULL, *uri = NULL;
- int function_len, i = 0;
- HashTable* soap_headers = NULL;
- zval *options = NULL;
- zval *headers = NULL;
- zval *output_headers = NULL;
- zval *args;
- zval **real_args = NULL;
- zval **param;
- int arg_count;
-
- HashPosition pos;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "sa|zzz",
- &function, &function_len, &args, &options, &headers, &output_headers) == FAILURE) {
- php_error_docref(NULL TSRMLS_CC, E_ERROR, "Invalid arguments");
- }
-
- if (options) {
- if (Z_TYPE_P(options) == IS_ARRAY) {
- HashTable *ht = Z_ARRVAL_P(options);
- zval **tmp;
-
- if (zend_hash_find(ht, "soapaction", sizeof("soapaction"), (void**)&tmp) == SUCCESS &&
- Z_TYPE_PP(tmp) == IS_STRING) {
- soap_action = Z_STRVAL_PP(tmp);
- }
-
- if (zend_hash_find(ht, "uri", sizeof("uri"), (void**)&tmp) == SUCCESS &&
- Z_TYPE_PP(tmp) == IS_STRING) {
- soap_action = Z_STRVAL_PP(tmp);
- }
- } else if (Z_TYPE_P(options) != IS_NULL) {
- php_error_docref(NULL TSRMLS_CC, E_ERROR, "Invalid arguments");
- }
- }
-
- if (headers == NULL || Z_TYPE_P(headers) == IS_NULL) {
- } else if (Z_TYPE_P(headers) == IS_ARRAY) {
- zval** tmp;
-
- soap_headers = Z_ARRVAL_P(headers);
- zend_hash_internal_pointer_reset(soap_headers);
- while (zend_hash_get_current_data(soap_headers, (void**)&tmp) == SUCCESS) {
- if (Z_TYPE_PP(tmp) != IS_OBJECT ||
- Z_OBJCE_PP(tmp) != soap_header_class_entry) {
- php_error_docref(NULL TSRMLS_CC, E_ERROR, "Invalid arguments");
- }
- zend_hash_move_forward(soap_headers);
- }
- } else if (Z_TYPE_P(headers) == IS_OBJECT &&
- Z_OBJCE_P(headers) == soap_header_class_entry) {
- soap_headers = emalloc(sizeof(HashTable));
- zend_hash_init(soap_headers, 0, NULL, NULL/*ZVAL_PTR_DTOR*/, 0);
- zend_hash_next_index_insert(soap_headers, &headers, sizeof(zval*), NULL);
- headers = NULL;
- } else{
- php_error_docref(NULL TSRMLS_CC, E_ERROR, "Invalid arguments");
- }
-
- arg_count = zend_hash_num_elements(Z_ARRVAL_P(args));
-
- if (arg_count > 0) {
- real_args = safe_emalloc(sizeof(zval *), arg_count, 0);
- for (zend_hash_internal_pointer_reset_ex(Z_ARRVAL_P(args), &pos);
- zend_hash_get_current_data_ex(Z_ARRVAL_P(args), (void **) &param, &pos) == SUCCESS;
- zend_hash_move_forward_ex(Z_ARRVAL_P(args), &pos)) {
- /*zval_add_ref(param);*/
- real_args[i++] = *param;
- }
- }
- if (output_headers) {
- array_init(output_headers);
- }
- do_soap_call(this_ptr, function, function_len, arg_count, real_args, return_value, soap_action, uri, soap_headers, output_headers TSRMLS_CC);
- if (arg_count > 0) {
- efree(real_args);
- }
-
- if (soap_headers && ! headers) {
- zend_hash_destroy(soap_headers);
- efree(soap_headers);
- }
-}
-/* }}} */
-
-
-/* {{{ proto array SoapClient::__getFunctions ( void )
- Returns list of SOAP functions */
-PHP_METHOD(SoapClient, __getFunctions)
-{
- sdlPtr sdl;
- HashPosition pos;
-
- FETCH_THIS_SDL(sdl);
-
- if (sdl) {
- smart_str buf = {0};
- sdlFunctionPtr *function;
-
- array_init(return_value);
- zend_hash_internal_pointer_reset_ex(&sdl->functions, &pos);
- while (zend_hash_get_current_data_ex(&sdl->functions, (void **)&function, &pos) != FAILURE) {
- function_to_string((*function), &buf);
- add_next_index_stringl(return_value, buf.c, buf.len, 1);
- smart_str_free(&buf);
- zend_hash_move_forward_ex(&sdl->functions, &pos);
- }
- }
-}
-/* }}} */
-
-
-/* {{{ proto array SoapClient::__getTypes ( void )
- Returns list of SOAP types */
-PHP_METHOD(SoapClient, __getTypes)
-{
- sdlPtr sdl;
- HashPosition pos;
-
- FETCH_THIS_SDL(sdl);
-
- if (sdl) {
- sdlTypePtr *type;
- smart_str buf = {0};
-
- array_init(return_value);
- if (sdl->types) {
- zend_hash_internal_pointer_reset_ex(sdl->types, &pos);
- while (zend_hash_get_current_data_ex(sdl->types, (void **)&type, &pos) != FAILURE) {
- type_to_string((*type), &buf, 0);
- add_next_index_stringl(return_value, buf.c, buf.len, 1);
- zend_hash_move_forward_ex(sdl->types, &pos);
- smart_str_free(&buf);
- }
- }
- }
-}
-/* }}} */
-
-
-/* {{{ proto string SoapClient::__getLastRequest ( void )
- Returns last SOAP request */
-PHP_METHOD(SoapClient, __getLastRequest)
-{
- zval **tmp;
-
- if (zend_hash_find(Z_OBJPROP_P(this_ptr), "__last_request", sizeof("__last_request"), (void **)&tmp) == SUCCESS) {
- RETURN_STRINGL(Z_STRVAL_PP(tmp), Z_STRLEN_PP(tmp), 1);
- }
- RETURN_NULL();
-}
-/* }}} */
-
-
-/* {{{ proto object SoapClient::__getLastResponse ( void )
- Returns last SOAP response */
-PHP_METHOD(SoapClient, __getLastResponse)
-{
- zval **tmp;
-
- if (zend_hash_find(Z_OBJPROP_P(this_ptr), "__last_response", sizeof("__last_response"), (void **)&tmp) == SUCCESS) {
- RETURN_STRINGL(Z_STRVAL_PP(tmp), Z_STRLEN_PP(tmp), 1);
- }
- RETURN_NULL();
-}
-/* }}} */
-
-
-/* {{{ proto string SoapClient::__getLastRequestHeaders(void)
- Returns last SOAP request headers */
-PHP_METHOD(SoapClient, __getLastRequestHeaders)
-{
- zval **tmp;
-
- if (zend_hash_find(Z_OBJPROP_P(this_ptr), "__last_request_headers", sizeof("__last_request_headers"), (void **)&tmp) == SUCCESS) {
- RETURN_STRINGL(Z_STRVAL_PP(tmp), Z_STRLEN_PP(tmp), 1);
- }
- RETURN_NULL();
-}
-/* }}} */
-
-
-/* {{{ proto string SoapClient::__getLastResponseHeaders(void)
- Returns last SOAP response headers */
-PHP_METHOD(SoapClient, __getLastResponseHeaders)
-{
- zval **tmp;
-
- if (zend_hash_find(Z_OBJPROP_P(this_ptr), "__last_response_headers", sizeof("__last_response_headers"), (void **)&tmp) == SUCCESS) {
- RETURN_STRINGL(Z_STRVAL_PP(tmp), Z_STRLEN_PP(tmp), 1);
- }
- RETURN_NULL();
-}
-/* }}} */
-
-
-/* {{{ proto string SoapClient::__doRequest()
- SoapClient::__doRequest() */
-PHP_METHOD(SoapClient, __doRequest)
-{
- char *buf, *location, *action;
- int buf_size, location_size, action_size;
- long version;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "sssl",
- &buf, &buf_size,
- &location, &location_size,
- &action, &action_size,
- &version) == FAILURE) {
- php_error_docref(NULL TSRMLS_CC, E_ERROR, "wrong parameters");
- }
- if (make_http_soap_request(this_ptr, buf, buf_size, location, action, version,
- &Z_STRVAL_P(return_value), &Z_STRLEN_P(return_value) TSRMLS_CC)) {
- return_value->type = IS_STRING;
- return;
- }
- RETURN_NULL();
-}
-/* }}} */
-
-#ifndef ZEND_ENGINE_2
-static void soap_call_function_handler(INTERNAL_FUNCTION_PARAMETERS, zend_property_reference *property_reference)
-{
- pval *object = property_reference->object;
- zend_overloaded_element *function_name = (zend_overloaded_element *)property_reference->elements_list->tail->data;
- char *function = Z_STRVAL(function_name->element);
- zend_function *builtin_function;
-
- /*
- Find if the function being called is already defined...
- ( IMHO: zend should handle this functionality )
- */
- if (zend_hash_find(&Z_OBJCE_P(this_ptr)->function_table, function, Z_STRLEN(function_name->element) + 1, (void **) &builtin_function) == SUCCESS) {
- builtin_function->internal_function.handler(INTERNAL_FUNCTION_PARAM_PASSTHRU);
- } else {
- int arg_count = ZEND_NUM_ARGS();
- zval **arguments = (zval **) safe_emalloc(sizeof(zval *), arg_count, 0);
-
- zend_get_parameters_array(ht, arg_count, arguments);
- do_soap_call(this_ptr, function, Z_STRLEN(function_name->element) + 1, arg_count, arguments, return_value, NULL, NULL, NULL, NULL TSRMLS_CC);
- efree(arguments);
- }
- zval_dtor(&function_name->element);
-}
-#endif
-
-static void clear_soap_fault(zval *obj TSRMLS_DC)
-{
- if (obj != NULL && obj->type == IS_OBJECT) {
- zend_hash_del(Z_OBJPROP_P(obj), "__soap_fault", sizeof("__soap_fault"));
- }
-}
-
-zval* add_soap_fault(zval *obj, char *fault_code, char *fault_string, char *fault_actor, zval *fault_detail TSRMLS_DC)
-{
- zval *fault;
- MAKE_STD_ZVAL(fault);
- set_soap_fault(fault, fault_code, fault_string, fault_actor, fault_detail, NULL TSRMLS_CC);
-#ifdef ZEND_ENGINE_2
- fault->refcount--; /*FIXME*/
-#endif
- add_property_zval(obj, "__soap_fault", fault);
- return fault;
-}
-
-static void set_soap_fault(zval *obj, char *fault_code, char *fault_string, char *fault_actor, zval *fault_detail, char *name TSRMLS_DC)
-{
- if (Z_TYPE_P(obj) != IS_OBJECT) {
- object_init_ex(obj, soap_fault_class_entry);
- }
- if (fault_string != NULL) {
- add_property_string(obj, "faultstring", fault_string, 1);
- }
- if (fault_code != NULL) {
- int soap_version = SOAP_GLOBAL(soap_version);
- smart_str code = {0};
- if (soap_version == SOAP_1_1) {
- if (strcmp(fault_code,"Client") == 0 ||
- strcmp(fault_code,"Server") == 0 ||
- strcmp(fault_code,"VersionMismatch") == 0 ||
- strcmp(fault_code,"MustUnderstand") == 0) {
- smart_str_appendl(&code, SOAP_1_1_ENV_NS_PREFIX, sizeof(SOAP_1_1_ENV_NS_PREFIX)-1);
- smart_str_appendc(&code, ':');
- }
- smart_str_appends(&code,fault_code);
- } else if (soap_version == SOAP_1_2) {
- if (strcmp(fault_code,"Client") == 0) {
- smart_str_appendl(&code, SOAP_1_2_ENV_NS_PREFIX, sizeof(SOAP_1_2_ENV_NS_PREFIX)-1);
- smart_str_appendc(&code, ':');
- smart_str_appendl(&code,"Sender",sizeof("Sender")-1);
- } else if (strcmp(fault_code,"Server") == 0) {
- smart_str_appendl(&code, SOAP_1_2_ENV_NS_PREFIX, sizeof(SOAP_1_2_ENV_NS_PREFIX)-1);
- smart_str_appendc(&code, ':');
- smart_str_appendl(&code,"Receiver",sizeof("Receiver")-1);
- } else if (strcmp(fault_code,"VersionMismatch") == 0 ||
- strcmp(fault_code,"MustUnderstand") == 0 ||
- strcmp(fault_code,"DataEncodingUnknown") == 0) {
- smart_str_appendl(&code, SOAP_1_2_ENV_NS_PREFIX, sizeof(SOAP_1_2_ENV_NS_PREFIX)-1);
- smart_str_appendc(&code, ':');
- smart_str_appends(&code,fault_code);
- } else {
- smart_str_appends(&code,fault_code);
- }
- }
- smart_str_0(&code);
- add_property_string(obj, "faultcode", code.c, 1);
- smart_str_free(&code);
- }
- if (fault_actor != NULL) {
- add_property_string(obj, "faultactor", fault_actor, 1);
- }
- if (fault_detail != NULL) {
- add_property_zval(obj, "detail", fault_detail);
- }
- if (name != NULL) {
- add_property_string(obj, "_name", name, 1);
- }
-}
-
-static void deserialize_parameters(xmlNodePtr params, sdlFunctionPtr function, int *num_params, zval ***parameters)
-{
- int cur_param = 0,num_of_params = 0;
- zval **tmp_parameters = NULL;
-
- if (function != NULL) {
- sdlParamPtr *param;
- xmlNodePtr val;
- int use_names = 0;
-
- if (function->requestParameters == NULL) {
- return;
- }
- num_of_params = zend_hash_num_elements(function->requestParameters);
- zend_hash_internal_pointer_reset(function->requestParameters);
- while (zend_hash_get_current_data(function->requestParameters, (void **)&param) == SUCCESS) {
- if (get_node(params, (*param)->paramName) != NULL) {
- use_names = 1;
- }
- zend_hash_move_forward(function->requestParameters);
- }
- if (use_names) {
- tmp_parameters = safe_emalloc(num_of_params, sizeof(zval *), 0);
- zend_hash_internal_pointer_reset(function->requestParameters);
- while (zend_hash_get_current_data(function->requestParameters, (void **)&param) == SUCCESS) {
- val = get_node(params, (*param)->paramName);
- if (!val) {
- /* TODO: may be "nil" is not OK? */
- MAKE_STD_ZVAL(tmp_parameters[cur_param]);
- ZVAL_NULL(tmp_parameters[cur_param]);
- } else {
- tmp_parameters[cur_param] = master_to_zval((*param)->encode, val);
- }
- cur_param++;
-
- zend_hash_move_forward(function->requestParameters);
- }
- (*parameters) = tmp_parameters;
- (*num_params) = num_of_params;
- return;
- }
- }
- if (params) {
- xmlNodePtr trav;
-
- num_of_params = 0;
- trav = params;
- while (trav != NULL) {
- if (trav->type == XML_ELEMENT_NODE) {
- num_of_params++;
- }
- trav = trav->next;
- }
- if (num_of_params > 0) {
- tmp_parameters = safe_emalloc(num_of_params, sizeof(zval *), 0);
-
- trav = params;
- while (trav != 0 && cur_param < num_of_params) {
- if (trav->type == XML_ELEMENT_NODE) {
- encodePtr enc;
- sdlParamPtr *param = NULL;
- if (function != NULL &&
- zend_hash_index_find(function->requestParameters, cur_param, (void **)&param) == FAILURE) {
- TSRMLS_FETCH();
- soap_server_fault("Client", "Error cannot find parameter", NULL, NULL, NULL TSRMLS_CC);
- }
- if (param == NULL) {
- enc = NULL;
- } else {
- enc = (*param)->encode;
- }
- tmp_parameters[cur_param] = master_to_zval(enc, trav);
- cur_param++;
- }
- trav = trav->next;
- }
- }
- }
- if (num_of_params > cur_param) {
- TSRMLS_FETCH();
- soap_server_fault("Client","Missing parameter", NULL, NULL, NULL TSRMLS_CC);
- }
- (*parameters) = tmp_parameters;
- (*num_params) = num_of_params;
-}
-
-static sdlFunctionPtr find_function(sdlPtr sdl, xmlNodePtr func, zval* function_name)
-{
- sdlFunctionPtr function;
-
- function = get_function(sdl, func->name);
- if (function && function->binding && function->binding->bindingType == BINDING_SOAP) {
- sdlSoapBindingFunctionPtr fnb = (sdlSoapBindingFunctionPtr)function->bindingAttributes;
- if (fnb->style == SOAP_DOCUMENT) {
- function = NULL;
- }
- }
- if (sdl != NULL && function == NULL) {
- function = get_doc_function(sdl, func);
- }
-
- INIT_ZVAL(*function_name);
- if (function != NULL) {
- ZVAL_STRING(function_name, (char *)function->functionName, 1);
- } else {
- ZVAL_STRING(function_name, (char *)func->name, 1);
- }
-
- return function;
-}
-
-static sdlFunctionPtr deserialize_function_call(sdlPtr sdl, xmlDocPtr request, char* actor, zval *function_name, int *num_params, zval ***parameters, int *version, soapHeader **headers TSRMLS_DC)
-{
- char* envelope_ns = NULL;
- xmlNodePtr trav,env,head,body,func;
- xmlAttrPtr attr;
- sdlFunctionPtr function;
-
- /* Get <Envelope> element */
- env = NULL;
- trav = request->children;
- while (trav != NULL) {
- if (trav->type == XML_ELEMENT_NODE) {
- if (env == NULL && node_is_equal_ex(trav,"Envelope",SOAP_1_1_ENV_NAMESPACE)) {
- env = trav;
- *version = SOAP_1_1;
- envelope_ns = SOAP_1_1_ENV_NAMESPACE;
- SOAP_GLOBAL(soap_version) = SOAP_1_1;
- } else if (env == NULL && node_is_equal_ex(trav,"Envelope",SOAP_1_2_ENV_NAMESPACE)) {
- env = trav;
- *version = SOAP_1_2;
- envelope_ns = SOAP_1_2_ENV_NAMESPACE;
- SOAP_GLOBAL(soap_version) = SOAP_1_2;
- } else {
- soap_server_fault("VersionMismatch", "Wrong Version", NULL, NULL, NULL TSRMLS_CC);
- }
- }
- trav = trav->next;
- }
- if (env == NULL) {
- soap_server_fault("Client", "looks like we got XML without \"Envelope\" element", NULL, NULL, NULL TSRMLS_CC);
- }
-
- attr = env->properties;
- while (attr != NULL) {
- if (attr->ns == NULL) {
- soap_server_fault("Client", "A SOAP Envelope element cannot have non Namespace qualified attributes", NULL, NULL, NULL TSRMLS_CC);
- } else if (attr_is_equal_ex(attr,"encodingStyle",SOAP_1_2_ENV_NAMESPACE)) {
- if (*version == SOAP_1_2) {
- soap_server_fault("Client", "encodingStyle cannot be specified on the Envelope", NULL, NULL, NULL TSRMLS_CC);
- } else if (strcmp(attr->children->content,SOAP_1_1_ENC_NAMESPACE) != 0) {
- soap_server_fault("Client", "Unknown data encoding style", NULL, NULL, NULL TSRMLS_CC);
- }
- }
- attr = attr->next;
- }
-
- /* Get <Header> element */
- head = NULL;
- trav = env->children;
- while (trav != NULL && trav->type != XML_ELEMENT_NODE) {
- trav = trav->next;
- }
- if (trav != NULL && node_is_equal_ex(trav,"Header",envelope_ns)) {
- head = trav;
- trav = trav->next;
- }
-
- /* Get <Body> element */
- body = NULL;
- while (trav != NULL && trav->type != XML_ELEMENT_NODE) {
- trav = trav->next;
- }
- if (trav != NULL && node_is_equal_ex(trav,"Body",envelope_ns)) {
- body = trav;
- trav = trav->next;
- }
- while (trav != NULL && trav->type != XML_ELEMENT_NODE) {
- trav = trav->next;
- }
- if (body == NULL) {
- soap_server_fault("Client", "Body must be present in a SOAP envelope", NULL, NULL, NULL TSRMLS_CC);
- }
- attr = body->properties;
- while (attr != NULL) {
- if (attr->ns == NULL) {
- if (*version == SOAP_1_2) {
- soap_server_fault("Client", "A SOAP Body element cannot have non Namespace qualified attributes", NULL, NULL, NULL TSRMLS_CC);
- }
- } else if (attr_is_equal_ex(attr,"encodingStyle",SOAP_1_2_ENV_NAMESPACE)) {
- if (*version == SOAP_1_2) {
- soap_server_fault("Client", "encodingStyle cannot be specified on the Body", NULL, NULL, NULL TSRMLS_CC);
- } else if (strcmp(attr->children->content,SOAP_1_1_ENC_NAMESPACE) != 0) {
- soap_server_fault("Client", "Unknown data encoding style", NULL, NULL, NULL TSRMLS_CC);
- }
- }
- attr = attr->next;
- }
-
- if (trav != NULL && *version == SOAP_1_2) {
- soap_server_fault("Client", "A SOAP 1.2 envelope can contain only Header and Body", NULL, NULL, NULL TSRMLS_CC);
- }
-
- func = NULL;
- trav = body->children;
- while (trav != NULL) {
- if (trav->type == XML_ELEMENT_NODE) {
- if (func != NULL) {
- soap_server_fault("Client", "looks like we got \"Body\" with several functions call", NULL, NULL, NULL TSRMLS_CC);
- }
- func = trav;
- }
- trav = trav->next;
- }
- if (func == NULL) {
- function = get_doc_function(sdl, NULL);
- if (function != NULL) {
- INIT_ZVAL(*function_name);
- ZVAL_STRING(function_name, (char *)function->functionName, 1);
- } else {
- soap_server_fault("Client", "looks like we got \"Body\" without function call", NULL, NULL, NULL TSRMLS_CC);
- }
- } else {
- if (*version == SOAP_1_1) {
- attr = get_attribute_ex(func->properties,"encodingStyle",SOAP_1_1_ENV_NAMESPACE);
- if (attr && strcmp(attr->children->content,SOAP_1_1_ENC_NAMESPACE) != 0) {
- soap_server_fault("Client","Unknown Data Encoding Style", NULL, NULL, NULL TSRMLS_CC);
- }
- } else {
- attr = get_attribute_ex(func->properties,"encodingStyle",SOAP_1_2_ENV_NAMESPACE);
- if (attr && strcmp(attr->children->content,SOAP_1_2_ENC_NAMESPACE) != 0) {
- soap_server_fault("DataEncodingUnknown","Unknown Data Encoding Style", NULL, NULL, NULL TSRMLS_CC);
- }
- }
- function = find_function(sdl, func, function_name);
- if (sdl != NULL && function == NULL) {
- if (*version == SOAP_1_2) {
- soap_server_fault("rpc:ProcedureNotPresent","Procedure not present", NULL, NULL, NULL TSRMLS_CC);
- } else {
- php_error(E_ERROR, "Procedure '%s' not present", func->name);
- }
- }
- }
-
- *headers = NULL;
- if (head) {
- soapHeader *h, *last = NULL;
-
- attr = head->properties;
- while (attr != NULL) {
- if (attr->ns == NULL) {
- soap_server_fault("Client", "A SOAP Header element cannot have non Namespace qualified attributes", NULL, NULL, NULL TSRMLS_CC);
- } else if (attr_is_equal_ex(attr,"encodingStyle",SOAP_1_2_ENV_NAMESPACE)) {
- if (*version == SOAP_1_2) {
- soap_server_fault("Client", "encodingStyle cannot be specified on the Header", NULL, NULL, NULL TSRMLS_CC);
- } else if (strcmp(attr->children->content,SOAP_1_1_ENC_NAMESPACE) != 0) {
- soap_server_fault("Client", "Unknown data encoding style", NULL, NULL, NULL TSRMLS_CC);
- }
- }
- attr = attr->next;
- }
- trav = head->children;
- while (trav != NULL) {
- if (trav->type == XML_ELEMENT_NODE) {
- xmlNodePtr hdr_func = trav;
- xmlAttrPtr attr;
- int mustUnderstand = 0;
-
- if (*version == SOAP_1_1) {
- attr = get_attribute_ex(hdr_func->properties,"encodingStyle",SOAP_1_1_ENV_NAMESPACE);
- if (attr && strcmp(attr->children->content,SOAP_1_1_ENC_NAMESPACE) != 0) {
- soap_server_fault("Client","Unknown Data Encoding Style", NULL, NULL, NULL TSRMLS_CC);
- }
- attr = get_attribute_ex(hdr_func->properties,"actor",envelope_ns);
- if (attr != NULL) {
- if (strcmp(attr->children->content,SOAP_1_1_ACTOR_NEXT) != 0 &&
- (actor == NULL || strcmp(attr->children->content,actor) != 0)) {
- goto ignore_header;
- }
- }
- } else if (*version == SOAP_1_2) {
- attr = get_attribute_ex(hdr_func->properties,"encodingStyle",SOAP_1_2_ENV_NAMESPACE);
- if (attr && strcmp(attr->children->content,SOAP_1_2_ENC_NAMESPACE) != 0) {
- soap_server_fault("DataEncodingUnknown","Unknown Data Encoding Style", NULL, NULL, NULL TSRMLS_CC);
- }
- attr = get_attribute_ex(hdr_func->properties,"role",envelope_ns);
- if (attr != NULL) {
- if (strcmp(attr->children->content,SOAP_1_2_ACTOR_UNLIMATERECEIVER) != 0 &&
- strcmp(attr->children->content,SOAP_1_2_ACTOR_NEXT) != 0 &&
- (actor == NULL || strcmp(attr->children->content,actor) != 0)) {
- goto ignore_header;
- }
- }
- }
- attr = get_attribute_ex(hdr_func->properties,"mustUnderstand",envelope_ns);
- if (attr) {
- if (strcmp(attr->children->content,"1") == 0 ||
- strcmp(attr->children->content,"true") == 0) {
- mustUnderstand = 1;
- } else if (strcmp(attr->children->content,"0") == 0 ||
- strcmp(attr->children->content,"false") == 0) {
- mustUnderstand = 0;
- } else {
- soap_server_fault("Client","mustUnderstand value is not boolean", NULL, NULL, NULL TSRMLS_CC);
- }
- }
- h = emalloc(sizeof(soapHeader));
- memset(h, 0, sizeof(soapHeader));
- h->mustUnderstand = mustUnderstand;
- h->function = find_function(sdl, hdr_func, &h->function_name);
- if (!h->function && sdl && function && function->binding && function->binding->bindingType == BINDING_SOAP) {
- sdlSoapBindingFunctionHeaderPtr *hdr;
- sdlSoapBindingFunctionPtr fnb = (sdlSoapBindingFunctionPtr)function->bindingAttributes;
- if (fnb->input.headers) {
- smart_str key = {0};
-
- if (hdr_func->ns) {
- smart_str_appends(&key, hdr_func->ns->href);
- smart_str_appendc(&key, ':');
- }
- smart_str_appendl(&key, Z_STRVAL(h->function_name), Z_STRLEN(h->function_name));
- smart_str_0(&key);
- if (zend_hash_find(fnb->input.headers, key.c, key.len+1, (void**)&hdr) == SUCCESS) {
- h->hdr = *hdr;
- }
- smart_str_free(&key);
- }
- }
- if (h->hdr) {
- h->num_params = 1;
- h->parameters = emalloc(sizeof(zval*));
- h->parameters[0] = master_to_zval(h->hdr->encode, hdr_func);
- } else {
- if (h->function && h->function->binding && h->function->binding->bindingType == BINDING_SOAP) {
- sdlSoapBindingFunctionPtr fnb = (sdlSoapBindingFunctionPtr)h->function->bindingAttributes;
- if (fnb->style == SOAP_RPC) {
- hdr_func = hdr_func->children;
- }
- }
- deserialize_parameters(hdr_func, h->function, &h->num_params, &h->parameters);
- }
- INIT_ZVAL(h->retval);
- if (last == NULL) {
- *headers = h;
- } else {
- last->next = h;
- }
- last = h;
- }
-ignore_header:
- trav = trav->next;
- }
- }
-
- if (function && function->binding && function->binding->bindingType == BINDING_SOAP) {
- sdlSoapBindingFunctionPtr fnb = (sdlSoapBindingFunctionPtr)function->bindingAttributes;
- if (fnb->style == SOAP_RPC) {
- func = func->children;
- }
- } else {
- func = func->children;
- }
- deserialize_parameters(func, function, num_params, parameters);
- return function;
-}
-
-static int serialize_response_call2(xmlNodePtr body, sdlFunctionPtr function, char *function_name, char *uri, zval *ret, int version, int main TSRMLS_DC)
-{
- xmlNodePtr method = NULL, param;
- sdlParamPtr parameter = NULL;
- int param_count;
- int style, use;
- xmlNsPtr ns = NULL;
-
- if (function != NULL && function->binding->bindingType == BINDING_SOAP) {
- sdlSoapBindingFunctionPtr fnb = (sdlSoapBindingFunctionPtr)function->bindingAttributes;
-
- style = fnb->style;
- use = fnb->output.use;
- if (style == SOAP_RPC) {
- ns = encode_add_ns(body, fnb->output.ns);
- if (function->responseName) {
- method = xmlNewChild(body, ns, function->responseName, NULL);
- } else {
- method = xmlNewChild(body, ns, function->functionName, NULL);
- }
- }
- } else {
- style = main?SOAP_RPC:SOAP_DOCUMENT;
- use = main?SOAP_ENCODED:SOAP_LITERAL;
- if (style == SOAP_RPC) {
- ns = encode_add_ns(body, uri);
- method = xmlNewChild(body, ns, function_name, NULL);
- }
- }
-
- if (function != NULL) {
- if (function->responseParameters) {
- param_count = zend_hash_num_elements(function->responseParameters);
- } else {
- param_count = 0;
- }
- } else {
- param_count = 1;
- }
-
- if (param_count == 1) {
- parameter = get_param(function, NULL, 0, TRUE);
-
- if (style == SOAP_RPC) {
- xmlNode *rpc_result;
- if (main && version == SOAP_1_2) {
- xmlNs *rpc_ns = xmlNewNs(body, RPC_SOAP12_NAMESPACE, RPC_SOAP12_NS_PREFIX);
- rpc_result = xmlNewChild(method, rpc_ns, "result", NULL);
- param = serialize_parameter(parameter, ret, 0, "return", use, method TSRMLS_CC);
- xmlNodeSetContent(rpc_result,param->name);
- } else {
- param = serialize_parameter(parameter, ret, 0, "return", use, method TSRMLS_CC);
- }
- } else {
- param = serialize_parameter(parameter, ret, 0, "return", use, body TSRMLS_CC);
- if (function && function->binding->bindingType == BINDING_SOAP) {
- if (parameter && parameter->element) {
- ns = encode_add_ns(param, parameter->element->namens);
- xmlNodeSetName(param, parameter->element->name);
- xmlSetNs(param, ns);
- }
- } else if (strcmp(param->name,"return") == 0) {
- ns = encode_add_ns(param, uri);
- xmlNodeSetName(param, function_name);
- xmlSetNs(param, ns);
- }
- }
- } else if (param_count > 1 && Z_TYPE_P(ret) == IS_ARRAY) {
- HashPosition pos;
- zval **data;
- int i = 0;
-
- zend_hash_internal_pointer_reset_ex(Z_ARRVAL_P(ret), &pos);
- while (zend_hash_get_current_data_ex(Z_ARRVAL_P(ret), (void **)&data, &pos) != FAILURE) {
- char *param_name;
- int param_name_len;
- long param_index;
-
- zend_hash_get_current_key_ex(Z_ARRVAL_P(ret), &param_name, &param_name_len, &param_index, 0, &pos);
- parameter = get_param(function, param_name, param_index, TRUE);
-
- if (style == SOAP_RPC) {
- param = serialize_parameter(parameter, *data, i, param_name, use, method TSRMLS_CC);
- } else {
- param = serialize_parameter(parameter, *data, i, param_name, use, body TSRMLS_CC);
- if (function && function->binding->bindingType == BINDING_SOAP) {
- if (parameter && parameter->element) {
- ns = encode_add_ns(param, parameter->element->namens);
- xmlNodeSetName(param, parameter->element->name);
- xmlSetNs(param, ns);
- }
- }
- }
-
- zend_hash_move_forward_ex(Z_ARRVAL_P(ret), &pos);
- i++;
- }
- }
- if (use == SOAP_ENCODED && version == SOAP_1_2 && method != NULL) {
- xmlSetNsProp(method, body->ns, "encodingStyle", SOAP_1_2_ENC_NAMESPACE);
- }
- return use;
-}
-
-static xmlDocPtr serialize_response_call(sdlFunctionPtr function, char *function_name, char *uri, zval *ret, soapHeader* headers, int version TSRMLS_DC)
-{
- xmlDocPtr doc;
- xmlNodePtr envelope = NULL, body, param;
- xmlNsPtr ns = NULL;
- int use = SOAP_LITERAL;
-
- encode_reset_ns();
-
- doc = xmlNewDoc("1.0");
- doc->charset = XML_CHAR_ENCODING_UTF8;
- doc->encoding = xmlStrdup((xmlChar*)"UTF-8");
-
- if (version == SOAP_1_1) {
- envelope = xmlNewDocNode(doc, NULL, "Envelope", NULL);
- ns = xmlNewNs(envelope, SOAP_1_1_ENV_NAMESPACE, SOAP_1_1_ENV_NS_PREFIX);
- xmlSetNs(envelope,ns);
- } else if (version == SOAP_1_2) {
- envelope = xmlNewDocNode(doc, NULL, "Envelope", NULL);
- ns = xmlNewNs(envelope, SOAP_1_2_ENV_NAMESPACE, SOAP_1_2_ENV_NS_PREFIX);
- xmlSetNs(envelope,ns);
- } else {
- soap_server_fault("Server", "Unknown SOAP version", NULL, NULL, NULL TSRMLS_CC);
- }
- xmlDocSetRootElement(doc, envelope);
-
- if (Z_TYPE_P(ret) == IS_OBJECT &&
- Z_OBJCE_P(ret) == soap_fault_class_entry) {
- char *detail_name;
- HashTable* prop;
- zval **tmp;
- sdlFaultPtr fault = NULL;
-
- prop = Z_OBJPROP_P(ret);
-
- if (headers &&
- zend_hash_find(prop, "headerfault", sizeof("headerfault"), (void**)&tmp) == SUCCESS) {
- xmlNodePtr head;
- encodePtr hdr_enc = NULL;
- int hdr_use = SOAP_LITERAL;
- zval *hdr_ret = *tmp;
- char *hdr_ns = headers->hdr?headers->hdr->ns:NULL;
- char *hdr_name = Z_STRVAL(headers->function_name);
-
- head = xmlNewChild(envelope, ns, "Header", NULL);
- if (Z_TYPE_P(hdr_ret) == IS_OBJECT &&
- Z_OBJCE_P(hdr_ret) == soap_header_class_entry) {
- HashTable* ht = Z_OBJPROP_P(hdr_ret);
- zval **tmp;
- sdlSoapBindingFunctionHeaderPtr *hdr;
- smart_str key = {0};
-
- if (zend_hash_find(ht, "namespace", sizeof("namespace"), (void**)&tmp) == SUCCESS &&
- Z_TYPE_PP(tmp) == IS_STRING) {
- smart_str_appendl(&key, Z_STRVAL_PP(tmp), Z_STRLEN_PP(tmp));
- smart_str_appendc(&key, ':');
- hdr_ns = Z_STRVAL_PP(tmp);
- }
- if (zend_hash_find(ht, "name", sizeof("name"), (void**)&tmp) == SUCCESS &&
- Z_TYPE_PP(tmp) == IS_STRING) {
- smart_str_appendl(&key, Z_STRVAL_PP(tmp), Z_STRLEN_PP(tmp));
- hdr_name = Z_STRVAL_PP(tmp);
- }
- smart_str_0(&key);
- if (headers->hdr && headers->hdr->headerfaults &&
- zend_hash_find(headers->hdr->headerfaults, key.c, key.len+1, (void**)&hdr) == SUCCESS) {
- hdr_enc = (*hdr)->encode;
- hdr_use = (*hdr)->use;
- }
- smart_str_free(&key);
- if (zend_hash_find(ht, "data", sizeof("data"), (void**)&tmp) == SUCCESS) {
- hdr_ret = *tmp;
- } else {
- hdr_ret = NULL;
- }
- }
-
- if (headers->function) {
- if (serialize_response_call2(head, headers->function, Z_STRVAL(headers->function_name), uri, hdr_ret, version, 0 TSRMLS_CC) == SOAP_ENCODED) {
- use = SOAP_ENCODED;
- }
- } else {
- xmlNodePtr xmlHdr = master_to_xml(hdr_enc, hdr_ret, hdr_use, head);
- if (hdr_name) {
- xmlNodeSetName(xmlHdr,hdr_name);
- }
- if (hdr_ns) {
- xmlNsPtr nsptr = encode_add_ns(xmlHdr,hdr_ns);
- xmlSetNs(xmlHdr, nsptr);
- }
- }
- }
-
- body = xmlNewChild(envelope, ns, "Body", NULL);
- param = xmlNewChild(body, ns, "Fault", NULL);
-
- use = SOAP_LITERAL;
- if (zend_hash_find(prop, "_name", sizeof("_name"), (void**)&tmp) == SUCCESS && Z_TYPE_PP(tmp) == IS_STRING) {
- sdlFaultPtr *tmp_fault;
- if (function && function->faults &&
- zend_hash_find(function->faults, Z_STRVAL_PP(tmp), Z_STRLEN_PP(tmp)+1, (void**)&tmp_fault) == SUCCESS) {
- fault = *tmp_fault;
- if (function->binding &&
- function->binding->bindingType == BINDING_SOAP &&
- fault->bindingAttributes) {
- sdlSoapBindingFunctionFaultPtr fb = (sdlSoapBindingFunctionFaultPtr)fault->bindingAttributes;
- use = fb->use;
- }
- }
- } else if (function && function->faults &&
- zend_hash_num_elements(function->faults) == 1) {
-
- zend_hash_internal_pointer_reset(function->faults);
- zend_hash_get_current_data(function->faults, (void**)&fault);
- fault = *(sdlFaultPtr*)fault;
- if (function->binding &&
- function->binding->bindingType == BINDING_SOAP &&
- fault->bindingAttributes) {
- sdlSoapBindingFunctionFaultPtr fb = (sdlSoapBindingFunctionFaultPtr)fault->bindingAttributes;
- use = fb->use;
- }
- }
-
- if (version == SOAP_1_1) {
- if (zend_hash_find(prop, "faultcode", sizeof("faultcode"), (void**)&tmp) == SUCCESS) {
- int new_len;
- xmlNodePtr node = xmlNewNode(NULL, "faultcode");
- char *str = php_escape_html_entities(Z_STRVAL_PP(tmp), Z_STRLEN_PP(tmp), &new_len, 0, 0, NULL TSRMLS_CC);
- xmlAddChild(param, node);
- xmlNodeSetContentLen(node, str, new_len);
- efree(str);
- }
- if (zend_hash_find(prop, "faultstring", sizeof("faultstring"), (void**)&tmp) == SUCCESS) {
- int new_len;
- xmlNodePtr node = xmlNewNode(NULL, "faultstring");
- char *str = php_escape_html_entities(Z_STRVAL_PP(tmp), Z_STRLEN_PP(tmp), &new_len, 0, 0, NULL TSRMLS_CC);
- xmlAddChild(param, node);
- xmlNodeSetContentLen(node, str, new_len);
- efree(str);
- }
- if (zend_hash_find(prop, "faultactor", sizeof("faultactor"), (void**)&tmp) == SUCCESS) {
- int new_len;
- xmlNodePtr node = xmlNewNode(NULL, "faultactor");
- char *str = php_escape_html_entities(Z_STRVAL_PP(tmp), Z_STRLEN_PP(tmp), &new_len, 0, 0, NULL TSRMLS_CC);
- xmlAddChild(param, node);
- xmlNodeSetContentLen(node, str, new_len);
- efree(str);
- }
- detail_name = "detail";
- } else {
- if (zend_hash_find(prop, "faultcode", sizeof("faultcode"), (void**)&tmp) == SUCCESS) {
- int new_len;
- xmlNodePtr node = xmlNewChild(param, ns, "Code", NULL);
- char *str = php_escape_html_entities(Z_STRVAL_PP(tmp), Z_STRLEN_PP(tmp), &new_len, 0, 0, NULL TSRMLS_CC);
- node = xmlNewChild(node, ns, "Value", NULL);
- xmlNodeSetContentLen(node, str, new_len);
- efree(str);
- }
- if (zend_hash_find(prop, "faultstring", sizeof("faultstring"), (void**)&tmp) == SUCCESS) {
- int new_len;
- xmlNodePtr node = xmlNewChild(param, ns, "Reason", NULL);
- char *str = php_escape_html_entities(Z_STRVAL_PP(tmp), Z_STRLEN_PP(tmp), &new_len, 0, 0, NULL TSRMLS_CC);
- node = xmlNewChild(node, ns, "Text", NULL);
- xmlNodeSetContentLen(node, str, new_len);
- efree(str);
- }
- detail_name = SOAP_1_2_ENV_NS_PREFIX":Detail";
- }
- if (fault && fault->details && zend_hash_num_elements(fault->details) == 1) {
- xmlNodePtr node;
- zval *detail = NULL;
- sdlParamPtr sparam;
- xmlNodePtr x;
-
- if (zend_hash_find(prop, "detail", sizeof("detail"), (void**)&tmp) == SUCCESS &&
- Z_TYPE_PP(tmp) != IS_NULL) {
- detail = *tmp;
- }
- node = xmlNewNode(NULL, detail_name);
- xmlAddChild(param, node);
-
- zend_hash_internal_pointer_reset(fault->details);
- zend_hash_get_current_data(fault->details, (void**)&sparam);
- sparam = *(sdlParamPtr*)sparam;
- x = serialize_parameter(sparam, detail, 1, NULL, use, node TSRMLS_CC);
-
- if (function &&
- function->binding &&
- function->binding->bindingType == BINDING_SOAP &&
- function->bindingAttributes) {
- sdlSoapBindingFunctionPtr fnb = (sdlSoapBindingFunctionPtr)function->bindingAttributes;
- if (fnb->style == SOAP_RPC) {
- if (fault->bindingAttributes) {
- sdlSoapBindingFunctionFaultPtr fb = (sdlSoapBindingFunctionFaultPtr)fault->bindingAttributes;
- if (fb->ns) {
- xmlNsPtr ns = encode_add_ns(x, fb->ns);
- xmlSetNs(x, ns);
- }
- }
- } else {
- if (sparam->element) {
- xmlNsPtr ns = encode_add_ns(x, sparam->element->namens);
- xmlNodeSetName(x, sparam->element->name);
- xmlSetNs(x, ns);
- }
- }
- }
- if (use == SOAP_ENCODED && version == SOAP_1_2) {
- xmlSetNsProp(x, envelope->ns, "encodingStyle", SOAP_1_2_ENC_NAMESPACE);
- }
- } else if (zend_hash_find(prop, "detail", sizeof("detail"), (void**)&tmp) == SUCCESS &&
- Z_TYPE_PP(tmp) != IS_NULL) {
- serialize_zval(*tmp, NULL, detail_name, use, param TSRMLS_CC);
- }
- } else {
-
- if (headers) {
- xmlNodePtr head;
- soapHeader *h;
-
- head = xmlNewChild(envelope, ns, "Header", NULL);
- h = headers;
- while (h != NULL) {
- if (Z_TYPE(h->retval) != IS_NULL) {
- encodePtr hdr_enc = NULL;
- int hdr_use = SOAP_LITERAL;
- zval *hdr_ret = &h->retval;
- char *hdr_ns = h->hdr?h->hdr->ns:NULL;
- char *hdr_name = Z_STRVAL(h->function_name);
-
-
- if (Z_TYPE(h->retval) == IS_OBJECT &&
- Z_OBJCE(h->retval) == soap_header_class_entry) {
- HashTable* ht = Z_OBJPROP(h->retval);
- zval **tmp;
- sdlSoapBindingFunctionHeaderPtr *hdr;
- smart_str key = {0};
-
- if (zend_hash_find(ht, "namespace", sizeof("namespace"), (void**)&tmp) == SUCCESS &&
- Z_TYPE_PP(tmp) == IS_STRING) {
- smart_str_appendl(&key, Z_STRVAL_PP(tmp), Z_STRLEN_PP(tmp));
- smart_str_appendc(&key, ':');
- hdr_ns = Z_STRVAL_PP(tmp);
- }
- if (zend_hash_find(ht, "name", sizeof("name"), (void**)&tmp) == SUCCESS &&
- Z_TYPE_PP(tmp) == IS_STRING) {
- smart_str_appendl(&key, Z_STRVAL_PP(tmp), Z_STRLEN_PP(tmp));
- hdr_name = Z_STRVAL_PP(tmp);
- }
- smart_str_0(&key);
- if (function && function->binding && function->binding->bindingType == BINDING_SOAP) {
- sdlSoapBindingFunctionPtr fnb = (sdlSoapBindingFunctionPtr)function->bindingAttributes;
-
- if (fnb->output.headers &&
- zend_hash_find(fnb->output.headers, key.c, key.len+1, (void**)&hdr) == SUCCESS) {
- hdr_enc = (*hdr)->encode;
- hdr_use = (*hdr)->use;
- }
- }
- smart_str_free(&key);
- if (zend_hash_find(ht, "data", sizeof("data"), (void**)&tmp) == SUCCESS) {
- hdr_ret = *tmp;
- } else {
- hdr_ret = NULL;
- }
- }
-
- if (h->function) {
- if (serialize_response_call2(head, h->function, Z_STRVAL(h->function_name), uri, hdr_ret, version, 0 TSRMLS_CC) == SOAP_ENCODED) {
- use = SOAP_ENCODED;
- }
- } else {
- xmlNodePtr xmlHdr = master_to_xml(hdr_enc, hdr_ret, hdr_use, head);
- if (hdr_name) {
- xmlNodeSetName(xmlHdr,hdr_name);
- }
- if (hdr_ns) {
- xmlNsPtr nsptr = encode_add_ns(xmlHdr,hdr_ns);
- xmlSetNs(xmlHdr, nsptr);
- }
- }
- }
- h = h->next;
- }
-
- if (head->children == NULL) {
- xmlUnlinkNode(head);
- xmlFreeNode(head);
- }
- }
-
- body = xmlNewChild(envelope, ns, "Body", NULL);
-
- if (serialize_response_call2(body, function, function_name, uri, ret, version, 1 TSRMLS_CC) == SOAP_ENCODED) {
- use = SOAP_ENCODED;
- }
-
- }
-
- if (use == SOAP_ENCODED) {
- xmlNewNs(envelope, XSD_NAMESPACE, XSD_NS_PREFIX);
- xmlNewNs(envelope, XSI_NAMESPACE, XSI_NS_PREFIX);
- if (version == SOAP_1_1) {
- xmlNewNs(envelope, SOAP_1_1_ENC_NAMESPACE, SOAP_1_1_ENC_NS_PREFIX);
- xmlSetNsProp(envelope, envelope->ns, "encodingStyle", SOAP_1_1_ENC_NAMESPACE);
- } else if (version == SOAP_1_2) {
- xmlNewNs(envelope, SOAP_1_2_ENC_NAMESPACE, SOAP_1_2_ENC_NS_PREFIX);
- }
- }
-
- return doc;
-}
-
-static xmlDocPtr serialize_function_call(zval *this_ptr, sdlFunctionPtr function, char *function_name, char *uri, zval **arguments, int arg_count, int version, HashTable *soap_headers TSRMLS_DC)
-{
- xmlDoc *doc;
- xmlNodePtr envelope = NULL, body, method = NULL, head = NULL;
- xmlNsPtr ns = NULL;
- zval **zstyle, **zuse;
- int i, style, use;
- HashTable *hdrs = NULL;
-
- encode_reset_ns();
-
- doc = xmlNewDoc("1.0");
- doc->encoding = xmlStrdup((xmlChar*)"UTF-8");
- doc->charset = XML_CHAR_ENCODING_UTF8;
- if (version == SOAP_1_1) {
- envelope = xmlNewDocNode(doc, NULL, "Envelope", NULL);
- ns = xmlNewNs(envelope, SOAP_1_1_ENV_NAMESPACE, SOAP_1_1_ENV_NS_PREFIX);
- xmlSetNs(envelope,ns);
- } else if (version == SOAP_1_2) {
- envelope = xmlNewDocNode(doc, NULL, "Envelope", NULL);
- ns = xmlNewNs(envelope, SOAP_1_2_ENV_NAMESPACE, SOAP_1_2_ENV_NS_PREFIX);
- xmlSetNs(envelope,ns);
- } else {
- soap_error0(E_ERROR, "Unknown SOAP version");
- }
- xmlDocSetRootElement(doc, envelope);
-
- if (soap_headers) {
- head = xmlNewChild(envelope, ns, "Header", NULL);
- }
-
- body = xmlNewChild(envelope, ns, "Body", NULL);
-
- if (function && function->binding->bindingType == BINDING_SOAP) {
- sdlSoapBindingFunctionPtr fnb = (sdlSoapBindingFunctionPtr)function->bindingAttributes;
-
- hdrs = fnb->input.headers;
- style = fnb->style;
- /*FIXME: how to pass method name if style is SOAP_DOCUMENT */
- /*style = SOAP_RPC;*/
- use = fnb->input.use;
- if (style == SOAP_RPC) {
- ns = encode_add_ns(body, fnb->input.ns);
- if (function->requestName) {
- method = xmlNewChild(body, ns, function->requestName, NULL);
- } else {
- method = xmlNewChild(body, ns, function->functionName, NULL);
- }
- }
- } else {
- if (zend_hash_find(Z_OBJPROP_P(this_ptr), "style", sizeof("style"), (void **)&zstyle) == SUCCESS) {
- style = Z_LVAL_PP(zstyle);
- } else {
- style = SOAP_RPC;
- }
- /*FIXME: how to pass method name if style is SOAP_DOCUMENT */
- /*style = SOAP_RPC;*/
- if (style == SOAP_RPC) {
- ns = encode_add_ns(body, uri);
- method = xmlNewChild(body, ns, function_name, NULL);
- }
-
- if (zend_hash_find(Z_OBJPROP_P(this_ptr), "use", sizeof("use"), (void **)&zuse) == SUCCESS &&
- Z_LVAL_PP(zuse) == SOAP_LITERAL) {
- use = SOAP_LITERAL;
- } else {
- use = SOAP_ENCODED;
- }
- }
-
- for (i = 0;i < arg_count;i++) {
- xmlNodePtr param;
- sdlParamPtr parameter = get_param(function, NULL, i, FALSE);
-
- if (style == SOAP_RPC) {
- param = serialize_parameter(parameter, arguments[i], i, NULL, use, method TSRMLS_CC);
- } else if (style == SOAP_DOCUMENT) {
- param = serialize_parameter(parameter, arguments[i], i, NULL, use, body TSRMLS_CC);
- if (function && function->binding->bindingType == BINDING_SOAP) {
- if (parameter && parameter->element) {
- ns = encode_add_ns(param, parameter->element->namens);
- xmlNodeSetName(param, parameter->element->name);
- xmlSetNs(param, ns);
- }
- }
- }
- }
-
- if (function && function->requestParameters) {
- int n = zend_hash_num_elements(function->requestParameters);
-
- if (n > arg_count) {
- for (i = arg_count; i < n; i++) {
- xmlNodePtr param;
- sdlParamPtr parameter = get_param(function, NULL, i, FALSE);
-
- if (style == SOAP_RPC) {
- param = serialize_parameter(parameter, NULL, i, NULL, use, method TSRMLS_CC);
- } else if (style == SOAP_DOCUMENT) {
- param = serialize_parameter(parameter, NULL, i, NULL, use, body TSRMLS_CC);
- if (function && function->binding->bindingType == BINDING_SOAP) {
- if (parameter && parameter->element) {
- ns = encode_add_ns(param, parameter->element->namens);
- xmlNodeSetName(param, parameter->element->name);
- xmlSetNs(param, ns);
- }
- }
- }
- }
- }
- }
-
- if (head) {
- zval** header;
-
- zend_hash_internal_pointer_reset(soap_headers);
- while (zend_hash_get_current_data(soap_headers,(void**)&header) == SUCCESS) {
- HashTable *ht = Z_OBJPROP_PP(header);
- zval **name, **ns, **tmp;
-
- if (zend_hash_find(ht, "name", sizeof("name"), (void**)&name) == SUCCESS &&
- Z_TYPE_PP(name) == IS_STRING &&
- zend_hash_find(ht, "namespace", sizeof("namespace"), (void**)&ns) == SUCCESS &&
- Z_TYPE_PP(ns) == IS_STRING) {
- xmlNodePtr h;
- xmlNsPtr nsptr;
- int hdr_use = SOAP_LITERAL;
- encodePtr enc = NULL;
-
- if (hdrs) {
- smart_str key = {0};
- sdlSoapBindingFunctionHeaderPtr *hdr;
-
- smart_str_appendl(&key, Z_STRVAL_PP(ns), Z_STRLEN_PP(ns));
- smart_str_appendc(&key, ':');
- smart_str_appendl(&key, Z_STRVAL_PP(name), Z_STRLEN_PP(name));
- smart_str_0(&key);
- if (zend_hash_find(hdrs, key.c, key.len+1,(void**)&hdr) == SUCCESS) {
- hdr_use = (*hdr)->use;
- enc = (*hdr)->encode;
- if (hdr_use == SOAP_ENCODED) {
- use = SOAP_ENCODED;
- }
- }
- smart_str_free(&key);
- }
-
- if (zend_hash_find(ht, "data", sizeof("data"), (void**)&tmp) == SUCCESS) {
- h = master_to_xml(enc, *tmp, hdr_use, head);
- xmlNodeSetName(h, Z_STRVAL_PP(name));
- } else {
- h = xmlNewNode(NULL, Z_STRVAL_PP(name));
- xmlAddChild(head,h);
- }
- nsptr = encode_add_ns(h,Z_STRVAL_PP(ns));
- xmlSetNs(h, nsptr);
-
- if (zend_hash_find(ht, "mustUnderstand", sizeof("mustUnderstand"), (void**)&tmp) == SUCCESS &&
- Z_TYPE_PP(tmp) == IS_BOOL && Z_LVAL_PP(tmp)) {
- if (version == SOAP_1_1) {
- xmlSetProp(h, SOAP_1_1_ENV_NS_PREFIX":mustUnderstand","1");
- } else {
- xmlSetProp(h, SOAP_1_2_ENV_NS_PREFIX":mustUnderstand","true");
- }
- }
- if (zend_hash_find(ht, "actor", sizeof("actor"), (void**)&tmp) == SUCCESS) {
- if (Z_TYPE_PP(tmp) == IS_STRING) {
- if (version == SOAP_1_1) {
- xmlSetProp(h, SOAP_1_1_ENV_NS_PREFIX":actor",Z_STRVAL_PP(tmp));
- } else {
- xmlSetProp(h, SOAP_1_2_ENV_NS_PREFIX":role",Z_STRVAL_PP(tmp));
- }
- } else if (Z_TYPE_PP(tmp) == IS_LONG) {
- if (version == SOAP_1_1) {
- if (Z_LVAL_PP(tmp) == SOAP_ACTOR_NEXT) {
- xmlSetProp(h, SOAP_1_1_ENV_NS_PREFIX":actor",SOAP_1_1_ACTOR_NEXT);
- }
- } else {
- if (Z_LVAL_PP(tmp) == SOAP_ACTOR_NEXT) {
- xmlSetProp(h, SOAP_1_2_ENV_NS_PREFIX":role",SOAP_1_2_ACTOR_NEXT);
- } else if (Z_LVAL_PP(tmp) == SOAP_ACTOR_NONE) {
- xmlSetProp(h, SOAP_1_2_ENV_NS_PREFIX":role",SOAP_1_2_ACTOR_NONE);
- } else if (Z_LVAL_PP(tmp) == SOAP_ACTOR_UNLIMATERECEIVER) {
- xmlSetProp(h, SOAP_1_2_ENV_NS_PREFIX":role",SOAP_1_2_ACTOR_UNLIMATERECEIVER);
- }
- }
- }
- }
- }
- zend_hash_move_forward(soap_headers);
- }
- }
-
- if (use == SOAP_ENCODED) {
- xmlNewNs(envelope, XSD_NAMESPACE, XSD_NS_PREFIX);
- xmlNewNs(envelope, XSI_NAMESPACE, XSI_NS_PREFIX);
- if (version == SOAP_1_1) {
- xmlNewNs(envelope, SOAP_1_1_ENC_NAMESPACE, SOAP_1_1_ENC_NS_PREFIX);
- xmlSetNsProp(envelope, envelope->ns, "encodingStyle", SOAP_1_1_ENC_NAMESPACE);
- } else if (version == SOAP_1_2) {
- xmlNewNs(envelope, SOAP_1_2_ENC_NAMESPACE, SOAP_1_2_ENC_NS_PREFIX);
- if (method) {
- xmlSetNsProp(method, envelope->ns, "encodingStyle", SOAP_1_2_ENC_NAMESPACE);
- }
- }
- }
-
- return doc;
-}
-
-static xmlNodePtr serialize_parameter(sdlParamPtr param, zval *param_val, int index, char *name, int style, xmlNodePtr parent TSRMLS_DC)
-{
- char *paramName;
- xmlNodePtr xmlParam;
- char paramNameBuf[10];
-
- if (param_val &&
- Z_TYPE_P(param_val) == IS_OBJECT &&
- Z_OBJCE_P(param_val) == soap_param_class_entry) {
- zval **param_name;
- zval **param_data;
-
- if (zend_hash_find(Z_OBJPROP_P(param_val), "param_name", sizeof("param_name"), (void **)&param_name) == SUCCESS &&
- zend_hash_find(Z_OBJPROP_P(param_val), "param_data", sizeof("param_data"), (void **)&param_data) == SUCCESS) {
- param_val = *param_data;
- name = Z_STRVAL_PP(param_name);
- }
- }
-
- if (param != NULL && param->paramName != NULL) {
- paramName = param->paramName;
- } else {
- if (name == NULL) {
- paramName = paramNameBuf;
- sprintf(paramName,"param%d",index);
- } else {
- paramName = name;
- }
- }
-
- xmlParam = serialize_zval(param_val, param, paramName, style, parent TSRMLS_CC);
-
- return xmlParam;
-}
-
-static xmlNodePtr serialize_zval(zval *val, sdlParamPtr param, char *paramName, int style, xmlNodePtr parent TSRMLS_DC)
-{
- xmlNodePtr xmlParam;
- encodePtr enc;
-
- if (param != NULL) {
- enc = param->encode;
- } else {
- enc = NULL;
- }
- xmlParam = master_to_xml(enc, val, style, parent);
- if (!strcmp(xmlParam->name, "BOGUS")) {
- xmlNodeSetName(xmlParam, paramName);
- }
- return xmlParam;
-}
-
-static sdlParamPtr get_param(sdlFunctionPtr function, char *param_name, int index, int response)
-{
- sdlParamPtr *tmp;
- HashTable *ht;
-
- if (function == NULL) {
- return NULL;
- }
-
- if (response == FALSE) {
- ht = function->requestParameters;
- } else {
- ht = function->responseParameters;
- }
-
- if (ht == NULL) {
- return NULL;
- }
-
- if (param_name != NULL) {
- if (zend_hash_find(ht, param_name, strlen(param_name), (void **)&tmp) != FAILURE) {
- return *tmp;
- }
- } else {
- if (zend_hash_index_find(ht, index, (void **)&tmp) != FAILURE) {
- return (*tmp);
- }
- }
- return NULL;
-}
-
-static sdlFunctionPtr get_function(sdlPtr sdl, const char *function_name)
-{
- sdlFunctionPtr *tmp;
-
- int len = strlen(function_name);
- char *str = estrndup(function_name,len);
- php_strtolower(str,len);
- if (sdl != NULL) {
- if (zend_hash_find(&sdl->functions, str, len+1, (void **)&tmp) != FAILURE) {
- efree(str);
- return (*tmp);
- } else if (sdl->requests != NULL && zend_hash_find(sdl->requests, str, len+1, (void **)&tmp) != FAILURE) {
- efree(str);
- return (*tmp);
- }
- }
- efree(str);
- return NULL;
-}
-
-static sdlFunctionPtr get_doc_function(sdlPtr sdl, xmlNodePtr params)
-{
- if (sdl) {
- sdlFunctionPtr *tmp;
- sdlParamPtr *param;
-
- zend_hash_internal_pointer_reset(&sdl->functions);
- while (zend_hash_get_current_data(&sdl->functions, (void**)&tmp) == SUCCESS) {
- if ((*tmp)->binding && (*tmp)->binding->bindingType == BINDING_SOAP) {
- sdlSoapBindingFunctionPtr fnb = (sdlSoapBindingFunctionPtr)(*tmp)->bindingAttributes;
- if (fnb->style == SOAP_DOCUMENT) {
- if (params == NULL) {
- if ((*tmp)->requestParameters == NULL ||
- zend_hash_num_elements((*tmp)->requestParameters) == 0) {
- return *tmp;
- }
- } else if ((*tmp)->requestParameters != NULL &&
- zend_hash_num_elements((*tmp)->requestParameters) > 0) {
- int ok = 1;
- xmlNodePtr node = params;
-
- zend_hash_internal_pointer_reset((*tmp)->requestParameters);
- while (zend_hash_get_current_data((*tmp)->requestParameters, (void**)&param) == SUCCESS) {
- if ((*param)->element) {
- if (strcmp((*param)->element->name,node->name) != 0) {
- ok = 0;
- break;
- }
- if ((*param)->element->namens != NULL && node->ns != NULL) {
- if (strcmp((*param)->element->namens,node->ns->href) != 0) {
- ok = 0;
- break;
- }
- } else if ((void*)(*param)->element->namens != (void*)node->ns) {
- ok = 0;
- break;
- }
- } else if (strcmp((*param)->paramName,node->name) != 0) {
- ok = 0;
- break;
- }
- zend_hash_move_forward((*tmp)->requestParameters);
- }
- if (ok /*&& node == NULL*/) {
- return (*tmp);
- }
- }
- }
- }
- zend_hash_move_forward(&sdl->functions);
- }
- }
- return NULL;
-}
-
-static void function_to_string(sdlFunctionPtr function, smart_str *buf)
-{
- int i = 0;
- HashPosition pos;
- sdlParamPtr *param;
-
- if (function->responseParameters &&
- zend_hash_num_elements(function->responseParameters) > 0) {
- if (zend_hash_num_elements(function->responseParameters) == 1) {
- zend_hash_internal_pointer_reset(function->responseParameters);
- zend_hash_get_current_data(function->responseParameters, (void**)&param);
- if ((*param)->encode && (*param)->encode->details.type_str) {
- smart_str_appendl(buf, (*param)->encode->details.type_str, strlen((*param)->encode->details.type_str));
- smart_str_appendc(buf, ' ');
- } else {
- smart_str_appendl(buf, "UNKNOWN ", 8);
- }
- } else {
- i = 0;
- smart_str_appendl(buf, "list(", 5);
- zend_hash_internal_pointer_reset_ex(function->responseParameters, &pos);
- while (zend_hash_get_current_data_ex(function->responseParameters, (void **)&param, &pos) != FAILURE) {
- if (i > 0) {
- smart_str_appendl(buf, ", ", 2);
- }
- if ((*param)->encode && (*param)->encode->details.type_str) {
- smart_str_appendl(buf, (*param)->encode->details.type_str, strlen((*param)->encode->details.type_str));
- } else {
- smart_str_appendl(buf, "UNKNOWN", 7);
- }
- smart_str_appendl(buf, " $", 2);
- smart_str_appendl(buf, (*param)->paramName, strlen((*param)->paramName));
- zend_hash_move_forward_ex(function->responseParameters, &pos);
- i++;
- }
- smart_str_appendl(buf, ") ", 2);
- }
- } else {
- smart_str_appendl(buf, "void ", 5);
- }
-
- smart_str_appendl(buf, function->functionName, strlen(function->functionName));
-
- smart_str_appendc(buf, '(');
- if (function->requestParameters) {
- i = 0;
- zend_hash_internal_pointer_reset_ex(function->requestParameters, &pos);
- while (zend_hash_get_current_data_ex(function->requestParameters, (void **)&param, &pos) != FAILURE) {
- if (i > 0) {
- smart_str_appendl(buf, ", ", 2);
- }
- if ((*param)->encode && (*param)->encode->details.type_str) {
- smart_str_appendl(buf, (*param)->encode->details.type_str, strlen((*param)->encode->details.type_str));
- } else {
- smart_str_appendl(buf, "UNKNOWN", 7);
- }
- smart_str_appendl(buf, " $", 2);
- smart_str_appendl(buf, (*param)->paramName, strlen((*param)->paramName));
- zend_hash_move_forward_ex(function->requestParameters, &pos);
- i++;
- }
- }
- smart_str_appendc(buf, ')');
- smart_str_0(buf);
-}
-
-static void model_to_string(sdlContentModelPtr model, smart_str *buf, int level)
-{
- switch (model->kind) {
- case XSD_CONTENT_ELEMENT:
- type_to_string(model->u.element, buf, level);
- smart_str_appendl(buf, ";\n", 2);
- break;
- case XSD_CONTENT_SEQUENCE:
- case XSD_CONTENT_ALL:
- case XSD_CONTENT_CHOICE: {
- sdlContentModelPtr *tmp;
-
- zend_hash_internal_pointer_reset(model->u.content);
- while (zend_hash_get_current_data(model->u.content, (void**)&tmp) == SUCCESS) {
- model_to_string(*tmp, buf, level);
- zend_hash_move_forward(model->u.content);
- }
- break;
- }
- case XSD_CONTENT_GROUP:
- model_to_string(model->u.group->model, buf, level);
- default:
- break;
- }
-}
-
-static void type_to_string(sdlTypePtr type, smart_str *buf, int level)
-{
- int i;
- smart_str spaces = {0};
- HashPosition pos;
-
- for (i = 0;i < level;i++) {
- smart_str_appendc(&spaces, ' ');
- }
- smart_str_appendl(buf, spaces.c, spaces.len);
-
- switch (type->kind) {
- case XSD_TYPEKIND_SIMPLE:
- case XSD_TYPEKIND_LIST:
- case XSD_TYPEKIND_UNION:
- if (type->encode) {
- smart_str_appendl(buf, type->encode->details.type_str, strlen(type->encode->details.type_str));
- smart_str_appendc(buf, ' ');
- } else {
- smart_str_appendl(buf, "anyType ", sizeof("anyType ")-1);
- }
- smart_str_appendl(buf, type->name, strlen(type->name));
- break;
- case XSD_TYPEKIND_COMPLEX:
- case XSD_TYPEKIND_RESTRICTION:
- case XSD_TYPEKIND_EXTENSION:
- if (type->encode &&
- (type->encode->details.type == IS_ARRAY ||
- type->encode->details.type == SOAP_ENC_ARRAY)) {
- sdlAttributePtr *attr;
- sdlExtraAttributePtr *ext;
-
- if (type->attributes &&
- zend_hash_find(type->attributes, SOAP_1_1_ENC_NAMESPACE":arrayType",
- sizeof(SOAP_1_1_ENC_NAMESPACE":arrayType"),
- (void **)&attr) == SUCCESS &&
- zend_hash_find((*attr)->extraAttributes, WSDL_NAMESPACE":arrayType", sizeof(WSDL_NAMESPACE":arrayType"), (void **)&ext) == SUCCESS) {
- char *end = strchr((*ext)->val, '[');
- int len;
- if (end == NULL) {
- len = strlen((*ext)->val);
- } else {
- len = end-(*ext)->val;
- }
- if (len == 0) {
- smart_str_appendl(buf, "anyType", sizeof("anyType")-1);
- } else {
- smart_str_appendl(buf, (*ext)->val, len);
- }
- smart_str_appendc(buf, ' ');
- smart_str_appendl(buf, type->name, strlen(type->name));
- if (end != NULL) {
- smart_str_appends(buf, end);
- }
- } else {
- sdlTypePtr elementType;
- if (type->attributes &&
- zend_hash_find(type->attributes, SOAP_1_2_ENC_NAMESPACE":itemType",
- sizeof(SOAP_1_2_ENC_NAMESPACE":itemType"),
- (void **)&attr) == SUCCESS &&
- zend_hash_find((*attr)->extraAttributes, WSDL_NAMESPACE":itemType", sizeof(WSDL_NAMESPACE":arrayType"), (void **)&ext) == SUCCESS) {
- smart_str_appends(buf, (*ext)->val);
- smart_str_appendc(buf, ' ');
- } else if (type->elements &&
- zend_hash_num_elements(type->elements) == 1 &&
- (zend_hash_internal_pointer_reset(type->elements),
- zend_hash_get_current_data(type->elements, (void**)&elementType) == SUCCESS) &&
- (elementType = *(sdlTypePtr*)elementType) != NULL &&
- elementType->encode && elementType->encode->details.type_str) {
- smart_str_appends(buf, elementType->encode->details.type_str);
- smart_str_appendc(buf, ' ');
- } else {
- smart_str_appendl(buf, "anyType ", 8);
- }
- smart_str_appendl(buf, type->name, strlen(type->name));
- if (type->attributes &&
- zend_hash_find(type->attributes, SOAP_1_2_ENC_NAMESPACE":arraySize",
- sizeof(SOAP_1_2_ENC_NAMESPACE":arraySize"),
- (void **)&attr) == SUCCESS &&
- zend_hash_find((*attr)->extraAttributes, WSDL_NAMESPACE":itemType", sizeof(WSDL_NAMESPACE":arraySize"), (void **)&ext) == SUCCESS) {
- smart_str_appendc(buf, '[');
- smart_str_appends(buf, (*ext)->val);
- smart_str_appendc(buf, ']');
- } else {
- smart_str_appendl(buf, "[]", 2);
- }
- }
- } else {
- smart_str_appendl(buf, "struct ", 7);
- smart_str_appendl(buf, type->name, strlen(type->name));
- smart_str_appendc(buf, ' ');
- smart_str_appendl(buf, "{\n", 2);
- if ((type->kind == XSD_TYPEKIND_RESTRICTION ||
- type->kind == XSD_TYPEKIND_EXTENSION) && type->encode) {
- encodePtr enc = type->encode;
- while (enc && enc->details.sdl_type &&
- enc->details.sdl_type->kind != XSD_TYPEKIND_SIMPLE &&
- enc->details.sdl_type->kind != XSD_TYPEKIND_LIST &&
- enc->details.sdl_type->kind != XSD_TYPEKIND_UNION) {
- enc = enc->details.sdl_type->encode;
- }
- if (enc) {
- smart_str_appendl(buf, spaces.c, spaces.len);
- smart_str_appendc(buf, ' ');
- smart_str_appendl(buf, type->encode->details.type_str, strlen(type->encode->details.type_str));
- smart_str_appendl(buf, " _;\n", 4);
- }
- }
- if (type->model) {
- model_to_string(type->model, buf, level+1);
- }
- if (type->attributes) {
- sdlAttributePtr *attr;
-
- zend_hash_internal_pointer_reset_ex(type->attributes, &pos);
- while (zend_hash_get_current_data_ex(type->attributes, (void **)&attr, &pos) != FAILURE) {
- smart_str_appendl(buf, spaces.c, spaces.len);
- smart_str_appendc(buf, ' ');
- if ((*attr)->encode && (*attr)->encode->details.type_str) {
- smart_str_appends(buf, (*attr)->encode->details.type_str);
- smart_str_appendc(buf, ' ');
- } else {
- smart_str_appendl(buf, "UNKNOWN ", 8);
- }
- smart_str_appends(buf, (*attr)->name);
- smart_str_appendl(buf, ";\n", 2);
- zend_hash_move_forward_ex(type->attributes, &pos);
- }
- }
- smart_str_appendl(buf, spaces.c, spaces.len);
- smart_str_appendc(buf, '}');
- }
- break;
- default:
- break;
- }
- smart_str_free(&spaces);
- smart_str_0(buf);
-}
-
-static void delete_url(void *handle)
-{
- php_url_free((php_url*)handle);
-}
-
-static void delete_service(void *data)
-{
- soapServicePtr service = (soapServicePtr)data;
-
- if (service->soap_functions.ft) {
- zend_hash_destroy(service->soap_functions.ft);
- efree(service->soap_functions.ft);
- }
-
- if (service->mapping) {
- zend_hash_destroy(service->mapping);
- efree(service->mapping);
- }
-
- if (service->soap_class.argc) {
- int i;
- for (i = 0; i < service->soap_class.argc;i++) {
- zval_ptr_dtor(&service->soap_class.argv[i]);
- }
- efree(service->soap_class.argv);
- }
-
- if (service->actor) {
- efree(service->actor);
- }
- if (service->uri) {
- efree(service->uri);
- }
- if (service->sdl) {
- delete_sdl(service->sdl);
- }
- if (service->encoding) {
- xmlCharEncCloseFunc(service->encoding);
- }
- efree(service);
-}
diff --git a/ext/soap/tests/bugs/bug27722.phpt b/ext/soap/tests/bugs/bug27722.phpt
deleted file mode 100644
index 5df6adb816..0000000000
--- a/ext/soap/tests/bugs/bug27722.phpt
+++ /dev/null
@@ -1,13 +0,0 @@
---TEST--
-Bug #27722 (Segfault on schema without targetNamespace)
---SKIPIF--
-<?php require_once('skipif.inc'); ?>
---GET--
-wsdl
---FILE--
-<?php
-$x = new SoapClient(dirname(__FILE__)."/bug27722.wsdl");
-echo "ok\n";
-?>
---EXPECT--
-ok \ No newline at end of file
diff --git a/ext/soap/tests/bugs/bug27722.wsdl b/ext/soap/tests/bugs/bug27722.wsdl
deleted file mode 100644
index 51f11e6c0f..0000000000
--- a/ext/soap/tests/bugs/bug27722.wsdl
+++ /dev/null
@@ -1,92 +0,0 @@
-<?xml version="1.0" ?>
-<definitions
- xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
- 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/"
- xmlns:si="http://soapinterop.org/xsd"
- xmlns:tns="http://linuxsrv.home/~dmitry/soap/test.wsdl"
- xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
- xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
- xmlns="http://schemas.xmlsoap.org/wsdl/"
- targetNamespace="http://linuxsrv.home/~dmitry/soap/test.wsdl">
- <types>
-<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
- <xsd:annotation>
- <xsd:documentation xml:lang="en">
- Purchase order schema for Example.com.
- Copyright 2000 Example.com. All rights reserved.
- </xsd:documentation>
- </xsd:annotation>
-
- <xsd:element name="purchaseOrder" type="PurchaseOrderType"/>
-
- <xsd:element name="comment" type="xsd:string"/>
-
- <xsd:complexType name="PurchaseOrderType">
- <xsd:sequence>
- <xsd:element name="shipTo" type="USAddress"/>
- <xsd:element name="billTo" type="USAddress"/>
- <xsd:element ref="comment" minOccurs="0"/>
- <xsd:element name="items" type="Items"/>
- </xsd:sequence>
- <xsd:attribute name="orderDate" type="xsd:date"/>
- </xsd:complexType>
-
- <xsd:complexType name="USAddress">
- <xsd:sequence>
- <xsd:element name="name" type="xsd:string"/>
- <xsd:element name="street" type="xsd:string"/>
- <xsd:element name="city" type="xsd:string"/>
- <xsd:element name="state" type="xsd:string"/>
- <xsd:element name="zip" type="xsd:decimal"/>
- </xsd:sequence>
- <xsd:attribute name="country" type="xsd:NMTOKEN"
- fixed="US"/>
- </xsd:complexType>
-
- <xsd:complexType name="Items">
- <xsd:sequence>
- <xsd:element name="item" minOccurs="0" maxOccurs="unbounded">
- <xsd:complexType>
- <xsd:sequence>
- <xsd:element name="productName" type="xsd:string"/>
- <xsd:element name="quantity">
- <xsd:simpleType>
- <xsd:restriction base="xsd:positiveInteger">
- <xsd:maxExclusive value="100"/>
- </xsd:restriction>
- </xsd:simpleType>
- </xsd:element>
- <xsd:element name="USPrice" type="xsd:decimal"/>
- <xsd:element ref="comment" minOccurs="0"/>
- <xsd:element name="shipDate" type="xsd:date" minOccurs="0"/>
- </xsd:sequence>
- <xsd:attribute name="partNum" type="SKU" use="required"/>
- </xsd:complexType>
- </xsd:element>
- </xsd:sequence>
- </xsd:complexType>
-
- <!-- Stock Keeping Unit, a code for identifying products -->
- <simpleType name="SKU">
- <restriction base="xsd:string">
- <pattern value="\d{3}-[A-Z]{2}"/>
- </restriction>
- </simpleType>
-
-</xsd:schema>
-</types>
- <portType name="TestServicePortType">
- </portType>
-
- <binding name="TestServiceBinding" type="tns:TestServicePortType">
- <soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http" />
- </binding>
-
- <service name="TestService">
- <port name="TestServicePort" binding="tns:TestServiceBinding">
- <soap:address location="test://" />
- </port>
- </service>
-</definitions>
diff --git a/ext/soap/tests/bugs/bug27742.phpt b/ext/soap/tests/bugs/bug27742.phpt
deleted file mode 100644
index 1de856828e..0000000000
--- a/ext/soap/tests/bugs/bug27742.phpt
+++ /dev/null
@@ -1,13 +0,0 @@
---TEST--
-Bug #27742 (WDSL SOAP Parsing Schema bug)
---SKIPIF--
-<?php require_once('skipif.inc'); ?>
---GET--
-wsdl
---FILE--
-<?php
-$x = new SoapClient(dirname(__FILE__)."/bug27742.wsdl");
-echo "ok\n";
-?>
---EXPECT--
-ok
diff --git a/ext/soap/tests/bugs/bug27742.wsdl b/ext/soap/tests/bugs/bug27742.wsdl
deleted file mode 100644
index f38d911852..0000000000
--- a/ext/soap/tests/bugs/bug27742.wsdl
+++ /dev/null
@@ -1,854 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- edited with XML Spy v4.4 U (http://www.xmlspy.com) by Rakesh Vidyadharan (Enterprise Application Development Tribune Media Services) -->
-<wsdl:definitions name="xtvdWebService" targetNamespace="urn:TMSWebServices" xmlns="http://schemas.xmlsoap.org/wsdl/" xmlns:http="http://schemas.xmlsoap.org/wsdl/http/" xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:tms="urn:TMSWebServices" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
- <wsdl:types>
- <xsd:schema targetNamespace="urn:TMSWebServices" xmlns="http://schemas.xmlsoap.org/wsdl/" xmlns:http="http://schemas.xmlsoap.org/wsdl/http/" xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:tms="urn:TMSWebServices" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
- <simpleType name="duration">
- <annotation>
- <documentation xml:lang="en">ISO 8601 pattern used to denote program durations. Year, month and day are not relevent in our context and are omitted.</documentation>
- </annotation>
- <restriction base="xsd:duration">
- <pattern value="PT[0-9][0-9]H[0-5][0-9]M"/>
- </restriction>
- </simpleType>
- <simpleType name="dateTime">
- <annotation>
- <documentation xml:lang="en">ISO 8601 pattern for date+time information : YYYY-MM-DDThh:mm:ssZ</documentation>
- </annotation>
- <restriction base="xsd:dateTime">
- <pattern value="20[0-9]{2}\-[0-1][0-9]\-[0-3][0-9]T[0-2][0-9]:[0-5][0-9]:[0-5][0-9]Z"/>
- </restriction>
- </simpleType>
- <simpleType name="date">
- <annotation>
- <documentation xml:lang="en">ISO 8601 pattern for date: YYYY-MM-DD</documentation>
- </annotation>
- <restriction base="xsd:date">
- <pattern value="(19|20)[0-9]{2}\-[0-1][0-9]\-[0-3][0-9]"/>
- </restriction>
- </simpleType>
- <simpleType name="time">
- <annotation>
- <documentation xml:lang="en">ISO 8601 pattern for time of day : hh:mm:ss</documentation>
- </annotation>
- <restriction base="xsd:time">
- <pattern value="\d\d:\d\d:\d\d"/>
- </restriction>
- </simpleType>
- <simpleType name="mpaaRatings">
- <annotation>
- <documentation xml:lang="en">MPAA standard ratings for a movie as defined in the movie and TV database schemas.</documentation>
- </annotation>
- <restriction base="xsd:string">
- <enumeration value="Adult">
- <annotation>
- <documentation xml:lang="en">This is the way this rating is defined in the movies database schema.</documentation>
- </annotation>
- </enumeration>
- <enumeration value="AO">
- <annotation>
- <documentation xml:lang="en">This is the way this rating is defined in the TV database schema.</documentation>
- </annotation>
- </enumeration>
- <enumeration value="G"/>
- <enumeration value="NC-17"/>
- <enumeration value="NONE">
- <annotation>
- <documentation xml:lang="en">Films in the movie database that do not have any ratings associated with them are sometimes marked with this value.</documentation>
- </annotation>
- </enumeration>
- <enumeration value="NOT RATED">
- <annotation>
- <documentation xml:lang="en">This is the way films without any rating are defined in the movies database schema.</documentation>
- </annotation>
- </enumeration>
- <enumeration value="NR">
- <annotation>
- <documentation xml:lang="en">This is the way films without any rating are defined in the TV database schema.</documentation>
- </annotation>
- </enumeration>
- <enumeration value="PG"/>
- <enumeration value="PG-13"/>
- <enumeration value="R"/>
- </restriction>
- </simpleType>
- <simpleType name="starRating">
- <annotation>
- <documentation xml:lang="en">A Zap2it reviewer assigned rating for a given film.</documentation>
- </annotation>
- <restriction base="xsd:string">
- <enumeration value="*"/>
- <enumeration value="*+"/>
- <enumeration value="**"/>
- <enumeration value="**+"/>
- <enumeration value="***"/>
- <enumeration value="***+"/>
- <enumeration value="****"/>
- </restriction>
- </simpleType>
- <simpleType name="movieCrewRole">
- <annotation>
- <documentation xml:lang="en">The roles that are currently defined for the production crew associated with a given film.</documentation>
- </annotation>
- <restriction base="xsd:string">
- <enumeration value="Actor"/>
- <enumeration value="Director"/>
- <enumeration value="Executive Producer"/>
- <enumeration value="Guest Star"/>
- <enumeration value="Producer"/>
- <enumeration value="Writer"/>
- </restriction>
- </simpleType>
- <simpleType name="movieGenres">
- <annotation>
- <documentation xml:lang="en">The standard genres that are used to classify films in the movies database schema.</documentation>
- </annotation>
- <restriction base="xsd:string">
- <enumeration value=""/>
- <enumeration value="Action"/>
- <enumeration value="Adults only"/>
- <enumeration value="Adventure"/>
- <enumeration value="Animated musical"/>
- <enumeration value="Biography"/>
- <enumeration value="Children"/>
- <enumeration value="Comedy"/>
- <enumeration value="Comedy-drama"/>
- <enumeration value="Crime drama"/>
- <enumeration value="Docudrama"/>
- <enumeration value="Documentary"/>
- <enumeration value="Drama"/>
- <enumeration value="Fantasy"/>
- <enumeration value="French"/>
- <enumeration value="Historical drama"/>
- <enumeration value="Horror"/>
- <enumeration value="Martial arts"/>
- <enumeration value="Musical"/>
- <enumeration value="Musical comedy"/>
- <enumeration value="Musical romance"/>
- <enumeration value="Mystery"/>
- <enumeration value="Romance"/>
- <enumeration value="Romance-comedy"/>
- <enumeration value="Science fiction"/>
- <enumeration value="Spanish"/>
- <enumeration value="Suspense"/>
- <enumeration value="Suspense-comedy"/>
- <enumeration value="War"/>
- <enumeration value="Western"/>
- </restriction>
- </simpleType>
- <simpleType name="movieAdvisories">
- <annotation>
- <documentation xml:lang="en">The standard advisory messages that are associated with a movie shown on TV.</documentation>
- </annotation>
- <restriction base="xsd:string">
- <enumeration value="Adult Situations"/>
- <enumeration value="Adolescentes y Adultos"/>
- <enumeration value="Adultos"/>
- <enumeration value="Brief Nudity"/>
- <enumeration value="Graphic Language"/>
- <enumeration value="Graphic Violence"/>
- <enumeration value="Language"/>
- <enumeration value="Mild Violence"/>
- <enumeration value="Nudity"/>
- <enumeration value="Publico General"/>
- <enumeration value="Rape"/>
- <enumeration value="Strong Sexual Content"/>
- <enumeration value="Violence"/>
- </restriction>
- </simpleType>
- <simpleType name="tvRatings">
- <annotation>
- <documentation xml:lang="en">The FCC standard ratings for TV programs (http://www.fcc.gov/vchip/#guidelines)</documentation>
- </annotation>
- <restriction base="xsd:string">
- <enumeration value="TVY"/>
- <enumeration value="TVY7"/>
- <enumeration value="TVG"/>
- <enumeration value="TVPG"/>
- <enumeration value="TV14"/>
- <enumeration value="TVMA"/>
- </restriction>
- </simpleType>
- <simpleType name="tvColorCode">
- <annotation>
- <documentation>The standard color codes used to denote the color scheme used by a TV program (eg. Color, B &amp; W ...).</documentation>
- </annotation>
- <restriction base="xsd:string">
- <enumeration value="B &amp; W">
- <annotation>
- <documentation xml:lang="en">Indicates that the program is begin telecast in Black and White.</documentation>
- </annotation>
- </enumeration>
- <enumeration value="Color">
- <annotation>
- <documentation xml:lang="en">Indicates that the program being telecast is in color.</documentation>
- </annotation>
- </enumeration>
- <enumeration value="Colorized">
- <annotation>
- <documentation xml:lang="en">Indicates that the program being telecast is a colorised version of the original program.</documentation>
- </annotation>
- </enumeration>
- <enumeration value="Color and B &amp; W">
- <annotation>
- <documentation xml:lang="en">Indicates that the program being telecast is partly in color and partly in Black and White.</documentation>
- </annotation>
- </enumeration>
- </restriction>
- </simpleType>
- <attributeGroup name="filmDataAttributes">
- <annotation>
- <documentation xml:lang="en">Common attributes that are applicable to all the root elements of the XML schemas developed to represent film data.</documentation>
- </annotation>
- <attribute name="postalCode" type="xsd:string" use="optional">
- <annotation>
- <documentation xml:lang="en">The ZIP/Postal code for which the theatre list was generated.</documentation>
- </annotation>
- </attribute>
- <attribute name="radius" type="xsd:float" use="optional" default="5">
- <annotation>
- <documentation xml:lang="en">The radius around the centroid of the ZIP/Postal code within which the films are located. A default value of 20 (miles for US customers and kilometres for non-US customers) will be used if the client making the request did not specify a radius.</documentation>
- </annotation>
- </attribute>
- <attribute name="maxCount" type="xsd:int" use="optional">
- <annotation>
- <documentation xml:lang="en">The maximum number of film/theatre records that are included in the document. This number may be specified by the client making the request for the list of films/theatres/showtimes.</documentation>
- </annotation>
- </attribute>
- </attributeGroup>
- <complexType name="crewMember">
- <annotation>
- <documentation xml:lang="en">A cast or production crew member for a film or TV show.</documentation>
- </annotation>
- <sequence>
- <element name="role" type="xsd:string">
- <annotation>
- <documentation xml:lang="en">Describes the role of the crew member. Eg. Actor, Director ...</documentation>
- </annotation>
- </element>
- <element name="givenname" type="xsd:string" nillable="true">
- <annotation>
- <documentation xml:lang="en">The given/first name of the crew member. The element name follows LDAP naming convention. TMS does not have given/first names for all cast/crew members. Hence this element is nillable.</documentation>
- </annotation>
- </element>
- <element name="surname" type="xsd:string">
- <annotation>
- <documentation xml:lang="en">The surname/last-name of the crew member. The element name follows LDAP naming convention.</documentation>
- </annotation>
- </element>
- </sequence>
- </complexType>
- <complexType name="image">
- <annotation>
- <documentation>Complex type that contains the attributes of an image. The only attribute available at present is its URI.</documentation>
- </annotation>
- <sequence>
- <element name="imageUri" type="xsd:anyURI" nillable="true">
- <annotation>
- <documentation>This element contains an absolute URI to an image associated with the film.</documentation>
- </annotation>
- </element>
- <element name="width" type="xsd:string" minOccurs="0">
- <annotation>
- <documentation>This element defines the width of the image associated with the film. This element is a place holder. The width attribute is not available at present.</documentation>
- </annotation>
- </element>
- <element name="height" type="xsd:string" minOccurs="0">
- <annotation>
- <documentation>This element defines the height of the image associated with the film. This element is a place holder. The height attribute is not available at present.</documentation>
- </annotation>
- </element>
- </sequence>
- </complexType>
- <complexType name="address">
- <annotation>
- <documentation xml:lang="en">This complex type describes a generic address.</documentation>
- </annotation>
- <sequence>
- <element name="streetAddress">
- <annotation>
- <documentation xml:lang="en">This element groups together the various street address parts for the entire address.</documentation>
- </annotation>
- <complexType>
- <sequence>
- <element name="street" type="xsd:string" maxOccurs="unbounded">
- <annotation>
- <documentation xml:lang="en">This field contains each entry for the street address part of the entire address.</documentation>
- </annotation>
- </element>
- </sequence>
- </complexType>
- </element>
- <element name="city" type="xsd:string">
- <annotation>
- <documentation xml:lang="en">This field contains the city for the address.</documentation>
- </annotation>
- </element>
- <element name="state" type="xsd:string">
- <annotation>
- <documentation xml:lang="en">This field contains the name/code of the state for the address.</documentation>
- </annotation>
- </element>
- <element name="postalCode" type="xsd:string">
- <annotation>
- <documentation xml:lang="en">This field contains the ZIP/Postal code for the address.</documentation>
- </annotation>
- </element>
- <element name="telephone" type="xsd:string" minOccurs="0">
- <annotation>
- <documentation xml:lang="en">This field contains the telephone number if available for the address.</documentation>
- </annotation>
- </element>
- <element name="fax" type="xsd:string" minOccurs="0">
- <annotation>
- <documentation xml:lang="en">This field contains the fax number if available for the address.</documentation>
- </annotation>
- </element>
- <element name="mobile" type="xsd:string" minOccurs="0">
- <annotation>
- <documentation xml:lang="en">This field contains the mobile phone number if available for the address.</documentation>
- </annotation>
- </element>
- <element name="email" type="xsd:string" minOccurs="0">
- <annotation>
- <documentation xml:lang="en">This field contains the email address if available for the address.</documentation>
- </annotation>
- </element>
- <element name="country" type="xsd:string" minOccurs="0">
- <annotation>
- <documentation xml:lang="en">This field contains the country of the address.</documentation>
- </annotation>
- </element>
- </sequence>
- </complexType>
- <element name="xtvd">
- <annotation>
- <documentation>Root element of the document. @IMPORTANT : All time and dates are specified in UTC !</documentation>
- </annotation>
- <complexType>
- <sequence>
- <element ref="tms:stations"/>
- <element ref="tms:lineups"/>
- <element ref="tms:schedules"/>
- <element ref="tms:programs"/>
- <element ref="tms:productionCrew" minOccurs="0"/>
- <element ref="tms:genres"/>
- </sequence>
- <attribute name="from" type="tms:dateTime" use="required">
- <annotation>
- <documentation xml:lang="en">Date and time defining the start of the period covered by this XTVD document.</documentation>
- </annotation>
- </attribute>
- <attribute name="to" type="tms:dateTime" use="required">
- <annotation>
- <documentation xml:lang="en">Date and time defining the end of the period covered by this XTVD document.</documentation>
- </annotation>
- </attribute>
- <attribute name="schemaVersion" type="xsd:float" use="required" fixed="1.2">
- <annotation>
- <documentation xml:lang="en">Version number of the schema used to build this document.</documentation>
- </annotation>
- </attribute>
- </complexType>
- <key name="station_key">
- <selector xpath="./stations/station"/>
- <field xpath="@id"/>
- </key>
- <keyref name="station_keyref_schedule" refer="tms:station_key">
- <selector xpath="./schedules/schedule"/>
- <field xpath="@station"/>
- </keyref>
- <keyref name="station_keyref_map" refer="tms:station_key">
- <selector xpath="./lineups/lineup/map"/>
- <field xpath="@station"/>
- </keyref>
- <unique name="program_key">
- <selector xpath="./programs/program"/>
- <field xpath="@id"/>
- </unique>
- <keyref name="program_keyref" refer="tms:program_key">
- <selector xpath="./schedules/schedule"/>
- <field xpath="@program"/>
- </keyref>
- <keyref name="crew_keyref" refer="tms:program_key">
- <selector xpath="./productionCrew/crew"/>
- <field xpath="@program"/>
- </keyref>
- <keyref name="genre_keyref" refer="tms:program_key">
- <selector xpath="./genres/programGenre"/>
- <field xpath="@program"/>
- </keyref>
- <keyref name="advisory_keyref" refer="tms:program_key">
- <selector xpath="./advisories/advisory"/>
- <field xpath="@program"/>
- </keyref>
- </element>
- <element name="stations">
- <annotation>
- <documentation>Collection of user selected station elements (across all lineups).</documentation>
- </annotation>
- <complexType>
- <sequence maxOccurs="unbounded">
- <element name="station">
- <annotation>
- <documentation>Defines a TV broadcast station - each station is identified with an unique ID.</documentation>
- </annotation>
- <complexType>
- <sequence>
- <element name="callSign">
- <annotation>
- <documentation>Short name of the station (eg. CNN).</documentation>
- </annotation>
- </element>
- <element name="name" minOccurs="0">
- <annotation>
- <documentation>Long name of the station (eg. Cable News Network).</documentation>
- </annotation>
- </element>
- <element name="fccChannelNumber" type="xsd:positiveInteger" minOccurs="0">
- <annotation>
- <documentation xml:lang="en">FCC channel number of a broadcast station.</documentation>
- </annotation>
- </element>
- <element name="affiliate" type="xsd:string" minOccurs="0">
- <annotation>
- <documentation xml:lang="en">Network, cable or broadcasting group with which the station is associated.</documentation>
- </annotation>
- </element>
- </sequence>
- <attribute name="id" type="xsd:int" use="required">
- <annotation>
- <documentation xml:lang="en">ID string of the station.</documentation>
- </annotation>
- </attribute>
- </complexType>
- </element>
- </sequence>
- </complexType>
- </element>
- <element name="lineups">
- <annotation>
- <documentation>Collection of lineup elements selected by the user.</documentation>
- </annotation>
- <complexType>
- <sequence maxOccurs="unbounded">
- <element name="lineup">
- <annotation>
- <documentation>Defines all the station that were selected for the given lineup. </documentation>
- </annotation>
- <complexType>
- <sequence maxOccurs="unbounded">
- <element name="map">
- <annotation>
- <documentation>This element defines the mapping between one station and one channel number. As channel numbers may change over time, attributes to define a validity period for the mapping are available.</documentation>
- </annotation>
- <complexType>
- <sequence minOccurs="0" maxOccurs="unbounded">
- <element name="onAir">
- <annotation>
- <documentation xml:lang="en">Specifies the time(s) of day when the given station-channel mapping is in effect.</documentation>
- </annotation>
- <complexType>
- <attribute name="from" type="tms:time" use="required">
- <annotation>
- <documentation xml:lang="en">The time of day from which the station-channel mapping is effective.</documentation>
- </annotation>
- </attribute>
- <attribute name="to" type="tms:time" use="required">
- <annotation>
- <documentation xml:lang="en">The time of day until which the station-channel mapping is effective.</documentation>
- </annotation>
- </attribute>
- </complexType>
- </element>
- </sequence>
- <attribute name="station" type="xsd:int" use="required">
- <annotation>
- <documentation xml:lang="en">Reference to a station.</documentation>
- </annotation>
- </attribute>
- <attribute name="channel" type="xsd:positiveInteger" use="required">
- <annotation>
- <documentation xml:lang="en">Channel number associated to the station.</documentation>
- </annotation>
- </attribute>
- <attribute name="channelMinor" type="xsd:positiveInteger" use="optional">
- <annotation>
- <documentation xml:lang="en">The major channel (the channel attribute) number is used to group all services associated with a broadcaster's NTSC brand, for example Channel 4. The minor channel number specifies a particular channel within that group. Zero (0) is reserved for the NTSC channel; all other values (1-999) are allowed for digital services. One common approach is to start with 1 and to continue numerically for different programming services.</documentation>
- </annotation>
- </attribute>
- <attribute name="from" type="tms:date" use="optional">
- <annotation>
- <documentation xml:lang="en">Date from which the mapping is valid, according to the validity period of the whole XTVD document. @IMPORTANT : It is assumed that the change will occur at midnight.</documentation>
- </annotation>
- </attribute>
- <attribute name="to" type="tms:date" use="optional">
- <annotation>
- <documentation xml:lang="en">Date untill which the mapping is valid, within the validity period of the whole XTVD document. @IMPORTANT : The change will occur at midnight.</documentation>
- </annotation>
- </attribute>
- </complexType>
- </element>
- </sequence>
- <attribute name="name" type="xsd:string" use="required">
- <annotation>
- <documentation xml:lang="en">Name given to the lineup.</documentation>
- </annotation>
- </attribute>
- <attribute name="type" type="tms:lineupTypes" use="required">
- <annotation>
- <documentation xml:lang="en">Defines the type of the lineup (CABLE, SATELLITE, ...).</documentation>
- </annotation>
- </attribute>
- <attribute name="device" type="xsd:string" use="optional">
- <annotation>
- <documentation xml:lang="en">The name of the device associated with the headend.</documentation>
- </annotation>
- </attribute>
- <attribute name="postalCode" type="xsd:string" use="optional">
- <annotation>
- <documentation xml:lang="en">The ZIP/Postal code for which the specified lineup was selected by the user.</documentation>
- </annotation>
- </attribute>
- </complexType>
- </element>
- </sequence>
- </complexType>
- </element>
- <element name="schedules">
- <annotation>
- <documentation>Contain all schedule records (across all selected lineups).</documentation>
- </annotation>
- <complexType>
- <sequence maxOccurs="unbounded">
- <annotation>
- <documentation>Sequence of schedule records.</documentation>
- </annotation>
- <element name="schedule">
- <annotation>
- <documentation>Describes a schedule entry.</documentation>
- </annotation>
- <complexType>
- <sequence minOccurs="0">
- <element name="part" minOccurs="0">
- <annotation>
- <documentation>Designates which part, when a program is split into 2 or more viewings.</documentation>
- </annotation>
- <complexType>
- <attribute name="number" use="required">
- <annotation>
- <documentation xml:lang="en">Designates which part, when a program is split into 2 or more viewings. </documentation>
- </annotation>
- <simpleType>
- <restriction base="xsd:unsignedInt">
- <minInclusive value="1"/>
- </restriction>
- </simpleType>
- </attribute>
- <attribute name="total" use="required">
- <annotation>
- <documentation xml:lang="en">Designates when a program is split into 2 or more parts for viewing. </documentation>
- </annotation>
- <simpleType>
- <restriction base="xsd:unsignedInt">
- <minInclusive value="2"/>
- </restriction>
- </simpleType>
- </attribute>
- </complexType>
- </element>
- </sequence>
- <attribute name="program" type="xsd:string" use="required">
- <annotation>
- <documentation xml:lang="en">Reference to a program ID.</documentation>
- </annotation>
- </attribute>
- <attribute name="station" type="xsd:int" use="required">
- <annotation>
- <documentation xml:lang="en">Reference to a station ID.</documentation>
- </annotation>
- </attribute>
- <attribute name="time" type="tms:dateTime" use="required">
- <annotation>
- <documentation xml:lang="en">Air date and time for the schedule.</documentation>
- </annotation>
- </attribute>
- <attribute name="duration" type="tms:duration" use="required">
- <annotation>
- <documentation xml:lang="en">Duration of the schedule.</documentation>
- </annotation>
- </attribute>
- <attribute name="repeat" type="xsd:boolean" use="optional">
- <annotation>
- <documentation xml:lang="en">Designates a program which has been aired previously.</documentation>
- </annotation>
- </attribute>
- <attribute name="tvRating" type="tms:tvRatings" use="optional">
- <annotation>
- <documentation xml:lang="en">The FCC standard ratings applied to TV shows.</documentation>
- </annotation>
- </attribute>
- <attribute name="stereo" type="xsd:boolean" use="optional">
- <annotation>
- <documentation xml:lang="en">Indicates whether the program has stereo sound or not.</documentation>
- </annotation>
- </attribute>
- <attribute name="subtitled" type="xsd:boolean" use="optional">
- <annotation>
- <documentation xml:lang="en">Indicates whether the program has subtitles.</documentation>
- </annotation>
- </attribute>
- <attribute name="hdtv" type="xsd:boolean" use="optional">
- <annotation>
- <documentation xml:lang="en">Indicates whether the program broadcast is HDTV compatible.</documentation>
- </annotation>
- </attribute>
- <attribute name="closeCaptioned" type="xsd:boolean" use="optional">
- <annotation>
- <documentation xml:lang="en">Indicates whether the program has closed captions.</documentation>
- </annotation>
- </attribute>
- </complexType>
- </element>
- </sequence>
- </complexType>
- </element>
- <element name="programs">
- <annotation>
- <documentation>Contains all the program records that are referenced by the schedule records.</documentation>
- </annotation>
- <complexType>
- <sequence maxOccurs="unbounded">
- <element name="program" minOccurs="0">
- <annotation>
- <documentation>Defines a program entry.</documentation>
- </annotation>
- <complexType>
- <sequence>
- <element name="title" type="xsd:string">
- <annotation>
- <documentation>Title of the program.</documentation>
- </annotation>
- </element>
- <element name="subtitle" type="xsd:string" minOccurs="0">
- <annotation>
- <documentation>Subtitle of the program (episode title, game title, ...)</documentation>
- </annotation>
- </element>
- <element name="description" type="xsd:string" minOccurs="0">
- <annotation>
- <documentation>Word string that describes the program.</documentation>
- </annotation>
- </element>
- <element name="mpaaRating" type="tms:mpaaRatings" minOccurs="0">
- <annotation>
- <documentation>MPAA rating of the program (applies to movies only).</documentation>
- </annotation>
- </element>
- <element name="starRating" type="tms:starRating" minOccurs="0">
- <annotation>
- <documentation>Star rating of the program (applies to movies only).</documentation>
- </annotation>
- </element>
- <element name="runTime" type="tms:duration" minOccurs="0">
- <annotation>
- <documentation>Actual length of the program. Not the same as schedule/@duration. Applies to movies only.</documentation>
- </annotation>
- </element>
- <element name="year" type="xsd:gYear" minOccurs="0">
- <annotation>
- <documentation>The year in which a feature film was released; YYYY format. Applies to movies only.</documentation>
- </annotation>
- </element>
- <element name="showType" type="xsd:string" minOccurs="0">
- <annotation>
- <documentation xml:lang="en">Distinguishes how a program was originally produced and/or distributed.</documentation>
- </annotation>
- </element>
- <element name="series" type="xsd:string" minOccurs="0">
- <annotation>
- <documentation xml:lang="en">The series ID associated with episodic programs. For instance an episode with programId "EP5544720193" has a series ID "SH5544720000". The series ID may be used to group together all episodes for a given series.</documentation>
- </annotation>
- </element>
- <element name="colorCode" type="tms:tvColorCode" minOccurs="0">
- <annotation>
- <documentation xml:lang="en">Indicates whether the program is in black and white, colorized or color. Since most programs are in "Color" this element will be populated only if a program is not in "Color".</documentation>
- </annotation>
- </element>
- <element name="advisories" minOccurs="0">
- <annotation>
- <documentation xml:lang="en">This element groups together all the advisories associated with the program. Advisories apply only to movies.</documentation>
- </annotation>
- <complexType>
- <sequence maxOccurs="6">
- <element name="advisory" type="tms:movieAdvisories">
- <annotation>
- <documentation xml:lang="en">An individual advisory message associated with the movie.</documentation>
- </annotation>
- </element>
- </sequence>
- </complexType>
- </element>
- </sequence>
- <attribute name="id" type="xsd:string" use="required">
- <annotation>
- <documentation xml:lang="en">Unique ID of the program.</documentation>
- </annotation>
- </attribute>
- </complexType>
- </element>
- </sequence>
- </complexType>
- </element>
- <element name="productionCrew">
- <annotation>
- <documentation>Contains information about the personnel associated with each program record.</documentation>
- </annotation>
- <complexType>
- <sequence maxOccurs="unbounded">
- <element name="crew">
- <annotation>
- <documentation xml:lang="en">This element groups together all the crew members associated with the given program.</documentation>
- </annotation>
- <complexType>
- <sequence maxOccurs="unbounded">
- <element name="member" type="tms:crewMember">
- <annotation>
- <documentation xml:lang="en">This element describes an individual production crew member associated with a program.</documentation>
- </annotation>
- </element>
- </sequence>
- <attribute name="program" type="xsd:string" use="required"/>
- </complexType>
- </element>
- </sequence>
- </complexType>
- </element>
- <element name="genres">
- <annotation>
- <documentation xml:lang="en">Containes genre information where available for the program records. A program may have more than one genre with different relevence factors.</documentation>
- </annotation>
- <complexType>
- <sequence maxOccurs="unbounded">
- <element name="programGenre">
- <annotation>
- <documentation xml:lang="en">This element groups together all the genres under which the specified program falls.</documentation>
- </annotation>
- <complexType>
- <sequence maxOccurs="unbounded">
- <element name="genre">
- <annotation>
- <documentation xml:lang="en">This element groups together the different elements associated with each genre with which the program is associated.</documentation>
- </annotation>
- <complexType>
- <sequence>
- <element name="class" type="xsd:string">
- <annotation>
- <documentation xml:lang="en">The genre that is associated with a specified program record.</documentation>
- </annotation>
- </element>
- <element name="relevance" type="xsd:int">
- <annotation>
- <documentation xml:lang="en">A relevence factor that applies to the genre classification for the program. A relevence factor of 1 indicates that this is the top-level genre under which the program is classified.</documentation>
- </annotation>
- </element>
- </sequence>
- </complexType>
- </element>
- </sequence>
- <attribute name="program" type="xsd:string" use="required"/>
- </complexType>
- </element>
- </sequence>
- </complexType>
- </element>
- <simpleType name="lineupTypes">
- <annotation>
- <documentation xml:lang="en">Standard lineup types.</documentation>
- </annotation>
- <restriction base="xsd:string">
- <enumeration value="Cable"/>
- <enumeration value="CableDigital"/>
- <enumeration value="Satellite"/>
- <enumeration value="LocalBroadcast"/>
- </restriction>
- </simpleType>
- <xsd:complexType name="xtvdResponse">
- <xsd:sequence>
- <xsd:element name="messages">
- <xsd:annotation>
- <xsd:documentation xml:lang="en">A collection of messages that may be sent back by the server to the client. Messages are usually used by the server to notify the user of changes to their subscription caused by automatic changes in station's that are part of their subscription. For instance, messages are passed back if a lineup selected by the user is no-longer valid, if all the stations selected by the user has been removed as they are no longer valid ... </xsd:documentation>
- </xsd:annotation>
- <xsd:complexType>
- <xsd:sequence maxOccurs="unbounded" minOccurs="0">
- <xsd:element name="message" type="xsd:string">
- <xsd:annotation>
- <xsd:documentation xml:lang="en">An individual message that is passed back by the server.</xsd:documentation>
- </xsd:annotation>
- </xsd:element>
- </xsd:sequence>
- </xsd:complexType>
- </xsd:element>
- <xsd:element name="xtvdDocument" type="tms:xtvd"/>
- </xsd:sequence>
- </xsd:complexType>
- </xsd:schema>
- </wsdl:types>
- <wsdl:message name="downloadResponse">
- <wsdl:part name="xtvdResponse" type="tms:xtvdResponse"/>
- </wsdl:message>
- <wsdl:message name="downloadRequest">
- <wsdl:part name="startTime" type="tms:dateTime"/>
- <wsdl:part name="endTime" type="tms:dateTime"/>
- </wsdl:message>
- <wsdl:message name="activateRequest">
- <wsdl:part name="deviceType" type="xsd:string"/>
- <wsdl:part name="activationKey" type="xsd:string"/>
- </wsdl:message>
- <wsdl:message name="webserviceFault"/>
- <wsdl:message name="activateResponse"/>
- <wsdl:portType name="xtvdPortType">
- <wsdl:operation name="activate">
- <wsdl:input message="tms:activateRequest"/>
- <wsdl:output message="tms:activateResponse"/>
- <wsdl:fault message="tms:webserviceFault" name="webserviceFault"/>
- </wsdl:operation>
- <wsdl:operation name="download">
- <wsdl:input message="tms:downloadRequest"/>
- <wsdl:output message="tms:downloadResponse"/>
- <wsdl:fault message="tms:webserviceFault" name="webserviceFault"/>
- </wsdl:operation>
- </wsdl:portType>
- <wsdl:binding name="xtvdBinding" type="tms:xtvdPortType">
- <soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/>
- <wsdl:operation name="activate">
- <soap:operation soapAction="urn:TMSWebServices:xtvdWebService#activate"/>
- <wsdl:input>
- <soap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="urn:TMSWebServices" use="encoded"/>
- </wsdl:input>
- <wsdl:output>
- <soap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" use="encoded"/>
- </wsdl:output>
- <wsdl:fault name="webserviceFault">
- <soap:fault encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" name="tms:webserviceFault" namespace="urn:TMSWebServices" use="encoded"/>
- </wsdl:fault>
- </wsdl:operation>
- <wsdl:operation name="download">
- <soap:operation soapAction="urn:TMSWebServices:xtvdWebService#download"/>
- <wsdl:input>
- <soap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="urn:TMSWebServices" use="encoded"/>
- </wsdl:input>
- <wsdl:output>
- <soap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" use="encoded"/>
- </wsdl:output>
- <wsdl:fault name="webserviceFault">
- <soap:fault encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" name="tms:webserviceFault" namespace="urn:TMSWebServices" use="encoded"/>
- </wsdl:fault>
- </wsdl:operation>
- </wsdl:binding>
- <wsdl:service name="xtvdWebService">
- <wsdl:port binding="tms:xtvdBinding" name="xtvdWebServicePort">
- <soap:address location="http://datadirect.webservices.zap2it.com/tvlistings/xtvdService"/>
- </wsdl:port>
- </wsdl:service>
-</wsdl:definitions>
diff --git a/ext/soap/tests/bugs/bug28751.phpt b/ext/soap/tests/bugs/bug28751.phpt
deleted file mode 100644
index a37a2c15eb..0000000000
--- a/ext/soap/tests/bugs/bug28751.phpt
+++ /dev/null
@@ -1,38 +0,0 @@
---TEST--
-Bug #28751 (SoapServer does not call _autoload())
---SKIPIF--
-<?php require_once('skipif.inc'); ?>
---FILE--
-<?php
-function __autoload($className) {
- class SoapServerActions {
- function test() {
- return "Hello World";
- }
- }
-}
-
-$server = new SoapServer(NULL, array('uri'=>"http://testuri.org"));
-$server->setClass("SoapServerActions");
-
-$HTTP_RAW_POST_DATA = <<<EOF
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<SOAP-ENV:Envelope
- SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
- xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
- xmlns:xsd="http://www.w3.org/2001/XMLSchema"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xmlns:si="http://soapinterop.org/xsd">
- <SOAP-ENV:Body>
- <ns1:test xmlns:ns1="http://testuri.org" />
- </SOAP-ENV:Body>
-</SOAP-ENV:Envelope>
-EOF;
-
-$server->handle();
-echo "ok\n";
-?>
---EXPECT--
-<?xml version="1.0" encoding="UTF-8"?>
-<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://testuri.org" 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:testResponse><return xsi:type="xsd:string">Hello World</return></ns1:testResponse></SOAP-ENV:Body></SOAP-ENV:Envelope>
-ok
diff --git a/ext/soap/tests/bugs/bug28969.phpt b/ext/soap/tests/bugs/bug28969.phpt
deleted file mode 100644
index af2fb10290..0000000000
--- a/ext/soap/tests/bugs/bug28969.phpt
+++ /dev/null
@@ -1,38 +0,0 @@
---TEST--
-Bug #28969 (Wrong data encoding of special characters)
---SKIPIF--
-<?php require_once('skipif.inc'); ?>
---FILE--
-<?php
-function test() {
- return "¦è¥";
-// return utf8_encode("¦è¥");
-}
-
-class LocalSoapClient extends SoapClient {
-
- function LocalSoapClient($wsdl, $options) {
- $this->SoapClient($wsdl, $options);
- $this->server = new SoapServer($wsdl, $options);
- $this->server->addFunction('test');
- }
-
- function __doRequest($request, $location, $action, $version) {
- 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',
- 'encoding'=>'ISO-8859-1'));
-var_dump($x->test());
-echo "ok\n";
-?>
---EXPECT--
-string(3) "¦è¥"
-ok
diff --git a/ext/soap/tests/bugs/bug28985.phpt b/ext/soap/tests/bugs/bug28985.phpt
deleted file mode 100644
index 291cce0cbb..0000000000
--- a/ext/soap/tests/bugs/bug28985.phpt
+++ /dev/null
@@ -1,204 +0,0 @@
---TEST--
-Bug #28985 (__getTypes() returning nothing on complex WSDL)
---SKIPIF--
-<?php require_once('skipif.inc'); ?>
---FILE--
-<?php
-$client = new SOAPClient(dirname(__FILE__).'/bug28985.wsdl', array('trace'=>1));
-var_dump($client->__getTypes());
-?>
---EXPECT--
-array(42) {
- [0]=>
- string(100) "struct LoginMGDIS {
- string iUserLogin;
- string iUserId;
- string iUserPassword;
- string iProfilId;
-}"
- [1]=>
- string(29) "struct LoginMGDISResponse {
-}"
- [2]=>
- string(28) "struct GetIdentification {
-}"
- [3]=>
- string(77) "struct GetIdentificationResponse {
- ArrayOfAnyType GetIdentificationResult;
-}"
- [4]=>
- string(43) "struct ArrayOfAnyType {
- anyType anyType;
-}"
- [5]=>
- string(37) "struct RollbackCurrentTransaction {
-}"
- [6]=>
- string(45) "struct RollbackCurrentTransactionResponse {
-}"
- [7]=>
- string(68) "struct GetListeProfil {
- string iUserLogin;
- string iUserPassword;
-}"
- [8]=>
- string(86) "struct MGCodeLibelle {
- string Code;
- string Libelle;
- boolean Defaut;
- anyType Tag;
-}"
- [9]=>
- string(61) "struct ArrayOfMGCodeLibelle {
- MGCodeLibelle MGCodeLibelle;
-}"
- [10]=>
- string(77) "struct GetListeProfilResponse {
- ArrayOfMGCodeLibelle GetListeProfilResult;
-}"
- [11]=>
- string(41) "struct GetListeValCodif {
- string Code;
-}"
- [12]=>
- string(43) "struct ArrayOfMGCodif {
- MGCodif MGCodif;
-}"
- [13]=>
- string(18) "struct MGCodif {
-}"
- [14]=>
- string(75) "struct GetListeValCodifResponse {
- ArrayOfMGCodif GetListeValCodifResult;
-}"
- [15]=>
- string(39) "struct TestPhpSoap {
- MGCodif entree;
-}"
- [16]=>
- string(57) "struct TestPhpSoapResponse {
- string TestPhpSoapResult;
-}"
- [17]=>
- string(50) "struct GetListeCodif {
- boolean iGetListeValeur;
-}"
- [18]=>
- string(87) "struct MGCodifGrp {
- string TypeCodif;
- string LibCodif;
- ArrayOfMGCodif ListeCodifs;
-}"
- [19]=>
- string(52) "struct ArrayOfMGCodifGrp {
- MGCodifGrp MGCodifGrp;
-}"
- [20]=>
- string(72) "struct GetListeCodifResponse {
- ArrayOfMGCodifGrp GetListeCodifResult;
-}"
- [21]=>
- string(57) "struct DroitCreation {
- string iObjet;
- string iProfil;
-}"
- [22]=>
- string(62) "struct DroitCreationResponse {
- boolean DroitCreationResult;
-}"
- [23]=>
- string(74) "struct ListeDroitCreation {
- ArrayOfString iListeObjet;
- string iProfil;
-}"
- [24]=>
- string(40) "struct ArrayOfString {
- string string;
-}"
- [25]=>
- string(79) "struct ListeDroitCreationResponse {
- ArrayOfAnyType ListeDroitCreationResult;
-}"
- [26]=>
- string(87) "struct GetDroitsObjetProtege {
- string iObjet;
- string iProfil;
- string iUtilisateur;
-}"
- [27]=>
- string(154) "struct MGDroitsObjetProtege {
- string LbUti;
- string LbProf;
- string LbServ;
- string LbDir;
- boolean isProtected;
- ArrayOfMGDroitAcces ListeDroitsAcces;
-}"
- [28]=>
- string(58) "struct ArrayOfMGDroitAcces {
- MGDroitAcces MGDroitAcces;
-}"
- [29]=>
- string(104) "struct MGDroitAcces {
- string IdProfil;
- boolean Lecture;
- boolean Modification;
- boolean Suppression;
-}"
- [30]=>
- string(91) "struct GetDroitsObjetProtegeResponse {
- MGDroitsObjetProtege GetDroitsObjetProtegeResult;
-}"
- [31]=>
- string(76) "struct GetPrivileges {
- string iIdSupport;
- int iIdForme;
- string iProfil;
-}"
- [32]=>
- string(68) "struct GetPrivilegesResponse {
- ArrayOfString GetPrivilegesResult;
-}"
- [33]=>
- string(46) "struct GetLibelleProfil {
- string iIdProfil;
-}"
- [34]=>
- string(67) "struct GetLibelleProfilResponse {
- string GetLibelleProfilResult;
-}"
- [35]=>
- string(91) "struct GetValeurRecherche {
- string iChampSource;
- string iTable;
- string iOrderByClause;
-}"
- [36]=>
- string(78) "struct GetValeurRechercheResponse {
- ArrayOfString GetValeurRechercheResult;
-}"
- [37]=>
- string(128) "struct GetValeurRechercheWithClauseWhere {
- string iChampSource;
- string iTable;
- string iClauseWhere;
- string iOrderByClause;
-}"
- [38]=>
- string(108) "struct GetValeurRechercheWithClauseWhereResponse {
- ArrayOfString GetValeurRechercheWithClauseWhereResult;
-}"
- [39]=>
- string(27) "struct GetEnvironnement {
-}"
- [40]=>
- string(106) "struct MGEnvironnement {
- string RepBureautique;
- string RepBureautiqueImage;
- string RepBureautiqueDoc;
-}"
- [41]=>
- string(76) "struct GetEnvironnementResponse {
- MGEnvironnement GetEnvironnementResult;
-}"
-} \ No newline at end of file
diff --git a/ext/soap/tests/bugs/bug28985.wsdl b/ext/soap/tests/bugs/bug28985.wsdl
deleted file mode 100644
index ee528818bb..0000000000
--- a/ext/soap/tests/bugs/bug28985.wsdl
+++ /dev/null
@@ -1,683 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<definitions xmlns:http="http://schemas.xmlsoap.org/wsdl/http/"
-xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
-xmlns:s="http://www.w3.org/2001/XMLSchema"
-xmlns:s0="http://tempuri.org/"
-xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
-xmlns:tm="http://microsoft.com/wsdl/mime/textMatching/"
-xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/"
-targetNamespace="http://tempuri.org/"
-xmlns="http://schemas.xmlsoap.org/wsdl/">
- <types>
- <s:schema elementFormDefault="qualified"
-targetNamespace="http://tempuri.org/">
- <s:element name="LoginMGDIS">
- <s:complexType>
- <s:sequence>
- <s:element minOccurs="0" maxOccurs="1" name="iUserLogin"
-type="s:string" />
- <s:element minOccurs="0" maxOccurs="1" name="iUserId"
-type="s:string" />
- <s:element minOccurs="0" maxOccurs="1" name="iUserPassword"
-type="s:string" />
- <s:element minOccurs="0" maxOccurs="1" name="iProfilId"
-type="s:string" />
- </s:sequence>
- </s:complexType>
- </s:element>
- <s:element name="LoginMGDISResponse">
- <s:complexType />
- </s:element>
- <s:element name="GetIdentification">
- <s:complexType />
- </s:element>
- <s:element name="GetIdentificationResponse">
- <s:complexType>
- <s:sequence>
- <s:element minOccurs="0" maxOccurs="1"
-name="GetIdentificationResult" type="s0:ArrayOfAnyType" />
- </s:sequence>
- </s:complexType>
- </s:element>
- <s:complexType name="ArrayOfAnyType">
- <s:sequence>
- <s:element minOccurs="0" maxOccurs="unbounded" name="anyType"
-nillable="true" />
- </s:sequence>
- </s:complexType>
- <s:element name="RollbackCurrentTransaction">
- <s:complexType />
- </s:element>
- <s:element name="RollbackCurrentTransactionResponse">
- <s:complexType />
- </s:element>
- <s:element name="GetListeProfil">
- <s:complexType>
- <s:sequence>
- <s:element minOccurs="0" maxOccurs="1" name="iUserLogin"
-type="s:string" />
- <s:element minOccurs="0" maxOccurs="1" name="iUserPassword"
-type="s:string" />
- </s:sequence>
- </s:complexType>
- </s:element>
- <s:complexType name="MGCodeLibelle">
- <s:sequence>
- <s:element minOccurs="0" maxOccurs="1" name="Code"
-type="s:string" />
- <s:element minOccurs="0" maxOccurs="1" name="Libelle"
-type="s:string" />
- <s:element minOccurs="1" maxOccurs="1" name="Defaut"
-type="s:boolean" />
- <s:element minOccurs="0" maxOccurs="1" name="Tag" />
- </s:sequence>
- </s:complexType>
- <s:complexType name="ArrayOfMGCodeLibelle">
- <s:sequence>
- <s:element minOccurs="0" maxOccurs="unbounded"
-name="MGCodeLibelle" nillable="true" type="s0:MGCodeLibelle" />
- </s:sequence>
- </s:complexType>
- <s:element name="GetListeProfilResponse">
- <s:complexType>
- <s:sequence>
- <s:element minOccurs="0" maxOccurs="1"
-name="GetListeProfilResult" type="s0:ArrayOfMGCodeLibelle" />
- </s:sequence>
- </s:complexType>
- </s:element>
- <s:element name="GetListeValCodif">
- <s:complexType>
- <s:sequence>
- <s:element minOccurs="0" maxOccurs="1" name="Code"
-type="s:string" />
- </s:sequence>
- </s:complexType>
- </s:element>
- <s:complexType name="ArrayOfMGCodif">
- <s:sequence>
- <s:element minOccurs="0" maxOccurs="unbounded" name="MGCodif"
-nillable="true" type="s0:MGCodif" />
- </s:sequence>
- </s:complexType>
- <s:complexType name="MGCodif">
- <s:complexContent mixed="false">
- <s:extension base="s0:MGCodeLibelle" />
- </s:complexContent>
- </s:complexType>
- <s:element name="GetListeValCodifResponse">
- <s:complexType>
- <s:sequence>
- <s:element minOccurs="0" maxOccurs="1"
-name="GetListeValCodifResult" type="s0:ArrayOfMGCodif" />
- </s:sequence>
- </s:complexType>
- </s:element>
- <s:element name="TestPhpSoap">
- <s:complexType>
- <s:sequence>
- <s:element minOccurs="0" maxOccurs="1" name="entree"
-type="s0:MGCodif" />
- </s:sequence>
- </s:complexType>
- </s:element>
- <s:element name="TestPhpSoapResponse">
- <s:complexType>
- <s:sequence>
- <s:element minOccurs="0" maxOccurs="1"
-name="TestPhpSoapResult" type="s:string" />
- </s:sequence>
- </s:complexType>
- </s:element>
- <s:element name="GetListeCodif">
- <s:complexType>
- <s:sequence>
- <s:element minOccurs="1" maxOccurs="1"
-name="iGetListeValeur" type="s:boolean" />
- </s:sequence>
- </s:complexType>
- </s:element>
- <s:complexType name="MGCodifGrp">
- <s:sequence>
- <s:element minOccurs="0" maxOccurs="1" name="TypeCodif"
-type="s:string" />
- <s:element minOccurs="0" maxOccurs="1" name="LibCodif"
-type="s:string" />
- <s:element minOccurs="0" maxOccurs="1" name="ListeCodifs"
-type="s0:ArrayOfMGCodif" />
- </s:sequence>
- </s:complexType>
- <s:complexType name="ArrayOfMGCodifGrp">
- <s:sequence>
- <s:element minOccurs="0" maxOccurs="unbounded"
-name="MGCodifGrp" nillable="true" type="s0:MGCodifGrp" />
- </s:sequence>
- </s:complexType>
- <s:element name="GetListeCodifResponse">
- <s:complexType>
- <s:sequence>
- <s:element minOccurs="0" maxOccurs="1"
-name="GetListeCodifResult" type="s0:ArrayOfMGCodifGrp" />
- </s:sequence>
- </s:complexType>
- </s:element>
- <s:element name="DroitCreation">
- <s:complexType>
- <s:sequence>
- <s:element minOccurs="0" maxOccurs="1" name="iObjet"
-type="s:string" />
- <s:element minOccurs="0" maxOccurs="1" name="iProfil"
-type="s:string" />
- </s:sequence>
- </s:complexType>
- </s:element>
- <s:element name="DroitCreationResponse">
- <s:complexType>
- <s:sequence>
- <s:element minOccurs="1" maxOccurs="1"
-name="DroitCreationResult" type="s:boolean" />
- </s:sequence>
- </s:complexType>
- </s:element>
- <s:element name="ListeDroitCreation">
- <s:complexType>
- <s:sequence>
- <s:element minOccurs="0" maxOccurs="1" name="iListeObjet"
-type="s0:ArrayOfString" />
- <s:element minOccurs="0" maxOccurs="1" name="iProfil"
-type="s:string" />
- </s:sequence>
- </s:complexType>
- </s:element>
- <s:complexType name="ArrayOfString">
- <s:sequence>
- <s:element minOccurs="0" maxOccurs="unbounded" name="string"
-nillable="true" type="s:string" />
- </s:sequence>
- </s:complexType>
- <s:element name="ListeDroitCreationResponse">
- <s:complexType>
- <s:sequence>
- <s:element minOccurs="0" maxOccurs="1"
-name="ListeDroitCreationResult" type="s0:ArrayOfAnyType" />
- </s:sequence>
- </s:complexType>
- </s:element>
- <s:element name="GetDroitsObjetProtege">
- <s:complexType>
- <s:sequence>
- <s:element minOccurs="0" maxOccurs="1" name="iObjet"
-type="s:string" />
- <s:element minOccurs="0" maxOccurs="1" name="iProfil"
-type="s:string" />
- <s:element minOccurs="0" maxOccurs="1" name="iUtilisateur"
-type="s:string" />
- </s:sequence>
- </s:complexType>
- </s:element>
- <s:complexType name="MGDroitsObjetProtege">
- <s:sequence>
- <s:element minOccurs="0" maxOccurs="1" name="LbUti"
-type="s:string" />
- <s:element minOccurs="0" maxOccurs="1" name="LbProf"
-type="s:string" />
- <s:element minOccurs="0" maxOccurs="1" name="LbServ"
-type="s:string" />
- <s:element minOccurs="0" maxOccurs="1" name="LbDir"
-type="s:string" />
- <s:element minOccurs="1" maxOccurs="1" name="isProtected"
-type="s:boolean" />
- <s:element minOccurs="0" maxOccurs="1" name="ListeDroitsAcces"
-type="s0:ArrayOfMGDroitAcces" />
- </s:sequence>
- </s:complexType>
- <s:complexType name="ArrayOfMGDroitAcces">
- <s:sequence>
- <s:element minOccurs="0" maxOccurs="unbounded"
-name="MGDroitAcces" nillable="true" type="s0:MGDroitAcces" />
- </s:sequence>
- </s:complexType>
- <s:complexType name="MGDroitAcces">
- <s:sequence>
- <s:element minOccurs="0" maxOccurs="1" name="IdProfil"
-type="s:string" />
- <s:element minOccurs="1" maxOccurs="1" name="Lecture"
-type="s:boolean" />
- <s:element minOccurs="1" maxOccurs="1" name="Modification"
-type="s:boolean" />
- <s:element minOccurs="1" maxOccurs="1" name="Suppression"
-type="s:boolean" />
- </s:sequence>
- </s:complexType>
- <s:element name="GetDroitsObjetProtegeResponse">
- <s:complexType>
- <s:sequence>
- <s:element minOccurs="0" maxOccurs="1"
-name="GetDroitsObjetProtegeResult" type="s0:MGDroitsObjetProtege" />
- </s:sequence>
- </s:complexType>
- </s:element>
- <s:element name="GetPrivileges">
- <s:complexType>
- <s:sequence>
- <s:element minOccurs="0" maxOccurs="1" name="iIdSupport"
-type="s:string" />
- <s:element minOccurs="1" maxOccurs="1" name="iIdForme"
-type="s:int" />
- <s:element minOccurs="0" maxOccurs="1" name="iProfil"
-type="s:string" />
- </s:sequence>
- </s:complexType>
- </s:element>
- <s:element name="GetPrivilegesResponse">
- <s:complexType>
- <s:sequence>
- <s:element minOccurs="0" maxOccurs="1"
-name="GetPrivilegesResult" type="s0:ArrayOfString" />
- </s:sequence>
- </s:complexType>
- </s:element>
- <s:element name="GetLibelleProfil">
- <s:complexType>
- <s:sequence>
- <s:element minOccurs="0" maxOccurs="1" name="iIdProfil"
-type="s:string" />
- </s:sequence>
- </s:complexType>
- </s:element>
- <s:element name="GetLibelleProfilResponse">
- <s:complexType>
- <s:sequence>
- <s:element minOccurs="0" maxOccurs="1"
-name="GetLibelleProfilResult" type="s:string" />
- </s:sequence>
- </s:complexType>
- </s:element>
- <s:element name="GetValeurRecherche">
- <s:complexType>
- <s:sequence>
- <s:element minOccurs="0" maxOccurs="1" name="iChampSource"
-type="s:string" />
- <s:element minOccurs="0" maxOccurs="1" name="iTable"
-type="s:string" />
- <s:element minOccurs="0" maxOccurs="1" name="iOrderByClause"
-type="s:string" />
- </s:sequence>
- </s:complexType>
- </s:element>
- <s:element name="GetValeurRechercheResponse">
- <s:complexType>
- <s:sequence>
- <s:element minOccurs="0" maxOccurs="1"
-name="GetValeurRechercheResult" type="s0:ArrayOfString" />
- </s:sequence>
- </s:complexType>
- </s:element>
- <s:element name="GetValeurRechercheWithClauseWhere">
- <s:complexType>
- <s:sequence>
- <s:element minOccurs="0" maxOccurs="1" name="iChampSource"
-type="s:string" />
- <s:element minOccurs="0" maxOccurs="1" name="iTable"
-type="s:string" />
- <s:element minOccurs="0" maxOccurs="1" name="iClauseWhere"
-type="s:string" />
- <s:element minOccurs="0" maxOccurs="1" name="iOrderByClause"
-type="s:string" />
- </s:sequence>
- </s:complexType>
- </s:element>
- <s:element name="GetValeurRechercheWithClauseWhereResponse">
- <s:complexType>
- <s:sequence>
- <s:element minOccurs="0" maxOccurs="1"
-name="GetValeurRechercheWithClauseWhereResult" type="s0:ArrayOfString"
-/>
- </s:sequence>
- </s:complexType>
- </s:element>
- <s:element name="GetEnvironnement">
- <s:complexType />
- </s:element>
- <s:complexType name="MGEnvironnement">
- <s:sequence>
- <s:element minOccurs="0" maxOccurs="1" name="RepBureautique"
-type="s:string" />
- <s:element minOccurs="0" maxOccurs="1"
-name="RepBureautiqueImage" type="s:string" />
- <s:element minOccurs="0" maxOccurs="1"
-name="RepBureautiqueDoc" type="s:string" />
- </s:sequence>
- </s:complexType>
- <s:element name="GetEnvironnementResponse">
- <s:complexType>
- <s:sequence>
- <s:element minOccurs="0" maxOccurs="1"
-name="GetEnvironnementResult" type="s0:MGEnvironnement" />
- </s:sequence>
- </s:complexType>
- </s:element>
- </s:schema>
- </types>
- <message name="LoginMGDISSoapIn">
- <part name="parameters" element="s0:LoginMGDIS" />
- </message>
- <message name="LoginMGDISSoapOut">
- <part name="parameters" element="s0:LoginMGDISResponse" />
- </message>
- <message name="GetIdentificationSoapIn">
- <part name="parameters" element="s0:GetIdentification" />
- </message>
- <message name="GetIdentificationSoapOut">
- <part name="parameters" element="s0:GetIdentificationResponse" />
- </message>
- <message name="RollbackCurrentTransactionSoapIn">
- <part name="parameters" element="s0:RollbackCurrentTransaction" />
- </message>
- <message name="RollbackCurrentTransactionSoapOut">
- <part name="parameters"
-element="s0:RollbackCurrentTransactionResponse" />
- </message>
- <message name="GetListeProfilSoapIn">
- <part name="parameters" element="s0:GetListeProfil" />
- </message>
- <message name="GetListeProfilSoapOut">
- <part name="parameters" element="s0:GetListeProfilResponse" />
- </message>
- <message name="GetListeValCodifSoapIn">
- <part name="parameters" element="s0:GetListeValCodif" />
- </message>
- <message name="GetListeValCodifSoapOut">
- <part name="parameters" element="s0:GetListeValCodifResponse" />
- </message>
- <message name="TestPhpSoapSoapIn">
- <part name="parameters" element="s0:TestPhpSoap" />
- </message>
- <message name="TestPhpSoapSoapOut">
- <part name="parameters" element="s0:TestPhpSoapResponse" />
- </message>
- <message name="GetListeCodifSoapIn">
- <part name="parameters" element="s0:GetListeCodif" />
- </message>
- <message name="GetListeCodifSoapOut">
- <part name="parameters" element="s0:GetListeCodifResponse" />
- </message>
- <message name="DroitCreationSoapIn">
- <part name="parameters" element="s0:DroitCreation" />
- </message>
- <message name="DroitCreationSoapOut">
- <part name="parameters" element="s0:DroitCreationResponse" />
- </message>
- <message name="ListeDroitCreationSoapIn">
- <part name="parameters" element="s0:ListeDroitCreation" />
- </message>
- <message name="ListeDroitCreationSoapOut">
- <part name="parameters" element="s0:ListeDroitCreationResponse" />
- </message>
- <message name="GetDroitsObjetProtegeSoapIn">
- <part name="parameters" element="s0:GetDroitsObjetProtege" />
- </message>
- <message name="GetDroitsObjetProtegeSoapOut">
- <part name="parameters" element="s0:GetDroitsObjetProtegeResponse"
-/>
- </message>
- <message name="GetPrivilegesSoapIn">
- <part name="parameters" element="s0:GetPrivileges" />
- </message>
- <message name="GetPrivilegesSoapOut">
- <part name="parameters" element="s0:GetPrivilegesResponse" />
- </message>
- <message name="GetLibelleProfilSoapIn">
- <part name="parameters" element="s0:GetLibelleProfil" />
- </message>
- <message name="GetLibelleProfilSoapOut">
- <part name="parameters" element="s0:GetLibelleProfilResponse" />
- </message>
- <message name="GetValeurRechercheSoapIn">
- <part name="parameters" element="s0:GetValeurRecherche" />
- </message>
- <message name="GetValeurRechercheSoapOut">
- <part name="parameters" element="s0:GetValeurRechercheResponse" />
- </message>
- <message name="GetValeurRechercheWithClauseWhereSoapIn">
- <part name="parameters"
-element="s0:GetValeurRechercheWithClauseWhere" />
- </message>
- <message name="GetValeurRechercheWithClauseWhereSoapOut">
- <part name="parameters"
-element="s0:GetValeurRechercheWithClauseWhereResponse" />
- </message>
- <message name="GetEnvironnementSoapIn">
- <part name="parameters" element="s0:GetEnvironnement" />
- </message>
- <message name="GetEnvironnementSoapOut">
- <part name="parameters" element="s0:GetEnvironnementResponse" />
- </message>
- <portType name="MGServiceNoyauNETSoap">
- <operation name="LoginMGDIS">
- <input message="s0:LoginMGDISSoapIn" />
- <output message="s0:LoginMGDISSoapOut" />
- </operation>
- <operation name="GetIdentification">
- <input message="s0:GetIdentificationSoapIn" />
- <output message="s0:GetIdentificationSoapOut" />
- </operation>
- <operation name="RollbackCurrentTransaction">
- <input message="s0:RollbackCurrentTransactionSoapIn" />
- <output message="s0:RollbackCurrentTransactionSoapOut" />
- </operation>
- <operation name="GetListeProfil">
- <input message="s0:GetListeProfilSoapIn" />
- <output message="s0:GetListeProfilSoapOut" />
- </operation>
- <operation name="GetListeValCodif">
- <input message="s0:GetListeValCodifSoapIn" />
- <output message="s0:GetListeValCodifSoapOut" />
- </operation>
- <operation name="TestPhpSoap">
- <input message="s0:TestPhpSoapSoapIn" />
- <output message="s0:TestPhpSoapSoapOut" />
- </operation>
- <operation name="GetListeCodif">
- <input message="s0:GetListeCodifSoapIn" />
- <output message="s0:GetListeCodifSoapOut" />
- </operation>
- <operation name="DroitCreation">
- <input message="s0:DroitCreationSoapIn" />
- <output message="s0:DroitCreationSoapOut" />
- </operation>
- <operation name="ListeDroitCreation">
- <input message="s0:ListeDroitCreationSoapIn" />
- <output message="s0:ListeDroitCreationSoapOut" />
- </operation>
- <operation name="GetDroitsObjetProtege">
- <input message="s0:GetDroitsObjetProtegeSoapIn" />
- <output message="s0:GetDroitsObjetProtegeSoapOut" />
- </operation>
- <operation name="GetPrivileges">
- <input message="s0:GetPrivilegesSoapIn" />
- <output message="s0:GetPrivilegesSoapOut" />
- </operation>
- <operation name="GetLibelleProfil">
- <input message="s0:GetLibelleProfilSoapIn" />
- <output message="s0:GetLibelleProfilSoapOut" />
- </operation>
- <operation name="GetValeurRecherche">
- <input message="s0:GetValeurRechercheSoapIn" />
- <output message="s0:GetValeurRechercheSoapOut" />
- </operation>
- <operation name="GetValeurRechercheWithClauseWhere">
- <input message="s0:GetValeurRechercheWithClauseWhereSoapIn" />
- <output message="s0:GetValeurRechercheWithClauseWhereSoapOut" />
- </operation>
- <operation name="GetEnvironnement">
- <input message="s0:GetEnvironnementSoapIn" />
- <output message="s0:GetEnvironnementSoapOut" />
- </operation>
- </portType>
- <binding name="MGServiceNoyauNETSoap"
-type="s0:MGServiceNoyauNETSoap">
- <soap:binding transport="http://schemas.xmlsoap.org/soap/http"
-style="document" />
- <operation name="LoginMGDIS">
- <soap:operation soapAction="http://tempuri.org/LoginMGDIS"
-style="document" />
- <input>
- <soap:body use="literal" />
- </input>
- <output>
- <soap:body use="literal" />
- </output>
- </operation>
- <operation name="GetIdentification">
- <soap:operation soapAction="http://tempuri.org/GetIdentification"
-style="document" />
- <input>
- <soap:body use="literal" />
- </input>
- <output>
- <soap:body use="literal" />
- </output>
- </operation>
- <operation name="RollbackCurrentTransaction">
- <soap:operation
-soapAction="http://tempuri.org/RollbackCurrentTransaction"
-style="document" />
- <input>
- <soap:body use="literal" />
- </input>
- <output>
- <soap:body use="literal" />
- </output>
- </operation>
- <operation name="GetListeProfil">
- <soap:operation soapAction="http://tempuri.org/GetListeProfil"
-style="document" />
- <input>
- <soap:body use="literal" />
- </input>
- <output>
- <soap:body use="literal" />
- </output>
- </operation>
- <operation name="GetListeValCodif">
- <soap:operation soapAction="http://tempuri.org/GetListeValCodif"
-style="document" />
- <input>
- <soap:body use="literal" />
- </input>
- <output>
- <soap:body use="literal" />
- </output>
- </operation>
- <operation name="TestPhpSoap">
- <soap:operation soapAction="http://tempuri.org/TestPhpSoap"
-style="document" />
- <input>
- <soap:body use="literal" />
- </input>
- <output>
- <soap:body use="literal" />
- </output>
- </operation>
- <operation name="GetListeCodif">
- <soap:operation soapAction="http://tempuri.org/GetListeCodif"
-style="document" />
- <input>
- <soap:body use="literal" />
- </input>
- <output>
- <soap:body use="literal" />
- </output>
- </operation>
- <operation name="DroitCreation">
- <soap:operation soapAction="http://tempuri.org/DroitCreation"
-style="document" />
- <input>
- <soap:body use="literal" />
- </input>
- <output>
- <soap:body use="literal" />
- </output>
- </operation>
- <operation name="ListeDroitCreation">
- <soap:operation soapAction="http://tempuri.org/ListeDroitCreation"
-style="document" />
- <input>
- <soap:body use="literal" />
- </input>
- <output>
- <soap:body use="literal" />
- </output>
- </operation>
- <operation name="GetDroitsObjetProtege">
- <soap:operation
-soapAction="http://tempuri.org/GetDroitsObjetProtege" style="document"
-/>
- <input>
- <soap:body use="literal" />
- </input>
- <output>
- <soap:body use="literal" />
- </output>
- </operation>
- <operation name="GetPrivileges">
- <soap:operation soapAction="http://tempuri.org/GetPrivileges"
-style="document" />
- <input>
- <soap:body use="literal" />
- </input>
- <output>
- <soap:body use="literal" />
- </output>
- </operation>
- <operation name="GetLibelleProfil">
- <soap:operation soapAction="http://tempuri.org/GetLibelleProfil"
-style="document" />
- <input>
- <soap:body use="literal" />
- </input>
- <output>
- <soap:body use="literal" />
- </output>
- </operation>
- <operation name="GetValeurRecherche">
- <soap:operation soapAction="http://tempuri.org/GetValeurRecherche"
-style="document" />
- <input>
- <soap:body use="literal" />
- </input>
- <output>
- <soap:body use="literal" />
- </output>
- </operation>
- <operation name="GetValeurRechercheWithClauseWhere">
- <soap:operation
-soapAction="http://tempuri.org/GetValeurRechercheWithClauseWhere"
-style="document" />
- <input>
- <soap:body use="literal" />
- </input>
- <output>
- <soap:body use="literal" />
- </output>
- </operation>
- <operation name="GetEnvironnement">
- <soap:operation soapAction="http://tempuri.org/GetEnvironnement"
-style="document" />
- <input>
- <soap:body use="literal" />
- </input>
- <output>
- <soap:body use="literal" />
- </output>
- </operation>
- </binding>
- <service name="MGServiceNoyauNET">
- <port name="MGServiceNoyauNETSoap"
-binding="s0:MGServiceNoyauNETSoap">
- <soap:address
-location="http://localhost/SoapSrvSOFI/MGServiceNoyauNET.asmx" />
- </port>
- </service>
-</definitions>
diff --git a/ext/soap/tests/bugs/bug29061.phpt b/ext/soap/tests/bugs/bug29061.phpt
deleted file mode 100644
index 0bf8917fa5..0000000000
--- a/ext/soap/tests/bugs/bug29061.phpt
+++ /dev/null
@@ -1,12 +0,0 @@
---TEST--
-Bug #29061 (soap extension segfaults)
---SKIPIF--
-<?php require_once('skipif.inc'); ?>
---FILE--
-<?php
-$client = new SoapClient(dirname(__FILE__)."/bug29061.wsdl", array("exceptions"=>0));
-$client->getQuote("ibm");
-echo "ok\n";
-?>
---EXPECT--
-ok \ No newline at end of file
diff --git a/ext/soap/tests/bugs/bug29061.wsdl b/ext/soap/tests/bugs/bug29061.wsdl
deleted file mode 100644
index fb4d9aa3b5..0000000000
--- a/ext/soap/tests/bugs/bug29061.wsdl
+++ /dev/null
@@ -1,41 +0,0 @@
-<definitions xmlns="http://schemas.xmlsoap.org/wsdl/"
-xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:http="http://
-schemas.xmlsoap.org/wsdl/http/"
-xmlns:xs="http://www.w3.org/2001/XMLSchema"
-xmlns:soapenc="http://schemas.xmlsoap.org/soap/e
-ncoding/" xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/"
-xmlns:y="http://new.webservice.namespace" targetNamespace="http
-://new.webservice.namespace">
-<types>
-<xs:schema/>
-</types>
-<message name="getQuoteResponse">
-<part name="parameter" element="" type="xs:string"/>
-</message>
-<message name="getQuoteRequest">
-<part name="String" element="" type="xs:string"/>
-</message>
-<portType name="SOAPport">
-<operation name="getQuote">
-<input message="y:getQuoteRequest"/>
-<output message="y:getQuoteResponse"/>
-</operation>
-</portType>
-<binding name="bindingName" type="y:SOAPport">
-<soap:binding style="rpc"
-transport="http://schemas.xmlsoap.org/soap/http"/>
-<operation name="getQuote">
-<input>
-<soap:body use="literal"/>
-</input>
-<output>
-<soap:body use="literal"/>
-</output>
-</operation>
-</binding>
-<service name="myService">
-<port name="myPort" binding="y:bindingName">
-<soap:address location="test://"/>
-</port>
-</service>
-</definitions>
diff --git a/ext/soap/tests/bugs/bug29109.phpt b/ext/soap/tests/bugs/bug29109.phpt
deleted file mode 100644
index 91d3ea265f..0000000000
--- a/ext/soap/tests/bugs/bug29109.phpt
+++ /dev/null
@@ -1,18 +0,0 @@
---TEST--
-Bug #29109 (Uncaught SoapFault exception: [WSDL] Out of memory)
---SKIPIF--
-<?php require_once('skipif.inc'); ?>
---FILE--
-<?php
-$client = new SoapClient(dirname(__FILE__)."/bug29109.wsdl");
-var_dump($client->__getFunctions());
-?>
---EXPECT--
-array(3) {
- [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/bug29109.wsdl b/ext/soap/tests/bugs/bug29109.wsdl
deleted file mode 100644
index 800cd2357d..0000000000
--- a/ext/soap/tests/bugs/bug29109.wsdl
+++ /dev/null
@@ -1,121 +0,0 @@
-<?xml version="1.0" encoding="windows-1257"?>
-<definitions xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/"
-xmlns:s0="http://tempuri.org/"
-xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
-xmlns:s="http://www.w3.org/2001/XMLSchema"
-xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
-xmlns:tm="http://microsoft.com/wsdl/mime/textMatching/"
-xmlns:http="http://schemas.xmlsoap.org/wsdl/http/" name="test"
-targetNamespace="http://tempuri.org/"
-xmlns="http://schemas.xmlsoap.org/wsdl/">
- <types>
- <xs:schema elementFormDefault="qualified"
-targetNamespace="http://tempuri.org/"
-xmlns:xs="http://www.w3.org/2001/XMLSchema">
- <xs:element name="HelloWorld">
- <xs:complexType />
- </xs:element>
- <xs:element name="HelloWorldResponse">
- <xs:complexType>
- <xs:sequence>
-
- <xs:element minOccurs="0" maxOccurs="1"
-name="HelloWorldResult" type="xs:string" />
- </xs:sequence>
- </xs:complexType>
- </xs:element>
- <xs:element name="string" type="xs:string" />
- </xs:schema>
- </types>
- <message name="HelloWorldSoapIn">
- <part name="parameters" element="s0:HelloWorld" />
-
- </message>
- <message name="HelloWorldSoapOut">
- <part name="parameters" element="s0:HelloWorldResponse" />
- </message>
- <message name="HelloWorldHttpGetIn" />
- <message name="HelloWorldHttpGetOut">
- <part name="Body" element="s0:string" />
- </message>
- <message name="HelloWorldHttpPostIn" />
-
- <message name="HelloWorldHttpPostOut">
- <part name="Body" element="s0:string" />
- </message>
- <portType name="testSoap">
- <operation name="HelloWorld">
- <input message="s0:HelloWorldSoapIn" />
- <output message="s0:HelloWorldSoapOut" />
- </operation>
- </portType>
-
- <portType name="testHttpGet">
- <operation name="HelloWorld">
- <input message="s0:HelloWorldHttpGetIn" />
- <output message="s0:HelloWorldHttpGetOut" />
- </operation>
- </portType>
- <portType name="testHttpPost">
- <operation name="HelloWorld">
- <input message="s0:HelloWorldHttpPostIn" />
-
- <output message="s0:HelloWorldHttpPostOut" />
- </operation>
- </portType>
- <binding name="testSoap" type="s0:testSoap">
- <soap:binding style="document"
-transport="http://schemas.xmlsoap.org/soap/http" />
- <operation name="HelloWorld">
- <soap:operation soapAction="http://tempuri.org/HelloWorld"
-style="document" />
- <input>
- <soap:body use="literal" />
-
- </input>
- <output>
- <soap:body use="literal" />
- </output>
- </operation>
- </binding>
- <binding name="testHttpGet" type="s0:testHttpGet">
- <http:binding verb="GET" />
- <operation name="HelloWorld">
-
- <http:operation location="/HelloWorld" />
- <input>
- <http:urlEncoded />
- </input>
- <output>
- <mime:mimeXml part="Body" />
- </output>
- </operation>
- </binding>
-
- <binding name="testHttpPost" type="s0:testHttpPost">
- <http:binding verb="POST" />
- <operation name="HelloWorld">
- <http:operation location="/HelloWorld" />
- <input>
- <mime:content part="" type="application/x-www-form-urlencoded"
-/>
- </input>
- <output>
- <mime:mimeXml part="Body" />
-
- </output>
- </operation>
- </binding>
- <service name="test">
- <port name="testSoap" binding="s0:testSoap">
- <soap:address location="http://localhost:81/test.asmx" />
- </port>
- <port name="testHttpGet" binding="s0:testHttpGet">
- <http:address location="http://localhost:81/test.asmx" />
-
- </port>
- <port name="testHttpPost" binding="s0:testHttpPost">
- <http:address location="http://localhost:81/test.asmx" />
- </port>
- </service>
-</definitions>
diff --git a/ext/soap/tests/bugs/bug29236.phpt b/ext/soap/tests/bugs/bug29236.phpt
deleted file mode 100644
index 372449fbb2..0000000000
--- a/ext/soap/tests/bugs/bug29236.phpt
+++ /dev/null
@@ -1,20 +0,0 @@
---TEST--
-Bug #29236 (memory error when wsdl-cache is enabled)
---SKIPIF--
-<?php require_once('skipif.inc'); ?>
---FILE--
-<?
-$client = new SoapClient(dirname(__FILE__)."/bug29236.wsdl");
-var_dump($client->__getFunctions());
-?>
---EXPECT--
-array(4) {
- [0]=>
- string(59) "StartSessionResponse StartSession(StartSession $parameters)"
- [1]=>
- string(62) "VerifySessionResponse VerifySession(VerifySession $parameters)"
- [2]=>
- string(41) "LogoutResponse Logout(Logout $parameters)"
- [3]=>
- string(62) "GetSystemInfoResponse GetSystemInfo(GetSystemInfo $parameters)"
-} \ No newline at end of file
diff --git a/ext/soap/tests/bugs/bug29236.wsdl b/ext/soap/tests/bugs/bug29236.wsdl
deleted file mode 100644
index d60a4871d4..0000000000
--- a/ext/soap/tests/bugs/bug29236.wsdl
+++ /dev/null
@@ -1,287 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<definitions xmlns:http="http://schemas.xmlsoap.org/wsdl/http/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:s="http://www.w3.org/2001/XMLSchema" xmlns:s0="http://isis.ais.ucla.edu/ws/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:tm="http://microsoft.com/wsdl/mime/textMatching/" xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/" targetNamespace="http://isis.ais.ucla.edu/ws/" xmlns="http://schemas.xmlsoap.org/wsdl/">
- <types>
- <s:schema elementFormDefault="qualified" targetNamespace="http://isis.ais.ucla.edu/ws/">
- <s:element name="StartSession">
- <s:complexType>
- <s:sequence>
- <s:element minOccurs="0" maxOccurs="1" name="uclaId" type="s:string" />
- <s:element minOccurs="0" maxOccurs="1" name="userIpAddr" type="s:string" />
- </s:sequence>
- </s:complexType>
- </s:element>
- <s:element name="StartSessionResponse">
- <s:complexType>
- <s:sequence>
- <s:element minOccurs="1" maxOccurs="1" name="iwsResponse" nillable="true" type="s0:IwsResponse" />
- </s:sequence>
- </s:complexType>
- </s:element>
- <s:complexType name="IwsResponse">
- <s:sequence>
- <s:element minOccurs="1" maxOccurs="1" name="sessionInfo" nillable="true" type="s0:IwsSession" />
- <s:element minOccurs="1" maxOccurs="1" name="errorInfo" nillable="true" type="s0:IwsErrorCollection" />
- </s:sequence>
- <s:attribute name="action" type="s0:ActionEnum" />
- <s:attribute name="hasErrors" type="s:boolean" />
- <s:attribute name="transactionId" type="s:long" />
- </s:complexType>
- <s:complexType name="IwsSession">
- <s:sequence>
- <s:element minOccurs="0" maxOccurs="1" name="userAttributes" type="s0:ArrayOfIwsUserAttribute" />
- <s:element minOccurs="0" maxOccurs="1" name="accounts" type="s0:ArrayOfIwsAccount" />
- <s:element minOccurs="1" maxOccurs="1" name="ticket" nillable="true" type="s:string" />
- <s:element minOccurs="1" maxOccurs="1" name="uclaId" nillable="true" type="s:string" />
- </s:sequence>
- <s:attribute name="status" type="s0:SessionStatus" />
- </s:complexType>
- <s:complexType name="ArrayOfIwsUserAttribute">
- <s:sequence>
- <s:element minOccurs="0" maxOccurs="unbounded" name="attribute" type="s0:IwsUserAttribute" />
- </s:sequence>
- </s:complexType>
- <s:complexType name="IwsUserAttribute">
- <s:attribute name="name" type="s:string" />
- <s:attribute name="value" type="s:string" />
- </s:complexType>
- <s:complexType name="ArrayOfIwsAccount">
- <s:sequence>
- <s:element minOccurs="0" maxOccurs="unbounded" name="account" type="s0:IwsAccount" />
- </s:sequence>
- </s:complexType>
- <s:complexType name="IwsAccount">
- <s:attribute name="loginId" type="s:string" />
- <s:attribute name="type" type="s0:LoginType" />
- <s:attribute name="status" type="s0:AccountStatus" />
- </s:complexType>
- <s:simpleType name="LoginType">
- <s:restriction base="s:string">
- <s:enumeration value="BruinOnline" />
- <s:enumeration value="ACF2" />
- <s:enumeration value="QDB" />
- <s:enumeration value="UID" />
- <s:enumeration value="CommonLogon" />
- <s:enumeration value="RACF" />
- </s:restriction>
- </s:simpleType>
- <s:simpleType name="AccountStatus">
- <s:restriction base="s:string">
- <s:enumeration value="Unknown" />
- <s:enumeration value="Active" />
- <s:enumeration value="Authenticated" />
- <s:enumeration value="AuthenticatedWithCachedCredential" />
- <s:enumeration value="NotAuthenticated" />
- <s:enumeration value="PermmanentlySuspended" />
- <s:enumeration value="TemporarilySuspended" />
- <s:enumeration value="PasswordResetRequired" />
- <s:enumeration value="InvalidID" />
- </s:restriction>
- </s:simpleType>
- <s:simpleType name="SessionStatus">
- <s:restriction base="s:string">
- <s:enumeration value="Uninitialized" />
- <s:enumeration value="Active" />
- <s:enumeration value="ActiveWithCachedCredential" />
- <s:enumeration value="ActiveWithMultipleCredentials" />
- <s:enumeration value="Expired" />
- </s:restriction>
- </s:simpleType>
- <s:complexType name="IwsErrorCollection">
- <s:sequence>
- <s:element minOccurs="0" maxOccurs="1" name="errors" type="s0:ArrayOfIwsError" />
- </s:sequence>
- <s:attribute name="count" type="s:int" />
- </s:complexType>
- <s:complexType name="ArrayOfIwsError">
- <s:sequence>
- <s:element minOccurs="0" maxOccurs="unbounded" name="error" type="s0:IwsError" />
- </s:sequence>
- </s:complexType>
- <s:complexType name="IwsError">
- <s:attribute name="errorCode" type="s:int" />
- <s:attribute name="detail" type="s:string" />
- </s:complexType>
- <s:simpleType name="ActionEnum">
- <s:restriction base="s:string">
- <s:enumeration value="GetInfo" />
- <s:enumeration value="Start" />
- <s:enumeration value="Verify" />
- <s:enumeration value="Logout" />
- </s:restriction>
- </s:simpleType>
- <s:element name="wsConsumerCredential" type="s0:WsConsumerCredential" />
- <s:complexType name="WsConsumerCredential">
- <s:sequence>
- <s:element minOccurs="0" maxOccurs="1" name="id" type="s:string" />
- <s:element minOccurs="0" maxOccurs="1" name="password" type="s:string" />
- </s:sequence>
- </s:complexType>
- <s:element name="VerifySession">
- <s:complexType>
- <s:sequence>
- <s:element minOccurs="0" maxOccurs="1" name="ticket" type="s:string" />
- <s:element minOccurs="0" maxOccurs="1" name="userIpAddr" type="s:string" />
- <s:element minOccurs="1" maxOccurs="1" name="returnExtendedAttributes" type="s:boolean" />
- </s:sequence>
- </s:complexType>
- </s:element>
- <s:element name="VerifySessionResponse">
- <s:complexType>
- <s:sequence>
- <s:element minOccurs="1" maxOccurs="1" name="iwsResponse" nillable="true" type="s0:IwsResponse" />
- </s:sequence>
- </s:complexType>
- </s:element>
- <s:element name="Logout">
- <s:complexType>
- <s:sequence>
- <s:element minOccurs="0" maxOccurs="1" name="ticket" type="s:string" />
- <s:element minOccurs="0" maxOccurs="1" name="userIpAddr" type="s:string" />
- </s:sequence>
- </s:complexType>
- </s:element>
- <s:element name="LogoutResponse">
- <s:complexType>
- <s:sequence>
- <s:element minOccurs="1" maxOccurs="1" name="iwsResponse" nillable="true" type="s0:IwsResponse" />
- </s:sequence>
- </s:complexType>
- </s:element>
- <s:element name="GetSystemInfo">
- <s:complexType />
- </s:element>
- <s:element name="GetSystemInfoResponse">
- <s:complexType>
- <s:sequence>
- <s:element minOccurs="0" maxOccurs="1" name="GetSystemInfoResult" type="s0:ArrayOfIwsAttribute" />
- </s:sequence>
- </s:complexType>
- </s:element>
- <s:complexType name="ArrayOfIwsAttribute">
- <s:sequence>
- <s:element minOccurs="0" maxOccurs="unbounded" name="IwsAttribute" type="s0:IwsAttribute" />
- </s:sequence>
- </s:complexType>
- <s:complexType name="IwsAttribute">
- <s:attribute name="name" type="s:string" />
- <s:attribute name="value" type="s:string" />
- </s:complexType>
- </s:schema>
- </types>
- <message name="StartSessionSoapIn">
- <part name="parameters" element="s0:StartSession" />
- </message>
- <message name="StartSessionSoapOut">
- <part name="parameters" element="s0:StartSessionResponse" />
- </message>
- <message name="StartSessionwsConsumerCredential">
- <part name="wsConsumerCredential" element="s0:wsConsumerCredential" />
- </message>
- <message name="VerifySessionSoapIn">
- <part name="parameters" element="s0:VerifySession" />
- </message>
- <message name="VerifySessionSoapOut">
- <part name="parameters" element="s0:VerifySessionResponse" />
- </message>
- <message name="VerifySessionwsConsumerCredential">
- <part name="wsConsumerCredential" element="s0:wsConsumerCredential" />
- </message>
- <message name="LogoutSoapIn">
- <part name="parameters" element="s0:Logout" />
- </message>
- <message name="LogoutSoapOut">
- <part name="parameters" element="s0:LogoutResponse" />
- </message>
- <message name="LogoutwsConsumerCredential">
- <part name="wsConsumerCredential" element="s0:wsConsumerCredential" />
- </message>
- <message name="GetSystemInfoSoapIn">
- <part name="parameters" element="s0:GetSystemInfo" />
- </message>
- <message name="GetSystemInfoSoapOut">
- <part name="parameters" element="s0:GetSystemInfoResponse" />
- </message>
- <message name="GetSystemInfowsConsumerCredential">
- <part name="wsConsumerCredential" element="s0:wsConsumerCredential" />
- </message>
- <portType name="IsisSoap">
- <operation name="StartSession">
- <input message="s0:StartSessionSoapIn" />
- <output message="s0:StartSessionSoapOut" />
- </operation>
- <operation name="VerifySession">
- <input message="s0:VerifySessionSoapIn" />
- <output message="s0:VerifySessionSoapOut" />
- </operation>
- <operation name="Logout">
- <input message="s0:LogoutSoapIn" />
- <output message="s0:LogoutSoapOut" />
- </operation>
- <operation name="GetSystemInfo">
- <input message="s0:GetSystemInfoSoapIn" />
- <output message="s0:GetSystemInfoSoapOut" />
- </operation>
- </portType>
- <portType name="IsisHttpGet" />
- <portType name="IsisHttpPost" />
- <binding name="IsisSoap" type="s0:IsisSoap">
- <soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document" />
- <operation name="StartSession">
- <soap:operation soapAction="http://isis.ais.ucla.edu/ws/StartSession" style="document" />
- <input>
- <soap:body use="literal" />
- <soap:header d5p1:required="true" message="s0:StartSessionwsConsumerCredential" part="wsConsumerCredential" use="literal" xmlns:d5p1="http://schemas.xmlsoap.org/wsdl/" />
- </input>
- <output>
- <soap:body use="literal" />
- </output>
- </operation>
- <operation name="VerifySession">
- <soap:operation soapAction="http://isis.ais.ucla.edu/ws/VerifySession" style="document" />
- <input>
- <soap:body use="literal" />
- <soap:header d5p1:required="true" message="s0:VerifySessionwsConsumerCredential" part="wsConsumerCredential" use="literal" xmlns:d5p1="http://schemas.xmlsoap.org/wsdl/" />
- </input>
- <output>
- <soap:body use="literal" />
- </output>
- </operation>
- <operation name="Logout">
- <soap:operation soapAction="http://isis.ais.ucla.edu/ws/Logout" style="document" />
- <input>
- <soap:body use="literal" />
- <soap:header d5p1:required="true" message="s0:LogoutwsConsumerCredential" part="wsConsumerCredential" use="literal" xmlns:d5p1="http://schemas.xmlsoap.org/wsdl/" />
- </input>
- <output>
- <soap:body use="literal" />
- </output>
- </operation>
- <operation name="GetSystemInfo">
- <soap:operation soapAction="http://isis.ais.ucla.edu/ws/GetSystemInfo" style="document" />
- <input>
- <soap:body use="literal" />
- <soap:header d5p1:required="true" message="s0:GetSystemInfowsConsumerCredential" part="wsConsumerCredential" use="literal" xmlns:d5p1="http://schemas.xmlsoap.org/wsdl/" />
- </input>
- <output>
- <soap:body use="literal" />
- </output>
- </operation>
- </binding>
- <binding name="IsisHttpGet" type="s0:IsisHttpGet">
- <http:binding verb="GET" />
- </binding>
- <binding name="IsisHttpPost" type="s0:IsisHttpPost">
- <http:binding verb="POST" />
- </binding>
- <service name="Isis">
- <port name="IsisSoap" binding="s0:IsisSoap">
- <soap:address location="http://isisdev1.tig.ucla.edu/iws/v4.asmx" />
- </port>
- <port name="IsisHttpGet" binding="s0:IsisHttpGet">
- <http:address location="http://isisdev1.tig.ucla.edu/iws/v4.asmx" />
- </port>
- <port name="IsisHttpPost" binding="s0:IsisHttpPost">
- <http:address location="http://isisdev1.tig.ucla.edu/iws/v4.asmx" />
- </port>
- </service>
-</definitions> \ No newline at end of file
diff --git a/ext/soap/tests/bugs/bug29795.phpt b/ext/soap/tests/bugs/bug29795.phpt
deleted file mode 100644
index f32d16a996..0000000000
--- a/ext/soap/tests/bugs/bug29795.phpt
+++ /dev/null
@@ -1,32 +0,0 @@
---TEST--
-Bug #29795 (SegFault with Soap and Amazon's Web Services)
---SKIPIF--
-<?php require_once('skipif.inc'); ?>
---FILE--
-<?php
-class LocalSoapClient extends SoapClient {
-
- function LocalSoapClient($wsdl, $options) {
- $this->SoapClient($wsdl, $options);
- }
-
- function __doRequest($request, $location, $action, $version) {
- return <<<EOF
-<?xml version="1.0" encoding="UTF-8"?><SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
-xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"
-xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-xmlns:xsd="http://www.w3.org/2001/XMLSchema"><SOAP-ENV:Body><Price><Amount>3995</Amount><CurrencyCode>USD</CurrencyCode></Price></SOAP-ENV:Body></SOAP-ENV:Envelope>
-EOF;
- }
-
-}
-
-$client = new LocalSoapClient(dirname(__FILE__)."/bug29795.wsdl",array("trace"=>1));
-$ar=$client->GetPrice();
-echo "o";
-$client = new LocalSoapClient(dirname(__FILE__)."/bug29795.wsdl",array("trace"=>1));
-$ar=$client->GetPrice();
-echo "k\n";
-?>
---EXPECT--
-ok
diff --git a/ext/soap/tests/bugs/bug29795.wsdl b/ext/soap/tests/bugs/bug29795.wsdl
deleted file mode 100644
index 5a4499da0d..0000000000
--- a/ext/soap/tests/bugs/bug29795.wsdl
+++ /dev/null
@@ -1,40 +0,0 @@
-<definitions xmlns="http://schemas.xmlsoap.org/wsdl/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:tns="http://xml.amazon.com/AWSProductData/2004-08-01" targetNamespace="http://xml.amazon.com/AWSProductData/2004-08-01">
- <types>
- <xs:schema targetNamespace="http://xml.amazon.com/AWSProductData/2004-08-01" elementFormDefault="qualified">
- <xs:complexType name="Price">
- <xs:sequence>
- <xs:element name="Amount" type="xs:integer" minOccurs="0"/>
- <xs:element name="CurrencyCode" type="xs:string" minOccurs="0"/>
- </xs:sequence>
- </xs:complexType>
- </xs:schema>
- </types>
- <message name="GetPriceRequest">
- </message>
- <message name="GetPriceResponse">
- <part name="Price" type="tns:Price"/>
- </message>
- <portType name="AWSProductDataPortType">
- <operation name="GetPrice">
- <input message="tns:GetPriceRequest"/>
- <output message="tns:GetPriceResponse"/>
- </operation>
- </portType>
- <binding name="AWSProductDataBinding" type="tns:AWSProductDataPortType">
- <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
- <operation name="GetPrice">
- <soap:operation soapAction="http://soap.amazon.com"/>
- <input>
- <soap:body use="literal"/>
- </input>
- <output>
- <soap:body use="literal"/>
- </output>
- </operation>
- </binding>
- <service name="AWSProductData">
- <port name="AWSProductDataPort" binding="tns:AWSProductDataBinding">
- <soap:address location="http://aws-beta.amazon.com/onca/soap?Service=AWSProductData"/>
- </port>
- </service>
-</definitions>
diff --git a/ext/soap/tests/bugs/bug29830.phpt b/ext/soap/tests/bugs/bug29830.phpt
deleted file mode 100644
index dc090f82cc..0000000000
--- a/ext/soap/tests/bugs/bug29830.phpt
+++ /dev/null
@@ -1,25 +0,0 @@
---TEST--
-Bug #29844 (SoapServer::setClass() should not export non-public methods)
---SKIPIF--
-<?php require_once('skipif.inc'); ?>
---FILE--
-<?php
-
-class hello_world {
- public function hello($to) {
- return 'Hello ' . $to;
- }
- private function bye($to) {
- return 'Bye ' . $to;
- }
-}
-
-$server = new SoapServer(NULL, array("uri"=>"test://"));
-$server->setClass('hello_world');
-$functions = $server->getFunctions();
-foreach($functions as $func) {
- echo $func . "\n";
-}
-?>
---EXPECT--
-hello
diff --git a/ext/soap/tests/bugs/bug29839.phpt b/ext/soap/tests/bugs/bug29839.phpt
deleted file mode 100644
index ab05820f0a..0000000000
--- a/ext/soap/tests/bugs/bug29839.phpt
+++ /dev/null
@@ -1,41 +0,0 @@
---TEST--
-Bug #29839 incorrect convert (xml:lang to lang)
---SKIPIF--
-<?php require_once('skipif.inc'); ?>
---FILE--
-<?php
-
-function EchoString($s) {
- return $s;
-}
-
-class LocalSoapClient extends SoapClient {
-
- function LocalSoapClient($wsdl, $options) {
- $this->SoapClient($wsdl, $options);
- $this->server = new SoapServer($wsdl, $options);
- $this->server->addFunction('EchoString');
- }
-
- function __doRequest($request, $location, $action, $version) {
- ob_start();
- $this->server->handle($request);
- $response = ob_get_contents();
- ob_end_clean();
- return $response;
- }
-
-}
-
-$client = new LocalSoapClient(dirname(__FILE__)."/bug29839.wsdl", array("trace"=>1));
-$client->EchoString(array("value"=>"hello","lang"=>"en"));
-echo $client->__getLastRequest();
-echo $client->__getLastResponse();
-echo "ok\n";
-?>
---EXPECT--
-<?xml version="1.0" encoding="UTF-8"?>
-<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://test-uri"><SOAP-ENV:Body><string xml:lang="en"><ns1:value>hello</ns1:value></string></SOAP-ENV:Body></SOAP-ENV:Envelope>
-<?xml version="1.0" encoding="UTF-8"?>
-<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://test-uri"><SOAP-ENV:Body><string xml:lang="en"><ns1:value>hello</ns1:value></string></SOAP-ENV:Body></SOAP-ENV:Envelope>
-ok \ No newline at end of file
diff --git a/ext/soap/tests/bugs/bug29839.wsdl b/ext/soap/tests/bugs/bug29839.wsdl
deleted file mode 100644
index d8ccb97954..0000000000
--- a/ext/soap/tests/bugs/bug29839.wsdl
+++ /dev/null
@@ -1,42 +0,0 @@
-<definitions xmlns="http://schemas.xmlsoap.org/wsdl/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:tns="http://test-uri" targetNamespace="http://test-uri">
- <types>
- <xs:schema targetNamespace="http://test-uri" elementFormDefault="qualified">
- <import namespace="http://www.w3.org/XML/1998/namespace" schemaLocation="xml.xsd" />
- <complexType name="LocalizedString">
- <sequence>
- <element name="value" type="xsd:string"/>
- </sequence>
- <attribute ref="xml:lang" use="required"/>
- </complexType>
- </xs:schema>
- </types>
- <message name="EchoStringRequest">
- <part name="string" type="tns:LocalizedString"/>
- </message>
- <message name="EchoStringResponse">
- <part name="string" type="tns:LocalizedString"/>
- </message>
- <portType name="AWSProductDataPortType">
- <operation name="EchoString">
- <input message="tns:EchoStringRequest"/>
- <output message="tns:EchoStringResponse"/>
- </operation>
- </portType>
- <binding name="AWSProductDataBinding" type="tns:AWSProductDataPortType">
- <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
- <operation name="EchoString">
- <soap:operation soapAction="http://test-uri"/>
- <input>
- <soap:body use="literal"/>
- </input>
- <output>
- <soap:body use="literal"/>
- </output>
- </operation>
- </binding>
- <service name="AWSProductData">
- <port name="AWSProductDataPort" binding="tns:AWSProductDataBinding">
- <soap:address location="http://aws-beta.amazon.com/onca/soap?Service=AWSProductData"/>
- </port>
- </service>
-</definitions>
diff --git a/ext/soap/tests/bugs/bug29844.phpt b/ext/soap/tests/bugs/bug29844.phpt
deleted file mode 100644
index baf7cde6d3..0000000000
--- a/ext/soap/tests/bugs/bug29844.phpt
+++ /dev/null
@@ -1,36 +0,0 @@
---TEST--
-Bug #29844 (SOAP doesn't return the result of a valid SOAP request)
---SKIPIF--
-<?php require_once('skipif.inc'); ?>
---FILE--
-<?php
-
-class hello_world {
- public function hello($to) {
- return 'Hello ' . $to;
- }
-}
-
-class LocalSoapClient extends SoapClient {
-
- function LocalSoapClient($wsdl, $options) {
- $this->SoapClient($wsdl, $options);
- $this->server = new SoapServer($wsdl, $options);
- $this->server->setClass('hello_world');;
- }
-
- function __doRequest($request, $location, $action, $version) {
- ob_start();
- $this->server->handle($request);
- $response = ob_get_contents();
- ob_end_clean();
- return $response;
- }
-
-}
-
-$client = new LocalSoapClient(dirname(__FILE__)."/bug29844.wsdl", array("trace"=>1));
-var_dump($client->hello('davey'));
-?>
---EXPECT--
-string(11) "Hello davey"
diff --git a/ext/soap/tests/bugs/bug29844.wsdl b/ext/soap/tests/bugs/bug29844.wsdl
deleted file mode 100644
index b45aa3666f..0000000000
--- a/ext/soap/tests/bugs/bug29844.wsdl
+++ /dev/null
@@ -1,66 +0,0 @@
-<?xml version="1.0" ?>
-<definitions xmlns="http://schemas.xmlsoap.org/wsdl/" xmlns:tns="http://davey.synapticmedia.net/php-mag/shafikdavey_automaticwebservices/src/Listing%201.php" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap-enc="http://schemas.xmlsoap.org/soap/encoding/" name="Crtx_SOAP_AutoDiscover_Example" targetNamespace="http://davey.synapticmedia.net/php-mag/shafikdavey_automaticwebservices/src/Listing%201.php">
- <portType name="Crtx_SOAP_AutoDiscover_ExamplePort">
- <operation name="hello">
- <input message="tns:helloRequest" />
- <output message="tns:helloResponse" />
- <documentation>Say Hello to Somebody</documentation>
- </operation>
- <operation name="goodBye">
- <input message="tns:goodByeRequest" />
- <output message="tns:goodByeResponse" />
- <documentation>Say Goodbye to Somebody</documentation>
- </operation>
- </portType>
- <binding name="Crtx_SOAP_AutoDiscover_ExampleBinding"
- type="tns:Crtx_SOAP_AutoDiscover_ExamplePort">
- <soap:binding style="document"
- transport="http://schemas.xmlsoap.org/soap/http" />
- <operation name="hello">
- <input>
- <soap:body use="encoded"
- encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" />
- </input>
- <output>
- <soap:body use="encoded"
- encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" />
- </output>
- <soap:operation soapAction="http://davey.synapticmedia.net/php-mag/shafikdavey_automaticwebservices/src/Listing%201.php#hello" />
- </operation>
- <soap:binding style="document"
- transport="http://schemas.xmlsoap.org/soap/http" />
- <operation name="goodBye">
- <input>
- <soap:body use="encoded"
- encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" />
- </input>
- <output>
- <soap:body use="encoded"
- encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" />
- </output>
- <soap:operation soapAction="http://davey.synapticmedia.net/php-mag/shafikdavey_automaticwebservices/src/Listing%201.php#goodBye" />
- </operation>
- </binding>
- <service name="Crtx_SOAP_AutoDiscover_ExampleService">
- <port name="tns:Crtx_SOAP_AutoDiscover_ExamplePort"
- binding="tns:Crtx_SOAP_AutoDiscover_ExampleBinding">
- <soap:address location="http://davey.synapticmedia.net/php-mag/shafikdavey_automaticwebservices/src/Listing%201.php" />
- </port>
- </service>
- <message name="helloRequest">
- <part name="to" type="xsd:string" />
- <documentation>Say Hello to Somebody</documentation>
- </message>
- <message name="helloResponse">
- <part name="helloReturn" type="xsd:string" />
- <documentation>The greeting</documentation>
- </message>
- <message name="goodByeRequest">
- <part name="to" type="xsd:string" />
- <documentation>Say Goodbye to Somebody</documentation>
- </message>
- <message name="goodByeResponse">
- <part name="goodByeReturn" type="xsd:string" />
- <documentation>The goodbye</documentation>
- </message>
-</definitions>
diff --git a/ext/soap/tests/bugs/skipif.inc b/ext/soap/tests/bugs/skipif.inc
deleted file mode 100644
index fa8574e6a2..0000000000
--- a/ext/soap/tests/bugs/skipif.inc
+++ /dev/null
@@ -1,3 +0,0 @@
-<?php
- if (!extension_loaded('soap')) die('skip soap extension not available');
-?>
diff --git a/ext/soap/tests/bugs/xml.xsd b/ext/soap/tests/bugs/xml.xsd
deleted file mode 100644
index abb844ac12..0000000000
--- a/ext/soap/tests/bugs/xml.xsd
+++ /dev/null
@@ -1,34 +0,0 @@
-<?xml version='1.0'?>
-<!DOCTYPE xs:schema PUBLIC "-//W3C//DTD XMLSCHEMA 200102//EN" "XMLSchema.dtd" >
-<xs:schema targetNamespace="http://www.w3.org/XML/1998/namespace" xmlns:xs="http://www.w3.org/2001/XMLSchema" xml:lang="en">
-
- <xs:attribute name="lang" type="xs:language">
- <xs:annotation>
- <xs:documentation>In due course, we should install the relevant ISO 2- and 3-letter
- codes as the enumerated possible values . . .</xs:documentation>
- </xs:annotation>
- </xs:attribute>
-
- <xs:attribute name="space" default="preserve">
- <xs:simpleType>
- <xs:restriction base="xs:NCName">
- <xs:enumeration value="default"/>
- <xs:enumeration value="preserve"/>
- </xs:restriction>
- </xs:simpleType>
- </xs:attribute>
-
- <xs:attribute name="base" type="xs:anyURI">
- <xs:annotation>
- <xs:documentation>See http://www.w3.org/TR/xmlbase/ for
- information about this attribute.</xs:documentation>
- </xs:annotation>
- </xs:attribute>
-
- <xs:attributeGroup name="specialAttrs">
- <xs:attribute ref="xml:base"/>
- <xs:attribute ref="xml:lang"/>
- <xs:attribute ref="xml:space"/>
- </xs:attributeGroup>
-
-</xs:schema>
diff --git a/ext/soap/tests/schema/schema001.phpt b/ext/soap/tests/schema/schema001.phpt
deleted file mode 100644
index 9f2b7e5235..0000000000
--- a/ext/soap/tests/schema/schema001.phpt
+++ /dev/null
@@ -1,20 +0,0 @@
---TEST--
-SOAP XML Schema 1: simpleType/restriction
---SKIPIF--
-<?php require_once('skipif.inc'); ?>
---FILE--
-<?php
-include "test_schema.inc";
-$schema = <<<EOF
- <simpleType name="testType">
- <restriction base="xsd:int"/>
- </simpleType>
-EOF;
-test_schema($schema,'type="tns:testType"',123.5);
-echo "ok";
-?>
---EXPECT--
-<?xml version="1.0" encoding="UTF-8"?>
-<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://test-uri/" 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:test><testParam xsi:type="ns1:testType">123</testParam></ns1:test></SOAP-ENV:Body></SOAP-ENV:Envelope>
-int(123)
-ok
diff --git a/ext/soap/tests/schema/schema002.phpt b/ext/soap/tests/schema/schema002.phpt
deleted file mode 100644
index 41f3bbe3fa..0000000000
--- a/ext/soap/tests/schema/schema002.phpt
+++ /dev/null
@@ -1,23 +0,0 @@
---TEST--
-SOAP XML Schema 2: simpleType/restriction (reference to type)
---SKIPIF--
-<?php require_once('skipif.inc'); ?>
---FILE--
-<?php
-include "test_schema.inc";
-$schema = <<<EOF
- <simpleType name="testType2">
- <restriction base="xsd:int"/>
- </simpleType>
- <simpleType name="testType">
- <restriction base="tns:testType2"/>
- </simpleType>
-EOF;
-test_schema($schema,'type="tns:testType"',123.5);
-echo "ok";
-?>
---EXPECT--
-<?xml version="1.0" encoding="UTF-8"?>
-<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://test-uri/" 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:test><testParam xsi:type="ns1:testType">123</testParam></ns1:test></SOAP-ENV:Body></SOAP-ENV:Envelope>
-int(123)
-ok
diff --git a/ext/soap/tests/schema/schema003.phpt b/ext/soap/tests/schema/schema003.phpt
deleted file mode 100644
index 75991001e0..0000000000
--- a/ext/soap/tests/schema/schema003.phpt
+++ /dev/null
@@ -1,23 +0,0 @@
---TEST--
-SOAP XML Schema 3: simpleType/restriction (reference to type, that is not defined yet)
---SKIPIF--
-<?php require_once('skipif.inc'); ?>
---FILE--
-<?php
-include "test_schema.inc";
-$schema = <<<EOF
- <simpleType name="testType">
- <restriction base="tns:testType2"/>
- </simpleType>
- <simpleType name="testType2">
- <restriction base="xsd:int"/>
- </simpleType>
-EOF;
-test_schema($schema,'type="tns:testType"',123.5);
-echo "ok";
-?>
---EXPECT--
-<?xml version="1.0" encoding="UTF-8"?>
-<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://test-uri/" 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:test><testParam xsi:type="ns1:testType">123</testParam></ns1:test></SOAP-ENV:Body></SOAP-ENV:Envelope>
-int(123)
-ok
diff --git a/ext/soap/tests/schema/schema004.phpt b/ext/soap/tests/schema/schema004.phpt
deleted file mode 100644
index b851f76050..0000000000
--- a/ext/soap/tests/schema/schema004.phpt
+++ /dev/null
@@ -1,20 +0,0 @@
---TEST--
-SOAP XML Schema 4: simpleType/restriction (reference to undefined type)
---SKIPIF--
-<?php require_once('skipif.inc'); ?>
---FILE--
-<?php
-include "test_schema.inc";
-$schema = <<<EOF
- <simpleType name="testType">
- <restriction base="tns:testType2"/>
- </simpleType>
-EOF;
-test_schema($schema,'type="tns:testType"',123.5);
-echo "ok";
-?>
---EXPECT--
-<?xml version="1.0" encoding="UTF-8"?>
-<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://test-uri/" 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:test><testParam xsi:type="ns1:testType">123.5</testParam></ns1:test></SOAP-ENV:Body></SOAP-ENV:Envelope>
-string(5) "123.5"
-ok \ No newline at end of file
diff --git a/ext/soap/tests/schema/schema005.phpt b/ext/soap/tests/schema/schema005.phpt
deleted file mode 100644
index 1db0c62f99..0000000000
--- a/ext/soap/tests/schema/schema005.phpt
+++ /dev/null
@@ -1,24 +0,0 @@
---TEST--
-SOAP XML Schema 5: simpleType/restriction (inline type)
---SKIPIF--
-<?php require_once('skipif.inc'); ?>
---FILE--
-<?php
-include "test_schema.inc";
-$schema = <<<EOF
- <simpleType name="testType">
- <restriction>
- <simpleType name="testType2">
- <restriction base="xsd:int"/>
- </simpleType>
- </restriction>
- </simpleType>
-EOF;
-test_schema($schema,'type="tns:testType"',123.5);
-echo "ok";
-?>
---EXPECT--
-<?xml version="1.0" encoding="UTF-8"?>
-<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://test-uri/" 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:test><testParam xsi:type="ns1:testType">123</testParam></ns1:test></SOAP-ENV:Body></SOAP-ENV:Envelope>
-int(123)
-ok
diff --git a/ext/soap/tests/schema/schema006.phpt b/ext/soap/tests/schema/schema006.phpt
deleted file mode 100644
index e41f27545b..0000000000
--- a/ext/soap/tests/schema/schema006.phpt
+++ /dev/null
@@ -1,25 +0,0 @@
---TEST--
-SOAP XML Schema 6: simpleType/restriction (referenced by ellement)
---SKIPIF--
-<?php require_once('skipif.inc'); ?>
---FILE--
-<?php
-include "test_schema.inc";
-$schema = <<<EOF
- <simpleType name="testType">
- <restriction>
- <simpleType name="testType2">
- <restriction base="xsd:int"/>
- </simpleType>
- </restriction>
- </simpleType>
- <element name="testElement" type="tns:testType"/>
-EOF;
-test_schema($schema,'element="tns:testElement"',123.5);
-echo "ok";
-?>
---EXPECT--
-<?xml version="1.0" encoding="UTF-8"?>
-<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://test-uri/" 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:test><testParam xsi:type="ns1:testType">123</testParam></ns1:test></SOAP-ENV:Body></SOAP-ENV:Envelope>
-int(123)
-ok
diff --git a/ext/soap/tests/schema/schema007.phpt b/ext/soap/tests/schema/schema007.phpt
deleted file mode 100644
index fd93c7aa8e..0000000000
--- a/ext/soap/tests/schema/schema007.phpt
+++ /dev/null
@@ -1,25 +0,0 @@
---TEST--
-SOAP XML Schema 7: simpleType/restriction (referenced by ellement)
---SKIPIF--
-<?php require_once('skipif.inc'); ?>
---FILE--
-<?php
-include "test_schema.inc";
-$schema = <<<EOF
- <element name="testElement" type="tns:testType"/>
- <simpleType name="testType">
- <restriction>
- <simpleType name="testType2">
- <restriction base="xsd:int"/>
- </simpleType>
- </restriction>
- </simpleType>
-EOF;
-test_schema($schema,'element="tns:testElement"',123.5);
-echo "ok";
-?>
---EXPECT--
-<?xml version="1.0" encoding="UTF-8"?>
-<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://test-uri/" 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:test><testParam xsi:type="ns1:testType">123</testParam></ns1:test></SOAP-ENV:Body></SOAP-ENV:Envelope>
-int(123)
-ok
diff --git a/ext/soap/tests/schema/schema008.phpt b/ext/soap/tests/schema/schema008.phpt
deleted file mode 100644
index 1c4005f690..0000000000
--- a/ext/soap/tests/schema/schema008.phpt
+++ /dev/null
@@ -1,27 +0,0 @@
---TEST--
-SOAP XML Schema 8: simpleType/restriction (anonymous, inside an ellement)
---SKIPIF--
-<?php require_once('skipif.inc'); ?>
---FILE--
-<?php
-include "test_schema.inc";
-$schema = <<<EOF
-<element name="testElement">
- <simpleType>
- <restriction>
- <simpleType name="testType2">
- <restriction base="xsd:int"/>
- </simpleType>
- </restriction>
- </simpleType>
-</element>
-EOF;
-test_schema($schema,'element="tns:testElement"',123.5);
-echo "ok";
-?>
---EXPECT--
-<?xml version="1.0" encoding="UTF-8"?>
-<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://test-uri/" 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:test><testParam xsi:type="ns1:testElement">123</testParam></ns1:test></SOAP-ENV:Body></SOAP-ENV:Envelope>
-int(123)
-ok
-
diff --git a/ext/soap/tests/schema/schema009.phpt b/ext/soap/tests/schema/schema009.phpt
deleted file mode 100644
index 5198debd90..0000000000
--- a/ext/soap/tests/schema/schema009.phpt
+++ /dev/null
@@ -1,20 +0,0 @@
---TEST--
-SOAP XML Schema 9: simpleType/list (as string)
---SKIPIF--
-<?php require_once('skipif.inc'); ?>
---FILE--
-<?php
-include "test_schema.inc";
-$schema = <<<EOF
- <simpleType name="testType">
- <list itemType="token"/>
- </simpleType>
-EOF;
-test_schema($schema,'type="tns:testType"',"one two");
-echo "ok";
-?>
---EXPECT--
-<?xml version="1.0" encoding="UTF-8"?>
-<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://test-uri/" 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:test><testParam xsi:type="ns1:testType">one two</testParam></ns1:test></SOAP-ENV:Body></SOAP-ENV:Envelope>
-string(7) "one two"
-ok
diff --git a/ext/soap/tests/schema/schema010.phpt b/ext/soap/tests/schema/schema010.phpt
deleted file mode 100644
index 6cea56ee48..0000000000
--- a/ext/soap/tests/schema/schema010.phpt
+++ /dev/null
@@ -1,20 +0,0 @@
---TEST--
-SOAP XML Schema 10: simpleType/list (as array)
---SKIPIF--
-<?php require_once('skipif.inc'); ?>
---FILE--
-<?php
-include "test_schema.inc";
-$schema = <<<EOF
- <simpleType name="testType">
- <list itemType="token"/>
- </simpleType>
-EOF;
-test_schema($schema,'type="tns:testType"',array("one","two"));
-echo "ok";
-?>
---EXPECT--
-<?xml version="1.0" encoding="UTF-8"?>
-<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://test-uri/" 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:test><testParam xsi:type="ns1:testType">one two</testParam></ns1:test></SOAP-ENV:Body></SOAP-ENV:Envelope>
-string(7) "one two"
-ok
diff --git a/ext/soap/tests/schema/schema011.phpt b/ext/soap/tests/schema/schema011.phpt
deleted file mode 100644
index c66f0f7a10..0000000000
--- a/ext/soap/tests/schema/schema011.phpt
+++ /dev/null
@@ -1,24 +0,0 @@
---TEST--
-SOAP XML Schema 11: simpleType/list (inline type) (as string)
---SKIPIF--
-<?php require_once('skipif.inc'); ?>
---FILE--
-<?php
-include "test_schema.inc";
-$schema = <<<EOF
- <simpleType name="testType">
- <list>
- <simpleType>
- <restriction base="int"/>
- </simpleType>
- </list>
- </simpleType>
-EOF;
-test_schema($schema,'type="tns:testType"',"123 456.7");
-echo "ok";
-?>
---EXPECT--
-<?xml version="1.0" encoding="UTF-8"?>
-<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://test-uri/" 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:test><testParam xsi:type="ns1:testType">123 456</testParam></ns1:test></SOAP-ENV:Body></SOAP-ENV:Envelope>
-string(7) "123 456"
-ok
diff --git a/ext/soap/tests/schema/schema012.phpt b/ext/soap/tests/schema/schema012.phpt
deleted file mode 100644
index 7ba25f9637..0000000000
--- a/ext/soap/tests/schema/schema012.phpt
+++ /dev/null
@@ -1,24 +0,0 @@
---TEST--
-SOAP XML Schema 12: simpleType/list (inline type) (as array)
---SKIPIF--
-<?php require_once('skipif.inc'); ?>
---FILE--
-<?php
-include "test_schema.inc";
-$schema = <<<EOF
- <simpleType name="testType">
- <list>
- <simpleType>
- <restriction base="int"/>
- </simpleType>
- </list>
- </simpleType>
-EOF;
-test_schema($schema,'type="tns:testType"',array(123,456.7));
-echo "ok";
-?>
---EXPECT--
-<?xml version="1.0" encoding="UTF-8"?>
-<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://test-uri/" 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:test><testParam xsi:type="ns1:testType">123 456</testParam></ns1:test></SOAP-ENV:Body></SOAP-ENV:Envelope>
-string(7) "123 456"
-ok
diff --git a/ext/soap/tests/schema/schema013.phpt b/ext/soap/tests/schema/schema013.phpt
deleted file mode 100644
index ee2e114bd6..0000000000
--- a/ext/soap/tests/schema/schema013.phpt
+++ /dev/null
@@ -1,20 +0,0 @@
---TEST--
-SOAP XML Schema 13: simpleType/union
---SKIPIF--
-<?php require_once('skipif.inc'); ?>
---FILE--
-<?php
-include "test_schema.inc";
-$schema = <<<EOF
- <simpleType name="testType">
- <union memberTypes="string int float"/>
- </simpleType>
-EOF;
-test_schema($schema,'type="tns:testType"',"str");
-echo "ok";
-?>
---EXPECT--
-<?xml version="1.0" encoding="UTF-8"?>
-<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://test-uri/" 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:test><testParam xsi:type="ns1:testType">str</testParam></ns1:test></SOAP-ENV:Body></SOAP-ENV:Envelope>
-string(3) "str"
-ok
diff --git a/ext/soap/tests/schema/schema014.phpt b/ext/soap/tests/schema/schema014.phpt
deleted file mode 100644
index 87edb3ad30..0000000000
--- a/ext/soap/tests/schema/schema014.phpt
+++ /dev/null
@@ -1,20 +0,0 @@
---TEST--
-SOAP XML Schema 14: simpleType/union
---SKIPIF--
-<?php require_once('skipif.inc'); ?>
---FILE--
-<?php
-include "test_schema.inc";
-$schema = <<<EOF
- <simpleType name="testType">
- <union memberTypes="string int float"/>
- </simpleType>
-EOF;
-test_schema($schema,'type="tns:testType"',123.5);
-echo "ok";
-?>
---EXPECT--
-<?xml version="1.0" encoding="UTF-8"?>
-<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://test-uri/" 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:test><testParam xsi:type="ns1:testType">123.5</testParam></ns1:test></SOAP-ENV:Body></SOAP-ENV:Envelope>
-string(5) "123.5"
-ok
diff --git a/ext/soap/tests/schema/schema015.phpt b/ext/soap/tests/schema/schema015.phpt
deleted file mode 100644
index dc9a02d586..0000000000
--- a/ext/soap/tests/schema/schema015.phpt
+++ /dev/null
@@ -1,30 +0,0 @@
---TEST--
-SOAP XML Schema 15: simpleType/union (inline type)
---SKIPIF--
-<?php require_once('skipif.inc'); ?>
---FILE--
-<?php
-include "test_schema.inc";
-$schema = <<<EOF
- <simpleType name="testType">
- <union>
- <simpleType>
- <restriction base="string"/>
- </simpleType>
- <simpleType>
- <restriction base="int"/>
- </simpleType>
- <simpleType>
- <restriction base="float"/>
- </simpleType>
- </union>
- </simpleType>
-EOF;
-test_schema($schema,'type="tns:testType"',"str");
-echo "ok";
-?>
---EXPECT--
-<?xml version="1.0" encoding="UTF-8"?>
-<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://test-uri/" 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:test><testParam xsi:type="ns1:testType">str</testParam></ns1:test></SOAP-ENV:Body></SOAP-ENV:Envelope>
-string(3) "str"
-ok
diff --git a/ext/soap/tests/schema/schema016.phpt b/ext/soap/tests/schema/schema016.phpt
deleted file mode 100644
index 714fb59743..0000000000
--- a/ext/soap/tests/schema/schema016.phpt
+++ /dev/null
@@ -1,30 +0,0 @@
---TEST--
-SOAP XML Schema 16: simpleType/union (inline type)
---SKIPIF--
-<?php require_once('skipif.inc'); ?>
---FILE--
-<?php
-include "test_schema.inc";
-$schema = <<<EOF
- <simpleType name="testType">
- <union>
- <simpleType>
- <restriction base="string"/>
- </simpleType>
- <simpleType>
- <restriction base="int"/>
- </simpleType>
- <simpleType>
- <restriction base="float"/>
- </simpleType>
- </union>
- </simpleType>
-EOF;
-test_schema($schema,'type="tns:testType"',123.5);
-echo "ok";
-?>
---EXPECT--
-<?xml version="1.0" encoding="UTF-8"?>
-<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://test-uri/" 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:test><testParam xsi:type="ns1:testType">123.5</testParam></ns1:test></SOAP-ENV:Body></SOAP-ENV:Envelope>
-string(5) "123.5"
-ok
diff --git a/ext/soap/tests/schema/schema017.phpt b/ext/soap/tests/schema/schema017.phpt
deleted file mode 100644
index 8b20483783..0000000000
--- a/ext/soap/tests/schema/schema017.phpt
+++ /dev/null
@@ -1,27 +0,0 @@
---TEST--
-SOAP XML Schema 17: union with list
---SKIPIF--
-<?php require_once('skipif.inc'); ?>
---FILE--
-<?php
-include "test_schema.inc";
-$schema = <<<EOF
- <simpleType name="testType">
- <union>
- <simpleType>
- <restriction base="float"/>
- </simpleType>
- <simpleType>
- <list itemType="int"/>
- </simpleType>
- </union>
- </simpleType>
-EOF;
-test_schema($schema,'type="tns:testType"',123.5);
-echo "ok";
-?>
---EXPECT--
-<?xml version="1.0" encoding="UTF-8"?>
-<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://test-uri/" 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:test><testParam xsi:type="ns1:testType">123.5</testParam></ns1:test></SOAP-ENV:Body></SOAP-ENV:Envelope>
-string(5) "123.5"
-ok
diff --git a/ext/soap/tests/schema/schema018.phpt b/ext/soap/tests/schema/schema018.phpt
deleted file mode 100644
index f41e277aaa..0000000000
--- a/ext/soap/tests/schema/schema018.phpt
+++ /dev/null
@@ -1,27 +0,0 @@
---TEST--
-SOAP XML Schema 18: union with list
---SKIPIF--
-<?php require_once('skipif.inc'); ?>
---FILE--
-<?php
-include "test_schema.inc";
-$schema = <<<EOF
- <simpleType name="testType">
- <union>
- <simpleType>
- <restriction base="float"/>
- </simpleType>
- <simpleType>
- <list itemType="int"/>
- </simpleType>
- </union>
- </simpleType>
-EOF;
-test_schema($schema,'type="tns:testType"',"123.5");
-echo "ok";
-?>
---EXPECT--
-<?xml version="1.0" encoding="UTF-8"?>
-<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://test-uri/" 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:test><testParam xsi:type="ns1:testType">123.5</testParam></ns1:test></SOAP-ENV:Body></SOAP-ENV:Envelope>
-string(5) "123.5"
-ok
diff --git a/ext/soap/tests/schema/schema019.phpt b/ext/soap/tests/schema/schema019.phpt
deleted file mode 100644
index 73938772bf..0000000000
--- a/ext/soap/tests/schema/schema019.phpt
+++ /dev/null
@@ -1,27 +0,0 @@
---TEST--
-SOAP XML Schema 19: union with list
---SKIPIF--
-<?php require_once('skipif.inc'); ?>
---FILE--
-<?php
-include "test_schema.inc";
-$schema = <<<EOF
- <simpleType name="testType">
- <union>
- <simpleType>
- <restriction base="float"/>
- </simpleType>
- <simpleType>
- <list itemType="int"/>
- </simpleType>
- </union>
- </simpleType>
-EOF;
-test_schema($schema,'type="tns:testType"',"123.5 456.7");
-echo "ok";
-?>
---EXPECT--
-<?xml version="1.0" encoding="UTF-8"?>
-<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://test-uri/" 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:test><testParam xsi:type="ns1:testType">123.5 456.7</testParam></ns1:test></SOAP-ENV:Body></SOAP-ENV:Envelope>
-string(11) "123.5 456.7"
-ok
diff --git a/ext/soap/tests/schema/schema020.phpt b/ext/soap/tests/schema/schema020.phpt
deleted file mode 100644
index 899b773756..0000000000
--- a/ext/soap/tests/schema/schema020.phpt
+++ /dev/null
@@ -1,27 +0,0 @@
---TEST--
-SOAP XML Schema 20: union with list
---SKIPIF--
-<?php require_once('skipif.inc'); ?>
---FILE--
-<?php
-include "test_schema.inc";
-$schema = <<<EOF
- <simpleType name="testType">
- <union>
- <simpleType>
- <restriction base="float"/>
- </simpleType>
- <simpleType>
- <list itemType="int"/>
- </simpleType>
- </union>
- </simpleType>
-EOF;
-test_schema($schema,'type="tns:testType"',array(123.5,456.7));
-echo "ok";
-?>
---EXPECT--
-<?xml version="1.0" encoding="UTF-8"?>
-<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://test-uri/" 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:test><testParam xsi:type="ns1:testType">123.5 456.7</testParam></ns1:test></SOAP-ENV:Body></SOAP-ENV:Envelope>
-string(11) "123.5 456.7"
-ok
diff --git a/ext/soap/tests/schema/schema021.phpt b/ext/soap/tests/schema/schema021.phpt
deleted file mode 100644
index 1400107f81..0000000000
--- a/ext/soap/tests/schema/schema021.phpt
+++ /dev/null
@@ -1,24 +0,0 @@
---TEST--
-SOAP XML Schema 21: list of unions
---SKIPIF--
-<?php require_once('skipif.inc'); ?>
---FILE--
-<?php
-include "test_schema.inc";
-$schema = <<<EOF
- <simpleType name="testType">
- <list>
- <simpleType>
- <union memberTypes="int float str"/>
- </simpleType>
- </list>
- </simpleType>
-EOF;
-test_schema($schema,'type="tns:testType"',"123 123.5 456.7 str");
-echo "ok";
-?>
---EXPECT--
-<?xml version="1.0" encoding="UTF-8"?>
-<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://test-uri/" 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:test><testParam xsi:type="ns1:testType">123 123.5 456.7 str</testParam></ns1:test></SOAP-ENV:Body></SOAP-ENV:Envelope>
-string(19) "123 123.5 456.7 str"
-ok
diff --git a/ext/soap/tests/schema/schema022.phpt b/ext/soap/tests/schema/schema022.phpt
deleted file mode 100644
index bfbb05c772..0000000000
--- a/ext/soap/tests/schema/schema022.phpt
+++ /dev/null
@@ -1,24 +0,0 @@
---TEST--
-SOAP XML Schema 22: list of unions
---SKIPIF--
-<?php require_once('skipif.inc'); ?>
---FILE--
-<?php
-include "test_schema.inc";
-$schema = <<<EOF
- <simpleType name="testType">
- <list>
- <simpleType>
- <union memberTypes="int float str"/>
- </simpleType>
- </list>
- </simpleType>
-EOF;
-test_schema($schema,'type="tns:testType"',array(123,123.5,'str'));
-echo "ok";
-?>
---EXPECT--
-<?xml version="1.0" encoding="UTF-8"?>
-<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://test-uri/" 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:test><testParam xsi:type="ns1:testType">123 123.5 str</testParam></ns1:test></SOAP-ENV:Body></SOAP-ENV:Envelope>
-string(13) "123 123.5 str"
-ok
diff --git a/ext/soap/tests/schema/schema023.phpt b/ext/soap/tests/schema/schema023.phpt
deleted file mode 100644
index 162a46e7f5..0000000000
--- a/ext/soap/tests/schema/schema023.phpt
+++ /dev/null
@@ -1,29 +0,0 @@
---TEST--
-SOAP XML Schema 23: SOAP 1.1 Array
---SKIPIF--
-<?php require_once('skipif.inc'); ?>
---FILE--
-<?php
-include "test_schema.inc";
-$schema = <<<EOF
- <complexType name="testType">
- <complexContent>
- <restriction base="SOAP-ENC:Array">
- <attribute ref="SOAP-ENC:arrayType" wsdl:arrayType="int[]"/>
- </restriction>
- </complexContent>
- </complexType>
-EOF;
-test_schema($schema,'type="tns:testType"',array(123,123.5));
-echo "ok";
-?>
---EXPECT--
-<?xml version="1.0" encoding="UTF-8"?>
-<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://test-uri/" 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:test><testParam SOAP-ENC:arrayType="xsd:int[2]" xsi:type="ns1:testType"><item xsi:type="xsd:int">123</item><item xsi:type="xsd:int">123</item></testParam></ns1:test></SOAP-ENV:Body></SOAP-ENV:Envelope>
-array(2) {
- [0]=>
- int(123)
- [1]=>
- int(123)
-}
-ok
diff --git a/ext/soap/tests/schema/schema024.phpt b/ext/soap/tests/schema/schema024.phpt
deleted file mode 100644
index 628dfd73fd..0000000000
--- a/ext/soap/tests/schema/schema024.phpt
+++ /dev/null
@@ -1,31 +0,0 @@
---TEST--
-SOAP XML Schema 24: SOAP 1.1 Array (second way)
---SKIPIF--
-<?php require_once('skipif.inc'); ?>
---FILE--
-<?php
-include "test_schema.inc";
-$schema = <<<EOF
- <complexType name="testType">
- <complexContent>
- <restriction base="SOAP-ENC:Array">
- <all>
- <element name="x_item" type="int" maxOccurs="unbounded"/>
- </all>
- </restriction>
- </complexContent>
- </complexType>
-EOF;
-test_schema($schema,'type="tns:testType"',array(123,123.5));
-echo "ok";
-?>
---EXPECT--
-<?xml version="1.0" encoding="UTF-8"?>
-<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://test-uri/" 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:test><testParam SOAP-ENC:arrayType="xsd:int[2]" xsi:type="ns1:testType"><x_item xsi:type="xsd:int">123</x_item><x_item xsi:type="xsd:int">123</x_item></testParam></ns1:test></SOAP-ENV:Body></SOAP-ENV:Envelope>
-array(2) {
- [0]=>
- int(123)
- [1]=>
- int(123)
-}
-ok
diff --git a/ext/soap/tests/schema/schema025.phpt b/ext/soap/tests/schema/schema025.phpt
deleted file mode 100644
index f9c7af7586..0000000000
--- a/ext/soap/tests/schema/schema025.phpt
+++ /dev/null
@@ -1,30 +0,0 @@
---TEST--
-SOAP XML Schema 25: SOAP 1.2 Array
---SKIPIF--
-<?php require_once('skipif.inc'); ?>
---FILE--
-<?php
-include "test_schema.inc";
-$schema = <<<EOF
- <complexType name="testType">
- <complexContent>
- <restriction base="enc12:Array" xmlns:enc12="http://www.w3.org/2003/05/soap-encoding">
- <attribute ref="enc12:itemType" wsdl:itemType="int"/>
- <attribute ref="enc12:arraySize" wsdl:arraySize="*"/>
- </restriction>
- </complexContent>
- </complexType>
-EOF;
-test_schema($schema,'type="tns:testType"',array(123,123.5));
-echo "ok";
-?>
---EXPECT--
-<?xml version="1.0" encoding="UTF-8"?>
-<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://test-uri/" 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:test><testParam SOAP-ENC:arrayType="xsd:int[2]" xsi:type="ns1:testType"><item xsi:type="xsd:int">123</item><item xsi:type="xsd:int">123</item></testParam></ns1:test></SOAP-ENV:Body></SOAP-ENV:Envelope>
-array(2) {
- [0]=>
- int(123)
- [1]=>
- int(123)
-}
-ok
diff --git a/ext/soap/tests/schema/schema026.phpt b/ext/soap/tests/schema/schema026.phpt
deleted file mode 100644
index a80215ed4f..0000000000
--- a/ext/soap/tests/schema/schema026.phpt
+++ /dev/null
@@ -1,31 +0,0 @@
---TEST--
-SOAP XML Schema 26: SOAP 1.2 Array (second way)
---SKIPIF--
-<?php require_once('skipif.inc'); ?>
---FILE--
-<?php
-include "test_schema.inc";
-$schema = <<<EOF
- <complexType name="testType">
- <complexContent>
- <restriction base="enc12:Array" xmlns:enc12="http://www.w3.org/2003/05/soap-encoding">
- <all>
- <element name="x_item" type="int" maxOccurs="unbounded"/>
- </all>
- </restriction>
- </complexContent>
- </complexType>
-EOF;
-test_schema($schema,'type="tns:testType"',array(123,123.5));
-echo "ok";
-?>
---EXPECT--
-<?xml version="1.0" encoding="UTF-8"?>
-<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://test-uri/" 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:test><testParam SOAP-ENC:arrayType="xsd:int[2]" xsi:type="ns1:testType"><x_item xsi:type="xsd:int">123</x_item><x_item xsi:type="xsd:int">123</x_item></testParam></ns1:test></SOAP-ENV:Body></SOAP-ENV:Envelope>
-array(2) {
- [0]=>
- int(123)
- [1]=>
- int(123)
-}
-ok
diff --git a/ext/soap/tests/schema/schema027.phpt b/ext/soap/tests/schema/schema027.phpt
deleted file mode 100644
index 968b8562db..0000000000
--- a/ext/soap/tests/schema/schema027.phpt
+++ /dev/null
@@ -1,35 +0,0 @@
---TEST--
-SOAP XML Schema 27: SOAP 1.1 Multidimensional array
---SKIPIF--
-<?php require_once('skipif.inc'); ?>
---FILE--
-<?php
-include "test_schema.inc";
-$schema = <<<EOF
- <complexType name="testType">
- <complexContent>
- <restriction base="SOAP-ENC:Array">
- <attribute ref="SOAP-ENC:arrayType" wsdl:arrayType="int[,]"/>
- </restriction>
- </complexContent>
- </complexType>
-EOF;
-test_schema($schema,'type="tns:testType"',array(array(123),array(123.5)));
-echo "ok";
-?>
---EXPECT--
-<?xml version="1.0" encoding="UTF-8"?>
-<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://test-uri/" 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:test><testParam SOAP-ENC:arrayType="xsd:int[2,1]" xsi:type="ns1:testType"><item xsi:type="xsd:int">123</item><item xsi:type="xsd:int">123</item></testParam></ns1:test></SOAP-ENV:Body></SOAP-ENV:Envelope>
-array(2) {
- [0]=>
- array(1) {
- [0]=>
- int(123)
- }
- [1]=>
- array(1) {
- [0]=>
- int(123)
- }
-}
-ok
diff --git a/ext/soap/tests/schema/schema028.phpt b/ext/soap/tests/schema/schema028.phpt
deleted file mode 100644
index f86a875848..0000000000
--- a/ext/soap/tests/schema/schema028.phpt
+++ /dev/null
@@ -1,36 +0,0 @@
---TEST--
-SOAP XML Schema 28: SOAP 1.2 Multidimensional array
---SKIPIF--
-<?php require_once('skipif.inc'); ?>
---FILE--
-<?php
-include "test_schema.inc";
-$schema = <<<EOF
- <complexType name="testType">
- <complexContent>
- <restriction base="enc12:Array" xmlns:enc12="http://www.w3.org/2003/05/soap-encoding">
- <attribute ref="enc12:itemType" wsdl:itemType="int"/>
- <attribute ref="enc12:arraySize" wsdl:arraySize="* 1"/>
- </restriction>
- </complexContent>
- </complexType>
-EOF;
-test_schema($schema,'type="tns:testType"',array(array(123),array(123.5)));
-echo "ok";
-?>
---EXPECT--
-<?xml version="1.0" encoding="UTF-8"?>
-<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://test-uri/" 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:test><testParam SOAP-ENC:arrayType="xsd:int[2,1]" xsi:type="ns1:testType"><item xsi:type="xsd:int">123</item><item xsi:type="xsd:int">123</item></testParam></ns1:test></SOAP-ENV:Body></SOAP-ENV:Envelope>
-array(2) {
- [0]=>
- array(1) {
- [0]=>
- int(123)
- }
- [1]=>
- array(1) {
- [0]=>
- int(123)
- }
-}
-ok
diff --git a/ext/soap/tests/schema/schema029.phpt b/ext/soap/tests/schema/schema029.phpt
deleted file mode 100644
index 8ae0a3b12f..0000000000
--- a/ext/soap/tests/schema/schema029.phpt
+++ /dev/null
@@ -1,38 +0,0 @@
---TEST--
-SOAP XML Schema 29: SOAP 1.2 Multidimensional array (second way)
---SKIPIF--
-<?php require_once('skipif.inc'); ?>
---FILE--
-<?php
-include "test_schema.inc";
-$schema = <<<EOF
- <complexType name="testType">
- <complexContent>
- <restriction base="enc12:Array" xmlns:enc12="http://www.w3.org/2003/05/soap-encoding">
- <all>
- <element name="x_item" type="int" maxOccurs="unbounded"/>
- </all>
- <attribute ref="enc12:arraySize" wsdl:arraySize="* 1"/>
- </restriction>
- </complexContent>
- </complexType>
-EOF;
-test_schema($schema,'type="tns:testType"',array(array(123),array(123.5)));
-echo "ok";
-?>
---EXPECT--
-<?xml version="1.0" encoding="UTF-8"?>
-<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://test-uri/" 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:test><testParam SOAP-ENC:arrayType="xsd:int[2,1]" xsi:type="ns1:testType"><x_item xsi:type="xsd:int">123</x_item><x_item xsi:type="xsd:int">123</x_item></testParam></ns1:test></SOAP-ENV:Body></SOAP-ENV:Envelope>
-array(2) {
- [0]=>
- array(1) {
- [0]=>
- int(123)
- }
- [1]=>
- array(1) {
- [0]=>
- int(123)
- }
-}
-ok
diff --git a/ext/soap/tests/schema/schema030.phpt b/ext/soap/tests/schema/schema030.phpt
deleted file mode 100644
index f6e62d4106..0000000000
--- a/ext/soap/tests/schema/schema030.phpt
+++ /dev/null
@@ -1,28 +0,0 @@
---TEST--
-SOAP XML Schema 30: Structure (sequence)
---SKIPIF--
-<?php require_once('skipif.inc'); ?>
---FILE--
-<?php
-include "test_schema.inc";
-$schema = <<<EOF
- <complexType name="testType">
- <sequence>
- <element name="int" type="int"/>
- <element name="str" type="string"/>
- </sequence>
- </complexType>
-EOF;
-test_schema($schema,'type="tns:testType"',(object)array("str"=>"str","int"=>123.5));
-echo "ok";
-?>
---EXPECT--
-<?xml version="1.0" encoding="UTF-8"?>
-<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://test-uri/" 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:test><testParam xsi:type="ns1:testType"><int xsi:type="xsd:int">123</int><str xsi:type="xsd:string">str</str></testParam></ns1:test></SOAP-ENV:Body></SOAP-ENV:Envelope>
-object(stdClass)#5 (2) {
- ["int"]=>
- int(123)
- ["str"]=>
- string(3) "str"
-}
-ok
diff --git a/ext/soap/tests/schema/schema031.phpt b/ext/soap/tests/schema/schema031.phpt
deleted file mode 100644
index f7d7712577..0000000000
--- a/ext/soap/tests/schema/schema031.phpt
+++ /dev/null
@@ -1,28 +0,0 @@
---TEST--
-SOAP XML Schema 31: Structure (all)
---SKIPIF--
-<?php require_once('skipif.inc'); ?>
---FILE--
-<?php
-include "test_schema.inc";
-$schema = <<<EOF
- <complexType name="testType">
- <all>
- <element name="int" type="int"/>
- <element name="str" type="string"/>
- </all>
- </complexType>
-EOF;
-test_schema($schema,'type="tns:testType"',(object)array("str"=>"str","int"=>123.5));
-echo "ok";
-?>
---EXPECT--
-<?xml version="1.0" encoding="UTF-8"?>
-<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://test-uri/" 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:test><testParam xsi:type="ns1:testType"><int xsi:type="xsd:int">123</int><str xsi:type="xsd:string">str</str></testParam></ns1:test></SOAP-ENV:Body></SOAP-ENV:Envelope>
-object(stdClass)#5 (2) {
- ["int"]=>
- int(123)
- ["str"]=>
- string(3) "str"
-}
-ok
diff --git a/ext/soap/tests/schema/schema032.phpt b/ext/soap/tests/schema/schema032.phpt
deleted file mode 100644
index bde19cee7e..0000000000
--- a/ext/soap/tests/schema/schema032.phpt
+++ /dev/null
@@ -1,26 +0,0 @@
---TEST--
-SOAP XML Schema 32: Structure (choice)
---SKIPIF--
-<?php require_once('skipif.inc'); ?>
---FILE--
-<?php
-include "test_schema.inc";
-$schema = <<<EOF
- <complexType name="testType">
- <choice>
- <element name="int" type="int"/>
- <element name="str" type="string"/>
- </choice>
- </complexType>
-EOF;
-test_schema($schema,'type="tns:testType"',(object)array("int"=>123.5));
-echo "ok";
-?>
---EXPECT--
-<?xml version="1.0" encoding="UTF-8"?>
-<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://test-uri/" 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:test><testParam xsi:type="ns1:testType"><int xsi:type="xsd:int">123</int></testParam></ns1:test></SOAP-ENV:Body></SOAP-ENV:Envelope>
-object(stdClass)#5 (1) {
- ["int"]=>
- int(123)
-}
-ok
diff --git a/ext/soap/tests/schema/schema033.phpt b/ext/soap/tests/schema/schema033.phpt
deleted file mode 100644
index 1c8341b71d..0000000000
--- a/ext/soap/tests/schema/schema033.phpt
+++ /dev/null
@@ -1,36 +0,0 @@
---TEST--
-SOAP XML Schema 33: Nested complex types
---SKIPIF--
-<?php require_once('skipif.inc'); ?>
---FILE--
-<?php
-include "test_schema.inc";
-$schema = <<<EOF
- <complexType name="testType2">
- <sequence>
- <element name="int" type="int"/>
- </sequence>
- </complexType>
- <complexType name="testType">
- <sequence>
- <element name="int" type="int"/>
- <element name="nest" type="tns:testType2"/>
- </sequence>
- </complexType>
-EOF;
-test_schema($schema,'type="tns:testType"',(object)array("int"=>123.5,"nest"=>array("int"=>123.5)));
-echo "ok";
-?>
---EXPECT--
-<?xml version="1.0" encoding="UTF-8"?>
-<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://test-uri/" 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:test><testParam xsi:type="ns1:testType"><int xsi:type="xsd:int">123</int><nest xsi:type="ns1:testType2"><int xsi:type="xsd:int">123</int></nest></testParam></ns1:test></SOAP-ENV:Body></SOAP-ENV:Envelope>
-object(stdClass)#5 (2) {
- ["int"]=>
- int(123)
- ["nest"]=>
- object(stdClass)#6 (1) {
- ["int"]=>
- int(123)
- }
-}
-ok
diff --git a/ext/soap/tests/schema/schema034.phpt b/ext/soap/tests/schema/schema034.phpt
deleted file mode 100644
index 995b0485e5..0000000000
--- a/ext/soap/tests/schema/schema034.phpt
+++ /dev/null
@@ -1,37 +0,0 @@
---TEST--
-SOAP XML Schema 34: Nested complex types (element ref)
---SKIPIF--
-<?php require_once('skipif.inc'); ?>
---FILE--
-<?php
-include "test_schema.inc";
-$schema = <<<EOF
- <element name="testType2" type="tns:testType2"/>
- <complexType name="testType2">
- <sequence>
- <element name="int" type="int"/>
- </sequence>
- </complexType>
- <complexType name="testType">
- <sequence>
- <element name="int" type="int"/>
- <element ref="tns:testType2"/>
- </sequence>
- </complexType>
-EOF;
-test_schema($schema,'type="tns:testType"',(object)array("int"=>123.5,"testType2"=>array("int"=>123.5)));
-echo "ok";
-?>
---EXPECT--
-<?xml version="1.0" encoding="UTF-8"?>
-<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://test-uri/" 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:test><testParam xsi:type="ns1:testType"><int xsi:type="xsd:int">123</int><testType2 xsi:type="ns1:testType2"><int xsi:type="xsd:int">123</int></testType2></testParam></ns1:test></SOAP-ENV:Body></SOAP-ENV:Envelope>
-object(stdClass)#5 (2) {
- ["int"]=>
- int(123)
- ["testType2"]=>
- object(stdClass)#6 (1) {
- ["int"]=>
- int(123)
- }
-}
-ok
diff --git a/ext/soap/tests/schema/schema035.phpt b/ext/soap/tests/schema/schema035.phpt
deleted file mode 100644
index da2c6410a6..0000000000
--- a/ext/soap/tests/schema/schema035.phpt
+++ /dev/null
@@ -1,38 +0,0 @@
---TEST--
-SOAP XML Schema 35: Nested complex types (element ref + anonymous type)
---SKIPIF--
-<?php require_once('skipif.inc'); ?>
---FILE--
-<?php
-include "test_schema.inc";
-$schema = <<<EOF
- <element name="testType2">
- <complexType>
- <sequence>
- <element name="int" type="int"/>
- </sequence>
- </complexType>
- </element>
- <complexType name="testType">
- <sequence>
- <element name="int" type="int"/>
- <element ref="tns:testType2"/>
- </sequence>
- </complexType>
-EOF;
-test_schema($schema,'type="tns:testType"',(object)array("int"=>123.5,"testType2"=>array("int"=>123.5)));
-echo "ok";
-?>
---EXPECT--
-<?xml version="1.0" encoding="UTF-8"?>
-<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://test-uri/" 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:test><testParam xsi:type="ns1:testType"><int xsi:type="xsd:int">123</int><testType2 xsi:type="ns1:testType2"><int xsi:type="xsd:int">123</int></testType2></testParam></ns1:test></SOAP-ENV:Body></SOAP-ENV:Envelope>
-object(stdClass)#5 (2) {
- ["int"]=>
- int(123)
- ["testType2"]=>
- object(stdClass)#6 (1) {
- ["int"]=>
- int(123)
- }
-}
-ok
diff --git a/ext/soap/tests/schema/schema036.phpt b/ext/soap/tests/schema/schema036.phpt
deleted file mode 100644
index bf25ec4b98..0000000000
--- a/ext/soap/tests/schema/schema036.phpt
+++ /dev/null
@@ -1,37 +0,0 @@
---TEST--
-SOAP XML Schema 36: Nested complex types (inline)
---SKIPIF--
-<?php require_once('skipif.inc'); ?>
---FILE--
-<?php
-include "test_schema.inc";
-$schema = <<<EOF
- <complexType name="testType">
- <sequence>
- <element name="int" type="int"/>
- <element name="testType2">
- <complexType>
- <sequence>
- <element name="int" type="int"/>
- </sequence>
- </complexType>
- </element>
- </sequence>
- </complexType>
-EOF;
-test_schema($schema,'type="tns:testType"',(object)array("int"=>123.5,"testType2"=>array("int"=>123.5)));
-echo "ok";
-?>
---EXPECT--
-<?xml version="1.0" encoding="UTF-8"?>
-<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://test-uri/" 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:test><testParam xsi:type="ns1:testType"><int xsi:type="xsd:int">123</int><testType2 xsi:type="ns1:testType2"><int xsi:type="xsd:int">123</int></testType2></testParam></ns1:test></SOAP-ENV:Body></SOAP-ENV:Envelope>
-object(stdClass)#5 (2) {
- ["int"]=>
- int(123)
- ["testType2"]=>
- object(stdClass)#6 (1) {
- ["int"]=>
- int(123)
- }
-}
-ok
diff --git a/ext/soap/tests/schema/schema037.phpt b/ext/soap/tests/schema/schema037.phpt
deleted file mode 100644
index b1437a1f93..0000000000
--- a/ext/soap/tests/schema/schema037.phpt
+++ /dev/null
@@ -1,28 +0,0 @@
---TEST--
-SOAP XML Schema 37: Structure with attributes
---SKIPIF--
-<?php require_once('skipif.inc'); ?>
---FILE--
-<?php
-include "test_schema.inc";
-$schema = <<<EOF
- <complexType name="testType">
- <sequence>
- <element name="str" type="string"/>
- </sequence>
- <attribute name="int" type="int"/>
- </complexType>
-EOF;
-test_schema($schema,'type="tns:testType"',(object)array("str"=>"str","int"=>123.5));
-echo "ok";
-?>
---EXPECT--
-<?xml version="1.0" encoding="UTF-8"?>
-<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://test-uri/" 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:test><testParam int="123" xsi:type="ns1:testType"><str xsi:type="xsd:string">str</str></testParam></ns1:test></SOAP-ENV:Body></SOAP-ENV:Envelope>
-object(stdClass)#5 (2) {
- ["str"]=>
- string(3) "str"
- ["int"]=>
- int(123)
-}
-ok
diff --git a/ext/soap/tests/schema/schema038.phpt b/ext/soap/tests/schema/schema038.phpt
deleted file mode 100644
index fec1332423..0000000000
--- a/ext/soap/tests/schema/schema038.phpt
+++ /dev/null
@@ -1,29 +0,0 @@
---TEST--
-SOAP XML Schema 38: Structure with attributes (ref)
---SKIPIF--
-<?php require_once('skipif.inc'); ?>
---FILE--
-<?php
-include "test_schema.inc";
-$schema = <<<EOF
- <complexType name="testType">
- <sequence>
- <element name="str" type="string"/>
- </sequence>
- <attribute ref="tns:int"/>
- </complexType>
- <attribute name="int" type="int"/>
-EOF;
-test_schema($schema,'type="tns:testType"',(object)array("str"=>"str","int"=>123.5));
-echo "ok";
-?>
---EXPECT--
-<?xml version="1.0" encoding="UTF-8"?>
-<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://test-uri/" 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:test><testParam int="123" xsi:type="ns1:testType"><str xsi:type="xsd:string">str</str></testParam></ns1:test></SOAP-ENV:Body></SOAP-ENV:Envelope>
-object(stdClass)#5 (2) {
- ["str"]=>
- string(3) "str"
- ["int"]=>
- int(123)
-}
-ok
diff --git a/ext/soap/tests/schema/schema039.phpt b/ext/soap/tests/schema/schema039.phpt
deleted file mode 100644
index f392022809..0000000000
--- a/ext/soap/tests/schema/schema039.phpt
+++ /dev/null
@@ -1,31 +0,0 @@
---TEST--
-SOAP XML Schema 39: Structure with attributes (attributeGroup)
---SKIPIF--
-<?php require_once('skipif.inc'); ?>
---FILE--
-<?php
-include "test_schema.inc";
-$schema = <<<EOF
- <complexType name="testType">
- <sequence>
- <element name="str" type="string"/>
- </sequence>
- <attributeGroup ref="tns:intGroup"/>
- </complexType>
- <attributeGroup name="intGroup">
- <attribute name="int" type="int"/>
- </attributeGroup>
-EOF;
-test_schema($schema,'type="tns:testType"',(object)array("str"=>"str","int"=>123.5));
-echo "ok";
-?>
---EXPECT--
-<?xml version="1.0" encoding="UTF-8"?>
-<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://test-uri/" 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:test><testParam int="123" xsi:type="ns1:testType"><str xsi:type="xsd:string">str</str></testParam></ns1:test></SOAP-ENV:Body></SOAP-ENV:Envelope>
-object(stdClass)#5 (2) {
- ["str"]=>
- string(3) "str"
- ["int"]=>
- int(123)
-}
-ok
diff --git a/ext/soap/tests/schema/schema040.phpt b/ext/soap/tests/schema/schema040.phpt
deleted file mode 100644
index 85a1d5c8b2..0000000000
--- a/ext/soap/tests/schema/schema040.phpt
+++ /dev/null
@@ -1,32 +0,0 @@
---TEST--
-SOAP XML Schema 40: Structure with attributes (inline types)
---SKIPIF--
-<?php require_once('skipif.inc'); ?>
---FILE--
-<?php
-include "test_schema.inc";
-$schema = <<<EOF
- <complexType name="testType">
- <sequence>
- <element name="str" type="string"/>
- </sequence>
- <attribute name="int">
- <simpleType>
- <restriction base="int"/>
- </simpleType>
- </attribute>
- </complexType>
-EOF;
-test_schema($schema,'type="tns:testType"',(object)array("str"=>"str","int"=>123.5));
-echo "ok";
-?>
---EXPECT--
-<?xml version="1.0" encoding="UTF-8"?>
-<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://test-uri/" 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:test><testParam int="123" xsi:type="ns1:testType"><str xsi:type="xsd:string">str</str></testParam></ns1:test></SOAP-ENV:Body></SOAP-ENV:Envelope>
-object(stdClass)#5 (2) {
- ["str"]=>
- string(3) "str"
- ["int"]=>
- int(123)
-}
-ok
diff --git a/ext/soap/tests/schema/schema041.phpt b/ext/soap/tests/schema/schema041.phpt
deleted file mode 100644
index 13df8d7902..0000000000
--- a/ext/soap/tests/schema/schema041.phpt
+++ /dev/null
@@ -1,31 +0,0 @@
---TEST--
-SOAP XML Schema 41: Structure (group)
---SKIPIF--
-<?php require_once('skipif.inc'); ?>
---FILE--
-<?php
-include "test_schema.inc";
-$schema = <<<EOF
- <complexType name="testType">
- <group ref="tns:testGroup"/>
- </complexType>
- <group name="testGroup">
- <sequence>
- <element name="int" type="int"/>
- <element name="str" type="string"/>
- </sequence>
- </group>
-EOF;
-test_schema($schema,'type="tns:testType"',(object)array("str"=>"str","int"=>123.5));
-echo "ok";
-?>
---EXPECT--
-<?xml version="1.0" encoding="UTF-8"?>
-<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://test-uri/" 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:test><testParam xsi:type="ns1:testType"><int xsi:type="xsd:int">123</int><str xsi:type="xsd:string">str</str></testParam></ns1:test></SOAP-ENV:Body></SOAP-ENV:Envelope>
-object(stdClass)#5 (2) {
- ["int"]=>
- int(123)
- ["str"]=>
- string(3) "str"
-}
-ok
diff --git a/ext/soap/tests/schema/schema042.phpt b/ext/soap/tests/schema/schema042.phpt
deleted file mode 100644
index eab3059205..0000000000
--- a/ext/soap/tests/schema/schema042.phpt
+++ /dev/null
@@ -1,29 +0,0 @@
---TEST--
-SOAP XML Schema 42: Extension of simple type
---SKIPIF--
-<?php require_once('skipif.inc'); ?>
---FILE--
-<?php
-include "test_schema.inc";
-$schema = <<<EOF
- <complexType name="testType">
- <simpleContent>
- <extension base="int">
- <attribute name="int" type="int"/>
- </extension>
- </simpleContent>
- </complexType>
-EOF;
-test_schema($schema,'type="tns:testType"',(object)array("_"=>123.5,"int"=>123.5));
-echo "ok";
-?>
---EXPECT--
-<?xml version="1.0" encoding="UTF-8"?>
-<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://test-uri/" 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:test><testParam xsi:type="ns1:testType" int="123">123</testParam></ns1:test></SOAP-ENV:Body></SOAP-ENV:Envelope>
-object(stdClass)#5 (2) {
- ["_"]=>
- int(123)
- ["int"]=>
- int(123)
-}
-ok
diff --git a/ext/soap/tests/schema/schema043.phpt b/ext/soap/tests/schema/schema043.phpt
deleted file mode 100644
index b1977b6cb6..0000000000
--- a/ext/soap/tests/schema/schema043.phpt
+++ /dev/null
@@ -1,38 +0,0 @@
---TEST--
-SOAP XML Schema 43: Extension of simple type (2)
---SKIPIF--
-<?php require_once('skipif.inc'); ?>
---FILE--
-<?php
-include "test_schema.inc";
-$schema = <<<EOF
- <complexType name="testType2">
- <simpleContent>
- <extension base="int">
- <attribute name="int" type="int"/>
- </extension>
- </simpleContent>
- </complexType>
- <complexType name="testType">
- <simpleContent>
- <extension base="tns:testType2">
- <attribute name="int2" type="int"/>
- </extension>
- </simpleContent>
- </complexType>
-EOF;
-test_schema($schema,'type="tns:testType"',(object)array("_"=>123.5,"int"=>123.5,"int2"=>123.5));
-echo "ok";
-?>
---EXPECT--
-<?xml version="1.0" encoding="UTF-8"?>
-<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://test-uri/" 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:test><testParam xsi:type="ns1:testType" int="123" int2="123">123</testParam></ns1:test></SOAP-ENV:Body></SOAP-ENV:Envelope>
-object(stdClass)#5 (3) {
- ["_"]=>
- int(123)
- ["int"]=>
- int(123)
- ["int2"]=>
- int(123)
-}
-ok
diff --git a/ext/soap/tests/schema/schema044.phpt b/ext/soap/tests/schema/schema044.phpt
deleted file mode 100644
index b5dbbe1e66..0000000000
--- a/ext/soap/tests/schema/schema044.phpt
+++ /dev/null
@@ -1,29 +0,0 @@
---TEST--
-SOAP XML Schema 44: Restriction of simple type
---SKIPIF--
-<?php require_once('skipif.inc'); ?>
---FILE--
-<?php
-include "test_schema.inc";
-$schema = <<<EOF
- <complexType name="testType">
- <simpleContent>
- <restriction base="int">
- <attribute name="int" type="int"/>
- </restriction>
- </simpleContent>
- </complexType>
-EOF;
-test_schema($schema,'type="tns:testType"',(object)array("_"=>123.5,"int"=>123.5));
-echo "ok";
-?>
---EXPECT--
-<?xml version="1.0" encoding="UTF-8"?>
-<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://test-uri/" 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:test><testParam xsi:type="ns1:testType" int="123">123</testParam></ns1:test></SOAP-ENV:Body></SOAP-ENV:Envelope>
-object(stdClass)#5 (2) {
- ["_"]=>
- int(123)
- ["int"]=>
- int(123)
-}
-ok
diff --git a/ext/soap/tests/schema/schema045.phpt b/ext/soap/tests/schema/schema045.phpt
deleted file mode 100644
index 6410e1e063..0000000000
--- a/ext/soap/tests/schema/schema045.phpt
+++ /dev/null
@@ -1,36 +0,0 @@
---TEST--
-SOAP XML Schema 45: Restriction of simple type (2)
---SKIPIF--
-<?php require_once('skipif.inc'); ?>
---FILE--
-<?php
-include "test_schema.inc";
-$schema = <<<EOF
- <complexType name="testType2">
- <simpleContent>
- <extension base="int">
- <attribute name="int" type="int"/>
- </extension>
- </simpleContent>
- </complexType>
- <complexType name="testType">
- <simpleContent>
- <restriction base="tns:testType2">
- <attribute name="int2" type="int"/>
- </restriction>
- </simpleContent>
- </complexType>
-EOF;
-test_schema($schema,'type="tns:testType"',(object)array("_"=>123.5,"int"=>123.5,"int2"=>123.5));
-echo "ok";
-?>
---EXPECT--
-<?xml version="1.0" encoding="UTF-8"?>
-<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://test-uri/" 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:test><testParam xsi:type="ns1:testType" int2="123">123</testParam></ns1:test></SOAP-ENV:Body></SOAP-ENV:Envelope>
-object(stdClass)#5 (2) {
- ["_"]=>
- int(123)
- ["int2"]=>
- int(123)
-}
-ok
diff --git a/ext/soap/tests/schema/schema046.phpt b/ext/soap/tests/schema/schema046.phpt
deleted file mode 100644
index 3d4695c494..0000000000
--- a/ext/soap/tests/schema/schema046.phpt
+++ /dev/null
@@ -1,38 +0,0 @@
---TEST--
-SOAP XML Schema 46: Extension of complex type
---SKIPIF--
-<?php require_once('skipif.inc'); ?>
---FILE--
-<?php
-include "test_schema.inc";
-$schema = <<<EOF
- <complexType name="testType2">
- <simpleContent>
- <extension base="int">
- <attribute name="int" type="int"/>
- </extension>
- </simpleContent>
- </complexType>
- <complexType name="testType">
- <complexContent>
- <extension base="tns:testType2">
- <attribute name="int2" type="int"/>
- </extension>
- </complexContent>
- </complexType>
-EOF;
-test_schema($schema,'type="tns:testType"',(object)array("_"=>123.5,"int"=>123.5,"int2"=>123.5));
-echo "ok";
-?>
---EXPECT--
-<?xml version="1.0" encoding="UTF-8"?>
-<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://test-uri/" 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:test><testParam xsi:type="ns1:testType" int="123" int2="123">123</testParam></ns1:test></SOAP-ENV:Body></SOAP-ENV:Envelope>
-object(stdClass)#5 (3) {
- ["_"]=>
- int(123)
- ["int"]=>
- int(123)
- ["int2"]=>
- int(123)
-}
-ok
diff --git a/ext/soap/tests/schema/schema047.phpt b/ext/soap/tests/schema/schema047.phpt
deleted file mode 100644
index 497f7ef5d0..0000000000
--- a/ext/soap/tests/schema/schema047.phpt
+++ /dev/null
@@ -1,34 +0,0 @@
---TEST--
-SOAP XML Schema 47: Extension of complex type (2)
---SKIPIF--
-<?php require_once('skipif.inc'); ?>
---FILE--
-<?php
-include "test_schema.inc";
-$schema = <<<EOF
- <complexType name="testType2">
- <sequence>
- <element name="int" type="int"/>
- </sequence>
- </complexType>
- <complexType name="testType">
- <complexContent>
- <extension base="tns:testType2">
- <attribute name="int2" type="int"/>
- </extension>
- </complexContent>
- </complexType>
-EOF;
-test_schema($schema,'type="tns:testType"',(object)array("_"=>123.5,"int"=>123.5,"int2"=>123.5));
-echo "ok";
-?>
---EXPECT--
-<?xml version="1.0" encoding="UTF-8"?>
-<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://test-uri/" 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:test><testParam xsi:type="ns1:testType" int2="123"><int xsi:type="xsd:int">123</int></testParam></ns1:test></SOAP-ENV:Body></SOAP-ENV:Envelope>
-object(stdClass)#5 (2) {
- ["int"]=>
- int(123)
- ["int2"]=>
- int(123)
-}
-ok
diff --git a/ext/soap/tests/schema/schema048.phpt b/ext/soap/tests/schema/schema048.phpt
deleted file mode 100644
index 0fc02e2e66..0000000000
--- a/ext/soap/tests/schema/schema048.phpt
+++ /dev/null
@@ -1,36 +0,0 @@
---TEST--
-SOAP XML Schema 48: Restriction of complex type
---SKIPIF--
-<?php require_once('skipif.inc'); ?>
---FILE--
-<?php
-include "test_schema.inc";
-$schema = <<<EOF
- <complexType name="testType2">
- <simpleContent>
- <extension base="int">
- <attribute name="int" type="int"/>
- </extension>
- </simpleContent>
- </complexType>
- <complexType name="testType">
- <complexContent>
- <restriction base="tns:testType2">
- <attribute name="int2" type="int"/>
- </restriction>
- </complexContent>
- </complexType>
-EOF;
-test_schema($schema,'type="tns:testType"',(object)array("_"=>123.5,"int"=>123.5,"int2"=>123.5));
-echo "ok";
-?>
---EXPECT--
-<?xml version="1.0" encoding="UTF-8"?>
-<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://test-uri/" 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:test><testParam xsi:type="ns1:testType" int2="123">123</testParam></ns1:test></SOAP-ENV:Body></SOAP-ENV:Envelope>
-object(stdClass)#5 (2) {
- ["_"]=>
- int(123)
- ["int2"]=>
- int(123)
-}
-ok
diff --git a/ext/soap/tests/schema/schema049.phpt b/ext/soap/tests/schema/schema049.phpt
deleted file mode 100644
index 4213ba0c8f..0000000000
--- a/ext/soap/tests/schema/schema049.phpt
+++ /dev/null
@@ -1,34 +0,0 @@
---TEST--
-SOAP XML Schema 49: Restriction of complex type (2)
---SKIPIF--
-<?php require_once('skipif.inc'); ?>
---FILE--
-<?php
-include "test_schema.inc";
-$schema = <<<EOF
- <complexType name="testType2">
- <sequence>
- <element name="int" type="int"/>
- </sequence>
- </complexType>
- <complexType name="testType">
- <complexContent>
- <restriction base="tns:testType2">
- <sequence>
- <element name="int2" type="int"/>
- </sequence>
- </restriction>
- </complexContent>
- </complexType>
-EOF;
-test_schema($schema,'type="tns:testType"',(object)array("_"=>123.5,"int"=>123.5,"int2"=>123.5));
-echo "ok";
-?>
---EXPECT--
-<?xml version="1.0" encoding="UTF-8"?>
-<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://test-uri/" 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:test><testParam xsi:type="ns1:testType"><int2 xsi:type="xsd:int">123</int2></testParam></ns1:test></SOAP-ENV:Body></SOAP-ENV:Envelope>
-object(stdClass)#5 (1) {
- ["int2"]=>
- int(123)
-}
-ok
diff --git a/ext/soap/tests/schema/schema050.phpt b/ext/soap/tests/schema/schema050.phpt
deleted file mode 100644
index 925edb133f..0000000000
--- a/ext/soap/tests/schema/schema050.phpt
+++ /dev/null
@@ -1,28 +0,0 @@
---TEST--
-SOAP XML Schema 50: Array in complex type (maxOccurs > 1, one value)
---SKIPIF--
-<?php require_once('skipif.inc'); ?>
---FILE--
-<?php
-include "test_schema.inc";
-$schema = <<<EOF
- <complexType name="testType">
- <sequence>
- <element name="int" type="int"/>
- <element name="int2" type="int" maxOccurs="unbounded"/>
- </sequence>
- </complexType>
-EOF;
-test_schema($schema,'type="tns:testType"',(object)array("int"=>123.5,"int2"=>123.5));
-echo "ok";
-?>
---EXPECT--
-<?xml version="1.0" encoding="UTF-8"?>
-<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://test-uri/" 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:test><testParam xsi:type="ns1:testType"><int xsi:type="xsd:int">123</int><int2 xsi:type="xsd:int">123</int2></testParam></ns1:test></SOAP-ENV:Body></SOAP-ENV:Envelope>
-object(stdClass)#5 (2) {
- ["int"]=>
- int(123)
- ["int2"]=>
- int(123)
-}
-ok
diff --git a/ext/soap/tests/schema/schema051.phpt b/ext/soap/tests/schema/schema051.phpt
deleted file mode 100644
index 582c78eaf4..0000000000
--- a/ext/soap/tests/schema/schema051.phpt
+++ /dev/null
@@ -1,33 +0,0 @@
---TEST--
-SOAP XML Schema 51: Array in complex type (maxOccurs > 1, array)
---SKIPIF--
-<?php require_once('skipif.inc'); ?>
---FILE--
-<?php
-include "test_schema.inc";
-$schema = <<<EOF
- <complexType name="testType">
- <sequence>
- <element name="int" type="int"/>
- <element name="int2" type="int" maxOccurs="unbounded"/>
- </sequence>
- </complexType>
-EOF;
-test_schema($schema,'type="tns:testType"',(object)array("int"=>123.5,"int2"=>array(123.5,456.7)));
-echo "ok";
-?>
---EXPECT--
-<?xml version="1.0" encoding="UTF-8"?>
-<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://test-uri/" 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:test><testParam xsi:type="ns1:testType"><int xsi:type="xsd:int">123</int><int2 xsi:type="xsd:int">123</int2><int2 xsi:type="xsd:int">456</int2></testParam></ns1:test></SOAP-ENV:Body></SOAP-ENV:Envelope>
-object(stdClass)#5 (2) {
- ["int"]=>
- int(123)
- ["int2"]=>
- array(2) {
- [0]=>
- int(123)
- [1]=>
- int(456)
- }
-}
-ok
diff --git a/ext/soap/tests/schema/schema052.phpt b/ext/soap/tests/schema/schema052.phpt
deleted file mode 100644
index 59f6ff811f..0000000000
--- a/ext/soap/tests/schema/schema052.phpt
+++ /dev/null
@@ -1,28 +0,0 @@
---TEST--
-SOAP XML Schema 52: Array in complex type (maxOccurs > 1, array with one value)
---SKIPIF--
-<?php require_once('skipif.inc'); ?>
---FILE--
-<?php
-include "test_schema.inc";
-$schema = <<<EOF
- <complexType name="testType">
- <sequence>
- <element name="int" type="int"/>
- <element name="int2" type="int" maxOccurs="unbounded"/>
- </sequence>
- </complexType>
-EOF;
-test_schema($schema,'type="tns:testType"',(object)array("int"=>123.5,"int2"=>array(123.5)));
-echo "ok";
-?>
---EXPECT--
-<?xml version="1.0" encoding="UTF-8"?>
-<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://test-uri/" 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:test><testParam xsi:type="ns1:testType"><int xsi:type="xsd:int">123</int><int2 xsi:type="xsd:int">123</int2></testParam></ns1:test></SOAP-ENV:Body></SOAP-ENV:Envelope>
-object(stdClass)#5 (2) {
- ["int"]=>
- int(123)
- ["int2"]=>
- int(123)
-}
-ok
diff --git a/ext/soap/tests/schema/schema053.phpt b/ext/soap/tests/schema/schema053.phpt
deleted file mode 100644
index b88115ec29..0000000000
--- a/ext/soap/tests/schema/schema053.phpt
+++ /dev/null
@@ -1,26 +0,0 @@
---TEST--
-SOAP XML Schema 52: Array in complex type (maxOccurs > 1, empty array)
---SKIPIF--
-<?php require_once('skipif.inc'); ?>
---FILE--
-<?php
-include "test_schema.inc";
-$schema = <<<EOF
- <complexType name="testType">
- <sequence>
- <element name="int" type="int"/>
- <element name="int2" type="int" minOccurs="0" maxOccurs="unbounded"/>
- </sequence>
- </complexType>
-EOF;
-test_schema($schema,'type="tns:testType"',(object)array("int"=>123.5,"int2"=>array()));
-echo "ok";
-?>
---EXPECT--
-<?xml version="1.0" encoding="UTF-8"?>
-<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://test-uri/" 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:test><testParam xsi:type="ns1:testType"><int xsi:type="xsd:int">123</int></testParam></ns1:test></SOAP-ENV:Body></SOAP-ENV:Envelope>
-object(stdClass)#5 (1) {
- ["int"]=>
- int(123)
-}
-ok
diff --git a/ext/soap/tests/schema/schema054.phpt b/ext/soap/tests/schema/schema054.phpt
deleted file mode 100644
index fc5cb05761..0000000000
--- a/ext/soap/tests/schema/schema054.phpt
+++ /dev/null
@@ -1,21 +0,0 @@
---TEST--
-SOAP XML Schema 54: Apache Map
---SKIPIF--
-<?php require_once('skipif.inc'); ?>
---FILE--
-<?php
-include "test_schema.inc";
-$schema = '';
-test_schema($schema,'type="apache:Map" xmlns:apache="http://xml.apache.org/xml-soap"',array('a'=>123,'b'=>123.5));
-echo "ok";
-?>
---EXPECT--
-<?xml version="1.0" encoding="UTF-8"?>
-<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://test-uri/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:ns2="http://xml.apache.org/xml-soap" 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:test><testParam xsi:type="ns2:Map"><item><key xsi:type="xsd:string">a</key><value xsi:type="xsd:int">123</value></item><item><key xsi:type="xsd:string">b</key><value xsi:type="xsd:float">123.5</value></item></testParam></ns1:test></SOAP-ENV:Body></SOAP-ENV:Envelope>
-array(2) {
- ["a"]=>
- int(123)
- ["b"]=>
- float(123.5)
-}
-ok
diff --git a/ext/soap/tests/schema/schema055.phpt b/ext/soap/tests/schema/schema055.phpt
deleted file mode 100644
index 013cd92fd8..0000000000
--- a/ext/soap/tests/schema/schema055.phpt
+++ /dev/null
@@ -1,28 +0,0 @@
---TEST--
-SOAP XML Schema 55: Apache Map (extension)
---SKIPIF--
-<?php require_once('skipif.inc'); ?>
---FILE--
-<?php
-include "test_schema.inc";
-$schema = <<<EOF
- <complexType name="testType">
- <complexContent>
- <extension base="apache:Map" xmlns:apache="http://xml.apache.org/xml-soap">
- </extension>
- </complexContent>
- </complexType>
-EOF;
-test_schema($schema,'type="testType"',array('a'=>123,'b'=>123.5));
-echo "ok";
-?>
---EXPECT--
-<?xml version="1.0" encoding="UTF-8"?>
-<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://test-uri/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:ns2="http://xml.apache.org/xml-soap" 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:test><testParam xsi:type="ns2:Map"><item><key xsi:type="xsd:string">a</key><value xsi:type="xsd:int">123</value></item><item><key xsi:type="xsd:string">b</key><value xsi:type="xsd:float">123.5</value></item></testParam></ns1:test></SOAP-ENV:Body></SOAP-ENV:Envelope>
-array(2) {
- ["a"]=>
- int(123)
- ["b"]=>
- float(123.5)
-}
-ok
diff --git a/ext/soap/tests/schema/schema056.phpt b/ext/soap/tests/schema/schema056.phpt
deleted file mode 100644
index 1ada78ea2a..0000000000
--- a/ext/soap/tests/schema/schema056.phpt
+++ /dev/null
@@ -1,29 +0,0 @@
---TEST--
-SOAP XML Schema 56: SOAP 1.1 Array (literal encoding)
---SKIPIF--
-<?php require_once('skipif.inc'); ?>
---FILE--
-<?php
-include "test_schema.inc";
-$schema = <<<EOF
- <complexType name="testType">
- <complexContent>
- <restriction base="SOAP-ENC:Array">
- <attribute ref="SOAP-ENC:arrayType" wsdl:arrayType="int[]"/>
- </restriction>
- </complexContent>
- </complexType>
-EOF;
-test_schema($schema,'type="tns:testType"',array(123,123.5),'rpc','literal');
-echo "ok";
-?>
---EXPECT--
-<?xml version="1.0" encoding="UTF-8"?>
-<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://test-uri/" xmlns:xsd="http://www.w3.org/2001/XMLSchema"><SOAP-ENV:Body><ns1:test><testParam><xsd:int>123</xsd:int><xsd:int>123</xsd:int></testParam></ns1:test></SOAP-ENV:Body></SOAP-ENV:Envelope>
-array(2) {
- [0]=>
- int(123)
- [1]=>
- int(123)
-}
-ok
diff --git a/ext/soap/tests/schema/schema057.phpt b/ext/soap/tests/schema/schema057.phpt
deleted file mode 100644
index 1848b9c24a..0000000000
--- a/ext/soap/tests/schema/schema057.phpt
+++ /dev/null
@@ -1,31 +0,0 @@
---TEST--
-SOAP XML Schema 57: SOAP 1.1 Array (second way, literal encoding)
---SKIPIF--
-<?php require_once('skipif.inc'); ?>
---FILE--
-<?php
-include "test_schema.inc";
-$schema = <<<EOF
- <complexType name="testType">
- <complexContent>
- <restriction base="SOAP-ENC:Array">
- <all>
- <element name="x_item" type="int" maxOccurs="unbounded"/>
- </all>
- </restriction>
- </complexContent>
- </complexType>
-EOF;
-test_schema($schema,'type="tns:testType"',array(123,123.5),'rpc','literal');
-echo "ok";
-?>
---EXPECT--
-<?xml version="1.0" encoding="UTF-8"?>
-<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://test-uri/" xmlns:xsd="http://www.w3.org/2001/XMLSchema"><SOAP-ENV:Body><ns1:test><testParam><x_item>123</x_item><x_item>123</x_item></testParam></ns1:test></SOAP-ENV:Body></SOAP-ENV:Envelope>
-array(2) {
- [0]=>
- int(123)
- [1]=>
- int(123)
-}
-ok
diff --git a/ext/soap/tests/schema/schema058.phpt b/ext/soap/tests/schema/schema058.phpt
deleted file mode 100644
index b96fc9fcca..0000000000
--- a/ext/soap/tests/schema/schema058.phpt
+++ /dev/null
@@ -1,30 +0,0 @@
---TEST--
-SOAP XML Schema 58: SOAP 1.2 Array (literal encoding)
---SKIPIF--
-<?php require_once('skipif.inc'); ?>
---FILE--
-<?php
-include "test_schema.inc";
-$schema = <<<EOF
- <complexType name="testType">
- <complexContent>
- <restriction base="enc12:Array" xmlns:enc12="http://www.w3.org/2003/05/soap-encoding">
- <attribute ref="enc12:itemType" wsdl:itemType="int"/>
- <attribute ref="enc12:arraySize" wsdl:arraySize="*"/>
- </restriction>
- </complexContent>
- </complexType>
-EOF;
-test_schema($schema,'type="tns:testType"',array(123,123.5),'rpc','literal');
-echo "ok";
-?>
---EXPECT--
-<?xml version="1.0" encoding="UTF-8"?>
-<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://test-uri/" xmlns:xsd="http://www.w3.org/2001/XMLSchema"><SOAP-ENV:Body><ns1:test><testParam><xsd:int>123</xsd:int><xsd:int>123</xsd:int></testParam></ns1:test></SOAP-ENV:Body></SOAP-ENV:Envelope>
-array(2) {
- [0]=>
- int(123)
- [1]=>
- int(123)
-}
-ok
diff --git a/ext/soap/tests/schema/schema059.phpt b/ext/soap/tests/schema/schema059.phpt
deleted file mode 100644
index 875bae9868..0000000000
--- a/ext/soap/tests/schema/schema059.phpt
+++ /dev/null
@@ -1,31 +0,0 @@
---TEST--
-SOAP XML Schema 59: SOAP 1.2 Array (second way, literal encoding)
---SKIPIF--
-<?php require_once('skipif.inc'); ?>
---FILE--
-<?php
-include "test_schema.inc";
-$schema = <<<EOF
- <complexType name="testType">
- <complexContent>
- <restriction base="enc12:Array" xmlns:enc12="http://www.w3.org/2003/05/soap-encoding">
- <all>
- <element name="x_item" type="int" maxOccurs="unbounded"/>
- </all>
- </restriction>
- </complexContent>
- </complexType>
-EOF;
-test_schema($schema,'type="tns:testType"',array(123,123.5),'rpc','literal');
-echo "ok";
-?>
---EXPECT--
-<?xml version="1.0" encoding="UTF-8"?>
-<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://test-uri/" xmlns:xsd="http://www.w3.org/2001/XMLSchema"><SOAP-ENV:Body><ns1:test><testParam><x_item>123</x_item><x_item>123</x_item></testParam></ns1:test></SOAP-ENV:Body></SOAP-ENV:Envelope>
-array(2) {
- [0]=>
- int(123)
- [1]=>
- int(123)
-}
-ok
diff --git a/ext/soap/tests/schema/schema060.phpt b/ext/soap/tests/schema/schema060.phpt
deleted file mode 100644
index 4daa83c191..0000000000
--- a/ext/soap/tests/schema/schema060.phpt
+++ /dev/null
@@ -1,36 +0,0 @@
---TEST--
-SOAP XML Schema 60: SOAP 1.2 Multidimensional array (literal encoding)
---SKIPIF--
-<?php require_once('skipif.inc'); ?>
---FILE--
-<?php
-include "test_schema.inc";
-$schema = <<<EOF
- <complexType name="testType">
- <complexContent>
- <restriction base="enc12:Array" xmlns:enc12="http://www.w3.org/2003/05/soap-encoding">
- <attribute ref="enc12:itemType" wsdl:itemType="int"/>
- <attribute ref="enc12:arraySize" wsdl:arraySize="* 1"/>
- </restriction>
- </complexContent>
- </complexType>
-EOF;
-test_schema($schema,'type="tns:testType"',array(array(123),array(123.5)),'rpc','literal');
-echo "ok";
-?>
---EXPECT--
-<?xml version="1.0" encoding="UTF-8"?>
-<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://test-uri/" xmlns:xsd="http://www.w3.org/2001/XMLSchema"><SOAP-ENV:Body><ns1:test><testParam><xsd:int>123</xsd:int><xsd:int>123</xsd:int></testParam></ns1:test></SOAP-ENV:Body></SOAP-ENV:Envelope>
-array(2) {
- [0]=>
- array(1) {
- [0]=>
- int(123)
- }
- [1]=>
- array(1) {
- [0]=>
- int(123)
- }
-}
-ok
diff --git a/ext/soap/tests/schema/schema061.phpt b/ext/soap/tests/schema/schema061.phpt
deleted file mode 100644
index bbd2aa6579..0000000000
--- a/ext/soap/tests/schema/schema061.phpt
+++ /dev/null
@@ -1,38 +0,0 @@
---TEST--
-SOAP XML Schema 61: SOAP 1.2 Multidimensional array (second way, literal encoding)
---SKIPIF--
-<?php require_once('skipif.inc'); ?>
---FILE--
-<?php
-include "test_schema.inc";
-$schema = <<<EOF
- <complexType name="testType">
- <complexContent>
- <restriction base="enc12:Array" xmlns:enc12="http://www.w3.org/2003/05/soap-encoding">
- <all>
- <element name="x_item" type="int" maxOccurs="unbounded"/>
- </all>
- <attribute ref="enc12:arraySize" wsdl:arraySize="* 1"/>
- </restriction>
- </complexContent>
- </complexType>
-EOF;
-test_schema($schema,'type="tns:testType"',array(array(123),array(123.5)),'rpc','literal');
-echo "ok";
-?>
---EXPECT--
-<?xml version="1.0" encoding="UTF-8"?>
-<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://test-uri/" xmlns:xsd="http://www.w3.org/2001/XMLSchema"><SOAP-ENV:Body><ns1:test><testParam><x_item>123</x_item><x_item>123</x_item></testParam></ns1:test></SOAP-ENV:Body></SOAP-ENV:Envelope>
-array(2) {
- [0]=>
- array(1) {
- [0]=>
- int(123)
- }
- [1]=>
- array(1) {
- [0]=>
- int(123)
- }
-}
-ok
diff --git a/ext/soap/tests/schema/schema062.phpt b/ext/soap/tests/schema/schema062.phpt
deleted file mode 100644
index e95c2959c8..0000000000
--- a/ext/soap/tests/schema/schema062.phpt
+++ /dev/null
@@ -1,29 +0,0 @@
---TEST--
-SOAP XML Schema 62: NULL with attributes
---SKIPIF--
-<?php require_once('skipif.inc'); ?>
---FILE--
-<?php
-include "test_schema.inc";
-$schema = <<<EOF
- <complexType name="testType">
- <simpleContent>
- <restriction base="int">
- <attribute name="int" type="int"/>
- </restriction>
- </simpleContent>
- </complexType>
-EOF;
-test_schema($schema,'type="tns:testType"',(object)array("_"=>NULL,"int"=>123.5));
-echo "ok";
-?>
---EXPECT--
-<?xml version="1.0" encoding="UTF-8"?>
-<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://test-uri/" 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:test><testParam xsi:nil="1" int="123" xsi:type="ns1:testType"/></ns1:test></SOAP-ENV:Body></SOAP-ENV:Envelope>
-object(stdClass)#5 (2) {
- ["_"]=>
- NULL
- ["int"]=>
- int(123)
-}
-ok
diff --git a/ext/soap/tests/schema/schema063.phpt b/ext/soap/tests/schema/schema063.phpt
deleted file mode 100644
index 4c88b5e036..0000000000
--- a/ext/soap/tests/schema/schema063.phpt
+++ /dev/null
@@ -1,16 +0,0 @@
---TEST--
-SOAP XML Schema 63: standard unsignedLong type
---SKIPIF--
-<?php require_once('skipif.inc'); ?>
---FILE--
-<?php
-include "test_schema.inc";
-$schema = '';
-test_schema($schema,'type="xsd:unsignedLong"',0xffffffff);
-echo "ok";
-?>
---EXPECT--
-<?xml version="1.0" encoding="UTF-8"?>
-<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://test-uri/" 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:test><testParam xsi:type="xsd:unsignedLong">4294967295</testParam></ns1:test></SOAP-ENV:Body></SOAP-ENV:Envelope>
-float(4294967295)
-ok
diff --git a/ext/soap/tests/schema/schema064.phpt b/ext/soap/tests/schema/schema064.phpt
deleted file mode 100644
index b2b5db7ee0..0000000000
--- a/ext/soap/tests/schema/schema064.phpt
+++ /dev/null
@@ -1,57 +0,0 @@
---TEST--
-SOAP XML Schema 64: standard date/time types
---SKIPIF--
-<?php require_once('skipif.inc'); ?>
---FILE--
-<?php
-include "test_schema.inc";
-$schema = <<<EOF
- <complexType name="testType">
- <sequence>
- <element name="dateTime" type="dateTime"/>
- <element name="time" type="time"/>
- <element name="date" type="date"/>
- <element name="gYearMonth" type="gYearMonth"/>
- <element name="gYear" type="gYear"/>
- <element name="gMonthDay" type="gMonthDay"/>
- <element name="gDay" type="gDay"/>
- <element name="gMonth" type="gMonth"/>
- </sequence>
- </complexType>
-EOF;
-$date = gmmktime(1,2,3,4,5,1976);
-putenv('TZ=GMT');
-test_schema($schema,'type="tns:testType"',array(
- 'dateTime' => $date,
- 'time' => $date,
- 'date' => $date,
- 'gYearMonth' => $date,
- 'gYear' => $date,
- 'gMonthDay' => $date,
- 'gDay' => $date,
- 'gMonth' => $date
-));
-echo "ok";
-?>
---EXPECT--
-<?xml version="1.0" encoding="UTF-8"?>
-<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://test-uri/" 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:test><testParam xsi:type="ns1:testType"><dateTime xsi:type="xsd:dateTime">1976-04-05T01:02:03Z</dateTime><time xsi:type="xsd:time">01:02:03Z</time><date xsi:type="xsd:date">1976-04-05Z</date><gYearMonth xsi:type="xsd:gYearMonth">1976-04Z</gYearMonth><gYear xsi:type="xsd:gYear">1976Z</gYear><gMonthDay xsi:type="xsd:gMonthDay">--04-05Z</gMonthDay><gDay xsi:type="xsd:gDay">---05Z</gDay><gMonth xsi:type="xsd:gMonth">--04--Z</gMonth></testParam></ns1:test></SOAP-ENV:Body></SOAP-ENV:Envelope>
-object(stdClass)#4 (8) {
- ["dateTime"]=>
- string(20) "1976-04-05T01:02:03Z"
- ["time"]=>
- string(9) "01:02:03Z"
- ["date"]=>
- string(11) "1976-04-05Z"
- ["gYearMonth"]=>
- string(8) "1976-04Z"
- ["gYear"]=>
- string(5) "1976Z"
- ["gMonthDay"]=>
- string(8) "--04-05Z"
- ["gDay"]=>
- string(6) "---05Z"
- ["gMonth"]=>
- string(7) "--04--Z"
-}
-ok
diff --git a/ext/soap/tests/schema/schema065.phpt b/ext/soap/tests/schema/schema065.phpt
deleted file mode 100644
index eb768ed851..0000000000
--- a/ext/soap/tests/schema/schema065.phpt
+++ /dev/null
@@ -1,26 +0,0 @@
---TEST--
-SOAP XML Schema 65: Attribute with default value
---SKIPIF--
-<?php require_once('skipif.inc'); ?>
---FILE--
-<?php
-include "test_schema.inc";
-$schema = <<<EOF
- <complexType name="testType">
- <attribute name="str" type="string"/>
- <attribute name="int" type="int" default="5"/>
- </complexType>
-EOF;
-test_schema($schema,'type="tns:testType"',(object)array("str"=>"str"));
-echo "ok";
-?>
---EXPECT--
-<?xml version="1.0" encoding="UTF-8"?>
-<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://test-uri/" 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:test><testParam str="str" xsi:type="ns1:testType"/></ns1:test></SOAP-ENV:Body></SOAP-ENV:Envelope>
-object(stdClass)#5 (2) {
- ["str"]=>
- string(3) "str"
- ["int"]=>
- int(5)
-}
-ok
diff --git a/ext/soap/tests/schema/schema066.phpt b/ext/soap/tests/schema/schema066.phpt
deleted file mode 100644
index 2f2b062424..0000000000
--- a/ext/soap/tests/schema/schema066.phpt
+++ /dev/null
@@ -1,26 +0,0 @@
---TEST--
-SOAP XML Schema 66: Attribute with fixed value (1)
---SKIPIF--
-<?php require_once('skipif.inc'); ?>
---FILE--
-<?php
-include "test_schema.inc";
-$schema = <<<EOF
- <complexType name="testType">
- <attribute name="str" type="string"/>
- <attribute name="int" type="int" fixed="5"/>
- </complexType>
-EOF;
-test_schema($schema,'type="tns:testType"',(object)array("str"=>"str"));
-echo "ok";
-?>
---EXPECT--
-<?xml version="1.0" encoding="UTF-8"?>
-<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://test-uri/" 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:test><testParam str="str" xsi:type="ns1:testType"/></ns1:test></SOAP-ENV:Body></SOAP-ENV:Envelope>
-object(stdClass)#5 (2) {
- ["str"]=>
- string(3) "str"
- ["int"]=>
- int(5)
-}
-ok
diff --git a/ext/soap/tests/schema/schema067.phpt b/ext/soap/tests/schema/schema067.phpt
deleted file mode 100644
index 8aa08d2d2b..0000000000
--- a/ext/soap/tests/schema/schema067.phpt
+++ /dev/null
@@ -1,26 +0,0 @@
---TEST--
-SOAP XML Schema 67: Attribute with fixed value (2)
---SKIPIF--
-<?php require_once('skipif.inc'); ?>
---FILE--
-<?php
-include "test_schema.inc";
-$schema = <<<EOF
- <complexType name="testType">
- <attribute name="str" type="string"/>
- <attribute name="int" type="int" fixed="5"/>
- </complexType>
-EOF;
-test_schema($schema,'type="tns:testType"',(object)array("str"=>"str","int"=>5));
-echo "ok";
-?>
---EXPECT--
-<?xml version="1.0" encoding="UTF-8"?>
-<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://test-uri/" 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:test><testParam str="str" int="5" xsi:type="ns1:testType"/></ns1:test></SOAP-ENV:Body></SOAP-ENV:Envelope>
-object(stdClass)#5 (2) {
- ["str"]=>
- string(3) "str"
- ["int"]=>
- int(5)
-}
-ok
diff --git a/ext/soap/tests/schema/schema068.phpt b/ext/soap/tests/schema/schema068.phpt
deleted file mode 100644
index 88fdac334f..0000000000
--- a/ext/soap/tests/schema/schema068.phpt
+++ /dev/null
@@ -1,18 +0,0 @@
---TEST--
-SOAP XML Schema 68: Attribute with fixed value (3)
---SKIPIF--
-<?php require_once('skipif.inc'); ?>
---FILE--
-<?php
-include "test_schema.inc";
-$schema = <<<EOF
- <complexType name="testType">
- <attribute name="str" type="string"/>
- <attribute name="int" type="int" fixed="5"/>
- </complexType>
-EOF;
-test_schema($schema,'type="tns:testType"',(object)array("str"=>"str","int"=>4));
-echo "ok";
-?>
---EXPECTF--
-Fatal error: SOAP-ERROR: Encoding: Attribute 'int' has fixed value '5' (value '4' is not allowed) in %stest_schema.inc on line %d \ No newline at end of file
diff --git a/ext/soap/tests/schema/schema069.phpt b/ext/soap/tests/schema/schema069.phpt
deleted file mode 100644
index 67df500906..0000000000
--- a/ext/soap/tests/schema/schema069.phpt
+++ /dev/null
@@ -1,27 +0,0 @@
---TEST--
-SOAP XML Schema 69: Attribute with default value (reference)
---SKIPIF--
-<?php require_once('skipif.inc'); ?>
---FILE--
-<?php
-include "test_schema.inc";
-$schema = <<<EOF
- <complexType name="testType">
- <attribute name="str" type="string"/>
- <attribute ref="tns:int"/>
- </complexType>
- <attribute name="int" type="int" default="5"/>
-EOF;
-test_schema($schema,'type="tns:testType"',(object)array("str"=>"str"));
-echo "ok";
-?>
---EXPECT--
-<?xml version="1.0" encoding="UTF-8"?>
-<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://test-uri/" 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:test><testParam str="str" xsi:type="ns1:testType"/></ns1:test></SOAP-ENV:Body></SOAP-ENV:Envelope>
-object(stdClass)#5 (2) {
- ["str"]=>
- string(3) "str"
- ["int"]=>
- int(5)
-}
-ok
diff --git a/ext/soap/tests/schema/schema070.phpt b/ext/soap/tests/schema/schema070.phpt
deleted file mode 100644
index f9171923c0..0000000000
--- a/ext/soap/tests/schema/schema070.phpt
+++ /dev/null
@@ -1,29 +0,0 @@
---TEST--
-SOAP XML Schema 70: Attribute with default value (attributeGroup)
---SKIPIF--
-<?php require_once('skipif.inc'); ?>
---FILE--
-<?php
-include "test_schema.inc";
-$schema = <<<EOF
- <complexType name="testType">
- <attribute name="str" type="string"/>
- <attributeGroup ref="tns:int_group"/>
- </complexType>
- <attributeGroup name="int_group">
- <attribute name="int" type="int" default="5"/>
- </attributeGroup>
-EOF;
-test_schema($schema,'type="tns:testType"',(object)array("str"=>"str"));
-echo "ok";
-?>
---EXPECT--
-<?xml version="1.0" encoding="UTF-8"?>
-<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://test-uri/" 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:test><testParam str="str" xsi:type="ns1:testType"/></ns1:test></SOAP-ENV:Body></SOAP-ENV:Envelope>
-object(stdClass)#5 (2) {
- ["str"]=>
- string(3) "str"
- ["int"]=>
- int(5)
-}
-ok
diff --git a/ext/soap/tests/schema/schema071.phpt b/ext/soap/tests/schema/schema071.phpt
deleted file mode 100644
index 1991f7ad8e..0000000000
--- a/ext/soap/tests/schema/schema071.phpt
+++ /dev/null
@@ -1,23 +0,0 @@
---TEST--
-SOAP XML Schema 71: SOAP 1.1 Array (document style)
---SKIPIF--
-<?php require_once('skipif.inc'); ?>
---FILE--
-<?php
-include "test_schema.inc";
-$schema = <<<EOF
- <complexType name="testType">
- <complexContent>
- <restriction base="SOAP-ENC:Array">
- <attribute ref="SOAP-ENC:arrayType" wsdl:arrayType="int[]"/>
- </restriction>
- </complexContent>
- </complexType>
-EOF;
-test_schema($schema,'type="tns:testType"',array(123,123.5),'document','literal');
-echo "ok";
-?>
---EXPECT--
-<?xml version="1.0" encoding="UTF-8"?>
-<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema"><SOAP-ENV:Body><testParam><xsd:int>123</xsd:int><xsd:int>123</xsd:int></testParam></SOAP-ENV:Body></SOAP-ENV:Envelope>
-ok
diff --git a/ext/soap/tests/schema/schema072.phpt b/ext/soap/tests/schema/schema072.phpt
deleted file mode 100644
index 89a0ed3597..0000000000
--- a/ext/soap/tests/schema/schema072.phpt
+++ /dev/null
@@ -1,25 +0,0 @@
---TEST--
-SOAP XML Schema 72: SOAP 1.1 Array (document style, element with inline type)
---SKIPIF--
-<?php require_once('skipif.inc'); ?>
---FILE--
-<?php
-include "test_schema.inc";
-$schema = <<<EOF
- <element name="testElement">
- <complexType name="testType">
- <complexContent>
- <restriction base="SOAP-ENC:Array">
- <attribute ref="SOAP-ENC:arrayType" wsdl:arrayType="int[]"/>
- </restriction>
- </complexContent>
- </complexType>
- </element>
-EOF;
-test_schema($schema,'element="tns:testElement"',array(123,123.5),'document','literal');
-echo "ok";
-?>
---EXPECT--
-<?xml version="1.0" encoding="UTF-8"?>
-<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:ns1="http://test-uri/"><SOAP-ENV:Body><ns1:testElement><xsd:int>123</xsd:int><xsd:int>123</xsd:int></ns1:testElement></SOAP-ENV:Body></SOAP-ENV:Envelope>
-ok
diff --git a/ext/soap/tests/schema/schema073.phpt b/ext/soap/tests/schema/schema073.phpt
deleted file mode 100644
index 22dd9e2604..0000000000
--- a/ext/soap/tests/schema/schema073.phpt
+++ /dev/null
@@ -1,24 +0,0 @@
---TEST--
-SOAP XML Schema 73: SOAP 1.1 Array (document style, element with type ref)
---SKIPIF--
-<?php require_once('skipif.inc'); ?>
---FILE--
-<?php
-include "test_schema.inc";
-$schema = <<<EOF
- <element name="testElement" type="tns:testType"/>
- <complexType name="testType">
- <complexContent>
- <restriction base="SOAP-ENC:Array">
- <attribute ref="SOAP-ENC:arrayType" wsdl:arrayType="int[]"/>
- </restriction>
- </complexContent>
- </complexType>
-EOF;
-test_schema($schema,'element="tns:testElement"',array(123,123.5),'document','literal');
-echo "ok";
-?>
---EXPECT--
-<?xml version="1.0" encoding="UTF-8"?>
-<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:ns1="http://test-uri/"><SOAP-ENV:Body><ns1:testElement><xsd:int>123</xsd:int><xsd:int>123</xsd:int></ns1:testElement></SOAP-ENV:Body></SOAP-ENV:Envelope>
-ok
diff --git a/ext/soap/tests/schema/skipif.inc b/ext/soap/tests/schema/skipif.inc
deleted file mode 100644
index fa8574e6a2..0000000000
--- a/ext/soap/tests/schema/skipif.inc
+++ /dev/null
@@ -1,3 +0,0 @@
-<?php
- if (!extension_loaded('soap')) die('skip soap extension not available');
-?>
diff --git a/ext/soap/tests/schema/test_schema.inc b/ext/soap/tests/schema/test_schema.inc
deleted file mode 100644
index 64635a10ca..0000000000
--- a/ext/soap/tests/schema/test_schema.inc
+++ /dev/null
@@ -1,74 +0,0 @@
-<?php
-$val = null;
-
-function test($input) {
- global $val;
- $val = $input;
-}
-
-function test_schema($schema,$type,$param,$style="rpc",$use="encoded") {
- global $HTTP_RAW_POST_DATA, $val;
-$wsdl = <<<EOF
-<definitions name="InteropTest"
- xmlns:xsd="http://www.w3.org/2001/XMLSchema"
- xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"
- xmlns:tns="http://test-uri/"
- xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
- xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
- xmlns="http://schemas.xmlsoap.org/wsdl/"
- targetNamespace="http://test-uri/">
- <types>
- <schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="http://test-uri/">
- <xsd:import namespace="http://schemas.xmlsoap.org/soap/encoding/" />
- <xsd:import namespace="http://schemas.xmlsoap.org/wsdl/" />
- $schema
- </schema>
- </types>
- <message name="testMessage">
- <part name="testParam" $type/>
- </message>
- <portType name="testPortType">
- <operation name="test">
- <input message="testMessage"/>
- </operation>
- </portType>
- <binding name="testBinding" type="testPortType">
- <soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/>
- <operation name="test">
- <soap:operation soapAction="#test" style="$style"/>
- <input>
- <soap:body parts="body" use="$use" namespace="http://test-uri/" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
- </input>
- </operation>
- </binding>
- <service name="testService">
- <port name="testPort" binding="tns:testBinding">
- <soap:address location="test://" />
- </port>
- </service>
-</definitions>
-EOF;
-
- $fname = tempnam ("./", "wsdl");
- $f = fopen($fname,"w");
- fwrite($f,$wsdl);
- fclose($f);
- ini_set("soap.wsdl_cache_enabled",0);
- $x = new SoapClient($fname, array("trace"=>1,"exceptions"=>0));
- $y = new SoapServer($fname);
- $y->addfunction("test");
- unlink($fname);
-
- $x->test($param);
- $xml = xml_parser_create();
- $req = $x->__getlastrequest();
- echo $req;
- if ($style == "rpc") {
- $HTTP_RAW_POST_DATA = $req;
- ob_start();
- $y->handle();
- ob_end_clean();
- var_dump($val);
- }
-}
-?> \ No newline at end of file
diff --git a/ext/soap/tests/server001.phpt b/ext/soap/tests/server001.phpt
deleted file mode 100644
index 582759f06f..0000000000
--- a/ext/soap/tests/server001.phpt
+++ /dev/null
@@ -1,33 +0,0 @@
---TEST--
-SOAP Server 1: new/addfunction/handle
---SKIPIF--
-<?php require_once('skipif.inc'); ?>
---FILE--
-<?php
-function test() {
- return "Hello World";
-}
-
-$server = new soapserver(null,array('uri'=>"http://testuri.org"));
-$server->addfunction("test");
-
-$HTTP_RAW_POST_DATA = <<<EOF
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<SOAP-ENV:Envelope
- SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
- xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
- xmlns:xsd="http://www.w3.org/2001/XMLSchema"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xmlns:si="http://soapinterop.org/xsd">
- <SOAP-ENV:Body>
- <ns1:test xmlns:ns1="http://testuri.org" />
- </SOAP-ENV:Body>
-</SOAP-ENV:Envelope>
-EOF;
-$server->handle();
-echo "ok\n";
-?>
---EXPECT--
-<?xml version="1.0" encoding="UTF-8"?>
-<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://testuri.org" 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:testResponse><return xsi:type="xsd:string">Hello World</return></ns1:testResponse></SOAP-ENV:Body></SOAP-ENV:Envelope>
-ok
diff --git a/ext/soap/tests/server002.phpt b/ext/soap/tests/server002.phpt
deleted file mode 100644
index 8416f4fb08..0000000000
--- a/ext/soap/tests/server002.phpt
+++ /dev/null
@@ -1,37 +0,0 @@
---TEST--
-SOAP Server 2: function with parameters and result
---SKIPIF--
-<?php require_once('skipif.inc'); ?>
---FILE--
-<?php
-function Add($x,$y) {
- return $x+$y;
-}
-
-$server = new soapserver(null,array('uri'=>"http://testuri.org"));
-$server->addfunction("Add");
-
-$HTTP_RAW_POST_DATA = <<<EOF
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<SOAP-ENV:Envelope
- SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
- xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
- xmlns:xsd="http://www.w3.org/2001/XMLSchema"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xmlns:si="http://soapinterop.org/xsd">
- <SOAP-ENV:Body>
- <ns1:Add xmlns:ns1="http://testuri.org">
- <x xsi:type="xsd:int">22</x>
- <y xsi:type="xsd:int">33</y>
- </ns1:Add>
- </SOAP-ENV:Body>
-</SOAP-ENV:Envelope>
-EOF;
-
-$server->handle();
-echo "ok\n";
-?>
---EXPECT--
-<?xml version="1.0" encoding="UTF-8"?>
-<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://testuri.org" 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:AddResponse><return xsi:type="xsd:int">55</return></ns1:AddResponse></SOAP-ENV:Body></SOAP-ENV:Envelope>
-ok
diff --git a/ext/soap/tests/server003.phpt b/ext/soap/tests/server003.phpt
deleted file mode 100644
index d4a15e0d69..0000000000
--- a/ext/soap/tests/server003.phpt
+++ /dev/null
@@ -1,32 +0,0 @@
---TEST--
-SOAP Server 3: all functions
---SKIPIF--
-<?php require_once('skipif.inc'); ?>
---FILE--
-<?php
-$server = new soapserver(null,array('uri'=>"http://testuri.org"));
-$server->addfunction(SOAP_FUNCTIONS_ALL);
-
-$HTTP_RAW_POST_DATA = <<<EOF
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<SOAP-ENV:Envelope
- SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
- xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
- xmlns:xsd="http://www.w3.org/2001/XMLSchema"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xmlns:si="http://soapinterop.org/xsd">
- <SOAP-ENV:Body>
- <ns1:strlen xmlns:ns1="http://testuri.org">
- <x xsi:type="xsd:string">Hello World</x>
- </ns1:strlen>
- </SOAP-ENV:Body>
-</SOAP-ENV:Envelope>
-EOF;
-
-$server->handle();
-echo "ok\n";
-?>
---EXPECT--
-<?xml version="1.0" encoding="UTF-8"?>
-<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://testuri.org" 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:strlenResponse><return xsi:type="xsd:int">11</return></ns1:strlenResponse></SOAP-ENV:Body></SOAP-ENV:Envelope>
-ok
diff --git a/ext/soap/tests/server004.phpt b/ext/soap/tests/server004.phpt
deleted file mode 100644
index 5bfef4fcd4..0000000000
--- a/ext/soap/tests/server004.phpt
+++ /dev/null
@@ -1,40 +0,0 @@
---TEST--
-SOAP Server 4: addfunctions
---SKIPIF--
-<?php require_once('skipif.inc'); ?>
---FILE--
-<?php
-function Add($x,$y) {
- return $x+$y;
-}
-function Sub($x,$y) {
- return $x-$y;
-}
-
-$server = new soapserver(null,array('uri'=>"http://testuri.org"));
-$server->addfunction(array("Sub","Add"));
-
-$HTTP_RAW_POST_DATA = <<<EOF
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<SOAP-ENV:Envelope
- SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
- xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
- xmlns:xsd="http://www.w3.org/2001/XMLSchema"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xmlns:si="http://soapinterop.org/xsd">
- <SOAP-ENV:Body>
- <ns1:Add xmlns:ns1="http://testuri.org">
- <x xsi:type="xsd:int">22</x>
- <y xsi:type="xsd:int">33</y>
- </ns1:Add>
- </SOAP-ENV:Body>
-</SOAP-ENV:Envelope>
-EOF;
-
-$server->handle();
-echo "ok\n";
-?>
---EXPECT--
-<?xml version="1.0" encoding="UTF-8"?>
-<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://testuri.org" 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:AddResponse><return xsi:type="xsd:int">55</return></ns1:AddResponse></SOAP-ENV:Body></SOAP-ENV:Envelope>
-ok
diff --git a/ext/soap/tests/server005.phpt b/ext/soap/tests/server005.phpt
deleted file mode 100644
index 4aae3b2d99..0000000000
--- a/ext/soap/tests/server005.phpt
+++ /dev/null
@@ -1,36 +0,0 @@
---TEST--
-SOAP Server 5: setclass
---SKIPIF--
-<?php require_once('skipif.inc'); ?>
---FILE--
-<?php
-class Foo {
- function test() {
- return "Hello World";
- }
-}
-
-$server = new soapserver(null,array('uri'=>"http://testuri.org"));
-$server->setclass("Foo");
-
-$HTTP_RAW_POST_DATA = <<<EOF
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<SOAP-ENV:Envelope
- SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
- xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
- xmlns:xsd="http://www.w3.org/2001/XMLSchema"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xmlns:si="http://soapinterop.org/xsd">
- <SOAP-ENV:Body>
- <ns1:test xmlns:ns1="http://testuri.org" />
- </SOAP-ENV:Body>
-</SOAP-ENV:Envelope>
-EOF;
-
-$server->handle();
-echo "ok\n";
-?>
---EXPECT--
-<?xml version="1.0" encoding="UTF-8"?>
-<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://testuri.org" 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:testResponse><return xsi:type="xsd:string">Hello World</return></ns1:testResponse></SOAP-ENV:Body></SOAP-ENV:Envelope>
-ok
diff --git a/ext/soap/tests/server006.phpt b/ext/soap/tests/server006.phpt
deleted file mode 100644
index f382d9f2f1..0000000000
--- a/ext/soap/tests/server006.phpt
+++ /dev/null
@@ -1,42 +0,0 @@
---TEST--
-SOAP Server 6: setclass with constructor
---SKIPIF--
-<?php require_once('skipif.inc'); ?>
---FILE--
-<?php
-class Foo {
- private $str = "";
-
- function Foo($str) {
- $this->str = $str . " World";
- }
-
- function test() {
- return $this->str;
- }
-}
-
-$server = new soapserver(null,array('uri'=>"http://testuri.org"));
-$server->setclass("Foo","Hello");
-
-$HTTP_RAW_POST_DATA = <<<EOF
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<SOAP-ENV:Envelope
- SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
- xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
- xmlns:xsd="http://www.w3.org/2001/XMLSchema"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xmlns:si="http://soapinterop.org/xsd">
- <SOAP-ENV:Body>
- <ns1:test xmlns:ns1="http://testuri.org" />
- </SOAP-ENV:Body>
-</SOAP-ENV:Envelope>
-EOF;
-
-$server->handle();
-echo "ok\n";
-?>
---EXPECT--
-<?xml version="1.0" encoding="UTF-8"?>
-<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://testuri.org" 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:testResponse><return xsi:type="xsd:string">Hello World</return></ns1:testResponse></SOAP-ENV:Body></SOAP-ENV:Envelope>
-ok
diff --git a/ext/soap/tests/server007.phpt b/ext/soap/tests/server007.phpt
deleted file mode 100644
index 676aa56c44..0000000000
--- a/ext/soap/tests/server007.phpt
+++ /dev/null
@@ -1,26 +0,0 @@
---TEST--
-SOAP Server 7: addfunction and getfunctions
---SKIPIF--
-<?php require_once('skipif.inc'); ?>
---FILE--
-<?php
-function Add($x,$y) {
- return $x+$y;
-}
-function Sub($x,$y) {
- return $x-$y;
-}
-
-$server = new soapserver(null,array('uri'=>"http://testuri.org"));
-$server->addfunction(array("Sub","Add"));
-var_dump($server->getfunctions());
-echo "ok\n";
-?>
---EXPECT--
-array(2) {
- [0]=>
- string(3) "Sub"
- [1]=>
- string(3) "Add"
-}
-ok
diff --git a/ext/soap/tests/server008.phpt b/ext/soap/tests/server008.phpt
deleted file mode 100644
index 87fb69d25f..0000000000
--- a/ext/soap/tests/server008.phpt
+++ /dev/null
@@ -1,29 +0,0 @@
---TEST--
-SOAP Server 8: setclass and getfunctions
---SKIPIF--
-<?php require_once('skipif.inc'); ?>
---FILE--
-<?php
-class Foo {
-
- function Foo() {
- }
-
- function test() {
- return $this->str;
- }
-}
-
-$server = new soapserver(null,array('uri'=>"http://testuri.org"));
-$server->setclass("Foo");
-var_dump($server->getfunctions());
-echo "ok\n";
-?>
---EXPECT--
-array(2) {
- [0]=>
- string(3) "Foo"
- [1]=>
- string(4) "test"
-}
-ok
diff --git a/ext/soap/tests/server009.phpt b/ext/soap/tests/server009.phpt
deleted file mode 100644
index 0a7b30f40c..0000000000
--- a/ext/soap/tests/server009.phpt
+++ /dev/null
@@ -1,66 +0,0 @@
---TEST--
-SOAP Server 9: setclass and setpersistence(SOAP_PERSISTENCE_SESSION)
---SKIPIF--
-<?php
- require_once('skipif.inc');
- if (!extension_loaded('session')) {
- die('skip this test needs session extension');
- }
-?>
---FILE--
-<?php
-class foo {
- private $sum = 0;
-
- function Sum($num) {
- return $this->sum += $num;
- }
-}
-
-$server = new soapserver(null,array('uri'=>"http://testuri.org"));
-$server->setclass("foo");
-$server->setpersistence(SOAP_PERSISTENCE_SESSION);
-
-ob_start();
-$HTTP_RAW_POST_DATA = <<<EOF
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<SOAP-ENV:Envelope
- SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
- xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
- xmlns:xsd="http://www.w3.org/2001/XMLSchema"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xmlns:si="http://soapinterop.org/xsd">
- <SOAP-ENV:Body>
- <ns1:Sum xmlns:ns1="http://testuri.org">
- <num xsi:type="xsd:int">5</num>
- </ns1:Sum>
- </SOAP-ENV:Body>
-</SOAP-ENV:Envelope>
-EOF;
-$server->handle();
-ob_clean();
-
-$HTTP_RAW_POST_DATA = <<<EOF
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<SOAP-ENV:Envelope
- SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
- xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
- xmlns:xsd="http://www.w3.org/2001/XMLSchema"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xmlns:si="http://soapinterop.org/xsd">
- <SOAP-ENV:Body>
- <ns1:Sum xmlns:ns1="http://testuri.org">
- <num xsi:type="xsd:int">3</num>
- </ns1:Sum>
- </SOAP-ENV:Body>
-</SOAP-ENV:Envelope>
-EOF;
-$server->handle();
-ob_end_flush();
-
-echo "ok\n";
-?>
---EXPECT--
-<?xml version="1.0" encoding="UTF-8"?>
-<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://testuri.org" 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:SumResponse><return xsi:type="xsd:int">8</return></ns1:SumResponse></SOAP-ENV:Body></SOAP-ENV:Envelope>
-ok
diff --git a/ext/soap/tests/server010.phpt b/ext/soap/tests/server010.phpt
deleted file mode 100644
index 76cc1e6949..0000000000
--- a/ext/soap/tests/server010.phpt
+++ /dev/null
@@ -1,61 +0,0 @@
---TEST--
-SOAP Server 10: setclass and setpersistence(SOAP_PERSISTENCE_REQUEST)
---SKIPIF--
-<?php require_once('skipif.inc'); ?>
---FILE--
-<?php
-class foo {
- private $sum = 0;
-
- function Sum($num) {
- return $this->sum += $num;
- }
-}
-
-$server = new soapserver(null,array('uri'=>"http://testuri.org"));
-$server->setclass("foo");
-$server->setpersistence(SOAP_PERSISTENCE_REQUEST);
-
-
-ob_start();
-$HTTP_RAW_POST_DATA = <<<EOF
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<SOAP-ENV:Envelope
- SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
- xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
- xmlns:xsd="http://www.w3.org/2001/XMLSchema"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xmlns:si="http://soapinterop.org/xsd">
- <SOAP-ENV:Body>
- <ns1:Sum xmlns:ns1="http://testuri.org">
- <num xsi:type="xsd:int">5</num>
- </ns1:Sum>
- </SOAP-ENV:Body>
-</SOAP-ENV:Envelope>
-EOF;
-$server->handle();
-ob_clean();
-
-$HTTP_RAW_POST_DATA = <<<EOF
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<SOAP-ENV:Envelope
- SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
- xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
- xmlns:xsd="http://www.w3.org/2001/XMLSchema"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xmlns:si="http://soapinterop.org/xsd">
- <SOAP-ENV:Body>
- <ns1:Sum xmlns:ns1="http://testuri.org">
- <num xsi:type="xsd:int">3</num>
- </ns1:Sum>
- </SOAP-ENV:Body>
-</SOAP-ENV:Envelope>
-EOF;
-$server->handle();
-ob_end_flush();
-echo "ok\n";
-?>
---EXPECT--
-<?xml version="1.0" encoding="UTF-8"?>
-<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://testuri.org" 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:SumResponse><return xsi:type="xsd:int">3</return></ns1:SumResponse></SOAP-ENV:Body></SOAP-ENV:Envelope>
-ok
diff --git a/ext/soap/tests/server011.phpt b/ext/soap/tests/server011.phpt
deleted file mode 100644
index fb9aabe89c..0000000000
--- a/ext/soap/tests/server011.phpt
+++ /dev/null
@@ -1,25 +0,0 @@
---TEST--
-SOAP Server 11: bind
---SKIPIF--
-<?php require_once('skipif.inc'); ?>
---GET--
-wsdl
---FILE--
-<?php
-function Add($x,$y) {
- return $x+$y;
-}
-
-$server = new soapserver(dirname(__FILE__)."/test.wsdl");
-ob_start();
-$server->handle();
-$wsdl = ob_get_contents();
-ob_end_clean();
-if ($wsdl == file_get_contents(dirname(__FILE__)."/test.wsdl")) {
- echo "ok\n";
-} else {
- echo "fail\n";
-}
-?>
---EXPECT--
-ok
diff --git a/ext/soap/tests/server012.phpt b/ext/soap/tests/server012.phpt
deleted file mode 100644
index 9a41de9d50..0000000000
--- a/ext/soap/tests/server012.phpt
+++ /dev/null
@@ -1,20 +0,0 @@
---TEST--
-SOAP Server 12: WSDL generation
---SKIPIF--
-<?php require_once('skipif.inc'); ?>
---GET--
-WSDL
---FILE--
-<?php
-function Add($x,$y) {
- return $x+$y;
-}
-
-$server = new soapserver(null,array('uri'=>"http://testuri.org"));
-$server->addfunction("Add");
-$server->handle();
-echo "ok\n";
-?>
---EXPECT--
-<?xml version="1.0" encoding="UTF-8"?>
-<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"><SOAP-ENV:Body><SOAP-ENV:Fault><faultcode>SOAP-ENV:Server</faultcode><faultstring>WSDL generation is not supported yet</faultstring></SOAP-ENV:Fault></SOAP-ENV:Body></SOAP-ENV:Envelope>
diff --git a/ext/soap/tests/server013.phpt b/ext/soap/tests/server013.phpt
deleted file mode 100644
index 4bb94c79c4..0000000000
--- a/ext/soap/tests/server013.phpt
+++ /dev/null
@@ -1,44 +0,0 @@
---TEST--
-SOAP Server 13: array handling
---SKIPIF--
-<?php require_once('skipif.inc'); ?>
---FILE--
-<?php
-function Sum($a) {
- $sum = 0;
- if (is_array($a)) {
- foreach($a as $val) {
- $sum += $val;
- }
- }
- return $sum;
-}
-
-$server = new soapserver(null,array('uri'=>"http://testuri.org"));
-$server->addfunction("Sum");
-
-$HTTP_RAW_POST_DATA = <<<EOF
-<?xml version="1.0" encoding="UTF-8"?>
-<SOAP-ENV:Envelope
- xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
- SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
- xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"
- xmlns:xsd="http://www.w3.org/2001/XMLSchema"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
- <SOAP-ENV:Body xmlns:ns1="http://linuxsrv.home/~dmitry/soap/">
- <ns1:sum>
- <param0 SOAP-ENC:arrayType="xsd:int[2]" xsi:type="SOAP-ENC:Array">
- <val xsi:type="xsd:int">3</val>
- <val xsi:type="xsd:int">5</val>
- </param0>
- </ns1:sum>
- </SOAP-ENV:Body>
-</SOAP-ENV:Envelope>
-EOF;
-$server->handle();
-echo "ok\n";
-?>
---EXPECT--
-<?xml version="1.0" encoding="UTF-8"?>
-<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://testuri.org" 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:sumResponse><return xsi:type="xsd:int">8</return></ns1:sumResponse></SOAP-ENV:Body></SOAP-ENV:Envelope>
-ok
diff --git a/ext/soap/tests/server014.phpt b/ext/soap/tests/server014.phpt
deleted file mode 100644
index 7375264872..0000000000
--- a/ext/soap/tests/server014.phpt
+++ /dev/null
@@ -1,37 +0,0 @@
---TEST--
-SOAP Server 14: fault
---SKIPIF--
-<?php require_once('skipif.inc'); ?>
---FILE--
-<?php
-function Add($x,$y) {
- undefined_function_x();
- return $x+$y;
-}
-
-$server = new soapserver(null,array('uri'=>"http://testuri.org"));
-$server->addfunction("Add");
-
-$HTTP_RAW_POST_DATA = <<<EOF
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<SOAP-ENV:Envelope
- SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
- xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
- xmlns:xsd="http://www.w3.org/2001/XMLSchema"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xmlns:si="http://soapinterop.org/xsd">
- <SOAP-ENV:Body>
- <ns1:Add xmlns:ns1="http://testuri.org">
- <x xsi:type="xsd:int">22</x>
- <y xsi:type="xsd:int">33</y>
- </ns1:Add>
- </SOAP-ENV:Body>
-</SOAP-ENV:Envelope>
-EOF;
-
-$server->handle();
-echo "ok\n";
-?>
---EXPECT--
-<?xml version="1.0" encoding="UTF-8"?>
-<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"><SOAP-ENV:Body><SOAP-ENV:Fault><faultcode>SOAP-ENV:Server</faultcode><faultstring>Call to undefined function undefined_function_x()</faultstring></SOAP-ENV:Fault></SOAP-ENV:Body></SOAP-ENV:Envelope>
diff --git a/ext/soap/tests/server015.phpt b/ext/soap/tests/server015.phpt
deleted file mode 100644
index ea538e84eb..0000000000
--- a/ext/soap/tests/server015.phpt
+++ /dev/null
@@ -1,33 +0,0 @@
---TEST--
-SOAP Server 15: passing request to handle()
---SKIPIF--
-<?php require_once('skipif.inc'); ?>
---FILE--
-<?php
-function test() {
- return "Hello World";
-}
-
-$server = new soapserver(null,array('uri'=>"http://testuri.org"));
-$server->addfunction("test");
-
-$envelope = <<<EOF
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<SOAP-ENV:Envelope
- SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
- xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
- xmlns:xsd="http://www.w3.org/2001/XMLSchema"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xmlns:si="http://soapinterop.org/xsd">
- <SOAP-ENV:Body>
- <ns1:test xmlns:ns1="http://testuri.org" />
- </SOAP-ENV:Body>
-</SOAP-ENV:Envelope>
-EOF;
-$server->handle($envelope);
-echo "ok\n";
-?>
---EXPECT--
-<?xml version="1.0" encoding="UTF-8"?>
-<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://testuri.org" 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:testResponse><return xsi:type="xsd:string">Hello World</return></ns1:testResponse></SOAP-ENV:Body></SOAP-ENV:Envelope>
-ok
diff --git a/ext/soap/tests/server016.phpt b/ext/soap/tests/server016.phpt
deleted file mode 100644
index 77bce9fb38..0000000000
--- a/ext/soap/tests/server016.phpt
+++ /dev/null
@@ -1,34 +0,0 @@
---TEST--
-SOAP Server 16: user fault
---SKIPIF--
-<?php require_once('skipif.inc'); ?>
---FILE--
-<?php
-function test() {
- global $server;
- $server->fault("MyFault","My fault string");
-}
-
-$server = new soapserver(null,array('uri'=>"http://testuri.org"));
-$server->addfunction("test");
-
-$HTTP_RAW_POST_DATA = <<<EOF
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<SOAP-ENV:Envelope
- SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
- xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
- xmlns:xsd="http://www.w3.org/2001/XMLSchema"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xmlns:si="http://soapinterop.org/xsd">
- <SOAP-ENV:Body>
- <ns1:test xmlns:ns1="http://testuri.org"/>
- </SOAP-ENV:Body>
-</SOAP-ENV:Envelope>
-EOF;
-
-$server->handle();
-echo "ok\n";
-?>
---EXPECT--
-<?xml version="1.0" encoding="UTF-8"?>
-<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"><SOAP-ENV:Body><SOAP-ENV:Fault><faultcode>MyFault</faultcode><faultstring>My fault string</faultstring></SOAP-ENV:Fault></SOAP-ENV:Body></SOAP-ENV:Envelope>
diff --git a/ext/soap/tests/server017.phpt b/ext/soap/tests/server017.phpt
deleted file mode 100644
index 2f5dd6b6e7..0000000000
--- a/ext/soap/tests/server017.phpt
+++ /dev/null
@@ -1,33 +0,0 @@
---TEST--
-SOAP Server 17: user fault (through return)
---SKIPIF--
-<?php require_once('skipif.inc'); ?>
---FILE--
-<?php
-function test() {
- return new SoapFault("MyFault","My fault string");
-}
-
-$server = new soapserver(null,array('uri'=>"http://testuri.org"));
-$server->addfunction("test");
-
-$HTTP_RAW_POST_DATA = <<<EOF
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<SOAP-ENV:Envelope
- SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
- xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
- xmlns:xsd="http://www.w3.org/2001/XMLSchema"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xmlns:si="http://soapinterop.org/xsd">
- <SOAP-ENV:Body>
- <ns1:test xmlns:ns1="http://testuri.org"/>
- </SOAP-ENV:Body>
-</SOAP-ENV:Envelope>
-EOF;
-
-$server->handle();
-echo "ok\n";
-?>
---EXPECT--
-<?xml version="1.0" encoding="UTF-8"?>
-<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"><SOAP-ENV:Body><SOAP-ENV:Fault><faultcode>MyFault</faultcode><faultstring>My fault string</faultstring></SOAP-ENV:Fault></SOAP-ENV:Body></SOAP-ENV:Envelope>
diff --git a/ext/soap/tests/server018.phpt b/ext/soap/tests/server018.phpt
deleted file mode 100644
index 724f0d8841..0000000000
--- a/ext/soap/tests/server018.phpt
+++ /dev/null
@@ -1,33 +0,0 @@
---TEST--
-SOAP Server 18: user fault (through throw)
---SKIPIF--
-<?php require_once('skipif.inc'); ?>
---FILE--
-<?php
-function test() {
- throw new SoapFault("MyFault","My fault string");
-}
-
-$server = new soapserver(null,array('uri'=>"http://testuri.org"));
-$server->addfunction("test");
-
-$HTTP_RAW_POST_DATA = <<<EOF
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<SOAP-ENV:Envelope
- SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
- xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
- xmlns:xsd="http://www.w3.org/2001/XMLSchema"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xmlns:si="http://soapinterop.org/xsd">
- <SOAP-ENV:Body>
- <ns1:test xmlns:ns1="http://testuri.org"/>
- </SOAP-ENV:Body>
-</SOAP-ENV:Envelope>
-EOF;
-
-$server->handle();
-echo "ok\n";
-?>
---EXPECT--
-<?xml version="1.0" encoding="UTF-8"?>
-<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"><SOAP-ENV:Body><SOAP-ENV:Fault><faultcode>MyFault</faultcode><faultstring>My fault string</faultstring></SOAP-ENV:Fault></SOAP-ENV:Body></SOAP-ENV:Envelope>
diff --git a/ext/soap/tests/server019.phpt b/ext/soap/tests/server019.phpt
deleted file mode 100644
index 4ad9c5ee85..0000000000
--- a/ext/soap/tests/server019.phpt
+++ /dev/null
@@ -1,37 +0,0 @@
---TEST--
-SOAP Server 19: compressed request (gzip)
---SKIPIF--
-<?php require_once('skipif.inc');
- if (!extension_loaded('zlib')) die('skip zlib extension not available');
-?>
---FILE--
-<?php
-function test() {
- return "Hello World";
-}
-
-$server = new soapserver(null,array('uri'=>"http://testuri.org"));
-$server->addfunction("test");
-
-$HTTP_RAW_POST_DATA = gzencode(<<<EOF
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<SOAP-ENV:Envelope
- SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
- xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
- xmlns:xsd="http://www.w3.org/2001/XMLSchema"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xmlns:si="http://soapinterop.org/xsd">
- <SOAP-ENV:Body>
- <ns1:test xmlns:ns1="http://testuri.org" />
- </SOAP-ENV:Body>
-</SOAP-ENV:Envelope>
-EOF
-, 9, FORCE_GZIP);
-$_SERVER['HTTP_CONTENT_ENCODING'] = "gzip";
-$server->handle();
-echo "ok\n";
-?>
---EXPECT--
-<?xml version="1.0" encoding="UTF-8"?>
-<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://testuri.org" 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:testResponse><return xsi:type="xsd:string">Hello World</return></ns1:testResponse></SOAP-ENV:Body></SOAP-ENV:Envelope>
-ok
diff --git a/ext/soap/tests/server020.phpt b/ext/soap/tests/server020.phpt
deleted file mode 100644
index bacbc57849..0000000000
--- a/ext/soap/tests/server020.phpt
+++ /dev/null
@@ -1,37 +0,0 @@
---TEST--
-SOAP Server 20: compressed request (deflate)
---SKIPIF--
-<?php require_once('skipif.inc');
- if (!extension_loaded('zlib')) die('skip zlib extension not available');
-?>
---FILE--
-<?php
-function test() {
- return "Hello World";
-}
-
-$server = new soapserver(null,array('uri'=>"http://testuri.org"));
-$server->addfunction("test");
-
-$HTTP_RAW_POST_DATA = gzcompress(<<<EOF
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<SOAP-ENV:Envelope
- SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
- xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
- xmlns:xsd="http://www.w3.org/2001/XMLSchema"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xmlns:si="http://soapinterop.org/xsd">
- <SOAP-ENV:Body>
- <ns1:test xmlns:ns1="http://testuri.org" />
- </SOAP-ENV:Body>
-</SOAP-ENV:Envelope>
-EOF
-, 9);
-$_SERVER['HTTP_CONTENT_ENCODING'] = "deflate";
-$server->handle();
-echo "ok\n";
-?>
---EXPECT--
-<?xml version="1.0" encoding="UTF-8"?>
-<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://testuri.org" 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:testResponse><return xsi:type="xsd:string">Hello World</return></ns1:testResponse></SOAP-ENV:Body></SOAP-ENV:Envelope>
-ok
diff --git a/ext/soap/tests/server021.phpt b/ext/soap/tests/server021.phpt
deleted file mode 100644
index 787e959fb3..0000000000
--- a/ext/soap/tests/server021.phpt
+++ /dev/null
@@ -1,40 +0,0 @@
---TEST--
-SOAP Server 21: SoapServer::setClass and __call()
---SKIPIF--
-<?php require_once('skipif.inc'); ?>
---FILE--
-<?php
-class Foo {
- function __call($name, $args) {
- if ($name == "test") {
- return "Hello World";
- } else {
- return SoapFault("Server","Function $name doesn't exist");
- }
- }
-}
-
-$server = new soapserver(null,array('uri'=>"http://testuri.org"));
-$server->setclass("Foo");
-
-$HTTP_RAW_POST_DATA = <<<EOF
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<SOAP-ENV:Envelope
- SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
- xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
- xmlns:xsd="http://www.w3.org/2001/XMLSchema"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xmlns:si="http://soapinterop.org/xsd">
- <SOAP-ENV:Body>
- <ns1:test xmlns:ns1="http://testuri.org" />
- </SOAP-ENV:Body>
-</SOAP-ENV:Envelope>
-EOF;
-
-$server->handle();
-echo "ok\n";
-?>
---EXPECT--
-<?xml version="1.0" encoding="UTF-8"?>
-<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://testuri.org" 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:testResponse><return xsi:type="xsd:string">Hello World</return></ns1:testResponse></SOAP-ENV:Body></SOAP-ENV:Envelope>
-ok
diff --git a/ext/soap/tests/skipif.inc b/ext/soap/tests/skipif.inc
deleted file mode 100644
index fa8574e6a2..0000000000
--- a/ext/soap/tests/skipif.inc
+++ /dev/null
@@ -1,3 +0,0 @@
-<?php
- if (!extension_loaded('soap')) die('skip soap extension not available');
-?>
diff --git a/ext/soap/tests/soap12/T01.phpt b/ext/soap/tests/soap12/T01.phpt
deleted file mode 100644
index d584812d09..0000000000
--- a/ext/soap/tests/soap12/T01.phpt
+++ /dev/null
@@ -1,23 +0,0 @@
---TEST--
-SOAP 1.2: T01 echoOk
---SKIPIF--
-<?php require_once('skipif.inc'); ?>
---FILE--
-<?php
-$HTTP_RAW_POST_DATA = <<<EOF
-<?xml version='1.0' ?>
-<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope">
- <env:Header>
- <test:echoOk xmlns:test="http://example.org/ts-tests"
- env:role="http://www.w3.org/2003/05/soap-envelope/role/next">foo</test:echoOk>
- </env:Header>
- <env:Body>
- </env:Body>
-</env:Envelope>
-EOF;
-include "soap12-test.inc";
-?>
---EXPECT--
-<?xml version="1.0" encoding="UTF-8"?>
-<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope" xmlns:ns1="http://example.org/ts-tests"><env:Header><ns1:responseOk>foo</ns1:responseOk></env:Header><env:Body/></env:Envelope>
-ok
diff --git a/ext/soap/tests/soap12/T02.phpt b/ext/soap/tests/soap12/T02.phpt
deleted file mode 100644
index db2c260684..0000000000
--- a/ext/soap/tests/soap12/T02.phpt
+++ /dev/null
@@ -1,23 +0,0 @@
---TEST--
-SOAP 1.2: T02 echoOk
---SKIPIF--
-<?php require_once('skipif.inc'); ?>
---FILE--
-<?php
-$HTTP_RAW_POST_DATA = <<<EOF
-<?xml version='1.0' ?>
-<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope">
- <env:Header>
- <test:echoOk xmlns:test="http://example.org/ts-tests"
- env:role="http://example.org/ts-tests/C">foo</test:echoOk>
- </env:Header>
- <env:Body>
- </env:Body>
-</env:Envelope>
-EOF;
-include "soap12-test.inc";
-?>
---EXPECT--
-<?xml version="1.0" encoding="UTF-8"?>
-<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope" xmlns:ns1="http://example.org/ts-tests"><env:Header><ns1:responseOk>foo</ns1:responseOk></env:Header><env:Body/></env:Envelope>
-ok
diff --git a/ext/soap/tests/soap12/T03.phpt b/ext/soap/tests/soap12/T03.phpt
deleted file mode 100644
index 19c29dd3dd..0000000000
--- a/ext/soap/tests/soap12/T03.phpt
+++ /dev/null
@@ -1,22 +0,0 @@
---TEST--
-SOAP 1.2: T03 echoOk
---SKIPIF--
-<?php require_once('skipif.inc'); ?>
---FILE--
-<?php
-$HTTP_RAW_POST_DATA = <<<EOF
-<?xml version='1.0' ?>
-<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope">
- <env:Header>
- <test:echoOk xmlns:test="http://example.org/ts-tests">foo</test:echoOk>
- </env:Header>
- <env:Body>
- </env:Body>
-</env:Envelope>
-EOF;
-include "soap12-test.inc";
-?>
---EXPECT--
-<?xml version="1.0" encoding="UTF-8"?>
-<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope" xmlns:ns1="http://example.org/ts-tests"><env:Header><ns1:responseOk>foo</ns1:responseOk></env:Header><env:Body/></env:Envelope>
-ok
diff --git a/ext/soap/tests/soap12/T04.phpt b/ext/soap/tests/soap12/T04.phpt
deleted file mode 100644
index 7445caedee..0000000000
--- a/ext/soap/tests/soap12/T04.phpt
+++ /dev/null
@@ -1,23 +0,0 @@
---TEST--
-SOAP 1.2: T04 echoOk
---SKIPIF--
-<?php require_once('skipif.inc'); ?>
---FILE--
-<?php
-$HTTP_RAW_POST_DATA = <<<EOF
-<?xml version='1.0' ?>
-<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope">
- <env:Header>
- <test:echoOk xmlns:test="http://example.org/ts-tests"
- env:role="http://www.w3.org/2003/05/soap-envelope/role/ultimateReceiver">foo</test:echoOk>
- </env:Header>
- <env:Body>
- </env:Body>
-</env:Envelope>
-EOF;
-include "soap12-test.inc";
-?>
---EXPECT--
-<?xml version="1.0" encoding="UTF-8"?>
-<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope" xmlns:ns1="http://example.org/ts-tests"><env:Header><ns1:responseOk>foo</ns1:responseOk></env:Header><env:Body/></env:Envelope>
-ok
diff --git a/ext/soap/tests/soap12/T05.phpt b/ext/soap/tests/soap12/T05.phpt
deleted file mode 100644
index 187eb2ee83..0000000000
--- a/ext/soap/tests/soap12/T05.phpt
+++ /dev/null
@@ -1,23 +0,0 @@
---TEST--
-SOAP 1.2: T05 echoOk
---SKIPIF--
-<?php require_once('skipif.inc'); ?>
---FILE--
-<?php
-$HTTP_RAW_POST_DATA = <<<EOF
-<?xml version='1.0' ?>
-<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope">
- <env:Header>
- <test:echoOk xmlns:test="http://example.org/ts-tests"
- env:role="http://example.org/ts-tests/B">foo</test:echoOk>
- </env:Header>
- <env:Body>
- </env:Body>
-</env:Envelope>
-EOF;
-include "soap12-test.inc";
-?>
---EXPECT--
-<?xml version="1.0" encoding="UTF-8"?>
-<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope"><env:Body/></env:Envelope>
-ok
diff --git a/ext/soap/tests/soap12/T10.phpt b/ext/soap/tests/soap12/T10.phpt
deleted file mode 100644
index 54186f6a0d..0000000000
--- a/ext/soap/tests/soap12/T10.phpt
+++ /dev/null
@@ -1,23 +0,0 @@
---TEST--
-SOAP 1.2: T10 unknownHdr
---SKIPIF--
-<?php require_once('skipif.inc'); ?>
---FILE--
-<?php
-$HTTP_RAW_POST_DATA = <<<EOF
-<?xml version='1.0' ?>
-<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope">
- <env:Header>
- <test:Unknown xmlns:test="http://example.org/ts-tests"
- env:role="http://www.w3.org/2003/05/soap-envelope/role/ultimateReceiver">foo</test:Unknown>
- </env:Header>
- <env:Body>
- </env:Body>
-</env:Envelope>
-EOF;
-include "soap12-test.inc";
-?>
---EXPECT--
-<?xml version="1.0" encoding="UTF-8"?>
-<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope"><env:Body/></env:Envelope>
-ok
diff --git a/ext/soap/tests/soap12/T11.phpt b/ext/soap/tests/soap12/T11.phpt
deleted file mode 100644
index 3423d54329..0000000000
--- a/ext/soap/tests/soap12/T11.phpt
+++ /dev/null
@@ -1,24 +0,0 @@
---TEST--
-SOAP 1.2: T11 unknownHdr
---SKIPIF--
-<?php require_once('skipif.inc'); ?>
---FILE--
-<?php
-$HTTP_RAW_POST_DATA = <<<EOF
-<?xml version='1.0' ?>
-<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope">
- <env:Header>
- <test:Unknown xmlns:test="http://example.org/ts-tests"
- env:role="http://www.w3.org/2003/05/soap-envelope/role/ultimateReceiver"
- env:mustUnderstand="false">foo</test:Unknown>
- </env:Header>
- <env:Body>
- </env:Body>
-</env:Envelope>
-EOF;
-include "soap12-test.inc";
-?>
---EXPECT--
-<?xml version="1.0" encoding="UTF-8"?>
-<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope"><env:Body/></env:Envelope>
-ok
diff --git a/ext/soap/tests/soap12/T12.phpt b/ext/soap/tests/soap12/T12.phpt
deleted file mode 100644
index c67917f0e3..0000000000
--- a/ext/soap/tests/soap12/T12.phpt
+++ /dev/null
@@ -1,23 +0,0 @@
---TEST--
-SOAP 1.2: T12 unknownHdr
---SKIPIF--
-<?php require_once('skipif.inc'); ?>
---FILE--
-<?php
-$HTTP_RAW_POST_DATA = <<<EOF
-<?xml version='1.0' ?>
-<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope">
- <env:Header>
- <test:Unknown xmlns:test="http://example.org/ts-tests"
- env:role="http://www.w3.org/2003/05/soap-envelope/role/ultimateReceiver"
- env:mustUnderstand="1">foo</test:Unknown>
- </env:Header>
- <env:Body>
- </env:Body>
-</env:Envelope>
-EOF;
-include "soap12-test.inc";
-?>
---EXPECT--
-<?xml version="1.0" encoding="UTF-8"?>
-<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope"><env:Body><env:Fault><env:Code><env:Value>env:MustUnderstand</env:Value></env:Code><env:Reason><env:Text>Header not understood</env:Text></env:Reason></env:Fault></env:Body></env:Envelope>
diff --git a/ext/soap/tests/soap12/T13.phpt b/ext/soap/tests/soap12/T13.phpt
deleted file mode 100644
index 95e1c8ad4e..0000000000
--- a/ext/soap/tests/soap12/T13.phpt
+++ /dev/null
@@ -1,23 +0,0 @@
---TEST--
-SOAP 1.2: T13 unknownHdr
---SKIPIF--
-<?php require_once('skipif.inc'); ?>
---FILE--
-<?php
-$HTTP_RAW_POST_DATA = <<<EOF
-<?xml version='1.0' ?>
-<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope">
- <env:Header>
- <test:Unknown xmlns:test="http://example.org/ts-tests"
- env:role="http://www.w3.org/2003/05/soap-envelope/role/ultimateReceiver"
- env:mustUnderstand="true">foo</test:Unknown>
- </env:Header>
- <env:Body>
- </env:Body>
-</env:Envelope>
-EOF;
-include "soap12-test.inc";
-?>
---EXPECT--
-<?xml version="1.0" encoding="UTF-8"?>
-<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope"><env:Body><env:Fault><env:Code><env:Value>env:MustUnderstand</env:Value></env:Code><env:Reason><env:Text>Header not understood</env:Text></env:Reason></env:Fault></env:Body></env:Envelope>
diff --git a/ext/soap/tests/soap12/T14.phpt b/ext/soap/tests/soap12/T14.phpt
deleted file mode 100644
index dbf4e1bab5..0000000000
--- a/ext/soap/tests/soap12/T14.phpt
+++ /dev/null
@@ -1,23 +0,0 @@
---TEST--
-SOAP 1.2: T14 echoOk
---SKIPIF--
-<?php require_once('skipif.inc'); ?>
---FILE--
-<?php
-$HTTP_RAW_POST_DATA = <<<EOF
-<?xml version='1.0' ?>
-<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope">
- <env:Header>
- <test:echoOk xmlns:test="http://example.org/ts-tests"
- env:role="http://www.w3.org/2003/05/soap-envelope/role/ultimateReceiver"
- env:mustUnderstand="wrong">foo</test:echoOk>
- </env:Header>
- <env:Body>
- </env:Body>
-</env:Envelope>
-EOF;
-include "soap12-test.inc";
-?>
---EXPECT--
-<?xml version="1.0" encoding="UTF-8"?>
-<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope"><env:Body><env:Fault><env:Code><env:Value>env:Sender</env:Value></env:Code><env:Reason><env:Text>mustUnderstand value is not boolean</env:Text></env:Reason></env:Fault></env:Body></env:Envelope>
diff --git a/ext/soap/tests/soap12/T15.phpt b/ext/soap/tests/soap12/T15.phpt
deleted file mode 100644
index 546f94237f..0000000000
--- a/ext/soap/tests/soap12/T15.phpt
+++ /dev/null
@@ -1,24 +0,0 @@
---TEST--
-SOAP 1.2: T15 unknownHdr
---SKIPIF--
-<?php require_once('skipif.inc'); ?>
---FILE--
-<?php
-$HTTP_RAW_POST_DATA = <<<EOF
-<?xml version='1.0' ?>
-<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope">
- <env:Header>
- <test:Unknown xmlns:test="http://example.org/ts-tests"
- env:role="http://example.org/ts-tests/B"
- env:mustUnderstand="1">foo</test:Unknown>
- </env:Header>
- <env:Body>
- </env:Body>
-</env:Envelope>
-EOF;
-include "soap12-test.inc";
-?>
---EXPECT--
-<?xml version="1.0" encoding="UTF-8"?>
-<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope"><env:Body/></env:Envelope>
-ok
diff --git a/ext/soap/tests/soap12/T19.phpt b/ext/soap/tests/soap12/T19.phpt
deleted file mode 100644
index 8ddb5b4f8b..0000000000
--- a/ext/soap/tests/soap12/T19.phpt
+++ /dev/null
@@ -1,24 +0,0 @@
---TEST--
-SOAP 1.2: T19 echoOk
---SKIPIF--
-<?php require_once('skipif.inc'); ?>
---FILE--
-<?php
-$HTTP_RAW_POST_DATA = <<<EOF
-<?xml version='1.0' ?>
-<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope">
- <env:Header>
- <test:echoOk xmlns:test="http://example.org/ts-tests"
- env:role="http://www.w3.org/2003/05/soap-envelope/role/none"
- env:mustUnderstand="true">foo</test:echoOk>
- </env:Header>
- <env:Body>
- </env:Body>
-</env:Envelope>
-EOF;
-include "soap12-test.inc";
-?>
---EXPECT--
-<?xml version="1.0" encoding="UTF-8"?>
-<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope"><env:Body/></env:Envelope>
-ok
diff --git a/ext/soap/tests/soap12/T22.phpt b/ext/soap/tests/soap12/T22.phpt
deleted file mode 100644
index 5844550ced..0000000000
--- a/ext/soap/tests/soap12/T22.phpt
+++ /dev/null
@@ -1,24 +0,0 @@
---TEST--
-SOAP 1.2: T22 echoOk
---SKIPIF--
-<?php require_once('skipif.inc'); ?>
---FILE--
-<?php
-$HTTP_RAW_POST_DATA = <<<EOF
-<?xml version='1.0' ?>
-<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope">
- <env:Header>
- <test:echoOk xmlns:test="http://example.org/ts-tests"
- env:mustUnderstand = "1">foo</test:echoOk>
- </env:Header>
- <env:Body>
- <test:echoOk xmlns:test="http://example.org/ts-tests">foo</test:echoOk>
- </env:Body>
-</env:Envelope>
-EOF;
-include "soap12-test.inc";
-?>
---EXPECT--
-<?xml version="1.0" encoding="UTF-8"?>
-<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope" xmlns:ns1="http://example.org/ts-tests"><env:Header><ns1:responseOk>foo</ns1:responseOk></env:Header><env:Body><ns1:responseOk>foo</ns1:responseOk></env:Body></env:Envelope>
-ok
diff --git a/ext/soap/tests/soap12/T23.phpt b/ext/soap/tests/soap12/T23.phpt
deleted file mode 100644
index c676fb176c..0000000000
--- a/ext/soap/tests/soap12/T23.phpt
+++ /dev/null
@@ -1,24 +0,0 @@
---TEST--
-SOAP 1.2: T23 echoOk
---SKIPIF--
-<?php require_once('skipif.inc'); ?>
---FILE--
-<?php
-$HTTP_RAW_POST_DATA = <<<EOF
-<?xml version='1.0' ?>
-<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope">
- <env:Header>
- <test:Unknown xmlns:test="http://example.org/ts-tests"
- env:mustUnderstand="1">foo</test:Unknown>
- <test:echoOk xmlns:test="http://example.org/ts-tests"
- env:mustUnderstand="wrong">foo</test:echoOk>
- </env:Header>
- <env:Body>
- </env:Body>
-</env:Envelope>
-EOF;
-include "soap12-test.inc";
-?>
---EXPECT--
-<?xml version="1.0" encoding="UTF-8"?>
-<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope"><env:Body><env:Fault><env:Code><env:Value>env:Sender</env:Value></env:Code><env:Reason><env:Text>mustUnderstand value is not boolean</env:Text></env:Reason></env:Fault></env:Body></env:Envelope>
diff --git a/ext/soap/tests/soap12/T24.phpt b/ext/soap/tests/soap12/T24.phpt
deleted file mode 100644
index ebee3b764a..0000000000
--- a/ext/soap/tests/soap12/T24.phpt
+++ /dev/null
@@ -1,21 +0,0 @@
---TEST--
-SOAP 1.2: T24 echoOk
---SKIPIF--
-<?php require_once('skipif.inc'); ?>
---FILE--
-<?php
-$HTTP_RAW_POST_DATA = <<<EOF
-<?xml version='1.0' ?>
-<env:Envelope xmlns:env="http://wrong-version/">
- <env:Body>
- <test:echoOk xmlns:test="http://example.org/ts-tests">
- foo
- </test:echoOk>
- </env:Body>
-</env:Envelope>
-EOF;
-include "soap12-test.inc";
-?>
---EXPECT--
-<?xml version="1.0" encoding="UTF-8"?>
-<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope"><env:Body><env:Fault><env:Code><env:Value>env:VersionMismatch</env:Value></env:Code><env:Reason><env:Text>Wrong Version</env:Text></env:Reason></env:Fault></env:Body></env:Envelope>
diff --git a/ext/soap/tests/soap12/T25.phpt b/ext/soap/tests/soap12/T25.phpt
deleted file mode 100644
index ac45e9c52d..0000000000
--- a/ext/soap/tests/soap12/T25.phpt
+++ /dev/null
@@ -1,22 +0,0 @@
---TEST--
-SOAP 1.2: T25 echoOk
---SKIPIF--
-<?php require_once('skipif.inc'); ?>
---FILE--
-<?php
-$HTTP_RAW_POST_DATA = <<<EOF
-<?xml version='1.0' ?>
-<!DOCTYPE env:Envelope SYSTEM "env.dtd"[]>
-<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope">
- <env:Body>
- <test:echoOk xmlns:test="http://example.org/ts-tests">
- foo
- </test:echoOk>
- </env:Body>
-</env:Envelope>
-EOF;
-include "soap12-test.inc";
-?>
---EXPECT--
-<?xml version="1.0" encoding="UTF-8"?>
-<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope"><env:Body><env:Fault><env:Code><env:Value>env:Receiver</env:Value></env:Code><env:Reason><env:Text>DTD are not supported by SOAP</env:Text></env:Reason></env:Fault></env:Body></env:Envelope>
diff --git a/ext/soap/tests/soap12/T26.phpt b/ext/soap/tests/soap12/T26.phpt
deleted file mode 100644
index 53c8cec495..0000000000
--- a/ext/soap/tests/soap12/T26.phpt
+++ /dev/null
@@ -1,21 +0,0 @@
---TEST--
-SOAP 1.2: T26 echoOk
---SKIPIF--
-<?php require_once('skipif.inc'); ?>
---FILE--
-<?php
-$HTTP_RAW_POST_DATA = <<<EOF
-<?xml version='1.0' ?>
-<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope">
-<?xml-stylesheet href="http://example.org/ts-tests/sub.xsl" type = "text/xsl"?>
- <env:Body>
- <test:echoOk xmlns:test="http://example.org/ts-tests">foo</test:echoOk>
- </env:Body>
-</env:Envelope>
-EOF;
-include "soap12-test.inc";
-?>
---EXPECT--
-<?xml version="1.0" encoding="UTF-8"?>
-<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope" xmlns:ns1="http://example.org/ts-tests"><env:Body><ns1:responseOk>foo</ns1:responseOk></env:Body></env:Envelope>
-ok
diff --git a/ext/soap/tests/soap12/T27.phpt b/ext/soap/tests/soap12/T27.phpt
deleted file mode 100644
index 6371113994..0000000000
--- a/ext/soap/tests/soap12/T27.phpt
+++ /dev/null
@@ -1,29 +0,0 @@
---TEST--
-SOAP 1.2: T27 echoStringArray
---SKIPIF--
-<?php require_once('skipif.inc'); ?>
---FILE--
-<?php
-$HTTP_RAW_POST_DATA = <<<EOF
-<?xml version='1.0' ?>
-<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope"
- xmlns:xs="http://www.w3.org/2001/XMLSchema">
- <env:Body>
- <test:echoStringArray xmlns:test="http://example.org/ts-tests"
- xmlns:enc="http://www.w3.org/2003/05/soap-encoding"
- env:encodingStyle="http://www.w3.org/2003/05/soap-encoding">
- <test:array enc:itemType="xs:string" enc:arraySize="1">
- <a>
- <b>1</b>
- </a>
- </test:array>
- </test:echoStringArray>
- </env:Body>
-</env:Envelope>
-EOF;
-include "soap12-test.inc";
-?>
---EXPECT--
-<?xml version="1.0" encoding="UTF-8"?>
-<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope"><env:Body><env:Fault><env:Code><env:Value>env:Receiver</env:Value></env:Code><env:Reason><env:Text>SOAP-ERROR: Encoding: Violation of encoding rules</env:Text></env:Reason></env:Fault></env:Body></env:Envelope>
-
diff --git a/ext/soap/tests/soap12/T28.phpt b/ext/soap/tests/soap12/T28.phpt
deleted file mode 100644
index 6118b478d8..0000000000
--- a/ext/soap/tests/soap12/T28.phpt
+++ /dev/null
@@ -1,22 +0,0 @@
---TEST--
-SOAP 1.2: T28 echoOk
---SKIPIF--
-<?php require_once('skipif.inc'); ?>
---FILE--
-<?php
-$HTTP_RAW_POST_DATA = <<<EOF
-<?xml version='1.0' ?>
-<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope">
- <env:Body env:encodingStyle="http://www.w3.org/2003/05/soap-encoding">
- <test:echoOk xmlns:test="http://example.org/ts-tests" >
- foo
- </test:echoOk>
- </env:Body>
-</env:Envelope>
-EOF;
-include "soap12-test.inc";
-?>
---EXPECT--
-<?xml version="1.0" encoding="UTF-8"?>
-<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope"><env:Body><env:Fault><env:Code><env:Value>env:Sender</env:Value></env:Code><env:Reason><env:Text>encodingStyle cannot be specified on the Body</env:Text></env:Reason></env:Fault></env:Body></env:Envelope>
-
diff --git a/ext/soap/tests/soap12/T29.phpt b/ext/soap/tests/soap12/T29.phpt
deleted file mode 100644
index 3784da4030..0000000000
--- a/ext/soap/tests/soap12/T29.phpt
+++ /dev/null
@@ -1,23 +0,0 @@
---TEST--
-SOAP 1.2: T29 echoOk
---SKIPIF--
-<?php require_once('skipif.inc'); ?>
---FILE--
-<?php
-$HTTP_RAW_POST_DATA = <<<EOF
-<?xml version='1.0' ?>
-<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope">
- <env:Header>
- <test:echoOk xmlns:test="http://example.org/ts-tests"
- env:role="http://example.org/ts-tests/Czzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz">foo</test:echoOk>
- </env:Header>
- <env:Body>
- </env:Body>
-</env:Envelope>
-EOF;
-include "soap12-test.inc";
-?>
---EXPECT--
-<?xml version="1.0" encoding="UTF-8"?>
-<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope"><env:Body/></env:Envelope>
-ok
diff --git a/ext/soap/tests/soap12/T30.phpt b/ext/soap/tests/soap12/T30.phpt
deleted file mode 100644
index c2e008ed4a..0000000000
--- a/ext/soap/tests/soap12/T30.phpt
+++ /dev/null
@@ -1,20 +0,0 @@
---TEST--
-SOAP 1.2: T30 echoOk
---SKIPIF--
-<?php require_once('skipif.inc'); ?>
---FILE--
-<?php
-$HTTP_RAW_POST_DATA = <<<EOF
-<?xml version='1.0' ?>
-<env:Envelope xmlns:env="http://schemas.xmlsoap.org/soap/envelope/">
- <env:Body>
- <test:echoOk xmlns:test="http://example.org/ts-tests">foo</test:echoOk>
- </env:Body>
-</env:Envelope>
-EOF;
-include "soap12-test.inc";
-?>
---EXPECT--
-<?xml version="1.0" encoding="UTF-8"?>
-<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://example.org/ts-tests"><SOAP-ENV:Body><ns1:responseOk>foo</ns1:responseOk></SOAP-ENV:Body></SOAP-ENV:Envelope>
-ok
diff --git a/ext/soap/tests/soap12/T31.phpt b/ext/soap/tests/soap12/T31.phpt
deleted file mode 100644
index 56dc883a61..0000000000
--- a/ext/soap/tests/soap12/T31.phpt
+++ /dev/null
@@ -1,22 +0,0 @@
---TEST--
-SOAP 1.2: T31 returnVoid
---SKIPIF--
-<?php require_once('skipif.inc'); ?>
---FILE--
-<?php
-$HTTP_RAW_POST_DATA = <<<EOF
-<?xml version='1.0' ?>
-<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope">
- <env:Body>
- <test:returnVoid xmlns:test="http://example.org/ts-tests">
- </test:returnVoid>
- </env:Body>
-</env:Envelope>
-EOF;
-include "soap12-test.inc";
-?>
---EXPECT--
-<?xml version="1.0" encoding="UTF-8"?>
-<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope" xmlns:ns1="http://example.org/ts-tests" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:enc="http://www.w3.org/2003/05/soap-encoding"><env:Body><ns1:returnVoidResponse env:encodingStyle="http://www.w3.org/2003/05/soap-encoding"/></env:Body></env:Envelope>
-ok
-
diff --git a/ext/soap/tests/soap12/T32.phpt b/ext/soap/tests/soap12/T32.phpt
deleted file mode 100644
index 8f77873f4c..0000000000
--- a/ext/soap/tests/soap12/T32.phpt
+++ /dev/null
@@ -1,25 +0,0 @@
---TEST--
-SOAP 1.2: T32 echoHeader
---SKIPIF--
-<?php require_once('skipif.inc'); ?>
---FILE--
-<?php
-$HTTP_RAW_POST_DATA = <<<EOF
-<?xml version='1.0' ?>
-<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope">
- <env:Header>
- <test:requiredHeader xmlns:test="http://example.org/ts-tests"
- env:mustUnderstand="true">foo</test:requiredHeader>
- </env:Header>
- <env:Body>
- <test:echoHeader xmlns:test="http://example.org/ts-tests">
- </test:echoHeader>
- </env:Body>
-</env:Envelope>
-EOF;
-include "soap12-test.inc";
-?>
---EXPECT--
-<?xml version="1.0" encoding="UTF-8"?>
-<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope" xmlns:ns1="http://example.org/ts-tests"><env:Body><ns1:echoHeaderResponse>foo</ns1:echoHeaderResponse></env:Body></env:Envelope>
-ok
diff --git a/ext/soap/tests/soap12/T33.phpt b/ext/soap/tests/soap12/T33.phpt
deleted file mode 100644
index 00ded875b5..0000000000
--- a/ext/soap/tests/soap12/T33.phpt
+++ /dev/null
@@ -1,20 +0,0 @@
---TEST--
-SOAP 1.2: T33 nonexistentMethod
---SKIPIF--
-<?php require_once('skipif.inc'); ?>
---FILE--
-<?php
-$HTTP_RAW_POST_DATA = <<<EOF
-<?xml version='1.0' ?>
-<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope">
- <env:Body>
- <test:DoesNotExist xmlns:test="http://example.org/ts-tests">
- </test:DoesNotExist>
- </env:Body>
-</env:Envelope>
-EOF;
-include "soap12-test.inc";
-?>
---EXPECT--
-<?xml version="1.0" encoding="UTF-8"?>
-<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope"><env:Body><env:Fault><env:Code><env:Value>rpc:ProcedureNotPresent</env:Value></env:Code><env:Reason><env:Text>Procedure not present</env:Text></env:Reason></env:Fault></env:Body></env:Envelope>
diff --git a/ext/soap/tests/soap12/T34.phpt b/ext/soap/tests/soap12/T34.phpt
deleted file mode 100644
index 39e0095d43..0000000000
--- a/ext/soap/tests/soap12/T34.phpt
+++ /dev/null
@@ -1,24 +0,0 @@
---TEST--
-SOAP 1.2: T34 unknownHdr
---SKIPIF--
-<?php require_once('skipif.inc'); ?>
---FILE--
-<?php
-$HTTP_RAW_POST_DATA = <<<EOF
-<?xml version='1.0' ?>
-<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope">
- <env:Header>
- <test:Unknown xmlns:test="http://example.org/ts-tests"
- xmlns:env1="http://schemas.xmlsoap.org/soap/envelope/"
- env1:mustUnderstand="true">foo</test:Unknown>
- </env:Header>
- <env:Body>
- </env:Body>
-</env:Envelope>
-EOF;
-include "soap12-test.inc";
-?>
---EXPECT--
-<?xml version="1.0" encoding="UTF-8"?>
-<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope"><env:Body/></env:Envelope>
-ok
diff --git a/ext/soap/tests/soap12/T35.phpt b/ext/soap/tests/soap12/T35.phpt
deleted file mode 100644
index a736010ce0..0000000000
--- a/ext/soap/tests/soap12/T35.phpt
+++ /dev/null
@@ -1,24 +0,0 @@
---TEST--
-SOAP 1.2: T35 unknownHdr
---SKIPIF--
-<?php require_once('skipif.inc'); ?>
---FILE--
-<?php
-$HTTP_RAW_POST_DATA = <<<EOF
-<?xml version='1.0' ?>
-<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope">
- <env:Header>
- <test:Unknown xmlns:test="http://example.org/ts-tests"
- env:mustUnderstand="1">
- foo
- </test:Unknown>
- </env:Header>
- <env:Body>
- </env:Body>
-</env:Envelope>
-EOF;
-include "soap12-test.inc";
-?>
---EXPECT--
-<?xml version="1.0" encoding="UTF-8"?>
-<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope"><env:Body><env:Fault><env:Code><env:Value>env:MustUnderstand</env:Value></env:Code><env:Reason><env:Text>Header not understood</env:Text></env:Reason></env:Fault></env:Body></env:Envelope>
diff --git a/ext/soap/tests/soap12/T36.phpt b/ext/soap/tests/soap12/T36.phpt
deleted file mode 100644
index d625813942..0000000000
--- a/ext/soap/tests/soap12/T36.phpt
+++ /dev/null
@@ -1,23 +0,0 @@
---TEST--
-SOAP 1.2: T36 unknownHdr
---SKIPIF--
-<?php require_once('skipif.inc'); ?>
---FILE--
-<?php
-$HTTP_RAW_POST_DATA = <<<EOF
-<?xml version='1.0' ?>
-<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope">
- <env:Header>
- <test:Unknown xmlns:test="http://example.org/ts-tests"
- env:mustUnderstand="1"
- env:role="http://www.w3.org/2003/05/soap-envelope/role/ultimateReceiver">foo</test:Unknown>
- </env:Header>
- <env:Body>
- </env:Body>
-</env:Envelope>
-EOF;
-include "soap12-test.inc";
-?>
---EXPECT--
-<?xml version="1.0" encoding="UTF-8"?>
-<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope"><env:Body><env:Fault><env:Code><env:Value>env:MustUnderstand</env:Value></env:Code><env:Reason><env:Text>Header not understood</env:Text></env:Reason></env:Fault></env:Body></env:Envelope>
diff --git a/ext/soap/tests/soap12/T37.phpt b/ext/soap/tests/soap12/T37.phpt
deleted file mode 100644
index cdce8a4429..0000000000
--- a/ext/soap/tests/soap12/T37.phpt
+++ /dev/null
@@ -1,23 +0,0 @@
---TEST--
-SOAP 1.2: T37 unknownHdr
---SKIPIF--
-<?php require_once('skipif.inc'); ?>
---FILE--
-<?php
-$HTTP_RAW_POST_DATA = <<<EOF
-<?xml version='1.0' ?>
-<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope">
- <env:Header>
- <test:Unknown xmlns:test="http://example.org/ts-tests"
- env:role="http://www.w3.org/2003/05/soap-envelope/role/ultimateReceiver">foo</test:Unknown>
- </env:Header>
- <env:Body>
- </env:Body>
-</env:Envelope>
-EOF;
-include "soap12-test.inc";
-?>
---EXPECT--
-<?xml version="1.0" encoding="UTF-8"?>
-<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope"><env:Body/></env:Envelope>
-ok
diff --git a/ext/soap/tests/soap12/T38_1.phpt b/ext/soap/tests/soap12/T38_1.phpt
deleted file mode 100644
index 30007e55ef..0000000000
--- a/ext/soap/tests/soap12/T38_1.phpt
+++ /dev/null
@@ -1,27 +0,0 @@
---TEST--
-SOAP 1.2: T38.1 doubleHdr
---SKIPIF--
-<?php require_once('skipif.inc'); ?>
---FILE--
-<?php
-$HTTP_RAW_POST_DATA = <<<EOF
-<?xml version='1.0' ?>
-<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope">
- <env:Header>
- <test:Unknown xmlns:test="http://example.org/ts-tests"
- env:mustUnderstand="false"
- env:role="http://example.org/ts-tests/C">foo</test:Unknown>
- <test:echoOk xmlns:test="http://example.org/ts-tests"
- env:mustUnderstand="0"
- env:role="http://example.org/ts-tests/C">foo</test:echoOk>
- </env:Header>
- <env:Body>
- </env:Body>
-</env:Envelope>
-EOF;
-include "soap12-test.inc";
-?>
---EXPECT--
-<?xml version="1.0" encoding="UTF-8"?>
-<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope" xmlns:ns1="http://example.org/ts-tests"><env:Header><ns1:responseOk>foo</ns1:responseOk></env:Header><env:Body/></env:Envelope>
-ok
diff --git a/ext/soap/tests/soap12/T38_2.phpt b/ext/soap/tests/soap12/T38_2.phpt
deleted file mode 100644
index efff2f4db3..0000000000
--- a/ext/soap/tests/soap12/T38_2.phpt
+++ /dev/null
@@ -1,27 +0,0 @@
---TEST--
-SOAP 1.2: T38.2 doubleHdr
---SKIPIF--
-<?php require_once('skipif.inc'); ?>
---FILE--
-<?php
-$HTTP_RAW_POST_DATA = <<<EOF
-<?xml version='1.0' ?>
-<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope">
- <env:Header>
- <test:echoOk xmlns:test="http://example.org/ts-tests"
- env:mustUnderstand="true"
- env:role="http://example.org/ts-tests/C">foo</test:echoOk>
- <test:echoOk xmlns:test="http://example.org/ts-tests"
- env:mustUnderstand="1"
- env:role="http://example.org/ts-tests/C">bar</test:echoOk>
- </env:Header>
- <env:Body>
- </env:Body>
-</env:Envelope>
-EOF;
-include "soap12-test.inc";
-?>
---EXPECT--
-<?xml version="1.0" encoding="UTF-8"?>
-<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope" xmlns:ns1="http://example.org/ts-tests"><env:Header><ns1:responseOk>foo</ns1:responseOk><ns1:responseOk>bar</ns1:responseOk></env:Header><env:Body/></env:Envelope>
-ok
diff --git a/ext/soap/tests/soap12/T39.phpt b/ext/soap/tests/soap12/T39.phpt
deleted file mode 100644
index 2b29562aba..0000000000
--- a/ext/soap/tests/soap12/T39.phpt
+++ /dev/null
@@ -1,22 +0,0 @@
---TEST--
-SOAP 1.2: T39 unknownHdr
---SKIPIF--
-<?php require_once('skipif.inc'); ?>
---FILE--
-<?php
-$HTTP_RAW_POST_DATA = <<<EOF
-<?xml version='1.0' ?>
-<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope">
- <env:Header>
- <test:Unknown xmlns:test="http://example.org/ts-tests"
- env:mustUnderstand="9">foo</test:Unknown>
- </env:Header>
- <env:Body>
- </env:Body>
-</env:Envelope>
-EOF;
-include "soap12-test.inc";
-?>
---EXPECT--
-<?xml version="1.0" encoding="UTF-8"?>
-<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope"><env:Body><env:Fault><env:Code><env:Value>env:Sender</env:Value></env:Code><env:Reason><env:Text>mustUnderstand value is not boolean</env:Text></env:Reason></env:Fault></env:Body></env:Envelope>
diff --git a/ext/soap/tests/soap12/T40.phpt b/ext/soap/tests/soap12/T40.phpt
deleted file mode 100644
index 27b4a21c47..0000000000
--- a/ext/soap/tests/soap12/T40.phpt
+++ /dev/null
@@ -1,26 +0,0 @@
---TEST--
-SOAP 1.2: T40 echoOK
---SKIPIF--
-<?php require_once('skipif.inc'); ?>
---FILE--
-<?php
-$HTTP_RAW_POST_DATA = <<<EOF
-<?xml version='1.0' ?>
-<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope">
- <env:Header>
- <test:Unknown xmlns:test="http://[FEDC:BA98:7654:3210:FEDC:BA98:7654:3210]/ts-tests"
- env:role="http://www.w3.org/2003/05/soap-envelope/role/ultimateReceiver"
- env:mustUnderstand="false">
- foo
- </test:Unknown>
- </env:Header>
- <env:Body>
- </env:Body>
-</env:Envelope>
-EOF;
-include "soap12-test.inc";
-?>
---EXPECT--
-<?xml version="1.0" encoding="UTF-8"?>
-<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope"><env:Body/></env:Envelope>
-ok \ No newline at end of file
diff --git a/ext/soap/tests/soap12/T41.phpt b/ext/soap/tests/soap12/T41.phpt
deleted file mode 100644
index d57eead1e8..0000000000
--- a/ext/soap/tests/soap12/T41.phpt
+++ /dev/null
@@ -1,30 +0,0 @@
---TEST--
-SOAP 1.2: T41 echoStruct
---SKIPIF--
-<?php require_once('skipif.inc'); ?>
---FILE--
-<?php
-$HTTP_RAW_POST_DATA = <<<EOF
-<?xml version="1.0"?>
-<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope"
- xmlns:xsd="http://www.w3.org/2001/XMLSchema"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
- <env:Body>
- <test:echoStruct xmlns:test="http://example.org/ts-tests"
- env:encodingStyle="http://www.w3.org/2003/05/soap-encoding">
- <inputStruct xsi:type="ns1:SOAPStruct"
- xmlns:ns1="http://example.org/ts-tests/xsd">
- <varInt xsi:type="xsd:int">42</varInt>
- <varFloat xsi:type="xsd:float">0.005</varFloat>
- <varString xsi:type="xsd:string">hello world</varString>
- </inputStruct>
- </test:echoStruct>
- </env:Body>
-</env:Envelope>
-EOF;
-include "soap12-test.inc";
-?>
---EXPECT--
-<?xml version="1.0" encoding="UTF-8"?>
-<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope" xmlns:ns1="http://example.org/ts-tests" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:ns2="http://example.org/ts-tests/xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:enc="http://www.w3.org/2003/05/soap-encoding"><env:Body xmlns:rpc="http://www.w3.org/2003/05/soap-rpc"><ns1:echoStructResponse env:encodingStyle="http://www.w3.org/2003/05/soap-encoding"><rpc:result>return</rpc:result><return xsi:type="ns2:SOAPStruct"><varString xsi:type="xsd:string">hello world</varString><varInt xsi:type="xsd:int">42</varInt><varFloat xsi:type="xsd:float">0.005</varFloat></return></ns1:echoStructResponse></env:Body></env:Envelope>
-ok
diff --git a/ext/soap/tests/soap12/T42.phpt b/ext/soap/tests/soap12/T42.phpt
deleted file mode 100644
index 7ce828135d..0000000000
--- a/ext/soap/tests/soap12/T42.phpt
+++ /dev/null
@@ -1,39 +0,0 @@
---TEST--
-SOAP 1.2: T42 echoStructArray
---SKIPIF--
-<?php require_once('skipif.inc'); ?>
---FILE--
-<?php
-$HTTP_RAW_POST_DATA = <<<EOF
-<?xml version="1.0"?>
-<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope"
- xmlns:xsd="http://www.w3.org/2001/XMLSchema"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
- <env:Body>
- <test:echoStructArray xmlns:test="http://example.org/ts-tests"
- env:encodingStyle="http://www.w3.org/2003/05/soap-encoding">
- <inputStructArray enc:itemType="ns1:SOAPStruct"
- enc:arraySize="2"
- xmlns:ns1="http://example.org/ts-tests/xsd"
- xmlns:enc="http://www.w3.org/2003/05/soap-encoding">
- <item xsi:type="ns1:SOAPStruct">
- <varInt xsi:type="xsd:int">42</varInt>
- <varFloat xsi:type="xsd:float">0.005</varFloat>
- <varString xsi:type="xsd:string">hello world</varString>
- </item>
- <item xsi:type="ns1:SOAPStruct">
- <varInt xsi:type="xsd:int">43</varInt>
- <varFloat xsi:type="xsd:float">0.123</varFloat>
- <varString xsi:type="xsd:string">bye world</varString>
- </item>
- </inputStructArray>
- </test:echoStructArray>
- </env:Body>
-</env:Envelope>
-EOF;
-include "soap12-test.inc";
-?>
---EXPECT--
-<?xml version="1.0" encoding="UTF-8"?>
-<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope" xmlns:ns1="http://example.org/ts-tests" xmlns:ns2="http://example.org/ts-tests/xsd" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:enc="http://www.w3.org/2003/05/soap-encoding"><env:Body xmlns:rpc="http://www.w3.org/2003/05/soap-rpc"><ns1:echoStructArrayResponse env:encodingStyle="http://www.w3.org/2003/05/soap-encoding"><rpc:result>return</rpc:result><return enc:itemType="ns2:SOAPStruct" enc:arraySize="2" xsi:type="ns2:ArrayOfSOAPStruct"><item xsi:type="ns2:SOAPStruct"><varString xsi:type="xsd:string">hello world</varString><varInt xsi:type="xsd:int">42</varInt><varFloat xsi:type="xsd:float">0.005</varFloat></item><item xsi:type="ns2:SOAPStruct"><varString xsi:type="xsd:string">bye world</varString><varInt xsi:type="xsd:int">43</varInt><varFloat xsi:type="xsd:float">0.123</varFloat></item></return></ns1:echoStructArrayResponse></env:Body></env:Envelope>
-ok
diff --git a/ext/soap/tests/soap12/T43.phpt b/ext/soap/tests/soap12/T43.phpt
deleted file mode 100644
index 7dd6316144..0000000000
--- a/ext/soap/tests/soap12/T43.phpt
+++ /dev/null
@@ -1,30 +0,0 @@
---TEST--
-SOAP 1.2: T43 echoStructAsSimpleTypes
---SKIPIF--
-<?php require_once('skipif.inc'); ?>
---FILE--
-<?php
-$HTTP_RAW_POST_DATA = <<<EOF
-<?xml version="1.0"?>
-<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope"
- xmlns:xsd="http://www.w3.org/2001/XMLSchema"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
- <env:Body>
- <test:echoStructAsSimpleTypes xmlns:test="http://example.org/ts-tests"
- env:encodingStyle="http://www.w3.org/2003/05/soap-encoding">
- <inputStruct xsi:type="ns1:SOAPStruct"
- xmlns:ns1="http://example.org/ts-tests/xsd">
- <varInt xsi:type="xsd:int">42</varInt>
- <varFloat xsi:type="xsd:float">0.005</varFloat>
- <varString xsi:type="xsd:string">hello world</varString>
- </inputStruct>
- </test:echoStructAsSimpleTypes>
- </env:Body>
-</env:Envelope>
-EOF;
-include "soap12-test.inc";
-?>
---EXPECT--
-<?xml version="1.0" encoding="UTF-8"?>
-<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope" xmlns:ns1="http://example.org/ts-tests" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:enc="http://www.w3.org/2003/05/soap-encoding"><env:Body><ns1:echoStructAsSimpleTypesResponse env:encodingStyle="http://www.w3.org/2003/05/soap-encoding"><outputString xsi:type="xsd:string">hello world</outputString><outputInteger xsi:type="xsd:int">42</outputInteger><outputFloat xsi:type="xsd:float">0.005</outputFloat></ns1:echoStructAsSimpleTypesResponse></env:Body></env:Envelope>
-ok
diff --git a/ext/soap/tests/soap12/T44.phpt b/ext/soap/tests/soap12/T44.phpt
deleted file mode 100644
index 2264f105c8..0000000000
--- a/ext/soap/tests/soap12/T44.phpt
+++ /dev/null
@@ -1,27 +0,0 @@
---TEST--
-SOAP 1.2: T44 echoSimpleTypesAsStruct
---SKIPIF--
-<?php require_once('skipif.inc'); ?>
---FILE--
-<?php
-$HTTP_RAW_POST_DATA = <<<EOF
-<?xml version="1.0"?>
-<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope"
- xmlns:xsd="http://www.w3.org/2001/XMLSchema"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
- <env:Body>
- <test:echoSimpleTypesAsStruct xmlns:test="http://example.org/ts-tests"
- env:encodingStyle="http://www.w3.org/2003/05/soap-encoding">
- <inputInt xsi:type="xsd:int">42</inputInt>
- <inputFloat xsi:type="xsd:float">0.005</inputFloat>
- <inputString xsi:type="xsd:string">hello world</inputString>
- </test:echoSimpleTypesAsStruct>
- </env:Body>
-</env:Envelope>
-EOF;
-include "soap12-test.inc";
-?>
---EXPECT--
-<?xml version="1.0" encoding="UTF-8"?>
-<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope" xmlns:ns1="http://example.org/ts-tests" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:ns2="http://example.org/ts-tests/xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:enc="http://www.w3.org/2003/05/soap-encoding"><env:Body xmlns:rpc="http://www.w3.org/2003/05/soap-rpc"><ns1:echoSimpleTypesAsStructResponse env:encodingStyle="http://www.w3.org/2003/05/soap-encoding"><rpc:result>return</rpc:result><return xsi:type="ns2:SOAPStruct"><varString xsi:type="xsd:string">hello world</varString><varInt xsi:type="xsd:int">42</varInt><varFloat xsi:type="xsd:float">0.005</varFloat></return></ns1:echoSimpleTypesAsStructResponse></env:Body></env:Envelope>
-ok
diff --git a/ext/soap/tests/soap12/T45.phpt b/ext/soap/tests/soap12/T45.phpt
deleted file mode 100644
index 4bbcc818d4..0000000000
--- a/ext/soap/tests/soap12/T45.phpt
+++ /dev/null
@@ -1,35 +0,0 @@
---TEST--
-SOAP 1.2: T45 echoNestedStruct
---SKIPIF--
-<?php require_once('skipif.inc'); ?>
---FILE--
-<?php
-$HTTP_RAW_POST_DATA = <<<EOF
-<?xml version="1.0"?>
-<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope"
- xmlns:xsd="http://www.w3.org/2001/XMLSchema"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
- <env:Body>
- <test:echoNestedStruct xmlns:test="http://example.org/ts-tests"
- env:encodingStyle="http://www.w3.org/2003/05/soap-encoding">
- <inputStruct xsi:type="ns1:SOAPStructStruct"
- xmlns:ns1="http://example.org/ts-tests/xsd">
- <varInt xsi:type="xsd:int">42</varInt>
- <varFloat xsi:type="xsd:float">0.005</varFloat>
- <varString xsi:type="xsd:string">hello world</varString>
- <varStruct xsi:type="ns1:SOAPStruct">
- <varInt xsi:type="xsd:int">99</varInt>
- <varFloat xsi:type="xsd:float">5.5</varFloat>
- <varString xsi:type="xsd:string">nested struct</varString>
- </varStruct>
- </inputStruct>
- </test:echoNestedStruct>
- </env:Body>
-</env:Envelope>
-EOF;
-include "soap12-test.inc";
-?>
---EXPECT--
-<?xml version="1.0" encoding="UTF-8"?>
-<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope" xmlns:ns1="http://example.org/ts-tests" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:ns2="http://example.org/ts-tests/xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:enc="http://www.w3.org/2003/05/soap-encoding"><env:Body xmlns:rpc="http://www.w3.org/2003/05/soap-rpc"><ns1:echoNestedStructResponse env:encodingStyle="http://www.w3.org/2003/05/soap-encoding"><rpc:result>return</rpc:result><return xsi:type="ns2:SOAPStructStruct"><varString xsi:type="xsd:string">hello world</varString><varInt xsi:type="xsd:int">42</varInt><varFloat xsi:type="xsd:float">0.005</varFloat><varStruct xsi:type="ns2:SOAPStruct"><varString xsi:type="xsd:string">nested struct</varString><varInt xsi:type="xsd:int">99</varInt><varFloat xsi:type="xsd:float">5.5</varFloat></varStruct></return></ns1:echoNestedStructResponse></env:Body></env:Envelope>
-ok
diff --git a/ext/soap/tests/soap12/T46.phpt b/ext/soap/tests/soap12/T46.phpt
deleted file mode 100644
index 9cbb4b16da..0000000000
--- a/ext/soap/tests/soap12/T46.phpt
+++ /dev/null
@@ -1,36 +0,0 @@
---TEST--
-SOAP 1.2: T46 echoNestedArray
---SKIPIF--
-<?php require_once('skipif.inc'); ?>
---FILE--
-<?php
-$HTTP_RAW_POST_DATA = <<<EOF
-<?xml version="1.0"?>
-<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope"
- xmlns:xsd="http://www.w3.org/2001/XMLSchema"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
- <env:Body>
- <test:echoNestedArray xmlns:test="http://exaple.org/ts-tests"
- env:encodingStyle="http://www.w3.org/2003/05/soap-encoding">
- <inputStruct xsi:type="ns1:SOAPArrayStruct"
- xmlns:ns1="http://example.org/ts-tests/xsd">
- <varInt xsi:type="xsd:int">42</varInt>
- <varFloat xsi:type="xsd:float">0.005</varFloat>
- <varString xsi:type="xsd:string">hello world</varString>
- <varArray enc:itemType="xsd:string" enc:arraySize="3"
- xmlns:enc="http://www.w3.org/2003/05/soap-encoding">
- <item xsi:type="xsd:string">red</item>
- <item xsi:type="xsd:string">blue</item>
- <item xsi:type="xsd:string">green</item>
- </varArray>
- </inputStruct>
- </test:echoNestedArray>
- </env:Body>
-</env:Envelope>
-EOF;
-include "soap12-test.inc";
-?>
---EXPECT--
-<?xml version="1.0" encoding="UTF-8"?>
-<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope" xmlns:ns1="http://example.org/ts-tests" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:ns2="http://example.org/ts-tests/xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:enc="http://www.w3.org/2003/05/soap-encoding"><env:Body xmlns:rpc="http://www.w3.org/2003/05/soap-rpc"><ns1:echoNestedArrayResponse env:encodingStyle="http://www.w3.org/2003/05/soap-encoding"><rpc:result>return</rpc:result><return xsi:type="ns2:SOAPArrayStruct"><varString xsi:type="xsd:string">hello world</varString><varInt xsi:type="xsd:int">42</varInt><varFloat xsi:type="xsd:float">0.005</varFloat><varArray enc:itemType="xsd:string" enc:arraySize="3" xsi:type="ns2:ArrayOfstring"><item xsi:type="xsd:string">red</item><item xsi:type="xsd:string">blue</item><item xsi:type="xsd:string">green</item></varArray></return></ns1:echoNestedArrayResponse></env:Body></env:Envelope>
-ok
diff --git a/ext/soap/tests/soap12/T47.phpt b/ext/soap/tests/soap12/T47.phpt
deleted file mode 100644
index a9bb43e368..0000000000
--- a/ext/soap/tests/soap12/T47.phpt
+++ /dev/null
@@ -1,29 +0,0 @@
---TEST--
-SOAP 1.2: T47 echoFloatArray
---SKIPIF--
-<?php require_once('skipif.inc'); ?>
---FILE--
-<?php
-$HTTP_RAW_POST_DATA = <<<EOF
-<?xml version="1.0"?>
-<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope"
- xmlns:xsd="http://www.w3.org/2001/XMLSchema"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
- <env:Body>
- <test:echoFloatArray xmlns:test="http://example.org/ts-tests"
- env:encodingStyle="http://www.w3.org/2003/05/soap-encoding">
- <inputFloatArray enc:itemType="xsd:float" enc:arraySize="2"
- xmlns:enc="http://www.w3.org/2003/05/soap-encoding">
- <item xsi:type="xsd:float">5.5</item>
- <item xsi:type="xsd:float">12999.9</item>
- </inputFloatArray>
- </test:echoFloatArray>
- </env:Body>
-</env:Envelope>
-EOF;
-include "soap12-test.inc";
-?>
---EXPECT--
-<?xml version="1.0" encoding="UTF-8"?>
-<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope" xmlns:ns1="http://example.org/ts-tests" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:ns2="http://example.org/ts-tests/xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:enc="http://www.w3.org/2003/05/soap-encoding"><env:Body xmlns:rpc="http://www.w3.org/2003/05/soap-rpc"><ns1:echoFloatArrayResponse env:encodingStyle="http://www.w3.org/2003/05/soap-encoding"><rpc:result>return</rpc:result><return enc:itemType="xsd:float" enc:arraySize="2" xsi:type="ns2:ArrayOffloat"><item xsi:type="xsd:float">5.5</item><item xsi:type="xsd:float">12999.9</item></return></ns1:echoFloatArrayResponse></env:Body></env:Envelope>
-ok
diff --git a/ext/soap/tests/soap12/T48.phpt b/ext/soap/tests/soap12/T48.phpt
deleted file mode 100644
index 07ac4070ae..0000000000
--- a/ext/soap/tests/soap12/T48.phpt
+++ /dev/null
@@ -1,29 +0,0 @@
---TEST--
-SOAP 1.2: T48 echoStringArray
---SKIPIF--
-<?php require_once('skipif.inc'); ?>
---FILE--
-<?php
-$HTTP_RAW_POST_DATA = <<<EOF
-<?xml version="1.0"?>
-<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope"
- xmlns:xsd="http://www.w3.org/2001/XMLSchema"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
- <env:Body>
- <test:echoStringArray xmlns:test="http://example.org/ts-tests"
- env:encodingStyle="http://www.w3.org/2003/05/soap-encoding">
- <inputStringArray enc:itemType="xsd:string" enc:arraySize="2"
- xmlns:enc="http://www.w3.org/2003/05/soap-encoding">
- <item xsi:type="xsd:string">hello</item>
- <item xsi:type="xsd:string">world</item>
- </inputStringArray>
- </test:echoStringArray>
- </env:Body>
-</env:Envelope>
-EOF;
-include "soap12-test.inc";
-?>
---EXPECT--
-<?xml version="1.0" encoding="UTF-8"?>
-<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope" xmlns:ns1="http://example.org/ts-tests" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:ns2="http://example.org/ts-tests/xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:enc="http://www.w3.org/2003/05/soap-encoding"><env:Body xmlns:rpc="http://www.w3.org/2003/05/soap-rpc"><ns1:echoStringArrayResponse env:encodingStyle="http://www.w3.org/2003/05/soap-encoding"><rpc:result>return</rpc:result><return enc:itemType="xsd:string" enc:arraySize="2" xsi:type="ns2:ArrayOfstring"><item xsi:type="xsd:string">hello</item><item xsi:type="xsd:string">world</item></return></ns1:echoStringArrayResponse></env:Body></env:Envelope>
-ok
diff --git a/ext/soap/tests/soap12/T49.phpt b/ext/soap/tests/soap12/T49.phpt
deleted file mode 100644
index c919e2b76a..0000000000
--- a/ext/soap/tests/soap12/T49.phpt
+++ /dev/null
@@ -1,29 +0,0 @@
---TEST--
-SOAP 1.2: T49 echoStringArray
---SKIPIF--
-<?php require_once('skipif.inc'); ?>
---FILE--
-<?php
-$HTTP_RAW_POST_DATA = <<<EOF
-<?xml version="1.0"?>
-<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope"
- xmlns:xsd="http://www.w3.org/2001/XMLSchema"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
- <env:Body>
- <test:echoStringArray xmlns:test="http://example.org/ts-tests"
- env:encodingStyle="http://www.w3.org/2003/05/soap-encoding">
- <inputStringArray enc:arraySize="2"
- xmlns:enc="http://www.w3.org/2003/05/soap-encoding">
- <item xsi:type="xsd:string">hello</item>
- <item xsi:type="xsd:string">world</item>
- </inputStringArray>
- </test:echoStringArray>
- </env:Body>
-</env:Envelope>
-EOF;
-include "soap12-test.inc";
-?>
---EXPECT--
-<?xml version="1.0" encoding="UTF-8"?>
-<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope" xmlns:ns1="http://example.org/ts-tests" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:ns2="http://example.org/ts-tests/xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:enc="http://www.w3.org/2003/05/soap-encoding"><env:Body xmlns:rpc="http://www.w3.org/2003/05/soap-rpc"><ns1:echoStringArrayResponse env:encodingStyle="http://www.w3.org/2003/05/soap-encoding"><rpc:result>return</rpc:result><return enc:itemType="xsd:string" enc:arraySize="2" xsi:type="ns2:ArrayOfstring"><item xsi:type="xsd:string">hello</item><item xsi:type="xsd:string">world</item></return></ns1:echoStringArrayResponse></env:Body></env:Envelope>
-ok
diff --git a/ext/soap/tests/soap12/T50.phpt b/ext/soap/tests/soap12/T50.phpt
deleted file mode 100644
index 8e431e5aec..0000000000
--- a/ext/soap/tests/soap12/T50.phpt
+++ /dev/null
@@ -1,29 +0,0 @@
---TEST--
-SOAP 1.2: T50 echoIntegerArray
---SKIPIF--
-<?php require_once('skipif.inc'); ?>
---FILE--
-<?php
-$HTTP_RAW_POST_DATA = <<<EOF
-<?xml version="1.0"?>
-<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope"
- xmlns:xsd="http://www.w3.org/2001/XMLSchema"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
- <env:Body>
- <test:echoIntegerArray xmlns:test="http://example.org/ts-tests"
- env:encodingStyle="http://www.w3.org/2003/05/soap-encoding">
- <inputIntegerArray enc:itemType="xsd:int" enc:arraySize="2"
- xmlns:enc="http://www.w3.org/2003/05/soap-encoding">
- <item xsi:type="xsd:int">100</item>
- <item xsi:type="xsd:int">200</item>
- </inputIntegerArray>
- </test:echoIntegerArray>
- </env:Body>
-</env:Envelope>
-EOF;
-include "soap12-test.inc";
-?>
---EXPECT--
-<?xml version="1.0" encoding="UTF-8"?>
-<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope" xmlns:ns1="http://example.org/ts-tests" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:ns2="http://example.org/ts-tests/xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:enc="http://www.w3.org/2003/05/soap-encoding"><env:Body xmlns:rpc="http://www.w3.org/2003/05/soap-rpc"><ns1:echoIntegerArrayResponse env:encodingStyle="http://www.w3.org/2003/05/soap-encoding"><rpc:result>return</rpc:result><return enc:itemType="xsd:int" enc:arraySize="2" xsi:type="ns2:ArrayOfint"><item xsi:type="xsd:int">100</item><item xsi:type="xsd:int">200</item></return></ns1:echoIntegerArrayResponse></env:Body></env:Envelope>
-ok
diff --git a/ext/soap/tests/soap12/T51.phpt b/ext/soap/tests/soap12/T51.phpt
deleted file mode 100644
index 97765763c1..0000000000
--- a/ext/soap/tests/soap12/T51.phpt
+++ /dev/null
@@ -1,27 +0,0 @@
---TEST--
-SOAP 1.2: T51 echoBase64
---SKIPIF--
-<?php require_once('skipif.inc'); ?>
---FILE--
-<?php
-$HTTP_RAW_POST_DATA = <<<EOF
-<?xml version="1.0"?>
-<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xmlns:xsd="http://www.w3.org/2001/XMLSchema">
- <env:Body>
- <test:echoBase64 xmlns:test="http://example.org/ts-tests"
- env:encodingStyle="http://www.w3.org/2003/05/soap-encoding">
- <inputBase64 xsi:type="xsd:base64Binary">
- YUdWc2JHOGdkMjl5YkdRPQ==
- </inputBase64>
- </test:echoBase64>
- </env:Body>
-</env:Envelope>
-EOF;
-include "soap12-test.inc";
-?>
---EXPECT--
-<?xml version="1.0" encoding="UTF-8"?>
-<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope" xmlns:ns1="http://example.org/ts-tests" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:enc="http://www.w3.org/2003/05/soap-encoding"><env:Body xmlns:rpc="http://www.w3.org/2003/05/soap-rpc"><ns1:echoBase64Response env:encodingStyle="http://www.w3.org/2003/05/soap-encoding"><rpc:result>return</rpc:result><return xsi:type="xsd:base64Binary">YUdWc2JHOGdkMjl5YkdRPQ==</return></ns1:echoBase64Response></env:Body></env:Envelope>
-ok
diff --git a/ext/soap/tests/soap12/T52.phpt b/ext/soap/tests/soap12/T52.phpt
deleted file mode 100644
index 3034f0a297..0000000000
--- a/ext/soap/tests/soap12/T52.phpt
+++ /dev/null
@@ -1,25 +0,0 @@
---TEST--
-SOAP 1.2: T52 echoBoolean
---SKIPIF--
-<?php require_once('skipif.inc'); ?>
---FILE--
-<?php
-$HTTP_RAW_POST_DATA = <<<EOF
-<?xml version="1.0"?>
-<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope"
- xmlns:xsd="http://www.w3.org/2001/XMLSchema"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
- <env:Body>
- <test:echoBoolean xmlns:test="http://example.org/ts-tests"
- env:encodingStyle="http://www.w3.org/2003/05/soap-encoding">
- <inputBoolean xsi:type="xsd:boolean">1</inputBoolean>
- </test:echoBoolean>
- </env:Body>
-</env:Envelope>
-EOF;
-include "soap12-test.inc";
-?>
---EXPECT--
-<?xml version="1.0" encoding="UTF-8"?>
-<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope" xmlns:ns1="http://example.org/ts-tests" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:enc="http://www.w3.org/2003/05/soap-encoding"><env:Body xmlns:rpc="http://www.w3.org/2003/05/soap-rpc"><ns1:echoBooleanResponse env:encodingStyle="http://www.w3.org/2003/05/soap-encoding"><rpc:result>return</rpc:result><return xsi:type="xsd:boolean">1</return></ns1:echoBooleanResponse></env:Body></env:Envelope>
-ok
diff --git a/ext/soap/tests/soap12/T53.phpt b/ext/soap/tests/soap12/T53.phpt
deleted file mode 100644
index c1c8fe63aa..0000000000
--- a/ext/soap/tests/soap12/T53.phpt
+++ /dev/null
@@ -1,25 +0,0 @@
---TEST--
-SOAP 1.2: T53 echoDate
---SKIPIF--
-<?php require_once('skipif.inc'); ?>
---FILE--
-<?php
-$HTTP_RAW_POST_DATA = <<<EOF
-<?xml version="1.0" encoding="UTF-8"?>
-<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope"
- xmlns:xsd="http://www.w3.org/2001/XMLSchema"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
- <env:Body>
- <test:echoDate xmlns:test="http://example.org/ts-tests"
- env:encodingStyle="http://www.w3.org/2003/05/soap-encoding">
- <inputDate xsi:type="xsd:date">1956-10-18T22:20:00-07:00</inputDate>
- </test:echoDate>
- </env:Body>
-</env:Envelope>
-EOF;
-include "soap12-test.inc";
-?>
---EXPECT--
-<?xml version="1.0" encoding="UTF-8"?>
-<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope" xmlns:ns1="http://example.org/ts-tests" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:enc="http://www.w3.org/2003/05/soap-encoding"><env:Body xmlns:rpc="http://www.w3.org/2003/05/soap-rpc"><ns1:echoDateResponse env:encodingStyle="http://www.w3.org/2003/05/soap-encoding"><rpc:result>return</rpc:result><return xsi:type="xsd:dateTime">1956-10-18T22:20:00-07:00</return></ns1:echoDateResponse></env:Body></env:Envelope>
-ok
diff --git a/ext/soap/tests/soap12/T54.phpt b/ext/soap/tests/soap12/T54.phpt
deleted file mode 100644
index ba3ed35526..0000000000
--- a/ext/soap/tests/soap12/T54.phpt
+++ /dev/null
@@ -1,25 +0,0 @@
---TEST--
-SOAP 1.2: T54 echoDecimal
---SKIPIF--
-<?php require_once('skipif.inc'); ?>
---FILE--
-<?php
-$HTTP_RAW_POST_DATA = <<<EOF
-<?xml version="1.0" encoding="UTF-8"?>
-<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope"
- xmlns:xsd="http://www.w3.org/2001/XMLSchema"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
- <env:Body>
- <test:echoDecimal xmlns:test="http://example.org/ts-tests"
- env:encodingStyle="http://www.w3.org/2003/05/soap-encoding">
- <inputDecimal xsi:type="xsd:decimal">123.45678901234567890</inputDecimal>
- </test:echoDecimal>
- </env:Body>
-</env:Envelope>
-EOF;
-include "soap12-test.inc";
-?>
---EXPECT--
-<?xml version="1.0" encoding="UTF-8"?>
-<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope" xmlns:ns1="http://example.org/ts-tests" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:enc="http://www.w3.org/2003/05/soap-encoding"><env:Body xmlns:rpc="http://www.w3.org/2003/05/soap-rpc"><ns1:echoDecimalResponse env:encodingStyle="http://www.w3.org/2003/05/soap-encoding"><rpc:result>return</rpc:result><return xsi:type="xsd:decimal">123.45678901234567890</return></ns1:echoDecimalResponse></env:Body></env:Envelope>
-ok
diff --git a/ext/soap/tests/soap12/T55.phpt b/ext/soap/tests/soap12/T55.phpt
deleted file mode 100644
index 1c12e504f2..0000000000
--- a/ext/soap/tests/soap12/T55.phpt
+++ /dev/null
@@ -1,25 +0,0 @@
---TEST--
-SOAP 1.2: T55 echoFloat
---SKIPIF--
-<?php require_once('skipif.inc'); ?>
---FILE--
-<?php
-$HTTP_RAW_POST_DATA = <<<EOF
-<?xml version="1.0"?>
-<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope"
- xmlns:xsd="http://www.w3.org/2001/XMLSchema"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
- <env:Body>
- <test:echoFloat xmlns:test="http://example.org/ts-tests"
- env:encodingStyle="http://www.w3.org/2003/05/soap-encoding">
- <inputFloat xsi:type="xsd:float">0.005</inputFloat>
- </test:echoFloat>
- </env:Body>
-</env:Envelope>
-EOF;
-include "soap12-test.inc";
-?>
---EXPECT--
-<?xml version="1.0" encoding="UTF-8"?>
-<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope" xmlns:ns1="http://example.org/ts-tests" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:enc="http://www.w3.org/2003/05/soap-encoding"><env:Body xmlns:rpc="http://www.w3.org/2003/05/soap-rpc"><ns1:echoFloatResponse env:encodingStyle="http://www.w3.org/2003/05/soap-encoding"><rpc:result>return</rpc:result><return xsi:type="xsd:float">0.005</return></ns1:echoFloatResponse></env:Body></env:Envelope>
-ok
diff --git a/ext/soap/tests/soap12/T56.phpt b/ext/soap/tests/soap12/T56.phpt
deleted file mode 100644
index ca134270a3..0000000000
--- a/ext/soap/tests/soap12/T56.phpt
+++ /dev/null
@@ -1,34 +0,0 @@
---TEST--
-SOAP 1.2: T56 echoString
---SKIPIF--
-<?php require_once('skipif.inc'); ?>
---FILE--
-<?php
-$HTTP_RAW_POST_DATA = <<<EOF
-<?xml version='1.0' ?>
-<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope"
- xmlns:xsd="http://www.w3.org/2001/XMLSchema"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xmlns:enc="http://www.w3.org/2003/05/soap-encoding">
- <env:Header>
- <test:DataHolder xmlns:test="http://example.org/ts-tests"
- env:encodingStyle="http://www.w3.org/2003/05/soap-encoding">
- <test:Data enc:id="data-1" xsi:type="xsd:string">
- hello world
- </test:Data>
- </test:DataHolder>
- </env:Header>
- <env:Body>
- <test:echoString xmlns:test="http://example.org/ts-tests"
- env:encodingStyle="http://www.w3.org/2003/05/soap-encoding">
- <inputString enc:ref="#data-2" xsi:type="xsd:string" />
- </test:echoString>
- </env:Body>
-</env:Envelope>
-EOF;
-include "soap12-test.inc";
-?>
---EXPECT--
-<?xml version="1.0" encoding="UTF-8"?>
-<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope"><env:Body><env:Fault><env:Code><env:Value>env:Receiver</env:Value></env:Code><env:Reason><env:Text>SOAP-ERROR: Encoding: Unresolved reference '#data-2'</env:Text></env:Reason></env:Fault></env:Body></env:Envelope>
-
diff --git a/ext/soap/tests/soap12/T57.phpt b/ext/soap/tests/soap12/T57.phpt
deleted file mode 100644
index ad3e9ef50f..0000000000
--- a/ext/soap/tests/soap12/T57.phpt
+++ /dev/null
@@ -1,32 +0,0 @@
---TEST--
-SOAP 1.2: T57 echoString
---SKIPIF--
-<?php require_once('skipif.inc'); ?>
---FILE--
-<?php
-$HTTP_RAW_POST_DATA = <<<EOF
-<?xml version='1.0' ?>
-<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope"
- xmlns:xsd="http://www.w3.org/2001/XMLSchema"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xmlns:enc="http://www.w3.org/2003/05/soap-encoding">
- <env:Header>
- <test:DataHolder xmlns:test="http://example.org/ts-tests"
- env:encodingStyle="http://www.w3.org/2003/05/soap-encoding">
- <test:Data enc:id="data" xsi:type="xsd:string">hello world</test:Data>
- </test:DataHolder>
- </env:Header>
- <env:Body>
- <test:echoString xmlns:test="http://example.org/ts-tests"
- env:encodingStyle="http://www.w3.org/2003/05/soap-encoding">
- <test:inputString enc:ref="#data" xsi:type="xsd:string" />
- </test:echoString>
- </env:Body>
-</env:Envelope>
-EOF;
-include "soap12-test.inc";
-?>
---EXPECT--
-<?xml version="1.0" encoding="UTF-8"?>
-<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope" xmlns:ns1="http://example.org/ts-tests" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:enc="http://www.w3.org/2003/05/soap-encoding"><env:Body xmlns:rpc="http://www.w3.org/2003/05/soap-rpc"><ns1:echoStringResponse env:encodingStyle="http://www.w3.org/2003/05/soap-encoding"><rpc:result>return</rpc:result><return xsi:type="xsd:string">hello world</return></ns1:echoStringResponse></env:Body></env:Envelope>
-ok
diff --git a/ext/soap/tests/soap12/T58.phpt b/ext/soap/tests/soap12/T58.phpt
deleted file mode 100644
index 1c3e8ba7f5..0000000000
--- a/ext/soap/tests/soap12/T58.phpt
+++ /dev/null
@@ -1,28 +0,0 @@
---TEST--
-SOAP 1.2: T58 echoIntegerArray
---SKIPIF--
-<?php require_once('skipif.inc'); ?>
---FILE--
-<?php
-$HTTP_RAW_POST_DATA = <<<EOF
-<?xml version='1.0' ?>
-<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope"
- xmlns:xsd="http://www.w3.org/2001/XMLSchema"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
- <env:Body>
- <test:echoIntegerArray xmlns:test="http://example.org/ts-tests"
- env:encodingStyle="http://www.w3.org/2003/05/soap-encoding">
- <inputIntegerArray enc:itemType="xsd:int" enc:arraySize="1"
- xmlns:enc="http://www.w3.org/2003/05/soap-encoding">
- <a><b>1</b></a>
- </inputIntegerArray>
- </test:echoIntegerArray>
- </env:Body>
-</env:Envelope>
-EOF;
-include "soap12-test.inc";
-?>
---EXPECT--
-<?xml version="1.0" encoding="UTF-8"?>
-<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope"><env:Body><env:Fault><env:Code><env:Value>env:Receiver</env:Value></env:Code><env:Reason><env:Text>SOAP-ERROR: Encoding: Violation of encoding rules</env:Text></env:Reason></env:Fault></env:Body></env:Envelope>
-
diff --git a/ext/soap/tests/soap12/T59.phpt b/ext/soap/tests/soap12/T59.phpt
deleted file mode 100644
index 2ceef325bb..0000000000
--- a/ext/soap/tests/soap12/T59.phpt
+++ /dev/null
@@ -1,28 +0,0 @@
---TEST--
-SOAP 1.2: T59 echoStringArray
---SKIPIF--
-<?php require_once('skipif.inc'); ?>
---FILE--
-<?php
-$HTTP_RAW_POST_DATA = <<<EOF
-<?xml version="1.0"?>
-<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope"
- xmlns:xsd="http://www.w3.org/2001/XMLSchema"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
- <env:Body>
- <test:echoStringArray xmlns:test="http://example.org/ts-tests"
- env:encodingStyle="http://www.w3.org/2003/05/soap-encoding">
- <inputStringArray enc:itemType="xsd:string"
- xmlns:enc="http://www.w3.org/2003/05/soap-encoding">
- <item enc:id="data" xsi:type="xsd:string" enc:ref="#data">hello</item>
- <item>world</item>
- </inputStringArray>
- </test:echoStringArray>
- </env:Body>
-</env:Envelope>
-EOF;
-include "soap12-test.inc";
-?>
---EXPECT--
-<?xml version="1.0" encoding="UTF-8"?>
-<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope"><env:Body><env:Fault><env:Code><env:Value>env:Receiver</env:Value></env:Code><env:Reason><env:Text>SOAP-ERROR: Encoding: Violation of id and ref information items '#data'</env:Text></env:Reason></env:Fault></env:Body></env:Envelope>
diff --git a/ext/soap/tests/soap12/T60.phpt b/ext/soap/tests/soap12/T60.phpt
deleted file mode 100644
index 234ef4ccd4..0000000000
--- a/ext/soap/tests/soap12/T60.phpt
+++ /dev/null
@@ -1,29 +0,0 @@
---TEST--
-SOAP 1.2: T60 countItems
---SKIPIF--
-<?php require_once('skipif.inc'); ?>
---FILE--
-<?php
-$HTTP_RAW_POST_DATA = <<<EOF
-<?xml version='1.0' ?>
-<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope"
- xmlns:xsd="http://www.w3.org/2001/XMLSchema"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
- <env:Body>
- <test:countItems xmlns:test="http://example.org/ts-tests"
- xmlns:enc="http://www.w3.org/2003/05/soap-encoding"
- env:encodingStyle="http://www.w3.org/2003/05/soap-encoding">
- <inputStringArray enc:itemType="xsd:string" enc:arraySize="*">
- <item xsi:type="xsd:string">hello</item>
- <item xsi:type="xsd:string">world</item>
- </inputStringArray>
- </test:countItems>
- </env:Body>
-</env:Envelope>
-EOF;
-include "soap12-test.inc";
-?>
---EXPECT--
-<?xml version="1.0" encoding="UTF-8"?>
-<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope" xmlns:ns1="http://example.org/ts-tests" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:enc="http://www.w3.org/2003/05/soap-encoding"><env:Body xmlns:rpc="http://www.w3.org/2003/05/soap-rpc"><ns1:countItemsResponse env:encodingStyle="http://www.w3.org/2003/05/soap-encoding"><rpc:result>return</rpc:result><return xsi:type="xsd:int">2</return></ns1:countItemsResponse></env:Body></env:Envelope>
-ok
diff --git a/ext/soap/tests/soap12/T61.phpt b/ext/soap/tests/soap12/T61.phpt
deleted file mode 100644
index b688a794ff..0000000000
--- a/ext/soap/tests/soap12/T61.phpt
+++ /dev/null
@@ -1,28 +0,0 @@
---TEST--
-SOAP 1.2: T61 countItems
---SKIPIF--
-<?php require_once('skipif.inc'); ?>
---FILE--
-<?php
-$HTTP_RAW_POST_DATA = <<<EOF
-<?xml version='1.0' ?>
-<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope"
- xmlns:xsd="http://www.w3.org/2001/XMLSchema"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
- <env:Body>
- <test:countItems xmlns:test="http://example.org/ts-tests"
- xmlns:enc="http://www.w3.org/2003/05/soap-encoding"
- env:encodingStyle="http://www.w3.org/2003/05/soap-encoding">
- <inputStringArray enc:itemType="xsd:string" enc:arraySize="2 *">
- <item xsi:type="xsd:string">hello</item>
- <item xsi:type="xsd:string">world</item>
- </inputStringArray>
- </test:countItems>
- </env:Body>
-</env:Envelope>
-EOF;
-include "soap12-test.inc";
-?>
---EXPECT--
-<?xml version="1.0" encoding="UTF-8"?>
-<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope"><env:Body><env:Fault><env:Code><env:Value>env:Receiver</env:Value></env:Code><env:Reason><env:Text>SOAP-ERROR: Encoding: '*' may only be first arraySize value in list</env:Text></env:Reason></env:Fault></env:Body></env:Envelope>
diff --git a/ext/soap/tests/soap12/T63.phpt b/ext/soap/tests/soap12/T63.phpt
deleted file mode 100644
index 8b7aa291a6..0000000000
--- a/ext/soap/tests/soap12/T63.phpt
+++ /dev/null
@@ -1,24 +0,0 @@
---TEST--
-SOAP 1.2: T63 validateCountryCode
---SKIPIF--
-<?php require_once('skipif.inc'); ?>
---FILE--
-<?php
-$HTTP_RAW_POST_DATA = <<<EOF
-<?xml version='1.0' ?>
-<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope">
- <env:Header>
- <test:validateCountryCode xmlns:test="http://example.org/ts-tests"
- env:role="http://example.org/ts-tests/C"
- env:mustUnderstand="1">ABCD</test:validateCountryCode>
- </env:Header>
- <env:Body>
- </env:Body>
-</env:Envelope>
-
-EOF;
-include "soap12-test.inc";
-?>
---EXPECT--
-<?xml version="1.0" encoding="UTF-8"?>
-<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope" xmlns:ns1="http://example.org/ts-tests"><env:Header><ns1:validateCountryCodeFault>Country code must be 2 letters.</ns1:validateCountryCodeFault></env:Header><env:Body><env:Fault><env:Code><env:Value>env:Sender</env:Value></env:Code><env:Reason><env:Text>Not a valid country code</env:Text></env:Reason></env:Fault></env:Body></env:Envelope>
diff --git a/ext/soap/tests/soap12/T64.phpt b/ext/soap/tests/soap12/T64.phpt
deleted file mode 100644
index 24e62ecb6b..0000000000
--- a/ext/soap/tests/soap12/T64.phpt
+++ /dev/null
@@ -1,24 +0,0 @@
---TEST--
-SOAP 1.2: T64 echoOk
---SKIPIF--
-<?php require_once('skipif.inc'); ?>
---FILE--
-<?php
-$HTTP_RAW_POST_DATA = <<<EOF
-<?xml version='1.0' ?>
-<!DOCTYPE DOC [
-<!NOTATION application_xml SYSTEM 'http://www.isi.edu/in-notes/iana/assignments/media-types/application/xml'>
-]>
-<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope">
- <env:Body>
- <test:echoOk xmlns:test="http://example.org/ts-tests">
- foo
- </test:echoOk>
- </env:Body>
-</env:Envelope>
-EOF;
-include "soap12-test.inc";
-?>
---EXPECT--
-<?xml version="1.0" encoding="UTF-8"?>
-<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope"><env:Body><env:Fault><env:Code><env:Value>env:Receiver</env:Value></env:Code><env:Reason><env:Text>DTD are not supported by SOAP</env:Text></env:Reason></env:Fault></env:Body></env:Envelope>
diff --git a/ext/soap/tests/soap12/T65.phpt b/ext/soap/tests/soap12/T65.phpt
deleted file mode 100644
index cd96d4a82f..0000000000
--- a/ext/soap/tests/soap12/T65.phpt
+++ /dev/null
@@ -1,26 +0,0 @@
---TEST--
-SOAP 1.2: T65 echoOk
---SKIPIF--
-<?php require_once('skipif.inc'); ?>
---FILE--
-<?php
-$HTTP_RAW_POST_DATA = <<<EOF
-<?xml version='1.0' ?>
-<!DOCTYPE DOC [
-<!ELEMENT Envelope (Body) >
-<!ELEMENT Body (echoOk) >
-<!ELEMENT echoOk (#PCDATA) >
-]>
-<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope">
- <env:Body>
- <test:echoOk xmlns:test="http://example.org/ts-tests">
- foo
- </test:echoOk>
- </env:Body>
-</env:Envelope>
-EOF;
-include "soap12-test.inc";
-?>
---EXPECT--
-<?xml version="1.0" encoding="UTF-8"?>
-<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope"><env:Body><env:Fault><env:Code><env:Value>env:Receiver</env:Value></env:Code><env:Reason><env:Text>DTD are not supported by SOAP</env:Text></env:Reason></env:Fault></env:Body></env:Envelope>
diff --git a/ext/soap/tests/soap12/T66.phpt b/ext/soap/tests/soap12/T66.phpt
deleted file mode 100644
index cc7cc2e3e3..0000000000
--- a/ext/soap/tests/soap12/T66.phpt
+++ /dev/null
@@ -1,23 +0,0 @@
---TEST--
-SOAP 1.2: T66 echoOk
---SKIPIF--
-<?php require_once('skipif.inc'); ?>
---FILE--
-<?php
-$HTTP_RAW_POST_DATA = <<<EOF
-<?xml version='1.0' encoding='UTF8'?>
-<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope">
- <env:Header>
- <test:echoOk xmlns:test="http://example.org/ts-tests"
- env:role="http://www.w3.org/2003/05/soap-envelope/role/next">foo</test:echoOk>
- </env:Header>
- <env:Body>
- </env:Body>
-</env:Envelope>
-EOF;
-include "soap12-test.inc";
-?>
---EXPECT--
-<?xml version="1.0" encoding="UTF-8"?>
-<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope" xmlns:ns1="http://example.org/ts-tests"><env:Header><ns1:responseOk>foo</ns1:responseOk></env:Header><env:Body/></env:Envelope>
-ok
diff --git a/ext/soap/tests/soap12/T67.phpt b/ext/soap/tests/soap12/T67.phpt
deleted file mode 100644
index ddc527a6ec..0000000000
--- a/ext/soap/tests/soap12/T67.phpt
+++ /dev/null
@@ -1,23 +0,0 @@
---TEST--
-SOAP 1.2: T67 echoOk
---SKIPIF--
-<?php require_once('skipif.inc'); ?>
---FILE--
-<?php
-$HTTP_RAW_POST_DATA = <<<EOF
-<?xml version='1.0' standalone='yes'?>
-<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope">
- <env:Header>
- <test:echoOk xmlns:test="http://example.org/ts-tests"
- env:role="http://www.w3.org/2003/05/soap-envelope/role/next">foo</test:echoOk>
- </env:Header>
- <env:Body>
- </env:Body>
-</env:Envelope>
-EOF;
-include "soap12-test.inc";
-?>
---EXPECT--
-<?xml version="1.0" encoding="UTF-8"?>
-<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope" xmlns:ns1="http://example.org/ts-tests"><env:Header><ns1:responseOk>foo</ns1:responseOk></env:Header><env:Body/></env:Envelope>
-ok
diff --git a/ext/soap/tests/soap12/T68.phpt b/ext/soap/tests/soap12/T68.phpt
deleted file mode 100644
index a7915196cb..0000000000
--- a/ext/soap/tests/soap12/T68.phpt
+++ /dev/null
@@ -1,32 +0,0 @@
---TEST--
-SOAP 1.2: T68 echoOk
---SKIPIF--
-<?php require_once('skipif.inc'); ?>
---FILE--
-<?php
-$HTTP_RAW_POST_DATA = <<<EOF
-<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope">
-
-
- <env:Header >
-
- <test:echoOk xmlns:test="http://example.org/ts-tests"
- env:role="http://www.w3.org/2003/05/soap-envelope/role/next" >foo</test:echoOk>
-
-
- </env:Header>
- <env:Body>
-
-
- </env:Body>
-
-
-
-</env:Envelope>
-EOF;
-include "soap12-test.inc";
-?>
---EXPECT--
-<?xml version="1.0" encoding="UTF-8"?>
-<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope" xmlns:ns1="http://example.org/ts-tests"><env:Header><ns1:responseOk>foo</ns1:responseOk></env:Header><env:Body/></env:Envelope>
-ok
diff --git a/ext/soap/tests/soap12/T69.phpt b/ext/soap/tests/soap12/T69.phpt
deleted file mode 100644
index 0fb02dec06..0000000000
--- a/ext/soap/tests/soap12/T69.phpt
+++ /dev/null
@@ -1,19 +0,0 @@
---TEST--
-SOAP 1.2: T69 echoOk
---SKIPIF--
-<?php require_once('skipif.inc'); ?>
---FILE--
-<?php
-$HTTP_RAW_POST_DATA = <<<EOF
-<?xml version='1.0' ?>
-<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope">
- <env:Header>
- <test:echoOk xmlns:test="http://example.org/ts-tests">foo</test:echoOk>
- </env:Header>
-</env:Envelope>
-EOF;
-include "soap12-test.inc";
-?>
---EXPECT--
-<?xml version="1.0" encoding="UTF-8"?>
-<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope"><env:Body><env:Fault><env:Code><env:Value>env:Sender</env:Value></env:Code><env:Reason><env:Text>Body must be present in a SOAP envelope</env:Text></env:Reason></env:Fault></env:Body></env:Envelope>
diff --git a/ext/soap/tests/soap12/T70.phpt b/ext/soap/tests/soap12/T70.phpt
deleted file mode 100644
index 3622c320e7..0000000000
--- a/ext/soap/tests/soap12/T70.phpt
+++ /dev/null
@@ -1,23 +0,0 @@
---TEST--
-SOAP 1.2: T70 echoOk
---SKIPIF--
-<?php require_once('skipif.inc'); ?>
---FILE--
-<?php
-$HTTP_RAW_POST_DATA = <<<EOF
-<?xml version='1.0' ?>
-<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope">
- <env:Header>
- <test:echoOk xmlns:test="http://example.org/ts-tests">foo</test:echoOk>
- </env:Header>
- <env:Body>
- </env:Body>
- <Trailer>
- </Trailer>
-</env:Envelope>
-EOF;
-include "soap12-test.inc";
-?>
---EXPECT--
-<?xml version="1.0" encoding="UTF-8"?>
-<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope"><env:Body><env:Fault><env:Code><env:Value>env:Sender</env:Value></env:Code><env:Reason><env:Text>A SOAP 1.2 envelope can contain only Header and Body</env:Text></env:Reason></env:Fault></env:Body></env:Envelope>
diff --git a/ext/soap/tests/soap12/T71.phpt b/ext/soap/tests/soap12/T71.phpt
deleted file mode 100644
index fdb5b8d460..0000000000
--- a/ext/soap/tests/soap12/T71.phpt
+++ /dev/null
@@ -1,24 +0,0 @@
---TEST--
-SOAP 1.2: T71 echoOk
---SKIPIF--
-<?php require_once('skipif.inc'); ?>
---FILE--
-<?php
-$HTTP_RAW_POST_DATA = <<<EOF
-<?xml version='1.0' ?>
-<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope"
- attr1="a-value">
- <env:Header>
- <test:echoOk xmlns:test="http://example.org/ts-tests">
- foo
- </test:echoOk>
- </env:Header>
- <env:Body>
- </env:Body>
-</env:Envelope>
-EOF;
-include "soap12-test.inc";
-?>
---EXPECT--
-<?xml version="1.0" encoding="UTF-8"?>
-<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope"><env:Body><env:Fault><env:Code><env:Value>env:Sender</env:Value></env:Code><env:Reason><env:Text>A SOAP Envelope element cannot have non Namespace qualified attributes</env:Text></env:Reason></env:Fault></env:Body></env:Envelope>
diff --git a/ext/soap/tests/soap12/T72.phpt b/ext/soap/tests/soap12/T72.phpt
deleted file mode 100644
index b8f5060c6b..0000000000
--- a/ext/soap/tests/soap12/T72.phpt
+++ /dev/null
@@ -1,22 +0,0 @@
---TEST--
-SOAP 1.2: T72 echoOk
---SKIPIF--
-<?php require_once('skipif.inc'); ?>
---FILE--
-<?php
-$HTTP_RAW_POST_DATA = <<<EOF
-<?xml version='1.0' ?>
-<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope"
- env:encodingStyle="http://www.w3.org/2003/05/soap-encoding">
- <env:Body>
- <test:echoOk xmlns:test="http://example.org/ts-tests">
- foo
- </test:echoOk>
- </env:Body>
-</env:Envelope>
-EOF;
-include "soap12-test.inc";
-?>
---EXPECT--
-<?xml version="1.0" encoding="UTF-8"?>
-<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope"><env:Body><env:Fault><env:Code><env:Value>env:Sender</env:Value></env:Code><env:Reason><env:Text>encodingStyle cannot be specified on the Envelope</env:Text></env:Reason></env:Fault></env:Body></env:Envelope>
diff --git a/ext/soap/tests/soap12/T73.phpt b/ext/soap/tests/soap12/T73.phpt
deleted file mode 100644
index 9143e58179..0000000000
--- a/ext/soap/tests/soap12/T73.phpt
+++ /dev/null
@@ -1,26 +0,0 @@
---TEST--
-SOAP 1.2: T73 echoString
---SKIPIF--
-<?php require_once('skipif.inc'); ?>
---FILE--
-<?php
-$HTTP_RAW_POST_DATA = <<<EOF
-<?xml version='1.0' ?>
-<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope"
- xmlns:xsd="http://www.w3.org/2001/XMLSchema"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
- <env:Body>
- <test:echoString xmlns:test="http://example.org/ts-tests"
- env:encodingStyle="http://www.w3.org/2003/05/soap-encoding">
- <test:inputString xsi:type="xsd:string"
- env:encodingStyle="http://www.w3.org/2003/05/soap-encoding">hello world</test:inputString>
- </test:echoString>
- </env:Body>
-</env:Envelope>
-EOF;
-include "soap12-test.inc";
-?>
---EXPECT--
-<?xml version="1.0" encoding="UTF-8"?>
-<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope" xmlns:ns1="http://example.org/ts-tests" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:enc="http://www.w3.org/2003/05/soap-encoding"><env:Body xmlns:rpc="http://www.w3.org/2003/05/soap-rpc"><ns1:echoStringResponse env:encodingStyle="http://www.w3.org/2003/05/soap-encoding"><rpc:result>return</rpc:result><return xsi:type="xsd:string">hello world</return></ns1:echoStringResponse></env:Body></env:Envelope>
-ok
diff --git a/ext/soap/tests/soap12/T74.phpt b/ext/soap/tests/soap12/T74.phpt
deleted file mode 100644
index 703e1870a6..0000000000
--- a/ext/soap/tests/soap12/T74.phpt
+++ /dev/null
@@ -1,28 +0,0 @@
---TEST--
-SOAP 1.2: T74 doubleHdr
---SKIPIF--
-<?php require_once('skipif.inc'); ?>
---FILE--
-<?php
-$HTTP_RAW_POST_DATA = <<<EOF
-<?xml version='1.0' ?>
-<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope">
- <env:Header>
- <test:echoOk xmlns:test="http://example.org/ts-tests"
- env:role="http://www.w3.org/2003/05/soap-envelope/role/next">foo</test:echoOk>
- <test:Unknown xmlns:test="http://example.org/ts-tests">
- <test:raiseFault env:mustUnderstand="1"
- env:role="http://www.w3.org/2003/05/soap-envelope/role/next">
- </test:raiseFault>
- </test:Unknown>
- </env:Header>
- <env:Body>
- </env:Body>
-</env:Envelope>
-EOF;
-include "soap12-test.inc";
-?>
---EXPECT--
-<?xml version="1.0" encoding="UTF-8"?>
-<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope" xmlns:ns1="http://example.org/ts-tests"><env:Header><ns1:responseOk>foo</ns1:responseOk></env:Header><env:Body/></env:Envelope>
-ok
diff --git a/ext/soap/tests/soap12/T75.phpt b/ext/soap/tests/soap12/T75.phpt
deleted file mode 100644
index 3e2166d957..0000000000
--- a/ext/soap/tests/soap12/T75.phpt
+++ /dev/null
@@ -1,28 +0,0 @@
---TEST--
-SOAP 1.2: T75 echoResolvedRef
---SKIPIF--
-<?php require_once('skipif.inc'); ?>
---FILE--
-<?php
-$HTTP_RAW_POST_DATA = <<<EOF
-<?xml version='1.0' ?>
-<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope">
- <env:Header>
- <test:echoResolvedRef xmlns:test="http://example.org/ts-tests"
- env:role="http://www.w3.org/2003/05/soap-envelope/role/next"
- env:mustUnderstand="1">
- <test:RelativeReference xml:base="http://example.org/today/"
- xlink:href="new.xml"
- xmlns:xlink="http://www.w3.org/1999/xlink" />
- </test:echoResolvedRef>
- </env:Header>
- <env:Body>
- </env:Body>
-</env:Envelope>
-EOF;
-include "soap12-test.inc";
-?>
---EXPECT--
-<?xml version="1.0" encoding="UTF-8"?>
-<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope" xmlns:ns1="http://example.org/ts-tests"><env:Header><ns1:responseResolvedRef>http://example.org/today/new.xml</ns1:responseResolvedRef></env:Header><env:Body/></env:Envelope>
-ok
diff --git a/ext/soap/tests/soap12/T76_1.phpt b/ext/soap/tests/soap12/T76_1.phpt
deleted file mode 100644
index e97c179768..0000000000
--- a/ext/soap/tests/soap12/T76_1.phpt
+++ /dev/null
@@ -1,25 +0,0 @@
---TEST--
-SOAP 1.2: T76.1 echoString
---SKIPIF--
-<?php require_once('skipif.inc'); ?>
---FILE--
-<?php
-$HTTP_RAW_POST_DATA = <<<EOF
-<?xml version='1.0' ?>
-<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope"
- xmlns:xsd="http://www.w3.org/2001/XMLSchema"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
- <env:Body>
- <test:echoString xmlns:test="http://example.org/ts-tests"
- env:encodingStyle="http://www.w3.org/2003/05/soap-encoding">
- <inputString xsi:type="xsd:string">hello world</inputString>
- </test:echoString>
- </env:Body>
-</env:Envelope>
-EOF;
-include "soap12-test.inc";
-?>
---EXPECT--
-<?xml version="1.0" encoding="UTF-8"?>
-<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope" xmlns:ns1="http://example.org/ts-tests" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:enc="http://www.w3.org/2003/05/soap-encoding"><env:Body xmlns:rpc="http://www.w3.org/2003/05/soap-rpc"><ns1:echoStringResponse env:encodingStyle="http://www.w3.org/2003/05/soap-encoding"><rpc:result>return</rpc:result><return xsi:type="xsd:string">hello world</return></ns1:echoStringResponse></env:Body></env:Envelope>
-ok
diff --git a/ext/soap/tests/soap12/T76_2.phpt b/ext/soap/tests/soap12/T76_2.phpt
deleted file mode 100644
index cc6ea0df95..0000000000
--- a/ext/soap/tests/soap12/T76_2.phpt
+++ /dev/null
@@ -1,32 +0,0 @@
---TEST--
-SOAP 1.2: T76.2 echoString
---SKIPIF--
-<?php require_once('skipif.inc'); ?>
---FILE--
-<?php
-$HTTP_RAW_POST_DATA = <<<EOF
-<?xml version='1.0' ?>
-<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope"
- xmlns:xsd="http://www.w3.org/2001/XMLSchema"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xmlns:enc="http://www.w3.org/2003/05/soap-encoding">
- <env:Header>
- <test:DataHolder xmlns:test="http://example.org/ts-tests"
- env:encodingStyle="http://www.w3.org/2003/05/soap-encoding">
- <test:Data enc:id="data" xsi:type="xsd:string">hello world</test:Data>
- </test:DataHolder>
- </env:Header>
- <env:Body>
- <test:echoString xmlns:test="http://example.org/ts-tests"
- env:encodingStyle="http://www.w3.org/2003/05/soap-encoding">
- <inputString enc:ref="data" xsi:type="xsd:string" />
- </test:echoString>
- </env:Body>
-</env:Envelope>
-EOF;
-include "soap12-test.inc";
-?>
---EXPECT--
-<?xml version="1.0" encoding="UTF-8"?>
-<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope" xmlns:ns1="http://example.org/ts-tests" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:enc="http://www.w3.org/2003/05/soap-encoding"><env:Body xmlns:rpc="http://www.w3.org/2003/05/soap-rpc"><ns1:echoStringResponse env:encodingStyle="http://www.w3.org/2003/05/soap-encoding"><rpc:result>return</rpc:result><return xsi:type="xsd:string">hello world</return></ns1:echoStringResponse></env:Body></env:Envelope>
-ok
diff --git a/ext/soap/tests/soap12/T77_1.phpt b/ext/soap/tests/soap12/T77_1.phpt
deleted file mode 100644
index fea616a9be..0000000000
--- a/ext/soap/tests/soap12/T77_1.phpt
+++ /dev/null
@@ -1,25 +0,0 @@
---TEST--
-SOAP 1.2: T77.1 isNil
---SKIPIF--
-<?php require_once('skipif.inc'); ?>
---FILE--
-<?php
-$HTTP_RAW_POST_DATA = <<<EOF
-<?xml version='1.0' ?>
-<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope"
- xmlns:xsd="http://www.w3.org/2001/XMLSchema"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
- <env:Body>
- <test:isNil xmlns:test="http://example.org/ts-tests"
- env:encodingStyle="http://www.w3.org/2003/05/soap-encoding">
- <inputString xsi:nil="1" />
- </test:isNil>
- </env:Body>
-</env:Envelope>
-EOF;
-include "soap12-test.inc";
-?>
---EXPECT--
-<?xml version="1.0" encoding="UTF-8"?>
-<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope" xmlns:ns1="http://example.org/ts-tests" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:enc="http://www.w3.org/2003/05/soap-encoding"><env:Body xmlns:rpc="http://www.w3.org/2003/05/soap-rpc"><ns1:isNilResponse env:encodingStyle="http://www.w3.org/2003/05/soap-encoding"><rpc:result>return</rpc:result><return xsi:type="xsd:boolean">1</return></ns1:isNilResponse></env:Body></env:Envelope>
-ok
diff --git a/ext/soap/tests/soap12/T77_2.phpt b/ext/soap/tests/soap12/T77_2.phpt
deleted file mode 100644
index 1e49e8a35e..0000000000
--- a/ext/soap/tests/soap12/T77_2.phpt
+++ /dev/null
@@ -1,24 +0,0 @@
---TEST--
-SOAP 1.2: T77.2 isNil
---SKIPIF--
-<?php require_once('skipif.inc'); ?>
---FILE--
-<?php
-$HTTP_RAW_POST_DATA = <<<EOF
-<?xml version='1.0' ?>
-<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope"
- xmlns:xsd="http://www.w3.org/2001/XMLSchema"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
- <env:Body>
- <test:isNil xmlns:test="http://example.org/ts-tests"
- env:encodingStyle="http://www.w3.org/2003/05/soap-encoding">
- </test:isNil>
- </env:Body>
-</env:Envelope>
-EOF;
-include "soap12-test.inc";
-?>
---EXPECT--
-<?xml version="1.0" encoding="UTF-8"?>
-<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope" xmlns:ns1="http://example.org/ts-tests" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:enc="http://www.w3.org/2003/05/soap-encoding"><env:Body xmlns:rpc="http://www.w3.org/2003/05/soap-rpc"><ns1:isNilResponse env:encodingStyle="http://www.w3.org/2003/05/soap-encoding"><rpc:result>return</rpc:result><return xsi:type="xsd:boolean">1</return></ns1:isNilResponse></env:Body></env:Envelope>
-ok
diff --git a/ext/soap/tests/soap12/T77_3.phpt b/ext/soap/tests/soap12/T77_3.phpt
deleted file mode 100644
index f404dd0bef..0000000000
--- a/ext/soap/tests/soap12/T77_3.phpt
+++ /dev/null
@@ -1,27 +0,0 @@
---TEST--
-SOAP 1.2: T77.3 isNul
---SKIPIF--
-<?php require_once('skipif.inc'); ?>
---FILE--
-<?php
-$HTTP_RAW_POST_DATA = <<<EOF
-<?xml version='1.0' ?>
-<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope"
- xmlns:xsd="http://www.w3.org/2001/XMLSchema"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
- <env:Body>
- <test:isNil xmlns:test="http://example.org/ts-tests"
- env:encodingStyle="http://www.w3.org/2003/05/soap-encoding">
- <inputString xsi:type="xsd:string">
- This is a string
- </inputString>
- </test:isNil>
- </env:Body>
-</env:Envelope>
-EOF;
-include "soap12-test.inc";
-?>
---EXPECT--
-<?xml version="1.0" encoding="UTF-8"?>
-<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope" xmlns:ns1="http://example.org/ts-tests" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:enc="http://www.w3.org/2003/05/soap-encoding"><env:Body xmlns:rpc="http://www.w3.org/2003/05/soap-rpc"><ns1:isNilResponse env:encodingStyle="http://www.w3.org/2003/05/soap-encoding"><rpc:result>return</rpc:result><return xsi:type="xsd:boolean">0</return></ns1:isNilResponse></env:Body></env:Envelope>
-ok
diff --git a/ext/soap/tests/soap12/T78.phpt b/ext/soap/tests/soap12/T78.phpt
deleted file mode 100644
index 63d13c7cae..0000000000
--- a/ext/soap/tests/soap12/T78.phpt
+++ /dev/null
@@ -1,23 +0,0 @@
---TEST--
-SOAP 1.2: T78 echoOk
---SKIPIF--
-<?php require_once('skipif.inc'); ?>
---FILE--
-<?php
-$HTTP_RAW_POST_DATA = <<<EOF
-<?xml version='1.0' ?>
-<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope">
- <env:Header>
- <test:echoOk xmlns:test="http://example.org/ts-tests"
- env:role="http://www.w3.org/2003/05/soap-envelope/role/ultimateReceiver">foo</test:echoOk>
- </env:Header>
- <env:Body>
- </env:Body>
-</env:Envelope>
-EOF;
-include "soap12-test.inc";
-?>
---EXPECT--
-<?xml version="1.0" encoding="UTF-8"?>
-<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope" xmlns:ns1="http://example.org/ts-tests"><env:Header><ns1:responseOk>foo</ns1:responseOk></env:Header><env:Body/></env:Envelope>
-ok
diff --git a/ext/soap/tests/soap12/T80.phpt b/ext/soap/tests/soap12/T80.phpt
deleted file mode 100644
index 1ac114ba32..0000000000
--- a/ext/soap/tests/soap12/T80.phpt
+++ /dev/null
@@ -1,19 +0,0 @@
---TEST--
-SOAP 1.2: T80 echoOk
---SKIPIF--
-<?php require_once('skipif.inc'); ?>
---FILE--
-<?php
-$HTTP_RAW_POST_DATA = <<<EOF
-<?xml version="1.0"?>
-<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope">
- <env:Body>
- <test:echoOk xmlns:test="http://example.org/ts-tests" env:encodingStyle="http://example.org/PoisonEncoding">foo</test:echoOk>
- </env:Body>
-</env:Envelope>
-EOF;
-include "soap12-test.inc";
-?>
---EXPECT--
-<?xml version="1.0" encoding="UTF-8"?>
-<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope"><env:Body><env:Fault><env:Code><env:Value>env:DataEncodingUnknown</env:Value></env:Code><env:Reason><env:Text>Unknown Data Encoding Style</env:Text></env:Reason></env:Fault></env:Body></env:Envelope>
diff --git a/ext/soap/tests/soap12/skipif.inc b/ext/soap/tests/soap12/skipif.inc
deleted file mode 100644
index fa8574e6a2..0000000000
--- a/ext/soap/tests/soap12/skipif.inc
+++ /dev/null
@@ -1,3 +0,0 @@
-<?php
- if (!extension_loaded('soap')) die('skip soap extension not available');
-?>
diff --git a/ext/soap/tests/soap12/soap12-test.inc b/ext/soap/tests/soap12/soap12-test.inc
deleted file mode 100644
index 9774729d29..0000000000
--- a/ext/soap/tests/soap12/soap12-test.inc
+++ /dev/null
@@ -1,130 +0,0 @@
-<?php
-class Soap12test {
- public $header;
-
- function echoOk($x) {
- return $x;
- }
-
- function echoString($inputString) {
- return $inputString;
- }
-
- function echoStringArray($inputStringArray) {
- return $inputStringArray;
- }
-
- function echoInteger($inputInteger) {
- return $inputInteger;
- }
-
- function echoIntegerArray($inputIntegerArray) {
- return $inputIntegerArray;
- }
-
- function echoFloat($inputFloat) {
- return $inputFloat;
- }
-
- function echoFloatArray($inputFloatArray) {
- return $inputFloatArray;
- }
-
- function echoStruct($x) {
- return $x;
- }
-
- function echoStructArray($x) {
- return $x;
- }
-
- function echoVoid() {
- return NULL;
- }
-
- function echoBase64($b_encoded) {
- return $b_encoded;
- }
-
- function echoDate($timeInstant) {
- return $timeInstant;
- }
-
- function echoHexBinary($hb) {
- return $hb;
- }
-
- function echoDecimal($dec) {
- return $dec;
- }
-
- function echoBoolean($boolean) {
- return $boolean;
- }
-
- function echoStructAsSimpleTypes ($struct) {
- return array('outputString' => $struct->varString,
- 'outputInteger' => $struct->varInt,
- 'outputFloat' => $struct->varFloat);
- }
-
- function echoSimpleTypesAsStruct($string, $int, $float) {
- return (object)array("varString" => $string,
- "varInt" => $int,
- "varFloat" => $float);
- }
-
- function echoNestedStruct($struct) {
- return $struct;
- }
-
- function echo2DStringArray($ary) {
- return $ary;
- }
-
- function echoNestedArray($ary) {
- return $ary;
- }
-
- function countItems($input) {
- return count($input);
- }
-
- function isNil($input) {
- return is_null($input);
- }
-
- function returnVoid() {
- }
-
- function emptyBody() {
- }
-
- function requiredHeader($x) {
- $this->header = $x;
- }
-
- function echoHeader() {
- return $this->header;
- }
-
- function echoResolvedRef($ref) {
- return $ref->RelativeReference->base.$ref->RelativeReference->href;
- }
-
- function validateCountryCode($code) {
- if (strlen($code) != 2) {
- return new SoapFault("Client", "Not a valid country code", NULL, NULL, NULL, new SoapHeader("http://example.org/ts-tests", "validateCountryCodeFault", "Country code must be 2 letters."));
- } else {
- return "OK";
- }
- }
-
-}
-
-$server = new soapserver(dirname(__FILE__)."/soap12-test.wsdl", array('soap_version'=>SOAP_1_2,'actor'=>"http://example.org/ts-tests/C"));
-$server->setClass("Soap12test");
-
-$server->handle();
-echo "ok\n";
-?>
diff --git a/ext/soap/tests/soap12/soap12-test.wsdl b/ext/soap/tests/soap12/soap12-test.wsdl
deleted file mode 100644
index d1679b475d..0000000000
--- a/ext/soap/tests/soap12/soap12-test.wsdl
+++ /dev/null
@@ -1,771 +0,0 @@
-<?xml version="1.0"?>
-
-<definitions name="SOAP-12-TestDefinitions"
- targetNamespace="http://whitemesa.net/wsdl/soap12-test"
- xmlns="http://schemas.xmlsoap.org/wsdl/"
- xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/"
- xmlns:xsd="http://www.w3.org/2001/XMLSchema"
- xmlns:enc="http://www.w3.org/2003/05/soap-encoding"
- xmlns:tns="http://whitemesa.net/wsdl/soap12-test"
- xmlns:types="http://example.org/ts-tests/xsd"
- xmlns:test="http://example.org/ts-tests"
- xmlns:xlink="http://www.w3.org/1999/xlink"
- xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
- xmlns:enc11="http://schemas.xmlsoap.org/soap/encoding/">
- <types>
- <schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="http://example.org/ts-tests/xsd">
-
- <import namespace="http://schemas.xmlsoap.org/soap/encoding/" />
-
- <complexType name="ArrayOfstring">
- <complexContent>
- <restriction base="enc11:Array">
- <attribute ref="enc11:arrayType" wsdl:arrayType="xsd:string[]"/>
- </restriction>
- </complexContent>
- </complexType>
-
- <complexType name="ArrayOfint">
- <complexContent>
- <restriction base="enc11:Array">
- <attribute ref="enc11:arrayType" wsdl:arrayType="xsd:int[]"/>
- </restriction>
- </complexContent>
- </complexType>
-
- <complexType name="ArrayOffloat">
- <complexContent>
- <restriction base="enc11:Array">
- <attribute ref="enc11:arrayType" wsdl:arrayType="xsd:float[]"/>
- </restriction>
- </complexContent>
- </complexType>
-
- <complexType name="ArrayOfSOAPStruct">
- <complexContent>
- <restriction base="enc11:Array">
- <attribute ref="enc11:arrayType" wsdl:arrayType="types:SOAPStruct[]"/>
- </restriction>
- </complexContent>
- </complexType>
-
- <complexType name="SOAPStruct">
- <all>
- <element name="varString" type="xsd:string"/>
- <element name="varInt" type="xsd:int"/>
- <element name="varFloat" type="xsd:float"/>
- </all>
- </complexType>
- <complexType name="SOAPStructStruct">
- <all>
- <element name="varString" type="xsd:string"/>
- <element name="varInt" type="xsd:int"/>
- <element name="varFloat" type="xsd:float"/>
- <element name="varStruct" type="types:SOAPStruct"/>
- </all>
- </complexType>
-
- <complexType name="SOAPArrayStruct">
- <all>
- <element name="varString" type="xsd:string"/>
- <element name="varInt" type="xsd:int"/>
- <element name="varFloat" type="xsd:float"/>
- <element name="varArray" type="types:ArrayOfstring"/>
- </all>
- </complexType>
-
- <!-- unknown header block type -->
- <complexType name="UnknownType">
- <sequence>
- <element minOccurs="0" maxOccurs="1" name="stringValue" type="xsd:string" />
- </sequence>
- </complexType>
-
- </schema>
-
- <schema xmlns="http://www.w3.org/2001/XMLSchema"
- elementFormDefault="qualified"
- targetNamespace="http://example.org/ts-tests">
-
- <import namespace="http://www.w3.org/1999/xlink" />
- <import namespace="http://example.org/ts-tests/xsd" />
-
- <!-- 3.2.1 echoOk -->
- <element name="echoOk" type="xsd:string"/>
-
- <!-- 3.2.2 responseOk -->
- <element name="responseOk" type="xsd:string"/>
-
- <!-- 3.2.3 Ignore -->
- <element name="Ignore" type="xsd:string"/>
-
- <!-- 3.2.4 requiredHeader -->
- <element name="requiredHeader" type="xsd:string"/>
-
- <element name="echoHeader" type="xsd:string"/>
- <element name="echoHeaderResponse" type="xsd:string"/>
-
- <!-- 3.2.5 DataHolder -->
- <element name="DataHolder" type="test:DataHolder_t"/>
- <complexType name="DataHolder_t">
- <sequence>
- <element name="Data" type="xsd:string" minOccurs="1" maxOccurs="unbounded"/>
- </sequence>
- </complexType>
-
- <!-- 3.2.6 concatAndForwardEchoOk -->
- <element name="concatAndForwardEchoOk"/>
-
- <!-- 3.2.7 concatAndForwardEchoOkArg1 -->
- <element name="concatAndForwardEchoOkArg1" type="xsd:string"/>
-
- <!-- 3.2.8 concatAndForwardEchoOkArg2 -->
- <element name="concatAndForwardEchoOkArg2" type="xsd:string"/>
-
- <!-- 3.2.9 validateCountryCode -->
- <element name="validateCountryCode" type="xsd:string"/>
-
- <element name="validateCountryCodeResponse" type="xsd:string"/>
-
- <!-- 3.2.10 validateCountryCodeFault -->
- <element name="validateCountryCodeFault" type="xsd:string"/>
-
- <!-- 3.2.11 echoResolvedRef -->
- <element name="RelativeReference" type="test:RelativeReference_t"/>
- <complexType name="RelativeReference_t">
- <attribute ref="xml:base"/>
- <attribute ref="xlink:href"/>
- </complexType>
-
- <element name="echoResolvedRef" type="test:echoResolvedRef_t"/>
- <complexType name="echoResolvedRef_t">
- <sequence>
- <element ref="test:RelativeReference" minOccurs="1" maxOccurs="1"/>
- </sequence>
- </complexType>
-
- <!-- 3.2.12 responseResolvedRef -->
- <element name="responseResolvedRef" type="xsd:string"/>
-
- <!-- echoOkUltimateReceiver added to support testing of "relay" -->
- <element name="echoOkUltimateReceiver" type="xsd:string"/>
-
- <!-- responseOkUltimateReceiver added to support testing of "relay" -->
- <element name="responseOkUltimateReceiver" type="xsd:string"/>
-
- <element name="Unknown" type="types:UnknownType" />
-
- </schema>
-
- </types>
-
- <!-- 3.4.1 returnVoid rpc operation -->
- <message name="returnVoidRequest"/>
- <message name="returnVoidResponse"/>
-
- <!-- 3.4.2 echoStruct rpc operation -->
- <message name="echoStructRequest">
- <part name="inputStruct" type="types:SOAPStruct"/>
- </message>
- <message name="echoStructResponse">
- <part name="return" type="types:SOAPStruct"/>
- </message>
-
- <!-- 3.4.3 echoStructArray rpc operation -->
- <message name="echoStructArrayRequest">
- <part name="inputStructArray" type="types:ArrayOfSOAPStruct"/>
- </message>
- <message name="echoStructArrayResponse">
- <part name="return" type="types:ArrayOfSOAPStruct"/>
- </message>
-
- <!-- 3.4.4 echoStructAsSimpleTypes rpc operation -->
- <message name="echoStructAsSimpleTypesRequest">
- <part name="inputStruct" type="types:SOAPStruct"/>
- </message>
- <message name="echoStructAsSimpleTypesResponse">
- <part name="outputString" type="xsd:string"/>
- <part name="outputInteger" type="xsd:int"/>
- <part name="outputFloat" type="xsd:float"/>
- </message>
-
- <!-- 3.4.5 echoSimpleTypesAsStruct rpc operation -->
- <message name="echoSimpleTypesAsStructRequest">
- <part name="inputString" type="xsd:string"/>
- <part name="inputInt" type="xsd:int"/>
- <part name="inputFloat" type="xsd:float"/>
- </message>
- <message name="echoSimpleTypesAsStructResponse">
- <part name="return" type="types:SOAPStruct"/>
- </message>
-
- <!-- 3.4.6 echoNestedStruct rpc operation -->
- <message name="echoNestedStructRequest">
- <part name="inputStruct" type="types:SOAPStructStruct"/>
- </message>
- <message name="echoNestedStructResponse">
- <part name="return" type="types:SOAPStructStruct"/>
- </message>
-
- <!-- 3.4.7 echoNestedArray rpc operation -->
- <message name="echoNestedArrayRequest">
- <part name="inputStruct" type="types:SOAPArrayStruct"/>
- </message>
- <message name="echoNestedArrayResponse">
- <part name="return" type="types:SOAPArrayStruct"/>
- </message>
-
- <!-- 3.4.8 echoFloatArray rpc operation -->
- <message name="echoFloatArrayRequest">
- <part name="inputFloatArray" type="types:ArrayOffloat"/>
- </message>
- <message name="echoFloatArrayResponse">
- <part name="return" type="types:ArrayOffloat"/>
- </message>
-
- <!-- 3.4.9 echoStringArray rpc operation -->
- <message name="echoStringArrayRequest">
- <part name="inputStringArray" type="types:ArrayOfstring"/>
- </message>
- <message name="echoStringArrayResponse">
- <part name="return" type="types:ArrayOfstring"/>
- </message>
-
- <!-- 3.4.10 echoIntegerArray rpc operation -->
- <message name="echoIntegerArrayRequest">
- <part name="inputIntegerArray" type="types:ArrayOfint"/>
- </message>
- <message name="echoIntegerArrayResponse">
- <part name="return" type="types:ArrayOfint"/>
- </message>
-
- <!-- 3.4.11 echoBase64 rpc operation -->
- <message name="echoBase64Request">
- <part name="inputBase64" type="xsd:base64Binary"/>
- </message>
- <message name="echoBase64Response">
- <part name="return" type="xsd:base64Binary"/>
- </message>
-
- <!-- 3.4.12 echoBoolean rpc operation -->
- <message name="echoBooleanRequest">
- <part name="inputBoolean" type="xsd:boolean"/>
- </message>
- <message name="echoBooleanResponse">
- <part name="return" type="xsd:boolean"/>
- </message>
-
- <!-- 3.4.13 echoDate rpc operation -->
- <message name="echoDateRequest">
- <part name="inputDate" type="xsd:dateTime"/>
- </message>
- <message name="echoDateResponse">
- <part name="return" type="xsd:dateTime"/>
- </message>
-
- <!-- 3.4.14 echoDecimal rpc operation -->
- <message name="echoDecimalRequest">
- <part name="inputDecimal" type="xsd:decimal"/>
- </message>
- <message name="echoDecimalResponse">
- <part name="return" type="xsd:decimal"/>
- </message>
-
- <!-- 3.4.15 echoFloat rpc operation -->
- <message name="echoFloatRequest">
- <part name="inputFloat" type="xsd:float"/>
- </message>
- <message name="echoFloatResponse">
- <part name="return" type="xsd:float"/>
- </message>
-
- <!-- 3.4.16 echoString rpc operation -->
- <message name="echoStringRequest">
- <part name="inputString" type="xsd:string"/>
- </message>
- <message name="echoStringResponse">
- <part name="return" type="xsd:string"/>
- </message>
-
- <!-- 3.4.17 countItems rpc operation -->
- <message name="countItemsRequest">
- <part name="inputStringArray" type="types:ArrayOfstring"/>
- </message>
- <message name="countItemsResponse">
- <part name="return" type="xsd:int"/>
- </message>
-
- <!-- 3.4.18 isNil rpc operation -->
- <message name="isNilRequest">
- <part name="inputString" type="xsd:string"/>
- </message>
- <message name="isNilResponse">
- <part name="return" type="xsd:boolean"/>
- </message>
-
- <!-- DataHolder header block -->
- <message name="DataHolderRequest">
- <part name="DataHolder" type="test:DataHolder_t"/>
- </message>
- <message name="DataHolderResponse">
- <part name="DataHolder" type="test:DataHolder_t"/>
- </message>
-
- <!-- empty message for doc/literal testing -->
- <message name="emptyBodyRequest"/>
- <message name="emptyBodyResponse"/>
-
- <!-- echoOk body/header block -->
- <message name="echoOkRequest">
- <part name="echoOk" element="test:echoOk"/>
- </message>
- <message name="echoOkResponse">
- <part name="responseOk" element="test:responseOk"/>
- </message>
-
- <message name="requiredHeaderRequest">
- <part name="requiredHeader" element="test:requiredHeader"/>
- </message>
- <message name="echoHeaderRequest">
- <part name="responseHeader" element="test:echoHeader"/>
- </message>
- <message name="echoHeaderResponse">
- <part name="responseHeader" element="test:echoHeaderResponse"/>
- </message>
-
- <message name="echoResolvedRefRequest">
- <part name="responseHeader" element="test:echoResolvedRef"/>
- </message>
- <message name="echoResolvedRefResponse">
- <part name="responseHeader" element="test:responseResolvedRef"/>
- </message>
-
- <!-- "unknown" header block -->
- <message name="UnknownHdrBlockLit">
- <part name="Unknown" element="test:Unknown" />
- </message>
- <message name="UnknownHdrBlockEnc">
- <part name="Unknown" type="types:UnknownType" />
- </message>
-
- <message name="validateCountryCodeRequest">
- <part name="validateCountryCode" element="test:validateCountryCode" />
- </message>
- <message name="validateCountryCodeFault">
- <part name="validateCountryCodeFault" element="test:validateCountryCodeFault" />
- </message>
- <message name="validateCountryCodeResponse">
- <part name="validateCountryCodeResponse" element="test:validateCountryCodeResponse" />
- </message>
-
-
- <portType name="Soap12TestPortTypeDoc">
- <operation name="emptyBody">
- <input message="tns:emptyBodyRequest" />
- <output message="tns:emptyBodyResponse" />
- </operation>
- <operation name="echoOk">
- <input message="tns:echoOkRequest" />
- <output message="tns:echoOkResponse" />
- </operation>
- <operation name="requiredHeader">
- <input message="tns:requiredHeaderRequest" />
- </operation>
- <operation name="echoHeader">
- <input message="tns:echoHeaderRequest" />
- <output message="tns:echoHeaderResponse" />
- </operation>
- <operation name="echoResolvedRef">
- <input message="tns:echoResolvedRefRequest" />
- <output message="tns:echoResolvedRefResponse" />
- </operation>
- </portType>
-
- <portType name="Soap12TestPortTypeRpc">
-
- <!-- 3.4.1 returnVoid rpc operation -->
- <operation name="returnVoid">
- <input message="tns:returnVoidRequest"/>
- <output message="tns:returnVoidResponse"/>
- </operation>
-
- <!-- 3.4.2 echoStruct rpc operation -->
- <operation name="echoStruct" parameterOrder="inputStruct">
- <input message="tns:echoStructRequest"/>
- <output message="tns:echoStructResponse"/>
- </operation>
-
- <!-- 3.4.3 echoStructArray rpc operation -->
- <operation name="echoStructArray" parameterOrder="inputStructArray">
- <input message="tns:echoStructArrayRequest"/>
- <output message="tns:echoStructArrayResponse"/>
- </operation>
-
- <!-- 3.4.4 echoStructAsSimpleTypes rpc operation -->
- <operation name="echoStructAsSimpleTypes" parameterOrder="inputStruct outputString outputInteger outputFloat">
- <input message="tns:echoStructAsSimpleTypesRequest"/>
- <output message="tns:echoStructAsSimpleTypesResponse"/>
- </operation>
-
- <!-- 3.4.5 echoSimpleTypesAsStruct rpc operation -->
- <operation name="echoSimpleTypesAsStruct" parameterOrder="inputString inputInteger inputFloat">
- <input message="tns:echoSimpleTypesAsStructRequest"/>
- <output message="tns:echoSimpleTypesAsStructResponse"/>
- </operation>
-
- <!-- 3.4.6 echoNestedStruct rpc operation -->
- <operation name="echoNestedStruct" parameterOrder="inputStruct">
- <input message="tns:echoNestedStructRequest"/>
- <output message="tns:echoNestedStructResponse"/>
- </operation>
-
- <!-- 3.4.7 echoNestedArray rpc operation -->
- <operation name="echoNestedArray" parameterOrder="inputStruct">
- <input message="tns:echoNestedArrayRequest"/>
- <output message="tns:echoNestedArrayResponse"/>
- </operation>
-
- <!-- 3.4.8 echoFloatArray rpc operation -->
- <operation name="echoFloatArray" parameterOrder="inputFloatArray">
- <input message="tns:echoFloatArrayRequest"/>
- <output message="tns:echoFloatArrayResponse"/>
- </operation>
-
- <!-- 3.4.9 echoStringArray rpc operation -->
- <operation name="echoStringArray" parameterOrder="inputStringArray">
- <input message="tns:echoStringArrayRequest"/>
- <output message="tns:echoStringArrayResponse"/>
- </operation>
-
- <!-- 3.4.10 echoIntegerArray rpc operation -->
- <operation name="echoIntegerArray" parameterOrder="inputIntegerArray">
- <input message="tns:echoIntegerArrayRequest"/>
- <output message="tns:echoIntegerArrayResponse"/>
- </operation>
-
- <!-- 3.4.11 echoBase64 rpc operation -->
- <operation name="echoBase64" parameterOrder="inputBase64">
- <input message="tns:echoBase64Request"/>
- <output message="tns:echoBase64Response"/>
- </operation>
-
- <!-- 3.4.12 echoBoolean rpc operation -->
- <operation name="echoBoolean" parameterOrder="inputBoolean">
- <input message="tns:echoBooleanRequest"/>
- <output message="tns:echoBooleanResponse"/>
- </operation>
-
- <!-- 3.4.13 echoDate rpc operation -->
- <operation name="echoDate" parameterOrder="inputDate">
- <input message="tns:echoDateRequest"/>
- <output message="tns:echoDateResponse"/>
- </operation>
-
- <!-- 3.4.14 echoDecimal rpc operation -->
- <operation name="echoDecimal" parameterOrder="inputDecimal">
- <input message="tns:echoDecimalRequest"/>
- <output message="tns:echoDecimalResponse"/>
- </operation>
-
- <!-- 3.4.15 echoFloat rpc operation -->
- <operation name="echoFloat" parameterOrder="inputFloat">
- <input message="tns:echoFloatRequest"/>
- <output message="tns:echoFloatResponse"/>
- </operation>
-
- <!-- 3.4.16 echoString rpc operation -->
- <operation name="echoString" parameterOrder="inputString">
- <input message="tns:echoStringRequest"/>
- <output message="tns:echoStringResponse"/>
- </operation>
-
- <!-- 3.4.17 countItems rpc operation -->
- <operation name="countItems" parameterOrder="inputStringArray">
- <input message="tns:countItemsRequest"/>
- <output message="tns:countItemsResponse"/>
- </operation>
-
- <!-- 3.4.18 isNil rpc operation -->
- <operation name="isNil" parameterOrder="inputString">
- <input message="tns:isNilRequest"/>
- <output message="tns:isNilResponse"/>
- </operation>
-
- </portType>
-
- <binding name="Soap12TestDocBinding" type="tns:Soap12TestPortTypeDoc">
- <soap12:binding style="document" transport="http://schemas.xmlsoap.org/soap/http" />
- <operation name="emptyBody">
- <soap12:operation/>
- <input>
- <soap12:body use="literal" />
- <soap12:header message="tns:echoOkRequest" part="echoOk" use="literal" />
- <soap12:header message="tns:UnknownHdrBlockLit" part="Unknown" use="literal" />
- <soap12:header message="tns:validateCountryCodeRequest" part="validateCountryCode" use="literal">
- <soap12:headerfault message="tns:validateCountryCodeFault" part="validateCountryCodeFault" use="literal"/>
- </soap12:header>
- </input>
- <output>
- <soap12:body use="literal" />
- <soap12:header message="tns:echoOkResponse" part="responseOk" use="literal" />
- <soap12:header message="tns:validateCountryCodeResponse" part="validateCountryCodeResponse" use="literal"/>
- </output>
- </operation>
- <operation name="echoOk">
- <soap12:operation/>
- <input>
- <soap12:body use="literal" />
- <soap12:header message="tns:echoOkRequest" part="echoOk" use="literal" />
- <soap12:header message="tns:UnknownHdrBlockLit" part="Unknown" use="literal" />
- </input>
- <output>
- <soap12:body use="literal" />
- <soap12:header message="tns:echoOkResponse" part="responseOk" use="literal" />
- </output>
- </operation>
- <operation name="requiredHeader">
- <soap12:operation/>
- <input>
- <soap12:body use="literal" />
- </input>
- </operation>
- <operation name="echoHeader">
- <soap12:operation/>
- <input>
- <soap12:body use="literal" />
- <soap12:header message="tns:echoOkRequest" part="echoOk" use="literal" />
- <soap12:header message="tns:UnknownHdrBlockLit" part="Unknown" use="literal" />
- </input>
- <output>
- <soap12:body use="literal" />
- <soap12:header message="tns:echoOkResponse" part="responseOk" use="literal" />
- </output>
- </operation>
- <operation name="echoResolvedRef">
- <soap12:operation/>
- <input>
- <soap12:body use="literal" />
- </input>
- <output>
- <soap12:body use="literal" />
- </output>
- </operation>
- </binding>
-
- <binding name="Soap12TestRpcBinding" type="tns:Soap12TestPortTypeRpc">
- <soap12:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/>
-
- <!-- 3.4.1 returnVoid rpc operation -->
- <operation name="returnVoid">
- <soap12:operation/>
- <input>
- <soap12:body use="encoded" namespace="http://example.org/ts-tests" encodingStyle="http://www.w3.org/2003/05/soap-encoding"/>
- </input>
- <output>
- <soap12:body use="encoded" namespace="http://example.org/ts-tests" encodingStyle="http://www.w3.org/2003/05/soap-encoding"/>
- </output>
- </operation>
-
- <!-- 3.4.2 echoStruct rpc operation -->
- <operation name="echoStruct">
- <soap12:operation/>
- <input>
- <soap12:body use="encoded" namespace="http://example.org/ts-tests" encodingStyle="http://www.w3.org/2003/05/soap-encoding"/>
- </input>
- <output>
- <soap12:body use="encoded" namespace="http://example.org/ts-tests" encodingStyle="http://www.w3.org/2003/05/soap-encoding"/>
- </output>
- </operation>
-
- <!-- 3.4.3 echoStructArray rpc operation -->
- <operation name="echoStructArray">
- <soap12:operation/>
- <input>
- <soap12:body use="encoded" namespace="http://example.org/ts-tests" encodingStyle="http://www.w3.org/2003/05/soap-encoding"/>
- </input>
- <output>
- <soap12:body use="encoded" namespace="http://example.org/ts-tests" encodingStyle="http://www.w3.org/2003/05/soap-encoding"/>
- </output>
- </operation>
-
- <!-- 3.4.4 echoStructAsSimpleTypes rpc operation -->
- <operation name="echoStructAsSimpleTypes">
- <soap12:operation/>
- <input>
- <soap12:body use="encoded" namespace="http://example.org/ts-tests" encodingStyle="http://www.w3.org/2003/05/soap-encoding"/>
- </input>
- <output>
- <soap12:body use="encoded" namespace="http://example.org/ts-tests" encodingStyle="http://www.w3.org/2003/05/soap-encoding"/>
- </output>
- </operation>
-
- <!-- 3.4.5 echoSimpleTypesAsStruct rpc operation -->
- <operation name="echoSimpleTypesAsStruct">
- <soap12:operation/>
- <input>
- <soap12:body use="encoded" namespace="http://example.org/ts-tests" encodingStyle="http://www.w3.org/2003/05/soap-encoding"/>
- </input>
- <output>
- <soap12:body use="encoded" namespace="http://example.org/ts-tests" encodingStyle="http://www.w3.org/2003/05/soap-encoding"/>
- </output>
- </operation>
-
- <!-- 3.4.6 echoNestedStruct rpc operation -->
- <operation name="echoNestedStruct">
- <soap12:operation/>
- <input>
- <soap12:body use="encoded" namespace="http://example.org/ts-tests" encodingStyle="http://www.w3.org/2003/05/soap-encoding"/>
- </input>
- <output>
- <soap12:body use="encoded" namespace="http://example.org/ts-tests" encodingStyle="http://www.w3.org/2003/05/soap-encoding"/>
- </output>
- </operation>
-
- <!-- 3.4.7 echoNestedArray rpc operation -->
- <operation name="echoNestedArray">
- <soap12:operation/>
- <input>
- <soap12:body use="encoded" namespace="http://example.org/ts-tests" encodingStyle="http://www.w3.org/2003/05/soap-encoding"/>
- </input>
- <output>
- <soap12:body use="encoded" namespace="http://example.org/ts-tests" encodingStyle="http://www.w3.org/2003/05/soap-encoding"/>
- </output>
- </operation>
-
- <!-- 3.4.8 echoFloatArray rpc operation -->
- <operation name="echoFloatArray">
- <soap12:operation/>
- <input>
- <soap12:body use="encoded" namespace="http://example.org/ts-tests" encodingStyle="http://www.w3.org/2003/05/soap-encoding"/>
- </input>
- <output>
- <soap12:body use="encoded" namespace="http://example.org/ts-tests" encodingStyle="http://www.w3.org/2003/05/soap-encoding"/>
- </output>
- </operation>
-
- <!-- 3.4.9 echoStringArray rpc operation -->
- <operation name="echoStringArray">
- <soap12:operation/>
- <input>
- <soap12:body use="encoded" namespace="http://example.org/ts-tests" encodingStyle="http://www.w3.org/2003/05/soap-encoding"/>
- </input>
- <output>
- <soap12:body use="encoded" namespace="http://example.org/ts-tests" encodingStyle="http://www.w3.org/2003/05/soap-encoding"/>
- </output>
- </operation>
-
- <!-- 3.4.10 echoIntegerArray rpc operation -->
- <operation name="echoIntegerArray">
- <soap12:operation/>
- <input>
- <soap12:body use="encoded" namespace="http://example.org/ts-tests" encodingStyle="http://www.w3.org/2003/05/soap-encoding"/>
- </input>
- <output>
- <soap12:body use="encoded" namespace="http://example.org/ts-tests" encodingStyle="http://www.w3.org/2003/05/soap-encoding"/>
- </output>
- </operation>
-
- <!-- 3.4.11 echoBase64 rpc operation -->
- <operation name="echoBase64">
- <soap12:operation/>
- <input>
- <soap12:body use="encoded" namespace="http://example.org/ts-tests" encodingStyle="http://www.w3.org/2003/05/soap-encoding"/>
- </input>
- <output>
- <soap12:body use="encoded" namespace="http://example.org/ts-tests" encodingStyle="http://www.w3.org/2003/05/soap-encoding"/>
- </output>
- </operation>
-
- <!-- 3.4.12 echoBoolean rpc operation -->
- <operation name="echoBoolean">
- <soap12:operation/>
- <input>
- <soap12:body use="encoded" namespace="http://example.org/ts-tests" encodingStyle="http://www.w3.org/2003/05/soap-encoding"/>
- </input>
- <output>
- <soap12:body use="encoded" namespace="http://example.org/ts-tests" encodingStyle="http://www.w3.org/2003/05/soap-encoding"/>
- </output>
- </operation>
-
- <!-- 3.4.13 echoDate rpc operation -->
- <operation name="echoDate">
- <soap12:operation/>
- <input>
- <soap12:body use="encoded" namespace="http://example.org/ts-tests" encodingStyle="http://www.w3.org/2003/05/soap-encoding"/>
- </input>
- <output>
- <soap12:body use="encoded" namespace="http://example.org/ts-tests" encodingStyle="http://www.w3.org/2003/05/soap-encoding"/>
- </output>
- </operation>
-
- <!-- 3.4.14 echoDecimal rpc operation -->
- <operation name="echoDecimal">
- <soap12:operation/>
- <input>
- <soap12:body use="encoded" namespace="http://example.org/ts-tests" encodingStyle="http://www.w3.org/2003/05/soap-encoding"/>
- </input>
- <output>
- <soap12:body use="encoded" namespace="http://example.org/ts-tests" encodingStyle="http://www.w3.org/2003/05/soap-encoding"/>
- </output>
- </operation>
-
- <!-- 3.4.15 echoFloat rpc operation -->
- <operation name="echoFloat">
- <soap12:operation/>
- <input>
- <soap12:body use="encoded" namespace="http://example.org/ts-tests" encodingStyle="http://www.w3.org/2003/05/soap-encoding"/>
- </input>
- <output>
- <soap12:body use="encoded" namespace="http://example.org/ts-tests" encodingStyle="http://www.w3.org/2003/05/soap-encoding"/>
- </output>
- </operation>
-
- <!-- 3.4.16 echoString rpc operation -->
- <operation name="echoString">
- <soap12:operation/>
- <input>
- <soap12:body use="encoded" namespace="http://example.org/ts-tests" encodingStyle="http://www.w3.org/2003/05/soap-encoding"/>
- <soap12:header use="encoded" message="tns:DataHolderRequest" part="DataHolder" namespace="http://example.org/ts-tests" encodingStyle="http://www.w3.org/2003/05/soap-encoding"/>
- </input>
- <output>
- <soap12:body use="encoded" namespace="http://example.org/ts-tests" encodingStyle="http://www.w3.org/2003/05/soap-encoding"/>
- <soap12:header use="encoded" message="tns:DataHolderResponse" part="DataHolder" namespace="http://example.org/ts-tests" encodingStyle="http://www.w3.org/2003/05/soap-encoding"/>
- </output>
- </operation>
-
- <!-- 3.4.17 countItems rpc operation -->
- <operation name="countItems">
- <soap12:operation/>
- <input>
- <soap12:body use="encoded" namespace="http://example.org/ts-tests" encodingStyle="http://www.w3.org/2003/05/soap-encoding"/>
- </input>
- <output>
- <soap12:body use="encoded" namespace="http://example.org/ts-tests" encodingStyle="http://www.w3.org/2003/05/soap-encoding"/>
- </output>
- </operation>
-
- <!-- 3.4.18 isNil rpc operation -->
- <operation name="isNil">
- <soap12:operation/>
- <input>
- <soap12:body use="encoded" namespace="http://example.org/ts-tests" encodingStyle="http://www.w3.org/2003/05/soap-encoding"/>
- </input>
- <output>
- <soap12:body use="encoded" namespace="http://example.org/ts-tests" encodingStyle="http://www.w3.org/2003/05/soap-encoding"/>
- </output>
- </operation>
-
- </binding>
-
-
- <service name="WhiteMesaSoap12TestSvc">
- <port name="Soap12TestDocPort" binding="tns:Soap12TestDocBinding">
- <soap12:address location="http://localhost/soap12/test-doc"/>
- </port>
- <port name="Soap12TestRpcPort" binding="tns:Soap12TestRpcBinding">
- <soap12:address location="http://localhost/soap12/test-rpc"/>
- </port>
-
- </service>
-
-</definitions>
diff --git a/ext/soap/tests/test.wsdl b/ext/soap/tests/test.wsdl
deleted file mode 100644
index 0740b7db62..0000000000
--- a/ext/soap/tests/test.wsdl
+++ /dev/null
@@ -1,55 +0,0 @@
-<?xml version="1.0" ?>
-<definitions
- xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
- 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/"
- xmlns:si="http://soapinterop.org/xsd"
- xmlns:tns="http://linuxsrv.home/~dmitry/soap/test.wsdl"
- xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
- xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
- xmlns="http://schemas.xmlsoap.org/wsdl/"
- targetNamespace="http://linuxsrv.home/~dmitry/soap/test.wsdl">
-
- <types>
- <xsd:schema targetNamespace="http://linuxsrv.home/~dmitry/soap/test.wsdl">
- <xsd:import namespace="http://schemas.xmlsoap.org/soap/encoding/" />
- <xsd:import namespace="http://schemas.xmlsoap.org/wsdl/" />
- </xsd:schema>
- </types>
-
- <message name="AddRequest">
- <part name="x" type="xsd:double" />
- <part name="y" type="xsd:double" />
- </message>
- <message name="AddResponse">
- <part name="result" type="xsd:double" />
- </message>
-
- <portType name="TestServicePortType">
- <operation name="Add">
- <input message="tns:AddRequest" />
- <output message="tns:AddResponse" />
- </operation>
- </portType>
-
- <binding name="TestServiceBinding" type="tns:TestServicePortType">
- <soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http" />
- <operation name="Add">
- <soap:operation soapAction="Add" style="rpc" />
- <input>
- <soap:body use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" />
- </input>
- <output>
- <soap:body use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" />
- </output>
- </operation>
- </binding>
-
- <service name="TestService">
- <port name="TestServicePort" binding="tns:TestServiceBinding">
- <soap:address location="http://linuxsrv.home/~dmitry/soap/soap_server.php" />
- </port>
- </service>
-
-</definitions>
diff --git a/ext/soap/tests/transport001.phpt b/ext/soap/tests/transport001.phpt
deleted file mode 100644
index ae4de92524..0000000000
--- a/ext/soap/tests/transport001.phpt
+++ /dev/null
@@ -1,36 +0,0 @@
---TEST--
-SOAP Transport 1: Local transport using SoapClient::__doRequest
---SKIPIF--
-<?php require_once('skipif.inc'); ?>
---FILE--
-<?php
-function Add($x,$y) {
- return $x+$y;
-}
-
-class LocalSoapClient extends SoapClient {
-
- function LocalSoapClient($wsdl, $options) {
- $this->SoapClient($wsdl, $options);
- $this->server = new SoapServer($wsdl, $options);
- $this->server->addFunction('Add');
- }
-
- function __doRequest($request, $location, $action, $version) {
- 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->Add(3,4));
-echo "ok\n";
-?>
---EXPECT--
-int(7)
-ok
diff --git a/ext/sockets/CREDITS b/ext/sockets/CREDITS
deleted file mode 100644
index 2be7552d79..0000000000
--- a/ext/sockets/CREDITS
+++ /dev/null
@@ -1,2 +0,0 @@
-Sockets
-Chris Vandomelen, Sterling Hughes, Daniel Beulshausen, Jason Greene
diff --git a/ext/sockets/config.m4 b/ext/sockets/config.m4
deleted file mode 100644
index e88b54ecda..0000000000
--- a/ext/sockets/config.m4
+++ /dev/null
@@ -1,35 +0,0 @@
-dnl
-dnl $Id$
-dnl
-
-PHP_ARG_ENABLE(sockets, whether to enable sockets support,
-[ --enable-sockets Enable sockets support])
-
-if test "$PHP_SOCKETS" != "no"; then
- dnl Check for struct cmsghdr
- AC_CACHE_CHECK([for struct cmsghdr], ac_cv_cmsghdr,
- [
- AC_TRY_COMPILE([
-#include <sys/types.h>
-#include <sys/socket.h>], [struct cmsghdr s; s], ac_cv_cmsghdr=yes, ac_cv_cmsghdr=no)
- ])
-
- if test "$ac_cv_cmsghdr" = yes; then
- AC_DEFINE(HAVE_CMSGHDR,1,[Whether you have struct cmsghdr])
- fi
-
- AC_CHECK_FUNCS([hstrerror])
- AC_CHECK_HEADERS([netdb.h netinet/tcp.h sys/un.h errno.h])
- AC_TRY_COMPILE([
-#include <sys/types.h>
-#include <sys/socket.h>
- ], [static struct msghdr tp; int n = (int) tp.msg_flags; return n],[],
- [AC_DEFINE(MISSING_MSGHDR_MSGFLAGS, 1, [ ])]
- )
- AC_DEFINE([HAVE_SOCKETS], 1, [ ])
-
- PHP_NEW_EXTENSION([sockets], [sockets.c], [$ext_shared])
-fi
-
-PHP_CHECK_FUNC(gethostbyname2)
-
diff --git a/ext/sockets/config.w32 b/ext/sockets/config.w32
deleted file mode 100644
index 587b9a1b12..0000000000
--- a/ext/sockets/config.w32
+++ /dev/null
@@ -1,15 +0,0 @@
-// $Id$
-// vim:ft=javascript
-
-ARG_ENABLE("sockets", "SOCKETS support", "no");
-
-if (PHP_SOCKETS != "no") {
-
- if (CHECK_LIB("ws2_32.lib", "sockets", PHP_SOCKETS)) {
- EXTENSION('sockets', 'sockets.c php_sockets_win.c');
- AC_DEFINE('HAVE_SOCKETS', 1);
- } else {
- WARNING("sockets not enabled; libraries and headers not found");
- }
-}
-
diff --git a/ext/sockets/package.xml b/ext/sockets/package.xml
deleted file mode 100644
index bd1ba3f99f..0000000000
--- a/ext/sockets/package.xml
+++ /dev/null
@@ -1,67 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1" ?>
-<!DOCTYPE package SYSTEM "../pear/package.dtd">
-<package>
- <name>sockets</name>
- <summary>Socket functions</summary>
- <maintainers>
- <maintainer>
- <user>???</user>
- <name>Chris Vandomelen</name>
- <email>chrisv@b0rked.dhs.org</email>
- <role>lead</role>
- </maintainer>
- <maintainer>
- <user>sterling</user>
- <name>Sterling Hughes</name>
- <email>sterling@php.net</email>
- <role>lead</role>
- </maintainer>
- <maintainer>
- <user>jason</user>
- <name>Jason Greene</name>
- <email>jason@php.net</email>
- <role>lead</role>
- </maintainer>
- <maintainer>
- <user>???</user>
- <name>Daniel Beulshausen</name>
- <email>daniel@php4win.de</email>
- <role>lead</role>
- </maintainer>
- </maintainers>
- <description>
-The socket extension implements a low-level interface to the socket
-communication functions based on the popular BSD sockets, providing
-the possibility to act as a socket server as well as a client.
- </description>
- <license>PHP</license>
- <release>
- <state>beta</state>
- <version>5.0.0rc1</version>
- <date>2004-03-19</date>
- <notes>
-package.xml added to support intallation using pear installer
- </notes>
- <filelist>
- <file role="doc" name="CREDITS"/>
- <file role="doc" name="sockets.php"/>
- <file role="src" name="config.m4"/>
- <file role="src" name="config.w32"/>
- <file role="src" name="php_sockets.h"/>
- <file role="src" name="php_sockets_win.c"/>
- <file role="src" name="php_sockets_win.h"/>
- <file role="src" name="sockets.c"/>
- <file role="src" name="sockets.dsp"/>
- <file role="src" name="unix_socket_constants.h"/>
- <file role="src" name="win32_socket_constants.h"/>
- <file role="test" name="tests/ipv4loop.phpt"/>
- <file role="test" name="tests/ipv6loop.phpt"/>
- </filelist>
- <deps>
- <dep type="php" rel="ge" version="5" />
- </deps>
- </release>
-</package>
-<!--
-vim:et:ts=1:sw=1
--->
diff --git a/ext/sockets/php_sockets.h b/ext/sockets/php_sockets.h
deleted file mode 100644
index eb3f3c59f0..0000000000
--- a/ext/sockets/php_sockets.h
+++ /dev/null
@@ -1,120 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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. |
- +----------------------------------------------------------------------+
- | Authors: Chris Vandomelen <chrisv@b0rked.dhs.org> |
- | Sterling Hughes <sterling@php.net> |
- | |
- | WinSock: Daniel Beulshausen <daniel@php4win.de> |
- +----------------------------------------------------------------------+
- */
-
-#ifndef PHP_SOCKETS_H
-#define PHP_SOCKETS_H
-
-/* $Id$ */
-
-#if HAVE_SOCKETS
-
-extern zend_module_entry sockets_module_entry;
-#define phpext_sockets_ptr &sockets_module_entry
-
-#ifdef PHP_WIN32
-#define PHP_SOCKETS_API __declspec(dllexport)
-#include <winsock.h>
-#else
-#define PHP_SOCKETS_API
-#if HAVE_SYS_SOCKET_H
-#include <sys/socket.h>
-#endif
-#endif
-
-PHP_MINIT_FUNCTION(sockets);
-PHP_MINFO_FUNCTION(sockets);
-PHP_RINIT_FUNCTION(sockets);
-PHP_RSHUTDOWN_FUNCTION(sockets);
-
-PHP_FUNCTION(socket_select);
-PHP_FUNCTION(socket_create_listen);
-PHP_FUNCTION(socket_create_pair);
-PHP_FUNCTION(socket_accept);
-PHP_FUNCTION(socket_set_nonblock);
-PHP_FUNCTION(socket_set_block);
-PHP_FUNCTION(socket_listen);
-PHP_FUNCTION(socket_close);
-PHP_FUNCTION(socket_write);
-PHP_FUNCTION(socket_read);
-PHP_FUNCTION(socket_getsockname);
-PHP_FUNCTION(socket_getpeername);
-PHP_FUNCTION(socket_create);
-PHP_FUNCTION(socket_connect);
-PHP_FUNCTION(socket_strerror);
-PHP_FUNCTION(socket_bind);
-PHP_FUNCTION(socket_recv);
-PHP_FUNCTION(socket_send);
-PHP_FUNCTION(socket_recvfrom);
-PHP_FUNCTION(socket_sendto);
-PHP_FUNCTION(socket_get_option);
-PHP_FUNCTION(socket_set_option);
-PHP_FUNCTION(socket_shutdown);
-PHP_FUNCTION(socket_last_error);
-PHP_FUNCTION(socket_clear_error);
-
-#ifndef PHP_WIN32
-typedef int PHP_SOCKET;
-#else
-typedef SOCKET PHP_SOCKET;
-#endif
-
-typedef struct {
- PHP_SOCKET bsd_socket;
- int type;
- int error;
-} php_socket;
-
-typedef struct {
- zend_bool use_system_read;
-} php_sockets_globals;
-
-/* Prototypes */
-#ifdef ilia_0 /* not needed, only causes a compiler warning */
-static int php_open_listen_sock(php_socket **php_sock, int port, int backlog TSRMLS_DC);
-static int php_accept_connect(php_socket *in_sock, php_socket **new_sock, struct sockaddr *la TSRMLS_DC);
-static int php_read(int bsd_socket, void *buf, size_t maxlen, int flags);
-static char *php_strerror(int error TSRMLS_DC);
-#endif
-
-ZEND_BEGIN_MODULE_GLOBALS(sockets)
- int last_error;
- char *strerror_buf;
-ZEND_END_MODULE_GLOBALS(sockets)
-
-#ifdef ZTS
-#define SOCKETS_G(v) TSRMG(sockets_globals_id, zend_sockets_globals *, v)
-#else
-#define SOCKETS_G(v) (sockets_globals.v)
-#endif
-
-#else
-#define phpext_sockets_ptr NULL
-#endif
-
-#endif
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- */
-
diff --git a/ext/sockets/php_sockets_win.c b/ext/sockets/php_sockets_win.c
deleted file mode 100644
index 4970b25b73..0000000000
--- a/ext/sockets/php_sockets_win.c
+++ /dev/null
@@ -1,109 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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. |
- +----------------------------------------------------------------------+
- | Authors: Chris Vandomelen <chrisv@b0rked.dhs.org> |
- | Sterling Hughes <sterling@php.net> |
- | |
- | WinSock: Daniel Beulshausen <daniel@php4win.de> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-
-#ifdef PHP_WIN32
-
-#include <stdio.h>
-#include <fcntl.h>
-
-#include "php.h"
-#include "php_sockets.h"
-#include "php_sockets_win.h"
-
-int socketpair(int domain, int type, int protocol, SOCKET sock[2]) {
- struct sockaddr_in address;
- SOCKET redirect;
- int size = sizeof(address);
-
- if(domain != AF_INET) {
- set_errno(WSAENOPROTOOPT);
- return -1;
- }
-
-
- sock[0] = socket(domain, type, protocol);
- address.sin_addr.s_addr = INADDR_ANY;
- address.sin_family = AF_INET;
- address.sin_port = 0;
-
- bind(sock[0], (struct sockaddr*)&address, sizeof(address));
- if(getsockname(sock[0], (struct sockaddr *)&address, &size) != 0) {
-
- }
-
- listen(sock[0], 2);
- sock[1] = socket(domain, type, protocol);
- address.sin_addr.s_addr = htonl(INADDR_LOOPBACK);
-
- connect(sock[1], (struct sockaddr*)&address, sizeof(address));
- redirect = accept(sock[0],(struct sockaddr*)&address, &size);
-
- close(sock[0]);
- sock[0] = redirect;
-
- if(sock[0] == INVALID_SOCKET ) {
- close(sock[0]);
- close(sock[1]);
- set_errno(WSAECONNABORTED);
- return -1;
- }
-
- return 0;
-}
-
-int inet_aton(const char *cp, struct in_addr *inp) {
- inp->s_addr = inet_addr(cp);
-
- if (inp->s_addr == INADDR_NONE) {
- return 0;
- }
-
- return 1;
-}
-
-int fcntl(int fd, int cmd, ...) {
- va_list va;
- int retval, io, mode;
-
- va_start(va, cmd);
-
- switch(cmd) {
- case F_GETFL:
- case F_SETFD:
- case F_GETFD:
- default:
- retval = -1;
- break;
-
- case F_SETFL:
- io = va_arg(va, int);
- mode = io == O_NONBLOCK ? 1 : 0;
- retval = ioctlsocket(fd, io, &mode);
- break;
- }
-
- va_end(va);
- return retval;
-}
-#endif
diff --git a/ext/sockets/php_sockets_win.h b/ext/sockets/php_sockets_win.h
deleted file mode 100644
index 4b16ebe7d6..0000000000
--- a/ext/sockets/php_sockets_win.h
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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. |
- +----------------------------------------------------------------------+
- | Authors: Chris Vandomelen <chrisv@b0rked.dhs.org> |
- | Sterling Hughes <sterling@php.net> |
- | |
- | WinSock: Daniel Beulshausen <daniel@php4win.de> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-
-#ifdef PHP_WIN32
-
-#define F_SETFL 0
-#define F_GETFL 1
-#define F_SETFD 2
-#define F_GETFD 3
-
-#define O_NONBLOCK FIONBIO
-
-#define EPROTONOSUPPORT WSAEPROTONOSUPPORT
-#define ECONNRESET WSAECONNRESET
-
-#ifdef errno
-#undef errno
-#endif
-
-#define errno WSAGetLastError()
-#define h_errno WSAGetLastError()
-#define set_errno(a) WSASetLastError(a)
-#define set_h_errno(a) WSASetLastError(a)
-#define close(a) closesocket(a)
-
-struct sockaddr_un {
- short sun_family;
- char sun_path[108];
-};
-
-int socketpair(int domain, int type, int protocol, SOCKET sock[2]);
-int inet_aton(const char *cp, struct in_addr *inp);
-int fcntl(int fd, int cmd, ...);
-
-#endif
diff --git a/ext/sockets/sockets.c b/ext/sockets/sockets.c
deleted file mode 100644
index 8f2a329c35..0000000000
--- a/ext/sockets/sockets.c
+++ /dev/null
@@ -1,1769 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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. |
- +----------------------------------------------------------------------+
- | Authors: Chris Vandomelen <chrisv@b0rked.dhs.org> |
- | Sterling Hughes <sterling@php.net> |
- | Jason Greene <jason@php.net> |
- | WinSock: Daniel Beulshausen <daniel@php4win.de> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "php.h"
-
-#if HAVE_SOCKETS
-
-#include "php_network.h"
-#include "ext/standard/info.h"
-#include "php_ini.h"
-
-#ifndef PHP_WIN32
-# include "php_sockets.h"
-# include <sys/types.h>
-# include <sys/socket.h>
-# include <netdb.h>
-# include <netinet/in.h>
-# include <netinet/tcp.h>
-# include <sys/un.h>
-# include <arpa/inet.h>
-# include <sys/time.h>
-# include <unistd.h>
-# include <errno.h>
-# include <fcntl.h>
-# include <signal.h>
-# include <sys/uio.h>
-# define IS_INVALID_SOCKET(a) (a->bsd_socket < 0)
-# define set_errno(a) (errno = a)
-# define set_h_errno(a) (h_errno = a)
-#else /* windows */
-# include "php_sockets.h"
-# include "php_sockets_win.h"
-# define IS_INVALID_SOCKET(a) (a->bsd_socket == INVALID_SOCKET)
-#endif
-
-ZEND_DECLARE_MODULE_GLOBALS(sockets)
-
-#ifndef MSG_WAITALL
-#ifdef LINUX
-#define MSG_WAITALL 0x00000100
-#else
-#define MSG_WAITALL 0x00000000
-#endif
-#endif
-
-#ifndef SUN_LEN
-#define SUN_LEN(su) (sizeof(*(su)) - sizeof((su)->sun_path) + strlen((su)->sun_path))
-#endif
-
-#ifndef PF_INET
-#define PF_INET AF_INET
-#endif
-
-static char *php_strerror(int error TSRMLS_DC);
-
-#define PHP_NORMAL_READ 0x0001
-#define PHP_BINARY_READ 0x0002
-
-#define PHP_SOCKET_ERROR(socket,msg,errn) socket->error = errn; \
- SOCKETS_G(last_error) = errn; \
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s [%d]: %s", msg, errn, php_strerror(errn TSRMLS_CC))
-
-static int le_socket;
-#define le_socket_name "Socket"
-
-static
- ZEND_BEGIN_ARG_INFO(first_through_third_args_force_ref, 0)
- ZEND_ARG_PASS_INFO(1)
- ZEND_ARG_PASS_INFO(1)
- ZEND_ARG_PASS_INFO(1)
- ZEND_END_ARG_INFO();
-
-static
- ZEND_BEGIN_ARG_INFO(second_and_third_args_force_ref, 0)
- ZEND_ARG_PASS_INFO(0)
- ZEND_ARG_PASS_INFO(1)
- ZEND_ARG_PASS_INFO(1)
- ZEND_END_ARG_INFO();
-
-static
- ZEND_BEGIN_ARG_INFO(second_fifth_and_sixth_args_force_ref, 0)
- ZEND_ARG_PASS_INFO(0)
- ZEND_ARG_PASS_INFO(1)
- ZEND_ARG_PASS_INFO(0)
- ZEND_ARG_PASS_INFO(0)
- ZEND_ARG_PASS_INFO(1)
- ZEND_ARG_PASS_INFO(1)
- ZEND_END_ARG_INFO();
-
-/* {{{ sockets_functions[]
- */
-function_entry sockets_functions[] = {
- PHP_FE(socket_select, first_through_third_args_force_ref)
- PHP_FE(socket_create, NULL)
- PHP_FE(socket_create_listen, NULL)
- PHP_FE(socket_create_pair, fourth_arg_force_ref)
- PHP_FE(socket_accept, NULL)
- PHP_FE(socket_set_nonblock, NULL)
- PHP_FE(socket_set_block, NULL)
- PHP_FE(socket_listen, NULL)
- PHP_FE(socket_close, NULL)
- PHP_FE(socket_write, NULL)
- PHP_FE(socket_read, NULL)
- PHP_FE(socket_getsockname, second_and_third_args_force_ref)
- PHP_FE(socket_getpeername, second_and_third_args_force_ref)
- PHP_FE(socket_connect, NULL)
- PHP_FE(socket_strerror, NULL)
- PHP_FE(socket_bind, NULL)
- PHP_FE(socket_recv, second_arg_force_ref)
- PHP_FE(socket_send, NULL)
- PHP_FE(socket_recvfrom, second_fifth_and_sixth_args_force_ref)
- PHP_FE(socket_sendto, NULL)
- PHP_FE(socket_get_option, NULL)
- PHP_FE(socket_set_option, NULL)
- PHP_FE(socket_shutdown, NULL)
- PHP_FE(socket_last_error, NULL)
- PHP_FE(socket_clear_error, NULL)
-
- /* for downwards compatability */
- PHP_FALIAS(socket_getopt, socket_get_option, NULL)
- PHP_FALIAS(socket_setopt, socket_set_option, NULL)
-
- {NULL, NULL, NULL}
-};
-/* }}} */
-
-zend_module_entry sockets_module_entry = {
- STANDARD_MODULE_HEADER,
- "sockets",
- sockets_functions,
- PHP_MINIT(sockets),
- NULL,
- PHP_RINIT(sockets),
- PHP_RSHUTDOWN(sockets),
- PHP_MINFO(sockets),
- NO_VERSION_YET,
- STANDARD_MODULE_PROPERTIES
-};
-
-
-#ifdef COMPILE_DL_SOCKETS
-ZEND_GET_MODULE(sockets)
-# ifdef PHP_WIN32
-# include "zend_arg_defs.c"
-# endif
-#endif
-
-/* inet_ntop should be used instead of inet_ntoa */
-int inet_ntoa_lock = 0;
-
-static void php_destroy_socket(zend_rsrc_list_entry *rsrc TSRMLS_DC)
-{
- php_socket *php_sock = (php_socket *) rsrc->ptr;
-
- close(php_sock->bsd_socket);
- efree(php_sock);
-}
-
-static int php_open_listen_sock(php_socket **php_sock, int port, int backlog TSRMLS_DC)
-{
- struct sockaddr_in la;
- struct hostent *hp;
- php_socket *sock = (php_socket*)emalloc(sizeof(php_socket));
-
- *php_sock = sock;
-
-#ifndef PHP_WIN32
- if ((hp = gethostbyname("0.0.0.0")) == NULL) {
-#else
- if ((hp = gethostbyname("localhost")) == NULL) {
-#endif
- efree(sock);
- return 0;
- }
-
- memcpy((char *) &la.sin_addr, hp->h_addr, hp->h_length);
- la.sin_family = hp->h_addrtype;
- la.sin_port = htons((unsigned short) port);
-
- sock->bsd_socket = socket(PF_INET, SOCK_STREAM, 0);
-
- if (IS_INVALID_SOCKET(sock)) {
- PHP_SOCKET_ERROR(sock, "unable to create listening socket", errno);
- efree(sock);
- return 0;
- }
-
- sock->type = PF_INET;
-
- if (bind(sock->bsd_socket, (struct sockaddr *)&la, sizeof(la)) < 0) {
- PHP_SOCKET_ERROR(sock, "unable to bind to given adress", errno);
- close(sock->bsd_socket);
- efree(sock);
- return 0;
- }
-
- if (listen(sock->bsd_socket, backlog) < 0) {
- PHP_SOCKET_ERROR(sock, "unable to listen on socket", errno);
- close(sock->bsd_socket);
- efree(sock);
- return 0;
- }
-
- return 1;
-}
-
-static int php_accept_connect(php_socket *in_sock, php_socket **new_sock, struct sockaddr *la TSRMLS_DC)
-{
- socklen_t salen;
- php_socket *out_sock = (php_socket*)emalloc(sizeof(php_socket));
-
- *new_sock = out_sock;
- salen = sizeof(*la);
-
- out_sock->bsd_socket = accept(in_sock->bsd_socket, la, &salen);
-
- if (IS_INVALID_SOCKET(out_sock)) {
- PHP_SOCKET_ERROR(out_sock, "unable to accept incoming connection", errno);
- efree(out_sock);
- return 0;
- }
-
- return 1;
-}
-
-/* {{{ php_read -- wrapper around read() so that it only reads to a \r or \n. */
-static int php_read(int bsd_socket, void *buf, size_t maxlen, int flags)
-{
- int m = 0;
- size_t n = 0;
- int no_read = 0;
- int nonblock = 0;
- char *t = (char *) buf;
-
- m = fcntl(bsd_socket, F_GETFL);
- if (m < 0) {
- return m;
- }
-
- nonblock = (m & O_NONBLOCK);
- m = 0;
-
- set_errno(0);
-
- *t = '\0';
- while (*t != '\n' && *t != '\r' && n < maxlen) {
- if (m > 0) {
- t++;
- n++;
- } else if (m == 0) {
- no_read++;
- if (nonblock && no_read >= 2) {
- return n;
- /* The first pass, m always is 0, so no_read becomes 1
- * in the first pass. no_read becomes 2 in the second pass,
- * and if this is nonblocking, we should return.. */
- }
-
- if (no_read > 200) {
- set_errno(ECONNRESET);
- return -1;
- }
- }
-
- if (n < maxlen) {
- m = recv(bsd_socket, (void *) t, 1, flags);
- }
-
- if (errno != 0 && errno != ESPIPE && errno != EAGAIN) {
- return -1;
- }
-
- set_errno(0);
- }
-
- if (n < maxlen) {
- n++;
- /* The only reasons it makes it to here is
- * if '\n' or '\r' are encountered. So, increase
- * the return by 1 to make up for the lack of the
- * '\n' or '\r' in the count (since read() takes
- * place at the end of the loop..) */
- }
-
- return n;
-}
-/* }}} */
-
-static char *php_strerror(int error TSRMLS_DC)
-{
- const char *buf;
-
-#ifndef PHP_WIN32
- if (error < -10000) {
- error = -error - 10000;
-
-#ifdef HAVE_HSTRERROR
- buf = hstrerror(error);
-#else
- {
- spprintf(&(SOCKETS_G(strerror_buf)), 0, "Host lookup error %d", error);
- buf = SOCKETS_G(strerror_buf);
- }
-#endif
- } else {
- buf = strerror(error);
- }
-#else
- {
- LPTSTR tmp = NULL;
- buf = NULL;
-
- if (FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS,
- NULL, error, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPTSTR) &tmp, 0, NULL)) {
- SOCKETS_G(strerror_buf) = estrdup(tmp);
- LocalFree(tmp);
-
- buf = SOCKETS_G(strerror_buf);
- }
- }
-#endif
-
- return (buf ? (char *) buf : "");
-}
-
-#if HAVE_IPV6
-/* Sets addr by hostname, or by ip in string form (AF_INET6) */
-static int php_set_inet6_addr(struct sockaddr_in6 *sin6, char *string, php_socket *php_sock TSRMLS_DC)
-{
- struct in6_addr tmp;
-#if HAVE_GETADDRINFO
- struct addrinfo hints;
- struct addrinfo *addrinfo = NULL;
-#endif
-
- if (inet_pton(AF_INET6, string, &tmp)) {
- memcpy(&(sin6->sin6_addr.s6_addr), &(tmp.s6_addr), sizeof(struct in6_addr));
- } else {
-#if HAVE_GETADDRINFO
-
- memset(&hints, 0, sizeof(struct addrinfo));
- hints.ai_family = PF_INET6;
- getaddrinfo(string, NULL, &hints, &addrinfo);
- if (!addrinfo) {
-#ifdef PHP_WIN32
- PHP_SOCKET_ERROR(php_sock, "Host lookup failed", WSAGetLastError());
-#else
- PHP_SOCKET_ERROR(php_sock, "Host lookup failed", (-10000 - h_errno));
-#endif
- return 0;
- }
- if (addrinfo->ai_family != PF_INET6 || addrinfo->ai_addrlen != sizeof(struct sockaddr_in6)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Host lookup failed: Non AF_INET6 domain returned on AF_INET6 socket");
- freeaddrinfo(addrinfo);
- return 0;
- }
-
- memcpy(&(sin6->sin6_addr.s6_addr), ((struct sockaddr_in6*)(addrinfo->ai_addr))->sin6_addr.s6_addr, sizeof(struct in6_addr));
- freeaddrinfo(addrinfo);
-
-#else
- /* No IPv6 specific hostname resolution is available on this system? */
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Host lookup failed: getaddrinfo() not available on this system.");
- return 0;
-#endif
-
- }
-
- return 1;
-}
-#endif
-
-/* Sets addr by hostname, or by ip in string form (AF_INET) */
-static int php_set_inet_addr(struct sockaddr_in *sin, char *string, php_socket *php_sock TSRMLS_DC)
-{
- struct in_addr tmp;
- struct hostent *host_entry;
-
- if (inet_aton(string, &tmp)) {
- sin->sin_addr.s_addr = tmp.s_addr;
- } else {
- if (! (host_entry = gethostbyname(string))) {
- /* Note: < -10000 indicates a host lookup error */
-#ifdef PHP_WIN32
- PHP_SOCKET_ERROR(php_sock, "Host lookup failed", WSAGetLastError());
-#else
- PHP_SOCKET_ERROR(php_sock, "Host lookup failed", (-10000 - h_errno));
-#endif
- return 0;
- }
- if (host_entry->h_addrtype != AF_INET) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Host lookup failed: Non AF_INET domain returned on AF_INET socket");
- return 0;
- }
- memcpy(&(sin->sin_addr.s_addr), host_entry->h_addr_list[0], host_entry->h_length);
- }
-
- return 1;
-}
-
-static void php_sockets_init_globals(zend_sockets_globals *sockets_globals TSRMLS_DC)
-{
- sockets_globals->last_error = 0;
- sockets_globals->strerror_buf = NULL;
-}
-
-/* {{{ PHP_MINIT_FUNCTION
- */
-PHP_MINIT_FUNCTION(sockets)
-{
- struct protoent *pe;
-
- ZEND_INIT_MODULE_GLOBALS(sockets, php_sockets_init_globals, NULL);
-
- le_socket = zend_register_list_destructors_ex(php_destroy_socket, NULL, le_socket_name, module_number);
-
- REGISTER_LONG_CONSTANT("AF_UNIX", AF_UNIX, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("AF_INET", AF_INET, CONST_CS | CONST_PERSISTENT);
-#if HAVE_IPV6
- REGISTER_LONG_CONSTANT("AF_INET6", AF_INET6, CONST_CS | CONST_PERSISTENT);
-#endif
- REGISTER_LONG_CONSTANT("SOCK_STREAM", SOCK_STREAM, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("SOCK_DGRAM", SOCK_DGRAM, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("SOCK_RAW", SOCK_RAW, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("SOCK_SEQPACKET",SOCK_SEQPACKET, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("SOCK_RDM", SOCK_RDM, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("MSG_OOB", MSG_OOB, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("MSG_WAITALL", MSG_WAITALL, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("MSG_PEEK", MSG_PEEK, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("MSG_DONTROUTE", MSG_DONTROUTE, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("SO_DEBUG", SO_DEBUG, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("SO_REUSEADDR", SO_REUSEADDR, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("SO_KEEPALIVE", SO_KEEPALIVE, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("SO_DONTROUTE", SO_DONTROUTE, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("SO_LINGER", SO_LINGER, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("SO_BROADCAST", SO_BROADCAST, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("SO_OOBINLINE", SO_OOBINLINE, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("SO_SNDBUF", SO_SNDBUF, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("SO_RCVBUF", SO_RCVBUF, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("SO_SNDLOWAT", SO_SNDLOWAT, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("SO_RCVLOWAT", SO_RCVLOWAT, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("SO_SNDTIMEO", SO_SNDTIMEO, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("SO_RCVTIMEO", SO_RCVTIMEO, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("SO_TYPE", SO_TYPE, CONST_CS | CONST_PERSISTENT);
- 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);
- 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);
-
-#ifndef WIN32
-# include "unix_socket_constants.h"
-#else
-# include "win32_socket_constants.h"
-#endif
-
- if ((pe = getprotobyname("tcp"))) {
- REGISTER_LONG_CONSTANT("SOL_TCP", pe->p_proto, CONST_CS | CONST_PERSISTENT);
- }
-
- if ((pe = getprotobyname("udp"))) {
- REGISTER_LONG_CONSTANT("SOL_UDP", pe->p_proto, CONST_CS | CONST_PERSISTENT);
- }
-
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ PHP_MINFO_FUNCTION
- */
-PHP_MINFO_FUNCTION(sockets)
-{
- php_info_print_table_start();
- php_info_print_table_row(2, "Sockets Support", "enabled");
- php_info_print_table_end();
-}
-/* }}} */
-
-/* {{{ PHP_RINIT_FUNCTION */
-PHP_RINIT_FUNCTION(sockets)
-{
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ PHP_RSHUTDOWN_FUNCTION */
-PHP_RSHUTDOWN_FUNCTION(sockets)
-{
- if (SOCKETS_G(strerror_buf)) {
- efree(SOCKETS_G(strerror_buf));
- SOCKETS_G(strerror_buf) = NULL;
- }
-
- return SUCCESS;
-}
-/* }}} */
-
-static int php_sock_array_to_fd_set(zval *sock_array, fd_set *fds, PHP_SOCKET *max_fd TSRMLS_DC)
-{
- zval **element;
- php_socket *php_sock;
-
- if (Z_TYPE_P(sock_array) != IS_ARRAY) return 0;
-
- for (zend_hash_internal_pointer_reset(Z_ARRVAL_P(sock_array));
- zend_hash_get_current_data(Z_ARRVAL_P(sock_array), (void **) &element) == SUCCESS;
- zend_hash_move_forward(Z_ARRVAL_P(sock_array))) {
-
- php_sock = (php_socket*) zend_fetch_resource(element TSRMLS_CC, -1, le_socket_name, NULL, 1, le_socket);
- if (!php_sock) continue; /* If element is not a resource, skip it */
-
- FD_SET(php_sock->bsd_socket, fds);
- if (php_sock->bsd_socket > *max_fd) {
- *max_fd = php_sock->bsd_socket;
- }
- }
-
- return 1;
-}
-
-static int php_sock_array_from_fd_set(zval *sock_array, fd_set *fds TSRMLS_DC)
-{
- zval **element;
- zval **dest_element;
- php_socket *php_sock;
- HashTable *new_hash;
-
- if (Z_TYPE_P(sock_array) != IS_ARRAY) return 0;
-
- ALLOC_HASHTABLE(new_hash);
- zend_hash_init(new_hash, 0, NULL, ZVAL_PTR_DTOR, 0);
- for (zend_hash_internal_pointer_reset(Z_ARRVAL_P(sock_array));
- zend_hash_get_current_data(Z_ARRVAL_P(sock_array), (void **) &element) == SUCCESS;
- zend_hash_move_forward(Z_ARRVAL_P(sock_array))) {
-
- php_sock = (php_socket*) zend_fetch_resource(element TSRMLS_CC, -1, le_socket_name, NULL, 1, le_socket);
- if (!php_sock) continue; /* If element is not a resource, skip it */
-
- if (FD_ISSET(php_sock->bsd_socket, fds)) {
- /* Add fd to new array */
- zend_hash_next_index_insert(new_hash, (void *)element, sizeof(zval *), (void **)&dest_element);
- if (dest_element) zval_add_ref(dest_element);
- }
- }
-
- /* Destroy old array, add new one */
- zend_hash_destroy(Z_ARRVAL_P(sock_array));
- efree(Z_ARRVAL_P(sock_array));
-
- zend_hash_internal_pointer_reset(new_hash);
- Z_ARRVAL_P(sock_array) = new_hash;
-
- return 1;
-}
-
-/* {{{ proto int socket_select(array &read_fds, array &write_fds, &array except_fds, int tv_sec[, int tv_usec])
- Runs the select() system call on the sets mentioned with a timeout specified by tv_sec and tv_usec */
-PHP_FUNCTION(socket_select)
-{
- zval *r_array, *w_array, *e_array, *sec;
- struct timeval tv;
- struct timeval *tv_p = NULL;
- fd_set rfds, wfds, efds;
- PHP_SOCKET max_fd = 0;
- int retval, sets = 0;
- long usec = 0;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "a!a!a!z!|l", &r_array, &w_array, &e_array, &sec, &usec) == FAILURE)
- return;
-
- FD_ZERO(&rfds);
- FD_ZERO(&wfds);
- FD_ZERO(&efds);
-
- if (r_array != NULL) sets += php_sock_array_to_fd_set(r_array, &rfds, &max_fd TSRMLS_CC);
- if (w_array != NULL) sets += php_sock_array_to_fd_set(w_array, &wfds, &max_fd TSRMLS_CC);
- if (e_array != NULL) sets += php_sock_array_to_fd_set(e_array, &efds, &max_fd TSRMLS_CC);
-
- if (!sets) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "no resource arrays were passed to select");
- RETURN_FALSE;
- }
-
- /* If seconds is not set to null, build the timeval, else we wait indefinitely */
- if (sec != NULL) {
- zval tmp;
-
- if (Z_TYPE_P(sec) != IS_LONG) {
- tmp = *sec;
- zval_copy_ctor(&tmp);
- convert_to_long(&tmp);
- sec = &tmp;
- }
-
- /* Solaris + BSD do not like microsecond values which are >= 1 sec */
- if (usec > 999999) {
- tv.tv_sec = Z_LVAL_P(sec) + (usec / 1000000);
- tv.tv_usec = usec % 1000000;
- } else {
- tv.tv_sec = Z_LVAL_P(sec);
- tv.tv_usec = usec;
- }
-
- tv_p = &tv;
-
- if (sec == &tmp) {
- zval_dtor(&tmp);
- }
- }
-
- retval = select(max_fd+1, &rfds, &wfds, &efds, tv_p);
-
- if (retval == -1) {
- SOCKETS_G(last_error) = errno;
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "unable to select [%d]: %s", errno, php_strerror(errno TSRMLS_CC));
- RETURN_FALSE;
- }
-
- if (r_array != NULL) php_sock_array_from_fd_set(r_array, &rfds TSRMLS_CC);
- if (w_array != NULL) php_sock_array_from_fd_set(w_array, &wfds TSRMLS_CC);
- if (e_array != NULL) php_sock_array_from_fd_set(e_array, &efds TSRMLS_CC);
-
- RETURN_LONG(retval);
-}
-/* }}} */
-
-/* {{{ proto resource socket_create_listen(int port[, int backlog])
- Opens a socket on port to accept connections */
-PHP_FUNCTION(socket_create_listen)
-{
- php_socket *php_sock;
- long port, backlog = 128;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l|l", &port, &backlog) == FAILURE)
- return;
-
- if (!php_open_listen_sock(&php_sock, port, backlog TSRMLS_CC)) {
- RETURN_FALSE;
- }
-
- ZEND_REGISTER_RESOURCE(return_value, php_sock, le_socket);
-}
-/* }}} */
-
-/* {{{ proto resource socket_accept(resource socket)
- Accepts a connection on the listening socket fd */
-PHP_FUNCTION(socket_accept)
-{
- zval *arg1;
- php_socket *php_sock, *new_sock;
- struct sockaddr_in sa;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &arg1) == FAILURE)
- return;
-
- ZEND_FETCH_RESOURCE(php_sock, php_socket *, &arg1, -1, le_socket_name, le_socket);
-
- if (!php_accept_connect(php_sock, &new_sock, (struct sockaddr *) &sa TSRMLS_CC)) {
- PHP_SOCKET_ERROR(new_sock, "unable to accept socket connection", errno);
- RETURN_FALSE;
- }
-
- ZEND_REGISTER_RESOURCE(return_value, new_sock, le_socket);
-}
-/* }}} */
-
-/* {{{ proto bool socket_set_nonblock(resource socket)
- Sets nonblocking mode on a socket resource */
-PHP_FUNCTION(socket_set_nonblock)
-{
- zval *arg1;
- php_socket *php_sock;
- int flags;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &arg1) == FAILURE)
- return;
-
- ZEND_FETCH_RESOURCE(php_sock, php_socket *, &arg1, -1, le_socket_name, le_socket);
-
- flags = fcntl(php_sock->bsd_socket, F_GETFL);
-
- /* Safely append non blocking to other flags unless the get fails.
- * Note: This does not abort on failure becuse getfl will always fail
- * under the current win32 code. */
- if (flags > -1) flags |= O_NONBLOCK;
- else flags = O_NONBLOCK;
-
- if (fcntl(php_sock->bsd_socket, F_SETFL, flags) > -1) {
- RETURN_TRUE;
- }
-
- RETURN_FALSE;
-}
-/* }}} */
-
-/* {{{ proto bool socket_set_block(resource socket)
- Sets blocking mode on a socket resource */
-PHP_FUNCTION(socket_set_block)
-{
- zval *arg1;
- php_socket *php_sock;
- int flags;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &arg1) == FAILURE)
- return;
-
- ZEND_FETCH_RESOURCE(php_sock, php_socket *, &arg1, -1, le_socket_name, le_socket);
-
- flags = fcntl(php_sock->bsd_socket, F_GETFL);
-
- /* Safely remove blocking from flags unless the get fails.
- * Note: This does not abort on failure becuse getfl will always fail
- * under the current win32 code. */
- if (flags > -1) flags &= ~O_NONBLOCK;
- else flags = 0;
-
- if (fcntl(php_sock->bsd_socket, F_SETFL, flags) > -1) {
- RETURN_TRUE;
- }
-
- RETURN_FALSE;
-}
-/* }}} */
-
-/* {{{ proto bool socket_listen(resource socket[, int backlog])
- Sets the maximum number of connections allowed to be waited for on the socket specified by fd */
-PHP_FUNCTION(socket_listen)
-{
- zval *arg1;
- php_socket *php_sock;
- long backlog = 0;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r|l", &arg1, &backlog) == FAILURE)
- return;
-
- ZEND_FETCH_RESOURCE(php_sock, php_socket *, &arg1, -1, le_socket_name, le_socket);
-
- if (listen(php_sock->bsd_socket, backlog) != 0) {
- PHP_SOCKET_ERROR(php_sock, "unable to listen on socket", errno);
- RETURN_FALSE;
- }
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto void socket_close(resource socket)
- Closes a file descriptor */
-PHP_FUNCTION(socket_close)
-{
- zval *arg1;
- php_socket *php_sock;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &arg1) == FAILURE)
- return;
-
- ZEND_FETCH_RESOURCE(php_sock, php_socket *, &arg1, -1, le_socket_name, le_socket);
- zend_list_delete(Z_RESVAL_P(arg1));
-}
-/* }}} */
-
-/* {{{ proto int socket_write(resource socket, string buf[, int length])
- Writes the buffer to the socket resource, length is optional */
-PHP_FUNCTION(socket_write)
-{
- zval *arg1;
- php_socket *php_sock;
- int retval, str_len;
- long length;
- char *str;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rs|l", &arg1, &str, &str_len, &length) == FAILURE)
- return;
-
- ZEND_FETCH_RESOURCE(php_sock, php_socket *, &arg1, -1, le_socket_name, le_socket);
-
- if (ZEND_NUM_ARGS() < 3) {
- length = str_len;
- }
-
-#ifndef PHP_WIN32
- retval = write(php_sock->bsd_socket, str, MIN(length, str_len));
-#else
- retval = send(php_sock->bsd_socket, str, min(length, str_len), 0);
-#endif
-
- if (retval < 0) {
- PHP_SOCKET_ERROR(php_sock, "unable to write to socket", errno);
- RETURN_FALSE;
- }
-
- RETURN_LONG(retval);
-}
-/* }}} */
-
-/* {{{ proto string socket_read(resource socket, int length [, int type])
- Reads a maximum of length bytes from socket */
-PHP_FUNCTION(socket_read)
-{
- zval *arg1;
- php_socket *php_sock;
- char *tmpbuf;
- int retval;
- long length, type = PHP_BINARY_READ;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rl|l", &arg1, &length, &type) == FAILURE)
- return;
-
- /* overflow check */
- if ((length + 1) < 2) {
- RETURN_FALSE;
- }
-
- tmpbuf = emalloc(length + 1);
-
- ZEND_FETCH_RESOURCE(php_sock, php_socket *, &arg1, -1, le_socket_name, le_socket);
-
- if (type == PHP_NORMAL_READ) {
- retval = php_read(php_sock->bsd_socket, tmpbuf, length, 0);
- } else {
- retval = recv(php_sock->bsd_socket, tmpbuf, length, 0);
- }
-
- if (retval == -1) {
- PHP_SOCKET_ERROR(php_sock, "unable to read from socket", errno);
- efree(tmpbuf);
- RETURN_FALSE;
- }
-
- tmpbuf = erealloc(tmpbuf, retval + 1);
- tmpbuf[retval] = '\0' ;
-
- RETURN_STRINGL(tmpbuf, retval, 0);
-}
-/* }}} */
-
-/* {{{ proto bool socket_getsockname(resource socket, string &addr[, int &port])
- Queries the remote side of the given socket which may either result in host/port or in a UNIX filesystem path, dependent on its type. */
-PHP_FUNCTION(socket_getsockname)
-{
- zval *arg1, *addr, *port = NULL;
- php_sockaddr_storage sa_storage;
- php_socket *php_sock;
- struct sockaddr *sa;
- struct sockaddr_in *sin;
-#if HAVE_IPV6
- struct sockaddr_in6 *sin6;
- char addr6[INET6_ADDRSTRLEN+1];
-#endif
- struct sockaddr_un *s_un;
- char *addr_string;
- socklen_t salen = sizeof(php_sockaddr_storage);
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rz|z", &arg1, &addr, &port) == FAILURE)
- return;
-
- ZEND_FETCH_RESOURCE(php_sock, php_socket *, &arg1, -1, le_socket_name, le_socket);
-
- sa = (struct sockaddr *) &sa_storage;
-
- if (getsockname(php_sock->bsd_socket, sa, &salen) != 0) {
- PHP_SOCKET_ERROR(php_sock, "unable to retrieve socket name", errno);
- RETURN_FALSE;
- }
-
- switch (sa->sa_family) {
-#if HAVE_IPV6
- case AF_INET6:
- sin6 = (struct sockaddr_in6 *) sa;
- inet_ntop(AF_INET6, &sin6->sin6_addr, addr6, INET6_ADDRSTRLEN);
- zval_dtor(addr);
- ZVAL_STRING(addr, addr6, 1);
-
- if (port != NULL) {
- zval_dtor(port);
- ZVAL_LONG(port, htons(sin6->sin6_port));
- }
- RETURN_TRUE;
- break;
-#endif
- case AF_INET:
- sin = (struct sockaddr_in *) sa;
- while (inet_ntoa_lock == 1);
- inet_ntoa_lock = 1;
- addr_string = inet_ntoa(sin->sin_addr);
- inet_ntoa_lock = 0;
-
- zval_dtor(addr);
- ZVAL_STRING(addr, addr_string, 1);
-
- if (port != NULL) {
- zval_dtor(port);
- ZVAL_LONG(port, htons(sin->sin_port));
- }
- RETURN_TRUE;
- break;
-
- case AF_UNIX:
- s_un = (struct sockaddr_un *) sa;
-
- zval_dtor(addr);
- ZVAL_STRING(addr, s_un->sun_path, 1);
- RETURN_TRUE;
- break;
-
- default:
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unsupported address family %d", sa->sa_family);
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-/* {{{ proto bool socket_getpeername(resource socket, string &addr[, int &port])
- Queries the remote side of the given socket which may either result in host/port or in a UNIX filesystem path, dependent on its type. */
-PHP_FUNCTION(socket_getpeername)
-{
- zval *arg1, *arg2, *arg3 = NULL;
- php_sockaddr_storage sa_storage;
- php_socket *php_sock;
- struct sockaddr *sa;
- struct sockaddr_in *sin;
-#if HAVE_IPV6
- struct sockaddr_in6 *sin6;
- char addr6[INET6_ADDRSTRLEN+1];
-#endif
- struct sockaddr_un *s_un;
- char *addr_string;
- socklen_t salen = sizeof(php_sockaddr_storage);
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rz|z", &arg1, &arg2, &arg3) == FAILURE)
- return;
-
- ZEND_FETCH_RESOURCE(php_sock, php_socket *, &arg1, -1, le_socket_name, le_socket);
-
- sa = (struct sockaddr *) &sa_storage;
-
- if (getpeername(php_sock->bsd_socket, sa, &salen) < 0) {
- PHP_SOCKET_ERROR(php_sock, "unable to retrieve peer name", errno);
- RETURN_FALSE;
- }
-
- switch (sa->sa_family) {
-#if HAVE_IPV6
- case AF_INET6:
- sin6 = (struct sockaddr_in6 *) sa;
- inet_ntop(AF_INET6, &sin6->sin6_addr, addr6, INET6_ADDRSTRLEN);
- zval_dtor(arg2);
- ZVAL_STRING(arg2, addr6, 1);
-
- if (arg3 != NULL) {
- zval_dtor(arg3);
- ZVAL_LONG(arg3, htons(sin6->sin6_port));
- }
-
- RETURN_TRUE;
- break;
-#endif
- case AF_INET:
- sin = (struct sockaddr_in *) sa;
- while (inet_ntoa_lock == 1);
- inet_ntoa_lock = 1;
- addr_string = inet_ntoa(sin->sin_addr);
- inet_ntoa_lock = 0;
-
- zval_dtor(arg2);
- ZVAL_STRING(arg2, addr_string, 1);
-
- if (arg3 != NULL) {
- zval_dtor(arg3);
- ZVAL_LONG(arg3, htons(sin->sin_port));
- }
-
- RETURN_TRUE;
- break;
-
- case AF_UNIX:
- s_un = (struct sockaddr_un *) sa;
-
- zval_dtor(arg2);
- ZVAL_STRING(arg2, s_un->sun_path, 1);
- RETURN_TRUE;
- break;
-
- default:
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unsupported address family %d", sa->sa_family);
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-/* {{{ proto resource socket_create(int domain, int type, int protocol)
- Creates an endpoint for communication in the domain specified by domain, of type specified by type */
-PHP_FUNCTION(socket_create)
-{
- long arg1, arg2, arg3;
- php_socket *php_sock = (php_socket*)emalloc(sizeof(php_socket));
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "lll", &arg1, &arg2, &arg3) == FAILURE) {
- efree(php_sock);
- return;
- }
-
- if (arg1 != AF_UNIX
-#if HAVE_IPV6
- && arg1 != AF_INET6
-#endif
- && arg1 != AF_INET) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "invalid socket domain [%ld] specified for argument 1, assuming AF_INET", arg1);
- arg1 = AF_INET;
- }
-
- if (arg2 > 10) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "invalid socket type [%ld] specified for argument 2, assuming SOCK_STREAM", arg2);
- arg2 = SOCK_STREAM;
- }
-
- php_sock->bsd_socket = socket(arg1, arg2, arg3);
- php_sock->type = arg1;
-
- if (IS_INVALID_SOCKET(php_sock)) {
- SOCKETS_G(last_error) = errno;
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to create socket [%d]: %s", errno, php_strerror(errno TSRMLS_CC));
- efree(php_sock);
- RETURN_FALSE;
- }
-
- ZEND_REGISTER_RESOURCE(return_value, php_sock, le_socket);
-}
-/* }}} */
-
-/* {{{ proto bool socket_connect(resource socket, string addr [, int port])
- Opens a connection to addr:port on the socket specified by socket */
-PHP_FUNCTION(socket_connect)
-{
- zval *arg1;
- php_socket *php_sock;
- struct sockaddr_in sin;
-#if HAVE_IPV6
- struct sockaddr_in6 sin6;
-#endif
- struct sockaddr_un s_un;
- char *addr;
- int retval, addr_len;
- long port;
- int argc = ZEND_NUM_ARGS();
-
- if (zend_parse_parameters(argc TSRMLS_CC, "rs|l", &arg1, &addr, &addr_len, &port) == FAILURE)
- return;
-
- ZEND_FETCH_RESOURCE(php_sock, php_socket *, &arg1, -1, le_socket_name, le_socket);
-
- switch(php_sock->type) {
-#if HAVE_IPV6
- case AF_INET6:
- if (argc != 3) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Socket of type AF_INET6 requires 3 arguments");
- RETURN_FALSE;
- }
-
- sin6.sin6_family = AF_INET6;
- sin6.sin6_port = htons((unsigned short int)port);
-
- if (! php_set_inet6_addr(&sin6, addr, php_sock TSRMLS_CC)) {
- RETURN_FALSE;
- }
-
- retval = connect(php_sock->bsd_socket, (struct sockaddr *)&sin6, sizeof(struct sockaddr_in6));
- break;
-#endif
- case AF_INET:
- if (argc != 3) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Socket of type AF_INET requires 3 arguments");
- RETURN_FALSE;
- }
-
- sin.sin_family = AF_INET;
- sin.sin_port = htons((unsigned short int)port);
-
- if (! php_set_inet_addr(&sin, addr, php_sock TSRMLS_CC)) {
- RETURN_FALSE;
- }
-
- retval = connect(php_sock->bsd_socket, (struct sockaddr *)&sin, sizeof(struct sockaddr_in));
- break;
-
- case AF_UNIX:
- 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));
- break;
-
- default:
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unsupported socket type %d", php_sock->type);
- RETURN_FALSE;
- }
-
- if (retval != 0) {
- PHP_SOCKET_ERROR(php_sock, "unable to connect", errno);
- RETURN_FALSE;
- }
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto string socket_strerror(int errno)
- Returns a string describing an error */
-PHP_FUNCTION(socket_strerror)
-{
- long arg1;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &arg1) == FAILURE)
- return;
-
- RETURN_STRING(php_strerror(arg1 TSRMLS_CC), 1);
-}
-/* }}} */
-
-/* {{{ proto bool socket_bind(resource socket, string addr [, int port])
- Binds an open socket to a listening port, port is only specified in AF_INET family. */
-PHP_FUNCTION(socket_bind)
-{
- zval *arg1;
- php_sockaddr_storage sa_storage;
- struct sockaddr *sock_type = (struct sockaddr*) &sa_storage;
- php_socket *php_sock;
- char *addr;
- int addr_len;
- long port = 0;
- long retval = 0;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rs|l", &arg1, &addr, &addr_len, &port) == FAILURE)
- return;
-
- ZEND_FETCH_RESOURCE(php_sock, php_socket *, &arg1, -1, le_socket_name, le_socket);
-
- switch(php_sock->type) {
- case AF_UNIX:
- {
- struct sockaddr_un *sa = (struct sockaddr_un *) sock_type;
- memset(sa, 0, sizeof(sa_storage));
- sa->sun_family = AF_UNIX;
- snprintf(sa->sun_path, 108, "%s", addr);
- retval = bind(php_sock->bsd_socket, (struct sockaddr *) sa, SUN_LEN(sa));
- break;
- }
-
- case AF_INET:
- {
- struct sockaddr_in *sa = (struct sockaddr_in *) sock_type;
-
- memset(sa, 0, sizeof(sa_storage)); /* Apparently, Mac OSX needs this */
-
- sa->sin_family = AF_INET;
- sa->sin_port = htons((unsigned short) port);
-
- if (! php_set_inet_addr(sa, addr, php_sock TSRMLS_CC)) {
- RETURN_FALSE;
- }
-
- retval = bind(php_sock->bsd_socket, (struct sockaddr *)sa, sizeof(struct sockaddr_in));
- break;
- }
-#if HAVE_IPV6
- case AF_INET6:
- {
- struct sockaddr_in6 *sa = (struct sockaddr_in6 *) sock_type;
-
- memset(sa, 0, sizeof(sa_storage)); /* Apparently, Mac OSX needs this */
-
- sa->sin6_family = AF_INET6;
- sa->sin6_port = htons((unsigned short) port);
-
- if (! php_set_inet6_addr(sa, addr, php_sock TSRMLS_CC)) {
- RETURN_FALSE;
- }
-
- retval = bind(php_sock->bsd_socket, (struct sockaddr *)sa, sizeof(struct sockaddr_in6));
- break;
- }
-#endif
- default:
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "unsupported socket type '%d', must be AF_UNIX, AF_INET, or AF_INET6", php_sock->type);
- RETURN_FALSE;
- }
-
- if (retval != 0) {
- PHP_SOCKET_ERROR(php_sock, "unable to bind address", errno);
- RETURN_FALSE;
- }
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto int socket_recv(resource socket, string &buf, int len, int flags)
- Receives data from a connected socket */
-PHP_FUNCTION(socket_recv)
-{
- zval *php_sock_res, *buf;
- char *recv_buf;
- php_socket *php_sock;
- int retval;
- long len, flags;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rzll", &php_sock_res, &buf, &len, &flags) == FAILURE)
- return;
-
- ZEND_FETCH_RESOURCE(php_sock, php_socket *, &php_sock_res, -1, le_socket_name, le_socket);
-
- /* overflow check */
- if ((len + 1) < 2) {
- RETURN_FALSE;
- }
-
- recv_buf = emalloc(len + 1);
- memset(recv_buf, 0, len + 1);
-
- if ((retval = recv(php_sock->bsd_socket, recv_buf, len, flags)) < 1) {
- efree(recv_buf);
-
- zval_dtor(buf);
- Z_TYPE_P(buf) = IS_NULL;
- } else {
- recv_buf[retval] = '\0';
-
- /* Rebuild buffer zval */
- zval_dtor(buf);
-
- Z_STRVAL_P(buf) = recv_buf;
- Z_STRLEN_P(buf) = retval;
- Z_TYPE_P(buf) = IS_STRING;
- }
-
- if (retval == -1) {
- PHP_SOCKET_ERROR(php_sock, "unable to read from socket", errno);
- RETURN_FALSE;
- }
-
- RETURN_LONG(retval);
-}
-/* }}} */
-
-/* {{{ proto int socket_send(resource socket, string buf, int len, int flags)
- Sends data to a connected socket */
-PHP_FUNCTION(socket_send)
-{
- zval *arg1;
- php_socket *php_sock;
- int buf_len, retval;
- long len, flags;
- char *buf;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rsll", &arg1, &buf, &buf_len, &len, &flags) == FAILURE)
- return;
-
- ZEND_FETCH_RESOURCE(php_sock, php_socket *, &arg1, -1, le_socket_name, le_socket);
-
- retval = send(php_sock->bsd_socket, buf, (buf_len < len ? buf_len : len), flags);
-
- if (retval == -1) {
- PHP_SOCKET_ERROR(php_sock, "unable to write to socket", errno);
- RETURN_FALSE;
- }
-
- RETURN_LONG(retval);
-}
-/* }}} */
-
-/* {{{ proto int socket_recvfrom(resource socket, string &buf, int len, int flags, string &name [, int &port])
- Receives data from a socket, connected or not */
-PHP_FUNCTION(socket_recvfrom)
-{
- zval *arg1, *arg2, *arg5, *arg6 = NULL;
- php_socket *php_sock;
- struct sockaddr_un s_un;
- struct sockaddr_in sin;
-#if HAVE_IPV6
- struct sockaddr_in6 sin6;
- char addr6[INET6_ADDRSTRLEN];
-#endif
- socklen_t slen;
- int retval;
- long arg3, arg4;
- char *recv_buf, *address;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rzllz|z", &arg1, &arg2, &arg3, &arg4, &arg5, &arg6) == FAILURE)
- return;
-
- ZEND_FETCH_RESOURCE(php_sock, php_socket *, &arg1, -1, le_socket_name, le_socket);
-
- /* overflow check */
- if ((arg3 + 2) < 3) {
- RETURN_FALSE;
- }
-
- recv_buf = emalloc(arg3 + 2);
- memset(recv_buf, 0, arg3 + 2);
-
- switch (php_sock->type) {
- case AF_UNIX:
- slen = sizeof(s_un);
- s_un.sun_family = AF_UNIX;
- retval = recvfrom(php_sock->bsd_socket, recv_buf, arg3, arg4, (struct sockaddr *)&s_un, (socklen_t *)&slen);
-
- if (retval < 0) {
- efree(recv_buf);
- PHP_SOCKET_ERROR(php_sock, "unable to recvfrom", errno);
- RETURN_FALSE;
- }
-
- zval_dtor(arg2);
- zval_dtor(arg5);
-
- ZVAL_STRINGL(arg2, recv_buf, retval, 0);
- ZVAL_STRING(arg5, s_un.sun_path, 1);
- break;
-
- case AF_INET:
- slen = sizeof(sin);
- memset(&sin, 0, slen);
- sin.sin_family = AF_INET;
-
- if (arg6 == NULL) {
- WRONG_PARAM_COUNT;
- }
-
- retval = recvfrom(php_sock->bsd_socket, recv_buf, arg3, arg4, (struct sockaddr *)&sin, (socklen_t *)&slen);
-
- if (retval < 0) {
- efree(recv_buf);
- PHP_SOCKET_ERROR(php_sock, "unable to recvfrom", errno);
- RETURN_FALSE;
- }
-
- zval_dtor(arg2);
- zval_dtor(arg5);
- zval_dtor(arg6);
-
- address = inet_ntoa(sin.sin_addr);
-
- ZVAL_STRINGL(arg2, recv_buf, retval, 0);
- ZVAL_STRING(arg5, address ? address : "0.0.0.0", 1);
- ZVAL_LONG(arg6, ntohs(sin.sin_port));
- break;
-#if HAVE_IPV6
- case AF_INET6:
- slen = sizeof(sin6);
- memset(&sin6, 0, slen);
- sin6.sin6_family = AF_INET6;
-
- if (arg6 == NULL) {
- WRONG_PARAM_COUNT;
- }
-
- retval = recvfrom(php_sock->bsd_socket, recv_buf, arg3, arg4, (struct sockaddr *)&sin6, (socklen_t *)&slen);
-
- if (retval < 0) {
- efree(recv_buf);
- PHP_SOCKET_ERROR(php_sock, "unable to recvfrom", errno);
- RETURN_FALSE;
- }
-
- zval_dtor(arg2);
- zval_dtor(arg5);
- zval_dtor(arg6);
-
- inet_ntop(AF_INET6, &sin6.sin6_addr, addr6, INET6_ADDRSTRLEN);
-
- ZVAL_STRINGL(arg2, recv_buf, retval, 0);
- ZVAL_STRING(arg5, addr6 ? addr6 : "::", 1);
- ZVAL_LONG(arg6, ntohs(sin6.sin6_port));
- break;
-#endif
- default:
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unsupported socket type %d", php_sock->type);
- RETURN_FALSE;
- }
-
- RETURN_LONG(retval);
-}
-/* }}} */
-
-/* {{{ proto int socket_sendto(resource socket, string buf, int len, int flags, string addr [, int port])
- Sends a message to a socket, whether it is connected or not */
-PHP_FUNCTION(socket_sendto)
-{
- zval *arg1;
- php_socket *php_sock;
- struct sockaddr_un s_un;
- struct sockaddr_in sin;
-#if HAVE_IPV6
- struct sockaddr_in6 sin6;
-#endif
- int retval, buf_len, addr_len;
- long len, flags, port = 0;
- char *buf, *addr;
- int argc = ZEND_NUM_ARGS();
-
- if (zend_parse_parameters(argc TSRMLS_CC, "rslls|l", &arg1, &buf, &buf_len, &len, &flags, &addr, &addr_len, &port) == FAILURE)
- return;
-
- ZEND_FETCH_RESOURCE(php_sock, php_socket *, &arg1, -1, le_socket_name, le_socket);
-
-
- switch (php_sock->type) {
- case AF_UNIX:
- memset(&s_un, 0, sizeof(s_un));
- s_un.sun_family = AF_UNIX;
- snprintf(s_un.sun_path, 108, "%s", addr);
-
- retval = sendto(php_sock->bsd_socket, buf, (len > buf_len) ? buf_len : len, flags, (struct sockaddr *) &s_un, SUN_LEN(&s_un));
- break;
-
- case AF_INET:
- if (argc != 6) {
- WRONG_PARAM_COUNT;
- }
-
- memset(&sin, 0, sizeof(sin));
- sin.sin_family = AF_INET;
- sin.sin_port = htons((unsigned short) port);
-
- if (! php_set_inet_addr(&sin, addr, php_sock TSRMLS_CC)) {
- RETURN_FALSE;
- }
-
- retval = sendto(php_sock->bsd_socket, buf, (len > buf_len) ? buf_len : len, flags, (struct sockaddr *) &sin, sizeof(sin));
- break;
-#if HAVE_IPV6
- case AF_INET6:
- if (argc != 6) {
- WRONG_PARAM_COUNT;
- }
-
- memset(&sin6, 0, sizeof(sin6));
- sin6.sin6_family = AF_INET6;
- sin6.sin6_port = htons((unsigned short) port);
-
- if (! php_set_inet6_addr(&sin6, addr, php_sock TSRMLS_CC)) {
- RETURN_FALSE;
- }
-
- retval = sendto(php_sock->bsd_socket, buf, (len > buf_len) ? buf_len : len, flags, (struct sockaddr *) &sin, sizeof(sin));
- break;
-#endif
- default:
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unsupported socket type %d", php_sock->type);
- RETURN_FALSE;
- }
-
- if (retval == -1) {
- PHP_SOCKET_ERROR(php_sock, "unable to write to socket", errno);
- RETURN_FALSE;
- }
-
- RETURN_LONG(retval);
-}
-/* }}} */
-
-/* {{{ proto mixed socket_get_option(resource socket, int level, int optname)
- Gets socket options for the socket */
-PHP_FUNCTION(socket_get_option)
-{
- zval *arg1;
- struct linger linger_val;
- struct timeval tv;
- socklen_t optlen;
- php_socket *php_sock;
- int other_val;
- long level, optname;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rll", &arg1, &level, &optname) == FAILURE)
- return;
-
- ZEND_FETCH_RESOURCE(php_sock, php_socket *, &arg1, -1, le_socket_name, le_socket);
-
- switch(optname) {
- case SO_LINGER:
- optlen = sizeof(linger_val);
-
- if (getsockopt(php_sock->bsd_socket, level, optname, (char*)&linger_val, &optlen) != 0) {
- PHP_SOCKET_ERROR(php_sock, "unable to retrieve socket option", errno);
- RETURN_FALSE;
- }
-
- array_init(return_value);
-
- add_assoc_long(return_value, "l_onoff", linger_val.l_onoff);
- add_assoc_long(return_value, "l_linger", linger_val.l_linger);
-
- break;
- case SO_RCVTIMEO:
- case SO_SNDTIMEO:
- optlen = sizeof(tv);
-
- if (getsockopt(php_sock->bsd_socket, level, optname, (char*)&tv, &optlen) != 0) {
- PHP_SOCKET_ERROR(php_sock, "unable to retrieve socket option", errno);
- RETURN_FALSE;
- }
-
- array_init(return_value);
-
- add_assoc_long(return_value, "sec", tv.tv_sec);
- add_assoc_long(return_value, "usec", tv.tv_usec);
-
- break;
- default:
- optlen = sizeof(other_val);
-
- if (getsockopt(php_sock->bsd_socket, level, optname, (char*)&other_val, &optlen) != 0) {
- PHP_SOCKET_ERROR(php_sock, "unable to retrieve socket option", errno);
- RETURN_FALSE;
- }
-
- RETURN_LONG(other_val);
- break;
- }
-}
-/* }}} */
-
-/* {{{ proto bool socket_set_option(resource socket, int level, int optname, int|array optval)
- Sets socket options for the socket */
-PHP_FUNCTION(socket_set_option)
-{
- zval *arg1, *arg4;
- struct linger lv;
- struct timeval tv;
- php_socket *php_sock;
- int ov, optlen, retval;
- long level, optname;
- void *opt_ptr;
-
- HashTable *opt_ht;
- zval **l_onoff, **l_linger;
- zval **sec, **usec;
-
- /* key name constants */
- char *l_onoff_key = "l_onoff";
- char *l_linger_key = "l_linger";
- char *sec_key = "sec";
- char *usec_key = "usec";
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rllz", &arg1, &level, &optname, &arg4) == FAILURE)
- return;
-
- ZEND_FETCH_RESOURCE(php_sock, php_socket *, &arg1, -1, le_socket_name, le_socket);
-
- set_errno(0);
-
- switch (optname) {
- case SO_LINGER:
- convert_to_array_ex(&arg4);
- opt_ht = HASH_OF(arg4);
-
- if (zend_hash_find(opt_ht, l_onoff_key, strlen(l_onoff_key) + 1, (void **)&l_onoff) == FAILURE) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "no key \"%s\" passed in optval", l_onoff_key);
- RETURN_FALSE;
- }
- if (zend_hash_find(opt_ht, l_linger_key, strlen(l_linger_key) + 1, (void **)&l_linger) == FAILURE) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "no key \"%s\" passed in optval", l_linger_key);
- RETURN_FALSE;
- }
-
- convert_to_long_ex(l_onoff);
- convert_to_long_ex(l_linger);
-
- lv.l_onoff = (unsigned short)Z_LVAL_PP(l_onoff);
- lv.l_linger = (unsigned short)Z_LVAL_PP(l_linger);
-
- optlen = sizeof(lv);
- opt_ptr = &lv;
- break;
- case SO_RCVTIMEO:
- case SO_SNDTIMEO:
- convert_to_array_ex(&arg4);
- opt_ht = HASH_OF(arg4);
-
- if (zend_hash_find(opt_ht, sec_key, strlen(sec_key) + 1, (void **)&sec) == FAILURE) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "no key \"%s\" passed in optval", sec_key);
- RETURN_FALSE;
- }
- if (zend_hash_find(opt_ht, usec_key, strlen(usec_key) + 1, (void **)&usec) == FAILURE) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "no key \"%s\" passed in optval", usec_key);
- RETURN_FALSE;
- }
-
- convert_to_long_ex(sec);
- convert_to_long_ex(usec);
- tv.tv_sec = Z_LVAL_PP(sec);
- tv.tv_usec = Z_LVAL_PP(usec);
-
- optlen = sizeof(tv);
- opt_ptr = &tv;
- break;
- default:
- convert_to_long_ex(&arg4);
- ov = Z_LVAL_P(arg4);
-
- optlen = sizeof(ov);
- opt_ptr = &ov;
- break;
- }
-
- retval = setsockopt(php_sock->bsd_socket, level, optname, opt_ptr, optlen);
-
- if (retval != 0) {
- PHP_SOCKET_ERROR(php_sock, "unable to set socket option", errno);
- RETURN_FALSE;
- }
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto bool socket_create_pair(int domain, int type, int protocol, array &fd)
- Creates a pair of indistinguishable sockets and stores them in fds. */
-PHP_FUNCTION(socket_create_pair)
-{
- zval *retval[2], *fds_array_zval;
- php_socket *php_sock[2];
- PHP_SOCKET fds_array[2];
- long domain, type, protocol;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "lllz", &domain, &type, &protocol, &fds_array_zval) == FAILURE)
- return;
-
- php_sock[0] = (php_socket*)emalloc(sizeof(php_socket));
- php_sock[1] = (php_socket*)emalloc(sizeof(php_socket));
-
- if (domain != AF_INET
-#if HAVE_IPV6
- && domain != AF_INET6
-#endif
- && domain != AF_UNIX) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "invalid socket domain [%ld] specified for argument 1, assuming AF_INET", domain);
- domain = AF_INET;
- }
-
- if (type > 10) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "invalid socket type [%ld] specified for argument 2, assuming SOCK_STREAM", type);
- type = SOCK_STREAM;
- }
-
- if (socketpair(domain, type, protocol, fds_array) != 0) {
- SOCKETS_G(last_error) = errno;
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "unable to create socket pair [%d]: %s", errno, php_strerror(errno TSRMLS_CC));
- efree(php_sock[0]);
- efree(php_sock[1]);
- RETURN_FALSE;
- }
-
- zval_dtor(fds_array_zval);
- array_init(fds_array_zval);
-
- MAKE_STD_ZVAL(retval[0]);
- MAKE_STD_ZVAL(retval[1]);
-
- php_sock[0]->bsd_socket = fds_array[0];
- php_sock[1]->bsd_socket = fds_array[1];
- php_sock[0]->type = domain;
- php_sock[1]->type = domain;
-
- ZEND_REGISTER_RESOURCE(retval[0], php_sock[0], le_socket);
- ZEND_REGISTER_RESOURCE(retval[1], php_sock[1], le_socket);
-
- add_index_zval(fds_array_zval, 0, retval[0]);
- add_index_zval(fds_array_zval, 1, retval[1]);
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto bool socket_shutdown(resource socket[, int how])
- Shuts down a socket for receiving, sending, or both. */
-PHP_FUNCTION(socket_shutdown)
-{
- zval *arg1;
- long how_shutdown = 2;
- php_socket *php_sock;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r|l", &arg1, &how_shutdown) == FAILURE)
- return;
-
- ZEND_FETCH_RESOURCE(php_sock, php_socket*, &arg1, -1, le_socket_name, le_socket);
-
- if (shutdown(php_sock->bsd_socket, how_shutdown) != 0) {
- PHP_SOCKET_ERROR(php_sock, "unable to shutdown socket", errno);
- RETURN_FALSE;
- }
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto int socket_last_error([resource socket])
- Returns the last socket error (either the last used or the provided socket resource) */
-PHP_FUNCTION(socket_last_error)
-{
- zval *arg1 = NULL;
- php_socket *php_sock;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|r", &arg1) == FAILURE)
- return;
-
- if (arg1) {
- ZEND_FETCH_RESOURCE(php_sock, php_socket*, &arg1, -1, le_socket_name, le_socket);
- RETVAL_LONG(php_sock->error);
- } else {
- RETVAL_LONG(SOCKETS_G(last_error));
- }
-}
-/* }}} */
-
-/* {{{ proto void socket_clear_error([resource socket])
- Clears the error on the socket or the last error code. */
-PHP_FUNCTION(socket_clear_error)
-{
- zval *arg1 = NULL;
- php_socket *php_sock;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|r", &arg1) == FAILURE)
- return;
-
- if (arg1) {
- ZEND_FETCH_RESOURCE(php_sock, php_socket*, &arg1, -1, le_socket_name, le_socket);
- php_sock->error = 0;
- } else {
- SOCKETS_G(last_error) = 0;
- }
-
- return;
-}
-/* }}} */
-
-#endif
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- * vim600: fdm=marker
- * vim: noet sw=4 ts=4
- */
diff --git a/ext/sockets/sockets.dsp b/ext/sockets/sockets.dsp
deleted file mode 100644
index 961bab784d..0000000000
--- a/ext/sockets/sockets.dsp
+++ /dev/null
@@ -1,117 +0,0 @@
-# Microsoft Developer Studio Project File - Name="sockets" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=sockets - Win32 Debug_TS
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "sockets.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "sockets.mak" CFG="sockets - Win32 Debug_TS"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "sockets - Win32 Release_TS" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "sockets - Win32 Debug_TS" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "sockets - Win32 Release_TS"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release_TS"
-# PROP BASE Intermediate_Dir "Release_TS"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release_TS"
-# PROP Intermediate_Dir "Release_TS"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MD /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "SOCKETS_EXPORTS" /YX /FD /c
-# ADD CPP /nologo /MD /W3 /GX /O2 /I "..\.." /I "..\..\main" /I "..\..\Zend" /I "..\..\TSRM" /I "..\..\..\bindlib_w32" /D "WIN32" /D "PHP_EXPORTS" /D "COMPILE_DL_SOCKETS" /D ZTS=1 /D HAVE_SOCKETS=1 /D ZEND_DEBUG=0 /D "NDEBUG" /D "_WINDOWS" /D "ZEND_WIN32" /D "PHP_WIN32" /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x407 /d "NDEBUG"
-# ADD RSC /l 0x407 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386
-# ADD LINK32 php5ts.lib wsock32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 /out:"..\..\Release_TS/php_sockets.dll" /libpath:"..\..\Release_TS" /libpath:"..\..\Release_TS_Inline"
-# SUBTRACT LINK32 /debug
-
-!ELSEIF "$(CFG)" == "sockets - Win32 Debug_TS"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug_TS"
-# PROP BASE Intermediate_Dir "Debug_TS"
-# PROP BASE Ignore_Export_Lib 0
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug_TS"
-# PROP Intermediate_Dir "Debug_TS"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "SOCKETS_EXPORTS" /YX /FD /GZ /c
-# ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "..\.." /I "..\..\main" /I "..\..\Zend" /I "..\..\TSRM" /I "..\..\..\bindlib_w32" /D ZEND_DEBUG=1 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "PHP_EXPORTS" /D "COMPILE_DL_SOCKETS" /D ZTS=1 /D "ZEND_WIN32" /D "PHP_WIN32" /D HAVE_SOCKETS=1 /YX /FD /GZ /c
-# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x407 /d "_DEBUG"
-# ADD RSC /l 0x407 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 php5ts_debug.lib wsock32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /out:"..\..\Debug_TS/php_sockets.dll" /pdbtype:sept /libpath:"..\..\Debug_TS"
-
-!ENDIF
-
-# Begin Target
-
-# Name "sockets - Win32 Release_TS"
-# Name "sockets - Win32 Debug_TS"
-# Begin Group "Source Files"
-
-# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
-# Begin Source File
-
-SOURCE=.\php_sockets_win.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\sockets.c
-# End Source File
-# End Group
-# Begin Group "Header Files"
-
-# PROP Default_Filter "h;hpp;hxx;hm;inl"
-# Begin Source File
-
-SOURCE=.\php_sockets.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\php_sockets_win.h
-# End Source File
-# End Group
-# End Target
-# End Project
diff --git a/ext/sockets/sockets.php b/ext/sockets/sockets.php
deleted file mode 100644
index 3bb624cd57..0000000000
--- a/ext/sockets/sockets.php
+++ /dev/null
@@ -1,10 +0,0 @@
-<?
-$module = 'sockets';
-$function = 'confirm_' . $module . '_compiled';
-if (extension_loaded($module)) {
- $str = $function($module);
-} else {
- $str = "Module $module is not compiled in PHP";
-}
-echo "$str\n";
-?>
diff --git a/ext/sockets/tests/ipv4loop.phpt b/ext/sockets/tests/ipv4loop.phpt
deleted file mode 100644
index 7c6c0db31e..0000000000
--- a/ext/sockets/tests/ipv4loop.phpt
+++ /dev/null
@@ -1,49 +0,0 @@
---TEST--
-IPv4 Loopback test
---SKIPIF--
-<?php
- if (!extension_loaded('sockets')) {
- die('skip sockets extenion not available.');
- }
-?>
---FILE--
-<?php
- /* Setup socket server */
- $server = socket_create(AF_INET, SOCK_STREAM, getprotobyname('tcp'));
- if (!$server) {
- die('Unable to create AF_INET socket [server]');
- }
- if (!socket_bind($server, '127.0.0.1', 31337)) {
- die('Unable to bind to 127.0.0.1:31337');
- }
- if (!socket_listen($server, 2)) {
- die('Unable to listen on socket');
- }
-
- /* Connect to it */
- $client = socket_create(AF_INET, SOCK_STREAM, getprotobyname('tcp'));
- if (!$client) {
- die('Unable to create AF_INET socket [client]');
- }
- if (!socket_connect($client, '127.0.0.1', 31337)) {
- 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);
-?>
---EXPECT--
-string(10) "ABCdef123
-"
diff --git a/ext/sockets/tests/ipv6loop.phpt b/ext/sockets/tests/ipv6loop.phpt
deleted file mode 100644
index 1cd2148633..0000000000
--- a/ext/sockets/tests/ipv6loop.phpt
+++ /dev/null
@@ -1,52 +0,0 @@
---TEST--
-IPv6 Loopback test
---SKIPIF--
-<?php
- if (!extension_loaded('sockets')) {
- die('skip sockets extenion not available.');
- }
- if (!defined(AF_INET6)) {
- die('skip no IPv6 support');
- }
-?>
---FILE--
-<?php
- /* Setup socket server */
- $server = socket_create(AF_INET6, SOCK_STREAM, getprotobyname('tcp'));
- if (!$server) {
- die('Unable to create AF_INET6 socket [server]');
- }
- if (!socket_bind($server, '::1', 31337)) {
- die('Unable to bind to [::1]:31337');
- }
- if (!socket_listen($server, 2)) {
- die('Unable to listen on socket');
- }
-
- /* Connect to it */
- $client = socket_create(AF_INET6, SOCK_STREAM, getprotobyname('tcp'));
- if (!$client) {
- die('Unable to create AF_INET6 socket [client]');
- }
- if (!socket_connect($client, '::1', 31337)) {
- 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);
-?>
---EXPECT--
-string(10) "ABCdef123
-"
diff --git a/ext/sockets/unix_socket_constants.h b/ext/sockets/unix_socket_constants.h
deleted file mode 100644
index e34798b38e..0000000000
--- a/ext/sockets/unix_socket_constants.h
+++ /dev/null
@@ -1,426 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Jason Greene <jason@php.net> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-/* This file is to be included by sockets.c */
-
-#ifdef EPERM
- /* Operation not permitted */
- REGISTER_LONG_CONSTANT("SOCKET_EPERM", EPERM, CONST_CS | CONST_PERSISTENT);
-#endif
-#ifdef ENOENT
- /* No such file or directory */
- REGISTER_LONG_CONSTANT("SOCKET_ENOENT", ENOENT, CONST_CS | CONST_PERSISTENT);
-#endif
-#ifdef EINTR
- /* Interrupted system call */
- REGISTER_LONG_CONSTANT("SOCKET_EINTR", EINTR, CONST_CS | CONST_PERSISTENT);
-#endif
-#ifdef EIO
- /* I/O error */
- REGISTER_LONG_CONSTANT("SOCKET_EIO", EIO, CONST_CS | CONST_PERSISTENT);
-#endif
-#ifdef ENXIO
- /* No such device or address */
- REGISTER_LONG_CONSTANT("SOCKET_ENXIO", ENXIO, CONST_CS | CONST_PERSISTENT);
-#endif
-#ifdef E2BIG
- /* Arg list too long */
- REGISTER_LONG_CONSTANT("SOCKET_E2BIG", E2BIG, CONST_CS | CONST_PERSISTENT);
-#endif
-#ifdef EBADF
- /* Bad file number */
- REGISTER_LONG_CONSTANT("SOCKET_EBADF", EBADF, CONST_CS | CONST_PERSISTENT);
-#endif
-#ifdef EAGAIN
- /* Try again */
- REGISTER_LONG_CONSTANT("SOCKET_EAGAIN", EAGAIN, CONST_CS | CONST_PERSISTENT);
-#endif
-#ifdef ENOMEM
- /* Out of memory */
- REGISTER_LONG_CONSTANT("SOCKET_ENOMEM", ENOMEM, CONST_CS | CONST_PERSISTENT);
-#endif
-#ifdef EACCES
- /* Permission denied */
- REGISTER_LONG_CONSTANT("SOCKET_EACCES", EACCES, CONST_CS | CONST_PERSISTENT);
-#endif
-#ifdef EFAULT
- /* Bad address */
- REGISTER_LONG_CONSTANT("SOCKET_EFAULT", EFAULT, CONST_CS | CONST_PERSISTENT);
-#endif
-#ifdef ENOTBLK
- /* Block device required */
- REGISTER_LONG_CONSTANT("SOCKET_ENOTBLK", ENOTBLK, CONST_CS | CONST_PERSISTENT);
-#endif
-#ifdef EBUSY
- /* Device or resource busy */
- REGISTER_LONG_CONSTANT("SOCKET_EBUSY", EBUSY, CONST_CS | CONST_PERSISTENT);
-#endif
-#ifdef EEXIST
- /* File exists */
- REGISTER_LONG_CONSTANT("SOCKET_EEXIST", EEXIST, CONST_CS | CONST_PERSISTENT);
-#endif
-#ifdef EXDEV
- /* Cross-device link */
- REGISTER_LONG_CONSTANT("SOCKET_EXDEV", EXDEV, CONST_CS | CONST_PERSISTENT);
-#endif
-#ifdef ENODEV
- /* No such device */
- REGISTER_LONG_CONSTANT("SOCKET_ENODEV", ENODEV, CONST_CS | CONST_PERSISTENT);
-#endif
-#ifdef ENOTDIR
- /* Not a directory */
- REGISTER_LONG_CONSTANT("SOCKET_ENOTDIR", ENOTDIR, CONST_CS | CONST_PERSISTENT);
-#endif
-#ifdef EISDIR
- /* Is a directory */
- REGISTER_LONG_CONSTANT("SOCKET_EISDIR", EISDIR, CONST_CS | CONST_PERSISTENT);
-#endif
-#ifdef EINVAL
- /* Invalid argument */
- REGISTER_LONG_CONSTANT("SOCKET_EINVAL", EINVAL, CONST_CS | CONST_PERSISTENT);
-#endif
-#ifdef ENFILE
- /* File table overflow */
- REGISTER_LONG_CONSTANT("SOCKET_ENFILE", ENFILE, CONST_CS | CONST_PERSISTENT);
-#endif
-#ifdef EMFILE
- /* Too many open files */
- REGISTER_LONG_CONSTANT("SOCKET_EMFILE", EMFILE, CONST_CS | CONST_PERSISTENT);
-#endif
-#ifdef ENOTTY
- /* Not a typewriter */
- REGISTER_LONG_CONSTANT("SOCKET_ENOTTY", ENOTTY, CONST_CS | CONST_PERSISTENT);
-#endif
-#ifdef ENOSPC
- /* No space left on device */
- REGISTER_LONG_CONSTANT("SOCKET_ENOSPC", ENOSPC, CONST_CS | CONST_PERSISTENT);
-#endif
-#ifdef ESPIPE
- /* Illegal seek */
- REGISTER_LONG_CONSTANT("SOCKET_ESPIPE", ESPIPE, CONST_CS | CONST_PERSISTENT);
-#endif
-#ifdef EROFS
- /* Read-only file system */
- REGISTER_LONG_CONSTANT("SOCKET_EROFS", EROFS, CONST_CS | CONST_PERSISTENT);
-#endif
-#ifdef EMLINK
- /* Too many links */
- REGISTER_LONG_CONSTANT("SOCKET_EMLINK", EMLINK, CONST_CS | CONST_PERSISTENT);
-#endif
-#ifdef EPIPE
- /* Broken pipe */
- REGISTER_LONG_CONSTANT("SOCKET_EPIPE", EPIPE, CONST_CS | CONST_PERSISTENT);
-#endif
-#ifdef ENAMETOOLONG
- /* File name too long */
- REGISTER_LONG_CONSTANT("SOCKET_ENAMETOOLONG", ENAMETOOLONG, CONST_CS | CONST_PERSISTENT);
-#endif
-#ifdef ENOLCK
- /* No record locks available */
- REGISTER_LONG_CONSTANT("SOCKET_ENOLCK", ENOLCK, CONST_CS | CONST_PERSISTENT);
-#endif
-#ifdef ENOSYS
- /* Function not implemented */
- REGISTER_LONG_CONSTANT("SOCKET_ENOSYS", ENOSYS, CONST_CS | CONST_PERSISTENT);
-#endif
-#ifdef ENOTEMPTY
- /* Directory not empty */
- REGISTER_LONG_CONSTANT("SOCKET_ENOTEMPTY", ENOTEMPTY, CONST_CS | CONST_PERSISTENT);
-#endif
-#ifdef ELOOP
- /* Too many symbolic links encountered */
- REGISTER_LONG_CONSTANT("SOCKET_ELOOP", ELOOP, CONST_CS | CONST_PERSISTENT);
-#endif
-#ifdef EWOULDBLOCK
- /* Operation would block */
- REGISTER_LONG_CONSTANT("SOCKET_EWOULDBLOCK", EWOULDBLOCK, CONST_CS | CONST_PERSISTENT);
-#endif
-#ifdef ENOMSG
- /* No message of desired type */
- REGISTER_LONG_CONSTANT("SOCKET_ENOMSG", ENOMSG, CONST_CS | CONST_PERSISTENT);
-#endif
-#ifdef EIDRM
- /* Identifier removed */
- REGISTER_LONG_CONSTANT("SOCKET_EIDRM", EIDRM, CONST_CS | CONST_PERSISTENT);
-#endif
-#ifdef ECHRNG
- /* Channel number out of range */
- REGISTER_LONG_CONSTANT("SOCKET_ECHRNG", ECHRNG, CONST_CS | CONST_PERSISTENT);
-#endif
-#ifdef EL2NSYNC
- /* Level 2 not synchronized */
- REGISTER_LONG_CONSTANT("SOCKET_EL2NSYNC", EL2NSYNC, CONST_CS | CONST_PERSISTENT);
-#endif
-#ifdef EL3HLT
- /* Level 3 halted */
- REGISTER_LONG_CONSTANT("SOCKET_EL3HLT", EL3HLT, CONST_CS | CONST_PERSISTENT);
-#endif
-#ifdef EL3RST
- /* Level 3 reset */
- REGISTER_LONG_CONSTANT("SOCKET_EL3RST", EL3RST, CONST_CS | CONST_PERSISTENT);
-#endif
-#ifdef ELNRNG
- /* Link number out of range */
- REGISTER_LONG_CONSTANT("SOCKET_ELNRNG", ELNRNG, CONST_CS | CONST_PERSISTENT);
-#endif
-#ifdef EUNATCH
- /* Protocol driver not attached */
- REGISTER_LONG_CONSTANT("SOCKET_EUNATCH", EUNATCH, CONST_CS | CONST_PERSISTENT);
-#endif
-#ifdef ENOCSI
- /* No CSI structure available */
- REGISTER_LONG_CONSTANT("SOCKET_ENOCSI", ENOCSI, CONST_CS | CONST_PERSISTENT);
-#endif
-#ifdef EL2HLT
- /* Level 2 halted */
- REGISTER_LONG_CONSTANT("SOCKET_EL2HLT", EL2HLT, CONST_CS | CONST_PERSISTENT);
-#endif
-#ifdef EBADE
- /* Invalid exchange */
- REGISTER_LONG_CONSTANT("SOCKET_EBADE", EBADE, CONST_CS | CONST_PERSISTENT);
-#endif
-#ifdef EBADR
- /* Invalid request descriptor */
- REGISTER_LONG_CONSTANT("SOCKET_EBADR", EBADR, CONST_CS | CONST_PERSISTENT);
-#endif
-#ifdef EXFULL
- /* Exchange full */
- REGISTER_LONG_CONSTANT("SOCKET_EXFULL", EXFULL, CONST_CS | CONST_PERSISTENT);
-#endif
-#ifdef ENOANO
- /* No anode */
- REGISTER_LONG_CONSTANT("SOCKET_ENOANO", ENOANO, CONST_CS | CONST_PERSISTENT);
-#endif
-#ifdef EBADRQC
- /* Invalid request code */
- REGISTER_LONG_CONSTANT("SOCKET_EBADRQC", EBADRQC, CONST_CS | CONST_PERSISTENT);
-#endif
-#ifdef EBADSLT
- /* Invalid slot */
- REGISTER_LONG_CONSTANT("SOCKET_EBADSLT", EBADSLT, CONST_CS | CONST_PERSISTENT);
-#endif
-#ifdef ENOSTR
- /* Device not a stream */
- REGISTER_LONG_CONSTANT("SOCKET_ENOSTR", ENOSTR, CONST_CS | CONST_PERSISTENT);
-#endif
-#ifdef ENODATA
- /* No data available */
- REGISTER_LONG_CONSTANT("SOCKET_ENODATA", ENODATA, CONST_CS | CONST_PERSISTENT);
-#endif
-#ifdef ETIME
- /* Timer expired */
- REGISTER_LONG_CONSTANT("SOCKET_ETIME", ETIME, CONST_CS | CONST_PERSISTENT);
-#endif
-#ifdef ENOSR
- /* Out of streams resources */
- REGISTER_LONG_CONSTANT("SOCKET_ENOSR", ENOSR, CONST_CS | CONST_PERSISTENT);
-#endif
-#ifdef ENONET
- /* Machine is not on the network */
- REGISTER_LONG_CONSTANT("SOCKET_ENONET", ENONET, CONST_CS | CONST_PERSISTENT);
-#endif
-#ifdef EREMOTE
- /* Object is remote */
- REGISTER_LONG_CONSTANT("SOCKET_EREMOTE", EREMOTE, CONST_CS | CONST_PERSISTENT);
-#endif
-#ifdef ENOLINK
- /* Link has been severed */
- REGISTER_LONG_CONSTANT("SOCKET_ENOLINK", ENOLINK, CONST_CS | CONST_PERSISTENT);
-#endif
-#ifdef EADV
- /* Advertise error */
- REGISTER_LONG_CONSTANT("SOCKET_EADV", EADV, CONST_CS | CONST_PERSISTENT);
-#endif
-#ifdef ESRMNT
- /* Srmount error */
- REGISTER_LONG_CONSTANT("SOCKET_ESRMNT", ESRMNT, CONST_CS | CONST_PERSISTENT);
-#endif
-#ifdef ECOMM
- /* Communication error on send */
- REGISTER_LONG_CONSTANT("SOCKET_ECOMM", ECOMM, CONST_CS | CONST_PERSISTENT);
-#endif
-#ifdef EPROTO
- /* Protocol error */
- REGISTER_LONG_CONSTANT("SOCKET_EPROTO", EPROTO, CONST_CS | CONST_PERSISTENT);
-#endif
-#ifdef EMULTIHOP
- /* Multihop attempted */
- REGISTER_LONG_CONSTANT("SOCKET_EMULTIHOP", EMULTIHOP, CONST_CS | CONST_PERSISTENT);
-#endif
-#ifdef EBADMSG
- /* Not a data message */
- REGISTER_LONG_CONSTANT("SOCKET_EBADMSG", EBADMSG, CONST_CS | CONST_PERSISTENT);
-#endif
-#ifdef ENOTUNIQ
- /* Name not unique on network */
- REGISTER_LONG_CONSTANT("SOCKET_ENOTUNIQ", ENOTUNIQ, CONST_CS | CONST_PERSISTENT);
-#endif
-#ifdef EBADFD
- /* File descriptor in bad state */
- REGISTER_LONG_CONSTANT("SOCKET_EBADFD", EBADFD, CONST_CS | CONST_PERSISTENT);
-#endif
-#ifdef EREMCHG
- /* Remote address changed */
- REGISTER_LONG_CONSTANT("SOCKET_EREMCHG", EREMCHG, CONST_CS | CONST_PERSISTENT);
-#endif
-#ifdef ERESTART
- /* Interrupted system call should be restarted */
- REGISTER_LONG_CONSTANT("SOCKET_ERESTART", ERESTART, CONST_CS | CONST_PERSISTENT);
-#endif
-#ifdef ESTRPIPE
- /* Streams pipe error */
- REGISTER_LONG_CONSTANT("SOCKET_ESTRPIPE", ESTRPIPE, CONST_CS | CONST_PERSISTENT);
-#endif
-#ifdef EUSERS
- /* Too many users */
- REGISTER_LONG_CONSTANT("SOCKET_EUSERS", EUSERS, CONST_CS | CONST_PERSISTENT);
-#endif
-#ifdef ENOTSOCK
- /* Socket operation on non-socket */
- REGISTER_LONG_CONSTANT("SOCKET_ENOTSOCK", ENOTSOCK, CONST_CS | CONST_PERSISTENT);
-#endif
-#ifdef EDESTADDRREQ
- /* Destination address required */
- REGISTER_LONG_CONSTANT("SOCKET_EDESTADDRREQ", EDESTADDRREQ, CONST_CS | CONST_PERSISTENT);
-#endif
-#ifdef EMSGSIZE
- /* Message too long */
- REGISTER_LONG_CONSTANT("SOCKET_EMSGSIZE", EMSGSIZE, CONST_CS | CONST_PERSISTENT);
-#endif
-#ifdef EPROTOTYPE
- /* Protocol wrong type for socket */
- REGISTER_LONG_CONSTANT("SOCKET_EPROTOTYPE", EPROTOTYPE, CONST_CS | CONST_PERSISTENT);
-#endif
-#ifdef ENOPROTOOPT
- /* Protocol not available */
- REGISTER_LONG_CONSTANT("SOCKET_ENOPROTOOPT", ENOPROTOOPT, CONST_CS | CONST_PERSISTENT);
-#endif
-#ifdef EPROTONOSUPPORT
- /* Protocol not supported */
- REGISTER_LONG_CONSTANT("SOCKET_EPROTONOSUPPORT", EPROTONOSUPPORT, CONST_CS | CONST_PERSISTENT);
-#endif
-#ifdef ESOCKTNOSUPPORT
- /* Socket type not supported */
- REGISTER_LONG_CONSTANT("SOCKET_ESOCKTNOSUPPORT", ESOCKTNOSUPPORT, CONST_CS | CONST_PERSISTENT);
-#endif
-#ifdef EOPNOTSUPP
- /* Operation not supported on transport endpoint */
- REGISTER_LONG_CONSTANT("SOCKET_EOPNOTSUPP", EOPNOTSUPP, CONST_CS | CONST_PERSISTENT);
-#endif
-#ifdef EPFNOSUPPORT
- /* Protocol family not supported */
- REGISTER_LONG_CONSTANT("SOCKET_EPFNOSUPPORT", EPFNOSUPPORT, CONST_CS | CONST_PERSISTENT);
-#endif
-#ifdef EAFNOSUPPORT
- /* Address family not supported by protocol */
- REGISTER_LONG_CONSTANT("SOCKET_EAFNOSUPPORT", EAFNOSUPPORT, CONST_CS | CONST_PERSISTENT);
-#endif
-#ifdef EADDRINUSE
- /* Address already in use */
- REGISTER_LONG_CONSTANT("SOCKET_EADDRINUSE", EADDRINUSE, CONST_CS | CONST_PERSISTENT);
-#endif
-#ifdef EADDRNOTAVAIL
- /* Cannot assign requested address */
- REGISTER_LONG_CONSTANT("SOCKET_EADDRNOTAVAIL", EADDRNOTAVAIL, CONST_CS | CONST_PERSISTENT);
-#endif
-#ifdef ENETDOWN
- /* Network is down */
- REGISTER_LONG_CONSTANT("SOCKET_ENETDOWN", ENETDOWN, CONST_CS | CONST_PERSISTENT);
-#endif
-#ifdef ENETUNREACH
- /* Network is unreachable */
- REGISTER_LONG_CONSTANT("SOCKET_ENETUNREACH", ENETUNREACH, CONST_CS | CONST_PERSISTENT);
-#endif
-#ifdef ENETRESET
- /* Network dropped connection because of reset */
- REGISTER_LONG_CONSTANT("SOCKET_ENETRESET", ENETRESET, CONST_CS | CONST_PERSISTENT);
-#endif
-#ifdef ECONNABORTED
- /* Software caused connection abort */
- REGISTER_LONG_CONSTANT("SOCKET_ECONNABORTED", ECONNABORTED, CONST_CS | CONST_PERSISTENT);
-#endif
-#ifdef ECONNRESET
- /* Connection reset by peer */
- REGISTER_LONG_CONSTANT("SOCKET_ECONNRESET", ECONNRESET, CONST_CS | CONST_PERSISTENT);
-#endif
-#ifdef ENOBUFS
- /* No buffer space available */
- REGISTER_LONG_CONSTANT("SOCKET_ENOBUFS", ENOBUFS, CONST_CS | CONST_PERSISTENT);
-#endif
-#ifdef EISCONN
- /* Transport endpoint is already connected */
- REGISTER_LONG_CONSTANT("SOCKET_EISCONN", EISCONN, CONST_CS | CONST_PERSISTENT);
-#endif
-#ifdef ENOTCONN
- /* Transport endpoint is not connected */
- REGISTER_LONG_CONSTANT("SOCKET_ENOTCONN", ENOTCONN, CONST_CS | CONST_PERSISTENT);
-#endif
-#ifdef ESHUTDOWN
- /* Cannot send after transport endpoint shutdown */
- REGISTER_LONG_CONSTANT("SOCKET_ESHUTDOWN", ESHUTDOWN, CONST_CS | CONST_PERSISTENT);
-#endif
-#ifdef ETOOMANYREFS
- /* Too many references: cannot splice */
- REGISTER_LONG_CONSTANT("SOCKET_ETOOMANYREFS", ETOOMANYREFS, CONST_CS | CONST_PERSISTENT);
-#endif
-#ifdef ETIMEDOUT
- /* Connection timed out */
- REGISTER_LONG_CONSTANT("SOCKET_ETIMEDOUT", ETIMEDOUT, CONST_CS | CONST_PERSISTENT);
-#endif
-#ifdef ECONNREFUSED
- /* Connection refused */
- REGISTER_LONG_CONSTANT("SOCKET_ECONNREFUSED", ECONNREFUSED, CONST_CS | CONST_PERSISTENT);
-#endif
-#ifdef EHOSTDOWN
- /* Host is down */
- REGISTER_LONG_CONSTANT("SOCKET_EHOSTDOWN", EHOSTDOWN, CONST_CS | CONST_PERSISTENT);
-#endif
-#ifdef EHOSTUNREACH
- /* No route to host */
- REGISTER_LONG_CONSTANT("SOCKET_EHOSTUNREACH", EHOSTUNREACH, CONST_CS | CONST_PERSISTENT);
-#endif
-#ifdef EALREADY
- /* Operation already in progress */
- REGISTER_LONG_CONSTANT("SOCKET_EALREADY", EALREADY, CONST_CS | CONST_PERSISTENT);
-#endif
-#ifdef EINPROGRESS
- /* Operation now in progress */
- REGISTER_LONG_CONSTANT("SOCKET_EINPROGRESS", EINPROGRESS, CONST_CS | CONST_PERSISTENT);
-#endif
-#ifdef EISNAM
- /* Is a named type file */
- REGISTER_LONG_CONSTANT("SOCKET_EISNAM", EISNAM, CONST_CS | CONST_PERSISTENT);
-#endif
-#ifdef EREMOTEIO
- /* Remote I/O error */
- REGISTER_LONG_CONSTANT("SOCKET_EREMOTEIO", EREMOTEIO, CONST_CS | CONST_PERSISTENT);
-#endif
-#ifdef EDQUOT
- /* Quota exceeded */
- REGISTER_LONG_CONSTANT("SOCKET_EDQUOT", EDQUOT, CONST_CS | CONST_PERSISTENT);
-#endif
-#ifdef ENOMEDIUM
- /* No medium found */
- REGISTER_LONG_CONSTANT("SOCKET_ENOMEDIUM", ENOMEDIUM, CONST_CS | CONST_PERSISTENT);
-#endif
-#ifdef EMEDIUMTYPE
- /* Wrong medium type */
- REGISTER_LONG_CONSTANT("SOCKET_EMEDIUMTYPE", EMEDIUMTYPE, CONST_CS | CONST_PERSISTENT);
-#endif
diff --git a/ext/sockets/win32_socket_constants.h b/ext/sockets/win32_socket_constants.h
deleted file mode 100644
index 6770b6bcd1..0000000000
--- a/ext/sockets/win32_socket_constants.h
+++ /dev/null
@@ -1,74 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Jason Greene <jason@php.net> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-/* This file is to be included by sockets.c */
-
-REGISTER_LONG_CONSTANT("SOCKET_EINTR", WSAEINTR, CONST_CS | CONST_PERSISTENT);
-REGISTER_LONG_CONSTANT("SOCKET_EBADF", WSAEBADF, CONST_CS | CONST_PERSISTENT);
-REGISTER_LONG_CONSTANT("SOCKET_EACCES", WSAEACCES, CONST_CS | CONST_PERSISTENT);
-REGISTER_LONG_CONSTANT("SOCKET_EFAULT", WSAEFAULT, CONST_CS | CONST_PERSISTENT);
-REGISTER_LONG_CONSTANT("SOCKET_EINVAL", WSAEINVAL, CONST_CS | CONST_PERSISTENT);
-REGISTER_LONG_CONSTANT("SOCKET_EMFILE", WSAEMFILE, CONST_CS | CONST_PERSISTENT);
-REGISTER_LONG_CONSTANT("SOCKET_EWOULDBLOCK", WSAEWOULDBLOCK, CONST_CS | CONST_PERSISTENT);
-REGISTER_LONG_CONSTANT("SOCKET_EINPROGRESS", WSAEINPROGRESS, CONST_CS | CONST_PERSISTENT);
-REGISTER_LONG_CONSTANT("SOCKET_EALREADY", WSAEALREADY, CONST_CS | CONST_PERSISTENT);
-REGISTER_LONG_CONSTANT("SOCKET_ENOTSOCK", WSAENOTSOCK, CONST_CS | CONST_PERSISTENT);
-REGISTER_LONG_CONSTANT("SOCKET_EDESTADDRREQ", WSAEDESTADDRREQ, CONST_CS | CONST_PERSISTENT);
-REGISTER_LONG_CONSTANT("SOCKET_EMSGSIZE", WSAEMSGSIZE, CONST_CS | CONST_PERSISTENT);
-REGISTER_LONG_CONSTANT("SOCKET_EPROTOTYPE", WSAEPROTOTYPE, CONST_CS | CONST_PERSISTENT);
-REGISTER_LONG_CONSTANT("SOCKET_ENOPROTOOPT", WSAENOPROTOOPT, CONST_CS | CONST_PERSISTENT);
-REGISTER_LONG_CONSTANT("SOCKET_EPROTONOSUPPORT", WSAEPROTONOSUPPORT, CONST_CS | CONST_PERSISTENT);
-REGISTER_LONG_CONSTANT("SOCKET_ESOCKTNOSUPPORT", WSAESOCKTNOSUPPORT, CONST_CS | CONST_PERSISTENT);
-REGISTER_LONG_CONSTANT("SOCKET_EOPNOTSUPP", WSAEOPNOTSUPP, CONST_CS | CONST_PERSISTENT);
-REGISTER_LONG_CONSTANT("SOCKET_EPFNOSUPPORT", WSAEPFNOSUPPORT, CONST_CS | CONST_PERSISTENT);
-REGISTER_LONG_CONSTANT("SOCKET_EAFNOSUPPORT", WSAEAFNOSUPPORT, CONST_CS | CONST_PERSISTENT);
-REGISTER_LONG_CONSTANT("SOCKET_EADDRINUSE", WSAEADDRINUSE, CONST_CS | CONST_PERSISTENT);
-REGISTER_LONG_CONSTANT("SOCKET_EADDRNOTAVAIL", WSAEADDRNOTAVAIL, CONST_CS | CONST_PERSISTENT);
-REGISTER_LONG_CONSTANT("SOCKET_ENETDOWN", WSAENETDOWN, CONST_CS | CONST_PERSISTENT);
-REGISTER_LONG_CONSTANT("SOCKET_ENETUNREACH", WSAENETUNREACH, CONST_CS | CONST_PERSISTENT);
-REGISTER_LONG_CONSTANT("SOCKET_ENETRESET", WSAENETRESET, CONST_CS | CONST_PERSISTENT);
-REGISTER_LONG_CONSTANT("SOCKET_ECONNABORTED", WSAECONNABORTED, CONST_CS | CONST_PERSISTENT);
-REGISTER_LONG_CONSTANT("SOCKET_ECONNRESET", WSAECONNRESET, CONST_CS | CONST_PERSISTENT);
-REGISTER_LONG_CONSTANT("SOCKET_ENOBUFS", WSAENOBUFS, CONST_CS | CONST_PERSISTENT);
-REGISTER_LONG_CONSTANT("SOCKET_EISCONN", WSAEISCONN, CONST_CS | CONST_PERSISTENT);
-REGISTER_LONG_CONSTANT("SOCKET_ENOTCONN", WSAENOTCONN, CONST_CS | CONST_PERSISTENT);
-REGISTER_LONG_CONSTANT("SOCKET_ESHUTDOWN", WSAESHUTDOWN, CONST_CS | CONST_PERSISTENT);
-REGISTER_LONG_CONSTANT("SOCKET_ETOOMANYREFS", WSAETOOMANYREFS, CONST_CS | CONST_PERSISTENT);
-REGISTER_LONG_CONSTANT("SOCKET_ETIMEDOUT", WSAETIMEDOUT, CONST_CS | CONST_PERSISTENT);
-REGISTER_LONG_CONSTANT("SOCKET_ECONNREFUSED", WSAECONNREFUSED, CONST_CS | CONST_PERSISTENT);
-REGISTER_LONG_CONSTANT("SOCKET_ELOOP", WSAELOOP, CONST_CS | CONST_PERSISTENT);
-REGISTER_LONG_CONSTANT("SOCKET_ENAMETOOLONG", WSAENAMETOOLONG, CONST_CS | CONST_PERSISTENT);
-REGISTER_LONG_CONSTANT("SOCKET_EHOSTDOWN", WSAEHOSTDOWN, CONST_CS | CONST_PERSISTENT);
-REGISTER_LONG_CONSTANT("SOCKET_EHOSTUNREACH", WSAEHOSTUNREACH, CONST_CS | CONST_PERSISTENT);
-REGISTER_LONG_CONSTANT("SOCKET_ENOTEMPTY", WSAENOTEMPTY, CONST_CS | CONST_PERSISTENT);
-REGISTER_LONG_CONSTANT("SOCKET_EPROCLIM", WSAEPROCLIM, CONST_CS | CONST_PERSISTENT);
-REGISTER_LONG_CONSTANT("SOCKET_EUSERS", WSAEUSERS, CONST_CS | CONST_PERSISTENT);
-REGISTER_LONG_CONSTANT("SOCKET_EDQUOT", WSAEDQUOT, CONST_CS | CONST_PERSISTENT);
-REGISTER_LONG_CONSTANT("SOCKET_ESTALE", WSAESTALE, CONST_CS | CONST_PERSISTENT);
-REGISTER_LONG_CONSTANT("SOCKET_EREMOTE", WSAEREMOTE, CONST_CS | CONST_PERSISTENT);
-REGISTER_LONG_CONSTANT("SOCKET_EDISCON", WSAEDISCON, CONST_CS | CONST_PERSISTENT);
-REGISTER_LONG_CONSTANT("SOCKET_SYSNOTREADY", WSASYSNOTREADY, CONST_CS | CONST_PERSISTENT);
-REGISTER_LONG_CONSTANT("SOCKET_VERNOTSUPPORTED", WSAVERNOTSUPPORTED, CONST_CS | CONST_PERSISTENT);
-REGISTER_LONG_CONSTANT("SOCKET_NOTINITIALISED", WSANOTINITIALISED, CONST_CS | CONST_PERSISTENT);
-REGISTER_LONG_CONSTANT("SOCKET_HOST_NOT_FOUND", WSAHOST_NOT_FOUND, CONST_CS | CONST_PERSISTENT);
-REGISTER_LONG_CONSTANT("SOCKET_TRY_AGAIN", WSATRY_AGAIN, CONST_CS | CONST_PERSISTENT);
-REGISTER_LONG_CONSTANT("SOCKET_NO_RECOVERY", WSANO_RECOVERY, CONST_CS | CONST_PERSISTENT);
-REGISTER_LONG_CONSTANT("SOCKET_NO_DATA", WSANO_DATA, CONST_CS | CONST_PERSISTENT);
-REGISTER_LONG_CONSTANT("SOCKET_NO_ADDRESS", WSANO_ADDRESS, CONST_CS | CONST_PERSISTENT);
diff --git a/ext/spl/CREDITS b/ext/spl/CREDITS
deleted file mode 100755
index 8710aac550..0000000000
--- a/ext/spl/CREDITS
+++ /dev/null
@@ -1,2 +0,0 @@
-SPL
-Marcus Boerger
diff --git a/ext/spl/README b/ext/spl/README
deleted file mode 100755
index 7806b0f560..0000000000
--- a/ext/spl/README
+++ /dev/null
@@ -1,50 +0,0 @@
-This is an extension that aims to implement some efficient data access
-interfaces and classes. You'll find the classes documented using php
-code in the file spl.php or in the corresponding .inc file in the examples
-subdirectory. Based on the internal implementations or the files in the
-examples subdirectory there are also some .php files to experiment with.
-
-The .inc files are not included automatically because they are sooner or
-later integrated into the extension. That means that you either need to
-put the code of examples/autoload into your autoprepend file or that you
-have to point your ini setting auto_prepend_file to this file.
-
-Below is a list of interfaces/classes already availabel natively through
-the SPL extension grouped by category. For more information refer to the
-docuement spl.php.
-
-1) Iterators
-
-SPL offers some advanced iterator algorithms:
-
-interface RecursiveIterator implements Iterator
-class RecursiveIteratorIterator implements Iterator
-abstract class FilterIterator implements Iterator
-class ParentIterator extends FilterIterator implements RecursiveIterator
-interface SeekableIterator implements Iterator
-class LimitIterator implements Iterator
-class CachingIterator implements Iterator
-class CachingRecursiveIterator extends CachingIterator implements RecursiveIterator
-
-2) Directories
-
-SPL offers two advanced directory classes:
-
-class DirectoryIterator implements Iterator
-class RecursiveDirectoryIterator extends DirectoryIterator implements RecursiveIterator
-
-3) XML
-
-SPL offers an advanced XML handling class:
-
-class SimpleXMLIterator extends simplexml_element extends recursiveiterator
-
-4) Array Overloading
-
-SPL offers advanced Array overloading:
-
-class ArrayObject implements IteratorAggregate
-class ArrayIterator implements Iterator
-
-As the above suggest an ArrayObject creates an ArrayIterator when it comes to
-iteration (e.g. ArrayObject instance used inside foreach).
diff --git a/ext/spl/TODO b/ext/spl/TODO
deleted file mode 100755
index 68b00da6a5..0000000000
--- a/ext/spl/TODO
+++ /dev/null
@@ -1,4 +0,0 @@
-This is the ToDo of ext/spl:
-
-Implement the classes/interfaces from the .inc files in
-directory examples. \ No newline at end of file
diff --git a/ext/spl/config.m4 b/ext/spl/config.m4
deleted file mode 100755
index f5b5639ddf..0000000000
--- a/ext/spl/config.m4
+++ /dev/null
@@ -1,14 +0,0 @@
-dnl $Id$
-dnl config.m4 for extension SPL
-
-PHP_ARG_ENABLE(spl, enable SPL suppport,
-[ --disable-spl Disable Standard PHP Library], yes)
-
-if test "$PHP_SPL" != "no"; then
- if test "$ext_shared" = "yes"; then
- AC_MSG_ERROR(Cannot build SPL as a shared module)
- fi
- AC_DEFINE(HAVE_SPL, 1, [Whether you want SPL (Standard PHP Library) support])
- PHP_NEW_EXTENSION(spl, php_spl.c spl_functions.c spl_engine.c spl_iterators.c spl_array.c spl_directory.c spl_sxe.c, $ext_shared)
- PHP_ADD_EXTENSION_DEP(spl, simplexml)
-fi
diff --git a/ext/spl/config.w32 b/ext/spl/config.w32
deleted file mode 100644
index d69471a717..0000000000
--- a/ext/spl/config.w32
+++ /dev/null
@@ -1,12 +0,0 @@
-// $Id$
-// vim:ft=javascript
-
-ARG_ENABLE("spl", "SPL (Standard PHP Library) support", "yes");
-
-if (PHP_SPL != "no") {
- if (PHP_SPL_SHARED) {
- ERROR("SPL cannot be compiled as a shared ext");
- }
- EXTENSION("spl", "php_spl.c spl_functions.c spl_engine.c spl_iterators.c spl_array.c spl_directory.c spl_sxe.c");
- AC_DEFINE('HAVE_SPL', 1);
-}
diff --git a/ext/spl/doxygen.cfg b/ext/spl/doxygen.cfg
deleted file mode 100755
index 6f8eda9bd1..0000000000
--- a/ext/spl/doxygen.cfg
+++ /dev/null
@@ -1,209 +0,0 @@
-# Doxyfile 1.3.6
-
-#---------------------------------------------------------------------------
-# Project related configuration options
-#---------------------------------------------------------------------------
-PROJECT_NAME = SPL - Standard PHP Library
-PROJECT_NUMBER =
-OUTPUT_DIRECTORY =
-OUTPUT_LANGUAGE = English
-USE_WINDOWS_ENCODING = YES
-BRIEF_MEMBER_DESC = YES
-REPEAT_BRIEF = YES
-ABBREVIATE_BRIEF =
-ALWAYS_DETAILED_SEC = NO
-INLINE_INHERITED_MEMB = NO
-FULL_PATH_NAMES = NO
-STRIP_FROM_PATH =
-SHORT_NAMES = NO
-JAVADOC_AUTOBRIEF = YES
-MULTILINE_CPP_IS_BRIEF = YES
-DETAILS_AT_TOP = NO
-INHERIT_DOCS = YES
-DISTRIBUTE_GROUP_DOC = NO
-TAB_SIZE = 8
-ALIASES =
-OPTIMIZE_OUTPUT_FOR_C = NO
-OPTIMIZE_OUTPUT_JAVA = NO
-SUBGROUPING = YES
-#---------------------------------------------------------------------------
-# Build related configuration options
-#---------------------------------------------------------------------------
-EXTRACT_ALL = YES
-EXTRACT_PRIVATE = YES
-EXTRACT_STATIC = YES
-EXTRACT_LOCAL_CLASSES = YES
-HIDE_UNDOC_MEMBERS = NO
-HIDE_UNDOC_CLASSES = NO
-HIDE_FRIEND_COMPOUNDS = NO
-HIDE_IN_BODY_DOCS = NO
-INTERNAL_DOCS = YES
-CASE_SENSE_NAMES = YES
-HIDE_SCOPE_NAMES = NO
-SHOW_INCLUDE_FILES = YES
-INLINE_INFO = YES
-SORT_MEMBER_DOCS = YES
-SORT_BRIEF_DOCS = YES
-SORT_BY_SCOPE_NAME = NO
-GENERATE_TODOLIST = YES
-GENERATE_TESTLIST = YES
-GENERATE_BUGLIST = YES
-GENERATE_DEPRECATEDLIST= YES
-ENABLED_SECTIONS =
-MAX_INITIALIZER_LINES = 30
-SHOW_USED_FILES = YES
-#---------------------------------------------------------------------------
-# configuration options related to warning and progress messages
-#---------------------------------------------------------------------------
-QUIET = NO
-WARNINGS = YES
-WARN_IF_UNDOCUMENTED = YES
-WARN_IF_DOC_ERROR = YES
-WARN_FORMAT = "$file:$line: $text"
-WARN_LOGFILE =
-#---------------------------------------------------------------------------
-# configuration options related to the input files
-#---------------------------------------------------------------------------
-INPUT = spl.php examples
-FILE_PATTERNS = *.inc *.php
-RECURSIVE = NO
-EXCLUDE =
-EXCLUDE_SYMLINKS = NO
-EXCLUDE_PATTERNS =
-EXAMPLE_PATH =
-EXAMPLE_PATTERNS =
-EXAMPLE_RECURSIVE = NO
-IMAGE_PATH =
-INPUT_FILTER =
-FILTER_SOURCE_FILES = NO
-#---------------------------------------------------------------------------
-# configuration options related to source browsing
-#---------------------------------------------------------------------------
-SOURCE_BROWSER = NO
-INLINE_SOURCES = NO
-STRIP_CODE_COMMENTS = YES
-REFERENCED_BY_RELATION = YES
-REFERENCES_RELATION = YES
-VERBATIM_HEADERS = YES
-#---------------------------------------------------------------------------
-# configuration options related to the alphabetical class index
-#---------------------------------------------------------------------------
-ALPHABETICAL_INDEX = NO
-COLS_IN_ALPHA_INDEX = 5
-IGNORE_PREFIX =
-#---------------------------------------------------------------------------
-# configuration options related to the HTML output
-#---------------------------------------------------------------------------
-GENERATE_HTML = YES
-HTML_OUTPUT = html
-HTML_FILE_EXTENSION = .html
-HTML_HEADER =
-HTML_FOOTER =
-HTML_STYLESHEET =
-HTML_ALIGN_MEMBERS = YES
-GENERATE_HTMLHELP = YES
-CHM_FILE = ../spl.chm
-HHC_LOCATION = hhc.exe
-GENERATE_CHI = NO
-BINARY_TOC = NO
-TOC_EXPAND = NO
-DISABLE_INDEX = NO
-ENUM_VALUES_PER_LINE = 4
-GENERATE_TREEVIEW = NO
-TREEVIEW_WIDTH = 250
-#---------------------------------------------------------------------------
-# configuration options related to the LaTeX output
-#---------------------------------------------------------------------------
-GENERATE_LATEX = NO
-LATEX_OUTPUT = latex
-LATEX_CMD_NAME = latex
-MAKEINDEX_CMD_NAME = makeindex
-COMPACT_LATEX = NO
-PAPER_TYPE = a4wide
-EXTRA_PACKAGES =
-LATEX_HEADER =
-PDF_HYPERLINKS = NO
-USE_PDFLATEX = NO
-LATEX_BATCHMODE = NO
-LATEX_HIDE_INDICES = NO
-#---------------------------------------------------------------------------
-# configuration options related to the RTF output
-#---------------------------------------------------------------------------
-GENERATE_RTF = NO
-RTF_OUTPUT = rtf
-COMPACT_RTF = NO
-RTF_HYPERLINKS = NO
-RTF_STYLESHEET_FILE =
-RTF_EXTENSIONS_FILE =
-#---------------------------------------------------------------------------
-# configuration options related to the man page output
-#---------------------------------------------------------------------------
-GENERATE_MAN = NO
-MAN_OUTPUT = man
-MAN_EXTENSION = .3
-MAN_LINKS = NO
-#---------------------------------------------------------------------------
-# configuration options related to the XML output
-#---------------------------------------------------------------------------
-GENERATE_XML = YES
-XML_OUTPUT = xml
-XML_SCHEMA =
-XML_DTD =
-XML_PROGRAMLISTING = YES
-#---------------------------------------------------------------------------
-# configuration options for the AutoGen Definitions output
-#---------------------------------------------------------------------------
-GENERATE_AUTOGEN_DEF = NO
-#---------------------------------------------------------------------------
-# configuration options related to the Perl module output
-#---------------------------------------------------------------------------
-GENERATE_PERLMOD = NO
-PERLMOD_LATEX = NO
-PERLMOD_PRETTY = YES
-PERLMOD_MAKEVAR_PREFIX =
-#---------------------------------------------------------------------------
-# Configuration options related to the preprocessor
-#---------------------------------------------------------------------------
-ENABLE_PREPROCESSING = YES
-MACRO_EXPANSION = NO
-EXPAND_ONLY_PREDEF = NO
-SEARCH_INCLUDES = YES
-INCLUDE_PATH =
-INCLUDE_FILE_PATTERNS =
-PREDEFINED =
-EXPAND_AS_DEFINED =
-SKIP_FUNCTION_MACROS = YES
-#---------------------------------------------------------------------------
-# Configuration::additions related to external references
-#---------------------------------------------------------------------------
-TAGFILES =
-GENERATE_TAGFILE =
-ALLEXTERNALS = NO
-EXTERNAL_GROUPS = YES
-PERL_PATH = /usr/bin/perl
-#---------------------------------------------------------------------------
-# Configuration options related to the dot tool
-#---------------------------------------------------------------------------
-CLASS_DIAGRAMS = YES
-HIDE_UNDOC_RELATIONS = YES
-HAVE_DOT = NO
-CLASS_GRAPH = YES
-COLLABORATION_GRAPH = YES
-UML_LOOK = NO
-TEMPLATE_RELATIONS = NO
-INCLUDE_GRAPH = YES
-INCLUDED_BY_GRAPH = YES
-CALL_GRAPH = NO
-GRAPHICAL_HIERARCHY = YES
-DOT_IMAGE_FORMAT = png
-DOT_PATH =
-DOTFILE_DIRS =
-MAX_DOT_GRAPH_WIDTH = 1024
-MAX_DOT_GRAPH_HEIGHT = 1024
-MAX_DOT_GRAPH_DEPTH = 0
-GENERATE_LEGEND = YES
-DOT_CLEANUP = YES
-#---------------------------------------------------------------------------
-# Configuration::additions related to the search engine
-#---------------------------------------------------------------------------
-SEARCHENGINE = NO
diff --git a/ext/spl/examples/appenditerator.inc b/ext/spl/examples/appenditerator.inc
deleted file mode 100755
index d2d5c8dd0b..0000000000
--- a/ext/spl/examples/appenditerator.inc
+++ /dev/null
@@ -1,116 +0,0 @@
-<?php
-
-/** @file appenditerator.inc
- * @ingroup Examples
- * @brief class AppendIterator
- * @author Marcus Boerger
- * @date 2003 - 2004
- *
- * SPL - Standard PHP Library
- */
-
-/** @ingroup Examples
- * @brief Iterator that iterates over several iterators one after the other
- * @author Marcus Boerger
- * @version 1.0
- */
-class AppendIterator implements Iterator
-{
- /** @internal array of inner iterators */
- private $iterators;
-
- /** Construct an empty AppendIterator
- */
- function __construct()
- {
- $this->iterators = new ArrayIterator();
- }
-
- /** Append an Iterator
- * @param $it Iterator to append
- */
- function append(Iterator $it)
- {
- $this->iterators->append($it);
- }
-
- /** @return the current inner Iterator
- */
- function getInnerIterator()
- {
- return $this->iterators->current();
- }
-
- /** Rewind to the first element of the first inner Iterator.
- * @return void
- */
- function rewind()
- {
- $this->iterators->rewind();
- if ($this->iterators->valid())
- {
- $this->getInnerIterator()->rewind();
- }
- }
-
- /** @return whether the current element is valid
- */
- function valid()
- {
- return $this->iterators->valid() && $this->getInnerIterator()->valid();
- }
-
- /** @return the current value if it is valid or \c NULL
- */
- function current()
- {
- /* Using $this->valid() would be exactly the same; it would omit
- * the access to a non valid element in the inner iterator. Since
- * the user didn't respect the valid() return value false this
- * must be intended hence we go on. */
- return $this->iterators->valid() ? $this->getInnerIterator()->current() : NULL;
- }
-
- /** @return the current key if it is valid or \c NULL
- */
- function key()
- {
- return $this->iterators->valid() ? $this->getInnerIterator()->key() : NULL;
- }
-
- /** Move to the next element. If this means to another Iterator that
- * rewind that Iterator.
- * @return void
- */
- function next()
- {
- if (!$this->iterators->valid())
- {
- return; /* done all */
- }
- $this->getInnerIterator()->next();
- if ($this->getInnerIterator()->valid())
- {
- return; /* found valid element in current inner iterator */
- }
- $this->iterators->next();
- while ($this->iterators->valid())
- {
- $this->getInnerIterator()->rewind();
- if ($this->getInnerIterator()->valid())
- {
- return; /* found element as first elemet in another iterator */
- }
- $this->iterators->next();
- }
- }
-
- /** Aggregates the inner iterator
- */
- function __call($func, $params)
- {
- return call_user_func_array(array($this->getInnerIterator(), $func), $params);
- }
-}
-
-?> \ No newline at end of file
diff --git a/ext/spl/examples/autoload.inc b/ext/spl/examples/autoload.inc
deleted file mode 100755
index 7fecfa5758..0000000000
--- a/ext/spl/examples/autoload.inc
+++ /dev/null
@@ -1,50 +0,0 @@
-<?php
-
-/** @file autoload.inc
- * @ingroup Examples
- * @brief function __autoload
- * @author Marcus Boerger
- * @date 2003 - 2004
- *
- * SPL - Standard PHP Library
- */
-
-/** \internal
- * Tries to load class $classname from directory $dir.
- */
-function __load_class($classname, $dir)
-{
- $file = $dir . '/' . $classname . '.inc';
- if (file_exists($file))
- {
- require_once($file);
- return true;
- }
- return false;
-}
-
-/**
- * @brief Class loader for SPL example classes
- * @author Marcus Boerger
- * @version 1.0
- *
- * Loads classes automatically from include_path as given by ini or from
- * current directory of script or include file.
- */
-function __autoload($classname) {
- $classname = strtolower($classname);
- $inc = split(':', ini_get('include_path'));
- $inc[] = '.';
- $inc[] = dirname($_SERVER['PATH_TRANSLATED']);
- foreach($inc as $dir)
- {
- if (__load_class($classname, $dir))
- {
- fprintf(STDERR, 'Loading class('.$classname.")\n");
- return;
- }
- }
- fprintf(STDERR, 'Class not found ('.$classname.")\n");
-}
-
-?> \ No newline at end of file
diff --git a/ext/spl/examples/dba_array.php b/ext/spl/examples/dba_array.php
deleted file mode 100755
index dfdaf8fb75..0000000000
--- a/ext/spl/examples/dba_array.php
+++ /dev/null
@@ -1,52 +0,0 @@
-<?php
-
-/** @file dba_array.php
- * @brief Program DBA array utility
- * @ingroup Examples
- * @author Marcus Boerger
- * @date 2003 - 2004
- *
- * Usage php dba_array.php \<file\> \<handler\> \<key\> [\<value\>]
- *
- * If \<value\> is specified then \<key\> is set to \<value\> in \<file\>.
- * Else the value of \<key\> is printed only.
- *
- * Note: configure with --enable-dba
- */
-
-if ($argc < 4) {
- echo <<<EOF
-Usage: php ${_SERVER['PHP_SELF']} <file> <handler> <key> [<value>]
-
-If <value> is specified then <key> is set to <value> in <file>.
-Else the value of <key> is printed only.
-
-
-EOF;
- exit(1);
-}
-
-if (!class_exists("DbaReader", false)) require_once("dbareader.inc");
-
-try {
- if ($argc > 2) {
- $dba = new DbaArray($argv[1], $argv[2]);
- if ($dba && $argc > 3) {
- if ($argc > 4) {
- $dba[$argv[3]] = $argv[4];
- }
- var_dump(array('Index' => $argv[3], 'Value' => $dba[$argv[3]]));
- }
- unset($dba);
- }
- else
- {
- echo "Not enough parameters\n";
- exit(1);
- }
-}
-catch (exception $err) {
- var_dump($err);
- exit(1);
-}
-?> \ No newline at end of file
diff --git a/ext/spl/examples/dba_dump.php b/ext/spl/examples/dba_dump.php
deleted file mode 100755
index 7121babac6..0000000000
--- a/ext/spl/examples/dba_dump.php
+++ /dev/null
@@ -1,42 +0,0 @@
-<?php
-
-/** @file dba_dump.php
- * @brief Program DBA dump utility
- * @ingroup Examples
- * @author Marcus Boerger
- * @date 2003 - 2004
- *
- * Usage: php dba_dump.php \<file\> \<handler\> [\<regex\>]
- *
- * Show all groups in the ini file specified by \<file\>.
- * The regular expression \<regex\> is used to filter the by setting name.
- *
- * Note: configure with --enable-dba
- */
-
-if ($argc < 3) {
- echo <<<EOF
-Usage: php ${_SERVER['PHP_SELF']} <file> <handler> [<regex>]
-
-Show all groups in the ini file specified by <file>.
-The regular expression <regex> is used to filter the by setting name.
-
-
-EOF;
- exit(1);
-}
-
-if (!class_exists("DbaReader")) require_once("dbareader.inc");
-if (!class_exists("KeyFilter")) require_once("keyfilter.inc");
-
-$db = new DbaReader($argv[1], $argv[2]);
-
-if ($argc>3) {
- $db = new KeyFilter($db, $argv[3]);
-}
-
-foreach($db as $key => $val) {
- echo "'$key' => '$val'\n";
-}
-
-?> \ No newline at end of file
diff --git a/ext/spl/examples/dbaarray.inc b/ext/spl/examples/dbaarray.inc
deleted file mode 100755
index 1064b581e8..0000000000
--- a/ext/spl/examples/dbaarray.inc
+++ /dev/null
@@ -1,98 +0,0 @@
-<?php
-
-/** @file dbaarray.inc
- * @ingroup Examples
- * @brief class DbaArray
- * @author Marcus Boerger
- * @date 2003 - 2004
- *
- * SPL - Standard PHP Library
- */
-
-if (!class_exists("DbaReader")) require_once("dbareader.inc");
-
-/** @ingroup Examples
- * @brief This implements a DBA Array
- * @author Marcus Boerger
- * @version 1.0
- */
-class DbaArray extends DbaReader implements ArrayAccess
-{
-
- /**
- * Open database $file with $handler in read only mode.
- *
- * @param file Database file to open.
- * @param handler Handler to use for database access.
- */
- function __construct($file, $handler)
- {
- $this->db = dba_popen($file, "c", $handler);
- if (!$this->db) {
- throw new exception("Databse could not be opened");
- }
- }
-
- /**
- * Close database.
- */
- function __destruct()
- {
- parent::__destruct();
- }
-
- /**
- * Read an entry.
- *
- * @param $name key to read from
- * @return value associated with $name
- */
- function offsetGet($name)
- {
- $data = dba_fetch($name, $this->db);
- if($data) {
- if (ini_get('magic_quotes_runtime')) {
- $data = stripslashes($data);
- }
- //return unserialize($data);
- return $data;
- }
- else
- {
- return NULL;
- }
- }
-
- /**
- * Set an entry.
- *
- * @param $name key to write to
- * @param $value value to write
- */
- function offsetSet($name, $value)
- {
- //dba_replace($name, serialize($value), $this->db);
- dba_replace($name, $value, $this->db);
- return $value;
- }
-
- /**
- * @return whether key $name exists.
- */
- function offsetExists($name)
- {
- return dba_exists($name, $this->db);
- }
-
- /**
- * Delete a key/value pair.
- *
- * @param $name key to delete.
- */
- function offsetUnset($name)
- {
- return dba_delete($name, $this->db);
- }
-}
-
-?> \ No newline at end of file
diff --git a/ext/spl/examples/dbareader.inc b/ext/spl/examples/dbareader.inc
deleted file mode 100755
index bc3ee83a30..0000000000
--- a/ext/spl/examples/dbareader.inc
+++ /dev/null
@@ -1,96 +0,0 @@
-<?php
-
-/** @file dbareader.inc
- * @ingroup Examples
- * @brief class DbaReader
- * @author Marcus Boerger
- * @date 2003 - 2004
- *
- * SPL - Standard PHP Library
- */
-
-/** @ingroup Examples
- * @brief This implements a DBA Iterator.
- * @author Marcus Boerger
- * @version 1.0
- */
-class DbaReader implements Iterator
-{
-
- protected $db = NULL;
- private $key = false;
- private $val = false;
-
- /**
- * Open database $file with $handler in read only mode.
- *
- * @param file Database file to open.
- * @param handler Handler to use for database access.
- */
- function __construct($file, $handler) {
- if (!$this->db = dba_open($file, 'r', $handler)) {
- throw new exception('Could not open file ' . $file);
- }
- }
-
- /**
- * Close database.
- */
- function __destruct() {
- dba_close($this->db);
- }
-
- /**
- * Rewind to first element.
- */
- function rewind() {
- $this->key = dba_firstkey($this->db);
- $this->fetch_data();
- }
-
- /**
- * Move to next element.
- *
- * @return void
- */
- function next() {
- $this->key = dba_nextkey($this->db);
- $this->fetch_data();
- }
-
- /**
- * Fetches the current data if $key is valid
- */
- private function fetch_data() {
- if ($this->key !== false) {
- $this->val = dba_fetch($this->key, $this->db);
- }
- }
-
- /**
- * @return Current data.
- */
- function current() {
- return $this->val;
- }
-
- /**
- * @return Whether more elements are available.
- */
- function valid() {
- if ($this->db && $this->key !== false) {
- return true;
- } else {
- return false;
- }
- }
-
- /**
- * @return Current key.
- */
- function key() {
- return $this->key;
- }
-}
-
-?> \ No newline at end of file
diff --git a/ext/spl/examples/directoryfilterdots.inc b/ext/spl/examples/directoryfilterdots.inc
deleted file mode 100755
index 899ae6a5d6..0000000000
--- a/ext/spl/examples/directoryfilterdots.inc
+++ /dev/null
@@ -1,59 +0,0 @@
-<?php
-
-/** @file directoryfilterdots.inc
- * @ingroup Examples
- * @brief class DirectoryFilterDots
- * @author Marcus Boerger
- * @date 2003 - 2004
- *
- * SPL - Standard PHP Library
- */
-
-/** @ingroup Examples
- * @brief A filtered DirectoryIterator
- * @author Marcus Boerger
- * @version 1.0
- *
- * This Iteraotr takes a pathname from which it creates a DirectoryIterator
- * and makes it recursive. Further more it filters the entries '.' and '..'.
- */
-class DirectoryFilterDots extends FilterIterator implements RecursiveIterator
-{
- /** Construct from a path.
- * @param $path directory to iterate
- */
- function __construct($path)
- {
- parent::__construct(new DirectoryIterator($path));
- }
-
- /** @return whether the current entry is neither '.' nor '..'
- */
- function accept()
- {
- return !$this->it->isDot();
- }
-
- /** @return whether the current entry is a directory
- */
- function hasChildren()
- {
- return $this->it->hasChildren();
- }
-
- /** @return the current subdirectory as a new DirectoryFilterDots instance.
- */
- function getChildren()
- {
- return new DirectoryFilterDots($this->it->getPathname());
- }
-
- /** @return the current entries path name
- */
- function key()
- {
- return $this->it->getPathname();
- }
-}
-
-?> \ No newline at end of file
diff --git a/ext/spl/examples/directorytree.inc b/ext/spl/examples/directorytree.inc
deleted file mode 100755
index 5c19c09931..0000000000
--- a/ext/spl/examples/directorytree.inc
+++ /dev/null
@@ -1,27 +0,0 @@
-<?php
-
-/** @file directorytree.inc
- * @ingroup Examples
- * @brief class DirectoryTree
- * @author Marcus Boerger
- * @date 2003 - 2004
- *
- * SPL - Standard PHP Library
- */
-
-/** @ingroup Examples
- * @brief A directory iterator that does not show '.' and '..'.
- * @author Marcus Boerger
- * @version 1.0
- */
-class DirectoryTree extends RecursiveIteratorIterator
-{
- /** Construct from a path.
- * @param $path directory to iterate
- */
- function __construct($path) {
- parent::__construct(new DirectoryFilterDots($path));
- }
-}
-
-?> \ No newline at end of file
diff --git a/ext/spl/examples/directorytree.php b/ext/spl/examples/directorytree.php
deleted file mode 100755
index ecaddbe33d..0000000000
--- a/ext/spl/examples/directorytree.php
+++ /dev/null
@@ -1,37 +0,0 @@
-<?php
-
-/** @file directorytree.php
- * @brief Program Directory tree example
- * @ingroup Examples
- * @author Marcus Boerger
- * @date 2003 - 2004
- *
- * Usage: php directorytree.php \<path\> [\<start\> [\<count\>]]
- *
- * Simply specify the path to tree with parameter \<path\>.
- */
-
-if ($argc < 2) {
- echo <<<EOF
-Usage: php ${_SERVER['PHP_SELF']} <path>
-
-Displays a graphical directory tree for the given <path>.
-
-<path> The directory for which to generate the directory tree graph.
-
-
-EOF;
- exit(1);
-}
-
-if (!class_exists("DirectoryTreeIterator")) require_once("directorytreeiterator.inc");
-
-$length = $argc > 3 ? $argv[3] : -1;
-
-echo $argv[1]."\n";
-foreach(new LimitIterator(new DirectoryTreeIterator($argv[1]), @$argv[2], $length) as $key=>$file) {
-//foreach(new DirectoryTreeIterator($argv[1]) as $file) {
- echo $file . "\n";
-}
-
-?> \ No newline at end of file
diff --git a/ext/spl/examples/directorytreeiterator.inc b/ext/spl/examples/directorytreeiterator.inc
deleted file mode 100644
index 38bf240e70..0000000000
--- a/ext/spl/examples/directorytreeiterator.inc
+++ /dev/null
@@ -1,47 +0,0 @@
-<?php
-
-/** @file directorytreeiterator.inc
- * @ingroup Examples
- * @brief class DirectoryTreeIterator
- * @author Marcus Boerger
- * @date 2003 - 2004
- *
- * SPL - Standard PHP Library
- */
-
-/** @ingroup Examples
- * @brief DirectoryIterator to generate ASCII graphic directory trees
- * @author Marcus Boerger
- * @version 1.0
- */
-class DirectoryTreeIterator extends RecursiveIteratorIterator
-{
- /** Construct from a path.
- * @param $path directory to iterate
- */
- function __construct($path)
- {
- parent::__construct(new CachingRecursiveIterator(new RecursiveDirectoryIterator($path), CIT_CALL_TOSTRING|CIT_CATCH_GET_CHILD), 1);
- }
-
- /** @return the current element prefixed with ASCII graphics
- */
- function current()
- {
- $tree = '';
- for ($l=0; $l < $this->getDepth(); $l++) {
- $tree .= $this->getSubIterator($l)->hasNext() ? '| ' : ' ';
- }
- return $tree . ($this->getSubIterator($l)->hasNext() ? '|-' : '\-')
- . $this->getSubIterator($l)->__toString();
- }
-
- /** Aggregates the inner iterator
- */
- function __call($func, $params)
- {
- return call_user_func_array(array($this->getSubIterator(), $func), $params);
- }
-}
-
-?> \ No newline at end of file
diff --git a/ext/spl/examples/emptyiterator.inc b/ext/spl/examples/emptyiterator.inc
deleted file mode 100755
index 2402497b4f..0000000000
--- a/ext/spl/examples/emptyiterator.inc
+++ /dev/null
@@ -1,62 +0,0 @@
-<?php
-
-/** @file emptyiterator.inc
- * @ingroup Examples
- * @brief class EmptyIterator
- * @author Marcus Boerger
- * @date 2003 - 2004
- *
- * SPL - Standard PHP Library
- */
-
-/** @ingroup Examples
- * @brief An empty Iterator
- * @author Marcus Boerger
- * @version 1.0
- *
- */
-class EmptyIterator implements Iterator
-{
- /** No operation.
- * @return void
- */
- function rewind()
- {
- // nothing to do
- }
-
- /** @return \c false
- */
- function valid()
- {
- return false;
- }
-
- /** This function must not be called. It throws an exception upon access.
- * @throw Exception
- * @return void
- */
- function current()
- {
- throw new Exception('Accessing the value of an EmptyIterator');
- }
-
- /** This function must not be called. It throws an exception upon access.
- * @throw Exception
- * @return void
- */
- function key()
- {
- throw new Exception('Accessing the key of an EmptyIterator');
- }
-
- /** No operation.
- * @return void
- */
- function next()
- {
- // nothing to do
- }
-}
-
-?> \ No newline at end of file
diff --git a/ext/spl/examples/findfile.inc b/ext/spl/examples/findfile.inc
deleted file mode 100755
index 56dba97b92..0000000000
--- a/ext/spl/examples/findfile.inc
+++ /dev/null
@@ -1,65 +0,0 @@
-<?php
-
-/** @file findfile.inc
- * @ingroup Examples
- * @brief class FindFile
- * @author Marcus Boerger
- * @date 2003 - 2004
- *
- * SPL - Standard PHP Library
- */
-
-if (!class_exists("FindFile")) require_once("findfile.inc");
-if (!class_exists("AppendIterator")) require_once("appenditerator.inc");
-
-/** @ingroup Examples
- * @brief Base class to find files
- * @author Marcus Boerger
- * @version 1.1
- *
- */
-class FindFile extends FilterIterator
-{
- /** @internal filename to find */
- private $file;
-
- /** Construct from path and filename
- *
- * @param $path the directory to search in
- * If path contains ';' then this parameter is split and every
- * part of it is used as separate directory.
- * @param $file the name of the files to search fro
- */
- function __construct($path, $file)
- {
- $this->file = $file;
- $list = split(';', $path);
- if (count($list) <= 1) {
- parent::__construct(new RecursiveIteratorIterator(new RecursiveDirectoryIterator($path)));
- } else {
- $it = new AppendIterator();
- foreach($list as $path) {
- $it->append(new RecursiveIteratorIterator(new RecursiveDirectoryIterator($path)));
- }
- parent::__construct($it);
- }
- }
-
- /** @return whether the current file matches the given filename
- */
- function accept()
- {
- return !strcmp($this->current(), $this->file);
- }
-
- /** @return the filename to search for.
- * @note This may be overloaded and contain a regular expression for an
- * extended class that uses regular expressions to search.
- */
- function getSearch()
- {
- return $this->file;
- }
-}
-
-?> \ No newline at end of file
diff --git a/ext/spl/examples/findfile.php b/ext/spl/examples/findfile.php
deleted file mode 100755
index 03c06eaa46..0000000000
--- a/ext/spl/examples/findfile.php
+++ /dev/null
@@ -1,33 +0,0 @@
-<?php
-
-/** @file findfile.php
- * @brief Program Find a specific file by name.
- * @ingroup Examples
- * @author Marcus Boerger
- * @date 2003 - 2004
- *
- * Usage: php findfile.php \<path\> \<name\>
- *
- * \<path\> Path to search in. You can specify multiple paths by separating
- * them with ';'.
- * \<name\> Filename to look for.
- */
-
-if ($argc < 3) {
- echo <<<EOF
-Usage: php findfile.php <path> <name>
-
-Find a specific file by name.
-
-<path> Path to search in.
-<name> Filename to look for.
-
-
-EOF;
- exit(1);
-}
-
-if (!class_exists("FindFile")) require_once("findfile.inc");
-
-foreach(new FindFile($argv[1], $argv[2]) as $file) echo $file->getPathname()."\n";
-?> \ No newline at end of file
diff --git a/ext/spl/examples/findregex.php b/ext/spl/examples/findregex.php
deleted file mode 100755
index 8a7dd8158d..0000000000
--- a/ext/spl/examples/findregex.php
+++ /dev/null
@@ -1,36 +0,0 @@
-<?php
-
-/** @file findregex.php
- * @brief Program Find a specific file by name.
- * @ingroup Examples
- * @author Marcus Boerger, Adam Trachtenberg
- * @date 2004
- *
- * Usage: php findregex.php \<path\> \<name\>
- *
- * \<path\> Path to search in.
- * \<name\> Filename to look for.
- */
-
-if ($argc < 3) {
- echo <<<EOF
-Usage: php findregex.php <file> <name>
-
-Find a specific file by name.
-
-<path> Path to search in.
-<name> Regex for filenames to look for.
-
-
-EOF;
- exit(1);
-}
-
-if (!class_exists("RegexFindFile")) require_once("regexfindfile.inc");
-
-foreach(new RegexFindFile($argv[1], $argv[2]) as $file)
-{
- echo $file->getPathname()."\n";
-}
-
-?> \ No newline at end of file
diff --git a/ext/spl/examples/infiniteiterator.inc b/ext/spl/examples/infiniteiterator.inc
deleted file mode 100755
index 5f27633eb3..0000000000
--- a/ext/spl/examples/infiniteiterator.inc
+++ /dev/null
@@ -1,102 +0,0 @@
-<?php
-
-/** @file infiniteiterator.inc
- * @ingroup Examples
- * @brief class InfiniteIterator
- * @author Marcus Boerger
- * @date 2003 - 2004
- *
- * SPL - Standard PHP Library
- */
-
-/** @ingroup Examples
- * @brief An infinite Iterator
- * @author Marcus Boerger
- * @version 1.0
- *
- * This Iterator takes another Iterator and infinitvely iterates it by
- * rewinding it when its end is reached.
- *
- * \note Even an InfiniteIterator stops if its inner Iterator is empty.
- *
- \verbatim
- $it = new ArrayIterator(array(1,2,3));
- $infinite = new InfiniteIterator($it);
- $limit = new LimitIterator($infinite, 0, 5);
- foreach($limit as $val=>$key)
- {
- echo "$val=>$key\n";
- }
- \endverbatim
- */
-class InfiniteIterator implements Iterator
-{
- /** @internal
- * The inner Iterator. */
- private $it;
-
- /** Construct from another Iterator.
- * @param $it the inner Iterator.
- */
- function __construct(Iterator $it)
- {
- $this->it = $it;
- }
-
- /** @return the inner iterator
- */
- function getInnerIterator()
- {
- return $this->it;
- }
-
- /** Rewind the inner iterator.
- * @return void
- */
- function rewind()
- {
- $this->it->rewind();
- }
-
- /** @return whether the current element is valid
- */
- function valid()
- {
- return $this->it->valid();
- }
-
- /** @return the current value
- */
- function current()
- {
- return $this->it->current();
- }
-
- /** @return the current key
- */
- function key()
- {
- return $this->it->key();
- }
-
- /** Move the inner Iterator forward to its next element or rewind it.
- * @return void
- */
- function next()
- {
- $this->it->next();
- if (!$this->it->valid())
- {
- $this->it->rewind();
- }
- }
-
- /** Aggregates the inner iterator
- */
- function __call($func, $params)
- {
- return call_user_func_array(array($this->it, $func), $params);
- }
-}
-
-?> \ No newline at end of file
diff --git a/ext/spl/examples/ini_groups.php b/ext/spl/examples/ini_groups.php
deleted file mode 100755
index c418eb0cfb..0000000000
--- a/ext/spl/examples/ini_groups.php
+++ /dev/null
@@ -1,41 +0,0 @@
-<?php
-
-/** @file ini_groups.php
- * @brief Program List groups within an ini file
- * @ingroup Examples
- * @author Marcus Boerger
- * @date 2003 - 2004
- *
- * Usage: php dba_dump.php \<file\> [\<regex\>]
- *
- * Show all groups in the ini file specified by \<file\>.
- * The regular expression \<regex\> is used to filter the result.
- *
- * Note: configure with --enable-dba
- */
-
-if ($argc < 2) {
- echo <<<EOF
-Usage: php dba_dump.php <file> [<regex>]
-
-Show all groups in the ini file specified by <file>.
-The regular expression <regex> is used to filter the result.
-
-
-EOF;
- exit(1);
-}
-
-if (!class_exists("KeyFilter")) require_once("keyfilter.inc");
-if (!class_exists("IniGroups")) require_once("inigroups.inc");
-
-$it = new IniGroups($argv[1]);
-if ($argc>2) {
- $it = new KeyFilter($it, $argv[2]);
-}
-
-foreach($it as $group) {
- echo "$group\n";
-}
-
-?> \ No newline at end of file
diff --git a/ext/spl/examples/inigroups.inc b/ext/spl/examples/inigroups.inc
deleted file mode 100755
index 519c31631a..0000000000
--- a/ext/spl/examples/inigroups.inc
+++ /dev/null
@@ -1,54 +0,0 @@
-<?php
-
-/** @file inigroups.inc
- * @ingroup Examples
- * @brief class IniGroups
- * @author Marcus Boerger
- * @date 2003 - 2004
- *
- * SPL - Standard PHP Library
- */
-
-if (!class_exists("KeyFilter")) require_once("keyfilter.inc");
-if (!class_exists("DbaReader")) require_once("dbareader.inc");
-
-/** @ingroup Examples
- * @brief Class to iterate all groups within an ini file.
- * @author Marcus Boerger
- * @version 1.1
- *
- * Using this class you can iterator over all groups of a ini file.
- *
- * This class uses a 'is-a' relation to KeyFilter in contrast to a 'has-a'
- * relation. Doing so both current() and key() methods must be overwritten.
- * If it would use a 'has-a' relation there would be much more to type...
- * but for puritists that would allow correctness in so far as then no
- * key() would be needed.
- */
-class IniGroups extends KeyFilter
-{
- /**
- * Construct an ini file group iterator from a filename.
- *
- * @param file Ini file to open.
- */
- function __construct($file) {
- parent::__construct(new DbaReader($file, 'inifile'), '^\[.*\]$');
- }
-
- /**
- * @return The current group.
- */
- function current() {
- return substr(parent::key(),1,-1);
- }
-
- /**
- * @return The current group.
- */
- function key() {
- return substr(parent::key(),1,-1);
- }
-}
-
-?> \ No newline at end of file
diff --git a/ext/spl/examples/keyfilter.inc b/ext/spl/examples/keyfilter.inc
deleted file mode 100755
index b166ef3f7d..0000000000
--- a/ext/spl/examples/keyfilter.inc
+++ /dev/null
@@ -1,64 +0,0 @@
-<?php
-
-/** @file keyfilter.inc
- * @ingroup Examples
- * @brief class KeyFilter
- * @author Marcus Boerger
- * @date 2003 - 2004
- *
- * SPL - Standard PHP Library
- */
-
-/** @ingroup Examples
- * @brief Regular expression filter for string iterators
- * @author Marcus Boerger
- * @version 1.1
- *
- * Instances of this class act as a filter around iterators whose elements
- * are strings. In other words you can put an iterator into the constructor
- * and the instance will only return elements which match the given regular
- * expression.
- */
-class KeyFilter extends FilterIterator
-{
- /** @internal regular exoression used as filter */
- private $regex;
-
- /**
- * Constructs a filter around an iterator whose elemnts are strings.
- * If the given iterator is of type spl_sequence then its rewind()
- * method is called.
- *
- * @param it Object that implements at least spl_forward
- * @param regex Regular expression used as a filter.
- */
- function __construct(Iterator $it, $regex)
- {
- parent::__construct($it);
- $this->regex = $regex;
- }
-
- /** \return whether the current key mathes the regular expression
- */
- function accept()
- {
- return ereg($this->regex, $this->getInnerIterator()->key());
- }
-
- /** @return regular expression used as filter
- */
- function getRegex()
- {
- return $this->regex;
- }
-
- /**
- * hidden __clone
- */
- protected function __clone()
- {
- // disallow clone
- }
-}
-
-?> \ No newline at end of file
diff --git a/ext/spl/examples/norewinditerator.inc b/ext/spl/examples/norewinditerator.inc
deleted file mode 100755
index 6564e1d53e..0000000000
--- a/ext/spl/examples/norewinditerator.inc
+++ /dev/null
@@ -1,53 +0,0 @@
-<?php
-
-/** @file norewinditerator.inc
- * @ingroup Examples
- * @brief class NoRewindIterator
- * @author Marcus Boerger
- * @date 2003 - 2004
- *
- * SPL - Standard PHP Library
- */
-
-/** @ingroup Examples
- * @brief An Iterator that doesn't call rewind
- * @author Marcus Boerger
- * @version 1.0
- *
- */
-class NoRewindIterator implements Iterator
-{
- protected $it;
-
- function __construct(Iterator $it)
- {
- $this->it = $it;
- }
-
- function rewind()
- {
- // nothing to do
- }
-
- function valid()
- {
- return $this->it->valid();
- }
-
- function current()
- {
- return $this->it->current();
- }
-
- function key()
- {
- return $this->it->key();
- }
-
- function next()
- {
- $this->it->next();
- }
-}
-
-?> \ No newline at end of file
diff --git a/ext/spl/examples/regexfindfile.inc b/ext/spl/examples/regexfindfile.inc
deleted file mode 100755
index af3b293a17..0000000000
--- a/ext/spl/examples/regexfindfile.inc
+++ /dev/null
@@ -1,40 +0,0 @@
-<?php
-
-/** @file regexfindfile.inc
- * @ingroup Examples
- * @brief class RegexFindFile
- * @author Marcus Boerger
- * @date 2003 - 2004
- *
- * SPL - Standard PHP Library
- */
-
-/** @ingroup Examples
- * @brief Find files by regular expression
- * @author Marcus Boerger
- * @version 1.1
- *
- */
-class RegexFindFile extends FindFile
-{
- /** Construct from path and regular expression
- *
- * @param $path the directory to search in
- * If path contains ';' then this parameter is split and every
- * part of it is used as separate directory.
- * @param $regex perl style regular expression to find files with
- */
- function __construct($path, $regex)
- {
- parent::__construct($path, $regex);
- }
-
- /** @return whether the current filename matches the regular expression.
- */
- function accept()
- {
- return preg_match($this->getSearch(), $this->current());
- }
-}
-
-?> \ No newline at end of file
diff --git a/ext/spl/examples/searchiterator.inc b/ext/spl/examples/searchiterator.inc
deleted file mode 100755
index 4d05cec5f1..0000000000
--- a/ext/spl/examples/searchiterator.inc
+++ /dev/null
@@ -1,58 +0,0 @@
-<?php
-
-/** @file searchiterator.inc
- * @ingroup Examples
- * @brief abstract class SearchIterator
- * @author Marcus Boerger
- * @date 2003 - 2004
- *
- * SPL - Standard PHP Library
- */
-
-/** @ingroup Examples
- * @brief Iterator to search for a specific element
- * @author Marcus Boerger
- * @version 1.0
- *
- * This extended FilterIterator stops after finding the first acceptable
- * value.
- */
-abstract class SearchIterator extends FilterIterator
-{
- /** @internal whether an entry was found already */
- private $done = false;
-
- /** Rewind and reset so that it once again searches.
- * @return void
- */
- function rewind()
- {
- parent::rewind();
- $this->done = false;
- }
-
- /** @return whether the current element is valid
- * which can only happen once per iteration.
- */
- function valid()
- {
- return !$this->done && parent::valid();
- }
-
- /** Do not move forward but instead mark as finished.
- * @return void
- */
- function next()
- {
- $this->done = true;
- }
-
- /** Aggregates the inner iterator
- */
- function __call($func, $params)
- {
- return call_user_func_array(array($this->getInnerIterator(), $func), $params);
- }
-}
-
-?> \ No newline at end of file
diff --git a/ext/spl/examples/tests/examples.inc b/ext/spl/examples/tests/examples.inc
deleted file mode 100755
index 74b652adb5..0000000000
--- a/ext/spl/examples/tests/examples.inc
+++ /dev/null
@@ -1,27 +0,0 @@
-<?php
-
-class IncludeFiles extends ArrayIterator
-{
- function __construct($path, $classes)
- {
- parent::__construct();
- foreach($classes as $c)
- {
- $this->append($path . '/' . strtolower($c) . '.inc');
- }
- }
-}
-
-$classes = array(
- 'EmptyIterator',
- 'InfiniteIterator',
- 'AppendIterator',
- 'NoRewindIterator',
-);
-
-foreach (new IncludeFiles(dirname(__FILE__). '/..', $classes) as $file)
-{
- require_once($file);
-}
-
-?> \ No newline at end of file
diff --git a/ext/spl/examples/tests/iterators_001.phpt b/ext/spl/examples/tests/iterators_001.phpt
deleted file mode 100755
index 5b4a6ffd0f..0000000000
--- a/ext/spl/examples/tests/iterators_001.phpt
+++ /dev/null
@@ -1,20 +0,0 @@
---TEST--
-SPL: EmptyIterator
---FILE--
-<?php
-
-require_once('examples.inc');
-
-echo "===EmptyIterator===\n";
-
-foreach(new LimitIterator(new EmptyIterator(), 0, 3) as $key => $val)
-{
- echo "$key=>$val\n";
-}
-
-?>
-===DONE===
-<?php exit(0);
---EXPECTF--
-===EmptyIterator===
-===DONE===
diff --git a/ext/spl/examples/tests/iterators_002.phpt b/ext/spl/examples/tests/iterators_002.phpt
deleted file mode 100755
index dcbaa9c875..0000000000
--- a/ext/spl/examples/tests/iterators_002.phpt
+++ /dev/null
@@ -1,53 +0,0 @@
---TEST--
-SPL: InfiniteIterator
---FILE--
-<?php
-
-require_once('examples.inc');
-
-echo "===EmptyIterator===\n";
-
-foreach(new LimitIterator(new InfiniteIterator(new EmptyIterator()), 0, 3) as $key=>$val)
-{
- echo "$key=>$val\n";
-}
-
-echo "===InfiniteIterator===\n";
-
-$it = new ArrayIterator(array(0 => 'A', 1 => 'B', 2 => 'C', 3 => 'D'));
-$it = new InfiniteIterator($it);
-$it = new LimitIterator($it, 2, 5);
-foreach($it as $val=>$key)
-{
- echo "$val=>$key\n";
-}
-
-echo "===Infinite/LimitIterator===\n";
-
-$it = new ArrayIterator(array(0 => 'A', 1 => 'B', 2 => 'C', 3 => 'D'));
-$it = new LimitIterator($it, 1, 2);
-$it = new InfiniteIterator($it);
-$it = new LimitIterator($it, 2, 5);
-foreach($it as $val=>$key)
-{
- echo "$val=>$key\n";
-}
-
-?>
-===DONE===
-<?php exit(0);
---EXPECTF--
-===EmptyIterator===
-===InfiniteIterator===
-2=>C
-3=>D
-0=>A
-1=>B
-2=>C
-===Infinite/LimitIterator===
-1=>B
-2=>C
-1=>B
-2=>C
-1=>B
-===DONE===
diff --git a/ext/spl/examples/tests/iterators_003.phpt b/ext/spl/examples/tests/iterators_003.phpt
deleted file mode 100755
index f6d047de75..0000000000
--- a/ext/spl/examples/tests/iterators_003.phpt
+++ /dev/null
@@ -1,35 +0,0 @@
---TEST--
-SPL: NoRweindIterator
---FILE--
-<?php
-
-require_once('examples.inc');
-
-echo "===Current===\n";
-
-$it = new NoRewindIterator(new ArrayIterator(array(0 => 'A', 1 => 'B', 2 => 'C')));
-
-echo $it->key() . '=>' . $it->current() . "\n";
-
-echo "===Next===\n";
-
-$it->next();
-
-echo "===Foreach===\n";
-
-foreach($it as $key=>$val)
-{
- echo "$key=>$val\n";
-}
-
-?>
-===DONE===
-<?php exit(0); ?>
---EXPECTF--
-===Current===
-0=>A
-===Next===
-===Foreach===
-1=>B
-2=>C
-===DONE===
diff --git a/ext/spl/examples/tests/iterators_004.phpt b/ext/spl/examples/tests/iterators_004.phpt
deleted file mode 100755
index 83827e29ba..0000000000
--- a/ext/spl/examples/tests/iterators_004.phpt
+++ /dev/null
@@ -1,68 +0,0 @@
---TEST--
-SPL: AppendIterator
---FILE--
-<?php
-
-require_once('examples.inc');
-
-echo "===Empty===\n";
-
-$it = new AppendIterator;
-
-foreach($it as $key=>$val)
-{
- echo "$key=>$val\n";
-}
-
-echo "===Append===\n";
-
-$it->append(new ArrayIterator(array(0 => 'A', 1 => 'B')));
-
-foreach($it as $key=>$val)
-{
- echo "$key=>$val\n";
-}
-
-echo "===Rewind===\n";
-
-foreach($it as $key=>$val)
-{
- echo "$key=>$val\n";
-}
-
-echo "===Append===\n";
-
-$it->append(new ArrayIterator(array(2 => 'C', 3 => 'D')));
-
-foreach(new NoRewindIterator($it) as $key=>$val)
-{
- echo "$key=>$val\n";
-}
-
-echo "===Rewind===\n";
-
-foreach($it as $key=>$val)
-{
- echo "$key=>$val\n";
-}
-
-?>
-===DONE===
-<?php exit(0); ?>
---EXPECTF--
-===Empty===
-===Append===
-0=>A
-1=>B
-===Rewind===
-0=>A
-1=>B
-===Append===
-2=>C
-3=>D
-===Rewind===
-0=>A
-1=>B
-2=>C
-3=>D
-===DONE===
diff --git a/ext/spl/examples/tree.php b/ext/spl/examples/tree.php
deleted file mode 100755
index 96a6ccde20..0000000000
--- a/ext/spl/examples/tree.php
+++ /dev/null
@@ -1,39 +0,0 @@
-<?php
-
-/** @file tree.php
- * @brief Program Tree view example
- * @ingroup Examples
- * @author Marcus Boerger
- * @date 2003 - 2004
- *
- * Usage: php tree.php \<path\>
- *
- * Simply specify the path to tree with parameter \<path\>.
- */
-
-// The following line only operates on classes which are converted to c already.
-// But does not generate a graphical output.
-//foreach(new RecursiveIteratorIterator(new ParentIterator(new RecursiveDirectoryIterator($argv[1])), 1) as $file) {
-
-if ($argc < 2) {
- echo <<<EOF
-Usage: php ${_SERVER['PHP_SELF']} <path>
-
-Displays a graphical tree for the given <path>.
-
-<path> The directory for which to generate the tree graph.
-
-
-EOF;
- exit(1);
-}
-
-if (!class_exists("DirectoryTreeIterator")) require_once("directorytreeiterator.inc");
-
-echo $argv[1]."\n";
-foreach(new DirectoryTreeIterator($argv[1]) as $file)
-{
- echo $file . "\n";
-}
-
-?> \ No newline at end of file
diff --git a/ext/spl/internal/cachingiterator.inc b/ext/spl/internal/cachingiterator.inc
deleted file mode 100755
index ac2476f1f8..0000000000
--- a/ext/spl/internal/cachingiterator.inc
+++ /dev/null
@@ -1,81 +0,0 @@
-<?php
-
-define('CIT_CALL_TOSTRING', 1);
-define('CIT_CATCH_GET_CHILD', 2);
-
-class CachingIterator
-{
- protected $it;
- protected $current;
- protected $key;
- protected $valid;
- protected $strValue;
-
- function __construct(Iterator $it, $flags = CIT_CALL_TOSTRING)
- {
- $this->it = $it;
- $this->flags = $flags & (CIT_CALL_TOSTRING|CIT_CATCH_GET_CHILD);
- $this->next();
- }
-
- function rewind()
- {
- $this->it->rewind();
- $this->next();
- }
-
- function next()
- {
- if ($this->valid = $this->it->valid()) {
- $this->current = $this->it->current();
- $this->key = $this->it->key();
- if ($this->flags & CIT_CALL_TOSTRING) {
- if (is_object($this->current)) {
- $this->strValue = $this->current->__toString();
- } else {
- $this->strValue = (string)$this->current;
- }
- }
- } else {
- $this->current = NULL;
- $this->key = NULL;
- $this->strValue = NULL;
- }
- $this->it->next();
- }
-
- function valid()
- {
- return $this->valid;
- }
-
- function hasNext()
- {
- return $this->it->valid();
- }
-
- function current()
- {
- return $this->current;
- }
-
- function key()
- {
- return $this->key;
- }
-
- function __call($func, $params)
- {
- return call_user_func_array(array($this->it, $func), $params);
- }
-
- function __toString()
- {
- if (!$this->flags & CIT_CALL_TOSTRING) {
- throw new exception('CachingIterator does not fetch string value (see CachingIterator::__construct)');
- }
- return $this->strValue;
- }
-}
-
-?> \ No newline at end of file
diff --git a/ext/spl/internal/cachingrecursiveiterator.inc b/ext/spl/internal/cachingrecursiveiterator.inc
deleted file mode 100755
index fc7d9a7220..0000000000
--- a/ext/spl/internal/cachingrecursiveiterator.inc
+++ /dev/null
@@ -1,53 +0,0 @@
-<?php
-
-class CachingRecursiveIterator extends CachingIterator implements RecursiveIterator
-{
- protected $hasChildren;
- protected $getChildren;
-
- function __construct(RecursiveIterator $it, $flags = CIT_CALL_TOSTRING)
- {
- parent::__construct($it, $flags);
- }
-
- function rewind();
- {
- $this->hasChildren = false;
- $this->getChildren = NULL;
- parent::rewind();
- }
-
- function next()
- {
- if ($this->hasChildren = $this->it->hasChildren()) {
- try {
- //$this->getChildren = new CachingRecursiveIterator($this->it->getChildren(), $this->flags);
- // workaround memleaks...
- $child = $this->it->getChildren();
- $this->getChildren = new CachingRecursiveIterator($child, $this->flags);
- }
- catch(Exception $e) {
- if (!$this->flags & CIT_CATCH_GET_CHILD) {
- throw $e;
- }
- $this->hasChildren = false;
- $this->getChildren = NULL;
- }
- } else {
- $this->getChildren = NULL;
- }
- parent::next();
- }
-
- function hasChildren()
- {
- return $this->hasChildren;
- }
-
- function getChildren()
- {
- return $this->getChildren;
- }
-}
-
-?> \ No newline at end of file
diff --git a/ext/spl/internal/filteriterator.inc b/ext/spl/internal/filteriterator.inc
deleted file mode 100755
index 7040c4bef9..0000000000
--- a/ext/spl/internal/filteriterator.inc
+++ /dev/null
@@ -1,97 +0,0 @@
-<?php
-
-/**
- * @brief Regular expression filter for string iterators
- * @author Marcus Boerger
- * @version 1.0
- *
- * Instances of this class act as a filter around iterators. In other words
- * you can put an iterator into the constructor and the instance will only
- * return selected (accepted) elements.
- */
-abstract class FilterIterator implements Iterator
-{
- protected $it;
-
- /**
- * Constructs a filter around an iterator whose elemnts are strings.
- * If the given iterator is of type spl_sequence then its rewind()
- * method is called.
- *
- * @param it Object that implements at least spl_forward
- */
- function __construct(Iterator $it) {
- $this->it = $it;
- }
-
- /**
- * Rewind the inner iterator.
- */
- function rewind() {
- $this->it->rewind();
- $this->fetch();
- }
-
- /**
- * Accept function to decide whether an element of the inner iterator
- * should be accessible through the Filteriterator.
- *
- * @return whether or not to expose the current element of the inner
- * iterator.
- */
- abstract function accept();
-
- /**
- * Fetch next element and store it.
- *
- * @return void
- */
- protected function fetch() {
- while ($this->it->valid()) {
- if ($this->accept()) {
- return;
- }
- $this->it->next();
- };
- }
-
- /**
- * Move to next element
- *
- * @return void
- */
- function next() {
- $this->it->next();
- $this->fetch();
- }
-
- /**
- * @return Whether more elements are available
- */
- function valid() {
- return $this->it->valid();
- }
-
- /**
- * @return The current key
- */
- function key() {
- return $this->it->key();
- }
-
- /**
- * @return The current value
- */
- function current() {
- return $this->it->current();
- }
-
- /**
- * hidden __clone
- */
- protected function __clone() {
- // disallow clone
- }
-}
-
-?> \ No newline at end of file
diff --git a/ext/spl/internal/limititerator.inc b/ext/spl/internal/limititerator.inc
deleted file mode 100755
index 9a87f6874f..0000000000
--- a/ext/spl/internal/limititerator.inc
+++ /dev/null
@@ -1,72 +0,0 @@
-<?php
-
-class LimitIterator implements Iterator
-{
- protected $it;
- protected $offset;
- protected $count;
- private $pos;
-
- // count === NULL means all
- function __construct(Iterator $it, $offset = 0, $count = -1)
- {
- if ($offset < 0) {
- throw new exception('Parameter offset must be > 0');
- }
- if ($count < 0 && $count != -1) {
- throw new exception('Parameter count must either be -1 or a value greater than or equal to 0');
- }
- $this->it = $it;
- $this->offset = $offset;
- $this->count = $count;
- $this->pos = 0;
- }
-
- function seek($position) {
- if ($position < $this->offset) {
- throw new exception('Cannot seek to '.$position.' which is below offset '.$this->offset);
- }
- if ($position > $this->offset + $this->count && $this->count != -1) {
- throw new exception('Cannot seek to '.$position.' which is behind offset '.$this->offset.' plus count '.$this->count);
- }
- if ($this->it instanceof SeekableIterator) {
- $this->it->seek($position);
- $this->pos = $position;
- } else {
- while($this->pos < $position && $this->it->valid()) {
- $this->next();
- }
- }
- }
-
- function rewind()
- {
- $this->it->rewind();
- $this->pos = 0;
- $this->seek($this->offset);
- }
-
- function valid() {
- return ($this->count == -1 || $this->pos < $this->offset + $this->count)
- && $this->it->valid();
- }
-
- function key() {
- return $this->it->key();
- }
-
- function current() {
- return $this->it->current();
- }
-
- function next() {
- $this->it->next();
- $this->pos++;
- }
-
- function getPosition() {
- return $this->pos;
- }
-}
-
-?> \ No newline at end of file
diff --git a/ext/spl/internal/parentiterator.inc b/ext/spl/internal/parentiterator.inc
deleted file mode 100755
index 4b758132ac..0000000000
--- a/ext/spl/internal/parentiterator.inc
+++ /dev/null
@@ -1,25 +0,0 @@
-<?php
-
-class ParentIterator extends FilterIterator implements RecursiveIterator
-{
- function __construct(RecursiveIterator $it)
- {
- parent::__construct($it);
- }
- function accept()
- {
- return $this->it->hasChildren();
- }
-
- function hasChildren()
- {
- return $this->it->hasChildren();
- }
-
- function getChildren()
- {
- return new ParentIterator($this->it->getChildren());
- }
-}
-
-?> \ No newline at end of file
diff --git a/ext/spl/internal/recursiveiterator.inc b/ext/spl/internal/recursiveiterator.inc
deleted file mode 100755
index 63523ffad9..0000000000
--- a/ext/spl/internal/recursiveiterator.inc
+++ /dev/null
@@ -1,9 +0,0 @@
-<?php
-
-interface RecursiveIterator implements Iterator
-{
- function hasChildren();
- function getChildren();
-}
-
-?> \ No newline at end of file
diff --git a/ext/spl/internal/recursiveiteratoriterator.inc b/ext/spl/internal/recursiveiteratoriterator.inc
deleted file mode 100755
index 05e31df464..0000000000
--- a/ext/spl/internal/recursiveiteratoriterator.inc
+++ /dev/null
@@ -1,101 +0,0 @@
-<?php
-
-/**
- * @brief Iterates through recursive iterators
- * @author Marcus Boerger
- * @version 1.0
- *
- */
-class RecursiveIteratorIterator implements Iterator
-{
- protected $ait = array();
- protected $count = 0;
-
- function __construct(RecursiveIterator $it)
- {
- $this->ait[0] = $it;
- }
-
-
- function rewind()
- {
- while ($this->count) {
- unset($this->ait[$this->count--]);
- }
- $this->ait[0]->rewind();
- $this->ait[0]->recursed = false;
- }
-
- function valid()
- {
- $count = $this->count;
- while ($count) {
- $it = $this->ait[$count];
- if ($it->valid()) {
- return true;
- }
- $count--;
- }
- return false;
- }
-
- function key()
- {
- $it = $this->ait[$this->count];
- return $it->key();
- }
-
- function current()
- {
- $it = $this->ait[$this->count];
- return $it->current();
- }
-
- function next()
- {
- while ($this->count) {
- $it = $this->ait[$this->count];
- if ($it->valid()) {
- if (!$it->recursed && $it->hasChildren()) {
- $it->recursed = true;
- $sub = $it->getChildren();
- $sub->recursed = false;
- $sub->rewind();
- if ($sub->valid()) {
- $this->ait[++$this->count] = $sub;
- if (!$sub instanceof RecursiveIterator) {
- throw new Exception(get_class($sub).'::getChildren() must return an object that implements RecursiveIterator');
- }
- return;
- }
- unset($sub);
- }
- $it->next();
- $it->recursed = false;
- if ($it->valid()) {
- return;
- }
- $it->recursed = false;
- }
- if ($this->count) {
- unset($this->ait[$this->count--]);
- $it = $this->ait[$this->count];
- }
- }
- }
-
- function getSubIterator($level = NULL)
- {
- if (is_null($level)) {
- $level = $this->count;
- }
- return @$this->ait[$level];
- }
-
- function getDepth()
- {
- return $this->level;
- }
-}
-
-?> \ No newline at end of file
diff --git a/ext/spl/internal/seekableiterator.inc b/ext/spl/internal/seekableiterator.inc
deleted file mode 100755
index 3012155771..0000000000
--- a/ext/spl/internal/seekableiterator.inc
+++ /dev/null
@@ -1,29 +0,0 @@
-<?php
-
-/** \brief seekable iterator
- *
- * Turns a normal iterator ino a seekable iterator. When there is a way
- * to seek on an iterator LimitIterator can use this to efficiently rewind
- * to offset.
- */
-interface SeekableIterator implements Iterator
-{
- /** Seek to an absolute position
- *
- * \param $index position to seek to
- * \return void
- *
- * \note The method should throw an exception if it is not possible to
- * seek to the given position.
- */
- function seek($index);
-/* $this->rewind();
- $position = 0;
- while($position < $index && $this->valid()) {
- $this->next();
- $position++;
- }
- }*/
-}
-
-?> \ No newline at end of file
diff --git a/ext/spl/package.xml b/ext/spl/package.xml
deleted file mode 100755
index f99cd7ce41..0000000000
--- a/ext/spl/package.xml
+++ /dev/null
@@ -1,77 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1" ?>
-<!DOCTYPE package SYSTEM "../pear/package.dtd">
-<package>
- <name>SPL</name>
- <summary>Standard PHP Library</summary>
- <maintainers>
- <maintainer>
- <user>helly</user>
- <name>Marcus Boerger</name>
- <email>helly@php.net</email>
- <role>lead</role>
- </maintainer>
- </maintainers>
- <description>
-SPL is a collection of interfaces and classes that are meant to solve
-standard problems.
- </description>
- <license>PHP</license>
- <release>
- <state>stable</state>
- <version>0.1-dev</version>
- <date>TBA</date>
- <filelist>
- <file role="src" name="config.m4"/>
- <file role="src" name="php_spl.c"/>
- <file role="src" name="php_spl.h"/>
- <file role="src" name="spl_array.c"/>
- <file role="src" name="spl_array.h"/>
- <file role="src" name="spl_directory.c"/>
- <file role="src" name="spl_directory.h"/>
- <file role="src" name="spl_engine.c"/>
- <file role="src" name="spl_engine.h"/>
- <file role="src" name="spl_functions.c"/>
- <file role="src" name="spl_functions.h"/>
- <file role="src" name="spl_iterators.c"/>
- <file role="src" name="spl_iterators.h"/>
- <file role="src" name="spl_sxe.c"/>
- <file role="src" name="spl_sxe.h"/>
- <file role="doc" name="CREDITS"/>
- <file role="doc" name="README"/>
- <file role="doc" name="TODO"/>
- <file role="doc" name="spl.php"/>
- <file role="test" name="tests/array_iterator.phpt"/>
- <file role="test" name="tests/array_object.phpt"/>
- <dir name="examples">
- <file role="doc" name="autoload.inc"/>
- <file role="doc" name="cachingiterator.inc"/>
- <file role="doc" name="cachingrecursiveiterator.inc"/>
- <file role="doc" name="dba_array.php"/>
- <file role="doc" name="dba_dump.php"/>
- <file role="doc" name="dba_reader.inc"/>
- <file role="doc" name="directoryfilterdots.inc"/>
- <file role="doc" name="directorygraphiterator.inc"/>
- <file role="doc" name="directorytree.inc"/>
- <file role="doc" name="directorytree.php"/>
- <file role="doc" name="directorytreeiterator.inc"/>
- <file role="doc" name="findfile.php"/>
- <file role="doc" name="filteriterator.inc"/>
- <file role="doc" name="ini_groups.php"/>
- <file role="doc" name="key_filter.inc"/>
- <file role="doc" name="limititerator.inc"/>
- <file role="doc" name="parentiterator.inc"/>
- <file role="doc" name="recursiveiterator.inc"/>
- <file role="doc" name="recursiveiteratoriterator.inc"/>
- <file role="doc" name="searchiterator.inc"/>
- <file role="doc" name="seekableiterator.inc"/>
- <file role="doc" name="tree.php"/>
- </dir>
- </filelist>
- <deps>
- <dep type="php" rel="ge" version="5"/>
- </deps>
- </release>
-</package>
-<!--
-vim:et:ts=1:sw=1
--->
diff --git a/ext/spl/php_spl.c b/ext/spl/php_spl.c
deleted file mode 100755
index 34597b6afb..0000000000
--- a/ext/spl/php_spl.c
+++ /dev/null
@@ -1,232 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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. |
- +----------------------------------------------------------------------+
- | Authors: Marcus Boerger <helly@php.net> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-#ifdef HAVE_CONFIG_H
- #include "config.h"
-#endif
-
-#include "php.h"
-#include "php_ini.h"
-#include "ext/standard/info.h"
-#include "php_spl.h"
-#include "spl_functions.h"
-#include "spl_engine.h"
-#include "spl_array.h"
-#include "spl_directory.h"
-#include "spl_iterators.h"
-#include "spl_sxe.h"
-
-#ifdef COMPILE_DL_SPL
-ZEND_GET_MODULE(spl)
-#endif
-
-ZEND_DECLARE_MODULE_GLOBALS(spl)
-
-/* {{{ spl_functions
- */
-function_entry spl_functions[] = {
- PHP_FE(spl_classes, NULL)
- PHP_FE(class_parents, NULL)
- PHP_FE(class_implements, NULL)
- {NULL, NULL, NULL}
-};
-/* }}} */
-
-/* {{{ spl_module_entry
- */
-zend_module_entry spl_module_entry = {
- STANDARD_MODULE_HEADER,
- "SPL",
- spl_functions,
- PHP_MINIT(spl),
- PHP_MSHUTDOWN(spl),
- PHP_RINIT(spl),
- PHP_RSHUTDOWN(spl),
- PHP_MINFO(spl),
- "0.2",
- STANDARD_MODULE_PROPERTIES
-};
-/* }}} */
-
-/* {{{ spl_functions_none
- */
-function_entry spl_functions_none[] = {
- {NULL, NULL, NULL}
-};
-/* }}} */
-
-/* {{{ spl_init_globals
- */
-static void spl_init_globals(zend_spl_globals *spl_globals)
-{
-}
-/* }}} */
-
-/* {{{ PHP_MINIT_FUNCTION(spl)
- */
-PHP_MINIT_FUNCTION(spl)
-{
- ZEND_INIT_MODULE_GLOBALS(spl, spl_init_globals, NULL);
-
- PHP_MINIT(spl_iterators)(INIT_FUNC_ARGS_PASSTHRU);
- PHP_MINIT(spl_array)(INIT_FUNC_ARGS_PASSTHRU);
- PHP_MINIT(spl_directory)(INIT_FUNC_ARGS_PASSTHRU);
- PHP_MINIT(spl_sxe)(INIT_FUNC_ARGS_PASSTHRU);
-
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ PHP_RINIT_FUNCTION(spl)
- */
-PHP_RINIT_FUNCTION(spl)
-{
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ PHP_RSHUTDOWN_FUNCTION(spl)
- */
-PHP_RSHUTDOWN_FUNCTION(spl)
-{
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ PHP_MSHUTDOWN_FUNCTION(spl)
- */
-PHP_MSHUTDOWN_FUNCTION(spl)
-{
- SPL_DEBUG(fprintf(stderr, "%s\n", "Shutting down SPL");)
-
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ class_parents
- */
-PHP_FUNCTION(class_parents)
-{
- zval *obj;
- zend_class_entry *parent_class;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "o", &obj) == FAILURE) {
- RETURN_FALSE;
- }
- array_init(return_value);
- parent_class = Z_OBJCE_P(obj)->parent;
- while (parent_class) {
- spl_add_class_name(return_value, parent_class, 0, 0 TSRMLS_CC);
- parent_class = parent_class->parent;
- }
-}
-/* }}} */
-
-/* {{{ class_implements
- */
-PHP_FUNCTION(class_implements)
-{
- zval *obj;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "o", &obj) == FAILURE) {
- RETURN_FALSE;
- }
- array_init(return_value);
- spl_add_interfaces(return_value, Z_OBJCE_P(obj), 1, ZEND_ACC_INTERFACE TSRMLS_CC);
-}
-/* }}} */
-
-#define SPL_ADD_CLASS(class_name, z_list, sub, allow, ce_flags) \
- spl_add_classes(&spl_ce_ ## class_name, z_list, sub, allow, ce_flags TSRMLS_CC)
-
-#define SPL_LIST_CLASSES(z_list, sub, allow, ce_flags) \
- SPL_ADD_CLASS(ArrayObject, z_list, sub, allow, ce_flags); \
- SPL_ADD_CLASS(ArrayIterator, z_list, sub, allow, ce_flags); \
- SPL_ADD_CLASS(CachingIterator, z_list, sub, allow, ce_flags); \
- SPL_ADD_CLASS(CachingRecursiveIterator, z_list, sub, allow, ce_flags); \
- SPL_ADD_CLASS(DirectoryIterator, z_list, sub, allow, ce_flags); \
- SPL_ADD_CLASS(FilterIterator, z_list, sub, allow, ce_flags); \
- SPL_ADD_CLASS(LimitIterator, z_list, sub, allow, ce_flags); \
- SPL_ADD_CLASS(ParentIterator, z_list, sub, allow, ce_flags); \
- SPL_ADD_CLASS(RecursiveDirectoryIterator, z_list, sub, allow, ce_flags); \
- SPL_ADD_CLASS(RecursiveIterator, z_list, sub, allow, ce_flags); \
- SPL_ADD_CLASS(RecursiveIteratorIterator, z_list, sub, allow, ce_flags); \
- SPL_ADD_CLASS(SeekableIterator, z_list, sub, allow, ce_flags); \
- SPL_ADD_CLASS(SimpleXMLIterator, z_list, sub, allow, ce_flags); \
-
-/* {{{ spl_classes */
-PHP_FUNCTION(spl_classes)
-{
- array_init(return_value);
-
- SPL_LIST_CLASSES(return_value, 0, 0, 0)
-}
-/* }}} */
-
-int spl_build_class_list_string(zval **entry, char **list TSRMLS_DC)
-{
- char *res;
-
- spprintf(&res, 0, "%s, %s", *list, Z_STRVAL_PP(entry));
- efree(*list);
- *list = res;
- return ZEND_HASH_APPLY_KEEP;
-}
-
-/* {{{ PHP_MINFO(spl)
- */
-PHP_MINFO_FUNCTION(spl)
-{
- zval list;
- char *strg;
-
- php_info_print_table_start();
- php_info_print_table_header(2, "SPL support", "enabled");
-
- INIT_PZVAL(&list);
- array_init(&list);
- SPL_LIST_CLASSES(&list, 0, 1, ZEND_ACC_INTERFACE)
- strg = estrdup("");
- zend_hash_apply_with_argument(Z_ARRVAL_P(&list), (apply_func_arg_t)spl_build_class_list_string, &strg TSRMLS_CC);
- zval_dtor(&list);
- php_info_print_table_row(2, "Interfaces", strg + 2);
- efree(strg);
-
- INIT_PZVAL(&list);
- array_init(&list);
- SPL_LIST_CLASSES(&list, 0, -1, ZEND_ACC_INTERFACE)
- strg = estrdup("");
- zend_hash_apply_with_argument(Z_ARRVAL_P(&list), (apply_func_arg_t)spl_build_class_list_string, &strg TSRMLS_CC);
- zval_dtor(&list);
- php_info_print_table_row(2, "Classes", strg + 2);
- efree(strg);
-
- php_info_print_table_end();
-}
-/* }}} */
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- * vim600: fdm=marker
- * vim: noet sw=4 ts=4
- */
diff --git a/ext/spl/php_spl.h b/ext/spl/php_spl.h
deleted file mode 100755
index 2e6bd2b62a..0000000000
--- a/ext/spl/php_spl.h
+++ /dev/null
@@ -1,83 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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. |
- +----------------------------------------------------------------------+
- | Authors: Marcus Boerger <helly@php.net> |
- +----------------------------------------------------------------------+
- */
-
-#ifndef PHP_SPL_H
-#define PHP_SPL_H
-
-#include "php.h"
-#include <stdarg.h>
-
-#if 0
-#define SPL_DEBUG(x) x
-#else
-#define SPL_DEBUG(x)
-#endif
-
-extern zend_module_entry spl_module_entry;
-#define phpext_spl_ptr &spl_module_entry
-
-#ifdef PHP_WIN32
-# ifdef SPL_EXPORTS
-# define SPL_API __declspec(dllexport)
-# elif defined(COMPILE_DL_SPL)
-# define SPL_API __declspec(dllimport)
-# else
-# define SPL_API /* nothing */
-# endif
-#else
-# define SPL_API
-#endif
-
-#if defined(PHP_WIN32) && !defined(COMPILE_DL_SPL)
-#undef phpext_spl
-#define phpext_spl NULL
-#endif
-
-PHP_MINIT_FUNCTION(spl);
-PHP_MSHUTDOWN_FUNCTION(spl);
-PHP_RINIT_FUNCTION(spl);
-PHP_RSHUTDOWN_FUNCTION(spl);
-PHP_MINFO_FUNCTION(spl);
-
-
-ZEND_BEGIN_MODULE_GLOBALS(spl)
- int dummy;
-ZEND_END_MODULE_GLOBALS(spl)
-
-#ifdef ZTS
-# define SPL_G(v) TSRMG(spl_globals_id, zend_spl_globals *, v)
-extern int spl_globals_id;
-#else
-# define SPL_G(v) (spl_globals.v)
-extern zend_spl_globals spl_globals;
-#endif
-
-PHP_FUNCTION(spl_classes);
-PHP_FUNCTION(class_parents);
-PHP_FUNCTION(class_implements);
-
-#endif /* PHP_SPL_H */
-
-/*
- * Local Variables:
- * c-basic-offset: 4
- * tab-width: 4
- * End:
- * vim600: fdm=marker
- * vim: noet sw=4 ts=4
- */
diff --git a/ext/spl/spl.php b/ext/spl/spl.php
deleted file mode 100755
index fc93d96dc8..0000000000
--- a/ext/spl/spl.php
+++ /dev/null
@@ -1,566 +0,0 @@
-<?php
-
-/** \file spl.php
- * \ingroup SPL
- * \brief Documentation of internal classes and interfaces
- *
- * SPL - Standard PHP Library
- *
- * (c) Marcus Boerger, 2003 - 2004
- */
-
-/** \mainpage SPL - Standard PHP Library
- *
- * SPL - Standard PHP Library
- *
- * You can download this documentation as a chm file
- * <a href="http://php.net/~helly/php/ext/spl/spl.chm">here</a>.
- *
- * (c) Marcus Boerger, 2003 - 2004
- */
-
-/** \defgroup SPL Internal classes
- *
- * The classes and interfaces in this group are contained in the c-code of
- * ext/SPL.
- */
-
-/** \defgroup Examples Example classes
- *
- * The classes and interfaces in this group are contained as PHP code in the
- * examples subdirectory of ext/SPL. Sooner or later they will be moved to
- * c-code.
- */
-
-/** \ingroup SPL
- * \brief Interface to override array access of objects.
- */
-interface ArrayAccess
-{
- /** \param $offset to modify
- * \param $value new value
- */
- function offsetSet($offset, $value);
-
- /** \param $offset to retrieve
- * \return value at given offset
- */
- function offsetGet($offset);
-
- /** \param $offset to delete
- */
- function offsetUnset($offset);
-
- /** \param $offset to check
- *\return whether the offset exists.
- */
- function offsetExists($offset);
-}
-
-/** \ingroup SPL
- * \brief Interface to detect a class is traversable using foreach.
- *
- * Abstract base interface that cannot be implemented alone. Instead it
- * must be implemented by either IteratorAggregate or Iterator.
- *
- * \note Internal classes that implement this interface can be used in a
- * foreach construct and do not need to implement IteratorAggregate or
- * Iterator.
- *
- * \note This is an engine internal interface which cannot be implemented
- * in PHP scripts. Either IteratorAggregate or Iterator must be used
- * instead.
- */
-interface Traversable
-{
-}
-
-/** \ingroup SPL
- * \brief Interface to create an external Iterator.
- *
- * \note This is an engine internal interface.
- */
-interface IteratorAggregate extends Traversable
-{
- /** \return an Iterator for the implementing object.
- */
- function getIterator();
-}
-
-/** \ingroup SPL
- * \brief Basic iterator
- *
- * Interface for external iterators or objects that can be iterated
- * themselves internally.
- *
- * \note This is an engine internal interface.
- */
-interface Iterator extends Traversable
-{
- /** Rewind the Iterator to the first element.
- */
- function rewind();
-
- /** Return the current element.
- */
- function current();
-
- /** Return the key of the current element.
- */
- function key();
-
- /** Move forward to next element.
- */
- function next();
-
- /** Check if there is a current element after calls to rewind() or next().
- */
- function valid();
-}
-
-/** \ingroup SPL
- * \brief Recursive iterator
- *
- * Interface for recursive traversal to be used with
- * RecursiveIteratorIterator.
- */
-interface RecursiveIterator extends Iterator
-{
- /** \return whether current element can be iterated itself.
- */
- function hasChildren();
-
- /** \return an object that recursively iterates the current element.
- * This object must implement RecursiveIterator.
- */
- function getChildren();
-}
-
-/** \ingroup SPL
- * \brief Class for recursive traversal.
- *
- * The objects of this class are created by instances of RecursiveIterator.
- * Elements of those iterators may be traversable themselves. If so these
- * sub elements are recursed into.
- */
-class RecursiveIteratorIterator implements Iterator
-{
- /** Construct an instance form a RecursiveIterator.
- *
- * \param $iterator inner root iterator
- * \param $mode one of
- * - RIT_LEAVES_ONLY do not return elements that can be recursed.
- * - RIT_SELF_FIRST show elements before their sub elements.
- * - RIT_CHILD_FIRST show elements after their sub elements.
- *
- * \note If you want to see only those elements which have sub elements then
- * use a ParentIterator.
- */
- function __construct(RecursiveIterator $iterator, $mode);
-
- /** \return the level of recursion (>=0).
- */
- function getDepth();
-
- /** \param $level the level of the sub iterator to return.
- * \return the current inner sub iterator or the iterator at the
- * specified $level.
- */
- function getSubIterator([$level]);
-}
-
-/** \ingroup SPL
- * \brief An Array wrapper
- *
- * This array wrapper allows to recursively iterate over Arrays and public
- * Object properties.
- *
- * \see ArrayIterator
- */
-class ArrayObject implements IteratorAggregate, ArrayAccess
-{
- /** Construct a new array iterator from anything that has a hash table.
- * That is any Array or Object.
- *
- * \param $array the array to use.
- */
- function __construct($array);
-
- /** \return the iterator which is an ArrayIterator object connected to
- * this object.
- */
- function getIterator();
-
- /** \param $index offset to inspect
- * \return whetehr offset $index esists
- */
- function offsetExists($index);
-
- /** \param $index offset to return value for
- * \return value at offset $index
- */
- function offsetGet($index);
-
- /** \param $index index to set
- * \param $newval new value to store at offset $index
- */
- function offsetSet($index, $newval);
-
- /** \param $index offset to unset
- */
- function offsetUnset($index);
-
- /** \param $value is appended as last element
- * \warning this method cannot be called when the ArrayObject refers to
- * an object.
- */
- function append($value);
-
- /** \return a \b copy of the array
- * \note when the ArrayObject refers to an object then this method
- * returns an array of the public properties.
- */
- function getArrayCopy();
-
- /** \return the number of elements in the array or the number of public
- * properties in the object.
- */
- function count();
-}
-
-/** \ingroup SPL
- * \brief An Array iterator
- *
- * This iterator allows to unset and modify values and keys while iterating
- * over Arrays and Objects.
- *
- * When you want to iterate over the same array multiple times you need to
- * instanciate ArrayObject and let it create ArrayIterator instances that
- * refer to it either by using foreach or by calling its getIterator()
- * method manually.
- */
-class ArrayIterator implements Iterator, SeekableIterator, ArrayAccess
-{
- /** Construct a new array iterator from anything that has a hash table.
- * That is any Array or Object.
- *
- * \param $array the array to use.
- */
- public function __construct($array);
-
- /** \param $index offset to inspect
- * \return whetehr offset $index esists
- */
- function offsetExists($index);
-
- /** \param $index offset to return value for
- * \return value at offset $index
- */
- function offsetGet($index);
-
- /** \param $index index to set
- * \param $newval new value to store at offset $index
- */
- function offsetSet($index, $newval);
-
- /** \param $index offset to unset
- */
- function offsetUnset($index);
-
- /** \param $value is appended as last element
- * \warning this method cannot be called when the ArrayIterator refers to
- * an object.
- */
- function append($value);
-
- /** \return a \b copy of the array
- * \note when the ArrayIterator refers to an object then this method
- * returns an array of the public properties.
- */
- function getArrayCopy();
-
- /** \param $position offset to seek to
- */
- function seek($position);
-
- /** \return the number of elements in the array or the number of public
- * properties in the object.
- */
- function count();
-}
-
-/** \ingroup SPL
- * \brief An iterator that filters other iterators
- *
- * Iterator that wrapps around another iterator and only returns selected
- * elements of the inner iterator. The only thing that needs to be done to
- * make this work is implementing method accept(). Typically this invloves
- * reading the current element or key of the inner Iterator and checking
- * whether it is acceptable.
- */
-abstract class FilterIterator implements Iterator
-{
- /** Construct an instance form a Iterator.
- *
- * \param $iterator inner iterator
- */
- function __construct(Iterator $iterator);
-
- /** \return whether the current element of the inner iterator should be
- * used as a current element of this iterator or if it should be skipped.
- */
- abstract function accept();
-
- /** \return the inner Iterator
- */
- function getInnerIterator();
-}
-
-/** \ingroup SPL
- * \brief Seekable iterator
- *
- * This interface is used to optimize LimitIterator functionality. but it
- * may also be used for other situations where seeking a specific offset is
- * required and easily possible.
- */
-interface SeekableIterator extends Iterator
-{
- /** Seek to a specific position if available or throw an exception.
- * \param $position offset to seek to.
- */
- function seek($position);
-}
-
-/** \ingroup SPL
- * \brief Limiting iterator
- *
- * A class that starts iteration at a certain offset and only iterates over
- * a specified amount of elements.
- *
- * This class uses SeekableIterator::seek() if available and rewind() plus
- * a skip loop otehrwise.
- */
-class LimitIetrator implements Iterator
-{
- /** Construct an instance form a Iterator.
- *
- * \param $iterator inner iterator
- * \param $offset starting position (zero based)
- * \param $count amount of elements returned, if available)
- */
- function __construct(Iterator $iterator, $offset = 0, $count = -1);
-
- /** \return whether the current element of the inner iterator should be
- * used as a current element of this iterator or if it should be skipped.
- */
- abstract function accept();
-
- /** \return the inner Iterator
- */
- function getInnerIterator();
-
- /** Seek to a specific position if available or throw an exception.
- * If the inner iterator is an instance of SeekableIterator its seek()
- * method will be used. Otherwise the iterator will be rewound if
- * necessary and then manually advanced element by element.
- *
- * \param $position index to seek to.
- */
- function seek($position);
-
- /** return the current position (zero based)
- */
- function getPosition();
-}
-
-/** \ingroup SPL
- * \brief Iterator that shows only parents
- *
- * A recursive iterator that only returns elements that themselves can be
- * trversed.
- */
-class ParentIterator extends FilterIterator implements RecursiveIterator
-{
- /** Construct an instance form a RecursiveIterator.
- *
- * \param $iterator inner iterator
- */
- function __construct(RecursiveIterator $iterator);
-}
-
-/** \ingroup SPL
- * \brief Caching iterator
- *
- * This Iterator allways reads one ahead. That allows it to know whether
- * more elements are available.
- */
-class CachingIterator implements Iterator
-{
- /** Construct an instance form a RecursiveIterator.
- *
- * \param $iterator inner iterator
- * \param $getStrVal whether to fetch the value returned by __toString()
- * or the (string) conversion. This is optional since
- * it is not always used nad takes an additional fcall.
- */
- function __construct(Iterator $iterator, $getStrVal = false);
-
- /** \return whether the inner iterator is valid. That is this iterator
- * is valid and has one more element.
- */
- function valid();
-
- /** \return The last value from the inner iterators __toString() or
- * (string) conversion. The value is only fetched when the __constructor
- * was called with $getStrVal = true.
- */
- function __tostring();
-
- /** \return the inner Iterator
- */
- function getInnerIterator();
-}
-
-/** \ingroup SPL
- * \brief The recursive version of the CachingIterator.
- */
-class CachingRecursiveIterator extends CachingIterator implements RecursiveIterator
-{
- /** Construct an instance form a RecursiveIterator.
- *
- * \param $iterator inner iterator
- * \param $getStrVal whether to fetch the value returned by __toString()
- * or the (string) conversion. This is optional since
- * it is not always used nad takes an additional fcall.
- */
- function __construct(RecursiveIterator $iterator, $getStrVal);
-}
-
-/** \ingroup SPL
- * \brief Directory iterator
- */
-class DirectoryIterator implements Iterator
-{
- /** Construct a directory iterator from a path-string.
- *
- * \param $path directory to iterate.
- */
- function __construct($path);
-
- /** \return The opened path.
- */
- function getPath();
-
- /** \return The current file name.
- */
- function getFilename();
-
- /** \return The current entries path and file name.
- */
- function getPathname();
-
- /** \return The current entry's permissions.
- */
- function getPerms();
-
- /** \return The current entry's inode.
- */
- function getInode();
-
- /** \return The current entry's size in bytes .
- */
- function getSize();
-
- /** \return The current entry's owner name.
- */
- function getOwner();
-
- /** \return The current entry's group name.
- */
- function getGroup();
-
- /** \return The current entry's last access time.
- */
- function getATime();
-
- /** \return The current entry's last modification time.
- */
- function getMTime();
-
- /** \return The current entry's last change time.
- */
- function getCTime();
-
- /** \return The current entry's size in bytes .
- */
- function getType();
-
- /** \return Whether the current entry is writeable.
- */
- function isWritable();
-
- /** \return Whether the current entry is readable.
- */
- function isReadable();
-
- /** \return Whether the current entry is executable.
- */
- function isExecutable();
-
- /** \return Whether the current entry is .
- */
- function isFile();
-
- /** \return Whether the current entry is a directory.
- */
- function isDir();
-
- /** \return Whether the current entry is either '.' or '..'.
- */
- function isDot();
-
- /** \return whether the current entry is a link.
- */
- function isLink();
-
- /** \return getFilename()
- */
- function __toString();
-}
-
-/** \ingroup SPL
- * \brief recursive directory iterator
- */
-class RecursiveDirectoryIterator extends DirectoryIterator implements RecursiveIterator
-{
- /** \return whether the current is a directory (not '.' or '..').
- */
- function hasChildren();
-
- /** \return a RecursiveDirectoryIterator for the current entry.
- */
- function getChildren();
-}
-
-/** \ingroup SPL
- * \brief recursive SimpleXML_Element iterator
- *
- * The SimpleXMLIterator implements the RecursiveIterator interface. This
- * allows iteration over all elements using foreach or an appropriate while
- * construct, just like SimpleXMLElement does. When using the foreach construct,
- * you will also iterate over the subelements. For every element which
- * has subelements, hasChildren() returns true. This will trigger a call to
- * getChildren() which returns the iterator for that sub element.
- */
-class SimpleXMLIterator extends SimpleXMLElement implements RecursiveIterator
-{
- /** \return whether the current node has sub nodes.
- */
- function hasChildren();
-
- /** \return a SimpleXMLIterator for the current node.
- */
- function getChildren();
-}
-
-?>
diff --git a/ext/spl/spl_array.c b/ext/spl/spl_array.c
deleted file mode 100755
index 34645a18ef..0000000000
--- a/ext/spl/spl_array.c
+++ /dev/null
@@ -1,899 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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. |
- +----------------------------------------------------------------------+
- | Authors: Marcus Boerger <helly@php.net> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-#ifdef HAVE_CONFIG_H
-# include "config.h"
-#endif
-
-#include "php.h"
-#include "php_ini.h"
-#include "ext/standard/info.h"
-#include "zend_interfaces.h"
-
-#include "php_spl.h"
-#include "spl_functions.h"
-#include "spl_engine.h"
-#include "spl_iterators.h"
-#include "spl_array.h"
-
-SPL_METHOD(Array, __construct);
-SPL_METHOD(Array, getIterator);
-SPL_METHOD(Array, rewind);
-SPL_METHOD(Array, current);
-SPL_METHOD(Array, key);
-SPL_METHOD(Array, next);
-SPL_METHOD(Array, valid);
-SPL_METHOD(Array, offsetExists);
-SPL_METHOD(Array, offsetGet);
-SPL_METHOD(Array, offsetSet);
-SPL_METHOD(Array, offsetUnset);
-SPL_METHOD(Array, append);
-SPL_METHOD(Array, getArrayCopy);
-SPL_METHOD(Array, seek);
-SPL_METHOD(Array, count);
-
-static
-ZEND_BEGIN_ARG_INFO(arginfo_array___construct, 0)
- ZEND_ARG_INFO(0, array)
-ZEND_END_ARG_INFO();
-
-static
-ZEND_BEGIN_ARG_INFO(arginfo_array_offsetGet, 0)
- ZEND_ARG_INFO(0, index)
-ZEND_END_ARG_INFO();
-
-static
-ZEND_BEGIN_ARG_INFO(arginfo_array_offsetSet, 0)
- ZEND_ARG_INFO(0, index)
- ZEND_ARG_INFO(0, newval)
-ZEND_END_ARG_INFO();
-
-static
-ZEND_BEGIN_ARG_INFO(arginfo_array_append, 0)
- ZEND_ARG_INFO(0, value)
-ZEND_END_ARG_INFO();
-
-static
-ZEND_BEGIN_ARG_INFO(arginfo_array_seek, 0)
- ZEND_ARG_INFO(0, position)
-ZEND_END_ARG_INFO();
-
-static zend_function_entry spl_funcs_ArrayObject[] = {
- SPL_ME(Array, __construct, arginfo_array___construct, ZEND_ACC_PUBLIC)
- SPL_ME(Array, offsetExists, arginfo_array_offsetGet, ZEND_ACC_PUBLIC)
- SPL_ME(Array, offsetGet, arginfo_array_offsetGet, ZEND_ACC_PUBLIC)
- SPL_ME(Array, offsetSet, arginfo_array_offsetSet, ZEND_ACC_PUBLIC)
- SPL_ME(Array, offsetUnset, arginfo_array_offsetGet, ZEND_ACC_PUBLIC)
- SPL_ME(Array, append, arginfo_array_append, ZEND_ACC_PUBLIC)
- SPL_ME(Array, getArrayCopy, NULL, ZEND_ACC_PUBLIC)
- SPL_ME(Array, count, NULL, ZEND_ACC_PUBLIC)
- /* ArrayObject specific */
- SPL_ME(Array, getIterator, NULL, ZEND_ACC_PUBLIC)
- {NULL, NULL, NULL}
-};
-
-static zend_function_entry spl_funcs_ArrayIterator[] = {
- SPL_ME(Array, __construct, arginfo_array___construct, ZEND_ACC_PUBLIC)
- SPL_ME(Array, offsetExists, arginfo_array_offsetGet, ZEND_ACC_PUBLIC)
- SPL_ME(Array, offsetGet, arginfo_array_offsetGet, ZEND_ACC_PUBLIC)
- SPL_ME(Array, offsetSet, arginfo_array_offsetSet, ZEND_ACC_PUBLIC)
- SPL_ME(Array, offsetUnset, arginfo_array_offsetGet, ZEND_ACC_PUBLIC)
- SPL_ME(Array, append, arginfo_array_append, ZEND_ACC_PUBLIC)
- SPL_ME(Array, getArrayCopy, NULL, ZEND_ACC_PUBLIC)
- SPL_ME(Array, count, NULL, ZEND_ACC_PUBLIC)
- /* ArrayIterator specific */
- SPL_ME(Array, rewind, NULL, ZEND_ACC_PUBLIC)
- SPL_ME(Array, current, NULL, ZEND_ACC_PUBLIC)
- SPL_ME(Array, key, NULL, ZEND_ACC_PUBLIC)
- SPL_ME(Array, next, NULL, ZEND_ACC_PUBLIC)
- SPL_ME(Array, valid, NULL, ZEND_ACC_PUBLIC)
- SPL_ME(Array, seek, arginfo_array_seek, ZEND_ACC_PUBLIC)
- {NULL, NULL, NULL}
-};
-
-
-zend_object_handlers spl_handler_ArrayObject;
-zend_class_entry * spl_ce_ArrayObject;
-
-zend_object_handlers spl_handler_ArrayIterator;
-zend_class_entry * spl_ce_ArrayIterator;
-
-typedef struct _spl_array_object {
- zend_object std;
- zval *array;
- HashPosition pos;
-} spl_array_object;
-
-/* {{{ spl_array_object_free_storage */
-static void spl_array_object_free_storage(void *object TSRMLS_DC)
-{
- spl_array_object *intern = (spl_array_object *)object;
-
- zend_hash_destroy(intern->std.properties);
- FREE_HASHTABLE(intern->std.properties);
-
- zval_ptr_dtor(&intern->array);
-
- efree(object);
-}
-/* }}} */
-
-/* {{{ spl_array_object_new */
-static zend_object_value spl_array_object_new_ex(zend_class_entry *class_type, spl_array_object **obj, spl_array_object *orig TSRMLS_DC)
-{
- zend_object_value retval;
- spl_array_object *intern;
- zval *tmp;
-
- intern = emalloc(sizeof(spl_array_object));
- memset(intern, 0, sizeof(spl_array_object));
- intern->std.ce = class_type;
- *obj = intern;
-
- ALLOC_HASHTABLE(intern->std.properties);
- zend_hash_init(intern->std.properties, 0, NULL, ZVAL_PTR_DTOR, 0);
- zend_hash_copy(intern->std.properties, &class_type->default_properties, (copy_ctor_func_t) zval_add_ref, (void *) &tmp, sizeof(zval *));
-
- if (orig) {
- intern->array = orig->array;
- ZVAL_ADDREF(intern->array);
- } else {
- MAKE_STD_ZVAL(intern->array);
- array_init(intern->array);
- }
- zend_hash_internal_pointer_reset_ex(HASH_OF(intern->array), &intern->pos);
-
- retval.handle = zend_objects_store_put(intern, NULL, (zend_objects_free_object_storage_t) spl_array_object_free_storage, NULL TSRMLS_CC);
- if (class_type == spl_ce_ArrayIterator) {
- retval.handlers = &spl_handler_ArrayIterator;
- } else {
- retval.handlers = &spl_handler_ArrayObject;
- }
- return retval;
-}
-/* }}} */
-
-/* {{{ spl_array_object_new */
-static zend_object_value spl_array_object_new(zend_class_entry *class_type TSRMLS_DC)
-{
- spl_array_object *tmp;
- return spl_array_object_new_ex(class_type, &tmp, NULL TSRMLS_CC);
-}
-/* }}} */
-
-/* {{{ spl_array_object_clone */
-static zend_object_value spl_array_object_clone(zval *zobject TSRMLS_DC)
-{
- zend_object_value new_obj_val;
- zend_object *old_object;
- zend_object *new_object;
- zend_object_handle handle = Z_OBJ_HANDLE_P(zobject);
- spl_array_object *intern;
-
- old_object = zend_objects_get_address(zobject TSRMLS_CC);
- new_obj_val = spl_array_object_new_ex(old_object->ce, &intern, (spl_array_object*)old_object TSRMLS_CC);
- new_object = &intern->std;
-
- zend_objects_clone_members(new_object, new_obj_val, old_object, handle TSRMLS_CC);
-
- return new_obj_val;
-}
-/* }}} */
-
-/* {{{ spl_array_read_dimension */
-static zval *spl_array_read_dimension(zval *object, zval *offset, int type TSRMLS_DC)
-{
- spl_array_object *intern = (spl_array_object*)zend_object_store_get_object(object TSRMLS_CC);
- zval **retval;
- long index;
-
- switch(Z_TYPE_P(offset)) {
- case IS_STRING:
- if (zend_symtable_find(HASH_OF(intern->array), 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);
- } else {
- return *retval;
- }
- case IS_DOUBLE:
- case IS_RESOURCE:
- case IS_BOOL:
- case IS_LONG:
- if (offset->type == IS_DOUBLE) {
- index = (long)Z_DVAL_P(offset);
- } else {
- index = Z_LVAL_P(offset);
- }
- if (zend_hash_index_find(HASH_OF(intern->array), index, (void **) &retval) == FAILURE) {
- zend_error(E_NOTICE, "Undefined offset: %ld", Z_LVAL_P(offset));
- return EG(uninitialized_zval_ptr);
- } else {
- return *retval;
- }
- break;
- default:
- zend_error(E_WARNING, "Illegal offset type");
- return EG(uninitialized_zval_ptr);
- }
-}
-/* }}} */
-
-/* {{{ spl_array_write_dimension */
-static void spl_array_write_dimension(zval *object, zval *offset, zval *value TSRMLS_DC)
-{
- spl_array_object *intern = (spl_array_object*)zend_object_store_get_object(object TSRMLS_CC);
- long index;
-
- if (!offset) {
- value->refcount++;
- zend_hash_next_index_insert(HASH_OF(intern->array), (void**)&value, sizeof(void*), NULL);
- return;
- }
- switch(Z_TYPE_P(offset)) {
- case IS_STRING:
- value->refcount++;
- zend_symtable_update(HASH_OF(intern->array), Z_STRVAL_P(offset), Z_STRLEN_P(offset)+1, (void**)&value, sizeof(void*), NULL);
- return;
- case IS_DOUBLE:
- case IS_RESOURCE:
- case IS_BOOL:
- case IS_LONG:
- if (offset->type == IS_DOUBLE) {
- index = (long)Z_DVAL_P(offset);
- } else {
- index = Z_LVAL_P(offset);
- }
- value->refcount++;
- zend_hash_index_update(HASH_OF(intern->array), index, (void**)&value, sizeof(void*), NULL);
- return;
- default:
- zend_error(E_WARNING, "Illegal offset type");
- return;
- }
-}
-/* }}} */
-
-/* {{{ spl_array_unset_dimension */
-static void spl_array_unset_dimension(zval *object, zval *offset TSRMLS_DC)
-{
- spl_array_object *intern = (spl_array_object*)zend_object_store_get_object(object TSRMLS_CC);
- long index;
-
- switch(Z_TYPE_P(offset)) {
- case IS_STRING:
- if (zend_symtable_del(HASH_OF(intern->array), Z_STRVAL_P(offset), Z_STRLEN_P(offset)+1) == FAILURE) {
- zend_error(E_NOTICE,"Undefined index: %s", Z_STRVAL_P(offset));
- }
- return;
- case IS_DOUBLE:
- case IS_RESOURCE:
- case IS_BOOL:
- case IS_LONG:
- if (offset->type == IS_DOUBLE) {
- index = (long)Z_DVAL_P(offset);
- } else {
- index = Z_LVAL_P(offset);
- }
- if (zend_hash_index_del(HASH_OF(intern->array), index) == FAILURE) {
- zend_error(E_NOTICE,"Undefined offset: %ld", Z_LVAL_P(offset));
- }
- return;
- default:
- zend_error(E_WARNING, "Illegal offset type");
- return;
- }
-}
-/* }}} */
-
-/* {{{ spl_array_has_dimension */
-static int spl_array_has_dimension(zval *object, zval *offset, int check_empty TSRMLS_DC)
-{
- spl_array_object *intern = (spl_array_object*)zend_object_store_get_object(object TSRMLS_CC);
- long index;
-
- switch(Z_TYPE_P(offset)) {
- case IS_STRING:
- return zend_symtable_exists(HASH_OF(intern->array), Z_STRVAL_P(offset), Z_STRLEN_P(offset)+1);
- case IS_DOUBLE:
- case IS_RESOURCE:
- case IS_BOOL:
- case IS_LONG:
- if (offset->type == IS_DOUBLE) {
- index = (long)Z_DVAL_P(offset);
- } else {
- index = Z_LVAL_P(offset);
- }
- return zend_hash_index_exists(HASH_OF(intern->array), index);
- default:
- zend_error(E_WARNING, "Illegal offset type");
- }
- return 0;
-}
-/* }}} */
-
-/* {{{ proto bool ArrayObject::offsetExists(mixed $index)
- proto bool ArrayIterator::offsetExists(mixed $index)
- Returns whether the requested $index exists. */
-SPL_METHOD(Array, offsetExists)
-{
- zval *index;
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z", &index) == FAILURE) {
- return;
- }
- RETURN_BOOL(spl_array_has_dimension(getThis(), index, 1 TSRMLS_CC));
-} /* }}} */
-
-/* {{{ proto bool ArrayObject::offsetGet(mixed $index)
- proto bool ArrayIterator::offsetGet(mixed $index)
- Returns the value at the specified $index. */
-SPL_METHOD(Array, offsetGet)
-{
- zval *index, *value;
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z", &index) == FAILURE) {
- return;
- }
- value = spl_array_read_dimension(getThis(), index, BP_VAR_R TSRMLS_CC);
- RETURN_ZVAL(value, 1, 0);
-} /* }}} */
-
-/* {{{ proto void ArrayObject::offsetSet(mixed $index, mixed $newval)
- proto void ArrayIterator::offsetSet(mixed $index, mixed $newval)
- Sets the value at the specified $index to $newval. */
-SPL_METHOD(Array, offsetSet)
-{
- zval *index, *value = NULL;
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "zz", &index, &value) == FAILURE) {
- return;
- }
- spl_array_write_dimension(getThis(), index, value TSRMLS_CC);
-} /* }}} */
-
-/* {{{ proto void ArrayObject::append(mixed $newval)
- proto void ArrayIterator::append(mixed $newval)
- Appends the value (cannot be called for objects). */
-SPL_METHOD(Array, append)
-{
- zval *object = getThis();
- spl_array_object *intern = (spl_array_object*)zend_object_store_get_object(object TSRMLS_CC);
- HashTable *aht = HASH_OF(intern->array);
-
- zval *value;
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z", &value) == FAILURE) {
- return;
- }
-
- if (!aht) {
- php_error_docref(NULL TSRMLS_CC, E_NOTICE, "Array was modified outside object and is no longer an array");
- return;
- }
-
- if (Z_TYPE_P(intern->array) == IS_OBJECT) {
- php_error_docref(NULL TSRMLS_CC, E_ERROR, "Cannot append properties to objects, use %s::offsetSet() instead", Z_OBJCE_P(object)->name);
- }
-
- spl_array_write_dimension(object, NULL, value TSRMLS_CC);
- if (!intern->pos) {
- intern->pos = aht->pListTail;
- }
-} /* }}} */
-
-/* {{{ proto void ArrayObject::offsetUnset(mixed $index)
- proto void ArrayIterator::offsetUnset(mixed $index)
- Unsets the value at the specified $index. */
-SPL_METHOD(Array, offsetUnset)
-{
- zval *index;
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z", &index) == FAILURE) {
- return;
- }
- spl_array_unset_dimension(getThis(), index TSRMLS_CC);
-} /* }}} */
-
-/* {{ proto array ArrayObject::getArrayCopy()
- proto array ArrayIterator::getArrayCopy()
- Return a copy of the contained array */
-SPL_METHOD(Array, getArrayCopy)
-{
- zval *object = getThis(), *tmp;
- spl_array_object *intern = (spl_array_object*)zend_object_store_get_object(object TSRMLS_CC);
-
- array_init(return_value);
- zend_hash_copy(HASH_OF(return_value), HASH_OF(intern->array), (copy_ctor_func_t) zval_add_ref, &tmp, sizeof(zval*));
-} /* }}} */
-
-/* {{{ spl_array_get_properties */
-static HashTable *spl_array_get_properties(zval *object TSRMLS_DC)
-{
- spl_array_object *intern = (spl_array_object*)zend_object_store_get_object(object TSRMLS_CC);
-
- return HASH_OF(intern->array);
-}
-/* }}} */
-
-SPL_API int spl_hash_verify_pos(spl_array_object * intern TSRMLS_DC) /* {{{ */
-{
- HashTable *ht = HASH_OF(intern->array);
- Bucket *p;
-
-/* IS_CONSISTENT(ht);*/
-
-/* HASH_PROTECT_RECURSION(ht);*/
- p = ht->pListHead;
- while (p != NULL) {
- if (p == intern->pos) {
- return SUCCESS;
- }
- p = p->pListNext;
- }
-/* HASH_UNPROTECT_RECURSION(ht); */
- zend_hash_internal_pointer_reset_ex(HASH_OF(intern->array), &intern->pos);
- return FAILURE;
-}
-/* }}} */
-
-static int spl_array_skip_protected(spl_array_object *intern TSRMLS_DC) /* {{{ */
-{
- char *string_key;
- uint string_length;
- ulong num_key;
- HashTable *aht = HASH_OF(intern->array);
-
- if (Z_TYPE_P(intern->array) == IS_OBJECT) {
- do {
- if (zend_hash_get_current_key_ex(aht, &string_key, &string_length, &num_key, 0, &intern->pos) == HASH_KEY_IS_STRING) {
- if (!string_length || string_key[0]) {
- return SUCCESS;
- }
- } else {
- return SUCCESS;
- }
- if (zend_hash_has_more_elements_ex(aht, &intern->pos) != SUCCESS) {
- return FAILURE;
- }
- zend_hash_move_forward_ex(aht, &intern->pos);
- } while (1);
- }
- return FAILURE;
-}
-/* }}} */
-
-static int spl_array_next(spl_array_object *intern TSRMLS_DC) /* {{{ */
-{
- HashTable *aht = HASH_OF(intern->array);
-
- zend_hash_move_forward_ex(aht, &intern->pos);
- if (Z_TYPE_P(intern->array) == IS_OBJECT) {
- return spl_array_skip_protected(intern TSRMLS_CC);
- } else {
- return zend_hash_has_more_elements_ex(aht, &intern->pos);
- }
-} /* }}} */
-
-/* define an overloaded iterator structure */
-typedef struct {
- zend_object_iterator intern;
- spl_array_object *object;
-} spl_array_it;
-
-static void spl_array_it_dtor(zend_object_iterator *iter TSRMLS_DC) /* {{{ */
-{
- spl_array_it *iterator = (spl_array_it *)iter;
-
- zval_ptr_dtor((zval**)&iterator->intern.data);
-
- efree(iterator);
-}
-/* }}} */
-
-static int spl_array_it_valid(zend_object_iterator *iter TSRMLS_DC) /* {{{ */
-{
- spl_array_it *iterator = (spl_array_it *)iter;
- spl_array_object *object = iterator->object;
- HashTable *aht = HASH_OF(object->array);
-
- if (!aht) {
- php_error_docref(NULL TSRMLS_CC, E_NOTICE, "ArrayIterator::valid(): Array was modified outside object and is no longer an array");
- return FAILURE;
- }
-
- if (object->pos && object->array->is_ref && spl_hash_verify_pos(object TSRMLS_CC) == FAILURE) {
- php_error_docref(NULL TSRMLS_CC, E_NOTICE, "ArrayIterator::valid(): Array was modified outside object and internal position is no longer valid");
- return FAILURE;
- } else {
- return zend_hash_has_more_elements_ex(aht, &object->pos);
- }
-}
-/* }}} */
-
-static void spl_array_it_get_current_data(zend_object_iterator *iter, zval ***data TSRMLS_DC) /* {{{ */
-{
- spl_array_it *iterator = (spl_array_it *)iter;
- spl_array_object *object = iterator->object;
- HashTable *aht = HASH_OF(object->array);
-
- if (zend_hash_get_current_data_ex(aht, (void**)data, &object->pos) == FAILURE) {
- *data = NULL;
- }
-}
-/* }}} */
-
-static int spl_array_it_get_current_key(zend_object_iterator *iter, char **str_key, uint *str_key_len, ulong *int_key TSRMLS_DC) /* {{{ */
-{
- spl_array_it *iterator = (spl_array_it *)iter;
- spl_array_object *object = iterator->object;
- HashTable *aht = HASH_OF(object->array);
-
- if (!aht) {
- php_error_docref(NULL TSRMLS_CC, E_NOTICE, "ArrayIterator::current(): Array was modified outside object and is no longer an array");
- return HASH_KEY_NON_EXISTANT;
- }
-
- if (object->array->is_ref && spl_hash_verify_pos(object TSRMLS_CC) == FAILURE) {
- php_error_docref(NULL TSRMLS_CC, E_NOTICE, "ArrayIterator::current(): Array was modified outside object and internal position is no longer valid");
- return HASH_KEY_NON_EXISTANT;
- }
-
- return zend_hash_get_current_key_ex(aht, str_key, str_key_len, int_key, 1, &object->pos);
-}
-/* }}} */
-
-static void spl_array_it_move_forward(zend_object_iterator *iter TSRMLS_DC) /* {{{ */
-{
- spl_array_it *iterator = (spl_array_it *)iter;
- spl_array_object *object = iterator->object;
-
- HashTable *aht = HASH_OF(object->array);
-
- if (!aht) {
- php_error_docref(NULL TSRMLS_CC, E_NOTICE, "ArrayIterator::current(): Array was modified outside object and is no longer an array");
- return;
- }
-
- if (object->array->is_ref && spl_hash_verify_pos(object TSRMLS_CC) == FAILURE) {
- php_error_docref(NULL TSRMLS_CC, E_NOTICE, "ArrayIterator::next(): Array was modified outside object and internal position is no longer valid");
- } else {
- spl_array_next(object TSRMLS_CC);
- }
-}
-/* }}} */
-
-static void spl_array_it_rewind(zend_object_iterator *iter TSRMLS_DC) /* {{{ */
-{
- spl_array_it *iterator = (spl_array_it *)iter;
- spl_array_object *object = iterator->object;
- HashTable *aht = HASH_OF(object->array);
-
- if (!aht) {
- php_error_docref(NULL TSRMLS_CC, E_NOTICE, "ArrayIterator::rewind(): Array was modified outside object and is no longer an array");
- return;
- }
-
- zend_hash_internal_pointer_reset_ex(aht, &object->pos);
- spl_array_skip_protected(object TSRMLS_CC);
-}
-/* }}} */
-
-/* iterator handler table */
-zend_object_iterator_funcs spl_array_it_funcs = {
- spl_array_it_dtor,
- spl_array_it_valid,
- spl_array_it_get_current_data,
- spl_array_it_get_current_key,
- spl_array_it_move_forward,
- spl_array_it_rewind
-};
-
-zend_object_iterator *spl_array_get_iterator(zend_class_entry *ce, zval *object TSRMLS_DC) /* {{{ */
-{
- spl_array_it *iterator = emalloc(sizeof(spl_array_it));
- spl_array_object *array_object = (spl_array_object*)zend_object_store_get_object(object TSRMLS_CC);
-
- object->refcount++;
- iterator->intern.data = (void*)object;
- iterator->intern.funcs = &spl_array_it_funcs;
- iterator->object = array_object;
-
- return (zend_object_iterator*)iterator;
-}
-/* }}} */
-
-/* {{{ proto void ArrayObject::__construct(array|object ar = array())
- proto void ArrayIterator::__construct(array|object ar = array())
- Cronstructs a new array iterator from a path. */
-SPL_METHOD(Array, __construct)
-{
- zval *object = getThis();
- spl_array_object *intern;
- zval **array;
-
- if (ZEND_NUM_ARGS() == 0) {
- return; /* nothing to do */
- }
-/* exceptions do not work yet
- php_set_error_handling(EH_THROW, zend_exception_get_default() TSRMLS_CC);*/
-
- intern = (spl_array_object*)zend_object_store_get_object(object TSRMLS_CC);
-
- if (ZEND_NUM_ARGS() > 1 || zend_get_parameters_ex(1, &array) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- if (Z_TYPE_PP(array) == IS_OBJECT && (Z_OBJ_HT_PP(array) == &spl_handler_ArrayObject || Z_OBJ_HT_PP(array) == &spl_handler_ArrayIterator)) {
- spl_array_object *other = (spl_array_object*)zend_object_store_get_object(*array TSRMLS_CC);
- zval_dtor(intern->array);
- FREE_ZVAL(intern->array);
- intern->array = other->array;
- } else {
- if (!HASH_OF(*array)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Passed variable is not an array or object, using empty array instead");
- php_set_error_handling(EH_NORMAL, NULL TSRMLS_CC);
- return;
- }
- zval_dtor(intern->array);
- FREE_ZVAL(intern->array);
- intern->array = *array;
- }
- ZVAL_ADDREF(intern->array);
-
- zend_hash_internal_pointer_reset_ex(HASH_OF(intern->array), &intern->pos);
-
- php_set_error_handling(EH_NORMAL, NULL TSRMLS_CC);
-}
-/* }}} */
-
-/* {{{ proto ArrayIterator ArrayObject::getIterator()
- Create a new iterator from a ArrayObject instance */
-SPL_METHOD(Array, getIterator)
-{
- zval *object = getThis();
- spl_array_object *intern = (spl_array_object*)zend_object_store_get_object(object TSRMLS_CC);
- spl_array_object *iterator;
- HashTable *aht = HASH_OF(intern->array);
-
- if (!aht) {
- php_error_docref(NULL TSRMLS_CC, E_NOTICE, "Array was modified outside object and is no longer an array");
- return;
- }
-
- return_value->type = IS_OBJECT;
- return_value->value.obj = spl_array_object_new_ex(spl_ce_ArrayIterator, &iterator, intern TSRMLS_CC);
- return_value->refcount = 1;
- return_value->is_ref = 1;
-}
-/* }}} */
-
-/* {{{ proto void ArrayIterator::rewind()
- Rewind array back to the start */
-SPL_METHOD(Array, rewind)
-{
- zval *object = getThis();
- spl_array_object *intern = (spl_array_object*)zend_object_store_get_object(object TSRMLS_CC);
- HashTable *aht = HASH_OF(intern->array);
-
- if (!aht) {
- php_error_docref(NULL TSRMLS_CC, E_NOTICE, "Array was modified outside object and is no longer an array");
- return;
- }
-
- zend_hash_internal_pointer_reset_ex(aht, &intern->pos);
- spl_array_skip_protected(intern TSRMLS_CC);
-}
-/* }}} */
-
-/* {{{ proto void ArrayIterator::seek(int $position)
- Seek to position. */
-SPL_METHOD(Array, seek)
-{
- long position;
- zval *object = getThis();
- spl_array_object *intern = (spl_array_object*)zend_object_store_get_object(object TSRMLS_CC);
- HashTable *aht = HASH_OF(intern->array);
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &position) == FAILURE) {
- return;
- }
-
- if (!aht) {
- php_error_docref(NULL TSRMLS_CC, E_NOTICE, "Array was modified outside object and is no longer an array");
- return;
- }
-
- zend_hash_internal_pointer_reset_ex(aht, &intern->pos);
-
- while (position-- > 0 && spl_array_next(intern TSRMLS_CC) == SUCCESS);
-} /* }}} */
-
-int spl_array_object_count_elements(zval *object, long *count TSRMLS_DC) /* {{{ */
-{
- spl_array_object *intern = (spl_array_object*)zend_object_store_get_object(object TSRMLS_CC);
- HashTable *aht = HASH_OF(intern->array);
- HashPosition pos;
-
- if (!aht) {
- php_error_docref(NULL TSRMLS_CC, E_NOTICE, "Array was modified outside object and is no longer an array");
- *count = 0;
- return FAILURE;
- }
-
- if (Z_TYPE_P(intern->array) == IS_OBJECT) {
- /* We need to store the 'pos' since we'll modify it in the functions
- * we're going to call and which do not support 'pos' as parameter. */
- pos = intern->pos;
- *count = 0;
- zend_hash_internal_pointer_reset_ex(aht, &intern->pos);
- while(intern->pos && spl_array_next(intern TSRMLS_CC) == SUCCESS) {
- (*count)++;
- }
- intern->pos = pos;
- return SUCCESS;
- } else {
- *count = zend_hash_num_elements(aht);
- return SUCCESS;
- }
-} /* }}} */
-
-/* {{{ proto int ArrayObject::count()
- proto int ArrayIterator::count()
- Return the number of elements in the Iterator. */
-SPL_METHOD(Array, count)
-{
- long count;
-
- spl_array_object_count_elements(getThis(), &count TSRMLS_CC);
- RETURN_LONG(count);
-} /* }}} */
-
-/* {{{ proto mixed|NULL ArrayIterator::current()
- Return current array entry */
-SPL_METHOD(Array, current)
-{
- zval *object = getThis();
- spl_array_object *intern = (spl_array_object*)zend_object_store_get_object(object TSRMLS_CC);
- zval **entry;
- HashTable *aht = HASH_OF(intern->array);
-
- if (!aht) {
- php_error_docref(NULL TSRMLS_CC, E_NOTICE, "Array was modified outside object and is no longer an array");
- return;
- }
-
- if (intern->array->is_ref && spl_hash_verify_pos(intern TSRMLS_CC) == FAILURE) {
- php_error_docref(NULL TSRMLS_CC, E_NOTICE, "Array was modified outside object and internal position is no longer valid");
- return;
- }
-
- if (zend_hash_get_current_data_ex(aht, (void **) &entry, &intern->pos) == FAILURE) {
- return;
- }
- *return_value = **entry;
- zval_copy_ctor(return_value);
-}
-/* }}} */
-
-/* {{{ proto mixed|NULL ArrayIterator::key()
- Return current array key */
-SPL_METHOD(Array, key)
-{
- zval *object = getThis();
- spl_array_object *intern = (spl_array_object*)zend_object_store_get_object(object TSRMLS_CC);
- char *string_key;
- uint string_length;
- ulong num_key;
- HashTable *aht = HASH_OF(intern->array);
-
- if (!aht) {
- php_error_docref(NULL TSRMLS_CC, E_NOTICE, "Array was modified outside object and is no longer an array");
- return;
- }
-
- if (intern->array->is_ref && spl_hash_verify_pos(intern TSRMLS_CC) == FAILURE) {
- php_error_docref(NULL TSRMLS_CC, E_NOTICE, "Array was modified outside object and internal position is no longer valid");
- return;
- }
-
- switch (zend_hash_get_current_key_ex(aht, &string_key, &string_length, &num_key, 1, &intern->pos)) {
- case HASH_KEY_IS_STRING:
- RETVAL_STRINGL(string_key, string_length - 1, 0);
- break;
- case HASH_KEY_IS_LONG:
- RETVAL_LONG(num_key);
- break;
- case HASH_KEY_NON_EXISTANT:
- return;
- }
-}
-/* }}} */
-
-/* {{{ proto void ArrayIterator::next()
- Move to next entry */
-SPL_METHOD(Array, next)
-{
- zval *object = getThis();
- spl_array_object *intern = (spl_array_object*)zend_object_store_get_object(object TSRMLS_CC);
- HashTable *aht = HASH_OF(intern->array);
-
- if (!aht) {
- php_error_docref(NULL TSRMLS_CC, E_NOTICE, "Array was modified outside object and is no longer an array");
- return;
- }
-
- if (intern->array->is_ref && spl_hash_verify_pos(intern TSRMLS_CC) == FAILURE) {
- php_error_docref(NULL TSRMLS_CC, E_NOTICE, "Array was modified outside object and internal position is no longer valid");
- } else {
- spl_array_next(intern TSRMLS_CC);
- }
-}
-/* }}} */
-
-/* {{{ proto bool ArrayIterator::valid()
- Check whether array contains more entries */
-SPL_METHOD(Array, valid)
-{
- zval *object = getThis();
- spl_array_object *intern = (spl_array_object*)zend_object_store_get_object(object TSRMLS_CC);
- HashTable *aht = HASH_OF(intern->array);
-
- if (!aht) {
- php_error_docref(NULL TSRMLS_CC, E_NOTICE, "Array was modified outside object and is no longer an array");
- return;
- }
-
- if (intern->pos && intern->array->is_ref && spl_hash_verify_pos(intern TSRMLS_CC) == FAILURE) {
- php_error_docref(NULL TSRMLS_CC, E_NOTICE, "Array was modified outside object and internal position is no longer valid");
- RETURN_FALSE;
- } else {
- RETURN_BOOL(zend_hash_has_more_elements_ex(aht, &intern->pos) == SUCCESS);
- }
-}
-/* }}} */
-
-/* {{{ PHP_MINIT_FUNCTION(spl_array) */
-PHP_MINIT_FUNCTION(spl_array)
-{
- REGISTER_SPL_STD_CLASS_EX(ArrayObject, spl_array_object_new, spl_funcs_ArrayObject);
- zend_class_implements(spl_ce_ArrayObject TSRMLS_CC, 1, zend_ce_aggregate);
- zend_class_implements(spl_ce_ArrayObject TSRMLS_CC, 1, zend_ce_arrayaccess);
- memcpy(&spl_handler_ArrayObject, zend_get_std_object_handlers(), sizeof(zend_object_handlers));
- spl_handler_ArrayObject.clone_obj = spl_array_object_clone;
- spl_handler_ArrayObject.read_dimension = spl_array_read_dimension;
- spl_handler_ArrayObject.write_dimension = spl_array_write_dimension;
- spl_handler_ArrayObject.unset_dimension = spl_array_unset_dimension;
- spl_handler_ArrayObject.has_dimension = spl_array_has_dimension;
- spl_handler_ArrayObject.get_properties = spl_array_get_properties;
- spl_handler_ArrayObject.count_elements = spl_array_object_count_elements;
-
- REGISTER_SPL_STD_CLASS_EX(ArrayIterator, spl_array_object_new, spl_funcs_ArrayIterator);
- zend_class_implements(spl_ce_ArrayIterator TSRMLS_CC, 1, zend_ce_iterator);
- zend_class_implements(spl_ce_ArrayIterator TSRMLS_CC, 1, zend_ce_arrayaccess);
- REGISTER_SPL_IMPLEMENTS(ArrayIterator, SeekableIterator);
- memcpy(&spl_handler_ArrayIterator, &spl_handler_ArrayObject, sizeof(zend_object_handlers));
- spl_ce_ArrayIterator->get_iterator = spl_array_get_iterator;
-
- return SUCCESS;
-}
-/* }}} */
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- * vim600: fdm=marker
- * vim: noet sw=4 ts=4
- */
diff --git a/ext/spl/spl_array.h b/ext/spl/spl_array.h
deleted file mode 100755
index 1e9b402dcb..0000000000
--- a/ext/spl/spl_array.h
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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. |
- +----------------------------------------------------------------------+
- | Authors: Marcus Boerger <helly@php.net> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-#ifndef SPL_ARRAY_H
-#define SPL_ARRAY_H
-
-#include "php.h"
-#include "php_spl.h"
-
-extern zend_class_entry *spl_ce_ArrayObject;
-extern zend_class_entry *spl_ce_ArrayIterator;
-
-PHP_MINIT_FUNCTION(spl_array);
-
-#endif /* SPL_ARRAY_H */
-
-/*
- * Local Variables:
- * c-basic-offset: 4
- * tab-width: 4
- * End:
- * vim600: fdm=marker
- * vim: noet sw=4 ts=4
- */
diff --git a/ext/spl/spl_directory.c b/ext/spl/spl_directory.c
deleted file mode 100755
index 11c09a26be..0000000000
--- a/ext/spl/spl_directory.c
+++ /dev/null
@@ -1,803 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Marcus Boerger <helly@php.net> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-#ifdef HAVE_CONFIG_H
-# include "config.h"
-#endif
-
-#include "php.h"
-#include "php_ini.h"
-#include "ext/standard/info.h"
-#include "zend_compile.h"
-#include "zend_exceptions.h"
-#include "zend_interfaces.h"
-
-#include "php_spl.h"
-#include "spl_functions.h"
-#include "spl_engine.h"
-#include "spl_iterators.h"
-#include "spl_directory.h"
-
-#include "php.h"
-#include "fopen_wrappers.h"
-
-#include "ext/standard/basic_functions.h"
-#include "ext/standard/php_filestat.h"
-
-/* declare the class handlers */
-static zend_object_handlers spl_ce_dir_handlers;
-
-
-/* decalre the class entry */
-zend_class_entry *spl_ce_DirectoryIterator;
-zend_class_entry *spl_ce_RecursiveDirectoryIterator;
-
-
-/* {{{ spl_ce_dir_object_free_storage */
-/* close all resources and the memory allocated for the object */
-static void spl_ce_dir_object_free_storage(void *object TSRMLS_DC)
-{
- spl_ce_dir_object *intern = (spl_ce_dir_object *)object;
-
- zend_hash_destroy(intern->std.properties);
- FREE_HASHTABLE(intern->std.properties);
-
- if (intern->path) {
- efree(intern->path);
- }
- if (intern->dirp) {
- php_stream_close(intern->dirp);
- }
- if (intern->path_name) {
- efree(intern->path_name);
- }
- efree(object);
-}
-/* }}} */
-
-
-/* {{{ spl_ce_dir_object_new */
-/* creates the object by
- - allocating memory
- - initializing the object members
- - storing the object
- - setting it's handlers
-
- called from
- - clone
- - new
- */
-static zend_object_value spl_ce_dir_object_new_ex(zend_class_entry *class_type, spl_ce_dir_object **obj TSRMLS_DC)
-{
- zend_object_value retval;
- spl_ce_dir_object *intern;
- zval *tmp;
-
- intern = emalloc(sizeof(spl_ce_dir_object));
- memset(intern, 0, sizeof(spl_ce_dir_object));
- intern->std.ce = class_type;
- *obj = intern;
-
- ALLOC_HASHTABLE(intern->std.properties);
- zend_hash_init(intern->std.properties, 0, NULL, ZVAL_PTR_DTOR, 0);
- zend_hash_copy(intern->std.properties, &class_type->default_properties, (copy_ctor_func_t) zval_add_ref, (void *) &tmp, sizeof(zval *));
-
- retval.handle = zend_objects_store_put(intern, NULL, (zend_objects_free_object_storage_t) spl_ce_dir_object_free_storage, NULL TSRMLS_CC);
- retval.handlers = &spl_ce_dir_handlers;
- return retval;
-}
-/* }}} */
-
-
-/* {{{ spl_ce_dir_object_new */
-/* See spl_ce_dir_object_new_ex */
-static zend_object_value spl_ce_dir_object_new(zend_class_entry *class_type TSRMLS_DC)
-{
- spl_ce_dir_object *tmp;
- return spl_ce_dir_object_new_ex(class_type, &tmp TSRMLS_CC);
-}
-/* }}} */
-
-
-/* {{{ spl_ce_dir_open */
-/* open a directory resource */
-static void spl_ce_dir_open(spl_ce_dir_object* intern, char *path TSRMLS_DC)
-{
- intern->dirp = php_stream_opendir(path, ENFORCE_SAFE_MODE|REPORT_ERRORS, NULL);
-
- intern->path = estrdup(path);
- intern->index = 0;
-
- if (intern->dirp == NULL) {
- /* throw exception: should've been already happened */
- intern->entry.d_name[0] = '\0';
- } else {
- if (!php_stream_readdir(intern->dirp, &intern->entry)) {
- intern->entry.d_name[0] = '\0';
- }
- }
-}
-/* }}} */
-
-/* {{{ spl_ce_dir_object_clone */
-/* Local zend_object_value creation (on stack)
- Load the 'other' object
- Create a new empty object (See spl_ce_dir_object_new_ex)
- Open the directory
- Clone other members (properties)
- */
-static zend_object_value spl_ce_dir_object_clone(zval *zobject TSRMLS_DC)
-{
- zend_object_value new_obj_val;
- zend_object *old_object;
- zend_object *new_object;
- zend_object_handle handle = Z_OBJ_HANDLE_P(zobject);
- spl_ce_dir_object *intern;
-
- old_object = zend_objects_get_address(zobject TSRMLS_CC);
- new_obj_val = spl_ce_dir_object_new_ex(old_object->ce, &intern TSRMLS_CC);
- new_object = &intern->std;
-
- spl_ce_dir_open(intern, ((spl_ce_dir_object*)old_object)->path TSRMLS_CC);
-
- zend_objects_clone_members(new_object, new_obj_val, old_object, handle TSRMLS_CC);
-
- return new_obj_val;
-}
-/* }}} */
-
-/* {{{ proto void DirectoryIterator::__construct(string path)
- Cronstructs a new dir iterator from a path. */
-/* php_set_error_handling() is used to throw exceptions in case
- the constructor fails. Here we use this to ensure the object
- has a valid directory resource.
-
- When the constructor gets called the object is already created
- by the engine, so we must only call 'additional' initializations.
- */
-SPL_METHOD(DirectoryIterator, __construct)
-{
- zval *object = getThis();
- spl_ce_dir_object *intern;
- char *path;
- int len;
-
- php_set_error_handling(EH_THROW, zend_exception_get_default() TSRMLS_CC);
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &path, &len) == FAILURE) {
- php_set_error_handling(EH_NORMAL, NULL TSRMLS_CC);
- return;
- }
-
- intern = (spl_ce_dir_object*)zend_object_store_get_object(object TSRMLS_CC);
- spl_ce_dir_open(intern, path TSRMLS_CC);
-
- php_set_error_handling(EH_NORMAL, NULL TSRMLS_CC);
-}
-/* }}} */
-
-/* {{{ proto void DirectoryIterator::rewind()
- Rewind dir back to the start */
-SPL_METHOD(DirectoryIterator, rewind)
-{
- zval *object = getThis();
- spl_ce_dir_object *intern = (spl_ce_dir_object*)zend_object_store_get_object(object TSRMLS_CC);
-
- intern->index = 0;
- if (intern->dirp) {
- php_stream_rewinddir(intern->dirp);
- }
- if (!intern->dirp || !php_stream_readdir(intern->dirp, &intern->entry)) {
- intern->entry.d_name[0] = '\0';
- }
-}
-/* }}} */
-
-/* {{{ proto string DirectoryIterator::key()
- Return current dir entry */
-SPL_METHOD(DirectoryIterator, key)
-{
- zval *object = getThis();
- spl_ce_dir_object *intern = (spl_ce_dir_object*)zend_object_store_get_object(object TSRMLS_CC);
-
- if (intern->dirp) {
- RETURN_LONG(intern->index);
- } else {
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-/* {{{ proto DirectoryIterator DirectoryIterator::current()
- Return this (needed for Iterator interface) */
-SPL_METHOD(DirectoryIterator, current)
-{
- RETURN_ZVAL(getThis(), 1, 0);
-}
-/* }}} */
-
-/* {{{ proto void DirectoryIterator::next()
- Move to next entry */
-SPL_METHOD(DirectoryIterator, next)
-{
- zval *object = getThis();
- spl_ce_dir_object *intern = (spl_ce_dir_object*)zend_object_store_get_object(object TSRMLS_CC);
-
- intern->index++;
- if (!intern->dirp || !php_stream_readdir(intern->dirp, &intern->entry)) {
- intern->entry.d_name[0] = '\0';
- }
- if (intern->path_name) {
- efree(intern->path_name);
- intern->path_name = NULL;
- }
-}
-/* }}} */
-
-/* {{{ proto string DirectoryIterator::valid()
- Check whether dir contains more entries */
-SPL_METHOD(DirectoryIterator, valid)
-{
- zval *object = getThis();
- spl_ce_dir_object *intern = (spl_ce_dir_object*)zend_object_store_get_object(object TSRMLS_CC);
-
- RETURN_BOOL(intern->entry.d_name[0] != '\0');
-}
-/* }}} */
-
-/* {{{ proto string DirectoryIterator::getPath()
- Return directory path */
-SPL_METHOD(DirectoryIterator, getPath)
-{
- zval *object = getThis();
- spl_ce_dir_object *intern = (spl_ce_dir_object*)zend_object_store_get_object(object TSRMLS_CC);
-
- RETURN_STRING(intern->path, 1);
-}
-/* }}} */
-
-/* {{{ proto string DirectoryIterator::getFilename()
- Return filename of current dir entry */
-SPL_METHOD(DirectoryIterator, getFilename)
-{
- zval *object = getThis();
- spl_ce_dir_object *intern = (spl_ce_dir_object*)zend_object_store_get_object(object TSRMLS_CC);
-
- RETURN_STRING(intern->entry.d_name, 1);
-}
-/* }}} */
-
-static inline void spl_dir_get_path_name(spl_ce_dir_object *intern)
-{
- if (!intern->path_name) {
- intern->path_name_len = spprintf(&intern->path_name, 0, "%s/%s", intern->path, intern->entry.d_name);
- }
-}
-
-/* {{{ proto string DirectoryIterator::getPathname()
- Return path and filename of current dir entry */
-SPL_METHOD(DirectoryIterator, getPathname)
-{
- zval *object = getThis();
- spl_ce_dir_object *intern = (spl_ce_dir_object*)zend_object_store_get_object(object TSRMLS_CC);
-
- if (intern->entry.d_name[0]) {
- spl_dir_get_path_name(intern);
- RETURN_STRINGL(intern->path_name, intern->path_name_len, 1);
- } else {
- RETURN_BOOL(0);
- }
-}
-/* }}} */
-
-/* {{{ proto string RecursiveDirectoryIterator::key()
- Return path and filename of current dir entry */
-SPL_METHOD(RecursiveDirectoryIterator, key)
-{
- zval *object = getThis();
- spl_ce_dir_object *intern = (spl_ce_dir_object*)zend_object_store_get_object(object TSRMLS_CC);
-
- spl_dir_get_path_name(intern);
- RETURN_STRINGL(intern->path_name, intern->path_name_len, 1);
-}
-/* }}} */
-
-/* {{{ proto bool DirectoryIterator::isDot()
- Returns true if current entry is '.' or '..' */
-SPL_METHOD(DirectoryIterator, isDot)
-{
- zval *object = getThis();
- spl_ce_dir_object *intern = (spl_ce_dir_object*)zend_object_store_get_object(object TSRMLS_CC);
-
- RETURN_BOOL(!strcmp(intern->entry.d_name, ".") || !strcmp(intern->entry.d_name, ".."));
-}
-/* }}} */
-
-/* {{{ FileFunction */
-#define FileFunction(func_name, func_num) \
-SPL_METHOD(DirectoryIterator, func_name) \
-{ \
- spl_ce_dir_object *intern = (spl_ce_dir_object*)zend_object_store_get_object(getThis() TSRMLS_CC); \
- \
- spl_dir_get_path_name(intern); \
- php_stat(intern->path_name, intern->path_name_len, func_num, return_value TSRMLS_CC); \
-}
-/* }}} */
-
-/* {{{ proto int DirectoryIterator::getPerms()
- Get file permissions */
-FileFunction(getPerms, FS_PERMS)
-/* }}} */
-
-/* {{{ proto int DirectoryIterator::getInode()
- Get file inode */
-FileFunction(getInode, FS_INODE)
-/* }}} */
-
-/* {{{ proto int DirectoryIterator::getSize()
- Get file size */
-FileFunction(getSize, FS_SIZE)
-/* }}} */
-
-/* {{{ proto int DirectoryIterator::getOwner()
- Get file owner */
-FileFunction(getOwner, FS_OWNER)
-/* }}} */
-
-/* {{{ proto int DirectoryIterator::getGroup()
- Get file group */
-FileFunction(getGroup, FS_GROUP)
-/* }}} */
-
-/* {{{ proto int DirectoryIterator::getATime()
- Get last access time of file */
-FileFunction(getATime, FS_ATIME)
-/* }}} */
-
-/* {{{ proto int DirectoryIterator::getMTime()
- Get last modification time of file */
-FileFunction(getMTime, FS_MTIME)
-/* }}} */
-
-/* {{{ proto int DirectoryIterator::getCTime()
- Get inode modification time of file */
-FileFunction(getCTime, FS_CTIME)
-/* }}} */
-
-/* {{{ proto string DirectoryIterator::getType()
- Get file type */
-FileFunction(getType, FS_TYPE)
-/* }}} */
-
-/* {{{ proto bool DirectoryIterator::isWritable()
- Returns true if file can be written */
-FileFunction(isWritable, FS_IS_W)
-/* }}} */
-
-/* {{{ proto bool DirectoryIterator::isReadable()
- Returns true if file can be read */
-FileFunction(isReadable, FS_IS_R)
-/* }}} */
-
-/* {{{ proto bool DirectoryIterator::isExecutable()
- Returns true if file is executable */
-FileFunction(isExecutable, FS_IS_X)
-/* }}} */
-
-/* {{{ proto bool DirectoryIterator::isFile()
- Returns true if file is a regular file */
-FileFunction(isFile, FS_IS_FILE)
-/* }}} */
-
-/* {{{ proto bool DirectoryIterator::isDir()
- Returns true if file is directory */
-FileFunction(isDir, FS_IS_DIR)
-/* }}} */
-
-/* {{{ proto bool DirectoryIterator::isLink()
- Returns true if file is symbolic link */
-FileFunction(isLink, FS_IS_LINK)
-/* }}} */
-
-/* {{{ proto void RecursiveDirectoryIterator::rewind()
- Rewind dir back to the start */
-SPL_METHOD(RecursiveDirectoryIterator, rewind)
-{
- zval *object = getThis();
- spl_ce_dir_object *intern = (spl_ce_dir_object*)zend_object_store_get_object(object TSRMLS_CC);
-
- intern->index = 0;
- if (intern->dirp) {
- php_stream_rewinddir(intern->dirp);
- }
- do {
- if (!intern->dirp || !php_stream_readdir(intern->dirp, &intern->entry)) {
- intern->entry.d_name[0] = '\0';
- }
- } while (!strcmp(intern->entry.d_name, ".") || !strcmp(intern->entry.d_name, ".."));
-}
-/* }}} */
-
-/* {{{ proto void RecursiveDirectoryIterator::next()
- Move to next entry */
-SPL_METHOD(RecursiveDirectoryIterator, next)
-{
- zval *object = getThis();
- spl_ce_dir_object *intern = (spl_ce_dir_object*)zend_object_store_get_object(object TSRMLS_CC);
-
- intern->index++;
- do {
- if (!intern->dirp || !php_stream_readdir(intern->dirp, &intern->entry)) {
- intern->entry.d_name[0] = '\0';
- }
- } while (!strcmp(intern->entry.d_name, ".") || !strcmp(intern->entry.d_name, ".."));
- if (intern->path_name) {
- efree(intern->path_name);
- intern->path_name = NULL;
- }
-}
-/* }}} */
-
-/* {{{ proto bool RecursiveDirectoryIterator::hasChildren([bool $allow_links = false])
- Returns whether current entry is a directory and not '.' or '..' */
-SPL_METHOD(RecursiveDirectoryIterator, hasChildren)
-{
- zend_bool allow_links = 0;
- zval *object = getThis();
- spl_ce_dir_object *intern = (spl_ce_dir_object*)zend_object_store_get_object(object TSRMLS_CC);
-
- if (!strcmp(intern->entry.d_name, ".") || !strcmp(intern->entry.d_name, "..")) {
- RETURN_BOOL(0);
- } else {
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|b", &allow_links) == FAILURE) {
- return;
- }
- spl_dir_get_path_name(intern);
- if (!allow_links) {
- php_stat(intern->path_name, intern->path_name_len, FS_IS_LINK, return_value TSRMLS_CC);
- if (zend_is_true(return_value)) {
- RETURN_BOOL(0);
- }
- }
- php_stat(intern->path_name, intern->path_name_len, FS_IS_DIR, return_value TSRMLS_CC);
- }
-}
-/* }}} */
-
-/* {{{ proto RecursiveDirectoryIterator DirectoryIterator::getChildren()
- Returns an iterator fo rthe current entry if it is a directory */
-SPL_METHOD(RecursiveDirectoryIterator, getChildren)
-{
- zval *object = getThis(), zpath;
- spl_ce_dir_object *intern = (spl_ce_dir_object*)zend_object_store_get_object(object TSRMLS_CC);
-
- spl_dir_get_path_name(intern);
-
- INIT_PZVAL(&zpath);
- ZVAL_STRINGL(&zpath, intern->path_name, intern->path_name_len, 0);
-
- spl_instantiate_arg_ex1(spl_ce_RecursiveDirectoryIterator, &return_value, 0, &zpath TSRMLS_CC);
-}
-/* }}} */
-
-/* define an overloaded iterator structure */
-typedef struct {
- zend_object_iterator intern;
- zval *current;
- spl_ce_dir_object *object;
-} spl_ce_dir_it;
-
-/* forward declarations to the iterator handlers */
-static void spl_ce_dir_it_dtor(zend_object_iterator *iter TSRMLS_DC);
-static int spl_ce_dir_it_valid(zend_object_iterator *iter TSRMLS_DC);
-static void spl_ce_dir_it_current_data(zend_object_iterator *iter, zval ***data TSRMLS_DC);
-static int spl_ce_dir_it_current_key(zend_object_iterator *iter, char **str_key, uint *str_key_len, ulong *int_key TSRMLS_DC);
-static void spl_ce_dir_it_move_forward(zend_object_iterator *iter TSRMLS_DC);
-static void spl_ce_dir_it_rewind(zend_object_iterator *iter TSRMLS_DC);
-
-
-/* iterator handler table */
-zend_object_iterator_funcs spl_ce_dir_it_funcs = {
- spl_ce_dir_it_dtor,
- spl_ce_dir_it_valid,
- spl_ce_dir_it_current_data,
- spl_ce_dir_it_current_key,
- spl_ce_dir_it_move_forward,
- spl_ce_dir_it_rewind
-};
-
-
-/* {{{ spl_ce_dir_get_iterator */
-zend_object_iterator *spl_ce_dir_get_iterator(zend_class_entry *ce, zval *object TSRMLS_DC)
-{
- spl_ce_dir_it *iterator = emalloc(sizeof(spl_ce_dir_it));
- spl_ce_dir_object *dir_object = (spl_ce_dir_object*)zend_object_store_get_object(object TSRMLS_CC);
-
- object->refcount++;
- iterator->intern.data = (void*)object;
- iterator->intern.funcs = &spl_ce_dir_it_funcs;
- iterator->current = object;
- object->refcount++;
- iterator->object = dir_object;
-
- return (zend_object_iterator*)iterator;
-}
-/* }}} */
-
-
-/* {{{ spl_ce_dir_it_dtor */
-static void spl_ce_dir_it_dtor(zend_object_iterator *iter TSRMLS_DC)
-{
- spl_ce_dir_it *iterator = (spl_ce_dir_it *)iter;
-
- zval_ptr_dtor(&iterator->current);
- zval_ptr_dtor((zval**)&iterator->intern.data);
-
- efree(iterator);
-}
-/* }}} */
-
-
-/* {{{ spl_ce_dir_it_valid */
-static int spl_ce_dir_it_valid(zend_object_iterator *iter TSRMLS_DC)
-{
- spl_ce_dir_it *iterator = (spl_ce_dir_it *)iter;
- spl_ce_dir_object *object = iterator->object;
-
- return object->entry.d_name[0] != '\0' ? SUCCESS : FAILURE;
-}
-/* }}} */
-
-
-/* {{{ spl_ce_dir_it_current_data */
-static void spl_ce_dir_it_current_data(zend_object_iterator *iter, zval ***data TSRMLS_DC)
-{
- spl_ce_dir_it *iterator = (spl_ce_dir_it *)iter;
-
- *data = &iterator->current;
-}
-/* }}} */
-
-
-/* {{{ spl_ce_dir_it_current_key */
-static int spl_ce_dir_it_current_key(zend_object_iterator *iter, char **str_key, uint *str_key_len, ulong *int_key TSRMLS_DC)
-{
- spl_ce_dir_it *iterator = (spl_ce_dir_it *)iter;
- spl_ce_dir_object *object = iterator->object;
-
- *int_key = object->index;
- return HASH_KEY_IS_LONG;
-}
-/* }}} */
-
-
-/* {{{ spl_ce_dir_it_move_forward */
-static void spl_ce_dir_it_move_forward(zend_object_iterator *iter TSRMLS_DC)
-{
- spl_ce_dir_it *iterator = (spl_ce_dir_it *)iter;
- spl_ce_dir_object *object = iterator->object;
-
- object->index++;
- if (!object->dirp || !php_stream_readdir(object->dirp, &object->entry)) {
- object->entry.d_name[0] = '\0';
- }
- if (object->path_name) {
- efree(object->path_name);
- object->path_name = NULL;
- }
-}
-/* }}} */
-
-
-/* {{{ spl_ce_dir_it_rewind */
-static void spl_ce_dir_it_rewind(zend_object_iterator *iter TSRMLS_DC)
-{
- spl_ce_dir_it *iterator = (spl_ce_dir_it *)iter;
- spl_ce_dir_object *object = iterator->object;
-
- object->index = 0;
- if (object->dirp) {
- php_stream_rewinddir(object->dirp);
- }
- if (!object->dirp || !php_stream_readdir(object->dirp, &object->entry)) {
- object->entry.d_name[0] = '\0';
- }
-}
-/* }}} */
-
-
-/* {{{ spl_ce_dir_tree_it_current_key */
-static int spl_ce_dir_tree_it_current_key(zend_object_iterator *iter, char **str_key, uint *str_key_len, ulong *int_key TSRMLS_DC)
-{
- spl_ce_dir_it *iterator = (spl_ce_dir_it *)iter;
- spl_ce_dir_object *object = iterator->object;
-
- spl_dir_get_path_name(object);
- *str_key_len = object->path_name_len + 1;
- *str_key = estrndup(object->path_name, object->path_name_len);
- return HASH_KEY_IS_STRING;
-}
-/* }}} */
-
-
-/* {{{ spl_ce_dir_tree_it_move_forward */
-static void spl_ce_dir_tree_it_move_forward(zend_object_iterator *iter TSRMLS_DC)
-{
- spl_ce_dir_it *iterator = (spl_ce_dir_it *)iter;
- spl_ce_dir_object *object = iterator->object;
-
- object->index++;
- do {
- if (!object->dirp || !php_stream_readdir(object->dirp, &object->entry)) {
- object->entry.d_name[0] = '\0';
- }
- } while (!strcmp(object->entry.d_name, ".") || !strcmp(object->entry.d_name, ".."));
- if (object->path_name) {
- efree(object->path_name);
- object->path_name = NULL;
- }
-}
-/* }}} */
-
-/* {{{ spl_ce_dir_tree_it_rewind */
-static void spl_ce_dir_tree_it_rewind(zend_object_iterator *iter TSRMLS_DC)
-{
- spl_ce_dir_it *iterator = (spl_ce_dir_it *)iter;
- spl_ce_dir_object *object = iterator->object;
-
- object->index = 0;
- if (object->dirp) {
- php_stream_rewinddir(object->dirp);
- }
- do {
- if (!object->dirp || !php_stream_readdir(object->dirp, &object->entry)) {
- object->entry.d_name[0] = '\0';
- }
- } while (!strcmp(object->entry.d_name, ".") || !strcmp(object->entry.d_name, ".."));
-}
-/* }}} */
-
-/* iterator handler table */
-zend_object_iterator_funcs spl_ce_dir_tree_it_funcs = {
- spl_ce_dir_it_dtor,
- spl_ce_dir_it_valid,
- spl_ce_dir_it_current_data,
- spl_ce_dir_tree_it_current_key,
- spl_ce_dir_tree_it_move_forward,
- spl_ce_dir_tree_it_rewind
-};
-
-/* {{{ spl_ce_dir_get_iterator */
-zend_object_iterator *spl_ce_dir_tree_get_iterator(zend_class_entry *ce, zval *object TSRMLS_DC)
-{
- spl_ce_dir_it *iterator = emalloc(sizeof(spl_ce_dir_it));
- spl_ce_dir_object *dir_object = (spl_ce_dir_object*)zend_object_store_get_object(object TSRMLS_CC);
-
- object->refcount++;
- iterator->intern.data = (void*)object;
- iterator->intern.funcs = &spl_ce_dir_tree_it_funcs;
- iterator->current = object;
- object->refcount++;
- iterator->object = dir_object;
-
- return (zend_object_iterator*)iterator;
-}
-/* }}} */
-
-/* {{{ spl_ce_dir_cast */
-static int spl_ce_dir_cast(zval *readobj, zval *writeobj, int type, int should_free TSRMLS_DC)
-{
- zval free_obj;
- spl_ce_dir_object *dir_object = (spl_ce_dir_object*)zend_object_store_get_object(readobj TSRMLS_CC);
-
- if (type ==IS_STRING && *dir_object->entry.d_name) {
- if (should_free) {
- free_obj = *writeobj;
- }
- ZVAL_STRING(writeobj, dir_object->entry.d_name, 1);
- if (should_free) {
- zval_dtor(&free_obj);
- }
- return SUCCESS;
- }
- return FAILURE;
-}
-/* }}} */
-
-/* declare method parameters */
-/* supply a name and default to call by parameter */
-static
-ZEND_BEGIN_ARG_INFO(arginfo_dir___construct, 0)
- ZEND_ARG_INFO(0, path) /* parameter name */
-ZEND_END_ARG_INFO();
-
-
-/* the method table */
-/* each method can have its own parameters and visibility */
-static zend_function_entry spl_ce_dir_class_functions[] = {
- SPL_ME(DirectoryIterator, __construct, arginfo_dir___construct, ZEND_ACC_PUBLIC)
- SPL_ME(DirectoryIterator, rewind, NULL, ZEND_ACC_PUBLIC)
- SPL_ME(DirectoryIterator, valid, NULL, ZEND_ACC_PUBLIC)
- SPL_ME(DirectoryIterator, key, NULL, ZEND_ACC_PUBLIC)
- SPL_ME(DirectoryIterator, current, NULL, ZEND_ACC_PUBLIC)
- SPL_ME(DirectoryIterator, next, NULL, ZEND_ACC_PUBLIC)
- SPL_ME(DirectoryIterator, getPath, NULL, ZEND_ACC_PUBLIC)
- SPL_ME(DirectoryIterator, getFilename, NULL, ZEND_ACC_PUBLIC)
- SPL_ME(DirectoryIterator, getPathname, NULL, ZEND_ACC_PUBLIC)
- SPL_ME(DirectoryIterator, getPerms, NULL, ZEND_ACC_PUBLIC)
- SPL_ME(DirectoryIterator, getInode, NULL, ZEND_ACC_PUBLIC)
- SPL_ME(DirectoryIterator, getSize, NULL, ZEND_ACC_PUBLIC)
- SPL_ME(DirectoryIterator, getOwner, NULL, ZEND_ACC_PUBLIC)
- SPL_ME(DirectoryIterator, getGroup, NULL, ZEND_ACC_PUBLIC)
- SPL_ME(DirectoryIterator, getATime, NULL, ZEND_ACC_PUBLIC)
- SPL_ME(DirectoryIterator, getMTime, NULL, ZEND_ACC_PUBLIC)
- SPL_ME(DirectoryIterator, getCTime, NULL, ZEND_ACC_PUBLIC)
- SPL_ME(DirectoryIterator, getType, NULL, ZEND_ACC_PUBLIC)
- SPL_ME(DirectoryIterator, isWritable, NULL, ZEND_ACC_PUBLIC)
- SPL_ME(DirectoryIterator, isReadable, NULL, ZEND_ACC_PUBLIC)
- SPL_ME(DirectoryIterator, isExecutable, NULL, ZEND_ACC_PUBLIC)
- SPL_ME(DirectoryIterator, isFile, NULL, ZEND_ACC_PUBLIC)
- SPL_ME(DirectoryIterator, isDir, NULL, ZEND_ACC_PUBLIC)
- SPL_ME(DirectoryIterator, isLink, NULL, ZEND_ACC_PUBLIC)
- SPL_ME(DirectoryIterator, isDot, NULL, ZEND_ACC_PUBLIC)
- SPL_MA(DirectoryIterator, __toString, DirectoryIterator, getFilename, NULL, ZEND_ACC_PUBLIC)
- {NULL, NULL, NULL}
-};
-
-static zend_function_entry spl_ce_dir_tree_class_functions[] = {
- SPL_ME(RecursiveDirectoryIterator, rewind, NULL, ZEND_ACC_PUBLIC)
- SPL_ME(RecursiveDirectoryIterator, next, NULL, ZEND_ACC_PUBLIC)
- SPL_ME(RecursiveDirectoryIterator, key, NULL, ZEND_ACC_PUBLIC)
- SPL_ME(RecursiveDirectoryIterator, hasChildren, NULL, ZEND_ACC_PUBLIC)
- SPL_ME(RecursiveDirectoryIterator, getChildren, NULL, ZEND_ACC_PUBLIC)
- {NULL, NULL, NULL}
-};
-
-
-/* {{{ PHP_MINIT_FUNCTION(spl_directory)
- */
-PHP_MINIT_FUNCTION(spl_directory)
-{
- REGISTER_SPL_STD_CLASS_EX(DirectoryIterator, spl_ce_dir_object_new, spl_ce_dir_class_functions);
- zend_class_implements(spl_ce_DirectoryIterator TSRMLS_CC, 1, zend_ce_iterator);
- memcpy(&spl_ce_dir_handlers, zend_get_std_object_handlers(), sizeof(zend_object_handlers));
- spl_ce_dir_handlers.clone_obj = spl_ce_dir_object_clone;
- spl_ce_dir_handlers.cast_object = spl_ce_dir_cast;
-
- spl_ce_DirectoryIterator->get_iterator = spl_ce_dir_get_iterator;
-
- REGISTER_SPL_SUB_CLASS_EX(RecursiveDirectoryIterator, DirectoryIterator, spl_ce_dir_object_new, spl_ce_dir_tree_class_functions);
- REGISTER_SPL_IMPLEMENTS(RecursiveDirectoryIterator, RecursiveIterator);
-
- spl_ce_RecursiveDirectoryIterator->get_iterator = spl_ce_dir_tree_get_iterator;
-
- return SUCCESS;
-}
-/* }}} */
-
-
-/*
- * 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/spl/spl_directory.h b/ext/spl/spl_directory.h
deleted file mode 100755
index e7a96d5a4f..0000000000
--- a/ext/spl/spl_directory.h
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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. |
- +----------------------------------------------------------------------+
- | Authors: Marcus Boerger <helly@php.net> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-#ifndef SPL_DIRECTORY_H
-#define SPL_DIRECTORY_H
-
-#include "php.h"
-#include "php_spl.h"
-
-extern zend_class_entry *spl_ce_DirectoryIterator;
-extern zend_class_entry *spl_ce_RecursiveDirectoryIterator;
-
-PHP_MINIT_FUNCTION(spl_directory);
-
-typedef struct _spl_ce_dir_object {
- zend_object std;
- php_stream *dirp;
- php_stream_dirent entry;
- char *path;
- char *path_name;
- int path_name_len;
- int index;
-} spl_ce_dir_object;
-
-#endif /* SPL_DIRECTORY_H */
-
-/*
- * Local Variables:
- * c-basic-offset: 4
- * tab-width: 4
- * End:
- * vim600: fdm=marker
- * vim: noet sw=4 ts=4
- */
diff --git a/ext/spl/spl_engine.c b/ext/spl/spl_engine.c
deleted file mode 100755
index 7ba631b4a9..0000000000
--- a/ext/spl/spl_engine.c
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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. |
- +----------------------------------------------------------------------+
- | Authors: Marcus Boerger <helly@php.net> |
- +----------------------------------------------------------------------+
- */
-
-#ifdef HAVE_CONFIG_H
-# include "config.h"
-#endif
-
-#include "php.h"
-#include "php_ini.h"
-#include "ext/standard/info.h"
-#include "zend_interfaces.h"
-
-#include "php_spl.h"
-#include "spl_functions.h"
-#include "spl_engine.h"
-
-#include "spl_array.h"
-
-/* {{{ spl_instantiate */
-void spl_instantiate(zend_class_entry *pce, zval **object, int alloc TSRMLS_DC)
-{
- if (alloc) {
- ALLOC_ZVAL(*object);
- }
- object_init_ex(*object, pce);
- (*object)->refcount = 1;
- (*object)->is_ref = 1; /* check if this can be hold always */
-}
-/* }}} */
-
-/* {{{ spl_is_instance_of */
-int spl_is_instance_of(zval **obj, zend_class_entry *ce TSRMLS_DC)
-{
- /* Ensure everything needed is available before checking for the type.
- */
- zend_class_entry *instance_ce;
-
- if (obj && (instance_ce = spl_get_class_entry(*obj TSRMLS_CC)) != NULL) {
- return instanceof_function(instance_ce, ce TSRMLS_CC);
- }
- return 0;
-}
-/* }}} */
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- * vim600: fdm=marker
- * vim: noet sw=4 ts=4
- */
diff --git a/ext/spl/spl_engine.h b/ext/spl/spl_engine.h
deleted file mode 100755
index 08820833c9..0000000000
--- a/ext/spl/spl_engine.h
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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. |
- +----------------------------------------------------------------------+
- | Authors: Marcus Boerger <helly@php.net> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-#ifndef SPL_ENGINE_H
-#define SPL_ENGINE_H
-
-#include "php.h"
-#include "php_spl.h"
-#include "zend_interfaces.h"
-
-/* {{{ zend_class_entry */
-static inline zend_class_entry *spl_get_class_entry(zval *obj TSRMLS_DC)
-{
- if (obj && Z_TYPE_P(obj) == IS_OBJECT && Z_OBJ_HT_P(obj)->get_class_entry) {
- return Z_OBJ_HT_P(obj)->get_class_entry(obj TSRMLS_CC);
- } else {
- return NULL;
- }
-}
-/* }}} */
-
-void spl_instantiate(zend_class_entry *pce, zval **object, int alloc TSRMLS_DC);
-
-/* {{{ spl_instantiate_arg_ex1 */
-static inline int spl_instantiate_arg_ex1(zend_class_entry *pce, zval **retval, int alloc, zval *arg1 TSRMLS_DC)
-{
- spl_instantiate(pce, retval, alloc TSRMLS_CC);
-
- zend_call_method(retval, pce, &pce->constructor, pce->constructor->common.function_name, strlen(pce->constructor->common.function_name), NULL, 1, arg1, NULL TSRMLS_CC);
- return 0;
-}
-/* }}} */
-
-/* {{{ spl_instantiate_arg_ex2 */
-static inline int spl_instantiate_arg_ex2(zend_class_entry *pce, zval **retval, int alloc, zval *arg1, zval *arg2 TSRMLS_DC)
-{
- spl_instantiate(pce, retval, alloc TSRMLS_CC);
-
- zend_call_method(retval, pce, &pce->constructor, pce->constructor->common.function_name, strlen(pce->constructor->common.function_name), NULL, 2, arg1, arg2 TSRMLS_CC);
- return 0;
-}
-/* }}} */
-
-int spl_is_instance_of(zval **obj, zend_class_entry *ce TSRMLS_DC);
-
-#endif /* SPL_ENGINE_H */
-
-/*
- * Local Variables:
- * c-basic-offset: 4
- * tab-width: 4
- * End:
- * vim600: fdm=marker
- * vim: noet sw=4 ts=4
- */
diff --git a/ext/spl/spl_functions.c b/ext/spl/spl_functions.c
deleted file mode 100755
index fc9c315ea6..0000000000
--- a/ext/spl/spl_functions.c
+++ /dev/null
@@ -1,160 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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. |
- +----------------------------------------------------------------------+
- | Authors: Marcus Boerger <helly@php.net> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-#ifdef HAVE_CONFIG_H
- #include "config.h"
-#endif
-
-#include "php.h"
-#include "php_ini.h"
-#include "ext/standard/info.h"
-#include "php_spl.h"
-
-/* {{{ spl_destroy_class */
-void spl_destroy_class(zend_class_entry ** ppce)
-{
- SPL_DEBUG(fprintf(stderr, "Destroy(%s): %s\n", (*ppce)->type == ZEND_USER_CLASS ? "user" : "other", (*ppce)->name);)
- destroy_zend_class(ppce);
-}
-/* }}} */
-
-/* {{{ spl_register_interface */
-void spl_register_interface(zend_class_entry ** ppce, char * class_name, zend_function_entry *functions TSRMLS_DC)
-{
- zend_class_entry ce;
-
- INIT_CLASS_ENTRY(ce, class_name, functions);
- ce.name_length = strlen(class_name);
- *ppce = zend_register_internal_class(&ce TSRMLS_CC);
-
- /* entries changed by initialize */
- (*ppce)->ce_flags = ZEND_ACC_INTERFACE;
-}
-/* }}} */
-
-/* {{{ spl_register_std_class */
-void spl_register_std_class(zend_class_entry ** ppce, char * class_name, void * obj_ctor, function_entry * function_list TSRMLS_DC)
-{
- zend_class_entry ce;
-
- INIT_CLASS_ENTRY(ce, class_name, function_list);
- ce.name_length = strlen(class_name);
- *ppce = zend_register_internal_class(&ce TSRMLS_CC);
-
- /* entries changed by initialize */
- (*ppce)->create_object = obj_ctor;
-}
-/* }}} */
-
-/* {{{ spl_register_sub_class */
-void spl_register_sub_class(zend_class_entry ** ppce, zend_class_entry * parent_ce, char * class_name, void *obj_ctor, function_entry * function_list TSRMLS_DC)
-{
- zend_class_entry ce;
-
- INIT_CLASS_ENTRY(ce, class_name, function_list);
- ce.name_length = strlen(class_name);
- *ppce = zend_register_internal_class_ex(&ce, parent_ce, NULL TSRMLS_CC);
-
- /* entries changed by initialize */
- (*ppce)->create_object = obj_ctor;
-}
-/* }}} */
-
-/* {{{ spl_register_parent_ce */
-void spl_register_parent_ce(zend_class_entry * class_entry, zend_class_entry * parent_class TSRMLS_DC)
-{
- class_entry->parent = parent_class;
-}
-/* }}} */
-
-/* {{{ spl_register_functions */
-void spl_register_functions(zend_class_entry * class_entry, function_entry * function_list TSRMLS_DC)
-{
- zend_register_functions(class_entry, function_list, &class_entry->function_table, MODULE_PERSISTENT TSRMLS_CC);
-}
-/* }}} */
-
-/* {{{ spl_register_property */
-void spl_register_property( zend_class_entry * class_entry, char *prop_name, zval *prop_val, int prop_flags TSRMLS_DC)
-{
- if (!prop_val) {
- INIT_PZVAL(prop_val);
- prop_val->type = IS_NULL;
- }
-
- zend_declare_property(class_entry, prop_name, strlen(prop_name), prop_val, prop_flags TSRMLS_CC);
-}
-/* }}} */
-
-/* {{{ spl_add_class_name */
-void spl_add_class_name(zval *list, zend_class_entry * pce, int allow, int ce_flags TSRMLS_DC)
-{
- if (!allow || (allow > 0 && pce->ce_flags & ce_flags) || (allow < 0 && !(pce->ce_flags & ce_flags))) {
- size_t len = strlen(pce->name);
- zval *tmp;
-
- if (zend_hash_find(Z_ARRVAL_P(list), pce->name, len+1, (void*)&tmp) == FAILURE) {
- MAKE_STD_ZVAL(tmp);
- ZVAL_STRING(tmp, pce->name, 1);
- zend_hash_add(Z_ARRVAL_P(list), pce->name, len+1, &tmp, sizeof(zval *), NULL);
- }
- }
-}
-/* }}} */
-
-/* {{{ spl_add_interfaces */
-void spl_add_interfaces(zval *list, zend_class_entry * pce, int allow, int ce_flags TSRMLS_DC)
-{
- zend_uint num_interfaces;
-
- for (num_interfaces = 0; num_interfaces < pce->num_interfaces; num_interfaces++) {
- spl_add_class_name(list, pce->interfaces[num_interfaces], allow, ce_flags TSRMLS_CC);
- }
-}
-/* }}} */
-
-/* {{{ spl_add_classes */
-int spl_add_classes(zend_class_entry ** ppce, zval *list, int sub, int allow, int ce_flags TSRMLS_DC)
-{
- zend_class_entry *pce = *ppce;
-
- if (!pce) {
- return 0;
- }
- spl_add_class_name(list, pce, allow, ce_flags TSRMLS_CC);
- if (sub) {
- spl_add_interfaces(list, pce, allow, ce_flags TSRMLS_CC);
- while (pce->parent) {
- pce = pce->parent;
- spl_add_classes(&pce, list, sub, allow, ce_flags TSRMLS_CC);
- }
- }
- return 0;
-}
-/* }}} */
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- * vim600: fdm=marker
- * vim: noet sw=4 ts=4
- */
diff --git a/ext/spl/spl_functions.h b/ext/spl/spl_functions.h
deleted file mode 100755
index 1383c299bf..0000000000
--- a/ext/spl/spl_functions.h
+++ /dev/null
@@ -1,95 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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. |
- +----------------------------------------------------------------------+
- | Authors: Marcus Boerger <helly@php.net> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-#ifndef PHP_FUNCTIONS_H
-#define PHP_FUNCTIONS_H
-
-#include "php.h"
-
-typedef zend_object_value (*create_object_func_t)(zend_class_entry *class_type TSRMLS_DC);
-
-#define REGISTER_SPL_STD_CLASS(class_name, obj_ctor) \
- spl_register_std_class(&spl_ce_ ## class_name, # class_name, obj_ctor, NULL TSRMLS_CC);
-
-#define REGISTER_SPL_STD_CLASS_EX(class_name, obj_ctor, funcs) \
- spl_register_std_class(&spl_ce_ ## class_name, # class_name, obj_ctor, funcs TSRMLS_CC);
-
-#define REGISTER_SPL_SUB_CLASS_EX(class_name, parent_class_name, obj_ctor, funcs) \
- spl_register_sub_class(&spl_ce_ ## class_name, spl_ce_ ## parent_class_name, # class_name, obj_ctor, funcs TSRMLS_CC);
-
-#define REGISTER_SPL_INTERFACE(class_name) \
- spl_register_interface(&spl_ce_ ## class_name, # class_name, spl_funcs_ ## class_name TSRMLS_CC);
-
-#define REGISTER_SPL_PARENT_CE(class_name, parent_class) \
- spl_register_parent_ce(spl_ce_ ## class_name, spl_ce_ ## parent_class TSRMLS_CC);
-
-#define REGISTER_SPL_IMPLEMENTS(class_name, interface_name) \
- zend_class_implements(spl_ce_ ## class_name TSRMLS_CC, 1, spl_ce_ ## interface_name);
-
-#define REGISTER_SPL_ITERATOR(class_name) \
- zend_class_implements(spl_ce_ ## class_name TSRMLS_CC, 1, zend_ce_iterator);
-
-#define REGISTER_SPL_FUNCTIONS(class_name, function_list) \
- spl_register_functions(spl_ce_ ## class_name, function_list TSRMLS_CC);
-
-#define REGISTER_SPL_PROPERTY(class_name, prop_name) \
- spl_register_property(spl_ce_ ## class_name, prop_name, prop_val, prop_flags TSRMLS_CC);
-
-void spl_destroy_class(zend_class_entry ** ppce);
-
-void spl_register_std_class(zend_class_entry ** ppce, char * class_name, create_object_func_t ctor, function_entry * function_list TSRMLS_DC);
-void spl_register_sub_class(zend_class_entry ** ppce, zend_class_entry * parent_ce, char * class_name, create_object_func_t ctor, function_entry * function_list TSRMLS_DC);
-
-void spl_register_interface(zend_class_entry ** ppce, char * class_name, zend_function_entry *functions TSRMLS_DC);
-
-void spl_register_parent_ce(zend_class_entry * class_entry, zend_class_entry * parent_class TSRMLS_DC);
-void spl_register_functions(zend_class_entry * class_entry, function_entry * function_list TSRMLS_DC);
-void spl_register_property( zend_class_entry * class_entry, char *prop_name, zval *prop_val, int prop_flags TSRMLS_DC);
-
-/* sub: whether to allow subclasses/interfaces
- allow = 0: allow all classes and interfaces
- allow > 0: allow all that match and mask ce_flags
- allow < 0: disallow all that match and mask ce_flags
- */
-void spl_add_class_name(zval * list, zend_class_entry * pce, int allow, int ce_flags TSRMLS_DC);
-void spl_add_interfaces(zval * list, zend_class_entry * pce, int allow, int ce_flags TSRMLS_DC);
-int spl_add_classes(zend_class_entry ** ppce, zval *list, int sub, int allow, int ce_flags TSRMLS_DC);
-
-#define SPL_ME(class_name, function_name, arg_info, flags) \
- PHP_ME( spl_ ## class_name, function_name, arg_info, flags)
-
-#define SPL_ABSTRACT_ME(class_name, function_name, arg_info) \
- ZEND_ABSTRACT_ME( spl_ ## class_name, function_name, arg_info)
-
-#define SPL_METHOD(class_name, function_name) \
- PHP_METHOD(spl_ ## class_name, function_name)
-
-#define SPL_MA(class_name, function_name, alias_class, alias_function, arg_info, flags) \
- ZEND_MALIAS(spl_ ## alias_class, function_name, alias_function, arg_info, flags)
-#endif /* PHP_FUNCTIONS_H */
-
-/*
- * Local Variables:
- * c-basic-offset: 4
- * tab-width: 4
- * End:
- * vim600: fdm=marker
- * vim: noet sw=4 ts=4
- */
diff --git a/ext/spl/spl_iterators.c b/ext/spl/spl_iterators.c
deleted file mode 100755
index 3d09a7c463..0000000000
--- a/ext/spl/spl_iterators.c
+++ /dev/null
@@ -1,1383 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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. |
- +----------------------------------------------------------------------+
- | Authors: Marcus Boerger <helly@php.net> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-#ifdef HAVE_CONFIG_H
-# include "config.h"
-#endif
-
-#include "php.h"
-#include "php_ini.h"
-#include "ext/standard/info.h"
-#include "zend_exceptions.h"
-#include "zend_interfaces.h"
-
-#include "php_spl.h"
-#include "spl_functions.h"
-#include "spl_engine.h"
-#include "spl_iterators.h"
-#include "spl_directory.h"
-
-#define INLINE inline
-
-zend_class_entry *spl_ce_RecursiveIterator;
-zend_class_entry *spl_ce_RecursiveIteratorIterator;
-zend_class_entry *spl_ce_FilterIterator;
-zend_class_entry *spl_ce_ParentIterator;
-zend_class_entry *spl_ce_SeekableIterator;
-zend_class_entry *spl_ce_LimitIterator;
-zend_class_entry *spl_ce_CachingIterator;
-zend_class_entry *spl_ce_CachingRecursiveIterator;
-
-function_entry spl_funcs_RecursiveIterator[] = {
- SPL_ABSTRACT_ME(RecursiveIterator, hasChildren, NULL)
- SPL_ABSTRACT_ME(RecursiveIterator, getChildren, NULL)
- {NULL, NULL, NULL}
-};
-
-SPL_METHOD(RecursiveIteratorIterator, __construct);
-SPL_METHOD(RecursiveIteratorIterator, rewind);
-SPL_METHOD(RecursiveIteratorIterator, valid);
-SPL_METHOD(RecursiveIteratorIterator, key);
-SPL_METHOD(RecursiveIteratorIterator, current);
-SPL_METHOD(RecursiveIteratorIterator, next);
-SPL_METHOD(RecursiveIteratorIterator, getDepth);
-SPL_METHOD(RecursiveIteratorIterator, getSubIterator);
-
-static
-ZEND_BEGIN_ARG_INFO(arginfo_recursive_it___construct, 0)
- ZEND_ARG_OBJ_INFO(0, iterator, RecursiveIterator, 0)
- ZEND_ARG_INFO(0, mode)
-ZEND_END_ARG_INFO();
-
-static
-ZEND_BEGIN_ARG_INFO(arginfo_recursive_it_getSubIterator, 0)
- ZEND_ARG_INFO(0, level)
-ZEND_END_ARG_INFO();
-
-static zend_function_entry spl_funcs_RecursiveIteratorIterator[] = {
- SPL_ME(RecursiveIteratorIterator, __construct, arginfo_recursive_it___construct, ZEND_ACC_PUBLIC)
- SPL_ME(RecursiveIteratorIterator, rewind, NULL, ZEND_ACC_PUBLIC)
- SPL_ME(RecursiveIteratorIterator, valid, NULL, ZEND_ACC_PUBLIC)
- SPL_ME(RecursiveIteratorIterator, key, NULL, ZEND_ACC_PUBLIC)
- SPL_ME(RecursiveIteratorIterator, current, NULL, ZEND_ACC_PUBLIC)
- SPL_ME(RecursiveIteratorIterator, next, NULL, ZEND_ACC_PUBLIC)
- SPL_ME(RecursiveIteratorIterator, getDepth, NULL, ZEND_ACC_PUBLIC)
- SPL_ME(RecursiveIteratorIterator, getSubIterator,arginfo_recursive_it_getSubIterator, ZEND_ACC_PUBLIC)
- {NULL, NULL, NULL}
-};
-
-typedef enum {
- RIT_LEAVES_ONLY = 0,
- RIT_SELF_FIRST = 1,
- RIT_CHILD_FIRST = 2
-} RecursiveIteratorMode;
-
-typedef enum {
- RS_NEXT = 0,
- RS_TEST = 1,
- RS_SELF = 2,
- RS_CHILD = 3,
- RS_START = 4
-} RecursiveIteratorState;
-
-typedef struct _spl_sub_iterator {
- zend_object_iterator *iterator;
- zval *zobject;
- zend_class_entry *ce;
- RecursiveIteratorState state;
-} spl_sub_iterator;
-
-typedef struct _spl_recursive_it_object {
- zend_object std;
- spl_sub_iterator *iterators;
- int level;
- RecursiveIteratorMode mode;
-} spl_recursive_it_object;
-
-typedef struct _spl_recursive_it_iterator {
- zend_object_iterator intern;
- zval *zobject;
-} spl_recursive_it_iterator;
-
-static zend_object_handlers spl_handlers_rec_it_it;
-static zend_object_handlers spl_handlers_dual_it;
-
-static void spl_recursive_it_dtor(zend_object_iterator *_iter TSRMLS_DC)
-{
- spl_recursive_it_iterator *iter = (spl_recursive_it_iterator*)_iter;
- spl_recursive_it_object *object = (spl_recursive_it_object*)_iter->data;
- zend_object_iterator *sub_iter;
-
- while (object->level) {
- sub_iter = object->iterators[object->level].iterator;
- sub_iter->funcs->dtor(sub_iter TSRMLS_CC);
- zval_ptr_dtor(&object->iterators[object->level--].zobject);
- }
- erealloc(object->iterators, sizeof(spl_sub_iterator));
- object->level = 0;
-
- zval_ptr_dtor(&iter->zobject);
- efree(iter);
-}
-
-static int spl_recursive_it_valid_ex(spl_recursive_it_object *object TSRMLS_DC)
-{
- zend_object_iterator *sub_iter;
- int level = object->level;
-
- while (level >=0) {
- sub_iter = object->iterators[level].iterator;
- if (sub_iter->funcs->valid(sub_iter TSRMLS_CC) == SUCCESS) {
- return SUCCESS;
- }
- level--;
- }
- return FAILURE;
-}
-
-static int spl_recursive_it_valid(zend_object_iterator *iter TSRMLS_DC)
-{
- spl_recursive_it_object *object = (spl_recursive_it_object*)iter->data;
-
- return spl_recursive_it_valid_ex(object TSRMLS_CC);
-}
-
-static void spl_recursive_it_get_current_data(zend_object_iterator *iter, zval ***data TSRMLS_DC)
-{
- spl_recursive_it_object *object = (spl_recursive_it_object*)iter->data;
- zend_object_iterator *sub_iter = object->iterators[object->level].iterator;
-
- sub_iter->funcs->get_current_data(sub_iter, data TSRMLS_CC);
-}
-
-static int spl_recursive_it_get_current_key(zend_object_iterator *iter, char **str_key, uint *str_key_len, ulong *int_key TSRMLS_DC)
-{
- spl_recursive_it_object *object = (spl_recursive_it_object*)iter->data;
- zend_object_iterator *sub_iter = object->iterators[object->level].iterator;
-
- if (sub_iter->funcs->get_current_key) {
- return sub_iter->funcs->get_current_key(sub_iter, str_key, str_key_len, int_key TSRMLS_CC);
- } else {
- *int_key = iter->index;
- return HASH_KEY_IS_LONG;
- }
-}
-
-static void spl_recursive_it_move_forward_ex(spl_recursive_it_object *object TSRMLS_DC)
-{
- zend_object_iterator *iterator;
- zval *zobject;
- zend_class_entry *ce;
- zval *retval, *child;
- zend_object_iterator *sub_iter;
-
- while (1) {
-next_step:
- iterator = object->iterators[object->level].iterator;
- switch (object->iterators[object->level].state) {
- case RS_NEXT:
- iterator->funcs->move_forward(iterator TSRMLS_CC);
- case RS_START:
- if (iterator->funcs->valid(iterator TSRMLS_CC) == FAILURE) {
- break;
- }
- object->iterators[object->level].state = RS_TEST;
- /* break; */
- case RS_TEST:
- ce = object->iterators[object->level].ce;
- zobject = object->iterators[object->level].zobject;
- zend_call_method_with_0_params(&zobject, ce, NULL, "haschildren", &retval);
- if (zend_is_true(retval)) {
- zval_ptr_dtor(&retval);
- switch (object->mode) {
- case RIT_LEAVES_ONLY:
- case RIT_CHILD_FIRST:
- object->iterators[object->level].state = RS_CHILD;
- goto next_step;
- case RIT_SELF_FIRST:
- object->iterators[object->level].state = RS_SELF;
- goto next_step;
- }
- }
- zval_ptr_dtor(&retval);
- object->iterators[object->level].state = RS_NEXT;
- return /* self */;
- case RS_SELF:
- if (object->mode == RIT_SELF_FIRST) {
- object->iterators[object->level].state = RS_CHILD;
- } else {
- object->iterators[object->level].state = RS_NEXT;
- }
- return /* self */;
- case RS_CHILD:
- ce = object->iterators[object->level].ce;
- zobject = object->iterators[object->level].zobject;
- zend_call_method_with_0_params(&zobject, ce, NULL, "getchildren", &child);
- ce = child ? Z_OBJCE_P(child) : NULL;
- if (!ce || !instanceof_function(ce, spl_ce_RecursiveIterator TSRMLS_CC)) {
- if (child) {
- zval_ptr_dtor(&child);
- }
- zend_throw_exception(zend_exception_get_default(), "Objects returned by RecursiveIterator::getChildren() must implement RecursiveIterator", 0 TSRMLS_CC);
- return;
- }
- if (object->mode == RIT_CHILD_FIRST) {
- object->iterators[object->level].state = RS_SELF;
- } else {
- object->iterators[object->level].state = RS_NEXT;
- }
- object->iterators = erealloc(object->iterators, sizeof(spl_sub_iterator) * (++object->level+1));
- sub_iter = ce->get_iterator(ce, child TSRMLS_CC);
- object->iterators[object->level].iterator = sub_iter;
- object->iterators[object->level].zobject = child;
- object->iterators[object->level].ce = ce;
- object->iterators[object->level].state = RS_START;
- if (sub_iter->funcs->rewind) {
- sub_iter->funcs->rewind(sub_iter TSRMLS_CC);
- }
- goto next_step;
- }
- /* no more elements */
- if (object->level > 0) {
- iterator->funcs->dtor(iterator TSRMLS_CC);
- zval_ptr_dtor(&object->iterators[object->level].zobject);
- object->level--;
- } else {
- return; /* done completeley */
- }
- }
-}
-
-static void spl_recursive_it_rewind_ex(spl_recursive_it_object *object TSRMLS_DC)
-{
- zend_object_iterator *sub_iter;
-
- while (object->level) {
- sub_iter = object->iterators[object->level].iterator;
- sub_iter->funcs->dtor(sub_iter TSRMLS_CC);
- zval_ptr_dtor(&object->iterators[object->level--].zobject);
- }
- erealloc(object->iterators, sizeof(spl_sub_iterator));
- object->iterators[0].state = RS_START;
- sub_iter = object->iterators[0].iterator;
- if (sub_iter->funcs->rewind) {
- sub_iter->funcs->rewind(sub_iter TSRMLS_CC);
- }
- spl_recursive_it_move_forward_ex(object TSRMLS_CC);
-}
-
-static void spl_recursive_it_move_forward(zend_object_iterator *iter TSRMLS_DC)
-{
- spl_recursive_it_move_forward_ex((spl_recursive_it_object*)iter->data TSRMLS_CC);
-}
-
-static void spl_recursive_it_rewind(zend_object_iterator *iter TSRMLS_DC)
-{
- spl_recursive_it_rewind_ex((spl_recursive_it_object*)iter->data TSRMLS_CC);
-}
-
-static zend_object_iterator *spl_recursive_it_get_iterator(zend_class_entry *ce, zval *zobject TSRMLS_DC)
-{
- spl_recursive_it_iterator *iterator = emalloc(sizeof(spl_recursive_it_iterator));
- spl_recursive_it_object *object = (spl_recursive_it_object*)zend_object_store_get_object(zobject TSRMLS_CC);
-
- zobject->refcount++;
- iterator->intern.data = (void*)object;
- iterator->intern.funcs = ce->iterator_funcs.funcs;
- iterator->zobject = zobject;
- return (zend_object_iterator*)iterator;
-}
-
-zend_object_iterator_funcs spl_recursive_it_iterator_funcs = {
- spl_recursive_it_dtor,
- spl_recursive_it_valid,
- spl_recursive_it_get_current_data,
- spl_recursive_it_get_current_key,
- spl_recursive_it_move_forward,
- spl_recursive_it_rewind
-};
-
-/* {{{ proto RecursiveIteratorIterator::__construct(RecursiveIterator $it)
- Creates a RecursiveIteratorIterator from a RecursiveIterator. */
-SPL_METHOD(RecursiveIteratorIterator, __construct)
-{
- zval *object = getThis();
- spl_recursive_it_object *intern;
- zval *iterator;
- zend_class_entry *ce_iterator;
- long mode = RIT_LEAVES_ONLY;
-
- php_set_error_handling(EH_THROW, zend_exception_get_default() TSRMLS_CC);
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "O|l", &iterator, spl_ce_RecursiveIterator, &mode) == FAILURE) {
- php_set_error_handling(EH_NORMAL, NULL TSRMLS_CC);
- return;
- }
-
- intern = (spl_recursive_it_object*)zend_object_store_get_object(object TSRMLS_CC);
- intern->iterators = emalloc(sizeof(spl_sub_iterator));
- intern->level = 0;
- intern->mode = mode;
- ce_iterator = Z_OBJCE_P(iterator); /* respect inheritance, don't use spl_ce_RecursiveIterator */
- intern->iterators[0].iterator = ce_iterator->get_iterator(ce_iterator, iterator TSRMLS_CC);
- iterator->refcount++;
- intern->iterators[0].zobject = iterator;
- intern->iterators[0].ce = ce_iterator;
- intern->iterators[0].state = RS_START;
-
- php_set_error_handling(EH_NORMAL, NULL TSRMLS_CC);
-} /* }}} */
-
-/* {{{ proto void RecursiveIteratorIterator::rewind()
- Rewind the iterator to the first element of the top level inner iterator. */
-SPL_METHOD(RecursiveIteratorIterator, rewind)
-{
- spl_recursive_it_object *object = (spl_recursive_it_object*)zend_object_store_get_object(getThis() TSRMLS_CC);
-
- spl_recursive_it_rewind_ex(object TSRMLS_CC);
-} /* }}} */
-
-/* {{{ proto bolean RecursiveIteratorIterator::valid()
- Check whether the current position is valid */
-SPL_METHOD(RecursiveIteratorIterator, valid)
-{
- spl_recursive_it_object *object = (spl_recursive_it_object*)zend_object_store_get_object(getThis() TSRMLS_CC);
-
- RETURN_BOOL(spl_recursive_it_valid_ex(object TSRMLS_CC) == SUCCESS);
-} /* }}} */
-
-/* {{{ proto mixed RecursiveIteratorIterator::key()
- Access the current key */
-SPL_METHOD(RecursiveIteratorIterator, key)
-{
- spl_recursive_it_object *object = (spl_recursive_it_object*)zend_object_store_get_object(getThis() TSRMLS_CC);
- zend_object_iterator *iterator = object->iterators[object->level].iterator;
-
- if (iterator->funcs->get_current_key) {
- char *str_key;
- uint str_key_len;
- ulong int_key;
- if (iterator->funcs->get_current_key(iterator, &str_key, &str_key_len, &int_key TSRMLS_CC) == HASH_KEY_IS_LONG) {
- RETURN_LONG(int_key);
- } else {
- RETURN_STRINGL(str_key, str_key_len-1, 0);
- }
- } else {
- RETURN_NULL();
- }
-} /* }}} */
-
-/* {{{ proto mixed RecursiveIteratorIterator::current()
- Access the current element value */
-SPL_METHOD(RecursiveIteratorIterator, current)
-{
- spl_recursive_it_object *object = (spl_recursive_it_object*)zend_object_store_get_object(getThis() TSRMLS_CC);
- zend_object_iterator *iterator = object->iterators[object->level].iterator;
- zval **data;
-
- iterator->funcs->get_current_data(iterator, &data TSRMLS_CC);
- RETURN_ZVAL(*data, 1, 0);
-} /* }}} */
-
-/* {{{ proto void RecursiveIteratorIterator::next()
- Move forward to the next element */
-SPL_METHOD(RecursiveIteratorIterator, next)
-{
- spl_recursive_it_object *object = (spl_recursive_it_object*)zend_object_store_get_object(getThis() TSRMLS_CC);
-
- spl_recursive_it_move_forward_ex(object TSRMLS_CC);
-} /* }}} */
-
-/* {{{ proto int RecursiveIteratorIterator::getDepth()
- Get the current depth of the recursive iteration */
-SPL_METHOD(RecursiveIteratorIterator, getDepth)
-{
- spl_recursive_it_object *object = (spl_recursive_it_object*)zend_object_store_get_object(getThis() TSRMLS_CC);
-
- RETURN_LONG(object->level);
-} /* }}} */
-
-/* {{{ proto RecursiveIterator RecursiveIteratorIterator::getSubIterator()
- The current active sub iterator */
-SPL_METHOD(RecursiveIteratorIterator, getSubIterator)
-{
- spl_recursive_it_object *object = (spl_recursive_it_object*)zend_object_store_get_object(getThis() TSRMLS_CC);
- long level = object->level;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|l", &level) == FAILURE) {
- return;
- }
- if (level < 0 || level > object->level) {
- RETURN_NULL();
- }
- RETURN_ZVAL(object->iterators[level].zobject, 1, 0);
-} /* }}} */
-
-/* {{{ spl_RecursiveIteratorIterator_dtor */
-static void spl_RecursiveIteratorIterator_free_storage(void *_object TSRMLS_DC)
-{
- spl_recursive_it_object *object = (spl_recursive_it_object *)_object;
- zend_object_iterator *sub_iter;
-
- if (object->iterators) {
- while (object->level >= 0) {
- sub_iter = object->iterators[object->level].iterator;
- sub_iter->funcs->dtor(sub_iter TSRMLS_CC);
- zval_ptr_dtor(&object->iterators[object->level--].zobject);
- }
- efree(object->iterators);
- }
-
- zend_hash_destroy(object->std.properties);
- FREE_HASHTABLE(object->std.properties);
-
- efree(object);
-}
-/* }}} */
-
-/* {{{ spl_RecursiveIteratorIterator_new */
-static zend_object_value spl_RecursiveIteratorIterator_new(zend_class_entry *class_type TSRMLS_DC)
-{
- zend_object_value retval;
- spl_recursive_it_object *intern;
- zval *tmp;
-
- intern = emalloc(sizeof(spl_recursive_it_object));
- memset(intern, 0, sizeof(spl_recursive_it_object));
- intern->std.ce = class_type;
-
- ALLOC_HASHTABLE(intern->std.properties);
- zend_hash_init(intern->std.properties, 0, NULL, ZVAL_PTR_DTOR, 0);
- zend_hash_copy(intern->std.properties, &class_type->default_properties, (copy_ctor_func_t) zval_add_ref, (void *) &tmp, sizeof(zval *));
-
- retval.handle = zend_objects_store_put(intern, NULL, (zend_objects_free_object_storage_t) spl_RecursiveIteratorIterator_free_storage, NULL TSRMLS_CC);
- retval.handlers = &spl_handlers_rec_it_it;
- return retval;
-}
-/* }}} */
-
-#if MBO_0
-static int spl_dual_it_gets_implemented(zend_class_entry *interface, zend_class_entry *class_type TSRMLS_DC)
-{
- class_type->iterator_funcs.zf_valid = NULL;
- class_type->iterator_funcs.zf_current = NULL;
- class_type->iterator_funcs.zf_key = NULL;
- class_type->iterator_funcs.zf_next = NULL;
- class_type->iterator_funcs.zf_rewind = NULL;
- if (!class_type->iterator_funcs.funcs) {
- class_type->iterator_funcs.funcs = &zend_interface_iterator_funcs_iterator;
- }
-
- return SUCCESS;
-}
-#endif
-
-static union _zend_function *spl_dual_it_get_method(zval *object, char *method, int method_len TSRMLS_DC)
-{
- union _zend_function *function_handler;
- spl_dual_it_object *intern;
-
- intern = (spl_dual_it_object*)zend_object_store_get_object(object TSRMLS_CC);
-
- function_handler = std_object_handlers.get_method(object, method, method_len TSRMLS_CC);
- if (!function_handler) {
- if (zend_hash_find(&intern->inner.ce->function_table, method, method_len+1, (void **) &function_handler) == FAILURE) {
- if (Z_OBJ_HT_P(intern->inner.zobject)->get_method) {
- function_handler = Z_OBJ_HT_P(intern->inner.zobject)->get_method(intern->inner.zobject, method, method_len TSRMLS_CC);
- }
- }
- }
- return function_handler;
-}
-
-#if MBO_0
-int spl_dual_it_call_method(char *method, INTERNAL_FUNCTION_PARAMETERS)
-{
- zval ***func_params, func;
- zval *retval_ptr;
- int arg_count;
- int current = 0;
- int success;
- void **p;
- spl_dual_it_object *intern;
-
- intern = (spl_dual_it_object*)zend_object_store_get_object(getThis() TSRMLS_CC);
-
- ZVAL_STRING(&func, method, 0);
- if (!zend_is_callable(&func, 0, &method)) {
- php_error_docref(NULL TSRMLS_CC, E_ERROR, "Method %s::%s() does not exist", intern->inner.ce->name, method);
- return FAILURE;
- }
-
- p = EG(argument_stack).top_element-2;
- arg_count = (ulong) *p;
-
- func_params = safe_emalloc(sizeof(zval **), arg_count, 0);
-
- current = 0;
- while (arg_count-- > 0) {
- func_params[current] = (zval **) p - (arg_count-current);
- current++;
- }
-
- if (call_user_function_ex(EG(function_table), NULL, &func, &retval_ptr, arg_count, func_params, 0, NULL TSRMLS_CC) == SUCCESS && retval_ptr) {
- RETURN_ZVAL(retval_ptr, 0, 1);
-
- success = SUCCESS;
- } else {
- php_error_docref(NULL TSRMLS_CC, E_ERROR, "Unable to call %s::%s()", intern->inner.ce->name, method);
- success = FAILURE;
- }
-
- efree(func_params);
- return success;
-}
-#endif
-
-static INLINE spl_dual_it_object* spl_dual_it_construct(INTERNAL_FUNCTION_PARAMETERS, zend_class_entry *ce_inner, dual_it_type dit_type)
-{
- zval *zobject;
- spl_dual_it_object *intern;
-
- php_set_error_handling(EH_THROW, zend_exception_get_default() TSRMLS_CC);
-
- intern = (spl_dual_it_object*)zend_object_store_get_object(getThis() TSRMLS_CC);
-
- intern->dit_type = dit_type;
- switch (dit_type) {
- case DIT_LimitIterator: {
- intern->u.limit.offset = 0; /* start at beginning */
- intern->u.limit.count = -1; /* get all */
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "O|ll", &zobject, ce_inner, &intern->u.limit.offset, &intern->u.limit.count) == FAILURE) {
- php_set_error_handling(EH_NORMAL, NULL TSRMLS_CC);
- return NULL;
- }
- if (intern->u.limit.offset < 0) {
- php_set_error_handling(EH_NORMAL, NULL TSRMLS_CC);
- zend_throw_exception(zend_exception_get_default(), "Parameter offset must be > 0", 0 TSRMLS_CC);
- return NULL;
- }
- if (intern->u.limit.count < 0 && intern->u.limit.count != -1) {
- php_set_error_handling(EH_NORMAL, NULL TSRMLS_CC);
- zend_throw_exception(zend_exception_get_default(), "Parameter count must either be -1 or a value greater than or equal 0", 0 TSRMLS_CC);
- return NULL;
- }
- break;
- }
- case DIT_CachingIterator:
- case DIT_CachingRecursiveIterator: {
- long flags = CIT_CALL_TOSTRING;
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "O|l", &zobject, ce_inner, &flags) == FAILURE) {
- php_set_error_handling(EH_NORMAL, NULL TSRMLS_CC);
- return NULL;
- }
- intern->u.caching.flags |= flags & CIT_PUBLIC;
- break;
- }
- default:
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "O", &zobject, ce_inner) == FAILURE) {
- php_set_error_handling(EH_NORMAL, NULL TSRMLS_CC);
- return NULL;
- }
- break;
- }
-
- zobject->refcount++;
- intern->inner.zobject = zobject;
- intern->inner.ce = Z_OBJCE_P(zobject);
- intern->inner.object = zend_object_store_get_object(zobject TSRMLS_CC);
- intern->inner.iterator = intern->inner.ce->get_iterator(intern->inner.ce, zobject TSRMLS_CC);
-
- php_set_error_handling(EH_NORMAL, NULL TSRMLS_CC);
- return intern;
-}
-
-/* {{{ proto FilterIterator::__construct(Iterator $it)
- Create an Iterator from another iterator */
-SPL_METHOD(dual_it, __construct)
-{
- spl_dual_it_construct(INTERNAL_FUNCTION_PARAM_PASSTHRU, zend_ce_iterator, DIT_Default);
-} /* }}} */
-
-/* {{{ proto Iterator FilterIterator::getInnerIterator()
- proto Iterator CachingIterator::getInnerIterator()
- proto Iterator LimitIterator::getInnerIterator()
- proto Iterator ParentIterator::getInnerIterator()
- Get the inner iterator */
-SPL_METHOD(dual_it, getInnerIterator)
-{
- spl_dual_it_object *intern;
-
- intern = (spl_dual_it_object*)zend_object_store_get_object(getThis() TSRMLS_CC);
-
- if (intern->inner.zobject) {
- RETVAL_ZVAL(intern->inner.zobject, 1, 0);
- } else {
- RETURN_NULL();
- }
-} /* }}} */
-
-static INLINE void spl_dual_it_require(spl_dual_it_object *intern TSRMLS_DC)
-{
- if (!intern->inner.iterator) {
- php_error_docref(NULL TSRMLS_CC, E_ERROR, "The inner constructor wasn't initialized with an iterator instance");
- }
-}
-
-static INLINE void spl_dual_it_free(spl_dual_it_object *intern TSRMLS_DC)
-{
- spl_dual_it_require(intern TSRMLS_CC);
- if (intern->inner.iterator && intern->inner.iterator->funcs->invalidate_current) {
- intern->inner.iterator->funcs->invalidate_current(intern->inner.iterator TSRMLS_CC);
- }
- if (intern->current.data) {
- zval_ptr_dtor(&intern->current.data);
- intern->current.data = NULL;
- }
- if (intern->current.str_key) {
- efree(intern->current.str_key);
- intern->current.str_key = NULL;
- }
- if (intern->dit_type == DIT_CachingIterator || intern->dit_type == DIT_CachingRecursiveIterator) {
- if (intern->u.caching.zstr) {
- zval_ptr_dtor(&intern->u.caching.zstr);
- intern->u.caching.zstr = NULL;
- }
- if (intern->u.caching.zchildren) {
- zval_ptr_dtor(&intern->u.caching.zchildren);
- intern->u.caching.zchildren = NULL;
- }
- }
-}
-
-static INLINE void spl_dual_it_rewind(spl_dual_it_object *intern TSRMLS_DC)
-{
- spl_dual_it_free(intern TSRMLS_CC);
- intern->current.pos = 0;
- if (intern->inner.iterator->funcs->rewind) {
- intern->inner.iterator->funcs->rewind(intern->inner.iterator TSRMLS_CC);
- }
-}
-
-static INLINE int spl_dual_it_valid(spl_dual_it_object *intern TSRMLS_DC)
-{
- /* FAILURE / SUCCESS */
- return intern->inner.iterator->funcs->valid(intern->inner.iterator TSRMLS_CC);
-}
-
-static INLINE int spl_dual_it_fetch(spl_dual_it_object *intern, int check_more TSRMLS_DC)
-{
- zval **data;
-
- spl_dual_it_free(intern TSRMLS_CC);
- if (!check_more || spl_dual_it_valid(intern TSRMLS_CC) == SUCCESS) {
- intern->inner.iterator->funcs->get_current_data(intern->inner.iterator, &data TSRMLS_CC);
- intern->current.data = *data;
- intern->current.data->refcount++;
- if (intern->inner.iterator->funcs->get_current_key) {
- intern->current.key_type = intern->inner.iterator->funcs->get_current_key(intern->inner.iterator, &intern->current.str_key, &intern->current.str_key_len, &intern->current.int_key TSRMLS_CC);
- } else {
- intern->current.key_type = HASH_KEY_IS_LONG;
- intern->current.int_key = intern->current.pos;
- }
- return SUCCESS;
- }
- return FAILURE;
-}
-
-static INLINE void spl_dual_it_next(spl_dual_it_object *intern, int do_free TSRMLS_DC)
-{
- if (do_free) {
- spl_dual_it_free(intern TSRMLS_CC);
- } else {
- spl_dual_it_require(intern TSRMLS_CC);
- }
- intern->inner.iterator->funcs->move_forward(intern->inner.iterator TSRMLS_CC);
- intern->current.pos++;
-}
-
-/* {{{ proto void ParentIterator::rewind()
- Rewind the iterator
- */
-SPL_METHOD(dual_it, rewind)
-{
- spl_dual_it_object *intern;
-
- intern = (spl_dual_it_object*)zend_object_store_get_object(getThis() TSRMLS_CC);
- spl_dual_it_rewind(intern TSRMLS_CC);
- spl_dual_it_fetch(intern, 1 TSRMLS_CC);
-} /* }}} */
-
-/* {{{ proto boolean FilterIterator::valid()
- proto boolean ParentIterator::valid()
- Check whether the current element is valid */
-SPL_METHOD(dual_it, valid)
-{
- spl_dual_it_object *intern;
-
- intern = (spl_dual_it_object*)zend_object_store_get_object(getThis() TSRMLS_CC);
-
- RETURN_BOOL(intern->current.data);
-} /* }}} */
-
-/* {{{ proto mixed FilterIterator::key()
- proto mixed CachingIterator::key()
- proto mixed LimitIterator::key()
- proto mixed ParentIterator::key()
- Get the current key */
-SPL_METHOD(dual_it, key)
-{
- spl_dual_it_object *intern;
-
- intern = (spl_dual_it_object*)zend_object_store_get_object(getThis() TSRMLS_CC);
-
- if (intern->current.data) {
- if (intern->current.key_type == HASH_KEY_IS_STRING) {
- RETURN_STRINGL(intern->current.str_key, intern->current.str_key_len-1, 1);
- } else {
- RETURN_LONG(intern->current.int_key);
- }
- }
- RETURN_NULL();
-} /* }}} */
-
-/* {{{ proto mixed FilterIterator::current()
- proto mixed CachingIterator::current()
- proto mixed LimitIterator::current()
- proto mixed ParentIterator::current()
- Get the current element value */
-SPL_METHOD(dual_it, current)
-{
- spl_dual_it_object *intern;
-
- intern = (spl_dual_it_object*)zend_object_store_get_object(getThis() TSRMLS_CC);
-
- if (intern->current.data) {
- RETVAL_ZVAL(intern->current.data, 1, 0);
- } else {
- RETURN_NULL();
- }
-} /* }}} */
-
-/* {{{ proto void ParentIterator::next()
- Move the iterator forward */
-SPL_METHOD(dual_it, next)
-{
- spl_dual_it_object *intern;
-
- intern = (spl_dual_it_object*)zend_object_store_get_object(getThis() TSRMLS_CC);
-
- spl_dual_it_next(intern, 1 TSRMLS_CC);
- spl_dual_it_fetch(intern, 1 TSRMLS_CC);
-} /* }}} */
-
-static INLINE void spl_filter_it_fetch(zval *zthis, spl_dual_it_object *intern TSRMLS_DC)
-{
- zval *retval;
-
- while (spl_dual_it_fetch(intern, 1 TSRMLS_CC) == SUCCESS) {
- zend_call_method_with_0_params(&zthis, intern->std.ce, NULL, "accept", &retval);
- if (retval) {
- if (zend_is_true(retval)) {
- zval_ptr_dtor(&retval);
- return;
- }
- zval_ptr_dtor(&retval);
- }
-
- intern->inner.iterator->funcs->move_forward(intern->inner.iterator TSRMLS_CC);
- }
- spl_dual_it_free(intern TSRMLS_CC);
-}
-
-static INLINE void spl_filter_it_rewind(zval *zthis, spl_dual_it_object *intern TSRMLS_DC)
-{
- spl_dual_it_rewind(intern TSRMLS_CC);
- spl_filter_it_fetch(zthis, intern TSRMLS_CC);
-}
-
-static INLINE void spl_filter_it_next(zval *zthis, spl_dual_it_object *intern TSRMLS_DC)
-{
- spl_dual_it_next(intern, 1 TSRMLS_CC);
- spl_filter_it_fetch(zthis, intern TSRMLS_CC);
-}
-
-/* {{{ proto void FilterIterator::rewind()
- Rewind the iterator */
-SPL_METHOD(FilterIterator, rewind)
-{
- spl_dual_it_object *intern;
-
- intern = (spl_dual_it_object*)zend_object_store_get_object(getThis() TSRMLS_CC);
- spl_filter_it_rewind(getThis(), intern TSRMLS_CC);
-} /* }}} */
-
-/* {{{ proto void FilterIterator::next()
- Move the iterator forward */
-SPL_METHOD(FilterIterator, next)
-{
- spl_dual_it_object *intern;
-
- intern = (spl_dual_it_object*)zend_object_store_get_object(getThis() TSRMLS_CC);
- spl_filter_it_next(getThis(), intern TSRMLS_CC);
-} /* }}} */
-
-/* {{{ proto ParentIterator::__construct(RecursiveIterator $it)
- Create a ParentIterator from a RecursiveIterator */
-SPL_METHOD(ParentIterator, __construct)
-{
- spl_dual_it_construct(INTERNAL_FUNCTION_PARAM_PASSTHRU, spl_ce_RecursiveIterator, DIT_Default);
-} /* }}} */
-
-/* {{{ proto boolean ParentIterator::hasChildren()
- Check whether the inner iterator's current element has children */
-SPL_METHOD(ParentIterator, hasChildren)
-{
- spl_dual_it_object *intern;
- zval *retval;
-
- intern = (spl_dual_it_object*)zend_object_store_get_object(getThis() TSRMLS_CC);
-
- zend_call_method_with_0_params(&intern->inner.zobject, intern->inner.ce, NULL, "haschildren", &retval);
- RETURN_ZVAL(retval, 0, 1);
-} /* }}} */
-
-/* {{{ proto ParentIterator ParentIterator::getChildren()
- Return the inner iterator's children contained in a ParentIterator */
-SPL_METHOD(ParentIterator, getChildren)
-{
- spl_dual_it_object *intern;
- zval *retval;
-
- intern = (spl_dual_it_object*)zend_object_store_get_object(getThis() TSRMLS_CC);
-
- zend_call_method_with_0_params(&intern->inner.zobject, intern->inner.ce, NULL, "getchildren", &retval);
- spl_instantiate_arg_ex1(spl_ce_ParentIterator, &return_value, 0, retval TSRMLS_CC);
- zval_ptr_dtor(&retval);
-} /* }}} */
-
-/* {{{ spl_dual_it_free_storage */
-static INLINE void spl_dual_it_free_storage(void *_object TSRMLS_DC)
-{
- spl_dual_it_object *object = (spl_dual_it_object *)_object;
-
- spl_dual_it_free(object TSRMLS_CC);
-
- if (object->inner.iterator) {
- object->inner.iterator->funcs->dtor(object->inner.iterator TSRMLS_CC);
- }
-
- if (object->inner.zobject) {
- zval_ptr_dtor(&object->inner.zobject);
- }
-
- zend_hash_destroy(object->std.properties);
- FREE_HASHTABLE(object->std.properties);
-
- efree(object);
-}
-/* }}} */
-
-/* {{{ spl_dual_it_new */
-static zend_object_value spl_dual_it_new(zend_class_entry *class_type TSRMLS_DC)
-{
- zend_object_value retval;
- spl_dual_it_object *intern;
- zval *tmp;
-
- intern = emalloc(sizeof(spl_dual_it_object));
- memset(intern, 0, sizeof(spl_dual_it_object));
- intern->std.ce = class_type;
-
- ALLOC_HASHTABLE(intern->std.properties);
- zend_hash_init(intern->std.properties, 0, NULL, ZVAL_PTR_DTOR, 0);
- zend_hash_copy(intern->std.properties, &class_type->default_properties, (copy_ctor_func_t) zval_add_ref, (void *) &tmp, sizeof(zval *));
-
- retval.handle = zend_objects_store_put(intern, NULL, (zend_objects_free_object_storage_t) spl_dual_it_free_storage, NULL TSRMLS_CC);
- retval.handlers = &spl_handlers_dual_it;
- return retval;
-}
-/* }}} */
-
-static
-ZEND_BEGIN_ARG_INFO(arginfo_filter_it___construct, 0)
- ZEND_ARG_OBJ_INFO(0, iterator, Iterator, 0)
-ZEND_END_ARG_INFO();
-
-static zend_function_entry spl_funcs_FilterIterator[] = {
- SPL_ME(dual_it, __construct, arginfo_filter_it___construct, ZEND_ACC_PUBLIC)
- SPL_ME(FilterIterator, rewind, NULL, ZEND_ACC_PUBLIC)
- SPL_ME(dual_it, valid, NULL, ZEND_ACC_PUBLIC)
- SPL_ME(dual_it, key, NULL, ZEND_ACC_PUBLIC)
- SPL_ME(dual_it, current, NULL, ZEND_ACC_PUBLIC)
- SPL_ME(FilterIterator, next, NULL, ZEND_ACC_PUBLIC)
- SPL_ME(dual_it, getInnerIterator, NULL, ZEND_ACC_PUBLIC)
- SPL_ABSTRACT_ME(FilterIterator, accept, NULL)
- {NULL, NULL, NULL}
-};
-
-static
-ZEND_BEGIN_ARG_INFO(arginfo_parent_it___construct, 0)
- ZEND_ARG_OBJ_INFO(0, iterator, Iterator, 0)
-ZEND_END_ARG_INFO();
-
-static zend_function_entry spl_funcs_ParentIterator[] = {
- SPL_ME(ParentIterator, __construct, arginfo_parent_it___construct, ZEND_ACC_PUBLIC)
- SPL_MA(ParentIterator, accept, ParentIterator, hasChildren, NULL, ZEND_ACC_PUBLIC)
- SPL_ME(ParentIterator, hasChildren, NULL, ZEND_ACC_PUBLIC)
- SPL_ME(ParentIterator, getChildren, NULL, ZEND_ACC_PUBLIC)
- SPL_ME(dual_it, getInnerIterator, NULL, ZEND_ACC_PUBLIC)
- {NULL, NULL, NULL}
-};
-
-static INLINE int spl_limit_it_valid(spl_dual_it_object *intern TSRMLS_DC)
-{
- /* FAILURE / SUCCESS */
- if (intern->u.limit.count != -1 && intern->current.pos >= intern->u.limit.offset + intern->u.limit.count) {
- return FAILURE;
- } else {
- return spl_dual_it_valid(intern TSRMLS_CC);
- }
-}
-
-static INLINE void spl_limit_it_seek(spl_dual_it_object *intern, long pos TSRMLS_DC)
-{
- zval *zpos;
-
- spl_dual_it_free(intern TSRMLS_CC);
- if (pos < intern->u.limit.offset) {
- zend_throw_exception_ex(zend_exception_get_default(), 0 TSRMLS_CC, "Cannot seek to %ld which is below the offset %ld", pos, intern->u.limit.offset);
- return;
- }
- if (pos > intern->u.limit.offset + intern->u.limit.count && intern->u.limit.count != -1) {
- zend_throw_exception_ex(zend_exception_get_default(), 0 TSRMLS_CC, "Cannot seek to %ld which is behind offest %ld plus count %ld", pos, intern->u.limit.offset, intern->u.limit.count);
- return;
- }
- if (instanceof_function(intern->inner.ce, spl_ce_SeekableIterator TSRMLS_CC)) {
- MAKE_STD_ZVAL(zpos);
- ZVAL_LONG(zpos, pos);
- spl_dual_it_free(intern TSRMLS_CC);
- zend_call_method_with_1_params(&intern->inner.zobject, intern->inner.ce, NULL, "seek", NULL, zpos);
- zval_ptr_dtor(&zpos);
- intern->current.pos = pos;
- if (spl_limit_it_valid(intern TSRMLS_CC) == SUCCESS) {
- spl_dual_it_fetch(intern, 0 TSRMLS_CC);
- }
- } else {
- /* emulate the forward seek, by next() calls */
- /* a back ward seek is done by a previous rewind() */
- if (pos < intern->current.pos) {
- spl_dual_it_rewind(intern TSRMLS_CC);
- }
- while (pos > intern->current.pos && spl_dual_it_valid(intern TSRMLS_CC) == SUCCESS) {
- spl_dual_it_next(intern, 1 TSRMLS_CC);
- }
- if (spl_dual_it_valid(intern TSRMLS_CC) == SUCCESS) {
- spl_dual_it_fetch(intern, 1 TSRMLS_CC);
- }
- }
-}
-
-/* {{{ proto LimitIterator::__construct(Iterator $it [, int $offset, int $count])
- Construct a LimitIterator from an Iterator with a given starting offset and optionally a maximum count */
-SPL_METHOD(LimitIterator, __construct)
-{
- spl_dual_it_construct(INTERNAL_FUNCTION_PARAM_PASSTHRU, zend_ce_iterator, DIT_LimitIterator);
-} /* }}} */
-
-/* {{{ proto void LimitIterator::rewind()
- Rewind the iterator to the specified starting offset */
-SPL_METHOD(LimitIterator, rewind)
-{
- spl_dual_it_object *intern;
-
- intern = (spl_dual_it_object*)zend_object_store_get_object(getThis() TSRMLS_CC);
- spl_dual_it_rewind(intern TSRMLS_CC);
- spl_limit_it_seek(intern, intern->u.limit.offset TSRMLS_CC);
-} /* }}} */
-
-/* {{{ proto boolean LimitIterator::valid()
- Check whether the current element is valid */
-SPL_METHOD(LimitIterator, valid)
-{
- spl_dual_it_object *intern;
-
- intern = (spl_dual_it_object*)zend_object_store_get_object(getThis() TSRMLS_CC);
-
-/* RETURN_BOOL(spl_limit_it_valid(intern TSRMLS_CC) == SUCCESS);*/
- RETURN_BOOL((intern->u.limit.count == -1 || intern->current.pos < intern->u.limit.offset + intern->u.limit.count) && intern->current.data);
-} /* }}} */
-
-/* {{{ proto void LimitIterator::next()
- Move the iterator forward */
-SPL_METHOD(LimitIterator, next)
-{
- spl_dual_it_object *intern;
-
- intern = (spl_dual_it_object*)zend_object_store_get_object(getThis() TSRMLS_CC);
-
- spl_dual_it_next(intern, 1 TSRMLS_CC);
- if (intern->u.limit.count == -1 || intern->current.pos < intern->u.limit.offset + intern->u.limit.count) {
- spl_dual_it_fetch(intern, 1 TSRMLS_CC);
- }
-} /* }}} */
-
-/* {{{ proto void LimitIterator::seek(int $position)
- Seek to the given position */
-SPL_METHOD(LimitIterator, seek)
-{
- spl_dual_it_object *intern;
- long pos;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &pos) == FAILURE) {
- return;
- }
-
- intern = (spl_dual_it_object*)zend_object_store_get_object(getThis() TSRMLS_CC);
- spl_limit_it_seek(intern, pos TSRMLS_CC);
- RETURN_LONG(intern->current.pos);
-} /* }}} */
-
-/* {{{ proto int LimitIterator::getPosition()
- Return the current position */
-SPL_METHOD(LimitIterator, getPosition)
-{
- spl_dual_it_object *intern;
- intern = (spl_dual_it_object*)zend_object_store_get_object(getThis() TSRMLS_CC);
- RETURN_LONG(intern->current.pos);
-} /* }}} */
-
-static
-ZEND_BEGIN_ARG_INFO(arginfo_seekable_it_seek, 0)
- ZEND_ARG_INFO(0, position)
-ZEND_END_ARG_INFO();
-
-static zend_function_entry spl_funcs_SeekableIterator[] = {
- SPL_ABSTRACT_ME(SeekableIterator, seek, arginfo_seekable_it_seek)
- {NULL, NULL, NULL}
-};
-
-static
-ZEND_BEGIN_ARG_INFO(arginfo_limit_it___construct, 0)
- ZEND_ARG_OBJ_INFO(0, iterator, Iterator, 0)
- ZEND_ARG_INFO(0, offset)
- ZEND_ARG_INFO(0, count)
-ZEND_END_ARG_INFO();
-
-static
-ZEND_BEGIN_ARG_INFO(arginfo_limit_it_seek, 0)
- ZEND_ARG_INFO(0, position)
-ZEND_END_ARG_INFO();
-
-static zend_function_entry spl_funcs_LimitIterator[] = {
- SPL_ME(LimitIterator, __construct, arginfo_limit_it___construct, ZEND_ACC_PUBLIC)
- SPL_ME(LimitIterator, rewind, NULL, ZEND_ACC_PUBLIC)
- SPL_ME(LimitIterator, valid, NULL, ZEND_ACC_PUBLIC)
- SPL_ME(dual_it, key, NULL, ZEND_ACC_PUBLIC)
- SPL_ME(dual_it, current, NULL, ZEND_ACC_PUBLIC)
- SPL_ME(LimitIterator, next, NULL, ZEND_ACC_PUBLIC)
- SPL_ME(LimitIterator, seek, arginfo_limit_it_seek, ZEND_ACC_PUBLIC)
- SPL_ME(LimitIterator, getPosition, NULL, ZEND_ACC_PUBLIC)
- SPL_ME(dual_it, getInnerIterator, NULL, ZEND_ACC_PUBLIC)
- {NULL, NULL, NULL}
-};
-
-static INLINE int spl_caching_it_valid(spl_dual_it_object *intern TSRMLS_DC)
-{
- return intern->u.caching.flags & CIT_VALID ? SUCCESS : FAILURE;
-}
-
-static INLINE int spl_caching_it_has_next(spl_dual_it_object *intern TSRMLS_DC)
-{
- return spl_dual_it_valid(intern TSRMLS_CC);
-}
-
-static INLINE void spl_caching_it_next(spl_dual_it_object *intern TSRMLS_DC)
-{
- if (spl_dual_it_fetch(intern, 1 TSRMLS_CC) == SUCCESS) {
- intern->u.caching.flags |= CIT_VALID;
- if (intern->dit_type == DIT_CachingRecursiveIterator) {
- zval *retval, *zchildren, zflags;
- zend_call_method_with_0_params(&intern->inner.zobject, intern->inner.ce, NULL, "haschildren", &retval);
- if (zend_is_true(retval)) {
- zend_call_method_with_0_params(&intern->inner.zobject, intern->inner.ce, NULL, "getchildren", &zchildren);
- if (EG(exception) && intern->u.caching.flags & CIT_CATCH_GET_CHILD) {
- zval_ptr_dtor(&EG(exception));
- EG(exception) = NULL;
- if (zchildren) {
- zval_ptr_dtor(&zchildren);
- }
- } else {
- INIT_PZVAL(&zflags);
- ZVAL_LONG(&zflags, intern->u.caching.flags & CIT_PUBLIC);
- spl_instantiate_arg_ex2(spl_ce_CachingRecursiveIterator, &intern->u.caching.zchildren, 1, zchildren, &zflags TSRMLS_CC);
- zval_ptr_dtor(&zchildren);
- }
- }
- zval_ptr_dtor(&retval);
- }
- if (intern->u.caching.flags & CIT_CALL_TOSTRING) {
- if (Z_TYPE_P(intern->current.data) == IS_OBJECT) {
- zval expr_copy;
- if (intern->current.data->value.obj.handlers->cast_object &&
- intern->current.data->value.obj.handlers->cast_object(intern->current.data, &expr_copy, IS_STRING, 0 TSRMLS_CC) == SUCCESS)
- {
- ALLOC_ZVAL(intern->u.caching.zstr);
- *intern->u.caching.zstr = expr_copy;
- INIT_PZVAL(intern->u.caching.zstr);
- zval_copy_ctor(intern->u.caching.zstr);
- zval_dtor(&expr_copy);
- } else {
- zend_class_entry *ce_data = spl_get_class_entry(intern->current.data TSRMLS_CC);
- if (ce_data && zend_hash_exists(&ce_data->function_table, "__tostring", sizeof("__tostring"))) {
- zend_call_method_with_0_params(&intern->current.data, ce_data, NULL, "__tostring", &intern->u.caching.zstr);
- } else {
- ALLOC_ZVAL(intern->u.caching.zstr);
- *intern->u.caching.zstr = *intern->current.data;
- zval_copy_ctor(intern->u.caching.zstr);
- INIT_PZVAL(intern->u.caching.zstr);
- convert_to_string(intern->u.caching.zstr);
- }
- }
- } else {
- /* This version requires zend_make_printable_zval() being able to
- * call __toString().
- */
- int use_copy;
- zval expr_copy;
- ALLOC_ZVAL(intern->u.caching.zstr);
- *intern->u.caching.zstr = *intern->current.data;
- zend_make_printable_zval(intern->u.caching.zstr, &expr_copy, &use_copy);
- if (use_copy) {
- *intern->u.caching.zstr = expr_copy;
- INIT_PZVAL(intern->u.caching.zstr);
- zval_copy_ctor(intern->u.caching.zstr);
- zval_dtor(&expr_copy);
- } else {
- zval_copy_ctor(intern->u.caching.zstr);
- }
- }
- }
- spl_dual_it_next(intern, 0 TSRMLS_CC);
- } else {
- intern->u.caching.flags &= ~CIT_VALID;
- }
-}
-
-static INLINE void spl_caching_it_rewind(spl_dual_it_object *intern TSRMLS_DC)
-{
- spl_dual_it_rewind(intern TSRMLS_CC);
- spl_caching_it_next(intern TSRMLS_CC);
-}
-
-/* {{{ proto CachingIterator::__construct(Iterator $it)
- Construct a CachingIterator from an Iterator */
-SPL_METHOD(CachingIterator, __construct)
-{
- spl_dual_it_construct(INTERNAL_FUNCTION_PARAM_PASSTHRU, zend_ce_iterator, DIT_CachingIterator);
-} /* }}} */
-
-/* {{{ proto void CachingIterator::rewind()
- Rewind the iterator */
-SPL_METHOD(CachingIterator, rewind)
-{
- spl_dual_it_object *intern;
-
- intern = (spl_dual_it_object*)zend_object_store_get_object(getThis() TSRMLS_CC);
-
- spl_caching_it_rewind(intern TSRMLS_CC);
-} /* }}} */
-
-/* {{{ proto boolean CachingIterator::valid()
- Check whether the current element is valid */
-SPL_METHOD(CachingIterator, valid)
-{
- spl_dual_it_object *intern;
-
- intern = (spl_dual_it_object*)zend_object_store_get_object(getThis() TSRMLS_CC);
-
- RETURN_BOOL(spl_caching_it_valid(intern TSRMLS_CC) == SUCCESS);
-} /* }}} */
-
-/* {{{ proto void CachingIterator::next()
- Move the iterator forward */
-SPL_METHOD(CachingIterator, next)
-{
- spl_dual_it_object *intern;
-
- intern = (spl_dual_it_object*)zend_object_store_get_object(getThis() TSRMLS_CC);
-
- spl_caching_it_next(intern TSRMLS_CC);
-} /* }}} */
-
-/* {{{ proto boolean CachingIterator::hasNext()
- Cehck whether the inner iterator has a valid next element */
-SPL_METHOD(CachingIterator, hasNext)
-{
- spl_dual_it_object *intern;
-
- intern = (spl_dual_it_object*)zend_object_store_get_object(getThis() TSRMLS_CC);
-
- RETURN_BOOL(spl_caching_it_has_next(intern TSRMLS_CC) == SUCCESS);
-} /* }}} */
-
-/* {{{ proto string CachingIterator::__toString()
- Retrun the string representation of the current element */
-SPL_METHOD(CachingIterator, __toString)
-{
- spl_dual_it_object *intern;
-
- intern = (spl_dual_it_object*)zend_object_store_get_object(getThis() TSRMLS_CC);
-
- if (!(intern->u.caching.flags & CIT_CALL_TOSTRING)) {
- zend_throw_exception_ex(zend_exception_get_default(), 0 TSRMLS_CC, "%s does not fetch string value (see CachingIterator::__construct)", Z_OBJCE_P(getThis())->name);
- }
- if (intern->u.caching.zstr) {
- RETURN_STRINGL(Z_STRVAL_P(intern->u.caching.zstr), Z_STRLEN_P(intern->u.caching.zstr), 1);
- } else {
- RETURN_NULL();
- }
-} /* }}} */
-
-static
-ZEND_BEGIN_ARG_INFO(arginfo_caching_it___construct, 0)
- ZEND_ARG_OBJ_INFO(0, iterator, Iterator, 0)
- ZEND_ARG_INFO(0, getStrVal)
-ZEND_END_ARG_INFO();
-
-static zend_function_entry spl_funcs_CachingIterator[] = {
- SPL_ME(CachingIterator, __construct, arginfo_caching_it___construct, ZEND_ACC_PUBLIC)
- SPL_ME(CachingIterator, rewind, NULL, ZEND_ACC_PUBLIC)
- SPL_ME(CachingIterator, valid, NULL, ZEND_ACC_PUBLIC)
- SPL_ME(dual_it, key, NULL, ZEND_ACC_PUBLIC)
- SPL_ME(dual_it, current, NULL, ZEND_ACC_PUBLIC)
- SPL_ME(CachingIterator, next, NULL, ZEND_ACC_PUBLIC)
- SPL_ME(CachingIterator, hasNext, NULL, ZEND_ACC_PUBLIC)
- SPL_ME(CachingIterator, __toString, NULL, ZEND_ACC_PUBLIC)
- SPL_ME(dual_it, getInnerIterator, NULL, ZEND_ACC_PUBLIC)
- {NULL, NULL, NULL}
-};
-
-/* {{{ proto CachingRecursiveIterator::__construct(RecursiveIterator $it)
- Create an iterator from a RecursiveIterator */
-SPL_METHOD(CachingRecursiveIterator, __construct)
-{
- spl_dual_it_construct(INTERNAL_FUNCTION_PARAM_PASSTHRU, spl_ce_RecursiveIterator, DIT_CachingRecursiveIterator);
-} /* }}} */
-
-/* {{{ proto bolean CachingRecursiveIterator::hasChildren()
- Cehck whether the current element of the inner iterator has children */
-SPL_METHOD(CachingRecursiveIterator, hasChildren)
-{
- spl_dual_it_object *intern;
-
- intern = (spl_dual_it_object*)zend_object_store_get_object(getThis() TSRMLS_CC);
-
- RETURN_BOOL(intern->u.caching.zchildren);
-} /* }}} */
-
-/* {{{ proto CachingRecursiveIterator CachingRecursiveIterator::getChildren()
- Return the inenr iteraor's children as a CachingRecursiveIterator */
-SPL_METHOD(CachingRecursiveIterator, getChildren)
-{
- spl_dual_it_object *intern;
-
- intern = (spl_dual_it_object*)zend_object_store_get_object(getThis() TSRMLS_CC);
-
- if (intern->u.caching.zchildren) {
- RETURN_ZVAL(intern->u.caching.zchildren, 1, 0);
- } else {
- RETURN_NULL();
- }
-} /* }}} */
-
-static
-ZEND_BEGIN_ARG_INFO_EX(arginfo_caching_rec_it___construct, 0, ZEND_RETURN_REFERENCE_AGNOSTIC, 2)
- ZEND_ARG_OBJ_INFO(0, iterator, Iterator, 0)
- ZEND_ARG_INFO(0, getStrVal)
- ZEND_ARG_INFO(0, catch_getChildren)
-ZEND_END_ARG_INFO();
-
-static zend_function_entry spl_funcs_CachingRecursiveIterator[] = {
- SPL_ME(CachingRecursiveIterator, __construct, arginfo_caching_rec_it___construct, ZEND_ACC_PUBLIC)
- SPL_ME(CachingRecursiveIterator, hasChildren, NULL, ZEND_ACC_PUBLIC)
- SPL_ME(CachingRecursiveIterator, getChildren, NULL, ZEND_ACC_PUBLIC)
- {NULL, NULL, NULL}
-};
-
-/* {{{ PHP_MINIT_FUNCTION(spl_iterators)
- */
-PHP_MINIT_FUNCTION(spl_iterators)
-{
- REGISTER_SPL_INTERFACE(RecursiveIterator);
- REGISTER_SPL_ITERATOR(RecursiveIterator);
-
- REGISTER_SPL_STD_CLASS_EX(RecursiveIteratorIterator, spl_RecursiveIteratorIterator_new, spl_funcs_RecursiveIteratorIterator);
- REGISTER_SPL_ITERATOR(RecursiveIteratorIterator);
-
- memcpy(&spl_handlers_rec_it_it, zend_get_std_object_handlers(), sizeof(zend_object_handlers));
- spl_handlers_rec_it_it.clone_obj = NULL;
-
- memcpy(&spl_handlers_dual_it, zend_get_std_object_handlers(), sizeof(zend_object_handlers));
- spl_handlers_dual_it.get_method = spl_dual_it_get_method;
- /*spl_handlers_dual_it.call_method = spl_dual_it_call_method;*/
- spl_handlers_dual_it.clone_obj = NULL;
-
- spl_ce_RecursiveIteratorIterator->get_iterator = spl_recursive_it_get_iterator;
- spl_ce_RecursiveIteratorIterator->iterator_funcs.funcs = &spl_recursive_it_iterator_funcs;
-
- REGISTER_LONG_CONSTANT("RIT_LEAVES_ONLY", (long)RIT_LEAVES_ONLY, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("RIT_SELF_FIRST", (long)RIT_SELF_FIRST, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("RIT_CHILD_FIRST", (long)RIT_CHILD_FIRST, CONST_CS | CONST_PERSISTENT);
-
- REGISTER_SPL_STD_CLASS_EX(FilterIterator, spl_dual_it_new, spl_funcs_FilterIterator);
- REGISTER_SPL_ITERATOR(FilterIterator);
- spl_ce_FilterIterator->ce_flags |= ZEND_ACC_EXPLICIT_ABSTRACT_CLASS;
-
- REGISTER_SPL_SUB_CLASS_EX(ParentIterator, FilterIterator, spl_dual_it_new, spl_funcs_ParentIterator);
- REGISTER_SPL_IMPLEMENTS(ParentIterator, RecursiveIterator);
-
- REGISTER_SPL_INTERFACE(SeekableIterator);
- REGISTER_SPL_ITERATOR(SeekableIterator);
-
- REGISTER_SPL_STD_CLASS_EX(LimitIterator, spl_dual_it_new, spl_funcs_LimitIterator);
- REGISTER_SPL_ITERATOR(LimitIterator);
-
- REGISTER_SPL_STD_CLASS_EX(CachingIterator, spl_dual_it_new, spl_funcs_CachingIterator);
- REGISTER_SPL_ITERATOR(CachingIterator);
-
- REGISTER_LONG_CONSTANT("CIT_CALL_TOSTRING", (long)CIT_CALL_TOSTRING, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("CIT_CATCH_GET_CHILD", (long)CIT_CATCH_GET_CHILD, CONST_CS | CONST_PERSISTENT);
-
- REGISTER_SPL_SUB_CLASS_EX(CachingRecursiveIterator, CachingIterator, spl_dual_it_new, spl_funcs_CachingRecursiveIterator);
- REGISTER_SPL_IMPLEMENTS(CachingRecursiveIterator, RecursiveIterator);
-
- return SUCCESS;
-}
-/* }}} */
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- * vim600: fdm=marker
- * vim: noet sw=4 ts=4
- */
diff --git a/ext/spl/spl_iterators.h b/ext/spl/spl_iterators.h
deleted file mode 100755
index 4f57715ee0..0000000000
--- a/ext/spl/spl_iterators.h
+++ /dev/null
@@ -1,94 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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. |
- +----------------------------------------------------------------------+
- | Authors: Marcus Boerger <helly@php.net> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-#ifndef SPL_ITERATORS_H
-#define SPL_ITERATORS_H
-
-#include "php.h"
-#include "php_spl.h"
-
-extern zend_class_entry *spl_ce_RecursiveIterator;
-extern zend_class_entry *spl_ce_RecursiveIteratorIterator;
-extern zend_class_entry *spl_ce_FilterIterator;
-extern zend_class_entry *spl_ce_ParentIterator;
-extern zend_class_entry *spl_ce_SeekableIterator;
-extern zend_class_entry *spl_ce_LimitIterator;
-extern zend_class_entry *spl_ce_CachingIterator;
-extern zend_class_entry *spl_ce_CachingRecursiveIterator;
-
-PHP_MINIT_FUNCTION(spl_iterators);
-
-typedef enum {
- DIT_Default = 0,
- DIT_LimitIterator,
- DIT_CachingIterator,
- DIT_CachingRecursiveIterator
-} dual_it_type;
-
-enum {
- /* public */
- CIT_CALL_TOSTRING = 1,
- CIT_CATCH_GET_CHILD = 2,
- CIT_PUBLIC = CIT_CALL_TOSTRING|CIT_CATCH_GET_CHILD,
- /* private */
- CIT_VALID = 4,
- CIT_HAS_CHILDREN = 8
-};
-
-typedef struct _spl_dual_it_object {
- zend_object std;
- struct {
- zval *zobject;
- zend_class_entry *ce;
- zend_object *object;
- zend_object_iterator *iterator;
- } inner;
- struct {
- zval *data;
- char *str_key;
- uint str_key_len;
- ulong int_key;
- int key_type; /* HASH_KEY_IS_STRING or HASH_KEY_IS_LONG */
- int pos;
- } current;
- dual_it_type dit_type;
- union {
- struct {
- long offset;
- long count;
- } limit;
- struct {
- int flags; /* CIT_VALID, CIT_CALL_TOSTRING, CIT_CATCH_GET_CHILD */
- zval *zstr;
- zval *zchildren;
- } caching;
- } u;
-} spl_dual_it_object;
-
-#endif /* SPL_ITERATORS_H */
-
-/*
- * Local Variables:
- * c-basic-offset: 4
- * tab-width: 4
- * End:
- * vim600: fdm=marker
- * vim: noet sw=4 ts=4
- */
diff --git a/ext/spl/spl_sxe.c b/ext/spl/spl_sxe.c
deleted file mode 100755
index 325a5770b5..0000000000
--- a/ext/spl/spl_sxe.c
+++ /dev/null
@@ -1,178 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2003 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. |
- +----------------------------------------------------------------------+
- | Authors: Marcus Boerger <helly@php.net> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-#ifdef HAVE_CONFIG_H
-# include "config.h"
-#endif
-
-#include "php.h"
-#include "php_ini.h"
-#include "ext/standard/info.h"
-#include "zend_interfaces.h"
-
-#include "php_spl.h"
-#include "spl_functions.h"
-#include "spl_engine.h"
-#include "spl_iterators.h"
-#include "spl_sxe.h"
-
-zend_class_entry *spl_ce_SimpleXMLIterator = NULL;
-
-#if HAVE_LIBXML && HAVE_SIMPLEXML
-
-#include "ext/simplexml/php_simplexml_exports.h"
-
-SPL_METHOD(SimpleXMLIterator, rewind) /* {{{ */
-{
- php_sxe_object *sxe = php_sxe_fetch_object(getThis() TSRMLS_CC);
-
- php_sxe_reset_iterator(sxe TSRMLS_CC);
-}
-/* }}} */
-
-SPL_METHOD(SimpleXMLIterator, valid) /* {{{ */
-{
- php_sxe_object *sxe = php_sxe_fetch_object(getThis() TSRMLS_CC);
-
- RETURN_BOOL(sxe->iter.data);
-}
-/* }}} */
-
-SPL_METHOD(SimpleXMLIterator, current) /* {{{ */
-{
- php_sxe_object *sxe = php_sxe_fetch_object(getThis() TSRMLS_CC);
-
- if (!sxe->iter.data) {
- return; /* return NULL */
- }
-
- RETURN_ZVAL(sxe->iter.data, 1, 0);
-}
-/* }}} */
-
-SPL_METHOD(SimpleXMLIterator, key) /* {{{ */
-{
- xmlNodePtr curnode;
- php_sxe_object *intern;
- php_sxe_object *sxe = php_sxe_fetch_object(getThis() TSRMLS_CC);
-
- if (!sxe->iter.data) {
- RETURN_FALSE;
- }
-
- intern = (php_sxe_object *)zend_object_store_get_object(sxe->iter.data TSRMLS_CC);
- if (intern != NULL && intern->node != NULL) {
- curnode = (xmlNodePtr)((php_libxml_node_ptr *)intern->node)->node;
- RETURN_STRINGL((char*)curnode->name, xmlStrlen(curnode->name), 1);
- }
-
- RETURN_FALSE;
-}
-/* }}} */
-
-SPL_METHOD(SimpleXMLIterator, next) /* {{{ */
-{
- php_sxe_object *sxe = php_sxe_fetch_object(getThis() TSRMLS_CC);
-
- php_sxe_move_forward_iterator(sxe TSRMLS_CC);
-}
-/* }}} */
-
-/* {{{ hasChildren()
- */
-SPL_METHOD(SimpleXMLIterator, hasChildren)
-{
- php_sxe_object *sxe = php_sxe_fetch_object(getThis() TSRMLS_CC);
- php_sxe_object *child;
- xmlNodePtr node;
-
- if (!sxe->iter.data) {
- RETURN_FALSE;
- }
- child = php_sxe_fetch_object(sxe->iter.data TSRMLS_CC);
-
- GET_NODE(child, node);
- if (node) {
- node = node->children;
- }
- while (node && node->type != XML_ELEMENT_NODE) {
- node = node->next;
- }
- RETURN_BOOL(node ? 1 : 0);
-}
-/* }}} */
-
-/* {{{ getChildren()
- */
-SPL_METHOD(SimpleXMLIterator, getChildren)
-{
- php_sxe_object *sxe = php_sxe_fetch_object(getThis() TSRMLS_CC);
-
- if (!sxe->iter.data) {
- return; /* return NULL */
- }
- return_value->type = IS_OBJECT;
- return_value->value.obj = zend_objects_store_clone_obj(sxe->iter.data TSRMLS_CC);
-}
-
-static zend_function_entry spl_funcs_SimpleXMLIterator[] = {
- SPL_ME(SimpleXMLIterator, rewind, NULL, ZEND_ACC_PUBLIC)
- SPL_ME(SimpleXMLIterator, valid, NULL, ZEND_ACC_PUBLIC)
- SPL_ME(SimpleXMLIterator, current, NULL, ZEND_ACC_PUBLIC)
- SPL_ME(SimpleXMLIterator, key, NULL, ZEND_ACC_PUBLIC)
- SPL_ME(SimpleXMLIterator, next, NULL, ZEND_ACC_PUBLIC)
- SPL_ME(SimpleXMLIterator, hasChildren, NULL, ZEND_ACC_PUBLIC)
- SPL_ME(SimpleXMLIterator, getChildren, NULL, ZEND_ACC_PUBLIC)
- {NULL, NULL, NULL}
-};
-/* }}} */
-
-SPL_API PHP_MINIT_FUNCTION(spl_sxe) /* {{{ */
-{
- zend_class_entry *spl_ce_SimpleXML_Element = sxe_get_element_class_entry();
-
- if (!spl_ce_SimpleXML_Element) {
- return SUCCESS; /* SimpleXML must be initialized before */
- }
-
- REGISTER_SPL_SUB_CLASS_EX(SimpleXMLIterator, SimpleXML_Element, sxe_object_new, spl_funcs_SimpleXMLIterator);
- REGISTER_SPL_IMPLEMENTS(SimpleXMLIterator, RecursiveIterator);
-
- return SUCCESS;
-}
-/* }}} */
-
-#else /* HAVE_LIBXML && HAVE_SIMPLEXML */
-
-SPL_API PHP_MINIT_FUNCTION(spl_sxe) /* {{{ */
-{
- return SUCCESS;
-}
-
-#endif /* HAVE_LIBXML && HAVE_SIMPLEXML */
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- * vim600: fdm=marker
- * vim: noet sw=4 ts=4
- */
diff --git a/ext/spl/spl_sxe.h b/ext/spl/spl_sxe.h
deleted file mode 100755
index 7466808fdc..0000000000
--- a/ext/spl/spl_sxe.h
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2003 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. |
- +----------------------------------------------------------------------+
- | Authors: Marcus Boerger <helly@php.net> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-#ifndef SPL_SXE_H
-#define SPL_SXE_H
-
-#include "php.h"
-#include "php_spl.h"
-
-extern zend_class_entry *spl_ce_SimpleXMLIterator;
-
-SPL_API PHP_MINIT_FUNCTION(spl_sxe);
-
-#endif /* SPL_SXE_H */
-
-/*
- * Local Variables:
- * c-basic-offset: 4
- * tab-width: 4
- * End:
- * vim600: fdm=marker
- * vim: noet sw=4 ts=4
- */
diff --git a/ext/spl/tests/.htaccess b/ext/spl/tests/.htaccess
deleted file mode 100755
index 5a01a1c16e..0000000000
--- a/ext/spl/tests/.htaccess
+++ /dev/null
@@ -1,3 +0,0 @@
-<IfModule mod_autoindex.c>
- IndexIgnore .??* *~ *# HEADER* README* RCS CVS *,v *,t *.php
-</IfModule>
diff --git a/ext/spl/tests/array_001.phpt b/ext/spl/tests/array_001.phpt
deleted file mode 100755
index 1c7566ecb9..0000000000
--- a/ext/spl/tests/array_001.phpt
+++ /dev/null
@@ -1,103 +0,0 @@
---TEST--
-SPL: ArrayObject
---SKIPIF--
-<?php if (!extension_loaded("spl")) print "skip"; ?>
---FILE--
-<?php
-
-$ar = array(0=>0, 1=>1);
-$ar = new ArrayObject($ar);
-
-var_dump($ar);
-
-$ar[2] = 2;
-var_dump($ar[2]);
-var_dump($ar["3"] = 3);
-
-var_dump(array_merge((array)$ar, array(4=>4, 5=>5)));
-
-var_dump($ar["a"] = "a");
-
-var_dump($ar);
-var_dump($ar[0]);
-var_dump($ar[6]);
-var_dump($ar["b"]);
-
-unset($ar[1]);
-unset($ar["3"]);
-unset($ar["a"]);
-unset($ar[7]);
-unset($ar["c"]);
-var_dump($ar);
-
-$ar[] = '3';
-$ar[] = 4;
-var_dump($ar);
-
-?>
-===DONE===
-<?php exit(0); ?>
---EXPECTF--
-object(ArrayObject)#1 (2) {
- [0]=>
- int(0)
- [1]=>
- int(1)
-}
-int(2)
-int(3)
-array(6) {
- [0]=>
- int(0)
- [1]=>
- int(1)
- [2]=>
- int(2)
- [3]=>
- int(3)
- [4]=>
- int(4)
- [5]=>
- int(5)
-}
-string(1) "a"
-object(ArrayObject)#1 (5) {
- [0]=>
- int(0)
- [1]=>
- int(1)
- [2]=>
- int(2)
- [3]=>
- int(3)
- ["a"]=>
- string(1) "a"
-}
-int(0)
-
-Notice: Undefined offset: 6 in %sarray_001.php on line %d
-NULL
-
-Notice: Undefined index: b in %sarray_001.php on line %d
-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) {
- [0]=>
- int(0)
- [2]=>
- int(2)
-}
-object(ArrayObject)#1 (4) {
- [0]=>
- int(0)
- [2]=>
- int(2)
- [4]=>
- string(1) "3"
- [5]=>
- int(4)
-}
-===DONE===
diff --git a/ext/spl/tests/array_002.phpt b/ext/spl/tests/array_002.phpt
deleted file mode 100755
index 960253f335..0000000000
--- a/ext/spl/tests/array_002.phpt
+++ /dev/null
@@ -1,37 +0,0 @@
---TEST--
-SPL: ArrayObject copy constructor
---SKIPIF--
-<?php if (!extension_loaded("spl")) print "skip"; ?>
---FILE--
-<?php
-
-$array = array('1' => 'one',
- '2' => 'two',
- '3' => 'three');
-
-$object = new ArrayObject($array);
-$object[] = 'four';
-
-$arrayObject = new ArrayObject($object);
-
-$arrayObject[] = 'five';
-
-var_dump($arrayObject);
-
-?>
-===DONE===
-<?php exit(0); ?>
---EXPECTF--
-object(ArrayObject)#%d (5) {
- [1]=>
- string(3) "one"
- [2]=>
- string(3) "two"
- [3]=>
- string(5) "three"
- [4]=>
- string(4) "four"
- [5]=>
- string(4) "five"
-}
-===DONE===
diff --git a/ext/spl/tests/array_003.phpt b/ext/spl/tests/array_003.phpt
deleted file mode 100755
index 386c7bcf7d..0000000000
--- a/ext/spl/tests/array_003.phpt
+++ /dev/null
@@ -1,61 +0,0 @@
---TEST--
-SPL: ArrayObject from object
---SKIPIF--
-<?php if (!extension_loaded("spl")) print "skip"; ?>
---FILE--
-<?php
-
-// This test also needs to exclude the protected and private variables
-// since they cannot be accessed from the external object which iterates
-// them.
-
-class test
-{
- public $pub = "public";
- protected $pro = "protected";
- private $pri = "private";
-
- function __construct()
- {
- $this->imp = "implicit";
- }
-};
-
-$test = new test;
-$test->dyn = "dynamic";
-
-print_r($test);
-
-$object = new ArrayObject($test);
-
-print_r($object);
-
-foreach($test as $key => $val)
-{
- echo "$key => $val\n";
-}
-
-?>
-===DONE===
-<?php exit(0); ?>
---EXPECTF--
-test Object
-(
- [pub] => public
- [pro:protected] => protected
- [pri:private] => private
- [imp] => implicit
- [dyn] => dynamic
-)
-ArrayObject Object
-(
- [pub] => public
- [pro:protected] => protected
- [pri:private] => private
- [imp] => implicit
- [dyn] => dynamic
-)
-pub => public
-imp => implicit
-dyn => dynamic
-===DONE===
diff --git a/ext/spl/tests/array_004.phpt b/ext/spl/tests/array_004.phpt
deleted file mode 100755
index e7abf2b1dc..0000000000
--- a/ext/spl/tests/array_004.phpt
+++ /dev/null
@@ -1,143 +0,0 @@
---TEST--
-SPL: ArrayIterator
---SKIPIF--
-<?php if (!extension_loaded("spl")) print "skip"; ?>
---INI--
-allow_call_time_pass_reference=1
---FILE--
-<?php
-
-echo "==Normal==\n";
-
-$arr = array(0=>0, 1=>1, 2=>2);
-$obj = new ArrayObject($arr);
-
-foreach($obj as $ak=>$av) {
- foreach($obj as $bk=>$bv) {
- if ($ak==0 && $bk==0) {
- $arr[0] = "modify";
- }
- echo "$ak=>$av - $bk=>$bv\n";
- }
-}
-
-echo "==UseRef==\n";
-
-$arr = array(0=>0, 1=>1, 2=>2);
-$obj = new ArrayObject(&$arr);
-
-foreach($obj as $ak=>$av) {
- foreach($obj as $bk=>$bv) {
- if ($ak==0 && $bk==0) {
- $arr[0] = "modify";
- }
- echo "$ak=>$av - $bk=>$bv\n";
- }
-}
-
-echo "==Modify==\n";
-
-$arr = array(0=>0, 1=>1, 2=>2);
-$obj = new ArrayObject(&$arr);
-
-foreach($obj as $ak=>$av) {
- foreach($obj as $bk=>$bv) {
- if ($ak==0 && $bk==0) {
- $arr[0] = "modify";
- }
- echo "$ak=>$av - $bk=>$bv\n";
- }
-}
-
-echo "==Delete==\n";
-
-$arr = array(0=>0, 1=>1, 2=>2);
-$obj = new ArrayObject(&$arr);
-
-foreach($obj as $ak=>$av) {
- foreach($obj as $bk=>$bv) {
- if ($ak==1 && $bk==1) {
- unset($arr[1]);
- }
- echo "$ak=>$av - $bk=>$bv\n";
- }
-}
-
-echo "==Change==\n";
-
-$arr = array(0=>0, 1=>1, 2=>2);
-$obj = new ArrayObject(&$arr);
-
-foreach($obj as $ak=>$av) {
- foreach($obj as $bk=>$bv) {
- if ($ak==1 && $bk==1) {
- $arr = NULL;
- }
- echo "$ak=>$av - $bk=>$bv\n";
- }
-}
-
-echo "Done\n";
-?>
---EXPECTF--
-==Normal==
-0=>0 - 0=>0
-0=>0 - 1=>1
-0=>0 - 2=>2
-1=>1 - 0=>0
-1=>1 - 1=>1
-1=>1 - 2=>2
-2=>2 - 0=>0
-2=>2 - 1=>1
-2=>2 - 2=>2
-==UseRef==
-0=>0 - 0=>0
-0=>0 - 1=>1
-0=>0 - 2=>2
-1=>1 - 0=>modify
-1=>1 - 1=>1
-1=>1 - 2=>2
-2=>2 - 0=>modify
-2=>2 - 1=>1
-2=>2 - 2=>2
-==Modify==
-0=>0 - 0=>0
-0=>0 - 1=>1
-0=>0 - 2=>2
-1=>1 - 0=>modify
-1=>1 - 1=>1
-1=>1 - 2=>2
-2=>2 - 0=>modify
-2=>2 - 1=>1
-2=>2 - 2=>2
-==Delete==
-0=>0 - 0=>0
-0=>0 - 1=>1
-0=>0 - 2=>2
-1=>1 - 0=>0
-1=>1 - 1=>1
-
-Notice: main(): ArrayIterator::next(): Array was modified outside object and internal position is no longer valid in %sarray_004.php on line %d
-1=>1 - 0=>0
-1=>1 - 2=>2
-
-Notice: main(): ArrayIterator::next(): Array was modified outside object and internal position is no longer valid in %sarray_004.php on line %d
-0=>0 - 0=>0
-0=>0 - 2=>2
-2=>2 - 0=>0
-2=>2 - 2=>2
-==Change==
-0=>0 - 0=>0
-0=>0 - 1=>1
-0=>0 - 2=>2
-1=>1 - 0=>0
-1=>1 - 1=>1
-
-Notice: main(): ArrayIterator::current(): Array was modified outside object and is no longer an array in %sarray_004.php on line %d
-
-Notice: main(): ArrayIterator::valid(): Array was modified outside object and is no longer an array in %sarray_004.php on line %d
-
-Notice: main(): ArrayIterator::current(): Array was modified outside object and is no longer an array in %sarray_004.php on line %d
-
-Notice: main(): ArrayIterator::valid(): Array was modified outside object and is no longer an array in %sarray_004.php on line %d
-Done
diff --git a/ext/spl/tests/array_005.phpt b/ext/spl/tests/array_005.phpt
deleted file mode 100755
index 9214a4c92b..0000000000
--- a/ext/spl/tests/array_005.phpt
+++ /dev/null
@@ -1,93 +0,0 @@
---TEST--
-SPL: ArrayObject/Iterator interaction
---SKIPIF--
-<?php if (!extension_loaded("spl")) print "skip"; ?>
---FILE--
-<?php
-
-class Student
-{
- private $id;
- private $name;
-
- public function __construct($id, $name)
- {
- $this->id = $id;
- $this->name = $name;
- }
-
- public function __toString()
- {
- return $this->id . ', ' . $this->name;
- }
-
- public function getId()
- {
- return $this->id;
- }
-}
-
-class StudentIdFilter extends FilterIterator
-{
- private $id;
-
- public function __construct(ArrayObject $students, Student $other)
- {
- FilterIterator::__construct($students->getIterator());
- $this->id = $other->getId();
- }
-
- public function accept()
- {
- echo "ACCEPT ".$this->current()->getId()." == ".$this->id."\n";
- return $this->current()->getId() == $this->id;
- }
-}
-
-class StudentList implements IteratorAggregate
-{
- private $students;
-
- public function __construct()
- {
- $this->students = new ArrayObject(array());
- }
-
- public function add(Student $student)
- {
- if (!$this->contains($student)) {
- $this->students[] = $student;
- }
- }
-
- public function contains(Student $student)
- {
- foreach ($this->students as $s)
- {
- if ($s->getId() == $student->getId()) {
- return true;
- }
- }
- return false;
- }
-
- public function getIterator() {
- return $this->students->getIterator();
- }
-}
-
-$students = new StudentList();
-$students->add(new Student('01234123', 'Joe'));
-$students->add(new Student('00000014', 'Bob'));
-$students->add(new Student('00000014', 'Foo'));
-
-foreach ($students as $student) {
- echo $student, "\n";
-}
-?>
-===DONE===
-<?php exit(0); ?>
---EXPECT--
-01234123, Joe
-00000014, Bob
-===DONE===
diff --git a/ext/spl/tests/array_006.phpt b/ext/spl/tests/array_006.phpt
deleted file mode 100755
index 5dd9bdec7a..0000000000
--- a/ext/spl/tests/array_006.phpt
+++ /dev/null
@@ -1,32 +0,0 @@
---TEST--
-SPL: ArrayIterator without ArrayObject
---SKIPIF--
-<?php if (!extension_loaded("spl")) print "skip"; ?>
---INI--
-allow_call_time_pass_reference=1
---FILE--
-<?php
-
-echo "==Normal==\n";
-
-$arr = array(0=>0, 1=>1, 2=>2);
-$obj = new ArrayIterator($arr);
-
-foreach($obj as $ak=>$av) {
- foreach($obj as $bk=>$bv) {
- if ($ak==0 && $bk==0) {
- $arr[0] = "modify";
- }
- echo "$ak=>$av - $bk=>$bv\n";
- }
-}
-
-?>
-===DONE===
-<?php exit(0); ?>
---EXPECTF--
-==Normal==
-0=>0 - 0=>0
-0=>0 - 1=>1
-0=>0 - 2=>2
-===DONE===
diff --git a/ext/spl/tests/array_007.phpt b/ext/spl/tests/array_007.phpt
deleted file mode 100755
index 3e74e00da4..0000000000
--- a/ext/spl/tests/array_007.phpt
+++ /dev/null
@@ -1,65 +0,0 @@
---TEST--
-SPL: ArrayObject/Iterator from IteratorAggregate
---SKIPIF--
-<?php if (!extension_loaded("spl")) print "skip"; ?>
---FILE--
-<?php
-
-// This test also needs to exclude the protected and private variables
-// since they cannot be accessed from the external object which iterates
-// them.
-
-class test implements IteratorAggregate
-{
- public $pub = "public";
- protected $pro = "protected";
- private $pri = "private";
-
- function __construct()
- {
- $this->imp = "implicit";
- }
-
- function getIterator()
- {
- $it = new ArrayObject($this);
- return $it->getIterator();
- }
-};
-
-$test = new test;
-$test->dyn = "dynamic";
-
-print_r($test);
-
-print_r($test->getIterator());
-
-foreach($test as $key => $val)
-{
- echo "$key => $val\n";
-}
-
-?>
-===DONE===
-<?php exit(0); ?>
---EXPECTF--
-test Object
-(
- [pub] => public
- [pro:protected] => protected
- [pri:private] => private
- [imp] => implicit
- [dyn] => dynamic
-)
-ArrayIterator Object
-(
- [pub] => public
- [pro:protected] => protected
- [pri:private] => private
- [imp] => implicit
- [dyn] => dynamic
-)
-pub => public
-imp => implicit
-dyn => dynamic
-===DONE===
diff --git a/ext/spl/tests/array_008.phpt b/ext/spl/tests/array_008.phpt
deleted file mode 100755
index 613e324776..0000000000
--- a/ext/spl/tests/array_008.phpt
+++ /dev/null
@@ -1,62 +0,0 @@
---TEST--
-SPL: ArrayIterator and foreach reference
---SKIPIF--
-<?php if (!extension_loaded("spl")) print "skip"; ?>
---INI--
-allow_call_time_pass_reference=1
---FILE--
-<?php
-
-echo "==Normal==\n";
-
-$arr = array(0=>0, 1=>1, 2=>2);
-$obj = new ArrayObject($arr);
-
-foreach($obj as $ak=>&$av) {
- foreach($obj as $bk=>&$bv) {
- if ($ak==0 && $bk==0) {
- $bv = "modify";
- }
- echo "$ak=>$av - $bk=>$bv\n";
- }
-}
-
-echo "==UseRef==\n";
-
-$arr = array(0=>0, 1=>1, 2=>2);
-$obj = new ArrayObject(&$arr);
-
-foreach($obj as $ak=>&$av) {
- foreach($obj as $bk=>&$bv) {
- if ($ak==0 && $bk==0) {
- $bv = "modify";
- }
- echo "$ak=>$av - $bk=>$bv\n";
- }
-}
-
-?>
-===DONE===
-<?php exit(0); ?>
---EXPECTF--
-==Normal==
-0=>modify - 0=>modify
-0=>modify - 1=>1
-0=>modify - 2=>2
-1=>1 - 0=>modify
-1=>1 - 1=>1
-1=>1 - 2=>2
-2=>2 - 0=>modify
-2=>2 - 1=>1
-2=>2 - 2=>2
-==UseRef==
-0=>modify - 0=>modify
-0=>modify - 1=>1
-0=>modify - 2=>2
-1=>1 - 0=>modify
-1=>1 - 1=>1
-1=>1 - 2=>2
-2=>2 - 0=>modify
-2=>2 - 1=>1
-2=>2 - 2=>2
-===DONE===
diff --git a/ext/spl/tests/array_009.phpt b/ext/spl/tests/array_009.phpt
deleted file mode 100755
index f9c5fe1c73..0000000000
--- a/ext/spl/tests/array_009.phpt
+++ /dev/null
@@ -1,37 +0,0 @@
---TEST--
-SPL: ArrayIterator implementing RecursiveIterator
---FILE--
-<?php
-
-class RecursiceArrayIterator extends ArrayIterator implements RecursiveIterator
-{
- function hasChildren()
- {
- return is_array($this->current());
- }
-
- function getChildren()
- {
- return new RecursiceArrayIterator($this->current());
- }
-}
-
-$array = array(1, 2 => array(21, 22 => array(221, 222), 23 => array(231)), 3);
-
-$dir = new RecursiveIteratorIterator(new RecursiceArrayIterator($array), RIT_LEAVES_ONLY);
-
-foreach ($dir as $file) {
- print "$file\n";
-}
-
-?>
-===DONE===
-<?php exit(0); ?>
---EXPECT--
-1
-21
-221
-222
-231
-3
-===DONE===
diff --git a/ext/spl/tests/array_010.phpt b/ext/spl/tests/array_010.phpt
deleted file mode 100755
index 2c59b3be18..0000000000
--- a/ext/spl/tests/array_010.phpt
+++ /dev/null
@@ -1,148 +0,0 @@
---TEST--
-SPL: ArrayIterator implements ArrayAccess
---SKIPIF--
-<?php
- if (!class_exists('ArrayAccess')) die('skip ArrayAccess not present');
-?>
---FILE--
-<?php
-
-$obj = new ArrayObject(array('1st', 1, 2=>'3rd', '4th'=>4));
-
-var_dump($obj->getArrayCopy());
-
-echo "===EMPTY===\n";
-var_dump(empty($obj[0]));
-var_dump(empty($obj[1]));
-var_dump(empty($obj[2]));
-var_dump(empty($obj['4th']));
-var_dump(empty($obj['5th']));
-var_dump(empty($obj[6]));
-
-echo "===isset===\n";
-var_dump(isset($obj[0]));
-var_dump(isset($obj[1]));
-var_dump(isset($obj[2]));
-var_dump(isset($obj['4th']));
-var_dump(isset($obj['5th']));
-var_dump(isset($obj[6]));
-
-echo "===offsetGet===\n";
-var_dump($obj[0]);
-var_dump($obj[1]);
-var_dump($obj[2]);
-var_dump($obj['4th']);
-var_dump($obj['5th']);
-var_dump($obj[6]);
-
-echo "===offsetSet===\n";
-echo "WRITE 1\n";
-$obj[1] = 'Changed 1';
-var_dump($obj[1]);
-echo "WRITE 2\n";
-$obj['4th'] = 'Changed 4th';
-var_dump($obj['4th']);
-echo "WRITE 3\n";
-$obj['5th'] = 'Added 5th';
-var_dump($obj['5th']);
-echo "WRITE 4\n";
-$obj[6] = 'Added 6';
-var_dump($obj[6]);
-
-var_dump($obj[0]);
-var_dump($obj[2]);
-
-$x = $obj[6] = 'changed 6';
-var_dump($obj[6]);
-var_dump($x);
-
-echo "===unset===\n";
-var_dump($obj->getArrayCopy());
-unset($obj[2]);
-unset($obj['4th']);
-unset($obj[7]);
-unset($obj['8th']);
-var_dump($obj->getArrayCopy());
-
-?>
-===DONE===
-<?php exit(0); ?>
---EXPECTF--
-array(4) {
- [0]=>
- string(3) "1st"
- [1]=>
- int(1)
- [2]=>
- string(3) "3rd"
- ["4th"]=>
- int(4)
-}
-===EMPTY===
-bool(false)
-bool(false)
-bool(false)
-bool(false)
-bool(true)
-bool(true)
-===isset===
-bool(true)
-bool(true)
-bool(true)
-bool(true)
-bool(false)
-bool(false)
-===offsetGet===
-string(3) "1st"
-int(1)
-string(3) "3rd"
-int(4)
-
-Notice: Undefined index: 5th in %sarray_010.php on line %d
-NULL
-
-Notice: Undefined offset: 6 in %sarray_010.php on line %d
-NULL
-===offsetSet===
-WRITE 1
-string(9) "Changed 1"
-WRITE 2
-string(11) "Changed 4th"
-WRITE 3
-string(9) "Added 5th"
-WRITE 4
-string(7) "Added 6"
-string(3) "1st"
-string(3) "3rd"
-string(9) "changed 6"
-string(9) "changed 6"
-===unset===
-array(6) {
- [0]=>
- string(3) "1st"
- [1]=>
- string(9) "Changed 1"
- [2]=>
- string(3) "3rd"
- ["4th"]=>
- string(11) "Changed 4th"
- ["5th"]=>
- string(9) "Added 5th"
- [6]=>
- string(9) "changed 6"
-}
-
-Notice: Undefined offset: 7 in %sarray_010.php on line %d
-
-Notice: Undefined index: 8th in %sarray_010.php on line %d
-array(4) {
- [0]=>
- string(3) "1st"
- [1]=>
- string(9) "Changed 1"
- ["5th"]=>
- string(9) "Added 5th"
- [6]=>
- string(9) "changed 6"
-}
-===DONE===
diff --git a/ext/spl/tests/array_011.phpt b/ext/spl/tests/array_011.phpt
deleted file mode 100755
index 09b132cfef..0000000000
--- a/ext/spl/tests/array_011.phpt
+++ /dev/null
@@ -1,37 +0,0 @@
---TEST--
-SPL: ArrayIterator, LimitIterator and string keys
---SKIPIF--
-<?php if (!extension_loaded("spl")) print "skip"; ?>
---FILE--
-<?php
-
-$a = array('zero' => 0, 'one' => 1, 'two' => 2, 'three' => 3, 'four' => 4, 'five' => 5);
-//foreach (new ArrayIterator($a) as $k => $v)
-foreach (new LimitIterator(new ArrayIterator($a), 1, 3) as $k => $v)
-{
- var_dump(array($k, $v));
-}
-
-?>
-===DONE===
-<?php exit(0); ?>
---EXPECT--
-array(2) {
- [0]=>
- string(3) "one"
- [1]=>
- int(1)
-}
-array(2) {
- [0]=>
- string(3) "two"
- [1]=>
- int(2)
-}
-array(2) {
- [0]=>
- string(5) "three"
- [1]=>
- int(3)
-}
-===DONE===
diff --git a/ext/spl/tests/array_012.phpt b/ext/spl/tests/array_012.phpt
deleted file mode 100755
index a8889654a5..0000000000
--- a/ext/spl/tests/array_012.phpt
+++ /dev/null
@@ -1,65 +0,0 @@
---TEST--
-SPL: ArrayIterator::count
---SKIPIF--
-<?php if (!extension_loaded("spl")) print "skip"; ?>
---FILE--
-<?php
-
-echo "===Array===\n";
-
-$a = array('zero' => 0, 'one' => 1, 'two' => 2);
-$it = new ArrayIterator($a);
-
-var_dump($it->count());
-foreach($it as $key => $val)
-{
- echo "$key=>$val\n";
- var_dump($it->count());
-}
-var_dump($it->count());
-
-echo "===Object===\n";
-
-class test
-{
- public $zero = 0;
- protected $pro;
- public $one = 1;
- private $pri;
- public $two = 2;
-}
-
-$o = new test;
-$it = new ArrayIterator($o);
-
-var_dump($it->count());
-foreach($it as $key => $val)
-{
- echo "$key=>$val\n";
- var_dump($it->count());
-}
-var_dump($it->count());
-
-?>
-===DONE===
-<?php exit(0); ?>
---EXPECT--
-===Array===
-int(3)
-zero=>0
-int(3)
-one=>1
-int(3)
-two=>2
-int(3)
-int(3)
-===Object===
-int(3)
-zero=>0
-int(3)
-one=>1
-int(3)
-two=>2
-int(3)
-int(3)
-===DONE===
diff --git a/ext/spl/tests/array_013.phpt b/ext/spl/tests/array_013.phpt
deleted file mode 100755
index 6d74bcb419..0000000000
--- a/ext/spl/tests/array_013.phpt
+++ /dev/null
@@ -1,81 +0,0 @@
---TEST--
-SPL: ArrayIterator::append
---SKIPIF--
-<?php if (!extension_loaded("spl")) print "skip"; ?>
---FILE--
-<?php
-
-if (!class_exists('NoRewindIterator', false))
-{
- require_once(dirname(__FILE__) . '/../examples/norewinditerator.inc');
-}
-
-echo "===Array===\n";
-
-$a = array(0 => 'zero', 1 => 'one', 2 => 'two');
-$it = new ArrayIterator($a);
-
-foreach($it as $key => $val)
-{
- echo "$key=>$val\n";
-}
-
-echo "===Append===\n";
-
-$it->append('three');
-$it->append('four');
-
-foreach(new NoRewindIterator($it) as $key => $val)
-{
- echo "$key=>$val\n";
-}
-
-echo "===Object===\n";
-
-class test
-{
- public $zero = 0;
- protected $pro;
- public $one = 1;
- private $pri;
- public $two = 2;
-}
-
-$o = new test;
-$it = new ArrayIterator($o);
-
-foreach($it as $key => $val)
-{
- echo "$key=>$val\n";
-}
-
-echo "===Append===\n";
-
-$it->append('three');
-$it->append('four');
-
-foreach(new NoRewindIterator($it) as $key => $val)
-{
- echo "$key=>$val\n";
-}
-
-var_dump($o->{0}); /* doesn't wotk anyway */
-
-?>
-===DONE===
-<?php exit(0); ?>
---EXPECTF--
-===Array===
-0=>zero
-1=>one
-2=>two
-===Append===
-3=>three
-4=>four
-===Object===
-zero=>0
-one=>1
-two=>2
-===Append===
-
-Fatal error: ArrayIterator::append(): Cannot append properties to objects, use ArrayIterator::offsetSet() instead in %sarray_013.php on line %d
diff --git a/ext/spl/tests/array_014.phpt b/ext/spl/tests/array_014.phpt
deleted file mode 100755
index 2bd3fc8808..0000000000
--- a/ext/spl/tests/array_014.phpt
+++ /dev/null
@@ -1,44 +0,0 @@
---TEST--
-SPL: ArrayIterator::seek()
---SKIPIF--
-<?php if (!extension_loaded("spl")) print "skip"; ?>
---FILE--
-<?php
-
-$it = new ArrayIterator(range(0,10));
-var_dump($it->count());
-$it->seek(5);
-var_dump($it->current());
-$it->seek(4);
-var_dump($it->current());
-$it->seek(-1);
-var_dump($it->current());
-$it->seek(12);
-var_dump($it->current());
-
-foreach($it as $v)
-{
- var_dump($v);
-}
-
-?>
-===DONE===
-<?php exit(0); ?>
---EXPECTF--
-int(11)
-int(5)
-int(4)
-int(0)
-NULL
-int(0)
-int(1)
-int(2)
-int(3)
-int(4)
-int(5)
-int(6)
-int(7)
-int(8)
-int(9)
-int(10)
-===DONE===
diff --git a/ext/spl/tests/bug28822.phpt b/ext/spl/tests/bug28822.phpt
deleted file mode 100755
index c3da4607f5..0000000000
--- a/ext/spl/tests/bug28822.phpt
+++ /dev/null
@@ -1,16 +0,0 @@
---TEST--
-Bug #28822: ArrayObject::offsetExists() works inverted
---FILE--
-<?php
-
-$array = new ArrayObject();
-$array->offsetSet('key', 'value');
-var_dump($array->offsetExists('key'));
-var_dump($array->offsetExists('nokey'));
-
-?>
-===DONE===
---EXPECT--
-bool(true)
-bool(false)
-===DONE===
diff --git a/ext/spl/tests/iterator_001.phpt b/ext/spl/tests/iterator_001.phpt
deleted file mode 100755
index 2fd690294e..0000000000
--- a/ext/spl/tests/iterator_001.phpt
+++ /dev/null
@@ -1,162 +0,0 @@
---TEST--
-SPL: Iterator aggregating inner iterator's methods
---SKIPIF--
-<?php if (!extension_loaded("spl")) print "skip"; ?>
---FILE--
-<?php
-
-class NumericArrayIterator implements Iterator
-{
- protected $a;
- protected $i = 0;
-
- public function __construct($a)
- {
- echo __METHOD__ . "\n";
- $this->a = $a;
- }
-
- public function rewind()
- {
- echo __METHOD__ . "\n";
- $this->i = 0;
- }
-
- public function valid()
- {
- $ret = $this->i < count($this->a);
- echo __METHOD__ . '(' . ($ret ? 'true' : 'false') . ")\n";
- return $ret;
- }
-
- public function key()
- {
- echo __METHOD__ . "\n";
- return $this->i;
- }
-
- public function current()
- {
- echo __METHOD__ . "\n";
- return $this->a[$this->i];
- }
-
- public function next()
- {
- echo __METHOD__ . "\n";
- $this->i++;
- }
-
- public function greaterThen($comp)
- {
- echo get_class($this) . '::' . __FUNCTION__ . '(' . $comp . ")\n";
- return $this->current() > $comp;
- }
-}
-
-class SeekableNumericArrayIterator extends NumericArrayIterator implements SeekableIterator
-{
- public function seek($index)
- {
- if ($index < count($this->a)) {
- $this->i = $index;
- }
- echo __METHOD__ . '(' . $index . ")\n";
- }
-}
-
-$a = array(1, 2, 3, 4, 5);
-$it = new LimitIterator(new NumericArrayIterator($a), 1, 3);
-foreach ($it as $v)
-{
- print $v . ' is ' . ($it->greaterThen(2) ? 'greater than 2' : 'less than or equal 2') . "\n";
-}
-
-echo "===SEEKABLE===\n";
-$a = array(1, 2, 3, 4, 5);
-$it = new LimitIterator(new SeekableNumericArrayIterator($a), 1, 3);
-foreach($it as $v)
-{
- print $v . ' is ' . ($it->greaterThen(2) ? 'greater than 2' : 'less than or equal 2') . "\n";
-}
-
-echo "===STACKED===\n";
-$a = array(1, 2, 3, 4, 5);
-$it = new CachingIterator(new LimitIterator(new SeekableNumericArrayIterator($a), 1, 3));
-foreach($it as $v)
-{
- print $v . ' is ' . ($it->greaterThen(2) ? 'greater than 2' : 'less than or equal 2') . "\n";
-}
-
-?>
-===DONE===
-<?php exit(0); ?>
---EXPECT--
-NumericArrayIterator::__construct
-NumericArrayIterator::rewind
-NumericArrayIterator::valid(true)
-NumericArrayIterator::next
-NumericArrayIterator::valid(true)
-NumericArrayIterator::valid(true)
-NumericArrayIterator::current
-NumericArrayIterator::key
-LimitIterator::greaterThen(2)
-2 is less than or equal 2
-NumericArrayIterator::next
-NumericArrayIterator::valid(true)
-NumericArrayIterator::current
-NumericArrayIterator::key
-LimitIterator::greaterThen(2)
-3 is greater than 2
-NumericArrayIterator::next
-NumericArrayIterator::valid(true)
-NumericArrayIterator::current
-NumericArrayIterator::key
-LimitIterator::greaterThen(2)
-4 is greater than 2
-NumericArrayIterator::next
-===SEEKABLE===
-NumericArrayIterator::__construct
-NumericArrayIterator::rewind
-SeekableNumericArrayIterator::seek(1)
-NumericArrayIterator::valid(true)
-NumericArrayIterator::current
-NumericArrayIterator::key
-LimitIterator::greaterThen(2)
-2 is less than or equal 2
-NumericArrayIterator::next
-NumericArrayIterator::valid(true)
-NumericArrayIterator::current
-NumericArrayIterator::key
-LimitIterator::greaterThen(2)
-3 is greater than 2
-NumericArrayIterator::next
-NumericArrayIterator::valid(true)
-NumericArrayIterator::current
-NumericArrayIterator::key
-LimitIterator::greaterThen(2)
-4 is greater than 2
-NumericArrayIterator::next
-===STACKED===
-NumericArrayIterator::__construct
-NumericArrayIterator::rewind
-SeekableNumericArrayIterator::seek(1)
-NumericArrayIterator::valid(true)
-NumericArrayIterator::current
-NumericArrayIterator::key
-NumericArrayIterator::next
-NumericArrayIterator::valid(true)
-NumericArrayIterator::current
-NumericArrayIterator::key
-CachingIterator::greaterThen(2)
-2 is less than or equal 2
-NumericArrayIterator::next
-NumericArrayIterator::valid(true)
-NumericArrayIterator::current
-NumericArrayIterator::key
-CachingIterator::greaterThen(2)
-3 is greater than 2
-NumericArrayIterator::next
-CachingIterator::greaterThen(2)
-4 is greater than 2
-===DONE===
diff --git a/ext/spl/tests/iterator_002.phpt b/ext/spl/tests/iterator_002.phpt
deleted file mode 100755
index 25a9ce218d..0000000000
--- a/ext/spl/tests/iterator_002.phpt
+++ /dev/null
@@ -1,55 +0,0 @@
---TEST--
-SPL: Iterator using getInnerIterator
---FILE--
-<?php
-
-class RecursiceArrayIterator extends ArrayIterator implements RecursiveIterator
-{
- function hasChildren()
- {
- return is_array($this->current());
- }
-
- function getChildren()
- {
- return new RecursiceArrayIterator($this->current());
- }
-}
-
-class CrashIterator extends FilterIterator implements RecursiveIterator
-{
- function accept()
- {
- return true;
- }
-
- function hasChildren()
- {
- return $this->getInnerIterator()->hasChildren();
- }
-
- function getChildren()
- {
- return new RecursiceArrayIterator($this->getInnerIterator()->current());
- }
-}
-
-$array = array(1, 2 => array(21, 22 => array(221, 222), 23 => array(231)), 3);
-
-$dir = new RecursiveIteratorIterator(new CrashIterator(new RecursiceArrayIterator($array)), RIT_LEAVES_ONLY);
-
-foreach ($dir as $file) {
- print "$file\n";
-}
-
-?>
-===DONE===
-<?php exit(0); ?>
---EXPECT--
-1
-21
-221
-222
-231
-3
-===DONE===
diff --git a/ext/spl/tests/iterator_003.phpt b/ext/spl/tests/iterator_003.phpt
deleted file mode 100755
index c60776cb33..0000000000
--- a/ext/spl/tests/iterator_003.phpt
+++ /dev/null
@@ -1,97 +0,0 @@
---TEST--
-SPL: CachingIterator and __toString()
---SKIPIF--
-<?php if (!extension_loaded("spl")) print "skip"; ?>
---FILE--
-<?php
-
-class Student
-{
- private $id;
- private $name;
-
- public function __construct($id, $name)
- {
- $this->id = $id;
- $this->name = $name;
- }
-
- public function __toString()
- {
- return $this->id . ', ' . $this->name;
- }
-
- public function getId()
- {
- return $this->id;
- }
-}
-
-class StudentIdFilter extends FilterIterator
-{
- private $id;
-
- public function __construct(ArrayObject $students, Student $other)
- {
- FilterIterator::__construct($students->getIterator());
- $this->id = $other->getId();
- }
-
- public function accept()
- {
- echo "ACCEPT ".$this->current()->getId()." == ".$this->id."\n";
- return $this->current()->getId() == $this->id;
- }
-}
-
-class StudentList implements IteratorAggregate
-{
- private $students;
-
- public function __construct()
- {
- $this->students = new ArrayObject(array());
- }
-
- public function add(Student $student)
- {
- if (!$this->contains($student)) {
- $this->students[] = $student;
- }
- }
-
- public function contains(Student $student)
- {
- foreach ($this->students as $s)
- {
- if ($s->getId() == $student->getId()) {
- return true;
- }
- }
- return false;
- }
-
- public function getIterator() {
- return new CachingIterator($this->students->getIterator(), true);
- }
-}
-
-$students = new StudentList();
-$students->add(new Student('01234123', 'Joe'));
-$students->add(new Student('00000014', 'Bob'));
-$students->add(new Student('00000014', 'Foo'));
-
-// The goal is to verify we can access the cached string value even if it was
-// generated by a call to __toString(). To check this we need to access the
-// iterator's __toString() method.
-$it = $students->getIterator();
-foreach ($it as $student) {
- echo $it->__toString(), "\n";
-}
-?>
-===DONE===
-<?php exit(0); ?>
---EXPECT--
-01234123, Joe
-00000014, Bob
-===DONE===
diff --git a/ext/spl/tests/iterator_004.phpt b/ext/spl/tests/iterator_004.phpt
deleted file mode 100755
index 4e6006621b..0000000000
--- a/ext/spl/tests/iterator_004.phpt
+++ /dev/null
@@ -1,144 +0,0 @@
---TEST--
-SPL: SeekableIterator and string keys
---SKIPIF--
-<?php if (!extension_loaded("spl")) print "skip"; ?>
---FILE--
-<?php
-
-class NumericArrayIterator implements Iterator
-{
- protected $a;
- protected $i;
-
- public function __construct($a)
- {
- echo __METHOD__ . "\n";
- $this->a = $a;
- }
-
- public function rewind()
- {
- echo __METHOD__ . "\n";
- $this->i = 0;
- }
-
- public function valid()
- {
- $ret = $this->i < count($this->a);
- echo __METHOD__ . '(' . ($ret ? 'true' : 'false') . ")\n";
- return $ret;
- }
-
- public function key()
- {
- echo __METHOD__ . "\n";
- return $this->i;
- }
-
- public function current()
- {
- echo __METHOD__ . "\n";
- return $this->a[$this->i];
- }
-
- public function next()
- {
- echo __METHOD__ . "\n";
- $this->i++;
- }
-}
-
-class SeekableNumericArrayIterator extends NumericArrayIterator implements SeekableIterator
-{
- public function seek($index)
- {
- if ($index < count($this->a)) {
- $this->i = $index;
- }
- echo __METHOD__ . '(' . $index . ")\n";
- }
-}
-
-$a = array(1, 2, 3, 4, 5);
-foreach (new LimitIterator(new NumericArrayIterator($a), 1, 3) as $v)
-{
- print "$v\n";
-}
-
-echo "===SEEKABLE===\n";
-$a = array(1, 2, 3, 4, 5);
-foreach(new LimitIterator(new SeekableNumericArrayIterator($a), 1, 3) as $v)
-{
- print "$v\n";
-}
-
-echo "===SEEKING===\n";
-$a = array(1, 2, 3, 4, 5);
-$l = new LimitIterator(new SeekableNumericArrayIterator($a));
-for($i = 1; $i < 4; $i++)
-{
- $l->seek($i);
- print $l->current() . "\n";
-}
-
-?>
-===DONE===
-<?php exit(0); ?>
---EXPECT--
-NumericArrayIterator::__construct
-NumericArrayIterator::rewind
-NumericArrayIterator::valid(true)
-NumericArrayIterator::next
-NumericArrayIterator::valid(true)
-NumericArrayIterator::valid(true)
-NumericArrayIterator::current
-NumericArrayIterator::key
-2
-NumericArrayIterator::next
-NumericArrayIterator::valid(true)
-NumericArrayIterator::current
-NumericArrayIterator::key
-3
-NumericArrayIterator::next
-NumericArrayIterator::valid(true)
-NumericArrayIterator::current
-NumericArrayIterator::key
-4
-NumericArrayIterator::next
-===SEEKABLE===
-NumericArrayIterator::__construct
-NumericArrayIterator::rewind
-SeekableNumericArrayIterator::seek(1)
-NumericArrayIterator::valid(true)
-NumericArrayIterator::current
-NumericArrayIterator::key
-2
-NumericArrayIterator::next
-NumericArrayIterator::valid(true)
-NumericArrayIterator::current
-NumericArrayIterator::key
-3
-NumericArrayIterator::next
-NumericArrayIterator::valid(true)
-NumericArrayIterator::current
-NumericArrayIterator::key
-4
-NumericArrayIterator::next
-===SEEKING===
-NumericArrayIterator::__construct
-SeekableNumericArrayIterator::seek(1)
-NumericArrayIterator::valid(true)
-NumericArrayIterator::current
-NumericArrayIterator::key
-2
-SeekableNumericArrayIterator::seek(2)
-NumericArrayIterator::valid(true)
-NumericArrayIterator::current
-NumericArrayIterator::key
-3
-SeekableNumericArrayIterator::seek(3)
-NumericArrayIterator::valid(true)
-NumericArrayIterator::current
-NumericArrayIterator::key
-4
-===DONE===
diff --git a/ext/spl/tests/sxe_001.phpt b/ext/spl/tests/sxe_001.phpt
deleted file mode 100755
index 88f83f2abe..0000000000
--- a/ext/spl/tests/sxe_001.phpt
+++ /dev/null
@@ -1,60 +0,0 @@
---TEST--
-SPL: SimpleXMLIterator
---SKIPIF--
-<?php if (!extension_loaded("spl")) print "skip"; ?>
-<?php if (!extension_loaded("simplexml")) print "skip SimpleXML not present"; ?>
---FILE--
-<?php
-
-$xml =<<<EOF
-<?xml version='1.0'?>
-<!DOCTYPE sxe SYSTEM "notfound.dtd">
-<sxe id="elem1">
- <elem1 attr1='first'>
- <!-- comment -->
- <elem2>
- <elem3>
- <elem4>
- <?test processing instruction ?>
- </elem4>
- </elem3>
- </elem2>
- </elem1>
-</sxe>
-EOF;
-
-$sxe = simplexml_load_string($xml, 'SimpleXMLIterator');
-
-print_r($sxe);
-
-?>
-===DONE===
---EXPECT--
-SimpleXMLIterator Object
-(
- [elem1] => SimpleXMLIterator Object
- (
- [comment] => SimpleXMLIterator Object
- (
- )
-
- [elem2] => SimpleXMLIterator Object
- (
- [elem3] => SimpleXMLIterator Object
- (
- [elem4] => SimpleXMLIterator Object
- (
- [test] => SimpleXMLIterator Object
- (
- )
-
- )
-
- )
-
- )
-
- )
-
-)
-===DONE===
diff --git a/ext/spl/tests/sxe_002.phpt b/ext/spl/tests/sxe_002.phpt
deleted file mode 100755
index b230e8cd8d..0000000000
--- a/ext/spl/tests/sxe_002.phpt
+++ /dev/null
@@ -1,75 +0,0 @@
---TEST--
-SPL: SimpleXMLIterator and recursion
---SKIPIF--
-<?php
- if (!extension_loaded('simplexml')) print 'skip';
- if (!class_exists('RecursiveIteratorIterator')) print 'skip RecursiveIteratorIterator not available';
-?>
---FILE--
-<?php
-
-$xml =<<<EOF
-<?xml version='1.0'?>
-<!DOCTYPE sxe SYSTEM "notfound.dtd">
-<sxe id="elem1">
- Plain text.
- <elem1 attr1='first'>
- Bla bla 1.
- <!-- comment -->
- <elem2>
- Here we have some text data.
- <elem3>
- And here some more.
- <elem4>
- Wow once again.
- </elem4>
- </elem3>
- </elem2>
- </elem1>
- <elem11 attr2='second'>
- Bla bla 2.
- <elem111>
- Foo Bar
- </elem111>
- </elem11>
-</sxe>
-EOF;
-
-$sxe = simplexml_load_string($xml, 'SimpleXMLIterator');
-
-foreach(new RecursiveIteratorIterator($sxe, 1) as $name => $data) {
- var_dump($name);
- var_dump(get_class($data));
- var_dump(trim($data));
-}
-
-echo "===DUMP===\n";
-
-var_dump(get_class($sxe));
-var_dump(trim($sxe->elem1));
-
-?>
-===DONE===
---EXPECT--
-string(5) "elem1"
-string(17) "SimpleXMLIterator"
-string(10) "Bla bla 1."
-string(5) "elem2"
-string(17) "SimpleXMLIterator"
-string(28) "Here we have some text data."
-string(5) "elem3"
-string(17) "SimpleXMLIterator"
-string(19) "And here some more."
-string(5) "elem4"
-string(17) "SimpleXMLIterator"
-string(15) "Wow once again."
-string(6) "elem11"
-string(17) "SimpleXMLIterator"
-string(10) "Bla bla 2."
-string(7) "elem111"
-string(17) "SimpleXMLIterator"
-string(7) "Foo Bar"
-===DUMP===
-string(17) "SimpleXMLIterator"
-string(10) "Bla bla 1."
-===DONE===
diff --git a/ext/spl/tests/sxe_003.phpt b/ext/spl/tests/sxe_003.phpt
deleted file mode 100755
index aab7de7202..0000000000
--- a/ext/spl/tests/sxe_003.phpt
+++ /dev/null
@@ -1,77 +0,0 @@
---TEST--
-SPL: SimpleXMLIterator and getChildren()
---SKIPIF--
-<?php
- if (!extension_loaded('simplexml')) print 'skip';
- if (!class_exists('RecursiveIteratorIterator')) print 'skip RecursiveIteratorIterator not available';
-?>
---FILE--
-<?php
-
-$xml =<<<EOF
-<?xml version='1.0'?>
-<!DOCTYPE sxe SYSTEM "notfound.dtd">
-<sxe id="elem1">
- Plain text.
- <elem1 attr1='first'>
- Bla bla 1.
- <!-- comment -->
- <elem2>
- Here we have some text data.
- <elem3>
- And here some more.
- <elem4>
- Wow once again.
- </elem4>
- </elem3>
- </elem2>
- </elem1>
- <elem11 attr2='second'>
- Bla bla 2.
- <elem111>
- Foo Bar
- </elem111>
- </elem11>
-</sxe>
-EOF;
-
-$sxe = simplexml_load_string($xml, 'SimpleXMLIterator');
-
-foreach($sxe->getChildren() as $name => $data) {
- var_dump($name);
- var_dump(get_class($data));
- var_dump(trim($data));
-}
-
-echo "===RESET===\n";
-
-for ($sxe->rewind(); $sxe->valid(); $sxe->next()) {
- var_dump($sxe->hasChildren());
- var_dump(trim($sxe->key()));
- var_dump(trim($sxe->current()));
- foreach($sxe->getChildren() as $name => $data) {
- var_dump($name);
- var_dump(get_class($data));
- var_dump(trim($data));
- }
-}
-
-?>
-===DONE===
---EXPECTF--
-
-Warning: Invalid argument supplied for foreach() in %ssxe_003.php on line %d
-===RESET===
-bool(true)
-string(5) "elem1"
-string(10) "Bla bla 1."
-string(5) "elem2"
-string(17) "SimpleXMLIterator"
-string(28) "Here we have some text data."
-bool(true)
-string(6) "elem11"
-string(10) "Bla bla 2."
-string(7) "elem111"
-string(17) "SimpleXMLIterator"
-string(7) "Foo Bar"
-===DONE===
diff --git a/ext/sqlite/CREDITS b/ext/sqlite/CREDITS
deleted file mode 100644
index f77d1919ce..0000000000
--- a/ext/sqlite/CREDITS
+++ /dev/null
@@ -1,2 +0,0 @@
-SQLite
-Wez Furlong, Tal Peer, Marcus Boerger, Ilia Alshanetsky
diff --git a/ext/sqlite/README b/ext/sqlite/README
deleted file mode 100644
index 2f6cbb0f87..0000000000
--- a/ext/sqlite/README
+++ /dev/null
@@ -1,14 +0,0 @@
-This is an extension for the SQLite Embeddable SQL Database Engine.
-http://www.sqlite.org/
-
-SQLite is a C library that implements an embeddable SQL database engine.
-Programs that link with the SQLite library can have SQL database access
-without running a separate RDBMS process.
-
-SQLite is not a client library used to connect to a big database server.
-SQLite is the server. The SQLite library reads and writes directly to and from
-the database files on disk
-
-
-
-vim:tw=78:et
diff --git a/ext/sqlite/TODO b/ext/sqlite/TODO
deleted file mode 100644
index 94834a2e3a..0000000000
--- a/ext/sqlite/TODO
+++ /dev/null
@@ -1,19 +0,0 @@
-- Transparent binary encoding of return values from PHP callback functions.
-
-- Add user-space callback for the authorizer function (this is potentially
- very slow, so it needs to be implemented carefully).
-
-- Add user-space callback to handle busy databases.
-
-- Test-suite
-
- o Test how robust we are when a user-space function is registered as
- a callback for a persistent connection in script A, then script B is
- called that doesn't register the callback but does make use of the
- function in an SQL query.
- --> Our test suite doesn't allow us to test persistent connections
- at this time :/
-
-- Add support for compiled SQL.
-
-vim:tw=78
diff --git a/ext/sqlite/config.m4 b/ext/sqlite/config.m4
deleted file mode 100644
index bec92bbb6e..0000000000
--- a/ext/sqlite/config.m4
+++ /dev/null
@@ -1,112 +0,0 @@
-dnl $Id$
-dnl config.m4 for extension sqlite
-dnl vim:et:ts=2:sw=2
-
-PHP_ARG_ENABLE(sqlite-utf8, whether to enable UTF-8 support in sqlite (default: ISO-8859-1),
-[ --enable-sqlite-utf8 Enable UTF-8 support for SQLite], no, no)
-
-PHP_ARG_WITH(sqlite, for sqlite support,
-[ --without-sqlite Do not include sqlite support.
- Use --with-sqlite=DIR to specify DIR where
- Sqlite include and library files are located,
- if not using bundled library.], yes)
-
-if test "$PHP_SQLITE" != "no"; then
-
- if test "$PHP_SQLITE" != "yes"; then
- SEARCH_PATH="/usr/local /usr"
- SEARCH_FOR="/include/sqlite.h"
- if test -r $PHP_SQLITE/; then # path given as parameter
- SQLITE_DIR=$PHP_SQLITE
- else # search default path list
- AC_MSG_CHECKING([for sqlite files in default path])
- for i in $SEARCH_PATH ; do
- if test -r $i/$SEARCH_FOR; then
- SQLITE_DIR=$i
- AC_MSG_RESULT(found in $i)
- fi
- done
- fi
-
- if test -z "$SQLITE_DIR"; then
- AC_MSG_RESULT([not found])
- AC_MSG_ERROR([Please reinstall the sqlite distribution from http://www.sqlite.org])
- fi
-
- PHP_ADD_INCLUDE($SQLITE_DIR/include)
-
- LIBNAME=sqlite
- LIBSYMBOL=sqlite_open
-
- PHP_CHECK_LIBRARY($LIBNAME,$LIBSYMBOL,
- [
- PHP_ADD_LIBRARY_WITH_PATH($LIBNAME, $SQLITE_DIR/lib, SQLITE_SHARED_LIBADD)
- AC_DEFINE(HAVE_SQLITELIB,1,[ ])
- ],[
- AC_MSG_ERROR([wrong sqlite lib version or lib not found])
- ],[
- -L$SQLITE_DIR/lib -lm
- ])
-
- PHP_SUBST(SQLITE_SHARED_LIBADD)
- PHP_NEW_EXTENSION(sqlite, sqlite.c sess_sqlite.c libsqlite/src/encode.c, $ext_shared)
- else
- # use bundled library
-
- PHP_SQLITE_CFLAGS="-I@ext_srcdir@/libsqlite/src"
-
- sources="libsqlite/src/opcodes.c
- libsqlite/src/parse.c libsqlite/src/encode.c \
- libsqlite/src/auth.c libsqlite/src/btree.c libsqlite/src/build.c \
- libsqlite/src/delete.c libsqlite/src/expr.c libsqlite/src/func.c \
- libsqlite/src/hash.c libsqlite/src/insert.c libsqlite/src/main.c \
- libsqlite/src/os.c libsqlite/src/pager.c \
- libsqlite/src/printf.c libsqlite/src/random.c \
- libsqlite/src/select.c libsqlite/src/table.c libsqlite/src/tokenize.c \
- libsqlite/src/update.c libsqlite/src/util.c libsqlite/src/vdbe.c \
- libsqlite/src/attach.c libsqlite/src/btree_rb.c libsqlite/src/pragma.c \
- libsqlite/src/vacuum.c libsqlite/src/copy.c \
- libsqlite/src/vdbeaux.c libsqlite/src/date.c \
- libsqlite/src/where.c libsqlite/src/trigger.c"
-
- PHP_NEW_EXTENSION(sqlite, sqlite.c sess_sqlite.c $sources, $ext_shared,,$PHP_SQLITE_CFLAGS)
- PHP_ADD_BUILD_DIR($ext_builddir/libsqlite)
- PHP_ADD_BUILD_DIR($ext_builddir/libsqlite/src)
- AC_CHECK_SIZEOF(char *,4)
- AC_DEFINE(SQLITE_PTR_SZ, SIZEOF_CHAR_P, [Size of a pointer])
- dnl use latin 1 for SQLite older than 2.8.9; the utf-8 handling
- dnl in funcs.c uses assert(), which is a bit silly and something
- dnl we want to avoid. This assert() was removed in SQLite 2.8.9.
- if test "$PHP_SQLITE_UTF8" = "yes"; then
- SQLITE_ENCODING="UTF8"
- AC_DEFINE(SQLITE_UTF8, 1, [ ])
- else
- SQLITE_ENCODING="ISO8859"
- fi
- PHP_SUBST(SQLITE_ENCODING)
-
- SQLITE_VERSION=`cat $ext_srcdir/libsqlite/VERSION`
- PHP_SUBST(SQLITE_VERSION)
-
- sed -e s/--VERS--/$SQLITE_VERSION/ -e s/--ENCODING--/$SQLITE_ENCODING/ $ext_srcdir/libsqlite/src/sqlite.h.in >$ext_srcdir/libsqlite/src/sqlite.h
-
- if test "$ext_shared" = "no"; then
- echo '#include "php_config.h"' > $ext_srcdir/libsqlite/src/config.h
- else
- echo "#include \"$abs_builddir/config.h\"" > $ext_srcdir/libsqlite/src/config.h
- fi
-
- cat >> $ext_srcdir/libsqlite/src/config.h <<EOF
-#if ZTS
-# define THREADSAFE 1
-#endif
-#if !ZEND_DEBUG
-# define NDEBUG
-#endif
-EOF
-
- fi
-
- AC_CHECK_FUNCS(usleep nanosleep)
- AC_CHECK_HEADERS(time.h)
-fi
diff --git a/ext/sqlite/config.w32 b/ext/sqlite/config.w32
deleted file mode 100644
index 78b02edbb0..0000000000
--- a/ext/sqlite/config.w32
+++ /dev/null
@@ -1,32 +0,0 @@
-// $Id$
-// vim:ft=javascript
-
-ARG_WITH("sqlite", "SQLite support", "yes");
-
-if (PHP_SQLITE != "no") {
- copy_and_subst(configure_module_dirname + "\\libsqlite\\src\\sqlite.h.in",
- configure_module_dirname + "\\libsqlite\\src\\sqlite.h", new Array(
- "--VERS--", file_get_contents(configure_module_dirname + "\\libsqlite\\VERSION").replace(new RegExp("[\r\n]+", "g"), ""),
- "--ENCODING--", "ISO8859"
- ));
-
- FSO.CopyFile(configure_module_dirname + "\\libsqlite\\src\\sqlite_config.w32.h",
- configure_module_dirname + "\\libsqlite\\src\\config.h");
-
- EXTENSION("sqlite", "sqlite.c sess_sqlite.c", null,
- "/D PHP_SQLITE_EXPORTS /I " + configure_module_dirname + "/libsqlite/src");
-
-
- ADD_SOURCES(configure_module_dirname + "/libsqlite/src", "opcodes.c parse.c encode.c \
- auth.c btree.c build.c delete.c expr.c func.c hash.c insert.c \
- main.c os.c pager.c printf.c random.c select.c table.c tokenize.c \
- update.c util.c vdbe.c attach.c btree_rb.c pragma.c vacuum.c \
- copy.c where.c trigger.c vdbeaux.c date.c", "sqlite");
-
- AC_DEFINE("HAVE_SQLITE", 1, "SQLite support");
- if (!PHP_SQLITE_SHARED) {
- ADD_DEF_FILE(configure_module_dirname + "\\php_sqlite.def");
- }
-}
-
-
diff --git a/ext/sqlite/libsqlite/README b/ext/sqlite/libsqlite/README
deleted file mode 100644
index 326f3aa1ac..0000000000
--- a/ext/sqlite/libsqlite/README
+++ /dev/null
@@ -1,37 +0,0 @@
-This directory contains source code to
-
- SQLite: An Embeddable SQL Database Engine
-
-To compile the project, first create a directory in which to place
-the build products. It is recommended, but not required, that the
-build directory be separate from the source directory. Cd into the
-build directory and then from the build directory run the configure
-script found at the root of the source tree. Then run "make".
-
-For example:
-
- tar xzf sqlite.tar.gz ;# Unpack the source tree into "sqlite"
- mkdir bld ;# Build will occur in a sibling directory
- cd bld ;# Change to the build directory
- ../sqlite/configure ;# Run the configure script
- make ;# Run the makefile.
-
-The configure script uses autoconf 2.50 and libtool. If the configure
-script does not work out for you, there is a generic makefile named
-"Makefile.linux-gcc" in the top directory of the source tree that you
-can copy and edit to suite your needs. Comments on the generic makefile
-show what changes are needed.
-
-The linux binaries on the website are created using the generic makefile,
-not the configure script. The configure script is unmaintained. (You
-can volunteer to take over maintenance of the configure script, if you want!)
-The windows binaries on the website are created using MinGW32 configured
-as a cross-compiler running under Linux. For details, see the ./publish.sh
-script at the top-level of the source tree.
-
-Contacts:
-
- http://www.sqlite.org/
- http://www.hwaci.com/sw/sqlite/
- http://groups.yahoo.com/group/sqlite/
- drh@hwaci.com
diff --git a/ext/sqlite/libsqlite/VERSION b/ext/sqlite/libsqlite/VERSION
deleted file mode 100644
index 63cb62ffdb..0000000000
--- a/ext/sqlite/libsqlite/VERSION
+++ /dev/null
@@ -1 +0,0 @@
-2.8.14
diff --git a/ext/sqlite/libsqlite/src/attach.c b/ext/sqlite/libsqlite/src/attach.c
deleted file mode 100644
index 4e445ec413..0000000000
--- a/ext/sqlite/libsqlite/src/attach.c
+++ /dev/null
@@ -1,311 +0,0 @@
-/*
-** 2003 April 6
-**
-** The author disclaims copyright to this source code. In place of
-** a legal notice, here is a blessing:
-**
-** May you do good and not evil.
-** May you find forgiveness for yourself and forgive others.
-** May you share freely, never taking more than you give.
-**
-*************************************************************************
-** This file contains code used to implement the ATTACH and DETACH commands.
-**
-** $Id$
-*/
-#include "sqliteInt.h"
-
-/*
-** This routine is called by the parser to process an ATTACH statement:
-**
-** ATTACH DATABASE filename AS dbname
-**
-** The pFilename and pDbname arguments are the tokens that define the
-** filename and dbname in the ATTACH statement.
-*/
-void sqliteAttach(Parse *pParse, Token *pFilename, Token *pDbname, Token *pKey){
- Db *aNew;
- int rc, i;
- char *zFile, *zName;
- sqlite *db;
- Vdbe *v;
-
- v = sqliteGetVdbe(pParse);
- sqliteVdbeAddOp(v, OP_Halt, 0, 0);
- if( pParse->explain ) return;
- db = pParse->db;
- if( db->file_format<4 ){
- sqliteErrorMsg(pParse, "cannot attach auxiliary databases to an "
- "older format master database", 0);
- pParse->rc = SQLITE_ERROR;
- return;
- }
- if( db->nDb>=MAX_ATTACHED+2 ){
- sqliteErrorMsg(pParse, "too many attached databases - max %d",
- MAX_ATTACHED);
- pParse->rc = SQLITE_ERROR;
- return;
- }
-
- zFile = 0;
- sqliteSetNString(&zFile, pFilename->z, pFilename->n, 0);
- if( zFile==0 ) return;
- sqliteDequote(zFile);
-#ifndef SQLITE_OMIT_AUTHORIZATION
- if( sqliteAuthCheck(pParse, SQLITE_ATTACH, zFile, 0, 0)!=SQLITE_OK ){
- sqliteFree(zFile);
- return;
- }
-#endif /* SQLITE_OMIT_AUTHORIZATION */
-
- zName = 0;
- sqliteSetNString(&zName, pDbname->z, pDbname->n, 0);
- if( zName==0 ) return;
- sqliteDequote(zName);
- for(i=0; i<db->nDb; i++){
- if( db->aDb[i].zName && sqliteStrICmp(db->aDb[i].zName, zName)==0 ){
- sqliteErrorMsg(pParse, "database %z is already in use", zName);
- pParse->rc = SQLITE_ERROR;
- sqliteFree(zFile);
- return;
- }
- }
-
- if( db->aDb==db->aDbStatic ){
- aNew = sqliteMalloc( sizeof(db->aDb[0])*3 );
- if( aNew==0 ) return;
- memcpy(aNew, db->aDb, sizeof(db->aDb[0])*2);
- }else{
- aNew = sqliteRealloc(db->aDb, sizeof(db->aDb[0])*(db->nDb+1) );
- if( aNew==0 ) return;
- }
- db->aDb = aNew;
- aNew = &db->aDb[db->nDb++];
- memset(aNew, 0, sizeof(*aNew));
- sqliteHashInit(&aNew->tblHash, SQLITE_HASH_STRING, 0);
- sqliteHashInit(&aNew->idxHash, SQLITE_HASH_STRING, 0);
- sqliteHashInit(&aNew->trigHash, SQLITE_HASH_STRING, 0);
- sqliteHashInit(&aNew->aFKey, SQLITE_HASH_STRING, 1);
- aNew->zName = zName;
- rc = sqliteBtreeFactory(db, zFile, 0, MAX_PAGES, &aNew->pBt);
- if( rc ){
- sqliteErrorMsg(pParse, "unable to open database: %s", zFile);
- }
-#if SQLITE_HAS_CODEC
- {
- extern int sqliteCodecAttach(sqlite*, int, void*, int);
- char *zKey = 0;
- int nKey;
- if( pKey && pKey->z && pKey->n ){
- sqliteSetNString(&zKey, pKey->z, pKey->n, 0);
- sqliteDequote(zKey);
- nKey = strlen(zKey);
- }else{
- zKey = 0;
- nKey = 0;
- }
- sqliteCodecAttach(db, db->nDb-1, zKey, nKey);
- }
-#endif
- sqliteFree(zFile);
- db->flags &= ~SQLITE_Initialized;
- if( pParse->nErr ) return;
- if( rc==SQLITE_OK ){
- rc = sqliteInit(pParse->db, &pParse->zErrMsg);
- }
- if( rc ){
- int i = db->nDb - 1;
- assert( i>=2 );
- if( db->aDb[i].pBt ){
- sqliteBtreeClose(db->aDb[i].pBt);
- db->aDb[i].pBt = 0;
- }
- sqliteResetInternalSchema(db, 0);
- pParse->nErr++;
- pParse->rc = SQLITE_ERROR;
- }
-}
-
-/*
-** This routine is called by the parser to process a DETACH statement:
-**
-** DETACH DATABASE dbname
-**
-** The pDbname argument is the name of the database in the DETACH statement.
-*/
-void sqliteDetach(Parse *pParse, Token *pDbname){
- int i;
- sqlite *db;
- Vdbe *v;
- Db *pDb;
-
- v = sqliteGetVdbe(pParse);
- sqliteVdbeAddOp(v, OP_Halt, 0, 0);
- if( pParse->explain ) return;
- db = pParse->db;
- for(i=0; i<db->nDb; i++){
- pDb = &db->aDb[i];
- if( pDb->pBt==0 || pDb->zName==0 ) continue;
- if( strlen(pDb->zName)!=pDbname->n ) continue;
- if( sqliteStrNICmp(pDb->zName, pDbname->z, pDbname->n)==0 ) break;
- }
- if( i>=db->nDb ){
- sqliteErrorMsg(pParse, "no such database: %T", pDbname);
- return;
- }
- if( i<2 ){
- sqliteErrorMsg(pParse, "cannot detach database %T", pDbname);
- return;
- }
-#ifndef SQLITE_OMIT_AUTHORIZATION
- if( sqliteAuthCheck(pParse,SQLITE_DETACH,db->aDb[i].zName,0,0)!=SQLITE_OK ){
- return;
- }
-#endif /* SQLITE_OMIT_AUTHORIZATION */
- sqliteBtreeClose(pDb->pBt);
- pDb->pBt = 0;
- sqliteFree(pDb->zName);
- sqliteResetInternalSchema(db, i);
- if( pDb->pAux && pDb->xFreeAux ) pDb->xFreeAux(pDb->pAux);
- db->nDb--;
- if( i<db->nDb ){
- db->aDb[i] = db->aDb[db->nDb];
- memset(&db->aDb[db->nDb], 0, sizeof(db->aDb[0]));
- sqliteResetInternalSchema(db, i);
- }
-}
-
-/*
-** Initialize a DbFixer structure. This routine must be called prior
-** to passing the structure to one of the sqliteFixAAAA() routines below.
-**
-** The return value indicates whether or not fixation is required. TRUE
-** means we do need to fix the database references, FALSE means we do not.
-*/
-int sqliteFixInit(
- DbFixer *pFix, /* The fixer to be initialized */
- Parse *pParse, /* Error messages will be written here */
- int iDb, /* This is the database that must must be used */
- const char *zType, /* "view", "trigger", or "index" */
- const Token *pName /* Name of the view, trigger, or index */
-){
- sqlite *db;
-
- if( iDb<0 || iDb==1 ) return 0;
- db = pParse->db;
- assert( db->nDb>iDb );
- pFix->pParse = pParse;
- pFix->zDb = db->aDb[iDb].zName;
- pFix->zType = zType;
- pFix->pName = pName;
- return 1;
-}
-
-/*
-** The following set of routines walk through the parse tree and assign
-** a specific database to all table references where the database name
-** was left unspecified in the original SQL statement. The pFix structure
-** must have been initialized by a prior call to sqliteFixInit().
-**
-** These routines are used to make sure that an index, trigger, or
-** view in one database does not refer to objects in a different database.
-** (Exception: indices, triggers, and views in the TEMP database are
-** allowed to refer to anything.) If a reference is explicitly made
-** to an object in a different database, an error message is added to
-** pParse->zErrMsg and these routines return non-zero. If everything
-** checks out, these routines return 0.
-*/
-int sqliteFixSrcList(
- DbFixer *pFix, /* Context of the fixation */
- SrcList *pList /* The Source list to check and modify */
-){
- int i;
- const char *zDb;
-
- if( pList==0 ) return 0;
- zDb = pFix->zDb;
- for(i=0; i<pList->nSrc; i++){
- if( pList->a[i].zDatabase==0 ){
- pList->a[i].zDatabase = sqliteStrDup(zDb);
- }else if( sqliteStrICmp(pList->a[i].zDatabase,zDb)!=0 ){
- sqliteErrorMsg(pFix->pParse,
- "%s %z cannot reference objects in database %s",
- pFix->zType, sqliteStrNDup(pFix->pName->z, pFix->pName->n),
- pList->a[i].zDatabase);
- return 1;
- }
- if( sqliteFixSelect(pFix, pList->a[i].pSelect) ) return 1;
- if( sqliteFixExpr(pFix, pList->a[i].pOn) ) return 1;
- }
- return 0;
-}
-int sqliteFixSelect(
- DbFixer *pFix, /* Context of the fixation */
- Select *pSelect /* The SELECT statement to be fixed to one database */
-){
- while( pSelect ){
- if( sqliteFixExprList(pFix, pSelect->pEList) ){
- return 1;
- }
- if( sqliteFixSrcList(pFix, pSelect->pSrc) ){
- return 1;
- }
- if( sqliteFixExpr(pFix, pSelect->pWhere) ){
- return 1;
- }
- if( sqliteFixExpr(pFix, pSelect->pHaving) ){
- return 1;
- }
- pSelect = pSelect->pPrior;
- }
- return 0;
-}
-int sqliteFixExpr(
- DbFixer *pFix, /* Context of the fixation */
- Expr *pExpr /* The expression to be fixed to one database */
-){
- while( pExpr ){
- if( sqliteFixSelect(pFix, pExpr->pSelect) ){
- return 1;
- }
- if( sqliteFixExprList(pFix, pExpr->pList) ){
- return 1;
- }
- if( sqliteFixExpr(pFix, pExpr->pRight) ){
- return 1;
- }
- pExpr = pExpr->pLeft;
- }
- return 0;
-}
-int sqliteFixExprList(
- DbFixer *pFix, /* Context of the fixation */
- ExprList *pList /* The expression to be fixed to one database */
-){
- int i;
- if( pList==0 ) return 0;
- for(i=0; i<pList->nExpr; i++){
- if( sqliteFixExpr(pFix, pList->a[i].pExpr) ){
- return 1;
- }
- }
- return 0;
-}
-int sqliteFixTriggerStep(
- DbFixer *pFix, /* Context of the fixation */
- TriggerStep *pStep /* The trigger step be fixed to one database */
-){
- while( pStep ){
- if( sqliteFixSelect(pFix, pStep->pSelect) ){
- return 1;
- }
- if( sqliteFixExpr(pFix, pStep->pWhere) ){
- return 1;
- }
- if( sqliteFixExprList(pFix, pStep->pExprList) ){
- return 1;
- }
- pStep = pStep->pNext;
- }
- return 0;
-}
diff --git a/ext/sqlite/libsqlite/src/auth.c b/ext/sqlite/libsqlite/src/auth.c
deleted file mode 100644
index 3f861c710d..0000000000
--- a/ext/sqlite/libsqlite/src/auth.c
+++ /dev/null
@@ -1,219 +0,0 @@
-/*
-** 2003 January 11
-**
-** The author disclaims copyright to this source code. In place of
-** a legal notice, here is a blessing:
-**
-** May you do good and not evil.
-** May you find forgiveness for yourself and forgive others.
-** May you share freely, never taking more than you give.
-**
-*************************************************************************
-** This file contains code used to implement the sqlite_set_authorizer()
-** API. This facility is an optional feature of the library. Embedded
-** systems that do not need this facility may omit it by recompiling
-** the library with -DSQLITE_OMIT_AUTHORIZATION=1
-**
-** $Id$
-*/
-#include "sqliteInt.h"
-
-/*
-** All of the code in this file may be omitted by defining a single
-** macro.
-*/
-#ifndef SQLITE_OMIT_AUTHORIZATION
-
-/*
-** Set or clear the access authorization function.
-**
-** The access authorization function is be called during the compilation
-** phase to verify that the user has read and/or write access permission on
-** various fields of the database. The first argument to the auth function
-** is a copy of the 3rd argument to this routine. The second argument
-** to the auth function is one of these constants:
-**
-** SQLITE_COPY
-** SQLITE_CREATE_INDEX
-** SQLITE_CREATE_TABLE
-** SQLITE_CREATE_TEMP_INDEX
-** SQLITE_CREATE_TEMP_TABLE
-** SQLITE_CREATE_TEMP_TRIGGER
-** SQLITE_CREATE_TEMP_VIEW
-** SQLITE_CREATE_TRIGGER
-** SQLITE_CREATE_VIEW
-** SQLITE_DELETE
-** SQLITE_DROP_INDEX
-** SQLITE_DROP_TABLE
-** SQLITE_DROP_TEMP_INDEX
-** SQLITE_DROP_TEMP_TABLE
-** SQLITE_DROP_TEMP_TRIGGER
-** SQLITE_DROP_TEMP_VIEW
-** SQLITE_DROP_TRIGGER
-** SQLITE_DROP_VIEW
-** SQLITE_INSERT
-** SQLITE_PRAGMA
-** SQLITE_READ
-** SQLITE_SELECT
-** SQLITE_TRANSACTION
-** SQLITE_UPDATE
-**
-** The third and fourth arguments to the auth function are the name of
-** the table and the column that are being accessed. The auth function
-** should return either SQLITE_OK, SQLITE_DENY, or SQLITE_IGNORE. If
-** SQLITE_OK is returned, it means that access is allowed. SQLITE_DENY
-** means that the SQL statement will never-run - the sqlite_exec() call
-** will return with an error. SQLITE_IGNORE means that the SQL statement
-** should run but attempts to read the specified column will return NULL
-** and attempts to write the column will be ignored.
-**
-** Setting the auth function to NULL disables this hook. The default
-** setting of the auth function is NULL.
-*/
-int sqlite_set_authorizer(
- sqlite *db,
- int (*xAuth)(void*,int,const char*,const char*,const char*,const char*),
- void *pArg
-){
- db->xAuth = xAuth;
- db->pAuthArg = pArg;
- return SQLITE_OK;
-}
-
-/*
-** Write an error message into pParse->zErrMsg that explains that the
-** user-supplied authorization function returned an illegal value.
-*/
-static void sqliteAuthBadReturnCode(Parse *pParse, int rc){
- sqliteErrorMsg(pParse, "illegal return value (%d) from the "
- "authorization function - should be SQLITE_OK, SQLITE_IGNORE, "
- "or SQLITE_DENY", rc);
- pParse->rc = SQLITE_MISUSE;
-}
-
-/*
-** The pExpr should be a TK_COLUMN expression. The table referred to
-** is in pTabList or else it is the NEW or OLD table of a trigger.
-** Check to see if it is OK to read this particular column.
-**
-** If the auth function returns SQLITE_IGNORE, change the TK_COLUMN
-** instruction into a TK_NULL. If the auth function returns SQLITE_DENY,
-** then generate an error.
-*/
-void sqliteAuthRead(
- Parse *pParse, /* The parser context */
- Expr *pExpr, /* The expression to check authorization on */
- SrcList *pTabList /* All table that pExpr might refer to */
-){
- sqlite *db = pParse->db;
- int rc;
- Table *pTab; /* The table being read */
- const char *zCol; /* Name of the column of the table */
- int iSrc; /* Index in pTabList->a[] of table being read */
- const char *zDBase; /* Name of database being accessed */
-
- if( db->xAuth==0 ) return;
- assert( pExpr->op==TK_COLUMN );
- for(iSrc=0; iSrc<pTabList->nSrc; iSrc++){
- if( pExpr->iTable==pTabList->a[iSrc].iCursor ) break;
- }
- if( iSrc>=0 && iSrc<pTabList->nSrc ){
- pTab = pTabList->a[iSrc].pTab;
- }else{
- /* This must be an attempt to read the NEW or OLD pseudo-tables
- ** of a trigger.
- */
- TriggerStack *pStack; /* The stack of current triggers */
- pStack = pParse->trigStack;
- assert( pStack!=0 );
- assert( pExpr->iTable==pStack->newIdx || pExpr->iTable==pStack->oldIdx );
- pTab = pStack->pTab;
- }
- if( pTab==0 ) return;
- if( pExpr->iColumn>=0 ){
- assert( pExpr->iColumn<pTab->nCol );
- zCol = pTab->aCol[pExpr->iColumn].zName;
- }else if( pTab->iPKey>=0 ){
- assert( pTab->iPKey<pTab->nCol );
- zCol = pTab->aCol[pTab->iPKey].zName;
- }else{
- zCol = "ROWID";
- }
- assert( pExpr->iDb<db->nDb );
- zDBase = db->aDb[pExpr->iDb].zName;
- rc = db->xAuth(db->pAuthArg, SQLITE_READ, pTab->zName, zCol, zDBase,
- pParse->zAuthContext);
- if( rc==SQLITE_IGNORE ){
- pExpr->op = TK_NULL;
- }else if( rc==SQLITE_DENY ){
- if( db->nDb>2 || pExpr->iDb!=0 ){
- sqliteErrorMsg(pParse, "access to %s.%s.%s is prohibited",
- zDBase, pTab->zName, zCol);
- }else{
- sqliteErrorMsg(pParse, "access to %s.%s is prohibited", pTab->zName,zCol);
- }
- pParse->rc = SQLITE_AUTH;
- }else if( rc!=SQLITE_OK ){
- sqliteAuthBadReturnCode(pParse, rc);
- }
-}
-
-/*
-** Do an authorization check using the code and arguments given. Return
-** either SQLITE_OK (zero) or SQLITE_IGNORE or SQLITE_DENY. If SQLITE_DENY
-** is returned, then the error count and error message in pParse are
-** modified appropriately.
-*/
-int sqliteAuthCheck(
- Parse *pParse,
- int code,
- const char *zArg1,
- const char *zArg2,
- const char *zArg3
-){
- sqlite *db = pParse->db;
- int rc;
-
- if( db->init.busy || db->xAuth==0 ){
- return SQLITE_OK;
- }
- rc = db->xAuth(db->pAuthArg, code, zArg1, zArg2, zArg3, pParse->zAuthContext);
- if( rc==SQLITE_DENY ){
- sqliteErrorMsg(pParse, "not authorized");
- pParse->rc = SQLITE_AUTH;
- }else if( rc!=SQLITE_OK && rc!=SQLITE_IGNORE ){
- rc = SQLITE_DENY;
- sqliteAuthBadReturnCode(pParse, rc);
- }
- return rc;
-}
-
-/*
-** Push an authorization context. After this routine is called, the
-** zArg3 argument to authorization callbacks will be zContext until
-** popped. Or if pParse==0, this routine is a no-op.
-*/
-void sqliteAuthContextPush(
- Parse *pParse,
- AuthContext *pContext,
- const char *zContext
-){
- pContext->pParse = pParse;
- if( pParse ){
- pContext->zAuthContext = pParse->zAuthContext;
- pParse->zAuthContext = zContext;
- }
-}
-
-/*
-** Pop an authorization context that was previously pushed
-** by sqliteAuthContextPush
-*/
-void sqliteAuthContextPop(AuthContext *pContext){
- if( pContext->pParse ){
- pContext->pParse->zAuthContext = pContext->zAuthContext;
- pContext->pParse = 0;
- }
-}
-
-#endif /* SQLITE_OMIT_AUTHORIZATION */
diff --git a/ext/sqlite/libsqlite/src/btree.c b/ext/sqlite/libsqlite/src/btree.c
deleted file mode 100644
index a367092501..0000000000
--- a/ext/sqlite/libsqlite/src/btree.c
+++ /dev/null
@@ -1,3584 +0,0 @@
-/*
-** 2001 September 15
-**
-** The author disclaims copyright to this source code. In place of
-** a legal notice, here is a blessing:
-**
-** May you do good and not evil.
-** May you find forgiveness for yourself and forgive others.
-** May you share freely, never taking more than you give.
-**
-*************************************************************************
-** $Id$
-**
-** This file implements a external (disk-based) database using BTrees.
-** For a detailed discussion of BTrees, refer to
-**
-** Donald E. Knuth, THE ART OF COMPUTER PROGRAMMING, Volume 3:
-** "Sorting And Searching", pages 473-480. Addison-Wesley
-** Publishing Company, Reading, Massachusetts.
-**
-** The basic idea is that each page of the file contains N database
-** entries and N+1 pointers to subpages.
-**
-** ----------------------------------------------------------------
-** | Ptr(0) | Key(0) | Ptr(1) | Key(1) | ... | Key(N) | Ptr(N+1) |
-** ----------------------------------------------------------------
-**
-** All of the keys on the page that Ptr(0) points to have values less
-** than Key(0). All of the keys on page Ptr(1) and its subpages have
-** values greater than Key(0) and less than Key(1). All of the keys
-** on Ptr(N+1) and its subpages have values greater than Key(N). And
-** so forth.
-**
-** Finding a particular key requires reading O(log(M)) pages from the
-** disk where M is the number of entries in the tree.
-**
-** In this implementation, a single file can hold one or more separate
-** BTrees. Each BTree is identified by the index of its root page. The
-** key and data for any entry are combined to form the "payload". Up to
-** MX_LOCAL_PAYLOAD bytes of payload can be carried directly on the
-** database page. If the payload is larger than MX_LOCAL_PAYLOAD bytes
-** then surplus bytes are stored on overflow pages. The payload for an
-** entry and the preceding pointer are combined to form a "Cell". Each
-** page has a small header which contains the Ptr(N+1) pointer.
-**
-** The first page of the file contains a magic string used to verify that
-** the file really is a valid BTree database, a pointer to a list of unused
-** pages in the file, and some meta information. The root of the first
-** BTree begins on page 2 of the file. (Pages are numbered beginning with
-** 1, not 0.) Thus a minimum database contains 2 pages.
-*/
-#include "sqliteInt.h"
-#include "pager.h"
-#include "btree.h"
-#include <assert.h>
-
-/* Forward declarations */
-static BtOps sqliteBtreeOps;
-static BtCursorOps sqliteBtreeCursorOps;
-
-/*
-** Macros used for byteswapping. B is a pointer to the Btree
-** structure. This is needed to access the Btree.needSwab boolean
-** in order to tell if byte swapping is needed or not.
-** X is an unsigned integer. SWAB16 byte swaps a 16-bit integer.
-** SWAB32 byteswaps a 32-bit integer.
-*/
-#define SWAB16(B,X) ((B)->needSwab? swab16((u16)X) : ((u16)X))
-#define SWAB32(B,X) ((B)->needSwab? swab32(X) : (X))
-#define SWAB_ADD(B,X,A) \
- if((B)->needSwab){ X=swab32(swab32(X)+A); }else{ X += (A); }
-
-/*
-** The following global variable - available only if SQLITE_TEST is
-** defined - is used to determine whether new databases are created in
-** native byte order or in non-native byte order. Non-native byte order
-** databases are created for testing purposes only. Under normal operation,
-** only native byte-order databases should be created, but we should be
-** able to read or write existing databases regardless of the byteorder.
-*/
-#ifdef SQLITE_TEST
-int btree_native_byte_order = 1;
-#else
-# define btree_native_byte_order 1
-#endif
-
-/*
-** Forward declarations of structures used only in this file.
-*/
-typedef struct PageOne PageOne;
-typedef struct MemPage MemPage;
-typedef struct PageHdr PageHdr;
-typedef struct Cell Cell;
-typedef struct CellHdr CellHdr;
-typedef struct FreeBlk FreeBlk;
-typedef struct OverflowPage OverflowPage;
-typedef struct FreelistInfo FreelistInfo;
-
-/*
-** All structures on a database page are aligned to 4-byte boundries.
-** This routine rounds up a number of bytes to the next multiple of 4.
-**
-** This might need to change for computer architectures that require
-** and 8-byte alignment boundry for structures.
-*/
-#define ROUNDUP(X) ((X+3) & ~3)
-
-/*
-** This is a magic string that appears at the beginning of every
-** SQLite database in order to identify the file as a real database.
-*/
-static const char zMagicHeader[] =
- "** This file contains an SQLite 2.1 database **";
-#define MAGIC_SIZE (sizeof(zMagicHeader))
-
-/*
-** This is a magic integer also used to test the integrity of the database
-** file. This integer is used in addition to the string above so that
-** if the file is written on a little-endian architecture and read
-** on a big-endian architectures (or vice versa) we can detect the
-** problem.
-**
-** The number used was obtained at random and has no special
-** significance other than the fact that it represents a different
-** integer on little-endian and big-endian machines.
-*/
-#define MAGIC 0xdae37528
-
-/*
-** The first page of the database file contains a magic header string
-** to identify the file as an SQLite database file. It also contains
-** a pointer to the first free page of the file. Page 2 contains the
-** root of the principle BTree. The file might contain other BTrees
-** rooted on pages above 2.
-**
-** The first page also contains SQLITE_N_BTREE_META integers that
-** can be used by higher-level routines.
-**
-** Remember that pages are numbered beginning with 1. (See pager.c
-** for additional information.) Page 0 does not exist and a page
-** number of 0 is used to mean "no such page".
-*/
-struct PageOne {
- char zMagic[MAGIC_SIZE]; /* String that identifies the file as a database */
- int iMagic; /* Integer to verify correct byte order */
- Pgno freeList; /* First free page in a list of all free pages */
- int nFree; /* Number of pages on the free list */
- int aMeta[SQLITE_N_BTREE_META-1]; /* User defined integers */
-};
-
-/*
-** Each database page has a header that is an instance of this
-** structure.
-**
-** PageHdr.firstFree is 0 if there is no free space on this page.
-** Otherwise, PageHdr.firstFree is the index in MemPage.u.aDisk[] of a
-** FreeBlk structure that describes the first block of free space.
-** All free space is defined by a linked list of FreeBlk structures.
-**
-** Data is stored in a linked list of Cell structures. PageHdr.firstCell
-** is the index into MemPage.u.aDisk[] of the first cell on the page. The
-** Cells are kept in sorted order.
-**
-** A Cell contains all information about a database entry and a pointer
-** to a child page that contains other entries less than itself. In
-** other words, the i-th Cell contains both Ptr(i) and Key(i). The
-** right-most pointer of the page is contained in PageHdr.rightChild.
-*/
-struct PageHdr {
- Pgno rightChild; /* Child page that comes after all cells on this page */
- u16 firstCell; /* Index in MemPage.u.aDisk[] of the first cell */
- u16 firstFree; /* Index in MemPage.u.aDisk[] of the first free block */
-};
-
-/*
-** Entries on a page of the database are called "Cells". Each Cell
-** has a header and data. This structure defines the header. The
-** key and data (collectively the "payload") follow this header on
-** the database page.
-**
-** A definition of the complete Cell structure is given below. The
-** header for the cell must be defined first in order to do some
-** of the sizing #defines that follow.
-*/
-struct CellHdr {
- Pgno leftChild; /* Child page that comes before this cell */
- u16 nKey; /* Number of bytes in the key */
- u16 iNext; /* Index in MemPage.u.aDisk[] of next cell in sorted order */
- u8 nKeyHi; /* Upper 8 bits of key size for keys larger than 64K bytes */
- u8 nDataHi; /* Upper 8 bits of data size when the size is more than 64K */
- u16 nData; /* Number of bytes of data */
-};
-
-/*
-** The key and data size are split into a lower 16-bit segment and an
-** upper 8-bit segment in order to pack them together into a smaller
-** space. The following macros reassembly a key or data size back
-** into an integer.
-*/
-#define NKEY(b,h) (SWAB16(b,h.nKey) + h.nKeyHi*65536)
-#define NDATA(b,h) (SWAB16(b,h.nData) + h.nDataHi*65536)
-
-/*
-** The minimum size of a complete Cell. The Cell must contain a header
-** and at least 4 bytes of payload.
-*/
-#define MIN_CELL_SIZE (sizeof(CellHdr)+4)
-
-/*
-** The maximum number of database entries that can be held in a single
-** page of the database.
-*/
-#define MX_CELL ((SQLITE_USABLE_SIZE-sizeof(PageHdr))/MIN_CELL_SIZE)
-
-/*
-** The amount of usable space on a single page of the BTree. This is the
-** page size minus the overhead of the page header.
-*/
-#define USABLE_SPACE (SQLITE_USABLE_SIZE - sizeof(PageHdr))
-
-/*
-** The maximum amount of payload (in bytes) that can be stored locally for
-** a database entry. If the entry contains more data than this, the
-** extra goes onto overflow pages.
-**
-** This number is chosen so that at least 4 cells will fit on every page.
-*/
-#define MX_LOCAL_PAYLOAD ((USABLE_SPACE/4-(sizeof(CellHdr)+sizeof(Pgno)))&~3)
-
-/*
-** Data on a database page is stored as a linked list of Cell structures.
-** Both the key and the data are stored in aPayload[]. The key always comes
-** first. The aPayload[] field grows as necessary to hold the key and data,
-** up to a maximum of MX_LOCAL_PAYLOAD bytes. If the size of the key and
-** data combined exceeds MX_LOCAL_PAYLOAD bytes, then Cell.ovfl is the
-** page number of the first overflow page.
-**
-** Though this structure is fixed in size, the Cell on the database
-** page varies in size. Every cell has a CellHdr and at least 4 bytes
-** of payload space. Additional payload bytes (up to the maximum of
-** MX_LOCAL_PAYLOAD) and the Cell.ovfl value are allocated only as
-** needed.
-*/
-struct Cell {
- CellHdr h; /* The cell header */
- char aPayload[MX_LOCAL_PAYLOAD]; /* Key and data */
- Pgno ovfl; /* The first overflow page */
-};
-
-/*
-** Free space on a page is remembered using a linked list of the FreeBlk
-** structures. Space on a database page is allocated in increments of
-** at least 4 bytes and is always aligned to a 4-byte boundry. The
-** linked list of FreeBlks is always kept in order by address.
-*/
-struct FreeBlk {
- u16 iSize; /* Number of bytes in this block of free space */
- u16 iNext; /* Index in MemPage.u.aDisk[] of the next free block */
-};
-
-/*
-** The number of bytes of payload that will fit on a single overflow page.
-*/
-#define OVERFLOW_SIZE (SQLITE_USABLE_SIZE-sizeof(Pgno))
-
-/*
-** When the key and data for a single entry in the BTree will not fit in
-** the MX_LOCAL_PAYLOAD bytes of space available on the database page,
-** then all extra bytes are written to a linked list of overflow pages.
-** Each overflow page is an instance of the following structure.
-**
-** Unused pages in the database are also represented by instances of
-** the OverflowPage structure. The PageOne.freeList field is the
-** page number of the first page in a linked list of unused database
-** pages.
-*/
-struct OverflowPage {
- Pgno iNext;
- char aPayload[OVERFLOW_SIZE];
-};
-
-/*
-** The PageOne.freeList field points to a linked list of overflow pages
-** hold information about free pages. The aPayload section of each
-** overflow page contains an instance of the following structure. The
-** aFree[] array holds the page number of nFree unused pages in the disk
-** file.
-*/
-struct FreelistInfo {
- int nFree;
- Pgno aFree[(OVERFLOW_SIZE-sizeof(int))/sizeof(Pgno)];
-};
-
-/*
-** For every page in the database file, an instance of the following structure
-** is stored in memory. The u.aDisk[] array contains the raw bits read from
-** the disk. The rest is auxiliary information held in memory only. The
-** auxiliary info is only valid for regular database pages - it is not
-** used for overflow pages and pages on the freelist.
-**
-** Of particular interest in the auxiliary info is the apCell[] entry. Each
-** apCell[] entry is a pointer to a Cell structure in u.aDisk[]. The cells are
-** put in this array so that they can be accessed in constant time, rather
-** than in linear time which would be needed if we had to walk the linked
-** list on every access.
-**
-** Note that apCell[] contains enough space to hold up to two more Cells
-** than can possibly fit on one page. In the steady state, every apCell[]
-** points to memory inside u.aDisk[]. But in the middle of an insert
-** operation, some apCell[] entries may temporarily point to data space
-** outside of u.aDisk[]. This is a transient situation that is quickly
-** resolved. But while it is happening, it is possible for a database
-** page to hold as many as two more cells than it might otherwise hold.
-** The extra two entries in apCell[] are an allowance for this situation.
-**
-** The pParent field points back to the parent page. This allows us to
-** walk up the BTree from any leaf to the root. Care must be taken to
-** unref() the parent page pointer when this page is no longer referenced.
-** The pageDestructor() routine handles that chore.
-*/
-struct MemPage {
- union u_page_data {
- char aDisk[SQLITE_PAGE_SIZE]; /* Page data stored on disk */
- PageHdr hdr; /* Overlay page header */
- } u;
- u8 isInit; /* True if auxiliary data is initialized */
- u8 idxShift; /* True if apCell[] indices have changed */
- u8 isOverfull; /* Some apCell[] points outside u.aDisk[] */
- MemPage *pParent; /* The parent of this page. NULL for root */
- int idxParent; /* Index in pParent->apCell[] of this node */
- int nFree; /* Number of free bytes in u.aDisk[] */
- int nCell; /* Number of entries on this page */
- Cell *apCell[MX_CELL+2]; /* All data entires in sorted order */
-};
-
-/*
-** The in-memory image of a disk page has the auxiliary information appended
-** to the end. EXTRA_SIZE is the number of bytes of space needed to hold
-** that extra information.
-*/
-#define EXTRA_SIZE (sizeof(MemPage)-sizeof(union u_page_data))
-
-/*
-** Everything we need to know about an open database
-*/
-struct Btree {
- BtOps *pOps; /* Function table */
- Pager *pPager; /* The page cache */
- BtCursor *pCursor; /* A list of all open cursors */
- PageOne *page1; /* First page of the database */
- u8 inTrans; /* True if a transaction is in progress */
- u8 inCkpt; /* True if there is a checkpoint on the transaction */
- u8 readOnly; /* True if the underlying file is readonly */
- u8 needSwab; /* Need to byte-swapping */
-};
-typedef Btree Bt;
-
-/*
-** A cursor is a pointer to a particular entry in the BTree.
-** The entry is identified by its MemPage and the index in
-** MemPage.apCell[] of the entry.
-*/
-struct BtCursor {
- BtCursorOps *pOps; /* Function table */
- Btree *pBt; /* The Btree to which this cursor belongs */
- BtCursor *pNext, *pPrev; /* Forms a linked list of all cursors */
- BtCursor *pShared; /* Loop of cursors with the same root page */
- Pgno pgnoRoot; /* The root page of this tree */
- MemPage *pPage; /* Page that contains the entry */
- int idx; /* Index of the entry in pPage->apCell[] */
- u8 wrFlag; /* True if writable */
- u8 eSkip; /* Determines if next step operation is a no-op */
- u8 iMatch; /* compare result from last sqliteBtreeMoveto() */
-};
-
-/*
-** Legal values for BtCursor.eSkip.
-*/
-#define SKIP_NONE 0 /* Always step the cursor */
-#define SKIP_NEXT 1 /* The next sqliteBtreeNext() is a no-op */
-#define SKIP_PREV 2 /* The next sqliteBtreePrevious() is a no-op */
-#define SKIP_INVALID 3 /* Calls to Next() and Previous() are invalid */
-
-/* Forward declarations */
-static int fileBtreeCloseCursor(BtCursor *pCur);
-
-/*
-** Routines for byte swapping.
-*/
-u16 swab16(u16 x){
- return ((x & 0xff)<<8) | ((x>>8)&0xff);
-}
-u32 swab32(u32 x){
- return ((x & 0xff)<<24) | ((x & 0xff00)<<8) |
- ((x>>8) & 0xff00) | ((x>>24)&0xff);
-}
-
-/*
-** Compute the total number of bytes that a Cell needs on the main
-** database page. The number returned includes the Cell header,
-** local payload storage, and the pointer to overflow pages (if
-** applicable). Additional space allocated on overflow pages
-** is NOT included in the value returned from this routine.
-*/
-static int cellSize(Btree *pBt, Cell *pCell){
- int n = NKEY(pBt, pCell->h) + NDATA(pBt, pCell->h);
- if( n>MX_LOCAL_PAYLOAD ){
- n = MX_LOCAL_PAYLOAD + sizeof(Pgno);
- }else{
- n = ROUNDUP(n);
- }
- n += sizeof(CellHdr);
- return n;
-}
-
-/*
-** Defragment the page given. All Cells are moved to the
-** beginning of the page and all free space is collected
-** into one big FreeBlk at the end of the page.
-*/
-static void defragmentPage(Btree *pBt, MemPage *pPage){
- int pc, i, n;
- FreeBlk *pFBlk;
- char newPage[SQLITE_USABLE_SIZE];
-
- assert( sqlitepager_iswriteable(pPage) );
- assert( pPage->isInit );
- pc = sizeof(PageHdr);
- pPage->u.hdr.firstCell = SWAB16(pBt, pc);
- memcpy(newPage, pPage->u.aDisk, pc);
- for(i=0; i<pPage->nCell; i++){
- Cell *pCell = pPage->apCell[i];
-
- /* This routine should never be called on an overfull page. The
- ** following asserts verify that constraint. */
- assert( Addr(pCell) > Addr(pPage) );
- assert( Addr(pCell) < Addr(pPage) + SQLITE_USABLE_SIZE );
-
- n = cellSize(pBt, pCell);
- pCell->h.iNext = SWAB16(pBt, pc + n);
- memcpy(&newPage[pc], pCell, n);
- pPage->apCell[i] = (Cell*)&pPage->u.aDisk[pc];
- pc += n;
- }
- assert( pPage->nFree==SQLITE_USABLE_SIZE-pc );
- memcpy(pPage->u.aDisk, newPage, pc);
- if( pPage->nCell>0 ){
- pPage->apCell[pPage->nCell-1]->h.iNext = 0;
- }
- pFBlk = (FreeBlk*)&pPage->u.aDisk[pc];
- pFBlk->iSize = SWAB16(pBt, SQLITE_USABLE_SIZE - pc);
- pFBlk->iNext = 0;
- pPage->u.hdr.firstFree = SWAB16(pBt, pc);
- memset(&pFBlk[1], 0, SQLITE_USABLE_SIZE - pc - sizeof(FreeBlk));
-}
-
-/*
-** Allocate nByte bytes of space on a page. nByte must be a
-** multiple of 4.
-**
-** Return the index into pPage->u.aDisk[] of the first byte of
-** the new allocation. Or return 0 if there is not enough free
-** space on the page to satisfy the allocation request.
-**
-** If the page contains nBytes of free space but does not contain
-** nBytes of contiguous free space, then this routine automatically
-** calls defragementPage() to consolidate all free space before
-** allocating the new chunk.
-*/
-static int allocateSpace(Btree *pBt, MemPage *pPage, int nByte){
- FreeBlk *p;
- u16 *pIdx;
- int start;
- int iSize;
-#ifndef NDEBUG
- int cnt = 0;
-#endif
-
- assert( sqlitepager_iswriteable(pPage) );
- assert( nByte==ROUNDUP(nByte) );
- assert( pPage->isInit );
- if( pPage->nFree<nByte || pPage->isOverfull ) return 0;
- pIdx = &pPage->u.hdr.firstFree;
- p = (FreeBlk*)&pPage->u.aDisk[SWAB16(pBt, *pIdx)];
- while( (iSize = SWAB16(pBt, p->iSize))<nByte ){
- assert( cnt++ < SQLITE_USABLE_SIZE/4 );
- if( p->iNext==0 ){
- defragmentPage(pBt, pPage);
- pIdx = &pPage->u.hdr.firstFree;
- }else{
- pIdx = &p->iNext;
- }
- p = (FreeBlk*)&pPage->u.aDisk[SWAB16(pBt, *pIdx)];
- }
- if( iSize==nByte ){
- start = SWAB16(pBt, *pIdx);
- *pIdx = p->iNext;
- }else{
- FreeBlk *pNew;
- start = SWAB16(pBt, *pIdx);
- pNew = (FreeBlk*)&pPage->u.aDisk[start + nByte];
- pNew->iNext = p->iNext;
- pNew->iSize = SWAB16(pBt, iSize - nByte);
- *pIdx = SWAB16(pBt, start + nByte);
- }
- pPage->nFree -= nByte;
- return start;
-}
-
-/*
-** Return a section of the MemPage.u.aDisk[] to the freelist.
-** The first byte of the new free block is pPage->u.aDisk[start]
-** and the size of the block is "size" bytes. Size must be
-** a multiple of 4.
-**
-** Most of the effort here is involved in coalesing adjacent
-** free blocks into a single big free block.
-*/
-static void freeSpace(Btree *pBt, MemPage *pPage, int start, int size){
- int end = start + size;
- u16 *pIdx, idx;
- FreeBlk *pFBlk;
- FreeBlk *pNew;
- FreeBlk *pNext;
- int iSize;
-
- assert( sqlitepager_iswriteable(pPage) );
- assert( size == ROUNDUP(size) );
- assert( start == ROUNDUP(start) );
- assert( pPage->isInit );
- pIdx = &pPage->u.hdr.firstFree;
- idx = SWAB16(pBt, *pIdx);
- while( idx!=0 && idx<start ){
- pFBlk = (FreeBlk*)&pPage->u.aDisk[idx];
- iSize = SWAB16(pBt, pFBlk->iSize);
- if( idx + iSize == start ){
- pFBlk->iSize = SWAB16(pBt, iSize + size);
- if( idx + iSize + size == SWAB16(pBt, pFBlk->iNext) ){
- pNext = (FreeBlk*)&pPage->u.aDisk[idx + iSize + size];
- if( pBt->needSwab ){
- pFBlk->iSize = swab16((u16)swab16(pNext->iSize)+iSize+size);
- }else{
- pFBlk->iSize += pNext->iSize;
- }
- pFBlk->iNext = pNext->iNext;
- }
- pPage->nFree += size;
- return;
- }
- pIdx = &pFBlk->iNext;
- idx = SWAB16(pBt, *pIdx);
- }
- pNew = (FreeBlk*)&pPage->u.aDisk[start];
- if( idx != end ){
- pNew->iSize = SWAB16(pBt, size);
- pNew->iNext = SWAB16(pBt, idx);
- }else{
- pNext = (FreeBlk*)&pPage->u.aDisk[idx];
- pNew->iSize = SWAB16(pBt, size + SWAB16(pBt, pNext->iSize));
- pNew->iNext = pNext->iNext;
- }
- *pIdx = SWAB16(pBt, start);
- pPage->nFree += size;
-}
-
-/*
-** Initialize the auxiliary information for a disk block.
-**
-** The pParent parameter must be a pointer to the MemPage which
-** is the parent of the page being initialized. The root of the
-** BTree (usually page 2) has no parent and so for that page,
-** pParent==NULL.
-**
-** Return SQLITE_OK on success. If we see that the page does
-** not contain a well-formed database page, then return
-** SQLITE_CORRUPT. Note that a return of SQLITE_OK does not
-** guarantee that the page is well-formed. It only shows that
-** we failed to detect any corruption.
-*/
-static int initPage(Bt *pBt, MemPage *pPage, Pgno pgnoThis, MemPage *pParent){
- int idx; /* An index into pPage->u.aDisk[] */
- Cell *pCell; /* A pointer to a Cell in pPage->u.aDisk[] */
- FreeBlk *pFBlk; /* A pointer to a free block in pPage->u.aDisk[] */
- int sz; /* The size of a Cell in bytes */
- int freeSpace; /* Amount of free space on the page */
-
- if( pPage->pParent ){
- assert( pPage->pParent==pParent );
- return SQLITE_OK;
- }
- if( pParent ){
- pPage->pParent = pParent;
- sqlitepager_ref(pParent);
- }
- if( pPage->isInit ) return SQLITE_OK;
- pPage->isInit = 1;
- pPage->nCell = 0;
- freeSpace = USABLE_SPACE;
- idx = SWAB16(pBt, pPage->u.hdr.firstCell);
- while( idx!=0 ){
- if( idx>SQLITE_USABLE_SIZE-MIN_CELL_SIZE ) goto page_format_error;
- if( idx<sizeof(PageHdr) ) goto page_format_error;
- if( idx!=ROUNDUP(idx) ) goto page_format_error;
- pCell = (Cell*)&pPage->u.aDisk[idx];
- sz = cellSize(pBt, pCell);
- if( idx+sz > SQLITE_USABLE_SIZE ) goto page_format_error;
- freeSpace -= sz;
- pPage->apCell[pPage->nCell++] = pCell;
- idx = SWAB16(pBt, pCell->h.iNext);
- }
- pPage->nFree = 0;
- idx = SWAB16(pBt, pPage->u.hdr.firstFree);
- while( idx!=0 ){
- int iNext;
- if( idx>SQLITE_USABLE_SIZE-sizeof(FreeBlk) ) goto page_format_error;
- if( idx<sizeof(PageHdr) ) goto page_format_error;
- pFBlk = (FreeBlk*)&pPage->u.aDisk[idx];
- pPage->nFree += SWAB16(pBt, pFBlk->iSize);
- iNext = SWAB16(pBt, pFBlk->iNext);
- if( iNext>0 && iNext <= idx ) goto page_format_error;
- idx = iNext;
- }
- if( pPage->nCell==0 && pPage->nFree==0 ){
- /* As a special case, an uninitialized root page appears to be
- ** an empty database */
- return SQLITE_OK;
- }
- if( pPage->nFree!=freeSpace ) goto page_format_error;
- return SQLITE_OK;
-
-page_format_error:
- return SQLITE_CORRUPT;
-}
-
-/*
-** Set up a raw page so that it looks like a database page holding
-** no entries.
-*/
-static void zeroPage(Btree *pBt, MemPage *pPage){
- PageHdr *pHdr;
- FreeBlk *pFBlk;
- assert( sqlitepager_iswriteable(pPage) );
- memset(pPage, 0, SQLITE_USABLE_SIZE);
- pHdr = &pPage->u.hdr;
- pHdr->firstCell = 0;
- pHdr->firstFree = SWAB16(pBt, sizeof(*pHdr));
- pFBlk = (FreeBlk*)&pHdr[1];
- pFBlk->iNext = 0;
- pPage->nFree = SQLITE_USABLE_SIZE - sizeof(*pHdr);
- pFBlk->iSize = SWAB16(pBt, pPage->nFree);
- pPage->nCell = 0;
- pPage->isOverfull = 0;
-}
-
-/*
-** This routine is called when the reference count for a page
-** reaches zero. We need to unref the pParent pointer when that
-** happens.
-*/
-static void pageDestructor(void *pData){
- MemPage *pPage = (MemPage*)pData;
- if( pPage->pParent ){
- MemPage *pParent = pPage->pParent;
- pPage->pParent = 0;
- sqlitepager_unref(pParent);
- }
-}
-
-/*
-** Open a new database.
-**
-** Actually, this routine just sets up the internal data structures
-** for accessing the database. We do not open the database file
-** until the first page is loaded.
-**
-** zFilename is the name of the database file. If zFilename is NULL
-** a new database with a random name is created. This randomly named
-** database file will be deleted when sqliteBtreeClose() is called.
-*/
-int sqliteBtreeOpen(
- const char *zFilename, /* Name of the file containing the BTree database */
- int omitJournal, /* if TRUE then do not journal this file */
- int nCache, /* How many pages in the page cache */
- Btree **ppBtree /* Pointer to new Btree object written here */
-){
- Btree *pBt;
- int rc;
-
- /*
- ** The following asserts make sure that structures used by the btree are
- ** the right size. This is to guard against size changes that result
- ** when compiling on a different architecture.
- */
- assert( sizeof(u32)==4 );
- assert( sizeof(u16)==2 );
- assert( sizeof(Pgno)==4 );
- assert( sizeof(PageHdr)==8 );
- assert( sizeof(CellHdr)==12 );
- assert( sizeof(FreeBlk)==4 );
- assert( sizeof(OverflowPage)==SQLITE_USABLE_SIZE );
- assert( sizeof(FreelistInfo)==OVERFLOW_SIZE );
- assert( sizeof(ptr)==sizeof(char*) );
- assert( sizeof(uptr)==sizeof(ptr) );
-
- pBt = sqliteMalloc( sizeof(*pBt) );
- if( pBt==0 ){
- *ppBtree = 0;
- return SQLITE_NOMEM;
- }
- if( nCache<10 ) nCache = 10;
- rc = sqlitepager_open(&pBt->pPager, zFilename, nCache, EXTRA_SIZE,
- !omitJournal);
- if( rc!=SQLITE_OK ){
- if( pBt->pPager ) sqlitepager_close(pBt->pPager);
- sqliteFree(pBt);
- *ppBtree = 0;
- return rc;
- }
- sqlitepager_set_destructor(pBt->pPager, pageDestructor);
- pBt->pCursor = 0;
- pBt->page1 = 0;
- pBt->readOnly = sqlitepager_isreadonly(pBt->pPager);
- pBt->pOps = &sqliteBtreeOps;
- *ppBtree = pBt;
- return SQLITE_OK;
-}
-
-/*
-** Close an open database and invalidate all cursors.
-*/
-static int fileBtreeClose(Btree *pBt){
- while( pBt->pCursor ){
- fileBtreeCloseCursor(pBt->pCursor);
- }
- sqlitepager_close(pBt->pPager);
- sqliteFree(pBt);
- return SQLITE_OK;
-}
-
-/*
-** Change the limit on the number of pages allowed in the cache.
-**
-** The maximum number of cache pages is set to the absolute
-** value of mxPage. If mxPage is negative, the pager will
-** operate asynchronously - it will not stop to do fsync()s
-** to insure data is written to the disk surface before
-** continuing. Transactions still work if synchronous is off,
-** and the database cannot be corrupted if this program
-** crashes. But if the operating system crashes or there is
-** an abrupt power failure when synchronous is off, the database
-** could be left in an inconsistent and unrecoverable state.
-** Synchronous is on by default so database corruption is not
-** normally a worry.
-*/
-static int fileBtreeSetCacheSize(Btree *pBt, int mxPage){
- sqlitepager_set_cachesize(pBt->pPager, mxPage);
- return SQLITE_OK;
-}
-
-/*
-** Change the way data is synced to disk in order to increase or decrease
-** how well the database resists damage due to OS crashes and power
-** failures. Level 1 is the same as asynchronous (no syncs() occur and
-** there is a high probability of damage) Level 2 is the default. There
-** is a very low but non-zero probability of damage. Level 3 reduces the
-** probability of damage to near zero but with a write performance reduction.
-*/
-static int fileBtreeSetSafetyLevel(Btree *pBt, int level){
- sqlitepager_set_safety_level(pBt->pPager, level);
- return SQLITE_OK;
-}
-
-/*
-** Get a reference to page1 of the database file. This will
-** also acquire a readlock on that file.
-**
-** SQLITE_OK is returned on success. If the file is not a
-** well-formed database file, then SQLITE_CORRUPT is returned.
-** SQLITE_BUSY is returned if the database is locked. SQLITE_NOMEM
-** is returned if we run out of memory. SQLITE_PROTOCOL is returned
-** if there is a locking protocol violation.
-*/
-static int lockBtree(Btree *pBt){
- int rc;
- if( pBt->page1 ) return SQLITE_OK;
- rc = sqlitepager_get(pBt->pPager, 1, (void**)&pBt->page1);
- if( rc!=SQLITE_OK ) return rc;
-
- /* Do some checking to help insure the file we opened really is
- ** a valid database file.
- */
- if( sqlitepager_pagecount(pBt->pPager)>0 ){
- PageOne *pP1 = pBt->page1;
- if( strcmp(pP1->zMagic,zMagicHeader)!=0 ||
- (pP1->iMagic!=MAGIC && swab32(pP1->iMagic)!=MAGIC) ){
- rc = SQLITE_NOTADB;
- goto page1_init_failed;
- }
- pBt->needSwab = pP1->iMagic!=MAGIC;
- }
- return rc;
-
-page1_init_failed:
- sqlitepager_unref(pBt->page1);
- pBt->page1 = 0;
- return rc;
-}
-
-/*
-** If there are no outstanding cursors and we are not in the middle
-** of a transaction but there is a read lock on the database, then
-** this routine unrefs the first page of the database file which
-** has the effect of releasing the read lock.
-**
-** If there are any outstanding cursors, this routine is a no-op.
-**
-** If there is a transaction in progress, this routine is a no-op.
-*/
-static void unlockBtreeIfUnused(Btree *pBt){
- if( pBt->inTrans==0 && pBt->pCursor==0 && pBt->page1!=0 ){
- sqlitepager_unref(pBt->page1);
- pBt->page1 = 0;
- pBt->inTrans = 0;
- pBt->inCkpt = 0;
- }
-}
-
-/*
-** Create a new database by initializing the first two pages of the
-** file.
-*/
-static int newDatabase(Btree *pBt){
- MemPage *pRoot;
- PageOne *pP1;
- int rc;
- if( sqlitepager_pagecount(pBt->pPager)>1 ) return SQLITE_OK;
- pP1 = pBt->page1;
- rc = sqlitepager_write(pBt->page1);
- if( rc ) return rc;
- rc = sqlitepager_get(pBt->pPager, 2, (void**)&pRoot);
- if( rc ) return rc;
- rc = sqlitepager_write(pRoot);
- if( rc ){
- sqlitepager_unref(pRoot);
- return rc;
- }
- strcpy(pP1->zMagic, zMagicHeader);
- if( btree_native_byte_order ){
- pP1->iMagic = MAGIC;
- pBt->needSwab = 0;
- }else{
- pP1->iMagic = swab32(MAGIC);
- pBt->needSwab = 1;
- }
- zeroPage(pBt, pRoot);
- sqlitepager_unref(pRoot);
- return SQLITE_OK;
-}
-
-/*
-** Attempt to start a new transaction.
-**
-** A transaction must be started before attempting any changes
-** to the database. None of the following routines will work
-** unless a transaction is started first:
-**
-** sqliteBtreeCreateTable()
-** sqliteBtreeCreateIndex()
-** sqliteBtreeClearTable()
-** sqliteBtreeDropTable()
-** sqliteBtreeInsert()
-** sqliteBtreeDelete()
-** sqliteBtreeUpdateMeta()
-*/
-static int fileBtreeBeginTrans(Btree *pBt){
- int rc;
- if( pBt->inTrans ) return SQLITE_ERROR;
- if( pBt->readOnly ) return SQLITE_READONLY;
- if( pBt->page1==0 ){
- rc = lockBtree(pBt);
- if( rc!=SQLITE_OK ){
- return rc;
- }
- }
- rc = sqlitepager_begin(pBt->page1);
- if( rc==SQLITE_OK ){
- rc = newDatabase(pBt);
- }
- if( rc==SQLITE_OK ){
- pBt->inTrans = 1;
- pBt->inCkpt = 0;
- }else{
- unlockBtreeIfUnused(pBt);
- }
- return rc;
-}
-
-/*
-** Commit the transaction currently in progress.
-**
-** This will release the write lock on the database file. If there
-** are no active cursors, it also releases the read lock.
-*/
-static int fileBtreeCommit(Btree *pBt){
- int rc;
- rc = pBt->readOnly ? SQLITE_OK : sqlitepager_commit(pBt->pPager);
- pBt->inTrans = 0;
- pBt->inCkpt = 0;
- unlockBtreeIfUnused(pBt);
- return rc;
-}
-
-/*
-** Rollback the transaction in progress. All cursors will be
-** invalided by this operation. Any attempt to use a cursor
-** that was open at the beginning of this operation will result
-** in an error.
-**
-** This will release the write lock on the database file. If there
-** are no active cursors, it also releases the read lock.
-*/
-static int fileBtreeRollback(Btree *pBt){
- int rc;
- BtCursor *pCur;
- if( pBt->inTrans==0 ) return SQLITE_OK;
- pBt->inTrans = 0;
- pBt->inCkpt = 0;
- rc = pBt->readOnly ? SQLITE_OK : sqlitepager_rollback(pBt->pPager);
- for(pCur=pBt->pCursor; pCur; pCur=pCur->pNext){
- if( pCur->pPage && pCur->pPage->isInit==0 ){
- sqlitepager_unref(pCur->pPage);
- pCur->pPage = 0;
- }
- }
- unlockBtreeIfUnused(pBt);
- return rc;
-}
-
-/*
-** Set the checkpoint for the current transaction. The checkpoint serves
-** as a sub-transaction that can be rolled back independently of the
-** main transaction. You must start a transaction before starting a
-** checkpoint. The checkpoint is ended automatically if the transaction
-** commits or rolls back.
-**
-** Only one checkpoint may be active at a time. It is an error to try
-** to start a new checkpoint if another checkpoint is already active.
-*/
-static int fileBtreeBeginCkpt(Btree *pBt){
- int rc;
- if( !pBt->inTrans || pBt->inCkpt ){
- return pBt->readOnly ? SQLITE_READONLY : SQLITE_ERROR;
- }
- rc = pBt->readOnly ? SQLITE_OK : sqlitepager_ckpt_begin(pBt->pPager);
- pBt->inCkpt = 1;
- return rc;
-}
-
-
-/*
-** Commit a checkpoint to transaction currently in progress. If no
-** checkpoint is active, this is a no-op.
-*/
-static int fileBtreeCommitCkpt(Btree *pBt){
- int rc;
- if( pBt->inCkpt && !pBt->readOnly ){
- rc = sqlitepager_ckpt_commit(pBt->pPager);
- }else{
- rc = SQLITE_OK;
- }
- pBt->inCkpt = 0;
- return rc;
-}
-
-/*
-** Rollback the checkpoint to the current transaction. If there
-** is no active checkpoint or transaction, this routine is a no-op.
-**
-** All cursors will be invalided by this operation. Any attempt
-** to use a cursor that was open at the beginning of this operation
-** will result in an error.
-*/
-static int fileBtreeRollbackCkpt(Btree *pBt){
- int rc;
- BtCursor *pCur;
- if( pBt->inCkpt==0 || pBt->readOnly ) return SQLITE_OK;
- rc = sqlitepager_ckpt_rollback(pBt->pPager);
- for(pCur=pBt->pCursor; pCur; pCur=pCur->pNext){
- if( pCur->pPage && pCur->pPage->isInit==0 ){
- sqlitepager_unref(pCur->pPage);
- pCur->pPage = 0;
- }
- }
- pBt->inCkpt = 0;
- return rc;
-}
-
-/*
-** Create a new cursor for the BTree whose root is on the page
-** iTable. The act of acquiring a cursor gets a read lock on
-** the database file.
-**
-** If wrFlag==0, then the cursor can only be used for reading.
-** If wrFlag==1, then the cursor can be used for reading or for
-** writing if other conditions for writing are also met. These
-** are the conditions that must be met in order for writing to
-** be allowed:
-**
-** 1: The cursor must have been opened with wrFlag==1
-**
-** 2: No other cursors may be open with wrFlag==0 on the same table
-**
-** 3: The database must be writable (not on read-only media)
-**
-** 4: There must be an active transaction.
-**
-** Condition 2 warrants further discussion. If any cursor is opened
-** on a table with wrFlag==0, that prevents all other cursors from
-** writing to that table. This is a kind of "read-lock". When a cursor
-** is opened with wrFlag==0 it is guaranteed that the table will not
-** change as long as the cursor is open. This allows the cursor to
-** do a sequential scan of the table without having to worry about
-** entries being inserted or deleted during the scan. Cursors should
-** be opened with wrFlag==0 only if this read-lock property is needed.
-** That is to say, cursors should be opened with wrFlag==0 only if they
-** intend to use the sqliteBtreeNext() system call. All other cursors
-** should be opened with wrFlag==1 even if they never really intend
-** to write.
-**
-** No checking is done to make sure that page iTable really is the
-** root page of a b-tree. If it is not, then the cursor acquired
-** will not work correctly.
-*/
-static
-int fileBtreeCursor(Btree *pBt, int iTable, int wrFlag, BtCursor **ppCur){
- int rc;
- BtCursor *pCur, *pRing;
-
- if( pBt->readOnly && wrFlag ){
- *ppCur = 0;
- return SQLITE_READONLY;
- }
- if( pBt->page1==0 ){
- rc = lockBtree(pBt);
- if( rc!=SQLITE_OK ){
- *ppCur = 0;
- return rc;
- }
- }
- pCur = sqliteMalloc( sizeof(*pCur) );
- if( pCur==0 ){
- rc = SQLITE_NOMEM;
- goto create_cursor_exception;
- }
- pCur->pgnoRoot = (Pgno)iTable;
- rc = sqlitepager_get(pBt->pPager, pCur->pgnoRoot, (void**)&pCur->pPage);
- if( rc!=SQLITE_OK ){
- goto create_cursor_exception;
- }
- rc = initPage(pBt, pCur->pPage, pCur->pgnoRoot, 0);
- if( rc!=SQLITE_OK ){
- goto create_cursor_exception;
- }
- pCur->pOps = &sqliteBtreeCursorOps;
- pCur->pBt = pBt;
- pCur->wrFlag = wrFlag;
- pCur->idx = 0;
- pCur->eSkip = SKIP_INVALID;
- pCur->pNext = pBt->pCursor;
- if( pCur->pNext ){
- pCur->pNext->pPrev = pCur;
- }
- pCur->pPrev = 0;
- pRing = pBt->pCursor;
- while( pRing && pRing->pgnoRoot!=pCur->pgnoRoot ){ pRing = pRing->pNext; }
- if( pRing ){
- pCur->pShared = pRing->pShared;
- pRing->pShared = pCur;
- }else{
- pCur->pShared = pCur;
- }
- pBt->pCursor = pCur;
- *ppCur = pCur;
- return SQLITE_OK;
-
-create_cursor_exception:
- *ppCur = 0;
- if( pCur ){
- if( pCur->pPage ) sqlitepager_unref(pCur->pPage);
- sqliteFree(pCur);
- }
- unlockBtreeIfUnused(pBt);
- return rc;
-}
-
-/*
-** Close a cursor. The read lock on the database file is released
-** when the last cursor is closed.
-*/
-static int fileBtreeCloseCursor(BtCursor *pCur){
- Btree *pBt = pCur->pBt;
- if( pCur->pPrev ){
- pCur->pPrev->pNext = pCur->pNext;
- }else{
- pBt->pCursor = pCur->pNext;
- }
- if( pCur->pNext ){
- pCur->pNext->pPrev = pCur->pPrev;
- }
- if( pCur->pPage ){
- sqlitepager_unref(pCur->pPage);
- }
- if( pCur->pShared!=pCur ){
- BtCursor *pRing = pCur->pShared;
- while( pRing->pShared!=pCur ){ pRing = pRing->pShared; }
- pRing->pShared = pCur->pShared;
- }
- unlockBtreeIfUnused(pBt);
- sqliteFree(pCur);
- return SQLITE_OK;
-}
-
-/*
-** Make a temporary cursor by filling in the fields of pTempCur.
-** The temporary cursor is not on the cursor list for the Btree.
-*/
-static void getTempCursor(BtCursor *pCur, BtCursor *pTempCur){
- memcpy(pTempCur, pCur, sizeof(*pCur));
- pTempCur->pNext = 0;
- pTempCur->pPrev = 0;
- if( pTempCur->pPage ){
- sqlitepager_ref(pTempCur->pPage);
- }
-}
-
-/*
-** Delete a temporary cursor such as was made by the CreateTemporaryCursor()
-** function above.
-*/
-static void releaseTempCursor(BtCursor *pCur){
- if( pCur->pPage ){
- sqlitepager_unref(pCur->pPage);
- }
-}
-
-/*
-** Set *pSize to the number of bytes of key in the entry the
-** cursor currently points to. Always return SQLITE_OK.
-** Failure is not possible. If the cursor is not currently
-** pointing to an entry (which can happen, for example, if
-** the database is empty) then *pSize is set to 0.
-*/
-static int fileBtreeKeySize(BtCursor *pCur, int *pSize){
- Cell *pCell;
- MemPage *pPage;
-
- pPage = pCur->pPage;
- assert( pPage!=0 );
- if( pCur->idx >= pPage->nCell ){
- *pSize = 0;
- }else{
- pCell = pPage->apCell[pCur->idx];
- *pSize = NKEY(pCur->pBt, pCell->h);
- }
- return SQLITE_OK;
-}
-
-/*
-** Read payload information from the entry that the pCur cursor is
-** pointing to. Begin reading the payload at "offset" and read
-** a total of "amt" bytes. Put the result in zBuf.
-**
-** This routine does not make a distinction between key and data.
-** It just reads bytes from the payload area.
-*/
-static int getPayload(BtCursor *pCur, int offset, int amt, char *zBuf){
- char *aPayload;
- Pgno nextPage;
- int rc;
- Btree *pBt = pCur->pBt;
- assert( pCur!=0 && pCur->pPage!=0 );
- assert( pCur->idx>=0 && pCur->idx<pCur->pPage->nCell );
- aPayload = pCur->pPage->apCell[pCur->idx]->aPayload;
- if( offset<MX_LOCAL_PAYLOAD ){
- int a = amt;
- if( a+offset>MX_LOCAL_PAYLOAD ){
- a = MX_LOCAL_PAYLOAD - offset;
- }
- memcpy(zBuf, &aPayload[offset], a);
- if( a==amt ){
- return SQLITE_OK;
- }
- offset = 0;
- zBuf += a;
- amt -= a;
- }else{
- offset -= MX_LOCAL_PAYLOAD;
- }
- if( amt>0 ){
- nextPage = SWAB32(pBt, pCur->pPage->apCell[pCur->idx]->ovfl);
- }
- while( amt>0 && nextPage ){
- OverflowPage *pOvfl;
- rc = sqlitepager_get(pBt->pPager, nextPage, (void**)&pOvfl);
- if( rc!=0 ){
- return rc;
- }
- nextPage = SWAB32(pBt, pOvfl->iNext);
- if( offset<OVERFLOW_SIZE ){
- int a = amt;
- if( a + offset > OVERFLOW_SIZE ){
- a = OVERFLOW_SIZE - offset;
- }
- memcpy(zBuf, &pOvfl->aPayload[offset], a);
- offset = 0;
- amt -= a;
- zBuf += a;
- }else{
- offset -= OVERFLOW_SIZE;
- }
- sqlitepager_unref(pOvfl);
- }
- if( amt>0 ){
- return SQLITE_CORRUPT;
- }
- return SQLITE_OK;
-}
-
-/*
-** Read part of the key associated with cursor pCur. A maximum
-** of "amt" bytes will be transfered into zBuf[]. The transfer
-** begins at "offset". The number of bytes actually read is
-** returned.
-**
-** Change: It used to be that the amount returned will be smaller
-** than the amount requested if there are not enough bytes in the key
-** to satisfy the request. But now, it must be the case that there
-** is enough data available to satisfy the request. If not, an exception
-** is raised. The change was made in an effort to boost performance
-** by eliminating unneeded tests.
-*/
-static int fileBtreeKey(BtCursor *pCur, int offset, int amt, char *zBuf){
- MemPage *pPage;
-
- assert( amt>=0 );
- assert( offset>=0 );
- assert( pCur->pPage!=0 );
- pPage = pCur->pPage;
- if( pCur->idx >= pPage->nCell ){
- return 0;
- }
- assert( amt+offset <= NKEY(pCur->pBt, pPage->apCell[pCur->idx]->h) );
- getPayload(pCur, offset, amt, zBuf);
- return amt;
-}
-
-/*
-** Set *pSize to the number of bytes of data in the entry the
-** cursor currently points to. Always return SQLITE_OK.
-** Failure is not possible. If the cursor is not currently
-** pointing to an entry (which can happen, for example, if
-** the database is empty) then *pSize is set to 0.
-*/
-static int fileBtreeDataSize(BtCursor *pCur, int *pSize){
- Cell *pCell;
- MemPage *pPage;
-
- pPage = pCur->pPage;
- assert( pPage!=0 );
- if( pCur->idx >= pPage->nCell ){
- *pSize = 0;
- }else{
- pCell = pPage->apCell[pCur->idx];
- *pSize = NDATA(pCur->pBt, pCell->h);
- }
- return SQLITE_OK;
-}
-
-/*
-** Read part of the data associated with cursor pCur. A maximum
-** of "amt" bytes will be transfered into zBuf[]. The transfer
-** begins at "offset". The number of bytes actually read is
-** returned. The amount returned will be smaller than the
-** amount requested if there are not enough bytes in the data
-** to satisfy the request.
-*/
-static int fileBtreeData(BtCursor *pCur, int offset, int amt, char *zBuf){
- Cell *pCell;
- MemPage *pPage;
-
- assert( amt>=0 );
- assert( offset>=0 );
- assert( pCur->pPage!=0 );
- pPage = pCur->pPage;
- if( pCur->idx >= pPage->nCell ){
- return 0;
- }
- pCell = pPage->apCell[pCur->idx];
- assert( amt+offset <= NDATA(pCur->pBt, pCell->h) );
- getPayload(pCur, offset + NKEY(pCur->pBt, pCell->h), amt, zBuf);
- return amt;
-}
-
-/*
-** Compare an external key against the key on the entry that pCur points to.
-**
-** The external key is pKey and is nKey bytes long. The last nIgnore bytes
-** of the key associated with pCur are ignored, as if they do not exist.
-** (The normal case is for nIgnore to be zero in which case the entire
-** internal key is used in the comparison.)
-**
-** The comparison result is written to *pRes as follows:
-**
-** *pRes<0 This means pCur<pKey
-**
-** *pRes==0 This means pCur==pKey for all nKey bytes
-**
-** *pRes>0 This means pCur>pKey
-**
-** When one key is an exact prefix of the other, the shorter key is
-** considered less than the longer one. In order to be equal the
-** keys must be exactly the same length. (The length of the pCur key
-** is the actual key length minus nIgnore bytes.)
-*/
-static int fileBtreeKeyCompare(
- BtCursor *pCur, /* Pointer to entry to compare against */
- const void *pKey, /* Key to compare against entry that pCur points to */
- int nKey, /* Number of bytes in pKey */
- int nIgnore, /* Ignore this many bytes at the end of pCur */
- int *pResult /* Write the result here */
-){
- Pgno nextPage;
- int n, c, rc, nLocal;
- Cell *pCell;
- Btree *pBt = pCur->pBt;
- const char *zKey = (const char*)pKey;
-
- assert( pCur->pPage );
- assert( pCur->idx>=0 && pCur->idx<pCur->pPage->nCell );
- pCell = pCur->pPage->apCell[pCur->idx];
- nLocal = NKEY(pBt, pCell->h) - nIgnore;
- if( nLocal<0 ) nLocal = 0;
- n = nKey<nLocal ? nKey : nLocal;
- if( n>MX_LOCAL_PAYLOAD ){
- n = MX_LOCAL_PAYLOAD;
- }
- c = memcmp(pCell->aPayload, zKey, n);
- if( c!=0 ){
- *pResult = c;
- return SQLITE_OK;
- }
- zKey += n;
- nKey -= n;
- nLocal -= n;
- nextPage = SWAB32(pBt, pCell->ovfl);
- while( nKey>0 && nLocal>0 ){
- OverflowPage *pOvfl;
- if( nextPage==0 ){
- return SQLITE_CORRUPT;
- }
- rc = sqlitepager_get(pBt->pPager, nextPage, (void**)&pOvfl);
- if( rc ){
- return rc;
- }
- nextPage = SWAB32(pBt, pOvfl->iNext);
- n = nKey<nLocal ? nKey : nLocal;
- if( n>OVERFLOW_SIZE ){
- n = OVERFLOW_SIZE;
- }
- c = memcmp(pOvfl->aPayload, zKey, n);
- sqlitepager_unref(pOvfl);
- if( c!=0 ){
- *pResult = c;
- return SQLITE_OK;
- }
- nKey -= n;
- nLocal -= n;
- zKey += n;
- }
- if( c==0 ){
- c = nLocal - nKey;
- }
- *pResult = c;
- return SQLITE_OK;
-}
-
-/*
-** Move the cursor down to a new child page. The newPgno argument is the
-** page number of the child page in the byte order of the disk image.
-*/
-static int moveToChild(BtCursor *pCur, int newPgno){
- int rc;
- MemPage *pNewPage;
- Btree *pBt = pCur->pBt;
-
- newPgno = SWAB32(pBt, newPgno);
- rc = sqlitepager_get(pBt->pPager, newPgno, (void**)&pNewPage);
- if( rc ) return rc;
- rc = initPage(pBt, pNewPage, newPgno, pCur->pPage);
- if( rc ) return rc;
- assert( pCur->idx>=pCur->pPage->nCell
- || pCur->pPage->apCell[pCur->idx]->h.leftChild==SWAB32(pBt,newPgno) );
- assert( pCur->idx<pCur->pPage->nCell
- || pCur->pPage->u.hdr.rightChild==SWAB32(pBt,newPgno) );
- pNewPage->idxParent = pCur->idx;
- pCur->pPage->idxShift = 0;
- sqlitepager_unref(pCur->pPage);
- pCur->pPage = pNewPage;
- pCur->idx = 0;
- if( pNewPage->nCell<1 ){
- return SQLITE_CORRUPT;
- }
- return SQLITE_OK;
-}
-
-/*
-** Move the cursor up to the parent page.
-**
-** pCur->idx is set to the cell index that contains the pointer
-** to the page we are coming from. If we are coming from the
-** right-most child page then pCur->idx is set to one more than
-** the largest cell index.
-*/
-static void moveToParent(BtCursor *pCur){
- Pgno oldPgno;
- MemPage *pParent;
- MemPage *pPage;
- int idxParent;
- pPage = pCur->pPage;
- assert( pPage!=0 );
- pParent = pPage->pParent;
- assert( pParent!=0 );
- idxParent = pPage->idxParent;
- sqlitepager_ref(pParent);
- sqlitepager_unref(pPage);
- pCur->pPage = pParent;
- assert( pParent->idxShift==0 );
- if( pParent->idxShift==0 ){
- pCur->idx = idxParent;
-#ifndef NDEBUG
- /* Verify that pCur->idx is the correct index to point back to the child
- ** page we just came from
- */
- oldPgno = SWAB32(pCur->pBt, sqlitepager_pagenumber(pPage));
- if( pCur->idx<pParent->nCell ){
- assert( pParent->apCell[idxParent]->h.leftChild==oldPgno );
- }else{
- assert( pParent->u.hdr.rightChild==oldPgno );
- }
-#endif
- }else{
- /* The MemPage.idxShift flag indicates that cell indices might have
- ** changed since idxParent was set and hence idxParent might be out
- ** of date. So recompute the parent cell index by scanning all cells
- ** and locating the one that points to the child we just came from.
- */
- int i;
- pCur->idx = pParent->nCell;
- oldPgno = SWAB32(pCur->pBt, sqlitepager_pagenumber(pPage));
- for(i=0; i<pParent->nCell; i++){
- if( pParent->apCell[i]->h.leftChild==oldPgno ){
- pCur->idx = i;
- break;
- }
- }
- }
-}
-
-/*
-** Move the cursor to the root page
-*/
-static int moveToRoot(BtCursor *pCur){
- MemPage *pNew;
- int rc;
- Btree *pBt = pCur->pBt;
-
- rc = sqlitepager_get(pBt->pPager, pCur->pgnoRoot, (void**)&pNew);
- if( rc ) return rc;
- rc = initPage(pBt, pNew, pCur->pgnoRoot, 0);
- if( rc ) return rc;
- sqlitepager_unref(pCur->pPage);
- pCur->pPage = pNew;
- pCur->idx = 0;
- return SQLITE_OK;
-}
-
-/*
-** Move the cursor down to the left-most leaf entry beneath the
-** entry to which it is currently pointing.
-*/
-static int moveToLeftmost(BtCursor *pCur){
- Pgno pgno;
- int rc;
-
- while( (pgno = pCur->pPage->apCell[pCur->idx]->h.leftChild)!=0 ){
- rc = moveToChild(pCur, pgno);
- if( rc ) return rc;
- }
- return SQLITE_OK;
-}
-
-/*
-** Move the cursor down to the right-most leaf entry beneath the
-** page to which it is currently pointing. Notice the difference
-** between moveToLeftmost() and moveToRightmost(). moveToLeftmost()
-** finds the left-most entry beneath the *entry* whereas moveToRightmost()
-** finds the right-most entry beneath the *page*.
-*/
-static int moveToRightmost(BtCursor *pCur){
- Pgno pgno;
- int rc;
-
- while( (pgno = pCur->pPage->u.hdr.rightChild)!=0 ){
- pCur->idx = pCur->pPage->nCell;
- rc = moveToChild(pCur, pgno);
- if( rc ) return rc;
- }
- pCur->idx = pCur->pPage->nCell - 1;
- return SQLITE_OK;
-}
-
-/* Move the cursor to the first entry in the table. Return SQLITE_OK
-** on success. Set *pRes to 0 if the cursor actually points to something
-** or set *pRes to 1 if the table is empty.
-*/
-static int fileBtreeFirst(BtCursor *pCur, int *pRes){
- int rc;
- if( pCur->pPage==0 ) return SQLITE_ABORT;
- rc = moveToRoot(pCur);
- if( rc ) return rc;
- if( pCur->pPage->nCell==0 ){
- *pRes = 1;
- return SQLITE_OK;
- }
- *pRes = 0;
- rc = moveToLeftmost(pCur);
- pCur->eSkip = SKIP_NONE;
- return rc;
-}
-
-/* Move the cursor to the last entry in the table. Return SQLITE_OK
-** on success. Set *pRes to 0 if the cursor actually points to something
-** or set *pRes to 1 if the table is empty.
-*/
-static int fileBtreeLast(BtCursor *pCur, int *pRes){
- int rc;
- if( pCur->pPage==0 ) return SQLITE_ABORT;
- rc = moveToRoot(pCur);
- if( rc ) return rc;
- assert( pCur->pPage->isInit );
- if( pCur->pPage->nCell==0 ){
- *pRes = 1;
- return SQLITE_OK;
- }
- *pRes = 0;
- rc = moveToRightmost(pCur);
- pCur->eSkip = SKIP_NONE;
- return rc;
-}
-
-/* Move the cursor so that it points to an entry near pKey.
-** Return a success code.
-**
-** If an exact match is not found, then the cursor is always
-** left pointing at a leaf page which would hold the entry if it
-** were present. The cursor might point to an entry that comes
-** before or after the key.
-**
-** The result of comparing the key with the entry to which the
-** cursor is left pointing is stored in pCur->iMatch. The same
-** value is also written to *pRes if pRes!=NULL. The meaning of
-** this value is as follows:
-**
-** *pRes<0 The cursor is left pointing at an entry that
-** is smaller than pKey or if the table is empty
-** and the cursor is therefore left point to nothing.
-**
-** *pRes==0 The cursor is left pointing at an entry that
-** exactly matches pKey.
-**
-** *pRes>0 The cursor is left pointing at an entry that
-** is larger than pKey.
-*/
-static
-int fileBtreeMoveto(BtCursor *pCur, const void *pKey, int nKey, int *pRes){
- int rc;
- if( pCur->pPage==0 ) return SQLITE_ABORT;
- pCur->eSkip = SKIP_NONE;
- rc = moveToRoot(pCur);
- if( rc ) return rc;
- for(;;){
- int lwr, upr;
- Pgno chldPg;
- MemPage *pPage = pCur->pPage;
- int c = -1; /* pRes return if table is empty must be -1 */
- lwr = 0;
- upr = pPage->nCell-1;
- while( lwr<=upr ){
- pCur->idx = (lwr+upr)/2;
- rc = fileBtreeKeyCompare(pCur, pKey, nKey, 0, &c);
- if( rc ) return rc;
- if( c==0 ){
- pCur->iMatch = c;
- if( pRes ) *pRes = 0;
- return SQLITE_OK;
- }
- if( c<0 ){
- lwr = pCur->idx+1;
- }else{
- upr = pCur->idx-1;
- }
- }
- assert( lwr==upr+1 );
- assert( pPage->isInit );
- if( lwr>=pPage->nCell ){
- chldPg = pPage->u.hdr.rightChild;
- }else{
- chldPg = pPage->apCell[lwr]->h.leftChild;
- }
- if( chldPg==0 ){
- pCur->iMatch = c;
- if( pRes ) *pRes = c;
- return SQLITE_OK;
- }
- pCur->idx = lwr;
- rc = moveToChild(pCur, chldPg);
- if( rc ) return rc;
- }
- /* NOT REACHED */
-}
-
-/*
-** Advance the cursor to the next entry in the database. If
-** successful then set *pRes=0. If the cursor
-** was already pointing to the last entry in the database before
-** this routine was called, then set *pRes=1.
-*/
-static int fileBtreeNext(BtCursor *pCur, int *pRes){
- int rc;
- MemPage *pPage = pCur->pPage;
- assert( pRes!=0 );
- if( pPage==0 ){
- *pRes = 1;
- return SQLITE_ABORT;
- }
- assert( pPage->isInit );
- assert( pCur->eSkip!=SKIP_INVALID );
- if( pPage->nCell==0 ){
- *pRes = 1;
- return SQLITE_OK;
- }
- assert( pCur->idx<pPage->nCell );
- if( pCur->eSkip==SKIP_NEXT ){
- pCur->eSkip = SKIP_NONE;
- *pRes = 0;
- return SQLITE_OK;
- }
- pCur->eSkip = SKIP_NONE;
- pCur->idx++;
- if( pCur->idx>=pPage->nCell ){
- if( pPage->u.hdr.rightChild ){
- rc = moveToChild(pCur, pPage->u.hdr.rightChild);
- if( rc ) return rc;
- rc = moveToLeftmost(pCur);
- *pRes = 0;
- return rc;
- }
- do{
- if( pPage->pParent==0 ){
- *pRes = 1;
- return SQLITE_OK;
- }
- moveToParent(pCur);
- pPage = pCur->pPage;
- }while( pCur->idx>=pPage->nCell );
- *pRes = 0;
- return SQLITE_OK;
- }
- *pRes = 0;
- if( pPage->u.hdr.rightChild==0 ){
- return SQLITE_OK;
- }
- rc = moveToLeftmost(pCur);
- return rc;
-}
-
-/*
-** Step the cursor to the back to the previous entry in the database. If
-** successful then set *pRes=0. If the cursor
-** was already pointing to the first entry in the database before
-** this routine was called, then set *pRes=1.
-*/
-static int fileBtreePrevious(BtCursor *pCur, int *pRes){
- int rc;
- Pgno pgno;
- MemPage *pPage;
- pPage = pCur->pPage;
- if( pPage==0 ){
- *pRes = 1;
- return SQLITE_ABORT;
- }
- assert( pPage->isInit );
- assert( pCur->eSkip!=SKIP_INVALID );
- if( pPage->nCell==0 ){
- *pRes = 1;
- return SQLITE_OK;
- }
- if( pCur->eSkip==SKIP_PREV ){
- pCur->eSkip = SKIP_NONE;
- *pRes = 0;
- return SQLITE_OK;
- }
- pCur->eSkip = SKIP_NONE;
- assert( pCur->idx>=0 );
- if( (pgno = pPage->apCell[pCur->idx]->h.leftChild)!=0 ){
- rc = moveToChild(pCur, pgno);
- if( rc ) return rc;
- rc = moveToRightmost(pCur);
- }else{
- while( pCur->idx==0 ){
- if( pPage->pParent==0 ){
- if( pRes ) *pRes = 1;
- return SQLITE_OK;
- }
- moveToParent(pCur);
- pPage = pCur->pPage;
- }
- pCur->idx--;
- rc = SQLITE_OK;
- }
- *pRes = 0;
- return rc;
-}
-
-/*
-** Allocate a new page from the database file.
-**
-** The new page is marked as dirty. (In other words, sqlitepager_write()
-** has already been called on the new page.) The new page has also
-** been referenced and the calling routine is responsible for calling
-** sqlitepager_unref() on the new page when it is done.
-**
-** SQLITE_OK is returned on success. Any other return value indicates
-** an error. *ppPage and *pPgno are undefined in the event of an error.
-** Do not invoke sqlitepager_unref() on *ppPage if an error is returned.
-**
-** If the "nearby" parameter is not 0, then a (feeble) effort is made to
-** locate a page close to the page number "nearby". This can be used in an
-** attempt to keep related pages close to each other in the database file,
-** which in turn can make database access faster.
-*/
-static int allocatePage(Btree *pBt, MemPage **ppPage, Pgno *pPgno, Pgno nearby){
- PageOne *pPage1 = pBt->page1;
- int rc;
- if( pPage1->freeList ){
- OverflowPage *pOvfl;
- FreelistInfo *pInfo;
-
- rc = sqlitepager_write(pPage1);
- if( rc ) return rc;
- SWAB_ADD(pBt, pPage1->nFree, -1);
- rc = sqlitepager_get(pBt->pPager, SWAB32(pBt, pPage1->freeList),
- (void**)&pOvfl);
- if( rc ) return rc;
- rc = sqlitepager_write(pOvfl);
- if( rc ){
- sqlitepager_unref(pOvfl);
- return rc;
- }
- pInfo = (FreelistInfo*)pOvfl->aPayload;
- if( pInfo->nFree==0 ){
- *pPgno = SWAB32(pBt, pPage1->freeList);
- pPage1->freeList = pOvfl->iNext;
- *ppPage = (MemPage*)pOvfl;
- }else{
- int closest, n;
- n = SWAB32(pBt, pInfo->nFree);
- if( n>1 && nearby>0 ){
- int i, dist;
- closest = 0;
- dist = SWAB32(pBt, pInfo->aFree[0]) - nearby;
- if( dist<0 ) dist = -dist;
- for(i=1; i<n; i++){
- int d2 = SWAB32(pBt, pInfo->aFree[i]) - nearby;
- if( d2<0 ) d2 = -d2;
- if( d2<dist ) closest = i;
- }
- }else{
- closest = 0;
- }
- SWAB_ADD(pBt, pInfo->nFree, -1);
- *pPgno = SWAB32(pBt, pInfo->aFree[closest]);
- pInfo->aFree[closest] = pInfo->aFree[n-1];
- rc = sqlitepager_get(pBt->pPager, *pPgno, (void**)ppPage);
- sqlitepager_unref(pOvfl);
- if( rc==SQLITE_OK ){
- sqlitepager_dont_rollback(*ppPage);
- rc = sqlitepager_write(*ppPage);
- }
- }
- }else{
- *pPgno = sqlitepager_pagecount(pBt->pPager) + 1;
- rc = sqlitepager_get(pBt->pPager, *pPgno, (void**)ppPage);
- if( rc ) return rc;
- rc = sqlitepager_write(*ppPage);
- }
- return rc;
-}
-
-/*
-** Add a page of the database file to the freelist. Either pgno or
-** pPage but not both may be 0.
-**
-** sqlitepager_unref() is NOT called for pPage.
-*/
-static int freePage(Btree *pBt, void *pPage, Pgno pgno){
- PageOne *pPage1 = pBt->page1;
- OverflowPage *pOvfl = (OverflowPage*)pPage;
- int rc;
- int needUnref = 0;
- MemPage *pMemPage;
-
- if( pgno==0 ){
- assert( pOvfl!=0 );
- pgno = sqlitepager_pagenumber(pOvfl);
- }
- assert( pgno>2 );
- assert( sqlitepager_pagenumber(pOvfl)==pgno );
- pMemPage = (MemPage*)pPage;
- pMemPage->isInit = 0;
- if( pMemPage->pParent ){
- sqlitepager_unref(pMemPage->pParent);
- pMemPage->pParent = 0;
- }
- rc = sqlitepager_write(pPage1);
- if( rc ){
- return rc;
- }
- SWAB_ADD(pBt, pPage1->nFree, 1);
- if( pPage1->nFree!=0 && pPage1->freeList!=0 ){
- OverflowPage *pFreeIdx;
- rc = sqlitepager_get(pBt->pPager, SWAB32(pBt, pPage1->freeList),
- (void**)&pFreeIdx);
- if( rc==SQLITE_OK ){
- FreelistInfo *pInfo = (FreelistInfo*)pFreeIdx->aPayload;
- int n = SWAB32(pBt, pInfo->nFree);
- if( n<(sizeof(pInfo->aFree)/sizeof(pInfo->aFree[0])) ){
- rc = sqlitepager_write(pFreeIdx);
- if( rc==SQLITE_OK ){
- pInfo->aFree[n] = SWAB32(pBt, pgno);
- SWAB_ADD(pBt, pInfo->nFree, 1);
- sqlitepager_unref(pFreeIdx);
- sqlitepager_dont_write(pBt->pPager, pgno);
- return rc;
- }
- }
- sqlitepager_unref(pFreeIdx);
- }
- }
- if( pOvfl==0 ){
- assert( pgno>0 );
- rc = sqlitepager_get(pBt->pPager, pgno, (void**)&pOvfl);
- if( rc ) return rc;
- needUnref = 1;
- }
- rc = sqlitepager_write(pOvfl);
- if( rc ){
- if( needUnref ) sqlitepager_unref(pOvfl);
- return rc;
- }
- pOvfl->iNext = pPage1->freeList;
- pPage1->freeList = SWAB32(pBt, pgno);
- memset(pOvfl->aPayload, 0, OVERFLOW_SIZE);
- if( needUnref ) rc = sqlitepager_unref(pOvfl);
- return rc;
-}
-
-/*
-** Erase all the data out of a cell. This involves returning overflow
-** pages back the freelist.
-*/
-static int clearCell(Btree *pBt, Cell *pCell){
- Pager *pPager = pBt->pPager;
- OverflowPage *pOvfl;
- Pgno ovfl, nextOvfl;
- int rc;
-
- if( NKEY(pBt, pCell->h) + NDATA(pBt, pCell->h) <= MX_LOCAL_PAYLOAD ){
- return SQLITE_OK;
- }
- ovfl = SWAB32(pBt, pCell->ovfl);
- pCell->ovfl = 0;
- while( ovfl ){
- rc = sqlitepager_get(pPager, ovfl, (void**)&pOvfl);
- if( rc ) return rc;
- nextOvfl = SWAB32(pBt, pOvfl->iNext);
- rc = freePage(pBt, pOvfl, ovfl);
- if( rc ) return rc;
- sqlitepager_unref(pOvfl);
- ovfl = nextOvfl;
- }
- return SQLITE_OK;
-}
-
-/*
-** Create a new cell from key and data. Overflow pages are allocated as
-** necessary and linked to this cell.
-*/
-static int fillInCell(
- Btree *pBt, /* The whole Btree. Needed to allocate pages */
- Cell *pCell, /* Populate this Cell structure */
- const void *pKey, int nKey, /* The key */
- const void *pData,int nData /* The data */
-){
- OverflowPage *pOvfl, *pPrior;
- Pgno *pNext;
- int spaceLeft;
- int n, rc;
- int nPayload;
- const char *pPayload;
- char *pSpace;
- Pgno nearby = 0;
-
- pCell->h.leftChild = 0;
- pCell->h.nKey = SWAB16(pBt, nKey & 0xffff);
- pCell->h.nKeyHi = nKey >> 16;
- pCell->h.nData = SWAB16(pBt, nData & 0xffff);
- pCell->h.nDataHi = nData >> 16;
- pCell->h.iNext = 0;
-
- pNext = &pCell->ovfl;
- pSpace = pCell->aPayload;
- spaceLeft = MX_LOCAL_PAYLOAD;
- pPayload = pKey;
- pKey = 0;
- nPayload = nKey;
- pPrior = 0;
- while( nPayload>0 ){
- if( spaceLeft==0 ){
- rc = allocatePage(pBt, (MemPage**)&pOvfl, pNext, nearby);
- if( rc ){
- *pNext = 0;
- }else{
- nearby = *pNext;
- }
- if( pPrior ) sqlitepager_unref(pPrior);
- if( rc ){
- clearCell(pBt, pCell);
- return rc;
- }
- if( pBt->needSwab ) *pNext = swab32(*pNext);
- pPrior = pOvfl;
- spaceLeft = OVERFLOW_SIZE;
- pSpace = pOvfl->aPayload;
- pNext = &pOvfl->iNext;
- }
- n = nPayload;
- if( n>spaceLeft ) n = spaceLeft;
- memcpy(pSpace, pPayload, n);
- nPayload -= n;
- if( nPayload==0 && pData ){
- pPayload = pData;
- nPayload = nData;
- pData = 0;
- }else{
- pPayload += n;
- }
- spaceLeft -= n;
- pSpace += n;
- }
- *pNext = 0;
- if( pPrior ){
- sqlitepager_unref(pPrior);
- }
- return SQLITE_OK;
-}
-
-/*
-** Change the MemPage.pParent pointer on the page whose number is
-** given in the second argument so that MemPage.pParent holds the
-** pointer in the third argument.
-*/
-static void reparentPage(Pager *pPager, Pgno pgno, MemPage *pNewParent,int idx){
- MemPage *pThis;
-
- if( pgno==0 ) return;
- assert( pPager!=0 );
- pThis = sqlitepager_lookup(pPager, pgno);
- if( pThis && pThis->isInit ){
- if( pThis->pParent!=pNewParent ){
- if( pThis->pParent ) sqlitepager_unref(pThis->pParent);
- pThis->pParent = pNewParent;
- if( pNewParent ) sqlitepager_ref(pNewParent);
- }
- pThis->idxParent = idx;
- sqlitepager_unref(pThis);
- }
-}
-
-/*
-** Reparent all children of the given page to be the given page.
-** In other words, for every child of pPage, invoke reparentPage()
-** to make sure that each child knows that pPage is its parent.
-**
-** This routine gets called after you memcpy() one page into
-** another.
-*/
-static void reparentChildPages(Btree *pBt, MemPage *pPage){
- int i;
- Pager *pPager = pBt->pPager;
- for(i=0; i<pPage->nCell; i++){
- reparentPage(pPager, SWAB32(pBt, pPage->apCell[i]->h.leftChild), pPage, i);
- }
- reparentPage(pPager, SWAB32(pBt, pPage->u.hdr.rightChild), pPage, i);
- pPage->idxShift = 0;
-}
-
-/*
-** Remove the i-th cell from pPage. This routine effects pPage only.
-** The cell content is not freed or deallocated. It is assumed that
-** the cell content has been copied someplace else. This routine just
-** removes the reference to the cell from pPage.
-**
-** "sz" must be the number of bytes in the cell.
-**
-** Do not bother maintaining the integrity of the linked list of Cells.
-** Only the pPage->apCell[] array is important. The relinkCellList()
-** routine will be called soon after this routine in order to rebuild
-** the linked list.
-*/
-static void dropCell(Btree *pBt, MemPage *pPage, int idx, int sz){
- int j;
- assert( idx>=0 && idx<pPage->nCell );
- assert( sz==cellSize(pBt, pPage->apCell[idx]) );
- assert( sqlitepager_iswriteable(pPage) );
- freeSpace(pBt, pPage, Addr(pPage->apCell[idx]) - Addr(pPage), sz);
- for(j=idx; j<pPage->nCell-1; j++){
- pPage->apCell[j] = pPage->apCell[j+1];
- }
- pPage->nCell--;
- pPage->idxShift = 1;
-}
-
-/*
-** Insert a new cell on pPage at cell index "i". pCell points to the
-** content of the cell.
-**
-** If the cell content will fit on the page, then put it there. If it
-** will not fit, then just make pPage->apCell[i] point to the content
-** and set pPage->isOverfull.
-**
-** Do not bother maintaining the integrity of the linked list of Cells.
-** Only the pPage->apCell[] array is important. The relinkCellList()
-** routine will be called soon after this routine in order to rebuild
-** the linked list.
-*/
-static void insertCell(Btree *pBt, MemPage *pPage, int i, Cell *pCell, int sz){
- int idx, j;
- assert( i>=0 && i<=pPage->nCell );
- assert( sz==cellSize(pBt, pCell) );
- assert( sqlitepager_iswriteable(pPage) );
- idx = allocateSpace(pBt, pPage, sz);
- for(j=pPage->nCell; j>i; j--){
- pPage->apCell[j] = pPage->apCell[j-1];
- }
- pPage->nCell++;
- if( idx<=0 ){
- pPage->isOverfull = 1;
- pPage->apCell[i] = pCell;
- }else{
- memcpy(&pPage->u.aDisk[idx], pCell, sz);
- pPage->apCell[i] = (Cell*)&pPage->u.aDisk[idx];
- }
- pPage->idxShift = 1;
-}
-
-/*
-** Rebuild the linked list of cells on a page so that the cells
-** occur in the order specified by the pPage->apCell[] array.
-** Invoke this routine once to repair damage after one or more
-** invocations of either insertCell() or dropCell().
-*/
-static void relinkCellList(Btree *pBt, MemPage *pPage){
- int i;
- u16 *pIdx;
- assert( sqlitepager_iswriteable(pPage) );
- pIdx = &pPage->u.hdr.firstCell;
- for(i=0; i<pPage->nCell; i++){
- int idx = Addr(pPage->apCell[i]) - Addr(pPage);
- assert( idx>0 && idx<SQLITE_USABLE_SIZE );
- *pIdx = SWAB16(pBt, idx);
- pIdx = &pPage->apCell[i]->h.iNext;
- }
- *pIdx = 0;
-}
-
-/*
-** Make a copy of the contents of pFrom into pTo. The pFrom->apCell[]
-** pointers that point into pFrom->u.aDisk[] must be adjusted to point
-** into pTo->u.aDisk[] instead. But some pFrom->apCell[] entries might
-** not point to pFrom->u.aDisk[]. Those are unchanged.
-*/
-static void copyPage(MemPage *pTo, MemPage *pFrom){
- uptr from, to;
- int i;
- memcpy(pTo->u.aDisk, pFrom->u.aDisk, SQLITE_USABLE_SIZE);
- pTo->pParent = 0;
- pTo->isInit = 1;
- pTo->nCell = pFrom->nCell;
- pTo->nFree = pFrom->nFree;
- pTo->isOverfull = pFrom->isOverfull;
- to = Addr(pTo);
- from = Addr(pFrom);
- for(i=0; i<pTo->nCell; i++){
- uptr x = Addr(pFrom->apCell[i]);
- if( x>from && x<from+SQLITE_USABLE_SIZE ){
- *((uptr*)&pTo->apCell[i]) = x + to - from;
- }else{
- pTo->apCell[i] = pFrom->apCell[i];
- }
- }
-}
-
-/*
-** The following parameters determine how many adjacent pages get involved
-** in a balancing operation. NN is the number of neighbors on either side
-** of the page that participate in the balancing operation. NB is the
-** total number of pages that participate, including the target page and
-** NN neighbors on either side.
-**
-** The minimum value of NN is 1 (of course). Increasing NN above 1
-** (to 2 or 3) gives a modest improvement in SELECT and DELETE performance
-** in exchange for a larger degradation in INSERT and UPDATE performance.
-** The value of NN appears to give the best results overall.
-*/
-#define NN 1 /* Number of neighbors on either side of pPage */
-#define NB (NN*2+1) /* Total pages involved in the balance */
-
-/*
-** This routine redistributes Cells on pPage and up to two siblings
-** of pPage so that all pages have about the same amount of free space.
-** Usually one sibling on either side of pPage is used in the balancing,
-** though both siblings might come from one side if pPage is the first
-** or last child of its parent. If pPage has fewer than two siblings
-** (something which can only happen if pPage is the root page or a
-** child of root) then all available siblings participate in the balancing.
-**
-** The number of siblings of pPage might be increased or decreased by
-** one in an effort to keep pages between 66% and 100% full. The root page
-** is special and is allowed to be less than 66% full. If pPage is
-** the root page, then the depth of the tree might be increased
-** or decreased by one, as necessary, to keep the root page from being
-** overfull or empty.
-**
-** This routine calls relinkCellList() on its input page regardless of
-** whether or not it does any real balancing. Client routines will typically
-** invoke insertCell() or dropCell() before calling this routine, so we
-** need to call relinkCellList() to clean up the mess that those other
-** routines left behind.
-**
-** pCur is left pointing to the same cell as when this routine was called
-** even if that cell gets moved to a different page. pCur may be NULL.
-** Set the pCur parameter to NULL if you do not care about keeping track
-** of a cell as that will save this routine the work of keeping track of it.
-**
-** Note that when this routine is called, some of the Cells on pPage
-** might not actually be stored in pPage->u.aDisk[]. This can happen
-** if the page is overfull. Part of the job of this routine is to
-** make sure all Cells for pPage once again fit in pPage->u.aDisk[].
-**
-** In the course of balancing the siblings of pPage, the parent of pPage
-** might become overfull or underfull. If that happens, then this routine
-** is called recursively on the parent.
-**
-** If this routine fails for any reason, it might leave the database
-** in a corrupted state. So if this routine fails, the database should
-** be rolled back.
-*/
-static int balance(Btree *pBt, MemPage *pPage, BtCursor *pCur){
- MemPage *pParent; /* The parent of pPage */
- int nCell; /* Number of cells in apCell[] */
- int nOld; /* Number of pages in apOld[] */
- int nNew; /* Number of pages in apNew[] */
- int nDiv; /* Number of cells in apDiv[] */
- int i, j, k; /* Loop counters */
- int idx; /* Index of pPage in pParent->apCell[] */
- int nxDiv; /* Next divider slot in pParent->apCell[] */
- int rc; /* The return code */
- int iCur; /* apCell[iCur] is the cell of the cursor */
- MemPage *pOldCurPage; /* The cursor originally points to this page */
- int subtotal; /* Subtotal of bytes in cells on one page */
- MemPage *extraUnref = 0; /* A page that needs to be unref-ed */
- MemPage *apOld[NB]; /* pPage and up to two siblings */
- Pgno pgnoOld[NB]; /* Page numbers for each page in apOld[] */
- MemPage *apNew[NB+1]; /* pPage and up to NB siblings after balancing */
- Pgno pgnoNew[NB+1]; /* Page numbers for each page in apNew[] */
- int idxDiv[NB]; /* Indices of divider cells in pParent */
- Cell *apDiv[NB]; /* Divider cells in pParent */
- Cell aTemp[NB]; /* Temporary holding area for apDiv[] */
- int cntNew[NB+1]; /* Index in apCell[] of cell after i-th page */
- int szNew[NB+1]; /* Combined size of cells place on i-th page */
- MemPage aOld[NB]; /* Temporary copies of pPage and its siblings */
- Cell *apCell[(MX_CELL+2)*NB]; /* All cells from pages being balanced */
- int szCell[(MX_CELL+2)*NB]; /* Local size of all cells */
-
- /*
- ** Return without doing any work if pPage is neither overfull nor
- ** underfull.
- */
- assert( sqlitepager_iswriteable(pPage) );
- if( !pPage->isOverfull && pPage->nFree<SQLITE_USABLE_SIZE/2
- && pPage->nCell>=2){
- relinkCellList(pBt, pPage);
- return SQLITE_OK;
- }
-
- /*
- ** Find the parent of the page to be balanceed.
- ** If there is no parent, it means this page is the root page and
- ** special rules apply.
- */
- pParent = pPage->pParent;
- if( pParent==0 ){
- Pgno pgnoChild;
- MemPage *pChild;
- assert( pPage->isInit );
- if( pPage->nCell==0 ){
- if( pPage->u.hdr.rightChild ){
- /*
- ** The root page is empty. Copy the one child page
- ** into the root page and return. This reduces the depth
- ** of the BTree by one.
- */
- pgnoChild = SWAB32(pBt, pPage->u.hdr.rightChild);
- rc = sqlitepager_get(pBt->pPager, pgnoChild, (void**)&pChild);
- if( rc ) return rc;
- memcpy(pPage, pChild, SQLITE_USABLE_SIZE);
- pPage->isInit = 0;
- rc = initPage(pBt, pPage, sqlitepager_pagenumber(pPage), 0);
- assert( rc==SQLITE_OK );
- reparentChildPages(pBt, pPage);
- if( pCur && pCur->pPage==pChild ){
- sqlitepager_unref(pChild);
- pCur->pPage = pPage;
- sqlitepager_ref(pPage);
- }
- freePage(pBt, pChild, pgnoChild);
- sqlitepager_unref(pChild);
- }else{
- relinkCellList(pBt, pPage);
- }
- return SQLITE_OK;
- }
- if( !pPage->isOverfull ){
- /* It is OK for the root page to be less than half full.
- */
- relinkCellList(pBt, pPage);
- return SQLITE_OK;
- }
- /*
- ** If we get to here, it means the root page is overfull.
- ** When this happens, Create a new child page and copy the
- ** contents of the root into the child. Then make the root
- ** page an empty page with rightChild pointing to the new
- ** child. Then fall thru to the code below which will cause
- ** the overfull child page to be split.
- */
- rc = sqlitepager_write(pPage);
- if( rc ) return rc;
- rc = allocatePage(pBt, &pChild, &pgnoChild, sqlitepager_pagenumber(pPage));
- if( rc ) return rc;
- assert( sqlitepager_iswriteable(pChild) );
- copyPage(pChild, pPage);
- pChild->pParent = pPage;
- pChild->idxParent = 0;
- sqlitepager_ref(pPage);
- pChild->isOverfull = 1;
- if( pCur && pCur->pPage==pPage ){
- sqlitepager_unref(pPage);
- pCur->pPage = pChild;
- }else{
- extraUnref = pChild;
- }
- zeroPage(pBt, pPage);
- pPage->u.hdr.rightChild = SWAB32(pBt, pgnoChild);
- pParent = pPage;
- pPage = pChild;
- }
- rc = sqlitepager_write(pParent);
- if( rc ) return rc;
- assert( pParent->isInit );
-
- /*
- ** Find the Cell in the parent page whose h.leftChild points back
- ** to pPage. The "idx" variable is the index of that cell. If pPage
- ** is the rightmost child of pParent then set idx to pParent->nCell
- */
- if( pParent->idxShift ){
- Pgno pgno, swabPgno;
- pgno = sqlitepager_pagenumber(pPage);
- swabPgno = SWAB32(pBt, pgno);
- for(idx=0; idx<pParent->nCell; idx++){
- if( pParent->apCell[idx]->h.leftChild==swabPgno ){
- break;
- }
- }
- assert( idx<pParent->nCell || pParent->u.hdr.rightChild==swabPgno );
- }else{
- idx = pPage->idxParent;
- }
-
- /*
- ** Initialize variables so that it will be safe to jump
- ** directly to balance_cleanup at any moment.
- */
- nOld = nNew = 0;
- sqlitepager_ref(pParent);
-
- /*
- ** Find sibling pages to pPage and the Cells in pParent that divide
- ** the siblings. An attempt is made to find NN siblings on either
- ** side of pPage. More siblings are taken from one side, however, if
- ** pPage there are fewer than NN siblings on the other side. If pParent
- ** has NB or fewer children then all children of pParent are taken.
- */
- nxDiv = idx - NN;
- if( nxDiv + NB > pParent->nCell ){
- nxDiv = pParent->nCell - NB + 1;
- }
- if( nxDiv<0 ){
- nxDiv = 0;
- }
- nDiv = 0;
- for(i=0, k=nxDiv; i<NB; i++, k++){
- if( k<pParent->nCell ){
- idxDiv[i] = k;
- apDiv[i] = pParent->apCell[k];
- nDiv++;
- pgnoOld[i] = SWAB32(pBt, apDiv[i]->h.leftChild);
- }else if( k==pParent->nCell ){
- pgnoOld[i] = SWAB32(pBt, pParent->u.hdr.rightChild);
- }else{
- break;
- }
- rc = sqlitepager_get(pBt->pPager, pgnoOld[i], (void**)&apOld[i]);
- if( rc ) goto balance_cleanup;
- rc = initPage(pBt, apOld[i], pgnoOld[i], pParent);
- if( rc ) goto balance_cleanup;
- apOld[i]->idxParent = k;
- nOld++;
- }
-
- /*
- ** Set iCur to be the index in apCell[] of the cell that the cursor
- ** is pointing to. We will need this later on in order to keep the
- ** cursor pointing at the same cell. If pCur points to a page that
- ** has no involvement with this rebalancing, then set iCur to a large
- ** number so that the iCur==j tests always fail in the main cell
- ** distribution loop below.
- */
- if( pCur ){
- iCur = 0;
- for(i=0; i<nOld; i++){
- if( pCur->pPage==apOld[i] ){
- iCur += pCur->idx;
- break;
- }
- iCur += apOld[i]->nCell;
- if( i<nOld-1 && pCur->pPage==pParent && pCur->idx==idxDiv[i] ){
- break;
- }
- iCur++;
- }
- pOldCurPage = pCur->pPage;
- }
-
- /*
- ** Make copies of the content of pPage and its siblings into aOld[].
- ** The rest of this function will use data from the copies rather
- ** that the original pages since the original pages will be in the
- ** process of being overwritten.
- */
- for(i=0; i<nOld; i++){
- copyPage(&aOld[i], apOld[i]);
- }
-
- /*
- ** Load pointers to all cells on sibling pages and the divider cells
- ** into the local apCell[] array. Make copies of the divider cells
- ** into aTemp[] and remove the the divider Cells from pParent.
- */
- nCell = 0;
- for(i=0; i<nOld; i++){
- MemPage *pOld = &aOld[i];
- for(j=0; j<pOld->nCell; j++){
- apCell[nCell] = pOld->apCell[j];
- szCell[nCell] = cellSize(pBt, apCell[nCell]);
- nCell++;
- }
- if( i<nOld-1 ){
- szCell[nCell] = cellSize(pBt, apDiv[i]);
- memcpy(&aTemp[i], apDiv[i], szCell[nCell]);
- apCell[nCell] = &aTemp[i];
- dropCell(pBt, pParent, nxDiv, szCell[nCell]);
- assert( SWAB32(pBt, apCell[nCell]->h.leftChild)==pgnoOld[i] );
- apCell[nCell]->h.leftChild = pOld->u.hdr.rightChild;
- nCell++;
- }
- }
-
- /*
- ** Figure out the number of pages needed to hold all nCell cells.
- ** Store this number in "k". Also compute szNew[] which is the total
- ** size of all cells on the i-th page and cntNew[] which is the index
- ** in apCell[] of the cell that divides path i from path i+1.
- ** cntNew[k] should equal nCell.
- **
- ** This little patch of code is critical for keeping the tree
- ** balanced.
- */
- for(subtotal=k=i=0; i<nCell; i++){
- subtotal += szCell[i];
- if( subtotal > USABLE_SPACE ){
- szNew[k] = subtotal - szCell[i];
- cntNew[k] = i;
- subtotal = 0;
- k++;
- }
- }
- szNew[k] = subtotal;
- cntNew[k] = nCell;
- k++;
- for(i=k-1; i>0; i--){
- while( szNew[i]<USABLE_SPACE/2 ){
- cntNew[i-1]--;
- assert( cntNew[i-1]>0 );
- szNew[i] += szCell[cntNew[i-1]];
- szNew[i-1] -= szCell[cntNew[i-1]-1];
- }
- }
- assert( cntNew[0]>0 );
-
- /*
- ** Allocate k new pages. Reuse old pages where possible.
- */
- for(i=0; i<k; i++){
- if( i<nOld ){
- apNew[i] = apOld[i];
- pgnoNew[i] = pgnoOld[i];
- apOld[i] = 0;
- sqlitepager_write(apNew[i]);
- }else{
- rc = allocatePage(pBt, &apNew[i], &pgnoNew[i], pgnoNew[i-1]);
- if( rc ) goto balance_cleanup;
- }
- nNew++;
- zeroPage(pBt, apNew[i]);
- apNew[i]->isInit = 1;
- }
-
- /* Free any old pages that were not reused as new pages.
- */
- while( i<nOld ){
- rc = freePage(pBt, apOld[i], pgnoOld[i]);
- if( rc ) goto balance_cleanup;
- sqlitepager_unref(apOld[i]);
- apOld[i] = 0;
- i++;
- }
-
- /*
- ** Put the new pages in accending order. This helps to
- ** keep entries in the disk file in order so that a scan
- ** of the table is a linear scan through the file. That
- ** in turn helps the operating system to deliver pages
- ** from the disk more rapidly.
- **
- ** An O(n^2) insertion sort algorithm is used, but since
- ** n is never more than NB (a small constant), that should
- ** not be a problem.
- **
- ** When NB==3, this one optimization makes the database
- ** about 25% faster for large insertions and deletions.
- */
- for(i=0; i<k-1; i++){
- int minV = pgnoNew[i];
- int minI = i;
- for(j=i+1; j<k; j++){
- if( pgnoNew[j]<(unsigned)minV ){
- minI = j;
- minV = pgnoNew[j];
- }
- }
- if( minI>i ){
- int t;
- MemPage *pT;
- t = pgnoNew[i];
- pT = apNew[i];
- pgnoNew[i] = pgnoNew[minI];
- apNew[i] = apNew[minI];
- pgnoNew[minI] = t;
- apNew[minI] = pT;
- }
- }
-
- /*
- ** Evenly distribute the data in apCell[] across the new pages.
- ** Insert divider cells into pParent as necessary.
- */
- j = 0;
- for(i=0; i<nNew; i++){
- MemPage *pNew = apNew[i];
- while( j<cntNew[i] ){
- assert( pNew->nFree>=szCell[j] );
- if( pCur && iCur==j ){ pCur->pPage = pNew; pCur->idx = pNew->nCell; }
- insertCell(pBt, pNew, pNew->nCell, apCell[j], szCell[j]);
- j++;
- }
- assert( pNew->nCell>0 );
- assert( !pNew->isOverfull );
- relinkCellList(pBt, pNew);
- if( i<nNew-1 && j<nCell ){
- pNew->u.hdr.rightChild = apCell[j]->h.leftChild;
- apCell[j]->h.leftChild = SWAB32(pBt, pgnoNew[i]);
- if( pCur && iCur==j ){ pCur->pPage = pParent; pCur->idx = nxDiv; }
- insertCell(pBt, pParent, nxDiv, apCell[j], szCell[j]);
- j++;
- nxDiv++;
- }
- }
- assert( j==nCell );
- apNew[nNew-1]->u.hdr.rightChild = aOld[nOld-1].u.hdr.rightChild;
- if( nxDiv==pParent->nCell ){
- pParent->u.hdr.rightChild = SWAB32(pBt, pgnoNew[nNew-1]);
- }else{
- pParent->apCell[nxDiv]->h.leftChild = SWAB32(pBt, pgnoNew[nNew-1]);
- }
- if( pCur ){
- if( j<=iCur && pCur->pPage==pParent && pCur->idx>idxDiv[nOld-1] ){
- assert( pCur->pPage==pOldCurPage );
- pCur->idx += nNew - nOld;
- }else{
- assert( pOldCurPage!=0 );
- sqlitepager_ref(pCur->pPage);
- sqlitepager_unref(pOldCurPage);
- }
- }
-
- /*
- ** Reparent children of all cells.
- */
- for(i=0; i<nNew; i++){
- reparentChildPages(pBt, apNew[i]);
- }
- reparentChildPages(pBt, pParent);
-
- /*
- ** balance the parent page.
- */
- rc = balance(pBt, pParent, pCur);
-
- /*
- ** Cleanup before returning.
- */
-balance_cleanup:
- if( extraUnref ){
- sqlitepager_unref(extraUnref);
- }
- for(i=0; i<nOld; i++){
- if( apOld[i]!=0 && apOld[i]!=&aOld[i] ) sqlitepager_unref(apOld[i]);
- }
- for(i=0; i<nNew; i++){
- sqlitepager_unref(apNew[i]);
- }
- if( pCur && pCur->pPage==0 ){
- pCur->pPage = pParent;
- pCur->idx = 0;
- }else{
- sqlitepager_unref(pParent);
- }
- return rc;
-}
-
-/*
-** This routine checks all cursors that point to the same table
-** as pCur points to. If any of those cursors were opened with
-** wrFlag==0 then this routine returns SQLITE_LOCKED. If all
-** cursors point to the same table were opened with wrFlag==1
-** then this routine returns SQLITE_OK.
-**
-** In addition to checking for read-locks (where a read-lock
-** means a cursor opened with wrFlag==0) this routine also moves
-** all cursors other than pCur so that they are pointing to the
-** first Cell on root page. This is necessary because an insert
-** or delete might change the number of cells on a page or delete
-** a page entirely and we do not want to leave any cursors
-** pointing to non-existant pages or cells.
-*/
-static int checkReadLocks(BtCursor *pCur){
- BtCursor *p;
- assert( pCur->wrFlag );
- for(p=pCur->pShared; p!=pCur; p=p->pShared){
- assert( p );
- assert( p->pgnoRoot==pCur->pgnoRoot );
- if( p->wrFlag==0 ) return SQLITE_LOCKED;
- if( sqlitepager_pagenumber(p->pPage)!=p->pgnoRoot ){
- moveToRoot(p);
- }
- }
- return SQLITE_OK;
-}
-
-/*
-** Insert a new record into the BTree. The key is given by (pKey,nKey)
-** and the data is given by (pData,nData). The cursor is used only to
-** define what database the record should be inserted into. The cursor
-** is left pointing at the new record.
-*/
-static int fileBtreeInsert(
- BtCursor *pCur, /* Insert data into the table of this cursor */
- const void *pKey, int nKey, /* The key of the new record */
- const void *pData, int nData /* The data of the new record */
-){
- Cell newCell;
- int rc;
- int loc;
- int szNew;
- MemPage *pPage;
- Btree *pBt = pCur->pBt;
-
- if( pCur->pPage==0 ){
- return SQLITE_ABORT; /* A rollback destroyed this cursor */
- }
- if( !pBt->inTrans || nKey+nData==0 ){
- /* Must start a transaction before doing an insert */
- return pBt->readOnly ? SQLITE_READONLY : SQLITE_ERROR;
- }
- assert( !pBt->readOnly );
- if( !pCur->wrFlag ){
- return SQLITE_PERM; /* Cursor not open for writing */
- }
- if( checkReadLocks(pCur) ){
- return SQLITE_LOCKED; /* The table pCur points to has a read lock */
- }
- rc = fileBtreeMoveto(pCur, pKey, nKey, &loc);
- if( rc ) return rc;
- pPage = pCur->pPage;
- assert( pPage->isInit );
- rc = sqlitepager_write(pPage);
- if( rc ) return rc;
- rc = fillInCell(pBt, &newCell, pKey, nKey, pData, nData);
- if( rc ) return rc;
- szNew = cellSize(pBt, &newCell);
- if( loc==0 ){
- newCell.h.leftChild = pPage->apCell[pCur->idx]->h.leftChild;
- rc = clearCell(pBt, pPage->apCell[pCur->idx]);
- if( rc ) return rc;
- dropCell(pBt, pPage, pCur->idx, cellSize(pBt, pPage->apCell[pCur->idx]));
- }else if( loc<0 && pPage->nCell>0 ){
- assert( pPage->u.hdr.rightChild==0 ); /* Must be a leaf page */
- pCur->idx++;
- }else{
- assert( pPage->u.hdr.rightChild==0 ); /* Must be a leaf page */
- }
- insertCell(pBt, pPage, pCur->idx, &newCell, szNew);
- rc = balance(pCur->pBt, pPage, pCur);
- /* sqliteBtreePageDump(pCur->pBt, pCur->pgnoRoot, 1); */
- /* fflush(stdout); */
- pCur->eSkip = SKIP_INVALID;
- return rc;
-}
-
-/*
-** Delete the entry that the cursor is pointing to.
-**
-** The cursor is left pointing at either the next or the previous
-** entry. If the cursor is left pointing to the next entry, then
-** the pCur->eSkip flag is set to SKIP_NEXT which forces the next call to
-** sqliteBtreeNext() to be a no-op. That way, you can always call
-** sqliteBtreeNext() after a delete and the cursor will be left
-** pointing to the first entry after the deleted entry. Similarly,
-** pCur->eSkip is set to SKIP_PREV is the cursor is left pointing to
-** the entry prior to the deleted entry so that a subsequent call to
-** sqliteBtreePrevious() will always leave the cursor pointing at the
-** entry immediately before the one that was deleted.
-*/
-static int fileBtreeDelete(BtCursor *pCur){
- MemPage *pPage = pCur->pPage;
- Cell *pCell;
- int rc;
- Pgno pgnoChild;
- Btree *pBt = pCur->pBt;
-
- assert( pPage->isInit );
- if( pCur->pPage==0 ){
- return SQLITE_ABORT; /* A rollback destroyed this cursor */
- }
- if( !pBt->inTrans ){
- /* Must start a transaction before doing a delete */
- return pBt->readOnly ? SQLITE_READONLY : SQLITE_ERROR;
- }
- assert( !pBt->readOnly );
- if( pCur->idx >= pPage->nCell ){
- return SQLITE_ERROR; /* The cursor is not pointing to anything */
- }
- if( !pCur->wrFlag ){
- return SQLITE_PERM; /* Did not open this cursor for writing */
- }
- if( checkReadLocks(pCur) ){
- return SQLITE_LOCKED; /* The table pCur points to has a read lock */
- }
- rc = sqlitepager_write(pPage);
- if( rc ) return rc;
- pCell = pPage->apCell[pCur->idx];
- pgnoChild = SWAB32(pBt, pCell->h.leftChild);
- clearCell(pBt, pCell);
- if( pgnoChild ){
- /*
- ** The entry we are about to delete is not a leaf so if we do not
- ** do something we will leave a hole on an internal page.
- ** We have to fill the hole by moving in a cell from a leaf. The
- ** next Cell after the one to be deleted is guaranteed to exist and
- ** to be a leaf so we can use it.
- */
- BtCursor leafCur;
- Cell *pNext;
- int szNext;
- int notUsed;
- getTempCursor(pCur, &leafCur);
- rc = fileBtreeNext(&leafCur, &notUsed);
- if( rc!=SQLITE_OK ){
- if( rc!=SQLITE_NOMEM ) rc = SQLITE_CORRUPT;
- return rc;
- }
- rc = sqlitepager_write(leafCur.pPage);
- if( rc ) return rc;
- dropCell(pBt, pPage, pCur->idx, cellSize(pBt, pCell));
- pNext = leafCur.pPage->apCell[leafCur.idx];
- szNext = cellSize(pBt, pNext);
- pNext->h.leftChild = SWAB32(pBt, pgnoChild);
- insertCell(pBt, pPage, pCur->idx, pNext, szNext);
- rc = balance(pBt, pPage, pCur);
- if( rc ) return rc;
- pCur->eSkip = SKIP_NEXT;
- dropCell(pBt, leafCur.pPage, leafCur.idx, szNext);
- rc = balance(pBt, leafCur.pPage, pCur);
- releaseTempCursor(&leafCur);
- }else{
- dropCell(pBt, pPage, pCur->idx, cellSize(pBt, pCell));
- if( pCur->idx>=pPage->nCell ){
- pCur->idx = pPage->nCell-1;
- if( pCur->idx<0 ){
- pCur->idx = 0;
- pCur->eSkip = SKIP_NEXT;
- }else{
- pCur->eSkip = SKIP_PREV;
- }
- }else{
- pCur->eSkip = SKIP_NEXT;
- }
- rc = balance(pBt, pPage, pCur);
- }
- return rc;
-}
-
-/*
-** Create a new BTree table. Write into *piTable the page
-** number for the root page of the new table.
-**
-** In the current implementation, BTree tables and BTree indices are the
-** the same. In the future, we may change this so that BTree tables
-** are restricted to having a 4-byte integer key and arbitrary data and
-** BTree indices are restricted to having an arbitrary key and no data.
-** But for now, this routine also serves to create indices.
-*/
-static int fileBtreeCreateTable(Btree *pBt, int *piTable){
- MemPage *pRoot;
- Pgno pgnoRoot;
- int rc;
- if( !pBt->inTrans ){
- /* Must start a transaction first */
- return pBt->readOnly ? SQLITE_READONLY : SQLITE_ERROR;
- }
- if( pBt->readOnly ){
- return SQLITE_READONLY;
- }
- rc = allocatePage(pBt, &pRoot, &pgnoRoot, 0);
- if( rc ) return rc;
- assert( sqlitepager_iswriteable(pRoot) );
- zeroPage(pBt, pRoot);
- sqlitepager_unref(pRoot);
- *piTable = (int)pgnoRoot;
- return SQLITE_OK;
-}
-
-/*
-** Erase the given database page and all its children. Return
-** the page to the freelist.
-*/
-static int clearDatabasePage(Btree *pBt, Pgno pgno, int freePageFlag){
- MemPage *pPage;
- int rc;
- Cell *pCell;
- int idx;
-
- rc = sqlitepager_get(pBt->pPager, pgno, (void**)&pPage);
- if( rc ) return rc;
- rc = sqlitepager_write(pPage);
- if( rc ) return rc;
- rc = initPage(pBt, pPage, pgno, 0);
- if( rc ) return rc;
- idx = SWAB16(pBt, pPage->u.hdr.firstCell);
- while( idx>0 ){
- pCell = (Cell*)&pPage->u.aDisk[idx];
- idx = SWAB16(pBt, pCell->h.iNext);
- if( pCell->h.leftChild ){
- rc = clearDatabasePage(pBt, SWAB32(pBt, pCell->h.leftChild), 1);
- if( rc ) return rc;
- }
- rc = clearCell(pBt, pCell);
- if( rc ) return rc;
- }
- if( pPage->u.hdr.rightChild ){
- rc = clearDatabasePage(pBt, SWAB32(pBt, pPage->u.hdr.rightChild), 1);
- if( rc ) return rc;
- }
- if( freePageFlag ){
- rc = freePage(pBt, pPage, pgno);
- }else{
- zeroPage(pBt, pPage);
- }
- sqlitepager_unref(pPage);
- return rc;
-}
-
-/*
-** Delete all information from a single table in the database.
-*/
-static int fileBtreeClearTable(Btree *pBt, int iTable){
- int rc;
- BtCursor *pCur;
- if( !pBt->inTrans ){
- return pBt->readOnly ? SQLITE_READONLY : SQLITE_ERROR;
- }
- for(pCur=pBt->pCursor; pCur; pCur=pCur->pNext){
- if( pCur->pgnoRoot==(Pgno)iTable ){
- if( pCur->wrFlag==0 ) return SQLITE_LOCKED;
- moveToRoot(pCur);
- }
- }
- rc = clearDatabasePage(pBt, (Pgno)iTable, 0);
- if( rc ){
- fileBtreeRollback(pBt);
- }
- return rc;
-}
-
-/*
-** Erase all information in a table and add the root of the table to
-** the freelist. Except, the root of the principle table (the one on
-** page 2) is never added to the freelist.
-*/
-static int fileBtreeDropTable(Btree *pBt, int iTable){
- int rc;
- MemPage *pPage;
- BtCursor *pCur;
- if( !pBt->inTrans ){
- return pBt->readOnly ? SQLITE_READONLY : SQLITE_ERROR;
- }
- for(pCur=pBt->pCursor; pCur; pCur=pCur->pNext){
- if( pCur->pgnoRoot==(Pgno)iTable ){
- return SQLITE_LOCKED; /* Cannot drop a table that has a cursor */
- }
- }
- rc = sqlitepager_get(pBt->pPager, (Pgno)iTable, (void**)&pPage);
- if( rc ) return rc;
- rc = fileBtreeClearTable(pBt, iTable);
- if( rc ) return rc;
- if( iTable>2 ){
- rc = freePage(pBt, pPage, iTable);
- }else{
- zeroPage(pBt, pPage);
- }
- sqlitepager_unref(pPage);
- return rc;
-}
-
-#if 0 /* UNTESTED */
-/*
-** Copy all cell data from one database file into another.
-** pages back the freelist.
-*/
-static int copyCell(Btree *pBtFrom, BTree *pBtTo, Cell *pCell){
- Pager *pFromPager = pBtFrom->pPager;
- OverflowPage *pOvfl;
- Pgno ovfl, nextOvfl;
- Pgno *pPrev;
- int rc = SQLITE_OK;
- MemPage *pNew, *pPrevPg;
- Pgno new;
-
- if( NKEY(pBtTo, pCell->h) + NDATA(pBtTo, pCell->h) <= MX_LOCAL_PAYLOAD ){
- return SQLITE_OK;
- }
- pPrev = &pCell->ovfl;
- pPrevPg = 0;
- ovfl = SWAB32(pBtTo, pCell->ovfl);
- while( ovfl && rc==SQLITE_OK ){
- rc = sqlitepager_get(pFromPager, ovfl, (void**)&pOvfl);
- if( rc ) return rc;
- nextOvfl = SWAB32(pBtFrom, pOvfl->iNext);
- rc = allocatePage(pBtTo, &pNew, &new, 0);
- if( rc==SQLITE_OK ){
- rc = sqlitepager_write(pNew);
- if( rc==SQLITE_OK ){
- memcpy(pNew, pOvfl, SQLITE_USABLE_SIZE);
- *pPrev = SWAB32(pBtTo, new);
- if( pPrevPg ){
- sqlitepager_unref(pPrevPg);
- }
- pPrev = &pOvfl->iNext;
- pPrevPg = pNew;
- }
- }
- sqlitepager_unref(pOvfl);
- ovfl = nextOvfl;
- }
- if( pPrevPg ){
- sqlitepager_unref(pPrevPg);
- }
- return rc;
-}
-#endif
-
-
-#if 0 /* UNTESTED */
-/*
-** Copy a page of data from one database over to another.
-*/
-static int copyDatabasePage(
- Btree *pBtFrom,
- Pgno pgnoFrom,
- Btree *pBtTo,
- Pgno *pTo
-){
- MemPage *pPageFrom, *pPage;
- Pgno to;
- int rc;
- Cell *pCell;
- int idx;
-
- rc = sqlitepager_get(pBtFrom->pPager, pgno, (void**)&pPageFrom);
- if( rc ) return rc;
- rc = allocatePage(pBt, &pPage, pTo, 0);
- if( rc==SQLITE_OK ){
- rc = sqlitepager_write(pPage);
- }
- if( rc==SQLITE_OK ){
- memcpy(pPage, pPageFrom, SQLITE_USABLE_SIZE);
- idx = SWAB16(pBt, pPage->u.hdr.firstCell);
- while( idx>0 ){
- pCell = (Cell*)&pPage->u.aDisk[idx];
- idx = SWAB16(pBt, pCell->h.iNext);
- if( pCell->h.leftChild ){
- Pgno newChld;
- rc = copyDatabasePage(pBtFrom, SWAB32(pBtFrom, pCell->h.leftChild),
- pBtTo, &newChld);
- if( rc ) return rc;
- pCell->h.leftChild = SWAB32(pBtFrom, newChld);
- }
- rc = copyCell(pBtFrom, pBtTo, pCell);
- if( rc ) return rc;
- }
- if( pPage->u.hdr.rightChild ){
- Pgno newChld;
- rc = copyDatabasePage(pBtFrom, SWAB32(pBtFrom, pPage->u.hdr.rightChild),
- pBtTo, &newChld);
- if( rc ) return rc;
- pPage->u.hdr.rightChild = SWAB32(pBtTo, newChild);
- }
- }
- sqlitepager_unref(pPage);
- return rc;
-}
-#endif
-
-/*
-** Read the meta-information out of a database file.
-*/
-static int fileBtreeGetMeta(Btree *pBt, int *aMeta){
- PageOne *pP1;
- int rc;
- int i;
-
- rc = sqlitepager_get(pBt->pPager, 1, (void**)&pP1);
- if( rc ) return rc;
- aMeta[0] = SWAB32(pBt, pP1->nFree);
- for(i=0; i<sizeof(pP1->aMeta)/sizeof(pP1->aMeta[0]); i++){
- aMeta[i+1] = SWAB32(pBt, pP1->aMeta[i]);
- }
- sqlitepager_unref(pP1);
- return SQLITE_OK;
-}
-
-/*
-** Write meta-information back into the database.
-*/
-static int fileBtreeUpdateMeta(Btree *pBt, int *aMeta){
- PageOne *pP1;
- int rc, i;
- if( !pBt->inTrans ){
- return pBt->readOnly ? SQLITE_READONLY : SQLITE_ERROR;
- }
- pP1 = pBt->page1;
- rc = sqlitepager_write(pP1);
- if( rc ) return rc;
- for(i=0; i<sizeof(pP1->aMeta)/sizeof(pP1->aMeta[0]); i++){
- pP1->aMeta[i] = SWAB32(pBt, aMeta[i+1]);
- }
- return SQLITE_OK;
-}
-
-/******************************************************************************
-** The complete implementation of the BTree subsystem is above this line.
-** All the code the follows is for testing and troubleshooting the BTree
-** subsystem. None of the code that follows is used during normal operation.
-******************************************************************************/
-
-/*
-** Print a disassembly of the given page on standard output. This routine
-** is used for debugging and testing only.
-*/
-#ifdef SQLITE_TEST
-static int fileBtreePageDump(Btree *pBt, int pgno, int recursive){
- int rc;
- MemPage *pPage;
- int i, j;
- int nFree;
- u16 idx;
- char range[20];
- unsigned char payload[20];
- rc = sqlitepager_get(pBt->pPager, (Pgno)pgno, (void**)&pPage);
- if( rc ){
- return rc;
- }
- if( recursive ) printf("PAGE %d:\n", pgno);
- i = 0;
- idx = SWAB16(pBt, pPage->u.hdr.firstCell);
- while( idx>0 && idx<=SQLITE_USABLE_SIZE-MIN_CELL_SIZE ){
- Cell *pCell = (Cell*)&pPage->u.aDisk[idx];
- int sz = cellSize(pBt, pCell);
- sprintf(range,"%d..%d", idx, idx+sz-1);
- sz = NKEY(pBt, pCell->h) + NDATA(pBt, pCell->h);
- if( sz>sizeof(payload)-1 ) sz = sizeof(payload)-1;
- memcpy(payload, pCell->aPayload, sz);
- for(j=0; j<sz; j++){
- if( payload[j]<0x20 || payload[j]>0x7f ) payload[j] = '.';
- }
- payload[sz] = 0;
- printf(
- "cell %2d: i=%-10s chld=%-4d nk=%-4d nd=%-4d payload=%s\n",
- i, range, (int)pCell->h.leftChild,
- NKEY(pBt, pCell->h), NDATA(pBt, pCell->h),
- payload
- );
- if( pPage->isInit && pPage->apCell[i]!=pCell ){
- printf("**** apCell[%d] does not match on prior entry ****\n", i);
- }
- i++;
- idx = SWAB16(pBt, pCell->h.iNext);
- }
- if( idx!=0 ){
- printf("ERROR: next cell index out of range: %d\n", idx);
- }
- printf("right_child: %d\n", SWAB32(pBt, pPage->u.hdr.rightChild));
- nFree = 0;
- i = 0;
- idx = SWAB16(pBt, pPage->u.hdr.firstFree);
- while( idx>0 && idx<SQLITE_USABLE_SIZE ){
- FreeBlk *p = (FreeBlk*)&pPage->u.aDisk[idx];
- sprintf(range,"%d..%d", idx, idx+p->iSize-1);
- nFree += SWAB16(pBt, p->iSize);
- printf("freeblock %2d: i=%-10s size=%-4d total=%d\n",
- i, range, SWAB16(pBt, p->iSize), nFree);
- idx = SWAB16(pBt, p->iNext);
- i++;
- }
- if( idx!=0 ){
- printf("ERROR: next freeblock index out of range: %d\n", idx);
- }
- if( recursive && pPage->u.hdr.rightChild!=0 ){
- idx = SWAB16(pBt, pPage->u.hdr.firstCell);
- while( idx>0 && idx<SQLITE_USABLE_SIZE-MIN_CELL_SIZE ){
- Cell *pCell = (Cell*)&pPage->u.aDisk[idx];
- fileBtreePageDump(pBt, SWAB32(pBt, pCell->h.leftChild), 1);
- idx = SWAB16(pBt, pCell->h.iNext);
- }
- fileBtreePageDump(pBt, SWAB32(pBt, pPage->u.hdr.rightChild), 1);
- }
- sqlitepager_unref(pPage);
- return SQLITE_OK;
-}
-#endif
-
-#ifdef SQLITE_TEST
-/*
-** Fill aResult[] with information about the entry and page that the
-** cursor is pointing to.
-**
-** aResult[0] = The page number
-** aResult[1] = The entry number
-** aResult[2] = Total number of entries on this page
-** aResult[3] = Size of this entry
-** aResult[4] = Number of free bytes on this page
-** aResult[5] = Number of free blocks on the page
-** aResult[6] = Page number of the left child of this entry
-** aResult[7] = Page number of the right child for the whole page
-**
-** This routine is used for testing and debugging only.
-*/
-static int fileBtreeCursorDump(BtCursor *pCur, int *aResult){
- int cnt, idx;
- MemPage *pPage = pCur->pPage;
- Btree *pBt = pCur->pBt;
- aResult[0] = sqlitepager_pagenumber(pPage);
- aResult[1] = pCur->idx;
- aResult[2] = pPage->nCell;
- if( pCur->idx>=0 && pCur->idx<pPage->nCell ){
- aResult[3] = cellSize(pBt, pPage->apCell[pCur->idx]);
- aResult[6] = SWAB32(pBt, pPage->apCell[pCur->idx]->h.leftChild);
- }else{
- aResult[3] = 0;
- aResult[6] = 0;
- }
- aResult[4] = pPage->nFree;
- cnt = 0;
- idx = SWAB16(pBt, pPage->u.hdr.firstFree);
- while( idx>0 && idx<SQLITE_USABLE_SIZE ){
- cnt++;
- idx = SWAB16(pBt, ((FreeBlk*)&pPage->u.aDisk[idx])->iNext);
- }
- aResult[5] = cnt;
- aResult[7] = SWAB32(pBt, pPage->u.hdr.rightChild);
- return SQLITE_OK;
-}
-#endif
-
-/*
-** Return the pager associated with a BTree. This routine is used for
-** testing and debugging only.
-*/
-static Pager *fileBtreePager(Btree *pBt){
- return pBt->pPager;
-}
-
-/*
-** This structure is passed around through all the sanity checking routines
-** in order to keep track of some global state information.
-*/
-typedef struct IntegrityCk IntegrityCk;
-struct IntegrityCk {
- Btree *pBt; /* The tree being checked out */
- Pager *pPager; /* The associated pager. Also accessible by pBt->pPager */
- int nPage; /* Number of pages in the database */
- int *anRef; /* Number of times each page is referenced */
- char *zErrMsg; /* An error message. NULL of no errors seen. */
-};
-
-/*
-** Append a message to the error message string.
-*/
-static void checkAppendMsg(IntegrityCk *pCheck, char *zMsg1, char *zMsg2){
- if( pCheck->zErrMsg ){
- char *zOld = pCheck->zErrMsg;
- pCheck->zErrMsg = 0;
- sqliteSetString(&pCheck->zErrMsg, zOld, "\n", zMsg1, zMsg2, (char*)0);
- sqliteFree(zOld);
- }else{
- sqliteSetString(&pCheck->zErrMsg, zMsg1, zMsg2, (char*)0);
- }
-}
-
-/*
-** Add 1 to the reference count for page iPage. If this is the second
-** reference to the page, add an error message to pCheck->zErrMsg.
-** Return 1 if there are 2 ore more references to the page and 0 if
-** if this is the first reference to the page.
-**
-** Also check that the page number is in bounds.
-*/
-static int checkRef(IntegrityCk *pCheck, int iPage, char *zContext){
- if( iPage==0 ) return 1;
- if( iPage>pCheck->nPage || iPage<0 ){
- char zBuf[100];
- sprintf(zBuf, "invalid page number %d", iPage);
- checkAppendMsg(pCheck, zContext, zBuf);
- return 1;
- }
- if( pCheck->anRef[iPage]==1 ){
- char zBuf[100];
- sprintf(zBuf, "2nd reference to page %d", iPage);
- checkAppendMsg(pCheck, zContext, zBuf);
- return 1;
- }
- return (pCheck->anRef[iPage]++)>1;
-}
-
-/*
-** Check the integrity of the freelist or of an overflow page list.
-** Verify that the number of pages on the list is N.
-*/
-static void checkList(
- IntegrityCk *pCheck, /* Integrity checking context */
- int isFreeList, /* True for a freelist. False for overflow page list */
- int iPage, /* Page number for first page in the list */
- int N, /* Expected number of pages in the list */
- char *zContext /* Context for error messages */
-){
- int i;
- char zMsg[100];
- while( N-- > 0 ){
- OverflowPage *pOvfl;
- if( iPage<1 ){
- sprintf(zMsg, "%d pages missing from overflow list", N+1);
- checkAppendMsg(pCheck, zContext, zMsg);
- break;
- }
- if( checkRef(pCheck, iPage, zContext) ) break;
- if( sqlitepager_get(pCheck->pPager, (Pgno)iPage, (void**)&pOvfl) ){
- sprintf(zMsg, "failed to get page %d", iPage);
- checkAppendMsg(pCheck, zContext, zMsg);
- break;
- }
- if( isFreeList ){
- FreelistInfo *pInfo = (FreelistInfo*)pOvfl->aPayload;
- int n = SWAB32(pCheck->pBt, pInfo->nFree);
- for(i=0; i<n; i++){
- checkRef(pCheck, SWAB32(pCheck->pBt, pInfo->aFree[i]), zContext);
- }
- N -= n;
- }
- iPage = SWAB32(pCheck->pBt, pOvfl->iNext);
- sqlitepager_unref(pOvfl);
- }
-}
-
-/*
-** Return negative if zKey1<zKey2.
-** Return zero if zKey1==zKey2.
-** Return positive if zKey1>zKey2.
-*/
-static int keyCompare(
- const char *zKey1, int nKey1,
- const char *zKey2, int nKey2
-){
- int min = nKey1>nKey2 ? nKey2 : nKey1;
- int c = memcmp(zKey1, zKey2, min);
- if( c==0 ){
- c = nKey1 - nKey2;
- }
- return c;
-}
-
-/*
-** Do various sanity checks on a single page of a tree. Return
-** the tree depth. Root pages return 0. Parents of root pages
-** return 1, and so forth.
-**
-** These checks are done:
-**
-** 1. Make sure that cells and freeblocks do not overlap
-** but combine to completely cover the page.
-** 2. Make sure cell keys are in order.
-** 3. Make sure no key is less than or equal to zLowerBound.
-** 4. Make sure no key is greater than or equal to zUpperBound.
-** 5. Check the integrity of overflow pages.
-** 6. Recursively call checkTreePage on all children.
-** 7. Verify that the depth of all children is the same.
-** 8. Make sure this page is at least 33% full or else it is
-** the root of the tree.
-*/
-static int checkTreePage(
- IntegrityCk *pCheck, /* Context for the sanity check */
- int iPage, /* Page number of the page to check */
- MemPage *pParent, /* Parent page */
- char *zParentContext, /* Parent context */
- char *zLowerBound, /* All keys should be greater than this, if not NULL */
- int nLower, /* Number of characters in zLowerBound */
- char *zUpperBound, /* All keys should be less than this, if not NULL */
- int nUpper /* Number of characters in zUpperBound */
-){
- MemPage *pPage;
- int i, rc, depth, d2, pgno;
- char *zKey1, *zKey2;
- int nKey1, nKey2;
- BtCursor cur;
- Btree *pBt;
- char zMsg[100];
- char zContext[100];
- char hit[SQLITE_USABLE_SIZE];
-
- /* Check that the page exists
- */
- cur.pBt = pBt = pCheck->pBt;
- if( iPage==0 ) return 0;
- if( checkRef(pCheck, iPage, zParentContext) ) return 0;
- sprintf(zContext, "On tree page %d: ", iPage);
- if( (rc = sqlitepager_get(pCheck->pPager, (Pgno)iPage, (void**)&pPage))!=0 ){
- sprintf(zMsg, "unable to get the page. error code=%d", rc);
- checkAppendMsg(pCheck, zContext, zMsg);
- return 0;
- }
- if( (rc = initPage(pBt, pPage, (Pgno)iPage, pParent))!=0 ){
- sprintf(zMsg, "initPage() returns error code %d", rc);
- checkAppendMsg(pCheck, zContext, zMsg);
- sqlitepager_unref(pPage);
- return 0;
- }
-
- /* Check out all the cells.
- */
- depth = 0;
- if( zLowerBound ){
- zKey1 = sqliteMalloc( nLower+1 );
- memcpy(zKey1, zLowerBound, nLower);
- zKey1[nLower] = 0;
- }else{
- zKey1 = 0;
- }
- nKey1 = nLower;
- cur.pPage = pPage;
- for(i=0; i<pPage->nCell; i++){
- Cell *pCell = pPage->apCell[i];
- int sz;
-
- /* Check payload overflow pages
- */
- nKey2 = NKEY(pBt, pCell->h);
- sz = nKey2 + NDATA(pBt, pCell->h);
- sprintf(zContext, "On page %d cell %d: ", iPage, i);
- if( sz>MX_LOCAL_PAYLOAD ){
- int nPage = (sz - MX_LOCAL_PAYLOAD + OVERFLOW_SIZE - 1)/OVERFLOW_SIZE;
- checkList(pCheck, 0, SWAB32(pBt, pCell->ovfl), nPage, zContext);
- }
-
- /* Check that keys are in the right order
- */
- cur.idx = i;
- zKey2 = sqliteMallocRaw( nKey2+1 );
- getPayload(&cur, 0, nKey2, zKey2);
- if( zKey1 && keyCompare(zKey1, nKey1, zKey2, nKey2)>=0 ){
- checkAppendMsg(pCheck, zContext, "Key is out of order");
- }
-
- /* Check sanity of left child page.
- */
- pgno = SWAB32(pBt, pCell->h.leftChild);
- d2 = checkTreePage(pCheck, pgno, pPage, zContext, zKey1,nKey1,zKey2,nKey2);
- if( i>0 && d2!=depth ){
- checkAppendMsg(pCheck, zContext, "Child page depth differs");
- }
- depth = d2;
- sqliteFree(zKey1);
- zKey1 = zKey2;
- nKey1 = nKey2;
- }
- pgno = SWAB32(pBt, pPage->u.hdr.rightChild);
- sprintf(zContext, "On page %d at right child: ", iPage);
- checkTreePage(pCheck, pgno, pPage, zContext, zKey1,nKey1,zUpperBound,nUpper);
- sqliteFree(zKey1);
-
- /* Check for complete coverage of the page
- */
- memset(hit, 0, sizeof(hit));
- memset(hit, 1, sizeof(PageHdr));
- for(i=SWAB16(pBt, pPage->u.hdr.firstCell); i>0 && i<SQLITE_USABLE_SIZE; ){
- Cell *pCell = (Cell*)&pPage->u.aDisk[i];
- int j;
- for(j=i+cellSize(pBt, pCell)-1; j>=i; j--) hit[j]++;
- i = SWAB16(pBt, pCell->h.iNext);
- }
- for(i=SWAB16(pBt,pPage->u.hdr.firstFree); i>0 && i<SQLITE_USABLE_SIZE; ){
- FreeBlk *pFBlk = (FreeBlk*)&pPage->u.aDisk[i];
- int j;
- for(j=i+SWAB16(pBt,pFBlk->iSize)-1; j>=i; j--) hit[j]++;
- i = SWAB16(pBt,pFBlk->iNext);
- }
- for(i=0; i<SQLITE_USABLE_SIZE; i++){
- if( hit[i]==0 ){
- sprintf(zMsg, "Unused space at byte %d of page %d", i, iPage);
- checkAppendMsg(pCheck, zMsg, 0);
- break;
- }else if( hit[i]>1 ){
- sprintf(zMsg, "Multiple uses for byte %d of page %d", i, iPage);
- checkAppendMsg(pCheck, zMsg, 0);
- break;
- }
- }
-
- /* Check that free space is kept to a minimum
- */
-#if 0
- if( pParent && pParent->nCell>2 && pPage->nFree>3*SQLITE_USABLE_SIZE/4 ){
- sprintf(zMsg, "free space (%d) greater than max (%d)", pPage->nFree,
- SQLITE_USABLE_SIZE/3);
- checkAppendMsg(pCheck, zContext, zMsg);
- }
-#endif
-
- sqlitepager_unref(pPage);
- return depth;
-}
-
-/*
-** This routine does a complete check of the given BTree file. aRoot[] is
-** an array of pages numbers were each page number is the root page of
-** a table. nRoot is the number of entries in aRoot.
-**
-** If everything checks out, this routine returns NULL. If something is
-** amiss, an error message is written into memory obtained from malloc()
-** and a pointer to that error message is returned. The calling function
-** is responsible for freeing the error message when it is done.
-*/
-char *fileBtreeIntegrityCheck(Btree *pBt, int *aRoot, int nRoot){
- int i;
- int nRef;
- IntegrityCk sCheck;
-
- nRef = *sqlitepager_stats(pBt->pPager);
- if( lockBtree(pBt)!=SQLITE_OK ){
- return sqliteStrDup("Unable to acquire a read lock on the database");
- }
- sCheck.pBt = pBt;
- sCheck.pPager = pBt->pPager;
- sCheck.nPage = sqlitepager_pagecount(sCheck.pPager);
- if( sCheck.nPage==0 ){
- unlockBtreeIfUnused(pBt);
- return 0;
- }
- sCheck.anRef = sqliteMallocRaw( (sCheck.nPage+1)*sizeof(sCheck.anRef[0]) );
- sCheck.anRef[1] = 1;
- for(i=2; i<=sCheck.nPage; i++){ sCheck.anRef[i] = 0; }
- sCheck.zErrMsg = 0;
-
- /* Check the integrity of the freelist
- */
- checkList(&sCheck, 1, SWAB32(pBt, pBt->page1->freeList),
- SWAB32(pBt, pBt->page1->nFree), "Main freelist: ");
-
- /* Check all the tables.
- */
- for(i=0; i<nRoot; i++){
- if( aRoot[i]==0 ) continue;
- checkTreePage(&sCheck, aRoot[i], 0, "List of tree roots: ", 0,0,0,0);
- }
-
- /* Make sure every page in the file is referenced
- */
- for(i=1; i<=sCheck.nPage; i++){
- if( sCheck.anRef[i]==0 ){
- char zBuf[100];
- sprintf(zBuf, "Page %d is never used", i);
- checkAppendMsg(&sCheck, zBuf, 0);
- }
- }
-
- /* Make sure this analysis did not leave any unref() pages
- */
- unlockBtreeIfUnused(pBt);
- if( nRef != *sqlitepager_stats(pBt->pPager) ){
- char zBuf[100];
- sprintf(zBuf,
- "Outstanding page count goes from %d to %d during this analysis",
- nRef, *sqlitepager_stats(pBt->pPager)
- );
- checkAppendMsg(&sCheck, zBuf, 0);
- }
-
- /* Clean up and report errors.
- */
- sqliteFree(sCheck.anRef);
- return sCheck.zErrMsg;
-}
-
-/*
-** Return the full pathname of the underlying database file.
-*/
-static const char *fileBtreeGetFilename(Btree *pBt){
- assert( pBt->pPager!=0 );
- return sqlitepager_filename(pBt->pPager);
-}
-
-/*
-** Copy the complete content of pBtFrom into pBtTo. A transaction
-** must be active for both files.
-**
-** The size of file pBtFrom may be reduced by this operation.
-** If anything goes wrong, the transaction on pBtFrom is rolled back.
-*/
-static int fileBtreeCopyFile(Btree *pBtTo, Btree *pBtFrom){
- int rc = SQLITE_OK;
- Pgno i, nPage, nToPage;
-
- if( !pBtTo->inTrans || !pBtFrom->inTrans ) return SQLITE_ERROR;
- if( pBtTo->needSwab!=pBtFrom->needSwab ) return SQLITE_ERROR;
- if( pBtTo->pCursor ) return SQLITE_BUSY;
- memcpy(pBtTo->page1, pBtFrom->page1, SQLITE_USABLE_SIZE);
- rc = sqlitepager_overwrite(pBtTo->pPager, 1, pBtFrom->page1);
- nToPage = sqlitepager_pagecount(pBtTo->pPager);
- nPage = sqlitepager_pagecount(pBtFrom->pPager);
- for(i=2; rc==SQLITE_OK && i<=nPage; i++){
- void *pPage;
- rc = sqlitepager_get(pBtFrom->pPager, i, &pPage);
- if( rc ) break;
- rc = sqlitepager_overwrite(pBtTo->pPager, i, pPage);
- if( rc ) break;
- sqlitepager_unref(pPage);
- }
- for(i=nPage+1; rc==SQLITE_OK && i<=nToPage; i++){
- void *pPage;
- rc = sqlitepager_get(pBtTo->pPager, i, &pPage);
- if( rc ) break;
- rc = sqlitepager_write(pPage);
- sqlitepager_unref(pPage);
- sqlitepager_dont_write(pBtTo->pPager, i);
- }
- if( !rc && nPage<nToPage ){
- rc = sqlitepager_truncate(pBtTo->pPager, nPage);
- }
- if( rc ){
- fileBtreeRollback(pBtTo);
- }
- return rc;
-}
-
-/*
-** The following tables contain pointers to all of the interface
-** routines for this implementation of the B*Tree backend. To
-** substitute a different implemention of the backend, one has merely
-** to provide pointers to alternative functions in similar tables.
-*/
-static BtOps sqliteBtreeOps = {
- fileBtreeClose,
- fileBtreeSetCacheSize,
- fileBtreeSetSafetyLevel,
- fileBtreeBeginTrans,
- fileBtreeCommit,
- fileBtreeRollback,
- fileBtreeBeginCkpt,
- fileBtreeCommitCkpt,
- fileBtreeRollbackCkpt,
- fileBtreeCreateTable,
- fileBtreeCreateTable, /* Really sqliteBtreeCreateIndex() */
- fileBtreeDropTable,
- fileBtreeClearTable,
- fileBtreeCursor,
- fileBtreeGetMeta,
- fileBtreeUpdateMeta,
- fileBtreeIntegrityCheck,
- fileBtreeGetFilename,
- fileBtreeCopyFile,
- fileBtreePager,
-#ifdef SQLITE_TEST
- fileBtreePageDump,
-#endif
-};
-static BtCursorOps sqliteBtreeCursorOps = {
- fileBtreeMoveto,
- fileBtreeDelete,
- fileBtreeInsert,
- fileBtreeFirst,
- fileBtreeLast,
- fileBtreeNext,
- fileBtreePrevious,
- fileBtreeKeySize,
- fileBtreeKey,
- fileBtreeKeyCompare,
- fileBtreeDataSize,
- fileBtreeData,
- fileBtreeCloseCursor,
-#ifdef SQLITE_TEST
- fileBtreeCursorDump,
-#endif
-};
diff --git a/ext/sqlite/libsqlite/src/btree.h b/ext/sqlite/libsqlite/src/btree.h
deleted file mode 100644
index 8d318a3c03..0000000000
--- a/ext/sqlite/libsqlite/src/btree.h
+++ /dev/null
@@ -1,156 +0,0 @@
-/*
-** 2001 September 15
-**
-** The author disclaims copyright to this source code. In place of
-** a legal notice, here is a blessing:
-**
-** May you do good and not evil.
-** May you find forgiveness for yourself and forgive others.
-** May you share freely, never taking more than you give.
-**
-*************************************************************************
-** This header file defines the interface that the sqlite B-Tree file
-** subsystem. See comments in the source code for a detailed description
-** of what each interface routine does.
-**
-** @(#) $Id$
-*/
-#ifndef _BTREE_H_
-#define _BTREE_H_
-
-/*
-** Forward declarations of structure
-*/
-typedef struct Btree Btree;
-typedef struct BtCursor BtCursor;
-typedef struct BtOps BtOps;
-typedef struct BtCursorOps BtCursorOps;
-
-
-/*
-** An instance of the following structure contains pointers to all
-** methods against an open BTree. Alternative BTree implementations
-** (examples: file based versus in-memory) can be created by substituting
-** different methods. Users of the BTree cannot tell the difference.
-**
-** In C++ we could do this by defining a virtual base class and then
-** creating subclasses for each different implementation. But this is
-** C not C++ so we have to be a little more explicit.
-*/
-struct BtOps {
- int (*Close)(Btree*);
- int (*SetCacheSize)(Btree*, int);
- int (*SetSafetyLevel)(Btree*, int);
- int (*BeginTrans)(Btree*);
- int (*Commit)(Btree*);
- int (*Rollback)(Btree*);
- int (*BeginCkpt)(Btree*);
- int (*CommitCkpt)(Btree*);
- int (*RollbackCkpt)(Btree*);
- int (*CreateTable)(Btree*, int*);
- int (*CreateIndex)(Btree*, int*);
- int (*DropTable)(Btree*, int);
- int (*ClearTable)(Btree*, int);
- int (*Cursor)(Btree*, int iTable, int wrFlag, BtCursor **ppCur);
- int (*GetMeta)(Btree*, int*);
- int (*UpdateMeta)(Btree*, int*);
- char *(*IntegrityCheck)(Btree*, int*, int);
- const char *(*GetFilename)(Btree*);
- int (*Copyfile)(Btree*,Btree*);
- struct Pager *(*Pager)(Btree*);
-#ifdef SQLITE_TEST
- int (*PageDump)(Btree*, int, int);
-#endif
-};
-
-/*
-** An instance of this structure defines all of the methods that can
-** be executed against a cursor.
-*/
-struct BtCursorOps {
- int (*Moveto)(BtCursor*, const void *pKey, int nKey, int *pRes);
- int (*Delete)(BtCursor*);
- int (*Insert)(BtCursor*, const void *pKey, int nKey,
- const void *pData, int nData);
- int (*First)(BtCursor*, int *pRes);
- int (*Last)(BtCursor*, int *pRes);
- int (*Next)(BtCursor*, int *pRes);
- int (*Previous)(BtCursor*, int *pRes);
- int (*KeySize)(BtCursor*, int *pSize);
- int (*Key)(BtCursor*, int offset, int amt, char *zBuf);
- int (*KeyCompare)(BtCursor*, const void *pKey, int nKey,
- int nIgnore, int *pRes);
- int (*DataSize)(BtCursor*, int *pSize);
- int (*Data)(BtCursor*, int offset, int amt, char *zBuf);
- int (*CloseCursor)(BtCursor*);
-#ifdef SQLITE_TEST
- int (*CursorDump)(BtCursor*, int*);
-#endif
-};
-
-/*
-** The number of 4-byte "meta" values contained on the first page of each
-** database file.
-*/
-#define SQLITE_N_BTREE_META 10
-
-int sqliteBtreeOpen(const char *zFilename, int mode, int nPg, Btree **ppBtree);
-int sqliteRbtreeOpen(const char *zFilename, int mode, int nPg, Btree **ppBtree);
-
-#define btOps(pBt) (*((BtOps **)(pBt)))
-#define btCOps(pCur) (*((BtCursorOps **)(pCur)))
-
-#define sqliteBtreeClose(pBt) (btOps(pBt)->Close(pBt))
-#define sqliteBtreeSetCacheSize(pBt, sz) (btOps(pBt)->SetCacheSize(pBt, sz))
-#define sqliteBtreeSetSafetyLevel(pBt, sl) (btOps(pBt)->SetSafetyLevel(pBt, sl))
-#define sqliteBtreeBeginTrans(pBt) (btOps(pBt)->BeginTrans(pBt))
-#define sqliteBtreeCommit(pBt) (btOps(pBt)->Commit(pBt))
-#define sqliteBtreeRollback(pBt) (btOps(pBt)->Rollback(pBt))
-#define sqliteBtreeBeginCkpt(pBt) (btOps(pBt)->BeginCkpt(pBt))
-#define sqliteBtreeCommitCkpt(pBt) (btOps(pBt)->CommitCkpt(pBt))
-#define sqliteBtreeRollbackCkpt(pBt) (btOps(pBt)->RollbackCkpt(pBt))
-#define sqliteBtreeCreateTable(pBt,piTable)\
- (btOps(pBt)->CreateTable(pBt,piTable))
-#define sqliteBtreeCreateIndex(pBt, piIndex)\
- (btOps(pBt)->CreateIndex(pBt, piIndex))
-#define sqliteBtreeDropTable(pBt, iTable) (btOps(pBt)->DropTable(pBt, iTable))
-#define sqliteBtreeClearTable(pBt, iTable)\
- (btOps(pBt)->ClearTable(pBt, iTable))
-#define sqliteBtreeCursor(pBt, iTable, wrFlag, ppCur)\
- (btOps(pBt)->Cursor(pBt, iTable, wrFlag, ppCur))
-#define sqliteBtreeMoveto(pCur, pKey, nKey, pRes)\
- (btCOps(pCur)->Moveto(pCur, pKey, nKey, pRes))
-#define sqliteBtreeDelete(pCur) (btCOps(pCur)->Delete(pCur))
-#define sqliteBtreeInsert(pCur, pKey, nKey, pData, nData) \
- (btCOps(pCur)->Insert(pCur, pKey, nKey, pData, nData))
-#define sqliteBtreeFirst(pCur, pRes) (btCOps(pCur)->First(pCur, pRes))
-#define sqliteBtreeLast(pCur, pRes) (btCOps(pCur)->Last(pCur, pRes))
-#define sqliteBtreeNext(pCur, pRes) (btCOps(pCur)->Next(pCur, pRes))
-#define sqliteBtreePrevious(pCur, pRes) (btCOps(pCur)->Previous(pCur, pRes))
-#define sqliteBtreeKeySize(pCur, pSize) (btCOps(pCur)->KeySize(pCur, pSize) )
-#define sqliteBtreeKey(pCur, offset, amt, zBuf)\
- (btCOps(pCur)->Key(pCur, offset, amt, zBuf))
-#define sqliteBtreeKeyCompare(pCur, pKey, nKey, nIgnore, pRes)\
- (btCOps(pCur)->KeyCompare(pCur, pKey, nKey, nIgnore, pRes))
-#define sqliteBtreeDataSize(pCur, pSize) (btCOps(pCur)->DataSize(pCur, pSize))
-#define sqliteBtreeData(pCur, offset, amt, zBuf)\
- (btCOps(pCur)->Data(pCur, offset, amt, zBuf))
-#define sqliteBtreeCloseCursor(pCur) (btCOps(pCur)->CloseCursor(pCur))
-#define sqliteBtreeGetMeta(pBt, aMeta) (btOps(pBt)->GetMeta(pBt, aMeta))
-#define sqliteBtreeUpdateMeta(pBt, aMeta) (btOps(pBt)->UpdateMeta(pBt, aMeta))
-#define sqliteBtreeIntegrityCheck(pBt, aRoot, nRoot)\
- (btOps(pBt)->IntegrityCheck(pBt, aRoot, nRoot))
-#define sqliteBtreeGetFilename(pBt) (btOps(pBt)->GetFilename(pBt))
-#define sqliteBtreeCopyFile(pBt1, pBt2) (btOps(pBt1)->Copyfile(pBt1, pBt2))
-#define sqliteBtreePager(pBt) (btOps(pBt)->Pager(pBt))
-
-#ifdef SQLITE_TEST
-#define sqliteBtreePageDump(pBt, pgno, recursive)\
- (btOps(pBt)->PageDump(pBt, pgno, recursive))
-#define sqliteBtreeCursorDump(pCur, aResult)\
- (btCOps(pCur)->CursorDump(pCur, aResult))
-int btree_native_byte_order;
-#endif /* SQLITE_TEST */
-
-
-#endif /* _BTREE_H_ */
diff --git a/ext/sqlite/libsqlite/src/btree_rb.c b/ext/sqlite/libsqlite/src/btree_rb.c
deleted file mode 100644
index 49009be830..0000000000
--- a/ext/sqlite/libsqlite/src/btree_rb.c
+++ /dev/null
@@ -1,1493 +0,0 @@
-/*
-** 2003 Feb 4
-**
-** The author disclaims copyright to this source code. In place of
-** a legal notice, here is a blessing:
-**
-** May you do good and not evil.
-** May you find forgiveness for yourself and forgive others.
-** May you share freely, never taking more than you give.
-**
-*************************************************************************
-** $Id$
-**
-** This file implements an in-core database using Red-Black balanced
-** binary trees.
-**
-** It was contributed to SQLite by anonymous on 2003-Feb-04 23:24:49 UTC.
-*/
-#include "btree.h"
-#include "sqliteInt.h"
-#include <assert.h>
-
-/*
-** Omit this whole file if the SQLITE_OMIT_INMEMORYDB macro is
-** defined. This allows a lot of code to be omitted for installations
-** that do not need it.
-*/
-#ifndef SQLITE_OMIT_INMEMORYDB
-
-
-typedef struct BtRbTree BtRbTree;
-typedef struct BtRbNode BtRbNode;
-typedef struct BtRollbackOp BtRollbackOp;
-typedef struct Rbtree Rbtree;
-typedef struct RbtCursor RbtCursor;
-
-/* Forward declarations */
-static BtOps sqliteRbtreeOps;
-static BtCursorOps sqliteRbtreeCursorOps;
-
-/*
- * During each transaction (or checkpoint), a linked-list of
- * "rollback-operations" is accumulated. If the transaction is rolled back,
- * then the list of operations must be executed (to restore the database to
- * it's state before the transaction started). If the transaction is to be
- * committed, just delete the list.
- *
- * Each operation is represented as follows, depending on the value of eOp:
- *
- * ROLLBACK_INSERT -> Need to insert (pKey, pData) into table iTab.
- * ROLLBACK_DELETE -> Need to delete the record (pKey) into table iTab.
- * ROLLBACK_CREATE -> Need to create table iTab.
- * ROLLBACK_DROP -> Need to drop table iTab.
- */
-struct BtRollbackOp {
- u8 eOp;
- int iTab;
- int nKey;
- void *pKey;
- int nData;
- void *pData;
- BtRollbackOp *pNext;
-};
-
-/*
-** Legal values for BtRollbackOp.eOp:
-*/
-#define ROLLBACK_INSERT 1 /* Insert a record */
-#define ROLLBACK_DELETE 2 /* Delete a record */
-#define ROLLBACK_CREATE 3 /* Create a table */
-#define ROLLBACK_DROP 4 /* Drop a table */
-
-struct Rbtree {
- BtOps *pOps; /* Function table */
- int aMetaData[SQLITE_N_BTREE_META];
-
- int next_idx; /* next available table index */
- Hash tblHash; /* All created tables, by index */
- u8 isAnonymous; /* True if this Rbtree is to be deleted when closed */
- u8 eTransState; /* State of this Rbtree wrt transactions */
-
- BtRollbackOp *pTransRollback;
- BtRollbackOp *pCheckRollback;
- BtRollbackOp *pCheckRollbackTail;
-};
-
-/*
-** Legal values for Rbtree.eTransState.
-*/
-#define TRANS_NONE 0 /* No transaction is in progress */
-#define TRANS_INTRANSACTION 1 /* A transaction is in progress */
-#define TRANS_INCHECKPOINT 2 /* A checkpoint is in progress */
-#define TRANS_ROLLBACK 3 /* We are currently rolling back a checkpoint or
- * transaction. */
-
-struct RbtCursor {
- BtCursorOps *pOps; /* Function table */
- Rbtree *pRbtree;
- BtRbTree *pTree;
- int iTree; /* Index of pTree in pRbtree */
- BtRbNode *pNode;
- RbtCursor *pShared; /* List of all cursors on the same Rbtree */
- u8 eSkip; /* Determines if next step operation is a no-op */
- u8 wrFlag; /* True if this cursor is open for writing */
-};
-
-/*
-** Legal values for RbtCursor.eSkip.
-*/
-#define SKIP_NONE 0 /* Always step the cursor */
-#define SKIP_NEXT 1 /* The next sqliteRbtreeNext() is a no-op */
-#define SKIP_PREV 2 /* The next sqliteRbtreePrevious() is a no-op */
-#define SKIP_INVALID 3 /* Calls to Next() and Previous() are invalid */
-
-struct BtRbTree {
- RbtCursor *pCursors; /* All cursors pointing to this tree */
- BtRbNode *pHead; /* Head of the tree, or NULL */
-};
-
-struct BtRbNode {
- int nKey;
- void *pKey;
- int nData;
- void *pData;
- u8 isBlack; /* true for a black node, 0 for a red node */
- BtRbNode *pParent; /* Nodes parent node, NULL for the tree head */
- BtRbNode *pLeft; /* Nodes left child, or NULL */
- BtRbNode *pRight; /* Nodes right child, or NULL */
-
- int nBlackHeight; /* Only used during the red-black integrity check */
-};
-
-/* Forward declarations */
-static int memRbtreeMoveto(
- RbtCursor* pCur,
- const void *pKey,
- int nKey,
- int *pRes
-);
-static int memRbtreeClearTable(Rbtree* tree, int n);
-static int memRbtreeNext(RbtCursor* pCur, int *pRes);
-static int memRbtreeLast(RbtCursor* pCur, int *pRes);
-static int memRbtreePrevious(RbtCursor* pCur, int *pRes);
-
-
-/*
-** This routine checks all cursors that point to the same table
-** as pCur points to. If any of those cursors were opened with
-** wrFlag==0 then this routine returns SQLITE_LOCKED. If all
-** cursors point to the same table were opened with wrFlag==1
-** then this routine returns SQLITE_OK.
-**
-** In addition to checking for read-locks (where a read-lock
-** means a cursor opened with wrFlag==0) this routine also NULLs
-** out the pNode field of all other cursors.
-** This is necessary because an insert
-** or delete might change erase the node out from under
-** another cursor.
-*/
-static int checkReadLocks(RbtCursor *pCur){
- RbtCursor *p;
- assert( pCur->wrFlag );
- for(p=pCur->pTree->pCursors; p; p=p->pShared){
- if( p!=pCur ){
- if( p->wrFlag==0 ) return SQLITE_LOCKED;
- p->pNode = 0;
- }
- }
- return SQLITE_OK;
-}
-
-/*
- * The key-compare function for the red-black trees. Returns as follows:
- *
- * (key1 < key2) -1
- * (key1 == key2) 0
- * (key1 > key2) 1
- *
- * Keys are compared using memcmp(). If one key is an exact prefix of the
- * other, then the shorter key is less than the longer key.
- */
-static int key_compare(void const*pKey1, int nKey1, void const*pKey2, int nKey2)
-{
- int mcmp = memcmp(pKey1, pKey2, (nKey1 <= nKey2)?nKey1:nKey2);
- if( mcmp == 0){
- if( nKey1 == nKey2 ) return 0;
- return ((nKey1 < nKey2)?-1:1);
- }
- return ((mcmp>0)?1:-1);
-}
-
-/*
- * Perform the LEFT-rotate transformation on node X of tree pTree. This
- * transform is part of the red-black balancing code.
- *
- * | |
- * X Y
- * / \ / \
- * a Y X c
- * / \ / \
- * b c a b
- *
- * BEFORE AFTER
- */
-static void leftRotate(BtRbTree *pTree, BtRbNode *pX)
-{
- BtRbNode *pY;
- BtRbNode *pb;
- pY = pX->pRight;
- pb = pY->pLeft;
-
- pY->pParent = pX->pParent;
- if( pX->pParent ){
- if( pX->pParent->pLeft == pX ) pX->pParent->pLeft = pY;
- else pX->pParent->pRight = pY;
- }
- pY->pLeft = pX;
- pX->pParent = pY;
- pX->pRight = pb;
- if( pb ) pb->pParent = pX;
- if( pTree->pHead == pX ) pTree->pHead = pY;
-}
-
-/*
- * Perform the RIGHT-rotate transformation on node X of tree pTree. This
- * transform is part of the red-black balancing code.
- *
- * | |
- * X Y
- * / \ / \
- * Y c a X
- * / \ / \
- * a b b c
- *
- * BEFORE AFTER
- */
-static void rightRotate(BtRbTree *pTree, BtRbNode *pX)
-{
- BtRbNode *pY;
- BtRbNode *pb;
- pY = pX->pLeft;
- pb = pY->pRight;
-
- pY->pParent = pX->pParent;
- if( pX->pParent ){
- if( pX->pParent->pLeft == pX ) pX->pParent->pLeft = pY;
- else pX->pParent->pRight = pY;
- }
- pY->pRight = pX;
- pX->pParent = pY;
- pX->pLeft = pb;
- if( pb ) pb->pParent = pX;
- if( pTree->pHead == pX ) pTree->pHead = pY;
-}
-
-/*
- * A string-manipulation helper function for check_redblack_tree(). If (orig ==
- * NULL) a copy of val is returned. If (orig != NULL) then a copy of the *
- * concatenation of orig and val is returned. The original orig is deleted
- * (using sqliteFree()).
- */
-static char *append_val(char * orig, char const * val)
-{
- if( !orig ){
- return sqliteStrDup( val );
- } else{
- char * ret = 0;
- sqliteSetString(&ret, orig, val, (char*)0);
- sqliteFree( orig );
- return ret;
- }
- assert(0);
-}
-
-/*
- * Append a string representation of the entire node to orig and return it.
- * This is used to produce debugging information if check_redblack_tree() finds
- * a problem with a red-black binary tree.
- */
-static char *append_node(char * orig, BtRbNode *pNode, int indent)
-{
- char buf[128];
- int i;
-
- for( i=0; i<indent; i++ ){
- orig = append_val(orig, " ");
- }
-
- sprintf(buf, "%p", pNode);
- orig = append_val(orig, buf);
-
- if( pNode ){
- indent += 3;
- if( pNode->isBlack ){
- orig = append_val(orig, " B \n");
- }else{
- orig = append_val(orig, " R \n");
- }
- orig = append_node( orig, pNode->pLeft, indent );
- orig = append_node( orig, pNode->pRight, indent );
- }else{
- orig = append_val(orig, "\n");
- }
- return orig;
-}
-
-/*
- * Print a representation of a node to stdout. This function is only included
- * so you can call it from within a debugger if things get really bad. It
- * is not called from anyplace in the code.
- */
-static void print_node(BtRbNode *pNode)
-{
- char * str = append_node(0, pNode, 0);
- printf("%s", str);
-
- /* Suppress a warning message about print_node() being unused */
- (void)print_node;
-}
-
-/*
- * Check the following properties of the red-black tree:
- * (1) - If a node is red, both of it's children are black
- * (2) - Each path from a given node to a leaf (NULL) node passes thru the
- * same number of black nodes
- *
- * If there is a problem, append a description (using append_val() ) to *msg.
- */
-static void check_redblack_tree(BtRbTree * tree, char ** msg)
-{
- BtRbNode *pNode;
-
- /* 0 -> came from parent
- * 1 -> came from left
- * 2 -> came from right */
- int prev_step = 0;
-
- pNode = tree->pHead;
- while( pNode ){
- switch( prev_step ){
- case 0:
- if( pNode->pLeft ){
- pNode = pNode->pLeft;
- }else{
- prev_step = 1;
- }
- break;
- case 1:
- if( pNode->pRight ){
- pNode = pNode->pRight;
- prev_step = 0;
- }else{
- prev_step = 2;
- }
- break;
- case 2:
- /* Check red-black property (1) */
- if( !pNode->isBlack &&
- ( (pNode->pLeft && !pNode->pLeft->isBlack) ||
- (pNode->pRight && !pNode->pRight->isBlack) )
- ){
- char buf[128];
- sprintf(buf, "Red node with red child at %p\n", pNode);
- *msg = append_val(*msg, buf);
- *msg = append_node(*msg, tree->pHead, 0);
- *msg = append_val(*msg, "\n");
- }
-
- /* Check red-black property (2) */
- {
- int leftHeight = 0;
- int rightHeight = 0;
- if( pNode->pLeft ){
- leftHeight += pNode->pLeft->nBlackHeight;
- leftHeight += (pNode->pLeft->isBlack?1:0);
- }
- if( pNode->pRight ){
- rightHeight += pNode->pRight->nBlackHeight;
- rightHeight += (pNode->pRight->isBlack?1:0);
- }
- if( leftHeight != rightHeight ){
- char buf[128];
- sprintf(buf, "Different black-heights at %p\n", pNode);
- *msg = append_val(*msg, buf);
- *msg = append_node(*msg, tree->pHead, 0);
- *msg = append_val(*msg, "\n");
- }
- pNode->nBlackHeight = leftHeight;
- }
-
- if( pNode->pParent ){
- if( pNode == pNode->pParent->pLeft ) prev_step = 1;
- else prev_step = 2;
- }
- pNode = pNode->pParent;
- break;
- default: assert(0);
- }
- }
-}
-
-/*
- * Node pX has just been inserted into pTree (by code in sqliteRbtreeInsert()).
- * It is possible that pX is a red node with a red parent, which is a violation
- * of the red-black tree properties. This function performs rotations and
- * color changes to rebalance the tree
- */
-static void do_insert_balancing(BtRbTree *pTree, BtRbNode *pX)
-{
- /* In the first iteration of this loop, pX points to the red node just
- * inserted in the tree. If the parent of pX exists (pX is not the root
- * node) and is red, then the properties of the red-black tree are
- * violated.
- *
- * At the start of any subsequent iterations, pX points to a red node
- * with a red parent. In all other respects the tree is a legal red-black
- * binary tree. */
- while( pX != pTree->pHead && !pX->pParent->isBlack ){
- BtRbNode *pUncle;
- BtRbNode *pGrandparent;
-
- /* Grandparent of pX must exist and must be black. */
- pGrandparent = pX->pParent->pParent;
- assert( pGrandparent );
- assert( pGrandparent->isBlack );
-
- /* Uncle of pX may or may not exist. */
- if( pX->pParent == pGrandparent->pLeft )
- pUncle = pGrandparent->pRight;
- else
- pUncle = pGrandparent->pLeft;
-
- /* If the uncle of pX exists and is red, we do the following:
- * | |
- * G(b) G(r)
- * / \ / \
- * U(r) P(r) U(b) P(b)
- * \ \
- * X(r) X(r)
- *
- * BEFORE AFTER
- * pX is then set to G. If the parent of G is red, then the while loop
- * will run again. */
- if( pUncle && !pUncle->isBlack ){
- pGrandparent->isBlack = 0;
- pUncle->isBlack = 1;
- pX->pParent->isBlack = 1;
- pX = pGrandparent;
- }else{
-
- if( pX->pParent == pGrandparent->pLeft ){
- if( pX == pX->pParent->pRight ){
- /* If pX is a right-child, do the following transform, essentially
- * to change pX into a left-child:
- * | |
- * G(b) G(b)
- * / \ / \
- * P(r) U(b) X(r) U(b)
- * \ /
- * X(r) P(r) <-- new X
- *
- * BEFORE AFTER
- */
- pX = pX->pParent;
- leftRotate(pTree, pX);
- }
-
- /* Do the following transform, which balances the tree :)
- * | |
- * G(b) P(b)
- * / \ / \
- * P(r) U(b) X(r) G(r)
- * / \
- * X(r) U(b)
- *
- * BEFORE AFTER
- */
- assert( pGrandparent == pX->pParent->pParent );
- pGrandparent->isBlack = 0;
- pX->pParent->isBlack = 1;
- rightRotate( pTree, pGrandparent );
-
- }else{
- /* This code is symetric to the illustrated case above. */
- if( pX == pX->pParent->pLeft ){
- pX = pX->pParent;
- rightRotate(pTree, pX);
- }
- assert( pGrandparent == pX->pParent->pParent );
- pGrandparent->isBlack = 0;
- pX->pParent->isBlack = 1;
- leftRotate( pTree, pGrandparent );
- }
- }
- }
- pTree->pHead->isBlack = 1;
-}
-
-/*
- * A child of pParent, which in turn had child pX, has just been removed from
- * pTree (the figure below depicts the operation, Z is being removed). pParent
- * or pX, or both may be NULL.
- * | |
- * P P
- * / \ / \
- * Z X
- * / \
- * X nil
- *
- * This function is only called if Z was black. In this case the red-black tree
- * properties have been violated, and pX has an "extra black". This function
- * performs rotations and color-changes to re-balance the tree.
- */
-static
-void do_delete_balancing(BtRbTree *pTree, BtRbNode *pX, BtRbNode *pParent)
-{
- BtRbNode *pSib;
-
- /* TODO: Comment this code! */
- while( pX != pTree->pHead && (!pX || pX->isBlack) ){
- if( pX == pParent->pLeft ){
- pSib = pParent->pRight;
- if( pSib && !(pSib->isBlack) ){
- pSib->isBlack = 1;
- pParent->isBlack = 0;
- leftRotate(pTree, pParent);
- pSib = pParent->pRight;
- }
- if( !pSib ){
- pX = pParent;
- }else if(
- (!pSib->pLeft || pSib->pLeft->isBlack) &&
- (!pSib->pRight || pSib->pRight->isBlack) ) {
- pSib->isBlack = 0;
- pX = pParent;
- }else{
- if( (!pSib->pRight || pSib->pRight->isBlack) ){
- if( pSib->pLeft ) pSib->pLeft->isBlack = 1;
- pSib->isBlack = 0;
- rightRotate( pTree, pSib );
- pSib = pParent->pRight;
- }
- pSib->isBlack = pParent->isBlack;
- pParent->isBlack = 1;
- if( pSib->pRight ) pSib->pRight->isBlack = 1;
- leftRotate(pTree, pParent);
- pX = pTree->pHead;
- }
- }else{
- pSib = pParent->pLeft;
- if( pSib && !(pSib->isBlack) ){
- pSib->isBlack = 1;
- pParent->isBlack = 0;
- rightRotate(pTree, pParent);
- pSib = pParent->pLeft;
- }
- if( !pSib ){
- pX = pParent;
- }else if(
- (!pSib->pLeft || pSib->pLeft->isBlack) &&
- (!pSib->pRight || pSib->pRight->isBlack) ){
- pSib->isBlack = 0;
- pX = pParent;
- }else{
- if( (!pSib->pLeft || pSib->pLeft->isBlack) ){
- if( pSib->pRight ) pSib->pRight->isBlack = 1;
- pSib->isBlack = 0;
- leftRotate( pTree, pSib );
- pSib = pParent->pLeft;
- }
- pSib->isBlack = pParent->isBlack;
- pParent->isBlack = 1;
- if( pSib->pLeft ) pSib->pLeft->isBlack = 1;
- rightRotate(pTree, pParent);
- pX = pTree->pHead;
- }
- }
- pParent = pX->pParent;
- }
- if( pX ) pX->isBlack = 1;
-}
-
-/*
- * Create table n in tree pRbtree. Table n must not exist.
- */
-static void btreeCreateTable(Rbtree* pRbtree, int n)
-{
- BtRbTree *pNewTbl = sqliteMalloc(sizeof(BtRbTree));
- sqliteHashInsert(&pRbtree->tblHash, 0, n, pNewTbl);
-}
-
-/*
- * Log a single "rollback-op" for the given Rbtree. See comments for struct
- * BtRollbackOp.
- */
-static void btreeLogRollbackOp(Rbtree* pRbtree, BtRollbackOp *pRollbackOp)
-{
- assert( pRbtree->eTransState == TRANS_INCHECKPOINT ||
- pRbtree->eTransState == TRANS_INTRANSACTION );
- if( pRbtree->eTransState == TRANS_INTRANSACTION ){
- pRollbackOp->pNext = pRbtree->pTransRollback;
- pRbtree->pTransRollback = pRollbackOp;
- }
- if( pRbtree->eTransState == TRANS_INCHECKPOINT ){
- if( !pRbtree->pCheckRollback ){
- pRbtree->pCheckRollbackTail = pRollbackOp;
- }
- pRollbackOp->pNext = pRbtree->pCheckRollback;
- pRbtree->pCheckRollback = pRollbackOp;
- }
-}
-
-int sqliteRbtreeOpen(
- const char *zFilename,
- int mode,
- int nPg,
- Btree **ppBtree
-){
- Rbtree **ppRbtree = (Rbtree**)ppBtree;
- *ppRbtree = (Rbtree *)sqliteMalloc(sizeof(Rbtree));
- if( sqlite_malloc_failed ) goto open_no_mem;
- sqliteHashInit(&(*ppRbtree)->tblHash, SQLITE_HASH_INT, 0);
-
- /* Create a binary tree for the SQLITE_MASTER table at location 2 */
- btreeCreateTable(*ppRbtree, 2);
- if( sqlite_malloc_failed ) goto open_no_mem;
- (*ppRbtree)->next_idx = 3;
- (*ppRbtree)->pOps = &sqliteRbtreeOps;
- /* Set file type to 4; this is so that "attach ':memory:' as ...." does not
- ** think that the database in uninitialised and refuse to attach
- */
- (*ppRbtree)->aMetaData[2] = 4;
-
- return SQLITE_OK;
-
-open_no_mem:
- *ppBtree = 0;
- return SQLITE_NOMEM;
-}
-
-/*
- * Create a new table in the supplied Rbtree. Set *n to the new table number.
- * Return SQLITE_OK if the operation is a success.
- */
-static int memRbtreeCreateTable(Rbtree* tree, int* n)
-{
- assert( tree->eTransState != TRANS_NONE );
-
- *n = tree->next_idx++;
- btreeCreateTable(tree, *n);
- if( sqlite_malloc_failed ) return SQLITE_NOMEM;
-
- /* Set up the rollback structure (if we are not doing this as part of a
- * rollback) */
- if( tree->eTransState != TRANS_ROLLBACK ){
- BtRollbackOp *pRollbackOp = sqliteMalloc(sizeof(BtRollbackOp));
- if( pRollbackOp==0 ) return SQLITE_NOMEM;
- pRollbackOp->eOp = ROLLBACK_DROP;
- pRollbackOp->iTab = *n;
- btreeLogRollbackOp(tree, pRollbackOp);
- }
-
- return SQLITE_OK;
-}
-
-/*
- * Delete table n from the supplied Rbtree.
- */
-static int memRbtreeDropTable(Rbtree* tree, int n)
-{
- BtRbTree *pTree;
- assert( tree->eTransState != TRANS_NONE );
-
- memRbtreeClearTable(tree, n);
- pTree = sqliteHashInsert(&tree->tblHash, 0, n, 0);
- assert(pTree);
- assert( pTree->pCursors==0 );
- sqliteFree(pTree);
-
- if( tree->eTransState != TRANS_ROLLBACK ){
- BtRollbackOp *pRollbackOp = sqliteMalloc(sizeof(BtRollbackOp));
- if( pRollbackOp==0 ) return SQLITE_NOMEM;
- pRollbackOp->eOp = ROLLBACK_CREATE;
- pRollbackOp->iTab = n;
- btreeLogRollbackOp(tree, pRollbackOp);
- }
-
- return SQLITE_OK;
-}
-
-static int memRbtreeKeyCompare(RbtCursor* pCur, const void *pKey, int nKey,
- int nIgnore, int *pRes)
-{
- assert(pCur);
-
- if( !pCur->pNode ) {
- *pRes = -1;
- } else {
- if( (pCur->pNode->nKey - nIgnore) < 0 ){
- *pRes = -1;
- }else{
- *pRes = key_compare(pCur->pNode->pKey, pCur->pNode->nKey-nIgnore,
- pKey, nKey);
- }
- }
- return SQLITE_OK;
-}
-
-/*
- * Get a new cursor for table iTable of the supplied Rbtree. The wrFlag
- * parameter indicates that the cursor is open for writing.
- *
- * Note that RbtCursor.eSkip and RbtCursor.pNode both initialize to 0.
- */
-static int memRbtreeCursor(
- Rbtree* tree,
- int iTable,
- int wrFlag,
- RbtCursor **ppCur
-){
- RbtCursor *pCur;
- assert(tree);
- pCur = *ppCur = sqliteMalloc(sizeof(RbtCursor));
- if( sqlite_malloc_failed ) return SQLITE_NOMEM;
- pCur->pTree = sqliteHashFind(&tree->tblHash, 0, iTable);
- pCur->pRbtree = tree;
- pCur->iTree = iTable;
- pCur->pOps = &sqliteRbtreeCursorOps;
- pCur->wrFlag = wrFlag;
- pCur->pShared = pCur->pTree->pCursors;
- pCur->pTree->pCursors = pCur;
-
-
- assert( (*ppCur)->pTree );
- return SQLITE_OK;
-}
-
-/*
- * Insert a new record into the Rbtree. The key is given by (pKey,nKey)
- * and the data is given by (pData,nData). The cursor is used only to
- * define what database the record should be inserted into. The cursor
- * is left pointing at the new record.
- *
- * If the key exists already in the tree, just replace the data.
- */
-static int memRbtreeInsert(
- RbtCursor* pCur,
- const void *pKey,
- int nKey,
- const void *pDataInput,
- int nData
-){
- void * pData;
- int match;
-
- /* It is illegal to call sqliteRbtreeInsert() if we are
- ** not in a transaction */
- assert( pCur->pRbtree->eTransState != TRANS_NONE );
-
- /* Make sure some other cursor isn't trying to read this same table */
- if( checkReadLocks(pCur) ){
- return SQLITE_LOCKED; /* The table pCur points to has a read lock */
- }
-
- /* Take a copy of the input data now, in case we need it for the
- * replace case */
- pData = sqliteMallocRaw(nData);
- if( sqlite_malloc_failed ) return SQLITE_NOMEM;
- memcpy(pData, pDataInput, nData);
-
- /* Move the cursor to a node near the key to be inserted. If the key already
- * exists in the table, then (match == 0). In this case we can just replace
- * the data associated with the entry, we don't need to manipulate the tree.
- *
- * If there is no exact match, then the cursor points at what would be either
- * the predecessor (match == -1) or successor (match == 1) of the
- * searched-for key, were it to be inserted. The new node becomes a child of
- * this node.
- *
- * The new node is initially red.
- */
- memRbtreeMoveto( pCur, pKey, nKey, &match);
- if( match ){
- BtRbNode *pNode = sqliteMalloc(sizeof(BtRbNode));
- if( pNode==0 ) return SQLITE_NOMEM;
- pNode->nKey = nKey;
- pNode->pKey = sqliteMallocRaw(nKey);
- if( sqlite_malloc_failed ) return SQLITE_NOMEM;
- memcpy(pNode->pKey, pKey, nKey);
- pNode->nData = nData;
- pNode->pData = pData;
- if( pCur->pNode ){
- switch( match ){
- case -1:
- assert( !pCur->pNode->pRight );
- pNode->pParent = pCur->pNode;
- pCur->pNode->pRight = pNode;
- break;
- case 1:
- assert( !pCur->pNode->pLeft );
- pNode->pParent = pCur->pNode;
- pCur->pNode->pLeft = pNode;
- break;
- default:
- assert(0);
- }
- }else{
- pCur->pTree->pHead = pNode;
- }
-
- /* Point the cursor at the node just inserted, as per SQLite requirements */
- pCur->pNode = pNode;
-
- /* A new node has just been inserted, so run the balancing code */
- do_insert_balancing(pCur->pTree, pNode);
-
- /* Set up a rollback-op in case we have to roll this operation back */
- if( pCur->pRbtree->eTransState != TRANS_ROLLBACK ){
- BtRollbackOp *pOp = sqliteMalloc( sizeof(BtRollbackOp) );
- if( pOp==0 ) return SQLITE_NOMEM;
- pOp->eOp = ROLLBACK_DELETE;
- pOp->iTab = pCur->iTree;
- pOp->nKey = pNode->nKey;
- pOp->pKey = sqliteMallocRaw( pOp->nKey );
- if( sqlite_malloc_failed ) return SQLITE_NOMEM;
- memcpy( pOp->pKey, pNode->pKey, pOp->nKey );
- btreeLogRollbackOp(pCur->pRbtree, pOp);
- }
-
- }else{
- /* No need to insert a new node in the tree, as the key already exists.
- * Just clobber the current nodes data. */
-
- /* Set up a rollback-op in case we have to roll this operation back */
- if( pCur->pRbtree->eTransState != TRANS_ROLLBACK ){
- BtRollbackOp *pOp = sqliteMalloc( sizeof(BtRollbackOp) );
- if( pOp==0 ) return SQLITE_NOMEM;
- pOp->iTab = pCur->iTree;
- pOp->nKey = pCur->pNode->nKey;
- pOp->pKey = sqliteMallocRaw( pOp->nKey );
- if( sqlite_malloc_failed ) return SQLITE_NOMEM;
- memcpy( pOp->pKey, pCur->pNode->pKey, pOp->nKey );
- pOp->nData = pCur->pNode->nData;
- pOp->pData = pCur->pNode->pData;
- pOp->eOp = ROLLBACK_INSERT;
- btreeLogRollbackOp(pCur->pRbtree, pOp);
- }else{
- sqliteFree( pCur->pNode->pData );
- }
-
- /* Actually clobber the nodes data */
- pCur->pNode->pData = pData;
- pCur->pNode->nData = nData;
- }
-
- return SQLITE_OK;
-}
-
-/* Move the cursor so that it points to an entry near pKey.
-** Return a success code.
-**
-** *pRes<0 The cursor is left pointing at an entry that
-** is smaller than pKey or if the table is empty
-** and the cursor is therefore left point to nothing.
-**
-** *pRes==0 The cursor is left pointing at an entry that
-** exactly matches pKey.
-**
-** *pRes>0 The cursor is left pointing at an entry that
-** is larger than pKey.
-*/
-static int memRbtreeMoveto(
- RbtCursor* pCur,
- const void *pKey,
- int nKey,
- int *pRes
-){
- BtRbNode *pTmp = 0;
-
- pCur->pNode = pCur->pTree->pHead;
- *pRes = -1;
- while( pCur->pNode && *pRes ) {
- *pRes = key_compare(pCur->pNode->pKey, pCur->pNode->nKey, pKey, nKey);
- pTmp = pCur->pNode;
- switch( *pRes ){
- case 1: /* cursor > key */
- pCur->pNode = pCur->pNode->pLeft;
- break;
- case -1: /* cursor < key */
- pCur->pNode = pCur->pNode->pRight;
- break;
- }
- }
-
- /* If (pCur->pNode == NULL), then we have failed to find a match. Set
- * pCur->pNode to pTmp, which is either NULL (if the tree is empty) or the
- * last node traversed in the search. In either case the relation ship
- * between pTmp and the searched for key is already stored in *pRes. pTmp is
- * either the successor or predecessor of the key we tried to move to. */
- if( !pCur->pNode ) pCur->pNode = pTmp;
- pCur->eSkip = SKIP_NONE;
-
- return SQLITE_OK;
-}
-
-
-/*
-** Delete the entry that the cursor is pointing to.
-**
-** The cursor is left pointing at either the next or the previous
-** entry. If the cursor is left pointing to the next entry, then
-** the pCur->eSkip flag is set to SKIP_NEXT which forces the next call to
-** sqliteRbtreeNext() to be a no-op. That way, you can always call
-** sqliteRbtreeNext() after a delete and the cursor will be left
-** pointing to the first entry after the deleted entry. Similarly,
-** pCur->eSkip is set to SKIP_PREV is the cursor is left pointing to
-** the entry prior to the deleted entry so that a subsequent call to
-** sqliteRbtreePrevious() will always leave the cursor pointing at the
-** entry immediately before the one that was deleted.
-*/
-static int memRbtreeDelete(RbtCursor* pCur)
-{
- BtRbNode *pZ; /* The one being deleted */
- BtRbNode *pChild; /* The child of the spliced out node */
-
- /* It is illegal to call sqliteRbtreeDelete() if we are
- ** not in a transaction */
- assert( pCur->pRbtree->eTransState != TRANS_NONE );
-
- /* Make sure some other cursor isn't trying to read this same table */
- if( checkReadLocks(pCur) ){
- return SQLITE_LOCKED; /* The table pCur points to has a read lock */
- }
-
- pZ = pCur->pNode;
- if( !pZ ){
- return SQLITE_OK;
- }
-
- /* If we are not currently doing a rollback, set up a rollback op for this
- * deletion */
- if( pCur->pRbtree->eTransState != TRANS_ROLLBACK ){
- BtRollbackOp *pOp = sqliteMalloc( sizeof(BtRollbackOp) );
- if( pOp==0 ) return SQLITE_NOMEM;
- pOp->iTab = pCur->iTree;
- pOp->nKey = pZ->nKey;
- pOp->pKey = pZ->pKey;
- pOp->nData = pZ->nData;
- pOp->pData = pZ->pData;
- pOp->eOp = ROLLBACK_INSERT;
- btreeLogRollbackOp(pCur->pRbtree, pOp);
- }
-
- /* First do a standard binary-tree delete (node pZ is to be deleted). How
- * to do this depends on how many children pZ has:
- *
- * If pZ has no children or one child, then splice out pZ. If pZ has two
- * children, splice out the successor of pZ and replace the key and data of
- * pZ with the key and data of the spliced out successor. */
- if( pZ->pLeft && pZ->pRight ){
- BtRbNode *pTmp;
- int dummy;
- pCur->eSkip = SKIP_NONE;
- memRbtreeNext(pCur, &dummy);
- assert( dummy == 0 );
- if( pCur->pRbtree->eTransState == TRANS_ROLLBACK ){
- sqliteFree(pZ->pKey);
- sqliteFree(pZ->pData);
- }
- pZ->pData = pCur->pNode->pData;
- pZ->nData = pCur->pNode->nData;
- pZ->pKey = pCur->pNode->pKey;
- pZ->nKey = pCur->pNode->nKey;
- pTmp = pZ;
- pZ = pCur->pNode;
- pCur->pNode = pTmp;
- pCur->eSkip = SKIP_NEXT;
- }else{
- int res;
- pCur->eSkip = SKIP_NONE;
- memRbtreeNext(pCur, &res);
- pCur->eSkip = SKIP_NEXT;
- if( res ){
- memRbtreeLast(pCur, &res);
- memRbtreePrevious(pCur, &res);
- pCur->eSkip = SKIP_PREV;
- }
- if( pCur->pRbtree->eTransState == TRANS_ROLLBACK ){
- sqliteFree(pZ->pKey);
- sqliteFree(pZ->pData);
- }
- }
-
- /* pZ now points at the node to be spliced out. This block does the
- * splicing. */
- {
- BtRbNode **ppParentSlot = 0;
- assert( !pZ->pLeft || !pZ->pRight ); /* pZ has at most one child */
- pChild = ((pZ->pLeft)?pZ->pLeft:pZ->pRight);
- if( pZ->pParent ){
- assert( pZ == pZ->pParent->pLeft || pZ == pZ->pParent->pRight );
- ppParentSlot = ((pZ == pZ->pParent->pLeft)
- ?&pZ->pParent->pLeft:&pZ->pParent->pRight);
- *ppParentSlot = pChild;
- }else{
- pCur->pTree->pHead = pChild;
- }
- if( pChild ) pChild->pParent = pZ->pParent;
- }
-
- /* pZ now points at the spliced out node. pChild is the only child of pZ, or
- * NULL if pZ has no children. If pZ is black, and not the tree root, then we
- * will have violated the "same number of black nodes in every path to a
- * leaf" property of the red-black tree. The code in do_delete_balancing()
- * repairs this. */
- if( pZ->isBlack ){
- do_delete_balancing(pCur->pTree, pChild, pZ->pParent);
- }
-
- sqliteFree(pZ);
- return SQLITE_OK;
-}
-
-/*
- * Empty table n of the Rbtree.
- */
-static int memRbtreeClearTable(Rbtree* tree, int n)
-{
- BtRbTree *pTree;
- BtRbNode *pNode;
-
- pTree = sqliteHashFind(&tree->tblHash, 0, n);
- assert(pTree);
-
- pNode = pTree->pHead;
- while( pNode ){
- if( pNode->pLeft ){
- pNode = pNode->pLeft;
- }
- else if( pNode->pRight ){
- pNode = pNode->pRight;
- }
- else {
- BtRbNode *pTmp = pNode->pParent;
- if( tree->eTransState == TRANS_ROLLBACK ){
- sqliteFree( pNode->pKey );
- sqliteFree( pNode->pData );
- }else{
- BtRollbackOp *pRollbackOp = sqliteMallocRaw(sizeof(BtRollbackOp));
- if( pRollbackOp==0 ) return SQLITE_NOMEM;
- pRollbackOp->eOp = ROLLBACK_INSERT;
- pRollbackOp->iTab = n;
- pRollbackOp->nKey = pNode->nKey;
- pRollbackOp->pKey = pNode->pKey;
- pRollbackOp->nData = pNode->nData;
- pRollbackOp->pData = pNode->pData;
- btreeLogRollbackOp(tree, pRollbackOp);
- }
- sqliteFree( pNode );
- if( pTmp ){
- if( pTmp->pLeft == pNode ) pTmp->pLeft = 0;
- else if( pTmp->pRight == pNode ) pTmp->pRight = 0;
- }
- pNode = pTmp;
- }
- }
-
- pTree->pHead = 0;
- return SQLITE_OK;
-}
-
-static int memRbtreeFirst(RbtCursor* pCur, int *pRes)
-{
- if( pCur->pTree->pHead ){
- pCur->pNode = pCur->pTree->pHead;
- while( pCur->pNode->pLeft ){
- pCur->pNode = pCur->pNode->pLeft;
- }
- }
- if( pCur->pNode ){
- *pRes = 0;
- }else{
- *pRes = 1;
- }
- pCur->eSkip = SKIP_NONE;
- return SQLITE_OK;
-}
-
-static int memRbtreeLast(RbtCursor* pCur, int *pRes)
-{
- if( pCur->pTree->pHead ){
- pCur->pNode = pCur->pTree->pHead;
- while( pCur->pNode->pRight ){
- pCur->pNode = pCur->pNode->pRight;
- }
- }
- if( pCur->pNode ){
- *pRes = 0;
- }else{
- *pRes = 1;
- }
- pCur->eSkip = SKIP_NONE;
- return SQLITE_OK;
-}
-
-/*
-** Advance the cursor to the next entry in the database. If
-** successful then set *pRes=0. If the cursor
-** was already pointing to the last entry in the database before
-** this routine was called, then set *pRes=1.
-*/
-static int memRbtreeNext(RbtCursor* pCur, int *pRes)
-{
- if( pCur->pNode && pCur->eSkip != SKIP_NEXT ){
- if( pCur->pNode->pRight ){
- pCur->pNode = pCur->pNode->pRight;
- while( pCur->pNode->pLeft )
- pCur->pNode = pCur->pNode->pLeft;
- }else{
- BtRbNode * pX = pCur->pNode;
- pCur->pNode = pX->pParent;
- while( pCur->pNode && (pCur->pNode->pRight == pX) ){
- pX = pCur->pNode;
- pCur->pNode = pX->pParent;
- }
- }
- }
- pCur->eSkip = SKIP_NONE;
-
- if( !pCur->pNode ){
- *pRes = 1;
- }else{
- *pRes = 0;
- }
-
- return SQLITE_OK;
-}
-
-static int memRbtreePrevious(RbtCursor* pCur, int *pRes)
-{
- if( pCur->pNode && pCur->eSkip != SKIP_PREV ){
- if( pCur->pNode->pLeft ){
- pCur->pNode = pCur->pNode->pLeft;
- while( pCur->pNode->pRight )
- pCur->pNode = pCur->pNode->pRight;
- }else{
- BtRbNode * pX = pCur->pNode;
- pCur->pNode = pX->pParent;
- while( pCur->pNode && (pCur->pNode->pLeft == pX) ){
- pX = pCur->pNode;
- pCur->pNode = pX->pParent;
- }
- }
- }
- pCur->eSkip = SKIP_NONE;
-
- if( !pCur->pNode ){
- *pRes = 1;
- }else{
- *pRes = 0;
- }
-
- return SQLITE_OK;
-}
-
-static int memRbtreeKeySize(RbtCursor* pCur, int *pSize)
-{
- if( pCur->pNode ){
- *pSize = pCur->pNode->nKey;
- }else{
- *pSize = 0;
- }
- return SQLITE_OK;
-}
-
-static int memRbtreeKey(RbtCursor* pCur, int offset, int amt, char *zBuf)
-{
- if( !pCur->pNode ) return 0;
- if( !pCur->pNode->pKey || ((amt + offset) <= pCur->pNode->nKey) ){
- memcpy(zBuf, ((char*)pCur->pNode->pKey)+offset, amt);
- return amt;
- }else{
- memcpy(zBuf, ((char*)pCur->pNode->pKey)+offset, pCur->pNode->nKey-offset);
- return pCur->pNode->nKey-offset;
- }
- assert(0);
-}
-
-static int memRbtreeDataSize(RbtCursor* pCur, int *pSize)
-{
- if( pCur->pNode ){
- *pSize = pCur->pNode->nData;
- }else{
- *pSize = 0;
- }
- return SQLITE_OK;
-}
-
-static int memRbtreeData(RbtCursor *pCur, int offset, int amt, char *zBuf)
-{
- if( !pCur->pNode ) return 0;
- if( (amt + offset) <= pCur->pNode->nData ){
- memcpy(zBuf, ((char*)pCur->pNode->pData)+offset, amt);
- return amt;
- }else{
- memcpy(zBuf, ((char*)pCur->pNode->pData)+offset ,pCur->pNode->nData-offset);
- return pCur->pNode->nData-offset;
- }
- assert(0);
-}
-
-static int memRbtreeCloseCursor(RbtCursor* pCur)
-{
- if( pCur->pTree->pCursors==pCur ){
- pCur->pTree->pCursors = pCur->pShared;
- }else{
- RbtCursor *p = pCur->pTree->pCursors;
- while( p && p->pShared!=pCur ){ p = p->pShared; }
- assert( p!=0 );
- if( p ){
- p->pShared = pCur->pShared;
- }
- }
- sqliteFree(pCur);
- return SQLITE_OK;
-}
-
-static int memRbtreeGetMeta(Rbtree* tree, int* aMeta)
-{
- memcpy( aMeta, tree->aMetaData, sizeof(int) * SQLITE_N_BTREE_META );
- return SQLITE_OK;
-}
-
-static int memRbtreeUpdateMeta(Rbtree* tree, int* aMeta)
-{
- memcpy( tree->aMetaData, aMeta, sizeof(int) * SQLITE_N_BTREE_META );
- return SQLITE_OK;
-}
-
-/*
- * Check that each table in the Rbtree meets the requirements for a red-black
- * binary tree. If an error is found, return an explanation of the problem in
- * memory obtained from sqliteMalloc(). Parameters aRoot and nRoot are ignored.
- */
-static char *memRbtreeIntegrityCheck(Rbtree* tree, int* aRoot, int nRoot)
-{
- char * msg = 0;
- HashElem *p;
-
- for(p=sqliteHashFirst(&tree->tblHash); p; p=sqliteHashNext(p)){
- BtRbTree *pTree = sqliteHashData(p);
- check_redblack_tree(pTree, &msg);
- }
-
- return msg;
-}
-
-static int memRbtreeSetCacheSize(Rbtree* tree, int sz)
-{
- return SQLITE_OK;
-}
-
-static int memRbtreeSetSafetyLevel(Rbtree *pBt, int level){
- return SQLITE_OK;
-}
-
-static int memRbtreeBeginTrans(Rbtree* tree)
-{
- if( tree->eTransState != TRANS_NONE )
- return SQLITE_ERROR;
-
- assert( tree->pTransRollback == 0 );
- tree->eTransState = TRANS_INTRANSACTION;
- return SQLITE_OK;
-}
-
-/*
-** Delete a linked list of BtRollbackOp structures.
-*/
-static void deleteRollbackList(BtRollbackOp *pOp){
- while( pOp ){
- BtRollbackOp *pTmp = pOp->pNext;
- sqliteFree(pOp->pData);
- sqliteFree(pOp->pKey);
- sqliteFree(pOp);
- pOp = pTmp;
- }
-}
-
-static int memRbtreeCommit(Rbtree* tree){
- /* Just delete pTransRollback and pCheckRollback */
- deleteRollbackList(tree->pCheckRollback);
- deleteRollbackList(tree->pTransRollback);
- tree->pTransRollback = 0;
- tree->pCheckRollback = 0;
- tree->pCheckRollbackTail = 0;
- tree->eTransState = TRANS_NONE;
- return SQLITE_OK;
-}
-
-/*
- * Close the supplied Rbtree. Delete everything associated with it.
- */
-static int memRbtreeClose(Rbtree* tree)
-{
- HashElem *p;
- memRbtreeCommit(tree);
- while( (p=sqliteHashFirst(&tree->tblHash))!=0 ){
- tree->eTransState = TRANS_ROLLBACK;
- memRbtreeDropTable(tree, sqliteHashKeysize(p));
- }
- sqliteHashClear(&tree->tblHash);
- sqliteFree(tree);
- return SQLITE_OK;
-}
-
-/*
- * Execute and delete the supplied rollback-list on pRbtree.
- */
-static void execute_rollback_list(Rbtree *pRbtree, BtRollbackOp *pList)
-{
- BtRollbackOp *pTmp;
- RbtCursor cur;
- int res;
-
- cur.pRbtree = pRbtree;
- cur.wrFlag = 1;
- while( pList ){
- switch( pList->eOp ){
- case ROLLBACK_INSERT:
- cur.pTree = sqliteHashFind( &pRbtree->tblHash, 0, pList->iTab );
- assert(cur.pTree);
- cur.iTree = pList->iTab;
- cur.eSkip = SKIP_NONE;
- memRbtreeInsert( &cur, pList->pKey,
- pList->nKey, pList->pData, pList->nData );
- break;
- case ROLLBACK_DELETE:
- cur.pTree = sqliteHashFind( &pRbtree->tblHash, 0, pList->iTab );
- assert(cur.pTree);
- cur.iTree = pList->iTab;
- cur.eSkip = SKIP_NONE;
- memRbtreeMoveto(&cur, pList->pKey, pList->nKey, &res);
- assert(res == 0);
- memRbtreeDelete( &cur );
- break;
- case ROLLBACK_CREATE:
- btreeCreateTable(pRbtree, pList->iTab);
- break;
- case ROLLBACK_DROP:
- memRbtreeDropTable(pRbtree, pList->iTab);
- break;
- default:
- assert(0);
- }
- sqliteFree(pList->pKey);
- sqliteFree(pList->pData);
- pTmp = pList->pNext;
- sqliteFree(pList);
- pList = pTmp;
- }
-}
-
-static int memRbtreeRollback(Rbtree* tree)
-{
- tree->eTransState = TRANS_ROLLBACK;
- execute_rollback_list(tree, tree->pCheckRollback);
- execute_rollback_list(tree, tree->pTransRollback);
- tree->pTransRollback = 0;
- tree->pCheckRollback = 0;
- tree->pCheckRollbackTail = 0;
- tree->eTransState = TRANS_NONE;
- return SQLITE_OK;
-}
-
-static int memRbtreeBeginCkpt(Rbtree* tree)
-{
- if( tree->eTransState != TRANS_INTRANSACTION )
- return SQLITE_ERROR;
-
- assert( tree->pCheckRollback == 0 );
- assert( tree->pCheckRollbackTail == 0 );
- tree->eTransState = TRANS_INCHECKPOINT;
- return SQLITE_OK;
-}
-
-static int memRbtreeCommitCkpt(Rbtree* tree)
-{
- if( tree->eTransState == TRANS_INCHECKPOINT ){
- if( tree->pCheckRollback ){
- tree->pCheckRollbackTail->pNext = tree->pTransRollback;
- tree->pTransRollback = tree->pCheckRollback;
- tree->pCheckRollback = 0;
- tree->pCheckRollbackTail = 0;
- }
- tree->eTransState = TRANS_INTRANSACTION;
- }
- return SQLITE_OK;
-}
-
-static int memRbtreeRollbackCkpt(Rbtree* tree)
-{
- if( tree->eTransState != TRANS_INCHECKPOINT ) return SQLITE_OK;
- tree->eTransState = TRANS_ROLLBACK;
- execute_rollback_list(tree, tree->pCheckRollback);
- tree->pCheckRollback = 0;
- tree->pCheckRollbackTail = 0;
- tree->eTransState = TRANS_INTRANSACTION;
- return SQLITE_OK;
-}
-
-#ifdef SQLITE_TEST
-static int memRbtreePageDump(Rbtree* tree, int pgno, int rec)
-{
- assert(!"Cannot call sqliteRbtreePageDump");
- return SQLITE_OK;
-}
-
-static int memRbtreeCursorDump(RbtCursor* pCur, int* aRes)
-{
- assert(!"Cannot call sqliteRbtreeCursorDump");
- return SQLITE_OK;
-}
-
-static struct Pager *memRbtreePager(Rbtree* tree)
-{
- assert(!"Cannot call sqliteRbtreePager");
- return SQLITE_OK;
-}
-#endif
-
-/*
-** Return the full pathname of the underlying database file.
-*/
-static const char *memRbtreeGetFilename(Rbtree *pBt){
- return 0; /* A NULL return indicates there is no underlying file */
-}
-
-/*
-** The copy file function is not implemented for the in-memory database
-*/
-static int memRbtreeCopyFile(Rbtree *pBt, Rbtree *pBt2){
- return SQLITE_INTERNAL; /* Not implemented */
-}
-
-static BtOps sqliteRbtreeOps = {
- (int(*)(Btree*)) memRbtreeClose,
- (int(*)(Btree*,int)) memRbtreeSetCacheSize,
- (int(*)(Btree*,int)) memRbtreeSetSafetyLevel,
- (int(*)(Btree*)) memRbtreeBeginTrans,
- (int(*)(Btree*)) memRbtreeCommit,
- (int(*)(Btree*)) memRbtreeRollback,
- (int(*)(Btree*)) memRbtreeBeginCkpt,
- (int(*)(Btree*)) memRbtreeCommitCkpt,
- (int(*)(Btree*)) memRbtreeRollbackCkpt,
- (int(*)(Btree*,int*)) memRbtreeCreateTable,
- (int(*)(Btree*,int*)) memRbtreeCreateTable,
- (int(*)(Btree*,int)) memRbtreeDropTable,
- (int(*)(Btree*,int)) memRbtreeClearTable,
- (int(*)(Btree*,int,int,BtCursor**)) memRbtreeCursor,
- (int(*)(Btree*,int*)) memRbtreeGetMeta,
- (int(*)(Btree*,int*)) memRbtreeUpdateMeta,
- (char*(*)(Btree*,int*,int)) memRbtreeIntegrityCheck,
- (const char*(*)(Btree*)) memRbtreeGetFilename,
- (int(*)(Btree*,Btree*)) memRbtreeCopyFile,
-
-#ifdef SQLITE_TEST
- (int(*)(Btree*,int,int)) memRbtreePageDump,
- (struct Pager*(*)(Btree*)) memRbtreePager
-#endif
-};
-
-static BtCursorOps sqliteRbtreeCursorOps = {
- (int(*)(BtCursor*,const void*,int,int*)) memRbtreeMoveto,
- (int(*)(BtCursor*)) memRbtreeDelete,
- (int(*)(BtCursor*,const void*,int,const void*,int)) memRbtreeInsert,
- (int(*)(BtCursor*,int*)) memRbtreeFirst,
- (int(*)(BtCursor*,int*)) memRbtreeLast,
- (int(*)(BtCursor*,int*)) memRbtreeNext,
- (int(*)(BtCursor*,int*)) memRbtreePrevious,
- (int(*)(BtCursor*,int*)) memRbtreeKeySize,
- (int(*)(BtCursor*,int,int,char*)) memRbtreeKey,
- (int(*)(BtCursor*,const void*,int,int,int*)) memRbtreeKeyCompare,
- (int(*)(BtCursor*,int*)) memRbtreeDataSize,
- (int(*)(BtCursor*,int,int,char*)) memRbtreeData,
- (int(*)(BtCursor*)) memRbtreeCloseCursor,
-#ifdef SQLITE_TEST
- (int(*)(BtCursor*,int*)) memRbtreeCursorDump,
-#endif
-
-};
-
-#endif /* SQLITE_OMIT_INMEMORYDB */
diff --git a/ext/sqlite/libsqlite/src/build.c b/ext/sqlite/libsqlite/src/build.c
deleted file mode 100644
index 4b5ed56139..0000000000
--- a/ext/sqlite/libsqlite/src/build.c
+++ /dev/null
@@ -1,2156 +0,0 @@
-/*
-** 2001 September 15
-**
-** The author disclaims copyright to this source code. In place of
-** a legal notice, here is a blessing:
-**
-** May you do good and not evil.
-** May you find forgiveness for yourself and forgive others.
-** May you share freely, never taking more than you give.
-**
-*************************************************************************
-** This file contains C code routines that are called by the SQLite parser
-** when syntax rules are reduced. The routines in this file handle the
-** following kinds of SQL syntax:
-**
-** CREATE TABLE
-** DROP TABLE
-** CREATE INDEX
-** DROP INDEX
-** creating ID lists
-** BEGIN TRANSACTION
-** COMMIT
-** ROLLBACK
-** PRAGMA
-**
-** $Id$
-*/
-#include "sqliteInt.h"
-#include <ctype.h>
-
-/*
-** This routine is called when a new SQL statement is beginning to
-** be parsed. Check to see if the schema for the database needs
-** to be read from the SQLITE_MASTER and SQLITE_TEMP_MASTER tables.
-** If it does, then read it.
-*/
-void sqliteBeginParse(Parse *pParse, int explainFlag){
- sqlite *db = pParse->db;
- int i;
- pParse->explain = explainFlag;
- if((db->flags & SQLITE_Initialized)==0 && db->init.busy==0 ){
- int rc = sqliteInit(db, &pParse->zErrMsg);
- if( rc!=SQLITE_OK ){
- pParse->rc = rc;
- pParse->nErr++;
- }
- }
- for(i=0; i<db->nDb; i++){
- DbClearProperty(db, i, DB_Locked);
- if( !db->aDb[i].inTrans ){
- DbClearProperty(db, i, DB_Cookie);
- }
- }
- pParse->nVar = 0;
-}
-
-/*
-** This routine is called after a single SQL statement has been
-** parsed and we want to execute the VDBE code to implement
-** that statement. Prior action routines should have already
-** constructed VDBE code to do the work of the SQL statement.
-** This routine just has to execute the VDBE code.
-**
-** Note that if an error occurred, it might be the case that
-** no VDBE code was generated.
-*/
-void sqliteExec(Parse *pParse){
- sqlite *db = pParse->db;
- Vdbe *v = pParse->pVdbe;
-
- if( v==0 && (v = sqliteGetVdbe(pParse))!=0 ){
- sqliteVdbeAddOp(v, OP_Halt, 0, 0);
- }
- if( sqlite_malloc_failed ) return;
- if( v && pParse->nErr==0 ){
- FILE *trace = (db->flags & SQLITE_VdbeTrace)!=0 ? stdout : 0;
- sqliteVdbeTrace(v, trace);
- sqliteVdbeMakeReady(v, pParse->nVar, pParse->explain);
- pParse->rc = pParse->nErr ? SQLITE_ERROR : SQLITE_DONE;
- pParse->colNamesSet = 0;
- }else if( pParse->rc==SQLITE_OK ){
- pParse->rc = SQLITE_ERROR;
- }
- pParse->nTab = 0;
- pParse->nMem = 0;
- pParse->nSet = 0;
- pParse->nAgg = 0;
- pParse->nVar = 0;
-}
-
-/*
-** Locate the in-memory structure that describes
-** a particular database table given the name
-** of that table and (optionally) the name of the database
-** containing the table. Return NULL if not found.
-**
-** If zDatabase is 0, all databases are searched for the
-** table and the first matching table is returned. (No checking
-** for duplicate table names is done.) The search order is
-** TEMP first, then MAIN, then any auxiliary databases added
-** using the ATTACH command.
-**
-** See also sqliteLocateTable().
-*/
-Table *sqliteFindTable(sqlite *db, const char *zName, const char *zDatabase){
- Table *p = 0;
- int i;
- for(i=0; i<db->nDb; i++){
- int j = (i<2) ? i^1 : i; /* Search TEMP before MAIN */
- if( zDatabase!=0 && sqliteStrICmp(zDatabase, db->aDb[j].zName) ) continue;
- p = sqliteHashFind(&db->aDb[j].tblHash, zName, strlen(zName)+1);
- if( p ) break;
- }
- return p;
-}
-
-/*
-** Locate the in-memory structure that describes
-** a particular database table given the name
-** of that table and (optionally) the name of the database
-** containing the table. Return NULL if not found.
-** Also leave an error message in pParse->zErrMsg.
-**
-** The difference between this routine and sqliteFindTable()
-** is that this routine leaves an error message in pParse->zErrMsg
-** where sqliteFindTable() does not.
-*/
-Table *sqliteLocateTable(Parse *pParse, const char *zName, const char *zDbase){
- Table *p;
-
- p = sqliteFindTable(pParse->db, zName, zDbase);
- if( p==0 ){
- if( zDbase ){
- sqliteErrorMsg(pParse, "no such table: %s.%s", zDbase, zName);
- }else if( sqliteFindTable(pParse->db, zName, 0)!=0 ){
- sqliteErrorMsg(pParse, "table \"%s\" is not in database \"%s\"",
- zName, zDbase);
- }else{
- sqliteErrorMsg(pParse, "no such table: %s", zName);
- }
- }
- return p;
-}
-
-/*
-** Locate the in-memory structure that describes
-** a particular index given the name of that index
-** and the name of the database that contains the index.
-** Return NULL if not found.
-**
-** If zDatabase is 0, all databases are searched for the
-** table and the first matching index is returned. (No checking
-** for duplicate index names is done.) The search order is
-** TEMP first, then MAIN, then any auxiliary databases added
-** using the ATTACH command.
-*/
-Index *sqliteFindIndex(sqlite *db, const char *zName, const char *zDb){
- Index *p = 0;
- int i;
- for(i=0; i<db->nDb; i++){
- int j = (i<2) ? i^1 : i; /* Search TEMP before MAIN */
- if( zDb && sqliteStrICmp(zDb, db->aDb[j].zName) ) continue;
- p = sqliteHashFind(&db->aDb[j].idxHash, zName, strlen(zName)+1);
- if( p ) break;
- }
- return p;
-}
-
-/*
-** Remove the given index from the index hash table, and free
-** its memory structures.
-**
-** The index is removed from the database hash tables but
-** it is not unlinked from the Table that it indexes.
-** Unlinking from the Table must be done by the calling function.
-*/
-static void sqliteDeleteIndex(sqlite *db, Index *p){
- Index *pOld;
-
- assert( db!=0 && p->zName!=0 );
- pOld = sqliteHashInsert(&db->aDb[p->iDb].idxHash, p->zName,
- strlen(p->zName)+1, 0);
- if( pOld!=0 && pOld!=p ){
- sqliteHashInsert(&db->aDb[p->iDb].idxHash, pOld->zName,
- strlen(pOld->zName)+1, pOld);
- }
- sqliteFree(p);
-}
-
-/*
-** Unlink the given index from its table, then remove
-** the index from the index hash table and free its memory
-** structures.
-*/
-void sqliteUnlinkAndDeleteIndex(sqlite *db, Index *pIndex){
- if( pIndex->pTable->pIndex==pIndex ){
- pIndex->pTable->pIndex = pIndex->pNext;
- }else{
- Index *p;
- for(p=pIndex->pTable->pIndex; p && p->pNext!=pIndex; p=p->pNext){}
- if( p && p->pNext==pIndex ){
- p->pNext = pIndex->pNext;
- }
- }
- sqliteDeleteIndex(db, pIndex);
-}
-
-/*
-** Erase all schema information from the in-memory hash tables of
-** database connection. This routine is called to reclaim memory
-** before the connection closes. It is also called during a rollback
-** if there were schema changes during the transaction.
-**
-** If iDb<=0 then reset the internal schema tables for all database
-** files. If iDb>=2 then reset the internal schema for only the
-** single file indicated.
-*/
-void sqliteResetInternalSchema(sqlite *db, int iDb){
- HashElem *pElem;
- Hash temp1;
- Hash temp2;
- int i, j;
-
- assert( iDb>=0 && iDb<db->nDb );
- db->flags &= ~SQLITE_Initialized;
- for(i=iDb; i<db->nDb; i++){
- Db *pDb = &db->aDb[i];
- temp1 = pDb->tblHash;
- temp2 = pDb->trigHash;
- sqliteHashInit(&pDb->trigHash, SQLITE_HASH_STRING, 0);
- sqliteHashClear(&pDb->aFKey);
- sqliteHashClear(&pDb->idxHash);
- for(pElem=sqliteHashFirst(&temp2); pElem; pElem=sqliteHashNext(pElem)){
- Trigger *pTrigger = sqliteHashData(pElem);
- sqliteDeleteTrigger(pTrigger);
- }
- sqliteHashClear(&temp2);
- sqliteHashInit(&pDb->tblHash, SQLITE_HASH_STRING, 0);
- for(pElem=sqliteHashFirst(&temp1); pElem; pElem=sqliteHashNext(pElem)){
- Table *pTab = sqliteHashData(pElem);
- sqliteDeleteTable(db, pTab);
- }
- sqliteHashClear(&temp1);
- DbClearProperty(db, i, DB_SchemaLoaded);
- if( iDb>0 ) return;
- }
- assert( iDb==0 );
- db->flags &= ~SQLITE_InternChanges;
-
- /* If one or more of the auxiliary database files has been closed,
- ** then remove then from the auxiliary database list. We take the
- ** opportunity to do this here since we have just deleted all of the
- ** schema hash tables and therefore do not have to make any changes
- ** to any of those tables.
- */
- for(i=0; i<db->nDb; i++){
- struct Db *pDb = &db->aDb[i];
- if( pDb->pBt==0 ){
- if( pDb->pAux && pDb->xFreeAux ) pDb->xFreeAux(pDb->pAux);
- pDb->pAux = 0;
- }
- }
- for(i=j=2; i<db->nDb; i++){
- struct Db *pDb = &db->aDb[i];
- if( pDb->pBt==0 ){
- sqliteFree(pDb->zName);
- pDb->zName = 0;
- continue;
- }
- if( j<i ){
- db->aDb[j] = db->aDb[i];
- }
- j++;
- }
- memset(&db->aDb[j], 0, (db->nDb-j)*sizeof(db->aDb[j]));
- db->nDb = j;
- if( db->nDb<=2 && db->aDb!=db->aDbStatic ){
- memcpy(db->aDbStatic, db->aDb, 2*sizeof(db->aDb[0]));
- sqliteFree(db->aDb);
- db->aDb = db->aDbStatic;
- }
-}
-
-/*
-** This routine is called whenever a rollback occurs. If there were
-** schema changes during the transaction, then we have to reset the
-** internal hash tables and reload them from disk.
-*/
-void sqliteRollbackInternalChanges(sqlite *db){
- if( db->flags & SQLITE_InternChanges ){
- sqliteResetInternalSchema(db, 0);
- }
-}
-
-/*
-** This routine is called when a commit occurs.
-*/
-void sqliteCommitInternalChanges(sqlite *db){
- db->aDb[0].schema_cookie = db->next_cookie;
- db->flags &= ~SQLITE_InternChanges;
-}
-
-/*
-** Remove the memory data structures associated with the given
-** Table. No changes are made to disk by this routine.
-**
-** This routine just deletes the data structure. It does not unlink
-** the table data structure from the hash table. Nor does it remove
-** foreign keys from the sqlite.aFKey hash table. But it does destroy
-** memory structures of the indices and foreign keys associated with
-** the table.
-**
-** Indices associated with the table are unlinked from the "db"
-** data structure if db!=NULL. If db==NULL, indices attached to
-** the table are deleted, but it is assumed they have already been
-** unlinked.
-*/
-void sqliteDeleteTable(sqlite *db, Table *pTable){
- int i;
- Index *pIndex, *pNext;
- FKey *pFKey, *pNextFKey;
-
- if( pTable==0 ) return;
-
- /* Delete all indices associated with this table
- */
- for(pIndex = pTable->pIndex; pIndex; pIndex=pNext){
- pNext = pIndex->pNext;
- assert( pIndex->iDb==pTable->iDb || (pTable->iDb==0 && pIndex->iDb==1) );
- sqliteDeleteIndex(db, pIndex);
- }
-
- /* Delete all foreign keys associated with this table. The keys
- ** should have already been unlinked from the db->aFKey hash table
- */
- for(pFKey=pTable->pFKey; pFKey; pFKey=pNextFKey){
- pNextFKey = pFKey->pNextFrom;
- assert( pTable->iDb<db->nDb );
- assert( sqliteHashFind(&db->aDb[pTable->iDb].aFKey,
- pFKey->zTo, strlen(pFKey->zTo)+1)!=pFKey );
- sqliteFree(pFKey);
- }
-
- /* Delete the Table structure itself.
- */
- for(i=0; i<pTable->nCol; i++){
- sqliteFree(pTable->aCol[i].zName);
- sqliteFree(pTable->aCol[i].zDflt);
- sqliteFree(pTable->aCol[i].zType);
- }
- sqliteFree(pTable->zName);
- sqliteFree(pTable->aCol);
- sqliteSelectDelete(pTable->pSelect);
- sqliteFree(pTable);
-}
-
-/*
-** Unlink the given table from the hash tables and the delete the
-** table structure with all its indices and foreign keys.
-*/
-static void sqliteUnlinkAndDeleteTable(sqlite *db, Table *p){
- Table *pOld;
- FKey *pF1, *pF2;
- int i = p->iDb;
- assert( db!=0 );
- pOld = sqliteHashInsert(&db->aDb[i].tblHash, p->zName, strlen(p->zName)+1, 0);
- assert( pOld==0 || pOld==p );
- for(pF1=p->pFKey; pF1; pF1=pF1->pNextFrom){
- int nTo = strlen(pF1->zTo) + 1;
- pF2 = sqliteHashFind(&db->aDb[i].aFKey, pF1->zTo, nTo);
- if( pF2==pF1 ){
- sqliteHashInsert(&db->aDb[i].aFKey, pF1->zTo, nTo, pF1->pNextTo);
- }else{
- while( pF2 && pF2->pNextTo!=pF1 ){ pF2=pF2->pNextTo; }
- if( pF2 ){
- pF2->pNextTo = pF1->pNextTo;
- }
- }
- }
- sqliteDeleteTable(db, p);
-}
-
-/*
-** Construct the name of a user table or index from a token.
-**
-** Space to hold the name is obtained from sqliteMalloc() and must
-** be freed by the calling function.
-*/
-char *sqliteTableNameFromToken(Token *pName){
- char *zName = sqliteStrNDup(pName->z, pName->n);
- sqliteDequote(zName);
- return zName;
-}
-
-/*
-** Generate code to open the appropriate master table. The table
-** opened will be SQLITE_MASTER for persistent tables and
-** SQLITE_TEMP_MASTER for temporary tables. The table is opened
-** on cursor 0.
-*/
-void sqliteOpenMasterTable(Vdbe *v, int isTemp){
- sqliteVdbeAddOp(v, OP_Integer, isTemp, 0);
- sqliteVdbeAddOp(v, OP_OpenWrite, 0, 2);
-}
-
-/*
-** Begin constructing a new table representation in memory. This is
-** the first of several action routines that get called in response
-** to a CREATE TABLE statement. In particular, this routine is called
-** after seeing tokens "CREATE" and "TABLE" and the table name. The
-** pStart token is the CREATE and pName is the table name. The isTemp
-** flag is true if the table should be stored in the auxiliary database
-** file instead of in the main database file. This is normally the case
-** when the "TEMP" or "TEMPORARY" keyword occurs in between
-** CREATE and TABLE.
-**
-** The new table record is initialized and put in pParse->pNewTable.
-** As more of the CREATE TABLE statement is parsed, additional action
-** routines will be called to add more information to this record.
-** At the end of the CREATE TABLE statement, the sqliteEndTable() routine
-** is called to complete the construction of the new table record.
-*/
-void sqliteStartTable(
- Parse *pParse, /* Parser context */
- Token *pStart, /* The "CREATE" token */
- Token *pName, /* Name of table or view to create */
- int isTemp, /* True if this is a TEMP table */
- int isView /* True if this is a VIEW */
-){
- Table *pTable;
- Index *pIdx;
- char *zName;
- sqlite *db = pParse->db;
- Vdbe *v;
- int iDb;
-
- pParse->sFirstToken = *pStart;
- zName = sqliteTableNameFromToken(pName);
- if( zName==0 ) return;
- if( db->init.iDb==1 ) isTemp = 1;
-#ifndef SQLITE_OMIT_AUTHORIZATION
- assert( (isTemp & 1)==isTemp );
- {
- int code;
- char *zDb = isTemp ? "temp" : "main";
- if( sqliteAuthCheck(pParse, SQLITE_INSERT, SCHEMA_TABLE(isTemp), 0, zDb) ){
- sqliteFree(zName);
- return;
- }
- if( isView ){
- if( isTemp ){
- code = SQLITE_CREATE_TEMP_VIEW;
- }else{
- code = SQLITE_CREATE_VIEW;
- }
- }else{
- if( isTemp ){
- code = SQLITE_CREATE_TEMP_TABLE;
- }else{
- code = SQLITE_CREATE_TABLE;
- }
- }
- if( sqliteAuthCheck(pParse, code, zName, 0, zDb) ){
- sqliteFree(zName);
- return;
- }
- }
-#endif
-
-
- /* Before trying to create a temporary table, make sure the Btree for
- ** holding temporary tables is open.
- */
- if( isTemp && db->aDb[1].pBt==0 && !pParse->explain ){
- int rc = sqliteBtreeFactory(db, 0, 0, MAX_PAGES, &db->aDb[1].pBt);
- if( rc!=SQLITE_OK ){
- sqliteErrorMsg(pParse, "unable to open a temporary database "
- "file for storing temporary tables");
- pParse->nErr++;
- return;
- }
- if( db->flags & SQLITE_InTrans ){
- rc = sqliteBtreeBeginTrans(db->aDb[1].pBt);
- if( rc!=SQLITE_OK ){
- sqliteErrorMsg(pParse, "unable to get a write lock on "
- "the temporary database file");
- return;
- }
- }
- }
-
- /* Make sure the new table name does not collide with an existing
- ** index or table name. Issue an error message if it does.
- **
- ** If we are re-reading the sqlite_master table because of a schema
- ** change and a new permanent table is found whose name collides with
- ** an existing temporary table, that is not an error.
- */
- pTable = sqliteFindTable(db, zName, 0);
- iDb = isTemp ? 1 : db->init.iDb;
- if( pTable!=0 && (pTable->iDb==iDb || !db->init.busy) ){
- sqliteErrorMsg(pParse, "table %T already exists", pName);
- sqliteFree(zName);
- return;
- }
- if( (pIdx = sqliteFindIndex(db, zName, 0))!=0 &&
- (pIdx->iDb==0 || !db->init.busy) ){
- sqliteErrorMsg(pParse, "there is already an index named %s", zName);
- sqliteFree(zName);
- return;
- }
- pTable = sqliteMalloc( sizeof(Table) );
- if( pTable==0 ){
- sqliteFree(zName);
- return;
- }
- pTable->zName = zName;
- pTable->nCol = 0;
- pTable->aCol = 0;
- pTable->iPKey = -1;
- pTable->pIndex = 0;
- pTable->iDb = iDb;
- if( pParse->pNewTable ) sqliteDeleteTable(db, pParse->pNewTable);
- pParse->pNewTable = pTable;
-
- /* Begin generating the code that will insert the table record into
- ** the SQLITE_MASTER table. Note in particular that we must go ahead
- ** and allocate the record number for the table entry now. Before any
- ** PRIMARY KEY or UNIQUE keywords are parsed. Those keywords will cause
- ** indices to be created and the table record must come before the
- ** indices. Hence, the record number for the table must be allocated
- ** now.
- */
- if( !db->init.busy && (v = sqliteGetVdbe(pParse))!=0 ){
- sqliteBeginWriteOperation(pParse, 0, isTemp);
- if( !isTemp ){
- sqliteVdbeAddOp(v, OP_Integer, db->file_format, 0);
- sqliteVdbeAddOp(v, OP_SetCookie, 0, 1);
- }
- sqliteOpenMasterTable(v, isTemp);
- sqliteVdbeAddOp(v, OP_NewRecno, 0, 0);
- sqliteVdbeAddOp(v, OP_Dup, 0, 0);
- sqliteVdbeAddOp(v, OP_String, 0, 0);
- sqliteVdbeAddOp(v, OP_PutIntKey, 0, 0);
- }
-}
-
-/*
-** Add a new column to the table currently being constructed.
-**
-** The parser calls this routine once for each column declaration
-** in a CREATE TABLE statement. sqliteStartTable() gets called
-** first to get things going. Then this routine is called for each
-** column.
-*/
-void sqliteAddColumn(Parse *pParse, Token *pName){
- Table *p;
- int i;
- char *z = 0;
- Column *pCol;
- if( (p = pParse->pNewTable)==0 ) return;
- sqliteSetNString(&z, pName->z, pName->n, 0);
- if( z==0 ) return;
- sqliteDequote(z);
- for(i=0; i<p->nCol; i++){
- if( sqliteStrICmp(z, p->aCol[i].zName)==0 ){
- sqliteErrorMsg(pParse, "duplicate column name: %s", z);
- sqliteFree(z);
- return;
- }
- }
- if( (p->nCol & 0x7)==0 ){
- Column *aNew;
- aNew = sqliteRealloc( p->aCol, (p->nCol+8)*sizeof(p->aCol[0]));
- if( aNew==0 ) return;
- p->aCol = aNew;
- }
- pCol = &p->aCol[p->nCol];
- memset(pCol, 0, sizeof(p->aCol[0]));
- pCol->zName = z;
- pCol->sortOrder = SQLITE_SO_NUM;
- p->nCol++;
-}
-
-/*
-** This routine is called by the parser while in the middle of
-** parsing a CREATE TABLE statement. A "NOT NULL" constraint has
-** been seen on a column. This routine sets the notNull flag on
-** the column currently under construction.
-*/
-void sqliteAddNotNull(Parse *pParse, int onError){
- Table *p;
- int i;
- if( (p = pParse->pNewTable)==0 ) return;
- i = p->nCol-1;
- if( i>=0 ) p->aCol[i].notNull = onError;
-}
-
-/*
-** This routine is called by the parser while in the middle of
-** parsing a CREATE TABLE statement. The pFirst token is the first
-** token in the sequence of tokens that describe the type of the
-** column currently under construction. pLast is the last token
-** in the sequence. Use this information to construct a string
-** that contains the typename of the column and store that string
-** in zType.
-*/
-void sqliteAddColumnType(Parse *pParse, Token *pFirst, Token *pLast){
- Table *p;
- int i, j;
- int n;
- char *z, **pz;
- Column *pCol;
- if( (p = pParse->pNewTable)==0 ) return;
- i = p->nCol-1;
- if( i<0 ) return;
- pCol = &p->aCol[i];
- pz = &pCol->zType;
- n = pLast->n + Addr(pLast->z) - Addr(pFirst->z);
- sqliteSetNString(pz, pFirst->z, n, 0);
- z = *pz;
- if( z==0 ) return;
- for(i=j=0; z[i]; i++){
- int c = z[i];
- if( isspace(c) ) continue;
- z[j++] = c;
- }
- z[j] = 0;
- if( pParse->db->file_format>=4 ){
- pCol->sortOrder = sqliteCollateType(z, n);
- }else{
- pCol->sortOrder = SQLITE_SO_NUM;
- }
-}
-
-/*
-** The given token is the default value for the last column added to
-** the table currently under construction. If "minusFlag" is true, it
-** means the value token was preceded by a minus sign.
-**
-** This routine is called by the parser while in the middle of
-** parsing a CREATE TABLE statement.
-*/
-void sqliteAddDefaultValue(Parse *pParse, Token *pVal, int minusFlag){
- Table *p;
- int i;
- char **pz;
- if( (p = pParse->pNewTable)==0 ) return;
- i = p->nCol-1;
- if( i<0 ) return;
- pz = &p->aCol[i].zDflt;
- if( minusFlag ){
- sqliteSetNString(pz, "-", 1, pVal->z, pVal->n, 0);
- }else{
- sqliteSetNString(pz, pVal->z, pVal->n, 0);
- }
- sqliteDequote(*pz);
-}
-
-/*
-** Designate the PRIMARY KEY for the table. pList is a list of names
-** of columns that form the primary key. If pList is NULL, then the
-** most recently added column of the table is the primary key.
-**
-** A table can have at most one primary key. If the table already has
-** a primary key (and this is the second primary key) then create an
-** error.
-**
-** If the PRIMARY KEY is on a single column whose datatype is INTEGER,
-** then we will try to use that column as the row id. (Exception:
-** For backwards compatibility with older databases, do not do this
-** if the file format version number is less than 1.) Set the Table.iPKey
-** field of the table under construction to be the index of the
-** INTEGER PRIMARY KEY column. Table.iPKey is set to -1 if there is
-** no INTEGER PRIMARY KEY.
-**
-** If the key is not an INTEGER PRIMARY KEY, then create a unique
-** index for the key. No index is created for INTEGER PRIMARY KEYs.
-*/
-void sqliteAddPrimaryKey(Parse *pParse, IdList *pList, int onError){
- Table *pTab = pParse->pNewTable;
- char *zType = 0;
- int iCol = -1, i;
- if( pTab==0 ) goto primary_key_exit;
- if( pTab->hasPrimKey ){
- sqliteErrorMsg(pParse,
- "table \"%s\" has more than one primary key", pTab->zName);
- goto primary_key_exit;
- }
- pTab->hasPrimKey = 1;
- if( pList==0 ){
- iCol = pTab->nCol - 1;
- pTab->aCol[iCol].isPrimKey = 1;
- }else{
- for(i=0; i<pList->nId; i++){
- for(iCol=0; iCol<pTab->nCol; iCol++){
- if( sqliteStrICmp(pList->a[i].zName, pTab->aCol[iCol].zName)==0 ) break;
- }
- if( iCol<pTab->nCol ) pTab->aCol[iCol].isPrimKey = 1;
- }
- if( pList->nId>1 ) iCol = -1;
- }
- if( iCol>=0 && iCol<pTab->nCol ){
- zType = pTab->aCol[iCol].zType;
- }
- if( pParse->db->file_format>=1 &&
- zType && sqliteStrICmp(zType, "INTEGER")==0 ){
- pTab->iPKey = iCol;
- pTab->keyConf = onError;
- }else{
- sqliteCreateIndex(pParse, 0, 0, pList, onError, 0, 0);
- pList = 0;
- }
-
-primary_key_exit:
- sqliteIdListDelete(pList);
- return;
-}
-
-/*
-** Return the appropriate collating type given a type name.
-**
-** The collation type is text (SQLITE_SO_TEXT) if the type
-** name contains the character stream "text" or "blob" or
-** "clob". Any other type name is collated as numeric
-** (SQLITE_SO_NUM).
-*/
-int sqliteCollateType(const char *zType, int nType){
- int i;
- for(i=0; i<nType-3; i++){
- int c = *(zType++) | 0x60;
- if( (c=='b' || c=='c') && sqliteStrNICmp(zType, "lob", 3)==0 ){
- return SQLITE_SO_TEXT;
- }
- if( c=='c' && sqliteStrNICmp(zType, "har", 3)==0 ){
- return SQLITE_SO_TEXT;
- }
- if( c=='t' && sqliteStrNICmp(zType, "ext", 3)==0 ){
- return SQLITE_SO_TEXT;
- }
- }
- return SQLITE_SO_NUM;
-}
-
-/*
-** This routine is called by the parser while in the middle of
-** parsing a CREATE TABLE statement. A "COLLATE" clause has
-** been seen on a column. This routine sets the Column.sortOrder on
-** the column currently under construction.
-*/
-void sqliteAddCollateType(Parse *pParse, int collType){
- Table *p;
- int i;
- if( (p = pParse->pNewTable)==0 ) return;
- i = p->nCol-1;
- if( i>=0 ) p->aCol[i].sortOrder = collType;
-}
-
-/*
-** Come up with a new random value for the schema cookie. Make sure
-** the new value is different from the old.
-**
-** The schema cookie is used to determine when the schema for the
-** database changes. After each schema change, the cookie value
-** changes. When a process first reads the schema it records the
-** cookie. Thereafter, whenever it goes to access the database,
-** it checks the cookie to make sure the schema has not changed
-** since it was last read.
-**
-** This plan is not completely bullet-proof. It is possible for
-** the schema to change multiple times and for the cookie to be
-** set back to prior value. But schema changes are infrequent
-** and the probability of hitting the same cookie value is only
-** 1 chance in 2^32. So we're safe enough.
-*/
-void sqliteChangeCookie(sqlite *db, Vdbe *v){
- if( db->next_cookie==db->aDb[0].schema_cookie ){
- unsigned char r;
- sqliteRandomness(1, &r);
- db->next_cookie = db->aDb[0].schema_cookie + r + 1;
- db->flags |= SQLITE_InternChanges;
- sqliteVdbeAddOp(v, OP_Integer, db->next_cookie, 0);
- sqliteVdbeAddOp(v, OP_SetCookie, 0, 0);
- }
-}
-
-/*
-** Measure the number of characters needed to output the given
-** identifier. The number returned includes any quotes used
-** but does not include the null terminator.
-*/
-static int identLength(const char *z){
- int n;
- int needQuote = 0;
- for(n=0; *z; n++, z++){
- if( *z=='\'' ){ n++; needQuote=1; }
- }
- return n + needQuote*2;
-}
-
-/*
-** Write an identifier onto the end of the given string. Add
-** quote characters as needed.
-*/
-static void identPut(char *z, int *pIdx, char *zIdent){
- int i, j, needQuote;
- i = *pIdx;
- for(j=0; zIdent[j]; j++){
- if( !isalnum(zIdent[j]) && zIdent[j]!='_' ) break;
- }
- needQuote = zIdent[j]!=0 || isdigit(zIdent[0])
- || sqliteKeywordCode(zIdent, j)!=TK_ID;
- if( needQuote ) z[i++] = '\'';
- for(j=0; zIdent[j]; j++){
- z[i++] = zIdent[j];
- if( zIdent[j]=='\'' ) z[i++] = '\'';
- }
- if( needQuote ) z[i++] = '\'';
- z[i] = 0;
- *pIdx = i;
-}
-
-/*
-** Generate a CREATE TABLE statement appropriate for the given
-** table. Memory to hold the text of the statement is obtained
-** from sqliteMalloc() and must be freed by the calling function.
-*/
-static char *createTableStmt(Table *p){
- int i, k, n;
- char *zStmt;
- char *zSep, *zSep2, *zEnd;
- n = 0;
- for(i=0; i<p->nCol; i++){
- n += identLength(p->aCol[i].zName);
- }
- n += identLength(p->zName);
- if( n<40 ){
- zSep = "";
- zSep2 = ",";
- zEnd = ")";
- }else{
- zSep = "\n ";
- zSep2 = ",\n ";
- zEnd = "\n)";
- }
- n += 35 + 6*p->nCol;
- zStmt = sqliteMallocRaw( n );
- if( zStmt==0 ) return 0;
- strcpy(zStmt, p->iDb==1 ? "CREATE TEMP TABLE " : "CREATE TABLE ");
- k = strlen(zStmt);
- identPut(zStmt, &k, p->zName);
- zStmt[k++] = '(';
- for(i=0; i<p->nCol; i++){
- strcpy(&zStmt[k], zSep);
- k += strlen(&zStmt[k]);
- zSep = zSep2;
- identPut(zStmt, &k, p->aCol[i].zName);
- }
- strcpy(&zStmt[k], zEnd);
- return zStmt;
-}
-
-/*
-** This routine is called to report the final ")" that terminates
-** a CREATE TABLE statement.
-**
-** The table structure that other action routines have been building
-** is added to the internal hash tables, assuming no errors have
-** occurred.
-**
-** An entry for the table is made in the master table on disk, unless
-** this is a temporary table or db->init.busy==1. When db->init.busy==1
-** it means we are reading the sqlite_master table because we just
-** connected to the database or because the sqlite_master table has
-** recently changes, so the entry for this table already exists in
-** the sqlite_master table. We do not want to create it again.
-**
-** If the pSelect argument is not NULL, it means that this routine
-** was called to create a table generated from a
-** "CREATE TABLE ... AS SELECT ..." statement. The column names of
-** the new table will match the result set of the SELECT.
-*/
-void sqliteEndTable(Parse *pParse, Token *pEnd, Select *pSelect){
- Table *p;
- sqlite *db = pParse->db;
-
- if( (pEnd==0 && pSelect==0) || pParse->nErr || sqlite_malloc_failed ) return;
- p = pParse->pNewTable;
- if( p==0 ) return;
-
- /* If the table is generated from a SELECT, then construct the
- ** list of columns and the text of the table.
- */
- if( pSelect ){
- Table *pSelTab = sqliteResultSetOfSelect(pParse, 0, pSelect);
- if( pSelTab==0 ) return;
- assert( p->aCol==0 );
- p->nCol = pSelTab->nCol;
- p->aCol = pSelTab->aCol;
- pSelTab->nCol = 0;
- pSelTab->aCol = 0;
- sqliteDeleteTable(0, pSelTab);
- }
-
- /* If the db->init.busy is 1 it means we are reading the SQL off the
- ** "sqlite_master" or "sqlite_temp_master" table on the disk.
- ** So do not write to the disk again. Extract the root page number
- ** for the table from the db->init.newTnum field. (The page number
- ** should have been put there by the sqliteOpenCb routine.)
- */
- if( db->init.busy ){
- p->tnum = db->init.newTnum;
- }
-
- /* If not initializing, then create a record for the new table
- ** in the SQLITE_MASTER table of the database. The record number
- ** for the new table entry should already be on the stack.
- **
- ** If this is a TEMPORARY table, write the entry into the auxiliary
- ** file instead of into the main database file.
- */
- if( !db->init.busy ){
- int n;
- Vdbe *v;
-
- v = sqliteGetVdbe(pParse);
- if( v==0 ) return;
- if( p->pSelect==0 ){
- /* A regular table */
- sqliteVdbeOp3(v, OP_CreateTable, 0, p->iDb, (char*)&p->tnum, P3_POINTER);
- }else{
- /* A view */
- sqliteVdbeAddOp(v, OP_Integer, 0, 0);
- }
- p->tnum = 0;
- sqliteVdbeAddOp(v, OP_Pull, 1, 0);
- sqliteVdbeOp3(v, OP_String, 0, 0, p->pSelect==0?"table":"view", P3_STATIC);
- sqliteVdbeOp3(v, OP_String, 0, 0, p->zName, 0);
- sqliteVdbeOp3(v, OP_String, 0, 0, p->zName, 0);
- sqliteVdbeAddOp(v, OP_Dup, 4, 0);
- sqliteVdbeAddOp(v, OP_String, 0, 0);
- if( pSelect ){
- char *z = createTableStmt(p);
- n = z ? strlen(z) : 0;
- sqliteVdbeChangeP3(v, -1, z, n);
- sqliteFree(z);
- }else{
- assert( pEnd!=0 );
- n = Addr(pEnd->z) - Addr(pParse->sFirstToken.z) + 1;
- sqliteVdbeChangeP3(v, -1, pParse->sFirstToken.z, n);
- }
- sqliteVdbeAddOp(v, OP_MakeRecord, 5, 0);
- sqliteVdbeAddOp(v, OP_PutIntKey, 0, 0);
- if( !p->iDb ){
- sqliteChangeCookie(db, v);
- }
- sqliteVdbeAddOp(v, OP_Close, 0, 0);
- if( pSelect ){
- sqliteVdbeAddOp(v, OP_Integer, p->iDb, 0);
- sqliteVdbeAddOp(v, OP_OpenWrite, 1, 0);
- pParse->nTab = 2;
- sqliteSelect(pParse, pSelect, SRT_Table, 1, 0, 0, 0);
- }
- sqliteEndWriteOperation(pParse);
- }
-
- /* Add the table to the in-memory representation of the database.
- */
- if( pParse->explain==0 && pParse->nErr==0 ){
- Table *pOld;
- FKey *pFKey;
- pOld = sqliteHashInsert(&db->aDb[p->iDb].tblHash,
- p->zName, strlen(p->zName)+1, p);
- if( pOld ){
- assert( p==pOld ); /* Malloc must have failed inside HashInsert() */
- return;
- }
- for(pFKey=p->pFKey; pFKey; pFKey=pFKey->pNextFrom){
- int nTo = strlen(pFKey->zTo) + 1;
- pFKey->pNextTo = sqliteHashFind(&db->aDb[p->iDb].aFKey, pFKey->zTo, nTo);
- sqliteHashInsert(&db->aDb[p->iDb].aFKey, pFKey->zTo, nTo, pFKey);
- }
- pParse->pNewTable = 0;
- db->nTable++;
- db->flags |= SQLITE_InternChanges;
- }
-}
-
-/*
-** The parser calls this routine in order to create a new VIEW
-*/
-void sqliteCreateView(
- Parse *pParse, /* The parsing context */
- Token *pBegin, /* The CREATE token that begins the statement */
- Token *pName, /* The token that holds the name of the view */
- Select *pSelect, /* A SELECT statement that will become the new view */
- int isTemp /* TRUE for a TEMPORARY view */
-){
- Table *p;
- int n;
- const char *z;
- Token sEnd;
- DbFixer sFix;
-
- sqliteStartTable(pParse, pBegin, pName, isTemp, 1);
- p = pParse->pNewTable;
- if( p==0 || pParse->nErr ){
- sqliteSelectDelete(pSelect);
- return;
- }
- if( sqliteFixInit(&sFix, pParse, p->iDb, "view", pName)
- && sqliteFixSelect(&sFix, pSelect)
- ){
- sqliteSelectDelete(pSelect);
- return;
- }
-
- /* Make a copy of the entire SELECT statement that defines the view.
- ** This will force all the Expr.token.z values to be dynamically
- ** allocated rather than point to the input string - which means that
- ** they will persist after the current sqlite_exec() call returns.
- */
- p->pSelect = sqliteSelectDup(pSelect);
- sqliteSelectDelete(pSelect);
- if( !pParse->db->init.busy ){
- sqliteViewGetColumnNames(pParse, p);
- }
-
- /* Locate the end of the CREATE VIEW statement. Make sEnd point to
- ** the end.
- */
- sEnd = pParse->sLastToken;
- if( sEnd.z[0]!=0 && sEnd.z[0]!=';' ){
- sEnd.z += sEnd.n;
- }
- sEnd.n = 0;
- n = sEnd.z - pBegin->z;
- z = pBegin->z;
- while( n>0 && (z[n-1]==';' || isspace(z[n-1])) ){ n--; }
- sEnd.z = &z[n-1];
- sEnd.n = 1;
-
- /* Use sqliteEndTable() to add the view to the SQLITE_MASTER table */
- sqliteEndTable(pParse, &sEnd, 0);
- return;
-}
-
-/*
-** The Table structure pTable is really a VIEW. Fill in the names of
-** the columns of the view in the pTable structure. Return the number
-** of errors. If an error is seen leave an error message in pParse->zErrMsg.
-*/
-int sqliteViewGetColumnNames(Parse *pParse, Table *pTable){
- ExprList *pEList;
- Select *pSel;
- Table *pSelTab;
- int nErr = 0;
-
- assert( pTable );
-
- /* A positive nCol means the columns names for this view are
- ** already known.
- */
- if( pTable->nCol>0 ) return 0;
-
- /* A negative nCol is a special marker meaning that we are currently
- ** trying to compute the column names. If we enter this routine with
- ** a negative nCol, it means two or more views form a loop, like this:
- **
- ** CREATE VIEW one AS SELECT * FROM two;
- ** CREATE VIEW two AS SELECT * FROM one;
- **
- ** Actually, this error is caught previously and so the following test
- ** should always fail. But we will leave it in place just to be safe.
- */
- if( pTable->nCol<0 ){
- sqliteErrorMsg(pParse, "view %s is circularly defined", pTable->zName);
- return 1;
- }
-
- /* If we get this far, it means we need to compute the table names.
- */
- assert( pTable->pSelect ); /* If nCol==0, then pTable must be a VIEW */
- pSel = pTable->pSelect;
-
- /* Note that the call to sqliteResultSetOfSelect() will expand any
- ** "*" elements in this list. But we will need to restore the list
- ** back to its original configuration afterwards, so we save a copy of
- ** the original in pEList.
- */
- pEList = pSel->pEList;
- pSel->pEList = sqliteExprListDup(pEList);
- if( pSel->pEList==0 ){
- pSel->pEList = pEList;
- return 1; /* Malloc failed */
- }
- pTable->nCol = -1;
- pSelTab = sqliteResultSetOfSelect(pParse, 0, pSel);
- if( pSelTab ){
- assert( pTable->aCol==0 );
- pTable->nCol = pSelTab->nCol;
- pTable->aCol = pSelTab->aCol;
- pSelTab->nCol = 0;
- pSelTab->aCol = 0;
- sqliteDeleteTable(0, pSelTab);
- DbSetProperty(pParse->db, pTable->iDb, DB_UnresetViews);
- }else{
- pTable->nCol = 0;
- nErr++;
- }
- sqliteSelectUnbind(pSel);
- sqliteExprListDelete(pSel->pEList);
- pSel->pEList = pEList;
- return nErr;
-}
-
-/*
-** Clear the column names from the VIEW pTable.
-**
-** This routine is called whenever any other table or view is modified.
-** The view passed into this routine might depend directly or indirectly
-** on the modified or deleted table so we need to clear the old column
-** names so that they will be recomputed.
-*/
-static void sqliteViewResetColumnNames(Table *pTable){
- int i;
- Column *pCol;
- assert( pTable!=0 && pTable->pSelect!=0 );
- for(i=0, pCol=pTable->aCol; i<pTable->nCol; i++, pCol++){
- sqliteFree(pCol->zName);
- sqliteFree(pCol->zDflt);
- sqliteFree(pCol->zType);
- }
- sqliteFree(pTable->aCol);
- pTable->aCol = 0;
- pTable->nCol = 0;
-}
-
-/*
-** Clear the column names from every VIEW in database idx.
-*/
-static void sqliteViewResetAll(sqlite *db, int idx){
- HashElem *i;
- if( !DbHasProperty(db, idx, DB_UnresetViews) ) return;
- for(i=sqliteHashFirst(&db->aDb[idx].tblHash); i; i=sqliteHashNext(i)){
- Table *pTab = sqliteHashData(i);
- if( pTab->pSelect ){
- sqliteViewResetColumnNames(pTab);
- }
- }
- DbClearProperty(db, idx, DB_UnresetViews);
-}
-
-/*
-** Given a token, look up a table with that name. If not found, leave
-** an error for the parser to find and return NULL.
-*/
-Table *sqliteTableFromToken(Parse *pParse, Token *pTok){
- char *zName;
- Table *pTab;
- zName = sqliteTableNameFromToken(pTok);
- if( zName==0 ) return 0;
- pTab = sqliteFindTable(pParse->db, zName, 0);
- sqliteFree(zName);
- if( pTab==0 ){
- sqliteErrorMsg(pParse, "no such table: %T", pTok);
- }
- return pTab;
-}
-
-/*
-** This routine is called to do the work of a DROP TABLE statement.
-** pName is the name of the table to be dropped.
-*/
-void sqliteDropTable(Parse *pParse, Token *pName, int isView){
- Table *pTable;
- Vdbe *v;
- int base;
- sqlite *db = pParse->db;
- int iDb;
-
- if( pParse->nErr || sqlite_malloc_failed ) return;
- pTable = sqliteTableFromToken(pParse, pName);
- if( pTable==0 ) return;
- iDb = pTable->iDb;
- assert( iDb>=0 && iDb<db->nDb );
-#ifndef SQLITE_OMIT_AUTHORIZATION
- {
- int code;
- const char *zTab = SCHEMA_TABLE(pTable->iDb);
- const char *zDb = db->aDb[pTable->iDb].zName;
- if( sqliteAuthCheck(pParse, SQLITE_DELETE, zTab, 0, zDb)){
- return;
- }
- if( isView ){
- if( iDb==1 ){
- code = SQLITE_DROP_TEMP_VIEW;
- }else{
- code = SQLITE_DROP_VIEW;
- }
- }else{
- if( iDb==1 ){
- code = SQLITE_DROP_TEMP_TABLE;
- }else{
- code = SQLITE_DROP_TABLE;
- }
- }
- if( sqliteAuthCheck(pParse, code, pTable->zName, 0, zDb) ){
- return;
- }
- if( sqliteAuthCheck(pParse, SQLITE_DELETE, pTable->zName, 0, zDb) ){
- return;
- }
- }
-#endif
- if( pTable->readOnly ){
- sqliteErrorMsg(pParse, "table %s may not be dropped", pTable->zName);
- pParse->nErr++;
- return;
- }
- if( isView && pTable->pSelect==0 ){
- sqliteErrorMsg(pParse, "use DROP TABLE to delete table %s", pTable->zName);
- return;
- }
- if( !isView && pTable->pSelect ){
- sqliteErrorMsg(pParse, "use DROP VIEW to delete view %s", pTable->zName);
- return;
- }
-
- /* Generate code to remove the table from the master table
- ** on disk.
- */
- v = sqliteGetVdbe(pParse);
- if( v ){
- static VdbeOpList dropTable[] = {
- { OP_Rewind, 0, ADDR(8), 0},
- { OP_String, 0, 0, 0}, /* 1 */
- { OP_MemStore, 1, 1, 0},
- { OP_MemLoad, 1, 0, 0}, /* 3 */
- { OP_Column, 0, 2, 0},
- { OP_Ne, 0, ADDR(7), 0},
- { OP_Delete, 0, 0, 0},
- { OP_Next, 0, ADDR(3), 0}, /* 7 */
- };
- Index *pIdx;
- Trigger *pTrigger;
- sqliteBeginWriteOperation(pParse, 0, pTable->iDb);
-
- /* Drop all triggers associated with the table being dropped */
- pTrigger = pTable->pTrigger;
- while( pTrigger ){
- assert( pTrigger->iDb==pTable->iDb || pTrigger->iDb==1 );
- sqliteDropTriggerPtr(pParse, pTrigger, 1);
- if( pParse->explain ){
- pTrigger = pTrigger->pNext;
- }else{
- pTrigger = pTable->pTrigger;
- }
- }
-
- /* Drop all SQLITE_MASTER entries that refer to the table */
- sqliteOpenMasterTable(v, pTable->iDb);
- base = sqliteVdbeAddOpList(v, ArraySize(dropTable), dropTable);
- sqliteVdbeChangeP3(v, base+1, pTable->zName, 0);
-
- /* Drop all SQLITE_TEMP_MASTER entries that refer to the table */
- if( pTable->iDb!=1 ){
- sqliteOpenMasterTable(v, 1);
- base = sqliteVdbeAddOpList(v, ArraySize(dropTable), dropTable);
- sqliteVdbeChangeP3(v, base+1, pTable->zName, 0);
- }
-
- if( pTable->iDb==0 ){
- sqliteChangeCookie(db, v);
- }
- sqliteVdbeAddOp(v, OP_Close, 0, 0);
- if( !isView ){
- sqliteVdbeAddOp(v, OP_Destroy, pTable->tnum, pTable->iDb);
- for(pIdx=pTable->pIndex; pIdx; pIdx=pIdx->pNext){
- sqliteVdbeAddOp(v, OP_Destroy, pIdx->tnum, pIdx->iDb);
- }
- }
- sqliteEndWriteOperation(pParse);
- }
-
- /* Delete the in-memory description of the table.
- **
- ** Exception: if the SQL statement began with the EXPLAIN keyword,
- ** then no changes should be made.
- */
- if( !pParse->explain ){
- sqliteUnlinkAndDeleteTable(db, pTable);
- db->flags |= SQLITE_InternChanges;
- }
- sqliteViewResetAll(db, iDb);
-}
-
-/*
-** This routine constructs a P3 string suitable for an OP_MakeIdxKey
-** opcode and adds that P3 string to the most recently inserted instruction
-** in the virtual machine. The P3 string consists of a single character
-** for each column in the index pIdx of table pTab. If the column uses
-** a numeric sort order, then the P3 string character corresponding to
-** that column is 'n'. If the column uses a text sort order, then the
-** P3 string is 't'. See the OP_MakeIdxKey opcode documentation for
-** additional information. See also the sqliteAddKeyType() routine.
-*/
-void sqliteAddIdxKeyType(Vdbe *v, Index *pIdx){
- char *zType;
- Table *pTab;
- int i, n;
- assert( pIdx!=0 && pIdx->pTable!=0 );
- pTab = pIdx->pTable;
- n = pIdx->nColumn;
- zType = sqliteMallocRaw( n+1 );
- if( zType==0 ) return;
- for(i=0; i<n; i++){
- int iCol = pIdx->aiColumn[i];
- assert( iCol>=0 && iCol<pTab->nCol );
- if( (pTab->aCol[iCol].sortOrder & SQLITE_SO_TYPEMASK)==SQLITE_SO_TEXT ){
- zType[i] = 't';
- }else{
- zType[i] = 'n';
- }
- }
- zType[n] = 0;
- sqliteVdbeChangeP3(v, -1, zType, n);
- sqliteFree(zType);
-}
-
-/*
-** This routine is called to create a new foreign key on the table
-** currently under construction. pFromCol determines which columns
-** in the current table point to the foreign key. If pFromCol==0 then
-** connect the key to the last column inserted. pTo is the name of
-** the table referred to. pToCol is a list of tables in the other
-** pTo table that the foreign key points to. flags contains all
-** information about the conflict resolution algorithms specified
-** in the ON DELETE, ON UPDATE and ON INSERT clauses.
-**
-** An FKey structure is created and added to the table currently
-** under construction in the pParse->pNewTable field. The new FKey
-** is not linked into db->aFKey at this point - that does not happen
-** until sqliteEndTable().
-**
-** The foreign key is set for IMMEDIATE processing. A subsequent call
-** to sqliteDeferForeignKey() might change this to DEFERRED.
-*/
-void sqliteCreateForeignKey(
- Parse *pParse, /* Parsing context */
- IdList *pFromCol, /* Columns in this table that point to other table */
- Token *pTo, /* Name of the other table */
- IdList *pToCol, /* Columns in the other table */
- int flags /* Conflict resolution algorithms. */
-){
- Table *p = pParse->pNewTable;
- int nByte;
- int i;
- int nCol;
- char *z;
- FKey *pFKey = 0;
-
- assert( pTo!=0 );
- if( p==0 || pParse->nErr ) goto fk_end;
- if( pFromCol==0 ){
- int iCol = p->nCol-1;
- if( iCol<0 ) goto fk_end;
- if( pToCol && pToCol->nId!=1 ){
- sqliteErrorMsg(pParse, "foreign key on %s"
- " should reference only one column of table %T",
- p->aCol[iCol].zName, pTo);
- goto fk_end;
- }
- nCol = 1;
- }else if( pToCol && pToCol->nId!=pFromCol->nId ){
- sqliteErrorMsg(pParse,
- "number of columns in foreign key does not match the number of "
- "columns in the referenced table");
- goto fk_end;
- }else{
- nCol = pFromCol->nId;
- }
- nByte = sizeof(*pFKey) + nCol*sizeof(pFKey->aCol[0]) + pTo->n + 1;
- if( pToCol ){
- for(i=0; i<pToCol->nId; i++){
- nByte += strlen(pToCol->a[i].zName) + 1;
- }
- }
- pFKey = sqliteMalloc( nByte );
- if( pFKey==0 ) goto fk_end;
- pFKey->pFrom = p;
- pFKey->pNextFrom = p->pFKey;
- z = (char*)&pFKey[1];
- pFKey->aCol = (struct sColMap*)z;
- z += sizeof(struct sColMap)*nCol;
- pFKey->zTo = z;
- memcpy(z, pTo->z, pTo->n);
- z[pTo->n] = 0;
- z += pTo->n+1;
- pFKey->pNextTo = 0;
- pFKey->nCol = nCol;
- if( pFromCol==0 ){
- pFKey->aCol[0].iFrom = p->nCol-1;
- }else{
- for(i=0; i<nCol; i++){
- int j;
- for(j=0; j<p->nCol; j++){
- if( sqliteStrICmp(p->aCol[j].zName, pFromCol->a[i].zName)==0 ){
- pFKey->aCol[i].iFrom = j;
- break;
- }
- }
- if( j>=p->nCol ){
- sqliteErrorMsg(pParse,
- "unknown column \"%s\" in foreign key definition",
- pFromCol->a[i].zName);
- goto fk_end;
- }
- }
- }
- if( pToCol ){
- for(i=0; i<nCol; i++){
- int n = strlen(pToCol->a[i].zName);
- pFKey->aCol[i].zCol = z;
- memcpy(z, pToCol->a[i].zName, n);
- z[n] = 0;
- z += n+1;
- }
- }
- pFKey->isDeferred = 0;
- pFKey->deleteConf = flags & 0xff;
- pFKey->updateConf = (flags >> 8 ) & 0xff;
- pFKey->insertConf = (flags >> 16 ) & 0xff;
-
- /* Link the foreign key to the table as the last step.
- */
- p->pFKey = pFKey;
- pFKey = 0;
-
-fk_end:
- sqliteFree(pFKey);
- sqliteIdListDelete(pFromCol);
- sqliteIdListDelete(pToCol);
-}
-
-/*
-** This routine is called when an INITIALLY IMMEDIATE or INITIALLY DEFERRED
-** clause is seen as part of a foreign key definition. The isDeferred
-** parameter is 1 for INITIALLY DEFERRED and 0 for INITIALLY IMMEDIATE.
-** The behavior of the most recently created foreign key is adjusted
-** accordingly.
-*/
-void sqliteDeferForeignKey(Parse *pParse, int isDeferred){
- Table *pTab;
- FKey *pFKey;
- if( (pTab = pParse->pNewTable)==0 || (pFKey = pTab->pFKey)==0 ) return;
- pFKey->isDeferred = isDeferred;
-}
-
-/*
-** Create a new index for an SQL table. pIndex is the name of the index
-** and pTable is the name of the table that is to be indexed. Both will
-** be NULL for a primary key or an index that is created to satisfy a
-** UNIQUE constraint. If pTable and pIndex are NULL, use pParse->pNewTable
-** as the table to be indexed. pParse->pNewTable is a table that is
-** currently being constructed by a CREATE TABLE statement.
-**
-** pList is a list of columns to be indexed. pList will be NULL if this
-** is a primary key or unique-constraint on the most recent column added
-** to the table currently under construction.
-*/
-void sqliteCreateIndex(
- Parse *pParse, /* All information about this parse */
- Token *pName, /* Name of the index. May be NULL */
- SrcList *pTable, /* Name of the table to index. Use pParse->pNewTable if 0 */
- IdList *pList, /* A list of columns to be indexed */
- int onError, /* OE_Abort, OE_Ignore, OE_Replace, or OE_None */
- Token *pStart, /* The CREATE token that begins a CREATE TABLE statement */
- Token *pEnd /* The ")" that closes the CREATE INDEX statement */
-){
- Table *pTab; /* Table to be indexed */
- Index *pIndex; /* The index to be created */
- char *zName = 0;
- int i, j;
- Token nullId; /* Fake token for an empty ID list */
- DbFixer sFix; /* For assigning database names to pTable */
- int isTemp; /* True for a temporary index */
- sqlite *db = pParse->db;
-
- if( pParse->nErr || sqlite_malloc_failed ) goto exit_create_index;
- if( db->init.busy
- && sqliteFixInit(&sFix, pParse, db->init.iDb, "index", pName)
- && sqliteFixSrcList(&sFix, pTable)
- ){
- goto exit_create_index;
- }
-
- /*
- ** Find the table that is to be indexed. Return early if not found.
- */
- if( pTable!=0 ){
- assert( pName!=0 );
- assert( pTable->nSrc==1 );
- pTab = sqliteSrcListLookup(pParse, pTable);
- }else{
- assert( pName==0 );
- pTab = pParse->pNewTable;
- }
- if( pTab==0 || pParse->nErr ) goto exit_create_index;
- if( pTab->readOnly ){
- sqliteErrorMsg(pParse, "table %s may not be indexed", pTab->zName);
- goto exit_create_index;
- }
- if( pTab->iDb>=2 && db->init.busy==0 ){
- sqliteErrorMsg(pParse, "table %s may not have indices added", pTab->zName);
- goto exit_create_index;
- }
- if( pTab->pSelect ){
- sqliteErrorMsg(pParse, "views may not be indexed");
- goto exit_create_index;
- }
- isTemp = pTab->iDb==1;
-
- /*
- ** Find the name of the index. Make sure there is not already another
- ** index or table with the same name.
- **
- ** Exception: If we are reading the names of permanent indices from the
- ** sqlite_master table (because some other process changed the schema) and
- ** one of the index names collides with the name of a temporary table or
- ** index, then we will continue to process this index.
- **
- ** If pName==0 it means that we are
- ** dealing with a primary key or UNIQUE constraint. We have to invent our
- ** own name.
- */
- if( pName && !db->init.busy ){
- Index *pISameName; /* Another index with the same name */
- Table *pTSameName; /* A table with same name as the index */
- zName = sqliteStrNDup(pName->z, pName->n);
- if( zName==0 ) goto exit_create_index;
- if( (pISameName = sqliteFindIndex(db, zName, 0))!=0 ){
- sqliteErrorMsg(pParse, "index %s already exists", zName);
- goto exit_create_index;
- }
- if( (pTSameName = sqliteFindTable(db, zName, 0))!=0 ){
- sqliteErrorMsg(pParse, "there is already a table named %s", zName);
- goto exit_create_index;
- }
- }else if( pName==0 ){
- char zBuf[30];
- int n;
- Index *pLoop;
- for(pLoop=pTab->pIndex, n=1; pLoop; pLoop=pLoop->pNext, n++){}
- sprintf(zBuf,"%d)",n);
- zName = 0;
- sqliteSetString(&zName, "(", pTab->zName, " autoindex ", zBuf, (char*)0);
- if( zName==0 ) goto exit_create_index;
- }else{
- zName = sqliteStrNDup(pName->z, pName->n);
- }
-
- /* Check for authorization to create an index.
- */
-#ifndef SQLITE_OMIT_AUTHORIZATION
- {
- const char *zDb = db->aDb[pTab->iDb].zName;
-
- assert( pTab->iDb==db->init.iDb || isTemp );
- if( sqliteAuthCheck(pParse, SQLITE_INSERT, SCHEMA_TABLE(isTemp), 0, zDb) ){
- goto exit_create_index;
- }
- i = SQLITE_CREATE_INDEX;
- if( isTemp ) i = SQLITE_CREATE_TEMP_INDEX;
- if( sqliteAuthCheck(pParse, i, zName, pTab->zName, zDb) ){
- goto exit_create_index;
- }
- }
-#endif
-
- /* If pList==0, it means this routine was called to make a primary
- ** key out of the last column added to the table under construction.
- ** So create a fake list to simulate this.
- */
- if( pList==0 ){
- nullId.z = pTab->aCol[pTab->nCol-1].zName;
- nullId.n = strlen(nullId.z);
- pList = sqliteIdListAppend(0, &nullId);
- if( pList==0 ) goto exit_create_index;
- }
-
- /*
- ** Allocate the index structure.
- */
- pIndex = sqliteMalloc( sizeof(Index) + strlen(zName) + 1 +
- sizeof(int)*pList->nId );
- if( pIndex==0 ) goto exit_create_index;
- pIndex->aiColumn = (int*)&pIndex[1];
- pIndex->zName = (char*)&pIndex->aiColumn[pList->nId];
- strcpy(pIndex->zName, zName);
- pIndex->pTable = pTab;
- pIndex->nColumn = pList->nId;
- pIndex->onError = onError;
- pIndex->autoIndex = pName==0;
- pIndex->iDb = isTemp ? 1 : db->init.iDb;
-
- /* Scan the names of the columns of the table to be indexed and
- ** load the column indices into the Index structure. Report an error
- ** if any column is not found.
- */
- for(i=0; i<pList->nId; i++){
- for(j=0; j<pTab->nCol; j++){
- if( sqliteStrICmp(pList->a[i].zName, pTab->aCol[j].zName)==0 ) break;
- }
- if( j>=pTab->nCol ){
- sqliteErrorMsg(pParse, "table %s has no column named %s",
- pTab->zName, pList->a[i].zName);
- sqliteFree(pIndex);
- goto exit_create_index;
- }
- pIndex->aiColumn[i] = j;
- }
-
- /* Link the new Index structure to its table and to the other
- ** in-memory database structures.
- */
- if( !pParse->explain ){
- Index *p;
- p = sqliteHashInsert(&db->aDb[pIndex->iDb].idxHash,
- pIndex->zName, strlen(pIndex->zName)+1, pIndex);
- if( p ){
- assert( p==pIndex ); /* Malloc must have failed */
- sqliteFree(pIndex);
- goto exit_create_index;
- }
- db->flags |= SQLITE_InternChanges;
- }
-
- /* When adding an index to the list of indices for a table, make
- ** sure all indices labeled OE_Replace come after all those labeled
- ** OE_Ignore. This is necessary for the correct operation of UPDATE
- ** and INSERT.
- */
- if( onError!=OE_Replace || pTab->pIndex==0
- || pTab->pIndex->onError==OE_Replace){
- pIndex->pNext = pTab->pIndex;
- pTab->pIndex = pIndex;
- }else{
- Index *pOther = pTab->pIndex;
- while( pOther->pNext && pOther->pNext->onError!=OE_Replace ){
- pOther = pOther->pNext;
- }
- pIndex->pNext = pOther->pNext;
- pOther->pNext = pIndex;
- }
-
- /* If the db->init.busy is 1 it means we are reading the SQL off the
- ** "sqlite_master" table on the disk. So do not write to the disk
- ** again. Extract the table number from the db->init.newTnum field.
- */
- if( db->init.busy && pTable!=0 ){
- pIndex->tnum = db->init.newTnum;
- }
-
- /* If the db->init.busy is 0 then create the index on disk. This
- ** involves writing the index into the master table and filling in the
- ** index with the current table contents.
- **
- ** The db->init.busy is 0 when the user first enters a CREATE INDEX
- ** command. db->init.busy is 1 when a database is opened and
- ** CREATE INDEX statements are read out of the master table. In
- ** the latter case the index already exists on disk, which is why
- ** we don't want to recreate it.
- **
- ** If pTable==0 it means this index is generated as a primary key
- ** or UNIQUE constraint of a CREATE TABLE statement. Since the table
- ** has just been created, it contains no data and the index initialization
- ** step can be skipped.
- */
- else if( db->init.busy==0 ){
- int n;
- Vdbe *v;
- int lbl1, lbl2;
- int i;
- int addr;
-
- v = sqliteGetVdbe(pParse);
- if( v==0 ) goto exit_create_index;
- if( pTable!=0 ){
- sqliteBeginWriteOperation(pParse, 0, isTemp);
- sqliteOpenMasterTable(v, isTemp);
- }
- sqliteVdbeAddOp(v, OP_NewRecno, 0, 0);
- sqliteVdbeOp3(v, OP_String, 0, 0, "index", P3_STATIC);
- sqliteVdbeOp3(v, OP_String, 0, 0, pIndex->zName, 0);
- sqliteVdbeOp3(v, OP_String, 0, 0, pTab->zName, 0);
- sqliteVdbeOp3(v, OP_CreateIndex, 0, isTemp,(char*)&pIndex->tnum,P3_POINTER);
- pIndex->tnum = 0;
- if( pTable ){
- sqliteVdbeCode(v,
- OP_Dup, 0, 0,
- OP_Integer, isTemp, 0,
- OP_OpenWrite, 1, 0,
- 0);
- }
- addr = sqliteVdbeAddOp(v, OP_String, 0, 0);
- if( pStart && pEnd ){
- n = Addr(pEnd->z) - Addr(pStart->z) + 1;
- sqliteVdbeChangeP3(v, addr, pStart->z, n);
- }
- sqliteVdbeAddOp(v, OP_MakeRecord, 5, 0);
- sqliteVdbeAddOp(v, OP_PutIntKey, 0, 0);
- if( pTable ){
- sqliteVdbeAddOp(v, OP_Integer, pTab->iDb, 0);
- sqliteVdbeOp3(v, OP_OpenRead, 2, pTab->tnum, pTab->zName, 0);
- lbl2 = sqliteVdbeMakeLabel(v);
- sqliteVdbeAddOp(v, OP_Rewind, 2, lbl2);
- lbl1 = sqliteVdbeAddOp(v, OP_Recno, 2, 0);
- for(i=0; i<pIndex->nColumn; i++){
- int iCol = pIndex->aiColumn[i];
- if( pTab->iPKey==iCol ){
- sqliteVdbeAddOp(v, OP_Dup, i, 0);
- }else{
- sqliteVdbeAddOp(v, OP_Column, 2, iCol);
- }
- }
- sqliteVdbeAddOp(v, OP_MakeIdxKey, pIndex->nColumn, 0);
- if( db->file_format>=4 ) sqliteAddIdxKeyType(v, pIndex);
- sqliteVdbeOp3(v, OP_IdxPut, 1, pIndex->onError!=OE_None,
- "indexed columns are not unique", P3_STATIC);
- sqliteVdbeAddOp(v, OP_Next, 2, lbl1);
- sqliteVdbeResolveLabel(v, lbl2);
- sqliteVdbeAddOp(v, OP_Close, 2, 0);
- sqliteVdbeAddOp(v, OP_Close, 1, 0);
- }
- if( pTable!=0 ){
- if( !isTemp ){
- sqliteChangeCookie(db, v);
- }
- sqliteVdbeAddOp(v, OP_Close, 0, 0);
- sqliteEndWriteOperation(pParse);
- }
- }
-
- /* Clean up before exiting */
-exit_create_index:
- sqliteIdListDelete(pList);
- sqliteSrcListDelete(pTable);
- sqliteFree(zName);
- return;
-}
-
-/*
-** This routine will drop an existing named index. This routine
-** implements the DROP INDEX statement.
-*/
-void sqliteDropIndex(Parse *pParse, SrcList *pName){
- Index *pIndex;
- Vdbe *v;
- sqlite *db = pParse->db;
-
- if( pParse->nErr || sqlite_malloc_failed ) return;
- assert( pName->nSrc==1 );
- pIndex = sqliteFindIndex(db, pName->a[0].zName, pName->a[0].zDatabase);
- if( pIndex==0 ){
- sqliteErrorMsg(pParse, "no such index: %S", pName, 0);
- goto exit_drop_index;
- }
- if( pIndex->autoIndex ){
- sqliteErrorMsg(pParse, "index associated with UNIQUE "
- "or PRIMARY KEY constraint cannot be dropped", 0);
- goto exit_drop_index;
- }
- if( pIndex->iDb>1 ){
- sqliteErrorMsg(pParse, "cannot alter schema of attached "
- "databases", 0);
- goto exit_drop_index;
- }
-#ifndef SQLITE_OMIT_AUTHORIZATION
- {
- int code = SQLITE_DROP_INDEX;
- Table *pTab = pIndex->pTable;
- const char *zDb = db->aDb[pIndex->iDb].zName;
- const char *zTab = SCHEMA_TABLE(pIndex->iDb);
- if( sqliteAuthCheck(pParse, SQLITE_DELETE, zTab, 0, zDb) ){
- goto exit_drop_index;
- }
- if( pIndex->iDb ) code = SQLITE_DROP_TEMP_INDEX;
- if( sqliteAuthCheck(pParse, code, pIndex->zName, pTab->zName, zDb) ){
- goto exit_drop_index;
- }
- }
-#endif
-
- /* Generate code to remove the index and from the master table */
- v = sqliteGetVdbe(pParse);
- if( v ){
- static VdbeOpList dropIndex[] = {
- { OP_Rewind, 0, ADDR(9), 0},
- { OP_String, 0, 0, 0}, /* 1 */
- { OP_MemStore, 1, 1, 0},
- { OP_MemLoad, 1, 0, 0}, /* 3 */
- { OP_Column, 0, 1, 0},
- { OP_Eq, 0, ADDR(8), 0},
- { OP_Next, 0, ADDR(3), 0},
- { OP_Goto, 0, ADDR(9), 0},
- { OP_Delete, 0, 0, 0}, /* 8 */
- };
- int base;
-
- sqliteBeginWriteOperation(pParse, 0, pIndex->iDb);
- sqliteOpenMasterTable(v, pIndex->iDb);
- base = sqliteVdbeAddOpList(v, ArraySize(dropIndex), dropIndex);
- sqliteVdbeChangeP3(v, base+1, pIndex->zName, 0);
- if( pIndex->iDb==0 ){
- sqliteChangeCookie(db, v);
- }
- sqliteVdbeAddOp(v, OP_Close, 0, 0);
- sqliteVdbeAddOp(v, OP_Destroy, pIndex->tnum, pIndex->iDb);
- sqliteEndWriteOperation(pParse);
- }
-
- /* Delete the in-memory description of this index.
- */
- if( !pParse->explain ){
- sqliteUnlinkAndDeleteIndex(db, pIndex);
- db->flags |= SQLITE_InternChanges;
- }
-
-exit_drop_index:
- sqliteSrcListDelete(pName);
-}
-
-/*
-** Append a new element to the given IdList. Create a new IdList if
-** need be.
-**
-** A new IdList is returned, or NULL if malloc() fails.
-*/
-IdList *sqliteIdListAppend(IdList *pList, Token *pToken){
- if( pList==0 ){
- pList = sqliteMalloc( sizeof(IdList) );
- if( pList==0 ) return 0;
- pList->nAlloc = 0;
- }
- if( pList->nId>=pList->nAlloc ){
- struct IdList_item *a;
- pList->nAlloc = pList->nAlloc*2 + 5;
- a = sqliteRealloc(pList->a, pList->nAlloc*sizeof(pList->a[0]) );
- if( a==0 ){
- sqliteIdListDelete(pList);
- return 0;
- }
- pList->a = a;
- }
- memset(&pList->a[pList->nId], 0, sizeof(pList->a[0]));
- if( pToken ){
- char **pz = &pList->a[pList->nId].zName;
- sqliteSetNString(pz, pToken->z, pToken->n, 0);
- if( *pz==0 ){
- sqliteIdListDelete(pList);
- return 0;
- }else{
- sqliteDequote(*pz);
- }
- }
- pList->nId++;
- return pList;
-}
-
-/*
-** Append a new table name to the given SrcList. Create a new SrcList if
-** need be. A new entry is created in the SrcList even if pToken is NULL.
-**
-** A new SrcList is returned, or NULL if malloc() fails.
-**
-** If pDatabase is not null, it means that the table has an optional
-** database name prefix. Like this: "database.table". The pDatabase
-** points to the table name and the pTable points to the database name.
-** The SrcList.a[].zName field is filled with the table name which might
-** come from pTable (if pDatabase is NULL) or from pDatabase.
-** SrcList.a[].zDatabase is filled with the database name from pTable,
-** or with NULL if no database is specified.
-**
-** In other words, if call like this:
-**
-** sqliteSrcListAppend(A,B,0);
-**
-** Then B is a table name and the database name is unspecified. If called
-** like this:
-**
-** sqliteSrcListAppend(A,B,C);
-**
-** Then C is the table name and B is the database name.
-*/
-SrcList *sqliteSrcListAppend(SrcList *pList, Token *pTable, Token *pDatabase){
- if( pList==0 ){
- pList = sqliteMalloc( sizeof(SrcList) );
- if( pList==0 ) return 0;
- pList->nAlloc = 1;
- }
- if( pList->nSrc>=pList->nAlloc ){
- SrcList *pNew;
- pList->nAlloc *= 2;
- pNew = sqliteRealloc(pList,
- sizeof(*pList) + (pList->nAlloc-1)*sizeof(pList->a[0]) );
- if( pNew==0 ){
- sqliteSrcListDelete(pList);
- return 0;
- }
- pList = pNew;
- }
- memset(&pList->a[pList->nSrc], 0, sizeof(pList->a[0]));
- if( pDatabase && pDatabase->z==0 ){
- pDatabase = 0;
- }
- if( pDatabase && pTable ){
- Token *pTemp = pDatabase;
- pDatabase = pTable;
- pTable = pTemp;
- }
- if( pTable ){
- char **pz = &pList->a[pList->nSrc].zName;
- sqliteSetNString(pz, pTable->z, pTable->n, 0);
- if( *pz==0 ){
- sqliteSrcListDelete(pList);
- return 0;
- }else{
- sqliteDequote(*pz);
- }
- }
- if( pDatabase ){
- char **pz = &pList->a[pList->nSrc].zDatabase;
- sqliteSetNString(pz, pDatabase->z, pDatabase->n, 0);
- if( *pz==0 ){
- sqliteSrcListDelete(pList);
- return 0;
- }else{
- sqliteDequote(*pz);
- }
- }
- pList->a[pList->nSrc].iCursor = -1;
- pList->nSrc++;
- return pList;
-}
-
-/*
-** Assign cursors to all tables in a SrcList
-*/
-void sqliteSrcListAssignCursors(Parse *pParse, SrcList *pList){
- int i;
- for(i=0; i<pList->nSrc; i++){
- if( pList->a[i].iCursor<0 ){
- pList->a[i].iCursor = pParse->nTab++;
- }
- }
-}
-
-/*
-** Add an alias to the last identifier on the given identifier list.
-*/
-void sqliteSrcListAddAlias(SrcList *pList, Token *pToken){
- if( pList && pList->nSrc>0 ){
- int i = pList->nSrc - 1;
- sqliteSetNString(&pList->a[i].zAlias, pToken->z, pToken->n, 0);
- sqliteDequote(pList->a[i].zAlias);
- }
-}
-
-/*
-** Delete an IdList.
-*/
-void sqliteIdListDelete(IdList *pList){
- int i;
- if( pList==0 ) return;
- for(i=0; i<pList->nId; i++){
- sqliteFree(pList->a[i].zName);
- }
- sqliteFree(pList->a);
- sqliteFree(pList);
-}
-
-/*
-** Return the index in pList of the identifier named zId. Return -1
-** if not found.
-*/
-int sqliteIdListIndex(IdList *pList, const char *zName){
- int i;
- if( pList==0 ) return -1;
- for(i=0; i<pList->nId; i++){
- if( sqliteStrICmp(pList->a[i].zName, zName)==0 ) return i;
- }
- return -1;
-}
-
-/*
-** Delete an entire SrcList including all its substructure.
-*/
-void sqliteSrcListDelete(SrcList *pList){
- int i;
- if( pList==0 ) return;
- for(i=0; i<pList->nSrc; i++){
- sqliteFree(pList->a[i].zDatabase);
- sqliteFree(pList->a[i].zName);
- sqliteFree(pList->a[i].zAlias);
- if( pList->a[i].pTab && pList->a[i].pTab->isTransient ){
- sqliteDeleteTable(0, pList->a[i].pTab);
- }
- sqliteSelectDelete(pList->a[i].pSelect);
- sqliteExprDelete(pList->a[i].pOn);
- sqliteIdListDelete(pList->a[i].pUsing);
- }
- sqliteFree(pList);
-}
-
-/*
-** Begin a transaction
-*/
-void sqliteBeginTransaction(Parse *pParse, int onError){
- sqlite *db;
-
- if( pParse==0 || (db=pParse->db)==0 || db->aDb[0].pBt==0 ) return;
- if( pParse->nErr || sqlite_malloc_failed ) return;
- if( sqliteAuthCheck(pParse, SQLITE_TRANSACTION, "BEGIN", 0, 0) ) return;
- if( db->flags & SQLITE_InTrans ){
- sqliteErrorMsg(pParse, "cannot start a transaction within a transaction");
- return;
- }
- sqliteBeginWriteOperation(pParse, 0, 0);
- if( !pParse->explain ){
- db->flags |= SQLITE_InTrans;
- db->onError = onError;
- }
-}
-
-/*
-** Commit a transaction
-*/
-void sqliteCommitTransaction(Parse *pParse){
- sqlite *db;
-
- if( pParse==0 || (db=pParse->db)==0 || db->aDb[0].pBt==0 ) return;
- if( pParse->nErr || sqlite_malloc_failed ) return;
- if( sqliteAuthCheck(pParse, SQLITE_TRANSACTION, "COMMIT", 0, 0) ) return;
- if( (db->flags & SQLITE_InTrans)==0 ){
- sqliteErrorMsg(pParse, "cannot commit - no transaction is active");
- return;
- }
- if( !pParse->explain ){
- db->flags &= ~SQLITE_InTrans;
- }
- sqliteEndWriteOperation(pParse);
- if( !pParse->explain ){
- db->onError = OE_Default;
- }
-}
-
-/*
-** Rollback a transaction
-*/
-void sqliteRollbackTransaction(Parse *pParse){
- sqlite *db;
- Vdbe *v;
-
- if( pParse==0 || (db=pParse->db)==0 || db->aDb[0].pBt==0 ) return;
- if( pParse->nErr || sqlite_malloc_failed ) return;
- if( sqliteAuthCheck(pParse, SQLITE_TRANSACTION, "ROLLBACK", 0, 0) ) return;
- if( (db->flags & SQLITE_InTrans)==0 ){
- sqliteErrorMsg(pParse, "cannot rollback - no transaction is active");
- return;
- }
- v = sqliteGetVdbe(pParse);
- if( v ){
- sqliteVdbeAddOp(v, OP_Rollback, 0, 0);
- }
- if( !pParse->explain ){
- db->flags &= ~SQLITE_InTrans;
- db->onError = OE_Default;
- }
-}
-
-/*
-** Generate VDBE code that will verify the schema cookie for all
-** named database files.
-*/
-void sqliteCodeVerifySchema(Parse *pParse, int iDb){
- sqlite *db = pParse->db;
- Vdbe *v = sqliteGetVdbe(pParse);
- assert( iDb>=0 && iDb<db->nDb );
- assert( db->aDb[iDb].pBt!=0 );
- if( iDb!=1 && !DbHasProperty(db, iDb, DB_Cookie) ){
- sqliteVdbeAddOp(v, OP_VerifyCookie, iDb, db->aDb[iDb].schema_cookie);
- DbSetProperty(db, iDb, DB_Cookie);
- }
-}
-
-/*
-** Generate VDBE code that prepares for doing an operation that
-** might change the database.
-**
-** This routine starts a new transaction if we are not already within
-** a transaction. If we are already within a transaction, then a checkpoint
-** is set if the setCheckpoint parameter is true. A checkpoint should
-** be set for operations that might fail (due to a constraint) part of
-** the way through and which will need to undo some writes without having to
-** rollback the whole transaction. For operations where all constraints
-** can be checked before any changes are made to the database, it is never
-** necessary to undo a write and the checkpoint should not be set.
-**
-** Only database iDb and the temp database are made writable by this call.
-** If iDb==0, then the main and temp databases are made writable. If
-** iDb==1 then only the temp database is made writable. If iDb>1 then the
-** specified auxiliary database and the temp database are made writable.
-*/
-void sqliteBeginWriteOperation(Parse *pParse, int setCheckpoint, int iDb){
- Vdbe *v;
- sqlite *db = pParse->db;
- if( DbHasProperty(db, iDb, DB_Locked) ) return;
- v = sqliteGetVdbe(pParse);
- if( v==0 ) return;
- if( !db->aDb[iDb].inTrans ){
- sqliteVdbeAddOp(v, OP_Transaction, iDb, 0);
- DbSetProperty(db, iDb, DB_Locked);
- sqliteCodeVerifySchema(pParse, iDb);
- if( iDb!=1 ){
- sqliteBeginWriteOperation(pParse, setCheckpoint, 1);
- }
- }else if( setCheckpoint ){
- sqliteVdbeAddOp(v, OP_Checkpoint, iDb, 0);
- DbSetProperty(db, iDb, DB_Locked);
- }
-}
-
-/*
-** Generate code that concludes an operation that may have changed
-** the database. If a statement transaction was started, then emit
-** an OP_Commit that will cause the changes to be committed to disk.
-**
-** Note that checkpoints are automatically committed at the end of
-** a statement. Note also that there can be multiple calls to
-** sqliteBeginWriteOperation() but there should only be a single
-** call to sqliteEndWriteOperation() at the conclusion of the statement.
-*/
-void sqliteEndWriteOperation(Parse *pParse){
- Vdbe *v;
- sqlite *db = pParse->db;
- if( pParse->trigStack ) return; /* if this is in a trigger */
- v = sqliteGetVdbe(pParse);
- if( v==0 ) return;
- if( db->flags & SQLITE_InTrans ){
- /* A BEGIN has executed. Do not commit until we see an explicit
- ** COMMIT statement. */
- }else{
- sqliteVdbeAddOp(v, OP_Commit, 0, 0);
- }
-}
diff --git a/ext/sqlite/libsqlite/src/config_static.w32.h b/ext/sqlite/libsqlite/src/config_static.w32.h
deleted file mode 100755
index d9893024fa..0000000000
--- a/ext/sqlite/libsqlite/src/config_static.w32.h
+++ /dev/null
@@ -1 +0,0 @@
-#define SQLITE_PTR_SZ 4 \ No newline at end of file
diff --git a/ext/sqlite/libsqlite/src/copy.c b/ext/sqlite/libsqlite/src/copy.c
deleted file mode 100644
index 2f70fce17b..0000000000
--- a/ext/sqlite/libsqlite/src/copy.c
+++ /dev/null
@@ -1,110 +0,0 @@
-/*
-** 2003 April 6
-**
-** The author disclaims copyright to this source code. In place of
-** a legal notice, here is a blessing:
-**
-** May you do good and not evil.
-** May you find forgiveness for yourself and forgive others.
-** May you share freely, never taking more than you give.
-**
-*************************************************************************
-** This file contains code used to implement the COPY command.
-**
-** $Id$
-*/
-#include "sqliteInt.h"
-
-/*
-** The COPY command is for compatibility with PostgreSQL and specificially
-** for the ability to read the output of pg_dump. The format is as
-** follows:
-**
-** COPY table FROM file [USING DELIMITERS string]
-**
-** "table" is an existing table name. We will read lines of code from
-** file to fill this table with data. File might be "stdin". The optional
-** delimiter string identifies the field separators. The default is a tab.
-*/
-void sqliteCopy(
- Parse *pParse, /* The parser context */
- SrcList *pTableName, /* The name of the table into which we will insert */
- Token *pFilename, /* The file from which to obtain information */
- Token *pDelimiter, /* Use this as the field delimiter */
- int onError /* What to do if a constraint fails */
-){
- Table *pTab;
- int i;
- Vdbe *v;
- int addr, end;
- char *zFile = 0;
- const char *zDb;
- sqlite *db = pParse->db;
-
-
- if( sqlite_malloc_failed ) goto copy_cleanup;
- assert( pTableName->nSrc==1 );
- pTab = sqliteSrcListLookup(pParse, pTableName);
- if( pTab==0 || sqliteIsReadOnly(pParse, pTab, 0) ) goto copy_cleanup;
- zFile = sqliteStrNDup(pFilename->z, pFilename->n);
- sqliteDequote(zFile);
- assert( pTab->iDb<db->nDb );
- zDb = db->aDb[pTab->iDb].zName;
- if( sqliteAuthCheck(pParse, SQLITE_INSERT, pTab->zName, 0, zDb)
- || sqliteAuthCheck(pParse, SQLITE_COPY, pTab->zName, zFile, zDb) ){
- goto copy_cleanup;
- }
- v = sqliteGetVdbe(pParse);
- if( v ){
- sqliteBeginWriteOperation(pParse, 1, pTab->iDb);
- addr = sqliteVdbeOp3(v, OP_FileOpen, 0, 0, pFilename->z, pFilename->n);
- sqliteVdbeDequoteP3(v, addr);
- sqliteOpenTableAndIndices(pParse, pTab, 0);
- if( db->flags & SQLITE_CountRows ){
- sqliteVdbeAddOp(v, OP_Integer, 0, 0); /* Initialize the row count */
- }
- end = sqliteVdbeMakeLabel(v);
- addr = sqliteVdbeAddOp(v, OP_FileRead, pTab->nCol, end);
- if( pDelimiter ){
- sqliteVdbeChangeP3(v, addr, pDelimiter->z, pDelimiter->n);
- sqliteVdbeDequoteP3(v, addr);
- }else{
- sqliteVdbeChangeP3(v, addr, "\t", 1);
- }
- if( pTab->iPKey>=0 ){
- sqliteVdbeAddOp(v, OP_FileColumn, pTab->iPKey, 0);
- sqliteVdbeAddOp(v, OP_MustBeInt, 0, 0);
- }else{
- sqliteVdbeAddOp(v, OP_NewRecno, 0, 0);
- }
- for(i=0; i<pTab->nCol; i++){
- if( i==pTab->iPKey ){
- /* The integer primary key column is filled with NULL since its
- ** value is always pulled from the record number */
- sqliteVdbeAddOp(v, OP_String, 0, 0);
- }else{
- sqliteVdbeAddOp(v, OP_FileColumn, i, 0);
- }
- }
- sqliteGenerateConstraintChecks(pParse, pTab, 0, 0, pTab->iPKey>=0,
- 0, onError, addr);
- sqliteCompleteInsertion(pParse, pTab, 0, 0, 0, 0, -1);
- if( (db->flags & SQLITE_CountRows)!=0 ){
- sqliteVdbeAddOp(v, OP_AddImm, 1, 0); /* Increment row count */
- }
- sqliteVdbeAddOp(v, OP_Goto, 0, addr);
- sqliteVdbeResolveLabel(v, end);
- sqliteVdbeAddOp(v, OP_Noop, 0, 0);
- sqliteEndWriteOperation(pParse);
- if( db->flags & SQLITE_CountRows ){
- sqliteVdbeAddOp(v, OP_ColumnName, 0, 1);
- sqliteVdbeChangeP3(v, -1, "rows inserted", P3_STATIC);
- sqliteVdbeAddOp(v, OP_Callback, 1, 0);
- }
- }
-
-copy_cleanup:
- sqliteSrcListDelete(pTableName);
- sqliteFree(zFile);
- return;
-}
diff --git a/ext/sqlite/libsqlite/src/date.c b/ext/sqlite/libsqlite/src/date.c
deleted file mode 100644
index d7382aefae..0000000000
--- a/ext/sqlite/libsqlite/src/date.c
+++ /dev/null
@@ -1,873 +0,0 @@
-/*
-** 2003 October 31
-**
-** The author disclaims copyright to this source code. In place of
-** a legal notice, here is a blessing:
-**
-** May you do good and not evil.
-** May you find forgiveness for yourself and forgive others.
-** May you share freely, never taking more than you give.
-**
-*************************************************************************
-** This file contains the C functions that implement date and time
-** functions for SQLite.
-**
-** There is only one exported symbol in this file - the function
-** sqliteRegisterDateTimeFunctions() found at the bottom of the file.
-** All other code has file scope.
-**
-** $Id$
-**
-** NOTES:
-**
-** SQLite processes all times and dates as Julian Day numbers. The
-** dates and times are stored as the number of days since noon
-** in Greenwich on November 24, 4714 B.C. according to the Gregorian
-** calendar system.
-**
-** 1970-01-01 00:00:00 is JD 2440587.5
-** 2000-01-01 00:00:00 is JD 2451544.5
-**
-** This implemention requires years to be expressed as a 4-digit number
-** which means that only dates between 0000-01-01 and 9999-12-31 can
-** be represented, even though julian day numbers allow a much wider
-** range of dates.
-**
-** The Gregorian calendar system is used for all dates and times,
-** even those that predate the Gregorian calendar. Historians usually
-** use the Julian calendar for dates prior to 1582-10-15 and for some
-** dates afterwards, depending on locale. Beware of this difference.
-**
-** The conversion algorithms are implemented based on descriptions
-** in the following text:
-**
-** Jean Meeus
-** Astronomical Algorithms, 2nd Edition, 1998
-** ISBM 0-943396-61-1
-** Willmann-Bell, Inc
-** Richmond, Virginia (USA)
-*/
-#include "os.h"
-#include "sqliteInt.h"
-#include <ctype.h>
-#include <stdlib.h>
-#include <assert.h>
-#include <time.h>
-
-#ifndef SQLITE_OMIT_DATETIME_FUNCS
-
-/*
-** A structure for holding a single date and time.
-*/
-typedef struct DateTime DateTime;
-struct DateTime {
- double rJD; /* The julian day number */
- int Y, M, D; /* Year, month, and day */
- int h, m; /* Hour and minutes */
- int tz; /* Timezone offset in minutes */
- double s; /* Seconds */
- char validYMD; /* True if Y,M,D are valid */
- char validHMS; /* True if h,m,s are valid */
- char validJD; /* True if rJD is valid */
- char validTZ; /* True if tz is valid */
-};
-
-
-/*
-** Convert zDate into one or more integers. Additional arguments
-** come in groups of 5 as follows:
-**
-** N number of digits in the integer
-** min minimum allowed value of the integer
-** max maximum allowed value of the integer
-** nextC first character after the integer
-** pVal where to write the integers value.
-**
-** Conversions continue until one with nextC==0 is encountered.
-** The function returns the number of successful conversions.
-*/
-static int getDigits(const char *zDate, ...){
- va_list ap;
- int val;
- int N;
- int min;
- int max;
- int nextC;
- int *pVal;
- int cnt = 0;
- va_start(ap, zDate);
- do{
- N = va_arg(ap, int);
- min = va_arg(ap, int);
- max = va_arg(ap, int);
- nextC = va_arg(ap, int);
- pVal = va_arg(ap, int*);
- val = 0;
- while( N-- ){
- if( !isdigit(*zDate) ){
- return cnt;
- }
- val = val*10 + *zDate - '0';
- zDate++;
- }
- if( val<min || val>max || (nextC!=0 && nextC!=*zDate) ){
- return cnt;
- }
- *pVal = val;
- zDate++;
- cnt++;
- }while( nextC );
- return cnt;
-}
-
-/*
-** Read text from z[] and convert into a floating point number. Return
-** the number of digits converted.
-*/
-static int getValue(const char *z, double *pR){
- const char *zEnd;
- *pR = sqliteAtoF(z, &zEnd);
- return zEnd - z;
-}
-
-/*
-** Parse a timezone extension on the end of a date-time.
-** The extension is of the form:
-**
-** (+/-)HH:MM
-**
-** If the parse is successful, write the number of minutes
-** of change in *pnMin and return 0. If a parser error occurs,
-** return 0.
-**
-** A missing specifier is not considered an error.
-*/
-static int parseTimezone(const char *zDate, DateTime *p){
- int sgn = 0;
- int nHr, nMn;
- while( isspace(*zDate) ){ zDate++; }
- p->tz = 0;
- if( *zDate=='-' ){
- sgn = -1;
- }else if( *zDate=='+' ){
- sgn = +1;
- }else{
- return *zDate!=0;
- }
- zDate++;
- if( getDigits(zDate, 2, 0, 14, ':', &nHr, 2, 0, 59, 0, &nMn)!=2 ){
- return 1;
- }
- zDate += 5;
- p->tz = sgn*(nMn + nHr*60);
- while( isspace(*zDate) ){ zDate++; }
- return *zDate!=0;
-}
-
-/*
-** Parse times of the form HH:MM or HH:MM:SS or HH:MM:SS.FFFF.
-** The HH, MM, and SS must each be exactly 2 digits. The
-** fractional seconds FFFF can be one or more digits.
-**
-** Return 1 if there is a parsing error and 0 on success.
-*/
-static int parseHhMmSs(const char *zDate, DateTime *p){
- int h, m, s;
- double ms = 0.0;
- if( getDigits(zDate, 2, 0, 24, ':', &h, 2, 0, 59, 0, &m)!=2 ){
- return 1;
- }
- zDate += 5;
- if( *zDate==':' ){
- zDate++;
- if( getDigits(zDate, 2, 0, 59, 0, &s)!=1 ){
- return 1;
- }
- zDate += 2;
- if( *zDate=='.' && isdigit(zDate[1]) ){
- double rScale = 1.0;
- zDate++;
- while( isdigit(*zDate) ){
- ms = ms*10.0 + *zDate - '0';
- rScale *= 10.0;
- zDate++;
- }
- ms /= rScale;
- }
- }else{
- s = 0;
- }
- p->validJD = 0;
- p->validHMS = 1;
- p->h = h;
- p->m = m;
- p->s = s + ms;
- if( parseTimezone(zDate, p) ) return 1;
- p->validTZ = p->tz!=0;
- return 0;
-}
-
-/*
-** Convert from YYYY-MM-DD HH:MM:SS to julian day. We always assume
-** that the YYYY-MM-DD is according to the Gregorian calendar.
-**
-** Reference: Meeus page 61
-*/
-static void computeJD(DateTime *p){
- int Y, M, D, A, B, X1, X2;
-
- if( p->validJD ) return;
- if( p->validYMD ){
- Y = p->Y;
- M = p->M;
- D = p->D;
- }else{
- Y = 2000; /* If no YMD specified, assume 2000-Jan-01 */
- M = 1;
- D = 1;
- }
- if( M<=2 ){
- Y--;
- M += 12;
- }
- A = Y/100;
- B = 2 - A + (A/4);
- X1 = 365.25*(Y+4716);
- X2 = 30.6001*(M+1);
- p->rJD = X1 + X2 + D + B - 1524.5;
- p->validJD = 1;
- p->validYMD = 0;
- if( p->validHMS ){
- p->rJD += (p->h*3600.0 + p->m*60.0 + p->s)/86400.0;
- if( p->validTZ ){
- p->rJD += p->tz*60/86400.0;
- p->validHMS = 0;
- p->validTZ = 0;
- }
- }
-}
-
-/*
-** Parse dates of the form
-**
-** YYYY-MM-DD HH:MM:SS.FFF
-** YYYY-MM-DD HH:MM:SS
-** YYYY-MM-DD HH:MM
-** YYYY-MM-DD
-**
-** Write the result into the DateTime structure and return 0
-** on success and 1 if the input string is not a well-formed
-** date.
-*/
-static int parseYyyyMmDd(const char *zDate, DateTime *p){
- int Y, M, D, neg;
-
- if( zDate[0]=='-' ){
- zDate++;
- neg = 1;
- }else{
- neg = 0;
- }
- if( getDigits(zDate,4,0,9999,'-',&Y,2,1,12,'-',&M,2,1,31,0,&D)!=3 ){
- return 1;
- }
- zDate += 10;
- while( isspace(*zDate) ){ zDate++; }
- if( parseHhMmSs(zDate, p)==0 ){
- /* We got the time */
- }else if( *zDate==0 ){
- p->validHMS = 0;
- }else{
- return 1;
- }
- p->validJD = 0;
- p->validYMD = 1;
- p->Y = neg ? -Y : Y;
- p->M = M;
- p->D = D;
- if( p->validTZ ){
- computeJD(p);
- }
- return 0;
-}
-
-/*
-** Attempt to parse the given string into a Julian Day Number. Return
-** the number of errors.
-**
-** The following are acceptable forms for the input string:
-**
-** YYYY-MM-DD HH:MM:SS.FFF +/-HH:MM
-** DDDD.DD
-** now
-**
-** In the first form, the +/-HH:MM is always optional. The fractional
-** seconds extension (the ".FFF") is optional. The seconds portion
-** (":SS.FFF") is option. The year and date can be omitted as long
-** as there is a time string. The time string can be omitted as long
-** as there is a year and date.
-*/
-static int parseDateOrTime(const char *zDate, DateTime *p){
- memset(p, 0, sizeof(*p));
- if( parseYyyyMmDd(zDate,p)==0 ){
- return 0;
- }else if( parseHhMmSs(zDate, p)==0 ){
- return 0;
- }else if( sqliteStrICmp(zDate,"now")==0){
- double r;
- if( sqliteOsCurrentTime(&r)==0 ){
- p->rJD = r;
- p->validJD = 1;
- return 0;
- }
- return 1;
- }else if( sqliteIsNumber(zDate) ){
- p->rJD = sqliteAtoF(zDate, 0);
- p->validJD = 1;
- return 0;
- }
- return 1;
-}
-
-/*
-** Compute the Year, Month, and Day from the julian day number.
-*/
-static void computeYMD(DateTime *p){
- int Z, A, B, C, D, E, X1;
- if( p->validYMD ) return;
- if( !p->validJD ){
- p->Y = 2000;
- p->M = 1;
- p->D = 1;
- }else{
- Z = p->rJD + 0.5;
- A = (Z - 1867216.25)/36524.25;
- A = Z + 1 + A - (A/4);
- B = A + 1524;
- C = (B - 122.1)/365.25;
- D = 365.25*C;
- E = (B-D)/30.6001;
- X1 = 30.6001*E;
- p->D = B - D - X1;
- p->M = E<14 ? E-1 : E-13;
- p->Y = p->M>2 ? C - 4716 : C - 4715;
- }
- p->validYMD = 1;
-}
-
-/*
-** Compute the Hour, Minute, and Seconds from the julian day number.
-*/
-static void computeHMS(DateTime *p){
- int Z, s;
- if( p->validHMS ) return;
- Z = p->rJD + 0.5;
- s = (p->rJD + 0.5 - Z)*86400000.0 + 0.5;
- p->s = 0.001*s;
- s = p->s;
- p->s -= s;
- p->h = s/3600;
- s -= p->h*3600;
- p->m = s/60;
- p->s += s - p->m*60;
- p->validHMS = 1;
-}
-
-/*
-** Compute both YMD and HMS
-*/
-static void computeYMD_HMS(DateTime *p){
- computeYMD(p);
- computeHMS(p);
-}
-
-/*
-** Clear the YMD and HMS and the TZ
-*/
-static void clearYMD_HMS_TZ(DateTime *p){
- p->validYMD = 0;
- p->validHMS = 0;
- p->validTZ = 0;
-}
-
-/*
-** Compute the difference (in days) between localtime and UTC (a.k.a. GMT)
-** for the time value p where p is in UTC.
-*/
-static double localtimeOffset(DateTime *p){
- DateTime x, y;
- time_t t;
- struct tm *pTm;
- x = *p;
- computeYMD_HMS(&x);
- if( x.Y<1971 || x.Y>=2038 ){
- x.Y = 2000;
- x.M = 1;
- x.D = 1;
- x.h = 0;
- x.m = 0;
- x.s = 0.0;
- } else {
- int s = x.s + 0.5;
- x.s = s;
- }
- x.tz = 0;
- x.validJD = 0;
- computeJD(&x);
- t = (x.rJD-2440587.5)*86400.0 + 0.5;
- sqliteOsEnterMutex();
- pTm = localtime(&t);
- y.Y = pTm->tm_year + 1900;
- y.M = pTm->tm_mon + 1;
- y.D = pTm->tm_mday;
- y.h = pTm->tm_hour;
- y.m = pTm->tm_min;
- y.s = pTm->tm_sec;
- sqliteOsLeaveMutex();
- y.validYMD = 1;
- y.validHMS = 1;
- y.validJD = 0;
- y.validTZ = 0;
- computeJD(&y);
- return y.rJD - x.rJD;
-}
-
-/*
-** Process a modifier to a date-time stamp. The modifiers are
-** as follows:
-**
-** NNN days
-** NNN hours
-** NNN minutes
-** NNN.NNNN seconds
-** NNN months
-** NNN years
-** start of month
-** start of year
-** start of week
-** start of day
-** weekday N
-** unixepoch
-** localtime
-** utc
-**
-** Return 0 on success and 1 if there is any kind of error.
-*/
-static int parseModifier(const char *zMod, DateTime *p){
- int rc = 1;
- int n;
- double r;
- char *z, zBuf[30];
- z = zBuf;
- for(n=0; n<sizeof(zBuf)-1 && zMod[n]; n++){
- z[n] = tolower(zMod[n]);
- }
- z[n] = 0;
- switch( z[0] ){
- case 'l': {
- /* localtime
- **
- ** Assuming the current time value is UTC (a.k.a. GMT), shift it to
- ** show local time.
- */
- if( strcmp(z, "localtime")==0 ){
- computeJD(p);
- p->rJD += localtimeOffset(p);
- clearYMD_HMS_TZ(p);
- rc = 0;
- }
- break;
- }
- case 'u': {
- /*
- ** unixepoch
- **
- ** Treat the current value of p->rJD as the number of
- ** seconds since 1970. Convert to a real julian day number.
- */
- if( strcmp(z, "unixepoch")==0 && p->validJD ){
- p->rJD = p->rJD/86400.0 + 2440587.5;
- clearYMD_HMS_TZ(p);
- rc = 0;
- }else if( strcmp(z, "utc")==0 ){
- double c1;
- computeJD(p);
- c1 = localtimeOffset(p);
- p->rJD -= c1;
- clearYMD_HMS_TZ(p);
- p->rJD += c1 - localtimeOffset(p);
- rc = 0;
- }
- break;
- }
- case 'w': {
- /*
- ** weekday N
- **
- ** Move the date to the same time on the next occurrance of
- ** weekday N where 0==Sunday, 1==Monday, and so forth. If the
- ** date is already on the appropriate weekday, this is a no-op.
- */
- if( strncmp(z, "weekday ", 8)==0 && getValue(&z[8],&r)>0
- && (n=r)==r && n>=0 && r<7 ){
- int Z;
- computeYMD_HMS(p);
- p->validTZ = 0;
- p->validJD = 0;
- computeJD(p);
- Z = p->rJD + 1.5;
- Z %= 7;
- if( Z>n ) Z -= 7;
- p->rJD += n - Z;
- clearYMD_HMS_TZ(p);
- rc = 0;
- }
- break;
- }
- case 's': {
- /*
- ** start of TTTTT
- **
- ** Move the date backwards to the beginning of the current day,
- ** or month or year.
- */
- if( strncmp(z, "start of ", 9)!=0 ) break;
- z += 9;
- computeYMD(p);
- p->validHMS = 1;
- p->h = p->m = 0;
- p->s = 0.0;
- p->validTZ = 0;
- p->validJD = 0;
- if( strcmp(z,"month")==0 ){
- p->D = 1;
- rc = 0;
- }else if( strcmp(z,"year")==0 ){
- computeYMD(p);
- p->M = 1;
- p->D = 1;
- rc = 0;
- }else if( strcmp(z,"day")==0 ){
- rc = 0;
- }
- break;
- }
- case '+':
- case '-':
- case '0':
- case '1':
- case '2':
- case '3':
- case '4':
- case '5':
- case '6':
- case '7':
- case '8':
- case '9': {
- n = getValue(z, &r);
- if( n<=0 ) break;
- if( z[n]==':' ){
- /* A modifier of the form (+|-)HH:MM:SS.FFF adds (or subtracts) the
- ** specified number of hours, minutes, seconds, and fractional seconds
- ** to the time. The ".FFF" may be omitted. The ":SS.FFF" may be
- ** omitted.
- */
- const char *z2 = z;
- DateTime tx;
- int day;
- if( !isdigit(*z2) ) z2++;
- memset(&tx, 0, sizeof(tx));
- if( parseHhMmSs(z2, &tx) ) break;
- computeJD(&tx);
- tx.rJD -= 0.5;
- day = (int)tx.rJD;
- tx.rJD -= day;
- if( z[0]=='-' ) tx.rJD = -tx.rJD;
- computeJD(p);
- clearYMD_HMS_TZ(p);
- p->rJD += tx.rJD;
- rc = 0;
- break;
- }
- z += n;
- while( isspace(z[0]) ) z++;
- n = strlen(z);
- if( n>10 || n<3 ) break;
- if( z[n-1]=='s' ){ z[n-1] = 0; n--; }
- computeJD(p);
- rc = 0;
- if( n==3 && strcmp(z,"day")==0 ){
- p->rJD += r;
- }else if( n==4 && strcmp(z,"hour")==0 ){
- p->rJD += r/24.0;
- }else if( n==6 && strcmp(z,"minute")==0 ){
- p->rJD += r/(24.0*60.0);
- }else if( n==6 && strcmp(z,"second")==0 ){
- p->rJD += r/(24.0*60.0*60.0);
- }else if( n==5 && strcmp(z,"month")==0 ){
- int x, y;
- computeYMD_HMS(p);
- p->M += r;
- x = p->M>0 ? (p->M-1)/12 : (p->M-12)/12;
- p->Y += x;
- p->M -= x*12;
- p->validJD = 0;
- computeJD(p);
- y = r;
- if( y!=r ){
- p->rJD += (r - y)*30.0;
- }
- }else if( n==4 && strcmp(z,"year")==0 ){
- computeYMD_HMS(p);
- p->Y += r;
- p->validJD = 0;
- computeJD(p);
- }else{
- rc = 1;
- }
- clearYMD_HMS_TZ(p);
- break;
- }
- default: {
- break;
- }
- }
- return rc;
-}
-
-/*
-** Process time function arguments. argv[0] is a date-time stamp.
-** argv[1] and following are modifiers. Parse them all and write
-** the resulting time into the DateTime structure p. Return 0
-** on success and 1 if there are any errors.
-*/
-static int isDate(int argc, const char **argv, DateTime *p){
- int i;
- if( argc==0 ) return 1;
- if( argv[0]==0 || parseDateOrTime(argv[0], p) ) return 1;
- for(i=1; i<argc; i++){
- if( argv[i]==0 || parseModifier(argv[i], p) ) return 1;
- }
- return 0;
-}
-
-
-/*
-** The following routines implement the various date and time functions
-** of SQLite.
-*/
-
-/*
-** julianday( TIMESTRING, MOD, MOD, ...)
-**
-** Return the julian day number of the date specified in the arguments
-*/
-static void juliandayFunc(sqlite_func *context, int argc, const char **argv){
- DateTime x;
- if( isDate(argc, argv, &x)==0 ){
- computeJD(&x);
- sqlite_set_result_double(context, x.rJD);
- }
-}
-
-/*
-** datetime( TIMESTRING, MOD, MOD, ...)
-**
-** Return YYYY-MM-DD HH:MM:SS
-*/
-static void datetimeFunc(sqlite_func *context, int argc, const char **argv){
- DateTime x;
- if( isDate(argc, argv, &x)==0 ){
- char zBuf[100];
- computeYMD_HMS(&x);
- sprintf(zBuf, "%04d-%02d-%02d %02d:%02d:%02d",x.Y, x.M, x.D, x.h, x.m,
- (int)(x.s));
- sqlite_set_result_string(context, zBuf, -1);
- }
-}
-
-/*
-** time( TIMESTRING, MOD, MOD, ...)
-**
-** Return HH:MM:SS
-*/
-static void timeFunc(sqlite_func *context, int argc, const char **argv){
- DateTime x;
- if( isDate(argc, argv, &x)==0 ){
- char zBuf[100];
- computeHMS(&x);
- sprintf(zBuf, "%02d:%02d:%02d", x.h, x.m, (int)x.s);
- sqlite_set_result_string(context, zBuf, -1);
- }
-}
-
-/*
-** date( TIMESTRING, MOD, MOD, ...)
-**
-** Return YYYY-MM-DD
-*/
-static void dateFunc(sqlite_func *context, int argc, const char **argv){
- DateTime x;
- if( isDate(argc, argv, &x)==0 ){
- char zBuf[100];
- computeYMD(&x);
- sprintf(zBuf, "%04d-%02d-%02d", x.Y, x.M, x.D);
- sqlite_set_result_string(context, zBuf, -1);
- }
-}
-
-/*
-** strftime( FORMAT, TIMESTRING, MOD, MOD, ...)
-**
-** Return a string described by FORMAT. Conversions as follows:
-**
-** %d day of month
-** %f ** fractional seconds SS.SSS
-** %H hour 00-24
-** %j day of year 000-366
-** %J ** Julian day number
-** %m month 01-12
-** %M minute 00-59
-** %s seconds since 1970-01-01
-** %S seconds 00-59
-** %w day of week 0-6 sunday==0
-** %W week of year 00-53
-** %Y year 0000-9999
-** %% %
-*/
-static void strftimeFunc(sqlite_func *context, int argc, const char **argv){
- DateTime x;
- int n, i, j;
- char *z;
- const char *zFmt = argv[0];
- char zBuf[100];
- if( argv[0]==0 || isDate(argc-1, argv+1, &x) ) return;
- for(i=0, n=1; zFmt[i]; i++, n++){
- if( zFmt[i]=='%' ){
- switch( zFmt[i+1] ){
- case 'd':
- case 'H':
- case 'm':
- case 'M':
- case 'S':
- case 'W':
- n++;
- /* fall thru */
- case 'w':
- case '%':
- break;
- case 'f':
- n += 8;
- break;
- case 'j':
- n += 3;
- break;
- case 'Y':
- n += 8;
- break;
- case 's':
- case 'J':
- n += 50;
- break;
- default:
- return; /* ERROR. return a NULL */
- }
- i++;
- }
- }
- if( n<sizeof(zBuf) ){
- z = zBuf;
- }else{
- z = sqliteMalloc( n );
- if( z==0 ) return;
- }
- computeJD(&x);
- computeYMD_HMS(&x);
- for(i=j=0; zFmt[i]; i++){
- if( zFmt[i]!='%' ){
- z[j++] = zFmt[i];
- }else{
- i++;
- switch( zFmt[i] ){
- case 'd': sprintf(&z[j],"%02d",x.D); j+=2; break;
- case 'f': {
- int s = x.s;
- int ms = (x.s - s)*1000.0;
- sprintf(&z[j],"%02d.%03d",s,ms);
- j += strlen(&z[j]);
- break;
- }
- case 'H': sprintf(&z[j],"%02d",x.h); j+=2; break;
- case 'W': /* Fall thru */
- case 'j': {
- int n;
- DateTime y = x;
- y.validJD = 0;
- y.M = 1;
- y.D = 1;
- computeJD(&y);
- n = x.rJD - y.rJD + 1;
- if( zFmt[i]=='W' ){
- sprintf(&z[j],"%02d",(n+6)/7);
- j += 2;
- }else{
- sprintf(&z[j],"%03d",n);
- j += 3;
- }
- break;
- }
- case 'J': sprintf(&z[j],"%.16g",x.rJD); j+=strlen(&z[j]); break;
- case 'm': sprintf(&z[j],"%02d",x.M); j+=2; break;
- case 'M': sprintf(&z[j],"%02d",x.m); j+=2; break;
- case 's': {
- sprintf(&z[j],"%d",(int)((x.rJD-2440587.5)*86400.0 + 0.5));
- j += strlen(&z[j]);
- break;
- }
- case 'S': sprintf(&z[j],"%02d",(int)(x.s+0.5)); j+=2; break;
- case 'w': z[j++] = (((int)(x.rJD+1.5)) % 7) + '0'; break;
- case 'Y': sprintf(&z[j],"%04d",x.Y); j+=strlen(&z[j]); break;
- case '%': z[j++] = '%'; break;
- }
- }
- }
- z[j] = 0;
- sqlite_set_result_string(context, z, -1);
- if( z!=zBuf ){
- sqliteFree(z);
- }
-}
-
-
-#endif /* !defined(SQLITE_OMIT_DATETIME_FUNCS) */
-
-/*
-** This function registered all of the above C functions as SQL
-** functions. This should be the only routine in this file with
-** external linkage.
-*/
-void sqliteRegisterDateTimeFunctions(sqlite *db){
- static struct {
- char *zName;
- int nArg;
- int dataType;
- void (*xFunc)(sqlite_func*,int,const char**);
- } aFuncs[] = {
-#ifndef SQLITE_OMIT_DATETIME_FUNCS
- { "julianday", -1, SQLITE_NUMERIC, juliandayFunc },
- { "date", -1, SQLITE_TEXT, dateFunc },
- { "time", -1, SQLITE_TEXT, timeFunc },
- { "datetime", -1, SQLITE_TEXT, datetimeFunc },
- { "strftime", -1, SQLITE_TEXT, strftimeFunc },
-#endif
- };
- int i;
-
- for(i=0; i<sizeof(aFuncs)/sizeof(aFuncs[0]); i++){
- sqlite_create_function(db, aFuncs[i].zName,
- aFuncs[i].nArg, aFuncs[i].xFunc, 0);
- if( aFuncs[i].xFunc ){
- sqlite_function_type(db, aFuncs[i].zName, aFuncs[i].dataType);
- }
- }
-}
diff --git a/ext/sqlite/libsqlite/src/delete.c b/ext/sqlite/libsqlite/src/delete.c
deleted file mode 100644
index d83c314c79..0000000000
--- a/ext/sqlite/libsqlite/src/delete.c
+++ /dev/null
@@ -1,393 +0,0 @@
-/*
-** 2001 September 15
-**
-** The author disclaims copyright to this source code. In place of
-** a legal notice, here is a blessing:
-**
-** May you do good and not evil.
-** May you find forgiveness for yourself and forgive others.
-** May you share freely, never taking more than you give.
-**
-*************************************************************************
-** This file contains C code routines that are called by the parser
-** to handle DELETE FROM statements.
-**
-** $Id$
-*/
-#include "sqliteInt.h"
-
-/*
-** Look up every table that is named in pSrc. If any table is not found,
-** add an error message to pParse->zErrMsg and return NULL. If all tables
-** are found, return a pointer to the last table.
-*/
-Table *sqliteSrcListLookup(Parse *pParse, SrcList *pSrc){
- Table *pTab = 0;
- int i;
- for(i=0; i<pSrc->nSrc; i++){
- const char *zTab = pSrc->a[i].zName;
- const char *zDb = pSrc->a[i].zDatabase;
- pTab = sqliteLocateTable(pParse, zTab, zDb);
- pSrc->a[i].pTab = pTab;
- }
- return pTab;
-}
-
-/*
-** Check to make sure the given table is writable. If it is not
-** writable, generate an error message and return 1. If it is
-** writable return 0;
-*/
-int sqliteIsReadOnly(Parse *pParse, Table *pTab, int viewOk){
- if( pTab->readOnly ){
- sqliteErrorMsg(pParse, "table %s may not be modified", pTab->zName);
- return 1;
- }
- if( !viewOk && pTab->pSelect ){
- sqliteErrorMsg(pParse, "cannot modify %s because it is a view",pTab->zName);
- return 1;
- }
- return 0;
-}
-
-/*
-** Process a DELETE FROM statement.
-*/
-void sqliteDeleteFrom(
- Parse *pParse, /* The parser context */
- SrcList *pTabList, /* The table from which we should delete things */
- Expr *pWhere /* The WHERE clause. May be null */
-){
- Vdbe *v; /* The virtual database engine */
- Table *pTab; /* The table from which records will be deleted */
- const char *zDb; /* Name of database holding pTab */
- int end, addr; /* A couple addresses of generated code */
- int i; /* Loop counter */
- WhereInfo *pWInfo; /* Information about the WHERE clause */
- Index *pIdx; /* For looping over indices of the table */
- int iCur; /* VDBE Cursor number for pTab */
- sqlite *db; /* Main database structure */
- int isView; /* True if attempting to delete from a view */
- AuthContext sContext; /* Authorization context */
-
- int row_triggers_exist = 0; /* True if any triggers exist */
- int before_triggers; /* True if there are BEFORE triggers */
- int after_triggers; /* True if there are AFTER triggers */
- int oldIdx = -1; /* Cursor for the OLD table of AFTER triggers */
-
- sContext.pParse = 0;
- if( pParse->nErr || sqlite_malloc_failed ){
- pTabList = 0;
- goto delete_from_cleanup;
- }
- db = pParse->db;
- assert( pTabList->nSrc==1 );
-
- /* Locate the table which we want to delete. This table has to be
- ** put in an SrcList structure because some of the subroutines we
- ** will be calling are designed to work with multiple tables and expect
- ** an SrcList* parameter instead of just a Table* parameter.
- */
- pTab = sqliteSrcListLookup(pParse, pTabList);
- if( pTab==0 ) goto delete_from_cleanup;
- before_triggers = sqliteTriggersExist(pParse, pTab->pTrigger,
- TK_DELETE, TK_BEFORE, TK_ROW, 0);
- after_triggers = sqliteTriggersExist(pParse, pTab->pTrigger,
- TK_DELETE, TK_AFTER, TK_ROW, 0);
- row_triggers_exist = before_triggers || after_triggers;
- isView = pTab->pSelect!=0;
- if( sqliteIsReadOnly(pParse, pTab, before_triggers) ){
- goto delete_from_cleanup;
- }
- assert( pTab->iDb<db->nDb );
- zDb = db->aDb[pTab->iDb].zName;
- if( sqliteAuthCheck(pParse, SQLITE_DELETE, pTab->zName, 0, zDb) ){
- goto delete_from_cleanup;
- }
-
- /* If pTab is really a view, make sure it has been initialized.
- */
- if( isView && sqliteViewGetColumnNames(pParse, pTab) ){
- goto delete_from_cleanup;
- }
-
- /* Allocate a cursor used to store the old.* data for a trigger.
- */
- if( row_triggers_exist ){
- oldIdx = pParse->nTab++;
- }
-
- /* Resolve the column names in all the expressions.
- */
- assert( pTabList->nSrc==1 );
- iCur = pTabList->a[0].iCursor = pParse->nTab++;
- if( pWhere ){
- if( sqliteExprResolveIds(pParse, pTabList, 0, pWhere) ){
- goto delete_from_cleanup;
- }
- if( sqliteExprCheck(pParse, pWhere, 0, 0) ){
- goto delete_from_cleanup;
- }
- }
-
- /* Start the view context
- */
- if( isView ){
- sqliteAuthContextPush(pParse, &sContext, pTab->zName);
- }
-
- /* Begin generating code.
- */
- v = sqliteGetVdbe(pParse);
- if( v==0 ){
- goto delete_from_cleanup;
- }
- sqliteBeginWriteOperation(pParse, row_triggers_exist, pTab->iDb);
-
- /* If we are trying to delete from a view, construct that view into
- ** a temporary table.
- */
- if( isView ){
- Select *pView = sqliteSelectDup(pTab->pSelect);
- sqliteSelect(pParse, pView, SRT_TempTable, iCur, 0, 0, 0);
- sqliteSelectDelete(pView);
- }
-
- /* Initialize the counter of the number of rows deleted, if
- ** we are counting rows.
- */
- if( db->flags & SQLITE_CountRows ){
- sqliteVdbeAddOp(v, OP_Integer, 0, 0);
- }
-
- /* Special case: A DELETE without a WHERE clause deletes everything.
- ** It is easier just to erase the whole table. Note, however, that
- ** this means that the row change count will be incorrect.
- */
- if( pWhere==0 && !row_triggers_exist ){
- if( db->flags & SQLITE_CountRows ){
- /* If counting rows deleted, just count the total number of
- ** entries in the table. */
- int endOfLoop = sqliteVdbeMakeLabel(v);
- int addr;
- if( !isView ){
- sqliteVdbeAddOp(v, OP_Integer, pTab->iDb, 0);
- sqliteVdbeAddOp(v, OP_OpenRead, iCur, pTab->tnum);
- }
- sqliteVdbeAddOp(v, OP_Rewind, iCur, sqliteVdbeCurrentAddr(v)+2);
- addr = sqliteVdbeAddOp(v, OP_AddImm, 1, 0);
- sqliteVdbeAddOp(v, OP_Next, iCur, addr);
- sqliteVdbeResolveLabel(v, endOfLoop);
- sqliteVdbeAddOp(v, OP_Close, iCur, 0);
- }
- if( !isView ){
- sqliteVdbeAddOp(v, OP_Clear, pTab->tnum, pTab->iDb);
- for(pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext){
- sqliteVdbeAddOp(v, OP_Clear, pIdx->tnum, pIdx->iDb);
- }
- }
- }
-
- /* The usual case: There is a WHERE clause so we have to scan through
- ** the table and pick which records to delete.
- */
- else{
- /* Begin the database scan
- */
- pWInfo = sqliteWhereBegin(pParse, pTabList, pWhere, 1, 0);
- if( pWInfo==0 ) goto delete_from_cleanup;
-
- /* Remember the key of every item to be deleted.
- */
- sqliteVdbeAddOp(v, OP_ListWrite, 0, 0);
- if( db->flags & SQLITE_CountRows ){
- sqliteVdbeAddOp(v, OP_AddImm, 1, 0);
- }
-
- /* End the database scan loop.
- */
- sqliteWhereEnd(pWInfo);
-
- /* Open the pseudo-table used to store OLD if there are triggers.
- */
- if( row_triggers_exist ){
- sqliteVdbeAddOp(v, OP_OpenPseudo, oldIdx, 0);
- }
-
- /* Delete every item whose key was written to the list during the
- ** database scan. We have to delete items after the scan is complete
- ** because deleting an item can change the scan order.
- */
- sqliteVdbeAddOp(v, OP_ListRewind, 0, 0);
- end = sqliteVdbeMakeLabel(v);
-
- /* This is the beginning of the delete loop when there are
- ** row triggers.
- */
- if( row_triggers_exist ){
- addr = sqliteVdbeAddOp(v, OP_ListRead, 0, end);
- sqliteVdbeAddOp(v, OP_Dup, 0, 0);
- if( !isView ){
- sqliteVdbeAddOp(v, OP_Integer, pTab->iDb, 0);
- sqliteVdbeAddOp(v, OP_OpenRead, iCur, pTab->tnum);
- }
- sqliteVdbeAddOp(v, OP_MoveTo, iCur, 0);
-
- sqliteVdbeAddOp(v, OP_Recno, iCur, 0);
- sqliteVdbeAddOp(v, OP_RowData, iCur, 0);
- sqliteVdbeAddOp(v, OP_PutIntKey, oldIdx, 0);
- if( !isView ){
- sqliteVdbeAddOp(v, OP_Close, iCur, 0);
- }
-
- sqliteCodeRowTrigger(pParse, TK_DELETE, 0, TK_BEFORE, pTab, -1,
- oldIdx, (pParse->trigStack)?pParse->trigStack->orconf:OE_Default,
- addr);
- }
-
- if( !isView ){
- /* Open cursors for the table we are deleting from and all its
- ** indices. If there are row triggers, this happens inside the
- ** OP_ListRead loop because the cursor have to all be closed
- ** before the trigger fires. If there are no row triggers, the
- ** cursors are opened only once on the outside the loop.
- */
- pParse->nTab = iCur + 1;
- sqliteOpenTableAndIndices(pParse, pTab, iCur);
-
- /* This is the beginning of the delete loop when there are no
- ** row triggers */
- if( !row_triggers_exist ){
- addr = sqliteVdbeAddOp(v, OP_ListRead, 0, end);
- }
-
- /* Delete the row */
- sqliteGenerateRowDelete(db, v, pTab, iCur, pParse->trigStack==0);
- }
-
- /* If there are row triggers, close all cursors then invoke
- ** the AFTER triggers
- */
- if( row_triggers_exist ){
- if( !isView ){
- for(i=1, pIdx=pTab->pIndex; pIdx; i++, pIdx=pIdx->pNext){
- sqliteVdbeAddOp(v, OP_Close, iCur + i, pIdx->tnum);
- }
- sqliteVdbeAddOp(v, OP_Close, iCur, 0);
- }
- sqliteCodeRowTrigger(pParse, TK_DELETE, 0, TK_AFTER, pTab, -1,
- oldIdx, (pParse->trigStack)?pParse->trigStack->orconf:OE_Default,
- addr);
- }
-
- /* End of the delete loop */
- sqliteVdbeAddOp(v, OP_Goto, 0, addr);
- sqliteVdbeResolveLabel(v, end);
- sqliteVdbeAddOp(v, OP_ListReset, 0, 0);
-
- /* Close the cursors after the loop if there are no row triggers */
- if( !row_triggers_exist ){
- for(i=1, pIdx=pTab->pIndex; pIdx; i++, pIdx=pIdx->pNext){
- sqliteVdbeAddOp(v, OP_Close, iCur + i, pIdx->tnum);
- }
- sqliteVdbeAddOp(v, OP_Close, iCur, 0);
- pParse->nTab = iCur;
- }
- }
- sqliteVdbeAddOp(v, OP_SetCounts, 0, 0);
- sqliteEndWriteOperation(pParse);
-
- /*
- ** Return the number of rows that were deleted.
- */
- if( db->flags & SQLITE_CountRows ){
- sqliteVdbeAddOp(v, OP_ColumnName, 0, 1);
- sqliteVdbeChangeP3(v, -1, "rows deleted", P3_STATIC);
- sqliteVdbeAddOp(v, OP_Callback, 1, 0);
- }
-
-delete_from_cleanup:
- sqliteAuthContextPop(&sContext);
- sqliteSrcListDelete(pTabList);
- sqliteExprDelete(pWhere);
- return;
-}
-
-/*
-** This routine generates VDBE code that causes a single row of a
-** single table to be deleted.
-**
-** The VDBE must be in a particular state when this routine is called.
-** These are the requirements:
-**
-** 1. A read/write cursor pointing to pTab, the table containing the row
-** to be deleted, must be opened as cursor number "base".
-**
-** 2. Read/write cursors for all indices of pTab must be open as
-** cursor number base+i for the i-th index.
-**
-** 3. The record number of the row to be deleted must be on the top
-** of the stack.
-**
-** This routine pops the top of the stack to remove the record number
-** and then generates code to remove both the table record and all index
-** entries that point to that record.
-*/
-void sqliteGenerateRowDelete(
- sqlite *db, /* The database containing the index */
- Vdbe *v, /* Generate code into this VDBE */
- Table *pTab, /* Table containing the row to be deleted */
- int iCur, /* Cursor number for the table */
- int count /* Increment the row change counter */
-){
- int addr;
- addr = sqliteVdbeAddOp(v, OP_NotExists, iCur, 0);
- sqliteGenerateRowIndexDelete(db, v, pTab, iCur, 0);
- sqliteVdbeAddOp(v, OP_Delete, iCur,
- (count?OPFLAG_NCHANGE:0) | OPFLAG_CSCHANGE);
- sqliteVdbeChangeP2(v, addr, sqliteVdbeCurrentAddr(v));
-}
-
-/*
-** This routine generates VDBE code that causes the deletion of all
-** index entries associated with a single row of a single table.
-**
-** The VDBE must be in a particular state when this routine is called.
-** These are the requirements:
-**
-** 1. A read/write cursor pointing to pTab, the table containing the row
-** to be deleted, must be opened as cursor number "iCur".
-**
-** 2. Read/write cursors for all indices of pTab must be open as
-** cursor number iCur+i for the i-th index.
-**
-** 3. The "iCur" cursor must be pointing to the row that is to be
-** deleted.
-*/
-void sqliteGenerateRowIndexDelete(
- sqlite *db, /* The database containing the index */
- Vdbe *v, /* Generate code into this VDBE */
- Table *pTab, /* Table containing the row to be deleted */
- int iCur, /* Cursor number for the table */
- char *aIdxUsed /* Only delete if aIdxUsed!=0 && aIdxUsed[i]!=0 */
-){
- int i;
- Index *pIdx;
-
- for(i=1, pIdx=pTab->pIndex; pIdx; i++, pIdx=pIdx->pNext){
- int j;
- if( aIdxUsed!=0 && aIdxUsed[i-1]==0 ) continue;
- sqliteVdbeAddOp(v, OP_Recno, iCur, 0);
- for(j=0; j<pIdx->nColumn; j++){
- int idx = pIdx->aiColumn[j];
- if( idx==pTab->iPKey ){
- sqliteVdbeAddOp(v, OP_Dup, j, 0);
- }else{
- sqliteVdbeAddOp(v, OP_Column, iCur, idx);
- }
- }
- sqliteVdbeAddOp(v, OP_MakeIdxKey, pIdx->nColumn, 0);
- if( db->file_format>=4 ) sqliteAddIdxKeyType(v, pIdx);
- sqliteVdbeAddOp(v, OP_IdxDelete, iCur+i, 0);
- }
-}
diff --git a/ext/sqlite/libsqlite/src/encode.c b/ext/sqlite/libsqlite/src/encode.c
deleted file mode 100644
index 7d959b00ca..0000000000
--- a/ext/sqlite/libsqlite/src/encode.c
+++ /dev/null
@@ -1,254 +0,0 @@
-/*
-** 2002 April 25
-**
-** The author disclaims copyright to this source code. In place of
-** a legal notice, here is a blessing:
-**
-** May you do good and not evil.
-** May you find forgiveness for yourself and forgive others.
-** May you share freely, never taking more than you give.
-**
-*************************************************************************
-** This file contains helper routines used to translate binary data into
-** a null-terminated string (suitable for use in SQLite) and back again.
-** These are convenience routines for use by people who want to store binary
-** data in an SQLite database. The code in this file is not used by any other
-** part of the SQLite library.
-**
-** $Id$
-*/
-#include <string.h>
-#include <assert.h>
-
-/*
-** How This Encoder Works
-**
-** The output is allowed to contain any character except 0x27 (') and
-** 0x00. This is accomplished by using an escape character to encode
-** 0x27 and 0x00 as a two-byte sequence. The escape character is always
-** 0x01. An 0x00 is encoded as the two byte sequence 0x01 0x01. The
-** 0x27 character is encoded as the two byte sequence 0x01 0x28. Finally,
-** the escape character itself is encoded as the two-character sequence
-** 0x01 0x02.
-**
-** To summarize, the encoder works by using an escape sequences as follows:
-**
-** 0x00 -> 0x01 0x01
-** 0x01 -> 0x01 0x02
-** 0x27 -> 0x01 0x28
-**
-** If that were all the encoder did, it would work, but in certain cases
-** it could double the size of the encoded string. For example, to
-** encode a string of 100 0x27 characters would require 100 instances of
-** the 0x01 0x03 escape sequence resulting in a 200-character output.
-** We would prefer to keep the size of the encoded string smaller than
-** this.
-**
-** To minimize the encoding size, we first add a fixed offset value to each
-** byte in the sequence. The addition is modulo 256. (That is to say, if
-** the sum of the original character value and the offset exceeds 256, then
-** the higher order bits are truncated.) The offset is chosen to minimize
-** the number of characters in the string that need to be escaped. For
-** example, in the case above where the string was composed of 100 0x27
-** characters, the offset might be 0x01. Each of the 0x27 characters would
-** then be converted into an 0x28 character which would not need to be
-** escaped at all and so the 100 character input string would be converted
-** into just 100 characters of output. Actually 101 characters of output -
-** we have to record the offset used as the first byte in the sequence so
-** that the string can be decoded. Since the offset value is stored as
-** part of the output string and the output string is not allowed to contain
-** characters 0x00 or 0x27, the offset cannot be 0x00 or 0x27.
-**
-** Here, then, are the encoding steps:
-**
-** (1) Choose an offset value and make it the first character of
-** output.
-**
-** (2) Copy each input character into the output buffer, one by
-** one, adding the offset value as you copy.
-**
-** (3) If the value of an input character plus offset is 0x00, replace
-** that one character by the two-character sequence 0x01 0x01.
-** If the sum is 0x01, replace it with 0x01 0x02. If the sum
-** is 0x27, replace it with 0x01 0x03.
-**
-** (4) Put a 0x00 terminator at the end of the output.
-**
-** Decoding is obvious:
-**
-** (5) Copy encoded characters except the first into the decode
-** buffer. Set the first encoded character aside for use as
-** the offset in step 7 below.
-**
-** (6) Convert each 0x01 0x01 sequence into a single character 0x00.
-** Convert 0x01 0x02 into 0x01. Convert 0x01 0x28 into 0x27.
-**
-** (7) Subtract the offset value that was the first character of
-** the encoded buffer from all characters in the output buffer.
-**
-** The only tricky part is step (1) - how to compute an offset value to
-** minimize the size of the output buffer. This is accomplished by testing
-** all offset values and picking the one that results in the fewest number
-** of escapes. To do that, we first scan the entire input and count the
-** number of occurances of each character value in the input. Suppose
-** the number of 0x00 characters is N(0), the number of occurances of 0x01
-** is N(1), and so forth up to the number of occurances of 0xff is N(255).
-** An offset of 0 is not allowed so we don't have to test it. The number
-** of escapes required for an offset of 1 is N(1)+N(2)+N(40). The number
-** of escapes required for an offset of 2 is N(2)+N(3)+N(41). And so forth.
-** In this way we find the offset that gives the minimum number of escapes,
-** and thus minimizes the length of the output string.
-*/
-
-/*
-** Encode a binary buffer "in" of size n bytes so that it contains
-** no instances of characters '\'' or '\000'. The output is
-** null-terminated and can be used as a string value in an INSERT
-** or UPDATE statement. Use sqlite_decode_binary() to convert the
-** string back into its original binary.
-**
-** The result is written into a preallocated output buffer "out".
-** "out" must be able to hold at least 2 +(257*n)/254 bytes.
-** In other words, the output will be expanded by as much as 3
-** bytes for every 254 bytes of input plus 2 bytes of fixed overhead.
-** (This is approximately 2 + 1.0118*n or about a 1.2% size increase.)
-**
-** The return value is the number of characters in the encoded
-** string, excluding the "\000" terminator.
-**
-** If out==NULL then no output is generated but the routine still returns
-** the number of characters that would have been generated if out had
-** not been NULL.
-*/
-int sqlite_encode_binary(const unsigned char *in, int n, unsigned char *out){
- int i, j, e, m;
- unsigned char x;
- int cnt[256];
- if( n<=0 ){
- if( out ){
- out[0] = 'x';
- out[1] = 0;
- }
- return 1;
- }
- memset(cnt, 0, sizeof(cnt));
- for(i=n-1; i>=0; i--){ cnt[in[i]]++; }
- m = n;
- for(i=1; i<256; i++){
- int sum;
- if( i=='\'' ) continue;
- sum = cnt[i] + cnt[(i+1)&0xff] + cnt[(i+'\'')&0xff];
- if( sum<m ){
- m = sum;
- e = i;
- if( m==0 ) break;
- }
- }
- if( out==0 ){
- return n+m+1;
- }
- out[0] = e;
- j = 1;
- for(i=0; i<n; i++){
- x = in[i] - e;
- if( x==0 || x==1 || x=='\''){
- out[j++] = 1;
- x++;
- }
- out[j++] = x;
- }
- out[j] = 0;
- assert( j==n+m+1 );
- return j;
-}
-
-/*
-** Decode the string "in" into binary data and write it into "out".
-** This routine reverses the encoding created by sqlite_encode_binary().
-** The output will always be a few bytes less than the input. The number
-** of bytes of output is returned. If the input is not a well-formed
-** encoding, -1 is returned.
-**
-** The "in" and "out" parameters may point to the same buffer in order
-** to decode a string in place.
-*/
-int sqlite_decode_binary(const unsigned char *in, unsigned char *out){
- int i, e;
- unsigned char c;
- e = *(in++);
- i = 0;
- while( (c = *(in++))!=0 ){
- if( c==1 ){
- c = *(in++) - 1;
- }
- out[i++] = c + e;
- }
- return i;
-}
-
-#ifdef ENCODER_TEST
-#include <stdio.h>
-/*
-** The subroutines above are not tested by the usual test suite. To test
-** these routines, compile just this one file with a -DENCODER_TEST=1 option
-** and run the result.
-*/
-int main(int argc, char **argv){
- int i, j, n, m, nOut, nByteIn, nByteOut;
- unsigned char in[30000];
- unsigned char out[33000];
-
- nByteIn = nByteOut = 0;
- for(i=0; i<sizeof(in); i++){
- printf("Test %d: ", i+1);
- n = rand() % (i+1);
- if( i%100==0 ){
- int k;
- for(j=k=0; j<n; j++){
- /* if( k==0 || k=='\'' ) k++; */
- in[j] = k;
- k = (k+1)&0xff;
- }
- }else{
- for(j=0; j<n; j++) in[j] = rand() & 0xff;
- }
- nByteIn += n;
- nOut = sqlite_encode_binary(in, n, out);
- nByteOut += nOut;
- if( nOut!=strlen(out) ){
- printf(" ERROR return value is %d instead of %d\n", nOut, strlen(out));
- exit(1);
- }
- if( nOut!=sqlite_encode_binary(in, n, 0) ){
- printf(" ERROR actual output size disagrees with predicted size\n");
- exit(1);
- }
- m = (256*n + 1262)/253;
- printf("size %d->%d (max %d)", n, strlen(out)+1, m);
- if( strlen(out)+1>m ){
- printf(" ERROR output too big\n");
- exit(1);
- }
- for(j=0; out[j]; j++){
- if( out[j]=='\'' ){
- printf(" ERROR contains (')\n");
- exit(1);
- }
- }
- j = sqlite_decode_binary(out, out);
- if( j!=n ){
- printf(" ERROR decode size %d\n", j);
- exit(1);
- }
- if( memcmp(in, out, n)!=0 ){
- printf(" ERROR decode mismatch\n");
- exit(1);
- }
- printf(" OK\n");
- }
- fprintf(stderr,"Finished. Total encoding: %d->%d bytes\n",
- nByteIn, nByteOut);
- fprintf(stderr,"Avg size increase: %.3f%%\n",
- (nByteOut-nByteIn)*100.0/(double)nByteIn);
-}
-#endif /* ENCODER_TEST */
diff --git a/ext/sqlite/libsqlite/src/expr.c b/ext/sqlite/libsqlite/src/expr.c
deleted file mode 100644
index 44c0f6967a..0000000000
--- a/ext/sqlite/libsqlite/src/expr.c
+++ /dev/null
@@ -1,1659 +0,0 @@
-/*
-** 2001 September 15
-**
-** The author disclaims copyright to this source code. In place of
-** a legal notice, here is a blessing:
-**
-** May you do good and not evil.
-** May you find forgiveness for yourself and forgive others.
-** May you share freely, never taking more than you give.
-**
-*************************************************************************
-** This file contains routines used for analyzing expressions and
-** for generating VDBE code that evaluates expressions in SQLite.
-**
-** $Id$
-*/
-#include "sqliteInt.h"
-#include <ctype.h>
-
-/*
-** Construct a new expression node and return a pointer to it. Memory
-** for this node is obtained from sqliteMalloc(). The calling function
-** is responsible for making sure the node eventually gets freed.
-*/
-Expr *sqliteExpr(int op, Expr *pLeft, Expr *pRight, Token *pToken){
- Expr *pNew;
- pNew = sqliteMalloc( sizeof(Expr) );
- if( pNew==0 ){
- /* When malloc fails, we leak memory from pLeft and pRight */
- return 0;
- }
- pNew->op = op;
- pNew->pLeft = pLeft;
- pNew->pRight = pRight;
- if( pToken ){
- assert( pToken->dyn==0 );
- pNew->token = *pToken;
- pNew->span = *pToken;
- }else{
- assert( pNew->token.dyn==0 );
- assert( pNew->token.z==0 );
- assert( pNew->token.n==0 );
- if( pLeft && pRight ){
- sqliteExprSpan(pNew, &pLeft->span, &pRight->span);
- }else{
- pNew->span = pNew->token;
- }
- }
- return pNew;
-}
-
-/*
-** Set the Expr.span field of the given expression to span all
-** text between the two given tokens.
-*/
-void sqliteExprSpan(Expr *pExpr, Token *pLeft, Token *pRight){
- assert( pRight!=0 );
- assert( pLeft!=0 );
- /* Note: pExpr might be NULL due to a prior malloc failure */
- if( pExpr && pRight->z && pLeft->z ){
- if( pLeft->dyn==0 && pRight->dyn==0 ){
- pExpr->span.z = pLeft->z;
- pExpr->span.n = pRight->n + Addr(pRight->z) - Addr(pLeft->z);
- }else{
- pExpr->span.z = 0;
- }
- }
-}
-
-/*
-** Construct a new expression node for a function with multiple
-** arguments.
-*/
-Expr *sqliteExprFunction(ExprList *pList, Token *pToken){
- Expr *pNew;
- pNew = sqliteMalloc( sizeof(Expr) );
- if( pNew==0 ){
- /* sqliteExprListDelete(pList); // Leak pList when malloc fails */
- return 0;
- }
- pNew->op = TK_FUNCTION;
- pNew->pList = pList;
- if( pToken ){
- assert( pToken->dyn==0 );
- pNew->token = *pToken;
- }else{
- pNew->token.z = 0;
- }
- pNew->span = pNew->token;
- return pNew;
-}
-
-/*
-** Recursively delete an expression tree.
-*/
-void sqliteExprDelete(Expr *p){
- if( p==0 ) return;
- if( p->span.dyn ) sqliteFree((char*)p->span.z);
- if( p->token.dyn ) sqliteFree((char*)p->token.z);
- sqliteExprDelete(p->pLeft);
- sqliteExprDelete(p->pRight);
- sqliteExprListDelete(p->pList);
- sqliteSelectDelete(p->pSelect);
- sqliteFree(p);
-}
-
-
-/*
-** The following group of routines make deep copies of expressions,
-** expression lists, ID lists, and select statements. The copies can
-** be deleted (by being passed to their respective ...Delete() routines)
-** without effecting the originals.
-**
-** The expression list, ID, and source lists return by sqliteExprListDup(),
-** sqliteIdListDup(), and sqliteSrcListDup() can not be further expanded
-** by subsequent calls to sqlite*ListAppend() routines.
-**
-** Any tables that the SrcList might point to are not duplicated.
-*/
-Expr *sqliteExprDup(Expr *p){
- Expr *pNew;
- if( p==0 ) return 0;
- pNew = sqliteMallocRaw( sizeof(*p) );
- if( pNew==0 ) return 0;
- memcpy(pNew, p, sizeof(*pNew));
- if( p->token.z!=0 ){
- pNew->token.z = sqliteStrDup(p->token.z);
- pNew->token.dyn = 1;
- }else{
- assert( pNew->token.z==0 );
- }
- pNew->span.z = 0;
- pNew->pLeft = sqliteExprDup(p->pLeft);
- pNew->pRight = sqliteExprDup(p->pRight);
- pNew->pList = sqliteExprListDup(p->pList);
- pNew->pSelect = sqliteSelectDup(p->pSelect);
- return pNew;
-}
-void sqliteTokenCopy(Token *pTo, Token *pFrom){
- if( pTo->dyn ) sqliteFree((char*)pTo->z);
- if( pFrom->z ){
- pTo->n = pFrom->n;
- pTo->z = sqliteStrNDup(pFrom->z, pFrom->n);
- pTo->dyn = 1;
- }else{
- pTo->z = 0;
- }
-}
-ExprList *sqliteExprListDup(ExprList *p){
- ExprList *pNew;
- struct ExprList_item *pItem;
- int i;
- if( p==0 ) return 0;
- pNew = sqliteMalloc( sizeof(*pNew) );
- if( pNew==0 ) return 0;
- pNew->nExpr = pNew->nAlloc = p->nExpr;
- pNew->a = pItem = sqliteMalloc( p->nExpr*sizeof(p->a[0]) );
- if( pItem==0 ) return 0; /* Leaks memory after a malloc failure */
- for(i=0; i<p->nExpr; i++, pItem++){
- Expr *pNewExpr, *pOldExpr;
- pItem->pExpr = pNewExpr = sqliteExprDup(pOldExpr = p->a[i].pExpr);
- if( pOldExpr->span.z!=0 && pNewExpr ){
- /* Always make a copy of the span for top-level expressions in the
- ** expression list. The logic in SELECT processing that determines
- ** the names of columns in the result set needs this information */
- sqliteTokenCopy(&pNewExpr->span, &pOldExpr->span);
- }
- assert( pNewExpr==0 || pNewExpr->span.z!=0
- || pOldExpr->span.z==0 || sqlite_malloc_failed );
- pItem->zName = sqliteStrDup(p->a[i].zName);
- pItem->sortOrder = p->a[i].sortOrder;
- pItem->isAgg = p->a[i].isAgg;
- pItem->done = 0;
- }
- return pNew;
-}
-SrcList *sqliteSrcListDup(SrcList *p){
- SrcList *pNew;
- int i;
- int nByte;
- if( p==0 ) return 0;
- nByte = sizeof(*p) + (p->nSrc>0 ? sizeof(p->a[0]) * (p->nSrc-1) : 0);
- pNew = sqliteMallocRaw( nByte );
- if( pNew==0 ) return 0;
- pNew->nSrc = pNew->nAlloc = p->nSrc;
- for(i=0; i<p->nSrc; i++){
- struct SrcList_item *pNewItem = &pNew->a[i];
- struct SrcList_item *pOldItem = &p->a[i];
- pNewItem->zDatabase = sqliteStrDup(pOldItem->zDatabase);
- pNewItem->zName = sqliteStrDup(pOldItem->zName);
- pNewItem->zAlias = sqliteStrDup(pOldItem->zAlias);
- pNewItem->jointype = pOldItem->jointype;
- pNewItem->iCursor = pOldItem->iCursor;
- pNewItem->pTab = 0;
- pNewItem->pSelect = sqliteSelectDup(pOldItem->pSelect);
- pNewItem->pOn = sqliteExprDup(pOldItem->pOn);
- pNewItem->pUsing = sqliteIdListDup(pOldItem->pUsing);
- }
- return pNew;
-}
-IdList *sqliteIdListDup(IdList *p){
- IdList *pNew;
- int i;
- if( p==0 ) return 0;
- pNew = sqliteMallocRaw( sizeof(*pNew) );
- if( pNew==0 ) return 0;
- pNew->nId = pNew->nAlloc = p->nId;
- pNew->a = sqliteMallocRaw( p->nId*sizeof(p->a[0]) );
- if( pNew->a==0 ) return 0;
- for(i=0; i<p->nId; i++){
- struct IdList_item *pNewItem = &pNew->a[i];
- struct IdList_item *pOldItem = &p->a[i];
- pNewItem->zName = sqliteStrDup(pOldItem->zName);
- pNewItem->idx = pOldItem->idx;
- }
- return pNew;
-}
-Select *sqliteSelectDup(Select *p){
- Select *pNew;
- if( p==0 ) return 0;
- pNew = sqliteMallocRaw( sizeof(*p) );
- if( pNew==0 ) return 0;
- pNew->isDistinct = p->isDistinct;
- pNew->pEList = sqliteExprListDup(p->pEList);
- pNew->pSrc = sqliteSrcListDup(p->pSrc);
- pNew->pWhere = sqliteExprDup(p->pWhere);
- pNew->pGroupBy = sqliteExprListDup(p->pGroupBy);
- pNew->pHaving = sqliteExprDup(p->pHaving);
- pNew->pOrderBy = sqliteExprListDup(p->pOrderBy);
- pNew->op = p->op;
- pNew->pPrior = sqliteSelectDup(p->pPrior);
- pNew->nLimit = p->nLimit;
- pNew->nOffset = p->nOffset;
- pNew->zSelect = 0;
- pNew->iLimit = -1;
- pNew->iOffset = -1;
- return pNew;
-}
-
-
-/*
-** Add a new element to the end of an expression list. If pList is
-** initially NULL, then create a new expression list.
-*/
-ExprList *sqliteExprListAppend(ExprList *pList, Expr *pExpr, Token *pName){
- if( pList==0 ){
- pList = sqliteMalloc( sizeof(ExprList) );
- if( pList==0 ){
- /* sqliteExprDelete(pExpr); // Leak memory if malloc fails */
- return 0;
- }
- assert( pList->nAlloc==0 );
- }
- if( pList->nAlloc<=pList->nExpr ){
- pList->nAlloc = pList->nAlloc*2 + 4;
- pList->a = sqliteRealloc(pList->a, pList->nAlloc*sizeof(pList->a[0]));
- if( pList->a==0 ){
- /* sqliteExprDelete(pExpr); // Leak memory if malloc fails */
- pList->nExpr = pList->nAlloc = 0;
- return pList;
- }
- }
- assert( pList->a!=0 );
- if( pExpr || pName ){
- struct ExprList_item *pItem = &pList->a[pList->nExpr++];
- memset(pItem, 0, sizeof(*pItem));
- pItem->pExpr = pExpr;
- if( pName ){
- sqliteSetNString(&pItem->zName, pName->z, pName->n, 0);
- sqliteDequote(pItem->zName);
- }
- }
- return pList;
-}
-
-/*
-** Delete an entire expression list.
-*/
-void sqliteExprListDelete(ExprList *pList){
- int i;
- if( pList==0 ) return;
- assert( pList->a!=0 || (pList->nExpr==0 && pList->nAlloc==0) );
- assert( pList->nExpr<=pList->nAlloc );
- for(i=0; i<pList->nExpr; i++){
- sqliteExprDelete(pList->a[i].pExpr);
- sqliteFree(pList->a[i].zName);
- }
- sqliteFree(pList->a);
- sqliteFree(pList);
-}
-
-/*
-** Walk an expression tree. Return 1 if the expression is constant
-** and 0 if it involves variables.
-**
-** For the purposes of this function, a double-quoted string (ex: "abc")
-** is considered a variable but a single-quoted string (ex: 'abc') is
-** a constant.
-*/
-int sqliteExprIsConstant(Expr *p){
- switch( p->op ){
- case TK_ID:
- case TK_COLUMN:
- case TK_DOT:
- case TK_FUNCTION:
- return 0;
- case TK_NULL:
- case TK_STRING:
- case TK_INTEGER:
- case TK_FLOAT:
- case TK_VARIABLE:
- return 1;
- default: {
- if( p->pLeft && !sqliteExprIsConstant(p->pLeft) ) return 0;
- if( p->pRight && !sqliteExprIsConstant(p->pRight) ) return 0;
- if( p->pList ){
- int i;
- for(i=0; i<p->pList->nExpr; i++){
- if( !sqliteExprIsConstant(p->pList->a[i].pExpr) ) return 0;
- }
- }
- return p->pLeft!=0 || p->pRight!=0 || (p->pList && p->pList->nExpr>0);
- }
- }
- return 0;
-}
-
-/*
-** If the given expression codes a constant integer that is small enough
-** to fit in a 32-bit integer, return 1 and put the value of the integer
-** in *pValue. If the expression is not an integer or if it is too big
-** to fit in a signed 32-bit integer, return 0 and leave *pValue unchanged.
-*/
-int sqliteExprIsInteger(Expr *p, int *pValue){
- switch( p->op ){
- case TK_INTEGER: {
- if( sqliteFitsIn32Bits(p->token.z) ){
- *pValue = atoi(p->token.z);
- return 1;
- }
- break;
- }
- case TK_STRING: {
- const char *z = p->token.z;
- int n = p->token.n;
- if( n>0 && z[0]=='-' ){ z++; n--; }
- while( n>0 && *z && isdigit(*z) ){ z++; n--; }
- if( n==0 && sqliteFitsIn32Bits(p->token.z) ){
- *pValue = atoi(p->token.z);
- return 1;
- }
- break;
- }
- case TK_UPLUS: {
- return sqliteExprIsInteger(p->pLeft, pValue);
- }
- case TK_UMINUS: {
- int v;
- if( sqliteExprIsInteger(p->pLeft, &v) ){
- *pValue = -v;
- return 1;
- }
- break;
- }
- default: break;
- }
- return 0;
-}
-
-/*
-** Return TRUE if the given string is a row-id column name.
-*/
-int sqliteIsRowid(const char *z){
- if( sqliteStrICmp(z, "_ROWID_")==0 ) return 1;
- if( sqliteStrICmp(z, "ROWID")==0 ) return 1;
- if( sqliteStrICmp(z, "OID")==0 ) return 1;
- return 0;
-}
-
-/*
-** Given the name of a column of the form X.Y.Z or Y.Z or just Z, look up
-** that name in the set of source tables in pSrcList and make the pExpr
-** expression node refer back to that source column. The following changes
-** are made to pExpr:
-**
-** pExpr->iDb Set the index in db->aDb[] of the database holding
-** the table.
-** pExpr->iTable Set to the cursor number for the table obtained
-** from pSrcList.
-** pExpr->iColumn Set to the column number within the table.
-** pExpr->dataType Set to the appropriate data type for the column.
-** pExpr->op Set to TK_COLUMN.
-** pExpr->pLeft Any expression this points to is deleted
-** pExpr->pRight Any expression this points to is deleted.
-**
-** The pDbToken is the name of the database (the "X"). This value may be
-** NULL meaning that name is of the form Y.Z or Z. Any available database
-** can be used. The pTableToken is the name of the table (the "Y"). This
-** value can be NULL if pDbToken is also NULL. If pTableToken is NULL it
-** means that the form of the name is Z and that columns from any table
-** can be used.
-**
-** If the name cannot be resolved unambiguously, leave an error message
-** in pParse and return non-zero. Return zero on success.
-*/
-static int lookupName(
- Parse *pParse, /* The parsing context */
- Token *pDbToken, /* Name of the database containing table, or NULL */
- Token *pTableToken, /* Name of table containing column, or NULL */
- Token *pColumnToken, /* Name of the column. */
- SrcList *pSrcList, /* List of tables used to resolve column names */
- ExprList *pEList, /* List of expressions used to resolve "AS" */
- Expr *pExpr /* Make this EXPR node point to the selected column */
-){
- char *zDb = 0; /* Name of the database. The "X" in X.Y.Z */
- char *zTab = 0; /* Name of the table. The "Y" in X.Y.Z or Y.Z */
- char *zCol = 0; /* Name of the column. The "Z" */
- int i, j; /* Loop counters */
- int cnt = 0; /* Number of matching column names */
- int cntTab = 0; /* Number of matching table names */
- sqlite *db = pParse->db; /* The database */
-
- assert( pColumnToken && pColumnToken->z ); /* The Z in X.Y.Z cannot be NULL */
- if( pDbToken && pDbToken->z ){
- zDb = sqliteStrNDup(pDbToken->z, pDbToken->n);
- sqliteDequote(zDb);
- }else{
- zDb = 0;
- }
- if( pTableToken && pTableToken->z ){
- zTab = sqliteStrNDup(pTableToken->z, pTableToken->n);
- sqliteDequote(zTab);
- }else{
- assert( zDb==0 );
- zTab = 0;
- }
- zCol = sqliteStrNDup(pColumnToken->z, pColumnToken->n);
- sqliteDequote(zCol);
- if( sqlite_malloc_failed ){
- return 1; /* Leak memory (zDb and zTab) if malloc fails */
- }
- assert( zTab==0 || pEList==0 );
-
- pExpr->iTable = -1;
- for(i=0; i<pSrcList->nSrc; i++){
- struct SrcList_item *pItem = &pSrcList->a[i];
- Table *pTab = pItem->pTab;
- Column *pCol;
-
- if( pTab==0 ) continue;
- assert( pTab->nCol>0 );
- if( zTab ){
- if( pItem->zAlias ){
- char *zTabName = pItem->zAlias;
- if( sqliteStrICmp(zTabName, zTab)!=0 ) continue;
- }else{
- char *zTabName = pTab->zName;
- if( zTabName==0 || sqliteStrICmp(zTabName, zTab)!=0 ) continue;
- if( zDb!=0 && sqliteStrICmp(db->aDb[pTab->iDb].zName, zDb)!=0 ){
- continue;
- }
- }
- }
- if( 0==(cntTab++) ){
- pExpr->iTable = pItem->iCursor;
- pExpr->iDb = pTab->iDb;
- }
- for(j=0, pCol=pTab->aCol; j<pTab->nCol; j++, pCol++){
- if( sqliteStrICmp(pCol->zName, zCol)==0 ){
- cnt++;
- pExpr->iTable = pItem->iCursor;
- pExpr->iDb = pTab->iDb;
- /* Substitute the rowid (column -1) for the INTEGER PRIMARY KEY */
- pExpr->iColumn = j==pTab->iPKey ? -1 : j;
- pExpr->dataType = pCol->sortOrder & SQLITE_SO_TYPEMASK;
- break;
- }
- }
- }
-
- /* If we have not already resolved the name, then maybe
- ** it is a new.* or old.* trigger argument reference
- */
- if( zDb==0 && zTab!=0 && cnt==0 && pParse->trigStack!=0 ){
- TriggerStack *pTriggerStack = pParse->trigStack;
- Table *pTab = 0;
- if( pTriggerStack->newIdx != -1 && sqliteStrICmp("new", zTab) == 0 ){
- pExpr->iTable = pTriggerStack->newIdx;
- assert( pTriggerStack->pTab );
- pTab = pTriggerStack->pTab;
- }else if( pTriggerStack->oldIdx != -1 && sqliteStrICmp("old", zTab) == 0 ){
- pExpr->iTable = pTriggerStack->oldIdx;
- assert( pTriggerStack->pTab );
- pTab = pTriggerStack->pTab;
- }
-
- if( pTab ){
- int j;
- Column *pCol = pTab->aCol;
-
- pExpr->iDb = pTab->iDb;
- cntTab++;
- for(j=0; j < pTab->nCol; j++, pCol++) {
- if( sqliteStrICmp(pCol->zName, zCol)==0 ){
- cnt++;
- pExpr->iColumn = j==pTab->iPKey ? -1 : j;
- pExpr->dataType = pCol->sortOrder & SQLITE_SO_TYPEMASK;
- break;
- }
- }
- }
- }
-
- /*
- ** Perhaps the name is a reference to the ROWID
- */
- if( cnt==0 && cntTab==1 && sqliteIsRowid(zCol) ){
- cnt = 1;
- pExpr->iColumn = -1;
- pExpr->dataType = SQLITE_SO_NUM;
- }
-
- /*
- ** If the input is of the form Z (not Y.Z or X.Y.Z) then the name Z
- ** might refer to an result-set alias. This happens, for example, when
- ** we are resolving names in the WHERE clause of the following command:
- **
- ** SELECT a+b AS x FROM table WHERE x<10;
- **
- ** In cases like this, replace pExpr with a copy of the expression that
- ** forms the result set entry ("a+b" in the example) and return immediately.
- ** Note that the expression in the result set should have already been
- ** resolved by the time the WHERE clause is resolved.
- */
- if( cnt==0 && pEList!=0 ){
- for(j=0; j<pEList->nExpr; j++){
- char *zAs = pEList->a[j].zName;
- if( zAs!=0 && sqliteStrICmp(zAs, zCol)==0 ){
- assert( pExpr->pLeft==0 && pExpr->pRight==0 );
- pExpr->op = TK_AS;
- pExpr->iColumn = j;
- pExpr->pLeft = sqliteExprDup(pEList->a[j].pExpr);
- sqliteFree(zCol);
- assert( zTab==0 && zDb==0 );
- return 0;
- }
- }
- }
-
- /*
- ** If X and Y are NULL (in other words if only the column name Z is
- ** supplied) and the value of Z is enclosed in double-quotes, then
- ** Z is a string literal if it doesn't match any column names. In that
- ** case, we need to return right away and not make any changes to
- ** pExpr.
- */
- if( cnt==0 && zTab==0 && pColumnToken->z[0]=='"' ){
- sqliteFree(zCol);
- return 0;
- }
-
- /*
- ** cnt==0 means there was not match. cnt>1 means there were two or
- ** more matches. Either way, we have an error.
- */
- if( cnt!=1 ){
- char *z = 0;
- char *zErr;
- zErr = cnt==0 ? "no such column: %s" : "ambiguous column name: %s";
- if( zDb ){
- sqliteSetString(&z, zDb, ".", zTab, ".", zCol, 0);
- }else if( zTab ){
- sqliteSetString(&z, zTab, ".", zCol, 0);
- }else{
- z = sqliteStrDup(zCol);
- }
- sqliteErrorMsg(pParse, zErr, z);
- sqliteFree(z);
- }
-
- /* Clean up and return
- */
- sqliteFree(zDb);
- sqliteFree(zTab);
- sqliteFree(zCol);
- sqliteExprDelete(pExpr->pLeft);
- pExpr->pLeft = 0;
- sqliteExprDelete(pExpr->pRight);
- pExpr->pRight = 0;
- pExpr->op = TK_COLUMN;
- sqliteAuthRead(pParse, pExpr, pSrcList);
- return cnt!=1;
-}
-
-/*
-** This routine walks an expression tree and resolves references to
-** table columns. Nodes of the form ID.ID or ID resolve into an
-** index to the table in the table list and a column offset. The
-** Expr.opcode for such nodes is changed to TK_COLUMN. The Expr.iTable
-** value is changed to the index of the referenced table in pTabList
-** plus the "base" value. The base value will ultimately become the
-** VDBE cursor number for a cursor that is pointing into the referenced
-** table. The Expr.iColumn value is changed to the index of the column
-** of the referenced table. The Expr.iColumn value for the special
-** ROWID column is -1. Any INTEGER PRIMARY KEY column is tried as an
-** alias for ROWID.
-**
-** We also check for instances of the IN operator. IN comes in two
-** forms:
-**
-** expr IN (exprlist)
-** and
-** expr IN (SELECT ...)
-**
-** The first form is handled by creating a set holding the list
-** of allowed values. The second form causes the SELECT to generate
-** a temporary table.
-**
-** This routine also looks for scalar SELECTs that are part of an expression.
-** If it finds any, it generates code to write the value of that select
-** into a memory cell.
-**
-** Unknown columns or tables provoke an error. The function returns
-** the number of errors seen and leaves an error message on pParse->zErrMsg.
-*/
-int sqliteExprResolveIds(
- Parse *pParse, /* The parser context */
- SrcList *pSrcList, /* List of tables used to resolve column names */
- ExprList *pEList, /* List of expressions used to resolve "AS" */
- Expr *pExpr /* The expression to be analyzed. */
-){
- int i;
-
- if( pExpr==0 || pSrcList==0 ) return 0;
- for(i=0; i<pSrcList->nSrc; i++){
- assert( pSrcList->a[i].iCursor>=0 && pSrcList->a[i].iCursor<pParse->nTab );
- }
- switch( pExpr->op ){
- /* Double-quoted strings (ex: "abc") are used as identifiers if
- ** possible. Otherwise they remain as strings. Single-quoted
- ** strings (ex: 'abc') are always string literals.
- */
- case TK_STRING: {
- if( pExpr->token.z[0]=='\'' ) break;
- /* Fall thru into the TK_ID case if this is a double-quoted string */
- }
- /* A lone identifier is the name of a columnd.
- */
- case TK_ID: {
- if( lookupName(pParse, 0, 0, &pExpr->token, pSrcList, pEList, pExpr) ){
- return 1;
- }
- break;
- }
-
- /* A table name and column name: ID.ID
- ** Or a database, table and column: ID.ID.ID
- */
- case TK_DOT: {
- Token *pColumn;
- Token *pTable;
- Token *pDb;
- Expr *pRight;
-
- pRight = pExpr->pRight;
- if( pRight->op==TK_ID ){
- pDb = 0;
- pTable = &pExpr->pLeft->token;
- pColumn = &pRight->token;
- }else{
- assert( pRight->op==TK_DOT );
- pDb = &pExpr->pLeft->token;
- pTable = &pRight->pLeft->token;
- pColumn = &pRight->pRight->token;
- }
- if( lookupName(pParse, pDb, pTable, pColumn, pSrcList, 0, pExpr) ){
- return 1;
- }
- break;
- }
-
- case TK_IN: {
- Vdbe *v = sqliteGetVdbe(pParse);
- if( v==0 ) return 1;
- if( sqliteExprResolveIds(pParse, pSrcList, pEList, pExpr->pLeft) ){
- return 1;
- }
- if( pExpr->pSelect ){
- /* Case 1: expr IN (SELECT ...)
- **
- ** Generate code to write the results of the select into a temporary
- ** table. The cursor number of the temporary table has already
- ** been put in iTable by sqliteExprResolveInSelect().
- */
- pExpr->iTable = pParse->nTab++;
- sqliteVdbeAddOp(v, OP_OpenTemp, pExpr->iTable, 1);
- sqliteSelect(pParse, pExpr->pSelect, SRT_Set, pExpr->iTable, 0,0,0);
- }else if( pExpr->pList ){
- /* Case 2: expr IN (exprlist)
- **
- ** Create a set to put the exprlist values in. The Set id is stored
- ** in iTable.
- */
- int i, iSet;
- for(i=0; i<pExpr->pList->nExpr; i++){
- Expr *pE2 = pExpr->pList->a[i].pExpr;
- if( !sqliteExprIsConstant(pE2) ){
- sqliteErrorMsg(pParse,
- "right-hand side of IN operator must be constant");
- return 1;
- }
- if( sqliteExprCheck(pParse, pE2, 0, 0) ){
- return 1;
- }
- }
- iSet = pExpr->iTable = pParse->nSet++;
- for(i=0; i<pExpr->pList->nExpr; i++){
- Expr *pE2 = pExpr->pList->a[i].pExpr;
- switch( pE2->op ){
- case TK_FLOAT:
- case TK_INTEGER:
- case TK_STRING: {
- int addr;
- assert( pE2->token.z );
- addr = sqliteVdbeOp3(v, OP_SetInsert, iSet, 0,
- pE2->token.z, pE2->token.n);
- sqliteVdbeDequoteP3(v, addr);
- break;
- }
- default: {
- sqliteExprCode(pParse, pE2);
- sqliteVdbeAddOp(v, OP_SetInsert, iSet, 0);
- break;
- }
- }
- }
- }
- break;
- }
-
- case TK_SELECT: {
- /* This has to be a scalar SELECT. Generate code to put the
- ** value of this select in a memory cell and record the number
- ** of the memory cell in iColumn.
- */
- pExpr->iColumn = pParse->nMem++;
- if( sqliteSelect(pParse, pExpr->pSelect, SRT_Mem, pExpr->iColumn,0,0,0) ){
- return 1;
- }
- break;
- }
-
- /* For all else, just recursively walk the tree */
- default: {
- if( pExpr->pLeft
- && sqliteExprResolveIds(pParse, pSrcList, pEList, pExpr->pLeft) ){
- return 1;
- }
- if( pExpr->pRight
- && sqliteExprResolveIds(pParse, pSrcList, pEList, pExpr->pRight) ){
- return 1;
- }
- if( pExpr->pList ){
- int i;
- ExprList *pList = pExpr->pList;
- for(i=0; i<pList->nExpr; i++){
- Expr *pArg = pList->a[i].pExpr;
- if( sqliteExprResolveIds(pParse, pSrcList, pEList, pArg) ){
- return 1;
- }
- }
- }
- }
- }
- return 0;
-}
-
-/*
-** pExpr is a node that defines a function of some kind. It might
-** be a syntactic function like "count(x)" or it might be a function
-** that implements an operator, like "a LIKE b".
-**
-** This routine makes *pzName point to the name of the function and
-** *pnName hold the number of characters in the function name.
-*/
-static void getFunctionName(Expr *pExpr, const char **pzName, int *pnName){
- switch( pExpr->op ){
- case TK_FUNCTION: {
- *pzName = pExpr->token.z;
- *pnName = pExpr->token.n;
- break;
- }
- case TK_LIKE: {
- *pzName = "like";
- *pnName = 4;
- break;
- }
- case TK_GLOB: {
- *pzName = "glob";
- *pnName = 4;
- break;
- }
- default: {
- *pzName = "can't happen";
- *pnName = 12;
- break;
- }
- }
-}
-
-/*
-** Error check the functions in an expression. Make sure all
-** function names are recognized and all functions have the correct
-** number of arguments. Leave an error message in pParse->zErrMsg
-** if anything is amiss. Return the number of errors.
-**
-** if pIsAgg is not null and this expression is an aggregate function
-** (like count(*) or max(value)) then write a 1 into *pIsAgg.
-*/
-int sqliteExprCheck(Parse *pParse, Expr *pExpr, int allowAgg, int *pIsAgg){
- int nErr = 0;
- if( pExpr==0 ) return 0;
- switch( pExpr->op ){
- case TK_GLOB:
- case TK_LIKE:
- case TK_FUNCTION: {
- int n = pExpr->pList ? pExpr->pList->nExpr : 0; /* Number of arguments */
- int no_such_func = 0; /* True if no such function exists */
- int wrong_num_args = 0; /* True if wrong number of arguments */
- int is_agg = 0; /* True if is an aggregate function */
- int i;
- int nId; /* Number of characters in function name */
- const char *zId; /* The function name. */
- FuncDef *pDef;
-
- getFunctionName(pExpr, &zId, &nId);
- pDef = sqliteFindFunction(pParse->db, zId, nId, n, 0);
- if( pDef==0 ){
- pDef = sqliteFindFunction(pParse->db, zId, nId, -1, 0);
- if( pDef==0 ){
- no_such_func = 1;
- }else{
- wrong_num_args = 1;
- }
- }else{
- is_agg = pDef->xFunc==0;
- }
- if( is_agg && !allowAgg ){
- sqliteErrorMsg(pParse, "misuse of aggregate function %.*s()", nId, zId);
- nErr++;
- is_agg = 0;
- }else if( no_such_func ){
- sqliteErrorMsg(pParse, "no such function: %.*s", nId, zId);
- nErr++;
- }else if( wrong_num_args ){
- sqliteErrorMsg(pParse,"wrong number of arguments to function %.*s()",
- nId, zId);
- nErr++;
- }
- if( is_agg ){
- pExpr->op = TK_AGG_FUNCTION;
- if( pIsAgg ) *pIsAgg = 1;
- }
- for(i=0; nErr==0 && i<n; i++){
- nErr = sqliteExprCheck(pParse, pExpr->pList->a[i].pExpr,
- allowAgg && !is_agg, pIsAgg);
- }
- if( pDef==0 ){
- /* Already reported an error */
- }else if( pDef->dataType>=0 ){
- if( pDef->dataType<n ){
- pExpr->dataType =
- sqliteExprType(pExpr->pList->a[pDef->dataType].pExpr);
- }else{
- pExpr->dataType = SQLITE_SO_NUM;
- }
- }else if( pDef->dataType==SQLITE_ARGS ){
- pDef->dataType = SQLITE_SO_TEXT;
- for(i=0; i<n; i++){
- if( sqliteExprType(pExpr->pList->a[i].pExpr)==SQLITE_SO_NUM ){
- pExpr->dataType = SQLITE_SO_NUM;
- break;
- }
- }
- }else if( pDef->dataType==SQLITE_NUMERIC ){
- pExpr->dataType = SQLITE_SO_NUM;
- }else{
- pExpr->dataType = SQLITE_SO_TEXT;
- }
- }
- default: {
- if( pExpr->pLeft ){
- nErr = sqliteExprCheck(pParse, pExpr->pLeft, allowAgg, pIsAgg);
- }
- if( nErr==0 && pExpr->pRight ){
- nErr = sqliteExprCheck(pParse, pExpr->pRight, allowAgg, pIsAgg);
- }
- if( nErr==0 && pExpr->pList ){
- int n = pExpr->pList->nExpr;
- int i;
- for(i=0; nErr==0 && i<n; i++){
- Expr *pE2 = pExpr->pList->a[i].pExpr;
- nErr = sqliteExprCheck(pParse, pE2, allowAgg, pIsAgg);
- }
- }
- break;
- }
- }
- return nErr;
-}
-
-/*
-** Return either SQLITE_SO_NUM or SQLITE_SO_TEXT to indicate whether the
-** given expression should sort as numeric values or as text.
-**
-** The sqliteExprResolveIds() and sqliteExprCheck() routines must have
-** both been called on the expression before it is passed to this routine.
-*/
-int sqliteExprType(Expr *p){
- if( p==0 ) return SQLITE_SO_NUM;
- while( p ) switch( p->op ){
- case TK_PLUS:
- case TK_MINUS:
- case TK_STAR:
- case TK_SLASH:
- case TK_AND:
- case TK_OR:
- case TK_ISNULL:
- case TK_NOTNULL:
- case TK_NOT:
- case TK_UMINUS:
- case TK_UPLUS:
- case TK_BITAND:
- case TK_BITOR:
- case TK_BITNOT:
- case TK_LSHIFT:
- case TK_RSHIFT:
- case TK_REM:
- case TK_INTEGER:
- case TK_FLOAT:
- case TK_IN:
- case TK_BETWEEN:
- case TK_GLOB:
- case TK_LIKE:
- return SQLITE_SO_NUM;
-
- case TK_STRING:
- case TK_NULL:
- case TK_CONCAT:
- case TK_VARIABLE:
- return SQLITE_SO_TEXT;
-
- case TK_LT:
- case TK_LE:
- case TK_GT:
- case TK_GE:
- case TK_NE:
- case TK_EQ:
- if( sqliteExprType(p->pLeft)==SQLITE_SO_NUM ){
- return SQLITE_SO_NUM;
- }
- p = p->pRight;
- break;
-
- case TK_AS:
- p = p->pLeft;
- break;
-
- case TK_COLUMN:
- case TK_FUNCTION:
- case TK_AGG_FUNCTION:
- return p->dataType;
-
- case TK_SELECT:
- assert( p->pSelect );
- assert( p->pSelect->pEList );
- assert( p->pSelect->pEList->nExpr>0 );
- p = p->pSelect->pEList->a[0].pExpr;
- break;
-
- case TK_CASE: {
- if( p->pRight && sqliteExprType(p->pRight)==SQLITE_SO_NUM ){
- return SQLITE_SO_NUM;
- }
- if( p->pList ){
- int i;
- ExprList *pList = p->pList;
- for(i=1; i<pList->nExpr; i+=2){
- if( sqliteExprType(pList->a[i].pExpr)==SQLITE_SO_NUM ){
- return SQLITE_SO_NUM;
- }
- }
- }
- return SQLITE_SO_TEXT;
- }
-
- default:
- assert( p->op==TK_ABORT ); /* Can't Happen */
- break;
- }
- return SQLITE_SO_NUM;
-}
-
-/*
-** Generate code into the current Vdbe to evaluate the given
-** expression and leave the result on the top of stack.
-*/
-void sqliteExprCode(Parse *pParse, Expr *pExpr){
- Vdbe *v = pParse->pVdbe;
- int op;
- if( v==0 || pExpr==0 ) return;
- switch( pExpr->op ){
- case TK_PLUS: op = OP_Add; break;
- case TK_MINUS: op = OP_Subtract; break;
- case TK_STAR: op = OP_Multiply; break;
- case TK_SLASH: op = OP_Divide; break;
- case TK_AND: op = OP_And; break;
- case TK_OR: op = OP_Or; break;
- case TK_LT: op = OP_Lt; break;
- case TK_LE: op = OP_Le; break;
- case TK_GT: op = OP_Gt; break;
- case TK_GE: op = OP_Ge; break;
- case TK_NE: op = OP_Ne; break;
- case TK_EQ: op = OP_Eq; break;
- case TK_ISNULL: op = OP_IsNull; break;
- case TK_NOTNULL: op = OP_NotNull; break;
- case TK_NOT: op = OP_Not; break;
- case TK_UMINUS: op = OP_Negative; break;
- case TK_BITAND: op = OP_BitAnd; break;
- case TK_BITOR: op = OP_BitOr; break;
- case TK_BITNOT: op = OP_BitNot; break;
- case TK_LSHIFT: op = OP_ShiftLeft; break;
- case TK_RSHIFT: op = OP_ShiftRight; break;
- case TK_REM: op = OP_Remainder; break;
- default: break;
- }
- switch( pExpr->op ){
- case TK_COLUMN: {
- if( pParse->useAgg ){
- sqliteVdbeAddOp(v, OP_AggGet, 0, pExpr->iAgg);
- }else if( pExpr->iColumn>=0 ){
- sqliteVdbeAddOp(v, OP_Column, pExpr->iTable, pExpr->iColumn);
- }else{
- sqliteVdbeAddOp(v, OP_Recno, pExpr->iTable, 0);
- }
- break;
- }
- case TK_STRING:
- case TK_FLOAT:
- case TK_INTEGER: {
- if( pExpr->op==TK_INTEGER && sqliteFitsIn32Bits(pExpr->token.z) ){
- sqliteVdbeAddOp(v, OP_Integer, atoi(pExpr->token.z), 0);
- }else{
- sqliteVdbeAddOp(v, OP_String, 0, 0);
- }
- assert( pExpr->token.z );
- sqliteVdbeChangeP3(v, -1, pExpr->token.z, pExpr->token.n);
- sqliteVdbeDequoteP3(v, -1);
- break;
- }
- case TK_NULL: {
- sqliteVdbeAddOp(v, OP_String, 0, 0);
- break;
- }
- case TK_VARIABLE: {
- sqliteVdbeAddOp(v, OP_Variable, pExpr->iTable, 0);
- break;
- }
- case TK_LT:
- case TK_LE:
- case TK_GT:
- case TK_GE:
- case TK_NE:
- case TK_EQ: {
- if( pParse->db->file_format>=4 && sqliteExprType(pExpr)==SQLITE_SO_TEXT ){
- op += 6; /* Convert numeric opcodes to text opcodes */
- }
- /* Fall through into the next case */
- }
- case TK_AND:
- case TK_OR:
- case TK_PLUS:
- case TK_STAR:
- case TK_MINUS:
- case TK_REM:
- case TK_BITAND:
- case TK_BITOR:
- case TK_SLASH: {
- sqliteExprCode(pParse, pExpr->pLeft);
- sqliteExprCode(pParse, pExpr->pRight);
- sqliteVdbeAddOp(v, op, 0, 0);
- break;
- }
- case TK_LSHIFT:
- case TK_RSHIFT: {
- sqliteExprCode(pParse, pExpr->pRight);
- sqliteExprCode(pParse, pExpr->pLeft);
- sqliteVdbeAddOp(v, op, 0, 0);
- break;
- }
- case TK_CONCAT: {
- sqliteExprCode(pParse, pExpr->pLeft);
- sqliteExprCode(pParse, pExpr->pRight);
- sqliteVdbeAddOp(v, OP_Concat, 2, 0);
- break;
- }
- case TK_UMINUS: {
- assert( pExpr->pLeft );
- if( pExpr->pLeft->op==TK_FLOAT || pExpr->pLeft->op==TK_INTEGER ){
- Token *p = &pExpr->pLeft->token;
- char *z = sqliteMalloc( p->n + 2 );
- sprintf(z, "-%.*s", p->n, p->z);
- if( pExpr->pLeft->op==TK_INTEGER && sqliteFitsIn32Bits(z) ){
- sqliteVdbeAddOp(v, OP_Integer, atoi(z), 0);
- }else{
- sqliteVdbeAddOp(v, OP_String, 0, 0);
- }
- sqliteVdbeChangeP3(v, -1, z, p->n+1);
- sqliteFree(z);
- break;
- }
- /* Fall through into TK_NOT */
- }
- case TK_BITNOT:
- case TK_NOT: {
- sqliteExprCode(pParse, pExpr->pLeft);
- sqliteVdbeAddOp(v, op, 0, 0);
- break;
- }
- case TK_ISNULL:
- case TK_NOTNULL: {
- int dest;
- sqliteVdbeAddOp(v, OP_Integer, 1, 0);
- sqliteExprCode(pParse, pExpr->pLeft);
- dest = sqliteVdbeCurrentAddr(v) + 2;
- sqliteVdbeAddOp(v, op, 1, dest);
- sqliteVdbeAddOp(v, OP_AddImm, -1, 0);
- break;
- }
- case TK_AGG_FUNCTION: {
- sqliteVdbeAddOp(v, OP_AggGet, 0, pExpr->iAgg);
- break;
- }
- case TK_GLOB:
- case TK_LIKE:
- case TK_FUNCTION: {
- ExprList *pList = pExpr->pList;
- int nExpr = pList ? pList->nExpr : 0;
- FuncDef *pDef;
- int nId;
- const char *zId;
- getFunctionName(pExpr, &zId, &nId);
- pDef = sqliteFindFunction(pParse->db, zId, nId, nExpr, 0);
- assert( pDef!=0 );
- nExpr = sqliteExprCodeExprList(pParse, pList, pDef->includeTypes);
- sqliteVdbeOp3(v, OP_Function, nExpr, 0, (char*)pDef, P3_POINTER);
- break;
- }
- case TK_SELECT: {
- sqliteVdbeAddOp(v, OP_MemLoad, pExpr->iColumn, 0);
- break;
- }
- case TK_IN: {
- int addr;
- sqliteVdbeAddOp(v, OP_Integer, 1, 0);
- sqliteExprCode(pParse, pExpr->pLeft);
- addr = sqliteVdbeCurrentAddr(v);
- sqliteVdbeAddOp(v, OP_NotNull, -1, addr+4);
- sqliteVdbeAddOp(v, OP_Pop, 2, 0);
- sqliteVdbeAddOp(v, OP_String, 0, 0);
- sqliteVdbeAddOp(v, OP_Goto, 0, addr+6);
- if( pExpr->pSelect ){
- sqliteVdbeAddOp(v, OP_Found, pExpr->iTable, addr+6);
- }else{
- sqliteVdbeAddOp(v, OP_SetFound, pExpr->iTable, addr+6);
- }
- sqliteVdbeAddOp(v, OP_AddImm, -1, 0);
- break;
- }
- case TK_BETWEEN: {
- sqliteExprCode(pParse, pExpr->pLeft);
- sqliteVdbeAddOp(v, OP_Dup, 0, 0);
- sqliteExprCode(pParse, pExpr->pList->a[0].pExpr);
- sqliteVdbeAddOp(v, OP_Ge, 0, 0);
- sqliteVdbeAddOp(v, OP_Pull, 1, 0);
- sqliteExprCode(pParse, pExpr->pList->a[1].pExpr);
- sqliteVdbeAddOp(v, OP_Le, 0, 0);
- sqliteVdbeAddOp(v, OP_And, 0, 0);
- break;
- }
- case TK_UPLUS:
- case TK_AS: {
- sqliteExprCode(pParse, pExpr->pLeft);
- break;
- }
- case TK_CASE: {
- int expr_end_label;
- int jumpInst;
- int addr;
- int nExpr;
- int i;
-
- assert(pExpr->pList);
- assert((pExpr->pList->nExpr % 2) == 0);
- assert(pExpr->pList->nExpr > 0);
- nExpr = pExpr->pList->nExpr;
- expr_end_label = sqliteVdbeMakeLabel(v);
- if( pExpr->pLeft ){
- sqliteExprCode(pParse, pExpr->pLeft);
- }
- for(i=0; i<nExpr; i=i+2){
- sqliteExprCode(pParse, pExpr->pList->a[i].pExpr);
- if( pExpr->pLeft ){
- sqliteVdbeAddOp(v, OP_Dup, 1, 1);
- jumpInst = sqliteVdbeAddOp(v, OP_Ne, 1, 0);
- sqliteVdbeAddOp(v, OP_Pop, 1, 0);
- }else{
- jumpInst = sqliteVdbeAddOp(v, OP_IfNot, 1, 0);
- }
- sqliteExprCode(pParse, pExpr->pList->a[i+1].pExpr);
- sqliteVdbeAddOp(v, OP_Goto, 0, expr_end_label);
- addr = sqliteVdbeCurrentAddr(v);
- sqliteVdbeChangeP2(v, jumpInst, addr);
- }
- if( pExpr->pLeft ){
- sqliteVdbeAddOp(v, OP_Pop, 1, 0);
- }
- if( pExpr->pRight ){
- sqliteExprCode(pParse, pExpr->pRight);
- }else{
- sqliteVdbeAddOp(v, OP_String, 0, 0);
- }
- sqliteVdbeResolveLabel(v, expr_end_label);
- break;
- }
- case TK_RAISE: {
- if( !pParse->trigStack ){
- sqliteErrorMsg(pParse,
- "RAISE() may only be used within a trigger-program");
- pParse->nErr++;
- return;
- }
- if( pExpr->iColumn == OE_Rollback ||
- pExpr->iColumn == OE_Abort ||
- pExpr->iColumn == OE_Fail ){
- sqliteVdbeOp3(v, OP_Halt, SQLITE_CONSTRAINT, pExpr->iColumn,
- pExpr->token.z, pExpr->token.n);
- sqliteVdbeDequoteP3(v, -1);
- } else {
- assert( pExpr->iColumn == OE_Ignore );
- sqliteVdbeOp3(v, OP_Goto, 0, pParse->trigStack->ignoreJump,
- "(IGNORE jump)", 0);
- }
- }
- break;
- }
-}
-
-/*
-** Generate code that pushes the value of every element of the given
-** expression list onto the stack. If the includeTypes flag is true,
-** then also push a string that is the datatype of each element onto
-** the stack after the value.
-**
-** Return the number of elements pushed onto the stack.
-*/
-int sqliteExprCodeExprList(
- Parse *pParse, /* Parsing context */
- ExprList *pList, /* The expression list to be coded */
- int includeTypes /* TRUE to put datatypes on the stack too */
-){
- struct ExprList_item *pItem;
- int i, n;
- Vdbe *v;
- if( pList==0 ) return 0;
- v = sqliteGetVdbe(pParse);
- n = pList->nExpr;
- for(pItem=pList->a, i=0; i<n; i++, pItem++){
- sqliteExprCode(pParse, pItem->pExpr);
- if( includeTypes ){
- sqliteVdbeOp3(v, OP_String, 0, 0,
- sqliteExprType(pItem->pExpr)==SQLITE_SO_NUM ? "numeric" : "text",
- P3_STATIC);
- }
- }
- return includeTypes ? n*2 : n;
-}
-
-/*
-** Generate code for a boolean expression such that a jump is made
-** to the label "dest" if the expression is true but execution
-** continues straight thru if the expression is false.
-**
-** If the expression evaluates to NULL (neither true nor false), then
-** take the jump if the jumpIfNull flag is true.
-*/
-void sqliteExprIfTrue(Parse *pParse, Expr *pExpr, int dest, int jumpIfNull){
- Vdbe *v = pParse->pVdbe;
- int op = 0;
- if( v==0 || pExpr==0 ) return;
- switch( pExpr->op ){
- case TK_LT: op = OP_Lt; break;
- case TK_LE: op = OP_Le; break;
- case TK_GT: op = OP_Gt; break;
- case TK_GE: op = OP_Ge; break;
- case TK_NE: op = OP_Ne; break;
- case TK_EQ: op = OP_Eq; break;
- case TK_ISNULL: op = OP_IsNull; break;
- case TK_NOTNULL: op = OP_NotNull; break;
- default: break;
- }
- switch( pExpr->op ){
- case TK_AND: {
- int d2 = sqliteVdbeMakeLabel(v);
- sqliteExprIfFalse(pParse, pExpr->pLeft, d2, !jumpIfNull);
- sqliteExprIfTrue(pParse, pExpr->pRight, dest, jumpIfNull);
- sqliteVdbeResolveLabel(v, d2);
- break;
- }
- case TK_OR: {
- sqliteExprIfTrue(pParse, pExpr->pLeft, dest, jumpIfNull);
- sqliteExprIfTrue(pParse, pExpr->pRight, dest, jumpIfNull);
- break;
- }
- case TK_NOT: {
- sqliteExprIfFalse(pParse, pExpr->pLeft, dest, jumpIfNull);
- break;
- }
- case TK_LT:
- case TK_LE:
- case TK_GT:
- case TK_GE:
- case TK_NE:
- case TK_EQ: {
- sqliteExprCode(pParse, pExpr->pLeft);
- sqliteExprCode(pParse, pExpr->pRight);
- if( pParse->db->file_format>=4 && sqliteExprType(pExpr)==SQLITE_SO_TEXT ){
- op += 6; /* Convert numeric opcodes to text opcodes */
- }
- sqliteVdbeAddOp(v, op, jumpIfNull, dest);
- break;
- }
- case TK_ISNULL:
- case TK_NOTNULL: {
- sqliteExprCode(pParse, pExpr->pLeft);
- sqliteVdbeAddOp(v, op, 1, dest);
- break;
- }
- case TK_IN: {
- int addr;
- sqliteExprCode(pParse, pExpr->pLeft);
- addr = sqliteVdbeCurrentAddr(v);
- sqliteVdbeAddOp(v, OP_NotNull, -1, addr+3);
- sqliteVdbeAddOp(v, OP_Pop, 1, 0);
- sqliteVdbeAddOp(v, OP_Goto, 0, jumpIfNull ? dest : addr+4);
- if( pExpr->pSelect ){
- sqliteVdbeAddOp(v, OP_Found, pExpr->iTable, dest);
- }else{
- sqliteVdbeAddOp(v, OP_SetFound, pExpr->iTable, dest);
- }
- break;
- }
- case TK_BETWEEN: {
- int addr;
- sqliteExprCode(pParse, pExpr->pLeft);
- sqliteVdbeAddOp(v, OP_Dup, 0, 0);
- sqliteExprCode(pParse, pExpr->pList->a[0].pExpr);
- addr = sqliteVdbeAddOp(v, OP_Lt, !jumpIfNull, 0);
- sqliteExprCode(pParse, pExpr->pList->a[1].pExpr);
- sqliteVdbeAddOp(v, OP_Le, jumpIfNull, dest);
- sqliteVdbeAddOp(v, OP_Integer, 0, 0);
- sqliteVdbeChangeP2(v, addr, sqliteVdbeCurrentAddr(v));
- sqliteVdbeAddOp(v, OP_Pop, 1, 0);
- break;
- }
- default: {
- sqliteExprCode(pParse, pExpr);
- sqliteVdbeAddOp(v, OP_If, jumpIfNull, dest);
- break;
- }
- }
-}
-
-/*
-** Generate code for a boolean expression such that a jump is made
-** to the label "dest" if the expression is false but execution
-** continues straight thru if the expression is true.
-**
-** If the expression evaluates to NULL (neither true nor false) then
-** jump if jumpIfNull is true or fall through if jumpIfNull is false.
-*/
-void sqliteExprIfFalse(Parse *pParse, Expr *pExpr, int dest, int jumpIfNull){
- Vdbe *v = pParse->pVdbe;
- int op = 0;
- if( v==0 || pExpr==0 ) return;
- switch( pExpr->op ){
- case TK_LT: op = OP_Ge; break;
- case TK_LE: op = OP_Gt; break;
- case TK_GT: op = OP_Le; break;
- case TK_GE: op = OP_Lt; break;
- case TK_NE: op = OP_Eq; break;
- case TK_EQ: op = OP_Ne; break;
- case TK_ISNULL: op = OP_NotNull; break;
- case TK_NOTNULL: op = OP_IsNull; break;
- default: break;
- }
- switch( pExpr->op ){
- case TK_AND: {
- sqliteExprIfFalse(pParse, pExpr->pLeft, dest, jumpIfNull);
- sqliteExprIfFalse(pParse, pExpr->pRight, dest, jumpIfNull);
- break;
- }
- case TK_OR: {
- int d2 = sqliteVdbeMakeLabel(v);
- sqliteExprIfTrue(pParse, pExpr->pLeft, d2, !jumpIfNull);
- sqliteExprIfFalse(pParse, pExpr->pRight, dest, jumpIfNull);
- sqliteVdbeResolveLabel(v, d2);
- break;
- }
- case TK_NOT: {
- sqliteExprIfTrue(pParse, pExpr->pLeft, dest, jumpIfNull);
- break;
- }
- case TK_LT:
- case TK_LE:
- case TK_GT:
- case TK_GE:
- case TK_NE:
- case TK_EQ: {
- if( pParse->db->file_format>=4 && sqliteExprType(pExpr)==SQLITE_SO_TEXT ){
- /* Convert numeric comparison opcodes into text comparison opcodes.
- ** This step depends on the fact that the text comparision opcodes are
- ** always 6 greater than their corresponding numeric comparison
- ** opcodes.
- */
- assert( OP_Eq+6 == OP_StrEq );
- op += 6;
- }
- sqliteExprCode(pParse, pExpr->pLeft);
- sqliteExprCode(pParse, pExpr->pRight);
- sqliteVdbeAddOp(v, op, jumpIfNull, dest);
- break;
- }
- case TK_ISNULL:
- case TK_NOTNULL: {
- sqliteExprCode(pParse, pExpr->pLeft);
- sqliteVdbeAddOp(v, op, 1, dest);
- break;
- }
- case TK_IN: {
- int addr;
- sqliteExprCode(pParse, pExpr->pLeft);
- addr = sqliteVdbeCurrentAddr(v);
- sqliteVdbeAddOp(v, OP_NotNull, -1, addr+3);
- sqliteVdbeAddOp(v, OP_Pop, 1, 0);
- sqliteVdbeAddOp(v, OP_Goto, 0, jumpIfNull ? dest : addr+4);
- if( pExpr->pSelect ){
- sqliteVdbeAddOp(v, OP_NotFound, pExpr->iTable, dest);
- }else{
- sqliteVdbeAddOp(v, OP_SetNotFound, pExpr->iTable, dest);
- }
- break;
- }
- case TK_BETWEEN: {
- int addr;
- sqliteExprCode(pParse, pExpr->pLeft);
- sqliteVdbeAddOp(v, OP_Dup, 0, 0);
- sqliteExprCode(pParse, pExpr->pList->a[0].pExpr);
- addr = sqliteVdbeCurrentAddr(v);
- sqliteVdbeAddOp(v, OP_Ge, !jumpIfNull, addr+3);
- sqliteVdbeAddOp(v, OP_Pop, 1, 0);
- sqliteVdbeAddOp(v, OP_Goto, 0, dest);
- sqliteExprCode(pParse, pExpr->pList->a[1].pExpr);
- sqliteVdbeAddOp(v, OP_Gt, jumpIfNull, dest);
- break;
- }
- default: {
- sqliteExprCode(pParse, pExpr);
- sqliteVdbeAddOp(v, OP_IfNot, jumpIfNull, dest);
- break;
- }
- }
-}
-
-/*
-** Do a deep comparison of two expression trees. Return TRUE (non-zero)
-** if they are identical and return FALSE if they differ in any way.
-*/
-int sqliteExprCompare(Expr *pA, Expr *pB){
- int i;
- if( pA==0 ){
- return pB==0;
- }else if( pB==0 ){
- return 0;
- }
- if( pA->op!=pB->op ) return 0;
- if( !sqliteExprCompare(pA->pLeft, pB->pLeft) ) return 0;
- if( !sqliteExprCompare(pA->pRight, pB->pRight) ) return 0;
- if( pA->pList ){
- if( pB->pList==0 ) return 0;
- if( pA->pList->nExpr!=pB->pList->nExpr ) return 0;
- for(i=0; i<pA->pList->nExpr; i++){
- if( !sqliteExprCompare(pA->pList->a[i].pExpr, pB->pList->a[i].pExpr) ){
- return 0;
- }
- }
- }else if( pB->pList ){
- return 0;
- }
- if( pA->pSelect || pB->pSelect ) return 0;
- if( pA->iTable!=pB->iTable || pA->iColumn!=pB->iColumn ) return 0;
- if( pA->token.z ){
- if( pB->token.z==0 ) return 0;
- if( pB->token.n!=pA->token.n ) return 0;
- if( sqliteStrNICmp(pA->token.z, pB->token.z, pB->token.n)!=0 ) return 0;
- }
- return 1;
-}
-
-/*
-** Add a new element to the pParse->aAgg[] array and return its index.
-*/
-static int appendAggInfo(Parse *pParse){
- if( (pParse->nAgg & 0x7)==0 ){
- int amt = pParse->nAgg + 8;
- AggExpr *aAgg = sqliteRealloc(pParse->aAgg, amt*sizeof(pParse->aAgg[0]));
- if( aAgg==0 ){
- return -1;
- }
- pParse->aAgg = aAgg;
- }
- memset(&pParse->aAgg[pParse->nAgg], 0, sizeof(pParse->aAgg[0]));
- return pParse->nAgg++;
-}
-
-/*
-** Analyze the given expression looking for aggregate functions and
-** for variables that need to be added to the pParse->aAgg[] array.
-** Make additional entries to the pParse->aAgg[] array as necessary.
-**
-** This routine should only be called after the expression has been
-** analyzed by sqliteExprResolveIds() and sqliteExprCheck().
-**
-** If errors are seen, leave an error message in zErrMsg and return
-** the number of errors.
-*/
-int sqliteExprAnalyzeAggregates(Parse *pParse, Expr *pExpr){
- int i;
- AggExpr *aAgg;
- int nErr = 0;
-
- if( pExpr==0 ) return 0;
- switch( pExpr->op ){
- case TK_COLUMN: {
- aAgg = pParse->aAgg;
- for(i=0; i<pParse->nAgg; i++){
- if( aAgg[i].isAgg ) continue;
- if( aAgg[i].pExpr->iTable==pExpr->iTable
- && aAgg[i].pExpr->iColumn==pExpr->iColumn ){
- break;
- }
- }
- if( i>=pParse->nAgg ){
- i = appendAggInfo(pParse);
- if( i<0 ) return 1;
- pParse->aAgg[i].isAgg = 0;
- pParse->aAgg[i].pExpr = pExpr;
- }
- pExpr->iAgg = i;
- break;
- }
- case TK_AGG_FUNCTION: {
- aAgg = pParse->aAgg;
- for(i=0; i<pParse->nAgg; i++){
- if( !aAgg[i].isAgg ) continue;
- if( sqliteExprCompare(aAgg[i].pExpr, pExpr) ){
- break;
- }
- }
- if( i>=pParse->nAgg ){
- i = appendAggInfo(pParse);
- if( i<0 ) return 1;
- pParse->aAgg[i].isAgg = 1;
- pParse->aAgg[i].pExpr = pExpr;
- pParse->aAgg[i].pFunc = sqliteFindFunction(pParse->db,
- pExpr->token.z, pExpr->token.n,
- pExpr->pList ? pExpr->pList->nExpr : 0, 0);
- }
- pExpr->iAgg = i;
- break;
- }
- default: {
- if( pExpr->pLeft ){
- nErr = sqliteExprAnalyzeAggregates(pParse, pExpr->pLeft);
- }
- if( nErr==0 && pExpr->pRight ){
- nErr = sqliteExprAnalyzeAggregates(pParse, pExpr->pRight);
- }
- if( nErr==0 && pExpr->pList ){
- int n = pExpr->pList->nExpr;
- int i;
- for(i=0; nErr==0 && i<n; i++){
- nErr = sqliteExprAnalyzeAggregates(pParse, pExpr->pList->a[i].pExpr);
- }
- }
- break;
- }
- }
- return nErr;
-}
-
-/*
-** Locate a user function given a name and a number of arguments.
-** Return a pointer to the FuncDef structure that defines that
-** function, or return NULL if the function does not exist.
-**
-** If the createFlag argument is true, then a new (blank) FuncDef
-** structure is created and liked into the "db" structure if a
-** no matching function previously existed. When createFlag is true
-** and the nArg parameter is -1, then only a function that accepts
-** any number of arguments will be returned.
-**
-** If createFlag is false and nArg is -1, then the first valid
-** function found is returned. A function is valid if either xFunc
-** or xStep is non-zero.
-*/
-FuncDef *sqliteFindFunction(
- sqlite *db, /* An open database */
- const char *zName, /* Name of the function. Not null-terminated */
- int nName, /* Number of characters in the name */
- int nArg, /* Number of arguments. -1 means any number */
- int createFlag /* Create new entry if true and does not otherwise exist */
-){
- FuncDef *pFirst, *p, *pMaybe;
- pFirst = p = (FuncDef*)sqliteHashFind(&db->aFunc, zName, nName);
- if( p && !createFlag && nArg<0 ){
- while( p && p->xFunc==0 && p->xStep==0 ){ p = p->pNext; }
- return p;
- }
- pMaybe = 0;
- while( p && p->nArg!=nArg ){
- if( p->nArg<0 && !createFlag && (p->xFunc || p->xStep) ) pMaybe = p;
- p = p->pNext;
- }
- if( p && !createFlag && p->xFunc==0 && p->xStep==0 ){
- return 0;
- }
- if( p==0 && pMaybe ){
- assert( createFlag==0 );
- return pMaybe;
- }
- if( p==0 && createFlag && (p = sqliteMalloc(sizeof(*p)))!=0 ){
- p->nArg = nArg;
- p->pNext = pFirst;
- p->dataType = pFirst ? pFirst->dataType : SQLITE_NUMERIC;
- sqliteHashInsert(&db->aFunc, zName, nName, (void*)p);
- }
- return p;
-}
diff --git a/ext/sqlite/libsqlite/src/func.c b/ext/sqlite/libsqlite/src/func.c
deleted file mode 100644
index d54f341472..0000000000
--- a/ext/sqlite/libsqlite/src/func.c
+++ /dev/null
@@ -1,646 +0,0 @@
-/*
-** 2002 February 23
-**
-** The author disclaims copyright to this source code. In place of
-** a legal notice, here is a blessing:
-**
-** May you do good and not evil.
-** May you find forgiveness for yourself and forgive others.
-** May you share freely, never taking more than you give.
-**
-*************************************************************************
-** This file contains the C functions that implement various SQL
-** functions of SQLite.
-**
-** There is only one exported symbol in this file - the function
-** sqliteRegisterBuildinFunctions() found at the bottom of the file.
-** All other code has file scope.
-**
-** $Id$
-*/
-#include <ctype.h>
-#include <math.h>
-#include <stdlib.h>
-#include <assert.h>
-#include "sqliteInt.h"
-#include "os.h"
-
-/*
-** Implementation of the non-aggregate min() and max() functions
-*/
-static void minmaxFunc(sqlite_func *context, int argc, const char **argv){
- const char *zBest;
- int i;
- int (*xCompare)(const char*, const char*);
- int mask; /* 0 for min() or 0xffffffff for max() */
-
- if( argc==0 ) return;
- mask = (int)sqlite_user_data(context);
- zBest = argv[0];
- if( zBest==0 ) return;
- if( argv[1][0]=='n' ){
- xCompare = sqliteCompare;
- }else{
- xCompare = strcmp;
- }
- for(i=2; i<argc; i+=2){
- if( argv[i]==0 ) return;
- if( (xCompare(argv[i], zBest)^mask)<0 ){
- zBest = argv[i];
- }
- }
- sqlite_set_result_string(context, zBest, -1);
-}
-
-/*
-** Return the type of the argument.
-*/
-static void typeofFunc(sqlite_func *context, int argc, const char **argv){
- assert( argc==2 );
- sqlite_set_result_string(context, argv[1], -1);
-}
-
-/*
-** Implementation of the length() function
-*/
-static void lengthFunc(sqlite_func *context, int argc, const char **argv){
- const char *z;
- int len;
-
- assert( argc==1 );
- z = argv[0];
- if( z==0 ) return;
-#ifdef SQLITE_UTF8
- for(len=0; *z; z++){ if( (0xc0&*z)!=0x80 ) len++; }
-#else
- len = strlen(z);
-#endif
- sqlite_set_result_int(context, len);
-}
-
-/*
-** Implementation of the abs() function
-*/
-static void absFunc(sqlite_func *context, int argc, const char **argv){
- const char *z;
- assert( argc==1 );
- z = argv[0];
- if( z==0 ) return;
- if( z[0]=='-' && isdigit(z[1]) ) z++;
- sqlite_set_result_string(context, z, -1);
-}
-
-/*
-** Implementation of the substr() function
-*/
-static void substrFunc(sqlite_func *context, int argc, const char **argv){
- const char *z;
-#ifdef SQLITE_UTF8
- const char *z2;
- int i;
-#endif
- int p1, p2, len;
- assert( argc==3 );
- z = argv[0];
- if( z==0 ) return;
- p1 = atoi(argv[1]?argv[1]:0);
- p2 = atoi(argv[2]?argv[2]:0);
-#ifdef SQLITE_UTF8
- for(len=0, z2=z; *z2; z2++){ if( (0xc0&*z2)!=0x80 ) len++; }
-#else
- len = strlen(z);
-#endif
- if( p1<0 ){
- p1 += len;
- if( p1<0 ){
- p2 += p1;
- p1 = 0;
- }
- }else if( p1>0 ){
- p1--;
- }
- if( p1+p2>len ){
- p2 = len-p1;
- }
-#ifdef SQLITE_UTF8
- for(i=0; i<p1 && z[i]; i++){
- if( (z[i]&0xc0)==0x80 ) p1++;
- }
- while( z[i] && (z[i]&0xc0)==0x80 ){ i++; p1++; }
- for(; i<p1+p2 && z[i]; i++){
- if( (z[i]&0xc0)==0x80 ) p2++;
- }
- while( z[i] && (z[i]&0xc0)==0x80 ){ i++; p2++; }
-#endif
- if( p2<0 ) p2 = 0;
- sqlite_set_result_string(context, &z[p1], p2);
-}
-
-/*
-** Implementation of the round() function
-*/
-static void roundFunc(sqlite_func *context, int argc, const char **argv){
- int n;
- double r;
- char zBuf[100];
- assert( argc==1 || argc==2 );
- if( argv[0]==0 || (argc==2 && argv[1]==0) ) return;
- n = argc==2 ? atoi(argv[1]) : 0;
- if( n>30 ) n = 30;
- if( n<0 ) n = 0;
- r = sqliteAtoF(argv[0], 0);
- sprintf(zBuf,"%.*f",n,r);
- sqlite_set_result_string(context, zBuf, -1);
-}
-
-/*
-** Implementation of the upper() and lower() SQL functions.
-*/
-static void upperFunc(sqlite_func *context, int argc, const char **argv){
- char *z;
- int i;
- if( argc<1 || argv[0]==0 ) return;
- z = sqlite_set_result_string(context, argv[0], -1);
- if( z==0 ) return;
- for(i=0; z[i]; i++){
- if( islower(z[i]) ) z[i] = toupper(z[i]);
- }
-}
-static void lowerFunc(sqlite_func *context, int argc, const char **argv){
- char *z;
- int i;
- if( argc<1 || argv[0]==0 ) return;
- z = sqlite_set_result_string(context, argv[0], -1);
- if( z==0 ) return;
- for(i=0; z[i]; i++){
- if( isupper(z[i]) ) z[i] = tolower(z[i]);
- }
-}
-
-/*
-** Implementation of the IFNULL(), NVL(), and COALESCE() functions.
-** All three do the same thing. They return the first non-NULL
-** argument.
-*/
-static void ifnullFunc(sqlite_func *context, int argc, const char **argv){
- int i;
- for(i=0; i<argc; i++){
- if( argv[i] ){
- sqlite_set_result_string(context, argv[i], -1);
- break;
- }
- }
-}
-
-/*
-** Implementation of random(). Return a random integer.
-*/
-static void randomFunc(sqlite_func *context, int argc, const char **argv){
- int r;
- sqliteRandomness(sizeof(r), &r);
- sqlite_set_result_int(context, r);
-}
-
-/*
-** Implementation of the last_insert_rowid() SQL function. The return
-** value is the same as the sqlite_last_insert_rowid() API function.
-*/
-static void last_insert_rowid(sqlite_func *context, int arg, const char **argv){
- sqlite *db = sqlite_user_data(context);
- sqlite_set_result_int(context, sqlite_last_insert_rowid(db));
-}
-
-/*
-** Implementation of the change_count() SQL function. The return
-** value is the same as the sqlite_changes() API function.
-*/
-static void change_count(sqlite_func *context, int arg, const char **argv){
- sqlite *db = sqlite_user_data(context);
- sqlite_set_result_int(context, sqlite_changes(db));
-}
-
-/*
-** Implementation of the last_statement_change_count() SQL function. The
-** return value is the same as the sqlite_last_statement_changes() API function.
-*/
-static void last_statement_change_count(sqlite_func *context, int arg,
- const char **argv){
- sqlite *db = sqlite_user_data(context);
- sqlite_set_result_int(context, sqlite_last_statement_changes(db));
-}
-
-/*
-** Implementation of the like() SQL function. This function implements
-** the build-in LIKE operator. The first argument to the function is the
-** string and the second argument is the pattern. So, the SQL statements:
-**
-** A LIKE B
-**
-** is implemented as like(A,B).
-*/
-static void likeFunc(sqlite_func *context, int arg, const char **argv){
- if( argv[0]==0 || argv[1]==0 ) return;
- sqlite_set_result_int(context,
- sqliteLikeCompare((const unsigned char*)argv[0],
- (const unsigned char*)argv[1]));
-}
-
-/*
-** Implementation of the glob() SQL function. This function implements
-** the build-in GLOB operator. The first argument to the function is the
-** string and the second argument is the pattern. So, the SQL statements:
-**
-** A GLOB B
-**
-** is implemented as glob(A,B).
-*/
-static void globFunc(sqlite_func *context, int arg, const char **argv){
- if( argv[0]==0 || argv[1]==0 ) return;
- sqlite_set_result_int(context,
- sqliteGlobCompare((const unsigned char*)argv[0],
- (const unsigned char*)argv[1]));
-}
-
-/*
-** Implementation of the NULLIF(x,y) function. The result is the first
-** argument if the arguments are different. The result is NULL if the
-** arguments are equal to each other.
-*/
-static void nullifFunc(sqlite_func *context, int argc, const char **argv){
- if( argv[0]!=0 && sqliteCompare(argv[0],argv[1])!=0 ){
- sqlite_set_result_string(context, argv[0], -1);
- }
-}
-
-/*
-** Implementation of the VERSION(*) function. The result is the version
-** of the SQLite library that is running.
-*/
-static void versionFunc(sqlite_func *context, int argc, const char **argv){
- sqlite_set_result_string(context, sqlite_version, -1);
-}
-
-/*
-** EXPERIMENTAL - This is not an official function. The interface may
-** change. This function may disappear. Do not write code that depends
-** on this function.
-**
-** Implementation of the QUOTE() function. This function takes a single
-** argument. If the argument is numeric, the return value is the same as
-** the argument. If the argument is NULL, the return value is the string
-** "NULL". Otherwise, the argument is enclosed in single quotes with
-** single-quote escapes.
-*/
-static void quoteFunc(sqlite_func *context, int argc, const char **argv){
- if( argc<1 ) return;
- if( argv[0]==0 ){
- sqlite_set_result_string(context, "NULL", 4);
- }else if( sqliteIsNumber(argv[0]) ){
- sqlite_set_result_string(context, argv[0], -1);
- }else{
- int i,j,n;
- char *z;
- for(i=n=0; argv[0][i]; i++){ if( argv[0][i]=='\'' ) n++; }
- z = sqliteMalloc( i+n+3 );
- if( z==0 ) return;
- z[0] = '\'';
- for(i=0, j=1; argv[0][i]; i++){
- z[j++] = argv[0][i];
- if( argv[0][i]=='\'' ){
- z[j++] = '\'';
- }
- }
- z[j++] = '\'';
- z[j] = 0;
- sqlite_set_result_string(context, z, j);
- sqliteFree(z);
- }
-}
-
-#ifdef SQLITE_SOUNDEX
-/*
-** Compute the soundex encoding of a word.
-*/
-static void soundexFunc(sqlite_func *context, int argc, const char **argv){
- char zResult[8];
- const char *zIn;
- int i, j;
- static const unsigned char iCode[] = {
- 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, 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, 3, 0, 1, 2, 0, 0, 2, 2, 4, 5, 5, 0,
- 1, 2, 6, 2, 3, 0, 1, 0, 2, 0, 2, 0, 0, 0, 0, 0,
- 0, 0, 1, 2, 3, 0, 1, 2, 0, 0, 2, 2, 4, 5, 5, 0,
- 1, 2, 6, 2, 3, 0, 1, 0, 2, 0, 2, 0, 0, 0, 0, 0,
- };
- assert( argc==1 );
- zIn = argv[0];
- for(i=0; zIn[i] && !isalpha(zIn[i]); i++){}
- if( zIn[i] ){
- zResult[0] = toupper(zIn[i]);
- for(j=1; j<4 && zIn[i]; i++){
- int code = iCode[zIn[i]&0x7f];
- if( code>0 ){
- zResult[j++] = code + '0';
- }
- }
- while( j<4 ){
- zResult[j++] = '0';
- }
- zResult[j] = 0;
- sqlite_set_result_string(context, zResult, 4);
- }else{
- sqlite_set_result_string(context, "?000", 4);
- }
-}
-#endif
-
-#ifdef SQLITE_TEST
-/*
-** This function generates a string of random characters. Used for
-** generating test data.
-*/
-static void randStr(sqlite_func *context, int argc, const char **argv){
- static const unsigned char zSrc[] =
- "abcdefghijklmnopqrstuvwxyz"
- "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
- "0123456789"
- ".-!,:*^+=_|?/<> ";
- int iMin, iMax, n, r, i;
- unsigned char zBuf[1000];
- if( argc>=1 ){
- iMin = atoi(argv[0]);
- if( iMin<0 ) iMin = 0;
- if( iMin>=sizeof(zBuf) ) iMin = sizeof(zBuf)-1;
- }else{
- iMin = 1;
- }
- if( argc>=2 ){
- iMax = atoi(argv[1]);
- if( iMax<iMin ) iMax = iMin;
- if( iMax>=sizeof(zBuf) ) iMax = sizeof(zBuf)-1;
- }else{
- iMax = 50;
- }
- n = iMin;
- if( iMax>iMin ){
- sqliteRandomness(sizeof(r), &r);
- r &= 0x7fffffff;
- n += r%(iMax + 1 - iMin);
- }
- assert( n<sizeof(zBuf) );
- sqliteRandomness(n, zBuf);
- for(i=0; i<n; i++){
- zBuf[i] = zSrc[zBuf[i]%(sizeof(zSrc)-1)];
- }
- zBuf[n] = 0;
- sqlite_set_result_string(context, zBuf, n);
-}
-#endif
-
-/*
-** An instance of the following structure holds the context of a
-** sum() or avg() aggregate computation.
-*/
-typedef struct SumCtx SumCtx;
-struct SumCtx {
- double sum; /* Sum of terms */
- int cnt; /* Number of elements summed */
-};
-
-/*
-** Routines used to compute the sum or average.
-*/
-static void sumStep(sqlite_func *context, int argc, const char **argv){
- SumCtx *p;
- if( argc<1 ) return;
- p = sqlite_aggregate_context(context, sizeof(*p));
- if( p && argv[0] ){
- p->sum += sqliteAtoF(argv[0], 0);
- p->cnt++;
- }
-}
-static void sumFinalize(sqlite_func *context){
- SumCtx *p;
- p = sqlite_aggregate_context(context, sizeof(*p));
- sqlite_set_result_double(context, p ? p->sum : 0.0);
-}
-static void avgFinalize(sqlite_func *context){
- SumCtx *p;
- p = sqlite_aggregate_context(context, sizeof(*p));
- if( p && p->cnt>0 ){
- sqlite_set_result_double(context, p->sum/(double)p->cnt);
- }
-}
-
-/*
-** An instance of the following structure holds the context of a
-** variance or standard deviation computation.
-*/
-typedef struct StdDevCtx StdDevCtx;
-struct StdDevCtx {
- double sum; /* Sum of terms */
- double sum2; /* Sum of the squares of terms */
- int cnt; /* Number of terms counted */
-};
-
-#if 0 /* Omit because math library is required */
-/*
-** Routines used to compute the standard deviation as an aggregate.
-*/
-static void stdDevStep(sqlite_func *context, int argc, const char **argv){
- StdDevCtx *p;
- double x;
- if( argc<1 ) return;
- p = sqlite_aggregate_context(context, sizeof(*p));
- if( p && argv[0] ){
- x = sqliteAtoF(argv[0], 0);
- p->sum += x;
- p->sum2 += x*x;
- p->cnt++;
- }
-}
-static void stdDevFinalize(sqlite_func *context){
- double rN = sqlite_aggregate_count(context);
- StdDevCtx *p = sqlite_aggregate_context(context, sizeof(*p));
- if( p && p->cnt>1 ){
- double rCnt = cnt;
- sqlite_set_result_double(context,
- sqrt((p->sum2 - p->sum*p->sum/rCnt)/(rCnt-1.0)));
- }
-}
-#endif
-
-/*
-** The following structure keeps track of state information for the
-** count() aggregate function.
-*/
-typedef struct CountCtx CountCtx;
-struct CountCtx {
- int n;
-};
-
-/*
-** Routines to implement the count() aggregate function.
-*/
-static void countStep(sqlite_func *context, int argc, const char **argv){
- CountCtx *p;
- p = sqlite_aggregate_context(context, sizeof(*p));
- if( (argc==0 || argv[0]) && p ){
- p->n++;
- }
-}
-static void countFinalize(sqlite_func *context){
- CountCtx *p;
- p = sqlite_aggregate_context(context, sizeof(*p));
- sqlite_set_result_int(context, p ? p->n : 0);
-}
-
-/*
-** This function tracks state information for the min() and max()
-** aggregate functions.
-*/
-typedef struct MinMaxCtx MinMaxCtx;
-struct MinMaxCtx {
- char *z; /* The best so far */
- char zBuf[28]; /* Space that can be used for storage */
-};
-
-/*
-** Routines to implement min() and max() aggregate functions.
-*/
-static void minmaxStep(sqlite_func *context, int argc, const char **argv){
- MinMaxCtx *p;
- int (*xCompare)(const char*, const char*);
- int mask; /* 0 for min() or 0xffffffff for max() */
-
- assert( argc==2 );
- if( argv[1][0]=='n' ){
- xCompare = sqliteCompare;
- }else{
- xCompare = strcmp;
- }
- mask = (int)sqlite_user_data(context);
- p = sqlite_aggregate_context(context, sizeof(*p));
- if( p==0 || argc<1 || argv[0]==0 ) return;
- if( p->z==0 || (xCompare(argv[0],p->z)^mask)<0 ){
- int len;
- if( !p->zBuf[0] ){
- sqliteFree(p->z);
- }
- len = strlen(argv[0]);
- if( len < sizeof(p->zBuf)-1 ){
- p->z = &p->zBuf[1];
- p->zBuf[0] = 1;
- }else{
- p->z = sqliteMalloc( len+1 );
- p->zBuf[0] = 0;
- if( p->z==0 ) return;
- }
- strcpy(p->z, argv[0]);
- }
-}
-static void minMaxFinalize(sqlite_func *context){
- MinMaxCtx *p;
- p = sqlite_aggregate_context(context, sizeof(*p));
- if( p && p->z ){
- sqlite_set_result_string(context, p->z, strlen(p->z));
- }
- if( p && !p->zBuf[0] ){
- sqliteFree(p->z);
- }
-}
-
-/*
-** This function registered all of the above C functions as SQL
-** functions. This should be the only routine in this file with
-** external linkage.
-*/
-void sqliteRegisterBuiltinFunctions(sqlite *db){
- static struct {
- char *zName;
- signed char nArg;
- signed char dataType;
- u8 argType; /* 0: none. 1: db 2: (-1) */
- void (*xFunc)(sqlite_func*,int,const char**);
- } aFuncs[] = {
- { "min", -1, SQLITE_ARGS, 0, minmaxFunc },
- { "min", 0, 0, 0, 0 },
- { "max", -1, SQLITE_ARGS, 2, minmaxFunc },
- { "max", 0, 0, 2, 0 },
- { "typeof", 1, SQLITE_TEXT, 0, typeofFunc },
- { "length", 1, SQLITE_NUMERIC, 0, lengthFunc },
- { "substr", 3, SQLITE_TEXT, 0, substrFunc },
- { "abs", 1, SQLITE_NUMERIC, 0, absFunc },
- { "round", 1, SQLITE_NUMERIC, 0, roundFunc },
- { "round", 2, SQLITE_NUMERIC, 0, roundFunc },
- { "upper", 1, SQLITE_TEXT, 0, upperFunc },
- { "lower", 1, SQLITE_TEXT, 0, lowerFunc },
- { "coalesce", -1, SQLITE_ARGS, 0, ifnullFunc },
- { "coalesce", 0, 0, 0, 0 },
- { "coalesce", 1, 0, 0, 0 },
- { "ifnull", 2, SQLITE_ARGS, 0, ifnullFunc },
- { "random", -1, SQLITE_NUMERIC, 0, randomFunc },
- { "like", 2, SQLITE_NUMERIC, 0, likeFunc },
- { "glob", 2, SQLITE_NUMERIC, 0, globFunc },
- { "nullif", 2, SQLITE_ARGS, 0, nullifFunc },
- { "sqlite_version",0,SQLITE_TEXT, 0, versionFunc},
- { "quote", 1, SQLITE_ARGS, 0, quoteFunc },
- { "last_insert_rowid", 0, SQLITE_NUMERIC, 1, last_insert_rowid },
- { "change_count", 0, SQLITE_NUMERIC, 1, change_count },
- { "last_statement_change_count",
- 0, SQLITE_NUMERIC, 1, last_statement_change_count },
-#ifdef SQLITE_SOUNDEX
- { "soundex", 1, SQLITE_TEXT, 0, soundexFunc},
-#endif
-#ifdef SQLITE_TEST
- { "randstr", 2, SQLITE_TEXT, 0, randStr },
-#endif
- };
- static struct {
- char *zName;
- signed char nArg;
- signed char dataType;
- u8 argType;
- void (*xStep)(sqlite_func*,int,const char**);
- void (*xFinalize)(sqlite_func*);
- } aAggs[] = {
- { "min", 1, 0, 0, minmaxStep, minMaxFinalize },
- { "max", 1, 0, 2, minmaxStep, minMaxFinalize },
- { "sum", 1, SQLITE_NUMERIC, 0, sumStep, sumFinalize },
- { "avg", 1, SQLITE_NUMERIC, 0, sumStep, avgFinalize },
- { "count", 0, SQLITE_NUMERIC, 0, countStep, countFinalize },
- { "count", 1, SQLITE_NUMERIC, 0, countStep, countFinalize },
-#if 0
- { "stddev", 1, SQLITE_NUMERIC, 0, stdDevStep, stdDevFinalize },
-#endif
- };
- static const char *azTypeFuncs[] = { "min", "max", "typeof" };
- int i;
-
- for(i=0; i<sizeof(aFuncs)/sizeof(aFuncs[0]); i++){
- void *pArg = aFuncs[i].argType==2 ? (void*)(-1) : db;
- sqlite_create_function(db, aFuncs[i].zName,
- aFuncs[i].nArg, aFuncs[i].xFunc, pArg);
- if( aFuncs[i].xFunc ){
- sqlite_function_type(db, aFuncs[i].zName, aFuncs[i].dataType);
- }
- }
- for(i=0; i<sizeof(aAggs)/sizeof(aAggs[0]); i++){
- void *pArg = aAggs[i].argType==2 ? (void*)(-1) : db;
- sqlite_create_aggregate(db, aAggs[i].zName,
- aAggs[i].nArg, aAggs[i].xStep, aAggs[i].xFinalize, pArg);
- sqlite_function_type(db, aAggs[i].zName, aAggs[i].dataType);
- }
- for(i=0; i<sizeof(azTypeFuncs)/sizeof(azTypeFuncs[0]); i++){
- int n = strlen(azTypeFuncs[i]);
- FuncDef *p = sqliteHashFind(&db->aFunc, azTypeFuncs[i], n);
- while( p ){
- p->includeTypes = 1;
- p = p->pNext;
- }
- }
- sqliteRegisterDateTimeFunctions(db);
-}
diff --git a/ext/sqlite/libsqlite/src/hash.c b/ext/sqlite/libsqlite/src/hash.c
deleted file mode 100644
index 77be2807b2..0000000000
--- a/ext/sqlite/libsqlite/src/hash.c
+++ /dev/null
@@ -1,356 +0,0 @@
-/*
-** 2001 September 22
-**
-** The author disclaims copyright to this source code. In place of
-** a legal notice, here is a blessing:
-**
-** May you do good and not evil.
-** May you find forgiveness for yourself and forgive others.
-** May you share freely, never taking more than you give.
-**
-*************************************************************************
-** This is the implementation of generic hash-tables
-** used in SQLite.
-**
-** $Id$
-*/
-#include "sqliteInt.h"
-#include <assert.h>
-
-/* Turn bulk memory into a hash table object by initializing the
-** fields of the Hash structure.
-**
-** "new" is a pointer to the hash table that is to be initialized.
-** keyClass is one of the constants SQLITE_HASH_INT, SQLITE_HASH_POINTER,
-** SQLITE_HASH_BINARY, or SQLITE_HASH_STRING. The value of keyClass
-** determines what kind of key the hash table will use. "copyKey" is
-** true if the hash table should make its own private copy of keys and
-** false if it should just use the supplied pointer. CopyKey only makes
-** sense for SQLITE_HASH_STRING and SQLITE_HASH_BINARY and is ignored
-** for other key classes.
-*/
-void sqliteHashInit(Hash *new, int keyClass, int copyKey){
- assert( new!=0 );
- assert( keyClass>=SQLITE_HASH_INT && keyClass<=SQLITE_HASH_BINARY );
- new->keyClass = keyClass;
- new->copyKey = copyKey &&
- (keyClass==SQLITE_HASH_STRING || keyClass==SQLITE_HASH_BINARY);
- new->first = 0;
- new->count = 0;
- new->htsize = 0;
- new->ht = 0;
-}
-
-/* Remove all entries from a hash table. Reclaim all memory.
-** Call this routine to delete a hash table or to reset a hash table
-** to the empty state.
-*/
-void sqliteHashClear(Hash *pH){
- HashElem *elem; /* For looping over all elements of the table */
-
- assert( pH!=0 );
- elem = pH->first;
- pH->first = 0;
- if( pH->ht ) sqliteFree(pH->ht);
- pH->ht = 0;
- pH->htsize = 0;
- while( elem ){
- HashElem *next_elem = elem->next;
- if( pH->copyKey && elem->pKey ){
- sqliteFree(elem->pKey);
- }
- sqliteFree(elem);
- elem = next_elem;
- }
- pH->count = 0;
-}
-
-/*
-** Hash and comparison functions when the mode is SQLITE_HASH_INT
-*/
-static int intHash(const void *pKey, int nKey){
- return nKey ^ (nKey<<8) ^ (nKey>>8);
-}
-static int intCompare(const void *pKey1, int n1, const void *pKey2, int n2){
- return n2 - n1;
-}
-
-#if 0 /* NOT USED */
-/*
-** Hash and comparison functions when the mode is SQLITE_HASH_POINTER
-*/
-static int ptrHash(const void *pKey, int nKey){
- uptr x = Addr(pKey);
- return x ^ (x<<8) ^ (x>>8);
-}
-static int ptrCompare(const void *pKey1, int n1, const void *pKey2, int n2){
- if( pKey1==pKey2 ) return 0;
- if( pKey1<pKey2 ) return -1;
- return 1;
-}
-#endif
-
-/*
-** Hash and comparison functions when the mode is SQLITE_HASH_STRING
-*/
-static int strHash(const void *pKey, int nKey){
- return sqliteHashNoCase((const char*)pKey, nKey);
-}
-static int strCompare(const void *pKey1, int n1, const void *pKey2, int n2){
- if( n1!=n2 ) return n2-n1;
- return sqliteStrNICmp((const char*)pKey1,(const char*)pKey2,n1);
-}
-
-/*
-** Hash and comparison functions when the mode is SQLITE_HASH_BINARY
-*/
-static int binHash(const void *pKey, int nKey){
- int h = 0;
- const char *z = (const char *)pKey;
- while( nKey-- > 0 ){
- h = (h<<3) ^ h ^ *(z++);
- }
- return h & 0x7fffffff;
-}
-static int binCompare(const void *pKey1, int n1, const void *pKey2, int n2){
- if( n1!=n2 ) return n2-n1;
- return memcmp(pKey1,pKey2,n1);
-}
-
-/*
-** Return a pointer to the appropriate hash function given the key class.
-**
-** The C syntax in this function definition may be unfamilar to some
-** programmers, so we provide the following additional explanation:
-**
-** The name of the function is "hashFunction". The function takes a
-** single parameter "keyClass". The return value of hashFunction()
-** is a pointer to another function. Specifically, the return value
-** of hashFunction() is a pointer to a function that takes two parameters
-** with types "const void*" and "int" and returns an "int".
-*/
-static int (*hashFunction(int keyClass))(const void*,int){
- switch( keyClass ){
- case SQLITE_HASH_INT: return &intHash;
- /* case SQLITE_HASH_POINTER: return &ptrHash; // NOT USED */
- case SQLITE_HASH_STRING: return &strHash;
- case SQLITE_HASH_BINARY: return &binHash;;
- default: break;
- }
- return 0;
-}
-
-/*
-** Return a pointer to the appropriate hash function given the key class.
-**
-** For help in interpreted the obscure C code in the function definition,
-** see the header comment on the previous function.
-*/
-static int (*compareFunction(int keyClass))(const void*,int,const void*,int){
- switch( keyClass ){
- case SQLITE_HASH_INT: return &intCompare;
- /* case SQLITE_HASH_POINTER: return &ptrCompare; // NOT USED */
- case SQLITE_HASH_STRING: return &strCompare;
- case SQLITE_HASH_BINARY: return &binCompare;
- default: break;
- }
- return 0;
-}
-
-
-/* Resize the hash table so that it cantains "new_size" buckets.
-** "new_size" must be a power of 2. The hash table might fail
-** to resize if sqliteMalloc() fails.
-*/
-static void rehash(Hash *pH, int new_size){
- struct _ht *new_ht; /* The new hash table */
- HashElem *elem, *next_elem; /* For looping over existing elements */
- HashElem *x; /* Element being copied to new hash table */
- int (*xHash)(const void*,int); /* The hash function */
-
- assert( (new_size & (new_size-1))==0 );
- new_ht = (struct _ht *)sqliteMalloc( new_size*sizeof(struct _ht) );
- if( new_ht==0 ) return;
- if( pH->ht ) sqliteFree(pH->ht);
- pH->ht = new_ht;
- pH->htsize = new_size;
- xHash = hashFunction(pH->keyClass);
- for(elem=pH->first, pH->first=0; elem; elem = next_elem){
- int h = (*xHash)(elem->pKey, elem->nKey) & (new_size-1);
- next_elem = elem->next;
- x = new_ht[h].chain;
- if( x ){
- elem->next = x;
- elem->prev = x->prev;
- if( x->prev ) x->prev->next = elem;
- else pH->first = elem;
- x->prev = elem;
- }else{
- elem->next = pH->first;
- if( pH->first ) pH->first->prev = elem;
- elem->prev = 0;
- pH->first = elem;
- }
- new_ht[h].chain = elem;
- new_ht[h].count++;
- }
-}
-
-/* This function (for internal use only) locates an element in an
-** hash table that matches the given key. The hash for this key has
-** already been computed and is passed as the 4th parameter.
-*/
-static HashElem *findElementGivenHash(
- const Hash *pH, /* The pH to be searched */
- const void *pKey, /* The key we are searching for */
- int nKey,
- int h /* The hash for this key. */
-){
- HashElem *elem; /* Used to loop thru the element list */
- int count; /* Number of elements left to test */
- int (*xCompare)(const void*,int,const void*,int); /* comparison function */
-
- if( pH->ht ){
- elem = pH->ht[h].chain;
- count = pH->ht[h].count;
- xCompare = compareFunction(pH->keyClass);
- while( count-- && elem ){
- if( (*xCompare)(elem->pKey,elem->nKey,pKey,nKey)==0 ){
- return elem;
- }
- elem = elem->next;
- }
- }
- return 0;
-}
-
-/* Remove a single entry from the hash table given a pointer to that
-** element and a hash on the element's key.
-*/
-static void removeElementGivenHash(
- Hash *pH, /* The pH containing "elem" */
- HashElem* elem, /* The element to be removed from the pH */
- int h /* Hash value for the element */
-){
- if( elem->prev ){
- elem->prev->next = elem->next;
- }else{
- pH->first = elem->next;
- }
- if( elem->next ){
- elem->next->prev = elem->prev;
- }
- if( pH->ht[h].chain==elem ){
- pH->ht[h].chain = elem->next;
- }
- pH->ht[h].count--;
- if( pH->ht[h].count<=0 ){
- pH->ht[h].chain = 0;
- }
- if( pH->copyKey && elem->pKey ){
- sqliteFree(elem->pKey);
- }
- sqliteFree( elem );
- pH->count--;
-}
-
-/* Attempt to locate an element of the hash table pH with a key
-** that matches pKey,nKey. Return the data for this element if it is
-** found, or NULL if there is no match.
-*/
-void *sqliteHashFind(const Hash *pH, const void *pKey, int nKey){
- int h; /* A hash on key */
- HashElem *elem; /* The element that matches key */
- int (*xHash)(const void*,int); /* The hash function */
-
- if( pH==0 || pH->ht==0 ) return 0;
- xHash = hashFunction(pH->keyClass);
- assert( xHash!=0 );
- h = (*xHash)(pKey,nKey);
- assert( (pH->htsize & (pH->htsize-1))==0 );
- elem = findElementGivenHash(pH,pKey,nKey, h & (pH->htsize-1));
- return elem ? elem->data : 0;
-}
-
-/* Insert an element into the hash table pH. The key is pKey,nKey
-** and the data is "data".
-**
-** If no element exists with a matching key, then a new
-** element is created. A copy of the key is made if the copyKey
-** flag is set. NULL is returned.
-**
-** If another element already exists with the same key, then the
-** new data replaces the old data and the old data is returned.
-** The key is not copied in this instance. If a malloc fails, then
-** the new data is returned and the hash table is unchanged.
-**
-** If the "data" parameter to this function is NULL, then the
-** element corresponding to "key" is removed from the hash table.
-*/
-void *sqliteHashInsert(Hash *pH, const void *pKey, int nKey, void *data){
- int hraw; /* Raw hash value of the key */
- int h; /* the hash of the key modulo hash table size */
- HashElem *elem; /* Used to loop thru the element list */
- HashElem *new_elem; /* New element added to the pH */
- int (*xHash)(const void*,int); /* The hash function */
-
- assert( pH!=0 );
- xHash = hashFunction(pH->keyClass);
- assert( xHash!=0 );
- hraw = (*xHash)(pKey, nKey);
- assert( (pH->htsize & (pH->htsize-1))==0 );
- h = hraw & (pH->htsize-1);
- elem = findElementGivenHash(pH,pKey,nKey,h);
- if( elem ){
- void *old_data = elem->data;
- if( data==0 ){
- removeElementGivenHash(pH,elem,h);
- }else{
- elem->data = data;
- }
- return old_data;
- }
- if( data==0 ) return 0;
- new_elem = (HashElem*)sqliteMalloc( sizeof(HashElem) );
- if( new_elem==0 ) return data;
- if( pH->copyKey && pKey!=0 ){
- new_elem->pKey = sqliteMallocRaw( nKey );
- if( new_elem->pKey==0 ){
- sqliteFree(new_elem);
- return data;
- }
- memcpy((void*)new_elem->pKey, pKey, nKey);
- }else{
- new_elem->pKey = (void*)pKey;
- }
- new_elem->nKey = nKey;
- pH->count++;
- if( pH->htsize==0 ) rehash(pH,8);
- if( pH->htsize==0 ){
- pH->count = 0;
- sqliteFree(new_elem);
- return data;
- }
- if( pH->count > pH->htsize ){
- rehash(pH,pH->htsize*2);
- }
- assert( (pH->htsize & (pH->htsize-1))==0 );
- h = hraw & (pH->htsize-1);
- elem = pH->ht[h].chain;
- if( elem ){
- new_elem->next = elem;
- new_elem->prev = elem->prev;
- if( elem->prev ){ elem->prev->next = new_elem; }
- else { pH->first = new_elem; }
- elem->prev = new_elem;
- }else{
- new_elem->next = pH->first;
- new_elem->prev = 0;
- if( pH->first ){ pH->first->prev = new_elem; }
- pH->first = new_elem;
- }
- pH->ht[h].count++;
- pH->ht[h].chain = new_elem;
- new_elem->data = data;
- return 0;
-}
diff --git a/ext/sqlite/libsqlite/src/hash.h b/ext/sqlite/libsqlite/src/hash.h
deleted file mode 100644
index 5f6335e1c8..0000000000
--- a/ext/sqlite/libsqlite/src/hash.h
+++ /dev/null
@@ -1,109 +0,0 @@
-/*
-** 2001 September 22
-**
-** The author disclaims copyright to this source code. In place of
-** a legal notice, here is a blessing:
-**
-** May you do good and not evil.
-** May you find forgiveness for yourself and forgive others.
-** May you share freely, never taking more than you give.
-**
-*************************************************************************
-** This is the header file for the generic hash-table implemenation
-** used in SQLite.
-**
-** $Id$
-*/
-#ifndef _SQLITE_HASH_H_
-#define _SQLITE_HASH_H_
-
-/* Forward declarations of structures. */
-typedef struct Hash Hash;
-typedef struct HashElem HashElem;
-
-/* A complete hash table is an instance of the following structure.
-** The internals of this structure are intended to be opaque -- client
-** code should not attempt to access or modify the fields of this structure
-** directly. Change this structure only by using the routines below.
-** However, many of the "procedures" and "functions" for modifying and
-** accessing this structure are really macros, so we can't really make
-** this structure opaque.
-*/
-struct Hash {
- char keyClass; /* SQLITE_HASH_INT, _POINTER, _STRING, _BINARY */
- char copyKey; /* True if copy of key made on insert */
- int count; /* Number of entries in this table */
- HashElem *first; /* The first element of the array */
- int htsize; /* Number of buckets in the hash table */
- struct _ht { /* the hash table */
- int count; /* Number of entries with this hash */
- HashElem *chain; /* Pointer to first entry with this hash */
- } *ht;
-};
-
-/* Each element in the hash table is an instance of the following
-** structure. All elements are stored on a single doubly-linked list.
-**
-** Again, this structure is intended to be opaque, but it can't really
-** be opaque because it is used by macros.
-*/
-struct HashElem {
- HashElem *next, *prev; /* Next and previous elements in the table */
- void *data; /* Data associated with this element */
- void *pKey; int nKey; /* Key associated with this element */
-};
-
-/*
-** There are 4 different modes of operation for a hash table:
-**
-** SQLITE_HASH_INT nKey is used as the key and pKey is ignored.
-**
-** SQLITE_HASH_POINTER pKey is used as the key and nKey is ignored.
-**
-** SQLITE_HASH_STRING pKey points to a string that is nKey bytes long
-** (including the null-terminator, if any). Case
-** is ignored in comparisons.
-**
-** SQLITE_HASH_BINARY pKey points to binary data nKey bytes long.
-** memcmp() is used to compare keys.
-**
-** A copy of the key is made for SQLITE_HASH_STRING and SQLITE_HASH_BINARY
-** if the copyKey parameter to HashInit is 1.
-*/
-#define SQLITE_HASH_INT 1
-/* #define SQLITE_HASH_POINTER 2 // NOT USED */
-#define SQLITE_HASH_STRING 3
-#define SQLITE_HASH_BINARY 4
-
-/*
-** Access routines. To delete, insert a NULL pointer.
-*/
-void sqliteHashInit(Hash*, int keytype, int copyKey);
-void *sqliteHashInsert(Hash*, const void *pKey, int nKey, void *pData);
-void *sqliteHashFind(const Hash*, const void *pKey, int nKey);
-void sqliteHashClear(Hash*);
-
-/*
-** Macros for looping over all elements of a hash table. The idiom is
-** like this:
-**
-** Hash h;
-** HashElem *p;
-** ...
-** for(p=sqliteHashFirst(&h); p; p=sqliteHashNext(p)){
-** SomeStructure *pData = sqliteHashData(p);
-** // do something with pData
-** }
-*/
-#define sqliteHashFirst(H) ((H)->first)
-#define sqliteHashNext(E) ((E)->next)
-#define sqliteHashData(E) ((E)->data)
-#define sqliteHashKey(E) ((E)->pKey)
-#define sqliteHashKeysize(E) ((E)->nKey)
-
-/*
-** Number of entries in a hash table
-*/
-#define sqliteHashCount(H) ((H)->count)
-
-#endif /* _SQLITE_HASH_H_ */
diff --git a/ext/sqlite/libsqlite/src/insert.c b/ext/sqlite/libsqlite/src/insert.c
deleted file mode 100644
index 86c581edee..0000000000
--- a/ext/sqlite/libsqlite/src/insert.c
+++ /dev/null
@@ -1,919 +0,0 @@
-/*
-** 2001 September 15
-**
-** The author disclaims copyright to this source code. In place of
-** a legal notice, here is a blessing:
-**
-** May you do good and not evil.
-** May you find forgiveness for yourself and forgive others.
-** May you share freely, never taking more than you give.
-**
-*************************************************************************
-** This file contains C code routines that are called by the parser
-** to handle INSERT statements in SQLite.
-**
-** $Id$
-*/
-#include "sqliteInt.h"
-
-/*
-** This routine is call to handle SQL of the following forms:
-**
-** insert into TABLE (IDLIST) values(EXPRLIST)
-** insert into TABLE (IDLIST) select
-**
-** The IDLIST following the table name is always optional. If omitted,
-** then a list of all columns for the table is substituted. The IDLIST
-** appears in the pColumn parameter. pColumn is NULL if IDLIST is omitted.
-**
-** The pList parameter holds EXPRLIST in the first form of the INSERT
-** statement above, and pSelect is NULL. For the second form, pList is
-** NULL and pSelect is a pointer to the select statement used to generate
-** data for the insert.
-**
-** The code generated follows one of three templates. For a simple
-** select with data coming from a VALUES clause, the code executes
-** once straight down through. The template looks like this:
-**
-** open write cursor to <table> and its indices
-** puts VALUES clause expressions onto the stack
-** write the resulting record into <table>
-** cleanup
-**
-** If the statement is of the form
-**
-** INSERT INTO <table> SELECT ...
-**
-** And the SELECT clause does not read from <table> at any time, then
-** the generated code follows this template:
-**
-** goto B
-** A: setup for the SELECT
-** loop over the tables in the SELECT
-** gosub C
-** end loop
-** cleanup after the SELECT
-** goto D
-** B: open write cursor to <table> and its indices
-** goto A
-** C: insert the select result into <table>
-** return
-** D: cleanup
-**
-** The third template is used if the insert statement takes its
-** values from a SELECT but the data is being inserted into a table
-** that is also read as part of the SELECT. In the third form,
-** we have to use a intermediate table to store the results of
-** the select. The template is like this:
-**
-** goto B
-** A: setup for the SELECT
-** loop over the tables in the SELECT
-** gosub C
-** end loop
-** cleanup after the SELECT
-** goto D
-** C: insert the select result into the intermediate table
-** return
-** B: open a cursor to an intermediate table
-** goto A
-** D: open write cursor to <table> and its indices
-** loop over the intermediate table
-** transfer values form intermediate table into <table>
-** end the loop
-** cleanup
-*/
-void sqliteInsert(
- Parse *pParse, /* Parser context */
- SrcList *pTabList, /* Name of table into which we are inserting */
- ExprList *pList, /* List of values to be inserted */
- Select *pSelect, /* A SELECT statement to use as the data source */
- IdList *pColumn, /* Column names corresponding to IDLIST. */
- int onError /* How to handle constraint errors */
-){
- Table *pTab; /* The table to insert into */
- char *zTab; /* Name of the table into which we are inserting */
- const char *zDb; /* Name of the database holding this table */
- int i, j, idx; /* Loop counters */
- Vdbe *v; /* Generate code into this virtual machine */
- Index *pIdx; /* For looping over indices of the table */
- int nColumn; /* Number of columns in the data */
- int base; /* VDBE Cursor number for pTab */
- int iCont, iBreak; /* Beginning and end of the loop over srcTab */
- sqlite *db; /* The main database structure */
- int keyColumn = -1; /* Column that is the INTEGER PRIMARY KEY */
- int endOfLoop; /* Label for the end of the insertion loop */
- int useTempTable; /* Store SELECT results in intermediate table */
- int srcTab; /* Data comes from this temporary cursor if >=0 */
- int iSelectLoop; /* Address of code that implements the SELECT */
- int iCleanup; /* Address of the cleanup code */
- int iInsertBlock; /* Address of the subroutine used to insert data */
- int iCntMem; /* Memory cell used for the row counter */
- int isView; /* True if attempting to insert into a view */
-
- int row_triggers_exist = 0; /* True if there are FOR EACH ROW triggers */
- int before_triggers; /* True if there are BEFORE triggers */
- int after_triggers; /* True if there are AFTER triggers */
- int newIdx = -1; /* Cursor for the NEW table */
-
- if( pParse->nErr || sqlite_malloc_failed ) goto insert_cleanup;
- db = pParse->db;
-
- /* Locate the table into which we will be inserting new information.
- */
- assert( pTabList->nSrc==1 );
- zTab = pTabList->a[0].zName;
- if( zTab==0 ) goto insert_cleanup;
- pTab = sqliteSrcListLookup(pParse, pTabList);
- if( pTab==0 ){
- goto insert_cleanup;
- }
- assert( pTab->iDb<db->nDb );
- zDb = db->aDb[pTab->iDb].zName;
- if( sqliteAuthCheck(pParse, SQLITE_INSERT, pTab->zName, 0, zDb) ){
- goto insert_cleanup;
- }
-
- /* Ensure that:
- * (a) the table is not read-only,
- * (b) that if it is a view then ON INSERT triggers exist
- */
- before_triggers = sqliteTriggersExist(pParse, pTab->pTrigger, TK_INSERT,
- TK_BEFORE, TK_ROW, 0);
- after_triggers = sqliteTriggersExist(pParse, pTab->pTrigger, TK_INSERT,
- TK_AFTER, TK_ROW, 0);
- row_triggers_exist = before_triggers || after_triggers;
- isView = pTab->pSelect!=0;
- if( sqliteIsReadOnly(pParse, pTab, before_triggers) ){
- goto insert_cleanup;
- }
- if( pTab==0 ) goto insert_cleanup;
-
- /* If pTab is really a view, make sure it has been initialized.
- */
- if( isView && sqliteViewGetColumnNames(pParse, pTab) ){
- goto insert_cleanup;
- }
-
- /* Allocate a VDBE
- */
- v = sqliteGetVdbe(pParse);
- if( v==0 ) goto insert_cleanup;
- sqliteBeginWriteOperation(pParse, pSelect || row_triggers_exist, pTab->iDb);
-
- /* if there are row triggers, allocate a temp table for new.* references. */
- if( row_triggers_exist ){
- newIdx = pParse->nTab++;
- }
-
- /* Figure out how many columns of data are supplied. If the data
- ** is coming from a SELECT statement, then this step also generates
- ** all the code to implement the SELECT statement and invoke a subroutine
- ** to process each row of the result. (Template 2.) If the SELECT
- ** statement uses the the table that is being inserted into, then the
- ** subroutine is also coded here. That subroutine stores the SELECT
- ** results in a temporary table. (Template 3.)
- */
- if( pSelect ){
- /* Data is coming from a SELECT. Generate code to implement that SELECT
- */
- int rc, iInitCode;
- iInitCode = sqliteVdbeAddOp(v, OP_Goto, 0, 0);
- iSelectLoop = sqliteVdbeCurrentAddr(v);
- iInsertBlock = sqliteVdbeMakeLabel(v);
- rc = sqliteSelect(pParse, pSelect, SRT_Subroutine, iInsertBlock, 0,0,0);
- if( rc || pParse->nErr || sqlite_malloc_failed ) goto insert_cleanup;
- iCleanup = sqliteVdbeMakeLabel(v);
- sqliteVdbeAddOp(v, OP_Goto, 0, iCleanup);
- assert( pSelect->pEList );
- nColumn = pSelect->pEList->nExpr;
-
- /* Set useTempTable to TRUE if the result of the SELECT statement
- ** should be written into a temporary table. Set to FALSE if each
- ** row of the SELECT can be written directly into the result table.
- **
- ** A temp table must be used if the table being updated is also one
- ** of the tables being read by the SELECT statement. Also use a
- ** temp table in the case of row triggers.
- */
- if( row_triggers_exist ){
- useTempTable = 1;
- }else{
- int addr = sqliteVdbeFindOp(v, OP_OpenRead, pTab->tnum);
- useTempTable = 0;
- if( addr>0 ){
- VdbeOp *pOp = sqliteVdbeGetOp(v, addr-2);
- if( pOp->opcode==OP_Integer && pOp->p1==pTab->iDb ){
- useTempTable = 1;
- }
- }
- }
-
- if( useTempTable ){
- /* Generate the subroutine that SELECT calls to process each row of
- ** the result. Store the result in a temporary table
- */
- srcTab = pParse->nTab++;
- sqliteVdbeResolveLabel(v, iInsertBlock);
- sqliteVdbeAddOp(v, OP_MakeRecord, nColumn, 0);
- sqliteVdbeAddOp(v, OP_NewRecno, srcTab, 0);
- sqliteVdbeAddOp(v, OP_Pull, 1, 0);
- sqliteVdbeAddOp(v, OP_PutIntKey, srcTab, 0);
- sqliteVdbeAddOp(v, OP_Return, 0, 0);
-
- /* The following code runs first because the GOTO at the very top
- ** of the program jumps to it. Create the temporary table, then jump
- ** back up and execute the SELECT code above.
- */
- sqliteVdbeChangeP2(v, iInitCode, sqliteVdbeCurrentAddr(v));
- sqliteVdbeAddOp(v, OP_OpenTemp, srcTab, 0);
- sqliteVdbeAddOp(v, OP_Goto, 0, iSelectLoop);
- sqliteVdbeResolveLabel(v, iCleanup);
- }else{
- sqliteVdbeChangeP2(v, iInitCode, sqliteVdbeCurrentAddr(v));
- }
- }else{
- /* This is the case if the data for the INSERT is coming from a VALUES
- ** clause
- */
- SrcList dummy;
- assert( pList!=0 );
- srcTab = -1;
- useTempTable = 0;
- assert( pList );
- nColumn = pList->nExpr;
- dummy.nSrc = 0;
- for(i=0; i<nColumn; i++){
- if( sqliteExprResolveIds(pParse, &dummy, 0, pList->a[i].pExpr) ){
- goto insert_cleanup;
- }
- if( sqliteExprCheck(pParse, pList->a[i].pExpr, 0, 0) ){
- goto insert_cleanup;
- }
- }
- }
-
- /* Make sure the number of columns in the source data matches the number
- ** of columns to be inserted into the table.
- */
- if( pColumn==0 && nColumn!=pTab->nCol ){
- sqliteErrorMsg(pParse,
- "table %S has %d columns but %d values were supplied",
- pTabList, 0, pTab->nCol, nColumn);
- goto insert_cleanup;
- }
- if( pColumn!=0 && nColumn!=pColumn->nId ){
- sqliteErrorMsg(pParse, "%d values for %d columns", nColumn, pColumn->nId);
- goto insert_cleanup;
- }
-
- /* If the INSERT statement included an IDLIST term, then make sure
- ** all elements of the IDLIST really are columns of the table and
- ** remember the column indices.
- **
- ** If the table has an INTEGER PRIMARY KEY column and that column
- ** is named in the IDLIST, then record in the keyColumn variable
- ** the index into IDLIST of the primary key column. keyColumn is
- ** the index of the primary key as it appears in IDLIST, not as
- ** is appears in the original table. (The index of the primary
- ** key in the original table is pTab->iPKey.)
- */
- if( pColumn ){
- for(i=0; i<pColumn->nId; i++){
- pColumn->a[i].idx = -1;
- }
- for(i=0; i<pColumn->nId; i++){
- for(j=0; j<pTab->nCol; j++){
- if( sqliteStrICmp(pColumn->a[i].zName, pTab->aCol[j].zName)==0 ){
- pColumn->a[i].idx = j;
- if( j==pTab->iPKey ){
- keyColumn = i;
- }
- break;
- }
- }
- if( j>=pTab->nCol ){
- if( sqliteIsRowid(pColumn->a[i].zName) ){
- keyColumn = i;
- }else{
- sqliteErrorMsg(pParse, "table %S has no column named %s",
- pTabList, 0, pColumn->a[i].zName);
- pParse->nErr++;
- goto insert_cleanup;
- }
- }
- }
- }
-
- /* If there is no IDLIST term but the table has an integer primary
- ** key, the set the keyColumn variable to the primary key column index
- ** in the original table definition.
- */
- if( pColumn==0 ){
- keyColumn = pTab->iPKey;
- }
-
- /* Open the temp table for FOR EACH ROW triggers
- */
- if( row_triggers_exist ){
- sqliteVdbeAddOp(v, OP_OpenPseudo, newIdx, 0);
- }
-
- /* Initialize the count of rows to be inserted
- */
- if( db->flags & SQLITE_CountRows ){
- iCntMem = pParse->nMem++;
- sqliteVdbeAddOp(v, OP_Integer, 0, 0);
- sqliteVdbeAddOp(v, OP_MemStore, iCntMem, 1);
- }
-
- /* Open tables and indices if there are no row triggers */
- if( !row_triggers_exist ){
- base = pParse->nTab;
- idx = sqliteOpenTableAndIndices(pParse, pTab, base);
- pParse->nTab += idx;
- }
-
- /* If the data source is a temporary table, then we have to create
- ** a loop because there might be multiple rows of data. If the data
- ** source is a subroutine call from the SELECT statement, then we need
- ** to launch the SELECT statement processing.
- */
- if( useTempTable ){
- iBreak = sqliteVdbeMakeLabel(v);
- sqliteVdbeAddOp(v, OP_Rewind, srcTab, iBreak);
- iCont = sqliteVdbeCurrentAddr(v);
- }else if( pSelect ){
- sqliteVdbeAddOp(v, OP_Goto, 0, iSelectLoop);
- sqliteVdbeResolveLabel(v, iInsertBlock);
- }
-
- /* Run the BEFORE and INSTEAD OF triggers, if there are any
- */
- endOfLoop = sqliteVdbeMakeLabel(v);
- if( before_triggers ){
-
- /* build the NEW.* reference row. Note that if there is an INTEGER
- ** PRIMARY KEY into which a NULL is being inserted, that NULL will be
- ** translated into a unique ID for the row. But on a BEFORE trigger,
- ** we do not know what the unique ID will be (because the insert has
- ** not happened yet) so we substitute a rowid of -1
- */
- if( keyColumn<0 ){
- sqliteVdbeAddOp(v, OP_Integer, -1, 0);
- }else if( useTempTable ){
- sqliteVdbeAddOp(v, OP_Column, srcTab, keyColumn);
- }else if( pSelect ){
- sqliteVdbeAddOp(v, OP_Dup, nColumn - keyColumn - 1, 1);
- }else{
- sqliteExprCode(pParse, pList->a[keyColumn].pExpr);
- sqliteVdbeAddOp(v, OP_NotNull, -1, sqliteVdbeCurrentAddr(v)+3);
- sqliteVdbeAddOp(v, OP_Pop, 1, 0);
- sqliteVdbeAddOp(v, OP_Integer, -1, 0);
- sqliteVdbeAddOp(v, OP_MustBeInt, 0, 0);
- }
-
- /* Create the new column data
- */
- for(i=0; i<pTab->nCol; i++){
- if( pColumn==0 ){
- j = i;
- }else{
- for(j=0; j<pColumn->nId; j++){
- if( pColumn->a[j].idx==i ) break;
- }
- }
- if( pColumn && j>=pColumn->nId ){
- sqliteVdbeOp3(v, OP_String, 0, 0, pTab->aCol[i].zDflt, P3_STATIC);
- }else if( useTempTable ){
- sqliteVdbeAddOp(v, OP_Column, srcTab, j);
- }else if( pSelect ){
- sqliteVdbeAddOp(v, OP_Dup, nColumn-j-1, 1);
- }else{
- sqliteExprCode(pParse, pList->a[j].pExpr);
- }
- }
- sqliteVdbeAddOp(v, OP_MakeRecord, pTab->nCol, 0);
- sqliteVdbeAddOp(v, OP_PutIntKey, newIdx, 0);
-
- /* Fire BEFORE or INSTEAD OF triggers */
- if( sqliteCodeRowTrigger(pParse, TK_INSERT, 0, TK_BEFORE, pTab,
- newIdx, -1, onError, endOfLoop) ){
- goto insert_cleanup;
- }
- }
-
- /* If any triggers exists, the opening of tables and indices is deferred
- ** until now.
- */
- if( row_triggers_exist && !isView ){
- base = pParse->nTab;
- idx = sqliteOpenTableAndIndices(pParse, pTab, base);
- pParse->nTab += idx;
- }
-
- /* Push the record number for the new entry onto the stack. The
- ** record number is a randomly generate integer created by NewRecno
- ** except when the table has an INTEGER PRIMARY KEY column, in which
- ** case the record number is the same as that column.
- */
- if( !isView ){
- if( keyColumn>=0 ){
- if( useTempTable ){
- sqliteVdbeAddOp(v, OP_Column, srcTab, keyColumn);
- }else if( pSelect ){
- sqliteVdbeAddOp(v, OP_Dup, nColumn - keyColumn - 1, 1);
- }else{
- sqliteExprCode(pParse, pList->a[keyColumn].pExpr);
- }
- /* If the PRIMARY KEY expression is NULL, then use OP_NewRecno
- ** to generate a unique primary key value.
- */
- sqliteVdbeAddOp(v, OP_NotNull, -1, sqliteVdbeCurrentAddr(v)+3);
- sqliteVdbeAddOp(v, OP_Pop, 1, 0);
- sqliteVdbeAddOp(v, OP_NewRecno, base, 0);
- sqliteVdbeAddOp(v, OP_MustBeInt, 0, 0);
- }else{
- sqliteVdbeAddOp(v, OP_NewRecno, base, 0);
- }
-
- /* Push onto the stack, data for all columns of the new entry, beginning
- ** with the first column.
- */
- for(i=0; i<pTab->nCol; i++){
- if( i==pTab->iPKey ){
- /* The value of the INTEGER PRIMARY KEY column is always a NULL.
- ** Whenever this column is read, the record number will be substituted
- ** in its place. So will fill this column with a NULL to avoid
- ** taking up data space with information that will never be used. */
- sqliteVdbeAddOp(v, OP_String, 0, 0);
- continue;
- }
- if( pColumn==0 ){
- j = i;
- }else{
- for(j=0; j<pColumn->nId; j++){
- if( pColumn->a[j].idx==i ) break;
- }
- }
- if( pColumn && j>=pColumn->nId ){
- sqliteVdbeOp3(v, OP_String, 0, 0, pTab->aCol[i].zDflt, P3_STATIC);
- }else if( useTempTable ){
- sqliteVdbeAddOp(v, OP_Column, srcTab, j);
- }else if( pSelect ){
- sqliteVdbeAddOp(v, OP_Dup, i+nColumn-j, 1);
- }else{
- sqliteExprCode(pParse, pList->a[j].pExpr);
- }
- }
-
- /* Generate code to check constraints and generate index keys and
- ** do the insertion.
- */
- sqliteGenerateConstraintChecks(pParse, pTab, base, 0, keyColumn>=0,
- 0, onError, endOfLoop);
- sqliteCompleteInsertion(pParse, pTab, base, 0,0,0,
- after_triggers ? newIdx : -1);
- }
-
- /* Update the count of rows that are inserted
- */
- if( (db->flags & SQLITE_CountRows)!=0 ){
- sqliteVdbeAddOp(v, OP_MemIncr, iCntMem, 0);
- }
-
- if( row_triggers_exist ){
- /* Close all tables opened */
- if( !isView ){
- sqliteVdbeAddOp(v, OP_Close, base, 0);
- for(idx=1, pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext, idx++){
- sqliteVdbeAddOp(v, OP_Close, idx+base, 0);
- }
- }
-
- /* Code AFTER triggers */
- if( sqliteCodeRowTrigger(pParse, TK_INSERT, 0, TK_AFTER, pTab, newIdx, -1,
- onError, endOfLoop) ){
- goto insert_cleanup;
- }
- }
-
- /* The bottom of the loop, if the data source is a SELECT statement
- */
- sqliteVdbeResolveLabel(v, endOfLoop);
- if( useTempTable ){
- sqliteVdbeAddOp(v, OP_Next, srcTab, iCont);
- sqliteVdbeResolveLabel(v, iBreak);
- sqliteVdbeAddOp(v, OP_Close, srcTab, 0);
- }else if( pSelect ){
- sqliteVdbeAddOp(v, OP_Pop, nColumn, 0);
- sqliteVdbeAddOp(v, OP_Return, 0, 0);
- sqliteVdbeResolveLabel(v, iCleanup);
- }
-
- if( !row_triggers_exist ){
- /* Close all tables opened */
- sqliteVdbeAddOp(v, OP_Close, base, 0);
- for(idx=1, pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext, idx++){
- sqliteVdbeAddOp(v, OP_Close, idx+base, 0);
- }
- }
-
- sqliteVdbeAddOp(v, OP_SetCounts, 0, 0);
- sqliteEndWriteOperation(pParse);
-
- /*
- ** Return the number of rows inserted.
- */
- if( db->flags & SQLITE_CountRows ){
- sqliteVdbeOp3(v, OP_ColumnName, 0, 1, "rows inserted", P3_STATIC);
- sqliteVdbeAddOp(v, OP_MemLoad, iCntMem, 0);
- sqliteVdbeAddOp(v, OP_Callback, 1, 0);
- }
-
-insert_cleanup:
- sqliteSrcListDelete(pTabList);
- if( pList ) sqliteExprListDelete(pList);
- if( pSelect ) sqliteSelectDelete(pSelect);
- sqliteIdListDelete(pColumn);
-}
-
-/*
-** Generate code to do a constraint check prior to an INSERT or an UPDATE.
-**
-** When this routine is called, the stack contains (from bottom to top)
-** the following values:
-**
-** 1. The recno of the row to be updated before the update. This
-** value is omitted unless we are doing an UPDATE that involves a
-** change to the record number.
-**
-** 2. The recno of the row after the update.
-**
-** 3. The data in the first column of the entry after the update.
-**
-** i. Data from middle columns...
-**
-** N. The data in the last column of the entry after the update.
-**
-** The old recno shown as entry (1) above is omitted unless both isUpdate
-** and recnoChng are 1. isUpdate is true for UPDATEs and false for
-** INSERTs and recnoChng is true if the record number is being changed.
-**
-** The code generated by this routine pushes additional entries onto
-** the stack which are the keys for new index entries for the new record.
-** The order of index keys is the same as the order of the indices on
-** the pTable->pIndex list. A key is only created for index i if
-** aIdxUsed!=0 and aIdxUsed[i]!=0.
-**
-** This routine also generates code to check constraints. NOT NULL,
-** CHECK, and UNIQUE constraints are all checked. If a constraint fails,
-** then the appropriate action is performed. There are five possible
-** actions: ROLLBACK, ABORT, FAIL, REPLACE, and IGNORE.
-**
-** Constraint type Action What Happens
-** --------------- ---------- ----------------------------------------
-** any ROLLBACK The current transaction is rolled back and
-** sqlite_exec() returns immediately with a
-** return code of SQLITE_CONSTRAINT.
-**
-** any ABORT Back out changes from the current command
-** only (do not do a complete rollback) then
-** cause sqlite_exec() to return immediately
-** with SQLITE_CONSTRAINT.
-**
-** any FAIL Sqlite_exec() returns immediately with a
-** return code of SQLITE_CONSTRAINT. The
-** transaction is not rolled back and any
-** prior changes are retained.
-**
-** any IGNORE The record number and data is popped from
-** the stack and there is an immediate jump
-** to label ignoreDest.
-**
-** NOT NULL REPLACE The NULL value is replace by the default
-** value for that column. If the default value
-** is NULL, the action is the same as ABORT.
-**
-** UNIQUE REPLACE The other row that conflicts with the row
-** being inserted is removed.
-**
-** CHECK REPLACE Illegal. The results in an exception.
-**
-** Which action to take is determined by the overrideError parameter.
-** Or if overrideError==OE_Default, then the pParse->onError parameter
-** is used. Or if pParse->onError==OE_Default then the onError value
-** for the constraint is used.
-**
-** The calling routine must open a read/write cursor for pTab with
-** cursor number "base". All indices of pTab must also have open
-** read/write cursors with cursor number base+i for the i-th cursor.
-** Except, if there is no possibility of a REPLACE action then
-** cursors do not need to be open for indices where aIdxUsed[i]==0.
-**
-** If the isUpdate flag is true, it means that the "base" cursor is
-** initially pointing to an entry that is being updated. The isUpdate
-** flag causes extra code to be generated so that the "base" cursor
-** is still pointing at the same entry after the routine returns.
-** Without the isUpdate flag, the "base" cursor might be moved.
-*/
-void sqliteGenerateConstraintChecks(
- Parse *pParse, /* The parser context */
- Table *pTab, /* the table into which we are inserting */
- int base, /* Index of a read/write cursor pointing at pTab */
- char *aIdxUsed, /* Which indices are used. NULL means all are used */
- int recnoChng, /* True if the record number will change */
- int isUpdate, /* True for UPDATE, False for INSERT */
- int overrideError, /* Override onError to this if not OE_Default */
- int ignoreDest /* Jump to this label on an OE_Ignore resolution */
-){
- int i;
- Vdbe *v;
- int nCol;
- int onError;
- int addr;
- int extra;
- int iCur;
- Index *pIdx;
- int seenReplace = 0;
- int jumpInst1, jumpInst2;
- int contAddr;
- int hasTwoRecnos = (isUpdate && recnoChng);
-
- v = sqliteGetVdbe(pParse);
- assert( v!=0 );
- assert( pTab->pSelect==0 ); /* This table is not a VIEW */
- nCol = pTab->nCol;
-
- /* Test all NOT NULL constraints.
- */
- for(i=0; i<nCol; i++){
- if( i==pTab->iPKey ){
- continue;
- }
- onError = pTab->aCol[i].notNull;
- if( onError==OE_None ) continue;
- if( overrideError!=OE_Default ){
- onError = overrideError;
- }else if( pParse->db->onError!=OE_Default ){
- onError = pParse->db->onError;
- }else if( onError==OE_Default ){
- onError = OE_Abort;
- }
- if( onError==OE_Replace && pTab->aCol[i].zDflt==0 ){
- onError = OE_Abort;
- }
- sqliteVdbeAddOp(v, OP_Dup, nCol-1-i, 1);
- addr = sqliteVdbeAddOp(v, OP_NotNull, 1, 0);
- switch( onError ){
- case OE_Rollback:
- case OE_Abort:
- case OE_Fail: {
- char *zMsg = 0;
- sqliteVdbeAddOp(v, OP_Halt, SQLITE_CONSTRAINT, onError);
- sqliteSetString(&zMsg, pTab->zName, ".", pTab->aCol[i].zName,
- " may not be NULL", (char*)0);
- sqliteVdbeChangeP3(v, -1, zMsg, P3_DYNAMIC);
- break;
- }
- case OE_Ignore: {
- sqliteVdbeAddOp(v, OP_Pop, nCol+1+hasTwoRecnos, 0);
- sqliteVdbeAddOp(v, OP_Goto, 0, ignoreDest);
- break;
- }
- case OE_Replace: {
- sqliteVdbeOp3(v, OP_String, 0, 0, pTab->aCol[i].zDflt, P3_STATIC);
- sqliteVdbeAddOp(v, OP_Push, nCol-i, 0);
- break;
- }
- default: assert(0);
- }
- sqliteVdbeChangeP2(v, addr, sqliteVdbeCurrentAddr(v));
- }
-
- /* Test all CHECK constraints
- */
- /**** TBD ****/
-
- /* If we have an INTEGER PRIMARY KEY, make sure the primary key
- ** of the new record does not previously exist. Except, if this
- ** is an UPDATE and the primary key is not changing, that is OK.
- */
- if( recnoChng ){
- onError = pTab->keyConf;
- if( overrideError!=OE_Default ){
- onError = overrideError;
- }else if( pParse->db->onError!=OE_Default ){
- onError = pParse->db->onError;
- }else if( onError==OE_Default ){
- onError = OE_Abort;
- }
-
- if( isUpdate ){
- sqliteVdbeAddOp(v, OP_Dup, nCol+1, 1);
- sqliteVdbeAddOp(v, OP_Dup, nCol+1, 1);
- jumpInst1 = sqliteVdbeAddOp(v, OP_Eq, 0, 0);
- }
- sqliteVdbeAddOp(v, OP_Dup, nCol, 1);
- jumpInst2 = sqliteVdbeAddOp(v, OP_NotExists, base, 0);
- switch( onError ){
- default: {
- onError = OE_Abort;
- /* Fall thru into the next case */
- }
- case OE_Rollback:
- case OE_Abort:
- case OE_Fail: {
- sqliteVdbeOp3(v, OP_Halt, SQLITE_CONSTRAINT, onError,
- "PRIMARY KEY must be unique", P3_STATIC);
- break;
- }
- case OE_Replace: {
- sqliteGenerateRowIndexDelete(pParse->db, v, pTab, base, 0);
- if( isUpdate ){
- sqliteVdbeAddOp(v, OP_Dup, nCol+hasTwoRecnos, 1);
- sqliteVdbeAddOp(v, OP_MoveTo, base, 0);
- }
- seenReplace = 1;
- break;
- }
- case OE_Ignore: {
- assert( seenReplace==0 );
- sqliteVdbeAddOp(v, OP_Pop, nCol+1+hasTwoRecnos, 0);
- sqliteVdbeAddOp(v, OP_Goto, 0, ignoreDest);
- break;
- }
- }
- contAddr = sqliteVdbeCurrentAddr(v);
- sqliteVdbeChangeP2(v, jumpInst2, contAddr);
- if( isUpdate ){
- sqliteVdbeChangeP2(v, jumpInst1, contAddr);
- sqliteVdbeAddOp(v, OP_Dup, nCol+1, 1);
- sqliteVdbeAddOp(v, OP_MoveTo, base, 0);
- }
- }
-
- /* Test all UNIQUE constraints by creating entries for each UNIQUE
- ** index and making sure that duplicate entries do not already exist.
- ** Add the new records to the indices as we go.
- */
- extra = -1;
- for(iCur=0, pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext, iCur++){
- if( aIdxUsed && aIdxUsed[iCur]==0 ) continue; /* Skip unused indices */
- extra++;
-
- /* Create a key for accessing the index entry */
- sqliteVdbeAddOp(v, OP_Dup, nCol+extra, 1);
- for(i=0; i<pIdx->nColumn; i++){
- int idx = pIdx->aiColumn[i];
- if( idx==pTab->iPKey ){
- sqliteVdbeAddOp(v, OP_Dup, i+extra+nCol+1, 1);
- }else{
- sqliteVdbeAddOp(v, OP_Dup, i+extra+nCol-idx, 1);
- }
- }
- jumpInst1 = sqliteVdbeAddOp(v, OP_MakeIdxKey, pIdx->nColumn, 0);
- if( pParse->db->file_format>=4 ) sqliteAddIdxKeyType(v, pIdx);
-
- /* Find out what action to take in case there is an indexing conflict */
- onError = pIdx->onError;
- if( onError==OE_None ) continue; /* pIdx is not a UNIQUE index */
- if( overrideError!=OE_Default ){
- onError = overrideError;
- }else if( pParse->db->onError!=OE_Default ){
- onError = pParse->db->onError;
- }else if( onError==OE_Default ){
- onError = OE_Abort;
- }
- if( seenReplace ){
- if( onError==OE_Ignore ) onError = OE_Replace;
- else if( onError==OE_Fail ) onError = OE_Abort;
- }
-
-
- /* Check to see if the new index entry will be unique */
- sqliteVdbeAddOp(v, OP_Dup, extra+nCol+1+hasTwoRecnos, 1);
- jumpInst2 = sqliteVdbeAddOp(v, OP_IsUnique, base+iCur+1, 0);
-
- /* Generate code that executes if the new index entry is not unique */
- switch( onError ){
- case OE_Rollback:
- case OE_Abort:
- case OE_Fail: {
- int j, n1, n2;
- char zErrMsg[200];
- strcpy(zErrMsg, pIdx->nColumn>1 ? "columns " : "column ");
- n1 = strlen(zErrMsg);
- for(j=0; j<pIdx->nColumn && n1<sizeof(zErrMsg)-30; j++){
- char *zCol = pTab->aCol[pIdx->aiColumn[j]].zName;
- n2 = strlen(zCol);
- if( j>0 ){
- strcpy(&zErrMsg[n1], ", ");
- n1 += 2;
- }
- if( n1+n2>sizeof(zErrMsg)-30 ){
- strcpy(&zErrMsg[n1], "...");
- n1 += 3;
- break;
- }else{
- strcpy(&zErrMsg[n1], zCol);
- n1 += n2;
- }
- }
- strcpy(&zErrMsg[n1],
- pIdx->nColumn>1 ? " are not unique" : " is not unique");
- sqliteVdbeOp3(v, OP_Halt, SQLITE_CONSTRAINT, onError, zErrMsg, 0);
- break;
- }
- case OE_Ignore: {
- assert( seenReplace==0 );
- sqliteVdbeAddOp(v, OP_Pop, nCol+extra+3+hasTwoRecnos, 0);
- sqliteVdbeAddOp(v, OP_Goto, 0, ignoreDest);
- break;
- }
- case OE_Replace: {
- sqliteGenerateRowDelete(pParse->db, v, pTab, base, 0);
- if( isUpdate ){
- sqliteVdbeAddOp(v, OP_Dup, nCol+extra+1+hasTwoRecnos, 1);
- sqliteVdbeAddOp(v, OP_MoveTo, base, 0);
- }
- seenReplace = 1;
- break;
- }
- default: assert(0);
- }
- contAddr = sqliteVdbeCurrentAddr(v);
-#if NULL_DISTINCT_FOR_UNIQUE
- sqliteVdbeChangeP2(v, jumpInst1, contAddr);
-#endif
- sqliteVdbeChangeP2(v, jumpInst2, contAddr);
- }
-}
-
-/*
-** This routine generates code to finish the INSERT or UPDATE operation
-** that was started by a prior call to sqliteGenerateConstraintChecks.
-** The stack must contain keys for all active indices followed by data
-** and the recno for the new entry. This routine creates the new
-** entries in all indices and in the main table.
-**
-** The arguments to this routine should be the same as the first six
-** arguments to sqliteGenerateConstraintChecks.
-*/
-void sqliteCompleteInsertion(
- Parse *pParse, /* The parser context */
- Table *pTab, /* the table into which we are inserting */
- int base, /* Index of a read/write cursor pointing at pTab */
- char *aIdxUsed, /* Which indices are used. NULL means all are used */
- int recnoChng, /* True if the record number will change */
- int isUpdate, /* True for UPDATE, False for INSERT */
- int newIdx /* Index of NEW table for triggers. -1 if none */
-){
- int i;
- Vdbe *v;
- int nIdx;
- Index *pIdx;
-
- v = sqliteGetVdbe(pParse);
- assert( v!=0 );
- assert( pTab->pSelect==0 ); /* This table is not a VIEW */
- for(nIdx=0, pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext, nIdx++){}
- for(i=nIdx-1; i>=0; i--){
- if( aIdxUsed && aIdxUsed[i]==0 ) continue;
- sqliteVdbeAddOp(v, OP_IdxPut, base+i+1, 0);
- }
- sqliteVdbeAddOp(v, OP_MakeRecord, pTab->nCol, 0);
- if( newIdx>=0 ){
- sqliteVdbeAddOp(v, OP_Dup, 1, 0);
- sqliteVdbeAddOp(v, OP_Dup, 1, 0);
- sqliteVdbeAddOp(v, OP_PutIntKey, newIdx, 0);
- }
- sqliteVdbeAddOp(v, OP_PutIntKey, base,
- (pParse->trigStack?0:OPFLAG_NCHANGE) |
- (isUpdate?0:OPFLAG_LASTROWID) | OPFLAG_CSCHANGE);
- if( isUpdate && recnoChng ){
- sqliteVdbeAddOp(v, OP_Pop, 1, 0);
- }
-}
-
-/*
-** Generate code that will open write cursors for a table and for all
-** indices of that table. The "base" parameter is the cursor number used
-** for the table. Indices are opened on subsequent cursors.
-**
-** Return the total number of cursors opened. This is always at least
-** 1 (for the main table) plus more for each cursor.
-*/
-int sqliteOpenTableAndIndices(Parse *pParse, Table *pTab, int base){
- int i;
- Index *pIdx;
- Vdbe *v = sqliteGetVdbe(pParse);
- assert( v!=0 );
- sqliteVdbeAddOp(v, OP_Integer, pTab->iDb, 0);
- sqliteVdbeOp3(v, OP_OpenWrite, base, pTab->tnum, pTab->zName, P3_STATIC);
- for(i=1, pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext, i++){
- sqliteVdbeAddOp(v, OP_Integer, pIdx->iDb, 0);
- sqliteVdbeOp3(v, OP_OpenWrite, i+base, pIdx->tnum, pIdx->zName, P3_STATIC);
- }
- return i;
-}
diff --git a/ext/sqlite/libsqlite/src/libsqlite.dsp b/ext/sqlite/libsqlite/src/libsqlite.dsp
deleted file mode 100755
index a60543c0eb..0000000000
--- a/ext/sqlite/libsqlite/src/libsqlite.dsp
+++ /dev/null
@@ -1,353 +0,0 @@
-# Microsoft Developer Studio Project File - Name="libsqlite" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Static Library" 0x0104
-
-CFG=libsqlite - Win32 Debug_TS
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "libsqlite.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "libsqlite.mak" CFG="libsqlite - Win32 Debug_TS"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "libsqlite - Win32 Debug_TS" (based on "Win32 (x86) Static Library")
-!MESSAGE "libsqlite - Win32 Release_TS" (based on "Win32 (x86) Static Library")
-!MESSAGE "libsqlite - Win32 Release_TSDbg" (based on "Win32 (x86) Static Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "libsqlite - Win32 Debug_TS"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug_TS"
-# PROP BASE Intermediate_Dir "Debug_TS"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "..\..\Debug_TS"
-# PROP Intermediate_Dir "..\..\Debug_TS"
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c
-# ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /D THREADSAFE=1 /YX /FD /GZ /c
-# ADD BASE RSC /l 0x406 /d "_DEBUG"
-# ADD RSC /l 0x406 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo
-# ADD LIB32 /nologo
-
-!ELSEIF "$(CFG)" == "libsqlite - Win32 Release_TS"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release_TS"
-# PROP BASE Intermediate_Dir "Release_TS"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "..\..\Release_TS"
-# PROP Intermediate_Dir "..\..\Release_TS"
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c
-# ADD CPP /nologo /MD /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /D THREADSAFE=1 /YX /FD /c
-# ADD BASE RSC /l 0x406 /d "NDEBUG"
-# ADD RSC /l 0x406 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo
-# ADD LIB32 /nologo
-
-!ELSEIF "$(CFG)" == "libsqlite - Win32 Release_TSDbg"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "libsqlite___Win32_Release_TSDbg"
-# PROP BASE Intermediate_Dir "libsqlite___Win32_Release_TSDbg"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "..\..\Release_TSDbg"
-# PROP Intermediate_Dir "..\..\Release_TSDbg"
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MD /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /D THREADSAFE=1 /YX /FD /c
-# ADD CPP /nologo /MD /W3 /GX /Zi /Od /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /D THREADSAFE=1 /YX /FD /c
-# ADD BASE RSC /l 0x406 /d "NDEBUG"
-# ADD RSC /l 0x406 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo /out:"Release_TS\libsqlite.lib"
-# ADD LIB32 /nologo
-
-!ENDIF
-
-# Begin Target
-
-# Name "libsqlite - Win32 Debug_TS"
-# Name "libsqlite - Win32 Release_TS"
-# Name "libsqlite - Win32 Release_TSDbg"
-# Begin Group "Source Files"
-
-# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
-# Begin Source File
-
-SOURCE=attach.c
-# End Source File
-# Begin Source File
-
-SOURCE=auth.c
-# End Source File
-# Begin Source File
-
-SOURCE=btree.c
-# End Source File
-# Begin Source File
-
-SOURCE=btree_rb.c
-# End Source File
-# Begin Source File
-
-SOURCE=build.c
-# End Source File
-# Begin Source File
-
-SOURCE=copy.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\date.c
-# End Source File
-# Begin Source File
-
-SOURCE=delete.c
-# End Source File
-# Begin Source File
-
-SOURCE=encode.c
-# End Source File
-# Begin Source File
-
-SOURCE=expr.c
-# End Source File
-# Begin Source File
-
-SOURCE=func.c
-# End Source File
-# Begin Source File
-
-SOURCE=hash.c
-# End Source File
-# Begin Source File
-
-SOURCE=insert.c
-# End Source File
-# Begin Source File
-
-SOURCE=main.c
-# End Source File
-# Begin Source File
-
-SOURCE=opcodes.c
-# End Source File
-# Begin Source File
-
-SOURCE=os.c
-# End Source File
-# Begin Source File
-
-SOURCE=pager.c
-# End Source File
-# Begin Source File
-
-SOURCE=parse.c
-# End Source File
-# Begin Source File
-
-SOURCE=pragma.c
-# End Source File
-# Begin Source File
-
-SOURCE=printf.c
-# End Source File
-# Begin Source File
-
-SOURCE=random.c
-# End Source File
-# Begin Source File
-
-SOURCE=select.c
-# End Source File
-# Begin Source File
-
-SOURCE=table.c
-# End Source File
-# Begin Source File
-
-SOURCE=tokenize.c
-# End Source File
-# Begin Source File
-
-SOURCE=trigger.c
-# End Source File
-# Begin Source File
-
-SOURCE=update.c
-# End Source File
-# Begin Source File
-
-SOURCE=util.c
-# End Source File
-# Begin Source File
-
-SOURCE=vacuum.c
-# End Source File
-# Begin Source File
-
-SOURCE=vdbe.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\vdbeaux.c
-# End Source File
-# Begin Source File
-
-SOURCE=where.c
-# End Source File
-# End Group
-# Begin Group "Header Files"
-
-# PROP Default_Filter "h;hpp;hxx;hm;inl"
-# Begin Source File
-
-SOURCE=btree.h
-# End Source File
-# Begin Source File
-
-SOURCE=config_static.w32.h
-
-!IF "$(CFG)" == "libsqlite - Win32 Debug_TS"
-
-# Begin Custom Build
-InputDir=.
-InputPath=config_static.w32.h
-
-"$(InputDir)\config.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- copy $(InputPath) $(InputDir)\config.h
-
-# End Custom Build
-
-!ELSEIF "$(CFG)" == "libsqlite - Win32 Release_TS"
-
-# Begin Custom Build
-InputDir=.
-InputPath=config_static.w32.h
-
-"$(InputDir)\config.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- copy $(InputPath) $(InputDir)\config.h
-
-# End Custom Build
-
-!ELSEIF "$(CFG)" == "libsqlite - Win32 Release_TSDbg"
-
-# Begin Custom Build
-InputDir=.
-InputPath=config_static.w32.h
-
-"$(InputDir)\config.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- copy $(InputPath) $(InputDir)\config.h
-
-# End Custom Build
-
-!ENDIF
-
-# End Source File
-# Begin Source File
-
-SOURCE=hash.h
-# End Source File
-# Begin Source File
-
-SOURCE=opcodes.h
-# End Source File
-# Begin Source File
-
-SOURCE=os.h
-# End Source File
-# Begin Source File
-
-SOURCE=pager.h
-# End Source File
-# Begin Source File
-
-SOURCE=parse.h
-# End Source File
-# Begin Source File
-
-SOURCE=sqlite.w32.h
-
-!IF "$(CFG)" == "libsqlite - Win32 Debug_TS"
-
-# Begin Custom Build
-InputDir=.
-InputPath=sqlite.w32.h
-
-"$(InputDir)\sqlite.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- copy $(InputPath) $(InputDir)\sqlite.h
-
-# End Custom Build
-
-!ELSEIF "$(CFG)" == "libsqlite - Win32 Release_TS"
-
-# Begin Custom Build
-InputDir=.
-InputPath=sqlite.w32.h
-
-"$(InputDir)\sqlite.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- copy $(InputPath) $(InputDir)\sqlite.h
-
-# End Custom Build
-
-!ELSEIF "$(CFG)" == "libsqlite - Win32 Release_TSDbg"
-
-# Begin Custom Build
-InputDir=.
-InputPath=sqlite.w32.h
-
-"$(InputDir)\sqlite.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- copy $(InputPath) $(InputDir)\sqlite.h
-
-# End Custom Build
-
-!ENDIF
-
-# End Source File
-# Begin Source File
-
-SOURCE=sqliteInt.h
-# End Source File
-# Begin Source File
-
-SOURCE=vdbe.h
-# End Source File
-# End Group
-# End Target
-# End Project
diff --git a/ext/sqlite/libsqlite/src/main.c b/ext/sqlite/libsqlite/src/main.c
deleted file mode 100644
index e6cc80f450..0000000000
--- a/ext/sqlite/libsqlite/src/main.c
+++ /dev/null
@@ -1,1139 +0,0 @@
-/*
-** 2001 September 15
-**
-** The author disclaims copyright to this source code. In place of
-** a legal notice, here is a blessing:
-**
-** May you do good and not evil.
-** May you find forgiveness for yourself and forgive others.
-** May you share freely, never taking more than you give.
-**
-*************************************************************************
-** Main file for the SQLite library. The routines in this file
-** implement the programmer interface to the library. Routines in
-** other files are for internal use by SQLite and should not be
-** accessed by users of the library.
-**
-** $Id$
-*/
-#include "sqliteInt.h"
-#include "os.h"
-#include <ctype.h>
-
-/*
-** A pointer to this structure is used to communicate information
-** from sqliteInit into the sqliteInitCallback.
-*/
-typedef struct {
- sqlite *db; /* The database being initialized */
- char **pzErrMsg; /* Error message stored here */
-} InitData;
-
-/*
-** Fill the InitData structure with an error message that indicates
-** that the database is corrupt.
-*/
-static void corruptSchema(InitData *pData, const char *zExtra){
- sqliteSetString(pData->pzErrMsg, "malformed database schema",
- zExtra!=0 && zExtra[0]!=0 ? " - " : (char*)0, zExtra, (char*)0);
-}
-
-/*
-** This is the callback routine for the code that initializes the
-** database. See sqliteInit() below for additional information.
-**
-** Each callback contains the following information:
-**
-** argv[0] = "file-format" or "schema-cookie" or "table" or "index"
-** argv[1] = table or index name or meta statement type.
-** argv[2] = root page number for table or index. NULL for meta.
-** argv[3] = SQL text for a CREATE TABLE or CREATE INDEX statement.
-** argv[4] = "1" for temporary files, "0" for main database, "2" or more
-** for auxiliary database files.
-**
-*/
-static
-int sqliteInitCallback(void *pInit, int argc, char **argv, char **azColName){
- InitData *pData = (InitData*)pInit;
- int nErr = 0;
-
- assert( argc==5 );
- if( argv==0 ) return 0; /* Might happen if EMPTY_RESULT_CALLBACKS are on */
- if( argv[0]==0 ){
- corruptSchema(pData, 0);
- return 1;
- }
- switch( argv[0][0] ){
- case 'v':
- case 'i':
- case 't': { /* CREATE TABLE, CREATE INDEX, or CREATE VIEW statements */
- sqlite *db = pData->db;
- if( argv[2]==0 || argv[4]==0 ){
- corruptSchema(pData, 0);
- return 1;
- }
- if( argv[3] && argv[3][0] ){
- /* Call the parser to process a CREATE TABLE, INDEX or VIEW.
- ** But because db->init.busy is set to 1, no VDBE code is generated
- ** or executed. All the parser does is build the internal data
- ** structures that describe the table, index, or view.
- */
- char *zErr;
- assert( db->init.busy );
- db->init.iDb = atoi(argv[4]);
- assert( db->init.iDb>=0 && db->init.iDb<db->nDb );
- db->init.newTnum = atoi(argv[2]);
- if( sqlite_exec(db, argv[3], 0, 0, &zErr) ){
- corruptSchema(pData, zErr);
- sqlite_freemem(zErr);
- }
- db->init.iDb = 0;
- }else{
- /* If the SQL column is blank it means this is an index that
- ** was created to be the PRIMARY KEY or to fulfill a UNIQUE
- ** constraint for a CREATE TABLE. The index should have already
- ** been created when we processed the CREATE TABLE. All we have
- ** to do here is record the root page number for that index.
- */
- int iDb;
- Index *pIndex;
-
- iDb = atoi(argv[4]);
- assert( iDb>=0 && iDb<db->nDb );
- pIndex = sqliteFindIndex(db, argv[1], db->aDb[iDb].zName);
- if( pIndex==0 || pIndex->tnum!=0 ){
- /* This can occur if there exists an index on a TEMP table which
- ** has the same name as another index on a permanent index. Since
- ** the permanent table is hidden by the TEMP table, we can also
- ** safely ignore the index on the permanent table.
- */
- /* Do Nothing */;
- }else{
- pIndex->tnum = atoi(argv[2]);
- }
- }
- break;
- }
- default: {
- /* This can not happen! */
- nErr = 1;
- assert( nErr==0 );
- }
- }
- return nErr;
-}
-
-/*
-** This is a callback procedure used to reconstruct a table. The
-** name of the table to be reconstructed is passed in as argv[0].
-**
-** This routine is used to automatically upgrade a database from
-** format version 1 or 2 to version 3. The correct operation of
-** this routine relys on the fact that no indices are used when
-** copying a table out to a temporary file.
-**
-** The change from version 2 to version 3 occurred between SQLite
-** version 2.5.6 and 2.6.0 on 2002-July-18.
-*/
-static
-int upgrade_3_callback(void *pInit, int argc, char **argv, char **NotUsed){
- InitData *pData = (InitData*)pInit;
- int rc;
- Table *pTab;
- Trigger *pTrig;
- char *zErr = 0;
-
- pTab = sqliteFindTable(pData->db, argv[0], 0);
- assert( pTab!=0 );
- assert( sqliteStrICmp(pTab->zName, argv[0])==0 );
- if( pTab ){
- pTrig = pTab->pTrigger;
- pTab->pTrigger = 0; /* Disable all triggers before rebuilding the table */
- }
- rc = sqlite_exec_printf(pData->db,
- "CREATE TEMP TABLE sqlite_x AS SELECT * FROM '%q'; "
- "DELETE FROM '%q'; "
- "INSERT INTO '%q' SELECT * FROM sqlite_x; "
- "DROP TABLE sqlite_x;",
- 0, 0, &zErr, argv[0], argv[0], argv[0]);
- if( zErr ){
- if( *pData->pzErrMsg ) sqlite_freemem(*pData->pzErrMsg);
- *pData->pzErrMsg = zErr;
- }
-
- /* If an error occurred in the SQL above, then the transaction will
- ** rollback which will delete the internal symbol tables. This will
- ** cause the structure that pTab points to be deleted. In case that
- ** happened, we need to refetch pTab.
- */
- pTab = sqliteFindTable(pData->db, argv[0], 0);
- if( pTab ){
- assert( sqliteStrICmp(pTab->zName, argv[0])==0 );
- pTab->pTrigger = pTrig; /* Re-enable triggers */
- }
- return rc!=SQLITE_OK;
-}
-
-
-
-/*
-** Attempt to read the database schema and initialize internal
-** data structures for a single database file. The index of the
-** database file is given by iDb. iDb==0 is used for the main
-** database. iDb==1 should never be used. iDb>=2 is used for
-** auxiliary databases. Return one of the SQLITE_ error codes to
-** indicate success or failure.
-*/
-static int sqliteInitOne(sqlite *db, int iDb, char **pzErrMsg){
- int rc;
- BtCursor *curMain;
- int size;
- Table *pTab;
- char *azArg[6];
- char zDbNum[30];
- int meta[SQLITE_N_BTREE_META];
- InitData initData;
-
- /*
- ** The master database table has a structure like this
- */
- static char master_schema[] =
- "CREATE TABLE sqlite_master(\n"
- " type text,\n"
- " name text,\n"
- " tbl_name text,\n"
- " rootpage integer,\n"
- " sql text\n"
- ")"
- ;
- static char temp_master_schema[] =
- "CREATE TEMP TABLE sqlite_temp_master(\n"
- " type text,\n"
- " name text,\n"
- " tbl_name text,\n"
- " rootpage integer,\n"
- " sql text\n"
- ")"
- ;
-
- /* The following SQL will read the schema from the master tables.
- ** The first version works with SQLite file formats 2 or greater.
- ** The second version is for format 1 files.
- **
- ** Beginning with file format 2, the rowid for new table entries
- ** (including entries in sqlite_master) is an increasing integer.
- ** So for file format 2 and later, we can play back sqlite_master
- ** and all the CREATE statements will appear in the right order.
- ** But with file format 1, table entries were random and so we
- ** have to make sure the CREATE TABLEs occur before their corresponding
- ** CREATE INDEXs. (We don't have to deal with CREATE VIEW or
- ** CREATE TRIGGER in file format 1 because those constructs did
- ** not exist then.)
- */
- static char init_script[] =
- "SELECT type, name, rootpage, sql, 1 FROM sqlite_temp_master "
- "UNION ALL "
- "SELECT type, name, rootpage, sql, 0 FROM sqlite_master";
- static char older_init_script[] =
- "SELECT type, name, rootpage, sql, 1 FROM sqlite_temp_master "
- "UNION ALL "
- "SELECT type, name, rootpage, sql, 0 FROM sqlite_master "
- "WHERE type='table' "
- "UNION ALL "
- "SELECT type, name, rootpage, sql, 0 FROM sqlite_master "
- "WHERE type='index'";
-
-
- assert( iDb>=0 && iDb!=1 && iDb<db->nDb );
-
- /* Construct the schema tables: sqlite_master and sqlite_temp_master
- */
- sqliteSafetyOff(db);
- azArg[0] = "table";
- azArg[1] = MASTER_NAME;
- azArg[2] = "2";
- azArg[3] = master_schema;
- sprintf(zDbNum, "%d", iDb);
- azArg[4] = zDbNum;
- azArg[5] = 0;
- initData.db = db;
- initData.pzErrMsg = pzErrMsg;
- sqliteInitCallback(&initData, 5, azArg, 0);
- pTab = sqliteFindTable(db, MASTER_NAME, "main");
- if( pTab ){
- pTab->readOnly = 1;
- }
- if( iDb==0 ){
- azArg[1] = TEMP_MASTER_NAME;
- azArg[3] = temp_master_schema;
- azArg[4] = "1";
- sqliteInitCallback(&initData, 5, azArg, 0);
- pTab = sqliteFindTable(db, TEMP_MASTER_NAME, "temp");
- if( pTab ){
- pTab->readOnly = 1;
- }
- }
- sqliteSafetyOn(db);
-
- /* Create a cursor to hold the database open
- */
- if( db->aDb[iDb].pBt==0 ) return SQLITE_OK;
- rc = sqliteBtreeCursor(db->aDb[iDb].pBt, 2, 0, &curMain);
- if( rc ){
- sqliteSetString(pzErrMsg, sqlite_error_string(rc), (char*)0);
- return rc;
- }
-
- /* Get the database meta information
- */
- rc = sqliteBtreeGetMeta(db->aDb[iDb].pBt, meta);
- if( rc ){
- sqliteSetString(pzErrMsg, sqlite_error_string(rc), (char*)0);
- sqliteBtreeCloseCursor(curMain);
- return rc;
- }
- db->aDb[iDb].schema_cookie = meta[1];
- if( iDb==0 ){
- db->next_cookie = meta[1];
- db->file_format = meta[2];
- size = meta[3];
- if( size==0 ){ size = MAX_PAGES; }
- db->cache_size = size;
- db->safety_level = meta[4];
- if( meta[6]>0 && meta[6]<=2 && db->temp_store==0 ){
- db->temp_store = meta[6];
- }
- if( db->safety_level==0 ) db->safety_level = 2;
-
- /*
- ** file_format==1 Version 2.1.0.
- ** file_format==2 Version 2.2.0. Add support for INTEGER PRIMARY KEY.
- ** file_format==3 Version 2.6.0. Fix empty-string index bug.
- ** file_format==4 Version 2.7.0. Add support for separate numeric and
- ** text datatypes.
- */
- if( db->file_format==0 ){
- /* This happens if the database was initially empty */
- db->file_format = 4;
- }else if( db->file_format>4 ){
- sqliteBtreeCloseCursor(curMain);
- sqliteSetString(pzErrMsg, "unsupported file format", (char*)0);
- return SQLITE_ERROR;
- }
- }else if( db->file_format!=meta[2] || db->file_format<4 ){
- assert( db->file_format>=4 );
- if( meta[2]==0 ){
- sqliteSetString(pzErrMsg, "cannot attach empty database: ",
- db->aDb[iDb].zName, (char*)0);
- }else{
- sqliteSetString(pzErrMsg, "incompatible file format in auxiliary "
- "database: ", db->aDb[iDb].zName, (char*)0);
- }
- sqliteBtreeClose(db->aDb[iDb].pBt);
- db->aDb[iDb].pBt = 0;
- return SQLITE_FORMAT;
- }
- sqliteBtreeSetCacheSize(db->aDb[iDb].pBt, db->cache_size);
- sqliteBtreeSetSafetyLevel(db->aDb[iDb].pBt, meta[4]==0 ? 2 : meta[4]);
-
- /* Read the schema information out of the schema tables
- */
- assert( db->init.busy );
- sqliteSafetyOff(db);
- if( iDb==0 ){
- rc = sqlite_exec(db,
- db->file_format>=2 ? init_script : older_init_script,
- sqliteInitCallback, &initData, 0);
- }else{
- char *zSql = 0;
- sqliteSetString(&zSql,
- "SELECT type, name, rootpage, sql, ", zDbNum, " FROM \"",
- db->aDb[iDb].zName, "\".sqlite_master", (char*)0);
- rc = sqlite_exec(db, zSql, sqliteInitCallback, &initData, 0);
- sqliteFree(zSql);
- }
- sqliteSafetyOn(db);
- sqliteBtreeCloseCursor(curMain);
- if( sqlite_malloc_failed ){
- sqliteSetString(pzErrMsg, "out of memory", (char*)0);
- rc = SQLITE_NOMEM;
- sqliteResetInternalSchema(db, 0);
- }
- if( rc==SQLITE_OK ){
- DbSetProperty(db, iDb, DB_SchemaLoaded);
- if( iDb==0 ){
- DbSetProperty(db, 1, DB_SchemaLoaded);
- }
- }else{
- sqliteResetInternalSchema(db, iDb);
- }
- return rc;
-}
-
-/*
-** Initialize all database files - the main database file, the file
-** used to store temporary tables, and any additional database files
-** created using ATTACH statements. Return a success code. If an
-** error occurs, write an error message into *pzErrMsg.
-**
-** After the database is initialized, the SQLITE_Initialized
-** bit is set in the flags field of the sqlite structure. An
-** attempt is made to initialize the database as soon as it
-** is opened. If that fails (perhaps because another process
-** has the sqlite_master table locked) than another attempt
-** is made the first time the database is accessed.
-*/
-int sqliteInit(sqlite *db, char **pzErrMsg){
- int i, rc;
-
- if( db->init.busy ) return SQLITE_OK;
- assert( (db->flags & SQLITE_Initialized)==0 );
- rc = SQLITE_OK;
- db->init.busy = 1;
- for(i=0; rc==SQLITE_OK && i<db->nDb; i++){
- if( DbHasProperty(db, i, DB_SchemaLoaded) ) continue;
- assert( i!=1 ); /* Should have been initialized together with 0 */
- rc = sqliteInitOne(db, i, pzErrMsg);
- if( rc ){
- sqliteResetInternalSchema(db, i);
- }
- }
- db->init.busy = 0;
- if( rc==SQLITE_OK ){
- db->flags |= SQLITE_Initialized;
- sqliteCommitInternalChanges(db);
- }
-
- /* If the database is in formats 1 or 2, then upgrade it to
- ** version 3. This will reconstruct all indices. If the
- ** upgrade fails for any reason (ex: out of disk space, database
- ** is read only, interrupt received, etc.) then fail the init.
- */
- if( rc==SQLITE_OK && db->file_format<3 ){
- char *zErr = 0;
- InitData initData;
- int meta[SQLITE_N_BTREE_META];
-
- db->magic = SQLITE_MAGIC_OPEN;
- initData.db = db;
- initData.pzErrMsg = &zErr;
- db->file_format = 3;
- rc = sqlite_exec(db,
- "BEGIN; SELECT name FROM sqlite_master WHERE type='table';",
- upgrade_3_callback,
- &initData,
- &zErr);
- if( rc==SQLITE_OK ){
- sqliteBtreeGetMeta(db->aDb[0].pBt, meta);
- meta[2] = 4;
- sqliteBtreeUpdateMeta(db->aDb[0].pBt, meta);
- sqlite_exec(db, "COMMIT", 0, 0, 0);
- }
- if( rc!=SQLITE_OK ){
- sqliteSetString(pzErrMsg,
- "unable to upgrade database to the version 2.6 format",
- zErr ? ": " : 0, zErr, (char*)0);
- }
- sqlite_freemem(zErr);
- }
-
- if( rc!=SQLITE_OK ){
- db->flags &= ~SQLITE_Initialized;
- }
- return rc;
-}
-
-/*
-** The version of the library
-*/
-const char rcsid[] = "@(#) \044Id: SQLite version " SQLITE_VERSION " $";
-const char sqlite_version[] = SQLITE_VERSION;
-
-/*
-** Does the library expect data to be encoded as UTF-8 or iso8859? The
-** following global constant always lets us know.
-*/
-#ifdef SQLITE_UTF8
-const char sqlite_encoding[] = "UTF-8";
-#else
-const char sqlite_encoding[] = "iso8859";
-#endif
-
-/*
-** Open a new SQLite database. Construct an "sqlite" structure to define
-** the state of this database and return a pointer to that structure.
-**
-** An attempt is made to initialize the in-memory data structures that
-** hold the database schema. But if this fails (because the schema file
-** is locked) then that step is deferred until the first call to
-** sqlite_exec().
-*/
-sqlite *sqlite_open(const char *zFilename, int mode, char **pzErrMsg){
- sqlite *db;
- int rc, i;
-
- /* Allocate the sqlite data structure */
- db = sqliteMalloc( sizeof(sqlite) );
- if( pzErrMsg ) *pzErrMsg = 0;
- if( db==0 ) goto no_mem_on_open;
- db->onError = OE_Default;
- db->priorNewRowid = 0;
- db->magic = SQLITE_MAGIC_BUSY;
- db->nDb = 2;
- db->aDb = db->aDbStatic;
- /* db->flags |= SQLITE_ShortColNames; */
- sqliteHashInit(&db->aFunc, SQLITE_HASH_STRING, 1);
- for(i=0; i<db->nDb; i++){
- sqliteHashInit(&db->aDb[i].tblHash, SQLITE_HASH_STRING, 0);
- sqliteHashInit(&db->aDb[i].idxHash, SQLITE_HASH_STRING, 0);
- sqliteHashInit(&db->aDb[i].trigHash, SQLITE_HASH_STRING, 0);
- sqliteHashInit(&db->aDb[i].aFKey, SQLITE_HASH_STRING, 1);
- }
-
- /* Open the backend database driver */
- if( zFilename[0]==':' && strcmp(zFilename,":memory:")==0 ){
- db->temp_store = 2;
- }
- rc = sqliteBtreeFactory(db, zFilename, 0, MAX_PAGES, &db->aDb[0].pBt);
- if( rc!=SQLITE_OK ){
- switch( rc ){
- default: {
- sqliteSetString(pzErrMsg, "unable to open database: ",
- zFilename, (char*)0);
- }
- }
- sqliteFree(db);
- sqliteStrRealloc(pzErrMsg);
- return 0;
- }
- db->aDb[0].zName = "main";
- db->aDb[1].zName = "temp";
-
- /* Attempt to read the schema */
- sqliteRegisterBuiltinFunctions(db);
- rc = sqliteInit(db, pzErrMsg);
- db->magic = SQLITE_MAGIC_OPEN;
- if( sqlite_malloc_failed ){
- sqlite_close(db);
- goto no_mem_on_open;
- }else if( rc!=SQLITE_OK && rc!=SQLITE_BUSY ){
- sqlite_close(db);
- sqliteStrRealloc(pzErrMsg);
- return 0;
- }else if( pzErrMsg ){
- sqliteFree(*pzErrMsg);
- *pzErrMsg = 0;
- }
-
- /* Return a pointer to the newly opened database structure */
- return db;
-
-no_mem_on_open:
- sqliteSetString(pzErrMsg, "out of memory", (char*)0);
- sqliteStrRealloc(pzErrMsg);
- return 0;
-}
-
-/*
-** Return the ROWID of the most recent insert
-*/
-int sqlite_last_insert_rowid(sqlite *db){
- return db->lastRowid;
-}
-
-/*
-** Return the number of changes in the most recent call to sqlite_exec().
-*/
-int sqlite_changes(sqlite *db){
- return db->nChange;
-}
-
-/*
-** Return the number of changes produced by the last INSERT, UPDATE, or
-** DELETE statement to complete execution. The count does not include
-** changes due to SQL statements executed in trigger programs that were
-** triggered by that statement
-*/
-int sqlite_last_statement_changes(sqlite *db){
- return db->lsChange;
-}
-
-/*
-** Close an existing SQLite database
-*/
-void sqlite_close(sqlite *db){
- HashElem *i;
- int j;
- db->want_to_close = 1;
- if( sqliteSafetyCheck(db) || sqliteSafetyOn(db) ){
- /* printf("DID NOT CLOSE\n"); fflush(stdout); */
- return;
- }
- db->magic = SQLITE_MAGIC_CLOSED;
- for(j=0; j<db->nDb; j++){
- struct Db *pDb = &db->aDb[j];
- if( pDb->pBt ){
- sqliteBtreeClose(pDb->pBt);
- pDb->pBt = 0;
- }
- }
- sqliteResetInternalSchema(db, 0);
- assert( db->nDb<=2 );
- assert( db->aDb==db->aDbStatic );
- for(i=sqliteHashFirst(&db->aFunc); i; i=sqliteHashNext(i)){
- FuncDef *pFunc, *pNext;
- for(pFunc = (FuncDef*)sqliteHashData(i); pFunc; pFunc=pNext){
- pNext = pFunc->pNext;
- sqliteFree(pFunc);
- }
- }
- sqliteHashClear(&db->aFunc);
- sqliteFree(db);
-}
-
-/*
-** Rollback all database files.
-*/
-void sqliteRollbackAll(sqlite *db){
- int i;
- for(i=0; i<db->nDb; i++){
- if( db->aDb[i].pBt ){
- sqliteBtreeRollback(db->aDb[i].pBt);
- db->aDb[i].inTrans = 0;
- }
- }
- sqliteResetInternalSchema(db, 0);
- /* sqliteRollbackInternalChanges(db); */
-}
-
-/*
-** Execute SQL code. Return one of the SQLITE_ success/failure
-** codes. Also write an error message into memory obtained from
-** malloc() and make *pzErrMsg point to that message.
-**
-** If the SQL is a query, then for each row in the query result
-** the xCallback() function is called. pArg becomes the first
-** argument to xCallback(). If xCallback=NULL then no callback
-** is invoked, even for queries.
-*/
-int sqlite_exec(
- sqlite *db, /* The database on which the SQL executes */
- const char *zSql, /* The SQL to be executed */
- sqlite_callback xCallback, /* Invoke this callback routine */
- void *pArg, /* First argument to xCallback() */
- char **pzErrMsg /* Write error messages here */
-){
- int rc = SQLITE_OK;
- const char *zLeftover;
- sqlite_vm *pVm;
- int nRetry = 0;
- int nChange = 0;
- int nCallback;
-
- if( zSql==0 ) return SQLITE_OK;
- while( rc==SQLITE_OK && zSql[0] ){
- pVm = 0;
- rc = sqlite_compile(db, zSql, &zLeftover, &pVm, pzErrMsg);
- if( rc!=SQLITE_OK ){
- assert( pVm==0 || sqlite_malloc_failed );
- return rc;
- }
- if( pVm==0 ){
- /* This happens if the zSql input contained only whitespace */
- break;
- }
- db->nChange += nChange;
- nCallback = 0;
- while(1){
- int nArg;
- char **azArg, **azCol;
- rc = sqlite_step(pVm, &nArg, (const char***)&azArg,(const char***)&azCol);
- if( rc==SQLITE_ROW ){
- if( xCallback!=0 && xCallback(pArg, nArg, azArg, azCol) ){
- sqlite_finalize(pVm, 0);
- return SQLITE_ABORT;
- }
- nCallback++;
- }else{
- if( rc==SQLITE_DONE && nCallback==0
- && (db->flags & SQLITE_NullCallback)!=0 && xCallback!=0 ){
- xCallback(pArg, nArg, azArg, azCol);
- }
- rc = sqlite_finalize(pVm, pzErrMsg);
- if( rc==SQLITE_SCHEMA && nRetry<2 ){
- nRetry++;
- rc = SQLITE_OK;
- break;
- }
- if( db->pVdbe==0 ){
- nChange = db->nChange;
- }
- nRetry = 0;
- zSql = zLeftover;
- while( isspace(zSql[0]) ) zSql++;
- break;
- }
- }
- }
- return rc;
-}
-
-
-/*
-** Compile a single statement of SQL into a virtual machine. Return one
-** of the SQLITE_ success/failure codes. Also write an error message into
-** memory obtained from malloc() and make *pzErrMsg point to that message.
-*/
-int sqlite_compile(
- sqlite *db, /* The database on which the SQL executes */
- const char *zSql, /* The SQL to be executed */
- const char **pzTail, /* OUT: Next statement after the first */
- sqlite_vm **ppVm, /* OUT: The virtual machine */
- char **pzErrMsg /* OUT: Write error messages here */
-){
- Parse sParse;
-
- if( pzErrMsg ) *pzErrMsg = 0;
- if( sqliteSafetyOn(db) ) goto exec_misuse;
- if( !db->init.busy ){
- if( (db->flags & SQLITE_Initialized)==0 ){
- int rc, cnt = 1;
- while( (rc = sqliteInit(db, pzErrMsg))==SQLITE_BUSY
- && db->xBusyCallback
- && db->xBusyCallback(db->pBusyArg, "", cnt++)!=0 ){}
- if( rc!=SQLITE_OK ){
- sqliteStrRealloc(pzErrMsg);
- sqliteSafetyOff(db);
- return rc;
- }
- if( pzErrMsg ){
- sqliteFree(*pzErrMsg);
- *pzErrMsg = 0;
- }
- }
- if( db->file_format<3 ){
- sqliteSafetyOff(db);
- sqliteSetString(pzErrMsg, "obsolete database file format", (char*)0);
- return SQLITE_ERROR;
- }
- }
- assert( (db->flags & SQLITE_Initialized)!=0 || db->init.busy );
- if( db->pVdbe==0 ){ db->nChange = 0; }
- memset(&sParse, 0, sizeof(sParse));
- sParse.db = db;
- sqliteRunParser(&sParse, zSql, pzErrMsg);
- if( db->xTrace && !db->init.busy ){
- /* Trace only the statment that was compiled.
- ** Make a copy of that part of the SQL string since zSQL is const
- ** and we must pass a zero terminated string to the trace function
- ** The copy is unnecessary if the tail pointer is pointing at the
- ** beginnig or end of the SQL string.
- */
- if( sParse.zTail && sParse.zTail!=zSql && *sParse.zTail ){
- char *tmpSql = sqliteStrNDup(zSql, sParse.zTail - zSql);
- if( tmpSql ){
- db->xTrace(db->pTraceArg, tmpSql);
- free(tmpSql);
- }else{
- /* If a memory error occurred during the copy,
- ** trace entire SQL string and fall through to the
- ** sqlite_malloc_failed test to report the error.
- */
- db->xTrace(db->pTraceArg, zSql);
- }
- }else{
- db->xTrace(db->pTraceArg, zSql);
- }
- }
- if( sqlite_malloc_failed ){
- sqliteSetString(pzErrMsg, "out of memory", (char*)0);
- sParse.rc = SQLITE_NOMEM;
- sqliteRollbackAll(db);
- sqliteResetInternalSchema(db, 0);
- db->flags &= ~SQLITE_InTrans;
- }
- if( sParse.rc==SQLITE_DONE ) sParse.rc = SQLITE_OK;
- if( sParse.rc!=SQLITE_OK && pzErrMsg && *pzErrMsg==0 ){
- sqliteSetString(pzErrMsg, sqlite_error_string(sParse.rc), (char*)0);
- }
- sqliteStrRealloc(pzErrMsg);
- if( sParse.rc==SQLITE_SCHEMA ){
- sqliteResetInternalSchema(db, 0);
- }
- assert( ppVm );
- *ppVm = (sqlite_vm*)sParse.pVdbe;
- if( pzTail ) *pzTail = sParse.zTail;
- if( sqliteSafetyOff(db) ) goto exec_misuse;
- return sParse.rc;
-
-exec_misuse:
- if( pzErrMsg ){
- *pzErrMsg = 0;
- sqliteSetString(pzErrMsg, sqlite_error_string(SQLITE_MISUSE), (char*)0);
- sqliteStrRealloc(pzErrMsg);
- }
- return SQLITE_MISUSE;
-}
-
-
-/*
-** The following routine destroys a virtual machine that is created by
-** the sqlite_compile() routine.
-**
-** The integer returned is an SQLITE_ success/failure code that describes
-** the result of executing the virtual machine. An error message is
-** written into memory obtained from malloc and *pzErrMsg is made to
-** point to that error if pzErrMsg is not NULL. The calling routine
-** should use sqlite_freemem() to delete the message when it has finished
-** with it.
-*/
-int sqlite_finalize(
- sqlite_vm *pVm, /* The virtual machine to be destroyed */
- char **pzErrMsg /* OUT: Write error messages here */
-){
- int rc = sqliteVdbeFinalize((Vdbe*)pVm, pzErrMsg);
- sqliteStrRealloc(pzErrMsg);
- return rc;
-}
-
-/*
-** Terminate the current execution of a virtual machine then
-** reset the virtual machine back to its starting state so that it
-** can be reused. Any error message resulting from the prior execution
-** is written into *pzErrMsg. A success code from the prior execution
-** is returned.
-*/
-int sqlite_reset(
- sqlite_vm *pVm, /* The virtual machine to be destroyed */
- char **pzErrMsg /* OUT: Write error messages here */
-){
- int rc = sqliteVdbeReset((Vdbe*)pVm, pzErrMsg);
- sqliteVdbeMakeReady((Vdbe*)pVm, -1, 0);
- sqliteStrRealloc(pzErrMsg);
- return rc;
-}
-
-/*
-** Return a static string that describes the kind of error specified in the
-** argument.
-*/
-const char *sqlite_error_string(int rc){
- const char *z;
- switch( rc ){
- case SQLITE_OK: z = "not an error"; break;
- case SQLITE_ERROR: z = "SQL logic error or missing database"; break;
- case SQLITE_INTERNAL: z = "internal SQLite implementation flaw"; break;
- case SQLITE_PERM: z = "access permission denied"; break;
- case SQLITE_ABORT: z = "callback requested query abort"; break;
- case SQLITE_BUSY: z = "database is locked"; break;
- case SQLITE_LOCKED: z = "database table is locked"; break;
- case SQLITE_NOMEM: z = "out of memory"; break;
- case SQLITE_READONLY: z = "attempt to write a readonly database"; break;
- case SQLITE_INTERRUPT: z = "interrupted"; break;
- case SQLITE_IOERR: z = "disk I/O error"; break;
- case SQLITE_CORRUPT: z = "database disk image is malformed"; break;
- case SQLITE_NOTFOUND: z = "table or record not found"; break;
- case SQLITE_FULL: z = "database is full"; break;
- case SQLITE_CANTOPEN: z = "unable to open database file"; break;
- case SQLITE_PROTOCOL: z = "database locking protocol failure"; break;
- case SQLITE_EMPTY: z = "table contains no data"; break;
- case SQLITE_SCHEMA: z = "database schema has changed"; break;
- case SQLITE_TOOBIG: z = "too much data for one table row"; break;
- case SQLITE_CONSTRAINT: z = "constraint failed"; break;
- case SQLITE_MISMATCH: z = "datatype mismatch"; break;
- case SQLITE_MISUSE: z = "library routine called out of sequence";break;
- case SQLITE_NOLFS: z = "kernel lacks large file support"; break;
- case SQLITE_AUTH: z = "authorization denied"; break;
- case SQLITE_FORMAT: z = "auxiliary database format error"; break;
- case SQLITE_RANGE: z = "bind index out of range"; break;
- case SQLITE_NOTADB: z = "file is encrypted or is not a database";break;
- default: z = "unknown error"; break;
- }
- return z;
-}
-
-/*
-** This routine implements a busy callback that sleeps and tries
-** again until a timeout value is reached. The timeout value is
-** an integer number of milliseconds passed in as the first
-** argument.
-*/
-static int sqliteDefaultBusyCallback(
- void *Timeout, /* Maximum amount of time to wait */
- const char *NotUsed, /* The name of the table that is busy */
- int count /* Number of times table has been busy */
-){
-#if SQLITE_MIN_SLEEP_MS==1
- static const char delays[] =
- { 1, 2, 5, 10, 15, 20, 25, 25, 25, 50, 50, 50, 100};
- static const short int totals[] =
- { 0, 1, 3, 8, 18, 33, 53, 78, 103, 128, 178, 228, 287};
-# define NDELAY (sizeof(delays)/sizeof(delays[0]))
- int timeout = (int)(long)Timeout;
- int delay, prior;
-
- if( count <= NDELAY ){
- delay = delays[count-1];
- prior = totals[count-1];
- }else{
- delay = delays[NDELAY-1];
- prior = totals[NDELAY-1] + delay*(count-NDELAY-1);
- }
- if( prior + delay > timeout ){
- delay = timeout - prior;
- if( delay<=0 ) return 0;
- }
- sqliteOsSleep(delay);
- return 1;
-#else
- int timeout = (int)(long)Timeout;
- if( (count+1)*1000 > timeout ){
- return 0;
- }
- sqliteOsSleep(1000);
- return 1;
-#endif
-}
-
-/*
-** This routine sets the busy callback for an Sqlite database to the
-** given callback function with the given argument.
-*/
-void sqlite_busy_handler(
- sqlite *db,
- int (*xBusy)(void*,const char*,int),
- void *pArg
-){
- db->xBusyCallback = xBusy;
- db->pBusyArg = pArg;
-}
-
-#ifndef SQLITE_OMIT_PROGRESS_CALLBACK
-/*
-** This routine sets the progress callback for an Sqlite database to the
-** given callback function with the given argument. The progress callback will
-** be invoked every nOps opcodes.
-*/
-void sqlite_progress_handler(
- sqlite *db,
- int nOps,
- int (*xProgress)(void*),
- void *pArg
-){
- if( nOps>0 ){
- db->xProgress = xProgress;
- db->nProgressOps = nOps;
- db->pProgressArg = pArg;
- }else{
- db->xProgress = 0;
- db->nProgressOps = 0;
- db->pProgressArg = 0;
- }
-}
-#endif
-
-
-/*
-** This routine installs a default busy handler that waits for the
-** specified number of milliseconds before returning 0.
-*/
-void sqlite_busy_timeout(sqlite *db, int ms){
- if( ms>0 ){
- sqlite_busy_handler(db, sqliteDefaultBusyCallback, (void*)(long)ms);
- }else{
- sqlite_busy_handler(db, 0, 0);
- }
-}
-
-/*
-** Cause any pending operation to stop at its earliest opportunity.
-*/
-void sqlite_interrupt(sqlite *db){
- db->flags |= SQLITE_Interrupt;
-}
-
-/*
-** Windows systems should call this routine to free memory that
-** is returned in the in the errmsg parameter of sqlite_open() when
-** SQLite is a DLL. For some reason, it does not work to call free()
-** directly.
-**
-** Note that we need to call free() not sqliteFree() here, since every
-** string that is exported from SQLite should have already passed through
-** sqliteStrRealloc().
-*/
-void sqlite_freemem(void *p){ free(p); }
-
-/*
-** Windows systems need functions to call to return the sqlite_version
-** and sqlite_encoding strings since they are unable to access constants
-** within DLLs.
-*/
-const char *sqlite_libversion(void){ return sqlite_version; }
-const char *sqlite_libencoding(void){ return sqlite_encoding; }
-
-/*
-** Create new user-defined functions. The sqlite_create_function()
-** routine creates a regular function and sqlite_create_aggregate()
-** creates an aggregate function.
-**
-** Passing a NULL xFunc argument or NULL xStep and xFinalize arguments
-** disables the function. Calling sqlite_create_function() with the
-** same name and number of arguments as a prior call to
-** sqlite_create_aggregate() disables the prior call to
-** sqlite_create_aggregate(), and vice versa.
-**
-** If nArg is -1 it means that this function will accept any number
-** of arguments, including 0. The maximum allowed value of nArg is 127.
-*/
-int sqlite_create_function(
- sqlite *db, /* Add the function to this database connection */
- const char *zName, /* Name of the function to add */
- int nArg, /* Number of arguments */
- void (*xFunc)(sqlite_func*,int,const char**), /* The implementation */
- void *pUserData /* User data */
-){
- FuncDef *p;
- int nName;
- if( db==0 || zName==0 || sqliteSafetyCheck(db) ) return 1;
- if( nArg<-1 || nArg>127 ) return 1;
- nName = strlen(zName);
- if( nName>255 ) return 1;
- p = sqliteFindFunction(db, zName, nName, nArg, 1);
- if( p==0 ) return 1;
- p->xFunc = xFunc;
- p->xStep = 0;
- p->xFinalize = 0;
- p->pUserData = pUserData;
- return 0;
-}
-int sqlite_create_aggregate(
- sqlite *db, /* Add the function to this database connection */
- const char *zName, /* Name of the function to add */
- int nArg, /* Number of arguments */
- void (*xStep)(sqlite_func*,int,const char**), /* The step function */
- void (*xFinalize)(sqlite_func*), /* The finalizer */
- void *pUserData /* User data */
-){
- FuncDef *p;
- int nName;
- if( db==0 || zName==0 || sqliteSafetyCheck(db) ) return 1;
- if( nArg<-1 || nArg>127 ) return 1;
- nName = strlen(zName);
- if( nName>255 ) return 1;
- p = sqliteFindFunction(db, zName, nName, nArg, 1);
- if( p==0 ) return 1;
- p->xFunc = 0;
- p->xStep = xStep;
- p->xFinalize = xFinalize;
- p->pUserData = pUserData;
- return 0;
-}
-
-/*
-** Change the datatype for all functions with a given name. See the
-** header comment for the prototype of this function in sqlite.h for
-** additional information.
-*/
-int sqlite_function_type(sqlite *db, const char *zName, int dataType){
- FuncDef *p = (FuncDef*)sqliteHashFind(&db->aFunc, zName, strlen(zName));
- while( p ){
- p->dataType = dataType;
- p = p->pNext;
- }
- return SQLITE_OK;
-}
-
-/*
-** Register a trace function. The pArg from the previously registered trace
-** is returned.
-**
-** A NULL trace function means that no tracing is executes. A non-NULL
-** trace is a pointer to a function that is invoked at the start of each
-** sqlite_exec().
-*/
-void *sqlite_trace(sqlite *db, void (*xTrace)(void*,const char*), void *pArg){
- void *pOld = db->pTraceArg;
- db->xTrace = xTrace;
- db->pTraceArg = pArg;
- return pOld;
-}
-
-/*** EXPERIMENTAL ***
-**
-** Register a function to be invoked when a transaction comments.
-** If either function returns non-zero, then the commit becomes a
-** rollback.
-*/
-void *sqlite_commit_hook(
- sqlite *db, /* Attach the hook to this database */
- int (*xCallback)(void*), /* Function to invoke on each commit */
- void *pArg /* Argument to the function */
-){
- void *pOld = db->pCommitArg;
- db->xCommitCallback = xCallback;
- db->pCommitArg = pArg;
- return pOld;
-}
-
-
-/*
-** This routine is called to create a connection to a database BTree
-** driver. If zFilename is the name of a file, then that file is
-** opened and used. If zFilename is the magic name ":memory:" then
-** the database is stored in memory (and is thus forgotten as soon as
-** the connection is closed.) If zFilename is NULL then the database
-** is for temporary use only and is deleted as soon as the connection
-** is closed.
-**
-** A temporary database can be either a disk file (that is automatically
-** deleted when the file is closed) or a set of red-black trees held in memory,
-** depending on the values of the TEMP_STORE compile-time macro and the
-** db->temp_store variable, according to the following chart:
-**
-** TEMP_STORE db->temp_store Location of temporary database
-** ---------- -------------- ------------------------------
-** 0 any file
-** 1 1 file
-** 1 2 memory
-** 1 0 file
-** 2 1 file
-** 2 2 memory
-** 2 0 memory
-** 3 any memory
-*/
-int sqliteBtreeFactory(
- const sqlite *db, /* Main database when opening aux otherwise 0 */
- const char *zFilename, /* Name of the file containing the BTree database */
- int omitJournal, /* if TRUE then do not journal this file */
- int nCache, /* How many pages in the page cache */
- Btree **ppBtree){ /* Pointer to new Btree object written here */
-
- assert( ppBtree != 0);
-
-#ifndef SQLITE_OMIT_INMEMORYDB
- if( zFilename==0 ){
- if (TEMP_STORE == 0) {
- /* Always use file based temporary DB */
- return sqliteBtreeOpen(0, omitJournal, nCache, ppBtree);
- } else if (TEMP_STORE == 1 || TEMP_STORE == 2) {
- /* Switch depending on compile-time and/or runtime settings. */
- int location = db->temp_store==0 ? TEMP_STORE : db->temp_store;
-
- if (location == 1) {
- return sqliteBtreeOpen(zFilename, omitJournal, nCache, ppBtree);
- } else {
- return sqliteRbtreeOpen(0, 0, 0, ppBtree);
- }
- } else {
- /* Always use in-core DB */
- return sqliteRbtreeOpen(0, 0, 0, ppBtree);
- }
- }else if( zFilename[0]==':' && strcmp(zFilename,":memory:")==0 ){
- return sqliteRbtreeOpen(0, 0, 0, ppBtree);
- }else
-#endif
- {
- return sqliteBtreeOpen(zFilename, omitJournal, nCache, ppBtree);
- }
-}
diff --git a/ext/sqlite/libsqlite/src/opcodes.c b/ext/sqlite/libsqlite/src/opcodes.c
deleted file mode 100644
index 0907e0e797..0000000000
--- a/ext/sqlite/libsqlite/src/opcodes.c
+++ /dev/null
@@ -1,140 +0,0 @@
-/* Automatically generated file. Do not edit */
-char *sqliteOpcodeNames[] = { "???",
- "Goto",
- "Gosub",
- "Return",
- "Halt",
- "Integer",
- "String",
- "Variable",
- "Pop",
- "Dup",
- "Pull",
- "Push",
- "ColumnName",
- "Callback",
- "Concat",
- "Add",
- "Subtract",
- "Multiply",
- "Divide",
- "Remainder",
- "Function",
- "BitAnd",
- "BitOr",
- "ShiftLeft",
- "ShiftRight",
- "AddImm",
- "ForceInt",
- "MustBeInt",
- "Eq",
- "Ne",
- "Lt",
- "Le",
- "Gt",
- "Ge",
- "StrEq",
- "StrNe",
- "StrLt",
- "StrLe",
- "StrGt",
- "StrGe",
- "And",
- "Or",
- "Negative",
- "AbsValue",
- "Not",
- "BitNot",
- "Noop",
- "If",
- "IfNot",
- "IsNull",
- "NotNull",
- "MakeRecord",
- "MakeIdxKey",
- "MakeKey",
- "IncrKey",
- "Checkpoint",
- "Transaction",
- "Commit",
- "Rollback",
- "ReadCookie",
- "SetCookie",
- "VerifyCookie",
- "OpenRead",
- "OpenWrite",
- "OpenTemp",
- "OpenPseudo",
- "Close",
- "MoveLt",
- "MoveTo",
- "Distinct",
- "NotFound",
- "Found",
- "IsUnique",
- "NotExists",
- "NewRecno",
- "PutIntKey",
- "PutStrKey",
- "Delete",
- "SetCounts",
- "KeyAsData",
- "RowKey",
- "RowData",
- "Column",
- "Recno",
- "FullKey",
- "NullRow",
- "Last",
- "Rewind",
- "Prev",
- "Next",
- "IdxPut",
- "IdxDelete",
- "IdxRecno",
- "IdxLT",
- "IdxGT",
- "IdxGE",
- "IdxIsNull",
- "Destroy",
- "Clear",
- "CreateIndex",
- "CreateTable",
- "IntegrityCk",
- "ListWrite",
- "ListRewind",
- "ListRead",
- "ListReset",
- "ListPush",
- "ListPop",
- "ContextPush",
- "ContextPop",
- "SortPut",
- "SortMakeRec",
- "SortMakeKey",
- "Sort",
- "SortNext",
- "SortCallback",
- "SortReset",
- "FileOpen",
- "FileRead",
- "FileColumn",
- "MemStore",
- "MemLoad",
- "MemIncr",
- "AggReset",
- "AggInit",
- "AggFunc",
- "AggFocus",
- "AggSet",
- "AggGet",
- "AggNext",
- "SetInsert",
- "SetFound",
- "SetNotFound",
- "SetFirst",
- "SetNext",
- "Vacuum",
- "StackDepth",
- "StackReset",
-};
diff --git a/ext/sqlite/libsqlite/src/opcodes.h b/ext/sqlite/libsqlite/src/opcodes.h
deleted file mode 100644
index 35e050697f..0000000000
--- a/ext/sqlite/libsqlite/src/opcodes.h
+++ /dev/null
@@ -1,138 +0,0 @@
-/* Automatically generated file. Do not edit */
-#define OP_Goto 1
-#define OP_Gosub 2
-#define OP_Return 3
-#define OP_Halt 4
-#define OP_Integer 5
-#define OP_String 6
-#define OP_Variable 7
-#define OP_Pop 8
-#define OP_Dup 9
-#define OP_Pull 10
-#define OP_Push 11
-#define OP_ColumnName 12
-#define OP_Callback 13
-#define OP_Concat 14
-#define OP_Add 15
-#define OP_Subtract 16
-#define OP_Multiply 17
-#define OP_Divide 18
-#define OP_Remainder 19
-#define OP_Function 20
-#define OP_BitAnd 21
-#define OP_BitOr 22
-#define OP_ShiftLeft 23
-#define OP_ShiftRight 24
-#define OP_AddImm 25
-#define OP_ForceInt 26
-#define OP_MustBeInt 27
-#define OP_Eq 28
-#define OP_Ne 29
-#define OP_Lt 30
-#define OP_Le 31
-#define OP_Gt 32
-#define OP_Ge 33
-#define OP_StrEq 34
-#define OP_StrNe 35
-#define OP_StrLt 36
-#define OP_StrLe 37
-#define OP_StrGt 38
-#define OP_StrGe 39
-#define OP_And 40
-#define OP_Or 41
-#define OP_Negative 42
-#define OP_AbsValue 43
-#define OP_Not 44
-#define OP_BitNot 45
-#define OP_Noop 46
-#define OP_If 47
-#define OP_IfNot 48
-#define OP_IsNull 49
-#define OP_NotNull 50
-#define OP_MakeRecord 51
-#define OP_MakeIdxKey 52
-#define OP_MakeKey 53
-#define OP_IncrKey 54
-#define OP_Checkpoint 55
-#define OP_Transaction 56
-#define OP_Commit 57
-#define OP_Rollback 58
-#define OP_ReadCookie 59
-#define OP_SetCookie 60
-#define OP_VerifyCookie 61
-#define OP_OpenRead 62
-#define OP_OpenWrite 63
-#define OP_OpenTemp 64
-#define OP_OpenPseudo 65
-#define OP_Close 66
-#define OP_MoveLt 67
-#define OP_MoveTo 68
-#define OP_Distinct 69
-#define OP_NotFound 70
-#define OP_Found 71
-#define OP_IsUnique 72
-#define OP_NotExists 73
-#define OP_NewRecno 74
-#define OP_PutIntKey 75
-#define OP_PutStrKey 76
-#define OP_Delete 77
-#define OP_SetCounts 78
-#define OP_KeyAsData 79
-#define OP_RowKey 80
-#define OP_RowData 81
-#define OP_Column 82
-#define OP_Recno 83
-#define OP_FullKey 84
-#define OP_NullRow 85
-#define OP_Last 86
-#define OP_Rewind 87
-#define OP_Prev 88
-#define OP_Next 89
-#define OP_IdxPut 90
-#define OP_IdxDelete 91
-#define OP_IdxRecno 92
-#define OP_IdxLT 93
-#define OP_IdxGT 94
-#define OP_IdxGE 95
-#define OP_IdxIsNull 96
-#define OP_Destroy 97
-#define OP_Clear 98
-#define OP_CreateIndex 99
-#define OP_CreateTable 100
-#define OP_IntegrityCk 101
-#define OP_ListWrite 102
-#define OP_ListRewind 103
-#define OP_ListRead 104
-#define OP_ListReset 105
-#define OP_ListPush 106
-#define OP_ListPop 107
-#define OP_ContextPush 108
-#define OP_ContextPop 109
-#define OP_SortPut 110
-#define OP_SortMakeRec 111
-#define OP_SortMakeKey 112
-#define OP_Sort 113
-#define OP_SortNext 114
-#define OP_SortCallback 115
-#define OP_SortReset 116
-#define OP_FileOpen 117
-#define OP_FileRead 118
-#define OP_FileColumn 119
-#define OP_MemStore 120
-#define OP_MemLoad 121
-#define OP_MemIncr 122
-#define OP_AggReset 123
-#define OP_AggInit 124
-#define OP_AggFunc 125
-#define OP_AggFocus 126
-#define OP_AggSet 127
-#define OP_AggGet 128
-#define OP_AggNext 129
-#define OP_SetInsert 130
-#define OP_SetFound 131
-#define OP_SetNotFound 132
-#define OP_SetFirst 133
-#define OP_SetNext 134
-#define OP_Vacuum 135
-#define OP_StackDepth 136
-#define OP_StackReset 137
diff --git a/ext/sqlite/libsqlite/src/os.c b/ext/sqlite/libsqlite/src/os.c
deleted file mode 100644
index 0e2930c0ca..0000000000
--- a/ext/sqlite/libsqlite/src/os.c
+++ /dev/null
@@ -1,1845 +0,0 @@
-/*
-** 2001 September 16
-**
-** The author disclaims copyright to this source code. In place of
-** a legal notice, here is a blessing:
-**
-** May you do good and not evil.
-** May you find forgiveness for yourself and forgive others.
-** May you share freely, never taking more than you give.
-**
-******************************************************************************
-**
-** This file contains code that is specific to particular operating
-** systems. The purpose of this file is to provide a uniform abstraction
-** on which the rest of SQLite can operate.
-*/
-#include "os.h" /* Must be first to enable large file support */
-#include "sqliteInt.h"
-
-#if OS_UNIX
-# include <time.h>
-# include <errno.h>
-# include <unistd.h>
-# ifndef O_LARGEFILE
-# define O_LARGEFILE 0
-# endif
-# ifdef SQLITE_DISABLE_LFS
-# undef O_LARGEFILE
-# define O_LARGEFILE 0
-# endif
-# ifndef O_NOFOLLOW
-# define O_NOFOLLOW 0
-# endif
-# ifndef O_BINARY
-# define O_BINARY 0
-# endif
-#endif
-
-
-#if OS_WIN
-# include <winbase.h>
-#endif
-
-#if OS_MAC
-# include <extras.h>
-# include <path2fss.h>
-# include <TextUtils.h>
-# include <FinderRegistry.h>
-# include <Folders.h>
-# include <Timer.h>
-# include <OSUtils.h>
-#endif
-
-/*
-** The DJGPP compiler environment looks mostly like Unix, but it
-** lacks the fcntl() system call. So redefine fcntl() to be something
-** that always succeeds. This means that locking does not occur under
-** DJGPP. But its DOS - what did you expect?
-*/
-#ifdef __DJGPP__
-# define fcntl(A,B,C) 0
-#endif
-
-/*
-** Macros used to determine whether or not to use threads. The
-** SQLITE_UNIX_THREADS macro is defined if we are synchronizing for
-** Posix threads and SQLITE_W32_THREADS is defined if we are
-** synchronizing using Win32 threads.
-*/
-#if OS_UNIX && defined(THREADSAFE) && THREADSAFE
-# include <pthread.h>
-# define SQLITE_UNIX_THREADS 1
-#endif
-#if OS_WIN && defined(THREADSAFE) && THREADSAFE
-# define SQLITE_W32_THREADS 1
-#endif
-#if OS_MAC && defined(THREADSAFE) && THREADSAFE
-# include <Multiprocessing.h>
-# define SQLITE_MACOS_MULTITASKING 1
-#endif
-
-/*
-** Macros for performance tracing. Normally turned off
-*/
-#if 0
-static int last_page = 0;
-__inline__ unsigned long long int hwtime(void){
- unsigned long long int x;
- __asm__("rdtsc\n\t"
- "mov %%edx, %%ecx\n\t"
- :"=A" (x));
- return x;
-}
-static unsigned long long int g_start;
-static unsigned int elapse;
-#define TIMER_START g_start=hwtime()
-#define TIMER_END elapse=hwtime()-g_start
-#define SEEK(X) last_page=(X)
-#define TRACE1(X) fprintf(stderr,X)
-#define TRACE2(X,Y) fprintf(stderr,X,Y)
-#define TRACE3(X,Y,Z) fprintf(stderr,X,Y,Z)
-#define TRACE4(X,Y,Z,A) fprintf(stderr,X,Y,Z,A)
-#define TRACE5(X,Y,Z,A,B) fprintf(stderr,X,Y,Z,A,B)
-#else
-#define TIMER_START
-#define TIMER_END
-#define SEEK(X)
-#define TRACE1(X)
-#define TRACE2(X,Y)
-#define TRACE3(X,Y,Z)
-#define TRACE4(X,Y,Z,A)
-#define TRACE5(X,Y,Z,A,B)
-#endif
-
-
-#if OS_UNIX
-/*
-** Here is the dirt on POSIX advisory locks: ANSI STD 1003.1 (1996)
-** section 6.5.2.2 lines 483 through 490 specify that when a process
-** sets or clears a lock, that operation overrides any prior locks set
-** by the same process. It does not explicitly say so, but this implies
-** that it overrides locks set by the same process using a different
-** file descriptor. Consider this test case:
-**
-** int fd1 = open("./file1", O_RDWR|O_CREAT, 0644);
-** int fd2 = open("./file2", O_RDWR|O_CREAT, 0644);
-**
-** Suppose ./file1 and ./file2 are really the same file (because
-** one is a hard or symbolic link to the other) then if you set
-** an exclusive lock on fd1, then try to get an exclusive lock
-** on fd2, it works. I would have expected the second lock to
-** fail since there was already a lock on the file due to fd1.
-** But not so. Since both locks came from the same process, the
-** second overrides the first, even though they were on different
-** file descriptors opened on different file names.
-**
-** Bummer. If you ask me, this is broken. Badly broken. It means
-** that we cannot use POSIX locks to synchronize file access among
-** competing threads of the same process. POSIX locks will work fine
-** to synchronize access for threads in separate processes, but not
-** threads within the same process.
-**
-** To work around the problem, SQLite has to manage file locks internally
-** on its own. Whenever a new database is opened, we have to find the
-** specific inode of the database file (the inode is determined by the
-** st_dev and st_ino fields of the stat structure that fstat() fills in)
-** and check for locks already existing on that inode. When locks are
-** created or removed, we have to look at our own internal record of the
-** locks to see if another thread has previously set a lock on that same
-** inode.
-**
-** The OsFile structure for POSIX is no longer just an integer file
-** descriptor. It is now a structure that holds the integer file
-** descriptor and a pointer to a structure that describes the internal
-** locks on the corresponding inode. There is one locking structure
-** per inode, so if the same inode is opened twice, both OsFile structures
-** point to the same locking structure. The locking structure keeps
-** a reference count (so we will know when to delete it) and a "cnt"
-** field that tells us its internal lock status. cnt==0 means the
-** file is unlocked. cnt==-1 means the file has an exclusive lock.
-** cnt>0 means there are cnt shared locks on the file.
-**
-** Any attempt to lock or unlock a file first checks the locking
-** structure. The fcntl() system call is only invoked to set a
-** POSIX lock if the internal lock structure transitions between
-** a locked and an unlocked state.
-**
-** 2004-Jan-11:
-** More recent discoveries about POSIX advisory locks. (The more
-** I discover, the more I realize the a POSIX advisory locks are
-** an abomination.)
-**
-** If you close a file descriptor that points to a file that has locks,
-** all locks on that file that are owned by the current process are
-** released. To work around this problem, each OsFile structure contains
-** a pointer to an openCnt structure. There is one openCnt structure
-** per open inode, which means that multiple OsFiles can point to a single
-** openCnt. When an attempt is made to close an OsFile, if there are
-** other OsFiles open on the same inode that are holding locks, the call
-** to close() the file descriptor is deferred until all of the locks clear.
-** The openCnt structure keeps a list of file descriptors that need to
-** be closed and that list is walked (and cleared) when the last lock
-** clears.
-**
-** First, under Linux threads, because each thread has a separate
-** process ID, lock operations in one thread do not override locks
-** to the same file in other threads. Linux threads behave like
-** separate processes in this respect. But, if you close a file
-** descriptor in linux threads, all locks are cleared, even locks
-** on other threads and even though the other threads have different
-** process IDs. Linux threads is inconsistent in this respect.
-** (I'm beginning to think that linux threads is an abomination too.)
-** The consequence of this all is that the hash table for the lockInfo
-** structure has to include the process id as part of its key because
-** locks in different threads are treated as distinct. But the
-** openCnt structure should not include the process id in its
-** key because close() clears lock on all threads, not just the current
-** thread. Were it not for this goofiness in linux threads, we could
-** combine the lockInfo and openCnt structures into a single structure.
-*/
-
-/*
-** An instance of the following structure serves as the key used
-** to locate a particular lockInfo structure given its inode. Note
-** that we have to include the process ID as part of the key. On some
-** threading implementations (ex: linux), each thread has a separate
-** process ID.
-*/
-struct lockKey {
- dev_t dev; /* Device number */
- ino_t ino; /* Inode number */
- pid_t pid; /* Process ID */
-};
-
-/*
-** An instance of the following structure is allocated for each open
-** inode on each thread with a different process ID. (Threads have
-** different process IDs on linux, but not on most other unixes.)
-**
-** A single inode can have multiple file descriptors, so each OsFile
-** structure contains a pointer to an instance of this object and this
-** object keeps a count of the number of OsFiles pointing to it.
-*/
-struct lockInfo {
- struct lockKey key; /* The lookup key */
- int cnt; /* 0: unlocked. -1: write lock. 1...: read lock. */
- int nRef; /* Number of pointers to this structure */
-};
-
-/*
-** An instance of the following structure serves as the key used
-** to locate a particular openCnt structure given its inode. This
-** is the same as the lockKey except that the process ID is omitted.
-*/
-struct openKey {
- dev_t dev; /* Device number */
- ino_t ino; /* Inode number */
-};
-
-/*
-** An instance of the following structure is allocated for each open
-** inode. This structure keeps track of the number of locks on that
-** inode. If a close is attempted against an inode that is holding
-** locks, the close is deferred until all locks clear by adding the
-** file descriptor to be closed to the pending list.
-*/
-struct openCnt {
- struct openKey key; /* The lookup key */
- int nRef; /* Number of pointers to this structure */
- int nLock; /* Number of outstanding locks */
- int nPending; /* Number of pending close() operations */
- int *aPending; /* Malloced space holding fd's awaiting a close() */
-};
-
-/*
-** These hash table maps inodes and process IDs into lockInfo and openCnt
-** structures. Access to these hash tables must be protected by a mutex.
-*/
-static Hash lockHash = { SQLITE_HASH_BINARY, 0, 0, 0, 0, 0 };
-static Hash openHash = { SQLITE_HASH_BINARY, 0, 0, 0, 0, 0 };
-
-/*
-** Release a lockInfo structure previously allocated by findLockInfo().
-*/
-static void releaseLockInfo(struct lockInfo *pLock){
- pLock->nRef--;
- if( pLock->nRef==0 ){
- sqliteHashInsert(&lockHash, &pLock->key, sizeof(pLock->key), 0);
- sqliteFree(pLock);
- }
-}
-
-/*
-** Release a openCnt structure previously allocated by findLockInfo().
-*/
-static void releaseOpenCnt(struct openCnt *pOpen){
- pOpen->nRef--;
- if( pOpen->nRef==0 ){
- sqliteHashInsert(&openHash, &pOpen->key, sizeof(pOpen->key), 0);
- sqliteFree(pOpen->aPending);
- sqliteFree(pOpen);
- }
-}
-
-/*
-** Given a file descriptor, locate lockInfo and openCnt structures that
-** describes that file descriptor. Create a new ones if necessary. The
-** return values might be unset if an error occurs.
-**
-** Return the number of errors.
-*/
-int findLockInfo(
- int fd, /* The file descriptor used in the key */
- struct lockInfo **ppLock, /* Return the lockInfo structure here */
- struct openCnt **ppOpen /* Return the openCnt structure here */
-){
- int rc;
- struct lockKey key1;
- struct openKey key2;
- struct stat statbuf;
- struct lockInfo *pLock;
- struct openCnt *pOpen;
- rc = fstat(fd, &statbuf);
- if( rc!=0 ) return 1;
- memset(&key1, 0, sizeof(key1));
- key1.dev = statbuf.st_dev;
- key1.ino = statbuf.st_ino;
- key1.pid = getpid();
- memset(&key2, 0, sizeof(key2));
- key2.dev = statbuf.st_dev;
- key2.ino = statbuf.st_ino;
- pLock = (struct lockInfo*)sqliteHashFind(&lockHash, &key1, sizeof(key1));
- if( pLock==0 ){
- struct lockInfo *pOld;
- pLock = sqliteMallocRaw( sizeof(*pLock) );
- if( pLock==0 ) return 1;
- pLock->key = key1;
- pLock->nRef = 1;
- pLock->cnt = 0;
- pOld = sqliteHashInsert(&lockHash, &pLock->key, sizeof(key1), pLock);
- if( pOld!=0 ){
- assert( pOld==pLock );
- sqliteFree(pLock);
- return 1;
- }
- }else{
- pLock->nRef++;
- }
- *ppLock = pLock;
- pOpen = (struct openCnt*)sqliteHashFind(&openHash, &key2, sizeof(key2));
- if( pOpen==0 ){
- struct openCnt *pOld;
- pOpen = sqliteMallocRaw( sizeof(*pOpen) );
- if( pOpen==0 ){
- releaseLockInfo(pLock);
- return 1;
- }
- pOpen->key = key2;
- pOpen->nRef = 1;
- pOpen->nLock = 0;
- pOpen->nPending = 0;
- pOpen->aPending = 0;
- pOld = sqliteHashInsert(&openHash, &pOpen->key, sizeof(key2), pOpen);
- if( pOld!=0 ){
- assert( pOld==pOpen );
- sqliteFree(pOpen);
- releaseLockInfo(pLock);
- return 1;
- }
- }else{
- pOpen->nRef++;
- }
- *ppOpen = pOpen;
- return 0;
-}
-
-#endif /** POSIX advisory lock work-around **/
-
-/*
-** If we compile with the SQLITE_TEST macro set, then the following block
-** of code will give us the ability to simulate a disk I/O error. This
-** is used for testing the I/O recovery logic.
-*/
-#ifdef SQLITE_TEST
-int sqlite_io_error_pending = 0;
-#define SimulateIOError(A) \
- if( sqlite_io_error_pending ) \
- if( sqlite_io_error_pending-- == 1 ){ local_ioerr(); return A; }
-static void local_ioerr(){
- sqlite_io_error_pending = 0; /* Really just a place to set a breakpoint */
-}
-#else
-#define SimulateIOError(A)
-#endif
-
-/*
-** When testing, keep a count of the number of open files.
-*/
-#ifdef SQLITE_TEST
-int sqlite_open_file_count = 0;
-#define OpenCounter(X) sqlite_open_file_count+=(X)
-#else
-#define OpenCounter(X)
-#endif
-
-
-/*
-** Delete the named file
-*/
-int sqliteOsDelete(const char *zFilename){
-#if OS_UNIX
- unlink(zFilename);
-#endif
-#if OS_WIN
- DeleteFile(zFilename);
-#endif
-#if OS_MAC
- unlink(zFilename);
-#endif
- return SQLITE_OK;
-}
-
-/*
-** Return TRUE if the named file exists.
-*/
-int sqliteOsFileExists(const char *zFilename){
-#if OS_UNIX
- return access(zFilename, 0)==0;
-#endif
-#if OS_WIN
- return GetFileAttributes(zFilename) != 0xffffffff;
-#endif
-#if OS_MAC
- return access(zFilename, 0)==0;
-#endif
-}
-
-
-#if 0 /* NOT USED */
-/*
-** Change the name of an existing file.
-*/
-int sqliteOsFileRename(const char *zOldName, const char *zNewName){
-#if OS_UNIX
- if( link(zOldName, zNewName) ){
- return SQLITE_ERROR;
- }
- unlink(zOldName);
- return SQLITE_OK;
-#endif
-#if OS_WIN
- if( !MoveFile(zOldName, zNewName) ){
- return SQLITE_ERROR;
- }
- return SQLITE_OK;
-#endif
-#if OS_MAC
- /**** FIX ME ***/
- return SQLITE_ERROR;
-#endif
-}
-#endif /* NOT USED */
-
-/*
-** Attempt to open a file for both reading and writing. If that
-** fails, try opening it read-only. If the file does not exist,
-** try to create it.
-**
-** On success, a handle for the open file is written to *id
-** and *pReadonly is set to 0 if the file was opened for reading and
-** writing or 1 if the file was opened read-only. The function returns
-** SQLITE_OK.
-**
-** On failure, the function returns SQLITE_CANTOPEN and leaves
-** *id and *pReadonly unchanged.
-*/
-int sqliteOsOpenReadWrite(
- const char *zFilename,
- OsFile *id,
- int *pReadonly
-){
-#if OS_UNIX
- int rc;
- id->dirfd = -1;
- id->fd = open(zFilename, O_RDWR|O_CREAT|O_LARGEFILE|O_BINARY, 0644);
- if( id->fd<0 ){
-#ifdef EISDIR
- if( errno==EISDIR ){
- return SQLITE_CANTOPEN;
- }
-#endif
- id->fd = open(zFilename, O_RDONLY|O_LARGEFILE|O_BINARY);
- if( id->fd<0 ){
- return SQLITE_CANTOPEN;
- }
- *pReadonly = 1;
- }else{
- *pReadonly = 0;
- }
- sqliteOsEnterMutex();
- rc = findLockInfo(id->fd, &id->pLock, &id->pOpen);
- sqliteOsLeaveMutex();
- if( rc ){
- close(id->fd);
- return SQLITE_NOMEM;
- }
- id->locked = 0;
- TRACE3("OPEN %-3d %s\n", id->fd, zFilename);
- OpenCounter(+1);
- return SQLITE_OK;
-#endif
-#if OS_WIN
- HANDLE h = CreateFile(zFilename,
- GENERIC_READ | GENERIC_WRITE,
- FILE_SHARE_READ | FILE_SHARE_WRITE,
- NULL,
- OPEN_ALWAYS,
- FILE_ATTRIBUTE_NORMAL | FILE_FLAG_RANDOM_ACCESS,
- NULL
- );
- if( h==INVALID_HANDLE_VALUE ){
- h = CreateFile(zFilename,
- GENERIC_READ,
- FILE_SHARE_READ,
- NULL,
- OPEN_ALWAYS,
- FILE_ATTRIBUTE_NORMAL | FILE_FLAG_RANDOM_ACCESS,
- NULL
- );
- if( h==INVALID_HANDLE_VALUE ){
- return SQLITE_CANTOPEN;
- }
- *pReadonly = 1;
- }else{
- *pReadonly = 0;
- }
- id->h = h;
- id->locked = 0;
- OpenCounter(+1);
- return SQLITE_OK;
-#endif
-#if OS_MAC
- FSSpec fsSpec;
-# ifdef _LARGE_FILE
- HFSUniStr255 dfName;
- FSRef fsRef;
- if( __path2fss(zFilename, &fsSpec) != noErr ){
- if( HCreate(fsSpec.vRefNum, fsSpec.parID, fsSpec.name, 'SQLI', cDocumentFile) != noErr )
- return SQLITE_CANTOPEN;
- }
- if( FSpMakeFSRef(&fsSpec, &fsRef) != noErr )
- return SQLITE_CANTOPEN;
- FSGetDataForkName(&dfName);
- if( FSOpenFork(&fsRef, dfName.length, dfName.unicode,
- fsRdWrShPerm, &(id->refNum)) != noErr ){
- if( FSOpenFork(&fsRef, dfName.length, dfName.unicode,
- fsRdWrPerm, &(id->refNum)) != noErr ){
- if (FSOpenFork(&fsRef, dfName.length, dfName.unicode,
- fsRdPerm, &(id->refNum)) != noErr )
- return SQLITE_CANTOPEN;
- else
- *pReadonly = 1;
- } else
- *pReadonly = 0;
- } else
- *pReadonly = 0;
-# else
- __path2fss(zFilename, &fsSpec);
- if( !sqliteOsFileExists(zFilename) ){
- if( HCreate(fsSpec.vRefNum, fsSpec.parID, fsSpec.name, 'SQLI', cDocumentFile) != noErr )
- return SQLITE_CANTOPEN;
- }
- if( HOpenDF(fsSpec.vRefNum, fsSpec.parID, fsSpec.name, fsRdWrShPerm, &(id->refNum)) != noErr ){
- if( HOpenDF(fsSpec.vRefNum, fsSpec.parID, fsSpec.name, fsRdWrPerm, &(id->refNum)) != noErr ){
- if( HOpenDF(fsSpec.vRefNum, fsSpec.parID, fsSpec.name, fsRdPerm, &(id->refNum)) != noErr )
- return SQLITE_CANTOPEN;
- else
- *pReadonly = 1;
- } else
- *pReadonly = 0;
- } else
- *pReadonly = 0;
-# endif
- if( HOpenRF(fsSpec.vRefNum, fsSpec.parID, fsSpec.name, fsRdWrShPerm, &(id->refNumRF)) != noErr){
- id->refNumRF = -1;
- }
- id->locked = 0;
- id->delOnClose = 0;
- OpenCounter(+1);
- return SQLITE_OK;
-#endif
-}
-
-
-/*
-** Attempt to open a new file for exclusive access by this process.
-** The file will be opened for both reading and writing. To avoid
-** a potential security problem, we do not allow the file to have
-** previously existed. Nor do we allow the file to be a symbolic
-** link.
-**
-** If delFlag is true, then make arrangements to automatically delete
-** the file when it is closed.
-**
-** On success, write the file handle into *id and return SQLITE_OK.
-**
-** On failure, return SQLITE_CANTOPEN.
-*/
-int sqliteOsOpenExclusive(const char *zFilename, OsFile *id, int delFlag){
-#if OS_UNIX
- int rc;
- if( access(zFilename, 0)==0 ){
- return SQLITE_CANTOPEN;
- }
- id->dirfd = -1;
- id->fd = open(zFilename,
- O_RDWR|O_CREAT|O_EXCL|O_NOFOLLOW|O_LARGEFILE|O_BINARY, 0600);
- if( id->fd<0 ){
- return SQLITE_CANTOPEN;
- }
- sqliteOsEnterMutex();
- rc = findLockInfo(id->fd, &id->pLock, &id->pOpen);
- sqliteOsLeaveMutex();
- if( rc ){
- close(id->fd);
- unlink(zFilename);
- return SQLITE_NOMEM;
- }
- id->locked = 0;
- if( delFlag ){
- unlink(zFilename);
- }
- TRACE3("OPEN-EX %-3d %s\n", id->fd, zFilename);
- OpenCounter(+1);
- return SQLITE_OK;
-#endif
-#if OS_WIN
- HANDLE h;
- int fileflags;
- if( delFlag ){
- fileflags = FILE_ATTRIBUTE_TEMPORARY | FILE_FLAG_RANDOM_ACCESS
- | FILE_FLAG_DELETE_ON_CLOSE;
- }else{
- fileflags = FILE_FLAG_RANDOM_ACCESS;
- }
- h = CreateFile(zFilename,
- GENERIC_READ | GENERIC_WRITE,
- 0,
- NULL,
- CREATE_ALWAYS,
- fileflags,
- NULL
- );
- if( h==INVALID_HANDLE_VALUE ){
- return SQLITE_CANTOPEN;
- }
- id->h = h;
- id->locked = 0;
- OpenCounter(+1);
- return SQLITE_OK;
-#endif
-#if OS_MAC
- FSSpec fsSpec;
-# ifdef _LARGE_FILE
- HFSUniStr255 dfName;
- FSRef fsRef;
- __path2fss(zFilename, &fsSpec);
- if( HCreate(fsSpec.vRefNum, fsSpec.parID, fsSpec.name, 'SQLI', cDocumentFile) != noErr )
- return SQLITE_CANTOPEN;
- if( FSpMakeFSRef(&fsSpec, &fsRef) != noErr )
- return SQLITE_CANTOPEN;
- FSGetDataForkName(&dfName);
- if( FSOpenFork(&fsRef, dfName.length, dfName.unicode,
- fsRdWrPerm, &(id->refNum)) != noErr )
- return SQLITE_CANTOPEN;
-# else
- __path2fss(zFilename, &fsSpec);
- if( HCreate(fsSpec.vRefNum, fsSpec.parID, fsSpec.name, 'SQLI', cDocumentFile) != noErr )
- return SQLITE_CANTOPEN;
- if( HOpenDF(fsSpec.vRefNum, fsSpec.parID, fsSpec.name, fsRdWrPerm, &(id->refNum)) != noErr )
- return SQLITE_CANTOPEN;
-# endif
- id->refNumRF = -1;
- id->locked = 0;
- id->delOnClose = delFlag;
- if (delFlag)
- id->pathToDel = sqliteOsFullPathname(zFilename);
- OpenCounter(+1);
- return SQLITE_OK;
-#endif
-}
-
-/*
-** Attempt to open a new file for read-only access.
-**
-** On success, write the file handle into *id and return SQLITE_OK.
-**
-** On failure, return SQLITE_CANTOPEN.
-*/
-int sqliteOsOpenReadOnly(const char *zFilename, OsFile *id){
-#if OS_UNIX
- int rc;
- id->dirfd = -1;
- id->fd = open(zFilename, O_RDONLY|O_LARGEFILE|O_BINARY);
- if( id->fd<0 ){
- return SQLITE_CANTOPEN;
- }
- sqliteOsEnterMutex();
- rc = findLockInfo(id->fd, &id->pLock, &id->pOpen);
- sqliteOsLeaveMutex();
- if( rc ){
- close(id->fd);
- return SQLITE_NOMEM;
- }
- id->locked = 0;
- TRACE3("OPEN-RO %-3d %s\n", id->fd, zFilename);
- OpenCounter(+1);
- return SQLITE_OK;
-#endif
-#if OS_WIN
- HANDLE h = CreateFile(zFilename,
- GENERIC_READ,
- 0,
- NULL,
- OPEN_EXISTING,
- FILE_ATTRIBUTE_NORMAL | FILE_FLAG_RANDOM_ACCESS,
- NULL
- );
- if( h==INVALID_HANDLE_VALUE ){
- return SQLITE_CANTOPEN;
- }
- id->h = h;
- id->locked = 0;
- OpenCounter(+1);
- return SQLITE_OK;
-#endif
-#if OS_MAC
- FSSpec fsSpec;
-# ifdef _LARGE_FILE
- HFSUniStr255 dfName;
- FSRef fsRef;
- if( __path2fss(zFilename, &fsSpec) != noErr )
- return SQLITE_CANTOPEN;
- if( FSpMakeFSRef(&fsSpec, &fsRef) != noErr )
- return SQLITE_CANTOPEN;
- FSGetDataForkName(&dfName);
- if( FSOpenFork(&fsRef, dfName.length, dfName.unicode,
- fsRdPerm, &(id->refNum)) != noErr )
- return SQLITE_CANTOPEN;
-# else
- __path2fss(zFilename, &fsSpec);
- if( HOpenDF(fsSpec.vRefNum, fsSpec.parID, fsSpec.name, fsRdPerm, &(id->refNum)) != noErr )
- return SQLITE_CANTOPEN;
-# endif
- if( HOpenRF(fsSpec.vRefNum, fsSpec.parID, fsSpec.name, fsRdWrShPerm, &(id->refNumRF)) != noErr){
- id->refNumRF = -1;
- }
- id->locked = 0;
- id->delOnClose = 0;
- OpenCounter(+1);
- return SQLITE_OK;
-#endif
-}
-
-/*
-** Attempt to open a file descriptor for the directory that contains a
-** file. This file descriptor can be used to fsync() the directory
-** in order to make sure the creation of a new file is actually written
-** to disk.
-**
-** This routine is only meaningful for Unix. It is a no-op under
-** windows since windows does not support hard links.
-**
-** On success, a handle for a previously open file is at *id is
-** updated with the new directory file descriptor and SQLITE_OK is
-** returned.
-**
-** On failure, the function returns SQLITE_CANTOPEN and leaves
-** *id unchanged.
-*/
-int sqliteOsOpenDirectory(
- const char *zDirname,
- OsFile *id
-){
-#if OS_UNIX
- if( id->fd<0 ){
- /* Do not open the directory if the corresponding file is not already
- ** open. */
- return SQLITE_CANTOPEN;
- }
- assert( id->dirfd<0 );
- id->dirfd = open(zDirname, O_RDONLY|O_BINARY, 0644);
- if( id->dirfd<0 ){
- return SQLITE_CANTOPEN;
- }
- TRACE3("OPENDIR %-3d %s\n", id->dirfd, zDirname);
-#endif
- return SQLITE_OK;
-}
-
-/*
-** If the following global variable points to a string which is the
-** name of a directory, then that directory will be used to store
-** temporary files.
-*/
-const char *sqlite_temp_directory = 0;
-
-/*
-** Create a temporary file name in zBuf. zBuf must be big enough to
-** hold at least SQLITE_TEMPNAME_SIZE characters.
-*/
-int sqliteOsTempFileName(char *zBuf){
-#if OS_UNIX
- static const char *azDirs[] = {
- 0,
- "/var/tmp",
- "/usr/tmp",
- "/tmp",
- ".",
- };
- static unsigned char zChars[] =
- "abcdefghijklmnopqrstuvwxyz"
- "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
- "0123456789";
- int i, j;
- struct stat buf;
- const char *zDir = ".";
- azDirs[0] = sqlite_temp_directory;
- for(i=0; i<sizeof(azDirs)/sizeof(azDirs[0]); i++){
- if( azDirs[i]==0 ) continue;
- if( stat(azDirs[i], &buf) ) continue;
- if( !S_ISDIR(buf.st_mode) ) continue;
- if( access(azDirs[i], 07) ) continue;
- zDir = azDirs[i];
- break;
- }
- do{
- sprintf(zBuf, "%s/"TEMP_FILE_PREFIX, zDir);
- j = strlen(zBuf);
- sqliteRandomness(15, &zBuf[j]);
- for(i=0; i<15; i++, j++){
- zBuf[j] = (char)zChars[ ((unsigned char)zBuf[j])%(sizeof(zChars)-1) ];
- }
- zBuf[j] = 0;
- }while( access(zBuf,0)==0 );
-#endif
-#if OS_WIN
- static char zChars[] =
- "abcdefghijklmnopqrstuvwxyz"
- "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
- "0123456789";
- int i, j;
- char *zDir;
- char zTempPath[SQLITE_TEMPNAME_SIZE];
- if( sqlite_temp_directory==0 ){
- GetTempPath(SQLITE_TEMPNAME_SIZE-30, zTempPath);
- for(i=strlen(zTempPath); i>0 && zTempPath[i-1]=='\\'; i--){}
- zTempPath[i] = 0;
- zDir = zTempPath;
- }else{
- zDir = sqlite_temp_directory;
- }
- for(;;){
- sprintf(zBuf, "%s\\"TEMP_FILE_PREFIX, zDir);
- j = strlen(zBuf);
- sqliteRandomness(15, &zBuf[j]);
- for(i=0; i<15; i++, j++){
- zBuf[j] = (char)zChars[ ((unsigned char)zBuf[j])%(sizeof(zChars)-1) ];
- }
- zBuf[j] = 0;
- if( !sqliteOsFileExists(zBuf) ) break;
- }
-#endif
-#if OS_MAC
- static char zChars[] =
- "abcdefghijklmnopqrstuvwxyz"
- "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
- "0123456789";
- int i, j;
- char *zDir;
- char zTempPath[SQLITE_TEMPNAME_SIZE];
- char zdirName[32];
- CInfoPBRec infoRec;
- Str31 dirName;
- memset(&infoRec, 0, sizeof(infoRec));
- memset(zTempPath, 0, SQLITE_TEMPNAME_SIZE);
- if( sqlite_temp_directory!=0 ){
- zDir = sqlite_temp_directory;
- }else if( FindFolder(kOnSystemDisk, kTemporaryFolderType, kCreateFolder,
- &(infoRec.dirInfo.ioVRefNum), &(infoRec.dirInfo.ioDrParID)) == noErr ){
- infoRec.dirInfo.ioNamePtr = dirName;
- do{
- infoRec.dirInfo.ioFDirIndex = -1;
- infoRec.dirInfo.ioDrDirID = infoRec.dirInfo.ioDrParID;
- if( PBGetCatInfoSync(&infoRec) == noErr ){
- CopyPascalStringToC(dirName, zdirName);
- i = strlen(zdirName);
- memmove(&(zTempPath[i+1]), zTempPath, strlen(zTempPath));
- strcpy(zTempPath, zdirName);
- zTempPath[i] = ':';
- }else{
- *zTempPath = 0;
- break;
- }
- } while( infoRec.dirInfo.ioDrDirID != fsRtDirID );
- zDir = zTempPath;
- }
- if( zDir[0]==0 ){
- getcwd(zTempPath, SQLITE_TEMPNAME_SIZE-24);
- zDir = zTempPath;
- }
- for(;;){
- sprintf(zBuf, "%s"TEMP_FILE_PREFIX, zDir);
- j = strlen(zBuf);
- sqliteRandomness(15, &zBuf[j]);
- for(i=0; i<15; i++, j++){
- zBuf[j] = (char)zChars[ ((unsigned char)zBuf[j])%(sizeof(zChars)-1) ];
- }
- zBuf[j] = 0;
- if( !sqliteOsFileExists(zBuf) ) break;
- }
-#endif
- return SQLITE_OK;
-}
-
-/*
-** Close a file.
-*/
-int sqliteOsClose(OsFile *id){
-#if OS_UNIX
- sqliteOsUnlock(id);
- if( id->dirfd>=0 ) close(id->dirfd);
- id->dirfd = -1;
- sqliteOsEnterMutex();
- if( id->pOpen->nLock ){
- /* If there are outstanding locks, do not actually close the file just
- ** yet because that would clear those locks. Instead, add the file
- ** descriptor to pOpen->aPending. It will be automatically closed when
- ** the last lock is cleared.
- */
- int *aNew;
- struct openCnt *pOpen = id->pOpen;
- pOpen->nPending++;
- aNew = sqliteRealloc( pOpen->aPending, pOpen->nPending*sizeof(int) );
- if( aNew==0 ){
- /* If a malloc fails, just leak the file descriptor */
- }else{
- pOpen->aPending = aNew;
- pOpen->aPending[pOpen->nPending-1] = id->fd;
- }
- }else{
- /* There are no outstanding locks so we can close the file immediately */
- close(id->fd);
- }
- releaseLockInfo(id->pLock);
- releaseOpenCnt(id->pOpen);
- sqliteOsLeaveMutex();
- TRACE2("CLOSE %-3d\n", id->fd);
- OpenCounter(-1);
- return SQLITE_OK;
-#endif
-#if OS_WIN
- CloseHandle(id->h);
- OpenCounter(-1);
- return SQLITE_OK;
-#endif
-#if OS_MAC
- if( id->refNumRF!=-1 )
- FSClose(id->refNumRF);
-# ifdef _LARGE_FILE
- FSCloseFork(id->refNum);
-# else
- FSClose(id->refNum);
-# endif
- if( id->delOnClose ){
- unlink(id->pathToDel);
- sqliteFree(id->pathToDel);
- }
- OpenCounter(-1);
- return SQLITE_OK;
-#endif
-}
-
-/*
-** Read data from a file into a buffer. Return SQLITE_OK if all
-** bytes were read successfully and SQLITE_IOERR if anything goes
-** wrong.
-*/
-int sqliteOsRead(OsFile *id, void *pBuf, int amt){
-#if OS_UNIX
- int got;
- SimulateIOError(SQLITE_IOERR);
- TIMER_START;
- got = read(id->fd, pBuf, amt);
- TIMER_END;
- TRACE4("READ %-3d %7d %d\n", id->fd, last_page, elapse);
- SEEK(0);
- /* if( got<0 ) got = 0; */
- if( got==amt ){
- return SQLITE_OK;
- }else{
- return SQLITE_IOERR;
- }
-#endif
-#if OS_WIN
- DWORD got;
- SimulateIOError(SQLITE_IOERR);
- TRACE2("READ %d\n", last_page);
- if( !ReadFile(id->h, pBuf, amt, &got, 0) ){
- got = 0;
- }
- if( got==(DWORD)amt ){
- return SQLITE_OK;
- }else{
- return SQLITE_IOERR;
- }
-#endif
-#if OS_MAC
- int got;
- SimulateIOError(SQLITE_IOERR);
- TRACE2("READ %d\n", last_page);
-# ifdef _LARGE_FILE
- FSReadFork(id->refNum, fsAtMark, 0, (ByteCount)amt, pBuf, (ByteCount*)&got);
-# else
- got = amt;
- FSRead(id->refNum, &got, pBuf);
-# endif
- if( got==amt ){
- return SQLITE_OK;
- }else{
- return SQLITE_IOERR;
- }
-#endif
-}
-
-/*
-** Write data from a buffer into a file. Return SQLITE_OK on success
-** or some other error code on failure.
-*/
-int sqliteOsWrite(OsFile *id, const void *pBuf, int amt){
-#if OS_UNIX
- int wrote = 0;
- SimulateIOError(SQLITE_IOERR);
- TIMER_START;
- while( amt>0 && (wrote = write(id->fd, pBuf, amt))>0 ){
- amt -= wrote;
- pBuf = &((char*)pBuf)[wrote];
- }
- TIMER_END;
- TRACE4("WRITE %-3d %7d %d\n", id->fd, last_page, elapse);
- SEEK(0);
- if( amt>0 ){
- return SQLITE_FULL;
- }
- return SQLITE_OK;
-#endif
-#if OS_WIN
- int rc;
- DWORD wrote;
- SimulateIOError(SQLITE_IOERR);
- TRACE2("WRITE %d\n", last_page);
- while( amt>0 && (rc = WriteFile(id->h, pBuf, amt, &wrote, 0))!=0 && wrote>0 ){
- amt -= wrote;
- pBuf = &((char*)pBuf)[wrote];
- }
- if( !rc || amt>(int)wrote ){
- return SQLITE_FULL;
- }
- return SQLITE_OK;
-#endif
-#if OS_MAC
- OSErr oserr;
- int wrote = 0;
- SimulateIOError(SQLITE_IOERR);
- TRACE2("WRITE %d\n", last_page);
- while( amt>0 ){
-# ifdef _LARGE_FILE
- oserr = FSWriteFork(id->refNum, fsAtMark, 0,
- (ByteCount)amt, pBuf, (ByteCount*)&wrote);
-# else
- wrote = amt;
- oserr = FSWrite(id->refNum, &wrote, pBuf);
-# endif
- if( wrote == 0 || oserr != noErr)
- break;
- amt -= wrote;
- pBuf = &((char*)pBuf)[wrote];
- }
- if( oserr != noErr || amt>wrote ){
- return SQLITE_FULL;
- }
- return SQLITE_OK;
-#endif
-}
-
-/*
-** Move the read/write pointer in a file.
-*/
-int sqliteOsSeek(OsFile *id, off_t offset){
- SEEK(offset/1024 + 1);
-#if OS_UNIX
- lseek(id->fd, offset, SEEK_SET);
- return SQLITE_OK;
-#endif
-#if OS_WIN
- {
- LONG upperBits = offset>>32;
- LONG lowerBits = offset & 0xffffffff;
- DWORD rc;
- rc = SetFilePointer(id->h, lowerBits, &upperBits, FILE_BEGIN);
- /* TRACE3("SEEK rc=0x%x upper=0x%x\n", rc, upperBits); */
- }
- return SQLITE_OK;
-#endif
-#if OS_MAC
- {
- off_t curSize;
- if( sqliteOsFileSize(id, &curSize) != SQLITE_OK ){
- return SQLITE_IOERR;
- }
- if( offset >= curSize ){
- if( sqliteOsTruncate(id, offset+1) != SQLITE_OK ){
- return SQLITE_IOERR;
- }
- }
-# ifdef _LARGE_FILE
- if( FSSetForkPosition(id->refNum, fsFromStart, offset) != noErr ){
-# else
- if( SetFPos(id->refNum, fsFromStart, offset) != noErr ){
-# endif
- return SQLITE_IOERR;
- }else{
- return SQLITE_OK;
- }
- }
-#endif
-}
-
-/*
-** Make sure all writes to a particular file are committed to disk.
-**
-** Under Unix, also make sure that the directory entry for the file
-** has been created by fsync-ing the directory that contains the file.
-** If we do not do this and we encounter a power failure, the directory
-** entry for the journal might not exist after we reboot. The next
-** SQLite to access the file will not know that the journal exists (because
-** the directory entry for the journal was never created) and the transaction
-** will not roll back - possibly leading to database corruption.
-*/
-int sqliteOsSync(OsFile *id){
-#if OS_UNIX
- SimulateIOError(SQLITE_IOERR);
- TRACE2("SYNC %-3d\n", id->fd);
- if( fsync(id->fd) ){
- return SQLITE_IOERR;
- }else{
- if( id->dirfd>=0 ){
- TRACE2("DIRSYNC %-3d\n", id->dirfd);
- fsync(id->dirfd);
- close(id->dirfd); /* Only need to sync once, so close the directory */
- id->dirfd = -1; /* when we are done. */
- }
- return SQLITE_OK;
- }
-#endif
-#if OS_WIN
- if( FlushFileBuffers(id->h) ){
- return SQLITE_OK;
- }else{
- return SQLITE_IOERR;
- }
-#endif
-#if OS_MAC
-# ifdef _LARGE_FILE
- if( FSFlushFork(id->refNum) != noErr ){
-# else
- ParamBlockRec params;
- memset(&params, 0, sizeof(ParamBlockRec));
- params.ioParam.ioRefNum = id->refNum;
- if( PBFlushFileSync(&params) != noErr ){
-# endif
- return SQLITE_IOERR;
- }else{
- return SQLITE_OK;
- }
-#endif
-}
-
-/*
-** Truncate an open file to a specified size
-*/
-int sqliteOsTruncate(OsFile *id, off_t nByte){
- SimulateIOError(SQLITE_IOERR);
-#if OS_UNIX
- return ftruncate(id->fd, nByte)==0 ? SQLITE_OK : SQLITE_IOERR;
-#endif
-#if OS_WIN
- {
- LONG upperBits = nByte>>32;
- SetFilePointer(id->h, nByte, &upperBits, FILE_BEGIN);
- SetEndOfFile(id->h);
- }
- return SQLITE_OK;
-#endif
-#if OS_MAC
-# ifdef _LARGE_FILE
- if( FSSetForkSize(id->refNum, fsFromStart, nByte) != noErr){
-# else
- if( SetEOF(id->refNum, nByte) != noErr ){
-# endif
- return SQLITE_IOERR;
- }else{
- return SQLITE_OK;
- }
-#endif
-}
-
-/*
-** Determine the current size of a file in bytes
-*/
-int sqliteOsFileSize(OsFile *id, off_t *pSize){
-#if OS_UNIX
- struct stat buf;
- SimulateIOError(SQLITE_IOERR);
- if( fstat(id->fd, &buf)!=0 ){
- return SQLITE_IOERR;
- }
- *pSize = buf.st_size;
- return SQLITE_OK;
-#endif
-#if OS_WIN
- DWORD upperBits, lowerBits;
- SimulateIOError(SQLITE_IOERR);
- lowerBits = GetFileSize(id->h, &upperBits);
- *pSize = (((off_t)upperBits)<<32) + lowerBits;
- return SQLITE_OK;
-#endif
-#if OS_MAC
-# ifdef _LARGE_FILE
- if( FSGetForkSize(id->refNum, pSize) != noErr){
-# else
- if( GetEOF(id->refNum, pSize) != noErr ){
-# endif
- return SQLITE_IOERR;
- }else{
- return SQLITE_OK;
- }
-#endif
-}
-
-#if OS_WIN
-/*
-** Return true (non-zero) if we are running under WinNT, Win2K or WinXP.
-** Return false (zero) for Win95, Win98, or WinME.
-**
-** Here is an interesting observation: Win95, Win98, and WinME lack
-** the LockFileEx() API. But we can still statically link against that
-** API as long as we don't call it win running Win95/98/ME. A call to
-** this routine is used to determine if the host is Win95/98/ME or
-** WinNT/2K/XP so that we will know whether or not we can safely call
-** the LockFileEx() API.
-*/
-int isNT(void){
- static int osType = 0; /* 0=unknown 1=win95 2=winNT */
- if( osType==0 ){
- OSVERSIONINFO sInfo;
- sInfo.dwOSVersionInfoSize = sizeof(sInfo);
- GetVersionEx(&sInfo);
- osType = sInfo.dwPlatformId==VER_PLATFORM_WIN32_NT ? 2 : 1;
- }
- return osType==2;
-}
-#endif
-
-/*
-** Windows file locking notes: [similar issues apply to MacOS]
-**
-** We cannot use LockFileEx() or UnlockFileEx() on Win95/98/ME because
-** those functions are not available. So we use only LockFile() and
-** UnlockFile().
-**
-** LockFile() prevents not just writing but also reading by other processes.
-** (This is a design error on the part of Windows, but there is nothing
-** we can do about that.) So the region used for locking is at the
-** end of the file where it is unlikely to ever interfere with an
-** actual read attempt.
-**
-** A database read lock is obtained by locking a single randomly-chosen
-** byte out of a specific range of bytes. The lock byte is obtained at
-** random so two separate readers can probably access the file at the
-** same time, unless they are unlucky and choose the same lock byte.
-** A database write lock is obtained by locking all bytes in the range.
-** There can only be one writer.
-**
-** A lock is obtained on the first byte of the lock range before acquiring
-** either a read lock or a write lock. This prevents two processes from
-** attempting to get a lock at a same time. The semantics of
-** sqliteOsReadLock() require that if there is already a write lock, that
-** lock is converted into a read lock atomically. The lock on the first
-** byte allows us to drop the old write lock and get the read lock without
-** another process jumping into the middle and messing us up. The same
-** argument applies to sqliteOsWriteLock().
-**
-** On WinNT/2K/XP systems, LockFileEx() and UnlockFileEx() are available,
-** which means we can use reader/writer locks. When reader writer locks
-** are used, the lock is placed on the same range of bytes that is used
-** for probabilistic locking in Win95/98/ME. Hence, the locking scheme
-** will support two or more Win95 readers or two or more WinNT readers.
-** But a single Win95 reader will lock out all WinNT readers and a single
-** WinNT reader will lock out all other Win95 readers.
-**
-** Note: On MacOS we use the resource fork for locking.
-**
-** The following #defines specify the range of bytes used for locking.
-** N_LOCKBYTE is the number of bytes available for doing the locking.
-** The first byte used to hold the lock while the lock is changing does
-** not count toward this number. FIRST_LOCKBYTE is the address of
-** the first byte in the range of bytes used for locking.
-*/
-#define N_LOCKBYTE 10239
-#if OS_MAC
-# define FIRST_LOCKBYTE (0x000fffff - N_LOCKBYTE)
-#else
-# define FIRST_LOCKBYTE (0xffffffff - N_LOCKBYTE)
-#endif
-
-/*
-** Change the status of the lock on the file "id" to be a readlock.
-** If the file was write locked, then this reduces the lock to a read.
-** If the file was read locked, then this acquires a new read lock.
-**
-** Return SQLITE_OK on success and SQLITE_BUSY on failure. If this
-** library was compiled with large file support (LFS) but LFS is not
-** available on the host, then an SQLITE_NOLFS is returned.
-*/
-int sqliteOsReadLock(OsFile *id){
-#if OS_UNIX
- int rc;
- sqliteOsEnterMutex();
- if( id->pLock->cnt>0 ){
- if( !id->locked ){
- id->pLock->cnt++;
- id->locked = 1;
- id->pOpen->nLock++;
- }
- rc = SQLITE_OK;
- }else if( id->locked || id->pLock->cnt==0 ){
- struct flock lock;
- int s;
- lock.l_type = F_RDLCK;
- lock.l_whence = SEEK_SET;
- lock.l_start = lock.l_len = 0L;
- s = fcntl(id->fd, F_SETLK, &lock);
- if( s!=0 ){
- rc = (errno==EINVAL) ? SQLITE_NOLFS : SQLITE_BUSY;
- }else{
- rc = SQLITE_OK;
- if( !id->locked ){
- id->pOpen->nLock++;
- id->locked = 1;
- }
- id->pLock->cnt = 1;
- }
- }else{
- rc = SQLITE_BUSY;
- }
- sqliteOsLeaveMutex();
- return rc;
-#endif
-#if OS_WIN
- int rc;
- if( id->locked>0 ){
- rc = SQLITE_OK;
- }else{
- int lk;
- int res;
- int cnt = 100;
- sqliteRandomness(sizeof(lk), &lk);
- lk = (lk & 0x7fffffff)%N_LOCKBYTE + 1;
- while( cnt-->0 && (res = LockFile(id->h, FIRST_LOCKBYTE, 0, 1, 0))==0 ){
- Sleep(1);
- }
- if( res ){
- UnlockFile(id->h, FIRST_LOCKBYTE+1, 0, N_LOCKBYTE, 0);
- if( isNT() ){
- OVERLAPPED ovlp;
- ovlp.Offset = FIRST_LOCKBYTE+1;
- ovlp.OffsetHigh = 0;
- ovlp.hEvent = 0;
- res = LockFileEx(id->h, LOCKFILE_FAIL_IMMEDIATELY,
- 0, N_LOCKBYTE, 0, &ovlp);
- }else{
- res = LockFile(id->h, FIRST_LOCKBYTE+lk, 0, 1, 0);
- }
- UnlockFile(id->h, FIRST_LOCKBYTE, 0, 1, 0);
- }
- if( res ){
- id->locked = lk;
- rc = SQLITE_OK;
- }else{
- rc = SQLITE_BUSY;
- }
- }
- return rc;
-#endif
-#if OS_MAC
- int rc;
- if( id->locked>0 || id->refNumRF == -1 ){
- rc = SQLITE_OK;
- }else{
- int lk;
- OSErr res;
- int cnt = 5;
- ParamBlockRec params;
- sqliteRandomness(sizeof(lk), &lk);
- lk = (lk & 0x7fffffff)%N_LOCKBYTE + 1;
- memset(&params, 0, sizeof(params));
- params.ioParam.ioRefNum = id->refNumRF;
- params.ioParam.ioPosMode = fsFromStart;
- params.ioParam.ioPosOffset = FIRST_LOCKBYTE;
- params.ioParam.ioReqCount = 1;
- while( cnt-->0 && (res = PBLockRangeSync(&params))!=noErr ){
- UInt32 finalTicks;
- Delay(1, &finalTicks); /* 1/60 sec */
- }
- if( res == noErr ){
- params.ioParam.ioPosOffset = FIRST_LOCKBYTE+1;
- params.ioParam.ioReqCount = N_LOCKBYTE;
- PBUnlockRangeSync(&params);
- params.ioParam.ioPosOffset = FIRST_LOCKBYTE+lk;
- params.ioParam.ioReqCount = 1;
- res = PBLockRangeSync(&params);
- params.ioParam.ioPosOffset = FIRST_LOCKBYTE;
- params.ioParam.ioReqCount = 1;
- PBUnlockRangeSync(&params);
- }
- if( res == noErr ){
- id->locked = lk;
- rc = SQLITE_OK;
- }else{
- rc = SQLITE_BUSY;
- }
- }
- return rc;
-#endif
-}
-
-/*
-** Change the lock status to be an exclusive or write lock. Return
-** SQLITE_OK on success and SQLITE_BUSY on a failure. If this
-** library was compiled with large file support (LFS) but LFS is not
-** available on the host, then an SQLITE_NOLFS is returned.
-*/
-int sqliteOsWriteLock(OsFile *id){
-#if OS_UNIX
- int rc;
- sqliteOsEnterMutex();
- if( id->pLock->cnt==0 || (id->pLock->cnt==1 && id->locked==1) ){
- struct flock lock;
- int s;
- lock.l_type = F_WRLCK;
- lock.l_whence = SEEK_SET;
- lock.l_start = lock.l_len = 0L;
- s = fcntl(id->fd, F_SETLK, &lock);
- if( s!=0 ){
- rc = (errno==EINVAL) ? SQLITE_NOLFS : SQLITE_BUSY;
- }else{
- rc = SQLITE_OK;
- if( !id->locked ){
- id->pOpen->nLock++;
- id->locked = 1;
- }
- id->pLock->cnt = -1;
- }
- }else{
- rc = SQLITE_BUSY;
- }
- sqliteOsLeaveMutex();
- return rc;
-#endif
-#if OS_WIN
- int rc;
- if( id->locked<0 ){
- rc = SQLITE_OK;
- }else{
- int res;
- int cnt = 100;
- while( cnt-->0 && (res = LockFile(id->h, FIRST_LOCKBYTE, 0, 1, 0))==0 ){
- Sleep(1);
- }
- if( res ){
- if( id->locked>0 ){
- if( isNT() ){
- UnlockFile(id->h, FIRST_LOCKBYTE+1, 0, N_LOCKBYTE, 0);
- }else{
- res = UnlockFile(id->h, FIRST_LOCKBYTE + id->locked, 0, 1, 0);
- }
- }
- if( res ){
- res = LockFile(id->h, FIRST_LOCKBYTE+1, 0, N_LOCKBYTE, 0);
- }else{
- res = 0;
- }
- UnlockFile(id->h, FIRST_LOCKBYTE, 0, 1, 0);
- }
- if( res ){
- id->locked = -1;
- rc = SQLITE_OK;
- }else{
- rc = SQLITE_BUSY;
- }
- }
- return rc;
-#endif
-#if OS_MAC
- int rc;
- if( id->locked<0 || id->refNumRF == -1 ){
- rc = SQLITE_OK;
- }else{
- OSErr res;
- int cnt = 5;
- ParamBlockRec params;
- memset(&params, 0, sizeof(params));
- params.ioParam.ioRefNum = id->refNumRF;
- params.ioParam.ioPosMode = fsFromStart;
- params.ioParam.ioPosOffset = FIRST_LOCKBYTE;
- params.ioParam.ioReqCount = 1;
- while( cnt-->0 && (res = PBLockRangeSync(&params))!=noErr ){
- UInt32 finalTicks;
- Delay(1, &finalTicks); /* 1/60 sec */
- }
- if( res == noErr ){
- params.ioParam.ioPosOffset = FIRST_LOCKBYTE + id->locked;
- params.ioParam.ioReqCount = 1;
- if( id->locked==0
- || PBUnlockRangeSync(&params)==noErr ){
- params.ioParam.ioPosOffset = FIRST_LOCKBYTE+1;
- params.ioParam.ioReqCount = N_LOCKBYTE;
- res = PBLockRangeSync(&params);
- }else{
- res = afpRangeNotLocked;
- }
- params.ioParam.ioPosOffset = FIRST_LOCKBYTE;
- params.ioParam.ioReqCount = 1;
- PBUnlockRangeSync(&params);
- }
- if( res == noErr ){
- id->locked = -1;
- rc = SQLITE_OK;
- }else{
- rc = SQLITE_BUSY;
- }
- }
- return rc;
-#endif
-}
-
-/*
-** Unlock the given file descriptor. If the file descriptor was
-** not previously locked, then this routine is a no-op. If this
-** library was compiled with large file support (LFS) but LFS is not
-** available on the host, then an SQLITE_NOLFS is returned.
-*/
-int sqliteOsUnlock(OsFile *id){
-#if OS_UNIX
- int rc;
- if( !id->locked ) return SQLITE_OK;
- sqliteOsEnterMutex();
- assert( id->pLock->cnt!=0 );
- if( id->pLock->cnt>1 ){
- id->pLock->cnt--;
- rc = SQLITE_OK;
- }else{
- struct flock lock;
- int s;
- lock.l_type = F_UNLCK;
- lock.l_whence = SEEK_SET;
- lock.l_start = lock.l_len = 0L;
- s = fcntl(id->fd, F_SETLK, &lock);
- if( s!=0 ){
- rc = (errno==EINVAL) ? SQLITE_NOLFS : SQLITE_BUSY;
- }else{
- rc = SQLITE_OK;
- id->pLock->cnt = 0;
- }
- }
- if( rc==SQLITE_OK ){
- /* Decrement the count of locks against this same file. When the
- ** count reaches zero, close any other file descriptors whose close
- ** was deferred because of outstanding locks.
- */
- struct openCnt *pOpen = id->pOpen;
- pOpen->nLock--;
- assert( pOpen->nLock>=0 );
- if( pOpen->nLock==0 && pOpen->nPending>0 ){
- int i;
- for(i=0; i<pOpen->nPending; i++){
- close(pOpen->aPending[i]);
- }
- sqliteFree(pOpen->aPending);
- pOpen->nPending = 0;
- pOpen->aPending = 0;
- }
- }
- sqliteOsLeaveMutex();
- id->locked = 0;
- return rc;
-#endif
-#if OS_WIN
- int rc;
- if( id->locked==0 ){
- rc = SQLITE_OK;
- }else if( isNT() || id->locked<0 ){
- UnlockFile(id->h, FIRST_LOCKBYTE+1, 0, N_LOCKBYTE, 0);
- rc = SQLITE_OK;
- id->locked = 0;
- }else{
- UnlockFile(id->h, FIRST_LOCKBYTE+id->locked, 0, 1, 0);
- rc = SQLITE_OK;
- id->locked = 0;
- }
- return rc;
-#endif
-#if OS_MAC
- int rc;
- ParamBlockRec params;
- memset(&params, 0, sizeof(params));
- params.ioParam.ioRefNum = id->refNumRF;
- params.ioParam.ioPosMode = fsFromStart;
- if( id->locked==0 || id->refNumRF == -1 ){
- rc = SQLITE_OK;
- }else if( id->locked<0 ){
- params.ioParam.ioPosOffset = FIRST_LOCKBYTE+1;
- params.ioParam.ioReqCount = N_LOCKBYTE;
- PBUnlockRangeSync(&params);
- rc = SQLITE_OK;
- id->locked = 0;
- }else{
- params.ioParam.ioPosOffset = FIRST_LOCKBYTE+id->locked;
- params.ioParam.ioReqCount = 1;
- PBUnlockRangeSync(&params);
- rc = SQLITE_OK;
- id->locked = 0;
- }
- return rc;
-#endif
-}
-
-/*
-** Get information to seed the random number generator. The seed
-** is written into the buffer zBuf[256]. The calling function must
-** supply a sufficiently large buffer.
-*/
-int sqliteOsRandomSeed(char *zBuf){
- /* We have to initialize zBuf to prevent valgrind from reporting
- ** errors. The reports issued by valgrind are incorrect - we would
- ** prefer that the randomness be increased by making use of the
- ** uninitialized space in zBuf - but valgrind errors tend to worry
- ** some users. Rather than argue, it seems easier just to initialize
- ** the whole array and silence valgrind, even if that means less randomness
- ** in the random seed.
- **
- ** When testing, initializing zBuf[] to zero is all we do. That means
- ** that we always use the same random number sequence.* This makes the
- ** tests repeatable.
- */
- memset(zBuf, 0, 256);
-#if OS_UNIX && !defined(SQLITE_TEST)
- {
- int pid;
- time((time_t*)zBuf);
- pid = getpid();
- memcpy(&zBuf[sizeof(time_t)], &pid, sizeof(pid));
- }
-#endif
-#if OS_WIN && !defined(SQLITE_TEST)
- GetSystemTime((LPSYSTEMTIME)zBuf);
-#endif
-#if OS_MAC
- {
- int pid;
- Microseconds((UnsignedWide*)zBuf);
- pid = getpid();
- memcpy(&zBuf[sizeof(UnsignedWide)], &pid, sizeof(pid));
- }
-#endif
- return SQLITE_OK;
-}
-
-/*
-** Sleep for a little while. Return the amount of time slept.
-*/
-int sqliteOsSleep(int ms){
-#if OS_UNIX
-#if defined(HAVE_USLEEP) && HAVE_USLEEP
- usleep(ms*1000);
- return ms;
-#else
- sleep((ms+999)/1000);
- return 1000*((ms+999)/1000);
-#endif
-#endif
-#if OS_WIN
- Sleep(ms);
- return ms;
-#endif
-#if OS_MAC
- UInt32 finalTicks;
- UInt32 ticks = (((UInt32)ms+16)*3)/50; /* 1/60 sec per tick */
- Delay(ticks, &finalTicks);
- return (int)((ticks*50)/3);
-#endif
-}
-
-/*
-** Static variables used for thread synchronization
-*/
-static int inMutex = 0;
-#ifdef SQLITE_UNIX_THREADS
- static pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
-#endif
-#ifdef SQLITE_W32_THREADS
- static CRITICAL_SECTION cs;
-#endif
-#ifdef SQLITE_MACOS_MULTITASKING
- static MPCriticalRegionID criticalRegion;
-#endif
-
-/*
-** The following pair of routine implement mutual exclusion for
-** multi-threaded processes. Only a single thread is allowed to
-** executed code that is surrounded by EnterMutex() and LeaveMutex().
-**
-** SQLite uses only a single Mutex. There is not much critical
-** code and what little there is executes quickly and without blocking.
-*/
-void sqliteOsEnterMutex(){
-#ifdef SQLITE_UNIX_THREADS
- pthread_mutex_lock(&mutex);
-#endif
-#ifdef SQLITE_W32_THREADS
- static int isInit = 0;
- while( !isInit ){
- static long lock = 0;
- if( InterlockedIncrement(&lock)==1 ){
- InitializeCriticalSection(&cs);
- isInit = 1;
- }else{
- Sleep(1);
- }
- }
- EnterCriticalSection(&cs);
-#endif
-#ifdef SQLITE_MACOS_MULTITASKING
- static volatile int notInit = 1;
- if( notInit ){
- if( notInit == 2 ) /* as close as you can get to thread safe init */
- MPYield();
- else{
- notInit = 2;
- MPCreateCriticalRegion(&criticalRegion);
- notInit = 0;
- }
- }
- MPEnterCriticalRegion(criticalRegion, kDurationForever);
-#endif
- assert( !inMutex );
- inMutex = 1;
-}
-void sqliteOsLeaveMutex(){
- assert( inMutex );
- inMutex = 0;
-#ifdef SQLITE_UNIX_THREADS
- pthread_mutex_unlock(&mutex);
-#endif
-#ifdef SQLITE_W32_THREADS
- LeaveCriticalSection(&cs);
-#endif
-#ifdef SQLITE_MACOS_MULTITASKING
- MPExitCriticalRegion(criticalRegion);
-#endif
-}
-
-/*
-** Turn a relative pathname into a full pathname. Return a pointer
-** to the full pathname stored in space obtained from sqliteMalloc().
-** The calling function is responsible for freeing this space once it
-** is no longer needed.
-*/
-char *sqliteOsFullPathname(const char *zRelative){
-#if OS_UNIX
- char *zFull = 0;
- if( zRelative[0]=='/' ){
- sqliteSetString(&zFull, zRelative, (char*)0);
- }else{
- char zBuf[5000];
- sqliteSetString(&zFull, getcwd(zBuf, sizeof(zBuf)), "/", zRelative,
- (char*)0);
- }
- return zFull;
-#endif
-#if OS_WIN
- char *zNotUsed;
- char *zFull;
- int nByte;
- nByte = GetFullPathName(zRelative, 0, 0, &zNotUsed) + 1;
- zFull = sqliteMalloc( nByte );
- if( zFull==0 ) return 0;
- GetFullPathName(zRelative, nByte, zFull, &zNotUsed);
- return zFull;
-#endif
-#if OS_MAC
- char *zFull = 0;
- if( zRelative[0]==':' ){
- char zBuf[_MAX_PATH+1];
- sqliteSetString(&zFull, getcwd(zBuf, sizeof(zBuf)), &(zRelative[1]),
- (char*)0);
- }else{
- if( strchr(zRelative, ':') ){
- sqliteSetString(&zFull, zRelative, (char*)0);
- }else{
- char zBuf[_MAX_PATH+1];
- sqliteSetString(&zFull, getcwd(zBuf, sizeof(zBuf)), zRelative, (char*)0);
- }
- }
- return zFull;
-#endif
-}
-
-/*
-** The following variable, if set to a non-zero value, becomes the result
-** returned from sqliteOsCurrentTime(). This is used for testing.
-*/
-#ifdef SQLITE_TEST
-int sqlite_current_time = 0;
-#endif
-
-/*
-** Find the current time (in Universal Coordinated Time). Write the
-** current time and date as a Julian Day number into *prNow and
-** return 0. Return 1 if the time and date cannot be found.
-*/
-int sqliteOsCurrentTime(double *prNow){
-#if OS_UNIX
- time_t t;
- time(&t);
- *prNow = t/86400.0 + 2440587.5;
-#endif
-#if OS_WIN
- FILETIME ft;
- /* FILETIME structure is a 64-bit value representing the number of
- 100-nanosecond intervals since January 1, 1601 (= JD 2305813.5).
- */
- double now;
- GetSystemTimeAsFileTime( &ft );
- now = ((double)ft.dwHighDateTime) * 4294967296.0;
- *prNow = (now + ft.dwLowDateTime)/864000000000.0 + 2305813.5;
-#endif
-#ifdef SQLITE_TEST
- if( sqlite_current_time ){
- *prNow = sqlite_current_time/86400.0 + 2440587.5;
- }
-#endif
- return 0;
-}
diff --git a/ext/sqlite/libsqlite/src/os.h b/ext/sqlite/libsqlite/src/os.h
deleted file mode 100644
index d1395841d2..0000000000
--- a/ext/sqlite/libsqlite/src/os.h
+++ /dev/null
@@ -1,191 +0,0 @@
-/*
-** 2001 September 16
-**
-** The author disclaims copyright to this source code. In place of
-** a legal notice, here is a blessing:
-**
-** May you do good and not evil.
-** May you find forgiveness for yourself and forgive others.
-** May you share freely, never taking more than you give.
-**
-******************************************************************************
-**
-** This header file (together with is companion C source-code file
-** "os.c") attempt to abstract the underlying operating system so that
-** the SQLite library will work on both POSIX and windows systems.
-*/
-#ifndef _SQLITE_OS_H_
-#define _SQLITE_OS_H_
-
-/*
-** Helpful hint: To get this to compile on HP/UX, add -D_INCLUDE_POSIX_SOURCE
-** to the compiler command line.
-*/
-
-/*
-** These #defines should enable >2GB file support on Posix if the
-** underlying operating system supports it. If the OS lacks
-** large file support, or if the OS is windows, these should be no-ops.
-**
-** Large file support can be disabled using the -DSQLITE_DISABLE_LFS switch
-** on the compiler command line. This is necessary if you are compiling
-** on a recent machine (ex: RedHat 7.2) but you want your code to work
-** on an older machine (ex: RedHat 6.0). If you compile on RedHat 7.2
-** without this option, LFS is enable. But LFS does not exist in the kernel
-** in RedHat 6.0, so the code won't work. Hence, for maximum binary
-** portability you should omit LFS.
-**
-** Similar is true for MacOS. LFS is only supported on MacOS 9 and later.
-*/
-#ifndef SQLITE_DISABLE_LFS
-# define _LARGE_FILE 1
-# ifndef _FILE_OFFSET_BITS
-# define _FILE_OFFSET_BITS 64
-# endif
-# define _LARGEFILE_SOURCE 1
-#endif
-
-/*
-** Temporary files are named starting with this prefix followed by 16 random
-** alphanumeric characters, and no file extension. They are stored in the
-** OS's standard temporary file directory, and are deleted prior to exit.
-** If sqlite is being embedded in another program, you may wish to change the
-** prefix to reflect your program's name, so that if your program exits
-** prematurely, old temporary files can be easily identified. This can be done
-** using -DTEMP_FILE_PREFIX=myprefix_ on the compiler command line.
-*/
-#ifndef TEMP_FILE_PREFIX
-# define TEMP_FILE_PREFIX "sqlite_"
-#endif
-
-/*
-** Figure out if we are dealing with Unix, Windows or MacOS.
-**
-** N.B. MacOS means Mac Classic (or Carbon). Treat Darwin (OS X) as Unix.
-** The MacOS build is designed to use CodeWarrior (tested with v8)
-*/
-#ifndef OS_UNIX
-# ifndef OS_WIN
-# ifndef OS_MAC
-# if defined(__MACOS__)
-# define OS_MAC 1
-# define OS_WIN 0
-# define OS_UNIX 0
-# elif defined(_WIN32) || defined(WIN32) || defined(__CYGWIN__) || defined(__MINGW32__) || defined(__BORLANDC__)
-# define OS_MAC 0
-# define OS_WIN 1
-# define OS_UNIX 0
-# else
-# define OS_MAC 0
-# define OS_WIN 0
-# define OS_UNIX 1
-# endif
-# else
-# define OS_WIN 0
-# define OS_UNIX 0
-# endif
-# else
-# define OS_MAC 0
-# define OS_UNIX 0
-# endif
-#else
-# define OS_MAC 0
-# ifndef OS_WIN
-# define OS_WIN 0
-# endif
-#endif
-
-/*
-** A handle for an open file is stored in an OsFile object.
-*/
-#if OS_UNIX
-# include <sys/types.h>
-# include <sys/stat.h>
-# include <fcntl.h>
-# include <unistd.h>
- typedef struct OsFile OsFile;
- struct OsFile {
- struct openCnt *pOpen; /* Info about all open fd's on this inode */
- struct lockInfo *pLock; /* Info about locks on this inode */
- int fd; /* The file descriptor */
- int locked; /* True if this instance holds the lock */
- int dirfd; /* File descriptor for the directory */
- };
-# define SQLITE_TEMPNAME_SIZE 200
-# if defined(HAVE_USLEEP) && HAVE_USLEEP
-# define SQLITE_MIN_SLEEP_MS 1
-# else
-# define SQLITE_MIN_SLEEP_MS 1000
-# endif
-#endif
-
-#if OS_WIN
-#include <windows.h>
-#include <winbase.h>
- typedef struct OsFile OsFile;
- struct OsFile {
- HANDLE h; /* Handle for accessing the file */
- int locked; /* 0: unlocked, <0: write lock, >0: read lock */
- };
-# if defined(_MSC_VER) || defined(__BORLANDC__)
- typedef __int64 off_t;
-# else
-# if !defined(_CYGWIN_TYPES_H)
- typedef long long off_t;
-# if defined(__MINGW32__)
-# define _OFF_T_
-# endif
-# endif
-# endif
-# define SQLITE_TEMPNAME_SIZE (MAX_PATH+50)
-# define SQLITE_MIN_SLEEP_MS 1
-#endif
-
-#if OS_MAC
-# include <unistd.h>
-# include <Files.h>
- typedef struct OsFile OsFile;
- struct OsFile {
- SInt16 refNum; /* Data fork/file reference number */
- SInt16 refNumRF; /* Resource fork reference number (for locking) */
- int locked; /* 0: unlocked, <0: write lock, >0: read lock */
- int delOnClose; /* True if file is to be deleted on close */
- char *pathToDel; /* Name of file to delete on close */
- };
-# ifdef _LARGE_FILE
- typedef SInt64 off_t;
-# else
- typedef SInt32 off_t;
-# endif
-# define SQLITE_TEMPNAME_SIZE _MAX_PATH
-# define SQLITE_MIN_SLEEP_MS 17
-#endif
-
-int sqliteOsDelete(const char*);
-int sqliteOsFileExists(const char*);
-int sqliteOsFileRename(const char*, const char*);
-int sqliteOsOpenReadWrite(const char*, OsFile*, int*);
-int sqliteOsOpenExclusive(const char*, OsFile*, int);
-int sqliteOsOpenReadOnly(const char*, OsFile*);
-int sqliteOsOpenDirectory(const char*, OsFile*);
-int sqliteOsTempFileName(char*);
-int sqliteOsClose(OsFile*);
-int sqliteOsRead(OsFile*, void*, int amt);
-int sqliteOsWrite(OsFile*, const void*, int amt);
-int sqliteOsSeek(OsFile*, off_t offset);
-int sqliteOsSync(OsFile*);
-int sqliteOsTruncate(OsFile*, off_t size);
-int sqliteOsFileSize(OsFile*, off_t *pSize);
-int sqliteOsReadLock(OsFile*);
-int sqliteOsWriteLock(OsFile*);
-int sqliteOsUnlock(OsFile*);
-int sqliteOsRandomSeed(char*);
-int sqliteOsSleep(int ms);
-int sqliteOsCurrentTime(double*);
-void sqliteOsEnterMutex(void);
-void sqliteOsLeaveMutex(void);
-char *sqliteOsFullPathname(const char*);
-
-
-
-#endif /* _SQLITE_OS_H_ */
diff --git a/ext/sqlite/libsqlite/src/pager.c b/ext/sqlite/libsqlite/src/pager.c
deleted file mode 100644
index 23d3fb8009..0000000000
--- a/ext/sqlite/libsqlite/src/pager.c
+++ /dev/null
@@ -1,2220 +0,0 @@
-/*
-** 2001 September 15
-**
-** The author disclaims copyright to this source code. In place of
-** a legal notice, here is a blessing:
-**
-** May you do good and not evil.
-** May you find forgiveness for yourself and forgive others.
-** May you share freely, never taking more than you give.
-**
-*************************************************************************
-** This is the implementation of the page cache subsystem or "pager".
-**
-** The pager is used to access a database disk file. It implements
-** atomic commit and rollback through the use of a journal file that
-** is separate from the database file. The pager also implements file
-** locking to prevent two processes from writing the same database
-** file simultaneously, or one process from reading the database while
-** another is writing.
-**
-** @(#) $Id$
-*/
-#include "os.h" /* Must be first to enable large file support */
-#include "sqliteInt.h"
-#include "pager.h"
-#include <assert.h>
-#include <string.h>
-
-/*
-** Macros for troubleshooting. Normally turned off
-*/
-#if 0
-static Pager *mainPager = 0;
-#define SET_PAGER(X) if( mainPager==0 ) mainPager = (X)
-#define CLR_PAGER(X) if( mainPager==(X) ) mainPager = 0
-#define TRACE1(X) if( pPager==mainPager ) fprintf(stderr,X)
-#define TRACE2(X,Y) if( pPager==mainPager ) fprintf(stderr,X,Y)
-#define TRACE3(X,Y,Z) if( pPager==mainPager ) fprintf(stderr,X,Y,Z)
-#else
-#define SET_PAGER(X)
-#define CLR_PAGER(X)
-#define TRACE1(X)
-#define TRACE2(X,Y)
-#define TRACE3(X,Y,Z)
-#endif
-
-
-/*
-** The page cache as a whole is always in one of the following
-** states:
-**
-** SQLITE_UNLOCK The page cache is not currently reading or
-** writing the database file. There is no
-** data held in memory. This is the initial
-** state.
-**
-** SQLITE_READLOCK The page cache is reading the database.
-** Writing is not permitted. There can be
-** multiple readers accessing the same database
-** file at the same time.
-**
-** SQLITE_WRITELOCK The page cache is writing the database.
-** Access is exclusive. No other processes or
-** threads can be reading or writing while one
-** process is writing.
-**
-** The page cache comes up in SQLITE_UNLOCK. The first time a
-** sqlite_page_get() occurs, the state transitions to SQLITE_READLOCK.
-** After all pages have been released using sqlite_page_unref(),
-** the state transitions back to SQLITE_UNLOCK. The first time
-** that sqlite_page_write() is called, the state transitions to
-** SQLITE_WRITELOCK. (Note that sqlite_page_write() can only be
-** called on an outstanding page which means that the pager must
-** be in SQLITE_READLOCK before it transitions to SQLITE_WRITELOCK.)
-** The sqlite_page_rollback() and sqlite_page_commit() functions
-** transition the state from SQLITE_WRITELOCK back to SQLITE_READLOCK.
-*/
-#define SQLITE_UNLOCK 0
-#define SQLITE_READLOCK 1
-#define SQLITE_WRITELOCK 2
-
-
-/*
-** Each in-memory image of a page begins with the following header.
-** This header is only visible to this pager module. The client
-** code that calls pager sees only the data that follows the header.
-**
-** Client code should call sqlitepager_write() on a page prior to making
-** any modifications to that page. The first time sqlitepager_write()
-** is called, the original page contents are written into the rollback
-** journal and PgHdr.inJournal and PgHdr.needSync are set. Later, once
-** the journal page has made it onto the disk surface, PgHdr.needSync
-** is cleared. The modified page cannot be written back into the original
-** database file until the journal pages has been synced to disk and the
-** PgHdr.needSync has been cleared.
-**
-** The PgHdr.dirty flag is set when sqlitepager_write() is called and
-** is cleared again when the page content is written back to the original
-** database file.
-*/
-typedef struct PgHdr PgHdr;
-struct PgHdr {
- Pager *pPager; /* The pager to which this page belongs */
- Pgno pgno; /* The page number for this page */
- PgHdr *pNextHash, *pPrevHash; /* Hash collision chain for PgHdr.pgno */
- int nRef; /* Number of users of this page */
- PgHdr *pNextFree, *pPrevFree; /* Freelist of pages where nRef==0 */
- PgHdr *pNextAll, *pPrevAll; /* A list of all pages */
- PgHdr *pNextCkpt, *pPrevCkpt; /* List of pages in the checkpoint journal */
- u8 inJournal; /* TRUE if has been written to journal */
- u8 inCkpt; /* TRUE if written to the checkpoint journal */
- u8 dirty; /* TRUE if we need to write back changes */
- u8 needSync; /* Sync journal before writing this page */
- u8 alwaysRollback; /* Disable dont_rollback() for this page */
- PgHdr *pDirty; /* Dirty pages sorted by PgHdr.pgno */
- /* SQLITE_PAGE_SIZE bytes of page data follow this header */
- /* Pager.nExtra bytes of local data follow the page data */
-};
-
-
-/*
-** A macro used for invoking the codec if there is one
-*/
-#ifdef SQLITE_HAS_CODEC
-# define CODEC(P,D,N,X) if( P->xCodec ){ P->xCodec(P->pCodecArg,D,N,X); }
-#else
-# define CODEC(P,D,N,X)
-#endif
-
-/*
-** Convert a pointer to a PgHdr into a pointer to its data
-** and back again.
-*/
-#define PGHDR_TO_DATA(P) ((void*)(&(P)[1]))
-#define DATA_TO_PGHDR(D) (&((PgHdr*)(D))[-1])
-#define PGHDR_TO_EXTRA(P) ((void*)&((char*)(&(P)[1]))[SQLITE_PAGE_SIZE])
-
-/*
-** How big to make the hash table used for locating in-memory pages
-** by page number.
-*/
-#define N_PG_HASH 2048
-
-/*
-** Hash a page number
-*/
-#define pager_hash(PN) ((PN)&(N_PG_HASH-1))
-
-/*
-** A open page cache is an instance of the following structure.
-*/
-struct Pager {
- char *zFilename; /* Name of the database file */
- char *zJournal; /* Name of the journal file */
- char *zDirectory; /* Directory hold database and journal files */
- OsFile fd, jfd; /* File descriptors for database and journal */
- OsFile cpfd; /* File descriptor for the checkpoint journal */
- int dbSize; /* Number of pages in the file */
- int origDbSize; /* dbSize before the current change */
- int ckptSize; /* Size of database (in pages) at ckpt_begin() */
- off_t ckptJSize; /* Size of journal at ckpt_begin() */
- int nRec; /* Number of pages written to the journal */
- u32 cksumInit; /* Quasi-random value added to every checksum */
- int ckptNRec; /* Number of records in the checkpoint journal */
- int nExtra; /* Add this many bytes to each in-memory page */
- void (*xDestructor)(void*); /* Call this routine when freeing pages */
- int nPage; /* Total number of in-memory pages */
- int nRef; /* Number of in-memory pages with PgHdr.nRef>0 */
- int mxPage; /* Maximum number of pages to hold in cache */
- int nHit, nMiss, nOvfl; /* Cache hits, missing, and LRU overflows */
- void (*xCodec)(void*,void*,Pgno,int); /* Routine for en/decoding data */
- void *pCodecArg; /* First argument to xCodec() */
- u8 journalOpen; /* True if journal file descriptors is valid */
- u8 journalStarted; /* True if header of journal is synced */
- u8 useJournal; /* Use a rollback journal on this file */
- u8 ckptOpen; /* True if the checkpoint journal is open */
- u8 ckptInUse; /* True we are in a checkpoint */
- u8 ckptAutoopen; /* Open ckpt journal when main journal is opened*/
- u8 noSync; /* Do not sync the journal if true */
- u8 fullSync; /* Do extra syncs of the journal for robustness */
- u8 state; /* SQLITE_UNLOCK, _READLOCK or _WRITELOCK */
- u8 errMask; /* One of several kinds of errors */
- u8 tempFile; /* zFilename is a temporary file */
- u8 readOnly; /* True for a read-only database */
- u8 needSync; /* True if an fsync() is needed on the journal */
- u8 dirtyFile; /* True if database file has changed in any way */
- u8 alwaysRollback; /* Disable dont_rollback() for all pages */
- u8 *aInJournal; /* One bit for each page in the database file */
- u8 *aInCkpt; /* One bit for each page in the database */
- PgHdr *pFirst, *pLast; /* List of free pages */
- PgHdr *pFirstSynced; /* First free page with PgHdr.needSync==0 */
- PgHdr *pAll; /* List of all pages */
- PgHdr *pCkpt; /* List of pages in the checkpoint journal */
- PgHdr *aHash[N_PG_HASH]; /* Hash table to map page number of PgHdr */
-};
-
-/*
-** These are bits that can be set in Pager.errMask.
-*/
-#define PAGER_ERR_FULL 0x01 /* a write() failed */
-#define PAGER_ERR_MEM 0x02 /* malloc() failed */
-#define PAGER_ERR_LOCK 0x04 /* error in the locking protocol */
-#define PAGER_ERR_CORRUPT 0x08 /* database or journal corruption */
-#define PAGER_ERR_DISK 0x10 /* general disk I/O error - bad hard drive? */
-
-/*
-** The journal file contains page records in the following
-** format.
-**
-** Actually, this structure is the complete page record for pager
-** formats less than 3. Beginning with format 3, this record is surrounded
-** by two checksums.
-*/
-typedef struct PageRecord PageRecord;
-struct PageRecord {
- Pgno pgno; /* The page number */
- char aData[SQLITE_PAGE_SIZE]; /* Original data for page pgno */
-};
-
-/*
-** Journal files begin with the following magic string. The data
-** was obtained from /dev/random. It is used only as a sanity check.
-**
-** There are three journal formats (so far). The 1st journal format writes
-** 32-bit integers in the byte-order of the host machine. New
-** formats writes integers as big-endian. All new journals use the
-** new format, but we have to be able to read an older journal in order
-** to rollback journals created by older versions of the library.
-**
-** The 3rd journal format (added for 2.8.0) adds additional sanity
-** checking information to the journal. If the power fails while the
-** journal is being written, semi-random garbage data might appear in
-** the journal file after power is restored. If an attempt is then made
-** to roll the journal back, the database could be corrupted. The additional
-** sanity checking data is an attempt to discover the garbage in the
-** journal and ignore it.
-**
-** The sanity checking information for the 3rd journal format consists
-** of a 32-bit checksum on each page of data. The checksum covers both
-** the page number and the SQLITE_PAGE_SIZE bytes of data for the page.
-** This cksum is initialized to a 32-bit random value that appears in the
-** journal file right after the header. The random initializer is important,
-** because garbage data that appears at the end of a journal is likely
-** data that was once in other files that have now been deleted. If the
-** garbage data came from an obsolete journal file, the checksums might
-** be correct. But by initializing the checksum to random value which
-** is different for every journal, we minimize that risk.
-*/
-static const unsigned char aJournalMagic1[] = {
- 0xd9, 0xd5, 0x05, 0xf9, 0x20, 0xa1, 0x63, 0xd4,
-};
-static const unsigned char aJournalMagic2[] = {
- 0xd9, 0xd5, 0x05, 0xf9, 0x20, 0xa1, 0x63, 0xd5,
-};
-static const unsigned char aJournalMagic3[] = {
- 0xd9, 0xd5, 0x05, 0xf9, 0x20, 0xa1, 0x63, 0xd6,
-};
-#define JOURNAL_FORMAT_1 1
-#define JOURNAL_FORMAT_2 2
-#define JOURNAL_FORMAT_3 3
-
-/*
-** The following integer determines what format to use when creating
-** new primary journal files. By default we always use format 3.
-** When testing, we can set this value to older journal formats in order to
-** make sure that newer versions of the library are able to rollback older
-** journal files.
-**
-** Note that checkpoint journals always use format 2 and omit the header.
-*/
-#ifdef SQLITE_TEST
-int journal_format = 3;
-#else
-# define journal_format 3
-#endif
-
-/*
-** The size of the header and of each page in the journal varies according
-** to which journal format is being used. The following macros figure out
-** the sizes based on format numbers.
-*/
-#define JOURNAL_HDR_SZ(X) \
- (sizeof(aJournalMagic1) + sizeof(Pgno) + ((X)>=3)*2*sizeof(u32))
-#define JOURNAL_PG_SZ(X) \
- (SQLITE_PAGE_SIZE + sizeof(Pgno) + ((X)>=3)*sizeof(u32))
-
-/*
-** Enable reference count tracking here:
-*/
-#ifdef SQLITE_TEST
- int pager_refinfo_enable = 0;
- static void pager_refinfo(PgHdr *p){
- static int cnt = 0;
- if( !pager_refinfo_enable ) return;
- printf(
- "REFCNT: %4d addr=0x%08x nRef=%d\n",
- p->pgno, (int)PGHDR_TO_DATA(p), p->nRef
- );
- cnt++; /* Something to set a breakpoint on */
- }
-# define REFINFO(X) pager_refinfo(X)
-#else
-# define REFINFO(X)
-#endif
-
-/*
-** Read a 32-bit integer from the given file descriptor. Store the integer
-** that is read in *pRes. Return SQLITE_OK if everything worked, or an
-** error code is something goes wrong.
-**
-** If the journal format is 2 or 3, read a big-endian integer. If the
-** journal format is 1, read an integer in the native byte-order of the
-** host machine.
-*/
-static int read32bits(int format, OsFile *fd, u32 *pRes){
- u32 res;
- int rc;
- rc = sqliteOsRead(fd, &res, sizeof(res));
- if( rc==SQLITE_OK && format>JOURNAL_FORMAT_1 ){
- unsigned char ac[4];
- memcpy(ac, &res, 4);
- res = (ac[0]<<24) | (ac[1]<<16) | (ac[2]<<8) | ac[3];
- }
- *pRes = res;
- return rc;
-}
-
-/*
-** Write a 32-bit integer into the given file descriptor. Return SQLITE_OK
-** on success or an error code is something goes wrong.
-**
-** If the journal format is 2 or 3, write the integer as 4 big-endian
-** bytes. If the journal format is 1, write the integer in the native
-** byte order. In normal operation, only formats 2 and 3 are used.
-** Journal format 1 is only used for testing.
-*/
-static int write32bits(OsFile *fd, u32 val){
- unsigned char ac[4];
- if( journal_format<=1 ){
- return sqliteOsWrite(fd, &val, 4);
- }
- ac[0] = (val>>24) & 0xff;
- ac[1] = (val>>16) & 0xff;
- ac[2] = (val>>8) & 0xff;
- ac[3] = val & 0xff;
- return sqliteOsWrite(fd, ac, 4);
-}
-
-/*
-** Write a 32-bit integer into a page header right before the
-** page data. This will overwrite the PgHdr.pDirty pointer.
-**
-** The integer is big-endian for formats 2 and 3 and native byte order
-** for journal format 1.
-*/
-static void store32bits(u32 val, PgHdr *p, int offset){
- unsigned char *ac;
- ac = &((unsigned char*)PGHDR_TO_DATA(p))[offset];
- if( journal_format<=1 ){
- memcpy(ac, &val, 4);
- }else{
- ac[0] = (val>>24) & 0xff;
- ac[1] = (val>>16) & 0xff;
- ac[2] = (val>>8) & 0xff;
- ac[3] = val & 0xff;
- }
-}
-
-
-/*
-** Convert the bits in the pPager->errMask into an approprate
-** return code.
-*/
-static int pager_errcode(Pager *pPager){
- int rc = SQLITE_OK;
- if( pPager->errMask & PAGER_ERR_LOCK ) rc = SQLITE_PROTOCOL;
- if( pPager->errMask & PAGER_ERR_DISK ) rc = SQLITE_IOERR;
- if( pPager->errMask & PAGER_ERR_FULL ) rc = SQLITE_FULL;
- if( pPager->errMask & PAGER_ERR_MEM ) rc = SQLITE_NOMEM;
- if( pPager->errMask & PAGER_ERR_CORRUPT ) rc = SQLITE_CORRUPT;
- return rc;
-}
-
-/*
-** Add or remove a page from the list of all pages that are in the
-** checkpoint journal.
-**
-** The Pager keeps a separate list of pages that are currently in
-** the checkpoint journal. This helps the sqlitepager_ckpt_commit()
-** routine run MUCH faster for the common case where there are many
-** pages in memory but only a few are in the checkpoint journal.
-*/
-static void page_add_to_ckpt_list(PgHdr *pPg){
- Pager *pPager = pPg->pPager;
- if( pPg->inCkpt ) return;
- assert( pPg->pPrevCkpt==0 && pPg->pNextCkpt==0 );
- pPg->pPrevCkpt = 0;
- if( pPager->pCkpt ){
- pPager->pCkpt->pPrevCkpt = pPg;
- }
- pPg->pNextCkpt = pPager->pCkpt;
- pPager->pCkpt = pPg;
- pPg->inCkpt = 1;
-}
-static void page_remove_from_ckpt_list(PgHdr *pPg){
- if( !pPg->inCkpt ) return;
- if( pPg->pPrevCkpt ){
- assert( pPg->pPrevCkpt->pNextCkpt==pPg );
- pPg->pPrevCkpt->pNextCkpt = pPg->pNextCkpt;
- }else{
- assert( pPg->pPager->pCkpt==pPg );
- pPg->pPager->pCkpt = pPg->pNextCkpt;
- }
- if( pPg->pNextCkpt ){
- assert( pPg->pNextCkpt->pPrevCkpt==pPg );
- pPg->pNextCkpt->pPrevCkpt = pPg->pPrevCkpt;
- }
- pPg->pNextCkpt = 0;
- pPg->pPrevCkpt = 0;
- pPg->inCkpt = 0;
-}
-
-/*
-** Find a page in the hash table given its page number. Return
-** a pointer to the page or NULL if not found.
-*/
-static PgHdr *pager_lookup(Pager *pPager, Pgno pgno){
- PgHdr *p = pPager->aHash[pager_hash(pgno)];
- while( p && p->pgno!=pgno ){
- p = p->pNextHash;
- }
- return p;
-}
-
-/*
-** Unlock the database and clear the in-memory cache. This routine
-** sets the state of the pager back to what it was when it was first
-** opened. Any outstanding pages are invalidated and subsequent attempts
-** to access those pages will likely result in a coredump.
-*/
-static void pager_reset(Pager *pPager){
- PgHdr *pPg, *pNext;
- for(pPg=pPager->pAll; pPg; pPg=pNext){
- pNext = pPg->pNextAll;
- sqliteFree(pPg);
- }
- pPager->pFirst = 0;
- pPager->pFirstSynced = 0;
- pPager->pLast = 0;
- pPager->pAll = 0;
- memset(pPager->aHash, 0, sizeof(pPager->aHash));
- pPager->nPage = 0;
- if( pPager->state>=SQLITE_WRITELOCK ){
- sqlitepager_rollback(pPager);
- }
- sqliteOsUnlock(&pPager->fd);
- pPager->state = SQLITE_UNLOCK;
- pPager->dbSize = -1;
- pPager->nRef = 0;
- assert( pPager->journalOpen==0 );
-}
-
-/*
-** When this routine is called, the pager has the journal file open and
-** a write lock on the database. This routine releases the database
-** write lock and acquires a read lock in its place. The journal file
-** is deleted and closed.
-**
-** TODO: Consider keeping the journal file open for temporary databases.
-** This might give a performance improvement on windows where opening
-** a file is an expensive operation.
-*/
-static int pager_unwritelock(Pager *pPager){
- int rc;
- PgHdr *pPg;
- if( pPager->state<SQLITE_WRITELOCK ) return SQLITE_OK;
- sqlitepager_ckpt_commit(pPager);
- if( pPager->ckptOpen ){
- sqliteOsClose(&pPager->cpfd);
- pPager->ckptOpen = 0;
- }
- if( pPager->journalOpen ){
- sqliteOsClose(&pPager->jfd);
- pPager->journalOpen = 0;
- sqliteOsDelete(pPager->zJournal);
- sqliteFree( pPager->aInJournal );
- pPager->aInJournal = 0;
- for(pPg=pPager->pAll; pPg; pPg=pPg->pNextAll){
- pPg->inJournal = 0;
- pPg->dirty = 0;
- pPg->needSync = 0;
- }
- }else{
- assert( pPager->dirtyFile==0 || pPager->useJournal==0 );
- }
- rc = sqliteOsReadLock(&pPager->fd);
- if( rc==SQLITE_OK ){
- pPager->state = SQLITE_READLOCK;
- }else{
- /* This can only happen if a process does a BEGIN, then forks and the
- ** child process does the COMMIT. Because of the semantics of unix
- ** file locking, the unlock will fail.
- */
- pPager->state = SQLITE_UNLOCK;
- }
- return rc;
-}
-
-/*
-** Compute and return a checksum for the page of data.
-**
-** This is not a real checksum. It is really just the sum of the
-** random initial value and the page number. We considered do a checksum
-** of the database, but that was found to be too slow.
-*/
-static u32 pager_cksum(Pager *pPager, Pgno pgno, const char *aData){
- u32 cksum = pPager->cksumInit + pgno;
- return cksum;
-}
-
-/*
-** Read a single page from the journal file opened on file descriptor
-** jfd. Playback this one page.
-**
-** There are three different journal formats. The format parameter determines
-** which format is used by the journal that is played back.
-*/
-static int pager_playback_one_page(Pager *pPager, OsFile *jfd, int format){
- int rc;
- PgHdr *pPg; /* An existing page in the cache */
- PageRecord pgRec;
- u32 cksum;
-
- rc = read32bits(format, jfd, &pgRec.pgno);
- if( rc!=SQLITE_OK ) return rc;
- rc = sqliteOsRead(jfd, &pgRec.aData, sizeof(pgRec.aData));
- if( rc!=SQLITE_OK ) return rc;
-
- /* Sanity checking on the page. This is more important that I originally
- ** thought. If a power failure occurs while the journal is being written,
- ** it could cause invalid data to be written into the journal. We need to
- ** detect this invalid data (with high probability) and ignore it.
- */
- if( pgRec.pgno==0 ){
- return SQLITE_DONE;
- }
- if( pgRec.pgno>(unsigned)pPager->dbSize ){
- return SQLITE_OK;
- }
- if( format>=JOURNAL_FORMAT_3 ){
- rc = read32bits(format, jfd, &cksum);
- if( rc ) return rc;
- if( pager_cksum(pPager, pgRec.pgno, pgRec.aData)!=cksum ){
- return SQLITE_DONE;
- }
- }
-
- /* Playback the page. Update the in-memory copy of the page
- ** at the same time, if there is one.
- */
- pPg = pager_lookup(pPager, pgRec.pgno);
- TRACE2("PLAYBACK %d\n", pgRec.pgno);
- sqliteOsSeek(&pPager->fd, (pgRec.pgno-1)*(off_t)SQLITE_PAGE_SIZE);
- rc = sqliteOsWrite(&pPager->fd, pgRec.aData, SQLITE_PAGE_SIZE);
- if( pPg ){
- /* No page should ever be rolled back that is in use, except for page
- ** 1 which is held in use in order to keep the lock on the database
- ** active.
- */
- assert( pPg->nRef==0 || pPg->pgno==1 );
- memcpy(PGHDR_TO_DATA(pPg), pgRec.aData, SQLITE_PAGE_SIZE);
- memset(PGHDR_TO_EXTRA(pPg), 0, pPager->nExtra);
- pPg->dirty = 0;
- pPg->needSync = 0;
- CODEC(pPager, PGHDR_TO_DATA(pPg), pPg->pgno, 3);
- }
- return rc;
-}
-
-/*
-** Playback the journal and thus restore the database file to
-** the state it was in before we started making changes.
-**
-** The journal file format is as follows:
-**
-** * 8 byte prefix. One of the aJournalMagic123 vectors defined
-** above. The format of the journal file is determined by which
-** of the three prefix vectors is seen.
-** * 4 byte big-endian integer which is the number of valid page records
-** in the journal. If this value is 0xffffffff, then compute the
-** number of page records from the journal size. This field appears
-** in format 3 only.
-** * 4 byte big-endian integer which is the initial value for the
-** sanity checksum. This field appears in format 3 only.
-** * 4 byte integer which is the number of pages to truncate the
-** database to during a rollback.
-** * Zero or more pages instances, each as follows:
-** + 4 byte page number.
-** + SQLITE_PAGE_SIZE bytes of data.
-** + 4 byte checksum (format 3 only)
-**
-** When we speak of the journal header, we mean the first 4 bullets above.
-** Each entry in the journal is an instance of the 5th bullet. Note that
-** bullets 2 and 3 only appear in format-3 journals.
-**
-** Call the value from the second bullet "nRec". nRec is the number of
-** valid page entries in the journal. In most cases, you can compute the
-** value of nRec from the size of the journal file. But if a power
-** failure occurred while the journal was being written, it could be the
-** case that the size of the journal file had already been increased but
-** the extra entries had not yet made it safely to disk. In such a case,
-** the value of nRec computed from the file size would be too large. For
-** that reason, we always use the nRec value in the header.
-**
-** If the nRec value is 0xffffffff it means that nRec should be computed
-** from the file size. This value is used when the user selects the
-** no-sync option for the journal. A power failure could lead to corruption
-** in this case. But for things like temporary table (which will be
-** deleted when the power is restored) we don't care.
-**
-** Journal formats 1 and 2 do not have an nRec value in the header so we
-** have to compute nRec from the file size. This has risks (as described
-** above) which is why all persistent tables have been changed to use
-** format 3.
-**
-** If the file opened as the journal file is not a well-formed
-** journal file then the database will likely already be
-** corrupted, so the PAGER_ERR_CORRUPT bit is set in pPager->errMask
-** and SQLITE_CORRUPT is returned. If it all works, then this routine
-** returns SQLITE_OK.
-*/
-static int pager_playback(Pager *pPager, int useJournalSize){
- off_t szJ; /* Size of the journal file in bytes */
- int nRec; /* Number of Records in the journal */
- int i; /* Loop counter */
- Pgno mxPg = 0; /* Size of the original file in pages */
- int format; /* Format of the journal file. */
- unsigned char aMagic[sizeof(aJournalMagic1)];
- int rc;
-
- /* Figure out how many records are in the journal. Abort early if
- ** the journal is empty.
- */
- assert( pPager->journalOpen );
- sqliteOsSeek(&pPager->jfd, 0);
- rc = sqliteOsFileSize(&pPager->jfd, &szJ);
- if( rc!=SQLITE_OK ){
- goto end_playback;
- }
-
- /* If the journal file is too small to contain a complete header,
- ** it must mean that the process that created the journal was just
- ** beginning to write the journal file when it died. In that case,
- ** the database file should have still been completely unchanged.
- ** Nothing needs to be rolled back. We can safely ignore this journal.
- */
- if( szJ < sizeof(aMagic)+sizeof(Pgno) ){
- goto end_playback;
- }
-
- /* Read the beginning of the journal and truncate the
- ** database file back to its original size.
- */
- rc = sqliteOsRead(&pPager->jfd, aMagic, sizeof(aMagic));
- if( rc!=SQLITE_OK ){
- rc = SQLITE_PROTOCOL;
- goto end_playback;
- }
- if( memcmp(aMagic, aJournalMagic3, sizeof(aMagic))==0 ){
- format = JOURNAL_FORMAT_3;
- }else if( memcmp(aMagic, aJournalMagic2, sizeof(aMagic))==0 ){
- format = JOURNAL_FORMAT_2;
- }else if( memcmp(aMagic, aJournalMagic1, sizeof(aMagic))==0 ){
- format = JOURNAL_FORMAT_1;
- }else{
- rc = SQLITE_PROTOCOL;
- goto end_playback;
- }
- if( format>=JOURNAL_FORMAT_3 ){
- if( szJ < sizeof(aMagic) + 3*sizeof(u32) ){
- /* Ignore the journal if it is too small to contain a complete
- ** header. We already did this test once above, but at the prior
- ** test, we did not know the journal format and so we had to assume
- ** the smallest possible header. Now we know the header is bigger
- ** than the minimum so we test again.
- */
- goto end_playback;
- }
- rc = read32bits(format, &pPager->jfd, (u32*)&nRec);
- if( rc ) goto end_playback;
- rc = read32bits(format, &pPager->jfd, &pPager->cksumInit);
- if( rc ) goto end_playback;
- if( nRec==0xffffffff || useJournalSize ){
- nRec = (szJ - JOURNAL_HDR_SZ(3))/JOURNAL_PG_SZ(3);
- }
- }else{
- nRec = (szJ - JOURNAL_HDR_SZ(2))/JOURNAL_PG_SZ(2);
- assert( nRec*JOURNAL_PG_SZ(2)+JOURNAL_HDR_SZ(2)==szJ );
- }
- rc = read32bits(format, &pPager->jfd, &mxPg);
- if( rc!=SQLITE_OK ){
- goto end_playback;
- }
- assert( pPager->origDbSize==0 || pPager->origDbSize==mxPg );
- rc = sqliteOsTruncate(&pPager->fd, SQLITE_PAGE_SIZE*(off_t)mxPg);
- if( rc!=SQLITE_OK ){
- goto end_playback;
- }
- pPager->dbSize = mxPg;
-
- /* Copy original pages out of the journal and back into the database file.
- */
- for(i=0; i<nRec; i++){
- rc = pager_playback_one_page(pPager, &pPager->jfd, format);
- if( rc!=SQLITE_OK ){
- if( rc==SQLITE_DONE ){
- rc = SQLITE_OK;
- }
- break;
- }
- }
-
- /* Pages that have been written to the journal but never synced
- ** where not restored by the loop above. We have to restore those
- ** pages by reading them back from the original database.
- */
- if( rc==SQLITE_OK ){
- PgHdr *pPg;
- for(pPg=pPager->pAll; pPg; pPg=pPg->pNextAll){
- char zBuf[SQLITE_PAGE_SIZE];
- if( !pPg->dirty ) continue;
- if( (int)pPg->pgno <= pPager->origDbSize ){
- sqliteOsSeek(&pPager->fd, SQLITE_PAGE_SIZE*(off_t)(pPg->pgno-1));
- rc = sqliteOsRead(&pPager->fd, zBuf, SQLITE_PAGE_SIZE);
- TRACE2("REFETCH %d\n", pPg->pgno);
- CODEC(pPager, zBuf, pPg->pgno, 2);
- if( rc ) break;
- }else{
- memset(zBuf, 0, SQLITE_PAGE_SIZE);
- }
- if( pPg->nRef==0 || memcmp(zBuf, PGHDR_TO_DATA(pPg), SQLITE_PAGE_SIZE) ){
- memcpy(PGHDR_TO_DATA(pPg), zBuf, SQLITE_PAGE_SIZE);
- memset(PGHDR_TO_EXTRA(pPg), 0, pPager->nExtra);
- }
- pPg->needSync = 0;
- pPg->dirty = 0;
- }
- }
-
-end_playback:
- if( rc!=SQLITE_OK ){
- pager_unwritelock(pPager);
- pPager->errMask |= PAGER_ERR_CORRUPT;
- rc = SQLITE_CORRUPT;
- }else{
- rc = pager_unwritelock(pPager);
- }
- return rc;
-}
-
-/*
-** Playback the checkpoint journal.
-**
-** This is similar to playing back the transaction journal but with
-** a few extra twists.
-**
-** (1) The number of pages in the database file at the start of
-** the checkpoint is stored in pPager->ckptSize, not in the
-** journal file itself.
-**
-** (2) In addition to playing back the checkpoint journal, also
-** playback all pages of the transaction journal beginning
-** at offset pPager->ckptJSize.
-*/
-static int pager_ckpt_playback(Pager *pPager){
- off_t szJ; /* Size of the full journal */
- int nRec; /* Number of Records */
- int i; /* Loop counter */
- int rc;
-
- /* Truncate the database back to its original size.
- */
- rc = sqliteOsTruncate(&pPager->fd, SQLITE_PAGE_SIZE*(off_t)pPager->ckptSize);
- pPager->dbSize = pPager->ckptSize;
-
- /* Figure out how many records are in the checkpoint journal.
- */
- assert( pPager->ckptInUse && pPager->journalOpen );
- sqliteOsSeek(&pPager->cpfd, 0);
- nRec = pPager->ckptNRec;
-
- /* Copy original pages out of the checkpoint journal and back into the
- ** database file. Note that the checkpoint journal always uses format
- ** 2 instead of format 3 since it does not need to be concerned with
- ** power failures corrupting the journal and can thus omit the checksums.
- */
- for(i=nRec-1; i>=0; i--){
- rc = pager_playback_one_page(pPager, &pPager->cpfd, 2);
- assert( rc!=SQLITE_DONE );
- if( rc!=SQLITE_OK ) goto end_ckpt_playback;
- }
-
- /* Figure out how many pages need to be copied out of the transaction
- ** journal.
- */
- rc = sqliteOsSeek(&pPager->jfd, pPager->ckptJSize);
- if( rc!=SQLITE_OK ){
- goto end_ckpt_playback;
- }
- rc = sqliteOsFileSize(&pPager->jfd, &szJ);
- if( rc!=SQLITE_OK ){
- goto end_ckpt_playback;
- }
- nRec = (szJ - pPager->ckptJSize)/JOURNAL_PG_SZ(journal_format);
- for(i=nRec-1; i>=0; i--){
- rc = pager_playback_one_page(pPager, &pPager->jfd, journal_format);
- if( rc!=SQLITE_OK ){
- assert( rc!=SQLITE_DONE );
- goto end_ckpt_playback;
- }
- }
-
-end_ckpt_playback:
- if( rc!=SQLITE_OK ){
- pPager->errMask |= PAGER_ERR_CORRUPT;
- rc = SQLITE_CORRUPT;
- }
- return rc;
-}
-
-/*
-** Change the maximum number of in-memory pages that are allowed.
-**
-** The maximum number is the absolute value of the mxPage parameter.
-** If mxPage is negative, the noSync flag is also set. noSync bypasses
-** calls to sqliteOsSync(). The pager runs much faster with noSync on,
-** but if the operating system crashes or there is an abrupt power
-** failure, the database file might be left in an inconsistent and
-** unrepairable state.
-*/
-void sqlitepager_set_cachesize(Pager *pPager, int mxPage){
- if( mxPage>=0 ){
- pPager->noSync = pPager->tempFile;
- if( pPager->noSync==0 ) pPager->needSync = 0;
- }else{
- pPager->noSync = 1;
- mxPage = -mxPage;
- }
- if( mxPage>10 ){
- pPager->mxPage = mxPage;
- }
-}
-
-/*
-** Adjust the robustness of the database to damage due to OS crashes
-** or power failures by changing the number of syncs()s when writing
-** the rollback journal. There are three levels:
-**
-** OFF sqliteOsSync() is never called. This is the default
-** for temporary and transient files.
-**
-** NORMAL The journal is synced once before writes begin on the
-** database. This is normally adequate protection, but
-** it is theoretically possible, though very unlikely,
-** that an inopertune power failure could leave the journal
-** in a state which would cause damage to the database
-** when it is rolled back.
-**
-** FULL The journal is synced twice before writes begin on the
-** database (with some additional information - the nRec field
-** of the journal header - being written in between the two
-** syncs). If we assume that writing a
-** single disk sector is atomic, then this mode provides
-** assurance that the journal will not be corrupted to the
-** point of causing damage to the database during rollback.
-**
-** Numeric values associated with these states are OFF==1, NORMAL=2,
-** and FULL=3.
-*/
-void sqlitepager_set_safety_level(Pager *pPager, int level){
- pPager->noSync = level==1 || pPager->tempFile;
- pPager->fullSync = level==3 && !pPager->tempFile;
- if( pPager->noSync==0 ) pPager->needSync = 0;
-}
-
-/*
-** Open a temporary file. Write the name of the file into zName
-** (zName must be at least SQLITE_TEMPNAME_SIZE bytes long.) Write
-** the file descriptor into *fd. Return SQLITE_OK on success or some
-** other error code if we fail.
-**
-** The OS will automatically delete the temporary file when it is
-** closed.
-*/
-static int sqlitepager_opentemp(char *zFile, OsFile *fd){
- int cnt = 8;
- int rc;
- do{
- cnt--;
- sqliteOsTempFileName(zFile);
- rc = sqliteOsOpenExclusive(zFile, fd, 1);
- }while( cnt>0 && rc!=SQLITE_OK );
- return rc;
-}
-
-/*
-** Create a new page cache and put a pointer to the page cache in *ppPager.
-** The file to be cached need not exist. The file is not locked until
-** the first call to sqlitepager_get() and is only held open until the
-** last page is released using sqlitepager_unref().
-**
-** If zFilename is NULL then a randomly-named temporary file is created
-** and used as the file to be cached. The file will be deleted
-** automatically when it is closed.
-*/
-int sqlitepager_open(
- Pager **ppPager, /* Return the Pager structure here */
- const char *zFilename, /* Name of the database file to open */
- int mxPage, /* Max number of in-memory cache pages */
- int nExtra, /* Extra bytes append to each in-memory page */
- int useJournal /* TRUE to use a rollback journal on this file */
-){
- Pager *pPager;
- char *zFullPathname;
- int nameLen;
- OsFile fd;
- int rc, i;
- int tempFile;
- int readOnly = 0;
- char zTemp[SQLITE_TEMPNAME_SIZE];
-
- *ppPager = 0;
- if( sqlite_malloc_failed ){
- return SQLITE_NOMEM;
- }
- if( zFilename && zFilename[0] ){
- zFullPathname = sqliteOsFullPathname(zFilename);
- rc = sqliteOsOpenReadWrite(zFullPathname, &fd, &readOnly);
- tempFile = 0;
- }else{
- rc = sqlitepager_opentemp(zTemp, &fd);
- zFilename = zTemp;
- zFullPathname = sqliteOsFullPathname(zFilename);
- tempFile = 1;
- }
- if( sqlite_malloc_failed ){
- return SQLITE_NOMEM;
- }
- if( rc!=SQLITE_OK ){
- sqliteFree(zFullPathname);
- return SQLITE_CANTOPEN;
- }
- nameLen = strlen(zFullPathname);
- pPager = sqliteMalloc( sizeof(*pPager) + nameLen*3 + 30 );
- if( pPager==0 ){
- sqliteOsClose(&fd);
- sqliteFree(zFullPathname);
- return SQLITE_NOMEM;
- }
- SET_PAGER(pPager);
- pPager->zFilename = (char*)&pPager[1];
- pPager->zDirectory = &pPager->zFilename[nameLen+1];
- pPager->zJournal = &pPager->zDirectory[nameLen+1];
- strcpy(pPager->zFilename, zFullPathname);
- strcpy(pPager->zDirectory, zFullPathname);
- for(i=nameLen; i>0 && pPager->zDirectory[i-1]!='/'; i--){}
- if( i>0 ) pPager->zDirectory[i-1] = 0;
- strcpy(pPager->zJournal, zFullPathname);
- sqliteFree(zFullPathname);
- strcpy(&pPager->zJournal[nameLen], "-journal");
- pPager->fd = fd;
- pPager->journalOpen = 0;
- pPager->useJournal = useJournal;
- pPager->ckptOpen = 0;
- pPager->ckptInUse = 0;
- pPager->nRef = 0;
- pPager->dbSize = -1;
- pPager->ckptSize = 0;
- pPager->ckptJSize = 0;
- pPager->nPage = 0;
- pPager->mxPage = mxPage>5 ? mxPage : 10;
- pPager->state = SQLITE_UNLOCK;
- pPager->errMask = 0;
- pPager->tempFile = tempFile;
- pPager->readOnly = readOnly;
- pPager->needSync = 0;
- pPager->noSync = pPager->tempFile || !useJournal;
- pPager->pFirst = 0;
- pPager->pFirstSynced = 0;
- pPager->pLast = 0;
- pPager->nExtra = nExtra;
- memset(pPager->aHash, 0, sizeof(pPager->aHash));
- *ppPager = pPager;
- return SQLITE_OK;
-}
-
-/*
-** Set the destructor for this pager. If not NULL, the destructor is called
-** when the reference count on each page reaches zero. The destructor can
-** be used to clean up information in the extra segment appended to each page.
-**
-** The destructor is not called as a result sqlitepager_close().
-** Destructors are only called by sqlitepager_unref().
-*/
-void sqlitepager_set_destructor(Pager *pPager, void (*xDesc)(void*)){
- pPager->xDestructor = xDesc;
-}
-
-/*
-** Return the total number of pages in the disk file associated with
-** pPager.
-*/
-int sqlitepager_pagecount(Pager *pPager){
- off_t n;
- assert( pPager!=0 );
- if( pPager->dbSize>=0 ){
- return pPager->dbSize;
- }
- if( sqliteOsFileSize(&pPager->fd, &n)!=SQLITE_OK ){
- pPager->errMask |= PAGER_ERR_DISK;
- return 0;
- }
- n /= SQLITE_PAGE_SIZE;
- if( pPager->state!=SQLITE_UNLOCK ){
- pPager->dbSize = n;
- }
- return n;
-}
-
-/*
-** Forward declaration
-*/
-static int syncJournal(Pager*);
-
-/*
-** Truncate the file to the number of pages specified.
-*/
-int sqlitepager_truncate(Pager *pPager, Pgno nPage){
- int rc;
- if( pPager->dbSize<0 ){
- sqlitepager_pagecount(pPager);
- }
- if( pPager->errMask!=0 ){
- rc = pager_errcode(pPager);
- return rc;
- }
- if( nPage>=(unsigned)pPager->dbSize ){
- return SQLITE_OK;
- }
- syncJournal(pPager);
- rc = sqliteOsTruncate(&pPager->fd, SQLITE_PAGE_SIZE*(off_t)nPage);
- if( rc==SQLITE_OK ){
- pPager->dbSize = nPage;
- }
- return rc;
-}
-
-/*
-** Shutdown the page cache. Free all memory and close all files.
-**
-** If a transaction was in progress when this routine is called, that
-** transaction is rolled back. All outstanding pages are invalidated
-** and their memory is freed. Any attempt to use a page associated
-** with this page cache after this function returns will likely
-** result in a coredump.
-*/
-int sqlitepager_close(Pager *pPager){
- PgHdr *pPg, *pNext;
- switch( pPager->state ){
- case SQLITE_WRITELOCK: {
- sqlitepager_rollback(pPager);
- sqliteOsUnlock(&pPager->fd);
- assert( pPager->journalOpen==0 );
- break;
- }
- case SQLITE_READLOCK: {
- sqliteOsUnlock(&pPager->fd);
- break;
- }
- default: {
- /* Do nothing */
- break;
- }
- }
- for(pPg=pPager->pAll; pPg; pPg=pNext){
- pNext = pPg->pNextAll;
- sqliteFree(pPg);
- }
- sqliteOsClose(&pPager->fd);
- assert( pPager->journalOpen==0 );
- /* Temp files are automatically deleted by the OS
- ** if( pPager->tempFile ){
- ** sqliteOsDelete(pPager->zFilename);
- ** }
- */
- CLR_PAGER(pPager);
- if( pPager->zFilename!=(char*)&pPager[1] ){
- assert( 0 ); /* Cannot happen */
- sqliteFree(pPager->zFilename);
- sqliteFree(pPager->zJournal);
- sqliteFree(pPager->zDirectory);
- }
- sqliteFree(pPager);
- return SQLITE_OK;
-}
-
-/*
-** Return the page number for the given page data.
-*/
-Pgno sqlitepager_pagenumber(void *pData){
- PgHdr *p = DATA_TO_PGHDR(pData);
- return p->pgno;
-}
-
-/*
-** Increment the reference count for a page. If the page is
-** currently on the freelist (the reference count is zero) then
-** remove it from the freelist.
-*/
-#define page_ref(P) ((P)->nRef==0?_page_ref(P):(void)(P)->nRef++)
-static void _page_ref(PgHdr *pPg){
- if( pPg->nRef==0 ){
- /* The page is currently on the freelist. Remove it. */
- if( pPg==pPg->pPager->pFirstSynced ){
- PgHdr *p = pPg->pNextFree;
- while( p && p->needSync ){ p = p->pNextFree; }
- pPg->pPager->pFirstSynced = p;
- }
- if( pPg->pPrevFree ){
- pPg->pPrevFree->pNextFree = pPg->pNextFree;
- }else{
- pPg->pPager->pFirst = pPg->pNextFree;
- }
- if( pPg->pNextFree ){
- pPg->pNextFree->pPrevFree = pPg->pPrevFree;
- }else{
- pPg->pPager->pLast = pPg->pPrevFree;
- }
- pPg->pPager->nRef++;
- }
- pPg->nRef++;
- REFINFO(pPg);
-}
-
-/*
-** Increment the reference count for a page. The input pointer is
-** a reference to the page data.
-*/
-int sqlitepager_ref(void *pData){
- PgHdr *pPg = DATA_TO_PGHDR(pData);
- page_ref(pPg);
- return SQLITE_OK;
-}
-
-/*
-** Sync the journal. In other words, make sure all the pages that have
-** been written to the journal have actually reached the surface of the
-** disk. It is not safe to modify the original database file until after
-** the journal has been synced. If the original database is modified before
-** the journal is synced and a power failure occurs, the unsynced journal
-** data would be lost and we would be unable to completely rollback the
-** database changes. Database corruption would occur.
-**
-** This routine also updates the nRec field in the header of the journal.
-** (See comments on the pager_playback() routine for additional information.)
-** If the sync mode is FULL, two syncs will occur. First the whole journal
-** is synced, then the nRec field is updated, then a second sync occurs.
-**
-** For temporary databases, we do not care if we are able to rollback
-** after a power failure, so sync occurs.
-**
-** This routine clears the needSync field of every page current held in
-** memory.
-*/
-static int syncJournal(Pager *pPager){
- PgHdr *pPg;
- int rc = SQLITE_OK;
-
- /* Sync the journal before modifying the main database
- ** (assuming there is a journal and it needs to be synced.)
- */
- if( pPager->needSync ){
- if( !pPager->tempFile ){
- assert( pPager->journalOpen );
- /* assert( !pPager->noSync ); // noSync might be set if synchronous
- ** was turned off after the transaction was started. Ticket #615 */
-#ifndef NDEBUG
- {
- /* Make sure the pPager->nRec counter we are keeping agrees
- ** with the nRec computed from the size of the journal file.
- */
- off_t hdrSz, pgSz, jSz;
- hdrSz = JOURNAL_HDR_SZ(journal_format);
- pgSz = JOURNAL_PG_SZ(journal_format);
- rc = sqliteOsFileSize(&pPager->jfd, &jSz);
- if( rc!=0 ) return rc;
- assert( pPager->nRec*pgSz+hdrSz==jSz );
- }
-#endif
- if( journal_format>=3 ){
- /* Write the nRec value into the journal file header */
- off_t szJ;
- if( pPager->fullSync ){
- TRACE1("SYNC\n");
- rc = sqliteOsSync(&pPager->jfd);
- if( rc!=0 ) return rc;
- }
- sqliteOsSeek(&pPager->jfd, sizeof(aJournalMagic1));
- rc = write32bits(&pPager->jfd, pPager->nRec);
- if( rc ) return rc;
- szJ = JOURNAL_HDR_SZ(journal_format) +
- pPager->nRec*JOURNAL_PG_SZ(journal_format);
- sqliteOsSeek(&pPager->jfd, szJ);
- }
- TRACE1("SYNC\n");
- rc = sqliteOsSync(&pPager->jfd);
- if( rc!=0 ) return rc;
- pPager->journalStarted = 1;
- }
- pPager->needSync = 0;
-
- /* Erase the needSync flag from every page.
- */
- for(pPg=pPager->pAll; pPg; pPg=pPg->pNextAll){
- pPg->needSync = 0;
- }
- pPager->pFirstSynced = pPager->pFirst;
- }
-
-#ifndef NDEBUG
- /* If the Pager.needSync flag is clear then the PgHdr.needSync
- ** flag must also be clear for all pages. Verify that this
- ** invariant is true.
- */
- else{
- for(pPg=pPager->pAll; pPg; pPg=pPg->pNextAll){
- assert( pPg->needSync==0 );
- }
- assert( pPager->pFirstSynced==pPager->pFirst );
- }
-#endif
-
- return rc;
-}
-
-/*
-** Given a list of pages (connected by the PgHdr.pDirty pointer) write
-** every one of those pages out to the database file and mark them all
-** as clean.
-*/
-static int pager_write_pagelist(PgHdr *pList){
- Pager *pPager;
- int rc;
-
- if( pList==0 ) return SQLITE_OK;
- pPager = pList->pPager;
- while( pList ){
- assert( pList->dirty );
- sqliteOsSeek(&pPager->fd, (pList->pgno-1)*(off_t)SQLITE_PAGE_SIZE);
- CODEC(pPager, PGHDR_TO_DATA(pList), pList->pgno, 6);
- TRACE2("STORE %d\n", pList->pgno);
- rc = sqliteOsWrite(&pPager->fd, PGHDR_TO_DATA(pList), SQLITE_PAGE_SIZE);
- CODEC(pPager, PGHDR_TO_DATA(pList), pList->pgno, 0);
- if( rc ) return rc;
- pList->dirty = 0;
- pList = pList->pDirty;
- }
- return SQLITE_OK;
-}
-
-/*
-** Collect every dirty page into a dirty list and
-** return a pointer to the head of that list. All pages are
-** collected even if they are still in use.
-*/
-static PgHdr *pager_get_all_dirty_pages(Pager *pPager){
- PgHdr *p, *pList;
- pList = 0;
- for(p=pPager->pAll; p; p=p->pNextAll){
- if( p->dirty ){
- p->pDirty = pList;
- pList = p;
- }
- }
- return pList;
-}
-
-/*
-** Acquire a page.
-**
-** A read lock on the disk file is obtained when the first page is acquired.
-** This read lock is dropped when the last page is released.
-**
-** A _get works for any page number greater than 0. If the database
-** file is smaller than the requested page, then no actual disk
-** read occurs and the memory image of the page is initialized to
-** all zeros. The extra data appended to a page is always initialized
-** to zeros the first time a page is loaded into memory.
-**
-** The acquisition might fail for several reasons. In all cases,
-** an appropriate error code is returned and *ppPage is set to NULL.
-**
-** See also sqlitepager_lookup(). Both this routine and _lookup() attempt
-** to find a page in the in-memory cache first. If the page is not already
-** in memory, this routine goes to disk to read it in whereas _lookup()
-** just returns 0. This routine acquires a read-lock the first time it
-** has to go to disk, and could also playback an old journal if necessary.
-** Since _lookup() never goes to disk, it never has to deal with locks
-** or journal files.
-*/
-int sqlitepager_get(Pager *pPager, Pgno pgno, void **ppPage){
- PgHdr *pPg;
- int rc;
-
- /* Make sure we have not hit any critical errors.
- */
- assert( pPager!=0 );
- assert( pgno!=0 );
- *ppPage = 0;
- if( pPager->errMask & ~(PAGER_ERR_FULL) ){
- return pager_errcode(pPager);
- }
-
- /* If this is the first page accessed, then get a read lock
- ** on the database file.
- */
- if( pPager->nRef==0 ){
- rc = sqliteOsReadLock(&pPager->fd);
- if( rc!=SQLITE_OK ){
- return rc;
- }
- pPager->state = SQLITE_READLOCK;
-
- /* If a journal file exists, try to play it back.
- */
- if( pPager->useJournal && sqliteOsFileExists(pPager->zJournal) ){
- int rc;
-
- /* Get a write lock on the database
- */
- rc = sqliteOsWriteLock(&pPager->fd);
- if( rc!=SQLITE_OK ){
- if( sqliteOsUnlock(&pPager->fd)!=SQLITE_OK ){
- /* This should never happen! */
- rc = SQLITE_INTERNAL;
- }
- return rc;
- }
- pPager->state = SQLITE_WRITELOCK;
-
- /* Open the journal for reading only. Return SQLITE_BUSY if
- ** we are unable to open the journal file.
- **
- ** The journal file does not need to be locked itself. The
- ** journal file is never open unless the main database file holds
- ** a write lock, so there is never any chance of two or more
- ** processes opening the journal at the same time.
- */
- rc = sqliteOsOpenReadOnly(pPager->zJournal, &pPager->jfd);
- if( rc!=SQLITE_OK ){
- rc = sqliteOsUnlock(&pPager->fd);
- assert( rc==SQLITE_OK );
- return SQLITE_BUSY;
- }
- pPager->journalOpen = 1;
- pPager->journalStarted = 0;
-
- /* Playback and delete the journal. Drop the database write
- ** lock and reacquire the read lock.
- */
- rc = pager_playback(pPager, 0);
- if( rc!=SQLITE_OK ){
- return rc;
- }
- }
- pPg = 0;
- }else{
- /* Search for page in cache */
- pPg = pager_lookup(pPager, pgno);
- }
- if( pPg==0 ){
- /* The requested page is not in the page cache. */
- int h;
- pPager->nMiss++;
- if( pPager->nPage<pPager->mxPage || pPager->pFirst==0 ){
- /* Create a new page */
- pPg = sqliteMallocRaw( sizeof(*pPg) + SQLITE_PAGE_SIZE
- + sizeof(u32) + pPager->nExtra );
- if( pPg==0 ){
- pager_unwritelock(pPager);
- pPager->errMask |= PAGER_ERR_MEM;
- return SQLITE_NOMEM;
- }
- memset(pPg, 0, sizeof(*pPg));
- pPg->pPager = pPager;
- pPg->pNextAll = pPager->pAll;
- if( pPager->pAll ){
- pPager->pAll->pPrevAll = pPg;
- }
- pPg->pPrevAll = 0;
- pPager->pAll = pPg;
- pPager->nPage++;
- }else{
- /* Find a page to recycle. Try to locate a page that does not
- ** require us to do an fsync() on the journal.
- */
- pPg = pPager->pFirstSynced;
-
- /* If we could not find a page that does not require an fsync()
- ** on the journal file then fsync the journal file. This is a
- ** very slow operation, so we work hard to avoid it. But sometimes
- ** it can't be helped.
- */
- if( pPg==0 ){
- int rc = syncJournal(pPager);
- if( rc!=0 ){
- sqlitepager_rollback(pPager);
- return SQLITE_IOERR;
- }
- pPg = pPager->pFirst;
- }
- assert( pPg->nRef==0 );
-
- /* Write the page to the database file if it is dirty.
- */
- if( pPg->dirty ){
- assert( pPg->needSync==0 );
- pPg->pDirty = 0;
- rc = pager_write_pagelist( pPg );
- if( rc!=SQLITE_OK ){
- sqlitepager_rollback(pPager);
- return SQLITE_IOERR;
- }
- }
- assert( pPg->dirty==0 );
-
- /* If the page we are recycling is marked as alwaysRollback, then
- ** set the global alwaysRollback flag, thus disabling the
- ** sqlite_dont_rollback() optimization for the rest of this transaction.
- ** It is necessary to do this because the page marked alwaysRollback
- ** might be reloaded at a later time but at that point we won't remember
- ** that is was marked alwaysRollback. This means that all pages must
- ** be marked as alwaysRollback from here on out.
- */
- if( pPg->alwaysRollback ){
- pPager->alwaysRollback = 1;
- }
-
- /* Unlink the old page from the free list and the hash table
- */
- if( pPg==pPager->pFirstSynced ){
- PgHdr *p = pPg->pNextFree;
- while( p && p->needSync ){ p = p->pNextFree; }
- pPager->pFirstSynced = p;
- }
- if( pPg->pPrevFree ){
- pPg->pPrevFree->pNextFree = pPg->pNextFree;
- }else{
- assert( pPager->pFirst==pPg );
- pPager->pFirst = pPg->pNextFree;
- }
- if( pPg->pNextFree ){
- pPg->pNextFree->pPrevFree = pPg->pPrevFree;
- }else{
- assert( pPager->pLast==pPg );
- pPager->pLast = pPg->pPrevFree;
- }
- pPg->pNextFree = pPg->pPrevFree = 0;
- if( pPg->pNextHash ){
- pPg->pNextHash->pPrevHash = pPg->pPrevHash;
- }
- if( pPg->pPrevHash ){
- pPg->pPrevHash->pNextHash = pPg->pNextHash;
- }else{
- h = pager_hash(pPg->pgno);
- assert( pPager->aHash[h]==pPg );
- pPager->aHash[h] = pPg->pNextHash;
- }
- pPg->pNextHash = pPg->pPrevHash = 0;
- pPager->nOvfl++;
- }
- pPg->pgno = pgno;
- if( pPager->aInJournal && (int)pgno<=pPager->origDbSize ){
- sqliteCheckMemory(pPager->aInJournal, pgno/8);
- assert( pPager->journalOpen );
- pPg->inJournal = (pPager->aInJournal[pgno/8] & (1<<(pgno&7)))!=0;
- pPg->needSync = 0;
- }else{
- pPg->inJournal = 0;
- pPg->needSync = 0;
- }
- if( pPager->aInCkpt && (int)pgno<=pPager->ckptSize
- && (pPager->aInCkpt[pgno/8] & (1<<(pgno&7)))!=0 ){
- page_add_to_ckpt_list(pPg);
- }else{
- page_remove_from_ckpt_list(pPg);
- }
- pPg->dirty = 0;
- pPg->nRef = 1;
- REFINFO(pPg);
- pPager->nRef++;
- h = pager_hash(pgno);
- pPg->pNextHash = pPager->aHash[h];
- pPager->aHash[h] = pPg;
- if( pPg->pNextHash ){
- assert( pPg->pNextHash->pPrevHash==0 );
- pPg->pNextHash->pPrevHash = pPg;
- }
- if( pPager->nExtra>0 ){
- memset(PGHDR_TO_EXTRA(pPg), 0, pPager->nExtra);
- }
- if( pPager->dbSize<0 ) sqlitepager_pagecount(pPager);
- if( pPager->errMask!=0 ){
- sqlitepager_unref(PGHDR_TO_DATA(pPg));
- rc = pager_errcode(pPager);
- return rc;
- }
- if( pPager->dbSize<(int)pgno ){
- memset(PGHDR_TO_DATA(pPg), 0, SQLITE_PAGE_SIZE);
- }else{
- int rc;
- sqliteOsSeek(&pPager->fd, (pgno-1)*(off_t)SQLITE_PAGE_SIZE);
- rc = sqliteOsRead(&pPager->fd, PGHDR_TO_DATA(pPg), SQLITE_PAGE_SIZE);
- TRACE2("FETCH %d\n", pPg->pgno);
- CODEC(pPager, PGHDR_TO_DATA(pPg), pPg->pgno, 3);
- if( rc!=SQLITE_OK ){
- off_t fileSize;
- if( sqliteOsFileSize(&pPager->fd,&fileSize)!=SQLITE_OK
- || fileSize>=pgno*SQLITE_PAGE_SIZE ){
- sqlitepager_unref(PGHDR_TO_DATA(pPg));
- return rc;
- }else{
- memset(PGHDR_TO_DATA(pPg), 0, SQLITE_PAGE_SIZE);
- }
- }
- }
- }else{
- /* The requested page is in the page cache. */
- pPager->nHit++;
- page_ref(pPg);
- }
- *ppPage = PGHDR_TO_DATA(pPg);
- return SQLITE_OK;
-}
-
-/*
-** Acquire a page if it is already in the in-memory cache. Do
-** not read the page from disk. Return a pointer to the page,
-** or 0 if the page is not in cache.
-**
-** See also sqlitepager_get(). The difference between this routine
-** and sqlitepager_get() is that _get() will go to the disk and read
-** in the page if the page is not already in cache. This routine
-** returns NULL if the page is not in cache or if a disk I/O error
-** has ever happened.
-*/
-void *sqlitepager_lookup(Pager *pPager, Pgno pgno){
- PgHdr *pPg;
-
- assert( pPager!=0 );
- assert( pgno!=0 );
- if( pPager->errMask & ~(PAGER_ERR_FULL) ){
- return 0;
- }
- /* if( pPager->nRef==0 ){
- ** return 0;
- ** }
- */
- pPg = pager_lookup(pPager, pgno);
- if( pPg==0 ) return 0;
- page_ref(pPg);
- return PGHDR_TO_DATA(pPg);
-}
-
-/*
-** Release a page.
-**
-** If the number of references to the page drop to zero, then the
-** page is added to the LRU list. When all references to all pages
-** are released, a rollback occurs and the lock on the database is
-** removed.
-*/
-int sqlitepager_unref(void *pData){
- PgHdr *pPg;
-
- /* Decrement the reference count for this page
- */
- pPg = DATA_TO_PGHDR(pData);
- assert( pPg->nRef>0 );
- pPg->nRef--;
- REFINFO(pPg);
-
- /* When the number of references to a page reach 0, call the
- ** destructor and add the page to the freelist.
- */
- if( pPg->nRef==0 ){
- Pager *pPager;
- pPager = pPg->pPager;
- pPg->pNextFree = 0;
- pPg->pPrevFree = pPager->pLast;
- pPager->pLast = pPg;
- if( pPg->pPrevFree ){
- pPg->pPrevFree->pNextFree = pPg;
- }else{
- pPager->pFirst = pPg;
- }
- if( pPg->needSync==0 && pPager->pFirstSynced==0 ){
- pPager->pFirstSynced = pPg;
- }
- if( pPager->xDestructor ){
- pPager->xDestructor(pData);
- }
-
- /* When all pages reach the freelist, drop the read lock from
- ** the database file.
- */
- pPager->nRef--;
- assert( pPager->nRef>=0 );
- if( pPager->nRef==0 ){
- pager_reset(pPager);
- }
- }
- return SQLITE_OK;
-}
-
-/*
-** Create a journal file for pPager. There should already be a write
-** lock on the database file when this routine is called.
-**
-** Return SQLITE_OK if everything. Return an error code and release the
-** write lock if anything goes wrong.
-*/
-static int pager_open_journal(Pager *pPager){
- int rc;
- assert( pPager->state==SQLITE_WRITELOCK );
- assert( pPager->journalOpen==0 );
- assert( pPager->useJournal );
- sqlitepager_pagecount(pPager);
- pPager->aInJournal = sqliteMalloc( pPager->dbSize/8 + 1 );
- if( pPager->aInJournal==0 ){
- sqliteOsReadLock(&pPager->fd);
- pPager->state = SQLITE_READLOCK;
- return SQLITE_NOMEM;
- }
- rc = sqliteOsOpenExclusive(pPager->zJournal, &pPager->jfd,pPager->tempFile);
- if( rc!=SQLITE_OK ){
- sqliteFree(pPager->aInJournal);
- pPager->aInJournal = 0;
- sqliteOsReadLock(&pPager->fd);
- pPager->state = SQLITE_READLOCK;
- return SQLITE_CANTOPEN;
- }
- sqliteOsOpenDirectory(pPager->zDirectory, &pPager->jfd);
- pPager->journalOpen = 1;
- pPager->journalStarted = 0;
- pPager->needSync = 0;
- pPager->alwaysRollback = 0;
- pPager->nRec = 0;
- if( pPager->errMask!=0 ){
- rc = pager_errcode(pPager);
- return rc;
- }
- pPager->origDbSize = pPager->dbSize;
- if( journal_format==JOURNAL_FORMAT_3 ){
- rc = sqliteOsWrite(&pPager->jfd, aJournalMagic3, sizeof(aJournalMagic3));
- if( rc==SQLITE_OK ){
- rc = write32bits(&pPager->jfd, pPager->noSync ? 0xffffffff : 0);
- }
- if( rc==SQLITE_OK ){
- sqliteRandomness(sizeof(pPager->cksumInit), &pPager->cksumInit);
- rc = write32bits(&pPager->jfd, pPager->cksumInit);
- }
- }else if( journal_format==JOURNAL_FORMAT_2 ){
- rc = sqliteOsWrite(&pPager->jfd, aJournalMagic2, sizeof(aJournalMagic2));
- }else{
- assert( journal_format==JOURNAL_FORMAT_1 );
- rc = sqliteOsWrite(&pPager->jfd, aJournalMagic1, sizeof(aJournalMagic1));
- }
- if( rc==SQLITE_OK ){
- rc = write32bits(&pPager->jfd, pPager->dbSize);
- }
- if( pPager->ckptAutoopen && rc==SQLITE_OK ){
- rc = sqlitepager_ckpt_begin(pPager);
- }
- if( rc!=SQLITE_OK ){
- rc = pager_unwritelock(pPager);
- if( rc==SQLITE_OK ){
- rc = SQLITE_FULL;
- }
- }
- return rc;
-}
-
-/*
-** Acquire a write-lock on the database. The lock is removed when
-** the any of the following happen:
-**
-** * sqlitepager_commit() is called.
-** * sqlitepager_rollback() is called.
-** * sqlitepager_close() is called.
-** * sqlitepager_unref() is called to on every outstanding page.
-**
-** The parameter to this routine is a pointer to any open page of the
-** database file. Nothing changes about the page - it is used merely
-** to acquire a pointer to the Pager structure and as proof that there
-** is already a read-lock on the database.
-**
-** A journal file is opened if this is not a temporary file. For
-** temporary files, the opening of the journal file is deferred until
-** there is an actual need to write to the journal.
-**
-** If the database is already write-locked, this routine is a no-op.
-*/
-int sqlitepager_begin(void *pData){
- PgHdr *pPg = DATA_TO_PGHDR(pData);
- Pager *pPager = pPg->pPager;
- int rc = SQLITE_OK;
- assert( pPg->nRef>0 );
- assert( pPager->state!=SQLITE_UNLOCK );
- if( pPager->state==SQLITE_READLOCK ){
- assert( pPager->aInJournal==0 );
- rc = sqliteOsWriteLock(&pPager->fd);
- if( rc!=SQLITE_OK ){
- return rc;
- }
- pPager->state = SQLITE_WRITELOCK;
- pPager->dirtyFile = 0;
- TRACE1("TRANSACTION\n");
- if( pPager->useJournal && !pPager->tempFile ){
- rc = pager_open_journal(pPager);
- }
- }
- return rc;
-}
-
-/*
-** Mark a data page as writeable. The page is written into the journal
-** if it is not there already. This routine must be called before making
-** changes to a page.
-**
-** The first time this routine is called, the pager creates a new
-** journal and acquires a write lock on the database. If the write
-** lock could not be acquired, this routine returns SQLITE_BUSY. The
-** calling routine must check for that return value and be careful not to
-** change any page data until this routine returns SQLITE_OK.
-**
-** If the journal file could not be written because the disk is full,
-** then this routine returns SQLITE_FULL and does an immediate rollback.
-** All subsequent write attempts also return SQLITE_FULL until there
-** is a call to sqlitepager_commit() or sqlitepager_rollback() to
-** reset.
-*/
-int sqlitepager_write(void *pData){
- PgHdr *pPg = DATA_TO_PGHDR(pData);
- Pager *pPager = pPg->pPager;
- int rc = SQLITE_OK;
-
- /* Check for errors
- */
- if( pPager->errMask ){
- return pager_errcode(pPager);
- }
- if( pPager->readOnly ){
- return SQLITE_PERM;
- }
-
- /* Mark the page as dirty. If the page has already been written
- ** to the journal then we can return right away.
- */
- pPg->dirty = 1;
- if( pPg->inJournal && (pPg->inCkpt || pPager->ckptInUse==0) ){
- pPager->dirtyFile = 1;
- return SQLITE_OK;
- }
-
- /* If we get this far, it means that the page needs to be
- ** written to the transaction journal or the ckeckpoint journal
- ** or both.
- **
- ** First check to see that the transaction journal exists and
- ** create it if it does not.
- */
- assert( pPager->state!=SQLITE_UNLOCK );
- rc = sqlitepager_begin(pData);
- if( rc!=SQLITE_OK ){
- return rc;
- }
- assert( pPager->state==SQLITE_WRITELOCK );
- if( !pPager->journalOpen && pPager->useJournal ){
- rc = pager_open_journal(pPager);
- if( rc!=SQLITE_OK ) return rc;
- }
- assert( pPager->journalOpen || !pPager->useJournal );
- pPager->dirtyFile = 1;
-
- /* The transaction journal now exists and we have a write lock on the
- ** main database file. Write the current page to the transaction
- ** journal if it is not there already.
- */
- if( !pPg->inJournal && pPager->useJournal ){
- if( (int)pPg->pgno <= pPager->origDbSize ){
- int szPg;
- u32 saved;
- if( journal_format>=JOURNAL_FORMAT_3 ){
- u32 cksum = pager_cksum(pPager, pPg->pgno, pData);
- saved = *(u32*)PGHDR_TO_EXTRA(pPg);
- store32bits(cksum, pPg, SQLITE_PAGE_SIZE);
- szPg = SQLITE_PAGE_SIZE+8;
- }else{
- szPg = SQLITE_PAGE_SIZE+4;
- }
- store32bits(pPg->pgno, pPg, -4);
- CODEC(pPager, pData, pPg->pgno, 7);
- rc = sqliteOsWrite(&pPager->jfd, &((char*)pData)[-4], szPg);
- TRACE3("JOURNAL %d %d\n", pPg->pgno, pPg->needSync);
- CODEC(pPager, pData, pPg->pgno, 0);
- if( journal_format>=JOURNAL_FORMAT_3 ){
- *(u32*)PGHDR_TO_EXTRA(pPg) = saved;
- }
- if( rc!=SQLITE_OK ){
- sqlitepager_rollback(pPager);
- pPager->errMask |= PAGER_ERR_FULL;
- return rc;
- }
- pPager->nRec++;
- assert( pPager->aInJournal!=0 );
- pPager->aInJournal[pPg->pgno/8] |= 1<<(pPg->pgno&7);
- pPg->needSync = !pPager->noSync;
- pPg->inJournal = 1;
- if( pPager->ckptInUse ){
- pPager->aInCkpt[pPg->pgno/8] |= 1<<(pPg->pgno&7);
- page_add_to_ckpt_list(pPg);
- }
- }else{
- pPg->needSync = !pPager->journalStarted && !pPager->noSync;
- TRACE3("APPEND %d %d\n", pPg->pgno, pPg->needSync);
- }
- if( pPg->needSync ){
- pPager->needSync = 1;
- }
- }
-
- /* If the checkpoint journal is open and the page is not in it,
- ** then write the current page to the checkpoint journal. Note that
- ** the checkpoint journal always uses the simplier format 2 that lacks
- ** checksums. The header is also omitted from the checkpoint journal.
- */
- if( pPager->ckptInUse && !pPg->inCkpt && (int)pPg->pgno<=pPager->ckptSize ){
- assert( pPg->inJournal || (int)pPg->pgno>pPager->origDbSize );
- store32bits(pPg->pgno, pPg, -4);
- CODEC(pPager, pData, pPg->pgno, 7);
- rc = sqliteOsWrite(&pPager->cpfd, &((char*)pData)[-4], SQLITE_PAGE_SIZE+4);
- TRACE2("CKPT-JOURNAL %d\n", pPg->pgno);
- CODEC(pPager, pData, pPg->pgno, 0);
- if( rc!=SQLITE_OK ){
- sqlitepager_rollback(pPager);
- pPager->errMask |= PAGER_ERR_FULL;
- return rc;
- }
- pPager->ckptNRec++;
- assert( pPager->aInCkpt!=0 );
- pPager->aInCkpt[pPg->pgno/8] |= 1<<(pPg->pgno&7);
- page_add_to_ckpt_list(pPg);
- }
-
- /* Update the database size and return.
- */
- if( pPager->dbSize<(int)pPg->pgno ){
- pPager->dbSize = pPg->pgno;
- }
- return rc;
-}
-
-/*
-** Return TRUE if the page given in the argument was previously passed
-** to sqlitepager_write(). In other words, return TRUE if it is ok
-** to change the content of the page.
-*/
-int sqlitepager_iswriteable(void *pData){
- PgHdr *pPg = DATA_TO_PGHDR(pData);
- return pPg->dirty;
-}
-
-/*
-** Replace the content of a single page with the information in the third
-** argument.
-*/
-int sqlitepager_overwrite(Pager *pPager, Pgno pgno, void *pData){
- void *pPage;
- int rc;
-
- rc = sqlitepager_get(pPager, pgno, &pPage);
- if( rc==SQLITE_OK ){
- rc = sqlitepager_write(pPage);
- if( rc==SQLITE_OK ){
- memcpy(pPage, pData, SQLITE_PAGE_SIZE);
- }
- sqlitepager_unref(pPage);
- }
- return rc;
-}
-
-/*
-** A call to this routine tells the pager that it is not necessary to
-** write the information on page "pgno" back to the disk, even though
-** that page might be marked as dirty.
-**
-** The overlying software layer calls this routine when all of the data
-** on the given page is unused. The pager marks the page as clean so
-** that it does not get written to disk.
-**
-** Tests show that this optimization, together with the
-** sqlitepager_dont_rollback() below, more than double the speed
-** of large INSERT operations and quadruple the speed of large DELETEs.
-**
-** When this routine is called, set the alwaysRollback flag to true.
-** Subsequent calls to sqlitepager_dont_rollback() for the same page
-** will thereafter be ignored. This is necessary to avoid a problem
-** where a page with data is added to the freelist during one part of
-** a transaction then removed from the freelist during a later part
-** of the same transaction and reused for some other purpose. When it
-** is first added to the freelist, this routine is called. When reused,
-** the dont_rollback() routine is called. But because the page contains
-** critical data, we still need to be sure it gets rolled back in spite
-** of the dont_rollback() call.
-*/
-void sqlitepager_dont_write(Pager *pPager, Pgno pgno){
- PgHdr *pPg;
-
- pPg = pager_lookup(pPager, pgno);
- pPg->alwaysRollback = 1;
- if( pPg && pPg->dirty ){
- if( pPager->dbSize==(int)pPg->pgno && pPager->origDbSize<pPager->dbSize ){
- /* If this pages is the last page in the file and the file has grown
- ** during the current transaction, then do NOT mark the page as clean.
- ** When the database file grows, we must make sure that the last page
- ** gets written at least once so that the disk file will be the correct
- ** size. If you do not write this page and the size of the file
- ** on the disk ends up being too small, that can lead to database
- ** corruption during the next transaction.
- */
- }else{
- TRACE2("DONT_WRITE %d\n", pgno);
- pPg->dirty = 0;
- }
- }
-}
-
-/*
-** A call to this routine tells the pager that if a rollback occurs,
-** it is not necessary to restore the data on the given page. This
-** means that the pager does not have to record the given page in the
-** rollback journal.
-*/
-void sqlitepager_dont_rollback(void *pData){
- PgHdr *pPg = DATA_TO_PGHDR(pData);
- Pager *pPager = pPg->pPager;
-
- if( pPager->state!=SQLITE_WRITELOCK || pPager->journalOpen==0 ) return;
- if( pPg->alwaysRollback || pPager->alwaysRollback ) return;
- if( !pPg->inJournal && (int)pPg->pgno <= pPager->origDbSize ){
- assert( pPager->aInJournal!=0 );
- pPager->aInJournal[pPg->pgno/8] |= 1<<(pPg->pgno&7);
- pPg->inJournal = 1;
- if( pPager->ckptInUse ){
- pPager->aInCkpt[pPg->pgno/8] |= 1<<(pPg->pgno&7);
- page_add_to_ckpt_list(pPg);
- }
- TRACE2("DONT_ROLLBACK %d\n", pPg->pgno);
- }
- if( pPager->ckptInUse && !pPg->inCkpt && (int)pPg->pgno<=pPager->ckptSize ){
- assert( pPg->inJournal || (int)pPg->pgno>pPager->origDbSize );
- assert( pPager->aInCkpt!=0 );
- pPager->aInCkpt[pPg->pgno/8] |= 1<<(pPg->pgno&7);
- page_add_to_ckpt_list(pPg);
- }
-}
-
-/*
-** Commit all changes to the database and release the write lock.
-**
-** If the commit fails for any reason, a rollback attempt is made
-** and an error code is returned. If the commit worked, SQLITE_OK
-** is returned.
-*/
-int sqlitepager_commit(Pager *pPager){
- int rc;
- PgHdr *pPg;
-
- if( pPager->errMask==PAGER_ERR_FULL ){
- rc = sqlitepager_rollback(pPager);
- if( rc==SQLITE_OK ){
- rc = SQLITE_FULL;
- }
- return rc;
- }
- if( pPager->errMask!=0 ){
- rc = pager_errcode(pPager);
- return rc;
- }
- if( pPager->state!=SQLITE_WRITELOCK ){
- return SQLITE_ERROR;
- }
- TRACE1("COMMIT\n");
- if( pPager->dirtyFile==0 ){
- /* Exit early (without doing the time-consuming sqliteOsSync() calls)
- ** if there have been no changes to the database file. */
- assert( pPager->needSync==0 );
- rc = pager_unwritelock(pPager);
- pPager->dbSize = -1;
- return rc;
- }
- assert( pPager->journalOpen );
- rc = syncJournal(pPager);
- if( rc!=SQLITE_OK ){
- goto commit_abort;
- }
- pPg = pager_get_all_dirty_pages(pPager);
- if( pPg ){
- rc = pager_write_pagelist(pPg);
- if( rc || (!pPager->noSync && sqliteOsSync(&pPager->fd)!=SQLITE_OK) ){
- goto commit_abort;
- }
- }
- rc = pager_unwritelock(pPager);
- pPager->dbSize = -1;
- return rc;
-
- /* Jump here if anything goes wrong during the commit process.
- */
-commit_abort:
- rc = sqlitepager_rollback(pPager);
- if( rc==SQLITE_OK ){
- rc = SQLITE_FULL;
- }
- return rc;
-}
-
-/*
-** Rollback all changes. The database falls back to read-only mode.
-** All in-memory cache pages revert to their original data contents.
-** The journal is deleted.
-**
-** This routine cannot fail unless some other process is not following
-** the correct locking protocol (SQLITE_PROTOCOL) or unless some other
-** process is writing trash into the journal file (SQLITE_CORRUPT) or
-** unless a prior malloc() failed (SQLITE_NOMEM). Appropriate error
-** codes are returned for all these occasions. Otherwise,
-** SQLITE_OK is returned.
-*/
-int sqlitepager_rollback(Pager *pPager){
- int rc;
- TRACE1("ROLLBACK\n");
- if( !pPager->dirtyFile || !pPager->journalOpen ){
- rc = pager_unwritelock(pPager);
- pPager->dbSize = -1;
- return rc;
- }
-
- if( pPager->errMask!=0 && pPager->errMask!=PAGER_ERR_FULL ){
- if( pPager->state>=SQLITE_WRITELOCK ){
- pager_playback(pPager, 1);
- }
- return pager_errcode(pPager);
- }
- if( pPager->state!=SQLITE_WRITELOCK ){
- return SQLITE_OK;
- }
- rc = pager_playback(pPager, 1);
- if( rc!=SQLITE_OK ){
- rc = SQLITE_CORRUPT;
- pPager->errMask |= PAGER_ERR_CORRUPT;
- }
- pPager->dbSize = -1;
- return rc;
-}
-
-/*
-** Return TRUE if the database file is opened read-only. Return FALSE
-** if the database is (in theory) writable.
-*/
-int sqlitepager_isreadonly(Pager *pPager){
- return pPager->readOnly;
-}
-
-/*
-** This routine is used for testing and analysis only.
-*/
-int *sqlitepager_stats(Pager *pPager){
- static int a[9];
- a[0] = pPager->nRef;
- a[1] = pPager->nPage;
- a[2] = pPager->mxPage;
- a[3] = pPager->dbSize;
- a[4] = pPager->state;
- a[5] = pPager->errMask;
- a[6] = pPager->nHit;
- a[7] = pPager->nMiss;
- a[8] = pPager->nOvfl;
- return a;
-}
-
-/*
-** Set the checkpoint.
-**
-** This routine should be called with the transaction journal already
-** open. A new checkpoint journal is created that can be used to rollback
-** changes of a single SQL command within a larger transaction.
-*/
-int sqlitepager_ckpt_begin(Pager *pPager){
- int rc;
- char zTemp[SQLITE_TEMPNAME_SIZE];
- if( !pPager->journalOpen ){
- pPager->ckptAutoopen = 1;
- return SQLITE_OK;
- }
- assert( pPager->journalOpen );
- assert( !pPager->ckptInUse );
- pPager->aInCkpt = sqliteMalloc( pPager->dbSize/8 + 1 );
- if( pPager->aInCkpt==0 ){
- sqliteOsReadLock(&pPager->fd);
- return SQLITE_NOMEM;
- }
-#ifndef NDEBUG
- rc = sqliteOsFileSize(&pPager->jfd, &pPager->ckptJSize);
- if( rc ) goto ckpt_begin_failed;
- assert( pPager->ckptJSize ==
- pPager->nRec*JOURNAL_PG_SZ(journal_format)+JOURNAL_HDR_SZ(journal_format) );
-#endif
- pPager->ckptJSize = pPager->nRec*JOURNAL_PG_SZ(journal_format)
- + JOURNAL_HDR_SZ(journal_format);
- pPager->ckptSize = pPager->dbSize;
- if( !pPager->ckptOpen ){
- rc = sqlitepager_opentemp(zTemp, &pPager->cpfd);
- if( rc ) goto ckpt_begin_failed;
- pPager->ckptOpen = 1;
- pPager->ckptNRec = 0;
- }
- pPager->ckptInUse = 1;
- return SQLITE_OK;
-
-ckpt_begin_failed:
- if( pPager->aInCkpt ){
- sqliteFree(pPager->aInCkpt);
- pPager->aInCkpt = 0;
- }
- return rc;
-}
-
-/*
-** Commit a checkpoint.
-*/
-int sqlitepager_ckpt_commit(Pager *pPager){
- if( pPager->ckptInUse ){
- PgHdr *pPg, *pNext;
- sqliteOsSeek(&pPager->cpfd, 0);
- /* sqliteOsTruncate(&pPager->cpfd, 0); */
- pPager->ckptNRec = 0;
- pPager->ckptInUse = 0;
- sqliteFree( pPager->aInCkpt );
- pPager->aInCkpt = 0;
- for(pPg=pPager->pCkpt; pPg; pPg=pNext){
- pNext = pPg->pNextCkpt;
- assert( pPg->inCkpt );
- pPg->inCkpt = 0;
- pPg->pPrevCkpt = pPg->pNextCkpt = 0;
- }
- pPager->pCkpt = 0;
- }
- pPager->ckptAutoopen = 0;
- return SQLITE_OK;
-}
-
-/*
-** Rollback a checkpoint.
-*/
-int sqlitepager_ckpt_rollback(Pager *pPager){
- int rc;
- if( pPager->ckptInUse ){
- rc = pager_ckpt_playback(pPager);
- sqlitepager_ckpt_commit(pPager);
- }else{
- rc = SQLITE_OK;
- }
- pPager->ckptAutoopen = 0;
- return rc;
-}
-
-/*
-** Return the full pathname of the database file.
-*/
-const char *sqlitepager_filename(Pager *pPager){
- return pPager->zFilename;
-}
-
-/*
-** Set the codec for this pager
-*/
-void sqlitepager_set_codec(
- Pager *pPager,
- void (*xCodec)(void*,void*,Pgno,int),
- void *pCodecArg
-){
- pPager->xCodec = xCodec;
- pPager->pCodecArg = pCodecArg;
-}
-
-#ifdef SQLITE_TEST
-/*
-** Print a listing of all referenced pages and their ref count.
-*/
-void sqlitepager_refdump(Pager *pPager){
- PgHdr *pPg;
- for(pPg=pPager->pAll; pPg; pPg=pPg->pNextAll){
- if( pPg->nRef<=0 ) continue;
- printf("PAGE %3d addr=0x%08x nRef=%d\n",
- pPg->pgno, (int)PGHDR_TO_DATA(pPg), pPg->nRef);
- }
-}
-#endif
diff --git a/ext/sqlite/libsqlite/src/pager.h b/ext/sqlite/libsqlite/src/pager.h
deleted file mode 100644
index 7172db88f5..0000000000
--- a/ext/sqlite/libsqlite/src/pager.h
+++ /dev/null
@@ -1,107 +0,0 @@
-/*
-** 2001 September 15
-**
-** The author disclaims copyright to this source code. In place of
-** a legal notice, here is a blessing:
-**
-** May you do good and not evil.
-** May you find forgiveness for yourself and forgive others.
-** May you share freely, never taking more than you give.
-**
-*************************************************************************
-** This header file defines the interface that the sqlite page cache
-** subsystem. The page cache subsystem reads and writes a file a page
-** at a time and provides a journal for rollback.
-**
-** @(#) $Id$
-*/
-
-/*
-** The size of one page
-**
-** You can change this value to another (reasonable) value you want.
-** It need not be a power of two, though the interface to the disk
-** will likely be faster if it is.
-**
-** Experiments show that a page size of 1024 gives the best speed
-** for common usages. The speed differences for different sizes
-** such as 512, 2048, 4096, an so forth, is minimal. Note, however,
-** that changing the page size results in a completely imcompatible
-** file format.
-*/
-#ifndef SQLITE_PAGE_SIZE
-#define SQLITE_PAGE_SIZE 1024
-#endif
-
-/*
-** Number of extra bytes of data allocated at the end of each page and
-** stored on disk but not used by the higher level btree layer. Changing
-** this value results in a completely incompatible file format.
-*/
-#ifndef SQLITE_PAGE_RESERVE
-#define SQLITE_PAGE_RESERVE 0
-#endif
-
-/*
-** The total number of usable bytes stored on disk for each page.
-** The usable bytes come at the beginning of the page and the reserve
-** bytes come at the end.
-*/
-#define SQLITE_USABLE_SIZE (SQLITE_PAGE_SIZE-SQLITE_PAGE_RESERVE)
-
-/*
-** Maximum number of pages in one database. (This is a limitation of
-** imposed by 4GB files size limits.)
-*/
-#define SQLITE_MAX_PAGE 1073741823
-
-/*
-** The type used to represent a page number. The first page in a file
-** is called page 1. 0 is used to represent "not a page".
-*/
-typedef unsigned int Pgno;
-
-/*
-** Each open file is managed by a separate instance of the "Pager" structure.
-*/
-typedef struct Pager Pager;
-
-/*
-** See source code comments for a detailed description of the following
-** routines:
-*/
-int sqlitepager_open(Pager **ppPager, const char *zFilename,
- int nPage, int nExtra, int useJournal);
-void sqlitepager_set_destructor(Pager*, void(*)(void*));
-void sqlitepager_set_cachesize(Pager*, int);
-int sqlitepager_close(Pager *pPager);
-int sqlitepager_get(Pager *pPager, Pgno pgno, void **ppPage);
-void *sqlitepager_lookup(Pager *pPager, Pgno pgno);
-int sqlitepager_ref(void*);
-int sqlitepager_unref(void*);
-Pgno sqlitepager_pagenumber(void*);
-int sqlitepager_write(void*);
-int sqlitepager_iswriteable(void*);
-int sqlitepager_overwrite(Pager *pPager, Pgno pgno, void*);
-int sqlitepager_pagecount(Pager*);
-int sqlitepager_truncate(Pager*,Pgno);
-int sqlitepager_begin(void*);
-int sqlitepager_commit(Pager*);
-int sqlitepager_rollback(Pager*);
-int sqlitepager_isreadonly(Pager*);
-int sqlitepager_ckpt_begin(Pager*);
-int sqlitepager_ckpt_commit(Pager*);
-int sqlitepager_ckpt_rollback(Pager*);
-void sqlitepager_dont_rollback(void*);
-void sqlitepager_dont_write(Pager*, Pgno);
-int *sqlitepager_stats(Pager*);
-void sqlitepager_set_safety_level(Pager*,int);
-const char *sqlitepager_filename(Pager*);
-int sqlitepager_rename(Pager*, const char *zNewName);
-void sqlitepager_set_codec(Pager*,void(*)(void*,void*,Pgno,int),void*);
-
-#ifdef SQLITE_TEST
-void sqlitepager_refdump(Pager*);
-int pager_refinfo_enable;
-int journal_format;
-#endif
diff --git a/ext/sqlite/libsqlite/src/parse.c b/ext/sqlite/libsqlite/src/parse.c
deleted file mode 100644
index 463536915c..0000000000
--- a/ext/sqlite/libsqlite/src/parse.c
+++ /dev/null
@@ -1,4035 +0,0 @@
-/* Driver template for the LEMON parser generator.
-** The author disclaims copyright to this source code.
-*/
-/* First off, code is include which follows the "include" declaration
-** in the input file. */
-#include <stdio.h>
-#line 33 "parse.y"
-
-#include "sqliteInt.h"
-#include "parse.h"
-
-/*
-** An instance of this structure holds information about the
-** LIMIT clause of a SELECT statement.
-*/
-struct LimitVal {
- int limit; /* The LIMIT value. -1 if there is no limit */
- int offset; /* The OFFSET. 0 if there is none */
-};
-
-/*
-** An instance of the following structure describes the event of a
-** TRIGGER. "a" is the event type, one of TK_UPDATE, TK_INSERT,
-** TK_DELETE, or TK_INSTEAD. If the event is of the form
-**
-** UPDATE ON (a,b,c)
-**
-** Then the "b" IdList records the list "a,b,c".
-*/
-struct TrigEvent { int a; IdList * b; };
-
-
-#line 34 "parse.c"
-/* Next is all token values, in a form suitable for use by makeheaders.
-** This section will be null unless lemon is run with the -m switch.
-*/
-/*
-** These constants (all generated automatically by the parser generator)
-** specify the various kinds of tokens (terminals) that the parser
-** understands.
-**
-** Each symbol here is a terminal symbol in the grammar.
-*/
-/* Make sure the INTERFACE macro is defined.
-*/
-#ifndef INTERFACE
-# define INTERFACE 1
-#endif
-/* The next thing included is series of defines which control
-** various aspects of the generated parser.
-** YYCODETYPE is the data type used for storing terminal
-** and nonterminal numbers. "unsigned char" is
-** used if there are fewer than 250 terminals
-** and nonterminals. "int" is used otherwise.
-** YYNOCODE is a number of type YYCODETYPE which corresponds
-** to no legal terminal or nonterminal number. This
-** number is used to fill in empty slots of the hash
-** table.
-** YYFALLBACK If defined, this indicates that one or more tokens
-** have fall-back values which should be used if the
-** original value of the token will not parse.
-** YYACTIONTYPE is the data type used for storing terminal
-** and nonterminal numbers. "unsigned char" is
-** used if there are fewer than 250 rules and
-** states combined. "int" is used otherwise.
-** sqliteParserTOKENTYPE is the data type used for minor tokens given
-** directly to the parser from the tokenizer.
-** YYMINORTYPE is the data type used for all minor tokens.
-** This is typically a union of many types, one of
-** which is sqliteParserTOKENTYPE. The entry in the union
-** for base tokens is called "yy0".
-** YYSTACKDEPTH is the maximum depth of the parser's stack.
-** sqliteParserARG_SDECL A static variable declaration for the %extra_argument
-** sqliteParserARG_PDECL A parameter declaration for the %extra_argument
-** sqliteParserARG_STORE Code to store %extra_argument into yypParser
-** sqliteParserARG_FETCH Code to extract %extra_argument from yypParser
-** YYNSTATE the combined number of states.
-** YYNRULE the number of rules in the grammar
-** YYERRORSYMBOL is the code number of the error symbol. If not
-** defined, then do no error processing.
-*/
-/*  */
-#define YYCODETYPE unsigned char
-#define YYNOCODE 221
-#define YYACTIONTYPE unsigned short int
-#define sqliteParserTOKENTYPE Token
-typedef union {
- sqliteParserTOKENTYPE yy0;
- TriggerStep * yy19;
- struct LimitVal yy124;
- Select* yy179;
- Expr * yy182;
- Expr* yy242;
- struct TrigEvent yy290;
- Token yy298;
- SrcList* yy307;
- IdList* yy320;
- ExprList* yy322;
- int yy372;
- struct {int value; int mask;} yy407;
- int yy441;
-} YYMINORTYPE;
-#define YYSTACKDEPTH 100
-#define sqliteParserARG_SDECL Parse *pParse;
-#define sqliteParserARG_PDECL ,Parse *pParse
-#define sqliteParserARG_FETCH Parse *pParse = yypParser->pParse
-#define sqliteParserARG_STORE yypParser->pParse = pParse
-#define YYNSTATE 563
-#define YYNRULE 293
-#define YYERRORSYMBOL 131
-#define YYERRSYMDT yy441
-#define YYFALLBACK 1
-#define YY_NO_ACTION (YYNSTATE+YYNRULE+2)
-#define YY_ACCEPT_ACTION (YYNSTATE+YYNRULE+1)
-#define YY_ERROR_ACTION (YYNSTATE+YYNRULE)
-
-/* Next are that tables used to determine what action to take based on the
-** current state and lookahead token. These tables are used to implement
-** functions that take a state number and lookahead value and return an
-** action integer.
-**
-** Suppose the action integer is N. Then the action is determined as
-** follows
-**
-** 0 <= N < YYNSTATE Shift N. That is, push the lookahead
-** token onto the stack and goto state N.
-**
-** YYNSTATE <= N < YYNSTATE+YYNRULE Reduce by rule N-YYNSTATE.
-**
-** N == YYNSTATE+YYNRULE A syntax error has occurred.
-**
-** N == YYNSTATE+YYNRULE+1 The parser accepts its input.
-**
-** N == YYNSTATE+YYNRULE+2 No such action. Denotes unused
-** slots in the yy_action[] table.
-**
-** The action table is constructed as a single large table named yy_action[].
-** Given state S and lookahead X, the action is computed as
-**
-** yy_action[ yy_shift_ofst[S] + X ]
-**
-** If the index value yy_shift_ofst[S]+X is out of range or if the value
-** yy_lookahead[yy_shift_ofst[S]+X] is not equal to X or if yy_shift_ofst[S]
-** is equal to YY_SHIFT_USE_DFLT, it means that the action is not in the table
-** and that yy_default[S] should be used instead.
-**
-** The formula above is for computing the action when the lookahead is
-** a terminal symbol. If the lookahead is a non-terminal (as occurs after
-** a reduce action) then the yy_reduce_ofst[] array is used in place of
-** the yy_shift_ofst[] array and YY_REDUCE_USE_DFLT is used in place of
-** YY_SHIFT_USE_DFLT.
-**
-** The following are the tables generated in this section:
-**
-** yy_action[] A single table containing all actions.
-** yy_lookahead[] A table containing the lookahead for each entry in
-** yy_action. Used to detect hash collisions.
-** yy_shift_ofst[] For each state, the offset into yy_action for
-** shifting terminals.
-** yy_reduce_ofst[] For each state, the offset into yy_action for
-** shifting non-terminals after a reduce.
-** yy_default[] Default action for each state.
-*/
-static YYACTIONTYPE yy_action[] = {
- /* 0 */ 264, 5, 262, 119, 123, 117, 121, 129, 131, 133,
- /* 10 */ 135, 144, 146, 148, 150, 152, 154, 568, 106, 106,
- /* 20 */ 143, 857, 1, 562, 3, 142, 129, 131, 133, 135,
- /* 30 */ 144, 146, 148, 150, 152, 154, 174, 103, 8, 115,
- /* 40 */ 104, 139, 127, 125, 156, 161, 157, 162, 166, 119,
- /* 50 */ 123, 117, 121, 129, 131, 133, 135, 144, 146, 148,
- /* 60 */ 150, 152, 154, 31, 361, 392, 263, 143, 363, 369,
- /* 70 */ 374, 97, 142, 148, 150, 152, 154, 68, 75, 377,
- /* 80 */ 167, 64, 218, 46, 20, 289, 115, 104, 139, 127,
- /* 90 */ 125, 156, 161, 157, 162, 166, 119, 123, 117, 121,
- /* 100 */ 129, 131, 133, 135, 144, 146, 148, 150, 152, 154,
- /* 110 */ 193, 41, 336, 563, 44, 54, 60, 62, 308, 331,
- /* 120 */ 175, 20, 560, 561, 572, 333, 640, 18, 359, 144,
- /* 130 */ 146, 148, 150, 152, 154, 143, 181, 179, 303, 18,
- /* 140 */ 142, 84, 86, 20, 177, 66, 67, 111, 21, 22,
- /* 150 */ 112, 105, 83, 792, 115, 104, 139, 127, 125, 156,
- /* 160 */ 161, 157, 162, 166, 119, 123, 117, 121, 129, 131,
- /* 170 */ 133, 135, 144, 146, 148, 150, 152, 154, 790, 560,
- /* 180 */ 561, 46, 13, 113, 183, 21, 22, 534, 361, 2,
- /* 190 */ 3, 14, 363, 369, 374, 338, 361, 690, 544, 542,
- /* 200 */ 363, 369, 374, 377, 836, 143, 15, 21, 22, 16,
- /* 210 */ 142, 377, 44, 54, 60, 62, 308, 331, 396, 535,
- /* 220 */ 17, 9, 191, 333, 115, 104, 139, 127, 125, 156,
- /* 230 */ 161, 157, 162, 166, 119, 123, 117, 121, 129, 131,
- /* 240 */ 133, 135, 144, 146, 148, 150, 152, 154, 571, 230,
- /* 250 */ 340, 343, 143, 20, 536, 537, 538, 142, 402, 337,
- /* 260 */ 398, 339, 357, 68, 346, 347, 32, 64, 266, 391,
- /* 270 */ 37, 115, 104, 139, 127, 125, 156, 161, 157, 162,
- /* 280 */ 166, 119, 123, 117, 121, 129, 131, 133, 135, 144,
- /* 290 */ 146, 148, 150, 152, 154, 839, 193, 651, 291, 298,
- /* 300 */ 300, 221, 357, 43, 173, 689, 175, 251, 330, 36,
- /* 310 */ 37, 106, 232, 40, 335, 58, 137, 21, 22, 330,
- /* 320 */ 411, 143, 181, 179, 47, 59, 142, 358, 390, 174,
- /* 330 */ 177, 66, 67, 111, 448, 49, 112, 105, 583, 213,
- /* 340 */ 115, 104, 139, 127, 125, 156, 161, 157, 162, 166,
- /* 350 */ 119, 123, 117, 121, 129, 131, 133, 135, 144, 146,
- /* 360 */ 148, 150, 152, 154, 306, 301, 106, 249, 259, 113,
- /* 370 */ 183, 793, 70, 253, 281, 219, 20, 106, 20, 11,
- /* 380 */ 106, 482, 454, 444, 299, 143, 169, 10, 171, 172,
- /* 390 */ 142, 169, 73, 171, 172, 103, 688, 69, 174, 169,
- /* 400 */ 252, 171, 172, 12, 115, 104, 139, 127, 125, 156,
- /* 410 */ 161, 157, 162, 166, 119, 123, 117, 121, 129, 131,
- /* 420 */ 133, 135, 144, 146, 148, 150, 152, 154, 95, 237,
- /* 430 */ 313, 20, 143, 295, 244, 424, 169, 142, 171, 172,
- /* 440 */ 21, 22, 21, 22, 219, 386, 316, 323, 325, 837,
- /* 450 */ 19, 115, 104, 139, 127, 125, 156, 161, 157, 162,
- /* 460 */ 166, 119, 123, 117, 121, 129, 131, 133, 135, 144,
- /* 470 */ 146, 148, 150, 152, 154, 106, 661, 20, 264, 143,
- /* 480 */ 262, 844, 315, 169, 142, 171, 172, 333, 38, 842,
- /* 490 */ 10, 356, 348, 184, 421, 21, 22, 282, 115, 104,
- /* 500 */ 139, 127, 125, 156, 161, 157, 162, 166, 119, 123,
- /* 510 */ 117, 121, 129, 131, 133, 135, 144, 146, 148, 150,
- /* 520 */ 152, 154, 69, 254, 262, 251, 143, 639, 663, 35,
- /* 530 */ 65, 142, 726, 313, 283, 259, 185, 417, 419, 418,
- /* 540 */ 284, 21, 22, 690, 263, 115, 104, 139, 127, 125,
- /* 550 */ 156, 161, 157, 162, 166, 119, 123, 117, 121, 129,
- /* 560 */ 131, 133, 135, 144, 146, 148, 150, 152, 154, 256,
- /* 570 */ 20, 791, 424, 143, 169, 52, 171, 172, 142, 169,
- /* 580 */ 24, 171, 172, 247, 53, 315, 26, 169, 263, 171,
- /* 590 */ 172, 253, 115, 164, 139, 127, 125, 156, 161, 157,
- /* 600 */ 162, 166, 119, 123, 117, 121, 129, 131, 133, 135,
- /* 610 */ 144, 146, 148, 150, 152, 154, 426, 349, 252, 425,
- /* 620 */ 143, 262, 575, 297, 591, 142, 169, 296, 171, 172,
- /* 630 */ 169, 471, 171, 172, 21, 22, 427, 221, 91, 115,
- /* 640 */ 227, 139, 127, 125, 156, 161, 157, 162, 166, 119,
- /* 650 */ 123, 117, 121, 129, 131, 133, 135, 144, 146, 148,
- /* 660 */ 150, 152, 154, 388, 312, 106, 89, 143, 720, 376,
- /* 670 */ 387, 170, 142, 487, 666, 248, 320, 216, 319, 217,
- /* 680 */ 28, 459, 30, 305, 189, 263, 209, 104, 139, 127,
- /* 690 */ 125, 156, 161, 157, 162, 166, 119, 123, 117, 121,
- /* 700 */ 129, 131, 133, 135, 144, 146, 148, 150, 152, 154,
- /* 710 */ 106, 106, 809, 494, 143, 489, 106, 816, 33, 142,
- /* 720 */ 395, 234, 273, 217, 274, 420, 20, 545, 114, 481,
- /* 730 */ 137, 429, 576, 321, 116, 139, 127, 125, 156, 161,
- /* 740 */ 157, 162, 166, 119, 123, 117, 121, 129, 131, 133,
- /* 750 */ 135, 144, 146, 148, 150, 152, 154, 7, 322, 23,
- /* 760 */ 25, 27, 394, 68, 415, 416, 10, 64, 197, 477,
- /* 770 */ 577, 533, 266, 548, 578, 831, 276, 201, 520, 4,
- /* 780 */ 6, 245, 430, 557, 29, 266, 491, 106, 441, 497,
- /* 790 */ 21, 22, 205, 168, 443, 195, 193, 531, 276, 448,
- /* 800 */ 276, 808, 267, 272, 529, 174, 175, 318, 440, 341,
- /* 810 */ 344, 106, 342, 345, 69, 286, 68, 582, 69, 69,
- /* 820 */ 64, 540, 181, 179, 541, 328, 302, 366, 217, 118,
- /* 830 */ 177, 66, 67, 111, 34, 143, 112, 105, 445, 510,
- /* 840 */ 142, 215, 278, 800, 467, 276, 498, 503, 444, 193,
- /* 850 */ 106, 219, 486, 443, 42, 73, 231, 73, 45, 175,
- /* 860 */ 449, 39, 225, 229, 278, 451, 278, 68, 174, 113,
- /* 870 */ 183, 64, 371, 55, 106, 181, 179, 292, 69, 276,
- /* 880 */ 276, 69, 48, 177, 66, 67, 111, 224, 276, 112,
- /* 890 */ 105, 106, 481, 393, 106, 106, 63, 106, 106, 106,
- /* 900 */ 193, 653, 106, 467, 233, 51, 380, 437, 526, 120,
- /* 910 */ 175, 278, 122, 124, 219, 126, 128, 130, 69, 453,
- /* 920 */ 132, 106, 113, 183, 451, 106, 181, 179, 159, 106,
- /* 930 */ 106, 106, 518, 106, 177, 66, 67, 111, 106, 134,
- /* 940 */ 112, 105, 422, 136, 106, 278, 278, 138, 141, 145,
- /* 950 */ 720, 147, 106, 329, 275, 274, 149, 106, 852, 158,
- /* 960 */ 106, 106, 151, 106, 106, 351, 106, 352, 106, 464,
- /* 970 */ 153, 106, 106, 113, 183, 155, 106, 106, 163, 165,
- /* 980 */ 106, 176, 178, 106, 180, 106, 182, 106, 401, 190,
- /* 990 */ 192, 106, 106, 293, 210, 212, 106, 367, 214, 274,
- /* 1000 */ 372, 226, 274, 228, 381, 241, 274, 106, 106, 246,
- /* 1010 */ 280, 290, 106, 69, 375, 438, 472, 274, 422, 832,
- /* 1020 */ 106, 73, 474, 73, 458, 412, 462, 480, 464, 478,
- /* 1030 */ 466, 690, 515, 519, 475, 478, 516, 50, 479, 221,
- /* 1040 */ 690, 221, 56, 57, 61, 592, 71, 69, 593, 73,
- /* 1050 */ 72, 74, 245, 242, 93, 81, 76, 69, 77, 240,
- /* 1060 */ 78, 82, 79, 245, 85, 554, 80, 88, 87, 90,
- /* 1070 */ 92, 94, 96, 102, 100, 99, 101, 107, 109, 160,
- /* 1080 */ 154, 667, 98, 508, 108, 668, 110, 220, 211, 669,
- /* 1090 */ 137, 140, 188, 194, 186, 196, 187, 199, 198, 200,
- /* 1100 */ 203, 204, 202, 207, 206, 208, 221, 223, 222, 235,
- /* 1110 */ 236, 239, 238, 217, 250, 258, 243, 261, 279, 270,
- /* 1120 */ 271, 255, 257, 260, 269, 265, 285, 294, 277, 268,
- /* 1130 */ 287, 304, 309, 307, 327, 312, 288, 354, 389, 314,
- /* 1140 */ 364, 365, 370, 378, 379, 382, 310, 49, 311, 362,
- /* 1150 */ 368, 373, 317, 324, 326, 332, 350, 355, 383, 400,
- /* 1160 */ 353, 397, 399, 403, 404, 334, 405, 406, 407, 384,
- /* 1170 */ 413, 409, 824, 414, 360, 385, 829, 423, 410, 431,
- /* 1180 */ 428, 432, 830, 433, 434, 436, 439, 798, 799, 447,
- /* 1190 */ 442, 450, 727, 728, 446, 823, 452, 838, 455, 445,
- /* 1200 */ 456, 457, 408, 435, 460, 461, 463, 840, 465, 468,
- /* 1210 */ 470, 469, 476, 841, 483, 485, 843, 660, 662, 493,
- /* 1220 */ 806, 496, 473, 849, 499, 719, 501, 484, 488, 490,
- /* 1230 */ 492, 502, 504, 495, 500, 507, 505, 506, 509, 722,
- /* 1240 */ 513, 511, 512, 514, 517, 725, 528, 522, 524, 525,
- /* 1250 */ 527, 523, 807, 530, 810, 532, 811, 812, 813, 814,
- /* 1260 */ 817, 819, 539, 820, 818, 815, 521, 543, 546, 552,
- /* 1270 */ 556, 550, 850, 547, 549, 851, 555, 558, 551, 855,
- /* 1280 */ 553, 559,
-};
-static YYCODETYPE yy_lookahead[] = {
- /* 0 */ 21, 9, 23, 70, 71, 72, 73, 74, 75, 76,
- /* 10 */ 77, 78, 79, 80, 81, 82, 83, 9, 140, 140,
- /* 20 */ 41, 132, 133, 134, 135, 46, 74, 75, 76, 77,
- /* 30 */ 78, 79, 80, 81, 82, 83, 158, 158, 138, 60,
- /* 40 */ 61, 62, 63, 64, 65, 66, 67, 68, 69, 70,
- /* 50 */ 71, 72, 73, 74, 75, 76, 77, 78, 79, 80,
- /* 60 */ 81, 82, 83, 19, 90, 21, 87, 41, 94, 95,
- /* 70 */ 96, 192, 46, 80, 81, 82, 83, 19, 174, 105,
- /* 80 */ 19, 23, 204, 62, 23, 181, 60, 61, 62, 63,
- /* 90 */ 64, 65, 66, 67, 68, 69, 70, 71, 72, 73,
- /* 100 */ 74, 75, 76, 77, 78, 79, 80, 81, 82, 83,
- /* 110 */ 52, 90, 91, 0, 93, 94, 95, 96, 97, 98,
- /* 120 */ 62, 23, 9, 10, 9, 104, 20, 12, 22, 78,
- /* 130 */ 79, 80, 81, 82, 83, 41, 78, 79, 80, 12,
- /* 140 */ 46, 78, 79, 23, 86, 87, 88, 89, 87, 88,
- /* 150 */ 92, 93, 89, 127, 60, 61, 62, 63, 64, 65,
- /* 160 */ 66, 67, 68, 69, 70, 71, 72, 73, 74, 75,
- /* 170 */ 76, 77, 78, 79, 80, 81, 82, 83, 14, 9,
- /* 180 */ 10, 62, 15, 125, 126, 87, 88, 140, 90, 134,
- /* 190 */ 135, 24, 94, 95, 96, 23, 90, 9, 78, 79,
- /* 200 */ 94, 95, 96, 105, 11, 41, 39, 87, 88, 42,
- /* 210 */ 46, 105, 93, 94, 95, 96, 97, 98, 17, 99,
- /* 220 */ 53, 139, 128, 104, 60, 61, 62, 63, 64, 65,
- /* 230 */ 66, 67, 68, 69, 70, 71, 72, 73, 74, 75,
- /* 240 */ 76, 77, 78, 79, 80, 81, 82, 83, 9, 19,
- /* 250 */ 78, 79, 41, 23, 207, 208, 209, 46, 57, 87,
- /* 260 */ 59, 89, 140, 19, 92, 93, 144, 23, 152, 147,
- /* 270 */ 148, 60, 61, 62, 63, 64, 65, 66, 67, 68,
- /* 280 */ 69, 70, 71, 72, 73, 74, 75, 76, 77, 78,
- /* 290 */ 79, 80, 81, 82, 83, 14, 52, 9, 182, 20,
- /* 300 */ 20, 113, 140, 156, 20, 20, 62, 22, 161, 147,
- /* 310 */ 148, 140, 20, 155, 156, 26, 200, 87, 88, 161,
- /* 320 */ 127, 41, 78, 79, 93, 36, 46, 165, 166, 158,
- /* 330 */ 86, 87, 88, 89, 53, 104, 92, 93, 9, 128,
- /* 340 */ 60, 61, 62, 63, 64, 65, 66, 67, 68, 69,
- /* 350 */ 70, 71, 72, 73, 74, 75, 76, 77, 78, 79,
- /* 360 */ 80, 81, 82, 83, 20, 194, 140, 183, 184, 125,
- /* 370 */ 126, 127, 146, 88, 19, 204, 23, 140, 23, 31,
- /* 380 */ 140, 100, 101, 102, 158, 41, 107, 99, 109, 110,
- /* 390 */ 46, 107, 111, 109, 110, 158, 20, 171, 158, 107,
- /* 400 */ 115, 109, 110, 170, 60, 61, 62, 63, 64, 65,
- /* 410 */ 66, 67, 68, 69, 70, 71, 72, 73, 74, 75,
- /* 420 */ 76, 77, 78, 79, 80, 81, 82, 83, 191, 192,
- /* 430 */ 47, 23, 41, 80, 194, 140, 107, 46, 109, 110,
- /* 440 */ 87, 88, 87, 88, 204, 62, 100, 101, 102, 11,
- /* 450 */ 140, 60, 61, 62, 63, 64, 65, 66, 67, 68,
- /* 460 */ 69, 70, 71, 72, 73, 74, 75, 76, 77, 78,
- /* 470 */ 79, 80, 81, 82, 83, 140, 9, 23, 21, 41,
- /* 480 */ 23, 9, 99, 107, 46, 109, 110, 104, 149, 9,
- /* 490 */ 99, 152, 153, 158, 199, 87, 88, 146, 60, 61,
- /* 500 */ 62, 63, 64, 65, 66, 67, 68, 69, 70, 71,
- /* 510 */ 72, 73, 74, 75, 76, 77, 78, 79, 80, 81,
- /* 520 */ 82, 83, 171, 115, 23, 22, 41, 20, 9, 22,
- /* 530 */ 19, 46, 9, 47, 183, 184, 201, 100, 101, 102,
- /* 540 */ 189, 87, 88, 19, 87, 60, 61, 62, 63, 64,
- /* 550 */ 65, 66, 67, 68, 69, 70, 71, 72, 73, 74,
- /* 560 */ 75, 76, 77, 78, 79, 80, 81, 82, 83, 115,
- /* 570 */ 23, 14, 140, 41, 107, 34, 109, 110, 46, 107,
- /* 580 */ 138, 109, 110, 22, 43, 99, 138, 107, 87, 109,
- /* 590 */ 110, 88, 60, 61, 62, 63, 64, 65, 66, 67,
- /* 600 */ 68, 69, 70, 71, 72, 73, 74, 75, 76, 77,
- /* 610 */ 78, 79, 80, 81, 82, 83, 25, 19, 115, 28,
- /* 620 */ 41, 23, 9, 108, 113, 46, 107, 112, 109, 110,
- /* 630 */ 107, 199, 109, 110, 87, 88, 45, 113, 22, 60,
- /* 640 */ 61, 62, 63, 64, 65, 66, 67, 68, 69, 70,
- /* 650 */ 71, 72, 73, 74, 75, 76, 77, 78, 79, 80,
- /* 660 */ 81, 82, 83, 161, 162, 140, 50, 41, 9, 139,
- /* 670 */ 168, 108, 46, 17, 111, 114, 91, 20, 93, 22,
- /* 680 */ 138, 22, 142, 158, 127, 87, 129, 61, 62, 63,
- /* 690 */ 64, 65, 66, 67, 68, 69, 70, 71, 72, 73,
- /* 700 */ 74, 75, 76, 77, 78, 79, 80, 81, 82, 83,
- /* 710 */ 140, 140, 9, 57, 41, 59, 140, 9, 145, 46,
- /* 720 */ 143, 20, 20, 22, 22, 49, 23, 19, 158, 158,
- /* 730 */ 200, 18, 9, 29, 158, 62, 63, 64, 65, 66,
- /* 740 */ 67, 68, 69, 70, 71, 72, 73, 74, 75, 76,
- /* 750 */ 77, 78, 79, 80, 81, 82, 83, 11, 54, 13,
- /* 760 */ 14, 15, 16, 19, 55, 56, 99, 23, 15, 198,
- /* 770 */ 9, 63, 152, 27, 9, 99, 140, 24, 32, 136,
- /* 780 */ 137, 122, 205, 37, 141, 152, 130, 140, 211, 146,
- /* 790 */ 87, 88, 39, 146, 146, 42, 52, 51, 140, 53,
- /* 800 */ 140, 9, 182, 167, 58, 158, 62, 103, 95, 89,
- /* 810 */ 89, 140, 92, 92, 171, 182, 19, 9, 171, 171,
- /* 820 */ 23, 89, 78, 79, 92, 167, 20, 167, 22, 158,
- /* 830 */ 86, 87, 88, 89, 20, 41, 92, 93, 60, 196,
- /* 840 */ 46, 194, 206, 130, 196, 140, 100, 101, 102, 52,
- /* 850 */ 140, 204, 106, 146, 140, 111, 146, 111, 139, 62,
- /* 860 */ 212, 150, 68, 69, 206, 217, 206, 19, 158, 125,
- /* 870 */ 126, 23, 167, 48, 140, 78, 79, 80, 171, 140,
- /* 880 */ 140, 171, 139, 86, 87, 88, 89, 93, 140, 92,
- /* 890 */ 93, 140, 158, 146, 140, 140, 19, 140, 140, 140,
- /* 900 */ 52, 123, 140, 196, 194, 44, 167, 167, 116, 158,
- /* 910 */ 62, 206, 158, 158, 204, 158, 158, 158, 171, 212,
- /* 920 */ 158, 140, 125, 126, 217, 140, 78, 79, 62, 140,
- /* 930 */ 140, 140, 198, 140, 86, 87, 88, 89, 140, 158,
- /* 940 */ 92, 93, 22, 158, 140, 206, 206, 158, 158, 158,
- /* 950 */ 9, 158, 140, 20, 206, 22, 158, 140, 9, 93,
- /* 960 */ 140, 140, 158, 140, 140, 20, 140, 22, 140, 140,
- /* 970 */ 158, 140, 140, 125, 126, 158, 140, 140, 158, 158,
- /* 980 */ 140, 158, 158, 140, 158, 140, 158, 140, 146, 158,
- /* 990 */ 158, 140, 140, 140, 158, 158, 140, 20, 158, 22,
- /* 1000 */ 20, 158, 22, 158, 20, 158, 22, 140, 140, 158,
- /* 1010 */ 158, 158, 140, 171, 158, 20, 20, 22, 22, 99,
- /* 1020 */ 140, 111, 146, 111, 195, 158, 158, 20, 140, 22,
- /* 1030 */ 158, 103, 146, 20, 124, 22, 124, 164, 158, 113,
- /* 1040 */ 114, 113, 157, 139, 139, 113, 172, 171, 113, 111,
- /* 1050 */ 171, 173, 122, 119, 117, 180, 175, 171, 176, 120,
- /* 1060 */ 177, 121, 178, 122, 89, 116, 179, 154, 89, 154,
- /* 1070 */ 154, 118, 22, 151, 98, 157, 23, 113, 113, 93,
- /* 1080 */ 83, 111, 193, 195, 140, 111, 140, 140, 127, 111,
- /* 1090 */ 200, 200, 14, 19, 202, 20, 203, 140, 22, 20,
- /* 1100 */ 140, 20, 22, 140, 22, 20, 113, 186, 140, 140,
- /* 1110 */ 186, 157, 193, 22, 185, 115, 118, 186, 99, 116,
- /* 1120 */ 19, 140, 140, 140, 188, 140, 20, 113, 157, 187,
- /* 1130 */ 187, 20, 140, 139, 19, 162, 188, 20, 166, 140,
- /* 1140 */ 48, 19, 19, 48, 19, 97, 159, 104, 160, 140,
- /* 1150 */ 139, 139, 163, 163, 163, 151, 154, 152, 140, 21,
- /* 1160 */ 154, 140, 140, 140, 213, 164, 214, 99, 140, 159,
- /* 1170 */ 40, 215, 11, 38, 166, 160, 99, 140, 216, 130,
- /* 1180 */ 49, 140, 99, 99, 140, 19, 139, 9, 130, 169,
- /* 1190 */ 11, 14, 123, 123, 170, 9, 9, 14, 169, 60,
- /* 1200 */ 140, 103, 186, 186, 140, 63, 176, 9, 63, 123,
- /* 1210 */ 19, 140, 19, 9, 114, 176, 9, 9, 9, 186,
- /* 1220 */ 9, 186, 197, 9, 114, 9, 186, 140, 140, 140,
- /* 1230 */ 140, 176, 169, 140, 140, 103, 140, 186, 176, 9,
- /* 1240 */ 186, 123, 140, 197, 19, 9, 87, 140, 114, 140,
- /* 1250 */ 35, 186, 9, 140, 9, 152, 9, 9, 9, 9,
- /* 1260 */ 9, 9, 210, 9, 9, 9, 169, 210, 140, 140,
- /* 1270 */ 33, 152, 9, 20, 218, 9, 152, 218, 21, 9,
- /* 1280 */ 219, 140,
-};
-#define YY_SHIFT_USE_DFLT (-68)
-static short yy_shift_ofst[] = {
- /* 0 */ 170, 113, -68, 746, -8, -68, 8, 127, 288, 239,
- /* 10 */ 348, 167, -68, -68, -68, -68, -68, -68, 547, -68,
- /* 20 */ -68, -68, -68, 115, 613, 115, 723, 115, 761, 44,
- /* 30 */ 765, 547, 507, 814, 808, 98, -68, 501, -68, 21,
- /* 40 */ -68, 547, 119, -68, 667, -68, 231, 667, -68, 861,
- /* 50 */ -68, 541, -68, -68, 825, 289, 667, -68, -68, -68,
- /* 60 */ 667, -68, 877, 848, 511, 58, 932, 935, 744, -68,
- /* 70 */ 279, 938, -68, 515, -68, 561, 930, 934, 939, 937,
- /* 80 */ 940, -68, 63, -68, 975, -68, 979, -68, 616, 63,
- /* 90 */ -68, 63, -68, 953, 848, 1050, 848, 976, 289, -68,
- /* 100 */ 1053, -68, -68, 485, 848, -68, 964, 547, 965, 547,
- /* 110 */ -68, -68, -68, -68, 673, 848, 626, 848, -48, 848,
- /* 120 */ -48, 848, -48, 848, -48, 848, -67, 848, -67, 848,
- /* 130 */ 51, 848, 51, 848, 51, 848, 51, 848, -67, 794,
- /* 140 */ 848, -67, -68, -68, 848, -7, 848, -7, 848, 997,
- /* 150 */ 848, 997, 848, 997, 848, -68, -68, 866, -68, 986,
- /* 160 */ -68, -68, 848, 532, 848, -67, 61, 744, 284, 563,
- /* 170 */ 970, 974, 978, -68, 485, 848, 673, 848, -68, 848,
- /* 180 */ -68, 848, -68, 244, 26, 961, 557, 1078, -68, 848,
- /* 190 */ 94, 848, 485, 1074, 753, 1075, -68, 1076, 547, 1079,
- /* 200 */ -68, 1080, 547, 1081, -68, 1082, 547, 1085, -68, 848,
- /* 210 */ 164, 848, 211, 848, 485, 657, -68, 848, -68, -68,
- /* 220 */ 993, 547, -68, -68, -68, 848, 579, 848, 673, 230,
- /* 230 */ 744, 292, -68, 701, -68, 993, -68, 976, 289, -68,
- /* 240 */ 848, 485, 998, 848, 1091, 848, 485, -68, -68, 503,
- /* 250 */ -68, -68, -68, 408, -68, 454, -68, 1000, -68, 355,
- /* 260 */ 993, 457, -68, -68, 547, -68, -68, 1019, 1003, -68,
- /* 270 */ 1101, 547, 702, -68, 547, -68, 289, -68, -68, 848,
- /* 280 */ 485, 938, 376, 285, 1106, 457, 1019, 1003, -68, 797,
- /* 290 */ -21, -68, -68, 1014, 353, -68, -68, -68, -68, 280,
- /* 300 */ -68, 806, -68, 1111, -68, 344, 667, -68, 547, 1115,
- /* 310 */ -68, 486, -68, 547, -68, 346, 704, -68, 585, -68,
- /* 320 */ -68, -68, -68, 704, -68, 704, -68, 547, 933, -68,
- /* 330 */ -68, 1053, -68, 861, -68, -68, 172, -68, -68, -68,
- /* 340 */ 720, -68, -68, 721, -68, -68, -68, -68, 598, 63,
- /* 350 */ 945, -68, 63, 1117, -68, -68, -68, -68, 106, -26,
- /* 360 */ -68, 547, -68, 1092, 1122, 547, 977, 667, -68, 1123,
- /* 370 */ 547, 980, 667, -68, 848, 391, -68, 1095, 1125, 547,
- /* 380 */ 984, 1048, 547, 1115, -68, 383, 1043, -68, -68, -68,
- /* 390 */ -68, -68, 938, 329, 713, 201, 547, -68, 547, 1138,
- /* 400 */ 938, 467, 547, 591, 437, 1068, 547, 993, 1130, 193,
- /* 410 */ 1161, 848, 438, 1135, 709, -68, -68, 1077, 1083, 676,
- /* 420 */ 547, 920, 547, -68, -68, -68, -68, 1131, -68, -68,
- /* 430 */ 1049, 547, 1084, 547, 524, 1166, 547, 995, 288, 1178,
- /* 440 */ 1058, 1179, 281, 472, 778, 167, -68, 1069, 1070, 1177,
- /* 450 */ 1186, 1187, 281, 1183, 1139, 547, 1098, 547, 659, 547,
- /* 460 */ 1142, 848, 485, 1198, 1145, 848, 485, 1086, 547, 1191,
- /* 470 */ 547, 996, -68, 910, 480, 1193, 848, 1007, 848, 485,
- /* 480 */ 1204, 485, 1100, 547, 941, 1207, 656, 547, 1208, 547,
- /* 490 */ 1209, 547, 188, 1211, 547, 188, 1214, 519, 1110, 547,
- /* 500 */ 993, 941, 1216, 1139, 547, 928, 1132, 547, 659, 1230,
- /* 510 */ 1118, 547, 993, 1191, 912, 523, 1225, 848, 1013, 1236,
- /* 520 */ 1139, 547, 926, 1134, 547, 792, 1215, 1159, 1243, 703,
- /* 530 */ 1245, 501, 708, 120, 1247, 1248, 1249, 1250, 732, 1251,
- /* 540 */ 1252, 1254, 732, 1255, -68, 547, 1253, 1256, 1237, 501,
- /* 550 */ 1257, 547, 949, 1263, 501, 1266, -68, 1237, 547, 1270,
- /* 560 */ -68, -68, -68,
-};
-#define YY_REDUCE_USE_DFLT (-123)
-static short yy_reduce_ofst[] = {
- /* 0 */ -111, 55, -123, 643, -123, -123, -123, -100, 82, -123,
- /* 10 */ -123, 233, -123, -123, -123, -123, -123, -123, 310, -123,
- /* 20 */ -123, -123, -123, 442, -123, 448, -123, 542, -123, 540,
- /* 30 */ -123, 122, 573, -123, -123, 162, -123, 339, 711, 158,
- /* 40 */ -123, 714, 147, -123, 719, -123, -123, 743, -123, 873,
- /* 50 */ -123, -123, -123, -123, -123, 885, 904, -123, -123, -123,
- /* 60 */ 905, -123, -123, 525, -123, 171, -123, -123, 226, -123,
- /* 70 */ 874, 879, -123, 878, -96, 881, 882, 883, 884, 887,
- /* 80 */ 875, -123, 913, -123, -123, -123, -123, -123, -123, 915,
- /* 90 */ -123, 916, -123, -123, 237, -123, -121, 889, 918, -123,
- /* 100 */ 922, -123, -123, 890, 570, -123, -123, 944, -123, 946,
- /* 110 */ -123, -123, -123, -123, 890, 576, 890, 671, 890, 751,
- /* 120 */ 890, 754, 890, 755, 890, 757, 890, 758, 890, 759,
- /* 130 */ 890, 762, 890, 781, 890, 785, 890, 789, 890, 891,
- /* 140 */ 790, 890, -123, -123, 791, 890, 793, 890, 798, 890,
- /* 150 */ 804, 890, 812, 890, 817, 890, -123, -123, -123, -123,
- /* 160 */ -123, -123, 820, 890, 821, 890, 947, 647, 874, -123,
- /* 170 */ -123, -123, -123, -123, 890, 823, 890, 824, 890, 826,
- /* 180 */ 890, 828, 890, 335, 890, 892, 893, -123, -123, 831,
- /* 190 */ 890, 832, 890, -123, -123, -123, -123, -123, 957, -123,
- /* 200 */ -123, -123, 960, -123, -123, -123, 963, -123, -123, 836,
- /* 210 */ 890, 837, 890, 840, 890, -123, -123, -122, -123, -123,
- /* 220 */ 921, 968, -123, -123, -123, 843, 890, 845, 890, 969,
- /* 230 */ 710, 874, -123, -123, -123, 924, -123, 919, 954, -123,
- /* 240 */ 847, 890, -123, 240, -123, 851, 890, -123, 184, 929,
- /* 250 */ -123, -123, -123, 981, -123, 982, -123, -123, -123, 983,
- /* 260 */ 931, 620, -123, -123, 985, -123, -123, 942, 936, -123,
- /* 270 */ -123, 636, -123, -123, 748, -123, 971, -123, -123, 852,
- /* 280 */ 890, 351, 874, 929, -123, 633, 943, 948, -123, 853,
- /* 290 */ 116, -123, -123, -123, 944, -123, -123, -123, -123, 890,
- /* 300 */ -123, -123, -123, -123, -123, 890, 994, -123, 992, 987,
- /* 310 */ 988, 973, -123, 999, -123, -123, 989, -123, -123, -123,
- /* 320 */ -123, -123, -123, 990, -123, 991, -123, 658, -123, -123,
- /* 330 */ -123, 1004, -123, 1001, -123, -123, -123, -123, -123, -123,
- /* 340 */ -123, -123, -123, -123, -123, -123, -123, -123, 1005, 1002,
- /* 350 */ -123, -123, 1006, -123, -123, -123, -123, -123, 972, 1008,
- /* 360 */ -123, 1009, -123, -123, -123, 660, -123, 1011, -123, -123,
- /* 370 */ 705, -123, 1012, -123, 856, 530, -123, -123, -123, 739,
- /* 380 */ -123, -123, 1018, 1010, 1015, 502, -123, -123, -123, -123,
- /* 390 */ -123, -123, 747, 874, 577, -123, 1021, -123, 1022, -123,
- /* 400 */ 842, 874, 1023, 951, 952, -123, 1028, 1016, 956, 962,
- /* 410 */ -123, 867, 890, -123, -123, -123, -123, -123, -123, -123,
- /* 420 */ 295, -123, 1037, -123, -123, -123, -123, -123, -123, -123,
- /* 430 */ -123, 1041, -123, 1044, 1017, -123, 740, -123, 1047, -123,
- /* 440 */ -123, -123, 648, 874, 1020, 1024, -123, -123, -123, -123,
- /* 450 */ -123, -123, 707, -123, 1029, 1060, -123, 829, 1030, 1064,
- /* 460 */ -123, 868, 890, -123, -123, 872, 890, -123, 1071, 1025,
- /* 470 */ 432, -123, -123, 876, 874, -123, 571, -123, 880, 890,
- /* 480 */ -123, 890, -123, 1087, 1039, -123, -123, 1088, -123, 1089,
- /* 490 */ -123, 1090, 1033, -123, 1093, 1035, -123, 874, -123, 1094,
- /* 500 */ 1040, 1055, -123, 1063, 1096, 1051, -123, 888, 1062, -123,
- /* 510 */ -123, 1102, 1054, 1046, 886, 874, -123, 734, -123, -123,
- /* 520 */ 1097, 1107, 1065, -123, 1109, -123, -123, -123, -123, 1113,
- /* 530 */ -123, 1103, -123, 47, -123, -123, -123, -123, 1052, -123,
- /* 540 */ -123, -123, 1057, -123, -123, 1128, -123, -123, 1056, 1119,
- /* 550 */ -123, 1129, 1061, -123, 1124, -123, -123, 1059, 1141, -123,
- /* 560 */ -123, -123, -123,
-};
-static YYACTIONTYPE yy_default[] = {
- /* 0 */ 570, 570, 564, 856, 856, 566, 856, 572, 856, 856,
- /* 10 */ 856, 856, 652, 655, 656, 657, 658, 659, 573, 574,
- /* 20 */ 591, 592, 593, 856, 856, 856, 856, 856, 856, 856,
- /* 30 */ 856, 856, 856, 856, 856, 856, 584, 594, 604, 586,
- /* 40 */ 603, 856, 856, 605, 651, 616, 856, 651, 617, 636,
- /* 50 */ 634, 856, 637, 638, 856, 708, 651, 618, 706, 707,
- /* 60 */ 651, 619, 856, 856, 737, 797, 743, 738, 856, 664,
- /* 70 */ 856, 856, 665, 673, 675, 682, 720, 711, 713, 701,
- /* 80 */ 715, 670, 856, 600, 856, 601, 856, 602, 716, 856,
- /* 90 */ 717, 856, 718, 856, 856, 702, 856, 709, 708, 703,
- /* 100 */ 856, 588, 710, 705, 856, 736, 856, 856, 739, 856,
- /* 110 */ 740, 741, 742, 744, 747, 856, 748, 856, 749, 856,
- /* 120 */ 750, 856, 751, 856, 752, 856, 753, 856, 754, 856,
- /* 130 */ 755, 856, 756, 856, 757, 856, 758, 856, 759, 856,
- /* 140 */ 856, 760, 761, 762, 856, 763, 856, 764, 856, 765,
- /* 150 */ 856, 766, 856, 767, 856, 768, 769, 856, 770, 856,
- /* 160 */ 773, 771, 856, 856, 856, 779, 856, 797, 856, 856,
- /* 170 */ 856, 856, 856, 782, 796, 856, 774, 856, 775, 856,
- /* 180 */ 776, 856, 777, 856, 856, 856, 856, 856, 787, 856,
- /* 190 */ 856, 856, 788, 856, 856, 856, 845, 856, 856, 856,
- /* 200 */ 846, 856, 856, 856, 847, 856, 856, 856, 848, 856,
- /* 210 */ 856, 856, 856, 856, 789, 856, 781, 797, 794, 795,
- /* 220 */ 690, 856, 691, 785, 772, 856, 856, 856, 780, 856,
- /* 230 */ 797, 856, 784, 856, 783, 690, 786, 709, 708, 704,
- /* 240 */ 856, 714, 856, 797, 712, 856, 721, 674, 685, 683,
- /* 250 */ 684, 692, 693, 856, 694, 856, 695, 856, 696, 856,
- /* 260 */ 690, 681, 589, 590, 856, 679, 680, 698, 700, 686,
- /* 270 */ 856, 856, 856, 699, 856, 803, 708, 805, 804, 856,
- /* 280 */ 697, 685, 856, 856, 856, 681, 698, 700, 687, 856,
- /* 290 */ 681, 676, 677, 856, 856, 678, 671, 672, 778, 856,
- /* 300 */ 735, 856, 745, 856, 746, 856, 651, 620, 856, 801,
- /* 310 */ 624, 621, 625, 856, 626, 856, 856, 627, 856, 630,
- /* 320 */ 631, 632, 633, 856, 628, 856, 629, 856, 856, 802,
- /* 330 */ 622, 856, 623, 636, 635, 606, 856, 607, 608, 609,
- /* 340 */ 856, 610, 613, 856, 611, 614, 612, 615, 595, 856,
- /* 350 */ 856, 596, 856, 856, 597, 599, 598, 587, 856, 856,
- /* 360 */ 641, 856, 644, 856, 856, 856, 856, 651, 645, 856,
- /* 370 */ 856, 856, 651, 646, 856, 651, 647, 856, 856, 856,
- /* 380 */ 856, 856, 856, 801, 624, 649, 856, 648, 650, 642,
- /* 390 */ 643, 585, 856, 856, 581, 856, 856, 579, 856, 856,
- /* 400 */ 856, 856, 856, 828, 856, 856, 856, 690, 833, 856,
- /* 410 */ 856, 856, 856, 856, 856, 834, 835, 856, 856, 856,
- /* 420 */ 856, 856, 856, 733, 734, 825, 826, 856, 827, 580,
- /* 430 */ 856, 856, 856, 856, 856, 856, 856, 856, 856, 856,
- /* 440 */ 856, 856, 856, 856, 856, 856, 654, 856, 856, 856,
- /* 450 */ 856, 856, 856, 856, 653, 856, 856, 856, 856, 856,
- /* 460 */ 856, 856, 723, 856, 856, 856, 724, 856, 856, 731,
- /* 470 */ 856, 856, 732, 856, 856, 856, 856, 856, 856, 729,
- /* 480 */ 856, 730, 856, 856, 856, 856, 856, 856, 856, 856,
- /* 490 */ 856, 856, 856, 856, 856, 856, 856, 856, 856, 856,
- /* 500 */ 690, 856, 856, 653, 856, 856, 856, 856, 856, 856,
- /* 510 */ 856, 856, 690, 731, 856, 856, 856, 856, 856, 856,
- /* 520 */ 653, 856, 856, 856, 856, 856, 856, 856, 856, 856,
- /* 530 */ 856, 856, 856, 822, 856, 856, 856, 856, 856, 856,
- /* 540 */ 856, 856, 856, 856, 821, 856, 856, 856, 854, 856,
- /* 550 */ 856, 856, 856, 856, 856, 856, 853, 854, 856, 856,
- /* 560 */ 567, 569, 565,
-};
-#define YY_SZ_ACTTAB (sizeof(yy_action)/sizeof(yy_action[0]))
-
-/* The next table maps tokens into fallback tokens. If a construct
-** like the following:
-**
-** %fallback ID X Y Z.
-**
-** appears in the grammer, then ID becomes a fallback token for X, Y,
-** and Z. Whenever one of the tokens X, Y, or Z is input to the parser
-** but it does not parse, the type of the token is changed to ID and
-** the parse is retried before an error is thrown.
-*/
-#ifdef YYFALLBACK
-static const YYCODETYPE yyFallback[] = {
- 0, /* $ => nothing */
- 0, /* END_OF_FILE => nothing */
- 0, /* ILLEGAL => nothing */
- 0, /* SPACE => nothing */
- 0, /* UNCLOSED_STRING => nothing */
- 0, /* COMMENT => nothing */
- 0, /* FUNCTION => nothing */
- 0, /* COLUMN => nothing */
- 0, /* AGG_FUNCTION => nothing */
- 0, /* SEMI => nothing */
- 23, /* EXPLAIN => ID */
- 23, /* BEGIN => ID */
- 0, /* TRANSACTION => nothing */
- 0, /* COMMIT => nothing */
- 23, /* END => ID */
- 0, /* ROLLBACK => nothing */
- 0, /* CREATE => nothing */
- 0, /* TABLE => nothing */
- 23, /* TEMP => ID */
- 0, /* LP => nothing */
- 0, /* RP => nothing */
- 0, /* AS => nothing */
- 0, /* COMMA => nothing */
- 0, /* ID => nothing */
- 23, /* ABORT => ID */
- 23, /* AFTER => ID */
- 23, /* ASC => ID */
- 23, /* ATTACH => ID */
- 23, /* BEFORE => ID */
- 23, /* CASCADE => ID */
- 23, /* CLUSTER => ID */
- 23, /* CONFLICT => ID */
- 23, /* COPY => ID */
- 23, /* DATABASE => ID */
- 23, /* DEFERRED => ID */
- 23, /* DELIMITERS => ID */
- 23, /* DESC => ID */
- 23, /* DETACH => ID */
- 23, /* EACH => ID */
- 23, /* FAIL => ID */
- 23, /* FOR => ID */
- 23, /* GLOB => ID */
- 23, /* IGNORE => ID */
- 23, /* IMMEDIATE => ID */
- 23, /* INITIALLY => ID */
- 23, /* INSTEAD => ID */
- 23, /* LIKE => ID */
- 23, /* MATCH => ID */
- 23, /* KEY => ID */
- 23, /* OF => ID */
- 23, /* OFFSET => ID */
- 23, /* PRAGMA => ID */
- 23, /* RAISE => ID */
- 23, /* REPLACE => ID */
- 23, /* RESTRICT => ID */
- 23, /* ROW => ID */
- 23, /* STATEMENT => ID */
- 23, /* TRIGGER => ID */
- 23, /* VACUUM => ID */
- 23, /* VIEW => ID */
- 0, /* OR => nothing */
- 0, /* AND => nothing */
- 0, /* NOT => nothing */
- 0, /* EQ => nothing */
- 0, /* NE => nothing */
- 0, /* ISNULL => nothing */
- 0, /* NOTNULL => nothing */
- 0, /* IS => nothing */
- 0, /* BETWEEN => nothing */
- 0, /* IN => nothing */
- 0, /* GT => nothing */
- 0, /* GE => nothing */
- 0, /* LT => nothing */
- 0, /* LE => nothing */
- 0, /* BITAND => nothing */
- 0, /* BITOR => nothing */
- 0, /* LSHIFT => nothing */
- 0, /* RSHIFT => nothing */
- 0, /* PLUS => nothing */
- 0, /* MINUS => nothing */
- 0, /* STAR => nothing */
- 0, /* SLASH => nothing */
- 0, /* REM => nothing */
- 0, /* CONCAT => nothing */
- 0, /* UMINUS => nothing */
- 0, /* UPLUS => nothing */
- 0, /* BITNOT => nothing */
- 0, /* STRING => nothing */
- 0, /* JOIN_KW => nothing */
- 0, /* INTEGER => nothing */
- 0, /* CONSTRAINT => nothing */
- 0, /* DEFAULT => nothing */
- 0, /* FLOAT => nothing */
- 0, /* NULL => nothing */
- 0, /* PRIMARY => nothing */
- 0, /* UNIQUE => nothing */
- 0, /* CHECK => nothing */
- 0, /* REFERENCES => nothing */
- 0, /* COLLATE => nothing */
- 0, /* ON => nothing */
- 0, /* DELETE => nothing */
- 0, /* UPDATE => nothing */
- 0, /* INSERT => nothing */
- 0, /* SET => nothing */
- 0, /* DEFERRABLE => nothing */
- 0, /* FOREIGN => nothing */
- 0, /* DROP => nothing */
- 0, /* UNION => nothing */
- 0, /* ALL => nothing */
- 0, /* INTERSECT => nothing */
- 0, /* EXCEPT => nothing */
- 0, /* SELECT => nothing */
- 0, /* DISTINCT => nothing */
- 0, /* DOT => nothing */
- 0, /* FROM => nothing */
- 0, /* JOIN => nothing */
- 0, /* USING => nothing */
- 0, /* ORDER => nothing */
- 0, /* BY => nothing */
- 0, /* GROUP => nothing */
- 0, /* HAVING => nothing */
- 0, /* LIMIT => nothing */
- 0, /* WHERE => nothing */
- 0, /* INTO => nothing */
- 0, /* VALUES => nothing */
- 0, /* VARIABLE => nothing */
- 0, /* CASE => nothing */
- 0, /* WHEN => nothing */
- 0, /* THEN => nothing */
- 0, /* ELSE => nothing */
- 0, /* INDEX => nothing */
-};
-#endif /* YYFALLBACK */
-
-/* The following structure represents a single element of the
-** parser's stack. Information stored includes:
-**
-** + The state number for the parser at this level of the stack.
-**
-** + The value of the token stored at this level of the stack.
-** (In other words, the "major" token.)
-**
-** + The semantic value stored at this level of the stack. This is
-** the information used by the action routines in the grammar.
-** It is sometimes called the "minor" token.
-*/
-struct yyStackEntry {
- int stateno; /* The state-number */
- int major; /* The major token value. This is the code
- ** number for the token at this stack level */
- YYMINORTYPE minor; /* The user-supplied minor token value. This
- ** is the value of the token */
-};
-typedef struct yyStackEntry yyStackEntry;
-
-/* The state of the parser is completely contained in an instance of
-** the following structure */
-struct yyParser {
- int yyidx; /* Index of top element in stack */
- int yyerrcnt; /* Shifts left before out of the error */
- sqliteParserARG_SDECL /* A place to hold %extra_argument */
- yyStackEntry yystack[YYSTACKDEPTH]; /* The parser's stack */
-};
-typedef struct yyParser yyParser;
-
-#ifndef NDEBUG
-#include <stdio.h>
-static FILE *yyTraceFILE = 0;
-static char *yyTracePrompt = 0;
-#endif /* NDEBUG */
-
-#ifndef NDEBUG
-/*
-** Turn parser tracing on by giving a stream to which to write the trace
-** and a prompt to preface each trace message. Tracing is turned off
-** by making either argument NULL
-**
-** Inputs:
-** <ul>
-** <li> A FILE* to which trace output should be written.
-** If NULL, then tracing is turned off.
-** <li> A prefix string written at the beginning of every
-** line of trace output. If NULL, then tracing is
-** turned off.
-** </ul>
-**
-** Outputs:
-** None.
-*/
-void sqliteParserTrace(FILE *TraceFILE, char *zTracePrompt){
- yyTraceFILE = TraceFILE;
- yyTracePrompt = zTracePrompt;
- if( yyTraceFILE==0 ) yyTracePrompt = 0;
- else if( yyTracePrompt==0 ) yyTraceFILE = 0;
-}
-#endif /* NDEBUG */
-
-#ifndef NDEBUG
-/* For tracing shifts, the names of all terminals and nonterminals
-** are required. The following table supplies these names */
-static const char *yyTokenName[] = {
- "$", "END_OF_FILE", "ILLEGAL", "SPACE",
- "UNCLOSED_STRING", "COMMENT", "FUNCTION", "COLUMN",
- "AGG_FUNCTION", "SEMI", "EXPLAIN", "BEGIN",
- "TRANSACTION", "COMMIT", "END", "ROLLBACK",
- "CREATE", "TABLE", "TEMP", "LP",
- "RP", "AS", "COMMA", "ID",
- "ABORT", "AFTER", "ASC", "ATTACH",
- "BEFORE", "CASCADE", "CLUSTER", "CONFLICT",
- "COPY", "DATABASE", "DEFERRED", "DELIMITERS",
- "DESC", "DETACH", "EACH", "FAIL",
- "FOR", "GLOB", "IGNORE", "IMMEDIATE",
- "INITIALLY", "INSTEAD", "LIKE", "MATCH",
- "KEY", "OF", "OFFSET", "PRAGMA",
- "RAISE", "REPLACE", "RESTRICT", "ROW",
- "STATEMENT", "TRIGGER", "VACUUM", "VIEW",
- "OR", "AND", "NOT", "EQ",
- "NE", "ISNULL", "NOTNULL", "IS",
- "BETWEEN", "IN", "GT", "GE",
- "LT", "LE", "BITAND", "BITOR",
- "LSHIFT", "RSHIFT", "PLUS", "MINUS",
- "STAR", "SLASH", "REM", "CONCAT",
- "UMINUS", "UPLUS", "BITNOT", "STRING",
- "JOIN_KW", "INTEGER", "CONSTRAINT", "DEFAULT",
- "FLOAT", "NULL", "PRIMARY", "UNIQUE",
- "CHECK", "REFERENCES", "COLLATE", "ON",
- "DELETE", "UPDATE", "INSERT", "SET",
- "DEFERRABLE", "FOREIGN", "DROP", "UNION",
- "ALL", "INTERSECT", "EXCEPT", "SELECT",
- "DISTINCT", "DOT", "FROM", "JOIN",
- "USING", "ORDER", "BY", "GROUP",
- "HAVING", "LIMIT", "WHERE", "INTO",
- "VALUES", "VARIABLE", "CASE", "WHEN",
- "THEN", "ELSE", "INDEX", "error",
- "input", "cmdlist", "ecmd", "explain",
- "cmdx", "cmd", "trans_opt", "onconf",
- "nm", "create_table", "create_table_args", "temp",
- "columnlist", "conslist_opt", "select", "column",
- "columnid", "type", "carglist", "id",
- "ids", "typename", "signed", "carg",
- "ccons", "sortorder", "expr", "idxlist_opt",
- "refargs", "defer_subclause", "refarg", "refact",
- "init_deferred_pred_opt", "conslist", "tcons", "idxlist",
- "defer_subclause_opt", "orconf", "resolvetype", "oneselect",
- "multiselect_op", "distinct", "selcollist", "from",
- "where_opt", "groupby_opt", "having_opt", "orderby_opt",
- "limit_opt", "sclp", "as", "seltablist",
- "stl_prefix", "joinop", "dbnm", "on_opt",
- "using_opt", "seltablist_paren", "joinop2", "sortlist",
- "sortitem", "collate", "exprlist", "setlist",
- "insert_cmd", "inscollist_opt", "itemlist", "inscollist",
- "likeop", "case_operand", "case_exprlist", "case_else",
- "expritem", "uniqueflag", "idxitem", "plus_num",
- "minus_num", "plus_opt", "number", "trigger_decl",
- "trigger_cmd_list", "trigger_time", "trigger_event", "foreach_clause",
- "when_clause", "trigger_cmd", "database_kw_opt", "key_opt",
-};
-#endif /* NDEBUG */
-
-#ifndef NDEBUG
-/* For tracing reduce actions, the names of all rules are required.
-*/
-static const char *yyRuleName[] = {
- /* 0 */ "input ::= cmdlist",
- /* 1 */ "cmdlist ::= cmdlist ecmd",
- /* 2 */ "cmdlist ::= ecmd",
- /* 3 */ "ecmd ::= explain cmdx SEMI",
- /* 4 */ "ecmd ::= SEMI",
- /* 5 */ "cmdx ::= cmd",
- /* 6 */ "explain ::= EXPLAIN",
- /* 7 */ "explain ::=",
- /* 8 */ "cmd ::= BEGIN trans_opt onconf",
- /* 9 */ "trans_opt ::=",
- /* 10 */ "trans_opt ::= TRANSACTION",
- /* 11 */ "trans_opt ::= TRANSACTION nm",
- /* 12 */ "cmd ::= COMMIT trans_opt",
- /* 13 */ "cmd ::= END trans_opt",
- /* 14 */ "cmd ::= ROLLBACK trans_opt",
- /* 15 */ "cmd ::= create_table create_table_args",
- /* 16 */ "create_table ::= CREATE temp TABLE nm",
- /* 17 */ "temp ::= TEMP",
- /* 18 */ "temp ::=",
- /* 19 */ "create_table_args ::= LP columnlist conslist_opt RP",
- /* 20 */ "create_table_args ::= AS select",
- /* 21 */ "columnlist ::= columnlist COMMA column",
- /* 22 */ "columnlist ::= column",
- /* 23 */ "column ::= columnid type carglist",
- /* 24 */ "columnid ::= nm",
- /* 25 */ "id ::= ID",
- /* 26 */ "ids ::= ID",
- /* 27 */ "ids ::= STRING",
- /* 28 */ "nm ::= ID",
- /* 29 */ "nm ::= STRING",
- /* 30 */ "nm ::= JOIN_KW",
- /* 31 */ "type ::=",
- /* 32 */ "type ::= typename",
- /* 33 */ "type ::= typename LP signed RP",
- /* 34 */ "type ::= typename LP signed COMMA signed RP",
- /* 35 */ "typename ::= ids",
- /* 36 */ "typename ::= typename ids",
- /* 37 */ "signed ::= INTEGER",
- /* 38 */ "signed ::= PLUS INTEGER",
- /* 39 */ "signed ::= MINUS INTEGER",
- /* 40 */ "carglist ::= carglist carg",
- /* 41 */ "carglist ::=",
- /* 42 */ "carg ::= CONSTRAINT nm ccons",
- /* 43 */ "carg ::= ccons",
- /* 44 */ "carg ::= DEFAULT STRING",
- /* 45 */ "carg ::= DEFAULT ID",
- /* 46 */ "carg ::= DEFAULT INTEGER",
- /* 47 */ "carg ::= DEFAULT PLUS INTEGER",
- /* 48 */ "carg ::= DEFAULT MINUS INTEGER",
- /* 49 */ "carg ::= DEFAULT FLOAT",
- /* 50 */ "carg ::= DEFAULT PLUS FLOAT",
- /* 51 */ "carg ::= DEFAULT MINUS FLOAT",
- /* 52 */ "carg ::= DEFAULT NULL",
- /* 53 */ "ccons ::= NULL onconf",
- /* 54 */ "ccons ::= NOT NULL onconf",
- /* 55 */ "ccons ::= PRIMARY KEY sortorder onconf",
- /* 56 */ "ccons ::= UNIQUE onconf",
- /* 57 */ "ccons ::= CHECK LP expr RP onconf",
- /* 58 */ "ccons ::= REFERENCES nm idxlist_opt refargs",
- /* 59 */ "ccons ::= defer_subclause",
- /* 60 */ "ccons ::= COLLATE id",
- /* 61 */ "refargs ::=",
- /* 62 */ "refargs ::= refargs refarg",
- /* 63 */ "refarg ::= MATCH nm",
- /* 64 */ "refarg ::= ON DELETE refact",
- /* 65 */ "refarg ::= ON UPDATE refact",
- /* 66 */ "refarg ::= ON INSERT refact",
- /* 67 */ "refact ::= SET NULL",
- /* 68 */ "refact ::= SET DEFAULT",
- /* 69 */ "refact ::= CASCADE",
- /* 70 */ "refact ::= RESTRICT",
- /* 71 */ "defer_subclause ::= NOT DEFERRABLE init_deferred_pred_opt",
- /* 72 */ "defer_subclause ::= DEFERRABLE init_deferred_pred_opt",
- /* 73 */ "init_deferred_pred_opt ::=",
- /* 74 */ "init_deferred_pred_opt ::= INITIALLY DEFERRED",
- /* 75 */ "init_deferred_pred_opt ::= INITIALLY IMMEDIATE",
- /* 76 */ "conslist_opt ::=",
- /* 77 */ "conslist_opt ::= COMMA conslist",
- /* 78 */ "conslist ::= conslist COMMA tcons",
- /* 79 */ "conslist ::= conslist tcons",
- /* 80 */ "conslist ::= tcons",
- /* 81 */ "tcons ::= CONSTRAINT nm",
- /* 82 */ "tcons ::= PRIMARY KEY LP idxlist RP onconf",
- /* 83 */ "tcons ::= UNIQUE LP idxlist RP onconf",
- /* 84 */ "tcons ::= CHECK expr onconf",
- /* 85 */ "tcons ::= FOREIGN KEY LP idxlist RP REFERENCES nm idxlist_opt refargs defer_subclause_opt",
- /* 86 */ "defer_subclause_opt ::=",
- /* 87 */ "defer_subclause_opt ::= defer_subclause",
- /* 88 */ "onconf ::=",
- /* 89 */ "onconf ::= ON CONFLICT resolvetype",
- /* 90 */ "orconf ::=",
- /* 91 */ "orconf ::= OR resolvetype",
- /* 92 */ "resolvetype ::= ROLLBACK",
- /* 93 */ "resolvetype ::= ABORT",
- /* 94 */ "resolvetype ::= FAIL",
- /* 95 */ "resolvetype ::= IGNORE",
- /* 96 */ "resolvetype ::= REPLACE",
- /* 97 */ "cmd ::= DROP TABLE nm",
- /* 98 */ "cmd ::= CREATE temp VIEW nm AS select",
- /* 99 */ "cmd ::= DROP VIEW nm",
- /* 100 */ "cmd ::= select",
- /* 101 */ "select ::= oneselect",
- /* 102 */ "select ::= select multiselect_op oneselect",
- /* 103 */ "multiselect_op ::= UNION",
- /* 104 */ "multiselect_op ::= UNION ALL",
- /* 105 */ "multiselect_op ::= INTERSECT",
- /* 106 */ "multiselect_op ::= EXCEPT",
- /* 107 */ "oneselect ::= SELECT distinct selcollist from where_opt groupby_opt having_opt orderby_opt limit_opt",
- /* 108 */ "distinct ::= DISTINCT",
- /* 109 */ "distinct ::= ALL",
- /* 110 */ "distinct ::=",
- /* 111 */ "sclp ::= selcollist COMMA",
- /* 112 */ "sclp ::=",
- /* 113 */ "selcollist ::= sclp expr as",
- /* 114 */ "selcollist ::= sclp STAR",
- /* 115 */ "selcollist ::= sclp nm DOT STAR",
- /* 116 */ "as ::= AS nm",
- /* 117 */ "as ::= ids",
- /* 118 */ "as ::=",
- /* 119 */ "from ::=",
- /* 120 */ "from ::= FROM seltablist",
- /* 121 */ "stl_prefix ::= seltablist joinop",
- /* 122 */ "stl_prefix ::=",
- /* 123 */ "seltablist ::= stl_prefix nm dbnm as on_opt using_opt",
- /* 124 */ "seltablist ::= stl_prefix LP seltablist_paren RP as on_opt using_opt",
- /* 125 */ "seltablist_paren ::= select",
- /* 126 */ "seltablist_paren ::= seltablist",
- /* 127 */ "dbnm ::=",
- /* 128 */ "dbnm ::= DOT nm",
- /* 129 */ "joinop ::= COMMA",
- /* 130 */ "joinop ::= JOIN",
- /* 131 */ "joinop ::= JOIN_KW JOIN",
- /* 132 */ "joinop ::= JOIN_KW nm JOIN",
- /* 133 */ "joinop ::= JOIN_KW nm nm JOIN",
- /* 134 */ "on_opt ::= ON expr",
- /* 135 */ "on_opt ::=",
- /* 136 */ "using_opt ::= USING LP idxlist RP",
- /* 137 */ "using_opt ::=",
- /* 138 */ "orderby_opt ::=",
- /* 139 */ "orderby_opt ::= ORDER BY sortlist",
- /* 140 */ "sortlist ::= sortlist COMMA sortitem collate sortorder",
- /* 141 */ "sortlist ::= sortitem collate sortorder",
- /* 142 */ "sortitem ::= expr",
- /* 143 */ "sortorder ::= ASC",
- /* 144 */ "sortorder ::= DESC",
- /* 145 */ "sortorder ::=",
- /* 146 */ "collate ::=",
- /* 147 */ "collate ::= COLLATE id",
- /* 148 */ "groupby_opt ::=",
- /* 149 */ "groupby_opt ::= GROUP BY exprlist",
- /* 150 */ "having_opt ::=",
- /* 151 */ "having_opt ::= HAVING expr",
- /* 152 */ "limit_opt ::=",
- /* 153 */ "limit_opt ::= LIMIT signed",
- /* 154 */ "limit_opt ::= LIMIT signed OFFSET signed",
- /* 155 */ "limit_opt ::= LIMIT signed COMMA signed",
- /* 156 */ "cmd ::= DELETE FROM nm dbnm where_opt",
- /* 157 */ "where_opt ::=",
- /* 158 */ "where_opt ::= WHERE expr",
- /* 159 */ "cmd ::= UPDATE orconf nm dbnm SET setlist where_opt",
- /* 160 */ "setlist ::= setlist COMMA nm EQ expr",
- /* 161 */ "setlist ::= nm EQ expr",
- /* 162 */ "cmd ::= insert_cmd INTO nm dbnm inscollist_opt VALUES LP itemlist RP",
- /* 163 */ "cmd ::= insert_cmd INTO nm dbnm inscollist_opt select",
- /* 164 */ "insert_cmd ::= INSERT orconf",
- /* 165 */ "insert_cmd ::= REPLACE",
- /* 166 */ "itemlist ::= itemlist COMMA expr",
- /* 167 */ "itemlist ::= expr",
- /* 168 */ "inscollist_opt ::=",
- /* 169 */ "inscollist_opt ::= LP inscollist RP",
- /* 170 */ "inscollist ::= inscollist COMMA nm",
- /* 171 */ "inscollist ::= nm",
- /* 172 */ "expr ::= LP expr RP",
- /* 173 */ "expr ::= NULL",
- /* 174 */ "expr ::= ID",
- /* 175 */ "expr ::= JOIN_KW",
- /* 176 */ "expr ::= nm DOT nm",
- /* 177 */ "expr ::= nm DOT nm DOT nm",
- /* 178 */ "expr ::= INTEGER",
- /* 179 */ "expr ::= FLOAT",
- /* 180 */ "expr ::= STRING",
- /* 181 */ "expr ::= VARIABLE",
- /* 182 */ "expr ::= ID LP exprlist RP",
- /* 183 */ "expr ::= ID LP STAR RP",
- /* 184 */ "expr ::= expr AND expr",
- /* 185 */ "expr ::= expr OR expr",
- /* 186 */ "expr ::= expr LT expr",
- /* 187 */ "expr ::= expr GT expr",
- /* 188 */ "expr ::= expr LE expr",
- /* 189 */ "expr ::= expr GE expr",
- /* 190 */ "expr ::= expr NE expr",
- /* 191 */ "expr ::= expr EQ expr",
- /* 192 */ "expr ::= expr BITAND expr",
- /* 193 */ "expr ::= expr BITOR expr",
- /* 194 */ "expr ::= expr LSHIFT expr",
- /* 195 */ "expr ::= expr RSHIFT expr",
- /* 196 */ "expr ::= expr likeop expr",
- /* 197 */ "expr ::= expr NOT likeop expr",
- /* 198 */ "likeop ::= LIKE",
- /* 199 */ "likeop ::= GLOB",
- /* 200 */ "expr ::= expr PLUS expr",
- /* 201 */ "expr ::= expr MINUS expr",
- /* 202 */ "expr ::= expr STAR expr",
- /* 203 */ "expr ::= expr SLASH expr",
- /* 204 */ "expr ::= expr REM expr",
- /* 205 */ "expr ::= expr CONCAT expr",
- /* 206 */ "expr ::= expr ISNULL",
- /* 207 */ "expr ::= expr IS NULL",
- /* 208 */ "expr ::= expr NOTNULL",
- /* 209 */ "expr ::= expr NOT NULL",
- /* 210 */ "expr ::= expr IS NOT NULL",
- /* 211 */ "expr ::= NOT expr",
- /* 212 */ "expr ::= BITNOT expr",
- /* 213 */ "expr ::= MINUS expr",
- /* 214 */ "expr ::= PLUS expr",
- /* 215 */ "expr ::= LP select RP",
- /* 216 */ "expr ::= expr BETWEEN expr AND expr",
- /* 217 */ "expr ::= expr NOT BETWEEN expr AND expr",
- /* 218 */ "expr ::= expr IN LP exprlist RP",
- /* 219 */ "expr ::= expr IN LP select RP",
- /* 220 */ "expr ::= expr NOT IN LP exprlist RP",
- /* 221 */ "expr ::= expr NOT IN LP select RP",
- /* 222 */ "expr ::= expr IN nm dbnm",
- /* 223 */ "expr ::= expr NOT IN nm dbnm",
- /* 224 */ "expr ::= CASE case_operand case_exprlist case_else END",
- /* 225 */ "case_exprlist ::= case_exprlist WHEN expr THEN expr",
- /* 226 */ "case_exprlist ::= WHEN expr THEN expr",
- /* 227 */ "case_else ::= ELSE expr",
- /* 228 */ "case_else ::=",
- /* 229 */ "case_operand ::= expr",
- /* 230 */ "case_operand ::=",
- /* 231 */ "exprlist ::= exprlist COMMA expritem",
- /* 232 */ "exprlist ::= expritem",
- /* 233 */ "expritem ::= expr",
- /* 234 */ "expritem ::=",
- /* 235 */ "cmd ::= CREATE uniqueflag INDEX nm ON nm dbnm LP idxlist RP onconf",
- /* 236 */ "uniqueflag ::= UNIQUE",
- /* 237 */ "uniqueflag ::=",
- /* 238 */ "idxlist_opt ::=",
- /* 239 */ "idxlist_opt ::= LP idxlist RP",
- /* 240 */ "idxlist ::= idxlist COMMA idxitem",
- /* 241 */ "idxlist ::= idxitem",
- /* 242 */ "idxitem ::= nm sortorder",
- /* 243 */ "cmd ::= DROP INDEX nm dbnm",
- /* 244 */ "cmd ::= COPY orconf nm dbnm FROM nm USING DELIMITERS STRING",
- /* 245 */ "cmd ::= COPY orconf nm dbnm FROM nm",
- /* 246 */ "cmd ::= VACUUM",
- /* 247 */ "cmd ::= VACUUM nm",
- /* 248 */ "cmd ::= PRAGMA ids EQ nm",
- /* 249 */ "cmd ::= PRAGMA ids EQ ON",
- /* 250 */ "cmd ::= PRAGMA ids EQ plus_num",
- /* 251 */ "cmd ::= PRAGMA ids EQ minus_num",
- /* 252 */ "cmd ::= PRAGMA ids LP nm RP",
- /* 253 */ "cmd ::= PRAGMA ids",
- /* 254 */ "plus_num ::= plus_opt number",
- /* 255 */ "minus_num ::= MINUS number",
- /* 256 */ "number ::= INTEGER",
- /* 257 */ "number ::= FLOAT",
- /* 258 */ "plus_opt ::= PLUS",
- /* 259 */ "plus_opt ::=",
- /* 260 */ "cmd ::= CREATE trigger_decl BEGIN trigger_cmd_list END",
- /* 261 */ "trigger_decl ::= temp TRIGGER nm trigger_time trigger_event ON nm dbnm foreach_clause when_clause",
- /* 262 */ "trigger_time ::= BEFORE",
- /* 263 */ "trigger_time ::= AFTER",
- /* 264 */ "trigger_time ::= INSTEAD OF",
- /* 265 */ "trigger_time ::=",
- /* 266 */ "trigger_event ::= DELETE",
- /* 267 */ "trigger_event ::= INSERT",
- /* 268 */ "trigger_event ::= UPDATE",
- /* 269 */ "trigger_event ::= UPDATE OF inscollist",
- /* 270 */ "foreach_clause ::=",
- /* 271 */ "foreach_clause ::= FOR EACH ROW",
- /* 272 */ "foreach_clause ::= FOR EACH STATEMENT",
- /* 273 */ "when_clause ::=",
- /* 274 */ "when_clause ::= WHEN expr",
- /* 275 */ "trigger_cmd_list ::= trigger_cmd SEMI trigger_cmd_list",
- /* 276 */ "trigger_cmd_list ::=",
- /* 277 */ "trigger_cmd ::= UPDATE orconf nm SET setlist where_opt",
- /* 278 */ "trigger_cmd ::= insert_cmd INTO nm inscollist_opt VALUES LP itemlist RP",
- /* 279 */ "trigger_cmd ::= insert_cmd INTO nm inscollist_opt select",
- /* 280 */ "trigger_cmd ::= DELETE FROM nm where_opt",
- /* 281 */ "trigger_cmd ::= select",
- /* 282 */ "expr ::= RAISE LP IGNORE RP",
- /* 283 */ "expr ::= RAISE LP ROLLBACK COMMA nm RP",
- /* 284 */ "expr ::= RAISE LP ABORT COMMA nm RP",
- /* 285 */ "expr ::= RAISE LP FAIL COMMA nm RP",
- /* 286 */ "cmd ::= DROP TRIGGER nm dbnm",
- /* 287 */ "cmd ::= ATTACH database_kw_opt ids AS nm key_opt",
- /* 288 */ "key_opt ::= USING ids",
- /* 289 */ "key_opt ::=",
- /* 290 */ "database_kw_opt ::= DATABASE",
- /* 291 */ "database_kw_opt ::=",
- /* 292 */ "cmd ::= DETACH database_kw_opt nm",
-};
-#endif /* NDEBUG */
-
-/*
-** This function returns the symbolic name associated with a token
-** value.
-*/
-const char *sqliteParserTokenName(int tokenType){
-#ifndef NDEBUG
- if( tokenType>0 && tokenType<(sizeof(yyTokenName)/sizeof(yyTokenName[0])) ){
- return yyTokenName[tokenType];
- }else{
- return "Unknown";
- }
-#else
- return "";
-#endif
-}
-
-/*
-** This function allocates a new parser.
-** The only argument is a pointer to a function which works like
-** malloc.
-**
-** Inputs:
-** A pointer to the function used to allocate memory.
-**
-** Outputs:
-** A pointer to a parser. This pointer is used in subsequent calls
-** to sqliteParser and sqliteParserFree.
-*/
-void *sqliteParserAlloc(void *(*mallocProc)(size_t)){
- yyParser *pParser;
- pParser = (yyParser*)(*mallocProc)( (size_t)sizeof(yyParser) );
- if( pParser ){
- pParser->yyidx = -1;
- }
- return pParser;
-}
-
-/* The following function deletes the value associated with a
-** symbol. The symbol can be either a terminal or nonterminal.
-** "yymajor" is the symbol code, and "yypminor" is a pointer to
-** the value.
-*/
-static void yy_destructor(YYCODETYPE yymajor, YYMINORTYPE *yypminor){
- switch( yymajor ){
- /* Here is inserted the actions which take place when a
- ** terminal or non-terminal is destroyed. This can happen
- ** when the symbol is popped from the stack during a
- ** reduce or during error processing or when a parser is
- ** being destroyed before it is finished parsing.
- **
- ** Note: during a reduce, the only symbols destroyed are those
- ** which appear on the RHS of the rule, but which are not used
- ** inside the C code.
- */
- case 146:
-#line 286 "parse.y"
-{sqliteSelectDelete((yypminor->yy179));}
-#line 1235 "parse.c"
- break;
- case 158:
-#line 533 "parse.y"
-{sqliteExprDelete((yypminor->yy242));}
-#line 1240 "parse.c"
- break;
- case 159:
-#line 746 "parse.y"
-{sqliteIdListDelete((yypminor->yy320));}
-#line 1245 "parse.c"
- break;
- case 167:
-#line 744 "parse.y"
-{sqliteIdListDelete((yypminor->yy320));}
-#line 1250 "parse.c"
- break;
- case 171:
-#line 288 "parse.y"
-{sqliteSelectDelete((yypminor->yy179));}
-#line 1255 "parse.c"
- break;
- case 174:
-#line 322 "parse.y"
-{sqliteExprListDelete((yypminor->yy322));}
-#line 1260 "parse.c"
- break;
- case 175:
-#line 353 "parse.y"
-{sqliteSrcListDelete((yypminor->yy307));}
-#line 1265 "parse.c"
- break;
- case 176:
-#line 483 "parse.y"
-{sqliteExprDelete((yypminor->yy242));}
-#line 1270 "parse.c"
- break;
- case 177:
-#line 459 "parse.y"
-{sqliteExprListDelete((yypminor->yy322));}
-#line 1275 "parse.c"
- break;
- case 178:
-#line 464 "parse.y"
-{sqliteExprDelete((yypminor->yy242));}
-#line 1280 "parse.c"
- break;
- case 179:
-#line 431 "parse.y"
-{sqliteExprListDelete((yypminor->yy322));}
-#line 1285 "parse.c"
- break;
- case 181:
-#line 324 "parse.y"
-{sqliteExprListDelete((yypminor->yy322));}
-#line 1290 "parse.c"
- break;
- case 183:
-#line 349 "parse.y"
-{sqliteSrcListDelete((yypminor->yy307));}
-#line 1295 "parse.c"
- break;
- case 184:
-#line 351 "parse.y"
-{sqliteSrcListDelete((yypminor->yy307));}
-#line 1300 "parse.c"
- break;
- case 187:
-#line 420 "parse.y"
-{sqliteExprDelete((yypminor->yy242));}
-#line 1305 "parse.c"
- break;
- case 188:
-#line 425 "parse.y"
-{sqliteIdListDelete((yypminor->yy320));}
-#line 1310 "parse.c"
- break;
- case 189:
-#line 400 "parse.y"
-{sqliteSelectDelete((yypminor->yy179));}
-#line 1315 "parse.c"
- break;
- case 191:
-#line 433 "parse.y"
-{sqliteExprListDelete((yypminor->yy322));}
-#line 1320 "parse.c"
- break;
- case 192:
-#line 435 "parse.y"
-{sqliteExprDelete((yypminor->yy242));}
-#line 1325 "parse.c"
- break;
- case 194:
-#line 719 "parse.y"
-{sqliteExprListDelete((yypminor->yy322));}
-#line 1330 "parse.c"
- break;
- case 195:
-#line 489 "parse.y"
-{sqliteExprListDelete((yypminor->yy322));}
-#line 1335 "parse.c"
- break;
- case 197:
-#line 520 "parse.y"
-{sqliteIdListDelete((yypminor->yy320));}
-#line 1340 "parse.c"
- break;
- case 198:
-#line 514 "parse.y"
-{sqliteExprListDelete((yypminor->yy322));}
-#line 1345 "parse.c"
- break;
- case 199:
-#line 522 "parse.y"
-{sqliteIdListDelete((yypminor->yy320));}
-#line 1350 "parse.c"
- break;
- case 202:
-#line 702 "parse.y"
-{sqliteExprListDelete((yypminor->yy322));}
-#line 1355 "parse.c"
- break;
- case 204:
-#line 721 "parse.y"
-{sqliteExprDelete((yypminor->yy242));}
-#line 1360 "parse.c"
- break;
- case 212:
-#line 828 "parse.y"
-{sqliteDeleteTriggerStep((yypminor->yy19));}
-#line 1365 "parse.c"
- break;
- case 214:
-#line 812 "parse.y"
-{sqliteIdListDelete((yypminor->yy290).b);}
-#line 1370 "parse.c"
- break;
- case 217:
-#line 836 "parse.y"
-{sqliteDeleteTriggerStep((yypminor->yy19));}
-#line 1375 "parse.c"
- break;
- default: break; /* If no destructor action specified: do nothing */
- }
-}
-
-/*
-** Pop the parser's stack once.
-**
-** If there is a destructor routine associated with the token which
-** is popped from the stack, then call it.
-**
-** Return the major token number for the symbol popped.
-*/
-static int yy_pop_parser_stack(yyParser *pParser){
- YYCODETYPE yymajor;
- yyStackEntry *yytos = &pParser->yystack[pParser->yyidx];
-
- if( pParser->yyidx<0 ) return 0;
-#ifndef NDEBUG
- if( yyTraceFILE && pParser->yyidx>=0 ){
- fprintf(yyTraceFILE,"%sPopping %s\n",
- yyTracePrompt,
- yyTokenName[yytos->major]);
- }
-#endif
- yymajor = yytos->major;
- yy_destructor( yymajor, &yytos->minor);
- pParser->yyidx--;
- return yymajor;
-}
-
-/*
-** Deallocate and destroy a parser. Destructors are all called for
-** all stack elements before shutting the parser down.
-**
-** Inputs:
-** <ul>
-** <li> A pointer to the parser. This should be a pointer
-** obtained from sqliteParserAlloc.
-** <li> A pointer to a function used to reclaim memory obtained
-** from malloc.
-** </ul>
-*/
-void sqliteParserFree(
- void *p, /* The parser to be deleted */
- void (*freeProc)(void*) /* Function used to reclaim memory */
-){
- yyParser *pParser = (yyParser*)p;
- if( pParser==0 ) return;
- while( pParser->yyidx>=0 ) yy_pop_parser_stack(pParser);
- (*freeProc)((void*)pParser);
-}
-
-/*
-** Find the appropriate action for a parser given the terminal
-** look-ahead token iLookAhead.
-**
-** If the look-ahead token is YYNOCODE, then check to see if the action is
-** independent of the look-ahead. If it is, return the action, otherwise
-** return YY_NO_ACTION.
-*/
-static int yy_find_shift_action(
- yyParser *pParser, /* The parser */
- int iLookAhead /* The look-ahead token */
-){
- int i;
- int stateno = pParser->yystack[pParser->yyidx].stateno;
-
- /* if( pParser->yyidx<0 ) return YY_NO_ACTION; */
- i = yy_shift_ofst[stateno];
- if( i==YY_SHIFT_USE_DFLT ){
- return yy_default[stateno];
- }
- if( iLookAhead==YYNOCODE ){
- return YY_NO_ACTION;
- }
- i += iLookAhead;
- if( i<0 || i>=YY_SZ_ACTTAB || yy_lookahead[i]!=iLookAhead ){
-#ifdef YYFALLBACK
- int iFallback; /* Fallback token */
- if( iLookAhead<sizeof(yyFallback)/sizeof(yyFallback[0])
- && (iFallback = yyFallback[iLookAhead])!=0 ){
-#ifndef NDEBUG
- if( yyTraceFILE ){
- fprintf(yyTraceFILE, "%sFALLBACK %s => %s\n",
- yyTracePrompt, yyTokenName[iLookAhead], yyTokenName[iFallback]);
- }
-#endif
- return yy_find_shift_action(pParser, iFallback);
- }
-#endif
- return yy_default[stateno];
- }else{
- return yy_action[i];
- }
-}
-
-/*
-** Find the appropriate action for a parser given the non-terminal
-** look-ahead token iLookAhead.
-**
-** If the look-ahead token is YYNOCODE, then check to see if the action is
-** independent of the look-ahead. If it is, return the action, otherwise
-** return YY_NO_ACTION.
-*/
-static int yy_find_reduce_action(
- yyParser *pParser, /* The parser */
- int iLookAhead /* The look-ahead token */
-){
- int i;
- int stateno = pParser->yystack[pParser->yyidx].stateno;
-
- i = yy_reduce_ofst[stateno];
- if( i==YY_REDUCE_USE_DFLT ){
- return yy_default[stateno];
- }
- if( iLookAhead==YYNOCODE ){
- return YY_NO_ACTION;
- }
- i += iLookAhead;
- if( i<0 || i>=YY_SZ_ACTTAB || yy_lookahead[i]!=iLookAhead ){
- return yy_default[stateno];
- }else{
- return yy_action[i];
- }
-}
-
-/*
-** Perform a shift action.
-*/
-static void yy_shift(
- yyParser *yypParser, /* The parser to be shifted */
- int yyNewState, /* The new state to shift in */
- int yyMajor, /* The major token to shift in */
- YYMINORTYPE *yypMinor /* Pointer ot the minor token to shift in */
-){
- yyStackEntry *yytos;
- yypParser->yyidx++;
- if( yypParser->yyidx>=YYSTACKDEPTH ){
- sqliteParserARG_FETCH;
- yypParser->yyidx--;
-#ifndef NDEBUG
- if( yyTraceFILE ){
- fprintf(yyTraceFILE,"%sStack Overflow!\n",yyTracePrompt);
- }
-#endif
- while( yypParser->yyidx>=0 ) yy_pop_parser_stack(yypParser);
- /* Here code is inserted which will execute if the parser
- ** stack every overflows */
- sqliteParserARG_STORE; /* Suppress warning about unused %extra_argument var */
- return;
- }
- yytos = &yypParser->yystack[yypParser->yyidx];
- yytos->stateno = yyNewState;
- yytos->major = yyMajor;
- yytos->minor = *yypMinor;
-#ifndef NDEBUG
- if( yyTraceFILE && yypParser->yyidx>0 ){
- int i;
- fprintf(yyTraceFILE,"%sShift %d\n",yyTracePrompt,yyNewState);
- fprintf(yyTraceFILE,"%sStack:",yyTracePrompt);
- for(i=1; i<=yypParser->yyidx; i++)
- fprintf(yyTraceFILE," %s",yyTokenName[yypParser->yystack[i].major]);
- fprintf(yyTraceFILE,"\n");
- }
-#endif
-}
-
-/* The following table contains information about every rule that
-** is used during the reduce.
-*/
-static struct {
- YYCODETYPE lhs; /* Symbol on the left-hand side of the rule */
- unsigned char nrhs; /* Number of right-hand side symbols in the rule */
-} yyRuleInfo[] = {
- { 132, 1 },
- { 133, 2 },
- { 133, 1 },
- { 134, 3 },
- { 134, 1 },
- { 136, 1 },
- { 135, 1 },
- { 135, 0 },
- { 137, 3 },
- { 138, 0 },
- { 138, 1 },
- { 138, 2 },
- { 137, 2 },
- { 137, 2 },
- { 137, 2 },
- { 137, 2 },
- { 141, 4 },
- { 143, 1 },
- { 143, 0 },
- { 142, 4 },
- { 142, 2 },
- { 144, 3 },
- { 144, 1 },
- { 147, 3 },
- { 148, 1 },
- { 151, 1 },
- { 152, 1 },
- { 152, 1 },
- { 140, 1 },
- { 140, 1 },
- { 140, 1 },
- { 149, 0 },
- { 149, 1 },
- { 149, 4 },
- { 149, 6 },
- { 153, 1 },
- { 153, 2 },
- { 154, 1 },
- { 154, 2 },
- { 154, 2 },
- { 150, 2 },
- { 150, 0 },
- { 155, 3 },
- { 155, 1 },
- { 155, 2 },
- { 155, 2 },
- { 155, 2 },
- { 155, 3 },
- { 155, 3 },
- { 155, 2 },
- { 155, 3 },
- { 155, 3 },
- { 155, 2 },
- { 156, 2 },
- { 156, 3 },
- { 156, 4 },
- { 156, 2 },
- { 156, 5 },
- { 156, 4 },
- { 156, 1 },
- { 156, 2 },
- { 160, 0 },
- { 160, 2 },
- { 162, 2 },
- { 162, 3 },
- { 162, 3 },
- { 162, 3 },
- { 163, 2 },
- { 163, 2 },
- { 163, 1 },
- { 163, 1 },
- { 161, 3 },
- { 161, 2 },
- { 164, 0 },
- { 164, 2 },
- { 164, 2 },
- { 145, 0 },
- { 145, 2 },
- { 165, 3 },
- { 165, 2 },
- { 165, 1 },
- { 166, 2 },
- { 166, 6 },
- { 166, 5 },
- { 166, 3 },
- { 166, 10 },
- { 168, 0 },
- { 168, 1 },
- { 139, 0 },
- { 139, 3 },
- { 169, 0 },
- { 169, 2 },
- { 170, 1 },
- { 170, 1 },
- { 170, 1 },
- { 170, 1 },
- { 170, 1 },
- { 137, 3 },
- { 137, 6 },
- { 137, 3 },
- { 137, 1 },
- { 146, 1 },
- { 146, 3 },
- { 172, 1 },
- { 172, 2 },
- { 172, 1 },
- { 172, 1 },
- { 171, 9 },
- { 173, 1 },
- { 173, 1 },
- { 173, 0 },
- { 181, 2 },
- { 181, 0 },
- { 174, 3 },
- { 174, 2 },
- { 174, 4 },
- { 182, 2 },
- { 182, 1 },
- { 182, 0 },
- { 175, 0 },
- { 175, 2 },
- { 184, 2 },
- { 184, 0 },
- { 183, 6 },
- { 183, 7 },
- { 189, 1 },
- { 189, 1 },
- { 186, 0 },
- { 186, 2 },
- { 185, 1 },
- { 185, 1 },
- { 185, 2 },
- { 185, 3 },
- { 185, 4 },
- { 187, 2 },
- { 187, 0 },
- { 188, 4 },
- { 188, 0 },
- { 179, 0 },
- { 179, 3 },
- { 191, 5 },
- { 191, 3 },
- { 192, 1 },
- { 157, 1 },
- { 157, 1 },
- { 157, 0 },
- { 193, 0 },
- { 193, 2 },
- { 177, 0 },
- { 177, 3 },
- { 178, 0 },
- { 178, 2 },
- { 180, 0 },
- { 180, 2 },
- { 180, 4 },
- { 180, 4 },
- { 137, 5 },
- { 176, 0 },
- { 176, 2 },
- { 137, 7 },
- { 195, 5 },
- { 195, 3 },
- { 137, 9 },
- { 137, 6 },
- { 196, 2 },
- { 196, 1 },
- { 198, 3 },
- { 198, 1 },
- { 197, 0 },
- { 197, 3 },
- { 199, 3 },
- { 199, 1 },
- { 158, 3 },
- { 158, 1 },
- { 158, 1 },
- { 158, 1 },
- { 158, 3 },
- { 158, 5 },
- { 158, 1 },
- { 158, 1 },
- { 158, 1 },
- { 158, 1 },
- { 158, 4 },
- { 158, 4 },
- { 158, 3 },
- { 158, 3 },
- { 158, 3 },
- { 158, 3 },
- { 158, 3 },
- { 158, 3 },
- { 158, 3 },
- { 158, 3 },
- { 158, 3 },
- { 158, 3 },
- { 158, 3 },
- { 158, 3 },
- { 158, 3 },
- { 158, 4 },
- { 200, 1 },
- { 200, 1 },
- { 158, 3 },
- { 158, 3 },
- { 158, 3 },
- { 158, 3 },
- { 158, 3 },
- { 158, 3 },
- { 158, 2 },
- { 158, 3 },
- { 158, 2 },
- { 158, 3 },
- { 158, 4 },
- { 158, 2 },
- { 158, 2 },
- { 158, 2 },
- { 158, 2 },
- { 158, 3 },
- { 158, 5 },
- { 158, 6 },
- { 158, 5 },
- { 158, 5 },
- { 158, 6 },
- { 158, 6 },
- { 158, 4 },
- { 158, 5 },
- { 158, 5 },
- { 202, 5 },
- { 202, 4 },
- { 203, 2 },
- { 203, 0 },
- { 201, 1 },
- { 201, 0 },
- { 194, 3 },
- { 194, 1 },
- { 204, 1 },
- { 204, 0 },
- { 137, 11 },
- { 205, 1 },
- { 205, 0 },
- { 159, 0 },
- { 159, 3 },
- { 167, 3 },
- { 167, 1 },
- { 206, 2 },
- { 137, 4 },
- { 137, 9 },
- { 137, 6 },
- { 137, 1 },
- { 137, 2 },
- { 137, 4 },
- { 137, 4 },
- { 137, 4 },
- { 137, 4 },
- { 137, 5 },
- { 137, 2 },
- { 207, 2 },
- { 208, 2 },
- { 210, 1 },
- { 210, 1 },
- { 209, 1 },
- { 209, 0 },
- { 137, 5 },
- { 211, 10 },
- { 213, 1 },
- { 213, 1 },
- { 213, 2 },
- { 213, 0 },
- { 214, 1 },
- { 214, 1 },
- { 214, 1 },
- { 214, 3 },
- { 215, 0 },
- { 215, 3 },
- { 215, 3 },
- { 216, 0 },
- { 216, 2 },
- { 212, 3 },
- { 212, 0 },
- { 217, 6 },
- { 217, 8 },
- { 217, 5 },
- { 217, 4 },
- { 217, 1 },
- { 158, 4 },
- { 158, 6 },
- { 158, 6 },
- { 158, 6 },
- { 137, 4 },
- { 137, 6 },
- { 219, 2 },
- { 219, 0 },
- { 218, 1 },
- { 218, 0 },
- { 137, 3 },
-};
-
-static void yy_accept(yyParser*); /* Forward Declaration */
-
-/*
-** Perform a reduce action and the shift that must immediately
-** follow the reduce.
-*/
-static void yy_reduce(
- yyParser *yypParser, /* The parser */
- int yyruleno /* Number of the rule by which to reduce */
-){
- int yygoto; /* The next state */
- int yyact; /* The next action */
- YYMINORTYPE yygotominor; /* The LHS of the rule reduced */
- yyStackEntry *yymsp; /* The top of the parser's stack */
- int yysize; /* Amount to pop the stack */
- sqliteParserARG_FETCH;
- yymsp = &yypParser->yystack[yypParser->yyidx];
-#ifndef NDEBUG
- if( yyTraceFILE && yyruleno>=0
- && yyruleno<sizeof(yyRuleName)/sizeof(yyRuleName[0]) ){
- fprintf(yyTraceFILE, "%sReduce [%s].\n", yyTracePrompt,
- yyRuleName[yyruleno]);
- }
-#endif /* NDEBUG */
-
- switch( yyruleno ){
- /* Beginning here are the reduction cases. A typical example
- ** follows:
- ** case 0:
- ** #line <lineno> <grammarfile>
- ** { ... } // User supplied code
- ** #line <lineno> <thisfile>
- ** break;
- */
- case 0:
- /* No destructor defined for cmdlist */
- break;
- case 1:
- /* No destructor defined for cmdlist */
- /* No destructor defined for ecmd */
- break;
- case 2:
- /* No destructor defined for ecmd */
- break;
- case 3:
- /* No destructor defined for explain */
- /* No destructor defined for cmdx */
- /* No destructor defined for SEMI */
- break;
- case 4:
- /* No destructor defined for SEMI */
- break;
- case 5:
-#line 72 "parse.y"
-{ sqliteExec(pParse); }
-#line 1901 "parse.c"
- /* No destructor defined for cmd */
- break;
- case 6:
-#line 73 "parse.y"
-{ sqliteBeginParse(pParse, 1); }
-#line 1907 "parse.c"
- /* No destructor defined for EXPLAIN */
- break;
- case 7:
-#line 74 "parse.y"
-{ sqliteBeginParse(pParse, 0); }
-#line 1913 "parse.c"
- break;
- case 8:
-#line 79 "parse.y"
-{sqliteBeginTransaction(pParse,yymsp[0].minor.yy372);}
-#line 1918 "parse.c"
- /* No destructor defined for BEGIN */
- /* No destructor defined for trans_opt */
- break;
- case 9:
- break;
- case 10:
- /* No destructor defined for TRANSACTION */
- break;
- case 11:
- /* No destructor defined for TRANSACTION */
- /* No destructor defined for nm */
- break;
- case 12:
-#line 83 "parse.y"
-{sqliteCommitTransaction(pParse);}
-#line 1934 "parse.c"
- /* No destructor defined for COMMIT */
- /* No destructor defined for trans_opt */
- break;
- case 13:
-#line 84 "parse.y"
-{sqliteCommitTransaction(pParse);}
-#line 1941 "parse.c"
- /* No destructor defined for END */
- /* No destructor defined for trans_opt */
- break;
- case 14:
-#line 85 "parse.y"
-{sqliteRollbackTransaction(pParse);}
-#line 1948 "parse.c"
- /* No destructor defined for ROLLBACK */
- /* No destructor defined for trans_opt */
- break;
- case 15:
- /* No destructor defined for create_table */
- /* No destructor defined for create_table_args */
- break;
- case 16:
-#line 90 "parse.y"
-{
- sqliteStartTable(pParse,&yymsp[-3].minor.yy0,&yymsp[0].minor.yy298,yymsp[-2].minor.yy372,0);
-}
-#line 1961 "parse.c"
- /* No destructor defined for TABLE */
- break;
- case 17:
-#line 94 "parse.y"
-{yygotominor.yy372 = 1;}
-#line 1967 "parse.c"
- /* No destructor defined for TEMP */
- break;
- case 18:
-#line 95 "parse.y"
-{yygotominor.yy372 = 0;}
-#line 1973 "parse.c"
- break;
- case 19:
-#line 96 "parse.y"
-{
- sqliteEndTable(pParse,&yymsp[0].minor.yy0,0);
-}
-#line 1980 "parse.c"
- /* No destructor defined for LP */
- /* No destructor defined for columnlist */
- /* No destructor defined for conslist_opt */
- break;
- case 20:
-#line 99 "parse.y"
-{
- sqliteEndTable(pParse,0,yymsp[0].minor.yy179);
- sqliteSelectDelete(yymsp[0].minor.yy179);
-}
-#line 1991 "parse.c"
- /* No destructor defined for AS */
- break;
- case 21:
- /* No destructor defined for columnlist */
- /* No destructor defined for COMMA */
- /* No destructor defined for column */
- break;
- case 22:
- /* No destructor defined for column */
- break;
- case 23:
- /* No destructor defined for columnid */
- /* No destructor defined for type */
- /* No destructor defined for carglist */
- break;
- case 24:
-#line 111 "parse.y"
-{sqliteAddColumn(pParse,&yymsp[0].minor.yy298);}
-#line 2010 "parse.c"
- break;
- case 25:
-#line 117 "parse.y"
-{yygotominor.yy298 = yymsp[0].minor.yy0;}
-#line 2015 "parse.c"
- break;
- case 26:
-#line 149 "parse.y"
-{yygotominor.yy298 = yymsp[0].minor.yy0;}
-#line 2020 "parse.c"
- break;
- case 27:
-#line 150 "parse.y"
-{yygotominor.yy298 = yymsp[0].minor.yy0;}
-#line 2025 "parse.c"
- break;
- case 28:
-#line 155 "parse.y"
-{yygotominor.yy298 = yymsp[0].minor.yy0;}
-#line 2030 "parse.c"
- break;
- case 29:
-#line 156 "parse.y"
-{yygotominor.yy298 = yymsp[0].minor.yy0;}
-#line 2035 "parse.c"
- break;
- case 30:
-#line 157 "parse.y"
-{yygotominor.yy298 = yymsp[0].minor.yy0;}
-#line 2040 "parse.c"
- break;
- case 31:
- break;
- case 32:
-#line 160 "parse.y"
-{sqliteAddColumnType(pParse,&yymsp[0].minor.yy298,&yymsp[0].minor.yy298);}
-#line 2047 "parse.c"
- break;
- case 33:
-#line 161 "parse.y"
-{sqliteAddColumnType(pParse,&yymsp[-3].minor.yy298,&yymsp[0].minor.yy0);}
-#line 2052 "parse.c"
- /* No destructor defined for LP */
- /* No destructor defined for signed */
- break;
- case 34:
-#line 163 "parse.y"
-{sqliteAddColumnType(pParse,&yymsp[-5].minor.yy298,&yymsp[0].minor.yy0);}
-#line 2059 "parse.c"
- /* No destructor defined for LP */
- /* No destructor defined for signed */
- /* No destructor defined for COMMA */
- /* No destructor defined for signed */
- break;
- case 35:
-#line 165 "parse.y"
-{yygotominor.yy298 = yymsp[0].minor.yy298;}
-#line 2068 "parse.c"
- break;
- case 36:
-#line 166 "parse.y"
-{yygotominor.yy298 = yymsp[-1].minor.yy298;}
-#line 2073 "parse.c"
- /* No destructor defined for ids */
- break;
- case 37:
-#line 168 "parse.y"
-{ yygotominor.yy372 = atoi(yymsp[0].minor.yy0.z); }
-#line 2079 "parse.c"
- break;
- case 38:
-#line 169 "parse.y"
-{ yygotominor.yy372 = atoi(yymsp[0].minor.yy0.z); }
-#line 2084 "parse.c"
- /* No destructor defined for PLUS */
- break;
- case 39:
-#line 170 "parse.y"
-{ yygotominor.yy372 = -atoi(yymsp[0].minor.yy0.z); }
-#line 2090 "parse.c"
- /* No destructor defined for MINUS */
- break;
- case 40:
- /* No destructor defined for carglist */
- /* No destructor defined for carg */
- break;
- case 41:
- break;
- case 42:
- /* No destructor defined for CONSTRAINT */
- /* No destructor defined for nm */
- /* No destructor defined for ccons */
- break;
- case 43:
- /* No destructor defined for ccons */
- break;
- case 44:
-#line 175 "parse.y"
-{sqliteAddDefaultValue(pParse,&yymsp[0].minor.yy0,0);}
-#line 2110 "parse.c"
- /* No destructor defined for DEFAULT */
- break;
- case 45:
-#line 176 "parse.y"
-{sqliteAddDefaultValue(pParse,&yymsp[0].minor.yy0,0);}
-#line 2116 "parse.c"
- /* No destructor defined for DEFAULT */
- break;
- case 46:
-#line 177 "parse.y"
-{sqliteAddDefaultValue(pParse,&yymsp[0].minor.yy0,0);}
-#line 2122 "parse.c"
- /* No destructor defined for DEFAULT */
- break;
- case 47:
-#line 178 "parse.y"
-{sqliteAddDefaultValue(pParse,&yymsp[0].minor.yy0,0);}
-#line 2128 "parse.c"
- /* No destructor defined for DEFAULT */
- /* No destructor defined for PLUS */
- break;
- case 48:
-#line 179 "parse.y"
-{sqliteAddDefaultValue(pParse,&yymsp[0].minor.yy0,1);}
-#line 2135 "parse.c"
- /* No destructor defined for DEFAULT */
- /* No destructor defined for MINUS */
- break;
- case 49:
-#line 180 "parse.y"
-{sqliteAddDefaultValue(pParse,&yymsp[0].minor.yy0,0);}
-#line 2142 "parse.c"
- /* No destructor defined for DEFAULT */
- break;
- case 50:
-#line 181 "parse.y"
-{sqliteAddDefaultValue(pParse,&yymsp[0].minor.yy0,0);}
-#line 2148 "parse.c"
- /* No destructor defined for DEFAULT */
- /* No destructor defined for PLUS */
- break;
- case 51:
-#line 182 "parse.y"
-{sqliteAddDefaultValue(pParse,&yymsp[0].minor.yy0,1);}
-#line 2155 "parse.c"
- /* No destructor defined for DEFAULT */
- /* No destructor defined for MINUS */
- break;
- case 52:
- /* No destructor defined for DEFAULT */
- /* No destructor defined for NULL */
- break;
- case 53:
- /* No destructor defined for NULL */
- /* No destructor defined for onconf */
- break;
- case 54:
-#line 189 "parse.y"
-{sqliteAddNotNull(pParse, yymsp[0].minor.yy372);}
-#line 2170 "parse.c"
- /* No destructor defined for NOT */
- /* No destructor defined for NULL */
- break;
- case 55:
-#line 190 "parse.y"
-{sqliteAddPrimaryKey(pParse,0,yymsp[0].minor.yy372);}
-#line 2177 "parse.c"
- /* No destructor defined for PRIMARY */
- /* No destructor defined for KEY */
- /* No destructor defined for sortorder */
- break;
- case 56:
-#line 191 "parse.y"
-{sqliteCreateIndex(pParse,0,0,0,yymsp[0].minor.yy372,0,0);}
-#line 2185 "parse.c"
- /* No destructor defined for UNIQUE */
- break;
- case 57:
- /* No destructor defined for CHECK */
- /* No destructor defined for LP */
- yy_destructor(158,&yymsp[-2].minor);
- /* No destructor defined for RP */
- /* No destructor defined for onconf */
- break;
- case 58:
-#line 194 "parse.y"
-{sqliteCreateForeignKey(pParse,0,&yymsp[-2].minor.yy298,yymsp[-1].minor.yy320,yymsp[0].minor.yy372);}
-#line 2198 "parse.c"
- /* No destructor defined for REFERENCES */
- break;
- case 59:
-#line 195 "parse.y"
-{sqliteDeferForeignKey(pParse,yymsp[0].minor.yy372);}
-#line 2204 "parse.c"
- break;
- case 60:
-#line 196 "parse.y"
-{
- sqliteAddCollateType(pParse, sqliteCollateType(yymsp[0].minor.yy298.z, yymsp[0].minor.yy298.n));
-}
-#line 2211 "parse.c"
- /* No destructor defined for COLLATE */
- break;
- case 61:
-#line 206 "parse.y"
-{ yygotominor.yy372 = OE_Restrict * 0x010101; }
-#line 2217 "parse.c"
- break;
- case 62:
-#line 207 "parse.y"
-{ yygotominor.yy372 = (yymsp[-1].minor.yy372 & yymsp[0].minor.yy407.mask) | yymsp[0].minor.yy407.value; }
-#line 2222 "parse.c"
- break;
- case 63:
-#line 209 "parse.y"
-{ yygotominor.yy407.value = 0; yygotominor.yy407.mask = 0x000000; }
-#line 2227 "parse.c"
- /* No destructor defined for MATCH */
- /* No destructor defined for nm */
- break;
- case 64:
-#line 210 "parse.y"
-{ yygotominor.yy407.value = yymsp[0].minor.yy372; yygotominor.yy407.mask = 0x0000ff; }
-#line 2234 "parse.c"
- /* No destructor defined for ON */
- /* No destructor defined for DELETE */
- break;
- case 65:
-#line 211 "parse.y"
-{ yygotominor.yy407.value = yymsp[0].minor.yy372<<8; yygotominor.yy407.mask = 0x00ff00; }
-#line 2241 "parse.c"
- /* No destructor defined for ON */
- /* No destructor defined for UPDATE */
- break;
- case 66:
-#line 212 "parse.y"
-{ yygotominor.yy407.value = yymsp[0].minor.yy372<<16; yygotominor.yy407.mask = 0xff0000; }
-#line 2248 "parse.c"
- /* No destructor defined for ON */
- /* No destructor defined for INSERT */
- break;
- case 67:
-#line 214 "parse.y"
-{ yygotominor.yy372 = OE_SetNull; }
-#line 2255 "parse.c"
- /* No destructor defined for SET */
- /* No destructor defined for NULL */
- break;
- case 68:
-#line 215 "parse.y"
-{ yygotominor.yy372 = OE_SetDflt; }
-#line 2262 "parse.c"
- /* No destructor defined for SET */
- /* No destructor defined for DEFAULT */
- break;
- case 69:
-#line 216 "parse.y"
-{ yygotominor.yy372 = OE_Cascade; }
-#line 2269 "parse.c"
- /* No destructor defined for CASCADE */
- break;
- case 70:
-#line 217 "parse.y"
-{ yygotominor.yy372 = OE_Restrict; }
-#line 2275 "parse.c"
- /* No destructor defined for RESTRICT */
- break;
- case 71:
-#line 219 "parse.y"
-{yygotominor.yy372 = yymsp[0].minor.yy372;}
-#line 2281 "parse.c"
- /* No destructor defined for NOT */
- /* No destructor defined for DEFERRABLE */
- break;
- case 72:
-#line 220 "parse.y"
-{yygotominor.yy372 = yymsp[0].minor.yy372;}
-#line 2288 "parse.c"
- /* No destructor defined for DEFERRABLE */
- break;
- case 73:
-#line 222 "parse.y"
-{yygotominor.yy372 = 0;}
-#line 2294 "parse.c"
- break;
- case 74:
-#line 223 "parse.y"
-{yygotominor.yy372 = 1;}
-#line 2299 "parse.c"
- /* No destructor defined for INITIALLY */
- /* No destructor defined for DEFERRED */
- break;
- case 75:
-#line 224 "parse.y"
-{yygotominor.yy372 = 0;}
-#line 2306 "parse.c"
- /* No destructor defined for INITIALLY */
- /* No destructor defined for IMMEDIATE */
- break;
- case 76:
- break;
- case 77:
- /* No destructor defined for COMMA */
- /* No destructor defined for conslist */
- break;
- case 78:
- /* No destructor defined for conslist */
- /* No destructor defined for COMMA */
- /* No destructor defined for tcons */
- break;
- case 79:
- /* No destructor defined for conslist */
- /* No destructor defined for tcons */
- break;
- case 80:
- /* No destructor defined for tcons */
- break;
- case 81:
- /* No destructor defined for CONSTRAINT */
- /* No destructor defined for nm */
- break;
- case 82:
-#line 236 "parse.y"
-{sqliteAddPrimaryKey(pParse,yymsp[-2].minor.yy320,yymsp[0].minor.yy372);}
-#line 2335 "parse.c"
- /* No destructor defined for PRIMARY */
- /* No destructor defined for KEY */
- /* No destructor defined for LP */
- /* No destructor defined for RP */
- break;
- case 83:
-#line 238 "parse.y"
-{sqliteCreateIndex(pParse,0,0,yymsp[-2].minor.yy320,yymsp[0].minor.yy372,0,0);}
-#line 2344 "parse.c"
- /* No destructor defined for UNIQUE */
- /* No destructor defined for LP */
- /* No destructor defined for RP */
- break;
- case 84:
- /* No destructor defined for CHECK */
- yy_destructor(158,&yymsp[-1].minor);
- /* No destructor defined for onconf */
- break;
- case 85:
-#line 241 "parse.y"
-{
- sqliteCreateForeignKey(pParse, yymsp[-6].minor.yy320, &yymsp[-3].minor.yy298, yymsp[-2].minor.yy320, yymsp[-1].minor.yy372);
- sqliteDeferForeignKey(pParse, yymsp[0].minor.yy372);
-}
-#line 2360 "parse.c"
- /* No destructor defined for FOREIGN */
- /* No destructor defined for KEY */
- /* No destructor defined for LP */
- /* No destructor defined for RP */
- /* No destructor defined for REFERENCES */
- break;
- case 86:
-#line 246 "parse.y"
-{yygotominor.yy372 = 0;}
-#line 2370 "parse.c"
- break;
- case 87:
-#line 247 "parse.y"
-{yygotominor.yy372 = yymsp[0].minor.yy372;}
-#line 2375 "parse.c"
- break;
- case 88:
-#line 255 "parse.y"
-{ yygotominor.yy372 = OE_Default; }
-#line 2380 "parse.c"
- break;
- case 89:
-#line 256 "parse.y"
-{ yygotominor.yy372 = yymsp[0].minor.yy372; }
-#line 2385 "parse.c"
- /* No destructor defined for ON */
- /* No destructor defined for CONFLICT */
- break;
- case 90:
-#line 257 "parse.y"
-{ yygotominor.yy372 = OE_Default; }
-#line 2392 "parse.c"
- break;
- case 91:
-#line 258 "parse.y"
-{ yygotominor.yy372 = yymsp[0].minor.yy372; }
-#line 2397 "parse.c"
- /* No destructor defined for OR */
- break;
- case 92:
-#line 259 "parse.y"
-{ yygotominor.yy372 = OE_Rollback; }
-#line 2403 "parse.c"
- /* No destructor defined for ROLLBACK */
- break;
- case 93:
-#line 260 "parse.y"
-{ yygotominor.yy372 = OE_Abort; }
-#line 2409 "parse.c"
- /* No destructor defined for ABORT */
- break;
- case 94:
-#line 261 "parse.y"
-{ yygotominor.yy372 = OE_Fail; }
-#line 2415 "parse.c"
- /* No destructor defined for FAIL */
- break;
- case 95:
-#line 262 "parse.y"
-{ yygotominor.yy372 = OE_Ignore; }
-#line 2421 "parse.c"
- /* No destructor defined for IGNORE */
- break;
- case 96:
-#line 263 "parse.y"
-{ yygotominor.yy372 = OE_Replace; }
-#line 2427 "parse.c"
- /* No destructor defined for REPLACE */
- break;
- case 97:
-#line 267 "parse.y"
-{sqliteDropTable(pParse,&yymsp[0].minor.yy298,0);}
-#line 2433 "parse.c"
- /* No destructor defined for DROP */
- /* No destructor defined for TABLE */
- break;
- case 98:
-#line 271 "parse.y"
-{
- sqliteCreateView(pParse, &yymsp[-5].minor.yy0, &yymsp[-2].minor.yy298, yymsp[0].minor.yy179, yymsp[-4].minor.yy372);
-}
-#line 2442 "parse.c"
- /* No destructor defined for VIEW */
- /* No destructor defined for AS */
- break;
- case 99:
-#line 274 "parse.y"
-{
- sqliteDropTable(pParse, &yymsp[0].minor.yy298, 1);
-}
-#line 2451 "parse.c"
- /* No destructor defined for DROP */
- /* No destructor defined for VIEW */
- break;
- case 100:
-#line 280 "parse.y"
-{
- sqliteSelect(pParse, yymsp[0].minor.yy179, SRT_Callback, 0, 0, 0, 0);
- sqliteSelectDelete(yymsp[0].minor.yy179);
-}
-#line 2461 "parse.c"
- break;
- case 101:
-#line 290 "parse.y"
-{yygotominor.yy179 = yymsp[0].minor.yy179;}
-#line 2466 "parse.c"
- break;
- case 102:
-#line 291 "parse.y"
-{
- if( yymsp[0].minor.yy179 ){
- yymsp[0].minor.yy179->op = yymsp[-1].minor.yy372;
- yymsp[0].minor.yy179->pPrior = yymsp[-2].minor.yy179;
- }
- yygotominor.yy179 = yymsp[0].minor.yy179;
-}
-#line 2477 "parse.c"
- break;
- case 103:
-#line 299 "parse.y"
-{yygotominor.yy372 = TK_UNION;}
-#line 2482 "parse.c"
- /* No destructor defined for UNION */
- break;
- case 104:
-#line 300 "parse.y"
-{yygotominor.yy372 = TK_ALL;}
-#line 2488 "parse.c"
- /* No destructor defined for UNION */
- /* No destructor defined for ALL */
- break;
- case 105:
-#line 301 "parse.y"
-{yygotominor.yy372 = TK_INTERSECT;}
-#line 2495 "parse.c"
- /* No destructor defined for INTERSECT */
- break;
- case 106:
-#line 302 "parse.y"
-{yygotominor.yy372 = TK_EXCEPT;}
-#line 2501 "parse.c"
- /* No destructor defined for EXCEPT */
- break;
- case 107:
-#line 304 "parse.y"
-{
- yygotominor.yy179 = sqliteSelectNew(yymsp[-6].minor.yy322,yymsp[-5].minor.yy307,yymsp[-4].minor.yy242,yymsp[-3].minor.yy322,yymsp[-2].minor.yy242,yymsp[-1].minor.yy322,yymsp[-7].minor.yy372,yymsp[0].minor.yy124.limit,yymsp[0].minor.yy124.offset);
-}
-#line 2509 "parse.c"
- /* No destructor defined for SELECT */
- break;
- case 108:
-#line 312 "parse.y"
-{yygotominor.yy372 = 1;}
-#line 2515 "parse.c"
- /* No destructor defined for DISTINCT */
- break;
- case 109:
-#line 313 "parse.y"
-{yygotominor.yy372 = 0;}
-#line 2521 "parse.c"
- /* No destructor defined for ALL */
- break;
- case 110:
-#line 314 "parse.y"
-{yygotominor.yy372 = 0;}
-#line 2527 "parse.c"
- break;
- case 111:
-#line 325 "parse.y"
-{yygotominor.yy322 = yymsp[-1].minor.yy322;}
-#line 2532 "parse.c"
- /* No destructor defined for COMMA */
- break;
- case 112:
-#line 326 "parse.y"
-{yygotominor.yy322 = 0;}
-#line 2538 "parse.c"
- break;
- case 113:
-#line 327 "parse.y"
-{
- yygotominor.yy322 = sqliteExprListAppend(yymsp[-2].minor.yy322,yymsp[-1].minor.yy242,yymsp[0].minor.yy298.n?&yymsp[0].minor.yy298:0);
-}
-#line 2545 "parse.c"
- break;
- case 114:
-#line 330 "parse.y"
-{
- yygotominor.yy322 = sqliteExprListAppend(yymsp[-1].minor.yy322, sqliteExpr(TK_ALL, 0, 0, 0), 0);
-}
-#line 2552 "parse.c"
- /* No destructor defined for STAR */
- break;
- case 115:
-#line 333 "parse.y"
-{
- Expr *pRight = sqliteExpr(TK_ALL, 0, 0, 0);
- Expr *pLeft = sqliteExpr(TK_ID, 0, 0, &yymsp[-2].minor.yy298);
- yygotominor.yy322 = sqliteExprListAppend(yymsp[-3].minor.yy322, sqliteExpr(TK_DOT, pLeft, pRight, 0), 0);
-}
-#line 2562 "parse.c"
- /* No destructor defined for DOT */
- /* No destructor defined for STAR */
- break;
- case 116:
-#line 343 "parse.y"
-{ yygotominor.yy298 = yymsp[0].minor.yy298; }
-#line 2569 "parse.c"
- /* No destructor defined for AS */
- break;
- case 117:
-#line 344 "parse.y"
-{ yygotominor.yy298 = yymsp[0].minor.yy298; }
-#line 2575 "parse.c"
- break;
- case 118:
-#line 345 "parse.y"
-{ yygotominor.yy298.n = 0; }
-#line 2580 "parse.c"
- break;
- case 119:
-#line 357 "parse.y"
-{yygotominor.yy307 = sqliteMalloc(sizeof(*yygotominor.yy307));}
-#line 2585 "parse.c"
- break;
- case 120:
-#line 358 "parse.y"
-{yygotominor.yy307 = yymsp[0].minor.yy307;}
-#line 2590 "parse.c"
- /* No destructor defined for FROM */
- break;
- case 121:
-#line 363 "parse.y"
-{
- yygotominor.yy307 = yymsp[-1].minor.yy307;
- if( yygotominor.yy307 && yygotominor.yy307->nSrc>0 ) yygotominor.yy307->a[yygotominor.yy307->nSrc-1].jointype = yymsp[0].minor.yy372;
-}
-#line 2599 "parse.c"
- break;
- case 122:
-#line 367 "parse.y"
-{yygotominor.yy307 = 0;}
-#line 2604 "parse.c"
- break;
- case 123:
-#line 368 "parse.y"
-{
- yygotominor.yy307 = sqliteSrcListAppend(yymsp[-5].minor.yy307,&yymsp[-4].minor.yy298,&yymsp[-3].minor.yy298);
- if( yymsp[-2].minor.yy298.n ) sqliteSrcListAddAlias(yygotominor.yy307,&yymsp[-2].minor.yy298);
- if( yymsp[-1].minor.yy242 ){
- if( yygotominor.yy307 && yygotominor.yy307->nSrc>1 ){ yygotominor.yy307->a[yygotominor.yy307->nSrc-2].pOn = yymsp[-1].minor.yy242; }
- else { sqliteExprDelete(yymsp[-1].minor.yy242); }
- }
- if( yymsp[0].minor.yy320 ){
- if( yygotominor.yy307 && yygotominor.yy307->nSrc>1 ){ yygotominor.yy307->a[yygotominor.yy307->nSrc-2].pUsing = yymsp[0].minor.yy320; }
- else { sqliteIdListDelete(yymsp[0].minor.yy320); }
- }
-}
-#line 2620 "parse.c"
- break;
- case 124:
-#line 381 "parse.y"
-{
- yygotominor.yy307 = sqliteSrcListAppend(yymsp[-6].minor.yy307,0,0);
- yygotominor.yy307->a[yygotominor.yy307->nSrc-1].pSelect = yymsp[-4].minor.yy179;
- if( yymsp[-2].minor.yy298.n ) sqliteSrcListAddAlias(yygotominor.yy307,&yymsp[-2].minor.yy298);
- if( yymsp[-1].minor.yy242 ){
- if( yygotominor.yy307 && yygotominor.yy307->nSrc>1 ){ yygotominor.yy307->a[yygotominor.yy307->nSrc-2].pOn = yymsp[-1].minor.yy242; }
- else { sqliteExprDelete(yymsp[-1].minor.yy242); }
- }
- if( yymsp[0].minor.yy320 ){
- if( yygotominor.yy307 && yygotominor.yy307->nSrc>1 ){ yygotominor.yy307->a[yygotominor.yy307->nSrc-2].pUsing = yymsp[0].minor.yy320; }
- else { sqliteIdListDelete(yymsp[0].minor.yy320); }
- }
-}
-#line 2637 "parse.c"
- /* No destructor defined for LP */
- /* No destructor defined for RP */
- break;
- case 125:
-#line 401 "parse.y"
-{yygotominor.yy179 = yymsp[0].minor.yy179;}
-#line 2644 "parse.c"
- break;
- case 126:
-#line 402 "parse.y"
-{
- yygotominor.yy179 = sqliteSelectNew(0,yymsp[0].minor.yy307,0,0,0,0,0,-1,0);
-}
-#line 2651 "parse.c"
- break;
- case 127:
-#line 407 "parse.y"
-{yygotominor.yy298.z=0; yygotominor.yy298.n=0;}
-#line 2656 "parse.c"
- break;
- case 128:
-#line 408 "parse.y"
-{yygotominor.yy298 = yymsp[0].minor.yy298;}
-#line 2661 "parse.c"
- /* No destructor defined for DOT */
- break;
- case 129:
-#line 412 "parse.y"
-{ yygotominor.yy372 = JT_INNER; }
-#line 2667 "parse.c"
- /* No destructor defined for COMMA */
- break;
- case 130:
-#line 413 "parse.y"
-{ yygotominor.yy372 = JT_INNER; }
-#line 2673 "parse.c"
- /* No destructor defined for JOIN */
- break;
- case 131:
-#line 414 "parse.y"
-{ yygotominor.yy372 = sqliteJoinType(pParse,&yymsp[-1].minor.yy0,0,0); }
-#line 2679 "parse.c"
- /* No destructor defined for JOIN */
- break;
- case 132:
-#line 415 "parse.y"
-{ yygotominor.yy372 = sqliteJoinType(pParse,&yymsp[-2].minor.yy0,&yymsp[-1].minor.yy298,0); }
-#line 2685 "parse.c"
- /* No destructor defined for JOIN */
- break;
- case 133:
-#line 417 "parse.y"
-{ yygotominor.yy372 = sqliteJoinType(pParse,&yymsp[-3].minor.yy0,&yymsp[-2].minor.yy298,&yymsp[-1].minor.yy298); }
-#line 2691 "parse.c"
- /* No destructor defined for JOIN */
- break;
- case 134:
-#line 421 "parse.y"
-{yygotominor.yy242 = yymsp[0].minor.yy242;}
-#line 2697 "parse.c"
- /* No destructor defined for ON */
- break;
- case 135:
-#line 422 "parse.y"
-{yygotominor.yy242 = 0;}
-#line 2703 "parse.c"
- break;
- case 136:
-#line 426 "parse.y"
-{yygotominor.yy320 = yymsp[-1].minor.yy320;}
-#line 2708 "parse.c"
- /* No destructor defined for USING */
- /* No destructor defined for LP */
- /* No destructor defined for RP */
- break;
- case 137:
-#line 427 "parse.y"
-{yygotominor.yy320 = 0;}
-#line 2716 "parse.c"
- break;
- case 138:
-#line 437 "parse.y"
-{yygotominor.yy322 = 0;}
-#line 2721 "parse.c"
- break;
- case 139:
-#line 438 "parse.y"
-{yygotominor.yy322 = yymsp[0].minor.yy322;}
-#line 2726 "parse.c"
- /* No destructor defined for ORDER */
- /* No destructor defined for BY */
- break;
- case 140:
-#line 439 "parse.y"
-{
- yygotominor.yy322 = sqliteExprListAppend(yymsp[-4].minor.yy322,yymsp[-2].minor.yy242,0);
- if( yygotominor.yy322 ) yygotominor.yy322->a[yygotominor.yy322->nExpr-1].sortOrder = yymsp[-1].minor.yy372+yymsp[0].minor.yy372;
-}
-#line 2736 "parse.c"
- /* No destructor defined for COMMA */
- break;
- case 141:
-#line 443 "parse.y"
-{
- yygotominor.yy322 = sqliteExprListAppend(0,yymsp[-2].minor.yy242,0);
- if( yygotominor.yy322 ) yygotominor.yy322->a[0].sortOrder = yymsp[-1].minor.yy372+yymsp[0].minor.yy372;
-}
-#line 2745 "parse.c"
- break;
- case 142:
-#line 447 "parse.y"
-{yygotominor.yy242 = yymsp[0].minor.yy242;}
-#line 2750 "parse.c"
- break;
- case 143:
-#line 452 "parse.y"
-{yygotominor.yy372 = SQLITE_SO_ASC;}
-#line 2755 "parse.c"
- /* No destructor defined for ASC */
- break;
- case 144:
-#line 453 "parse.y"
-{yygotominor.yy372 = SQLITE_SO_DESC;}
-#line 2761 "parse.c"
- /* No destructor defined for DESC */
- break;
- case 145:
-#line 454 "parse.y"
-{yygotominor.yy372 = SQLITE_SO_ASC;}
-#line 2767 "parse.c"
- break;
- case 146:
-#line 455 "parse.y"
-{yygotominor.yy372 = SQLITE_SO_UNK;}
-#line 2772 "parse.c"
- break;
- case 147:
-#line 456 "parse.y"
-{yygotominor.yy372 = sqliteCollateType(yymsp[0].minor.yy298.z, yymsp[0].minor.yy298.n);}
-#line 2777 "parse.c"
- /* No destructor defined for COLLATE */
- break;
- case 148:
-#line 460 "parse.y"
-{yygotominor.yy322 = 0;}
-#line 2783 "parse.c"
- break;
- case 149:
-#line 461 "parse.y"
-{yygotominor.yy322 = yymsp[0].minor.yy322;}
-#line 2788 "parse.c"
- /* No destructor defined for GROUP */
- /* No destructor defined for BY */
- break;
- case 150:
-#line 465 "parse.y"
-{yygotominor.yy242 = 0;}
-#line 2795 "parse.c"
- break;
- case 151:
-#line 466 "parse.y"
-{yygotominor.yy242 = yymsp[0].minor.yy242;}
-#line 2800 "parse.c"
- /* No destructor defined for HAVING */
- break;
- case 152:
-#line 469 "parse.y"
-{yygotominor.yy124.limit = -1; yygotominor.yy124.offset = 0;}
-#line 2806 "parse.c"
- break;
- case 153:
-#line 470 "parse.y"
-{yygotominor.yy124.limit = yymsp[0].minor.yy372; yygotominor.yy124.offset = 0;}
-#line 2811 "parse.c"
- /* No destructor defined for LIMIT */
- break;
- case 154:
-#line 472 "parse.y"
-{yygotominor.yy124.limit = yymsp[-2].minor.yy372; yygotominor.yy124.offset = yymsp[0].minor.yy372;}
-#line 2817 "parse.c"
- /* No destructor defined for LIMIT */
- /* No destructor defined for OFFSET */
- break;
- case 155:
-#line 474 "parse.y"
-{yygotominor.yy124.limit = yymsp[0].minor.yy372; yygotominor.yy124.offset = yymsp[-2].minor.yy372;}
-#line 2824 "parse.c"
- /* No destructor defined for LIMIT */
- /* No destructor defined for COMMA */
- break;
- case 156:
-#line 478 "parse.y"
-{
- sqliteDeleteFrom(pParse, sqliteSrcListAppend(0,&yymsp[-2].minor.yy298,&yymsp[-1].minor.yy298), yymsp[0].minor.yy242);
-}
-#line 2833 "parse.c"
- /* No destructor defined for DELETE */
- /* No destructor defined for FROM */
- break;
- case 157:
-#line 485 "parse.y"
-{yygotominor.yy242 = 0;}
-#line 2840 "parse.c"
- break;
- case 158:
-#line 486 "parse.y"
-{yygotominor.yy242 = yymsp[0].minor.yy242;}
-#line 2845 "parse.c"
- /* No destructor defined for WHERE */
- break;
- case 159:
-#line 494 "parse.y"
-{sqliteUpdate(pParse,sqliteSrcListAppend(0,&yymsp[-4].minor.yy298,&yymsp[-3].minor.yy298),yymsp[-1].minor.yy322,yymsp[0].minor.yy242,yymsp[-5].minor.yy372);}
-#line 2851 "parse.c"
- /* No destructor defined for UPDATE */
- /* No destructor defined for SET */
- break;
- case 160:
-#line 497 "parse.y"
-{yygotominor.yy322 = sqliteExprListAppend(yymsp[-4].minor.yy322,yymsp[0].minor.yy242,&yymsp[-2].minor.yy298);}
-#line 2858 "parse.c"
- /* No destructor defined for COMMA */
- /* No destructor defined for EQ */
- break;
- case 161:
-#line 498 "parse.y"
-{yygotominor.yy322 = sqliteExprListAppend(0,yymsp[0].minor.yy242,&yymsp[-2].minor.yy298);}
-#line 2865 "parse.c"
- /* No destructor defined for EQ */
- break;
- case 162:
-#line 504 "parse.y"
-{sqliteInsert(pParse, sqliteSrcListAppend(0,&yymsp[-6].minor.yy298,&yymsp[-5].minor.yy298), yymsp[-1].minor.yy322, 0, yymsp[-4].minor.yy320, yymsp[-8].minor.yy372);}
-#line 2871 "parse.c"
- /* No destructor defined for INTO */
- /* No destructor defined for VALUES */
- /* No destructor defined for LP */
- /* No destructor defined for RP */
- break;
- case 163:
-#line 506 "parse.y"
-{sqliteInsert(pParse, sqliteSrcListAppend(0,&yymsp[-3].minor.yy298,&yymsp[-2].minor.yy298), 0, yymsp[0].minor.yy179, yymsp[-1].minor.yy320, yymsp[-5].minor.yy372);}
-#line 2880 "parse.c"
- /* No destructor defined for INTO */
- break;
- case 164:
-#line 509 "parse.y"
-{yygotominor.yy372 = yymsp[0].minor.yy372;}
-#line 2886 "parse.c"
- /* No destructor defined for INSERT */
- break;
- case 165:
-#line 510 "parse.y"
-{yygotominor.yy372 = OE_Replace;}
-#line 2892 "parse.c"
- /* No destructor defined for REPLACE */
- break;
- case 166:
-#line 516 "parse.y"
-{yygotominor.yy322 = sqliteExprListAppend(yymsp[-2].minor.yy322,yymsp[0].minor.yy242,0);}
-#line 2898 "parse.c"
- /* No destructor defined for COMMA */
- break;
- case 167:
-#line 517 "parse.y"
-{yygotominor.yy322 = sqliteExprListAppend(0,yymsp[0].minor.yy242,0);}
-#line 2904 "parse.c"
- break;
- case 168:
-#line 524 "parse.y"
-{yygotominor.yy320 = 0;}
-#line 2909 "parse.c"
- break;
- case 169:
-#line 525 "parse.y"
-{yygotominor.yy320 = yymsp[-1].minor.yy320;}
-#line 2914 "parse.c"
- /* No destructor defined for LP */
- /* No destructor defined for RP */
- break;
- case 170:
-#line 526 "parse.y"
-{yygotominor.yy320 = sqliteIdListAppend(yymsp[-2].minor.yy320,&yymsp[0].minor.yy298);}
-#line 2921 "parse.c"
- /* No destructor defined for COMMA */
- break;
- case 171:
-#line 527 "parse.y"
-{yygotominor.yy320 = sqliteIdListAppend(0,&yymsp[0].minor.yy298);}
-#line 2927 "parse.c"
- break;
- case 172:
-#line 535 "parse.y"
-{yygotominor.yy242 = yymsp[-1].minor.yy242; sqliteExprSpan(yygotominor.yy242,&yymsp[-2].minor.yy0,&yymsp[0].minor.yy0); }
-#line 2932 "parse.c"
- break;
- case 173:
-#line 536 "parse.y"
-{yygotominor.yy242 = sqliteExpr(TK_NULL, 0, 0, &yymsp[0].minor.yy0);}
-#line 2937 "parse.c"
- break;
- case 174:
-#line 537 "parse.y"
-{yygotominor.yy242 = sqliteExpr(TK_ID, 0, 0, &yymsp[0].minor.yy0);}
-#line 2942 "parse.c"
- break;
- case 175:
-#line 538 "parse.y"
-{yygotominor.yy242 = sqliteExpr(TK_ID, 0, 0, &yymsp[0].minor.yy0);}
-#line 2947 "parse.c"
- break;
- case 176:
-#line 539 "parse.y"
-{
- Expr *temp1 = sqliteExpr(TK_ID, 0, 0, &yymsp[-2].minor.yy298);
- Expr *temp2 = sqliteExpr(TK_ID, 0, 0, &yymsp[0].minor.yy298);
- yygotominor.yy242 = sqliteExpr(TK_DOT, temp1, temp2, 0);
-}
-#line 2956 "parse.c"
- /* No destructor defined for DOT */
- break;
- case 177:
-#line 544 "parse.y"
-{
- Expr *temp1 = sqliteExpr(TK_ID, 0, 0, &yymsp[-4].minor.yy298);
- Expr *temp2 = sqliteExpr(TK_ID, 0, 0, &yymsp[-2].minor.yy298);
- Expr *temp3 = sqliteExpr(TK_ID, 0, 0, &yymsp[0].minor.yy298);
- Expr *temp4 = sqliteExpr(TK_DOT, temp2, temp3, 0);
- yygotominor.yy242 = sqliteExpr(TK_DOT, temp1, temp4, 0);
-}
-#line 2968 "parse.c"
- /* No destructor defined for DOT */
- /* No destructor defined for DOT */
- break;
- case 178:
-#line 551 "parse.y"
-{yygotominor.yy242 = sqliteExpr(TK_INTEGER, 0, 0, &yymsp[0].minor.yy0);}
-#line 2975 "parse.c"
- break;
- case 179:
-#line 552 "parse.y"
-{yygotominor.yy242 = sqliteExpr(TK_FLOAT, 0, 0, &yymsp[0].minor.yy0);}
-#line 2980 "parse.c"
- break;
- case 180:
-#line 553 "parse.y"
-{yygotominor.yy242 = sqliteExpr(TK_STRING, 0, 0, &yymsp[0].minor.yy0);}
-#line 2985 "parse.c"
- break;
- case 181:
-#line 554 "parse.y"
-{
- yygotominor.yy242 = sqliteExpr(TK_VARIABLE, 0, 0, &yymsp[0].minor.yy0);
- if( yygotominor.yy242 ) yygotominor.yy242->iTable = ++pParse->nVar;
-}
-#line 2993 "parse.c"
- break;
- case 182:
-#line 558 "parse.y"
-{
- yygotominor.yy242 = sqliteExprFunction(yymsp[-1].minor.yy322, &yymsp[-3].minor.yy0);
- sqliteExprSpan(yygotominor.yy242,&yymsp[-3].minor.yy0,&yymsp[0].minor.yy0);
-}
-#line 3001 "parse.c"
- /* No destructor defined for LP */
- break;
- case 183:
-#line 562 "parse.y"
-{
- yygotominor.yy242 = sqliteExprFunction(0, &yymsp[-3].minor.yy0);
- sqliteExprSpan(yygotominor.yy242,&yymsp[-3].minor.yy0,&yymsp[0].minor.yy0);
-}
-#line 3010 "parse.c"
- /* No destructor defined for LP */
- /* No destructor defined for STAR */
- break;
- case 184:
-#line 566 "parse.y"
-{yygotominor.yy242 = sqliteExpr(TK_AND, yymsp[-2].minor.yy242, yymsp[0].minor.yy242, 0);}
-#line 3017 "parse.c"
- /* No destructor defined for AND */
- break;
- case 185:
-#line 567 "parse.y"
-{yygotominor.yy242 = sqliteExpr(TK_OR, yymsp[-2].minor.yy242, yymsp[0].minor.yy242, 0);}
-#line 3023 "parse.c"
- /* No destructor defined for OR */
- break;
- case 186:
-#line 568 "parse.y"
-{yygotominor.yy242 = sqliteExpr(TK_LT, yymsp[-2].minor.yy242, yymsp[0].minor.yy242, 0);}
-#line 3029 "parse.c"
- /* No destructor defined for LT */
- break;
- case 187:
-#line 569 "parse.y"
-{yygotominor.yy242 = sqliteExpr(TK_GT, yymsp[-2].minor.yy242, yymsp[0].minor.yy242, 0);}
-#line 3035 "parse.c"
- /* No destructor defined for GT */
- break;
- case 188:
-#line 570 "parse.y"
-{yygotominor.yy242 = sqliteExpr(TK_LE, yymsp[-2].minor.yy242, yymsp[0].minor.yy242, 0);}
-#line 3041 "parse.c"
- /* No destructor defined for LE */
- break;
- case 189:
-#line 571 "parse.y"
-{yygotominor.yy242 = sqliteExpr(TK_GE, yymsp[-2].minor.yy242, yymsp[0].minor.yy242, 0);}
-#line 3047 "parse.c"
- /* No destructor defined for GE */
- break;
- case 190:
-#line 572 "parse.y"
-{yygotominor.yy242 = sqliteExpr(TK_NE, yymsp[-2].minor.yy242, yymsp[0].minor.yy242, 0);}
-#line 3053 "parse.c"
- /* No destructor defined for NE */
- break;
- case 191:
-#line 573 "parse.y"
-{yygotominor.yy242 = sqliteExpr(TK_EQ, yymsp[-2].minor.yy242, yymsp[0].minor.yy242, 0);}
-#line 3059 "parse.c"
- /* No destructor defined for EQ */
- break;
- case 192:
-#line 574 "parse.y"
-{yygotominor.yy242 = sqliteExpr(TK_BITAND, yymsp[-2].minor.yy242, yymsp[0].minor.yy242, 0);}
-#line 3065 "parse.c"
- /* No destructor defined for BITAND */
- break;
- case 193:
-#line 575 "parse.y"
-{yygotominor.yy242 = sqliteExpr(TK_BITOR, yymsp[-2].minor.yy242, yymsp[0].minor.yy242, 0);}
-#line 3071 "parse.c"
- /* No destructor defined for BITOR */
- break;
- case 194:
-#line 576 "parse.y"
-{yygotominor.yy242 = sqliteExpr(TK_LSHIFT, yymsp[-2].minor.yy242, yymsp[0].minor.yy242, 0);}
-#line 3077 "parse.c"
- /* No destructor defined for LSHIFT */
- break;
- case 195:
-#line 577 "parse.y"
-{yygotominor.yy242 = sqliteExpr(TK_RSHIFT, yymsp[-2].minor.yy242, yymsp[0].minor.yy242, 0);}
-#line 3083 "parse.c"
- /* No destructor defined for RSHIFT */
- break;
- case 196:
-#line 578 "parse.y"
-{
- ExprList *pList = sqliteExprListAppend(0, yymsp[0].minor.yy242, 0);
- pList = sqliteExprListAppend(pList, yymsp[-2].minor.yy242, 0);
- yygotominor.yy242 = sqliteExprFunction(pList, 0);
- if( yygotominor.yy242 ) yygotominor.yy242->op = yymsp[-1].minor.yy372;
- sqliteExprSpan(yygotominor.yy242, &yymsp[-2].minor.yy242->span, &yymsp[0].minor.yy242->span);
-}
-#line 3095 "parse.c"
- break;
- case 197:
-#line 585 "parse.y"
-{
- ExprList *pList = sqliteExprListAppend(0, yymsp[0].minor.yy242, 0);
- pList = sqliteExprListAppend(pList, yymsp[-3].minor.yy242, 0);
- yygotominor.yy242 = sqliteExprFunction(pList, 0);
- if( yygotominor.yy242 ) yygotominor.yy242->op = yymsp[-1].minor.yy372;
- yygotominor.yy242 = sqliteExpr(TK_NOT, yygotominor.yy242, 0, 0);
- sqliteExprSpan(yygotominor.yy242,&yymsp[-3].minor.yy242->span,&yymsp[0].minor.yy242->span);
-}
-#line 3107 "parse.c"
- /* No destructor defined for NOT */
- break;
- case 198:
-#line 594 "parse.y"
-{yygotominor.yy372 = TK_LIKE;}
-#line 3113 "parse.c"
- /* No destructor defined for LIKE */
- break;
- case 199:
-#line 595 "parse.y"
-{yygotominor.yy372 = TK_GLOB;}
-#line 3119 "parse.c"
- /* No destructor defined for GLOB */
- break;
- case 200:
-#line 596 "parse.y"
-{yygotominor.yy242 = sqliteExpr(TK_PLUS, yymsp[-2].minor.yy242, yymsp[0].minor.yy242, 0);}
-#line 3125 "parse.c"
- /* No destructor defined for PLUS */
- break;
- case 201:
-#line 597 "parse.y"
-{yygotominor.yy242 = sqliteExpr(TK_MINUS, yymsp[-2].minor.yy242, yymsp[0].minor.yy242, 0);}
-#line 3131 "parse.c"
- /* No destructor defined for MINUS */
- break;
- case 202:
-#line 598 "parse.y"
-{yygotominor.yy242 = sqliteExpr(TK_STAR, yymsp[-2].minor.yy242, yymsp[0].minor.yy242, 0);}
-#line 3137 "parse.c"
- /* No destructor defined for STAR */
- break;
- case 203:
-#line 599 "parse.y"
-{yygotominor.yy242 = sqliteExpr(TK_SLASH, yymsp[-2].minor.yy242, yymsp[0].minor.yy242, 0);}
-#line 3143 "parse.c"
- /* No destructor defined for SLASH */
- break;
- case 204:
-#line 600 "parse.y"
-{yygotominor.yy242 = sqliteExpr(TK_REM, yymsp[-2].minor.yy242, yymsp[0].minor.yy242, 0);}
-#line 3149 "parse.c"
- /* No destructor defined for REM */
- break;
- case 205:
-#line 601 "parse.y"
-{yygotominor.yy242 = sqliteExpr(TK_CONCAT, yymsp[-2].minor.yy242, yymsp[0].minor.yy242, 0);}
-#line 3155 "parse.c"
- /* No destructor defined for CONCAT */
- break;
- case 206:
-#line 602 "parse.y"
-{
- yygotominor.yy242 = sqliteExpr(TK_ISNULL, yymsp[-1].minor.yy242, 0, 0);
- sqliteExprSpan(yygotominor.yy242,&yymsp[-1].minor.yy242->span,&yymsp[0].minor.yy0);
-}
-#line 3164 "parse.c"
- break;
- case 207:
-#line 606 "parse.y"
-{
- yygotominor.yy242 = sqliteExpr(TK_ISNULL, yymsp[-2].minor.yy242, 0, 0);
- sqliteExprSpan(yygotominor.yy242,&yymsp[-2].minor.yy242->span,&yymsp[0].minor.yy0);
-}
-#line 3172 "parse.c"
- /* No destructor defined for IS */
- break;
- case 208:
-#line 610 "parse.y"
-{
- yygotominor.yy242 = sqliteExpr(TK_NOTNULL, yymsp[-1].minor.yy242, 0, 0);
- sqliteExprSpan(yygotominor.yy242,&yymsp[-1].minor.yy242->span,&yymsp[0].minor.yy0);
-}
-#line 3181 "parse.c"
- break;
- case 209:
-#line 614 "parse.y"
-{
- yygotominor.yy242 = sqliteExpr(TK_NOTNULL, yymsp[-2].minor.yy242, 0, 0);
- sqliteExprSpan(yygotominor.yy242,&yymsp[-2].minor.yy242->span,&yymsp[0].minor.yy0);
-}
-#line 3189 "parse.c"
- /* No destructor defined for NOT */
- break;
- case 210:
-#line 618 "parse.y"
-{
- yygotominor.yy242 = sqliteExpr(TK_NOTNULL, yymsp[-3].minor.yy242, 0, 0);
- sqliteExprSpan(yygotominor.yy242,&yymsp[-3].minor.yy242->span,&yymsp[0].minor.yy0);
-}
-#line 3198 "parse.c"
- /* No destructor defined for IS */
- /* No destructor defined for NOT */
- break;
- case 211:
-#line 622 "parse.y"
-{
- yygotominor.yy242 = sqliteExpr(TK_NOT, yymsp[0].minor.yy242, 0, 0);
- sqliteExprSpan(yygotominor.yy242,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy242->span);
-}
-#line 3208 "parse.c"
- break;
- case 212:
-#line 626 "parse.y"
-{
- yygotominor.yy242 = sqliteExpr(TK_BITNOT, yymsp[0].minor.yy242, 0, 0);
- sqliteExprSpan(yygotominor.yy242,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy242->span);
-}
-#line 3216 "parse.c"
- break;
- case 213:
-#line 630 "parse.y"
-{
- yygotominor.yy242 = sqliteExpr(TK_UMINUS, yymsp[0].minor.yy242, 0, 0);
- sqliteExprSpan(yygotominor.yy242,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy242->span);
-}
-#line 3224 "parse.c"
- break;
- case 214:
-#line 634 "parse.y"
-{
- yygotominor.yy242 = sqliteExpr(TK_UPLUS, yymsp[0].minor.yy242, 0, 0);
- sqliteExprSpan(yygotominor.yy242,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy242->span);
-}
-#line 3232 "parse.c"
- break;
- case 215:
-#line 638 "parse.y"
-{
- yygotominor.yy242 = sqliteExpr(TK_SELECT, 0, 0, 0);
- if( yygotominor.yy242 ) yygotominor.yy242->pSelect = yymsp[-1].minor.yy179;
- sqliteExprSpan(yygotominor.yy242,&yymsp[-2].minor.yy0,&yymsp[0].minor.yy0);
-}
-#line 3241 "parse.c"
- break;
- case 216:
-#line 643 "parse.y"
-{
- ExprList *pList = sqliteExprListAppend(0, yymsp[-2].minor.yy242, 0);
- pList = sqliteExprListAppend(pList, yymsp[0].minor.yy242, 0);
- yygotominor.yy242 = sqliteExpr(TK_BETWEEN, yymsp[-4].minor.yy242, 0, 0);
- if( yygotominor.yy242 ) yygotominor.yy242->pList = pList;
- sqliteExprSpan(yygotominor.yy242,&yymsp[-4].minor.yy242->span,&yymsp[0].minor.yy242->span);
-}
-#line 3252 "parse.c"
- /* No destructor defined for BETWEEN */
- /* No destructor defined for AND */
- break;
- case 217:
-#line 650 "parse.y"
-{
- ExprList *pList = sqliteExprListAppend(0, yymsp[-2].minor.yy242, 0);
- pList = sqliteExprListAppend(pList, yymsp[0].minor.yy242, 0);
- yygotominor.yy242 = sqliteExpr(TK_BETWEEN, yymsp[-5].minor.yy242, 0, 0);
- if( yygotominor.yy242 ) yygotominor.yy242->pList = pList;
- yygotominor.yy242 = sqliteExpr(TK_NOT, yygotominor.yy242, 0, 0);
- sqliteExprSpan(yygotominor.yy242,&yymsp[-5].minor.yy242->span,&yymsp[0].minor.yy242->span);
-}
-#line 3266 "parse.c"
- /* No destructor defined for NOT */
- /* No destructor defined for BETWEEN */
- /* No destructor defined for AND */
- break;
- case 218:
-#line 658 "parse.y"
-{
- yygotominor.yy242 = sqliteExpr(TK_IN, yymsp[-4].minor.yy242, 0, 0);
- if( yygotominor.yy242 ) yygotominor.yy242->pList = yymsp[-1].minor.yy322;
- sqliteExprSpan(yygotominor.yy242,&yymsp[-4].minor.yy242->span,&yymsp[0].minor.yy0);
-}
-#line 3278 "parse.c"
- /* No destructor defined for IN */
- /* No destructor defined for LP */
- break;
- case 219:
-#line 663 "parse.y"
-{
- yygotominor.yy242 = sqliteExpr(TK_IN, yymsp[-4].minor.yy242, 0, 0);
- if( yygotominor.yy242 ) yygotominor.yy242->pSelect = yymsp[-1].minor.yy179;
- sqliteExprSpan(yygotominor.yy242,&yymsp[-4].minor.yy242->span,&yymsp[0].minor.yy0);
-}
-#line 3289 "parse.c"
- /* No destructor defined for IN */
- /* No destructor defined for LP */
- break;
- case 220:
-#line 668 "parse.y"
-{
- yygotominor.yy242 = sqliteExpr(TK_IN, yymsp[-5].minor.yy242, 0, 0);
- if( yygotominor.yy242 ) yygotominor.yy242->pList = yymsp[-1].minor.yy322;
- yygotominor.yy242 = sqliteExpr(TK_NOT, yygotominor.yy242, 0, 0);
- sqliteExprSpan(yygotominor.yy242,&yymsp[-5].minor.yy242->span,&yymsp[0].minor.yy0);
-}
-#line 3301 "parse.c"
- /* No destructor defined for NOT */
- /* No destructor defined for IN */
- /* No destructor defined for LP */
- break;
- case 221:
-#line 674 "parse.y"
-{
- yygotominor.yy242 = sqliteExpr(TK_IN, yymsp[-5].minor.yy242, 0, 0);
- if( yygotominor.yy242 ) yygotominor.yy242->pSelect = yymsp[-1].minor.yy179;
- yygotominor.yy242 = sqliteExpr(TK_NOT, yygotominor.yy242, 0, 0);
- sqliteExprSpan(yygotominor.yy242,&yymsp[-5].minor.yy242->span,&yymsp[0].minor.yy0);
-}
-#line 3314 "parse.c"
- /* No destructor defined for NOT */
- /* No destructor defined for IN */
- /* No destructor defined for LP */
- break;
- case 222:
-#line 680 "parse.y"
-{
- SrcList *pSrc = sqliteSrcListAppend(0, &yymsp[-1].minor.yy298, &yymsp[0].minor.yy298);
- yygotominor.yy242 = sqliteExpr(TK_IN, yymsp[-3].minor.yy242, 0, 0);
- if( yygotominor.yy242 ) yygotominor.yy242->pSelect = sqliteSelectNew(0,pSrc,0,0,0,0,0,-1,0);
- sqliteExprSpan(yygotominor.yy242,&yymsp[-3].minor.yy242->span,yymsp[0].minor.yy298.z?&yymsp[0].minor.yy298:&yymsp[-1].minor.yy298);
-}
-#line 3327 "parse.c"
- /* No destructor defined for IN */
- break;
- case 223:
-#line 686 "parse.y"
-{
- SrcList *pSrc = sqliteSrcListAppend(0, &yymsp[-1].minor.yy298, &yymsp[0].minor.yy298);
- yygotominor.yy242 = sqliteExpr(TK_IN, yymsp[-4].minor.yy242, 0, 0);
- if( yygotominor.yy242 ) yygotominor.yy242->pSelect = sqliteSelectNew(0,pSrc,0,0,0,0,0,-1,0);
- yygotominor.yy242 = sqliteExpr(TK_NOT, yygotominor.yy242, 0, 0);
- sqliteExprSpan(yygotominor.yy242,&yymsp[-4].minor.yy242->span,yymsp[0].minor.yy298.z?&yymsp[0].minor.yy298:&yymsp[-1].minor.yy298);
-}
-#line 3339 "parse.c"
- /* No destructor defined for NOT */
- /* No destructor defined for IN */
- break;
- case 224:
-#line 696 "parse.y"
-{
- yygotominor.yy242 = sqliteExpr(TK_CASE, yymsp[-3].minor.yy242, yymsp[-1].minor.yy242, 0);
- if( yygotominor.yy242 ) yygotominor.yy242->pList = yymsp[-2].minor.yy322;
- sqliteExprSpan(yygotominor.yy242, &yymsp[-4].minor.yy0, &yymsp[0].minor.yy0);
-}
-#line 3350 "parse.c"
- break;
- case 225:
-#line 703 "parse.y"
-{
- yygotominor.yy322 = sqliteExprListAppend(yymsp[-4].minor.yy322, yymsp[-2].minor.yy242, 0);
- yygotominor.yy322 = sqliteExprListAppend(yygotominor.yy322, yymsp[0].minor.yy242, 0);
-}
-#line 3358 "parse.c"
- /* No destructor defined for WHEN */
- /* No destructor defined for THEN */
- break;
- case 226:
-#line 707 "parse.y"
-{
- yygotominor.yy322 = sqliteExprListAppend(0, yymsp[-2].minor.yy242, 0);
- yygotominor.yy322 = sqliteExprListAppend(yygotominor.yy322, yymsp[0].minor.yy242, 0);
-}
-#line 3368 "parse.c"
- /* No destructor defined for WHEN */
- /* No destructor defined for THEN */
- break;
- case 227:
-#line 712 "parse.y"
-{yygotominor.yy242 = yymsp[0].minor.yy242;}
-#line 3375 "parse.c"
- /* No destructor defined for ELSE */
- break;
- case 228:
-#line 713 "parse.y"
-{yygotominor.yy242 = 0;}
-#line 3381 "parse.c"
- break;
- case 229:
-#line 715 "parse.y"
-{yygotominor.yy242 = yymsp[0].minor.yy242;}
-#line 3386 "parse.c"
- break;
- case 230:
-#line 716 "parse.y"
-{yygotominor.yy242 = 0;}
-#line 3391 "parse.c"
- break;
- case 231:
-#line 724 "parse.y"
-{yygotominor.yy322 = sqliteExprListAppend(yymsp[-2].minor.yy322,yymsp[0].minor.yy242,0);}
-#line 3396 "parse.c"
- /* No destructor defined for COMMA */
- break;
- case 232:
-#line 725 "parse.y"
-{yygotominor.yy322 = sqliteExprListAppend(0,yymsp[0].minor.yy242,0);}
-#line 3402 "parse.c"
- break;
- case 233:
-#line 726 "parse.y"
-{yygotominor.yy242 = yymsp[0].minor.yy242;}
-#line 3407 "parse.c"
- break;
- case 234:
-#line 727 "parse.y"
-{yygotominor.yy242 = 0;}
-#line 3412 "parse.c"
- break;
- case 235:
-#line 732 "parse.y"
-{
- SrcList *pSrc = sqliteSrcListAppend(0, &yymsp[-5].minor.yy298, &yymsp[-4].minor.yy298);
- if( yymsp[-9].minor.yy372!=OE_None ) yymsp[-9].minor.yy372 = yymsp[0].minor.yy372;
- if( yymsp[-9].minor.yy372==OE_Default) yymsp[-9].minor.yy372 = OE_Abort;
- sqliteCreateIndex(pParse, &yymsp[-7].minor.yy298, pSrc, yymsp[-2].minor.yy320, yymsp[-9].minor.yy372, &yymsp[-10].minor.yy0, &yymsp[-1].minor.yy0);
-}
-#line 3422 "parse.c"
- /* No destructor defined for INDEX */
- /* No destructor defined for ON */
- /* No destructor defined for LP */
- break;
- case 236:
-#line 740 "parse.y"
-{ yygotominor.yy372 = OE_Abort; }
-#line 3430 "parse.c"
- /* No destructor defined for UNIQUE */
- break;
- case 237:
-#line 741 "parse.y"
-{ yygotominor.yy372 = OE_None; }
-#line 3436 "parse.c"
- break;
- case 238:
-#line 749 "parse.y"
-{yygotominor.yy320 = 0;}
-#line 3441 "parse.c"
- break;
- case 239:
-#line 750 "parse.y"
-{yygotominor.yy320 = yymsp[-1].minor.yy320;}
-#line 3446 "parse.c"
- /* No destructor defined for LP */
- /* No destructor defined for RP */
- break;
- case 240:
-#line 751 "parse.y"
-{yygotominor.yy320 = sqliteIdListAppend(yymsp[-2].minor.yy320,&yymsp[0].minor.yy298);}
-#line 3453 "parse.c"
- /* No destructor defined for COMMA */
- break;
- case 241:
-#line 752 "parse.y"
-{yygotominor.yy320 = sqliteIdListAppend(0,&yymsp[0].minor.yy298);}
-#line 3459 "parse.c"
- break;
- case 242:
-#line 753 "parse.y"
-{yygotominor.yy298 = yymsp[-1].minor.yy298;}
-#line 3464 "parse.c"
- /* No destructor defined for sortorder */
- break;
- case 243:
-#line 758 "parse.y"
-{
- sqliteDropIndex(pParse, sqliteSrcListAppend(0,&yymsp[-1].minor.yy298,&yymsp[0].minor.yy298));
-}
-#line 3472 "parse.c"
- /* No destructor defined for DROP */
- /* No destructor defined for INDEX */
- break;
- case 244:
-#line 766 "parse.y"
-{sqliteCopy(pParse,sqliteSrcListAppend(0,&yymsp[-6].minor.yy298,&yymsp[-5].minor.yy298),&yymsp[-3].minor.yy298,&yymsp[0].minor.yy0,yymsp[-7].minor.yy372);}
-#line 3479 "parse.c"
- /* No destructor defined for COPY */
- /* No destructor defined for FROM */
- /* No destructor defined for USING */
- /* No destructor defined for DELIMITERS */
- break;
- case 245:
-#line 768 "parse.y"
-{sqliteCopy(pParse,sqliteSrcListAppend(0,&yymsp[-3].minor.yy298,&yymsp[-2].minor.yy298),&yymsp[0].minor.yy298,0,yymsp[-4].minor.yy372);}
-#line 3488 "parse.c"
- /* No destructor defined for COPY */
- /* No destructor defined for FROM */
- break;
- case 246:
-#line 772 "parse.y"
-{sqliteVacuum(pParse,0);}
-#line 3495 "parse.c"
- /* No destructor defined for VACUUM */
- break;
- case 247:
-#line 773 "parse.y"
-{sqliteVacuum(pParse,&yymsp[0].minor.yy298);}
-#line 3501 "parse.c"
- /* No destructor defined for VACUUM */
- break;
- case 248:
-#line 777 "parse.y"
-{sqlitePragma(pParse,&yymsp[-2].minor.yy298,&yymsp[0].minor.yy298,0);}
-#line 3507 "parse.c"
- /* No destructor defined for PRAGMA */
- /* No destructor defined for EQ */
- break;
- case 249:
-#line 778 "parse.y"
-{sqlitePragma(pParse,&yymsp[-2].minor.yy298,&yymsp[0].minor.yy0,0);}
-#line 3514 "parse.c"
- /* No destructor defined for PRAGMA */
- /* No destructor defined for EQ */
- break;
- case 250:
-#line 779 "parse.y"
-{sqlitePragma(pParse,&yymsp[-2].minor.yy298,&yymsp[0].minor.yy298,0);}
-#line 3521 "parse.c"
- /* No destructor defined for PRAGMA */
- /* No destructor defined for EQ */
- break;
- case 251:
-#line 780 "parse.y"
-{sqlitePragma(pParse,&yymsp[-2].minor.yy298,&yymsp[0].minor.yy298,1);}
-#line 3528 "parse.c"
- /* No destructor defined for PRAGMA */
- /* No destructor defined for EQ */
- break;
- case 252:
-#line 781 "parse.y"
-{sqlitePragma(pParse,&yymsp[-3].minor.yy298,&yymsp[-1].minor.yy298,0);}
-#line 3535 "parse.c"
- /* No destructor defined for PRAGMA */
- /* No destructor defined for LP */
- /* No destructor defined for RP */
- break;
- case 253:
-#line 782 "parse.y"
-{sqlitePragma(pParse,&yymsp[0].minor.yy298,&yymsp[0].minor.yy298,0);}
-#line 3543 "parse.c"
- /* No destructor defined for PRAGMA */
- break;
- case 254:
-#line 783 "parse.y"
-{yygotominor.yy298 = yymsp[0].minor.yy298;}
-#line 3549 "parse.c"
- /* No destructor defined for plus_opt */
- break;
- case 255:
-#line 784 "parse.y"
-{yygotominor.yy298 = yymsp[0].minor.yy298;}
-#line 3555 "parse.c"
- /* No destructor defined for MINUS */
- break;
- case 256:
-#line 785 "parse.y"
-{yygotominor.yy298 = yymsp[0].minor.yy0;}
-#line 3561 "parse.c"
- break;
- case 257:
-#line 786 "parse.y"
-{yygotominor.yy298 = yymsp[0].minor.yy0;}
-#line 3566 "parse.c"
- break;
- case 258:
- /* No destructor defined for PLUS */
- break;
- case 259:
- break;
- case 260:
-#line 792 "parse.y"
-{
- Token all;
- all.z = yymsp[-4].minor.yy0.z;
- all.n = (yymsp[0].minor.yy0.z - yymsp[-4].minor.yy0.z) + yymsp[0].minor.yy0.n;
- sqliteFinishTrigger(pParse, yymsp[-1].minor.yy19, &all);
-}
-#line 3581 "parse.c"
- /* No destructor defined for trigger_decl */
- /* No destructor defined for BEGIN */
- break;
- case 261:
-#line 800 "parse.y"
-{
- SrcList *pTab = sqliteSrcListAppend(0, &yymsp[-3].minor.yy298, &yymsp[-2].minor.yy298);
- sqliteBeginTrigger(pParse, &yymsp[-7].minor.yy298, yymsp[-6].minor.yy372, yymsp[-5].minor.yy290.a, yymsp[-5].minor.yy290.b, pTab, yymsp[-1].minor.yy372, yymsp[0].minor.yy182, yymsp[-9].minor.yy372);
-}
-#line 3591 "parse.c"
- /* No destructor defined for TRIGGER */
- /* No destructor defined for ON */
- break;
- case 262:
-#line 806 "parse.y"
-{ yygotominor.yy372 = TK_BEFORE; }
-#line 3598 "parse.c"
- /* No destructor defined for BEFORE */
- break;
- case 263:
-#line 807 "parse.y"
-{ yygotominor.yy372 = TK_AFTER; }
-#line 3604 "parse.c"
- /* No destructor defined for AFTER */
- break;
- case 264:
-#line 808 "parse.y"
-{ yygotominor.yy372 = TK_INSTEAD;}
-#line 3610 "parse.c"
- /* No destructor defined for INSTEAD */
- /* No destructor defined for OF */
- break;
- case 265:
-#line 809 "parse.y"
-{ yygotominor.yy372 = TK_BEFORE; }
-#line 3617 "parse.c"
- break;
- case 266:
-#line 813 "parse.y"
-{ yygotominor.yy290.a = TK_DELETE; yygotominor.yy290.b = 0; }
-#line 3622 "parse.c"
- /* No destructor defined for DELETE */
- break;
- case 267:
-#line 814 "parse.y"
-{ yygotominor.yy290.a = TK_INSERT; yygotominor.yy290.b = 0; }
-#line 3628 "parse.c"
- /* No destructor defined for INSERT */
- break;
- case 268:
-#line 815 "parse.y"
-{ yygotominor.yy290.a = TK_UPDATE; yygotominor.yy290.b = 0;}
-#line 3634 "parse.c"
- /* No destructor defined for UPDATE */
- break;
- case 269:
-#line 816 "parse.y"
-{yygotominor.yy290.a = TK_UPDATE; yygotominor.yy290.b = yymsp[0].minor.yy320; }
-#line 3640 "parse.c"
- /* No destructor defined for UPDATE */
- /* No destructor defined for OF */
- break;
- case 270:
-#line 819 "parse.y"
-{ yygotominor.yy372 = TK_ROW; }
-#line 3647 "parse.c"
- break;
- case 271:
-#line 820 "parse.y"
-{ yygotominor.yy372 = TK_ROW; }
-#line 3652 "parse.c"
- /* No destructor defined for FOR */
- /* No destructor defined for EACH */
- /* No destructor defined for ROW */
- break;
- case 272:
-#line 821 "parse.y"
-{ yygotominor.yy372 = TK_STATEMENT; }
-#line 3660 "parse.c"
- /* No destructor defined for FOR */
- /* No destructor defined for EACH */
- /* No destructor defined for STATEMENT */
- break;
- case 273:
-#line 824 "parse.y"
-{ yygotominor.yy182 = 0; }
-#line 3668 "parse.c"
- break;
- case 274:
-#line 825 "parse.y"
-{ yygotominor.yy182 = yymsp[0].minor.yy242; }
-#line 3673 "parse.c"
- /* No destructor defined for WHEN */
- break;
- case 275:
-#line 829 "parse.y"
-{
- yymsp[-2].minor.yy19->pNext = yymsp[0].minor.yy19;
- yygotominor.yy19 = yymsp[-2].minor.yy19;
-}
-#line 3682 "parse.c"
- /* No destructor defined for SEMI */
- break;
- case 276:
-#line 833 "parse.y"
-{ yygotominor.yy19 = 0; }
-#line 3688 "parse.c"
- break;
- case 277:
-#line 839 "parse.y"
-{ yygotominor.yy19 = sqliteTriggerUpdateStep(&yymsp[-3].minor.yy298, yymsp[-1].minor.yy322, yymsp[0].minor.yy242, yymsp[-4].minor.yy372); }
-#line 3693 "parse.c"
- /* No destructor defined for UPDATE */
- /* No destructor defined for SET */
- break;
- case 278:
-#line 844 "parse.y"
-{yygotominor.yy19 = sqliteTriggerInsertStep(&yymsp[-5].minor.yy298, yymsp[-4].minor.yy320, yymsp[-1].minor.yy322, 0, yymsp[-7].minor.yy372);}
-#line 3700 "parse.c"
- /* No destructor defined for INTO */
- /* No destructor defined for VALUES */
- /* No destructor defined for LP */
- /* No destructor defined for RP */
- break;
- case 279:
-#line 847 "parse.y"
-{yygotominor.yy19 = sqliteTriggerInsertStep(&yymsp[-2].minor.yy298, yymsp[-1].minor.yy320, 0, yymsp[0].minor.yy179, yymsp[-4].minor.yy372);}
-#line 3709 "parse.c"
- /* No destructor defined for INTO */
- break;
- case 280:
-#line 851 "parse.y"
-{yygotominor.yy19 = sqliteTriggerDeleteStep(&yymsp[-1].minor.yy298, yymsp[0].minor.yy242);}
-#line 3715 "parse.c"
- /* No destructor defined for DELETE */
- /* No destructor defined for FROM */
- break;
- case 281:
-#line 854 "parse.y"
-{yygotominor.yy19 = sqliteTriggerSelectStep(yymsp[0].minor.yy179); }
-#line 3722 "parse.c"
- break;
- case 282:
-#line 857 "parse.y"
-{
- yygotominor.yy242 = sqliteExpr(TK_RAISE, 0, 0, 0);
- yygotominor.yy242->iColumn = OE_Ignore;
- sqliteExprSpan(yygotominor.yy242, &yymsp[-3].minor.yy0, &yymsp[0].minor.yy0);
-}
-#line 3731 "parse.c"
- /* No destructor defined for LP */
- /* No destructor defined for IGNORE */
- break;
- case 283:
-#line 862 "parse.y"
-{
- yygotominor.yy242 = sqliteExpr(TK_RAISE, 0, 0, &yymsp[-1].minor.yy298);
- yygotominor.yy242->iColumn = OE_Rollback;
- sqliteExprSpan(yygotominor.yy242, &yymsp[-5].minor.yy0, &yymsp[0].minor.yy0);
-}
-#line 3742 "parse.c"
- /* No destructor defined for LP */
- /* No destructor defined for ROLLBACK */
- /* No destructor defined for COMMA */
- break;
- case 284:
-#line 867 "parse.y"
-{
- yygotominor.yy242 = sqliteExpr(TK_RAISE, 0, 0, &yymsp[-1].minor.yy298);
- yygotominor.yy242->iColumn = OE_Abort;
- sqliteExprSpan(yygotominor.yy242, &yymsp[-5].minor.yy0, &yymsp[0].minor.yy0);
-}
-#line 3754 "parse.c"
- /* No destructor defined for LP */
- /* No destructor defined for ABORT */
- /* No destructor defined for COMMA */
- break;
- case 285:
-#line 872 "parse.y"
-{
- yygotominor.yy242 = sqliteExpr(TK_RAISE, 0, 0, &yymsp[-1].minor.yy298);
- yygotominor.yy242->iColumn = OE_Fail;
- sqliteExprSpan(yygotominor.yy242, &yymsp[-5].minor.yy0, &yymsp[0].minor.yy0);
-}
-#line 3766 "parse.c"
- /* No destructor defined for LP */
- /* No destructor defined for FAIL */
- /* No destructor defined for COMMA */
- break;
- case 286:
-#line 879 "parse.y"
-{
- sqliteDropTrigger(pParse,sqliteSrcListAppend(0,&yymsp[-1].minor.yy298,&yymsp[0].minor.yy298));
-}
-#line 3776 "parse.c"
- /* No destructor defined for DROP */
- /* No destructor defined for TRIGGER */
- break;
- case 287:
-#line 884 "parse.y"
-{
- sqliteAttach(pParse, &yymsp[-3].minor.yy298, &yymsp[-1].minor.yy298, &yymsp[0].minor.yy298);
-}
-#line 3785 "parse.c"
- /* No destructor defined for ATTACH */
- /* No destructor defined for database_kw_opt */
- /* No destructor defined for AS */
- break;
- case 288:
-#line 888 "parse.y"
-{ yygotominor.yy298 = yymsp[0].minor.yy298; }
-#line 3793 "parse.c"
- /* No destructor defined for USING */
- break;
- case 289:
-#line 889 "parse.y"
-{ yygotominor.yy298.z = 0; yygotominor.yy298.n = 0; }
-#line 3799 "parse.c"
- break;
- case 290:
- /* No destructor defined for DATABASE */
- break;
- case 291:
- break;
- case 292:
-#line 895 "parse.y"
-{
- sqliteDetach(pParse, &yymsp[0].minor.yy298);
-}
-#line 3811 "parse.c"
- /* No destructor defined for DETACH */
- /* No destructor defined for database_kw_opt */
- break;
- };
- yygoto = yyRuleInfo[yyruleno].lhs;
- yysize = yyRuleInfo[yyruleno].nrhs;
- yypParser->yyidx -= yysize;
- yyact = yy_find_reduce_action(yypParser,yygoto);
- if( yyact < YYNSTATE ){
- yy_shift(yypParser,yyact,yygoto,&yygotominor);
- }else if( yyact == YYNSTATE + YYNRULE + 1 ){
- yy_accept(yypParser);
- }
-}
-
-/*
-** The following code executes when the parse fails
-*/
-static void yy_parse_failed(
- yyParser *yypParser /* The parser */
-){
- sqliteParserARG_FETCH;
-#ifndef NDEBUG
- if( yyTraceFILE ){
- fprintf(yyTraceFILE,"%sFail!\n",yyTracePrompt);
- }
-#endif
- while( yypParser->yyidx>=0 ) yy_pop_parser_stack(yypParser);
- /* Here code is inserted which will be executed whenever the
- ** parser fails */
- sqliteParserARG_STORE; /* Suppress warning about unused %extra_argument variable */
-}
-
-/*
-** The following code executes when a syntax error first occurs.
-*/
-static void yy_syntax_error(
- yyParser *yypParser, /* The parser */
- int yymajor, /* The major type of the error token */
- YYMINORTYPE yyminor /* The minor type of the error token */
-){
- sqliteParserARG_FETCH;
-#define TOKEN (yyminor.yy0)
-#line 23 "parse.y"
-
- if( pParse->zErrMsg==0 ){
- if( TOKEN.z[0] ){
- sqliteErrorMsg(pParse, "near \"%T\": syntax error", &TOKEN);
- }else{
- sqliteErrorMsg(pParse, "incomplete SQL statement");
- }
- }
-
-#line 3865 "parse.c"
- sqliteParserARG_STORE; /* Suppress warning about unused %extra_argument variable */
-}
-
-/*
-** The following is executed when the parser accepts
-*/
-static void yy_accept(
- yyParser *yypParser /* The parser */
-){
- sqliteParserARG_FETCH;
-#ifndef NDEBUG
- if( yyTraceFILE ){
- fprintf(yyTraceFILE,"%sAccept!\n",yyTracePrompt);
- }
-#endif
- while( yypParser->yyidx>=0 ) yy_pop_parser_stack(yypParser);
- /* Here code is inserted which will be executed whenever the
- ** parser accepts */
- sqliteParserARG_STORE; /* Suppress warning about unused %extra_argument variable */
-}
-
-/* The main parser program.
-** The first argument is a pointer to a structure obtained from
-** "sqliteParserAlloc" which describes the current state of the parser.
-** The second argument is the major token number. The third is
-** the minor token. The fourth optional argument is whatever the
-** user wants (and specified in the grammar) and is available for
-** use by the action routines.
-**
-** Inputs:
-** <ul>
-** <li> A pointer to the parser (an opaque structure.)
-** <li> The major token number.
-** <li> The minor token number.
-** <li> An option argument of a grammar-specified type.
-** </ul>
-**
-** Outputs:
-** None.
-*/
-void sqliteParser(
- void *yyp, /* The parser */
- int yymajor, /* The major token code number */
- sqliteParserTOKENTYPE yyminor /* The value for the token */
- sqliteParserARG_PDECL /* Optional %extra_argument parameter */
-){
- YYMINORTYPE yyminorunion;
- int yyact; /* The parser action. */
- int yyendofinput; /* True if we are at the end of input */
- int yyerrorhit = 0; /* True if yymajor has invoked an error */
- yyParser *yypParser; /* The parser */
-
- /* (re)initialize the parser, if necessary */
- yypParser = (yyParser*)yyp;
- if( yypParser->yyidx<0 ){
- if( yymajor==0 ) return;
- yypParser->yyidx = 0;
- yypParser->yyerrcnt = -1;
- yypParser->yystack[0].stateno = 0;
- yypParser->yystack[0].major = 0;
- }
- yyminorunion.yy0 = yyminor;
- yyendofinput = (yymajor==0);
- sqliteParserARG_STORE;
-
-#ifndef NDEBUG
- if( yyTraceFILE ){
- fprintf(yyTraceFILE,"%sInput %s\n",yyTracePrompt,yyTokenName[yymajor]);
- }
-#endif
-
- do{
- yyact = yy_find_shift_action(yypParser,yymajor);
- if( yyact<YYNSTATE ){
- yy_shift(yypParser,yyact,yymajor,&yyminorunion);
- yypParser->yyerrcnt--;
- if( yyendofinput && yypParser->yyidx>=0 ){
- yymajor = 0;
- }else{
- yymajor = YYNOCODE;
- }
- }else if( yyact < YYNSTATE + YYNRULE ){
- yy_reduce(yypParser,yyact-YYNSTATE);
- }else if( yyact == YY_ERROR_ACTION ){
- int yymx;
-#ifndef NDEBUG
- if( yyTraceFILE ){
- fprintf(yyTraceFILE,"%sSyntax Error!\n",yyTracePrompt);
- }
-#endif
-#ifdef YYERRORSYMBOL
- /* A syntax error has occurred.
- ** The response to an error depends upon whether or not the
- ** grammar defines an error token "ERROR".
- **
- ** This is what we do if the grammar does define ERROR:
- **
- ** * Call the %syntax_error function.
- **
- ** * Begin popping the stack until we enter a state where
- ** it is legal to shift the error symbol, then shift
- ** the error symbol.
- **
- ** * Set the error count to three.
- **
- ** * Begin accepting and shifting new tokens. No new error
- ** processing will occur until three tokens have been
- ** shifted successfully.
- **
- */
- if( yypParser->yyerrcnt<0 ){
- yy_syntax_error(yypParser,yymajor,yyminorunion);
- }
- yymx = yypParser->yystack[yypParser->yyidx].major;
- if( yymx==YYERRORSYMBOL || yyerrorhit ){
-#ifndef NDEBUG
- if( yyTraceFILE ){
- fprintf(yyTraceFILE,"%sDiscard input token %s\n",
- yyTracePrompt,yyTokenName[yymajor]);
- }
-#endif
- yy_destructor(yymajor,&yyminorunion);
- yymajor = YYNOCODE;
- }else{
- while(
- yypParser->yyidx >= 0 &&
- yymx != YYERRORSYMBOL &&
- (yyact = yy_find_shift_action(yypParser,YYERRORSYMBOL)) >= YYNSTATE
- ){
- yy_pop_parser_stack(yypParser);
- }
- if( yypParser->yyidx < 0 || yymajor==0 ){
- yy_destructor(yymajor,&yyminorunion);
- yy_parse_failed(yypParser);
- yymajor = YYNOCODE;
- }else if( yymx!=YYERRORSYMBOL ){
- YYMINORTYPE u2;
- u2.YYERRSYMDT = 0;
- yy_shift(yypParser,yyact,YYERRORSYMBOL,&u2);
- }
- }
- yypParser->yyerrcnt = 3;
- yyerrorhit = 1;
-#else /* YYERRORSYMBOL is not defined */
- /* This is what we do if the grammar does not define ERROR:
- **
- ** * Report an error message, and throw away the input token.
- **
- ** * If the input token is $, then fail the parse.
- **
- ** As before, subsequent error messages are suppressed until
- ** three input tokens have been successfully shifted.
- */
- if( yypParser->yyerrcnt<=0 ){
- yy_syntax_error(yypParser,yymajor,yyminorunion);
- }
- yypParser->yyerrcnt = 3;
- yy_destructor(yymajor,&yyminorunion);
- if( yyendofinput ){
- yy_parse_failed(yypParser);
- }
- yymajor = YYNOCODE;
-#endif
- }else{
- yy_accept(yypParser);
- yymajor = YYNOCODE;
- }
- }while( yymajor!=YYNOCODE && yypParser->yyidx>=0 );
- return;
-}
diff --git a/ext/sqlite/libsqlite/src/parse.h b/ext/sqlite/libsqlite/src/parse.h
deleted file mode 100644
index 188a336c8d..0000000000
--- a/ext/sqlite/libsqlite/src/parse.h
+++ /dev/null
@@ -1,130 +0,0 @@
-#define TK_END_OF_FILE 1
-#define TK_ILLEGAL 2
-#define TK_SPACE 3
-#define TK_UNCLOSED_STRING 4
-#define TK_COMMENT 5
-#define TK_FUNCTION 6
-#define TK_COLUMN 7
-#define TK_AGG_FUNCTION 8
-#define TK_SEMI 9
-#define TK_EXPLAIN 10
-#define TK_BEGIN 11
-#define TK_TRANSACTION 12
-#define TK_COMMIT 13
-#define TK_END 14
-#define TK_ROLLBACK 15
-#define TK_CREATE 16
-#define TK_TABLE 17
-#define TK_TEMP 18
-#define TK_LP 19
-#define TK_RP 20
-#define TK_AS 21
-#define TK_COMMA 22
-#define TK_ID 23
-#define TK_ABORT 24
-#define TK_AFTER 25
-#define TK_ASC 26
-#define TK_ATTACH 27
-#define TK_BEFORE 28
-#define TK_CASCADE 29
-#define TK_CLUSTER 30
-#define TK_CONFLICT 31
-#define TK_COPY 32
-#define TK_DATABASE 33
-#define TK_DEFERRED 34
-#define TK_DELIMITERS 35
-#define TK_DESC 36
-#define TK_DETACH 37
-#define TK_EACH 38
-#define TK_FAIL 39
-#define TK_FOR 40
-#define TK_GLOB 41
-#define TK_IGNORE 42
-#define TK_IMMEDIATE 43
-#define TK_INITIALLY 44
-#define TK_INSTEAD 45
-#define TK_LIKE 46
-#define TK_MATCH 47
-#define TK_KEY 48
-#define TK_OF 49
-#define TK_OFFSET 50
-#define TK_PRAGMA 51
-#define TK_RAISE 52
-#define TK_REPLACE 53
-#define TK_RESTRICT 54
-#define TK_ROW 55
-#define TK_STATEMENT 56
-#define TK_TRIGGER 57
-#define TK_VACUUM 58
-#define TK_VIEW 59
-#define TK_OR 60
-#define TK_AND 61
-#define TK_NOT 62
-#define TK_EQ 63
-#define TK_NE 64
-#define TK_ISNULL 65
-#define TK_NOTNULL 66
-#define TK_IS 67
-#define TK_BETWEEN 68
-#define TK_IN 69
-#define TK_GT 70
-#define TK_GE 71
-#define TK_LT 72
-#define TK_LE 73
-#define TK_BITAND 74
-#define TK_BITOR 75
-#define TK_LSHIFT 76
-#define TK_RSHIFT 77
-#define TK_PLUS 78
-#define TK_MINUS 79
-#define TK_STAR 80
-#define TK_SLASH 81
-#define TK_REM 82
-#define TK_CONCAT 83
-#define TK_UMINUS 84
-#define TK_UPLUS 85
-#define TK_BITNOT 86
-#define TK_STRING 87
-#define TK_JOIN_KW 88
-#define TK_INTEGER 89
-#define TK_CONSTRAINT 90
-#define TK_DEFAULT 91
-#define TK_FLOAT 92
-#define TK_NULL 93
-#define TK_PRIMARY 94
-#define TK_UNIQUE 95
-#define TK_CHECK 96
-#define TK_REFERENCES 97
-#define TK_COLLATE 98
-#define TK_ON 99
-#define TK_DELETE 100
-#define TK_UPDATE 101
-#define TK_INSERT 102
-#define TK_SET 103
-#define TK_DEFERRABLE 104
-#define TK_FOREIGN 105
-#define TK_DROP 106
-#define TK_UNION 107
-#define TK_ALL 108
-#define TK_INTERSECT 109
-#define TK_EXCEPT 110
-#define TK_SELECT 111
-#define TK_DISTINCT 112
-#define TK_DOT 113
-#define TK_FROM 114
-#define TK_JOIN 115
-#define TK_USING 116
-#define TK_ORDER 117
-#define TK_BY 118
-#define TK_GROUP 119
-#define TK_HAVING 120
-#define TK_LIMIT 121
-#define TK_WHERE 122
-#define TK_INTO 123
-#define TK_VALUES 124
-#define TK_VARIABLE 125
-#define TK_CASE 126
-#define TK_WHEN 127
-#define TK_THEN 128
-#define TK_ELSE 129
-#define TK_INDEX 130
diff --git a/ext/sqlite/libsqlite/src/parse.y b/ext/sqlite/libsqlite/src/parse.y
deleted file mode 100644
index cc236a5df8..0000000000
--- a/ext/sqlite/libsqlite/src/parse.y
+++ /dev/null
@@ -1,897 +0,0 @@
-/*
-** 2001 September 15
-**
-** The author disclaims copyright to this source code. In place of
-** a legal notice, here is a blessing:
-**
-** May you do good and not evil.
-** May you find forgiveness for yourself and forgive others.
-** May you share freely, never taking more than you give.
-**
-*************************************************************************
-** This file contains SQLite's grammar for SQL. Process this file
-** using the lemon parser generator to generate C code that runs
-** the parser. Lemon will also generate a header file containing
-** numeric codes for all of the tokens.
-**
-** @(#) $Id$
-*/
-%token_prefix TK_
-%token_type {Token}
-%default_type {Token}
-%extra_argument {Parse *pParse}
-%syntax_error {
- if( pParse->zErrMsg==0 ){
- if( TOKEN.z[0] ){
- sqliteErrorMsg(pParse, "near \"%T\": syntax error", &TOKEN);
- }else{
- sqliteErrorMsg(pParse, "incomplete SQL statement");
- }
- }
-}
-%name sqliteParser
-%include {
-#include "sqliteInt.h"
-#include "parse.h"
-
-/*
-** An instance of this structure holds information about the
-** LIMIT clause of a SELECT statement.
-*/
-struct LimitVal {
- int limit; /* The LIMIT value. -1 if there is no limit */
- int offset; /* The OFFSET. 0 if there is none */
-};
-
-/*
-** An instance of the following structure describes the event of a
-** TRIGGER. "a" is the event type, one of TK_UPDATE, TK_INSERT,
-** TK_DELETE, or TK_INSTEAD. If the event is of the form
-**
-** UPDATE ON (a,b,c)
-**
-** Then the "b" IdList records the list "a,b,c".
-*/
-struct TrigEvent { int a; IdList * b; };
-
-} // end %include
-
-// These are extra tokens used by the lexer but never seen by the
-// parser. We put them in a rule so that the parser generator will
-// add them to the parse.h output file.
-//
-%nonassoc END_OF_FILE ILLEGAL SPACE UNCLOSED_STRING COMMENT FUNCTION
- COLUMN AGG_FUNCTION.
-
-// Input is a single SQL command
-input ::= cmdlist.
-cmdlist ::= cmdlist ecmd.
-cmdlist ::= ecmd.
-ecmd ::= explain cmdx SEMI.
-ecmd ::= SEMI.
-cmdx ::= cmd. { sqliteExec(pParse); }
-explain ::= EXPLAIN. { sqliteBeginParse(pParse, 1); }
-explain ::= . { sqliteBeginParse(pParse, 0); }
-
-///////////////////// Begin and end transactions. ////////////////////////////
-//
-
-cmd ::= BEGIN trans_opt onconf(R). {sqliteBeginTransaction(pParse,R);}
-trans_opt ::= .
-trans_opt ::= TRANSACTION.
-trans_opt ::= TRANSACTION nm.
-cmd ::= COMMIT trans_opt. {sqliteCommitTransaction(pParse);}
-cmd ::= END trans_opt. {sqliteCommitTransaction(pParse);}
-cmd ::= ROLLBACK trans_opt. {sqliteRollbackTransaction(pParse);}
-
-///////////////////// The CREATE TABLE statement ////////////////////////////
-//
-cmd ::= create_table create_table_args.
-create_table ::= CREATE(X) temp(T) TABLE nm(Y). {
- sqliteStartTable(pParse,&X,&Y,T,0);
-}
-%type temp {int}
-temp(A) ::= TEMP. {A = 1;}
-temp(A) ::= . {A = 0;}
-create_table_args ::= LP columnlist conslist_opt RP(X). {
- sqliteEndTable(pParse,&X,0);
-}
-create_table_args ::= AS select(S). {
- sqliteEndTable(pParse,0,S);
- sqliteSelectDelete(S);
-}
-columnlist ::= columnlist COMMA column.
-columnlist ::= column.
-
-// About the only information used for a column is the name of the
-// column. The type is always just "text". But the code will accept
-// an elaborate typename. Perhaps someday we'll do something with it.
-//
-column ::= columnid type carglist.
-columnid ::= nm(X). {sqliteAddColumn(pParse,&X);}
-
-// An IDENTIFIER can be a generic identifier, or one of several
-// keywords. Any non-standard keyword can also be an identifier.
-//
-%type id {Token}
-id(A) ::= ID(X). {A = X;}
-
-// The following directive causes tokens ABORT, AFTER, ASC, etc. to
-// fallback to ID if they will not parse as their original value.
-// This obviates the need for the "id" nonterminal.
-//
-%fallback ID
- ABORT AFTER ASC ATTACH BEFORE BEGIN CASCADE CLUSTER CONFLICT
- COPY DATABASE DEFERRED DELIMITERS DESC DETACH EACH END EXPLAIN FAIL FOR
- GLOB IGNORE IMMEDIATE INITIALLY INSTEAD LIKE MATCH KEY
- OF OFFSET PRAGMA RAISE REPLACE RESTRICT ROW STATEMENT
- TEMP TRIGGER VACUUM VIEW.
-
-// Define operator precedence early so that this is the first occurance
-// of the operator tokens in the grammer. Keeping the operators together
-// causes them to be assigned integer values that are close together,
-// which keeps parser tables smaller.
-//
-%left OR.
-%left AND.
-%right NOT.
-%left EQ NE ISNULL NOTNULL IS LIKE GLOB BETWEEN IN.
-%left GT GE LT LE.
-%left BITAND BITOR LSHIFT RSHIFT.
-%left PLUS MINUS.
-%left STAR SLASH REM.
-%left CONCAT.
-%right UMINUS UPLUS BITNOT.
-
-// And "ids" is an identifer-or-string.
-//
-%type ids {Token}
-ids(A) ::= ID(X). {A = X;}
-ids(A) ::= STRING(X). {A = X;}
-
-// The name of a column or table can be any of the following:
-//
-%type nm {Token}
-nm(A) ::= ID(X). {A = X;}
-nm(A) ::= STRING(X). {A = X;}
-nm(A) ::= JOIN_KW(X). {A = X;}
-
-type ::= .
-type ::= typename(X). {sqliteAddColumnType(pParse,&X,&X);}
-type ::= typename(X) LP signed RP(Y). {sqliteAddColumnType(pParse,&X,&Y);}
-type ::= typename(X) LP signed COMMA signed RP(Y).
- {sqliteAddColumnType(pParse,&X,&Y);}
-%type typename {Token}
-typename(A) ::= ids(X). {A = X;}
-typename(A) ::= typename(X) ids. {A = X;}
-%type signed {int}
-signed(A) ::= INTEGER(X). { A = atoi(X.z); }
-signed(A) ::= PLUS INTEGER(X). { A = atoi(X.z); }
-signed(A) ::= MINUS INTEGER(X). { A = -atoi(X.z); }
-carglist ::= carglist carg.
-carglist ::= .
-carg ::= CONSTRAINT nm ccons.
-carg ::= ccons.
-carg ::= DEFAULT STRING(X). {sqliteAddDefaultValue(pParse,&X,0);}
-carg ::= DEFAULT ID(X). {sqliteAddDefaultValue(pParse,&X,0);}
-carg ::= DEFAULT INTEGER(X). {sqliteAddDefaultValue(pParse,&X,0);}
-carg ::= DEFAULT PLUS INTEGER(X). {sqliteAddDefaultValue(pParse,&X,0);}
-carg ::= DEFAULT MINUS INTEGER(X). {sqliteAddDefaultValue(pParse,&X,1);}
-carg ::= DEFAULT FLOAT(X). {sqliteAddDefaultValue(pParse,&X,0);}
-carg ::= DEFAULT PLUS FLOAT(X). {sqliteAddDefaultValue(pParse,&X,0);}
-carg ::= DEFAULT MINUS FLOAT(X). {sqliteAddDefaultValue(pParse,&X,1);}
-carg ::= DEFAULT NULL.
-
-// In addition to the type name, we also care about the primary key and
-// UNIQUE constraints.
-//
-ccons ::= NULL onconf.
-ccons ::= NOT NULL onconf(R). {sqliteAddNotNull(pParse, R);}
-ccons ::= PRIMARY KEY sortorder onconf(R). {sqliteAddPrimaryKey(pParse,0,R);}
-ccons ::= UNIQUE onconf(R). {sqliteCreateIndex(pParse,0,0,0,R,0,0);}
-ccons ::= CHECK LP expr RP onconf.
-ccons ::= REFERENCES nm(T) idxlist_opt(TA) refargs(R).
- {sqliteCreateForeignKey(pParse,0,&T,TA,R);}
-ccons ::= defer_subclause(D). {sqliteDeferForeignKey(pParse,D);}
-ccons ::= COLLATE id(C). {
- sqliteAddCollateType(pParse, sqliteCollateType(C.z, C.n));
-}
-
-// The next group of rules parses the arguments to a REFERENCES clause
-// that determine if the referential integrity checking is deferred or
-// or immediate and which determine what action to take if a ref-integ
-// check fails.
-//
-%type refargs {int}
-refargs(A) ::= . { A = OE_Restrict * 0x010101; }
-refargs(A) ::= refargs(X) refarg(Y). { A = (X & Y.mask) | Y.value; }
-%type refarg {struct {int value; int mask;}}
-refarg(A) ::= MATCH nm. { A.value = 0; A.mask = 0x000000; }
-refarg(A) ::= ON DELETE refact(X). { A.value = X; A.mask = 0x0000ff; }
-refarg(A) ::= ON UPDATE refact(X). { A.value = X<<8; A.mask = 0x00ff00; }
-refarg(A) ::= ON INSERT refact(X). { A.value = X<<16; A.mask = 0xff0000; }
-%type refact {int}
-refact(A) ::= SET NULL. { A = OE_SetNull; }
-refact(A) ::= SET DEFAULT. { A = OE_SetDflt; }
-refact(A) ::= CASCADE. { A = OE_Cascade; }
-refact(A) ::= RESTRICT. { A = OE_Restrict; }
-%type defer_subclause {int}
-defer_subclause(A) ::= NOT DEFERRABLE init_deferred_pred_opt(X). {A = X;}
-defer_subclause(A) ::= DEFERRABLE init_deferred_pred_opt(X). {A = X;}
-%type init_deferred_pred_opt {int}
-init_deferred_pred_opt(A) ::= . {A = 0;}
-init_deferred_pred_opt(A) ::= INITIALLY DEFERRED. {A = 1;}
-init_deferred_pred_opt(A) ::= INITIALLY IMMEDIATE. {A = 0;}
-
-// For the time being, the only constraint we care about is the primary
-// key and UNIQUE. Both create indices.
-//
-conslist_opt ::= .
-conslist_opt ::= COMMA conslist.
-conslist ::= conslist COMMA tcons.
-conslist ::= conslist tcons.
-conslist ::= tcons.
-tcons ::= CONSTRAINT nm.
-tcons ::= PRIMARY KEY LP idxlist(X) RP onconf(R).
- {sqliteAddPrimaryKey(pParse,X,R);}
-tcons ::= UNIQUE LP idxlist(X) RP onconf(R).
- {sqliteCreateIndex(pParse,0,0,X,R,0,0);}
-tcons ::= CHECK expr onconf.
-tcons ::= FOREIGN KEY LP idxlist(FA) RP
- REFERENCES nm(T) idxlist_opt(TA) refargs(R) defer_subclause_opt(D). {
- sqliteCreateForeignKey(pParse, FA, &T, TA, R);
- sqliteDeferForeignKey(pParse, D);
-}
-%type defer_subclause_opt {int}
-defer_subclause_opt(A) ::= . {A = 0;}
-defer_subclause_opt(A) ::= defer_subclause(X). {A = X;}
-
-// The following is a non-standard extension that allows us to declare the
-// default behavior when there is a constraint conflict.
-//
-%type onconf {int}
-%type orconf {int}
-%type resolvetype {int}
-onconf(A) ::= . { A = OE_Default; }
-onconf(A) ::= ON CONFLICT resolvetype(X). { A = X; }
-orconf(A) ::= . { A = OE_Default; }
-orconf(A) ::= OR resolvetype(X). { A = X; }
-resolvetype(A) ::= ROLLBACK. { A = OE_Rollback; }
-resolvetype(A) ::= ABORT. { A = OE_Abort; }
-resolvetype(A) ::= FAIL. { A = OE_Fail; }
-resolvetype(A) ::= IGNORE. { A = OE_Ignore; }
-resolvetype(A) ::= REPLACE. { A = OE_Replace; }
-
-////////////////////////// The DROP TABLE /////////////////////////////////////
-//
-cmd ::= DROP TABLE nm(X). {sqliteDropTable(pParse,&X,0);}
-
-///////////////////// The CREATE VIEW statement /////////////////////////////
-//
-cmd ::= CREATE(X) temp(T) VIEW nm(Y) AS select(S). {
- sqliteCreateView(pParse, &X, &Y, S, T);
-}
-cmd ::= DROP VIEW nm(X). {
- sqliteDropTable(pParse, &X, 1);
-}
-
-//////////////////////// The SELECT statement /////////////////////////////////
-//
-cmd ::= select(X). {
- sqliteSelect(pParse, X, SRT_Callback, 0, 0, 0, 0);
- sqliteSelectDelete(X);
-}
-
-%type select {Select*}
-%destructor select {sqliteSelectDelete($$);}
-%type oneselect {Select*}
-%destructor oneselect {sqliteSelectDelete($$);}
-
-select(A) ::= oneselect(X). {A = X;}
-select(A) ::= select(X) multiselect_op(Y) oneselect(Z). {
- if( Z ){
- Z->op = Y;
- Z->pPrior = X;
- }
- A = Z;
-}
-%type multiselect_op {int}
-multiselect_op(A) ::= UNION. {A = TK_UNION;}
-multiselect_op(A) ::= UNION ALL. {A = TK_ALL;}
-multiselect_op(A) ::= INTERSECT. {A = TK_INTERSECT;}
-multiselect_op(A) ::= EXCEPT. {A = TK_EXCEPT;}
-oneselect(A) ::= SELECT distinct(D) selcollist(W) from(X) where_opt(Y)
- groupby_opt(P) having_opt(Q) orderby_opt(Z) limit_opt(L). {
- A = sqliteSelectNew(W,X,Y,P,Q,Z,D,L.limit,L.offset);
-}
-
-// The "distinct" nonterminal is true (1) if the DISTINCT keyword is
-// present and false (0) if it is not.
-//
-%type distinct {int}
-distinct(A) ::= DISTINCT. {A = 1;}
-distinct(A) ::= ALL. {A = 0;}
-distinct(A) ::= . {A = 0;}
-
-// selcollist is a list of expressions that are to become the return
-// values of the SELECT statement. The "*" in statements like
-// "SELECT * FROM ..." is encoded as a special expression with an
-// opcode of TK_ALL.
-//
-%type selcollist {ExprList*}
-%destructor selcollist {sqliteExprListDelete($$);}
-%type sclp {ExprList*}
-%destructor sclp {sqliteExprListDelete($$);}
-sclp(A) ::= selcollist(X) COMMA. {A = X;}
-sclp(A) ::= . {A = 0;}
-selcollist(A) ::= sclp(P) expr(X) as(Y). {
- A = sqliteExprListAppend(P,X,Y.n?&Y:0);
-}
-selcollist(A) ::= sclp(P) STAR. {
- A = sqliteExprListAppend(P, sqliteExpr(TK_ALL, 0, 0, 0), 0);
-}
-selcollist(A) ::= sclp(P) nm(X) DOT STAR. {
- Expr *pRight = sqliteExpr(TK_ALL, 0, 0, 0);
- Expr *pLeft = sqliteExpr(TK_ID, 0, 0, &X);
- A = sqliteExprListAppend(P, sqliteExpr(TK_DOT, pLeft, pRight, 0), 0);
-}
-
-// An option "AS <id>" phrase that can follow one of the expressions that
-// define the result set, or one of the tables in the FROM clause.
-//
-%type as {Token}
-as(X) ::= AS nm(Y). { X = Y; }
-as(X) ::= ids(Y). { X = Y; }
-as(X) ::= . { X.n = 0; }
-
-
-%type seltablist {SrcList*}
-%destructor seltablist {sqliteSrcListDelete($$);}
-%type stl_prefix {SrcList*}
-%destructor stl_prefix {sqliteSrcListDelete($$);}
-%type from {SrcList*}
-%destructor from {sqliteSrcListDelete($$);}
-
-// A complete FROM clause.
-//
-from(A) ::= . {A = sqliteMalloc(sizeof(*A));}
-from(A) ::= FROM seltablist(X). {A = X;}
-
-// "seltablist" is a "Select Table List" - the content of the FROM clause
-// in a SELECT statement. "stl_prefix" is a prefix of this list.
-//
-stl_prefix(A) ::= seltablist(X) joinop(Y). {
- A = X;
- if( A && A->nSrc>0 ) A->a[A->nSrc-1].jointype = Y;
-}
-stl_prefix(A) ::= . {A = 0;}
-seltablist(A) ::= stl_prefix(X) nm(Y) dbnm(D) as(Z) on_opt(N) using_opt(U). {
- A = sqliteSrcListAppend(X,&Y,&D);
- if( Z.n ) sqliteSrcListAddAlias(A,&Z);
- if( N ){
- if( A && A->nSrc>1 ){ A->a[A->nSrc-2].pOn = N; }
- else { sqliteExprDelete(N); }
- }
- if( U ){
- if( A && A->nSrc>1 ){ A->a[A->nSrc-2].pUsing = U; }
- else { sqliteIdListDelete(U); }
- }
-}
-seltablist(A) ::= stl_prefix(X) LP seltablist_paren(S) RP
- as(Z) on_opt(N) using_opt(U). {
- A = sqliteSrcListAppend(X,0,0);
- A->a[A->nSrc-1].pSelect = S;
- if( Z.n ) sqliteSrcListAddAlias(A,&Z);
- if( N ){
- if( A && A->nSrc>1 ){ A->a[A->nSrc-2].pOn = N; }
- else { sqliteExprDelete(N); }
- }
- if( U ){
- if( A && A->nSrc>1 ){ A->a[A->nSrc-2].pUsing = U; }
- else { sqliteIdListDelete(U); }
- }
-}
-
-// A seltablist_paren nonterminal represents anything in a FROM that
-// is contained inside parentheses. This can be either a subquery or
-// a grouping of table and subqueries.
-//
-%type seltablist_paren {Select*}
-%destructor seltablist_paren {sqliteSelectDelete($$);}
-seltablist_paren(A) ::= select(S). {A = S;}
-seltablist_paren(A) ::= seltablist(F). {
- A = sqliteSelectNew(0,F,0,0,0,0,0,-1,0);
-}
-
-%type dbnm {Token}
-dbnm(A) ::= . {A.z=0; A.n=0;}
-dbnm(A) ::= DOT nm(X). {A = X;}
-
-%type joinop {int}
-%type joinop2 {int}
-joinop(X) ::= COMMA. { X = JT_INNER; }
-joinop(X) ::= JOIN. { X = JT_INNER; }
-joinop(X) ::= JOIN_KW(A) JOIN. { X = sqliteJoinType(pParse,&A,0,0); }
-joinop(X) ::= JOIN_KW(A) nm(B) JOIN. { X = sqliteJoinType(pParse,&A,&B,0); }
-joinop(X) ::= JOIN_KW(A) nm(B) nm(C) JOIN.
- { X = sqliteJoinType(pParse,&A,&B,&C); }
-
-%type on_opt {Expr*}
-%destructor on_opt {sqliteExprDelete($$);}
-on_opt(N) ::= ON expr(E). {N = E;}
-on_opt(N) ::= . {N = 0;}
-
-%type using_opt {IdList*}
-%destructor using_opt {sqliteIdListDelete($$);}
-using_opt(U) ::= USING LP idxlist(L) RP. {U = L;}
-using_opt(U) ::= . {U = 0;}
-
-
-%type orderby_opt {ExprList*}
-%destructor orderby_opt {sqliteExprListDelete($$);}
-%type sortlist {ExprList*}
-%destructor sortlist {sqliteExprListDelete($$);}
-%type sortitem {Expr*}
-%destructor sortitem {sqliteExprDelete($$);}
-
-orderby_opt(A) ::= . {A = 0;}
-orderby_opt(A) ::= ORDER BY sortlist(X). {A = X;}
-sortlist(A) ::= sortlist(X) COMMA sortitem(Y) collate(C) sortorder(Z). {
- A = sqliteExprListAppend(X,Y,0);
- if( A ) A->a[A->nExpr-1].sortOrder = C+Z;
-}
-sortlist(A) ::= sortitem(Y) collate(C) sortorder(Z). {
- A = sqliteExprListAppend(0,Y,0);
- if( A ) A->a[0].sortOrder = C+Z;
-}
-sortitem(A) ::= expr(X). {A = X;}
-
-%type sortorder {int}
-%type collate {int}
-
-sortorder(A) ::= ASC. {A = SQLITE_SO_ASC;}
-sortorder(A) ::= DESC. {A = SQLITE_SO_DESC;}
-sortorder(A) ::= . {A = SQLITE_SO_ASC;}
-collate(C) ::= . {C = SQLITE_SO_UNK;}
-collate(C) ::= COLLATE id(X). {C = sqliteCollateType(X.z, X.n);}
-
-%type groupby_opt {ExprList*}
-%destructor groupby_opt {sqliteExprListDelete($$);}
-groupby_opt(A) ::= . {A = 0;}
-groupby_opt(A) ::= GROUP BY exprlist(X). {A = X;}
-
-%type having_opt {Expr*}
-%destructor having_opt {sqliteExprDelete($$);}
-having_opt(A) ::= . {A = 0;}
-having_opt(A) ::= HAVING expr(X). {A = X;}
-
-%type limit_opt {struct LimitVal}
-limit_opt(A) ::= . {A.limit = -1; A.offset = 0;}
-limit_opt(A) ::= LIMIT signed(X). {A.limit = X; A.offset = 0;}
-limit_opt(A) ::= LIMIT signed(X) OFFSET signed(Y).
- {A.limit = X; A.offset = Y;}
-limit_opt(A) ::= LIMIT signed(X) COMMA signed(Y).
- {A.limit = Y; A.offset = X;}
-
-/////////////////////////// The DELETE statement /////////////////////////////
-//
-cmd ::= DELETE FROM nm(X) dbnm(D) where_opt(Y). {
- sqliteDeleteFrom(pParse, sqliteSrcListAppend(0,&X,&D), Y);
-}
-
-%type where_opt {Expr*}
-%destructor where_opt {sqliteExprDelete($$);}
-
-where_opt(A) ::= . {A = 0;}
-where_opt(A) ::= WHERE expr(X). {A = X;}
-
-%type setlist {ExprList*}
-%destructor setlist {sqliteExprListDelete($$);}
-
-////////////////////////// The UPDATE command ////////////////////////////////
-//
-cmd ::= UPDATE orconf(R) nm(X) dbnm(D) SET setlist(Y) where_opt(Z).
- {sqliteUpdate(pParse,sqliteSrcListAppend(0,&X,&D),Y,Z,R);}
-
-setlist(A) ::= setlist(Z) COMMA nm(X) EQ expr(Y).
- {A = sqliteExprListAppend(Z,Y,&X);}
-setlist(A) ::= nm(X) EQ expr(Y). {A = sqliteExprListAppend(0,Y,&X);}
-
-////////////////////////// The INSERT command /////////////////////////////////
-//
-cmd ::= insert_cmd(R) INTO nm(X) dbnm(D) inscollist_opt(F)
- VALUES LP itemlist(Y) RP.
- {sqliteInsert(pParse, sqliteSrcListAppend(0,&X,&D), Y, 0, F, R);}
-cmd ::= insert_cmd(R) INTO nm(X) dbnm(D) inscollist_opt(F) select(S).
- {sqliteInsert(pParse, sqliteSrcListAppend(0,&X,&D), 0, S, F, R);}
-
-%type insert_cmd {int}
-insert_cmd(A) ::= INSERT orconf(R). {A = R;}
-insert_cmd(A) ::= REPLACE. {A = OE_Replace;}
-
-
-%type itemlist {ExprList*}
-%destructor itemlist {sqliteExprListDelete($$);}
-
-itemlist(A) ::= itemlist(X) COMMA expr(Y). {A = sqliteExprListAppend(X,Y,0);}
-itemlist(A) ::= expr(X). {A = sqliteExprListAppend(0,X,0);}
-
-%type inscollist_opt {IdList*}
-%destructor inscollist_opt {sqliteIdListDelete($$);}
-%type inscollist {IdList*}
-%destructor inscollist {sqliteIdListDelete($$);}
-
-inscollist_opt(A) ::= . {A = 0;}
-inscollist_opt(A) ::= LP inscollist(X) RP. {A = X;}
-inscollist(A) ::= inscollist(X) COMMA nm(Y). {A = sqliteIdListAppend(X,&Y);}
-inscollist(A) ::= nm(Y). {A = sqliteIdListAppend(0,&Y);}
-
-/////////////////////////// Expression Processing /////////////////////////////
-//
-
-%type expr {Expr*}
-%destructor expr {sqliteExprDelete($$);}
-
-expr(A) ::= LP(B) expr(X) RP(E). {A = X; sqliteExprSpan(A,&B,&E); }
-expr(A) ::= NULL(X). {A = sqliteExpr(TK_NULL, 0, 0, &X);}
-expr(A) ::= ID(X). {A = sqliteExpr(TK_ID, 0, 0, &X);}
-expr(A) ::= JOIN_KW(X). {A = sqliteExpr(TK_ID, 0, 0, &X);}
-expr(A) ::= nm(X) DOT nm(Y). {
- Expr *temp1 = sqliteExpr(TK_ID, 0, 0, &X);
- Expr *temp2 = sqliteExpr(TK_ID, 0, 0, &Y);
- A = sqliteExpr(TK_DOT, temp1, temp2, 0);
-}
-expr(A) ::= nm(X) DOT nm(Y) DOT nm(Z). {
- Expr *temp1 = sqliteExpr(TK_ID, 0, 0, &X);
- Expr *temp2 = sqliteExpr(TK_ID, 0, 0, &Y);
- Expr *temp3 = sqliteExpr(TK_ID, 0, 0, &Z);
- Expr *temp4 = sqliteExpr(TK_DOT, temp2, temp3, 0);
- A = sqliteExpr(TK_DOT, temp1, temp4, 0);
-}
-expr(A) ::= INTEGER(X). {A = sqliteExpr(TK_INTEGER, 0, 0, &X);}
-expr(A) ::= FLOAT(X). {A = sqliteExpr(TK_FLOAT, 0, 0, &X);}
-expr(A) ::= STRING(X). {A = sqliteExpr(TK_STRING, 0, 0, &X);}
-expr(A) ::= VARIABLE(X). {
- A = sqliteExpr(TK_VARIABLE, 0, 0, &X);
- if( A ) A->iTable = ++pParse->nVar;
-}
-expr(A) ::= ID(X) LP exprlist(Y) RP(E). {
- A = sqliteExprFunction(Y, &X);
- sqliteExprSpan(A,&X,&E);
-}
-expr(A) ::= ID(X) LP STAR RP(E). {
- A = sqliteExprFunction(0, &X);
- sqliteExprSpan(A,&X,&E);
-}
-expr(A) ::= expr(X) AND expr(Y). {A = sqliteExpr(TK_AND, X, Y, 0);}
-expr(A) ::= expr(X) OR expr(Y). {A = sqliteExpr(TK_OR, X, Y, 0);}
-expr(A) ::= expr(X) LT expr(Y). {A = sqliteExpr(TK_LT, X, Y, 0);}
-expr(A) ::= expr(X) GT expr(Y). {A = sqliteExpr(TK_GT, X, Y, 0);}
-expr(A) ::= expr(X) LE expr(Y). {A = sqliteExpr(TK_LE, X, Y, 0);}
-expr(A) ::= expr(X) GE expr(Y). {A = sqliteExpr(TK_GE, X, Y, 0);}
-expr(A) ::= expr(X) NE expr(Y). {A = sqliteExpr(TK_NE, X, Y, 0);}
-expr(A) ::= expr(X) EQ expr(Y). {A = sqliteExpr(TK_EQ, X, Y, 0);}
-expr(A) ::= expr(X) BITAND expr(Y). {A = sqliteExpr(TK_BITAND, X, Y, 0);}
-expr(A) ::= expr(X) BITOR expr(Y). {A = sqliteExpr(TK_BITOR, X, Y, 0);}
-expr(A) ::= expr(X) LSHIFT expr(Y). {A = sqliteExpr(TK_LSHIFT, X, Y, 0);}
-expr(A) ::= expr(X) RSHIFT expr(Y). {A = sqliteExpr(TK_RSHIFT, X, Y, 0);}
-expr(A) ::= expr(X) likeop(OP) expr(Y). [LIKE] {
- ExprList *pList = sqliteExprListAppend(0, Y, 0);
- pList = sqliteExprListAppend(pList, X, 0);
- A = sqliteExprFunction(pList, 0);
- if( A ) A->op = OP;
- sqliteExprSpan(A, &X->span, &Y->span);
-}
-expr(A) ::= expr(X) NOT likeop(OP) expr(Y). [LIKE] {
- ExprList *pList = sqliteExprListAppend(0, Y, 0);
- pList = sqliteExprListAppend(pList, X, 0);
- A = sqliteExprFunction(pList, 0);
- if( A ) A->op = OP;
- A = sqliteExpr(TK_NOT, A, 0, 0);
- sqliteExprSpan(A,&X->span,&Y->span);
-}
-%type likeop {int}
-likeop(A) ::= LIKE. {A = TK_LIKE;}
-likeop(A) ::= GLOB. {A = TK_GLOB;}
-expr(A) ::= expr(X) PLUS expr(Y). {A = sqliteExpr(TK_PLUS, X, Y, 0);}
-expr(A) ::= expr(X) MINUS expr(Y). {A = sqliteExpr(TK_MINUS, X, Y, 0);}
-expr(A) ::= expr(X) STAR expr(Y). {A = sqliteExpr(TK_STAR, X, Y, 0);}
-expr(A) ::= expr(X) SLASH expr(Y). {A = sqliteExpr(TK_SLASH, X, Y, 0);}
-expr(A) ::= expr(X) REM expr(Y). {A = sqliteExpr(TK_REM, X, Y, 0);}
-expr(A) ::= expr(X) CONCAT expr(Y). {A = sqliteExpr(TK_CONCAT, X, Y, 0);}
-expr(A) ::= expr(X) ISNULL(E). {
- A = sqliteExpr(TK_ISNULL, X, 0, 0);
- sqliteExprSpan(A,&X->span,&E);
-}
-expr(A) ::= expr(X) IS NULL(E). {
- A = sqliteExpr(TK_ISNULL, X, 0, 0);
- sqliteExprSpan(A,&X->span,&E);
-}
-expr(A) ::= expr(X) NOTNULL(E). {
- A = sqliteExpr(TK_NOTNULL, X, 0, 0);
- sqliteExprSpan(A,&X->span,&E);
-}
-expr(A) ::= expr(X) NOT NULL(E). {
- A = sqliteExpr(TK_NOTNULL, X, 0, 0);
- sqliteExprSpan(A,&X->span,&E);
-}
-expr(A) ::= expr(X) IS NOT NULL(E). {
- A = sqliteExpr(TK_NOTNULL, X, 0, 0);
- sqliteExprSpan(A,&X->span,&E);
-}
-expr(A) ::= NOT(B) expr(X). {
- A = sqliteExpr(TK_NOT, X, 0, 0);
- sqliteExprSpan(A,&B,&X->span);
-}
-expr(A) ::= BITNOT(B) expr(X). {
- A = sqliteExpr(TK_BITNOT, X, 0, 0);
- sqliteExprSpan(A,&B,&X->span);
-}
-expr(A) ::= MINUS(B) expr(X). [UMINUS] {
- A = sqliteExpr(TK_UMINUS, X, 0, 0);
- sqliteExprSpan(A,&B,&X->span);
-}
-expr(A) ::= PLUS(B) expr(X). [UPLUS] {
- A = sqliteExpr(TK_UPLUS, X, 0, 0);
- sqliteExprSpan(A,&B,&X->span);
-}
-expr(A) ::= LP(B) select(X) RP(E). {
- A = sqliteExpr(TK_SELECT, 0, 0, 0);
- if( A ) A->pSelect = X;
- sqliteExprSpan(A,&B,&E);
-}
-expr(A) ::= expr(W) BETWEEN expr(X) AND expr(Y). {
- ExprList *pList = sqliteExprListAppend(0, X, 0);
- pList = sqliteExprListAppend(pList, Y, 0);
- A = sqliteExpr(TK_BETWEEN, W, 0, 0);
- if( A ) A->pList = pList;
- sqliteExprSpan(A,&W->span,&Y->span);
-}
-expr(A) ::= expr(W) NOT BETWEEN expr(X) AND expr(Y). {
- ExprList *pList = sqliteExprListAppend(0, X, 0);
- pList = sqliteExprListAppend(pList, Y, 0);
- A = sqliteExpr(TK_BETWEEN, W, 0, 0);
- if( A ) A->pList = pList;
- A = sqliteExpr(TK_NOT, A, 0, 0);
- sqliteExprSpan(A,&W->span,&Y->span);
-}
-expr(A) ::= expr(X) IN LP exprlist(Y) RP(E). {
- A = sqliteExpr(TK_IN, X, 0, 0);
- if( A ) A->pList = Y;
- sqliteExprSpan(A,&X->span,&E);
-}
-expr(A) ::= expr(X) IN LP select(Y) RP(E). {
- A = sqliteExpr(TK_IN, X, 0, 0);
- if( A ) A->pSelect = Y;
- sqliteExprSpan(A,&X->span,&E);
-}
-expr(A) ::= expr(X) NOT IN LP exprlist(Y) RP(E). {
- A = sqliteExpr(TK_IN, X, 0, 0);
- if( A ) A->pList = Y;
- A = sqliteExpr(TK_NOT, A, 0, 0);
- sqliteExprSpan(A,&X->span,&E);
-}
-expr(A) ::= expr(X) NOT IN LP select(Y) RP(E). {
- A = sqliteExpr(TK_IN, X, 0, 0);
- if( A ) A->pSelect = Y;
- A = sqliteExpr(TK_NOT, A, 0, 0);
- sqliteExprSpan(A,&X->span,&E);
-}
-expr(A) ::= expr(X) IN nm(Y) dbnm(D). {
- SrcList *pSrc = sqliteSrcListAppend(0, &Y, &D);
- A = sqliteExpr(TK_IN, X, 0, 0);
- if( A ) A->pSelect = sqliteSelectNew(0,pSrc,0,0,0,0,0,-1,0);
- sqliteExprSpan(A,&X->span,D.z?&D:&Y);
-}
-expr(A) ::= expr(X) NOT IN nm(Y) dbnm(D). {
- SrcList *pSrc = sqliteSrcListAppend(0, &Y, &D);
- A = sqliteExpr(TK_IN, X, 0, 0);
- if( A ) A->pSelect = sqliteSelectNew(0,pSrc,0,0,0,0,0,-1,0);
- A = sqliteExpr(TK_NOT, A, 0, 0);
- sqliteExprSpan(A,&X->span,D.z?&D:&Y);
-}
-
-
-/* CASE expressions */
-expr(A) ::= CASE(C) case_operand(X) case_exprlist(Y) case_else(Z) END(E). {
- A = sqliteExpr(TK_CASE, X, Z, 0);
- if( A ) A->pList = Y;
- sqliteExprSpan(A, &C, &E);
-}
-%type case_exprlist {ExprList*}
-%destructor case_exprlist {sqliteExprListDelete($$);}
-case_exprlist(A) ::= case_exprlist(X) WHEN expr(Y) THEN expr(Z). {
- A = sqliteExprListAppend(X, Y, 0);
- A = sqliteExprListAppend(A, Z, 0);
-}
-case_exprlist(A) ::= WHEN expr(Y) THEN expr(Z). {
- A = sqliteExprListAppend(0, Y, 0);
- A = sqliteExprListAppend(A, Z, 0);
-}
-%type case_else {Expr*}
-case_else(A) ::= ELSE expr(X). {A = X;}
-case_else(A) ::= . {A = 0;}
-%type case_operand {Expr*}
-case_operand(A) ::= expr(X). {A = X;}
-case_operand(A) ::= . {A = 0;}
-
-%type exprlist {ExprList*}
-%destructor exprlist {sqliteExprListDelete($$);}
-%type expritem {Expr*}
-%destructor expritem {sqliteExprDelete($$);}
-
-exprlist(A) ::= exprlist(X) COMMA expritem(Y).
- {A = sqliteExprListAppend(X,Y,0);}
-exprlist(A) ::= expritem(X). {A = sqliteExprListAppend(0,X,0);}
-expritem(A) ::= expr(X). {A = X;}
-expritem(A) ::= . {A = 0;}
-
-///////////////////////////// The CREATE INDEX command ///////////////////////
-//
-cmd ::= CREATE(S) uniqueflag(U) INDEX nm(X)
- ON nm(Y) dbnm(D) LP idxlist(Z) RP(E) onconf(R). {
- SrcList *pSrc = sqliteSrcListAppend(0, &Y, &D);
- if( U!=OE_None ) U = R;
- if( U==OE_Default) U = OE_Abort;
- sqliteCreateIndex(pParse, &X, pSrc, Z, U, &S, &E);
-}
-
-%type uniqueflag {int}
-uniqueflag(A) ::= UNIQUE. { A = OE_Abort; }
-uniqueflag(A) ::= . { A = OE_None; }
-
-%type idxlist {IdList*}
-%destructor idxlist {sqliteIdListDelete($$);}
-%type idxlist_opt {IdList*}
-%destructor idxlist_opt {sqliteIdListDelete($$);}
-%type idxitem {Token}
-
-idxlist_opt(A) ::= . {A = 0;}
-idxlist_opt(A) ::= LP idxlist(X) RP. {A = X;}
-idxlist(A) ::= idxlist(X) COMMA idxitem(Y). {A = sqliteIdListAppend(X,&Y);}
-idxlist(A) ::= idxitem(Y). {A = sqliteIdListAppend(0,&Y);}
-idxitem(A) ::= nm(X) sortorder. {A = X;}
-
-///////////////////////////// The DROP INDEX command /////////////////////////
-//
-
-cmd ::= DROP INDEX nm(X) dbnm(Y). {
- sqliteDropIndex(pParse, sqliteSrcListAppend(0,&X,&Y));
-}
-
-
-///////////////////////////// The COPY command ///////////////////////////////
-//
-cmd ::= COPY orconf(R) nm(X) dbnm(D) FROM nm(Y) USING DELIMITERS STRING(Z).
- {sqliteCopy(pParse,sqliteSrcListAppend(0,&X,&D),&Y,&Z,R);}
-cmd ::= COPY orconf(R) nm(X) dbnm(D) FROM nm(Y).
- {sqliteCopy(pParse,sqliteSrcListAppend(0,&X,&D),&Y,0,R);}
-
-///////////////////////////// The VACUUM command /////////////////////////////
-//
-cmd ::= VACUUM. {sqliteVacuum(pParse,0);}
-cmd ::= VACUUM nm(X). {sqliteVacuum(pParse,&X);}
-
-///////////////////////////// The PRAGMA command /////////////////////////////
-//
-cmd ::= PRAGMA ids(X) EQ nm(Y). {sqlitePragma(pParse,&X,&Y,0);}
-cmd ::= PRAGMA ids(X) EQ ON(Y). {sqlitePragma(pParse,&X,&Y,0);}
-cmd ::= PRAGMA ids(X) EQ plus_num(Y). {sqlitePragma(pParse,&X,&Y,0);}
-cmd ::= PRAGMA ids(X) EQ minus_num(Y). {sqlitePragma(pParse,&X,&Y,1);}
-cmd ::= PRAGMA ids(X) LP nm(Y) RP. {sqlitePragma(pParse,&X,&Y,0);}
-cmd ::= PRAGMA ids(X). {sqlitePragma(pParse,&X,&X,0);}
-plus_num(A) ::= plus_opt number(X). {A = X;}
-minus_num(A) ::= MINUS number(X). {A = X;}
-number(A) ::= INTEGER(X). {A = X;}
-number(A) ::= FLOAT(X). {A = X;}
-plus_opt ::= PLUS.
-plus_opt ::= .
-
-//////////////////////////// The CREATE TRIGGER command /////////////////////
-
-cmd ::= CREATE(A) trigger_decl BEGIN trigger_cmd_list(S) END(Z). {
- Token all;
- all.z = A.z;
- all.n = (Z.z - A.z) + Z.n;
- sqliteFinishTrigger(pParse, S, &all);
-}
-
-trigger_decl ::= temp(T) TRIGGER nm(B) trigger_time(C) trigger_event(D)
- ON nm(E) dbnm(DB) foreach_clause(F) when_clause(G). {
- SrcList *pTab = sqliteSrcListAppend(0, &E, &DB);
- sqliteBeginTrigger(pParse, &B, C, D.a, D.b, pTab, F, G, T);
-}
-
-%type trigger_time {int}
-trigger_time(A) ::= BEFORE. { A = TK_BEFORE; }
-trigger_time(A) ::= AFTER. { A = TK_AFTER; }
-trigger_time(A) ::= INSTEAD OF. { A = TK_INSTEAD;}
-trigger_time(A) ::= . { A = TK_BEFORE; }
-
-%type trigger_event {struct TrigEvent}
-%destructor trigger_event {sqliteIdListDelete($$.b);}
-trigger_event(A) ::= DELETE. { A.a = TK_DELETE; A.b = 0; }
-trigger_event(A) ::= INSERT. { A.a = TK_INSERT; A.b = 0; }
-trigger_event(A) ::= UPDATE. { A.a = TK_UPDATE; A.b = 0;}
-trigger_event(A) ::= UPDATE OF inscollist(X). {A.a = TK_UPDATE; A.b = X; }
-
-%type foreach_clause {int}
-foreach_clause(A) ::= . { A = TK_ROW; }
-foreach_clause(A) ::= FOR EACH ROW. { A = TK_ROW; }
-foreach_clause(A) ::= FOR EACH STATEMENT. { A = TK_STATEMENT; }
-
-%type when_clause {Expr *}
-when_clause(A) ::= . { A = 0; }
-when_clause(A) ::= WHEN expr(X). { A = X; }
-
-%type trigger_cmd_list {TriggerStep *}
-%destructor trigger_cmd_list {sqliteDeleteTriggerStep($$);}
-trigger_cmd_list(A) ::= trigger_cmd(X) SEMI trigger_cmd_list(Y). {
- X->pNext = Y;
- A = X;
-}
-trigger_cmd_list(A) ::= . { A = 0; }
-
-%type trigger_cmd {TriggerStep *}
-%destructor trigger_cmd {sqliteDeleteTriggerStep($$);}
-// UPDATE
-trigger_cmd(A) ::= UPDATE orconf(R) nm(X) SET setlist(Y) where_opt(Z).
- { A = sqliteTriggerUpdateStep(&X, Y, Z, R); }
-
-// INSERT
-trigger_cmd(A) ::= insert_cmd(R) INTO nm(X) inscollist_opt(F)
- VALUES LP itemlist(Y) RP.
-{A = sqliteTriggerInsertStep(&X, F, Y, 0, R);}
-
-trigger_cmd(A) ::= insert_cmd(R) INTO nm(X) inscollist_opt(F) select(S).
- {A = sqliteTriggerInsertStep(&X, F, 0, S, R);}
-
-// DELETE
-trigger_cmd(A) ::= DELETE FROM nm(X) where_opt(Y).
- {A = sqliteTriggerDeleteStep(&X, Y);}
-
-// SELECT
-trigger_cmd(A) ::= select(X). {A = sqliteTriggerSelectStep(X); }
-
-// The special RAISE expression that may occur in trigger programs
-expr(A) ::= RAISE(X) LP IGNORE RP(Y). {
- A = sqliteExpr(TK_RAISE, 0, 0, 0);
- A->iColumn = OE_Ignore;
- sqliteExprSpan(A, &X, &Y);
-}
-expr(A) ::= RAISE(X) LP ROLLBACK COMMA nm(Z) RP(Y). {
- A = sqliteExpr(TK_RAISE, 0, 0, &Z);
- A->iColumn = OE_Rollback;
- sqliteExprSpan(A, &X, &Y);
-}
-expr(A) ::= RAISE(X) LP ABORT COMMA nm(Z) RP(Y). {
- A = sqliteExpr(TK_RAISE, 0, 0, &Z);
- A->iColumn = OE_Abort;
- sqliteExprSpan(A, &X, &Y);
-}
-expr(A) ::= RAISE(X) LP FAIL COMMA nm(Z) RP(Y). {
- A = sqliteExpr(TK_RAISE, 0, 0, &Z);
- A->iColumn = OE_Fail;
- sqliteExprSpan(A, &X, &Y);
-}
-
-//////////////////////// DROP TRIGGER statement //////////////////////////////
-cmd ::= DROP TRIGGER nm(X) dbnm(D). {
- sqliteDropTrigger(pParse,sqliteSrcListAppend(0,&X,&D));
-}
-
-//////////////////////// ATTACH DATABASE file AS name /////////////////////////
-cmd ::= ATTACH database_kw_opt ids(F) AS nm(D) key_opt(K). {
- sqliteAttach(pParse, &F, &D, &K);
-}
-%type key_opt {Token}
-key_opt(A) ::= USING ids(X). { A = X; }
-key_opt(A) ::= . { A.z = 0; A.n = 0; }
-
-database_kw_opt ::= DATABASE.
-database_kw_opt ::= .
-
-//////////////////////// DETACH DATABASE name /////////////////////////////////
-cmd ::= DETACH database_kw_opt nm(D). {
- sqliteDetach(pParse, &D);
-}
diff --git a/ext/sqlite/libsqlite/src/pragma.c b/ext/sqlite/libsqlite/src/pragma.c
deleted file mode 100644
index 965dbb9da6..0000000000
--- a/ext/sqlite/libsqlite/src/pragma.c
+++ /dev/null
@@ -1,712 +0,0 @@
-/*
-** 2003 April 6
-**
-** The author disclaims copyright to this source code. In place of
-** a legal notice, here is a blessing:
-**
-** May you do good and not evil.
-** May you find forgiveness for yourself and forgive others.
-** May you share freely, never taking more than you give.
-**
-*************************************************************************
-** This file contains code used to implement the PRAGMA command.
-**
-** $Id$
-*/
-#include "sqliteInt.h"
-#include <ctype.h>
-
-/*
-** Interpret the given string as a boolean value.
-*/
-static int getBoolean(const char *z){
- static char *azTrue[] = { "yes", "on", "true" };
- int i;
- if( z[0]==0 ) return 0;
- if( isdigit(z[0]) || (z[0]=='-' && isdigit(z[1])) ){
- return atoi(z);
- }
- for(i=0; i<sizeof(azTrue)/sizeof(azTrue[0]); i++){
- if( sqliteStrICmp(z,azTrue[i])==0 ) return 1;
- }
- return 0;
-}
-
-/*
-** Interpret the given string as a safety level. Return 0 for OFF,
-** 1 for ON or NORMAL and 2 for FULL. Return 1 for an empty or
-** unrecognized string argument.
-**
-** Note that the values returned are one less that the values that
-** should be passed into sqliteBtreeSetSafetyLevel(). The is done
-** to support legacy SQL code. The safety level used to be boolean
-** and older scripts may have used numbers 0 for OFF and 1 for ON.
-*/
-static int getSafetyLevel(char *z){
- static const struct {
- const char *zWord;
- int val;
- } aKey[] = {
- { "no", 0 },
- { "off", 0 },
- { "false", 0 },
- { "yes", 1 },
- { "on", 1 },
- { "true", 1 },
- { "full", 2 },
- };
- int i;
- if( z[0]==0 ) return 1;
- if( isdigit(z[0]) || (z[0]=='-' && isdigit(z[1])) ){
- return atoi(z);
- }
- for(i=0; i<sizeof(aKey)/sizeof(aKey[0]); i++){
- if( sqliteStrICmp(z,aKey[i].zWord)==0 ) return aKey[i].val;
- }
- return 1;
-}
-
-/*
-** Interpret the given string as a temp db location. Return 1 for file
-** backed temporary databases, 2 for the Red-Black tree in memory database
-** and 0 to use the compile-time default.
-*/
-static int getTempStore(const char *z){
- if( z[0]>='0' && z[0]<='2' ){
- return z[0] - '0';
- }else if( sqliteStrICmp(z, "file")==0 ){
- return 1;
- }else if( sqliteStrICmp(z, "memory")==0 ){
- return 2;
- }else{
- return 0;
- }
-}
-
-/*
-** If the TEMP database is open, close it and mark the database schema
-** as needing reloading. This must be done when using the TEMP_STORE
-** or DEFAULT_TEMP_STORE pragmas.
-*/
-static int changeTempStorage(Parse *pParse, const char *zStorageType){
- int ts = getTempStore(zStorageType);
- sqlite *db = pParse->db;
- if( db->temp_store==ts ) return SQLITE_OK;
- if( db->aDb[1].pBt!=0 ){
- if( db->flags & SQLITE_InTrans ){
- sqliteErrorMsg(pParse, "temporary storage cannot be changed "
- "from within a transaction");
- return SQLITE_ERROR;
- }
- sqliteBtreeClose(db->aDb[1].pBt);
- db->aDb[1].pBt = 0;
- sqliteResetInternalSchema(db, 0);
- }
- db->temp_store = ts;
- return SQLITE_OK;
-}
-
-/*
-** Check to see if zRight and zLeft refer to a pragma that queries
-** or changes one of the flags in db->flags. Return 1 if so and 0 if not.
-** Also, implement the pragma.
-*/
-static int flagPragma(Parse *pParse, const char *zLeft, const char *zRight){
- static const struct {
- const char *zName; /* Name of the pragma */
- int mask; /* Mask for the db->flags value */
- } aPragma[] = {
- { "vdbe_trace", SQLITE_VdbeTrace },
- { "full_column_names", SQLITE_FullColNames },
- { "short_column_names", SQLITE_ShortColNames },
- { "show_datatypes", SQLITE_ReportTypes },
- { "count_changes", SQLITE_CountRows },
- { "empty_result_callbacks", SQLITE_NullCallback },
- };
- int i;
- for(i=0; i<sizeof(aPragma)/sizeof(aPragma[0]); i++){
- if( sqliteStrICmp(zLeft, aPragma[i].zName)==0 ){
- sqlite *db = pParse->db;
- Vdbe *v;
- if( strcmp(zLeft,zRight)==0 && (v = sqliteGetVdbe(pParse))!=0 ){
- sqliteVdbeOp3(v, OP_ColumnName, 0, 1, aPragma[i].zName, P3_STATIC);
- sqliteVdbeOp3(v, OP_ColumnName, 1, 0, "boolean", P3_STATIC);
- sqliteVdbeCode(v, OP_Integer, (db->flags & aPragma[i].mask)!=0, 0,
- OP_Callback, 1, 0,
- 0);
- }else if( getBoolean(zRight) ){
- db->flags |= aPragma[i].mask;
- }else{
- db->flags &= ~aPragma[i].mask;
- }
- return 1;
- }
- }
- return 0;
-}
-
-/*
-** Process a pragma statement.
-**
-** Pragmas are of this form:
-**
-** PRAGMA id = value
-**
-** The identifier might also be a string. The value is a string, and
-** identifier, or a number. If minusFlag is true, then the value is
-** a number that was preceded by a minus sign.
-*/
-void sqlitePragma(Parse *pParse, Token *pLeft, Token *pRight, int minusFlag){
- char *zLeft = 0;
- char *zRight = 0;
- sqlite *db = pParse->db;
- Vdbe *v = sqliteGetVdbe(pParse);
- if( v==0 ) return;
-
- zLeft = sqliteStrNDup(pLeft->z, pLeft->n);
- sqliteDequote(zLeft);
- if( minusFlag ){
- zRight = 0;
- sqliteSetNString(&zRight, "-", 1, pRight->z, pRight->n, 0);
- }else{
- zRight = sqliteStrNDup(pRight->z, pRight->n);
- sqliteDequote(zRight);
- }
- if( sqliteAuthCheck(pParse, SQLITE_PRAGMA, zLeft, zRight, 0) ){
- sqliteFree(zLeft);
- sqliteFree(zRight);
- return;
- }
-
- /*
- ** PRAGMA default_cache_size
- ** PRAGMA default_cache_size=N
- **
- ** The first form reports the current persistent setting for the
- ** page cache size. The value returned is the maximum number of
- ** pages in the page cache. The second form sets both the current
- ** page cache size value and the persistent page cache size value
- ** stored in the database file.
- **
- ** The default cache size is stored in meta-value 2 of page 1 of the
- ** database file. The cache size is actually the absolute value of
- ** this memory location. The sign of meta-value 2 determines the
- ** synchronous setting. A negative value means synchronous is off
- ** and a positive value means synchronous is on.
- */
- if( sqliteStrICmp(zLeft,"default_cache_size")==0 ){
- static VdbeOpList getCacheSize[] = {
- { OP_ReadCookie, 0, 2, 0},
- { OP_AbsValue, 0, 0, 0},
- { OP_Dup, 0, 0, 0},
- { OP_Integer, 0, 0, 0},
- { OP_Ne, 0, 6, 0},
- { OP_Integer, 0, 0, 0}, /* 5 */
- { OP_ColumnName, 0, 1, "cache_size"},
- { OP_Callback, 1, 0, 0},
- };
- int addr;
- if( pRight->z==pLeft->z ){
- addr = sqliteVdbeAddOpList(v, ArraySize(getCacheSize), getCacheSize);
- sqliteVdbeChangeP1(v, addr+5, MAX_PAGES);
- }else{
- int size = atoi(zRight);
- if( size<0 ) size = -size;
- sqliteBeginWriteOperation(pParse, 0, 0);
- sqliteVdbeAddOp(v, OP_Integer, size, 0);
- sqliteVdbeAddOp(v, OP_ReadCookie, 0, 2);
- addr = sqliteVdbeAddOp(v, OP_Integer, 0, 0);
- sqliteVdbeAddOp(v, OP_Ge, 0, addr+3);
- sqliteVdbeAddOp(v, OP_Negative, 0, 0);
- sqliteVdbeAddOp(v, OP_SetCookie, 0, 2);
- sqliteEndWriteOperation(pParse);
- db->cache_size = db->cache_size<0 ? -size : size;
- sqliteBtreeSetCacheSize(db->aDb[0].pBt, db->cache_size);
- }
- }else
-
- /*
- ** PRAGMA cache_size
- ** PRAGMA cache_size=N
- **
- ** The first form reports the current local setting for the
- ** page cache size. The local setting can be different from
- ** the persistent cache size value that is stored in the database
- ** file itself. The value returned is the maximum number of
- ** pages in the page cache. The second form sets the local
- ** page cache size value. It does not change the persistent
- ** cache size stored on the disk so the cache size will revert
- ** to its default value when the database is closed and reopened.
- ** N should be a positive integer.
- */
- if( sqliteStrICmp(zLeft,"cache_size")==0 ){
- static VdbeOpList getCacheSize[] = {
- { OP_ColumnName, 0, 1, "cache_size"},
- { OP_Callback, 1, 0, 0},
- };
- if( pRight->z==pLeft->z ){
- int size = db->cache_size;;
- if( size<0 ) size = -size;
- sqliteVdbeAddOp(v, OP_Integer, size, 0);
- sqliteVdbeAddOpList(v, ArraySize(getCacheSize), getCacheSize);
- }else{
- int size = atoi(zRight);
- if( size<0 ) size = -size;
- if( db->cache_size<0 ) size = -size;
- db->cache_size = size;
- sqliteBtreeSetCacheSize(db->aDb[0].pBt, db->cache_size);
- }
- }else
-
- /*
- ** PRAGMA default_synchronous
- ** PRAGMA default_synchronous=ON|OFF|NORMAL|FULL
- **
- ** The first form returns the persistent value of the "synchronous" setting
- ** that is stored in the database. This is the synchronous setting that
- ** is used whenever the database is opened unless overridden by a separate
- ** "synchronous" pragma. The second form changes the persistent and the
- ** local synchronous setting to the value given.
- **
- ** If synchronous is OFF, SQLite does not attempt any fsync() systems calls
- ** to make sure data is committed to disk. Write operations are very fast,
- ** but a power failure can leave the database in an inconsistent state.
- ** If synchronous is ON or NORMAL, SQLite will do an fsync() system call to
- ** make sure data is being written to disk. The risk of corruption due to
- ** a power loss in this mode is negligible but non-zero. If synchronous
- ** is FULL, extra fsync()s occur to reduce the risk of corruption to near
- ** zero, but with a write performance penalty. The default mode is NORMAL.
- */
- if( sqliteStrICmp(zLeft,"default_synchronous")==0 ){
- static VdbeOpList getSync[] = {
- { OP_ColumnName, 0, 1, "synchronous"},
- { OP_ReadCookie, 0, 3, 0},
- { OP_Dup, 0, 0, 0},
- { OP_If, 0, 0, 0}, /* 3 */
- { OP_ReadCookie, 0, 2, 0},
- { OP_Integer, 0, 0, 0},
- { OP_Lt, 0, 5, 0},
- { OP_AddImm, 1, 0, 0},
- { OP_Callback, 1, 0, 0},
- { OP_Halt, 0, 0, 0},
- { OP_AddImm, -1, 0, 0}, /* 10 */
- { OP_Callback, 1, 0, 0}
- };
- if( pRight->z==pLeft->z ){
- int addr = sqliteVdbeAddOpList(v, ArraySize(getSync), getSync);
- sqliteVdbeChangeP2(v, addr+3, addr+10);
- }else{
- int addr;
- int size = db->cache_size;
- if( size<0 ) size = -size;
- sqliteBeginWriteOperation(pParse, 0, 0);
- sqliteVdbeAddOp(v, OP_ReadCookie, 0, 2);
- sqliteVdbeAddOp(v, OP_Dup, 0, 0);
- addr = sqliteVdbeAddOp(v, OP_Integer, 0, 0);
- sqliteVdbeAddOp(v, OP_Ne, 0, addr+3);
- sqliteVdbeAddOp(v, OP_AddImm, MAX_PAGES, 0);
- sqliteVdbeAddOp(v, OP_AbsValue, 0, 0);
- db->safety_level = getSafetyLevel(zRight)+1;
- if( db->safety_level==1 ){
- sqliteVdbeAddOp(v, OP_Negative, 0, 0);
- size = -size;
- }
- sqliteVdbeAddOp(v, OP_SetCookie, 0, 2);
- sqliteVdbeAddOp(v, OP_Integer, db->safety_level, 0);
- sqliteVdbeAddOp(v, OP_SetCookie, 0, 3);
- sqliteEndWriteOperation(pParse);
- db->cache_size = size;
- sqliteBtreeSetCacheSize(db->aDb[0].pBt, db->cache_size);
- sqliteBtreeSetSafetyLevel(db->aDb[0].pBt, db->safety_level);
- }
- }else
-
- /*
- ** PRAGMA synchronous
- ** PRAGMA synchronous=OFF|ON|NORMAL|FULL
- **
- ** Return or set the local value of the synchronous flag. Changing
- ** the local value does not make changes to the disk file and the
- ** default value will be restored the next time the database is
- ** opened.
- */
- if( sqliteStrICmp(zLeft,"synchronous")==0 ){
- static VdbeOpList getSync[] = {
- { OP_ColumnName, 0, 1, "synchronous"},
- { OP_Callback, 1, 0, 0},
- };
- if( pRight->z==pLeft->z ){
- sqliteVdbeAddOp(v, OP_Integer, db->safety_level-1, 0);
- sqliteVdbeAddOpList(v, ArraySize(getSync), getSync);
- }else{
- int size = db->cache_size;
- if( size<0 ) size = -size;
- db->safety_level = getSafetyLevel(zRight)+1;
- if( db->safety_level==1 ) size = -size;
- db->cache_size = size;
- sqliteBtreeSetCacheSize(db->aDb[0].pBt, db->cache_size);
- sqliteBtreeSetSafetyLevel(db->aDb[0].pBt, db->safety_level);
- }
- }else
-
-#ifndef NDEBUG
- if( sqliteStrICmp(zLeft, "trigger_overhead_test")==0 ){
- if( getBoolean(zRight) ){
- always_code_trigger_setup = 1;
- }else{
- always_code_trigger_setup = 0;
- }
- }else
-#endif
-
- if( flagPragma(pParse, zLeft, zRight) ){
- /* The flagPragma() call also generates any necessary code */
- }else
-
- if( sqliteStrICmp(zLeft, "table_info")==0 ){
- Table *pTab;
- pTab = sqliteFindTable(db, zRight, 0);
- if( pTab ){
- static VdbeOpList tableInfoPreface[] = {
- { OP_ColumnName, 0, 0, "cid"},
- { OP_ColumnName, 1, 0, "name"},
- { OP_ColumnName, 2, 0, "type"},
- { OP_ColumnName, 3, 0, "notnull"},
- { OP_ColumnName, 4, 0, "dflt_value"},
- { OP_ColumnName, 5, 1, "pk"},
- };
- int i;
- sqliteVdbeAddOpList(v, ArraySize(tableInfoPreface), tableInfoPreface);
- sqliteViewGetColumnNames(pParse, pTab);
- for(i=0; i<pTab->nCol; i++){
- sqliteVdbeAddOp(v, OP_Integer, i, 0);
- sqliteVdbeOp3(v, OP_String, 0, 0, pTab->aCol[i].zName, 0);
- sqliteVdbeOp3(v, OP_String, 0, 0,
- pTab->aCol[i].zType ? pTab->aCol[i].zType : "numeric", 0);
- sqliteVdbeAddOp(v, OP_Integer, pTab->aCol[i].notNull, 0);
- sqliteVdbeOp3(v, OP_String, 0, 0,
- pTab->aCol[i].zDflt, P3_STATIC);
- sqliteVdbeAddOp(v, OP_Integer, pTab->aCol[i].isPrimKey, 0);
- sqliteVdbeAddOp(v, OP_Callback, 6, 0);
- }
- }
- }else
-
- if( sqliteStrICmp(zLeft, "index_info")==0 ){
- Index *pIdx;
- Table *pTab;
- pIdx = sqliteFindIndex(db, zRight, 0);
- if( pIdx ){
- static VdbeOpList tableInfoPreface[] = {
- { OP_ColumnName, 0, 0, "seqno"},
- { OP_ColumnName, 1, 0, "cid"},
- { OP_ColumnName, 2, 1, "name"},
- };
- int i;
- pTab = pIdx->pTable;
- sqliteVdbeAddOpList(v, ArraySize(tableInfoPreface), tableInfoPreface);
- for(i=0; i<pIdx->nColumn; i++){
- int cnum = pIdx->aiColumn[i];
- sqliteVdbeAddOp(v, OP_Integer, i, 0);
- sqliteVdbeAddOp(v, OP_Integer, cnum, 0);
- assert( pTab->nCol>cnum );
- sqliteVdbeOp3(v, OP_String, 0, 0, pTab->aCol[cnum].zName, 0);
- sqliteVdbeAddOp(v, OP_Callback, 3, 0);
- }
- }
- }else
-
- if( sqliteStrICmp(zLeft, "index_list")==0 ){
- Index *pIdx;
- Table *pTab;
- pTab = sqliteFindTable(db, zRight, 0);
- if( pTab ){
- v = sqliteGetVdbe(pParse);
- pIdx = pTab->pIndex;
- }
- if( pTab && pIdx ){
- int i = 0;
- static VdbeOpList indexListPreface[] = {
- { OP_ColumnName, 0, 0, "seq"},
- { OP_ColumnName, 1, 0, "name"},
- { OP_ColumnName, 2, 1, "unique"},
- };
-
- sqliteVdbeAddOpList(v, ArraySize(indexListPreface), indexListPreface);
- while(pIdx){
- sqliteVdbeAddOp(v, OP_Integer, i, 0);
- sqliteVdbeOp3(v, OP_String, 0, 0, pIdx->zName, 0);
- sqliteVdbeAddOp(v, OP_Integer, pIdx->onError!=OE_None, 0);
- sqliteVdbeAddOp(v, OP_Callback, 3, 0);
- ++i;
- pIdx = pIdx->pNext;
- }
- }
- }else
-
- if( sqliteStrICmp(zLeft, "foreign_key_list")==0 ){
- FKey *pFK;
- Table *pTab;
- pTab = sqliteFindTable(db, zRight, 0);
- if( pTab ){
- v = sqliteGetVdbe(pParse);
- pFK = pTab->pFKey;
- }
- if( pTab && pFK ){
- int i = 0;
- static VdbeOpList indexListPreface[] = {
- { OP_ColumnName, 0, 0, "id"},
- { OP_ColumnName, 1, 0, "seq"},
- { OP_ColumnName, 2, 0, "table"},
- { OP_ColumnName, 3, 0, "from"},
- { OP_ColumnName, 4, 1, "to"},
- };
-
- sqliteVdbeAddOpList(v, ArraySize(indexListPreface), indexListPreface);
- while(pFK){
- int j;
- for(j=0; j<pFK->nCol; j++){
- sqliteVdbeAddOp(v, OP_Integer, i, 0);
- sqliteVdbeAddOp(v, OP_Integer, j, 0);
- sqliteVdbeOp3(v, OP_String, 0, 0, pFK->zTo, 0);
- sqliteVdbeOp3(v, OP_String, 0, 0,
- pTab->aCol[pFK->aCol[j].iFrom].zName, 0);
- sqliteVdbeOp3(v, OP_String, 0, 0, pFK->aCol[j].zCol, 0);
- sqliteVdbeAddOp(v, OP_Callback, 5, 0);
- }
- ++i;
- pFK = pFK->pNextFrom;
- }
- }
- }else
-
- if( sqliteStrICmp(zLeft, "database_list")==0 ){
- int i;
- static VdbeOpList indexListPreface[] = {
- { OP_ColumnName, 0, 0, "seq"},
- { OP_ColumnName, 1, 0, "name"},
- { OP_ColumnName, 2, 1, "file"},
- };
-
- sqliteVdbeAddOpList(v, ArraySize(indexListPreface), indexListPreface);
- for(i=0; i<db->nDb; i++){
- if( db->aDb[i].pBt==0 ) continue;
- assert( db->aDb[i].zName!=0 );
- sqliteVdbeAddOp(v, OP_Integer, i, 0);
- sqliteVdbeOp3(v, OP_String, 0, 0, db->aDb[i].zName, 0);
- sqliteVdbeOp3(v, OP_String, 0, 0,
- sqliteBtreeGetFilename(db->aDb[i].pBt), 0);
- sqliteVdbeAddOp(v, OP_Callback, 3, 0);
- }
- }else
-
-
- /*
- ** PRAGMA temp_store
- ** PRAGMA temp_store = "default"|"memory"|"file"
- **
- ** Return or set the local value of the temp_store flag. Changing
- ** the local value does not make changes to the disk file and the default
- ** value will be restored the next time the database is opened.
- **
- ** Note that it is possible for the library compile-time options to
- ** override this setting
- */
- if( sqliteStrICmp(zLeft, "temp_store")==0 ){
- static VdbeOpList getTmpDbLoc[] = {
- { OP_ColumnName, 0, 1, "temp_store"},
- { OP_Callback, 1, 0, 0},
- };
- if( pRight->z==pLeft->z ){
- sqliteVdbeAddOp(v, OP_Integer, db->temp_store, 0);
- sqliteVdbeAddOpList(v, ArraySize(getTmpDbLoc), getTmpDbLoc);
- }else{
- changeTempStorage(pParse, zRight);
- }
- }else
-
- /*
- ** PRAGMA default_temp_store
- ** PRAGMA default_temp_store = "default"|"memory"|"file"
- **
- ** Return or set the value of the persistent temp_store flag. Any
- ** change does not take effect until the next time the database is
- ** opened.
- **
- ** Note that it is possible for the library compile-time options to
- ** override this setting
- */
- if( sqliteStrICmp(zLeft, "default_temp_store")==0 ){
- static VdbeOpList getTmpDbLoc[] = {
- { OP_ColumnName, 0, 1, "temp_store"},
- { OP_ReadCookie, 0, 5, 0},
- { OP_Callback, 1, 0, 0}};
- if( pRight->z==pLeft->z ){
- sqliteVdbeAddOpList(v, ArraySize(getTmpDbLoc), getTmpDbLoc);
- }else{
- sqliteBeginWriteOperation(pParse, 0, 0);
- sqliteVdbeAddOp(v, OP_Integer, getTempStore(zRight), 0);
- sqliteVdbeAddOp(v, OP_SetCookie, 0, 5);
- sqliteEndWriteOperation(pParse);
- }
- }else
-
-#ifndef NDEBUG
- if( sqliteStrICmp(zLeft, "parser_trace")==0 ){
- extern void sqliteParserTrace(FILE*, char *);
- if( getBoolean(zRight) ){
- sqliteParserTrace(stdout, "parser: ");
- }else{
- sqliteParserTrace(0, 0);
- }
- }else
-#endif
-
- if( sqliteStrICmp(zLeft, "integrity_check")==0 ){
- int i, j, addr;
-
- /* Code that initializes the integrity check program. Set the
- ** error count 0
- */
- static VdbeOpList initCode[] = {
- { OP_Integer, 0, 0, 0},
- { OP_MemStore, 0, 1, 0},
- { OP_ColumnName, 0, 1, "integrity_check"},
- };
-
- /* Code to do an BTree integrity check on a single database file.
- */
- static VdbeOpList checkDb[] = {
- { OP_SetInsert, 0, 0, "2"},
- { OP_Integer, 0, 0, 0}, /* 1 */
- { OP_OpenRead, 0, 2, 0},
- { OP_Rewind, 0, 7, 0}, /* 3 */
- { OP_Column, 0, 3, 0}, /* 4 */
- { OP_SetInsert, 0, 0, 0},
- { OP_Next, 0, 4, 0}, /* 6 */
- { OP_IntegrityCk, 0, 0, 0}, /* 7 */
- { OP_Dup, 0, 1, 0},
- { OP_String, 0, 0, "ok"},
- { OP_StrEq, 0, 12, 0}, /* 10 */
- { OP_MemIncr, 0, 0, 0},
- { OP_String, 0, 0, "*** in database "},
- { OP_String, 0, 0, 0}, /* 13 */
- { OP_String, 0, 0, " ***\n"},
- { OP_Pull, 3, 0, 0},
- { OP_Concat, 4, 1, 0},
- { OP_Callback, 1, 0, 0},
- };
-
- /* Code that appears at the end of the integrity check. If no error
- ** messages have been generated, output OK. Otherwise output the
- ** error message
- */
- static VdbeOpList endCode[] = {
- { OP_MemLoad, 0, 0, 0},
- { OP_Integer, 0, 0, 0},
- { OP_Ne, 0, 0, 0}, /* 2 */
- { OP_String, 0, 0, "ok"},
- { OP_Callback, 1, 0, 0},
- };
-
- /* Initialize the VDBE program */
- sqliteVdbeAddOpList(v, ArraySize(initCode), initCode);
-
- /* Do an integrity check on each database file */
- for(i=0; i<db->nDb; i++){
- HashElem *x;
-
- /* Do an integrity check of the B-Tree
- */
- addr = sqliteVdbeAddOpList(v, ArraySize(checkDb), checkDb);
- sqliteVdbeChangeP1(v, addr+1, i);
- sqliteVdbeChangeP2(v, addr+3, addr+7);
- sqliteVdbeChangeP2(v, addr+6, addr+4);
- sqliteVdbeChangeP2(v, addr+7, i);
- sqliteVdbeChangeP2(v, addr+10, addr+ArraySize(checkDb));
- sqliteVdbeChangeP3(v, addr+13, db->aDb[i].zName, P3_STATIC);
-
- /* Make sure all the indices are constructed correctly.
- */
- sqliteCodeVerifySchema(pParse, i);
- for(x=sqliteHashFirst(&db->aDb[i].tblHash); x; x=sqliteHashNext(x)){
- Table *pTab = sqliteHashData(x);
- Index *pIdx;
- int loopTop;
-
- if( pTab->pIndex==0 ) continue;
- sqliteVdbeAddOp(v, OP_Integer, i, 0);
- sqliteVdbeOp3(v, OP_OpenRead, 1, pTab->tnum, pTab->zName, 0);
- for(j=0, pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext, j++){
- if( pIdx->tnum==0 ) continue;
- sqliteVdbeAddOp(v, OP_Integer, pIdx->iDb, 0);
- sqliteVdbeOp3(v, OP_OpenRead, j+2, pIdx->tnum, pIdx->zName, 0);
- }
- sqliteVdbeAddOp(v, OP_Integer, 0, 0);
- sqliteVdbeAddOp(v, OP_MemStore, 1, 1);
- loopTop = sqliteVdbeAddOp(v, OP_Rewind, 1, 0);
- sqliteVdbeAddOp(v, OP_MemIncr, 1, 0);
- for(j=0, pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext, j++){
- int k, jmp2;
- static VdbeOpList idxErr[] = {
- { OP_MemIncr, 0, 0, 0},
- { OP_String, 0, 0, "rowid "},
- { OP_Recno, 1, 0, 0},
- { OP_String, 0, 0, " missing from index "},
- { OP_String, 0, 0, 0}, /* 4 */
- { OP_Concat, 4, 0, 0},
- { OP_Callback, 1, 0, 0},
- };
- sqliteVdbeAddOp(v, OP_Recno, 1, 0);
- for(k=0; k<pIdx->nColumn; k++){
- int idx = pIdx->aiColumn[k];
- if( idx==pTab->iPKey ){
- sqliteVdbeAddOp(v, OP_Recno, 1, 0);
- }else{
- sqliteVdbeAddOp(v, OP_Column, 1, idx);
- }
- }
- sqliteVdbeAddOp(v, OP_MakeIdxKey, pIdx->nColumn, 0);
- if( db->file_format>=4 ) sqliteAddIdxKeyType(v, pIdx);
- jmp2 = sqliteVdbeAddOp(v, OP_Found, j+2, 0);
- addr = sqliteVdbeAddOpList(v, ArraySize(idxErr), idxErr);
- sqliteVdbeChangeP3(v, addr+4, pIdx->zName, P3_STATIC);
- sqliteVdbeChangeP2(v, jmp2, sqliteVdbeCurrentAddr(v));
- }
- sqliteVdbeAddOp(v, OP_Next, 1, loopTop+1);
- sqliteVdbeChangeP2(v, loopTop, sqliteVdbeCurrentAddr(v));
- for(j=0, pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext, j++){
- static VdbeOpList cntIdx[] = {
- { OP_Integer, 0, 0, 0},
- { OP_MemStore, 2, 1, 0},
- { OP_Rewind, 0, 0, 0}, /* 2 */
- { OP_MemIncr, 2, 0, 0},
- { OP_Next, 0, 0, 0}, /* 4 */
- { OP_MemLoad, 1, 0, 0},
- { OP_MemLoad, 2, 0, 0},
- { OP_Eq, 0, 0, 0}, /* 7 */
- { OP_MemIncr, 0, 0, 0},
- { OP_String, 0, 0, "wrong # of entries in index "},
- { OP_String, 0, 0, 0}, /* 10 */
- { OP_Concat, 2, 0, 0},
- { OP_Callback, 1, 0, 0},
- };
- if( pIdx->tnum==0 ) continue;
- addr = sqliteVdbeAddOpList(v, ArraySize(cntIdx), cntIdx);
- sqliteVdbeChangeP1(v, addr+2, j+2);
- sqliteVdbeChangeP2(v, addr+2, addr+5);
- sqliteVdbeChangeP1(v, addr+4, j+2);
- sqliteVdbeChangeP2(v, addr+4, addr+3);
- sqliteVdbeChangeP2(v, addr+7, addr+ArraySize(cntIdx));
- sqliteVdbeChangeP3(v, addr+10, pIdx->zName, P3_STATIC);
- }
- }
- }
- addr = sqliteVdbeAddOpList(v, ArraySize(endCode), endCode);
- sqliteVdbeChangeP2(v, addr+2, addr+ArraySize(endCode));
- }else
-
- {}
- sqliteFree(zLeft);
- sqliteFree(zRight);
-}
diff --git a/ext/sqlite/libsqlite/src/printf.c b/ext/sqlite/libsqlite/src/printf.c
deleted file mode 100644
index 620578d76e..0000000000
--- a/ext/sqlite/libsqlite/src/printf.c
+++ /dev/null
@@ -1,855 +0,0 @@
-/*
-** The "printf" code that follows dates from the 1980's. It is in
-** the public domain. The original comments are included here for
-** completeness. They are very out-of-date but might be useful as
-** an historical reference. Most of the "enhancements" have been backed
-** out so that the functionality is now the same as standard printf().
-**
-**************************************************************************
-**
-** The following modules is an enhanced replacement for the "printf" subroutines
-** found in the standard C library. The following enhancements are
-** supported:
-**
-** + Additional functions. The standard set of "printf" functions
-** includes printf, fprintf, sprintf, vprintf, vfprintf, and
-** vsprintf. This module adds the following:
-**
-** * snprintf -- Works like sprintf, but has an extra argument
-** which is the size of the buffer written to.
-**
-** * mprintf -- Similar to sprintf. Writes output to memory
-** obtained from malloc.
-**
-** * xprintf -- Calls a function to dispose of output.
-**
-** * nprintf -- No output, but returns the number of characters
-** that would have been output by printf.
-**
-** * A v- version (ex: vsnprintf) of every function is also
-** supplied.
-**
-** + A few extensions to the formatting notation are supported:
-**
-** * The "=" flag (similar to "-") causes the output to be
-** be centered in the appropriately sized field.
-**
-** * The %b field outputs an integer in binary notation.
-**
-** * The %c field now accepts a precision. The character output
-** is repeated by the number of times the precision specifies.
-**
-** * The %' field works like %c, but takes as its character the
-** next character of the format string, instead of the next
-** argument. For example, printf("%.78'-") prints 78 minus
-** signs, the same as printf("%.78c",'-').
-**
-** + When compiled using GCC on a SPARC, this version of printf is
-** faster than the library printf for SUN OS 4.1.
-**
-** + All functions are fully reentrant.
-**
-*/
-#include "sqliteInt.h"
-
-/*
-** Conversion types fall into various categories as defined by the
-** following enumeration.
-*/
-#define etRADIX 1 /* Integer types. %d, %x, %o, and so forth */
-#define etFLOAT 2 /* Floating point. %f */
-#define etEXP 3 /* Exponentional notation. %e and %E */
-#define etGENERIC 4 /* Floating or exponential, depending on exponent. %g */
-#define etSIZE 5 /* Return number of characters processed so far. %n */
-#define etSTRING 6 /* Strings. %s */
-#define etDYNSTRING 7 /* Dynamically allocated strings. %z */
-#define etPERCENT 8 /* Percent symbol. %% */
-#define etCHARX 9 /* Characters. %c */
-#define etERROR 10 /* Used to indicate no such conversion type */
-/* The rest are extensions, not normally found in printf() */
-#define etCHARLIT 11 /* Literal characters. %' */
-#define etSQLESCAPE 12 /* Strings with '\'' doubled. %q */
-#define etSQLESCAPE2 13 /* Strings with '\'' doubled and enclosed in '',
- NULL pointers replaced by SQL NULL. %Q */
-#define etTOKEN 14 /* a pointer to a Token structure */
-#define etSRCLIST 15 /* a pointer to a SrcList */
-
-
-/*
-** An "etByte" is an 8-bit unsigned value.
-*/
-typedef unsigned char etByte;
-
-/*
-** Each builtin conversion character (ex: the 'd' in "%d") is described
-** by an instance of the following structure
-*/
-typedef struct et_info { /* Information about each format field */
- char fmttype; /* The format field code letter */
- etByte base; /* The base for radix conversion */
- etByte flags; /* One or more of FLAG_ constants below */
- etByte type; /* Conversion paradigm */
- char *charset; /* The character set for conversion */
- char *prefix; /* Prefix on non-zero values in alt format */
-} et_info;
-
-/*
-** Allowed values for et_info.flags
-*/
-#define FLAG_SIGNED 1 /* True if the value to convert is signed */
-#define FLAG_INTERN 2 /* True if for internal use only */
-
-
-/*
-** The following table is searched linearly, so it is good to put the
-** most frequently used conversion types first.
-*/
-static et_info fmtinfo[] = {
- { 'd', 10, 1, etRADIX, "0123456789", 0 },
- { 's', 0, 0, etSTRING, 0, 0 },
- { 'z', 0, 2, etDYNSTRING, 0, 0 },
- { 'q', 0, 0, etSQLESCAPE, 0, 0 },
- { 'Q', 0, 0, etSQLESCAPE2, 0, 0 },
- { 'c', 0, 0, etCHARX, 0, 0 },
- { 'o', 8, 0, etRADIX, "01234567", "0" },
- { 'u', 10, 0, etRADIX, "0123456789", 0 },
- { 'x', 16, 0, etRADIX, "0123456789abcdef", "x0" },
- { 'X', 16, 0, etRADIX, "0123456789ABCDEF", "X0" },
- { 'f', 0, 1, etFLOAT, 0, 0 },
- { 'e', 0, 1, etEXP, "e", 0 },
- { 'E', 0, 1, etEXP, "E", 0 },
- { 'g', 0, 1, etGENERIC, "e", 0 },
- { 'G', 0, 1, etGENERIC, "E", 0 },
- { 'i', 10, 1, etRADIX, "0123456789", 0 },
- { 'n', 0, 0, etSIZE, 0, 0 },
- { '%', 0, 0, etPERCENT, 0, 0 },
- { 'p', 10, 0, etRADIX, "0123456789", 0 },
- { 'T', 0, 2, etTOKEN, 0, 0 },
- { 'S', 0, 2, etSRCLIST, 0, 0 },
-};
-#define etNINFO (sizeof(fmtinfo)/sizeof(fmtinfo[0]))
-
-/*
-** If NOFLOATINGPOINT is defined, then none of the floating point
-** conversions will work.
-*/
-#ifndef etNOFLOATINGPOINT
-/*
-** "*val" is a double such that 0.1 <= *val < 10.0
-** Return the ascii code for the leading digit of *val, then
-** multiply "*val" by 10.0 to renormalize.
-**
-** Example:
-** input: *val = 3.14159
-** output: *val = 1.4159 function return = '3'
-**
-** The counter *cnt is incremented each time. After counter exceeds
-** 16 (the number of significant digits in a 64-bit float) '0' is
-** always returned.
-*/
-static int et_getdigit(LONGDOUBLE_TYPE *val, int *cnt){
- int digit;
- LONGDOUBLE_TYPE d;
- if( (*cnt)++ >= 16 ) return '0';
- digit = (int)*val;
- d = digit;
- digit += '0';
- *val = (*val - d)*10.0;
- return digit;
-}
-#endif
-
-#define etBUFSIZE 1000 /* Size of the output buffer */
-
-/*
-** The root program. All variations call this core.
-**
-** INPUTS:
-** func This is a pointer to a function taking three arguments
-** 1. A pointer to anything. Same as the "arg" parameter.
-** 2. A pointer to the list of characters to be output
-** (Note, this list is NOT null terminated.)
-** 3. An integer number of characters to be output.
-** (Note: This number might be zero.)
-**
-** arg This is the pointer to anything which will be passed as the
-** first argument to "func". Use it for whatever you like.
-**
-** fmt This is the format string, as in the usual print.
-**
-** ap This is a pointer to a list of arguments. Same as in
-** vfprint.
-**
-** OUTPUTS:
-** The return value is the total number of characters sent to
-** the function "func". Returns -1 on a error.
-**
-** Note that the order in which automatic variables are declared below
-** seems to make a big difference in determining how fast this beast
-** will run.
-*/
-static int vxprintf(
- void (*func)(void*,const char*,int), /* Consumer of text */
- void *arg, /* First argument to the consumer */
- int useExtended, /* Allow extended %-conversions */
- const char *fmt, /* Format string */
- va_list ap /* arguments */
-){
- int c; /* Next character in the format string */
- char *bufpt; /* Pointer to the conversion buffer */
- int precision; /* Precision of the current field */
- int length; /* Length of the field */
- int idx; /* A general purpose loop counter */
- int count; /* Total number of characters output */
- int width; /* Width of the current field */
- etByte flag_leftjustify; /* True if "-" flag is present */
- etByte flag_plussign; /* True if "+" flag is present */
- etByte flag_blanksign; /* True if " " flag is present */
- etByte flag_alternateform; /* True if "#" flag is present */
- etByte flag_zeropad; /* True if field width constant starts with zero */
- etByte flag_long; /* True if "l" flag is present */
- unsigned long longvalue; /* Value for integer types */
- LONGDOUBLE_TYPE realvalue; /* Value for real types */
- et_info *infop; /* Pointer to the appropriate info structure */
- char buf[etBUFSIZE]; /* Conversion buffer */
- char prefix; /* Prefix character. "+" or "-" or " " or '\0'. */
- etByte errorflag = 0; /* True if an error is encountered */
- etByte xtype; /* Conversion paradigm */
- char *zExtra; /* Extra memory used for etTCLESCAPE conversions */
- static char spaces[] = " ";
-#define etSPACESIZE (sizeof(spaces)-1)
-#ifndef etNOFLOATINGPOINT
- int exp; /* exponent of real numbers */
- double rounder; /* Used for rounding floating point values */
- etByte flag_dp; /* True if decimal point should be shown */
- etByte flag_rtz; /* True if trailing zeros should be removed */
- etByte flag_exp; /* True to force display of the exponent */
- int nsd; /* Number of significant digits returned */
-#endif
-
- count = length = 0;
- bufpt = 0;
- for(; (c=(*fmt))!=0; ++fmt){
- if( c!='%' ){
- int amt;
- bufpt = (char *)fmt;
- amt = 1;
- while( (c=(*++fmt))!='%' && c!=0 ) amt++;
- (*func)(arg,bufpt,amt);
- count += amt;
- if( c==0 ) break;
- }
- if( (c=(*++fmt))==0 ){
- errorflag = 1;
- (*func)(arg,"%",1);
- count++;
- break;
- }
- /* Find out what flags are present */
- flag_leftjustify = flag_plussign = flag_blanksign =
- flag_alternateform = flag_zeropad = 0;
- do{
- switch( c ){
- case '-': flag_leftjustify = 1; c = 0; break;
- case '+': flag_plussign = 1; c = 0; break;
- case ' ': flag_blanksign = 1; c = 0; break;
- case '#': flag_alternateform = 1; c = 0; break;
- case '0': flag_zeropad = 1; c = 0; break;
- default: break;
- }
- }while( c==0 && (c=(*++fmt))!=0 );
- /* Get the field width */
- width = 0;
- if( c=='*' ){
- width = va_arg(ap,int);
- if( width<0 ){
- flag_leftjustify = 1;
- width = -width;
- }
- c = *++fmt;
- }else{
- while( c>='0' && c<='9' ){
- width = width*10 + c - '0';
- c = *++fmt;
- }
- }
- if( width > etBUFSIZE-10 ){
- width = etBUFSIZE-10;
- }
- /* Get the precision */
- if( c=='.' ){
- precision = 0;
- c = *++fmt;
- if( c=='*' ){
- precision = va_arg(ap,int);
- if( precision<0 ) precision = -precision;
- c = *++fmt;
- }else{
- while( c>='0' && c<='9' ){
- precision = precision*10 + c - '0';
- c = *++fmt;
- }
- }
- /* Limit the precision to prevent overflowing buf[] during conversion */
- if( precision>etBUFSIZE-40 ) precision = etBUFSIZE-40;
- }else{
- precision = -1;
- }
- /* Get the conversion type modifier */
- if( c=='l' ){
- flag_long = 1;
- c = *++fmt;
- }else{
- flag_long = 0;
- }
- /* Fetch the info entry for the field */
- infop = 0;
- xtype = etERROR;
- for(idx=0; idx<etNINFO; idx++){
- if( c==fmtinfo[idx].fmttype ){
- infop = &fmtinfo[idx];
- if( useExtended || (infop->flags & FLAG_INTERN)==0 ){
- xtype = infop->type;
- }
- break;
- }
- }
- zExtra = 0;
-
- /*
- ** At this point, variables are initialized as follows:
- **
- ** flag_alternateform TRUE if a '#' is present.
- ** flag_plussign TRUE if a '+' is present.
- ** flag_leftjustify TRUE if a '-' is present or if the
- ** field width was negative.
- ** flag_zeropad TRUE if the width began with 0.
- ** flag_long TRUE if the letter 'l' (ell) prefixed
- ** the conversion character.
- ** flag_blanksign TRUE if a ' ' is present.
- ** width The specified field width. This is
- ** always non-negative. Zero is the default.
- ** precision The specified precision. The default
- ** is -1.
- ** xtype The class of the conversion.
- ** infop Pointer to the appropriate info struct.
- */
- switch( xtype ){
- case etRADIX:
- if( flag_long ) longvalue = va_arg(ap,long);
- else longvalue = va_arg(ap,int);
-#if 1
- /* For the format %#x, the value zero is printed "0" not "0x0".
- ** I think this is stupid. */
- if( longvalue==0 ) flag_alternateform = 0;
-#else
- /* More sensible: turn off the prefix for octal (to prevent "00"),
- ** but leave the prefix for hex. */
- if( longvalue==0 && infop->base==8 ) flag_alternateform = 0;
-#endif
- if( infop->flags & FLAG_SIGNED ){
- if( *(long*)&longvalue<0 ){
- longvalue = -*(long*)&longvalue;
- prefix = '-';
- }else if( flag_plussign ) prefix = '+';
- else if( flag_blanksign ) prefix = ' ';
- else prefix = 0;
- }else prefix = 0;
- if( flag_zeropad && precision<width-(prefix!=0) ){
- precision = width-(prefix!=0);
- }
- bufpt = &buf[etBUFSIZE-1];
- {
- register char *cset; /* Use registers for speed */
- register int base;
- cset = infop->charset;
- base = infop->base;
- do{ /* Convert to ascii */
- *(--bufpt) = cset[longvalue%base];
- longvalue = longvalue/base;
- }while( longvalue>0 );
- }
- length = &buf[etBUFSIZE-1]-bufpt;
- for(idx=precision-length; idx>0; idx--){
- *(--bufpt) = '0'; /* Zero pad */
- }
- if( prefix ) *(--bufpt) = prefix; /* Add sign */
- if( flag_alternateform && infop->prefix ){ /* Add "0" or "0x" */
- char *pre, x;
- pre = infop->prefix;
- if( *bufpt!=pre[0] ){
- for(pre=infop->prefix; (x=(*pre))!=0; pre++) *(--bufpt) = x;
- }
- }
- length = &buf[etBUFSIZE-1]-bufpt;
- break;
- case etFLOAT:
- case etEXP:
- case etGENERIC:
- realvalue = va_arg(ap,double);
-#ifndef etNOFLOATINGPOINT
- if( precision<0 ) precision = 6; /* Set default precision */
- if( precision>etBUFSIZE-10 ) precision = etBUFSIZE-10;
- if( realvalue<0.0 ){
- realvalue = -realvalue;
- prefix = '-';
- }else{
- if( flag_plussign ) prefix = '+';
- else if( flag_blanksign ) prefix = ' ';
- else prefix = 0;
- }
- if( infop->type==etGENERIC && precision>0 ) precision--;
- rounder = 0.0;
-#if 0
- /* Rounding works like BSD when the constant 0.4999 is used. Wierd! */
- for(idx=precision, rounder=0.4999; idx>0; idx--, rounder*=0.1);
-#else
- /* It makes more sense to use 0.5 */
- for(idx=precision, rounder=0.5; idx>0; idx--, rounder*=0.1);
-#endif
- if( infop->type==etFLOAT ) realvalue += rounder;
- /* Normalize realvalue to within 10.0 > realvalue >= 1.0 */
- exp = 0;
- if( realvalue>0.0 ){
- while( realvalue>=1e8 && exp<=350 ){ realvalue *= 1e-8; exp+=8; }
- while( realvalue>=10.0 && exp<=350 ){ realvalue *= 0.1; exp++; }
- while( realvalue<1e-8 && exp>=-350 ){ realvalue *= 1e8; exp-=8; }
- while( realvalue<1.0 && exp>=-350 ){ realvalue *= 10.0; exp--; }
- if( exp>350 || exp<-350 ){
- bufpt = "NaN";
- length = 3;
- break;
- }
- }
- bufpt = buf;
- /*
- ** If the field type is etGENERIC, then convert to either etEXP
- ** or etFLOAT, as appropriate.
- */
- flag_exp = xtype==etEXP;
- if( xtype!=etFLOAT ){
- realvalue += rounder;
- if( realvalue>=10.0 ){ realvalue *= 0.1; exp++; }
- }
- if( xtype==etGENERIC ){
- flag_rtz = !flag_alternateform;
- if( exp<-4 || exp>precision ){
- xtype = etEXP;
- }else{
- precision = precision - exp;
- xtype = etFLOAT;
- }
- }else{
- flag_rtz = 0;
- }
- /*
- ** The "exp+precision" test causes output to be of type etEXP if
- ** the precision is too large to fit in buf[].
- */
- nsd = 0;
- if( xtype==etFLOAT && exp+precision<etBUFSIZE-30 ){
- flag_dp = (precision>0 || flag_alternateform);
- if( prefix ) *(bufpt++) = prefix; /* Sign */
- if( exp<0 ) *(bufpt++) = '0'; /* Digits before "." */
- else for(; exp>=0; exp--) *(bufpt++) = et_getdigit(&realvalue,&nsd);
- if( flag_dp ) *(bufpt++) = '.'; /* The decimal point */
- for(exp++; exp<0 && precision>0; precision--, exp++){
- *(bufpt++) = '0';
- }
- while( (precision--)>0 ) *(bufpt++) = et_getdigit(&realvalue,&nsd);
- *(bufpt--) = 0; /* Null terminate */
- if( flag_rtz && flag_dp ){ /* Remove trailing zeros and "." */
- while( bufpt>=buf && *bufpt=='0' ) *(bufpt--) = 0;
- if( bufpt>=buf && *bufpt=='.' ) *(bufpt--) = 0;
- }
- bufpt++; /* point to next free slot */
- }else{ /* etEXP or etGENERIC */
- flag_dp = (precision>0 || flag_alternateform);
- if( prefix ) *(bufpt++) = prefix; /* Sign */
- *(bufpt++) = et_getdigit(&realvalue,&nsd); /* First digit */
- if( flag_dp ) *(bufpt++) = '.'; /* Decimal point */
- while( (precision--)>0 ) *(bufpt++) = et_getdigit(&realvalue,&nsd);
- bufpt--; /* point to last digit */
- if( flag_rtz && flag_dp ){ /* Remove tail zeros */
- while( bufpt>=buf && *bufpt=='0' ) *(bufpt--) = 0;
- if( bufpt>=buf && *bufpt=='.' ) *(bufpt--) = 0;
- }
- bufpt++; /* point to next free slot */
- if( exp || flag_exp ){
- *(bufpt++) = infop->charset[0];
- if( exp<0 ){ *(bufpt++) = '-'; exp = -exp; } /* sign of exp */
- else { *(bufpt++) = '+'; }
- if( exp>=100 ){
- *(bufpt++) = (exp/100)+'0'; /* 100's digit */
- exp %= 100;
- }
- *(bufpt++) = exp/10+'0'; /* 10's digit */
- *(bufpt++) = exp%10+'0'; /* 1's digit */
- }
- }
- /* The converted number is in buf[] and zero terminated. Output it.
- ** Note that the number is in the usual order, not reversed as with
- ** integer conversions. */
- length = bufpt-buf;
- bufpt = buf;
-
- /* Special case: Add leading zeros if the flag_zeropad flag is
- ** set and we are not left justified */
- if( flag_zeropad && !flag_leftjustify && length < width){
- int i;
- int nPad = width - length;
- for(i=width; i>=nPad; i--){
- bufpt[i] = bufpt[i-nPad];
- }
- i = prefix!=0;
- while( nPad-- ) bufpt[i++] = '0';
- length = width;
- }
-#endif
- break;
- case etSIZE:
- *(va_arg(ap,int*)) = count;
- length = width = 0;
- break;
- case etPERCENT:
- buf[0] = '%';
- bufpt = buf;
- length = 1;
- break;
- case etCHARLIT:
- case etCHARX:
- c = buf[0] = (xtype==etCHARX ? va_arg(ap,int) : *++fmt);
- if( precision>=0 ){
- for(idx=1; idx<precision; idx++) buf[idx] = c;
- length = precision;
- }else{
- length =1;
- }
- bufpt = buf;
- break;
- case etSTRING:
- case etDYNSTRING:
- bufpt = va_arg(ap,char*);
- if( bufpt==0 ){
- bufpt = "";
- }else if( xtype==etDYNSTRING ){
- zExtra = bufpt;
- }
- length = strlen(bufpt);
- if( precision>=0 && precision<length ) length = precision;
- break;
- case etSQLESCAPE:
- case etSQLESCAPE2:
- {
- int i, j, n, c, isnull;
- char *arg = va_arg(ap,char*);
- isnull = arg==0;
- if( isnull ) arg = (xtype==etSQLESCAPE2 ? "NULL" : "(NULL)");
- for(i=n=0; (c=arg[i])!=0; i++){
- if( c=='\'' ) n++;
- }
- n += i + 1 + ((!isnull && xtype==etSQLESCAPE2) ? 2 : 0);
- if( n>etBUFSIZE ){
- bufpt = zExtra = sqliteMalloc( n );
- if( bufpt==0 ) return -1;
- }else{
- bufpt = buf;
- }
- j = 0;
- if( !isnull && xtype==etSQLESCAPE2 ) bufpt[j++] = '\'';
- for(i=0; (c=arg[i])!=0; i++){
- bufpt[j++] = c;
- if( c=='\'' ) bufpt[j++] = c;
- }
- if( !isnull && xtype==etSQLESCAPE2 ) bufpt[j++] = '\'';
- bufpt[j] = 0;
- length = j;
- if( precision>=0 && precision<length ) length = precision;
- }
- break;
- case etTOKEN: {
- Token *pToken = va_arg(ap, Token*);
- (*func)(arg, pToken->z, pToken->n);
- length = width = 0;
- break;
- }
- case etSRCLIST: {
- SrcList *pSrc = va_arg(ap, SrcList*);
- int k = va_arg(ap, int);
- struct SrcList_item *pItem = &pSrc->a[k];
- assert( k>=0 && k<pSrc->nSrc );
- if( pItem->zDatabase && pItem->zDatabase[0] ){
- (*func)(arg, pItem->zDatabase, strlen(pItem->zDatabase));
- (*func)(arg, ".", 1);
- }
- (*func)(arg, pItem->zName, strlen(pItem->zName));
- length = width = 0;
- break;
- }
- case etERROR:
- buf[0] = '%';
- buf[1] = c;
- errorflag = 0;
- idx = 1+(c!=0);
- (*func)(arg,"%",idx);
- count += idx;
- if( c==0 ) fmt--;
- break;
- }/* End switch over the format type */
- /*
- ** The text of the conversion is pointed to by "bufpt" and is
- ** "length" characters long. The field width is "width". Do
- ** the output.
- */
- if( !flag_leftjustify ){
- register int nspace;
- nspace = width-length;
- if( nspace>0 ){
- count += nspace;
- while( nspace>=etSPACESIZE ){
- (*func)(arg,spaces,etSPACESIZE);
- nspace -= etSPACESIZE;
- }
- if( nspace>0 ) (*func)(arg,spaces,nspace);
- }
- }
- if( length>0 ){
- (*func)(arg,bufpt,length);
- count += length;
- }
- if( flag_leftjustify ){
- register int nspace;
- nspace = width-length;
- if( nspace>0 ){
- count += nspace;
- while( nspace>=etSPACESIZE ){
- (*func)(arg,spaces,etSPACESIZE);
- nspace -= etSPACESIZE;
- }
- if( nspace>0 ) (*func)(arg,spaces,nspace);
- }
- }
- if( zExtra ){
- sqliteFree(zExtra);
- }
- }/* End for loop over the format string */
- return errorflag ? -1 : count;
-} /* End of function */
-
-
-/* This structure is used to store state information about the
-** write to memory that is currently in progress.
-*/
-struct sgMprintf {
- char *zBase; /* A base allocation */
- char *zText; /* The string collected so far */
- int nChar; /* Length of the string so far */
- int nTotal; /* Output size if unconstrained */
- int nAlloc; /* Amount of space allocated in zText */
- void *(*xRealloc)(void*,int); /* Function used to realloc memory */
-};
-
-/*
-** This function implements the callback from vxprintf.
-**
-** This routine add nNewChar characters of text in zNewText to
-** the sgMprintf structure pointed to by "arg".
-*/
-static void mout(void *arg, const char *zNewText, int nNewChar){
- struct sgMprintf *pM = (struct sgMprintf*)arg;
- pM->nTotal += nNewChar;
- if( pM->nChar + nNewChar + 1 > pM->nAlloc ){
- if( pM->xRealloc==0 ){
- nNewChar = pM->nAlloc - pM->nChar - 1;
- }else{
- pM->nAlloc = pM->nChar + nNewChar*2 + 1;
- if( pM->zText==pM->zBase ){
- pM->zText = pM->xRealloc(0, pM->nAlloc);
- if( pM->zText && pM->nChar ){
- memcpy(pM->zText, pM->zBase, pM->nChar);
- }
- }else{
- pM->zText = pM->xRealloc(pM->zText, pM->nAlloc);
- }
- }
- }
- if( pM->zText && nNewChar>0 ){
- memcpy(&pM->zText[pM->nChar], zNewText, nNewChar);
- pM->nChar += nNewChar;
- pM->zText[pM->nChar] = 0;
- }
-}
-
-/*
-** This routine is a wrapper around xprintf() that invokes mout() as
-** the consumer.
-*/
-static char *base_vprintf(
- void *(*xRealloc)(void*,int), /* Routine to realloc memory. May be NULL */
- int useInternal, /* Use internal %-conversions if true */
- char *zInitBuf, /* Initially write here, before mallocing */
- int nInitBuf, /* Size of zInitBuf[] */
- const char *zFormat, /* format string */
- va_list ap /* arguments */
-){
- struct sgMprintf sM;
- sM.zBase = sM.zText = zInitBuf;
- sM.nChar = sM.nTotal = 0;
- sM.nAlloc = nInitBuf;
- sM.xRealloc = xRealloc;
- vxprintf(mout, &sM, useInternal, zFormat, ap);
- if( xRealloc ){
- if( sM.zText==sM.zBase ){
- sM.zText = xRealloc(0, sM.nChar+1);
- memcpy(sM.zText, sM.zBase, sM.nChar+1);
- }else if( sM.nAlloc>sM.nChar+10 ){
- sM.zText = xRealloc(sM.zText, sM.nChar+1);
- }
- }
- return sM.zText;
-}
-
-/*
-** Realloc that is a real function, not a macro.
-*/
-static void *printf_realloc(void *old, int size){
- return sqliteRealloc(old,size);
-}
-
-/*
-** Print into memory obtained from sqliteMalloc(). Use the internal
-** %-conversion extensions.
-*/
-char *sqliteVMPrintf(const char *zFormat, va_list ap){
- char zBase[1000];
- return base_vprintf(printf_realloc, 1, zBase, sizeof(zBase), zFormat, ap);
-}
-
-/*
-** Print into memory obtained from sqliteMalloc(). Use the internal
-** %-conversion extensions.
-*/
-char *sqliteMPrintf(const char *zFormat, ...){
- va_list ap;
- char *z;
- char zBase[1000];
- va_start(ap, zFormat);
- z = base_vprintf(printf_realloc, 1, zBase, sizeof(zBase), zFormat, ap);
- va_end(ap);
- return z;
-}
-
-/*
-** Print into memory obtained from malloc(). Do not use the internal
-** %-conversion extensions. This routine is for use by external users.
-*/
-char *sqlite_mprintf(const char *zFormat, ...){
- va_list ap;
- char *z;
- char zBuf[200];
-
- va_start(ap,zFormat);
- z = base_vprintf((void*(*)(void*,int))realloc, 0,
- zBuf, sizeof(zBuf), zFormat, ap);
- va_end(ap);
- return z;
-}
-
-/* This is the varargs version of sqlite_mprintf.
-*/
-char *sqlite_vmprintf(const char *zFormat, va_list ap){
- char zBuf[200];
- return base_vprintf((void*(*)(void*,int))realloc, 0,
- zBuf, sizeof(zBuf), zFormat, ap);
-}
-
-/*
-** sqlite_snprintf() works like snprintf() except that it ignores the
-** current locale settings. This is important for SQLite because we
-** are not able to use a "," as the decimal point in place of "." as
-** specified by some locales.
-*/
-char *sqlite_snprintf(int n, char *zBuf, const char *zFormat, ...){
- char *z;
- va_list ap;
-
- va_start(ap,zFormat);
- z = base_vprintf(0, 0, zBuf, n, zFormat, ap);
- va_end(ap);
- return z;
-}
-
-/*
-** The following four routines implement the varargs versions of the
-** sqlite_exec() and sqlite_get_table() interfaces. See the sqlite.h
-** header files for a more detailed description of how these interfaces
-** work.
-**
-** These routines are all just simple wrappers.
-*/
-int sqlite_exec_printf(
- sqlite *db, /* An open database */
- const char *sqlFormat, /* printf-style format string for the SQL */
- sqlite_callback xCallback, /* Callback function */
- void *pArg, /* 1st argument to callback function */
- char **errmsg, /* Error msg written here */
- ... /* Arguments to the format string. */
-){
- va_list ap;
- int rc;
-
- va_start(ap, errmsg);
- rc = sqlite_exec_vprintf(db, sqlFormat, xCallback, pArg, errmsg, ap);
- va_end(ap);
- return rc;
-}
-int sqlite_exec_vprintf(
- sqlite *db, /* An open database */
- const char *sqlFormat, /* printf-style format string for the SQL */
- sqlite_callback xCallback, /* Callback function */
- void *pArg, /* 1st argument to callback function */
- char **errmsg, /* Error msg written here */
- va_list ap /* Arguments to the format string. */
-){
- char *zSql;
- int rc;
-
- zSql = sqlite_vmprintf(sqlFormat, ap);
- rc = sqlite_exec(db, zSql, xCallback, pArg, errmsg);
- free(zSql);
- return rc;
-}
-int sqlite_get_table_printf(
- sqlite *db, /* An open database */
- const char *sqlFormat, /* printf-style format string for the SQL */
- char ***resultp, /* Result written to a char *[] that this points to */
- int *nrow, /* Number of result rows written here */
- int *ncol, /* Number of result columns written here */
- char **errmsg, /* Error msg written here */
- ... /* Arguments to the format string */
-){
- va_list ap;
- int rc;
-
- va_start(ap, errmsg);
- rc = sqlite_get_table_vprintf(db, sqlFormat, resultp, nrow, ncol, errmsg, ap);
- va_end(ap);
- return rc;
-}
-int sqlite_get_table_vprintf(
- sqlite *db, /* An open database */
- const char *sqlFormat, /* printf-style format string for the SQL */
- char ***resultp, /* Result written to a char *[] that this points to */
- int *nrow, /* Number of result rows written here */
- int *ncolumn, /* Number of result columns written here */
- char **errmsg, /* Error msg written here */
- va_list ap /* Arguments to the format string */
-){
- char *zSql;
- int rc;
-
- zSql = sqlite_vmprintf(sqlFormat, ap);
- rc = sqlite_get_table(db, zSql, resultp, nrow, ncolumn, errmsg);
- free(zSql);
- return rc;
-}
diff --git a/ext/sqlite/libsqlite/src/random.c b/ext/sqlite/libsqlite/src/random.c
deleted file mode 100644
index dd8bdd4c58..0000000000
--- a/ext/sqlite/libsqlite/src/random.c
+++ /dev/null
@@ -1,97 +0,0 @@
-/*
-** 2001 September 15
-**
-** The author disclaims copyright to this source code. In place of
-** a legal notice, here is a blessing:
-**
-** May you do good and not evil.
-** May you find forgiveness for yourself and forgive others.
-** May you share freely, never taking more than you give.
-**
-*************************************************************************
-** This file contains code to implement a pseudo-random number
-** generator (PRNG) for SQLite.
-**
-** Random numbers are used by some of the database backends in order
-** to generate random integer keys for tables or random filenames.
-**
-** $Id$
-*/
-#include "sqliteInt.h"
-#include "os.h"
-
-
-/*
-** Get a single 8-bit random value from the RC4 PRNG. The Mutex
-** must be held while executing this routine.
-**
-** Why not just use a library random generator like lrand48() for this?
-** Because the OP_NewRecno opcode in the VDBE depends on having a very
-** good source of random numbers. The lrand48() library function may
-** well be good enough. But maybe not. Or maybe lrand48() has some
-** subtle problems on some systems that could cause problems. It is hard
-** to know. To minimize the risk of problems due to bad lrand48()
-** implementations, SQLite uses this random number generator based
-** on RC4, which we know works very well.
-*/
-static int randomByte(){
- unsigned char t;
-
- /* All threads share a single random number generator.
- ** This structure is the current state of the generator.
- */
- static struct {
- unsigned char isInit; /* True if initialized */
- unsigned char i, j; /* State variables */
- unsigned char s[256]; /* State variables */
- } prng;
-
- /* Initialize the state of the random number generator once,
- ** the first time this routine is called. The seed value does
- ** not need to contain a lot of randomness since we are not
- ** trying to do secure encryption or anything like that...
- **
- ** Nothing in this file or anywhere else in SQLite does any kind of
- ** encryption. The RC4 algorithm is being used as a PRNG (pseudo-random
- ** number generator) not as an encryption device.
- */
- if( !prng.isInit ){
- int i;
- char k[256];
- prng.j = 0;
- prng.i = 0;
- sqliteOsRandomSeed(k);
- for(i=0; i<256; i++){
- prng.s[i] = i;
- }
- for(i=0; i<256; i++){
- prng.j += prng.s[i] + k[i];
- t = prng.s[prng.j];
- prng.s[prng.j] = prng.s[i];
- prng.s[i] = t;
- }
- prng.isInit = 1;
- }
-
- /* Generate and return single random byte
- */
- prng.i++;
- t = prng.s[prng.i];
- prng.j += t;
- prng.s[prng.i] = prng.s[prng.j];
- prng.s[prng.j] = t;
- t += prng.s[prng.i];
- return prng.s[t];
-}
-
-/*
-** Return N random bytes.
-*/
-void sqliteRandomness(int N, void *pBuf){
- unsigned char *zBuf = pBuf;
- sqliteOsEnterMutex();
- while( N-- ){
- *(zBuf++) = randomByte();
- }
- sqliteOsLeaveMutex();
-}
diff --git a/ext/sqlite/libsqlite/src/select.c b/ext/sqlite/libsqlite/src/select.c
deleted file mode 100644
index 871f2e2c71..0000000000
--- a/ext/sqlite/libsqlite/src/select.c
+++ /dev/null
@@ -1,2412 +0,0 @@
-/*
-** 2001 September 15
-**
-** The author disclaims copyright to this source code. In place of
-** a legal notice, here is a blessing:
-**
-** May you do good and not evil.
-** May you find forgiveness for yourself and forgive others.
-** May you share freely, never taking more than you give.
-**
-*************************************************************************
-** This file contains C code routines that are called by the parser
-** to handle SELECT statements in SQLite.
-**
-** $Id$
-*/
-#include "sqliteInt.h"
-
-
-/*
-** Allocate a new Select structure and return a pointer to that
-** structure.
-*/
-Select *sqliteSelectNew(
- ExprList *pEList, /* which columns to include in the result */
- SrcList *pSrc, /* the FROM clause -- which tables to scan */
- Expr *pWhere, /* the WHERE clause */
- ExprList *pGroupBy, /* the GROUP BY clause */
- Expr *pHaving, /* the HAVING clause */
- ExprList *pOrderBy, /* the ORDER BY clause */
- int isDistinct, /* true if the DISTINCT keyword is present */
- int nLimit, /* LIMIT value. -1 means not used */
- int nOffset /* OFFSET value. 0 means no offset */
-){
- Select *pNew;
- pNew = sqliteMalloc( sizeof(*pNew) );
- if( pNew==0 ){
- sqliteExprListDelete(pEList);
- sqliteSrcListDelete(pSrc);
- sqliteExprDelete(pWhere);
- sqliteExprListDelete(pGroupBy);
- sqliteExprDelete(pHaving);
- sqliteExprListDelete(pOrderBy);
- }else{
- if( pEList==0 ){
- pEList = sqliteExprListAppend(0, sqliteExpr(TK_ALL,0,0,0), 0);
- }
- pNew->pEList = pEList;
- pNew->pSrc = pSrc;
- pNew->pWhere = pWhere;
- pNew->pGroupBy = pGroupBy;
- pNew->pHaving = pHaving;
- pNew->pOrderBy = pOrderBy;
- pNew->isDistinct = isDistinct;
- pNew->op = TK_SELECT;
- pNew->nLimit = nLimit;
- pNew->nOffset = nOffset;
- pNew->iLimit = -1;
- pNew->iOffset = -1;
- }
- return pNew;
-}
-
-/*
-** Given 1 to 3 identifiers preceeding the JOIN keyword, determine the
-** type of join. Return an integer constant that expresses that type
-** in terms of the following bit values:
-**
-** JT_INNER
-** JT_OUTER
-** JT_NATURAL
-** JT_LEFT
-** JT_RIGHT
-**
-** A full outer join is the combination of JT_LEFT and JT_RIGHT.
-**
-** If an illegal or unsupported join type is seen, then still return
-** a join type, but put an error in the pParse structure.
-*/
-int sqliteJoinType(Parse *pParse, Token *pA, Token *pB, Token *pC){
- int jointype = 0;
- Token *apAll[3];
- Token *p;
- static struct {
- const char *zKeyword;
- int nChar;
- int code;
- } keywords[] = {
- { "natural", 7, JT_NATURAL },
- { "left", 4, JT_LEFT|JT_OUTER },
- { "right", 5, JT_RIGHT|JT_OUTER },
- { "full", 4, JT_LEFT|JT_RIGHT|JT_OUTER },
- { "outer", 5, JT_OUTER },
- { "inner", 5, JT_INNER },
- { "cross", 5, JT_INNER },
- };
- int i, j;
- apAll[0] = pA;
- apAll[1] = pB;
- apAll[2] = pC;
- for(i=0; i<3 && apAll[i]; i++){
- p = apAll[i];
- for(j=0; j<sizeof(keywords)/sizeof(keywords[0]); j++){
- if( p->n==keywords[j].nChar
- && sqliteStrNICmp(p->z, keywords[j].zKeyword, p->n)==0 ){
- jointype |= keywords[j].code;
- break;
- }
- }
- if( j>=sizeof(keywords)/sizeof(keywords[0]) ){
- jointype |= JT_ERROR;
- break;
- }
- }
- if(
- (jointype & (JT_INNER|JT_OUTER))==(JT_INNER|JT_OUTER) ||
- (jointype & JT_ERROR)!=0
- ){
- static Token dummy = { 0, 0 };
- char *zSp1 = " ", *zSp2 = " ";
- if( pB==0 ){ pB = &dummy; zSp1 = 0; }
- if( pC==0 ){ pC = &dummy; zSp2 = 0; }
- sqliteSetNString(&pParse->zErrMsg, "unknown or unsupported join type: ", 0,
- pA->z, pA->n, zSp1, 1, pB->z, pB->n, zSp2, 1, pC->z, pC->n, 0);
- pParse->nErr++;
- jointype = JT_INNER;
- }else if( jointype & JT_RIGHT ){
- sqliteErrorMsg(pParse,
- "RIGHT and FULL OUTER JOINs are not currently supported");
- jointype = JT_INNER;
- }
- return jointype;
-}
-
-/*
-** Return the index of a column in a table. Return -1 if the column
-** is not contained in the table.
-*/
-static int columnIndex(Table *pTab, const char *zCol){
- int i;
- for(i=0; i<pTab->nCol; i++){
- if( sqliteStrICmp(pTab->aCol[i].zName, zCol)==0 ) return i;
- }
- return -1;
-}
-
-/*
-** Add a term to the WHERE expression in *ppExpr that requires the
-** zCol column to be equal in the two tables pTab1 and pTab2.
-*/
-static void addWhereTerm(
- const char *zCol, /* Name of the column */
- const Table *pTab1, /* First table */
- const Table *pTab2, /* Second table */
- Expr **ppExpr /* Add the equality term to this expression */
-){
- Token dummy;
- Expr *pE1a, *pE1b, *pE1c;
- Expr *pE2a, *pE2b, *pE2c;
- Expr *pE;
-
- dummy.z = zCol;
- dummy.n = strlen(zCol);
- dummy.dyn = 0;
- pE1a = sqliteExpr(TK_ID, 0, 0, &dummy);
- pE2a = sqliteExpr(TK_ID, 0, 0, &dummy);
- dummy.z = pTab1->zName;
- dummy.n = strlen(dummy.z);
- pE1b = sqliteExpr(TK_ID, 0, 0, &dummy);
- dummy.z = pTab2->zName;
- dummy.n = strlen(dummy.z);
- pE2b = sqliteExpr(TK_ID, 0, 0, &dummy);
- pE1c = sqliteExpr(TK_DOT, pE1b, pE1a, 0);
- pE2c = sqliteExpr(TK_DOT, pE2b, pE2a, 0);
- pE = sqliteExpr(TK_EQ, pE1c, pE2c, 0);
- ExprSetProperty(pE, EP_FromJoin);
- if( *ppExpr ){
- *ppExpr = sqliteExpr(TK_AND, *ppExpr, pE, 0);
- }else{
- *ppExpr = pE;
- }
-}
-
-/*
-** Set the EP_FromJoin property on all terms of the given expression.
-**
-** The EP_FromJoin property is used on terms of an expression to tell
-** the LEFT OUTER JOIN processing logic that this term is part of the
-** join restriction specified in the ON or USING clause and not a part
-** of the more general WHERE clause. These terms are moved over to the
-** WHERE clause during join processing but we need to remember that they
-** originated in the ON or USING clause.
-*/
-static void setJoinExpr(Expr *p){
- while( p ){
- ExprSetProperty(p, EP_FromJoin);
- setJoinExpr(p->pLeft);
- p = p->pRight;
- }
-}
-
-/*
-** This routine processes the join information for a SELECT statement.
-** ON and USING clauses are converted into extra terms of the WHERE clause.
-** NATURAL joins also create extra WHERE clause terms.
-**
-** This routine returns the number of errors encountered.
-*/
-static int sqliteProcessJoin(Parse *pParse, Select *p){
- SrcList *pSrc;
- int i, j;
- pSrc = p->pSrc;
- for(i=0; i<pSrc->nSrc-1; i++){
- struct SrcList_item *pTerm = &pSrc->a[i];
- struct SrcList_item *pOther = &pSrc->a[i+1];
-
- if( pTerm->pTab==0 || pOther->pTab==0 ) continue;
-
- /* When the NATURAL keyword is present, add WHERE clause terms for
- ** every column that the two tables have in common.
- */
- if( pTerm->jointype & JT_NATURAL ){
- Table *pTab;
- if( pTerm->pOn || pTerm->pUsing ){
- sqliteErrorMsg(pParse, "a NATURAL join may not have "
- "an ON or USING clause", 0);
- return 1;
- }
- pTab = pTerm->pTab;
- for(j=0; j<pTab->nCol; j++){
- if( columnIndex(pOther->pTab, pTab->aCol[j].zName)>=0 ){
- addWhereTerm(pTab->aCol[j].zName, pTab, pOther->pTab, &p->pWhere);
- }
- }
- }
-
- /* Disallow both ON and USING clauses in the same join
- */
- if( pTerm->pOn && pTerm->pUsing ){
- sqliteErrorMsg(pParse, "cannot have both ON and USING "
- "clauses in the same join");
- return 1;
- }
-
- /* Add the ON clause to the end of the WHERE clause, connected by
- ** and AND operator.
- */
- if( pTerm->pOn ){
- setJoinExpr(pTerm->pOn);
- if( p->pWhere==0 ){
- p->pWhere = pTerm->pOn;
- }else{
- p->pWhere = sqliteExpr(TK_AND, p->pWhere, pTerm->pOn, 0);
- }
- pTerm->pOn = 0;
- }
-
- /* Create extra terms on the WHERE clause for each column named
- ** in the USING clause. Example: If the two tables to be joined are
- ** A and B and the USING clause names X, Y, and Z, then add this
- ** to the WHERE clause: A.X=B.X AND A.Y=B.Y AND A.Z=B.Z
- ** Report an error if any column mentioned in the USING clause is
- ** not contained in both tables to be joined.
- */
- if( pTerm->pUsing ){
- IdList *pList;
- int j;
- assert( i<pSrc->nSrc-1 );
- pList = pTerm->pUsing;
- for(j=0; j<pList->nId; j++){
- if( columnIndex(pTerm->pTab, pList->a[j].zName)<0 ||
- columnIndex(pOther->pTab, pList->a[j].zName)<0 ){
- sqliteErrorMsg(pParse, "cannot join using column %s - column "
- "not present in both tables", pList->a[j].zName);
- return 1;
- }
- addWhereTerm(pList->a[j].zName, pTerm->pTab, pOther->pTab, &p->pWhere);
- }
- }
- }
- return 0;
-}
-
-/*
-** Delete the given Select structure and all of its substructures.
-*/
-void sqliteSelectDelete(Select *p){
- if( p==0 ) return;
- sqliteExprListDelete(p->pEList);
- sqliteSrcListDelete(p->pSrc);
- sqliteExprDelete(p->pWhere);
- sqliteExprListDelete(p->pGroupBy);
- sqliteExprDelete(p->pHaving);
- sqliteExprListDelete(p->pOrderBy);
- sqliteSelectDelete(p->pPrior);
- sqliteFree(p->zSelect);
- sqliteFree(p);
-}
-
-/*
-** Delete the aggregate information from the parse structure.
-*/
-static void sqliteAggregateInfoReset(Parse *pParse){
- sqliteFree(pParse->aAgg);
- pParse->aAgg = 0;
- pParse->nAgg = 0;
- pParse->useAgg = 0;
-}
-
-/*
-** Insert code into "v" that will push the record on the top of the
-** stack into the sorter.
-*/
-static void pushOntoSorter(Parse *pParse, Vdbe *v, ExprList *pOrderBy){
- char *zSortOrder;
- int i;
- zSortOrder = sqliteMalloc( pOrderBy->nExpr + 1 );
- if( zSortOrder==0 ) return;
- for(i=0; i<pOrderBy->nExpr; i++){
- int order = pOrderBy->a[i].sortOrder;
- int type;
- int c;
- if( (order & SQLITE_SO_TYPEMASK)==SQLITE_SO_TEXT ){
- type = SQLITE_SO_TEXT;
- }else if( (order & SQLITE_SO_TYPEMASK)==SQLITE_SO_NUM ){
- type = SQLITE_SO_NUM;
- }else if( pParse->db->file_format>=4 ){
- type = sqliteExprType(pOrderBy->a[i].pExpr);
- }else{
- type = SQLITE_SO_NUM;
- }
- if( (order & SQLITE_SO_DIRMASK)==SQLITE_SO_ASC ){
- c = type==SQLITE_SO_TEXT ? 'A' : '+';
- }else{
- c = type==SQLITE_SO_TEXT ? 'D' : '-';
- }
- zSortOrder[i] = c;
- sqliteExprCode(pParse, pOrderBy->a[i].pExpr);
- }
- zSortOrder[pOrderBy->nExpr] = 0;
- sqliteVdbeOp3(v, OP_SortMakeKey, pOrderBy->nExpr, 0, zSortOrder, P3_DYNAMIC);
- sqliteVdbeAddOp(v, OP_SortPut, 0, 0);
-}
-
-/*
-** This routine adds a P3 argument to the last VDBE opcode that was
-** inserted. The P3 argument added is a string suitable for the
-** OP_MakeKey or OP_MakeIdxKey opcodes. The string consists of
-** characters 't' or 'n' depending on whether or not the various
-** fields of the key to be generated should be treated as numeric
-** or as text. See the OP_MakeKey and OP_MakeIdxKey opcode
-** documentation for additional information about the P3 string.
-** See also the sqliteAddIdxKeyType() routine.
-*/
-void sqliteAddKeyType(Vdbe *v, ExprList *pEList){
- int nColumn = pEList->nExpr;
- char *zType = sqliteMalloc( nColumn+1 );
- int i;
- if( zType==0 ) return;
- for(i=0; i<nColumn; i++){
- zType[i] = sqliteExprType(pEList->a[i].pExpr)==SQLITE_SO_NUM ? 'n' : 't';
- }
- zType[i] = 0;
- sqliteVdbeChangeP3(v, -1, zType, P3_DYNAMIC);
-}
-
-/*
-** This routine generates the code for the inside of the inner loop
-** of a SELECT.
-**
-** If srcTab and nColumn are both zero, then the pEList expressions
-** are evaluated in order to get the data for this row. If nColumn>0
-** then data is pulled from srcTab and pEList is used only to get the
-** datatypes for each column.
-*/
-static int selectInnerLoop(
- Parse *pParse, /* The parser context */
- Select *p, /* The complete select statement being coded */
- ExprList *pEList, /* List of values being extracted */
- int srcTab, /* Pull data from this table */
- int nColumn, /* Number of columns in the source table */
- ExprList *pOrderBy, /* If not NULL, sort results using this key */
- int distinct, /* If >=0, make sure results are distinct */
- int eDest, /* How to dispose of the results */
- int iParm, /* An argument to the disposal method */
- int iContinue, /* Jump here to continue with next row */
- int iBreak /* Jump here to break out of the inner loop */
-){
- Vdbe *v = pParse->pVdbe;
- int i;
-
- if( v==0 ) return 0;
- assert( pEList!=0 );
-
- /* If there was a LIMIT clause on the SELECT statement, then do the check
- ** to see if this row should be output.
- */
- if( pOrderBy==0 ){
- if( p->iOffset>=0 ){
- int addr = sqliteVdbeCurrentAddr(v);
- sqliteVdbeAddOp(v, OP_MemIncr, p->iOffset, addr+2);
- sqliteVdbeAddOp(v, OP_Goto, 0, iContinue);
- }
- if( p->iLimit>=0 ){
- sqliteVdbeAddOp(v, OP_MemIncr, p->iLimit, iBreak);
- }
- }
-
- /* Pull the requested columns.
- */
- if( nColumn>0 ){
- for(i=0; i<nColumn; i++){
- sqliteVdbeAddOp(v, OP_Column, srcTab, i);
- }
- }else{
- nColumn = pEList->nExpr;
- for(i=0; i<pEList->nExpr; i++){
- sqliteExprCode(pParse, pEList->a[i].pExpr);
- }
- }
-
- /* If the DISTINCT keyword was present on the SELECT statement
- ** and this row has been seen before, then do not make this row
- ** part of the result.
- */
- if( distinct>=0 && pEList && pEList->nExpr>0 ){
-#if NULL_ALWAYS_DISTINCT
- sqliteVdbeAddOp(v, OP_IsNull, -pEList->nExpr, sqliteVdbeCurrentAddr(v)+7);
-#endif
- sqliteVdbeAddOp(v, OP_MakeKey, pEList->nExpr, 1);
- if( pParse->db->file_format>=4 ) sqliteAddKeyType(v, pEList);
- sqliteVdbeAddOp(v, OP_Distinct, distinct, sqliteVdbeCurrentAddr(v)+3);
- sqliteVdbeAddOp(v, OP_Pop, pEList->nExpr+1, 0);
- sqliteVdbeAddOp(v, OP_Goto, 0, iContinue);
- sqliteVdbeAddOp(v, OP_String, 0, 0);
- sqliteVdbeAddOp(v, OP_PutStrKey, distinct, 0);
- }
-
- switch( eDest ){
- /* In this mode, write each query result to the key of the temporary
- ** table iParm.
- */
- case SRT_Union: {
- sqliteVdbeAddOp(v, OP_MakeRecord, nColumn, NULL_ALWAYS_DISTINCT);
- sqliteVdbeAddOp(v, OP_String, 0, 0);
- sqliteVdbeAddOp(v, OP_PutStrKey, iParm, 0);
- break;
- }
-
- /* Store the result as data using a unique key.
- */
- case SRT_Table:
- case SRT_TempTable: {
- sqliteVdbeAddOp(v, OP_MakeRecord, nColumn, 0);
- if( pOrderBy ){
- pushOntoSorter(pParse, v, pOrderBy);
- }else{
- sqliteVdbeAddOp(v, OP_NewRecno, iParm, 0);
- sqliteVdbeAddOp(v, OP_Pull, 1, 0);
- sqliteVdbeAddOp(v, OP_PutIntKey, iParm, 0);
- }
- break;
- }
-
- /* Construct a record from the query result, but instead of
- ** saving that record, use it as a key to delete elements from
- ** the temporary table iParm.
- */
- case SRT_Except: {
- int addr;
- addr = sqliteVdbeAddOp(v, OP_MakeRecord, nColumn, NULL_ALWAYS_DISTINCT);
- sqliteVdbeAddOp(v, OP_NotFound, iParm, addr+3);
- sqliteVdbeAddOp(v, OP_Delete, iParm, 0);
- break;
- }
-
- /* If we are creating a set for an "expr IN (SELECT ...)" construct,
- ** then there should be a single item on the stack. Write this
- ** item into the set table with bogus data.
- */
- case SRT_Set: {
- int addr1 = sqliteVdbeCurrentAddr(v);
- int addr2;
- assert( nColumn==1 );
- sqliteVdbeAddOp(v, OP_NotNull, -1, addr1+3);
- sqliteVdbeAddOp(v, OP_Pop, 1, 0);
- addr2 = sqliteVdbeAddOp(v, OP_Goto, 0, 0);
- if( pOrderBy ){
- pushOntoSorter(pParse, v, pOrderBy);
- }else{
- sqliteVdbeAddOp(v, OP_String, 0, 0);
- sqliteVdbeAddOp(v, OP_PutStrKey, iParm, 0);
- }
- sqliteVdbeChangeP2(v, addr2, sqliteVdbeCurrentAddr(v));
- break;
- }
-
- /* If this is a scalar select that is part of an expression, then
- ** store the results in the appropriate memory cell and break out
- ** of the scan loop.
- */
- case SRT_Mem: {
- assert( nColumn==1 );
- if( pOrderBy ){
- pushOntoSorter(pParse, v, pOrderBy);
- }else{
- sqliteVdbeAddOp(v, OP_MemStore, iParm, 1);
- sqliteVdbeAddOp(v, OP_Goto, 0, iBreak);
- }
- break;
- }
-
- /* Send the data to the callback function.
- */
- case SRT_Callback:
- case SRT_Sorter: {
- if( pOrderBy ){
- sqliteVdbeAddOp(v, OP_SortMakeRec, nColumn, 0);
- pushOntoSorter(pParse, v, pOrderBy);
- }else{
- assert( eDest==SRT_Callback );
- sqliteVdbeAddOp(v, OP_Callback, nColumn, 0);
- }
- break;
- }
-
- /* Invoke a subroutine to handle the results. The subroutine itself
- ** is responsible for popping the results off of the stack.
- */
- case SRT_Subroutine: {
- if( pOrderBy ){
- sqliteVdbeAddOp(v, OP_MakeRecord, nColumn, 0);
- pushOntoSorter(pParse, v, pOrderBy);
- }else{
- sqliteVdbeAddOp(v, OP_Gosub, 0, iParm);
- }
- break;
- }
-
- /* Discard the results. This is used for SELECT statements inside
- ** the body of a TRIGGER. The purpose of such selects is to call
- ** user-defined functions that have side effects. We do not care
- ** about the actual results of the select.
- */
- default: {
- assert( eDest==SRT_Discard );
- sqliteVdbeAddOp(v, OP_Pop, nColumn, 0);
- break;
- }
- }
- return 0;
-}
-
-/*
-** If the inner loop was generated using a non-null pOrderBy argument,
-** then the results were placed in a sorter. After the loop is terminated
-** we need to run the sorter and output the results. The following
-** routine generates the code needed to do that.
-*/
-static void generateSortTail(
- Select *p, /* The SELECT statement */
- Vdbe *v, /* Generate code into this VDBE */
- int nColumn, /* Number of columns of data */
- int eDest, /* Write the sorted results here */
- int iParm /* Optional parameter associated with eDest */
-){
- int end1 = sqliteVdbeMakeLabel(v);
- int end2 = sqliteVdbeMakeLabel(v);
- int addr;
- if( eDest==SRT_Sorter ) return;
- sqliteVdbeAddOp(v, OP_Sort, 0, 0);
- addr = sqliteVdbeAddOp(v, OP_SortNext, 0, end1);
- if( p->iOffset>=0 ){
- sqliteVdbeAddOp(v, OP_MemIncr, p->iOffset, addr+4);
- sqliteVdbeAddOp(v, OP_Pop, 1, 0);
- sqliteVdbeAddOp(v, OP_Goto, 0, addr);
- }
- if( p->iLimit>=0 ){
- sqliteVdbeAddOp(v, OP_MemIncr, p->iLimit, end2);
- }
- switch( eDest ){
- case SRT_Callback: {
- sqliteVdbeAddOp(v, OP_SortCallback, nColumn, 0);
- break;
- }
- case SRT_Table:
- case SRT_TempTable: {
- sqliteVdbeAddOp(v, OP_NewRecno, iParm, 0);
- sqliteVdbeAddOp(v, OP_Pull, 1, 0);
- sqliteVdbeAddOp(v, OP_PutIntKey, iParm, 0);
- break;
- }
- case SRT_Set: {
- assert( nColumn==1 );
- sqliteVdbeAddOp(v, OP_NotNull, -1, sqliteVdbeCurrentAddr(v)+3);
- sqliteVdbeAddOp(v, OP_Pop, 1, 0);
- sqliteVdbeAddOp(v, OP_Goto, 0, sqliteVdbeCurrentAddr(v)+3);
- sqliteVdbeAddOp(v, OP_String, 0, 0);
- sqliteVdbeAddOp(v, OP_PutStrKey, iParm, 0);
- break;
- }
- case SRT_Mem: {
- assert( nColumn==1 );
- sqliteVdbeAddOp(v, OP_MemStore, iParm, 1);
- sqliteVdbeAddOp(v, OP_Goto, 0, end1);
- break;
- }
- case SRT_Subroutine: {
- int i;
- for(i=0; i<nColumn; i++){
- sqliteVdbeAddOp(v, OP_Column, -1-i, i);
- }
- sqliteVdbeAddOp(v, OP_Gosub, 0, iParm);
- sqliteVdbeAddOp(v, OP_Pop, 1, 0);
- break;
- }
- default: {
- /* Do nothing */
- break;
- }
- }
- sqliteVdbeAddOp(v, OP_Goto, 0, addr);
- sqliteVdbeResolveLabel(v, end2);
- sqliteVdbeAddOp(v, OP_Pop, 1, 0);
- sqliteVdbeResolveLabel(v, end1);
- sqliteVdbeAddOp(v, OP_SortReset, 0, 0);
-}
-
-/*
-** Generate code that will tell the VDBE the datatypes of
-** columns in the result set.
-**
-** This routine only generates code if the "PRAGMA show_datatypes=on"
-** has been executed. The datatypes are reported out in the azCol
-** parameter to the callback function. The first N azCol[] entries
-** are the names of the columns, and the second N entries are the
-** datatypes for the columns.
-**
-** The "datatype" for a result that is a column of a type is the
-** datatype definition extracted from the CREATE TABLE statement.
-** The datatype for an expression is either TEXT or NUMERIC. The
-** datatype for a ROWID field is INTEGER.
-*/
-static void generateColumnTypes(
- Parse *pParse, /* Parser context */
- SrcList *pTabList, /* List of tables */
- ExprList *pEList /* Expressions defining the result set */
-){
- Vdbe *v = pParse->pVdbe;
- int i, j;
- for(i=0; i<pEList->nExpr; i++){
- Expr *p = pEList->a[i].pExpr;
- char *zType = 0;
- if( p==0 ) continue;
- if( p->op==TK_COLUMN && pTabList ){
- Table *pTab;
- int iCol = p->iColumn;
- for(j=0; j<pTabList->nSrc && pTabList->a[j].iCursor!=p->iTable; j++){}
- assert( j<pTabList->nSrc );
- pTab = pTabList->a[j].pTab;
- if( iCol<0 ) iCol = pTab->iPKey;
- assert( iCol==-1 || (iCol>=0 && iCol<pTab->nCol) );
- if( iCol<0 ){
- zType = "INTEGER";
- }else{
- zType = pTab->aCol[iCol].zType;
- }
- }else{
- if( sqliteExprType(p)==SQLITE_SO_TEXT ){
- zType = "TEXT";
- }else{
- zType = "NUMERIC";
- }
- }
- sqliteVdbeOp3(v, OP_ColumnName, i + pEList->nExpr, 0, zType, 0);
- }
-}
-
-/*
-** Generate code that will tell the VDBE the names of columns
-** in the result set. This information is used to provide the
-** azCol[] values in the callback.
-*/
-static void generateColumnNames(
- Parse *pParse, /* Parser context */
- SrcList *pTabList, /* List of tables */
- ExprList *pEList /* Expressions defining the result set */
-){
- Vdbe *v = pParse->pVdbe;
- int i, j;
- sqlite *db = pParse->db;
- int fullNames, shortNames;
-
- assert( v!=0 );
- if( pParse->colNamesSet || v==0 || sqlite_malloc_failed ) return;
- pParse->colNamesSet = 1;
- fullNames = (db->flags & SQLITE_FullColNames)!=0;
- shortNames = (db->flags & SQLITE_ShortColNames)!=0;
- for(i=0; i<pEList->nExpr; i++){
- Expr *p;
- int p2 = i==pEList->nExpr-1;
- p = pEList->a[i].pExpr;
- if( p==0 ) continue;
- if( pEList->a[i].zName ){
- char *zName = pEList->a[i].zName;
- sqliteVdbeOp3(v, OP_ColumnName, i, p2, zName, 0);
- continue;
- }
- if( p->op==TK_COLUMN && pTabList ){
- Table *pTab;
- char *zCol;
- int iCol = p->iColumn;
- for(j=0; j<pTabList->nSrc && pTabList->a[j].iCursor!=p->iTable; j++){}
- assert( j<pTabList->nSrc );
- pTab = pTabList->a[j].pTab;
- if( iCol<0 ) iCol = pTab->iPKey;
- assert( iCol==-1 || (iCol>=0 && iCol<pTab->nCol) );
- if( iCol<0 ){
- zCol = "_ROWID_";
- }else{
- zCol = pTab->aCol[iCol].zName;
- }
- if( !shortNames && !fullNames && p->span.z && p->span.z[0] ){
- int addr = sqliteVdbeOp3(v,OP_ColumnName, i, p2, p->span.z, p->span.n);
- sqliteVdbeCompressSpace(v, addr);
- }else if( fullNames || (!shortNames && pTabList->nSrc>1) ){
- char *zName = 0;
- char *zTab;
-
- zTab = pTabList->a[j].zAlias;
- if( fullNames || zTab==0 ) zTab = pTab->zName;
- sqliteSetString(&zName, zTab, ".", zCol, 0);
- sqliteVdbeOp3(v, OP_ColumnName, i, p2, zName, P3_DYNAMIC);
- }else{
- sqliteVdbeOp3(v, OP_ColumnName, i, p2, zCol, 0);
- }
- }else if( p->span.z && p->span.z[0] ){
- int addr = sqliteVdbeOp3(v,OP_ColumnName, i, p2, p->span.z, p->span.n);
- sqliteVdbeCompressSpace(v, addr);
- }else{
- char zName[30];
- assert( p->op!=TK_COLUMN || pTabList==0 );
- sprintf(zName, "column%d", i+1);
- sqliteVdbeOp3(v, OP_ColumnName, i, p2, zName, 0);
- }
- }
-}
-
-/*
-** Name of the connection operator, used for error messages.
-*/
-static const char *selectOpName(int id){
- char *z;
- switch( id ){
- case TK_ALL: z = "UNION ALL"; break;
- case TK_INTERSECT: z = "INTERSECT"; break;
- case TK_EXCEPT: z = "EXCEPT"; break;
- default: z = "UNION"; break;
- }
- return z;
-}
-
-/*
-** Forward declaration
-*/
-static int fillInColumnList(Parse*, Select*);
-
-/*
-** Given a SELECT statement, generate a Table structure that describes
-** the result set of that SELECT.
-*/
-Table *sqliteResultSetOfSelect(Parse *pParse, char *zTabName, Select *pSelect){
- Table *pTab;
- int i, j;
- ExprList *pEList;
- Column *aCol;
-
- if( fillInColumnList(pParse, pSelect) ){
- return 0;
- }
- pTab = sqliteMalloc( sizeof(Table) );
- if( pTab==0 ){
- return 0;
- }
- pTab->zName = zTabName ? sqliteStrDup(zTabName) : 0;
- pEList = pSelect->pEList;
- pTab->nCol = pEList->nExpr;
- assert( pTab->nCol>0 );
- pTab->aCol = aCol = sqliteMalloc( sizeof(pTab->aCol[0])*pTab->nCol );
- for(i=0; i<pTab->nCol; i++){
- Expr *p, *pR;
- if( pEList->a[i].zName ){
- aCol[i].zName = sqliteStrDup(pEList->a[i].zName);
- }else if( (p=pEList->a[i].pExpr)->op==TK_DOT
- && (pR=p->pRight)!=0 && pR->token.z && pR->token.z[0] ){
- int cnt;
- sqliteSetNString(&aCol[i].zName, pR->token.z, pR->token.n, 0);
- for(j=cnt=0; j<i; j++){
- if( sqliteStrICmp(aCol[j].zName, aCol[i].zName)==0 ){
- int n;
- char zBuf[30];
- sprintf(zBuf,"_%d",++cnt);
- n = strlen(zBuf);
- sqliteSetNString(&aCol[i].zName, pR->token.z, pR->token.n, zBuf, n,0);
- j = -1;
- }
- }
- }else if( p->span.z && p->span.z[0] ){
- sqliteSetNString(&pTab->aCol[i].zName, p->span.z, p->span.n, 0);
- }else{
- char zBuf[30];
- sprintf(zBuf, "column%d", i+1);
- pTab->aCol[i].zName = sqliteStrDup(zBuf);
- }
- }
- pTab->iPKey = -1;
- return pTab;
-}
-
-/*
-** For the given SELECT statement, do three things.
-**
-** (1) Fill in the pTabList->a[].pTab fields in the SrcList that
-** defines the set of tables that should be scanned. For views,
-** fill pTabList->a[].pSelect with a copy of the SELECT statement
-** that implements the view. A copy is made of the view's SELECT
-** statement so that we can freely modify or delete that statement
-** without worrying about messing up the presistent representation
-** of the view.
-**
-** (2) Add terms to the WHERE clause to accomodate the NATURAL keyword
-** on joins and the ON and USING clause of joins.
-**
-** (3) Scan the list of columns in the result set (pEList) looking
-** for instances of the "*" operator or the TABLE.* operator.
-** If found, expand each "*" to be every column in every table
-** and TABLE.* to be every column in TABLE.
-**
-** Return 0 on success. If there are problems, leave an error message
-** in pParse and return non-zero.
-*/
-static int fillInColumnList(Parse *pParse, Select *p){
- int i, j, k, rc;
- SrcList *pTabList;
- ExprList *pEList;
- Table *pTab;
-
- if( p==0 || p->pSrc==0 ) return 1;
- pTabList = p->pSrc;
- pEList = p->pEList;
-
- /* Look up every table in the table list.
- */
- for(i=0; i<pTabList->nSrc; i++){
- if( pTabList->a[i].pTab ){
- /* This routine has run before! No need to continue */
- return 0;
- }
- if( pTabList->a[i].zName==0 ){
- /* A sub-query in the FROM clause of a SELECT */
- assert( pTabList->a[i].pSelect!=0 );
- if( pTabList->a[i].zAlias==0 ){
- char zFakeName[60];
- sprintf(zFakeName, "sqlite_subquery_%p_",
- (void*)pTabList->a[i].pSelect);
- sqliteSetString(&pTabList->a[i].zAlias, zFakeName, 0);
- }
- pTabList->a[i].pTab = pTab =
- sqliteResultSetOfSelect(pParse, pTabList->a[i].zAlias,
- pTabList->a[i].pSelect);
- if( pTab==0 ){
- return 1;
- }
- /* The isTransient flag indicates that the Table structure has been
- ** dynamically allocated and may be freed at any time. In other words,
- ** pTab is not pointing to a persistent table structure that defines
- ** part of the schema. */
- pTab->isTransient = 1;
- }else{
- /* An ordinary table or view name in the FROM clause */
- pTabList->a[i].pTab = pTab =
- sqliteLocateTable(pParse,pTabList->a[i].zName,pTabList->a[i].zDatabase);
- if( pTab==0 ){
- return 1;
- }
- if( pTab->pSelect ){
- /* We reach here if the named table is a really a view */
- if( sqliteViewGetColumnNames(pParse, pTab) ){
- return 1;
- }
- /* If pTabList->a[i].pSelect!=0 it means we are dealing with a
- ** view within a view. The SELECT structure has already been
- ** copied by the outer view so we can skip the copy step here
- ** in the inner view.
- */
- if( pTabList->a[i].pSelect==0 ){
- pTabList->a[i].pSelect = sqliteSelectDup(pTab->pSelect);
- }
- }
- }
- }
-
- /* Process NATURAL keywords, and ON and USING clauses of joins.
- */
- if( sqliteProcessJoin(pParse, p) ) return 1;
-
- /* For every "*" that occurs in the column list, insert the names of
- ** all columns in all tables. And for every TABLE.* insert the names
- ** of all columns in TABLE. The parser inserted a special expression
- ** with the TK_ALL operator for each "*" that it found in the column list.
- ** The following code just has to locate the TK_ALL expressions and expand
- ** each one to the list of all columns in all tables.
- **
- ** The first loop just checks to see if there are any "*" operators
- ** that need expanding.
- */
- for(k=0; k<pEList->nExpr; k++){
- Expr *pE = pEList->a[k].pExpr;
- if( pE->op==TK_ALL ) break;
- if( pE->op==TK_DOT && pE->pRight && pE->pRight->op==TK_ALL
- && pE->pLeft && pE->pLeft->op==TK_ID ) break;
- }
- rc = 0;
- if( k<pEList->nExpr ){
- /*
- ** If we get here it means the result set contains one or more "*"
- ** operators that need to be expanded. Loop through each expression
- ** in the result set and expand them one by one.
- */
- struct ExprList_item *a = pEList->a;
- ExprList *pNew = 0;
- for(k=0; k<pEList->nExpr; k++){
- Expr *pE = a[k].pExpr;
- if( pE->op!=TK_ALL &&
- (pE->op!=TK_DOT || pE->pRight==0 || pE->pRight->op!=TK_ALL) ){
- /* This particular expression does not need to be expanded.
- */
- pNew = sqliteExprListAppend(pNew, a[k].pExpr, 0);
- pNew->a[pNew->nExpr-1].zName = a[k].zName;
- a[k].pExpr = 0;
- a[k].zName = 0;
- }else{
- /* This expression is a "*" or a "TABLE.*" and needs to be
- ** expanded. */
- int tableSeen = 0; /* Set to 1 when TABLE matches */
- Token *pName; /* text of name of TABLE */
- if( pE->op==TK_DOT && pE->pLeft ){
- pName = &pE->pLeft->token;
- }else{
- pName = 0;
- }
- for(i=0; i<pTabList->nSrc; i++){
- Table *pTab = pTabList->a[i].pTab;
- char *zTabName = pTabList->a[i].zAlias;
- if( zTabName==0 || zTabName[0]==0 ){
- zTabName = pTab->zName;
- }
- if( pName && (zTabName==0 || zTabName[0]==0 ||
- sqliteStrNICmp(pName->z, zTabName, pName->n)!=0 ||
- zTabName[pName->n]!=0) ){
- continue;
- }
- tableSeen = 1;
- for(j=0; j<pTab->nCol; j++){
- Expr *pExpr, *pLeft, *pRight;
- char *zName = pTab->aCol[j].zName;
-
- if( i>0 && (pTabList->a[i-1].jointype & JT_NATURAL)!=0 &&
- columnIndex(pTabList->a[i-1].pTab, zName)>=0 ){
- /* In a NATURAL join, omit the join columns from the
- ** table on the right */
- continue;
- }
- if( i>0 && sqliteIdListIndex(pTabList->a[i-1].pUsing, zName)>=0 ){
- /* In a join with a USING clause, omit columns in the
- ** using clause from the table on the right. */
- continue;
- }
- pRight = sqliteExpr(TK_ID, 0, 0, 0);
- if( pRight==0 ) break;
- pRight->token.z = zName;
- pRight->token.n = strlen(zName);
- pRight->token.dyn = 0;
- if( zTabName && pTabList->nSrc>1 ){
- pLeft = sqliteExpr(TK_ID, 0, 0, 0);
- pExpr = sqliteExpr(TK_DOT, pLeft, pRight, 0);
- if( pExpr==0 ) break;
- pLeft->token.z = zTabName;
- pLeft->token.n = strlen(zTabName);
- pLeft->token.dyn = 0;
- sqliteSetString((char**)&pExpr->span.z, zTabName, ".", zName, 0);
- pExpr->span.n = strlen(pExpr->span.z);
- pExpr->span.dyn = 1;
- pExpr->token.z = 0;
- pExpr->token.n = 0;
- pExpr->token.dyn = 0;
- }else{
- pExpr = pRight;
- pExpr->span = pExpr->token;
- }
- pNew = sqliteExprListAppend(pNew, pExpr, 0);
- }
- }
- if( !tableSeen ){
- if( pName ){
- sqliteErrorMsg(pParse, "no such table: %T", pName);
- }else{
- sqliteErrorMsg(pParse, "no tables specified");
- }
- rc = 1;
- }
- }
- }
- sqliteExprListDelete(pEList);
- p->pEList = pNew;
- }
- return rc;
-}
-
-/*
-** This routine recursively unlinks the Select.pSrc.a[].pTab pointers
-** in a select structure. It just sets the pointers to NULL. This
-** routine is recursive in the sense that if the Select.pSrc.a[].pSelect
-** pointer is not NULL, this routine is called recursively on that pointer.
-**
-** This routine is called on the Select structure that defines a
-** VIEW in order to undo any bindings to tables. This is necessary
-** because those tables might be DROPed by a subsequent SQL command.
-** If the bindings are not removed, then the Select.pSrc->a[].pTab field
-** will be left pointing to a deallocated Table structure after the
-** DROP and a coredump will occur the next time the VIEW is used.
-*/
-void sqliteSelectUnbind(Select *p){
- int i;
- SrcList *pSrc = p->pSrc;
- Table *pTab;
- if( p==0 ) return;
- for(i=0; i<pSrc->nSrc; i++){
- if( (pTab = pSrc->a[i].pTab)!=0 ){
- if( pTab->isTransient ){
- sqliteDeleteTable(0, pTab);
- }
- pSrc->a[i].pTab = 0;
- if( pSrc->a[i].pSelect ){
- sqliteSelectUnbind(pSrc->a[i].pSelect);
- }
- }
- }
-}
-
-/*
-** This routine associates entries in an ORDER BY expression list with
-** columns in a result. For each ORDER BY expression, the opcode of
-** the top-level node is changed to TK_COLUMN and the iColumn value of
-** the top-level node is filled in with column number and the iTable
-** value of the top-level node is filled with iTable parameter.
-**
-** If there are prior SELECT clauses, they are processed first. A match
-** in an earlier SELECT takes precedence over a later SELECT.
-**
-** Any entry that does not match is flagged as an error. The number
-** of errors is returned.
-**
-** This routine does NOT correctly initialize the Expr.dataType field
-** of the ORDER BY expressions. The multiSelectSortOrder() routine
-** must be called to do that after the individual select statements
-** have all been analyzed. This routine is unable to compute Expr.dataType
-** because it must be called before the individual select statements
-** have been analyzed.
-*/
-static int matchOrderbyToColumn(
- Parse *pParse, /* A place to leave error messages */
- Select *pSelect, /* Match to result columns of this SELECT */
- ExprList *pOrderBy, /* The ORDER BY values to match against columns */
- int iTable, /* Insert this value in iTable */
- int mustComplete /* If TRUE all ORDER BYs must match */
-){
- int nErr = 0;
- int i, j;
- ExprList *pEList;
-
- if( pSelect==0 || pOrderBy==0 ) return 1;
- if( mustComplete ){
- for(i=0; i<pOrderBy->nExpr; i++){ pOrderBy->a[i].done = 0; }
- }
- if( fillInColumnList(pParse, pSelect) ){
- return 1;
- }
- if( pSelect->pPrior ){
- if( matchOrderbyToColumn(pParse, pSelect->pPrior, pOrderBy, iTable, 0) ){
- return 1;
- }
- }
- pEList = pSelect->pEList;
- for(i=0; i<pOrderBy->nExpr; i++){
- Expr *pE = pOrderBy->a[i].pExpr;
- int iCol = -1;
- if( pOrderBy->a[i].done ) continue;
- if( sqliteExprIsInteger(pE, &iCol) ){
- if( iCol<=0 || iCol>pEList->nExpr ){
- sqliteErrorMsg(pParse,
- "ORDER BY position %d should be between 1 and %d",
- iCol, pEList->nExpr);
- nErr++;
- break;
- }
- if( !mustComplete ) continue;
- iCol--;
- }
- for(j=0; iCol<0 && j<pEList->nExpr; j++){
- if( pEList->a[j].zName && (pE->op==TK_ID || pE->op==TK_STRING) ){
- char *zName, *zLabel;
- zName = pEList->a[j].zName;
- assert( pE->token.z );
- zLabel = sqliteStrNDup(pE->token.z, pE->token.n);
- sqliteDequote(zLabel);
- if( sqliteStrICmp(zName, zLabel)==0 ){
- iCol = j;
- }
- sqliteFree(zLabel);
- }
- if( iCol<0 && sqliteExprCompare(pE, pEList->a[j].pExpr) ){
- iCol = j;
- }
- }
- if( iCol>=0 ){
- pE->op = TK_COLUMN;
- pE->iColumn = iCol;
- pE->iTable = iTable;
- pOrderBy->a[i].done = 1;
- }
- if( iCol<0 && mustComplete ){
- sqliteErrorMsg(pParse,
- "ORDER BY term number %d does not match any result column", i+1);
- nErr++;
- break;
- }
- }
- return nErr;
-}
-
-/*
-** Get a VDBE for the given parser context. Create a new one if necessary.
-** If an error occurs, return NULL and leave a message in pParse.
-*/
-Vdbe *sqliteGetVdbe(Parse *pParse){
- Vdbe *v = pParse->pVdbe;
- if( v==0 ){
- v = pParse->pVdbe = sqliteVdbeCreate(pParse->db);
- }
- return v;
-}
-
-/*
-** This routine sets the Expr.dataType field on all elements of
-** the pOrderBy expression list. The pOrderBy list will have been
-** set up by matchOrderbyToColumn(). Hence each expression has
-** a TK_COLUMN as its root node. The Expr.iColumn refers to a
-** column in the result set. The datatype is set to SQLITE_SO_TEXT
-** if the corresponding column in p and every SELECT to the left of
-** p has a datatype of SQLITE_SO_TEXT. If the cooressponding column
-** in p or any of the left SELECTs is SQLITE_SO_NUM, then the datatype
-** of the order-by expression is set to SQLITE_SO_NUM.
-**
-** Examples:
-**
-** CREATE TABLE one(a INTEGER, b TEXT);
-** CREATE TABLE two(c VARCHAR(5), d FLOAT);
-**
-** SELECT b, b FROM one UNION SELECT d, c FROM two ORDER BY 1, 2;
-**
-** The primary sort key will use SQLITE_SO_NUM because the "d" in
-** the second SELECT is numeric. The 1st column of the first SELECT
-** is text but that does not matter because a numeric always overrides
-** a text.
-**
-** The secondary key will use the SQLITE_SO_TEXT sort order because
-** both the (second) "b" in the first SELECT and the "c" in the second
-** SELECT have a datatype of text.
-*/
-static void multiSelectSortOrder(Select *p, ExprList *pOrderBy){
- int i;
- ExprList *pEList;
- if( pOrderBy==0 ) return;
- if( p==0 ){
- for(i=0; i<pOrderBy->nExpr; i++){
- pOrderBy->a[i].pExpr->dataType = SQLITE_SO_TEXT;
- }
- return;
- }
- multiSelectSortOrder(p->pPrior, pOrderBy);
- pEList = p->pEList;
- for(i=0; i<pOrderBy->nExpr; i++){
- Expr *pE = pOrderBy->a[i].pExpr;
- if( pE->dataType==SQLITE_SO_NUM ) continue;
- assert( pE->iColumn>=0 );
- if( pEList->nExpr>pE->iColumn ){
- pE->dataType = sqliteExprType(pEList->a[pE->iColumn].pExpr);
- }
- }
-}
-
-/*
-** Compute the iLimit and iOffset fields of the SELECT based on the
-** nLimit and nOffset fields. nLimit and nOffset hold the integers
-** that appear in the original SQL statement after the LIMIT and OFFSET
-** keywords. Or that hold -1 and 0 if those keywords are omitted.
-** iLimit and iOffset are the integer memory register numbers for
-** counters used to compute the limit and offset. If there is no
-** limit and/or offset, then iLimit and iOffset are negative.
-**
-** This routine changes the values if iLimit and iOffset only if
-** a limit or offset is defined by nLimit and nOffset. iLimit and
-** iOffset should have been preset to appropriate default values
-** (usually but not always -1) prior to calling this routine.
-** Only if nLimit>=0 or nOffset>0 do the limit registers get
-** redefined. The UNION ALL operator uses this property to force
-** the reuse of the same limit and offset registers across multiple
-** SELECT statements.
-*/
-static void computeLimitRegisters(Parse *pParse, Select *p){
- /*
- ** If the comparison is p->nLimit>0 then "LIMIT 0" shows
- ** all rows. It is the same as no limit. If the comparision is
- ** p->nLimit>=0 then "LIMIT 0" show no rows at all.
- ** "LIMIT -1" always shows all rows. There is some
- ** contraversy about what the correct behavior should be.
- ** The current implementation interprets "LIMIT 0" to mean
- ** no rows.
- */
- if( p->nLimit>=0 ){
- int iMem = pParse->nMem++;
- Vdbe *v = sqliteGetVdbe(pParse);
- if( v==0 ) return;
- sqliteVdbeAddOp(v, OP_Integer, -p->nLimit, 0);
- sqliteVdbeAddOp(v, OP_MemStore, iMem, 1);
- p->iLimit = iMem;
- }
- if( p->nOffset>0 ){
- int iMem = pParse->nMem++;
- Vdbe *v = sqliteGetVdbe(pParse);
- if( v==0 ) return;
- sqliteVdbeAddOp(v, OP_Integer, -p->nOffset, 0);
- sqliteVdbeAddOp(v, OP_MemStore, iMem, 1);
- p->iOffset = iMem;
- }
-}
-
-/*
-** This routine is called to process a query that is really the union
-** or intersection of two or more separate queries.
-**
-** "p" points to the right-most of the two queries. the query on the
-** left is p->pPrior. The left query could also be a compound query
-** in which case this routine will be called recursively.
-**
-** The results of the total query are to be written into a destination
-** of type eDest with parameter iParm.
-**
-** Example 1: Consider a three-way compound SQL statement.
-**
-** SELECT a FROM t1 UNION SELECT b FROM t2 UNION SELECT c FROM t3
-**
-** This statement is parsed up as follows:
-**
-** SELECT c FROM t3
-** |
-** `-----> SELECT b FROM t2
-** |
-** `------> SELECT a FROM t1
-**
-** The arrows in the diagram above represent the Select.pPrior pointer.
-** So if this routine is called with p equal to the t3 query, then
-** pPrior will be the t2 query. p->op will be TK_UNION in this case.
-**
-** Notice that because of the way SQLite parses compound SELECTs, the
-** individual selects always group from left to right.
-*/
-static int multiSelect(Parse *pParse, Select *p, int eDest, int iParm){
- int rc; /* Success code from a subroutine */
- Select *pPrior; /* Another SELECT immediately to our left */
- Vdbe *v; /* Generate code to this VDBE */
-
- /* Make sure there is no ORDER BY or LIMIT clause on prior SELECTs. Only
- ** the last SELECT in the series may have an ORDER BY or LIMIT.
- */
- if( p==0 || p->pPrior==0 ) return 1;
- pPrior = p->pPrior;
- if( pPrior->pOrderBy ){
- sqliteErrorMsg(pParse,"ORDER BY clause should come after %s not before",
- selectOpName(p->op));
- return 1;
- }
- if( pPrior->nLimit>=0 || pPrior->nOffset>0 ){
- sqliteErrorMsg(pParse,"LIMIT clause should come after %s not before",
- selectOpName(p->op));
- return 1;
- }
-
- /* Make sure we have a valid query engine. If not, create a new one.
- */
- v = sqliteGetVdbe(pParse);
- if( v==0 ) return 1;
-
- /* Create the destination temporary table if necessary
- */
- if( eDest==SRT_TempTable ){
- sqliteVdbeAddOp(v, OP_OpenTemp, iParm, 0);
- eDest = SRT_Table;
- }
-
- /* Generate code for the left and right SELECT statements.
- */
- switch( p->op ){
- case TK_ALL: {
- if( p->pOrderBy==0 ){
- pPrior->nLimit = p->nLimit;
- pPrior->nOffset = p->nOffset;
- rc = sqliteSelect(pParse, pPrior, eDest, iParm, 0, 0, 0);
- if( rc ) return rc;
- p->pPrior = 0;
- p->iLimit = pPrior->iLimit;
- p->iOffset = pPrior->iOffset;
- p->nLimit = -1;
- p->nOffset = 0;
- rc = sqliteSelect(pParse, p, eDest, iParm, 0, 0, 0);
- p->pPrior = pPrior;
- if( rc ) return rc;
- break;
- }
- /* For UNION ALL ... ORDER BY fall through to the next case */
- }
- case TK_EXCEPT:
- case TK_UNION: {
- int unionTab; /* Cursor number of the temporary table holding result */
- int op; /* One of the SRT_ operations to apply to self */
- int priorOp; /* The SRT_ operation to apply to prior selects */
- int nLimit, nOffset; /* Saved values of p->nLimit and p->nOffset */
- ExprList *pOrderBy; /* The ORDER BY clause for the right SELECT */
-
- priorOp = p->op==TK_ALL ? SRT_Table : SRT_Union;
- if( eDest==priorOp && p->pOrderBy==0 && p->nLimit<0 && p->nOffset==0 ){
- /* We can reuse a temporary table generated by a SELECT to our
- ** right.
- */
- unionTab = iParm;
- }else{
- /* We will need to create our own temporary table to hold the
- ** intermediate results.
- */
- unionTab = pParse->nTab++;
- if( p->pOrderBy
- && matchOrderbyToColumn(pParse, p, p->pOrderBy, unionTab, 1) ){
- return 1;
- }
- if( p->op!=TK_ALL ){
- sqliteVdbeAddOp(v, OP_OpenTemp, unionTab, 1);
- sqliteVdbeAddOp(v, OP_KeyAsData, unionTab, 1);
- }else{
- sqliteVdbeAddOp(v, OP_OpenTemp, unionTab, 0);
- }
- }
-
- /* Code the SELECT statements to our left
- */
- rc = sqliteSelect(pParse, pPrior, priorOp, unionTab, 0, 0, 0);
- if( rc ) return rc;
-
- /* Code the current SELECT statement
- */
- switch( p->op ){
- case TK_EXCEPT: op = SRT_Except; break;
- case TK_UNION: op = SRT_Union; break;
- case TK_ALL: op = SRT_Table; break;
- }
- p->pPrior = 0;
- pOrderBy = p->pOrderBy;
- p->pOrderBy = 0;
- nLimit = p->nLimit;
- p->nLimit = -1;
- nOffset = p->nOffset;
- p->nOffset = 0;
- rc = sqliteSelect(pParse, p, op, unionTab, 0, 0, 0);
- p->pPrior = pPrior;
- p->pOrderBy = pOrderBy;
- p->nLimit = nLimit;
- p->nOffset = nOffset;
- if( rc ) return rc;
-
- /* Convert the data in the temporary table into whatever form
- ** it is that we currently need.
- */
- if( eDest!=priorOp || unionTab!=iParm ){
- int iCont, iBreak, iStart;
- assert( p->pEList );
- if( eDest==SRT_Callback ){
- generateColumnNames(pParse, 0, p->pEList);
- generateColumnTypes(pParse, p->pSrc, p->pEList);
- }
- iBreak = sqliteVdbeMakeLabel(v);
- iCont = sqliteVdbeMakeLabel(v);
- sqliteVdbeAddOp(v, OP_Rewind, unionTab, iBreak);
- computeLimitRegisters(pParse, p);
- iStart = sqliteVdbeCurrentAddr(v);
- multiSelectSortOrder(p, p->pOrderBy);
- rc = selectInnerLoop(pParse, p, p->pEList, unionTab, p->pEList->nExpr,
- p->pOrderBy, -1, eDest, iParm,
- iCont, iBreak);
- if( rc ) return 1;
- sqliteVdbeResolveLabel(v, iCont);
- sqliteVdbeAddOp(v, OP_Next, unionTab, iStart);
- sqliteVdbeResolveLabel(v, iBreak);
- sqliteVdbeAddOp(v, OP_Close, unionTab, 0);
- if( p->pOrderBy ){
- generateSortTail(p, v, p->pEList->nExpr, eDest, iParm);
- }
- }
- break;
- }
- case TK_INTERSECT: {
- int tab1, tab2;
- int iCont, iBreak, iStart;
- int nLimit, nOffset;
-
- /* INTERSECT is different from the others since it requires
- ** two temporary tables. Hence it has its own case. Begin
- ** by allocating the tables we will need.
- */
- tab1 = pParse->nTab++;
- tab2 = pParse->nTab++;
- if( p->pOrderBy && matchOrderbyToColumn(pParse,p,p->pOrderBy,tab1,1) ){
- return 1;
- }
- sqliteVdbeAddOp(v, OP_OpenTemp, tab1, 1);
- sqliteVdbeAddOp(v, OP_KeyAsData, tab1, 1);
-
- /* Code the SELECTs to our left into temporary table "tab1".
- */
- rc = sqliteSelect(pParse, pPrior, SRT_Union, tab1, 0, 0, 0);
- if( rc ) return rc;
-
- /* Code the current SELECT into temporary table "tab2"
- */
- sqliteVdbeAddOp(v, OP_OpenTemp, tab2, 1);
- sqliteVdbeAddOp(v, OP_KeyAsData, tab2, 1);
- p->pPrior = 0;
- nLimit = p->nLimit;
- p->nLimit = -1;
- nOffset = p->nOffset;
- p->nOffset = 0;
- rc = sqliteSelect(pParse, p, SRT_Union, tab2, 0, 0, 0);
- p->pPrior = pPrior;
- p->nLimit = nLimit;
- p->nOffset = nOffset;
- if( rc ) return rc;
-
- /* Generate code to take the intersection of the two temporary
- ** tables.
- */
- assert( p->pEList );
- if( eDest==SRT_Callback ){
- generateColumnNames(pParse, 0, p->pEList);
- generateColumnTypes(pParse, p->pSrc, p->pEList);
- }
- iBreak = sqliteVdbeMakeLabel(v);
- iCont = sqliteVdbeMakeLabel(v);
- sqliteVdbeAddOp(v, OP_Rewind, tab1, iBreak);
- computeLimitRegisters(pParse, p);
- iStart = sqliteVdbeAddOp(v, OP_FullKey, tab1, 0);
- sqliteVdbeAddOp(v, OP_NotFound, tab2, iCont);
- multiSelectSortOrder(p, p->pOrderBy);
- rc = selectInnerLoop(pParse, p, p->pEList, tab1, p->pEList->nExpr,
- p->pOrderBy, -1, eDest, iParm,
- iCont, iBreak);
- if( rc ) return 1;
- sqliteVdbeResolveLabel(v, iCont);
- sqliteVdbeAddOp(v, OP_Next, tab1, iStart);
- sqliteVdbeResolveLabel(v, iBreak);
- sqliteVdbeAddOp(v, OP_Close, tab2, 0);
- sqliteVdbeAddOp(v, OP_Close, tab1, 0);
- if( p->pOrderBy ){
- generateSortTail(p, v, p->pEList->nExpr, eDest, iParm);
- }
- break;
- }
- }
- assert( p->pEList && pPrior->pEList );
- if( p->pEList->nExpr!=pPrior->pEList->nExpr ){
- sqliteErrorMsg(pParse, "SELECTs to the left and right of %s"
- " do not have the same number of result columns", selectOpName(p->op));
- return 1;
- }
- return 0;
-}
-
-/*
-** Scan through the expression pExpr. Replace every reference to
-** a column in table number iTable with a copy of the iColumn-th
-** entry in pEList. (But leave references to the ROWID column
-** unchanged.)
-**
-** This routine is part of the flattening procedure. A subquery
-** whose result set is defined by pEList appears as entry in the
-** FROM clause of a SELECT such that the VDBE cursor assigned to that
-** FORM clause entry is iTable. This routine make the necessary
-** changes to pExpr so that it refers directly to the source table
-** of the subquery rather the result set of the subquery.
-*/
-static void substExprList(ExprList*,int,ExprList*); /* Forward Decl */
-static void substExpr(Expr *pExpr, int iTable, ExprList *pEList){
- if( pExpr==0 ) return;
- if( pExpr->op==TK_COLUMN && pExpr->iTable==iTable ){
- if( pExpr->iColumn<0 ){
- pExpr->op = TK_NULL;
- }else{
- Expr *pNew;
- assert( pEList!=0 && pExpr->iColumn<pEList->nExpr );
- assert( pExpr->pLeft==0 && pExpr->pRight==0 && pExpr->pList==0 );
- pNew = pEList->a[pExpr->iColumn].pExpr;
- assert( pNew!=0 );
- pExpr->op = pNew->op;
- pExpr->dataType = pNew->dataType;
- assert( pExpr->pLeft==0 );
- pExpr->pLeft = sqliteExprDup(pNew->pLeft);
- assert( pExpr->pRight==0 );
- pExpr->pRight = sqliteExprDup(pNew->pRight);
- assert( pExpr->pList==0 );
- pExpr->pList = sqliteExprListDup(pNew->pList);
- pExpr->iTable = pNew->iTable;
- pExpr->iColumn = pNew->iColumn;
- pExpr->iAgg = pNew->iAgg;
- sqliteTokenCopy(&pExpr->token, &pNew->token);
- sqliteTokenCopy(&pExpr->span, &pNew->span);
- }
- }else{
- substExpr(pExpr->pLeft, iTable, pEList);
- substExpr(pExpr->pRight, iTable, pEList);
- substExprList(pExpr->pList, iTable, pEList);
- }
-}
-static void
-substExprList(ExprList *pList, int iTable, ExprList *pEList){
- int i;
- if( pList==0 ) return;
- for(i=0; i<pList->nExpr; i++){
- substExpr(pList->a[i].pExpr, iTable, pEList);
- }
-}
-
-/*
-** This routine attempts to flatten subqueries in order to speed
-** execution. It returns 1 if it makes changes and 0 if no flattening
-** occurs.
-**
-** To understand the concept of flattening, consider the following
-** query:
-**
-** SELECT a FROM (SELECT x+y AS a FROM t1 WHERE z<100) WHERE a>5
-**
-** The default way of implementing this query is to execute the
-** subquery first and store the results in a temporary table, then
-** run the outer query on that temporary table. This requires two
-** passes over the data. Furthermore, because the temporary table
-** has no indices, the WHERE clause on the outer query cannot be
-** optimized.
-**
-** This routine attempts to rewrite queries such as the above into
-** a single flat select, like this:
-**
-** SELECT x+y AS a FROM t1 WHERE z<100 AND a>5
-**
-** The code generated for this simpification gives the same result
-** but only has to scan the data once. And because indices might
-** exist on the table t1, a complete scan of the data might be
-** avoided.
-**
-** Flattening is only attempted if all of the following are true:
-**
-** (1) The subquery and the outer query do not both use aggregates.
-**
-** (2) The subquery is not an aggregate or the outer query is not a join.
-**
-** (3) The subquery is not the right operand of a left outer join, or
-** the subquery is not itself a join. (Ticket #306)
-**
-** (4) The subquery is not DISTINCT or the outer query is not a join.
-**
-** (5) The subquery is not DISTINCT or the outer query does not use
-** aggregates.
-**
-** (6) The subquery does not use aggregates or the outer query is not
-** DISTINCT.
-**
-** (7) The subquery has a FROM clause.
-**
-** (8) The subquery does not use LIMIT or the outer query is not a join.
-**
-** (9) The subquery does not use LIMIT or the outer query does not use
-** aggregates.
-**
-** (10) The subquery does not use aggregates or the outer query does not
-** use LIMIT.
-**
-** (11) The subquery and the outer query do not both have ORDER BY clauses.
-**
-** (12) The subquery is not the right term of a LEFT OUTER JOIN or the
-** subquery has no WHERE clause. (added by ticket #350)
-**
-** In this routine, the "p" parameter is a pointer to the outer query.
-** The subquery is p->pSrc->a[iFrom]. isAgg is true if the outer query
-** uses aggregates and subqueryIsAgg is true if the subquery uses aggregates.
-**
-** If flattening is not attempted, this routine is a no-op and returns 0.
-** If flattening is attempted this routine returns 1.
-**
-** All of the expression analysis must occur on both the outer query and
-** the subquery before this routine runs.
-*/
-static int flattenSubquery(
- Parse *pParse, /* The parsing context */
- Select *p, /* The parent or outer SELECT statement */
- int iFrom, /* Index in p->pSrc->a[] of the inner subquery */
- int isAgg, /* True if outer SELECT uses aggregate functions */
- int subqueryIsAgg /* True if the subquery uses aggregate functions */
-){
- Select *pSub; /* The inner query or "subquery" */
- SrcList *pSrc; /* The FROM clause of the outer query */
- SrcList *pSubSrc; /* The FROM clause of the subquery */
- ExprList *pList; /* The result set of the outer query */
- int iParent; /* VDBE cursor number of the pSub result set temp table */
- int i;
- Expr *pWhere;
-
- /* Check to see if flattening is permitted. Return 0 if not.
- */
- if( p==0 ) return 0;
- pSrc = p->pSrc;
- assert( pSrc && iFrom>=0 && iFrom<pSrc->nSrc );
- pSub = pSrc->a[iFrom].pSelect;
- assert( pSub!=0 );
- if( isAgg && subqueryIsAgg ) return 0;
- if( subqueryIsAgg && pSrc->nSrc>1 ) return 0;
- pSubSrc = pSub->pSrc;
- assert( pSubSrc );
- if( pSubSrc->nSrc==0 ) return 0;
- if( (pSub->isDistinct || pSub->nLimit>=0) && (pSrc->nSrc>1 || isAgg) ){
- return 0;
- }
- if( (p->isDistinct || p->nLimit>=0) && subqueryIsAgg ) return 0;
- if( p->pOrderBy && pSub->pOrderBy ) return 0;
-
- /* Restriction 3: If the subquery is a join, make sure the subquery is
- ** not used as the right operand of an outer join. Examples of why this
- ** is not allowed:
- **
- ** t1 LEFT OUTER JOIN (t2 JOIN t3)
- **
- ** If we flatten the above, we would get
- **
- ** (t1 LEFT OUTER JOIN t2) JOIN t3
- **
- ** which is not at all the same thing.
- */
- if( pSubSrc->nSrc>1 && iFrom>0 && (pSrc->a[iFrom-1].jointype & JT_OUTER)!=0 ){
- return 0;
- }
-
- /* Restriction 12: If the subquery is the right operand of a left outer
- ** join, make sure the subquery has no WHERE clause.
- ** An examples of why this is not allowed:
- **
- ** t1 LEFT OUTER JOIN (SELECT * FROM t2 WHERE t2.x>0)
- **
- ** If we flatten the above, we would get
- **
- ** (t1 LEFT OUTER JOIN t2) WHERE t2.x>0
- **
- ** But the t2.x>0 test will always fail on a NULL row of t2, which
- ** effectively converts the OUTER JOIN into an INNER JOIN.
- */
- if( iFrom>0 && (pSrc->a[iFrom-1].jointype & JT_OUTER)!=0
- && pSub->pWhere!=0 ){
- return 0;
- }
-
- /* If we reach this point, it means flattening is permitted for the
- ** iFrom-th entry of the FROM clause in the outer query.
- */
-
- /* Move all of the FROM elements of the subquery into the
- ** the FROM clause of the outer query. Before doing this, remember
- ** the cursor number for the original outer query FROM element in
- ** iParent. The iParent cursor will never be used. Subsequent code
- ** will scan expressions looking for iParent references and replace
- ** those references with expressions that resolve to the subquery FROM
- ** elements we are now copying in.
- */
- iParent = pSrc->a[iFrom].iCursor;
- {
- int nSubSrc = pSubSrc->nSrc;
- int jointype = pSrc->a[iFrom].jointype;
-
- if( pSrc->a[iFrom].pTab && pSrc->a[iFrom].pTab->isTransient ){
- sqliteDeleteTable(0, pSrc->a[iFrom].pTab);
- }
- sqliteFree(pSrc->a[iFrom].zDatabase);
- sqliteFree(pSrc->a[iFrom].zName);
- sqliteFree(pSrc->a[iFrom].zAlias);
- if( nSubSrc>1 ){
- int extra = nSubSrc - 1;
- for(i=1; i<nSubSrc; i++){
- pSrc = sqliteSrcListAppend(pSrc, 0, 0);
- }
- p->pSrc = pSrc;
- for(i=pSrc->nSrc-1; i-extra>=iFrom; i--){
- pSrc->a[i] = pSrc->a[i-extra];
- }
- }
- for(i=0; i<nSubSrc; i++){
- pSrc->a[i+iFrom] = pSubSrc->a[i];
- memset(&pSubSrc->a[i], 0, sizeof(pSubSrc->a[i]));
- }
- pSrc->a[iFrom+nSubSrc-1].jointype = jointype;
- }
-
- /* Now begin substituting subquery result set expressions for
- ** references to the iParent in the outer query.
- **
- ** Example:
- **
- ** SELECT a+5, b*10 FROM (SELECT x*3 AS a, y+10 AS b FROM t1) WHERE a>b;
- ** \ \_____________ subquery __________/ /
- ** \_____________________ outer query ______________________________/
- **
- ** We look at every expression in the outer query and every place we see
- ** "a" we substitute "x*3" and every place we see "b" we substitute "y+10".
- */
- substExprList(p->pEList, iParent, pSub->pEList);
- pList = p->pEList;
- for(i=0; i<pList->nExpr; i++){
- Expr *pExpr;
- if( pList->a[i].zName==0 && (pExpr = pList->a[i].pExpr)->span.z!=0 ){
- pList->a[i].zName = sqliteStrNDup(pExpr->span.z, pExpr->span.n);
- }
- }
- if( isAgg ){
- substExprList(p->pGroupBy, iParent, pSub->pEList);
- substExpr(p->pHaving, iParent, pSub->pEList);
- }
- if( pSub->pOrderBy ){
- assert( p->pOrderBy==0 );
- p->pOrderBy = pSub->pOrderBy;
- pSub->pOrderBy = 0;
- }else if( p->pOrderBy ){
- substExprList(p->pOrderBy, iParent, pSub->pEList);
- }
- if( pSub->pWhere ){
- pWhere = sqliteExprDup(pSub->pWhere);
- }else{
- pWhere = 0;
- }
- if( subqueryIsAgg ){
- assert( p->pHaving==0 );
- p->pHaving = p->pWhere;
- p->pWhere = pWhere;
- substExpr(p->pHaving, iParent, pSub->pEList);
- if( pSub->pHaving ){
- Expr *pHaving = sqliteExprDup(pSub->pHaving);
- if( p->pHaving ){
- p->pHaving = sqliteExpr(TK_AND, p->pHaving, pHaving, 0);
- }else{
- p->pHaving = pHaving;
- }
- }
- assert( p->pGroupBy==0 );
- p->pGroupBy = sqliteExprListDup(pSub->pGroupBy);
- }else if( p->pWhere==0 ){
- p->pWhere = pWhere;
- }else{
- substExpr(p->pWhere, iParent, pSub->pEList);
- if( pWhere ){
- p->pWhere = sqliteExpr(TK_AND, p->pWhere, pWhere, 0);
- }
- }
-
- /* The flattened query is distinct if either the inner or the
- ** outer query is distinct.
- */
- p->isDistinct = p->isDistinct || pSub->isDistinct;
-
- /* Transfer the limit expression from the subquery to the outer
- ** query.
- */
- if( pSub->nLimit>=0 ){
- if( p->nLimit<0 ){
- p->nLimit = pSub->nLimit;
- }else if( p->nLimit+p->nOffset > pSub->nLimit+pSub->nOffset ){
- p->nLimit = pSub->nLimit + pSub->nOffset - p->nOffset;
- }
- }
- p->nOffset += pSub->nOffset;
-
- /* Finially, delete what is left of the subquery and return
- ** success.
- */
- sqliteSelectDelete(pSub);
- return 1;
-}
-
-/*
-** Analyze the SELECT statement passed in as an argument to see if it
-** is a simple min() or max() query. If it is and this query can be
-** satisfied using a single seek to the beginning or end of an index,
-** then generate the code for this SELECT and return 1. If this is not a
-** simple min() or max() query, then return 0;
-**
-** A simply min() or max() query looks like this:
-**
-** SELECT min(a) FROM table;
-** SELECT max(a) FROM table;
-**
-** The query may have only a single table in its FROM argument. There
-** can be no GROUP BY or HAVING or WHERE clauses. The result set must
-** be the min() or max() of a single column of the table. The column
-** in the min() or max() function must be indexed.
-**
-** The parameters to this routine are the same as for sqliteSelect().
-** See the header comment on that routine for additional information.
-*/
-static int simpleMinMaxQuery(Parse *pParse, Select *p, int eDest, int iParm){
- Expr *pExpr;
- int iCol;
- Table *pTab;
- Index *pIdx;
- int base;
- Vdbe *v;
- int seekOp;
- int cont;
- ExprList *pEList, *pList, eList;
- struct ExprList_item eListItem;
- SrcList *pSrc;
-
-
- /* Check to see if this query is a simple min() or max() query. Return
- ** zero if it is not.
- */
- if( p->pGroupBy || p->pHaving || p->pWhere ) return 0;
- pSrc = p->pSrc;
- if( pSrc->nSrc!=1 ) return 0;
- pEList = p->pEList;
- if( pEList->nExpr!=1 ) return 0;
- pExpr = pEList->a[0].pExpr;
- if( pExpr->op!=TK_AGG_FUNCTION ) return 0;
- pList = pExpr->pList;
- if( pList==0 || pList->nExpr!=1 ) return 0;
- if( pExpr->token.n!=3 ) return 0;
- if( sqliteStrNICmp(pExpr->token.z,"min",3)==0 ){
- seekOp = OP_Rewind;
- }else if( sqliteStrNICmp(pExpr->token.z,"max",3)==0 ){
- seekOp = OP_Last;
- }else{
- return 0;
- }
- pExpr = pList->a[0].pExpr;
- if( pExpr->op!=TK_COLUMN ) return 0;
- iCol = pExpr->iColumn;
- pTab = pSrc->a[0].pTab;
-
- /* If we get to here, it means the query is of the correct form.
- ** Check to make sure we have an index and make pIdx point to the
- ** appropriate index. If the min() or max() is on an INTEGER PRIMARY
- ** key column, no index is necessary so set pIdx to NULL. If no
- ** usable index is found, return 0.
- */
- if( iCol<0 ){
- pIdx = 0;
- }else{
- for(pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext){
- assert( pIdx->nColumn>=1 );
- if( pIdx->aiColumn[0]==iCol ) break;
- }
- if( pIdx==0 ) return 0;
- }
-
- /* Identify column types if we will be using the callback. This
- ** step is skipped if the output is going to a table or a memory cell.
- ** The column names have already been generated in the calling function.
- */
- v = sqliteGetVdbe(pParse);
- if( v==0 ) return 0;
- if( eDest==SRT_Callback ){
- generateColumnTypes(pParse, p->pSrc, p->pEList);
- }
-
- /* If the output is destined for a temporary table, open that table.
- */
- if( eDest==SRT_TempTable ){
- sqliteVdbeAddOp(v, OP_OpenTemp, iParm, 0);
- }
-
- /* Generating code to find the min or the max. Basically all we have
- ** to do is find the first or the last entry in the chosen index. If
- ** the min() or max() is on the INTEGER PRIMARY KEY, then find the first
- ** or last entry in the main table.
- */
- sqliteCodeVerifySchema(pParse, pTab->iDb);
- base = pSrc->a[0].iCursor;
- computeLimitRegisters(pParse, p);
- if( pSrc->a[0].pSelect==0 ){
- sqliteVdbeAddOp(v, OP_Integer, pTab->iDb, 0);
- sqliteVdbeOp3(v, OP_OpenRead, base, pTab->tnum, pTab->zName, 0);
- }
- cont = sqliteVdbeMakeLabel(v);
- if( pIdx==0 ){
- sqliteVdbeAddOp(v, seekOp, base, 0);
- }else{
- sqliteVdbeAddOp(v, OP_Integer, pIdx->iDb, 0);
- sqliteVdbeOp3(v, OP_OpenRead, base+1, pIdx->tnum, pIdx->zName, P3_STATIC);
- sqliteVdbeAddOp(v, seekOp, base+1, 0);
- sqliteVdbeAddOp(v, OP_IdxRecno, base+1, 0);
- sqliteVdbeAddOp(v, OP_Close, base+1, 0);
- sqliteVdbeAddOp(v, OP_MoveTo, base, 0);
- }
- eList.nExpr = 1;
- memset(&eListItem, 0, sizeof(eListItem));
- eList.a = &eListItem;
- eList.a[0].pExpr = pExpr;
- selectInnerLoop(pParse, p, &eList, 0, 0, 0, -1, eDest, iParm, cont, cont);
- sqliteVdbeResolveLabel(v, cont);
- sqliteVdbeAddOp(v, OP_Close, base, 0);
-
- return 1;
-}
-
-/*
-** Generate code for the given SELECT statement.
-**
-** The results are distributed in various ways depending on the
-** value of eDest and iParm.
-**
-** eDest Value Result
-** ------------ -------------------------------------------
-** SRT_Callback Invoke the callback for each row of the result.
-**
-** SRT_Mem Store first result in memory cell iParm
-**
-** SRT_Set Store results as keys of a table with cursor iParm
-**
-** SRT_Union Store results as a key in a temporary table iParm
-**
-** SRT_Except Remove results from the temporary table iParm.
-**
-** SRT_Table Store results in temporary table iParm
-**
-** The table above is incomplete. Additional eDist value have be added
-** since this comment was written. See the selectInnerLoop() function for
-** a complete listing of the allowed values of eDest and their meanings.
-**
-** This routine returns the number of errors. If any errors are
-** encountered, then an appropriate error message is left in
-** pParse->zErrMsg.
-**
-** This routine does NOT free the Select structure passed in. The
-** calling function needs to do that.
-**
-** The pParent, parentTab, and *pParentAgg fields are filled in if this
-** SELECT is a subquery. This routine may try to combine this SELECT
-** with its parent to form a single flat query. In so doing, it might
-** change the parent query from a non-aggregate to an aggregate query.
-** For that reason, the pParentAgg flag is passed as a pointer, so it
-** can be changed.
-**
-** Example 1: The meaning of the pParent parameter.
-**
-** SELECT * FROM t1 JOIN (SELECT x, count(*) FROM t2) JOIN t3;
-** \ \_______ subquery _______/ /
-** \ /
-** \____________________ outer query ___________________/
-**
-** This routine is called for the outer query first. For that call,
-** pParent will be NULL. During the processing of the outer query, this
-** routine is called recursively to handle the subquery. For the recursive
-** call, pParent will point to the outer query. Because the subquery is
-** the second element in a three-way join, the parentTab parameter will
-** be 1 (the 2nd value of a 0-indexed array.)
-*/
-int sqliteSelect(
- Parse *pParse, /* The parser context */
- Select *p, /* The SELECT statement being coded. */
- int eDest, /* How to dispose of the results */
- int iParm, /* A parameter used by the eDest disposal method */
- Select *pParent, /* Another SELECT for which this is a sub-query */
- int parentTab, /* Index in pParent->pSrc of this query */
- int *pParentAgg /* True if pParent uses aggregate functions */
-){
- int i;
- WhereInfo *pWInfo;
- Vdbe *v;
- int isAgg = 0; /* True for select lists like "count(*)" */
- ExprList *pEList; /* List of columns to extract. */
- SrcList *pTabList; /* List of tables to select from */
- Expr *pWhere; /* The WHERE clause. May be NULL */
- ExprList *pOrderBy; /* The ORDER BY clause. May be NULL */
- ExprList *pGroupBy; /* The GROUP BY clause. May be NULL */
- Expr *pHaving; /* The HAVING clause. May be NULL */
- int isDistinct; /* True if the DISTINCT keyword is present */
- int distinct; /* Table to use for the distinct set */
- int rc = 1; /* Value to return from this function */
-
- if( sqlite_malloc_failed || pParse->nErr || p==0 ) return 1;
- if( sqliteAuthCheck(pParse, SQLITE_SELECT, 0, 0, 0) ) return 1;
-
- /* If there is are a sequence of queries, do the earlier ones first.
- */
- if( p->pPrior ){
- return multiSelect(pParse, p, eDest, iParm);
- }
-
- /* Make local copies of the parameters for this query.
- */
- pTabList = p->pSrc;
- pWhere = p->pWhere;
- pOrderBy = p->pOrderBy;
- pGroupBy = p->pGroupBy;
- pHaving = p->pHaving;
- isDistinct = p->isDistinct;
-
- /* Allocate VDBE cursors for each table in the FROM clause
- */
- sqliteSrcListAssignCursors(pParse, pTabList);
-
- /*
- ** Do not even attempt to generate any code if we have already seen
- ** errors before this routine starts.
- */
- if( pParse->nErr>0 ) goto select_end;
-
- /* Expand any "*" terms in the result set. (For example the "*" in
- ** "SELECT * FROM t1") The fillInColumnlist() routine also does some
- ** other housekeeping - see the header comment for details.
- */
- if( fillInColumnList(pParse, p) ){
- goto select_end;
- }
- pWhere = p->pWhere;
- pEList = p->pEList;
- if( pEList==0 ) goto select_end;
-
- /* If writing to memory or generating a set
- ** only a single column may be output.
- */
- if( (eDest==SRT_Mem || eDest==SRT_Set) && pEList->nExpr>1 ){
- sqliteErrorMsg(pParse, "only a single result allowed for "
- "a SELECT that is part of an expression");
- goto select_end;
- }
-
- /* ORDER BY is ignored for some destinations.
- */
- switch( eDest ){
- case SRT_Union:
- case SRT_Except:
- case SRT_Discard:
- pOrderBy = 0;
- break;
- default:
- break;
- }
-
- /* At this point, we should have allocated all the cursors that we
- ** need to handle subquerys and temporary tables.
- **
- ** Resolve the column names and do a semantics check on all the expressions.
- */
- for(i=0; i<pEList->nExpr; i++){
- if( sqliteExprResolveIds(pParse, pTabList, 0, pEList->a[i].pExpr) ){
- goto select_end;
- }
- if( sqliteExprCheck(pParse, pEList->a[i].pExpr, 1, &isAgg) ){
- goto select_end;
- }
- }
- if( pWhere ){
- if( sqliteExprResolveIds(pParse, pTabList, pEList, pWhere) ){
- goto select_end;
- }
- if( sqliteExprCheck(pParse, pWhere, 0, 0) ){
- goto select_end;
- }
- }
- if( pHaving ){
- if( pGroupBy==0 ){
- sqliteErrorMsg(pParse, "a GROUP BY clause is required before HAVING");
- goto select_end;
- }
- if( sqliteExprResolveIds(pParse, pTabList, pEList, pHaving) ){
- goto select_end;
- }
- if( sqliteExprCheck(pParse, pHaving, 1, &isAgg) ){
- goto select_end;
- }
- }
- if( pOrderBy ){
- for(i=0; i<pOrderBy->nExpr; i++){
- int iCol;
- Expr *pE = pOrderBy->a[i].pExpr;
- if( sqliteExprIsInteger(pE, &iCol) && iCol>0 && iCol<=pEList->nExpr ){
- sqliteExprDelete(pE);
- pE = pOrderBy->a[i].pExpr = sqliteExprDup(pEList->a[iCol-1].pExpr);
- }
- if( sqliteExprResolveIds(pParse, pTabList, pEList, pE) ){
- goto select_end;
- }
- if( sqliteExprCheck(pParse, pE, isAgg, 0) ){
- goto select_end;
- }
- if( sqliteExprIsConstant(pE) ){
- if( sqliteExprIsInteger(pE, &iCol)==0 ){
- sqliteErrorMsg(pParse,
- "ORDER BY terms must not be non-integer constants");
- goto select_end;
- }else if( iCol<=0 || iCol>pEList->nExpr ){
- sqliteErrorMsg(pParse,
- "ORDER BY column number %d out of range - should be "
- "between 1 and %d", iCol, pEList->nExpr);
- goto select_end;
- }
- }
- }
- }
- if( pGroupBy ){
- for(i=0; i<pGroupBy->nExpr; i++){
- int iCol;
- Expr *pE = pGroupBy->a[i].pExpr;
- if( sqliteExprIsInteger(pE, &iCol) && iCol>0 && iCol<=pEList->nExpr ){
- sqliteExprDelete(pE);
- pE = pGroupBy->a[i].pExpr = sqliteExprDup(pEList->a[iCol-1].pExpr);
- }
- if( sqliteExprResolveIds(pParse, pTabList, pEList, pE) ){
- goto select_end;
- }
- if( sqliteExprCheck(pParse, pE, isAgg, 0) ){
- goto select_end;
- }
- if( sqliteExprIsConstant(pE) ){
- if( sqliteExprIsInteger(pE, &iCol)==0 ){
- sqliteErrorMsg(pParse,
- "GROUP BY terms must not be non-integer constants");
- goto select_end;
- }else if( iCol<=0 || iCol>pEList->nExpr ){
- sqliteErrorMsg(pParse,
- "GROUP BY column number %d out of range - should be "
- "between 1 and %d", iCol, pEList->nExpr);
- goto select_end;
- }
- }
- }
- }
-
- /* Begin generating code.
- */
- v = sqliteGetVdbe(pParse);
- if( v==0 ) goto select_end;
-
- /* Identify column names if we will be using them in a callback. This
- ** step is skipped if the output is going to some other destination.
- */
- if( eDest==SRT_Callback ){
- generateColumnNames(pParse, pTabList, pEList);
- }
-
- /* Generate code for all sub-queries in the FROM clause
- */
- for(i=0; i<pTabList->nSrc; i++){
- const char *zSavedAuthContext;
- int needRestoreContext;
-
- if( pTabList->a[i].pSelect==0 ) continue;
- if( pTabList->a[i].zName!=0 ){
- zSavedAuthContext = pParse->zAuthContext;
- pParse->zAuthContext = pTabList->a[i].zName;
- needRestoreContext = 1;
- }else{
- needRestoreContext = 0;
- }
- sqliteSelect(pParse, pTabList->a[i].pSelect, SRT_TempTable,
- pTabList->a[i].iCursor, p, i, &isAgg);
- if( needRestoreContext ){
- pParse->zAuthContext = zSavedAuthContext;
- }
- pTabList = p->pSrc;
- pWhere = p->pWhere;
- if( eDest!=SRT_Union && eDest!=SRT_Except && eDest!=SRT_Discard ){
- pOrderBy = p->pOrderBy;
- }
- pGroupBy = p->pGroupBy;
- pHaving = p->pHaving;
- isDistinct = p->isDistinct;
- }
-
- /* Check for the special case of a min() or max() function by itself
- ** in the result set.
- */
- if( simpleMinMaxQuery(pParse, p, eDest, iParm) ){
- rc = 0;
- goto select_end;
- }
-
- /* Check to see if this is a subquery that can be "flattened" into its parent.
- ** If flattening is a possiblity, do so and return immediately.
- */
- if( pParent && pParentAgg &&
- flattenSubquery(pParse, pParent, parentTab, *pParentAgg, isAgg) ){
- if( isAgg ) *pParentAgg = 1;
- return rc;
- }
-
- /* Set the limiter.
- */
- computeLimitRegisters(pParse, p);
-
- /* Identify column types if we will be using a callback. This
- ** step is skipped if the output is going to a destination other
- ** than a callback.
- **
- ** We have to do this separately from the creation of column names
- ** above because if the pTabList contains views then they will not
- ** have been resolved and we will not know the column types until
- ** now.
- */
- if( eDest==SRT_Callback ){
- generateColumnTypes(pParse, pTabList, pEList);
- }
-
- /* If the output is destined for a temporary table, open that table.
- */
- if( eDest==SRT_TempTable ){
- sqliteVdbeAddOp(v, OP_OpenTemp, iParm, 0);
- }
-
- /* Do an analysis of aggregate expressions.
- */
- sqliteAggregateInfoReset(pParse);
- if( isAgg || pGroupBy ){
- assert( pParse->nAgg==0 );
- isAgg = 1;
- for(i=0; i<pEList->nExpr; i++){
- if( sqliteExprAnalyzeAggregates(pParse, pEList->a[i].pExpr) ){
- goto select_end;
- }
- }
- if( pGroupBy ){
- for(i=0; i<pGroupBy->nExpr; i++){
- if( sqliteExprAnalyzeAggregates(pParse, pGroupBy->a[i].pExpr) ){
- goto select_end;
- }
- }
- }
- if( pHaving && sqliteExprAnalyzeAggregates(pParse, pHaving) ){
- goto select_end;
- }
- if( pOrderBy ){
- for(i=0; i<pOrderBy->nExpr; i++){
- if( sqliteExprAnalyzeAggregates(pParse, pOrderBy->a[i].pExpr) ){
- goto select_end;
- }
- }
- }
- }
-
- /* Reset the aggregator
- */
- if( isAgg ){
- sqliteVdbeAddOp(v, OP_AggReset, 0, pParse->nAgg);
- for(i=0; i<pParse->nAgg; i++){
- FuncDef *pFunc;
- if( (pFunc = pParse->aAgg[i].pFunc)!=0 && pFunc->xFinalize!=0 ){
- sqliteVdbeOp3(v, OP_AggInit, 0, i, (char*)pFunc, P3_POINTER);
- }
- }
- if( pGroupBy==0 ){
- sqliteVdbeAddOp(v, OP_String, 0, 0);
- sqliteVdbeAddOp(v, OP_AggFocus, 0, 0);
- }
- }
-
- /* Initialize the memory cell to NULL
- */
- if( eDest==SRT_Mem ){
- sqliteVdbeAddOp(v, OP_String, 0, 0);
- sqliteVdbeAddOp(v, OP_MemStore, iParm, 1);
- }
-
- /* Open a temporary table to use for the distinct set.
- */
- if( isDistinct ){
- distinct = pParse->nTab++;
- sqliteVdbeAddOp(v, OP_OpenTemp, distinct, 1);
- }else{
- distinct = -1;
- }
-
- /* Begin the database scan
- */
- pWInfo = sqliteWhereBegin(pParse, pTabList, pWhere, 0,
- pGroupBy ? 0 : &pOrderBy);
- if( pWInfo==0 ) goto select_end;
-
- /* Use the standard inner loop if we are not dealing with
- ** aggregates
- */
- if( !isAgg ){
- if( selectInnerLoop(pParse, p, pEList, 0, 0, pOrderBy, distinct, eDest,
- iParm, pWInfo->iContinue, pWInfo->iBreak) ){
- goto select_end;
- }
- }
-
- /* If we are dealing with aggregates, then do the special aggregate
- ** processing.
- */
- else{
- AggExpr *pAgg;
- if( pGroupBy ){
- int lbl1;
- for(i=0; i<pGroupBy->nExpr; i++){
- sqliteExprCode(pParse, pGroupBy->a[i].pExpr);
- }
- sqliteVdbeAddOp(v, OP_MakeKey, pGroupBy->nExpr, 0);
- if( pParse->db->file_format>=4 ) sqliteAddKeyType(v, pGroupBy);
- lbl1 = sqliteVdbeMakeLabel(v);
- sqliteVdbeAddOp(v, OP_AggFocus, 0, lbl1);
- for(i=0, pAgg=pParse->aAgg; i<pParse->nAgg; i++, pAgg++){
- if( pAgg->isAgg ) continue;
- sqliteExprCode(pParse, pAgg->pExpr);
- sqliteVdbeAddOp(v, OP_AggSet, 0, i);
- }
- sqliteVdbeResolveLabel(v, lbl1);
- }
- for(i=0, pAgg=pParse->aAgg; i<pParse->nAgg; i++, pAgg++){
- Expr *pE;
- int nExpr;
- FuncDef *pDef;
- if( !pAgg->isAgg ) continue;
- assert( pAgg->pFunc!=0 );
- assert( pAgg->pFunc->xStep!=0 );
- pDef = pAgg->pFunc;
- pE = pAgg->pExpr;
- assert( pE!=0 );
- assert( pE->op==TK_AGG_FUNCTION );
- nExpr = sqliteExprCodeExprList(pParse, pE->pList, pDef->includeTypes);
- sqliteVdbeAddOp(v, OP_Integer, i, 0);
- sqliteVdbeOp3(v, OP_AggFunc, 0, nExpr, (char*)pDef, P3_POINTER);
- }
- }
-
- /* End the database scan loop.
- */
- sqliteWhereEnd(pWInfo);
-
- /* If we are processing aggregates, we need to set up a second loop
- ** over all of the aggregate values and process them.
- */
- if( isAgg ){
- int endagg = sqliteVdbeMakeLabel(v);
- int startagg;
- startagg = sqliteVdbeAddOp(v, OP_AggNext, 0, endagg);
- pParse->useAgg = 1;
- if( pHaving ){
- sqliteExprIfFalse(pParse, pHaving, startagg, 1);
- }
- if( selectInnerLoop(pParse, p, pEList, 0, 0, pOrderBy, distinct, eDest,
- iParm, startagg, endagg) ){
- goto select_end;
- }
- sqliteVdbeAddOp(v, OP_Goto, 0, startagg);
- sqliteVdbeResolveLabel(v, endagg);
- sqliteVdbeAddOp(v, OP_Noop, 0, 0);
- pParse->useAgg = 0;
- }
-
- /* If there is an ORDER BY clause, then we need to sort the results
- ** and send them to the callback one by one.
- */
- if( pOrderBy ){
- generateSortTail(p, v, pEList->nExpr, eDest, iParm);
- }
-
- /* If this was a subquery, we have now converted the subquery into a
- ** temporary table. So delete the subquery structure from the parent
- ** to prevent this subquery from being evaluated again and to force the
- ** the use of the temporary table.
- */
- if( pParent ){
- assert( pParent->pSrc->nSrc>parentTab );
- assert( pParent->pSrc->a[parentTab].pSelect==p );
- sqliteSelectDelete(p);
- pParent->pSrc->a[parentTab].pSelect = 0;
- }
-
- /* The SELECT was successfully coded. Set the return code to 0
- ** to indicate no errors.
- */
- rc = 0;
-
- /* Control jumps to here if an error is encountered above, or upon
- ** successful coding of the SELECT.
- */
-select_end:
- sqliteAggregateInfoReset(pParse);
- return rc;
-}
diff --git a/ext/sqlite/libsqlite/src/sqlite.h.in b/ext/sqlite/libsqlite/src/sqlite.h.in
deleted file mode 100644
index 11edb43489..0000000000
--- a/ext/sqlite/libsqlite/src/sqlite.h.in
+++ /dev/null
@@ -1,868 +0,0 @@
-/*
-** 2001 September 15
-**
-** The author disclaims copyright to this source code. In place of
-** a legal notice, here is a blessing:
-**
-** May you do good and not evil.
-** May you find forgiveness for yourself and forgive others.
-** May you share freely, never taking more than you give.
-**
-*************************************************************************
-** This header file defines the interface that the SQLite library
-** presents to client programs.
-**
-** @(#) $Id$
-*/
-#ifndef _SQLITE_H_
-#define _SQLITE_H_
-#include <stdarg.h> /* Needed for the definition of va_list */
-
-/*
-** Make sure we can call this stuff from C++.
-*/
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*
-** The version of the SQLite library.
-*/
-#define SQLITE_VERSION "--VERS--"
-
-/*
-** The version string is also compiled into the library so that a program
-** can check to make sure that the lib*.a file and the *.h file are from
-** the same version.
-*/
-extern const char sqlite_version[];
-
-/*
-** The SQLITE_UTF8 macro is defined if the library expects to see
-** UTF-8 encoded data. The SQLITE_ISO8859 macro is defined if the
-** iso8859 encoded should be used.
-*/
-#define SQLITE_--ENCODING-- 1
-
-/*
-** The following constant holds one of two strings, "UTF-8" or "iso8859",
-** depending on which character encoding the SQLite library expects to
-** see. The character encoding makes a difference for the LIKE and GLOB
-** operators and for the LENGTH() and SUBSTR() functions.
-*/
-extern const char sqlite_encoding[];
-
-/*
-** Each open sqlite database is represented by an instance of the
-** following opaque structure.
-*/
-typedef struct sqlite sqlite;
-
-/*
-** A function to open a new sqlite database.
-**
-** If the database does not exist and mode indicates write
-** permission, then a new database is created. If the database
-** does not exist and mode does not indicate write permission,
-** then the open fails, an error message generated (if errmsg!=0)
-** and the function returns 0.
-**
-** If mode does not indicates user write permission, then the
-** database is opened read-only.
-**
-** The Truth: As currently implemented, all databases are opened
-** for writing all the time. Maybe someday we will provide the
-** ability to open a database readonly. The mode parameters is
-** provided in anticipation of that enhancement.
-*/
-sqlite *sqlite_open(const char *filename, int mode, char **errmsg);
-
-/*
-** A function to close the database.
-**
-** Call this function with a pointer to a structure that was previously
-** returned from sqlite_open() and the corresponding database will by closed.
-*/
-void sqlite_close(sqlite *);
-
-/*
-** The type for a callback function.
-*/
-typedef int (*sqlite_callback)(void*,int,char**, char**);
-
-/*
-** A function to executes one or more statements of SQL.
-**
-** If one or more of the SQL statements are queries, then
-** the callback function specified by the 3rd parameter is
-** invoked once for each row of the query result. This callback
-** should normally return 0. If the callback returns a non-zero
-** value then the query is aborted, all subsequent SQL statements
-** are skipped and the sqlite_exec() function returns the SQLITE_ABORT.
-**
-** The 4th parameter is an arbitrary pointer that is passed
-** to the callback function as its first parameter.
-**
-** The 2nd parameter to the callback function is the number of
-** columns in the query result. The 3rd parameter to the callback
-** is an array of strings holding the values for each column.
-** The 4th parameter to the callback is an array of strings holding
-** the names of each column.
-**
-** The callback function may be NULL, even for queries. A NULL
-** callback is not an error. It just means that no callback
-** will be invoked.
-**
-** If an error occurs while parsing or evaluating the SQL (but
-** not while executing the callback) then an appropriate error
-** message is written into memory obtained from malloc() and
-** *errmsg is made to point to that message. The calling function
-** is responsible for freeing the memory that holds the error
-** message. Use sqlite_freemem() for this. If errmsg==NULL,
-** then no error message is ever written.
-**
-** The return value is is SQLITE_OK if there are no errors and
-** some other return code if there is an error. The particular
-** return value depends on the type of error.
-**
-** If the query could not be executed because a database file is
-** locked or busy, then this function returns SQLITE_BUSY. (This
-** behavior can be modified somewhat using the sqlite_busy_handler()
-** and sqlite_busy_timeout() functions below.)
-*/
-int sqlite_exec(
- sqlite*, /* An open database */
- const char *sql, /* SQL to be executed */
- sqlite_callback, /* Callback function */
- void *, /* 1st argument to callback function */
- char **errmsg /* Error msg written here */
-);
-
-/*
-** Return values for sqlite_exec() and sqlite_step()
-*/
-#define SQLITE_OK 0 /* Successful result */
-#define SQLITE_ERROR 1 /* SQL error or missing database */
-#define SQLITE_INTERNAL 2 /* An internal logic error in SQLite */
-#define SQLITE_PERM 3 /* Access permission denied */
-#define SQLITE_ABORT 4 /* Callback routine requested an abort */
-#define SQLITE_BUSY 5 /* The database file is locked */
-#define SQLITE_LOCKED 6 /* A table in the database is locked */
-#define SQLITE_NOMEM 7 /* A malloc() failed */
-#define SQLITE_READONLY 8 /* Attempt to write a readonly database */
-#define SQLITE_INTERRUPT 9 /* Operation terminated by sqlite_interrupt() */
-#define SQLITE_IOERR 10 /* Some kind of disk I/O error occurred */
-#define SQLITE_CORRUPT 11 /* The database disk image is malformed */
-#define SQLITE_NOTFOUND 12 /* (Internal Only) Table or record not found */
-#define SQLITE_FULL 13 /* Insertion failed because database is full */
-#define SQLITE_CANTOPEN 14 /* Unable to open the database file */
-#define SQLITE_PROTOCOL 15 /* Database lock protocol error */
-#define SQLITE_EMPTY 16 /* (Internal Only) Database table is empty */
-#define SQLITE_SCHEMA 17 /* The database schema changed */
-#define SQLITE_TOOBIG 18 /* Too much data for one row of a table */
-#define SQLITE_CONSTRAINT 19 /* Abort due to contraint violation */
-#define SQLITE_MISMATCH 20 /* Data type mismatch */
-#define SQLITE_MISUSE 21 /* Library used incorrectly */
-#define SQLITE_NOLFS 22 /* Uses OS features not supported on host */
-#define SQLITE_AUTH 23 /* Authorization denied */
-#define SQLITE_FORMAT 24 /* Auxiliary database format error */
-#define SQLITE_RANGE 25 /* 2nd parameter to sqlite_bind out of range */
-#define SQLITE_NOTADB 26 /* File opened that is not a database file */
-#define SQLITE_ROW 100 /* sqlite_step() has another row ready */
-#define SQLITE_DONE 101 /* sqlite_step() has finished executing */
-
-/*
-** Each entry in an SQLite table has a unique integer key. (The key is
-** the value of the INTEGER PRIMARY KEY column if there is such a column,
-** otherwise the key is generated at random. The unique key is always
-** available as the ROWID, OID, or _ROWID_ column.) The following routine
-** returns the integer key of the most recent insert in the database.
-**
-** This function is similar to the mysql_insert_id() function from MySQL.
-*/
-int sqlite_last_insert_rowid(sqlite*);
-
-/*
-** This function returns the number of database rows that were changed
-** (or inserted or deleted) by the most recent called sqlite_exec().
-**
-** All changes are counted, even if they were later undone by a
-** ROLLBACK or ABORT. Except, changes associated with creating and
-** dropping tables are not counted.
-**
-** If a callback invokes sqlite_exec() recursively, then the changes
-** in the inner, recursive call are counted together with the changes
-** in the outer call.
-**
-** SQLite implements the command "DELETE FROM table" without a WHERE clause
-** by dropping and recreating the table. (This is much faster than going
-** through and deleting individual elements form the table.) Because of
-** this optimization, the change count for "DELETE FROM table" will be
-** zero regardless of the number of elements that were originally in the
-** table. To get an accurate count of the number of rows deleted, use
-** "DELETE FROM table WHERE 1" instead.
-*/
-int sqlite_changes(sqlite*);
-
-/*
-** This function returns the number of database rows that were changed
-** by the last INSERT, UPDATE, or DELETE statment executed by sqlite_exec(),
-** or by the last VM to run to completion. The change count is not updated
-** by SQL statements other than INSERT, UPDATE or DELETE.
-**
-** Changes are counted, even if they are later undone by a ROLLBACK or
-** ABORT. Changes associated with trigger programs that execute as a
-** result of the INSERT, UPDATE, or DELETE statement are not counted.
-**
-** If a callback invokes sqlite_exec() recursively, then the changes
-** in the inner, recursive call are counted together with the changes
-** in the outer call.
-**
-** SQLite implements the command "DELETE FROM table" without a WHERE clause
-** by dropping and recreating the table. (This is much faster than going
-** through and deleting individual elements form the table.) Because of
-** this optimization, the change count for "DELETE FROM table" will be
-** zero regardless of the number of elements that were originally in the
-** table. To get an accurate count of the number of rows deleted, use
-** "DELETE FROM table WHERE 1" instead.
-**
-******* THIS IS AN EXPERIMENTAL API AND IS SUBJECT TO CHANGE ******
-*/
-int sqlite_last_statement_changes(sqlite*);
-
-/* If the parameter to this routine is one of the return value constants
-** defined above, then this routine returns a constant text string which
-** descripts (in English) the meaning of the return value.
-*/
-const char *sqlite_error_string(int);
-#define sqliteErrStr sqlite_error_string /* Legacy. Do not use in new code. */
-
-/* This function causes any pending database operation to abort and
-** return at its earliest opportunity. This routine is typically
-** called in response to a user action such as pressing "Cancel"
-** or Ctrl-C where the user wants a long query operation to halt
-** immediately.
-*/
-void sqlite_interrupt(sqlite*);
-
-
-/* This function returns true if the given input string comprises
-** one or more complete SQL statements.
-**
-** The algorithm is simple. If the last token other than spaces
-** and comments is a semicolon, then return true. otherwise return
-** false.
-*/
-int sqlite_complete(const char *sql);
-
-/*
-** This routine identifies a callback function that is invoked
-** whenever an attempt is made to open a database table that is
-** currently locked by another process or thread. If the busy callback
-** is NULL, then sqlite_exec() returns SQLITE_BUSY immediately if
-** it finds a locked table. If the busy callback is not NULL, then
-** sqlite_exec() invokes the callback with three arguments. The
-** second argument is the name of the locked table and the third
-** argument is the number of times the table has been busy. If the
-** busy callback returns 0, then sqlite_exec() immediately returns
-** SQLITE_BUSY. If the callback returns non-zero, then sqlite_exec()
-** tries to open the table again and the cycle repeats.
-**
-** The default busy callback is NULL.
-**
-** Sqlite is re-entrant, so the busy handler may start a new query.
-** (It is not clear why anyone would every want to do this, but it
-** is allowed, in theory.) But the busy handler may not close the
-** database. Closing the database from a busy handler will delete
-** data structures out from under the executing query and will
-** probably result in a coredump.
-*/
-void sqlite_busy_handler(sqlite*, int(*)(void*,const char*,int), void*);
-
-/*
-** This routine sets a busy handler that sleeps for a while when a
-** table is locked. The handler will sleep multiple times until
-** at least "ms" milleseconds of sleeping have been done. After
-** "ms" milleseconds of sleeping, the handler returns 0 which
-** causes sqlite_exec() to return SQLITE_BUSY.
-**
-** Calling this routine with an argument less than or equal to zero
-** turns off all busy handlers.
-*/
-void sqlite_busy_timeout(sqlite*, int ms);
-
-/*
-** This next routine is really just a wrapper around sqlite_exec().
-** Instead of invoking a user-supplied callback for each row of the
-** result, this routine remembers each row of the result in memory
-** obtained from malloc(), then returns all of the result after the
-** query has finished.
-**
-** As an example, suppose the query result where this table:
-**
-** Name | Age
-** -----------------------
-** Alice | 43
-** Bob | 28
-** Cindy | 21
-**
-** If the 3rd argument were &azResult then after the function returns
-** azResult will contain the following data:
-**
-** azResult[0] = "Name";
-** azResult[1] = "Age";
-** azResult[2] = "Alice";
-** azResult[3] = "43";
-** azResult[4] = "Bob";
-** azResult[5] = "28";
-** azResult[6] = "Cindy";
-** azResult[7] = "21";
-**
-** Notice that there is an extra row of data containing the column
-** headers. But the *nrow return value is still 3. *ncolumn is
-** set to 2. In general, the number of values inserted into azResult
-** will be ((*nrow) + 1)*(*ncolumn).
-**
-** After the calling function has finished using the result, it should
-** pass the result data pointer to sqlite_free_table() in order to
-** release the memory that was malloc-ed. Because of the way the
-** malloc() happens, the calling function must not try to call
-** malloc() directly. Only sqlite_free_table() is able to release
-** the memory properly and safely.
-**
-** The return value of this routine is the same as from sqlite_exec().
-*/
-int sqlite_get_table(
- sqlite*, /* An open database */
- const char *sql, /* SQL to be executed */
- char ***resultp, /* Result written to a char *[] that this points to */
- int *nrow, /* Number of result rows written here */
- int *ncolumn, /* Number of result columns written here */
- char **errmsg /* Error msg written here */
-);
-
-/*
-** Call this routine to free the memory that sqlite_get_table() allocated.
-*/
-void sqlite_free_table(char **result);
-
-/*
-** The following routines are wrappers around sqlite_exec() and
-** sqlite_get_table(). The only difference between the routines that
-** follow and the originals is that the second argument to the
-** routines that follow is really a printf()-style format
-** string describing the SQL to be executed. Arguments to the format
-** string appear at the end of the argument list.
-**
-** All of the usual printf formatting options apply. In addition, there
-** is a "%q" option. %q works like %s in that it substitutes a null-terminated
-** string from the argument list. But %q also doubles every '\'' character.
-** %q is designed for use inside a string literal. By doubling each '\''
-** character it escapes that character and allows it to be inserted into
-** the string.
-**
-** For example, so some string variable contains text as follows:
-**
-** char *zText = "It's a happy day!";
-**
-** We can use this text in an SQL statement as follows:
-**
-** sqlite_exec_printf(db, "INSERT INTO table VALUES('%q')",
-** callback1, 0, 0, zText);
-**
-** Because the %q format string is used, the '\'' character in zText
-** is escaped and the SQL generated is as follows:
-**
-** INSERT INTO table1 VALUES('It''s a happy day!')
-**
-** This is correct. Had we used %s instead of %q, the generated SQL
-** would have looked like this:
-**
-** INSERT INTO table1 VALUES('It's a happy day!');
-**
-** This second example is an SQL syntax error. As a general rule you
-** should always use %q instead of %s when inserting text into a string
-** literal.
-*/
-int sqlite_exec_printf(
- sqlite*, /* An open database */
- const char *sqlFormat, /* printf-style format string for the SQL */
- sqlite_callback, /* Callback function */
- void *, /* 1st argument to callback function */
- char **errmsg, /* Error msg written here */
- ... /* Arguments to the format string. */
-);
-int sqlite_exec_vprintf(
- sqlite*, /* An open database */
- const char *sqlFormat, /* printf-style format string for the SQL */
- sqlite_callback, /* Callback function */
- void *, /* 1st argument to callback function */
- char **errmsg, /* Error msg written here */
- va_list ap /* Arguments to the format string. */
-);
-int sqlite_get_table_printf(
- sqlite*, /* An open database */
- const char *sqlFormat, /* printf-style format string for the SQL */
- char ***resultp, /* Result written to a char *[] that this points to */
- int *nrow, /* Number of result rows written here */
- int *ncolumn, /* Number of result columns written here */
- char **errmsg, /* Error msg written here */
- ... /* Arguments to the format string */
-);
-int sqlite_get_table_vprintf(
- sqlite*, /* An open database */
- const char *sqlFormat, /* printf-style format string for the SQL */
- char ***resultp, /* Result written to a char *[] that this points to */
- int *nrow, /* Number of result rows written here */
- int *ncolumn, /* Number of result columns written here */
- char **errmsg, /* Error msg written here */
- va_list ap /* Arguments to the format string */
-);
-char *sqlite_mprintf(const char*,...);
-char *sqlite_vmprintf(const char*, va_list);
-
-/*
-** Windows systems should call this routine to free memory that
-** is returned in the in the errmsg parameter of sqlite_open() when
-** SQLite is a DLL. For some reason, it does not work to call free()
-** directly.
-*/
-void sqlite_freemem(void *p);
-
-/*
-** Windows systems need functions to call to return the sqlite_version
-** and sqlite_encoding strings.
-*/
-const char *sqlite_libversion(void);
-const char *sqlite_libencoding(void);
-
-/*
-** A pointer to the following structure is used to communicate with
-** the implementations of user-defined functions.
-*/
-typedef struct sqlite_func sqlite_func;
-
-/*
-** Use the following routines to create new user-defined functions. See
-** the documentation for details.
-*/
-int sqlite_create_function(
- sqlite*, /* Database where the new function is registered */
- const char *zName, /* Name of the new function */
- int nArg, /* Number of arguments. -1 means any number */
- void (*xFunc)(sqlite_func*,int,const char**), /* C code to implement */
- void *pUserData /* Available via the sqlite_user_data() call */
-);
-int sqlite_create_aggregate(
- sqlite*, /* Database where the new function is registered */
- const char *zName, /* Name of the function */
- int nArg, /* Number of arguments */
- void (*xStep)(sqlite_func*,int,const char**), /* Called for each row */
- void (*xFinalize)(sqlite_func*), /* Called once to get final result */
- void *pUserData /* Available via the sqlite_user_data() call */
-);
-
-/*
-** Use the following routine to define the datatype returned by a
-** user-defined function. The second argument can be one of the
-** constants SQLITE_NUMERIC, SQLITE_TEXT, or SQLITE_ARGS or it
-** can be an integer greater than or equal to zero. When the datatype
-** parameter is non-negative, the type of the result will be the
-** same as the datatype-th argument. If datatype==SQLITE_NUMERIC
-** then the result is always numeric. If datatype==SQLITE_TEXT then
-** the result is always text. If datatype==SQLITE_ARGS then the result
-** is numeric if any argument is numeric and is text otherwise.
-*/
-int sqlite_function_type(
- sqlite *db, /* The database there the function is registered */
- const char *zName, /* Name of the function */
- int datatype /* The datatype for this function */
-);
-#define SQLITE_NUMERIC (-1)
-#define SQLITE_TEXT (-2)
-#define SQLITE_ARGS (-3)
-
-/*
-** The user function implementations call one of the following four routines
-** in order to return their results. The first parameter to each of these
-** routines is a copy of the first argument to xFunc() or xFinialize().
-** The second parameter to these routines is the result to be returned.
-** A NULL can be passed as the second parameter to sqlite_set_result_string()
-** in order to return a NULL result.
-**
-** The 3rd argument to _string and _error is the number of characters to
-** take from the string. If this argument is negative, then all characters
-** up to and including the first '\000' are used.
-**
-** The sqlite_set_result_string() function allocates a buffer to hold the
-** result and returns a pointer to this buffer. The calling routine
-** (that is, the implmentation of a user function) can alter the content
-** of this buffer if desired.
-*/
-char *sqlite_set_result_string(sqlite_func*,const char*,int);
-void sqlite_set_result_int(sqlite_func*,int);
-void sqlite_set_result_double(sqlite_func*,double);
-void sqlite_set_result_error(sqlite_func*,const char*,int);
-
-/*
-** The pUserData parameter to the sqlite_create_function() and
-** sqlite_create_aggregate() routines used to register user functions
-** is available to the implementation of the function using this
-** call.
-*/
-void *sqlite_user_data(sqlite_func*);
-
-/*
-** Aggregate functions use the following routine to allocate
-** a structure for storing their state. The first time this routine
-** is called for a particular aggregate, a new structure of size nBytes
-** is allocated, zeroed, and returned. On subsequent calls (for the
-** same aggregate instance) the same buffer is returned. The implementation
-** of the aggregate can use the returned buffer to accumulate data.
-**
-** The buffer allocated is freed automatically be SQLite.
-*/
-void *sqlite_aggregate_context(sqlite_func*, int nBytes);
-
-/*
-** The next routine returns the number of calls to xStep for a particular
-** aggregate function instance. The current call to xStep counts so this
-** routine always returns at least 1.
-*/
-int sqlite_aggregate_count(sqlite_func*);
-
-/*
-** This routine registers a callback with the SQLite library. The
-** callback is invoked (at compile-time, not at run-time) for each
-** attempt to access a column of a table in the database. The callback
-** returns SQLITE_OK if access is allowed, SQLITE_DENY if the entire
-** SQL statement should be aborted with an error and SQLITE_IGNORE
-** if the column should be treated as a NULL value.
-*/
-int sqlite_set_authorizer(
- sqlite*,
- int (*xAuth)(void*,int,const char*,const char*,const char*,const char*),
- void *pUserData
-);
-
-/*
-** The second parameter to the access authorization function above will
-** be one of the values below. These values signify what kind of operation
-** is to be authorized. The 3rd and 4th parameters to the authorization
-** function will be parameters or NULL depending on which of the following
-** codes is used as the second parameter. The 5th parameter is the name
-** of the database ("main", "temp", etc.) if applicable. The 6th parameter
-** is the name of the inner-most trigger or view that is responsible for
-** the access attempt or NULL if this access attempt is directly from
-** input SQL code.
-**
-** Arg-3 Arg-4
-*/
-#define SQLITE_COPY 0 /* Table Name File Name */
-#define SQLITE_CREATE_INDEX 1 /* Index Name Table Name */
-#define SQLITE_CREATE_TABLE 2 /* Table Name NULL */
-#define SQLITE_CREATE_TEMP_INDEX 3 /* Index Name Table Name */
-#define SQLITE_CREATE_TEMP_TABLE 4 /* Table Name NULL */
-#define SQLITE_CREATE_TEMP_TRIGGER 5 /* Trigger Name Table Name */
-#define SQLITE_CREATE_TEMP_VIEW 6 /* View Name NULL */
-#define SQLITE_CREATE_TRIGGER 7 /* Trigger Name Table Name */
-#define SQLITE_CREATE_VIEW 8 /* View Name NULL */
-#define SQLITE_DELETE 9 /* Table Name NULL */
-#define SQLITE_DROP_INDEX 10 /* Index Name Table Name */
-#define SQLITE_DROP_TABLE 11 /* Table Name NULL */
-#define SQLITE_DROP_TEMP_INDEX 12 /* Index Name Table Name */
-#define SQLITE_DROP_TEMP_TABLE 13 /* Table Name NULL */
-#define SQLITE_DROP_TEMP_TRIGGER 14 /* Trigger Name Table Name */
-#define SQLITE_DROP_TEMP_VIEW 15 /* View Name NULL */
-#define SQLITE_DROP_TRIGGER 16 /* Trigger Name Table Name */
-#define SQLITE_DROP_VIEW 17 /* View Name NULL */
-#define SQLITE_INSERT 18 /* Table Name NULL */
-#define SQLITE_PRAGMA 19 /* Pragma Name 1st arg or NULL */
-#define SQLITE_READ 20 /* Table Name Column Name */
-#define SQLITE_SELECT 21 /* NULL NULL */
-#define SQLITE_TRANSACTION 22 /* NULL NULL */
-#define SQLITE_UPDATE 23 /* Table Name Column Name */
-#define SQLITE_ATTACH 24 /* Filename NULL */
-#define SQLITE_DETACH 25 /* Database Name NULL */
-
-
-/*
-** The return value of the authorization function should be one of the
-** following constants:
-*/
-/* #define SQLITE_OK 0 // Allow access (This is actually defined above) */
-#define SQLITE_DENY 1 /* Abort the SQL statement with an error */
-#define SQLITE_IGNORE 2 /* Don't allow access, but don't generate an error */
-
-/*
-** Register a function that is called at every invocation of sqlite_exec()
-** or sqlite_compile(). This function can be used (for example) to generate
-** a log file of all SQL executed against a database.
-*/
-void *sqlite_trace(sqlite*, void(*xTrace)(void*,const char*), void*);
-
-/*** The Callback-Free API
-**
-** The following routines implement a new way to access SQLite that does not
-** involve the use of callbacks.
-**
-** An sqlite_vm is an opaque object that represents a single SQL statement
-** that is ready to be executed.
-*/
-typedef struct sqlite_vm sqlite_vm;
-
-/*
-** To execute an SQLite query without the use of callbacks, you first have
-** to compile the SQL using this routine. The 1st parameter "db" is a pointer
-** to an sqlite object obtained from sqlite_open(). The 2nd parameter
-** "zSql" is the text of the SQL to be compiled. The remaining parameters
-** are all outputs.
-**
-** *pzTail is made to point to the first character past the end of the first
-** SQL statement in zSql. This routine only compiles the first statement
-** in zSql, so *pzTail is left pointing to what remains uncompiled.
-**
-** *ppVm is left pointing to a "virtual machine" that can be used to execute
-** the compiled statement. Or if there is an error, *ppVm may be set to NULL.
-** If the input text contained no SQL (if the input is and empty string or
-** a comment) then *ppVm is set to NULL.
-**
-** If any errors are detected during compilation, an error message is written
-** into space obtained from malloc() and *pzErrMsg is made to point to that
-** error message. The calling routine is responsible for freeing the text
-** of this message when it has finished with it. Use sqlite_freemem() to
-** free the message. pzErrMsg may be NULL in which case no error message
-** will be generated.
-**
-** On success, SQLITE_OK is returned. Otherwise and error code is returned.
-*/
-int sqlite_compile(
- sqlite *db, /* The open database */
- const char *zSql, /* SQL statement to be compiled */
- const char **pzTail, /* OUT: uncompiled tail of zSql */
- sqlite_vm **ppVm, /* OUT: the virtual machine to execute zSql */
- char **pzErrmsg /* OUT: Error message. */
-);
-
-/*
-** After an SQL statement has been compiled, it is handed to this routine
-** to be executed. This routine executes the statement as far as it can
-** go then returns. The return value will be one of SQLITE_DONE,
-** SQLITE_ERROR, SQLITE_BUSY, SQLITE_ROW, or SQLITE_MISUSE.
-**
-** SQLITE_DONE means that the execute of the SQL statement is complete
-** an no errors have occurred. sqlite_step() should not be called again
-** for the same virtual machine. *pN is set to the number of columns in
-** the result set and *pazColName is set to an array of strings that
-** describe the column names and datatypes. The name of the i-th column
-** is (*pazColName)[i] and the datatype of the i-th column is
-** (*pazColName)[i+*pN]. *pazValue is set to NULL.
-**
-** SQLITE_ERROR means that the virtual machine encountered a run-time
-** error. sqlite_step() should not be called again for the same
-** virtual machine. *pN is set to 0 and *pazColName and *pazValue are set
-** to NULL. Use sqlite_finalize() to obtain the specific error code
-** and the error message text for the error.
-**
-** SQLITE_BUSY means that an attempt to open the database failed because
-** another thread or process is holding a lock. The calling routine
-** can try again to open the database by calling sqlite_step() again.
-** The return code will only be SQLITE_BUSY if no busy handler is registered
-** using the sqlite_busy_handler() or sqlite_busy_timeout() routines. If
-** a busy handler callback has been registered but returns 0, then this
-** routine will return SQLITE_ERROR and sqltie_finalize() will return
-** SQLITE_BUSY when it is called.
-**
-** SQLITE_ROW means that a single row of the result is now available.
-** The data is contained in *pazValue. The value of the i-th column is
-** (*azValue)[i]. *pN and *pazColName are set as described in SQLITE_DONE.
-** Invoke sqlite_step() again to advance to the next row.
-**
-** SQLITE_MISUSE is returned if sqlite_step() is called incorrectly.
-** For example, if you call sqlite_step() after the virtual machine
-** has halted (after a prior call to sqlite_step() has returned SQLITE_DONE)
-** or if you call sqlite_step() with an incorrectly initialized virtual
-** machine or a virtual machine that has been deleted or that is associated
-** with an sqlite structure that has been closed.
-*/
-int sqlite_step(
- sqlite_vm *pVm, /* The virtual machine to execute */
- int *pN, /* OUT: Number of columns in result */
- const char ***pazValue, /* OUT: Column data */
- const char ***pazColName /* OUT: Column names and datatypes */
-);
-
-/*
-** This routine is called to delete a virtual machine after it has finished
-** executing. The return value is the result code. SQLITE_OK is returned
-** if the statement executed successfully and some other value is returned if
-** there was any kind of error. If an error occurred and pzErrMsg is not
-** NULL, then an error message is written into memory obtained from malloc()
-** and *pzErrMsg is made to point to that error message. The calling routine
-** should use sqlite_freemem() to delete this message when it has finished
-** with it.
-**
-** This routine can be called at any point during the execution of the
-** virtual machine. If the virtual machine has not completed execution
-** when this routine is called, that is like encountering an error or
-** an interrupt. (See sqlite_interrupt().) Incomplete updates may be
-** rolled back and transactions cancelled, depending on the circumstances,
-** and the result code returned will be SQLITE_ABORT.
-*/
-int sqlite_finalize(sqlite_vm*, char **pzErrMsg);
-
-/*
-** This routine deletes the virtual machine, writes any error message to
-** *pzErrMsg and returns an SQLite return code in the same way as the
-** sqlite_finalize() function.
-**
-** Additionally, if ppVm is not NULL, *ppVm is left pointing to a new virtual
-** machine loaded with the compiled version of the original query ready for
-** execution.
-**
-** If sqlite_reset() returns SQLITE_SCHEMA, then *ppVm is set to NULL.
-**
-******* THIS IS AN EXPERIMENTAL API AND IS SUBJECT TO CHANGE ******
-*/
-int sqlite_reset(sqlite_vm*, char **pzErrMsg);
-
-/*
-** If the SQL that was handed to sqlite_compile contains variables that
-** are represeted in the SQL text by a question mark ('?'). This routine
-** is used to assign values to those variables.
-**
-** The first parameter is a virtual machine obtained from sqlite_compile().
-** The 2nd "idx" parameter determines which variable in the SQL statement
-** to bind the value to. The left most '?' is 1. The 3rd parameter is
-** the value to assign to that variable. The 4th parameter is the number
-** of bytes in the value, including the terminating \000 for strings.
-** Finally, the 5th "copy" parameter is TRUE if SQLite should make its
-** own private copy of this value, or false if the space that the 3rd
-** parameter points to will be unchanging and can be used directly by
-** SQLite.
-**
-** Unbound variables are treated as having a value of NULL. To explicitly
-** set a variable to NULL, call this routine with the 3rd parameter as a
-** NULL pointer.
-**
-** If the 4th "len" parameter is -1, then strlen() is used to find the
-** length.
-**
-** This routine can only be called immediately after sqlite_compile()
-** or sqlite_reset() and before any calls to sqlite_step().
-**
-******* THIS IS AN EXPERIMENTAL API AND IS SUBJECT TO CHANGE ******
-*/
-int sqlite_bind(sqlite_vm*, int idx, const char *value, int len, int copy);
-
-/*
-** This routine configures a callback function - the progress callback - that
-** is invoked periodically during long running calls to sqlite_exec(),
-** sqlite_step() and sqlite_get_table(). An example use for this API is to keep
-** a GUI updated during a large query.
-**
-** The progress callback is invoked once for every N virtual machine opcodes,
-** where N is the second argument to this function. The progress callback
-** itself is identified by the third argument to this function. The fourth
-** argument to this function is a void pointer passed to the progress callback
-** function each time it is invoked.
-**
-** If a call to sqlite_exec(), sqlite_step() or sqlite_get_table() results
-** in less than N opcodes being executed, then the progress callback is not
-** invoked.
-**
-** Calling this routine overwrites any previously installed progress callback.
-** To remove the progress callback altogether, pass NULL as the third
-** argument to this function.
-**
-** If the progress callback returns a result other than 0, then the current
-** query is immediately terminated and any database changes rolled back. If the
-** query was part of a larger transaction, then the transaction is not rolled
-** back and remains active. The sqlite_exec() call returns SQLITE_ABORT.
-**
-******* THIS IS AN EXPERIMENTAL API AND IS SUBJECT TO CHANGE ******
-*/
-void sqlite_progress_handler(sqlite*, int, int(*)(void*), void*);
-
-/*
-** Register a callback function to be invoked whenever a new transaction
-** is committed. The pArg argument is passed through to the callback.
-** callback. If the callback function returns non-zero, then the commit
-** is converted into a rollback.
-**
-** If another function was previously registered, its pArg value is returned.
-** Otherwise NULL is returned.
-**
-** Registering a NULL function disables the callback.
-**
-******* THIS IS AN EXPERIMENTAL API AND IS SUBJECT TO CHANGE ******
-*/
-void *sqlite_commit_hook(sqlite*, int(*)(void*), void*);
-
-/*
-** Open an encrypted SQLite database. If pKey==0 or nKey==0, this routine
-** is the same as sqlite_open().
-**
-** The code to implement this API is not available in the public release
-** of SQLite.
-*/
-sqlite *sqlite_open_encrypted(
- const char *zFilename, /* Name of the encrypted database */
- const void *pKey, /* Pointer to the key */
- int nKey, /* Number of bytes in the key */
- int *pErrcode, /* Write error code here */
- char **pzErrmsg /* Write error message here */
-);
-
-/*
-** Change the key on an open database. If the current database is not
-** encrypted, this routine will encrypt it. If pNew==0 or nNew==0, the
-** database is decrypted.
-**
-** The code to implement this API is not available in the public release
-** of SQLite.
-*/
-int sqlite_rekey(
- sqlite *db, /* Database to be rekeyed */
- const void *pKey, int nKey /* The new key */
-);
-
-/*
-** Encode a binary buffer "in" of size n bytes so that it contains
-** no instances of characters '\'' or '\000'. The output is
-** null-terminated and can be used as a string value in an INSERT
-** or UPDATE statement. Use sqlite_decode_binary() to convert the
-** string back into its original binary.
-**
-** The result is written into a preallocated output buffer "out".
-** "out" must be able to hold at least 2 +(257*n)/254 bytes.
-** In other words, the output will be expanded by as much as 3
-** bytes for every 254 bytes of input plus 2 bytes of fixed overhead.
-** (This is approximately 2 + 1.0118*n or about a 1.2% size increase.)
-**
-** The return value is the number of characters in the encoded
-** string, excluding the "\000" terminator.
-**
-** If out==NULL then no output is generated but the routine still returns
-** the number of characters that would have been generated if out had
-** not been NULL.
-*/
-int sqlite_encode_binary(const unsigned char *in, int n, unsigned char *out);
-
-/*
-** Decode the string "in" into binary data and write it into "out".
-** This routine reverses the encoding created by sqlite_encode_binary().
-** The output will always be a few bytes less than the input. The number
-** of bytes of output is returned. If the input is not a well-formed
-** encoding, -1 is returned.
-**
-** The "in" and "out" parameters may point to the same buffer in order
-** to decode a string in place.
-*/
-int sqlite_decode_binary(const unsigned char *in, unsigned char *out);
-
-#ifdef __cplusplus
-} /* End of the 'extern "C"' block */
-#endif
-
-#endif /* _SQLITE_H_ */
diff --git a/ext/sqlite/libsqlite/src/sqlite.w32.h b/ext/sqlite/libsqlite/src/sqlite.w32.h
deleted file mode 100644
index 996eab0633..0000000000
--- a/ext/sqlite/libsqlite/src/sqlite.w32.h
+++ /dev/null
@@ -1,764 +0,0 @@
-/*
-** 2001 September 15
-**
-** The author disclaims copyright to this source code. In place of
-** a legal notice, here is a blessing:
-**
-** May you do good and not evil.
-** May you find forgiveness for yourself and forgive others.
-** May you share freely, never taking more than you give.
-**
-*************************************************************************
-** This header file defines the interface that the SQLite library
-** presents to client programs.
-**
-** @(#) $Id$
-*/
-#ifndef _SQLITE_H_
-#define _SQLITE_H_
-#include <stdarg.h> /* Needed for the definition of va_list */
-
-/*
-** Make sure we can call this stuff from C++.
-*/
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*
-** The version of the SQLite library.
-*/
-#define SQLITE_VERSION "2.8.11"
-
-/*
-** The version string is also compiled into the library so that a program
-** can check to make sure that the lib*.a file and the *.h file are from
-** the same version.
-*/
-extern const char sqlite_version[];
-
-/*
-** The SQLITE_UTF8 macro is defined if the library expects to see
-** UTF-8 encoded data. The SQLITE_ISO8859 macro is defined if the
-** iso8859 encoded should be used.
-*/
-#define SQLITE_ISO8859 1
-
-/*
-** The following constant holds one of two strings, "UTF-8" or "iso8859",
-** depending on which character encoding the SQLite library expects to
-** see. The character encoding makes a difference for the LIKE and GLOB
-** operators and for the LENGTH() and SUBSTR() functions.
-*/
-extern const char sqlite_encoding[];
-
-/*
-** Each open sqlite database is represented by an instance of the
-** following opaque structure.
-*/
-typedef struct sqlite sqlite;
-
-/*
-** A function to open a new sqlite database.
-**
-** If the database does not exist and mode indicates write
-** permission, then a new database is created. If the database
-** does not exist and mode does not indicate write permission,
-** then the open fails, an error message generated (if errmsg!=0)
-** and the function returns 0.
-**
-** If mode does not indicates user write permission, then the
-** database is opened read-only.
-**
-** The Truth: As currently implemented, all databases are opened
-** for writing all the time. Maybe someday we will provide the
-** ability to open a database readonly. The mode parameters is
-** provided in anticipation of that enhancement.
-*/
-sqlite *sqlite_open(const char *filename, int mode, char **errmsg);
-
-/*
-** A function to close the database.
-**
-** Call this function with a pointer to a structure that was previously
-** returned from sqlite_open() and the corresponding database will by closed.
-*/
-void sqlite_close(sqlite *);
-
-/*
-** The type for a callback function.
-*/
-typedef int (*sqlite_callback)(void*,int,char**, char**);
-
-/*
-** A function to executes one or more statements of SQL.
-**
-** If one or more of the SQL statements are queries, then
-** the callback function specified by the 3rd parameter is
-** invoked once for each row of the query result. This callback
-** should normally return 0. If the callback returns a non-zero
-** value then the query is aborted, all subsequent SQL statements
-** are skipped and the sqlite_exec() function returns the SQLITE_ABORT.
-**
-** The 4th parameter is an arbitrary pointer that is passed
-** to the callback function as its first parameter.
-**
-** The 2nd parameter to the callback function is the number of
-** columns in the query result. The 3rd parameter to the callback
-** is an array of strings holding the values for each column.
-** The 4th parameter to the callback is an array of strings holding
-** the names of each column.
-**
-** The callback function may be NULL, even for queries. A NULL
-** callback is not an error. It just means that no callback
-** will be invoked.
-**
-** If an error occurs while parsing or evaluating the SQL (but
-** not while executing the callback) then an appropriate error
-** message is written into memory obtained from malloc() and
-** *errmsg is made to point to that message. The calling function
-** is responsible for freeing the memory that holds the error
-** message. Use sqlite_freemem() for this. If errmsg==NULL,
-** then no error message is ever written.
-**
-** The return value is is SQLITE_OK if there are no errors and
-** some other return code if there is an error. The particular
-** return value depends on the type of error.
-**
-** If the query could not be executed because a database file is
-** locked or busy, then this function returns SQLITE_BUSY. (This
-** behavior can be modified somewhat using the sqlite_busy_handler()
-** and sqlite_busy_timeout() functions below.)
-*/
-int sqlite_exec(
- sqlite*, /* An open database */
- const char *sql, /* SQL to be executed */
- sqlite_callback, /* Callback function */
- void *, /* 1st argument to callback function */
- char **errmsg /* Error msg written here */
-);
-
-/*
-** Return values for sqlite_exec() and sqlite_step()
-*/
-#define SQLITE_OK 0 /* Successful result */
-#define SQLITE_ERROR 1 /* SQL error or missing database */
-#define SQLITE_INTERNAL 2 /* An internal logic error in SQLite */
-#define SQLITE_PERM 3 /* Access permission denied */
-#define SQLITE_ABORT 4 /* Callback routine requested an abort */
-#define SQLITE_BUSY 5 /* The database file is locked */
-#define SQLITE_LOCKED 6 /* A table in the database is locked */
-#define SQLITE_NOMEM 7 /* A malloc() failed */
-#define SQLITE_READONLY 8 /* Attempt to write a readonly database */
-#define SQLITE_INTERRUPT 9 /* Operation terminated by sqlite_interrupt() */
-#define SQLITE_IOERR 10 /* Some kind of disk I/O error occurred */
-#define SQLITE_CORRUPT 11 /* The database disk image is malformed */
-#define SQLITE_NOTFOUND 12 /* (Internal Only) Table or record not found */
-#define SQLITE_FULL 13 /* Insertion failed because database is full */
-#define SQLITE_CANTOPEN 14 /* Unable to open the database file */
-#define SQLITE_PROTOCOL 15 /* Database lock protocol error */
-#define SQLITE_EMPTY 16 /* (Internal Only) Database table is empty */
-#define SQLITE_SCHEMA 17 /* The database schema changed */
-#define SQLITE_TOOBIG 18 /* Too much data for one row of a table */
-#define SQLITE_CONSTRAINT 19 /* Abort due to contraint violation */
-#define SQLITE_MISMATCH 20 /* Data type mismatch */
-#define SQLITE_MISUSE 21 /* Library used incorrectly */
-#define SQLITE_NOLFS 22 /* Uses OS features not supported on host */
-#define SQLITE_AUTH 23 /* Authorization denied */
-#define SQLITE_FORMAT 24 /* Auxiliary database format error */
-#define SQLITE_RANGE 25 /* 2nd parameter to sqlite_bind out of range */
-#define SQLITE_NOTADB 26 /* File opened that is not a database file */
-#define SQLITE_ROW 100 /* sqlite_step() has another row ready */
-#define SQLITE_DONE 101 /* sqlite_step() has finished executing */
-
-/*
-** Each entry in an SQLite table has a unique integer key. (The key is
-** the value of the INTEGER PRIMARY KEY column if there is such a column,
-** otherwise the key is generated at random. The unique key is always
-** available as the ROWID, OID, or _ROWID_ column.) The following routine
-** returns the integer key of the most recent insert in the database.
-**
-** This function is similar to the mysql_insert_id() function from MySQL.
-*/
-int sqlite_last_insert_rowid(sqlite*);
-
-/*
-** This function returns the number of database rows that were changed
-** (or inserted or deleted) by the most recent called sqlite_exec().
-**
-** All changes are counted, even if they were later undone by a
-** ROLLBACK or ABORT. Except, changes associated with creating and
-** dropping tables are not counted.
-**
-** If a callback invokes sqlite_exec() recursively, then the changes
-** in the inner, recursive call are counted together with the changes
-** in the outer call.
-**
-** SQLite implements the command "DELETE FROM table" without a WHERE clause
-** by dropping and recreating the table. (This is much faster than going
-** through and deleting individual elements form the table.) Because of
-** this optimization, the change count for "DELETE FROM table" will be
-** zero regardless of the number of elements that were originally in the
-** table. To get an accurate count of the number of rows deleted, use
-** "DELETE FROM table WHERE 1" instead.
-*/
-int sqlite_changes(sqlite*);
-
-/* If the parameter to this routine is one of the return value constants
-** defined above, then this routine returns a constant text string which
-** descripts (in English) the meaning of the return value.
-*/
-const char *sqlite_error_string(int);
-#define sqliteErrStr sqlite_error_string /* Legacy. Do not use in new code. */
-
-/* This function causes any pending database operation to abort and
-** return at its earliest opportunity. This routine is typically
-** called in response to a user action such as pressing "Cancel"
-** or Ctrl-C where the user wants a long query operation to halt
-** immediately.
-*/
-void sqlite_interrupt(sqlite*);
-
-
-/* This function returns true if the given input string comprises
-** one or more complete SQL statements.
-**
-** The algorithm is simple. If the last token other than spaces
-** and comments is a semicolon, then return true. otherwise return
-** false.
-*/
-int sqlite_complete(const char *sql);
-
-/*
-** This routine identifies a callback function that is invoked
-** whenever an attempt is made to open a database table that is
-** currently locked by another process or thread. If the busy callback
-** is NULL, then sqlite_exec() returns SQLITE_BUSY immediately if
-** it finds a locked table. If the busy callback is not NULL, then
-** sqlite_exec() invokes the callback with three arguments. The
-** second argument is the name of the locked table and the third
-** argument is the number of times the table has been busy. If the
-** busy callback returns 0, then sqlite_exec() immediately returns
-** SQLITE_BUSY. If the callback returns non-zero, then sqlite_exec()
-** tries to open the table again and the cycle repeats.
-**
-** The default busy callback is NULL.
-**
-** Sqlite is re-entrant, so the busy handler may start a new query.
-** (It is not clear why anyone would every want to do this, but it
-** is allowed, in theory.) But the busy handler may not close the
-** database. Closing the database from a busy handler will delete
-** data structures out from under the executing query and will
-** probably result in a coredump.
-*/
-void sqlite_busy_handler(sqlite*, int(*)(void*,const char*,int), void*);
-
-/*
-** This routine sets a busy handler that sleeps for a while when a
-** table is locked. The handler will sleep multiple times until
-** at least "ms" milleseconds of sleeping have been done. After
-** "ms" milleseconds of sleeping, the handler returns 0 which
-** causes sqlite_exec() to return SQLITE_BUSY.
-**
-** Calling this routine with an argument less than or equal to zero
-** turns off all busy handlers.
-*/
-void sqlite_busy_timeout(sqlite*, int ms);
-
-/*
-** This next routine is really just a wrapper around sqlite_exec().
-** Instead of invoking a user-supplied callback for each row of the
-** result, this routine remembers each row of the result in memory
-** obtained from malloc(), then returns all of the result after the
-** query has finished.
-**
-** As an example, suppose the query result where this table:
-**
-** Name | Age
-** -----------------------
-** Alice | 43
-** Bob | 28
-** Cindy | 21
-**
-** If the 3rd argument were &azResult then after the function returns
-** azResult will contain the following data:
-**
-** azResult[0] = "Name";
-** azResult[1] = "Age";
-** azResult[2] = "Alice";
-** azResult[3] = "43";
-** azResult[4] = "Bob";
-** azResult[5] = "28";
-** azResult[6] = "Cindy";
-** azResult[7] = "21";
-**
-** Notice that there is an extra row of data containing the column
-** headers. But the *nrow return value is still 3. *ncolumn is
-** set to 2. In general, the number of values inserted into azResult
-** will be ((*nrow) + 1)*(*ncolumn).
-**
-** After the calling function has finished using the result, it should
-** pass the result data pointer to sqlite_free_table() in order to
-** release the memory that was malloc-ed. Because of the way the
-** malloc() happens, the calling function must not try to call
-** malloc() directly. Only sqlite_free_table() is able to release
-** the memory properly and safely.
-**
-** The return value of this routine is the same as from sqlite_exec().
-*/
-int sqlite_get_table(
- sqlite*, /* An open database */
- const char *sql, /* SQL to be executed */
- char ***resultp, /* Result written to a char *[] that this points to */
- int *nrow, /* Number of result rows written here */
- int *ncolumn, /* Number of result columns written here */
- char **errmsg /* Error msg written here */
-);
-
-/*
-** Call this routine to free the memory that sqlite_get_table() allocated.
-*/
-void sqlite_free_table(char **result);
-
-/*
-** The following routines are wrappers around sqlite_exec() and
-** sqlite_get_table(). The only difference between the routines that
-** follow and the originals is that the second argument to the
-** routines that follow is really a printf()-style format
-** string describing the SQL to be executed. Arguments to the format
-** string appear at the end of the argument list.
-**
-** All of the usual printf formatting options apply. In addition, there
-** is a "%q" option. %q works like %s in that it substitutes a null-terminated
-** string from the argument list. But %q also doubles every '\'' character.
-** %q is designed for use inside a string literal. By doubling each '\''
-** character it escapes that character and allows it to be inserted into
-** the string.
-**
-** For example, so some string variable contains text as follows:
-**
-** char *zText = "It's a happy day!";
-**
-** We can use this text in an SQL statement as follows:
-**
-** sqlite_exec_printf(db, "INSERT INTO table VALUES('%q')",
-** callback1, 0, 0, zText);
-**
-** Because the %q format string is used, the '\'' character in zText
-** is escaped and the SQL generated is as follows:
-**
-** INSERT INTO table1 VALUES('It''s a happy day!')
-**
-** This is correct. Had we used %s instead of %q, the generated SQL
-** would have looked like this:
-**
-** INSERT INTO table1 VALUES('It's a happy day!');
-**
-** This second example is an SQL syntax error. As a general rule you
-** should always use %q instead of %s when inserting text into a string
-** literal.
-*/
-int sqlite_exec_printf(
- sqlite*, /* An open database */
- const char *sqlFormat, /* printf-style format string for the SQL */
- sqlite_callback, /* Callback function */
- void *, /* 1st argument to callback function */
- char **errmsg, /* Error msg written here */
- ... /* Arguments to the format string. */
-);
-int sqlite_exec_vprintf(
- sqlite*, /* An open database */
- const char *sqlFormat, /* printf-style format string for the SQL */
- sqlite_callback, /* Callback function */
- void *, /* 1st argument to callback function */
- char **errmsg, /* Error msg written here */
- va_list ap /* Arguments to the format string. */
-);
-int sqlite_get_table_printf(
- sqlite*, /* An open database */
- const char *sqlFormat, /* printf-style format string for the SQL */
- char ***resultp, /* Result written to a char *[] that this points to */
- int *nrow, /* Number of result rows written here */
- int *ncolumn, /* Number of result columns written here */
- char **errmsg, /* Error msg written here */
- ... /* Arguments to the format string */
-);
-int sqlite_get_table_vprintf(
- sqlite*, /* An open database */
- const char *sqlFormat, /* printf-style format string for the SQL */
- char ***resultp, /* Result written to a char *[] that this points to */
- int *nrow, /* Number of result rows written here */
- int *ncolumn, /* Number of result columns written here */
- char **errmsg, /* Error msg written here */
- va_list ap /* Arguments to the format string */
-);
-char *sqlite_mprintf(const char*,...);
-char *sqlite_vmprintf(const char*, va_list);
-
-/*
-** Windows systems should call this routine to free memory that
-** is returned in the in the errmsg parameter of sqlite_open() when
-** SQLite is a DLL. For some reason, it does not work to call free()
-** directly.
-*/
-void sqlite_freemem(void *p);
-
-/*
-** Windows systems need functions to call to return the sqlite_version
-** and sqlite_encoding strings.
-*/
-const char *sqlite_libversion(void);
-const char *sqlite_libencoding(void);
-
-/*
-** A pointer to the following structure is used to communicate with
-** the implementations of user-defined functions.
-*/
-typedef struct sqlite_func sqlite_func;
-
-/*
-** Use the following routines to create new user-defined functions. See
-** the documentation for details.
-*/
-int sqlite_create_function(
- sqlite*, /* Database where the new function is registered */
- const char *zName, /* Name of the new function */
- int nArg, /* Number of arguments. -1 means any number */
- void (*xFunc)(sqlite_func*,int,const char**), /* C code to implement */
- void *pUserData /* Available via the sqlite_user_data() call */
-);
-int sqlite_create_aggregate(
- sqlite*, /* Database where the new function is registered */
- const char *zName, /* Name of the function */
- int nArg, /* Number of arguments */
- void (*xStep)(sqlite_func*,int,const char**), /* Called for each row */
- void (*xFinalize)(sqlite_func*), /* Called once to get final result */
- void *pUserData /* Available via the sqlite_user_data() call */
-);
-
-/*
-** Use the following routine to define the datatype returned by a
-** user-defined function. The second argument can be one of the
-** constants SQLITE_NUMERIC, SQLITE_TEXT, or SQLITE_ARGS or it
-** can be an integer greater than or equal to zero. The datatype
-** will be numeric or text (the only two types supported) if the
-** argument is SQLITE_NUMERIC or SQLITE_TEXT. If the argument is
-** SQLITE_ARGS, then the datatype is numeric if any argument to the
-** function is numeric and is text otherwise. If the second argument
-** is an integer, then the datatype of the result is the same as the
-** parameter to the function that corresponds to that integer.
-*/
-int sqlite_function_type(
- sqlite *db, /* The database there the function is registered */
- const char *zName, /* Name of the function */
- int datatype /* The datatype for this function */
-);
-#define SQLITE_NUMERIC (-1)
-#define SQLITE_TEXT (-2)
-#define SQLITE_ARGS (-3)
-
-/*
-** The user function implementations call one of the following four routines
-** in order to return their results. The first parameter to each of these
-** routines is a copy of the first argument to xFunc() or xFinialize().
-** The second parameter to these routines is the result to be returned.
-** A NULL can be passed as the second parameter to sqlite_set_result_string()
-** in order to return a NULL result.
-**
-** The 3rd argument to _string and _error is the number of characters to
-** take from the string. If this argument is negative, then all characters
-** up to and including the first '\000' are used.
-**
-** The sqlite_set_result_string() function allocates a buffer to hold the
-** result and returns a pointer to this buffer. The calling routine
-** (that is, the implmentation of a user function) can alter the content
-** of this buffer if desired.
-*/
-char *sqlite_set_result_string(sqlite_func*,const char*,int);
-void sqlite_set_result_int(sqlite_func*,int);
-void sqlite_set_result_double(sqlite_func*,double);
-void sqlite_set_result_error(sqlite_func*,const char*,int);
-
-/*
-** The pUserData parameter to the sqlite_create_function() and
-** sqlite_create_aggregate() routines used to register user functions
-** is available to the implementation of the function using this
-** call.
-*/
-void *sqlite_user_data(sqlite_func*);
-
-/*
-** Aggregate functions use the following routine to allocate
-** a structure for storing their state. The first time this routine
-** is called for a particular aggregate, a new structure of size nBytes
-** is allocated, zeroed, and returned. On subsequent calls (for the
-** same aggregate instance) the same buffer is returned. The implementation
-** of the aggregate can use the returned buffer to accumulate data.
-**
-** The buffer allocated is freed automatically be SQLite.
-*/
-void *sqlite_aggregate_context(sqlite_func*, int nBytes);
-
-/*
-** The next routine returns the number of calls to xStep for a particular
-** aggregate function instance. The current call to xStep counts so this
-** routine always returns at least 1.
-*/
-int sqlite_aggregate_count(sqlite_func*);
-
-/*
-** This routine registers a callback with the SQLite library. The
-** callback is invoked (at compile-time, not at run-time) for each
-** attempt to access a column of a table in the database. The callback
-** returns SQLITE_OK if access is allowed, SQLITE_DENY if the entire
-** SQL statement should be aborted with an error and SQLITE_IGNORE
-** if the column should be treated as a NULL value.
-*/
-int sqlite_set_authorizer(
- sqlite*,
- int (*xAuth)(void*,int,const char*,const char*,const char*,const char*),
- void *pUserData
-);
-
-/*
-** The second parameter to the access authorization function above will
-** be one of the values below. These values signify what kind of operation
-** is to be authorized. The 3rd and 4th parameters to the authorization
-** function will be parameters or NULL depending on which of the following
-** codes is used as the second parameter. The 5th parameter is the name
-** of the database ("main", "temp", etc.) if applicable. The 6th parameter
-** is the name of the inner-most trigger or view that is responsible for
-** the access attempt or NULL if this access attempt is directly from
-** input SQL code.
-**
-** Arg-3 Arg-4
-*/
-#define SQLITE_COPY 0 /* Table Name File Name */
-#define SQLITE_CREATE_INDEX 1 /* Index Name Table Name */
-#define SQLITE_CREATE_TABLE 2 /* Table Name NULL */
-#define SQLITE_CREATE_TEMP_INDEX 3 /* Index Name Table Name */
-#define SQLITE_CREATE_TEMP_TABLE 4 /* Table Name NULL */
-#define SQLITE_CREATE_TEMP_TRIGGER 5 /* Trigger Name Table Name */
-#define SQLITE_CREATE_TEMP_VIEW 6 /* View Name NULL */
-#define SQLITE_CREATE_TRIGGER 7 /* Trigger Name Table Name */
-#define SQLITE_CREATE_VIEW 8 /* View Name NULL */
-#define SQLITE_DELETE 9 /* Table Name NULL */
-#define SQLITE_DROP_INDEX 10 /* Index Name Table Name */
-#define SQLITE_DROP_TABLE 11 /* Table Name NULL */
-#define SQLITE_DROP_TEMP_INDEX 12 /* Index Name Table Name */
-#define SQLITE_DROP_TEMP_TABLE 13 /* Table Name NULL */
-#define SQLITE_DROP_TEMP_TRIGGER 14 /* Trigger Name Table Name */
-#define SQLITE_DROP_TEMP_VIEW 15 /* View Name NULL */
-#define SQLITE_DROP_TRIGGER 16 /* Trigger Name Table Name */
-#define SQLITE_DROP_VIEW 17 /* View Name NULL */
-#define SQLITE_INSERT 18 /* Table Name NULL */
-#define SQLITE_PRAGMA 19 /* Pragma Name 1st arg or NULL */
-#define SQLITE_READ 20 /* Table Name Column Name */
-#define SQLITE_SELECT 21 /* NULL NULL */
-#define SQLITE_TRANSACTION 22 /* NULL NULL */
-#define SQLITE_UPDATE 23 /* Table Name Column Name */
-#define SQLITE_ATTACH 24 /* Filename NULL */
-#define SQLITE_DETACH 25 /* Database Name NULL */
-
-
-/*
-** The return value of the authorization function should be one of the
-** following constants:
-*/
-/* #define SQLITE_OK 0 // Allow access (This is actually defined above) */
-#define SQLITE_DENY 1 /* Abort the SQL statement with an error */
-#define SQLITE_IGNORE 2 /* Don't allow access, but don't generate an error */
-
-/*
-** Register a function that is called at every invocation of sqlite_exec()
-** or sqlite_compile(). This function can be used (for example) to generate
-** a log file of all SQL executed against a database.
-*/
-void *sqlite_trace(sqlite*, void(*xTrace)(void*,const char*), void*);
-
-/*** The Callback-Free API
-**
-** The following routines implement a new way to access SQLite that does not
-** involve the use of callbacks.
-**
-** An sqlite_vm is an opaque object that represents a single SQL statement
-** that is ready to be executed.
-*/
-typedef struct sqlite_vm sqlite_vm;
-
-/*
-** To execute an SQLite query without the use of callbacks, you first have
-** to compile the SQL using this routine. The 1st parameter "db" is a pointer
-** to an sqlite object obtained from sqlite_open(). The 2nd parameter
-** "zSql" is the text of the SQL to be compiled. The remaining parameters
-** are all outputs.
-**
-** *pzTail is made to point to the first character past the end of the first
-** SQL statement in zSql. This routine only compiles the first statement
-** in zSql, so *pzTail is left pointing to what remains uncompiled.
-**
-** *ppVm is left pointing to a "virtual machine" that can be used to execute
-** the compiled statement. Or if there is an error, *ppVm may be set to NULL.
-** If the input text contained no SQL (if the input is and empty string or
-** a comment) then *ppVm is set to NULL.
-**
-** If any errors are detected during compilation, an error message is written
-** into space obtained from malloc() and *pzErrMsg is made to point to that
-** error message. The calling routine is responsible for freeing the text
-** of this message when it has finished with it. Use sqlite_freemem() to
-** free the message. pzErrMsg may be NULL in which case no error message
-** will be generated.
-**
-** On success, SQLITE_OK is returned. Otherwise and error code is returned.
-*/
-int sqlite_compile(
- sqlite *db, /* The open database */
- const char *zSql, /* SQL statement to be compiled */
- const char **pzTail, /* OUT: uncompiled tail of zSql */
- sqlite_vm **ppVm, /* OUT: the virtual machine to execute zSql */
- char **pzErrmsg /* OUT: Error message. */
-);
-
-/*
-** After an SQL statement has been compiled, it is handed to this routine
-** to be executed. This routine executes the statement as far as it can
-** go then returns. The return value will be one of SQLITE_DONE,
-** SQLITE_ERROR, SQLITE_BUSY, SQLITE_ROW, or SQLITE_MISUSE.
-**
-** SQLITE_DONE means that the execute of the SQL statement is complete
-** an no errors have occurred. sqlite_step() should not be called again
-** for the same virtual machine. *pN is set to the number of columns in
-** the result set and *pazColName is set to an array of strings that
-** describe the column names and datatypes. The name of the i-th column
-** is (*pazColName)[i] and the datatype of the i-th column is
-** (*pazColName)[i+*pN]. *pazValue is set to NULL.
-**
-** SQLITE_ERROR means that the virtual machine encountered a run-time
-** error. sqlite_step() should not be called again for the same
-** virtual machine. *pN is set to 0 and *pazColName and *pazValue are set
-** to NULL. Use sqlite_finalize() to obtain the specific error code
-** and the error message text for the error.
-**
-** SQLITE_BUSY means that an attempt to open the database failed because
-** another thread or process is holding a lock. The calling routine
-** can try again to open the database by calling sqlite_step() again.
-** The return code will only be SQLITE_BUSY if no busy handler is registered
-** using the sqlite_busy_handler() or sqlite_busy_timeout() routines. If
-** a busy handler callback has been registered but returns 0, then this
-** routine will return SQLITE_ERROR and sqltie_finalize() will return
-** SQLITE_BUSY when it is called.
-**
-** SQLITE_ROW means that a single row of the result is now available.
-** The data is contained in *pazValue. The value of the i-th column is
-** (*azValue)[i]. *pN and *pazColName are set as described in SQLITE_DONE.
-** Invoke sqlite_step() again to advance to the next row.
-**
-** SQLITE_MISUSE is returned if sqlite_step() is called incorrectly.
-** For example, if you call sqlite_step() after the virtual machine
-** has halted (after a prior call to sqlite_step() has returned SQLITE_DONE)
-** or if you call sqlite_step() with an incorrectly initialized virtual
-** machine or a virtual machine that has been deleted or that is associated
-** with an sqlite structure that has been closed.
-*/
-int sqlite_step(
- sqlite_vm *pVm, /* The virtual machine to execute */
- int *pN, /* OUT: Number of columns in result */
- const char ***pazValue, /* OUT: Column data */
- const char ***pazColName /* OUT: Column names and datatypes */
-);
-
-/*
-** This routine is called to delete a virtual machine after it has finished
-** executing. The return value is the result code. SQLITE_OK is returned
-** if the statement executed successfully and some other value is returned if
-** there was any kind of error. If an error occurred and pzErrMsg is not
-** NULL, then an error message is written into memory obtained from malloc()
-** and *pzErrMsg is made to point to that error message. The calling routine
-** should use sqlite_freemem() to delete this message when it has finished
-** with it.
-**
-** This routine can be called at any point during the execution of the
-** virtual machine. If the virtual machine has not completed execution
-** when this routine is called, that is like encountering an error or
-** an interrupt. (See sqlite_interrupt().) Incomplete updates may be
-** rolled back and transactions cancelled, depending on the circumstances,
-** and the result code returned will be SQLITE_ABORT.
-*/
-int sqlite_finalize(sqlite_vm*, char **pzErrMsg);
-
-/*
-** This routine deletes the virtual machine, writes any error message to
-** *pzErrMsg and returns an SQLite return code in the same way as the
-** sqlite_finalize() function.
-**
-** Additionally, if ppVm is not NULL, *ppVm is left pointing to a new virtual
-** machine loaded with the compiled version of the original query ready for
-** execution.
-**
-** If sqlite_reset() returns SQLITE_SCHEMA, then *ppVm is set to NULL.
-**
-******* THIS IS AN EXPERIMENTAL API AND IS SUBJECT TO CHANGE ******
-*/
-int sqlite_reset(sqlite_vm*, char **pzErrMsg);
-
-/*
-** If the SQL that was handed to sqlite_compile contains variables that
-** are represeted in the SQL text by a question mark ('?'). This routine
-** is used to assign values to those variables.
-**
-** The first parameter is a virtual machine obtained from sqlite_compile().
-** The 2nd "idx" parameter determines which variable in the SQL statement
-** to bind the value to. The left most '?' is 1. The 3rd parameter is
-** the value to assign to that variable. The 4th parameter is the number
-** of bytes in the value, including the terminating \000 for strings.
-** Finally, the 5th "copy" parameter is TRUE if SQLite should make its
-** own private copy of this value, or false if the space that the 3rd
-** parameter points to will be unchanging and can be used directly by
-** SQLite.
-**
-** Unbound variables are treated as having a value of NULL. To explicitly
-** set a variable to NULL, call this routine with the 3rd parameter as a
-** NULL pointer.
-**
-** If the 4th "len" parameter is -1, then strlen() is used to find the
-** length.
-**
-** This routine can only be called immediately after sqlite_compile()
-** or sqlite_reset() and before any calls to sqlite_step().
-**
-******* THIS IS AN EXPERIMENTAL API AND IS SUBJECT TO CHANGE ******
-*/
-int sqlite_bind(sqlite_vm*, int idx, const char *value, int len, int copy);
-
-/*
-** This routine configures a callback function - the progress callback - that
-** is invoked periodically during long running calls to sqlite_exec(),
-** sqlite_step() and sqlite_get_table(). An example use for this API is to keep
-** a GUI updated during a large query.
-**
-** The progress callback is invoked once for every N virtual machine opcodes,
-** where N is the second argument to this function. The progress callback
-** itself is identified by the third argument to this function. The fourth
-** argument to this function is a void pointer passed to the progress callback
-** function each time it is invoked.
-**
-** If a call to sqlite_exec(), sqlite_step() or sqlite_get_table() results
-** in less than N opcodes being executed, then the progress callback is not
-** invoked.
-**
-** Calling this routine overwrites any previously installed progress callback.
-** To remove the progress callback altogether, pass NULL as the third
-** argument to this function.
-**
-** If the progress callback returns a result other than 0, then the current
-** query is immediately terminated and any database changes rolled back. If the
-** query was part of a larger transaction, then the transaction is not rolled
-** back and remains active. The sqlite_exec() call returns SQLITE_ABORT.
-*/
-void sqlite_progress_handler(sqlite*, int, int(*)(void*), void*);
-
-#ifdef __cplusplus
-} /* End of the 'extern "C"' block */
-#endif
-
-#endif /* _SQLITE_H_ */
diff --git a/ext/sqlite/libsqlite/src/sqliteInt.h b/ext/sqlite/libsqlite/src/sqliteInt.h
deleted file mode 100644
index 57e3ab6e36..0000000000
--- a/ext/sqlite/libsqlite/src/sqliteInt.h
+++ /dev/null
@@ -1,1266 +0,0 @@
-/*
-** 2001 September 15
-**
-** The author disclaims copyright to this source code. In place of
-** a legal notice, here is a blessing:
-**
-** May you do good and not evil.
-** May you find forgiveness for yourself and forgive others.
-** May you share freely, never taking more than you give.
-**
-*************************************************************************
-** Internal interface definitions for SQLite.
-**
-** @(#) $Id$
-*/
-#include "config.h"
-#include "sqlite.h"
-#include "hash.h"
-#include "parse.h"
-#include "btree.h"
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <assert.h>
-
-/*
-** The maximum number of in-memory pages to use for the main database
-** table and for temporary tables.
-*/
-#define MAX_PAGES 2000
-#define TEMP_PAGES 500
-
-/*
-** If the following macro is set to 1, then NULL values are considered
-** distinct for the SELECT DISTINCT statement and for UNION or EXCEPT
-** compound queries. No other SQL database engine (among those tested)
-** works this way except for OCELOT. But the SQL92 spec implies that
-** this is how things should work.
-**
-** If the following macro is set to 0, then NULLs are indistinct for
-** SELECT DISTINCT and for UNION.
-*/
-#define NULL_ALWAYS_DISTINCT 0
-
-/*
-** If the following macro is set to 1, then NULL values are considered
-** distinct when determining whether or not two entries are the same
-** in a UNIQUE index. This is the way PostgreSQL, Oracle, DB2, MySQL,
-** OCELOT, and Firebird all work. The SQL92 spec explicitly says this
-** is the way things are suppose to work.
-**
-** If the following macro is set to 0, the NULLs are indistinct for
-** a UNIQUE index. In this mode, you can only have a single NULL entry
-** for a column declared UNIQUE. This is the way Informix and SQL Server
-** work.
-*/
-#define NULL_DISTINCT_FOR_UNIQUE 1
-
-/*
-** The maximum number of attached databases. This must be at least 2
-** in order to support the main database file (0) and the file used to
-** hold temporary tables (1). And it must be less than 256 because
-** an unsigned character is used to stored the database index.
-*/
-#define MAX_ATTACHED 10
-
-/*
-** The next macro is used to determine where TEMP tables and indices
-** are stored. Possible values:
-**
-** 0 Always use a temporary files
-** 1 Use a file unless overridden by "PRAGMA temp_store"
-** 2 Use memory unless overridden by "PRAGMA temp_store"
-** 3 Always use memory
-*/
-#ifndef TEMP_STORE
-# define TEMP_STORE 1
-#endif
-
-/*
-** When building SQLite for embedded systems where memory is scarce,
-** you can define one or more of the following macros to omit extra
-** features of the library and thus keep the size of the library to
-** a minimum.
-*/
-/* #define SQLITE_OMIT_AUTHORIZATION 1 */
-/* #define SQLITE_OMIT_INMEMORYDB 1 */
-/* #define SQLITE_OMIT_VACUUM 1 */
-/* #define SQLITE_OMIT_DATETIME_FUNCS 1 */
-/* #define SQLITE_OMIT_PROGRESS_CALLBACK 1 */
-
-/*
-** Integers of known sizes. These typedefs might change for architectures
-** where the sizes very. Preprocessor macros are available so that the
-** types can be conveniently redefined at compile-type. Like this:
-**
-** cc '-DUINTPTR_TYPE=long long int' ...
-*/
-#ifndef UINT32_TYPE
-# define UINT32_TYPE unsigned int
-#endif
-#ifndef UINT16_TYPE
-# define UINT16_TYPE unsigned short int
-#endif
-#ifndef UINT8_TYPE
-# define UINT8_TYPE unsigned char
-#endif
-#ifndef INT8_TYPE
-# define INT8_TYPE signed char
-#endif
-#ifndef INTPTR_TYPE
-# if SQLITE_PTR_SZ==4
-# define INTPTR_TYPE int
-# else
-# define INTPTR_TYPE long long
-# endif
-#endif
-typedef UINT32_TYPE u32; /* 4-byte unsigned integer */
-typedef UINT16_TYPE u16; /* 2-byte unsigned integer */
-typedef UINT8_TYPE u8; /* 1-byte unsigned integer */
-typedef UINT8_TYPE i8; /* 1-byte signed integer */
-typedef INTPTR_TYPE ptr; /* Big enough to hold a pointer */
-typedef unsigned INTPTR_TYPE uptr; /* Big enough to hold a pointer */
-
-/*
-** Defer sourcing vdbe.h until after the "u8" typedef is defined.
-*/
-#include "vdbe.h"
-
-/*
-** Most C compilers these days recognize "long double", don't they?
-** Just in case we encounter one that does not, we will create a macro
-** for long double so that it can be easily changed to just "double".
-*/
-#ifndef LONGDOUBLE_TYPE
-# define LONGDOUBLE_TYPE long double
-#endif
-
-/*
-** This macro casts a pointer to an integer. Useful for doing
-** pointer arithmetic.
-*/
-#define Addr(X) ((uptr)X)
-
-/*
-** The maximum number of bytes of data that can be put into a single
-** row of a single table. The upper bound on this limit is 16777215
-** bytes (or 16MB-1). We have arbitrarily set the limit to just 1MB
-** here because the overflow page chain is inefficient for really big
-** records and we want to discourage people from thinking that
-** multi-megabyte records are OK. If your needs are different, you can
-** change this define and recompile to increase or decrease the record
-** size.
-**
-** The 16777198 is computed as follows: 238 bytes of payload on the
-** original pages plus 16448 overflow pages each holding 1020 bytes of
-** data.
-*/
-#define MAX_BYTES_PER_ROW 1048576
-/* #define MAX_BYTES_PER_ROW 16777198 */
-
-/*
-** If memory allocation problems are found, recompile with
-**
-** -DMEMORY_DEBUG=1
-**
-** to enable some sanity checking on malloc() and free(). To
-** check for memory leaks, recompile with
-**
-** -DMEMORY_DEBUG=2
-**
-** and a line of text will be written to standard error for
-** each malloc() and free(). This output can be analyzed
-** by an AWK script to determine if there are any leaks.
-*/
-#ifdef MEMORY_DEBUG
-# define sqliteMalloc(X) sqliteMalloc_(X,1,__FILE__,__LINE__)
-# define sqliteMallocRaw(X) sqliteMalloc_(X,0,__FILE__,__LINE__)
-# define sqliteFree(X) sqliteFree_(X,__FILE__,__LINE__)
-# define sqliteRealloc(X,Y) sqliteRealloc_(X,Y,__FILE__,__LINE__)
-# define sqliteStrDup(X) sqliteStrDup_(X,__FILE__,__LINE__)
-# define sqliteStrNDup(X,Y) sqliteStrNDup_(X,Y,__FILE__,__LINE__)
- void sqliteStrRealloc(char**);
-#else
-# define sqliteRealloc_(X,Y) sqliteRealloc(X,Y)
-# define sqliteStrRealloc(X)
-#endif
-
-/*
-** This variable gets set if malloc() ever fails. After it gets set,
-** the SQLite library shuts down permanently.
-*/
-extern int sqlite_malloc_failed;
-
-/*
-** The following global variables are used for testing and debugging
-** only. They only work if MEMORY_DEBUG is defined.
-*/
-#ifdef MEMORY_DEBUG
-extern int sqlite_nMalloc; /* Number of sqliteMalloc() calls */
-extern int sqlite_nFree; /* Number of sqliteFree() calls */
-extern int sqlite_iMallocFail; /* Fail sqliteMalloc() after this many calls */
-#endif
-
-/*
-** Name of the master database table. The master database table
-** is a special table that holds the names and attributes of all
-** user tables and indices.
-*/
-#define MASTER_NAME "sqlite_master"
-#define TEMP_MASTER_NAME "sqlite_temp_master"
-
-/*
-** The name of the schema table.
-*/
-#define SCHEMA_TABLE(x) (x?TEMP_MASTER_NAME:MASTER_NAME)
-
-/*
-** A convenience macro that returns the number of elements in
-** an array.
-*/
-#define ArraySize(X) (sizeof(X)/sizeof(X[0]))
-
-/*
-** Forward references to structures
-*/
-typedef struct Column Column;
-typedef struct Table Table;
-typedef struct Index Index;
-typedef struct Instruction Instruction;
-typedef struct Expr Expr;
-typedef struct ExprList ExprList;
-typedef struct Parse Parse;
-typedef struct Token Token;
-typedef struct IdList IdList;
-typedef struct SrcList SrcList;
-typedef struct WhereInfo WhereInfo;
-typedef struct WhereLevel WhereLevel;
-typedef struct Select Select;
-typedef struct AggExpr AggExpr;
-typedef struct FuncDef FuncDef;
-typedef struct Trigger Trigger;
-typedef struct TriggerStep TriggerStep;
-typedef struct TriggerStack TriggerStack;
-typedef struct FKey FKey;
-typedef struct Db Db;
-typedef struct AuthContext AuthContext;
-
-/*
-** Each database file to be accessed by the system is an instance
-** of the following structure. There are normally two of these structures
-** in the sqlite.aDb[] array. aDb[0] is the main database file and
-** aDb[1] is the database file used to hold temporary tables. Additional
-** databases may be attached.
-*/
-struct Db {
- char *zName; /* Name of this database */
- Btree *pBt; /* The B*Tree structure for this database file */
- int schema_cookie; /* Database schema version number for this file */
- Hash tblHash; /* All tables indexed by name */
- Hash idxHash; /* All (named) indices indexed by name */
- Hash trigHash; /* All triggers indexed by name */
- Hash aFKey; /* Foreign keys indexed by to-table */
- u8 inTrans; /* 0: not writable. 1: Transaction. 2: Checkpoint */
- u16 flags; /* Flags associated with this database */
- void *pAux; /* Auxiliary data. Usually NULL */
- void (*xFreeAux)(void*); /* Routine to free pAux */
-};
-
-/*
-** These macros can be used to test, set, or clear bits in the
-** Db.flags field.
-*/
-#define DbHasProperty(D,I,P) (((D)->aDb[I].flags&(P))==(P))
-#define DbHasAnyProperty(D,I,P) (((D)->aDb[I].flags&(P))!=0)
-#define DbSetProperty(D,I,P) (D)->aDb[I].flags|=(P)
-#define DbClearProperty(D,I,P) (D)->aDb[I].flags&=~(P)
-
-/*
-** Allowed values for the DB.flags field.
-**
-** The DB_Locked flag is set when the first OP_Transaction or OP_Checkpoint
-** opcode is emitted for a database. This prevents multiple occurances
-** of those opcodes for the same database in the same program. Similarly,
-** the DB_Cookie flag is set when the OP_VerifyCookie opcode is emitted,
-** and prevents duplicate OP_VerifyCookies from taking up space and slowing
-** down execution.
-**
-** The DB_SchemaLoaded flag is set after the database schema has been
-** read into internal hash tables.
-**
-** DB_UnresetViews means that one or more views have column names that
-** have been filled out. If the schema changes, these column names might
-** changes and so the view will need to be reset.
-*/
-#define DB_Locked 0x0001 /* OP_Transaction opcode has been emitted */
-#define DB_Cookie 0x0002 /* OP_VerifyCookie opcode has been emiited */
-#define DB_SchemaLoaded 0x0004 /* The schema has been loaded */
-#define DB_UnresetViews 0x0008 /* Some views have defined column names */
-
-
-/*
-** Each database is an instance of the following structure.
-**
-** The sqlite.file_format is initialized by the database file
-** and helps determines how the data in the database file is
-** represented. This field allows newer versions of the library
-** to read and write older databases. The various file formats
-** are as follows:
-**
-** file_format==1 Version 2.1.0.
-** file_format==2 Version 2.2.0. Add support for INTEGER PRIMARY KEY.
-** file_format==3 Version 2.6.0. Fix empty-string index bug.
-** file_format==4 Version 2.7.0. Add support for separate numeric and
-** text datatypes.
-**
-** The sqlite.temp_store determines where temporary database files
-** are stored. If 1, then a file is created to hold those tables. If
-** 2, then they are held in memory. 0 means use the default value in
-** the TEMP_STORE macro.
-**
-** The sqlite.lastRowid records the last insert rowid generated by an
-** insert statement. Inserts on views do not affect its value. Each
-** trigger has its own context, so that lastRowid can be updated inside
-** triggers as usual. The previous value will be restored once the trigger
-** exits. Upon entering a before or instead of trigger, lastRowid is no
-** longer (since after version 2.8.12) reset to -1.
-**
-** The sqlite.nChange does not count changes within triggers and keeps no
-** context. It is reset at start of sqlite_exec.
-** The sqlite.lsChange represents the number of changes made by the last
-** insert, update, or delete statement. It remains constant throughout the
-** length of a statement and is then updated by OP_SetCounts. It keeps a
-** context stack just like lastRowid so that the count of changes
-** within a trigger is not seen outside the trigger. Changes to views do not
-** affect the value of lsChange.
-** The sqlite.csChange keeps track of the number of current changes (since
-** the last statement) and is used to update sqlite_lsChange.
-*/
-struct sqlite {
- int nDb; /* Number of backends currently in use */
- Db *aDb; /* All backends */
- Db aDbStatic[2]; /* Static space for the 2 default backends */
- int flags; /* Miscellanous flags. See below */
- u8 file_format; /* What file format version is this database? */
- u8 safety_level; /* How aggressive at synching data to disk */
- u8 want_to_close; /* Close after all VDBEs are deallocated */
- u8 temp_store; /* 1=file, 2=memory, 0=compile-time default */
- u8 onError; /* Default conflict algorithm */
- int next_cookie; /* Next value of aDb[0].schema_cookie */
- int cache_size; /* Number of pages to use in the cache */
- int nTable; /* Number of tables in the database */
- void *pBusyArg; /* 1st Argument to the busy callback */
- int (*xBusyCallback)(void *,const char*,int); /* The busy callback */
- void *pCommitArg; /* Argument to xCommitCallback() */
- int (*xCommitCallback)(void*);/* Invoked at every commit. */
- Hash aFunc; /* All functions that can be in SQL exprs */
- int lastRowid; /* ROWID of most recent insert (see above) */
- int priorNewRowid; /* Last randomly generated ROWID */
- int magic; /* Magic number for detect library misuse */
- int nChange; /* Number of rows changed (see above) */
- int lsChange; /* Last statement change count (see above) */
- int csChange; /* Current statement change count (see above) */
- struct sqliteInitInfo { /* Information used during initialization */
- int iDb; /* When back is being initialized */
- int newTnum; /* Rootpage of table being initialized */
- u8 busy; /* TRUE if currently initializing */
- } init;
- struct Vdbe *pVdbe; /* List of active virtual machines */
- void (*xTrace)(void*,const char*); /* Trace function */
- void *pTraceArg; /* Argument to the trace function */
-#ifndef SQLITE_OMIT_AUTHORIZATION
- int (*xAuth)(void*,int,const char*,const char*,const char*,const char*);
- /* Access authorization function */
- void *pAuthArg; /* 1st argument to the access auth function */
-#endif
-#ifndef SQLITE_OMIT_PROGRESS_CALLBACK
- int (*xProgress)(void *); /* The progress callback */
- void *pProgressArg; /* Argument to the progress callback */
- int nProgressOps; /* Number of opcodes for progress callback */
-#endif
-};
-
-/*
-** Possible values for the sqlite.flags and or Db.flags fields.
-**
-** On sqlite.flags, the SQLITE_InTrans value means that we have
-** executed a BEGIN. On Db.flags, SQLITE_InTrans means a statement
-** transaction is active on that particular database file.
-*/
-#define SQLITE_VdbeTrace 0x00000001 /* True to trace VDBE execution */
-#define SQLITE_Initialized 0x00000002 /* True after initialization */
-#define SQLITE_Interrupt 0x00000004 /* Cancel current operation */
-#define SQLITE_InTrans 0x00000008 /* True if in a transaction */
-#define SQLITE_InternChanges 0x00000010 /* Uncommitted Hash table changes */
-#define SQLITE_FullColNames 0x00000020 /* Show full column names on SELECT */
-#define SQLITE_ShortColNames 0x00000040 /* Show short columns names */
-#define SQLITE_CountRows 0x00000080 /* Count rows changed by INSERT, */
- /* DELETE, or UPDATE and return */
- /* the count using a callback. */
-#define SQLITE_NullCallback 0x00000100 /* Invoke the callback once if the */
- /* result set is empty */
-#define SQLITE_ReportTypes 0x00000200 /* Include information on datatypes */
- /* in 4th argument of callback */
-
-/*
-** Possible values for the sqlite.magic field.
-** The numbers are obtained at random and have no special meaning, other
-** than being distinct from one another.
-*/
-#define SQLITE_MAGIC_OPEN 0xa029a697 /* Database is open */
-#define SQLITE_MAGIC_CLOSED 0x9f3c2d33 /* Database is closed */
-#define SQLITE_MAGIC_BUSY 0xf03b7906 /* Database currently in use */
-#define SQLITE_MAGIC_ERROR 0xb5357930 /* An SQLITE_MISUSE error occurred */
-
-/*
-** Each SQL function is defined by an instance of the following
-** structure. A pointer to this structure is stored in the sqlite.aFunc
-** hash table. When multiple functions have the same name, the hash table
-** points to a linked list of these structures.
-*/
-struct FuncDef {
- void (*xFunc)(sqlite_func*,int,const char**); /* Regular function */
- void (*xStep)(sqlite_func*,int,const char**); /* Aggregate function step */
- void (*xFinalize)(sqlite_func*); /* Aggregate function finializer */
- signed char nArg; /* Number of arguments. -1 means unlimited */
- signed char dataType; /* Arg that determines datatype. -1=NUMERIC, */
- /* -2=TEXT. -3=SQLITE_ARGS */
- u8 includeTypes; /* Add datatypes to args of xFunc and xStep */
- void *pUserData; /* User data parameter */
- FuncDef *pNext; /* Next function with same name */
-};
-
-/*
-** information about each column of an SQL table is held in an instance
-** of this structure.
-*/
-struct Column {
- char *zName; /* Name of this column */
- char *zDflt; /* Default value of this column */
- char *zType; /* Data type for this column */
- u8 notNull; /* True if there is a NOT NULL constraint */
- u8 isPrimKey; /* True if this column is part of the PRIMARY KEY */
- u8 sortOrder; /* Some combination of SQLITE_SO_... values */
- u8 dottedName; /* True if zName contains a "." character */
-};
-
-/*
-** The allowed sort orders.
-**
-** The TEXT and NUM values use bits that do not overlap with DESC and ASC.
-** That way the two can be combined into a single number.
-*/
-#define SQLITE_SO_UNK 0 /* Use the default collating type. (SCT_NUM) */
-#define SQLITE_SO_TEXT 2 /* Sort using memcmp() */
-#define SQLITE_SO_NUM 4 /* Sort using sqliteCompare() */
-#define SQLITE_SO_TYPEMASK 6 /* Mask to extract the collating sequence */
-#define SQLITE_SO_ASC 0 /* Sort in ascending order */
-#define SQLITE_SO_DESC 1 /* Sort in descending order */
-#define SQLITE_SO_DIRMASK 1 /* Mask to extract the sort direction */
-
-/*
-** Each SQL table is represented in memory by an instance of the
-** following structure.
-**
-** Table.zName is the name of the table. The case of the original
-** CREATE TABLE statement is stored, but case is not significant for
-** comparisons.
-**
-** Table.nCol is the number of columns in this table. Table.aCol is a
-** pointer to an array of Column structures, one for each column.
-**
-** If the table has an INTEGER PRIMARY KEY, then Table.iPKey is the index of
-** the column that is that key. Otherwise Table.iPKey is negative. Note
-** that the datatype of the PRIMARY KEY must be INTEGER for this field to
-** be set. An INTEGER PRIMARY KEY is used as the rowid for each row of
-** the table. If a table has no INTEGER PRIMARY KEY, then a random rowid
-** is generated for each row of the table. Table.hasPrimKey is true if
-** the table has any PRIMARY KEY, INTEGER or otherwise.
-**
-** Table.tnum is the page number for the root BTree page of the table in the
-** database file. If Table.iDb is the index of the database table backend
-** in sqlite.aDb[]. 0 is for the main database and 1 is for the file that
-** holds temporary tables and indices. If Table.isTransient
-** is true, then the table is stored in a file that is automatically deleted
-** when the VDBE cursor to the table is closed. In this case Table.tnum
-** refers VDBE cursor number that holds the table open, not to the root
-** page number. Transient tables are used to hold the results of a
-** sub-query that appears instead of a real table name in the FROM clause
-** of a SELECT statement.
-*/
-struct Table {
- char *zName; /* Name of the table */
- int nCol; /* Number of columns in this table */
- Column *aCol; /* Information about each column */
- int iPKey; /* If not less then 0, use aCol[iPKey] as the primary key */
- Index *pIndex; /* List of SQL indexes on this table. */
- int tnum; /* Root BTree node for this table (see note above) */
- Select *pSelect; /* NULL for tables. Points to definition if a view. */
- u8 readOnly; /* True if this table should not be written by the user */
- u8 iDb; /* Index into sqlite.aDb[] of the backend for this table */
- u8 isTransient; /* True if automatically deleted when VDBE finishes */
- u8 hasPrimKey; /* True if there exists a primary key */
- u8 keyConf; /* What to do in case of uniqueness conflict on iPKey */
- Trigger *pTrigger; /* List of SQL triggers on this table */
- FKey *pFKey; /* Linked list of all foreign keys in this table */
-};
-
-/*
-** Each foreign key constraint is an instance of the following structure.
-**
-** A foreign key is associated with two tables. The "from" table is
-** the table that contains the REFERENCES clause that creates the foreign
-** key. The "to" table is the table that is named in the REFERENCES clause.
-** Consider this example:
-**
-** CREATE TABLE ex1(
-** a INTEGER PRIMARY KEY,
-** b INTEGER CONSTRAINT fk1 REFERENCES ex2(x)
-** );
-**
-** For foreign key "fk1", the from-table is "ex1" and the to-table is "ex2".
-**
-** Each REFERENCES clause generates an instance of the following structure
-** which is attached to the from-table. The to-table need not exist when
-** the from-table is created. The existance of the to-table is not checked
-** until an attempt is made to insert data into the from-table.
-**
-** The sqlite.aFKey hash table stores pointers to this structure
-** given the name of a to-table. For each to-table, all foreign keys
-** associated with that table are on a linked list using the FKey.pNextTo
-** field.
-*/
-struct FKey {
- Table *pFrom; /* The table that constains the REFERENCES clause */
- FKey *pNextFrom; /* Next foreign key in pFrom */
- char *zTo; /* Name of table that the key points to */
- FKey *pNextTo; /* Next foreign key that points to zTo */
- int nCol; /* Number of columns in this key */
- struct sColMap { /* Mapping of columns in pFrom to columns in zTo */
- int iFrom; /* Index of column in pFrom */
- char *zCol; /* Name of column in zTo. If 0 use PRIMARY KEY */
- } *aCol; /* One entry for each of nCol column s */
- u8 isDeferred; /* True if constraint checking is deferred till COMMIT */
- u8 updateConf; /* How to resolve conflicts that occur on UPDATE */
- u8 deleteConf; /* How to resolve conflicts that occur on DELETE */
- u8 insertConf; /* How to resolve conflicts that occur on INSERT */
-};
-
-/*
-** SQLite supports many different ways to resolve a contraint
-** error. ROLLBACK processing means that a constraint violation
-** causes the operation in process to fail and for the current transaction
-** to be rolled back. ABORT processing means the operation in process
-** fails and any prior changes from that one operation are backed out,
-** but the transaction is not rolled back. FAIL processing means that
-** the operation in progress stops and returns an error code. But prior
-** changes due to the same operation are not backed out and no rollback
-** occurs. IGNORE means that the particular row that caused the constraint
-** error is not inserted or updated. Processing continues and no error
-** is returned. REPLACE means that preexisting database rows that caused
-** a UNIQUE constraint violation are removed so that the new insert or
-** update can proceed. Processing continues and no error is reported.
-**
-** RESTRICT, SETNULL, and CASCADE actions apply only to foreign keys.
-** RESTRICT is the same as ABORT for IMMEDIATE foreign keys and the
-** same as ROLLBACK for DEFERRED keys. SETNULL means that the foreign
-** key is set to NULL. CASCADE means that a DELETE or UPDATE of the
-** referenced table row is propagated into the row that holds the
-** foreign key.
-**
-** The following symbolic values are used to record which type
-** of action to take.
-*/
-#define OE_None 0 /* There is no constraint to check */
-#define OE_Rollback 1 /* Fail the operation and rollback the transaction */
-#define OE_Abort 2 /* Back out changes but do no rollback transaction */
-#define OE_Fail 3 /* Stop the operation but leave all prior changes */
-#define OE_Ignore 4 /* Ignore the error. Do not do the INSERT or UPDATE */
-#define OE_Replace 5 /* Delete existing record, then do INSERT or UPDATE */
-
-#define OE_Restrict 6 /* OE_Abort for IMMEDIATE, OE_Rollback for DEFERRED */
-#define OE_SetNull 7 /* Set the foreign key value to NULL */
-#define OE_SetDflt 8 /* Set the foreign key value to its default */
-#define OE_Cascade 9 /* Cascade the changes */
-
-#define OE_Default 99 /* Do whatever the default action is */
-
-/*
-** Each SQL index is represented in memory by an
-** instance of the following structure.
-**
-** The columns of the table that are to be indexed are described
-** by the aiColumn[] field of this structure. For example, suppose
-** we have the following table and index:
-**
-** CREATE TABLE Ex1(c1 int, c2 int, c3 text);
-** CREATE INDEX Ex2 ON Ex1(c3,c1);
-**
-** In the Table structure describing Ex1, nCol==3 because there are
-** three columns in the table. In the Index structure describing
-** Ex2, nColumn==2 since 2 of the 3 columns of Ex1 are indexed.
-** The value of aiColumn is {2, 0}. aiColumn[0]==2 because the
-** first column to be indexed (c3) has an index of 2 in Ex1.aCol[].
-** The second column to be indexed (c1) has an index of 0 in
-** Ex1.aCol[], hence Ex2.aiColumn[1]==0.
-**
-** The Index.onError field determines whether or not the indexed columns
-** must be unique and what to do if they are not. When Index.onError=OE_None,
-** it means this is not a unique index. Otherwise it is a unique index
-** and the value of Index.onError indicate the which conflict resolution
-** algorithm to employ whenever an attempt is made to insert a non-unique
-** element.
-*/
-struct Index {
- char *zName; /* Name of this index */
- int nColumn; /* Number of columns in the table used by this index */
- int *aiColumn; /* Which columns are used by this index. 1st is 0 */
- Table *pTable; /* The SQL table being indexed */
- int tnum; /* Page containing root of this index in database file */
- u8 onError; /* OE_Abort, OE_Ignore, OE_Replace, or OE_None */
- u8 autoIndex; /* True if is automatically created (ex: by UNIQUE) */
- u8 iDb; /* Index in sqlite.aDb[] of where this index is stored */
- Index *pNext; /* The next index associated with the same table */
-};
-
-/*
-** Each token coming out of the lexer is an instance of
-** this structure. Tokens are also used as part of an expression.
-**
-** Note if Token.z==0 then Token.dyn and Token.n are undefined and
-** may contain random values. Do not make any assuptions about Token.dyn
-** and Token.n when Token.z==0.
-*/
-struct Token {
- const char *z; /* Text of the token. Not NULL-terminated! */
- unsigned dyn : 1; /* True for malloced memory, false for static */
- unsigned n : 31; /* Number of characters in this token */
-};
-
-/*
-** Each node of an expression in the parse tree is an instance
-** of this structure.
-**
-** Expr.op is the opcode. The integer parser token codes are reused
-** as opcodes here. For example, the parser defines TK_GE to be an integer
-** code representing the ">=" operator. This same integer code is reused
-** to represent the greater-than-or-equal-to operator in the expression
-** tree.
-**
-** Expr.pRight and Expr.pLeft are subexpressions. Expr.pList is a list
-** of argument if the expression is a function.
-**
-** Expr.token is the operator token for this node. For some expressions
-** that have subexpressions, Expr.token can be the complete text that gave
-** rise to the Expr. In the latter case, the token is marked as being
-** a compound token.
-**
-** An expression of the form ID or ID.ID refers to a column in a table.
-** For such expressions, Expr.op is set to TK_COLUMN and Expr.iTable is
-** the integer cursor number of a VDBE cursor pointing to that table and
-** Expr.iColumn is the column number for the specific column. If the
-** expression is used as a result in an aggregate SELECT, then the
-** value is also stored in the Expr.iAgg column in the aggregate so that
-** it can be accessed after all aggregates are computed.
-**
-** If the expression is a function, the Expr.iTable is an integer code
-** representing which function. If the expression is an unbound variable
-** marker (a question mark character '?' in the original SQL) then the
-** Expr.iTable holds the index number for that variable.
-**
-** The Expr.pSelect field points to a SELECT statement. The SELECT might
-** be the right operand of an IN operator. Or, if a scalar SELECT appears
-** in an expression the opcode is TK_SELECT and Expr.pSelect is the only
-** operand.
-*/
-struct Expr {
- u8 op; /* Operation performed by this node */
- u8 dataType; /* Either SQLITE_SO_TEXT or SQLITE_SO_NUM */
- u8 iDb; /* Database referenced by this expression */
- u8 flags; /* Various flags. See below */
- Expr *pLeft, *pRight; /* Left and right subnodes */
- ExprList *pList; /* A list of expressions used as function arguments
- ** or in "<expr> IN (<expr-list)" */
- Token token; /* An operand token */
- Token span; /* Complete text of the expression */
- int iTable, iColumn; /* When op==TK_COLUMN, then this expr node means the
- ** iColumn-th field of the iTable-th table. */
- int iAgg; /* When op==TK_COLUMN and pParse->useAgg==TRUE, pull
- ** result from the iAgg-th element of the aggregator */
- Select *pSelect; /* When the expression is a sub-select. Also the
- ** right side of "<expr> IN (<select>)" */
-};
-
-/*
-** The following are the meanings of bits in the Expr.flags field.
-*/
-#define EP_FromJoin 0x0001 /* Originated in ON or USING clause of a join */
-
-/*
-** These macros can be used to test, set, or clear bits in the
-** Expr.flags field.
-*/
-#define ExprHasProperty(E,P) (((E)->flags&(P))==(P))
-#define ExprHasAnyProperty(E,P) (((E)->flags&(P))!=0)
-#define ExprSetProperty(E,P) (E)->flags|=(P)
-#define ExprClearProperty(E,P) (E)->flags&=~(P)
-
-/*
-** A list of expressions. Each expression may optionally have a
-** name. An expr/name combination can be used in several ways, such
-** as the list of "expr AS ID" fields following a "SELECT" or in the
-** list of "ID = expr" items in an UPDATE. A list of expressions can
-** also be used as the argument to a function, in which case the a.zName
-** field is not used.
-*/
-struct ExprList {
- int nExpr; /* Number of expressions on the list */
- int nAlloc; /* Number of entries allocated below */
- struct ExprList_item {
- Expr *pExpr; /* The list of expressions */
- char *zName; /* Token associated with this expression */
- u8 sortOrder; /* 1 for DESC or 0 for ASC */
- u8 isAgg; /* True if this is an aggregate like count(*) */
- u8 done; /* A flag to indicate when processing is finished */
- } *a; /* One entry for each expression */
-};
-
-/*
-** An instance of this structure can hold a simple list of identifiers,
-** such as the list "a,b,c" in the following statements:
-**
-** INSERT INTO t(a,b,c) VALUES ...;
-** CREATE INDEX idx ON t(a,b,c);
-** CREATE TRIGGER trig BEFORE UPDATE ON t(a,b,c) ...;
-**
-** The IdList.a.idx field is used when the IdList represents the list of
-** column names after a table name in an INSERT statement. In the statement
-**
-** INSERT INTO t(a,b,c) ...
-**
-** If "a" is the k-th column of table "t", then IdList.a[0].idx==k.
-*/
-struct IdList {
- int nId; /* Number of identifiers on the list */
- int nAlloc; /* Number of entries allocated for a[] below */
- struct IdList_item {
- char *zName; /* Name of the identifier */
- int idx; /* Index in some Table.aCol[] of a column named zName */
- } *a;
-};
-
-/*
-** The following structure describes the FROM clause of a SELECT statement.
-** Each table or subquery in the FROM clause is a separate element of
-** the SrcList.a[] array.
-**
-** With the addition of multiple database support, the following structure
-** can also be used to describe a particular table such as the table that
-** is modified by an INSERT, DELETE, or UPDATE statement. In standard SQL,
-** such a table must be a simple name: ID. But in SQLite, the table can
-** now be identified by a database name, a dot, then the table name: ID.ID.
-*/
-struct SrcList {
- u16 nSrc; /* Number of tables or subqueries in the FROM clause */
- u16 nAlloc; /* Number of entries allocated in a[] below */
- struct SrcList_item {
- char *zDatabase; /* Name of database holding this table */
- char *zName; /* Name of the table */
- char *zAlias; /* The "B" part of a "A AS B" phrase. zName is the "A" */
- Table *pTab; /* An SQL table corresponding to zName */
- Select *pSelect; /* A SELECT statement used in place of a table name */
- int jointype; /* Type of join between this table and the next */
- int iCursor; /* The VDBE cursor number used to access this table */
- Expr *pOn; /* The ON clause of a join */
- IdList *pUsing; /* The USING clause of a join */
- } a[1]; /* One entry for each identifier on the list */
-};
-
-/*
-** Permitted values of the SrcList.a.jointype field
-*/
-#define JT_INNER 0x0001 /* Any kind of inner or cross join */
-#define JT_NATURAL 0x0002 /* True for a "natural" join */
-#define JT_LEFT 0x0004 /* Left outer join */
-#define JT_RIGHT 0x0008 /* Right outer join */
-#define JT_OUTER 0x0010 /* The "OUTER" keyword is present */
-#define JT_ERROR 0x0020 /* unknown or unsupported join type */
-
-/*
-** For each nested loop in a WHERE clause implementation, the WhereInfo
-** structure contains a single instance of this structure. This structure
-** is intended to be private the the where.c module and should not be
-** access or modified by other modules.
-*/
-struct WhereLevel {
- int iMem; /* Memory cell used by this level */
- Index *pIdx; /* Index used */
- int iCur; /* Cursor number used for this index */
- int score; /* How well this indexed scored */
- int brk; /* Jump here to break out of the loop */
- int cont; /* Jump here to continue with the next loop cycle */
- int op, p1, p2; /* Opcode used to terminate the loop */
- int iLeftJoin; /* Memory cell used to implement LEFT OUTER JOIN */
- int top; /* First instruction of interior of the loop */
- int inOp, inP1, inP2;/* Opcode used to implement an IN operator */
- int bRev; /* Do the scan in the reverse direction */
-};
-
-/*
-** The WHERE clause processing routine has two halves. The
-** first part does the start of the WHERE loop and the second
-** half does the tail of the WHERE loop. An instance of
-** this structure is returned by the first half and passed
-** into the second half to give some continuity.
-*/
-struct WhereInfo {
- Parse *pParse;
- SrcList *pTabList; /* List of tables in the join */
- int iContinue; /* Jump here to continue with next record */
- int iBreak; /* Jump here to break out of the loop */
- int nLevel; /* Number of nested loop */
- int savedNTab; /* Value of pParse->nTab before WhereBegin() */
- int peakNTab; /* Value of pParse->nTab after WhereBegin() */
- WhereLevel a[1]; /* Information about each nest loop in the WHERE */
-};
-
-/*
-** An instance of the following structure contains all information
-** needed to generate code for a single SELECT statement.
-**
-** The zSelect field is used when the Select structure must be persistent.
-** Normally, the expression tree points to tokens in the original input
-** string that encodes the select. But if the Select structure must live
-** longer than its input string (for example when it is used to describe
-** a VIEW) we have to make a copy of the input string so that the nodes
-** of the expression tree will have something to point to. zSelect is used
-** to hold that copy.
-**
-** nLimit is set to -1 if there is no LIMIT clause. nOffset is set to 0.
-** If there is a LIMIT clause, the parser sets nLimit to the value of the
-** limit and nOffset to the value of the offset (or 0 if there is not
-** offset). But later on, nLimit and nOffset become the memory locations
-** in the VDBE that record the limit and offset counters.
-*/
-struct Select {
- ExprList *pEList; /* The fields of the result */
- u8 op; /* One of: TK_UNION TK_ALL TK_INTERSECT TK_EXCEPT */
- u8 isDistinct; /* True if the DISTINCT keyword is present */
- SrcList *pSrc; /* The FROM clause */
- Expr *pWhere; /* The WHERE clause */
- ExprList *pGroupBy; /* The GROUP BY clause */
- Expr *pHaving; /* The HAVING clause */
- ExprList *pOrderBy; /* The ORDER BY clause */
- Select *pPrior; /* Prior select in a compound select statement */
- int nLimit, nOffset; /* LIMIT and OFFSET values. -1 means not used */
- int iLimit, iOffset; /* Memory registers holding LIMIT & OFFSET counters */
- char *zSelect; /* Complete text of the SELECT command */
-};
-
-/*
-** The results of a select can be distributed in several ways.
-*/
-#define SRT_Callback 1 /* Invoke a callback with each row of result */
-#define SRT_Mem 2 /* Store result in a memory cell */
-#define SRT_Set 3 /* Store result as unique keys in a table */
-#define SRT_Union 5 /* Store result as keys in a table */
-#define SRT_Except 6 /* Remove result from a UNION table */
-#define SRT_Table 7 /* Store result as data with a unique key */
-#define SRT_TempTable 8 /* Store result in a trasient table */
-#define SRT_Discard 9 /* Do not save the results anywhere */
-#define SRT_Sorter 10 /* Store results in the sorter */
-#define SRT_Subroutine 11 /* Call a subroutine to handle results */
-
-/*
-** When a SELECT uses aggregate functions (like "count(*)" or "avg(f1)")
-** we have to do some additional analysis of expressions. An instance
-** of the following structure holds information about a single subexpression
-** somewhere in the SELECT statement. An array of these structures holds
-** all the information we need to generate code for aggregate
-** expressions.
-**
-** Note that when analyzing a SELECT containing aggregates, both
-** non-aggregate field variables and aggregate functions are stored
-** in the AggExpr array of the Parser structure.
-**
-** The pExpr field points to an expression that is part of either the
-** field list, the GROUP BY clause, the HAVING clause or the ORDER BY
-** clause. The expression will be freed when those clauses are cleaned
-** up. Do not try to delete the expression attached to AggExpr.pExpr.
-**
-** If AggExpr.pExpr==0, that means the expression is "count(*)".
-*/
-struct AggExpr {
- int isAgg; /* if TRUE contains an aggregate function */
- Expr *pExpr; /* The expression */
- FuncDef *pFunc; /* Information about the aggregate function */
-};
-
-/*
-** An SQL parser context. A copy of this structure is passed through
-** the parser and down into all the parser action routine in order to
-** carry around information that is global to the entire parse.
-*/
-struct Parse {
- sqlite *db; /* The main database structure */
- int rc; /* Return code from execution */
- char *zErrMsg; /* An error message */
- Token sErrToken; /* The token at which the error occurred */
- Token sFirstToken; /* The first token parsed */
- Token sLastToken; /* The last token parsed */
- const char *zTail; /* All SQL text past the last semicolon parsed */
- Table *pNewTable; /* A table being constructed by CREATE TABLE */
- Vdbe *pVdbe; /* An engine for executing database bytecode */
- u8 colNamesSet; /* TRUE after OP_ColumnName has been issued to pVdbe */
- u8 explain; /* True if the EXPLAIN flag is found on the query */
- u8 nameClash; /* A permanent table name clashes with temp table name */
- u8 useAgg; /* If true, extract field values from the aggregator
- ** while generating expressions. Normally false */
- int nErr; /* Number of errors seen */
- int nTab; /* Number of previously allocated VDBE cursors */
- int nMem; /* Number of memory cells used so far */
- int nSet; /* Number of sets used so far */
- int nAgg; /* Number of aggregate expressions */
- int nVar; /* Number of '?' variables seen in the SQL so far */
- AggExpr *aAgg; /* An array of aggregate expressions */
- const char *zAuthContext; /* The 6th parameter to db->xAuth callbacks */
- Trigger *pNewTrigger; /* Trigger under construct by a CREATE TRIGGER */
- TriggerStack *trigStack; /* Trigger actions being coded */
-};
-
-/*
-** An instance of the following structure can be declared on a stack and used
-** to save the Parse.zAuthContext value so that it can be restored later.
-*/
-struct AuthContext {
- const char *zAuthContext; /* Put saved Parse.zAuthContext here */
- Parse *pParse; /* The Parse structure */
-};
-
-/*
-** Bitfield flags for P2 value in OP_PutIntKey and OP_Delete
-*/
-#define OPFLAG_NCHANGE 1 /* Set to update db->nChange */
-#define OPFLAG_LASTROWID 2 /* Set to update db->lastRowid */
-#define OPFLAG_CSCHANGE 4 /* Set to update db->csChange */
-
-/*
- * Each trigger present in the database schema is stored as an instance of
- * struct Trigger.
- *
- * Pointers to instances of struct Trigger are stored in two ways.
- * 1. In the "trigHash" hash table (part of the sqlite* that represents the
- * database). This allows Trigger structures to be retrieved by name.
- * 2. All triggers associated with a single table form a linked list, using the
- * pNext member of struct Trigger. A pointer to the first element of the
- * linked list is stored as the "pTrigger" member of the associated
- * struct Table.
- *
- * The "step_list" member points to the first element of a linked list
- * containing the SQL statements specified as the trigger program.
- */
-struct Trigger {
- char *name; /* The name of the trigger */
- char *table; /* The table or view to which the trigger applies */
- u8 iDb; /* Database containing this trigger */
- u8 iTabDb; /* Database containing Trigger.table */
- u8 op; /* One of TK_DELETE, TK_UPDATE, TK_INSERT */
- u8 tr_tm; /* One of TK_BEFORE, TK_AFTER */
- Expr *pWhen; /* The WHEN clause of the expresion (may be NULL) */
- IdList *pColumns; /* If this is an UPDATE OF <column-list> trigger,
- the <column-list> is stored here */
- int foreach; /* One of TK_ROW or TK_STATEMENT */
- Token nameToken; /* Token containing zName. Use during parsing only */
-
- TriggerStep *step_list; /* Link list of trigger program steps */
- Trigger *pNext; /* Next trigger associated with the table */
-};
-
-/*
- * An instance of struct TriggerStep is used to store a single SQL statement
- * that is a part of a trigger-program.
- *
- * Instances of struct TriggerStep are stored in a singly linked list (linked
- * using the "pNext" member) referenced by the "step_list" member of the
- * associated struct Trigger instance. The first element of the linked list is
- * the first step of the trigger-program.
- *
- * The "op" member indicates whether this is a "DELETE", "INSERT", "UPDATE" or
- * "SELECT" statement. The meanings of the other members is determined by the
- * value of "op" as follows:
- *
- * (op == TK_INSERT)
- * orconf -> stores the ON CONFLICT algorithm
- * pSelect -> If this is an INSERT INTO ... SELECT ... statement, then
- * this stores a pointer to the SELECT statement. Otherwise NULL.
- * target -> A token holding the name of the table to insert into.
- * pExprList -> If this is an INSERT INTO ... VALUES ... statement, then
- * this stores values to be inserted. Otherwise NULL.
- * pIdList -> If this is an INSERT INTO ... (<column-names>) VALUES ...
- * statement, then this stores the column-names to be
- * inserted into.
- *
- * (op == TK_DELETE)
- * target -> A token holding the name of the table to delete from.
- * pWhere -> The WHERE clause of the DELETE statement if one is specified.
- * Otherwise NULL.
- *
- * (op == TK_UPDATE)
- * target -> A token holding the name of the table to update rows of.
- * pWhere -> The WHERE clause of the UPDATE statement if one is specified.
- * Otherwise NULL.
- * pExprList -> A list of the columns to update and the expressions to update
- * them to. See sqliteUpdate() documentation of "pChanges"
- * argument.
- *
- */
-struct TriggerStep {
- int op; /* One of TK_DELETE, TK_UPDATE, TK_INSERT, TK_SELECT */
- int orconf; /* OE_Rollback etc. */
- Trigger *pTrig; /* The trigger that this step is a part of */
-
- Select *pSelect; /* Valid for SELECT and sometimes
- INSERT steps (when pExprList == 0) */
- Token target; /* Valid for DELETE, UPDATE, INSERT steps */
- Expr *pWhere; /* Valid for DELETE, UPDATE steps */
- ExprList *pExprList; /* Valid for UPDATE statements and sometimes
- INSERT steps (when pSelect == 0) */
- IdList *pIdList; /* Valid for INSERT statements only */
-
- TriggerStep * pNext; /* Next in the link-list */
-};
-
-/*
- * An instance of struct TriggerStack stores information required during code
- * generation of a single trigger program. While the trigger program is being
- * coded, its associated TriggerStack instance is pointed to by the
- * "pTriggerStack" member of the Parse structure.
- *
- * The pTab member points to the table that triggers are being coded on. The
- * newIdx member contains the index of the vdbe cursor that points at the temp
- * table that stores the new.* references. If new.* references are not valid
- * for the trigger being coded (for example an ON DELETE trigger), then newIdx
- * is set to -1. The oldIdx member is analogous to newIdx, for old.* references.
- *
- * The ON CONFLICT policy to be used for the trigger program steps is stored
- * as the orconf member. If this is OE_Default, then the ON CONFLICT clause
- * specified for individual triggers steps is used.
- *
- * struct TriggerStack has a "pNext" member, to allow linked lists to be
- * constructed. When coding nested triggers (triggers fired by other triggers)
- * each nested trigger stores its parent trigger's TriggerStack as the "pNext"
- * pointer. Once the nested trigger has been coded, the pNext value is restored
- * to the pTriggerStack member of the Parse stucture and coding of the parent
- * trigger continues.
- *
- * Before a nested trigger is coded, the linked list pointed to by the
- * pTriggerStack is scanned to ensure that the trigger is not about to be coded
- * recursively. If this condition is detected, the nested trigger is not coded.
- */
-struct TriggerStack {
- Table *pTab; /* Table that triggers are currently being coded on */
- int newIdx; /* Index of vdbe cursor to "new" temp table */
- int oldIdx; /* Index of vdbe cursor to "old" temp table */
- int orconf; /* Current orconf policy */
- int ignoreJump; /* where to jump to for a RAISE(IGNORE) */
- Trigger *pTrigger; /* The trigger currently being coded */
- TriggerStack *pNext; /* Next trigger down on the trigger stack */
-};
-
-/*
-** The following structure contains information used by the sqliteFix...
-** routines as they walk the parse tree to make database references
-** explicit.
-*/
-typedef struct DbFixer DbFixer;
-struct DbFixer {
- Parse *pParse; /* The parsing context. Error messages written here */
- const char *zDb; /* Make sure all objects are contained in this database */
- const char *zType; /* Type of the container - used for error messages */
- const Token *pName; /* Name of the container - used for error messages */
-};
-
-/*
- * This global flag is set for performance testing of triggers. When it is set
- * SQLite will perform the overhead of building new and old trigger references
- * even when no triggers exist
- */
-extern int always_code_trigger_setup;
-
-/*
-** Internal function prototypes
-*/
-int sqliteStrICmp(const char *, const char *);
-int sqliteStrNICmp(const char *, const char *, int);
-int sqliteHashNoCase(const char *, int);
-int sqliteIsNumber(const char*);
-int sqliteCompare(const char *, const char *);
-int sqliteSortCompare(const char *, const char *);
-void sqliteRealToSortable(double r, char *);
-#ifdef MEMORY_DEBUG
- void *sqliteMalloc_(int,int,char*,int);
- void sqliteFree_(void*,char*,int);
- void *sqliteRealloc_(void*,int,char*,int);
- char *sqliteStrDup_(const char*,char*,int);
- char *sqliteStrNDup_(const char*, int,char*,int);
- void sqliteCheckMemory(void*,int);
-#else
- void *sqliteMalloc(int);
- void *sqliteMallocRaw(int);
- void sqliteFree(void*);
- void *sqliteRealloc(void*,int);
- char *sqliteStrDup(const char*);
- char *sqliteStrNDup(const char*, int);
-# define sqliteCheckMemory(a,b)
-#endif
-char *sqliteMPrintf(const char*, ...);
-char *sqliteVMPrintf(const char*, va_list);
-void sqliteSetString(char **, const char *, ...);
-void sqliteSetNString(char **, ...);
-void sqliteErrorMsg(Parse*, const char*, ...);
-void sqliteDequote(char*);
-int sqliteKeywordCode(const char*, int);
-int sqliteRunParser(Parse*, const char*, char **);
-void sqliteExec(Parse*);
-Expr *sqliteExpr(int, Expr*, Expr*, Token*);
-void sqliteExprSpan(Expr*,Token*,Token*);
-Expr *sqliteExprFunction(ExprList*, Token*);
-void sqliteExprDelete(Expr*);
-ExprList *sqliteExprListAppend(ExprList*,Expr*,Token*);
-void sqliteExprListDelete(ExprList*);
-int sqliteInit(sqlite*, char**);
-void sqlitePragma(Parse*,Token*,Token*,int);
-void sqliteResetInternalSchema(sqlite*, int);
-void sqliteBeginParse(Parse*,int);
-void sqliteRollbackInternalChanges(sqlite*);
-void sqliteCommitInternalChanges(sqlite*);
-Table *sqliteResultSetOfSelect(Parse*,char*,Select*);
-void sqliteOpenMasterTable(Vdbe *v, int);
-void sqliteStartTable(Parse*,Token*,Token*,int,int);
-void sqliteAddColumn(Parse*,Token*);
-void sqliteAddNotNull(Parse*, int);
-void sqliteAddPrimaryKey(Parse*, IdList*, int);
-void sqliteAddColumnType(Parse*,Token*,Token*);
-void sqliteAddDefaultValue(Parse*,Token*,int);
-int sqliteCollateType(const char*, int);
-void sqliteAddCollateType(Parse*, int);
-void sqliteEndTable(Parse*,Token*,Select*);
-void sqliteCreateView(Parse*,Token*,Token*,Select*,int);
-int sqliteViewGetColumnNames(Parse*,Table*);
-void sqliteDropTable(Parse*, Token*, int);
-void sqliteDeleteTable(sqlite*, Table*);
-void sqliteInsert(Parse*, SrcList*, ExprList*, Select*, IdList*, int);
-IdList *sqliteIdListAppend(IdList*, Token*);
-int sqliteIdListIndex(IdList*,const char*);
-SrcList *sqliteSrcListAppend(SrcList*, Token*, Token*);
-void sqliteSrcListAddAlias(SrcList*, Token*);
-void sqliteSrcListAssignCursors(Parse*, SrcList*);
-void sqliteIdListDelete(IdList*);
-void sqliteSrcListDelete(SrcList*);
-void sqliteCreateIndex(Parse*,Token*,SrcList*,IdList*,int,Token*,Token*);
-void sqliteDropIndex(Parse*, SrcList*);
-void sqliteAddKeyType(Vdbe*, ExprList*);
-void sqliteAddIdxKeyType(Vdbe*, Index*);
-int sqliteSelect(Parse*, Select*, int, int, Select*, int, int*);
-Select *sqliteSelectNew(ExprList*,SrcList*,Expr*,ExprList*,Expr*,ExprList*,
- int,int,int);
-void sqliteSelectDelete(Select*);
-void sqliteSelectUnbind(Select*);
-Table *sqliteSrcListLookup(Parse*, SrcList*);
-int sqliteIsReadOnly(Parse*, Table*, int);
-void sqliteDeleteFrom(Parse*, SrcList*, Expr*);
-void sqliteUpdate(Parse*, SrcList*, ExprList*, Expr*, int);
-WhereInfo *sqliteWhereBegin(Parse*, SrcList*, Expr*, int, ExprList**);
-void sqliteWhereEnd(WhereInfo*);
-void sqliteExprCode(Parse*, Expr*);
-int sqliteExprCodeExprList(Parse*, ExprList*, int);
-void sqliteExprIfTrue(Parse*, Expr*, int, int);
-void sqliteExprIfFalse(Parse*, Expr*, int, int);
-Table *sqliteFindTable(sqlite*,const char*, const char*);
-Table *sqliteLocateTable(Parse*,const char*, const char*);
-Index *sqliteFindIndex(sqlite*,const char*, const char*);
-void sqliteUnlinkAndDeleteIndex(sqlite*,Index*);
-void sqliteCopy(Parse*, SrcList*, Token*, Token*, int);
-void sqliteVacuum(Parse*, Token*);
-int sqliteRunVacuum(char**, sqlite*);
-int sqliteGlobCompare(const unsigned char*,const unsigned char*);
-int sqliteLikeCompare(const unsigned char*,const unsigned char*);
-char *sqliteTableNameFromToken(Token*);
-int sqliteExprCheck(Parse*, Expr*, int, int*);
-int sqliteExprType(Expr*);
-int sqliteExprCompare(Expr*, Expr*);
-int sqliteFuncId(Token*);
-int sqliteExprResolveIds(Parse*, SrcList*, ExprList*, Expr*);
-int sqliteExprAnalyzeAggregates(Parse*, Expr*);
-Vdbe *sqliteGetVdbe(Parse*);
-void sqliteRandomness(int, void*);
-void sqliteRollbackAll(sqlite*);
-void sqliteCodeVerifySchema(Parse*, int);
-void sqliteBeginTransaction(Parse*, int);
-void sqliteCommitTransaction(Parse*);
-void sqliteRollbackTransaction(Parse*);
-int sqliteExprIsConstant(Expr*);
-int sqliteExprIsInteger(Expr*, int*);
-int sqliteIsRowid(const char*);
-void sqliteGenerateRowDelete(sqlite*, Vdbe*, Table*, int, int);
-void sqliteGenerateRowIndexDelete(sqlite*, Vdbe*, Table*, int, char*);
-void sqliteGenerateConstraintChecks(Parse*,Table*,int,char*,int,int,int,int);
-void sqliteCompleteInsertion(Parse*, Table*, int, char*, int, int, int);
-int sqliteOpenTableAndIndices(Parse*, Table*, int);
-void sqliteBeginWriteOperation(Parse*, int, int);
-void sqliteEndWriteOperation(Parse*);
-Expr *sqliteExprDup(Expr*);
-void sqliteTokenCopy(Token*, Token*);
-ExprList *sqliteExprListDup(ExprList*);
-SrcList *sqliteSrcListDup(SrcList*);
-IdList *sqliteIdListDup(IdList*);
-Select *sqliteSelectDup(Select*);
-FuncDef *sqliteFindFunction(sqlite*,const char*,int,int,int);
-void sqliteRegisterBuiltinFunctions(sqlite*);
-void sqliteRegisterDateTimeFunctions(sqlite*);
-int sqliteSafetyOn(sqlite*);
-int sqliteSafetyOff(sqlite*);
-int sqliteSafetyCheck(sqlite*);
-void sqliteChangeCookie(sqlite*, Vdbe*);
-void sqliteBeginTrigger(Parse*, Token*,int,int,IdList*,SrcList*,int,Expr*,int);
-void sqliteFinishTrigger(Parse*, TriggerStep*, Token*);
-void sqliteDropTrigger(Parse*, SrcList*);
-void sqliteDropTriggerPtr(Parse*, Trigger*, int);
-int sqliteTriggersExist(Parse* , Trigger* , int , int , int, ExprList*);
-int sqliteCodeRowTrigger(Parse*, int, ExprList*, int, Table *, int, int,
- int, int);
-void sqliteViewTriggers(Parse*, Table*, Expr*, int, ExprList*);
-void sqliteDeleteTriggerStep(TriggerStep*);
-TriggerStep *sqliteTriggerSelectStep(Select*);
-TriggerStep *sqliteTriggerInsertStep(Token*, IdList*, ExprList*, Select*, int);
-TriggerStep *sqliteTriggerUpdateStep(Token*, ExprList*, Expr*, int);
-TriggerStep *sqliteTriggerDeleteStep(Token*, Expr*);
-void sqliteDeleteTrigger(Trigger*);
-int sqliteJoinType(Parse*, Token*, Token*, Token*);
-void sqliteCreateForeignKey(Parse*, IdList*, Token*, IdList*, int);
-void sqliteDeferForeignKey(Parse*, int);
-#ifndef SQLITE_OMIT_AUTHORIZATION
- void sqliteAuthRead(Parse*,Expr*,SrcList*);
- int sqliteAuthCheck(Parse*,int, const char*, const char*, const char*);
- void sqliteAuthContextPush(Parse*, AuthContext*, const char*);
- void sqliteAuthContextPop(AuthContext*);
-#else
-# define sqliteAuthRead(a,b,c)
-# define sqliteAuthCheck(a,b,c,d,e) SQLITE_OK
-# define sqliteAuthContextPush(a,b,c)
-# define sqliteAuthContextPop(a) ((void)(a))
-#endif
-void sqliteAttach(Parse*, Token*, Token*, Token*);
-void sqliteDetach(Parse*, Token*);
-int sqliteBtreeFactory(const sqlite *db, const char *zFilename,
- int mode, int nPg, Btree **ppBtree);
-int sqliteFixInit(DbFixer*, Parse*, int, const char*, const Token*);
-int sqliteFixSrcList(DbFixer*, SrcList*);
-int sqliteFixSelect(DbFixer*, Select*);
-int sqliteFixExpr(DbFixer*, Expr*);
-int sqliteFixExprList(DbFixer*, ExprList*);
-int sqliteFixTriggerStep(DbFixer*, TriggerStep*);
-double sqliteAtoF(const char *z, const char **);
-char *sqlite_snprintf(int,char*,const char*,...);
-int sqliteFitsIn32Bits(const char *);
diff --git a/ext/sqlite/libsqlite/src/sqlite_config.w32.h b/ext/sqlite/libsqlite/src/sqlite_config.w32.h
deleted file mode 100644
index 3903ffe95e..0000000000
--- a/ext/sqlite/libsqlite/src/sqlite_config.w32.h
+++ /dev/null
@@ -1,8 +0,0 @@
-#include "config.w32.h"
-#if ZTS
-# define THREADSAFE 1
-#endif
-#if !ZEND_DEBUG && !defined(NDEBUG)
-# define NDEBUG
-#endif
-#define SQLITE_PTR_SZ 4 \ No newline at end of file
diff --git a/ext/sqlite/libsqlite/src/table.c b/ext/sqlite/libsqlite/src/table.c
deleted file mode 100644
index 48c852d487..0000000000
--- a/ext/sqlite/libsqlite/src/table.c
+++ /dev/null
@@ -1,203 +0,0 @@
-/*
-** 2001 September 15
-**
-** The author disclaims copyright to this source code. In place of
-** a legal notice, here is a blessing:
-**
-** May you do good and not evil.
-** May you find forgiveness for yourself and forgive others.
-** May you share freely, never taking more than you give.
-**
-*************************************************************************
-** This file contains the sqlite_get_table() and sqlite_free_table()
-** interface routines. These are just wrappers around the main
-** interface routine of sqlite_exec().
-**
-** These routines are in a separate files so that they will not be linked
-** if they are not used.
-*/
-#include <stdlib.h>
-#include <string.h>
-#include "sqliteInt.h"
-
-/*
-** This structure is used to pass data from sqlite_get_table() through
-** to the callback function is uses to build the result.
-*/
-typedef struct TabResult {
- char **azResult;
- char *zErrMsg;
- int nResult;
- int nAlloc;
- int nRow;
- int nColumn;
- long nData;
- int rc;
-} TabResult;
-
-/*
-** This routine is called once for each row in the result table. Its job
-** is to fill in the TabResult structure appropriately, allocating new
-** memory as necessary.
-*/
-static int sqlite_get_table_cb(void *pArg, int nCol, char **argv, char **colv){
- TabResult *p = (TabResult*)pArg;
- int need;
- int i;
- char *z;
-
- /* Make sure there is enough space in p->azResult to hold everything
- ** we need to remember from this invocation of the callback.
- */
- if( p->nRow==0 && argv!=0 ){
- need = nCol*2;
- }else{
- need = nCol;
- }
- if( p->nData + need >= p->nAlloc ){
- char **azNew;
- p->nAlloc = p->nAlloc*2 + need + 1;
- azNew = realloc( p->azResult, sizeof(char*)*p->nAlloc );
- if( azNew==0 ){
- p->rc = SQLITE_NOMEM;
- return 1;
- }
- p->azResult = azNew;
- }
-
- /* If this is the first row, then generate an extra row containing
- ** the names of all columns.
- */
- if( p->nRow==0 ){
- p->nColumn = nCol;
- for(i=0; i<nCol; i++){
- if( colv[i]==0 ){
- z = 0;
- }else{
- z = malloc( strlen(colv[i])+1 );
- if( z==0 ){
- p->rc = SQLITE_NOMEM;
- return 1;
- }
- strcpy(z, colv[i]);
- }
- p->azResult[p->nData++] = z;
- }
- }else if( p->nColumn!=nCol ){
- sqliteSetString(&p->zErrMsg,
- "sqlite_get_table() called with two or more incompatible queries",
- (char*)0);
- p->rc = SQLITE_ERROR;
- return 1;
- }
-
- /* Copy over the row data
- */
- if( argv!=0 ){
- for(i=0; i<nCol; i++){
- if( argv[i]==0 ){
- z = 0;
- }else{
- z = malloc( strlen(argv[i])+1 );
- if( z==0 ){
- p->rc = SQLITE_NOMEM;
- return 1;
- }
- strcpy(z, argv[i]);
- }
- p->azResult[p->nData++] = z;
- }
- p->nRow++;
- }
- return 0;
-}
-
-/*
-** Query the database. But instead of invoking a callback for each row,
-** malloc() for space to hold the result and return the entire results
-** at the conclusion of the call.
-**
-** The result that is written to ***pazResult is held in memory obtained
-** from malloc(). But the caller cannot free this memory directly.
-** Instead, the entire table should be passed to sqlite_free_table() when
-** the calling procedure is finished using it.
-*/
-int sqlite_get_table(
- sqlite *db, /* The database on which the SQL executes */
- const char *zSql, /* The SQL to be executed */
- char ***pazResult, /* Write the result table here */
- int *pnRow, /* Write the number of rows in the result here */
- int *pnColumn, /* Write the number of columns of result here */
- char **pzErrMsg /* Write error messages here */
-){
- int rc;
- TabResult res;
- if( pazResult==0 ){ return SQLITE_ERROR; }
- *pazResult = 0;
- if( pnColumn ) *pnColumn = 0;
- if( pnRow ) *pnRow = 0;
- res.zErrMsg = 0;
- res.nResult = 0;
- res.nRow = 0;
- res.nColumn = 0;
- res.nData = 1;
- res.nAlloc = 20;
- res.rc = SQLITE_OK;
- res.azResult = malloc( sizeof(char*)*res.nAlloc );
- if( res.azResult==0 ){
- return SQLITE_NOMEM;
- }
- res.azResult[0] = 0;
- rc = sqlite_exec(db, zSql, sqlite_get_table_cb, &res, pzErrMsg);
- if( res.azResult ){
- res.azResult[0] = (char*)res.nData;
- }
- if( rc==SQLITE_ABORT ){
- sqlite_free_table(&res.azResult[1]);
- if( res.zErrMsg ){
- if( pzErrMsg ){
- free(*pzErrMsg);
- *pzErrMsg = res.zErrMsg;
- sqliteStrRealloc(pzErrMsg);
- }else{
- sqliteFree(res.zErrMsg);
- }
- }
- return res.rc;
- }
- sqliteFree(res.zErrMsg);
- if( rc!=SQLITE_OK ){
- sqlite_free_table(&res.azResult[1]);
- return rc;
- }
- if( res.nAlloc>res.nData ){
- char **azNew;
- azNew = realloc( res.azResult, sizeof(char*)*(res.nData+1) );
- if( azNew==0 ){
- sqlite_free_table(&res.azResult[1]);
- return SQLITE_NOMEM;
- }
- res.nAlloc = res.nData+1;
- res.azResult = azNew;
- }
- *pazResult = &res.azResult[1];
- if( pnColumn ) *pnColumn = res.nColumn;
- if( pnRow ) *pnRow = res.nRow;
- return rc;
-}
-
-/*
-** This routine frees the space the sqlite_get_table() malloced.
-*/
-void sqlite_free_table(
- char **azResult /* Result returned from from sqlite_get_table() */
-){
- if( azResult ){
- int i, n;
- azResult--;
- if( azResult==0 ) return;
- n = (int)(long)azResult[0];
- for(i=1; i<n; i++){ if( azResult[i] ) free(azResult[i]); }
- free(azResult);
- }
-}
diff --git a/ext/sqlite/libsqlite/src/tokenize.c b/ext/sqlite/libsqlite/src/tokenize.c
deleted file mode 100644
index 978c53418d..0000000000
--- a/ext/sqlite/libsqlite/src/tokenize.c
+++ /dev/null
@@ -1,679 +0,0 @@
-/*
-** 2001 September 15
-**
-** The author disclaims copyright to this source code. In place of
-** a legal notice, here is a blessing:
-**
-** May you do good and not evil.
-** May you find forgiveness for yourself and forgive others.
-** May you share freely, never taking more than you give.
-**
-*************************************************************************
-** An tokenizer for SQL
-**
-** This file contains C code that splits an SQL input string up into
-** individual tokens and sends those tokens one-by-one over to the
-** parser for analysis.
-**
-** $Id$
-*/
-#include "sqliteInt.h"
-#include "os.h"
-#include <ctype.h>
-#include <stdlib.h>
-
-/*
-** All the keywords of the SQL language are stored as in a hash
-** table composed of instances of the following structure.
-*/
-typedef struct Keyword Keyword;
-struct Keyword {
- char *zName; /* The keyword name */
- u8 tokenType; /* Token value for this keyword */
- u8 len; /* Length of this keyword */
- u8 iNext; /* Index in aKeywordTable[] of next with same hash */
-};
-
-/*
-** These are the keywords
-*/
-static Keyword aKeywordTable[] = {
- { "ABORT", TK_ABORT, },
- { "AFTER", TK_AFTER, },
- { "ALL", TK_ALL, },
- { "AND", TK_AND, },
- { "AS", TK_AS, },
- { "ASC", TK_ASC, },
- { "ATTACH", TK_ATTACH, },
- { "BEFORE", TK_BEFORE, },
- { "BEGIN", TK_BEGIN, },
- { "BETWEEN", TK_BETWEEN, },
- { "BY", TK_BY, },
- { "CASCADE", TK_CASCADE, },
- { "CASE", TK_CASE, },
- { "CHECK", TK_CHECK, },
- { "CLUSTER", TK_CLUSTER, },
- { "COLLATE", TK_COLLATE, },
- { "COMMIT", TK_COMMIT, },
- { "CONFLICT", TK_CONFLICT, },
- { "CONSTRAINT", TK_CONSTRAINT, },
- { "COPY", TK_COPY, },
- { "CREATE", TK_CREATE, },
- { "CROSS", TK_JOIN_KW, },
- { "DATABASE", TK_DATABASE, },
- { "DEFAULT", TK_DEFAULT, },
- { "DEFERRED", TK_DEFERRED, },
- { "DEFERRABLE", TK_DEFERRABLE, },
- { "DELETE", TK_DELETE, },
- { "DELIMITERS", TK_DELIMITERS, },
- { "DESC", TK_DESC, },
- { "DETACH", TK_DETACH, },
- { "DISTINCT", TK_DISTINCT, },
- { "DROP", TK_DROP, },
- { "END", TK_END, },
- { "EACH", TK_EACH, },
- { "ELSE", TK_ELSE, },
- { "EXCEPT", TK_EXCEPT, },
- { "EXPLAIN", TK_EXPLAIN, },
- { "FAIL", TK_FAIL, },
- { "FOR", TK_FOR, },
- { "FOREIGN", TK_FOREIGN, },
- { "FROM", TK_FROM, },
- { "FULL", TK_JOIN_KW, },
- { "GLOB", TK_GLOB, },
- { "GROUP", TK_GROUP, },
- { "HAVING", TK_HAVING, },
- { "IGNORE", TK_IGNORE, },
- { "IMMEDIATE", TK_IMMEDIATE, },
- { "IN", TK_IN, },
- { "INDEX", TK_INDEX, },
- { "INITIALLY", TK_INITIALLY, },
- { "INNER", TK_JOIN_KW, },
- { "INSERT", TK_INSERT, },
- { "INSTEAD", TK_INSTEAD, },
- { "INTERSECT", TK_INTERSECT, },
- { "INTO", TK_INTO, },
- { "IS", TK_IS, },
- { "ISNULL", TK_ISNULL, },
- { "JOIN", TK_JOIN, },
- { "KEY", TK_KEY, },
- { "LEFT", TK_JOIN_KW, },
- { "LIKE", TK_LIKE, },
- { "LIMIT", TK_LIMIT, },
- { "MATCH", TK_MATCH, },
- { "NATURAL", TK_JOIN_KW, },
- { "NOT", TK_NOT, },
- { "NOTNULL", TK_NOTNULL, },
- { "NULL", TK_NULL, },
- { "OF", TK_OF, },
- { "OFFSET", TK_OFFSET, },
- { "ON", TK_ON, },
- { "OR", TK_OR, },
- { "ORDER", TK_ORDER, },
- { "OUTER", TK_JOIN_KW, },
- { "PRAGMA", TK_PRAGMA, },
- { "PRIMARY", TK_PRIMARY, },
- { "RAISE", TK_RAISE, },
- { "REFERENCES", TK_REFERENCES, },
- { "REPLACE", TK_REPLACE, },
- { "RESTRICT", TK_RESTRICT, },
- { "RIGHT", TK_JOIN_KW, },
- { "ROLLBACK", TK_ROLLBACK, },
- { "ROW", TK_ROW, },
- { "SELECT", TK_SELECT, },
- { "SET", TK_SET, },
- { "STATEMENT", TK_STATEMENT, },
- { "TABLE", TK_TABLE, },
- { "TEMP", TK_TEMP, },
- { "TEMPORARY", TK_TEMP, },
- { "THEN", TK_THEN, },
- { "TRANSACTION", TK_TRANSACTION, },
- { "TRIGGER", TK_TRIGGER, },
- { "UNION", TK_UNION, },
- { "UNIQUE", TK_UNIQUE, },
- { "UPDATE", TK_UPDATE, },
- { "USING", TK_USING, },
- { "VACUUM", TK_VACUUM, },
- { "VALUES", TK_VALUES, },
- { "VIEW", TK_VIEW, },
- { "WHEN", TK_WHEN, },
- { "WHERE", TK_WHERE, },
-};
-
-/*
-** This is the hash table
-*/
-#define KEY_HASH_SIZE 101
-static u8 aiHashTable[KEY_HASH_SIZE];
-
-
-/*
-** This function looks up an identifier to determine if it is a
-** keyword. If it is a keyword, the token code of that keyword is
-** returned. If the input is not a keyword, TK_ID is returned.
-*/
-int sqliteKeywordCode(const char *z, int n){
- int h, i;
- Keyword *p;
- static char needInit = 1;
- if( needInit ){
- /* Initialize the keyword hash table */
- sqliteOsEnterMutex();
- if( needInit ){
- int nk;
- nk = sizeof(aKeywordTable)/sizeof(aKeywordTable[0]);
- for(i=0; i<nk; i++){
- aKeywordTable[i].len = strlen(aKeywordTable[i].zName);
- h = sqliteHashNoCase(aKeywordTable[i].zName, aKeywordTable[i].len);
- h %= KEY_HASH_SIZE;
- aKeywordTable[i].iNext = aiHashTable[h];
- aiHashTable[h] = i+1;
- }
- needInit = 0;
- }
- sqliteOsLeaveMutex();
- }
- h = sqliteHashNoCase(z, n) % KEY_HASH_SIZE;
- for(i=aiHashTable[h]; i; i=p->iNext){
- p = &aKeywordTable[i-1];
- if( p->len==n && sqliteStrNICmp(p->zName, z, n)==0 ){
- return p->tokenType;
- }
- }
- return TK_ID;
-}
-
-
-/*
-** If X is a character that can be used in an identifier and
-** X&0x80==0 then isIdChar[X] will be 1. If X&0x80==0x80 then
-** X is always an identifier character. (Hence all UTF-8
-** characters can be part of an identifier). isIdChar[X] will
-** be 0 for every character in the lower 128 ASCII characters
-** that cannot be used as part of an identifier.
-**
-** In this implementation, an identifier can be a string of
-** alphabetic characters, digits, and "_" plus any character
-** with the high-order bit set. The latter rule means that
-** any sequence of UTF-8 characters or characters taken from
-** an extended ISO8859 character set can form an identifier.
-*/
-static const char isIdChar[] = {
-/* x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF */
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x */
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 1x */
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 2x */
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, /* 3x */
- 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /* 4x */
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, /* 5x */
- 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /* 6x */
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, /* 7x */
-};
-
-
-/*
-** Return the length of the token that begins at z[0].
-** Store the token type in *tokenType before returning.
-*/
-static int sqliteGetToken(const unsigned char *z, int *tokenType){
- int i;
- switch( *z ){
- case ' ': case '\t': case '\n': case '\f': case '\r': {
- for(i=1; isspace(z[i]); i++){}
- *tokenType = TK_SPACE;
- return i;
- }
- case '-': {
- if( z[1]=='-' ){
- for(i=2; z[i] && z[i]!='\n'; i++){}
- *tokenType = TK_COMMENT;
- return i;
- }
- *tokenType = TK_MINUS;
- return 1;
- }
- case '(': {
- *tokenType = TK_LP;
- return 1;
- }
- case ')': {
- *tokenType = TK_RP;
- return 1;
- }
- case ';': {
- *tokenType = TK_SEMI;
- return 1;
- }
- case '+': {
- *tokenType = TK_PLUS;
- return 1;
- }
- case '*': {
- *tokenType = TK_STAR;
- return 1;
- }
- case '/': {
- if( z[1]!='*' || z[2]==0 ){
- *tokenType = TK_SLASH;
- return 1;
- }
- for(i=3; z[i] && (z[i]!='/' || z[i-1]!='*'); i++){}
- if( z[i] ) i++;
- *tokenType = TK_COMMENT;
- return i;
- }
- case '%': {
- *tokenType = TK_REM;
- return 1;
- }
- case '=': {
- *tokenType = TK_EQ;
- return 1 + (z[1]=='=');
- }
- case '<': {
- if( z[1]=='=' ){
- *tokenType = TK_LE;
- return 2;
- }else if( z[1]=='>' ){
- *tokenType = TK_NE;
- return 2;
- }else if( z[1]=='<' ){
- *tokenType = TK_LSHIFT;
- return 2;
- }else{
- *tokenType = TK_LT;
- return 1;
- }
- }
- case '>': {
- if( z[1]=='=' ){
- *tokenType = TK_GE;
- return 2;
- }else if( z[1]=='>' ){
- *tokenType = TK_RSHIFT;
- return 2;
- }else{
- *tokenType = TK_GT;
- return 1;
- }
- }
- case '!': {
- if( z[1]!='=' ){
- *tokenType = TK_ILLEGAL;
- return 2;
- }else{
- *tokenType = TK_NE;
- return 2;
- }
- }
- case '|': {
- if( z[1]!='|' ){
- *tokenType = TK_BITOR;
- return 1;
- }else{
- *tokenType = TK_CONCAT;
- return 2;
- }
- }
- case ',': {
- *tokenType = TK_COMMA;
- return 1;
- }
- case '&': {
- *tokenType = TK_BITAND;
- return 1;
- }
- case '~': {
- *tokenType = TK_BITNOT;
- return 1;
- }
- case '\'': case '"': {
- int delim = z[0];
- for(i=1; z[i]; i++){
- if( z[i]==delim ){
- if( z[i+1]==delim ){
- i++;
- }else{
- break;
- }
- }
- }
- if( z[i] ) i++;
- *tokenType = TK_STRING;
- return i;
- }
- case '.': {
- *tokenType = TK_DOT;
- return 1;
- }
- case '0': case '1': case '2': case '3': case '4':
- case '5': case '6': case '7': case '8': case '9': {
- *tokenType = TK_INTEGER;
- for(i=1; isdigit(z[i]); i++){}
- if( z[i]=='.' && isdigit(z[i+1]) ){
- i += 2;
- while( isdigit(z[i]) ){ i++; }
- *tokenType = TK_FLOAT;
- }
- if( (z[i]=='e' || z[i]=='E') &&
- ( isdigit(z[i+1])
- || ((z[i+1]=='+' || z[i+1]=='-') && isdigit(z[i+2]))
- )
- ){
- i += 2;
- while( isdigit(z[i]) ){ i++; }
- *tokenType = TK_FLOAT;
- }
- return i;
- }
- case '[': {
- for(i=1; z[i] && z[i-1]!=']'; i++){}
- *tokenType = TK_ID;
- return i;
- }
- case '?': {
- *tokenType = TK_VARIABLE;
- return 1;
- }
- default: {
- if( (*z&0x80)==0 && !isIdChar[*z] ){
- break;
- }
- for(i=1; (z[i]&0x80)!=0 || isIdChar[z[i]]; i++){}
- *tokenType = sqliteKeywordCode((char*)z, i);
- return i;
- }
- }
- *tokenType = TK_ILLEGAL;
- return 1;
-}
-
-/*
-** Run the parser on the given SQL string. The parser structure is
-** passed in. An SQLITE_ status code is returned. If an error occurs
-** and pzErrMsg!=NULL then an error message might be written into
-** memory obtained from malloc() and *pzErrMsg made to point to that
-** error message. Or maybe not.
-*/
-int sqliteRunParser(Parse *pParse, const char *zSql, char **pzErrMsg){
- int nErr = 0;
- int i;
- void *pEngine;
- int tokenType;
- int lastTokenParsed = -1;
- sqlite *db = pParse->db;
- extern void *sqliteParserAlloc(void*(*)(int));
- extern void sqliteParserFree(void*, void(*)(void*));
- extern int sqliteParser(void*, int, Token, Parse*);
-
- db->flags &= ~SQLITE_Interrupt;
- pParse->rc = SQLITE_OK;
- i = 0;
- pEngine = sqliteParserAlloc((void*(*)(int))malloc);
- if( pEngine==0 ){
- sqliteSetString(pzErrMsg, "out of memory", (char*)0);
- return 1;
- }
- pParse->sLastToken.dyn = 0;
- pParse->zTail = zSql;
- while( sqlite_malloc_failed==0 && zSql[i]!=0 ){
- assert( i>=0 );
- pParse->sLastToken.z = &zSql[i];
- assert( pParse->sLastToken.dyn==0 );
- pParse->sLastToken.n = sqliteGetToken((unsigned char*)&zSql[i], &tokenType);
- i += pParse->sLastToken.n;
- switch( tokenType ){
- case TK_SPACE:
- case TK_COMMENT: {
- if( (db->flags & SQLITE_Interrupt)!=0 ){
- pParse->rc = SQLITE_INTERRUPT;
- sqliteSetString(pzErrMsg, "interrupt", (char*)0);
- goto abort_parse;
- }
- break;
- }
- case TK_ILLEGAL: {
- sqliteSetNString(pzErrMsg, "unrecognized token: \"", -1,
- pParse->sLastToken.z, pParse->sLastToken.n, "\"", 1, 0);
- nErr++;
- goto abort_parse;
- }
- case TK_SEMI: {
- pParse->zTail = &zSql[i];
- /* Fall thru into the default case */
- }
- default: {
- sqliteParser(pEngine, tokenType, pParse->sLastToken, pParse);
- lastTokenParsed = tokenType;
- if( pParse->rc!=SQLITE_OK ){
- goto abort_parse;
- }
- break;
- }
- }
- }
-abort_parse:
- if( zSql[i]==0 && nErr==0 && pParse->rc==SQLITE_OK ){
- if( lastTokenParsed!=TK_SEMI ){
- sqliteParser(pEngine, TK_SEMI, pParse->sLastToken, pParse);
- pParse->zTail = &zSql[i];
- }
- sqliteParser(pEngine, 0, pParse->sLastToken, pParse);
- }
- sqliteParserFree(pEngine, free);
- if( pParse->rc!=SQLITE_OK && pParse->rc!=SQLITE_DONE && pParse->zErrMsg==0 ){
- sqliteSetString(&pParse->zErrMsg, sqlite_error_string(pParse->rc),
- (char*)0);
- }
- if( pParse->zErrMsg ){
- if( pzErrMsg && *pzErrMsg==0 ){
- *pzErrMsg = pParse->zErrMsg;
- }else{
- sqliteFree(pParse->zErrMsg);
- }
- pParse->zErrMsg = 0;
- if( !nErr ) nErr++;
- }
- if( pParse->pVdbe && pParse->nErr>0 ){
- sqliteVdbeDelete(pParse->pVdbe);
- pParse->pVdbe = 0;
- }
- if( pParse->pNewTable ){
- sqliteDeleteTable(pParse->db, pParse->pNewTable);
- pParse->pNewTable = 0;
- }
- if( pParse->pNewTrigger ){
- sqliteDeleteTrigger(pParse->pNewTrigger);
- pParse->pNewTrigger = 0;
- }
- if( nErr>0 && (pParse->rc==SQLITE_OK || pParse->rc==SQLITE_DONE) ){
- pParse->rc = SQLITE_ERROR;
- }
- return nErr;
-}
-
-/*
-** Token types used by the sqlite_complete() routine. See the header
-** comments on that procedure for additional information.
-*/
-#define tkEXPLAIN 0
-#define tkCREATE 1
-#define tkTEMP 2
-#define tkTRIGGER 3
-#define tkEND 4
-#define tkSEMI 5
-#define tkWS 6
-#define tkOTHER 7
-
-/*
-** Return TRUE if the given SQL string ends in a semicolon.
-**
-** Special handling is require for CREATE TRIGGER statements.
-** Whenever the CREATE TRIGGER keywords are seen, the statement
-** must end with ";END;".
-**
-** This implementation uses a state machine with 7 states:
-**
-** (0) START At the beginning or end of an SQL statement. This routine
-** returns 1 if it ends in the START state and 0 if it ends
-** in any other state.
-**
-** (1) EXPLAIN The keyword EXPLAIN has been seen at the beginning of
-** a statement.
-**
-** (2) CREATE The keyword CREATE has been seen at the beginning of a
-** statement, possibly preceeded by EXPLAIN and/or followed by
-** TEMP or TEMPORARY
-**
-** (3) NORMAL We are in the middle of statement which ends with a single
-** semicolon.
-**
-** (4) TRIGGER We are in the middle of a trigger definition that must be
-** ended by a semicolon, the keyword END, and another semicolon.
-**
-** (5) SEMI We've seen the first semicolon in the ";END;" that occurs at
-** the end of a trigger definition.
-**
-** (6) END We've seen the ";END" of the ";END;" that occurs at the end
-** of a trigger difinition.
-**
-** Transitions between states above are determined by tokens extracted
-** from the input. The following tokens are significant:
-**
-** (0) tkEXPLAIN The "explain" keyword.
-** (1) tkCREATE The "create" keyword.
-** (2) tkTEMP The "temp" or "temporary" keyword.
-** (3) tkTRIGGER The "trigger" keyword.
-** (4) tkEND The "end" keyword.
-** (5) tkSEMI A semicolon.
-** (6) tkWS Whitespace
-** (7) tkOTHER Any other SQL token.
-**
-** Whitespace never causes a state transition and is always ignored.
-*/
-int sqlite_complete(const char *zSql){
- u8 state = 0; /* Current state, using numbers defined in header comment */
- u8 token; /* Value of the next token */
-
- /* The following matrix defines the transition from one state to another
- ** according to what token is seen. trans[state][token] returns the
- ** next state.
- */
- static const u8 trans[7][8] = {
- /* Token: */
- /* State: ** EXPLAIN CREATE TEMP TRIGGER END SEMI WS OTHER */
- /* 0 START: */ { 1, 2, 3, 3, 3, 0, 0, 3, },
- /* 1 EXPLAIN: */ { 3, 2, 3, 3, 3, 0, 1, 3, },
- /* 2 CREATE: */ { 3, 3, 2, 4, 3, 0, 2, 3, },
- /* 3 NORMAL: */ { 3, 3, 3, 3, 3, 0, 3, 3, },
- /* 4 TRIGGER: */ { 4, 4, 4, 4, 4, 5, 4, 4, },
- /* 5 SEMI: */ { 4, 4, 4, 4, 6, 5, 5, 4, },
- /* 6 END: */ { 4, 4, 4, 4, 4, 0, 6, 4, },
- };
-
- while( *zSql ){
- switch( *zSql ){
- case ';': { /* A semicolon */
- token = tkSEMI;
- break;
- }
- case ' ':
- case '\r':
- case '\t':
- case '\n':
- case '\f': { /* White space is ignored */
- token = tkWS;
- break;
- }
- case '/': { /* C-style comments */
- if( zSql[1]!='*' ){
- token = tkOTHER;
- break;
- }
- zSql += 2;
- while( zSql[0] && (zSql[0]!='*' || zSql[1]!='/') ){ zSql++; }
- if( zSql[0]==0 ) return 0;
- zSql++;
- token = tkWS;
- break;
- }
- case '-': { /* SQL-style comments from "--" to end of line */
- if( zSql[1]!='-' ){
- token = tkOTHER;
- break;
- }
- while( *zSql && *zSql!='\n' ){ zSql++; }
- if( *zSql==0 ) return state==0;
- token = tkWS;
- break;
- }
- case '[': { /* Microsoft-style identifiers in [...] */
- zSql++;
- while( *zSql && *zSql!=']' ){ zSql++; }
- if( *zSql==0 ) return 0;
- token = tkOTHER;
- break;
- }
- case '"': /* single- and double-quoted strings */
- case '\'': {
- int c = *zSql;
- zSql++;
- while( *zSql && *zSql!=c ){ zSql++; }
- if( *zSql==0 ) return 0;
- token = tkOTHER;
- break;
- }
- default: {
- if( isIdChar[(u8)*zSql] ){
- /* Keywords and unquoted identifiers */
- int nId;
- for(nId=1; isIdChar[(u8)zSql[nId]]; nId++){}
- switch( *zSql ){
- case 'c': case 'C': {
- if( nId==6 && sqliteStrNICmp(zSql, "create", 6)==0 ){
- token = tkCREATE;
- }else{
- token = tkOTHER;
- }
- break;
- }
- case 't': case 'T': {
- if( nId==7 && sqliteStrNICmp(zSql, "trigger", 7)==0 ){
- token = tkTRIGGER;
- }else if( nId==4 && sqliteStrNICmp(zSql, "temp", 4)==0 ){
- token = tkTEMP;
- }else if( nId==9 && sqliteStrNICmp(zSql, "temporary", 9)==0 ){
- token = tkTEMP;
- }else{
- token = tkOTHER;
- }
- break;
- }
- case 'e': case 'E': {
- if( nId==3 && sqliteStrNICmp(zSql, "end", 3)==0 ){
- token = tkEND;
- }else if( nId==7 && sqliteStrNICmp(zSql, "explain", 7)==0 ){
- token = tkEXPLAIN;
- }else{
- token = tkOTHER;
- }
- break;
- }
- default: {
- token = tkOTHER;
- break;
- }
- }
- zSql += nId-1;
- }else{
- /* Operators and special symbols */
- token = tkOTHER;
- }
- break;
- }
- }
- state = trans[state][token];
- zSql++;
- }
- return state==0;
-}
diff --git a/ext/sqlite/libsqlite/src/trigger.c b/ext/sqlite/libsqlite/src/trigger.c
deleted file mode 100644
index 8442bb5dd8..0000000000
--- a/ext/sqlite/libsqlite/src/trigger.c
+++ /dev/null
@@ -1,764 +0,0 @@
-/*
-**
-** The author disclaims copyright to this source code. In place of
-** a legal notice, here is a blessing:
-**
-** May you do good and not evil.
-** May you find forgiveness for yourself and forgive others.
-** May you share freely, never taking more than you give.
-**
-*************************************************************************
-*
-*/
-#include "sqliteInt.h"
-
-/*
-** Delete a linked list of TriggerStep structures.
-*/
-void sqliteDeleteTriggerStep(TriggerStep *pTriggerStep){
- while( pTriggerStep ){
- TriggerStep * pTmp = pTriggerStep;
- pTriggerStep = pTriggerStep->pNext;
-
- if( pTmp->target.dyn ) sqliteFree((char*)pTmp->target.z);
- sqliteExprDelete(pTmp->pWhere);
- sqliteExprListDelete(pTmp->pExprList);
- sqliteSelectDelete(pTmp->pSelect);
- sqliteIdListDelete(pTmp->pIdList);
-
- sqliteFree(pTmp);
- }
-}
-
-/*
-** This is called by the parser when it sees a CREATE TRIGGER statement
-** up to the point of the BEGIN before the trigger actions. A Trigger
-** structure is generated based on the information available and stored
-** in pParse->pNewTrigger. After the trigger actions have been parsed, the
-** sqliteFinishTrigger() function is called to complete the trigger
-** construction process.
-*/
-void sqliteBeginTrigger(
- Parse *pParse, /* The parse context of the CREATE TRIGGER statement */
- Token *pName, /* The name of the trigger */
- int tr_tm, /* One of TK_BEFORE, TK_AFTER, TK_INSTEAD */
- int op, /* One of TK_INSERT, TK_UPDATE, TK_DELETE */
- IdList *pColumns, /* column list if this is an UPDATE OF trigger */
- SrcList *pTableName,/* The name of the table/view the trigger applies to */
- int foreach, /* One of TK_ROW or TK_STATEMENT */
- Expr *pWhen, /* WHEN clause */
- int isTemp /* True if the TEMPORARY keyword is present */
-){
- Trigger *nt;
- Table *tab;
- char *zName = 0; /* Name of the trigger */
- sqlite *db = pParse->db;
- int iDb; /* When database to store the trigger in */
- DbFixer sFix;
-
- /* Check that:
- ** 1. the trigger name does not already exist.
- ** 2. the table (or view) does exist in the same database as the trigger.
- ** 3. that we are not trying to create a trigger on the sqlite_master table
- ** 4. That we are not trying to create an INSTEAD OF trigger on a table.
- ** 5. That we are not trying to create a BEFORE or AFTER trigger on a view.
- */
- if( sqlite_malloc_failed ) goto trigger_cleanup;
- assert( pTableName->nSrc==1 );
- if( db->init.busy
- && sqliteFixInit(&sFix, pParse, db->init.iDb, "trigger", pName)
- && sqliteFixSrcList(&sFix, pTableName)
- ){
- goto trigger_cleanup;
- }
- tab = sqliteSrcListLookup(pParse, pTableName);
- if( !tab ){
- goto trigger_cleanup;
- }
- iDb = isTemp ? 1 : tab->iDb;
- if( iDb>=2 && !db->init.busy ){
- sqliteErrorMsg(pParse, "triggers may not be added to auxiliary "
- "database %s", db->aDb[tab->iDb].zName);
- goto trigger_cleanup;
- }
-
- zName = sqliteStrNDup(pName->z, pName->n);
- sqliteDequote(zName);
- if( sqliteHashFind(&(db->aDb[iDb].trigHash), zName,pName->n+1) ){
- sqliteErrorMsg(pParse, "trigger %T already exists", pName);
- goto trigger_cleanup;
- }
- if( sqliteStrNICmp(tab->zName, "sqlite_", 7)==0 ){
- sqliteErrorMsg(pParse, "cannot create trigger on system table");
- pParse->nErr++;
- goto trigger_cleanup;
- }
- if( tab->pSelect && tr_tm != TK_INSTEAD ){
- sqliteErrorMsg(pParse, "cannot create %s trigger on view: %S",
- (tr_tm == TK_BEFORE)?"BEFORE":"AFTER", pTableName, 0);
- goto trigger_cleanup;
- }
- if( !tab->pSelect && tr_tm == TK_INSTEAD ){
- sqliteErrorMsg(pParse, "cannot create INSTEAD OF"
- " trigger on table: %S", pTableName, 0);
- goto trigger_cleanup;
- }
-#ifndef SQLITE_OMIT_AUTHORIZATION
- {
- int code = SQLITE_CREATE_TRIGGER;
- const char *zDb = db->aDb[tab->iDb].zName;
- const char *zDbTrig = isTemp ? db->aDb[1].zName : zDb;
- if( tab->iDb==1 || isTemp ) code = SQLITE_CREATE_TEMP_TRIGGER;
- if( sqliteAuthCheck(pParse, code, zName, tab->zName, zDbTrig) ){
- goto trigger_cleanup;
- }
- if( sqliteAuthCheck(pParse, SQLITE_INSERT, SCHEMA_TABLE(tab->iDb), 0, zDb)){
- goto trigger_cleanup;
- }
- }
-#endif
-
- /* INSTEAD OF triggers can only appear on views and BEGIN triggers
- ** cannot appear on views. So we might as well translate every
- ** INSTEAD OF trigger into a BEFORE trigger. It simplifies code
- ** elsewhere.
- */
- if (tr_tm == TK_INSTEAD){
- tr_tm = TK_BEFORE;
- }
-
- /* Build the Trigger object */
- nt = (Trigger*)sqliteMalloc(sizeof(Trigger));
- if( nt==0 ) goto trigger_cleanup;
- nt->name = zName;
- zName = 0;
- nt->table = sqliteStrDup(pTableName->a[0].zName);
- if( sqlite_malloc_failed ) goto trigger_cleanup;
- nt->iDb = iDb;
- nt->iTabDb = tab->iDb;
- nt->op = op;
- nt->tr_tm = tr_tm;
- nt->pWhen = sqliteExprDup(pWhen);
- nt->pColumns = sqliteIdListDup(pColumns);
- nt->foreach = foreach;
- sqliteTokenCopy(&nt->nameToken,pName);
- assert( pParse->pNewTrigger==0 );
- pParse->pNewTrigger = nt;
-
-trigger_cleanup:
- sqliteFree(zName);
- sqliteSrcListDelete(pTableName);
- sqliteIdListDelete(pColumns);
- sqliteExprDelete(pWhen);
-}
-
-/*
-** This routine is called after all of the trigger actions have been parsed
-** in order to complete the process of building the trigger.
-*/
-void sqliteFinishTrigger(
- Parse *pParse, /* Parser context */
- TriggerStep *pStepList, /* The triggered program */
- Token *pAll /* Token that describes the complete CREATE TRIGGER */
-){
- Trigger *nt = 0; /* The trigger whose construction is finishing up */
- sqlite *db = pParse->db; /* The database */
- DbFixer sFix;
-
- if( pParse->nErr || pParse->pNewTrigger==0 ) goto triggerfinish_cleanup;
- nt = pParse->pNewTrigger;
- pParse->pNewTrigger = 0;
- nt->step_list = pStepList;
- while( pStepList ){
- pStepList->pTrig = nt;
- pStepList = pStepList->pNext;
- }
- if( sqliteFixInit(&sFix, pParse, nt->iDb, "trigger", &nt->nameToken)
- && sqliteFixTriggerStep(&sFix, nt->step_list) ){
- goto triggerfinish_cleanup;
- }
-
- /* if we are not initializing, and this trigger is not on a TEMP table,
- ** build the sqlite_master entry
- */
- if( !db->init.busy ){
- static VdbeOpList insertTrig[] = {
- { OP_NewRecno, 0, 0, 0 },
- { OP_String, 0, 0, "trigger" },
- { OP_String, 0, 0, 0 }, /* 2: trigger name */
- { OP_String, 0, 0, 0 }, /* 3: table name */
- { OP_Integer, 0, 0, 0 },
- { OP_String, 0, 0, 0 }, /* 5: SQL */
- { OP_MakeRecord, 5, 0, 0 },
- { OP_PutIntKey, 0, 0, 0 },
- };
- int addr;
- Vdbe *v;
-
- /* Make an entry in the sqlite_master table */
- v = sqliteGetVdbe(pParse);
- if( v==0 ) goto triggerfinish_cleanup;
- sqliteBeginWriteOperation(pParse, 0, 0);
- sqliteOpenMasterTable(v, nt->iDb);
- addr = sqliteVdbeAddOpList(v, ArraySize(insertTrig), insertTrig);
- sqliteVdbeChangeP3(v, addr+2, nt->name, 0);
- sqliteVdbeChangeP3(v, addr+3, nt->table, 0);
- sqliteVdbeChangeP3(v, addr+5, pAll->z, pAll->n);
- if( nt->iDb==0 ){
- sqliteChangeCookie(db, v);
- }
- sqliteVdbeAddOp(v, OP_Close, 0, 0);
- sqliteEndWriteOperation(pParse);
- }
-
- if( !pParse->explain ){
- Table *pTab;
- sqliteHashInsert(&db->aDb[nt->iDb].trigHash,
- nt->name, strlen(nt->name)+1, nt);
- pTab = sqliteLocateTable(pParse, nt->table, db->aDb[nt->iTabDb].zName);
- assert( pTab!=0 );
- nt->pNext = pTab->pTrigger;
- pTab->pTrigger = nt;
- nt = 0;
- }
-
-triggerfinish_cleanup:
- sqliteDeleteTrigger(nt);
- sqliteDeleteTrigger(pParse->pNewTrigger);
- pParse->pNewTrigger = 0;
- sqliteDeleteTriggerStep(pStepList);
-}
-
-/*
-** Make a copy of all components of the given trigger step. This has
-** the effect of copying all Expr.token.z values into memory obtained
-** from sqliteMalloc(). As initially created, the Expr.token.z values
-** all point to the input string that was fed to the parser. But that
-** string is ephemeral - it will go away as soon as the sqlite_exec()
-** call that started the parser exits. This routine makes a persistent
-** copy of all the Expr.token.z strings so that the TriggerStep structure
-** will be valid even after the sqlite_exec() call returns.
-*/
-static void sqlitePersistTriggerStep(TriggerStep *p){
- if( p->target.z ){
- p->target.z = sqliteStrNDup(p->target.z, p->target.n);
- p->target.dyn = 1;
- }
- if( p->pSelect ){
- Select *pNew = sqliteSelectDup(p->pSelect);
- sqliteSelectDelete(p->pSelect);
- p->pSelect = pNew;
- }
- if( p->pWhere ){
- Expr *pNew = sqliteExprDup(p->pWhere);
- sqliteExprDelete(p->pWhere);
- p->pWhere = pNew;
- }
- if( p->pExprList ){
- ExprList *pNew = sqliteExprListDup(p->pExprList);
- sqliteExprListDelete(p->pExprList);
- p->pExprList = pNew;
- }
- if( p->pIdList ){
- IdList *pNew = sqliteIdListDup(p->pIdList);
- sqliteIdListDelete(p->pIdList);
- p->pIdList = pNew;
- }
-}
-
-/*
-** Turn a SELECT statement (that the pSelect parameter points to) into
-** a trigger step. Return a pointer to a TriggerStep structure.
-**
-** The parser calls this routine when it finds a SELECT statement in
-** body of a TRIGGER.
-*/
-TriggerStep *sqliteTriggerSelectStep(Select *pSelect){
- TriggerStep *pTriggerStep = sqliteMalloc(sizeof(TriggerStep));
- if( pTriggerStep==0 ) return 0;
-
- pTriggerStep->op = TK_SELECT;
- pTriggerStep->pSelect = pSelect;
- pTriggerStep->orconf = OE_Default;
- sqlitePersistTriggerStep(pTriggerStep);
-
- return pTriggerStep;
-}
-
-/*
-** Build a trigger step out of an INSERT statement. Return a pointer
-** to the new trigger step.
-**
-** The parser calls this routine when it sees an INSERT inside the
-** body of a trigger.
-*/
-TriggerStep *sqliteTriggerInsertStep(
- Token *pTableName, /* Name of the table into which we insert */
- IdList *pColumn, /* List of columns in pTableName to insert into */
- ExprList *pEList, /* The VALUE clause: a list of values to be inserted */
- Select *pSelect, /* A SELECT statement that supplies values */
- int orconf /* The conflict algorithm (OE_Abort, OE_Replace, etc.) */
-){
- TriggerStep *pTriggerStep = sqliteMalloc(sizeof(TriggerStep));
- if( pTriggerStep==0 ) return 0;
-
- assert(pEList == 0 || pSelect == 0);
- assert(pEList != 0 || pSelect != 0);
-
- pTriggerStep->op = TK_INSERT;
- pTriggerStep->pSelect = pSelect;
- pTriggerStep->target = *pTableName;
- pTriggerStep->pIdList = pColumn;
- pTriggerStep->pExprList = pEList;
- pTriggerStep->orconf = orconf;
- sqlitePersistTriggerStep(pTriggerStep);
-
- return pTriggerStep;
-}
-
-/*
-** Construct a trigger step that implements an UPDATE statement and return
-** a pointer to that trigger step. The parser calls this routine when it
-** sees an UPDATE statement inside the body of a CREATE TRIGGER.
-*/
-TriggerStep *sqliteTriggerUpdateStep(
- Token *pTableName, /* Name of the table to be updated */
- ExprList *pEList, /* The SET clause: list of column and new values */
- Expr *pWhere, /* The WHERE clause */
- int orconf /* The conflict algorithm. (OE_Abort, OE_Ignore, etc) */
-){
- TriggerStep *pTriggerStep = sqliteMalloc(sizeof(TriggerStep));
- if( pTriggerStep==0 ) return 0;
-
- pTriggerStep->op = TK_UPDATE;
- pTriggerStep->target = *pTableName;
- pTriggerStep->pExprList = pEList;
- pTriggerStep->pWhere = pWhere;
- pTriggerStep->orconf = orconf;
- sqlitePersistTriggerStep(pTriggerStep);
-
- return pTriggerStep;
-}
-
-/*
-** Construct a trigger step that implements a DELETE statement and return
-** a pointer to that trigger step. The parser calls this routine when it
-** sees a DELETE statement inside the body of a CREATE TRIGGER.
-*/
-TriggerStep *sqliteTriggerDeleteStep(Token *pTableName, Expr *pWhere){
- TriggerStep *pTriggerStep = sqliteMalloc(sizeof(TriggerStep));
- if( pTriggerStep==0 ) return 0;
-
- pTriggerStep->op = TK_DELETE;
- pTriggerStep->target = *pTableName;
- pTriggerStep->pWhere = pWhere;
- pTriggerStep->orconf = OE_Default;
- sqlitePersistTriggerStep(pTriggerStep);
-
- return pTriggerStep;
-}
-
-/*
-** Recursively delete a Trigger structure
-*/
-void sqliteDeleteTrigger(Trigger *pTrigger){
- if( pTrigger==0 ) return;
- sqliteDeleteTriggerStep(pTrigger->step_list);
- sqliteFree(pTrigger->name);
- sqliteFree(pTrigger->table);
- sqliteExprDelete(pTrigger->pWhen);
- sqliteIdListDelete(pTrigger->pColumns);
- if( pTrigger->nameToken.dyn ) sqliteFree((char*)pTrigger->nameToken.z);
- sqliteFree(pTrigger);
-}
-
-/*
- * This function is called to drop a trigger from the database schema.
- *
- * This may be called directly from the parser and therefore identifies
- * the trigger by name. The sqliteDropTriggerPtr() routine does the
- * same job as this routine except it take a spointer to the trigger
- * instead of the trigger name.
- *
- * Note that this function does not delete the trigger entirely. Instead it
- * removes it from the internal schema and places it in the trigDrop hash
- * table. This is so that the trigger can be restored into the database schema
- * if the transaction is rolled back.
- */
-void sqliteDropTrigger(Parse *pParse, SrcList *pName){
- Trigger *pTrigger;
- int i;
- const char *zDb;
- const char *zName;
- int nName;
- sqlite *db = pParse->db;
-
- if( sqlite_malloc_failed ) goto drop_trigger_cleanup;
- assert( pName->nSrc==1 );
- zDb = pName->a[0].zDatabase;
- zName = pName->a[0].zName;
- nName = strlen(zName);
- for(i=0; i<db->nDb; i++){
- int j = (i<2) ? i^1 : i; /* Search TEMP before MAIN */
- if( zDb && sqliteStrICmp(db->aDb[j].zName, zDb) ) continue;
- pTrigger = sqliteHashFind(&(db->aDb[j].trigHash), zName, nName+1);
- if( pTrigger ) break;
- }
- if( !pTrigger ){
- sqliteErrorMsg(pParse, "no such trigger: %S", pName, 0);
- goto drop_trigger_cleanup;
- }
- sqliteDropTriggerPtr(pParse, pTrigger, 0);
-
-drop_trigger_cleanup:
- sqliteSrcListDelete(pName);
-}
-
-/*
-** Drop a trigger given a pointer to that trigger. If nested is false,
-** then also generate code to remove the trigger from the SQLITE_MASTER
-** table.
-*/
-void sqliteDropTriggerPtr(Parse *pParse, Trigger *pTrigger, int nested){
- Table *pTable;
- Vdbe *v;
- sqlite *db = pParse->db;
-
- assert( pTrigger->iDb<db->nDb );
- if( pTrigger->iDb>=2 ){
- sqliteErrorMsg(pParse, "triggers may not be removed from "
- "auxiliary database %s", db->aDb[pTrigger->iDb].zName);
- return;
- }
- pTable = sqliteFindTable(db, pTrigger->table,db->aDb[pTrigger->iTabDb].zName);
- assert(pTable);
- assert( pTable->iDb==pTrigger->iDb || pTrigger->iDb==1 );
-#ifndef SQLITE_OMIT_AUTHORIZATION
- {
- int code = SQLITE_DROP_TRIGGER;
- const char *zDb = db->aDb[pTrigger->iDb].zName;
- const char *zTab = SCHEMA_TABLE(pTrigger->iDb);
- if( pTrigger->iDb ) code = SQLITE_DROP_TEMP_TRIGGER;
- if( sqliteAuthCheck(pParse, code, pTrigger->name, pTable->zName, zDb) ||
- sqliteAuthCheck(pParse, SQLITE_DELETE, zTab, 0, zDb) ){
- return;
- }
- }
-#endif
-
- /* Generate code to destroy the database record of the trigger.
- */
- if( pTable!=0 && !nested && (v = sqliteGetVdbe(pParse))!=0 ){
- int base;
- static VdbeOpList dropTrigger[] = {
- { OP_Rewind, 0, ADDR(9), 0},
- { OP_String, 0, 0, 0}, /* 1 */
- { OP_Column, 0, 1, 0},
- { OP_Ne, 0, ADDR(8), 0},
- { OP_String, 0, 0, "trigger"},
- { OP_Column, 0, 0, 0},
- { OP_Ne, 0, ADDR(8), 0},
- { OP_Delete, 0, 0, 0},
- { OP_Next, 0, ADDR(1), 0}, /* 8 */
- };
-
- sqliteBeginWriteOperation(pParse, 0, 0);
- sqliteOpenMasterTable(v, pTrigger->iDb);
- base = sqliteVdbeAddOpList(v, ArraySize(dropTrigger), dropTrigger);
- sqliteVdbeChangeP3(v, base+1, pTrigger->name, 0);
- if( pTrigger->iDb==0 ){
- sqliteChangeCookie(db, v);
- }
- sqliteVdbeAddOp(v, OP_Close, 0, 0);
- sqliteEndWriteOperation(pParse);
- }
-
- /*
- * If this is not an "explain", then delete the trigger structure.
- */
- if( !pParse->explain ){
- const char *zName = pTrigger->name;
- int nName = strlen(zName);
- if( pTable->pTrigger == pTrigger ){
- pTable->pTrigger = pTrigger->pNext;
- }else{
- Trigger *cc = pTable->pTrigger;
- while( cc ){
- if( cc->pNext == pTrigger ){
- cc->pNext = cc->pNext->pNext;
- break;
- }
- cc = cc->pNext;
- }
- assert(cc);
- }
- sqliteHashInsert(&(db->aDb[pTrigger->iDb].trigHash), zName, nName+1, 0);
- sqliteDeleteTrigger(pTrigger);
- }
-}
-
-/*
-** pEList is the SET clause of an UPDATE statement. Each entry
-** in pEList is of the format <id>=<expr>. If any of the entries
-** in pEList have an <id> which matches an identifier in pIdList,
-** then return TRUE. If pIdList==NULL, then it is considered a
-** wildcard that matches anything. Likewise if pEList==NULL then
-** it matches anything so always return true. Return false only
-** if there is no match.
-*/
-static int checkColumnOverLap(IdList *pIdList, ExprList *pEList){
- int e;
- if( !pIdList || !pEList ) return 1;
- for(e=0; e<pEList->nExpr; e++){
- if( sqliteIdListIndex(pIdList, pEList->a[e].zName)>=0 ) return 1;
- }
- return 0;
-}
-
-/* A global variable that is TRUE if we should always set up temp tables for
- * for triggers, even if there are no triggers to code. This is used to test
- * how much overhead the triggers algorithm is causing.
- *
- * This flag can be set or cleared using the "trigger_overhead_test" pragma.
- * The pragma is not documented since it is not really part of the interface
- * to SQLite, just the test procedure.
-*/
-int always_code_trigger_setup = 0;
-
-/*
- * Returns true if a trigger matching op, tr_tm and foreach that is NOT already
- * on the Parse objects trigger-stack (to prevent recursive trigger firing) is
- * found in the list specified as pTrigger.
- */
-int sqliteTriggersExist(
- Parse *pParse, /* Used to check for recursive triggers */
- Trigger *pTrigger, /* A list of triggers associated with a table */
- int op, /* one of TK_DELETE, TK_INSERT, TK_UPDATE */
- int tr_tm, /* one of TK_BEFORE, TK_AFTER */
- int foreach, /* one of TK_ROW or TK_STATEMENT */
- ExprList *pChanges /* Columns that change in an UPDATE statement */
-){
- Trigger * pTriggerCursor;
-
- if( always_code_trigger_setup ){
- return 1;
- }
-
- pTriggerCursor = pTrigger;
- while( pTriggerCursor ){
- if( pTriggerCursor->op == op &&
- pTriggerCursor->tr_tm == tr_tm &&
- pTriggerCursor->foreach == foreach &&
- checkColumnOverLap(pTriggerCursor->pColumns, pChanges) ){
- TriggerStack * ss;
- ss = pParse->trigStack;
- while( ss && ss->pTrigger != pTrigger ){
- ss = ss->pNext;
- }
- if( !ss )return 1;
- }
- pTriggerCursor = pTriggerCursor->pNext;
- }
-
- return 0;
-}
-
-/*
-** Convert the pStep->target token into a SrcList and return a pointer
-** to that SrcList.
-**
-** This routine adds a specific database name, if needed, to the target when
-** forming the SrcList. This prevents a trigger in one database from
-** referring to a target in another database. An exception is when the
-** trigger is in TEMP in which case it can refer to any other database it
-** wants.
-*/
-static SrcList *targetSrcList(
- Parse *pParse, /* The parsing context */
- TriggerStep *pStep /* The trigger containing the target token */
-){
- Token sDb; /* Dummy database name token */
- int iDb; /* Index of the database to use */
- SrcList *pSrc; /* SrcList to be returned */
-
- iDb = pStep->pTrig->iDb;
- if( iDb==0 || iDb>=2 ){
- assert( iDb<pParse->db->nDb );
- sDb.z = pParse->db->aDb[iDb].zName;
- sDb.n = strlen(sDb.z);
- pSrc = sqliteSrcListAppend(0, &sDb, &pStep->target);
- } else {
- pSrc = sqliteSrcListAppend(0, &pStep->target, 0);
- }
- return pSrc;
-}
-
-/*
-** Generate VDBE code for zero or more statements inside the body of a
-** trigger.
-*/
-static int codeTriggerProgram(
- Parse *pParse, /* The parser context */
- TriggerStep *pStepList, /* List of statements inside the trigger body */
- int orconfin /* Conflict algorithm. (OE_Abort, etc) */
-){
- TriggerStep * pTriggerStep = pStepList;
- int orconf;
-
- while( pTriggerStep ){
- int saveNTab = pParse->nTab;
-
- orconf = (orconfin == OE_Default)?pTriggerStep->orconf:orconfin;
- pParse->trigStack->orconf = orconf;
- switch( pTriggerStep->op ){
- case TK_SELECT: {
- Select * ss = sqliteSelectDup(pTriggerStep->pSelect);
- assert(ss);
- assert(ss->pSrc);
- sqliteSelect(pParse, ss, SRT_Discard, 0, 0, 0, 0);
- sqliteSelectDelete(ss);
- break;
- }
- case TK_UPDATE: {
- SrcList *pSrc;
- pSrc = targetSrcList(pParse, pTriggerStep);
- sqliteVdbeAddOp(pParse->pVdbe, OP_ListPush, 0, 0);
- sqliteUpdate(pParse, pSrc,
- sqliteExprListDup(pTriggerStep->pExprList),
- sqliteExprDup(pTriggerStep->pWhere), orconf);
- sqliteVdbeAddOp(pParse->pVdbe, OP_ListPop, 0, 0);
- break;
- }
- case TK_INSERT: {
- SrcList *pSrc;
- pSrc = targetSrcList(pParse, pTriggerStep);
- sqliteInsert(pParse, pSrc,
- sqliteExprListDup(pTriggerStep->pExprList),
- sqliteSelectDup(pTriggerStep->pSelect),
- sqliteIdListDup(pTriggerStep->pIdList), orconf);
- break;
- }
- case TK_DELETE: {
- SrcList *pSrc;
- sqliteVdbeAddOp(pParse->pVdbe, OP_ListPush, 0, 0);
- pSrc = targetSrcList(pParse, pTriggerStep);
- sqliteDeleteFrom(pParse, pSrc, sqliteExprDup(pTriggerStep->pWhere));
- sqliteVdbeAddOp(pParse->pVdbe, OP_ListPop, 0, 0);
- break;
- }
- default:
- assert(0);
- }
- pParse->nTab = saveNTab;
- pTriggerStep = pTriggerStep->pNext;
- }
-
- return 0;
-}
-
-/*
-** This is called to code FOR EACH ROW triggers.
-**
-** When the code that this function generates is executed, the following
-** must be true:
-**
-** 1. No cursors may be open in the main database. (But newIdx and oldIdx
-** can be indices of cursors in temporary tables. See below.)
-**
-** 2. If the triggers being coded are ON INSERT or ON UPDATE triggers, then
-** a temporary vdbe cursor (index newIdx) must be open and pointing at
-** a row containing values to be substituted for new.* expressions in the
-** trigger program(s).
-**
-** 3. If the triggers being coded are ON DELETE or ON UPDATE triggers, then
-** a temporary vdbe cursor (index oldIdx) must be open and pointing at
-** a row containing values to be substituted for old.* expressions in the
-** trigger program(s).
-**
-*/
-int sqliteCodeRowTrigger(
- Parse *pParse, /* Parse context */
- int op, /* One of TK_UPDATE, TK_INSERT, TK_DELETE */
- ExprList *pChanges, /* Changes list for any UPDATE OF triggers */
- int tr_tm, /* One of TK_BEFORE, TK_AFTER */
- Table *pTab, /* The table to code triggers from */
- int newIdx, /* The indice of the "new" row to access */
- int oldIdx, /* The indice of the "old" row to access */
- int orconf, /* ON CONFLICT policy */
- int ignoreJump /* Instruction to jump to for RAISE(IGNORE) */
-){
- Trigger * pTrigger;
- TriggerStack * pTriggerStack;
-
- assert(op == TK_UPDATE || op == TK_INSERT || op == TK_DELETE);
- assert(tr_tm == TK_BEFORE || tr_tm == TK_AFTER );
-
- assert(newIdx != -1 || oldIdx != -1);
-
- pTrigger = pTab->pTrigger;
- while( pTrigger ){
- int fire_this = 0;
-
- /* determine whether we should code this trigger */
- if( pTrigger->op == op && pTrigger->tr_tm == tr_tm &&
- pTrigger->foreach == TK_ROW ){
- fire_this = 1;
- pTriggerStack = pParse->trigStack;
- while( pTriggerStack ){
- if( pTriggerStack->pTrigger == pTrigger ){
- fire_this = 0;
- }
- pTriggerStack = pTriggerStack->pNext;
- }
- if( op == TK_UPDATE && pTrigger->pColumns &&
- !checkColumnOverLap(pTrigger->pColumns, pChanges) ){
- fire_this = 0;
- }
- }
-
- if( fire_this && (pTriggerStack = sqliteMalloc(sizeof(TriggerStack)))!=0 ){
- int endTrigger;
- SrcList dummyTablist;
- Expr * whenExpr;
- AuthContext sContext;
-
- dummyTablist.nSrc = 0;
-
- /* Push an entry on to the trigger stack */
- pTriggerStack->pTrigger = pTrigger;
- pTriggerStack->newIdx = newIdx;
- pTriggerStack->oldIdx = oldIdx;
- pTriggerStack->pTab = pTab;
- pTriggerStack->pNext = pParse->trigStack;
- pTriggerStack->ignoreJump = ignoreJump;
- pParse->trigStack = pTriggerStack;
- sqliteAuthContextPush(pParse, &sContext, pTrigger->name);
-
- /* code the WHEN clause */
- endTrigger = sqliteVdbeMakeLabel(pParse->pVdbe);
- whenExpr = sqliteExprDup(pTrigger->pWhen);
- if( sqliteExprResolveIds(pParse, &dummyTablist, 0, whenExpr) ){
- pParse->trigStack = pParse->trigStack->pNext;
- sqliteFree(pTriggerStack);
- sqliteExprDelete(whenExpr);
- return 1;
- }
- sqliteExprIfFalse(pParse, whenExpr, endTrigger, 1);
- sqliteExprDelete(whenExpr);
-
- sqliteVdbeAddOp(pParse->pVdbe, OP_ContextPush, 0, 0);
- codeTriggerProgram(pParse, pTrigger->step_list, orconf);
- sqliteVdbeAddOp(pParse->pVdbe, OP_ContextPop, 0, 0);
-
- /* Pop the entry off the trigger stack */
- pParse->trigStack = pParse->trigStack->pNext;
- sqliteAuthContextPop(&sContext);
- sqliteFree(pTriggerStack);
-
- sqliteVdbeResolveLabel(pParse->pVdbe, endTrigger);
- }
- pTrigger = pTrigger->pNext;
- }
-
- return 0;
-}
diff --git a/ext/sqlite/libsqlite/src/update.c b/ext/sqlite/libsqlite/src/update.c
deleted file mode 100644
index f20cc9b531..0000000000
--- a/ext/sqlite/libsqlite/src/update.c
+++ /dev/null
@@ -1,459 +0,0 @@
-/*
-** 2001 September 15
-**
-** The author disclaims copyright to this source code. In place of
-** a legal notice, here is a blessing:
-**
-** May you do good and not evil.
-** May you find forgiveness for yourself and forgive others.
-** May you share freely, never taking more than you give.
-**
-*************************************************************************
-** This file contains C code routines that are called by the parser
-** to handle UPDATE statements.
-**
-** $Id$
-*/
-#include "sqliteInt.h"
-
-/*
-** Process an UPDATE statement.
-**
-** UPDATE OR IGNORE table_wxyz SET a=b, c=d WHERE e<5 AND f NOT NULL;
-** \_______/ \________/ \______/ \________________/
-* onError pTabList pChanges pWhere
-*/
-void sqliteUpdate(
- Parse *pParse, /* The parser context */
- SrcList *pTabList, /* The table in which we should change things */
- ExprList *pChanges, /* Things to be changed */
- Expr *pWhere, /* The WHERE clause. May be null */
- int onError /* How to handle constraint errors */
-){
- int i, j; /* Loop counters */
- Table *pTab; /* The table to be updated */
- int loopStart; /* VDBE instruction address of the start of the loop */
- int jumpInst; /* Addr of VDBE instruction to jump out of loop */
- WhereInfo *pWInfo; /* Information about the WHERE clause */
- Vdbe *v; /* The virtual database engine */
- Index *pIdx; /* For looping over indices */
- int nIdx; /* Number of indices that need updating */
- int nIdxTotal; /* Total number of indices */
- int iCur; /* VDBE Cursor number of pTab */
- sqlite *db; /* The database structure */
- Index **apIdx = 0; /* An array of indices that need updating too */
- char *aIdxUsed = 0; /* aIdxUsed[i]==1 if the i-th index is used */
- int *aXRef = 0; /* aXRef[i] is the index in pChanges->a[] of the
- ** an expression for the i-th column of the table.
- ** aXRef[i]==-1 if the i-th column is not changed. */
- int chngRecno; /* True if the record number is being changed */
- Expr *pRecnoExpr; /* Expression defining the new record number */
- int openAll; /* True if all indices need to be opened */
- int isView; /* Trying to update a view */
- int iStackDepth; /* Index of memory cell holding stack depth */
- AuthContext sContext; /* The authorization context */
-
- int before_triggers; /* True if there are any BEFORE triggers */
- int after_triggers; /* True if there are any AFTER triggers */
- int row_triggers_exist = 0; /* True if any row triggers exist */
-
- int newIdx = -1; /* index of trigger "new" temp table */
- int oldIdx = -1; /* index of trigger "old" temp table */
-
- sContext.pParse = 0;
- if( pParse->nErr || sqlite_malloc_failed ) goto update_cleanup;
- db = pParse->db;
- assert( pTabList->nSrc==1 );
- iStackDepth = pParse->nMem++;
-
- /* Locate the table which we want to update.
- */
- pTab = sqliteSrcListLookup(pParse, pTabList);
- if( pTab==0 ) goto update_cleanup;
- before_triggers = sqliteTriggersExist(pParse, pTab->pTrigger,
- TK_UPDATE, TK_BEFORE, TK_ROW, pChanges);
- after_triggers = sqliteTriggersExist(pParse, pTab->pTrigger,
- TK_UPDATE, TK_AFTER, TK_ROW, pChanges);
- row_triggers_exist = before_triggers || after_triggers;
- isView = pTab->pSelect!=0;
- if( sqliteIsReadOnly(pParse, pTab, before_triggers) ){
- goto update_cleanup;
- }
- if( isView ){
- if( sqliteViewGetColumnNames(pParse, pTab) ){
- goto update_cleanup;
- }
- }
- aXRef = sqliteMalloc( sizeof(int) * pTab->nCol );
- if( aXRef==0 ) goto update_cleanup;
- for(i=0; i<pTab->nCol; i++) aXRef[i] = -1;
-
- /* If there are FOR EACH ROW triggers, allocate cursors for the
- ** special OLD and NEW tables
- */
- if( row_triggers_exist ){
- newIdx = pParse->nTab++;
- oldIdx = pParse->nTab++;
- }
-
- /* Allocate a cursors for the main database table and for all indices.
- ** The index cursors might not be used, but if they are used they
- ** need to occur right after the database cursor. So go ahead and
- ** allocate enough space, just in case.
- */
- pTabList->a[0].iCursor = iCur = pParse->nTab++;
- for(pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext){
- pParse->nTab++;
- }
-
- /* Resolve the column names in all the expressions of the
- ** of the UPDATE statement. Also find the column index
- ** for each column to be updated in the pChanges array. For each
- ** column to be updated, make sure we have authorization to change
- ** that column.
- */
- chngRecno = 0;
- for(i=0; i<pChanges->nExpr; i++){
- if( sqliteExprResolveIds(pParse, pTabList, 0, pChanges->a[i].pExpr) ){
- goto update_cleanup;
- }
- if( sqliteExprCheck(pParse, pChanges->a[i].pExpr, 0, 0) ){
- goto update_cleanup;
- }
- for(j=0; j<pTab->nCol; j++){
- if( sqliteStrICmp(pTab->aCol[j].zName, pChanges->a[i].zName)==0 ){
- if( j==pTab->iPKey ){
- chngRecno = 1;
- pRecnoExpr = pChanges->a[i].pExpr;
- }
- aXRef[j] = i;
- break;
- }
- }
- if( j>=pTab->nCol ){
- if( sqliteIsRowid(pChanges->a[i].zName) ){
- chngRecno = 1;
- pRecnoExpr = pChanges->a[i].pExpr;
- }else{
- sqliteErrorMsg(pParse, "no such column: %s", pChanges->a[i].zName);
- goto update_cleanup;
- }
- }
-#ifndef SQLITE_OMIT_AUTHORIZATION
- {
- int rc;
- rc = sqliteAuthCheck(pParse, SQLITE_UPDATE, pTab->zName,
- pTab->aCol[j].zName, db->aDb[pTab->iDb].zName);
- if( rc==SQLITE_DENY ){
- goto update_cleanup;
- }else if( rc==SQLITE_IGNORE ){
- aXRef[j] = -1;
- }
- }
-#endif
- }
-
- /* Allocate memory for the array apIdx[] and fill it with pointers to every
- ** index that needs to be updated. Indices only need updating if their
- ** key includes one of the columns named in pChanges or if the record
- ** number of the original table entry is changing.
- */
- for(nIdx=nIdxTotal=0, pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext, nIdxTotal++){
- if( chngRecno ){
- i = 0;
- }else {
- for(i=0; i<pIdx->nColumn; i++){
- if( aXRef[pIdx->aiColumn[i]]>=0 ) break;
- }
- }
- if( i<pIdx->nColumn ) nIdx++;
- }
- if( nIdxTotal>0 ){
- apIdx = sqliteMalloc( sizeof(Index*) * nIdx + nIdxTotal );
- if( apIdx==0 ) goto update_cleanup;
- aIdxUsed = (char*)&apIdx[nIdx];
- }
- for(nIdx=j=0, pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext, j++){
- if( chngRecno ){
- i = 0;
- }else{
- for(i=0; i<pIdx->nColumn; i++){
- if( aXRef[pIdx->aiColumn[i]]>=0 ) break;
- }
- }
- if( i<pIdx->nColumn ){
- apIdx[nIdx++] = pIdx;
- aIdxUsed[j] = 1;
- }else{
- aIdxUsed[j] = 0;
- }
- }
-
- /* Resolve the column names in all the expressions in the
- ** WHERE clause.
- */
- if( pWhere ){
- if( sqliteExprResolveIds(pParse, pTabList, 0, pWhere) ){
- goto update_cleanup;
- }
- if( sqliteExprCheck(pParse, pWhere, 0, 0) ){
- goto update_cleanup;
- }
- }
-
- /* Start the view context
- */
- if( isView ){
- sqliteAuthContextPush(pParse, &sContext, pTab->zName);
- }
-
- /* Begin generating code.
- */
- v = sqliteGetVdbe(pParse);
- if( v==0 ) goto update_cleanup;
- sqliteBeginWriteOperation(pParse, 1, pTab->iDb);
-
- /* If we are trying to update a view, construct that view into
- ** a temporary table.
- */
- if( isView ){
- Select *pView;
- pView = sqliteSelectDup(pTab->pSelect);
- sqliteSelect(pParse, pView, SRT_TempTable, iCur, 0, 0, 0);
- sqliteSelectDelete(pView);
- }
-
- /* Begin the database scan
- */
- pWInfo = sqliteWhereBegin(pParse, pTabList, pWhere, 1, 0);
- if( pWInfo==0 ) goto update_cleanup;
-
- /* Remember the index of every item to be updated.
- */
- sqliteVdbeAddOp(v, OP_ListWrite, 0, 0);
-
- /* End the database scan loop.
- */
- sqliteWhereEnd(pWInfo);
-
- /* Initialize the count of updated rows
- */
- if( db->flags & SQLITE_CountRows && !pParse->trigStack ){
- sqliteVdbeAddOp(v, OP_Integer, 0, 0);
- }
-
- if( row_triggers_exist ){
- /* Create pseudo-tables for NEW and OLD
- */
- sqliteVdbeAddOp(v, OP_OpenPseudo, oldIdx, 0);
- sqliteVdbeAddOp(v, OP_OpenPseudo, newIdx, 0);
-
- /* The top of the update loop for when there are triggers.
- */
- sqliteVdbeAddOp(v, OP_ListRewind, 0, 0);
- sqliteVdbeAddOp(v, OP_StackDepth, 0, 0);
- sqliteVdbeAddOp(v, OP_MemStore, iStackDepth, 1);
- loopStart = sqliteVdbeAddOp(v, OP_MemLoad, iStackDepth, 0);
- sqliteVdbeAddOp(v, OP_StackReset, 0, 0);
- jumpInst = sqliteVdbeAddOp(v, OP_ListRead, 0, 0);
- sqliteVdbeAddOp(v, OP_Dup, 0, 0);
-
- /* Open a cursor and make it point to the record that is
- ** being updated.
- */
- sqliteVdbeAddOp(v, OP_Dup, 0, 0);
- if( !isView ){
- sqliteVdbeAddOp(v, OP_Integer, pTab->iDb, 0);
- sqliteVdbeAddOp(v, OP_OpenRead, iCur, pTab->tnum);
- }
- sqliteVdbeAddOp(v, OP_MoveTo, iCur, 0);
-
- /* Generate the OLD table
- */
- sqliteVdbeAddOp(v, OP_Recno, iCur, 0);
- sqliteVdbeAddOp(v, OP_RowData, iCur, 0);
- sqliteVdbeAddOp(v, OP_PutIntKey, oldIdx, 0);
-
- /* Generate the NEW table
- */
- if( chngRecno ){
- sqliteExprCode(pParse, pRecnoExpr);
- }else{
- sqliteVdbeAddOp(v, OP_Recno, iCur, 0);
- }
- for(i=0; i<pTab->nCol; i++){
- if( i==pTab->iPKey ){
- sqliteVdbeAddOp(v, OP_String, 0, 0);
- continue;
- }
- j = aXRef[i];
- if( j<0 ){
- sqliteVdbeAddOp(v, OP_Column, iCur, i);
- }else{
- sqliteExprCode(pParse, pChanges->a[j].pExpr);
- }
- }
- sqliteVdbeAddOp(v, OP_MakeRecord, pTab->nCol, 0);
- sqliteVdbeAddOp(v, OP_PutIntKey, newIdx, 0);
- if( !isView ){
- sqliteVdbeAddOp(v, OP_Close, iCur, 0);
- }
-
- /* Fire the BEFORE and INSTEAD OF triggers
- */
- if( sqliteCodeRowTrigger(pParse, TK_UPDATE, pChanges, TK_BEFORE, pTab,
- newIdx, oldIdx, onError, loopStart) ){
- goto update_cleanup;
- }
- }
-
- if( !isView ){
- /*
- ** Open every index that needs updating. Note that if any
- ** index could potentially invoke a REPLACE conflict resolution
- ** action, then we need to open all indices because we might need
- ** to be deleting some records.
- */
- sqliteVdbeAddOp(v, OP_Integer, pTab->iDb, 0);
- sqliteVdbeAddOp(v, OP_OpenWrite, iCur, pTab->tnum);
- if( onError==OE_Replace ){
- openAll = 1;
- }else{
- openAll = 0;
- for(pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext){
- if( pIdx->onError==OE_Replace ){
- openAll = 1;
- break;
- }
- }
- }
- for(i=0, pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext, i++){
- if( openAll || aIdxUsed[i] ){
- sqliteVdbeAddOp(v, OP_Integer, pIdx->iDb, 0);
- sqliteVdbeAddOp(v, OP_OpenWrite, iCur+i+1, pIdx->tnum);
- assert( pParse->nTab>iCur+i+1 );
- }
- }
-
- /* Loop over every record that needs updating. We have to load
- ** the old data for each record to be updated because some columns
- ** might not change and we will need to copy the old value.
- ** Also, the old data is needed to delete the old index entires.
- ** So make the cursor point at the old record.
- */
- if( !row_triggers_exist ){
- sqliteVdbeAddOp(v, OP_ListRewind, 0, 0);
- jumpInst = loopStart = sqliteVdbeAddOp(v, OP_ListRead, 0, 0);
- sqliteVdbeAddOp(v, OP_Dup, 0, 0);
- }
- sqliteVdbeAddOp(v, OP_NotExists, iCur, loopStart);
-
- /* If the record number will change, push the record number as it
- ** will be after the update. (The old record number is currently
- ** on top of the stack.)
- */
- if( chngRecno ){
- sqliteExprCode(pParse, pRecnoExpr);
- sqliteVdbeAddOp(v, OP_MustBeInt, 0, 0);
- }
-
- /* Compute new data for this record.
- */
- for(i=0; i<pTab->nCol; i++){
- if( i==pTab->iPKey ){
- sqliteVdbeAddOp(v, OP_String, 0, 0);
- continue;
- }
- j = aXRef[i];
- if( j<0 ){
- sqliteVdbeAddOp(v, OP_Column, iCur, i);
- }else{
- sqliteExprCode(pParse, pChanges->a[j].pExpr);
- }
- }
-
- /* Do constraint checks
- */
- sqliteGenerateConstraintChecks(pParse, pTab, iCur, aIdxUsed, chngRecno, 1,
- onError, loopStart);
-
- /* Delete the old indices for the current record.
- */
- sqliteGenerateRowIndexDelete(db, v, pTab, iCur, aIdxUsed);
-
- /* If changing the record number, delete the old record.
- */
- if( chngRecno ){
- sqliteVdbeAddOp(v, OP_Delete, iCur, 0);
- }
-
- /* Create the new index entries and the new record.
- */
- sqliteCompleteInsertion(pParse, pTab, iCur, aIdxUsed, chngRecno, 1, -1);
- }
-
- /* Increment the row counter
- */
- if( db->flags & SQLITE_CountRows && !pParse->trigStack){
- sqliteVdbeAddOp(v, OP_AddImm, 1, 0);
- }
-
- /* If there are triggers, close all the cursors after each iteration
- ** through the loop. The fire the after triggers.
- */
- if( row_triggers_exist ){
- if( !isView ){
- for(i=0, pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext, i++){
- if( openAll || aIdxUsed[i] )
- sqliteVdbeAddOp(v, OP_Close, iCur+i+1, 0);
- }
- sqliteVdbeAddOp(v, OP_Close, iCur, 0);
- pParse->nTab = iCur;
- }
- if( sqliteCodeRowTrigger(pParse, TK_UPDATE, pChanges, TK_AFTER, pTab,
- newIdx, oldIdx, onError, loopStart) ){
- goto update_cleanup;
- }
- }
-
- /* Repeat the above with the next record to be updated, until
- ** all record selected by the WHERE clause have been updated.
- */
- sqliteVdbeAddOp(v, OP_Goto, 0, loopStart);
- sqliteVdbeChangeP2(v, jumpInst, sqliteVdbeCurrentAddr(v));
- sqliteVdbeAddOp(v, OP_ListReset, 0, 0);
-
- /* Close all tables if there were no FOR EACH ROW triggers */
- if( !row_triggers_exist ){
- for(i=0, pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext, i++){
- if( openAll || aIdxUsed[i] ){
- sqliteVdbeAddOp(v, OP_Close, iCur+i+1, 0);
- }
- }
- sqliteVdbeAddOp(v, OP_Close, iCur, 0);
- pParse->nTab = iCur;
- }else{
- sqliteVdbeAddOp(v, OP_Close, newIdx, 0);
- sqliteVdbeAddOp(v, OP_Close, oldIdx, 0);
- }
-
- sqliteVdbeAddOp(v, OP_SetCounts, 0, 0);
- sqliteEndWriteOperation(pParse);
-
- /*
- ** Return the number of rows that were changed.
- */
- if( db->flags & SQLITE_CountRows && !pParse->trigStack ){
- sqliteVdbeOp3(v, OP_ColumnName, 0, 1, "rows updated", P3_STATIC);
- sqliteVdbeAddOp(v, OP_Callback, 1, 0);
- }
-
-update_cleanup:
- sqliteAuthContextPop(&sContext);
- sqliteFree(apIdx);
- sqliteFree(aXRef);
- sqliteSrcListDelete(pTabList);
- sqliteExprListDelete(pChanges);
- sqliteExprDelete(pWhere);
- return;
-}
diff --git a/ext/sqlite/libsqlite/src/util.c b/ext/sqlite/libsqlite/src/util.c
deleted file mode 100644
index 21d7b15057..0000000000
--- a/ext/sqlite/libsqlite/src/util.c
+++ /dev/null
@@ -1,1135 +0,0 @@
-/*
-** 2001 September 15
-**
-** The author disclaims copyright to this source code. In place of
-** a legal notice, here is a blessing:
-**
-** May you do good and not evil.
-** May you find forgiveness for yourself and forgive others.
-** May you share freely, never taking more than you give.
-**
-*************************************************************************
-** Utility functions used throughout sqlite.
-**
-** This file contains functions for allocating memory, comparing
-** strings, and stuff like that.
-**
-** $Id$
-*/
-#include "sqliteInt.h"
-#include <stdarg.h>
-#include <ctype.h>
-
-/*
-** If malloc() ever fails, this global variable gets set to 1.
-** This causes the library to abort and never again function.
-*/
-int sqlite_malloc_failed = 0;
-
-/*
-** If MEMORY_DEBUG is defined, then use versions of malloc() and
-** free() that track memory usage and check for buffer overruns.
-*/
-#ifdef MEMORY_DEBUG
-
-/*
-** For keeping track of the number of mallocs and frees. This
-** is used to check for memory leaks.
-*/
-int sqlite_nMalloc; /* Number of sqliteMalloc() calls */
-int sqlite_nFree; /* Number of sqliteFree() calls */
-int sqlite_iMallocFail; /* Fail sqliteMalloc() after this many calls */
-#if MEMORY_DEBUG>1
-static int memcnt = 0;
-#endif
-
-/*
-** Number of 32-bit guard words
-*/
-#define N_GUARD 1
-
-/*
-** Allocate new memory and set it to zero. Return NULL if
-** no memory is available.
-*/
-void *sqliteMalloc_(int n, int bZero, char *zFile, int line){
- void *p;
- int *pi;
- int i, k;
- if( sqlite_iMallocFail>=0 ){
- sqlite_iMallocFail--;
- if( sqlite_iMallocFail==0 ){
- sqlite_malloc_failed++;
-#if MEMORY_DEBUG>1
- fprintf(stderr,"**** failed to allocate %d bytes at %s:%d\n",
- n, zFile,line);
-#endif
- sqlite_iMallocFail--;
- return 0;
- }
- }
- if( n==0 ) return 0;
- k = (n+sizeof(int)-1)/sizeof(int);
- pi = malloc( (N_GUARD*2+1+k)*sizeof(int));
- if( pi==0 ){
- sqlite_malloc_failed++;
- return 0;
- }
- sqlite_nMalloc++;
- for(i=0; i<N_GUARD; i++) pi[i] = 0xdead1122;
- pi[N_GUARD] = n;
- for(i=0; i<N_GUARD; i++) pi[k+1+N_GUARD+i] = 0xdead3344;
- p = &pi[N_GUARD+1];
- memset(p, bZero==0, n);
-#if MEMORY_DEBUG>1
- fprintf(stderr,"%06d malloc %d bytes at 0x%x from %s:%d\n",
- ++memcnt, n, (int)p, zFile,line);
-#endif
- return p;
-}
-
-/*
-** Check to see if the given pointer was obtained from sqliteMalloc()
-** and is able to hold at least N bytes. Raise an exception if this
-** is not the case.
-**
-** This routine is used for testing purposes only.
-*/
-void sqliteCheckMemory(void *p, int N){
- int *pi = p;
- int n, i, k;
- pi -= N_GUARD+1;
- for(i=0; i<N_GUARD; i++){
- assert( pi[i]==0xdead1122 );
- }
- n = pi[N_GUARD];
- assert( N>=0 && N<n );
- k = (n+sizeof(int)-1)/sizeof(int);
- for(i=0; i<N_GUARD; i++){
- assert( pi[k+N_GUARD+1+i]==0xdead3344 );
- }
-}
-
-/*
-** Free memory previously obtained from sqliteMalloc()
-*/
-void sqliteFree_(void *p, char *zFile, int line){
- if( p ){
- int *pi, i, k, n;
- pi = p;
- pi -= N_GUARD+1;
- sqlite_nFree++;
- for(i=0; i<N_GUARD; i++){
- if( pi[i]!=0xdead1122 ){
- fprintf(stderr,"Low-end memory corruption at 0x%x\n", (int)p);
- return;
- }
- }
- n = pi[N_GUARD];
- k = (n+sizeof(int)-1)/sizeof(int);
- for(i=0; i<N_GUARD; i++){
- if( pi[k+N_GUARD+1+i]!=0xdead3344 ){
- fprintf(stderr,"High-end memory corruption at 0x%x\n", (int)p);
- return;
- }
- }
- memset(pi, 0xff, (k+N_GUARD*2+1)*sizeof(int));
-#if MEMORY_DEBUG>1
- fprintf(stderr,"%06d free %d bytes at 0x%x from %s:%d\n",
- ++memcnt, n, (int)p, zFile,line);
-#endif
- free(pi);
- }
-}
-
-/*
-** Resize a prior allocation. If p==0, then this routine
-** works just like sqliteMalloc(). If n==0, then this routine
-** works just like sqliteFree().
-*/
-void *sqliteRealloc_(void *oldP, int n, char *zFile, int line){
- int *oldPi, *pi, i, k, oldN, oldK;
- void *p;
- if( oldP==0 ){
- return sqliteMalloc_(n,1,zFile,line);
- }
- if( n==0 ){
- sqliteFree_(oldP,zFile,line);
- return 0;
- }
- oldPi = oldP;
- oldPi -= N_GUARD+1;
- if( oldPi[0]!=0xdead1122 ){
- fprintf(stderr,"Low-end memory corruption in realloc at 0x%x\n", (int)oldP);
- return 0;
- }
- oldN = oldPi[N_GUARD];
- oldK = (oldN+sizeof(int)-1)/sizeof(int);
- for(i=0; i<N_GUARD; i++){
- if( oldPi[oldK+N_GUARD+1+i]!=0xdead3344 ){
- fprintf(stderr,"High-end memory corruption in realloc at 0x%x\n",
- (int)oldP);
- return 0;
- }
- }
- k = (n + sizeof(int) - 1)/sizeof(int);
- pi = malloc( (k+N_GUARD*2+1)*sizeof(int) );
- if( pi==0 ){
- sqlite_malloc_failed++;
- return 0;
- }
- for(i=0; i<N_GUARD; i++) pi[i] = 0xdead1122;
- pi[N_GUARD] = n;
- for(i=0; i<N_GUARD; i++) pi[k+N_GUARD+1+i] = 0xdead3344;
- p = &pi[N_GUARD+1];
- memcpy(p, oldP, n>oldN ? oldN : n);
- if( n>oldN ){
- memset(&((char*)p)[oldN], 0, n-oldN);
- }
- memset(oldPi, 0xab, (oldK+N_GUARD+2)*sizeof(int));
- free(oldPi);
-#if MEMORY_DEBUG>1
- fprintf(stderr,"%06d realloc %d to %d bytes at 0x%x to 0x%x at %s:%d\n",
- ++memcnt, oldN, n, (int)oldP, (int)p, zFile, line);
-#endif
- return p;
-}
-
-/*
-** Make a duplicate of a string into memory obtained from malloc()
-** Free the original string using sqliteFree().
-**
-** This routine is called on all strings that are passed outside of
-** the SQLite library. That way clients can free the string using free()
-** rather than having to call sqliteFree().
-*/
-void sqliteStrRealloc(char **pz){
- char *zNew;
- if( pz==0 || *pz==0 ) return;
- zNew = malloc( strlen(*pz) + 1 );
- if( zNew==0 ){
- sqlite_malloc_failed++;
- sqliteFree(*pz);
- *pz = 0;
- }
- strcpy(zNew, *pz);
- sqliteFree(*pz);
- *pz = zNew;
-}
-
-/*
-** Make a copy of a string in memory obtained from sqliteMalloc()
-*/
-char *sqliteStrDup_(const char *z, char *zFile, int line){
- char *zNew;
- if( z==0 ) return 0;
- zNew = sqliteMalloc_(strlen(z)+1, 0, zFile, line);
- if( zNew ) strcpy(zNew, z);
- return zNew;
-}
-char *sqliteStrNDup_(const char *z, int n, char *zFile, int line){
- char *zNew;
- if( z==0 ) return 0;
- zNew = sqliteMalloc_(n+1, 0, zFile, line);
- if( zNew ){
- memcpy(zNew, z, n);
- zNew[n] = 0;
- }
- return zNew;
-}
-#endif /* MEMORY_DEBUG */
-
-/*
-** The following versions of malloc() and free() are for use in a
-** normal build.
-*/
-#if !defined(MEMORY_DEBUG)
-
-/*
-** Allocate new memory and set it to zero. Return NULL if
-** no memory is available. See also sqliteMallocRaw().
-*/
-void *sqliteMalloc(int n){
- void *p;
- if( (p = malloc(n))==0 ){
- if( n>0 ) sqlite_malloc_failed++;
- }else{
- memset(p, 0, n);
- }
- return p;
-}
-
-/*
-** Allocate new memory but do not set it to zero. Return NULL if
-** no memory is available. See also sqliteMalloc().
-*/
-void *sqliteMallocRaw(int n){
- void *p;
- if( (p = malloc(n))==0 ){
- if( n>0 ) sqlite_malloc_failed++;
- }
- return p;
-}
-
-/*
-** Free memory previously obtained from sqliteMalloc()
-*/
-void sqliteFree(void *p){
- if( p ){
- free(p);
- }
-}
-
-/*
-** Resize a prior allocation. If p==0, then this routine
-** works just like sqliteMalloc(). If n==0, then this routine
-** works just like sqliteFree().
-*/
-void *sqliteRealloc(void *p, int n){
- void *p2;
- if( p==0 ){
- return sqliteMalloc(n);
- }
- if( n==0 ){
- sqliteFree(p);
- return 0;
- }
- p2 = realloc(p, n);
- if( p2==0 ){
- sqlite_malloc_failed++;
- }
- return p2;
-}
-
-/*
-** Make a copy of a string in memory obtained from sqliteMalloc()
-*/
-char *sqliteStrDup(const char *z){
- char *zNew;
- if( z==0 ) return 0;
- zNew = sqliteMallocRaw(strlen(z)+1);
- if( zNew ) strcpy(zNew, z);
- return zNew;
-}
-char *sqliteStrNDup(const char *z, int n){
- char *zNew;
- if( z==0 ) return 0;
- zNew = sqliteMallocRaw(n+1);
- if( zNew ){
- memcpy(zNew, z, n);
- zNew[n] = 0;
- }
- return zNew;
-}
-#endif /* !defined(MEMORY_DEBUG) */
-
-/*
-** Create a string from the 2nd and subsequent arguments (up to the
-** first NULL argument), store the string in memory obtained from
-** sqliteMalloc() and make the pointer indicated by the 1st argument
-** point to that string. The 1st argument must either be NULL or
-** point to memory obtained from sqliteMalloc().
-*/
-void sqliteSetString(char **pz, const char *zFirst, ...){
- va_list ap;
- int nByte;
- const char *z;
- char *zResult;
-
- if( pz==0 ) return;
- nByte = strlen(zFirst) + 1;
- va_start(ap, zFirst);
- while( (z = va_arg(ap, const char*))!=0 ){
- nByte += strlen(z);
- }
- va_end(ap);
- sqliteFree(*pz);
- *pz = zResult = sqliteMallocRaw( nByte );
- if( zResult==0 ){
- return;
- }
- strcpy(zResult, zFirst);
- zResult += strlen(zResult);
- va_start(ap, zFirst);
- while( (z = va_arg(ap, const char*))!=0 ){
- strcpy(zResult, z);
- zResult += strlen(zResult);
- }
- va_end(ap);
-#ifdef MEMORY_DEBUG
-#if MEMORY_DEBUG>1
- fprintf(stderr,"string at 0x%x is %s\n", (int)*pz, *pz);
-#endif
-#endif
-}
-
-/*
-** Works like sqliteSetString, but each string is now followed by
-** a length integer which specifies how much of the source string
-** to copy (in bytes). -1 means use the whole string. The 1st
-** argument must either be NULL or point to memory obtained from
-** sqliteMalloc().
-*/
-void sqliteSetNString(char **pz, ...){
- va_list ap;
- int nByte;
- const char *z;
- char *zResult;
- int n;
-
- if( pz==0 ) return;
- nByte = 0;
- va_start(ap, pz);
- while( (z = va_arg(ap, const char*))!=0 ){
- n = va_arg(ap, int);
- if( n<=0 ) n = strlen(z);
- nByte += n;
- }
- va_end(ap);
- sqliteFree(*pz);
- *pz = zResult = sqliteMallocRaw( nByte + 1 );
- if( zResult==0 ) return;
- va_start(ap, pz);
- while( (z = va_arg(ap, const char*))!=0 ){
- n = va_arg(ap, int);
- if( n<=0 ) n = strlen(z);
- strncpy(zResult, z, n);
- zResult += n;
- }
- *zResult = 0;
-#ifdef MEMORY_DEBUG
-#if MEMORY_DEBUG>1
- fprintf(stderr,"string at 0x%x is %s\n", (int)*pz, *pz);
-#endif
-#endif
- va_end(ap);
-}
-
-/*
-** Add an error message to pParse->zErrMsg and increment pParse->nErr.
-** The following formatting characters are allowed:
-**
-** %s Insert a string
-** %z A string that should be freed after use
-** %d Insert an integer
-** %T Insert a token
-** %S Insert the first element of a SrcList
-*/
-void sqliteErrorMsg(Parse *pParse, const char *zFormat, ...){
- va_list ap;
- pParse->nErr++;
- sqliteFree(pParse->zErrMsg);
- va_start(ap, zFormat);
- pParse->zErrMsg = sqliteVMPrintf(zFormat, ap);
- va_end(ap);
-}
-
-/*
-** Convert an SQL-style quoted string into a normal string by removing
-** the quote characters. The conversion is done in-place. If the
-** input does not begin with a quote character, then this routine
-** is a no-op.
-**
-** 2002-Feb-14: This routine is extended to remove MS-Access style
-** brackets from around identifers. For example: "[a-b-c]" becomes
-** "a-b-c".
-*/
-void sqliteDequote(char *z){
- int quote;
- int i, j;
- if( z==0 ) return;
- quote = z[0];
- switch( quote ){
- case '\'': break;
- case '"': break;
- case '[': quote = ']'; break;
- default: return;
- }
- for(i=1, j=0; z[i]; i++){
- if( z[i]==quote ){
- if( z[i+1]==quote ){
- z[j++] = quote;
- i++;
- }else{
- z[j++] = 0;
- break;
- }
- }else{
- z[j++] = z[i];
- }
- }
-}
-
-/* An array to map all upper-case characters into their corresponding
-** lower-case character.
-*/
-static unsigned char UpperToLower[] = {
- 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17,
- 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35,
- 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53,
- 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 97, 98, 99,100,101,102,103,
- 104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,
- 122, 91, 92, 93, 94, 95, 96, 97, 98, 99,100,101,102,103,104,105,106,107,
- 108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,
- 126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,
- 144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,
- 162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,
- 180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,
- 198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,
- 216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,
- 234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,
- 252,253,254,255
-};
-
-/*
-** This function computes a hash on the name of a keyword.
-** Case is not significant.
-*/
-int sqliteHashNoCase(const char *z, int n){
- int h = 0;
- if( n<=0 ) n = strlen(z);
- while( n > 0 ){
- h = (h<<3) ^ h ^ UpperToLower[(unsigned char)*z++];
- n--;
- }
- return h & 0x7fffffff;
-}
-
-/*
-** Some systems have stricmp(). Others have strcasecmp(). Because
-** there is no consistency, we will define our own.
-*/
-int sqliteStrICmp(const char *zLeft, const char *zRight){
- register unsigned char *a, *b;
- a = (unsigned char *)zLeft;
- b = (unsigned char *)zRight;
- while( *a!=0 && UpperToLower[*a]==UpperToLower[*b]){ a++; b++; }
- return *a - *b;
-}
-int sqliteStrNICmp(const char *zLeft, const char *zRight, int N){
- register unsigned char *a, *b;
- a = (unsigned char *)zLeft;
- b = (unsigned char *)zRight;
- while( N-- > 0 && *a!=0 && UpperToLower[*a]==UpperToLower[*b]){ a++; b++; }
- return N<0 ? 0 : *a - *b;
-}
-
-/*
-** Return TRUE if z is a pure numeric string. Return FALSE if the
-** string contains any character which is not part of a number.
-**
-** Am empty string is considered non-numeric.
-*/
-int sqliteIsNumber(const char *z){
- if( *z=='-' || *z=='+' ) z++;
- if( !isdigit(*z) ){
- return 0;
- }
- z++;
- while( isdigit(*z) ){ z++; }
- if( *z=='.' ){
- z++;
- if( !isdigit(*z) ) return 0;
- while( isdigit(*z) ){ z++; }
- }
- if( *z=='e' || *z=='E' ){
- z++;
- if( *z=='+' || *z=='-' ) z++;
- if( !isdigit(*z) ) return 0;
- while( isdigit(*z) ){ z++; }
- }
- return *z==0;
-}
-
-/*
-** The string z[] is an ascii representation of a real number.
-** Convert this string to a double.
-**
-** This routine assumes that z[] really is a valid number. If it
-** is not, the result is undefined.
-**
-** This routine is used instead of the library atof() function because
-** the library atof() might want to use "," as the decimal point instead
-** of "." depending on how locale is set. But that would cause problems
-** for SQL. So this routine always uses "." regardless of locale.
-*/
-double sqliteAtoF(const char *z, const char **pzEnd){
- int sign = 1;
- LONGDOUBLE_TYPE v1 = 0.0;
- if( *z=='-' ){
- sign = -1;
- z++;
- }else if( *z=='+' ){
- z++;
- }
- while( isdigit(*z) ){
- v1 = v1*10.0 + (*z - '0');
- z++;
- }
- if( *z=='.' ){
- LONGDOUBLE_TYPE divisor = 1.0;
- z++;
- while( isdigit(*z) ){
- v1 = v1*10.0 + (*z - '0');
- divisor *= 10.0;
- z++;
- }
- v1 /= divisor;
- }
- if( *z=='e' || *z=='E' ){
- int esign = 1;
- int eval = 0;
- LONGDOUBLE_TYPE scale = 1.0;
- z++;
- if( *z=='-' ){
- esign = -1;
- z++;
- }else if( *z=='+' ){
- z++;
- }
- while( isdigit(*z) ){
- eval = eval*10 + *z - '0';
- z++;
- }
- while( eval>=64 ){ scale *= 1.0e+64; eval -= 64; }
- while( eval>=16 ){ scale *= 1.0e+16; eval -= 16; }
- while( eval>=4 ){ scale *= 1.0e+4; eval -= 4; }
- while( eval>=1 ){ scale *= 1.0e+1; eval -= 1; }
- if( esign<0 ){
- v1 /= scale;
- }else{
- v1 *= scale;
- }
- }
- if( pzEnd ) *pzEnd = z;
- return sign<0 ? -v1 : v1;
-}
-
-/*
-** The string zNum represents an integer. There might be some other
-** information following the integer too, but that part is ignored.
-** If the integer that the prefix of zNum represents will fit in a
-** 32-bit signed integer, return TRUE. Otherwise return FALSE.
-**
-** This routine returns FALSE for the string -2147483648 even that
-** that number will, in theory fit in a 32-bit integer. But positive
-** 2147483648 will not fit in 32 bits. So it seems safer to return
-** false.
-*/
-int sqliteFitsIn32Bits(const char *zNum){
- int i, c;
- if( *zNum=='-' || *zNum=='+' ) zNum++;
- for(i=0; (c=zNum[i])>='0' && c<='9'; i++){}
- return i<10 || (i==10 && memcmp(zNum,"2147483647",10)<=0);
-}
-
-/* This comparison routine is what we use for comparison operations
-** between numeric values in an SQL expression. "Numeric" is a little
-** bit misleading here. What we mean is that the strings have a
-** type of "numeric" from the point of view of SQL. The strings
-** do not necessarily contain numbers. They could contain text.
-**
-** If the input strings both look like actual numbers then they
-** compare in numerical order. Numerical strings are always less
-** than non-numeric strings so if one input string looks like a
-** number and the other does not, then the one that looks like
-** a number is the smaller. Non-numeric strings compare in
-** lexigraphical order (the same order as strcmp()).
-*/
-int sqliteCompare(const char *atext, const char *btext){
- int result;
- int isNumA, isNumB;
- if( atext==0 ){
- return -1;
- }else if( btext==0 ){
- return 1;
- }
- isNumA = sqliteIsNumber(atext);
- isNumB = sqliteIsNumber(btext);
- if( isNumA ){
- if( !isNumB ){
- result = -1;
- }else{
- double rA, rB;
- rA = sqliteAtoF(atext, 0);
- rB = sqliteAtoF(btext, 0);
- if( rA<rB ){
- result = -1;
- }else if( rA>rB ){
- result = +1;
- }else{
- result = 0;
- }
- }
- }else if( isNumB ){
- result = +1;
- }else {
- result = strcmp(atext, btext);
- }
- return result;
-}
-
-/*
-** This routine is used for sorting. Each key is a list of one or more
-** null-terminated elements. The list is terminated by two nulls in
-** a row. For example, the following text is a key with three elements
-**
-** Aone\000Dtwo\000Athree\000\000
-**
-** All elements begin with one of the characters "+-AD" and end with "\000"
-** with zero or more text elements in between. Except, NULL elements
-** consist of the special two-character sequence "N\000".
-**
-** Both arguments will have the same number of elements. This routine
-** returns negative, zero, or positive if the first argument is less
-** than, equal to, or greater than the first. (Result is a-b).
-**
-** Each element begins with one of the characters "+", "-", "A", "D".
-** This character determines the sort order and collating sequence:
-**
-** + Sort numerically in ascending order
-** - Sort numerically in descending order
-** A Sort as strings in ascending order
-** D Sort as strings in descending order.
-**
-** For the "+" and "-" sorting, pure numeric strings (strings for which the
-** isNum() function above returns TRUE) always compare less than strings
-** that are not pure numerics. Non-numeric strings compare in memcmp()
-** order. This is the same sort order as the sqliteCompare() function
-** above generates.
-**
-** The last point is a change from version 2.6.3 to version 2.7.0. In
-** version 2.6.3 and earlier, substrings of digits compare in numerical
-** and case was used only to break a tie.
-**
-** Elements that begin with 'A' or 'D' compare in memcmp() order regardless
-** of whether or not they look like a number.
-**
-** Note that the sort order imposed by the rules above is the same
-** from the ordering defined by the "<", "<=", ">", and ">=" operators
-** of expressions and for indices. This was not the case for version
-** 2.6.3 and earlier.
-*/
-int sqliteSortCompare(const char *a, const char *b){
- int res = 0;
- int isNumA, isNumB;
- int dir = 0;
-
- while( res==0 && *a && *b ){
- if( a[0]=='N' || b[0]=='N' ){
- if( a[0]==b[0] ){
- a += 2;
- b += 2;
- continue;
- }
- if( a[0]=='N' ){
- dir = b[0];
- res = -1;
- }else{
- dir = a[0];
- res = +1;
- }
- break;
- }
- assert( a[0]==b[0] );
- if( (dir=a[0])=='A' || a[0]=='D' ){
- res = strcmp(&a[1],&b[1]);
- if( res ) break;
- }else{
- isNumA = sqliteIsNumber(&a[1]);
- isNumB = sqliteIsNumber(&b[1]);
- if( isNumA ){
- double rA, rB;
- if( !isNumB ){
- res = -1;
- break;
- }
- rA = sqliteAtoF(&a[1], 0);
- rB = sqliteAtoF(&b[1], 0);
- if( rA<rB ){
- res = -1;
- break;
- }
- if( rA>rB ){
- res = +1;
- break;
- }
- }else if( isNumB ){
- res = +1;
- break;
- }else{
- res = strcmp(&a[1],&b[1]);
- if( res ) break;
- }
- }
- a += strlen(&a[1]) + 2;
- b += strlen(&b[1]) + 2;
- }
- if( dir=='-' || dir=='D' ) res = -res;
- return res;
-}
-
-/*
-** Some powers of 64. These constants are needed in the
-** sqliteRealToSortable() routine below.
-*/
-#define _64e3 (64.0 * 64.0 * 64.0)
-#define _64e4 (64.0 * 64.0 * 64.0 * 64.0)
-#define _64e15 (_64e3 * _64e4 * _64e4 * _64e4)
-#define _64e16 (_64e4 * _64e4 * _64e4 * _64e4)
-#define _64e63 (_64e15 * _64e16 * _64e16 * _64e16)
-#define _64e64 (_64e16 * _64e16 * _64e16 * _64e16)
-
-/*
-** The following procedure converts a double-precision floating point
-** number into a string. The resulting string has the property that
-** two such strings comparied using strcmp() or memcmp() will give the
-** same results as a numeric comparison of the original floating point
-** numbers.
-**
-** This routine is used to generate database keys from floating point
-** numbers such that the keys sort in the same order as the original
-** floating point numbers even though the keys are compared using
-** memcmp().
-**
-** The calling function should have allocated at least 14 characters
-** of space for the buffer z[].
-*/
-void sqliteRealToSortable(double r, char *z){
- int neg;
- int exp;
- int cnt = 0;
-
- /* This array maps integers between 0 and 63 into base-64 digits.
- ** The digits must be chosen such at their ASCII codes are increasing.
- ** This means we can not use the traditional base-64 digit set. */
- static const char zDigit[] =
- "0123456789"
- "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
- "abcdefghijklmnopqrstuvwxyz"
- "|~";
- if( r<0.0 ){
- neg = 1;
- r = -r;
- *z++ = '-';
- } else {
- neg = 0;
- *z++ = '0';
- }
- exp = 0;
-
- if( r==0.0 ){
- exp = -1024;
- }else if( r<(0.5/64.0) ){
- while( r < 0.5/_64e64 && exp > -961 ){ r *= _64e64; exp -= 64; }
- while( r < 0.5/_64e16 && exp > -1009 ){ r *= _64e16; exp -= 16; }
- while( r < 0.5/_64e4 && exp > -1021 ){ r *= _64e4; exp -= 4; }
- while( r < 0.5/64.0 && exp > -1024 ){ r *= 64.0; exp -= 1; }
- }else if( r>=0.5 ){
- while( r >= 0.5*_64e63 && exp < 960 ){ r *= 1.0/_64e64; exp += 64; }
- while( r >= 0.5*_64e15 && exp < 1008 ){ r *= 1.0/_64e16; exp += 16; }
- while( r >= 0.5*_64e3 && exp < 1020 ){ r *= 1.0/_64e4; exp += 4; }
- while( r >= 0.5 && exp < 1023 ){ r *= 1.0/64.0; exp += 1; }
- }
- if( neg ){
- exp = -exp;
- r = -r;
- }
- exp += 1024;
- r += 0.5;
- if( exp<0 ) return;
- if( exp>=2048 || r>=1.0 ){
- strcpy(z, "~~~~~~~~~~~~");
- return;
- }
- *z++ = zDigit[(exp>>6)&0x3f];
- *z++ = zDigit[exp & 0x3f];
- while( r>0.0 && cnt<10 ){
- int digit;
- r *= 64.0;
- digit = (int)r;
- assert( digit>=0 && digit<64 );
- *z++ = zDigit[digit & 0x3f];
- r -= digit;
- cnt++;
- }
- *z = 0;
-}
-
-#ifdef SQLITE_UTF8
-/*
-** X is a pointer to the first byte of a UTF-8 character. Increment
-** X so that it points to the next character. This only works right
-** if X points to a well-formed UTF-8 string.
-*/
-#define sqliteNextChar(X) while( (0xc0&*++(X))==0x80 ){}
-#define sqliteCharVal(X) sqlite_utf8_to_int(X)
-
-#else /* !defined(SQLITE_UTF8) */
-/*
-** For iso8859 encoding, the next character is just the next byte.
-*/
-#define sqliteNextChar(X) (++(X));
-#define sqliteCharVal(X) ((int)*(X))
-
-#endif /* defined(SQLITE_UTF8) */
-
-
-#ifdef SQLITE_UTF8
-/*
-** Convert the UTF-8 character to which z points into a 31-bit
-** UCS character. This only works right if z points to a well-formed
-** UTF-8 string.
-*/
-static int sqlite_utf8_to_int(const unsigned char *z){
- int c;
- static const int initVal[] = {
- 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
- 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29,
- 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44,
- 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59,
- 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74,
- 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89,
- 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104,
- 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119,
- 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134,
- 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149,
- 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164,
- 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179,
- 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 0, 1, 2,
- 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17,
- 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 0,
- 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
- 0, 1, 2, 3, 4, 5, 6, 7, 0, 1, 2, 3, 0, 1, 254,
- 255,
- };
- c = initVal[*(z++)];
- while( (0xc0&*z)==0x80 ){
- c = (c<<6) | (0x3f&*(z++));
- }
- return c;
-}
-#endif
-
-/*
-** Compare two UTF-8 strings for equality where the first string can
-** potentially be a "glob" expression. Return true (1) if they
-** are the same and false (0) if they are different.
-**
-** Globbing rules:
-**
-** '*' Matches any sequence of zero or more characters.
-**
-** '?' Matches exactly one character.
-**
-** [...] Matches one character from the enclosed list of
-** characters.
-**
-** [^...] Matches one character not in the enclosed list.
-**
-** With the [...] and [^...] matching, a ']' character can be included
-** in the list by making it the first character after '[' or '^'. A
-** range of characters can be specified using '-'. Example:
-** "[a-z]" matches any single lower-case letter. To match a '-', make
-** it the last character in the list.
-**
-** This routine is usually quick, but can be N**2 in the worst case.
-**
-** Hints: to match '*' or '?', put them in "[]". Like this:
-**
-** abc[*]xyz Matches "abc*xyz" only
-*/
-int
-sqliteGlobCompare(const unsigned char *zPattern, const unsigned char *zString){
- register int c;
- int invert;
- int seen;
- int c2;
-
- while( (c = *zPattern)!=0 ){
- switch( c ){
- case '*':
- while( (c=zPattern[1]) == '*' || c == '?' ){
- if( c=='?' ){
- if( *zString==0 ) return 0;
- sqliteNextChar(zString);
- }
- zPattern++;
- }
- if( c==0 ) return 1;
- if( c=='[' ){
- while( *zString && sqliteGlobCompare(&zPattern[1],zString)==0 ){
- sqliteNextChar(zString);
- }
- return *zString!=0;
- }else{
- while( (c2 = *zString)!=0 ){
- while( c2 != 0 && c2 != c ){ c2 = *++zString; }
- if( c2==0 ) return 0;
- if( sqliteGlobCompare(&zPattern[1],zString) ) return 1;
- sqliteNextChar(zString);
- }
- return 0;
- }
- case '?': {
- if( *zString==0 ) return 0;
- sqliteNextChar(zString);
- zPattern++;
- break;
- }
- case '[': {
- int prior_c = 0;
- seen = 0;
- invert = 0;
- c = sqliteCharVal(zString);
- if( c==0 ) return 0;
- c2 = *++zPattern;
- if( c2=='^' ){ invert = 1; c2 = *++zPattern; }
- if( c2==']' ){
- if( c==']' ) seen = 1;
- c2 = *++zPattern;
- }
- while( (c2 = sqliteCharVal(zPattern))!=0 && c2!=']' ){
- if( c2=='-' && zPattern[1]!=']' && zPattern[1]!=0 && prior_c>0 ){
- zPattern++;
- c2 = sqliteCharVal(zPattern);
- if( c>=prior_c && c<=c2 ) seen = 1;
- prior_c = 0;
- }else if( c==c2 ){
- seen = 1;
- prior_c = c2;
- }else{
- prior_c = c2;
- }
- sqliteNextChar(zPattern);
- }
- if( c2==0 || (seen ^ invert)==0 ) return 0;
- sqliteNextChar(zString);
- zPattern++;
- break;
- }
- default: {
- if( c != *zString ) return 0;
- zPattern++;
- zString++;
- break;
- }
- }
- }
- return *zString==0;
-}
-
-/*
-** Compare two UTF-8 strings for equality using the "LIKE" operator of
-** SQL. The '%' character matches any sequence of 0 or more
-** characters and '_' matches any single character. Case is
-** not significant.
-**
-** This routine is just an adaptation of the sqliteGlobCompare()
-** routine above.
-*/
-int
-sqliteLikeCompare(const unsigned char *zPattern, const unsigned char *zString){
- register int c;
- int c2;
-
- while( (c = UpperToLower[*zPattern])!=0 ){
- switch( c ){
- case '%': {
- while( (c=zPattern[1]) == '%' || c == '_' ){
- if( c=='_' ){
- if( *zString==0 ) return 0;
- sqliteNextChar(zString);
- }
- zPattern++;
- }
- if( c==0 ) return 1;
- c = UpperToLower[c];
- while( (c2=UpperToLower[*zString])!=0 ){
- while( c2 != 0 && c2 != c ){ c2 = UpperToLower[*++zString]; }
- if( c2==0 ) return 0;
- if( sqliteLikeCompare(&zPattern[1],zString) ) return 1;
- sqliteNextChar(zString);
- }
- return 0;
- }
- case '_': {
- if( *zString==0 ) return 0;
- sqliteNextChar(zString);
- zPattern++;
- break;
- }
- default: {
- if( c != UpperToLower[*zString] ) return 0;
- zPattern++;
- zString++;
- break;
- }
- }
- }
- return *zString==0;
-}
-
-/*
-** Change the sqlite.magic from SQLITE_MAGIC_OPEN to SQLITE_MAGIC_BUSY.
-** Return an error (non-zero) if the magic was not SQLITE_MAGIC_OPEN
-** when this routine is called.
-**
-** This routine is a attempt to detect if two threads use the
-** same sqlite* pointer at the same time. There is a race
-** condition so it is possible that the error is not detected.
-** But usually the problem will be seen. The result will be an
-** error which can be used to debug the application that is
-** using SQLite incorrectly.
-**
-** Ticket #202: If db->magic is not a valid open value, take care not
-** to modify the db structure at all. It could be that db is a stale
-** pointer. In other words, it could be that there has been a prior
-** call to sqlite_close(db) and db has been deallocated. And we do
-** not want to write into deallocated memory.
-*/
-int sqliteSafetyOn(sqlite *db){
- if( db->magic==SQLITE_MAGIC_OPEN ){
- db->magic = SQLITE_MAGIC_BUSY;
- return 0;
- }else if( db->magic==SQLITE_MAGIC_BUSY || db->magic==SQLITE_MAGIC_ERROR
- || db->want_to_close ){
- db->magic = SQLITE_MAGIC_ERROR;
- db->flags |= SQLITE_Interrupt;
- }
- return 1;
-}
-
-/*
-** Change the magic from SQLITE_MAGIC_BUSY to SQLITE_MAGIC_OPEN.
-** Return an error (non-zero) if the magic was not SQLITE_MAGIC_BUSY
-** when this routine is called.
-*/
-int sqliteSafetyOff(sqlite *db){
- if( db->magic==SQLITE_MAGIC_BUSY ){
- db->magic = SQLITE_MAGIC_OPEN;
- return 0;
- }else if( db->magic==SQLITE_MAGIC_OPEN || db->magic==SQLITE_MAGIC_ERROR
- || db->want_to_close ){
- db->magic = SQLITE_MAGIC_ERROR;
- db->flags |= SQLITE_Interrupt;
- }
- return 1;
-}
-
-/*
-** Check to make sure we are not currently executing an sqlite_exec().
-** If we are currently in an sqlite_exec(), return true and set
-** sqlite.magic to SQLITE_MAGIC_ERROR. This will cause a complete
-** shutdown of the database.
-**
-** This routine is used to try to detect when API routines are called
-** at the wrong time or in the wrong sequence.
-*/
-int sqliteSafetyCheck(sqlite *db){
- if( db->pVdbe!=0 ){
- db->magic = SQLITE_MAGIC_ERROR;
- return 1;
- }
- return 0;
-}
diff --git a/ext/sqlite/libsqlite/src/vacuum.c b/ext/sqlite/libsqlite/src/vacuum.c
deleted file mode 100644
index 06cc6b0a4c..0000000000
--- a/ext/sqlite/libsqlite/src/vacuum.c
+++ /dev/null
@@ -1,327 +0,0 @@
-/*
-** 2003 April 6
-**
-** The author disclaims copyright to this source code. In place of
-** a legal notice, here is a blessing:
-**
-** May you do good and not evil.
-** May you find forgiveness for yourself and forgive others.
-** May you share freely, never taking more than you give.
-**
-*************************************************************************
-** This file contains code used to implement the VACUUM command.
-**
-** Most of the code in this file may be omitted by defining the
-** SQLITE_OMIT_VACUUM macro.
-**
-** $Id$
-*/
-#include "sqliteInt.h"
-#include "os.h"
-
-/*
-** A structure for holding a dynamic string - a string that can grow
-** without bound.
-*/
-typedef struct dynStr dynStr;
-struct dynStr {
- char *z; /* Text of the string in space obtained from sqliteMalloc() */
- int nAlloc; /* Amount of space allocated to z[] */
- int nUsed; /* Next unused slot in z[] */
-};
-
-/*
-** A structure that holds the vacuum context
-*/
-typedef struct vacuumStruct vacuumStruct;
-struct vacuumStruct {
- sqlite *dbOld; /* Original database */
- sqlite *dbNew; /* New database */
- char **pzErrMsg; /* Write errors here */
- int rc; /* Set to non-zero on an error */
- const char *zTable; /* Name of a table being copied */
- const char *zPragma; /* Pragma to execute with results */
- dynStr s1, s2; /* Two dynamic strings */
-};
-
-#if !defined(SQLITE_OMIT_VACUUM) || SQLITE_OMIT_VACUUM
-/*
-** Append text to a dynamic string
-*/
-static void appendText(dynStr *p, const char *zText, int nText){
- if( nText<0 ) nText = strlen(zText);
- if( p->z==0 || p->nUsed + nText + 1 >= p->nAlloc ){
- char *zNew;
- p->nAlloc = p->nUsed + nText + 1000;
- zNew = sqliteRealloc(p->z, p->nAlloc);
- if( zNew==0 ){
- sqliteFree(p->z);
- memset(p, 0, sizeof(*p));
- return;
- }
- p->z = zNew;
- }
- memcpy(&p->z[p->nUsed], zText, nText+1);
- p->nUsed += nText;
-}
-
-/*
-** Append text to a dynamic string, having first put the text in quotes.
-*/
-static void appendQuoted(dynStr *p, const char *zText){
- int i, j;
- appendText(p, "'", 1);
- for(i=j=0; zText[i]; i++){
- if( zText[i]=='\'' ){
- appendText(p, &zText[j], i-j+1);
- j = i + 1;
- appendText(p, "'", 1);
- }
- }
- if( j<i ){
- appendText(p, &zText[j], i-j);
- }
- appendText(p, "'", 1);
-}
-
-/*
-** Execute statements of SQL. If an error occurs, write the error
-** message into *pzErrMsg and return non-zero.
-*/
-static int execsql(char **pzErrMsg, sqlite *db, const char *zSql){
- char *zErrMsg = 0;
- int rc;
-
- /* printf("***** executing *****\n%s\n", zSql); */
- rc = sqlite_exec(db, zSql, 0, 0, &zErrMsg);
- if( zErrMsg ){
- sqliteSetString(pzErrMsg, zErrMsg, (char*)0);
- sqlite_freemem(zErrMsg);
- }
- return rc;
-}
-
-/*
-** This is the second stage callback. Each invocation contains all the
-** data for a single row of a single table in the original database. This
-** routine must write that information into the new database.
-*/
-static int vacuumCallback2(void *pArg, int argc, char **argv, char **NotUsed){
- vacuumStruct *p = (vacuumStruct*)pArg;
- const char *zSep = "(";
- int i;
-
- if( argv==0 ) return 0;
- p->s2.nUsed = 0;
- appendText(&p->s2, "INSERT INTO ", -1);
- appendQuoted(&p->s2, p->zTable);
- appendText(&p->s2, " VALUES", -1);
- for(i=0; i<argc; i++){
- appendText(&p->s2, zSep, 1);
- zSep = ",";
- if( argv[i]==0 ){
- appendText(&p->s2, "NULL", 4);
- }else{
- appendQuoted(&p->s2, argv[i]);
- }
- }
- appendText(&p->s2,")", 1);
- p->rc = execsql(p->pzErrMsg, p->dbNew, p->s2.z);
- return p->rc;
-}
-
-/*
-** This is the first stage callback. Each invocation contains three
-** arguments where are taken from the SQLITE_MASTER table of the original
-** database: (1) the entry type, (2) the entry name, and (3) the SQL for
-** the entry. In all cases, execute the SQL of the third argument.
-** For tables, run a query to select all entries in that table and
-** transfer them to the second-stage callback.
-*/
-static int vacuumCallback1(void *pArg, int argc, char **argv, char **NotUsed){
- vacuumStruct *p = (vacuumStruct*)pArg;
- int rc = 0;
- assert( argc==3 );
- if( argv==0 ) return 0;
- assert( argv[0]!=0 );
- assert( argv[1]!=0 );
- assert( argv[2]!=0 );
- rc = execsql(p->pzErrMsg, p->dbNew, argv[2]);
- if( rc==SQLITE_OK && strcmp(argv[0],"table")==0 ){
- char *zErrMsg = 0;
- p->s1.nUsed = 0;
- appendText(&p->s1, "SELECT * FROM ", -1);
- appendQuoted(&p->s1, argv[1]);
- p->zTable = argv[1];
- rc = sqlite_exec(p->dbOld, p->s1.z, vacuumCallback2, p, &zErrMsg);
- if( zErrMsg ){
- sqliteSetString(p->pzErrMsg, zErrMsg, (char*)0);
- sqlite_freemem(zErrMsg);
- }
- }
- if( rc!=SQLITE_ABORT ) p->rc = rc;
- return rc;
-}
-
-/*
-** This callback is used to transfer PRAGMA settings from one database
-** to the other. The value in argv[0] should be passed to a pragma
-** identified by ((vacuumStruct*)pArg)->zPragma.
-*/
-static int vacuumCallback3(void *pArg, int argc, char **argv, char **NotUsed){
- vacuumStruct *p = (vacuumStruct*)pArg;
- char zBuf[200];
- assert( argc==1 );
- if( argv==0 ) return 0;
- assert( argv[0]!=0 );
- assert( strlen(p->zPragma)<100 );
- assert( strlen(argv[0])<30 );
- sprintf(zBuf,"PRAGMA %s=%s;", p->zPragma, argv[0]);
- p->rc = execsql(p->pzErrMsg, p->dbNew, zBuf);
- return p->rc;
-}
-
-/*
-** Generate a random name of 20 character in length.
-*/
-static void randomName(unsigned char *zBuf){
- static const unsigned char zChars[] =
- "abcdefghijklmnopqrstuvwxyz"
- "0123456789";
- int i;
- sqliteRandomness(20, zBuf);
- for(i=0; i<20; i++){
- zBuf[i] = zChars[ zBuf[i]%(sizeof(zChars)-1) ];
- }
-}
-#endif
-
-/*
-** The non-standard VACUUM command is used to clean up the database,
-** collapse free space, etc. It is modelled after the VACUUM command
-** in PostgreSQL.
-**
-** In version 1.0.x of SQLite, the VACUUM command would call
-** gdbm_reorganize() on all the database tables. But beginning
-** with 2.0.0, SQLite no longer uses GDBM so this command has
-** become a no-op.
-*/
-void sqliteVacuum(Parse *pParse, Token *pTableName){
- Vdbe *v = sqliteGetVdbe(pParse);
- sqliteVdbeAddOp(v, OP_Vacuum, 0, 0);
- return;
-}
-
-/*
-** This routine implements the OP_Vacuum opcode of the VDBE.
-*/
-int sqliteRunVacuum(char **pzErrMsg, sqlite *db){
-#if !defined(SQLITE_OMIT_VACUUM) || SQLITE_OMIT_VACUUM
- const char *zFilename; /* full pathname of the database file */
- int nFilename; /* number of characters in zFilename[] */
- char *zTemp = 0; /* a temporary file in same directory as zFilename */
- sqlite *dbNew = 0; /* The new vacuumed database */
- int rc = SQLITE_OK; /* Return code from service routines */
- int i; /* Loop counter */
- char *zErrMsg; /* Error message */
- vacuumStruct sVac; /* Information passed to callbacks */
-
- /* These are all of the pragmas that need to be transferred over
- ** to the new database */
- static const char *zPragma[] = {
- "default_synchronous",
- "default_cache_size",
- /* "default_temp_store", */
- };
-
- if( db->flags & SQLITE_InTrans ){
- sqliteSetString(pzErrMsg, "cannot VACUUM from within a transaction",
- (char*)0);
- return SQLITE_ERROR;
- }
- if( db->flags & SQLITE_Interrupt ){
- return SQLITE_INTERRUPT;
- }
- memset(&sVac, 0, sizeof(sVac));
-
- /* Get the full pathname of the database file and create two
- ** temporary filenames in the same directory as the original file.
- */
- zFilename = sqliteBtreeGetFilename(db->aDb[0].pBt);
- if( zFilename==0 ){
- /* This only happens with the in-memory database. VACUUM is a no-op
- ** there, so just return */
- return SQLITE_OK;
- }
- nFilename = strlen(zFilename);
- zTemp = sqliteMalloc( nFilename+100 );
- if( zTemp==0 ) return SQLITE_NOMEM;
- strcpy(zTemp, zFilename);
- for(i=0; i<10; i++){
- zTemp[nFilename] = '-';
- randomName((unsigned char*)&zTemp[nFilename+1]);
- if( !sqliteOsFileExists(zTemp) ) break;
- }
- if( i>=10 ){
- sqliteSetString(pzErrMsg, "unable to create a temporary database file "
- "in the same directory as the original database", (char*)0);
- goto end_of_vacuum;
- }
-
-
- dbNew = sqlite_open(zTemp, 0, &zErrMsg);
- if( dbNew==0 ){
- sqliteSetString(pzErrMsg, "unable to open a temporary database at ",
- zTemp, " - ", zErrMsg, (char*)0);
- goto end_of_vacuum;
- }
- if( (rc = execsql(pzErrMsg, db, "BEGIN"))!=0 ) goto end_of_vacuum;
- if( (rc = execsql(pzErrMsg, dbNew, "PRAGMA synchronous=off; BEGIN"))!=0 ){
- goto end_of_vacuum;
- }
-
- sVac.dbOld = db;
- sVac.dbNew = dbNew;
- sVac.pzErrMsg = pzErrMsg;
- for(i=0; rc==SQLITE_OK && i<sizeof(zPragma)/sizeof(zPragma[0]); i++){
- char zBuf[200];
- assert( strlen(zPragma[i])<100 );
- sprintf(zBuf, "PRAGMA %s;", zPragma[i]);
- sVac.zPragma = zPragma[i];
- rc = sqlite_exec(db, zBuf, vacuumCallback3, &sVac, &zErrMsg);
- }
- if( rc==SQLITE_OK ){
- rc = sqlite_exec(db,
- "SELECT type, name, sql FROM sqlite_master "
- "WHERE sql NOT NULL AND type!='view' "
- "UNION ALL "
- "SELECT type, name, sql FROM sqlite_master "
- "WHERE sql NOT NULL AND type=='view'",
- vacuumCallback1, &sVac, &zErrMsg);
- }
- if( rc==SQLITE_OK ){
- rc = sqliteBtreeCopyFile(db->aDb[0].pBt, dbNew->aDb[0].pBt);
- sqlite_exec(db, "COMMIT", 0, 0, 0);
- sqliteResetInternalSchema(db, 0);
- }
-
-end_of_vacuum:
- if( rc && zErrMsg!=0 ){
- sqliteSetString(pzErrMsg, "unable to vacuum database - ",
- zErrMsg, (char*)0);
- }
- sqlite_exec(db, "ROLLBACK", 0, 0, 0);
- if( (dbNew && (dbNew->flags & SQLITE_Interrupt))
- || (db->flags & SQLITE_Interrupt) ){
- rc = SQLITE_INTERRUPT;
- }
- if( dbNew ) sqlite_close(dbNew);
- sqliteOsDelete(zTemp);
- sqliteFree(zTemp);
- sqliteFree(sVac.s1.z);
- sqliteFree(sVac.s2.z);
- if( zErrMsg ) sqlite_freemem(zErrMsg);
- if( rc==SQLITE_ABORT && sVac.rc!=SQLITE_INTERRUPT ) sVac.rc = SQLITE_ERROR;
- return sVac.rc;
-#endif
-}
diff --git a/ext/sqlite/libsqlite/src/vdbe.c b/ext/sqlite/libsqlite/src/vdbe.c
deleted file mode 100644
index 09332560df..0000000000
--- a/ext/sqlite/libsqlite/src/vdbe.c
+++ /dev/null
@@ -1,4916 +0,0 @@
-/*
-** 2001 September 15
-**
-** The author disclaims copyright to this source code. In place of
-** a legal notice, here is a blessing:
-**
-** May you do good and not evil.
-** May you find forgiveness for yourself and forgive others.
-** May you share freely, never taking more than you give.
-**
-*************************************************************************
-** The code in this file implements execution method of the
-** Virtual Database Engine (VDBE). A separate file ("vdbeaux.c")
-** handles housekeeping details such as creating and deleting
-** VDBE instances. This file is solely interested in executing
-** the VDBE program.
-**
-** In the external interface, an "sqlite_vm*" is an opaque pointer
-** to a VDBE.
-**
-** The SQL parser generates a program which is then executed by
-** the VDBE to do the work of the SQL statement. VDBE programs are
-** similar in form to assembly language. The program consists of
-** a linear sequence of operations. Each operation has an opcode
-** and 3 operands. Operands P1 and P2 are integers. Operand P3
-** is a null-terminated string. The P2 operand must be non-negative.
-** Opcodes will typically ignore one or more operands. Many opcodes
-** ignore all three operands.
-**
-** Computation results are stored on a stack. Each entry on the
-** stack is either an integer, a null-terminated string, a floating point
-** number, or the SQL "NULL" value. An inplicit conversion from one
-** type to the other occurs as necessary.
-**
-** Most of the code in this file is taken up by the sqliteVdbeExec()
-** function which does the work of interpreting a VDBE program.
-** But other routines are also provided to help in building up
-** a program instruction by instruction.
-**
-** Various scripts scan this source file in order to generate HTML
-** documentation, headers files, or other derived files. The formatting
-** of the code in this file is, therefore, important. See other comments
-** in this file for details. If in doubt, do not deviate from existing
-** commenting and indentation practices when changing or adding code.
-**
-** $Id$
-*/
-#include "sqliteInt.h"
-#include "os.h"
-#include <ctype.h>
-#include "vdbeInt.h"
-
-/*
-** The following global variable is incremented every time a cursor
-** moves, either by the OP_MoveTo or the OP_Next opcode. The test
-** procedures use this information to make sure that indices are
-** working correctly. This variable has no function other than to
-** help verify the correct operation of the library.
-*/
-int sqlite_search_count = 0;
-
-/*
-** When this global variable is positive, it gets decremented once before
-** each instruction in the VDBE. When reaches zero, the SQLITE_Interrupt
-** of the db.flags field is set in order to simulate an interrupt.
-**
-** This facility is used for testing purposes only. It does not function
-** in an ordinary build.
-*/
-int sqlite_interrupt_count = 0;
-
-/*
-** Advance the virtual machine to the next output row.
-**
-** The return vale will be either SQLITE_BUSY, SQLITE_DONE,
-** SQLITE_ROW, SQLITE_ERROR, or SQLITE_MISUSE.
-**
-** SQLITE_BUSY means that the virtual machine attempted to open
-** a locked database and there is no busy callback registered.
-** Call sqlite_step() again to retry the open. *pN is set to 0
-** and *pazColName and *pazValue are both set to NULL.
-**
-** SQLITE_DONE means that the virtual machine has finished
-** executing. sqlite_step() should not be called again on this
-** virtual machine. *pN and *pazColName are set appropriately
-** but *pazValue is set to NULL.
-**
-** SQLITE_ROW means that the virtual machine has generated another
-** row of the result set. *pN is set to the number of columns in
-** the row. *pazColName is set to the names of the columns followed
-** by the column datatypes. *pazValue is set to the values of each
-** column in the row. The value of the i-th column is (*pazValue)[i].
-** The name of the i-th column is (*pazColName)[i] and the datatype
-** of the i-th column is (*pazColName)[i+*pN].
-**
-** SQLITE_ERROR means that a run-time error (such as a constraint
-** violation) has occurred. The details of the error will be returned
-** by the next call to sqlite_finalize(). sqlite_step() should not
-** be called again on the VM.
-**
-** SQLITE_MISUSE means that the this routine was called inappropriately.
-** Perhaps it was called on a virtual machine that had already been
-** finalized or on one that had previously returned SQLITE_ERROR or
-** SQLITE_DONE. Or it could be the case the the same database connection
-** is being used simulataneously by two or more threads.
-*/
-int sqlite_step(
- sqlite_vm *pVm, /* The virtual machine to execute */
- int *pN, /* OUT: Number of columns in result */
- const char ***pazValue, /* OUT: Column data */
- const char ***pazColName /* OUT: Column names and datatypes */
-){
- Vdbe *p = (Vdbe*)pVm;
- sqlite *db;
- int rc;
-
- if( p->magic!=VDBE_MAGIC_RUN ){
- return SQLITE_MISUSE;
- }
- db = p->db;
- if( sqliteSafetyOn(db) ){
- p->rc = SQLITE_MISUSE;
- return SQLITE_MISUSE;
- }
- if( p->explain ){
- rc = sqliteVdbeList(p);
- }else{
- rc = sqliteVdbeExec(p);
- }
- if( rc==SQLITE_DONE || rc==SQLITE_ROW ){
- if( pazColName ) *pazColName = (const char**)p->azColName;
- if( pN ) *pN = p->nResColumn;
- }else{
- if( pazColName) *pazColName = 0;
- if( pN ) *pN = 0;
- }
- if( pazValue ){
- if( rc==SQLITE_ROW ){
- *pazValue = (const char**)p->azResColumn;
- }else{
- *pazValue = 0;
- }
- }
- if( sqliteSafetyOff(db) ){
- return SQLITE_MISUSE;
- }
- return rc;
-}
-
-/*
-** Insert a new aggregate element and make it the element that
-** has focus.
-**
-** Return 0 on success and 1 if memory is exhausted.
-*/
-static int AggInsert(Agg *p, char *zKey, int nKey){
- AggElem *pElem, *pOld;
- int i;
- Mem *pMem;
- pElem = sqliteMalloc( sizeof(AggElem) + nKey +
- (p->nMem-1)*sizeof(pElem->aMem[0]) );
- if( pElem==0 ) return 1;
- pElem->zKey = (char*)&pElem->aMem[p->nMem];
- memcpy(pElem->zKey, zKey, nKey);
- pElem->nKey = nKey;
- pOld = sqliteHashInsert(&p->hash, pElem->zKey, pElem->nKey, pElem);
- if( pOld!=0 ){
- assert( pOld==pElem ); /* Malloc failed on insert */
- sqliteFree(pOld);
- return 0;
- }
- for(i=0, pMem=pElem->aMem; i<p->nMem; i++, pMem++){
- pMem->flags = MEM_Null;
- }
- p->pCurrent = pElem;
- return 0;
-}
-
-/*
-** Get the AggElem currently in focus
-*/
-#define AggInFocus(P) ((P).pCurrent ? (P).pCurrent : _AggInFocus(&(P)))
-static AggElem *_AggInFocus(Agg *p){
- HashElem *pElem = sqliteHashFirst(&p->hash);
- if( pElem==0 ){
- AggInsert(p,"",1);
- pElem = sqliteHashFirst(&p->hash);
- }
- return pElem ? sqliteHashData(pElem) : 0;
-}
-
-/*
-** Convert the given stack entity into a string if it isn't one
-** already.
-*/
-#define Stringify(P) if(((P)->flags & MEM_Str)==0){hardStringify(P);}
-static int hardStringify(Mem *pStack){
- int fg = pStack->flags;
- if( fg & MEM_Real ){
- sqlite_snprintf(sizeof(pStack->zShort),pStack->zShort,"%.15g",pStack->r);
- }else if( fg & MEM_Int ){
- sqlite_snprintf(sizeof(pStack->zShort),pStack->zShort,"%d",pStack->i);
- }else{
- pStack->zShort[0] = 0;
- }
- pStack->z = pStack->zShort;
- pStack->n = strlen(pStack->zShort)+1;
- pStack->flags = MEM_Str | MEM_Short;
- return 0;
-}
-
-/*
-** Convert the given stack entity into a string that has been obtained
-** from sqliteMalloc(). This is different from Stringify() above in that
-** Stringify() will use the NBFS bytes of static string space if the string
-** will fit but this routine always mallocs for space.
-** Return non-zero if we run out of memory.
-*/
-#define Dynamicify(P) (((P)->flags & MEM_Dyn)==0 ? hardDynamicify(P):0)
-static int hardDynamicify(Mem *pStack){
- int fg = pStack->flags;
- char *z;
- if( (fg & MEM_Str)==0 ){
- hardStringify(pStack);
- }
- assert( (fg & MEM_Dyn)==0 );
- z = sqliteMallocRaw( pStack->n );
- if( z==0 ) return 1;
- memcpy(z, pStack->z, pStack->n);
- pStack->z = z;
- pStack->flags |= MEM_Dyn;
- return 0;
-}
-
-/*
-** An ephemeral string value (signified by the MEM_Ephem flag) contains
-** a pointer to a dynamically allocated string where some other entity
-** is responsible for deallocating that string. Because the stack entry
-** does not control the string, it might be deleted without the stack
-** entry knowing it.
-**
-** This routine converts an ephemeral string into a dynamically allocated
-** string that the stack entry itself controls. In other words, it
-** converts an MEM_Ephem string into an MEM_Dyn string.
-*/
-#define Deephemeralize(P) \
- if( ((P)->flags&MEM_Ephem)!=0 && hardDeephem(P) ){ goto no_mem;}
-static int hardDeephem(Mem *pStack){
- char *z;
- assert( (pStack->flags & MEM_Ephem)!=0 );
- z = sqliteMallocRaw( pStack->n );
- if( z==0 ) return 1;
- memcpy(z, pStack->z, pStack->n);
- pStack->z = z;
- pStack->flags &= ~MEM_Ephem;
- pStack->flags |= MEM_Dyn;
- return 0;
-}
-
-/*
-** Release the memory associated with the given stack level. This
-** leaves the Mem.flags field in an inconsistent state.
-*/
-#define Release(P) if((P)->flags&MEM_Dyn){ sqliteFree((P)->z); }
-
-/*
-** Pop the stack N times.
-*/
-static void popStack(Mem **ppTos, int N){
- Mem *pTos = *ppTos;
- while( N>0 ){
- N--;
- Release(pTos);
- pTos--;
- }
- *ppTos = pTos;
-}
-
-/*
-** Return TRUE if zNum is a 32-bit signed integer and write
-** the value of the integer into *pNum. If zNum is not an integer
-** or is an integer that is too large to be expressed with just 32
-** bits, then return false.
-**
-** Under Linux (RedHat 7.2) this routine is much faster than atoi()
-** for converting strings into integers.
-*/
-static int toInt(const char *zNum, int *pNum){
- int v = 0;
- int neg;
- int i, c;
- if( *zNum=='-' ){
- neg = 1;
- zNum++;
- }else if( *zNum=='+' ){
- neg = 0;
- zNum++;
- }else{
- neg = 0;
- }
- for(i=0; (c=zNum[i])>='0' && c<='9'; i++){
- v = v*10 + c - '0';
- }
- *pNum = neg ? -v : v;
- return c==0 && i>0 && (i<10 || (i==10 && memcmp(zNum,"2147483647",10)<=0));
-}
-
-/*
-** Convert the given stack entity into a integer if it isn't one
-** already.
-**
-** Any prior string or real representation is invalidated.
-** NULLs are converted into 0.
-*/
-#define Integerify(P) if(((P)->flags&MEM_Int)==0){ hardIntegerify(P); }
-static void hardIntegerify(Mem *pStack){
- if( pStack->flags & MEM_Real ){
- pStack->i = (int)pStack->r;
- Release(pStack);
- }else if( pStack->flags & MEM_Str ){
- toInt(pStack->z, &pStack->i);
- Release(pStack);
- }else{
- pStack->i = 0;
- }
- pStack->flags = MEM_Int;
-}
-
-/*
-** Get a valid Real representation for the given stack element.
-**
-** Any prior string or integer representation is retained.
-** NULLs are converted into 0.0.
-*/
-#define Realify(P) if(((P)->flags&MEM_Real)==0){ hardRealify(P); }
-static void hardRealify(Mem *pStack){
- if( pStack->flags & MEM_Str ){
- pStack->r = sqliteAtoF(pStack->z, 0);
- }else if( pStack->flags & MEM_Int ){
- pStack->r = pStack->i;
- }else{
- pStack->r = 0.0;
- }
- pStack->flags |= MEM_Real;
-}
-
-/*
-** The parameters are pointers to the head of two sorted lists
-** of Sorter structures. Merge these two lists together and return
-** a single sorted list. This routine forms the core of the merge-sort
-** algorithm.
-**
-** In the case of a tie, left sorts in front of right.
-*/
-static Sorter *Merge(Sorter *pLeft, Sorter *pRight){
- Sorter sHead;
- Sorter *pTail;
- pTail = &sHead;
- pTail->pNext = 0;
- while( pLeft && pRight ){
- int c = sqliteSortCompare(pLeft->zKey, pRight->zKey);
- if( c<=0 ){
- pTail->pNext = pLeft;
- pLeft = pLeft->pNext;
- }else{
- pTail->pNext = pRight;
- pRight = pRight->pNext;
- }
- pTail = pTail->pNext;
- }
- if( pLeft ){
- pTail->pNext = pLeft;
- }else if( pRight ){
- pTail->pNext = pRight;
- }
- return sHead.pNext;
-}
-
-/*
-** The following routine works like a replacement for the standard
-** library routine fgets(). The difference is in how end-of-line (EOL)
-** is handled. Standard fgets() uses LF for EOL under unix, CRLF
-** under windows, and CR under mac. This routine accepts any of these
-** character sequences as an EOL mark. The EOL mark is replaced by
-** a single LF character in zBuf.
-*/
-static char *vdbe_fgets(char *zBuf, int nBuf, FILE *in){
- int i, c;
- for(i=0; i<nBuf-1 && (c=getc(in))!=EOF; i++){
- zBuf[i] = c;
- if( c=='\r' || c=='\n' ){
- if( c=='\r' ){
- zBuf[i] = '\n';
- c = getc(in);
- if( c!=EOF && c!='\n' ) ungetc(c, in);
- }
- i++;
- break;
- }
- }
- zBuf[i] = 0;
- return i>0 ? zBuf : 0;
-}
-
-/*
-** Make sure there is space in the Vdbe structure to hold at least
-** mxCursor cursors. If there is not currently enough space, then
-** allocate more.
-**
-** If a memory allocation error occurs, return 1. Return 0 if
-** everything works.
-*/
-static int expandCursorArraySize(Vdbe *p, int mxCursor){
- if( mxCursor>=p->nCursor ){
- Cursor *aCsr = sqliteRealloc( p->aCsr, (mxCursor+1)*sizeof(Cursor) );
- if( aCsr==0 ) return 1;
- p->aCsr = aCsr;
- memset(&p->aCsr[p->nCursor], 0, sizeof(Cursor)*(mxCursor+1-p->nCursor));
- p->nCursor = mxCursor+1;
- }
- return 0;
-}
-
-#ifdef VDBE_PROFILE
-/*
-** The following routine only works on pentium-class processors.
-** It uses the RDTSC opcode to read cycle count value out of the
-** processor and returns that value. This can be used for high-res
-** profiling.
-*/
-__inline__ unsigned long long int hwtime(void){
- unsigned long long int x;
- __asm__("rdtsc\n\t"
- "mov %%edx, %%ecx\n\t"
- :"=A" (x));
- return x;
-}
-#endif
-
-/*
-** The CHECK_FOR_INTERRUPT macro defined here looks to see if the
-** sqlite_interrupt() routine has been called. If it has been, then
-** processing of the VDBE program is interrupted.
-**
-** This macro added to every instruction that does a jump in order to
-** implement a loop. This test used to be on every single instruction,
-** but that meant we more testing that we needed. By only testing the
-** flag on jump instructions, we get a (small) speed improvement.
-*/
-#define CHECK_FOR_INTERRUPT \
- if( db->flags & SQLITE_Interrupt ) goto abort_due_to_interrupt;
-
-
-/*
-** Execute as much of a VDBE program as we can then return.
-**
-** sqliteVdbeMakeReady() must be called before this routine in order to
-** close the program with a final OP_Halt and to set up the callbacks
-** and the error message pointer.
-**
-** Whenever a row or result data is available, this routine will either
-** invoke the result callback (if there is one) or return with
-** SQLITE_ROW.
-**
-** If an attempt is made to open a locked database, then this routine
-** will either invoke the busy callback (if there is one) or it will
-** return SQLITE_BUSY.
-**
-** If an error occurs, an error message is written to memory obtained
-** from sqliteMalloc() and p->zErrMsg is made to point to that memory.
-** The error code is stored in p->rc and this routine returns SQLITE_ERROR.
-**
-** If the callback ever returns non-zero, then the program exits
-** immediately. There will be no error message but the p->rc field is
-** set to SQLITE_ABORT and this routine will return SQLITE_ERROR.
-**
-** A memory allocation error causes p->rc to be set to SQLITE_NOMEM and this
-** routine to return SQLITE_ERROR.
-**
-** Other fatal errors return SQLITE_ERROR.
-**
-** After this routine has finished, sqliteVdbeFinalize() should be
-** used to clean up the mess that was left behind.
-*/
-int sqliteVdbeExec(
- Vdbe *p /* The VDBE */
-){
- int pc; /* The program counter */
- Op *pOp; /* Current operation */
- int rc = SQLITE_OK; /* Value to return */
- sqlite *db = p->db; /* The database */
- Mem *pTos; /* Top entry in the operand stack */
- char zBuf[100]; /* Space to sprintf() an integer */
-#ifdef VDBE_PROFILE
- unsigned long long start; /* CPU clock count at start of opcode */
- int origPc; /* Program counter at start of opcode */
-#endif
-#ifndef SQLITE_OMIT_PROGRESS_CALLBACK
- int nProgressOps = 0; /* Opcodes executed since progress callback. */
-#endif
-
- if( p->magic!=VDBE_MAGIC_RUN ) return SQLITE_MISUSE;
- assert( db->magic==SQLITE_MAGIC_BUSY );
- assert( p->rc==SQLITE_OK || p->rc==SQLITE_BUSY );
- p->rc = SQLITE_OK;
- assert( p->explain==0 );
- if( sqlite_malloc_failed ) goto no_mem;
- pTos = p->pTos;
- if( p->popStack ){
- popStack(&pTos, p->popStack);
- p->popStack = 0;
- }
- CHECK_FOR_INTERRUPT;
- for(pc=p->pc; rc==SQLITE_OK; pc++){
- assert( pc>=0 && pc<p->nOp );
- assert( pTos<=&p->aStack[pc] );
-#ifdef VDBE_PROFILE
- origPc = pc;
- start = hwtime();
-#endif
- pOp = &p->aOp[pc];
-
- /* Only allow tracing if NDEBUG is not defined.
- */
-#ifndef NDEBUG
- if( p->trace ){
- sqliteVdbePrintOp(p->trace, pc, pOp);
- }
-#endif
-
- /* Check to see if we need to simulate an interrupt. This only happens
- ** if we have a special test build.
- */
-#ifdef SQLITE_TEST
- if( sqlite_interrupt_count>0 ){
- sqlite_interrupt_count--;
- if( sqlite_interrupt_count==0 ){
- sqlite_interrupt(db);
- }
- }
-#endif
-
-#ifndef SQLITE_OMIT_PROGRESS_CALLBACK
- /* Call the progress callback if it is configured and the required number
- ** of VDBE ops have been executed (either since this invocation of
- ** sqliteVdbeExec() or since last time the progress callback was called).
- ** If the progress callback returns non-zero, exit the virtual machine with
- ** a return code SQLITE_ABORT.
- */
- if( db->xProgress ){
- if( db->nProgressOps==nProgressOps ){
- if( db->xProgress(db->pProgressArg)!=0 ){
- rc = SQLITE_ABORT;
- continue; /* skip to the next iteration of the for loop */
- }
- nProgressOps = 0;
- }
- nProgressOps++;
- }
-#endif
-
- switch( pOp->opcode ){
-
-/*****************************************************************************
-** What follows is a massive switch statement where each case implements a
-** separate instruction in the virtual machine. If we follow the usual
-** indentation conventions, each case should be indented by 6 spaces. But
-** that is a lot of wasted space on the left margin. So the code within
-** the switch statement will break with convention and be flush-left. Another
-** big comment (similar to this one) will mark the point in the code where
-** we transition back to normal indentation.
-**
-** The formatting of each case is important. The makefile for SQLite
-** generates two C files "opcodes.h" and "opcodes.c" by scanning this
-** file looking for lines that begin with "case OP_". The opcodes.h files
-** will be filled with #defines that give unique integer values to each
-** opcode and the opcodes.c file is filled with an array of strings where
-** each string is the symbolic name for the corresponding opcode.
-**
-** Documentation about VDBE opcodes is generated by scanning this file
-** for lines of that contain "Opcode:". That line and all subsequent
-** comment lines are used in the generation of the opcode.html documentation
-** file.
-**
-** SUMMARY:
-**
-** Formatting is important to scripts that scan this file.
-** Do not deviate from the formatting style currently in use.
-**
-*****************************************************************************/
-
-/* Opcode: Goto * P2 *
-**
-** An unconditional jump to address P2.
-** The next instruction executed will be
-** the one at index P2 from the beginning of
-** the program.
-*/
-case OP_Goto: {
- CHECK_FOR_INTERRUPT;
- pc = pOp->p2 - 1;
- break;
-}
-
-/* Opcode: Gosub * P2 *
-**
-** Push the current address plus 1 onto the return address stack
-** and then jump to address P2.
-**
-** The return address stack is of limited depth. If too many
-** OP_Gosub operations occur without intervening OP_Returns, then
-** the return address stack will fill up and processing will abort
-** with a fatal error.
-*/
-case OP_Gosub: {
- if( p->returnDepth>=sizeof(p->returnStack)/sizeof(p->returnStack[0]) ){
- sqliteSetString(&p->zErrMsg, "return address stack overflow", (char*)0);
- p->rc = SQLITE_INTERNAL;
- return SQLITE_ERROR;
- }
- p->returnStack[p->returnDepth++] = pc+1;
- pc = pOp->p2 - 1;
- break;
-}
-
-/* Opcode: Return * * *
-**
-** Jump immediately to the next instruction after the last unreturned
-** OP_Gosub. If an OP_Return has occurred for all OP_Gosubs, then
-** processing aborts with a fatal error.
-*/
-case OP_Return: {
- if( p->returnDepth<=0 ){
- sqliteSetString(&p->zErrMsg, "return address stack underflow", (char*)0);
- p->rc = SQLITE_INTERNAL;
- return SQLITE_ERROR;
- }
- p->returnDepth--;
- pc = p->returnStack[p->returnDepth] - 1;
- break;
-}
-
-/* Opcode: Halt P1 P2 *
-**
-** Exit immediately. All open cursors, Lists, Sorts, etc are closed
-** automatically.
-**
-** P1 is the result code returned by sqlite_exec(). For a normal
-** halt, this should be SQLITE_OK (0). For errors, it can be some
-** other value. If P1!=0 then P2 will determine whether or not to
-** rollback the current transaction. Do not rollback if P2==OE_Fail.
-** Do the rollback if P2==OE_Rollback. If P2==OE_Abort, then back
-** out all changes that have occurred during this execution of the
-** VDBE, but do not rollback the transaction.
-**
-** There is an implied "Halt 0 0 0" instruction inserted at the very end of
-** every program. So a jump past the last instruction of the program
-** is the same as executing Halt.
-*/
-case OP_Halt: {
- p->magic = VDBE_MAGIC_HALT;
- p->pTos = pTos;
- if( pOp->p1!=SQLITE_OK ){
- p->rc = pOp->p1;
- p->errorAction = pOp->p2;
- if( pOp->p3 ){
- sqliteSetString(&p->zErrMsg, pOp->p3, (char*)0);
- }
- return SQLITE_ERROR;
- }else{
- p->rc = SQLITE_OK;
- return SQLITE_DONE;
- }
-}
-
-/* Opcode: Integer P1 * P3
-**
-** The integer value P1 is pushed onto the stack. If P3 is not zero
-** then it is assumed to be a string representation of the same integer.
-*/
-case OP_Integer: {
- pTos++;
- pTos->i = pOp->p1;
- pTos->flags = MEM_Int;
- if( pOp->p3 ){
- pTos->z = pOp->p3;
- pTos->flags |= MEM_Str | MEM_Static;
- pTos->n = strlen(pOp->p3)+1;
- }
- break;
-}
-
-/* Opcode: String * * P3
-**
-** The string value P3 is pushed onto the stack. If P3==0 then a
-** NULL is pushed onto the stack.
-*/
-case OP_String: {
- char *z = pOp->p3;
- pTos++;
- if( z==0 ){
- pTos->flags = MEM_Null;
- }else{
- pTos->z = z;
- pTos->n = strlen(z) + 1;
- pTos->flags = MEM_Str | MEM_Static;
- }
- break;
-}
-
-/* Opcode: Variable P1 * *
-**
-** Push the value of variable P1 onto the stack. A variable is
-** an unknown in the original SQL string as handed to sqlite_compile().
-** Any occurance of the '?' character in the original SQL is considered
-** a variable. Variables in the SQL string are number from left to
-** right beginning with 1. The values of variables are set using the
-** sqlite_bind() API.
-*/
-case OP_Variable: {
- int j = pOp->p1 - 1;
- pTos++;
- if( j>=0 && j<p->nVar && p->azVar[j]!=0 ){
- pTos->z = p->azVar[j];
- pTos->n = p->anVar[j];
- pTos->flags = MEM_Str | MEM_Static;
- }else{
- pTos->flags = MEM_Null;
- }
- break;
-}
-
-/* Opcode: Pop P1 * *
-**
-** P1 elements are popped off of the top of stack and discarded.
-*/
-case OP_Pop: {
- assert( pOp->p1>=0 );
- popStack(&pTos, pOp->p1);
- assert( pTos>=&p->aStack[-1] );
- break;
-}
-
-/* Opcode: Dup P1 P2 *
-**
-** A copy of the P1-th element of the stack
-** is made and pushed onto the top of the stack.
-** The top of the stack is element 0. So the
-** instruction "Dup 0 0 0" will make a copy of the
-** top of the stack.
-**
-** If the content of the P1-th element is a dynamically
-** allocated string, then a new copy of that string
-** is made if P2==0. If P2!=0, then just a pointer
-** to the string is copied.
-**
-** Also see the Pull instruction.
-*/
-case OP_Dup: {
- Mem *pFrom = &pTos[-pOp->p1];
- assert( pFrom<=pTos && pFrom>=p->aStack );
- pTos++;
- memcpy(pTos, pFrom, sizeof(*pFrom)-NBFS);
- if( pTos->flags & MEM_Str ){
- if( pOp->p2 && (pTos->flags & (MEM_Dyn|MEM_Ephem)) ){
- pTos->flags &= ~MEM_Dyn;
- pTos->flags |= MEM_Ephem;
- }else if( pTos->flags & MEM_Short ){
- memcpy(pTos->zShort, pFrom->zShort, pTos->n);
- pTos->z = pTos->zShort;
- }else if( (pTos->flags & MEM_Static)==0 ){
- pTos->z = sqliteMallocRaw(pFrom->n);
- if( sqlite_malloc_failed ) goto no_mem;
- memcpy(pTos->z, pFrom->z, pFrom->n);
- pTos->flags &= ~(MEM_Static|MEM_Ephem|MEM_Short);
- pTos->flags |= MEM_Dyn;
- }
- }
- break;
-}
-
-/* Opcode: Pull P1 * *
-**
-** The P1-th element is removed from its current location on
-** the stack and pushed back on top of the stack. The
-** top of the stack is element 0, so "Pull 0 0 0" is
-** a no-op. "Pull 1 0 0" swaps the top two elements of
-** the stack.
-**
-** See also the Dup instruction.
-*/
-case OP_Pull: {
- Mem *pFrom = &pTos[-pOp->p1];
- int i;
- Mem ts;
-
- ts = *pFrom;
- Deephemeralize(pTos);
- for(i=0; i<pOp->p1; i++, pFrom++){
- Deephemeralize(&pFrom[1]);
- *pFrom = pFrom[1];
- assert( (pFrom->flags & MEM_Ephem)==0 );
- if( pFrom->flags & MEM_Short ){
- assert( pFrom->flags & MEM_Str );
- assert( pFrom->z==pFrom[1].zShort );
- pFrom->z = pFrom->zShort;
- }
- }
- *pTos = ts;
- if( pTos->flags & MEM_Short ){
- assert( pTos->flags & MEM_Str );
- assert( pTos->z==pTos[-pOp->p1].zShort );
- pTos->z = pTos->zShort;
- }
- break;
-}
-
-/* Opcode: Push P1 * *
-**
-** Overwrite the value of the P1-th element down on the
-** stack (P1==0 is the top of the stack) with the value
-** of the top of the stack. Then pop the top of the stack.
-*/
-case OP_Push: {
- Mem *pTo = &pTos[-pOp->p1];
-
- assert( pTo>=p->aStack );
- Deephemeralize(pTos);
- Release(pTo);
- *pTo = *pTos;
- if( pTo->flags & MEM_Short ){
- assert( pTo->z==pTos->zShort );
- pTo->z = pTo->zShort;
- }
- pTos--;
- break;
-}
-
-
-/* Opcode: ColumnName P1 P2 P3
-**
-** P3 becomes the P1-th column name (first is 0). An array of pointers
-** to all column names is passed as the 4th parameter to the callback.
-** If P2==1 then this is the last column in the result set and thus the
-** number of columns in the result set will be P1. There must be at least
-** one OP_ColumnName with a P2==1 before invoking OP_Callback and the
-** number of columns specified in OP_Callback must one more than the P1
-** value of the OP_ColumnName that has P2==1.
-*/
-case OP_ColumnName: {
- assert( pOp->p1>=0 && pOp->p1<p->nOp );
- p->azColName[pOp->p1] = pOp->p3;
- p->nCallback = 0;
- if( pOp->p2 ) p->nResColumn = pOp->p1+1;
- break;
-}
-
-/* Opcode: Callback P1 * *
-**
-** Pop P1 values off the stack and form them into an array. Then
-** invoke the callback function using the newly formed array as the
-** 3rd parameter.
-*/
-case OP_Callback: {
- int i;
- char **azArgv = p->zArgv;
- Mem *pCol;
-
- pCol = &pTos[1-pOp->p1];
- assert( pCol>=p->aStack );
- for(i=0; i<pOp->p1; i++, pCol++){
- if( pCol->flags & MEM_Null ){
- azArgv[i] = 0;
- }else{
- Stringify(pCol);
- azArgv[i] = pCol->z;
- }
- }
- azArgv[i] = 0;
- p->nCallback++;
- p->azResColumn = azArgv;
- assert( p->nResColumn==pOp->p1 );
- p->popStack = pOp->p1;
- p->pc = pc + 1;
- p->pTos = pTos;
- return SQLITE_ROW;
-}
-
-/* Opcode: Concat P1 P2 P3
-**
-** Look at the first P1 elements of the stack. Append them all
-** together with the lowest element first. Use P3 as a separator.
-** Put the result on the top of the stack. The original P1 elements
-** are popped from the stack if P2==0 and retained if P2==1. If
-** any element of the stack is NULL, then the result is NULL.
-**
-** If P3 is NULL, then use no separator. When P1==1, this routine
-** makes a copy of the top stack element into memory obtained
-** from sqliteMalloc().
-*/
-case OP_Concat: {
- char *zNew;
- int nByte;
- int nField;
- int i, j;
- char *zSep;
- int nSep;
- Mem *pTerm;
-
- nField = pOp->p1;
- zSep = pOp->p3;
- if( zSep==0 ) zSep = "";
- nSep = strlen(zSep);
- assert( &pTos[1-nField] >= p->aStack );
- nByte = 1 - nSep;
- pTerm = &pTos[1-nField];
- for(i=0; i<nField; i++, pTerm++){
- if( pTerm->flags & MEM_Null ){
- nByte = -1;
- break;
- }else{
- Stringify(pTerm);
- nByte += pTerm->n - 1 + nSep;
- }
- }
- if( nByte<0 ){
- if( pOp->p2==0 ){
- popStack(&pTos, nField);
- }
- pTos++;
- pTos->flags = MEM_Null;
- break;
- }
- zNew = sqliteMallocRaw( nByte );
- if( zNew==0 ) goto no_mem;
- j = 0;
- pTerm = &pTos[1-nField];
- for(i=j=0; i<nField; i++, pTerm++){
- assert( pTerm->flags & MEM_Str );
- memcpy(&zNew[j], pTerm->z, pTerm->n-1);
- j += pTerm->n-1;
- if( nSep>0 && i<nField-1 ){
- memcpy(&zNew[j], zSep, nSep);
- j += nSep;
- }
- }
- zNew[j] = 0;
- if( pOp->p2==0 ){
- popStack(&pTos, nField);
- }
- pTos++;
- pTos->n = nByte;
- pTos->flags = MEM_Str|MEM_Dyn;
- pTos->z = zNew;
- break;
-}
-
-/* Opcode: Add * * *
-**
-** Pop the top two elements from the stack, add them together,
-** and push the result back onto the stack. If either element
-** is a string then it is converted to a double using the atof()
-** function before the addition.
-** If either operand is NULL, the result is NULL.
-*/
-/* Opcode: Multiply * * *
-**
-** Pop the top two elements from the stack, multiply them together,
-** and push the result back onto the stack. If either element
-** is a string then it is converted to a double using the atof()
-** function before the multiplication.
-** If either operand is NULL, the result is NULL.
-*/
-/* Opcode: Subtract * * *
-**
-** Pop the top two elements from the stack, subtract the
-** first (what was on top of the stack) from the second (the
-** next on stack)
-** and push the result back onto the stack. If either element
-** is a string then it is converted to a double using the atof()
-** function before the subtraction.
-** If either operand is NULL, the result is NULL.
-*/
-/* Opcode: Divide * * *
-**
-** Pop the top two elements from the stack, divide the
-** first (what was on top of the stack) from the second (the
-** next on stack)
-** and push the result back onto the stack. If either element
-** is a string then it is converted to a double using the atof()
-** function before the division. Division by zero returns NULL.
-** If either operand is NULL, the result is NULL.
-*/
-/* Opcode: Remainder * * *
-**
-** Pop the top two elements from the stack, divide the
-** first (what was on top of the stack) from the second (the
-** next on stack)
-** and push the remainder after division onto the stack. If either element
-** is a string then it is converted to a double using the atof()
-** function before the division. Division by zero returns NULL.
-** If either operand is NULL, the result is NULL.
-*/
-case OP_Add:
-case OP_Subtract:
-case OP_Multiply:
-case OP_Divide:
-case OP_Remainder: {
- Mem *pNos = &pTos[-1];
- assert( pNos>=p->aStack );
- if( ((pTos->flags | pNos->flags) & MEM_Null)!=0 ){
- Release(pTos);
- pTos--;
- Release(pTos);
- pTos->flags = MEM_Null;
- }else if( (pTos->flags & pNos->flags & MEM_Int)==MEM_Int ){
- int a, b;
- a = pTos->i;
- b = pNos->i;
- switch( pOp->opcode ){
- case OP_Add: b += a; break;
- case OP_Subtract: b -= a; break;
- case OP_Multiply: b *= a; break;
- case OP_Divide: {
- if( a==0 ) goto divide_by_zero;
- b /= a;
- break;
- }
- default: {
- if( a==0 ) goto divide_by_zero;
- b %= a;
- break;
- }
- }
- Release(pTos);
- pTos--;
- Release(pTos);
- pTos->i = b;
- pTos->flags = MEM_Int;
- }else{
- double a, b;
- Realify(pTos);
- Realify(pNos);
- a = pTos->r;
- b = pNos->r;
- switch( pOp->opcode ){
- case OP_Add: b += a; break;
- case OP_Subtract: b -= a; break;
- case OP_Multiply: b *= a; break;
- case OP_Divide: {
- if( a==0.0 ) goto divide_by_zero;
- b /= a;
- break;
- }
- default: {
- int ia = (int)a;
- int ib = (int)b;
- if( ia==0.0 ) goto divide_by_zero;
- b = ib % ia;
- break;
- }
- }
- Release(pTos);
- pTos--;
- Release(pTos);
- pTos->r = b;
- pTos->flags = MEM_Real;
- }
- break;
-
-divide_by_zero:
- Release(pTos);
- pTos--;
- Release(pTos);
- pTos->flags = MEM_Null;
- break;
-}
-
-/* Opcode: Function P1 * P3
-**
-** Invoke a user function (P3 is a pointer to a Function structure that
-** defines the function) with P1 string arguments taken from the stack.
-** Pop all arguments from the stack and push back the result.
-**
-** See also: AggFunc
-*/
-case OP_Function: {
- int n, i;
- Mem *pArg;
- char **azArgv;
- sqlite_func ctx;
-
- n = pOp->p1;
- pArg = &pTos[1-n];
- azArgv = p->zArgv;
- for(i=0; i<n; i++, pArg++){
- if( pArg->flags & MEM_Null ){
- azArgv[i] = 0;
- }else{
- Stringify(pArg);
- azArgv[i] = pArg->z;
- }
- }
- ctx.pFunc = (FuncDef*)pOp->p3;
- ctx.s.flags = MEM_Null;
- ctx.s.z = 0;
- ctx.isError = 0;
- ctx.isStep = 0;
- if( sqliteSafetyOff(db) ) goto abort_due_to_misuse;
- (*ctx.pFunc->xFunc)(&ctx, n, (const char**)azArgv);
- if( sqliteSafetyOn(db) ) goto abort_due_to_misuse;
- popStack(&pTos, n);
- pTos++;
- *pTos = ctx.s;
- if( pTos->flags & MEM_Short ){
- pTos->z = pTos->zShort;
- }
- if( ctx.isError ){
- sqliteSetString(&p->zErrMsg,
- (pTos->flags & MEM_Str)!=0 ? pTos->z : "user function error", (char*)0);
- rc = SQLITE_ERROR;
- }
- break;
-}
-
-/* Opcode: BitAnd * * *
-**
-** Pop the top two elements from the stack. Convert both elements
-** to integers. Push back onto the stack the bit-wise AND of the
-** two elements.
-** If either operand is NULL, the result is NULL.
-*/
-/* Opcode: BitOr * * *
-**
-** Pop the top two elements from the stack. Convert both elements
-** to integers. Push back onto the stack the bit-wise OR of the
-** two elements.
-** If either operand is NULL, the result is NULL.
-*/
-/* Opcode: ShiftLeft * * *
-**
-** Pop the top two elements from the stack. Convert both elements
-** to integers. Push back onto the stack the top element shifted
-** left by N bits where N is the second element on the stack.
-** If either operand is NULL, the result is NULL.
-*/
-/* Opcode: ShiftRight * * *
-**
-** Pop the top two elements from the stack. Convert both elements
-** to integers. Push back onto the stack the top element shifted
-** right by N bits where N is the second element on the stack.
-** If either operand is NULL, the result is NULL.
-*/
-case OP_BitAnd:
-case OP_BitOr:
-case OP_ShiftLeft:
-case OP_ShiftRight: {
- Mem *pNos = &pTos[-1];
- int a, b;
-
- assert( pNos>=p->aStack );
- if( (pTos->flags | pNos->flags) & MEM_Null ){
- popStack(&pTos, 2);
- pTos++;
- pTos->flags = MEM_Null;
- break;
- }
- Integerify(pTos);
- Integerify(pNos);
- a = pTos->i;
- b = pNos->i;
- switch( pOp->opcode ){
- case OP_BitAnd: a &= b; break;
- case OP_BitOr: a |= b; break;
- case OP_ShiftLeft: a <<= b; break;
- case OP_ShiftRight: a >>= b; break;
- default: /* CANT HAPPEN */ break;
- }
- assert( (pTos->flags & MEM_Dyn)==0 );
- assert( (pNos->flags & MEM_Dyn)==0 );
- pTos--;
- Release(pTos);
- pTos->i = a;
- pTos->flags = MEM_Int;
- break;
-}
-
-/* Opcode: AddImm P1 * *
-**
-** Add the value P1 to whatever is on top of the stack. The result
-** is always an integer.
-**
-** To force the top of the stack to be an integer, just add 0.
-*/
-case OP_AddImm: {
- assert( pTos>=p->aStack );
- Integerify(pTos);
- pTos->i += pOp->p1;
- break;
-}
-
-/* Opcode: ForceInt P1 P2 *
-**
-** Convert the top of the stack into an integer. If the current top of
-** the stack is not numeric (meaning that is is a NULL or a string that
-** does not look like an integer or floating point number) then pop the
-** stack and jump to P2. If the top of the stack is numeric then
-** convert it into the least integer that is greater than or equal to its
-** current value if P1==0, or to the least integer that is strictly
-** greater than its current value if P1==1.
-*/
-case OP_ForceInt: {
- int v;
- assert( pTos>=p->aStack );
- if( (pTos->flags & (MEM_Int|MEM_Real))==0
- && ((pTos->flags & MEM_Str)==0 || sqliteIsNumber(pTos->z)==0) ){
- Release(pTos);
- pTos--;
- pc = pOp->p2 - 1;
- break;
- }
- if( pTos->flags & MEM_Int ){
- v = pTos->i + (pOp->p1!=0);
- }else{
- Realify(pTos);
- v = (int)pTos->r;
- if( pTos->r>(double)v ) v++;
- if( pOp->p1 && pTos->r==(double)v ) v++;
- }
- Release(pTos);
- pTos->i = v;
- pTos->flags = MEM_Int;
- break;
-}
-
-/* Opcode: MustBeInt P1 P2 *
-**
-** Force the top of the stack to be an integer. If the top of the
-** stack is not an integer and cannot be converted into an integer
-** with out data loss, then jump immediately to P2, or if P2==0
-** raise an SQLITE_MISMATCH exception.
-**
-** If the top of the stack is not an integer and P2 is not zero and
-** P1 is 1, then the stack is popped. In all other cases, the depth
-** of the stack is unchanged.
-*/
-case OP_MustBeInt: {
- assert( pTos>=p->aStack );
- if( pTos->flags & MEM_Int ){
- /* Do nothing */
- }else if( pTos->flags & MEM_Real ){
- int i = (int)pTos->r;
- double r = (double)i;
- if( r!=pTos->r ){
- goto mismatch;
- }
- pTos->i = i;
- }else if( pTos->flags & MEM_Str ){
- int v;
- if( !toInt(pTos->z, &v) ){
- double r;
- if( !sqliteIsNumber(pTos->z) ){
- goto mismatch;
- }
- Realify(pTos);
- v = (int)pTos->r;
- r = (double)v;
- if( r!=pTos->r ){
- goto mismatch;
- }
- }
- pTos->i = v;
- }else{
- goto mismatch;
- }
- Release(pTos);
- pTos->flags = MEM_Int;
- break;
-
-mismatch:
- if( pOp->p2==0 ){
- rc = SQLITE_MISMATCH;
- goto abort_due_to_error;
- }else{
- if( pOp->p1 ) popStack(&pTos, 1);
- pc = pOp->p2 - 1;
- }
- break;
-}
-
-/* Opcode: Eq P1 P2 *
-**
-** Pop the top two elements from the stack. If they are equal, then
-** jump to instruction P2. Otherwise, continue to the next instruction.
-**
-** If either operand is NULL (and thus if the result is unknown) then
-** take the jump if P1 is true.
-**
-** If both values are numeric, they are converted to doubles using atof()
-** and compared for equality that way. Otherwise the strcmp() library
-** routine is used for the comparison. For a pure text comparison
-** use OP_StrEq.
-**
-** If P2 is zero, do not jump. Instead, push an integer 1 onto the
-** stack if the jump would have been taken, or a 0 if not. Push a
-** NULL if either operand was NULL.
-*/
-/* Opcode: Ne P1 P2 *
-**
-** Pop the top two elements from the stack. If they are not equal, then
-** jump to instruction P2. Otherwise, continue to the next instruction.
-**
-** If either operand is NULL (and thus if the result is unknown) then
-** take the jump if P1 is true.
-**
-** If both values are numeric, they are converted to doubles using atof()
-** and compared in that format. Otherwise the strcmp() library
-** routine is used for the comparison. For a pure text comparison
-** use OP_StrNe.
-**
-** If P2 is zero, do not jump. Instead, push an integer 1 onto the
-** stack if the jump would have been taken, or a 0 if not. Push a
-** NULL if either operand was NULL.
-*/
-/* Opcode: Lt P1 P2 *
-**
-** Pop the top two elements from the stack. If second element (the
-** next on stack) is less than the first (the top of stack), then
-** jump to instruction P2. Otherwise, continue to the next instruction.
-** In other words, jump if NOS<TOS.
-**
-** If either operand is NULL (and thus if the result is unknown) then
-** take the jump if P1 is true.
-**
-** If both values are numeric, they are converted to doubles using atof()
-** and compared in that format. Numeric values are always less than
-** non-numeric values. If both operands are non-numeric, the strcmp() library
-** routine is used for the comparison. For a pure text comparison
-** use OP_StrLt.
-**
-** If P2 is zero, do not jump. Instead, push an integer 1 onto the
-** stack if the jump would have been taken, or a 0 if not. Push a
-** NULL if either operand was NULL.
-*/
-/* Opcode: Le P1 P2 *
-**
-** Pop the top two elements from the stack. If second element (the
-** next on stack) is less than or equal to the first (the top of stack),
-** then jump to instruction P2. In other words, jump if NOS<=TOS.
-**
-** If either operand is NULL (and thus if the result is unknown) then
-** take the jump if P1 is true.
-**
-** If both values are numeric, they are converted to doubles using atof()
-** and compared in that format. Numeric values are always less than
-** non-numeric values. If both operands are non-numeric, the strcmp() library
-** routine is used for the comparison. For a pure text comparison
-** use OP_StrLe.
-**
-** If P2 is zero, do not jump. Instead, push an integer 1 onto the
-** stack if the jump would have been taken, or a 0 if not. Push a
-** NULL if either operand was NULL.
-*/
-/* Opcode: Gt P1 P2 *
-**
-** Pop the top two elements from the stack. If second element (the
-** next on stack) is greater than the first (the top of stack),
-** then jump to instruction P2. In other words, jump if NOS>TOS.
-**
-** If either operand is NULL (and thus if the result is unknown) then
-** take the jump if P1 is true.
-**
-** If both values are numeric, they are converted to doubles using atof()
-** and compared in that format. Numeric values are always less than
-** non-numeric values. If both operands are non-numeric, the strcmp() library
-** routine is used for the comparison. For a pure text comparison
-** use OP_StrGt.
-**
-** If P2 is zero, do not jump. Instead, push an integer 1 onto the
-** stack if the jump would have been taken, or a 0 if not. Push a
-** NULL if either operand was NULL.
-*/
-/* Opcode: Ge P1 P2 *
-**
-** Pop the top two elements from the stack. If second element (the next
-** on stack) is greater than or equal to the first (the top of stack),
-** then jump to instruction P2. In other words, jump if NOS>=TOS.
-**
-** If either operand is NULL (and thus if the result is unknown) then
-** take the jump if P1 is true.
-**
-** If both values are numeric, they are converted to doubles using atof()
-** and compared in that format. Numeric values are always less than
-** non-numeric values. If both operands are non-numeric, the strcmp() library
-** routine is used for the comparison. For a pure text comparison
-** use OP_StrGe.
-**
-** If P2 is zero, do not jump. Instead, push an integer 1 onto the
-** stack if the jump would have been taken, or a 0 if not. Push a
-** NULL if either operand was NULL.
-*/
-case OP_Eq:
-case OP_Ne:
-case OP_Lt:
-case OP_Le:
-case OP_Gt:
-case OP_Ge: {
- Mem *pNos = &pTos[-1];
- int c, v;
- int ft, fn;
- assert( pNos>=p->aStack );
- ft = pTos->flags;
- fn = pNos->flags;
- if( (ft | fn) & MEM_Null ){
- popStack(&pTos, 2);
- if( pOp->p2 ){
- if( pOp->p1 ) pc = pOp->p2-1;
- }else{
- pTos++;
- pTos->flags = MEM_Null;
- }
- break;
- }else if( (ft & fn & MEM_Int)==MEM_Int ){
- c = pNos->i - pTos->i;
- }else if( (ft & MEM_Int)!=0 && (fn & MEM_Str)!=0 && toInt(pNos->z,&v) ){
- c = v - pTos->i;
- }else if( (fn & MEM_Int)!=0 && (ft & MEM_Str)!=0 && toInt(pTos->z,&v) ){
- c = pNos->i - v;
- }else{
- Stringify(pTos);
- Stringify(pNos);
- c = sqliteCompare(pNos->z, pTos->z);
- }
- switch( pOp->opcode ){
- case OP_Eq: c = c==0; break;
- case OP_Ne: c = c!=0; break;
- case OP_Lt: c = c<0; break;
- case OP_Le: c = c<=0; break;
- case OP_Gt: c = c>0; break;
- default: c = c>=0; break;
- }
- popStack(&pTos, 2);
- if( pOp->p2 ){
- if( c ) pc = pOp->p2-1;
- }else{
- pTos++;
- pTos->i = c;
- pTos->flags = MEM_Int;
- }
- break;
-}
-/* INSERT NO CODE HERE!
-**
-** The opcode numbers are extracted from this source file by doing
-**
-** grep '^case OP_' vdbe.c | ... >opcodes.h
-**
-** The opcodes are numbered in the order that they appear in this file.
-** But in order for the expression generating code to work right, the
-** string comparison operators that follow must be numbered exactly 6
-** greater than the numeric comparison opcodes above. So no other
-** cases can appear between the two.
-*/
-/* Opcode: StrEq P1 P2 *
-**
-** Pop the top two elements from the stack. If they are equal, then
-** jump to instruction P2. Otherwise, continue to the next instruction.
-**
-** If either operand is NULL (and thus if the result is unknown) then
-** take the jump if P1 is true.
-**
-** The strcmp() library routine is used for the comparison. For a
-** numeric comparison, use OP_Eq.
-**
-** If P2 is zero, do not jump. Instead, push an integer 1 onto the
-** stack if the jump would have been taken, or a 0 if not. Push a
-** NULL if either operand was NULL.
-*/
-/* Opcode: StrNe P1 P2 *
-**
-** Pop the top two elements from the stack. If they are not equal, then
-** jump to instruction P2. Otherwise, continue to the next instruction.
-**
-** If either operand is NULL (and thus if the result is unknown) then
-** take the jump if P1 is true.
-**
-** The strcmp() library routine is used for the comparison. For a
-** numeric comparison, use OP_Ne.
-**
-** If P2 is zero, do not jump. Instead, push an integer 1 onto the
-** stack if the jump would have been taken, or a 0 if not. Push a
-** NULL if either operand was NULL.
-*/
-/* Opcode: StrLt P1 P2 *
-**
-** Pop the top two elements from the stack. If second element (the
-** next on stack) is less than the first (the top of stack), then
-** jump to instruction P2. Otherwise, continue to the next instruction.
-** In other words, jump if NOS<TOS.
-**
-** If either operand is NULL (and thus if the result is unknown) then
-** take the jump if P1 is true.
-**
-** The strcmp() library routine is used for the comparison. For a
-** numeric comparison, use OP_Lt.
-**
-** If P2 is zero, do not jump. Instead, push an integer 1 onto the
-** stack if the jump would have been taken, or a 0 if not. Push a
-** NULL if either operand was NULL.
-*/
-/* Opcode: StrLe P1 P2 *
-**
-** Pop the top two elements from the stack. If second element (the
-** next on stack) is less than or equal to the first (the top of stack),
-** then jump to instruction P2. In other words, jump if NOS<=TOS.
-**
-** If either operand is NULL (and thus if the result is unknown) then
-** take the jump if P1 is true.
-**
-** The strcmp() library routine is used for the comparison. For a
-** numeric comparison, use OP_Le.
-**
-** If P2 is zero, do not jump. Instead, push an integer 1 onto the
-** stack if the jump would have been taken, or a 0 if not. Push a
-** NULL if either operand was NULL.
-*/
-/* Opcode: StrGt P1 P2 *
-**
-** Pop the top two elements from the stack. If second element (the
-** next on stack) is greater than the first (the top of stack),
-** then jump to instruction P2. In other words, jump if NOS>TOS.
-**
-** If either operand is NULL (and thus if the result is unknown) then
-** take the jump if P1 is true.
-**
-** The strcmp() library routine is used for the comparison. For a
-** numeric comparison, use OP_Gt.
-**
-** If P2 is zero, do not jump. Instead, push an integer 1 onto the
-** stack if the jump would have been taken, or a 0 if not. Push a
-** NULL if either operand was NULL.
-*/
-/* Opcode: StrGe P1 P2 *
-**
-** Pop the top two elements from the stack. If second element (the next
-** on stack) is greater than or equal to the first (the top of stack),
-** then jump to instruction P2. In other words, jump if NOS>=TOS.
-**
-** If either operand is NULL (and thus if the result is unknown) then
-** take the jump if P1 is true.
-**
-** The strcmp() library routine is used for the comparison. For a
-** numeric comparison, use OP_Ge.
-**
-** If P2 is zero, do not jump. Instead, push an integer 1 onto the
-** stack if the jump would have been taken, or a 0 if not. Push a
-** NULL if either operand was NULL.
-*/
-case OP_StrEq:
-case OP_StrNe:
-case OP_StrLt:
-case OP_StrLe:
-case OP_StrGt:
-case OP_StrGe: {
- Mem *pNos = &pTos[-1];
- int c;
- assert( pNos>=p->aStack );
- if( (pNos->flags | pTos->flags) & MEM_Null ){
- popStack(&pTos, 2);
- if( pOp->p2 ){
- if( pOp->p1 ) pc = pOp->p2-1;
- }else{
- pTos++;
- pTos->flags = MEM_Null;
- }
- break;
- }else{
- Stringify(pTos);
- Stringify(pNos);
- c = strcmp(pNos->z, pTos->z);
- }
- /* The asserts on each case of the following switch are there to verify
- ** that string comparison opcodes are always exactly 6 greater than the
- ** corresponding numeric comparison opcodes. The code generator depends
- ** on this fact.
- */
- switch( pOp->opcode ){
- case OP_StrEq: c = c==0; assert( pOp->opcode-6==OP_Eq ); break;
- case OP_StrNe: c = c!=0; assert( pOp->opcode-6==OP_Ne ); break;
- case OP_StrLt: c = c<0; assert( pOp->opcode-6==OP_Lt ); break;
- case OP_StrLe: c = c<=0; assert( pOp->opcode-6==OP_Le ); break;
- case OP_StrGt: c = c>0; assert( pOp->opcode-6==OP_Gt ); break;
- default: c = c>=0; assert( pOp->opcode-6==OP_Ge ); break;
- }
- popStack(&pTos, 2);
- if( pOp->p2 ){
- if( c ) pc = pOp->p2-1;
- }else{
- pTos++;
- pTos->flags = MEM_Int;
- pTos->i = c;
- }
- break;
-}
-
-/* Opcode: And * * *
-**
-** Pop two values off the stack. Take the logical AND of the
-** two values and push the resulting boolean value back onto the
-** stack.
-*/
-/* Opcode: Or * * *
-**
-** Pop two values off the stack. Take the logical OR of the
-** two values and push the resulting boolean value back onto the
-** stack.
-*/
-case OP_And:
-case OP_Or: {
- Mem *pNos = &pTos[-1];
- int v1, v2; /* 0==TRUE, 1==FALSE, 2==UNKNOWN or NULL */
-
- assert( pNos>=p->aStack );
- if( pTos->flags & MEM_Null ){
- v1 = 2;
- }else{
- Integerify(pTos);
- v1 = pTos->i==0;
- }
- if( pNos->flags & MEM_Null ){
- v2 = 2;
- }else{
- Integerify(pNos);
- v2 = pNos->i==0;
- }
- if( pOp->opcode==OP_And ){
- static const unsigned char and_logic[] = { 0, 1, 2, 1, 1, 1, 2, 1, 2 };
- v1 = and_logic[v1*3+v2];
- }else{
- static const unsigned char or_logic[] = { 0, 0, 0, 0, 1, 2, 0, 2, 2 };
- v1 = or_logic[v1*3+v2];
- }
- popStack(&pTos, 2);
- pTos++;
- if( v1==2 ){
- pTos->flags = MEM_Null;
- }else{
- pTos->i = v1==0;
- pTos->flags = MEM_Int;
- }
- break;
-}
-
-/* Opcode: Negative * * *
-**
-** Treat the top of the stack as a numeric quantity. Replace it
-** with its additive inverse. If the top of the stack is NULL
-** its value is unchanged.
-*/
-/* Opcode: AbsValue * * *
-**
-** Treat the top of the stack as a numeric quantity. Replace it
-** with its absolute value. If the top of the stack is NULL
-** its value is unchanged.
-*/
-case OP_Negative:
-case OP_AbsValue: {
- assert( pTos>=p->aStack );
- if( pTos->flags & MEM_Real ){
- Release(pTos);
- if( pOp->opcode==OP_Negative || pTos->r<0.0 ){
- pTos->r = -pTos->r;
- }
- pTos->flags = MEM_Real;
- }else if( pTos->flags & MEM_Int ){
- Release(pTos);
- if( pOp->opcode==OP_Negative || pTos->i<0 ){
- pTos->i = -pTos->i;
- }
- pTos->flags = MEM_Int;
- }else if( pTos->flags & MEM_Null ){
- /* Do nothing */
- }else{
- Realify(pTos);
- Release(pTos);
- if( pOp->opcode==OP_Negative || pTos->r<0.0 ){
- pTos->r = -pTos->r;
- }
- pTos->flags = MEM_Real;
- }
- break;
-}
-
-/* Opcode: Not * * *
-**
-** Interpret the top of the stack as a boolean value. Replace it
-** with its complement. If the top of the stack is NULL its value
-** is unchanged.
-*/
-case OP_Not: {
- assert( pTos>=p->aStack );
- if( pTos->flags & MEM_Null ) break; /* Do nothing to NULLs */
- Integerify(pTos);
- Release(pTos);
- pTos->i = !pTos->i;
- pTos->flags = MEM_Int;
- break;
-}
-
-/* Opcode: BitNot * * *
-**
-** Interpret the top of the stack as an value. Replace it
-** with its ones-complement. If the top of the stack is NULL its
-** value is unchanged.
-*/
-case OP_BitNot: {
- assert( pTos>=p->aStack );
- if( pTos->flags & MEM_Null ) break; /* Do nothing to NULLs */
- Integerify(pTos);
- Release(pTos);
- pTos->i = ~pTos->i;
- pTos->flags = MEM_Int;
- break;
-}
-
-/* Opcode: Noop * * *
-**
-** Do nothing. This instruction is often useful as a jump
-** destination.
-*/
-case OP_Noop: {
- break;
-}
-
-/* Opcode: If P1 P2 *
-**
-** Pop a single boolean from the stack. If the boolean popped is
-** true, then jump to p2. Otherwise continue to the next instruction.
-** An integer is false if zero and true otherwise. A string is
-** false if it has zero length and true otherwise.
-**
-** If the value popped of the stack is NULL, then take the jump if P1
-** is true and fall through if P1 is false.
-*/
-/* Opcode: IfNot P1 P2 *
-**
-** Pop a single boolean from the stack. If the boolean popped is
-** false, then jump to p2. Otherwise continue to the next instruction.
-** An integer is false if zero and true otherwise. A string is
-** false if it has zero length and true otherwise.
-**
-** If the value popped of the stack is NULL, then take the jump if P1
-** is true and fall through if P1 is false.
-*/
-case OP_If:
-case OP_IfNot: {
- int c;
- assert( pTos>=p->aStack );
- if( pTos->flags & MEM_Null ){
- c = pOp->p1;
- }else{
- Integerify(pTos);
- c = pTos->i;
- if( pOp->opcode==OP_IfNot ) c = !c;
- }
- assert( (pTos->flags & MEM_Dyn)==0 );
- pTos--;
- if( c ) pc = pOp->p2-1;
- break;
-}
-
-/* Opcode: IsNull P1 P2 *
-**
-** If any of the top abs(P1) values on the stack are NULL, then jump
-** to P2. Pop the stack P1 times if P1>0. If P1<0 leave the stack
-** unchanged.
-*/
-case OP_IsNull: {
- int i, cnt;
- Mem *pTerm;
- cnt = pOp->p1;
- if( cnt<0 ) cnt = -cnt;
- pTerm = &pTos[1-cnt];
- assert( pTerm>=p->aStack );
- for(i=0; i<cnt; i++, pTerm++){
- if( pTerm->flags & MEM_Null ){
- pc = pOp->p2-1;
- break;
- }
- }
- if( pOp->p1>0 ) popStack(&pTos, cnt);
- break;
-}
-
-/* Opcode: NotNull P1 P2 *
-**
-** Jump to P2 if the top P1 values on the stack are all not NULL. Pop the
-** stack if P1 times if P1 is greater than zero. If P1 is less than
-** zero then leave the stack unchanged.
-*/
-case OP_NotNull: {
- int i, cnt;
- cnt = pOp->p1;
- if( cnt<0 ) cnt = -cnt;
- assert( &pTos[1-cnt] >= p->aStack );
- for(i=0; i<cnt && (pTos[1+i-cnt].flags & MEM_Null)==0; i++){}
- if( i>=cnt ) pc = pOp->p2-1;
- if( pOp->p1>0 ) popStack(&pTos, cnt);
- break;
-}
-
-/* Opcode: MakeRecord P1 P2 *
-**
-** Convert the top P1 entries of the stack into a single entry
-** suitable for use as a data record in a database table. The
-** details of the format are irrelavant as long as the OP_Column
-** opcode can decode the record later. Refer to source code
-** comments for the details of the record format.
-**
-** If P2 is true (non-zero) and one or more of the P1 entries
-** that go into building the record is NULL, then add some extra
-** bytes to the record to make it distinct for other entries created
-** during the same run of the VDBE. The extra bytes added are a
-** counter that is reset with each run of the VDBE, so records
-** created this way will not necessarily be distinct across runs.
-** But they should be distinct for transient tables (created using
-** OP_OpenTemp) which is what they are intended for.
-**
-** (Later:) The P2==1 option was intended to make NULLs distinct
-** for the UNION operator. But I have since discovered that NULLs
-** are indistinct for UNION. So this option is never used.
-*/
-case OP_MakeRecord: {
- char *zNewRecord;
- int nByte;
- int nField;
- int i, j;
- int idxWidth;
- u32 addr;
- Mem *pRec;
- int addUnique = 0; /* True to cause bytes to be added to make the
- ** generated record distinct */
- char zTemp[NBFS]; /* Temp space for small records */
-
- /* Assuming the record contains N fields, the record format looks
- ** like this:
- **
- ** -------------------------------------------------------------------
- ** | idx0 | idx1 | ... | idx(N-1) | idx(N) | data0 | ... | data(N-1) |
- ** -------------------------------------------------------------------
- **
- ** All data fields are converted to strings before being stored and
- ** are stored with their null terminators. NULL entries omit the
- ** null terminator. Thus an empty string uses 1 byte and a NULL uses
- ** zero bytes. Data(0) is taken from the lowest element of the stack
- ** and data(N-1) is the top of the stack.
- **
- ** Each of the idx() entries is either 1, 2, or 3 bytes depending on
- ** how big the total record is. Idx(0) contains the offset to the start
- ** of data(0). Idx(k) contains the offset to the start of data(k).
- ** Idx(N) contains the total number of bytes in the record.
- */
- nField = pOp->p1;
- pRec = &pTos[1-nField];
- assert( pRec>=p->aStack );
- nByte = 0;
- for(i=0; i<nField; i++, pRec++){
- if( pRec->flags & MEM_Null ){
- addUnique = pOp->p2;
- }else{
- Stringify(pRec);
- nByte += pRec->n;
- }
- }
- if( addUnique ) nByte += sizeof(p->uniqueCnt);
- if( nByte + nField + 1 < 256 ){
- idxWidth = 1;
- }else if( nByte + 2*nField + 2 < 65536 ){
- idxWidth = 2;
- }else{
- idxWidth = 3;
- }
- nByte += idxWidth*(nField + 1);
- if( nByte>MAX_BYTES_PER_ROW ){
- rc = SQLITE_TOOBIG;
- goto abort_due_to_error;
- }
- if( nByte<=NBFS ){
- zNewRecord = zTemp;
- }else{
- zNewRecord = sqliteMallocRaw( nByte );
- if( zNewRecord==0 ) goto no_mem;
- }
- j = 0;
- addr = idxWidth*(nField+1) + addUnique*sizeof(p->uniqueCnt);
- for(i=0, pRec=&pTos[1-nField]; i<nField; i++, pRec++){
- zNewRecord[j++] = addr & 0xff;
- if( idxWidth>1 ){
- zNewRecord[j++] = (addr>>8)&0xff;
- if( idxWidth>2 ){
- zNewRecord[j++] = (addr>>16)&0xff;
- }
- }
- if( (pRec->flags & MEM_Null)==0 ){
- addr += pRec->n;
- }
- }
- zNewRecord[j++] = addr & 0xff;
- if( idxWidth>1 ){
- zNewRecord[j++] = (addr>>8)&0xff;
- if( idxWidth>2 ){
- zNewRecord[j++] = (addr>>16)&0xff;
- }
- }
- if( addUnique ){
- memcpy(&zNewRecord[j], &p->uniqueCnt, sizeof(p->uniqueCnt));
- p->uniqueCnt++;
- j += sizeof(p->uniqueCnt);
- }
- for(i=0, pRec=&pTos[1-nField]; i<nField; i++, pRec++){
- if( (pRec->flags & MEM_Null)==0 ){
- memcpy(&zNewRecord[j], pRec->z, pRec->n);
- j += pRec->n;
- }
- }
- popStack(&pTos, nField);
- pTos++;
- pTos->n = nByte;
- if( nByte<=NBFS ){
- assert( zNewRecord==zTemp );
- memcpy(pTos->zShort, zTemp, nByte);
- pTos->z = pTos->zShort;
- pTos->flags = MEM_Str | MEM_Short;
- }else{
- assert( zNewRecord!=zTemp );
- pTos->z = zNewRecord;
- pTos->flags = MEM_Str | MEM_Dyn;
- }
- break;
-}
-
-/* Opcode: MakeKey P1 P2 P3
-**
-** Convert the top P1 entries of the stack into a single entry suitable
-** for use as the key in an index. The top P1 records are
-** converted to strings and merged. The null-terminators
-** are retained and used as separators.
-** The lowest entry in the stack is the first field and the top of the
-** stack becomes the last.
-**
-** If P2 is not zero, then the original entries remain on the stack
-** and the new key is pushed on top. If P2 is zero, the original
-** data is popped off the stack first then the new key is pushed
-** back in its place.
-**
-** P3 is a string that is P1 characters long. Each character is either
-** an 'n' or a 't' to indicates if the argument should be intepreted as
-** numeric or text type. The first character of P3 corresponds to the
-** lowest element on the stack. If P3 is NULL then all arguments are
-** assumed to be of the numeric type.
-**
-** The type makes a difference in that text-type fields may not be
-** introduced by 'b' (as described in the next paragraph). The
-** first character of a text-type field must be either 'a' (if it is NULL)
-** or 'c'. Numeric fields will be introduced by 'b' if their content
-** looks like a well-formed number. Otherwise the 'a' or 'c' will be
-** used.
-**
-** The key is a concatenation of fields. Each field is terminated by
-** a single 0x00 character. A NULL field is introduced by an 'a' and
-** is followed immediately by its 0x00 terminator. A numeric field is
-** introduced by a single character 'b' and is followed by a sequence
-** of characters that represent the number such that a comparison of
-** the character string using memcpy() sorts the numbers in numerical
-** order. The character strings for numbers are generated using the
-** sqliteRealToSortable() function. A text field is introduced by a
-** 'c' character and is followed by the exact text of the field. The
-** use of an 'a', 'b', or 'c' character at the beginning of each field
-** guarantees that NULLs sort before numbers and that numbers sort
-** before text. 0x00 characters do not occur except as separators
-** between fields.
-**
-** See also: MakeIdxKey, SortMakeKey
-*/
-/* Opcode: MakeIdxKey P1 P2 P3
-**
-** Convert the top P1 entries of the stack into a single entry suitable
-** for use as the key in an index. In addition, take one additional integer
-** off of the stack, treat that integer as a four-byte record number, and
-** append the four bytes to the key. Thus a total of P1+1 entries are
-** popped from the stack for this instruction and a single entry is pushed
-** back. The first P1 entries that are popped are strings and the last
-** entry (the lowest on the stack) is an integer record number.
-**
-** The converstion of the first P1 string entries occurs just like in
-** MakeKey. Each entry is separated from the others by a null.
-** The entire concatenation is null-terminated. The lowest entry
-** in the stack is the first field and the top of the stack becomes the
-** last.
-**
-** If P2 is not zero and one or more of the P1 entries that go into the
-** generated key is NULL, then jump to P2 after the new key has been
-** pushed on the stack. In other words, jump to P2 if the key is
-** guaranteed to be unique. This jump can be used to skip a subsequent
-** uniqueness test.
-**
-** P3 is a string that is P1 characters long. Each character is either
-** an 'n' or a 't' to indicates if the argument should be numeric or
-** text. The first character corresponds to the lowest element on the
-** stack. If P3 is null then all arguments are assumed to be numeric.
-**
-** See also: MakeKey, SortMakeKey
-*/
-case OP_MakeIdxKey:
-case OP_MakeKey: {
- char *zNewKey;
- int nByte;
- int nField;
- int addRowid;
- int i, j;
- int containsNull = 0;
- Mem *pRec;
- char zTemp[NBFS];
-
- addRowid = pOp->opcode==OP_MakeIdxKey;
- nField = pOp->p1;
- pRec = &pTos[1-nField];
- assert( pRec>=p->aStack );
- nByte = 0;
- for(j=0, i=0; i<nField; i++, j++, pRec++){
- int flags = pRec->flags;
- int len;
- char *z;
- if( flags & MEM_Null ){
- nByte += 2;
- containsNull = 1;
- }else if( pOp->p3 && pOp->p3[j]=='t' ){
- Stringify(pRec);
- pRec->flags &= ~(MEM_Int|MEM_Real);
- nByte += pRec->n+1;
- }else if( (flags & (MEM_Real|MEM_Int))!=0 || sqliteIsNumber(pRec->z) ){
- if( (flags & (MEM_Real|MEM_Int))==MEM_Int ){
- pRec->r = pRec->i;
- }else if( (flags & (MEM_Real|MEM_Int))==0 ){
- pRec->r = sqliteAtoF(pRec->z, 0);
- }
- Release(pRec);
- z = pRec->zShort;
- sqliteRealToSortable(pRec->r, z);
- len = strlen(z);
- pRec->z = 0;
- pRec->flags = MEM_Real;
- pRec->n = len+1;
- nByte += pRec->n+1;
- }else{
- nByte += pRec->n+1;
- }
- }
- if( nByte+sizeof(u32)>MAX_BYTES_PER_ROW ){
- rc = SQLITE_TOOBIG;
- goto abort_due_to_error;
- }
- if( addRowid ) nByte += sizeof(u32);
- if( nByte<=NBFS ){
- zNewKey = zTemp;
- }else{
- zNewKey = sqliteMallocRaw( nByte );
- if( zNewKey==0 ) goto no_mem;
- }
- j = 0;
- pRec = &pTos[1-nField];
- for(i=0; i<nField; i++, pRec++){
- if( pRec->flags & MEM_Null ){
- zNewKey[j++] = 'a';
- zNewKey[j++] = 0;
- }else if( pRec->flags==MEM_Real ){
- zNewKey[j++] = 'b';
- memcpy(&zNewKey[j], pRec->zShort, pRec->n);
- j += pRec->n;
- }else{
- assert( pRec->flags & MEM_Str );
- zNewKey[j++] = 'c';
- memcpy(&zNewKey[j], pRec->z, pRec->n);
- j += pRec->n;
- }
- }
- if( addRowid ){
- u32 iKey;
- pRec = &pTos[-nField];
- assert( pRec>=p->aStack );
- Integerify(pRec);
- iKey = intToKey(pRec->i);
- memcpy(&zNewKey[j], &iKey, sizeof(u32));
- popStack(&pTos, nField+1);
- if( pOp->p2 && containsNull ) pc = pOp->p2 - 1;
- }else{
- if( pOp->p2==0 ) popStack(&pTos, nField);
- }
- pTos++;
- pTos->n = nByte;
- if( nByte<=NBFS ){
- assert( zNewKey==zTemp );
- pTos->z = pTos->zShort;
- memcpy(pTos->zShort, zTemp, nByte);
- pTos->flags = MEM_Str | MEM_Short;
- }else{
- pTos->z = zNewKey;
- pTos->flags = MEM_Str | MEM_Dyn;
- }
- break;
-}
-
-/* Opcode: IncrKey * * *
-**
-** The top of the stack should contain an index key generated by
-** The MakeKey opcode. This routine increases the least significant
-** byte of that key by one. This is used so that the MoveTo opcode
-** will move to the first entry greater than the key rather than to
-** the key itself.
-*/
-case OP_IncrKey: {
- assert( pTos>=p->aStack );
- /* The IncrKey opcode is only applied to keys generated by
- ** MakeKey or MakeIdxKey and the results of those operands
- ** are always dynamic strings or zShort[] strings. So we
- ** are always free to modify the string in place.
- */
- assert( pTos->flags & (MEM_Dyn|MEM_Short) );
- pTos->z[pTos->n-1]++;
- break;
-}
-
-/* Opcode: Checkpoint P1 * *
-**
-** Begin a checkpoint. A checkpoint is the beginning of a operation that
-** is part of a larger transaction but which might need to be rolled back
-** itself without effecting the containing transaction. A checkpoint will
-** be automatically committed or rollback when the VDBE halts.
-**
-** The checkpoint is begun on the database file with index P1. The main
-** database file has an index of 0 and the file used for temporary tables
-** has an index of 1.
-*/
-case OP_Checkpoint: {
- int i = pOp->p1;
- if( i>=0 && i<db->nDb && db->aDb[i].pBt && db->aDb[i].inTrans==1 ){
- rc = sqliteBtreeBeginCkpt(db->aDb[i].pBt);
- if( rc==SQLITE_OK ) db->aDb[i].inTrans = 2;
- }
- break;
-}
-
-/* Opcode: Transaction P1 * *
-**
-** Begin a transaction. The transaction ends when a Commit or Rollback
-** opcode is encountered. Depending on the ON CONFLICT setting, the
-** transaction might also be rolled back if an error is encountered.
-**
-** P1 is the index of the database file on which the transaction is
-** started. Index 0 is the main database file and index 1 is the
-** file used for temporary tables.
-**
-** A write lock is obtained on the database file when a transaction is
-** started. No other process can read or write the file while the
-** transaction is underway. Starting a transaction also creates a
-** rollback journal. A transaction must be started before any changes
-** can be made to the database.
-*/
-case OP_Transaction: {
- int busy = 1;
- int i = pOp->p1;
- assert( i>=0 && i<db->nDb );
- if( db->aDb[i].inTrans ) break;
- while( db->aDb[i].pBt!=0 && busy ){
- rc = sqliteBtreeBeginTrans(db->aDb[i].pBt);
- switch( rc ){
- case SQLITE_BUSY: {
- if( db->xBusyCallback==0 ){
- p->pc = pc;
- p->undoTransOnError = 1;
- p->rc = SQLITE_BUSY;
- p->pTos = pTos;
- return SQLITE_BUSY;
- }else if( (*db->xBusyCallback)(db->pBusyArg, "", busy++)==0 ){
- sqliteSetString(&p->zErrMsg, sqlite_error_string(rc), (char*)0);
- busy = 0;
- }
- break;
- }
- case SQLITE_READONLY: {
- rc = SQLITE_OK;
- /* Fall thru into the next case */
- }
- case SQLITE_OK: {
- p->inTempTrans = 0;
- busy = 0;
- break;
- }
- default: {
- goto abort_due_to_error;
- }
- }
- }
- db->aDb[i].inTrans = 1;
- p->undoTransOnError = 1;
- break;
-}
-
-/* Opcode: Commit * * *
-**
-** Cause all modifications to the database that have been made since the
-** last Transaction to actually take effect. No additional modifications
-** are allowed until another transaction is started. The Commit instruction
-** deletes the journal file and releases the write lock on the database.
-** A read lock continues to be held if there are still cursors open.
-*/
-case OP_Commit: {
- int i;
- if( db->xCommitCallback!=0 ){
- if( sqliteSafetyOff(db) ) goto abort_due_to_misuse;
- if( db->xCommitCallback(db->pCommitArg)!=0 ){
- rc = SQLITE_CONSTRAINT;
- }
- if( sqliteSafetyOn(db) ) goto abort_due_to_misuse;
- }
- for(i=0; rc==SQLITE_OK && i<db->nDb; i++){
- if( db->aDb[i].inTrans ){
- rc = sqliteBtreeCommit(db->aDb[i].pBt);
- db->aDb[i].inTrans = 0;
- }
- }
- if( rc==SQLITE_OK ){
- sqliteCommitInternalChanges(db);
- }else{
- sqliteRollbackAll(db);
- }
- break;
-}
-
-/* Opcode: Rollback P1 * *
-**
-** Cause all modifications to the database that have been made since the
-** last Transaction to be undone. The database is restored to its state
-** before the Transaction opcode was executed. No additional modifications
-** are allowed until another transaction is started.
-**
-** P1 is the index of the database file that is committed. An index of 0
-** is used for the main database and an index of 1 is used for the file used
-** to hold temporary tables.
-**
-** This instruction automatically closes all cursors and releases both
-** the read and write locks on the indicated database.
-*/
-case OP_Rollback: {
- sqliteRollbackAll(db);
- break;
-}
-
-/* Opcode: ReadCookie P1 P2 *
-**
-** Read cookie number P2 from database P1 and push it onto the stack.
-** P2==0 is the schema version. P2==1 is the database format.
-** P2==2 is the recommended pager cache size, and so forth. P1==0 is
-** the main database file and P1==1 is the database file used to store
-** temporary tables.
-**
-** There must be a read-lock on the database (either a transaction
-** must be started or there must be an open cursor) before
-** executing this instruction.
-*/
-case OP_ReadCookie: {
- int aMeta[SQLITE_N_BTREE_META];
- assert( pOp->p2<SQLITE_N_BTREE_META );
- assert( pOp->p1>=0 && pOp->p1<db->nDb );
- assert( db->aDb[pOp->p1].pBt!=0 );
- rc = sqliteBtreeGetMeta(db->aDb[pOp->p1].pBt, aMeta);
- pTos++;
- pTos->i = aMeta[1+pOp->p2];
- pTos->flags = MEM_Int;
- break;
-}
-
-/* Opcode: SetCookie P1 P2 *
-**
-** Write the top of the stack into cookie number P2 of database P1.
-** P2==0 is the schema version. P2==1 is the database format.
-** P2==2 is the recommended pager cache size, and so forth. P1==0 is
-** the main database file and P1==1 is the database file used to store
-** temporary tables.
-**
-** A transaction must be started before executing this opcode.
-*/
-case OP_SetCookie: {
- int aMeta[SQLITE_N_BTREE_META];
- assert( pOp->p2<SQLITE_N_BTREE_META );
- assert( pOp->p1>=0 && pOp->p1<db->nDb );
- assert( db->aDb[pOp->p1].pBt!=0 );
- assert( pTos>=p->aStack );
- Integerify(pTos)
- rc = sqliteBtreeGetMeta(db->aDb[pOp->p1].pBt, aMeta);
- if( rc==SQLITE_OK ){
- aMeta[1+pOp->p2] = pTos->i;
- rc = sqliteBtreeUpdateMeta(db->aDb[pOp->p1].pBt, aMeta);
- }
- Release(pTos);
- pTos--;
- break;
-}
-
-/* Opcode: VerifyCookie P1 P2 *
-**
-** Check the value of global database parameter number 0 (the
-** schema version) and make sure it is equal to P2.
-** P1 is the database number which is 0 for the main database file
-** and 1 for the file holding temporary tables and some higher number
-** for auxiliary databases.
-**
-** The cookie changes its value whenever the database schema changes.
-** This operation is used to detect when that the cookie has changed
-** and that the current process needs to reread the schema.
-**
-** Either a transaction needs to have been started or an OP_Open needs
-** to be executed (to establish a read lock) before this opcode is
-** invoked.
-*/
-case OP_VerifyCookie: {
- int aMeta[SQLITE_N_BTREE_META];
- assert( pOp->p1>=0 && pOp->p1<db->nDb );
- rc = sqliteBtreeGetMeta(db->aDb[pOp->p1].pBt, aMeta);
- if( rc==SQLITE_OK && aMeta[1]!=pOp->p2 ){
- sqliteSetString(&p->zErrMsg, "database schema has changed", (char*)0);
- rc = SQLITE_SCHEMA;
- }
- break;
-}
-
-/* Opcode: OpenRead P1 P2 P3
-**
-** Open a read-only cursor for the database table whose root page is
-** P2 in a database file. The database file is determined by an
-** integer from the top of the stack. 0 means the main database and
-** 1 means the database used for temporary tables. Give the new
-** cursor an identifier of P1. The P1 values need not be contiguous
-** but all P1 values should be small integers. It is an error for
-** P1 to be negative.
-**
-** If P2==0 then take the root page number from the next of the stack.
-**
-** There will be a read lock on the database whenever there is an
-** open cursor. If the database was unlocked prior to this instruction
-** then a read lock is acquired as part of this instruction. A read
-** lock allows other processes to read the database but prohibits
-** any other process from modifying the database. The read lock is
-** released when all cursors are closed. If this instruction attempts
-** to get a read lock but fails, the script terminates with an
-** SQLITE_BUSY error code.
-**
-** The P3 value is the name of the table or index being opened.
-** The P3 value is not actually used by this opcode and may be
-** omitted. But the code generator usually inserts the index or
-** table name into P3 to make the code easier to read.
-**
-** See also OpenWrite.
-*/
-/* Opcode: OpenWrite P1 P2 P3
-**
-** Open a read/write cursor named P1 on the table or index whose root
-** page is P2. If P2==0 then take the root page number from the stack.
-**
-** The P3 value is the name of the table or index being opened.
-** The P3 value is not actually used by this opcode and may be
-** omitted. But the code generator usually inserts the index or
-** table name into P3 to make the code easier to read.
-**
-** This instruction works just like OpenRead except that it opens the cursor
-** in read/write mode. For a given table, there can be one or more read-only
-** cursors or a single read/write cursor but not both.
-**
-** See also OpenRead.
-*/
-case OP_OpenRead:
-case OP_OpenWrite: {
- int busy = 0;
- int i = pOp->p1;
- int p2 = pOp->p2;
- int wrFlag;
- Btree *pX;
- int iDb;
-
- assert( pTos>=p->aStack );
- Integerify(pTos);
- iDb = pTos->i;
- pTos--;
- assert( iDb>=0 && iDb<db->nDb );
- pX = db->aDb[iDb].pBt;
- assert( pX!=0 );
- wrFlag = pOp->opcode==OP_OpenWrite;
- if( p2<=0 ){
- assert( pTos>=p->aStack );
- Integerify(pTos);
- p2 = pTos->i;
- pTos--;
- if( p2<2 ){
- sqliteSetString(&p->zErrMsg, "root page number less than 2", (char*)0);
- rc = SQLITE_INTERNAL;
- break;
- }
- }
- assert( i>=0 );
- if( expandCursorArraySize(p, i) ) goto no_mem;
- sqliteVdbeCleanupCursor(&p->aCsr[i]);
- memset(&p->aCsr[i], 0, sizeof(Cursor));
- p->aCsr[i].nullRow = 1;
- if( pX==0 ) break;
- do{
- rc = sqliteBtreeCursor(pX, p2, wrFlag, &p->aCsr[i].pCursor);
- switch( rc ){
- case SQLITE_BUSY: {
- if( db->xBusyCallback==0 ){
- p->pc = pc;
- p->rc = SQLITE_BUSY;
- p->pTos = &pTos[1 + (pOp->p2<=0)]; /* Operands must remain on stack */
- return SQLITE_BUSY;
- }else if( (*db->xBusyCallback)(db->pBusyArg, pOp->p3, ++busy)==0 ){
- sqliteSetString(&p->zErrMsg, sqlite_error_string(rc), (char*)0);
- busy = 0;
- }
- break;
- }
- case SQLITE_OK: {
- busy = 0;
- break;
- }
- default: {
- goto abort_due_to_error;
- }
- }
- }while( busy );
- break;
-}
-
-/* Opcode: OpenTemp P1 P2 *
-**
-** Open a new cursor to a transient table.
-** The transient cursor is always opened read/write even if
-** the main database is read-only. The transient table is deleted
-** automatically when the cursor is closed.
-**
-** The cursor points to a BTree table if P2==0 and to a BTree index
-** if P2==1. A BTree table must have an integer key and can have arbitrary
-** data. A BTree index has no data but can have an arbitrary key.
-**
-** This opcode is used for tables that exist for the duration of a single
-** SQL statement only. Tables created using CREATE TEMPORARY TABLE
-** are opened using OP_OpenRead or OP_OpenWrite. "Temporary" in the
-** context of this opcode means for the duration of a single SQL statement
-** whereas "Temporary" in the context of CREATE TABLE means for the duration
-** of the connection to the database. Same word; different meanings.
-*/
-case OP_OpenTemp: {
- int i = pOp->p1;
- Cursor *pCx;
- assert( i>=0 );
- if( expandCursorArraySize(p, i) ) goto no_mem;
- pCx = &p->aCsr[i];
- sqliteVdbeCleanupCursor(pCx);
- memset(pCx, 0, sizeof(*pCx));
- pCx->nullRow = 1;
- rc = sqliteBtreeFactory(db, 0, 1, TEMP_PAGES, &pCx->pBt);
-
- if( rc==SQLITE_OK ){
- rc = sqliteBtreeBeginTrans(pCx->pBt);
- }
- if( rc==SQLITE_OK ){
- if( pOp->p2 ){
- int pgno;
- rc = sqliteBtreeCreateIndex(pCx->pBt, &pgno);
- if( rc==SQLITE_OK ){
- rc = sqliteBtreeCursor(pCx->pBt, pgno, 1, &pCx->pCursor);
- }
- }else{
- rc = sqliteBtreeCursor(pCx->pBt, 2, 1, &pCx->pCursor);
- }
- }
- break;
-}
-
-/* Opcode: OpenPseudo P1 * *
-**
-** Open a new cursor that points to a fake table that contains a single
-** row of data. Any attempt to write a second row of data causes the
-** first row to be deleted. All data is deleted when the cursor is
-** closed.
-**
-** A pseudo-table created by this opcode is useful for holding the
-** NEW or OLD tables in a trigger.
-*/
-case OP_OpenPseudo: {
- int i = pOp->p1;
- Cursor *pCx;
- assert( i>=0 );
- if( expandCursorArraySize(p, i) ) goto no_mem;
- pCx = &p->aCsr[i];
- sqliteVdbeCleanupCursor(pCx);
- memset(pCx, 0, sizeof(*pCx));
- pCx->nullRow = 1;
- pCx->pseudoTable = 1;
- break;
-}
-
-/* Opcode: Close P1 * *
-**
-** Close a cursor previously opened as P1. If P1 is not
-** currently open, this instruction is a no-op.
-*/
-case OP_Close: {
- int i = pOp->p1;
- if( i>=0 && i<p->nCursor ){
- sqliteVdbeCleanupCursor(&p->aCsr[i]);
- }
- break;
-}
-
-/* Opcode: MoveTo P1 P2 *
-**
-** Pop the top of the stack and use its value as a key. Reposition
-** cursor P1 so that it points to an entry with a matching key. If
-** the table contains no record with a matching key, then the cursor
-** is left pointing at the first record that is greater than the key.
-** If there are no records greater than the key and P2 is not zero,
-** then an immediate jump to P2 is made.
-**
-** See also: Found, NotFound, Distinct, MoveLt
-*/
-/* Opcode: MoveLt P1 P2 *
-**
-** Pop the top of the stack and use its value as a key. Reposition
-** cursor P1 so that it points to the entry with the largest key that is
-** less than the key popped from the stack.
-** If there are no records less than than the key and P2
-** is not zero then an immediate jump to P2 is made.
-**
-** See also: MoveTo
-*/
-case OP_MoveLt:
-case OP_MoveTo: {
- int i = pOp->p1;
- Cursor *pC;
-
- assert( pTos>=p->aStack );
- assert( i>=0 && i<p->nCursor );
- pC = &p->aCsr[i];
- if( pC->pCursor!=0 ){
- int res, oc;
- pC->nullRow = 0;
- if( pTos->flags & MEM_Int ){
- int iKey = intToKey(pTos->i);
- if( pOp->p2==0 && pOp->opcode==OP_MoveTo ){
- pC->movetoTarget = iKey;
- pC->deferredMoveto = 1;
- Release(pTos);
- pTos--;
- break;
- }
- sqliteBtreeMoveto(pC->pCursor, (char*)&iKey, sizeof(int), &res);
- pC->lastRecno = pTos->i;
- pC->recnoIsValid = res==0;
- }else{
- Stringify(pTos);
- sqliteBtreeMoveto(pC->pCursor, pTos->z, pTos->n, &res);
- pC->recnoIsValid = 0;
- }
- pC->deferredMoveto = 0;
- sqlite_search_count++;
- oc = pOp->opcode;
- if( oc==OP_MoveTo && res<0 ){
- sqliteBtreeNext(pC->pCursor, &res);
- pC->recnoIsValid = 0;
- if( res && pOp->p2>0 ){
- pc = pOp->p2 - 1;
- }
- }else if( oc==OP_MoveLt ){
- if( res>=0 ){
- sqliteBtreePrevious(pC->pCursor, &res);
- pC->recnoIsValid = 0;
- }else{
- /* res might be negative because the table is empty. Check to
- ** see if this is the case.
- */
- int keysize;
- res = sqliteBtreeKeySize(pC->pCursor,&keysize)!=0 || keysize==0;
- }
- if( res && pOp->p2>0 ){
- pc = pOp->p2 - 1;
- }
- }
- }
- Release(pTos);
- pTos--;
- break;
-}
-
-/* Opcode: Distinct P1 P2 *
-**
-** Use the top of the stack as a string key. If a record with that key does
-** not exist in the table of cursor P1, then jump to P2. If the record
-** does already exist, then fall thru. The cursor is left pointing
-** at the record if it exists. The key is not popped from the stack.
-**
-** This operation is similar to NotFound except that this operation
-** does not pop the key from the stack.
-**
-** See also: Found, NotFound, MoveTo, IsUnique, NotExists
-*/
-/* Opcode: Found P1 P2 *
-**
-** Use the top of the stack as a string key. If a record with that key
-** does exist in table of P1, then jump to P2. If the record
-** does not exist, then fall thru. The cursor is left pointing
-** to the record if it exists. The key is popped from the stack.
-**
-** See also: Distinct, NotFound, MoveTo, IsUnique, NotExists
-*/
-/* Opcode: NotFound P1 P2 *
-**
-** Use the top of the stack as a string key. If a record with that key
-** does not exist in table of P1, then jump to P2. If the record
-** does exist, then fall thru. The cursor is left pointing to the
-** record if it exists. The key is popped from the stack.
-**
-** The difference between this operation and Distinct is that
-** Distinct does not pop the key from the stack.
-**
-** See also: Distinct, Found, MoveTo, NotExists, IsUnique
-*/
-case OP_Distinct:
-case OP_NotFound:
-case OP_Found: {
- int i = pOp->p1;
- int alreadyExists = 0;
- Cursor *pC;
- assert( pTos>=p->aStack );
- assert( i>=0 && i<p->nCursor );
- if( (pC = &p->aCsr[i])->pCursor!=0 ){
- int res, rx;
- Stringify(pTos);
- rx = sqliteBtreeMoveto(pC->pCursor, pTos->z, pTos->n, &res);
- alreadyExists = rx==SQLITE_OK && res==0;
- pC->deferredMoveto = 0;
- }
- if( pOp->opcode==OP_Found ){
- if( alreadyExists ) pc = pOp->p2 - 1;
- }else{
- if( !alreadyExists ) pc = pOp->p2 - 1;
- }
- if( pOp->opcode!=OP_Distinct ){
- Release(pTos);
- pTos--;
- }
- break;
-}
-
-/* Opcode: IsUnique P1 P2 *
-**
-** The top of the stack is an integer record number. Call this
-** record number R. The next on the stack is an index key created
-** using MakeIdxKey. Call it K. This instruction pops R from the
-** stack but it leaves K unchanged.
-**
-** P1 is an index. So all but the last four bytes of K are an
-** index string. The last four bytes of K are a record number.
-**
-** This instruction asks if there is an entry in P1 where the
-** index string matches K but the record number is different
-** from R. If there is no such entry, then there is an immediate
-** jump to P2. If any entry does exist where the index string
-** matches K but the record number is not R, then the record
-** number for that entry is pushed onto the stack and control
-** falls through to the next instruction.
-**
-** See also: Distinct, NotFound, NotExists, Found
-*/
-case OP_IsUnique: {
- int i = pOp->p1;
- Mem *pNos = &pTos[-1];
- BtCursor *pCrsr;
- int R;
-
- /* Pop the value R off the top of the stack
- */
- assert( pNos>=p->aStack );
- Integerify(pTos);
- R = pTos->i;
- pTos--;
- assert( i>=0 && i<=p->nCursor );
- if( (pCrsr = p->aCsr[i].pCursor)!=0 ){
- int res, rc;
- int v; /* The record number on the P1 entry that matches K */
- char *zKey; /* The value of K */
- int nKey; /* Number of bytes in K */
-
- /* Make sure K is a string and make zKey point to K
- */
- Stringify(pNos);
- zKey = pNos->z;
- nKey = pNos->n;
- assert( nKey >= 4 );
-
- /* Search for an entry in P1 where all but the last four bytes match K.
- ** If there is no such entry, jump immediately to P2.
- */
- assert( p->aCsr[i].deferredMoveto==0 );
- rc = sqliteBtreeMoveto(pCrsr, zKey, nKey-4, &res);
- if( rc!=SQLITE_OK ) goto abort_due_to_error;
- if( res<0 ){
- rc = sqliteBtreeNext(pCrsr, &res);
- if( res ){
- pc = pOp->p2 - 1;
- break;
- }
- }
- rc = sqliteBtreeKeyCompare(pCrsr, zKey, nKey-4, 4, &res);
- if( rc!=SQLITE_OK ) goto abort_due_to_error;
- if( res>0 ){
- pc = pOp->p2 - 1;
- break;
- }
-
- /* At this point, pCrsr is pointing to an entry in P1 where all but
- ** the last for bytes of the key match K. Check to see if the last
- ** four bytes of the key are different from R. If the last four
- ** bytes equal R then jump immediately to P2.
- */
- sqliteBtreeKey(pCrsr, nKey - 4, 4, (char*)&v);
- v = keyToInt(v);
- if( v==R ){
- pc = pOp->p2 - 1;
- break;
- }
-
- /* The last four bytes of the key are different from R. Convert the
- ** last four bytes of the key into an integer and push it onto the
- ** stack. (These bytes are the record number of an entry that
- ** violates a UNIQUE constraint.)
- */
- pTos++;
- pTos->i = v;
- pTos->flags = MEM_Int;
- }
- break;
-}
-
-/* Opcode: NotExists P1 P2 *
-**
-** Use the top of the stack as a integer key. If a record with that key
-** does not exist in table of P1, then jump to P2. If the record
-** does exist, then fall thru. The cursor is left pointing to the
-** record if it exists. The integer key is popped from the stack.
-**
-** The difference between this operation and NotFound is that this
-** operation assumes the key is an integer and NotFound assumes it
-** is a string.
-**
-** See also: Distinct, Found, MoveTo, NotFound, IsUnique
-*/
-case OP_NotExists: {
- int i = pOp->p1;
- BtCursor *pCrsr;
- assert( pTos>=p->aStack );
- assert( i>=0 && i<p->nCursor );
- if( (pCrsr = p->aCsr[i].pCursor)!=0 ){
- int res, rx, iKey;
- assert( pTos->flags & MEM_Int );
- iKey = intToKey(pTos->i);
- rx = sqliteBtreeMoveto(pCrsr, (char*)&iKey, sizeof(int), &res);
- p->aCsr[i].lastRecno = pTos->i;
- p->aCsr[i].recnoIsValid = res==0;
- p->aCsr[i].nullRow = 0;
- if( rx!=SQLITE_OK || res!=0 ){
- pc = pOp->p2 - 1;
- p->aCsr[i].recnoIsValid = 0;
- }
- }
- Release(pTos);
- pTos--;
- break;
-}
-
-/* Opcode: NewRecno P1 * *
-**
-** Get a new integer record number used as the key to a table.
-** The record number is not previously used as a key in the database
-** table that cursor P1 points to. The new record number is pushed
-** onto the stack.
-*/
-case OP_NewRecno: {
- int i = pOp->p1;
- int v = 0;
- Cursor *pC;
- assert( i>=0 && i<p->nCursor );
- if( (pC = &p->aCsr[i])->pCursor==0 ){
- v = 0;
- }else{
- /* The next rowid or record number (different terms for the same
- ** thing) is obtained in a two-step algorithm.
- **
- ** First we attempt to find the largest existing rowid and add one
- ** to that. But if the largest existing rowid is already the maximum
- ** positive integer, we have to fall through to the second
- ** probabilistic algorithm
- **
- ** The second algorithm is to select a rowid at random and see if
- ** it already exists in the table. If it does not exist, we have
- ** succeeded. If the random rowid does exist, we select a new one
- ** and try again, up to 1000 times.
- **
- ** For a table with less than 2 billion entries, the probability
- ** of not finding a unused rowid is about 1.0e-300. This is a
- ** non-zero probability, but it is still vanishingly small and should
- ** never cause a problem. You are much, much more likely to have a
- ** hardware failure than for this algorithm to fail.
- **
- ** The analysis in the previous paragraph assumes that you have a good
- ** source of random numbers. Is a library function like lrand48()
- ** good enough? Maybe. Maybe not. It's hard to know whether there
- ** might be subtle bugs is some implementations of lrand48() that
- ** could cause problems. To avoid uncertainty, SQLite uses its own
- ** random number generator based on the RC4 algorithm.
- **
- ** To promote locality of reference for repetitive inserts, the
- ** first few attempts at chosing a random rowid pick values just a little
- ** larger than the previous rowid. This has been shown experimentally
- ** to double the speed of the COPY operation.
- */
- int res, rx, cnt, x;
- cnt = 0;
- if( !pC->useRandomRowid ){
- if( pC->nextRowidValid ){
- v = pC->nextRowid;
- }else{
- rx = sqliteBtreeLast(pC->pCursor, &res);
- if( res ){
- v = 1;
- }else{
- sqliteBtreeKey(pC->pCursor, 0, sizeof(v), (void*)&v);
- v = keyToInt(v);
- if( v==0x7fffffff ){
- pC->useRandomRowid = 1;
- }else{
- v++;
- }
- }
- }
- if( v<0x7fffffff ){
- pC->nextRowidValid = 1;
- pC->nextRowid = v+1;
- }else{
- pC->nextRowidValid = 0;
- }
- }
- if( pC->useRandomRowid ){
- v = db->priorNewRowid;
- cnt = 0;
- do{
- if( v==0 || cnt>2 ){
- sqliteRandomness(sizeof(v), &v);
- if( cnt<5 ) v &= 0xffffff;
- }else{
- unsigned char r;
- sqliteRandomness(1, &r);
- v += r + 1;
- }
- if( v==0 ) continue;
- x = intToKey(v);
- rx = sqliteBtreeMoveto(pC->pCursor, &x, sizeof(int), &res);
- cnt++;
- }while( cnt<1000 && rx==SQLITE_OK && res==0 );
- db->priorNewRowid = v;
- if( rx==SQLITE_OK && res==0 ){
- rc = SQLITE_FULL;
- goto abort_due_to_error;
- }
- }
- pC->recnoIsValid = 0;
- pC->deferredMoveto = 0;
- }
- pTos++;
- pTos->i = v;
- pTos->flags = MEM_Int;
- break;
-}
-
-/* Opcode: PutIntKey P1 P2 *
-**
-** Write an entry into the table of cursor P1. A new entry is
-** created if it doesn't already exist or the data for an existing
-** entry is overwritten. The data is the value on the top of the
-** stack. The key is the next value down on the stack. The key must
-** be an integer. The stack is popped twice by this instruction.
-**
-** If the OPFLAG_NCHANGE flag of P2 is set, then the row change count is
-** incremented (otherwise not). If the OPFLAG_CSCHANGE flag is set,
-** then the current statement change count is incremented (otherwise not).
-** If the OPFLAG_LASTROWID flag of P2 is set, then rowid is
-** stored for subsequent return by the sqlite_last_insert_rowid() function
-** (otherwise it's unmodified).
-*/
-/* Opcode: PutStrKey P1 * *
-**
-** Write an entry into the table of cursor P1. A new entry is
-** created if it doesn't already exist or the data for an existing
-** entry is overwritten. The data is the value on the top of the
-** stack. The key is the next value down on the stack. The key must
-** be a string. The stack is popped twice by this instruction.
-**
-** P1 may not be a pseudo-table opened using the OpenPseudo opcode.
-*/
-case OP_PutIntKey:
-case OP_PutStrKey: {
- Mem *pNos = &pTos[-1];
- int i = pOp->p1;
- Cursor *pC;
- assert( pNos>=p->aStack );
- assert( i>=0 && i<p->nCursor );
- if( ((pC = &p->aCsr[i])->pCursor!=0 || pC->pseudoTable) ){
- char *zKey;
- int nKey, iKey;
- if( pOp->opcode==OP_PutStrKey ){
- Stringify(pNos);
- nKey = pNos->n;
- zKey = pNos->z;
- }else{
- assert( pNos->flags & MEM_Int );
- nKey = sizeof(int);
- iKey = intToKey(pNos->i);
- zKey = (char*)&iKey;
- if( pOp->p2 & OPFLAG_NCHANGE ) db->nChange++;
- if( pOp->p2 & OPFLAG_LASTROWID ) db->lastRowid = pNos->i;
- if( pOp->p2 & OPFLAG_CSCHANGE ) db->csChange++;
- if( pC->nextRowidValid && pTos->i>=pC->nextRowid ){
- pC->nextRowidValid = 0;
- }
- }
- if( pTos->flags & MEM_Null ){
- pTos->z = 0;
- pTos->n = 0;
- }else{
- assert( pTos->flags & MEM_Str );
- }
- if( pC->pseudoTable ){
- /* PutStrKey does not work for pseudo-tables.
- ** The following assert makes sure we are not trying to use
- ** PutStrKey on a pseudo-table
- */
- assert( pOp->opcode==OP_PutIntKey );
- sqliteFree(pC->pData);
- pC->iKey = iKey;
- pC->nData = pTos->n;
- if( pTos->flags & MEM_Dyn ){
- pC->pData = pTos->z;
- pTos->flags = MEM_Null;
- }else{
- pC->pData = sqliteMallocRaw( pC->nData );
- if( pC->pData ){
- memcpy(pC->pData, pTos->z, pC->nData);
- }
- }
- pC->nullRow = 0;
- }else{
- rc = sqliteBtreeInsert(pC->pCursor, zKey, nKey, pTos->z, pTos->n);
- }
- pC->recnoIsValid = 0;
- pC->deferredMoveto = 0;
- }
- popStack(&pTos, 2);
- break;
-}
-
-/* Opcode: Delete P1 P2 *
-**
-** Delete the record at which the P1 cursor is currently pointing.
-**
-** The cursor will be left pointing at either the next or the previous
-** record in the table. If it is left pointing at the next record, then
-** the next Next instruction will be a no-op. Hence it is OK to delete
-** a record from within an Next loop.
-**
-** If the OPFLAG_NCHANGE flag of P2 is set, then the row change count is
-** incremented (otherwise not). If OPFLAG_CSCHANGE flag is set,
-** then the current statement change count is incremented (otherwise not).
-**
-** If P1 is a pseudo-table, then this instruction is a no-op.
-*/
-case OP_Delete: {
- int i = pOp->p1;
- Cursor *pC;
- assert( i>=0 && i<p->nCursor );
- pC = &p->aCsr[i];
- if( pC->pCursor!=0 ){
- sqliteVdbeCursorMoveto(pC);
- rc = sqliteBtreeDelete(pC->pCursor);
- pC->nextRowidValid = 0;
- }
- if( pOp->p2 & OPFLAG_NCHANGE ) db->nChange++;
- if( pOp->p2 & OPFLAG_CSCHANGE ) db->csChange++;
- break;
-}
-
-/* Opcode: SetCounts * * *
-**
-** Called at end of statement. Updates lsChange (last statement change count)
-** and resets csChange (current statement change count) to 0.
-*/
-case OP_SetCounts: {
- db->lsChange=db->csChange;
- db->csChange=0;
- break;
-}
-
-/* Opcode: KeyAsData P1 P2 *
-**
-** Turn the key-as-data mode for cursor P1 either on (if P2==1) or
-** off (if P2==0). In key-as-data mode, the OP_Column opcode pulls
-** data off of the key rather than the data. This is used for
-** processing compound selects.
-*/
-case OP_KeyAsData: {
- int i = pOp->p1;
- assert( i>=0 && i<p->nCursor );
- p->aCsr[i].keyAsData = pOp->p2;
- break;
-}
-
-/* Opcode: RowData P1 * *
-**
-** Push onto the stack the complete row data for cursor P1.
-** There is no interpretation of the data. It is just copied
-** onto the stack exactly as it is found in the database file.
-**
-** If the cursor is not pointing to a valid row, a NULL is pushed
-** onto the stack.
-*/
-/* Opcode: RowKey P1 * *
-**
-** Push onto the stack the complete row key for cursor P1.
-** There is no interpretation of the key. It is just copied
-** onto the stack exactly as it is found in the database file.
-**
-** If the cursor is not pointing to a valid row, a NULL is pushed
-** onto the stack.
-*/
-case OP_RowKey:
-case OP_RowData: {
- int i = pOp->p1;
- Cursor *pC;
- int n;
-
- pTos++;
- assert( i>=0 && i<p->nCursor );
- pC = &p->aCsr[i];
- if( pC->nullRow ){
- pTos->flags = MEM_Null;
- }else if( pC->pCursor!=0 ){
- BtCursor *pCrsr = pC->pCursor;
- sqliteVdbeCursorMoveto(pC);
- if( pC->nullRow ){
- pTos->flags = MEM_Null;
- break;
- }else if( pC->keyAsData || pOp->opcode==OP_RowKey ){
- sqliteBtreeKeySize(pCrsr, &n);
- }else{
- sqliteBtreeDataSize(pCrsr, &n);
- }
- pTos->n = n;
- if( n<=NBFS ){
- pTos->flags = MEM_Str | MEM_Short;
- pTos->z = pTos->zShort;
- }else{
- char *z = sqliteMallocRaw( n );
- if( z==0 ) goto no_mem;
- pTos->flags = MEM_Str | MEM_Dyn;
- pTos->z = z;
- }
- if( pC->keyAsData || pOp->opcode==OP_RowKey ){
- sqliteBtreeKey(pCrsr, 0, n, pTos->z);
- }else{
- sqliteBtreeData(pCrsr, 0, n, pTos->z);
- }
- }else if( pC->pseudoTable ){
- pTos->n = pC->nData;
- pTos->z = pC->pData;
- pTos->flags = MEM_Str|MEM_Ephem;
- }else{
- pTos->flags = MEM_Null;
- }
- break;
-}
-
-/* Opcode: Column P1 P2 *
-**
-** Interpret the data that cursor P1 points to as
-** a structure built using the MakeRecord instruction.
-** (See the MakeRecord opcode for additional information about
-** the format of the data.)
-** Push onto the stack the value of the P2-th column contained
-** in the data.
-**
-** If the KeyAsData opcode has previously executed on this cursor,
-** then the field might be extracted from the key rather than the
-** data.
-**
-** If P1 is negative, then the record is stored on the stack rather
-** than in a table. For P1==-1, the top of the stack is used.
-** For P1==-2, the next on the stack is used. And so forth. The
-** value pushed is always just a pointer into the record which is
-** stored further down on the stack. The column value is not copied.
-*/
-case OP_Column: {
- int amt, offset, end, payloadSize;
- int i = pOp->p1;
- int p2 = pOp->p2;
- Cursor *pC;
- char *zRec;
- BtCursor *pCrsr;
- int idxWidth;
- unsigned char aHdr[10];
-
- assert( i<p->nCursor );
- pTos++;
- if( i<0 ){
- assert( &pTos[i]>=p->aStack );
- assert( pTos[i].flags & MEM_Str );
- zRec = pTos[i].z;
- payloadSize = pTos[i].n;
- }else if( (pC = &p->aCsr[i])->pCursor!=0 ){
- sqliteVdbeCursorMoveto(pC);
- zRec = 0;
- pCrsr = pC->pCursor;
- if( pC->nullRow ){
- payloadSize = 0;
- }else if( pC->keyAsData ){
- sqliteBtreeKeySize(pCrsr, &payloadSize);
- }else{
- sqliteBtreeDataSize(pCrsr, &payloadSize);
- }
- }else if( pC->pseudoTable ){
- payloadSize = pC->nData;
- zRec = pC->pData;
- assert( payloadSize==0 || zRec!=0 );
- }else{
- payloadSize = 0;
- }
-
- /* Figure out how many bytes in the column data and where the column
- ** data begins.
- */
- if( payloadSize==0 ){
- pTos->flags = MEM_Null;
- break;
- }else if( payloadSize<256 ){
- idxWidth = 1;
- }else if( payloadSize<65536 ){
- idxWidth = 2;
- }else{
- idxWidth = 3;
- }
-
- /* Figure out where the requested column is stored and how big it is.
- */
- if( payloadSize < idxWidth*(p2+1) ){
- rc = SQLITE_CORRUPT;
- goto abort_due_to_error;
- }
- if( zRec ){
- memcpy(aHdr, &zRec[idxWidth*p2], idxWidth*2);
- }else if( pC->keyAsData ){
- sqliteBtreeKey(pCrsr, idxWidth*p2, idxWidth*2, (char*)aHdr);
- }else{
- sqliteBtreeData(pCrsr, idxWidth*p2, idxWidth*2, (char*)aHdr);
- }
- offset = aHdr[0];
- end = aHdr[idxWidth];
- if( idxWidth>1 ){
- offset |= aHdr[1]<<8;
- end |= aHdr[idxWidth+1]<<8;
- if( idxWidth>2 ){
- offset |= aHdr[2]<<16;
- end |= aHdr[idxWidth+2]<<16;
- }
- }
- amt = end - offset;
- if( amt<0 || offset<0 || end>payloadSize ){
- rc = SQLITE_CORRUPT;
- goto abort_due_to_error;
- }
-
- /* amt and offset now hold the offset to the start of data and the
- ** amount of data. Go get the data and put it on the stack.
- */
- pTos->n = amt;
- if( amt==0 ){
- pTos->flags = MEM_Null;
- }else if( zRec ){
- pTos->flags = MEM_Str | MEM_Ephem;
- pTos->z = &zRec[offset];
- }else{
- if( amt<=NBFS ){
- pTos->flags = MEM_Str | MEM_Short;
- pTos->z = pTos->zShort;
- }else{
- char *z = sqliteMallocRaw( amt );
- if( z==0 ) goto no_mem;
- pTos->flags = MEM_Str | MEM_Dyn;
- pTos->z = z;
- }
- if( pC->keyAsData ){
- sqliteBtreeKey(pCrsr, offset, amt, pTos->z);
- }else{
- sqliteBtreeData(pCrsr, offset, amt, pTos->z);
- }
- }
- break;
-}
-
-/* Opcode: Recno P1 * *
-**
-** Push onto the stack an integer which is the first 4 bytes of the
-** the key to the current entry in a sequential scan of the database
-** file P1. The sequential scan should have been started using the
-** Next opcode.
-*/
-case OP_Recno: {
- int i = pOp->p1;
- Cursor *pC;
- int v;
-
- assert( i>=0 && i<p->nCursor );
- pC = &p->aCsr[i];
- sqliteVdbeCursorMoveto(pC);
- pTos++;
- if( pC->recnoIsValid ){
- v = pC->lastRecno;
- }else if( pC->pseudoTable ){
- v = keyToInt(pC->iKey);
- }else if( pC->nullRow || pC->pCursor==0 ){
- pTos->flags = MEM_Null;
- break;
- }else{
- assert( pC->pCursor!=0 );
- sqliteBtreeKey(pC->pCursor, 0, sizeof(u32), (char*)&v);
- v = keyToInt(v);
- }
- pTos->i = v;
- pTos->flags = MEM_Int;
- break;
-}
-
-/* Opcode: FullKey P1 * *
-**
-** Extract the complete key from the record that cursor P1 is currently
-** pointing to and push the key onto the stack as a string.
-**
-** Compare this opcode to Recno. The Recno opcode extracts the first
-** 4 bytes of the key and pushes those bytes onto the stack as an
-** integer. This instruction pushes the entire key as a string.
-**
-** This opcode may not be used on a pseudo-table.
-*/
-case OP_FullKey: {
- int i = pOp->p1;
- BtCursor *pCrsr;
-
- assert( p->aCsr[i].keyAsData );
- assert( !p->aCsr[i].pseudoTable );
- assert( i>=0 && i<p->nCursor );
- pTos++;
- if( (pCrsr = p->aCsr[i].pCursor)!=0 ){
- int amt;
- char *z;
-
- sqliteVdbeCursorMoveto(&p->aCsr[i]);
- sqliteBtreeKeySize(pCrsr, &amt);
- if( amt<=0 ){
- rc = SQLITE_CORRUPT;
- goto abort_due_to_error;
- }
- if( amt>NBFS ){
- z = sqliteMallocRaw( amt );
- if( z==0 ) goto no_mem;
- pTos->flags = MEM_Str | MEM_Dyn;
- }else{
- z = pTos->zShort;
- pTos->flags = MEM_Str | MEM_Short;
- }
- sqliteBtreeKey(pCrsr, 0, amt, z);
- pTos->z = z;
- pTos->n = amt;
- }
- break;
-}
-
-/* Opcode: NullRow P1 * *
-**
-** Move the cursor P1 to a null row. Any OP_Column operations
-** that occur while the cursor is on the null row will always push
-** a NULL onto the stack.
-*/
-case OP_NullRow: {
- int i = pOp->p1;
-
- assert( i>=0 && i<p->nCursor );
- p->aCsr[i].nullRow = 1;
- p->aCsr[i].recnoIsValid = 0;
- break;
-}
-
-/* Opcode: Last P1 P2 *
-**
-** The next use of the Recno or Column or Next instruction for P1
-** will refer to the last entry in the database table or index.
-** If the table or index is empty and P2>0, then jump immediately to P2.
-** If P2 is 0 or if the table or index is not empty, fall through
-** to the following instruction.
-*/
-case OP_Last: {
- int i = pOp->p1;
- Cursor *pC;
- BtCursor *pCrsr;
-
- assert( i>=0 && i<p->nCursor );
- pC = &p->aCsr[i];
- if( (pCrsr = pC->pCursor)!=0 ){
- int res;
- rc = sqliteBtreeLast(pCrsr, &res);
- pC->nullRow = res;
- pC->deferredMoveto = 0;
- if( res && pOp->p2>0 ){
- pc = pOp->p2 - 1;
- }
- }else{
- pC->nullRow = 0;
- }
- break;
-}
-
-/* Opcode: Rewind P1 P2 *
-**
-** The next use of the Recno or Column or Next instruction for P1
-** will refer to the first entry in the database table or index.
-** If the table or index is empty and P2>0, then jump immediately to P2.
-** If P2 is 0 or if the table or index is not empty, fall through
-** to the following instruction.
-*/
-case OP_Rewind: {
- int i = pOp->p1;
- Cursor *pC;
- BtCursor *pCrsr;
-
- assert( i>=0 && i<p->nCursor );
- pC = &p->aCsr[i];
- if( (pCrsr = pC->pCursor)!=0 ){
- int res;
- rc = sqliteBtreeFirst(pCrsr, &res);
- pC->atFirst = res==0;
- pC->nullRow = res;
- pC->deferredMoveto = 0;
- if( res && pOp->p2>0 ){
- pc = pOp->p2 - 1;
- }
- }else{
- pC->nullRow = 0;
- }
- break;
-}
-
-/* Opcode: Next P1 P2 *
-**
-** Advance cursor P1 so that it points to the next key/data pair in its
-** table or index. If there are no more key/value pairs then fall through
-** to the following instruction. But if the cursor advance was successful,
-** jump immediately to P2.
-**
-** See also: Prev
-*/
-/* Opcode: Prev P1 P2 *
-**
-** Back up cursor P1 so that it points to the previous key/data pair in its
-** table or index. If there is no previous key/value pairs then fall through
-** to the following instruction. But if the cursor backup was successful,
-** jump immediately to P2.
-*/
-case OP_Prev:
-case OP_Next: {
- Cursor *pC;
- BtCursor *pCrsr;
-
- CHECK_FOR_INTERRUPT;
- assert( pOp->p1>=0 && pOp->p1<p->nCursor );
- pC = &p->aCsr[pOp->p1];
- if( (pCrsr = pC->pCursor)!=0 ){
- int res;
- if( pC->nullRow ){
- res = 1;
- }else{
- assert( pC->deferredMoveto==0 );
- rc = pOp->opcode==OP_Next ? sqliteBtreeNext(pCrsr, &res) :
- sqliteBtreePrevious(pCrsr, &res);
- pC->nullRow = res;
- }
- if( res==0 ){
- pc = pOp->p2 - 1;
- sqlite_search_count++;
- }
- }else{
- pC->nullRow = 1;
- }
- pC->recnoIsValid = 0;
- break;
-}
-
-/* Opcode: IdxPut P1 P2 P3
-**
-** The top of the stack holds a SQL index key made using the
-** MakeIdxKey instruction. This opcode writes that key into the
-** index P1. Data for the entry is nil.
-**
-** If P2==1, then the key must be unique. If the key is not unique,
-** the program aborts with a SQLITE_CONSTRAINT error and the database
-** is rolled back. If P3 is not null, then it becomes part of the
-** error message returned with the SQLITE_CONSTRAINT.
-*/
-case OP_IdxPut: {
- int i = pOp->p1;
- BtCursor *pCrsr;
- assert( pTos>=p->aStack );
- assert( i>=0 && i<p->nCursor );
- assert( pTos->flags & MEM_Str );
- if( (pCrsr = p->aCsr[i].pCursor)!=0 ){
- int nKey = pTos->n;
- const char *zKey = pTos->z;
- if( pOp->p2 ){
- int res, n;
- assert( nKey >= 4 );
- rc = sqliteBtreeMoveto(pCrsr, zKey, nKey-4, &res);
- if( rc!=SQLITE_OK ) goto abort_due_to_error;
- while( res!=0 ){
- int c;
- sqliteBtreeKeySize(pCrsr, &n);
- if( n==nKey
- && sqliteBtreeKeyCompare(pCrsr, zKey, nKey-4, 4, &c)==SQLITE_OK
- && c==0
- ){
- rc = SQLITE_CONSTRAINT;
- if( pOp->p3 && pOp->p3[0] ){
- sqliteSetString(&p->zErrMsg, pOp->p3, (char*)0);
- }
- goto abort_due_to_error;
- }
- if( res<0 ){
- sqliteBtreeNext(pCrsr, &res);
- res = +1;
- }else{
- break;
- }
- }
- }
- rc = sqliteBtreeInsert(pCrsr, zKey, nKey, "", 0);
- assert( p->aCsr[i].deferredMoveto==0 );
- }
- Release(pTos);
- pTos--;
- break;
-}
-
-/* Opcode: IdxDelete P1 * *
-**
-** The top of the stack is an index key built using the MakeIdxKey opcode.
-** This opcode removes that entry from the index.
-*/
-case OP_IdxDelete: {
- int i = pOp->p1;
- BtCursor *pCrsr;
- assert( pTos>=p->aStack );
- assert( pTos->flags & MEM_Str );
- assert( i>=0 && i<p->nCursor );
- if( (pCrsr = p->aCsr[i].pCursor)!=0 ){
- int rx, res;
- rx = sqliteBtreeMoveto(pCrsr, pTos->z, pTos->n, &res);
- if( rx==SQLITE_OK && res==0 ){
- rc = sqliteBtreeDelete(pCrsr);
- }
- assert( p->aCsr[i].deferredMoveto==0 );
- }
- Release(pTos);
- pTos--;
- break;
-}
-
-/* Opcode: IdxRecno P1 * *
-**
-** Push onto the stack an integer which is the last 4 bytes of the
-** the key to the current entry in index P1. These 4 bytes should
-** be the record number of the table entry to which this index entry
-** points.
-**
-** See also: Recno, MakeIdxKey.
-*/
-case OP_IdxRecno: {
- int i = pOp->p1;
- BtCursor *pCrsr;
-
- assert( i>=0 && i<p->nCursor );
- pTos++;
- if( (pCrsr = p->aCsr[i].pCursor)!=0 ){
- int v;
- int sz;
- assert( p->aCsr[i].deferredMoveto==0 );
- sqliteBtreeKeySize(pCrsr, &sz);
- if( sz<sizeof(u32) ){
- pTos->flags = MEM_Null;
- }else{
- sqliteBtreeKey(pCrsr, sz - sizeof(u32), sizeof(u32), (char*)&v);
- v = keyToInt(v);
- pTos->i = v;
- pTos->flags = MEM_Int;
- }
- }else{
- pTos->flags = MEM_Null;
- }
- break;
-}
-
-/* Opcode: IdxGT P1 P2 *
-**
-** Compare the top of the stack against the key on the index entry that
-** cursor P1 is currently pointing to. Ignore the last 4 bytes of the
-** index entry. If the index entry is greater than the top of the stack
-** then jump to P2. Otherwise fall through to the next instruction.
-** In either case, the stack is popped once.
-*/
-/* Opcode: IdxGE P1 P2 *
-**
-** Compare the top of the stack against the key on the index entry that
-** cursor P1 is currently pointing to. Ignore the last 4 bytes of the
-** index entry. If the index entry is greater than or equal to
-** the top of the stack
-** then jump to P2. Otherwise fall through to the next instruction.
-** In either case, the stack is popped once.
-*/
-/* Opcode: IdxLT P1 P2 *
-**
-** Compare the top of the stack against the key on the index entry that
-** cursor P1 is currently pointing to. Ignore the last 4 bytes of the
-** index entry. If the index entry is less than the top of the stack
-** then jump to P2. Otherwise fall through to the next instruction.
-** In either case, the stack is popped once.
-*/
-case OP_IdxLT:
-case OP_IdxGT:
-case OP_IdxGE: {
- int i= pOp->p1;
- BtCursor *pCrsr;
-
- assert( i>=0 && i<p->nCursor );
- assert( pTos>=p->aStack );
- if( (pCrsr = p->aCsr[i].pCursor)!=0 ){
- int res, rc;
-
- Stringify(pTos);
- assert( p->aCsr[i].deferredMoveto==0 );
- rc = sqliteBtreeKeyCompare(pCrsr, pTos->z, pTos->n, 4, &res);
- if( rc!=SQLITE_OK ){
- break;
- }
- if( pOp->opcode==OP_IdxLT ){
- res = -res;
- }else if( pOp->opcode==OP_IdxGE ){
- res++;
- }
- if( res>0 ){
- pc = pOp->p2 - 1 ;
- }
- }
- Release(pTos);
- pTos--;
- break;
-}
-
-/* Opcode: IdxIsNull P1 P2 *
-**
-** The top of the stack contains an index entry such as might be generated
-** by the MakeIdxKey opcode. This routine looks at the first P1 fields of
-** that key. If any of the first P1 fields are NULL, then a jump is made
-** to address P2. Otherwise we fall straight through.
-**
-** The index entry is always popped from the stack.
-*/
-case OP_IdxIsNull: {
- int i = pOp->p1;
- int k, n;
- const char *z;
-
- assert( pTos>=p->aStack );
- assert( pTos->flags & MEM_Str );
- z = pTos->z;
- n = pTos->n;
- for(k=0; k<n && i>0; i--){
- if( z[k]=='a' ){
- pc = pOp->p2-1;
- break;
- }
- while( k<n && z[k] ){ k++; }
- k++;
- }
- Release(pTos);
- pTos--;
- break;
-}
-
-/* Opcode: Destroy P1 P2 *
-**
-** Delete an entire database table or index whose root page in the database
-** file is given by P1.
-**
-** The table being destroyed is in the main database file if P2==0. If
-** P2==1 then the table to be clear is in the auxiliary database file
-** that is used to store tables create using CREATE TEMPORARY TABLE.
-**
-** See also: Clear
-*/
-case OP_Destroy: {
- rc = sqliteBtreeDropTable(db->aDb[pOp->p2].pBt, pOp->p1);
- break;
-}
-
-/* Opcode: Clear P1 P2 *
-**
-** Delete all contents of the database table or index whose root page
-** in the database file is given by P1. But, unlike Destroy, do not
-** remove the table or index from the database file.
-**
-** The table being clear is in the main database file if P2==0. If
-** P2==1 then the table to be clear is in the auxiliary database file
-** that is used to store tables create using CREATE TEMPORARY TABLE.
-**
-** See also: Destroy
-*/
-case OP_Clear: {
- rc = sqliteBtreeClearTable(db->aDb[pOp->p2].pBt, pOp->p1);
- break;
-}
-
-/* Opcode: CreateTable * P2 P3
-**
-** Allocate a new table in the main database file if P2==0 or in the
-** auxiliary database file if P2==1. Push the page number
-** for the root page of the new table onto the stack.
-**
-** The root page number is also written to a memory location that P3
-** points to. This is the mechanism is used to write the root page
-** number into the parser's internal data structures that describe the
-** new table.
-**
-** The difference between a table and an index is this: A table must
-** have a 4-byte integer key and can have arbitrary data. An index
-** has an arbitrary key but no data.
-**
-** See also: CreateIndex
-*/
-/* Opcode: CreateIndex * P2 P3
-**
-** Allocate a new index in the main database file if P2==0 or in the
-** auxiliary database file if P2==1. Push the page number of the
-** root page of the new index onto the stack.
-**
-** See documentation on OP_CreateTable for additional information.
-*/
-case OP_CreateIndex:
-case OP_CreateTable: {
- int pgno;
- assert( pOp->p3!=0 && pOp->p3type==P3_POINTER );
- assert( pOp->p2>=0 && pOp->p2<db->nDb );
- assert( db->aDb[pOp->p2].pBt!=0 );
- if( pOp->opcode==OP_CreateTable ){
- rc = sqliteBtreeCreateTable(db->aDb[pOp->p2].pBt, &pgno);
- }else{
- rc = sqliteBtreeCreateIndex(db->aDb[pOp->p2].pBt, &pgno);
- }
- pTos++;
- if( rc==SQLITE_OK ){
- pTos->i = pgno;
- pTos->flags = MEM_Int;
- *(u32*)pOp->p3 = pgno;
- pOp->p3 = 0;
- }else{
- pTos->flags = MEM_Null;
- }
- break;
-}
-
-/* Opcode: IntegrityCk P1 P2 *
-**
-** Do an analysis of the currently open database. Push onto the
-** stack the text of an error message describing any problems.
-** If there are no errors, push a "ok" onto the stack.
-**
-** P1 is the index of a set that contains the root page numbers
-** for all tables and indices in the main database file. The set
-** is cleared by this opcode. In other words, after this opcode
-** has executed, the set will be empty.
-**
-** If P2 is not zero, the check is done on the auxiliary database
-** file, not the main database file.
-**
-** This opcode is used for testing purposes only.
-*/
-case OP_IntegrityCk: {
- int nRoot;
- int *aRoot;
- int iSet = pOp->p1;
- Set *pSet;
- int j;
- HashElem *i;
- char *z;
-
- assert( iSet>=0 && iSet<p->nSet );
- pTos++;
- pSet = &p->aSet[iSet];
- nRoot = sqliteHashCount(&pSet->hash);
- aRoot = sqliteMallocRaw( sizeof(int)*(nRoot+1) );
- if( aRoot==0 ) goto no_mem;
- for(j=0, i=sqliteHashFirst(&pSet->hash); i; i=sqliteHashNext(i), j++){
- toInt((char*)sqliteHashKey(i), &aRoot[j]);
- }
- aRoot[j] = 0;
- sqliteHashClear(&pSet->hash);
- pSet->prev = 0;
- z = sqliteBtreeIntegrityCheck(db->aDb[pOp->p2].pBt, aRoot, nRoot);
- if( z==0 || z[0]==0 ){
- if( z ) sqliteFree(z);
- pTos->z = "ok";
- pTos->n = 3;
- pTos->flags = MEM_Str | MEM_Static;
- }else{
- pTos->z = z;
- pTos->n = strlen(z) + 1;
- pTos->flags = MEM_Str | MEM_Dyn;
- }
- sqliteFree(aRoot);
- break;
-}
-
-/* Opcode: ListWrite * * *
-**
-** Write the integer on the top of the stack
-** into the temporary storage list.
-*/
-case OP_ListWrite: {
- Keylist *pKeylist;
- assert( pTos>=p->aStack );
- pKeylist = p->pList;
- if( pKeylist==0 || pKeylist->nUsed>=pKeylist->nKey ){
- pKeylist = sqliteMallocRaw( sizeof(Keylist)+999*sizeof(pKeylist->aKey[0]) );
- if( pKeylist==0 ) goto no_mem;
- pKeylist->nKey = 1000;
- pKeylist->nRead = 0;
- pKeylist->nUsed = 0;
- pKeylist->pNext = p->pList;
- p->pList = pKeylist;
- }
- Integerify(pTos);
- pKeylist->aKey[pKeylist->nUsed++] = pTos->i;
- Release(pTos);
- pTos--;
- break;
-}
-
-/* Opcode: ListRewind * * *
-**
-** Rewind the temporary buffer back to the beginning.
-*/
-case OP_ListRewind: {
- /* What this opcode codes, really, is reverse the order of the
- ** linked list of Keylist structures so that they are read out
- ** in the same order that they were read in. */
- Keylist *pRev, *pTop;
- pRev = 0;
- while( p->pList ){
- pTop = p->pList;
- p->pList = pTop->pNext;
- pTop->pNext = pRev;
- pRev = pTop;
- }
- p->pList = pRev;
- break;
-}
-
-/* Opcode: ListRead * P2 *
-**
-** Attempt to read an integer from the temporary storage buffer
-** and push it onto the stack. If the storage buffer is empty,
-** push nothing but instead jump to P2.
-*/
-case OP_ListRead: {
- Keylist *pKeylist;
- CHECK_FOR_INTERRUPT;
- pKeylist = p->pList;
- if( pKeylist!=0 ){
- assert( pKeylist->nRead>=0 );
- assert( pKeylist->nRead<pKeylist->nUsed );
- assert( pKeylist->nRead<pKeylist->nKey );
- pTos++;
- pTos->i = pKeylist->aKey[pKeylist->nRead++];
- pTos->flags = MEM_Int;
- if( pKeylist->nRead>=pKeylist->nUsed ){
- p->pList = pKeylist->pNext;
- sqliteFree(pKeylist);
- }
- }else{
- pc = pOp->p2 - 1;
- }
- break;
-}
-
-/* Opcode: ListReset * * *
-**
-** Reset the temporary storage buffer so that it holds nothing.
-*/
-case OP_ListReset: {
- if( p->pList ){
- sqliteVdbeKeylistFree(p->pList);
- p->pList = 0;
- }
- break;
-}
-
-/* Opcode: ListPush * * *
-**
-** Save the current Vdbe list such that it can be restored by a ListPop
-** opcode. The list is empty after this is executed.
-*/
-case OP_ListPush: {
- p->keylistStackDepth++;
- assert(p->keylistStackDepth > 0);
- p->keylistStack = sqliteRealloc(p->keylistStack,
- sizeof(Keylist *) * p->keylistStackDepth);
- if( p->keylistStack==0 ) goto no_mem;
- p->keylistStack[p->keylistStackDepth - 1] = p->pList;
- p->pList = 0;
- break;
-}
-
-/* Opcode: ListPop * * *
-**
-** Restore the Vdbe list to the state it was in when ListPush was last
-** executed.
-*/
-case OP_ListPop: {
- assert(p->keylistStackDepth > 0);
- p->keylistStackDepth--;
- sqliteVdbeKeylistFree(p->pList);
- p->pList = p->keylistStack[p->keylistStackDepth];
- p->keylistStack[p->keylistStackDepth] = 0;
- if( p->keylistStackDepth == 0 ){
- sqliteFree(p->keylistStack);
- p->keylistStack = 0;
- }
- break;
-}
-
-/* Opcode: ContextPush * * *
-**
-** Save the current Vdbe context such that it can be restored by a ContextPop
-** opcode. The context stores the last insert row id, the last statement change
-** count, and the current statement change count.
-*/
-case OP_ContextPush: {
- p->contextStackDepth++;
- assert(p->contextStackDepth > 0);
- p->contextStack = sqliteRealloc(p->contextStack,
- sizeof(Context) * p->contextStackDepth);
- if( p->contextStack==0 ) goto no_mem;
- p->contextStack[p->contextStackDepth - 1].lastRowid = p->db->lastRowid;
- p->contextStack[p->contextStackDepth - 1].lsChange = p->db->lsChange;
- p->contextStack[p->contextStackDepth - 1].csChange = p->db->csChange;
- break;
-}
-
-/* Opcode: ContextPop * * *
-**
-** Restore the Vdbe context to the state it was in when contextPush was last
-** executed. The context stores the last insert row id, the last statement
-** change count, and the current statement change count.
-*/
-case OP_ContextPop: {
- assert(p->contextStackDepth > 0);
- p->contextStackDepth--;
- p->db->lastRowid = p->contextStack[p->contextStackDepth].lastRowid;
- p->db->lsChange = p->contextStack[p->contextStackDepth].lsChange;
- p->db->csChange = p->contextStack[p->contextStackDepth].csChange;
- if( p->contextStackDepth == 0 ){
- sqliteFree(p->contextStack);
- p->contextStack = 0;
- }
- break;
-}
-
-/* Opcode: SortPut * * *
-**
-** The TOS is the key and the NOS is the data. Pop both from the stack
-** and put them on the sorter. The key and data should have been
-** made using SortMakeKey and SortMakeRec, respectively.
-*/
-case OP_SortPut: {
- Mem *pNos = &pTos[-1];
- Sorter *pSorter;
- assert( pNos>=p->aStack );
- if( Dynamicify(pTos) || Dynamicify(pNos) ) goto no_mem;
- pSorter = sqliteMallocRaw( sizeof(Sorter) );
- if( pSorter==0 ) goto no_mem;
- pSorter->pNext = p->pSort;
- p->pSort = pSorter;
- assert( pTos->flags & MEM_Dyn );
- pSorter->nKey = pTos->n;
- pSorter->zKey = pTos->z;
- assert( pNos->flags & MEM_Dyn );
- pSorter->nData = pNos->n;
- pSorter->pData = pNos->z;
- pTos -= 2;
- break;
-}
-
-/* Opcode: SortMakeRec P1 * *
-**
-** The top P1 elements are the arguments to a callback. Form these
-** elements into a single data entry that can be stored on a sorter
-** using SortPut and later fed to a callback using SortCallback.
-*/
-case OP_SortMakeRec: {
- char *z;
- char **azArg;
- int nByte;
- int nField;
- int i;
- Mem *pRec;
-
- nField = pOp->p1;
- pRec = &pTos[1-nField];
- assert( pRec>=p->aStack );
- nByte = 0;
- for(i=0; i<nField; i++, pRec++){
- if( (pRec->flags & MEM_Null)==0 ){
- Stringify(pRec);
- nByte += pRec->n;
- }
- }
- nByte += sizeof(char*)*(nField+1);
- azArg = sqliteMallocRaw( nByte );
- if( azArg==0 ) goto no_mem;
- z = (char*)&azArg[nField+1];
- for(pRec=&pTos[1-nField], i=0; i<nField; i++, pRec++){
- if( pRec->flags & MEM_Null ){
- azArg[i] = 0;
- }else{
- azArg[i] = z;
- memcpy(z, pRec->z, pRec->n);
- z += pRec->n;
- }
- }
- popStack(&pTos, nField);
- pTos++;
- pTos->n = nByte;
- pTos->z = (char*)azArg;
- pTos->flags = MEM_Str | MEM_Dyn;
- break;
-}
-
-/* Opcode: SortMakeKey * * P3
-**
-** Convert the top few entries of the stack into a sort key. The
-** number of stack entries consumed is the number of characters in
-** the string P3. One character from P3 is prepended to each entry.
-** The first character of P3 is prepended to the element lowest in
-** the stack and the last character of P3 is prepended to the top of
-** the stack. All stack entries are separated by a \000 character
-** in the result. The whole key is terminated by two \000 characters
-** in a row.
-**
-** "N" is substituted in place of the P3 character for NULL values.
-**
-** See also the MakeKey and MakeIdxKey opcodes.
-*/
-case OP_SortMakeKey: {
- char *zNewKey;
- int nByte;
- int nField;
- int i, j, k;
- Mem *pRec;
-
- nField = strlen(pOp->p3);
- pRec = &pTos[1-nField];
- nByte = 1;
- for(i=0; i<nField; i++, pRec++){
- if( pRec->flags & MEM_Null ){
- nByte += 2;
- }else{
- Stringify(pRec);
- nByte += pRec->n+2;
- }
- }
- zNewKey = sqliteMallocRaw( nByte );
- if( zNewKey==0 ) goto no_mem;
- j = 0;
- k = 0;
- for(pRec=&pTos[1-nField], i=0; i<nField; i++, pRec++){
- if( pRec->flags & MEM_Null ){
- zNewKey[j++] = 'N';
- zNewKey[j++] = 0;
- k++;
- }else{
- zNewKey[j++] = pOp->p3[k++];
- memcpy(&zNewKey[j], pRec->z, pRec->n-1);
- j += pRec->n-1;
- zNewKey[j++] = 0;
- }
- }
- zNewKey[j] = 0;
- assert( j<nByte );
- popStack(&pTos, nField);
- pTos++;
- pTos->n = nByte;
- pTos->flags = MEM_Str|MEM_Dyn;
- pTos->z = zNewKey;
- break;
-}
-
-/* Opcode: Sort * * *
-**
-** Sort all elements on the sorter. The algorithm is a
-** mergesort.
-*/
-case OP_Sort: {
- int i;
- Sorter *pElem;
- Sorter *apSorter[NSORT];
- for(i=0; i<NSORT; i++){
- apSorter[i] = 0;
- }
- while( p->pSort ){
- pElem = p->pSort;
- p->pSort = pElem->pNext;
- pElem->pNext = 0;
- for(i=0; i<NSORT-1; i++){
- if( apSorter[i]==0 ){
- apSorter[i] = pElem;
- break;
- }else{
- pElem = Merge(apSorter[i], pElem);
- apSorter[i] = 0;
- }
- }
- if( i>=NSORT-1 ){
- apSorter[NSORT-1] = Merge(apSorter[NSORT-1],pElem);
- }
- }
- pElem = 0;
- for(i=0; i<NSORT; i++){
- pElem = Merge(apSorter[i], pElem);
- }
- p->pSort = pElem;
- break;
-}
-
-/* Opcode: SortNext * P2 *
-**
-** Push the data for the topmost element in the sorter onto the
-** stack, then remove the element from the sorter. If the sorter
-** is empty, push nothing on the stack and instead jump immediately
-** to instruction P2.
-*/
-case OP_SortNext: {
- Sorter *pSorter = p->pSort;
- CHECK_FOR_INTERRUPT;
- if( pSorter!=0 ){
- p->pSort = pSorter->pNext;
- pTos++;
- pTos->z = pSorter->pData;
- pTos->n = pSorter->nData;
- pTos->flags = MEM_Str|MEM_Dyn;
- sqliteFree(pSorter->zKey);
- sqliteFree(pSorter);
- }else{
- pc = pOp->p2 - 1;
- }
- break;
-}
-
-/* Opcode: SortCallback P1 * *
-**
-** The top of the stack contains a callback record built using
-** the SortMakeRec operation with the same P1 value as this
-** instruction. Pop this record from the stack and invoke the
-** callback on it.
-*/
-case OP_SortCallback: {
- assert( pTos>=p->aStack );
- assert( pTos->flags & MEM_Str );
- p->nCallback++;
- p->pc = pc+1;
- p->azResColumn = (char**)pTos->z;
- assert( p->nResColumn==pOp->p1 );
- p->popStack = 1;
- p->pTos = pTos;
- return SQLITE_ROW;
-}
-
-/* Opcode: SortReset * * *
-**
-** Remove any elements that remain on the sorter.
-*/
-case OP_SortReset: {
- sqliteVdbeSorterReset(p);
- break;
-}
-
-/* Opcode: FileOpen * * P3
-**
-** Open the file named by P3 for reading using the FileRead opcode.
-** If P3 is "stdin" then open standard input for reading.
-*/
-case OP_FileOpen: {
- assert( pOp->p3!=0 );
- if( p->pFile ){
- if( p->pFile!=stdin ) fclose(p->pFile);
- p->pFile = 0;
- }
- if( sqliteStrICmp(pOp->p3,"stdin")==0 ){
- p->pFile = stdin;
- }else{
- p->pFile = fopen(pOp->p3, "r");
- }
- if( p->pFile==0 ){
- sqliteSetString(&p->zErrMsg,"unable to open file: ", pOp->p3, (char*)0);
- rc = SQLITE_ERROR;
- }
- break;
-}
-
-/* Opcode: FileRead P1 P2 P3
-**
-** Read a single line of input from the open file (the file opened using
-** FileOpen). If we reach end-of-file, jump immediately to P2. If
-** we are able to get another line, split the line apart using P3 as
-** a delimiter. There should be P1 fields. If the input line contains
-** more than P1 fields, ignore the excess. If the input line contains
-** fewer than P1 fields, assume the remaining fields contain NULLs.
-**
-** Input ends if a line consists of just "\.". A field containing only
-** "\N" is a null field. The backslash \ character can be used be used
-** to escape newlines or the delimiter.
-*/
-case OP_FileRead: {
- int n, eol, nField, i, c, nDelim;
- char *zDelim, *z;
- CHECK_FOR_INTERRUPT;
- if( p->pFile==0 ) goto fileread_jump;
- nField = pOp->p1;
- if( nField<=0 ) goto fileread_jump;
- if( nField!=p->nField || p->azField==0 ){
- char **azField = sqliteRealloc(p->azField, sizeof(char*)*nField+1);
- if( azField==0 ){ goto no_mem; }
- p->azField = azField;
- p->nField = nField;
- }
- n = 0;
- eol = 0;
- while( eol==0 ){
- if( p->zLine==0 || n+200>p->nLineAlloc ){
- char *zLine;
- p->nLineAlloc = p->nLineAlloc*2 + 300;
- zLine = sqliteRealloc(p->zLine, p->nLineAlloc);
- if( zLine==0 ){
- p->nLineAlloc = 0;
- sqliteFree(p->zLine);
- p->zLine = 0;
- goto no_mem;
- }
- p->zLine = zLine;
- }
- if( vdbe_fgets(&p->zLine[n], p->nLineAlloc-n, p->pFile)==0 ){
- eol = 1;
- p->zLine[n] = 0;
- }else{
- int c;
- while( (c = p->zLine[n])!=0 ){
- if( c=='\\' ){
- if( p->zLine[n+1]==0 ) break;
- n += 2;
- }else if( c=='\n' ){
- p->zLine[n] = 0;
- eol = 1;
- break;
- }else{
- n++;
- }
- }
- }
- }
- if( n==0 ) goto fileread_jump;
- z = p->zLine;
- if( z[0]=='\\' && z[1]=='.' && z[2]==0 ){
- goto fileread_jump;
- }
- zDelim = pOp->p3;
- if( zDelim==0 ) zDelim = "\t";
- c = zDelim[0];
- nDelim = strlen(zDelim);
- p->azField[0] = z;
- for(i=1; *z!=0 && i<=nField; i++){
- int from, to;
- from = to = 0;
- if( z[0]=='\\' && z[1]=='N'
- && (z[2]==0 || strncmp(&z[2],zDelim,nDelim)==0) ){
- if( i<=nField ) p->azField[i-1] = 0;
- z += 2 + nDelim;
- if( i<nField ) p->azField[i] = z;
- continue;
- }
- while( z[from] ){
- if( z[from]=='\\' && z[from+1]!=0 ){
- int tx = z[from+1];
- switch( tx ){
- case 'b': tx = '\b'; break;
- case 'f': tx = '\f'; break;
- case 'n': tx = '\n'; break;
- case 'r': tx = '\r'; break;
- case 't': tx = '\t'; break;
- case 'v': tx = '\v'; break;
- default: break;
- }
- z[to++] = tx;
- from += 2;
- continue;
- }
- if( z[from]==c && strncmp(&z[from],zDelim,nDelim)==0 ) break;
- z[to++] = z[from++];
- }
- if( z[from] ){
- z[to] = 0;
- z += from + nDelim;
- if( i<nField ) p->azField[i] = z;
- }else{
- z[to] = 0;
- z = "";
- }
- }
- while( i<nField ){
- p->azField[i++] = 0;
- }
- break;
-
- /* If we reach end-of-file, or if anything goes wrong, jump here.
- ** This code will cause a jump to P2 */
-fileread_jump:
- pc = pOp->p2 - 1;
- break;
-}
-
-/* Opcode: FileColumn P1 * *
-**
-** Push onto the stack the P1-th column of the most recently read line
-** from the input file.
-*/
-case OP_FileColumn: {
- int i = pOp->p1;
- char *z;
- assert( i>=0 && i<p->nField );
- if( p->azField ){
- z = p->azField[i];
- }else{
- z = 0;
- }
- pTos++;
- if( z ){
- pTos->n = strlen(z) + 1;
- pTos->z = z;
- pTos->flags = MEM_Str | MEM_Ephem;
- }else{
- pTos->flags = MEM_Null;
- }
- break;
-}
-
-/* Opcode: MemStore P1 P2 *
-**
-** Write the top of the stack into memory location P1.
-** P1 should be a small integer since space is allocated
-** for all memory locations between 0 and P1 inclusive.
-**
-** After the data is stored in the memory location, the
-** stack is popped once if P2 is 1. If P2 is zero, then
-** the original data remains on the stack.
-*/
-case OP_MemStore: {
- int i = pOp->p1;
- Mem *pMem;
- assert( pTos>=p->aStack );
- if( i>=p->nMem ){
- int nOld = p->nMem;
- Mem *aMem;
- p->nMem = i + 5;
- aMem = sqliteRealloc(p->aMem, p->nMem*sizeof(p->aMem[0]));
- if( aMem==0 ) goto no_mem;
- if( aMem!=p->aMem ){
- int j;
- for(j=0; j<nOld; j++){
- if( aMem[j].flags & MEM_Short ){
- aMem[j].z = aMem[j].zShort;
- }
- }
- }
- p->aMem = aMem;
- if( nOld<p->nMem ){
- memset(&p->aMem[nOld], 0, sizeof(p->aMem[0])*(p->nMem-nOld));
- }
- }
- Deephemeralize(pTos);
- pMem = &p->aMem[i];
- Release(pMem);
- *pMem = *pTos;
- if( pMem->flags & MEM_Dyn ){
- if( pOp->p2 ){
- pTos->flags = MEM_Null;
- }else{
- pMem->z = sqliteMallocRaw( pMem->n );
- if( pMem->z==0 ) goto no_mem;
- memcpy(pMem->z, pTos->z, pMem->n);
- }
- }else if( pMem->flags & MEM_Short ){
- pMem->z = pMem->zShort;
- }
- if( pOp->p2 ){
- Release(pTos);
- pTos--;
- }
- break;
-}
-
-/* Opcode: MemLoad P1 * *
-**
-** Push a copy of the value in memory location P1 onto the stack.
-**
-** If the value is a string, then the value pushed is a pointer to
-** the string that is stored in the memory location. If the memory
-** location is subsequently changed (using OP_MemStore) then the
-** value pushed onto the stack will change too.
-*/
-case OP_MemLoad: {
- int i = pOp->p1;
- assert( i>=0 && i<p->nMem );
- pTos++;
- memcpy(pTos, &p->aMem[i], sizeof(pTos[0])-NBFS);;
- if( pTos->flags & MEM_Str ){
- pTos->flags |= MEM_Ephem;
- pTos->flags &= ~(MEM_Dyn|MEM_Static|MEM_Short);
- }
- break;
-}
-
-/* Opcode: MemIncr P1 P2 *
-**
-** Increment the integer valued memory cell P1 by 1. If P2 is not zero
-** and the result after the increment is greater than zero, then jump
-** to P2.
-**
-** This instruction throws an error if the memory cell is not initially
-** an integer.
-*/
-case OP_MemIncr: {
- int i = pOp->p1;
- Mem *pMem;
- assert( i>=0 && i<p->nMem );
- pMem = &p->aMem[i];
- assert( pMem->flags==MEM_Int );
- pMem->i++;
- if( pOp->p2>0 && pMem->i>0 ){
- pc = pOp->p2 - 1;
- }
- break;
-}
-
-/* Opcode: AggReset * P2 *
-**
-** Reset the aggregator so that it no longer contains any data.
-** Future aggregator elements will contain P2 values each.
-*/
-case OP_AggReset: {
- sqliteVdbeAggReset(&p->agg);
- p->agg.nMem = pOp->p2;
- p->agg.apFunc = sqliteMalloc( p->agg.nMem*sizeof(p->agg.apFunc[0]) );
- if( p->agg.apFunc==0 ) goto no_mem;
- break;
-}
-
-/* Opcode: AggInit * P2 P3
-**
-** Initialize the function parameters for an aggregate function.
-** The aggregate will operate out of aggregate column P2.
-** P3 is a pointer to the FuncDef structure for the function.
-*/
-case OP_AggInit: {
- int i = pOp->p2;
- assert( i>=0 && i<p->agg.nMem );
- p->agg.apFunc[i] = (FuncDef*)pOp->p3;
- break;
-}
-
-/* Opcode: AggFunc * P2 P3
-**
-** Execute the step function for an aggregate. The
-** function has P2 arguments. P3 is a pointer to the FuncDef
-** structure that specifies the function.
-**
-** The top of the stack must be an integer which is the index of
-** the aggregate column that corresponds to this aggregate function.
-** Ideally, this index would be another parameter, but there are
-** no free parameters left. The integer is popped from the stack.
-*/
-case OP_AggFunc: {
- int n = pOp->p2;
- int i;
- Mem *pMem, *pRec;
- char **azArgv = p->zArgv;
- sqlite_func ctx;
-
- assert( n>=0 );
- assert( pTos->flags==MEM_Int );
- pRec = &pTos[-n];
- assert( pRec>=p->aStack );
- for(i=0; i<n; i++, pRec++){
- if( pRec->flags & MEM_Null ){
- azArgv[i] = 0;
- }else{
- Stringify(pRec);
- azArgv[i] = pRec->z;
- }
- }
- i = pTos->i;
- assert( i>=0 && i<p->agg.nMem );
- ctx.pFunc = (FuncDef*)pOp->p3;
- pMem = &p->agg.pCurrent->aMem[i];
- ctx.s.z = pMem->zShort; /* Space used for small aggregate contexts */
- ctx.pAgg = pMem->z;
- ctx.cnt = ++pMem->i;
- ctx.isError = 0;
- ctx.isStep = 1;
- (ctx.pFunc->xStep)(&ctx, n, (const char**)azArgv);
- pMem->z = ctx.pAgg;
- pMem->flags = MEM_AggCtx;
- popStack(&pTos, n+1);
- if( ctx.isError ){
- rc = SQLITE_ERROR;
- }
- break;
-}
-
-/* Opcode: AggFocus * P2 *
-**
-** Pop the top of the stack and use that as an aggregator key. If
-** an aggregator with that same key already exists, then make the
-** aggregator the current aggregator and jump to P2. If no aggregator
-** with the given key exists, create one and make it current but
-** do not jump.
-**
-** The order of aggregator opcodes is important. The order is:
-** AggReset AggFocus AggNext. In other words, you must execute
-** AggReset first, then zero or more AggFocus operations, then
-** zero or more AggNext operations. You must not execute an AggFocus
-** in between an AggNext and an AggReset.
-*/
-case OP_AggFocus: {
- AggElem *pElem;
- char *zKey;
- int nKey;
-
- assert( pTos>=p->aStack );
- Stringify(pTos);
- zKey = pTos->z;
- nKey = pTos->n;
- pElem = sqliteHashFind(&p->agg.hash, zKey, nKey);
- if( pElem ){
- p->agg.pCurrent = pElem;
- pc = pOp->p2 - 1;
- }else{
- AggInsert(&p->agg, zKey, nKey);
- if( sqlite_malloc_failed ) goto no_mem;
- }
- Release(pTos);
- pTos--;
- break;
-}
-
-/* Opcode: AggSet * P2 *
-**
-** Move the top of the stack into the P2-th field of the current
-** aggregate. String values are duplicated into new memory.
-*/
-case OP_AggSet: {
- AggElem *pFocus = AggInFocus(p->agg);
- Mem *pMem;
- int i = pOp->p2;
- assert( pTos>=p->aStack );
- if( pFocus==0 ) goto no_mem;
- assert( i>=0 && i<p->agg.nMem );
- Deephemeralize(pTos);
- pMem = &pFocus->aMem[i];
- Release(pMem);
- *pMem = *pTos;
- if( pMem->flags & MEM_Dyn ){
- pTos->flags = MEM_Null;
- }else if( pMem->flags & MEM_Short ){
- pMem->z = pMem->zShort;
- }
- Release(pTos);
- pTos--;
- break;
-}
-
-/* Opcode: AggGet * P2 *
-**
-** Push a new entry onto the stack which is a copy of the P2-th field
-** of the current aggregate. Strings are not duplicated so
-** string values will be ephemeral.
-*/
-case OP_AggGet: {
- AggElem *pFocus = AggInFocus(p->agg);
- Mem *pMem;
- int i = pOp->p2;
- if( pFocus==0 ) goto no_mem;
- assert( i>=0 && i<p->agg.nMem );
- pTos++;
- pMem = &pFocus->aMem[i];
- *pTos = *pMem;
- if( pTos->flags & MEM_Str ){
- pTos->flags &= ~(MEM_Dyn|MEM_Static|MEM_Short);
- pTos->flags |= MEM_Ephem;
- }
- break;
-}
-
-/* Opcode: AggNext * P2 *
-**
-** Make the next aggregate value the current aggregate. The prior
-** aggregate is deleted. If all aggregate values have been consumed,
-** jump to P2.
-**
-** The order of aggregator opcodes is important. The order is:
-** AggReset AggFocus AggNext. In other words, you must execute
-** AggReset first, then zero or more AggFocus operations, then
-** zero or more AggNext operations. You must not execute an AggFocus
-** in between an AggNext and an AggReset.
-*/
-case OP_AggNext: {
- CHECK_FOR_INTERRUPT;
- if( p->agg.pSearch==0 ){
- p->agg.pSearch = sqliteHashFirst(&p->agg.hash);
- }else{
- p->agg.pSearch = sqliteHashNext(p->agg.pSearch);
- }
- if( p->agg.pSearch==0 ){
- pc = pOp->p2 - 1;
- } else {
- int i;
- sqlite_func ctx;
- Mem *aMem;
- p->agg.pCurrent = sqliteHashData(p->agg.pSearch);
- aMem = p->agg.pCurrent->aMem;
- for(i=0; i<p->agg.nMem; i++){
- int freeCtx;
- if( p->agg.apFunc[i]==0 ) continue;
- if( p->agg.apFunc[i]->xFinalize==0 ) continue;
- ctx.s.flags = MEM_Null;
- ctx.s.z = aMem[i].zShort;
- ctx.pAgg = (void*)aMem[i].z;
- freeCtx = aMem[i].z && aMem[i].z!=aMem[i].zShort;
- ctx.cnt = aMem[i].i;
- ctx.isStep = 0;
- ctx.pFunc = p->agg.apFunc[i];
- (*p->agg.apFunc[i]->xFinalize)(&ctx);
- if( freeCtx ){
- sqliteFree( aMem[i].z );
- }
- aMem[i] = ctx.s;
- if( aMem[i].flags & MEM_Short ){
- aMem[i].z = aMem[i].zShort;
- }
- }
- }
- break;
-}
-
-/* Opcode: SetInsert P1 * P3
-**
-** If Set P1 does not exist then create it. Then insert value
-** P3 into that set. If P3 is NULL, then insert the top of the
-** stack into the set.
-*/
-case OP_SetInsert: {
- int i = pOp->p1;
- if( p->nSet<=i ){
- int k;
- Set *aSet = sqliteRealloc(p->aSet, (i+1)*sizeof(p->aSet[0]) );
- if( aSet==0 ) goto no_mem;
- p->aSet = aSet;
- for(k=p->nSet; k<=i; k++){
- sqliteHashInit(&p->aSet[k].hash, SQLITE_HASH_BINARY, 1);
- }
- p->nSet = i+1;
- }
- if( pOp->p3 ){
- sqliteHashInsert(&p->aSet[i].hash, pOp->p3, strlen(pOp->p3)+1, p);
- }else{
- assert( pTos>=p->aStack );
- Stringify(pTos);
- sqliteHashInsert(&p->aSet[i].hash, pTos->z, pTos->n, p);
- Release(pTos);
- pTos--;
- }
- if( sqlite_malloc_failed ) goto no_mem;
- break;
-}
-
-/* Opcode: SetFound P1 P2 *
-**
-** Pop the stack once and compare the value popped off with the
-** contents of set P1. If the element popped exists in set P1,
-** then jump to P2. Otherwise fall through.
-*/
-case OP_SetFound: {
- int i = pOp->p1;
- assert( pTos>=p->aStack );
- Stringify(pTos);
- if( i>=0 && i<p->nSet && sqliteHashFind(&p->aSet[i].hash, pTos->z, pTos->n)){
- pc = pOp->p2 - 1;
- }
- Release(pTos);
- pTos--;
- break;
-}
-
-/* Opcode: SetNotFound P1 P2 *
-**
-** Pop the stack once and compare the value popped off with the
-** contents of set P1. If the element popped does not exists in
-** set P1, then jump to P2. Otherwise fall through.
-*/
-case OP_SetNotFound: {
- int i = pOp->p1;
- assert( pTos>=p->aStack );
- Stringify(pTos);
- if( i<0 || i>=p->nSet ||
- sqliteHashFind(&p->aSet[i].hash, pTos->z, pTos->n)==0 ){
- pc = pOp->p2 - 1;
- }
- Release(pTos);
- pTos--;
- break;
-}
-
-/* Opcode: SetFirst P1 P2 *
-**
-** Read the first element from set P1 and push it onto the stack. If the
-** set is empty, push nothing and jump immediately to P2. This opcode is
-** used in combination with OP_SetNext to loop over all elements of a set.
-*/
-/* Opcode: SetNext P1 P2 *
-**
-** Read the next element from set P1 and push it onto the stack. If there
-** are no more elements in the set, do not do the push and fall through.
-** Otherwise, jump to P2 after pushing the next set element.
-*/
-case OP_SetFirst:
-case OP_SetNext: {
- Set *pSet;
- CHECK_FOR_INTERRUPT;
- if( pOp->p1<0 || pOp->p1>=p->nSet ){
- if( pOp->opcode==OP_SetFirst ) pc = pOp->p2 - 1;
- break;
- }
- pSet = &p->aSet[pOp->p1];
- if( pOp->opcode==OP_SetFirst ){
- pSet->prev = sqliteHashFirst(&pSet->hash);
- if( pSet->prev==0 ){
- pc = pOp->p2 - 1;
- break;
- }
- }else{
- assert( pSet->prev );
- pSet->prev = sqliteHashNext(pSet->prev);
- if( pSet->prev==0 ){
- break;
- }else{
- pc = pOp->p2 - 1;
- }
- }
- pTos++;
- pTos->z = sqliteHashKey(pSet->prev);
- pTos->n = sqliteHashKeysize(pSet->prev);
- pTos->flags = MEM_Str | MEM_Ephem;
- break;
-}
-
-/* Opcode: Vacuum * * *
-**
-** Vacuum the entire database. This opcode will cause other virtual
-** machines to be created and run. It may not be called from within
-** a transaction.
-*/
-case OP_Vacuum: {
- if( sqliteSafetyOff(db) ) goto abort_due_to_misuse;
- rc = sqliteRunVacuum(&p->zErrMsg, db);
- if( sqliteSafetyOn(db) ) goto abort_due_to_misuse;
- break;
-}
-
-/* Opcode: StackDepth * * *
-**
-** Push an integer onto the stack which is the depth of the stack prior
-** to that integer being pushed.
-*/
-case OP_StackDepth: {
- int depth = (&pTos[1]) - p->aStack;
- pTos++;
- pTos->i = depth;
- pTos->flags = MEM_Int;
- break;
-}
-
-/* Opcode: StackReset * * *
-**
-** Pop a single integer off of the stack. Then pop the stack
-** as many times as necessary to get the depth of the stack down
-** to the value of the integer that was popped.
-*/
-case OP_StackReset: {
- int depth, goal;
- assert( pTos>=p->aStack );
- Integerify(pTos);
- goal = pTos->i;
- depth = (&pTos[1]) - p->aStack;
- assert( goal<depth );
- popStack(&pTos, depth-goal);
- break;
-}
-
-/* An other opcode is illegal...
-*/
-default: {
- sqlite_snprintf(sizeof(zBuf),zBuf,"%d",pOp->opcode);
- sqliteSetString(&p->zErrMsg, "unknown opcode ", zBuf, (char*)0);
- rc = SQLITE_INTERNAL;
- break;
-}
-
-/*****************************************************************************
-** The cases of the switch statement above this line should all be indented
-** by 6 spaces. But the left-most 6 spaces have been removed to improve the
-** readability. From this point on down, the normal indentation rules are
-** restored.
-*****************************************************************************/
- }
-
-#ifdef VDBE_PROFILE
- {
- long long elapse = hwtime() - start;
- pOp->cycles += elapse;
- pOp->cnt++;
-#if 0
- fprintf(stdout, "%10lld ", elapse);
- sqliteVdbePrintOp(stdout, origPc, &p->aOp[origPc]);
-#endif
- }
-#endif
-
- /* The following code adds nothing to the actual functionality
- ** of the program. It is only here for testing and debugging.
- ** On the other hand, it does burn CPU cycles every time through
- ** the evaluator loop. So we can leave it out when NDEBUG is defined.
- */
-#ifndef NDEBUG
- /* Sanity checking on the top element of the stack */
- if( pTos>=p->aStack ){
- assert( pTos->flags!=0 ); /* Must define some type */
- if( pTos->flags & MEM_Str ){
- int x = pTos->flags & (MEM_Static|MEM_Dyn|MEM_Ephem|MEM_Short);
- assert( x!=0 ); /* Strings must define a string subtype */
- assert( (x & (x-1))==0 ); /* Only one string subtype can be defined */
- assert( pTos->z!=0 ); /* Strings must have a value */
- /* Mem.z points to Mem.zShort iff the subtype is MEM_Short */
- assert( (pTos->flags & MEM_Short)==0 || pTos->z==pTos->zShort );
- assert( (pTos->flags & MEM_Short)!=0 || pTos->z!=pTos->zShort );
- }else{
- /* Cannot define a string subtype for non-string objects */
- assert( (pTos->flags & (MEM_Static|MEM_Dyn|MEM_Ephem|MEM_Short))==0 );
- }
- /* MEM_Null excludes all other types */
- assert( pTos->flags==MEM_Null || (pTos->flags&MEM_Null)==0 );
- }
- if( pc<-1 || pc>=p->nOp ){
- sqliteSetString(&p->zErrMsg, "jump destination out of range", (char*)0);
- rc = SQLITE_INTERNAL;
- }
- if( p->trace && pTos>=p->aStack ){
- int i;
- fprintf(p->trace, "Stack:");
- for(i=0; i>-5 && &pTos[i]>=p->aStack; i--){
- if( pTos[i].flags & MEM_Null ){
- fprintf(p->trace, " NULL");
- }else if( (pTos[i].flags & (MEM_Int|MEM_Str))==(MEM_Int|MEM_Str) ){
- fprintf(p->trace, " si:%d", pTos[i].i);
- }else if( pTos[i].flags & MEM_Int ){
- fprintf(p->trace, " i:%d", pTos[i].i);
- }else if( pTos[i].flags & MEM_Real ){
- fprintf(p->trace, " r:%g", pTos[i].r);
- }else if( pTos[i].flags & MEM_Str ){
- int j, k;
- char zBuf[100];
- zBuf[0] = ' ';
- if( pTos[i].flags & MEM_Dyn ){
- zBuf[1] = 'z';
- assert( (pTos[i].flags & (MEM_Static|MEM_Ephem))==0 );
- }else if( pTos[i].flags & MEM_Static ){
- zBuf[1] = 't';
- assert( (pTos[i].flags & (MEM_Dyn|MEM_Ephem))==0 );
- }else if( pTos[i].flags & MEM_Ephem ){
- zBuf[1] = 'e';
- assert( (pTos[i].flags & (MEM_Static|MEM_Dyn))==0 );
- }else{
- zBuf[1] = 's';
- }
- zBuf[2] = '[';
- k = 3;
- for(j=0; j<20 && j<pTos[i].n; j++){
- int c = pTos[i].z[j];
- if( c==0 && j==pTos[i].n-1 ) break;
- if( isprint(c) && !isspace(c) ){
- zBuf[k++] = c;
- }else{
- zBuf[k++] = '.';
- }
- }
- zBuf[k++] = ']';
- zBuf[k++] = 0;
- fprintf(p->trace, "%s", zBuf);
- }else{
- fprintf(p->trace, " ???");
- }
- }
- if( rc!=0 ) fprintf(p->trace," rc=%d",rc);
- fprintf(p->trace,"\n");
- }
-#endif
- } /* The end of the for(;;) loop the loops through opcodes */
-
- /* If we reach this point, it means that execution is finished.
- */
-vdbe_halt:
- CHECK_FOR_INTERRUPT
- if( rc ){
- p->rc = rc;
- rc = SQLITE_ERROR;
- }else{
- rc = SQLITE_DONE;
- }
- p->magic = VDBE_MAGIC_HALT;
- p->pTos = pTos;
- return rc;
-
- /* Jump to here if a malloc() fails. It's hard to get a malloc()
- ** to fail on a modern VM computer, so this code is untested.
- */
-no_mem:
- sqliteSetString(&p->zErrMsg, "out of memory", (char*)0);
- rc = SQLITE_NOMEM;
- goto vdbe_halt;
-
- /* Jump to here for an SQLITE_MISUSE error.
- */
-abort_due_to_misuse:
- rc = SQLITE_MISUSE;
- /* Fall thru into abort_due_to_error */
-
- /* Jump to here for any other kind of fatal error. The "rc" variable
- ** should hold the error number.
- */
-abort_due_to_error:
- if( p->zErrMsg==0 ){
- if( sqlite_malloc_failed ) rc = SQLITE_NOMEM;
- sqliteSetString(&p->zErrMsg, sqlite_error_string(rc), (char*)0);
- }
- goto vdbe_halt;
-
- /* Jump to here if the sqlite_interrupt() API sets the interrupt
- ** flag.
- */
-abort_due_to_interrupt:
- assert( db->flags & SQLITE_Interrupt );
- db->flags &= ~SQLITE_Interrupt;
- if( db->magic!=SQLITE_MAGIC_BUSY ){
- rc = SQLITE_MISUSE;
- }else{
- rc = SQLITE_INTERRUPT;
- }
- sqliteSetString(&p->zErrMsg, sqlite_error_string(rc), (char*)0);
- goto vdbe_halt;
-}
diff --git a/ext/sqlite/libsqlite/src/vdbe.h b/ext/sqlite/libsqlite/src/vdbe.h
deleted file mode 100644
index 6428598075..0000000000
--- a/ext/sqlite/libsqlite/src/vdbe.h
+++ /dev/null
@@ -1,112 +0,0 @@
-/*
-** 2001 September 15
-**
-** The author disclaims copyright to this source code. In place of
-** a legal notice, here is a blessing:
-**
-** May you do good and not evil.
-** May you find forgiveness for yourself and forgive others.
-** May you share freely, never taking more than you give.
-**
-*************************************************************************
-** Header file for the Virtual DataBase Engine (VDBE)
-**
-** This header defines the interface to the virtual database engine
-** or VDBE. The VDBE implements an abstract machine that runs a
-** simple program to access and modify the underlying database.
-**
-** $Id$
-*/
-#ifndef _SQLITE_VDBE_H_
-#define _SQLITE_VDBE_H_
-#include <stdio.h>
-
-/*
-** A single VDBE is an opaque structure named "Vdbe". Only routines
-** in the source file sqliteVdbe.c are allowed to see the insides
-** of this structure.
-*/
-typedef struct Vdbe Vdbe;
-
-/*
-** A single instruction of the virtual machine has an opcode
-** and as many as three operands. The instruction is recorded
-** as an instance of the following structure:
-*/
-struct VdbeOp {
- u8 opcode; /* What operation to perform */
- int p1; /* First operand */
- int p2; /* Second parameter (often the jump destination) */
- char *p3; /* Third parameter */
- int p3type; /* P3_STATIC, P3_DYNAMIC or P3_POINTER */
-#ifdef VDBE_PROFILE
- int cnt; /* Number of times this instruction was executed */
- long long cycles; /* Total time spend executing this instruction */
-#endif
-};
-typedef struct VdbeOp VdbeOp;
-
-/*
-** A smaller version of VdbeOp used for the VdbeAddOpList() function because
-** it takes up less space.
-*/
-struct VdbeOpList {
- u8 opcode; /* What operation to perform */
- signed char p1; /* First operand */
- short int p2; /* Second parameter (often the jump destination) */
- char *p3; /* Third parameter */
-};
-typedef struct VdbeOpList VdbeOpList;
-
-/*
-** Allowed values of VdbeOp.p3type
-*/
-#define P3_NOTUSED 0 /* The P3 parameter is not used */
-#define P3_DYNAMIC (-1) /* Pointer to a string obtained from sqliteMalloc() */
-#define P3_STATIC (-2) /* Pointer to a static string */
-#define P3_POINTER (-3) /* P3 is a pointer to some structure or object */
-
-/*
-** The following macro converts a relative address in the p2 field
-** of a VdbeOp structure into a negative number so that
-** sqliteVdbeAddOpList() knows that the address is relative. Calling
-** the macro again restores the address.
-*/
-#define ADDR(X) (-1-(X))
-
-/*
-** The makefile scans the vdbe.c source file and creates the "opcodes.h"
-** header file that defines a number for each opcode used by the VDBE.
-*/
-#include "opcodes.h"
-
-/*
-** Prototypes for the VDBE interface. See comments on the implementation
-** for a description of what each of these routines does.
-*/
-Vdbe *sqliteVdbeCreate(sqlite*);
-void sqliteVdbeCreateCallback(Vdbe*, int*);
-int sqliteVdbeAddOp(Vdbe*,int,int,int);
-int sqliteVdbeOp3(Vdbe*,int,int,int,const char *zP3,int);
-int sqliteVdbeCode(Vdbe*,...);
-int sqliteVdbeAddOpList(Vdbe*, int nOp, VdbeOpList const *aOp);
-void sqliteVdbeChangeP1(Vdbe*, int addr, int P1);
-void sqliteVdbeChangeP2(Vdbe*, int addr, int P2);
-void sqliteVdbeChangeP3(Vdbe*, int addr, const char *zP1, int N);
-void sqliteVdbeDequoteP3(Vdbe*, int addr);
-int sqliteVdbeFindOp(Vdbe*, int, int);
-VdbeOp *sqliteVdbeGetOp(Vdbe*, int);
-int sqliteVdbeMakeLabel(Vdbe*);
-void sqliteVdbeDelete(Vdbe*);
-void sqliteVdbeMakeReady(Vdbe*,int,int);
-int sqliteVdbeExec(Vdbe*);
-int sqliteVdbeList(Vdbe*);
-int sqliteVdbeFinalize(Vdbe*,char**);
-void sqliteVdbeResolveLabel(Vdbe*, int);
-int sqliteVdbeCurrentAddr(Vdbe*);
-void sqliteVdbeTrace(Vdbe*,FILE*);
-void sqliteVdbeCompressSpace(Vdbe*,int);
-int sqliteVdbeReset(Vdbe*,char **);
-int sqliteVdbeSetVariables(Vdbe*,int,const char**);
-
-#endif
diff --git a/ext/sqlite/libsqlite/src/vdbeInt.h b/ext/sqlite/libsqlite/src/vdbeInt.h
deleted file mode 100644
index 79b6b51a58..0000000000
--- a/ext/sqlite/libsqlite/src/vdbeInt.h
+++ /dev/null
@@ -1,303 +0,0 @@
-/*
-** 2003 September 6
-**
-** The author disclaims copyright to this source code. In place of
-** a legal notice, here is a blessing:
-**
-** May you do good and not evil.
-** May you find forgiveness for yourself and forgive others.
-** May you share freely, never taking more than you give.
-**
-*************************************************************************
-** This is the header file for information that is private to the
-** VDBE. This information used to all be at the top of the single
-** source code file "vdbe.c". When that file became too big (over
-** 6000 lines long) it was split up into several smaller files and
-** this header information was factored out.
-*/
-
-/*
-** When converting from the native format to the key format and back
-** again, in addition to changing the byte order we invert the high-order
-** bit of the most significant byte. This causes negative numbers to
-** sort before positive numbers in the memcmp() function.
-*/
-#define keyToInt(X) (sqliteVdbeByteSwap(X) ^ 0x80000000)
-#define intToKey(X) (sqliteVdbeByteSwap((X) ^ 0x80000000))
-
-/*
-** The makefile scans this source file and creates the following
-** array of string constants which are the names of all VDBE opcodes.
-** This array is defined in a separate source code file named opcode.c
-** which is automatically generated by the makefile.
-*/
-extern char *sqliteOpcodeNames[];
-
-/*
-** SQL is translated into a sequence of instructions to be
-** executed by a virtual machine. Each instruction is an instance
-** of the following structure.
-*/
-typedef struct VdbeOp Op;
-
-/*
-** Boolean values
-*/
-typedef unsigned char Bool;
-
-/*
-** A cursor is a pointer into a single BTree within a database file.
-** The cursor can seek to a BTree entry with a particular key, or
-** loop over all entries of the Btree. You can also insert new BTree
-** entries or retrieve the key or data from the entry that the cursor
-** is currently pointing to.
-**
-** Every cursor that the virtual machine has open is represented by an
-** instance of the following structure.
-**
-** If the Cursor.isTriggerRow flag is set it means that this cursor is
-** really a single row that represents the NEW or OLD pseudo-table of
-** a row trigger. The data for the row is stored in Cursor.pData and
-** the rowid is in Cursor.iKey.
-*/
-struct Cursor {
- BtCursor *pCursor; /* The cursor structure of the backend */
- int lastRecno; /* Last recno from a Next or NextIdx operation */
- int nextRowid; /* Next rowid returned by OP_NewRowid */
- Bool recnoIsValid; /* True if lastRecno is valid */
- Bool keyAsData; /* The OP_Column command works on key instead of data */
- Bool atFirst; /* True if pointing to first entry */
- Bool useRandomRowid; /* Generate new record numbers semi-randomly */
- Bool nullRow; /* True if pointing to a row with no data */
- Bool nextRowidValid; /* True if the nextRowid field is valid */
- Bool pseudoTable; /* This is a NEW or OLD pseudo-tables of a trigger */
- Bool deferredMoveto; /* A call to sqliteBtreeMoveto() is needed */
- int movetoTarget; /* Argument to the deferred sqliteBtreeMoveto() */
- Btree *pBt; /* Separate file holding temporary table */
- int nData; /* Number of bytes in pData */
- char *pData; /* Data for a NEW or OLD pseudo-table */
- int iKey; /* Key for the NEW or OLD pseudo-table row */
-};
-typedef struct Cursor Cursor;
-
-/*
-** A sorter builds a list of elements to be sorted. Each element of
-** the list is an instance of the following structure.
-*/
-typedef struct Sorter Sorter;
-struct Sorter {
- int nKey; /* Number of bytes in the key */
- char *zKey; /* The key by which we will sort */
- int nData; /* Number of bytes in the data */
- char *pData; /* The data associated with this key */
- Sorter *pNext; /* Next in the list */
-};
-
-/*
-** Number of buckets used for merge-sort.
-*/
-#define NSORT 30
-
-/*
-** Number of bytes of string storage space available to each stack
-** layer without having to malloc. NBFS is short for Number of Bytes
-** For Strings.
-*/
-#define NBFS 32
-
-/*
-** A single level of the stack or a single memory cell
-** is an instance of the following structure.
-*/
-struct Mem {
- int i; /* Integer value */
- int n; /* Number of characters in string value, including '\0' */
- int flags; /* Some combination of MEM_Null, MEM_Str, MEM_Dyn, etc. */
- double r; /* Real value */
- char *z; /* String value */
- char zShort[NBFS]; /* Space for short strings */
-};
-typedef struct Mem Mem;
-
-/*
-** Allowed values for Mem.flags
-*/
-#define MEM_Null 0x0001 /* Value is NULL */
-#define MEM_Str 0x0002 /* Value is a string */
-#define MEM_Int 0x0004 /* Value is an integer */
-#define MEM_Real 0x0008 /* Value is a real number */
-#define MEM_Dyn 0x0010 /* Need to call sqliteFree() on Mem.z */
-#define MEM_Static 0x0020 /* Mem.z points to a static string */
-#define MEM_Ephem 0x0040 /* Mem.z points to an ephemeral string */
-#define MEM_Short 0x0080 /* Mem.z points to Mem.zShort */
-
-/* The following MEM_ value appears only in AggElem.aMem.s.flag fields.
-** It indicates that the corresponding AggElem.aMem.z points to a
-** aggregate function context that needs to be finalized.
-*/
-#define MEM_AggCtx 0x0100 /* Mem.z points to an agg function context */
-
-/*
-** The "context" argument for a installable function. A pointer to an
-** instance of this structure is the first argument to the routines used
-** implement the SQL functions.
-**
-** There is a typedef for this structure in sqlite.h. So all routines,
-** even the public interface to SQLite, can use a pointer to this structure.
-** But this file is the only place where the internal details of this
-** structure are known.
-**
-** This structure is defined inside of vdbe.c because it uses substructures
-** (Mem) which are only defined there.
-*/
-struct sqlite_func {
- FuncDef *pFunc; /* Pointer to function information. MUST BE FIRST */
- Mem s; /* The return value is stored here */
- void *pAgg; /* Aggregate context */
- u8 isError; /* Set to true for an error */
- u8 isStep; /* Current in the step function */
- int cnt; /* Number of times that the step function has been called */
-};
-
-/*
-** An Agg structure describes an Aggregator. Each Agg consists of
-** zero or more Aggregator elements (AggElem). Each AggElem contains
-** a key and one or more values. The values are used in processing
-** aggregate functions in a SELECT. The key is used to implement
-** the GROUP BY clause of a select.
-*/
-typedef struct Agg Agg;
-typedef struct AggElem AggElem;
-struct Agg {
- int nMem; /* Number of values stored in each AggElem */
- AggElem *pCurrent; /* The AggElem currently in focus */
- HashElem *pSearch; /* The hash element for pCurrent */
- Hash hash; /* Hash table of all aggregate elements */
- FuncDef **apFunc; /* Information about aggregate functions */
-};
-struct AggElem {
- char *zKey; /* The key to this AggElem */
- int nKey; /* Number of bytes in the key, including '\0' at end */
- Mem aMem[1]; /* The values for this AggElem */
-};
-
-/*
-** A Set structure is used for quick testing to see if a value
-** is part of a small set. Sets are used to implement code like
-** this:
-** x.y IN ('hi','hoo','hum')
-*/
-typedef struct Set Set;
-struct Set {
- Hash hash; /* A set is just a hash table */
- HashElem *prev; /* Previously accessed hash elemen */
-};
-
-/*
-** A Keylist is a bunch of keys into a table. The keylist can
-** grow without bound. The keylist stores the ROWIDs of database
-** records that need to be deleted or updated.
-*/
-typedef struct Keylist Keylist;
-struct Keylist {
- int nKey; /* Number of slots in aKey[] */
- int nUsed; /* Next unwritten slot in aKey[] */
- int nRead; /* Next unread slot in aKey[] */
- Keylist *pNext; /* Next block of keys */
- int aKey[1]; /* One or more keys. Extra space allocated as needed */
-};
-
-/*
-** A Context stores the last insert rowid, the last statement change count,
-** and the current statement change count (i.e. changes since last statement).
-** Elements of Context structure type make up the ContextStack, which is
-** updated by the ContextPush and ContextPop opcodes (used by triggers)
-*/
-typedef struct Context Context;
-struct Context {
- int lastRowid; /* Last insert rowid (from db->lastRowid) */
- int lsChange; /* Last statement change count (from db->lsChange) */
- int csChange; /* Current statement change count (from db->csChange) */
-};
-
-/*
-** An instance of the virtual machine. This structure contains the complete
-** state of the virtual machine.
-**
-** The "sqlite_vm" structure pointer that is returned by sqlite_compile()
-** is really a pointer to an instance of this structure.
-*/
-struct Vdbe {
- sqlite *db; /* The whole database */
- Vdbe *pPrev,*pNext; /* Linked list of VDBEs with the same Vdbe.db */
- FILE *trace; /* Write an execution trace here, if not NULL */
- int nOp; /* Number of instructions in the program */
- int nOpAlloc; /* Number of slots allocated for aOp[] */
- Op *aOp; /* Space to hold the virtual machine's program */
- int nLabel; /* Number of labels used */
- int nLabelAlloc; /* Number of slots allocated in aLabel[] */
- int *aLabel; /* Space to hold the labels */
- Mem *aStack; /* The operand stack, except string values */
- Mem *pTos; /* Top entry in the operand stack */
- char **zArgv; /* Text values used by the callback */
- char **azColName; /* Becomes the 4th parameter to callbacks */
- int nCursor; /* Number of slots in aCsr[] */
- Cursor *aCsr; /* One element of this array for each open cursor */
- Sorter *pSort; /* A linked list of objects to be sorted */
- FILE *pFile; /* At most one open file handler */
- int nField; /* Number of file fields */
- char **azField; /* Data for each file field */
- int nVar; /* Number of entries in azVariable[] */
- char **azVar; /* Values for the OP_Variable opcode */
- int *anVar; /* Length of each value in azVariable[] */
- u8 *abVar; /* TRUE if azVariable[i] needs to be sqliteFree()ed */
- char *zLine; /* A single line from the input file */
- int nLineAlloc; /* Number of spaces allocated for zLine */
- int magic; /* Magic number for sanity checking */
- int nMem; /* Number of memory locations currently allocated */
- Mem *aMem; /* The memory locations */
- Agg agg; /* Aggregate information */
- int nSet; /* Number of sets allocated */
- Set *aSet; /* An array of sets */
- int nCallback; /* Number of callbacks invoked so far */
- Keylist *pList; /* A list of ROWIDs */
- int keylistStackDepth; /* The size of the "keylist" stack */
- Keylist **keylistStack; /* The stack used by opcodes ListPush & ListPop */
- int contextStackDepth; /* The size of the "context" stack */
- Context *contextStack; /* Stack used by opcodes ContextPush & ContextPop*/
- int pc; /* The program counter */
- int rc; /* Value to return */
- unsigned uniqueCnt; /* Used by OP_MakeRecord when P2!=0 */
- int errorAction; /* Recovery action to do in case of an error */
- int undoTransOnError; /* If error, either ROLLBACK or COMMIT */
- int inTempTrans; /* True if temp database is transactioned */
- int returnStack[100]; /* Return address stack for OP_Gosub & OP_Return */
- int returnDepth; /* Next unused element in returnStack[] */
- int nResColumn; /* Number of columns in one row of the result set */
- char **azResColumn; /* Values for one row of result */
- int popStack; /* Pop the stack this much on entry to VdbeExec() */
- char *zErrMsg; /* Error message written here */
- u8 explain; /* True if EXPLAIN present on SQL command */
-};
-
-/*
-** The following are allowed values for Vdbe.magic
-*/
-#define VDBE_MAGIC_INIT 0x26bceaa5 /* Building a VDBE program */
-#define VDBE_MAGIC_RUN 0xbdf20da3 /* VDBE is ready to execute */
-#define VDBE_MAGIC_HALT 0x519c2973 /* VDBE has completed execution */
-#define VDBE_MAGIC_DEAD 0xb606c3c8 /* The VDBE has been deallocated */
-
-/*
-** Function prototypes
-*/
-void sqliteVdbeCleanupCursor(Cursor*);
-void sqliteVdbeSorterReset(Vdbe*);
-void sqliteVdbeAggReset(Agg*);
-void sqliteVdbeKeylistFree(Keylist*);
-void sqliteVdbePopStack(Vdbe*,int);
-int sqliteVdbeCursorMoveto(Cursor*);
-int sqliteVdbeByteSwap(int);
-#if !defined(NDEBUG) || defined(VDBE_PROFILE)
-void sqliteVdbePrintOp(FILE*, int, Op*);
-#endif
diff --git a/ext/sqlite/libsqlite/src/vdbeaux.c b/ext/sqlite/libsqlite/src/vdbeaux.c
deleted file mode 100644
index c206bad4ab..0000000000
--- a/ext/sqlite/libsqlite/src/vdbeaux.c
+++ /dev/null
@@ -1,1061 +0,0 @@
-/*
-** 2003 September 6
-**
-** The author disclaims copyright to this source code. In place of
-** a legal notice, here is a blessing:
-**
-** May you do good and not evil.
-** May you find forgiveness for yourself and forgive others.
-** May you share freely, never taking more than you give.
-**
-*************************************************************************
-** This file contains code used for creating, destroying, and populating
-** a VDBE (or an "sqlite_vm" as it is known to the outside world.) Prior
-** to version 2.8.7, all this code was combined into the vdbe.c source file.
-** But that file was getting too big so this subroutines were split out.
-*/
-#include "sqliteInt.h"
-#include "os.h"
-#include <ctype.h>
-#include "vdbeInt.h"
-
-
-/*
-** When debugging the code generator in a symbolic debugger, one can
-** set the sqlite_vdbe_addop_trace to 1 and all opcodes will be printed
-** as they are added to the instruction stream.
-*/
-#ifndef NDEBUG
-int sqlite_vdbe_addop_trace = 0;
-#endif
-
-
-/*
-** Create a new virtual database engine.
-*/
-Vdbe *sqliteVdbeCreate(sqlite *db){
- Vdbe *p;
- p = sqliteMalloc( sizeof(Vdbe) );
- if( p==0 ) return 0;
- p->db = db;
- if( db->pVdbe ){
- db->pVdbe->pPrev = p;
- }
- p->pNext = db->pVdbe;
- p->pPrev = 0;
- db->pVdbe = p;
- p->magic = VDBE_MAGIC_INIT;
- return p;
-}
-
-/*
-** Turn tracing on or off
-*/
-void sqliteVdbeTrace(Vdbe *p, FILE *trace){
- p->trace = trace;
-}
-
-/*
-** Add a new instruction to the list of instructions current in the
-** VDBE. Return the address of the new instruction.
-**
-** Parameters:
-**
-** p Pointer to the VDBE
-**
-** op The opcode for this instruction
-**
-** p1, p2 First two of the three possible operands.
-**
-** Use the sqliteVdbeResolveLabel() function to fix an address and
-** the sqliteVdbeChangeP3() function to change the value of the P3
-** operand.
-*/
-int sqliteVdbeAddOp(Vdbe *p, int op, int p1, int p2){
- int i;
- VdbeOp *pOp;
-
- i = p->nOp;
- p->nOp++;
- assert( p->magic==VDBE_MAGIC_INIT );
- if( i>=p->nOpAlloc ){
- int oldSize = p->nOpAlloc;
- Op *aNew;
- p->nOpAlloc = p->nOpAlloc*2 + 100;
- aNew = sqliteRealloc(p->aOp, p->nOpAlloc*sizeof(Op));
- if( aNew==0 ){
- p->nOpAlloc = oldSize;
- return 0;
- }
- p->aOp = aNew;
- memset(&p->aOp[oldSize], 0, (p->nOpAlloc-oldSize)*sizeof(Op));
- }
- pOp = &p->aOp[i];
- pOp->opcode = op;
- pOp->p1 = p1;
- if( p2<0 && (-1-p2)<p->nLabel && p->aLabel[-1-p2]>=0 ){
- p2 = p->aLabel[-1-p2];
- }
- pOp->p2 = p2;
- pOp->p3 = 0;
- pOp->p3type = P3_NOTUSED;
-#ifndef NDEBUG
- if( sqlite_vdbe_addop_trace ) sqliteVdbePrintOp(0, i, &p->aOp[i]);
-#endif
- return i;
-}
-
-/*
-** Add an opcode that includes the p3 value.
-*/
-int sqliteVdbeOp3(Vdbe *p, int op, int p1, int p2, const char *zP3, int p3type){
- int addr = sqliteVdbeAddOp(p, op, p1, p2);
- sqliteVdbeChangeP3(p, addr, zP3, p3type);
- return addr;
-}
-
-/*
-** Add multiple opcodes. The list is terminated by an opcode of 0.
-*/
-int sqliteVdbeCode(Vdbe *p, ...){
- int addr;
- va_list ap;
- int opcode, p1, p2;
- va_start(ap, p);
- addr = p->nOp;
- while( (opcode = va_arg(ap,int))!=0 ){
- p1 = va_arg(ap,int);
- p2 = va_arg(ap,int);
- sqliteVdbeAddOp(p, opcode, p1, p2);
- }
- va_end(ap);
- return addr;
-}
-
-
-
-/*
-** Create a new symbolic label for an instruction that has yet to be
-** coded. The symbolic label is really just a negative number. The
-** label can be used as the P2 value of an operation. Later, when
-** the label is resolved to a specific address, the VDBE will scan
-** through its operation list and change all values of P2 which match
-** the label into the resolved address.
-**
-** The VDBE knows that a P2 value is a label because labels are
-** always negative and P2 values are suppose to be non-negative.
-** Hence, a negative P2 value is a label that has yet to be resolved.
-*/
-int sqliteVdbeMakeLabel(Vdbe *p){
- int i;
- i = p->nLabel++;
- assert( p->magic==VDBE_MAGIC_INIT );
- if( i>=p->nLabelAlloc ){
- int *aNew;
- p->nLabelAlloc = p->nLabelAlloc*2 + 10;
- aNew = sqliteRealloc( p->aLabel, p->nLabelAlloc*sizeof(p->aLabel[0]));
- if( aNew==0 ){
- sqliteFree(p->aLabel);
- }
- p->aLabel = aNew;
- }
- if( p->aLabel==0 ){
- p->nLabel = 0;
- p->nLabelAlloc = 0;
- return 0;
- }
- p->aLabel[i] = -1;
- return -1-i;
-}
-
-/*
-** Resolve label "x" to be the address of the next instruction to
-** be inserted. The parameter "x" must have been obtained from
-** a prior call to sqliteVdbeMakeLabel().
-*/
-void sqliteVdbeResolveLabel(Vdbe *p, int x){
- int j;
- assert( p->magic==VDBE_MAGIC_INIT );
- if( x<0 && (-x)<=p->nLabel && p->aOp ){
- if( p->aLabel[-1-x]==p->nOp ) return;
- assert( p->aLabel[-1-x]<0 );
- p->aLabel[-1-x] = p->nOp;
- for(j=0; j<p->nOp; j++){
- if( p->aOp[j].p2==x ) p->aOp[j].p2 = p->nOp;
- }
- }
-}
-
-/*
-** Return the address of the next instruction to be inserted.
-*/
-int sqliteVdbeCurrentAddr(Vdbe *p){
- assert( p->magic==VDBE_MAGIC_INIT );
- return p->nOp;
-}
-
-/*
-** Add a whole list of operations to the operation stack. Return the
-** address of the first operation added.
-*/
-int sqliteVdbeAddOpList(Vdbe *p, int nOp, VdbeOpList const *aOp){
- int addr;
- assert( p->magic==VDBE_MAGIC_INIT );
- if( p->nOp + nOp >= p->nOpAlloc ){
- int oldSize = p->nOpAlloc;
- Op *aNew;
- p->nOpAlloc = p->nOpAlloc*2 + nOp + 10;
- aNew = sqliteRealloc(p->aOp, p->nOpAlloc*sizeof(Op));
- if( aNew==0 ){
- p->nOpAlloc = oldSize;
- return 0;
- }
- p->aOp = aNew;
- memset(&p->aOp[oldSize], 0, (p->nOpAlloc-oldSize)*sizeof(Op));
- }
- addr = p->nOp;
- if( nOp>0 ){
- int i;
- VdbeOpList const *pIn = aOp;
- for(i=0; i<nOp; i++, pIn++){
- int p2 = pIn->p2;
- VdbeOp *pOut = &p->aOp[i+addr];
- pOut->opcode = pIn->opcode;
- pOut->p1 = pIn->p1;
- pOut->p2 = p2<0 ? addr + ADDR(p2) : p2;
- pOut->p3 = pIn->p3;
- pOut->p3type = pIn->p3 ? P3_STATIC : P3_NOTUSED;
-#ifndef NDEBUG
- if( sqlite_vdbe_addop_trace ){
- sqliteVdbePrintOp(0, i+addr, &p->aOp[i+addr]);
- }
-#endif
- }
- p->nOp += nOp;
- }
- return addr;
-}
-
-/*
-** Change the value of the P1 operand for a specific instruction.
-** This routine is useful when a large program is loaded from a
-** static array using sqliteVdbeAddOpList but we want to make a
-** few minor changes to the program.
-*/
-void sqliteVdbeChangeP1(Vdbe *p, int addr, int val){
- assert( p->magic==VDBE_MAGIC_INIT );
- if( p && addr>=0 && p->nOp>addr && p->aOp ){
- p->aOp[addr].p1 = val;
- }
-}
-
-/*
-** Change the value of the P2 operand for a specific instruction.
-** This routine is useful for setting a jump destination.
-*/
-void sqliteVdbeChangeP2(Vdbe *p, int addr, int val){
- assert( val>=0 );
- assert( p->magic==VDBE_MAGIC_INIT );
- if( p && addr>=0 && p->nOp>addr && p->aOp ){
- p->aOp[addr].p2 = val;
- }
-}
-
-/*
-** Change the value of the P3 operand for a specific instruction.
-** This routine is useful when a large program is loaded from a
-** static array using sqliteVdbeAddOpList but we want to make a
-** few minor changes to the program.
-**
-** If n>=0 then the P3 operand is dynamic, meaning that a copy of
-** the string is made into memory obtained from sqliteMalloc().
-** A value of n==0 means copy bytes of zP3 up to and including the
-** first null byte. If n>0 then copy n+1 bytes of zP3.
-**
-** If n==P3_STATIC it means that zP3 is a pointer to a constant static
-** string and we can just copy the pointer. n==P3_POINTER means zP3 is
-** a pointer to some object other than a string.
-**
-** If addr<0 then change P3 on the most recently inserted instruction.
-*/
-void sqliteVdbeChangeP3(Vdbe *p, int addr, const char *zP3, int n){
- Op *pOp;
- assert( p->magic==VDBE_MAGIC_INIT );
- if( p==0 || p->aOp==0 ) return;
- if( addr<0 || addr>=p->nOp ){
- addr = p->nOp - 1;
- if( addr<0 ) return;
- }
- pOp = &p->aOp[addr];
- if( pOp->p3 && pOp->p3type==P3_DYNAMIC ){
- sqliteFree(pOp->p3);
- pOp->p3 = 0;
- }
- if( zP3==0 ){
- pOp->p3 = 0;
- pOp->p3type = P3_NOTUSED;
- }else if( n<0 ){
- pOp->p3 = (char*)zP3;
- pOp->p3type = n;
- }else{
- sqliteSetNString(&pOp->p3, zP3, n, 0);
- pOp->p3type = P3_DYNAMIC;
- }
-}
-
-/*
-** If the P3 operand to the specified instruction appears
-** to be a quoted string token, then this procedure removes
-** the quotes.
-**
-** The quoting operator can be either a grave ascent (ASCII 0x27)
-** or a double quote character (ASCII 0x22). Two quotes in a row
-** resolve to be a single actual quote character within the string.
-*/
-void sqliteVdbeDequoteP3(Vdbe *p, int addr){
- Op *pOp;
- assert( p->magic==VDBE_MAGIC_INIT );
- if( p->aOp==0 ) return;
- if( addr<0 || addr>=p->nOp ){
- addr = p->nOp - 1;
- if( addr<0 ) return;
- }
- pOp = &p->aOp[addr];
- if( pOp->p3==0 || pOp->p3[0]==0 ) return;
- if( pOp->p3type==P3_POINTER ) return;
- if( pOp->p3type!=P3_DYNAMIC ){
- pOp->p3 = sqliteStrDup(pOp->p3);
- pOp->p3type = P3_DYNAMIC;
- }
- sqliteDequote(pOp->p3);
-}
-
-/*
-** On the P3 argument of the given instruction, change all
-** strings of whitespace characters into a single space and
-** delete leading and trailing whitespace.
-*/
-void sqliteVdbeCompressSpace(Vdbe *p, int addr){
- unsigned char *z;
- int i, j;
- Op *pOp;
- assert( p->magic==VDBE_MAGIC_INIT );
- if( p->aOp==0 || addr<0 || addr>=p->nOp ) return;
- pOp = &p->aOp[addr];
- if( pOp->p3type==P3_POINTER ){
- return;
- }
- if( pOp->p3type!=P3_DYNAMIC ){
- pOp->p3 = sqliteStrDup(pOp->p3);
- pOp->p3type = P3_DYNAMIC;
- }
- z = (unsigned char*)pOp->p3;
- if( z==0 ) return;
- i = j = 0;
- while( isspace(z[i]) ){ i++; }
- while( z[i] ){
- if( isspace(z[i]) ){
- z[j++] = ' ';
- while( isspace(z[++i]) ){}
- }else{
- z[j++] = z[i++];
- }
- }
- while( j>0 && isspace(z[j-1]) ){ j--; }
- z[j] = 0;
-}
-
-/*
-** Search for the current program for the given opcode and P2
-** value. Return the address plus 1 if found and 0 if not found.
-*/
-int sqliteVdbeFindOp(Vdbe *p, int op, int p2){
- int i;
- assert( p->magic==VDBE_MAGIC_INIT );
- for(i=0; i<p->nOp; i++){
- if( p->aOp[i].opcode==op && p->aOp[i].p2==p2 ) return i+1;
- }
- return 0;
-}
-
-/*
-** Return the opcode for a given address.
-*/
-VdbeOp *sqliteVdbeGetOp(Vdbe *p, int addr){
- assert( p->magic==VDBE_MAGIC_INIT );
- assert( addr>=0 && addr<p->nOp );
- return &p->aOp[addr];
-}
-
-/*
-** The following group or routines are employed by installable functions
-** to return their results.
-**
-** The sqlite_set_result_string() routine can be used to return a string
-** value or to return a NULL. To return a NULL, pass in NULL for zResult.
-** A copy is made of the string before this routine returns so it is safe
-** to pass in an ephemeral string.
-**
-** sqlite_set_result_error() works like sqlite_set_result_string() except
-** that it signals a fatal error. The string argument, if any, is the
-** error message. If the argument is NULL a generic substitute error message
-** is used.
-**
-** The sqlite_set_result_int() and sqlite_set_result_double() set the return
-** value of the user function to an integer or a double.
-**
-** These routines are defined here in vdbe.c because they depend on knowing
-** the internals of the sqlite_func structure which is only defined in
-** this source file.
-*/
-char *sqlite_set_result_string(sqlite_func *p, const char *zResult, int n){
- assert( !p->isStep );
- if( p->s.flags & MEM_Dyn ){
- sqliteFree(p->s.z);
- }
- if( zResult==0 ){
- p->s.flags = MEM_Null;
- n = 0;
- p->s.z = 0;
- p->s.n = 0;
- }else{
- if( n<0 ) n = strlen(zResult);
- if( n<NBFS-1 ){
- memcpy(p->s.zShort, zResult, n);
- p->s.zShort[n] = 0;
- p->s.flags = MEM_Str | MEM_Short;
- p->s.z = p->s.zShort;
- }else{
- p->s.z = sqliteMallocRaw( n+1 );
- if( p->s.z ){
- memcpy(p->s.z, zResult, n);
- p->s.z[n] = 0;
- }
- p->s.flags = MEM_Str | MEM_Dyn;
- }
- p->s.n = n+1;
- }
- return p->s.z;
-}
-void sqlite_set_result_int(sqlite_func *p, int iResult){
- assert( !p->isStep );
- if( p->s.flags & MEM_Dyn ){
- sqliteFree(p->s.z);
- }
- p->s.i = iResult;
- p->s.flags = MEM_Int;
-}
-void sqlite_set_result_double(sqlite_func *p, double rResult){
- assert( !p->isStep );
- if( p->s.flags & MEM_Dyn ){
- sqliteFree(p->s.z);
- }
- p->s.r = rResult;
- p->s.flags = MEM_Real;
-}
-void sqlite_set_result_error(sqlite_func *p, const char *zMsg, int n){
- assert( !p->isStep );
- sqlite_set_result_string(p, zMsg, n);
- p->isError = 1;
-}
-
-/*
-** Extract the user data from a sqlite_func structure and return a
-** pointer to it.
-*/
-void *sqlite_user_data(sqlite_func *p){
- assert( p && p->pFunc );
- return p->pFunc->pUserData;
-}
-
-/*
-** Allocate or return the aggregate context for a user function. A new
-** context is allocated on the first call. Subsequent calls return the
-** same context that was returned on prior calls.
-**
-** This routine is defined here in vdbe.c because it depends on knowing
-** the internals of the sqlite_func structure which is only defined in
-** this source file.
-*/
-void *sqlite_aggregate_context(sqlite_func *p, int nByte){
- assert( p && p->pFunc && p->pFunc->xStep );
- if( p->pAgg==0 ){
- if( nByte<=NBFS ){
- p->pAgg = (void*)p->s.z;
- memset(p->pAgg, 0, nByte);
- }else{
- p->pAgg = sqliteMalloc( nByte );
- }
- }
- return p->pAgg;
-}
-
-/*
-** Return the number of times the Step function of a aggregate has been
-** called.
-**
-** This routine is defined here in vdbe.c because it depends on knowing
-** the internals of the sqlite_func structure which is only defined in
-** this source file.
-*/
-int sqlite_aggregate_count(sqlite_func *p){
- assert( p && p->pFunc && p->pFunc->xStep );
- return p->cnt;
-}
-
-#if !defined(NDEBUG) || defined(VDBE_PROFILE)
-/*
-** Print a single opcode. This routine is used for debugging only.
-*/
-void sqliteVdbePrintOp(FILE *pOut, int pc, Op *pOp){
- char *zP3;
- char zPtr[40];
- if( pOp->p3type==P3_POINTER ){
- sprintf(zPtr, "ptr(%#lx)", (long)pOp->p3);
- zP3 = zPtr;
- }else{
- zP3 = pOp->p3;
- }
- if( pOut==0 ) pOut = stdout;
- fprintf(pOut,"%4d %-12s %4d %4d %s\n",
- pc, sqliteOpcodeNames[pOp->opcode], pOp->p1, pOp->p2, zP3 ? zP3 : "");
- fflush(pOut);
-}
-#endif
-
-/*
-** Give a listing of the program in the virtual machine.
-**
-** The interface is the same as sqliteVdbeExec(). But instead of
-** running the code, it invokes the callback once for each instruction.
-** This feature is used to implement "EXPLAIN".
-*/
-int sqliteVdbeList(
- Vdbe *p /* The VDBE */
-){
- sqlite *db = p->db;
- int i;
- int rc = SQLITE_OK;
- static char *azColumnNames[] = {
- "addr", "opcode", "p1", "p2", "p3",
- "int", "text", "int", "int", "text",
- 0
- };
-
- assert( p->popStack==0 );
- assert( p->explain );
- p->azColName = azColumnNames;
- p->azResColumn = p->zArgv;
- for(i=0; i<5; i++) p->zArgv[i] = p->aStack[i].zShort;
- i = p->pc;
- if( i>=p->nOp ){
- p->rc = SQLITE_OK;
- rc = SQLITE_DONE;
- }else if( db->flags & SQLITE_Interrupt ){
- db->flags &= ~SQLITE_Interrupt;
- if( db->magic!=SQLITE_MAGIC_BUSY ){
- p->rc = SQLITE_MISUSE;
- }else{
- p->rc = SQLITE_INTERRUPT;
- }
- rc = SQLITE_ERROR;
- sqliteSetString(&p->zErrMsg, sqlite_error_string(p->rc), (char*)0);
- }else{
- sprintf(p->zArgv[0],"%d",i);
- sprintf(p->zArgv[2],"%d", p->aOp[i].p1);
- sprintf(p->zArgv[3],"%d", p->aOp[i].p2);
- if( p->aOp[i].p3type==P3_POINTER ){
- sprintf(p->aStack[4].zShort, "ptr(%#lx)", (long)p->aOp[i].p3);
- p->zArgv[4] = p->aStack[4].zShort;
- }else{
- p->zArgv[4] = p->aOp[i].p3;
- }
- p->zArgv[1] = sqliteOpcodeNames[p->aOp[i].opcode];
- p->pc = i+1;
- p->azResColumn = p->zArgv;
- p->nResColumn = 5;
- p->rc = SQLITE_OK;
- rc = SQLITE_ROW;
- }
- return rc;
-}
-
-/*
-** Prepare a virtual machine for execution. This involves things such
-** as allocating stack space and initializing the program counter.
-** After the VDBE has be prepped, it can be executed by one or more
-** calls to sqliteVdbeExec().
-*/
-void sqliteVdbeMakeReady(
- Vdbe *p, /* The VDBE */
- int nVar, /* Number of '?' see in the SQL statement */
- int isExplain /* True if the EXPLAIN keywords is present */
-){
- int n;
-
- assert( p!=0 );
- assert( p->magic==VDBE_MAGIC_INIT );
-
- /* Add a HALT instruction to the very end of the program.
- */
- if( p->nOp==0 || (p->aOp && p->aOp[p->nOp-1].opcode!=OP_Halt) ){
- sqliteVdbeAddOp(p, OP_Halt, 0, 0);
- }
-
- /* No instruction ever pushes more than a single element onto the
- ** stack. And the stack never grows on successive executions of the
- ** same loop. So the total number of instructions is an upper bound
- ** on the maximum stack depth required.
- **
- ** Allocation all the stack space we will ever need.
- */
- if( p->aStack==0 ){
- p->nVar = nVar;
- assert( nVar>=0 );
- n = isExplain ? 10 : p->nOp;
- p->aStack = sqliteMalloc(
- n*(sizeof(p->aStack[0]) + 2*sizeof(char*)) /* aStack and zArgv */
- + p->nVar*(sizeof(char*)+sizeof(int)+1) /* azVar, anVar, abVar */
- );
- p->zArgv = (char**)&p->aStack[n];
- p->azColName = (char**)&p->zArgv[n];
- p->azVar = (char**)&p->azColName[n];
- p->anVar = (int*)&p->azVar[p->nVar];
- p->abVar = (u8*)&p->anVar[p->nVar];
- }
-
- sqliteHashInit(&p->agg.hash, SQLITE_HASH_BINARY, 0);
- p->agg.pSearch = 0;
-#ifdef MEMORY_DEBUG
- if( sqliteOsFileExists("vdbe_trace") ){
- p->trace = stdout;
- }
-#endif
- p->pTos = &p->aStack[-1];
- p->pc = 0;
- p->rc = SQLITE_OK;
- p->uniqueCnt = 0;
- p->returnDepth = 0;
- p->errorAction = OE_Abort;
- p->undoTransOnError = 0;
- p->popStack = 0;
- p->explain |= isExplain;
- p->magic = VDBE_MAGIC_RUN;
-#ifdef VDBE_PROFILE
- {
- int i;
- for(i=0; i<p->nOp; i++){
- p->aOp[i].cnt = 0;
- p->aOp[i].cycles = 0;
- }
- }
-#endif
-}
-
-
-/*
-** Remove any elements that remain on the sorter for the VDBE given.
-*/
-void sqliteVdbeSorterReset(Vdbe *p){
- while( p->pSort ){
- Sorter *pSorter = p->pSort;
- p->pSort = pSorter->pNext;
- sqliteFree(pSorter->zKey);
- sqliteFree(pSorter->pData);
- sqliteFree(pSorter);
- }
-}
-
-/*
-** Reset an Agg structure. Delete all its contents.
-**
-** For installable aggregate functions, if the step function has been
-** called, make sure the finalizer function has also been called. The
-** finalizer might need to free memory that was allocated as part of its
-** private context. If the finalizer has not been called yet, call it
-** now.
-*/
-void sqliteVdbeAggReset(Agg *pAgg){
- int i;
- HashElem *p;
- for(p = sqliteHashFirst(&pAgg->hash); p; p = sqliteHashNext(p)){
- AggElem *pElem = sqliteHashData(p);
- assert( pAgg->apFunc!=0 );
- for(i=0; i<pAgg->nMem; i++){
- Mem *pMem = &pElem->aMem[i];
- if( pAgg->apFunc[i] && (pMem->flags & MEM_AggCtx)!=0 ){
- sqlite_func ctx;
- ctx.pFunc = pAgg->apFunc[i];
- ctx.s.flags = MEM_Null;
- ctx.pAgg = pMem->z;
- ctx.cnt = pMem->i;
- ctx.isStep = 0;
- ctx.isError = 0;
- (*pAgg->apFunc[i]->xFinalize)(&ctx);
- if( pMem->z!=0 && pMem->z!=pMem->zShort ){
- sqliteFree(pMem->z);
- }
- if( ctx.s.flags & MEM_Dyn ){
- sqliteFree(ctx.s.z);
- }
- }else if( pMem->flags & MEM_Dyn ){
- sqliteFree(pMem->z);
- }
- }
- sqliteFree(pElem);
- }
- sqliteHashClear(&pAgg->hash);
- sqliteFree(pAgg->apFunc);
- pAgg->apFunc = 0;
- pAgg->pCurrent = 0;
- pAgg->pSearch = 0;
- pAgg->nMem = 0;
-}
-
-/*
-** Delete a keylist
-*/
-void sqliteVdbeKeylistFree(Keylist *p){
- while( p ){
- Keylist *pNext = p->pNext;
- sqliteFree(p);
- p = pNext;
- }
-}
-
-/*
-** Close a cursor and release all the resources that cursor happens
-** to hold.
-*/
-void sqliteVdbeCleanupCursor(Cursor *pCx){
- if( pCx->pCursor ){
- sqliteBtreeCloseCursor(pCx->pCursor);
- }
- if( pCx->pBt ){
- sqliteBtreeClose(pCx->pBt);
- }
- sqliteFree(pCx->pData);
- memset(pCx, 0, sizeof(Cursor));
-}
-
-/*
-** Close all cursors
-*/
-static void closeAllCursors(Vdbe *p){
- int i;
- for(i=0; i<p->nCursor; i++){
- sqliteVdbeCleanupCursor(&p->aCsr[i]);
- }
- sqliteFree(p->aCsr);
- p->aCsr = 0;
- p->nCursor = 0;
-}
-
-/*
-** Clean up the VM after execution.
-**
-** This routine will automatically close any cursors, lists, and/or
-** sorters that were left open. It also deletes the values of
-** variables in the azVariable[] array.
-*/
-static void Cleanup(Vdbe *p){
- int i;
- if( p->aStack ){
- Mem *pTos = p->pTos;
- while( pTos>=p->aStack ){
- if( pTos->flags & MEM_Dyn ){
- sqliteFree(pTos->z);
- }
- pTos--;
- }
- p->pTos = pTos;
- }
- closeAllCursors(p);
- if( p->aMem ){
- for(i=0; i<p->nMem; i++){
- if( p->aMem[i].flags & MEM_Dyn ){
- sqliteFree(p->aMem[i].z);
- }
- }
- }
- sqliteFree(p->aMem);
- p->aMem = 0;
- p->nMem = 0;
- if( p->pList ){
- sqliteVdbeKeylistFree(p->pList);
- p->pList = 0;
- }
- sqliteVdbeSorterReset(p);
- if( p->pFile ){
- if( p->pFile!=stdin ) fclose(p->pFile);
- p->pFile = 0;
- }
- if( p->azField ){
- sqliteFree(p->azField);
- p->azField = 0;
- }
- p->nField = 0;
- if( p->zLine ){
- sqliteFree(p->zLine);
- p->zLine = 0;
- }
- p->nLineAlloc = 0;
- sqliteVdbeAggReset(&p->agg);
- if( p->aSet ){
- for(i=0; i<p->nSet; i++){
- sqliteHashClear(&p->aSet[i].hash);
- }
- }
- sqliteFree(p->aSet);
- p->aSet = 0;
- p->nSet = 0;
- if( p->keylistStack ){
- int ii;
- for(ii = 0; ii < p->keylistStackDepth; ii++){
- sqliteVdbeKeylistFree(p->keylistStack[ii]);
- }
- sqliteFree(p->keylistStack);
- p->keylistStackDepth = 0;
- p->keylistStack = 0;
- }
- sqliteFree(p->contextStack);
- p->contextStack = 0;
- sqliteFree(p->zErrMsg);
- p->zErrMsg = 0;
-}
-
-/*
-** Clean up a VDBE after execution but do not delete the VDBE just yet.
-** Write any error messages into *pzErrMsg. Return the result code.
-**
-** After this routine is run, the VDBE should be ready to be executed
-** again.
-*/
-int sqliteVdbeReset(Vdbe *p, char **pzErrMsg){
- sqlite *db = p->db;
- int i;
-
- if( p->magic!=VDBE_MAGIC_RUN && p->magic!=VDBE_MAGIC_HALT ){
- sqliteSetString(pzErrMsg, sqlite_error_string(SQLITE_MISUSE), (char*)0);
- return SQLITE_MISUSE;
- }
- if( p->zErrMsg ){
- if( pzErrMsg && *pzErrMsg==0 ){
- *pzErrMsg = p->zErrMsg;
- }else{
- sqliteFree(p->zErrMsg);
- }
- p->zErrMsg = 0;
- }else if( p->rc ){
- sqliteSetString(pzErrMsg, sqlite_error_string(p->rc), (char*)0);
- }
- Cleanup(p);
- if( p->rc!=SQLITE_OK ){
- switch( p->errorAction ){
- case OE_Abort: {
- if( !p->undoTransOnError ){
- for(i=0; i<db->nDb; i++){
- if( db->aDb[i].pBt ){
- sqliteBtreeRollbackCkpt(db->aDb[i].pBt);
- }
- }
- break;
- }
- /* Fall through to ROLLBACK */
- }
- case OE_Rollback: {
- sqliteRollbackAll(db);
- db->flags &= ~SQLITE_InTrans;
- db->onError = OE_Default;
- break;
- }
- default: {
- if( p->undoTransOnError ){
- sqliteRollbackAll(db);
- db->flags &= ~SQLITE_InTrans;
- db->onError = OE_Default;
- }
- break;
- }
- }
- sqliteRollbackInternalChanges(db);
- }
- for(i=0; i<db->nDb; i++){
- if( db->aDb[i].pBt && db->aDb[i].inTrans==2 ){
- sqliteBtreeCommitCkpt(db->aDb[i].pBt);
- db->aDb[i].inTrans = 1;
- }
- }
- assert( p->pTos<&p->aStack[p->pc] || sqlite_malloc_failed==1 );
-#ifdef VDBE_PROFILE
- {
- FILE *out = fopen("vdbe_profile.out", "a");
- if( out ){
- int i;
- fprintf(out, "---- ");
- for(i=0; i<p->nOp; i++){
- fprintf(out, "%02x", p->aOp[i].opcode);
- }
- fprintf(out, "\n");
- for(i=0; i<p->nOp; i++){
- fprintf(out, "%6d %10lld %8lld ",
- p->aOp[i].cnt,
- p->aOp[i].cycles,
- p->aOp[i].cnt>0 ? p->aOp[i].cycles/p->aOp[i].cnt : 0
- );
- sqliteVdbePrintOp(out, i, &p->aOp[i]);
- }
- fclose(out);
- }
- }
-#endif
- p->magic = VDBE_MAGIC_INIT;
- return p->rc;
-}
-
-/*
-** Clean up and delete a VDBE after execution. Return an integer which is
-** the result code. Write any error message text into *pzErrMsg.
-*/
-int sqliteVdbeFinalize(Vdbe *p, char **pzErrMsg){
- int rc;
- sqlite *db;
-
- if( p->magic!=VDBE_MAGIC_RUN && p->magic!=VDBE_MAGIC_HALT ){
- sqliteSetString(pzErrMsg, sqlite_error_string(SQLITE_MISUSE), (char*)0);
- return SQLITE_MISUSE;
- }
- db = p->db;
- rc = sqliteVdbeReset(p, pzErrMsg);
- sqliteVdbeDelete(p);
- if( db->want_to_close && db->pVdbe==0 ){
- sqlite_close(db);
- }
- if( rc==SQLITE_SCHEMA ){
- sqliteResetInternalSchema(db, 0);
- }
- return rc;
-}
-
-/*
-** Set the values of all variables. Variable $1 in the original SQL will
-** be the string azValue[0]. $2 will have the value azValue[1]. And
-** so forth. If a value is out of range (for example $3 when nValue==2)
-** then its value will be NULL.
-**
-** This routine overrides any prior call.
-*/
-int sqlite_bind(sqlite_vm *pVm, int i, const char *zVal, int len, int copy){
- Vdbe *p = (Vdbe*)pVm;
- if( p->magic!=VDBE_MAGIC_RUN || p->pc!=0 ){
- return SQLITE_MISUSE;
- }
- if( i<1 || i>p->nVar ){
- return SQLITE_RANGE;
- }
- i--;
- if( p->abVar[i] ){
- sqliteFree(p->azVar[i]);
- }
- if( zVal==0 ){
- copy = 0;
- len = 0;
- }
- if( len<0 ){
- len = strlen(zVal)+1;
- }
- if( copy ){
- p->azVar[i] = sqliteMalloc( len );
- if( p->azVar[i] ) memcpy(p->azVar[i], zVal, len);
- }else{
- p->azVar[i] = (char*)zVal;
- }
- p->abVar[i] = copy;
- p->anVar[i] = len;
- return SQLITE_OK;
-}
-
-
-/*
-** Delete an entire VDBE.
-*/
-void sqliteVdbeDelete(Vdbe *p){
- int i;
- if( p==0 ) return;
- Cleanup(p);
- if( p->pPrev ){
- p->pPrev->pNext = p->pNext;
- }else{
- assert( p->db->pVdbe==p );
- p->db->pVdbe = p->pNext;
- }
- if( p->pNext ){
- p->pNext->pPrev = p->pPrev;
- }
- p->pPrev = p->pNext = 0;
- if( p->nOpAlloc==0 ){
- p->aOp = 0;
- p->nOp = 0;
- }
- for(i=0; i<p->nOp; i++){
- if( p->aOp[i].p3type==P3_DYNAMIC ){
- sqliteFree(p->aOp[i].p3);
- }
- }
- for(i=0; i<p->nVar; i++){
- if( p->abVar[i] ) sqliteFree(p->azVar[i]);
- }
- sqliteFree(p->aOp);
- sqliteFree(p->aLabel);
- sqliteFree(p->aStack);
- p->magic = VDBE_MAGIC_DEAD;
- sqliteFree(p);
-}
-
-/*
-** Convert an integer in between the native integer format and
-** the bigEndian format used as the record number for tables.
-**
-** The bigEndian format (most significant byte first) is used for
-** record numbers so that records will sort into the correct order
-** even though memcmp() is used to compare the keys. On machines
-** whose native integer format is little endian (ex: i486) the
-** order of bytes is reversed. On native big-endian machines
-** (ex: Alpha, Sparc, Motorola) the byte order is the same.
-**
-** This function is its own inverse. In other words
-**
-** X == byteSwap(byteSwap(X))
-*/
-int sqliteVdbeByteSwap(int x){
- union {
- char zBuf[sizeof(int)];
- int i;
- } ux;
- ux.zBuf[3] = x&0xff;
- ux.zBuf[2] = (x>>8)&0xff;
- ux.zBuf[1] = (x>>16)&0xff;
- ux.zBuf[0] = (x>>24)&0xff;
- return ux.i;
-}
-
-/*
-** If a MoveTo operation is pending on the given cursor, then do that
-** MoveTo now. Return an error code. If no MoveTo is pending, this
-** routine does nothing and returns SQLITE_OK.
-*/
-int sqliteVdbeCursorMoveto(Cursor *p){
- if( p->deferredMoveto ){
- int res;
- extern int sqlite_search_count;
- sqliteBtreeMoveto(p->pCursor, (char*)&p->movetoTarget, sizeof(int), &res);
- p->lastRecno = keyToInt(p->movetoTarget);
- p->recnoIsValid = res==0;
- if( res<0 ){
- sqliteBtreeNext(p->pCursor, &res);
- }
- sqlite_search_count++;
- p->deferredMoveto = 0;
- }
- return SQLITE_OK;
-}
diff --git a/ext/sqlite/libsqlite/src/where.c b/ext/sqlite/libsqlite/src/where.c
deleted file mode 100644
index a3a31a2e84..0000000000
--- a/ext/sqlite/libsqlite/src/where.c
+++ /dev/null
@@ -1,1204 +0,0 @@
-/*
-** 2001 September 15
-**
-** The author disclaims copyright to this source code. In place of
-** a legal notice, here is a blessing:
-**
-** May you do good and not evil.
-** May you find forgiveness for yourself and forgive others.
-** May you share freely, never taking more than you give.
-**
-*************************************************************************
-** This module contains C code that generates VDBE code used to process
-** the WHERE clause of SQL statements.
-**
-** $Id$
-*/
-#include "sqliteInt.h"
-
-/*
-** The query generator uses an array of instances of this structure to
-** help it analyze the subexpressions of the WHERE clause. Each WHERE
-** clause subexpression is separated from the others by an AND operator.
-*/
-typedef struct ExprInfo ExprInfo;
-struct ExprInfo {
- Expr *p; /* Pointer to the subexpression */
- u8 indexable; /* True if this subexprssion is usable by an index */
- short int idxLeft; /* p->pLeft is a column in this table number. -1 if
- ** p->pLeft is not the column of any table */
- short int idxRight; /* p->pRight is a column in this table number. -1 if
- ** p->pRight is not the column of any table */
- unsigned prereqLeft; /* Bitmask of tables referenced by p->pLeft */
- unsigned prereqRight; /* Bitmask of tables referenced by p->pRight */
- unsigned prereqAll; /* Bitmask of tables referenced by p */
-};
-
-/*
-** An instance of the following structure keeps track of a mapping
-** between VDBE cursor numbers and bitmasks. The VDBE cursor numbers
-** are small integers contained in SrcList_item.iCursor and Expr.iTable
-** fields. For any given WHERE clause, we want to track which cursors
-** are being used, so we assign a single bit in a 32-bit word to track
-** that cursor. Then a 32-bit integer is able to show the set of all
-** cursors being used.
-*/
-typedef struct ExprMaskSet ExprMaskSet;
-struct ExprMaskSet {
- int n; /* Number of assigned cursor values */
- int ix[32]; /* Cursor assigned to each bit */
-};
-
-/*
-** Determine the number of elements in an array.
-*/
-#define ARRAYSIZE(X) (sizeof(X)/sizeof(X[0]))
-
-/*
-** This routine is used to divide the WHERE expression into subexpressions
-** separated by the AND operator.
-**
-** aSlot[] is an array of subexpressions structures.
-** There are nSlot spaces left in this array. This routine attempts to
-** split pExpr into subexpressions and fills aSlot[] with those subexpressions.
-** The return value is the number of slots filled.
-*/
-static int exprSplit(int nSlot, ExprInfo *aSlot, Expr *pExpr){
- int cnt = 0;
- if( pExpr==0 || nSlot<1 ) return 0;
- if( nSlot==1 || pExpr->op!=TK_AND ){
- aSlot[0].p = pExpr;
- return 1;
- }
- if( pExpr->pLeft->op!=TK_AND ){
- aSlot[0].p = pExpr->pLeft;
- cnt = 1 + exprSplit(nSlot-1, &aSlot[1], pExpr->pRight);
- }else{
- cnt = exprSplit(nSlot, aSlot, pExpr->pLeft);
- cnt += exprSplit(nSlot-cnt, &aSlot[cnt], pExpr->pRight);
- }
- return cnt;
-}
-
-/*
-** Initialize an expression mask set
-*/
-#define initMaskSet(P) memset(P, 0, sizeof(*P))
-
-/*
-** Return the bitmask for the given cursor. Assign a new bitmask
-** if this is the first time the cursor has been seen.
-*/
-static int getMask(ExprMaskSet *pMaskSet, int iCursor){
- int i;
- for(i=0; i<pMaskSet->n; i++){
- if( pMaskSet->ix[i]==iCursor ) return 1<<i;
- }
- if( i==pMaskSet->n && i<ARRAYSIZE(pMaskSet->ix) ){
- pMaskSet->n++;
- pMaskSet->ix[i] = iCursor;
- return 1<<i;
- }
- return 0;
-}
-
-/*
-** Destroy an expression mask set
-*/
-#define freeMaskSet(P) /* NO-OP */
-
-/*
-** This routine walks (recursively) an expression tree and generates
-** a bitmask indicating which tables are used in that expression
-** tree.
-**
-** In order for this routine to work, the calling function must have
-** previously invoked sqliteExprResolveIds() on the expression. See
-** the header comment on that routine for additional information.
-** The sqliteExprResolveIds() routines looks for column names and
-** sets their opcodes to TK_COLUMN and their Expr.iTable fields to
-** the VDBE cursor number of the table.
-*/
-static int exprTableUsage(ExprMaskSet *pMaskSet, Expr *p){
- unsigned int mask = 0;
- if( p==0 ) return 0;
- if( p->op==TK_COLUMN ){
- return getMask(pMaskSet, p->iTable);
- }
- if( p->pRight ){
- mask = exprTableUsage(pMaskSet, p->pRight);
- }
- if( p->pLeft ){
- mask |= exprTableUsage(pMaskSet, p->pLeft);
- }
- if( p->pList ){
- int i;
- for(i=0; i<p->pList->nExpr; i++){
- mask |= exprTableUsage(pMaskSet, p->pList->a[i].pExpr);
- }
- }
- return mask;
-}
-
-/*
-** Return TRUE if the given operator is one of the operators that is
-** allowed for an indexable WHERE clause. The allowed operators are
-** "=", "<", ">", "<=", ">=", and "IN".
-*/
-static int allowedOp(int op){
- switch( op ){
- case TK_LT:
- case TK_LE:
- case TK_GT:
- case TK_GE:
- case TK_EQ:
- case TK_IN:
- return 1;
- default:
- return 0;
- }
-}
-
-/*
-** The input to this routine is an ExprInfo structure with only the
-** "p" field filled in. The job of this routine is to analyze the
-** subexpression and populate all the other fields of the ExprInfo
-** structure.
-*/
-static void exprAnalyze(ExprMaskSet *pMaskSet, ExprInfo *pInfo){
- Expr *pExpr = pInfo->p;
- pInfo->prereqLeft = exprTableUsage(pMaskSet, pExpr->pLeft);
- pInfo->prereqRight = exprTableUsage(pMaskSet, pExpr->pRight);
- pInfo->prereqAll = exprTableUsage(pMaskSet, pExpr);
- pInfo->indexable = 0;
- pInfo->idxLeft = -1;
- pInfo->idxRight = -1;
- if( allowedOp(pExpr->op) && (pInfo->prereqRight & pInfo->prereqLeft)==0 ){
- if( pExpr->pRight && pExpr->pRight->op==TK_COLUMN ){
- pInfo->idxRight = pExpr->pRight->iTable;
- pInfo->indexable = 1;
- }
- if( pExpr->pLeft->op==TK_COLUMN ){
- pInfo->idxLeft = pExpr->pLeft->iTable;
- pInfo->indexable = 1;
- }
- }
-}
-
-/*
-** pOrderBy is an ORDER BY clause from a SELECT statement. pTab is the
-** left-most table in the FROM clause of that same SELECT statement and
-** the table has a cursor number of "base".
-**
-** This routine attempts to find an index for pTab that generates the
-** correct record sequence for the given ORDER BY clause. The return value
-** is a pointer to an index that does the job. NULL is returned if the
-** table has no index that will generate the correct sort order.
-**
-** If there are two or more indices that generate the correct sort order
-** and pPreferredIdx is one of those indices, then return pPreferredIdx.
-**
-** nEqCol is the number of columns of pPreferredIdx that are used as
-** equality constraints. Any index returned must have exactly this same
-** set of columns. The ORDER BY clause only matches index columns beyond the
-** the first nEqCol columns.
-**
-** All terms of the ORDER BY clause must be either ASC or DESC. The
-** *pbRev value is set to 1 if the ORDER BY clause is all DESC and it is
-** set to 0 if the ORDER BY clause is all ASC.
-*/
-static Index *findSortingIndex(
- Table *pTab, /* The table to be sorted */
- int base, /* Cursor number for pTab */
- ExprList *pOrderBy, /* The ORDER BY clause */
- Index *pPreferredIdx, /* Use this index, if possible and not NULL */
- int nEqCol, /* Number of index columns used with == constraints */
- int *pbRev /* Set to 1 if ORDER BY is DESC */
-){
- int i, j;
- Index *pMatch;
- Index *pIdx;
- int sortOrder;
-
- assert( pOrderBy!=0 );
- assert( pOrderBy->nExpr>0 );
- sortOrder = pOrderBy->a[0].sortOrder & SQLITE_SO_DIRMASK;
- for(i=0; i<pOrderBy->nExpr; i++){
- Expr *p;
- if( (pOrderBy->a[i].sortOrder & SQLITE_SO_DIRMASK)!=sortOrder ){
- /* Indices can only be used if all ORDER BY terms are either
- ** DESC or ASC. Indices cannot be used on a mixture. */
- return 0;
- }
- if( (pOrderBy->a[i].sortOrder & SQLITE_SO_TYPEMASK)!=SQLITE_SO_UNK ){
- /* Do not sort by index if there is a COLLATE clause */
- return 0;
- }
- p = pOrderBy->a[i].pExpr;
- if( p->op!=TK_COLUMN || p->iTable!=base ){
- /* Can not use an index sort on anything that is not a column in the
- ** left-most table of the FROM clause */
- return 0;
- }
- }
-
- /* If we get this far, it means the ORDER BY clause consists only of
- ** ascending columns in the left-most table of the FROM clause. Now
- ** check for a matching index.
- */
- pMatch = 0;
- for(pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext){
- int nExpr = pOrderBy->nExpr;
- if( pIdx->nColumn < nEqCol || pIdx->nColumn < nExpr ) continue;
- for(i=j=0; i<nEqCol; i++){
- if( pPreferredIdx->aiColumn[i]!=pIdx->aiColumn[i] ) break;
- if( j<nExpr && pOrderBy->a[j].pExpr->iColumn==pIdx->aiColumn[i] ){ j++; }
- }
- if( i<nEqCol ) continue;
- for(i=0; i+j<nExpr; i++){
- if( pOrderBy->a[i+j].pExpr->iColumn!=pIdx->aiColumn[i+nEqCol] ) break;
- }
- if( i+j>=nExpr ){
- pMatch = pIdx;
- if( pIdx==pPreferredIdx ) break;
- }
- }
- if( pMatch && pbRev ){
- *pbRev = sortOrder==SQLITE_SO_DESC;
- }
- return pMatch;
-}
-
-/*
-** Generate the beginning of the loop used for WHERE clause processing.
-** The return value is a pointer to an (opaque) structure that contains
-** information needed to terminate the loop. Later, the calling routine
-** should invoke sqliteWhereEnd() with the return value of this function
-** in order to complete the WHERE clause processing.
-**
-** If an error occurs, this routine returns NULL.
-**
-** The basic idea is to do a nested loop, one loop for each table in
-** the FROM clause of a select. (INSERT and UPDATE statements are the
-** same as a SELECT with only a single table in the FROM clause.) For
-** example, if the SQL is this:
-**
-** SELECT * FROM t1, t2, t3 WHERE ...;
-**
-** Then the code generated is conceptually like the following:
-**
-** foreach row1 in t1 do \ Code generated
-** foreach row2 in t2 do |-- by sqliteWhereBegin()
-** foreach row3 in t3 do /
-** ...
-** end \ Code generated
-** end |-- by sqliteWhereEnd()
-** end /
-**
-** There are Btree cursors associated with each table. t1 uses cursor
-** number pTabList->a[0].iCursor. t2 uses the cursor pTabList->a[1].iCursor.
-** And so forth. This routine generates code to open those VDBE cursors
-** and sqliteWhereEnd() generates the code to close them.
-**
-** If the WHERE clause is empty, the foreach loops must each scan their
-** entire tables. Thus a three-way join is an O(N^3) operation. But if
-** the tables have indices and there are terms in the WHERE clause that
-** refer to those indices, a complete table scan can be avoided and the
-** code will run much faster. Most of the work of this routine is checking
-** to see if there are indices that can be used to speed up the loop.
-**
-** Terms of the WHERE clause are also used to limit which rows actually
-** make it to the "..." in the middle of the loop. After each "foreach",
-** terms of the WHERE clause that use only terms in that loop and outer
-** loops are evaluated and if false a jump is made around all subsequent
-** inner loops (or around the "..." if the test occurs within the inner-
-** most loop)
-**
-** OUTER JOINS
-**
-** An outer join of tables t1 and t2 is conceptally coded as follows:
-**
-** foreach row1 in t1 do
-** flag = 0
-** foreach row2 in t2 do
-** start:
-** ...
-** flag = 1
-** end
-** if flag==0 then
-** move the row2 cursor to a null row
-** goto start
-** fi
-** end
-**
-** ORDER BY CLAUSE PROCESSING
-**
-** *ppOrderBy is a pointer to the ORDER BY clause of a SELECT statement,
-** if there is one. If there is no ORDER BY clause or if this routine
-** is called from an UPDATE or DELETE statement, then ppOrderBy is NULL.
-**
-** If an index can be used so that the natural output order of the table
-** scan is correct for the ORDER BY clause, then that index is used and
-** *ppOrderBy is set to NULL. This is an optimization that prevents an
-** unnecessary sort of the result set if an index appropriate for the
-** ORDER BY clause already exists.
-**
-** If the where clause loops cannot be arranged to provide the correct
-** output order, then the *ppOrderBy is unchanged.
-*/
-WhereInfo *sqliteWhereBegin(
- Parse *pParse, /* The parser context */
- SrcList *pTabList, /* A list of all tables to be scanned */
- Expr *pWhere, /* The WHERE clause */
- int pushKey, /* If TRUE, leave the table key on the stack */
- ExprList **ppOrderBy /* An ORDER BY clause, or NULL */
-){
- int i; /* Loop counter */
- WhereInfo *pWInfo; /* Will become the return value of this function */
- Vdbe *v = pParse->pVdbe; /* The virtual database engine */
- int brk, cont = 0; /* Addresses used during code generation */
- int nExpr; /* Number of subexpressions in the WHERE clause */
- int loopMask; /* One bit set for each outer loop */
- int haveKey; /* True if KEY is on the stack */
- ExprMaskSet maskSet; /* The expression mask set */
- int iDirectEq[32]; /* Term of the form ROWID==X for the N-th table */
- int iDirectLt[32]; /* Term of the form ROWID<X or ROWID<=X */
- int iDirectGt[32]; /* Term of the form ROWID>X or ROWID>=X */
- ExprInfo aExpr[101]; /* The WHERE clause is divided into these expressions */
-
- /* pushKey is only allowed if there is a single table (as in an INSERT or
- ** UPDATE statement)
- */
- assert( pushKey==0 || pTabList->nSrc==1 );
-
- /* Split the WHERE clause into separate subexpressions where each
- ** subexpression is separated by an AND operator. If the aExpr[]
- ** array fills up, the last entry might point to an expression which
- ** contains additional unfactored AND operators.
- */
- initMaskSet(&maskSet);
- memset(aExpr, 0, sizeof(aExpr));
- nExpr = exprSplit(ARRAYSIZE(aExpr), aExpr, pWhere);
- if( nExpr==ARRAYSIZE(aExpr) ){
- sqliteErrorMsg(pParse, "WHERE clause too complex - no more "
- "than %d terms allowed", (int)ARRAYSIZE(aExpr)-1);
- return 0;
- }
-
- /* Allocate and initialize the WhereInfo structure that will become the
- ** return value.
- */
- pWInfo = sqliteMalloc( sizeof(WhereInfo) + pTabList->nSrc*sizeof(WhereLevel));
- if( sqlite_malloc_failed ){
- sqliteFree(pWInfo);
- return 0;
- }
- pWInfo->pParse = pParse;
- pWInfo->pTabList = pTabList;
- pWInfo->peakNTab = pWInfo->savedNTab = pParse->nTab;
- pWInfo->iBreak = sqliteVdbeMakeLabel(v);
-
- /* Special case: a WHERE clause that is constant. Evaluate the
- ** expression and either jump over all of the code or fall thru.
- */
- if( pWhere && (pTabList->nSrc==0 || sqliteExprIsConstant(pWhere)) ){
- sqliteExprIfFalse(pParse, pWhere, pWInfo->iBreak, 1);
- pWhere = 0;
- }
-
- /* Analyze all of the subexpressions.
- */
- for(i=0; i<nExpr; i++){
- exprAnalyze(&maskSet, &aExpr[i]);
-
- /* If we are executing a trigger body, remove all references to
- ** new.* and old.* tables from the prerequisite masks.
- */
- if( pParse->trigStack ){
- int x;
- if( (x = pParse->trigStack->newIdx) >= 0 ){
- int mask = ~getMask(&maskSet, x);
- aExpr[i].prereqRight &= mask;
- aExpr[i].prereqLeft &= mask;
- aExpr[i].prereqAll &= mask;
- }
- if( (x = pParse->trigStack->oldIdx) >= 0 ){
- int mask = ~getMask(&maskSet, x);
- aExpr[i].prereqRight &= mask;
- aExpr[i].prereqLeft &= mask;
- aExpr[i].prereqAll &= mask;
- }
- }
- }
-
- /* Figure out what index to use (if any) for each nested loop.
- ** Make pWInfo->a[i].pIdx point to the index to use for the i-th nested
- ** loop where i==0 is the outer loop and i==pTabList->nSrc-1 is the inner
- ** loop.
- **
- ** If terms exist that use the ROWID of any table, then set the
- ** iDirectEq[], iDirectLt[], or iDirectGt[] elements for that table
- ** to the index of the term containing the ROWID. We always prefer
- ** to use a ROWID which can directly access a table rather than an
- ** index which requires reading an index first to get the rowid then
- ** doing a second read of the actual database table.
- **
- ** Actually, if there are more than 32 tables in the join, only the
- ** first 32 tables are candidates for indices. This is (again) due
- ** to the limit of 32 bits in an integer bitmask.
- */
- loopMask = 0;
- for(i=0; i<pTabList->nSrc && i<ARRAYSIZE(iDirectEq); i++){
- int j;
- int iCur = pTabList->a[i].iCursor; /* The cursor for this table */
- int mask = getMask(&maskSet, iCur); /* Cursor mask for this table */
- Table *pTab = pTabList->a[i].pTab;
- Index *pIdx;
- Index *pBestIdx = 0;
- int bestScore = 0;
-
- /* Check to see if there is an expression that uses only the
- ** ROWID field of this table. For terms of the form ROWID==expr
- ** set iDirectEq[i] to the index of the term. For terms of the
- ** form ROWID<expr or ROWID<=expr set iDirectLt[i] to the term index.
- ** For terms like ROWID>expr or ROWID>=expr set iDirectGt[i].
- **
- ** (Added:) Treat ROWID IN expr like ROWID=expr.
- */
- pWInfo->a[i].iCur = -1;
- iDirectEq[i] = -1;
- iDirectLt[i] = -1;
- iDirectGt[i] = -1;
- for(j=0; j<nExpr; j++){
- if( aExpr[j].idxLeft==iCur && aExpr[j].p->pLeft->iColumn<0
- && (aExpr[j].prereqRight & loopMask)==aExpr[j].prereqRight ){
- switch( aExpr[j].p->op ){
- case TK_IN:
- case TK_EQ: iDirectEq[i] = j; break;
- case TK_LE:
- case TK_LT: iDirectLt[i] = j; break;
- case TK_GE:
- case TK_GT: iDirectGt[i] = j; break;
- }
- }
- if( aExpr[j].idxRight==iCur && aExpr[j].p->pRight->iColumn<0
- && (aExpr[j].prereqLeft & loopMask)==aExpr[j].prereqLeft ){
- switch( aExpr[j].p->op ){
- case TK_EQ: iDirectEq[i] = j; break;
- case TK_LE:
- case TK_LT: iDirectGt[i] = j; break;
- case TK_GE:
- case TK_GT: iDirectLt[i] = j; break;
- }
- }
- }
- if( iDirectEq[i]>=0 ){
- loopMask |= mask;
- pWInfo->a[i].pIdx = 0;
- continue;
- }
-
- /* Do a search for usable indices. Leave pBestIdx pointing to
- ** the "best" index. pBestIdx is left set to NULL if no indices
- ** are usable.
- **
- ** The best index is determined as follows. For each of the
- ** left-most terms that is fixed by an equality operator, add
- ** 8 to the score. The right-most term of the index may be
- ** constrained by an inequality. Add 1 if for an "x<..." constraint
- ** and add 2 for an "x>..." constraint. Chose the index that
- ** gives the best score.
- **
- ** This scoring system is designed so that the score can later be
- ** used to determine how the index is used. If the score&7 is 0
- ** then all constraints are equalities. If score&1 is not 0 then
- ** there is an inequality used as a termination key. (ex: "x<...")
- ** If score&2 is not 0 then there is an inequality used as the
- ** start key. (ex: "x>..."). A score or 4 is the special case
- ** of an IN operator constraint. (ex: "x IN ...").
- **
- ** The IN operator (as in "<expr> IN (...)") is treated the same as
- ** an equality comparison except that it can only be used on the
- ** left-most column of an index and other terms of the WHERE clause
- ** cannot be used in conjunction with the IN operator to help satisfy
- ** other columns of the index.
- */
- for(pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext){
- int eqMask = 0; /* Index columns covered by an x=... term */
- int ltMask = 0; /* Index columns covered by an x<... term */
- int gtMask = 0; /* Index columns covered by an x>... term */
- int inMask = 0; /* Index columns covered by an x IN .. term */
- int nEq, m, score;
-
- if( pIdx->nColumn>32 ) continue; /* Ignore indices too many columns */
- for(j=0; j<nExpr; j++){
- if( aExpr[j].idxLeft==iCur
- && (aExpr[j].prereqRight & loopMask)==aExpr[j].prereqRight ){
- int iColumn = aExpr[j].p->pLeft->iColumn;
- int k;
- for(k=0; k<pIdx->nColumn; k++){
- if( pIdx->aiColumn[k]==iColumn ){
- switch( aExpr[j].p->op ){
- case TK_IN: {
- if( k==0 ) inMask |= 1;
- break;
- }
- case TK_EQ: {
- eqMask |= 1<<k;
- break;
- }
- case TK_LE:
- case TK_LT: {
- ltMask |= 1<<k;
- break;
- }
- case TK_GE:
- case TK_GT: {
- gtMask |= 1<<k;
- break;
- }
- default: {
- /* CANT_HAPPEN */
- assert( 0 );
- break;
- }
- }
- break;
- }
- }
- }
- if( aExpr[j].idxRight==iCur
- && (aExpr[j].prereqLeft & loopMask)==aExpr[j].prereqLeft ){
- int iColumn = aExpr[j].p->pRight->iColumn;
- int k;
- for(k=0; k<pIdx->nColumn; k++){
- if( pIdx->aiColumn[k]==iColumn ){
- switch( aExpr[j].p->op ){
- case TK_EQ: {
- eqMask |= 1<<k;
- break;
- }
- case TK_LE:
- case TK_LT: {
- gtMask |= 1<<k;
- break;
- }
- case TK_GE:
- case TK_GT: {
- ltMask |= 1<<k;
- break;
- }
- default: {
- /* CANT_HAPPEN */
- assert( 0 );
- break;
- }
- }
- break;
- }
- }
- }
- }
-
- /* The following loop ends with nEq set to the number of columns
- ** on the left of the index with == constraints.
- */
- for(nEq=0; nEq<pIdx->nColumn; nEq++){
- m = (1<<(nEq+1))-1;
- if( (m & eqMask)!=m ) break;
- }
- score = nEq*8; /* Base score is 8 times number of == constraints */
- m = 1<<nEq;
- if( m & ltMask ) score++; /* Increase score for a < constraint */
- if( m & gtMask ) score+=2; /* Increase score for a > constraint */
- if( score==0 && inMask ) score = 4; /* Default score for IN constraint */
- if( score>bestScore ){
- pBestIdx = pIdx;
- bestScore = score;
- }
- }
- pWInfo->a[i].pIdx = pBestIdx;
- pWInfo->a[i].score = bestScore;
- pWInfo->a[i].bRev = 0;
- loopMask |= mask;
- if( pBestIdx ){
- pWInfo->a[i].iCur = pParse->nTab++;
- pWInfo->peakNTab = pParse->nTab;
- }
- }
-
- /* Check to see if the ORDER BY clause is or can be satisfied by the
- ** use of an index on the first table.
- */
- if( ppOrderBy && *ppOrderBy && pTabList->nSrc>0 ){
- Index *pSortIdx;
- Index *pIdx;
- Table *pTab;
- int bRev = 0;
-
- pTab = pTabList->a[0].pTab;
- pIdx = pWInfo->a[0].pIdx;
- if( pIdx && pWInfo->a[0].score==4 ){
- /* If there is already an IN index on the left-most table,
- ** it will not give the correct sort order.
- ** So, pretend that no suitable index is found.
- */
- pSortIdx = 0;
- }else if( iDirectEq[0]>=0 || iDirectLt[0]>=0 || iDirectGt[0]>=0 ){
- /* If the left-most column is accessed using its ROWID, then do
- ** not try to sort by index.
- */
- pSortIdx = 0;
- }else{
- int nEqCol = (pWInfo->a[0].score+4)/8;
- pSortIdx = findSortingIndex(pTab, pTabList->a[0].iCursor,
- *ppOrderBy, pIdx, nEqCol, &bRev);
- }
- if( pSortIdx && (pIdx==0 || pIdx==pSortIdx) ){
- if( pIdx==0 ){
- pWInfo->a[0].pIdx = pSortIdx;
- pWInfo->a[0].iCur = pParse->nTab++;
- pWInfo->peakNTab = pParse->nTab;
- }
- pWInfo->a[0].bRev = bRev;
- *ppOrderBy = 0;
- }
- }
-
- /* Open all tables in the pTabList and all indices used by those tables.
- */
- for(i=0; i<pTabList->nSrc; i++){
- Table *pTab;
- Index *pIx;
-
- pTab = pTabList->a[i].pTab;
- if( pTab->isTransient || pTab->pSelect ) continue;
- sqliteVdbeAddOp(v, OP_Integer, pTab->iDb, 0);
- sqliteVdbeOp3(v, OP_OpenRead, pTabList->a[i].iCursor, pTab->tnum,
- pTab->zName, P3_STATIC);
- sqliteCodeVerifySchema(pParse, pTab->iDb);
- if( (pIx = pWInfo->a[i].pIdx)!=0 ){
- sqliteVdbeAddOp(v, OP_Integer, pIx->iDb, 0);
- sqliteVdbeOp3(v, OP_OpenRead, pWInfo->a[i].iCur, pIx->tnum, pIx->zName,0);
- }
- }
-
- /* Generate the code to do the search
- */
- loopMask = 0;
- for(i=0; i<pTabList->nSrc; i++){
- int j, k;
- int iCur = pTabList->a[i].iCursor;
- Index *pIdx;
- WhereLevel *pLevel = &pWInfo->a[i];
-
- /* If this is the right table of a LEFT OUTER JOIN, allocate and
- ** initialize a memory cell that records if this table matches any
- ** row of the left table of the join.
- */
- if( i>0 && (pTabList->a[i-1].jointype & JT_LEFT)!=0 ){
- if( !pParse->nMem ) pParse->nMem++;
- pLevel->iLeftJoin = pParse->nMem++;
- sqliteVdbeAddOp(v, OP_String, 0, 0);
- sqliteVdbeAddOp(v, OP_MemStore, pLevel->iLeftJoin, 1);
- }
-
- pIdx = pLevel->pIdx;
- pLevel->inOp = OP_Noop;
- if( i<ARRAYSIZE(iDirectEq) && iDirectEq[i]>=0 ){
- /* Case 1: We can directly reference a single row using an
- ** equality comparison against the ROWID field. Or
- ** we reference multiple rows using a "rowid IN (...)"
- ** construct.
- */
- k = iDirectEq[i];
- assert( k<nExpr );
- assert( aExpr[k].p!=0 );
- assert( aExpr[k].idxLeft==iCur || aExpr[k].idxRight==iCur );
- brk = pLevel->brk = sqliteVdbeMakeLabel(v);
- if( aExpr[k].idxLeft==iCur ){
- Expr *pX = aExpr[k].p;
- if( pX->op!=TK_IN ){
- sqliteExprCode(pParse, aExpr[k].p->pRight);
- }else if( pX->pList ){
- sqliteVdbeAddOp(v, OP_SetFirst, pX->iTable, brk);
- pLevel->inOp = OP_SetNext;
- pLevel->inP1 = pX->iTable;
- pLevel->inP2 = sqliteVdbeCurrentAddr(v);
- }else{
- assert( pX->pSelect );
- sqliteVdbeAddOp(v, OP_Rewind, pX->iTable, brk);
- sqliteVdbeAddOp(v, OP_KeyAsData, pX->iTable, 1);
- pLevel->inP2 = sqliteVdbeAddOp(v, OP_FullKey, pX->iTable, 0);
- pLevel->inOp = OP_Next;
- pLevel->inP1 = pX->iTable;
- }
- }else{
- sqliteExprCode(pParse, aExpr[k].p->pLeft);
- }
- aExpr[k].p = 0;
- cont = pLevel->cont = sqliteVdbeMakeLabel(v);
- sqliteVdbeAddOp(v, OP_MustBeInt, 1, brk);
- haveKey = 0;
- sqliteVdbeAddOp(v, OP_NotExists, iCur, brk);
- pLevel->op = OP_Noop;
- }else if( pIdx!=0 && pLevel->score>0 && pLevel->score%4==0 ){
- /* Case 2: There is an index and all terms of the WHERE clause that
- ** refer to the index use the "==" or "IN" operators.
- */
- int start;
- int testOp;
- int nColumn = (pLevel->score+4)/8;
- brk = pLevel->brk = sqliteVdbeMakeLabel(v);
- for(j=0; j<nColumn; j++){
- for(k=0; k<nExpr; k++){
- Expr *pX = aExpr[k].p;
- if( pX==0 ) continue;
- if( aExpr[k].idxLeft==iCur
- && (aExpr[k].prereqRight & loopMask)==aExpr[k].prereqRight
- && pX->pLeft->iColumn==pIdx->aiColumn[j]
- ){
- if( pX->op==TK_EQ ){
- sqliteExprCode(pParse, pX->pRight);
- aExpr[k].p = 0;
- break;
- }
- if( pX->op==TK_IN && nColumn==1 ){
- if( pX->pList ){
- sqliteVdbeAddOp(v, OP_SetFirst, pX->iTable, brk);
- pLevel->inOp = OP_SetNext;
- pLevel->inP1 = pX->iTable;
- pLevel->inP2 = sqliteVdbeCurrentAddr(v);
- }else{
- assert( pX->pSelect );
- sqliteVdbeAddOp(v, OP_Rewind, pX->iTable, brk);
- sqliteVdbeAddOp(v, OP_KeyAsData, pX->iTable, 1);
- pLevel->inP2 = sqliteVdbeAddOp(v, OP_FullKey, pX->iTable, 0);
- pLevel->inOp = OP_Next;
- pLevel->inP1 = pX->iTable;
- }
- aExpr[k].p = 0;
- break;
- }
- }
- if( aExpr[k].idxRight==iCur
- && aExpr[k].p->op==TK_EQ
- && (aExpr[k].prereqLeft & loopMask)==aExpr[k].prereqLeft
- && aExpr[k].p->pRight->iColumn==pIdx->aiColumn[j]
- ){
- sqliteExprCode(pParse, aExpr[k].p->pLeft);
- aExpr[k].p = 0;
- break;
- }
- }
- }
- pLevel->iMem = pParse->nMem++;
- cont = pLevel->cont = sqliteVdbeMakeLabel(v);
- sqliteVdbeAddOp(v, OP_NotNull, -nColumn, sqliteVdbeCurrentAddr(v)+3);
- sqliteVdbeAddOp(v, OP_Pop, nColumn, 0);
- sqliteVdbeAddOp(v, OP_Goto, 0, brk);
- sqliteVdbeAddOp(v, OP_MakeKey, nColumn, 0);
- sqliteAddIdxKeyType(v, pIdx);
- if( nColumn==pIdx->nColumn || pLevel->bRev ){
- sqliteVdbeAddOp(v, OP_MemStore, pLevel->iMem, 0);
- testOp = OP_IdxGT;
- }else{
- sqliteVdbeAddOp(v, OP_Dup, 0, 0);
- sqliteVdbeAddOp(v, OP_IncrKey, 0, 0);
- sqliteVdbeAddOp(v, OP_MemStore, pLevel->iMem, 1);
- testOp = OP_IdxGE;
- }
- if( pLevel->bRev ){
- /* Scan in reverse order */
- sqliteVdbeAddOp(v, OP_IncrKey, 0, 0);
- sqliteVdbeAddOp(v, OP_MoveLt, pLevel->iCur, brk);
- start = sqliteVdbeAddOp(v, OP_MemLoad, pLevel->iMem, 0);
- sqliteVdbeAddOp(v, OP_IdxLT, pLevel->iCur, brk);
- pLevel->op = OP_Prev;
- }else{
- /* Scan in the forward order */
- sqliteVdbeAddOp(v, OP_MoveTo, pLevel->iCur, brk);
- start = sqliteVdbeAddOp(v, OP_MemLoad, pLevel->iMem, 0);
- sqliteVdbeAddOp(v, testOp, pLevel->iCur, brk);
- pLevel->op = OP_Next;
- }
- sqliteVdbeAddOp(v, OP_RowKey, pLevel->iCur, 0);
- sqliteVdbeAddOp(v, OP_IdxIsNull, nColumn, cont);
- sqliteVdbeAddOp(v, OP_IdxRecno, pLevel->iCur, 0);
- if( i==pTabList->nSrc-1 && pushKey ){
- haveKey = 1;
- }else{
- sqliteVdbeAddOp(v, OP_MoveTo, iCur, 0);
- haveKey = 0;
- }
- pLevel->p1 = pLevel->iCur;
- pLevel->p2 = start;
- }else if( i<ARRAYSIZE(iDirectLt) && (iDirectLt[i]>=0 || iDirectGt[i]>=0) ){
- /* Case 3: We have an inequality comparison against the ROWID field.
- */
- int testOp = OP_Noop;
- int start;
-
- brk = pLevel->brk = sqliteVdbeMakeLabel(v);
- cont = pLevel->cont = sqliteVdbeMakeLabel(v);
- if( iDirectGt[i]>=0 ){
- k = iDirectGt[i];
- assert( k<nExpr );
- assert( aExpr[k].p!=0 );
- assert( aExpr[k].idxLeft==iCur || aExpr[k].idxRight==iCur );
- if( aExpr[k].idxLeft==iCur ){
- sqliteExprCode(pParse, aExpr[k].p->pRight);
- }else{
- sqliteExprCode(pParse, aExpr[k].p->pLeft);
- }
- sqliteVdbeAddOp(v, OP_ForceInt,
- aExpr[k].p->op==TK_LT || aExpr[k].p->op==TK_GT, brk);
- sqliteVdbeAddOp(v, OP_MoveTo, iCur, brk);
- aExpr[k].p = 0;
- }else{
- sqliteVdbeAddOp(v, OP_Rewind, iCur, brk);
- }
- if( iDirectLt[i]>=0 ){
- k = iDirectLt[i];
- assert( k<nExpr );
- assert( aExpr[k].p!=0 );
- assert( aExpr[k].idxLeft==iCur || aExpr[k].idxRight==iCur );
- if( aExpr[k].idxLeft==iCur ){
- sqliteExprCode(pParse, aExpr[k].p->pRight);
- }else{
- sqliteExprCode(pParse, aExpr[k].p->pLeft);
- }
- /* sqliteVdbeAddOp(v, OP_MustBeInt, 0, sqliteVdbeCurrentAddr(v)+1); */
- pLevel->iMem = pParse->nMem++;
- sqliteVdbeAddOp(v, OP_MemStore, pLevel->iMem, 1);
- if( aExpr[k].p->op==TK_LT || aExpr[k].p->op==TK_GT ){
- testOp = OP_Ge;
- }else{
- testOp = OP_Gt;
- }
- aExpr[k].p = 0;
- }
- start = sqliteVdbeCurrentAddr(v);
- pLevel->op = OP_Next;
- pLevel->p1 = iCur;
- pLevel->p2 = start;
- if( testOp!=OP_Noop ){
- sqliteVdbeAddOp(v, OP_Recno, iCur, 0);
- sqliteVdbeAddOp(v, OP_MemLoad, pLevel->iMem, 0);
- sqliteVdbeAddOp(v, testOp, 0, brk);
- }
- haveKey = 0;
- }else if( pIdx==0 ){
- /* Case 4: There is no usable index. We must do a complete
- ** scan of the entire database table.
- */
- int start;
-
- brk = pLevel->brk = sqliteVdbeMakeLabel(v);
- cont = pLevel->cont = sqliteVdbeMakeLabel(v);
- sqliteVdbeAddOp(v, OP_Rewind, iCur, brk);
- start = sqliteVdbeCurrentAddr(v);
- pLevel->op = OP_Next;
- pLevel->p1 = iCur;
- pLevel->p2 = start;
- haveKey = 0;
- }else{
- /* Case 5: The WHERE clause term that refers to the right-most
- ** column of the index is an inequality. For example, if
- ** the index is on (x,y,z) and the WHERE clause is of the
- ** form "x=5 AND y<10" then this case is used. Only the
- ** right-most column can be an inequality - the rest must
- ** use the "==" operator.
- **
- ** This case is also used when there are no WHERE clause
- ** constraints but an index is selected anyway, in order
- ** to force the output order to conform to an ORDER BY.
- */
- int score = pLevel->score;
- int nEqColumn = score/8;
- int start;
- int leFlag, geFlag;
- int testOp;
-
- /* Evaluate the equality constraints
- */
- for(j=0; j<nEqColumn; j++){
- for(k=0; k<nExpr; k++){
- if( aExpr[k].p==0 ) continue;
- if( aExpr[k].idxLeft==iCur
- && aExpr[k].p->op==TK_EQ
- && (aExpr[k].prereqRight & loopMask)==aExpr[k].prereqRight
- && aExpr[k].p->pLeft->iColumn==pIdx->aiColumn[j]
- ){
- sqliteExprCode(pParse, aExpr[k].p->pRight);
- aExpr[k].p = 0;
- break;
- }
- if( aExpr[k].idxRight==iCur
- && aExpr[k].p->op==TK_EQ
- && (aExpr[k].prereqLeft & loopMask)==aExpr[k].prereqLeft
- && aExpr[k].p->pRight->iColumn==pIdx->aiColumn[j]
- ){
- sqliteExprCode(pParse, aExpr[k].p->pLeft);
- aExpr[k].p = 0;
- break;
- }
- }
- }
-
- /* Duplicate the equality term values because they will all be
- ** used twice: once to make the termination key and once to make the
- ** start key.
- */
- for(j=0; j<nEqColumn; j++){
- sqliteVdbeAddOp(v, OP_Dup, nEqColumn-1, 0);
- }
-
- /* Labels for the beginning and end of the loop
- */
- cont = pLevel->cont = sqliteVdbeMakeLabel(v);
- brk = pLevel->brk = sqliteVdbeMakeLabel(v);
-
- /* Generate the termination key. This is the key value that
- ** will end the search. There is no termination key if there
- ** are no equality terms and no "X<..." term.
- **
- ** 2002-Dec-04: On a reverse-order scan, the so-called "termination"
- ** key computed here really ends up being the start key.
- */
- if( (score & 1)!=0 ){
- for(k=0; k<nExpr; k++){
- Expr *pExpr = aExpr[k].p;
- if( pExpr==0 ) continue;
- if( aExpr[k].idxLeft==iCur
- && (pExpr->op==TK_LT || pExpr->op==TK_LE)
- && (aExpr[k].prereqRight & loopMask)==aExpr[k].prereqRight
- && pExpr->pLeft->iColumn==pIdx->aiColumn[j]
- ){
- sqliteExprCode(pParse, pExpr->pRight);
- leFlag = pExpr->op==TK_LE;
- aExpr[k].p = 0;
- break;
- }
- if( aExpr[k].idxRight==iCur
- && (pExpr->op==TK_GT || pExpr->op==TK_GE)
- && (aExpr[k].prereqLeft & loopMask)==aExpr[k].prereqLeft
- && pExpr->pRight->iColumn==pIdx->aiColumn[j]
- ){
- sqliteExprCode(pParse, pExpr->pLeft);
- leFlag = pExpr->op==TK_GE;
- aExpr[k].p = 0;
- break;
- }
- }
- testOp = OP_IdxGE;
- }else{
- testOp = nEqColumn>0 ? OP_IdxGE : OP_Noop;
- leFlag = 1;
- }
- if( testOp!=OP_Noop ){
- int nCol = nEqColumn + (score & 1);
- pLevel->iMem = pParse->nMem++;
- sqliteVdbeAddOp(v, OP_NotNull, -nCol, sqliteVdbeCurrentAddr(v)+3);
- sqliteVdbeAddOp(v, OP_Pop, nCol, 0);
- sqliteVdbeAddOp(v, OP_Goto, 0, brk);
- sqliteVdbeAddOp(v, OP_MakeKey, nCol, 0);
- sqliteAddIdxKeyType(v, pIdx);
- if( leFlag ){
- sqliteVdbeAddOp(v, OP_IncrKey, 0, 0);
- }
- if( pLevel->bRev ){
- sqliteVdbeAddOp(v, OP_MoveLt, pLevel->iCur, brk);
- }else{
- sqliteVdbeAddOp(v, OP_MemStore, pLevel->iMem, 1);
- }
- }else if( pLevel->bRev ){
- sqliteVdbeAddOp(v, OP_Last, pLevel->iCur, brk);
- }
-
- /* Generate the start key. This is the key that defines the lower
- ** bound on the search. There is no start key if there are no
- ** equality terms and if there is no "X>..." term. In
- ** that case, generate a "Rewind" instruction in place of the
- ** start key search.
- **
- ** 2002-Dec-04: In the case of a reverse-order search, the so-called
- ** "start" key really ends up being used as the termination key.
- */
- if( (score & 2)!=0 ){
- for(k=0; k<nExpr; k++){
- Expr *pExpr = aExpr[k].p;
- if( pExpr==0 ) continue;
- if( aExpr[k].idxLeft==iCur
- && (pExpr->op==TK_GT || pExpr->op==TK_GE)
- && (aExpr[k].prereqRight & loopMask)==aExpr[k].prereqRight
- && pExpr->pLeft->iColumn==pIdx->aiColumn[j]
- ){
- sqliteExprCode(pParse, pExpr->pRight);
- geFlag = pExpr->op==TK_GE;
- aExpr[k].p = 0;
- break;
- }
- if( aExpr[k].idxRight==iCur
- && (pExpr->op==TK_LT || pExpr->op==TK_LE)
- && (aExpr[k].prereqLeft & loopMask)==aExpr[k].prereqLeft
- && pExpr->pRight->iColumn==pIdx->aiColumn[j]
- ){
- sqliteExprCode(pParse, pExpr->pLeft);
- geFlag = pExpr->op==TK_LE;
- aExpr[k].p = 0;
- break;
- }
- }
- }else{
- geFlag = 1;
- }
- if( nEqColumn>0 || (score&2)!=0 ){
- int nCol = nEqColumn + ((score&2)!=0);
- sqliteVdbeAddOp(v, OP_NotNull, -nCol, sqliteVdbeCurrentAddr(v)+3);
- sqliteVdbeAddOp(v, OP_Pop, nCol, 0);
- sqliteVdbeAddOp(v, OP_Goto, 0, brk);
- sqliteVdbeAddOp(v, OP_MakeKey, nCol, 0);
- sqliteAddIdxKeyType(v, pIdx);
- if( !geFlag ){
- sqliteVdbeAddOp(v, OP_IncrKey, 0, 0);
- }
- if( pLevel->bRev ){
- pLevel->iMem = pParse->nMem++;
- sqliteVdbeAddOp(v, OP_MemStore, pLevel->iMem, 1);
- testOp = OP_IdxLT;
- }else{
- sqliteVdbeAddOp(v, OP_MoveTo, pLevel->iCur, brk);
- }
- }else if( pLevel->bRev ){
- testOp = OP_Noop;
- }else{
- sqliteVdbeAddOp(v, OP_Rewind, pLevel->iCur, brk);
- }
-
- /* Generate the the top of the loop. If there is a termination
- ** key we have to test for that key and abort at the top of the
- ** loop.
- */
- start = sqliteVdbeCurrentAddr(v);
- if( testOp!=OP_Noop ){
- sqliteVdbeAddOp(v, OP_MemLoad, pLevel->iMem, 0);
- sqliteVdbeAddOp(v, testOp, pLevel->iCur, brk);
- }
- sqliteVdbeAddOp(v, OP_RowKey, pLevel->iCur, 0);
- sqliteVdbeAddOp(v, OP_IdxIsNull, nEqColumn + (score & 1), cont);
- sqliteVdbeAddOp(v, OP_IdxRecno, pLevel->iCur, 0);
- if( i==pTabList->nSrc-1 && pushKey ){
- haveKey = 1;
- }else{
- sqliteVdbeAddOp(v, OP_MoveTo, iCur, 0);
- haveKey = 0;
- }
-
- /* Record the instruction used to terminate the loop.
- */
- pLevel->op = pLevel->bRev ? OP_Prev : OP_Next;
- pLevel->p1 = pLevel->iCur;
- pLevel->p2 = start;
- }
- loopMask |= getMask(&maskSet, iCur);
-
- /* Insert code to test every subexpression that can be completely
- ** computed using the current set of tables.
- */
- for(j=0; j<nExpr; j++){
- if( aExpr[j].p==0 ) continue;
- if( (aExpr[j].prereqAll & loopMask)!=aExpr[j].prereqAll ) continue;
- if( pLevel->iLeftJoin && !ExprHasProperty(aExpr[j].p,EP_FromJoin) ){
- continue;
- }
- if( haveKey ){
- haveKey = 0;
- sqliteVdbeAddOp(v, OP_MoveTo, iCur, 0);
- }
- sqliteExprIfFalse(pParse, aExpr[j].p, cont, 1);
- aExpr[j].p = 0;
- }
- brk = cont;
-
- /* For a LEFT OUTER JOIN, generate code that will record the fact that
- ** at least one row of the right table has matched the left table.
- */
- if( pLevel->iLeftJoin ){
- pLevel->top = sqliteVdbeCurrentAddr(v);
- sqliteVdbeAddOp(v, OP_Integer, 1, 0);
- sqliteVdbeAddOp(v, OP_MemStore, pLevel->iLeftJoin, 1);
- for(j=0; j<nExpr; j++){
- if( aExpr[j].p==0 ) continue;
- if( (aExpr[j].prereqAll & loopMask)!=aExpr[j].prereqAll ) continue;
- if( haveKey ){
- /* Cannot happen. "haveKey" can only be true if pushKey is true
- ** an pushKey can only be true for DELETE and UPDATE and there are
- ** no outer joins with DELETE and UPDATE.
- */
- haveKey = 0;
- sqliteVdbeAddOp(v, OP_MoveTo, iCur, 0);
- }
- sqliteExprIfFalse(pParse, aExpr[j].p, cont, 1);
- aExpr[j].p = 0;
- }
- }
- }
- pWInfo->iContinue = cont;
- if( pushKey && !haveKey ){
- sqliteVdbeAddOp(v, OP_Recno, pTabList->a[0].iCursor, 0);
- }
- freeMaskSet(&maskSet);
- return pWInfo;
-}
-
-/*
-** Generate the end of the WHERE loop. See comments on
-** sqliteWhereBegin() for additional information.
-*/
-void sqliteWhereEnd(WhereInfo *pWInfo){
- Vdbe *v = pWInfo->pParse->pVdbe;
- int i;
- WhereLevel *pLevel;
- SrcList *pTabList = pWInfo->pTabList;
-
- for(i=pTabList->nSrc-1; i>=0; i--){
- pLevel = &pWInfo->a[i];
- sqliteVdbeResolveLabel(v, pLevel->cont);
- if( pLevel->op!=OP_Noop ){
- sqliteVdbeAddOp(v, pLevel->op, pLevel->p1, pLevel->p2);
- }
- sqliteVdbeResolveLabel(v, pLevel->brk);
- if( pLevel->inOp!=OP_Noop ){
- sqliteVdbeAddOp(v, pLevel->inOp, pLevel->inP1, pLevel->inP2);
- }
- if( pLevel->iLeftJoin ){
- int addr;
- addr = sqliteVdbeAddOp(v, OP_MemLoad, pLevel->iLeftJoin, 0);
- sqliteVdbeAddOp(v, OP_NotNull, 1, addr+4 + (pLevel->iCur>=0));
- sqliteVdbeAddOp(v, OP_NullRow, pTabList->a[i].iCursor, 0);
- if( pLevel->iCur>=0 ){
- sqliteVdbeAddOp(v, OP_NullRow, pLevel->iCur, 0);
- }
- sqliteVdbeAddOp(v, OP_Goto, 0, pLevel->top);
- }
- }
- sqliteVdbeResolveLabel(v, pWInfo->iBreak);
- for(i=0; i<pTabList->nSrc; i++){
- Table *pTab = pTabList->a[i].pTab;
- assert( pTab!=0 );
- if( pTab->isTransient || pTab->pSelect ) continue;
- pLevel = &pWInfo->a[i];
- sqliteVdbeAddOp(v, OP_Close, pTabList->a[i].iCursor, 0);
- if( pLevel->pIdx!=0 ){
- sqliteVdbeAddOp(v, OP_Close, pLevel->iCur, 0);
- }
- }
-#if 0 /* Never reuse a cursor */
- if( pWInfo->pParse->nTab==pWInfo->peakNTab ){
- pWInfo->pParse->nTab = pWInfo->savedNTab;
- }
-#endif
- sqliteFree(pWInfo);
- return;
-}
diff --git a/ext/sqlite/package.xml b/ext/sqlite/package.xml
deleted file mode 100644
index e0093f1256..0000000000
--- a/ext/sqlite/package.xml
+++ /dev/null
@@ -1,136 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1" ?>
-<!DOCTYPE package SYSTEM "../pear/package.dtd">
-<package>
- <name>SQLite</name>
- <summary>SQLite database bindings</summary>
- <maintainers>
- <maintainer>
- <user>wez</user>
- <name>Wez Furlong</name>
- <email>wez@php.net</email>
- <role>lead</role>
- </maintainer>
- <maintainer>
- <user>tal</user>
- <name>Tal Peer</name>
- <email>tal@php.net</email>
- <role>developer</role>
- </maintainer>
- <maintainer>
- <user>helly</user>
- <name>Marcus Börger</name>
- <email>helly@php.net</email>
- <role>lead</role>
- </maintainer>
- <maintainer>
- <user>iliaa</user>
- <name>Ilia Alshanetsky</name>
- <email>ilia@php.net</email>
- <role>developer</role>
- </maintainer>
- </maintainers>
- <description>
-SQLite is a C library that implements an embeddable SQL database engine.
-Programs that link with the SQLite library can have SQL database access
-without running a separate RDBMS process.
-This extension allows you to access SQLite databases from within PHP.
-
-Windows binary available from:
-http://snaps.php.net/win32/PECL_STABLE/php_sqlite.dll
- </description>
- <license>PHP</license>
- <release>
- <state>stable</state>
- <version>2.0-dev</version>
- <date>TBA</date>
- <notes>
- Added:
- OO API (Marcus).
- </notes>
- <filelist>
- <file role="src" name="config.m4"/>
- <file role="src" name="config.w32"/>
- <file role="src" name="sqlite.c"/>
- <file role="src" name="sqlite.dsp"/>
- <file role="src" name="php_sqlite.h"/>
- <file role="src" name="php_sqlite.def"/>
- <file role="doc" name="CREDITS"/>
- <file role="doc" name="README"/>
- <file role="doc" name="TODO"/>
- <file role="doc" name="sqlite.php"/>
- <file role="test" name="tests/sqlite_001.phpt"/>
- <file role="test" name="tests/sqlite_002.phpt"/>
- <file role="test" name="tests/sqlite_003.phpt"/>
- <file role="test" name="tests/sqlite_004.phpt"/>
- <file role="test" name="tests/sqlite_005.phpt"/>
- <file role="test" name="tests/sqlite_006.phpt"/>
- <file role="test" name="tests/sqlite_007.phpt"/>
- <file role="test" name="tests/sqlite_008.phpt"/>
- <file role="test" name="tests/sqlite_009.phpt"/>
- <file role="test" name="tests/sqlite_010.phpt"/>
- <file role="test" name="tests/sqlite_011.phpt"/>
- <file role="test" name="tests/sqlite_012.phpt"/>
- <file role="test" name="tests/sqlite_013.phpt"/>
- <file role="test" name="tests/sqlite_014.phpt"/>
- <file role="test" name="tests/sqlite_015.phpt"/>
- <file role="test" name="tests/sqlite_016.phpt"/>
- <file role="test" name="tests/sqlite_017.phpt"/>
- <file role="test" name="tests/blankdb.inc"/>
-
- <dir name="libsqlite">
- <file role="doc" name="README"/>
- <file role="src" name="VERSION"/>
-
- <dir name="src">
- <file role="src" name="attach.c"/>
- <file role="src" name="auth.c"/>
- <file role="src" name="btree.c"/>
- <file role="src" name="btree_rb.c"/>
- <file role="src" name="build.c"/>
- <file role="src" name="copy.c"/>
- <file role="src" name="delete.c"/>
- <file role="src" name="encode.c"/>
- <file role="src" name="expr.c"/>
- <file role="src" name="func.c"/>
- <file role="src" name="hash.c"/>
- <file role="src" name="insert.c"/>
- <file role="src" name="main.c"/>
- <file role="src" name="opcodes.c"/>
- <file role="src" name="os.c"/>
- <file role="src" name="pager.c"/>
- <file role="src" name="parse.c"/>
- <file role="src" name="parse.y"/>
- <file role="src" name="pragma.c"/>
- <file role="src" name="printf.c"/>
- <file role="src" name="random.c"/>
- <file role="src" name="select.c"/>
- <file role="src" name="table.c"/>
- <file role="src" name="tokenize.c"/>
- <file role="src" name="trigger.c"/>
- <file role="src" name="update.c"/>
- <file role="src" name="util.c"/>
- <file role="src" name="vacuum.c"/>
- <file role="src" name="vdbe.c"/>
- <file role="src" name="where.c"/>
- <file role="src" name="btree.h"/>
- <file role="src" name="hash.h"/>
- <file role="src" name="opcodes.h"/>
- <file role="src" name="os.h"/>
- <file role="src" name="pager.h"/>
- <file role="src" name="parse.h"/>
- <file role="src" name="sqlite_config.w32.h"/>
- <file role="src" name="sqlite.h.in"/>
- <file role="src" name="sqliteInt.h"/>
- <file role="src" name="sqlite.w32.h"/>
- <file role="src" name="vdbe.h"/>
- </dir>
- </dir>
- </filelist>
- <deps>
- <dep type="php" rel="ge" version="5" />
- </deps>
- </release>
-</package>
-<!--
-vim:et:ts=1:sw=1
--->
diff --git a/ext/sqlite/php_sqlite.def b/ext/sqlite/php_sqlite.def
deleted file mode 100644
index 9dab74ad94..0000000000
--- a/ext/sqlite/php_sqlite.def
+++ /dev/null
@@ -1,43 +0,0 @@
-EXPORTS
-sqlite_open
-sqlite_close
-sqlite_exec
-sqlite_last_insert_rowid
-sqlite_changes
-sqlite_error_string
-sqlite_interrupt
-sqlite_complete
-sqlite_busy_handler
-sqlite_busy_timeout
-sqlite_get_table
-sqlite_free_table
-sqlite_exec_printf
-sqlite_exec_vprintf
-sqlite_get_table_printf
-sqlite_get_table_vprintf
-sqlite_mprintf
-sqlite_vmprintf
-sqlite_freemem
-sqlite_libversion
-sqlite_libencoding
-sqlite_create_function
-sqlite_create_aggregate
-sqlite_function_type
-sqlite_set_result_string
-sqlite_set_result_int
-sqlite_set_result_double
-sqlite_set_result_error
-sqlite_user_data
-sqlite_aggregate_context
-sqlite_aggregate_count
-sqlite_set_authorizer
-sqlite_trace
-sqlite_compile
-sqlite_step
-sqlite_finalize
-; some experimental stuff
-sqlite_last_statement_changes
-sqlite_reset
-sqlite_bind
-sqlite_progress_handler
-sqlite_commit_hook
diff --git a/ext/sqlite/php_sqlite.h b/ext/sqlite/php_sqlite.h
deleted file mode 100644
index 04d2a101df..0000000000
--- a/ext/sqlite/php_sqlite.h
+++ /dev/null
@@ -1,113 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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. |
- +----------------------------------------------------------------------+
- | Authors: Wez Furlong <wez@thebrainroom.com> |
- | Tal Peer <tal@php.net> |
- | Marcus Boerger <helly@php.net> |
- +----------------------------------------------------------------------+
-
- $Id$
-*/
-
-#ifndef PHP_SQLITE_H
-#define PHP_SQLITE_H
-
-extern zend_module_entry sqlite_module_entry;
-#define phpext_sqlite_ptr &sqlite_module_entry
-
-#ifdef PHP_WIN32
-#define PHP_SQLITE_API __declspec(dllexport)
-#else
-#define PHP_SQLITE_API
-#endif
-
-#ifdef ZTS
-#include "TSRM.h"
-#endif
-
-PHP_MINIT_FUNCTION(sqlite);
-PHP_MSHUTDOWN_FUNCTION(sqlite);
-PHP_RINIT_FUNCTION(sqlite);
-PHP_RSHUTDOWN_FUNCTION(sqlite);
-PHP_MINFO_FUNCTION(sqlite);
-
-PHP_FUNCTION(sqlite_open);
-PHP_FUNCTION(sqlite_popen);
-PHP_FUNCTION(sqlite_close);
-PHP_FUNCTION(sqlite_query);
-PHP_FUNCTION(sqlite_exec);
-PHP_FUNCTION(sqlite_unbuffered_query);
-PHP_FUNCTION(sqlite_array_query);
-PHP_FUNCTION(sqlite_single_query);
-
-PHP_FUNCTION(sqlite_fetch_array);
-PHP_FUNCTION(sqlite_fetch_object);
-PHP_FUNCTION(sqlite_fetch_single);
-PHP_FUNCTION(sqlite_fetch_all);
-PHP_FUNCTION(sqlite_current);
-PHP_FUNCTION(sqlite_column);
-
-PHP_FUNCTION(sqlite_num_rows);
-PHP_FUNCTION(sqlite_num_fields);
-PHP_FUNCTION(sqlite_field_name);
-PHP_FUNCTION(sqlite_seek);
-PHP_FUNCTION(sqlite_rewind);
-PHP_FUNCTION(sqlite_next);
-PHP_FUNCTION(sqlite_prev);
-
-PHP_FUNCTION(sqlite_valid);
-PHP_FUNCTION(sqlite_has_prev);
-
-PHP_FUNCTION(sqlite_libversion);
-PHP_FUNCTION(sqlite_libencoding);
-
-PHP_FUNCTION(sqlite_changes);
-PHP_FUNCTION(sqlite_last_insert_rowid);
-
-PHP_FUNCTION(sqlite_escape_string);
-
-PHP_FUNCTION(sqlite_busy_timeout);
-
-PHP_FUNCTION(sqlite_last_error);
-PHP_FUNCTION(sqlite_error_string);
-
-PHP_FUNCTION(sqlite_create_aggregate);
-PHP_FUNCTION(sqlite_create_function);
-PHP_FUNCTION(sqlite_udf_decode_binary);
-PHP_FUNCTION(sqlite_udf_encode_binary);
-
-PHP_FUNCTION(sqlite_factory);
-
-PHP_FUNCTION(sqlite_fetch_column_types);
-
-ZEND_BEGIN_MODULE_GLOBALS(sqlite)
- int assoc_case;
-ZEND_END_MODULE_GLOBALS(sqlite)
-
-#ifdef ZTS
-#define SQLITE_G(v) TSRMG(sqlite_globals_id, zend_sqlite_globals *, v)
-#else
-#define SQLITE_G(v) (sqlite_globals.v)
-#endif
-
-#endif
-
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * indent-tabs-mode: t
- * End:
- */
diff --git a/ext/sqlite/sess_sqlite.c b/ext/sqlite/sess_sqlite.c
deleted file mode 100644
index 8789cd6109..0000000000
--- a/ext/sqlite/sess_sqlite.c
+++ /dev/null
@@ -1,197 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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. |
- +----------------------------------------------------------------------+
- | Authors: John Coggeshall <john@php.net> |
- | Wez Furlong <wez@thebrainroom.com> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-#include "php.h"
-
-#if HAVE_PHP_SESSION
-
-#include "ext/session/php_session.h"
-#include "ext/standard/php_lcg.h"
-#include <sqlite.h>
-#define SQLITE_RETVAL(__r) ((__r) == SQLITE_OK ? SUCCESS : FAILURE)
-#define PS_SQLITE_DATA sqlite *db = (sqlite*)PS_GET_MOD_DATA()
-extern int sqlite_encode_binary(const unsigned char *in, int n, unsigned char *out);
-extern int sqlite_decode_binary(const unsigned char *in, unsigned char *out);
-
-PS_FUNCS(sqlite);
-
-ps_module ps_mod_sqlite = {
- PS_MOD(sqlite)
-};
-
-PS_OPEN_FUNC(sqlite)
-{
- char *errmsg = NULL;
- sqlite *db;
-
- /* TODO: do we need a safe_mode check here? */
- db = sqlite_open(save_path, 0666, &errmsg);
- if (db == NULL) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING,
- "SQLite: failed to open/create session database `%s' - %s", save_path, errmsg);
- sqlite_freemem(errmsg);
- return FAILURE;
- }
-
- /* allow up to 1 minute when busy */
- sqlite_busy_timeout(db, 60000);
-
- sqlite_exec(db, "PRAGMA default_synchronous = OFF", NULL, NULL, NULL);
- sqlite_exec(db, "PRAGMA count_changes = OFF", NULL, NULL, NULL);
-
- /* This will fail if the table already exists, but that's not a big problem. I'm
- unclear as to how to check for a table's existence in SQLite -- that would be better here. */
- sqlite_exec(db,
- "CREATE TABLE session_data ("
- " sess_id PRIMARY KEY,"
- " value TEXT, "
- " updated INTEGER "
- ")", NULL, NULL, NULL);
-
- PS_SET_MOD_DATA(db);
-
- return SUCCESS;
-}
-
-PS_CLOSE_FUNC(sqlite)
-{
- PS_SQLITE_DATA;
-
- sqlite_close(db);
-
- return SUCCESS;
-}
-
-PS_READ_FUNC(sqlite)
-{
- PS_SQLITE_DATA;
- char *query;
- const char *tail;
- sqlite_vm *vm;
- int colcount, result;
- const char **rowdata, **colnames;
- char *error;
-
- *val = NULL;
- *vallen = 0;
-
- query = sqlite_mprintf("SELECT value FROM session_data WHERE sess_id='%q' LIMIT 1", key);
- if (query == NULL) {
- /* no memory */
- return FAILURE;
- }
-
- if (sqlite_compile(db, query, &tail, &vm, &error) != SQLITE_OK) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "SQLite: Could not compile session read query: %s", error);
- sqlite_freemem(error);
- sqlite_freemem(query);
- return FAILURE;
- }
-
- switch ((result = sqlite_step(vm, &colcount, &rowdata, &colnames))) {
- case SQLITE_ROW:
- if (rowdata[0] != NULL) {
- *vallen = strlen(rowdata[0]);
- *val = emalloc(*vallen);
- *vallen = sqlite_decode_binary(rowdata[0], *val);
- (*val)[*vallen] = '\0';
- }
- break;
- default:
- sqlite_freemem(error);
- error = NULL;
- }
-
- if (SQLITE_OK != sqlite_finalize(vm, &error)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "SQLite: session read: error %s", error);
- sqlite_freemem(error);
- error = NULL;
- }
-
- sqlite_freemem(query);
-
- return *val == NULL ? FAILURE : SUCCESS;
-}
-
-PS_WRITE_FUNC(sqlite)
-{
- PS_SQLITE_DATA;
- char *error;
- time_t t;
- char *binary;
- int binlen;
- int rv;
-
- t = time(NULL);
-
- binary = safe_emalloc(1 + vallen / 254, 257, 3);
- binlen = sqlite_encode_binary((const unsigned char*)val, vallen, binary);
-
- rv = sqlite_exec_printf(db, "REPLACE INTO session_data VALUES('%q', '%q', %d)", NULL, NULL, &error, key, binary, t);
- if (rv != SQLITE_OK) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "SQLite: session write query failed: %s", error);
- sqlite_freemem(error);
- }
- efree(binary);
-
- return SQLITE_RETVAL(rv);
-}
-
-PS_DESTROY_FUNC(sqlite)
-{
- int rv;
- PS_SQLITE_DATA;
-
- rv = sqlite_exec_printf(db, "DELETE FROM session_data WHERE sess_id='%q'", NULL, NULL, NULL, key);
-
- return SQLITE_RETVAL(rv);
-}
-
-PS_GC_FUNC(sqlite)
-{
- PS_SQLITE_DATA;
- int rv;
- time_t t = time(NULL);
-
- rv = sqlite_exec_printf(db,
- "DELETE FROM session_data WHERE (%d - updated) > %d",
- NULL, NULL, NULL, t, maxlifetime);
-
- /* because SQLite does not actually clear the deleted data from the database
- * we need to occassionaly do so manually to prevent the sessions database
- * from growing endlessly.
- */
- if ((int) ((float) PS(gc_divisor) * PS(gc_divisor) * php_combined_lcg(TSRMLS_C)) < PS(gc_probability)) {
- rv = sqlite_exec_printf(db, "VACUUM", NULL, NULL, NULL);
- }
- return SQLITE_RETVAL(rv);
-}
-
-#endif /* HAVE_PHP_SESSION */
-
-/*
- * 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/sqlite/sqlite.c b/ext/sqlite/sqlite.c
deleted file mode 100644
index 9fc3ec860e..0000000000
--- a/ext/sqlite/sqlite.c
+++ /dev/null
@@ -1,2957 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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. |
- +----------------------------------------------------------------------+
- | Authors: Wez Furlong <wez@thebrainroom.com> |
- | Tal Peer <tal@php.net> |
- | Marcus Boerger <helly@php.net> |
- +----------------------------------------------------------------------+
-
- $Id$
-*/
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#define PHP_SQLITE_MODULE_VERSION "2.0-dev"
-
-#include "php.h"
-#include "php_ini.h"
-#include "ext/standard/info.h"
-#include "ext/session/php_session.h"
-#include "php_sqlite.h"
-
-#if HAVE_TIME_H
-# include <time.h>
-#endif
-#if HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-
-#include <sqlite.h>
-
-#include "zend_exceptions.h"
-
-#ifndef safe_emalloc
-# define safe_emalloc(a,b,c) emalloc((a)*(b)+(c))
-#endif
-
-ZEND_DECLARE_MODULE_GLOBALS(sqlite)
-
-#if HAVE_PHP_SESSION
-extern ps_module ps_mod_sqlite;
-#define ps_sqlite_ptr &ps_mod_sqlite
-#endif
-
-extern int sqlite_encode_binary(const unsigned char *in, int n, unsigned char *out);
-extern int sqlite_decode_binary(const unsigned char *in, unsigned char *out);
-
-#define php_sqlite_encode_binary(in, n, out) sqlite_encode_binary((const unsigned char *)in, n, (unsigned char *)out)
-#define php_sqlite_decode_binary(in, out) sqlite_decode_binary((const unsigned char *)in, (unsigned char *)out)
-
-static int le_sqlite_db, le_sqlite_result, le_sqlite_pdb;
-
-static inline void php_sqlite_strtoupper(char *s)
-{
- while (*s!='\0') {
- *s = toupper(*s);
- s++;
- }
-}
-
-static inline void php_sqlite_strtolower(char *s)
-{
- while (*s!='\0') {
- *s = tolower(*s);
- s++;
- }
-}
-
-/* {{{ PHP_INI
- */
-PHP_INI_BEGIN()
-STD_PHP_INI_ENTRY_EX("sqlite.assoc_case", "0", PHP_INI_ALL, OnUpdateLong, assoc_case, zend_sqlite_globals, sqlite_globals, display_link_numbers)
-PHP_INI_END()
-/* }}} */
-
-
-#define DB_FROM_ZVAL(db, zv) ZEND_FETCH_RESOURCE2(db, struct php_sqlite_db *, zv, -1, "sqlite database", le_sqlite_db, le_sqlite_pdb)
-
-#define DB_FROM_OBJECT(db, object) \
- { \
- sqlite_object *obj = (sqlite_object*) zend_object_store_get_object(object TSRMLS_CC); \
- db = obj->u.db; \
- if (!db) { \
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "The database wasn't opened"); \
- RETURN_NULL(); \
- } \
- }
-
-#define RES_FROM_OBJECT(res, object) \
- { \
- sqlite_object *obj = (sqlite_object*) zend_object_store_get_object(object TSRMLS_CC); \
- res = obj->u.res; \
- if (!res) { \
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "No result set available"); \
- RETURN_NULL(); \
- } \
- }
-
-#define SQLITE_THROW(message) \
- PG(suppress_errors) = 0; \
- EG(exception) = zend_throw_exception(sqlite_ce_exception, message, 0 TSRMLS_CC);
-
-#define PHP_SQLITE_EMPTY_QUERY \
- if (!sql_len) { \
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Cannot execute empty query."); \
- RETURN_FALSE; \
- }
-
-struct php_sqlite_result {
- struct php_sqlite_db *db;
- sqlite_vm *vm;
- int buffered;
- int ncolumns;
- int nrows;
- int curr_row;
- char **col_names;
- int alloc_rows;
- int mode;
- char **table;
-};
-
-struct php_sqlite_db {
- sqlite *db;
- int last_err_code;
- zend_bool is_persistent;
- long rsrc_id;
-
- HashTable callbacks;
-};
-
-struct php_sqlite_agg_functions {
- struct php_sqlite_db *db;
- int is_valid;
- zval *step;
- zval *fini;
-};
-
-static void php_sqlite_fetch_array(struct php_sqlite_result *res, int mode, zend_bool decode_binary, int move_next, zval *return_value TSRMLS_DC);
-static int php_sqlite_fetch(struct php_sqlite_result *rres TSRMLS_DC);
-
-enum { PHPSQLITE_ASSOC = 1, PHPSQLITE_NUM = 2, PHPSQLITE_BOTH = PHPSQLITE_ASSOC|PHPSQLITE_NUM };
-
-function_entry sqlite_functions[] = {
- PHP_FE(sqlite_open, third_arg_force_ref)
- PHP_FE(sqlite_popen, third_arg_force_ref)
- PHP_FE(sqlite_close, NULL)
- PHP_FE(sqlite_query, NULL)
- PHP_FE(sqlite_exec, NULL)
- PHP_FE(sqlite_array_query, NULL)
- PHP_FE(sqlite_single_query, NULL)
- PHP_FE(sqlite_fetch_array, NULL)
- PHP_FE(sqlite_fetch_object, NULL)
- PHP_FE(sqlite_fetch_single, NULL)
- PHP_FALIAS(sqlite_fetch_string, sqlite_fetch_single, NULL)
- PHP_FE(sqlite_fetch_all, NULL)
- PHP_FE(sqlite_current, NULL)
- PHP_FE(sqlite_column, NULL)
- PHP_FE(sqlite_libversion, NULL)
- PHP_FE(sqlite_libencoding, NULL)
- PHP_FE(sqlite_changes, NULL)
- PHP_FE(sqlite_last_insert_rowid, NULL)
- PHP_FE(sqlite_num_rows, NULL)
- PHP_FE(sqlite_num_fields, NULL)
- PHP_FE(sqlite_field_name, NULL)
- PHP_FE(sqlite_seek, NULL)
- PHP_FE(sqlite_rewind, NULL)
- PHP_FE(sqlite_next, NULL)
- PHP_FE(sqlite_prev, NULL)
- PHP_FE(sqlite_valid, NULL)
- PHP_FALIAS(sqlite_has_more, sqlite_valid, NULL)
- PHP_FE(sqlite_has_prev, NULL)
- PHP_FE(sqlite_escape_string, NULL)
- PHP_FE(sqlite_busy_timeout, NULL)
- PHP_FE(sqlite_last_error, NULL)
- PHP_FE(sqlite_error_string, NULL)
- PHP_FE(sqlite_unbuffered_query, NULL)
- PHP_FE(sqlite_create_aggregate, NULL)
- PHP_FE(sqlite_create_function, NULL)
- PHP_FE(sqlite_factory, third_arg_force_ref)
- PHP_FE(sqlite_udf_encode_binary, NULL)
- PHP_FE(sqlite_udf_decode_binary, NULL)
- PHP_FE(sqlite_fetch_column_types, NULL)
- {NULL, NULL, NULL}
-};
-
-function_entry sqlite_funcs_db[] = {
- PHP_ME_MAPPING(__construct, sqlite_open, NULL)
-/* PHP_ME_MAPPING(close, sqlite_close, NULL)*/
- PHP_ME_MAPPING(query, sqlite_query, NULL)
- PHP_ME_MAPPING(queryExec, sqlite_exec, NULL)
- PHP_ME_MAPPING(arrayQuery, sqlite_array_query, NULL)
- PHP_ME_MAPPING(singleQuery, sqlite_single_query, NULL)
- PHP_ME_MAPPING(unbufferedQuery, sqlite_unbuffered_query, NULL)
- PHP_ME_MAPPING(lastInsertRowid, sqlite_last_insert_rowid, NULL)
- PHP_ME_MAPPING(changes, sqlite_changes, NULL)
- PHP_ME_MAPPING(createAggregate, sqlite_create_aggregate, NULL)
- PHP_ME_MAPPING(createFunction, sqlite_create_function, NULL)
- PHP_ME_MAPPING(busyTimeout, sqlite_busy_timeout, NULL)
- PHP_ME_MAPPING(lastError, sqlite_last_error, NULL)
- PHP_ME_MAPPING(fetchColumnTypes, sqlite_fetch_column_types, NULL)
-/* PHP_ME_MAPPING(error_string, sqlite_error_string, NULL) static */
-/* PHP_ME_MAPPING(escape_string, sqlite_escape_string, NULL) static */
- {NULL, NULL, NULL}
-};
-
-function_entry sqlite_funcs_query[] = {
- PHP_ME_MAPPING(fetch, sqlite_fetch_array, NULL)
- PHP_ME_MAPPING(fetchObject, sqlite_fetch_object, NULL)
- PHP_ME_MAPPING(fetchSingle, sqlite_fetch_single, NULL)
- PHP_ME_MAPPING(fetchAll, sqlite_fetch_all, NULL)
- PHP_ME_MAPPING(column, sqlite_column, NULL)
- PHP_ME_MAPPING(numFields, sqlite_num_fields, NULL)
- PHP_ME_MAPPING(fieldName, sqlite_field_name, NULL)
- /* spl_forward */
- PHP_ME_MAPPING(current, sqlite_current, NULL)
- PHP_ME_MAPPING(next, sqlite_next, NULL)
- PHP_ME_MAPPING(valid, sqlite_valid, NULL)
- /* spl_sequence */
- PHP_ME_MAPPING(rewind, sqlite_rewind, NULL)
- /* additional */
- PHP_ME_MAPPING(prev, sqlite_prev, NULL)
- PHP_ME_MAPPING(hasPrev, sqlite_has_prev, NULL)
- PHP_ME_MAPPING(numRows, sqlite_num_rows, NULL)
- PHP_ME_MAPPING(seek, sqlite_seek, NULL)
- {NULL, NULL, NULL}
-};
-
-function_entry sqlite_funcs_ub_query[] = {
- PHP_ME_MAPPING(fetch, sqlite_fetch_array, NULL)
- PHP_ME_MAPPING(fetchObject, sqlite_fetch_object, NULL)
- PHP_ME_MAPPING(fetchSingle, sqlite_fetch_single, NULL)
- PHP_ME_MAPPING(fetchAll, sqlite_fetch_all, NULL)
- PHP_ME_MAPPING(column, sqlite_column, NULL)
- PHP_ME_MAPPING(numFields, sqlite_num_fields, NULL)
- PHP_ME_MAPPING(fieldName, sqlite_field_name, NULL)
- /* spl_forward */
- PHP_ME_MAPPING(current, sqlite_current, NULL)
- PHP_ME_MAPPING(next, sqlite_next, NULL)
- PHP_ME_MAPPING(valid, sqlite_valid, NULL)
- {NULL, NULL, NULL}
-};
-
-function_entry sqlite_funcs_exception[] = {
- {NULL, NULL, NULL}
-};
-
-zend_module_entry sqlite_module_entry = {
-#if ZEND_MODULE_API_NO >= 20010901
- STANDARD_MODULE_HEADER,
-#endif
- "SQLite",
- sqlite_functions,
- PHP_MINIT(sqlite),
- PHP_MSHUTDOWN(sqlite),
- PHP_RINIT(sqlite),
- PHP_RSHUTDOWN(sqlite),
- PHP_MINFO(sqlite),
-#if ZEND_MODULE_API_NO >= 20010901
- PHP_SQLITE_MODULE_VERSION,
-#endif
- STANDARD_MODULE_PROPERTIES
-};
-
-
-#ifdef COMPILE_DL_SQLITE
-ZEND_GET_MODULE(sqlite)
-# ifdef PHP_WIN32
-# include "zend_arg_defs.c"
-# endif
-#endif
-
-static int php_sqlite_callback_invalidator(struct php_sqlite_agg_functions *funcs TSRMLS_DC)
-{
- if (!funcs->is_valid) {
- return 0;
- }
-
- if (funcs->step) {
- zval_ptr_dtor(&funcs->step);
- funcs->step = NULL;
- }
-
- if (funcs->fini) {
- zval_ptr_dtor(&funcs->fini);
- funcs->fini = NULL;
- }
-
- funcs->is_valid = 0;
-
- return 0;
-}
-
-
-static void php_sqlite_callback_dtor(void *pDest)
-{
- struct php_sqlite_agg_functions *funcs = (struct php_sqlite_agg_functions*)pDest;
-
- if (funcs->is_valid) {
- TSRMLS_FETCH();
-
- php_sqlite_callback_invalidator(funcs TSRMLS_CC);
- }
-}
-
-static ZEND_RSRC_DTOR_FUNC(php_sqlite_db_dtor)
-{
- if (rsrc->ptr) {
- struct php_sqlite_db *db = (struct php_sqlite_db*)rsrc->ptr;
-
- sqlite_close(db->db);
-
- zend_hash_destroy(&db->callbacks);
-
- pefree(db, db->is_persistent);
-
- rsrc->ptr = NULL;
- }
-}
-
-static void real_result_dtor(struct php_sqlite_result *res TSRMLS_DC)
-{
- int i, j, base;
-
- if (res->vm) {
- sqlite_finalize(res->vm, NULL);
- }
-
- if (res->table) {
- if (!res->buffered && res->nrows) {
- res->nrows = 1; /* only one row is stored */
- }
- for (i = 0; i < res->nrows; i++) {
- base = i * res->ncolumns;
- for (j = 0; j < res->ncolumns; j++) {
- if (res->table[base + j] != NULL) {
- efree(res->table[base + j]);
- }
- }
- }
- efree(res->table);
- }
- if (res->col_names) {
- for (j = 0; j < res->ncolumns; j++) {
- efree(res->col_names[j]);
- }
- efree(res->col_names);
- }
-
- if (res->db) {
- zend_list_delete(res->db->rsrc_id);
- }
- efree(res);
-}
-
-static ZEND_RSRC_DTOR_FUNC(php_sqlite_result_dtor)
-{
- struct php_sqlite_result *res = (struct php_sqlite_result *)rsrc->ptr;
- real_result_dtor(res TSRMLS_CC);
-}
-
-static int php_sqlite_forget_persistent_id_numbers(zend_rsrc_list_entry *rsrc TSRMLS_DC)
-{
- struct php_sqlite_db *db = (struct php_sqlite_db*)rsrc->ptr;
-
- if (Z_TYPE_P(rsrc) != le_sqlite_pdb) {
- return 0;
- }
-
- /* prevent bad mojo if someone tries to use a previously registered function in the next request */
- zend_hash_apply(&db->callbacks, (apply_func_t)php_sqlite_callback_invalidator TSRMLS_CC);
-
- db->rsrc_id = FAILURE;
-
- /* don't leave pending commits hanging around */
- sqlite_exec(db->db, "ROLLBACK", NULL, NULL, NULL);
-
- return 0;
-}
-
-PHP_RSHUTDOWN_FUNCTION(sqlite)
-{
- zend_hash_apply(&EG(persistent_list), (apply_func_t)php_sqlite_forget_persistent_id_numbers TSRMLS_CC);
- return SUCCESS;
-}
-
-/* {{{ PHP Function interface */
-static void php_sqlite_generic_function_callback(sqlite_func *func, int argc, const char **argv)
-{
- zval *retval = NULL;
- zval ***zargs = NULL;
- zval funcname;
- int i, res;
- char *callable = NULL, *errbuf=NULL;
- TSRMLS_FETCH();
-
- /* sanity check the args */
- if (argc == 0) {
- sqlite_set_result_error(func, "not enough parameters", -1);
- return;
- }
-
- ZVAL_STRING(&funcname, (char*)argv[0], 1);
-
- if (!zend_make_callable(&funcname, &callable TSRMLS_CC)) {
- spprintf(&errbuf, 0, "function `%s' is not a function name", callable);
- sqlite_set_result_error(func, errbuf, -1);
- efree(errbuf);
- efree(callable);
- zval_dtor(&funcname);
- return;
- }
-
- if (argc > 1) {
- zargs = (zval ***)safe_emalloc((argc - 1), sizeof(zval **), 0);
-
- for (i = 0; i < argc-1; i++) {
- zargs[i] = emalloc(sizeof(zval *));
- MAKE_STD_ZVAL(*zargs[i]);
- ZVAL_STRING(*zargs[i], (char*)argv[i+1], 1);
- }
- }
-
- res = call_user_function_ex(EG(function_table),
- NULL,
- &funcname,
- &retval,
- argc-1,
- zargs,
- 0, NULL TSRMLS_CC);
-
- zval_dtor(&funcname);
-
- if (res == SUCCESS) {
- if (retval == NULL) {
- sqlite_set_result_string(func, NULL, 0);
- } else {
- switch (Z_TYPE_P(retval)) {
- case IS_STRING:
- sqlite_set_result_string(func, Z_STRVAL_P(retval), Z_STRLEN_P(retval));
- break;
- case IS_LONG:
- case IS_BOOL:
- sqlite_set_result_int(func, Z_LVAL_P(retval));
- break;
- case IS_DOUBLE:
- sqlite_set_result_double(func, Z_DVAL_P(retval));
- break;
- case IS_NULL:
- default:
- sqlite_set_result_string(func, NULL, 0);
- }
- }
- } else {
- char *errbuf;
- spprintf(&errbuf, 0, "call_user_function_ex failed for function %s()", callable);
- sqlite_set_result_error(func, errbuf, -1);
- efree(errbuf);
- }
-
- efree(callable);
-
- if (retval) {
- zval_ptr_dtor(&retval);
- }
-
- if (zargs) {
- for (i = 0; i < argc-1; i++) {
- zval_ptr_dtor(zargs[i]);
- efree(zargs[i]);
- }
- efree(zargs);
- }
-}
-/* }}} */
-
-/* {{{ callback for sqlite_create_function */
-static void php_sqlite_function_callback(sqlite_func *func, int argc, const char **argv)
-{
- zval *retval = NULL;
- zval ***zargs = NULL;
- int i, res;
- struct php_sqlite_agg_functions *funcs = sqlite_user_data(func);
- TSRMLS_FETCH();
-
- if (!funcs->is_valid) {
- sqlite_set_result_error(func, "this function has not been correctly defined for this request", -1);
- return;
- }
-
- if (argc > 0) {
- zargs = (zval ***)safe_emalloc(argc, sizeof(zval **), 0);
-
- for (i = 0; i < argc; i++) {
- zargs[i] = emalloc(sizeof(zval *));
- MAKE_STD_ZVAL(*zargs[i]);
-
- if (argv[i] == NULL) {
- ZVAL_NULL(*zargs[i]);
- } else {
- ZVAL_STRING(*zargs[i], (char*)argv[i], 1);
- }
- }
- }
-
- res = call_user_function_ex(EG(function_table),
- NULL,
- funcs->step,
- &retval,
- argc,
- zargs,
- 0, NULL TSRMLS_CC);
-
- if (res == SUCCESS) {
- if (retval == NULL) {
- sqlite_set_result_string(func, NULL, 0);
- } else {
- switch (Z_TYPE_P(retval)) {
- case IS_STRING:
- /* TODO: for binary results, need to encode the string */
- sqlite_set_result_string(func, Z_STRVAL_P(retval), Z_STRLEN_P(retval));
- break;
- case IS_LONG:
- case IS_BOOL:
- sqlite_set_result_int(func, Z_LVAL_P(retval));
- break;
- case IS_DOUBLE:
- sqlite_set_result_double(func, Z_DVAL_P(retval));
- break;
- case IS_NULL:
- default:
- sqlite_set_result_string(func, NULL, 0);
- }
- }
- } else {
- sqlite_set_result_error(func, "call_user_function_ex failed", -1);
- }
-
- if (retval) {
- zval_ptr_dtor(&retval);
- }
-
- if (zargs) {
- for (i = 0; i < argc; i++) {
- zval_ptr_dtor(zargs[i]);
- efree(zargs[i]);
- }
- efree(zargs);
- }
-}
-/* }}} */
-
-/* {{{ callback for sqlite_create_aggregate: step function */
-static void php_sqlite_agg_step_function_callback(sqlite_func *func, int argc, const char **argv)
-{
- zval *retval = NULL;
- zval ***zargs;
- zval **context_p;
- int i, res, zargc;
- struct php_sqlite_agg_functions *funcs = sqlite_user_data(func);
- TSRMLS_FETCH();
-
- if (!funcs->is_valid) {
- sqlite_set_result_error(func, "this function has not been correctly defined for this request", -1);
- return;
- }
-
- /* sanity check the args */
- if (argc < 1) {
- return;
- }
-
- zargc = argc + 1;
- zargs = (zval ***)safe_emalloc(zargc, sizeof(zval **), 0);
-
- /* first arg is always the context zval */
- context_p = (zval **)sqlite_aggregate_context(func, sizeof(*context_p));
-
- if (*context_p == NULL) {
- MAKE_STD_ZVAL(*context_p);
- (*context_p)->is_ref = 1;
- Z_TYPE_PP(context_p) = IS_NULL;
- }
-
- zargs[0] = context_p;
-
- /* copy the other args */
- for (i = 0; i < argc; i++) {
- zargs[i+1] = emalloc(sizeof(zval *));
- MAKE_STD_ZVAL(*zargs[i+1]);
- if (argv[i] == NULL) {
- ZVAL_NULL(*zargs[i+1]);
- } else {
- ZVAL_STRING(*zargs[i+1], (char*)argv[i], 1);
- }
- }
-
- res = call_user_function_ex(EG(function_table),
- NULL,
- funcs->step,
- &retval,
- zargc,
- zargs,
- 0, NULL TSRMLS_CC);
-
- if (res != SUCCESS) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "call_user_function_ex failed");
- }
-
- if (retval) {
- zval_ptr_dtor(&retval);
- }
-
- if (zargs) {
- for (i = 1; i < zargc; i++) {
- zval_ptr_dtor(zargs[i]);
- efree(zargs[i]);
- }
- efree(zargs);
- }
-}
-/* }}} */
-
-/* {{{ callback for sqlite_create_aggregate: finalize function */
-static void php_sqlite_agg_fini_function_callback(sqlite_func *func)
-{
- zval *retval = NULL;
- int res;
- struct php_sqlite_agg_functions *funcs = sqlite_user_data(func);
- zval **context_p;
- TSRMLS_FETCH();
-
- if (!funcs->is_valid) {
- sqlite_set_result_error(func, "this function has not been correctly defined for this request", -1);
- return;
- }
-
- context_p = (zval **)sqlite_aggregate_context(func, sizeof(*context_p));
-
- res = call_user_function_ex(EG(function_table),
- NULL,
- funcs->fini,
- &retval,
- 1,
- &context_p,
- 0, NULL TSRMLS_CC);
-
- if (res == SUCCESS) {
- if (retval == NULL) {
- sqlite_set_result_string(func, NULL, 0);
- } else {
- switch (Z_TYPE_P(retval)) {
- case IS_STRING:
- /* TODO: for binary results, need to encode the string */
- sqlite_set_result_string(func, Z_STRVAL_P(retval), Z_STRLEN_P(retval));
- break;
- case IS_LONG:
- case IS_BOOL:
- sqlite_set_result_int(func, Z_LVAL_P(retval));
- break;
- case IS_DOUBLE:
- sqlite_set_result_double(func, Z_DVAL_P(retval));
- break;
- case IS_NULL:
- default:
- sqlite_set_result_string(func, NULL, 0);
- }
- }
- } else {
- sqlite_set_result_error(func, "call_user_function_ex failed", -1);
- }
-
- if (retval) {
- zval_ptr_dtor(&retval);
- }
-
- zval_ptr_dtor(context_p);
-}
-/* }}} */
-
-/* {{{ Authorization Callback */
-static int php_sqlite_authorizer(void *autharg, int access_type, const char *arg3, const char *arg4,
- const char *arg5, const char *arg6)
-{
- switch (access_type) {
- case SQLITE_COPY:
- if (strncmp(arg4, ":memory:", sizeof(":memory:") - 1)) {
- TSRMLS_FETCH();
- if (PG(safe_mode) && (!php_checkuid(arg4, NULL, CHECKUID_CHECK_FILE_AND_DIR))) {
- return SQLITE_DENY;
- }
-
- if (php_check_open_basedir(arg4 TSRMLS_CC)) {
- return SQLITE_DENY;
- }
- }
- return SQLITE_OK;
-#ifdef SQLITE_ATTACH
- case SQLITE_ATTACH:
- if (strncmp(arg3, ":memory:", sizeof(":memory:") - 1)) {
- TSRMLS_FETCH();
- if (PG(safe_mode) && (!php_checkuid(arg3, NULL, CHECKUID_CHECK_FILE_AND_DIR))) {
- return SQLITE_DENY;
- }
-
- if (php_check_open_basedir(arg3 TSRMLS_CC)) {
- return SQLITE_DENY;
- }
- }
- return SQLITE_OK;
-#endif
-
- default:
- /* access allowed */
- return SQLITE_OK;
- }
-}
-/* }}} */
-
-/* {{{ OO init/structure stuff */
-#define REGISTER_SQLITE_CLASS(name, c_name, parent) \
- { \
- zend_class_entry ce; \
- INIT_CLASS_ENTRY(ce, "SQLite" # name, sqlite_funcs_ ## c_name); \
- ce.create_object = sqlite_object_new_ ## c_name; \
- sqlite_ce_ ## c_name = zend_register_internal_class_ex(&ce, parent, NULL TSRMLS_CC); \
- memcpy(&sqlite_object_handlers_ ## c_name, zend_get_std_object_handlers(), sizeof(zend_object_handlers)); \
- sqlite_object_handlers_ ## c_name.clone_obj = NULL; \
- sqlite_ce_ ## c_name->ce_flags |= ZEND_ACC_FINAL_CLASS; \
- }
-
-zend_class_entry *sqlite_ce_db, *sqlite_ce_exception;
-zend_class_entry *sqlite_ce_query, *sqlite_ce_ub_query;
-
-static zend_object_handlers sqlite_object_handlers_db;
-static zend_object_handlers sqlite_object_handlers_query;
-static zend_object_handlers sqlite_object_handlers_ub_query;
-static zend_object_handlers sqlite_object_handlers_exception;
-
-typedef enum {
- is_db,
- is_result
-} sqlite_obj_type;
-
-typedef struct _sqlite_object {
- zend_object std;
- sqlite_obj_type type;
- union {
- struct php_sqlite_db *db;
- struct php_sqlite_result *res;
- void *ptr;
- } u;
-} sqlite_object;
-
-static int sqlite_free_persistent(list_entry *le, void *ptr TSRMLS_DC)
-{
- return le->ptr == ptr ? ZEND_HASH_APPLY_REMOVE : ZEND_HASH_APPLY_KEEP;
-}
-
-static void sqlite_object_free_storage(void *object TSRMLS_DC)
-{
- sqlite_object *intern = (sqlite_object *)object;
-
- zend_hash_destroy(intern->std.properties);
- FREE_HASHTABLE(intern->std.properties);
-
- if (intern->u.ptr) {
- if (intern->type == is_db) {
- if (intern->u.db->rsrc_id) {
- zend_list_delete(intern->u.db->rsrc_id);
- zend_hash_apply_with_argument(&EG(persistent_list), (apply_func_arg_t) sqlite_free_persistent, &intern->u.ptr TSRMLS_CC);
- }
- } else {
- real_result_dtor(intern->u.res TSRMLS_CC);
- }
- }
-
- efree(object);
-}
-
-static void sqlite_object_new(zend_class_entry *class_type, zend_object_handlers *handlers, zend_object_value *retval TSRMLS_DC)
-{
- sqlite_object *intern;
- zval *tmp;
-
- intern = emalloc(sizeof(sqlite_object));
- memset(intern, 0, sizeof(sqlite_object));
- intern->std.ce = class_type;
-
- ALLOC_HASHTABLE(intern->std.properties);
- zend_hash_init(intern->std.properties, 0, NULL, ZVAL_PTR_DTOR, 0);
- zend_hash_copy(intern->std.properties, &class_type->default_properties, (copy_ctor_func_t) zval_add_ref, (void *) &tmp, sizeof(zval *));
-
- retval->handle = zend_objects_store_put(intern, NULL, (zend_objects_free_object_storage_t) sqlite_object_free_storage, NULL TSRMLS_CC);
- retval->handlers = handlers;
-}
-
-static zend_object_value sqlite_object_new_db(zend_class_entry *class_type TSRMLS_DC)
-{
- zend_object_value retval;
-
- sqlite_object_new(class_type, &sqlite_object_handlers_db, &retval TSRMLS_CC);
- return retval;
-}
-
-static zend_object_value sqlite_object_new_query(zend_class_entry *class_type TSRMLS_DC)
-{
- zend_object_value retval;
-
- sqlite_object_new(class_type, &sqlite_object_handlers_query, &retval TSRMLS_CC);
- return retval;
-}
-
-static zend_object_value sqlite_object_new_ub_query(zend_class_entry *class_type TSRMLS_DC)
-{
- zend_object_value retval;
-
- sqlite_object_new(class_type, &sqlite_object_handlers_ub_query, &retval TSRMLS_CC);
- return retval;
-}
-
-static zend_object_value sqlite_object_new_exception(zend_class_entry *class_type TSRMLS_DC)
-{
- zend_object_value retval;
-
- sqlite_object_new(class_type, &sqlite_object_handlers_exception, &retval TSRMLS_CC);
- return retval;
-}
-
-#define SQLITE_REGISTER_OBJECT(_type, _object, _ptr) \
- { \
- sqlite_object *obj; \
- obj = (sqlite_object*)zend_object_store_get_object(_object TSRMLS_CC); \
- obj->type = is_ ## _type; \
- obj->u._type = _ptr; \
- }
-
-static zend_class_entry *sqlite_get_ce_query(zval *object TSRMLS_DC)
-{
- return sqlite_ce_query;
-}
-
-static zend_class_entry *sqlite_get_ce_ub_query(zval *object TSRMLS_DC)
-{
- return sqlite_ce_ub_query;
-}
-
-static zval * sqlite_instanciate(zend_class_entry *pce, zval *object TSRMLS_DC)
-{
- if (!object) {
- ALLOC_ZVAL(object);
- }
- Z_TYPE_P(object) = IS_OBJECT;
- object_init_ex(object, pce);
- object->refcount = 1;
- object->is_ref = 1;
- return object;
-}
-
-typedef struct _sqlite_object_iterator {
- zend_object_iterator it;
- struct php_sqlite_result *res;
- zval *value;
-} sqlite_object_iterator;
-
-void sqlite_iterator_dtor(zend_object_iterator *iter TSRMLS_DC)
-{
- zval *object = (zval*)((sqlite_object_iterator*)iter)->it.data;
-
- if (((sqlite_object_iterator*)iter)->value) {
- zval_ptr_dtor(&((sqlite_object_iterator*)iter)->value);
- ((sqlite_object_iterator*)iter)->value = NULL;
- }
- zval_ptr_dtor(&object);
- efree(iter);
-}
-
-void sqlite_iterator_rewind(zend_object_iterator *iter TSRMLS_DC)
-{
- struct php_sqlite_result *res = ((sqlite_object_iterator*)iter)->res;
-
- if (((sqlite_object_iterator*)iter)->value) {
- zval_ptr_dtor(&((sqlite_object_iterator*)iter)->value);
- ((sqlite_object_iterator*)iter)->value = NULL;
- }
- if (res) {
- res->curr_row = 0;
- }
-}
-
-int sqlite_iterator_valid(zend_object_iterator *iter TSRMLS_DC)
-{
- struct php_sqlite_result *res = ((sqlite_object_iterator*)iter)->res;
-
- if (res && res->curr_row < res->nrows && res->nrows) { /* curr_row may be -1 */
- return SUCCESS;
- } else {
- return FAILURE;
- }
-}
-
-void sqlite_iterator_get_current_data(zend_object_iterator *iter, zval ***data TSRMLS_DC)
-{
- struct php_sqlite_result *res = ((sqlite_object_iterator*)iter)->res;
-
- *data = &((sqlite_object_iterator*)iter)->value;
- if (res && !**data) {
- MAKE_STD_ZVAL(**data);
- php_sqlite_fetch_array(res, res->mode, 1, 0, **data TSRMLS_CC);
- }
-
-}
-
-int sqlite_iterator_get_current_key(zend_object_iterator *iter, char **str_key, uint *str_key_len, ulong *int_key TSRMLS_DC)
-{
- struct php_sqlite_result *res = ((sqlite_object_iterator*)iter)->res;
-
- *str_key = NULL;
- *str_key_len = 0;
- *int_key = res ? res->curr_row : 0;
- return HASH_KEY_IS_LONG;
-}
-
-void sqlite_iterator_move_forward(zend_object_iterator *iter TSRMLS_DC)
-{
- struct php_sqlite_result *res = ((sqlite_object_iterator*)iter)->res;
-
- if (((sqlite_object_iterator*)iter)->value) {
- zval_ptr_dtor(&((sqlite_object_iterator*)iter)->value);
- ((sqlite_object_iterator*)iter)->value = NULL;
- }
- if (res) {
- if (!res->buffered && res->vm) {
- php_sqlite_fetch(res TSRMLS_CC);
- }
- if (res->curr_row >= res->nrows) {
- /* php_error_docref(NULL TSRMLS_CC, E_WARNING, "no more rows available"); */
- return;
- }
-
- res->curr_row++;
- }
-}
-
-zend_object_iterator_funcs sqlite_ub_query_iterator_funcs = {
- sqlite_iterator_dtor,
- sqlite_iterator_valid,
- sqlite_iterator_get_current_data,
- sqlite_iterator_get_current_key,
- sqlite_iterator_move_forward,
- NULL
-};
-
-zend_object_iterator_funcs sqlite_query_iterator_funcs = {
- sqlite_iterator_dtor,
- sqlite_iterator_valid,
- sqlite_iterator_get_current_data,
- sqlite_iterator_get_current_key,
- sqlite_iterator_move_forward,
- sqlite_iterator_rewind
-};
-
-zend_object_iterator *sqlite_get_iterator(zend_class_entry *ce, zval *object TSRMLS_DC)
-{
- sqlite_object_iterator *iterator = emalloc(sizeof(sqlite_object_iterator));
-
- sqlite_object *obj = (sqlite_object*) zend_object_store_get_object(object TSRMLS_CC);
-
- object->refcount++;
- iterator->it.data = (void*)object;
- iterator->it.funcs = ce->iterator_funcs.funcs;
- iterator->res = obj->u.res;
- iterator->value = NULL;
- return (zend_object_iterator*)iterator;
-}
-/* }}} */
-
-static int init_sqlite_globals(zend_sqlite_globals *g)
-{
- g->assoc_case = 0;
- return SUCCESS;
-}
-
-PHP_MINIT_FUNCTION(sqlite)
-{
- REGISTER_SQLITE_CLASS(Database, db, NULL);
- REGISTER_SQLITE_CLASS(Result, query, NULL);
- REGISTER_SQLITE_CLASS(Unbuffered, ub_query, NULL);
- REGISTER_SQLITE_CLASS(Exception, exception, zend_exception_get_default());
- sqlite_object_handlers_query.get_class_entry = sqlite_get_ce_query;
- sqlite_object_handlers_ub_query.get_class_entry = sqlite_get_ce_ub_query;
-
- sqlite_ce_ub_query->get_iterator = sqlite_get_iterator;
- sqlite_ce_ub_query->iterator_funcs.funcs = &sqlite_ub_query_iterator_funcs;
-
- sqlite_ce_query->get_iterator = sqlite_get_iterator;
- sqlite_ce_query->iterator_funcs.funcs = &sqlite_query_iterator_funcs;
-
- ZEND_INIT_MODULE_GLOBALS(sqlite, init_sqlite_globals, NULL);
-
- REGISTER_INI_ENTRIES();
-
-#if HAVE_PHP_SESSION
- php_session_register_module(ps_sqlite_ptr);
-#endif
-
- le_sqlite_db = zend_register_list_destructors_ex(php_sqlite_db_dtor, NULL, "sqlite database", module_number);
- le_sqlite_pdb = zend_register_list_destructors_ex(NULL, php_sqlite_db_dtor, "sqlite database (persistent)", module_number);
- le_sqlite_result = zend_register_list_destructors_ex(php_sqlite_result_dtor, NULL, "sqlite result", module_number);
-
- REGISTER_LONG_CONSTANT("SQLITE_BOTH", PHPSQLITE_BOTH, CONST_CS|CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("SQLITE_NUM", PHPSQLITE_NUM, CONST_CS|CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("SQLITE_ASSOC", PHPSQLITE_ASSOC, CONST_CS|CONST_PERSISTENT);
-
- REGISTER_LONG_CONSTANT("SQLITE_OK", SQLITE_OK, CONST_CS|CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("SQLITE_ERROR", SQLITE_ERROR, CONST_CS|CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("SQLITE_INTERNAL", SQLITE_INTERNAL, CONST_CS|CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("SQLITE_PERM", SQLITE_PERM, CONST_CS|CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("SQLITE_ABORT", SQLITE_ABORT, CONST_CS|CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("SQLITE_BUSY", SQLITE_BUSY, CONST_CS|CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("SQLITE_LOCKED", SQLITE_LOCKED, CONST_CS|CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("SQLITE_NOMEM", SQLITE_NOMEM, CONST_CS|CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("SQLITE_READONLY", SQLITE_READONLY, CONST_CS|CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("SQLITE_INTERRUPT", SQLITE_INTERRUPT, CONST_CS|CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("SQLITE_IOERR", SQLITE_IOERR, CONST_CS|CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("SQLITE_CORRUPT", SQLITE_CORRUPT, CONST_CS|CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("SQLITE_NOTFOUND", SQLITE_NOTFOUND, CONST_CS|CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("SQLITE_FULL", SQLITE_FULL, CONST_CS|CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("SQLITE_CANTOPEN", SQLITE_CANTOPEN, CONST_CS|CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("SQLITE_PROTOCOL", SQLITE_PROTOCOL, CONST_CS|CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("SQLITE_EMPTY", SQLITE_EMPTY, CONST_CS|CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("SQLITE_SCHEMA", SQLITE_SCHEMA, CONST_CS|CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("SQLITE_TOOBIG", SQLITE_TOOBIG, CONST_CS|CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("SQLITE_CONSTRAINT", SQLITE_CONSTRAINT, CONST_CS|CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("SQLITE_MISMATCH", SQLITE_MISMATCH, CONST_CS|CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("SQLITE_MISUSE", SQLITE_MISUSE, CONST_CS|CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("SQLITE_NOLFS", SQLITE_NOLFS, CONST_CS|CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("SQLITE_AUTH", SQLITE_AUTH, CONST_CS|CONST_PERSISTENT);
-#ifdef SQLITE_FORMAT
- REGISTER_LONG_CONSTANT("SQLITE_FORMAT", SQLITE_FORMAT, CONST_CS|CONST_PERSISTENT);
-#endif
- REGISTER_LONG_CONSTANT("SQLITE_ROW", SQLITE_ROW, CONST_CS|CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("SQLITE_DONE", SQLITE_DONE, CONST_CS|CONST_PERSISTENT);
-
- return SUCCESS;
-}
-
-PHP_MSHUTDOWN_FUNCTION(sqlite)
-{
- UNREGISTER_INI_ENTRIES();
- return SUCCESS;
-}
-
-PHP_RINIT_FUNCTION(sqlite)
-{
- return SUCCESS;
-}
-
-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$");
- 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();
-
- DISPLAY_INI_ENTRIES();
-}
-
-static struct php_sqlite_db *php_sqlite_open(char *filename, int mode, char *persistent_id, zval *return_value, zval *errmsg, zval *object TSRMLS_DC)
-{
- char *errtext = NULL;
- sqlite *sdb = NULL;
- struct php_sqlite_db *db = NULL;
-
- sdb = sqlite_open(filename, mode, &errtext);
-
- if (sdb == NULL) {
-
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", errtext);
-
- if (errmsg) {
- ZVAL_STRING(errmsg, errtext, 1);
- }
-
- sqlite_freemem(errtext);
-
- /* if object is not an object then we're called from the factory() function */
- if (object && Z_TYPE_P(object) != IS_OBJECT) {
- RETVAL_NULL();
- } else {
- RETVAL_FALSE;
- }
- return NULL;
- }
-
- db = (struct php_sqlite_db *)pemalloc(sizeof(struct php_sqlite_db), persistent_id ? 1 : 0);
- db->is_persistent = persistent_id ? 1 : 0;
- db->last_err_code = SQLITE_OK;
- db->db = sdb;
-
- zend_hash_init(&db->callbacks, 0, NULL, php_sqlite_callback_dtor, db->is_persistent);
-
- /* register the PHP functions */
- sqlite_create_function(sdb, "php", -1, php_sqlite_generic_function_callback, 0);
-
- /* set default busy handler; keep retrying up until 1 minute has passed,
- * then fail with a busy status code */
- sqlite_busy_timeout(sdb, 60000);
-
- /* authorizer hook so we can enforce safe mode
- * Note: the declaration of php_sqlite_authorizer is correct for 2.8.2 of libsqlite,
- * and IS backwards binary compatible with earlier versions */
- sqlite_set_authorizer(sdb, php_sqlite_authorizer, NULL);
-
- db->rsrc_id = ZEND_REGISTER_RESOURCE(object ? NULL : return_value, db, persistent_id ? le_sqlite_pdb : le_sqlite_db);
- if (object) {
- /* if object is not an object then we're called from the factory() function */
- if (Z_TYPE_P(object) != IS_OBJECT) {
- sqlite_instanciate(sqlite_ce_db, object TSRMLS_CC);
- }
- /* and now register the object */
- SQLITE_REGISTER_OBJECT(db, object, db)
- }
-
- if (persistent_id) {
- list_entry le;
-
- Z_TYPE(le) = le_sqlite_pdb;
- le.ptr = db;
-
- if (FAILURE == zend_hash_update(&EG(persistent_list), persistent_id,
- strlen(persistent_id)+1,
- (void *)&le, sizeof(le), NULL)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Failed to register persistent resource");
- }
- }
-
- return db;
-}
-
-/* {{{ proto resource sqlite_popen(string filename [, int mode [, string &error_message]])
- Opens a persistent handle to a SQLite database. Will create the database if it does not exist. */
-PHP_FUNCTION(sqlite_popen)
-{
- long mode = 0666;
- char *filename, *fullpath, *hashkey;
- int filename_len, hashkeylen;
- zval *errmsg = NULL;
- struct php_sqlite_db *db = NULL;
- list_entry *le;
-
- if (FAILURE == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|lz/",
- &filename, &filename_len, &mode, &errmsg)) {
- return;
- }
- if (errmsg) {
- zval_dtor(errmsg);
- }
-
- if (strncmp(filename, ":memory:", sizeof(":memory:") - 1)) {
- /* resolve the fully-qualified path name to use as the hash key */
- fullpath = expand_filepath(filename, NULL TSRMLS_CC);
-
- if (PG(safe_mode) && (!php_checkuid(fullpath, NULL, CHECKUID_CHECK_FILE_AND_DIR))) {
- RETURN_FALSE;
- }
-
- if (php_check_open_basedir(fullpath TSRMLS_CC)) {
- RETURN_FALSE;
- }
- } else {
- fullpath = estrndup(filename, filename_len);
- }
-
- hashkeylen = spprintf(&hashkey, 0, "sqlite_pdb_%s:%ld", fullpath, mode);
-
- /* do we have an existing persistent connection ? */
- if (SUCCESS == zend_hash_find(&EG(persistent_list), hashkey, hashkeylen+1, (void*)&le)) {
- if (Z_TYPE_P(le) == le_sqlite_pdb) {
- db = (struct php_sqlite_db*)le->ptr;
-
- if (db->rsrc_id == FAILURE) {
- /* give it a valid resource id for this request */
- db->rsrc_id = ZEND_REGISTER_RESOURCE(return_value, db, le_sqlite_pdb);
- } else {
- int type;
- /* sanity check to ensure that the resource is still a valid regular resource
- * number */
- if (zend_list_find(db->rsrc_id, &type) == db) {
- /* already accessed this request; map it */
- zend_list_addref(db->rsrc_id);
- ZVAL_RESOURCE(return_value, db->rsrc_id);
- } else {
- db->rsrc_id = ZEND_REGISTER_RESOURCE(return_value, db, le_sqlite_pdb);
- }
- }
-
- /* all set */
- goto done;
- }
-
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Some other type of persistent resource is using this hash key!?");
- RETVAL_FALSE;
- goto done;
- }
-
- /* now we need to open the database */
- php_sqlite_open(fullpath, (int)mode, hashkey, return_value, errmsg, NULL TSRMLS_CC);
-done:
- efree(fullpath);
- efree(hashkey);
-}
-/* }}} */
-
-/* {{{ proto resource sqlite_open(string filename [, int mode [, string &error_message]])
- Opens a SQLite database. Will create the database if it does not exist. */
-PHP_FUNCTION(sqlite_open)
-{
- long mode = 0666;
- char *filename, *fullpath = NULL;
- int filename_len;
- zval *errmsg = NULL;
- zval *object = getThis();
-
- php_set_error_handling(object ? EH_THROW : EH_NORMAL, sqlite_ce_exception TSRMLS_CC);
- if (FAILURE == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|lz/",
- &filename, &filename_len, &mode, &errmsg)) {
- php_std_error_handling();
- return;
- }
- if (errmsg) {
- zval_dtor(errmsg);
- }
-
- if (strncmp(filename, ":memory:", sizeof(":memory:") - 1)) {
- /* resolve the fully-qualified path name to use as the hash key */
- fullpath = expand_filepath(filename, NULL TSRMLS_CC);
-
- if (PG(safe_mode) && (!php_checkuid(fullpath, NULL, CHECKUID_CHECK_FILE_AND_DIR))) {
- php_std_error_handling();
- efree(fullpath);
- if (object) {
- RETURN_NULL();
- } else {
- RETURN_FALSE;
- }
- }
-
- if (php_check_open_basedir(fullpath TSRMLS_CC)) {
- php_std_error_handling();
- efree(fullpath);
- if (object) {
- RETURN_NULL();
- } else {
- RETURN_FALSE;
- }
- }
-
- }
-
- php_sqlite_open(fullpath ? fullpath : filename, (int)mode, NULL, return_value, errmsg, object TSRMLS_CC);
-
- if (fullpath) {
- efree(fullpath);
- }
- php_std_error_handling();
-}
-/* }}} */
-
-/* {{{ proto object sqlite_factory(string filename [, int mode [, string &error_message]])
- Opens a SQLite database and creates an object for it. Will create the database if it does not exist. */
-PHP_FUNCTION(sqlite_factory)
-{
- long mode = 0666;
- char *filename, *fullpath = NULL;
- int filename_len;
- zval *errmsg = NULL;
-
- php_set_error_handling(EH_THROW, sqlite_ce_exception TSRMLS_CC);
- if (FAILURE == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|lz/",
- &filename, &filename_len, &mode, &errmsg)) {
- php_std_error_handling();
- RETURN_NULL();
- }
- if (errmsg) {
- zval_dtor(errmsg);
- }
-
- if (strncmp(filename, ":memory:", sizeof(":memory:") - 1)) {
- /* resolve the fully-qualified path name to use as the hash key */
- fullpath = expand_filepath(filename, NULL TSRMLS_CC);
-
- if (PG(safe_mode) && (!php_checkuid(fullpath, NULL, CHECKUID_CHECK_FILE_AND_DIR))) {
- efree(fullpath);
- php_std_error_handling();
- RETURN_NULL();
- }
-
- if (php_check_open_basedir(fullpath TSRMLS_CC)) {
- efree(fullpath);
- php_std_error_handling();
- RETURN_NULL();
- }
- }
-
- php_sqlite_open(fullpath ? fullpath : filename, (int)mode, NULL, return_value, errmsg, return_value TSRMLS_CC);
- if (fullpath) {
- efree(fullpath);
- }
- php_std_error_handling();
-}
-/* }}} */
-
-/* {{{ proto void sqlite_busy_timeout(resource db, int ms)
- Set busy timeout duration. If ms <= 0, all busy handlers are disabled. */
-PHP_FUNCTION(sqlite_busy_timeout)
-{
- zval *zdb;
- struct php_sqlite_db *db;
- long ms;
- zval *object = getThis();
-
- if (object) {
- if (FAILURE == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &ms)) {
- return;
- }
- DB_FROM_OBJECT(db, object);
- } else {
- if (FAILURE == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rl", &zdb, &ms)) {
- return;
- }
- DB_FROM_ZVAL(db, &zdb);
- }
-
- sqlite_busy_timeout(db->db, ms);
-}
-/* }}} */
-
-/* {{{ proto void sqlite_close(resource db)
- Closes an open sqlite database. */
-PHP_FUNCTION(sqlite_close)
-{
- zval *zdb;
- struct php_sqlite_db *db;
- zval *object = getThis();
-
- if (object) {
- php_error_docref(NULL TSRMLS_CC, E_NOTICE, "Ignored, you must destruct the object instead");
- } else {
- if (FAILURE == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &zdb)) {
- return;
- }
- DB_FROM_ZVAL(db, &zdb);
- }
-
- zend_list_delete(Z_RESVAL_P(zdb));
-}
-/* }}} */
-
-/* {{{ php_sqlite_fetch */
-static int php_sqlite_fetch(struct php_sqlite_result *rres TSRMLS_DC)
-{
- const char **rowdata, **colnames;
- int ret, i, base;
- char *errtext = NULL, *colname;
-
-next_row:
- ret = sqlite_step(rres->vm, &rres->ncolumns, &rowdata, &colnames);
- if (!rres->nrows) {
- /* first row - lets copy the column names */
- rres->col_names = safe_emalloc(rres->ncolumns, sizeof(char *), 0);
- for (i = 0; i < rres->ncolumns; i++) {
- colname = (char*)colnames[i];
-
- if (SQLITE_G(assoc_case) == 1) {
- php_sqlite_strtoupper(colname);
- } else if (SQLITE_G(assoc_case) == 2) {
- php_sqlite_strtolower(colname);
- }
- rres->col_names[i] = estrdup(colname);
- }
- if (!rres->buffered) {
- /* non buffered mode - also fetch memory for on single row */
- rres->table = safe_emalloc(rres->ncolumns, sizeof(char *), 0);
- }
- }
-
- switch (ret) {
- case SQLITE_ROW:
- if (rres->buffered) {
- /* add the row to our collection */
- if (rres->nrows + 1 >= rres->alloc_rows) {
- rres->alloc_rows = rres->alloc_rows ? rres->alloc_rows * 2 : 16;
- rres->table = erealloc(rres->table, rres->alloc_rows * rres->ncolumns * sizeof(char *));
- }
- base = rres->nrows * rres->ncolumns;
- for (i = 0; i < rres->ncolumns; i++) {
- if (rowdata[i]) {
- rres->table[base + i] = estrdup(rowdata[i]);
- } else {
- rres->table[base + i] = NULL;
- }
- }
- rres->nrows++;
- goto next_row;
- } else {
- /* non buffered: only fetch one row but first free data if not first row */
- if (rres->nrows++) {
- for (i = 0; i < rres->ncolumns; i++) {
- if (rres->table[i]) {
- efree(rres->table[i]);
- }
- }
- }
- for (i = 0; i < rres->ncolumns; i++) {
- if (rowdata[i]) {
- rres->table[i] = estrdup(rowdata[i]);
- } else {
- rres->table[i] = NULL;
- }
- }
- }
- ret = SQLITE_OK;
- break;
-
- case SQLITE_BUSY:
- case SQLITE_ERROR:
- case SQLITE_MISUSE:
- case SQLITE_DONE:
- default:
- if (rres->vm) {
- ret = sqlite_finalize(rres->vm, &errtext);
- }
- rres->vm = NULL;
- if (ret != SQLITE_OK) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", errtext);
- sqlite_freemem(errtext);
- }
- break;
- }
- rres->db->last_err_code = ret;
-
- return ret;
-}
-/* }}} */
-
-/* {{{ sqlite_query */
-void sqlite_query(zval *object, struct php_sqlite_db *db, char *sql, long sql_len, int mode, int buffered, zval *return_value, struct php_sqlite_result **prres TSRMLS_DC)
-{
- struct php_sqlite_result res, *rres;
- int ret;
- char *errtext = NULL;
- const char *tail;
-
- memset(&res, 0, sizeof(res));
- res.buffered = buffered;
- res.mode = mode;
-
- ret = sqlite_compile(db->db, sql, &tail, &res.vm, &errtext);
- db->last_err_code = ret;
-
- if (ret != SQLITE_OK) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", errtext);
- sqlite_freemem(errtext);
- goto terminate;
- } else if (!res.vm) { /* empty query */
-terminate:
- if (return_value) {
- RETURN_FALSE;
- } else {
- return;
- }
- }
-
- if (!prres) {
- rres = NULL;
- prres = &rres;
- }
- if (!*prres) {
- *prres = (struct php_sqlite_result*)emalloc(sizeof(**prres));
- }
- memcpy(*prres, &res, sizeof(**prres));
- (*prres)->db = db;
- zend_list_addref(db->rsrc_id);
-
-
- /* now the result set is ready for stepping: get first row */
- if (php_sqlite_fetch((*prres) TSRMLS_CC) != SQLITE_OK) {
- real_result_dtor((*prres) TSRMLS_CC);
- *prres = NULL;
- if (return_value) {
- RETURN_FALSE;
- } else {
- return;
- }
- }
-
- (*prres)->curr_row = 0;
-
- if (object) {
- sqlite_object *obj;
- if (buffered) {
- sqlite_instanciate(sqlite_ce_query, return_value TSRMLS_CC);
- } else {
- sqlite_instanciate(sqlite_ce_ub_query, return_value TSRMLS_CC);
- }
- obj = (sqlite_object *) zend_object_store_get_object(return_value TSRMLS_CC);
- obj->type = is_result;
- obj->u.res = (*prres);
- } else if (return_value) {
- ZEND_REGISTER_RESOURCE(object ? NULL : return_value, (*prres), le_sqlite_result);
- }
-}
-/* }}} */
-
-/* {{{ proto resource sqlite_unbuffered_query(string query, resource db [ , int result_type ])
- Executes a query that does not prefetch and buffer all data. */
-PHP_FUNCTION(sqlite_unbuffered_query)
-{
- zval *zdb;
- struct php_sqlite_db *db;
- char *sql;
- int sql_len;
- long mode = PHPSQLITE_BOTH;
- char *errtext = NULL;
- zval *object = getThis();
-
- if (object) {
- if (FAILURE == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|l", &sql, &sql_len, &mode)) {
- return;
- }
- DB_FROM_OBJECT(db, object);
- } else {
- if (FAILURE == zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET,
- ZEND_NUM_ARGS() TSRMLS_CC, "sr|l", &sql, &sql_len, &zdb, &mode) &&
- FAILURE == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rs|l", &zdb, &sql, &sql_len, &mode)) {
- return;
- }
- DB_FROM_ZVAL(db, &zdb);
- }
-
- PHP_SQLITE_EMPTY_QUERY;
-
- /* avoid doing work if we can */
- if (!return_value_used) {
- db->last_err_code = sqlite_exec(db->db, sql, NULL, NULL, &errtext);
-
- if (db->last_err_code != SQLITE_OK) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", errtext);
- sqlite_freemem(errtext);
- }
- return;
- }
-
- sqlite_query(object, db, sql, sql_len, (int)mode, 0, return_value, NULL TSRMLS_CC);
-}
-/* }}} */
-
-/* {{{ proto resource sqlite_fetch_column_types(string table_name, resource db)
- Return an array of column types from a particular table. */
-PHP_FUNCTION(sqlite_fetch_column_types)
-{
- zval *zdb;
- struct php_sqlite_db *db;
- char *tbl, *sql;
- int tbl_len;
- char *errtext = NULL;
- zval *object = getThis();
- struct php_sqlite_result res;
- const char **rowdata, **colnames, *tail;
- int i, ncols;
-
- if (object) {
- if (FAILURE == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &tbl, &tbl_len)) {
- return;
- }
- DB_FROM_OBJECT(db, object);
- } else {
- if (FAILURE == zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET,
- ZEND_NUM_ARGS() TSRMLS_CC, "sr", &tbl, &tbl_len, &zdb) &&
- FAILURE == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rs", &zdb, &tbl, &tbl_len)) {
- return;
- }
- DB_FROM_ZVAL(db, &zdb);
- }
-
- if (!(sql = sqlite_mprintf("SELECT * FROM '%q' LIMIT 1", tbl))) {
- RETURN_FALSE;
- }
-
- sqlite_exec(db->db, "PRAGMA show_datatypes = ON", NULL, NULL, NULL);
-
- db->last_err_code = sqlite_compile(db->db, sql, &tail, &res.vm, &errtext);
-
- sqlite_freemem(sql);
-
- if (db->last_err_code != SQLITE_OK) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", errtext);
- sqlite_freemem(errtext);
- RETVAL_FALSE;
- goto done;
- }
-
- sqlite_step(res.vm, &ncols, &rowdata, &colnames);
-
- array_init(return_value);
-
- for (i = 0; i < ncols; i++) {
- char *colname = (char *)colnames[i];
-
- if (SQLITE_G(assoc_case) == 1) {
- php_sqlite_strtoupper(colname);
- } else if (SQLITE_G(assoc_case) == 2) {
- php_sqlite_strtolower(colname);
- }
-
- add_assoc_string(return_value, colname, colnames[ncols + i] ? (char *)colnames[ncols + i] : "", 1);
- }
-
-done:
- sqlite_exec(db->db, "PRAGMA show_datatypes = OFF", NULL, NULL, NULL);
-}
-/* }}} */
-
-/* {{{ proto resource sqlite_query(string query, resource db [, int result_type ])
- Executes a query against a given database and returns a result handle. */
-PHP_FUNCTION(sqlite_query)
-{
- zval *zdb;
- struct php_sqlite_db *db;
- char *sql;
- int sql_len;
- long mode = PHPSQLITE_BOTH;
- char *errtext = NULL;
- zval *object = getThis();
-
- if (object) {
- if (FAILURE == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|l", &sql, &sql_len, &mode)) {
- return;
- }
- DB_FROM_OBJECT(db, object);
- } else {
- if (FAILURE == zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET,
- ZEND_NUM_ARGS() TSRMLS_CC, "sr|l", &sql, &sql_len, &zdb, &mode) &&
- FAILURE == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rs|l", &zdb, &sql, &sql_len, &mode)) {
- return;
- }
- DB_FROM_ZVAL(db, &zdb);
- }
-
- PHP_SQLITE_EMPTY_QUERY;
-
- /* avoid doing work if we can */
- if (!return_value_used) {
- db->last_err_code = sqlite_exec(db->db, sql, NULL, NULL, &errtext);
-
- if (db->last_err_code != SQLITE_OK) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", errtext);
- sqlite_freemem(errtext);
- }
- return;
- }
-
- sqlite_query(object, db, sql, sql_len, (int)mode, 1, return_value, NULL TSRMLS_CC);
-}
-/* }}} */
-
-/* {{{ proto boolean sqlite_exec(string query, resource db)
- Executes a result-less query against a given database */
-PHP_FUNCTION(sqlite_exec)
-{
- zval *zdb;
- struct php_sqlite_db *db;
- char *sql;
- int sql_len;
- char *errtext = NULL;
- zval *object = getThis();
-
- if (object) {
- if (FAILURE == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &sql, &sql_len)) {
- return;
- }
- DB_FROM_OBJECT(db, object);
- } else {
- if(FAILURE == zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET,
- ZEND_NUM_ARGS() TSRMLS_CC, "sr", &sql, &sql_len, &zdb) &&
- FAILURE == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rs", &zdb, &sql, &sql_len)) {
- return;
- }
- DB_FROM_ZVAL(db, &zdb);
- }
-
- PHP_SQLITE_EMPTY_QUERY;
-
- db->last_err_code = sqlite_exec(db->db, sql, NULL, NULL, &errtext);
-
- if (db->last_err_code != SQLITE_OK) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", errtext);
- sqlite_freemem(errtext);
- RETURN_FALSE;
- }
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ php_sqlite_fetch_array */
-static void php_sqlite_fetch_array(struct php_sqlite_result *res, int mode, zend_bool decode_binary, int move_next, zval *return_value TSRMLS_DC)
-{
- int j, n = res->ncolumns, buffered = res->buffered;
- const char **rowdata, **colnames;
-
- /* check range of the row */
- if (res->curr_row >= res->nrows) {
- /* no more */
- RETURN_FALSE;
- }
- colnames = (const char**)res->col_names;
- if (res->buffered) {
- rowdata = (const char**)&res->table[res->curr_row * res->ncolumns];
- } else {
- rowdata = (const char**)res->table;
- }
-
- /* now populate the result */
- array_init(return_value);
-
- for (j = 0; j < n; j++) {
- zval *decoded;
- MAKE_STD_ZVAL(decoded);
-
- if (rowdata[j] == NULL) {
- ZVAL_NULL(decoded);
- } else if (decode_binary && rowdata[j][0] == '\x01') {
- Z_STRVAL_P(decoded) = emalloc(strlen(rowdata[j]));
- Z_STRLEN_P(decoded) = php_sqlite_decode_binary(rowdata[j]+1, Z_STRVAL_P(decoded));
- Z_STRVAL_P(decoded)[Z_STRLEN_P(decoded)] = '\0';
- Z_TYPE_P(decoded) = IS_STRING;
- if (!buffered) {
- efree((char*)rowdata[j]);
- rowdata[j] = NULL;
- }
- } else {
- ZVAL_STRING(decoded, (char*)rowdata[j], buffered);
- if (!buffered) {
- rowdata[j] = NULL;
- }
- }
-
- if (mode & PHPSQLITE_NUM) {
- if (mode & PHPSQLITE_ASSOC) {
- add_index_zval(return_value, j, decoded);
- ZVAL_ADDREF(decoded);
- add_assoc_zval(return_value, (char*)colnames[j], decoded);
- } else {
- add_next_index_zval(return_value, decoded);
- }
- } else {
- add_assoc_zval(return_value, (char*)colnames[j], decoded);
- }
- }
-
- if (move_next) {
- if (!res->buffered) {
- /* non buffered: fetch next row */
- php_sqlite_fetch(res TSRMLS_CC);
- }
- /* advance the row pointer */
- res->curr_row++;
- }
-}
-/* }}} */
-
-/* {{{ php_sqlite_fetch_column */
-static void php_sqlite_fetch_column(struct php_sqlite_result *res, zval *which, zend_bool decode_binary, zval *return_value TSRMLS_DC)
-{
- int j;
- const char **rowdata, **colnames;
-
- /* check range of the row */
- if (res->curr_row >= res->nrows) {
- /* no more */
- RETURN_FALSE;
- }
- colnames = (const char**)res->col_names;
-
- if (Z_TYPE_P(which) == IS_LONG) {
- j = Z_LVAL_P(which);
- } else {
- convert_to_string_ex(&which);
- for (j = 0; j < res->ncolumns; j++) {
- if (!strcasecmp((char*)colnames[j], Z_STRVAL_P(which))) {
- break;
- }
- }
- }
- if (j < 0 || j >= res->ncolumns) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "No such column %d", j);
- RETURN_FALSE;
- }
-
- if (res->buffered) {
- rowdata = (const char**)&res->table[res->curr_row * res->ncolumns];
- } else {
- rowdata = (const char**)res->table;
- }
-
- if (rowdata[j] == NULL) {
- RETURN_NULL();
- } else if (decode_binary && rowdata[j] != NULL && rowdata[j][0] == '\x01') {
- int l = strlen(rowdata[j]);
- char *decoded = emalloc(l);
- l = php_sqlite_decode_binary(rowdata[j]+1, decoded);
- decoded[l] = '\0';
- RETVAL_STRINGL(decoded, l, 0);
- if (!res->buffered) {
- efree((char*)rowdata[j]);
- rowdata[j] = NULL;
- }
- } else {
- RETVAL_STRING((char*)rowdata[j], res->buffered);
- if (!res->buffered) {
- rowdata[j] = NULL;
- }
- }
-}
-/* }}} */
-
-/* {{{ proto array sqlite_fetch_all(resource result [, int result_type [, bool decode_binary]])
- Fetches all rows from a result set as an array of arrays. */
-PHP_FUNCTION(sqlite_fetch_all)
-{
- zval *zres, *ent;
- long mode = PHPSQLITE_BOTH;
- zend_bool decode_binary = 1;
- struct php_sqlite_result *res;
- zval *object = getThis();
-
- if (object) {
- if (FAILURE == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|lb", &mode, &decode_binary)) {
- return;
- }
- RES_FROM_OBJECT(res, object);
- if (!ZEND_NUM_ARGS()) {
- mode = res->mode;
- }
- } else {
- if (FAILURE == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r|lb", &zres, &mode, &decode_binary)) {
- return;
- }
- ZEND_FETCH_RESOURCE(res, struct php_sqlite_result *, &zres, -1, "sqlite result", le_sqlite_result);
- if (ZEND_NUM_ARGS() < 2) {
- mode = res->mode;
- }
- }
-
- if (res->curr_row >= res->nrows && res->nrows) {
- if (!res->buffered) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "One or more rowsets were already returned; returning NULL this time");
- } else {
- res->curr_row = 0;
- }
- }
-
- array_init(return_value);
-
- while (res->curr_row < res->nrows) {
- MAKE_STD_ZVAL(ent);
- php_sqlite_fetch_array(res, mode, decode_binary, 1, ent TSRMLS_CC);
- add_next_index_zval(return_value, ent);
- }
-}
-/* }}} */
-
-/* {{{ proto array sqlite_fetch_array(resource result [, int result_type [, bool decode_binary]])
- Fetches the next row from a result set as an array. */
-PHP_FUNCTION(sqlite_fetch_array)
-{
- zval *zres;
- long mode = PHPSQLITE_BOTH;
- zend_bool decode_binary = 1;
- struct php_sqlite_result *res;
- zval *object = getThis();
-
- if (object) {
- if (FAILURE == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|lb", &mode, &decode_binary)) {
- return;
- }
- RES_FROM_OBJECT(res, object);
- if (!ZEND_NUM_ARGS()) {
- mode = res->mode;
- }
- } else {
- if (FAILURE == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r|lb", &zres, &mode, &decode_binary)) {
- return;
- }
- ZEND_FETCH_RESOURCE(res, struct php_sqlite_result *, &zres, -1, "sqlite result", le_sqlite_result);
- if (ZEND_NUM_ARGS() < 2) {
- mode = res->mode;
- }
- }
-
- php_sqlite_fetch_array(res, mode, decode_binary, 1, return_value TSRMLS_CC);
-}
-/* }}} */
-
-/* {{{ proto object sqlite_fetch_object(resource result [, string class_name [, NULL|array ctor_params [, bool decode_binary]]])
- Fetches the next row from a result set as an object. */
- /* note that you can do array(&$val) for param ctor_params */
-PHP_FUNCTION(sqlite_fetch_object)
-{
- zval *zres;
- zend_bool decode_binary = 1;
- struct php_sqlite_result *res;
- zval *object = getThis();
- char *class_name;
- int class_name_len;
- zend_class_entry *ce;
- zval dataset;
- zend_fcall_info fci;
- zend_fcall_info_cache fcc;
- zval *retval_ptr;
- zval *ctor_params = NULL;
-
- php_set_error_handling(object ? EH_THROW : EH_NORMAL, sqlite_ce_exception TSRMLS_CC);
- if (object) {
- if (FAILURE == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|szb", &class_name, &class_name_len, &ctor_params, &decode_binary)) {
- php_std_error_handling();
- return;
- }
- RES_FROM_OBJECT(res, object);
- if (!ZEND_NUM_ARGS()) {
- ce = zend_standard_class_def;
- } else {
- ce = zend_fetch_class(class_name, class_name_len, ZEND_FETCH_CLASS_AUTO TSRMLS_CC);
- }
- } else {
- if (FAILURE == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r|szb", &zres, &class_name, &class_name_len, &ctor_params, &decode_binary)) {
- php_std_error_handling();
- return;
- }
- ZEND_FETCH_RESOURCE(res, struct php_sqlite_result *, &zres, -1, "sqlite result", le_sqlite_result);
- if (ZEND_NUM_ARGS() < 2) {
- ce = zend_standard_class_def;
- } else {
- ce = zend_fetch_class(class_name, class_name_len, ZEND_FETCH_CLASS_AUTO TSRMLS_CC);
- }
- }
-
- if (!ce) {
- zend_throw_exception_ex(sqlite_ce_exception, 0 TSRMLS_CC, "Could not find class '%s'", class_name);
- php_std_error_handling();
- return;
- }
-
- if (res->curr_row < res->nrows) {
- php_sqlite_fetch_array(res, PHPSQLITE_ASSOC, decode_binary, 1, &dataset TSRMLS_CC);
- } else {
- RETURN_FALSE;
- }
-
- object_and_properties_init(return_value, ce, NULL);
- zend_merge_properties(return_value, Z_ARRVAL(dataset), 1 TSRMLS_CC);
-
- php_std_error_handling(); /* before calling the ctor */
-
- if (ce->constructor) {
- fci.size = sizeof(fci);
- fci.function_table = &ce->function_table;
- fci.function_name = NULL;
- fci.symbol_table = NULL;
- fci.object_pp = &return_value;
- fci.retval_ptr_ptr = &retval_ptr;
- if (ctor_params && Z_TYPE_P(ctor_params) != IS_NULL) {
- if (Z_TYPE_P(ctor_params) == IS_ARRAY) {
- HashTable *ht = Z_ARRVAL_P(ctor_params);
- Bucket *p;
-
- fci.param_count = 0;
- fci.params = safe_emalloc(sizeof(zval*), ht->nNumOfElements, 0);
- p = ht->pListHead;
- while (p != NULL) {
- fci.params[fci.param_count++] = (zval**)p->pData;
- p = p->pListNext;
- }
- } else {
- /* Two problems why we throw exceptions here: PHP is typeless
- * and hence passing one argument that's not an array could be
- * by mistake and the other way round is possible, too. The
- * single value is an array. Also we'd have to make that one
- * argument passed by reference.
- */
- zend_throw_exception(sqlite_ce_exception, "Parameter ctor_params must be an array", 0 TSRMLS_CC);
- return;
- }
- } else {
- fci.param_count = 0;
- fci.params = NULL;
- }
- fci.no_separation = 1;
-
- fcc.initialized = 1;
- fcc.function_handler = ce->constructor;
- fcc.calling_scope = EG(scope);
- fcc.object_pp = &return_value;
-
- if (zend_call_function(&fci, &fcc TSRMLS_CC) == FAILURE) {
- zend_throw_exception_ex(sqlite_ce_exception, 0 TSRMLS_CC, "Could not execute %s::%s()", class_name, ce->constructor->common.function_name);
- } else {
- if (retval_ptr) {
- zval_ptr_dtor(&retval_ptr);
- }
- }
- if (fci.params) {
- efree(fci.params);
- }
- } else if (ctor_params && Z_TYPE_P(ctor_params) != IS_NULL) {
- zend_throw_exception_ex(sqlite_ce_exception, 0 TSRMLS_CC, "Class %s does not have a constructor, use NULL for parameter ctor_params or omit it", class_name);
- }
-}
-/* }}} */
-
-/* {{{ proto array sqlite_array_query(resource db, string query [ , int result_type [, bool decode_binary]])
- Executes a query against a given database and returns an array of arrays. */
-PHP_FUNCTION(sqlite_array_query)
-{
- zval *zdb, *ent;
- struct php_sqlite_db *db;
- struct php_sqlite_result *rres;
- char *sql;
- int sql_len;
- long mode = PHPSQLITE_BOTH;
- char *errtext = NULL;
- zend_bool decode_binary = 1;
- zval *object = getThis();
-
- if (object) {
- if (FAILURE == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|lb", &sql, &sql_len, &mode, &decode_binary)) {
- return;
- }
- DB_FROM_OBJECT(db, object);
- } else {
- if (FAILURE == zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET,
- ZEND_NUM_ARGS() TSRMLS_CC, "sr|lb", &sql, &sql_len, &zdb, &mode, &decode_binary) &&
- FAILURE == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rs|lb", &zdb, &sql, &sql_len, &mode, &decode_binary)) {
- return;
- }
- DB_FROM_ZVAL(db, &zdb);
- }
-
- PHP_SQLITE_EMPTY_QUERY;
-
- /* avoid doing work if we can */
- if (!return_value_used) {
- db->last_err_code = sqlite_exec(db->db, sql, NULL, NULL, &errtext);
-
- if (db->last_err_code != SQLITE_OK) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", errtext);
- sqlite_freemem(errtext);
- }
- return;
- }
-
- rres = (struct php_sqlite_result *)emalloc(sizeof(*rres));
- sqlite_query(NULL, db, sql, sql_len, (int)mode, 0, NULL, &rres TSRMLS_CC);
- if (db->last_err_code != SQLITE_OK) {
- if (rres) {
- efree(rres);
- }
- RETURN_FALSE;
- }
-
- array_init(return_value);
-
- while (rres->curr_row < rres->nrows) {
- MAKE_STD_ZVAL(ent);
- php_sqlite_fetch_array(rres, mode, decode_binary, 1, ent TSRMLS_CC);
- add_next_index_zval(return_value, ent);
- }
- real_result_dtor(rres TSRMLS_CC);
-}
-/* }}} */
-
-/* {{{ php_sqlite_fetch_single */
-static void php_sqlite_fetch_single(struct php_sqlite_result *res, zend_bool decode_binary, zval *return_value TSRMLS_DC)
-{
- const char **rowdata;
- char *decoded;
- int decoded_len;
-
- /* check range of the row */
- if (res->curr_row >= res->nrows) {
- /* no more */
- RETURN_FALSE;
- }
-
- if (res->buffered) {
- rowdata = (const char**)&res->table[res->curr_row * res->ncolumns];
- } else {
- rowdata = (const char**)res->table;
- }
-
- if (decode_binary && rowdata[0] != NULL && rowdata[0][0] == '\x01') {
- decoded = emalloc(strlen(rowdata[0]));
- decoded_len = php_sqlite_decode_binary(rowdata[0]+1, decoded);
- if (!res->buffered) {
- efree((char*)rowdata[0]);
- rowdata[0] = NULL;
- }
- } else if (rowdata[0]) {
- decoded_len = strlen((char*)rowdata[0]);
- if (res->buffered) {
- decoded = estrndup((char*)rowdata[0], decoded_len);
- } else {
- decoded = (char*)rowdata[0];
- rowdata[0] = NULL;
- }
- } else {
- decoded = NULL;
- decoded_len = 0;
- }
-
- if (!res->buffered) {
- /* non buffered: fetch next row */
- php_sqlite_fetch(res TSRMLS_CC);
- }
- /* advance the row pointer */
- res->curr_row++;
-
- if (decoded == NULL) {
- RETURN_NULL();
- } else {
- RETURN_STRINGL(decoded, decoded_len, 0);
- }
-}
-/* }}} */
-
-
-/* {{{ proto array sqlite_single_query(resource db, string query [, bool first_row_only [, bool decode_binary]])
- Executes a query and returns either an array for one single column or the value of the first row. */
-PHP_FUNCTION(sqlite_single_query)
-{
- zval *zdb, *ent;
- struct php_sqlite_db *db;
- struct php_sqlite_result *rres;
- char *sql;
- int sql_len;
- char *errtext = NULL;
- zend_bool decode_binary = 1;
- zend_bool srow = 1;
- zval *object = getThis();
-
- if (object) {
- if (FAILURE == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|bb", &sql, &sql_len, &srow, &decode_binary)) {
- return;
- }
- RES_FROM_OBJECT(db, object);
- } else {
- if (FAILURE == zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET,
- ZEND_NUM_ARGS() TSRMLS_CC, "sr|bb", &sql, &sql_len, &zdb, &srow, &decode_binary) &&
- FAILURE == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rs|bb", &zdb, &sql, &sql_len, &srow, &decode_binary)) {
- return;
- }
- DB_FROM_ZVAL(db, &zdb);
- }
-
- PHP_SQLITE_EMPTY_QUERY;
-
- /* avoid doing work if we can */
- if (!return_value_used) {
- db->last_err_code = sqlite_exec(db->db, sql, NULL, NULL, &errtext);
-
- if (db->last_err_code != SQLITE_OK) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", errtext);
- sqlite_freemem(errtext);
- }
- return;
- }
-
- rres = (struct php_sqlite_result *)emalloc(sizeof(*rres));
- sqlite_query(NULL, db, sql, sql_len, PHPSQLITE_NUM, 0, NULL, &rres TSRMLS_CC);
- if (db->last_err_code != SQLITE_OK) {
- if (rres) {
- efree(rres);
- }
- RETURN_FALSE;
- }
-
- if (!srow) {
- array_init(return_value);
- }
-
- while (rres->curr_row < rres->nrows) {
- MAKE_STD_ZVAL(ent);
- php_sqlite_fetch_single(rres, decode_binary, ent TSRMLS_CC);
-
- /* if set and we only have 1 row in the result set, return the result as a string. */
- if (srow) {
- if (rres->curr_row == 1 && rres->curr_row >= rres->nrows) {
- *return_value = *ent;
- zval_copy_ctor(return_value);
- zval_dtor(ent);
- FREE_ZVAL(ent);
- break;
- } else {
- srow = 0;
- array_init(return_value);
- }
- }
- add_next_index_zval(return_value, ent);
- }
-
- real_result_dtor(rres TSRMLS_CC);
-}
-/* }}} */
-
-
-/* {{{ proto string sqlite_fetch_single(resource result [, bool decode_binary])
- Fetches the first column of a result set as a string. */
-PHP_FUNCTION(sqlite_fetch_single)
-{
- zval *zres;
- zend_bool decode_binary = 1;
- struct php_sqlite_result *res;
- zval *object = getThis();
-
- if (object) {
- if (FAILURE == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|b", &decode_binary)) {
- return;
- }
- RES_FROM_OBJECT(res, object);
- } else {
- if (FAILURE == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r|b", &zres, &decode_binary)) {
- return;
- }
- ZEND_FETCH_RESOURCE(res, struct php_sqlite_result *, &zres, -1, "sqlite result", le_sqlite_result);
- }
-
- php_sqlite_fetch_single(res, decode_binary, return_value TSRMLS_CC);
-}
-/* }}} */
-
-/* {{{ proto array sqlite_current(resource result [, int result_type [, bool decode_binary]])
- Fetches the current row from a result set as an array. */
-PHP_FUNCTION(sqlite_current)
-{
- zval *zres;
- long mode = PHPSQLITE_BOTH;
- zend_bool decode_binary = 1;
- struct php_sqlite_result *res;
- zval *object = getThis();
-
- if (object) {
- if (ZEND_NUM_ARGS() && FAILURE == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|lb", &mode, &decode_binary)) {
- return;
- }
- RES_FROM_OBJECT(res, object);
- if (!ZEND_NUM_ARGS()) {
- mode = res->mode;
- }
- } else {
- if (FAILURE == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r|lb", &zres, &mode, &decode_binary)) {
- return;
- }
- ZEND_FETCH_RESOURCE(res, struct php_sqlite_result *, &zres, -1, "sqlite result", le_sqlite_result);
- if (ZEND_NUM_ARGS() < 2) {
- mode = res->mode;
- }
- }
-
- php_sqlite_fetch_array(res, mode, decode_binary, 0, return_value TSRMLS_CC);
-}
-/* }}} */
-
-/* {{{ proto mixed sqlite_column(resource result, mixed index_or_name [, bool decode_binary])
- Fetches a column from the current row of a result set. */
-PHP_FUNCTION(sqlite_column)
-{
- zval *zres;
- zval *which;
- zend_bool decode_binary = 1;
- struct php_sqlite_result *res;
- zval *object = getThis();
-
- if (object) {
- if (FAILURE == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z|b", &which, &decode_binary)) {
- return;
- }
- RES_FROM_OBJECT(res, object);
- } else {
- if (FAILURE == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rz|b", &zres, &which, &decode_binary)) {
- return;
- }
- ZEND_FETCH_RESOURCE(res, struct php_sqlite_result *, &zres, -1, "sqlite result", le_sqlite_result);
- }
-
- php_sqlite_fetch_column(res, which, decode_binary, return_value TSRMLS_CC);
-}
-/* }}} */
-
-/* {{{ proto string sqlite_libversion()
- Returns the version of the linked SQLite library. */
-PHP_FUNCTION(sqlite_libversion)
-{
- if (ZEND_NUM_ARGS() != 0) {
- WRONG_PARAM_COUNT;
- }
- RETURN_STRING((char*)sqlite_libversion(), 1);
-}
-/* }}} */
-
-/* {{{ proto string sqlite_libencoding()
- Returns the encoding (iso8859 or UTF-8) of the linked SQLite library. */
-PHP_FUNCTION(sqlite_libencoding)
-{
- if (ZEND_NUM_ARGS() != 0) {
- WRONG_PARAM_COUNT;
- }
- RETURN_STRING((char*)sqlite_libencoding(), 1);
-}
-/* }}} */
-
-/* {{{ proto int sqlite_changes(resource db)
- Returns the number of rows that were changed by the most recent SQL statement. */
-PHP_FUNCTION(sqlite_changes)
-{
- zval *zdb;
- struct php_sqlite_db *db;
- zval *object = getThis();
-
- if (object) {
- if (ZEND_NUM_ARGS() != 0) {
- WRONG_PARAM_COUNT
- }
- DB_FROM_OBJECT(db, object);
- } else {
- if (FAILURE == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &zdb)) {
- return;
- }
- DB_FROM_ZVAL(db, &zdb);
- }
-
- RETURN_LONG(sqlite_changes(db->db));
-}
-/* }}} */
-
-/* {{{ proto int sqlite_last_insert_rowid(resource db)
- Returns the rowid of the most recently inserted row. */
-PHP_FUNCTION(sqlite_last_insert_rowid)
-{
- zval *zdb;
- struct php_sqlite_db *db;
- zval *object = getThis();
-
- if (object) {
- if (ZEND_NUM_ARGS() != 0) {
- WRONG_PARAM_COUNT
- }
- DB_FROM_OBJECT(db, object);
- } else {
- if (FAILURE == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &zdb)) {
- return;
- }
- DB_FROM_ZVAL(db, &zdb);
- }
-
- RETURN_LONG(sqlite_last_insert_rowid(db->db));
-}
-/* }}} */
-
-/* {{{ proto int sqlite_num_rows(resource result)
- Returns the number of rows in a buffered result set. */
-PHP_FUNCTION(sqlite_num_rows)
-{
- zval *zres;
- struct php_sqlite_result *res;
- zval *object = getThis();
-
- if (object) {
- if (ZEND_NUM_ARGS() != 0) {
- WRONG_PARAM_COUNT
- }
- RES_FROM_OBJECT(res, object);
- } else {
- if (FAILURE == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &zres)) {
- return;
- }
- ZEND_FETCH_RESOURCE(res, struct php_sqlite_result *, &zres, -1, "sqlite result", le_sqlite_result);
- }
-
- if (res->buffered) {
- RETURN_LONG(res->nrows);
- } else {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Row count is not available for unbuffered queries");
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-/* {{{ proto bool sqlite_valid(resource result)
- Returns whether more rows are available. */
-PHP_FUNCTION(sqlite_valid)
-{
- zval *zres;
- struct php_sqlite_result *res;
- zval *object = getThis();
-
- if (object) {
- if (ZEND_NUM_ARGS() != 0) {
- WRONG_PARAM_COUNT
- }
- RES_FROM_OBJECT(res, object);
- } else {
- if (FAILURE == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &zres)) {
- return;
- }
- ZEND_FETCH_RESOURCE(res, struct php_sqlite_result *, &zres, -1, "sqlite result", le_sqlite_result);
- }
-
- RETURN_BOOL(res->curr_row < res->nrows && res->nrows); /* curr_row may be -1 */
-}
-/* }}} */
-
-/* {{{ proto bool sqlite_has_prev(resource result)
- * Returns whether a previous row is available. */
-PHP_FUNCTION(sqlite_has_prev)
-{
- zval *zres;
- struct php_sqlite_result *res;
- zval *object = getThis();
-
- if (object) {
- if (ZEND_NUM_ARGS() != 0) {
- WRONG_PARAM_COUNT
- }
- RES_FROM_OBJECT(res, object);
- } else {
- if (FAILURE == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &zres)) {
- return;
- }
- ZEND_FETCH_RESOURCE(res, struct php_sqlite_result *, &zres, -1, "sqlite result", le_sqlite_result);
- }
-
- if(!res->buffered) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "you cannot use sqlite_has_prev on unbuffered querys");
- RETURN_FALSE;
- }
-
- RETURN_BOOL(res->curr_row);
-}
-/* }}} */
-
-/* {{{ proto int sqlite_num_fields(resource result)
- Returns the number of fields in a result set. */
-PHP_FUNCTION(sqlite_num_fields)
-{
- zval *zres;
- struct php_sqlite_result *res;
- zval *object = getThis();
-
- if (object) {
- if (ZEND_NUM_ARGS() != 0) {
- WRONG_PARAM_COUNT
- }
- RES_FROM_OBJECT(res, object);
- } else {
- if (FAILURE == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &zres)) {
- return;
- }
- ZEND_FETCH_RESOURCE(res, struct php_sqlite_result *, &zres, -1, "sqlite result", le_sqlite_result);
- }
-
- RETURN_LONG(res->ncolumns);
-}
-/* }}} */
-
-/* {{{ proto string sqlite_field_name(resource result, int field_index)
- Returns the name of a particular field of a result set. */
-PHP_FUNCTION(sqlite_field_name)
-{
- zval *zres;
- struct php_sqlite_result *res;
- long field;
- zval *object = getThis();
-
- if (object) {
- if (FAILURE == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &field)) {
- return;
- }
- RES_FROM_OBJECT(res, object);
- } else {
- if (FAILURE == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rl", &zres, &field)) {
- return;
- }
- ZEND_FETCH_RESOURCE(res, struct php_sqlite_result *, &zres, -1, "sqlite result", le_sqlite_result);
- }
-
- if (field < 0 || field >= res->ncolumns) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "field %ld out of range", field);
- RETURN_FALSE;
- }
-
- RETURN_STRING(res->col_names[field], 1);
-}
-/* }}} */
-
-/* {{{ proto bool sqlite_seek(resource result, int row)
- Seek to a particular row number of a buffered result set. */
-PHP_FUNCTION(sqlite_seek)
-{
- zval *zres;
- struct php_sqlite_result *res;
- long row;
- zval *object = getThis();
-
- if (object) {
- if (FAILURE == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &row)) {
- return;
- }
- RES_FROM_OBJECT(res, object);
- } else {
- if (FAILURE == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rl", &zres, &row)) {
- return;
- }
- ZEND_FETCH_RESOURCE(res, struct php_sqlite_result *, &zres, -1, "sqlite result", le_sqlite_result);
- }
-
- if (!res->buffered) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Cannot seek an unbuffered result set");
- RETURN_FALSE;
- }
-
- if (row < 0 || row >= res->nrows) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "row %ld out of range", row);
- RETURN_FALSE;
- }
-
- res->curr_row = row;
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto bool sqlite_rewind(resource result)
- Seek to the first row number of a buffered result set. */
-PHP_FUNCTION(sqlite_rewind)
-{
- zval *zres;
- struct php_sqlite_result *res;
- zval *object = getThis();
-
- if (object) {
- if (ZEND_NUM_ARGS() != 0) {
- WRONG_PARAM_COUNT
- }
- RES_FROM_OBJECT(res, object);
- } else {
- if (FAILURE == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &zres)) {
- return;
- }
- ZEND_FETCH_RESOURCE(res, struct php_sqlite_result *, &zres, -1, "sqlite result", le_sqlite_result);
- }
-
- if (!res->buffered) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Cannot rewind an unbuffered result set");
- RETURN_FALSE;
- }
-
- if (!res->nrows) {
- php_error_docref(NULL TSRMLS_CC, E_NOTICE, "no rows received");
- RETURN_FALSE;
- }
-
- res->curr_row = 0;
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto bool sqlite_next(resource result)
- Seek to the next row number of a result set. */
-PHP_FUNCTION(sqlite_next)
-{
- zval *zres;
- struct php_sqlite_result *res;
- zval *object = getThis();
-
- if (object) {
- if (ZEND_NUM_ARGS() != 0) {
- WRONG_PARAM_COUNT
- }
- RES_FROM_OBJECT(res, object);
- } else {
- if (FAILURE == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &zres)) {
- return;
- }
- ZEND_FETCH_RESOURCE(res, struct php_sqlite_result *, &zres, -1, "sqlite result", le_sqlite_result);
- }
-
- if (!res->buffered && res->vm) {
- php_sqlite_fetch(res TSRMLS_CC);
- }
-
- if (res->curr_row >= res->nrows) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "no more rows available");
- RETURN_FALSE;
- }
-
- res->curr_row++;
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto bool sqlite_prev(resource result)
- * Seek to the previous row number of a result set. */
-PHP_FUNCTION(sqlite_prev)
-{
- zval *zres;
- struct php_sqlite_result *res;
- zval *object = getThis();
-
- if (object) {
- if (ZEND_NUM_ARGS() != 0) {
- WRONG_PARAM_COUNT
- }
- RES_FROM_OBJECT(res, object);
- } else {
- if (FAILURE == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &zres)) {
- return;
- }
- ZEND_FETCH_RESOURCE(res, struct php_sqlite_result *, &zres, -1, "sqlite result", le_sqlite_result);
- }
-
- if (!res->buffered) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "you cannot use sqlite_prev on unbuffered querys");
- RETURN_FALSE;
- }
-
- if (res->curr_row <= 0) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "no previous row available");
- RETURN_FALSE;
- }
-
- res->curr_row--;
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto string sqlite_escape_string(string item)
- Escapes a string for use as a query parameter. */
-PHP_FUNCTION(sqlite_escape_string)
-{
- char *string = NULL;
- int stringlen;
- char *ret;
-
- if (FAILURE == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &string, &stringlen)) {
- return;
- }
-
- if (stringlen && (string[0] == '\x01' || memchr(string, '\0', stringlen) != NULL)) {
- /* binary string */
- int enclen;
-
- ret = safe_emalloc(1 + stringlen / 254, 257, 3);
- ret[0] = '\x01';
- enclen = php_sqlite_encode_binary(string, stringlen, ret+1);
- RETVAL_STRINGL(ret, enclen+1, 0);
-
- } else if (stringlen) {
- ret = sqlite_mprintf("%q", string);
- if (ret) {
- RETVAL_STRING(ret, 1);
- sqlite_freemem(ret);
- }
- } else {
- RETURN_EMPTY_STRING();
- }
-}
-/* }}} */
-
-/* {{{ proto int sqlite_last_error(resource db)
- Returns the error code of the last error for a database. */
-PHP_FUNCTION(sqlite_last_error)
-{
- zval *zdb;
- struct php_sqlite_db *db;
- zval *object = getThis();
-
- if (object) {
- if (ZEND_NUM_ARGS() != 0) {
- WRONG_PARAM_COUNT
- }
- DB_FROM_OBJECT(db, object);
- } else {
- if (FAILURE == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &zdb)) {
- return;
- }
- DB_FROM_ZVAL(db, &zdb);
- }
-
- RETURN_LONG(db->last_err_code);
-}
-/* }}} */
-
-/* {{{ proto string sqlite_error_string(int error_code)
- Returns the textual description of an error code. */
-PHP_FUNCTION(sqlite_error_string)
-{
- long code;
- const char *msg;
-
- if (FAILURE == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &code)) {
- return;
- }
-
- msg = sqlite_error_string(code);
-
- if (msg) {
- RETURN_STRING((char*)msg, 1);
- } else {
- RETURN_NULL();
- }
-}
-/* }}} */
-
-/* manages duplicate registrations of a particular function, and
- * also handles the case where the db is using a persistent connection */
-enum callback_prep_t { DO_REG, SKIP_REG, ERR };
-
-static enum callback_prep_t prep_callback_struct(struct php_sqlite_db *db, int is_agg,
- char *funcname,
- zval *step, zval *fini, struct php_sqlite_agg_functions **funcs)
-{
- struct php_sqlite_agg_functions *alloc_funcs, func_tmp;
- char *hashkey;
- int hashkeylen;
- enum callback_prep_t ret;
-
- hashkeylen = spprintf(&hashkey, 0, "%s-%s", is_agg ? "agg" : "reg", funcname);
-
- /* is it already registered ? */
- if (SUCCESS == zend_hash_find(&db->callbacks, hashkey, hashkeylen+1, (void*)&alloc_funcs)) {
- /* override the previous definition */
-
- if (alloc_funcs->is_valid) {
- /* release these */
-
- if (alloc_funcs->step) {
- zval_ptr_dtor(&alloc_funcs->step);
- alloc_funcs->step = NULL;
- }
-
- if (alloc_funcs->fini) {
- zval_ptr_dtor(&alloc_funcs->fini);
- alloc_funcs->fini = NULL;
- }
- }
-
- ret = SKIP_REG;
- } else {
- /* add a new one */
- func_tmp.db = db;
-
- ret = SUCCESS == zend_hash_update(&db->callbacks, hashkey, hashkeylen+1,
- (void*)&func_tmp, sizeof(func_tmp), (void**)&alloc_funcs) ? DO_REG : ERR;
- }
-
- efree(hashkey);
-
- MAKE_STD_ZVAL(alloc_funcs->step);
- *(alloc_funcs->step) = *step;
- zval_copy_ctor(alloc_funcs->step);
-
- if (is_agg) {
- MAKE_STD_ZVAL(alloc_funcs->fini);
- *(alloc_funcs->fini) = *fini;
- zval_copy_ctor(alloc_funcs->fini);
- } else {
- alloc_funcs->fini = NULL;
- }
- alloc_funcs->is_valid = 1;
- *funcs = alloc_funcs;
-
- return ret;
-}
-
-
-/* {{{ proto bool sqlite_create_aggregate(resource db, string funcname, mixed step_func, mixed finalize_func[, long num_args])
- Registers an aggregate function for queries. */
-PHP_FUNCTION(sqlite_create_aggregate)
-{
- char *funcname = NULL;
- int funcname_len;
- zval *zstep, *zfinal, *zdb;
- struct php_sqlite_db *db;
- struct php_sqlite_agg_functions *funcs;
- char *callable = NULL;
- long num_args = -1;
- zval *object = getThis();
-
- if (object) {
- if (FAILURE == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "szz|l", &funcname, &funcname_len, &zstep, &zfinal, &num_args)) {
- return;
- }
- DB_FROM_OBJECT(db, object);
- } else {
- if (FAILURE == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rszz|l", &zdb, &funcname, &funcname_len, &zstep, &zfinal, &num_args)) {
- return;
- }
- DB_FROM_ZVAL(db, &zdb);
- }
-
- if (!zend_is_callable(zstep, 0, &callable)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "step function `%s' is not callable", callable);
- efree(callable);
- return;
- }
- efree(callable);
-
- if (!zend_is_callable(zfinal, 0, &callable)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "finalize function `%s' is not callable", callable);
- efree(callable);
- return;
- }
- efree(callable);
-
-
- if (prep_callback_struct(db, 1, funcname, zstep, zfinal, &funcs) == DO_REG) {
- sqlite_create_aggregate(db->db, funcname, num_args,
- php_sqlite_agg_step_function_callback,
- php_sqlite_agg_fini_function_callback, funcs);
- }
-
-
-}
-/* }}} */
-
-/* {{{ proto bool sqlite_create_function(resource db, string funcname, mixed callback[, long num_args])
- Registers a "regular" function for queries. */
-PHP_FUNCTION(sqlite_create_function)
-{
- char *funcname = NULL;
- int funcname_len;
- zval *zcall, *zdb;
- struct php_sqlite_db *db;
- struct php_sqlite_agg_functions *funcs;
- char *callable = NULL;
- long num_args = -1;
-
- zval *object = getThis();
-
- if (object) {
- if (FAILURE == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "sz|l", &funcname, &funcname_len, &zcall, &num_args)) {
- return;
- }
- DB_FROM_OBJECT(db, object);
- } else {
- if (FAILURE == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rsz|l", &zdb, &funcname, &funcname_len, &zcall, &num_args)) {
- return;
- }
- DB_FROM_ZVAL(db, &zdb);
- }
-
- if (!zend_is_callable(zcall, 0, &callable)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "function `%s' is not callable", callable);
- efree(callable);
- return;
- }
- efree(callable);
-
- if (prep_callback_struct(db, 0, funcname, zcall, NULL, &funcs) == DO_REG) {
- sqlite_create_function(db->db, funcname, num_args, php_sqlite_function_callback, funcs);
- }
-}
-/* }}} */
-
-/* {{{ proto string sqlite_udf_encode_binary(string data)
- Apply binary encoding (if required) to a string to return from an UDF. */
-PHP_FUNCTION(sqlite_udf_encode_binary)
-{
- char *data = NULL;
- int datalen;
-
- if (FAILURE == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s!", &data, &datalen)) {
- return;
- }
-
- if (data == NULL) {
- RETURN_NULL();
- }
- if (datalen && (data[0] == '\x01' || memchr(data, '\0', datalen) != NULL)) {
- /* binary string */
- int enclen;
- char *ret;
-
- ret = safe_emalloc(1 + datalen / 254, 257, 3);
- ret[0] = '\x01';
- enclen = php_sqlite_encode_binary(data, datalen, ret+1);
- RETVAL_STRINGL(ret, enclen+1, 0);
- } else {
- RETVAL_STRINGL(data, datalen, 1);
- }
-}
-/* }}} */
-
-/* {{{ proto string sqlite_udf_decode_binary(string data)
- Decode binary encoding on a string parameter passed to an UDF. */
-PHP_FUNCTION(sqlite_udf_decode_binary)
-{
- char *data = NULL;
- int datalen;
-
- if (FAILURE == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s!", &data, &datalen)) {
- return;
- }
-
- if (data == NULL) {
- RETURN_NULL();
- }
- if (datalen && data[0] == '\x01') {
- /* encoded string */
- int enclen;
- char *ret;
-
- ret = emalloc(datalen);
- enclen = php_sqlite_decode_binary(data+1, ret);
- ret[enclen] = '\0';
- RETVAL_STRINGL(ret, enclen, 0);
- } else {
- RETVAL_STRINGL(data, datalen, 1);
- }
-}
-/* }}} */
-
-
-/*
- * 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/sqlite/sqlite.dsp b/ext/sqlite/sqlite.dsp
deleted file mode 100644
index f6dfb437c2..0000000000
--- a/ext/sqlite/sqlite.dsp
+++ /dev/null
@@ -1,339 +0,0 @@
-# Microsoft Developer Studio Project File - Name="sqlite" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=sqlite - Win32 Debug_TS
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "sqlite.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "sqlite.mak" CFG="sqlite - Win32 Debug_TS"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "sqlite - Win32 Release_TS" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "sqlite - Win32 Debug_TS" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "sqlite - Win32 Release_TS"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release_TS"
-# PROP BASE Intermediate_Dir "Release_TS"
-# PROP BASE Ignore_Export_Lib 0
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release_TS"
-# PROP Intermediate_Dir "Release_TS"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MD /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "SQLITE_EXPORTS" /YX /FD /c
-# ADD CPP /nologo /MD /W3 /GX /O2 /I "..\.." /I "..\..\main" /I "..\..\Zend" /I "..\..\TSRM" /I "..\..\win32" /I "..\..\..\php_build" /D ZEND_DEBUG=0 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "COMPILE_DL_SQLITE" /D ZTS=1 /D "ZEND_WIN32" /D "PHP_WIN32" /D HAVE_SQLITE=1 /D "PHP_SQLITE_EXPORTS" /FR /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x407 /d "NDEBUG"
-# ADD RSC /l 0x407 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386
-# ADD LINK32 php5ts.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 /out:"..\..\Release_TS\php_sqlite.dll" /libpath:"..\..\Release_TS" /libpath:"..\..\Release_TS_Inline" /libpath:"..\..\..\php_build\release"
-
-!ELSEIF "$(CFG)" == "sqlite - Win32 Debug_TS"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug_TS"
-# PROP BASE Intermediate_Dir "Debug_TS"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug_TS"
-# PROP Intermediate_Dir "Debug_TS"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "SQLITE_EXPORTS" /YX /FD /GZ /c
-# ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "..\.." /I "..\..\main" /I "..\..\Zend" /I "..\..\TSRM" /I "..\..\win32" /I "..\..\..\php_build" /D ZEND_DEBUG=1 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "COMPILE_DL_SQLITE" /D ZTS=1 /D "ZEND_WIN32" /D "PHP_WIN32" /D HAVE_SQLITE=1 /D "PHP_SQLITE_EXPORTS" /YX /FD /GZ /c
-# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x407 /d "_DEBUG"
-# ADD RSC /l 0x407 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 php5ts_debug.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /out:"..\..\Debug_TS\php_sqlite.dll" /pdbtype:sept /libpath:"..\..\Debug_TS" /libpath:"..\..\..\php_build\release"
-
-!ENDIF
-
-# Begin Target
-
-# Name "sqlite - Win32 Release_TS"
-# Name "sqlite - Win32 Debug_TS"
-# Begin Group "Source Files"
-
-# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
-# Begin Group "libsqlite"
-
-# PROP Default_Filter ""
-# Begin Source File
-
-SOURCE=.\libsqlite\src\attach.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\libsqlite\src\auth.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\libsqlite\src\btree.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\libsqlite\src\btree.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\libsqlite\src\btree_rb.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\libsqlite\src\build.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\libsqlite\src\config.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\libsqlite\src\copy.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\libsqlite\src\date.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\libsqlite\src\delete.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\libsqlite\src\encode.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\libsqlite\src\expr.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\libsqlite\src\func.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\libsqlite\src\hash.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\libsqlite\src\hash.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\libsqlite\src\insert.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\libsqlite\src\main.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\libsqlite\src\opcodes.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\libsqlite\src\opcodes.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\libsqlite\src\os.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\libsqlite\src\os.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\libsqlite\src\pager.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\libsqlite\src\pager.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\libsqlite\src\parse.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\libsqlite\src\parse.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\libsqlite\src\pragma.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\libsqlite\src\printf.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\libsqlite\src\random.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\libsqlite\src\select.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\libsqlite\src\sqlite.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\libsqlite\src\sqlite.w32.h
-
-!IF "$(CFG)" == "sqlite - Win32 Release_TS"
-
-# Begin Custom Build
-InputDir=.\libsqlite\src
-InputPath=.\libsqlite\src\sqlite.w32.h
-
-"$(InputDir)\sqlite.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- copy $(InputPath) $(InputDir)\sqlite.h
-
-# End Custom Build
-
-!ELSEIF "$(CFG)" == "sqlite - Win32 Debug_TS"
-
-# Begin Custom Build
-InputDir=.\libsqlite\src
-InputPath=.\libsqlite\src\sqlite.w32.h
-
-"$(InputDir)\sqlite.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- copy $(InputPath) $(InputDir)\sqlite.h
-
-# End Custom Build
-
-!ENDIF
-
-# End Source File
-# Begin Source File
-
-SOURCE=.\libsqlite\src\sqlite_config.w32.h
-
-!IF "$(CFG)" == "sqlite - Win32 Release_TS"
-
-# Begin Custom Build
-InputDir=.\libsqlite\src
-InputPath=.\libsqlite\src\sqlite_config.w32.h
-
-"$(InputDir)\config.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- copy $(InputPath) $(InputDir)\config.h
-
-# End Custom Build
-
-!ELSEIF "$(CFG)" == "sqlite - Win32 Debug_TS"
-
-# Begin Custom Build
-InputDir=.\libsqlite\src
-InputPath=.\libsqlite\src\sqlite_config.w32.h
-
-"$(InputDir)\config.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- copy $(InputPath) $(InputDir)\config.h
-
-# End Custom Build
-
-!ENDIF
-
-# End Source File
-# Begin Source File
-
-SOURCE=.\libsqlite\src\sqliteInt.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\libsqlite\src\table.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\libsqlite\src\tokenize.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\libsqlite\src\trigger.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\libsqlite\src\update.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\libsqlite\src\util.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\libsqlite\src\vacuum.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\libsqlite\src\vdbe.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\libsqlite\src\vdbe.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\libsqlite\src\vdbeaux.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\libsqlite\src\where.c
-# End Source File
-# End Group
-# Begin Source File
-
-SOURCE=.\php_sqlite.def
-# End Source File
-# Begin Source File
-
-SOURCE=.\sqlite.c
-# ADD CPP /I "libsqlite\src"
-# End Source File
-# End Group
-# Begin Group "Header Files"
-
-# PROP Default_Filter "h;hpp;hxx;hm;inl"
-# Begin Source File
-
-SOURCE=.\php_sqlite.h
-# End Source File
-# End Group
-# End Target
-# End Project
diff --git a/ext/sqlite/sqlite.php b/ext/sqlite/sqlite.php
deleted file mode 100644
index 527504b72b..0000000000
--- a/ext/sqlite/sqlite.php
+++ /dev/null
@@ -1,36 +0,0 @@
-<?php
-if (!extension_loaded("sqlite")) {
- dl("sqlite.so");
- if (!extension_loaded("sqlite")) {
- exit("Please enable SQLite support\n");
- }
-}
-
-debug_zval_dump(sqlite_libversion());
-debug_zval_dump(sqlite_libencoding());
-
-$s = sqlite_open("weztest.sqlite", 0666, $err);
-
-debug_zval_dump($err);
-debug_zval_dump($s);
-
-$r = sqlite_query("create table foo (a INTEGER PRIMARY KEY, b INTEGER )", $s);
-debug_zval_dump(sqlite_last_error($s));
-debug_zval_dump(sqlite_error_string(sqlite_last_error($s)));
-
-$r = sqlite_query("select *, php('md5', sql) as o from sqlite_master", $s);
-debug_zval_dump($r);
-debug_zval_dump(sqlite_num_rows($r));
-debug_zval_dump(sqlite_num_fields($r));
-
-for ($j = 0; $j < sqlite_num_fields($r); $j++) {
- echo "Field $j is " . sqlite_field_name($r, $j) . "\n";
-}
-
-while ($row = sqlite_fetch_array($r, SQLITE_ASSOC)) {
- print_r($row);
-}
-
-sqlite_close($s);
-
-?>
diff --git a/ext/sqlite/tests/blankdb.inc b/ext/sqlite/tests/blankdb.inc
deleted file mode 100644
index 43c6ff3582..0000000000
--- a/ext/sqlite/tests/blankdb.inc
+++ /dev/null
@@ -1,17 +0,0 @@
-<?php #vim:ft=php
-$dbname = tempnam(dirname(__FILE__), "phpsql");
-function cleanup() {
- $retry = 10;
-
- if (is_resource($GLOBALS['db'])) {
- @sqlite_close($GLOBALS['db']);
- }
- do {
- usleep(500000);
- if (@unlink($GLOBALS['dbname']))
- break;
- } while (file_exists($GLOBALS['dbname']) && --$retry);
-}
-register_shutdown_function("cleanup");
-$db = sqlite_open($dbname);
-?>
diff --git a/ext/sqlite/tests/blankdb_oo.inc b/ext/sqlite/tests/blankdb_oo.inc
deleted file mode 100755
index 3bbf4fd0b3..0000000000
--- a/ext/sqlite/tests/blankdb_oo.inc
+++ /dev/null
@@ -1,11 +0,0 @@
-<?php #vim:ft=php
-$dbname = tempnam(dirname(__FILE__), "phpsql");
-function cleanup() {
- global $db, $dbname;
- $db = NULL;
- usleep(500000);
- @unlink($dbname);
-}
-register_shutdown_function("cleanup");
-$db = new SQLiteDatabase($dbname);
-?>
diff --git a/ext/sqlite/tests/bug26911.phpt b/ext/sqlite/tests/bug26911.phpt
deleted file mode 100644
index 74c2167722..0000000000
--- a/ext/sqlite/tests/bug26911.phpt
+++ /dev/null
@@ -1,12 +0,0 @@
---TEST--
-Bug #26911 (crash when fetching data from empty queries)
---SKIPIF--
-<?php if (!extension_loaded("sqlite")) print "skip"; ?>
---FILE--
-<?php
- $db = sqlite_open(":memory:");
- $a = sqlite_query($db, " ");
- echo "I am ok\n";
-?>
---EXPECT--
-I am ok
diff --git a/ext/sqlite/tests/bug28112.phpt b/ext/sqlite/tests/bug28112.phpt
deleted file mode 100755
index 05c8ff81f3..0000000000
--- a/ext/sqlite/tests/bug28112.phpt
+++ /dev/null
@@ -1,14 +0,0 @@
---TEST--
-Bug #28112 (sqlite_query() crashing apache on malformed query)
---FILE--
-<?php
-
-if (!($db = sqlite_open(":memory:", 666, $error))) die ("Couldn't open the database");
-sqlite_query($db, "create table frob (foo INTEGER PRIMARY KEY, bar text);");
-$res = @sqlite_array_query($db, "");
-
-?>
-===DONE===
-<?php exit(0); ?>
---EXPECTF--
-===DONE===
diff --git a/ext/sqlite/tests/sqlite_001.phpt b/ext/sqlite/tests/sqlite_001.phpt
deleted file mode 100755
index 61d8896570..0000000000
--- a/ext/sqlite/tests/sqlite_001.phpt
+++ /dev/null
@@ -1,16 +0,0 @@
---TEST--
-sqlite: sqlite_open/close
---INI--
-sqlite.assoc_case=0
---SKIPIF--
-<?php if (!extension_loaded("sqlite")) print "skip"; ?>
---FILE--
-<?php
-require_once('blankdb.inc');
-echo "$db\n";
-sqlite_close($db);
-echo "Done\n";
-?>
---EXPECTF--
-Resource id #%d
-Done
diff --git a/ext/sqlite/tests/sqlite_002.phpt b/ext/sqlite/tests/sqlite_002.phpt
deleted file mode 100755
index c9fd0e1bca..0000000000
--- a/ext/sqlite/tests/sqlite_002.phpt
+++ /dev/null
@@ -1,32 +0,0 @@
---TEST--
-sqlite: Simple insert/select
---INI--
-sqlite.assoc_case=0
---SKIPIF--
-<?php # vim:ft=php
-if (!extension_loaded("sqlite")) print "skip"; ?>
---FILE--
-<?php
-include "blankdb.inc";
-
-sqlite_query("CREATE TABLE foo(c1 date, c2 time, c3 varchar(64))", $db);
-sqlite_query("INSERT INTO foo VALUES ('2002-01-02', '12:49:00', NULL)", $db);
-$r = sqlite_query("SELECT * from foo", $db);
-var_dump(sqlite_fetch_array($r));
-sqlite_close($db);
-?>
---EXPECT--
-array(6) {
- [0]=>
- string(10) "2002-01-02"
- ["c1"]=>
- string(10) "2002-01-02"
- [1]=>
- string(8) "12:49:00"
- ["c2"]=>
- string(8) "12:49:00"
- [2]=>
- NULL
- ["c3"]=>
- NULL
-}
diff --git a/ext/sqlite/tests/sqlite_003.phpt b/ext/sqlite/tests/sqlite_003.phpt
deleted file mode 100755
index adb891b726..0000000000
--- a/ext/sqlite/tests/sqlite_003.phpt
+++ /dev/null
@@ -1,52 +0,0 @@
---TEST--
-sqlite: Simple insert/select, different result represenatation
---INI--
-sqlite.assoc_case=0
---SKIPIF--
-<?php
-if (!extension_loaded("sqlite")) print "skip"; ?>
---FILE--
-<?php
-include "blankdb.inc";
-
-sqlite_query("CREATE TABLE foo(c1 date, c2 time, c3 varchar(64))", $db);
-sqlite_query("INSERT INTO foo VALUES ('2002-01-02', '12:49:00', NULL)", $db);
-$r = sqlite_query("SELECT * from foo", $db);
-var_dump(sqlite_fetch_array($r, SQLITE_BOTH));
-$r = sqlite_query("SELECT * from foo", $db);
-var_dump(sqlite_fetch_array($r, SQLITE_NUM));
-$r = sqlite_query("SELECT * from foo", $db);
-var_dump(sqlite_fetch_array($r, SQLITE_ASSOC));
-sqlite_close($db);
-?>
---EXPECT--
-array(6) {
- [0]=>
- string(10) "2002-01-02"
- ["c1"]=>
- string(10) "2002-01-02"
- [1]=>
- string(8) "12:49:00"
- ["c2"]=>
- string(8) "12:49:00"
- [2]=>
- NULL
- ["c3"]=>
- NULL
-}
-array(3) {
- [0]=>
- string(10) "2002-01-02"
- [1]=>
- string(8) "12:49:00"
- [2]=>
- NULL
-}
-array(3) {
- ["c1"]=>
- string(10) "2002-01-02"
- ["c2"]=>
- string(8) "12:49:00"
- ["c3"]=>
- NULL
-}
diff --git a/ext/sqlite/tests/sqlite_004.phpt b/ext/sqlite/tests/sqlite_004.phpt
deleted file mode 100644
index 4010066578..0000000000
--- a/ext/sqlite/tests/sqlite_004.phpt
+++ /dev/null
@@ -1,49 +0,0 @@
---TEST--
-sqlite: binary encoding
---INI--
-sqlite.assoc_case=0
---SKIPIF--
-<?php # vim:ft=php
-if (!extension_loaded("sqlite")) print "skip"; ?>
---FILE--
-<?php
-include "blankdb.inc";
-
-$strings = array(
- "hello",
- "hello\x01o",
- "\x01hello there",
- "hello\x00there",
- ""
-);
-
-sqlite_query("CREATE TABLE strings(a)", $db);
-
-foreach ($strings as $str) {
- sqlite_query("INSERT INTO strings VALUES('" . sqlite_escape_string($str) . "')", $db);
-}
-
-$i = 0;
-$r = sqlite_query("SELECT * from strings", $db);
-while ($row = sqlite_fetch_array($r, SQLITE_NUM)) {
- if ($row[0] !== $strings[$i]) {
- echo "FAIL!\n";
- var_dump($row[0]);
- var_dump($strings[$i]);
- } else {
- echo "OK!\n";
- }
- $i++;
-}
-
-sqlite_close($db);
-
-echo "DONE!\n";
-?>
---EXPECT--
-OK!
-OK!
-OK!
-OK!
-OK!
-DONE!
diff --git a/ext/sqlite/tests/sqlite_005.phpt b/ext/sqlite/tests/sqlite_005.phpt
deleted file mode 100644
index e0eeab5589..0000000000
--- a/ext/sqlite/tests/sqlite_005.phpt
+++ /dev/null
@@ -1,50 +0,0 @@
---TEST--
-sqlite: aggregate functions
---INI--
-sqlite.assoc_case=0
---SKIPIF--
-<?php # vim:ft=php
-if (!extension_loaded("sqlite")) print "skip"; ?>
---FILE--
-<?php
-include "blankdb.inc";
-
-$data = array(
- "one",
- "two",
- "three"
- );
-
-sqlite_query("CREATE TABLE strings(a)", $db);
-
-foreach ($data as $str) {
- sqlite_query("INSERT INTO strings VALUES('" . sqlite_escape_string($str) . "')", $db);
-}
-
-function cat_step(&$context, $string)
-{
- $context .= $string;
-}
-
-function cat_fin(&$context)
-{
- return $context;
-}
-
-sqlite_create_aggregate($db, "cat", "cat_step", "cat_fin");
-
-$r = sqlite_query("SELECT cat(a) from strings", $db);
-while ($row = sqlite_fetch_array($r, SQLITE_NUM)) {
- var_dump($row);
-}
-
-sqlite_close($db);
-
-echo "DONE!\n";
-?>
---EXPECT--
-array(1) {
- [0]=>
- string(11) "onetwothree"
-}
-DONE!
diff --git a/ext/sqlite/tests/sqlite_006.phpt b/ext/sqlite/tests/sqlite_006.phpt
deleted file mode 100644
index 4e6e5f19ed..0000000000
--- a/ext/sqlite/tests/sqlite_006.phpt
+++ /dev/null
@@ -1,55 +0,0 @@
---TEST--
-sqlite: regular functions
---INI--
-sqlite.assoc_case=0
---SKIPIF--
-<?php # vim:ft=php
-if (!extension_loaded("sqlite")) print "skip"; ?>
---FILE--
-<?php
-include "blankdb.inc";
-
-$data = array(
- array("one", "uno"),
- array("two", "dos"),
- array("three", "tres"),
- );
-
-sqlite_query("CREATE TABLE strings(a,b)", $db);
-
-function implode_args()
-{
- $args = func_get_args();
- $sep = array_shift($args);
- return implode($sep, $args);
-}
-
-foreach ($data as $row) {
- sqlite_query("INSERT INTO strings VALUES('" . sqlite_escape_string($row[0]) . "','" . sqlite_escape_string($row[1]) . "')", $db);
-}
-
-sqlite_create_function($db, "implode", "implode_args");
-
-$r = sqlite_query("SELECT implode('-', a, b) from strings", $db);
-while ($row = sqlite_fetch_array($r, SQLITE_NUM)) {
- var_dump($row);
-}
-
-sqlite_close($db);
-
-echo "DONE!\n";
-?>
---EXPECT--
-array(1) {
- [0]=>
- string(7) "one-uno"
-}
-array(1) {
- [0]=>
- string(7) "two-dos"
-}
-array(1) {
- [0]=>
- string(10) "three-tres"
-}
-DONE!
diff --git a/ext/sqlite/tests/sqlite_007.phpt b/ext/sqlite/tests/sqlite_007.phpt
deleted file mode 100755
index 5a1e536188..0000000000
--- a/ext/sqlite/tests/sqlite_007.phpt
+++ /dev/null
@@ -1,52 +0,0 @@
---TEST--
-sqlite: Simple insert/select (unbuffered)
---INI--
-sqlite.assoc_case=0
---SKIPIF--
-<?php
-if (!extension_loaded("sqlite")) print "skip"; ?>
---FILE--
-<?php
-include "blankdb.inc";
-
-sqlite_query("CREATE TABLE foo(c1 date, c2 time, c3 varchar(64))", $db);
-sqlite_query("INSERT INTO foo VALUES ('2002-01-02', '12:49:00', NULL)", $db);
-$r = sqlite_unbuffered_query("SELECT * from foo", $db);
-var_dump(sqlite_fetch_array($r, SQLITE_BOTH));
-$r = sqlite_unbuffered_query("SELECT * from foo", $db);
-var_dump(sqlite_fetch_array($r, SQLITE_NUM));
-$r = sqlite_unbuffered_query("SELECT * from foo", $db);
-var_dump(sqlite_fetch_array($r, SQLITE_ASSOC));
-sqlite_close($db);
-?>
---EXPECT--
-array(6) {
- [0]=>
- string(10) "2002-01-02"
- ["c1"]=>
- string(10) "2002-01-02"
- [1]=>
- string(8) "12:49:00"
- ["c2"]=>
- string(8) "12:49:00"
- [2]=>
- NULL
- ["c3"]=>
- NULL
-}
-array(3) {
- [0]=>
- string(10) "2002-01-02"
- [1]=>
- string(8) "12:49:00"
- [2]=>
- NULL
-}
-array(3) {
- ["c1"]=>
- string(10) "2002-01-02"
- ["c2"]=>
- string(8) "12:49:00"
- ["c3"]=>
- NULL
-}
diff --git a/ext/sqlite/tests/sqlite_008.phpt b/ext/sqlite/tests/sqlite_008.phpt
deleted file mode 100755
index ee485c76a1..0000000000
--- a/ext/sqlite/tests/sqlite_008.phpt
+++ /dev/null
@@ -1,46 +0,0 @@
---TEST--
-sqlite: fetch all (buffered)
---INI--
-sqlite.assoc_case=0
---SKIPIF--
-<?php # vim:ft=php
-if (!extension_loaded("sqlite")) print "skip"; ?>
---FILE--
-<?php
-include "blankdb.inc";
-
-$data = array(
- "one",
- "two",
- "three"
- );
-
-sqlite_query("CREATE TABLE strings(a VARCHAR)", $db);
-
-foreach ($data as $str) {
- sqlite_query("INSERT INTO strings VALUES('$str')", $db);
-}
-
-$r = sqlite_query("SELECT a from strings", $db);
-while ($row = sqlite_fetch_array($r, SQLITE_NUM)) {
- var_dump($row);
-}
-
-sqlite_close($db);
-
-echo "DONE!\n";
-?>
---EXPECT--
-array(1) {
- [0]=>
- string(3) "one"
-}
-array(1) {
- [0]=>
- string(3) "two"
-}
-array(1) {
- [0]=>
- string(5) "three"
-}
-DONE!
diff --git a/ext/sqlite/tests/sqlite_009.phpt b/ext/sqlite/tests/sqlite_009.phpt
deleted file mode 100755
index bdad770b57..0000000000
--- a/ext/sqlite/tests/sqlite_009.phpt
+++ /dev/null
@@ -1,46 +0,0 @@
---TEST--
-sqlite: fetch all (unbuffered)
---INI--
-sqlite.assoc_case=0
---SKIPIF--
-<?php # vim:ft=php
-if (!extension_loaded("sqlite")) print "skip"; ?>
---FILE--
-<?php
-include "blankdb.inc";
-
-$data = array(
- "one",
- "two",
- "three"
- );
-
-sqlite_query("CREATE TABLE strings(a VARCHAR)", $db);
-
-foreach ($data as $str) {
- sqlite_query("INSERT INTO strings VALUES('$str')", $db);
-}
-
-$r = sqlite_unbuffered_query("SELECT a from strings", $db);
-while ($row = sqlite_fetch_array($r, SQLITE_NUM)) {
- var_dump($row);
-}
-
-sqlite_close($db);
-
-echo "DONE!\n";
-?>
---EXPECT--
-array(1) {
- [0]=>
- string(3) "one"
-}
-array(1) {
- [0]=>
- string(3) "two"
-}
-array(1) {
- [0]=>
- string(5) "three"
-}
-DONE!
diff --git a/ext/sqlite/tests/sqlite_010.phpt b/ext/sqlite/tests/sqlite_010.phpt
deleted file mode 100755
index 152fde4cf0..0000000000
--- a/ext/sqlite/tests/sqlite_010.phpt
+++ /dev/null
@@ -1,81 +0,0 @@
---TEST--
-sqlite: fetch all (iterator)
---INI--
-sqlite.assoc_case=0
---SKIPIF--
-<?php # vim:ft=php
-if (!extension_loaded("sqlite")) print "skip"; ?>
---FILE--
-<?php
-include "blankdb.inc";
-
-$data = array(
- "one",
- "two",
- "three"
- );
-
-sqlite_query("CREATE TABLE strings(a VARCHAR)", $db);
-
-foreach ($data as $str) {
- sqlite_query("INSERT INTO strings VALUES('$str')", $db);
-}
-
-$r = sqlite_unbuffered_query("SELECT a from strings", $db);
-while (sqlite_valid($r)) {
- var_dump(sqlite_current($r, SQLITE_NUM));
- sqlite_next($r);
-}
-$r = sqlite_query("SELECT a from strings", $db);
-while (sqlite_valid($r)) {
- var_dump(sqlite_current($r, SQLITE_NUM));
- sqlite_next($r);
-}
-sqlite_rewind($r);
-while (sqlite_valid($r)) {
- var_dump(sqlite_current($r, SQLITE_NUM));
- sqlite_next($r);
-}
-
-sqlite_close($db);
-
-echo "DONE!\n";
-?>
---EXPECT--
-array(1) {
- [0]=>
- string(3) "one"
-}
-array(1) {
- [0]=>
- string(3) "two"
-}
-array(1) {
- [0]=>
- string(5) "three"
-}
-array(1) {
- [0]=>
- string(3) "one"
-}
-array(1) {
- [0]=>
- string(3) "two"
-}
-array(1) {
- [0]=>
- string(5) "three"
-}
-array(1) {
- [0]=>
- string(3) "one"
-}
-array(1) {
- [0]=>
- string(3) "two"
-}
-array(1) {
- [0]=>
- string(5) "three"
-}
-DONE!
diff --git a/ext/sqlite/tests/sqlite_011.phpt b/ext/sqlite/tests/sqlite_011.phpt
deleted file mode 100755
index 9c1bf3990f..0000000000
--- a/ext/sqlite/tests/sqlite_011.phpt
+++ /dev/null
@@ -1,34 +0,0 @@
---TEST--
-sqlite: returned associative column names
---INI--
-sqlite.assoc_case=0
---SKIPIF--
-<?php
-if (!extension_loaded("sqlite")) print "skip"; ?>
---FILE--
-<?php
-include "blankdb.inc";
-
-sqlite_query("CREATE TABLE foo (c1 char, c2 char, c3 char)", $db);
-sqlite_query("CREATE TABLE bar (c1 char, c2 char, c3 char)", $db);
-sqlite_query("INSERT INTO foo VALUES ('1', '2', '3')", $db);
-sqlite_query("INSERT INTO bar VALUES ('4', '5', '6')", $db);
-$r = sqlite_query("SELECT * from foo, bar", $db, SQLITE_ASSOC);
-var_dump(sqlite_fetch_array($r));
-sqlite_close($db);
-?>
---EXPECT--
-array(6) {
- ["foo.c1"]=>
- string(1) "1"
- ["foo.c2"]=>
- string(1) "2"
- ["foo.c3"]=>
- string(1) "3"
- ["bar.c1"]=>
- string(1) "4"
- ["bar.c2"]=>
- string(1) "5"
- ["bar.c3"]=>
- string(1) "6"
-}
diff --git a/ext/sqlite/tests/sqlite_012.phpt b/ext/sqlite/tests/sqlite_012.phpt
deleted file mode 100755
index 14d9ea4f53..0000000000
--- a/ext/sqlite/tests/sqlite_012.phpt
+++ /dev/null
@@ -1,38 +0,0 @@
---TEST--
-sqlite: read field names
---INI--
-sqlite.assoc_case=0
---SKIPIF--
-<?php # vim:ft=php
-if (!extension_loaded("sqlite")) print "skip"; ?>
---FILE--
-<?php
-include "blankdb.inc";
-
-sqlite_query("CREATE TABLE strings(foo VARCHAR, bar VARCHAR, baz VARCHAR)", $db);
-
-echo "Buffered\n";
-$r = sqlite_query("SELECT * from strings", $db);
-for($i=0; $i<sqlite_num_fields($r); $i++) {
- var_dump(sqlite_field_name($r, $i));
-}
-echo "Unbuffered\n";
-$r = sqlite_unbuffered_query("SELECT * from strings", $db);
-for($i=0; $i<sqlite_num_fields($r); $i++) {
- var_dump(sqlite_field_name($r, $i));
-}
-
-sqlite_close($db);
-
-echo "DONE!\n";
-?>
---EXPECT--
-Buffered
-string(3) "foo"
-string(3) "bar"
-string(3) "baz"
-Unbuffered
-string(3) "foo"
-string(3) "bar"
-string(3) "baz"
-DONE!
diff --git a/ext/sqlite/tests/sqlite_013.phpt b/ext/sqlite/tests/sqlite_013.phpt
deleted file mode 100755
index 95b047a75c..0000000000
--- a/ext/sqlite/tests/sqlite_013.phpt
+++ /dev/null
@@ -1,78 +0,0 @@
---TEST--
-sqlite: fetch column
---INI--
-sqlite.assoc_case=0
---SKIPIF--
-<?php # vim:ft=php
-if (!extension_loaded("sqlite")) print "skip"; ?>
---FILE--
-<?php
-include "blankdb.inc";
-
-$data = array(
- array (0 => 'one', 1 => 'two'),
- array (0 => 'three', 1 => 'four')
- );
-
-sqlite_query("CREATE TABLE strings(a VARCHAR, b VARCHAR)", $db);
-
-foreach ($data as $str) {
- sqlite_query("INSERT INTO strings VALUES('${str[0]}','${str[1]}')", $db);
-}
-
-echo "====BUFFERED====\n";
-$r = sqlite_query("SELECT a, b from strings", $db);
-while (sqlite_valid($r)) {
- var_dump(sqlite_current($r, SQLITE_NUM));
- var_dump(sqlite_column($r, 0));
- var_dump(sqlite_column($r, 1));
- var_dump(sqlite_column($r, 'a'));
- var_dump(sqlite_column($r, 'b'));
- sqlite_next($r);
-}
-echo "====UNBUFFERED====\n";
-$r = sqlite_unbuffered_query("SELECT a, b from strings", $db);
-while (sqlite_valid($r)) {
- var_dump(sqlite_column($r, 0));
- var_dump(sqlite_column($r, 'b'));
- var_dump(sqlite_column($r, 1));
- var_dump(sqlite_column($r, 'a'));
- sqlite_next($r);
-}
-
-sqlite_close($db);
-
-echo "DONE!\n";
-?>
---EXPECT--
-====BUFFERED====
-array(2) {
- [0]=>
- string(3) "one"
- [1]=>
- string(3) "two"
-}
-string(3) "one"
-string(3) "two"
-string(3) "one"
-string(3) "two"
-array(2) {
- [0]=>
- string(5) "three"
- [1]=>
- string(4) "four"
-}
-string(5) "three"
-string(4) "four"
-string(5) "three"
-string(4) "four"
-====UNBUFFERED====
-string(3) "one"
-string(3) "two"
-NULL
-NULL
-string(5) "three"
-string(4) "four"
-NULL
-NULL
-DONE!
diff --git a/ext/sqlite/tests/sqlite_014.phpt b/ext/sqlite/tests/sqlite_014.phpt
deleted file mode 100755
index 967fcc10fa..0000000000
--- a/ext/sqlite/tests/sqlite_014.phpt
+++ /dev/null
@@ -1,120 +0,0 @@
---TEST--
-sqlite: fetch all (fetch_all)
---INI--
-sqlite.assoc_case=0
---SKIPIF--
-<?php # vim:ft=php
-if (!extension_loaded("sqlite")) print "skip"; ?>
---FILE--
-<?php
-include "blankdb.inc";
-
-$data = array(
- "one",
- "two",
- "three"
- );
-
-sqlite_query("CREATE TABLE strings(a VARCHAR)", $db);
-
-foreach ($data as $str) {
- sqlite_query("INSERT INTO strings VALUES('$str')", $db);
-}
-
-echo "unbuffered twice\n";
-$r = sqlite_unbuffered_query("SELECT a from strings", $db, SQLITE_NUM);
-var_dump(sqlite_fetch_all($r));
-var_dump(sqlite_fetch_all($r));
-
-echo "unbuffered with fetch_array\n";
-$r = sqlite_unbuffered_query("SELECT a from strings", $db, SQLITE_NUM);
-var_dump(sqlite_fetch_array($r));
-var_dump(sqlite_fetch_all($r));
-
-echo "buffered\n";
-$r = sqlite_query("SELECT a from strings", $db, SQLITE_NUM);
-var_dump(sqlite_fetch_all($r));
-var_dump(sqlite_fetch_array($r));
-var_dump(sqlite_fetch_all($r));
-
-sqlite_close($db);
-
-echo "DONE!\n";
-?>
---EXPECTF--
-unbuffered twice
-array(3) {
- [0]=>
- array(1) {
- [0]=>
- string(3) "one"
- }
- [1]=>
- array(1) {
- [0]=>
- string(3) "two"
- }
- [2]=>
- array(1) {
- [0]=>
- string(5) "three"
- }
-}
-
-Warning: sqlite_fetch_all(): One or more rowsets were already returned; returning NULL this time in %ssqlite_014.php on line %d
-array(0) {
-}
-unbuffered with fetch_array
-array(1) {
- [0]=>
- string(3) "one"
-}
-array(2) {
- [0]=>
- array(1) {
- [0]=>
- string(3) "two"
- }
- [1]=>
- array(1) {
- [0]=>
- string(5) "three"
- }
-}
-buffered
-array(3) {
- [0]=>
- array(1) {
- [0]=>
- string(3) "one"
- }
- [1]=>
- array(1) {
- [0]=>
- string(3) "two"
- }
- [2]=>
- array(1) {
- [0]=>
- string(5) "three"
- }
-}
-bool(false)
-array(3) {
- [0]=>
- array(1) {
- [0]=>
- string(3) "one"
- }
- [1]=>
- array(1) {
- [0]=>
- string(3) "two"
- }
- [2]=>
- array(1) {
- [0]=>
- string(5) "three"
- }
-}
-DONE!
diff --git a/ext/sqlite/tests/sqlite_015.phpt b/ext/sqlite/tests/sqlite_015.phpt
deleted file mode 100755
index 8de42a84b9..0000000000
--- a/ext/sqlite/tests/sqlite_015.phpt
+++ /dev/null
@@ -1,49 +0,0 @@
---TEST--
-sqlite: fetch all (array_query)
---INI--
-sqlite.assoc_case=0
---SKIPIF--
-<?php # vim:ft=php
-if (!extension_loaded("sqlite")) print "skip"; ?>
---FILE--
-<?php
-include "blankdb.inc";
-
-$data = array(
- "one",
- "two",
- "three"
- );
-
-sqlite_query("CREATE TABLE strings(a VARCHAR)", $db);
-
-foreach ($data as $str) {
- sqlite_query("INSERT INTO strings VALUES('$str')", $db);
-}
-
-$res = sqlite_array_query("SELECT a from strings", $db, SQLITE_NUM);
-var_dump($res);
-
-$db = null;
-
-echo "DONE!\n";
-?>
---EXPECTF--
-array(3) {
- [0]=>
- array(1) {
- [0]=>
- string(3) "one"
- }
- [1]=>
- array(1) {
- [0]=>
- string(3) "two"
- }
- [2]=>
- array(1) {
- [0]=>
- string(5) "three"
- }
-}
-DONE!
diff --git a/ext/sqlite/tests/sqlite_016.phpt b/ext/sqlite/tests/sqlite_016.phpt
deleted file mode 100755
index 9ca9de135f..0000000000
--- a/ext/sqlite/tests/sqlite_016.phpt
+++ /dev/null
@@ -1,45 +0,0 @@
---TEST--
-sqlite: fetch single
---INI--
-sqlite.assoc_case=0
---SKIPIF--
-<?php # vim:ft=php
-if (!extension_loaded("sqlite")) print "skip"; ?>
---FILE--
-<?php
-include "blankdb.inc";
-
-$data = array(
- array (0 => 'one', 1 => 'two'),
- array (0 => 'three', 1 => 'four')
- );
-
-sqlite_query("CREATE TABLE strings(a VARCHAR, b VARCHAR)", $db);
-
-foreach ($data as $str) {
- sqlite_query("INSERT INTO strings VALUES('${str[0]}','${str[1]}')", $db);
-}
-
-echo "====BUFFERED====\n";
-$r = sqlite_query("SELECT a, b from strings", $db);
-while (sqlite_valid($r)) {
- var_dump(sqlite_fetch_single($r));
-}
-echo "====UNBUFFERED====\n";
-$r = sqlite_unbuffered_query("SELECT a, b from strings", $db);
-while (sqlite_valid($r)) {
- var_dump(sqlite_fetch_single($r));
-}
-
-sqlite_close($db);
-
-echo "DONE!\n";
-?>
---EXPECT--
-====BUFFERED====
-string(3) "one"
-string(5) "three"
-====UNBUFFERED====
-string(3) "one"
-string(5) "three"
-DONE!
diff --git a/ext/sqlite/tests/sqlite_017.phpt b/ext/sqlite/tests/sqlite_017.phpt
deleted file mode 100755
index 9058622f99..0000000000
--- a/ext/sqlite/tests/sqlite_017.phpt
+++ /dev/null
@@ -1,33 +0,0 @@
---TEST--
-sqlite: UDF binary handling functions
---SKIPIF--
-<?php # vim:ft=php
-if (!extension_loaded("sqlite")) print "skip"; ?>
---FILE--
-<?php
-
-$data = array(
- "hello there",
- "this has a \x00 char in the middle",
- "\x01 this has an 0x01 at the start",
- "this has \x01 in the middle"
- );
-
-foreach ($data as $item) {
- $coded = sqlite_udf_encode_binary($item);
- echo bin2hex($coded) . "\n";
- $decoded = sqlite_udf_decode_binary($coded);
- if ($item != $decoded) {
- echo "FAIL! $item decoded is $decoded\n";
- }
-}
-
-echo "OK!\n";
-
-?>
---EXPECT--
-68656c6c6f207468657265
-0101736768721f6760721f601fff1f626760711f686d1f7367641f6c6863636b64
-0102ff1e726667711e665f711e5f6c1e2e762e2f1e5f721e7266631e71725f7072
-7468697320686173200120696e20746865206d6964646c65
-OK!
diff --git a/ext/sqlite/tests/sqlite_018.phpt b/ext/sqlite/tests/sqlite_018.phpt
deleted file mode 100755
index 8d80649be8..0000000000
--- a/ext/sqlite/tests/sqlite_018.phpt
+++ /dev/null
@@ -1,14 +0,0 @@
---TEST--
-sqlite: crash on bad queries inside sqlite_array_query()
---SKIPIF--
-<?php # vim:ft=php
-if (!extension_loaded("sqlite")) print "skip"; ?>
---FILE--
-<?php
-include "blankdb.inc";
-
-sqlite_array_query($db, "SELECT foo FROM foobar");
-sqlite_close($db);
-?>
---EXPECTF--
-Warning: sqlite_array_query(): no such table: foobar in %s on line %d
diff --git a/ext/sqlite/tests/sqlite_019.phpt b/ext/sqlite/tests/sqlite_019.phpt
deleted file mode 100755
index 74dcff99fa..0000000000
--- a/ext/sqlite/tests/sqlite_019.phpt
+++ /dev/null
@@ -1,47 +0,0 @@
---TEST--
-sqlite: single query
---SKIPIF--
-<?php # vim:ft=php
-if (!extension_loaded("sqlite")) print "skip"; ?>
---FILE--
-<?php
-include "blankdb.inc";
-
-sqlite_query($db, "CREATE TABLE test_db ( id INTEGER PRIMARY KEY, data VARCHAR(100) )");
-for ($i = 0; $i < 10; $i++) {
- sqlite_query($db, "INSERT INTO test_db (data) VALUES('{$i}data')");
-}
-sqlite_query($db, "INSERT INTO test_db (data) VALUES(NULL)");
-
-var_dump(sqlite_single_query($db, "SELECT id FROM test_db WHERE id=5"));
-var_dump(sqlite_single_query($db, "SELECT * FROM test_db WHERE id=4"));
-var_dump(sqlite_single_query($db, "SELECT data FROM test_db WHERE id=6"));
-var_dump(sqlite_single_query($db, "SELECT * FROM test_db WHERE id < 5"));
-var_dump(sqlite_single_query($db, "SELECT * FROM test db WHERE id < 4"));
-var_dump(sqlite_single_query($db, "SELECT * FROM test_db WHERE id=999999"));
-var_dump(sqlite_single_query($db, "SELECT id FROM test_db WHERE id=5", FALSE));
-
-sqlite_close($db);
-?>
---EXPECTF--
-string(1) "5"
-string(1) "4"
-string(5) "5data"
-array(4) {
- [0]=>
- string(1) "1"
- [1]=>
- string(1) "2"
- [2]=>
- string(1) "3"
- [3]=>
- string(1) "4"
-}
-
-Warning: sqlite_single_query(): no such table: test in %s on line %d
-bool(false)
-NULL
-array(1) {
- [0]=>
- string(1) "5"
-}
diff --git a/ext/sqlite/tests/sqlite_022.phpt b/ext/sqlite/tests/sqlite_022.phpt
deleted file mode 100755
index 76921d56f6..0000000000
--- a/ext/sqlite/tests/sqlite_022.phpt
+++ /dev/null
@@ -1,101 +0,0 @@
---TEST--
-sqlite: sqlite_seek
---INI--
-sqlite.assoc_case=0
---SKIPIF--
-<?php # vim:ft=php
-if (!extension_loaded("sqlite")) print "skip"; ?>
---FILE--
-<?php
-include "blankdb.inc";
-
-$data = array(
- "one",
- "two",
- "three"
- );
-
-sqlite_query("CREATE TABLE strings(a)", $db);
-
-foreach ($data as $str) {
- sqlite_query("INSERT INTO strings VALUES('$str')", $db);
-}
-
-$res = sqlite_query("SELECT a FROM strings", $db, SQLITE_NUM);
-for ($idx = -1; $idx < 4; $idx++) {
- echo "====SEEK:$idx====\n";
- sqlite_seek($res, $idx);
- var_dump(sqlite_current($res));
-}
-echo "====AGAIN====\n";
-for ($idx = -1; $idx < 4; $idx++) {
- echo "====SEEK:$idx====\n";
- sqlite_seek($res, $idx);
- var_dump(sqlite_current($res));
-}
-
-sqlite_close($db);
-
-echo "====DONE!====\n";
-?>
---EXPECTF--
-====SEEK:-1====
-
-Warning: sqlite_seek(): row -1 out of range in %ssqlite_022.php on line %d
-array(1) {
- [0]=>
- string(3) "one"
-}
-====SEEK:0====
-array(1) {
- [0]=>
- string(3) "one"
-}
-====SEEK:1====
-array(1) {
- [0]=>
- string(3) "two"
-}
-====SEEK:2====
-array(1) {
- [0]=>
- string(5) "three"
-}
-====SEEK:3====
-
-Warning: sqlite_seek(): row 3 out of range in %ssqlite_022.php on line %d
-array(1) {
- [0]=>
- string(5) "three"
-}
-====AGAIN====
-====SEEK:-1====
-
-Warning: sqlite_seek(): row -1 out of range in %ssqlite_022.php on line %d
-array(1) {
- [0]=>
- string(5) "three"
-}
-====SEEK:0====
-array(1) {
- [0]=>
- string(3) "one"
-}
-====SEEK:1====
-array(1) {
- [0]=>
- string(3) "two"
-}
-====SEEK:2====
-array(1) {
- [0]=>
- string(5) "three"
-}
-====SEEK:3====
-
-Warning: sqlite_seek(): row 3 out of range in %ssqlite_022.php on line %d
-array(1) {
- [0]=>
- string(5) "three"
-}
-====DONE!====
diff --git a/ext/sqlite/tests/sqlite_023.phpt b/ext/sqlite/tests/sqlite_023.phpt
deleted file mode 100644
index fbb8dc8da8..0000000000
--- a/ext/sqlite/tests/sqlite_023.phpt
+++ /dev/null
@@ -1,105 +0,0 @@
---TEST--
-sqlite: sqlite_[has_]prev
---INI--
-sqlite.assoc_case=0
---SKIPIF--
-<?php # vim:ft=php
-if (!extension_loaded("sqlite")) print "skip"; ?>
---FILE--
-<?php
-include "blankdb.inc";
-
-$data = array(
- "one",
- "two",
- "three"
- );
-
-sqlite_query("CREATE TABLE strings(a)", $db);
-
-foreach ($data as $str) {
- sqlite_query("INSERT INTO strings VALUES('$str')", $db);
-}
-
-$r = sqlite_query("SELECT a FROM strings", $db, SQLITE_NUM);
-
-echo "====TRAVERSE====\n";
-for(sqlite_rewind($r); sqlite_valid($r); sqlite_next($r)) {
- var_dump(sqlite_current($r));
-
-}
-echo "====REVERSE====\n";
-do {
- sqlite_prev($r);
- var_dump(sqlite_current($r));
-} while(sqlite_has_prev($r));
-
-echo "====UNBUFFERED====\n";
-
-$r = sqlite_unbuffered_query("SELECT a FROM strings", $db, SQLITE_NUM);
-
-echo "====TRAVERSE====\n";
-for(sqlite_rewind($r); sqlite_valid($r); sqlite_next($r)) {
- var_dump(sqlite_current($r));
-
-}
-echo "====REVERSE====\n";
-do {
- sqlite_prev($r);
- var_dump(sqlite_current($r));
-} while(sqlite_has_prev($r));
-
-sqlite_close($db);
-
-echo "====DONE!====\n";
-?>
---EXPECTF--
-====TRAVERSE====
-array(1) {
- [0]=>
- string(3) "one"
-}
-array(1) {
- [0]=>
- string(3) "two"
-}
-array(1) {
- [0]=>
- string(5) "three"
-}
-====REVERSE====
-array(1) {
- [0]=>
- string(5) "three"
-}
-array(1) {
- [0]=>
- string(3) "two"
-}
-array(1) {
- [0]=>
- string(3) "one"
-}
-====UNBUFFERED====
-====TRAVERSE====
-
-Warning: sqlite_rewind(): Cannot rewind an unbuffered result set in %ssqlite_023.php on line %d
-array(1) {
- [0]=>
- string(3) "one"
-}
-array(1) {
- [0]=>
- string(3) "two"
-}
-array(1) {
- [0]=>
- string(5) "three"
-}
-====REVERSE====
-
-Warning: sqlite_prev(): you cannot use sqlite_prev on unbuffered querys in %ssqlite_023.php on line %d
-bool(false)
-
-Warning: sqlite_has_prev(): you cannot use sqlite_has_prev on unbuffered querys in %ssqlite_023.php on line %d
-====DONE!====
diff --git a/ext/sqlite/tests/sqlite_024.phpt b/ext/sqlite/tests/sqlite_024.phpt
deleted file mode 100755
index b7198c0155..0000000000
--- a/ext/sqlite/tests/sqlite_024.phpt
+++ /dev/null
@@ -1,76 +0,0 @@
---TEST--
-sqlite: sqlite_fetch_object
---INI--
-sqlite.assoc_case=0
---SKIPIF--
-<?php # vim:ft=php
-if (!extension_loaded("sqlite")) print "skip"; ?>
---FILE--
-<?php
-include "blankdb.inc";
-
-class class24 {
- function __construct() {
- echo __METHOD__ . "\n";
- }
-}
-
-$data = array(
- "one",
- "two",
- "three"
- );
-
-sqlite_query($db, "CREATE TABLE strings(a)");
-
-foreach ($data as $str) {
- sqlite_query($db, "INSERT INTO strings VALUES('$str')");
-}
-
-echo "====class24====\n";
-$res = sqlite_query($db, "SELECT a FROM strings", SQLITE_ASSOC);
-while (sqlite_valid($res)) {
- var_dump(sqlite_fetch_object($res, 'class24'));
-}
-
-echo "====stdclass====\n";
-$res = sqlite_query($db, "SELECT a FROM strings", SQLITE_ASSOC);
-while (sqlite_valid($res)) {
- var_dump(sqlite_fetch_object($res));
-}
-
-sqlite_close($db);
-
-echo "====DONE!====\n";
-?>
---EXPECTF--
-====class24====
-class24::__construct
-object(class24)#%d (1) {
- ["a"]=>
- string(3) "one"
-}
-class24::__construct
-object(class24)#%d (1) {
- ["a"]=>
- string(3) "two"
-}
-class24::__construct
-object(class24)#%d (1) {
- ["a"]=>
- string(5) "three"
-}
-====stdclass====
-object(stdClass)#%d (1) {
- ["a"]=>
- string(3) "one"
-}
-object(stdClass)#%d (1) {
- ["a"]=>
- string(3) "two"
-}
-object(stdClass)#%d (1) {
- ["a"]=>
- string(5) "three"
-}
-====DONE!====
diff --git a/ext/sqlite/tests/sqlite_025.phpt b/ext/sqlite/tests/sqlite_025.phpt
deleted file mode 100755
index 0a257610cc..0000000000
--- a/ext/sqlite/tests/sqlite_025.phpt
+++ /dev/null
@@ -1,38 +0,0 @@
---TEST--
-sqlite: sqlite_fetch_object in a loop
---INI--
-sqlite.assoc_case=0
---SKIPIF--
-<?php # vim:ft=php
-if (!extension_loaded("sqlite")) print "skip"; ?>
---FILE--
-<?php
-include "blankdb.inc";
-
-sqlite_query($db, "CREATE TABLE strings(a)");
-
-foreach (array("one", "two", "three") as $str) {
- sqlite_query($db, "INSERT INTO strings VALUES('$str')");
-}
-
-$res = sqlite_query("SELECT * FROM strings", $db);
-
-while (($obj = sqlite_fetch_object($res))) {
- var_dump($obj);
-}
-
-sqlite_close($db);
-?>
---EXPECTF--
-object(stdClass)#1 (1) {
- ["a"]=>
- string(3) "one"
-}
-object(stdClass)#2 (1) {
- ["a"]=>
- string(3) "two"
-}
-object(stdClass)#1 (1) {
- ["a"]=>
- string(5) "three"
-} \ No newline at end of file
diff --git a/ext/sqlite/tests/sqlite_026.phpt b/ext/sqlite/tests/sqlite_026.phpt
deleted file mode 100755
index c508979a27..0000000000
--- a/ext/sqlite/tests/sqlite_026.phpt
+++ /dev/null
@@ -1,27 +0,0 @@
---TEST--
-sqlite: sqlite_fetch_column_types
---SKIPIF--
-<?php # vim:ft=php
-if (!extension_loaded("sqlite")) print "skip"; ?>
---FILE--
-<?php
-include "blankdb.inc";
-
-sqlite_query($db, "CREATE TABLE strings(a, b INTEGER, c VARCHAR(10), d)");
-sqlite_query($db, "INSERT INTO strings VALUES('1', '2', '3', 'abc')");
-
-var_dump(sqlite_fetch_column_types($db, "strings"));
-
-sqlite_close($db);
-?>
---EXPECT--
-array(4) {
- ["a"]=>
- string(0) ""
- ["b"]=>
- string(7) "INTEGER"
- ["c"]=>
- string(11) "VARCHAR(10)"
- ["d"]=>
- string(0) ""
-}
diff --git a/ext/sqlite/tests/sqlite_027.phpt b/ext/sqlite/tests/sqlite_027.phpt
deleted file mode 100755
index 7919f2c3f7..0000000000
--- a/ext/sqlite/tests/sqlite_027.phpt
+++ /dev/null
@@ -1,15 +0,0 @@
---TEST--
-sqlite: crash inside sqlite_escape_string() & sqlite_udf_encode_binary
---SKIPIF--
-<?php # vim:ft=php
-if (!extension_loaded("sqlite")) print "skip"; ?>
---INI--
-memory_limit=-1
---FILE--
-<?php
- var_dump(strlen(sqlite_escape_string(str_repeat("\0", 20000000))));
- var_dump(strlen(sqlite_udf_encode_binary(str_repeat("\0", 20000000))));
-?>
---EXPECT--
-int(20000002)
-int(20000002)
diff --git a/ext/sqlite/tests/sqlite_oo_001.phpt b/ext/sqlite/tests/sqlite_oo_001.phpt
deleted file mode 100755
index 672ddb17b6..0000000000
--- a/ext/sqlite/tests/sqlite_oo_001.phpt
+++ /dev/null
@@ -1,17 +0,0 @@
---TEST--
-sqlite-oo: sqlite_open/close
---INI--
-sqlite.assoc_case=0
---SKIPIF--
-<?php if (!extension_loaded("sqlite")) print "skip"; ?>
---FILE--
-<?php
-require_once('blankdb_oo.inc');
-var_dump($db);
-$db = NULL;
-echo "Done\n";
-?>
---EXPECTF--
-object(SQLiteDatabase)#%d (0) {
-}
-Done
diff --git a/ext/sqlite/tests/sqlite_oo_002.phpt b/ext/sqlite/tests/sqlite_oo_002.phpt
deleted file mode 100755
index 00a568a2a8..0000000000
--- a/ext/sqlite/tests/sqlite_oo_002.phpt
+++ /dev/null
@@ -1,41 +0,0 @@
---TEST--
-sqlite-oo: Simple insert/select
---INI--
-sqlite.assoc_case=0
---SKIPIF--
-<?php # vim:ft=php
-if (!extension_loaded("sqlite")) print "skip"; ?>
---FILE--
-<?php
-require_once('blankdb_oo.inc');
-var_dump($db);
-
-var_dump($db->query("CREATE TABLE foo(c1 date, c2 time, c3 varchar(64))"));
-var_dump($db->query("INSERT INTO foo VALUES ('2002-01-02', '12:49:00', NULL)"));
-$r = $db->query("SELECT * from foo");
-var_dump($r);
-var_dump($r->fetch());
-?>
---EXPECTF--
-object(SQLiteDatabase)#%d (0) {
-}
-object(SQLiteResult)#%d (0) {
-}
-object(SQLiteResult)#%d (0) {
-}
-object(SQLiteResult)#%d (0) {
-}
-array(6) {
- [0]=>
- string(10) "2002-01-02"
- ["c1"]=>
- string(10) "2002-01-02"
- [1]=>
- string(8) "12:49:00"
- ["c2"]=>
- string(8) "12:49:00"
- [2]=>
- NULL
- ["c3"]=>
- NULL
-}
diff --git a/ext/sqlite/tests/sqlite_oo_003.phpt b/ext/sqlite/tests/sqlite_oo_003.phpt
deleted file mode 100755
index f9ca65c611..0000000000
--- a/ext/sqlite/tests/sqlite_oo_003.phpt
+++ /dev/null
@@ -1,51 +0,0 @@
---TEST--
-sqlite-oo: Simple insert/select, different result representation
---INI--
-sqlite.assoc_case=0
---SKIPIF--
-<?php # vim:ft=php
-if (!extension_loaded("sqlite")) print "skip"; ?>
---FILE--
-<?php
-include "blankdb_oo.inc";
-
-$db->query("CREATE TABLE foo(c1 date, c2 time, c3 varchar(64))");
-$db->query("INSERT INTO foo VALUES ('2002-01-02', '12:49:00', NULL)");
-$r = $db->query("SELECT * from foo");
-var_dump($r->fetch(SQLITE_BOTH));
-$r = $db->query("SELECT * from foo");
-var_dump($r->fetch(SQLITE_NUM));
-$r = $db->query("SELECT * from foo");
-var_dump($r->fetch(SQLITE_ASSOC));
-?>
---EXPECT--
-array(6) {
- [0]=>
- string(10) "2002-01-02"
- ["c1"]=>
- string(10) "2002-01-02"
- [1]=>
- string(8) "12:49:00"
- ["c2"]=>
- string(8) "12:49:00"
- [2]=>
- NULL
- ["c3"]=>
- NULL
-}
-array(3) {
- [0]=>
- string(10) "2002-01-02"
- [1]=>
- string(8) "12:49:00"
- [2]=>
- NULL
-}
-array(3) {
- ["c1"]=>
- string(10) "2002-01-02"
- ["c2"]=>
- string(8) "12:49:00"
- ["c3"]=>
- NULL
-}
diff --git a/ext/sqlite/tests/sqlite_oo_008.phpt b/ext/sqlite/tests/sqlite_oo_008.phpt
deleted file mode 100755
index 8e99a1deaf..0000000000
--- a/ext/sqlite/tests/sqlite_oo_008.phpt
+++ /dev/null
@@ -1,43 +0,0 @@
---TEST--
-sqlite-oo: fetch all (buffered)
---INI--
-sqlite.assoc_case=0
---SKIPIF--
-<?php # vim:ft=php
-if (!extension_loaded("sqlite")) print "skip"; ?>
---FILE--
-<?php
-include "blankdb_oo.inc";
-
-$data = array(
- "one",
- "two",
- "three"
- );
-
-$db->query("CREATE TABLE strings(a VARCHAR)");
-
-foreach ($data as $str) {
- $db->query("INSERT INTO strings VALUES('$str')");
-}
-
-$r = $db->query("SELECT a from strings");
-while ($row = $r->fetch(SQLITE_NUM)) {
- var_dump($row);
-}
-echo "DONE!\n";
-?>
---EXPECT--
-array(1) {
- [0]=>
- string(3) "one"
-}
-array(1) {
- [0]=>
- string(3) "two"
-}
-array(1) {
- [0]=>
- string(5) "three"
-}
-DONE!
diff --git a/ext/sqlite/tests/sqlite_oo_009.phpt b/ext/sqlite/tests/sqlite_oo_009.phpt
deleted file mode 100755
index c2a55556c1..0000000000
--- a/ext/sqlite/tests/sqlite_oo_009.phpt
+++ /dev/null
@@ -1,43 +0,0 @@
---TEST--
-sqlite-oo: fetch all (unbuffered)
---INI--
-sqlite.assoc_case=0
---SKIPIF--
-<?php # vim:ft=php
-if (!extension_loaded("sqlite")) print "skip"; ?>
---FILE--
-<?php
-include "blankdb_oo.inc";
-
-$data = array(
- "one",
- "two",
- "three"
- );
-
-$db->query("CREATE TABLE strings(a VARCHAR)");
-
-foreach ($data as $str) {
- $db->query("INSERT INTO strings VALUES('$str')");
-}
-
-$r = $db->unbufferedQuery("SELECT a from strings");
-while ($row = $r->fetch(SQLITE_NUM)) {
- var_dump($row);
-}
-echo "DONE!\n";
-?>
---EXPECT--
-array(1) {
- [0]=>
- string(3) "one"
-}
-array(1) {
- [0]=>
- string(3) "two"
-}
-array(1) {
- [0]=>
- string(5) "three"
-}
-DONE!
diff --git a/ext/sqlite/tests/sqlite_oo_010.phpt b/ext/sqlite/tests/sqlite_oo_010.phpt
deleted file mode 100755
index 8d6f3c0a99..0000000000
--- a/ext/sqlite/tests/sqlite_oo_010.phpt
+++ /dev/null
@@ -1,44 +0,0 @@
---TEST--
-sqlite-oo: fetch all (iterator)
---INI--
-sqlite.assoc_case=0
---SKIPIF--
-<?php # vim:ft=php
-if (!extension_loaded("sqlite")) print "skip"; ?>
---FILE--
-<?php
-include "blankdb_oo.inc";
-
-$data = array(
- "one",
- "two",
- "three"
- );
-
-$db->query("CREATE TABLE strings(a VARCHAR)");
-
-foreach ($data as $str) {
- $db->query("INSERT INTO strings VALUES('$str')");
-}
-
-$r = $db->unbufferedQuery("SELECT a from strings", SQLITE_NUM);
-while ($row = $r->valid()) {
- var_dump($r->current());
- $r->next();
-}
-echo "DONE!\n";
-?>
---EXPECT--
-array(1) {
- [0]=>
- string(3) "one"
-}
-array(1) {
- [0]=>
- string(3) "two"
-}
-array(1) {
- [0]=>
- string(5) "three"
-}
-DONE!
diff --git a/ext/sqlite/tests/sqlite_oo_011.phpt b/ext/sqlite/tests/sqlite_oo_011.phpt
deleted file mode 100755
index 4b5a37044c..0000000000
--- a/ext/sqlite/tests/sqlite_oo_011.phpt
+++ /dev/null
@@ -1,33 +0,0 @@
---TEST--
-sqlite-oo: returned associative column names
---INI--
-sqlite.assoc_case=0
---SKIPIF--
-<?php # vim:ft=php
-if (!extension_loaded("sqlite")) print "skip"; ?>
---FILE--
-<?php
-include "blankdb_oo.inc";
-
-$db->query("CREATE TABLE foo (c1 char, c2 char, c3 char)");
-$db->query("CREATE TABLE bar (c1 char, c2 char, c3 char)");
-$db->query("INSERT INTO foo VALUES ('1', '2', '3')");
-$db->query("INSERT INTO bar VALUES ('4', '5', '6')");
-$r = $db->query("SELECT * from foo, bar", SQLITE_ASSOC);
-var_dump($r->fetch());
-?>
---EXPECT--
-array(6) {
- ["foo.c1"]=>
- string(1) "1"
- ["foo.c2"]=>
- string(1) "2"
- ["foo.c3"]=>
- string(1) "3"
- ["bar.c1"]=>
- string(1) "4"
- ["bar.c2"]=>
- string(1) "5"
- ["bar.c3"]=>
- string(1) "6"
-}
diff --git a/ext/sqlite/tests/sqlite_oo_012.phpt b/ext/sqlite/tests/sqlite_oo_012.phpt
deleted file mode 100755
index 408feb9d17..0000000000
--- a/ext/sqlite/tests/sqlite_oo_012.phpt
+++ /dev/null
@@ -1,35 +0,0 @@
---TEST--
-sqlite-oo: read field names
---INI--
-sqlite.assoc_case=0
---SKIPIF--
-<?php # vim:ft=php
-if (!extension_loaded("sqlite")) print "skip"; ?>
---FILE--
-<?php
-include "blankdb_oo.inc";
-
-$db->query("CREATE TABLE strings(foo VARCHAR, bar VARCHAR, baz VARCHAR)");
-
-echo "Buffered\n";
-$r = $db->query("SELECT * from strings");
-for($i=0; $i<$r->numFields(); $i++) {
- var_dump($r->fieldName($i));
-}
-echo "Unbuffered\n";
-$r = $db->unbufferedQuery("SELECT * from strings");
-for($i=0; $i<$r->numFields(); $i++) {
- var_dump($r->fieldName($i));
-}
-echo "DONE!\n";
-?>
---EXPECT--
-Buffered
-string(3) "foo"
-string(3) "bar"
-string(3) "baz"
-Unbuffered
-string(3) "foo"
-string(3) "bar"
-string(3) "baz"
-DONE!
diff --git a/ext/sqlite/tests/sqlite_oo_013.phpt b/ext/sqlite/tests/sqlite_oo_013.phpt
deleted file mode 100755
index 0c19505f23..0000000000
--- a/ext/sqlite/tests/sqlite_oo_013.phpt
+++ /dev/null
@@ -1,75 +0,0 @@
---TEST--
-sqlite-oo: fetch column
---INI--
-sqlite.assoc_case=0
---SKIPIF--
-<?php # vim:ft=php
-if (!extension_loaded("sqlite")) print "skip"; ?>
---FILE--
-<?php
-include "blankdb_oo.inc";
-
-$data = array(
- array (0 => 'one', 1 => 'two'),
- array (0 => 'three', 1 => 'four')
- );
-
-$db->query("CREATE TABLE strings(a VARCHAR, b VARCHAR)");
-
-foreach ($data as $str) {
- $db->query("INSERT INTO strings VALUES('${str[0]}','${str[1]}')");
-}
-
-echo "====BUFFERED====\n";
-$r = $db->query("SELECT a, b from strings");
-while ($r->valid()) {
- var_dump($r->current(SQLITE_NUM));
- var_dump($r->column(0));
- var_dump($r->column(1));
- var_dump($r->column('a'));
- var_dump($r->column('b'));
- $r->next();
-}
-echo "====UNBUFFERED====\n";
-$r = $db->unbufferedQuery("SELECT a, b from strings");
-while ($r->valid()) {
- var_dump($r->column(0));
- var_dump($r->column('b'));
- var_dump($r->column(1));
- var_dump($r->column('a'));
- $r->next();
-}
-echo "DONE!\n";
-?>
---EXPECT--
-====BUFFERED====
-array(2) {
- [0]=>
- string(3) "one"
- [1]=>
- string(3) "two"
-}
-string(3) "one"
-string(3) "two"
-string(3) "one"
-string(3) "two"
-array(2) {
- [0]=>
- string(5) "three"
- [1]=>
- string(4) "four"
-}
-string(5) "three"
-string(4) "four"
-string(5) "three"
-string(4) "four"
-====UNBUFFERED====
-string(3) "one"
-string(3) "two"
-NULL
-NULL
-string(5) "three"
-string(4) "four"
-NULL
-NULL
-DONE!
diff --git a/ext/sqlite/tests/sqlite_oo_014.phpt b/ext/sqlite/tests/sqlite_oo_014.phpt
deleted file mode 100755
index 9735a5442c..0000000000
--- a/ext/sqlite/tests/sqlite_oo_014.phpt
+++ /dev/null
@@ -1,118 +0,0 @@
---TEST--
-sqlite-oo: fetch all
---INI--
-sqlite.assoc_case=0
---SKIPIF--
-<?php # vim:ft=php
-if (!extension_loaded("sqlite")) print "skip"; ?>
---FILE--
-<?php
-include "blankdb_oo.inc";
-
-$data = array(
- "one",
- "two",
- "three"
- );
-
-$db->query("CREATE TABLE strings(a VARCHAR)");
-
-foreach ($data as $str) {
- $db->query("INSERT INTO strings VALUES('$str')");
-}
-
-echo "unbuffered twice\n";
-$r = $db->unbufferedQuery("SELECT a from strings", SQLITE_NUM);
-var_dump($r->fetchAll());
-var_dump($r->fetchAll());
-
-echo "unbuffered with fetch_array\n";
-$r = $db->unbufferedQuery("SELECT a from strings", SQLITE_NUM);
-var_dump($r->fetch());
-var_dump($r->fetchAll());
-
-echo "buffered\n";
-$r = $db->query("SELECT a from strings", SQLITE_NUM);
-var_dump($r->fetchAll());
-var_dump($r->fetch());
-var_dump($r->fetchAll());
-
-echo "DONE!\n";
-?>
---EXPECTF--
-unbuffered twice
-array(3) {
- [0]=>
- array(1) {
- [0]=>
- string(3) "one"
- }
- [1]=>
- array(1) {
- [0]=>
- string(3) "two"
- }
- [2]=>
- array(1) {
- [0]=>
- string(5) "three"
- }
-}
-
-Warning: SQLiteUnbuffered::fetchAll(): One or more rowsets were already returned; returning NULL this time in %ssqlite_oo_014.php on line %d
-array(0) {
-}
-unbuffered with fetch_array
-array(1) {
- [0]=>
- string(3) "one"
-}
-array(2) {
- [0]=>
- array(1) {
- [0]=>
- string(3) "two"
- }
- [1]=>
- array(1) {
- [0]=>
- string(5) "three"
- }
-}
-buffered
-array(3) {
- [0]=>
- array(1) {
- [0]=>
- string(3) "one"
- }
- [1]=>
- array(1) {
- [0]=>
- string(3) "two"
- }
- [2]=>
- array(1) {
- [0]=>
- string(5) "three"
- }
-}
-bool(false)
-array(3) {
- [0]=>
- array(1) {
- [0]=>
- string(3) "one"
- }
- [1]=>
- array(1) {
- [0]=>
- string(3) "two"
- }
- [2]=>
- array(1) {
- [0]=>
- string(5) "three"
- }
-}
-DONE!
diff --git a/ext/sqlite/tests/sqlite_oo_015.phpt b/ext/sqlite/tests/sqlite_oo_015.phpt
deleted file mode 100755
index 893e6f14ab..0000000000
--- a/ext/sqlite/tests/sqlite_oo_015.phpt
+++ /dev/null
@@ -1,47 +0,0 @@
---TEST--
-sqlite-oo: array_query
---INI--
-sqlite.assoc_case=0
---SKIPIF--
-<?php # vim:ft=php
-if (!extension_loaded("sqlite")) print "skip"; ?>
---FILE--
-<?php
-include "blankdb_oo.inc";
-
-$data = array(
- "one",
- "two",
- "three"
- );
-
-$db->query("CREATE TABLE strings(a VARCHAR)");
-
-foreach ($data as $str) {
- $db->query("INSERT INTO strings VALUES('$str')");
-}
-
-$res = $db->arrayQuery("SELECT a from strings", SQLITE_NUM);
-var_dump($res);
-
-echo "DONE!\n";
-?>
---EXPECTF--
-array(3) {
- [0]=>
- array(1) {
- [0]=>
- string(3) "one"
- }
- [1]=>
- array(1) {
- [0]=>
- string(3) "two"
- }
- [2]=>
- array(1) {
- [0]=>
- string(5) "three"
- }
-}
-DONE!
diff --git a/ext/sqlite/tests/sqlite_oo_016.phpt b/ext/sqlite/tests/sqlite_oo_016.phpt
deleted file mode 100755
index d831b48326..0000000000
--- a/ext/sqlite/tests/sqlite_oo_016.phpt
+++ /dev/null
@@ -1,42 +0,0 @@
---TEST--
-sqlite-oo: fetch single
---INI--
-sqlite.assoc_case=0
---SKIPIF--
-<?php # vim:ft=php
-if (!extension_loaded("sqlite")) print "skip"; ?>
---FILE--
-<?php
-include "blankdb_oo.inc";
-
-$data = array(
- array (0 => 'one', 1 => 'two'),
- array (0 => 'three', 1 => 'four')
- );
-
-$db->query("CREATE TABLE strings(a VARCHAR, b VARCHAR)");
-
-foreach ($data as $str) {
- $db->query("INSERT INTO strings VALUES('${str[0]}','${str[1]}')");
-}
-
-echo "====BUFFERED====\n";
-$r = $db->query("SELECT a, b from strings");
-while ($r->valid()) {
- var_dump($r->fetchSingle());
-}
-echo "====UNBUFFERED====\n";
-$r = $db->unbufferedQuery("SELECT a, b from strings");
-while ($r->valid()) {
- var_dump($r->fetchSingle());
-}
-echo "DONE!\n";
-?>
---EXPECT--
-====BUFFERED====
-string(3) "one"
-string(5) "three"
-====UNBUFFERED====
-string(3) "one"
-string(5) "three"
-DONE!
diff --git a/ext/sqlite/tests/sqlite_oo_020.phpt b/ext/sqlite/tests/sqlite_oo_020.phpt
deleted file mode 100755
index a855101fbd..0000000000
--- a/ext/sqlite/tests/sqlite_oo_020.phpt
+++ /dev/null
@@ -1,66 +0,0 @@
---TEST--
-sqlite-oo: factory and exception
---INI--
-sqlite.assoc_case=0
---SKIPIF--
-<?php # vim:ft=php
-if (!extension_loaded("sqlite")) print "skip"; ?>
---FILE--
-<?php
-$dbname = tempnam(dirname(__FILE__), "phpsql");
-function cleanup() {
- global $db, $dbname;
-
- $db = NULL;
- unlink($dbname);
-}
-register_shutdown_function("cleanup");
-
-try {
- $db = sqlite_factory();
-} catch(SQLiteException $err) {
- echo "Message: ".$err->getMessage()."\n";
- echo "File: ".$err->getFile()."\n";
- //echo "Line: ".$err->getLine()."\n";
- //print_r($err->getTrace());
- //echo "BackTrace: ".$err->getTraceAsString()."\n";
-}
-
-$db = sqlite_factory($dbname);
-
-$data = array(
- array (0 => 'one', 1 => 'two'),
- array (0 => 'three', 1 => 'four')
- );
-
-$db->query("CREATE TABLE strings(a VARCHAR, b VARCHAR)");
-
-foreach ($data as $str) {
- $db->query("INSERT INTO strings VALUES('${str[0]}','${str[1]}')");
-}
-
-$r = $db->unbufferedQuery("SELECT a, b from strings");
-while ($r->valid()) {
- var_dump($r->current(SQLITE_NUM));
- $r->next();
-}
-$r = null;
-$db = null;
-echo "DONE!\n";
-?>
---EXPECTF--
-Message: sqlite_factory() expects at least 1 parameter, 0 given
-File: %ssqlite_oo_020.php
-array(2) {
- [0]=>
- string(3) "one"
- [1]=>
- string(3) "two"
-}
-array(2) {
- [0]=>
- string(5) "three"
- [1]=>
- string(4) "four"
-}
-DONE!
diff --git a/ext/sqlite/tests/sqlite_oo_021.phpt b/ext/sqlite/tests/sqlite_oo_021.phpt
deleted file mode 100755
index 850e4dc9a3..0000000000
--- a/ext/sqlite/tests/sqlite_oo_021.phpt
+++ /dev/null
@@ -1,48 +0,0 @@
---TEST--
-sqlite-oo: single query
---SKIPIF--
-<?php # vim:ft=php
-if (!extension_loaded("sqlite")) print "skip"; ?>
---FILE--
-<?php
-include "blankdb_oo.inc";
-
-$db->query("CREATE TABLE test_db ( id INTEGER PRIMARY KEY, data VARCHAR(100) )");
-for ($i = 0; $i < 10; $i++) {
- $db->query("INSERT INTO test_db (data) VALUES('{$i}data')");
-}
-$db->query("INSERT INTO test_db (data) VALUES(NULL)");
-
-var_dump($db->singleQuery("SELECT id FROM test_db WHERE id=5"));
-var_dump($db->singleQuery("SELECT * FROM test_db WHERE id=4"));
-var_dump($db->singleQuery("SELECT data FROM test_db WHERE id=6"));
-var_dump($db->singleQuery("SELECT * FROM test_db WHERE id < 5"));
-var_dump($db->singleQuery("SELECT * FROM test db WHERE id < 4"));
-var_dump($db->singleQuery("SELECT * FROM test_db WHERE id=999999"));
-var_dump($db->singleQuery("SELECT id FROM test_db WHERE id=5", FALSE));
-
-echo "DONE!\n";
-?>
---EXPECTF--
-string(1) "5"
-string(1) "4"
-string(5) "5data"
-array(4) {
- [0]=>
- string(1) "1"
- [1]=>
- string(1) "2"
- [2]=>
- string(1) "3"
- [3]=>
- string(1) "4"
-}
-
-Warning: SQLiteDatabase::singleQuery(): no such table: test in %s on line %d
-bool(false)
-NULL
-array(1) {
- [0]=>
- string(1) "5"
-}
-DONE!
diff --git a/ext/sqlite/tests/sqlite_oo_022.phpt b/ext/sqlite/tests/sqlite_oo_022.phpt
deleted file mode 100755
index 988904f774..0000000000
--- a/ext/sqlite/tests/sqlite_oo_022.phpt
+++ /dev/null
@@ -1,98 +0,0 @@
---TEST--
-sqlite-oo: sqlite::seek
---INI--
-sqlite.assoc_case=0
---SKIPIF--
-<?php # vim:ft=php
-if (!extension_loaded("sqlite")) print "skip"; ?>
---FILE--
-<?php
-include "blankdb_oo.inc";
-
-$data = array(
- "one",
- "two",
- "three"
- );
-
-$db->query("CREATE TABLE strings(a)");
-
-foreach ($data as $str) {
- $db->query("INSERT INTO strings VALUES('$str')");
-}
-
-$res = $db->query("SELECT a FROM strings", SQLITE_NUM);
-for ($idx = -1; $idx < 4; $idx++) {
- echo "====SEEK:$idx====\n";
- $res->seek($idx);
- var_dump($res->current());
-}
-echo "====AGAIN====\n";
-for ($idx = -1; $idx < 4; $idx++) {
- echo "====SEEK:$idx====\n";
- $res->seek($idx);
- var_dump($res->current());
-}
-echo "====DONE!====\n";
-?>
---EXPECTF--
-====SEEK:-1====
-
-Warning: SQLiteResult::seek(): row -1 out of range in %ssqlite_oo_022.php on line %d
-array(1) {
- [0]=>
- string(3) "one"
-}
-====SEEK:0====
-array(1) {
- [0]=>
- string(3) "one"
-}
-====SEEK:1====
-array(1) {
- [0]=>
- string(3) "two"
-}
-====SEEK:2====
-array(1) {
- [0]=>
- string(5) "three"
-}
-====SEEK:3====
-
-Warning: SQLiteResult::seek(): row 3 out of range in %ssqlite_oo_022.php on line %d
-array(1) {
- [0]=>
- string(5) "three"
-}
-====AGAIN====
-====SEEK:-1====
-
-Warning: SQLiteResult::seek(): row -1 out of range in %ssqlite_oo_022.php on line %d
-array(1) {
- [0]=>
- string(5) "three"
-}
-====SEEK:0====
-array(1) {
- [0]=>
- string(3) "one"
-}
-====SEEK:1====
-array(1) {
- [0]=>
- string(3) "two"
-}
-====SEEK:2====
-array(1) {
- [0]=>
- string(5) "three"
-}
-====SEEK:3====
-
-Warning: SQLiteResult::seek(): row 3 out of range in %ssqlite_oo_022.php on line %d
-array(1) {
- [0]=>
- string(5) "three"
-}
-====DONE!====
diff --git a/ext/sqlite/tests/sqlite_oo_024.phpt b/ext/sqlite/tests/sqlite_oo_024.phpt
deleted file mode 100755
index f974ad8a8d..0000000000
--- a/ext/sqlite/tests/sqlite_oo_024.phpt
+++ /dev/null
@@ -1,74 +0,0 @@
---TEST--
-sqlite-oo: sqlite::fetch_object
---INI--
-sqlite.assoc_case=0
---SKIPIF--
-<?php # vim:ft=php
-if (!extension_loaded("sqlite")) print "skip"; ?>
---FILE--
-<?php
-include "blankdb_oo.inc";
-
-class class24 {
- function __construct() {
- echo __METHOD__ . "\n";
- }
-}
-
-$data = array(
- "one",
- "two",
- "three"
- );
-
-$db->query("CREATE TABLE strings(a)");
-
-foreach ($data as $str) {
- $db->query("INSERT INTO strings VALUES('$str')");
-}
-
-echo "====class24====\n";
-$res = $db->query("SELECT a FROM strings", SQLITE_ASSOC);
-while ($res->valid()) {
- var_dump($res->fetchObject('class24'));
-}
-
-echo "====stdclass====\n";
-$res = $db->query("SELECT a FROM strings", SQLITE_ASSOC);
-while ($res->valid()) {
- var_dump($res->fetchObject());
-}
-
-echo "====DONE!====\n";
-?>
---EXPECTF--
-====class24====
-class24::__construct
-object(class24)#%d (1) {
- ["a"]=>
- string(3) "one"
-}
-class24::__construct
-object(class24)#%d (1) {
- ["a"]=>
- string(3) "two"
-}
-class24::__construct
-object(class24)#%d (1) {
- ["a"]=>
- string(5) "three"
-}
-====stdclass====
-object(stdClass)#%d (1) {
- ["a"]=>
- string(3) "one"
-}
-object(stdClass)#%d (1) {
- ["a"]=>
- string(3) "two"
-}
-object(stdClass)#%d (1) {
- ["a"]=>
- string(5) "three"
-}
-====DONE!====
diff --git a/ext/sqlite/tests/sqlite_oo_025.phpt b/ext/sqlite/tests/sqlite_oo_025.phpt
deleted file mode 100755
index 3cb42d7647..0000000000
--- a/ext/sqlite/tests/sqlite_oo_025.phpt
+++ /dev/null
@@ -1,103 +0,0 @@
---TEST--
-sqlite-oo: sqlite / foreach
---INI--
-sqlite.assoc_case=0
---SKIPIF--
-<?php # vim:ft=php
-if (!extension_loaded("sqlite")) print "skip";
-?>
---FILE--
-<?php
-include "blankdb_oo.inc";
-
-$data = array(
- "one",
- "two",
- "three"
- );
-
-$db->query("CREATE TABLE strings(a VARCHAR)");
-
-foreach ($data as $str) {
- $db->query("INSERT INTO strings VALUES('$str')");
-}
-
-echo "====UNBUFFERED====\n";
-$r = $db->unbufferedQuery("SELECT a from strings", SQLITE_NUM);
-//var_dump(class_implements($r));
-foreach($r as $row) {
- var_dump($row);
-}
-echo "====NO-MORE====\n";
-foreach($r as $row) {
- var_dump($row);
-}
-echo "====DIRECT====\n";
-foreach($db->unbufferedQuery("SELECT a from strings", SQLITE_NUM) as $row) {
- var_dump($row);
-}
-echo "====BUFFERED====\n";
-$r = $db->query("SELECT a from strings", SQLITE_NUM);
-//var_dump(class_implements($r));
-foreach($r as $row) {
- var_dump($row);
-}
-foreach($r as $row) {
- var_dump($row);
-}
-echo "DONE!\n";
-?>
---EXPECT--
-====UNBUFFERED====
-array(1) {
- [0]=>
- string(3) "one"
-}
-array(1) {
- [0]=>
- string(3) "two"
-}
-array(1) {
- [0]=>
- string(5) "three"
-}
-====NO-MORE====
-====DIRECT====
-array(1) {
- [0]=>
- string(3) "one"
-}
-array(1) {
- [0]=>
- string(3) "two"
-}
-array(1) {
- [0]=>
- string(5) "three"
-}
-====BUFFERED====
-array(1) {
- [0]=>
- string(3) "one"
-}
-array(1) {
- [0]=>
- string(3) "two"
-}
-array(1) {
- [0]=>
- string(5) "three"
-}
-array(1) {
- [0]=>
- string(3) "one"
-}
-array(1) {
- [0]=>
- string(3) "two"
-}
-array(1) {
- [0]=>
- string(5) "three"
-}
-DONE!
diff --git a/ext/sqlite/tests/sqlite_oo_026.phpt b/ext/sqlite/tests/sqlite_oo_026.phpt
deleted file mode 100755
index 4beacbb888..0000000000
--- a/ext/sqlite/tests/sqlite_oo_026.phpt
+++ /dev/null
@@ -1,56 +0,0 @@
---TEST--
-sqlite-oo: unbuffered
---INI--
-sqlite.assoc_case=0
---SKIPIF--
-<?php # vim:ft=php
-if (!extension_loaded("sqlite")) print "skip";
-?>
---FILE--
-<?php
-include "blankdb_oo.inc";
-
-$data = array(
- "one",
- "two",
- "three"
- );
-
-$db->query("CREATE TABLE strings(a VARCHAR)");
-
-foreach ($data as $str) {
- $db->query("INSERT INTO strings VALUES('$str')");
-}
-
-echo "====FOREACH====\n";
-$r = $db->unbufferedQuery("SELECT a from strings", SQLITE_NUM);
-foreach($r as $idx => $row) {
- var_dump($row[0]);
- var_dump($row[0]);
-}
-echo "====FOR====\n";
-$r = $db->unbufferedQuery("SELECT a from strings", SQLITE_NUM);
-for(;$r->valid(); $r->next()) {
- $v = $r->column(0);
- var_dump($v);
- $c = $r->column(0);
- var_dump(is_null($c) || $c==$v);
-}
-echo "===DONE===\n";
-?>
---EXPECT--
-====FOREACH====
-string(3) "one"
-string(3) "one"
-string(3) "two"
-string(3) "two"
-string(5) "three"
-string(5) "three"
-====FOR====
-string(3) "one"
-bool(true)
-string(3) "two"
-bool(true)
-string(5) "three"
-bool(true)
-===DONE===
diff --git a/ext/sqlite/tests/sqlite_oo_027.phpt b/ext/sqlite/tests/sqlite_oo_027.phpt
deleted file mode 100755
index 069c7c97ea..0000000000
--- a/ext/sqlite/tests/sqlite_oo_027.phpt
+++ /dev/null
@@ -1,42 +0,0 @@
---TEST--
-sqlite-oo: changes
---INI--
-sqlite.assoc_case=0
---SKIPIF--
-<?php # vim:ft=php
-if (!extension_loaded("sqlite")) print "skip";
-?>
---FILE--
-<?php
-include "blankdb_oo.inc";
-
-$data = array("one", "two", "three");
-
-$db->query("CREATE TABLE strings(a VARCHAR)");
-
-foreach ($data as $str) {
- $db->query("INSERT INTO strings VALUES('$str')");
- echo $db->changes() . "\n";
-}
-
-$db->query("UPDATE strings SET a='foo' WHERE a!='two'");
-echo $db->changes() . "\n";
-
-$db->query("DELETE FROM strings WHERE 1");
-echo $db->changes() . "\n";
-
-$str = '';
-foreach ($data as $s) {
- $str .= "INSERT INTO strings VALUES('".$s."');";
-}
-$db->query($str);
-echo $db->changes() . "\n";
-
-?>
---EXPECT--
-1
-1
-1
-2
-3
-3
diff --git a/ext/sqlite/tests/sqlite_oo_028.phpt b/ext/sqlite/tests/sqlite_oo_028.phpt
deleted file mode 100755
index fe7f8c6f68..0000000000
--- a/ext/sqlite/tests/sqlite_oo_028.phpt
+++ /dev/null
@@ -1,25 +0,0 @@
---TEST--
-sqlite-oo: sqlite_fetch_column_types
---SKIPIF--
-<?php # vim:ft=php
-if (!extension_loaded("sqlite")) print "skip"; ?>
---FILE--
-<?php
-include "blankdb_oo.inc";
-
-$db->query("CREATE TABLE strings(a, b INTEGER, c VARCHAR(10), d)");
-$db->query("INSERT INTO strings VALUES('1', '2', '3', 'abc')");
-
-var_dump($db->fetchColumnTypes("strings"));
-?>
---EXPECT--
-array(4) {
- ["a"]=>
- string(0) ""
- ["b"]=>
- string(7) "INTEGER"
- ["c"]=>
- string(11) "VARCHAR(10)"
- ["d"]=>
- string(0) ""
-}
diff --git a/ext/sqlite/tests/sqlite_oo_029.phpt b/ext/sqlite/tests/sqlite_oo_029.phpt
deleted file mode 100755
index 4b2b1992b8..0000000000
--- a/ext/sqlite/tests/sqlite_oo_029.phpt
+++ /dev/null
@@ -1,53 +0,0 @@
---TEST--
-sqlite-oo: call method with $this
---SKIPIF--
-<?php # vim:ft=php
-if (!extension_loaded("sqlite")) print "skip";
-?>
---FILE--
-<?php
-include "blankdb_oo.inc";
-
-$db->query("CREATE TABLE strings(key VARCHAR(10), var VARCHAR(10))");
-$db->query("INSERT INTO strings VALUES('foo', 'foo')");
-
-class sqlite_help
-{
- function __construct($db){
- $this->db = $db;
- $this->db->createFunction('link_keywords', array(&$this, 'linkers'), 1);
- }
-
- function getSingle($key)
- {
- return $this->db->singleQuery('SELECT link_keywords(var) FROM strings WHERE key=\''.$key.'\'', 1);
- }
-
- function linkers($str)
- {
- $str = str_replace('foo', 'bar', $str);
- return $str;
- }
-
- function free()
- {
- unset($this->db);
- }
-
- function __destruct()
- {
- echo "DESTRUCTED\n";
- }
-}
-
-$obj = new sqlite_help($db);
-echo $obj->getSingle('foo')."\n";
-$obj->free();
-unset($obj);
-
-?>
-===DONE===
---EXPECT--
-bar
-===DONE===
-DESTRUCTED
diff --git a/ext/sqlite/tests/sqlite_oo_030.phpt b/ext/sqlite/tests/sqlite_oo_030.phpt
deleted file mode 100755
index 2155115974..0000000000
--- a/ext/sqlite/tests/sqlite_oo_030.phpt
+++ /dev/null
@@ -1,42 +0,0 @@
---TEST--
-sqlite-oo: calling static methods
---INI--
-sqlite.assoc_case=0
---SKIPIF--
-<?php # vim:ft=php
-if (!extension_loaded("sqlite")) print "skip";
-?>
---FILE--
-<?php
-
-require_once('blankdb_oo.inc');
-
-class foo {
- static function bar($param = NULL) {
- return $param;
- }
-}
-
-function baz($param = NULL) {
- return $param;
-}
-
-var_dump($db->singleQuery("select php('baz')", 1));
-var_dump($db->singleQuery("select php('baz', 1)", 1));
-var_dump($db->singleQuery("select php('baz', \"PHP\")", 1));
-var_dump($db->singleQuery("select php('foo::bar')", 1));
-var_dump($db->singleQuery("select php('foo::bar', 1)", 1));
-var_dump($db->singleQuery("select php('foo::bar', \"PHP\")", 1));
-var_dump($db->singleQuery("select php('foo::bar(\"PHP\")')", 1));
-
-?>
-===DONE===
---EXPECTF--
-NULL
-string(1) "1"
-string(3) "PHP"
-NULL
-string(1) "1"
-string(3) "PHP"
-
-Fatal error: Call to undefined method foo::bar("php")() in %ssqlite_oo_030.php on line %d
diff --git a/ext/sqlite/tests/sqlite_oo_031.phpt b/ext/sqlite/tests/sqlite_oo_031.phpt
deleted file mode 100755
index f0ed40a425..0000000000
--- a/ext/sqlite/tests/sqlite_oo_031.phpt
+++ /dev/null
@@ -1,125 +0,0 @@
---TEST--
-sqlite-oo: and spl
---SKIPIF--
-<?php # vim:ft=php
-if (!extension_loaded("sqlite")) print "skip";
-if (!extension_loaded("spl")) print "skip SPL is not present";
-?>
---FILE--
-<?php
-include "blankdb_oo.inc";
-
-$db->query("CREATE TABLE menu(id_l int PRIMARY KEY, id_r int UNIQUE, key VARCHAR(10))");
-$db->query("INSERT INTO menu VALUES( 1, 12, 'A')");
-$db->query("INSERT INTO menu VALUES( 2, 9, 'B')");
-$db->query("INSERT INTO menu VALUES(10, 11, 'F')");
-$db->query("INSERT INTO menu VALUES( 3, 6, 'C')");
-$db->query("INSERT INTO menu VALUES( 7, 8, 'E')");
-$db->query("INSERT INTO menu VALUES( 4, 5, 'D')");
-
-class SqliteNestedsetElement
-{
- protected $id_l;
- protected $id_r;
- protected $key;
-
- function __construct($db)
- {
- $this->db = $db;
- }
-
- function getLeft()
- {
- return $this->id_l;
- }
-
- function getRight()
- {
- return $this->id_r;
- }
-
- function __toString()
- {
- return $this->key;
- }
-
- function key()
- {
- return $this->key;
- }
-}
-
-class SqliteNestedset implements RecursiveIterator
-{
- protected $id;
- protected $id_l;
- protected $id_r;
- protected $entry;
-
- function __construct($db, $id_l = 1)
- {
- $this->db = $db;
- $this->id_l = $id_l;
- $this->id_r = $this->db->singleQuery('SELECT id_r FROM menu WHERE id_l='.$id_l, 1);
- $this->id = $id_l;
- }
-
- function rewind()
- {
- $this->id = $this->id_l;
- $this->fetch();
- }
-
- function valid()
- {
- return is_object($this->entry);
- }
-
- function current()
- {
- return $this->entry->__toString();
- }
-
- function key()
- {
- return $this->entry->key();;
- }
-
- function next()
- {
- $this->id = $this->entry->getRight() + 1;
- $this->fetch();
- }
-
- protected function fetch()
- {
- $res = $this->db->unbufferedQuery('SELECT * FROM menu WHERE id_l='.$this->id);
- $this->entry = $res->fetchObject('SqliteNestedsetElement', array(&$this->db));
- unset($res);
- }
-
- function hasChildren()
- {
- return $this->entry->getLeft() + 1 < $this->entry->getRight();
- }
-
- function getChildren()
- {
- return new SqliteNestedset($this->db, $this->entry->getLeft() + 1, $this->entry->getRight() - 1);
- }
-}
-
-$menu_iterator = new RecursiveIteratorIterator(new SqliteNestedset($db), RIT_SELF_FIRST);
-foreach($menu_iterator as $entry) {
- echo $menu_iterator->getDepth() . $entry . "\n";
-}
-?>
-===DONE===
---EXPECT--
-0A
-1B
-2C
-3D
-2E
-1F
-===DONE===
diff --git a/ext/standard/CREDITS b/ext/standard/CREDITS
deleted file mode 100644
index 4021b08860..0000000000
--- a/ext/standard/CREDITS
+++ /dev/null
@@ -1,3 +0,0 @@
-Assert
-Thies C. Arntzen
-
diff --git a/ext/standard/Makefile.frag b/ext/standard/Makefile.frag
deleted file mode 100644
index f68fcea405..0000000000
--- a/ext/standard/Makefile.frag
+++ /dev/null
@@ -1,13 +0,0 @@
-
-$(srcdir)/parsedate.c: $(srcdir)/parsedate.y
- $(YACC) $(srcdir)/parsedate.y -o $@
-
-$(srcdir)/var_unserializer.c: $(srcdir)/var_unserializer.re
- $(RE2C) -b $(srcdir)/var_unserializer.re > $@
-
-$(srcdir)/url_scanner_ex.c: $(srcdir)/url_scanner_ex.re
- $(RE2C) -b $(srcdir)/url_scanner_ex.re > $@
-
-$(srcdir)/info.c: $(builddir)/../../main/build-defs.h
-
-$(builddir)/basic_functions.lo: Zend/zend_language_parser.h
diff --git a/ext/standard/array.c b/ext/standard/array.c
deleted file mode 100644
index 29f659e97f..0000000000
--- a/ext/standard/array.c
+++ /dev/null
@@ -1,4369 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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. |
- +----------------------------------------------------------------------+
- | Authors: Andi Gutmans <andi@zend.com> |
- | Zeev Suraski <zeev@zend.com> |
- | Rasmus Lerdorf <rasmus@php.net> |
- | Andrei Zmievski <andrei@php.net> |
- | Stig Venaas <venaas@php.net> |
- | Jason Greene <jason@php.net> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#include "php.h"
-#include "php_ini.h"
-#include <stdarg.h>
-#include <stdlib.h>
-#include <math.h>
-#include <time.h>
-#include <stdio.h>
-#if HAVE_STRING_H
-#include <string.h>
-#else
-#include <strings.h>
-#endif
-#ifdef PHP_WIN32
-#include "win32/unistd.h"
-#endif
-#include "zend_globals.h"
-#include "php_globals.h"
-#include "php_array.h"
-#include "basic_functions.h"
-#include "php_string.h"
-#include "php_rand.h"
-#include "php_smart_str.h"
-
-#ifdef ZTS
-int array_globals_id;
-#else
-php_array_globals array_globals;
-#endif
-
-#define EXTR_OVERWRITE 0
-#define EXTR_SKIP 1
-#define EXTR_PREFIX_SAME 2
-#define EXTR_PREFIX_ALL 3
-#define EXTR_PREFIX_INVALID 4
-#define EXTR_PREFIX_IF_EXISTS 5
-#define EXTR_IF_EXISTS 6
-
-#define EXTR_REFS 0x100
-
-#define SORT_REGULAR 0
-#define SORT_NUMERIC 1
-#define SORT_STRING 2
-
-#define SORT_DESC 3
-#define SORT_ASC 4
-
-#define CASE_LOWER 0
-#define CASE_UPPER 1
-
-#define COUNT_NORMAL 0
-#define COUNT_RECURSIVE 1
-
-#define DIFF_NORMAL 1
-#define DIFF_KEY 2
-#define DIFF_ASSOC 6
-#define DIFF_COMP_DATA_INTERNAL 0
-#define DIFF_COMP_DATA_USER 1
-#define DIFF_COMP_KEY_INTERNAL 0
-#define DIFF_COMP_KEY_USER 1
-
-#define INTERSECT_NORMAL 1
-#define INTERSECT_KEY 2
-#define INTERSECT_ASSOC 6
-#define INTERSECT_COMP_DATA_INTERNAL 0
-#define INTERSECT_COMP_DATA_USER 1
-#define INTERSECT_COMP_KEY_INTERNAL 0
-#define INTERSECT_COMP_KEY_USER 1
-
-#define DOUBLE_DRIFT_FIX 0.000000000000001
-
-PHP_MINIT_FUNCTION(array)
-{
-#ifdef ZTS
- ts_allocate_id(&array_globals_id, sizeof(php_array_globals), NULL, NULL);
-#endif
-
- REGISTER_LONG_CONSTANT("EXTR_OVERWRITE", EXTR_OVERWRITE, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("EXTR_SKIP", EXTR_SKIP, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("EXTR_PREFIX_SAME", EXTR_PREFIX_SAME, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("EXTR_PREFIX_ALL", EXTR_PREFIX_ALL, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("EXTR_PREFIX_INVALID", EXTR_PREFIX_INVALID, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("EXTR_PREFIX_IF_EXISTS", EXTR_PREFIX_IF_EXISTS, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("EXTR_IF_EXISTS", EXTR_IF_EXISTS, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("EXTR_REFS", EXTR_REFS, CONST_CS | CONST_PERSISTENT);
-
- REGISTER_LONG_CONSTANT("SORT_ASC", SORT_ASC, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("SORT_DESC", SORT_DESC, CONST_CS | CONST_PERSISTENT);
-
- REGISTER_LONG_CONSTANT("SORT_REGULAR", SORT_REGULAR, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("SORT_NUMERIC", SORT_NUMERIC, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("SORT_STRING", SORT_STRING, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("CASE_LOWER", CASE_LOWER, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("CASE_UPPER", CASE_UPPER, CONST_CS | CONST_PERSISTENT);
-
- REGISTER_LONG_CONSTANT("COUNT_NORMAL", COUNT_NORMAL, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("COUNT_RECURSIVE", COUNT_RECURSIVE, CONST_CS | CONST_PERSISTENT);
-
- return SUCCESS;
-}
-
-PHP_MSHUTDOWN_FUNCTION(array)
-{
-#ifdef ZTS
- ts_free_id(array_globals_id);
-#endif
-
- return SUCCESS;
-}
-
-static void set_compare_func(int sort_type TSRMLS_DC)
-{
- switch (sort_type) {
- case SORT_NUMERIC:
- ARRAYG(compare_func) = numeric_compare_function;
- break;
-
- case SORT_STRING:
- ARRAYG(compare_func) = string_compare_function;
- break;
-
- case SORT_REGULAR:
- default:
- ARRAYG(compare_func) = compare_function;
- break;
- }
-}
-
-static int array_key_compare(const void *a, const void *b TSRMLS_DC)
-{
- Bucket *f;
- Bucket *s;
- zval result;
- zval first;
- zval second;
-
- f = *((Bucket **) a);
- s = *((Bucket **) b);
-
- if (f->nKeyLength == 0) {
- Z_TYPE(first) = IS_LONG;
- Z_LVAL(first) = f->h;
- } else {
- Z_TYPE(first) = IS_STRING;
- Z_STRVAL(first) = f->arKey;
- Z_STRLEN(first) = f->nKeyLength-1;
- }
-
- if (s->nKeyLength == 0) {
- Z_TYPE(second) = IS_LONG;
- Z_LVAL(second) = s->h;
- } else {
- Z_TYPE(second) = IS_STRING;
- Z_STRVAL(second) = s->arKey;
- Z_STRLEN(second) = s->nKeyLength-1;
- }
-
- if (ARRAYG(compare_func)(&result, &first, &second TSRMLS_CC) == FAILURE) {
- return 0;
- }
-
- if (Z_TYPE(result) == IS_DOUBLE) {
- if (Z_DVAL(result) < 0) {
- return -1;
- } else if (Z_DVAL(result) > 0) {
- return 1;
- } else {
- return 0;
- }
- }
-
- convert_to_long(&result);
-
- if (Z_LVAL(result) < 0) {
- return -1;
- } else if (Z_LVAL(result) > 0) {
- return 1;
- }
-
- return 0;
-}
-
-static int array_reverse_key_compare(const void *a, const void *b TSRMLS_DC)
-{
- return array_key_compare(a, b TSRMLS_CC) * -1;
-}
-
-/* {{{ proto bool krsort(array array_arg [, int sort_flags])
- Sort an array by key value in reverse order */
-PHP_FUNCTION(krsort)
-{
- zval *array;
- long sort_type = SORT_REGULAR;
- HashTable *target_hash;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "a|l", &array, &sort_type) == FAILURE) {
- RETURN_FALSE;
- }
-
- target_hash = HASH_OF(array);
- set_compare_func(sort_type TSRMLS_CC);
-
- if (zend_hash_sort(target_hash, zend_qsort, array_reverse_key_compare, 0 TSRMLS_CC) == FAILURE) {
- RETURN_FALSE;
- }
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto bool ksort(array array_arg [, int sort_flags])
- Sort an array by key */
-PHP_FUNCTION(ksort)
-{
- zval *array;
- long sort_type = SORT_REGULAR;
- HashTable *target_hash;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "a|l", &array, &sort_type) == FAILURE) {
- RETURN_FALSE;
- }
-
- target_hash = HASH_OF(array);
- set_compare_func(sort_type TSRMLS_CC);
-
- if (zend_hash_sort(target_hash, zend_qsort, array_key_compare, 0 TSRMLS_CC) == FAILURE) {
- RETURN_FALSE;
- }
- RETURN_TRUE;
-}
-/* }}} */
-
-
-static int php_count_recursive(zval *array, long mode TSRMLS_DC)
-{
- long cnt = 0;
- zval **element;
-
- if (Z_TYPE_P(array) == IS_ARRAY) {
- cnt = zend_hash_num_elements(Z_ARRVAL_P(array));
- if (mode == COUNT_RECURSIVE) {
- HashPosition pos;
-
- for (zend_hash_internal_pointer_reset_ex(Z_ARRVAL_P(array), &pos);
- zend_hash_get_current_data_ex(Z_ARRVAL_P(array), (void **) &element, &pos) == SUCCESS;
- zend_hash_move_forward_ex(Z_ARRVAL_P(array), &pos)) {
- cnt += php_count_recursive(*element, COUNT_RECURSIVE TSRMLS_CC);
- }
- }
- }
-
- return cnt;
-}
-
-/* {{{ proto int count(mixed var [, int mode])
- Count the number of elements in a variable (usually an array) */
-PHP_FUNCTION(count)
-{
- zval *array;
- long mode = COUNT_NORMAL;
-
- if (zend_parse_parameters (ZEND_NUM_ARGS() TSRMLS_CC, "z|l", &array, &mode) == FAILURE)
- return;
-
- switch (Z_TYPE_P(array)) {
- case IS_NULL:
- RETURN_LONG(0);
- break;
- case IS_ARRAY:
- RETURN_LONG (php_count_recursive (array, mode TSRMLS_CC));
- break;
- case IS_OBJECT:
- if (Z_OBJ_HT(*array)->count_elements) {
- RETVAL_LONG(1);
- if (SUCCESS == Z_OBJ_HT(*array)->count_elements(array, &Z_LVAL_P(return_value) TSRMLS_CC)) {
- return;
- }
- }
- default:
- RETURN_LONG(1);
- break;
- }
-}
-/* }}} */
-
-/* Numbers are always smaller than strings int this function as it
- * anyway doesn't make much sense to compare two different data types.
- * This keeps it consistant and simple.
- *
- * This is not correct any more, depends on what compare_func is set to.
- */
-static int array_data_compare(const void *a, const void *b TSRMLS_DC)
-{
- Bucket *f;
- Bucket *s;
- pval result;
- pval *first;
- pval *second;
-
- f = *((Bucket **) a);
- s = *((Bucket **) b);
-
- first = *((pval **) f->pData);
- second = *((pval **) s->pData);
-
- if (ARRAYG(compare_func)(&result, first, second TSRMLS_CC) == FAILURE) {
- return 0;
- }
-
- if (Z_TYPE(result) == IS_DOUBLE) {
- if (Z_DVAL(result) < 0) {
- return -1;
- } else if (Z_DVAL(result) > 0) {
- return 1;
- } else {
- return 0;
- }
- }
-
- convert_to_long(&result);
-
- if (Z_LVAL(result) < 0) {
- return -1;
- } else if (Z_LVAL(result) > 0) {
- return 1;
- }
-
- return 0;
-}
-
-static int array_reverse_data_compare(const void *a, const void *b TSRMLS_DC)
-{
- return array_data_compare(a, b TSRMLS_CC)*-1;
-}
-
-static int array_natural_general_compare(const void *a, const void *b, int fold_case)
-{
- Bucket *f, *s;
- zval *fval, *sval;
- zval first, second;
- int result;
-
- f = *((Bucket **) a);
- s = *((Bucket **) b);
-
- fval = *((pval **) f->pData);
- sval = *((pval **) s->pData);
- first = *fval;
- second = *sval;
- if (Z_TYPE_P(fval) != IS_STRING) {
- zval_copy_ctor(&first);
- convert_to_string(&first);
- }
- if (Z_TYPE_P(sval) != IS_STRING) {
- zval_copy_ctor(&second);
- convert_to_string(&second);
- }
-
- result = strnatcmp_ex(Z_STRVAL(first), Z_STRLEN(first), Z_STRVAL(second), Z_STRLEN(second), fold_case);
-
- if (Z_TYPE_P(fval) != IS_STRING)
- zval_dtor(&first);
- if (Z_TYPE_P(sval) != IS_STRING)
- zval_dtor(&second);
-
- return result;
-}
-
-static int array_natural_compare(const void *a, const void *b TSRMLS_DC)
-{
- return array_natural_general_compare(a, b, 0);
-}
-
-static int array_natural_case_compare(const void *a, const void *b TSRMLS_DC)
-{
- return array_natural_general_compare(a, b, 1);
-}
-
-static void php_natsort(INTERNAL_FUNCTION_PARAMETERS, int fold_case)
-{
- zval **array;
- HashTable *target_hash;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &array) == FAILURE) {
- 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");
- return;
- }
-
- if (fold_case) {
- if (zend_hash_sort(target_hash, zend_qsort, array_natural_case_compare, 0 TSRMLS_CC) == FAILURE) {
- return;
- }
- } else {
- if (zend_hash_sort(target_hash, zend_qsort, array_natural_compare, 0 TSRMLS_CC) == FAILURE) {
- return;
- }
- }
-
- RETURN_TRUE;
-}
-
-
-/* {{{ proto void natsort(array array_arg)
- Sort an array using natural sort */
-PHP_FUNCTION(natsort)
-{
- php_natsort(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0);
-}
-/* }}} */
-
-
-/* {{{ proto void natcasesort(array array_arg)
- Sort an array using case-insensitive natural sort */
-PHP_FUNCTION(natcasesort)
-{
- php_natsort(INTERNAL_FUNCTION_PARAM_PASSTHRU, 1);
-}
-/* }}} */
-
-
-/* {{{ proto bool asort(array array_arg [, int sort_flags])
- Sort an array and maintain index association */
-PHP_FUNCTION(asort)
-{
- zval *array;
- long sort_type = SORT_REGULAR;
- HashTable *target_hash;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "a|l", &array, &sort_type) == FAILURE) {
- RETURN_FALSE;
- }
-
- target_hash = HASH_OF(array);
- set_compare_func(sort_type TSRMLS_CC);
-
- if (zend_hash_sort(target_hash, zend_qsort, array_data_compare, 0 TSRMLS_CC) == FAILURE) {
- RETURN_FALSE;
- }
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto bool arsort(array array_arg [, int sort_flags])
- Sort an array in reverse order and maintain index association */
-PHP_FUNCTION(arsort)
-{
- zval *array;
- long sort_type = SORT_REGULAR;
- HashTable *target_hash;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "a|l", &array, &sort_type) == FAILURE) {
- RETURN_FALSE;
- }
-
- target_hash = HASH_OF(array);
- set_compare_func(sort_type TSRMLS_CC);
-
- if (zend_hash_sort(target_hash, zend_qsort, array_reverse_data_compare, 0 TSRMLS_CC) == FAILURE) {
- RETURN_FALSE;
- }
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto bool sort(array array_arg [, int sort_flags])
- Sort an array */
-PHP_FUNCTION(sort)
-{
- zval *array;
- long sort_type = SORT_REGULAR;
- HashTable *target_hash;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "a|l", &array, &sort_type) == FAILURE) {
- RETURN_FALSE;
- }
-
- target_hash = HASH_OF(array);
- set_compare_func(sort_type TSRMLS_CC);
-
- if (zend_hash_sort(target_hash, zend_qsort, array_data_compare, 1 TSRMLS_CC) == FAILURE) {
- RETURN_FALSE;
- }
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto bool rsort(array array_arg [, int sort_flags])
- Sort an array in reverse order */
-PHP_FUNCTION(rsort)
-{
- zval *array;
- long sort_type = SORT_REGULAR;
- HashTable *target_hash;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "a|l", &array, &sort_type) == FAILURE) {
- RETURN_FALSE;
- }
-
- target_hash = HASH_OF(array);
- set_compare_func(sort_type TSRMLS_CC);
-
- if (zend_hash_sort(target_hash, zend_qsort, array_reverse_data_compare, 1 TSRMLS_CC) == FAILURE) {
- RETURN_FALSE;
- }
- RETURN_TRUE;
-}
-/* }}} */
-
-static int array_user_compare(const void *a, const void *b TSRMLS_DC)
-{
- Bucket *f;
- Bucket *s;
- zval **args[2];
- zval *retval_ptr;
- zend_fcall_info fci;
-
- f = *((Bucket **) a);
- s = *((Bucket **) b);
-
- args[0] = (zval **) f->pData;
- args[1] = (zval **) s->pData;
-
- fci.size = sizeof(fci);
- fci.function_table = EG(function_table);
- fci.function_name = *BG(user_compare_func_name);
- fci.symbol_table = NULL;
- fci.object_pp = NULL;
- fci.retval_ptr_ptr = &retval_ptr;
- fci.param_count = 2;
- fci.params = args;
- fci.no_separation = 0;
-
- if (zend_call_function(&fci, &BG(user_compare_fci_cache) TSRMLS_CC)== SUCCESS
- && retval_ptr) {
- long retval;
-
- convert_to_long_ex(&retval_ptr);
- retval = Z_LVAL_P(retval_ptr);
- zval_ptr_dtor(&retval_ptr);
- return retval;
- } else {
- return 0;
- }
-}
-
-/* check is comparison function is valid */
-#define PHP_ARRAY_CMP_FUNC_CHECK(func_name) \
- if (!zend_is_callable(*func_name, 0, NULL)) { \
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid comparison function."); \
- BG(user_compare_func_name) = old_compare_func; \
- RETURN_FALSE; \
- } \
-
-/* {{{ proto bool usort(array array_arg, string cmp_function)
- Sort an array by values using a user-defined comparison function */
-PHP_FUNCTION(usort)
-{
- zval **array;
- zval **old_compare_func;
- HashTable *target_hash;
-
- old_compare_func = BG(user_compare_func_name);
- BG(user_compare_fci_cache) = empty_fcall_info_cache;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &array, &BG(user_compare_func_name)) == FAILURE) {
- BG(user_compare_func_name) = old_compare_func;
- 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");
- BG(user_compare_func_name) = old_compare_func;
- RETURN_FALSE;
- }
-
- PHP_ARRAY_CMP_FUNC_CHECK(BG(user_compare_func_name))
-
- if (zend_hash_sort(target_hash, zend_qsort, array_user_compare, 1 TSRMLS_CC) == FAILURE) {
- BG(user_compare_func_name) = old_compare_func;
- RETURN_FALSE;
- }
- BG(user_compare_func_name) = old_compare_func;
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto bool uasort(array array_arg, string cmp_function)
- Sort an array with a user-defined comparison function and maintain index association */
-PHP_FUNCTION(uasort)
-{
- zval **array;
- zval **old_compare_func;
- HashTable *target_hash;
-
- old_compare_func = BG(user_compare_func_name);
- BG(user_compare_fci_cache) = empty_fcall_info_cache;
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &array, &BG(user_compare_func_name)) == FAILURE) {
- BG(user_compare_func_name) = old_compare_func;
- 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");
- BG(user_compare_func_name) = old_compare_func;
- RETURN_FALSE;
- }
-
- PHP_ARRAY_CMP_FUNC_CHECK(BG(user_compare_func_name))
-
- if (zend_hash_sort(target_hash, zend_qsort, array_user_compare, 0 TSRMLS_CC) == FAILURE) {
- BG(user_compare_func_name) = old_compare_func;
- RETURN_FALSE;
- }
- BG(user_compare_func_name) = old_compare_func;
- RETURN_TRUE;
-}
-/* }}} */
-
-static int array_user_key_compare(const void *a, const void *b TSRMLS_DC)
-{
- Bucket *f;
- Bucket *s;
- pval key1, key2;
- pval *args[2];
- pval retval;
- int status;
-
- args[0] = &key1;
- args[1] = &key2;
- INIT_PZVAL(&key1);
- INIT_PZVAL(&key2);
-
- f = *((Bucket **) a);
- s = *((Bucket **) b);
-
- if (f->nKeyLength) {
- Z_STRVAL(key1) = estrndup(f->arKey, f->nKeyLength);
- Z_STRLEN(key1) = f->nKeyLength-1;
- Z_TYPE(key1) = IS_STRING;
- } else {
- Z_LVAL(key1) = f->h;
- Z_TYPE(key1) = IS_LONG;
- }
- if (s->nKeyLength) {
- Z_STRVAL(key2) = estrndup(s->arKey, s->nKeyLength);
- Z_STRLEN(key2) = s->nKeyLength-1;
- Z_TYPE(key2) = IS_STRING;
- } else {
- Z_LVAL(key2) = s->h;
- Z_TYPE(key2) = IS_LONG;
- }
-
- status = call_user_function(EG(function_table), NULL, *BG(user_compare_func_name), &retval, 2, args TSRMLS_CC);
-
- zval_dtor(&key1);
- zval_dtor(&key2);
-
- if (status == SUCCESS) {
- convert_to_long(&retval);
- return Z_LVAL(retval);
- } else {
- return 0;
- }
-}
-
-/* {{{ proto bool uksort(array array_arg, string cmp_function)
- Sort an array by keys using a user-defined comparison function */
-PHP_FUNCTION(uksort)
-{
- zval **array;
- zval **old_compare_func;
- HashTable *target_hash;
-
- old_compare_func = BG(user_compare_func_name);
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &array, &BG(user_compare_func_name)) == FAILURE) {
- BG(user_compare_func_name) = old_compare_func;
- 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");
- BG(user_compare_func_name) = old_compare_func;
- RETURN_FALSE;
- }
-
- PHP_ARRAY_CMP_FUNC_CHECK(BG(user_compare_func_name))
-
- if (zend_hash_sort(target_hash, zend_qsort, array_user_key_compare, 0 TSRMLS_CC) == FAILURE) {
- BG(user_compare_func_name) = old_compare_func;
- RETURN_FALSE;
- }
- BG(user_compare_func_name) = old_compare_func;
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto mixed end(array array_arg)
- Advances array argument's internal pointer to the last element and return it */
-PHP_FUNCTION(end)
-{
- pval **array, **entry;
- HashTable *target_hash;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &array) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- target_hash = HASH_OF(*array);
- if (!target_hash) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Passed variable is not an array or object");
- RETURN_FALSE;
- }
- zend_hash_internal_pointer_end(target_hash);
-
- if (return_value_used) {
- if (zend_hash_get_current_data(target_hash, (void **) &entry) == FAILURE) {
- RETURN_FALSE;
- }
-
- *return_value = **entry;
- zval_copy_ctor(return_value);
- }
-}
-/* }}} */
-
-/* {{{ proto mixed prev(array array_arg)
- Move array argument's internal pointer to the previous element and return it */
-PHP_FUNCTION(prev)
-{
- pval **array, **entry;
- HashTable *target_hash;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &array) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- target_hash = HASH_OF(*array);
- if (!target_hash) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Passed variable is not an array or object");
- RETURN_FALSE;
- }
- zend_hash_move_backwards(target_hash);
-
- if (return_value_used) {
- if (zend_hash_get_current_data(target_hash, (void **) &entry) == FAILURE) {
- RETURN_FALSE;
- }
-
- *return_value = **entry;
- zval_copy_ctor(return_value);
- }
-}
-/* }}} */
-
-/* {{{ proto mixed next(array array_arg)
- Move array argument's internal pointer to the next element and return it */
-PHP_FUNCTION(next)
-{
- pval **array, **entry;
- HashTable *target_hash;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &array) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- target_hash = HASH_OF(*array);
- if (!target_hash) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Passed variable is not an array or object");
- RETURN_FALSE;
- }
- zend_hash_move_forward(target_hash);
-
- if (return_value_used) {
- if (zend_hash_get_current_data(target_hash, (void **) &entry) == FAILURE) {
- RETURN_FALSE;
- }
-
- *return_value = **entry;
- zval_copy_ctor(return_value);
- }
-}
-/* }}} */
-
-/* {{{ proto mixed reset(array array_arg)
- Set array argument's internal pointer to the first element and return it */
-PHP_FUNCTION(reset)
-{
- pval **array, **entry;
- HashTable *target_hash;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &array) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- target_hash = HASH_OF(*array);
- if (!target_hash) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Passed variable is not an array or object");
- RETURN_FALSE;
- }
- zend_hash_internal_pointer_reset(target_hash);
-
- if (return_value_used) {
- if (zend_hash_get_current_data(target_hash, (void **) &entry) == FAILURE) {
- RETURN_FALSE;
- }
-
- *return_value = **entry;
- zval_copy_ctor(return_value);
- }
-}
-/* }}} */
-
-/* {{{ proto mixed current(array array_arg)
- Return the element currently pointed to by the internal array pointer */
-PHP_FUNCTION(current)
-{
- pval **array, **entry;
- HashTable *target_hash;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &array) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- target_hash = HASH_OF(*array);
- if (!target_hash) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Passed variable is not an array or object");
- RETURN_FALSE;
- }
- if (zend_hash_get_current_data(target_hash, (void **) &entry) == FAILURE) {
- RETURN_FALSE;
- }
- *return_value = **entry;
- zval_copy_ctor(return_value);
-}
-/* }}} */
-
-/* {{{ proto mixed key(array array_arg)
- Return the key of the element currently pointed to by the internal array pointer */
-PHP_FUNCTION(key)
-{
- pval **array;
- char *string_key;
- uint string_length;
- ulong num_key;
- HashTable *target_hash;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &array) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- target_hash = HASH_OF(*array);
- if (!target_hash) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Passed variable is not an array or object");
- RETURN_FALSE;
- }
- switch (zend_hash_get_current_key_ex(target_hash, &string_key, &string_length, &num_key, 0, NULL)) {
- case HASH_KEY_IS_STRING:
- RETVAL_STRINGL(string_key, string_length - 1, 1);
- break;
- case HASH_KEY_IS_LONG:
- RETVAL_LONG(num_key);
- break;
- case HASH_KEY_NON_EXISTANT:
- return;
- }
-}
-/* }}} */
-
-/* {{{ proto mixed min(mixed arg1 [, mixed arg2 [, mixed ...]])
- Return the lowest value in an array or a series of arguments */
-PHP_FUNCTION(min)
-{
- int argc=ZEND_NUM_ARGS();
- pval **result;
-
- if (argc<=0) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Atleast one value should be passed");
- RETURN_NULL();
- }
- set_compare_func(SORT_REGULAR TSRMLS_CC);
- if (argc == 1) {
- pval **arr;
-
- if (zend_get_parameters_ex(1, &arr) == FAILURE || Z_TYPE_PP(arr) != IS_ARRAY) {
- WRONG_PARAM_COUNT;
- }
- if (zend_hash_minmax(Z_ARRVAL_PP(arr), array_data_compare, 0, (void **) &result TSRMLS_CC) == SUCCESS) {
- *return_value = **result;
- zval_copy_ctor(return_value);
- } else {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Array must contain atleast one element");
- RETURN_FALSE;
- }
- } else {
- pval ***args = (pval ***) safe_emalloc(sizeof(pval **), ZEND_NUM_ARGS(), 0);
- pval **min, result;
- int i;
-
- if (zend_get_parameters_array_ex(ZEND_NUM_ARGS(), args)==FAILURE) {
- efree(args);
- WRONG_PARAM_COUNT;
- }
-
- min = args[0];
-
- for (i=1; i<ZEND_NUM_ARGS(); i++) {
- is_smaller_function(&result, *args[i], *min TSRMLS_CC);
- if (Z_LVAL(result) == 1) {
- min = args[i];
- }
- }
-
- *return_value = **min;
- zval_copy_ctor(return_value);
-
- efree(args);
- }
-}
-/* }}} */
-
-/* {{{ proto mixed max(mixed arg1 [, mixed arg2 [, mixed ...]])
- Return the highest value in an array or a series of arguments */
-PHP_FUNCTION(max)
-{
- int argc=ZEND_NUM_ARGS();
- pval **result;
-
- if (argc<=0) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Atleast one value should be passed");
- RETURN_NULL();
- }
- set_compare_func(SORT_REGULAR TSRMLS_CC);
- if (argc == 1) {
- pval **arr;
-
- if (zend_get_parameters_ex(1, &arr) == FAILURE || Z_TYPE_PP(arr) != IS_ARRAY) {
- WRONG_PARAM_COUNT;
- }
- if (zend_hash_minmax(Z_ARRVAL_PP(arr), array_data_compare, 1, (void **) &result TSRMLS_CC) == SUCCESS) {
- *return_value = **result;
- zval_copy_ctor(return_value);
- } else {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Array must contain atleast one element");
- RETURN_FALSE;
- }
- } else {
- pval ***args = (pval ***) safe_emalloc(sizeof(pval **), ZEND_NUM_ARGS(), 0);
- pval **max, result;
- int i;
-
- if (zend_get_parameters_array_ex(ZEND_NUM_ARGS(), args) == FAILURE) {
- efree(args);
- WRONG_PARAM_COUNT;
- }
-
- max = args[0];
-
- for (i=1; i<ZEND_NUM_ARGS(); i++) {
- is_smaller_or_equal_function(&result, *args[i], *max TSRMLS_CC);
- if (Z_LVAL(result) == 0) {
- max = args[i];
- }
- }
-
- *return_value = **max;
- zval_copy_ctor(return_value);
-
- efree(args);
- }
-}
-/* }}} */
-
-static int php_array_walk(HashTable *target_hash, zval **userdata, int recursive TSRMLS_DC)
-{
- zval **args[3], /* Arguments to userland function */
- *retval_ptr, /* Return value - unused */
- *key=NULL; /* Entry key */
- char *string_key;
- uint string_key_len;
- ulong num_key;
- HashPosition pos;
-
- /* Set up known arguments */
- args[1] = &key;
- args[2] = userdata;
-
- zend_hash_internal_pointer_reset_ex(target_hash, &pos);
-
- /* Iterate through hash */
- while (zend_hash_get_current_data_ex(target_hash, (void **)&args[0], &pos) == SUCCESS) {
- if (recursive && Z_TYPE_PP(args[0]) == IS_ARRAY) {
- HashTable *thash;
-
- thash = HASH_OF(*(args[0]));
- if (thash == target_hash) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "recursion detected");
- return 0;
- }
- php_array_walk(thash, userdata, recursive TSRMLS_CC);
- } else {
- zend_fcall_info fci;
-
- /* Allocate space for key */
- MAKE_STD_ZVAL(key);
-
- /* Set up the key */
- if (zend_hash_get_current_key_ex(target_hash, &string_key, &string_key_len, &num_key, 0, &pos) == HASH_KEY_IS_LONG) {
- Z_TYPE_P(key) = IS_LONG;
- Z_LVAL_P(key) = num_key;
- } else {
- ZVAL_STRINGL(key, string_key, string_key_len-1, 1);
- }
-
- fci.size = sizeof(fci);
- fci.function_table = EG(function_table);
- fci.function_name = *BG(array_walk_func_name);
- fci.symbol_table = NULL;
- fci.object_pp = NULL;
- fci.retval_ptr_ptr = &retval_ptr;
- fci.param_count = userdata ? 3 : 2;
- fci.params = args;
- fci.no_separation = 0;
-
- /* Call the userland function */
- if (zend_call_function(&fci, &BG(array_walk_fci_cache) TSRMLS_CC) == SUCCESS) {
- zval_ptr_dtor(&retval_ptr);
- } else {
- char *func_name;
-
- if (zend_is_callable(*BG(array_walk_func_name), 0, &func_name)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to call %s()", func_name);
- } else {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to call %s() - function does not exist", func_name);
- }
-
- efree(func_name);
- break;
- }
- }
-
- if (key) {
- zval_ptr_dtor(&key);
- key = NULL;
- }
- zend_hash_move_forward_ex(target_hash, &pos);
- }
-
- return 0;
-}
-
-/* {{{ proto bool array_walk(array input, string funcname [, mixed userdata])
- Apply a user function to every member of an array */
-PHP_FUNCTION(array_walk)
-{
- int argc;
- zval **array,
- **userdata = NULL,
- **old_walk_func_name;
- HashTable *target_hash;
-
- argc = ZEND_NUM_ARGS();
- BG(array_walk_fci_cache) = empty_fcall_info_cache;
- old_walk_func_name = BG(array_walk_func_name);
- if (argc < 2 || argc > 3 ||
- zend_get_parameters_ex(argc, &array, &BG(array_walk_func_name), &userdata) == FAILURE) {
- BG(array_walk_func_name) = old_walk_func_name;
- 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");
- BG(array_walk_func_name) = old_walk_func_name;
- RETURN_FALSE;
- }
- if (Z_TYPE_PP(BG(array_walk_func_name)) != IS_ARRAY &&
- Z_TYPE_PP(BG(array_walk_func_name)) != IS_STRING) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Wrong syntax for function name");
- BG(array_walk_func_name) = old_walk_func_name;
- RETURN_FALSE;
- }
- php_array_walk(target_hash, userdata, 0 TSRMLS_CC);
- BG(array_walk_func_name) = old_walk_func_name;
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto bool array_walk_recursive(array input, string funcname [, mixed userdata])
- Apply a user function recursively to every member of an array */
-PHP_FUNCTION(array_walk_recursive)
-{
- int argc;
- zval **array,
- **userdata = NULL,
- **old_walk_func_name;
- HashTable *target_hash;
-
- argc = ZEND_NUM_ARGS();
- old_walk_func_name = BG(array_walk_func_name);
- if (argc < 2 || argc > 3 ||
- zend_get_parameters_ex(argc, &array, &BG(array_walk_func_name), &userdata) == FAILURE) {
- BG(array_walk_func_name) = old_walk_func_name;
- 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");
- BG(array_walk_func_name) = old_walk_func_name;
- RETURN_FALSE;
- }
- if (Z_TYPE_PP(BG(array_walk_func_name)) != IS_ARRAY && Z_TYPE_PP(BG(array_walk_func_name)) != IS_STRING) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Wrong syntax for function name");
- BG(array_walk_func_name) = old_walk_func_name;
- RETURN_FALSE;
- }
- php_array_walk(target_hash, userdata, 1 TSRMLS_CC);
- BG(array_walk_func_name) = old_walk_func_name;
- RETURN_TRUE;
-}
-/* }}} */
-
-
-/* void php_search_array(INTERNAL_FUNCTION_PARAMETERS, int behavior)
- * 0 = return boolean
- * 1 = return key
- */
-static void php_search_array(INTERNAL_FUNCTION_PARAMETERS, int behavior)
-{
- zval **value, /* value to check for */
- **array, /* array to check in */
- **strict, /* strict comparison or not */
- **entry, /* pointer to array entry */
- res; /* comparison result */
- HashTable *target_hash; /* array hashtable */
- HashPosition pos; /* hash iterator */
- ulong num_key;
- uint str_key_len;
- char *string_key;
- int (*is_equal_func)(zval *, zval *, zval * TSRMLS_DC) = is_equal_function;
-
- if (ZEND_NUM_ARGS() < 2 || ZEND_NUM_ARGS() > 3 ||
- zend_get_parameters_ex(ZEND_NUM_ARGS(), &value, &array, &strict) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
-
- if (Z_TYPE_PP(array) != IS_ARRAY) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Wrong datatype for second argument");
- RETURN_FALSE;
- }
-
- if (ZEND_NUM_ARGS() == 3) {
- convert_to_boolean_ex(strict);
- if (Z_LVAL_PP(strict)) {
- is_equal_func = is_identical_function;
- }
- }
-
- target_hash = HASH_OF(*array);
- zend_hash_internal_pointer_reset_ex(target_hash, &pos);
- while (zend_hash_get_current_data_ex(target_hash, (void **)&entry, &pos) == SUCCESS) {
- is_equal_func(&res, *value, *entry TSRMLS_CC);
- if (Z_LVAL(res)) {
- if (behavior == 0) {
- RETURN_TRUE;
- } else {
- /* Return current key */
- switch (zend_hash_get_current_key_ex(target_hash, &string_key, &str_key_len, &num_key, 0, &pos)) {
- case HASH_KEY_IS_STRING:
- RETURN_STRINGL(string_key, str_key_len-1, 1);
- break;
- case HASH_KEY_IS_LONG:
- RETURN_LONG(num_key);
- break;
- }
- }
- }
-
- zend_hash_move_forward_ex(target_hash, &pos);
- }
-
- RETURN_FALSE;
-}
-
-
-/* {{{ proto bool in_array(mixed needle, array haystack [, bool strict])
- Checks if the given value exists in the array */
-PHP_FUNCTION(in_array)
-{
- php_search_array(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0);
-}
-/* }}} */
-
-/* {{{ proto mixed array_search(mixed needle, array haystack [, bool strict])
- Searches the array for a given value and returns the corresponding key if successful */
-PHP_FUNCTION(array_search)
-{
- php_search_array(INTERNAL_FUNCTION_PARAM_PASSTHRU, 1);
-}
-/* }}} */
-
-
-static int php_valid_var_name(char *var_name)
-{
- int len, i;
-
- if (!var_name)
- return 0;
-
- len = strlen(var_name);
-
- if (!isalpha((int)((unsigned char *)var_name)[0]) && var_name[0] != '_')
- return 0;
-
- if (len > 1) {
- for (i=1; i<len; i++) {
- if (!isalnum((int)((unsigned char *)var_name)[i]) && var_name[i] != '_') {
- return 0;
- }
- }
- }
-
- return 1;
-}
-
-
-/* {{{ proto int extract(array var_array [, int extract_type [, string prefix]])
- Imports variables into symbol table from an array */
-PHP_FUNCTION(extract)
-{
- zval **var_array, **z_extract_type, **prefix;
- zval **entry, *data;
- char *var_name;
- smart_str final_name = {0};
- ulong num_key;
- uint var_name_len;
- int var_exists, extract_type, key_type, count = 0;
- int extract_refs = 0;
- HashPosition pos;
-
- switch (ZEND_NUM_ARGS()) {
- case 1:
- if (zend_get_parameters_ex(1, &var_array) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- extract_type = EXTR_OVERWRITE;
- break;
-
- case 2:
- if (zend_get_parameters_ex(2, &var_array, &z_extract_type) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long_ex(z_extract_type);
- extract_type = Z_LVAL_PP(z_extract_type);
- extract_refs = (extract_type & EXTR_REFS);
- extract_type &= 0xff;
- if (extract_type > EXTR_SKIP && extract_type <= EXTR_PREFIX_IF_EXISTS) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Prefix expected to be specified");
- return;
- }
- break;
-
- case 3:
- if (zend_get_parameters_ex(3, &var_array, &z_extract_type, &prefix) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long_ex(z_extract_type);
- extract_type = Z_LVAL_PP(z_extract_type);
- extract_refs = (extract_type & EXTR_REFS);
- extract_type &= 0xff;
- convert_to_string_ex(prefix);
- break;
-
- default:
- WRONG_PARAM_COUNT;
- break;
- }
-
- if (extract_type < EXTR_OVERWRITE || extract_type > EXTR_IF_EXISTS) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unknown extract type");
- return;
- }
-
- if (Z_TYPE_PP(var_array) != IS_ARRAY) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "First argument should be an array");
- return;
- }
-
- 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);
- var_exists = 0;
-
- if (key_type == HASH_KEY_IS_STRING) {
- var_name_len--;
- var_exists = zend_hash_exists(EG(active_symbol_table), var_name, var_name_len + 1);
- } else if (extract_type == EXTR_PREFIX_ALL || extract_type == EXTR_PREFIX_INVALID) {
- smart_str_appendl(&final_name, Z_STRVAL_PP(prefix), Z_STRLEN_PP(prefix));
- smart_str_appendc(&final_name, '_');
- smart_str_append_long(&final_name, num_key);
- } else {
- zend_hash_move_forward_ex(Z_ARRVAL_PP(var_array), &pos);
- continue;
- }
-
- switch (extract_type) {
- case EXTR_IF_EXISTS:
- if (!var_exists) break;
- /* break omitted intentionally */
-
- case EXTR_OVERWRITE:
- smart_str_appendl(&final_name, var_name, var_name_len);
- break;
-
- case EXTR_PREFIX_IF_EXISTS:
- if (var_exists) {
- smart_str_appendl(&final_name, Z_STRVAL_PP(prefix), Z_STRLEN_PP(prefix));
- smart_str_appendc(&final_name, '_');
- smart_str_appendl(&final_name, var_name, var_name_len);
- }
- break;
-
- case EXTR_PREFIX_SAME:
- if (!var_exists)
- smart_str_appendl(&final_name, var_name, var_name_len);
- /* break omitted intentionally */
-
- case EXTR_PREFIX_ALL:
- if (final_name.len == 0 && var_name_len != 0) {
- smart_str_appendl(&final_name, Z_STRVAL_PP(prefix), Z_STRLEN_PP(prefix));
- smart_str_appendc(&final_name, '_');
- smart_str_appendl(&final_name, var_name, var_name_len);
- }
- break;
-
- case EXTR_PREFIX_INVALID:
- if (final_name.len == 0) {
- if (!php_valid_var_name(var_name)) {
- smart_str_appendl(&final_name, Z_STRVAL_PP(prefix), Z_STRLEN_PP(prefix));
- smart_str_appendc(&final_name, '_');
- smart_str_appendl(&final_name, var_name, var_name_len);
- } else
- smart_str_appendl(&final_name, var_name, var_name_len);
- }
- break;
-
- default:
- if (!var_exists)
- smart_str_appendl(&final_name, var_name, var_name_len);
- break;
- }
-
- if (final_name.len) {
- smart_str_0(&final_name);
- if (php_valid_var_name(final_name.c)) {
- if (extract_refs) {
- zval **orig_var;
-
- if (zend_hash_find(EG(active_symbol_table), final_name.c, final_name.len+1, (void **) &orig_var) == SUCCESS) {
- zval_ptr_dtor(orig_var);
-
- SEPARATE_ZVAL_TO_MAKE_IS_REF(entry);
- zval_add_ref(entry);
-
- *orig_var = *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 {
- MAKE_STD_ZVAL(data);
- *data = **entry;
- zval_copy_ctor(data);
-
- ZEND_SET_SYMBOL(EG(active_symbol_table), final_name.c, data);
- }
-
- count++;
- }
- final_name.len = 0;
- }
-
- zend_hash_move_forward_ex(Z_ARRVAL_PP(var_array), &pos);
- }
-
- smart_str_free(&final_name);
-
- RETURN_LONG(count);
-}
-/* }}} */
-
-
-static void php_compact_var(HashTable *eg_active_symbol_table, zval *return_value, zval *entry)
-{
- zval **value_ptr, *value, *data;
-
- if (Z_TYPE_P(entry) == IS_STRING) {
- if (zend_hash_find(eg_active_symbol_table, Z_STRVAL_P(entry),
- Z_STRLEN_P(entry)+1, (void **)&value_ptr) != FAILURE) {
- value = *value_ptr;
- ALLOC_ZVAL(data);
- *data = *value;
- zval_copy_ctor(data);
- INIT_PZVAL(data);
-
- zend_hash_update(Z_ARRVAL_P(return_value), Z_STRVAL_P(entry),
- Z_STRLEN_P(entry)+1, &data, sizeof(zval *), NULL);
- }
- }
- else if (Z_TYPE_P(entry) == IS_ARRAY) {
- HashPosition pos;
-
- zend_hash_internal_pointer_reset_ex(Z_ARRVAL_P(entry), &pos);
- while (zend_hash_get_current_data_ex(Z_ARRVAL_P(entry), (void**)&value_ptr, &pos) == SUCCESS) {
- value = *value_ptr;
-
- php_compact_var(eg_active_symbol_table, return_value, value);
- zend_hash_move_forward_ex(Z_ARRVAL_P(entry), &pos);
- }
- }
-}
-
-
-/* {{{ proto array compact(mixed var_names [, mixed ...])
- Creates a hash containing variables and their values */
-PHP_FUNCTION(compact)
-{
- zval ***args; /* function arguments array */
- int i;
-
- args = (zval ***)safe_emalloc(ZEND_NUM_ARGS(), sizeof(zval **), 0);
-
- if (zend_get_parameters_array_ex(ZEND_NUM_ARGS(), args) == FAILURE) {
- efree(args);
- WRONG_PARAM_COUNT;
- }
-
- array_init(return_value);
-
- for (i=0; i<ZEND_NUM_ARGS(); i++) {
- php_compact_var(EG(active_symbol_table), return_value, *args[i]);
- }
-
- efree(args);
-}
-/* }}} */
-
-/* {{{ proto array array_fill(int start_key, int num, mixed val)
- Create an array containing num elements starting with index start_key each initialized to val */
-PHP_FUNCTION(array_fill)
-{
- zval **start_key, **num, **val, *newval;
- long i;
-
- if (ZEND_NUM_ARGS() != 3 || zend_get_parameters_ex(3, &start_key, &num, &val) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- /* allocate an array for return */
- array_init(return_value);
-
- switch (Z_TYPE_PP(start_key)) {
- case IS_STRING:
- case IS_LONG:
- case IS_DOUBLE:
- if (PZVAL_IS_REF(*val)) {
- SEPARATE_ZVAL(val);
- }
- convert_to_long_ex(start_key);
- zval_add_ref(val);
- zend_hash_index_update(Z_ARRVAL_P(return_value), Z_LVAL_PP(start_key), val, sizeof(val), NULL);
- break;
- default:
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Wrong data type for start key");
- RETURN_FALSE;
- break;
- }
-
- convert_to_long_ex(num);
- i = Z_LVAL_PP(num) - 1;
- if (i < 0) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Number of elements must be positive");
- RETURN_FALSE;
- }
- newval = *val;
- while (i--) {
- zval_add_ref(&newval);
- zend_hash_next_index_insert(Z_ARRVAL_P(return_value), &newval, sizeof(zval *), NULL);
- }
-}
-/* }}} */
-
-/* {{{ proto array range(mixed low, mixed high[, int step])
- Create an array containing the range of integers or characters from low to high (inclusive) */
-PHP_FUNCTION(range)
-{
- zval *zlow, *zhigh, *zstep = NULL;
- int err = 0, is_step_double = 0;
- double step = 1.0;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z/z/|z/", &zlow, &zhigh, &zstep) == FAILURE) {
- RETURN_FALSE;
- }
-
- if (zstep) {
- if (Z_TYPE_P(zstep) == IS_DOUBLE || (Z_TYPE_P(zstep) == IS_STRING && is_numeric_string(Z_STRVAL_P(zstep), Z_STRLEN_P(zstep), NULL, NULL, 0) == IS_DOUBLE)) {
- is_step_double = 1;
- }
-
- convert_to_double_ex(&zstep);
- step = Z_DVAL_P(zstep);
-
- /* We only want positive step values. */
- if (step < 0.0) {
- step *= -1;
- }
- }
-
- /* Initialize the return_value as an array. */
- array_init(return_value);
-
- /* If the range is given as strings, generate an array of characters. */
- if (Z_TYPE_P(zlow) == IS_STRING && Z_TYPE_P(zhigh) == IS_STRING) {
- int type1, type2;
- unsigned char *low, *high;
- long lstep = (long) step;
-
- type1 = is_numeric_string(Z_STRVAL_P(zlow), Z_STRLEN_P(zlow), NULL, NULL, 0);
- type2 = is_numeric_string(Z_STRVAL_P(zhigh), Z_STRLEN_P(zhigh), NULL, NULL, 0);
-
- if (type1 == IS_DOUBLE || type2 == IS_DOUBLE || is_step_double) {
- goto double_str;
- } else if (type1 == IS_LONG || type2 == IS_LONG) {
- goto long_str;
- }
-
- convert_to_string(zlow);
- convert_to_string(zhigh);
- low = (unsigned char *)Z_STRVAL_P(zlow);
- high = (unsigned char *)Z_STRVAL_P(zhigh);
-
- if (*low > *high) { /* Negative Steps */
- if (lstep <= 0) {
- err = 1;
- goto err;
- }
- for (; *low >= *high; (*low) -= (unsigned int)lstep) {
- add_next_index_stringl(return_value, low, 1, 1);
- if (((signed int)*low - lstep) < 0) {
- break;
- }
- }
- } else if (*high > *low) { /* Positive Steps */
- if (lstep <= 0) {
- err = 1;
- goto err;
- }
- for (; *low <= *high; (*low) += (unsigned int)lstep) {
- add_next_index_stringl(return_value, low, 1, 1);
- if (((signed int)*low + lstep) > 255) {
- break;
- }
- }
- } else {
- add_next_index_stringl(return_value, low, 1, 1);
- }
-
- } else if (Z_TYPE_P(zlow) == IS_DOUBLE || Z_TYPE_P(zhigh) == IS_DOUBLE || is_step_double) {
- double low, high;
-double_str:
- convert_to_double(zlow);
- convert_to_double(zhigh);
- low = Z_DVAL_P(zlow);
- high = Z_DVAL_P(zhigh);
-
- if (low > high) { /* Negative steps */
- if (low - high < step || step <= 0) {
- err = 1;
- goto err;
- }
- for (; low >= (high - DOUBLE_DRIFT_FIX); low -= step) {
- add_next_index_double(return_value, low);
- }
- } else if (high > low) { /* Positive steps */
- if (high - low < step || step <= 0) {
- err = 1;
- goto err;
- }
- for (; low <= (high + DOUBLE_DRIFT_FIX); low += step) {
- add_next_index_double(return_value, low);
- }
- } else {
- add_next_index_double(return_value, low);
- }
- } else {
- int low, high;
- long lstep;
-long_str:
- convert_to_long(zlow);
- convert_to_long(zhigh);
- low = Z_LVAL_P(zlow);
- high = Z_LVAL_P(zhigh);
- lstep = (long) step;
-
- if (low > high) { /* Negative steps */
- if (low - high < lstep || lstep <= 0) {
- err = 1;
- goto err;
- }
- for (; low >= high; low -= lstep) {
- add_next_index_long(return_value, low);
- }
- } else if (high > low) { /* Positive steps */
- if (high - low < lstep || lstep <= 0) {
- err = 1;
- goto err;
- }
- for (; low <= high; low += lstep) {
- add_next_index_long(return_value, low);
- }
- } else {
- add_next_index_long(return_value, low);
- }
- }
-err:
- if (err) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "step exceeds the specified range");
- zval_dtor(return_value);
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-
-static void array_data_shuffle(zval *array TSRMLS_DC)
-{
- Bucket **elems, *temp;
- HashTable *hash;
- int j, n_elems, rnd_idx, n_left;
-
- n_elems = zend_hash_num_elements(Z_ARRVAL_P(array));
-
- if (n_elems < 1) {
- return;
- }
-
- elems = (Bucket **)safe_emalloc(n_elems, sizeof(Bucket *), 0);
- hash = Z_ARRVAL_P(array);
- n_left = n_elems;
-
- for (j = 0, temp = hash->pListHead; temp; temp = temp->pListNext)
- elems[j++] = temp;
- while (--n_left) {
- rnd_idx = php_rand(TSRMLS_C);
- RAND_RANGE(rnd_idx, 0, n_left, PHP_RAND_MAX);
- if (rnd_idx != n_left) {
- temp = elems[n_left];
- elems[n_left] = elems[rnd_idx];
- elems[rnd_idx] = temp;
- }
- }
-
- HANDLE_BLOCK_INTERRUPTIONS();
- hash->pListHead = elems[0];
- hash->pListTail = NULL;
- hash->pInternalPointer = hash->pListHead;
-
- for (j = 0; j < n_elems; j++) {
- if (hash->pListTail) {
- hash->pListTail->pListNext = elems[j];
- }
- elems[j]->pListLast = hash->pListTail;
- elems[j]->pListNext = NULL;
- hash->pListTail = elems[j];
- }
- temp = hash->pListHead;
- j = 0;
- while (temp != NULL) {
- temp->nKeyLength = 0;
- temp->h = j++;
- temp = temp->pListNext;
- }
- hash->nNextFreeElement = n_elems;
- zend_hash_rehash(hash);
- HANDLE_UNBLOCK_INTERRUPTIONS();
-
- efree(elems);
-}
-
-/* {{{ proto bool shuffle(array array_arg)
- Randomly shuffle the contents of an array */
-PHP_FUNCTION(shuffle)
-{
- zval *array;
-
- if (zend_parse_parameters(1 TSRMLS_CC, "a", &array) == FAILURE) {
- RETURN_FALSE;
- }
-
- array_data_shuffle(array TSRMLS_CC);
-
- RETURN_TRUE;
-}
-/* }}} */
-
-
-/* HashTable* php_splice(HashTable *in_hash, int offset, int length,
- zval ***list, int list_count, HashTable **removed) */
-HashTable* php_splice(HashTable *in_hash, int offset, int length,
- zval ***list, int list_count, HashTable **removed)
-{
- HashTable *out_hash = NULL; /* Output hashtable */
- int num_in, /* Number of entries in the input hashtable */
- pos, /* Current position in the hashtable */
- i; /* Loop counter */
- Bucket *p; /* Pointer to hash bucket */
- zval *entry; /* Hash entry */
-
- /* If input hash doesn't exist, we have nothing to do */
- if (!in_hash)
- return NULL;
-
- /* Get number of entries in the input hash */
- num_in = zend_hash_num_elements(in_hash);
-
- /* Clamp the offset.. */
- if (offset > num_in)
- offset = num_in;
- else if (offset < 0 && (offset=num_in+offset) < 0)
- offset = 0;
-
- /* ..and the length */
- if (length < 0) {
- length = num_in-offset+length;
- } else if (((unsigned) offset + (unsigned) length) > num_in) {
- length = num_in-offset;
- }
-
- /* Create and initialize output hash */
- ALLOC_HASHTABLE(out_hash);
- zend_hash_init(out_hash, 0, NULL, ZVAL_PTR_DTOR, 0);
-
- /* Start at the beginning of the input hash and copy entries to output hash until offset is reached */
- for (pos=0, p=in_hash->pListHead; pos<offset && p ; pos++, p=p->pListNext) {
- /* Get entry and increase reference count */
- entry = *((zval **)p->pData);
- entry->refcount++;
-
- /* Update output hash depending on key type */
- if (p->nKeyLength)
- zend_hash_update(out_hash, p->arKey, p->nKeyLength, &entry, sizeof(zval *), NULL);
- else
- zend_hash_next_index_insert(out_hash, &entry, sizeof(zval *), NULL);
- }
-
- /* If hash for removed entries exists, go until offset+length and copy the entries to it */
- if (removed != NULL) {
- for ( ; pos<offset+length && p; pos++, p=p->pListNext) {
- entry = *((zval **)p->pData);
- entry->refcount++;
- if (p->nKeyLength)
- zend_hash_update(*removed, p->arKey, p->nKeyLength, &entry, sizeof(zval *), NULL);
- else
- zend_hash_next_index_insert(*removed, &entry, sizeof(zval *), NULL);
- }
- } else /* otherwise just skip those entries */
- for ( ; pos<offset+length && p; pos++, p=p->pListNext);
-
- /* If there are entries to insert.. */
- if (list != NULL) {
- /* ..for each one, create a new zval, copy entry into it and copy it into the output hash */
- for (i=0; i<list_count; i++) {
- entry = *list[i];
- if (entry->refcount>=1000) {
- zval *tmp = (zval *) emalloc(sizeof(zval));
-
- *tmp = *entry;
- zval_copy_ctor(tmp);
- tmp->refcount = 1;
- tmp->is_ref = 0;
- entry = tmp;
- } else {
- entry->refcount++;
- }
- zend_hash_next_index_insert(out_hash, &entry, sizeof(zval *), NULL);
- }
- }
-
- /* Copy the remaining input hash entries to the output hash */
- for ( ; p ; p=p->pListNext) {
- entry = *((zval **)p->pData);
- entry->refcount++;
- if (p->nKeyLength)
- zend_hash_update(out_hash, p->arKey, p->nKeyLength, &entry, sizeof(zval *), NULL);
- else
- zend_hash_next_index_insert(out_hash, &entry, sizeof(zval *), NULL);
- }
-
- zend_hash_internal_pointer_reset(out_hash);
- return out_hash;
-}
-/* }}} */
-
-
-/* {{{ proto int array_push(array stack, mixed var [, mixed ...])
- Pushes elements onto the end of the array */
-PHP_FUNCTION(array_push)
-{
- zval ***args, /* Function arguments array */
- *stack, /* Input array */
- *new_var; /* Variable to be pushed */
- int i, /* Loop counter */
- argc; /* Number of function arguments */
-
- /* Get the argument count and check it */
- argc = ZEND_NUM_ARGS();
- if (argc < 2) {
- WRONG_PARAM_COUNT;
- }
-
- /* Allocate arguments array and get the arguments, checking for errors. */
- args = (zval ***)safe_emalloc(argc, sizeof(zval **), 0);
- if (zend_get_parameters_array_ex(argc, args) == FAILURE) {
- efree(args);
- WRONG_PARAM_COUNT;
- }
-
- /* Get first argument and check that it's an array */
- stack = *args[0];
- if (Z_TYPE_P(stack) != IS_ARRAY) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "First argument should be an array");
- efree(args);
- RETURN_FALSE;
- }
-
- /* For each subsequent argument, make it a reference, increase refcount, and add it to the end of the array */
- for (i=1; i<argc; i++) {
- new_var = *args[i];
- new_var->refcount++;
-
- zend_hash_next_index_insert(Z_ARRVAL_P(stack), &new_var, sizeof(zval *), NULL);
- }
-
- /* Clean up and return the number of values in the stack */
- efree(args);
- RETVAL_LONG(zend_hash_num_elements(Z_ARRVAL_P(stack)));
-}
-/* }}} */
-
-
-/* {{{ void _phpi_pop(INTERNAL_FUNCTION_PARAMETERS, int which_end) */
-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;
- ulong index;
-
- /* Get the arguments and do error-checking */
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &stack) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- if (Z_TYPE_PP(stack) != IS_ARRAY) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "The argument should be an array");
- return;
- }
-
- if (zend_hash_num_elements(Z_ARRVAL_PP(stack)) == 0) {
- return;
- }
-
- /* Get the first or last value and copy it into the return value */
- if (off_the_end)
- zend_hash_internal_pointer_end(Z_ARRVAL_PP(stack));
- else
- zend_hash_internal_pointer_reset(Z_ARRVAL_PP(stack));
- zend_hash_get_current_data(Z_ARRVAL_PP(stack), (void **)&val);
- *return_value = **val;
- zval_copy_ctor(return_value);
- INIT_PZVAL(return_value);
-
- /* Delete the first or last value */
- zend_hash_get_current_key_ex(Z_ARRVAL_PP(stack), &key, &key_len, &index, 0, NULL);
- zend_hash_del_key_or_index(Z_ARRVAL_PP(stack), key, key_len, index, (key) ? HASH_DEL_KEY : HASH_DEL_INDEX);
-
- /* If we did a shift... re-index like it did before */
- if (!off_the_end) {
- unsigned int k = 0;
- int should_rehash = 0;
- Bucket *p = Z_ARRVAL_PP(stack)->pListHead;
- while (p != NULL) {
- if (p->nKeyLength == 0) {
- if (p->h != k) {
- p->h = k++;
- should_rehash = 1;
- } else {
- k++;
- }
- }
- p = p->pListNext;
- }
- Z_ARRVAL_PP(stack)->nNextFreeElement = k;
- if (should_rehash) {
- zend_hash_rehash(Z_ARRVAL_PP(stack));
- }
- } else if (!key_len) {
- Z_ARRVAL_PP(stack)->nNextFreeElement = Z_ARRVAL_PP(stack)->nNextFreeElement - 1;
- }
-
- zend_hash_internal_pointer_reset(Z_ARRVAL_PP(stack));
-}
-/* }}} */
-
-/* {{{ proto mixed array_pop(array stack)
- Pops an element off the end of the array */
-PHP_FUNCTION(array_pop)
-{
- _phpi_pop(INTERNAL_FUNCTION_PARAM_PASSTHRU, 1);
-}
-/* }}} */
-
-
-/* {{{ proto mixed array_shift(array stack)
- Pops an element off the beginning of the array */
-PHP_FUNCTION(array_shift)
-{
- _phpi_pop(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0);
-}
-/* }}} */
-
-
-/* {{{ proto int array_unshift(array stack, mixed var [, mixed ...])
- Pushes elements onto the beginning of the array */
-PHP_FUNCTION(array_unshift)
-{
- zval ***args, /* Function arguments array */
- *stack; /* Input stack */
- HashTable *new_hash; /* New hashtable for the stack */
- int argc; /* Number of function arguments */
-
-
- /* Get the argument count and check it */
- argc = ZEND_NUM_ARGS();
- if (argc < 2) {
- WRONG_PARAM_COUNT;
- }
-
- /* Allocate arguments array and get the arguments, checking for errors. */
- args = (zval ***)safe_emalloc(argc, sizeof(zval **), 0);
- if (zend_get_parameters_array_ex(argc, args) == FAILURE) {
- efree(args);
- WRONG_PARAM_COUNT;
- }
-
- /* Get first argument and check that it's an array */
- stack = *args[0];
- if (Z_TYPE_P(stack) != IS_ARRAY) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "The first argument should be an array");
- efree(args);
- RETURN_FALSE;
- }
-
- /* Use splice to insert the elements at the beginning. Destroy old
- hashtable and replace it with new one */
- new_hash = php_splice(Z_ARRVAL_P(stack), 0, 0, &args[1], argc-1, NULL);
- zend_hash_destroy(Z_ARRVAL_P(stack));
- FREE_HASHTABLE(Z_ARRVAL_P(stack));
- Z_ARRVAL_P(stack) = new_hash;
-
- /* Clean up and return the number of elements in the stack */
- efree(args);
- RETVAL_LONG(zend_hash_num_elements(Z_ARRVAL_P(stack)));
-}
-/* }}} */
-
-
-/* {{{ proto array array_splice(array input, int offset [, int length [, array replacement]])
- Removes the elements designated by offset and length and replace them with supplied array */
-PHP_FUNCTION(array_splice)
-{
- zval ***args, /* Function arguments array */
- *array, /* Input array */
- ***repl = NULL; /* Replacement elements */
- HashTable *new_hash = NULL; /* Output array's hash */
- Bucket *p; /* Bucket used for traversing hash */
- int argc, /* Number of function arguments */
- i,
- offset,
- length,
- repl_num = 0; /* Number of replacement elements */
-
- /* Get the argument count and check it */
- argc = ZEND_NUM_ARGS();
- if (argc < 2 || argc > 4) {
- WRONG_PARAM_COUNT;
- }
-
- /* Allocate arguments array and get the arguments, checking for errors. */
- args = (zval ***)safe_emalloc(argc, sizeof(zval **), 0);
- if (zend_get_parameters_array_ex(argc, args) == FAILURE) {
- efree(args);
- WRONG_PARAM_COUNT;
- }
-
- /* Get first argument and check that it's an array */
- array = *args[0];
- if (Z_TYPE_P(array) != IS_ARRAY) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "The first argument should be an array");
- efree(args);
- return;
- }
-
- /* Get the next two arguments. If length is omitted, it's assumed to be until the end of the array */
- convert_to_long_ex(args[1]);
- offset = Z_LVAL_PP(args[1]);
- if (argc > 2) {
- convert_to_long_ex(args[2]);
- length = Z_LVAL_PP(args[2]);
- } else
- length = zend_hash_num_elements(Z_ARRVAL_P(array));
-
- if (argc == 4) {
- /* Make sure the last argument, if passed, is an array */
- convert_to_array_ex(args[3]);
-
- /* Create the array of replacement elements */
- repl_num = zend_hash_num_elements(Z_ARRVAL_PP(args[3]));
- repl = (zval ***)safe_emalloc(repl_num, sizeof(zval **), 0);
- for (p=Z_ARRVAL_PP(args[3])->pListHead, i=0; p; p=p->pListNext, i++) {
- repl[i] = ((zval **)p->pData);
- }
- }
-
- /* Initialize return value */
- array_init(return_value);
-
- /* Perform splice */
- new_hash = php_splice(Z_ARRVAL_P(array), offset, length,
- repl, repl_num,
- &Z_ARRVAL_P(return_value));
-
- /* Replace input array's hashtable with the new one */
- zend_hash_destroy(Z_ARRVAL_P(array));
- efree(Z_ARRVAL_P(array));
- Z_ARRVAL_P(array) = new_hash;
-
- /* Clean up */
- if (argc == 4)
- efree(repl);
- efree(args);
-}
-/* }}} */
-
-
-/* {{{ proto array array_slice(array input, int offset [, int length])
- Returns elements specified by offset and length */
-PHP_FUNCTION(array_slice)
-{
- zval **input, /* Input array */
- **offset, /* Offset to get elements from */
- **length, /* How many elements to get */
- **entry; /* An array entry */
- int offset_val, /* Value of the offset argument */
- length_val, /* Value of the length argument */
- num_in, /* Number of elements in the input array */
- pos, /* Current position in the array */
- argc; /* Number of function arguments */
-
- char *string_key;
- uint string_key_len;
- ulong num_key;
- HashPosition hpos;
-
- /* Get the arguments and do error-checking */
- argc = ZEND_NUM_ARGS();
- if (argc < 2 || argc > 3 || zend_get_parameters_ex(argc, &input, &offset, &length)) {
- WRONG_PARAM_COUNT;
- }
-
- if (Z_TYPE_PP(input) != IS_ARRAY) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "The first argument should be an array");
- return;
- }
-
- /* Make sure offset and length are integers and assume
- we want all entries from offset to the end if length
- is not passed */
- convert_to_long_ex(offset);
- offset_val = Z_LVAL_PP(offset);
- if (argc == 3) {
- convert_to_long_ex(length);
- length_val = Z_LVAL_PP(length);
- } else {
- length_val = zend_hash_num_elements(Z_ARRVAL_PP(input));
- }
-
- /* Initialize returned array */
- array_init(return_value);
-
- /* Get number of entries in the input hash */
- num_in = zend_hash_num_elements(Z_ARRVAL_PP(input));
-
- /* Clamp the offset.. */
- if (offset_val > num_in)
- return;
- else if (offset_val < 0 && (offset_val=num_in+offset_val) < 0)
- offset_val = 0;
-
- /* ..and the length */
- if (length_val < 0) {
- length_val = num_in-offset_val+length_val;
- } else if (((unsigned) offset_val + (unsigned) length_val) > num_in) {
- length_val = num_in-offset_val;
- }
-
- if (length_val == 0)
- return;
-
- /* Start at the beginning and go until we hit offset */
- pos = 0;
- zend_hash_internal_pointer_reset_ex(Z_ARRVAL_PP(input), &hpos);
- while (pos < offset_val && zend_hash_get_current_data_ex(Z_ARRVAL_PP(input), (void **)&entry, &hpos) == SUCCESS) {
- pos++;
- zend_hash_move_forward_ex(Z_ARRVAL_PP(input), &hpos);
- }
-
- /* Copy elements from input array to the one that's returned */
- while (pos < offset_val+length_val && zend_hash_get_current_data_ex(Z_ARRVAL_PP(input), (void **)&entry, &hpos) == SUCCESS) {
-
- (*entry)->refcount++;
-
- switch (zend_hash_get_current_key_ex(Z_ARRVAL_PP(input), &string_key, &string_key_len, &num_key, 0, &hpos)) {
- case HASH_KEY_IS_STRING:
- zend_hash_update(Z_ARRVAL_P(return_value), string_key, string_key_len,
- entry, sizeof(zval *), NULL);
- break;
-
- case HASH_KEY_IS_LONG:
- zend_hash_next_index_insert(Z_ARRVAL_P(return_value),
- entry, sizeof(zval *), NULL);
- break;
- }
- pos++;
- zend_hash_move_forward_ex(Z_ARRVAL_PP(input), &hpos);
- }
-}
-/* }}} */
-
-
-PHPAPI int php_array_merge(HashTable *dest, HashTable *src, int recursive TSRMLS_DC)
-{
- zval **src_entry, **dest_entry;
- char *string_key;
- uint string_key_len;
- ulong num_key;
- HashPosition pos;
-
- zend_hash_internal_pointer_reset_ex(src, &pos);
- while (zend_hash_get_current_data_ex(src, (void **)&src_entry, &pos) == SUCCESS) {
- switch (zend_hash_get_current_key_ex(src, &string_key, &string_key_len, &num_key, 0, &pos)) {
- case HASH_KEY_IS_STRING:
- if (recursive &&
- zend_hash_find(dest, string_key, string_key_len, (void **)&dest_entry) == SUCCESS) {
- if (*src_entry == *dest_entry && ((*dest_entry)->refcount % 2)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "recursion detected");
- return 0;
- }
- SEPARATE_ZVAL(dest_entry);
- SEPARATE_ZVAL(src_entry);
-
- convert_to_array_ex(dest_entry);
- convert_to_array_ex(src_entry);
- if (!php_array_merge(Z_ARRVAL_PP(dest_entry),
- Z_ARRVAL_PP(src_entry), recursive TSRMLS_CC))
- return 0;
- } else {
- (*src_entry)->refcount++;
-
- zend_hash_update(dest, string_key, strlen(string_key)+1,
- src_entry, sizeof(zval *), NULL);
- }
- break;
-
- case HASH_KEY_IS_LONG:
- (*src_entry)->refcount++;
- zend_hash_next_index_insert(dest, src_entry, sizeof(zval *), NULL);
- break;
- }
-
- zend_hash_move_forward_ex(src, &pos);
- }
-
- return 1;
-}
-
-static void php_array_merge_wrapper(INTERNAL_FUNCTION_PARAMETERS, int recursive)
-{
- zval ***args = NULL;
- int argc, i, params_ok = 1;
-
- /* Get the argument count and check it */
- argc = ZEND_NUM_ARGS();
- if (argc < 1) {
- WRONG_PARAM_COUNT;
- }
-
- /* Allocate arguments array and get the arguments, checking for errors. */
- args = (zval ***)safe_emalloc(argc, sizeof(zval **), 0);
- if (zend_get_parameters_array_ex(argc, args) == FAILURE) {
- efree(args);
- WRONG_PARAM_COUNT;
- }
-
- 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);
- params_ok = 0;
- }
- }
- if (params_ok == 0) {
- efree(args);
- return;
- }
-
- array_init(return_value);
-
- for (i=0; i<argc; i++) {
- SEPARATE_ZVAL(args[i]);
- convert_to_array_ex(args[i]);
- php_array_merge(Z_ARRVAL_P(return_value), Z_ARRVAL_PP(args[i]), recursive TSRMLS_CC);
- }
-
- efree(args);
-}
-
-
-/* {{{ proto array array_merge(array arr1, array arr2 [, array ...])
- Merges elements from passed arrays into one array */
-PHP_FUNCTION(array_merge)
-{
- php_array_merge_wrapper(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0);
-}
-/* }}} */
-
-
-/* {{{ proto array array_merge_recursive(array arr1, array arr2 [, array ...])
- Recursively merges elements from passed arrays into one array */
-PHP_FUNCTION(array_merge_recursive)
-{
- php_array_merge_wrapper(INTERNAL_FUNCTION_PARAM_PASSTHRU, 1);
-}
-/* }}} */
-
-
-/* {{{ proto array array_keys(array input [, mixed search_value[, bool strict]])
- Return just the keys from the input array, optionally only for the specified search_value */
-PHP_FUNCTION(array_keys)
-{
- zval **input, /* Input array */
- **search_value, /* Value to search for */
- **entry, /* An entry in the input array */
- res, /* Result of comparison */
- **strict, /* be strict */
- *new_val; /* New value */
- int add_key; /* Flag to indicate whether a key should be added */
- char *string_key; /* String key */
- uint string_key_len;
- ulong num_key; /* Numeric key */
- HashPosition pos;
- int (*is_equal_func)(zval *, zval *, zval * TSRMLS_DC) = is_equal_function;
-
-
- search_value = NULL;
-
- /* Get arguments and do error-checking */
- if (ZEND_NUM_ARGS() < 1 || ZEND_NUM_ARGS() > 3 ||
- zend_get_parameters_ex(ZEND_NUM_ARGS(), &input, &search_value, &strict) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- if (Z_TYPE_PP(input) != IS_ARRAY) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "The first argument should be an array");
- return;
- }
- if (ZEND_NUM_ARGS() == 3) {
- convert_to_boolean_ex(strict);
- if (Z_LVAL_PP(strict)) {
- is_equal_func = is_identical_function;
- }
- }
-
- /* Initialize return array */
- array_init(return_value);
- add_key = 1;
-
- /* Go through input array and add keys to the return array */
- zend_hash_internal_pointer_reset_ex(Z_ARRVAL_PP(input), &pos);
- while (zend_hash_get_current_data_ex(Z_ARRVAL_PP(input), (void **)&entry, &pos) == SUCCESS) {
- if (search_value != NULL) {
- is_equal_func(&res, *search_value, *entry TSRMLS_CC);
- add_key = zval_is_true(&res);
- }
-
- if (add_key) {
- MAKE_STD_ZVAL(new_val);
-
- switch (zend_hash_get_current_key_ex(Z_ARRVAL_PP(input), &string_key, &string_key_len, &num_key, 1, &pos)) {
- case HASH_KEY_IS_STRING:
- Z_TYPE_P(new_val) = IS_STRING;
- Z_STRVAL_P(new_val) = string_key;
- Z_STRLEN_P(new_val) = string_key_len-1;
- zend_hash_next_index_insert(Z_ARRVAL_P(return_value), &new_val,
- sizeof(zval *), NULL);
- break;
-
- case HASH_KEY_IS_LONG:
- Z_TYPE_P(new_val) = IS_LONG;
- Z_LVAL_P(new_val) = num_key;
- zend_hash_next_index_insert(Z_ARRVAL_P(return_value), &new_val,
- sizeof(zval *), NULL);
- break;
- }
- }
-
- zend_hash_move_forward_ex(Z_ARRVAL_PP(input), &pos);
- }
-}
-/* }}} */
-
-
-/* {{{ proto array array_values(array input)
- Return just the values from the input array */
-PHP_FUNCTION(array_values)
-{
- zval **input, /* Input array */
- **entry; /* An entry in the input array */
- HashPosition pos;
-
- /* Get arguments and do error-checking */
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(ZEND_NUM_ARGS(), &input) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- if (Z_TYPE_PP(input) != IS_ARRAY) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "The argument should be an array");
- return;
- }
-
- /* Initialize return array */
- array_init(return_value);
-
- /* Go through input array and add values to the return array */
- zend_hash_internal_pointer_reset_ex(Z_ARRVAL_PP(input), &pos);
- while (zend_hash_get_current_data_ex(Z_ARRVAL_PP(input), (void **)&entry, &pos) == SUCCESS) {
-
- (*entry)->refcount++;
- zend_hash_next_index_insert(Z_ARRVAL_P(return_value), entry,
- sizeof(zval *), NULL);
-
- zend_hash_move_forward_ex(Z_ARRVAL_PP(input), &pos);
- }
-}
-/* }}} */
-
-
-/* {{{ proto array array_count_values(array input)
- Return the value as key and the frequency of that value in input as value */
-PHP_FUNCTION(array_count_values)
-{
- zval **input, /* Input array */
- **entry, /* An entry in the input array */
- **tmp;
- HashTable *myht;
- HashPosition pos;
-
- /* Get arguments and do error-checking */
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &input) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- if (Z_TYPE_PP(input) != IS_ARRAY) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "The argument should be an array");
- return;
- }
-
- /* Initialize return array */
- array_init(return_value);
-
- /* Go through input array and add values to the return array */
- myht = Z_ARRVAL_PP(input);
- zend_hash_internal_pointer_reset_ex(myht, &pos);
- while (zend_hash_get_current_data_ex(myht, (void **)&entry, &pos) == SUCCESS) {
- if (Z_TYPE_PP(entry) == IS_LONG) {
-int_key:
- if (zend_hash_index_find(Z_ARRVAL_P(return_value),
- Z_LVAL_PP(entry),
- (void**)&tmp) == FAILURE) {
- zval *data;
- MAKE_STD_ZVAL(data);
- Z_TYPE_P(data) = IS_LONG;
- Z_LVAL_P(data) = 1;
- zend_hash_index_update(Z_ARRVAL_P(return_value), Z_LVAL_PP(entry), &data, sizeof(data), NULL);
- } else {
- Z_LVAL_PP(tmp)++;
- }
- } else if (Z_TYPE_PP(entry) == IS_STRING) {
- /* make sure our array does not end up with numeric string keys */
- if (is_numeric_string(Z_STRVAL_PP(entry), Z_STRLEN_PP(entry), NULL, NULL, 0) == IS_LONG) {
- SEPARATE_ZVAL(entry);
- convert_to_long_ex(entry);
- goto int_key;
- }
-
- if (zend_hash_find(Z_ARRVAL_P(return_value), Z_STRVAL_PP(entry), Z_STRLEN_PP(entry)+1, (void**)&tmp) == FAILURE) {
- zval *data;
- MAKE_STD_ZVAL(data);
- Z_TYPE_P(data) = IS_LONG;
- Z_LVAL_P(data) = 1;
- zend_hash_update(Z_ARRVAL_P(return_value), Z_STRVAL_PP(entry), Z_STRLEN_PP(entry) + 1, &data, sizeof(data), NULL);
- } else {
- Z_LVAL_PP(tmp)++;
- }
- } else {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Can only count STRING and INTEGER values!");
- }
-
- zend_hash_move_forward_ex(myht, &pos);
- }
-}
-/* }}} */
-
-
-/* {{{ proto array array_reverse(array input [, bool preserve keys])
- Return input as a new array with the order of the entries reversed */
-PHP_FUNCTION(array_reverse)
-{
- zval **input, /* Input array */
- **z_preserve_keys, /* Flag: whether to preserve keys */
- **entry; /* An entry in the input array */
- char *string_key;
- uint string_key_len;
- ulong num_key;
- zend_bool preserve_keys = 0;
- HashPosition pos;
-
- /* Get arguments and do error-checking */
- if (ZEND_NUM_ARGS() < 1 || ZEND_NUM_ARGS() > 2 || zend_get_parameters_ex(ZEND_NUM_ARGS(), &input, &z_preserve_keys) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- if (Z_TYPE_PP(input) != IS_ARRAY) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "The argument should be an array");
- return;
- }
-
- if (ZEND_NUM_ARGS() > 1) {
- convert_to_boolean_ex(z_preserve_keys);
- preserve_keys = Z_BVAL_PP(z_preserve_keys);
- }
-
- /* Initialize return array */
- array_init(return_value);
-
- zend_hash_internal_pointer_end_ex(Z_ARRVAL_PP(input), &pos);
- while (zend_hash_get_current_data_ex(Z_ARRVAL_PP(input), (void **)&entry, &pos) == SUCCESS) {
- (*entry)->refcount++;
-
- switch (zend_hash_get_current_key_ex(Z_ARRVAL_PP(input), &string_key, &string_key_len, &num_key, 0, &pos)) {
- case HASH_KEY_IS_STRING:
- zend_hash_update(Z_ARRVAL_P(return_value), string_key, string_key_len, entry, sizeof(zval *), NULL);
- break;
-
- case HASH_KEY_IS_LONG:
- if (preserve_keys) {
- zend_hash_index_update(Z_ARRVAL_P(return_value), num_key, entry, sizeof(zval *), NULL);
- } else {
- zend_hash_next_index_insert(Z_ARRVAL_P(return_value), entry, sizeof(zval *), NULL);
- }
- break;
- }
-
- zend_hash_move_backwards_ex(Z_ARRVAL_PP(input), &pos);
- }
-}
-/* }}} */
-
-
-/* {{{ proto array array_pad(array input, int pad_size, mixed pad_value)
- Returns a copy of input array padded with pad_value to size pad_size */
-PHP_FUNCTION(array_pad)
-{
- zval **input; /* Input array */
- zval **pad_size; /* Size to pad to */
- zval **pad_value; /* Padding value obviously */
- zval ***pads; /* Array to pass to splice */
- HashTable *new_hash; /* Return value from splice */
- int input_size; /* Size of the input array */
- int pad_size_abs; /* Absolute value of pad_size */
- int num_pads; /* How many pads do we need */
- int do_pad; /* Whether we should do padding at all */
- int i;
-
- /* Get arguments and do error-checking */
- if (ZEND_NUM_ARGS() != 3 || zend_get_parameters_ex(3, &input, &pad_size, &pad_value) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- /* Make sure arguments are of the proper type */
- if (Z_TYPE_PP(input) != IS_ARRAY) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "The argument should be an array");
- return;
- }
- convert_to_long_ex(pad_size);
-
- /* Do some initial calculations */
- input_size = zend_hash_num_elements(Z_ARRVAL_PP(input));
- pad_size_abs = abs(Z_LVAL_PP(pad_size));
- do_pad = (input_size >= pad_size_abs) ? 0 : 1;
-
- /* Copy the original array */
- *return_value = **input;
- zval_copy_ctor(return_value);
-
- /* If no need to pad, no need to continue */
- if (!do_pad) {
- return;
- }
-
- /* Populate the pads array */
- num_pads = pad_size_abs - input_size;
- if(num_pads > 1048576) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "You may only pad up to 1048576 elements at a time");
- RETURN_FALSE;
- }
- pads = (zval ***)safe_emalloc(num_pads, sizeof(zval **), 0);
- for (i = 0; i < num_pads; i++) {
- pads[i] = pad_value;
- }
-
- /* Pad on the right or on the left */
- if (Z_LVAL_PP(pad_size) > 0) {
- new_hash = php_splice(Z_ARRVAL_P(return_value), input_size, 0, pads, num_pads, NULL);
- } else {
- new_hash = php_splice(Z_ARRVAL_P(return_value), 0, 0, pads, num_pads, NULL);
- }
-
- /* Copy the result hash into return value */
- zend_hash_destroy(Z_ARRVAL_P(return_value));
- efree(Z_ARRVAL_P(return_value));
- Z_ARRVAL_P(return_value) = new_hash;
-
- /* Clean up */
- efree(pads);
-}
-/* }}} */
-
-/* {{{ proto array array_flip(array input)
- Return array with key <-> value flipped */
-PHP_FUNCTION(array_flip)
-{
- zval **array, **entry, *data;
- HashTable *target_hash;
- char *string_key;
- uint str_key_len;
- ulong num_key;
- HashPosition pos;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &array) == FAILURE) {
- 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");
- RETURN_FALSE;
- }
-
- array_init(return_value);
-
- zend_hash_internal_pointer_reset_ex(target_hash, &pos);
- while (zend_hash_get_current_data_ex(target_hash, (void **)&entry, &pos) == SUCCESS) {
- MAKE_STD_ZVAL(data);
- switch (zend_hash_get_current_key_ex(target_hash, &string_key, &str_key_len, &num_key, 1, &pos)) {
- case HASH_KEY_IS_STRING:
- Z_STRVAL_P(data) = string_key;
- Z_STRLEN_P(data) = str_key_len-1;
- Z_TYPE_P(data) = IS_STRING;
- break;
- case HASH_KEY_IS_LONG:
- Z_TYPE_P(data) = IS_LONG;
- Z_LVAL_P(data) = num_key;
- break;
- }
-
- if (Z_TYPE_PP(entry) == IS_LONG) {
- zend_hash_index_update(Z_ARRVAL_P(return_value), Z_LVAL_PP(entry), &data, sizeof(data), NULL);
- } else if (Z_TYPE_PP(entry) == IS_STRING) {
- zend_symtable_update(Z_ARRVAL_P(return_value), Z_STRVAL_PP(entry), Z_STRLEN_PP(entry) + 1, &data, sizeof(data), NULL);
- } else {
- zval_ptr_dtor(&data); /* will free also zval structure */
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Can only flip STRING and INTEGER values!");
- }
-
- zend_hash_move_forward_ex(target_hash, &pos);
- }
-}
-/* }}} */
-
-/* {{{ proto array array_change_key_case(array input [, int case=CASE_LOWER])
- Retuns an array with all string keys lowercased [or uppercased] */
-PHP_FUNCTION(array_change_key_case)
-{
- zval **array, **entry, **to_upper;
- char *string_key;
- char *new_key;
- uint str_key_len;
- ulong num_key;
- ulong change_to_upper=0;
-
- HashPosition pos;
-
- if (ZEND_NUM_ARGS() < 1 || ZEND_NUM_ARGS() > 2 ||
- zend_get_parameters_ex(ZEND_NUM_ARGS(), &array, &to_upper) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- if (ZEND_NUM_ARGS() > 1) {
- convert_to_long_ex(to_upper);
- change_to_upper = Z_LVAL_PP(to_upper);
- }
-
- if (Z_TYPE_PP(array) != IS_ARRAY) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "The argument should be an array");
- RETURN_FALSE;
- }
-
- array_init(return_value);
-
- zend_hash_internal_pointer_reset_ex(Z_ARRVAL_PP(array), &pos);
- while (zend_hash_get_current_data_ex(Z_ARRVAL_PP(array), (void **)&entry, &pos) == SUCCESS) {
- (*entry)->refcount++;
-
- switch (zend_hash_get_current_key_ex(Z_ARRVAL_PP(array), &string_key, &str_key_len, &num_key, 0, &pos)) {
- case HASH_KEY_IS_LONG:
- zend_hash_index_update(Z_ARRVAL_P(return_value), num_key, entry, sizeof(entry), NULL);
- break;
- case HASH_KEY_IS_STRING:
- new_key=estrndup(string_key,str_key_len);
- if (change_to_upper)
- php_strtoupper(new_key, str_key_len - 1);
- else
- php_strtolower(new_key, str_key_len - 1);
- zend_hash_update(Z_ARRVAL_P(return_value), new_key, str_key_len, entry, sizeof(entry), NULL);
- efree(new_key);
- break;
- }
-
- zend_hash_move_forward_ex(Z_ARRVAL_PP(array), &pos);
- }
-}
-/* }}} */
-
-/* {{{ proto array array_unique(array input)
- Removes duplicate values from array */
-PHP_FUNCTION(array_unique)
-{
- zval **array;
- HashTable *target_hash;
- Bucket *p;
- struct bucketindex {
- Bucket *b;
- unsigned int i;
- };
- struct bucketindex *arTmp, *cmpdata, *lastkept;
- unsigned int i;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &array) == FAILURE) {
- 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");
- RETURN_FALSE;
- }
-
- /* copy the argument array */
- *return_value = **array;
- zval_copy_ctor(return_value);
-
- if (target_hash->nNumOfElements <= 1) { /* nothing to do */
- return;
- }
-
- /* create and sort array with pointers to the target_hash buckets */
- arTmp = (struct bucketindex *) pemalloc((target_hash->nNumOfElements + 1) * sizeof(struct bucketindex), target_hash->persistent);
- if (!arTmp) {
- RETURN_FALSE;
- }
- for (i = 0, p = target_hash->pListHead; p; i++, p = p->pListNext) {
- arTmp[i].b = p;
- 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 */
- lastkept = arTmp;
- for (cmpdata = arTmp + 1; cmpdata->b; cmpdata++) {
- if (array_data_compare(lastkept, cmpdata TSRMLS_CC)) {
- lastkept = cmpdata;
- } else {
- if (lastkept->i > cmpdata->i) {
- p = lastkept->b;
- lastkept = cmpdata;
- } else {
- p = cmpdata->b;
- }
- if (p->nKeyLength) {
- zend_hash_del(Z_ARRVAL_P(return_value), p->arKey, p->nKeyLength);
- } else {
- zend_hash_index_del(Z_ARRVAL_P(return_value), p->h);
- }
- }
- }
- pefree(arTmp, target_hash->persistent);
-}
-/* }}} */
-
-static void php_array_intersect(INTERNAL_FUNCTION_PARAMETERS, int behavior, int data_compare_type, int key_compare_type)
-{
- zval ***args = NULL;
- HashTable *hash;
- int argc, arr_argc, i, c = 0;
- Bucket ***lists, **list, ***ptrs, *p;
-
- char *callback_name;
- zval **old_compare_func;
-
- int (*intersect_key_compare_func)(const void *, const void * TSRMLS_DC);
- int (*intersect_data_compare_func)(const void *, const void * TSRMLS_DC);
-
- /* Get the argument count */
- argc = ZEND_NUM_ARGS();
- /* Allocate arguments array and get the arguments, checking for errors. */
- args = (zval ***)safe_emalloc(argc, sizeof(zval **), 0);
- if (zend_get_parameters_array_ex(argc, args) == FAILURE) {
- efree(args);
- WRONG_PARAM_COUNT;
- }
-
- old_compare_func = BG(user_compare_func_name);
- /* clear FCI cache otherwise : for example the same or other array with
- (partly) the same key values has been sorted with uasort() or
- other sorting function the comparison is cached, however the the name
- of the function for comparison is not respected. see bug #28739
- */
- BG(user_compare_fci_cache) = empty_fcall_info_cache;
-
- if (behavior == INTERSECT_NORMAL) {
- intersect_key_compare_func = array_key_compare;
- if (data_compare_type == INTERSECT_COMP_DATA_INTERNAL) {
- /* array_intersect() */
-
- if (argc < 2) {
- efree(args);
- WRONG_PARAM_COUNT;
- }
- arr_argc = argc;
- intersect_data_compare_func = array_data_compare;
- } else if (data_compare_type == INTERSECT_COMP_DATA_USER) {
- /* array_uintersect() */
- if (argc < 3) {
- efree(args);
- WRONG_PARAM_COUNT;
- }
- arr_argc = argc - 1;
- intersect_data_compare_func = array_user_compare;
- if (!zend_is_callable(*args[arr_argc], 0, &callback_name)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Not a valid callback %s", callback_name);
- efree(callback_name);
- efree(args);
- return;
- }
- efree(callback_name);
-
- BG(user_compare_func_name) = args[arr_argc];
- } 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;
- }
- } else if (behavior & INTERSECT_ASSOC) { /* triggered also when INTERSECT_KEY */
- /*
- INTERSECT_KEY is subset of INTERSECT_ASSOC. When having the former
- no comparison of the data is done (part of INTERSECT_ASSOC)
- */
- intersect_key_compare_func = array_key_compare;
- if (data_compare_type == INTERSECT_COMP_DATA_INTERNAL
- &&
- key_compare_type == INTERSECT_COMP_KEY_INTERNAL) {
- /* array_intersect_assoc() or array_intersect_key() */
-
- if (argc < 2) {
- efree(args);
- WRONG_PARAM_COUNT;
- }
- arr_argc = argc;
- intersect_key_compare_func = array_key_compare;
- intersect_data_compare_func = array_data_compare;
- } else if (data_compare_type == INTERSECT_COMP_DATA_USER
- &&
- key_compare_type == INTERSECT_COMP_KEY_INTERNAL) {
- /* array_uintersect_assoc() */
-
- if (argc < 3) {
- efree(args);
- WRONG_PARAM_COUNT;
- }
- arr_argc = argc - 1;
- if (!zend_is_callable(*args[arr_argc], 0, &callback_name)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Not a valid callback %s", callback_name);
- efree(callback_name);
- efree(args);
- return;
- }
- efree(callback_name);
- intersect_key_compare_func = array_key_compare;
- intersect_data_compare_func = array_user_compare;
- } else if (data_compare_type == INTERSECT_COMP_DATA_INTERNAL
- &&
- key_compare_type == INTERSECT_COMP_KEY_USER) {
- /* array_intersect_uassoc() or array_intersect_ukey() */
-
- if (argc < 3) {
- efree(args);
- WRONG_PARAM_COUNT;
- }
- arr_argc = argc - 1;
- if (!zend_is_callable(*args[arr_argc], 0, &callback_name)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Not a valid callback %s", callback_name);
- efree(callback_name);
- efree(args);
- return;
- }
- efree(callback_name);
- intersect_key_compare_func = array_user_key_compare;
- intersect_data_compare_func = array_data_compare;
- BG(user_compare_func_name) = args[arr_argc];
- } else if (data_compare_type == INTERSECT_COMP_DATA_USER
- &&
- key_compare_type == INTERSECT_COMP_KEY_USER) {
- /* array_uintersect_uassoc() */
-
- if (argc < 4) {
- efree(args);
- WRONG_PARAM_COUNT;
- }
- arr_argc = argc - 2;
- if (!zend_is_callable(*args[arr_argc], 0, &callback_name)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Not a valid callback %s", callback_name);
- efree(callback_name);
- efree(args);
- return;
- }
- efree(callback_name);
- if (!zend_is_callable(*args[arr_argc + 1], 0, &callback_name)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Not a valid callback %s", callback_name);
- efree(callback_name);
- efree(args);
- return;
- }
- efree(callback_name);
- 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 */
- } else {
- 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);
- return;
- }
- } else {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "behavior is %d. This should never happen. Please report as a bug", behavior);
- return;
- }
-
-
- /* for each argument, create and sort list with pointers to the hash buckets */
- lists = (Bucket ***)safe_emalloc(arr_argc, sizeof(Bucket **), 0);
- ptrs = (Bucket ***)safe_emalloc(arr_argc, sizeof(Bucket **), 0);
- set_compare_func(SORT_STRING TSRMLS_CC);
- for (i = 0; i < arr_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);
- arr_argc = i; /* only free up to i-1 */
- goto out;
- }
- hash = HASH_OF(*args[i]);
- list = (Bucket **) pemalloc((hash->nNumOfElements + 1) * sizeof(Bucket *), hash->persistent);
- if (!list) {
- RETURN_FALSE;
- }
- lists[i] = list;
- ptrs[i] = list;
- for (p = hash->pListHead; p; p = p->pListNext) {
- *list++ = p;
- }
- *list = NULL;
- if (behavior == INTERSECT_NORMAL) {
- zend_qsort((void *) lists[i], hash->nNumOfElements, sizeof(Bucket *), intersect_data_compare_func TSRMLS_CC);
- } else if (behavior & INTERSECT_ASSOC) { /* triggered also when INTERSECT_KEY */
- zend_qsort((void *) lists[i], hash->nNumOfElements, sizeof(Bucket *), intersect_key_compare_func TSRMLS_CC);
- }
- }
-
- /* copy the argument array */
- *return_value = **args[0];
- zval_copy_ctor(return_value);
-
- if ((behavior & INTERSECT_NORMAL) && data_compare_type == INTERSECT_COMP_DATA_USER) {
- /* array_uintersect() */
- BG(user_compare_func_name) = args[arr_argc];
- }
-
- /* go through the lists and look for common values */
- while (*ptrs[0]) {
- if ((behavior & INTERSECT_ASSOC) /* triggered also when INTERSECT_KEY */
- &&
- key_compare_type == INTERSECT_COMP_KEY_USER) {
-
- BG(user_compare_func_name) = args[argc - 1];
- }
-
- for (i = 1; i < arr_argc; i++) {
- if (behavior & INTERSECT_NORMAL) {
- while (*ptrs[i] && (0 < (c = intersect_data_compare_func(ptrs[0], ptrs[i] TSRMLS_CC)))) {
- ptrs[i]++;
- }
- } else if (behavior & INTERSECT_ASSOC) { /* triggered also when INTERSECT_KEY */
- while (*ptrs[i] && (0 < (c = intersect_key_compare_func(ptrs[0], ptrs[i] TSRMLS_CC)))) {
- ptrs[i]++;
- }
- if ((!c && *ptrs[i]) && (behavior == INTERSECT_ASSOC)) { /* only when INTERSECT_ASSOC */
- /*
- this means that ptrs[i] is not NULL so we can compare
- and "c==0" is from last operation
- in this branch of code we enter only when INTERSECT_ASSOC
- since when we have INTERSECT_KEY compare of data is not
- wanted.
- */
- if (data_compare_type == INTERSECT_COMP_DATA_USER) {
- BG(user_compare_func_name) = args[arr_argc];
- }
- 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];
- /* When KEY_USER, the last parameter is always the callback */
- }
- /* we are going to the break */
- } else {
- /* continue looping */
- }
- }
- }
- if (!*ptrs[i]) {
- /* delete any values corresponding to remains of ptrs[0] */
- /* and exit because they do not present in at least one of */
- /* the other arguments */
- for (;;) {
- p = *ptrs[0]++;
- if (!p) {
- goto out;
- }
- if (p->nKeyLength) {
- zend_hash_del(Z_ARRVAL_P(return_value), p->arKey, p->nKeyLength);
- } else {
- zend_hash_index_del(Z_ARRVAL_P(return_value), p->h);
- }
- }
- }
- if (c) /* here we get if not all are equal */
- break;
- ptrs[i]++;
- }
- if (c) {
- /* Value of ptrs[0] not in all arguments, delete all entries */
- /* with value < value of ptrs[i] */
- for (;;) {
- p = *ptrs[0];
- if (p->nKeyLength) {
- zend_hash_del(Z_ARRVAL_P(return_value), p->arKey, p->nKeyLength);
- } else {
- zend_hash_index_del(Z_ARRVAL_P(return_value), p->h);
- }
- if (!*++ptrs[0]) {
- goto out;
- }
- if (behavior == INTERSECT_NORMAL) {
- if (0 <= intersect_data_compare_func(ptrs[0], ptrs[i] TSRMLS_CC)) {
- break;
- }
- } else if (behavior & INTERSECT_ASSOC) { /* triggered also when INTERSECT_KEY */
- /* no need of looping because indexes are unique */
- break;
- }
- }
- } else {
- /* ptrs[0] is present in all the arguments */
- /* Skip all entries with same value as ptrs[0] */
- for (;;) {
- if (!*++ptrs[0]) {
- goto out;
- }
- if (behavior == INTERSECT_NORMAL) {
- if (intersect_data_compare_func(ptrs[0]-1, ptrs[0] TSRMLS_CC)) {
- break;
- }
- } else if (behavior & INTERSECT_ASSOC) { /* triggered also when INTERSECT_KEY */
- /* no need of looping because indexes are unique */
- break;
- }
- }
- }
- }
-out:
- for (i = 0; i < arr_argc; i++) {
- hash = HASH_OF(*args[i]);
- pefree(lists[i], hash->persistent);
- }
-
- BG(user_compare_func_name) = old_compare_func;
-
- efree(ptrs);
- efree(lists);
- efree(args);
-}
-
-/* {{{ proto array array_intersect_key(array arr1, array arr2 [, array ...])
- Returns the entries of arr1 that have keys which are present in all the other arguments. Kind of equivalent to array_diff(array_keys($arr1), array_keys($arr2)[,array_keys(...)]). Equivalent of array_intersect_assoc() but does not do compare of the data. */
-PHP_FUNCTION(array_intersect_key)
-{
- php_array_intersect(INTERNAL_FUNCTION_PARAM_PASSTHRU, INTERSECT_KEY,
- INTERSECT_COMP_DATA_INTERNAL, INTERSECT_COMP_KEY_INTERNAL);
-}
-
-/* {{{ proto array array_intersect_ukey(array arr1, array arr2 [, array ...], callback key_compare_func)
- Returns the entries of arr1 that have keys which are present in all the other arguments. Kind of equivalent to array_diff(array_keys($arr1), array_keys($arr2)[,array_keys(...)]). The comparison of the keys is performed by a user supplied function. Equivalent of array_intersect_uassoc() but does not do compare of the data. */
-PHP_FUNCTION(array_intersect_ukey)
-{
- php_array_intersect(INTERNAL_FUNCTION_PARAM_PASSTHRU, INTERSECT_KEY,
- INTERSECT_COMP_DATA_INTERNAL, INTERSECT_COMP_KEY_USER);
-}
-
-
-/* {{{ proto array array_intersect(array arr1, array arr2 [, array ...])
- Returns the entries of arr1 that have values which are present in all the other arguments */
-PHP_FUNCTION(array_intersect)
-{
- php_array_intersect(INTERNAL_FUNCTION_PARAM_PASSTHRU, INTERSECT_NORMAL,
- INTERSECT_COMP_DATA_INTERNAL, INTERSECT_COMP_KEY_INTERNAL);
-}
-/* }}} */
-
-/* {{{ proto array array_uintersect(array arr1, array arr2 [, array ...], callback data_compare_func)
- 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. */
-PHP_FUNCTION(array_uintersect)
-{
- php_array_intersect(INTERNAL_FUNCTION_PARAM_PASSTHRU, INTERSECT_NORMAL,
- INTERSECT_COMP_DATA_USER, INTERSECT_COMP_KEY_INTERNAL);
-}
-/* }}} */
-
-
-/* {{{ proto array array_intersect_assoc(array arr1, array arr2 [, array ...])
- Returns the entries of arr1 that have values which are present in all the other arguments. Keys are used to do more restrictive check */
-PHP_FUNCTION(array_intersect_assoc)
-{
- php_array_intersect(INTERNAL_FUNCTION_PARAM_PASSTHRU, INTERSECT_ASSOC,
- INTERSECT_COMP_DATA_INTERNAL, INTERSECT_COMP_KEY_INTERNAL);
-}
-/* }}} */
-
-
-/* {{{ proto array array_uintersect_assoc(array arr1, array arr2 [, array ...], callback data_compare_func)
- Returns the entries of arr1 that have values which are present in all the other arguments. Keys are used to do more restrictive check. Data is compared by using an user-supplied callback. */
-PHP_FUNCTION(array_uintersect_assoc)
-{
- php_array_intersect(INTERNAL_FUNCTION_PARAM_PASSTHRU, INTERSECT_ASSOC,
- INTERSECT_COMP_DATA_USER, INTERSECT_COMP_KEY_INTERNAL);
-}
-/* }}} */
-
-/* {{{ proto array array_intersect_uassoc(array arr1, array arr2 [, array ...], callback key_compare_func)
- Returns the entries of arr1 that have values which are present in all the other arguments. Keys are used to do more restrictive check and they are compared by using an user-supplied callback. */
-PHP_FUNCTION(array_intersect_uassoc)
-{
- php_array_intersect(INTERNAL_FUNCTION_PARAM_PASSTHRU, INTERSECT_ASSOC,
- INTERSECT_COMP_DATA_INTERNAL, INTERSECT_COMP_KEY_USER);
-}
-/* }}} */
-
-/* {{{ proto array array_uintersect_uassoc(array arr1, array arr2 [, array ...], callback data_compare_func, callback key_compare_func)
- 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. */
-PHP_FUNCTION(array_uintersect_uassoc)
-{
- php_array_intersect(INTERNAL_FUNCTION_PARAM_PASSTHRU, INTERSECT_ASSOC,
- INTERSECT_COMP_DATA_USER, INTERSECT_COMP_KEY_USER);
-}
-/* }}} */
-
-
-static void php_array_diff(INTERNAL_FUNCTION_PARAMETERS, int behavior, int data_compare_type, int key_compare_type)
-{
- zval ***args = NULL;
- HashTable *hash;
- int argc, arr_argc, i, c;
- Bucket ***lists, **list, ***ptrs, *p;
- char *callback_name;
-
- zval **old_compare_func;
- int (*diff_key_compare_func)(const void *, const void * TSRMLS_DC);
- int (*diff_data_compare_func)(const void *, const void * TSRMLS_DC);
-
-
- /* Get the argument count */
- argc = ZEND_NUM_ARGS();
- /* Allocate arguments array and get the arguments, checking for errors. */
- args = (zval ***)safe_emalloc(argc, sizeof(zval **), 0);
- if (zend_get_parameters_array_ex(argc, args) == FAILURE) {
- efree(args);
- WRONG_PARAM_COUNT;
- }
-
- old_compare_func = BG(user_compare_func_name);
- /* clear FCI cache otherwise : for example the same or other array with
- (partly) the same key values has been sorted with uasort() or
- other sorting function the comparison is cached, however the the name
- of the function for comparison is not respected. see bug #28739
- */
- BG(user_compare_fci_cache) = empty_fcall_info_cache;
-
- if (behavior == DIFF_NORMAL) {
- diff_key_compare_func = array_key_compare;
- if (data_compare_type == DIFF_COMP_DATA_INTERNAL) {
- /* array_diff */
-
- if (argc < 2) {
- efree(args);
- WRONG_PARAM_COUNT;
- }
- arr_argc = argc;
- diff_data_compare_func = array_data_compare;
- } else if (data_compare_type == DIFF_COMP_DATA_USER) {
- /* array_udiff */
- if (argc < 3) {
- efree(args);
- WRONG_PARAM_COUNT;
- }
- arr_argc = argc - 1;
- diff_data_compare_func = array_user_compare;
- if (!zend_is_callable(*args[arr_argc], 0, &callback_name)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Not a valid callback %s", callback_name);
- efree(callback_name);
- efree(args);
- return;
- }
- efree(callback_name);
-
- BG(user_compare_func_name) = args[arr_argc];
- } 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;
- }
- } else if (behavior & DIFF_ASSOC) { /* triggered also if DIFF_KEY */
- /*
- DIFF_KEY is subset of DIFF_ASSOC. When having the former
- no comparison of the data is done (part of DIFF_ASSOC)
- */
- diff_key_compare_func = array_key_compare;
- if (data_compare_type == DIFF_COMP_DATA_INTERNAL
- &&
- key_compare_type == DIFF_COMP_KEY_INTERNAL) {
- /* array_diff_assoc() or array_diff_key() */
-
- if (argc < 2) {
- efree(args);
- WRONG_PARAM_COUNT;
- }
- arr_argc = argc;
- diff_key_compare_func = array_key_compare;
- diff_data_compare_func = array_data_compare;
- } else if (data_compare_type == DIFF_COMP_DATA_USER
- &&
- key_compare_type == DIFF_COMP_KEY_INTERNAL) {
- /* array_udiff_assoc() */
-
- if (argc < 3) {
- efree(args);
- WRONG_PARAM_COUNT;
- }
- arr_argc = argc - 1;
- if (!zend_is_callable(*args[arr_argc], 0, &callback_name)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Not a valid callback %s", callback_name);
- efree(callback_name);
- efree(args);
- return;
- }
- efree(callback_name);
- diff_key_compare_func = array_key_compare;
- diff_data_compare_func = array_user_compare;
- } else if (data_compare_type == DIFF_COMP_DATA_INTERNAL
- &&
- key_compare_type == DIFF_COMP_KEY_USER) {
- /* array_diff_uassoc() or array_diff_ukey() */
-
- if (argc < 3) {
- efree(args);
- WRONG_PARAM_COUNT;
- }
- arr_argc = argc - 1;
- if (!zend_is_callable(*args[arr_argc], 0, &callback_name)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Not a valid callback %s", callback_name);
- efree(callback_name);
- efree(args);
- return;
- }
- efree(callback_name);
- diff_key_compare_func = array_user_key_compare;
- diff_data_compare_func = array_data_compare;
- BG(user_compare_func_name) = args[arr_argc];
- } else if (data_compare_type == DIFF_COMP_DATA_USER
- &&
- key_compare_type == DIFF_COMP_KEY_USER) {
- /* array_udiff_uassoc() */
-
- if (argc < 4) {
- efree(args);
- WRONG_PARAM_COUNT;
- }
- arr_argc = argc - 2;
- if (!zend_is_callable(*args[arr_argc], 0, &callback_name)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Not a valid callback %s", callback_name);
- efree(callback_name);
- efree(args);
- return;
- }
- efree(callback_name);
- if (!zend_is_callable(*args[arr_argc + 1], 0, &callback_name)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Not a valid callback %s", callback_name);
- efree(callback_name);
- efree(args);
- return;
- }
- efree(callback_name);
- 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*/
- } else {
- 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);
- return;
- }
- } else {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "behavior is %d. This should never happen. Please report as a bug", behavior);
- return;
- }
-
-
- /* for each argument, create and sort list with pointers to the hash buckets */
- lists = (Bucket ***)safe_emalloc(arr_argc, sizeof(Bucket **), 0);
- ptrs = (Bucket ***)safe_emalloc(arr_argc, sizeof(Bucket **), 0);
- set_compare_func(SORT_STRING TSRMLS_CC);
- for (i = 0; i < arr_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);
- arr_argc = i; /* only free up to i-1 */
- goto out;
- }
- hash = HASH_OF(*args[i]);
- list = (Bucket **) pemalloc((hash->nNumOfElements + 1) * sizeof(Bucket *), hash->persistent);
- if (!list) {
- RETURN_FALSE;
- }
- lists[i] = list;
- ptrs[i] = list;
- for (p = hash->pListHead; p; p = p->pListNext) {
- *list++ = p;
- }
- *list = NULL;
- if (behavior == DIFF_NORMAL) {
- zend_qsort((void *) lists[i], hash->nNumOfElements, sizeof(Bucket *), diff_data_compare_func TSRMLS_CC);
- } else if (behavior & DIFF_ASSOC) { /* triggered also when DIFF_KEY */
- zend_qsort((void *) lists[i], hash->nNumOfElements, sizeof(Bucket *), diff_key_compare_func TSRMLS_CC);
- }
- }
-
- /* copy the argument array */
- *return_value = **args[0];
- zval_copy_ctor(return_value);
-
- if (behavior == DIFF_NORMAL && data_compare_type == DIFF_COMP_DATA_USER) {
- /* array_udiff() */
- BG(user_compare_func_name) = args[arr_argc];
- }
-
- /* go through the lists and look for values of ptr[0] that are not in the others */
- while (*ptrs[0]) {
- if ((behavior & DIFF_ASSOC) /* triggered also when DIFF_KEY */
- &&
- key_compare_type == DIFF_COMP_KEY_USER) {
-
- BG(user_compare_func_name) = args[argc - 1];
- }
- c = 1;
- for (i = 1; i < arr_argc; i++) {
- if (behavior == DIFF_NORMAL) {
- while (*ptrs[i] && (0 < (c = diff_data_compare_func(ptrs[0], ptrs[i] TSRMLS_CC)))) {
- ptrs[i]++;
- }
- } else if (behavior & DIFF_ASSOC) { /* triggered also when DIFF_KEY */
- while (*ptrs[i] && (0 < (c = diff_key_compare_func(ptrs[0], ptrs[i] TSRMLS_CC)))) {
- ptrs[i]++;
- }
- }
- if (!c) {
- if (behavior == DIFF_NORMAL) {
- if (*ptrs[i]) {
- ptrs[i]++;
- }
- break;
- } else if (behavior == DIFF_ASSOC) { /* only when DIFF_ASSOC */
- /*
- In this branch is execute only when DIFF_ASSOC. If behavior == DIFF_KEY
- data comparison is not needed - skipped.
- */
- if (*ptrs[i]) {
- if (data_compare_type == DIFF_COMP_DATA_USER) {
- BG(user_compare_func_name) = args[arr_argc];
- }
- if (diff_data_compare_func(ptrs[0], ptrs[i] 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];
- }
- } else {
- break;
- /*
- we have found the element in other arrays thus we don't want it
- in the return_value -> delete from there
- */
- }
- }
- } else if (behavior == DIFF_KEY) { /* only when DIFF_KEY */
- /*
- the behavior here differs from INTERSECT_KEY in php_intersect
- since in the "diff" case we have to remove the entry from
- return_value while when doing intersection the entry must not
- be deleted.
- */
- break; /* remove the key */
- }
- }
- }
- if (!c) {
- /* ptrs[0] in one of the other arguments */
- /* delete all entries with value as ptrs[0] */
- for (;;) {
- p = *ptrs[0];
- if (p->nKeyLength) {
- zend_hash_del(Z_ARRVAL_P(return_value), p->arKey, p->nKeyLength);
- } else {
- zend_hash_index_del(Z_ARRVAL_P(return_value), p->h);
- }
- if (!*++ptrs[0]) {
- goto out;
- }
- if (behavior == DIFF_NORMAL) {
- if (diff_data_compare_func(ptrs[0] - 1, ptrs[0] TSRMLS_CC)) {
- break;
- }
- } else if (behavior & DIFF_ASSOC) { /* triggered also when DIFF_KEY */
- /* in this case no array_key_compare is needed */
- break;
- }
- }
- } else {
- /* ptrs[0] in none of the other arguments */
- /* skip all entries with value as ptrs[0] */
- for (;;) {
- if (!*++ptrs[0]) {
- goto out;
- }
- if (behavior == DIFF_NORMAL) {
- if (diff_data_compare_func(ptrs[0]-1, ptrs[0] TSRMLS_CC)) {
- break;
- }
- } else if (behavior & DIFF_ASSOC) { /* triggered also when DIFF_KEY */
- /* in this case no array_key_compare is needed */
- break;
- }
- }
- }
- }
-out:
- for (i = 0; i < arr_argc; i++) {
- hash = HASH_OF(*args[i]);
- pefree(lists[i], hash->persistent);
- }
-
- BG(user_compare_func_name) = old_compare_func;
-
- efree(ptrs);
- efree(lists);
- efree(args);
-}
-
-
-/* {{{ proto array array_diff_key(array arr1, array arr2 [, array ...])
- 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. The associativity is preserved. */
-PHP_FUNCTION(array_diff_key)
-{
- php_array_diff(INTERNAL_FUNCTION_PARAM_PASSTHRU, DIFF_KEY,
- DIFF_COMP_DATA_INTERNAL, DIFF_COMP_KEY_INTERNAL);
-}
-/* }}} */
-
-/* {{{ proto array array_diff_ukey(array arr1, array arr2 [, array ...], callback key_comp_func)
- 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. */
-PHP_FUNCTION(array_diff_ukey)
-{
- php_array_diff(INTERNAL_FUNCTION_PARAM_PASSTHRU, DIFF_KEY,
- DIFF_COMP_DATA_INTERNAL, DIFF_COMP_KEY_USER);
-}
-/* }}} */
-
-
-/* {{{ proto array array_diff(array arr1, array arr2 [, array ...])
- Returns the entries of arr1 that have values which are not present in any of the others arguments. */
-PHP_FUNCTION(array_diff)
-{
- php_array_diff(INTERNAL_FUNCTION_PARAM_PASSTHRU, DIFF_NORMAL,
- DIFF_COMP_DATA_INTERNAL, DIFF_COMP_KEY_INTERNAL);
-}
-/* }}} */
-
-/* {{{ proto array array_udiff(array arr1, array arr2 [, array ...], callback data_comp_func)
- 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. */
-PHP_FUNCTION(array_udiff)
-{
- php_array_diff(INTERNAL_FUNCTION_PARAM_PASSTHRU, DIFF_NORMAL,
- DIFF_COMP_DATA_USER, DIFF_COMP_KEY_INTERNAL);
-}
-/* }}} */
-
-
-/* {{{ proto array array_diff_assoc(array arr1, array arr2 [, array ...])
- 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 */
-PHP_FUNCTION(array_diff_assoc)
-{
- php_array_diff(INTERNAL_FUNCTION_PARAM_PASSTHRU, DIFF_ASSOC,
- DIFF_COMP_DATA_INTERNAL, DIFF_COMP_KEY_INTERNAL);
-}
-/* }}} */
-
-/* {{{ proto array array_diff_uassoc(array arr1, array arr2 [, array ...], callback data_comp_func)
- 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. Elements are compared by user supplied function. */
-PHP_FUNCTION(array_diff_uassoc)
-{
- php_array_diff(INTERNAL_FUNCTION_PARAM_PASSTHRU, DIFF_ASSOC,
- DIFF_COMP_DATA_INTERNAL, DIFF_COMP_KEY_USER);
-}
-/* }}} */
-
-
-/* {{{ proto array array_udiff_assoc(array arr1, array arr2 [, array ...], callback key_comp_func)
- 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. */
-PHP_FUNCTION(array_udiff_assoc)
-{
- php_array_diff(INTERNAL_FUNCTION_PARAM_PASSTHRU, DIFF_ASSOC,
- DIFF_COMP_DATA_USER, DIFF_COMP_KEY_INTERNAL);
-}
-/* }}} */
-
-/* {{{ proto array array_udiff_uassoc(array arr1, array arr2 [, array ...], callback data_comp_func, callback key_comp_func)
- 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. */
-PHP_FUNCTION(array_udiff_uassoc)
-{
- php_array_diff(INTERNAL_FUNCTION_PARAM_PASSTHRU, DIFF_ASSOC,
- DIFF_COMP_DATA_USER, DIFF_COMP_KEY_USER);
-}
-/* }}} */
-
-
-#define MULTISORT_ORDER 0
-#define MULTISORT_TYPE 1
-#define MULTISORT_LAST 2
-
-int multisort_compare(const void *a, const void *b TSRMLS_DC)
-{
- Bucket **ab = *(Bucket ***)a;
- Bucket **bb = *(Bucket ***)b;
- int r;
- int result = 0;
- zval temp;
-
- r = 0;
- do {
- set_compare_func(ARRAYG(multisort_flags)[MULTISORT_TYPE][r] TSRMLS_CC);
-
- ARRAYG(compare_func)(&temp, *((zval **)ab[r]->pData), *((zval **)bb[r]->pData) TSRMLS_CC);
- result = ARRAYG(multisort_flags)[MULTISORT_ORDER][r] * Z_LVAL(temp);
- if (result != 0) {
- return result;
- }
- r++;
- } while (ab[r] != NULL);
-
- return result;
-}
-
-#define MULTISORT_ABORT \
- for (k = 0; k < MULTISORT_LAST; k++) \
- efree(ARRAYG(multisort_flags)[k]); \
- efree(arrays); \
- efree(args); \
- RETURN_FALSE;
-
-/* {{{ proto 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]], ...])
- Sort multiple arrays at once similar to how ORDER BY clause works in SQL */
-PHP_FUNCTION(array_multisort)
-{
- zval*** args;
- zval*** arrays;
- Bucket*** indirect;
- Bucket* p;
- HashTable* hash;
- int argc;
- int array_size;
- int num_arrays = 0;
- int parse_state[MULTISORT_LAST]; /* 0 - flag not allowed 1 - flag allowed */
- int sort_order = SORT_ASC;
- int sort_type = SORT_REGULAR;
- int i, k;
-
- /* Get the argument count and check it */
- argc = ZEND_NUM_ARGS();
- if (argc < 1) {
- WRONG_PARAM_COUNT;
- }
-
- /* Allocate arguments array and get the arguments, checking for errors. */
- args = (zval ***)safe_emalloc(argc, sizeof(zval **), 0);
- if (zend_get_parameters_array_ex(argc, args) == FAILURE) {
- efree(args);
- WRONG_PARAM_COUNT;
- }
-
- /* Allocate space for storing pointers to input arrays and sort flags. */
- arrays = (zval ***)ecalloc(argc, sizeof(zval **));
- for (i = 0; i < MULTISORT_LAST; i++) {
- parse_state[i] = 0;
- ARRAYG(multisort_flags)[i] = (int *)ecalloc(argc, sizeof(int));
- }
-
- /* Here we go through the input arguments and parse them. Each one can
- * be either an array or a sort flag which follows an array. If not
- * specified, the sort flags defaults to SORT_ASC and SORT_REGULAR
- * accordingly. There can't be two sort flags of the same type after an
- * array, and the very first argument has to be an array.
- */
- for (i = 0; i < argc; i++) {
- if (Z_TYPE_PP(args[i]) == IS_ARRAY) {
- /* We see the next array, so we update the sort flags of
- the previous array and reset the sort flags. */
- if (i > 0) {
- ARRAYG(multisort_flags)[MULTISORT_ORDER][num_arrays-1] = sort_order;
- ARRAYG(multisort_flags)[MULTISORT_TYPE][num_arrays-1] = sort_type;
- sort_order = SORT_ASC;
- sort_type = SORT_REGULAR;
- }
- arrays[num_arrays++] = args[i];
-
- /* Next one may be an array or a list of sort flags. */
- for (k = 0; k < MULTISORT_LAST; k++) {
- parse_state[k] = 1;
- }
- } else if (Z_TYPE_PP(args[i]) == IS_LONG) {
- switch (Z_LVAL_PP(args[i])) {
- case SORT_ASC:
- case SORT_DESC:
- /* flag allowed here */
- if (parse_state[MULTISORT_ORDER] == 1) {
- /* Save the flag and make sure then next arg is not the current flag. */
- sort_order = Z_LVAL_PP(args[i]) == SORT_DESC ? -1 : 1;
- parse_state[MULTISORT_ORDER] = 0;
- } else {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Argument #%d is expected to be an array or sorting flag that has not already been specified", i+1);
- MULTISORT_ABORT;
- }
- break;
-
- case SORT_REGULAR:
- case SORT_NUMERIC:
- case SORT_STRING:
- /* flag allowed here */
- if (parse_state[MULTISORT_TYPE] == 1) {
- /* Save the flag and make sure then next arg is not the current flag. */
- sort_type = Z_LVAL_PP(args[i]);
- parse_state[MULTISORT_TYPE] = 0;
- } else {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Argument #%d is expected to be an array or sorting flag that has not already been specified", i + 1);
- MULTISORT_ABORT;
- }
- break;
-
- default:
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Argument #%d is an unknown sort flag", i + 1);
- MULTISORT_ABORT;
- break;
-
- }
- } else {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Argument #%d is expected to be an array or a sort flag", i + 1);
- MULTISORT_ABORT;
- }
- }
- /* Take care of the last array sort flags. */
- ARRAYG(multisort_flags)[MULTISORT_ORDER][num_arrays-1] = sort_order;
- ARRAYG(multisort_flags)[MULTISORT_TYPE][num_arrays-1] = sort_type;
-
- /* Make sure the arrays are of the same size. */
- array_size = zend_hash_num_elements(Z_ARRVAL_PP(arrays[0]));
- for (i = 0; i < num_arrays; i++) {
- if (zend_hash_num_elements(Z_ARRVAL_PP(arrays[i])) != array_size) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Array sizes are inconsistent");
- MULTISORT_ABORT;
- }
- }
-
- /* If all arrays are empty or have only one entry, we don't need to do anything. */
- if (array_size < 1) {
- for (k = 0; k < MULTISORT_LAST; k++)
- efree(ARRAYG(multisort_flags)[k]);
- efree(arrays);
- efree(args);
- RETURN_TRUE;
- }
-
- /* Create the indirection array. This array is of size MxN, where
- * M is the number of entries in each input array and N is the number
- * of the input arrays + 1. The last column is NULL to indicate the end
- * of the row.
- */
- indirect = (Bucket ***)safe_emalloc(array_size, sizeof(Bucket **), 0);
- for (i = 0; i < array_size; i++)
- indirect[i] = (Bucket **)safe_emalloc((num_arrays+1), sizeof(Bucket *), 0);
-
- for (i = 0; i < num_arrays; i++) {
- k = 0;
- for (p = Z_ARRVAL_PP(arrays[i])->pListHead; p; p = p->pListNext, k++) {
- indirect[k][i] = p;
- }
- }
- for (k = 0; k < array_size; k++)
- indirect[k][num_arrays] = NULL;
-
- /* Do the actual sort magic - bada-bim, bada-boom. */
- zend_qsort(indirect, array_size, sizeof(Bucket **), multisort_compare TSRMLS_CC);
-
- /* Restructure the arrays based on sorted indirect - this is mostly taken from zend_hash_sort() function. */
- HANDLE_BLOCK_INTERRUPTIONS();
- for (i = 0; i < num_arrays; i++) {
- hash = Z_ARRVAL_PP(arrays[i]);
- hash->pListHead = indirect[0][i];;
- hash->pListTail = NULL;
- hash->pInternalPointer = hash->pListHead;
-
- for (k = 0; k < array_size; k++) {
- if (hash->pListTail) {
- hash->pListTail->pListNext = indirect[k][i];
- }
- indirect[k][i]->pListLast = hash->pListTail;
- indirect[k][i]->pListNext = NULL;
- hash->pListTail = indirect[k][i];
- }
-
- p = hash->pListHead;
- k = 0;
- while (p != NULL) {
- if (p->nKeyLength == 0)
- p->h = k++;
- p = p->pListNext;
- }
- hash->nNextFreeElement = array_size;
- zend_hash_rehash(hash);
- }
- HANDLE_UNBLOCK_INTERRUPTIONS();
-
- /* Clean up. */
- for (i = 0; i < array_size; i++)
- efree(indirect[i]);
- efree(indirect);
- for (k = 0; k < MULTISORT_LAST; k++)
- efree(ARRAYG(multisort_flags)[k]);
- efree(arrays);
- efree(args);
- RETURN_TRUE;
-}
-/* }}} */
-
-
-/* {{{ proto mixed array_rand(array input [, int num_req])
- Return key/keys for random entry/entries in the array */
-PHP_FUNCTION(array_rand)
-{
- zval **input, **num_req;
- long randval;
- int num_req_val, num_avail, key_type;
- char *string_key;
- uint string_key_len;
- ulong num_key;
- HashPosition pos;
-
- if (ZEND_NUM_ARGS() < 1 || ZEND_NUM_ARGS() > 2 ||
- zend_get_parameters_ex(ZEND_NUM_ARGS(), &input, &num_req) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- if (Z_TYPE_PP(input) != IS_ARRAY) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "First argument has to be an array");
- return;
- }
-
- num_avail = zend_hash_num_elements(Z_ARRVAL_PP(input));
-
- if (ZEND_NUM_ARGS() > 1) {
- convert_to_long_ex(num_req);
- num_req_val = Z_LVAL_PP(num_req);
- if (num_req_val <= 0 || num_req_val > num_avail) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Second argument has to be between 1 and the number of elements in the array");
- return;
- }
- } else
- num_req_val = 1;
-
- /* Make the return value an array only if we need to pass back more than one result. */
- if (num_req_val > 1) {
- array_init(return_value);
- }
-
- /* We can't use zend_hash_index_find() because the array may have string keys or gaps. */
- zend_hash_internal_pointer_reset_ex(Z_ARRVAL_PP(input), &pos);
- while (num_req_val && (key_type = zend_hash_get_current_key_ex(Z_ARRVAL_PP(input), &string_key, &string_key_len, &num_key, 0, &pos)) != HASH_KEY_NON_EXISTANT) {
-
- randval = php_rand(TSRMLS_C);
-
- if ((double)(randval/(PHP_RAND_MAX+1.0)) < (double)num_req_val/(double)num_avail) {
- /* If we are returning a single result, just do it. */
- if (Z_TYPE_P(return_value) != IS_ARRAY) {
- if (key_type == HASH_KEY_IS_STRING) {
- RETURN_STRINGL(string_key, string_key_len-1, 1);
- } else {
- RETURN_LONG(num_key);
- }
- } else {
- /* Append the result to the return value. */
- if (key_type == HASH_KEY_IS_STRING)
- add_next_index_stringl(return_value, string_key, string_key_len-1, 1);
- else
- add_next_index_long(return_value, num_key);
- }
- num_req_val--;
- }
- num_avail--;
- zend_hash_move_forward_ex(Z_ARRVAL_PP(input), &pos);
- }
-
- if (num_req_val == num_avail) {
- array_data_shuffle(return_value TSRMLS_CC);
- }
-}
-/* }}} */
-
-/* {{{ proto mixed array_sum(array input)
- Returns the sum of the array entries */
-PHP_FUNCTION(array_sum)
-{
- zval **input,
- **entry,
- entry_n;
- int argc = ZEND_NUM_ARGS();
- HashPosition pos;
- double dval;
-
- if (argc != 1 || zend_get_parameters_ex(argc, &input) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- if (Z_TYPE_PP(input) != IS_ARRAY) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "The argument should be an array");
- return;
- }
-
- ZVAL_LONG(return_value, 0);
-
- for (zend_hash_internal_pointer_reset_ex(Z_ARRVAL_PP(input), &pos);
- zend_hash_get_current_data_ex(Z_ARRVAL_PP(input), (void **)&entry, &pos) == SUCCESS;
- zend_hash_move_forward_ex(Z_ARRVAL_PP(input), &pos)) {
-
- if (Z_TYPE_PP(entry) == IS_ARRAY || Z_TYPE_PP(entry) == IS_OBJECT)
- continue;
-
- entry_n = **entry;
- zval_copy_ctor(&entry_n);
- convert_scalar_to_number(&entry_n TSRMLS_CC);
-
- if (Z_TYPE(entry_n) == IS_LONG && Z_TYPE_P(return_value) == IS_LONG) {
- dval = (double)Z_LVAL_P(return_value) + (double)Z_LVAL(entry_n);
- if ( (double)LONG_MIN <= dval && dval <= (double)LONG_MAX ) {
- Z_LVAL_P(return_value) += Z_LVAL(entry_n);
- continue;
- }
- }
- convert_to_double(return_value);
- convert_to_double(&entry_n);
- Z_DVAL_P(return_value) += Z_DVAL(entry_n);
- }
-}
-
-/* }}} */
-
-/* {{{ proto mixed array_reduce(array input, mixed callback [, int initial])
- Iteratively reduce the array to a single value via the callback. */
-PHP_FUNCTION(array_reduce)
-{
- zval **input, **callback, **initial;
- zval **args[2];
- zval **operand;
- zval *result = NULL;
- zval *retval;
- zend_fcall_info_cache fci_cache = empty_fcall_info_cache;
- char *callback_name;
- HashPosition pos;
- HashTable *htbl;
-
- if (ZEND_NUM_ARGS() < 2 || ZEND_NUM_ARGS() > 3 ||
- zend_get_parameters_ex(ZEND_NUM_ARGS(), &input, &callback, &initial) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- if (Z_TYPE_PP(input) != IS_ARRAY) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "The first argument should be an array");
- return;
- }
-
- if (!zend_is_callable(*callback, 0, &callback_name)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "The second argument, '%s', should be a valid callback", callback_name);
- efree(callback_name);
- return;
- }
- efree(callback_name);
-
- if (ZEND_NUM_ARGS() > 2) {
- result = *initial;
- } else {
- MAKE_STD_ZVAL(result);
- ZVAL_NULL(result);
- }
-
- /* (zval **)input points to an element of argument stack
- * the base pointer of which is subject to change.
- * thus we need to keep the pointer to the hashtable for safety */
-
- htbl = Z_ARRVAL_PP(input);
-
- if (zend_hash_num_elements(htbl) == 0) {
- if (result) {
- *return_value = *result;
- zval_copy_ctor(return_value);
- }
- return;
- }
-
- zend_hash_internal_pointer_reset_ex(htbl, &pos);
- while (zend_hash_get_current_data_ex(htbl, (void **)&operand, &pos) == SUCCESS) {
- if (result) {
- zend_fcall_info fci;
-
- args[0] = &result;
- args[1] = operand;
-
- fci.size = sizeof(fci);
- fci.function_table = EG(function_table);
- fci.function_name = *callback;
- fci.symbol_table = NULL;
- fci.object_pp = NULL;
- fci.retval_ptr_ptr = &retval;
- fci.param_count = 2;
- fci.params = args;
- fci.no_separation = 0;
-
- if (zend_call_function(&fci, &fci_cache TSRMLS_CC) == SUCCESS && retval) {
- zval_ptr_dtor(&result);
- result = retval;
- } else {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "An error occurred while invoking the reduction callback");
- return;
- }
- } else {
- result = *operand;
- zval_add_ref(&result);
- }
-
- zend_hash_move_forward_ex(htbl, &pos);
- }
-
- *return_value = *result;
- zval_copy_ctor(return_value);
- zval_ptr_dtor(&result);
-}
-/* }}} */
-
-
-/* {{{ proto array array_filter(array input [, mixed callback])
- Filters elements from the array via the callback. */
-PHP_FUNCTION(array_filter)
-{
- zval **input, **callback = NULL;
- zval **operand;
- zval **args[1];
- zval *retval = NULL;
- char *callback_name;
- char *string_key;
- zend_fcall_info_cache fci_cache = empty_fcall_info_cache;
- uint string_key_len;
- ulong num_key;
- HashPosition pos;
-
- if (ZEND_NUM_ARGS() < 1 || ZEND_NUM_ARGS() > 2 ||
- zend_get_parameters_ex(ZEND_NUM_ARGS(), &input, &callback) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- if (Z_TYPE_PP(input) != IS_ARRAY) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "The first argument should be an array");
- return;
- }
-
- if (ZEND_NUM_ARGS() > 1) {
- if (!zend_is_callable(*callback, 0, &callback_name)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "The second argument, '%s', should be a valid callback", callback_name);
- efree(callback_name);
- return;
- }
- efree(callback_name);
- }
-
- array_init(return_value);
- if (zend_hash_num_elements(Z_ARRVAL_PP(input)) == 0) {
- return;
- }
-
- for (zend_hash_internal_pointer_reset_ex(Z_ARRVAL_PP(input), &pos);
- zend_hash_get_current_data_ex(Z_ARRVAL_PP(input), (void **)&operand, &pos) == SUCCESS;
- zend_hash_move_forward_ex(Z_ARRVAL_PP(input), &pos)) {
-
- if (callback) {
- zend_fcall_info fci;
-
- args[0] = operand;
-
- fci.size = sizeof(fci);
- fci.function_table = EG(function_table);
- fci.function_name = *callback;
- fci.symbol_table = NULL;
- fci.object_pp = NULL;
- fci.retval_ptr_ptr = &retval;
- fci.param_count = 1;
- fci.params = args;
- fci.no_separation = 0;
-
- if (zend_call_function(&fci, &fci_cache TSRMLS_CC) == SUCCESS && retval) {
- if (!zend_is_true(retval)) {
- zval_ptr_dtor(&retval);
- continue;
- } else {
- zval_ptr_dtor(&retval);
- }
- } else {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "An error occurred while invoking the filter callback");
- return;
- }
- } else if (!zend_is_true(*operand)) {
- continue;
- }
-
- zval_add_ref(operand);
- switch (zend_hash_get_current_key_ex(Z_ARRVAL_PP(input), &string_key, &string_key_len, &num_key, 0, &pos)) {
- case HASH_KEY_IS_STRING:
- zend_hash_update(Z_ARRVAL_P(return_value), string_key, string_key_len, operand, sizeof(zval *), NULL);
- break;
-
- case HASH_KEY_IS_LONG:
- zend_hash_index_update(Z_ARRVAL_P(return_value), num_key, operand, sizeof(zval *), NULL);
- break;
- }
- }
-}
-/* }}} */
-
-
-/* {{{ proto array array_map(mixed callback, array input1 [, array input2 ,...])
- Applies the callback to the elements in given arrays. */
-PHP_FUNCTION(array_map)
-{
- zval ***pargs = NULL;
- zval ***params;
- zval *callback;
- zval *result, *null;
- HashPosition *array_pos;
- zval **args;
- char *callback_name;
- zend_fcall_info_cache fci_cache = empty_fcall_info_cache;
- int i, k, maxlen = 0;
- int *array_len;
-
- if (ZEND_NUM_ARGS() < 2) {
- WRONG_PARAM_COUNT;
- }
-
- RETVAL_NULL();
-
- pargs = (zval ***)safe_emalloc(ZEND_NUM_ARGS(), sizeof(zval **), 0);
- if (zend_get_parameters_array_ex(ZEND_NUM_ARGS(), pargs) == FAILURE) {
- efree(pargs);
- WRONG_PARAM_COUNT;
- }
-
- callback = *pargs[0];
-
- if (Z_TYPE_P(callback) != IS_NULL) {
- if (!zend_is_callable(callback, 0, &callback_name)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "The first argument, '%s', should be either NULL or a valid callback", callback_name);
- efree(callback_name);
- efree(pargs);
- return;
- }
- efree(callback_name);
- }
-
- args = (zval **)safe_emalloc(ZEND_NUM_ARGS(), sizeof(zval *), 0);
- array_len = (int *)safe_emalloc(ZEND_NUM_ARGS(), sizeof(int), 0);
- array_pos = (HashPosition *)safe_emalloc(ZEND_NUM_ARGS(), sizeof(HashPosition), 0);
-
- for (i = 1; i < ZEND_NUM_ARGS(); i++) {
- if (Z_TYPE_PP(pargs[i]) != IS_ARRAY) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Argument #%d should be an array", i + 1);
- efree(pargs);
- efree(args);
- efree(array_len);
- efree(array_pos);
- return;
- }
- args[i] = *pargs[i];
- array_len[i] = zend_hash_num_elements(Z_ARRVAL_PP(pargs[i]));
- if (array_len[i] > maxlen) {
- maxlen = array_len[i];
- }
- zend_hash_internal_pointer_reset_ex(Z_ARRVAL_PP(pargs[i]), &array_pos[i]);
- }
-
- efree(pargs);
-
- /* Short-circuit: if no callback and only one array, just return it. */
- if (Z_TYPE_P(callback) == IS_NULL && ZEND_NUM_ARGS() == 2) {
- *return_value = *args[1];
- zval_copy_ctor(return_value);
- efree(array_len);
- efree(array_pos);
- efree(args);
- return;
- }
-
- array_init(return_value);
- params = (zval ***)safe_emalloc(ZEND_NUM_ARGS(), sizeof(zval **), 0);
- MAKE_STD_ZVAL(null);
- ZVAL_NULL(null);
-
- /* We iterate through all the arrays at once. */
- for (k = 0; k < maxlen; k++) {
- uint str_key_len;
- ulong num_key;
- char *str_key;
- int key_type = 0;
-
- /*
- * If no callback, the result will be an array, consisting of current
- * entries from all arrays.
- */
- if (Z_TYPE_P(callback) == IS_NULL) {
- MAKE_STD_ZVAL(result);
- array_init(result);
- }
-
- for (i = 1; i < ZEND_NUM_ARGS(); i++) {
- /*
- * If this array still hash elements, add the current one to the
- * parameter list, otherwise use null value.
- */
- if (k < array_len[i]) {
- zend_hash_get_current_data_ex(Z_ARRVAL_P(args[i]), (void **)&params[i], &array_pos[i]);
-
- /*
- * It is safe to store only last value of key type, because
- * this loop will run just once if there is only 1 array.
- */
- if (ZEND_NUM_ARGS() == 2) {
- key_type = zend_hash_get_current_key_ex(Z_ARRVAL_P(args[1]), &str_key, &str_key_len, &num_key, 0, &array_pos[i]);
- }
-
- zend_hash_move_forward_ex(Z_ARRVAL_P(args[i]), &array_pos[i]);
- } else {
- params[i] = &null;
- }
-
- if (Z_TYPE_P(callback) == IS_NULL) {
- zval_add_ref(params[i]);
- add_next_index_zval(result, *params[i]);
- }
- }
-
- if (Z_TYPE_P(callback) != IS_NULL) {
- zend_fcall_info fci;
-
- fci.size = sizeof(fci);
- fci.function_table = EG(function_table);
- fci.function_name = callback;
- fci.symbol_table = NULL;
- fci.object_pp = NULL;
- fci.retval_ptr_ptr = &result;
- fci.param_count = ZEND_NUM_ARGS()-1;
- fci.params = &params[1];
- fci.no_separation = 0;
-
- if (!zend_call_function(&fci, &fci_cache TSRMLS_CC) == SUCCESS && result) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "An error occurred while invoking the map callback");
- efree(array_len);
- efree(args);
- efree(array_pos);
- zval_dtor(return_value);
- RETURN_NULL();
- }
- }
-
- if (ZEND_NUM_ARGS() > 2) {
- add_next_index_zval(return_value, result);
- } else {
- if (key_type == HASH_KEY_IS_STRING) {
- add_assoc_zval_ex(return_value, str_key, str_key_len, result);
- } else {
- add_index_zval(return_value, num_key, result);
- }
- }
- }
-
- zval_ptr_dtor(&null);
- efree(params);
- efree(array_len);
- efree(array_pos);
- efree(args);
-}
-/* }}} */
-
-
-/* {{{ proto bool array_key_exists(mixed key, array search)
- Checks if the given key or index exists in the array */
-PHP_FUNCTION(array_key_exists)
-{
- zval **key, /* key to check for */
- **array; /* array to check in */
-
- if (ZEND_NUM_ARGS() != 2 ||
- zend_get_parameters_ex(ZEND_NUM_ARGS(), &key, &array) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- if (Z_TYPE_PP(array) != IS_ARRAY && Z_TYPE_PP(array) != IS_OBJECT) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "The second argument should be either an array or an object");
- RETURN_FALSE;
- }
-
- switch (Z_TYPE_PP(key)) {
- case IS_STRING:
- if (zend_symtable_exists(HASH_OF(*array), Z_STRVAL_PP(key), Z_STRLEN_PP(key)+1)) {
- RETURN_TRUE;
- }
- RETURN_FALSE;
- case IS_LONG:
- if (zend_hash_index_exists(HASH_OF(*array), Z_LVAL_PP(key))) {
- RETURN_TRUE;
- }
- RETURN_FALSE;
- case IS_NULL:
- if (zend_hash_exists(HASH_OF(*array), "", 1)) {
- RETURN_TRUE;
- }
- RETURN_FALSE;
-
- default:
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "The first argument should be either a string or an integer");
- RETURN_FALSE;
- }
-
-}
-/* }}} */
-
-
-/* {{{ proto array array_chunk(array input, int size [, bool preserve_keys])
- Split array into chunks */
-PHP_FUNCTION(array_chunk)
-{
- int argc = ZEND_NUM_ARGS(), key_type;
- long size, current = 0;
- char *str_key;
- uint str_key_len;
- ulong num_key;
- zend_bool preserve_keys = 0;
- zval *input = NULL;
- zval *chunk = NULL;
- zval **entry;
- HashPosition pos;
-
- if (zend_parse_parameters(argc TSRMLS_CC, "al|b", &input, &size, &preserve_keys) == FAILURE) {
- return;
- }
- /* Do bounds checking for size parameter. */
- if (size < 1) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Size parameter expected to be greater than 0");
- return;
- }
-
- array_init(return_value);
-
- zend_hash_internal_pointer_reset_ex(Z_ARRVAL_P(input), &pos);
- while (zend_hash_get_current_data_ex(Z_ARRVAL_P(input), (void**)&entry, &pos) == SUCCESS) {
- /* If new chunk, create and initialize it. */
- if (!chunk) {
- MAKE_STD_ZVAL(chunk);
- array_init(chunk);
- }
-
- /* Add entry to the chunk, preserving keys if necessary. */
- zval_add_ref(entry);
-
- if (preserve_keys) {
- key_type = zend_hash_get_current_key_ex(Z_ARRVAL_P(input), &str_key,
- &str_key_len, &num_key, 0, &pos);
- if (key_type == HASH_KEY_IS_STRING) {
- add_assoc_zval_ex(chunk, str_key, str_key_len, *entry);
- } else {
- add_index_zval(chunk, num_key, *entry);
- }
- } else {
- add_next_index_zval(chunk, *entry);
- }
-
- /*
- * If reached the chunk size, add it to the result array, and reset the
- * pointer.
- */
- if (!(++current % size)) {
- add_next_index_zval(return_value, chunk);
- chunk = NULL;
- }
-
- zend_hash_move_forward_ex(Z_ARRVAL_P(input), &pos);
- }
-
- /* Add the final chunk if there is one. */
- if (chunk) {
- add_next_index_zval(return_value, chunk);
- }
-}
-/* }}} */
-
-/* {{{ proto array array_combine(array keys, array values)
- Creates an array by using the elements of the first parameter as keys and the elements of the second as correspoding keys */
-PHP_FUNCTION(array_combine)
-{
- zval *values, *keys;
- HashPosition pos_values, pos_keys;
- zval **entry_keys, **entry_values;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "aa", &keys, &values) == FAILURE) {
- return;
- }
-
- if (zend_hash_num_elements(Z_ARRVAL_P(keys)) == 0 || zend_hash_num_elements(Z_ARRVAL_P(values)) == 0) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Both parameters should have number of elements at least 0");
- RETURN_FALSE;
- }
-
-
- if (zend_hash_num_elements(Z_ARRVAL_P(keys)) != zend_hash_num_elements(Z_ARRVAL_P(values))) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Both parameters should have equal number of elements");
- RETURN_FALSE;
- }
-
- array_init(return_value);
-
- zend_hash_internal_pointer_reset_ex(Z_ARRVAL_P(keys), &pos_keys);
- zend_hash_internal_pointer_reset_ex(Z_ARRVAL_P(values), &pos_values);
- while (zend_hash_get_current_data_ex(Z_ARRVAL_P(keys), (void **)&entry_keys, &pos_keys) == SUCCESS &&
- zend_hash_get_current_data_ex(Z_ARRVAL_P(values), (void **)&entry_values, &pos_values) == SUCCESS) {
- if (Z_TYPE_PP(entry_keys) == IS_STRING) {
- zval_add_ref(entry_values);
- add_assoc_zval(return_value, Z_STRVAL_PP(entry_keys), *entry_values);
- } else if (Z_TYPE_PP(entry_keys) == IS_LONG) {
- zval_add_ref(entry_values);
- add_index_zval(return_value, Z_LVAL_PP(entry_keys), *entry_values);
- } else {
- zval key;
-
- key = **entry_keys;
- zval_copy_ctor(&key);
- convert_to_string(&key);
-
- zval_add_ref(entry_values);
- add_assoc_zval(return_value, Z_STRVAL(key), *entry_values);
-
- zval_dtor(&key);
- }
- zend_hash_move_forward_ex(Z_ARRVAL_P(keys), &pos_keys);
- zend_hash_move_forward_ex(Z_ARRVAL_P(values), &pos_values);
- }
-}
-/* }}} */
-
-/*
- * 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/standard/assert.c b/ext/standard/assert.c
deleted file mode 100644
index a7fe21d891..0000000000
--- a/ext/standard/assert.c
+++ /dev/null
@@ -1,295 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Thies C. Arntzen <thies@thieso.net> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-/* {{{ includes/startup/misc */
-
-#include "php.h"
-#include "php_assert.h"
-#include "php_ini.h"
-
-ZEND_BEGIN_MODULE_GLOBALS(assert)
- long active;
- long bail;
- long warning;
- long quiet_eval;
- zval *callback;
-ZEND_END_MODULE_GLOBALS(assert)
-
-ZEND_DECLARE_MODULE_GLOBALS(assert)
-
-#ifdef ZTS
-#define ASSERTG(v) TSRMG(assert_globals_id, zend_assert_globals *, v)
-#else
-#define ASSERTG(v) (assert_globals.v)
-#endif
-
-#define SAFE_STRING(s) ((s)?(s):"")
-
-enum {
- ASSERT_ACTIVE=1,
- ASSERT_CALLBACK,
- ASSERT_BAIL,
- ASSERT_WARNING,
- ASSERT_QUIET_EVAL
-};
-
-static PHP_INI_MH(OnChangeCallback)
-{
- if (ASSERTG(callback)) {
- zval_ptr_dtor(&ASSERTG(callback));
- }
-
- if (new_value && (ASSERTG(callback) || new_value_length)) {
- MAKE_STD_ZVAL(ASSERTG(callback));
- ZVAL_STRINGL(ASSERTG(callback), new_value, new_value_length, 1);
- }
-
- return SUCCESS;
-}
-
-PHP_INI_BEGIN()
- STD_PHP_INI_ENTRY("assert.active", "1", PHP_INI_ALL, OnUpdateLong, active, zend_assert_globals, assert_globals)
- STD_PHP_INI_ENTRY("assert.bail", "0", PHP_INI_ALL, OnUpdateLong, bail, zend_assert_globals, assert_globals)
- STD_PHP_INI_ENTRY("assert.warning", "1", PHP_INI_ALL, OnUpdateLong, warning, zend_assert_globals, assert_globals)
- PHP_INI_ENTRY ("assert.callback", NULL, PHP_INI_ALL, OnChangeCallback)
- STD_PHP_INI_ENTRY("assert.quiet_eval", "0", PHP_INI_ALL, OnUpdateLong, quiet_eval, zend_assert_globals, assert_globals)
-PHP_INI_END()
-
-static void php_assert_init_globals(zend_assert_globals *assert_globals_p TSRMLS_DC)
-{
- assert_globals_p->callback = NULL;
-}
-
-PHP_MINIT_FUNCTION(assert)
-{
- ZEND_INIT_MODULE_GLOBALS(assert, php_assert_init_globals, NULL);
-
- REGISTER_INI_ENTRIES();
-
- REGISTER_LONG_CONSTANT("ASSERT_ACTIVE", ASSERT_ACTIVE, CONST_CS|CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("ASSERT_CALLBACK", ASSERT_CALLBACK, CONST_CS|CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("ASSERT_BAIL", ASSERT_BAIL, CONST_CS|CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("ASSERT_WARNING", ASSERT_WARNING, CONST_CS|CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("ASSERT_QUIET_EVAL", ASSERT_QUIET_EVAL, CONST_CS|CONST_PERSISTENT);
-
- return SUCCESS;
-}
-
-PHP_MSHUTDOWN_FUNCTION(assert)
-{
- if (ASSERTG(callback)) {
- zval_ptr_dtor(&ASSERTG(callback));
- ASSERTG(callback) = NULL;
- }
- return SUCCESS;
-}
-
-PHP_RSHUTDOWN_FUNCTION(assert)
-{
- if (ASSERTG(callback)) {
- zval_ptr_dtor(&ASSERTG(callback));
- ASSERTG(callback) = NULL;
- }
-
- return SUCCESS;
-}
-
-PHP_MINFO_FUNCTION(assert)
-{
- DISPLAY_INI_ENTRIES();
-}
-
-/* }}} */
-/* {{{ internal functions */
-/* }}} */
-/* {{{ proto int assert(string|bool assertion)
- Checks if assertion is false */
-
-PHP_FUNCTION(assert)
-{
- zval **assertion;
- int val;
- char *myeval = NULL;
- char *compiled_string_description;
-
- if (! ASSERTG(active)) {
- RETURN_TRUE;
- }
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &assertion) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- if (Z_TYPE_PP(assertion) == IS_STRING) {
- zval retval;
- int old_error_reporting = 0; /* shut up gcc! */
-
- myeval = Z_STRVAL_PP(assertion);
-
- if (ASSERTG(quiet_eval)) {
- old_error_reporting = EG(error_reporting);
- EG(error_reporting) = 0;
- }
-
- compiled_string_description = zend_make_compiled_string_description("assert code" TSRMLS_CC);
- if (zend_eval_string(myeval, &retval, compiled_string_description TSRMLS_CC) == FAILURE) {
- efree(compiled_string_description);
- php_error_docref(NULL TSRMLS_CC, E_ERROR, "Failure evaluating code:\n%s", myeval);
- /* php_error_docref() does not return in this case. */
- }
- efree(compiled_string_description);
-
- if (ASSERTG(quiet_eval)) {
- EG(error_reporting) = old_error_reporting;
- }
-
- convert_to_boolean(&retval);
- val = Z_LVAL(retval);
- } else {
- convert_to_boolean_ex(assertion);
- val = Z_LVAL_PP(assertion);
- }
-
- if (val) {
- RETURN_TRUE;
- }
-
- if (ASSERTG(callback)) {
- zval *args[3];
- zval *retval;
- int i;
- uint lineno = zend_get_executed_lineno(TSRMLS_C);
- char *filename = zend_get_executed_filename(TSRMLS_C);
-
- MAKE_STD_ZVAL(args[0]);
- MAKE_STD_ZVAL(args[1]);
- MAKE_STD_ZVAL(args[2]);
-
- ZVAL_STRING(args[0], SAFE_STRING(filename), 1);
- ZVAL_LONG (args[1], lineno);
- ZVAL_STRING(args[2], SAFE_STRING(myeval), 1);
-
- MAKE_STD_ZVAL(retval);
- ZVAL_FALSE(retval);
-
- /* XXX do we want to check for error here? */
- call_user_function(CG(function_table), NULL, ASSERTG(callback), retval, 3, args TSRMLS_CC);
-
- for (i = 0; i <= 2; i++) {
- zval_ptr_dtor(&(args[i]));
- }
- zval_ptr_dtor(&retval);
- }
-
- if (ASSERTG(warning)) {
- if (myeval) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Assertion \"%s\" failed", myeval);
- } else {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Assertion failed");
- }
- }
-
- if (ASSERTG(bail)) {
- zend_bailout();
- }
-}
-
-/* }}} */
-/* {{{ proto mixed assert_options(int what [, mixed value])
- Set/get the various assert flags */
-
-PHP_FUNCTION(assert_options)
-{
- pval **what, **value;
- int oldint;
- int ac = ZEND_NUM_ARGS();
-
- if (ac < 1 || ac > 2 || zend_get_parameters_ex(ac, &what, &value) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long_ex(what);
-
- switch (Z_LVAL_PP(what)) {
- case ASSERT_ACTIVE:
- oldint = ASSERTG(active);
- if (ac == 2) {
- convert_to_long_ex(value);
- ASSERTG(active) = Z_LVAL_PP(value);
- }
- RETURN_LONG(oldint);
- break;
-
- case ASSERT_BAIL:
- oldint = ASSERTG(bail);
- if (ac == 2) {
- convert_to_long_ex(value);
- ASSERTG(bail) = Z_LVAL_PP(value);
- }
- RETURN_LONG(oldint);
- break;
-
- case ASSERT_QUIET_EVAL:
- oldint = ASSERTG(quiet_eval);
- if (ac == 2) {
- convert_to_long_ex(value);
- ASSERTG(quiet_eval) = Z_LVAL_PP(value);
- }
- RETURN_LONG(oldint);
- break;
-
- case ASSERT_WARNING:
- oldint = ASSERTG(warning);
- if (ac == 2) {
- convert_to_long_ex(value);
- ASSERTG(warning) = Z_LVAL_PP(value);
- }
- RETURN_LONG(oldint);
- break;
-
- case ASSERT_CALLBACK:
- if (ac == 2) {
- if (ASSERTG(callback)) {
- zval_ptr_dtor(&ASSERTG(callback));
- }
- ASSERTG(callback) = *value;
- zval_add_ref(value);
- }
- RETURN_TRUE;
- break;
-
- default:
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unknown value %ld", Z_LVAL_PP(what));
- break;
- }
-
- RETURN_FALSE;
-}
-
-/* }}} */
-
-/*
- * 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/standard/base64.c b/ext/standard/base64.c
deleted file mode 100644
index 583710dd53..0000000000
--- a/ext/standard/base64.c
+++ /dev/null
@@ -1,257 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Jim Winstead <jimw@php.net> |
- +----------------------------------------------------------------------+
- */
-/* $Id$ */
-
-#include <string.h>
-
-#include "php.h"
-#include "base64.h"
-
-/* {{{ */
-static const char base64_table[] =
- { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M',
- 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z',
- 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm',
- 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z',
- '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '+', '/', '\0'
- };
-
-static const char base64_pad = '=';
-
-static const short base64_reverse_table[256] = {
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 62, -1, -1, -1, 63,
- 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, -1, -1, -1, -1, -1, -1,
- -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
- 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, -1, -1, -1, -1, -1,
- -1, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40,
- 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
-};
-/* }}} */
-
-/* {{{ php_base64_encode */
-PHPAPI unsigned char *php_base64_encode(const unsigned char *str, int length, int *ret_length)
-{
- const unsigned char *current = str;
- unsigned char *p;
- unsigned char *result;
-
- if ((length + 2) < 0 || ((length + 2) / 3) >= (1 << (sizeof(int) * 8 - 2))) {
- if (ret_length != NULL) {
- *ret_length = 0;
- }
- return NULL;
- }
-
- result = (unsigned char *)safe_emalloc(((length + 2) / 3) * 4, sizeof(char), 1);
- p = result;
-
- while (length > 2) { /* keep going until we have less than 24 bits */
- *p++ = base64_table[current[0] >> 2];
- *p++ = base64_table[((current[0] & 0x03) << 4) + (current[1] >> 4)];
- *p++ = base64_table[((current[1] & 0x0f) << 2) + (current[2] >> 6)];
- *p++ = base64_table[current[2] & 0x3f];
-
- current += 3;
- length -= 3; /* we just handle 3 octets of data */
- }
-
- /* now deal with the tail end of things */
- if (length != 0) {
- *p++ = base64_table[current[0] >> 2];
- if (length > 1) {
- *p++ = base64_table[((current[0] & 0x03) << 4) + (current[1] >> 4)];
- *p++ = base64_table[(current[1] & 0x0f) << 2];
- *p++ = base64_pad;
- } else {
- *p++ = base64_table[(current[0] & 0x03) << 4];
- *p++ = base64_pad;
- *p++ = base64_pad;
- }
- }
- if (ret_length != NULL) {
- *ret_length = (int)(p - result);
- }
- *p = '\0';
- return result;
-}
-/* }}} */
-
-/* {{{ */
-/* generate reverse table (do not set index 0 to 64)
-static unsigned short base64_reverse_table[256];
-#define rt base64_reverse_table
-void php_base64_init()
-{
- char *s = emalloc(10240), *sp;
- char *chp;
- short idx;
-
- for(ch = 0; ch < 256; ch++) {
- chp = strchr(base64_table, ch);
- if(ch && chp) {
- idx = chp - base64_table;
- if (idx >= 64) idx = -1;
- rt[ch] = idx;
- } else {
- rt[ch] = -1;
- }
- }
- sp = s;
- sprintf(sp, "static const short base64_reverse_table[256] = {\n");
- for(ch =0; ch < 256;) {
- sp = s+strlen(s);
- sprintf(sp, "\t% 3d,% 3d,% 3d,% 3d,% 3d,% 3d,% 3d,% 3d,% 3d,% 3d,% 3d,% 3d,% 3d,% 3d,% 3d,% 3d,\n", rt[ch+0], rt[ch+1], rt[ch+2], rt[ch+3], rt[ch+4], rt[ch+5], rt[ch+6], rt[ch+7], rt[ch+8], rt[ch+9], rt[ch+10], rt[ch+11], rt[ch+12], rt[ch+13], rt[ch+14], rt[ch+15]);
- ch += 16;
- }
- sprintf(sp, "};");
- php_error_docref(NULL TSRMLS_CC, E_NOTICE, "Reverse_table:\n%s", s);
- efree(s);
-}
-*/
-/* }}} */
-
-/* {{{ php_base64_decode */
-/* as above, but backwards. :) */
-PHPAPI unsigned char *php_base64_decode(const unsigned char *str, int length, int *ret_length)
-{
- const unsigned char *current = str;
- int ch, i = 0, j = 0, k;
- /* this sucks for threaded environments */
- unsigned char *result;
-
- result = (unsigned char *)emalloc(length + 1);
- if (result == NULL) {
- return NULL;
- }
-
- /* run through the whole string, converting as we go */
- while ((ch = *current++) != '\0' && length-- > 0) {
- if (ch == base64_pad) break;
-
- /* When Base64 gets POSTed, all pluses are interpreted as spaces.
- This line changes them back. It's not exactly the Base64 spec,
- but it is completely compatible with it (the spec says that
- spaces are invalid). This will also save many people considerable
- headache. - Turadg Aleahmad <turadg@wise.berkeley.edu>
- */
-
- if (ch == ' ') ch = '+';
-
- ch = base64_reverse_table[ch];
- if (ch < 0) continue;
-
- switch(i % 4) {
- case 0:
- result[j] = ch << 2;
- break;
- case 1:
- result[j++] |= ch >> 4;
- result[j] = (ch & 0x0f) << 4;
- break;
- case 2:
- result[j++] |= ch >>2;
- result[j] = (ch & 0x03) << 6;
- break;
- case 3:
- result[j++] |= ch;
- break;
- }
- i++;
- }
-
- k = j;
- /* mop things up if we ended on a boundary */
- if (ch == base64_pad) {
- switch(i % 4) {
- case 1:
- efree(result);
- return NULL;
- case 2:
- k++;
- case 3:
- result[k++] = 0;
- }
- }
- if(ret_length) {
- *ret_length = j;
- }
- result[j] = '\0';
- return result;
-}
-/* }}} */
-
-/* {{{ proto string base64_encode(string str)
- Encodes string using MIME base64 algorithm */
-PHP_FUNCTION(base64_encode)
-{
- char *str;
- unsigned char *result;
- int str_len, ret_length;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &str, &str_len) == FAILURE) {
- return;
- }
- result = php_base64_encode(str, str_len, &ret_length);
- if (result != NULL) {
- RETVAL_STRINGL(result, ret_length, 0);
- } else {
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-
-/* {{{ proto string base64_decode(string str)
- Decodes string using MIME base64 algorithm */
-PHP_FUNCTION(base64_decode)
-{
- char *str;
- unsigned char *result;
- int str_len, ret_length;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &str, &str_len) == FAILURE) {
- return;
- }
- result = php_base64_decode(str, str_len, &ret_length);
- if (result != NULL) {
- RETVAL_STRINGL(result, ret_length, 0);
- } else {
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-
-/*
- * 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/standard/base64.h b/ext/standard/base64.h
deleted file mode 100644
index 1da4847b75..0000000000
--- a/ext/standard/base64.h
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Jim Winstead <jimw@php.net> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifndef BASE64_H
-#define BASE64_H
-
-PHP_FUNCTION(base64_decode);
-PHP_FUNCTION(base64_encode);
-
-PHPAPI extern unsigned char *php_base64_encode(const unsigned char *, int, int *);
-PHPAPI extern unsigned char *php_base64_decode(const unsigned char *, int, int *);
-
-#endif /* BASE64_H */
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- */
diff --git a/ext/standard/basic_functions.c b/ext/standard/basic_functions.c
deleted file mode 100644
index c52434ad35..0000000000
--- a/ext/standard/basic_functions.c
+++ /dev/null
@@ -1,3290 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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. |
- +----------------------------------------------------------------------+
- | Authors: Andi Gutmans <andi@zend.com> |
- | Zeev Suraski <zeev@zend.com> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-#include "php.h"
-#include "php_streams.h"
-#include "php_main.h"
-#include "php_globals.h"
-#include "php_ini.h"
-#include "internal_functions_registry.h"
-#include "php_standard.h"
-#include "php_math.h"
-#include "php_http.h"
-#include "php_incomplete_class.h"
-#include "ext/standard/info.h"
-#include "ext/session/php_session.h"
-#include "zend_operators.h"
-#include "ext/standard/dns.h"
-#include "ext/standard/php_uuencode.h"
-
-#ifdef PHP_WIN32
-#include "win32/php_win32_globals.h"
-#endif
-
-typedef struct yy_buffer_state *YY_BUFFER_STATE;
-
-#include "zend.h"
-#include "zend_language_scanner.h"
-#include "zend_language_parser.h"
-
-#include <stdarg.h>
-#include <stdlib.h>
-#include <math.h>
-#include <time.h>
-#include <stdio.h>
-
-#ifndef NETWARE
-#include <netdb.h>
-#else
-/*#include "netware/env.h"*/ /* Temporary */
-#ifdef NEW_LIBC /* Same headers hold good for Winsock and Berkeley sockets */
-#include <netinet/in.h>
-/*#include <arpa/inet.h>*/
-#include <netdb.h>
-#else
-#include <sys/socket.h>
-#endif
-#endif
-
-#if HAVE_ARPA_INET_H
-# include <arpa/inet.h>
-#endif
-
-#if HAVE_UNISTD_H
-# include <unistd.h>
-#endif
-
-#if HAVE_STRING_H
-# include <string.h>
-#else
-# include <strings.h>
-#endif
-
-#if HAVE_LOCALE_H
-# include <locale.h>
-#endif
-
-#if HAVE_SYS_MMAN_H
-# include <sys/mman.h>
-#endif
-
-#ifdef HARTMUT_0
-#include <getopt.h>
-#endif
-
-#include "safe_mode.h"
-
-#ifdef PHP_WIN32
-# include "win32/unistd.h"
-#endif
-
-#ifndef INADDR_NONE
-#define INADDR_NONE ((unsigned long int) -1)
-#endif
-
-#include "zend_globals.h"
-#include "php_globals.h"
-#include "SAPI.h"
-#include "php_ticks.h"
-
-
-#ifdef ZTS
-int basic_globals_id;
-#else
-php_basic_globals basic_globals;
-#endif
-
-#include "php_fopen_wrappers.h"
-#include "streamsfuncs.h"
-
-static
- ZEND_BEGIN_ARG_INFO(first_and_second__args_force_ref, 0)
- ZEND_ARG_PASS_INFO(1)
- ZEND_ARG_PASS_INFO(1)
- ZEND_END_ARG_INFO()
-
-static
- ZEND_BEGIN_ARG_INFO(second_and_third_args_force_ref, 0)
- ZEND_ARG_PASS_INFO(0)
- ZEND_ARG_PASS_INFO(1)
- ZEND_ARG_PASS_INFO(1)
- ZEND_END_ARG_INFO()
-
-static
- ZEND_BEGIN_ARG_INFO(third_and_fourth_args_force_ref, 0)
- ZEND_ARG_PASS_INFO(0)
- ZEND_ARG_PASS_INFO(0)
- ZEND_ARG_PASS_INFO(1)
- ZEND_ARG_PASS_INFO(1)
- ZEND_END_ARG_INFO()
-
-static
- ZEND_BEGIN_ARG_INFO(third_and_rest_force_ref, 1)
- ZEND_ARG_PASS_INFO(0)
- ZEND_ARG_PASS_INFO(0)
- ZEND_ARG_PASS_INFO(1)
- ZEND_END_ARG_INFO()
-
-static
- ZEND_BEGIN_ARG_INFO(first_through_third_args_force_ref, 0)
- ZEND_ARG_PASS_INFO(1)
- ZEND_ARG_PASS_INFO(1)
- ZEND_ARG_PASS_INFO(1)
- ZEND_END_ARG_INFO()
-
-typedef struct _php_shutdown_function_entry {
- zval **arguments;
- int arg_count;
-} php_shutdown_function_entry;
-
-typedef struct _user_tick_function_entry {
- zval **arguments;
- int arg_count;
- int calling;
-} user_tick_function_entry;
-
-/* some prototypes for local functions */
-static void user_shutdown_function_dtor(php_shutdown_function_entry *shutdown_function_entry);
-static void user_tick_function_dtor(user_tick_function_entry *tick_function_entry);
-
-
-function_entry basic_functions[] = {
- PHP_FE(constant, NULL)
- PHP_FE(bin2hex, NULL)
- PHP_FE(sleep, NULL)
- PHP_FE(usleep, NULL)
-#if HAVE_NANOSLEEP
- PHP_FE(time_nanosleep, NULL)
-#endif
- PHP_FE(time, NULL)
- PHP_FE(mktime, NULL)
- PHP_FE(gmmktime, NULL)
-
-#if HAVE_STRFTIME
- PHP_FE(strftime, NULL)
- PHP_FE(gmstrftime, NULL)
-#endif
-
- PHP_FE(strtotime, NULL)
- PHP_FE(date, NULL)
- PHP_FE(idate, NULL)
- PHP_FE(gmdate, NULL)
- PHP_FE(getdate, NULL)
- PHP_FE(localtime, NULL)
- PHP_FE(checkdate, NULL)
-
- PHP_FE(flush, NULL)
- PHP_FE(wordwrap, NULL)
- PHP_FE(htmlspecialchars, NULL)
- PHP_FE(htmlentities, NULL)
- PHP_FE(html_entity_decode, NULL)
- PHP_FE(get_html_translation_table, NULL)
- PHP_FE(sha1, NULL)
- PHP_FE(sha1_file, NULL)
- PHP_NAMED_FE(md5,php_if_md5, NULL)
- PHP_NAMED_FE(md5_file,php_if_md5_file, NULL)
- PHP_NAMED_FE(crc32,php_if_crc32, NULL)
-
- PHP_FE(iptcparse, NULL)
- PHP_FE(iptcembed, NULL)
- PHP_FE(getimagesize, second_arg_force_ref)
- PHP_FE(image_type_to_mime_type, NULL)
-
- PHP_FE(phpinfo, NULL)
- PHP_FE(phpversion, NULL)
- PHP_FE(phpcredits, NULL)
- PHP_FE(php_logo_guid, NULL)
- PHP_FE(php_real_logo_guid, NULL)
- PHP_FE(php_egg_logo_guid, NULL)
- PHP_FE(zend_logo_guid, NULL)
- PHP_FE(php_sapi_name, NULL)
- PHP_FE(php_uname, NULL)
- PHP_FE(php_ini_scanned_files, NULL)
-
- PHP_FE(strnatcmp, NULL)
- PHP_FE(strnatcasecmp, NULL)
- PHP_FE(substr_count, NULL)
- PHP_FE(strspn, NULL)
- PHP_FE(strcspn, NULL)
- PHP_FE(strtok, NULL)
- PHP_FE(strtoupper, NULL)
- PHP_FE(strtolower, NULL)
- PHP_FE(strpos, NULL)
- PHP_FE(stripos, NULL)
- PHP_FE(strrpos, NULL)
- PHP_FE(strripos, NULL)
- PHP_FE(strrev, NULL)
- PHP_FE(hebrev, NULL)
- PHP_FE(hebrevc, NULL)
- PHP_FE(nl2br, NULL)
- PHP_FE(basename, NULL)
- PHP_FE(dirname, NULL)
- PHP_FE(pathinfo, NULL)
- PHP_FE(stripslashes, NULL)
- PHP_FE(stripcslashes, NULL)
- PHP_FE(strstr, NULL)
- PHP_FE(stristr, NULL)
- PHP_FE(strrchr, NULL)
- PHP_FE(str_shuffle, NULL)
- PHP_FE(str_word_count, NULL)
- PHP_FE(str_split, NULL)
- PHP_FE(strpbrk, NULL)
- PHP_FE(substr_compare, NULL)
-
-#ifdef HAVE_STRCOLL
- PHP_FE(strcoll, NULL)
-#endif
-
-#ifdef HAVE_STRFMON
- PHP_FE(money_format, NULL)
-#endif
-
- PHP_FE(substr, NULL)
- PHP_FE(substr_replace, NULL)
- PHP_FE(quotemeta, NULL)
- PHP_FE(ucfirst, NULL)
- PHP_FE(ucwords, NULL)
- PHP_FE(strtr, NULL)
- PHP_FE(addslashes, NULL)
- PHP_FE(addcslashes, NULL)
- PHP_FE(rtrim, NULL)
- PHP_FE(str_replace, fourth_arg_force_ref)
- PHP_FE(str_ireplace, fourth_arg_force_ref)
- PHP_FE(str_repeat, NULL)
- PHP_FE(count_chars, NULL)
- PHP_FE(chunk_split, NULL)
- PHP_FE(trim, NULL)
- PHP_FE(ltrim, NULL)
- PHP_FE(strip_tags, NULL)
- PHP_FE(similar_text, third_arg_force_ref)
- PHP_FE(explode, NULL)
- PHP_FE(implode, NULL)
- PHP_FE(setlocale, NULL)
- PHP_FE(localeconv, NULL)
-
-#if HAVE_NL_LANGINFO
- PHP_FE(nl_langinfo, NULL)
-#endif
-
- PHP_FE(soundex, NULL)
- PHP_FE(levenshtein, NULL)
- PHP_FE(chr, NULL)
- PHP_FE(ord, NULL)
- PHP_FE(parse_str, second_arg_force_ref)
- PHP_FE(str_pad, NULL)
- PHP_FALIAS(chop, rtrim, NULL)
- PHP_FALIAS(strchr, strstr, NULL)
- PHP_NAMED_FE(sprintf, PHP_FN(user_sprintf), NULL)
- PHP_NAMED_FE(printf, PHP_FN(user_printf), NULL)
- PHP_FE(vprintf, NULL)
- PHP_FE(vsprintf, NULL)
- PHP_FE(fprintf, NULL)
- PHP_FE(vfprintf, NULL)
- PHP_FE(sscanf, third_and_rest_force_ref)
- PHP_FE(fscanf, third_and_rest_force_ref)
- PHP_FE(parse_url, NULL)
- PHP_FE(urlencode, NULL)
- PHP_FE(urldecode, NULL)
- PHP_FE(rawurlencode, NULL)
- PHP_FE(rawurldecode, NULL)
- PHP_FE(http_build_query, NULL)
-
-#ifdef HAVE_SYMLINK
- PHP_FE(readlink, NULL)
- PHP_FE(linkinfo, NULL)
- PHP_FE(symlink, NULL)
- PHP_FE(link, NULL)
-#endif
-
- PHP_FE(unlink, NULL)
- PHP_FE(exec, second_and_third_args_force_ref)
- PHP_FE(system, second_arg_force_ref)
- PHP_FE(escapeshellcmd, NULL)
- PHP_FE(escapeshellarg, NULL)
- PHP_FE(passthru, second_arg_force_ref)
- PHP_FE(shell_exec, NULL)
-#ifdef PHP_CAN_SUPPORT_PROC_OPEN
- PHP_FE(proc_open, third_arg_force_ref)
- PHP_FE(proc_close, NULL)
- PHP_FE(proc_terminate, NULL)
- PHP_FE(proc_get_status, NULL)
-#endif
-
-#ifdef HAVE_NICE
- PHP_FE(proc_nice, NULL)
-#endif
-
- PHP_FE(rand, NULL)
- PHP_FE(srand, NULL)
- PHP_FE(getrandmax, NULL)
- PHP_FE(mt_rand, NULL)
- PHP_FE(mt_srand, NULL)
- PHP_FE(mt_getrandmax, NULL)
-
-#if HAVE_GETSERVBYNAME
- PHP_FE(getservbyname, NULL)
-#endif
-
-#if HAVE_GETSERVBYPORT
- PHP_FE(getservbyport, NULL)
-#endif
-
-#if HAVE_GETPROTOBYNAME
- PHP_FE(getprotobyname, NULL)
-#endif
-
-#if HAVE_GETPROTOBYNUMBER
- PHP_FE(getprotobynumber, NULL)
-#endif
-
- PHP_FE(getmyuid, NULL)
- PHP_FE(getmygid, NULL)
- PHP_FE(getmypid, NULL)
- PHP_FE(getmyinode, NULL)
- PHP_FE(getlastmod, NULL)
-
- PHP_FE(base64_decode, NULL)
- PHP_FE(base64_encode, NULL)
-
- PHP_FE(convert_uuencode, NULL)
- PHP_FE(convert_uudecode, NULL)
-
- PHP_FE(abs, NULL)
- PHP_FE(ceil, NULL)
- PHP_FE(floor, NULL)
- PHP_FE(round, NULL)
- PHP_FE(sin, NULL)
- PHP_FE(cos, NULL)
- PHP_FE(tan, NULL)
- PHP_FE(asin, NULL)
- PHP_FE(acos, NULL)
- PHP_FE(atan, NULL)
- PHP_FE(atan2, NULL)
- PHP_FE(sinh, NULL)
- PHP_FE(cosh, NULL)
- PHP_FE(tanh, NULL)
-
-#ifdef HAVE_ASINH
- PHP_FE(asinh, NULL)
-#endif
-#ifdef HAVE_ACOSH
- PHP_FE(acosh, NULL)
-#endif
-#ifdef HAVE_ATANH
- PHP_FE(atanh, NULL)
-#endif
-#if !defined(PHP_WIN32) && !defined(NETWARE)
- PHP_FE(expm1, NULL)
- PHP_FE(log1p, NULL)
-#endif
-
- PHP_FE(pi, NULL)
- PHP_FE(is_finite, NULL)
- PHP_FE(is_nan, NULL)
- PHP_FE(is_infinite, NULL)
- PHP_FE(pow, NULL)
- PHP_FE(exp, NULL)
- PHP_FE(log, NULL)
- PHP_FE(log10, NULL)
- PHP_FE(sqrt, NULL)
-#ifdef HAVE_HYPOT
- PHP_FE(hypot, NULL)
-#endif
- PHP_FE(deg2rad, NULL)
- PHP_FE(rad2deg, NULL)
- PHP_FE(bindec, NULL)
- PHP_FE(hexdec, NULL)
- PHP_FE(octdec, NULL)
- PHP_FE(decbin, NULL)
- PHP_FE(decoct, NULL)
- PHP_FE(dechex, NULL)
- PHP_FE(base_convert, NULL)
- PHP_FE(number_format, NULL)
- PHP_FE(fmod, NULL)
-#ifdef HAVE_INET_NTOP
- PHP_NAMED_FE(inet_ntop, php_inet_ntop, NULL)
-#endif
-#ifdef HAVE_INET_PTON
- PHP_NAMED_FE(inet_pton, php_inet_pton, NULL)
-#endif
- PHP_FE(ip2long, NULL)
- PHP_FE(long2ip, NULL)
-
- PHP_FE(getenv, NULL)
-#ifdef HAVE_PUTENV
- PHP_FE(putenv, NULL)
-#endif
-
-#ifdef HAVE_GETOPT
- PHP_FE(getopt, NULL)
-#endif
-
-#ifdef HAVE_GETTIMEOFDAY
- PHP_FE(microtime, NULL)
- PHP_FE(gettimeofday, NULL)
-#endif
-
-#ifdef HAVE_GETRUSAGE
- PHP_FE(getrusage, NULL)
-#endif
-
-#ifdef HAVE_GETTIMEOFDAY
- PHP_FE(uniqid, NULL)
-#endif
-
- PHP_FE(quoted_printable_decode, NULL)
- PHP_FE(convert_cyr_string, NULL)
- PHP_FE(get_current_user, NULL)
- PHP_FE(set_time_limit, NULL)
- PHP_FE(get_cfg_var, NULL)
- PHP_FALIAS(magic_quotes_runtime, set_magic_quotes_runtime, NULL)
- PHP_FE(set_magic_quotes_runtime, NULL)
- PHP_FE(get_magic_quotes_gpc, NULL)
- PHP_FE(get_magic_quotes_runtime, NULL)
-
- PHP_FE(import_request_variables, NULL)
- PHP_FE(error_log, NULL)
- PHP_FE(call_user_func, NULL)
- PHP_FE(call_user_func_array, NULL)
- PHP_FE(call_user_method, second_arg_force_ref)
- PHP_FE(call_user_method_array, second_arg_force_ref)
- PHP_FE(serialize, NULL)
- PHP_FE(unserialize, NULL)
-
- PHP_FE(var_dump, NULL)
- PHP_FE(var_export, NULL)
- PHP_FE(debug_zval_dump, NULL)
- PHP_FE(print_r, NULL)
-#if MEMORY_LIMIT
- PHP_FE(memory_get_usage, NULL)
-#endif
-
- PHP_FE(register_shutdown_function, NULL)
- PHP_FE(register_tick_function, NULL)
- PHP_FE(unregister_tick_function, NULL)
-
- PHP_FE(highlight_file, NULL)
- PHP_FALIAS(show_source, highlight_file, NULL)
- PHP_FE(highlight_string, NULL)
- PHP_FE(php_strip_whitespace, NULL)
- PHP_FE(php_check_syntax, second_arg_force_ref)
-
- PHP_FE(ini_get, NULL)
- PHP_FE(ini_get_all, NULL)
- PHP_FE(ini_set, NULL)
- PHP_FALIAS(ini_alter, ini_set, NULL)
- PHP_FE(ini_restore, NULL)
- PHP_FE(get_include_path, NULL)
- PHP_FE(set_include_path, NULL)
- PHP_FE(restore_include_path, NULL)
-
- PHP_FE(setcookie, NULL)
- PHP_FE(setrawcookie, NULL)
- PHP_FE(header, NULL)
- PHP_FE(headers_sent, first_and_second__args_force_ref)
- PHP_FE(headers_list, NULL)
-
- PHP_FE(connection_aborted, NULL)
- PHP_FE(connection_status, NULL)
- PHP_FE(ignore_user_abort, NULL)
- PHP_FE(parse_ini_file, NULL)
- PHP_FE(is_uploaded_file, NULL)
- PHP_FE(move_uploaded_file, NULL)
-
- /* functions from dns.c */
- PHP_FE(gethostbyaddr, NULL)
- PHP_FE(gethostbyname, NULL)
- PHP_FE(gethostbynamel, NULL)
-
-#if HAVE_RES_SEARCH && !(defined(__BEOS__) || defined(PHP_WIN32) || defined(NETWARE))
- PHP_FE(dns_check_record, NULL)
- PHP_FALIAS(checkdnsrr, dns_check_record, NULL)
-# if HAVE_DN_SKIPNAME && HAVE_DN_EXPAND
- PHP_FE(dns_get_mx, second_and_third_args_force_ref)
- PHP_FALIAS(getmxrr, dns_get_mx, second_and_third_args_force_ref)
-# endif
-# if HAVE_DNS_FUNCS
- PHP_FE(dns_get_record, third_and_rest_force_ref)
-# endif
-#endif
-
- /* functions from type.c */
- PHP_FE(intval, NULL)
- PHP_FE(floatval, NULL)
- PHP_FALIAS(doubleval, floatval, NULL)
- PHP_FE(strval, NULL)
- PHP_FE(gettype, NULL)
- PHP_FE(settype, first_arg_force_ref)
- PHP_FE(is_null, NULL)
- PHP_FE(is_resource, NULL)
- PHP_FE(is_bool, NULL)
- PHP_FE(is_long, NULL)
- PHP_FE(is_float, NULL)
- PHP_FALIAS(is_int, is_long, NULL)
- PHP_FALIAS(is_integer, is_long, NULL)
- PHP_FALIAS(is_double, is_float, NULL)
- PHP_FALIAS(is_real, is_float, NULL)
- PHP_FE(is_numeric, NULL)
- PHP_FE(is_string, NULL)
- PHP_FE(is_array, NULL)
- PHP_FE(is_object, NULL)
- PHP_FE(is_scalar, NULL)
- PHP_FE(is_callable, third_arg_force_ref)
-
- /* functions from reg.c */
- PHP_FE(ereg, third_arg_force_ref)
- PHP_FE(ereg_replace, NULL)
- PHP_FE(eregi, third_arg_force_ref)
- PHP_FE(eregi_replace, NULL)
- PHP_FE(split, NULL)
- PHP_FE(spliti, NULL)
- PHP_FALIAS(join, implode, NULL)
- PHP_FE(sql_regcase, NULL)
-
- /* functions from dl.c */
- PHP_FE(dl, NULL)
-
- /* functions from file.c */
- PHP_FE(pclose, NULL)
- PHP_FE(popen, NULL)
- PHP_FE(readfile, NULL)
- PHP_FE(rewind, NULL)
- PHP_FE(rmdir, NULL)
- PHP_FE(umask, NULL)
- PHP_FE(fclose, NULL)
- PHP_FE(feof, NULL)
- PHP_FE(fgetc, NULL)
- PHP_FE(fgets, NULL)
- PHP_FE(fgetss, NULL)
- PHP_FE(fread, NULL)
- PHP_NAMED_FE(fopen, php_if_fopen, NULL)
- PHP_FE(fpassthru, NULL)
- PHP_NAMED_FE(ftruncate, php_if_ftruncate, NULL)
- PHP_NAMED_FE(fstat, php_if_fstat, NULL)
- PHP_FE(fseek, NULL)
- PHP_FE(ftell, NULL)
- PHP_FE(fflush, NULL)
- PHP_FE(fwrite, NULL)
- PHP_FALIAS(fputs, fwrite, NULL)
- PHP_FE(mkdir, NULL)
- PHP_FE(rename, NULL)
- PHP_FE(copy, NULL)
- PHP_FE(tempnam, NULL)
- PHP_NAMED_FE(tmpfile, php_if_tmpfile, NULL)
- PHP_FE(file, NULL)
- PHP_FE(file_get_contents, NULL)
- PHP_FE(file_put_contents, NULL)
- PHP_FE(stream_select, first_through_third_args_force_ref)
- PHP_FE(stream_context_create, NULL)
- PHP_FE(stream_context_set_params, NULL)
- PHP_FE(stream_context_set_option, NULL)
- PHP_FE(stream_context_get_options, NULL)
- PHP_FE(stream_context_get_default, NULL)
- PHP_FE(stream_filter_prepend, NULL)
- PHP_FE(stream_filter_append, NULL)
- PHP_FE(stream_socket_client, second_and_third_args_force_ref)
- PHP_FE(stream_socket_server, second_and_third_args_force_ref)
- PHP_FE(stream_socket_accept, third_arg_force_ref)
- PHP_FE(stream_socket_get_name, NULL)
- PHP_FE(stream_socket_recvfrom, fourth_arg_force_ref)
- PHP_FE(stream_socket_sendto, NULL)
- PHP_FE(stream_socket_enable_crypto, NULL)
- PHP_FE(stream_copy_to_stream, NULL)
- PHP_FE(stream_get_contents, NULL)
- PHP_FE(fgetcsv, NULL)
- PHP_FE(flock, third_arg_force_ref)
- PHP_FE(get_meta_tags, NULL)
- PHP_FE(stream_set_write_buffer, NULL)
- PHP_FALIAS(set_file_buffer, stream_set_write_buffer, NULL)
-
- PHP_FE(set_socket_blocking, NULL)
- PHP_FE(stream_set_blocking, NULL)
- PHP_FALIAS(socket_set_blocking, stream_set_blocking, NULL)
-
- PHP_FE(stream_get_meta_data, NULL)
- PHP_FE(stream_get_line, NULL)
- PHP_FE(stream_wrapper_register, NULL)
- PHP_FALIAS(stream_register_wrapper, stream_wrapper_register, NULL)
- PHP_FE(stream_get_wrappers, NULL)
- PHP_FE(stream_get_transports, NULL)
- PHP_FE(get_headers, NULL)
-
-#if HAVE_SYS_TIME_H || defined(PHP_WIN32)
- PHP_FE(stream_set_timeout, NULL)
- PHP_FALIAS(socket_set_timeout, stream_set_timeout, NULL)
-#endif
-
- PHP_FALIAS(socket_get_status, stream_get_meta_data, NULL)
-
-#if (!defined(__BEOS__) && !defined(NETWARE) && HAVE_REALPATH) || defined(ZTS)
- PHP_FE(realpath, NULL)
-#endif
-
-#ifdef HAVE_FNMATCH
- PHP_FE(fnmatch, NULL)
-#endif
-
- /* functions from fsock.c */
- PHP_FE(fsockopen, third_and_fourth_args_force_ref)
- PHP_FE(pfsockopen, third_and_fourth_args_force_ref)
-
- /* functions from pack.c */
- PHP_FE(pack, NULL)
- PHP_FE(unpack, NULL)
-
- /* functions from browscap.c */
- PHP_FE(get_browser, NULL)
-
-#if HAVE_CRYPT
- /* functions from crypt.c */
- PHP_FE(crypt, NULL)
-#endif
-
- /* functions from dir.c */
- PHP_FE(opendir, NULL)
- PHP_FE(closedir, NULL)
- PHP_FE(chdir, NULL)
-
-#if defined(HAVE_CHROOT) && !defined(ZTS) && ENABLE_CHROOT_FUNC
- PHP_FE(chroot, NULL)
-#endif
-
- PHP_FE(getcwd, NULL)
- PHP_FE(rewinddir, NULL)
- PHP_NAMED_FE(readdir, php_if_readdir, NULL)
- PHP_FALIAS(dir, getdir, NULL)
- PHP_FE(scandir, NULL)
-#ifdef HAVE_GLOB
- PHP_FE(glob, NULL)
-#endif
- /* functions from filestat.c */
- PHP_FE(fileatime, NULL)
- PHP_FE(filectime, NULL)
- PHP_FE(filegroup, NULL)
- PHP_FE(fileinode, NULL)
- PHP_FE(filemtime, NULL)
- PHP_FE(fileowner, NULL)
- PHP_FE(fileperms, NULL)
- PHP_FE(filesize, NULL)
- PHP_FE(filetype, NULL)
- PHP_FE(file_exists, NULL)
- PHP_FE(is_writable, NULL)
- PHP_FALIAS(is_writeable, is_writable, NULL)
- PHP_FE(is_readable, NULL)
- PHP_FE(is_executable, NULL)
- PHP_FE(is_file, NULL)
- PHP_FE(is_dir, NULL)
- PHP_FE(is_link, NULL)
- PHP_NAMED_FE(stat, php_if_stat, NULL)
- PHP_NAMED_FE(lstat, php_if_lstat, NULL)
- PHP_FE(chown, NULL)
- PHP_FE(chgrp, NULL)
- PHP_FE(chmod, NULL)
-#if HAVE_UTIME
- PHP_FE(touch, NULL)
-#endif
- PHP_FE(clearstatcache, NULL)
- PHP_FE(disk_total_space, NULL)
- PHP_FE(disk_free_space, NULL)
- PHP_FALIAS(diskfreespace, disk_free_space, NULL)
-
- /* functions from mail.c */
-#ifdef HAVE_SENDMAIL
- PHP_FE(mail, NULL)
- PHP_FE(ezmlm_hash, NULL)
-#endif
-
- /* functions from syslog.c */
-#ifdef HAVE_SYSLOG_H
- PHP_FE(openlog, NULL)
- PHP_FE(syslog, NULL)
- PHP_FE(closelog, NULL)
- PHP_FE(define_syslog_variables, NULL)
-#endif
-
- /* functions from lcg.c */
- PHP_FE(lcg_value, NULL)
-
- /* functions from metaphone.c */
- PHP_FE(metaphone, NULL)
-
- /* functions from output.c */
- PHP_FE(ob_start, NULL)
- PHP_FE(ob_flush, NULL)
- PHP_FE(ob_clean, NULL)
- PHP_FE(ob_end_flush, NULL)
- PHP_FE(ob_end_clean, NULL)
- PHP_FE(ob_get_flush, NULL)
- PHP_FE(ob_get_clean, NULL)
- PHP_FE(ob_get_length, NULL)
- PHP_FE(ob_get_level, NULL)
- PHP_FE(ob_get_status, NULL)
- PHP_FE(ob_get_contents, NULL)
- PHP_FE(ob_implicit_flush, NULL)
- PHP_FE(ob_list_handlers, NULL)
-
- /* functions from array.c */
- PHP_FE(ksort, first_arg_force_ref)
- PHP_FE(krsort, first_arg_force_ref)
- PHP_FE(natsort, first_arg_force_ref)
- PHP_FE(natcasesort, first_arg_force_ref)
- PHP_FE(asort, first_arg_force_ref)
- PHP_FE(arsort, first_arg_force_ref)
- PHP_FE(sort, first_arg_force_ref)
- PHP_FE(rsort, first_arg_force_ref)
- PHP_FE(usort, first_arg_force_ref)
- PHP_FE(uasort, first_arg_force_ref)
- PHP_FE(uksort, first_arg_force_ref)
- PHP_FE(shuffle, first_arg_force_ref)
- PHP_FE(array_walk, first_arg_force_ref)
- PHP_FE(array_walk_recursive, first_arg_force_ref)
- PHP_FE(count, NULL)
- PHP_FE(end, first_arg_force_ref)
- PHP_FE(prev, first_arg_force_ref)
- PHP_FE(next, first_arg_force_ref)
- PHP_FE(reset, first_arg_force_ref)
- PHP_FE(current, first_arg_force_ref)
- PHP_FE(key, first_arg_force_ref)
- PHP_FE(min, NULL)
- PHP_FE(max, NULL)
- PHP_FE(in_array, NULL)
- PHP_FE(array_search, NULL)
- PHP_FE(extract, NULL)
- PHP_FE(compact, NULL)
- PHP_FE(array_fill, NULL)
- PHP_FE(range, NULL)
- PHP_FE(array_multisort, NULL)
- PHP_FE(array_push, first_arg_force_ref)
- PHP_FE(array_pop, first_arg_force_ref)
- PHP_FE(array_shift, first_arg_force_ref)
- PHP_FE(array_unshift, first_arg_force_ref)
- PHP_FE(array_splice, first_arg_force_ref)
- PHP_FE(array_slice, NULL)
- PHP_FE(array_merge, NULL)
- PHP_FE(array_merge_recursive, NULL)
- PHP_FE(array_keys, NULL)
- PHP_FE(array_values, NULL)
- PHP_FE(array_count_values, NULL)
- PHP_FE(array_reverse, NULL)
- PHP_FE(array_reduce, NULL)
- PHP_FE(array_pad, NULL)
- PHP_FE(array_flip, NULL)
- PHP_FE(array_change_key_case, NULL)
- PHP_FE(array_rand, NULL)
- PHP_FE(array_unique, NULL)
- PHP_FE(array_intersect, NULL)
- PHP_FE(array_intersect_key, NULL)
- PHP_FE(array_intersect_ukey, NULL)
- PHP_FE(array_uintersect, NULL)
- PHP_FE(array_intersect_assoc, NULL)
- PHP_FE(array_uintersect_assoc, NULL)
- PHP_FE(array_intersect_uassoc, NULL)
- PHP_FE(array_uintersect_uassoc, NULL)
- PHP_FE(array_diff, NULL)
- PHP_FE(array_diff_key, NULL)
- PHP_FE(array_diff_ukey, NULL)
- PHP_FE(array_udiff, NULL)
- PHP_FE(array_diff_assoc, NULL)
- PHP_FE(array_udiff_assoc, NULL)
- PHP_FE(array_diff_uassoc, NULL)
- PHP_FE(array_udiff_uassoc, NULL)
- PHP_FE(array_sum, NULL)
- PHP_FE(array_filter, NULL)
- PHP_FE(array_map, NULL)
- PHP_FE(array_chunk, NULL)
- PHP_FE(array_combine, NULL)
- PHP_FE(array_key_exists, NULL)
-
- /* aliases from array.c */
- PHP_FALIAS(pos, current, first_arg_force_ref)
- PHP_FALIAS(sizeof, count, NULL)
- PHP_FALIAS(key_exists, array_key_exists, NULL)
-
- /* functions from assert.c */
- PHP_FE(assert, NULL)
- PHP_FE(assert_options, NULL)
-
- /* functions from versioning.c */
- PHP_FE(version_compare, NULL)
-
- /* functions from ftok.c*/
-#if HAVE_FTOK
- PHP_FE(ftok, NULL)
-#endif
-
- PHP_FE(str_rot13, NULL)
- PHP_FE(stream_get_filters, NULL)
- PHP_FE(stream_filter_register, NULL)
- PHP_FE(stream_bucket_make_writeable, NULL)
- PHP_FE(stream_bucket_prepend, NULL)
- PHP_FE(stream_bucket_append, NULL)
- PHP_FE(stream_bucket_new, NULL)
-
- PHP_FE(output_add_rewrite_var, NULL)
- PHP_FE(output_reset_rewrite_vars, NULL)
- PHP_FE(date_sunrise, NULL)
- PHP_FE(date_sunset, NULL)
-
- {NULL, NULL, NULL}
-};
-
-
-static PHP_INI_MH(OnUpdateSafeModeProtectedEnvVars)
-{
- char *protected_vars, *protected_var;
- char *token_buf;
- int dummy = 1;
-
- protected_vars = estrndup(new_value, new_value_length);
- zend_hash_clean(&BG(sm_protected_env_vars));
-
- protected_var = php_strtok_r(protected_vars, ", ", &token_buf);
- while (protected_var) {
- zend_hash_update(&BG(sm_protected_env_vars), protected_var, strlen(protected_var), &dummy, sizeof(int), NULL);
- protected_var = php_strtok_r(NULL, ", ", &token_buf);
- }
- efree(protected_vars);
- return SUCCESS;
-}
-
-
-static PHP_INI_MH(OnUpdateSafeModeAllowedEnvVars)
-{
- if (BG(sm_allowed_env_vars)) {
- free(BG(sm_allowed_env_vars));
- }
- BG(sm_allowed_env_vars) = zend_strndup(new_value, new_value_length);
- return SUCCESS;
-}
-
-
-PHP_INI_BEGIN()
- PHP_INI_ENTRY_EX("safe_mode_protected_env_vars", SAFE_MODE_PROTECTED_ENV_VARS, PHP_INI_SYSTEM, OnUpdateSafeModeProtectedEnvVars, NULL)
- PHP_INI_ENTRY_EX("safe_mode_allowed_env_vars", SAFE_MODE_ALLOWED_ENV_VARS, PHP_INI_SYSTEM, OnUpdateSafeModeAllowedEnvVars, NULL)
- PHP_INI_ENTRY("date.default_latitude", DATE_DEFAULT_LATITUDE, PHP_INI_ALL, NULL)
- PHP_INI_ENTRY("date.default_longitude", DATE_DEFAULT_LONGITUDE, PHP_INI_ALL, NULL)
- PHP_INI_ENTRY("date.sunset_zenith", DATE_SUNSET_ZENITH, PHP_INI_ALL, NULL)
- PHP_INI_ENTRY("date.sunrise_zenith", DATE_SUNRISE_ZENITH, PHP_INI_ALL, NULL)
-PHP_INI_END()
-
-
-zend_module_entry basic_functions_module = {
- STANDARD_MODULE_HEADER,
- "standard", /* extension name */
- basic_functions, /* function list */
- PHP_MINIT(basic), /* process startup */
- PHP_MSHUTDOWN(basic), /* process shutdown */
- PHP_RINIT(basic), /* request startup */
- PHP_RSHUTDOWN(basic), /* request shutdown */
- PHP_MINFO(basic), /* extension info */
- PHP_VERSION, /* extension version */
- STANDARD_MODULE_PROPERTIES
-};
-
-
-#if defined(HAVE_PUTENV)
-static void php_putenv_destructor(putenv_entry *pe)
-{
- if (pe->previous_value) {
-#if _MSC_VER >= 1300
- /* VS.Net has a bug in putenv() when setting a variable that
- * is already set; if the SetEnvironmentVariable() API call
- * fails, the Crt will double free() a string.
- * We try to avoid this by setting our own value first */
- SetEnvironmentVariable(pe->key, "bugbug");
-#endif
- putenv(pe->previous_value);
- } else {
-# if HAVE_UNSETENV
- unsetenv(pe->key);
-# elif defined(PHP_WIN32)
- SetEnvironmentVariable(pe->key, NULL);
-# else
- char **env;
-
- for (env = environ; env != NULL && *env != NULL; env++) {
- if (!strncmp(*env, pe->key, pe->key_len) && (*env)[pe->key_len] == '=') { /* found it */
- *env = "";
- break;
- }
- }
-# endif
- }
-#ifdef HAVE_TZSET
- /* don't forget to reset the various libc globals that
- * we might have changed by an earlier call to tzset(). */
- if (!strncmp(pe->key, "TZ", pe->key_len)) {
- tzset();
- }
-#endif
-
- efree(pe->putenv_string);
- efree(pe->key);
-}
-#endif
-
-
-static void basic_globals_ctor(php_basic_globals *basic_globals_p TSRMLS_DC)
-{
- BG(rand_is_seeded) = 0;
- BG(mt_rand_is_seeded) = 0;
-
- BG(next) = NULL;
- BG(left) = -1;
- BG(user_tick_functions) = NULL;
- BG(user_filter_map) = NULL;
- BG(user_compare_fci_cache) = empty_fcall_info_cache;
- /*BG(array_walk_fci_cache) = empty_fcall_info_cache;*/
- zend_hash_init(&BG(sm_protected_env_vars), 5, NULL, NULL, 1);
- BG(sm_allowed_env_vars) = NULL;
-
- memset(&BG(url_adapt_state), 0, sizeof(BG(url_adapt_state)));
- memset(&BG(url_adapt_state_ex), 0, sizeof(BG(url_adapt_state_ex)));
-
- BG(incomplete_class) = php_create_incomplete_class(TSRMLS_C);
-}
-
-
-static void basic_globals_dtor(php_basic_globals *basic_globals_p TSRMLS_DC)
-{
- zend_hash_destroy(&BG(sm_protected_env_vars));
- if (BG(sm_allowed_env_vars)) {
- free(BG(sm_allowed_env_vars));
- }
- if (BG(url_adapt_state_ex).tags) {
- zend_hash_destroy(BG(url_adapt_state_ex).tags);
- free(BG(url_adapt_state_ex).tags);
- }
-}
-
-
-#define PHP_DOUBLE_INFINITY_HIGH 0x7ff00000
-#define PHP_DOUBLE_QUIET_NAN_HIGH 0xfff80000
-
-PHPAPI double php_get_nan(void)
-{
-#if HAVE_HUGE_VAL_NAN
- return HUGE_VAL + -HUGE_VAL;
-#elif defined(__i386__) || defined(_X86_) || defined(ALPHA) || defined(_ALPHA) || defined(__alpha)
- double val = 0.0;
- ((php_uint32*)&val)[1] = PHP_DOUBLE_QUIET_NAN_HIGH;
- ((php_uint32*)&val)[0] = 0;
- return val;
-#elif HAVE_ATOF_ACCEPTS_NAN
- return atof("NAN");
-#else
- return 0.0/0.0;
-#endif
-}
-
-PHPAPI double php_get_inf(void)
-{
-#if HAVE_HUGE_VAL_INF
- return HUGE_VAL;
-#elif defined(__i386__) || defined(_X86_) || defined(ALPHA) || defined(_ALPHA) || defined(__alpha)
- double val = 0.0;
- ((php_uint32*)&val)[1] = PHP_DOUBLE_INFINITY_HIGH;
- ((php_uint32*)&val)[0] = 0;
- return val;
-#elif HAVE_ATOF_ACCEPTS_INF
- return atof("INF");
-#else
- return 1.0/0.0;
-#endif
-}
-
-PHP_MINIT_FUNCTION(basic)
-{
-#ifdef ZTS
- ts_allocate_id(&basic_globals_id, sizeof(php_basic_globals), (ts_allocate_ctor) basic_globals_ctor, (ts_allocate_dtor) basic_globals_dtor);
-#ifdef PHP_WIN32
- ts_allocate_id(&php_win32_core_globals_id, sizeof(php_win32_core_globals), (ts_allocate_ctor)php_win32_core_globals_ctor, NULL);
-#endif
-#else
- basic_globals_ctor(&basic_globals TSRMLS_CC);
-#ifdef PHP_WIN32
- php_win32_core_globals_ctor(&the_php_win32_core_globals TSRMLS_CC);
-#endif
-#endif
-
- REGISTER_LONG_CONSTANT("CONNECTION_ABORTED", PHP_CONNECTION_ABORTED, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("CONNECTION_NORMAL", PHP_CONNECTION_NORMAL, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("CONNECTION_TIMEOUT", PHP_CONNECTION_TIMEOUT, CONST_CS | CONST_PERSISTENT);
-
- REGISTER_LONG_CONSTANT("INI_USER", ZEND_INI_USER, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("INI_PERDIR", ZEND_INI_PERDIR, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("INI_SYSTEM", ZEND_INI_SYSTEM, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("INI_ALL", ZEND_INI_ALL, CONST_CS | CONST_PERSISTENT);
-
- REGISTER_LONG_CONSTANT("SUNFUNCS_RET_TIMESTAMP", SUNFUNCS_RET_TIMESTAMP, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("SUNFUNCS_RET_STRING", SUNFUNCS_RET_STRING, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("SUNFUNCS_RET_DOUBLE", SUNFUNCS_RET_DOUBLE, CONST_CS | CONST_PERSISTENT);
-
-#define REGISTER_MATH_CONSTANT(x) REGISTER_DOUBLE_CONSTANT(#x, x, CONST_CS | CONST_PERSISTENT)
- REGISTER_MATH_CONSTANT(M_E);
- REGISTER_MATH_CONSTANT(M_LOG2E);
- REGISTER_MATH_CONSTANT(M_LOG10E);
- REGISTER_MATH_CONSTANT(M_LN2);
- REGISTER_MATH_CONSTANT(M_LN10);
- REGISTER_MATH_CONSTANT(M_PI);
- REGISTER_MATH_CONSTANT(M_PI_2);
- REGISTER_MATH_CONSTANT(M_PI_4);
- REGISTER_MATH_CONSTANT(M_1_PI);
- REGISTER_MATH_CONSTANT(M_2_PI);
- REGISTER_MATH_CONSTANT(M_2_SQRTPI);
- REGISTER_MATH_CONSTANT(M_SQRT2);
- REGISTER_MATH_CONSTANT(M_SQRT1_2);
- REGISTER_DOUBLE_CONSTANT("INF", php_get_inf(), CONST_CS | CONST_PERSISTENT);
- REGISTER_DOUBLE_CONSTANT("NAN", php_get_nan(), CONST_CS | CONST_PERSISTENT);
-
-#if ENABLE_TEST_CLASS
- test_class_startup();
-#endif
-
- REGISTER_INI_ENTRIES();
-
- register_phpinfo_constants(INIT_FUNC_ARGS_PASSTHRU);
- register_html_constants(INIT_FUNC_ARGS_PASSTHRU);
- register_string_constants(INIT_FUNC_ARGS_PASSTHRU);
-
- PHP_MINIT(regex)(INIT_FUNC_ARGS_PASSTHRU);
- PHP_MINIT(file)(INIT_FUNC_ARGS_PASSTHRU);
- PHP_MINIT(pack)(INIT_FUNC_ARGS_PASSTHRU);
- PHP_MINIT(browscap)(INIT_FUNC_ARGS_PASSTHRU);
- PHP_MINIT(standard_filters)(INIT_FUNC_ARGS_PASSTHRU);
- PHP_MINIT(user_filters)(INIT_FUNC_ARGS_PASSTHRU);
-
-#if defined(HAVE_LOCALECONV) && defined(ZTS)
- PHP_MINIT(localeconv)(INIT_FUNC_ARGS_PASSTHRU);
-#endif
-
-#if defined(HAVE_NL_LANGINFO)
- PHP_MINIT(nl_langinfo)(INIT_FUNC_ARGS_PASSTHRU);
-#endif
-
-#if HAVE_CRYPT
- PHP_MINIT(crypt)(INIT_FUNC_ARGS_PASSTHRU);
-#endif
-
- PHP_MINIT(lcg)(INIT_FUNC_ARGS_PASSTHRU);
-
- PHP_MINIT(dir)(INIT_FUNC_ARGS_PASSTHRU);
-#ifdef HAVE_SYSLOG_H
- PHP_MINIT(syslog)(INIT_FUNC_ARGS_PASSTHRU);
-#endif
- PHP_MINIT(array)(INIT_FUNC_ARGS_PASSTHRU);
- PHP_MINIT(assert)(INIT_FUNC_ARGS_PASSTHRU);
- PHP_MINIT(url_scanner_ex)(INIT_FUNC_ARGS_PASSTHRU);
-#ifdef PHP_CAN_SUPPORT_PROC_OPEN
- PHP_MINIT(proc_open)(INIT_FUNC_ARGS_PASSTHRU);
-#endif
-
- PHP_MINIT(user_streams)(INIT_FUNC_ARGS_PASSTHRU);
- PHP_MINIT(imagetypes)(INIT_FUNC_ARGS_PASSTHRU);
-
- php_register_url_stream_wrapper("php", &php_stream_php_wrapper TSRMLS_CC);
- php_register_url_stream_wrapper("file", &php_plain_files_wrapper TSRMLS_CC);
-#ifndef PHP_CURL_URL_WRAPPERS
- php_register_url_stream_wrapper("http", &php_stream_http_wrapper TSRMLS_CC);
- php_register_url_stream_wrapper("ftp", &php_stream_ftp_wrapper TSRMLS_CC);
-#endif
-
-#if HAVE_RES_SEARCH && !(defined(__BEOS__)||defined(PHP_WIN32) || defined(NETWARE))
-# if HAVE_DNS_FUNCS
- PHP_MINIT(dns)(INIT_FUNC_ARGS_PASSTHRU);
-# endif
-#endif
-
- return SUCCESS;
-}
-
-
-PHP_MSHUTDOWN_FUNCTION(basic)
-{
-#ifdef ZTS
- ts_free_id(basic_globals_id);
-#ifdef PHP_WIN32
- ts_free_id(php_win32_core_globals_id);
-#endif
-#else
- basic_globals_dtor(&basic_globals TSRMLS_CC);
-#endif
-
- php_unregister_url_stream_wrapper("php" TSRMLS_CC);
-#ifndef PHP_CURL_URL_WRAPPERS
- php_unregister_url_stream_wrapper("http" TSRMLS_CC);
- php_unregister_url_stream_wrapper("ftp" TSRMLS_CC);
-#endif
-
- UNREGISTER_INI_ENTRIES();
-
- PHP_MSHUTDOWN(regex)(SHUTDOWN_FUNC_ARGS_PASSTHRU);
- PHP_MSHUTDOWN(browscap)(SHUTDOWN_FUNC_ARGS_PASSTHRU);
- PHP_MSHUTDOWN(array)(SHUTDOWN_FUNC_ARGS_PASSTHRU);
- PHP_MSHUTDOWN(assert)(SHUTDOWN_FUNC_ARGS_PASSTHRU);
- PHP_MSHUTDOWN(url_scanner_ex)(SHUTDOWN_FUNC_ARGS_PASSTHRU);
- PHP_MSHUTDOWN(file)(SHUTDOWN_FUNC_ARGS_PASSTHRU);
- PHP_MSHUTDOWN(standard_filters)(SHUTDOWN_FUNC_ARGS_PASSTHRU);
-#if defined(HAVE_LOCALECONV) && defined(ZTS)
- PHP_MSHUTDOWN(localeconv)(SHUTDOWN_FUNC_ARGS_PASSTHRU);
-#endif
-
- return SUCCESS;
-}
-
-
-PHP_RINIT_FUNCTION(basic)
-{
- memset(BG(strtok_table), 0, 256);
- BG(strtok_string) = NULL;
- BG(strtok_zval) = NULL;
- BG(locale_string) = NULL;
- BG(user_compare_func_name) = NULL;
- BG(array_walk_func_name) = NULL;
- BG(page_uid) = -1;
- BG(page_gid) = -1;
- BG(page_inode) = -1;
- BG(page_mtime) = -1;
-#ifdef HAVE_PUTENV
- if (zend_hash_init(&BG(putenv_ht), 1, NULL, (void (*)(void *)) php_putenv_destructor, 0) == FAILURE) {
- return FAILURE;
- }
-#endif
- BG(user_shutdown_function_names) = NULL;
-
- PHP_RINIT(lcg)(INIT_FUNC_ARGS_PASSTHRU);
-
- PHP_RINIT(filestat)(INIT_FUNC_ARGS_PASSTHRU);
-#ifdef HAVE_SYSLOG_H
- PHP_RINIT(syslog)(INIT_FUNC_ARGS_PASSTHRU);
-#endif
- PHP_RINIT(dir)(INIT_FUNC_ARGS_PASSTHRU);
- PHP_RINIT(url_scanner_ex)(INIT_FUNC_ARGS_PASSTHRU);
-
- /* Reset magic_quotes_runtime */
- PG(magic_quotes_runtime) = INI_BOOL("magic_quotes_runtime");
-
- /* Setup default context */
- FG(default_context) = NULL;
-
- /* Default to global wrappers only */
- FG(stream_wrappers) = NULL;
-
- /* Default to global filters only */
- FG(stream_filters) = NULL;
-
- return SUCCESS;
-}
-
-
-PHP_RSHUTDOWN_FUNCTION(basic)
-{
- if (BG(strtok_zval)) {
- zval_ptr_dtor(&BG(strtok_zval));
- }
- BG(strtok_string) = NULL;
- BG(strtok_zval) = NULL;
-#ifdef HAVE_PUTENV
- zend_hash_destroy(&BG(putenv_ht));
-#endif
-
- /* Check if locale was changed and change it back
- to the value in startup environment */
- if (BG(locale_string) != NULL) {
- setlocale(LC_ALL, "C");
- setlocale(LC_CTYPE, "");
- }
- STR_FREE(BG(locale_string));
-
- if (FG(stream_wrappers)) {
- zend_hash_destroy(FG(stream_wrappers));
- efree(FG(stream_wrappers));
- FG(stream_wrappers) = NULL;
- }
-
- if (FG(stream_filters)) {
- zend_hash_destroy(FG(stream_filters));
- efree(FG(stream_filters));
- FG(stream_filters) = NULL;
- }
-
- PHP_RSHUTDOWN(filestat)(SHUTDOWN_FUNC_ARGS_PASSTHRU);
-#ifdef HAVE_SYSLOG_H
- PHP_RSHUTDOWN(syslog)(SHUTDOWN_FUNC_ARGS_PASSTHRU);
-#endif
- PHP_RSHUTDOWN(assert)(SHUTDOWN_FUNC_ARGS_PASSTHRU);
- PHP_RSHUTDOWN(url_scanner_ex)(SHUTDOWN_FUNC_ARGS_PASSTHRU);
- PHP_RSHUTDOWN(streams)(SHUTDOWN_FUNC_ARGS_PASSTHRU);
-#ifdef PHP_WIN32
- PHP_RSHUTDOWN(win32_core_globals)(SHUTDOWN_FUNC_ARGS_PASSTHRU);
-#endif
-
- if (BG(user_tick_functions)) {
- zend_llist_destroy(BG(user_tick_functions));
- efree(BG(user_tick_functions));
- BG(user_tick_functions) = NULL;
- }
-
- PHP_RSHUTDOWN(user_filters)(SHUTDOWN_FUNC_ARGS_PASSTHRU);
-
- return SUCCESS;
-}
-
-
-PHP_MINFO_FUNCTION(basic)
-{
- php_info_print_table_start();
- PHP_MINFO(regex)(ZEND_MODULE_INFO_FUNC_ARGS_PASSTHRU);
- PHP_MINFO(dl)(ZEND_MODULE_INFO_FUNC_ARGS_PASSTHRU);
- PHP_MINFO(mail)(ZEND_MODULE_INFO_FUNC_ARGS_PASSTHRU);
- php_info_print_table_end();
- PHP_MINFO(assert)(ZEND_MODULE_INFO_FUNC_ARGS_PASSTHRU);
-}
-
-
-/* {{{ proto mixed constant(string const_name)
- Given the name of a constant this function will return the constants associated value */
-PHP_FUNCTION(constant)
-{
- zval **const_name;
-
- if (ZEND_NUM_ARGS() != 1 ||
- zend_get_parameters_ex(1, &const_name) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex(const_name);
-
- if (!zend_get_constant(Z_STRVAL_PP(const_name), Z_STRLEN_PP(const_name), return_value TSRMLS_CC)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Couldn't find constant %s", Z_STRVAL_PP(const_name));
- RETURN_NULL();
- }
-}
-/* }}} */
-
-#ifdef HAVE_INET_NTOP
-/* {{{ proto string inet_ntop(string in_addr)
- Converts a packed inet address to a human readable IP address string */
-PHP_NAMED_FUNCTION(php_inet_ntop)
-{
- char *address;
- int address_len, af = AF_INET;
- char buffer[40];
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &address, &address_len) == FAILURE) {
- RETURN_FALSE;
- }
-
-#ifdef HAVE_IPV6
- if (address_len == 16) {
- af = AF_INET6;
- } else
-#endif
- if (address_len != 4) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid in_addr value");
- RETURN_FALSE;
- }
-
- if (!inet_ntop(af, address, buffer, sizeof(buffer))) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "An unknown error occured");
- RETURN_FALSE;
- }
-
- RETURN_STRING(buffer, 1);
-}
-/* }}} */
-#endif /* HAVE_INET_NTOP */
-
-#ifdef HAVE_INET_PTON
-/* {{{ proto string inet_pton(string ip_address)
- Converts a human readable IP address to a packed binary string */
-PHP_NAMED_FUNCTION(php_inet_pton)
-{
- int ret, af = AF_INET;
- char *address;
- int address_len;
- char buffer[17];
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &address, &address_len) == FAILURE) {
- RETURN_FALSE;
- }
-
- memset(buffer, 0, sizeof(buffer));
-
-#ifdef HAVE_IPV6
- if (strchr(address, ':')) {
- af = AF_INET6;
- } else
-#endif
- if (!strchr(address, '.')) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unrecognized address %s", address);
- RETURN_FALSE;
- }
-
- ret = inet_pton(af, address, buffer);
-
- if (ret <= 0) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unrecognized address %s", address);
- RETURN_FALSE;
- }
-
- RETURN_STRINGL(buffer, af == AF_INET ? 4 : 16, 1);
-}
-/* }}} */
-#endif /* HAVE_INET_PTON */
-
-
-
-/* {{{ proto int ip2long(string ip_address)
- Converts a string containing an (IPv4) Internet Protocol dotted address into a proper address */
-PHP_FUNCTION(ip2long)
-{
- zval **str;
- unsigned long int ip;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &str) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_string_ex(str);
-
- if (Z_STRLEN_PP(str) == 0 || (ip = inet_addr(Z_STRVAL_PP(str))) == INADDR_NONE) {
- /* the only special case when we should return -1 ourselves,
- * because inet_addr() considers it wrong.
- */
- if (!memcmp(Z_STRVAL_PP(str), "255.255.255.255", Z_STRLEN_PP(str))) {
- RETURN_LONG(-1);
- }
-
- RETURN_FALSE;
- }
-
- RETURN_LONG(ntohl(ip));
-}
-/* }}} */
-
-/* {{{ proto string long2ip(int proper_address)
- Converts an (IPv4) Internet network address into a string in Internet standard dotted format */
-PHP_FUNCTION(long2ip)
-{
- zval **num;
- unsigned long n;
- struct in_addr myaddr;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &num) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex(num);
-
- n = strtoul(Z_STRVAL_PP(num), NULL, 0);
-
- myaddr.s_addr = htonl(n);
- RETURN_STRING(inet_ntoa(myaddr), 1);
-}
-/* }}} */
-
-
-/********************
- * System Functions *
- ********************/
-
-/* {{{ proto string getenv(string varname)
- Get the value of an environment variable */
-PHP_FUNCTION(getenv)
-{
- char *ptr, *str;
- int str_len;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &str, &str_len) == FAILURE) {
- RETURN_FALSE;
- }
- ptr = sapi_getenv(str, str_len TSRMLS_CC);
- if (! ptr) {
- ptr = getenv(str);
- }
- if (ptr) {
- RETURN_STRING(ptr, 1);
- }
- RETURN_FALSE;
-}
-/* }}} */
-
-#ifdef HAVE_PUTENV
-/* {{{ proto bool putenv(string setting)
- Set the value of an environment variable */
-PHP_FUNCTION(putenv)
-{
- pval **str;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &str) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex(str);
-
- if (Z_STRVAL_PP(str) && *(Z_STRVAL_PP(str))) {
- char *p, **env;
- putenv_entry pe;
-
- pe.putenv_string = estrndup(Z_STRVAL_PP(str), Z_STRLEN_PP(str));
- pe.key = estrndup(Z_STRVAL_PP(str), Z_STRLEN_PP(str));
- if ((p = strchr(pe.key, '='))) { /* nullify the '=' if there is one */
- *p = '\0';
- }
- pe.key_len = strlen(pe.key);
-
- if (PG(safe_mode)) {
- /* Check the protected list */
- if (zend_hash_exists(&BG(sm_protected_env_vars), pe.key, pe.key_len)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Safe Mode warning: Cannot override protected environment variable '%s'", pe.key);
- efree(pe.putenv_string);
- efree(pe.key);
- RETURN_FALSE;
- }
-
- /* Check the allowed list */
- if (BG(sm_allowed_env_vars) && *BG(sm_allowed_env_vars)) {
- char *allowed_env_vars = estrdup(BG(sm_allowed_env_vars));
- char *allowed_prefix = strtok(allowed_env_vars, ", ");
- zend_bool allowed = 0;
-
- while (allowed_prefix) {
- if (!strncmp(allowed_prefix, pe.key, strlen(allowed_prefix))) {
- allowed = 1;
- break;
- }
- allowed_prefix = strtok(NULL, ", ");
- }
- efree(allowed_env_vars);
- if (!allowed) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Safe Mode warning: Cannot set environment variable '%s' - it's not in the allowed list", pe.key);
- efree(pe.putenv_string);
- efree(pe.key);
- RETURN_FALSE;
- }
- }
- }
-
- zend_hash_del(&BG(putenv_ht), pe.key, pe.key_len+1);
-
- /* find previous value */
- pe.previous_value = NULL;
- for (env = environ; env != NULL && *env != NULL; env++) {
- if (!strncmp(*env, pe.key, pe.key_len) && (*env)[pe.key_len] == '=') { /* found it */
- pe.previous_value = *env;
- break;
- }
- }
-
-#if _MSC_VER >= 1300
- /* VS.Net has a bug in putenv() when setting a variable that
- * is already set; if the SetEnvironmentVariable() API call
- * fails, the Crt will double free() a string.
- * We try to avoid this by setting our own value first */
- SetEnvironmentVariable(pe.key, "bugbug");
-#endif
-
- if (putenv(pe.putenv_string) == 0) { /* success */
- zend_hash_add(&BG(putenv_ht), pe.key, pe.key_len+1, (void **) &pe, sizeof(putenv_entry), NULL);
-#ifdef HAVE_TZSET
- if (!strncmp(pe.key, "TZ", pe.key_len)) {
- tzset();
- }
-#endif
- RETURN_TRUE;
- } else {
- efree(pe.putenv_string);
- efree(pe.key);
- RETURN_FALSE;
- }
- }
-
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid parameter syntax.");
- RETURN_FALSE;
-}
-/* }}} */
-#endif
-
-#ifdef HAVE_GETOPT
-/* {{{ free_argv
- Free the memory allocated to an argv array. */
-static void free_argv(char **argv, int argc)
-{
- int i;
-
- if (argv) {
- for (i = 0; i < argc; i++) {
- if (argv[i]) {
- efree(argv[i]);
- }
- }
- efree(argv);
- }
-}
-/* }}} */
-
-#ifdef HARTMUT_0
-/* {{{ free_longopts
- Free the memory allocated to an longopt array. */
-static void free_longopts(struct option *longopts)
-{
- struct option *p;
-
- if(longopts) {
- for(p=longopts; p->name; p++) {
- efree((char *)(p->name));
- }
-
- efree(longopts);
- }
-}
-/* }}} */
-#endif
-
-/* {{{ proto array getopt(string options [, array longopts])
- Get options from the command line argument list */
-PHP_FUNCTION(getopt)
-{
- char *options = NULL, **argv = NULL;
- char opt[2] = { '\0' };
- char *optname;
- int argc = 0, options_len = 0, o;
- zval *val, **args = NULL, *p_longopts = NULL;
-#ifdef HARTMUT_0
- struct option *longopts = NULL;
- int longindex = 0;
-#endif
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|a",
- &options, &options_len, &p_longopts) == FAILURE) {
- RETURN_FALSE;
- }
-
- /*
- * Get argv from the global symbol table. We calculate argc ourselves
- * in order to be on the safe side, even though it is also available
- * from the symbol table.
- */
- if (zend_hash_find(HASH_OF(PG(http_globals)[TRACK_VARS_SERVER]), "argv", sizeof("argv"), (void **) &args) != FAILURE ||
- zend_hash_find(&EG(symbol_table), "argv", sizeof("argv"), (void **) &args) != FAILURE) {
- int pos = 0;
- zval **arg;
-
- argc = zend_hash_num_elements(Z_ARRVAL_PP(args));
-
- /*
- * Attempt to allocate enough memory to hold all of the arguments
- * and a trailing NULL
- */
- argv = (char **) safe_emalloc(sizeof(char *), (argc + 1), 0);
-
- /* Reset the array indexes. */
- zend_hash_internal_pointer_reset(Z_ARRVAL_PP(args));
-
- /* Iterate over the hash to construct the argv array. */
- while (zend_hash_get_current_data(Z_ARRVAL_PP(args),
- (void **)&arg) == SUCCESS) {
- argv[pos++] = estrdup(Z_STRVAL_PP(arg));
- zend_hash_move_forward(Z_ARRVAL_PP(args));
- }
-
- /*
- * The C Standard requires argv[argc] to be NULL - this might
- * keep some getopt implementations happy.
- */
- argv[argc] = NULL;
- } else {
- /* Return false if we can't find argv. */
- RETURN_FALSE;
- }
-
- if(p_longopts) {
-#ifdef HARTMUT_0
- int len, c = zend_hash_num_elements(Z_ARRVAL_P(p_longopts));
- struct option *p;
- zval **arg;
- char *name;
-
- longopts = (struct option *)ecalloc(c+1, sizeof(struct option));
-
- if(!longopts) RETURN_FALSE;
-
- /* Reset the array indexes. */
- zend_hash_internal_pointer_reset(Z_ARRVAL_P(p_longopts));
- p = longopts;
-
- /* Iterate over the hash to construct the argv array. */
- while (zend_hash_get_current_data(Z_ARRVAL_P(p_longopts),
- (void **)&arg) == SUCCESS) {
-
- p->has_arg = 0;
- name = estrdup(Z_STRVAL_PP(arg));
- len = strlen(name);
- if((len > 0) && (name[len-1] == ':')) {
- p->has_arg++;
- name[len-1] = '\0';
- if((len > 1) && (name[len-2] == ':')) {
- p->has_arg++;
- name[len-2] = '\0';
- }
- }
-
- p->name = name;
- p->flag = NULL;
- p->val = 0;
-
- zend_hash_move_forward(Z_ARRVAL_P(p_longopts));
- p++;
- }
-#else
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "No support for long options in this build");
-#endif
- }
-
- /* Initialize the return value as an array. */
- array_init(return_value);
-
- /* Disable getopt()'s error messages. */
- opterr = 0;
-
- /* Invoke getopt(3) on the argument array. */
-#ifdef HARTMUT_0
- while ((o = getopt_long(argc, argv, options, longopts, &longindex)) != -1) {
-#else
- while ((o = getopt(argc, argv, options)) != -1) {
-#endif
- /* Skip unknown arguments. */
- if (o == '?') {
- continue;
- }
-
- /* Prepare the option character and the argument string. */
- if(o == 0) {
-#ifdef HARTMUT_0
- optname = (char *)longopts[longindex].name;
-#else
- /* o == 0 shall never happen so this only fixes a compiler warning */
- optname = NULL;
-#endif
- } else {
- if(o == 1) o = '-';
- opt[0] = o;
- optname = opt;
- }
-
- MAKE_STD_ZVAL(val);
- if (optarg != NULL) {
- ZVAL_STRING(val, optarg, 1);
- } else {
- ZVAL_FALSE(val);
- }
-
- /* Add this option / argument pair to the result hash. */
- if(zend_hash_find(HASH_OF(return_value), optname, strlen(optname)+1, (void **)&args) != FAILURE) {
- if(Z_TYPE_PP(args) != IS_ARRAY) {
- convert_to_array_ex(args);
- }
- zend_hash_next_index_insert(HASH_OF(*args), (void *)&val, sizeof(zval *), NULL);
- } else {
- zend_hash_add(HASH_OF(return_value), optname, strlen(optname)+1, (void *)&val,
- sizeof(zval *), NULL);
- }
- }
-
- free_argv(argv, argc);
-#ifdef HARTMUT_0
- free_longopts(longopts);
-#endif
-}
-/* }}} */
-#endif
-
-/* {{{ proto void flush(void)
- Flush the output buffer */
-PHP_FUNCTION(flush)
-{
- sapi_flush(TSRMLS_C);
-}
-/* }}} */
-
-/* {{{ proto void sleep(int seconds)
- Delay for a given number of seconds */
-PHP_FUNCTION(sleep)
-{
- pval **num;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &num) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long_ex(num);
- php_sleep(Z_LVAL_PP(num));
-}
-/* }}} */
-
-/* {{{ proto void usleep(int micro_seconds)
- Delay for a given number of micro seconds */
-PHP_FUNCTION(usleep)
-{
-#if HAVE_USLEEP
- pval **num;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &num) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long_ex(num);
- usleep(Z_LVAL_PP(num));
-#endif
-}
-/* }}} */
-
-#if HAVE_NANOSLEEP
-/* {{{ proto mixed time_nanosleep(long seconds, long nanoseconds)
- Delay for a number of seconds and nano seconds */
-PHP_FUNCTION(time_nanosleep)
-{
- long tv_sec, tv_nsec;
- struct timespec php_req, php_rem;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ll", &tv_sec, &tv_nsec)) {
- WRONG_PARAM_COUNT;
- }
-
- php_req.tv_sec = (time_t) tv_sec;
- php_req.tv_nsec = tv_nsec;
- if (!nanosleep(&php_req, &php_rem)) {
- RETURN_TRUE;
- } else if (errno == EINTR) {
- array_init(return_value);
- add_assoc_long_ex(return_value, "seconds", sizeof("seconds"), php_rem.tv_sec);
- add_assoc_long_ex(return_value, "nanoseconds", sizeof("nanoseconds"), php_rem.tv_nsec);
- return;
- } else if (errno == EINVAL) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "nanoseconds was not in the range 0 to 999 999 999 or seconds was negative");
- }
-
- RETURN_FALSE;
-}
-/* }}} */
-#endif
-
-/* {{{ proto string get_current_user(void)
- Get the name of the owner of the current PHP script */
-PHP_FUNCTION(get_current_user)
-{
- if (ZEND_NUM_ARGS() != 0) {
- WRONG_PARAM_COUNT;
- }
-
- RETURN_STRING(php_get_current_user(), 1);
-}
-/* }}} */
-
-/* {{{ proto string get_cfg_var(string option_name)
- Get the value of a PHP configuration option */
-PHP_FUNCTION(get_cfg_var)
-{
- pval **varname;
- char *value;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &varname) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_string_ex(varname);
-
- if (cfg_get_string(Z_STRVAL_PP(varname), &value) == FAILURE) {
- RETURN_FALSE;
- }
- RETURN_STRING(value, 1);
-}
-/* }}} */
-
-/* {{{ proto bool set_magic_quotes_runtime(int new_setting)
- Set the current active configuration setting of magic_quotes_runtime and return previous */
-PHP_FUNCTION(set_magic_quotes_runtime)
-{
- pval **new_setting;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &new_setting) == FAILURE) {
- RETURN_FALSE;
- }
- convert_to_boolean_ex(new_setting);
-
- PG(magic_quotes_runtime) = (zend_bool) Z_LVAL_PP(new_setting);
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto int get_magic_quotes_runtime(void)
- Get the current active configuration setting of magic_quotes_runtime */
-PHP_FUNCTION(get_magic_quotes_runtime)
-{
- RETURN_LONG(PG(magic_quotes_runtime));
-}
-
-/* }}} */
-
-/* {{{ proto int get_magic_quotes_gpc(void)
- Get the current active configuration setting of magic_quotes_gpc */
-PHP_FUNCTION(get_magic_quotes_gpc)
-{
- RETURN_LONG(PG(magic_quotes_gpc));
-}
-/* }}} */
-
-/*
- 1st arg = error message
- 2nd arg = error option
- 3rd arg = optional parameters (email address or tcp address)
- 4th arg = used for additional headers if email
-
-error options:
- 0 = send to php_error_log (uses syslog or file depending on ini setting)
- 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
-*/
-
-/* {{{ proto bool error_log(string message [, int message_type [, string destination [, string extra_headers]]])
- Send an error message somewhere */
-PHP_FUNCTION(error_log)
-{
- pval **string, **erropt = NULL, **option = NULL, **emailhead = NULL;
- int opt_err = 0;
- char *message, *opt = NULL, *headers = NULL;
-
- switch (ZEND_NUM_ARGS()) {
- case 1:
- if (zend_get_parameters_ex(1, &string) == FAILURE) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Argument 1 invalid");
- RETURN_FALSE;
- }
- break;
-
- case 2:
- if (zend_get_parameters_ex(2, &string, &erropt) == FAILURE) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid arguments");
- RETURN_FALSE;
- }
- convert_to_long_ex(erropt);
- opt_err = Z_LVAL_PP(erropt);
- break;
-
- case 3:
- if (zend_get_parameters_ex(3, &string, &erropt, &option) == FAILURE) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid arguments");
- RETURN_FALSE;
- }
- convert_to_long_ex(erropt);
- opt_err = Z_LVAL_PP(erropt);
- convert_to_string_ex(option);
- opt = Z_STRVAL_PP(option);
- break;
-
- case 4:
- if (zend_get_parameters_ex (4, &string, &erropt, &option, &emailhead) == FAILURE) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid arguments");
- RETURN_FALSE;
- }
- break;
-
- default:
- WRONG_PARAM_COUNT;
- }
-
- convert_to_string_ex(string);
- message = Z_STRVAL_PP(string);
-
- if (erropt != NULL) {
- convert_to_long_ex(erropt);
- opt_err = Z_LVAL_PP(erropt);
- }
-
- if (option != NULL) {
- convert_to_string_ex(option);
- opt = Z_STRVAL_PP(option);
- }
-
- if (emailhead != NULL) {
- convert_to_string_ex(emailhead);
- headers = Z_STRVAL_PP(emailhead);
- }
-
- if (_php_error_log(opt_err, message, opt, headers TSRMLS_CC) == FAILURE) {
- RETURN_FALSE;
- }
-
- RETURN_TRUE;
-}
-/* }}} */
-
-
-PHPAPI int _php_error_log(int opt_err, char *message, char *opt, char *headers TSRMLS_DC)
-{
- php_stream *stream = NULL;
-
- switch (opt_err) {
-
- case 1: /*send an email */
- {
-#if HAVE_SENDMAIL
- if (!php_mail(opt, "PHP error_log message", message, headers, NULL TSRMLS_CC)) {
- return FAILURE;
- }
-#else
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Mail option not available!");
- return FAILURE;
-#endif
- }
- break;
-
- case 2: /*send to an address */
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "TCP/IP option not available!");
- return FAILURE;
- break;
-
- case 3: /*save to a file */
- stream = php_stream_open_wrapper(opt, "a", IGNORE_URL | ENFORCE_SAFE_MODE | REPORT_ERRORS, NULL);
- if (!stream)
- return FAILURE;
- php_stream_write(stream, message, strlen(message));
- php_stream_close(stream);
- break;
-
- default:
- php_log_err(message TSRMLS_CC);
- break;
- }
- return SUCCESS;
-}
-
-/* {{{ proto mixed call_user_func(string function_name [, mixed parmeter] [, mixed ...])
- Call a user function which is the first parameter */
-PHP_FUNCTION(call_user_func)
-{
- zval ***params;
- zval *retval_ptr;
- char *name;
- int argc = ZEND_NUM_ARGS();
-
- if (argc < 1) {
- WRONG_PARAM_COUNT;
- }
-
- params = safe_emalloc(sizeof(zval **), argc, 0);
-
- if (zend_get_parameters_array_ex(argc, params) == FAILURE) {
- efree(params);
- RETURN_FALSE;
- }
-
- if (Z_TYPE_PP(params[0]) != IS_STRING && Z_TYPE_PP(params[0]) != IS_ARRAY) {
- SEPARATE_ZVAL(params[0]);
- convert_to_string_ex(params[0]);
- }
-
- if (!zend_is_callable(*params[0], 0, &name)) {
- php_error_docref1(NULL TSRMLS_CC, name, E_WARNING, "First argument is expected to be a valid callback");
- efree(name);
- efree(params);
- RETURN_NULL();
- }
-
- if (call_user_function_ex(EG(function_table), NULL, *params[0], &retval_ptr, argc-1, params+1, 0, NULL TSRMLS_CC) == SUCCESS) {
- if (retval_ptr) {
- COPY_PZVAL_TO_ZVAL(*return_value, retval_ptr);
- }
- } else {
- if (argc > 1) {
- SEPARATE_ZVAL(params[1]);
- convert_to_string_ex(params[1]);
- if (argc > 2) {
- SEPARATE_ZVAL(params[2]);
- convert_to_string_ex(params[2]);
- php_error_docref1(NULL TSRMLS_CC, name, E_WARNING, "Unable to call %s(%s,%s)", name, Z_STRVAL_PP(params[1]), Z_STRVAL_PP(params[2]));
- } else {
- php_error_docref1(NULL TSRMLS_CC, name, E_WARNING, "Unable to call %s(%s)", name, Z_STRVAL_PP(params[1]));
- }
- } else {
- php_error_docref1(NULL TSRMLS_CC, name, E_WARNING, "Unable to call %s()", name);
- }
- }
-
- efree(name);
- efree(params);
-}
-/* }}} */
-
-/* {{{ proto mixed call_user_func_array(string function_name, array parameters)
- Call a user function which is the first parameter with the arguments contained in array */
-PHP_FUNCTION(call_user_func_array)
-{
- zval ***func_params, **func, **params;
- zval *retval_ptr;
- HashTable *func_params_ht;
- char *name;
- int count;
- int current = 0;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &func, &params) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- SEPARATE_ZVAL(params);
- convert_to_array_ex(params);
-
- if (Z_TYPE_PP(func) != IS_STRING && Z_TYPE_PP(func) != IS_ARRAY) {
- SEPARATE_ZVAL(func);
- convert_to_string_ex(func);
- }
-
- if (!zend_is_callable(*func, 0, &name)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "First argument is expected to be a valid callback, '%s' was given", name);
- efree(name);
- RETURN_NULL();
- }
-
- func_params_ht = Z_ARRVAL_PP(params);
-
- count = zend_hash_num_elements(func_params_ht);
- if (count) {
- func_params = safe_emalloc(sizeof(zval **), count, 0);
-
- for (zend_hash_internal_pointer_reset(func_params_ht);
- zend_hash_get_current_data(func_params_ht, (void **) &func_params[current]) == SUCCESS;
- zend_hash_move_forward(func_params_ht)
- ) {
- current++;
- }
- } else {
- func_params = NULL;
- }
-
- if (call_user_function_ex(EG(function_table), NULL, *func, &retval_ptr, count, func_params, 0, NULL TSRMLS_CC) == SUCCESS && retval_ptr) {
- COPY_PZVAL_TO_ZVAL(*return_value, retval_ptr);
- } else {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to call %s()", name);
- }
-
- efree(name);
- if (func_params) {
- efree(func_params);
- }
-}
-/* }}} */
-
-#define _CUM_DEPREC "This function is deprecated, use the call_user_func variety with the array(&$obj, \"method\") syntax instead"
-
-/* {{{ proto mixed call_user_method(string method_name, mixed object [, mixed parameter] [, mixed ...])
- Call a user method on a specific object or class */
-PHP_FUNCTION(call_user_method)
-{
- zval ***params;
- zval *retval_ptr;
- int arg_count = ZEND_NUM_ARGS();
-
- php_error_docref(NULL TSRMLS_CC, E_NOTICE, "%s", _CUM_DEPREC);
-
- if (arg_count < 2) {
- WRONG_PARAM_COUNT;
- }
- params = (zval ***) safe_emalloc(sizeof(zval **), arg_count, 0);
-
- if (zend_get_parameters_array_ex(arg_count, params) == FAILURE) {
- efree(params);
- RETURN_FALSE;
- }
- if (Z_TYPE_PP(params[1]) != IS_OBJECT && Z_TYPE_PP(params[1]) != IS_STRING) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Second argument is not an object or class name");
- efree(params);
- RETURN_FALSE;
- }
-
- SEPARATE_ZVAL(params[0]);
- convert_to_string(*params[0]);
-
- if (call_user_function_ex(EG(function_table), params[1], *params[0], &retval_ptr, arg_count-2, params+2, 0, NULL TSRMLS_CC) == SUCCESS && retval_ptr) {
- COPY_PZVAL_TO_ZVAL(*return_value, retval_ptr);
- } else {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to call %s()", Z_STRVAL_PP(params[0]));
- }
- efree(params);
-}
-/* }}} */
-
-/* {{{ proto mixed call_user_method_array(string method_name, mixed object, array params)
- Call a user method on a specific object or class using a parameter array */
-PHP_FUNCTION(call_user_method_array)
-{
- zval **method_name, **obj, **params, ***method_args = NULL, *retval_ptr;
- HashTable *params_ar;
- int num_elems, element = 0;
-
- php_error_docref(NULL TSRMLS_CC, E_NOTICE, "%s", _CUM_DEPREC);
-
- if (ZEND_NUM_ARGS() != 3 || zend_get_parameters_ex(3, &method_name, &obj, &params) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- if (Z_TYPE_PP(obj) != IS_OBJECT && Z_TYPE_PP(obj) != IS_STRING) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Second argument is not an object or class name");
- RETURN_FALSE;
- }
-
- SEPARATE_ZVAL(method_name);
- SEPARATE_ZVAL(params);
- convert_to_string_ex(method_name);
- convert_to_array_ex(params);
-
- params_ar = HASH_OF(*params);
- num_elems = zend_hash_num_elements(params_ar);
- method_args = (zval ***) safe_emalloc(sizeof(zval **), num_elems, 0);
-
- for (zend_hash_internal_pointer_reset(params_ar);
- zend_hash_get_current_data(params_ar, (void **) &(method_args[element])) == SUCCESS;
- zend_hash_move_forward(params_ar)
- ) {
- element++;
- }
-
- if (call_user_function_ex(EG(function_table), obj, *method_name, &retval_ptr, num_elems, method_args, 0, NULL TSRMLS_CC) == SUCCESS && retval_ptr) {
- COPY_PZVAL_TO_ZVAL(*return_value, retval_ptr);
- } else {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to call %s()", Z_STRVAL_PP(method_name));
- }
-
- efree(method_args);
-}
-/* }}} */
-
-
-void user_shutdown_function_dtor(php_shutdown_function_entry *shutdown_function_entry)
-{
- int i;
-
- for (i = 0; i < shutdown_function_entry->arg_count; i++) {
- zval_ptr_dtor(&shutdown_function_entry->arguments[i]);
- }
- efree(shutdown_function_entry->arguments);
-}
-
-void user_tick_function_dtor(user_tick_function_entry *tick_function_entry)
-{
- int i;
-
- for (i = 0; i < tick_function_entry->arg_count; i++) {
- zval_ptr_dtor(&tick_function_entry->arguments[i]);
- }
- efree(tick_function_entry->arguments);
-}
-
-static int user_shutdown_function_call(php_shutdown_function_entry *shutdown_function_entry TSRMLS_DC)
-{
- zval retval;
-
- if (call_user_function( EG(function_table), NULL,
- shutdown_function_entry->arguments[0],
- &retval,
- shutdown_function_entry->arg_count - 1,
- shutdown_function_entry->arguments + 1
- TSRMLS_CC ) == SUCCESS ) {
- zval_dtor(&retval);
-
- } else {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to call %s() - function does not exist", Z_STRVAL_P(shutdown_function_entry->arguments[0]));
- }
- return 0;
-}
-
-static void user_tick_function_call(user_tick_function_entry *tick_fe TSRMLS_DC)
-{
- zval retval;
- zval *function = tick_fe->arguments[0];
-
- /* Prevent reentrant calls to the same user ticks function */
- if (! tick_fe->calling) {
- tick_fe->calling = 1;
-
- if (call_user_function( EG(function_table), NULL,
- function,
- &retval,
- tick_fe->arg_count - 1,
- tick_fe->arguments+1
- TSRMLS_CC) == SUCCESS) {
- zval_dtor(&retval);
-
- } else {
- zval **obj, **method;
-
- if (Z_TYPE_P(function) == IS_STRING) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to call %s() - function does not exist", Z_STRVAL_P(function));
- } else if ( Z_TYPE_P(function) == IS_ARRAY
- && zend_hash_index_find(Z_ARRVAL_P(function), 0, (void **) &obj) == SUCCESS
- && zend_hash_index_find(Z_ARRVAL_P(function), 1, (void **) &method) == SUCCESS
- && Z_TYPE_PP(obj) == IS_OBJECT
- && Z_TYPE_PP(method) == IS_STRING ) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to call %s::%s() - function does not exist", Z_OBJCE_PP(obj)->name, Z_STRVAL_PP(method));
- } else {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to call tick function");
- }
- }
-
- tick_fe->calling = 0;
- }
-}
-
-static void run_user_tick_functions(int tick_count)
-{
- TSRMLS_FETCH();
-
- zend_llist_apply(BG(user_tick_functions), (llist_apply_func_t) user_tick_function_call TSRMLS_CC);
-}
-
-static int user_tick_function_compare(user_tick_function_entry * tick_fe1, user_tick_function_entry * tick_fe2)
-{
- zval *func1 = tick_fe1->arguments[0];
- zval *func2 = tick_fe2->arguments[0];
- TSRMLS_FETCH();
-
- if (Z_TYPE_P(func1) == IS_STRING && Z_TYPE_P(func2) == IS_STRING) {
- return (zend_binary_zval_strcmp(func1, func2) == 0);
- } else if (Z_TYPE_P(func1) == IS_ARRAY && Z_TYPE_P(func2) == IS_ARRAY) {
- zval result;
- zend_compare_arrays(&result, func1, func2 TSRMLS_CC);
- return (Z_LVAL(result) == 0);
- } else {
- return 0;
- }
-}
-
-void php_call_shutdown_functions(void)
-{
- TSRMLS_FETCH();
-
- if (BG(user_shutdown_function_names))
- zend_try {
- zend_hash_apply(BG(user_shutdown_function_names), (apply_func_t) user_shutdown_function_call TSRMLS_CC);
- memcpy(&EG(bailout), &orig_bailout, sizeof(jmp_buf));
- zend_hash_destroy(BG(user_shutdown_function_names));
- FREE_HASHTABLE(BG(user_shutdown_function_names));
- }
- zend_end_try();
-}
-
-/* {{{ proto void register_shutdown_function(string function_name)
- Register a user-level function to be called on request termination */
-PHP_FUNCTION(register_shutdown_function)
-{
- php_shutdown_function_entry shutdown_function_entry;
- int i;
-
- shutdown_function_entry.arg_count = ZEND_NUM_ARGS();
-
- if (shutdown_function_entry.arg_count < 1) {
- WRONG_PARAM_COUNT;
- }
-
- shutdown_function_entry.arguments = (pval **) safe_emalloc(sizeof(pval *), shutdown_function_entry.arg_count, 0);
-
- if (zend_get_parameters_array(ht, shutdown_function_entry.arg_count, shutdown_function_entry.arguments) == FAILURE) {
- RETURN_FALSE;
- }
-
- /* Prevent entering of anything but arrays/strings */
- if (Z_TYPE_P(shutdown_function_entry.arguments[0]) != IS_ARRAY) {
- convert_to_string(shutdown_function_entry.arguments[0]);
- }
-
- if (!BG(user_shutdown_function_names)) {
- ALLOC_HASHTABLE(BG(user_shutdown_function_names));
- zend_hash_init(BG(user_shutdown_function_names), 0, NULL, (void (*)(void *)) user_shutdown_function_dtor, 0);
- }
-
- for (i = 0; i < shutdown_function_entry.arg_count; i++) {
- shutdown_function_entry.arguments[i]->refcount++;
- }
- zend_hash_next_index_insert(BG(user_shutdown_function_names), &shutdown_function_entry, sizeof(php_shutdown_function_entry), NULL);
-}
-/* }}} */
-
-
-ZEND_API void php_get_highlight_struct(zend_syntax_highlighter_ini *syntax_highlighter_ini)
-{
- syntax_highlighter_ini->highlight_comment = INI_STR("highlight.comment");
- syntax_highlighter_ini->highlight_default = INI_STR("highlight.default");
- syntax_highlighter_ini->highlight_html = INI_STR("highlight.html");
- syntax_highlighter_ini->highlight_keyword = INI_STR("highlight.keyword");
- syntax_highlighter_ini->highlight_string = INI_STR("highlight.string");
-}
-
-/* {{{ proto bool highlight_file(string file_name [, bool return] )
- Syntax highlight a source file */
-PHP_FUNCTION(highlight_file)
-{
- zval *filename;
- zend_syntax_highlighter_ini syntax_highlighter_ini;
- zend_bool i = 0;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z|b", &filename, &i) == FAILURE) {
- RETURN_FALSE;
- }
- convert_to_string(filename);
-
- if (PG(safe_mode) && (!php_checkuid(Z_STRVAL_P(filename), NULL, CHECKUID_ALLOW_ONLY_FILE))) {
- RETURN_FALSE;
- }
-
- if (php_check_open_basedir(Z_STRVAL_P(filename) TSRMLS_CC)) {
- RETURN_FALSE;
- }
-
- if (i) {
- php_start_ob_buffer (NULL, 0, 1 TSRMLS_CC);
- }
-
- php_get_highlight_struct(&syntax_highlighter_ini);
-
- if (highlight_file(Z_STRVAL_P(filename), &syntax_highlighter_ini TSRMLS_CC) == FAILURE) {
- RETURN_FALSE;
- }
-
- if (i) {
- php_ob_get_buffer (return_value TSRMLS_CC);
- php_end_ob_buffer (0, 0 TSRMLS_CC);
- } else {
- RETURN_TRUE;
- }
-}
-/* }}} */
-
-/* {{{ proto string php_strip_whitespace(string file_name)
- Return source with stripped comments and whitespace */
-PHP_FUNCTION(php_strip_whitespace)
-{
- char *filename;
- int filename_len;
- zend_lex_state original_lex_state;
- zend_file_handle file_handle = {0};
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &filename, &filename_len) == FAILURE) {
- RETURN_FALSE;
- }
-
- php_start_ob_buffer(NULL, 0, 1 TSRMLS_CC);
-
- file_handle.type = ZEND_HANDLE_FILENAME;
- file_handle.filename = filename;
- file_handle.free_filename = 0;
- file_handle.opened_path = NULL;
- zend_save_lexical_state(&original_lex_state TSRMLS_CC);
- if (open_file_for_scanning(&file_handle TSRMLS_CC)==FAILURE) {
- RETURN_EMPTY_STRING();
- }
-
- zend_strip(TSRMLS_C);
-
- zend_destroy_file_handle(&file_handle TSRMLS_CC);
- zend_restore_lexical_state(&original_lex_state TSRMLS_CC);
-
- php_ob_get_buffer(return_value TSRMLS_CC);
- php_end_ob_buffer(0, 0 TSRMLS_CC);
-
- return;
-}
-/* }}} */
-
-/* {{{ proto bool php_check_syntax(string file_name [, &$error_message])
- Check the syntax of the specified file. */
-PHP_FUNCTION(php_check_syntax)
-{
- char *filename;
- int filename_len;
- zval *errm=NULL;
- zend_file_handle file_handle = {0};
-
- int old_errors = PG(display_errors);
- int log_errors = PG(log_errors);
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|z", &filename, &filename_len, &errm) == FAILURE) {
- RETURN_FALSE;
- }
-
- file_handle.type = ZEND_HANDLE_FILENAME;
- file_handle.filename = filename;
- file_handle.free_filename = 0;
- file_handle.opened_path = NULL;
-
- PG(log_errors) = PG(display_errors) = 0;
-
- if (php_lint_script(&file_handle TSRMLS_CC) != SUCCESS) {
- if (errm) {
- char *error_str;
-
- zval_dtor(errm);
- spprintf(&error_str, 0, "%s in %s on line %d", PG(last_error_message), PG(last_error_file), PG(last_error_lineno));
- ZVAL_STRING(errm, error_str, 0);
- }
- RETVAL_FALSE;
- } else {
- RETVAL_TRUE;
- }
-
- PG(display_errors) = old_errors;
- PG(log_errors) = log_errors;
-
- return;
-}
-/* }}} */
-
-/* {{{ proto bool highlight_string(string string [, bool return] )
- Syntax highlight a string or optionally return it */
-PHP_FUNCTION(highlight_string)
-{
- zval *expr;
- zend_syntax_highlighter_ini syntax_highlighter_ini;
- char *hicompiled_string_description;
- zend_bool i = 0;
- int old_error_reporting = EG(error_reporting);
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z|b", &expr, &i) == FAILURE) {
- RETURN_FALSE;
- }
- convert_to_string(expr);
-
- if (i) {
- php_start_ob_buffer (NULL, 0, 1 TSRMLS_CC);
- }
-
- EG(error_reporting) = E_ERROR;
-
- php_get_highlight_struct(&syntax_highlighter_ini);
-
- hicompiled_string_description = zend_make_compiled_string_description("highlighted code" TSRMLS_CC);
-
- if (highlight_string(expr, &syntax_highlighter_ini, hicompiled_string_description TSRMLS_CC) == FAILURE) {
- efree(hicompiled_string_description);
- RETURN_FALSE;
- }
- efree(hicompiled_string_description);
-
- EG(error_reporting) = old_error_reporting;
-
- if (i) {
- php_ob_get_buffer (return_value TSRMLS_CC);
- php_end_ob_buffer (0, 0 TSRMLS_CC);
- } else {
- RETURN_TRUE;
- }
-}
-/* }}} */
-
-/* {{{ proto string ini_get(string varname)
- Get a configuration option */
-PHP_FUNCTION(ini_get)
-{
- pval **varname;
- char *str;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &varname) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_string_ex(varname);
-
- str = zend_ini_string(Z_STRVAL_PP(varname), Z_STRLEN_PP(varname)+1, 0);
-
- if (!str) {
- RETURN_FALSE;
- }
-
- RETURN_STRING(str, 1);
-}
-/* }}} */
-
-
-static int php_ini_get_option(zend_ini_entry *ini_entry, int num_args, va_list args, zend_hash_key *hash_key)
-{
- zval *ini_array = va_arg(args, zval *);
- int module_number = va_arg(args, int);
- zval *option;
-
- if (module_number != 0 && ini_entry->module_number != module_number) {
- return 0;
- }
-
- if (hash_key->nKeyLength == 0 || hash_key->arKey[0] != 0) {
-
- MAKE_STD_ZVAL(option);
- array_init(option);
-
- if (ini_entry->orig_value) {
- add_assoc_stringl(option, "global_value", ini_entry->orig_value, ini_entry->orig_value_length, 1);
- } else if (ini_entry->value) {
- add_assoc_stringl(option, "global_value", ini_entry->value, ini_entry->value_length, 1);
- } else {
- add_assoc_null(option, "global_value");
- }
-
- if (ini_entry->value) {
- add_assoc_stringl(option, "local_value", ini_entry->value, ini_entry->value_length, 1);
- } else {
- add_assoc_null(option, "local_value");
- }
-
- add_assoc_long(option, "access", ini_entry->modifiable);
-
- add_assoc_zval_ex(ini_array, ini_entry->name, ini_entry->name_length, option);
- }
- return 0;
-}
-
-/* {{{ proto array ini_get_all([string extension])
- Get all configuration options */
-PHP_FUNCTION(ini_get_all)
-{
- char *extname = NULL;
- int extname_len = 0, extnumber = 0;
- zend_module_entry *module;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|s", &extname, &extname_len) == FAILURE) {
- RETURN_FALSE;
- }
-
- zend_ini_sort_entries(TSRMLS_C);
-
- if (extname) {
- if (zend_hash_find(&module_registry, extname, extname_len+1, (void **) &module) == FAILURE) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to find extension '%s'", extname);
- RETURN_FALSE;
- }
- extnumber = module->module_number;
- }
-
- array_init(return_value);
- zend_hash_apply_with_arguments(EG(ini_directives), (apply_func_args_t) php_ini_get_option, 2, return_value, extnumber TSRMLS_CC);
-}
-/* }}} */
-
-static int php_ini_check_path(char *option_name, int option_len, char *new_option_name, int new_option_len)
-{
- if ( option_len != (new_option_len-1) ) {
- return 0;
- }
-
- return !strncmp(option_name, new_option_name, option_len);
-}
-
-/* {{{ proto string ini_set(string varname, string newvalue)
- Set a configuration option, returns false on error and the old value of the configuration option on success */
-PHP_FUNCTION(ini_set)
-{
- pval **varname, **new_value;
- char *old_value;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &varname, &new_value) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_string_ex(varname);
- convert_to_string_ex(new_value);
-
- old_value = zend_ini_string(Z_STRVAL_PP(varname), Z_STRLEN_PP(varname)+1, 0);
-
- /* copy to return here, because alter might free it! */
- if (old_value) {
- RETVAL_STRING(old_value, 1);
- } else {
- RETVAL_FALSE;
- }
-
-#define _CHECK_PATH(var, ini) php_ini_check_path(Z_STRVAL_PP(var), Z_STRLEN_PP(var), ini, sizeof(ini))
-
- /* safe_mode & basedir check */
- if (PG(safe_mode) || PG(open_basedir)) {
- if (_CHECK_PATH(varname, "error_log") ||
- _CHECK_PATH(varname, "java.class.path") ||
- _CHECK_PATH(varname, "java.home") ||
- _CHECK_PATH(varname, "java.library.path") ||
- _CHECK_PATH(varname, "session.save_path") ||
- _CHECK_PATH(varname, "vpopmail.directory")) {
- if (PG(safe_mode) &&(!php_checkuid(Z_STRVAL_PP(new_value), NULL, CHECKUID_CHECK_FILE_AND_DIR))) {
- zval_dtor(return_value);
- RETURN_FALSE;
- }
-
- if (php_check_open_basedir(Z_STRVAL_PP(new_value) TSRMLS_CC)) {
- zval_dtor(return_value);
- RETURN_FALSE;
- }
- }
- }
-
- /* checks that ensure the user does not overwrite certain ini settings when safe_mode is enabled */
- if (PG(safe_mode)) {
- if (!strncmp("max_execution_time", Z_STRVAL_PP(varname), sizeof("max_execution_time")) ||
- !strncmp("memory_limit", Z_STRVAL_PP(varname), sizeof("memory_limit")) ||
- !strncmp("child_terminate", Z_STRVAL_PP(varname), sizeof("child_terminate"))) {
- zval_dtor(return_value);
- RETURN_FALSE;
- }
- }
-
- if (zend_alter_ini_entry(Z_STRVAL_PP(varname), Z_STRLEN_PP(varname)+1, Z_STRVAL_PP(new_value), Z_STRLEN_PP(new_value),
- PHP_INI_USER, PHP_INI_STAGE_RUNTIME) == FAILURE) {
- zval_dtor(return_value);
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-/* {{{ proto void ini_restore(string varname)
- Restore the value of a configuration option specified by varname */
-PHP_FUNCTION(ini_restore)
-{
- pval **varname;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &varname) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_string_ex(varname);
-
- zend_restore_ini_entry(Z_STRVAL_PP(varname), Z_STRLEN_PP(varname)+1, PHP_INI_STAGE_RUNTIME);
-}
-/* }}} */
-
-/* {{{ proto string set_include_path(string varname, string newvalue)
- Sets the include_path configuration option */
-
-PHP_FUNCTION(set_include_path)
-{
- pval **new_value;
- char *old_value;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &new_value) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex(new_value);
- old_value = zend_ini_string("include_path", sizeof("include_path"), 0);
- /* copy to return here, because alter might free it! */
- if (old_value) {
- RETVAL_STRING(old_value, 1);
- } else {
- RETVAL_FALSE;
- }
- if (zend_alter_ini_entry("include_path", sizeof("include_path"),
- Z_STRVAL_PP(new_value), Z_STRLEN_PP(new_value),
- PHP_INI_USER, PHP_INI_STAGE_RUNTIME) == FAILURE) {
- zval_dtor(return_value);
- RETURN_FALSE;
- }
-}
-
-/* }}} */
-
-/* {{{ proto string get_include_path()
- Get the current include_path configuration option */
-
-PHP_FUNCTION(get_include_path)
-{
- char *str;
- if (ZEND_NUM_ARGS() != 0) {
- WRONG_PARAM_COUNT;
- }
- str = zend_ini_string("include_path", sizeof("include_path"), 0);
- if (str == NULL) {
- RETURN_FALSE;
- }
- RETURN_STRING(str, 1);
-}
-
-/* }}} */
-
-/* {{{ proto void restore_include_path()
- Restore the value of the include_path configuration option */
-
-PHP_FUNCTION(restore_include_path)
-{
- if (ZEND_NUM_ARGS() != 0) {
- WRONG_PARAM_COUNT;
- }
-
- zend_restore_ini_entry("include_path", sizeof("include_path"),
- PHP_INI_STAGE_RUNTIME);
-}
-
-/* }}} */
-
-/* {{{ proto mixed print_r(mixed var [, bool return])
- Prints out or returns information about the specified variable */
-PHP_FUNCTION(print_r)
-{
- zval *var;
- zend_bool i = 0;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z|b", &var, &i) == FAILURE) {
- RETURN_FALSE;
- }
-
- if (i) {
- php_start_ob_buffer (NULL, 0, 1 TSRMLS_CC);
- }
-
- zend_print_zval_r(var, 0 TSRMLS_CC);
-
- if (i) {
- php_ob_get_buffer (return_value TSRMLS_CC);
- php_end_ob_buffer (0, 0 TSRMLS_CC);
- } else {
- RETURN_TRUE;
- }
-}
-/* }}} */
-
-/* This should go back to PHP */
-
-/* {{{ proto int connection_aborted(void)
- Returns true if client disconnected */
-PHP_FUNCTION(connection_aborted)
-{
- RETURN_LONG(PG(connection_status) & PHP_CONNECTION_ABORTED);
-}
-/* }}} */
-
-/* {{{ proto int connection_status(void)
- Returns the connection status bitfield */
-PHP_FUNCTION(connection_status)
-{
- RETURN_LONG(PG(connection_status));
-}
-/* }}} */
-
-/* {{{ proto int ignore_user_abort(bool value)
- Set whether we want to ignore a user abort event or not */
-PHP_FUNCTION(ignore_user_abort)
-{
- pval **arg;
- int old_setting;
-
- old_setting = PG(ignore_user_abort);
- switch (ZEND_NUM_ARGS()) {
-
- case 0:
- break;
-
- case 1:
- if (zend_get_parameters_ex(1, &arg) == FAILURE) {
- RETURN_FALSE;
- }
- convert_to_string_ex(arg);
- zend_alter_ini_entry("ignore_user_abort", sizeof("ignore_user_abort"), Z_STRVAL_PP(arg), Z_STRLEN_PP(arg), PHP_INI_USER, PHP_INI_STAGE_RUNTIME);
- break;
-
- default:
- WRONG_PARAM_COUNT;
- break;
- }
- RETURN_LONG(old_setting);
-}
-/* }}} */
-
-#if HAVE_GETSERVBYNAME
-/* {{{ proto int getservbyname(string service, string protocol)
- Returns port associated with service. Protocol must be "tcp" or "udp" */
-PHP_FUNCTION(getservbyname)
-{
- pval **name, **proto;
- struct servent *serv;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &name, &proto) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex(name);
- convert_to_string_ex(proto);
-
- serv = getservbyname(Z_STRVAL_PP(name), Z_STRVAL_PP(proto));
-
- if (serv == NULL) {
- RETURN_FALSE;
- }
-
- RETURN_LONG(ntohs(serv->s_port));
-}
-/* }}} */
-#endif
-
-#if HAVE_GETSERVBYPORT
-/* {{{ proto string getservbyport(int port, string protocol)
- Returns service name associated with port. Protocol must be "tcp" or "udp" */
-PHP_FUNCTION(getservbyport)
-{
- pval **port, **proto;
- struct servent *serv;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &port, &proto) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long_ex(port);
- convert_to_string_ex(proto);
-
- serv = getservbyport(htons((unsigned short) Z_LVAL_PP(port)), Z_STRVAL_PP(proto));
-
- if (serv == NULL) {
- RETURN_FALSE;
- }
-
- RETURN_STRING(serv->s_name, 1);
-}
-/* }}} */
-#endif
-
-#if HAVE_GETPROTOBYNAME
-/* {{{ proto int getprotobyname(string name)
- Returns protocol number associated with name as per /etc/protocols */
-PHP_FUNCTION(getprotobyname)
-{
- pval **name;
- struct protoent *ent;
-
- if (ZEND_NUM_ARGS() != 1
- || zend_get_parameters_ex(1, &name) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_string_ex(name);
-
- ent = getprotobyname(Z_STRVAL_PP(name));
-
- if (ent == NULL) {
- Z_LVAL_P(return_value) = -1;
- Z_TYPE_P(return_value) = IS_LONG;
- RETURN_FALSE;
- }
-
- RETURN_LONG(ent->p_proto);
-}
-/* }}} */
-#endif
-
-#if HAVE_GETPROTOBYNUMBER
-/* {{{ proto string getprotobynumber(int proto)
- Returns protocol name associated with protocol number proto */
-PHP_FUNCTION(getprotobynumber)
-{
- pval **proto;
- struct protoent *ent;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &proto) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long_ex(proto);
-
- ent = getprotobynumber(Z_LVAL_PP(proto));
-
- if (ent == NULL) {
- RETURN_FALSE;
- }
-
- RETURN_STRING(ent->p_name, 1);
-}
-/* }}} */
-#endif
-
-/* {{{ proto bool register_tick_function(string function_name [, mixed arg [, mixed ... ]])
- Registers a tick callback function */
-PHP_FUNCTION(register_tick_function)
-{
- user_tick_function_entry tick_fe;
- int i;
-
- tick_fe.calling = 0;
- tick_fe.arg_count = ZEND_NUM_ARGS();
-
- if (tick_fe.arg_count < 1) {
- WRONG_PARAM_COUNT;
- }
-
- tick_fe.arguments = (zval **) safe_emalloc(sizeof(zval *), tick_fe.arg_count, 0);
-
- if (zend_get_parameters_array(ht, tick_fe.arg_count, tick_fe.arguments) == FAILURE) {
- RETURN_FALSE;
- }
-
- if (Z_TYPE_P(tick_fe.arguments[0]) != IS_ARRAY)
- convert_to_string_ex(&tick_fe.arguments[0]);
-
- if (!BG(user_tick_functions)) {
- BG(user_tick_functions) = (zend_llist *) emalloc(sizeof(zend_llist));
- zend_llist_init(BG(user_tick_functions),
- sizeof(user_tick_function_entry),
- (llist_dtor_func_t) user_tick_function_dtor, 0);
- php_add_tick_function(run_user_tick_functions);
- }
-
- for (i = 0; i < tick_fe.arg_count; i++) {
- tick_fe.arguments[i]->refcount++;
- }
-
- zend_llist_add_element(BG(user_tick_functions), &tick_fe);
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto void unregister_tick_function(string function_name)
- Unregisters a tick callback function */
-PHP_FUNCTION(unregister_tick_function)
-{
- zval **function;
- user_tick_function_entry tick_fe;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &function)) {
- WRONG_PARAM_COUNT;
- }
-
- if (!BG(user_tick_functions)) {
- return;
- }
-
- if (Z_TYPE_PP(function) != IS_ARRAY) {
- convert_to_string_ex(function);
- }
-
- tick_fe.arguments = (zval **) emalloc(sizeof(zval *));
- tick_fe.arguments[0] = *function;
- tick_fe.arg_count = 1;
- zend_llist_del_element(BG(user_tick_functions), &tick_fe, (int (*)(void *, void *)) user_tick_function_compare);
- efree(tick_fe.arguments);
-}
-/* }}} */
-
-/* {{{ proto bool is_uploaded_file(string path)
- Check if file was created by rfc1867 upload */
-PHP_FUNCTION(is_uploaded_file)
-{
- zval **path;
-
- if (!SG(rfc1867_uploaded_files)) {
- RETURN_FALSE;
- }
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &path) != SUCCESS) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- convert_to_string_ex(path);
-
- if (zend_hash_exists(SG(rfc1867_uploaded_files), Z_STRVAL_PP(path), Z_STRLEN_PP(path)+1)) {
- RETURN_TRUE;
- } else {
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-/* {{{ proto bool move_uploaded_file(string path, string new_path)
- Move a file if and only if it was created by an upload */
-PHP_FUNCTION(move_uploaded_file)
-{
- zval **path, **new_path;
- zend_bool successful = 0;
-
- if (!SG(rfc1867_uploaded_files)) {
- RETURN_FALSE;
- }
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &path, &new_path) != SUCCESS) {
- ZEND_WRONG_PARAM_COUNT();
- }
- convert_to_string_ex(path);
- convert_to_string_ex(new_path);
-
- if (!zend_hash_exists(SG(rfc1867_uploaded_files), Z_STRVAL_PP(path), Z_STRLEN_PP(path)+1)) {
- RETURN_FALSE;
- }
-
- if (PG(safe_mode) && (!php_checkuid(Z_STRVAL_PP(new_path), NULL, CHECKUID_CHECK_FILE_AND_DIR))) {
- RETURN_FALSE;
- }
-
- if (php_check_open_basedir(Z_STRVAL_PP(new_path) TSRMLS_CC)) {
- RETURN_FALSE;
- }
-
- VCWD_UNLINK(Z_STRVAL_PP(new_path));
- if (rename(Z_STRVAL_PP(path), Z_STRVAL_PP(new_path)) == 0) {
- successful = 1;
- } else
- if (php_copy_file(Z_STRVAL_PP(path), Z_STRVAL_PP(new_path) TSRMLS_CC) == SUCCESS) {
- VCWD_UNLINK(Z_STRVAL_PP(path));
- successful = 1;
- }
-
- if (successful) {
- zend_hash_del(SG(rfc1867_uploaded_files), Z_STRVAL_PP(path), Z_STRLEN_PP(path)+1);
- } else {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to move '%s' to '%s'", Z_STRVAL_PP(path), Z_STRVAL_PP(new_path));
- }
- RETURN_BOOL(successful);
-}
-/* }}} */
-
-
-static void php_simple_ini_parser_cb(zval *arg1, zval *arg2, int callback_type, zval *arr)
-{
- zval *element;
-
- switch (callback_type) {
-
- case ZEND_INI_PARSER_ENTRY:
- if (!arg2) {
- /* bare string - nothing to do */
- break;
- }
- ALLOC_ZVAL(element);
- *element = *arg2;
- zval_copy_ctor(element);
- INIT_PZVAL(element);
- if (is_numeric_string(Z_STRVAL_P(arg1), Z_STRLEN_P(arg1), NULL, NULL, 0) != IS_LONG) {
- zend_hash_update(Z_ARRVAL_P(arr), Z_STRVAL_P(arg1), Z_STRLEN_P(arg1)+1, &element, sizeof(zval *), NULL);
- } else {
- ulong key = (ulong) zend_atoi(Z_STRVAL_P(arg1), Z_STRLEN_P(arg1));
- zend_hash_index_update(Z_ARRVAL_P(arr), key, &element, sizeof(zval *), NULL);
- }
- break;
-
- case ZEND_INI_PARSER_POP_ENTRY:
- {
- zval *hash, **find_hash;
-
- if (!arg2) {
- /* bare string - nothing to do */
- break;
- }
-
- if (is_numeric_string(Z_STRVAL_P(arg1), Z_STRLEN_P(arg1), NULL, NULL, 0) != IS_LONG) {
- if (zend_hash_find(Z_ARRVAL_P(arr), Z_STRVAL_P(arg1), Z_STRLEN_P(arg1)+1, (void **) &find_hash) == FAILURE) {
- ALLOC_ZVAL(hash);
- INIT_PZVAL(hash);
- array_init(hash);
-
- zend_hash_update(Z_ARRVAL_P(arr), Z_STRVAL_P(arg1), Z_STRLEN_P(arg1)+1, &hash, sizeof(zval *), NULL);
- } else {
- hash = *find_hash;
- }
- } else {
- ulong key = (ulong) zend_atoi(Z_STRVAL_P(arg1), Z_STRLEN_P(arg1));
- if (zend_hash_index_find(Z_ARRVAL_P(arr), key, (void **) &find_hash) == FAILURE) {
- ALLOC_ZVAL(hash);
- INIT_PZVAL(hash);
- array_init(hash);
-
- zend_hash_index_update(Z_ARRVAL_P(arr), key, &hash, sizeof(zval *), NULL);
- } else {
- hash = *find_hash;
- }
- }
-
- ALLOC_ZVAL(element);
- *element = *arg2;
- zval_copy_ctor(element);
- INIT_PZVAL(element);
- add_next_index_zval(hash, element);
- }
- break;
-
- case ZEND_INI_PARSER_SECTION:
- break;
- }
-}
-
-static void php_ini_parser_cb_with_sections(zval *arg1, zval *arg2, int callback_type, zval *arr)
-{
- TSRMLS_FETCH();
-
- if (callback_type == ZEND_INI_PARSER_SECTION) {
- MAKE_STD_ZVAL(BG(active_ini_file_section));
- array_init(BG(active_ini_file_section));
- if (is_numeric_string(Z_STRVAL_P(arg1), Z_STRLEN_P(arg1), NULL, NULL, 0) != IS_LONG) {
- zend_hash_update(Z_ARRVAL_P(arr), Z_STRVAL_P(arg1), Z_STRLEN_P(arg1)+1, &BG(active_ini_file_section), sizeof(zval *), NULL);
- } else {
- ulong key = (ulong) zend_atoi(Z_STRVAL_P(arg1), Z_STRLEN_P(arg1));
- zend_hash_index_update(Z_ARRVAL_P(arr), key, &BG(active_ini_file_section), sizeof(zval *), NULL);
- }
- } else if (arg2) {
- zval *active_arr;
-
- if (BG(active_ini_file_section)) {
- active_arr = BG(active_ini_file_section);
- } else {
- active_arr = arr;
- }
-
- php_simple_ini_parser_cb(arg1, arg2, callback_type, active_arr);
- }
-}
-
-
-/* {{{ proto array parse_ini_file(string filename [, bool process_sections])
- Parse configuration file */
-PHP_FUNCTION(parse_ini_file)
-{
- zval **filename, **process_sections;
- zend_file_handle fh;
- zend_ini_parser_cb_t ini_parser_cb;
-
- switch (ZEND_NUM_ARGS()) {
-
- case 1:
- if (zend_get_parameters_ex(1, &filename) == FAILURE) {
- RETURN_FALSE;
- }
- ini_parser_cb = (zend_ini_parser_cb_t) php_simple_ini_parser_cb;
- break;
-
- case 2:
- if (zend_get_parameters_ex(2, &filename, &process_sections) == FAILURE) {
- RETURN_FALSE;
- }
-
- convert_to_boolean_ex(process_sections);
-
- if (Z_BVAL_PP(process_sections)) {
- BG(active_ini_file_section) = NULL;
- ini_parser_cb = (zend_ini_parser_cb_t) php_ini_parser_cb_with_sections;
- } else {
- ini_parser_cb = (zend_ini_parser_cb_t) php_simple_ini_parser_cb;
- }
- break;
-
- default:
- ZEND_WRONG_PARAM_COUNT();
- break;
- }
-
- convert_to_string_ex(filename);
-
- memset(&fh, 0, sizeof(fh));
- fh.filename = Z_STRVAL_PP(filename);
- Z_TYPE(fh) = ZEND_HANDLE_FILENAME;
-
- array_init(return_value);
- zend_parse_ini_file(&fh, 0, ini_parser_cb, return_value);
-}
-/* }}} */
-
-static int copy_request_variable(void *pDest, int num_args, va_list args, zend_hash_key *hash_key)
-{
- char *prefix, *new_key;
- uint prefix_len, new_key_len;
- zval **var = (zval **) pDest;
- TSRMLS_FETCH();
-
- if (num_args != 2) {
- return 0;
- }
-
- prefix = va_arg(args, char *);
- prefix_len = va_arg(args, uint);
-
- new_key_len = prefix_len + hash_key->nKeyLength;
- new_key = (char *) emalloc(new_key_len);
-
- memcpy(new_key, prefix, prefix_len);
- memcpy(new_key+prefix_len, hash_key->arKey, hash_key->nKeyLength);
-
- zend_hash_del(&EG(symbol_table), new_key, new_key_len);
- ZEND_SET_SYMBOL_WITH_LENGTH(&EG(symbol_table), new_key, new_key_len, *var, (*var)->refcount+1, 0);
-
- efree(new_key);
- return 0;
-}
-
-/* {{{ proto bool import_request_variables(string types [, string prefix])
- Import GET/POST/Cookie variables into the global scope */
-PHP_FUNCTION(import_request_variables)
-{
- zval **z_types, **z_prefix;
- char *types, *prefix;
- uint prefix_len;
- char *p;
-
- switch (ZEND_NUM_ARGS()) {
-
- case 1:
- if (zend_get_parameters_ex(1, &z_types) == FAILURE) {
- RETURN_FALSE;
- }
- prefix = "";
- prefix_len = 0;
- break;
-
- case 2:
- if (zend_get_parameters_ex(2, &z_types, &z_prefix) == FAILURE) {
- RETURN_FALSE;
- }
- convert_to_string_ex(z_prefix);
- prefix = Z_STRVAL_PP(z_prefix);
- prefix_len = Z_STRLEN_PP(z_prefix);
- break;
-
- default:
- ZEND_WRONG_PARAM_COUNT();
- }
-
- if (prefix_len == 0) {
- php_error_docref(NULL TSRMLS_CC, E_NOTICE, "No prefix specified - possible security hazard");
- }
-
- convert_to_string_ex(z_types);
- types = Z_STRVAL_PP(z_types);
-
- for (p = types; p && *p; p++) {
- switch (*p) {
-
- case 'g':
- case 'G':
- zend_hash_apply_with_arguments(Z_ARRVAL_P(PG(http_globals)[TRACK_VARS_GET]), (apply_func_args_t) copy_request_variable, 2, prefix, prefix_len);
- break;
-
- case 'p':
- case 'P':
- zend_hash_apply_with_arguments(Z_ARRVAL_P(PG(http_globals)[TRACK_VARS_POST]), (apply_func_args_t) copy_request_variable, 2, prefix, prefix_len);
- zend_hash_apply_with_arguments(Z_ARRVAL_P(PG(http_globals)[TRACK_VARS_FILES]), (apply_func_args_t) copy_request_variable, 2, prefix, prefix_len);
- break;
-
- case 'c':
- case 'C':
- zend_hash_apply_with_arguments(Z_ARRVAL_P(PG(http_globals)[TRACK_VARS_COOKIE]), (apply_func_args_t) copy_request_variable, 2, prefix, prefix_len);
- break;
- }
- }
-}
-/* }}} */
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- * vim600: fdm=marker
- * vim: noet sw=4 ts=4
- */
diff --git a/ext/standard/basic_functions.h b/ext/standard/basic_functions.h
deleted file mode 100644
index a41ae5099f..0000000000
--- a/ext/standard/basic_functions.h
+++ /dev/null
@@ -1,243 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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. |
- +----------------------------------------------------------------------+
- | Authors: Andi Gutmans <andi@zend.com> |
- | Zeev Suraski <zeev@zend.com> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifndef BASIC_FUNCTIONS_H
-#define BASIC_FUNCTIONS_H
-
-#include <sys/stat.h>
-
-#ifdef HAVE_WCHAR_H
-#include <wchar.h>
-#endif
-
-#include "php_filestat.h"
-
-#include "zend_highlight.h"
-
-#include "url_scanner.h"
-#include "url_scanner_ex.h"
-
-extern zend_module_entry basic_functions_module;
-#define basic_functions_module_ptr &basic_functions_module
-
-PHP_MINIT_FUNCTION(basic);
-PHP_MSHUTDOWN_FUNCTION(basic);
-PHP_RINIT_FUNCTION(basic);
-PHP_RSHUTDOWN_FUNCTION(basic);
-PHP_MINFO_FUNCTION(basic);
-
-PHP_FUNCTION(constant);
-PHP_FUNCTION(toggle_short_open_tag);
-PHP_FUNCTION(sleep);
-PHP_FUNCTION(usleep);
-#if HAVE_NANOSLEEP
-PHP_FUNCTION(time_nanosleep);
-#endif
-PHP_FUNCTION(flush);
-#ifdef HAVE_INET_NTOP
-PHP_NAMED_FUNCTION(php_inet_ntop);
-#endif
-#ifdef HAVE_INET_PTON
-PHP_NAMED_FUNCTION(php_inet_pton);
-#endif
-PHP_FUNCTION(ip2long);
-PHP_FUNCTION(long2ip);
-
-/* system functions */
-PHP_FUNCTION(getenv);
-PHP_FUNCTION(putenv);
-
-PHP_FUNCTION(getopt);
-
-PHP_FUNCTION(get_current_user);
-PHP_FUNCTION(set_time_limit);
-
-PHP_FUNCTION(get_cfg_var);
-PHP_FUNCTION(set_magic_quotes_runtime);
-PHP_FUNCTION(get_magic_quotes_runtime);
-PHP_FUNCTION(get_magic_quotes_gpc);
-
-PHP_FUNCTION(import_request_variables);
-
-PHP_FUNCTION(error_log);
-
-PHP_FUNCTION(call_user_func);
-PHP_FUNCTION(call_user_func_array);
-PHP_FUNCTION(call_user_method);
-PHP_FUNCTION(call_user_method_array);
-
-PHP_FUNCTION(register_shutdown_function);
-PHP_FUNCTION(highlight_file);
-PHP_FUNCTION(highlight_string);
-PHP_FUNCTION(php_strip_whitespace);
-PHP_FUNCTION(php_check_syntax);
-ZEND_API void php_get_highlight_struct(zend_syntax_highlighter_ini *syntax_highlighter_ini);
-
-PHP_FUNCTION(ini_get);
-PHP_FUNCTION(ini_get_all);
-PHP_FUNCTION(ini_set);
-PHP_FUNCTION(ini_restore);
-PHP_FUNCTION(get_include_path);
-PHP_FUNCTION(set_include_path);
-PHP_FUNCTION(restore_include_path);
-
-PHP_FUNCTION(print_r);
-PHP_FUNCTION(fprintf);
-PHP_FUNCTION(vfprintf);
-
-PHP_FUNCTION(connection_aborted);
-PHP_FUNCTION(connection_status);
-PHP_FUNCTION(ignore_user_abort);
-
-PHP_FUNCTION(getservbyname);
-PHP_FUNCTION(getservbyport);
-PHP_FUNCTION(getprotobyname);
-PHP_FUNCTION(getprotobynumber);
-
-PHP_NAMED_FUNCTION(php_if_crc32);
-
-PHP_FUNCTION(register_tick_function);
-PHP_FUNCTION(unregister_tick_function);
-
-PHP_FUNCTION(is_uploaded_file);
-PHP_FUNCTION(move_uploaded_file);
-
-/* From the INI parser */
-PHP_FUNCTION(parse_ini_file);
-
-PHP_FUNCTION(str_rot13);
-PHP_FUNCTION(stream_get_filters);
-PHP_FUNCTION(stream_filter_register);
-PHP_FUNCTION(stream_bucket_make_writeable);
-PHP_FUNCTION(stream_bucket_prepend);
-PHP_FUNCTION(stream_bucket_append);
-PHP_FUNCTION(stream_bucket_new);
-PHP_MINIT_FUNCTION(user_filters);
-PHP_RSHUTDOWN_FUNCTION(user_filters);
-
-PHPAPI int _php_error_log(int opt_err, char *message, char *opt, char *headers TSRMLS_DC);
-
-#if SIZEOF_INT == 4
-/* Most 32-bit and 64-bit systems have 32-bit ints */
-typedef unsigned int php_uint32;
-typedef signed int php_int32;
-#elif SIZEOF_LONG == 4
-/* 16-bit systems? */
-typedef unsigned long php_uint32;
-typedef signed int php_int32;
-#else
-#error Need type which holds 32 bits
-#endif
-
-#define MT_N (624)
-
-typedef struct _php_basic_globals {
- HashTable *user_shutdown_function_names;
- HashTable putenv_ht;
- zval *strtok_zval;
- char *strtok_string;
- char *locale_string;
- char *strtok_last;
- char strtok_table[256];
- ulong strtok_len;
- char str_ebuf[40];
- zval **array_walk_func_name;
- zend_fcall_info_cache array_walk_fci_cache;
- zval **user_compare_func_name;
- zend_fcall_info_cache user_compare_fci_cache;
- zend_llist *user_tick_functions;
-
- zval *active_ini_file_section;
-
- HashTable sm_protected_env_vars;
- char *sm_allowed_env_vars;
-
- /* pageinfo.c */
- long page_uid;
- long page_gid;
- long page_inode;
- long page_mtime;
-
- /* filestat.c && main/streams/streams.c */
- char *CurrentStatFile, *CurrentLStatFile;
- php_stream_statbuf ssb, lssb;
-
- /* rand.c */
- php_uint32 state[MT_N+1]; /* state vector + 1 extra to not violate ANSI C */
- php_uint32 *next; /* next random value is computed from here */
- int left; /* can *next++ this many times before reloading */
-
- unsigned int rand_seed; /* Seed for rand(), in ts version */
-
- zend_bool rand_is_seeded; /* Whether rand() has been seeded */
- zend_bool mt_rand_is_seeded; /* Whether mt_rand() has been seeded */
-
- /* syslog.c */
- int syslog_started;
- char *syslog_device;
-
- /* var.c */
- zend_class_entry *incomplete_class;
-
- /* url_scanner.c */
- url_adapt_state_t url_adapt_state;
- /* url_scanner_ex.re */
- url_adapt_state_ex_t url_adapt_state_ex;
-
-#ifdef HAVE_MMAP
- void *mmap_file;
- size_t mmap_len;
-#endif
-
- HashTable *user_filter_map;
-
- /* file.c */
-#if defined(_REENTRANT) && defined(HAVE_MBRLEN) && defined(HAVE_MBSTATE_T)
- mbstate_t mblen_state;
-#endif
-} php_basic_globals;
-
-#ifdef ZTS
-#define BG(v) TSRMG(basic_globals_id, php_basic_globals *, v)
-extern int basic_globals_id;
-#else
-#define BG(v) (basic_globals.v)
-extern php_basic_globals basic_globals;
-#endif
-
-#if HAVE_PUTENV
-typedef struct {
- char *putenv_string;
- char *previous_value;
- char *key;
- int key_len;
-} putenv_entry;
-#endif
-
-/* Values are comma-delimited
- */
-#define SAFE_MODE_PROTECTED_ENV_VARS "LD_LIBRARY_PATH"
-#define SAFE_MODE_ALLOWED_ENV_VARS "PHP_"
-
-PHPAPI double php_get_nan();
-PHPAPI double php_get_inf();
-
-#endif /* BASIC_FUNCTIONS_H */
diff --git a/ext/standard/browscap.c b/ext/standard/browscap.c
deleted file mode 100644
index 2baf3735b1..0000000000
--- a/ext/standard/browscap.c
+++ /dev/null
@@ -1,360 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Zeev Suraski <zeev@zend.com> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-#include "php.h"
-#include "php_regex.h"
-#include "php_browscap.h"
-#include "php_ini.h"
-#include "php_string.h"
-
-#include "zend_globals.h"
-
-static HashTable browser_hash;
-static zval *current_section;
-
-#define DEFAULT_SECTION_NAME "Default Browser Capability Settings"
-
-/* OBJECTS_FIXME: This whole extension needs going through. The use of objects looks pretty broken here */
-
-static void browscap_entry_dtor(zval *pvalue)
-{
- if (Z_TYPE_P(pvalue) == IS_ARRAY) {
- zend_hash_destroy(Z_ARRVAL_P(pvalue));
- free(Z_ARRVAL_P(pvalue));
- }
-}
-
-/* {{{ convert_browscap_pattern
- */
-static void convert_browscap_pattern(zval *pattern)
-{
- register int i, j;
- char *t;
-
- php_strtolower(Z_STRVAL_P(pattern), Z_STRLEN_P(pattern));
-
- t = (char *) malloc(Z_STRLEN_P(pattern)*2 + 3);
-
- t[0] = '^';
-
- for (i=0, j=1; i<Z_STRLEN_P(pattern); i++, j++) {
- switch (Z_STRVAL_P(pattern)[i]) {
- case '?':
- t[j] = '.';
- break;
- case '*':
- t[j++] = '.';
- t[j] = '*';
- break;
- case '.':
- t[j++] = '\\';
- t[j] = '.';
- break;
- default:
- t[j] = Z_STRVAL_P(pattern)[i];
- break;
- }
- }
-
- t[j++] = '$';
-
- t[j]=0;
- Z_STRVAL_P(pattern) = t;
- Z_STRLEN_P(pattern) = j;
-}
-/* }}} */
-
-/* {{{ php_browscap_parser_cb
- */
-static void php_browscap_parser_cb(zval *arg1, zval *arg2, int callback_type, void *arg)
-{
- if (!arg1) {
- return;
- }
-
- switch (callback_type) {
- case ZEND_INI_PARSER_ENTRY:
- if (current_section && arg2) {
- zval *new_property;
- char *new_key;
-
- new_property = (zval *) malloc(sizeof(zval));
- INIT_PZVAL(new_property);
- Z_STRVAL_P(new_property) = Z_STRLEN_P(arg2)?zend_strndup(Z_STRVAL_P(arg2), Z_STRLEN_P(arg2)):"";
- Z_STRLEN_P(new_property) = Z_STRLEN_P(arg2);
- Z_TYPE_P(new_property) = IS_STRING;
-
- new_key = zend_strndup(Z_STRVAL_P(arg1), Z_STRLEN_P(arg1));
- zend_str_tolower(new_key, Z_STRLEN_P(arg1));
- zend_hash_update(Z_ARRVAL_P(current_section), new_key, Z_STRLEN_P(arg1)+1, &new_property, sizeof(zval *), NULL);
- free(new_key);
- }
- break;
- case ZEND_INI_PARSER_SECTION: {
- zval *processed;
- zval *unprocessed;
- HashTable *section_properties;
-
- /*printf("'%s' (%d)\n",$1.value.str.val,$1.value.str.len+1);*/
- current_section = (zval *) malloc(sizeof(zval));
- INIT_PZVAL(current_section);
- processed = (zval *) malloc(sizeof(zval));
- INIT_PZVAL(processed);
- unprocessed = (zval *) malloc(sizeof(zval));
- INIT_PZVAL(unprocessed);
-
- section_properties = (HashTable *) malloc(sizeof(HashTable));
- zend_hash_init(section_properties, 0, NULL, (dtor_func_t) browscap_entry_dtor, 1);
- current_section->value.ht = section_properties;
- zend_hash_update(&browser_hash, Z_STRVAL_P(arg1), Z_STRLEN_P(arg1)+1, (void *) &current_section, sizeof(zval *), NULL);
-
- Z_STRVAL_P(processed) = Z_STRVAL_P(arg1);
- Z_STRLEN_P(processed) = Z_STRLEN_P(arg1);
- Z_TYPE_P(processed) = IS_STRING;
- Z_STRVAL_P(unprocessed) = Z_STRVAL_P(arg1);
- Z_STRLEN_P(unprocessed) = Z_STRLEN_P(arg1);
- Z_TYPE_P(unprocessed) = IS_STRING;
- Z_STRVAL_P(unprocessed) = zend_strndup(Z_STRVAL_P(unprocessed), Z_STRLEN_P(unprocessed));
-
- convert_browscap_pattern(processed);
- zend_hash_update(section_properties, "browser_name_regex", sizeof("browser_name_regex"), (void *) &processed, sizeof(zval *), NULL);
- zend_hash_update(section_properties, "browser_name_pattern", sizeof("browser_name_pattern"), (void *) &unprocessed, sizeof(zval *), NULL);
- }
- break;
- }
-}
-/* }}} */
-
-/* {{{ PHP_MINIT_FUNCTION
- */
-PHP_MINIT_FUNCTION(browscap)
-{
- char *browscap = INI_STR("browscap");
-
- if (browscap && browscap[0]) {
- zend_file_handle fh;
- memset(&fh, 0, sizeof(fh));
-
- if (zend_hash_init_ex(&browser_hash, 0, NULL, (dtor_func_t) browscap_entry_dtor, 1, 0)==FAILURE) {
- return FAILURE;
- }
-
- fh.handle.fp = VCWD_FOPEN(browscap, "r");
- fh.opened_path = NULL;
- fh.free_filename = 0;
- if (!fh.handle.fp) {
- zend_error(E_CORE_WARNING, "Cannot open '%s' for reading", browscap);
- return FAILURE;
- }
- fh.filename = browscap;
- Z_TYPE(fh) = ZEND_HANDLE_FP;
- zend_parse_ini_file(&fh, 1, (zend_ini_parser_cb_t) php_browscap_parser_cb, &browser_hash);
- }
-
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ PHP_MSHUTDOWN_FUNCTION
- */
-PHP_MSHUTDOWN_FUNCTION(browscap)
-{
- char *browscap = INI_STR("browscap");
- if (browscap && browscap[0]) {
- zend_hash_destroy(&browser_hash);
- }
- return SUCCESS;
-}
-/* }}} */
-
-
-/* {{{ browser_reg_compare
- */
-static int browser_reg_compare(zval **browser, int num_args, va_list args, zend_hash_key *key)
-{
- zval **browser_regex, **previous_match;
- regex_t r;
- char *lookup_browser_name = va_arg(args, char *);
- zval **found_browser_entry = va_arg(args, zval **);
-
- /* See if we have an exact match, if so, we're done... */
- if (*found_browser_entry) {
- if (zend_hash_find(Z_ARRVAL_PP(found_browser_entry), "browser_name_pattern", sizeof("browser_name_pattern"), (void**) &previous_match) == FAILURE) {
- return 0;
- }
- else if (!strcasecmp(Z_STRVAL_PP(previous_match), lookup_browser_name)) {
- return 0;
- }
- }
-
-
- if (zend_hash_find(Z_ARRVAL_PP(browser), "browser_name_regex", sizeof("browser_name_regex"), (void **) &browser_regex) == FAILURE) {
- return 0;
- }
-
- if (regcomp(&r, Z_STRVAL_PP(browser_regex), REG_NOSUB)!=0) {
- return 0;
- }
- if (regexec(&r, lookup_browser_name, 0, NULL, 0)==0) {
- /* If we've found a possible browser, we need to do a comparison of the
- number of characters changed in the user agent being checked versus
- the previous match found and the current match. */
- if (*found_browser_entry) {
- int i, prev_len = 0, curr_len = 0, ua_len;
- zval **current_match;
-
- if (zend_hash_find(Z_ARRVAL_PP(browser), "browser_name_pattern", sizeof("browser_name_pattern"), (void**) &current_match) == FAILURE) {
- regfree(&r);
- return 0;
- }
-
- ua_len = strlen(lookup_browser_name);
-
- for (i = 0; i < Z_STRLEN_PP(previous_match); i++) {
- switch (Z_STRVAL_PP(previous_match)[i]) {
- case '?':
- case '*':
- /* do nothing, ignore these characters in the count */
- break;
-
- default:
- ++prev_len;
- }
- }
-
- for (i = 0; i < Z_STRLEN_PP(current_match); i++) {
- switch (Z_STRVAL_PP(current_match)[i]) {
- case '?':
- case '*':
- /* do nothing, ignore these characters in the count */
- break;
-
- default:
- ++curr_len;
- }
- }
-
-
- /* Pick which browser pattern replaces the least amount of
- characters when compared to the original user agent string... */
- if (ua_len - prev_len > ua_len - curr_len) {
- *found_browser_entry = *browser;
- }
- }
- else {
- *found_browser_entry = *browser;
- }
- }
-
- if (&r) {
- regfree(&r);
- }
-
- return 0;
-}
-/* }}} */
-
-/* {{{ proto mixed get_browser([string browser_name [, bool return_array]])
- Get information about the capabilities of a browser. If browser_name is omitted
- or null, HTTP_USER_AGENT is used. Returns an object by default; if return_array
- is true, returns an array. */
-PHP_FUNCTION(get_browser)
-{
- zval **agent_name = NULL, **agent, **retarr;
- zval *found_browser_entry, *tmp_copy;
- char *lookup_browser_name;
- zend_bool return_array = 0;
- char *browscap = INI_STR("browscap");
-
- if (!browscap || !browscap[0]) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "browscap ini directive not set.");
- RETURN_FALSE;
- }
-
- if (ZEND_NUM_ARGS() > 2 || zend_get_parameters_ex(ZEND_NUM_ARGS(), &agent_name, &retarr) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- if (agent_name == NULL || Z_TYPE_PP(agent_name) == IS_NULL) {
- zend_is_auto_global("_SERVER", sizeof("_SERVER")-1 TSRMLS_CC);
- if (!PG(http_globals)[TRACK_VARS_SERVER]
- || zend_hash_find(PG(http_globals)[TRACK_VARS_SERVER]->value.ht, "HTTP_USER_AGENT", sizeof("HTTP_USER_AGENT"), (void **) &agent_name)==FAILURE) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "HTTP_USER_AGENT variable is not set, cannot determine user agent name");
- RETURN_FALSE;
- }
- }
-
- convert_to_string_ex(agent_name);
- lookup_browser_name = estrndup(Z_STRVAL_PP(agent_name), Z_STRLEN_PP(agent_name));
- php_strtolower(lookup_browser_name, strlen(lookup_browser_name));
-
- if (ZEND_NUM_ARGS() == 2) {
- convert_to_boolean_ex(retarr);
- return_array = Z_BVAL_PP(retarr);
- }
-
- if (zend_hash_find(&browser_hash, lookup_browser_name, strlen(lookup_browser_name)+1, (void **) &agent)==FAILURE) {
- found_browser_entry = NULL;
- zend_hash_apply_with_arguments(&browser_hash, (apply_func_args_t) browser_reg_compare, 2, lookup_browser_name, &found_browser_entry);
-
- if (found_browser_entry) {
- agent = &found_browser_entry;
- } else if (zend_hash_find(&browser_hash, DEFAULT_SECTION_NAME, sizeof(DEFAULT_SECTION_NAME), (void **) &agent)==FAILURE) {
- efree(lookup_browser_name);
- RETURN_FALSE;
- }
- }
-
- if (return_array) {
- array_init(return_value);
- zend_hash_copy(Z_ARRVAL_P(return_value), Z_ARRVAL_PP(agent), (copy_ctor_func_t) zval_add_ref, (void *) &tmp_copy, sizeof(zval *));
- }
- else {
- object_init(return_value);
- zend_hash_copy(Z_OBJPROP_P(return_value), Z_ARRVAL_PP(agent), (copy_ctor_func_t) zval_add_ref, (void *) &tmp_copy, sizeof(zval *));
- }
-
- while (zend_hash_find(Z_ARRVAL_PP(agent), "parent", sizeof("parent"), (void **) &agent_name)==SUCCESS) {
- if (zend_hash_find(&browser_hash, Z_STRVAL_PP(agent_name), Z_STRLEN_PP(agent_name)+1, (void **)&agent)==FAILURE) {
- break;
- }
-
- if (return_array) {
- zend_hash_merge(Z_ARRVAL_P(return_value), Z_ARRVAL_PP(agent), (copy_ctor_func_t) zval_add_ref, (void *) &tmp_copy, sizeof(zval *), 0);
- }
- else {
- zend_hash_merge(Z_OBJPROP_P(return_value), Z_ARRVAL_PP(agent), (copy_ctor_func_t) zval_add_ref, (void *) &tmp_copy, sizeof(zval *), 0);
- }
- }
-
- if (lookup_browser_name) {
- efree(lookup_browser_name);
- }
-}
-/* }}} */
-
-/*
- * 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/standard/config.m4 b/ext/standard/config.m4
deleted file mode 100644
index 7a8689d897..0000000000
--- a/ext/standard/config.m4
+++ /dev/null
@@ -1,474 +0,0 @@
-dnl $Id$ -*- sh -*-
-
-divert(3)dnl
-
-dnl
-dnl Check if flush should be called explicitly after buffered io
-dnl
-AC_DEFUN(AC_FLUSH_IO,[
- AC_CACHE_CHECK([whether flush should be called explicitly after a buffered io], ac_cv_flush_io,[
- AC_TRY_RUN( [
-#include <stdio.h>
-#include <stdlib.h>
-
-int main(int argc, char **argv)
-{
- char *filename = tmpnam(NULL);
- char buffer[64];
- int result = 0;
-
- FILE *fp = fopen(filename, "wb");
- if (NULL == fp)
- return 0;
- fputs("line 1\n", fp);
- fputs("line 2\n", fp);
- fclose(fp);
-
- fp = fopen(filename, "rb+");
- if (NULL == fp)
- return 0;
- fgets(buffer, sizeof(buffer), fp);
- fputs("line 3\n", fp);
- rewind(fp);
- fgets(buffer, sizeof(buffer), fp);
- if (0 != strcmp(buffer, "line 1\n"))
- result = 1;
- fgets(buffer, sizeof(buffer), fp);
- if (0 != strcmp(buffer, "line 3\n"))
- result = 1;
- fclose(fp);
- unlink(filename);
-
- exit(result);
-}
-],[
- ac_cv_flush_io=no
-],[
- ac_cv_flush_io=yes
-],[
- ac_cv_flush_io=no
-])])
- if test "$ac_cv_flush_io" = "yes"; then
- AC_DEFINE(HAVE_FLUSHIO, 1, [Define if flush should be called explicitly after a buffered io.])
- fi
-])
-
-dnl
-dnl Check for crypt() capabilities
-dnl
-AC_DEFUN(AC_CRYPT_CAP,[
-
- if test "$ac_cv_func_crypt" = "no"; then
- AC_CHECK_LIB(crypt, crypt, [
- LIBS="-lcrypt $LIBS -lcrypt"
- AC_DEFINE(HAVE_CRYPT, 1, [ ])
- ])
- fi
-
- AC_CACHE_CHECK(for standard DES crypt, ac_cv_crypt_des,[
- AC_TRY_RUN([
-#if HAVE_CRYPT_H
-#include <crypt.h>
-#endif
-
-main() {
-#if HAVE_CRYPT
- exit (strcmp((char *)crypt("rasmuslerdorf","rl"),"rl.3StKT.4T8M"));
-#else
- exit(0);
-#endif
-}],[
- ac_cv_crypt_des=yes
- ],[
- ac_cv_crypt_des=no
- ],[
- ac_cv_crypt_des=yes
- ])
- ])
- if test "$ac_cv_crypt_des" = "yes"; then
- ac_result=1
- else
- ac_result=0
- fi
- AC_DEFINE_UNQUOTED(PHP_STD_DES_CRYPT, $ac_result, [Whether the system supports standard DES salt])
-
- AC_CACHE_CHECK(for extended DES crypt, ac_cv_crypt_ext_des,[
- AC_TRY_RUN([
-#if HAVE_CRYPT_H
-#include <crypt.h>
-#endif
-
-main() {
-#if HAVE_CRYPT
- exit (strcmp((char *)crypt("rasmuslerdorf","_J9..rasm"),"_J9..rasmBYk8r9AiWNc"));
-#else
- exit(0);
-#endif
-}],[
- ac_cv_crypt_ext_des=yes
- ],[
- ac_cv_crypt_ext_des=no
- ],[
- ac_cv_crypt_ext_des=no
- ])
- ])
- if test "$ac_cv_crypt_ext_des" = "yes"; then
- ac_result=1
- else
- ac_result=0
- fi
- AC_DEFINE_UNQUOTED(PHP_EXT_DES_CRYPT, $ac_result, [Whether the system supports extended DES salt])
-
- AC_CACHE_CHECK(for MD5 crypt, ac_cv_crypt_md5,[
- AC_TRY_RUN([
-#if HAVE_CRYPT_H
-#include <crypt.h>
-#endif
-
-main() {
-#if HAVE_CRYPT
- char salt[15], answer[40];
-
- salt[0]='$'; salt[1]='1'; salt[2]='$';
- salt[3]='r'; salt[4]='a'; salt[5]='s';
- salt[6]='m'; salt[7]='u'; salt[8]='s';
- salt[9]='l'; salt[10]='e'; salt[11]='$';
- salt[12]='\0';
- strcpy(answer,salt);
- strcat(answer,"rISCgZzpwk3UhDidwXvin0");
- exit (strcmp((char *)crypt("rasmuslerdorf",salt),answer));
-#else
- exit(0);
-#endif
-}],[
- ac_cv_crypt_md5=yes
- ],[
- ac_cv_crypt_md5=no
- ],[
- ac_cv_crypt_md5=no
- ])
- ])
- if test "$ac_cv_crypt_md5" = "yes"; then
- ac_result=1
- else
- if test "$ac_cv_crypt_des" != "yes"; then
- PHP_DEBUG_MACRO(debug.log)
- fi
- ac_result=0
- fi
- AC_DEFINE_UNQUOTED(PHP_MD5_CRYPT, $ac_result, [Whether the system supports MD5 salt])
-
- AC_CACHE_CHECK(for Blowfish crypt, ac_cv_crypt_blowfish,[
- AC_TRY_RUN([
-#if HAVE_CRYPT_H
-#include <crypt.h>
-#endif
-
-main() {
-#if HAVE_CRYPT
- char salt[30], answer[70];
-
- salt[0]='$'; salt[1]='2'; salt[2]='a'; salt[3]='$'; salt[4]='0'; salt[5]='7'; salt[6]='$'; salt[7]='\0';
- strcat(salt,"rasmuslerd............");
- strcpy(answer,salt);
- strcpy(&answer[29],"nIdrcHdxcUxWomQX9j6kvERCFjTg7Ra");
- exit (strcmp((char *)crypt("rasmuslerdorf",salt),answer));
-#else
- exit(0);
-#endif
-}],[
- ac_cv_crypt_blowfish=yes
- ],[
- ac_cv_crypt_blowfish=no
- ],[
- ac_cv_crypt_blowfish=no
- ])
- ])
- if test "$ac_cv_crypt_blowfish" = "yes"; then
- ac_result=1
- else
- ac_result=0
- fi
- AC_DEFINE_UNQUOTED(PHP_BLOWFISH_CRYPT, $ac_result, [Whether the system supports BlowFish salt])
-])
-
-AC_CHECK_FUNCS(getcwd getwd asinh acosh atanh log1p hypot)
-
-AC_CRYPT_CAP
-AC_FLUSH_IO
-
-divert(5)dnl
-
-AC_ARG_WITH(regex,
-[ --with-regex=TYPE regex library type: system, apache, php. Default: php
- WARNING: Do NOT use unless you know what you are doing!],
-[
- case $withval in
- system)
- if test "$PHP_SAPI" = "apache" || test "$PHP_SAPI" = "apache2filter" || test "$PHP_SAPI" = "apache2handler"; then
- REGEX_TYPE=php
- else
- REGEX_TYPE=system
- fi
- ;;
- apache)
- REGEX_TYPE=apache
- ;;
- php)
- REGEX_TYPE=php
- ;;
- *)
- REGEX_TYPE=php
- AC_MSG_WARN(Invalid regex library type. Using default value: php)
- ;;
- esac
-],[
- REGEX_TYPE=php
-])
-
-PHP_REGEX
-
-AC_FUNC_FNMATCH
-
-dnl Take a look and see if there is a support means of creating a new process
-dnl and defining which handles it receives
-AC_DEFUN([PHP_CHECK_IF_SUPPORT_PROC_OPEN],[
-
- AC_CACHE_VAL(php_can_support_proc_open,[
- AC_CHECK_FUNCS(fork CreateProcess, [
- php_can_support_proc_open=yes
- break
- ],[
- php_can_support_proc_open=no
- ])
- ])
-
- AC_MSG_CHECKING([if your OS can spawn processes with inherited handles])
- if test "$php_can_support_proc_open" = "yes"; then
- AC_MSG_RESULT(yes)
- AC_DEFINE(PHP_CAN_SUPPORT_PROC_OPEN,1, [Define if your system has fork/vfork/CreateProcess])
- else
- AC_MSG_RESULT(no)
- fi
-
-])
-
-dnl
-dnl round fuzz
-dnl
-AC_MSG_CHECKING([whether rounding works as expected])
-AC_TRY_RUN([
-#include <math.h>
- int main() {
- return floor(0.045*pow(10,2) + 0.5)/10.0 != 0.5;
- }
-],[
- PHP_ROUND_FUZZ=0.5
- AC_MSG_RESULT(yes)
-],[
- PHP_ROUND_FUZZ=0.50000000001
- AC_MSG_RESULT(no)
-],[
- PHP_ROUND_FUZZ=0.50000000001
- AC_MSG_RESULT(cross compile)
-])
-AC_DEFINE_UNQUOTED(PHP_ROUND_FUZZ, $PHP_ROUND_FUZZ, [ see #24142 ])
-
-PHP_CHECK_IF_SUPPORT_PROC_OPEN
-
-dnl getopt long options disabled for now
-dnl as we can't be sure that we get the right getopt.h here
-dnl using the standard AC_CHECK macros
-dnl AC_CHECK_HEADERS(getopt.h)
-dnl AC_CHECK_FUNCS(getopt_long getopt_long_only)
-
-AC_CHECK_FUNCS(glob strfmon nice)
-
-if test "$PHP_SAPI" = "cgi" -o "$PHP_SAPI" = "cli" -o "$PHP_SAPI" = "embed"; then
- AC_DEFINE(ENABLE_CHROOT_FUNC, 1, [Whether to enable chroot() function])
-fi
-
-dnl
-dnl Detect library functions needed by php dns_xxx functions
-dnl ext/standard/dns.h will collect these in a single define: HAVE_DNS_FUNCS
-dnl
-PHP_CHECK_FUNC(res_nmkquery, resolv, bind, socket)
-PHP_CHECK_FUNC(res_nsend, resolv, bind, socket)
-PHP_CHECK_FUNC(dn_expand, resolv, bind, socket)
-dnl already done PHP_CHECK_FUNC(dn_skipname, resolv, bind, socket)
-
-dnl
-dnl Check for i18n capabilities
-dnl
-AC_DEFUN([PHP_CHECK_I18N_FUNCS],[
- AC_CHECK_HEADERS([wchar.h])
- AC_CHECK_FUNCS([mblen])
- AC_CHECK_FUNCS([mbrlen mbsinit],,,[
-#ifdef HAVE_WCHAR_H
-# include <wchar.h>
-#endif
- ])
- AC_CACHE_CHECK([for mbstate_t], [ac_cv_type_mbstate_t],[
- AC_TRY_COMPILE([
-#ifdef HAVE_WCHAR_H
-# include <wchar.h>
-#endif
- ],[
-int __tmp__() { mbstate_t a; }
- ],[
- ac_cv_type_mbstate_t=yes
- ],[
- ac_cv_type_mbstate_t=no
- ])
- ])
- if test "$ac_cv_type_mbstate_t" = "yes"; then
- AC_DEFINE([HAVE_MBSTATE_T], 1, [Define if your system has mbstate_t in wchar.h])
- fi
-])
-
-AC_CHECK_FUNCS(fpclass isinf isnan)
-
-AC_CACHE_CHECK(whether atof() accepts NAN, ac_cv_atof_accept_nan,[
- AC_TRY_RUN([
-#include <math.h>
-#include <stdlib.h>
-
-#ifdef HAVE_ISNAN
-#define zend_isnan(a) isnan(a)
-#elif defined(HAVE_FPCLASS)
-#define zend_isnan(a) ((fpclass(a) == FP_SNAN) || (fpclass(a) == FP_QNAN))
-#else
-#define zend_isnan(a) 0
-#endif
-
-int main(int argc, char** argv)
-{
- return zend_isnan(atof("NAN")) ? 0 : 1;
-}
- ],[
- ac_cv_atof_accept_nan=yes
- ],[
- ac_cv_atof_accept_nan=no
- ],[
- ac_cv_atof_accept_nan=no
- ])
-])
-if test "$ac_cv_atof_accept_nan" = "yes"; then
- AC_DEFINE([HAVE_ATOF_ACCEPTS_NAN], 1, [whether atof() accepts NAN])
-fi
-
-AC_CACHE_CHECK(whether atof() accepts INF, ac_cv_atof_accept_inf,[
- AC_TRY_RUN([
-#include <math.h>
-#include <stdlib.h>
-
-#ifdef HAVE_ISINF
-#define zend_isinf(a) isinf(a)
-#elif defined(INFINITY)
-/* Might not work, but is required by ISO C99 */
-#define zend_isinf(a) (((a)==INFINITY)?1:0)
-#elif defined(HAVE_FPCLASS)
-#define zend_isinf(a) ((fpclass(a) == FP_PINF) || (fpclass(a) == FP_NINF))
-#else
-#define zend_isinf(a) 0
-#endif
-
-int main(int argc, char** argv)
-{
- return zend_isinf(atof("INF")) && zend_isinf(atof("-INF")) ? 0 : 1;
-}
- ],[
- ac_cv_atof_accept_inf=yes
- ],[
- ac_cv_atof_accept_inf=no
- ],[
- ac_cv_atof_accept_inf=no
- ])
-])
-if test "$ac_cv_atof_accept_inf" = "yes"; then
- AC_DEFINE([HAVE_ATOF_ACCEPTS_INF], 1, [whether atof() accepts INF])
-fi
-
-AC_CACHE_CHECK(whether HUGE_VAL == INF, ac_cv_huge_val_inf,[
- AC_TRY_RUN([
-#include <math.h>
-#include <stdlib.h>
-
-#ifdef HAVE_ISINF
-#define zend_isinf(a) isinf(a)
-#elif defined(INFINITY)
-/* Might not work, but is required by ISO C99 */
-#define zend_isinf(a) (((a)==INFINITY)?1:0)
-#elif defined(HAVE_FPCLASS)
-#define zend_isinf(a) ((fpclass(a) == FP_PINF) || (fpclass(a) == FP_NINF))
-#else
-#define zend_isinf(a) 0
-#endif
-
-int main(int argc, char** argv)
-{
- return zend_isinf(HUGE_VAL) ? 0 : 1;
-}
- ],[
- ac_cv_huge_val_inf=yes
- ],[
- ac_cv_huge_val_inf=no
- ],[
- ac_cv_huge_val_inf=yes
- ])
-])
-dnl This is the most probable fallback so we assume yes in case of cross compile.
-if test "$ac_cv_huge_val_inf" = "yes"; then
- AC_DEFINE([HAVE_HUGE_VAL_INF], 1, [whether HUGE_VAL == INF])
-fi
-
-AC_CACHE_CHECK(whether HUGE_VAL + -HUGEVAL == NAN, ac_cv_huge_val_nan,[
- AC_TRY_RUN([
-#include <math.h>
-#include <stdlib.h>
-
-#ifdef HAVE_ISNAN
-#define zend_isnan(a) isnan(a)
-#elif defined(HAVE_FPCLASS)
-#define zend_isnan(a) ((fpclass(a) == FP_SNAN) || (fpclass(a) == FP_QNAN))
-#else
-#define zend_isnan(a) 0
-#endif
-
-int main(int argc, char** argv)
-{
-#if defined(__sparc__) && !(__GNUC__ >= 3)
- /* prevent bug #27830 */
- return 1;
-#else
- return zend_isnan(HUGE_VAL + -HUGE_VAL) ? 0 : 1;
-#endif
-}
- ],[
- ac_cv_huge_val_nan=yes
- ],[
- ac_cv_huge_val_nan=no
- ],[
- ac_cv_huge_val_nan=yes
- ])
-])
-dnl This is the most probable fallback so we assume yes in case of cross compile.
-if test "$ac_cv_huge_val_nan" = "yes"; then
- AC_DEFINE([HAVE_HUGE_VAL_NAN], 1, [whether HUGE_VAL + -HUGEVAL == NAN])
-fi
-
-PHP_CHECK_I18N_FUNCS
-
-PHP_NEW_EXTENSION(standard, array.c base64.c basic_functions.c browscap.c crc32.c crypt.c \
- cyr_convert.c datetime.c dir.c dl.c dns.c exec.c file.c filestat.c \
- flock_compat.c formatted_print.c fsock.c head.c html.c image.c \
- info.c iptc.c lcg.c link.c mail.c math.c md5.c metaphone.c \
- microtime.c pack.c pageinfo.c parsedate.c quot_print.c rand.c \
- reg.c soundex.c string.c scanf.c syslog.c type.c uniqid.c url.c \
- url_scanner.c var.c versioning.c assert.c strnatcmp.c levenshtein.c \
- incomplete_class.c url_scanner_ex.c ftp_fopen_wrapper.c \
- http_fopen_wrapper.c php_fopen_wrapper.c credits.c css.c \
- var_unserializer.c ftok.c sha1.c user_filters.c uuencode.c \
- filters.c proc_open.c sunfuncs.c streamsfuncs.c http.c)
-
-PHP_ADD_MAKEFILE_FRAGMENT
diff --git a/ext/standard/config.w32 b/ext/standard/config.w32
deleted file mode 100644
index d587dedcc6..0000000000
--- a/ext/standard/config.w32
+++ /dev/null
@@ -1,18 +0,0 @@
-// vim:ft=javascript
-// $Id$
-
-ARG_WITH("config-file-scan-dir", "Dir to check for additional php ini files", "");
-AC_DEFINE("PHP_CONFIG_FILE_SCAN_DIR", PHP_CONFIG_FILE_SCAN_DIR);
-
-EXTENSION("standard", "array.c base64.c basic_functions.c browscap.c \
- crc32.c crypt.c cyr_convert.c datetime.c dir.c dl.c dns.c exec.c \
- file.c filestat.c formatted_print.c fsock.c head.c html.c image.c \
- info.c iptc.c lcg.c link.c mail.c math.c md5.c metaphone.c microtime.c \
- pack.c pageinfo.c parsedate.c quot_print.c rand.c reg.c soundex.c \
- string.c scanf.c syslog.c type.c uniqid.c url.c url_scanner.c var.c \
- versioning.c assert.c strnatcmp.c levenshtein.c incomplete_class.c \
- url_scanner_ex.c ftp_fopen_wrapper.c http_fopen_wrapper.c \
- php_fopen_wrapper.c credits.c css.c var_unserializer.c ftok.c sha1.c \
- user_filters.c uuencode.c filters.c proc_open.c sunfuncs.c \
- streamsfuncs.c http.c", false /* never shared */);
-
diff --git a/ext/standard/crc32.c b/ext/standard/crc32.c
deleted file mode 100644
index 7ee36b4473..0000000000
--- a/ext/standard/crc32.c
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Rasmus Lerdorf <rasmus@php.net> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#include "php.h"
-#include "basic_functions.h"
-#include "crc32.h"
-
-/* {{{ proto string crc32(string str)
- Calculate the crc32 polynomial of a string */
-PHP_NAMED_FUNCTION(php_if_crc32)
-{
- unsigned int crc = ~0;
- char *p;
- int len, nr;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &p, &nr) == FAILURE) {
- return;
- }
-
- len = 0 ;
- for (len += nr; nr--; ++p) {
- CRC32(crc, *p);
- }
- RETVAL_LONG(~crc);
-}
-/* }}} */
-
-/*
- * 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/standard/crc32.h b/ext/standard/crc32.h
deleted file mode 100644
index 818d0542fa..0000000000
--- a/ext/standard/crc32.h
+++ /dev/null
@@ -1,109 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Rasmus Lerdorf <rasmus@php.net> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-/*
- * This code implements the AUTODIN II polynomial
- * The variable corresponding to the macro argument "crc" should
- * be an unsigned long.
- * Oroginal code by Spencer Garrett <srg@quick.com>
- */
-
-#define CRC32(crc, ch) (crc = (crc >> 8) ^ crc32tab[(crc ^ (ch)) & 0xff])
-
-/* generated using the AUTODIN II polynomial
- * x^32 + x^26 + x^23 + x^22 + x^16 +
- * x^12 + x^11 + x^10 + x^8 + x^7 + x^5 + x^4 + x^2 + x^1 + 1
- */
-
-static const unsigned int crc32tab[256] = {
- 0x00000000, 0x77073096, 0xee0e612c, 0x990951ba,
- 0x076dc419, 0x706af48f, 0xe963a535, 0x9e6495a3,
- 0x0edb8832, 0x79dcb8a4, 0xe0d5e91e, 0x97d2d988,
- 0x09b64c2b, 0x7eb17cbd, 0xe7b82d07, 0x90bf1d91,
- 0x1db71064, 0x6ab020f2, 0xf3b97148, 0x84be41de,
- 0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7,
- 0x136c9856, 0x646ba8c0, 0xfd62f97a, 0x8a65c9ec,
- 0x14015c4f, 0x63066cd9, 0xfa0f3d63, 0x8d080df5,
- 0x3b6e20c8, 0x4c69105e, 0xd56041e4, 0xa2677172,
- 0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b,
- 0x35b5a8fa, 0x42b2986c, 0xdbbbc9d6, 0xacbcf940,
- 0x32d86ce3, 0x45df5c75, 0xdcd60dcf, 0xabd13d59,
- 0x26d930ac, 0x51de003a, 0xc8d75180, 0xbfd06116,
- 0x21b4f4b5, 0x56b3c423, 0xcfba9599, 0xb8bda50f,
- 0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924,
- 0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d,
- 0x76dc4190, 0x01db7106, 0x98d220bc, 0xefd5102a,
- 0x71b18589, 0x06b6b51f, 0x9fbfe4a5, 0xe8b8d433,
- 0x7807c9a2, 0x0f00f934, 0x9609a88e, 0xe10e9818,
- 0x7f6a0dbb, 0x086d3d2d, 0x91646c97, 0xe6635c01,
- 0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e,
- 0x6c0695ed, 0x1b01a57b, 0x8208f4c1, 0xf50fc457,
- 0x65b0d9c6, 0x12b7e950, 0x8bbeb8ea, 0xfcb9887c,
- 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3, 0xfbd44c65,
- 0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2,
- 0x4adfa541, 0x3dd895d7, 0xa4d1c46d, 0xd3d6f4fb,
- 0x4369e96a, 0x346ed9fc, 0xad678846, 0xda60b8d0,
- 0x44042d73, 0x33031de5, 0xaa0a4c5f, 0xdd0d7cc9,
- 0x5005713c, 0x270241aa, 0xbe0b1010, 0xc90c2086,
- 0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f,
- 0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4,
- 0x59b33d17, 0x2eb40d81, 0xb7bd5c3b, 0xc0ba6cad,
- 0xedb88320, 0x9abfb3b6, 0x03b6e20c, 0x74b1d29a,
- 0xead54739, 0x9dd277af, 0x04db2615, 0x73dc1683,
- 0xe3630b12, 0x94643b84, 0x0d6d6a3e, 0x7a6a5aa8,
- 0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1,
- 0xf00f9344, 0x8708a3d2, 0x1e01f268, 0x6906c2fe,
- 0xf762575d, 0x806567cb, 0x196c3671, 0x6e6b06e7,
- 0xfed41b76, 0x89d32be0, 0x10da7a5a, 0x67dd4acc,
- 0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5,
- 0xd6d6a3e8, 0xa1d1937e, 0x38d8c2c4, 0x4fdff252,
- 0xd1bb67f1, 0xa6bc5767, 0x3fb506dd, 0x48b2364b,
- 0xd80d2bda, 0xaf0a1b4c, 0x36034af6, 0x41047a60,
- 0xdf60efc3, 0xa867df55, 0x316e8eef, 0x4669be79,
- 0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236,
- 0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f,
- 0xc5ba3bbe, 0xb2bd0b28, 0x2bb45a92, 0x5cb36a04,
- 0xc2d7ffa7, 0xb5d0cf31, 0x2cd99e8b, 0x5bdeae1d,
- 0x9b64c2b0, 0xec63f226, 0x756aa39c, 0x026d930a,
- 0x9c0906a9, 0xeb0e363f, 0x72076785, 0x05005713,
- 0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38,
- 0x92d28e9b, 0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21,
- 0x86d3d2d4, 0xf1d4e242, 0x68ddb3f8, 0x1fda836e,
- 0x81be16cd, 0xf6b9265b, 0x6fb077e1, 0x18b74777,
- 0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c,
- 0x8f659eff, 0xf862ae69, 0x616bffd3, 0x166ccf45,
- 0xa00ae278, 0xd70dd2ee, 0x4e048354, 0x3903b3c2,
- 0xa7672661, 0xd06016f7, 0x4969474d, 0x3e6e77db,
- 0xaed16a4a, 0xd9d65adc, 0x40df0b66, 0x37d83bf0,
- 0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9,
- 0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6,
- 0xbad03605, 0xcdd70693, 0x54de5729, 0x23d967bf,
- 0xb3667a2e, 0xc4614ab8, 0x5d681b02, 0x2a6f2b94,
- 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, 0x2d02ef8d,
-};
-
-/*
- * 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/standard/credits.c b/ext/standard/credits.c
deleted file mode 100644
index 7cc9137955..0000000000
--- a/ext/standard/credits.c
+++ /dev/null
@@ -1,124 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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. |
- +----------------------------------------------------------------------+
- | Authors: Rasmus Lerdorf <rasmus@php.net> |
- | Zeev Suraski <zeev@zend.com> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#include "php.h"
-#include "info.h"
-
-#define CREDIT_LINE(module, authors) php_info_print_table_row(2, module, authors)
-
-/* {{{ php_print_credits
- */
-PHPAPI void php_print_credits(int flag TSRMLS_DC)
-{
- if (flag & PHP_CREDITS_FULLPAGE) {
- php_print_info_htmlhead(TSRMLS_C);
- }
-
- PUTS("<h1>PHP Credits</h1>\n");
-
- if (flag & PHP_CREDITS_GROUP) {
- /* Group */
-
- php_info_print_table_start();
- php_info_print_table_header(1, "PHP Group");
- php_info_print_table_row(1, "Thies C. Arntzen, Stig Bakken, Shane Caraveo, Andi Gutmans, Rasmus Lerdorf, Sam Ruby, Sascha Schumann, Zeev Suraski, Jim Winstead, Andrei Zmievski");
- php_info_print_table_end();
- }
-
- if (flag & PHP_CREDITS_GENERAL) {
- /* Design & Concept */
- php_info_print_table_start();
- php_info_print_table_header(1, "Language Design &amp; Concept");
- php_info_print_table_row(1, "Andi Gutmans, Rasmus Lerdorf, Zeev Suraski");
- php_info_print_table_end();
-
- /* PHP Language */
- php_info_print_table_start();
- php_info_print_table_colspan_header(2, "PHP 5 Authors");
- 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("Win32 Port", "Shane Caraveo, Zeev Suraski");
- CREDIT_LINE("Server API (SAPI) Abstraction Layer", "Andi Gutmans, Shane Caraveo, Zeev Suraski");
- CREDIT_LINE("Streams Abstraction Layer", "Wez Furlong");
- php_info_print_table_end();
- }
-
- if (flag & PHP_CREDITS_SAPI) {
- /* SAPI Modules */
-
- php_info_print_table_start();
- php_info_print_table_colspan_header(2, "SAPI Modules");
- php_info_print_table_header(2, "Contribution", "Authors");
-#include "credits_sapi.h"
- php_info_print_table_end();
- }
-
- if (flag & PHP_CREDITS_MODULES) {
- /* Modules */
-
- php_info_print_table_start();
- php_info_print_table_colspan_header(2, "Module Authors");
- php_info_print_table_header(2, "Module", "Authors");
-#include "credits_ext.h"
- php_info_print_table_end();
- }
-
- if (flag & PHP_CREDITS_DOCS) {
- php_info_print_table_start();
- php_info_print_table_colspan_header(2, "PHP Documentation");
- CREDIT_LINE("Authors", "Mehdi Achour, Friedhelm Betz, Antony Dovgal, Nuno Lopes, Philip Olson, Georg Richter, Damien Seguy, Jakub Vrana");
- CREDIT_LINE("Editor", "Gabor Hojtsy");
- CREDIT_LINE("User Note Maintainers", "Mehdi Achour, Friedhelm Betz, Vincent Gevers, Aidan Lister, Nuno Lopes, Tom Sommer");
- CREDIT_LINE("Other Contributors", "Previously active authors, editors and other contributors are listed in the manual.");
- php_info_print_table_end();
- }
-
- if (flag & PHP_CREDITS_QA) {
- php_info_print_table_start();
- php_info_print_table_header(1, "PHP 5.0 Quality Assurance Team");
- php_info_print_table_row(1, "Ilia Alshanetsky, Joerg Behrens, Stefan Esser, Moriyoshi Koizumi, Magnus Maatta, Sebastian Nohn, Derick Rethans, Melvyn Sopacua, Jani Taskinen");
- php_info_print_table_end();
- }
-
- if (flag & PHP_CREDITS_WEB) {
- /* Website Team */
- php_info_print_table_start();
- php_info_print_table_header(1, "PHP Website Team");
- php_info_print_table_row(1, "Gabor Hojtsy, Colin Viebrock, Jim Winstead");
- php_info_print_table_end();
- }
-
- if (flag & PHP_CREDITS_FULLPAGE) {
- PUTS("</div></body></html>\n");
- }
-}
-/* }}} */
-
-/*
- * 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/standard/credits.h b/ext/standard/credits.h
deleted file mode 100644
index 1d3caf3e36..0000000000
--- a/ext/standard/credits.h
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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. |
- +----------------------------------------------------------------------+
- | Authors: Rasmus Lerdorf <rasmus@php.net> |
- | Zeev Suraski <zeev@zend.com> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifndef CREDITS_H
-#define CREDITS_H
-
-#ifndef HAVE_CREDITS_DEFS
-#define HAVE_CREDITS_DEFS
-
-#define PHP_CREDITS_GROUP (1<<0)
-#define PHP_CREDITS_GENERAL (1<<1)
-#define PHP_CREDITS_SAPI (1<<2)
-#define PHP_CREDITS_MODULES (1<<3)
-#define PHP_CREDITS_DOCS (1<<4)
-#define PHP_CREDITS_FULLPAGE (1<<5)
-#define PHP_CREDITS_QA (1<<6)
-#define PHP_CREDITS_WEB (1<<7)
-#define PHP_CREDITS_ALL 0xFFFFFFFF
-
-#endif /* HAVE_CREDITS_DEFS */
-
-PHPAPI void php_print_credits(int flag TSRMLS_DC);
-
-#endif
diff --git a/ext/standard/credits_ext.h b/ext/standard/credits_ext.h
deleted file mode 100644
index cc0a3320b2..0000000000
--- a/ext/standard/credits_ext.h
+++ /dev/null
@@ -1,93 +0,0 @@
-/*
- DO NOT EDIT THIS FILE!
-
- it has been automaticaly created by php5/scripts/credits from
- the information found in the various php5/ext/.../CREDITS and
- php5/sapi/.../CREDITS files
-
- if you want to change an entry you have to edit the appropriate
- CREDITS file instead
-
-*/
-
-CREDIT_LINE("Assert", "Thies C. Arntzen");
-CREDIT_LINE("BC Math", "Andi Gutmans");
-CREDIT_LINE("Bzip2", "Sterling Hughes");
-CREDIT_LINE("Calendar", "Shane Caraveo, Colin Viebrock, Hartmut Holzgraefe, Wez Furlong");
-CREDIT_LINE("COM and .Net", "Wez Furlong");
-CREDIT_LINE("cpdf", "Uwe Steinmann");
-CREDIT_LINE("ctype", "Hartmut Holzgraefe");
-CREDIT_LINE("cURL", "Sterling Hughes");
-CREDIT_LINE("DBA", "Sascha Schumann, Marcus Boerger");
-CREDIT_LINE("dBase", "Jim Winstead");
-CREDIT_LINE("dbx (database abstraction)", "Marc Boeren, Rui Hirokawa, Frank M. Kromann");
-CREDIT_LINE("DOM", "Christian Stocker, Rob Richards, Marcus Boerger");
-CREDIT_LINE("EXIF", "Rasmus Lerdorf, Marcus Boerger");
-CREDIT_LINE("fam", "Sascha Schumann");
-CREDIT_LINE("FBSQL", "Frank M. Kromann");
-CREDIT_LINE("FDF", "Uwe Steinmann");
-CREDIT_LINE("FilePro", "Chad Robinson");
-CREDIT_LINE("FTP", "Stefan Esser, Andrew Skalski");
-CREDIT_LINE("GD imaging", "Rasmus Lerdorf, Stig Bakken, Jim Winstead, Jouni Ahto, Ilia Alshanetsky, Pierre-Alain Joye, Marcus Boerger");
-CREDIT_LINE("GetText", "Alex Plotnick");
-CREDIT_LINE("GNU GMP support", "Stanislav Malyshev");
-CREDIT_LINE("HwAPI", "Uwe Steinmann");
-CREDIT_LINE("Iconv", "Rui Hirokawa, Stig Bakken, Moriyoshi Koizumi ");
-CREDIT_LINE("IMAP", "Rex Logan, Mark Musone, Brian Wang, Kaj-Michael Lang, Antoni Pamies Olive, Rasmus Lerdorf, Andrew Skalski, Chuck Hagenbuch, Daniel R Kalowsky");
-CREDIT_LINE("Informix", "Danny Heijl, Christian Cartus, Corne' Cornelius");
-CREDIT_LINE("Ingres II", "David Hénot");
-CREDIT_LINE("InterBase", "Jouni Ahto, Andrew Avdeev, Ard Biesheuvel");
-CREDIT_LINE("IRCG", "Sascha Schumann");
-CREDIT_LINE("LDAP", "Amitay Isaacs, Eric Warnke, Rasmus Lerdorf, Gerrit Thomson, Stig Venaas");
-CREDIT_LINE("LIBXML", "Christian Stocker, Rob Richards, Marcus Boerger, Wez Furlong, Shane Caraveo");
-CREDIT_LINE("mcrypt", "Sascha Schumann, Derick Rethans");
-CREDIT_LINE("MCVE", "Brad House, Chris Faulhaber, Steven Schoch");
-CREDIT_LINE("mhash", "Sascha Schumann");
-CREDIT_LINE("mime_magic", "Hartmut Holzgraefe");
-CREDIT_LINE("MING", "Dave Hayden, Frank M. Kromann");
-CREDIT_LINE("mnoGoSearch", "Sergey Kartashoff, Alex Barkov, Ramil Kalimullin");
-CREDIT_LINE("mono", "Sterling Hughes");
-CREDIT_LINE("msession", "Mark L. Woodward");
-CREDIT_LINE("mSQL", "Zeev Suraski");
-CREDIT_LINE("MS SQL", "Frank M. Kromann");
-CREDIT_LINE("Multibyte String Functions", "Tsukada Takuya, Rui Hirokawa");
-CREDIT_LINE("MySQLi", "Zak Greant, Georg Richter");
-CREDIT_LINE("MySQL", "Zeev Suraski, Zak Greant, Georg Richter");
-CREDIT_LINE("ncurses", "Ilia Alshanetsky, Wez Furlong, Hartmut Holzgraefe, Georg Richter");
-CREDIT_LINE("OCI8", "Stig Bakken, Thies C. Arntzen, Andy Sautins, David Benson, Maxim Maletsky, Harald Radi, Antony Dovgal");
-CREDIT_LINE("ODBC", "Stig Bakken, Andreas Karajannis, Frank M. Kromann, Daniel R. Kalowsky");
-CREDIT_LINE("OpenSSL", "Stig Venaas, Wez Furlong, Sascha Kettler");
-CREDIT_LINE("Oracle", "Stig Bakken, Mitch Golden, Rasmus Lerdorf, Andreas Karajannis, Thies C. Arntzen");
-CREDIT_LINE("Ovrimos", "Nikos Mavroyanopoulos");
-CREDIT_LINE("pcntl", "Jason Greene");
-CREDIT_LINE("PDF", "Uwe Steinmann, Rainer Schaaf");
-CREDIT_LINE("Perl Compatible Regexps", "Andrei Zmievski");
-CREDIT_LINE("Posix", "Kristian Köhntopp");
-CREDIT_LINE("PostgreSQL", "Jouni Ahto, Zeev Suraski, Yasuo Ohgaki");
-CREDIT_LINE("Pspell", "Vlad Krupin");
-CREDIT_LINE("Readline", "Thies C. Arntzen");
-CREDIT_LINE("Recode", "Kristian Köhntopp");
-CREDIT_LINE("Sessions", "Sascha Schumann, Andrei Zmievski");
-CREDIT_LINE("Shared Memory Operations", "Slava Poliakov, Ilia Alshanetsky");
-CREDIT_LINE("SimpleXML", "Sterling Hughes, Marcus Boerger, Rob Richards");
-CREDIT_LINE("SNMP", "Rasmus Lerdorf, Harrie Hazewinkel, Mike Jackson, Steven Lawrance, Johann Hanne");
-CREDIT_LINE("SOAP", "Brad Lafountain, Shane Caraveo, Dmitry Stogov");
-CREDIT_LINE("Sockets", "Chris Vandomelen, Sterling Hughes, Daniel Beulshausen, Jason Greene");
-CREDIT_LINE("SPL", "Marcus Boerger");
-CREDIT_LINE("SQLite", "Wez Furlong, Tal Peer, Marcus Boerger, Ilia Alshanetsky");
-CREDIT_LINE("Sybase-CT", "Zeev Suraski, Tom May, Timm Friebe");
-CREDIT_LINE("Sybase-DB", "Zeev Suraski");
-CREDIT_LINE("System V Message based IPC", "Wez Furlong");
-CREDIT_LINE("System V Semaphores", "Tom May");
-CREDIT_LINE("System V Shared Memory", "Christian Cartus");
-CREDIT_LINE("tidy", "John Coggeshall, Ilia Alshanetsky");
-CREDIT_LINE("tokenizer", "Andrei Zmievski");
-CREDIT_LINE("Verisign Payflow Pro", "John Donagher, David Croft");
-CREDIT_LINE("W32API", "James Moore");
-CREDIT_LINE("WDDX", "Andrei Zmievski");
-CREDIT_LINE("xmlrpc", "Dan Libby");
-CREDIT_LINE("XML", "Stig Bakken, Thies C. Arntzen, Sterling Hughes");
-CREDIT_LINE("XSL", "Christian Stocker, Rob Richards");
-CREDIT_LINE("YAZ", "Adam Dickmeiss");
-CREDIT_LINE("Yellow Pages", "Stephanie Wehner, Fredrik Ohrn");
-CREDIT_LINE("Zlib", "Rasmus Lerdorf, Stefan Roehrich, Zeev Suraski, Jade Nicoletti");
diff --git a/ext/standard/credits_sapi.h b/ext/standard/credits_sapi.h
deleted file mode 100644
index ab7c2755a7..0000000000
--- a/ext/standard/credits_sapi.h
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
- DO NOT EDIT THIS FILE!
-
- it has been automaticaly created by php5/scripts/credits from
- the information found in the various php5/ext/.../CREDITS and
- php5/sapi/.../CREDITS files
-
- if you want to change an entry you have to edit the appropriate
- CREDITS file instead
-
-*/
-
-CREDIT_LINE("ActiveScript", "Wez Furlong");
-CREDIT_LINE("AOLserver", "Sascha Schumann");
-CREDIT_LINE("Apache 1.3 (apache_hooks)", "Rasmus Lerdorf, Zeev Suraski, Stig Bakken, David Sklar, George Schlossnagle, Lukas Schroeder");
-CREDIT_LINE("Apache 1.3", "Rasmus Lerdorf, Zeev Suraski, Stig Bakken, David Sklar");
-CREDIT_LINE("Apache 2.0 Filter", "Sascha Schumann, Aaron Bannert");
-CREDIT_LINE("Apache 2.0 Handler", "Ian Holsman, Justin Erenkrantz (based on Apache 2.0 Filter code)");
-CREDIT_LINE("Caudium / Roxen", "David Hedbor");
-CREDIT_LINE("CGI / FastCGI", "Rasmus Lerdorf, Stig Bakken, Shane Caraveo");
-CREDIT_LINE("CLI", "Edin Kadribasic, Marcus Boerger");
-CREDIT_LINE("Continuity", "Alex Leigh (based on nsapi code)");
-CREDIT_LINE("Embed", "Edin Kadribasic");
-CREDIT_LINE("ISAPI", "Andi Gutmans, Zeev Suraski");
-CREDIT_LINE("NSAPI", "Jayakumar Muthukumarasamy, Uwe Schindler");
-CREDIT_LINE("phttpd", "Thies C. Arntzen");
-CREDIT_LINE("pi3web", "Holger Zimmermann");
-CREDIT_LINE("Sendmail Milter", "Harald Radi");
-CREDIT_LINE("thttpd", "Sascha Schumann");
-CREDIT_LINE("tux", "Sascha Schumann");
-CREDIT_LINE("WebJames", "Alex Waugh");
diff --git a/ext/standard/crypt.c b/ext/standard/crypt.c
deleted file mode 100644
index fc6a61bb87..0000000000
--- a/ext/standard/crypt.c
+++ /dev/null
@@ -1,161 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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. |
- +----------------------------------------------------------------------+
- | Authors: Stig Bakken <ssb@php.net> |
- | Zeev Suraski <zeev@zend.com> |
- | Rasmus Lerdorf <rasmus@php.net> |
- +----------------------------------------------------------------------+
- */
-/* $Id$ */
-#include <stdlib.h>
-
-#include "php.h"
-
-#if HAVE_CRYPT
-
-#if HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-#if HAVE_CRYPT_H
-#include <crypt.h>
-#endif
-#if TM_IN_SYS_TIME
-#include <sys/time.h>
-#else
-#include <time.h>
-#endif
-#if HAVE_STRING_H
-#include <string.h>
-#else
-#include <strings.h>
-#endif
-
-#ifdef PHP_WIN32
-#include <process.h>
-extern char *crypt(char *__key, char *__salt);
-#endif
-
-#include "php_lcg.h"
-#include "php_crypt.h"
-#include "php_rand.h"
-
-/*
- The capabilities of the crypt() function is determined by the test programs
- run by configure from aclocal.m4. They will set PHP_STD_DES_CRYPT,
- PHP_EXT_DES_CRYPT, PHP_MD5_CRYPT and PHP_BLOWFISH_CRYPT as appropriate
- for the target platform
-*/
-#if PHP_STD_DES_CRYPT
-#define PHP_MAX_SALT_LEN 2
-#endif
-
-#if PHP_EXT_DES_CRYPT
-#undef PHP_MAX_SALT_LEN
-#define PHP_MAX_SALT_LEN 9
-#endif
-
-#if PHP_MD5_CRYPT
-#undef PHP_MAX_SALT_LEN
-#define PHP_MAX_SALT_LEN 12
-#endif
-
-#if PHP_BLOWFISH_CRYPT
-#undef PHP_MAX_SALT_LEN
-#define PHP_MAX_SALT_LEN 60
-#endif
-
- /*
- * If the configure-time checks fail, we provide DES.
- * XXX: This is a hack. Fix the real problem
- */
-
-#ifndef PHP_MAX_SALT_LEN
-#define PHP_MAX_SALT_LEN 2
-#undef PHP_STD_DES_CRYPT
-#define PHP_STD_DES_CRYPT 1
-#endif
-
-
-#define PHP_CRYPT_RAND php_rand(TSRMLS_C)
-
-PHP_MINIT_FUNCTION(crypt)
-{
- REGISTER_LONG_CONSTANT("CRYPT_SALT_LENGTH", PHP_MAX_SALT_LEN, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("CRYPT_STD_DES", PHP_STD_DES_CRYPT, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("CRYPT_EXT_DES", PHP_EXT_DES_CRYPT, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("CRYPT_MD5", PHP_MD5_CRYPT, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("CRYPT_BLOWFISH", PHP_BLOWFISH_CRYPT, CONST_CS | CONST_PERSISTENT);
-
- return SUCCESS;
-}
-
-
-static unsigned char itoa64[] = "./0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
-
-static void php_to64(char *s, long v, int n)
-{
- while (--n >= 0) {
- *s++ = itoa64[v&0x3f];
- v >>= 6;
- }
-}
-
-/* {{{ proto string crypt(string str [, string salt])
- Encrypt a string */
-PHP_FUNCTION(crypt)
-{
- char salt[PHP_MAX_SALT_LEN+1];
- char *str, *salt_in = NULL;
- int str_len, salt_in_len;
-
- salt[0]=salt[PHP_MAX_SALT_LEN]='\0';
- /* This will produce suitable results if people depend on DES-encryption
- available (passing always 2-character salt). At least for glibc6.1 */
- memset(&salt[1], '$', PHP_MAX_SALT_LEN-1);
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|s", &str, &str_len,
- &salt_in, &salt_in_len) == FAILURE) {
- return;
- }
-
- if (salt_in) {
- memcpy(salt, salt_in, MIN(PHP_MAX_SALT_LEN, salt_in_len));
- }
-
- /* The automatic salt generation only covers standard DES and md5-crypt */
- if(!*salt) {
-#if PHP_MD5_CRYPT
- strcpy(salt, "$1$");
- php_to64(&salt[3], PHP_CRYPT_RAND, 4);
- php_to64(&salt[7], PHP_CRYPT_RAND, 4);
- strcpy(&salt[11], "$");
-#elif PHP_STD_DES_CRYPT
- php_to64(&salt[0], PHP_CRYPT_RAND, 2);
- salt[2] = '\0';
-#endif
- }
-
- RETVAL_STRING(crypt(str, salt), 1);
-}
-/* }}} */
-#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/standard/css.c b/ext/standard/css.c
deleted file mode 100644
index 05c5d0795d..0000000000
--- a/ext/standard/css.c
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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. |
- +----------------------------------------------------------------------+
- | Authors: Colin Viebrock <colin@easydns.com> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#include "php.h"
-#include "info.h"
-
-
-/* {{{ php_info_print_css
- */
-PHPAPI void php_info_print_css(TSRMLS_D)
-{
- PUTS("body {background-color: #ffffff; color: #000000;}\n");
- PUTS("body, td, th, h1, h2 {font-family: sans-serif;}\n");
- PUTS("pre {margin: 0px; font-family: monospace;}\n");
- PUTS("a:link {color: #000099; text-decoration: none; background-color: #ffffff;}\n");
- PUTS("a:hover {text-decoration: underline;}\n");
- PUTS("table {border-collapse: collapse;}\n");
- PUTS(".center {text-align: center;}\n");
- PUTS(".center table { margin-left: auto; margin-right: auto; text-align: left;}\n");
- PUTS(".center th { text-align: center !important; }\n");
- PUTS("td, th { border: 1px solid #000000; font-size: 75%; vertical-align: baseline;}\n");
- PUTS("h1 {font-size: 150%;}\n");
- PUTS("h2 {font-size: 125%;}\n");
- PUTS(".p {text-align: left;}\n");
- PUTS(".e {background-color: #ccccff; font-weight: bold; color: #000000;}\n");
- PUTS(".h {background-color: #9999cc; font-weight: bold; color: #000000;}\n");
- PUTS(".v {background-color: #cccccc; color: #000000;}\n");
- PUTS(".vr {background-color: #cccccc; text-align: right; color: #000000;}\n");
- PUTS("img {float: right; border: 0px;}\n");
- PUTS("hr {width: 600px; background-color: #cccccc; border: 0px; height: 1px; color: #000000;}\n");
-}
-/* }}} */
-
-/*
- * 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/standard/css.h b/ext/standard/css.h
deleted file mode 100644
index 252cad0e10..0000000000
--- a/ext/standard/css.h
+++ /dev/null
@@ -1,26 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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. |
- +----------------------------------------------------------------------+
- | Authors: Colin Viebrock <colin@easydns.com> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifndef CSS_H
-#define CSS_H
-
-PHPAPI void php_info_print_css(TSRMLS_D);
-
-#endif
diff --git a/ext/standard/cyr_convert.c b/ext/standard/cyr_convert.c
deleted file mode 100644
index ae3459ec4c..0000000000
--- a/ext/standard/cyr_convert.c
+++ /dev/null
@@ -1,299 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Kirill Maximov <kir@rus.net> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-#include <stdlib.h>
-
-#ifdef HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-#include <string.h>
-#include <errno.h>
-
-#include "php.h"
-#include "cyr_convert.h"
-
-#include <stdio.h>
-
-/*****************************************************************************
-* This is codetables for different Cyrillic charsets (relative to koi8-r).
-* Each table contains data for 128-255 symbols from ASCII table.
-* First 256 symbols are for conversion from koi8-r to corresponding charset,
-* second 256 symbols are for reverse conversion, from charset to koi8-r.
-*
-* Here we have the following tables:
-* _cyr_win1251 - for windows-1251 charset
-* _cyr_iso88595 - for iso8859-5 charset
-* _cyr_cp866 - for x-cp866 charset
-* _cyr_mac - for x-mac-cyrillic charset
-*
-*****************************************************************************/
-
-typedef unsigned char _cyr_charset_table[512];
-
-/* {{{ const static _cyr_charset_table _cyr_win1251
- */
-const static _cyr_charset_table _cyr_win1251 = {
-0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,
-16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,
-32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,
-48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,
-64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,
-80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,
-96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,
-112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,
-46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,
-46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,
-154,174,190,46,159,189,46,46,179,191,180,157,46,46,156,183,
-46,46,182,166,173,46,46,158,163,152,164,155,46,46,46,167,
-225,226,247,231,228,229,246,250,233,234,235,236,237,238,239,240,
-242,243,244,245,230,232,227,254,251,253,255,249,248,252,224,241,
-193,194,215,199,196,197,214,218,201,202,203,204,205,206,207,208,
-210,211,212,213,198,200,195,222,219,221,223,217,216,220,192,209,
-0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,
-16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,
-32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,
-48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,
-64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,
-80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,
-96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,
-112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,
-32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,
-32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,
-32,32,32,184,186,32,179,191,32,32,32,32,32,180,162,32,
-32,32,32,168,170,32,178,175,32,32,32,32,32,165,161,169,
-254,224,225,246,228,229,244,227,245,232,233,234,235,236,237,238,
-239,255,240,241,242,243,230,226,252,251,231,248,253,249,247,250,
-222,192,193,214,196,197,212,195,213,200,201,202,203,204,205,206,
-207,223,208,209,210,211,198,194,220,219,199,216,221,217,215,218,
-},
-_cyr_cp866 = {
-0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,
-16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,
-32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,
-48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,
-64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,
-80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,
-96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,
-112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,
-225,226,247,231,228,229,246,250,233,234,235,236,237,238,239,240,
-242,243,244,245,230,232,227,254,251,253,255,249,248,252,224,241,
-193,194,215,199,196,197,214,218,201,202,203,204,205,206,207,208,
-35,35,35,124,124,124,124,43,43,124,124,43,43,43,43,43,
-43,45,45,124,45,43,124,124,43,43,45,45,124,45,43,45,
-45,45,45,43,43,43,43,43,43,43,43,35,35,124,124,35,
-210,211,212,213,198,200,195,222,219,221,223,217,216,220,192,209,
-179,163,180,164,183,167,190,174,32,149,158,32,152,159,148,154,
-0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,
-16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,
-32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,
-48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,
-64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,
-80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,
-96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,
-112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,
-32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,
-32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,
-205,186,213,241,243,201,32,245,187,212,211,200,190,32,247,198,
-199,204,181,240,242,185,32,244,203,207,208,202,216,32,246,32,
-238,160,161,230,164,165,228,163,229,168,169,170,171,172,173,174,
-175,239,224,225,226,227,166,162,236,235,167,232,237,233,231,234,
-158,128,129,150,132,133,148,131,149,136,137,138,139,140,141,142,
-143,159,144,145,146,147,134,130,156,155,135,152,157,153,151,154,
-},
-_cyr_iso88595 = {
-0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,
-16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,
-32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,
-48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,
-64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,
-80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,
-96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,
-112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,
-32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,
-32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,
-32,179,32,32,32,32,32,32,32,32,32,32,32,32,32,32,
-225,226,247,231,228,229,246,250,233,234,235,236,237,238,239,240,
-242,243,244,245,230,232,227,254,251,253,255,249,248,252,224,241,
-193,194,215,199,196,197,214,218,201,202,203,204,205,206,207,208,
-210,211,212,213,198,200,195,222,219,221,223,217,216,220,192,209,
-32,163,32,32,32,32,32,32,32,32,32,32,32,32,32,32,
-0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,
-16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,
-32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,
-48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,
-64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,
-80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,
-96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,
-112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,
-32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,
-32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,
-32,32,32,241,32,32,32,32,32,32,32,32,32,32,32,32,
-32,32,32,161,32,32,32,32,32,32,32,32,32,32,32,32,
-238,208,209,230,212,213,228,211,229,216,217,218,219,220,221,222,
-223,239,224,225,226,227,214,210,236,235,215,232,237,233,231,234,
-206,176,177,198,180,181,196,179,197,184,185,186,187,188,189,190,
-191,207,192,193,194,195,182,178,204,203,183,200,205,201,199,202,
-},
-_cyr_mac = {
-0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,
-16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,
-32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,
-48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,
-64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,
-80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,
-96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,
-112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,
-225,226,247,231,228,229,246,250,233,234,235,236,237,238,239,240,
-242,243,244,245,230,232,227,254,251,253,255,249,248,252,224,241,
-160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,
-176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,
-128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,
-144,145,146,147,148,149,150,151,152,153,154,155,156,179,163,209,
-193,194,215,199,196,197,214,218,201,202,203,204,205,206,207,208,
-210,211,212,213,198,200,195,222,219,221,223,217,216,220,192,255,
-0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,
-16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,
-32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,
-48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,
-64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,
-80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,
-96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,
-112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,
-192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,
-208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,
-160,161,162,222,164,165,166,167,168,169,170,171,172,173,174,175,
-176,177,178,221,180,181,182,183,184,185,186,187,188,189,190,191,
-254,224,225,246,228,229,244,227,245,232,233,234,235,236,237,238,
-239,223,240,241,242,243,230,226,252,251,231,248,253,249,247,250,
-158,128,129,150,132,133,148,131,149,136,137,138,139,140,141,142,
-143,159,144,145,146,147,134,130,156,155,135,152,157,153,151,154,
-};
-/* }}} */
-
-/* {{{ php_convert_cyr_string
-* This is the function that performs real in-place conversion of the string
-* between charsets.
-* Parameters:
-* str - string to be converted
-* from,to - one-symbol label of source and destination charset
-* The following symbols are used as labels:
-* k - koi8-r
-* w - windows-1251
-* i - iso8859-5
-* a - x-cp866
-* d - x-cp866
-* m - x-mac-cyrillic
-*****************************************************************************/
-static char * php_convert_cyr_string(unsigned char *str, int length, char from, char to TSRMLS_DC)
-{
- const unsigned char *from_table, *to_table;
- unsigned char tmp;
- int i;
-
- from_table = NULL;
- to_table = NULL;
-
- switch (toupper((int)(unsigned char)from))
- {
- case 'W':
- from_table = _cyr_win1251;
- break;
- case 'A':
- case 'D':
- from_table = _cyr_cp866;
- break;
- case 'I':
- from_table = _cyr_iso88595;
- break;
- case 'M':
- from_table = _cyr_mac;
- break;
- case 'K':
- break;
- default:
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unknown source charset: %c", from);
- break;
- }
-
- switch (toupper((int)(unsigned char)to))
- {
- case 'W':
- to_table = _cyr_win1251;
- break;
- case 'A':
- case 'D':
- to_table = _cyr_cp866;
- break;
- case 'I':
- to_table = _cyr_iso88595;
- break;
- case 'M':
- to_table = _cyr_mac;
- break;
- case 'K':
- break;
- default:
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unknown destination charset: %c", to);
- break;
- }
-
-
- if (!str)
- return (char *)str;
-
- for( i = 0; i<length; i++)
- {
- tmp = (from_table == NULL)? str[i] : from_table[ str[i] ];
- str[i] = (to_table == NULL) ? tmp : to_table[tmp + 256];
- }
- return (char *)str;
-}
-/* }}} */
-
-/* {{{ proto string convert_cyr_string(string str, string from, string to)
- Convert from one Cyrillic character set to another */
-PHP_FUNCTION(convert_cyr_string)
-{
- pval **str_arg, **fr_cs, **to_cs;
- unsigned char *str;
-
- if (ZEND_NUM_ARGS() != 3 || zend_get_parameters_ex(3,&str_arg,&fr_cs, &to_cs)==FAILURE)
- {
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex(str_arg);
- convert_to_string_ex(fr_cs);
- convert_to_string_ex(to_cs);
-
- str = (unsigned char*) estrndup(Z_STRVAL_PP(str_arg), Z_STRLEN_PP(str_arg));
-
- php_convert_cyr_string(str, Z_STRLEN_PP(str_arg), Z_STRVAL_PP(fr_cs)[0], Z_STRVAL_PP(to_cs)[0] TSRMLS_CC);
- RETVAL_STRING((char *)str, 0)
-}
-/* }}} */
-
-/*
- * 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/standard/cyr_convert.h b/ext/standard/cyr_convert.h
deleted file mode 100644
index 20caf4eea2..0000000000
--- a/ext/standard/cyr_convert.h
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Kirill Maximov <kir@rus.net> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifndef CYR_CONVERT_H
-#define CYR_CONVERT_H
-
-PHP_FUNCTION(convert_cyr_string);
-
-#endif /* CYR_CONVERT_H */
-
-
-
diff --git a/ext/standard/datetime.c b/ext/standard/datetime.c
deleted file mode 100644
index 694668198d..0000000000
--- a/ext/standard/datetime.c
+++ /dev/null
@@ -1,1105 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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. |
- +----------------------------------------------------------------------+
- | Authors: Andi Gutmans <andi@zend.com> |
- | Zeev Suraski <zeev@zend.com> |
- | Rasmus Lerdorf <rasmus@php.net> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-#include "php.h"
-#include "zend_operators.h"
-#include "datetime.h"
-#include "php_globals.h"
-
-#include <time.h>
-#ifdef HAVE_SYS_TIME_H
-# include <sys/time.h>
-#endif
-#include <stdio.h>
-
-#include "php_parsedate.h"
-
-char *mon_full_names[] = {
- "January", "February", "March", "April",
- "May", "June", "July", "August",
- "September", "October", "November", "December"
-};
-
-char *mon_short_names[] = {
- "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"
-};
-
-char *day_full_names[] = {
- "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"
-};
-
-char *day_short_names[] = {
- "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"
-};
-
-#if !defined(HAVE_TM_ZONE) && !defined(_TIMEZONE) && !defined(HAVE_DECLARED_TIMEZONE)
-#if defined(NETWARE) && defined(NEW_LIBC)
-#define timezone _timezone /* timezone is called '_timezone' in new version of LibC */
-#endif
-extern time_t timezone;
-extern int daylight;
-#endif
-
-static int phpday_tab[2][12] = {
- {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31},
- {31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}
-};
-
-#define isleap(year) ((((year) % 4) == 0 && ((year) % 100) != 0) || ((year) % 400)==0)
-#define YEAR_BASE 1900
-
-/* {{{ proto int time(void)
- Return current UNIX timestamp */
-PHP_FUNCTION(time)
-{
- RETURN_LONG((long)time(NULL));
-}
-/* }}} */
-
-/* {{{ php_mktime
- */
-void php_mktime(INTERNAL_FUNCTION_PARAMETERS, int gm)
-{
- pval **arguments[7];
- struct tm *ta, tmbuf;
- time_t t, seconds;
- int i, gmadjust, arg_count = ZEND_NUM_ARGS();
- int is_dst = -1, chgsecs = 0;
- long val;
-
- if (arg_count > 7 || zend_get_parameters_array_ex(arg_count, arguments) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- /* convert supplied arguments to longs */
- for (i = 0; i < arg_count; i++) {
- convert_to_long_ex(arguments[i]);
- }
- t = time(NULL);
-#ifdef HAVE_TZSET
- tzset();
-#endif
- /*
- ** Set default time parameters with local time values,
- ** EVEN when some GMT time parameters are specified!
- ** This may give strange result, with PHP gmmktime(0, 0, 0),
- ** which is assumed to return GMT midnight time
- ** for today (in localtime), so that the result time may be
- ** AFTER or BEFORE the current time.
- ** May be we should initialize tn using gmtime(), so that
- ** default parameters for PHP gmmktime would be the current
- ** GMT time values...
- */
- ta = php_localtime_r(&t, &tmbuf);
-
- /* Let DST be unknown. mktime() should compute the right value
- ** and behave correctly. Unless the user overrides this.
- */
- ta->tm_isdst = -1;
-
- /*
- ** Now change date values with supplied parameters.
- */
- switch(arg_count) {
- case 7: /* daylight saving time flag */
-#ifdef PHP_WIN32
- if (daylight > 0) {
- ta->tm_isdst = is_dst = Z_LVAL_PP(arguments[6]);
- } else {
- ta->tm_isdst = is_dst = 0;
- }
-#else
- ta->tm_isdst = is_dst = Z_LVAL_PP(arguments[6]);
-#endif
- /* fall-through */
- case 6: /* year */
- /* special case:
- a zero in year, month and day is considered illegal
- as it would be interpreted as 30.11.1999 otherwise
- */
- if ( ( Z_LVAL_PP(arguments[5])==0)
- &&(Z_LVAL_PP(arguments[4])==0)
- &&(Z_LVAL_PP(arguments[3])==0)
- ) {
- RETURN_LONG(-1);
- }
-
- /*
- ** Accept parameter in range 0..1000 interpreted as 1900..2900
- ** (if 100 is given, it means year 2000)
- ** or in range 1001..9999 interpreted as is (this will store
- ** negative tm_year for years in range 1001..1899)
- ** This function is then Y2K ready, and accepts a wide range of
- ** dates including the whole gregorian calendar.
- ** But it cannot represent ancestral dates prior to year 1001.
- ** Additionally, input parameters of 0..70 are mapped to 100..170
- */
- if (Z_LVAL_PP(arguments[5]) < 70)
- ta->tm_year = Z_LVAL_PP(arguments[5]) + 100;
- else
- ta->tm_year = Z_LVAL_PP(arguments[5])
- - ((Z_LVAL_PP(arguments[5]) > 1000) ? 1900 : 0);
- /* fall-through */
- case 5: /* day in month (1-based) */
- val = (*arguments[4])->value.lval;
- if (val < 1) {
- chgsecs += (1-val) * 60*60*24;
- val = 1;
- }
- ta->tm_mday = val;
- /* fall-through */
- case 4: /* month (zero-based) */
- val = (*arguments[3])->value.lval - 1;
- while (val < 0) {
- val += 12; ta->tm_year--;
- }
- ta->tm_mon = val;
- /* fall-through */
- case 3: /* second */
- val = (*arguments[2])->value.lval;
- if (val < 1) {
- chgsecs += (1-val); val = 1;
- }
- ta->tm_sec = val;
- /* fall-through */
- case 2: /* minute */
- val = (*arguments[1])->value.lval;
- if (val < 1) {
- chgsecs += (1-val) * 60; val = 1;
- }
- ta->tm_min = val;
- /* fall-through */
- case 1: /* hour */
- val = (*arguments[0])->value.lval;
- /*
- We avoid midnight and a couple of hours after midnight here to work around
- various OS-level bugs in mktime and specifically daylight savings time issues
- in many mktime implementation.
- See bugs #27533 and #27719 for more info.
- */
- if (val < 4) {
- chgsecs += (4-val) * 60*60; val = 4;
- }
- ta->tm_hour = val;
- /* fall-through */
- case 0:
- break;
- }
-
- t = mktime(ta);
-
-#ifdef PHP_WIN32
- if (t - chgsecs < 0) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Windows does not support negative values for this function");
- RETURN_LONG(-1);
- }
-#endif
-
- seconds = t - chgsecs;
-
- /*
- Here we check to see if the chgsecs fuzz factor we applied caused us to
- move from dst to non-dst or vice-versa. If so we adjust accordingly to
- avoid being off by an hour on the dst changeover date.
- */
- if (is_dst == -1) {
- struct tm t1, t2;
- t1 = *localtime(&t);
- t2 = *localtime(&seconds);
-
- if (t1.tm_isdst != t2.tm_isdst) {
- seconds += (t1.tm_isdst == 1) ? 3600 : -3600;
- ta = localtime(&seconds);
- }
-
- /*
- If the user didn't specify whether the timestamp passed in was dst or not
- then we fill it in based on the dst setting at the evaluated timestamp
- at the current TZ
- */
- is_dst = ta->tm_isdst;
- }
-
- if (gm) {
-#if HAVE_TM_GMTOFF
- /*
- ** mktime(ta) very nicely just filled ta->tm_gmtoff with
- ** the exactly right value for adjustment if we want GMT.
- */
- gmadjust = ta->tm_gmtoff;
-#else
- /*
- ** If correcting for daylight savings time, we set the adjustment to
- ** the value of timezone - 3600 seconds.
- */
-#ifdef __CYGWIN__
- gmadjust = -(is_dst ? _timezone - 3600 : _timezone);
-#else
- gmadjust = -(is_dst ? timezone - 3600 : timezone);
-#endif
-#endif
- seconds += gmadjust;
- }
-
- RETURN_LONG(seconds);
-}
-/* }}} */
-
-/* {{{ proto int mktime(int hour, int min, int sec, int mon, int day, int year)
- Get UNIX timestamp for a date */
-PHP_FUNCTION(mktime)
-{
- php_mktime(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0);
-}
-/* }}} */
-
-/* {{{ proto int gmmktime(int hour, int min, int sec, int mon, int day, int year)
- Get UNIX timestamp for a GMT date */
-PHP_FUNCTION(gmmktime)
-{
- php_mktime(INTERNAL_FUNCTION_PARAM_PASSTHRU, 1);
-}
-/* }}} */
-
-/* {{{ php_date
- */
-static void php_date(INTERNAL_FUNCTION_PARAMETERS, int gm)
-{
- pval **format, **timestamp;
- time_t the_time;
- struct tm *ta, tmbuf;
- int i, size = 0, length, h, beat, fd, wd, yd, wk;
- char tmp_buff[32];
-#if !HAVE_TM_GMTOFF
- long tzone;
- char *tname[2]= {"GMT Standard Time", "BST"};
-#endif
-
- switch(ZEND_NUM_ARGS()) {
- case 1:
- if (zend_get_parameters_ex(1, &format) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- the_time = time(NULL);
- break;
- case 2:
- if (zend_get_parameters_ex(2, &format, &timestamp) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long_ex(timestamp);
- the_time = Z_LVAL_PP(timestamp);
-#ifdef PHP_WIN32
- if (the_time < 0) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Windows does not support dates prior to midnight (00:00:00), January 1, 1970");
- RETURN_FALSE;
- }
-#endif
- break;
- default:
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex(format);
-
- if (gm) {
- ta = php_gmtime_r(&the_time, &tmbuf);
-#if !HAVE_TM_GMTOFF
- tzone = 0;
-#endif
- } else {
- ta = php_localtime_r(&the_time, &tmbuf);
-#if !HAVE_TM_GMTOFF
-#ifdef __CYGWIN__
- tzone = _timezone;
-#else
- tzone = timezone;
-#endif
- if (tzname[0] != NULL) {
- tname[0] = tzname[0];
- } else {
- tname[0] = "???";
- }
-
- if (tzname[1] != NULL) {
- tname[1] = tzname[1];
- }
-#endif
- }
-
- if (!ta) { /* that really shouldn't happen... */
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unexpected error");
- RETURN_FALSE;
- }
- for (i = 0; i < Z_STRLEN_PP(format); i++) {
- switch (Z_STRVAL_PP(format)[i]) {
- case 'r': /* rfc822 format */
- size += 31;
- break;
- case 'c': /* iso8601 date (Dublin Core Date) */
- size += 25;
- break;
- case 'U': /* seconds since the epoch */
- size += 10;
- break;
- case 'F': /* month, textual, full */
- case 'l': /* day (of the week), textual */
- size += 28;
- break;
- case 'T': /* timezone name */
-#if HAVE_TM_ZONE
- size += strlen(ta->tm_zone);
-#elif HAVE_TZNAME
- if (ta->tm_isdst > 0 ) {
- size += strlen(tname[1]);
- } else {
- size += strlen(tname[0]);
- }
-#endif
- break;
- case 'Z': /* timezone offset in seconds */
- size += 6;
- break;
- case 'O': /* GMT offset in [+-]HHMM format */
- size += 5;
- break;
- case 'Y': /* year, numeric, 4 digits */
- size += 4;
- break;
- case 'M': /* month, textual, 3 letters */
- case 'D': /* day, textual, 3 letters */
- case 'z': /* day of the year, 1 to 366 */
- case 'B': /* Swatch Beat, 3 digits */
- size += 3;
- break;
- case 'y': /* year, numeric, 2 digits */
- case 'm': /* month, numeric */
- case 'n': /* month, numeric, no leading zeroes */
- case 'd': /* day of the month, numeric */
- case 'j': /* day of the month, numeric, no leading zeros */
- case 'H': /* hour, numeric, 24 hour format */
- case 'h': /* hour, numeric, 12 hour format */
- case 'G': /* hour, numeric, 24 hour format, no leading zeroes */
- case 'g': /* hour, numeric, 12 hour format, no leading zeroes */
- case 'i': /* minutes, numeric */
- case 's': /* seconds, numeric */
- case 'A': /* AM/PM */
- case 'a': /* am/pm */
- case 'S': /* standard english suffix for the day of the month (e.g. 3rd, 2nd, etc) */
- case 't': /* days in current month */
- case 'W': /* ISO-8601 week number of year, weeks starting on Monday */
- size += 2;
- break;
- case '\\':
- if (i < Z_STRLEN_PP(format) - 1) {
- i++;
- }
- size ++;
- break;
- case 'L': /* boolean for leap year */
- case 'w': /* day of the week, numeric */
- case 'I': /* DST? */
- default:
- size++;
- break;
- }
- }
-
- Z_STRVAL_P(return_value) = (char *) emalloc(size + 1);
- Z_STRVAL_P(return_value)[0] = '\0';
-
- for (i = 0; i < Z_STRLEN_PP(format); i++) {
- switch (Z_STRVAL_PP(format)[i]) {
- case '\\':
- if (i < Z_STRLEN_PP(format) - 1) {
- char ch[2];
- ch[0]=Z_STRVAL_PP(format)[i + 1];
- ch[1]='\0';
- strcat(Z_STRVAL_P(return_value), ch);
- i++;
- }
- break;
- case 'U': /* seconds since the epoch */
- sprintf(tmp_buff, "%ld", (long)the_time); /* SAFE */
- strcat(Z_STRVAL_P(return_value), tmp_buff);
- break;
- case 'F': /* month, textual, full */
- strcat(Z_STRVAL_P(return_value), mon_full_names[ta->tm_mon]);
- break;
- case 'l': /* day (of the week), textual, full */
- strcat(Z_STRVAL_P(return_value), day_full_names[ta->tm_wday]);
- break;
- case 'Y': /* year, numeric, 4 digits */
- sprintf(tmp_buff, "%d", ta->tm_year + YEAR_BASE); /* SAFE */
- strcat(Z_STRVAL_P(return_value), tmp_buff);
- break;
- case 'M': /* month, textual, 3 letters */
- strcat(Z_STRVAL_P(return_value), mon_short_names[ta->tm_mon]);
- break;
- case 'D': /* day (of the week), textual, 3 letters */
- strcat(Z_STRVAL_P(return_value), day_short_names[ta->tm_wday]);
- break;
- case 'z': /* day (of the year) */
- sprintf(tmp_buff, "%d", ta->tm_yday); /* SAFE */
- strcat(Z_STRVAL_P(return_value), tmp_buff);
- break;
- case 'y': /* year, numeric, 2 digits */
- sprintf(tmp_buff, "%02d", ((ta->tm_year)%100)); /* SAFE */
- strcat(Z_STRVAL_P(return_value), tmp_buff);
- break;
- case 'm': /* month, numeric */
- sprintf(tmp_buff, "%02d", ta->tm_mon + 1); /* SAFE */
- strcat(Z_STRVAL_P(return_value), tmp_buff);
- break;
- case 'n': /* month, numeric, no leading zeros */
- sprintf(tmp_buff, "%d", ta->tm_mon + 1); /* SAFE */
- strcat(Z_STRVAL_P(return_value), tmp_buff);
- break;
- case 'd': /* day of the month, numeric */
- sprintf(tmp_buff, "%02d", ta->tm_mday); /* SAFE */
- strcat(Z_STRVAL_P(return_value), tmp_buff);
- break;
- case 'j':
- sprintf(tmp_buff, "%d", ta->tm_mday); /* SAFE */
- strcat(Z_STRVAL_P(return_value), tmp_buff);
- break;
- case 'H': /* hour, numeric, 24 hour format */
- sprintf(tmp_buff, "%02d", ta->tm_hour); /* SAFE */
- strcat(Z_STRVAL_P(return_value), tmp_buff);
- break;
- case 'h': /* hour, numeric, 12 hour format */
- h = ta->tm_hour % 12; if (h==0) h = 12;
- sprintf(tmp_buff, "%02d", h); /* SAFE */
- strcat(Z_STRVAL_P(return_value), tmp_buff);
- break;
- case 'G': /* hour, numeric, 24 hour format, no leading zeros */
- sprintf(tmp_buff, "%d", ta->tm_hour); /* SAFE */
- strcat(Z_STRVAL_P(return_value), tmp_buff);
- break;
- case 'g': /* hour, numeric, 12 hour format, no leading zeros */
- h = ta->tm_hour % 12; if (h==0) h = 12;
- sprintf(tmp_buff, "%d", h); /* SAFE */
- strcat(Z_STRVAL_P(return_value), tmp_buff);
- break;
- case 'i': /* minutes, numeric */
- sprintf(tmp_buff, "%02d", ta->tm_min); /* SAFE */
- strcat(Z_STRVAL_P(return_value), tmp_buff);
- break;
- case 's': /* seconds, numeric */
- sprintf(tmp_buff, "%02d", ta->tm_sec); /* SAFE */
- strcat(Z_STRVAL_P(return_value), tmp_buff);
- break;
- case 'A': /* AM/PM */
- strcat(Z_STRVAL_P(return_value), (ta->tm_hour >= 12 ? "PM" : "AM"));
- break;
- case 'a': /* am/pm */
- strcat(Z_STRVAL_P(return_value), (ta->tm_hour >= 12 ? "pm" : "am"));
- break;
- case 'S': /* standard english suffix, e.g. 2nd/3rd for the day of the month */
- if (ta->tm_mday >= 10 && ta->tm_mday <= 19) {
- strcat(Z_STRVAL_P(return_value), "th");
- } else {
- switch (ta->tm_mday % 10) {
- case 1:
- strcat(Z_STRVAL_P(return_value), "st");
- break;
- case 2:
- strcat(Z_STRVAL_P(return_value), "nd");
- break;
- case 3:
- strcat(Z_STRVAL_P(return_value), "rd");
- break;
- default:
- strcat(Z_STRVAL_P(return_value), "th");
- break;
- }
- }
- break;
- case 't': /* days in current month */
- sprintf(tmp_buff, "%2d", phpday_tab[isleap((ta->tm_year+YEAR_BASE))][ta->tm_mon] );
- strcat(Z_STRVAL_P(return_value), tmp_buff);
- break;
- case 'w': /* day of the week, numeric EXTENSION */
- sprintf(tmp_buff, "%01d", ta->tm_wday); /* SAFE */
- strcat(Z_STRVAL_P(return_value), tmp_buff);
- break;
- case 'O': /* GMT offset in [+-]HHMM format */
-#if HAVE_TM_GMTOFF
- sprintf(tmp_buff, "%c%02d%02d", (ta->tm_gmtoff < 0) ? '-' : '+', abs(ta->tm_gmtoff / 3600), abs( (ta->tm_gmtoff % 3600) / 60 ));
-#else
- sprintf(tmp_buff, "%c%02d%02d", ((ta->tm_isdst ? tzone - 3600:tzone)>0)?'-':'+', abs((ta->tm_isdst ? tzone - 3600 : tzone) / 3600), abs(((ta->tm_isdst ? tzone - 3600 : tzone) % 3600) / 60));
-#endif
- strcat(Z_STRVAL_P(return_value), tmp_buff);
- break;
- case 'Z': /* timezone offset in seconds */
-#if HAVE_TM_GMTOFF
- sprintf(tmp_buff, "%ld", ta->tm_gmtoff);
-#else
- sprintf(tmp_buff, "%ld", ta->tm_isdst ? -(tzone- 3600) : -tzone);
-#endif
- strcat(Z_STRVAL_P(return_value), tmp_buff);
- break;
- case 'L': /* boolean for leapyear */
- sprintf(tmp_buff, "%d", (isleap((ta->tm_year+YEAR_BASE)) ? 1 : 0 ) );
- strcat(Z_STRVAL_P(return_value), tmp_buff);
- break;
- case 'T': /* timezone name */
-#if HAVE_TM_ZONE
- strcat(Z_STRVAL_P(return_value), ta->tm_zone);
-#elif HAVE_TZNAME
- strcat(Z_STRVAL_P(return_value), ta->tm_isdst ? tname[1] : tname[0]);
-#endif
- break;
- case 'B': /* Swatch Beat a.k.a. Internet Time */
- beat = (((((long)the_time)-(((long)the_time) -
- ((((long)the_time) % 86400) + 3600))) * 10) / 864);
- while (beat < 0) {
- beat += 1000;
- }
- beat = beat % 1000;
- sprintf(tmp_buff, "%03d", beat); /* SAFE */
- strcat(Z_STRVAL_P(return_value), tmp_buff);
- break;
- case 'I':
- sprintf(tmp_buff, "%d", ta->tm_isdst);
- strcat(Z_STRVAL_P(return_value), tmp_buff);
- break;
- case 'r':
-#if HAVE_TM_GMTOFF
- sprintf(tmp_buff, "%3s, %2d %3s %04d %02d:%02d:%02d %c%02d%02d",
- day_short_names[ta->tm_wday],
- ta->tm_mday,
- mon_short_names[ta->tm_mon],
- ta->tm_year + YEAR_BASE,
- ta->tm_hour,
- ta->tm_min,
- ta->tm_sec,
- (ta->tm_gmtoff < 0) ? '-' : '+',
- abs(ta->tm_gmtoff / 3600),
- abs( (ta->tm_gmtoff % 3600) / 60 )
- );
-#else
- sprintf(tmp_buff, "%3s, %2d %3s %04d %02d:%02d:%02d %c%02d%02d",
- day_short_names[ta->tm_wday],
- ta->tm_mday,
- mon_short_names[ta->tm_mon],
- ta->tm_year + YEAR_BASE,
- ta->tm_hour,
- ta->tm_min,
- ta->tm_sec,
- ((ta->tm_isdst ? tzone - 3600 : tzone) > 0) ? '-' : '+',
- abs((ta->tm_isdst ? tzone - 3600 : tzone) / 3600),
- abs( ((ta->tm_isdst ? tzone - 3600 : tzone) % 3600) / 60 )
- );
-#endif
- strcat(Z_STRVAL_P(return_value), tmp_buff);
- break;
- case 'c':
-#if HAVE_TM_GMTOFF
- sprintf(tmp_buff, "%04d-%02d-%02dT%02d:%02d:%02d%c%02d:%02d",
- ta->tm_year + YEAR_BASE,
- ta->tm_mon + 1,
- ta->tm_mday,
- ta->tm_hour,
- ta->tm_min,
- ta->tm_sec,
- (ta->tm_gmtoff < 0) ? '-' : '+',
- abs(ta->tm_gmtoff / 3600),
- abs( (ta->tm_gmtoff % 3600) / 60 )
- );
-#else
- sprintf(tmp_buff, "%04d-%02d-%02dT%02d:%02d:%02d%c%02d:%02d",
- ta->tm_year + YEAR_BASE,
- ta->tm_mon + 1,
- ta->tm_mday,
- ta->tm_hour,
- ta->tm_min,
- ta->tm_sec,
- ((ta->tm_isdst ? tzone - 3600 : tzone) > 0) ? '-' : '+',
- abs((ta->tm_isdst ? tzone - 3600 : tzone) / 3600),
- abs( ((ta->tm_isdst ? tzone - 3600 : tzone) % 3600) / 60 )
- );
-#endif
- strcat(Z_STRVAL_P(return_value), tmp_buff);
- break;
- case 'W': /* ISO-8601 week number of year, weeks starting on Monday */
- wd = ta->tm_wday == 0 ? 6 : ta->tm_wday - 1; /* weekday */
- yd = ta->tm_yday + 1; /* days since January 1st */
-
- fd = (7 + wd - yd % 7+ 1) % 7; /* weekday (1st January) */
-
- /* week is a last year week (52 or 53) */
- if ((yd <= 7 - fd) && fd > 3){
- wk = (fd == 4 || (fd == 5 && isleap((ta->tm_year + YEAR_BASE - 1)))) ? 53 : 52;
- }
- /* week is a next year week (1) */
- else if (isleap((ta->tm_year+YEAR_BASE)) + 365 - yd < 3 - wd){
- wk = 1;
- }
- /* normal week */
- else {
- wk = (yd + 6 - wd + fd) / 7 - (fd > 3);
- }
-
- sprintf(tmp_buff, "%d", wk); /* SAFE */
- strcat(Z_STRVAL_P(return_value), tmp_buff);
- break;
-
- default:
- length = strlen(Z_STRVAL_P(return_value));
- Z_STRVAL_P(return_value)[length] = Z_STRVAL_PP(format)[i];
- Z_STRVAL_P(return_value)[length + 1] = '\0';
- break;
- }
- }
- Z_STRLEN_P(return_value) = strlen(Z_STRVAL_P(return_value));
- Z_TYPE_P(return_value) = IS_STRING;
-}
-/* }}} */
-
-/* {{{ proto string date(string format [, int timestamp])
- Format a local time/date */
-PHP_FUNCTION(date)
-{
- php_date(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0);
-}
-/* }}} */
-
-/* {{{ proto string gmdate(string format [, int timestamp])
- Format a GMT/UTC date/time */
-PHP_FUNCTION(gmdate)
-{
- php_date(INTERNAL_FUNCTION_PARAM_PASSTHRU, 1);
-}
-/* }}} */
-
-/* {{{ php_idate
- */
-int php_idate(char format, int timestamp, int gm)
-{
- time_t the_time;
- struct tm *ta, tmbuf;
- int h, beat, fd, wd, yd, wk;
-#if !HAVE_TM_GMTOFF
- long tzone;
- char *tname[2]= {"GMT Standard Time", "BST"};
-#endif
-
- the_time = timestamp;
-
- if (gm) {
- ta = php_gmtime_r(&the_time, &tmbuf);
-#if !HAVE_TM_GMTOFF
- tzone = 0;
-#endif
- } else {
- ta = php_localtime_r(&the_time, &tmbuf);
-#if !HAVE_TM_GMTOFF
-#ifdef __CYGWIN__
- tzone = _timezone;
-#else
- tzone = timezone;
-#endif
- tname[0] = tzname[0];
-#endif
- }
-
- switch (format) {
- case 'U': /* seconds since the epoch */
- return (long)the_time;
- case 'Y': /* year, numeric, 4 digits */
- return ta->tm_year + YEAR_BASE;
- case 'z': /* day (of the year) */
- return ta->tm_yday;
- case 'y': /* year, numeric, 2 digits */
- return (ta->tm_year) % 100;
- case 'm': /* month, numeric */
- case 'n':
- return ta->tm_mon + 1;
- case 'd': /* day of the month, numeric */
- case 'j':
- return ta->tm_mday;
- case 'H': /* hour, numeric, 24 hour format */
- case 'G':
- return ta->tm_hour;
- case 'h': /* hour, numeric, 12 hour format */
- case 'g':
- h = ta->tm_hour % 12;
- if (h == 0) {
- h = 12;
- }
- return h;
- case 'i': /* minutes, numeric */
- return ta->tm_min;
- case 's': /* seconds, numeric */
- return ta->tm_sec;
- case 't': /* days in current month */
- return phpday_tab[isleap((ta->tm_year + YEAR_BASE))][ta->tm_mon];
- case 'w': /* day of the week, numeric EXTENSION */
- return ta->tm_wday;
- case 'Z': /* timezone offset in seconds */
-#if HAVE_TM_GMTOFF
- return ta->tm_gmtoff;
-#else
- return ta->tm_isdst ? -(tzone - 3600) : -tzone;
-#endif
- case 'L': /* boolean for leapyear */
- return isleap(ta->tm_year + YEAR_BASE) ? 1 : 0;
- case 'B': /* Swatch Beat a.k.a. Internet Time */
- beat = (((((long)the_time) - (((long)the_time) - ((((long)the_time) % 86400) + 3600))) * 10) / 864);
- while (beat < 0) {
- beat += 1000;
- }
- beat = beat % 1000;
- return beat;
- case 'I':
- return ta->tm_isdst;
- case 'W': /* ISO-8601 week number of year, weeks starting on Monday */
- wd = (ta->tm_wday == 0) ? 6 : ta->tm_wday - 1; /* weekday */
- yd = ta->tm_yday + 1; /* days since January 1st */
- fd = (7 + wd - yd % 7+ 1) % 7; /* weekday (1st January) */
- if ((yd <= 7 - fd) && fd > 3) { /* week is a last year week (52 or 53) */
- wk = (fd == 4 || (fd == 5 && isleap((ta->tm_year + YEAR_BASE - 1)))) ? 53 : 52;
- }
- /* week is a next year week (1) */
- else if (isleap((ta->tm_year + YEAR_BASE)) + 365 - yd < 3 - wd) {
- wk = 1;
- }
- /* normal week */
- else {
- wk = (yd + 6 - wd + fd) / 7 - (fd > 3);
- }
- return wk;
- break;
- default:
- return 0;
- }
-}
-/* }}} */
-
-/* {{{ proto int idate(string format [, int timestamp])
- Format a local time/date as integer */
-PHP_FUNCTION(idate)
-{
- zval **format, **timestamp;
- int t, ret;
-
- switch (ZEND_NUM_ARGS()) {
- case 1:
- if (zend_get_parameters_ex(1, &format) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- t = time(NULL);
- break;
- case 2:
- if (zend_get_parameters_ex(2, &format, &timestamp) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long_ex(timestamp);
- t = Z_LVAL_PP(timestamp);
- break;
- default:
- WRONG_PARAM_COUNT;
- }
-
- convert_to_string_ex(format);
-
- if (Z_STRLEN_PP(format) != 1) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "idate format is one char");
- RETURN_FALSE;
- }
-
- ret = php_idate(Z_STRVAL_PP(format)[0], t, 0);
- RETURN_LONG(ret);
-}
-/* }}} */
-
-/* {{{ proto array localtime([int timestamp [, bool associative_array]])
- 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 */
-PHP_FUNCTION(localtime)
-{
- zval **timestamp_arg, **assoc_array_arg;
- struct tm *ta, tmbuf;
- time_t timestamp;
- int assoc_array = 0;
- int arg_count = ZEND_NUM_ARGS();
-
- if (arg_count < 0 || arg_count > 2 ||
- zend_get_parameters_ex(arg_count, &timestamp_arg, &assoc_array_arg) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- switch (arg_count) {
- case 0:
- timestamp = (long)time(NULL);
- break;
- case 1:
- convert_to_long_ex(timestamp_arg);
- timestamp = Z_LVAL_PP(timestamp_arg);
- break;
- case 2:
- convert_to_long_ex(timestamp_arg);
- convert_to_long_ex(assoc_array_arg);
- timestamp = Z_LVAL_PP(timestamp_arg);
- assoc_array = Z_LVAL_PP(assoc_array_arg);
- break;
- }
-
-#ifdef PHP_WIN32
- if (timestamp < 0) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Windows does not support negative values for this function");
- RETURN_FALSE
- }
-#endif
-
- if (NULL == (ta = php_localtime_r(&timestamp, &tmbuf))) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid local time");
- RETURN_FALSE;
- }
- array_init(return_value);
-
- if (assoc_array) {
- add_assoc_long(return_value, "tm_sec", ta->tm_sec);
- add_assoc_long(return_value, "tm_min", ta->tm_min);
- add_assoc_long(return_value, "tm_hour", ta->tm_hour);
- add_assoc_long(return_value, "tm_mday", ta->tm_mday);
- add_assoc_long(return_value, "tm_mon", ta->tm_mon);
- add_assoc_long(return_value, "tm_year", ta->tm_year);
- add_assoc_long(return_value, "tm_wday", ta->tm_wday);
- add_assoc_long(return_value, "tm_yday", ta->tm_yday);
- add_assoc_long(return_value, "tm_isdst", ta->tm_isdst);
- } else {
- add_next_index_long(return_value, ta->tm_sec);
- add_next_index_long(return_value, ta->tm_min);
- add_next_index_long(return_value, ta->tm_hour);
- add_next_index_long(return_value, ta->tm_mday);
- add_next_index_long(return_value, ta->tm_mon);
- add_next_index_long(return_value, ta->tm_year);
- add_next_index_long(return_value, ta->tm_wday);
- add_next_index_long(return_value, ta->tm_yday);
- add_next_index_long(return_value, ta->tm_isdst);
- }
-}
-/* }}} */
-
-/* {{{ proto array getdate([int timestamp])
- Get date/time information */
-PHP_FUNCTION(getdate)
-{
- pval **timestamp_arg;
- struct tm *ta, tmbuf;
- time_t timestamp;
-
- if (ZEND_NUM_ARGS() == 0) {
- timestamp = time(NULL);
- } else if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &timestamp_arg) == FAILURE) {
- WRONG_PARAM_COUNT;
- } else {
- convert_to_long_ex(timestamp_arg);
- timestamp = Z_LVAL_PP(timestamp_arg);
- }
-
- ta = php_localtime_r(&timestamp, &tmbuf);
- if (!ta) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Cannot perform date calculation");
- return;
- }
- array_init(return_value);
- add_assoc_long(return_value, "seconds", ta->tm_sec);
- add_assoc_long(return_value, "minutes", ta->tm_min);
- add_assoc_long(return_value, "hours", ta->tm_hour);
- add_assoc_long(return_value, "mday", ta->tm_mday);
- add_assoc_long(return_value, "wday", ta->tm_wday);
- add_assoc_long(return_value, "mon", ta->tm_mon + 1);
- add_assoc_long(return_value, "year", ta->tm_year + 1900);
- add_assoc_long(return_value, "yday", ta->tm_yday);
- add_assoc_string(return_value, "weekday", day_full_names[ta->tm_wday], 1);
- add_assoc_string(return_value, "month", mon_full_names[ta->tm_mon], 1);
- add_index_long(return_value, 0, timestamp);
-}
-/* }}} */
-
-/* {{{ php_std_date
- Return date string in standard format for http headers */
-char *php_std_date(time_t t TSRMLS_DC)
-{
- struct tm *tm1, tmbuf;
- char *str;
-
- tm1 = php_gmtime_r(&t, &tmbuf);
- str = emalloc(81);
- if (PG(y2k_compliance)) {
- snprintf(str, 80, "%s, %02d-%s-%04d %02d:%02d:%02d GMT",
- day_short_names[tm1->tm_wday],
- tm1->tm_mday,
- mon_short_names[tm1->tm_mon],
- tm1->tm_year + 1900,
- tm1->tm_hour, tm1->tm_min, tm1->tm_sec);
- } else {
- snprintf(str, 80, "%s, %02d-%s-%02d %02d:%02d:%02d GMT",
- day_short_names[tm1->tm_wday],
- tm1->tm_mday,
- mon_short_names[tm1->tm_mon],
- ((tm1->tm_year) % 100),
- tm1->tm_hour, tm1->tm_min, tm1->tm_sec);
- }
-
- str[79] = 0;
- return (str);
-}
-/* }}} */
-
-/* {{{ proto bool checkdate(int month, int day, int year)
- Returns true(1) if it is a valid date in gregorian calendar */
-PHP_FUNCTION(checkdate)
-{
- long m, d, y;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "lll", &m, &d, &y) == FAILURE) {
- RETURN_FALSE;
- }
-
- if (y < 1 || y > 32767 || m < 1 || m > 12 || d < 1 || d > phpday_tab[isleap(y)][m - 1]) {
- RETURN_FALSE;
- }
- RETURN_TRUE; /* True : This month, day, year arguments are valid */
-}
-/* }}} */
-
-#if HAVE_STRFTIME
-/* {{{ _php_strftime
- */
-void _php_strftime(INTERNAL_FUNCTION_PARAMETERS, int gm)
-{
- pval **format_arg, **timestamp_arg;
- char *format, *buf;
- time_t timestamp;
- struct tm *ta, tmbuf;
- int max_reallocs = 5;
- size_t buf_len=64, real_len;
-
- switch (ZEND_NUM_ARGS()) {
- case 1:
- if (zend_get_parameters_ex(1, &format_arg)==FAILURE) {
- RETURN_FALSE;
- }
- time(&timestamp);
- break;
- case 2:
- if (zend_get_parameters_ex(2, &format_arg, &timestamp_arg)==FAILURE) {
- RETURN_FALSE;
- }
- convert_to_long_ex(timestamp_arg);
- timestamp = Z_LVAL_PP(timestamp_arg);
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
-
- convert_to_string_ex(format_arg);
- if (Z_STRLEN_PP(format_arg)==0) {
- RETURN_FALSE;
- }
-#ifdef PHP_WIN32
- if (timestamp < 0) {
- RETURN_FALSE;
- }
-#endif
- format = Z_STRVAL_PP(format_arg);
- if (gm) {
- ta = php_gmtime_r(&timestamp, &tmbuf);
- } else {
- ta = php_localtime_r(&timestamp, &tmbuf);
- }
-
- buf = (char *) emalloc(buf_len);
- while ((real_len=strftime(buf, buf_len, format, ta))==buf_len || real_len==0) {
- buf_len *= 2;
- buf = (char *) erealloc(buf, buf_len);
- if (!--max_reallocs) {
- break;
- }
- }
-
- if (real_len && real_len != buf_len) {
- buf = (char *) erealloc(buf, real_len + 1);
- RETURN_STRINGL(buf, real_len, 0);
- }
- efree(buf);
- RETURN_FALSE;
-}
-/* }}} */
-
-/* {{{ proto string strftime(string format [, int timestamp])
- Format a local time/date according to locale settings */
-PHP_FUNCTION(strftime)
-{
- _php_strftime(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0);
-}
-/* }}} */
-
-/* {{{ proto string gmstrftime(string format [, int timestamp])
- Format a GMT/UCT time/date according to locale settings */
-PHP_FUNCTION(gmstrftime)
-{
- _php_strftime(INTERNAL_FUNCTION_PARAM_PASSTHRU, 1);
-}
-/* }}} */
-
-#endif
-
-/* {{{ proto int strtotime(string time, int now)
- Convert string representation of date and time to a timestamp */
-PHP_FUNCTION(strtotime)
-{
- zval **z_time, **z_now;
- int argc;
- time_t now;
-
- argc = ZEND_NUM_ARGS();
-
- if (argc < 1 || argc > 2 || zend_get_parameters_ex(argc, &z_time, &z_now)==FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_string_ex(z_time);
- if (!Z_STRLEN_PP(z_time)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Called with an empty time parameter.");
- RETURN_LONG(-1);
- }
- if (argc == 2) {
- convert_to_long_ex(z_now);
- now = Z_LVAL_PP(z_now);
- RETURN_LONG(php_parse_date(Z_STRVAL_PP(z_time), &now));
- } else {
- RETURN_LONG(php_parse_date(Z_STRVAL_PP(z_time), NULL));
- }
-}
-/* }}} */
-
-
-/*
- * 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/standard/datetime.h b/ext/standard/datetime.h
deleted file mode 100644
index a08c17f7e5..0000000000
--- a/ext/standard/datetime.h
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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. |
- +----------------------------------------------------------------------+
- | Authors: Andi Gutmans <andi@zend.com> |
- | Zeev Suraski <zeev@zend.com> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifndef DATETIME_H
-#define DATETIME_H
-
-PHP_FUNCTION(time);
-PHP_FUNCTION(mktime);
-PHP_FUNCTION(gmmktime);
-PHP_FUNCTION(date);
-PHP_FUNCTION(idate);
-PHP_FUNCTION(gmdate);
-PHP_FUNCTION(localtime);
-PHP_FUNCTION(getdate);
-PHP_FUNCTION(checkdate);
-#if HAVE_STRFTIME
-PHP_FUNCTION(strftime);
-PHP_FUNCTION(gmstrftime);
-#endif
-PHP_FUNCTION(strtotime);
-
-int php_idate(char format, int timestamp, int gm);
-extern char *php_std_date(time_t t TSRMLS_DC);
-void php_mktime(INTERNAL_FUNCTION_PARAMETERS, int gm);
-#if HAVE_STRFTIME
-void _php_strftime(INTERNAL_FUNCTION_PARAMETERS, int gm);
-#endif
-
-#endif /* DATETIME_H */
diff --git a/ext/standard/dir.c b/ext/standard/dir.c
deleted file mode 100644
index 2ee0ed7112..0000000000
--- a/ext/standard/dir.c
+++ /dev/null
@@ -1,507 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Thies C. Arntzen <thies@thieso.net> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-/* {{{ includes/startup/misc */
-
-#include "php.h"
-#include "fopen_wrappers.h"
-#include "file.h"
-#include "php_dir.h"
-#include "php_scandir.h"
-
-#ifdef HAVE_DIRENT_H
-#include <dirent.h>
-#endif
-
-#if HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-
-#include <errno.h>
-
-#ifdef PHP_WIN32
-#include "win32/readdir.h"
-#endif
-
-
-#ifdef HAVE_GLOB
-#ifndef PHP_WIN32
-#include <glob.h>
-#else
-#include "win32/glob.h"
-#endif
-#endif
-
-typedef struct {
- int default_dir;
-} php_dir_globals;
-
-#ifdef ZTS
-#define DIRG(v) TSRMG(dir_globals_id, php_dir_globals *, v)
-int dir_globals_id;
-#else
-#define DIRG(v) (dir_globals.v)
-php_dir_globals dir_globals;
-#endif
-
-#if 0
-typedef struct {
- int id;
- DIR *dir;
-} php_dir;
-
-static int le_dirp;
-#endif
-
-static zend_class_entry *dir_class_entry_ptr;
-
-#define FETCH_DIRP() \
- if (ZEND_NUM_ARGS() == 0) { \
- myself = getThis(); \
- if (myself) { \
- if (zend_hash_find(Z_OBJPROP_P(myself), "handle", sizeof("handle"), (void **)&tmp) == FAILURE) { \
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to find my handle property"); \
- RETURN_FALSE; \
- } \
- ZEND_FETCH_RESOURCE(dirp, php_stream *, tmp, -1, "Directory", php_file_le_stream()); \
- } else { \
- ZEND_FETCH_RESOURCE(dirp, php_stream *, 0, DIRG(default_dir), "Directory", php_file_le_stream()); \
- } \
- } else if ((ZEND_NUM_ARGS() != 1) || zend_get_parameters_ex(1, &id) == FAILURE) { \
- WRONG_PARAM_COUNT; \
- } else { \
- dirp = (php_stream *) zend_fetch_resource(id TSRMLS_CC, -1, "Directory", NULL, 1, php_file_le_stream()); \
- if (!dirp) \
- RETURN_FALSE; \
- }
-
-static zend_function_entry php_dir_class_functions[] = {
- PHP_FALIAS(close, closedir, NULL)
- PHP_FALIAS(rewind, rewinddir, NULL)
- PHP_NAMED_FE(read, php_if_readdir, NULL)
- {NULL, NULL, NULL}
-};
-
-
-static void php_set_default_dir(int id TSRMLS_DC)
-{
- if (DIRG(default_dir)!=-1) {
- zend_list_delete(DIRG(default_dir));
- }
-
- if (id != -1) {
- zend_list_addref(id);
- }
-
- DIRG(default_dir) = id;
-}
-
-PHP_RINIT_FUNCTION(dir)
-{
- DIRG(default_dir) = -1;
- return SUCCESS;
-}
-
-PHP_MINIT_FUNCTION(dir)
-{
- static char dirsep_str[2], pathsep_str[2];
- zend_class_entry dir_class_entry;
-
- INIT_CLASS_ENTRY(dir_class_entry, "Directory", php_dir_class_functions);
- dir_class_entry_ptr = zend_register_internal_class(&dir_class_entry TSRMLS_CC);
-
-#ifdef ZTS
- ts_allocate_id(&dir_globals_id, sizeof(php_dir_globals), NULL, NULL);
-#endif
-
- dirsep_str[0] = DEFAULT_SLASH;
- dirsep_str[1] = '\0';
- REGISTER_STRING_CONSTANT("DIRECTORY_SEPARATOR", dirsep_str, CONST_CS|CONST_PERSISTENT);
-
- pathsep_str[0] = ZEND_PATHS_SEPARATOR;
- pathsep_str[1] = '\0';
- REGISTER_STRING_CONSTANT("PATH_SEPARATOR", pathsep_str, CONST_CS|CONST_PERSISTENT);
-
-#ifdef HAVE_GLOB
-#ifdef GLOB_BRACE
- REGISTER_LONG_CONSTANT("GLOB_BRACE", GLOB_BRACE, CONST_CS | CONST_PERSISTENT);
-#endif
-#ifdef GLOB_MARK
- REGISTER_LONG_CONSTANT("GLOB_MARK", GLOB_MARK, CONST_CS | CONST_PERSISTENT);
-#endif
-#ifdef GLOB_NOSORT
- REGISTER_LONG_CONSTANT("GLOB_NOSORT", GLOB_NOSORT, CONST_CS | CONST_PERSISTENT);
-#endif
-#ifdef GLOB_NOCHECK
- REGISTER_LONG_CONSTANT("GLOB_NOCHECK", GLOB_NOCHECK, CONST_CS | CONST_PERSISTENT);
-#endif
-#ifdef GLOB_NOESCAPE
- REGISTER_LONG_CONSTANT("GLOB_NOESCAPE", GLOB_NOESCAPE, CONST_CS | CONST_PERSISTENT);
-#endif
-
-#ifndef GLOB_ONLYDIR
-#define GLOB_ONLYDIR (1<<30)
-#define GLOB_EMULATE_ONLYDIR
-#define GLOB_FLAGMASK (~GLOB_ONLYDIR)
-#else
-#define GLOB_FLAGMASK (~0)
-#endif
-
- REGISTER_LONG_CONSTANT("GLOB_ONLYDIR", GLOB_ONLYDIR, CONST_CS | CONST_PERSISTENT);
-
-#endif /* HAVE_GLOB */
-
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ internal functions */
-static void _php_do_opendir(INTERNAL_FUNCTION_PARAMETERS, int createobject)
-{
- char *dirname;
- int dir_len;
- zval *zcontext = NULL;
- php_stream_context *context = NULL;
- php_stream *dirp;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|r", &dirname, &dir_len, &zcontext) == FAILURE) {
- RETURN_NULL();
- }
-
- if (zcontext) {
- context = php_stream_context_from_zval(zcontext, 0);
- }
-
- dirp = php_stream_opendir(dirname, ENFORCE_SAFE_MODE|REPORT_ERRORS, context);
-
- if (dirp == NULL) {
- RETURN_FALSE;
- }
-
- php_set_default_dir(dirp->rsrc_id TSRMLS_CC);
-
- if (createobject) {
- object_init_ex(return_value, dir_class_entry_ptr);
- add_property_stringl(return_value, "path", dirname, dir_len, 1);
- add_property_resource(return_value, "handle", dirp->rsrc_id);
- php_stream_auto_cleanup(dirp); /* so we don't get warnings under debug */
- } else {
- php_stream_to_zval(dirp, return_value);
- }
-}
-/* }}} */
-
-/* {{{ proto mixed opendir(string path[, resource context])
- Open a directory and return a dir_handle */
-PHP_FUNCTION(opendir)
-{
- _php_do_opendir(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0);
-}
-/* }}} */
-
-/* {{{ proto object dir(string directory[, resource context])
- Directory class with properties, handle and class and methods read, rewind and close */
-PHP_FUNCTION(getdir)
-{
- _php_do_opendir(INTERNAL_FUNCTION_PARAM_PASSTHRU, 1);
-}
-/* }}} */
-
-/* {{{ proto void closedir([resource dir_handle])
- Close directory connection identified by the dir_handle */
-PHP_FUNCTION(closedir)
-{
- pval **id, **tmp, *myself;
- php_stream *dirp;
-
- FETCH_DIRP();
-
- if (dirp->rsrc_id == DIRG(default_dir)) {
- php_set_default_dir(-1 TSRMLS_CC);
- }
-
- zend_list_delete(dirp->rsrc_id);
-}
-/* }}} */
-
-#if defined(HAVE_CHROOT) && !defined(ZTS) && ENABLE_CHROOT_FUNC
-/* {{{ proto bool chroot(string directory)
- Change root directory */
-PHP_FUNCTION(chroot)
-{
- char *str;
- int ret, str_len;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &str, &str_len) == FAILURE) {
- RETURN_FALSE;
- }
-
- ret = chroot(str);
-
- if (ret != 0) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s (errno %d)", strerror(errno), errno);
- RETURN_FALSE;
- }
-
- ret = chdir("/");
-
- if (ret != 0) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s (errno %d)", strerror(errno), errno);
- RETURN_FALSE;
- }
-
- RETURN_TRUE;
-}
-/* }}} */
-#endif
-
-/* {{{ proto bool chdir(string directory)
- Change the current directory */
-PHP_FUNCTION(chdir)
-{
- char *str;
- int ret, str_len;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &str, &str_len) == FAILURE) {
- RETURN_FALSE;
- }
-
- if (PG(safe_mode) && !php_checkuid(str, NULL, CHECKUID_CHECK_FILE_AND_DIR)) {
- RETURN_FALSE;
- }
- ret = VCWD_CHDIR(str);
-
- if (ret != 0) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s (errno %d)", strerror(errno), errno);
- RETURN_FALSE;
- }
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto mixed getcwd(void)
- Gets the current directory */
-PHP_FUNCTION(getcwd)
-{
- char path[MAXPATHLEN];
- char *ret=NULL;
-
- if (ZEND_NUM_ARGS() != 0) {
- WRONG_PARAM_COUNT;
- }
-
-#if HAVE_GETCWD
- ret = VCWD_GETCWD(path, MAXPATHLEN);
-#elif HAVE_GETWD
- ret = VCWD_GETWD(path);
-#endif
-
- if (ret) {
- RETURN_STRING(path, 1);
- } else {
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-/* {{{ proto void rewinddir([resource dir_handle])
- Rewind dir_handle back to the start */
-PHP_FUNCTION(rewinddir)
-{
- pval **id, **tmp, *myself;
- php_stream *dirp;
-
- FETCH_DIRP();
-
- php_stream_rewinddir(dirp);
-}
-/* }}} */
-
-/* {{{ proto string readdir([resource dir_handle])
- Read directory entry from dir_handle */
-PHP_NAMED_FUNCTION(php_if_readdir)
-{
- pval **id, **tmp, *myself;
- php_stream *dirp;
- php_stream_dirent entry;
-
- FETCH_DIRP();
-
- if (php_stream_readdir(dirp, &entry)) {
- RETURN_STRINGL(entry.d_name, strlen(entry.d_name), 1);
- }
- RETURN_FALSE;
-}
-/* }}} */
-
-#ifdef HAVE_GLOB
-/* {{{ proto array glob(string pattern [, int flags])
- Find pathnames matching a pattern */
-PHP_FUNCTION(glob)
-{
- char cwd[MAXPATHLEN];
- int cwd_skip = 0;
-#ifdef ZTS
- char work_pattern[MAXPATHLEN];
- char *result;
-#endif
- char *pattern = NULL;
- int pattern_len;
- long flags = 0;
- glob_t globbuf;
- unsigned int n;
- int ret;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|l", &pattern, &pattern_len, &flags) == FAILURE)
- return;
-
-#ifdef ZTS
- if (!IS_ABSOLUTE_PATH(pattern, pattern_len)) {
- result = VCWD_GETCWD(cwd, MAXPATHLEN);
- if (!result) {
- cwd[0] = '\0';
- }
-#ifdef PHP_WIN32
- if (IS_SLASH(*pattern)) {
- cwd[2] = '\0';
- }
-#endif
- cwd_skip = strlen(cwd)+1;
-
- snprintf(work_pattern, MAXPATHLEN, "%s%c%s", cwd, DEFAULT_SLASH, pattern);
- pattern = work_pattern;
- }
-#endif
-
- globbuf.gl_offs = 0;
- if (0 != (ret = glob(pattern, flags & GLOB_FLAGMASK, NULL, &globbuf))) {
-#ifdef GLOB_NOMATCH
- if (GLOB_NOMATCH == ret) {
- /* Linux handles no matches as an error condition, but FreeBSD
- * doesn't. This ensure that if no match is found, an empty array
- * is always returned so it can be used without worrying in e.g.
- * foreach() */
-#ifndef __linux__
- RETURN_FALSE;
-#else
- array_init(return_value);
- return;
-#endif
- }
-#endif
- RETURN_FALSE;
- }
-
- /* now catch the FreeBSD style of "no matches" */
- if (!globbuf.gl_pathc || !globbuf.gl_pathv) {
- array_init(return_value);
- return;
- }
-
- /* we assume that any glob pattern will match files from one directory only
- so checking the dirname of the first match should be sufficient */
- strncpy(cwd, globbuf.gl_pathv[0], MAXPATHLEN);
- if (PG(safe_mode) && (!php_checkuid(cwd, NULL, CHECKUID_CHECK_FILE_AND_DIR))) {
- RETURN_FALSE;
- }
- if (php_check_open_basedir(cwd TSRMLS_CC)) {
- RETURN_FALSE;
- }
-
- array_init(return_value);
- for (n = 0; n < globbuf.gl_pathc; n++) {
- /* we need to this everytime since GLOB_ONLYDIR does not guarantee that
- * all directories will be filtered. GNU libc documentation states the
- * following:
- * If the information about the type of the file is easily available
- * non-directories will be rejected but no extra work will be done to
- * determine the information for each file. I.e., the caller must still be
- * able to filter directories out.
- */
- if (flags & GLOB_ONLYDIR) {
- struct stat s;
-
- if (0 != VCWD_STAT(globbuf.gl_pathv[n], &s)) {
- continue;
- }
-
- if (S_IFDIR != (s.st_mode & S_IFMT)) {
- continue;
- }
- }
- add_next_index_string(return_value, globbuf.gl_pathv[n]+cwd_skip, 1);
- }
-
- globfree(&globbuf);
-}
-/* }}} */
-#endif
-
-/* {{{ proto array scandir(string dir [, int sorting_order [, resource context]])
- List files & directories inside the specified path */
-PHP_FUNCTION(scandir)
-{
- char *dirn;
- int dirn_len;
- long flags = 0;
- php_stream_dirent **namelist;
- int n, i;
- zval *zcontext = NULL;
- php_stream_context *context = NULL;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|lr", &dirn, &dirn_len, &flags, &zcontext) == FAILURE) {
- return;
- }
-
- if (zcontext) {
- context = php_stream_context_from_zval(zcontext, 0);
- }
-
- if (!flags) {
- n = php_stream_scandir(dirn, &namelist, context, (void *) php_stream_dirent_alphasort);
- } else {
- n = php_stream_scandir(dirn, &namelist, context, (void *) php_stream_dirent_alphasortr);
- }
- if (n < 0) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "(errno %d): %s", errno, strerror(errno));
- RETURN_FALSE;
- }
-
- array_init(return_value);
-
- for (i = 0; i < n; i++) {
- add_next_index_string(return_value, namelist[i]->d_name, 0);
- }
-
- if (n) {
- efree(namelist);
- }
-}
-/* }}} */
-
-/*
- * 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/standard/dl.c b/ext/standard/dl.c
deleted file mode 100644
index ffccc90467..0000000000
--- a/ext/standard/dl.c
+++ /dev/null
@@ -1,285 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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. |
- +----------------------------------------------------------------------+
- | Authors: Brian Schaffner <brian@tool.net> |
- | Shane Caraveo <shane@caraveo.com> |
- | Zeev Suraski <zeev@zend.com> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#include "php.h"
-#include "dl.h"
-#include "php_globals.h"
-#include "ext/standard/info.h"
-#include "SAPI.h"
-
-#if defined(HAVE_LIBDL) || HAVE_MACH_O_DYLD_H
-#include <stdlib.h>
-#include <stdio.h>
-
-#ifdef HAVE_STRING_H
-#include <string.h>
-#else
-#include <strings.h>
-#endif
-#ifdef PHP_WIN32
-#include "win32/param.h"
-#include "win32/winutil.h"
-#define GET_DL_ERROR() php_win_err()
-#elif defined(NETWARE)
-#ifdef NEW_LIBC
-#include <sys/param.h>
-#else
-#include "netware/param.h"
-#endif
-#define GET_DL_ERROR() dlerror()
-#else
-#include <sys/param.h>
-#define GET_DL_ERROR() DL_ERROR()
-#endif
-
-#endif /* defined(HAVE_LIBDL) || HAVE_MACH_O_DYLD_H */
-
-
-/* {{{ proto int dl(string extension_filename)
- Load a PHP extension at runtime */
-PHP_FUNCTION(dl)
-{
- pval **file;
-
- /* obtain arguments */
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &file) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_string_ex(file);
-
-#ifdef ZTS
- if ((strncmp(sapi_module.name, "cgi", 3)!=0) &&
- (strcmp(sapi_module.name, "cli")!=0) &&
- (strncmp(sapi_module.name, "embed", 5)!=0)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Not supported in multithreaded Web servers - use extension=%s in your php.ini", Z_STRVAL_PP(file));
- RETURN_FALSE;
- }
-#endif
-
- if (!PG(enable_dl)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Dynamically loaded extensions aren't enabled");
- } else if (PG(safe_mode)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Dynamically loaded extensions aren't allowed when running in Safe Mode");
- } else {
- zend_error(E_STRICT, "dl() is deprecated - use extension=%s in your php.ini", Z_STRVAL_PP(file));
- php_dl(*file, MODULE_TEMPORARY, return_value TSRMLS_CC);
- EG(full_tables_cleanup) = 1;
- }
-}
-
-/* }}} */
-
-
-#if defined(HAVE_LIBDL) || HAVE_MACH_O_DYLD_H
-
-#ifdef ZTS
-#define USING_ZTS 1
-#else
-#define USING_ZTS 0
-#endif
-
-/* {{{ php_dl
- */
-void php_dl(pval *file, int type, pval *return_value TSRMLS_DC)
-{
- void *handle;
- char *libpath;
- zend_module_entry *module_entry;
- zend_module_entry *(*get_module)(void);
- int error_type;
- char *extension_dir;
-
- if (type==MODULE_PERSISTENT) {
- /* Use the configuration hash directly, the INI mechanism is not yet initialized */
- if (cfg_get_string("extension_dir", &extension_dir)==FAILURE) {
- extension_dir = PHP_EXTENSION_DIR;
- }
- } else {
- extension_dir = PG(extension_dir);
- }
-
- if (type==MODULE_TEMPORARY) {
- error_type = E_WARNING;
- } else {
- error_type = E_CORE_WARNING;
- }
-
- if (extension_dir && extension_dir[0]){
- int extension_dir_len = strlen(extension_dir);
-
- libpath = emalloc(extension_dir_len+Z_STRLEN_P(file)+2);
-
- if (IS_SLASH(extension_dir[extension_dir_len-1])) {
- sprintf(libpath, "%s%s", extension_dir, Z_STRVAL_P(file)); /* SAFE */
- } else {
- sprintf(libpath, "%s%c%s", extension_dir, DEFAULT_SLASH, Z_STRVAL_P(file)); /* SAFE */
- }
- } else {
- libpath = estrndup(Z_STRVAL_P(file), Z_STRLEN_P(file));
- }
-
- /* load dynamic symbol */
- handle = DL_LOAD(libpath);
- if (!handle) {
- php_error_docref(NULL TSRMLS_CC, error_type, "Unable to load dynamic library '%s' - %s", libpath, GET_DL_ERROR());
- GET_DL_ERROR(); /* free the buffer storing the error */
- efree(libpath);
- RETURN_FALSE;
- }
-
- efree(libpath);
-
-#ifndef NETWARE
- get_module = (zend_module_entry *(*)(void)) DL_FETCH_SYMBOL(handle, "get_module");
-
- /*
- * some OS prepend _ to symbol names while their dynamic linker
- * does not do that automatically. Thus we check manually for
- * _get_module.
- */
-
- if (!get_module)
- get_module = (zend_module_entry *(*)(void)) DL_FETCH_SYMBOL(handle, "_get_module");
-#else
- /* NetWare doesn't support two NLMs exporting same symbol */
- {
- char symbol_name[64] = "\0";
- int module_name_length = Z_STRLEN_P(file) - 4; /* '.nlm' is 4 characters; knock it off */
-
- /* Take the module name (e.g.: 'php_ldap') and append '@get_module' to it */
- strncpy(symbol_name, Z_STRVAL_P(file), module_name_length);
- symbol_name[module_name_length] = '\0';
- strcat(symbol_name, "@");
- strcat(symbol_name, "get_module");
-
- get_module = (zend_module_entry *(*)(void)) DL_FETCH_SYMBOL(handle, symbol_name);
- }
- /* NetWare doesn't prepend '_' to symbol names; so the corresponding portion of code is also
- not required for NetWare */
-#endif
-
- if (!get_module) {
- DL_UNLOAD(handle);
- php_error_docref(NULL TSRMLS_CC, error_type, "Invalid library (maybe not a PHP library) '%s' ", Z_STRVAL_P(file));
- RETURN_FALSE;
- }
- module_entry = get_module();
- if ((module_entry->zend_debug != ZEND_DEBUG) || (module_entry->zts != USING_ZTS)
- || (module_entry->zend_api != ZEND_MODULE_API_NO)) {
- /* Check for pre-4.1.0 module which has a slightly different module_entry structure :( */
- struct pre_4_1_0_module_entry {
- char *name;
- zend_function_entry *functions;
- int (*module_startup_func)(INIT_FUNC_ARGS);
- int (*module_shutdown_func)(SHUTDOWN_FUNC_ARGS);
- int (*request_startup_func)(INIT_FUNC_ARGS);
- int (*request_shutdown_func)(SHUTDOWN_FUNC_ARGS);
- void (*info_func)(ZEND_MODULE_INFO_FUNC_ARGS);
- int (*global_startup_func)(void);
- int (*global_shutdown_func)(void);
- int globals_id;
- int module_started;
- unsigned char type;
- void *handle;
- int module_number;
- unsigned char zend_debug;
- unsigned char zts;
- unsigned int zend_api;
- };
-
- char *name;
- int zend_api;
- unsigned char zend_debug, zts;
-
- if(( ((struct pre_4_1_0_module_entry *)module_entry)->zend_api > 20000000)
- &&(((struct pre_4_1_0_module_entry *)module_entry)->zend_api < 20010901)) {
- name = ((struct pre_4_1_0_module_entry *)module_entry)->name;
- zend_api = ((struct pre_4_1_0_module_entry *)module_entry)->zend_api;
- zend_debug = ((struct pre_4_1_0_module_entry *)module_entry)->zend_debug;
- zts = ((struct pre_4_1_0_module_entry *)module_entry)->zts;
- } else {
- name = module_entry->name;
- zend_api = module_entry->zend_api;
- zend_debug = module_entry->zend_debug;
- zts = module_entry->zts;
- }
-
- php_error_docref(NULL TSRMLS_CC, error_type,
- "%s: Unable to initialize module\n"
- "Module compiled with module API=%d, debug=%d, thread-safety=%d\n"
- "PHP compiled with module API=%d, debug=%d, thread-safety=%d\n"
- "These options need to match\n",
- name, zend_api, zend_debug, zts,
- ZEND_MODULE_API_NO, ZEND_DEBUG, USING_ZTS);
- DL_UNLOAD(handle);
- RETURN_FALSE;
- }
- module_entry->type = type;
- module_entry->module_number = zend_next_free_module();
- module_entry->handle = handle;
-
- if (zend_register_module_ex(module_entry TSRMLS_CC) == FAILURE) {
- DL_UNLOAD(handle);
- RETURN_FALSE;
- }
-
- if ((type == MODULE_TEMPORARY) && module_entry->request_startup_func) {
- if (module_entry->request_startup_func(type, module_entry->module_number TSRMLS_CC)) {
- php_error_docref(NULL TSRMLS_CC, error_type, "Unable to initialize module '%s'", module_entry->name);
- DL_UNLOAD(handle);
- RETURN_FALSE;
- }
- }
-
- RETURN_TRUE;
-}
-/* }}} */
-
-PHP_MINFO_FUNCTION(dl)
-{
- php_info_print_table_row(2, "Dynamic Library Support", "enabled");
-}
-
-#else
-
-void php_dl(pval *file, int type, pval *return_value TSRMLS_DC)
-{
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Cannot dynamically load %s - dynamic modules are not supported", Z_STRVAL_P(file));
- RETURN_FALSE;
-}
-
-PHP_MINFO_FUNCTION(dl)
-{
- PUTS("Dynamic Library support not available<br />.\n");
-}
-
-#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/standard/dl.h b/ext/standard/dl.h
deleted file mode 100644
index 7311da7874..0000000000
--- a/ext/standard/dl.h
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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. |
- +----------------------------------------------------------------------+
- | Authors: Brian Schaffner <brian@tool.net> |
- | Shane Caraveo <shane@caraveo.com> |
- | Zeev Suraski <zeev@zend.com> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifndef DL_H
-#define DL_H
-
-void php_dl(pval *file,int type,pval *return_value TSRMLS_DC);
-
-
-/* dynamic loading functions */
-PHP_FUNCTION(dl);
-
-PHP_MINFO_FUNCTION(dl);
-
-#endif /* DL_H */
diff --git a/ext/standard/dns.c b/ext/standard/dns.c
deleted file mode 100644
index 47c6d314ab..0000000000
--- a/ext/standard/dns.c
+++ /dev/null
@@ -1,906 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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. |
- +----------------------------------------------------------------------+
- | Authors: The typical suspects |
- | Pollita <pollita@php.net> |
- | Marcus Boerger <helly@php.net> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-/* {{{ includes */
-#include "php.h"
-
-#if HAVE_SYS_SOCKET_H
-#include <sys/socket.h>
-#endif
-
-#ifdef PHP_WIN32
-#if HAVE_LIBBIND
-#ifndef WINNT
-#define WINNT 1
-#endif
-/* located in www.php.net/extra/bindlib.zip */
-#if HAVE_ARPA_INET_H
-#include "arpa/inet.h"
-#endif
-#include "netdb.h"
-#if HAVE_ARPA_NAMESERV_H
-#include "arpa/nameser.h"
-#endif
-#if HAVE_RESOLV_H
-#include "resolv.h"
-#endif
-#endif /* HAVE_LIBBIND */
-#include <winsock2.h>
-#else /* This holds good for NetWare too, both for Winsock and Berkeley sockets */
-#include <netinet/in.h>
-#if HAVE_ARPA_INET_H
-#include <arpa/inet.h>
-#endif
-#include <netdb.h>
-#ifdef _OSD_POSIX
-#undef STATUS
-#undef T_UNSPEC
-#endif
-#if HAVE_ARPA_NAMESER_H
-#include <arpa/nameser.h>
-#endif
-#if HAVE_RESOLV_H
-#include <resolv.h>
-#endif
-#endif
-
-/* Borrowed from SYS/SOCKET.H */
-#if defined(NETWARE) && defined(USE_WINSOCK)
-#define AF_INET 2 /* internetwork: UDP, TCP, etc. */
-#endif
-
-#include "dns.h"
-
-/* type compat */
-#ifndef DNS_T_A
-#define DNS_T_A 1
-#endif
-#ifndef DNS_T_NS
-#define DNS_T_NS 2
-#endif
-#ifndef DNS_T_CNAME
-#define DNS_T_CNAME 5
-#endif
-#ifndef DNS_T_SOA
-#define DNS_T_SOA 6
-#endif
-#ifndef DNS_T_PTR
-#define DNS_T_PTR 12
-#endif
-#ifndef DNS_T_HINFO
-#define DNS_T_HINFO 13
-#endif
-#ifndef DNS_T_MINFO
-#define DNS_T_MINFO 14
-#endif
-#ifndef DNS_T_MX
-#define DNS_T_MX 15
-#endif
-#ifndef DNS_T_TXT
-#define DNS_T_TXT 16
-#endif
-#ifndef DNS_T_AAAA
-#define DNS_T_AAAA 28
-#endif
-#ifndef DNS_T_SRV
-#define DNS_T_SRV 33
-#endif
-#ifndef DNS_T_NAPTR
-#define DNS_T_NAPTR 35
-#endif
-#ifndef DNS_T_A6
-#define DNS_T_A6 38
-#endif
-
-#ifndef DNS_T_ANY
-#define DNS_T_ANY 255
-#endif
-/* }}} */
-
-static char *php_gethostbyaddr(char *ip);
-static char *php_gethostbyname(char *name);
-
-/* {{{ proto string gethostbyaddr(string ip_address)
- Get the Internet host name corresponding to a given IP address */
-PHP_FUNCTION(gethostbyaddr)
-{
- zval **arg;
- char *addr;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- convert_to_string_ex(arg);
-
- addr = php_gethostbyaddr(Z_STRVAL_PP(arg));
-
- if (addr == NULL) {
-#if HAVE_IPV6 && HAVE_INET_PTON
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Address is not a valid IPv4 or IPv6 address");
-#else
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Address is not in a.b.c.d form");
-#endif
- RETVAL_FALSE;
- } else {
- RETVAL_STRING(addr, 0);
- }
-}
-/* }}} */
-
-/* {{{ php_gethostbyaddr */
-static char *php_gethostbyaddr(char *ip)
-{
-#if HAVE_IPV6 && HAVE_INET_PTON
- struct in6_addr addr6;
-#endif
- struct in_addr addr;
- struct hostent *hp;
-
-#if HAVE_IPV6 && HAVE_INET_PTON
- if (inet_pton(AF_INET6, ip, &addr6)) {
- hp = gethostbyaddr((char *) &addr6, sizeof(addr6), AF_INET6);
- } else if (inet_pton(AF_INET, ip, &addr)) {
- hp = gethostbyaddr((char *) &addr, sizeof(addr), AF_INET);
- } else {
- return NULL;
- }
-#else
- addr.s_addr = inet_addr(ip);
-
- if (addr.s_addr == -1) {
- return NULL;
- }
-
- hp = gethostbyaddr((char *) &addr, sizeof(addr), AF_INET);
-#endif
-
- if (!hp || hp->h_name == NULL || hp->h_name[0] == '\0') {
- return estrdup(ip);
- }
-
- return estrdup(hp->h_name);
-}
-/* }}} */
-
-/* {{{ proto string gethostbyname(string hostname)
- Get the IP address corresponding to a given Internet host name */
-PHP_FUNCTION(gethostbyname)
-{
- zval **arg;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- convert_to_string_ex(arg);
-
- RETVAL_STRING(php_gethostbyname(Z_STRVAL_PP(arg)), 0);
-}
-/* }}} */
-
-/* {{{ proto array gethostbynamel(string hostname)
- Return a list of IP addresses that a given hostname resolves to. */
-PHP_FUNCTION(gethostbynamel)
-{
- zval **arg;
- struct hostent *hp;
- struct in_addr in;
- int i;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg) == FAILURE) {
- ZEND_WRONG_PARAM_COUNT();
- }
- convert_to_string_ex(arg);
-
- hp = gethostbyname(Z_STRVAL_PP(arg));
- if (hp == NULL || hp->h_addr_list == NULL) {
- RETURN_FALSE;
- }
-
- array_init(return_value);
-
- for (i = 0 ; hp->h_addr_list[i] != 0 ; i++) {
- in = *(struct in_addr *) hp->h_addr_list[i];
- add_next_index_string(return_value, inet_ntoa(in), 1);
- }
-}
-/* }}} */
-
-/* {{{ php_gethostbyname */
-static char *php_gethostbyname(char *name)
-{
- struct hostent *hp;
- struct in_addr in;
-
- hp = gethostbyname(name);
-
- if (!hp || !*(hp->h_addr_list)) {
- return estrdup(name);
- }
-
- memcpy(&in.s_addr, *(hp->h_addr_list), sizeof(in.s_addr));
-
- return estrdup(inet_ntoa(in));
-}
-/* }}} */
-
-#if HAVE_RES_SEARCH && !(defined(__BEOS__)||defined(PHP_WIN32) || defined(NETWARE))
-
-/* {{{ proto int dns_check_record(string host [, string type])
- Check DNS records corresponding to a given Internet host name or IP address */
-PHP_FUNCTION(dns_check_record)
-{
- zval **arg1, **arg2;
- int type, i;
-#ifndef MAXPACKET
-#define MAXPACKET 8192 /* max packet size used internally by BIND */
-#endif
- u_char ans[MAXPACKET];
-
- switch (ZEND_NUM_ARGS()) {
- case 1:
- if (zend_get_parameters_ex(1, &arg1) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- type = T_MX;
- convert_to_string_ex(arg1);
- break;
-
- case 2:
- if (zend_get_parameters_ex(2, &arg1, &arg2) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex(arg1);
- convert_to_string_ex(arg2);
-
- if (!strcasecmp("A", Z_STRVAL_PP(arg2))) type = T_A;
- else if (!strcasecmp("NS", Z_STRVAL_PP(arg2))) type = DNS_T_NS;
- else if (!strcasecmp("MX", Z_STRVAL_PP(arg2))) type = DNS_T_MX;
- else if (!strcasecmp("PTR", Z_STRVAL_PP(arg2))) type = DNS_T_PTR;
- else if (!strcasecmp("ANY", Z_STRVAL_PP(arg2))) type = DNS_T_ANY;
- else if (!strcasecmp("SOA", Z_STRVAL_PP(arg2))) type = DNS_T_SOA;
- else if (!strcasecmp("CNAME", Z_STRVAL_PP(arg2))) type = DNS_T_CNAME;
- else if (!strcasecmp("AAAA", Z_STRVAL_PP(arg2))) type = DNS_T_AAAA;
- else if (!strcasecmp("SRV", Z_STRVAL_PP(arg2))) type = DNS_T_SRV;
- else if (!strcasecmp("NAPTR", Z_STRVAL_PP(arg2))) type = DNS_T_NAPTR;
- else if (!strcasecmp("A6", Z_STRVAL_PP(arg2))) type = DNS_T_A6;
- else {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Type '%s' not supported", Z_STRVAL_PP(arg2));
- RETURN_FALSE;
- }
- break;
-
- default:
- WRONG_PARAM_COUNT;
- }
-
- i = res_search(Z_STRVAL_PP(arg1), C_IN, type, ans, sizeof(ans));
-
- if (i < 0) {
- RETURN_FALSE;
- }
-
- RETURN_TRUE;
-}
-/* }}} */
-
-#if HAVE_DNS_FUNCS
-
-#define PHP_DNS_NUM_TYPES 12 /* Number of DNS Types Supported by PHP currently */
-
-#define PHP_DNS_A 0x00000001
-#define PHP_DNS_NS 0x00000002
-#define PHP_DNS_CNAME 0x00000010
-#define PHP_DNS_SOA 0x00000020
-#define PHP_DNS_PTR 0x00000800
-#define PHP_DNS_HINFO 0x00001000
-#define PHP_DNS_MX 0x00004000
-#define PHP_DNS_TXT 0x00008000
-#define PHP_DNS_A6 0x01000000
-#define PHP_DNS_SRV 0x02000000
-#define PHP_DNS_NAPTR 0x04000000
-#define PHP_DNS_AAAA 0x08000000
-#define PHP_DNS_ANY 0x10000000
-#define PHP_DNS_ALL (PHP_DNS_A|PHP_DNS_NS|PHP_DNS_CNAME|PHP_DNS_SOA|PHP_DNS_PTR|PHP_DNS_HINFO|PHP_DNS_MX|PHP_DNS_TXT|PHP_DNS_A6|PHP_DNS_SRV|PHP_DNS_NAPTR|PHP_DNS_AAAA)
-
-PHP_MINIT_FUNCTION(dns) {
- REGISTER_LONG_CONSTANT("DNS_A", PHP_DNS_A, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("DNS_NS", PHP_DNS_NS, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("DNS_CNAME", PHP_DNS_CNAME, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("DNS_SOA", PHP_DNS_SOA, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("DNS_PTR", PHP_DNS_PTR, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("DNS_HINFO", PHP_DNS_HINFO, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("DNS_MX", PHP_DNS_MX, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("DNS_TXT", PHP_DNS_TXT, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("DNS_SRV", PHP_DNS_SRV, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("DNS_NAPTR", PHP_DNS_NAPTR, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("DNS_AAAA", PHP_DNS_AAAA, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("DNS_A6", PHP_DNS_A6, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("DNS_ANY", PHP_DNS_ANY, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("DNS_ALL", PHP_DNS_ALL, CONST_CS | CONST_PERSISTENT);
- return SUCCESS;
-}
-
-#ifndef HFIXEDSZ
-#define HFIXEDSZ 12 /* fixed data in header <arpa/nameser.h> */
-#endif /* HFIXEDSZ */
-
-#ifndef QFIXEDSZ
-#define QFIXEDSZ 4 /* fixed data in query <arpa/nameser.h> */
-#endif /* QFIXEDSZ */
-
-#ifndef MAXHOSTNAMELEN
-#define MAXHOSTNAMELEN 256
-#endif /* MAXHOSTNAMELEN */
-
-#ifndef MAXRESOURCERECORDS
-#define MAXRESOURCERECORDS 64
-#endif /* MAXRESOURCERECORDS */
-
-typedef union {
- HEADER qb1;
- u_char qb2[65536];
-} querybuf;
-
-/* {{{ php_parserr */
-static u_char *php_parserr(u_char *cp, querybuf *answer, int type_to_fetch, int store, zval **subarray)
-{
- u_short type, class, dlen;
- u_long ttl;
- long n, i;
- u_short s;
- u_char *tp, *p;
- char name[MAXHOSTNAMELEN];
- int have_v6_break = 0, in_v6_break = 0;
-
- n = dn_expand(answer->qb2, answer->qb2+65536, cp, name, (sizeof(name)) - 2);
- if (n < 0) {
- return NULL;
- }
- cp += n;
-
- GETSHORT(type, cp);
- GETSHORT(class, cp);
- GETLONG(ttl, cp);
- GETSHORT(dlen, cp);
- if (type_to_fetch != T_ANY && type != type_to_fetch) {
- *subarray = NULL;
- cp += dlen;
- return cp;
- }
-
- if (!store) {
- *subarray = NULL;
- cp += dlen;
- return cp;
- }
-
- ALLOC_INIT_ZVAL(*subarray);
- array_init(*subarray);
-
- add_assoc_string(*subarray, "host", name, 1);
- switch (type) {
- case DNS_T_A:
- add_assoc_string(*subarray, "type", "A", 1);
- sprintf(name, "%d.%d.%d.%d", cp[0], cp[1], cp[2], cp[3]);
- add_assoc_string(*subarray, "ip", name, 1);
- cp += dlen;
- break;
- case DNS_T_MX:
- add_assoc_string(*subarray, "type", "MX", 1);
- GETSHORT(n, cp);
- add_assoc_long(*subarray, "pri", n);
- /* no break; */
- case DNS_T_CNAME:
- if (type == DNS_T_CNAME)
- add_assoc_string(*subarray, "type", "CNAME", 1);
- /* no break; */
- case DNS_T_NS:
- if (type == DNS_T_NS)
- add_assoc_string(*subarray, "type", "NS", 1);
- /* no break; */
- case DNS_T_PTR:
- if (type == DNS_T_PTR)
- add_assoc_string(*subarray, "type", "PTR", 1);
- n = dn_expand(answer->qb2, answer->qb2+65536, cp, name, (sizeof name) - 2);
- if (n < 0) {
- return NULL;
- }
- cp += n;
- add_assoc_string(*subarray, "target", name, 1);
- break;
- case DNS_T_HINFO:
- /* See RFC 1010 for values */
- add_assoc_string(*subarray, "type", "HINFO", 1);
- n = *cp & 0xFF;
- cp++;
- add_assoc_stringl(*subarray, "cpu", cp, n, 1);
- cp += n;
- n = *cp & 0xFF;
- cp++;
- 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);
- break;
- case DNS_T_SOA:
- add_assoc_string(*subarray, "type", "SOA", 1);
- n = dn_expand(answer->qb2, answer->qb2+65536, cp, name, (sizeof name) -2);
- if (n < 0) {
- return NULL;
- }
- cp += n;
- add_assoc_string(*subarray, "mname", name, 1);
- n = dn_expand(answer->qb2, answer->qb2+65536, cp, name, (sizeof name) -2);
- if (n < 0) {
- return NULL;
- }
- cp += n;
- add_assoc_string(*subarray, "rname", name, 1);
- GETLONG(n, cp);
- add_assoc_long(*subarray, "serial", n);
- GETLONG(n, cp);
- add_assoc_long(*subarray, "refresh", n);
- GETLONG(n, cp);
- add_assoc_long(*subarray, "retry", n);
- GETLONG(n, cp);
- add_assoc_long(*subarray, "expire", n);
- GETLONG(n, cp);
- add_assoc_long(*subarray, "minimum-ttl", n);
- break;
- case DNS_T_AAAA:
- tp = name;
- for(i=0; i < 8; i++) {
- GETSHORT(s, cp);
- if (s != 0) {
- if (tp > (u_char *)name) {
- in_v6_break = 0;
- tp[0] = ':';
- tp++;
- }
- tp += sprintf(tp,"%x",s);
- } else {
- if (!have_v6_break) {
- have_v6_break = 1;
- in_v6_break = 1;
- tp[0] = ':';
- tp++;
- } else if (!in_v6_break) {
- tp[0] = ':';
- tp++;
- tp[0] = '0';
- tp++;
- }
- }
- }
- if (have_v6_break && in_v6_break) {
- tp[0] = ':';
- tp++;
- }
- tp[0] = '\0';
- add_assoc_string(*subarray, "type", "AAAA", 1);
- add_assoc_string(*subarray, "ipv6", name, 1);
- break;
- case DNS_T_A6:
- p = cp;
- add_assoc_string(*subarray, "type", "A6", 1);
- n = ((int)cp[0]) & 0xFF;
- cp++;
- add_assoc_long(*subarray, "masklen", n);
- tp = name;
- if (n > 15) {
- have_v6_break = 1;
- in_v6_break = 1;
- tp[0] = ':';
- tp++;
- }
- if (n % 16 > 8) {
- /* Partial short */
- if (cp[0] != 0) {
- if (tp > (u_char *)name) {
- in_v6_break = 0;
- tp[0] = ':';
- tp++;
- }
- sprintf(tp, "%x", cp[0] & 0xFF);
- } else {
- if (!have_v6_break) {
- have_v6_break = 1;
- in_v6_break = 1;
- tp[0] = ':';
- tp++;
- } else if (!in_v6_break) {
- tp[0] = ':';
- tp++;
- tp[0] = '0';
- tp++;
- }
- }
- cp++;
- }
- for(i = (n+8)/16; i < 8; i++) {
- GETSHORT(s, cp);
- if (s != 0) {
- if (tp > (u_char *)name) {
- in_v6_break = 0;
- tp[0] = ':';
- tp++;
- }
- tp += sprintf(tp,"%x",s);
- } else {
- if (!have_v6_break) {
- have_v6_break = 1;
- in_v6_break = 1;
- tp[0] = ':';
- tp++;
- } else if (!in_v6_break) {
- tp[0] = ':';
- tp++;
- tp[0] = '0';
- tp++;
- }
- }
- }
- if (have_v6_break && in_v6_break) {
- tp[0] = ':';
- tp++;
- }
- tp[0] = '\0';
- add_assoc_string(*subarray, "ipv6", name, 1);
- if (cp < p + dlen) {
- n = dn_expand(answer->qb2, answer->qb2+65536, cp, name, (sizeof name) - 2);
- if (n < 0) {
- return NULL;
- }
- cp += n;
- add_assoc_string(*subarray, "chain", name, 1);
- }
- break;
- case DNS_T_SRV:
- add_assoc_string(*subarray, "type", "SRV", 1);
- GETSHORT(n, cp);
- add_assoc_long(*subarray, "pri", n);
- GETSHORT(n, cp);
- add_assoc_long(*subarray, "weight", n);
- GETSHORT(n, cp);
- add_assoc_long(*subarray, "port", n);
- n = dn_expand(answer->qb2, answer->qb2+65536, cp, name, (sizeof name) - 2);
- if (n < 0) {
- return NULL;
- }
- cp += n;
- add_assoc_string(*subarray, "target", name, 1);
- break;
- case DNS_T_NAPTR:
- add_assoc_string(*subarray, "type", "NAPTR", 1);
- GETSHORT(n, cp);
- add_assoc_long(*subarray, "order", n);
- GETSHORT(n, cp);
- add_assoc_long(*subarray, "pref", n);
- n = (cp[0] & 0xFF);
- add_assoc_stringl(*subarray, "flags", ++cp, n, 1);
- cp += n;
- n = (cp[0] & 0xFF);
- add_assoc_stringl(*subarray, "services", ++cp, n, 1);
- cp += n;
- n = (cp[0] & 0xFF);
- add_assoc_stringl(*subarray, "regex", ++cp, n, 1);
- cp += n;
- n = dn_expand(answer->qb2, answer->qb2+65536, cp, name, (sizeof name) - 2);
- if (n < 0) {
- return NULL;
- }
- cp += n;
- add_assoc_string(*subarray, "replacement", name, 1);
- break;
- default:
- cp += dlen;
- }
-
- add_assoc_string(*subarray, "class", "IN", 1);
- add_assoc_long(*subarray, "ttl", ttl);
-
- return cp;
-}
-/* }}} */
-
-/* {{{ proto array|false dns_get_record(string hostname [, int type[, array authns, array addtl]])
- Get any Resource Record corresponding to a given Internet host name */
-PHP_FUNCTION(dns_get_record)
-{
- pval *addtl, *host, *authns, *fetch_type;
- int addtl_recs = 0;
- int type_to_fetch, type_param = PHP_DNS_ANY;
- struct __res_state res;
- HEADER *hp;
- querybuf buf, answer, *ans;
- u_char *cp = NULL, *end = NULL;
- long n, qd, an, ns = 0, ar = 0;
- int type, first_query = 1, store_results = 1;
-
- switch (ZEND_NUM_ARGS()) {
- case 1:
- if (zend_get_parameters(ht, 1, &host) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- break;
- case 2:
- if (zend_get_parameters(ht, 2, &host, &fetch_type) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- type_param = Z_LVAL_P(fetch_type);
- break;
- case 4:
- if (zend_get_parameters(ht, 4, &host, &fetch_type, &authns, &addtl) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- type_param = Z_LVAL_P(fetch_type);
- pval_destructor(authns);
- addtl_recs = 1; /* We want the additional Records */
- array_init(authns);
- pval_destructor(addtl);
- array_init(addtl);
- break;
- default:
- WRONG_PARAM_COUNT;
- }
-
- convert_to_string(host);
-
- if (type_param&~PHP_DNS_ALL && type_param!=PHP_DNS_ANY) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Type '%d' not supported", type_param);
- RETURN_FALSE;
- }
-
- /* Initialize the return array */
- array_init(return_value);
-
- /* - We emulate an or'ed type mask by querying type by type. (Steps 0 - NUMTYPES-1 )
- * If additional info is wanted we check again with DNS_T_ANY (step NUMTYPES / NUMTYPES+1 )
- * store_results is used to skip storing the results retrieved in step
- * NUMTYPES+1 when results were already fetched.
- * - In case of PHP_DNS_ANY we use the directly fetch DNS_T_ANY. (step NUMTYPES+1 )
- */
- for(type = (type_param==PHP_DNS_ANY ? (PHP_DNS_NUM_TYPES + 1) : 0); type < (addtl_recs ? (PHP_DNS_NUM_TYPES + 2) : PHP_DNS_NUM_TYPES) || first_query; type++)
- {
- first_query = 0;
- switch (type) {
- case 0:
- type_to_fetch = type_param&PHP_DNS_A ? DNS_T_A : 0;
- break;
- case 1:
- type_to_fetch = type_param&PHP_DNS_NS ? DNS_T_NS : 0;
- break;
- case 2:
- type_to_fetch = type_param&PHP_DNS_CNAME ? DNS_T_CNAME : 0;
- break;
- case 3:
- type_to_fetch = type_param&PHP_DNS_SOA ? DNS_T_SOA : 0;
- break;
- case 4:
- type_to_fetch = type_param&PHP_DNS_PTR ? DNS_T_PTR : 0;
- break;
- case 5:
- type_to_fetch = type_param&PHP_DNS_HINFO ? DNS_T_HINFO : 0;
- break;
- case 6:
- type_to_fetch = type_param&PHP_DNS_MX ? DNS_T_MX : 0;
- break;
- case 7:
- type_to_fetch = type_param&PHP_DNS_TXT ? DNS_T_TXT : 0;
- break;
- case 8:
- type_to_fetch = type_param&PHP_DNS_AAAA ? DNS_T_AAAA : 0;
- break;
- case 9:
- type_to_fetch = type_param&PHP_DNS_SRV ? DNS_T_SRV : 0;
- break;
- case 10:
- type_to_fetch = type_param&PHP_DNS_NAPTR ? DNS_T_NAPTR : 0;
- break;
- case 11:
- type_to_fetch = type_param&PHP_DNS_A6 ? DNS_T_A6 : 0;
- break;
- case PHP_DNS_NUM_TYPES:
- store_results = 0;
- continue;
- default:
- case (PHP_DNS_NUM_TYPES + 1):
- type_to_fetch = DNS_T_ANY;
- break;
- }
- if (type_to_fetch) {
- res_ninit(&res);
- res.retrans = 5;
- res.options &= ~RES_DEFNAMES;
-
- n = res_nmkquery(&res, QUERY, Z_STRVAL_P(host), C_IN, type_to_fetch, NULL, 0, NULL, buf.qb2, sizeof buf);
- if (n<0) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "res_nmkquery() failed");
- zval_dtor(return_value);
- RETURN_FALSE;
- }
- n = res_nsend(&res, buf.qb2, n, answer.qb2, sizeof answer);
- if (n<0) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "res_nsend() failed");
- zval_dtor(return_value);
- RETURN_FALSE;
- }
-
- cp = answer.qb2 + HFIXEDSZ;
- end = answer.qb2 + n;
- ans = &answer;
- hp = (HEADER *)ans;
- qd = ntohs(hp->qdcount);
- an = ntohs(hp->ancount);
- ns = ntohs(hp->nscount);
- ar = ntohs(hp->arcount);
-
- /* Skip QD entries, they're only used by dn_expand later on */
- while (qd-- > 0) {
- n = dn_skipname(cp, end);
- if (n < 0) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to parse DNS data received");
- zval_dtor(return_value);
- RETURN_FALSE;
- }
- cp += n + QFIXEDSZ;
- }
-
- /* YAY! Our real answers! */
- while (an-- && cp && cp < end) {
- zval *retval;
-
- cp = php_parserr(cp, &answer, type_to_fetch, store_results, &retval);
- if (retval != NULL && store_results) {
- add_next_index_zval(return_value, retval);
- }
- }
- res_nclose(&res);
- }
- }
-
- if (addtl_recs) {
- /* List of Authoritative Name Servers */
- while (ns-- > 0 && cp && cp < end) {
- zval *retval;
-
- cp = php_parserr(cp, &answer, DNS_T_ANY, 1, &retval);
- if (retval != NULL) {
- add_next_index_zval(authns, retval);
- }
- }
- /* Additional records associated with authoritative name servers */
- while (ar-- > 0 && cp && cp < end) {
- zval *retval;
-
- cp = php_parserr(cp, &answer, DNS_T_ANY, 1, &retval);
- if (retval != NULL) {
- add_next_index_zval(addtl, retval);
- }
- }
- }
-}
-/* }}} */
-#endif /* HAVE_DNS_FUNCS */
-
-#if HAVE_DN_SKIPNAME && HAVE_DN_EXPAND
-/* {{{ proto bool dns_get_mx(string hostname, array mxhosts [, array weight])
- Get MX records corresponding to a given Internet host name */
-PHP_FUNCTION(dns_get_mx)
-{
- pval *host, *mx_list, *weight_list;
- int need_weight = 0;
- int count, qdc;
- u_short type, weight;
- u_char ans[MAXPACKET];
- char buf[MAXHOSTNAMELEN];
- HEADER *hp;
- u_char *cp, *end;
- int i;
-
- switch (ZEND_NUM_ARGS()) {
- case 2:
- if (zend_get_parameters(ht, 2, &host, &mx_list) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- break;
-
- case 3:
- if (zend_get_parameters(ht, 3, &host, &mx_list, &weight_list) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- need_weight = 1;
- pval_destructor(weight_list); /* start with clean array */
- array_init(weight_list);
- break;
-
- default:
- WRONG_PARAM_COUNT;
- }
-
- convert_to_string(host);
- pval_destructor(mx_list); /* start with clean array */
- array_init(mx_list);
-
- /* Go! */
- i = res_search(Z_STRVAL_P(host), C_IN, DNS_T_MX, (u_char *)&ans, sizeof(ans));
- if (i < 0) {
- RETURN_FALSE;
- }
- if (i > (int)sizeof(ans)) {
- i = sizeof(ans);
- }
- hp = (HEADER *)&ans;
- cp = (u_char *)&ans + HFIXEDSZ;
- end = (u_char *)&ans +i;
- for (qdc = ntohs((unsigned short)hp->qdcount); qdc--; cp += i + QFIXEDSZ) {
- if ((i = dn_skipname(cp, end)) < 0 ) {
- RETURN_FALSE;
- }
- }
- count = ntohs((unsigned short)hp->ancount);
- while (--count >= 0 && cp < end) {
- if ((i = dn_skipname(cp, end)) < 0 ) {
- RETURN_FALSE;
- }
- cp += i;
- GETSHORT(type, cp);
- cp += INT16SZ + INT32SZ;
- GETSHORT(i, cp);
- if (type != DNS_T_MX) {
- cp += i;
- continue;
- }
- GETSHORT(weight, cp);
- if ((i = dn_expand(ans, end, cp, buf, sizeof(buf)-1)) < 0) {
- RETURN_FALSE;
- }
- cp += i;
- add_next_index_string(mx_list, buf, 1);
- if (need_weight) {
- add_next_index_long(weight_list, weight);
- }
- }
- RETURN_TRUE;
-}
-/* }}} */
-#endif /* HAVE_DN_SKIPNAME && HAVE_DN_EXPAND */
-
-#endif /* HAVE_RES_SEARCH && !(defined(__BEOS__)||defined(PHP_WIN32) || defined(NETWARE)) */
-
-/*
- * 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/standard/dns.h b/ext/standard/dns.h
deleted file mode 100644
index 0febcb5bfe..0000000000
--- a/ext/standard/dns.h
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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. |
- +----------------------------------------------------------------------+
- | Authors: The typical suspects |
- | Marcus Boerger <helly@php.net> |
- | Pollita <pollita@php.net> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifndef DNS_H
-#define DNS_H
-
-#if HAVE_RES_NMKQUERY && HAVE_RES_NSEND && HAVE_DN_EXPAND && HAVE_DN_SKIPNAME
-#define HAVE_DNS_FUNCS 1
-#endif
-
-PHP_FUNCTION(gethostbyaddr);
-PHP_FUNCTION(gethostbyname);
-PHP_FUNCTION(gethostbynamel);
-
-#if HAVE_RES_SEARCH && !(defined(__BEOS__)||defined(PHP_WIN32))
-
-PHP_FUNCTION(dns_check_record);
-# if HAVE_DN_SKIPNAME && HAVE_DN_EXPAND
-PHP_FUNCTION(dns_get_mx);
-# endif
-
-# if HAVE_DNS_FUNCS
-
-PHP_FUNCTION(dns_get_record);
-
-PHP_MINIT_FUNCTION(dns);
-
-# endif
-#endif
-
-#ifndef INT16SZ
-#define INT16SZ 2
-#endif
-
-#ifndef INT32SZ
-#define INT32SZ 4
-#endif
-
-#endif /* DNS_H */
diff --git a/ext/standard/exec.c b/ext/standard/exec.c
deleted file mode 100644
index 11bb365f65..0000000000
--- a/ext/standard/exec.c
+++ /dev/null
@@ -1,480 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Rasmus Lerdorf <rasmus@php.net> |
- | Ilia Alshanetsky <iliaa@php.net> |
- +----------------------------------------------------------------------+
- */
-/* $Id$ */
-
-#include <stdio.h>
-#include "php.h"
-#include <ctype.h>
-#include "php_string.h"
-#include "safe_mode.h"
-#include "ext/standard/head.h"
-#include "ext/standard/file.h"
-#include "exec.h"
-#include "php_globals.h"
-#include "SAPI.h"
-
-#if HAVE_SYS_WAIT_H
-#include <sys/wait.h>
-#endif
-#if HAVE_SIGNAL_H
-#include <signal.h>
-#endif
-
-#if HAVE_SYS_TYPES_H
-#include <sys/types.h>
-#endif
-#if HAVE_SYS_STAT_H
-#include <sys/stat.h>
-#endif
-#if HAVE_FCNTL_H
-#include <fcntl.h>
-#endif
-
-#if HAVE_NICE && HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-
-/* {{{ php_exec
- * If type==0, only last line of output is returned (exec)
- * If type==1, all lines will be printed and last lined returned (system)
- * If type==2, all lines will be saved to given array (exec with &$array)
- * If type==3, output will be printed binary, no lines will be saved or returned (passthru)
- *
- */
-int php_exec(int type, char *cmd, pval *array, pval *return_value TSRMLS_DC)
-{
- FILE *fp;
- char *buf, *tmp=NULL;
- int l, pclose_return;
- char *cmd_p, *b, *c, *d=NULL;
- php_stream *stream;
- size_t buflen, bufl = 0;
-#if PHP_SIGCHILD
- void (*sig_handler)();
-#endif
-
- if (PG(safe_mode)) {
- if ((c = strchr(cmd, ' '))) {
- *c = '\0';
- c++;
- }
- if (strstr(cmd, "..")) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "No '..' components allowed in path");
- goto err;
- }
- b = strrchr(cmd, PHP_DIR_SEPARATOR);
- spprintf(&d, 0, "%s%s%s%s%s", PG(safe_mode_exec_dir), (b ? "" : "/"), (b ? b : cmd), (c ? " " : ""), (c ? c : ""));
- if (c) {
- *(c - 1) = ' ';
- }
- cmd_p = php_escape_shell_cmd(d);
- efree(d);
- d = cmd_p;
- } else {
- cmd_p = cmd;
- }
-
-#if PHP_SIGCHILD
- sig_handler = signal (SIGCHLD, SIG_DFL);
-#endif
-
-#ifdef PHP_WIN32
- fp = VCWD_POPEN(cmd_p, "rb");
-#else
- fp = VCWD_POPEN(cmd_p, "r");
-#endif
- if (!fp) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to fork [%s]", cmd);
- goto err;
- }
-
- stream = php_stream_fopen_from_pipe(fp, "rb");
-
- buf = (char *) emalloc(EXEC_INPUT_BUF);
- buflen = EXEC_INPUT_BUF;
-
- if (type != 3) {
- b = buf;
-
- while (php_stream_get_line(stream, b, EXEC_INPUT_BUF, &bufl)) {
- /* no new line found, let's read some more */
- if (b[bufl - 1] != '\n' && !php_stream_eof(stream)) {
- if (buflen < (bufl + (b - buf) + EXEC_INPUT_BUF)) {
- bufl += b - buf;
- buflen = bufl + EXEC_INPUT_BUF;
- buf = erealloc(buf, buflen);
- b = buf + bufl;
- } else {
- b += bufl;
- }
- continue;
- } else if (b != buf) {
- bufl += b - buf;
- }
-
- if (type == 1) {
- PHPWRITE(buf, bufl);
- sapi_flush(TSRMLS_C);
- } else if (type == 2) {
- /* strip trailing whitespaces */
- l = bufl;
- while (l-- && isspace(((unsigned char *)buf)[l]));
- if (l != (bufl - 1)) {
- bufl = l + 1;
- buf[bufl] = '\0';
- }
- add_next_index_stringl(array, buf, bufl, 1);
- }
- b = buf;
- }
- if (bufl) {
- /* strip trailing whitespaces if we have not done so already */
- if (type != 2) {
- l = bufl;
- while (l-- && isspace(((unsigned char *)buf)[l]));
- if (l != (bufl - 1)) {
- bufl = l + 1;
- buf[bufl] = '\0';
- }
- }
-
- /* Return last line from the shell command */
- if (PG(magic_quotes_runtime)) {
- int len;
-
- tmp = php_addslashes(buf, bufl, &len, 0 TSRMLS_CC);
- RETVAL_STRINGL(tmp, len, 0);
- } else {
- RETVAL_STRINGL(buf, bufl, 1);
- }
- } else { /* should return NULL, but for BC we return "" */
- RETVAL_EMPTY_STRING();
- }
- } else {
- while((bufl = php_stream_read(stream, buf, EXEC_INPUT_BUF)) > 0) {
- PHPWRITE(buf, bufl);
- }
- }
-
- pclose_return = php_stream_close(stream);
- efree(buf);
-
-done:
-#if PHP_SIGCHILD
- signal (SIGCHLD, sig_handler);
-#endif
- if (d) {
- efree(d);
- }
- return pclose_return;
-err:
- pclose_return = -1;
- goto done;
-}
-/* }}} */
-
-static void php_exec_ex(INTERNAL_FUNCTION_PARAMETERS, int mode)
-{
- char *cmd;
- int cmd_len;
- zval *ret_code=NULL, *ret_array=NULL;
- int ret;
-
- if (mode) {
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|z/", &cmd, &cmd_len, &ret_code) == FAILURE) {
- RETURN_FALSE;
- }
- } else {
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|z/z/", &cmd, &cmd_len, &ret_array, &ret_code) == FAILURE) {
- RETURN_FALSE;
- }
- }
- if (!cmd_len) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Cannot execute a blank command");
- RETURN_FALSE;
- }
-
- if (!ret_array) {
- ret = php_exec(mode, cmd, NULL, return_value TSRMLS_CC);
- } else {
- if (Z_TYPE_P(ret_array) != IS_ARRAY) {
- zval_dtor(ret_array);
- array_init(ret_array);
- }
- ret = php_exec(2, cmd, ret_array, return_value TSRMLS_CC);
- }
- if (ret_code) {
- zval_dtor(ret_code);
- ZVAL_LONG(ret_code, ret);
- }
-}
-
-/* {{{ proto string exec(string command [, array &output [, int &return_value]])
- Execute an external program */
-PHP_FUNCTION(exec)
-{
- php_exec_ex(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0);
-}
-
-/* }}} */
-
-/* {{{ proto int system(string command [, int &return_value])
- Execute an external program and display output */
-PHP_FUNCTION(system)
-{
- php_exec_ex(INTERNAL_FUNCTION_PARAM_PASSTHRU, 1);
-}
-/* }}} */
-
-/* {{{ proto void passthru(string command [, int &return_value])
- Execute an external program and display raw output */
-PHP_FUNCTION(passthru)
-{
- php_exec_ex(INTERNAL_FUNCTION_PARAM_PASSTHRU, 3);
-}
-/* }}} */
-
-/* {{{ php_escape_shell_cmd
- Escape all chars that could possibly be used to
- break out of a shell command
-
- This function emalloc's a string and returns the pointer.
- Remember to efree it when done with it.
-
- *NOT* safe for binary strings
-*/
-char *php_escape_shell_cmd(char *str) {
- register int x, y, l;
- char *cmd;
- char *p = NULL;
-
- l = strlen(str);
- cmd = safe_emalloc(2, l, 1);
-
- for (x = 0, y = 0; x < l; x++) {
- switch (str[x]) {
- case '"':
- case '\'':
-#ifndef PHP_WIN32
- if (!p && (p = memchr(str + x + 1, str[x], l - x - 1))) {
- /* noop */
- } else if (p && *p == str[x]) {
- p = NULL;
- } else {
- cmd[y++] = '\\';
- }
- cmd[y++] = str[x];
- break;
-#endif
- case '#': /* This is character-set independent */
- case '&':
- case ';':
- case '`':
- case '|':
- case '*':
- case '?':
- case '~':
- case '<':
- case '>':
- case '^':
- case '(':
- case ')':
- case '[':
- case ']':
- case '{':
- case '}':
- case '$':
- case '\\':
- case '\x0A': /* excluding these two */
- case '\xFF':
-#ifdef PHP_WIN32
- /* since Windows does not allow us to escape these chars, just remove them */
- case '%':
- cmd[y++] = ' ';
- break;
-#endif
- cmd[y++] = '\\';
- /* fall-through */
- default:
- cmd[y++] = str[x];
-
- }
- }
- cmd[y] = '\0';
- return cmd;
-}
-/* }}} */
-
-/* {{{ php_escape_shell_arg
- */
-char *php_escape_shell_arg(char *str) {
- int x, y, l;
- char *cmd;
-
- y = 0;
- l = strlen(str);
-
- cmd = safe_emalloc(4, l, 3); /* worst case */
-
-#ifdef PHP_WIN32
- cmd[y++] = '"';
-#else
- cmd[y++] = '\'';
-#endif
-
- for (x = 0; x < l; x++) {
- switch (str[x]) {
-#ifdef PHP_WIN32
- case '"':
- case '%':
- cmd[y++] = ' ';
- break;
-#else
- case '\'':
- cmd[y++] = '\'';
- cmd[y++] = '\\';
- cmd[y++] = '\'';
-#endif
- /* fall-through */
- default:
- cmd[y++] = str[x];
- }
- }
-#ifdef PHP_WIN32
- cmd[y++] = '"';
-#else
- cmd[y++] = '\'';
-#endif
- cmd[y] = '\0';
- return cmd;
-}
-/* }}} */
-
-/* {{{ proto string escapeshellcmd(string command)
- Escape shell metacharacters */
-PHP_FUNCTION(escapeshellcmd)
-{
- pval **arg1;
- char *cmd = NULL;
-
- if (zend_get_parameters_ex(1, &arg1) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_string_ex(arg1);
- if (Z_STRLEN_PP(arg1)) {
- cmd = php_escape_shell_cmd(Z_STRVAL_PP(arg1));
- RETVAL_STRING(cmd, 1);
- efree(cmd);
- }
-}
-/* }}} */
-
-/* {{{ proto string escapeshellarg(string arg)
- Quote and escape an argument for use in a shell command */
-PHP_FUNCTION(escapeshellarg)
-{
- pval **arg1;
- char *cmd = NULL;
-
- if (zend_get_parameters_ex(1, &arg1) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_string_ex(arg1);
- if (Z_STRLEN_PP(arg1)) {
- cmd = php_escape_shell_arg(Z_STRVAL_PP(arg1));
- RETVAL_STRING(cmd, 1);
- efree(cmd);
- }
-}
-/* }}} */
-
-/* {{{ proto string shell_exec(string cmd)
- Execute command via shell and return complete output as string */
-PHP_FUNCTION(shell_exec)
-{
- FILE *in;
- size_t total_readbytes;
- pval **cmd;
- char *ret;
- php_stream *stream;
-
- if (ZEND_NUM_ARGS()!=1 || zend_get_parameters_ex(1, &cmd)==FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- if (PG(safe_mode)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Cannot execute using backquotes in Safe Mode");
- RETURN_FALSE;
- }
-
- convert_to_string_ex(cmd);
-#ifdef PHP_WIN32
- if ((in=VCWD_POPEN(Z_STRVAL_PP(cmd), "rt"))==NULL) {
-#else
- if ((in=VCWD_POPEN(Z_STRVAL_PP(cmd), "r"))==NULL) {
-#endif
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to execute '%s'", Z_STRVAL_PP(cmd));
- RETURN_FALSE;
- }
-
- stream = php_stream_fopen_from_pipe(in, "rb");
- total_readbytes = php_stream_copy_to_mem(stream, &ret, PHP_STREAM_COPY_ALL, 0);
- php_stream_close(stream);
-
- if (total_readbytes > 0) {
- RETURN_STRINGL(ret, total_readbytes, 0);
- } else {
- RETURN_NULL();
- }
-}
-/* }}} */
-
-#ifdef HAVE_NICE
-/* {{{ proto bool proc_nice(int priority)
- Change the priority of the current process */
-PHP_FUNCTION(proc_nice)
-{
- long pri;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &pri) == FAILURE) {
- RETURN_FALSE;
- }
-
- errno = 0;
- nice(pri);
- if (errno) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Only a super user may attempt to increase the priority of a process.");
- RETURN_FALSE;
- }
-
- RETURN_TRUE;
-}
-/* }}} */
-#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/standard/exec.h b/ext/standard/exec.h
deleted file mode 100644
index 6402ddbd5a..0000000000
--- a/ext/standard/exec.h
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Rasmus Lerdorf <rasmus@lerdorf.on.ca> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifndef EXEC_H
-#define EXEC_H
-
-PHP_FUNCTION(system);
-PHP_FUNCTION(exec);
-PHP_FUNCTION(escapeshellcmd);
-PHP_FUNCTION(escapeshellarg);
-PHP_FUNCTION(passthru);
-PHP_FUNCTION(shell_exec);
-PHP_FUNCTION(proc_open);
-PHP_FUNCTION(proc_get_status);
-PHP_FUNCTION(proc_close);
-PHP_FUNCTION(proc_terminate);
-PHP_FUNCTION(proc_nice);
-PHP_MINIT_FUNCTION(proc_open);
-
-char *php_escape_shell_cmd(char *);
-char *php_escape_shell_arg(char *);
-int php_exec(int type, char *cmd, pval *array, pval *return_value TSRMLS_DC);
-
-#endif /* EXEC_H */
diff --git a/ext/standard/file.c b/ext/standard/file.c
deleted file mode 100644
index 785d99432e..0000000000
--- a/ext/standard/file.c
+++ /dev/null
@@ -1,2211 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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. |
- +----------------------------------------------------------------------+
- | Authors: Rasmus Lerdorf <rasmus@php.net> |
- | Stig Bakken <ssb@php.net> |
- | Andi Gutmans <andi@zend.com> |
- | Zeev Suraski <zeev@zend.com> |
- | PHP 4.0 patches by Thies C. Arntzen (thies@thieso.net) |
- | PHP streams by Wez Furlong (wez@thebrainroom.com) |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-/* Synced with php 3.0 revision 1.218 1999-06-16 [ssb] */
-
-/* {{{ includes */
-
-#include "php.h"
-#include "php_globals.h"
-#include "ext/standard/flock_compat.h"
-#include "ext/standard/exec.h"
-#include "ext/standard/php_filestat.h"
-#include "php_open_temporary_file.h"
-#include "ext/standard/basic_functions.h"
-#include "php_ini.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <errno.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <fcntl.h>
-#ifdef PHP_WIN32
-#include <io.h>
-#define O_RDONLY _O_RDONLY
-#include "win32/param.h"
-#include "win32/winutil.h"
-#elif defined(NETWARE) && !defined(NEW_LIBC)
-/*#include <ws2nlm.h>*/
-#include <sys/socket.h>
-#include "netware/param.h"
-#else
-#if HAVE_SYS_PARAM_H
-#include <sys/param.h>
-#endif
-#if HAVE_SYS_SELECT_H
-#include <sys/select.h>
-#endif
-#if defined(NETWARE) && defined(USE_WINSOCK)
-#include <novsock2.h>
-#else
-#include <sys/socket.h>
-#include <netinet/in.h>
-#include <netdb.h>
-#endif
-#if HAVE_ARPA_INET_H
-#include <arpa/inet.h>
-#endif
-#endif
-#include "ext/standard/head.h"
-#include "safe_mode.h"
-#include "php_string.h"
-#include "file.h"
-#if HAVE_PWD_H
-#ifdef PHP_WIN32
-#include "win32/pwd.h"
-#elif defined(NETWARE)
-#include "netware/pwd.h"
-#else
-#include <pwd.h>
-#endif
-#endif
-#ifdef HAVE_SYS_TIME_H
-#include <sys/time.h>
-#endif
-#include "fsock.h"
-#include "fopen_wrappers.h"
-#include "streamsfuncs.h"
-#include "php_globals.h"
-
-#ifdef HAVE_SYS_FILE_H
-#include <sys/file.h>
-#endif
-
-#if MISSING_FCLOSE_DECL
-extern int fclose(FILE *);
-#endif
-
-#ifdef HAVE_SYS_MMAN_H
-#include <sys/mman.h>
-#endif
-
-#include "scanf.h"
-#include "zend_API.h"
-
-#ifdef ZTS
-int file_globals_id;
-#else
-php_file_globals file_globals;
-#endif
-
-#ifdef HAVE_FNMATCH
-#ifndef _GNU_SOURCE
-#define _GNU_SOURCE
-#endif
-#include <fnmatch.h>
-#endif
-
-#ifdef HAVE_WCHAR_H
-#include <wchar.h>
-#endif
-
-/* }}} */
-
-#define PHP_STREAM_TO_ZVAL(stream, arg) \
- php_stream_from_zval_no_verify(stream, arg); \
- if (stream == NULL) { \
- RETURN_FALSE; \
- }
-
-/* {{{ ZTS-stuff / Globals / Prototypes */
-
-/* sharing globals is *evil* */
-static int le_stream_context = FAILURE;
-
-PHPAPI int php_le_stream_context(void)
-{
- return le_stream_context;
-}
-
-/* }}} */
-/* {{{ Module-Stuff */
-
-static ZEND_RSRC_DTOR_FUNC(file_context_dtor)
-{
- php_stream_context *context = (php_stream_context*)rsrc->ptr;
- if (context->options) {
- zval_ptr_dtor(&context->options);
- context->options = NULL;
- }
- php_stream_context_free(context);
-}
-
-static void file_globals_ctor(php_file_globals *file_globals_p TSRMLS_DC)
-{
- FG(pclose_ret) = 0;
- FG(user_stream_current_filename) = NULL;
- FG(def_chunk_size) = PHP_SOCK_CHUNK_SIZE;
-}
-
-static void file_globals_dtor(php_file_globals *file_globals_p TSRMLS_DC)
-{
-}
-
-
-PHP_INI_BEGIN()
- STD_PHP_INI_ENTRY("user_agent", NULL, PHP_INI_ALL, OnUpdateString, user_agent, php_file_globals, file_globals)
- STD_PHP_INI_ENTRY("default_socket_timeout", "60", PHP_INI_ALL, OnUpdateLong, default_socket_timeout, php_file_globals, file_globals)
- STD_PHP_INI_ENTRY("auto_detect_line_endings", "0", PHP_INI_ALL, OnUpdateLong, auto_detect_line_endings, php_file_globals, file_globals)
-PHP_INI_END()
-
-PHP_MINIT_FUNCTION(file)
-{
- le_stream_context = zend_register_list_destructors_ex(file_context_dtor, NULL, "stream-context", module_number);
-
-#ifdef ZTS
- ts_allocate_id(&file_globals_id, sizeof(php_file_globals), (ts_allocate_ctor) file_globals_ctor, (ts_allocate_dtor) file_globals_dtor);
-#else
- file_globals_ctor(&file_globals TSRMLS_CC);
-#endif
-
- REGISTER_INI_ENTRIES();
-
- 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("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);
- REGISTER_LONG_CONSTANT("STREAM_NOTIFY_AUTH_RESULT", PHP_STREAM_NOTIFY_AUTH_RESULT, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("STREAM_NOTIFY_MIME_TYPE_IS", PHP_STREAM_NOTIFY_MIME_TYPE_IS, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("STREAM_NOTIFY_FILE_SIZE_IS", PHP_STREAM_NOTIFY_FILE_SIZE_IS, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("STREAM_NOTIFY_REDIRECTED", PHP_STREAM_NOTIFY_REDIRECTED, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("STREAM_NOTIFY_PROGRESS", PHP_STREAM_NOTIFY_PROGRESS, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("STREAM_NOTIFY_FAILURE", PHP_STREAM_NOTIFY_FAILURE, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("STREAM_NOTIFY_COMPLETED", PHP_STREAM_NOTIFY_COMPLETED, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("STREAM_NOTIFY_RESOLVE", PHP_STREAM_NOTIFY_RESOLVE, CONST_CS | CONST_PERSISTENT);
-
- REGISTER_LONG_CONSTANT("STREAM_NOTIFY_SEVERITY_INFO", PHP_STREAM_NOTIFY_SEVERITY_INFO, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("STREAM_NOTIFY_SEVERITY_WARN", PHP_STREAM_NOTIFY_SEVERITY_WARN, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("STREAM_NOTIFY_SEVERITY_ERR", PHP_STREAM_NOTIFY_SEVERITY_ERR, CONST_CS | CONST_PERSISTENT);
-
- REGISTER_LONG_CONSTANT("STREAM_FILTER_READ", PHP_STREAM_FILTER_READ, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("STREAM_FILTER_WRITE", PHP_STREAM_FILTER_WRITE, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("STREAM_FILTER_ALL", PHP_STREAM_FILTER_ALL, CONST_CS | CONST_PERSISTENT);
-
- REGISTER_LONG_CONSTANT("STREAM_CLIENT_PERSISTENT", PHP_STREAM_CLIENT_PERSISTENT, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("STREAM_CLIENT_ASYNC_CONNECT", PHP_STREAM_CLIENT_ASYNC_CONNECT, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("STREAM_CLIENT_CONNECT", PHP_STREAM_CLIENT_CONNECT, CONST_CS | CONST_PERSISTENT);
-
- REGISTER_LONG_CONSTANT("STREAM_CRYPTO_METHOD_SSLv2_CLIENT", STREAM_CRYPTO_METHOD_SSLv2_CLIENT, CONST_CS|CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("STREAM_CRYPTO_METHOD_SSLv3_CLIENT", STREAM_CRYPTO_METHOD_SSLv3_CLIENT, CONST_CS|CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("STREAM_CRYPTO_METHOD_SSLv23_CLIENT", STREAM_CRYPTO_METHOD_SSLv23_CLIENT, CONST_CS|CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("STREAM_CRYPTO_METHOD_TLS_CLIENT", STREAM_CRYPTO_METHOD_TLS_CLIENT, CONST_CS|CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("STREAM_CRYPTO_METHOD_SSLv2_SERVER", STREAM_CRYPTO_METHOD_SSLv2_SERVER, CONST_CS|CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("STREAM_CRYPTO_METHOD_SSLv3_SERVER", STREAM_CRYPTO_METHOD_SSLv3_SERVER, CONST_CS|CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("STREAM_CRYPTO_METHOD_SSLv23_SERVER", STREAM_CRYPTO_METHOD_SSLv23_SERVER, CONST_CS|CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("STREAM_CRYPTO_METHOD_TLS_SERVER", STREAM_CRYPTO_METHOD_TLS_SERVER, CONST_CS|CONST_PERSISTENT);
-
- REGISTER_LONG_CONSTANT("STREAM_PEEK", STREAM_PEEK, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("STREAM_OOB", STREAM_OOB, CONST_CS | CONST_PERSISTENT);
-
- REGISTER_LONG_CONSTANT("STREAM_SERVER_BIND", STREAM_XPORT_BIND, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("STREAM_SERVER_LISTEN", STREAM_XPORT_LISTEN, CONST_CS | CONST_PERSISTENT);
-
- REGISTER_LONG_CONSTANT("FILE_USE_INCLUDE_PATH", PHP_FILE_USE_INCLUDE_PATH, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("FILE_IGNORE_NEW_LINES", PHP_FILE_IGNORE_NEW_LINES, CONST_CS | CONST_PERSISTENT);
- 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);
-
-#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);
- REGISTER_LONG_CONSTANT("FNM_PERIOD", FNM_PERIOD, CONST_CS | CONST_PERSISTENT);
-#ifdef FNM_CASEFOLD /* a GNU extension */ /* TODO emulate if not available */
- REGISTER_LONG_CONSTANT("FNM_CASEFOLD", FNM_CASEFOLD, CONST_CS | CONST_PERSISTENT);
-#endif
-#endif
-
- return SUCCESS;
-}
-
-/* }}} */
-
-PHP_MSHUTDOWN_FUNCTION(file)
-{
-#ifndef ZTS
- file_globals_dtor(&file_globals TSRMLS_CC);
-#endif
- return SUCCESS;
-}
-
-
-
-/* {{{ proto bool flock(resource fp, int operation [, int &wouldblock])
- Portable file locking */
-
-static int flock_values[] = { LOCK_SH, LOCK_EX, LOCK_UN };
-
-PHP_FUNCTION(flock)
-{
- zval *arg1, *arg3 = NULL;
- int act;
- php_stream *stream;
- long operation = 0;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rl|z", &arg1, &operation, &arg3) == FAILURE) {
- return;
- }
-
- PHP_STREAM_TO_ZVAL(stream, &arg1);
-
- act = operation & 3;
- if (act < 1 || act > 3) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Illegal operation argument");
- RETURN_FALSE;
- }
-
- if (arg3 && PZVAL_IS_REF(arg3)) {
- convert_to_long_ex(&arg3);
- Z_LVAL_P(arg3) = 0;
- }
-
- /* 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);
- if (!php_stream_lock(stream, act)) {
- if (operation && errno == EWOULDBLOCK && arg3 && PZVAL_IS_REF(arg3)) {
- Z_LVAL_P(arg3) = 1;
- }
- RETURN_TRUE;
- }
- RETURN_FALSE;
-}
-
-/* }}} */
-
-#define PHP_META_UNSAFE ".\\+*?[^]$() "
-
-/* {{{ proto array get_meta_tags(string filename [, bool use_include_path])
- Extracts all meta tag content attributes from a file and returns an array */
-
-PHP_FUNCTION(get_meta_tags)
-{
- char *filename;
- int filename_len;
- zend_bool use_include_path = 0;
- int in_tag = 0, done = 0;
- int looking_for_val = 0, have_name = 0, have_content = 0;
- int saw_name = 0, saw_content = 0;
- char *name = NULL, *value = NULL, *temp = NULL;
- php_meta_tags_token tok, tok_last;
- php_meta_tags_data md;
-
- /* Initiailize our structure */
- memset(&md, 0, sizeof(md));
-
- /* Parse arguments */
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|b",
- &filename, &filename_len, &use_include_path) == FAILURE) {
- return;
- }
-
- md.stream = php_stream_open_wrapper(filename, "rb",
- (use_include_path ? USE_PATH : 0) | ENFORCE_SAFE_MODE | REPORT_ERRORS,
- NULL);
-
- if (!md.stream) {
- RETURN_FALSE;
- }
-
- array_init(return_value);
-
- tok_last = TOK_EOF;
-
- while (!done && (tok = php_next_meta_token(&md TSRMLS_CC)) != TOK_EOF) {
- if (tok == TOK_ID) {
- if (tok_last == TOK_OPENTAG) {
- md.in_meta = !strcasecmp("meta", md.token_data);
- } else if (tok_last == TOK_SLASH && in_tag) {
- if (strcasecmp("head", md.token_data) == 0) {
- /* We are done here! */
- done = 1;
- }
- } else if (tok_last == TOK_EQUAL && looking_for_val) {
- if (saw_name) {
- /* Get the NAME attr (Single word attr, non-quoted) */
- temp = name = estrndup(md.token_data, md.token_len);
-
- while (temp && *temp) {
- if (strchr(PHP_META_UNSAFE, *temp)) {
- *temp = '_';
- }
- temp++;
- }
-
- have_name = 1;
- } else if (saw_content) {
- /* Get the CONTENT attr (Single word attr, non-quoted) */
- if (PG(magic_quotes_runtime)) {
- value = php_addslashes(md.token_data, 0, &md.token_len, 0 TSRMLS_CC);
- } else {
- value = estrndup(md.token_data, md.token_len);
- }
-
- have_content = 1;
- }
-
- looking_for_val = 0;
- } else {
- if (md.in_meta) {
- if (strcasecmp("name", md.token_data) == 0) {
- saw_name = 1;
- saw_content = 0;
- looking_for_val = 1;
- } else if (strcasecmp("content", md.token_data) == 0) {
- saw_name = 0;
- saw_content = 1;
- looking_for_val = 1;
- }
- }
- }
- } else if (tok == TOK_STRING && tok_last == TOK_EQUAL && looking_for_val) {
- if (saw_name) {
- /* Get the NAME attr (Quoted single/double) */
- temp = name = estrndup(md.token_data, md.token_len);
-
- while (temp && *temp) {
- if (strchr(PHP_META_UNSAFE, *temp)) {
- *temp = '_';
- }
- temp++;
- }
-
- have_name = 1;
- } else if (saw_content) {
- /* Get the CONTENT attr (Single word attr, non-quoted) */
- if (PG(magic_quotes_runtime)) {
- value = php_addslashes(md.token_data, 0, &md.token_len, 0 TSRMLS_CC);
- } else {
- value = estrndup(md.token_data, md.token_len);
- }
-
- have_content = 1;
- }
-
- looking_for_val = 0;
- } else if (tok == TOK_OPENTAG) {
- if (looking_for_val) {
- looking_for_val = 0;
- have_name = saw_name = 0;
- have_content = saw_content = 0;
- }
- in_tag = 1;
- } else if (tok == TOK_CLOSETAG) {
- if (have_name) {
- /* For BC */
- php_strtolower(name, strlen(name));
- if (have_content) {
- add_assoc_string(return_value, name, value, 0);
- } else {
- add_assoc_string(return_value, name, "", 0);
- }
-
- efree(name);
- } else if (have_content) {
- efree(value);
- }
-
- name = value = NULL;
-
- /* Reset all of our flags */
- in_tag = looking_for_val = 0;
- have_name = saw_name = 0;
- have_content = saw_content = 0;
- md.in_meta = 0;
- }
-
- tok_last = tok;
-
- if (md.token_data)
- efree(md.token_data);
-
- md.token_data = NULL;
- }
-
- php_stream_close(md.stream);
-}
-
-/* }}} */
-
-/* {{{ proto string file_get_contents(string filename [, bool use_include_path [, resource context]])
- Read the entire file into a string */
-PHP_FUNCTION(file_get_contents)
-{
- char *filename;
- int filename_len;
- char *contents;
- zend_bool use_include_path = 0;
- php_stream *stream;
- int len, newlen;
- zval *zcontext = NULL;
- php_stream_context *context = NULL;
-
- /* Parse arguments */
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|br!",
- &filename, &filename_len, &use_include_path, &zcontext) == FAILURE) {
- return;
- }
-
- context = php_stream_context_from_zval(zcontext, 0);
-
- stream = php_stream_open_wrapper_ex(filename, "rb",
- (use_include_path ? USE_PATH : 0) | ENFORCE_SAFE_MODE | REPORT_ERRORS,
- NULL, context);
- if (!stream) {
- RETURN_FALSE;
- }
-
- /* uses mmap if possible */
- if ((len = php_stream_copy_to_mem(stream, &contents, PHP_STREAM_COPY_ALL, 0)) > 0) {
-
- if (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;
- }
-
- php_stream_close(stream);
-
-}
-/* }}} */
-
-/* {{{ proto int file_put_contents(string file, mixed data [, int flags [, resource context]])
- Write/Create a file with contents data and return the number of bytes written */
-PHP_FUNCTION(file_put_contents)
-{
- php_stream *stream;
- char *filename;
- int filename_len;
- zval *data;
- int numbytes = 0;
- long flags = 0;
- zval *zcontext = NULL;
- php_stream_context *context = NULL;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "sz/|lr!", &filename, &filename_len,
- &data, &flags, &zcontext) == FAILURE) {
- return;
- }
-
- context = php_stream_context_from_zval(zcontext, flags & PHP_FILE_NO_DEFAULT_CONTEXT);
-
- stream = php_stream_open_wrapper_ex(filename, (flags & PHP_FILE_APPEND) ? "ab" : "wb",
- ((flags & PHP_FILE_USE_INCLUDE_PATH) ? USE_PATH : 0) | ENFORCE_SAFE_MODE | REPORT_ERRORS, NULL, context);
- if (stream == NULL) {
- RETURN_FALSE;
- }
- switch (Z_TYPE_P(data)) {
- case IS_NULL:
- case IS_LONG:
- case IS_DOUBLE:
- case IS_BOOL:
- case IS_CONSTANT:
- convert_to_string_ex(&data);
-
- case IS_STRING:
- if (Z_STRLEN_P(data)) {
- numbytes = php_stream_write(stream, Z_STRVAL_P(data), Z_STRLEN_P(data));
- if (numbytes != Z_STRLEN_P(data)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Only %d of %d bytes written, possibly out of free disk space", numbytes, Z_STRLEN_P(data));
- numbytes = -1;
- }
- }
- break;
-
- case IS_ARRAY:
- if (zend_hash_num_elements(Z_ARRVAL_P(data))) {
- int bytes_written;
- zval **tmp;
- HashPosition pos;
-
- zend_hash_internal_pointer_reset_ex(Z_ARRVAL_P(data), &pos);
- while (zend_hash_get_current_data_ex(Z_ARRVAL_P(data), (void **) &tmp, &pos) == SUCCESS) {
- if ((*tmp)->type != IS_STRING) {
- SEPARATE_ZVAL(tmp);
- convert_to_string(*tmp);
- }
- if (Z_STRLEN_PP(tmp)) {
- numbytes += Z_STRLEN_PP(tmp);
- bytes_written = php_stream_write(stream, Z_STRVAL_PP(tmp), Z_STRLEN_PP(tmp));
- if (bytes_written < 0 || bytes_written != Z_STRLEN_PP(tmp)) {
- if (bytes_written < 0) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Failed to write %d bytes to %s", Z_STRLEN_PP(tmp), filename);
- } else {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Only %d of %d bytes written, possibly out of free disk space", bytes_written, Z_STRLEN_PP(tmp));
- }
- numbytes = -1;
- break;
- }
- }
- zend_hash_move_forward_ex(Z_ARRVAL_P(data), &pos);
- }
- }
- break;
-
- default:
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "The 2nd parameter should be either a string or an array");
- numbytes = -1;
- break;
-
- }
- php_stream_close(stream);
-
- if (numbytes < 0) {
- RETURN_FALSE;
- }
-
- RETURN_LONG(numbytes);
-}
-/* }}} */
-
-/* {{{ proto array file(string filename [, int flags[, resource context]])
- Read entire file into an array */
-
-#define PHP_FILE_BUF_SIZE 80
-
-PHP_FUNCTION(file)
-{
- char *filename;
- int filename_len;
- char *slashed, *target_buf=NULL, *p, *s, *e;
- register int i = 0;
- int target_len, len;
- char eol_marker = '\n';
- long flags = 0;
- zend_bool use_include_path;
- zend_bool include_new_line;
- zend_bool skip_blank_lines;
- php_stream *stream;
- zval *zcontext = NULL;
- php_stream_context *context = NULL;
-
- /* Parse arguments */
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|lr!", &filename, &filename_len, &flags, &zcontext) == FAILURE) {
- return;
- }
- if (flags < 0 || flags > (PHP_FILE_USE_INCLUDE_PATH | PHP_FILE_IGNORE_NEW_LINES | PHP_FILE_SKIP_EMPTY_LINES | PHP_FILE_NO_DEFAULT_CONTEXT)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "'%ld' flag is not supported", flags);
- RETURN_FALSE;
- }
-
- use_include_path = flags & PHP_FILE_USE_INCLUDE_PATH;
- include_new_line = !(flags & PHP_FILE_IGNORE_NEW_LINES);
- skip_blank_lines = flags & PHP_FILE_SKIP_EMPTY_LINES;
-
- context = php_stream_context_from_zval(zcontext, flags & PHP_FILE_NO_DEFAULT_CONTEXT);
-
- stream = php_stream_open_wrapper_ex(filename, "rb", (use_include_path ? USE_PATH : 0) | ENFORCE_SAFE_MODE | REPORT_ERRORS, NULL, context);
- if (!stream) {
- RETURN_FALSE;
- }
-
- /* Initialize return array */
- array_init(return_value);
-
- if ((target_len = php_stream_copy_to_mem(stream, &target_buf, PHP_STREAM_COPY_ALL, 0))) {
- s = target_buf;
- e = target_buf + target_len;
-
- if (!(p = php_stream_locate_eol(stream, target_buf, target_len TSRMLS_CC))) {
- p = e;
- goto parse_eol;
- }
-
- if (stream->flags & PHP_STREAM_FLAG_EOL_MAC) {
- eol_marker = '\r';
- }
-
- /* for performance reasons the code is duplicated, so that the if (include_new_line)
- * will not need to be done for every single line in the file.
- */
- if (include_new_line) {
- do {
- p++;
-parse_eol:
- if (PG(magic_quotes_runtime)) {
- /* s is in target_buf which is freed at the end of the function */
- slashed = php_addslashes(s, (p-s), &len, 0 TSRMLS_CC);
- add_index_stringl(return_value, i++, slashed, len, 0);
- } else {
- add_index_stringl(return_value, i++, estrndup(s, p-s), p-s, 0);
- }
- s = p;
- } while ((p = memchr(p, eol_marker, (e-p))));
- } else {
- do {
- if (skip_blank_lines && !(p-s)) {
- s = ++p;
- continue;
- }
- if (PG(magic_quotes_runtime)) {
- /* s is in target_buf which is freed at the end of the function */
- slashed = php_addslashes(s, (p-s), &len, 0 TSRMLS_CC);
- add_index_stringl(return_value, i++, slashed, len, 0);
- } else {
- add_index_stringl(return_value, i++, estrndup(s, p-s), p-s, 0);
- }
- s = ++p;
- } while ((p = memchr(p, eol_marker, (e-p))));
- }
-
- /* handle any left overs of files without new lines */
- if (s != e) {
- p = e;
- goto parse_eol;
- }
- }
-
- if (target_buf) {
- efree(target_buf);
- }
- php_stream_close(stream);
-}
-/* }}} */
-
-/* {{{ proto string tempnam(string dir, string prefix)
- Create a unique filename in a directory */
-PHP_FUNCTION(tempnam)
-{
- pval **arg1, **arg2;
- char *d;
- char *opened_path;
- char p[64];
- FILE *fp;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &arg1, &arg2) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex(arg1);
- convert_to_string_ex(arg2);
-
- if (php_check_open_basedir(Z_STRVAL_PP(arg1) TSRMLS_CC)) {
- RETURN_FALSE;
- }
-
- d = estrndup(Z_STRVAL_PP(arg1), Z_STRLEN_PP(arg1));
- strlcpy(p, Z_STRVAL_PP(arg2), sizeof(p));
-
- if ((fp = php_open_temporary_file(d, p, &opened_path TSRMLS_CC))) {
- fclose(fp);
- RETVAL_STRING(opened_path, 0);
- } else {
- RETVAL_FALSE;
- }
- efree(d);
-}
-/* }}} */
-
-/* {{{ proto resource tmpfile(void)
- Create a temporary file that will be deleted automatically after use */
-PHP_NAMED_FUNCTION(php_if_tmpfile)
-{
- php_stream *stream;
-
- if (ZEND_NUM_ARGS() != 0) {
- WRONG_PARAM_COUNT;
- }
-
- stream = php_stream_fopen_tmpfile();
-
- if (stream) {
- php_stream_to_zval(stream, return_value);
- } else {
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-/* {{{ proto resource fopen(string filename, string mode [, bool use_include_path [, resource context]])
- Open a file or a URL and return a file pointer */
-PHP_NAMED_FUNCTION(php_if_fopen)
-{
- char *filename, *mode;
- int filename_len, mode_len;
- zend_bool use_include_path = 0;
- zval *zcontext = NULL;
- php_stream *stream;
- php_stream_context *context = NULL;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ss|br", &filename, &filename_len,
- &mode, &mode_len, &use_include_path, &zcontext) == FAILURE) {
- RETURN_FALSE;
- }
-
- context = php_stream_context_from_zval(zcontext, 0);
-
- stream = php_stream_open_wrapper_ex(filename, mode, (use_include_path ? USE_PATH : 0) | ENFORCE_SAFE_MODE | REPORT_ERRORS, NULL, context);
-
- if (stream == NULL) {
- RETURN_FALSE;
- }
-
- php_stream_to_zval(stream, return_value);
-
- if (zcontext) {
- zend_list_addref(Z_RESVAL_P(zcontext));
- }
-}
-/* }}} */
-
-/* {{{ proto bool fclose(resource fp)
- Close an open file pointer */
-PHPAPI PHP_FUNCTION(fclose)
-{
- zval **arg1;
- php_stream *stream;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg1) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- PHP_STREAM_TO_ZVAL(stream, arg1);
- if (!stream->is_persistent) {
- zend_list_delete(stream->rsrc_id);
- } else {
- php_stream_pclose(stream);
- }
-
- RETURN_TRUE;
-}
-
-/* }}} */
-
-/* {{{ proto resource popen(string command, string mode)
- Execute a command and open either a read or a write pipe to it */
-
-PHP_FUNCTION(popen)
-{
- zval **arg1, **arg2;
- FILE *fp;
- char *p, *tmp = NULL;
- char *b, buf[1024];
- php_stream *stream;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &arg1, &arg2) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex(arg1);
- convert_to_string_ex(arg2);
- p = estrndup(Z_STRVAL_PP(arg2), Z_STRLEN_PP(arg2));
- if (PG(safe_mode)){
- b = strchr(Z_STRVAL_PP(arg1), ' ');
- if (!b) {
- b = strrchr(Z_STRVAL_PP(arg1), '/');
- } else {
- char *c;
- c = Z_STRVAL_PP(arg1);
- while((*b != '/') && (b != c)) {
- b--;
- }
- if (b == c) {
- b = NULL;
- }
- }
- if (b) {
- snprintf(buf, sizeof(buf), "%s%s", PG(safe_mode_exec_dir), b);
- } else {
- snprintf(buf, sizeof(buf), "%s/%s", PG(safe_mode_exec_dir), Z_STRVAL_PP(arg1));
- }
-
- tmp = php_escape_shell_cmd(buf);
- fp = VCWD_POPEN(tmp, p);
- efree(tmp);
-
- if (!fp) {
- php_error_docref2(NULL TSRMLS_CC, buf, p, E_WARNING, "%s", strerror(errno));
- efree(p);
- RETURN_FALSE;
- }
- } else {
- fp = VCWD_POPEN(Z_STRVAL_PP(arg1), p);
- if (!fp) {
- php_error_docref2(NULL TSRMLS_CC, Z_STRVAL_PP(arg1), p, E_WARNING, "%s", strerror(errno));
- efree(p);
- RETURN_FALSE;
- }
- }
- stream = php_stream_fopen_from_pipe(fp, p);
-
- if (stream == NULL) {
- php_error_docref2(NULL TSRMLS_CC, Z_STRVAL_PP(arg1), p, E_WARNING, "%s", strerror(errno));
- RETVAL_FALSE;
- } else {
- php_stream_to_zval(stream, return_value);
- }
-
- efree(p);
-}
-/* }}} */
-
-/* {{{ proto int pclose(resource fp)
- Close a file pointer opened by popen() */
-PHP_FUNCTION(pclose)
-{
- zval **arg1;
- php_stream *stream;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg1) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- PHP_STREAM_TO_ZVAL(stream, arg1);
-
- zend_list_delete(stream->rsrc_id);
- RETURN_LONG(FG(pclose_ret));
-}
-/* }}} */
-
-/* {{{ proto bool feof(resource fp)
- Test for end-of-file on a file pointer */
-PHPAPI PHP_FUNCTION(feof)
-{
- zval **arg1;
- php_stream *stream;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg1) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- PHP_STREAM_TO_ZVAL(stream, arg1);
-
- if (php_stream_eof(stream)) {
- RETURN_TRUE;
- } else {
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-/* {{{ proto string fgets(resource fp[, int length])
- Get a line from file pointer */
-PHPAPI PHP_FUNCTION(fgets)
-{
- zval **arg1, **arg2;
- int len = 1024;
- char *buf = NULL;
- int argc = ZEND_NUM_ARGS();
- size_t line_len = 0;
- php_stream *stream;
-
- if (argc<1 || argc>2 || zend_get_parameters_ex(argc, &arg1, &arg2) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- PHP_STREAM_TO_ZVAL(stream, arg1);
-
- if (argc == 1) {
- /* ask streams to give us a buffer of an appropriate size */
- buf = php_stream_get_line(stream, NULL, 0, &line_len);
- if (buf == NULL) {
- goto exit_failed;
- }
- } else if (argc > 1) {
- convert_to_long_ex(arg2);
- len = Z_LVAL_PP(arg2);
-
- if (len <= 0) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Length parameter must be greater than 0");
- RETURN_FALSE;
- }
-
- buf = ecalloc(len + 1, sizeof(char));
- if (php_stream_get_line(stream, buf, len, &line_len) == NULL) {
- goto exit_failed;
- }
- }
-
- if (PG(magic_quotes_runtime)) {
- Z_STRVAL_P(return_value) = php_addslashes(buf, line_len, &Z_STRLEN_P(return_value), 1 TSRMLS_CC);
- Z_TYPE_P(return_value) = IS_STRING;
- } else {
- ZVAL_STRINGL(return_value, buf, line_len, 0);
- /* resize buffer if it's much larger than the result.
- * Only needed if the user requested a buffer size. */
- if (argc > 1 && Z_STRLEN_P(return_value) < len / 2) {
- Z_STRVAL_P(return_value) = erealloc(buf, line_len + 1);
- }
- }
- return;
-
-exit_failed:
- RETVAL_FALSE;
- if (buf) {
- efree(buf);
- }
-}
-/* }}} */
-
-/* {{{ proto string fgetc(resource fp)
- Get a character from file pointer */
-PHPAPI PHP_FUNCTION(fgetc)
-{
- zval **arg1;
- char *buf;
- int result;
- php_stream *stream;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg1) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- PHP_STREAM_TO_ZVAL(stream, arg1);
-
- buf = safe_emalloc(2, sizeof(char), 0);
-
- result = php_stream_getc(stream);
-
- if (result == EOF) {
- efree(buf);
- RETVAL_FALSE;
- } else {
- buf[0] = result;
- buf[1] = '\0';
-
- RETURN_STRINGL(buf, 1, 0);
- }
-}
-/* }}} */
-
-/* {{{ proto string fgetss(resource fp [, int length, string allowable_tags])
- Get a line from file pointer and strip HTML tags */
-PHPAPI PHP_FUNCTION(fgetss)
-{
- zval **fd, **bytes = NULL, **allow=NULL;
- size_t len = 0;
- size_t actual_len, retval_len;
- char *buf = NULL, *retval;
- php_stream *stream;
- char *allowed_tags=NULL;
- int allowed_tags_len=0;
-
- switch(ZEND_NUM_ARGS()) {
- case 1:
- if (zend_get_parameters_ex(1, &fd) == FAILURE) {
- RETURN_FALSE;
- }
- break;
-
- case 2:
- if (zend_get_parameters_ex(2, &fd, &bytes) == FAILURE) {
- RETURN_FALSE;
- }
- break;
-
- case 3:
- if (zend_get_parameters_ex(3, &fd, &bytes, &allow) == FAILURE) {
- RETURN_FALSE;
- }
- convert_to_string_ex(allow);
- allowed_tags = Z_STRVAL_PP(allow);
- allowed_tags_len = Z_STRLEN_PP(allow);
- break;
-
- default:
- WRONG_PARAM_COUNT;
- /* NOTREACHED */
- break;
- }
-
- PHP_STREAM_TO_ZVAL(stream, fd);
-
- if (bytes != NULL) {
- convert_to_long_ex(bytes);
- if (Z_LVAL_PP(bytes) <= 0) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Length parameter must be greater than 0");
- RETURN_FALSE;
- }
-
- len = (size_t) Z_LVAL_PP(bytes);
- buf = safe_emalloc(sizeof(char), (len + 1), 0);
- /*needed because recv doesnt set null char at end*/
- memset(buf, 0, len + 1);
- }
-
- if ((retval = php_stream_get_line(stream, buf, len, &actual_len)) == NULL) {
- if (buf != NULL) {
- efree(buf);
- }
- RETURN_FALSE;
- }
-
- retval_len = php_strip_tags(retval, actual_len, &stream->fgetss_state, allowed_tags, allowed_tags_len);
-
- RETURN_STRINGL(retval, retval_len, 0);
-}
-/* }}} */
-
-/* {{{ proto mixed fscanf(resource stream, string format [, string ...])
- Implements a mostly ANSI compatible fscanf() */
-PHP_FUNCTION(fscanf)
-{
- int result;
- zval **file_handle, **format_string;
- size_t len;
- int type;
- char *buf;
- void *what;
-
- zval ***args;
- int argCount;
-
- argCount = ZEND_NUM_ARGS();
- if (argCount < 2) {
- WRONG_PARAM_COUNT;
- }
- args = (zval ***)safe_emalloc(argCount, sizeof(zval **), 0);
- if (zend_get_parameters_array_ex(argCount, args) == FAILURE) {
- efree( args );
- WRONG_PARAM_COUNT;
- }
-
- file_handle = args[0];
- format_string = args[1];
-
- what = zend_fetch_resource(file_handle TSRMLS_CC, -1, "File-Handle", &type, 2,
- php_file_le_stream(), php_file_le_pstream());
-
- /*
- * we can't do a ZEND_VERIFY_RESOURCE(what), otherwise we end up
- * with a leak if we have an invalid filehandle. This needs changing
- * if the code behind ZEND_VERIFY_RESOURCE changed. - cc
- */
- if (!what) {
- efree(args);
- RETURN_FALSE;
- }
-
-
- buf = php_stream_get_line((php_stream *) what, NULL, 0, &len);
- if (buf == NULL) {
- efree(args);
- RETURN_FALSE;
- }
-
- convert_to_string_ex(format_string);
- result = php_sscanf_internal(buf, Z_STRVAL_PP(format_string),
- argCount, args, 2, &return_value TSRMLS_CC);
-
- efree(args);
- efree(buf);
-
- if (SCAN_ERROR_WRONG_PARAM_COUNT == result) {
- WRONG_PARAM_COUNT;
- }
-
-}
-/* }}} */
-
-/* {{{ proto int fwrite(resource fp, string str [, int length])
- Binary-safe file write */
-PHPAPI PHP_FUNCTION(fwrite)
-{
- zval **arg1, **arg2, **arg3=NULL;
- int ret;
- int num_bytes;
- char *buffer = NULL;
- php_stream *stream;
-
- switch (ZEND_NUM_ARGS()) {
- case 2:
- if (zend_get_parameters_ex(2, &arg1, &arg2)==FAILURE) {
- RETURN_FALSE;
- }
- convert_to_string_ex(arg2);
- num_bytes = Z_STRLEN_PP(arg2);
- break;
-
- case 3:
- if (zend_get_parameters_ex(3, &arg1, &arg2, &arg3)==FAILURE) {
- RETURN_FALSE;
- }
- convert_to_string_ex(arg2);
- convert_to_long_ex(arg3);
- num_bytes = MIN(Z_LVAL_PP(arg3), Z_STRLEN_PP(arg2));
- break;
-
- default:
- WRONG_PARAM_COUNT;
- /* NOTREACHED */
- break;
- }
-
- PHP_STREAM_TO_ZVAL(stream, arg1);
-
- if (!arg3 && PG(magic_quotes_runtime)) {
- buffer = estrndup(Z_STRVAL_PP(arg2), Z_STRLEN_PP(arg2));
- php_stripslashes(buffer, &num_bytes TSRMLS_CC);
- }
-
- ret = php_stream_write(stream, buffer ? buffer : Z_STRVAL_PP(arg2), num_bytes);
- if (buffer) {
- efree(buffer);
- }
-
- RETURN_LONG(ret);
-}
-/* }}} */
-
-/* {{{ proto bool fflush(resource fp)
- Flushes output */
-PHPAPI PHP_FUNCTION(fflush)
-{
- zval **arg1;
- int ret;
- php_stream *stream;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg1) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- PHP_STREAM_TO_ZVAL(stream, arg1);
-
- ret = php_stream_flush(stream);
- if (ret) {
- RETURN_FALSE;
- }
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto bool rewind(resource fp)
- Rewind the position of a file pointer */
-PHPAPI PHP_FUNCTION(rewind)
-{
- zval **arg1;
- php_stream *stream;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg1) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- PHP_STREAM_TO_ZVAL(stream, arg1);
-
- if (-1 == php_stream_rewind(stream)) {
- RETURN_FALSE;
- }
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto int ftell(resource fp)
- Get file pointer's read/write position */
-PHPAPI PHP_FUNCTION(ftell)
-{
- zval **arg1;
- long ret;
- php_stream *stream;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg1) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- PHP_STREAM_TO_ZVAL(stream, arg1);
-
- ret = php_stream_tell(stream);
- if (ret == -1) {
- RETURN_FALSE;
- }
- RETURN_LONG(ret);
-}
-/* }}} */
-
-/* {{{ proto int fseek(resource fp, int offset [, int whence])
- Seek on a file pointer */
-PHPAPI PHP_FUNCTION(fseek)
-{
- zval **arg1, **arg2, **arg3;
- int argcount = ZEND_NUM_ARGS(), whence = SEEK_SET;
- php_stream *stream;
-
- if (argcount < 2 || argcount > 3 || zend_get_parameters_ex(argcount, &arg1, &arg2, &arg3) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- PHP_STREAM_TO_ZVAL(stream, arg1);
-
- convert_to_long_ex(arg2);
- if (argcount > 2) {
- convert_to_long_ex(arg3);
- whence = Z_LVAL_PP(arg3);
- }
-
- RETURN_LONG(php_stream_seek(stream, Z_LVAL_PP(arg2), whence));
-}
-
-/* }}} */
-
-/* {{{ proto int mkdir(char *dir int mode)
-*/
-
-PHPAPI int php_mkdir(char *dir, long mode TSRMLS_DC)
-{
- int ret;
-
- if (PG(safe_mode) && (!php_checkuid(dir, NULL, CHECKUID_CHECK_FILE_AND_DIR))) {
- return -1;
- }
-
- if (php_check_open_basedir(dir TSRMLS_CC)) {
- return -1;
- }
-
- if ((ret = VCWD_MKDIR(dir, (mode_t)mode)) < 0) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", strerror(errno));
- }
-
- return ret;
-}
-/* }}} */
-
-/* {{{ proto bool mkdir(string pathname [, int mode [, bool recursive [, resource context]]])
- Create a directory */
-PHP_FUNCTION(mkdir)
-{
- zval *zcontext = NULL;
- long mode = 0777;
- int dir_len;
- zend_bool recursive = 0;
- char *dir;
- php_stream_context *context;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|lbr", &dir, &dir_len, &mode, &recursive, &zcontext) == FAILURE) {
- RETURN_FALSE;
- }
-
- context = php_stream_context_from_zval(zcontext, 0);
-
- RETURN_BOOL(php_stream_mkdir(dir, mode, (recursive ? PHP_STREAM_MKDIR_RECURSIVE : 0) | REPORT_ERRORS, context));
-}
-/* }}} */
-
-/* {{{ proto bool rmdir(string dirname[, resource context])
- Remove a directory */
-PHP_FUNCTION(rmdir)
-{
- char *dir;
- zval *zcontext = NULL;
- php_stream_context *context;
- int dir_len;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|r", &dir, &dir_len, &zcontext) == FAILURE) {
- RETURN_FALSE;
- }
-
- context = php_stream_context_from_zval(zcontext, 0);
-
- RETURN_BOOL(php_stream_rmdir(dir, REPORT_ERRORS, context));
-}
-/* }}} */
-
-/* {{{ proto int readfile(string filename [, bool use_include_path[, resource context]])
- Output a file or a URL */
-PHP_FUNCTION(readfile)
-{
- char *filename;
- int size = 0;
- int filename_len;
- zend_bool use_include_path = 0;
- zval *zcontext = NULL;
- php_stream *stream;
- php_stream_context *context = NULL;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|br!", &filename, &filename_len, &use_include_path, &zcontext) == FAILURE) {
- RETURN_FALSE;
- }
-
- context = php_stream_context_from_zval(zcontext, 0);
-
- stream = php_stream_open_wrapper_ex(filename, "rb", (use_include_path ? USE_PATH : 0) | ENFORCE_SAFE_MODE | REPORT_ERRORS, NULL, context);
- if (stream) {
- size = php_stream_passthru(stream);
- php_stream_close(stream);
- RETURN_LONG(size);
- }
- RETURN_FALSE;
-}
-/* }}} */
-
-/* {{{ proto int umask([int mask])
- Return or change the umask */
-PHP_FUNCTION(umask)
-{
- pval **arg1;
- int oldumask;
- int arg_count = ZEND_NUM_ARGS();
-
- oldumask = umask(077);
-
- if (arg_count == 0) {
- umask(oldumask);
- } else {
- if (arg_count > 1 || zend_get_parameters_ex(1, &arg1) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long_ex(arg1);
- umask(Z_LVAL_PP(arg1));
- }
-
- /* XXX we should maybe reset the umask after each request! */
-
- RETURN_LONG(oldumask);
-}
-
-/* }}} */
-
-/* {{{ proto int fpassthru(resource fp)
- Output all remaining data from a file pointer */
-PHPAPI PHP_FUNCTION(fpassthru)
-{
- zval **arg1;
- int size;
- php_stream *stream;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg1) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- PHP_STREAM_TO_ZVAL(stream, arg1);
-
- size = php_stream_passthru(stream);
- RETURN_LONG(size);
-}
-/* }}} */
-
-/* {{{ proto bool rename(string old_name, string new_name[, resource context])
- Rename a file */
-PHP_FUNCTION(rename)
-{
- char *old_name, *new_name;
- int old_name_len, new_name_len;
- zval *zcontext = NULL;
- php_stream_wrapper *wrapper;
- php_stream_context *context;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ss|r", &old_name, &old_name_len, &new_name, &new_name_len, &zcontext) == FAILURE) {
- RETURN_FALSE;
- }
-
- wrapper = php_stream_locate_url_wrapper(old_name, NULL, 0 TSRMLS_CC);
-
- if (!wrapper || !wrapper->wops) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to locate stream wrapper");
- RETURN_FALSE;
- }
-
- if (!wrapper->wops->rename) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s wrapper does not support renaming", wrapper->wops->label ? wrapper->wops->label : "Source");
- RETURN_FALSE;
- }
-
- if (wrapper != php_stream_locate_url_wrapper(new_name, NULL, 0 TSRMLS_CC)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Cannot rename a file across wrapper types");
- RETURN_FALSE;
- }
-
- context = php_stream_context_from_zval(zcontext, 0);
-
- RETURN_BOOL(wrapper->wops->rename(wrapper, old_name, new_name, 0, context TSRMLS_CC));
-}
-/* }}} */
-
-/* {{{ proto bool unlink(string filename[, context context])
- Delete a file */
-PHP_FUNCTION(unlink)
-{
- char *filename;
- int filename_len;
- php_stream_wrapper *wrapper;
- zval *zcontext = NULL;
- php_stream_context *context = NULL;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|r", &filename, &filename_len, &zcontext) == FAILURE) {
- RETURN_FALSE;
- }
-
- context = php_stream_context_from_zval(zcontext, 0);
-
- wrapper = php_stream_locate_url_wrapper(filename, NULL, 0 TSRMLS_CC);
-
- if (!wrapper || !wrapper->wops) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to locate stream wrapper");
- RETURN_FALSE;
- }
-
- if (!wrapper->wops->unlink) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s does not allow unlinking", wrapper->wops->label ? wrapper->wops->label : "Wrapper");
- RETURN_FALSE;
- }
- RETURN_BOOL(wrapper->wops->unlink(wrapper, filename, ENFORCE_SAFE_MODE | REPORT_ERRORS, context TSRMLS_CC));
-}
-/* }}} */
-
-/* {{{ proto bool ftruncate(resource fp, int size)
- Truncate file to 'size' length */
-PHP_NAMED_FUNCTION(php_if_ftruncate)
-{
- zval **fp , **size;
- php_stream *stream;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &fp, &size) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- PHP_STREAM_TO_ZVAL(stream, fp);
-
- convert_to_long_ex(size);
-
- if (!php_stream_truncate_supported(stream)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Can't truncate this stream!");
- RETURN_FALSE;
- }
-
- RETURN_BOOL(0 == php_stream_truncate_set_size(stream, Z_LVAL_PP(size)));
-}
-/* }}} */
-
-/* {{{ proto int fstat(resource fp)
- Stat() on a filehandle */
-PHP_NAMED_FUNCTION(php_if_fstat)
-{
- zval **fp;
- zval *stat_dev, *stat_ino, *stat_mode, *stat_nlink, *stat_uid, *stat_gid, *stat_rdev,
- *stat_size, *stat_atime, *stat_mtime, *stat_ctime, *stat_blksize, *stat_blocks;
- php_stream *stream;
- php_stream_statbuf stat_ssb;
-
- char *stat_sb_names[13]={"dev", "ino", "mode", "nlink", "uid", "gid", "rdev",
- "size", "atime", "mtime", "ctime", "blksize", "blocks"};
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &fp) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- PHP_STREAM_TO_ZVAL(stream, fp);
-
- if (php_stream_stat(stream, &stat_ssb)) {
- RETURN_FALSE;
- }
-
- array_init(return_value);
-
- MAKE_LONG_ZVAL_INCREF(stat_dev, stat_ssb.sb.st_dev);
- MAKE_LONG_ZVAL_INCREF(stat_ino, stat_ssb.sb.st_ino);
- MAKE_LONG_ZVAL_INCREF(stat_mode, stat_ssb.sb.st_mode);
- MAKE_LONG_ZVAL_INCREF(stat_nlink, stat_ssb.sb.st_nlink);
- MAKE_LONG_ZVAL_INCREF(stat_uid, stat_ssb.sb.st_uid);
- MAKE_LONG_ZVAL_INCREF(stat_gid, stat_ssb.sb.st_gid);
-#ifdef HAVE_ST_RDEV
- MAKE_LONG_ZVAL_INCREF(stat_rdev, stat_ssb.sb.st_rdev);
-#else
- MAKE_LONG_ZVAL_INCREF(stat_rdev, -1);
-#endif
- MAKE_LONG_ZVAL_INCREF(stat_size, stat_ssb.sb.st_size);
-#if defined(NETWARE) && defined(CLIB_STAT_PATCH)
- MAKE_LONG_ZVAL_INCREF(stat_atime, stat_ssb.sb.st_atime.tv_sec);
- MAKE_LONG_ZVAL_INCREF(stat_mtime, stat_ssb.sb.st_mtime.tv_sec);
- MAKE_LONG_ZVAL_INCREF(stat_ctime, stat_ssb.sb.st_ctime.tv_sec);
-#else
- MAKE_LONG_ZVAL_INCREF(stat_atime, stat_ssb.sb.st_atime);
- MAKE_LONG_ZVAL_INCREF(stat_mtime, stat_ssb.sb.st_mtime);
- MAKE_LONG_ZVAL_INCREF(stat_ctime, stat_ssb.sb.st_ctime);
-#endif
-
-#ifdef HAVE_ST_BLKSIZE
- MAKE_LONG_ZVAL_INCREF(stat_blksize, stat_ssb.sb.st_blksize);
-#else
- MAKE_LONG_ZVAL_INCREF(stat_blksize,-1);
-#endif
-#ifdef HAVE_ST_BLOCKS
- MAKE_LONG_ZVAL_INCREF(stat_blocks, stat_ssb.sb.st_blocks);
-#else
- MAKE_LONG_ZVAL_INCREF(stat_blocks,-1);
-#endif
- /* Store numeric indexes in propper order */
- zend_hash_next_index_insert(HASH_OF(return_value), (void *)&stat_dev, sizeof(zval *), NULL);
- zend_hash_next_index_insert(HASH_OF(return_value), (void *)&stat_ino, sizeof(zval *), NULL);
- zend_hash_next_index_insert(HASH_OF(return_value), (void *)&stat_mode, sizeof(zval *), NULL);
- zend_hash_next_index_insert(HASH_OF(return_value), (void *)&stat_nlink, sizeof(zval *), NULL);
- zend_hash_next_index_insert(HASH_OF(return_value), (void *)&stat_uid, sizeof(zval *), NULL);
- zend_hash_next_index_insert(HASH_OF(return_value), (void *)&stat_gid, sizeof(zval *), NULL);
- zend_hash_next_index_insert(HASH_OF(return_value), (void *)&stat_rdev, sizeof(zval *), NULL);
- zend_hash_next_index_insert(HASH_OF(return_value), (void *)&stat_size, sizeof(zval *), NULL);
- zend_hash_next_index_insert(HASH_OF(return_value), (void *)&stat_atime, sizeof(zval *), NULL);
- zend_hash_next_index_insert(HASH_OF(return_value), (void *)&stat_mtime, sizeof(zval *), NULL);
- zend_hash_next_index_insert(HASH_OF(return_value), (void *)&stat_ctime, sizeof(zval *), NULL);
- zend_hash_next_index_insert(HASH_OF(return_value), (void *)&stat_blksize, sizeof(zval *), NULL);
- zend_hash_next_index_insert(HASH_OF(return_value), (void *)&stat_blocks, sizeof(zval *), NULL);
-
- /* Store string indexes referencing the same zval*/
- zend_hash_update(HASH_OF(return_value), stat_sb_names[0], strlen(stat_sb_names[0])+1, (void *)&stat_dev, sizeof(zval *), NULL);
- zend_hash_update(HASH_OF(return_value), stat_sb_names[1], strlen(stat_sb_names[1])+1, (void *)&stat_ino, sizeof(zval *), NULL);
- zend_hash_update(HASH_OF(return_value), stat_sb_names[2], strlen(stat_sb_names[2])+1, (void *)&stat_mode, sizeof(zval *), NULL);
- zend_hash_update(HASH_OF(return_value), stat_sb_names[3], strlen(stat_sb_names[3])+1, (void *)&stat_nlink, sizeof(zval *), NULL);
- zend_hash_update(HASH_OF(return_value), stat_sb_names[4], strlen(stat_sb_names[4])+1, (void *)&stat_uid, sizeof(zval *), NULL);
- zend_hash_update(HASH_OF(return_value), stat_sb_names[5], strlen(stat_sb_names[5])+1, (void *)&stat_gid, sizeof(zval *), NULL);
- zend_hash_update(HASH_OF(return_value), stat_sb_names[6], strlen(stat_sb_names[6])+1, (void *)&stat_rdev, sizeof(zval *), NULL);
- zend_hash_update(HASH_OF(return_value), stat_sb_names[7], strlen(stat_sb_names[7])+1, (void *)&stat_size, sizeof(zval *), NULL);
- zend_hash_update(HASH_OF(return_value), stat_sb_names[8], strlen(stat_sb_names[8])+1, (void *)&stat_atime, sizeof(zval *), NULL);
- zend_hash_update(HASH_OF(return_value), stat_sb_names[9], strlen(stat_sb_names[9])+1, (void *)&stat_mtime, sizeof(zval *), NULL);
- zend_hash_update(HASH_OF(return_value), stat_sb_names[10], strlen(stat_sb_names[10])+1, (void *)&stat_ctime, sizeof(zval *), NULL);
- zend_hash_update(HASH_OF(return_value), stat_sb_names[11], strlen(stat_sb_names[11])+1, (void *)&stat_blksize, sizeof(zval *), NULL);
- zend_hash_update(HASH_OF(return_value), stat_sb_names[12], strlen(stat_sb_names[12])+1, (void *)&stat_blocks, sizeof(zval *), NULL);
-}
-/* }}} */
-
-/* {{{ proto bool copy(string source_file, string destination_file)
- Copy a file */
-PHP_FUNCTION(copy)
-{
- zval **source, **target;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &source, &target) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_string_ex(source);
- convert_to_string_ex(target);
-
- if (PG(safe_mode) &&(!php_checkuid(Z_STRVAL_PP(source), NULL, CHECKUID_CHECK_FILE_AND_DIR))) {
- RETURN_FALSE;
- }
-
- if (php_check_open_basedir(Z_STRVAL_PP(source) TSRMLS_CC)) {
- RETURN_FALSE;
- }
-
- if (php_copy_file(Z_STRVAL_PP(source), Z_STRVAL_PP(target) TSRMLS_CC)==SUCCESS) {
- RETURN_TRUE;
- } else {
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-/* {{{ php_copy_file
- */
-PHPAPI int php_copy_file(char *src, char *dest TSRMLS_DC)
-{
- php_stream *srcstream = NULL, *deststream = NULL;
- int ret = FAILURE;
-
- srcstream = php_stream_open_wrapper(src, "rb", STREAM_DISABLE_OPEN_BASEDIR | REPORT_ERRORS, NULL);
-
- if (!srcstream) {
- return ret;
- }
-
- deststream = php_stream_open_wrapper(dest, "wb", ENFORCE_SAFE_MODE | REPORT_ERRORS, NULL);
-
- if (srcstream && deststream) {
- ret = php_stream_copy_to_stream(srcstream, deststream, PHP_STREAM_COPY_ALL) == 0 ? FAILURE : SUCCESS;
- }
- if (srcstream) {
- php_stream_close(srcstream);
- }
- if (deststream) {
- php_stream_close(deststream);
- }
- return ret;
-}
-/* }}} */
-
-/* {{{ proto string fread(resource fp, int length)
- Binary-safe file read */
-PHPAPI PHP_FUNCTION(fread)
-{
- zval **arg1, **arg2;
- int len;
- php_stream *stream;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &arg1, &arg2) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- PHP_STREAM_TO_ZVAL(stream, arg1);
-
- convert_to_long_ex(arg2);
- len = Z_LVAL_PP(arg2);
- if (len <= 0) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Length parameter must be greater than 0");
- RETURN_FALSE;
- }
-
- Z_STRVAL_P(return_value) = emalloc(len + 1);
- Z_STRLEN_P(return_value) = php_stream_read(stream, Z_STRVAL_P(return_value), len);
-
- /* needed because recv/read/gzread doesnt put a null at the end*/
- Z_STRVAL_P(return_value)[Z_STRLEN_P(return_value)] = 0;
-
- if (PG(magic_quotes_runtime)) {
- Z_STRVAL_P(return_value) = php_addslashes(Z_STRVAL_P(return_value),
- Z_STRLEN_P(return_value), &Z_STRLEN_P(return_value), 1 TSRMLS_CC);
- }
- Z_TYPE_P(return_value) = IS_STRING;
-}
-/* }}} */
-
-static const char *php_fgetcsv_lookup_trailing_spaces(const char *ptr, size_t len, const char delimiter TSRMLS_DC)
-{
- int inc_len;
- unsigned char last_chars[2] = { 0, 0 };
-
- while (len > 0) {
- inc_len = (*ptr == '\0' ? 1: php_mblen(ptr, len));
- switch (inc_len) {
- case -2:
- case -1:
- inc_len = 1;
- php_mblen(NULL, 0);
- break;
- case 0:
- goto quit_loop;
- case 1:
- default:
- last_chars[0] = last_chars[1];
- last_chars[1] = *ptr;
- break;
- }
- ptr += inc_len;
- len -= inc_len;
- }
-quit_loop:
- switch (last_chars[1]) {
- case '\n':
- if (last_chars[0] == '\r') {
- return ptr - 2;
- }
- /* break is omitted intentionally */
- case '\r':
- return ptr - 1;
- }
- return ptr;
-}
-
-/* {{{ proto array fgetcsv(resource fp [,int length [, string delimiter [, string enclosure]]])
- Get line from file pointer and parse for CSV fields */
-PHP_FUNCTION(fgetcsv)
-{
- char *temp, *tptr, *bptr, *line_end, *limit;
- char delimiter = ','; /* allow this to be set as parameter */
- char enclosure = '"'; /* allow this to be set as parameter */
- const char escape_char = '\\';
- /* first section exactly as php_fgetss */
-
- long len = 0;
- size_t buf_len, temp_len, line_end_len;
- char *buf;
- php_stream *stream;
- int inc_len;
-
- {
- zval *fd, **len_zv = NULL;
- char *delimiter_str = NULL;
- int delimiter_str_len = 0;
- char *enclosure_str = NULL;
- int enclosure_str_len = 0;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r|Zss",
- &fd, &len_zv, &delimiter_str, &delimiter_str_len,
- &enclosure_str, &enclosure_str_len) == FAILURE) {
- return;
- }
-
- if (delimiter_str != NULL) {
- /* Make sure that there is at least one character in string */
- if (delimiter_str_len < 1) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "delimiter must be a character");
- RETURN_FALSE;
- }
-
- /* use first character from string */
- delimiter = delimiter_str[0];
- }
-
- if (enclosure_str != NULL) {
- if (enclosure_str_len < 1) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "enclosure must be a character");
- RETURN_FALSE;
- }
- /* use first character from string */
- enclosure = enclosure_str[0];
- }
-
- if (len_zv != NULL && Z_TYPE_PP(len_zv) != IS_NULL) {
- convert_to_long_ex(len_zv);
- len = Z_LVAL_PP(len_zv);
- if (len < 0) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Length parameter may not be negative");
- RETURN_FALSE;
- }
- } else {
- len = -1;
- }
-
- PHP_STREAM_TO_ZVAL(stream, &fd);
- }
-
- if (len < 0) {
- if ((buf = php_stream_get_line(stream, NULL, 0, &buf_len)) == NULL) {
- RETURN_FALSE;
- }
- } else {
- buf = emalloc(len + 1);
- if (php_stream_get_line(stream, buf, len + 1, &buf_len) == NULL) {
- efree(buf);
- RETURN_FALSE;
- }
- }
- /* initialize internal state */
- php_mblen(NULL, 0);
-
- /* Now into new section that parses buf for delimiter/enclosure fields */
-
- /* Strip trailing space from buf, saving end of line in case required for enclosure field */
-
- bptr = buf;
- tptr = (char *)php_fgetcsv_lookup_trailing_spaces(buf, buf_len, delimiter TSRMLS_CC);
- line_end_len = buf_len - (size_t)(tptr - buf);
- line_end = limit = tptr;
-
- /* reserve workspace for building each individual field */
- temp_len = buf_len;
- temp = emalloc(temp_len + line_end_len + 1);
-
- /* Initialize return array */
- array_init(return_value);
-
- /* Main loop to read CSV fields */
- /* NB this routine will return a single null entry for a blank line */
-
- do {
- char *comp_end, *hunk_begin;
-
- tptr = temp;
-
- /* 1. Strip any leading space */
- for (;;) {
- inc_len = (bptr < limit ? (*bptr == '\0' ? 1: php_mblen(bptr, limit - bptr)): 0);
- switch (inc_len) {
- case -2:
- case -1:
- inc_len = 1;
- php_mblen(NULL, 0);
- break;
- case 0:
- goto quit_loop_1;
- case 1:
- if (!isspace((int)*(unsigned char *)bptr) || *bptr == delimiter) {
- goto quit_loop_1;
- }
- break;
- default:
- goto quit_loop_1;
- }
- bptr += inc_len;
- }
-
- quit_loop_1:
- /* 2. Read field, leaving bptr pointing at start of next field */
- if (inc_len != 0 && *bptr == enclosure) {
- int state = 0;
-
- bptr++; /* move on to first character in field */
- hunk_begin = bptr;
-
- /* 2A. handle enclosure delimited field */
- for (;;) {
- switch (inc_len) {
- case 0:
- switch (state) {
- case 2:
- memcpy(tptr, hunk_begin, bptr - hunk_begin - 1);
- tptr += (bptr - hunk_begin - 1);
- hunk_begin = bptr;
- goto quit_loop_2;
-
- case 1:
- memcpy(tptr, hunk_begin, bptr - hunk_begin);
- tptr += (bptr - hunk_begin);
- hunk_begin = bptr;
- /* break is omitted intentionally */
-
- case 0: {
- char *new_buf;
- size_t new_len;
- char *new_temp;
-
- memcpy(tptr, hunk_begin, bptr - hunk_begin);
- tptr += (bptr - hunk_begin);
- hunk_begin = bptr;
-
- /* add the embedded line end to the field */
- memcpy(tptr, line_end, line_end_len);
- tptr += line_end_len;
-
- if ((new_buf = php_stream_get_line(stream, NULL, 0, &new_len)) == NULL) {
- /* we've got an unterminated enclosure,
- * assign all the data from the start of
- * the enclosure to end of data to the
- * last element */
- if ((size_t)temp_len > (size_t)(limit - buf)) {
- goto quit_loop_2;
- }
- zval_dtor(return_value);
- RETVAL_FALSE;
- goto out;
- }
- temp_len += new_len;
- new_temp = erealloc(temp, temp_len);
- tptr = new_temp + (size_t)(tptr - temp);
- temp = new_temp;
-
- efree(buf);
- buf_len = new_len;
- bptr = buf = new_buf;
- hunk_begin = buf;
-
- line_end = limit = (char *)php_fgetcsv_lookup_trailing_spaces(buf, buf_len, delimiter TSRMLS_CC);
- line_end_len = buf_len - (size_t)(limit - buf);
-
- state = 0;
- } break;
- }
- break;
-
- case -2:
- case -1:
- php_mblen(NULL, 0);
- /* break is omitted intentionally */
- case 1:
- /* we need to determine if the enclosure is
- * 'real' or is it escaped */
- switch (state) {
- case 1: /* escaped */
- bptr++;
- state = 0;
- break;
- case 2: /* embedded enclosure ? let's check it */
- if (*bptr != enclosure) {
- /* real enclosure */
- memcpy(tptr, hunk_begin, bptr - hunk_begin - 1);
- tptr += (bptr - hunk_begin - 1);
- hunk_begin = bptr;
- goto quit_loop_2;
- }
- memcpy(tptr, hunk_begin, bptr - hunk_begin);
- tptr += (bptr - hunk_begin);
- bptr++;
- hunk_begin = bptr;
- state = 0;
- break;
- default:
- if (*bptr == escape_char) {
- state = 1;
- } else if (*bptr == enclosure) {
- state = 2;
- }
- bptr++;
- break;
- }
- break;
-
- default:
- switch (state) {
- case 2:
- /* real enclosure */
- memcpy(tptr, hunk_begin, bptr - hunk_begin - 1);
- tptr += (bptr - hunk_begin - 1);
- hunk_begin = bptr;
- goto quit_loop_2;
- case 1:
- bptr += inc_len;
- memcpy(tptr, hunk_begin, bptr - hunk_begin);
- tptr += (bptr - hunk_begin);
- hunk_begin = bptr;
- break;
- default:
- bptr += inc_len;
- break;
- }
- break;
- }
- inc_len = (bptr < limit ? (*bptr == '\0' ? 1: php_mblen(bptr, limit - bptr)): 0);
- }
-
- quit_loop_2:
- /* look up for a delimiter */
- for (;;) {
- switch (inc_len) {
- case 0:
- goto quit_loop_3;
-
- case -2:
- case -1:
- inc_len = 1;
- php_mblen(NULL, 0);
- /* break is omitted intentionally */
- case 1:
- if (*bptr == delimiter) {
- goto quit_loop_3;
- }
- break;
- default:
- break;
- }
- bptr += inc_len;
- inc_len = (bptr < limit ? (*bptr == '\0' ? 1: php_mblen(bptr, limit - bptr)): 0);
- }
-
- quit_loop_3:
- memcpy(tptr, hunk_begin, bptr - hunk_begin);
- tptr += (bptr - hunk_begin);
- bptr += inc_len;
- comp_end = tptr;
- } else {
- /* 2B. Handle non-enclosure field */
-
- hunk_begin = bptr;
-
- for (;;) {
- switch (inc_len) {
- case 0:
- goto quit_loop_4;
- case -2:
- case -1:
- inc_len = 1;
- php_mblen(NULL, 0);
- /* break is omitted intentionally */
- case 1:
- if (*bptr == delimiter) {
- goto quit_loop_4;
- }
- break;
- default:
- break;
- }
- bptr += inc_len;
- inc_len = (bptr < limit ? (*bptr == '\0' ? 1: php_mblen(bptr, limit - bptr)): 0);
- }
- quit_loop_4:
- memcpy(tptr, hunk_begin, bptr - hunk_begin);
- tptr += (bptr - hunk_begin);
-
- comp_end = (char *)php_fgetcsv_lookup_trailing_spaces(temp, tptr - temp, delimiter TSRMLS_CC);
- if (*bptr == delimiter) {
- bptr++;
- }
- }
-
- /* 3. Now pass our field back to php */
- *comp_end = '\0';
- add_next_index_stringl(return_value, temp, comp_end - temp, 1);
- } while (inc_len > 0);
-
-out:
- efree(temp);
- efree(buf);
-}
-/* }}} */
-
-#if (!defined(__BEOS__) && !defined(NETWARE) && HAVE_REALPATH) || defined(ZTS)
-/* {{{ proto string realpath(string path)
- Return the resolved path */
-PHP_FUNCTION(realpath)
-{
- zval **path;
- char resolved_path_buff[MAXPATHLEN];
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(ZEND_NUM_ARGS(), &path) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_string_ex(path);
-
- if (VCWD_REALPATH(Z_STRVAL_PP(path), resolved_path_buff)) {
-#ifdef ZTS
- if (VCWD_ACCESS(resolved_path_buff, F_OK)) {
- RETURN_FALSE;
- }
-#endif
- RETURN_STRING(resolved_path_buff, 1);
- } else {
- RETURN_FALSE;
- }
-}
-/* }}} */
-#endif
-
-/* See http://www.w3.org/TR/html4/intro/sgmltut.html#h-3.2.2 */
-#define PHP_META_HTML401_CHARS "-_.:"
-
-/* {{{ php_next_meta_token
- Tokenizes an HTML file for get_meta_tags */
-php_meta_tags_token php_next_meta_token(php_meta_tags_data *md TSRMLS_DC)
-{
- int ch = 0, compliment;
- char buff[META_DEF_BUFSIZE + 1];
-
- memset((void *)buff, 0, META_DEF_BUFSIZE + 1);
-
- while (md->ulc || (!php_stream_eof(md->stream) && (ch = php_stream_getc(md->stream)))) {
- if(php_stream_eof(md->stream)) {
- break;
- }
-
- if (md->ulc) {
- ch = md->lc;
- md->ulc = 0;
- }
-
- switch (ch) {
- case '<':
- return TOK_OPENTAG;
- break;
-
- case '>':
- return TOK_CLOSETAG;
- break;
-
- case '=':
- return TOK_EQUAL;
- break;
- case '/':
- return TOK_SLASH;
- break;
-
- case '\'':
- case '"':
- compliment = ch;
- md->token_len = 0;
- while (!php_stream_eof(md->stream) && (ch = php_stream_getc(md->stream)) && ch != compliment && ch != '<' && ch != '>') {
- buff[(md->token_len)++] = ch;
-
- if (md->token_len == META_DEF_BUFSIZE) {
- break;
- }
- }
-
- if (ch == '<' || ch == '>') {
- /* Was just an apostrohpe */
- md->ulc = 1;
- md->lc = ch;
- }
-
- /* We don't need to alloc unless we are in a meta tag */
- if (md->in_meta) {
- md->token_data = (char *) emalloc(md->token_len + 1);
- memcpy(md->token_data, buff, md->token_len+1);
- }
-
- return TOK_STRING;
- break;
-
- case '\n':
- case '\r':
- case '\t':
- break;
-
- case ' ':
- return TOK_SPACE;
- break;
-
- default:
- if (isalnum(ch)) {
- md->token_len = 0;
- buff[(md->token_len)++] = ch;
- while (!php_stream_eof(md->stream) && (ch = php_stream_getc(md->stream)) && (isalnum(ch) || strchr(PHP_META_HTML401_CHARS, ch))) {
- buff[(md->token_len)++] = ch;
-
- if (md->token_len == META_DEF_BUFSIZE) {
- break;
- }
- }
-
- /* This is ugly, but we have to replace ungetc */
- if (!isalpha(ch) && ch != '-') {
- md->ulc = 1;
- md->lc = ch;
- }
-
- md->token_data = (char *) emalloc(md->token_len + 1);
- memcpy(md->token_data, buff, md->token_len+1);
-
- return TOK_ID;
- } else {
- return TOK_OTHER;
- }
- break;
- }
- }
-
- return TOK_EOF;
-}
-
-/* }}} */
-
-#ifdef HAVE_FNMATCH
-/* {{{ proto bool fnmatch(string pattern, string filename [, int flags])
- Match filename against pattern */
-PHP_FUNCTION(fnmatch)
-{
- char *pattern = NULL;
- char *filename = NULL;
- int argc = ZEND_NUM_ARGS();
- int pattern_len;
- int filename_len;
- long flags=0;
-
- if (zend_parse_parameters(argc TSRMLS_CC, "ss|l",
- &pattern, &pattern_len,
- &filename, &filename_len,
- &flags)
- == FAILURE)
- return;
-
- RETURN_BOOL( ! fnmatch( pattern, filename, flags ));
-}
-/* }}} */
-#endif
-
-/*
- * 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/standard/file.h b/ext/standard/file.h
deleted file mode 100644
index dfcf79561c..0000000000
--- a/ext/standard/file.h
+++ /dev/null
@@ -1,130 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Rasmus Lerdorf <rasmus@lerdorf.on.ca> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-/* Synced with php 3.0 revision 1.30 1999-06-16 [ssb] */
-
-#ifndef FILE_H
-#define FILE_H
-
-PHP_MINIT_FUNCTION(file);
-PHP_MSHUTDOWN_FUNCTION(file);
-
-PHP_FUNCTION(tempnam);
-PHP_NAMED_FUNCTION(php_if_tmpfile);
-PHP_NAMED_FUNCTION(php_if_fopen);
-PHPAPI PHP_FUNCTION(fclose);
-PHP_FUNCTION(popen);
-PHP_FUNCTION(pclose);
-PHPAPI PHP_FUNCTION(feof);
-PHPAPI PHP_FUNCTION(fread);
-PHPAPI PHP_FUNCTION(fgetc);
-PHPAPI PHP_FUNCTION(fgets);
-PHP_FUNCTION(fscanf);
-PHPAPI PHP_FUNCTION(fgetss);
-PHP_FUNCTION(fgetcsv);
-PHPAPI PHP_FUNCTION(fwrite);
-PHPAPI PHP_FUNCTION(fflush);
-PHPAPI PHP_FUNCTION(rewind);
-PHPAPI PHP_FUNCTION(ftell);
-PHPAPI PHP_FUNCTION(fseek);
-PHP_FUNCTION(mkdir);
-PHP_FUNCTION(rmdir);
-PHPAPI PHP_FUNCTION(fpassthru);
-PHP_FUNCTION(readfile);
-PHP_FUNCTION(umask);
-PHP_FUNCTION(rename);
-PHP_FUNCTION(unlink);
-PHP_FUNCTION(copy);
-PHP_FUNCTION(file);
-PHP_FUNCTION(file_get_contents);
-PHP_FUNCTION(file_put_contents);
-PHP_FUNCTION(get_meta_tags);
-PHP_FUNCTION(flock);
-PHP_FUNCTION(fd_set);
-PHP_FUNCTION(fd_isset);
-#if (!defined(__BEOS__) && !defined(NETWARE) && HAVE_REALPATH) || defined(ZTS)
-PHP_FUNCTION(realpath);
-PHP_FUNCTION(fnmatch);
-#endif
-PHP_NAMED_FUNCTION(php_if_ftruncate);
-PHP_NAMED_FUNCTION(php_if_fstat);
-
-PHP_MINIT_FUNCTION(user_streams);
-
-PHPAPI int php_le_stream_context(void);
-PHPAPI int php_set_sock_blocking(int socketd, int block TSRMLS_DC);
-PHPAPI int php_copy_file(char *src, char *dest TSRMLS_DC);
-PHPAPI int php_mkdir(char *dir, long mode TSRMLS_DC);
-
-#define META_DEF_BUFSIZE 8192
-
-#define PHP_FILE_USE_INCLUDE_PATH 1
-#define PHP_FILE_IGNORE_NEW_LINES 2
-#define PHP_FILE_SKIP_EMPTY_LINES 4
-#define PHP_FILE_APPEND 8
-#define PHP_FILE_NO_DEFAULT_CONTEXT 16
-
-typedef enum _php_meta_tags_token {
- TOK_EOF = 0,
- TOK_OPENTAG,
- TOK_CLOSETAG,
- TOK_SLASH,
- TOK_EQUAL,
- TOK_SPACE,
- TOK_ID,
- TOK_STRING,
- TOK_OTHER
-} php_meta_tags_token;
-
-typedef struct _php_meta_tags_data {
- php_stream *stream;
- int ulc;
- int lc;
- char *input_buffer;
- char *token_data;
- int token_len;
- int in_meta;
-} php_meta_tags_data;
-
-php_meta_tags_token php_next_meta_token(php_meta_tags_data * TSRMLS_DC);
-
-typedef struct {
- int pclose_ret;
- size_t def_chunk_size;
- long auto_detect_line_endings;
- long default_socket_timeout;
- char *user_agent;
- char *user_stream_current_filename; /* for simple recursion protection */
- php_stream_context *default_context;
- HashTable *stream_wrappers; /* per-request copy of url_stream_wrappers_hash */
- HashTable *stream_filters; /* per-request copy of stream_filters_hash */
-} php_file_globals;
-
-#ifdef ZTS
-#define FG(v) TSRMG(file_globals_id, php_file_globals *, v)
-extern PHPAPI int file_globals_id;
-#else
-#define FG(v) (file_globals.v)
-extern PHPAPI php_file_globals file_globals;
-#endif
-
-
-#endif /* FILE_H */
-
diff --git a/ext/standard/filestat.c b/ext/standard/filestat.c
deleted file mode 100644
index 3e9f8b735e..0000000000
--- a/ext/standard/filestat.c
+++ /dev/null
@@ -1,877 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Jim Winstead <jimw@php.net> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-#include "php.h"
-#include "safe_mode.h"
-#include "fopen_wrappers.h"
-#include "php_globals.h"
-
-#include <stdlib.h>
-#include <sys/stat.h>
-#include <string.h>
-#include <errno.h>
-#include <ctype.h>
-#include <time.h>
-
-#if HAVE_UNISTD_H
-# include <unistd.h>
-#endif
-
-#if HAVE_SYS_PARAM_H
-# include <sys/param.h>
-#endif
-
-#if HAVE_SYS_VFS_H
-# include <sys/vfs.h>
-#endif
-
-#ifdef OS2
-# define INCL_DOS
-# include <os2.h>
-#endif
-
-#if defined(HAVE_SYS_STATVFS_H) && defined(HAVE_STATVFS)
-# include <sys/statvfs.h>
-#elif defined(HAVE_SYS_STATFS_H) && defined(HAVE_STATFS)
-# include <sys/statfs.h>
-#elif defined(HAVE_SYS_MOUNT_H) && defined(HAVE_STATFS)
-# include <sys/mount.h>
-#endif
-
-#if HAVE_PWD_H
-# ifdef PHP_WIN32
-# include "win32/pwd.h"
-# elif defined(NETWARE)
-# include "netware/pwd.h"
-# else
-# include <pwd.h>
-# endif
-#endif
-
-#if HAVE_GRP_H
-# ifdef PHP_WIN32
-# include "win32/grp.h"
-# else
-# include <grp.h>
-# endif
-#endif
-
-#if HAVE_UTIME
-# ifdef PHP_WIN32
-# include <sys/utime.h>
-# else
-# include <utime.h>
-# endif
-#endif
-
-#include "basic_functions.h"
-#include "php_filestat.h"
-
-#ifndef S_ISDIR
-#define S_ISDIR(mode) (((mode)&S_IFMT) == S_IFDIR)
-#endif
-#ifndef S_ISREG
-#define S_ISREG(mode) (((mode)&S_IFMT) == S_IFREG)
-#endif
-#ifndef S_ISLNK
-#define S_ISLNK(mode) (((mode)&S_IFMT) == S_IFLNK)
-#endif
-
-#define S_IXROOT ( S_IXUSR | S_IXGRP | S_IXOTH )
-
-PHP_RINIT_FUNCTION(filestat)
-{
- BG(CurrentStatFile)=NULL;
- BG(CurrentLStatFile)=NULL;
- return SUCCESS;
-}
-
-PHP_RSHUTDOWN_FUNCTION(filestat)
-{
- if (BG(CurrentStatFile)) {
- efree (BG(CurrentStatFile));
- BG(CurrentStatFile) = NULL;
- }
- if (BG(CurrentLStatFile)) {
- efree (BG(CurrentLStatFile));
- BG(CurrentLStatFile) = NULL;
- }
- return SUCCESS;
-}
-
-/* {{{ proto float disk_total_space(string path)
- Get total disk space for filesystem that path is on */
-PHP_FUNCTION(disk_total_space)
-{
- pval **path;
-#ifdef WINDOWS
- double bytestotal;
-
- HINSTANCE kernel32;
- FARPROC gdfse;
- typedef BOOL (WINAPI *gdfse_func)(LPCTSTR, PULARGE_INTEGER, PULARGE_INTEGER, PULARGE_INTEGER);
- gdfse_func func;
-
- /* These are used by GetDiskFreeSpaceEx, if available. */
- ULARGE_INTEGER FreeBytesAvailableToCaller;
- ULARGE_INTEGER TotalNumberOfBytes;
- ULARGE_INTEGER TotalNumberOfFreeBytes;
-
- /* These are used by GetDiskFreeSpace otherwise. */
- DWORD SectorsPerCluster;
- DWORD BytesPerSector;
- DWORD NumberOfFreeClusters;
- DWORD TotalNumberOfClusters;
-
-#else /* not - WINDOWS */
-#if defined(HAVE_SYS_STATVFS_H) && defined(HAVE_STATVFS)
- struct statvfs buf;
-#elif (defined(HAVE_SYS_STATFS_H) || defined(HAVE_SYS_MOUNT_H)) && defined(HAVE_STATFS)
- struct statfs buf;
-#endif
- double bytestotal = 0;
-#endif /* WINDOWS */
-
- if (ZEND_NUM_ARGS()!=1 || zend_get_parameters_ex(1, &path)==FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_string_ex(path);
-
- if (php_check_open_basedir(Z_STRVAL_PP(path) TSRMLS_CC)) {
- RETURN_FALSE;
- }
-
-#ifdef WINDOWS
- /* GetDiskFreeSpaceEx is only available in NT and Win95 post-OSR2,
- so we have to jump through some hoops to see if the function
- exists. */
- kernel32 = LoadLibrary("kernel32.dll");
- if (kernel32) {
- gdfse = GetProcAddress(kernel32, "GetDiskFreeSpaceExA");
- /* It's available, so we can call it. */
- if (gdfse) {
- func = (gdfse_func)gdfse;
- if (func(Z_STRVAL_PP(path),
- &FreeBytesAvailableToCaller,
- &TotalNumberOfBytes,
- &TotalNumberOfFreeBytes) == 0) RETURN_FALSE;
-
- /* i know - this is ugly, but i works <thies@thieso.net> */
- bytestotal = TotalNumberOfBytes.HighPart *
- (double) (((unsigned long)1) << 31) * 2.0 +
- TotalNumberOfBytes.LowPart;
- }
- /* If it's not available, we just use GetDiskFreeSpace */
- else {
- if (GetDiskFreeSpace(Z_STRVAL_PP(path),
- &SectorsPerCluster, &BytesPerSector,
- &NumberOfFreeClusters, &TotalNumberOfClusters) == 0) RETURN_FALSE;
- bytestotal = (double)TotalNumberOfClusters * (double)SectorsPerCluster * (double)BytesPerSector;
- }
- }
- else {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to load kernel32.dll");
- RETURN_FALSE;
- }
-
-#elif defined(OS2)
- {
- FSALLOCATE fsinfo;
- char drive = Z_STRVAL_PP(path)[0] & 95;
-
- if (DosQueryFSInfo( drive ? drive - 64 : 0, FSIL_ALLOC, &fsinfo, sizeof( fsinfo ) ) == 0)
- bytestotal = (double)fsinfo.cbSector * fsinfo.cSectorUnit * fsinfo.cUnit;
- }
-#else /* WINDOWS, OS/2 */
-#if defined(HAVE_SYS_STATVFS_H) && defined(HAVE_STATVFS)
- if (statvfs(Z_STRVAL_PP(path), &buf)) RETURN_FALSE;
- if (buf.f_frsize) {
- bytestotal = (((double)buf.f_blocks) * ((double)buf.f_frsize));
- } else {
- bytestotal = (((double)buf.f_blocks) * ((double)buf.f_bsize));
- }
-
-#elif (defined(HAVE_SYS_STATFS_H) || defined(HAVE_SYS_MOUNT_H)) && defined(HAVE_STATFS)
- if (statfs(Z_STRVAL_PP(path), &buf)) RETURN_FALSE;
- bytestotal = (((double)buf.f_bsize) * ((double)buf.f_blocks));
-#endif
-#endif /* WINDOWS */
-
- RETURN_DOUBLE(bytestotal);
-}
-/* }}} */
-
-/* {{{ proto float disk_free_space(string path)
- Get free disk space for filesystem that path is on */
-PHP_FUNCTION(disk_free_space)
-{
- pval **path;
-#ifdef WINDOWS
- double bytesfree;
-
- HINSTANCE kernel32;
- FARPROC gdfse;
- typedef BOOL (WINAPI *gdfse_func)(LPCTSTR, PULARGE_INTEGER, PULARGE_INTEGER, PULARGE_INTEGER);
- gdfse_func func;
-
- /* These are used by GetDiskFreeSpaceEx, if available. */
- ULARGE_INTEGER FreeBytesAvailableToCaller;
- ULARGE_INTEGER TotalNumberOfBytes;
- ULARGE_INTEGER TotalNumberOfFreeBytes;
-
- /* These are used by GetDiskFreeSpace otherwise. */
- DWORD SectorsPerCluster;
- DWORD BytesPerSector;
- DWORD NumberOfFreeClusters;
- DWORD TotalNumberOfClusters;
-
-#else /* not - WINDOWS */
-#if defined(HAVE_SYS_STATVFS_H) && defined(HAVE_STATVFS)
- struct statvfs buf;
-#elif (defined(HAVE_SYS_STATFS_H) || defined(HAVE_SYS_MOUNT_H)) && defined(HAVE_STATFS)
- struct statfs buf;
-#endif
- double bytesfree = 0;
-#endif /* WINDOWS */
-
- if (ZEND_NUM_ARGS()!=1 || zend_get_parameters_ex(1, &path)==FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_string_ex(path);
-
- if (php_check_open_basedir(Z_STRVAL_PP(path) TSRMLS_CC)) {
- RETURN_FALSE;
- }
-
-#ifdef WINDOWS
- /* GetDiskFreeSpaceEx is only available in NT and Win95 post-OSR2,
- so we have to jump through some hoops to see if the function
- exists. */
- kernel32 = LoadLibrary("kernel32.dll");
- if (kernel32) {
- gdfse = GetProcAddress(kernel32, "GetDiskFreeSpaceExA");
- /* It's available, so we can call it. */
- if (gdfse) {
- func = (gdfse_func)gdfse;
- if (func(Z_STRVAL_PP(path),
- &FreeBytesAvailableToCaller,
- &TotalNumberOfBytes,
- &TotalNumberOfFreeBytes) == 0) RETURN_FALSE;
-
- /* i know - this is ugly, but i works <thies@thieso.net> */
- bytesfree = FreeBytesAvailableToCaller.HighPart *
- (double) (((unsigned long)1) << 31) * 2.0 +
- FreeBytesAvailableToCaller.LowPart;
- }
- /* If it's not available, we just use GetDiskFreeSpace */
- else {
- if (GetDiskFreeSpace(Z_STRVAL_PP(path),
- &SectorsPerCluster, &BytesPerSector,
- &NumberOfFreeClusters, &TotalNumberOfClusters) == 0) RETURN_FALSE;
- bytesfree = (double)NumberOfFreeClusters * (double)SectorsPerCluster * (double)BytesPerSector;
- }
- }
- else {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to load kernel32.dll");
- RETURN_FALSE;
- }
-
-#elif defined(OS2)
- {
- FSALLOCATE fsinfo;
- char drive = Z_STRVAL_PP(path)[0] & 95;
-
- if (DosQueryFSInfo( drive ? drive - 64 : 0, FSIL_ALLOC, &fsinfo, sizeof( fsinfo ) ) == 0)
- bytesfree = (double)fsinfo.cbSector * fsinfo.cSectorUnit * fsinfo.cUnitAvail;
- }
-#else /* WINDOWS, OS/2 */
-#if defined(HAVE_SYS_STATVFS_H) && defined(HAVE_STATVFS)
- if (statvfs(Z_STRVAL_PP(path), &buf)) RETURN_FALSE;
- if (buf.f_frsize) {
- bytesfree = (((double)buf.f_bavail) * ((double)buf.f_frsize));
- } else {
- bytesfree = (((double)buf.f_bavail) * ((double)buf.f_bsize));
- }
-#elif (defined(HAVE_SYS_STATFS_H) || defined(HAVE_SYS_MOUNT_H)) && defined(HAVE_STATFS)
- if (statfs(Z_STRVAL_PP(path), &buf)) RETURN_FALSE;
- bytesfree = (((double)buf.f_bsize) * ((double)buf.f_bavail));
-#endif
-#endif /* WINDOWS */
-
- RETURN_DOUBLE(bytesfree);
-}
-/* }}} */
-
-/* {{{ proto bool chgrp(string filename, mixed group)
- Change file group */
-PHP_FUNCTION(chgrp)
-{
-#if !defined(WINDOWS) && !defined(NETWARE) /* I guess 'chgrp' won't be available on NetWare */
- pval **filename, **group;
- gid_t gid;
- struct group *gr=NULL;
- int ret;
-
- if (ZEND_NUM_ARGS()!=2 || zend_get_parameters_ex(2, &filename, &group)==FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex(filename);
- if (Z_TYPE_PP(group) == IS_STRING) {
- gr = getgrnam(Z_STRVAL_PP(group));
- if (!gr) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to find gid for %s",
- Z_STRVAL_PP(group));
- RETURN_FALSE;
- }
- gid = gr->gr_gid;
- } else {
- convert_to_long_ex(group);
- gid = Z_LVAL_PP(group);
- }
-
- if (PG(safe_mode) &&(!php_checkuid(Z_STRVAL_PP(filename), NULL, CHECKUID_ALLOW_FILE_NOT_EXISTS))) {
- RETURN_FALSE;
- }
-
- /* Check the basedir */
- if (php_check_open_basedir(Z_STRVAL_PP(filename) TSRMLS_CC)) {
- RETURN_FALSE;
- }
-
- ret = VCWD_CHOWN(Z_STRVAL_PP(filename), -1, gid);
- if (ret == -1) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", strerror(errno));
- RETURN_FALSE;
- }
- RETURN_TRUE;
-#else
- RETURN_FALSE;
-#endif
-}
-/* }}} */
-
-/* {{{ proto bool chown (string filename, mixed user)
- Change file owner */
-PHP_FUNCTION(chown)
-{
-#if !defined(WINDOWS) && !defined(NETWARE) /* I guess 'chown' won't be available on NetWare */
- pval **filename, **user;
- int ret;
- uid_t uid;
- struct passwd *pw = NULL;
-
- if (ZEND_NUM_ARGS()!=2 || zend_get_parameters_ex(2, &filename, &user)==FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex(filename);
- if (Z_TYPE_PP(user) == IS_STRING) {
- pw = getpwnam(Z_STRVAL_PP(user));
- if (!pw) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to find uid for %s",
- Z_STRVAL_PP(user));
- RETURN_FALSE;
- }
- uid = pw->pw_uid;
- } else {
- convert_to_long_ex(user);
- uid = Z_LVAL_PP(user);
- }
-
- if (PG(safe_mode) &&(!php_checkuid(Z_STRVAL_PP(filename), NULL, CHECKUID_ALLOW_FILE_NOT_EXISTS))) {
- RETURN_FALSE;
- }
-
- /* Check the basedir */
- if (php_check_open_basedir(Z_STRVAL_PP(filename) TSRMLS_CC)) {
- RETURN_FALSE;
- }
-
- ret = VCWD_CHOWN(Z_STRVAL_PP(filename), uid, -1);
- if (ret == -1) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", strerror(errno));
- RETURN_FALSE;
- }
-#endif
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto bool chmod(string filename, int mode)
- Change file mode */
-PHP_FUNCTION(chmod)
-{
- pval **filename, **mode;
- int ret;
- mode_t imode;
-
- if (ZEND_NUM_ARGS()!=2 || zend_get_parameters_ex(2, &filename, &mode)==FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex(filename);
- convert_to_long_ex(mode);
-
- if (PG(safe_mode) &&(!php_checkuid(Z_STRVAL_PP(filename), NULL, CHECKUID_ALLOW_FILE_NOT_EXISTS))) {
- RETURN_FALSE;
- }
-
- /* Check the basedir */
- if (php_check_open_basedir(Z_STRVAL_PP(filename) TSRMLS_CC)) {
- RETURN_FALSE;
- }
-
- imode = (mode_t) Z_LVAL_PP(mode);
- /* in safe mode, do not allow to setuid files.
- Setuiding files could allow users to gain privileges
- that safe mode doesn't give them.
- */
- if(PG(safe_mode))
- imode &= 0777;
-
- ret = VCWD_CHMOD(Z_STRVAL_PP(filename), imode);
- if (ret == -1) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", strerror(errno));
- RETURN_FALSE;
- }
- RETURN_TRUE;
-}
-/* }}} */
-
-#if HAVE_UTIME
-/* {{{ proto bool touch(string filename [, int time [, int atime]])
- Set modification time of file */
-PHP_FUNCTION(touch)
-{
- pval **filename, **filetime, **fileatime;
- int ret;
-#if defined(NETWARE) && defined(CLIB_STAT_PATCH)
- struct stat_libc sb;
-#else
- struct stat sb;
-#endif
- FILE *file;
- struct utimbuf newtimebuf;
- struct utimbuf *newtime = NULL;
- int ac = ZEND_NUM_ARGS();
-
-
- if (ac == 1 && zend_get_parameters_ex(1, &filename) != FAILURE) {
-#ifndef HAVE_UTIME_NULL
- newtime = &newtimebuf;
- newtime->modtime = newtime->actime = time(NULL);
-#endif
- } else if (ac == 2 && zend_get_parameters_ex(2, &filename, &filetime) != FAILURE) {
- convert_to_long_ex(filetime);
- newtime = &newtimebuf;
- newtime->modtime = newtime->actime = Z_LVAL_PP(filetime);
- } else if (ac == 3 && zend_get_parameters_ex(3, &filename, &filetime, &fileatime) != FAILURE) {
- convert_to_long_ex(fileatime);
- convert_to_long_ex(filetime);
- newtime = &newtimebuf;
- newtime->actime = Z_LVAL_PP(fileatime);
- newtime->modtime = Z_LVAL_PP(filetime);
- } else {
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex(filename);
-
- if (PG(safe_mode) &&(!php_checkuid(Z_STRVAL_PP(filename), NULL, CHECKUID_CHECK_FILE_AND_DIR))) {
- RETURN_FALSE;
- }
-
- /* Check the basedir */
- if (php_check_open_basedir(Z_STRVAL_PP(filename) TSRMLS_CC)) {
- RETURN_FALSE;
- }
-
- /* create the file if it doesn't exist already */
- ret = VCWD_STAT(Z_STRVAL_PP(filename), &sb);
- if (ret == -1) {
- file = VCWD_FOPEN(Z_STRVAL_PP(filename), "w");
- if (file == NULL) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to create file %s because %s", Z_STRVAL_PP(filename), strerror(errno));
- RETURN_FALSE;
- }
- fclose(file);
- }
-
- ret = VCWD_UTIME(Z_STRVAL_PP(filename), newtime);
- if (ret == -1) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Utime failed: %s", strerror(errno));
- RETURN_FALSE;
- }
- RETURN_TRUE;
-}
-/* }}} */
-#endif
-
-/* {{{ proto void clearstatcache(void)
- Clear file stat cache */
-PHP_FUNCTION(clearstatcache)
-{
- if (BG(CurrentStatFile)) {
- efree(BG(CurrentStatFile));
- BG(CurrentStatFile) = NULL;
- }
- if (BG(CurrentLStatFile)) {
- efree(BG(CurrentLStatFile));
- BG(CurrentLStatFile) = NULL;
- }
-}
-/* }}} */
-
-#define IS_LINK_OPERATION(__t) ((__t) == FS_TYPE || (__t) == FS_IS_LINK || (__t) == FS_LSTAT)
-#define IS_EXISTS_CHECK(__t) ((__t) == FS_EXISTS || (__t) == FS_IS_W || (__t) == FS_IS_R || (__t) == FS_IS_X || (__t) == FS_IS_FILE || (__t) == FS_IS_DIR || (__t) == FS_IS_LINK)
-#define IS_ABLE_CHECK(__t) ((__t) == FS_IS_R || (__t) == FS_IS_W || (__t) == FS_IS_X)
-
-/* {{{ php_stat
- */
-PHPAPI void php_stat(const char *filename, php_stat_len filename_length, int type, pval *return_value TSRMLS_DC)
-{
- zval *stat_dev, *stat_ino, *stat_mode, *stat_nlink, *stat_uid, *stat_gid, *stat_rdev,
- *stat_size, *stat_atime, *stat_mtime, *stat_ctime, *stat_blksize, *stat_blocks;
-#if defined(NETWARE) && defined(CLIB_STAT_PATCH)
- struct stat_libc *stat_sb;
-#else
- struct stat *stat_sb;
-#endif
- php_stream_statbuf ssb;
- int flags = 0, rmask=S_IROTH, wmask=S_IWOTH, xmask=S_IXOTH; /* access rights defaults to other */
- char *stat_sb_names[13]={"dev", "ino", "mode", "nlink", "uid", "gid", "rdev",
- "size", "atime", "mtime", "ctime", "blksize", "blocks"};
-
- if (!filename_length) {
- RETURN_FALSE;
- }
-
- if (IS_LINK_OPERATION(type)) {
- flags |= PHP_STREAM_URL_STAT_LINK;
- }
- if (IS_EXISTS_CHECK(type)) {
- flags |= PHP_STREAM_URL_STAT_QUIET;
- }
-
- if (php_stream_stat_path_ex((char *)filename, flags, &ssb, NULL)) {
- /* Error Occured */
- if (!IS_EXISTS_CHECK(type)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "%sstat failed for %s", IS_LINK_OPERATION(type) ? "L" : "", filename);
- }
- RETURN_FALSE;
- }
-
- stat_sb = &ssb.sb;
-
-
-#ifndef NETWARE
- if (type >= FS_IS_W && type <= FS_IS_X) {
- if(ssb.sb.st_uid==getuid()) {
- rmask=S_IRUSR;
- wmask=S_IWUSR;
- xmask=S_IXUSR;
- } else if(ssb.sb.st_gid==getgid()) {
- rmask=S_IRGRP;
- wmask=S_IWGRP;
- xmask=S_IXGRP;
- } else {
- int groups, n, i;
- gid_t *gids;
-
- groups = getgroups(0, NULL);
- if(groups) {
- gids=(gid_t *)safe_emalloc(groups, sizeof(gid_t), 0);
- n=getgroups(groups, gids);
- for(i=0;i<n;i++){
- if(ssb.sb.st_gid==gids[i]) {
- rmask=S_IRGRP;
- wmask=S_IWGRP;
- xmask=S_IXGRP;
- break;
- }
- }
- efree(gids);
- }
- }
- }
-#endif
-
-#ifndef NETWARE
- if (IS_ABLE_CHECK(type) && getuid() == 0) {
- /* root has special perms on plain_wrapper
- But we don't know about root under Netware */
- php_stream_wrapper *wrapper;
-
- wrapper = php_stream_locate_url_wrapper(filename, NULL, 0 TSRMLS_CC);
- if (wrapper && wrapper->wops && wrapper->wops->label && strcmp(wrapper->wops->label, "plainfile") == 0) {
- if (type == FS_IS_X) {
- xmask = S_IXROOT;
- } else {
- RETURN_TRUE;
- }
- }
- }
-#endif
-
- switch (type) {
- case FS_PERMS:
- RETURN_LONG((long)ssb.sb.st_mode);
- case FS_INODE:
- RETURN_LONG((long)ssb.sb.st_ino);
- case FS_SIZE:
-#if defined(NETWARE) && defined(NEW_LIBC)
- RETURN_LONG((long)(stat_sb->st_size));
-#else
- RETURN_LONG((long)ssb.sb.st_size);
-#endif
- case FS_OWNER:
- RETURN_LONG((long)ssb.sb.st_uid);
- case FS_GROUP:
- RETURN_LONG((long)ssb.sb.st_gid);
- case FS_ATIME:
-#if defined(NETWARE) && defined(NEW_LIBC)
- RETURN_LONG((long)((stat_sb->st_atime).tv_sec));
-#else
- RETURN_LONG((long)ssb.sb.st_atime);
-#endif
- case FS_MTIME:
-#if defined(NETWARE) && defined(NEW_LIBC)
- RETURN_LONG((long)((stat_sb->st_mtime).tv_sec));
-#else
- RETURN_LONG((long)ssb.sb.st_mtime);
-#endif
- case FS_CTIME:
-#if defined(NETWARE) && defined(NEW_LIBC)
- RETURN_LONG((long)((stat_sb->st_ctime).tv_sec));
-#else
- RETURN_LONG((long)ssb.sb.st_ctime);
-#endif
- case FS_TYPE:
- if (S_ISLNK(ssb.sb.st_mode)) {
- RETURN_STRING("link", 1);
- }
- switch(ssb.sb.st_mode & S_IFMT) {
- case S_IFIFO: RETURN_STRING("fifo", 1);
- case S_IFCHR: RETURN_STRING("char", 1);
- case S_IFDIR: RETURN_STRING("dir", 1);
- case S_IFBLK: RETURN_STRING("block", 1);
- case S_IFREG: RETURN_STRING("file", 1);
-#if defined(S_IFSOCK) && !defined(ZEND_WIN32)&&!defined(__BEOS__)
- case S_IFSOCK: RETURN_STRING("socket", 1);
-#endif
- }
- php_error_docref(NULL TSRMLS_CC, E_NOTICE, "Unknown file type (%d)", ssb.sb.st_mode&S_IFMT);
- RETURN_STRING("unknown", 1);
- case FS_IS_W:
- RETURN_BOOL((ssb.sb.st_mode & wmask) != 0);
- case FS_IS_R:
- RETURN_BOOL((ssb.sb.st_mode&rmask)!=0);
- case FS_IS_X:
- RETURN_BOOL((ssb.sb.st_mode&xmask)!=0 && !S_ISDIR(ssb.sb.st_mode));
- case FS_IS_FILE:
- RETURN_BOOL(S_ISREG(ssb.sb.st_mode));
- case FS_IS_DIR:
- RETURN_BOOL(S_ISDIR(ssb.sb.st_mode));
- case FS_IS_LINK:
- RETURN_BOOL(S_ISLNK(ssb.sb.st_mode));
- case FS_EXISTS:
- RETURN_TRUE; /* the false case was done earlier */
- case FS_LSTAT:
- /* FALLTHROUGH */
- case FS_STAT:
- array_init(return_value);
-
- MAKE_LONG_ZVAL_INCREF(stat_dev, stat_sb->st_dev);
- MAKE_LONG_ZVAL_INCREF(stat_ino, stat_sb->st_ino);
- MAKE_LONG_ZVAL_INCREF(stat_mode, stat_sb->st_mode);
- MAKE_LONG_ZVAL_INCREF(stat_nlink, stat_sb->st_nlink);
- MAKE_LONG_ZVAL_INCREF(stat_uid, stat_sb->st_uid);
- MAKE_LONG_ZVAL_INCREF(stat_gid, stat_sb->st_gid);
-#ifdef HAVE_ST_RDEV
- MAKE_LONG_ZVAL_INCREF(stat_rdev, stat_sb->st_rdev);
-#else
- MAKE_LONG_ZVAL_INCREF(stat_rdev, -1);
-#endif
- MAKE_LONG_ZVAL_INCREF(stat_size, stat_sb->st_size);
-#if defined(NETWARE) && defined(NEW_LIBC)
- MAKE_LONG_ZVAL_INCREF(stat_atime, (stat_sb->st_atime).tv_sec);
- MAKE_LONG_ZVAL_INCREF(stat_mtime, (stat_sb->st_mtime).tv_sec);
- MAKE_LONG_ZVAL_INCREF(stat_ctime, (stat_sb->st_ctime).tv_sec);
-#else
- MAKE_LONG_ZVAL_INCREF(stat_atime, stat_sb->st_atime);
- MAKE_LONG_ZVAL_INCREF(stat_mtime, stat_sb->st_mtime);
- MAKE_LONG_ZVAL_INCREF(stat_ctime, stat_sb->st_ctime);
-#endif
-#ifdef HAVE_ST_BLKSIZE
- MAKE_LONG_ZVAL_INCREF(stat_blksize, stat_sb->st_blksize);
-#else
- MAKE_LONG_ZVAL_INCREF(stat_blksize,-1);
-#endif
-#ifdef HAVE_ST_BLOCKS
- MAKE_LONG_ZVAL_INCREF(stat_blocks, stat_sb->st_blocks);
-#else
- MAKE_LONG_ZVAL_INCREF(stat_blocks,-1);
-#endif
- /* Store numeric indexes in propper order */
- zend_hash_next_index_insert(HASH_OF(return_value), (void *)&stat_dev, sizeof(zval *), NULL);
- zend_hash_next_index_insert(HASH_OF(return_value), (void *)&stat_ino, sizeof(zval *), NULL);
- zend_hash_next_index_insert(HASH_OF(return_value), (void *)&stat_mode, sizeof(zval *), NULL);
- zend_hash_next_index_insert(HASH_OF(return_value), (void *)&stat_nlink, sizeof(zval *), NULL);
- zend_hash_next_index_insert(HASH_OF(return_value), (void *)&stat_uid, sizeof(zval *), NULL);
- zend_hash_next_index_insert(HASH_OF(return_value), (void *)&stat_gid, sizeof(zval *), NULL);
-
- zend_hash_next_index_insert(HASH_OF(return_value), (void *)&stat_rdev, sizeof(zval *), NULL);
- zend_hash_next_index_insert(HASH_OF(return_value), (void *)&stat_size, sizeof(zval *), NULL);
- zend_hash_next_index_insert(HASH_OF(return_value), (void *)&stat_atime, sizeof(zval *), NULL);
- zend_hash_next_index_insert(HASH_OF(return_value), (void *)&stat_mtime, sizeof(zval *), NULL);
- zend_hash_next_index_insert(HASH_OF(return_value), (void *)&stat_ctime, sizeof(zval *), NULL);
- zend_hash_next_index_insert(HASH_OF(return_value), (void *)&stat_blksize, sizeof(zval *), NULL);
- zend_hash_next_index_insert(HASH_OF(return_value), (void *)&stat_blocks, sizeof(zval *), NULL);
-
- /* Store string indexes referencing the same zval*/
- zend_hash_update(HASH_OF(return_value), stat_sb_names[0], strlen(stat_sb_names[0])+1, (void *) &stat_dev, sizeof(zval *), NULL);
- zend_hash_update(HASH_OF(return_value), stat_sb_names[1], strlen(stat_sb_names[1])+1, (void *) &stat_ino, sizeof(zval *), NULL);
- zend_hash_update(HASH_OF(return_value), stat_sb_names[2], strlen(stat_sb_names[2])+1, (void *) &stat_mode, sizeof(zval *), NULL);
- zend_hash_update(HASH_OF(return_value), stat_sb_names[3], strlen(stat_sb_names[3])+1, (void *) &stat_nlink, sizeof(zval *), NULL);
- zend_hash_update(HASH_OF(return_value), stat_sb_names[4], strlen(stat_sb_names[4])+1, (void *) &stat_uid, sizeof(zval *), NULL);
- zend_hash_update(HASH_OF(return_value), stat_sb_names[5], strlen(stat_sb_names[5])+1, (void *) &stat_gid, sizeof(zval *), NULL);
- zend_hash_update(HASH_OF(return_value), stat_sb_names[6], strlen(stat_sb_names[6])+1, (void *) &stat_rdev, sizeof(zval *), NULL);
- zend_hash_update(HASH_OF(return_value), stat_sb_names[7], strlen(stat_sb_names[7])+1, (void *) &stat_size, sizeof(zval *), NULL);
- zend_hash_update(HASH_OF(return_value), stat_sb_names[8], strlen(stat_sb_names[8])+1, (void *) &stat_atime, sizeof(zval *), NULL);
- zend_hash_update(HASH_OF(return_value), stat_sb_names[9], strlen(stat_sb_names[9])+1, (void *) &stat_mtime, sizeof(zval *), NULL);
- zend_hash_update(HASH_OF(return_value), stat_sb_names[10], strlen(stat_sb_names[10])+1, (void *) &stat_ctime, sizeof(zval *), NULL);
- zend_hash_update(HASH_OF(return_value), stat_sb_names[11], strlen(stat_sb_names[11])+1, (void *) &stat_blksize, sizeof(zval *), NULL);
- zend_hash_update(HASH_OF(return_value), stat_sb_names[12], strlen(stat_sb_names[12])+1, (void *) &stat_blocks, sizeof(zval *), NULL);
-
- return;
- }
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Didn't understand stat call");
- RETURN_FALSE;
-}
-/* }}} */
-
-/* another quickie macro to make defining similar functions easier */
-#define FileFunction(name, funcnum) \
-void name(INTERNAL_FUNCTION_PARAMETERS) { \
- pval **filename; \
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &filename) == FAILURE) { \
- WRONG_PARAM_COUNT; \
- } \
- convert_to_string_ex(filename); \
- php_stat(Z_STRVAL_PP(filename), (php_stat_len) Z_STRLEN_PP(filename), funcnum, return_value TSRMLS_CC); \
-}
-
-/* {{{ proto int fileperms(string filename)
- Get file permissions */
-FileFunction(PHP_FN(fileperms), FS_PERMS)
-/* }}} */
-
-/* {{{ proto int fileinode(string filename)
- Get file inode */
-FileFunction(PHP_FN(fileinode), FS_INODE)
-/* }}} */
-
-/* {{{ proto int filesize(string filename)
- Get file size */
-FileFunction(PHP_FN(filesize), FS_SIZE)
-/* }}} */
-
-/* {{{ proto int fileowner(string filename)
- Get file owner */
-FileFunction(PHP_FN(fileowner), FS_OWNER)
-/* }}} */
-
-/* {{{ proto int filegroup(string filename)
- Get file group */
-FileFunction(PHP_FN(filegroup), FS_GROUP)
-/* }}} */
-
-/* {{{ proto int fileatime(string filename)
- Get last access time of file */
-FileFunction(PHP_FN(fileatime), FS_ATIME)
-/* }}} */
-
-/* {{{ proto int filemtime(string filename)
- Get last modification time of file */
-FileFunction(PHP_FN(filemtime), FS_MTIME)
-/* }}} */
-
-/* {{{ proto int filectime(string filename)
- Get inode modification time of file */
-FileFunction(PHP_FN(filectime), FS_CTIME)
-/* }}} */
-
-/* {{{ proto string filetype(string filename)
- Get file type */
-FileFunction(PHP_FN(filetype), FS_TYPE)
-/* }}} */
-
-/* {{{ proto bool is_writable(string filename)
- Returns true if file can be written */
-FileFunction(PHP_FN(is_writable), FS_IS_W)
-/* }}} */
-
-/* {{{ proto bool is_readable(string filename)
- Returns true if file can be read */
-FileFunction(PHP_FN(is_readable), FS_IS_R)
-/* }}} */
-
-/* {{{ proto bool is_executable(string filename)
- Returns true if file is executable */
-FileFunction(PHP_FN(is_executable), FS_IS_X)
-/* }}} */
-
-/* {{{ proto bool is_file(string filename)
- Returns true if file is a regular file */
-FileFunction(PHP_FN(is_file), FS_IS_FILE)
-/* }}} */
-
-/* {{{ proto bool is_dir(string filename)
- Returns true if file is directory */
-FileFunction(PHP_FN(is_dir), FS_IS_DIR)
-/* }}} */
-
-/* {{{ proto bool is_link(string filename)
- Returns true if file is symbolic link */
-FileFunction(PHP_FN(is_link), FS_IS_LINK)
-/* }}} */
-
-/* {{{ proto bool file_exists(string filename)
- Returns true if filename exists */
-FileFunction(PHP_FN(file_exists), FS_EXISTS)
-/* }}} */
-
-/* {{{ proto array lstat(string filename)
- Give information about a file or symbolic link */
-FileFunction(php_if_lstat, FS_LSTAT)
-/* }}} */
-
-/* {{{ proto array stat(string filename)
- Give information about a file */
-FileFunction(php_if_stat, FS_STAT)
-/* }}} */
-
-/*
- * 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/standard/filters.c b/ext/standard/filters.c
deleted file mode 100644
index 1b5064e19d..0000000000
--- a/ext/standard/filters.c
+++ /dev/null
@@ -1,1845 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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. |
- +----------------------------------------------------------------------+
- | Authors: |
- | Wez Furlong (wez@thebrainroom.com) |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#include "php.h"
-#include "php_globals.h"
-#include "ext/standard/basic_functions.h"
-#include "ext/standard/file.h"
-#include "ext/standard/php_string.h"
-#include "ext/standard/php_smart_str.h"
-
-/* {{{ rot13 stream filter implementation */
-static char rot13_from[] = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
-static char rot13_to[] = "nopqrstuvwxyzabcdefghijklmNOPQRSTUVWXYZABCDEFGHIJKLM";
-
-static php_stream_filter_status_t strfilter_rot13_filter(
- php_stream *stream,
- php_stream_filter *thisfilter,
- php_stream_bucket_brigade *buckets_in,
- php_stream_bucket_brigade *buckets_out,
- size_t *bytes_consumed,
- int flags
- TSRMLS_DC)
-{
- php_stream_bucket *bucket;
- size_t consumed = 0;
-
- while (buckets_in->head) {
- bucket = php_stream_bucket_make_writeable(buckets_in->head TSRMLS_CC);
-
- php_strtr(bucket->buf, bucket->buflen, rot13_from, rot13_to, 52);
- consumed += bucket->buflen;
-
- php_stream_bucket_append(buckets_out, bucket TSRMLS_CC);
- }
-
- if (bytes_consumed) {
- *bytes_consumed = consumed;
- }
-
- return PSFS_PASS_ON;
-}
-
-static php_stream_filter_ops strfilter_rot13_ops = {
- strfilter_rot13_filter,
- NULL,
- "string.rot13"
-};
-
-static php_stream_filter *strfilter_rot13_create(const char *filtername, zval *filterparams, int persistent TSRMLS_DC)
-{
- return php_stream_filter_alloc(&strfilter_rot13_ops, NULL, persistent);
-}
-
-static php_stream_filter_factory strfilter_rot13_factory = {
- strfilter_rot13_create
-};
-/* }}} */
-
-/* {{{ string.toupper / string.tolower stream filter implementation */
-static char lowercase[] = "abcdefghijklmnopqrstuvwxyz";
-static char uppercase[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
-
-static php_stream_filter_status_t strfilter_toupper_filter(
- php_stream *stream,
- php_stream_filter *thisfilter,
- php_stream_bucket_brigade *buckets_in,
- php_stream_bucket_brigade *buckets_out,
- size_t *bytes_consumed,
- int flags
- TSRMLS_DC)
-{
- php_stream_bucket *bucket;
- size_t consumed = 0;
-
- while (buckets_in->head) {
- bucket = php_stream_bucket_make_writeable(buckets_in->head TSRMLS_CC);
-
- php_strtr(bucket->buf, bucket->buflen, lowercase, uppercase, 26);
- consumed += bucket->buflen;
-
- php_stream_bucket_append(buckets_out, bucket TSRMLS_CC);
- }
-
- if (bytes_consumed) {
- *bytes_consumed = consumed;
- }
-
- return PSFS_PASS_ON;
-}
-
-static php_stream_filter_status_t strfilter_tolower_filter(
- php_stream *stream,
- php_stream_filter *thisfilter,
- php_stream_bucket_brigade *buckets_in,
- php_stream_bucket_brigade *buckets_out,
- size_t *bytes_consumed,
- int flags
- TSRMLS_DC)
-{
- php_stream_bucket *bucket;
- size_t consumed = 0;
-
- while (buckets_in->head) {
- bucket = php_stream_bucket_make_writeable(buckets_in->head TSRMLS_CC);
-
- php_strtr(bucket->buf, bucket->buflen, uppercase, lowercase, 26);
- consumed += bucket->buflen;
-
- php_stream_bucket_append(buckets_out, bucket TSRMLS_CC);
- }
-
- if (bytes_consumed) {
- *bytes_consumed = consumed;
- }
-
- return PSFS_PASS_ON;
-}
-
-static php_stream_filter_ops strfilter_toupper_ops = {
- strfilter_toupper_filter,
- NULL,
- "string.toupper"
-};
-
-static php_stream_filter_ops strfilter_tolower_ops = {
- strfilter_tolower_filter,
- NULL,
- "string.tolower"
-};
-
-static php_stream_filter *strfilter_toupper_create(const char *filtername, zval *filterparams, int persistent TSRMLS_DC)
-{
- return php_stream_filter_alloc(&strfilter_toupper_ops, NULL, persistent);
-}
-
-static php_stream_filter *strfilter_tolower_create(const char *filtername, zval *filterparams, int persistent TSRMLS_DC)
-{
- return php_stream_filter_alloc(&strfilter_tolower_ops, NULL, persistent);
-}
-
-static php_stream_filter_factory strfilter_toupper_factory = {
- strfilter_toupper_create
-};
-
-static php_stream_filter_factory strfilter_tolower_factory = {
- strfilter_tolower_create
-};
-/* }}} */
-
-/* {{{ strip_tags filter implementation */
-typedef struct _php_strip_tags_filter {
- const char *allowed_tags;
- int allowed_tags_len;
- int state;
- int persistent;
-} php_strip_tags_filter;
-
-static int php_strip_tags_filter_ctor(php_strip_tags_filter *inst, const char *allowed_tags, int allowed_tags_len, int persistent)
-{
- if (allowed_tags != NULL) {
- if (NULL == (inst->allowed_tags = pemalloc(allowed_tags_len, persistent))) {
- return FAILURE;
- }
- memcpy((char *)inst->allowed_tags, allowed_tags, allowed_tags_len);
- inst->allowed_tags_len = allowed_tags_len;
- } else {
- inst->allowed_tags = NULL;
- }
- inst->state = 0;
- inst->persistent = persistent;
-
- return SUCCESS;
-}
-
-static void php_strip_tags_filter_dtor(php_strip_tags_filter *inst)
-{
- if (inst->allowed_tags != NULL) {
- pefree((void *)inst->allowed_tags, inst->persistent);
- }
-}
-
-static php_stream_filter_status_t strfilter_strip_tags_filter(
- php_stream *stream,
- php_stream_filter *thisfilter,
- php_stream_bucket_brigade *buckets_in,
- php_stream_bucket_brigade *buckets_out,
- size_t *bytes_consumed,
- int flags
- TSRMLS_DC)
-{
- php_stream_bucket *bucket;
- size_t consumed = 0;
- php_strip_tags_filter *inst = (php_strip_tags_filter *) thisfilter->abstract;
-
- while (buckets_in->head) {
- bucket = php_stream_bucket_make_writeable(buckets_in->head TSRMLS_CC);
- consumed = bucket->buflen;
-
- bucket->buflen = php_strip_tags(bucket->buf, bucket->buflen, &(inst->state), (char *)inst->allowed_tags, inst->allowed_tags_len);
-
- php_stream_bucket_append(buckets_out, bucket TSRMLS_CC);
- }
-
- if (bytes_consumed) {
- *bytes_consumed = consumed;
- }
-
- return PSFS_PASS_ON;
-}
-
-static void strfilter_strip_tags_dtor(php_stream_filter *thisfilter TSRMLS_DC)
-{
- assert(thisfilter->abstract != NULL);
-
- php_strip_tags_filter_dtor((php_strip_tags_filter *)thisfilter->abstract);
-
- pefree(thisfilter->abstract, ((php_strip_tags_filter *)thisfilter->abstract)->persistent);
-}
-
-static php_stream_filter_ops strfilter_strip_tags_ops = {
- strfilter_strip_tags_filter,
- strfilter_strip_tags_dtor,
- "string.strip_tags"
-};
-
-static php_stream_filter *strfilter_strip_tags_create(const char *filtername, zval *filterparams, int persistent TSRMLS_DC)
-{
- php_strip_tags_filter *inst;
- smart_str tags_ss = { 0, 0, 0 };
-
- inst = pemalloc(sizeof(php_strip_tags_filter), persistent);
-
- if (inst == NULL) { /* it's possible pemalloc returns NULL
- instead of causing it to bail out */
- return NULL;
- }
-
- if (filterparams != NULL) {
- if (Z_TYPE_P(filterparams) == IS_ARRAY) {
- HashPosition pos;
- zval **tmp;
-
- zend_hash_internal_pointer_reset_ex(Z_ARRVAL_P(filterparams), &pos);
- while (zend_hash_get_current_data_ex(Z_ARRVAL_P(filterparams), (void **) &tmp, &pos) == SUCCESS) {
- convert_to_string_ex(tmp);
- smart_str_appendc(&tags_ss, '<');
- smart_str_appendl(&tags_ss, Z_STRVAL_PP(tmp), Z_STRLEN_PP(tmp));
- smart_str_appendc(&tags_ss, '>');
- zend_hash_move_forward_ex(Z_ARRVAL_P(filterparams), &pos);
- }
- smart_str_0(&tags_ss);
- } else {
- /* FIXME: convert_to_* may clutter zvals and lead it into segfault ? */
- convert_to_string_ex(&filterparams);
-
- tags_ss.c = Z_STRVAL_P(filterparams);
- tags_ss.len = Z_STRLEN_P(filterparams);
- tags_ss.a = 0;
- }
- }
-
- if (php_strip_tags_filter_ctor(inst, tags_ss.c, tags_ss.len, persistent) != SUCCESS) {
- if (tags_ss.a != 0) {
- STR_FREE(tags_ss.c);
- }
- pefree(inst, persistent);
- return NULL;
- }
-
- if (tags_ss.a != 0) {
- STR_FREE(tags_ss.c);
- }
-
- return php_stream_filter_alloc(&strfilter_strip_tags_ops, inst, persistent);
-}
-
-static php_stream_filter_factory strfilter_strip_tags_factory = {
- strfilter_strip_tags_create
-};
-
-/* }}} */
-
-/* {{{ base64 / quoted_printable stream filter implementation */
-
-typedef enum _php_conv_err_t {
- PHP_CONV_ERR_SUCCESS = SUCCESS,
- PHP_CONV_ERR_UNKNOWN,
- PHP_CONV_ERR_TOO_BIG,
- PHP_CONV_ERR_INVALID_SEQ,
- PHP_CONV_ERR_UNEXPECTED_EOS,
- PHP_CONV_ERR_EXISTS,
- PHP_CONV_ERR_MORE,
- PHP_CONV_ERR_ALLOC,
- PHP_CONV_ERR_NOT_FOUND
-} php_conv_err_t;
-
-typedef struct _php_conv php_conv;
-
-typedef php_conv_err_t (*php_conv_convert_func)(php_conv *, const char **, size_t *, char **, size_t *);
-typedef void (*php_conv_dtor_func)(php_conv *);
-
-struct _php_conv {
- php_conv_convert_func convert_op;
- php_conv_dtor_func dtor;
-};
-
-#define php_conv_convert(a, b, c, d, e) ((php_conv *)(a))->convert_op((php_conv *)(a), (b), (c), (d), (e))
-#define php_conv_dtor(a) ((php_conv *)a)->dtor((a))
-
-/* {{{ php_conv_base64_encode */
-typedef struct _php_conv_base64_encode {
- php_conv _super;
-
- unsigned char erem[3];
- size_t erem_len;
- unsigned int line_ccnt;
- unsigned int line_len;
- const char *lbchars;
- int lbchars_dup;
- size_t lbchars_len;
- int persistent;
-} php_conv_base64_encode;
-
-static php_conv_err_t php_conv_base64_encode_convert(php_conv_base64_encode *inst, const char **in_p, size_t *in_left, char **out_p, size_t *out_left);
-static void php_conv_base64_encode_dtor(php_conv_base64_encode *inst);
-
-static unsigned char b64_tbl_enc[256] = {
- 'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P',
- 'Q','R','S','T','U','V','W','X','Y','Z','a','b','c','d','e','f',
- 'g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v',
- 'w','x','y','z','0','1','2','3','4','5','6','7','8','9','+','/',
- 'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P',
- 'Q','R','S','T','U','V','W','X','Y','Z','a','b','c','d','e','f',
- 'g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v',
- 'w','x','y','z','0','1','2','3','4','5','6','7','8','9','+','/',
- 'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P',
- 'Q','R','S','T','U','V','W','X','Y','Z','a','b','c','d','e','f',
- 'g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v',
- 'w','x','y','z','0','1','2','3','4','5','6','7','8','9','+','/',
- 'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P',
- 'Q','R','S','T','U','V','W','X','Y','Z','a','b','c','d','e','f',
- 'g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v',
- 'w','x','y','z','0','1','2','3','4','5','6','7','8','9','+','/'
-};
-
-static php_conv_err_t php_conv_base64_encode_ctor(php_conv_base64_encode *inst, unsigned int line_len, const char *lbchars, size_t lbchars_len, int lbchars_dup, int persistent)
-{
- inst->_super.convert_op = (php_conv_convert_func) php_conv_base64_encode_convert;
- inst->_super.dtor = (php_conv_dtor_func) php_conv_base64_encode_dtor;
- inst->erem_len = 0;
- inst->line_ccnt = line_len;
- inst->line_len = line_len;
- if (lbchars != NULL) {
- inst->lbchars = (lbchars_dup ? pestrdup(lbchars, persistent) : lbchars);
- inst->lbchars_len = lbchars_len;
- } else {
- inst->lbchars = NULL;
- }
- inst->lbchars_dup = lbchars_dup;
- inst->persistent = persistent;
- return SUCCESS;
-}
-
-static void php_conv_base64_encode_dtor(php_conv_base64_encode *inst)
-{
- assert(inst != NULL);
- if (inst->lbchars_dup && inst->lbchars != NULL) {
- pefree((void *)inst->lbchars, inst->persistent);
- }
-}
-
-static php_conv_err_t php_conv_base64_encode_flush(php_conv_base64_encode *inst, const char **in_pp, size_t *in_left_p, char **out_pp, size_t *out_left_p)
-{
- volatile php_conv_err_t err = PHP_CONV_ERR_SUCCESS;
- register unsigned char *pd;
- register size_t ocnt;
- unsigned int line_ccnt;
-
- pd = (unsigned char *)(*out_pp);
- ocnt = *out_left_p;
- line_ccnt = inst->line_ccnt;
-
- switch (inst->erem_len) {
- case 0:
- /* do nothing */
- break;
-
- case 1:
- if (line_ccnt < 4 && inst->lbchars != NULL) {
- if (ocnt < inst->lbchars_len) {
- return PHP_CONV_ERR_TOO_BIG;
- }
- memcpy(pd, inst->lbchars, inst->lbchars_len);
- pd += inst->lbchars_len;
- ocnt -= inst->lbchars_len;
- line_ccnt = inst->line_len;
- }
- if (ocnt < 4) {
- err = PHP_CONV_ERR_TOO_BIG;
- goto out;
- }
- *(pd++) = b64_tbl_enc[(inst->erem[0] >> 2)];
- *(pd++) = b64_tbl_enc[(unsigned char)(inst->erem[0] << 4)];
- *(pd++) = '=';
- *(pd++) = '=';
- inst->erem_len = 0;
- ocnt -= 4;
- line_ccnt -= 4;
- break;
-
- case 2:
- if (line_ccnt < 4 && inst->lbchars != NULL) {
- if (ocnt < inst->lbchars_len) {
- return PHP_CONV_ERR_TOO_BIG;
- }
- memcpy(pd, inst->lbchars, inst->lbchars_len);
- pd += inst->lbchars_len;
- ocnt -= inst->lbchars_len;
- line_ccnt = inst->line_len;
- }
- if (ocnt < 4) {
- err = PHP_CONV_ERR_TOO_BIG;
- goto out;
- }
- *(pd++) = b64_tbl_enc[(inst->erem[0] >> 2)];
- *(pd++) = b64_tbl_enc[(unsigned char)(inst->erem[0] << 4) | (inst->erem[1] >> 4)];
- *(pd++) = b64_tbl_enc[(unsigned char)(inst->erem[1] << 2)];
- *(pd++) = '=';
- inst->erem_len = 0;
- ocnt -=4;
- line_ccnt -= 4;
- break;
-
- default:
- /* should not happen... */
- err = PHP_CONV_ERR_UNKNOWN;
- break;
- }
-out:
- *out_pp = (char *)pd;
- *out_left_p = ocnt;
- inst->line_ccnt = line_ccnt;
- return err;
-}
-
-static php_conv_err_t php_conv_base64_encode_convert(php_conv_base64_encode *inst, const char **in_pp, size_t *in_left_p, char **out_pp, size_t *out_left_p)
-{
- volatile php_conv_err_t err = PHP_CONV_ERR_SUCCESS;
- register size_t ocnt, icnt;
- register unsigned char *ps, *pd;
- register unsigned int line_ccnt;
- size_t nbytes_written;
-
- if (in_pp == NULL || in_left_p == NULL) {
- return php_conv_base64_encode_flush(inst, in_pp, in_left_p, out_pp, out_left_p);
- }
-
- pd = (unsigned char *)(*out_pp);
- ocnt = *out_left_p;
- ps = (unsigned char *)(*in_pp);
- icnt = *in_left_p;
- line_ccnt = inst->line_ccnt;
- nbytes_written = 0;
-
- /* consume the remainder first */
- switch (inst->erem_len) {
- case 1:
- if (icnt >= 2) {
- if (line_ccnt < 4 && inst->lbchars != NULL) {
- if (ocnt < inst->lbchars_len) {
- return PHP_CONV_ERR_TOO_BIG;
- }
- memcpy(pd, inst->lbchars, inst->lbchars_len);
- pd += inst->lbchars_len;
- ocnt -= inst->lbchars_len;
- line_ccnt = inst->line_len;
- }
- if (ocnt < 4) {
- err = PHP_CONV_ERR_TOO_BIG;
- goto out;
- }
- *(pd++) = b64_tbl_enc[(inst->erem[0] >> 2)];
- *(pd++) = b64_tbl_enc[(unsigned char)(inst->erem[0] << 4) | (ps[0] >> 4)];
- *(pd++) = b64_tbl_enc[(unsigned char)(ps[0] << 2) | (ps[1] >> 6)];
- *(pd++) = b64_tbl_enc[ps[1]];
- ocnt -= 4;
- ps += 2;
- icnt -= 2;
- inst->erem_len = 0;
- line_ccnt -= 4;
- }
- break;
-
- case 2:
- if (icnt >= 1) {
- if (inst->line_ccnt < 4 && inst->lbchars != NULL) {
- if (ocnt < inst->lbchars_len) {
- return PHP_CONV_ERR_TOO_BIG;
- }
- memcpy(pd, inst->lbchars, inst->lbchars_len);
- pd += inst->lbchars_len;
- ocnt -= inst->lbchars_len;
- line_ccnt = inst->line_len;
- }
- if (ocnt < 4) {
- err = PHP_CONV_ERR_TOO_BIG;
- goto out;
- }
- *(pd++) = b64_tbl_enc[(inst->erem[0] >> 2)];
- *(pd++) = b64_tbl_enc[(unsigned char)(inst->erem[0] << 4) | (inst->erem[1] >> 4)];
- *(pd++) = b64_tbl_enc[(unsigned char)(inst->erem[1] << 2) | (ps[0] >> 6)];
- *(pd++) = b64_tbl_enc[ps[0]];
- ocnt -= 4;
- ps += 1;
- icnt -= 1;
- inst->erem_len = 0;
- line_ccnt -= 4;
- }
- break;
- }
-
- while (icnt >= 3) {
- if (line_ccnt < 4 && inst->lbchars != NULL) {
- if (ocnt < inst->lbchars_len) {
- err = PHP_CONV_ERR_TOO_BIG;
- goto out;
- }
- memcpy(pd, inst->lbchars, inst->lbchars_len);
- pd += inst->lbchars_len;
- ocnt -= inst->lbchars_len;
- line_ccnt = inst->line_len;
- }
- if (ocnt < 4) {
- err = PHP_CONV_ERR_TOO_BIG;
- goto out;
- }
- *(pd++) = b64_tbl_enc[ps[0] >> 2];
- *(pd++) = b64_tbl_enc[(unsigned char)(ps[0] << 4) | (ps[1] >> 4)];
- *(pd++) = b64_tbl_enc[(unsigned char)(ps[1] << 2) | (ps[2] >> 6)];
- *(pd++) = b64_tbl_enc[ps[2]];
-
- ps += 3;
- icnt -=3;
- ocnt -= 4;
- line_ccnt -= 4;
- }
- for (;icnt > 0; icnt--) {
- inst->erem[inst->erem_len++] = *(ps++);
- }
-
-out:
- *in_pp = (const char *)ps;
- *in_left_p = icnt;
- *out_pp = (char *)pd;
- *out_left_p = ocnt;
- inst->line_ccnt = line_ccnt;
-
- return err;
-}
-
-/* }}} */
-
-/* {{{ php_conv_base64_decode */
-typedef struct _php_conv_base64_decode {
- php_conv _super;
-
- unsigned int urem;
- unsigned int urem_nbits;
- unsigned int ustat;
- int eos;
-} php_conv_base64_decode;
-
-static php_conv_err_t php_conv_base64_decode_convert(php_conv_base64_decode *inst, const char **in_p, size_t *in_left, char **out_p, size_t *out_left);
-static void php_conv_base64_decode_dtor(php_conv_base64_decode *inst);
-
-static unsigned int b64_tbl_dec[256] = {
- 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
- 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
- 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 62, 64, 64, 64, 63,
- 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 64, 64, 64,128, 64, 64,
- 64, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
- 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 64, 64, 64, 64, 64,
- 64, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40,
- 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 64, 64, 64, 64, 64,
- 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
- 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
- 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
- 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
- 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
- 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
- 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
- 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64
-};
-
-static int php_conv_base64_decode_ctor(php_conv_base64_decode *inst)
-{
- inst->_super.convert_op = (php_conv_convert_func) php_conv_base64_decode_convert;
- inst->_super.dtor = (php_conv_dtor_func) php_conv_base64_decode_dtor;
-
- inst->urem = 0;
- inst->urem_nbits = 0;
- inst->ustat = 0;
- inst->eos = 0;
- return SUCCESS;
-}
-
-static void php_conv_base64_decode_dtor(php_conv_base64_decode *inst)
-{
- /* do nothing */
-}
-
-#define bmask(a) (0xffff >> (16 - a))
-static php_conv_err_t php_conv_base64_decode_convert(php_conv_base64_decode *inst, const char **in_pp, size_t *in_left_p, char **out_pp, size_t *out_left_p)
-{
- php_conv_err_t err;
-
- unsigned int urem, urem_nbits;
- unsigned int pack, pack_bcnt;
- unsigned char *ps, *pd;
- size_t icnt, ocnt;
- unsigned int ustat;
-
- const static unsigned int nbitsof_pack = 8;
-
- if (in_pp == NULL || in_left_p == NULL) {
- if (inst->eos || inst->urem_nbits == 0) {
- return SUCCESS;
- }
- return PHP_CONV_ERR_UNEXPECTED_EOS;
- }
-
- err = PHP_CONV_ERR_SUCCESS;
-
- ps = (unsigned char *)*in_pp;
- pd = (unsigned char *)*out_pp;
- icnt = *in_left_p;
- ocnt = *out_left_p;
-
- urem = inst->urem;
- urem_nbits = inst->urem_nbits;
- ustat = inst->ustat;
-
- pack = 0;
- pack_bcnt = nbitsof_pack;
-
- for (;;) {
- if (pack_bcnt >= urem_nbits) {
- pack_bcnt -= urem_nbits;
- pack |= (urem << pack_bcnt);
- urem_nbits = 0;
- } else {
- urem_nbits -= pack_bcnt;
- pack |= (urem >> urem_nbits);
- urem &= bmask(urem_nbits);
- pack_bcnt = 0;
- }
- if (pack_bcnt > 0) {
- unsigned int i;
-
- if (icnt < 1) {
- break;
- }
-
- i = b64_tbl_dec[(unsigned int)*(ps++)];
- icnt--;
- ustat |= i & 0x80;
-
- if (!(i & 0xc0)) {
- if (ustat) {
- err = PHP_CONV_ERR_INVALID_SEQ;
- break;
- }
- if (6 <= pack_bcnt) {
- pack_bcnt -= 6;
- pack |= (i << pack_bcnt);
- urem = 0;
- } else {
- urem_nbits = 6 - pack_bcnt;
- pack |= (i >> urem_nbits);
- urem = i & bmask(urem_nbits);
- pack_bcnt = 0;
- }
- } else if (ustat) {
- if (pack_bcnt == 8 || pack_bcnt == 2) {
- err = PHP_CONV_ERR_INVALID_SEQ;
- break;
- }
- inst->eos = 1;
- }
- }
- if ((pack_bcnt | ustat) == 0) {
- if (ocnt < 1) {
- err = PHP_CONV_ERR_TOO_BIG;
- break;
- }
- *(pd++) = pack;
- ocnt--;
- pack = 0;
- pack_bcnt = nbitsof_pack;
- }
- }
-
- if (urem_nbits >= pack_bcnt) {
- urem |= (pack << (urem_nbits - pack_bcnt));
- urem_nbits += (nbitsof_pack - pack_bcnt);
- } else {
- urem |= (pack >> (pack_bcnt - urem_nbits));
- urem_nbits += (nbitsof_pack - pack_bcnt);
- }
-
- inst->urem = urem;
- inst->urem_nbits = urem_nbits;
- inst->ustat = ustat;
-
- *in_pp = (const char *)ps;
- *in_left_p = icnt;
- *out_pp = (char *)pd;
- *out_left_p = ocnt;
-
- return err;
-}
-#undef bmask
-/* }}} */
-
-/* {{{ php_conv_qprint_encode */
-typedef struct _php_conv_qprint_encode {
- php_conv _super;
-
- int opts;
- unsigned int line_ccnt;
- unsigned int line_len;
- const char *lbchars;
- int lbchars_dup;
- size_t lbchars_len;
- int persistent;
- unsigned int lb_ptr;
- unsigned int lb_cnt;
-} php_conv_qprint_encode;
-
-#define PHP_CONV_QPRINT_OPT_BINARY 0x00000001
-#define PHP_CONV_QPRINT_OPT_FORCE_ENCODE_FIRST 0x00000002
-
-static void php_conv_qprint_encode_dtor(php_conv_qprint_encode *inst);
-static php_conv_err_t php_conv_qprint_encode_convert(php_conv_qprint_encode *inst, const char **in_pp, size_t *in_left_p, char **out_pp, size_t *out_left_p);
-
-static void php_conv_qprint_encode_dtor(php_conv_qprint_encode *inst)
-{
- assert(inst != NULL);
- if (inst->lbchars_dup && inst->lbchars != NULL) {
- pefree((void *)inst->lbchars, inst->persistent);
- }
-}
-
-#define NEXT_CHAR(ps, icnt, lb_ptr, lb_cnt, lbchars) \
- ((lb_ptr) < (lb_cnt) ? (lbchars)[(lb_ptr)] : *(ps))
-
-#define CONSUME_CHAR(ps, icnt, lb_ptr, lb_cnt) \
- if ((lb_ptr) < (lb_cnt)) { \
- (lb_ptr)++; \
- } else { \
- (lb_cnt) = (lb_ptr) = 0; \
- --(icnt); \
- (ps)++; \
- }
-
-static php_conv_err_t php_conv_qprint_encode_convert(php_conv_qprint_encode *inst, const char **in_pp, size_t *in_left_p, char **out_pp, size_t *out_left_p)
-{
- php_conv_err_t err = PHP_CONV_ERR_SUCCESS;
- unsigned char *ps, *pd;
- size_t icnt, ocnt;
- unsigned int c;
- unsigned int line_ccnt;
- unsigned int lb_ptr;
- unsigned int lb_cnt;
- int opts;
- static char qp_digits[] = "0123456789ABCDEF";
-
- line_ccnt = inst->line_ccnt;
- opts = inst->opts;
- lb_ptr = inst->lb_ptr;
- lb_cnt = inst->lb_cnt;
-
- if ((in_pp == NULL || in_left_p == NULL) && (lb_ptr >=lb_cnt)) {
- return PHP_CONV_ERR_SUCCESS;
- }
-
- ps = (unsigned char *)(*in_pp);
- icnt = *in_left_p;
- pd = (unsigned char *)(*out_pp);
- ocnt = *out_left_p;
-
- for (;;) {
- if (!(opts & PHP_CONV_QPRINT_OPT_BINARY) && inst->lbchars != NULL && inst->lbchars_len > 0) {
- /* look ahead for the line break chars to make a right decision
- * how to consume incoming characters */
-
- if (icnt > 0 && *ps == inst->lbchars[lb_cnt]) {
- lb_cnt++;
-
- if (lb_cnt >= inst->lbchars_len) {
- unsigned int i;
-
- if (ocnt < lb_cnt) {
- lb_cnt--;
- err = PHP_CONV_ERR_TOO_BIG;
- break;
- }
-
- for (i = 0; i < lb_cnt; i++) {
- *(pd++) = inst->lbchars[i];
- ocnt--;
- }
- line_ccnt = inst->line_len;
- lb_ptr = lb_cnt = 0;
- }
- ps++, icnt--;
- continue;
- }
- }
-
- if (lb_ptr >= lb_cnt && icnt <= 0) {
- break;
- }
-
- c = NEXT_CHAR(ps, icnt, lb_ptr, lb_cnt, inst->lbchars);
-
- if (!(opts & PHP_CONV_QPRINT_OPT_BINARY) && (c == '\t' || c == ' ')) {
- if (line_ccnt < 2 && inst->lbchars != NULL) {
- if (ocnt < inst->lbchars_len + 1) {
- err = PHP_CONV_ERR_TOO_BIG;
- break;
- }
-
- *(pd++) = '=';
- ocnt--;
- line_ccnt--;
-
- memcpy(pd, inst->lbchars, inst->lbchars_len);
- pd += inst->lbchars_len;
- ocnt -= inst->lbchars_len;
- line_ccnt = inst->line_len;
- } else {
- if (ocnt < 1) {
- err = PHP_CONV_ERR_TOO_BIG;
- break;
- }
- *(pd++) = c;
- ocnt--;
- line_ccnt--;
- CONSUME_CHAR(ps, icnt, lb_ptr, lb_cnt);
- }
- } else if ((!(opts & PHP_CONV_QPRINT_OPT_FORCE_ENCODE_FIRST) || line_ccnt < inst->line_len) && ((c >= 33 && c <= 60) || (c >= 62 && c <= 126))) {
- if (line_ccnt < 2) {
- if (ocnt < inst->lbchars_len + 1) {
- err = PHP_CONV_ERR_TOO_BIG;
- break;
- }
- *(pd++) = '=';
- ocnt--;
- line_ccnt--;
-
- memcpy(pd, inst->lbchars, inst->lbchars_len);
- pd += inst->lbchars_len;
- ocnt -= inst->lbchars_len;
- line_ccnt = inst->line_len;
- }
- if (ocnt < 1) {
- err = PHP_CONV_ERR_TOO_BIG;
- break;
- }
- *(pd++) = c;
- ocnt--;
- line_ccnt--;
- CONSUME_CHAR(ps, icnt, lb_ptr, lb_cnt);
- } else {
- if (line_ccnt < 4) {
- if (ocnt < inst->lbchars_len + 1) {
- err = PHP_CONV_ERR_TOO_BIG;
- break;
- }
- *(pd++) = '=';
- ocnt--;
- line_ccnt--;
-
- memcpy(pd, inst->lbchars, inst->lbchars_len);
- pd += inst->lbchars_len;
- ocnt -= inst->lbchars_len;
- line_ccnt = inst->line_len;
- }
- if (ocnt < 3) {
- err = PHP_CONV_ERR_TOO_BIG;
- break;
- }
- *(pd++) = '=';
- *(pd++) = qp_digits[(c >> 4)];
- *(pd++) = qp_digits[(c & 0x0f)];
- ocnt -= 3;
- line_ccnt -= 3;
- CONSUME_CHAR(ps, icnt, lb_ptr, lb_cnt);
- }
- }
-
- *in_pp = (const char *)ps;
- *in_left_p = icnt;
- *out_pp = (char *)pd;
- *out_left_p = ocnt;
- inst->line_ccnt = line_ccnt;
- inst->lb_ptr = lb_ptr;
- inst->lb_cnt = lb_cnt;
- return err;
-}
-#undef NEXT_CHAR
-#undef CONSUME_CHAR
-
-static php_conv_err_t php_conv_qprint_encode_ctor(php_conv_qprint_encode *inst, unsigned int line_len, const char *lbchars, size_t lbchars_len, int lbchars_dup, int opts, int persistent)
-{
- if (line_len < 4 && lbchars != NULL) {
- return PHP_CONV_ERR_TOO_BIG;
- }
- inst->_super.convert_op = (php_conv_convert_func) php_conv_qprint_encode_convert;
- inst->_super.dtor = (php_conv_dtor_func) php_conv_qprint_encode_dtor;
- inst->line_ccnt = line_len;
- inst->line_len = line_len;
- if (lbchars != NULL) {
- inst->lbchars = (lbchars_dup ? pestrdup(lbchars, persistent) : lbchars);
- inst->lbchars_len = lbchars_len;
- } else {
- inst->lbchars = NULL;
- }
- inst->lbchars_dup = lbchars_dup;
- inst->persistent = persistent;
- inst->opts = opts;
- inst->lb_cnt = inst->lb_ptr = 0;
- return PHP_CONV_ERR_SUCCESS;
-}
-/* }}} */
-
-/* {{{ php_conv_qprint_decode */
-typedef struct _php_conv_qprint_decode {
- php_conv _super;
-
- int scan_stat;
- unsigned int next_char;
- const char *lbchars;
- int lbchars_dup;
- size_t lbchars_len;
- int persistent;
- unsigned int lb_ptr;
- unsigned int lb_cnt;
-} php_conv_qprint_decode;
-
-static void php_conv_qprint_decode_dtor(php_conv_qprint_decode *inst)
-{
- assert(inst != NULL);
- if (inst->lbchars_dup && inst->lbchars != NULL) {
- pefree((void *)inst->lbchars, inst->persistent);
- }
-}
-
-static php_conv_err_t php_conv_qprint_decode_convert(php_conv_qprint_decode *inst, const char **in_pp, size_t *in_left_p, char **out_pp, size_t *out_left_p)
-{
- php_conv_err_t err = PHP_CONV_ERR_SUCCESS;
- size_t icnt, ocnt;
- unsigned char *ps, *pd;
- unsigned int scan_stat;
- unsigned int next_char;
- unsigned int lb_ptr, lb_cnt;
-
- lb_ptr = inst->lb_ptr;
- lb_cnt = inst->lb_cnt;
-
- if ((in_pp == NULL || in_left_p == NULL) && lb_cnt == lb_ptr) {
- if (inst->scan_stat != 0) {
- return PHP_CONV_ERR_UNEXPECTED_EOS;
- }
- return PHP_CONV_ERR_SUCCESS;
- }
-
- ps = (unsigned char *)(*in_pp);
- icnt = *in_left_p;
- pd = (unsigned char *)(*out_pp);
- ocnt = *out_left_p;
- scan_stat = inst->scan_stat;
- next_char = inst->next_char;
-
- for (;;) {
- switch (scan_stat) {
- case 0: {
- if (icnt <= 0) {
- goto out;
- }
- if (*ps == '=') {
- scan_stat = 1;
- } else {
- if (ocnt < 1) {
- err = PHP_CONV_ERR_TOO_BIG;
- goto out;
- }
- *(pd++) = *ps;
- ocnt--;
- }
- ps++, icnt--;
- } break;
-
- case 1: {
- if (icnt <= 0) {
- goto out;
- }
- if (*ps == ' ' || *ps == '\t') {
- scan_stat = 4;
- ps++, icnt--;
- break;
- } else if (lb_cnt < inst->lbchars_len &&
- *ps == (unsigned char)inst->lbchars[lb_cnt]) {
- lb_cnt++;
- scan_stat = 5;
- ps++, icnt--;
- break;
- }
- } /* break is missing intentionally */
-
- case 2: {
- unsigned int nbl;
-
- if (icnt <= 0) {
- goto out;
- }
- nbl = (*ps >= 'A' ? *ps - 0x37 : *ps - 0x30);
-
- if (nbl > 15) {
- err = PHP_CONV_ERR_INVALID_SEQ;
- goto out;
- }
- next_char = (next_char << 4) | nbl;
-
- scan_stat++;
- ps++, icnt--;
- if (scan_stat != 3) {
- break;
- }
- } /* break is missing intentionally */
-
- case 3: {
- if (ocnt < 1) {
- err = PHP_CONV_ERR_TOO_BIG;
- goto out;
- }
- *(pd++) = next_char;
- ocnt--;
- scan_stat = 0;
- } break;
-
- case 4: {
- if (icnt <= 0) {
- goto out;
- }
- if (lb_cnt < inst->lbchars_len &&
- *ps == (unsigned char)inst->lbchars[lb_cnt]) {
- lb_cnt++;
- scan_stat = 5;
- }
- if (*ps != '\t' && *ps != ' ') {
- err = PHP_CONV_ERR_INVALID_SEQ;
- goto out;
- }
- ps++, icnt--;
- } break;
-
- case 5: {
- if (lb_cnt >= inst->lbchars_len) {
- /* soft line break */
- lb_cnt = lb_ptr = 0;
- scan_stat = 0;
- } else if (icnt > 0) {
- if (*ps == (unsigned char)inst->lbchars[lb_cnt]) {
- lb_cnt++;
- ps++, icnt--;
- } else {
- scan_stat = 6; /* no break for short-cut */
- }
- } else {
- goto out;
- }
- } break;
-
- case 6: {
- if (lb_ptr < lb_cnt) {
- if (ocnt < 1) {
- err = PHP_CONV_ERR_TOO_BIG;
- goto out;
- }
- *(pd++) = inst->lbchars[lb_ptr++];
- ocnt--;
- } else {
- scan_stat = 0;
- lb_cnt = lb_ptr = 0;
- }
- } break;
- }
- }
-out:
- *in_pp = (const char *)ps;
- *in_left_p = icnt;
- *out_pp = (char *)pd;
- *out_left_p = ocnt;
- inst->scan_stat = scan_stat;
- inst->lb_ptr = lb_ptr;
- inst->lb_cnt = lb_cnt;
- inst->next_char = next_char;
-
- return err;
-}
-static php_conv_err_t php_conv_qprint_decode_ctor(php_conv_qprint_decode *inst, const char *lbchars, size_t lbchars_len, int lbchars_dup, int persistent)
-{
- inst->_super.convert_op = (php_conv_convert_func) php_conv_qprint_decode_convert;
- inst->_super.dtor = (php_conv_dtor_func) php_conv_qprint_decode_dtor;
- inst->scan_stat = 0;
- inst->next_char = 0;
- inst->lb_ptr = inst->lb_cnt = 0;
- if (lbchars != NULL) {
- inst->lbchars = (lbchars_dup ? pestrdup(lbchars, persistent) : lbchars);
- inst->lbchars_len = lbchars_len;
- } else {
- inst->lbchars = NULL;
- inst->lbchars_len = 0;
- }
- inst->lbchars_dup = lbchars_dup;
- inst->persistent = persistent;
- return PHP_CONV_ERR_SUCCESS;
-}
-/* }}} */
-
-typedef struct _php_convert_filter {
- php_conv *cd;
- int persistent;
- char *filtername;
- char stub[128];
- size_t stub_len;
-} php_convert_filter;
-
-#define PHP_CONV_BASE64_ENCODE 1
-#define PHP_CONV_BASE64_DECODE 2
-#define PHP_CONV_QPRINT_ENCODE 3
-#define PHP_CONV_QPRINT_DECODE 4
-
-static php_conv_err_t php_conv_get_string_prop_ex(const HashTable *ht, char **pretval, size_t *pretval_len, char *field_name, size_t field_name_len, int persistent)
-{
- zval **tmpval;
-
- *pretval = NULL;
- *pretval_len = 0;
-
- if (zend_hash_find((HashTable *)ht, field_name, field_name_len, (void **)&tmpval) == SUCCESS) {
- if (Z_TYPE_PP(tmpval) != IS_STRING) {
- zval zt = **tmpval;
-
- convert_to_string(&zt);
-
- if (NULL == (*pretval = pemalloc(Z_STRLEN(zt) + 1, persistent))) {
- return PHP_CONV_ERR_ALLOC;
- }
-
- *pretval_len = Z_STRLEN(zt);
- memcpy(*pretval, Z_STRVAL(zt), Z_STRLEN(zt) + 1);
- zval_dtor(&zt);
- } else {
- if (NULL == (*pretval = pemalloc(Z_STRLEN_PP(tmpval) + 1, persistent))) {
- return PHP_CONV_ERR_ALLOC;
- }
- *pretval_len = Z_STRLEN_PP(tmpval);
- memcpy(*pretval, Z_STRVAL_PP(tmpval), Z_STRLEN_PP(tmpval) + 1);
- }
- } else {
- return PHP_CONV_ERR_NOT_FOUND;
- }
- return PHP_CONV_ERR_SUCCESS;
-}
-
-#if IT_WAS_USED
-static php_conv_err_t php_conv_get_long_prop_ex(const HashTable *ht, long *pretval, char *field_name, size_t field_name_len)
-{
- zval **tmpval;
-
- *pretval = 0;
-
- if (zend_hash_find((HashTable *)ht, field_name, field_name_len, (void **)&tmpval) == SUCCESS) {
- zval tmp, *ztval = *tmpval;
-
- if (Z_TYPE_PP(tmpval) != IS_LONG) {
- tmp = *ztval;
- zval_copy_ctor(&tmp);
- convert_to_long(&tmp);
- ztval = &tmp;
- }
- *pretval = Z_LVAL_P(ztval);
- } else {
- return PHP_CONV_ERR_NOT_FOUND;
- }
- return PHP_CONV_ERR_SUCCESS;
-}
-#endif
-
-static php_conv_err_t php_conv_get_ulong_prop_ex(const HashTable *ht, unsigned long *pretval, char *field_name, size_t field_name_len)
-{
- zval **tmpval;
-
- *pretval = 0;
-
- if (zend_hash_find((HashTable *)ht, field_name, field_name_len, (void **)&tmpval) == SUCCESS) {
- zval tmp, *ztval = *tmpval;
-
- if (Z_TYPE_PP(tmpval) != IS_LONG) {
- tmp = *ztval;
- zval_copy_ctor(&tmp);
- convert_to_long(&tmp);
- ztval = &tmp;
- }
- if (Z_LVAL_P(ztval) < 0) {
- *pretval = 0;
- } else {
- *pretval = Z_LVAL_P(ztval);
- }
- } else {
- return PHP_CONV_ERR_NOT_FOUND;
- }
- return PHP_CONV_ERR_SUCCESS;
-}
-
-static php_conv_err_t php_conv_get_bool_prop_ex(const HashTable *ht, int *pretval, char *field_name, size_t field_name_len)
-{
- zval **tmpval;
-
- *pretval = 0;
-
- if (zend_hash_find((HashTable *)ht, field_name, field_name_len, (void **)&tmpval) == SUCCESS) {
- zval tmp, *ztval = *tmpval;
-
- if (Z_TYPE_PP(tmpval) != IS_BOOL) {
- tmp = *ztval;
- zval_copy_ctor(&tmp);
- convert_to_boolean(&tmp);
- ztval = &tmp;
- }
- *pretval = Z_BVAL_P(ztval);
- } else {
- return PHP_CONV_ERR_NOT_FOUND;
- }
- return PHP_CONV_ERR_SUCCESS;
-}
-
-
-#if IT_WAS_USED
-static int php_conv_get_int_prop_ex(const HashTable *ht, int *pretval, char *field_name, size_t field_name_len)
-{
- long l;
- php_conv_err_t err;
-
- *pretval = 0;
-
- if ((err = php_conv_get_long_prop_ex(ht, &l, field_name, field_name_len)) == PHP_CONV_ERR_SUCCESS) {
- *pretval = l;
- }
- return err;
-}
-#endif
-
-static int php_conv_get_uint_prop_ex(const HashTable *ht, unsigned int *pretval, char *field_name, size_t field_name_len)
-{
- long l;
- php_conv_err_t err;
-
- *pretval = 0;
-
- if ((err = php_conv_get_ulong_prop_ex(ht, &l, field_name, field_name_len)) == PHP_CONV_ERR_SUCCESS) {
- *pretval = l;
- }
- return err;
-}
-
-#define GET_STR_PROP(ht, var, var_len, fldname, persistent) \
- php_conv_get_string_prop_ex(ht, &var, &var_len, fldname, sizeof(fldname), persistent)
-
-#define GET_INT_PROP(ht, var, fldname) \
- php_conv_get_int_prop_ex(ht, &var, fldname, sizeof(fldname))
-
-#define GET_UINT_PROP(ht, var, fldname) \
- php_conv_get_uint_prop_ex(ht, &var, fldname, sizeof(fldname))
-
-#define GET_BOOL_PROP(ht, var, fldname) \
- php_conv_get_bool_prop_ex(ht, &var, fldname, sizeof(fldname))
-
-static php_conv *php_conv_open(int conv_mode, const HashTable *options, int persistent)
-{
- /* FIXME: I'll have to replace this ugly code by something neat
- (factories?) in the near future. */
- php_conv *retval = NULL;
-
- switch (conv_mode) {
- case PHP_CONV_BASE64_ENCODE: {
- unsigned int line_len = 0;
- char *lbchars = NULL;
- size_t lbchars_len;
-
- if (options != NULL) {
- GET_STR_PROP(options, lbchars, lbchars_len, "line-break-chars", 0);
- GET_UINT_PROP(options, line_len, "line-length");
- if (line_len < 4) {
- if (lbchars != NULL) {
- pefree(lbchars, 0);
- }
- lbchars = NULL;
- } else {
- if (lbchars == NULL) {
- lbchars = pestrdup("\r\n", 0);
- lbchars_len = 2;
- }
- }
- }
- retval = pemalloc(sizeof(php_conv_base64_encode), persistent);
- if (lbchars != NULL) {
- if (php_conv_base64_encode_ctor((php_conv_base64_encode *)retval, line_len, lbchars, lbchars_len, 1, persistent)) {
- if (lbchars != NULL) {
- pefree(lbchars, 0);
- }
- goto out_failure;
- }
- pefree(lbchars, 0);
- } else {
- if (php_conv_base64_encode_ctor((php_conv_base64_encode *)retval, 0, NULL, 0, 0, persistent)) {
- goto out_failure;
- }
- }
- } break;
-
- case PHP_CONV_BASE64_DECODE:
- retval = pemalloc(sizeof(php_conv_base64_decode), persistent);
- if (php_conv_base64_decode_ctor((php_conv_base64_decode *)retval)) {
- goto out_failure;
- }
- break;
-
- case PHP_CONV_QPRINT_ENCODE: {
- unsigned int line_len = 0;
- char *lbchars = NULL;
- size_t lbchars_len;
- int opts = 0;
-
- if (options != NULL) {
- int opt_binary = 0;
- int opt_force_encode_first = 0;
-
- GET_STR_PROP(options, lbchars, lbchars_len, "line-break-chars", 0);
- GET_UINT_PROP(options, line_len, "line-length");
- GET_BOOL_PROP(options, opt_binary, "binary");
- GET_BOOL_PROP(options, opt_force_encode_first, "force-encode-first");
-
- if (line_len < 4) {
- if (lbchars != NULL) {
- pefree(lbchars, 0);
- }
- lbchars = NULL;
- } else {
- if (lbchars == NULL) {
- lbchars = pestrdup("\r\n", 0);
- lbchars_len = 2;
- }
- }
- opts |= (opt_binary ? PHP_CONV_QPRINT_OPT_BINARY : 0);
- opts |= (opt_force_encode_first ? PHP_CONV_QPRINT_OPT_FORCE_ENCODE_FIRST : 0);
- }
- retval = pemalloc(sizeof(php_conv_qprint_encode), persistent);
- if (lbchars != NULL) {
- if (php_conv_qprint_encode_ctor((php_conv_qprint_encode *)retval, line_len, lbchars, lbchars_len, 1, opts, persistent)) {
- pefree(lbchars, 0);
- goto out_failure;
- }
- pefree(lbchars, 0);
- } else {
- if (php_conv_qprint_encode_ctor((php_conv_qprint_encode *)retval, 0, NULL, 0, 0, opts, persistent)) {
- goto out_failure;
- }
- }
- } break;
-
- case PHP_CONV_QPRINT_DECODE: {
- char *lbchars = NULL;
- size_t lbchars_len;
-
- if (options != NULL) {
- GET_STR_PROP(options, lbchars, lbchars_len, "line-break-chars", 0);
- if (lbchars == NULL) {
- lbchars = pestrdup("\r\n", 0);
- lbchars_len = 2;
- }
- }
- retval = pemalloc(sizeof(php_conv_qprint_decode), persistent);
- if (lbchars != NULL) {
- if (php_conv_qprint_decode_ctor((php_conv_qprint_decode *)retval, lbchars, lbchars_len, 1, persistent)) {
- pefree(lbchars, 0);
- goto out_failure;
- }
- pefree(lbchars, 0);
- } else {
- if (php_conv_qprint_decode_ctor((php_conv_qprint_decode *)retval, NULL, 0, 0, persistent)) {
- goto out_failure;
- }
- }
- } break;
-
- default:
- retval = NULL;
- break;
- }
- return retval;
-
-out_failure:
- if (retval != NULL) {
- pefree(retval, persistent);
- }
- return NULL;
-}
-
-#undef GET_STR_PROP
-#undef GET_INT_PROP
-#undef GET_UINT_PROP
-#undef GET_BOOL_PROP
-
-static int php_convert_filter_ctor(php_convert_filter *inst,
- int conv_mode, HashTable *conv_opts,
- const char *filtername, int persistent)
-{
- inst->persistent = persistent;
- inst->filtername = pestrdup(filtername, persistent);
- inst->stub_len = 0;
-
- if ((inst->cd = php_conv_open(conv_mode, conv_opts, persistent)) == NULL) {
- goto out_failure;
- }
-
- return SUCCESS;
-
-out_failure:
- if (inst->cd != NULL) {
- php_conv_dtor(inst->cd);
- pefree(inst->cd, persistent);
- }
- if (inst->filtername != NULL) {
- pefree(inst->filtername, persistent);
- }
- return FAILURE;
-}
-
-static void php_convert_filter_dtor(php_convert_filter *inst)
-{
- if (inst->cd != NULL) {
- php_conv_dtor(inst->cd);
- pefree(inst->cd, inst->persistent);
- }
-
- if (inst->filtername != NULL) {
- pefree(inst->filtername, inst->persistent);
- }
-}
-
-/* {{{ strfilter_convert_append_bucket */
-static int strfilter_convert_append_bucket(
- php_convert_filter *inst,
- php_stream *stream, php_stream_filter *filter,
- php_stream_bucket_brigade *buckets_out,
- const char *ps, size_t buf_len, size_t *consumed,
- int persistent TSRMLS_DC)
-{
- php_conv_err_t err;
- php_stream_bucket *new_bucket;
- char *out_buf = NULL;
- size_t out_buf_size;
- char *pd;
- const char *pt;
- size_t ocnt, icnt, tcnt;
- size_t initial_out_buf_size;
-
- if (ps == NULL) {
- initial_out_buf_size = 64;
- icnt = 1;
- } else {
- initial_out_buf_size = buf_len;
- icnt = buf_len;
- }
-
- out_buf_size = ocnt = initial_out_buf_size;
- if (NULL == (out_buf = pemalloc(out_buf_size, persistent))) {
- return FAILURE;
- }
-
- pd = out_buf;
-
- if (inst->stub_len > 0) {
- pt = inst->stub;
- tcnt = inst->stub_len;
-
- while (tcnt > 0) {
- err = php_conv_convert(inst->cd, &pt, &tcnt, &pd, &ocnt);
-
- switch (err) {
- case PHP_CONV_ERR_INVALID_SEQ:
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "stream filter (%s): invalid byte sequence", inst->filtername);
- goto out_failure;
-
- case PHP_CONV_ERR_MORE:
- if (ps != NULL) {
- if (icnt > 0) {
- if (inst->stub_len >= sizeof(inst->stub)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "stream filter (%s): insufficient buffer", inst->filtername);
- goto out_failure;
- }
- inst->stub[inst->stub_len++] = *(ps++);
- icnt--;
- pt = inst->stub;
- tcnt = inst->stub_len;
- } else {
- tcnt = 0;
- break;
- }
- }
- break;
-
- case PHP_CONV_ERR_UNEXPECTED_EOS:
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "stream filter (%s): unexpected end of stream", inst->filtername);
- goto out_failure;
-
- case PHP_CONV_ERR_TOO_BIG: {
- char *new_out_buf;
- size_t new_out_buf_size;
-
- new_out_buf_size = out_buf_size << 1;
-
- if (new_out_buf_size < out_buf_size) {
- /* whoa! no bigger buckets are sold anywhere... */
- if (NULL == (new_bucket = php_stream_bucket_new(stream, out_buf, (out_buf_size - ocnt), 1, persistent TSRMLS_CC))) {
- goto out_failure;
- }
-
- php_stream_bucket_append(buckets_out, new_bucket TSRMLS_CC);
-
- out_buf_size = ocnt = initial_out_buf_size;
- if (NULL == (out_buf = pemalloc(out_buf_size, persistent))) {
- return FAILURE;
- }
- pd = out_buf;
- } else {
- if (NULL == (new_out_buf = perealloc(out_buf, new_out_buf_size, persistent))) {
- if (NULL == (new_bucket = php_stream_bucket_new(stream, out_buf, (out_buf_size - ocnt), 1, persistent TSRMLS_CC))) {
- goto out_failure;
- }
-
- php_stream_bucket_append(buckets_out, new_bucket TSRMLS_CC);
- return FAILURE;
- }
-
- pd = new_out_buf + (pd - out_buf);
- ocnt += (new_out_buf_size - out_buf_size);
- out_buf = new_out_buf;
- out_buf_size = new_out_buf_size;
- }
- } break;
-
- case PHP_CONV_ERR_UNKNOWN:
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "stream filter (%s): unknown error", inst->filtername);
- goto out_failure;
-
- default:
- break;
- }
- }
- memmove(inst->stub, pt, tcnt);
- inst->stub_len = tcnt;
- }
-
- while (icnt > 0) {
- err = ((ps == NULL ? php_conv_convert(inst->cd, NULL, NULL, &pd, &ocnt):
- php_conv_convert(inst->cd, &ps, &icnt, &pd, &ocnt)));
- switch (err) {
- case PHP_CONV_ERR_INVALID_SEQ:
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "stream filter (%s): invalid byte sequence", inst->filtername);
- goto out_failure;
-
- case PHP_CONV_ERR_MORE:
- if (ps != NULL) {
- if (icnt > sizeof(inst->stub)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "stream filter (%s): insufficient buffer", inst->filtername);
- goto out_failure;
- }
- memcpy(inst->stub, ps, icnt);
- inst->stub_len = icnt;
- ps += icnt;
- icnt = 0;
- } else {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "stream filter (%s): unexpected octet values", inst->filtername);
- goto out_failure;
- }
- break;
-
- case PHP_CONV_ERR_TOO_BIG: {
- char *new_out_buf;
- size_t new_out_buf_size;
-
- new_out_buf_size = out_buf_size << 1;
-
- if (new_out_buf_size < out_buf_size) {
- /* whoa! no bigger buckets are sold anywhere... */
- if (NULL == (new_bucket = php_stream_bucket_new(stream, out_buf, (out_buf_size - ocnt), 1, persistent TSRMLS_CC))) {
- goto out_failure;
- }
-
- php_stream_bucket_append(buckets_out, new_bucket TSRMLS_CC);
-
- out_buf_size = ocnt = initial_out_buf_size;
- if (NULL == (out_buf = pemalloc(out_buf_size, persistent))) {
- return FAILURE;
- }
- pd = out_buf;
- } else {
- if (NULL == (new_out_buf = perealloc(out_buf, new_out_buf_size, persistent))) {
- if (NULL == (new_bucket = php_stream_bucket_new(stream, out_buf, (out_buf_size - ocnt), 1, persistent TSRMLS_CC))) {
- goto out_failure;
- }
-
- php_stream_bucket_append(buckets_out, new_bucket TSRMLS_CC);
- return FAILURE;
- }
- pd = new_out_buf + (pd - out_buf);
- ocnt += (new_out_buf_size - out_buf_size);
- out_buf = new_out_buf;
- out_buf_size = new_out_buf_size;
- }
- } break;
-
- case PHP_CONV_ERR_UNKNOWN:
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "stream filter (%s): unknown error", inst->filtername);
- goto out_failure;
-
- default:
- if (ps == NULL) {
- icnt = 0;
- }
- break;
- }
- }
-
- if (out_buf_size - ocnt > 0) {
- if (NULL == (new_bucket = php_stream_bucket_new(stream, out_buf, (out_buf_size - ocnt), 1, persistent TSRMLS_CC))) {
- goto out_failure;
- }
- php_stream_bucket_append(buckets_out, new_bucket TSRMLS_CC);
- } else {
- pefree(out_buf, persistent);
- }
- *consumed += buf_len - icnt;
-
- return SUCCESS;
-
-out_failure:
- pefree(out_buf, persistent);
- return FAILURE;
-}
-/* }}} */
-
-static php_stream_filter_status_t strfilter_convert_filter(
- php_stream *stream,
- php_stream_filter *thisfilter,
- php_stream_bucket_brigade *buckets_in,
- php_stream_bucket_brigade *buckets_out,
- size_t *bytes_consumed,
- int flags
- TSRMLS_DC)
-{
- php_stream_bucket *bucket = NULL;
- size_t consumed = 0;
- php_convert_filter *inst = (php_convert_filter *)thisfilter->abstract;
-
- while (buckets_in->head != NULL) {
- bucket = buckets_in->head;
-
- php_stream_bucket_unlink(bucket TSRMLS_CC);
-
- if (strfilter_convert_append_bucket(inst, stream, thisfilter,
- buckets_out, bucket->buf, bucket->buflen, &consumed,
- php_stream_is_persistent(stream) TSRMLS_CC) != SUCCESS) {
- goto out_failure;
- }
-
- php_stream_bucket_delref(bucket TSRMLS_CC);
- }
-
- if (flags != PSFS_FLAG_NORMAL) {
- if (strfilter_convert_append_bucket(inst, stream, thisfilter,
- buckets_out, NULL, 0, &consumed,
- php_stream_is_persistent(stream) TSRMLS_CC) != SUCCESS) {
- goto out_failure;
- }
- }
-
- if (bytes_consumed) {
- *bytes_consumed = consumed;
- }
-
- return PSFS_PASS_ON;
-
-out_failure:
- if (bucket != NULL) {
- php_stream_bucket_delref(bucket TSRMLS_CC);
- }
- return PSFS_ERR_FATAL;
-}
-
-static void strfilter_convert_dtor(php_stream_filter *thisfilter TSRMLS_DC)
-{
- assert(thisfilter->abstract != NULL);
-
- php_convert_filter_dtor((php_convert_filter *)thisfilter->abstract);
- pefree(thisfilter->abstract, ((php_convert_filter *)thisfilter->abstract)->persistent);
-}
-
-static php_stream_filter_ops strfilter_convert_ops = {
- strfilter_convert_filter,
- strfilter_convert_dtor,
- "convert.*"
-};
-
-static php_stream_filter *strfilter_convert_create(const char *filtername, zval *filterparams, int persistent TSRMLS_DC)
-{
- php_convert_filter *inst;
- php_stream_filter *retval = NULL;
-
- char *dot;
- int conv_mode = 0;
-
- if (filterparams != NULL && Z_TYPE_P(filterparams) != IS_ARRAY) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "stream filter (%s): invalid filter parameter", filtername);
- return NULL;
- }
-
- if ((dot = strchr(filtername, '.')) == NULL) {
- return NULL;
- }
- ++dot;
-
- inst = pemalloc(sizeof(php_convert_filter), persistent);
-
- if (strcasecmp(dot, "base64-encode") == 0) {
- conv_mode = PHP_CONV_BASE64_ENCODE;
- } else if (strcasecmp(dot, "base64-decode") == 0) {
- conv_mode = PHP_CONV_BASE64_DECODE;
- } else if (strcasecmp(dot, "quoted-printable-encode") == 0) {
- conv_mode = PHP_CONV_QPRINT_ENCODE;
- } else if (strcasecmp(dot, "quoted-printable-decode") == 0) {
- conv_mode = PHP_CONV_QPRINT_DECODE;
- }
-
- if (php_convert_filter_ctor(inst, conv_mode,
- (filterparams != NULL ? Z_ARRVAL_P(filterparams) : NULL),
- filtername, persistent) != SUCCESS) {
- goto out;
- }
-
- retval = php_stream_filter_alloc(&strfilter_convert_ops, inst, persistent);
-out:
- if (retval == NULL) {
- pefree(inst, persistent);
- }
-
- return retval;
-}
-
-static php_stream_filter_factory strfilter_convert_factory = {
- strfilter_convert_create
-};
-/* }}} */
-
-static const struct {
- php_stream_filter_ops *ops;
- php_stream_filter_factory *factory;
-} standard_filters[] = {
- { &strfilter_rot13_ops, &strfilter_rot13_factory },
- { &strfilter_toupper_ops, &strfilter_toupper_factory },
- { &strfilter_tolower_ops, &strfilter_tolower_factory },
- { &strfilter_strip_tags_ops, &strfilter_strip_tags_factory },
- { &strfilter_convert_ops, &strfilter_convert_factory },
- /* additional filters to go here */
- { NULL, NULL }
-};
-
-/* {{{ filter MINIT and MSHUTDOWN */
-PHP_MINIT_FUNCTION(standard_filters)
-{
- int i;
-
- for (i = 0; standard_filters[i].ops; i++) {
- if (FAILURE == php_stream_filter_register_factory(
- standard_filters[i].ops->label,
- standard_filters[i].factory
- TSRMLS_CC)) {
- return FAILURE;
- }
- }
- return SUCCESS;
-}
-
-PHP_MSHUTDOWN_FUNCTION(standard_filters)
-{
- int i;
-
- for (i = 0; standard_filters[i].ops; i++) {
- php_stream_filter_unregister_factory(standard_filters[i].ops->label TSRMLS_CC);
- }
- return SUCCESS;
-}
-/* }}} */
-
-/*
- * 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/standard/flock_compat.c b/ext/standard/flock_compat.c
deleted file mode 100644
index 373f43f9cd..0000000000
--- a/ext/standard/flock_compat.c
+++ /dev/null
@@ -1,238 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Sascha Schumann <sascha@schumann.cx> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#include "php.h"
-#include <errno.h>
-#include "ext/standard/flock_compat.h"
-
-#if HAVE_STRUCT_FLOCK
-#include <unistd.h>
-#include <fcntl.h>
-#include <sys/file.h>
-#endif
-
-#ifdef PHP_WIN32
-#include <io.h>
-#endif
-
-#ifdef NETWARE
-#ifdef NEW_LIBC
-#include <netinet/in.h>
-#else
-#include <sys/socket.h>
-#endif
-#endif
-
-#ifndef HAVE_FLOCK
-PHPAPI int flock(int fd, int operation)
-{
- return php_flock(fd, operation);
-}
-#endif /* !defined(HAVE_FLOCK) */
-
-PHPAPI int php_flock(int fd, int operation)
-#if HAVE_STRUCT_FLOCK
-{
- struct flock flck;
- int ret;
-
- flck.l_start = flck.l_len = 0;
- flck.l_whence = SEEK_SET;
-
- if (operation & LOCK_SH)
- flck.l_type = F_RDLCK;
- else if (operation & LOCK_EX)
- flck.l_type = F_WRLCK;
- else if (operation & LOCK_UN)
- flck.l_type = F_UNLCK;
- else {
- errno = EINVAL;
- return -1;
- }
-
- ret = fcntl(fd, operation & LOCK_NB ? F_SETLK : F_SETLKW, &flck);
-
- if (operation & LOCK_NB && ret == -1 &&
- (errno == EACCES || errno == EAGAIN))
- errno = EWOULDBLOCK;
-
- if (ret != -1) ret = 0;
-
- return ret;
-}
-#elif defined(PHP_WIN32)
-/*
- * Program: Unix compatibility routines
- *
- * Author: Mark Crispin
- * Networks and Distributed Computing
- * Computing & Communications
- * University of Washington
- * Administration Building, AG-44
- * Seattle, WA 98195
- * Internet: MRC@CAC.Washington.EDU
- *
- * Date: 14 September 1996
- * Last Edited: 14 August 1997
- *
- * Copyright 1997 by the University of Washington
- *
- * Permission to use, copy, modify, and distribute this software and its
- * documentation for any purpose and without fee is hereby granted, provided
- * that the above copyright notice appears in all copies and that both the
- * above copyright notice and this permission notice appear in supporting
- * documentation, and that the name of the University of Washington not be
- * used in advertising or publicity pertaining to distribution of the software
- * without specific, written prior permission. This software is made available
- * "as is", and
- * THE UNIVERSITY OF WASHINGTON DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED,
- * WITH REGARD TO THIS SOFTWARE, INCLUDING WITHOUT LIMITATION ALL IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, AND IN
- * NO EVENT SHALL THE UNIVERSITY OF WASHINGTON BE LIABLE FOR ANY SPECIAL,
- * INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
- * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, TORT
- * (INCLUDING NEGLIGENCE) OR STRICT LIABILITY, ARISING OUT OF OR IN CONNECTION
- * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- *
- */
-/* DEDICATION
-
- * This file is dedicated to my dog, Unix, also known as Yun-chan and
- * Unix J. Terwilliker Jehosophat Aloysius Monstrosity Animal Beast. Unix
- * passed away at the age of 11 1/2 on September 14, 1996, 12:18 PM PDT, after
- * a two-month bout with cirrhosis of the liver.
- *
- * He was a dear friend, and I miss him terribly.
- *
- * Lift a leg, Yunie. Luv ya forever!!!!
- */
-{
- HANDLE hdl = (HANDLE) _get_osfhandle(fd);
- DWORD low = 1, high = 0;
- OVERLAPPED offset =
- {0, 0, 0, 0, NULL};
- if (hdl < 0)
- return -1; /* error in file descriptor */
- /* bug for bug compatible with Unix */
- UnlockFileEx(hdl, 0, low, high, &offset);
- switch (operation & ~LOCK_NB) { /* translate to LockFileEx() op */
- case LOCK_EX: /* exclusive */
- if (LockFileEx(hdl, LOCKFILE_EXCLUSIVE_LOCK +
- ((operation & LOCK_NB) ? LOCKFILE_FAIL_IMMEDIATELY : 0),
- 0, low, high, &offset))
- return 0;
- break;
- case LOCK_SH: /* shared */
- if (LockFileEx(hdl, ((operation & LOCK_NB) ? LOCKFILE_FAIL_IMMEDIATELY : 0),
- 0, low, high, &offset))
- return 0;
- break;
- case LOCK_UN: /* unlock */
- return 0; /* always succeeds */
- default: /* default */
- break;
- }
- /* Under Win32 MT library, errno is not a variable but a function call,
- * which cannot be assigned to.
- */
-#if !defined(PHP_WIN32)
- errno = EINVAL; /* bad call */
-#endif
- return -1;
-}
-#else
-#warning no proper flock support for your site
-{
- errno = 0;
- return 0;
-}
-#endif
-
-#if !(HAVE_INET_ATON)
-/* {{{ inet_aton
- * Check whether "cp" is a valid ascii representation
- * of an Internet address and convert to a binary address.
- * Returns 1 if the address is valid, 0 if not.
- * This replaces inet_addr, the return value from which
- * cannot distinguish between failure and a local broadcast address.
- */
-int inet_aton(const char *cp, struct in_addr *ap)
-{
- int dots = 0;
- register unsigned long acc = 0, addr = 0;
-
- do {
- register char cc = *cp;
-
- switch (cc) {
- case '0':
- case '1':
- case '2':
- case '3':
- case '4':
- case '5':
- case '6':
- case '7':
- case '8':
- case '9':
- acc = acc * 10 + (cc - '0');
- break;
-
- case '.':
- if (++dots > 3) {
- return 0;
- }
- /* Fall through */
-
- case '\0':
- if (acc > 255) {
- return 0;
- }
- addr = addr << 8 | acc;
- acc = 0;
- break;
-
- default:
- return 0;
- }
- } while (*cp++) ;
-
- /* Normalize the address */
- if (dots < 3) {
- addr <<= 8 * (3 - dots) ;
- }
-
- /* Store it if requested */
- if (ap) {
- ap->s_addr = htonl(addr);
- }
-
- return 1;
-}
-/* }}} */
-#endif /* !HAVE_INET_ATON */
-
-/*
- * 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/standard/flock_compat.h b/ext/standard/flock_compat.h
deleted file mode 100644
index 019077800c..0000000000
--- a/ext/standard/flock_compat.h
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Sascha Schumann <sascha@schumann.cx> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifndef FLOCK_COMPAT_H
-#define FLOCK_COMPAT_H
-
-/* php_flock internally uses fcntl whther or not flock is available
- * This way our php_flock even works on NFS files.
- * More info: /usr/src/linux/Documentation
- */
-PHPAPI int php_flock(int fd, int operation);
-
-#ifndef HAVE_FLOCK
-# define LOCK_SH 1
-# define LOCK_EX 2
-# define LOCK_NB 4
-# define LOCK_UN 8
-PHPAPI int flock(int fd, int operation);
-#endif
-
-#ifdef PHP_WIN32
-#define EWOULDBLOCK WSAEWOULDBLOCK
-# define fsync _commit
-# define ftruncate(a, b) chsize(a, b)
-#endif /* defined(PHP_WIN32) */
-
-#if !HAVE_INET_ATON
-#if HAVE_NETINET_IN_H
-#include <netinet/in.h>
-#endif
-#if HAVE_ARPA_INET_H
-#include <arpa/inet.h>
-#endif
-
-extern int inet_aton(const char *, struct in_addr *);
-#endif
-
-#endif /* FLOCK_COMPAT_H */
diff --git a/ext/standard/formatted_print.c b/ext/standard/formatted_print.c
deleted file mode 100644
index 1e71a937d5..0000000000
--- a/ext/standard/formatted_print.c
+++ /dev/null
@@ -1,893 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Stig Sæther Bakken <ssb@php.net> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-#include <math.h> /* modf() */
-#include "php.h"
-#include "ext/standard/head.h"
-#include "php_string.h"
-#include "zend_execute.h"
-#include <stdio.h>
-
-#ifdef HAVE_LOCALE_H
-#include <locale.h>
-#endif
-
-#define ALIGN_LEFT 0
-#define ALIGN_RIGHT 1
-#define ADJ_WIDTH 1
-#define ADJ_PRECISION 2
-#define NUM_BUF_SIZE 500
-#define NDIG 80
-#define FLOAT_DIGITS 6
-#define FLOAT_PRECISION 6
-#define MAX_FLOAT_DIGITS 38
-#define MAX_FLOAT_PRECISION 40
-
-#if 0
-/* trick to control varargs functions through cpp */
-# define PRINTF_DEBUG(arg) php_printf arg
-#else
-# define PRINTF_DEBUG(arg)
-#endif
-
-static char hexchars[] = "0123456789abcdef";
-static char HEXCHARS[] = "0123456789ABCDEF";
-
-
-/*
- * cvt.c - IEEE floating point formatting routines for FreeBSD
- * from GNU libc-4.6.27
- */
-
-/*
- * php_convert_to_decimal converts to decimal
- * the number of digits is specified by ndigit
- * decpt is set to the position of the decimal point
- * sign is set to 0 for positive, 1 for negative
- */
-static char *php_convert_to_decimal(double arg, int ndigits, int *decpt, int *sign, int eflag)
-{
- register int r2;
- int mvl;
- double fi, fj;
- register char *p, *p1;
- /*THREADX*/
-#ifndef THREAD_SAFE
- static char cvt_buf[NDIG];
-#endif
-
- if (ndigits >= NDIG - 1)
- ndigits = NDIG - 2;
- r2 = 0;
- *sign = 0;
- p = &cvt_buf[0];
- if (arg < 0) {
- *sign = 1;
- arg = -arg;
- }
- arg = modf(arg, &fi);
- p1 = &cvt_buf[NDIG];
- /*
- * Do integer part
- */
- if (fi != 0) {
- p1 = &cvt_buf[NDIG];
- while (fi != 0) {
- fj = modf(fi / 10, &fi);
- if (p1 <= &cvt_buf[0]) {
- mvl = NDIG - ndigits;
- memmove(&cvt_buf[mvl], &cvt_buf[0], NDIG-mvl-1);
- p1 += mvl;
- }
- *--p1 = (int) ((fj + .03) * 10) + '0';
- r2++;
- }
- while (p1 < &cvt_buf[NDIG])
- *p++ = *p1++;
- } else if (arg > 0) {
- while ((fj = arg * 10) < 1) {
- if (!eflag && (r2 * -1) < ndigits) {
- break;
- }
- arg = fj;
- r2--;
- }
- }
- p1 = &cvt_buf[ndigits];
- if (eflag == 0)
- p1 += r2;
- *decpt = r2;
- if (p1 < &cvt_buf[0]) {
- cvt_buf[0] = '\0';
- return (cvt_buf);
- }
- if (p <= p1 && p < &cvt_buf[NDIG]) {
- arg = modf(arg * 10, &fj);
- if ((int)fj==10) {
- *p++ = '1';
- fj = 0;
- *decpt = ++r2;
- }
- while (p <= p1 && p < &cvt_buf[NDIG]) {
- *p++ = (int) fj + '0';
- arg = modf(arg * 10, &fj);
- }
- }
- if (p1 >= &cvt_buf[NDIG]) {
- cvt_buf[NDIG - 1] = '\0';
- return (cvt_buf);
- }
- p = p1;
- *p1 += 5;
- while (*p1 > '9') {
- *p1 = '0';
- if (p1 > cvt_buf)
- ++ * --p1;
- else {
- *p1 = '1';
- (*decpt)++;
- if (eflag == 0) {
- if (p > cvt_buf)
- *p = '0';
- p++;
- }
- }
- }
- *p = '\0';
- return (cvt_buf);
-}
-
-
-inline static void
-php_sprintf_appendchar(char **buffer, int *pos, int *size, char add TSRMLS_DC)
-{
- if ((*pos + 1) >= *size) {
- *size <<= 1;
- PRINTF_DEBUG(("%s(): ereallocing buffer to %d bytes\n", get_active_function_name(TSRMLS_C), *size));
- *buffer = erealloc(*buffer, *size);
- }
- PRINTF_DEBUG(("sprintf: appending '%c', pos=\n", add, *pos));
- (*buffer)[(*pos)++] = add;
-}
-
-
-inline static void
-php_sprintf_appendstring(char **buffer, int *pos, int *size, char *add,
- int min_width, int max_width, char padding,
- int alignment, int len, int neg, int expprec, int always_sign)
-{
- register int npad;
- int req_size;
- int copy_len;
-
- copy_len = (expprec ? MIN(max_width, len) : len);
- npad = min_width - copy_len;
-
- if (npad < 0) {
- npad = 0;
- }
-
- PRINTF_DEBUG(("sprintf: appendstring(%x, %d, %d, \"%s\", %d, '%c', %d)\n",
- *buffer, *pos, *size, add, min_width, padding, alignment));
-
- req_size = *pos + MAX(min_width, copy_len) + 1;
-
- if (req_size > *size) {
- while (req_size > *size) {
- *size <<= 1;
- }
- PRINTF_DEBUG(("sprintf ereallocing buffer to %d bytes\n", *size));
- *buffer = erealloc(*buffer, *size);
- }
- if (alignment == ALIGN_RIGHT) {
- if ((neg || always_sign) && padding=='0') {
- (*buffer)[(*pos)++] = (neg) ? '-' : '+';
- add++;
- len--;
- copy_len--;
- }
- while (npad-- > 0) {
- (*buffer)[(*pos)++] = padding;
- }
- }
- PRINTF_DEBUG(("sprintf: appending \"%s\"\n", add));
- memcpy(&(*buffer)[*pos], add, copy_len + 1);
- *pos += copy_len;
- if (alignment == ALIGN_LEFT) {
- while (npad--) {
- (*buffer)[(*pos)++] = padding;
- }
- }
-}
-
-
-inline static void
-php_sprintf_appendint(char **buffer, int *pos, int *size, long number,
- int width, char padding, int alignment,
- int always_sign)
-{
- char numbuf[NUM_BUF_SIZE];
- register unsigned long magn, nmagn;
- register unsigned int i = NUM_BUF_SIZE - 1, neg = 0;
-
- PRINTF_DEBUG(("sprintf: appendint(%x, %x, %x, %d, %d, '%c', %d)\n",
- *buffer, pos, size, number, width, padding, alignment));
- if (number < 0) {
- neg = 1;
- magn = ((unsigned long) -(number + 1)) + 1;
- } else {
- magn = (unsigned long) number;
- }
-
- /* Can't right-pad 0's on integers */
- if(alignment==0 && padding=='0') padding=' ';
-
- numbuf[i] = '\0';
-
- do {
- nmagn = magn / 10;
-
- numbuf[--i] = (unsigned char)(magn - (nmagn * 10)) + '0';
- magn = nmagn;
- }
- while (magn > 0 && i > 0);
- if (neg) {
- numbuf[--i] = '-';
- } else if (always_sign) {
- numbuf[--i] = '+';
- }
- PRINTF_DEBUG(("sprintf: appending %d as \"%s\", i=%d\n",
- number, &numbuf[i], i));
- php_sprintf_appendstring(buffer, pos, size, &numbuf[i], width, 0,
- padding, alignment, (NUM_BUF_SIZE - 1) - i,
- neg, 0, always_sign);
-}
-
-inline static void
-php_sprintf_appenduint(char **buffer, int *pos, int *size,
- unsigned long number,
- int width, char padding, int alignment)
-{
- char numbuf[NUM_BUF_SIZE];
- register unsigned long magn, nmagn;
- register unsigned int i = NUM_BUF_SIZE - 1;
-
- PRINTF_DEBUG(("sprintf: appenduint(%x, %x, %x, %d, %d, '%c', %d)\n",
- *buffer, pos, size, number, width, padding, alignment));
- magn = (unsigned int) number;
-
- /* Can't right-pad 0's on integers */
- if (alignment == 0 && padding == '0') padding = ' ';
-
- numbuf[i] = '\0';
-
- do {
- nmagn = magn / 10;
-
- numbuf[--i] = (unsigned char)(magn - (nmagn * 10)) + '0';
- magn = nmagn;
- } while (magn > 0 && i > 0);
-
- PRINTF_DEBUG(("sprintf: appending %d as \"%s\", i=%d\n", number, &numbuf[i], i));
- php_sprintf_appendstring(buffer, pos, size, &numbuf[i], width, 0,
- padding, alignment, (NUM_BUF_SIZE - 1) - i, 0, 0, 0);
-}
-
-inline static void
-php_sprintf_appenddouble(char **buffer, int *pos,
- int *size, double number,
- int width, char padding,
- int alignment, int precision,
- int adjust, char fmt,
- int always_sign
- TSRMLS_DC)
-{
- char numbuf[NUM_BUF_SIZE];
- char *cvt;
- register int i = 0, j = 0;
- int sign, decpt, cvt_len;
- char decimal_point = EG(float_separator)[0];
-
- PRINTF_DEBUG(("sprintf: appenddouble(%x, %x, %x, %f, %d, '%c', %d, %c)\n",
- *buffer, pos, size, number, width, padding, alignment, fmt));
- if ((adjust & ADJ_PRECISION) == 0) {
- precision = FLOAT_PRECISION;
- } else if (precision > MAX_FLOAT_PRECISION) {
- precision = MAX_FLOAT_PRECISION;
- }
-
- if (zend_isnan(number)) {
- sign = (number<0);
- php_sprintf_appendstring(buffer, pos, size, "NaN", 3, 0, padding,
- alignment, precision, sign, 0, always_sign);
- return;
- }
-
- if (zend_isinf(number)) {
- sign = (number<0);
- php_sprintf_appendstring(buffer, pos, size, "INF", 3, 0, padding,
- alignment, precision, sign, 0, always_sign);
- return;
- }
-
- cvt = php_convert_to_decimal(number, precision, &decpt, &sign, (fmt == 'e'));
- cvt_len = strlen(cvt);
-
- if (sign) {
- numbuf[i++] = '-';
- } else if (always_sign) {
- numbuf[i++] = '+';
- }
-
- if (fmt == 'f') {
- if (decpt <= 0) {
- numbuf[i++] = '0';
- if (precision > 0) {
- int k = precision;
- numbuf[i++] = decimal_point;
- while ((decpt++ < 0) && k--) {
- numbuf[i++] = '0';
- }
- }
- } else {
- while (decpt-- > 0) {
- numbuf[i++] = j < cvt_len ? cvt[j++] : '0';
- }
- if (precision > 0) {
- numbuf[i++] = decimal_point;
- while (precision-- > 0) {
- numbuf[i++] = j < cvt_len ? cvt[j++] : '0';
- }
- }
- }
- } else if (fmt == 'e' || fmt == 'E') {
- char *exp_p;
- int dec2;
-
- decpt--;
-
- numbuf[i++] = cvt[j++];
- numbuf[i++] = decimal_point;
-
- if (precision > 0) {
- int k = precision;
-
- while (k-- && cvt[j]) {
- numbuf[i++] = cvt[j++];
- }
- } else {
- numbuf[i++] = '0';
- }
-
- numbuf[i++] = fmt;
- exp_p = php_convert_to_decimal(decpt, 0, &dec2, &sign, 0);
- numbuf[i++] = sign ? '-' : '+';
- if (*exp_p) {
- while (*exp_p) {
- numbuf[i++] = *(exp_p++);
- }
- } else {
- numbuf[i++] = '0';
- }
- } else {
- numbuf[i++] = cvt[j++];
- if (precision > 0)
- numbuf[i++] = decimal_point;
- }
-
- while (cvt[j]) {
- numbuf[i++] = cvt[j++];
- }
-
- numbuf[i] = '\0';
-
- php_sprintf_appendstring(buffer, pos, size, numbuf, width, 0, padding,
- alignment, i, sign, 0, always_sign);
-}
-
-
-inline static void
-php_sprintf_append2n(char **buffer, int *pos, int *size, long number,
- int width, char padding, int alignment, int n,
- char *chartable, int expprec)
-{
- char numbuf[NUM_BUF_SIZE];
- register unsigned long num;
- register unsigned int i = NUM_BUF_SIZE - 1;
- register int andbits = (1 << n) - 1;
-
- PRINTF_DEBUG(("sprintf: append2n(%x, %x, %x, %d, %d, '%c', %d, %d, %x)\n",
- *buffer, pos, size, number, width, padding, alignment, n,
- chartable));
- PRINTF_DEBUG(("sprintf: append2n 2^%d andbits=%x\n", n, andbits));
-
- num = (unsigned long) number;
- numbuf[i] = '\0';
-
- do {
- numbuf[--i] = chartable[(num & andbits)];
- num >>= n;
- }
- while (num > 0);
-
- php_sprintf_appendstring(buffer, pos, size, &numbuf[i], width, 0,
- padding, alignment, (NUM_BUF_SIZE - 1) - i,
- 0, expprec, 0);
-}
-
-
-inline static long
-php_sprintf_getnumber(char *buffer, int *pos)
-{
- char *endptr;
- register long num = strtol(&buffer[*pos], &endptr, 10);
- register int i = 0;
-
- if (endptr != NULL) {
- i = (endptr - &buffer[*pos]);
- }
- PRINTF_DEBUG(("sprintf_getnumber: number was %d bytes long\n", i));
- *pos += i;
- return num;
-}
-
-/* {{{ php_formatted_print
- * New sprintf implementation for PHP.
- *
- * Modifiers:
- *
- * " " pad integers with spaces
- * "-" left adjusted field
- * n field size
- * "."n precision (floats only)
- * "+" Always place a sign (+ or -) in front of a number
- *
- * Type specifiers:
- *
- * "%" literal "%", modifiers are ignored.
- * "b" integer argument is printed as binary
- * "c" integer argument is printed as a single character
- * "d" argument is an integer
- * "f" the argument is a float
- * "o" integer argument is printed as octal
- * "s" argument is a string
- * "x" integer argument is printed as lowercase hexadecimal
- * "X" integer argument is printed as uppercase hexadecimal
- *
- */
-static char *
-php_formatted_print(int ht, int *len, int use_array, int format_offset TSRMLS_DC)
-{
- zval ***args, **z_format;
- int argc, size = 240, inpos = 0, outpos = 0, temppos;
- int alignment, width, precision, currarg, adjusting, argnum;
- char *format, *result, padding;
- int always_sign;
-
- argc = ZEND_NUM_ARGS();
-
- /* verify the number of args */
- if ((use_array && argc != (2 + format_offset))
- || (!use_array && argc < (1 + format_offset))) {
- WRONG_PARAM_COUNT_WITH_RETVAL(NULL);
- }
- args = (zval ***)safe_emalloc(argc, sizeof(zval *), 0);
-
- if (zend_get_parameters_array_ex(argc, args) == FAILURE) {
- efree(args);
- WRONG_PARAM_COUNT_WITH_RETVAL(NULL);
- }
-
- if (use_array) {
- int i = 1;
- zval ***newargs;
- zval **array;
-
- z_format = args[format_offset];
- array = args[1 + format_offset];
-
- SEPARATE_ZVAL(array);
- convert_to_array_ex(array);
-
- argc = 1 + zend_hash_num_elements(Z_ARRVAL_PP(array));
- newargs = (zval ***)safe_emalloc(argc, sizeof(zval *), 0);
- newargs[0] = z_format;
-
- for (zend_hash_internal_pointer_reset(Z_ARRVAL_PP(array));
- zend_hash_get_current_data(Z_ARRVAL_PP(array), (void **)&newargs[i++]) == SUCCESS;
- zend_hash_move_forward(Z_ARRVAL_PP(array)));
-
- efree(args);
- args = newargs;
- format_offset = 0;
- }
-
- convert_to_string_ex(args[format_offset]);
- format = Z_STRVAL_PP(args[format_offset]);
- result = emalloc(size);
-
- currarg = 1;
-
- while (inpos<Z_STRLEN_PP(args[format_offset])) {
- int expprec = 0, multiuse = 0;
- zval *tmp;
-
- PRINTF_DEBUG(("sprintf: format[%d]='%c'\n", inpos, format[inpos]));
- PRINTF_DEBUG(("sprintf: outpos=%d\n", outpos));
- if (format[inpos] != '%') {
- php_sprintf_appendchar(&result, &outpos, &size, format[inpos++] TSRMLS_CC);
- } else if (format[inpos + 1] == '%') {
- php_sprintf_appendchar(&result, &outpos, &size, '%' TSRMLS_CC);
- inpos += 2;
- } else {
- if (currarg >= argc && format[inpos + 1] != '%') {
- efree(result);
- efree(args);
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Too few arguments");
- return NULL;
- }
- /* starting a new format specifier, reset variables */
- alignment = ALIGN_RIGHT;
- adjusting = 0;
- padding = ' ';
- always_sign = 0;
- inpos++; /* skip the '%' */
-
- PRINTF_DEBUG(("sprintf: first looking at '%c', inpos=%d\n",
- format[inpos], inpos));
- if (isascii((int)format[inpos]) && !isalpha((int)format[inpos])) {
- /* first look for argnum */
- temppos = inpos;
- while (isdigit((int)format[temppos])) temppos++;
- if (format[temppos] == '$') {
- argnum = php_sprintf_getnumber(format, &inpos);
-
- if (argnum == 0) {
- efree(result);
- efree(args);
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Zero is not a valid argument number");
- return NULL;
- }
-
- multiuse = 1;
- inpos++; /* skip the '$' */
- } else {
- argnum = currarg++;
- }
-
- argnum += format_offset;
-
- if (argnum >= argc) {
- efree(result);
- efree(args);
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Too few arguments");
- return NULL;
- }
-
- /* after argnum comes modifiers */
- PRINTF_DEBUG(("sprintf: looking for modifiers\n"
- "sprintf: now looking at '%c', inpos=%d\n",
- format[inpos], inpos));
- for (;; inpos++) {
- if (format[inpos] == ' ' || format[inpos] == '0') {
- padding = format[inpos];
- } else if (format[inpos] == '-') {
- alignment = ALIGN_LEFT;
- /* space padding, the default */
- } else if (format[inpos] == '+') {
- always_sign = 1;
- } else if (format[inpos] == '\'') {
- padding = format[++inpos];
- } else {
- PRINTF_DEBUG(("sprintf: end of modifiers\n"));
- break;
- }
- }
- PRINTF_DEBUG(("sprintf: padding='%c'\n", padding));
- PRINTF_DEBUG(("sprintf: alignment=%s\n",
- (alignment == ALIGN_LEFT) ? "left" : "right"));
-
-
- /* after modifiers comes width */
- if (isdigit((int)format[inpos])) {
- PRINTF_DEBUG(("sprintf: getting width\n"));
- width = php_sprintf_getnumber(format, &inpos);
- adjusting |= ADJ_WIDTH;
- } else {
- width = 0;
- }
- PRINTF_DEBUG(("sprintf: width=%d\n", width));
-
- /* after width and argnum comes precision */
- if (format[inpos] == '.') {
- inpos++;
- PRINTF_DEBUG(("sprintf: getting precision\n"));
- if (isdigit((int)format[inpos])) {
- precision = php_sprintf_getnumber(format, &inpos);
- adjusting |= ADJ_PRECISION;
- expprec = 1;
- } else {
- precision = 0;
- }
- } else {
- precision = 0;
- }
- PRINTF_DEBUG(("sprintf: precision=%d\n", precision));
- } else {
- width = precision = 0;
- argnum = currarg++ + format_offset;
- }
-
- if (format[inpos] == 'l') {
- inpos++;
- }
- PRINTF_DEBUG(("sprintf: format character='%c'\n", format[inpos]));
- /* now we expect to find a type specifier */
- if (multiuse) {
- MAKE_STD_ZVAL(tmp);
- *tmp = **(args[argnum]);
- INIT_PZVAL(tmp);
- zval_copy_ctor(tmp);
- } else {
- SEPARATE_ZVAL(args[argnum]);
- tmp = *(args[argnum]);
- }
-
- switch (format[inpos]) {
- case 's': {
- zval *var, var_copy;
- int use_copy;
-
- zend_make_printable_zval(tmp, &var_copy, &use_copy);
- if (use_copy) {
- var = &var_copy;
- } else {
- var = tmp;
- }
- php_sprintf_appendstring(&result, &outpos, &size,
- Z_STRVAL_P(var),
- width, precision, padding,
- alignment,
- Z_STRLEN_P(var),
- 0, expprec, 0);
- if (use_copy) {
- zval_dtor(&var_copy);
- }
- break;
- }
-
- case 'd':
- convert_to_long(tmp);
- php_sprintf_appendint(&result, &outpos, &size,
- Z_LVAL_P(tmp),
- width, padding, alignment,
- always_sign);
- break;
-
- case 'u':
- convert_to_long(tmp);
- php_sprintf_appenduint(&result, &outpos, &size,
- Z_LVAL_P(tmp),
- width, padding, alignment);
- break;
-
- case 'e':
- case 'f':
- /* XXX not done */
- convert_to_double(tmp);
- php_sprintf_appenddouble(&result, &outpos, &size,
- Z_DVAL_P(tmp),
- width, padding, alignment,
- precision, adjusting,
- format[inpos], always_sign
- TSRMLS_CC);
- break;
-
- case 'c':
- convert_to_long(tmp);
- php_sprintf_appendchar(&result, &outpos, &size,
- (char) Z_LVAL_P(tmp) TSRMLS_CC);
- break;
-
- case 'o':
- convert_to_long(tmp);
- php_sprintf_append2n(&result, &outpos, &size,
- Z_LVAL_P(tmp),
- width, padding, alignment, 3,
- hexchars, expprec);
- break;
-
- case 'x':
- convert_to_long(tmp);
- php_sprintf_append2n(&result, &outpos, &size,
- Z_LVAL_P(tmp),
- width, padding, alignment, 4,
- hexchars, expprec);
- break;
-
- case 'X':
- convert_to_long(tmp);
- php_sprintf_append2n(&result, &outpos, &size,
- Z_LVAL_P(tmp),
- width, padding, alignment, 4,
- HEXCHARS, expprec);
- break;
-
- case 'b':
- convert_to_long(tmp);
- php_sprintf_append2n(&result, &outpos, &size,
- Z_LVAL_P(tmp),
- width, padding, alignment, 1,
- hexchars, expprec);
- break;
-
- case '%':
- php_sprintf_appendchar(&result, &outpos, &size, '%' TSRMLS_CC);
-
- break;
- default:
- break;
- }
- if (multiuse) {
- zval_ptr_dtor(&tmp);
- }
- inpos++;
- }
- }
-
- efree(args);
-
- /* possibly, we have to make sure we have room for the terminating null? */
- result[outpos]=0;
- *len = outpos;
- return result;
-}
-/* }}} */
-
-/* {{{ proto string sprintf(string format [, mixed arg1 [, mixed ...]])
- Return a formatted string */
-PHP_FUNCTION(user_sprintf)
-{
- char *result;
- int len;
-
- if ((result=php_formatted_print(ht, &len, 0, 0 TSRMLS_CC))==NULL) {
- RETURN_FALSE;
- }
- RETVAL_STRINGL(result, len, 0);
-}
-/* }}} */
-
-/* {{{ proto string vsprintf(string format, array args)
- Return a formatted string */
-PHP_FUNCTION(vsprintf)
-{
- char *result;
- int len;
-
- if ((result=php_formatted_print(ht, &len, 1, 0 TSRMLS_CC))==NULL) {
- RETURN_FALSE;
- }
- RETVAL_STRINGL(result, len, 0);
-}
-/* }}} */
-
-/* {{{ proto int printf(string format [, mixed arg1 [, mixed ...]])
- Output a formatted string */
-PHP_FUNCTION(user_printf)
-{
- char *result;
- int len;
-
- if ((result=php_formatted_print(ht, &len, 0, 0 TSRMLS_CC))==NULL) {
- RETURN_FALSE;
- }
- PHPWRITE(result, len);
- efree(result);
- RETURN_LONG(len);
-}
-/* }}} */
-
-/* {{{ proto int vprintf(string format, array args)
- Output a formatted string */
-PHP_FUNCTION(vprintf)
-{
- char *result;
- int len;
-
- if ((result=php_formatted_print(ht, &len, 1, 0 TSRMLS_CC))==NULL) {
- RETURN_FALSE;
- }
- PHPWRITE(result, len);
- efree(result);
- RETURN_LONG(len);
-}
-/* }}} */
-
-/* {{{ proto int fprintf(resource stream, string format [, mixed arg1 [, mixed ...]])
- Output a formatted string into a stream */
-PHP_FUNCTION(fprintf)
-{
- php_stream *stream;
- zval **arg1;
- char *result;
- int len;
-
- if (ZEND_NUM_ARGS() < 2) {
- WRONG_PARAM_COUNT;
- }
-
- if (zend_get_parameters_ex(1, &arg1)==FAILURE) {
- RETURN_FALSE;
- }
-
- php_stream_from_zval(stream, arg1);
-
- if ((result=php_formatted_print(ht, &len, 0, 1 TSRMLS_CC))==NULL) {
- RETURN_FALSE;
- }
-
- php_stream_write(stream, result, len);
-
- efree(result);
-
- RETURN_LONG(len);
-}
-
-/* {{{ proto int vfprintf(resource stream, string format, array args)
- Output a formatted string into a stream */
-PHP_FUNCTION(vfprintf)
-{
- php_stream *stream;
- zval **arg1;
- char *result;
- int len;
-
- if (ZEND_NUM_ARGS() != 3) {
- WRONG_PARAM_COUNT;
- }
-
- if (zend_get_parameters_ex(1, &arg1)==FAILURE) {
- RETURN_FALSE;
- }
-
- php_stream_from_zval(stream, arg1);
-
- if ((result=php_formatted_print(ht, &len, 1, 1 TSRMLS_CC))==NULL) {
- RETURN_FALSE;
- }
-
- php_stream_write(stream, result, len);
-
- efree(result);
-
- RETURN_LONG(len);
-}
-
-
-
-/*
- * 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/standard/fsock.c b/ext/standard/fsock.c
deleted file mode 100644
index 35d6dd7e1d..0000000000
--- a/ext/standard/fsock.c
+++ /dev/null
@@ -1,141 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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. |
- +----------------------------------------------------------------------+
- | Authors: Paul Panotzki - Bunyip Information Systems |
- | Jim Winstead <jimw@php.net> |
- | Sascha Schumann <sascha@schumann.cx> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#include "php.h"
-#include "php_globals.h"
-#include <stdlib.h>
-#include <stddef.h>
-#include "php_network.h"
-#include "file.h"
-
-/* {{{ php_fsockopen() */
-
-static void php_fsockopen_stream(INTERNAL_FUNCTION_PARAMETERS, int persistent)
-{
- char *host;
- int host_len;
- long port = -1;
- zval *zerrno = NULL, *zerrstr = NULL;
- double timeout = FG(default_socket_timeout);
- unsigned long conv;
- struct timeval tv;
- char *hashkey = NULL;
- php_stream *stream = NULL;
- int err;
- char *hostname = NULL;
- long hostname_len;
- char *errstr = NULL;
-
- RETVAL_FALSE;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|lzzd", &host, &host_len, &port, &zerrno, &zerrstr, &timeout) == FAILURE) {
- RETURN_FALSE;
- }
-
- if (persistent) {
- spprintf(&hashkey, 0, "pfsockopen__%s:%ld", host, port);
- }
-
- if (port > 0) {
- hostname_len = spprintf(&hostname, 0, "%s:%ld", host, port);
- } else {
- hostname_len = host_len;
- hostname = host;
- }
-
- /* prepare the timeout value for use */
- conv = (unsigned long) (timeout * 1000000.0);
- tv.tv_sec = conv / 1000000;
- tv.tv_usec = conv % 1000000;
-
- if (zerrno) {
- zval_dtor(zerrno);
- ZVAL_LONG(zerrno, 0);
- }
- if (zerrstr) {
- zval_dtor(zerrstr);
- ZVAL_STRING(zerrstr, "", 1);
- }
-
- stream = php_stream_xport_create(hostname, hostname_len, ENFORCE_SAFE_MODE | REPORT_ERRORS,
- STREAM_XPORT_CLIENT | STREAM_XPORT_CONNECT, hashkey, &tv, NULL, &errstr, &err);
-
- if (port > 0) {
- efree(hostname);
- }
- if (stream == NULL) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "unable to connect to %s:%ld (%s)", host, port, errstr == NULL ? "Unknown error" : errstr);
- }
-
- if (hashkey) {
- efree(hashkey);
- }
-
- if (stream == NULL) {
- if (zerrno) {
- zval_dtor(zerrno);
- ZVAL_LONG(zerrno, err);
- }
- if (zerrstr && errstr) {
- /* no need to dup; we need to efree buf anyway */
- zval_dtor(zerrstr);
- ZVAL_STRING(zerrstr, errstr, 0);
- }
- else if (!zerrstr && errstr) {
- efree(errstr);
- }
-
- RETURN_FALSE;
- }
-
- if (errstr) {
- efree(errstr);
- }
-
- php_stream_to_zval(stream, return_value);
-}
-
-/* }}} */
-
-/* {{{ proto resource fsockopen(string hostname, int port [, int errno [, string errstr [, float timeout]]])
- Open Internet or Unix domain socket connection */
-PHP_FUNCTION(fsockopen)
-{
- php_fsockopen_stream(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0);
-}
-/* }}} */
-/* {{{ proto resource pfsockopen(string hostname, int port [, int errno [, string errstr [, float timeout]]])
- Open persistent Internet or Unix domain socket connection */
-PHP_FUNCTION(pfsockopen)
-{
- php_fsockopen_stream(INTERNAL_FUNCTION_PARAM_PASSTHRU, 1);
-}
-/* }}} */
-
-/*
- * 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/standard/fsock.h b/ext/standard/fsock.h
deleted file mode 100644
index e38035a89f..0000000000
--- a/ext/standard/fsock.h
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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. |
- +----------------------------------------------------------------------+
- | Authors: Paul Panotzki - Bunyip Information Systems |
- | Jim Winstead <jimw@php.net> |
- | Wez Furlong |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-/* Synced with php 3.0 revision 1.24 1999-06-18 [ssb] */
-
-#ifndef FSOCK_H
-#define FSOCK_H
-
-#ifdef NETWARE
-#ifdef NEW_LIBC
-#include "sys/timeval.h"
-#else
-#include "netware/time_nw.h" /* For 'timeval' */
-#endif
-#endif
-
-#include "file.h"
-
-#include "php_network.h"
-
-PHP_FUNCTION(fsockopen);
-PHP_FUNCTION(pfsockopen);
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- * vim: sw=4 ts=4
- */
-#endif /* FSOCK_H */
diff --git a/ext/standard/ftok.c b/ext/standard/ftok.c
deleted file mode 100644
index ec270d2f14..0000000000
--- a/ext/standard/ftok.c
+++ /dev/null
@@ -1,71 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Andrew Sitnikov <sitnikov@infonet.ee> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#include "php.h"
-
-#include <sys/types.h>
-
-#ifdef HAVE_SYS_IPC_H
-#include <sys/ipc.h>
-#endif
-
-#if HAVE_FTOK
-/* {{{ proto int ftok(string pathname, string proj)
- Convert a pathname and a project identifier to a System V IPC key */
-PHP_FUNCTION(ftok)
-{
- pval **pathname, **proj;
-
- key_t k;
-
- if(ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &pathname, &proj) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_string_ex(pathname);
- convert_to_string_ex(proj);
-
- if (Z_STRLEN_PP(pathname)==0){
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "First argument invalid");
- RETURN_LONG(-1);
- }
-
- if (Z_STRLEN_PP(proj)!=1){
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Second argument invalid");
- RETURN_LONG(-1);
- }
-
- if ((PG(safe_mode) && (!php_checkuid(Z_STRVAL_PP(pathname), NULL, CHECKUID_CHECK_FILE_AND_DIR))) || php_check_open_basedir(Z_STRVAL_PP(pathname) TSRMLS_CC)) {
- RETURN_LONG(-1);
- }
-
- k = ftok(Z_STRVAL_PP(pathname),Z_STRVAL_PP(proj)[0]);
-
- RETURN_LONG(k);
-}
-/* }}} */
-#endif
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- */
diff --git a/ext/standard/ftp_fopen_wrapper.c b/ext/standard/ftp_fopen_wrapper.c
deleted file mode 100644
index 2ab5e7d283..0000000000
--- a/ext/standard/ftp_fopen_wrapper.c
+++ /dev/null
@@ -1,1173 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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. |
- +----------------------------------------------------------------------+
- | Authors: Rasmus Lerdorf <rasmus@php.net> |
- | Jim Winstead <jimw@php.net> |
- | Hartmut Holzgraefe <hholzgra@php.net> |
- | Sara Golemon <pollita@php.net> |
- +----------------------------------------------------------------------+
- */
-/* $Id$ */
-
-#include "php.h"
-#include "php_globals.h"
-#include "php_network.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <errno.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <fcntl.h>
-
-#ifdef PHP_WIN32
-#include <winsock2.h>
-#define O_RDONLY _O_RDONLY
-#include "win32/param.h"
-#elif defined(NETWARE)
-/*#include <ws2nlm.h>*/
-/*#include <sys/socket.h>*/
-#ifdef NEW_LIBC
-#include <sys/param.h>
-#else
-#include "netware/param.h"
-#endif
-#else
-#include <sys/param.h>
-#endif
-
-#include "php_standard.h"
-
-#include <sys/types.h>
-#if HAVE_SYS_SOCKET_H
-#include <sys/socket.h>
-#endif
-
-#ifdef PHP_WIN32
-#include <winsock2.h>
-#elif defined(NETWARE) && defined(USE_WINSOCK)
-/*#include <ws2nlm.h>*/
-#include <novsock2.h>
-#else
-#include <netinet/in.h>
-#include <netdb.h>
-#if HAVE_ARPA_INET_H
-#include <arpa/inet.h>
-#endif
-#endif
-
-#if defined(PHP_WIN32) || defined(__riscos__) || defined(NETWARE)
-#undef AF_UNIX
-#endif
-
-#if defined(AF_UNIX)
-#include <sys/un.h>
-#endif
-
-#include "php_fopen_wrappers.h"
-
-
-static inline int get_ftp_result(php_stream *stream, char *buffer, size_t buffer_size TSRMLS_DC)
-{
- while (php_stream_gets(stream, buffer, buffer_size-1) &&
- !(isdigit((int) buffer[0]) && isdigit((int) buffer[1]) &&
- isdigit((int) buffer[2]) && buffer[3] == ' '));
- return strtol(buffer, NULL, 10);
-}
-#define GET_FTP_RESULT(stream) get_ftp_result((stream), tmp_line, sizeof(tmp_line) TSRMLS_CC)
-
-#define FTPS_ENCRYPT_DATA 1
-
-static int php_stream_ftp_stream_stat(php_stream_wrapper *wrapper,
- php_stream *stream,
- php_stream_statbuf *ssb
- TSRMLS_DC)
-{
- /* For now, we return with a failure code to prevent the underlying
- * file's details from being used instead. */
- return -1;
-}
-
-
-static int php_stream_ftp_stream_close(php_stream_wrapper *wrapper,
- php_stream *stream
- TSRMLS_DC)
-{
- php_stream *controlstream = (php_stream *)stream->wrapperdata;
-
- if (controlstream) {
- php_stream_write_string(controlstream, "QUIT\r\n");
- php_stream_close(controlstream);
- stream->wrapperdata = NULL;
- }
- return 0;
-}
-
-/* {{{ php_ftp_fopen_connect
- */
-static php_stream *php_ftp_fopen_connect(php_stream_wrapper *wrapper, char *path, char *mode, int options, char **opened_path, php_stream_context *context,
- php_stream **preuseid, php_url **presource, int *puse_ssl, int *puse_ssl_on_data TSRMLS_DC)
-{
- php_stream *stream = NULL, *reuseid = NULL;
- php_url *resource = NULL;
- int result, use_ssl, use_ssl_on_data = 0;
- char *scratch;
- char tmp_line[512];
-
- resource = php_url_parse(path);
- if (resource == NULL || resource->path == NULL) {
- if (resource && presource) {
- *presource = resource;
- }
- return NULL;
- }
-
- use_ssl = resource->scheme && (strlen(resource->scheme) > 3) && resource->scheme[3] == 's';
-
- /* use port 21 if one wasn't specified */
- if (resource->port == 0)
- resource->port = 21;
-
- stream = php_stream_sock_open_host(resource->host, resource->port, SOCK_STREAM, NULL, 0);
- if (stream == NULL) {
- result = 0; /* silence */
- goto connect_errexit;
- }
-
- php_stream_context_set(stream, context);
- php_stream_notify_info(context, PHP_STREAM_NOTIFY_CONNECT, NULL, 0);
-
- /* Start talking to ftp server */
- result = GET_FTP_RESULT(stream);
- if (result > 299 || result < 200) {
- php_stream_notify_error(context, PHP_STREAM_NOTIFY_FAILURE, tmp_line, result);
- goto connect_errexit;
- }
-
- if (use_ssl) {
-
- /* send the AUTH TLS request name */
- php_stream_write_string(stream, "AUTH TLS\r\n");
-
- /* get the response */
- result = GET_FTP_RESULT(stream);
- if (result != 234) {
- /* AUTH TLS not supported try AUTH SSL */
- php_stream_write_string(stream, "AUTH SSL\r\n");
-
- /* get the response */
- result = GET_FTP_RESULT(stream);
- if (result != 334) {
- use_ssl = 0;
- } else {
- /* we must reuse the old SSL session id */
- /* if we talk to an old ftpd-ssl */
- reuseid = stream;
- }
- } else {
- /* encrypt data etc */
-
-
- }
-
- }
-
- if (use_ssl) {
- if (php_stream_xport_crypto_setup(stream,
- STREAM_CRYPTO_METHOD_SSLv23_CLIENT, NULL TSRMLS_CC) < 0
- || php_stream_xport_crypto_enable(stream, 1 TSRMLS_CC) < 0) {
- php_stream_wrapper_log_error(wrapper, options TSRMLS_CC, "Unable to activate SSL mode");
- php_stream_close(stream);
- stream = NULL;
- goto connect_errexit;
- }
-
- /* set PBSZ to 0 */
- php_stream_write_string(stream, "PBSZ 0\r\n");
-
- /* ignore the response */
- result = GET_FTP_RESULT(stream);
-
- /* set data connection protection level */
-#if FTPS_ENCRYPT_DATA
- php_stream_write_string(stream, "PROT P\r\n");
-
- /* get the response */
- result = GET_FTP_RESULT(stream);
- use_ssl_on_data = (result >= 200 && result<=299) || reuseid;
-#else
- php_stream_write_string(stream, "PROT C\r\n");
-
- /* get the response */
- result = GET_FTP_RESULT(stream);
-#endif
- }
-
- /* send the user name */
- php_stream_write_string(stream, "USER ");
- if (resource->user != NULL) {
- php_raw_url_decode(resource->user, strlen(resource->user));
- php_stream_write_string(stream, resource->user);
- } else {
- php_stream_write_string(stream, "anonymous");
- }
- php_stream_write_string(stream, "\r\n");
-
- /* get the response */
- result = GET_FTP_RESULT(stream);
-
- /* if a password is required, send it */
- if (result >= 300 && result <= 399) {
- php_stream_notify_info(context, PHP_STREAM_NOTIFY_AUTH_REQUIRED, tmp_line, 0);
-
- php_stream_write_string(stream, "PASS ");
- if (resource->pass != NULL) {
- php_raw_url_decode(resource->pass, strlen(resource->pass));
- php_stream_write_string(stream, resource->pass);
- } else {
- /* if the user has configured who they are,
- send that as the password */
- if (cfg_get_string("from", &scratch) == SUCCESS) {
- php_stream_write_string(stream, scratch);
- } else {
- php_stream_write_string(stream, "anonymous");
- }
- }
- php_stream_write_string(stream, "\r\n");
-
- /* read the response */
- result = GET_FTP_RESULT(stream);
-
- if (result > 299 || result < 200) {
- php_stream_notify_error(context, PHP_STREAM_NOTIFY_AUTH_RESULT, tmp_line, result);
- } else {
- php_stream_notify_info(context, PHP_STREAM_NOTIFY_AUTH_RESULT, tmp_line, result);
- }
- }
- if (result > 299 || result < 200) {
- goto connect_errexit;
- }
-
- if (puse_ssl) {
- *puse_ssl = use_ssl;
- }
- if (puse_ssl_on_data) {
- *puse_ssl_on_data = use_ssl_on_data;
- }
- if (preuseid) {
- *preuseid = reuseid;
- }
- if (presource) {
- *presource = resource;
- }
-
- return stream;
-
- connect_errexit:
- if (stream) {
- php_stream_close(stream);
- }
-
- return NULL;
-}
-/* }}} */
-
-/* {{{ php_fopen_do_pasv
- */
-static unsigned short php_fopen_do_pasv(php_stream *stream, char *ip, int ip_size, char **phoststart TSRMLS_DC)
-{
- char tmp_line[512];
- int result, i;
- unsigned short portno;
- char *tpath, *ttpath, *hoststart=NULL;
-
- /* We try EPSV first, needed for IPv6 and works on some IPv4 servers */
- php_stream_write_string(stream, "EPSV\r\n");
- result = GET_FTP_RESULT(stream);
-
- /* check if we got a 229 response */
- if (result != 229) {
- /* EPSV failed, let's try PASV */
- php_stream_write_string(stream, "PASV\r\n");
- result = GET_FTP_RESULT(stream);
-
- /* make sure we got a 227 response */
- if (result != 227) {
- return 0;
- }
-
- /* parse pasv command (129, 80, 95, 25, 13, 221) */
- tpath = tmp_line;
- /* skip over the "227 Some message " part */
- for (tpath += 4; *tpath && !isdigit((int) *tpath); tpath++);
- if (!*tpath) {
- return 0;
- }
- /* skip over the host ip, to get the port */
- hoststart = tpath;
- for (i = 0; i < 4; i++) {
- for (; isdigit((int) *tpath); tpath++);
- if (*tpath != ',') {
- return 0;
- }
- *tpath='.';
- tpath++;
- }
- tpath[-1] = '\0';
- memcpy(ip, hoststart, ip_size);
- ip[ip_size-1] = '\0';
- hoststart = ip;
-
- /* pull out the MSB of the port */
- portno = (unsigned short) strtoul(tpath, &ttpath, 10) * 256;
- if (ttpath == NULL) {
- /* didn't get correct response from PASV */
- return 0;
- }
- tpath = ttpath;
- if (*tpath != ',') {
- return 0;
- }
- tpath++;
- /* pull out the LSB of the port */
- portno += (unsigned short) strtoul(tpath, &ttpath, 10);
- } else {
- /* parse epsv command (|||6446|) */
- for (i = 0, tpath = tmp_line + 4; *tpath; tpath++) {
- if (*tpath == '|') {
- i++;
- if (i == 3)
- break;
- }
- }
- if (i < 3) {
- return 0;
- }
- /* pull out the port */
- portno = (unsigned short) strtoul(tpath + 1, &ttpath, 10);
- }
-
- if (ttpath == NULL) {
- /* didn't get correct response from EPSV/PASV */
- return 0;
- }
-
- if (phoststart) {
- *phoststart = hoststart;
- }
-
- return portno;
-}
-/* }}} */
-
-/* {{{ php_fopen_url_wrap_ftp
- */
-php_stream * php_stream_url_wrap_ftp(php_stream_wrapper *wrapper, char *path, char *mode, int options, char **opened_path, php_stream_context *context STREAMS_DC TSRMLS_DC)
-{
- php_stream *stream = NULL, *datastream = NULL;
- php_url *resource = NULL;
- char tmp_line[512];
- char ip[sizeof("123.123.123.123")];
- unsigned short portno;
- char *hoststart = NULL;
- int result = 0, use_ssl, use_ssl_on_data=0;
- php_stream *reuseid=NULL;
- size_t file_size = 0;
- zval **tmpzval;
- int allow_overwrite = 0;
- int read_write = 0;
-
- tmp_line[0] = '\0';
-
- if (strpbrk(mode, "r+")) {
- read_write = 1; /* Open for reading */
- }
- if (strpbrk(mode, "wa+")) {
- if (read_write) {
- php_stream_wrapper_log_error(wrapper, options TSRMLS_CC, "FTP does not support simultaneous read/write connections.");
- return NULL;
- }
- if (strchr(mode, 'a')) {
- read_write = 3; /* Open for Appending */
- } else {
- read_write = 2; /* Open for writting */
- }
- }
- if (!read_write) {
- /* No mode specified? */
- php_stream_wrapper_log_error(wrapper, options TSRMLS_CC, "Unknown file open mode.");
- return NULL;
- }
-
- if (context &&
- php_stream_context_get_option(context, "ftp", "proxy", &tmpzval) == SUCCESS) {
- if (read_write == 1) {
- /* Use http wrapper to proxy ftp request */
- return php_stream_url_wrap_http(wrapper, path, mode, options, opened_path, context STREAMS_CC TSRMLS_CC);
- } else {
- /* ftp proxy is read-only */
- php_stream_wrapper_log_error(wrapper, options TSRMLS_CC, "FTP proxy may only be used in read mode");
- return NULL;
- }
- }
-
- stream = php_ftp_fopen_connect(wrapper, path, mode, options, opened_path, context, &reuseid, &resource, &use_ssl, &use_ssl_on_data TSRMLS_CC);
- if (!stream) {
- goto errexit;
- }
-
- /* set the connection to be binary */
- php_stream_write_string(stream, "TYPE I\r\n");
- result = GET_FTP_RESULT(stream);
- if (result > 299 || result < 200)
- goto errexit;
-
- /* find out the size of the file (verifying it exists) */
- php_stream_write_string(stream, "SIZE ");
- php_stream_write_string(stream, resource->path);
- php_stream_write_string(stream, "\r\n");
-
- /* read the response */
- result = GET_FTP_RESULT(stream);
- if (read_write == 1) {
- /* Read Mode */
- char *sizestr;
-
- /* when reading file, it must exist */
- if (result > 299 || result < 200) {
- errno = ENOENT;
- goto errexit;
- }
-
- sizestr = strchr(tmp_line, ' ');
- if (sizestr) {
- sizestr++;
- file_size = atoi(sizestr);
- php_stream_notify_file_size(context, file_size, tmp_line, result);
- }
- } else if (read_write == 2) {
- /* when writing file (but not appending), it must NOT exist, unless a context option exists which allows it */
- if (context && php_stream_context_get_option(context, "ftp", "overwrite", &tmpzval) == SUCCESS) {
- allow_overwrite = Z_LVAL_PP(tmpzval);
- }
- if (result <= 299 && result >= 200) {
- if (allow_overwrite) {
- /* Context permits overwritting file,
- so we just delete whatever's there in preparation */
- php_stream_write_string(stream, "DELE ");
- php_stream_write_string(stream, resource->path);
- php_stream_write_string(stream, "\r\n");
- result = GET_FTP_RESULT(stream);
- if (result >= 300 || result <= 199) {
- goto errexit;
- }
- } else {
- php_stream_wrapper_log_error(wrapper, options TSRMLS_CC, "Remote file already exists and overwrite context option not specified.");
- errno = EEXIST;
- goto errexit;
- }
- }
- }
-
- /* set up the passive connection */
- portno = php_fopen_do_pasv(stream, ip, sizeof(ip), &hoststart TSRMLS_CC);
-
- if (!portno) {
- goto errexit;
- }
-
- /* Send RETR/STOR command */
- if (read_write == 1) {
- /* set resume position if applicable */
- if (context &&
- php_stream_context_get_option(context, "ftp", "resume_pos", &tmpzval) == SUCCESS &&
- Z_TYPE_PP(tmpzval) == IS_LONG &&
- Z_LVAL_PP(tmpzval) > 0) {
- snprintf(tmp_line, 511, "REST %ld\r\n", Z_LVAL_PP(tmpzval));
- php_stream_write_string(stream, tmp_line);
- result = GET_FTP_RESULT(stream);
- if (result < 300 || result > 399) {
- php_stream_wrapper_log_error(wrapper, options TSRMLS_CC, "Unable to resume from offset %d", Z_LVAL_PP(tmpzval));
- goto errexit;
- }
- }
-
- /* retrieve file */
- php_stream_write_string(stream, "RETR ");
- } else if (read_write == 2) {
- /* Write new file */
- php_stream_write_string(stream, "STOR ");
- } else {
- /* Append */
- php_stream_write_string(stream, "APPE ");
- }
- if (resource->path != NULL) {
- php_stream_write_string(stream, resource->path);
- } else {
- php_stream_write_string(stream, "/");
- }
- php_stream_write_string(stream, "\r\n");
-
- /* open the data channel */
- if (hoststart == NULL) {
- hoststart = resource->host;
- }
- datastream = php_stream_sock_open_host(hoststart, portno, SOCK_STREAM, 0, 0);
- if (datastream == NULL) {
- goto errexit;
- }
-
- result = GET_FTP_RESULT(stream);
- if (result != 150 && result != 125) {
- /* Could not retrieve or send the file
- * this data will only be sent to us after connection on the data port was initiated.
- */
- php_stream_close(datastream);
- datastream = NULL;
- goto errexit;
- }
-
- php_stream_context_set(datastream, context);
- php_stream_notify_progress_init(context, 0, file_size);
-
- if (use_ssl_on_data && (php_stream_xport_crypto_setup(stream,
- STREAM_CRYPTO_METHOD_SSLv23_CLIENT, NULL TSRMLS_CC) < 0 ||
- php_stream_xport_crypto_enable(stream, 1 TSRMLS_CC) < 0)) {
-
- php_stream_wrapper_log_error(wrapper, options TSRMLS_CC, "Unable to activate SSL mode");
- php_stream_close(datastream);
- datastream = NULL;
- goto errexit;
- }
-
- /* remember control stream */
- datastream->wrapperdata = (zval *)stream;
-
- php_url_free(resource);
- return datastream;
-
- errexit:
- if (resource) {
- php_url_free(resource);
- }
- if (stream) {
- php_stream_notify_error(context, PHP_STREAM_NOTIFY_FAILURE, tmp_line, result);
- php_stream_close(stream);
- }
- if (tmp_line[0] != '\0')
- php_stream_wrapper_log_error(wrapper, options TSRMLS_CC, "FTP server reports %s", tmp_line);
- return NULL;
-}
-/* }}} */
-
-/* {{{ php_ftp_dirsteam_read
- */
-static size_t php_ftp_dirstream_read(php_stream *stream, char *buf, size_t count TSRMLS_DC)
-{
- php_stream_dirent *ent = (php_stream_dirent *)buf;
- php_stream *innerstream = (php_stream *)stream->abstract;
- size_t tmp_len;
- char *basename;
- size_t basename_len;
-
- if (count != sizeof(php_stream_dirent)) {
- return 0;
- }
-
- if (php_stream_eof(innerstream)) {
- return 0;
- }
-
- if (!php_stream_get_line(innerstream, ent->d_name, sizeof(ent->d_name), &tmp_len)) {
- return 0;
- }
-
- php_basename(ent->d_name, tmp_len, NULL, 0, &basename, &basename_len TSRMLS_CC);
- if (!basename) {
- return 0;
- }
-
- if (!basename_len) {
- efree(basename);
- return 0;
- }
-
- tmp_len = MIN(sizeof(ent->d_name), basename_len - 1);
- memcpy(ent->d_name, basename, tmp_len);
- ent->d_name[tmp_len] = '\0';
- efree(basename);
-
- /* Trim off trailing whitespace characters */
- tmp_len--;
- while (tmp_len >= 0 &&
- (ent->d_name[tmp_len] == '\n' || ent->d_name[tmp_len] == '\r' ||
- ent->d_name[tmp_len] == '\t' || ent->d_name[tmp_len] == ' ')) {
- ent->d_name[tmp_len--] = '\0';
- }
-
- return sizeof(php_stream_dirent);
-}
-/* }}} */
-
-/* {{{ php_ftp_dirstream_close
- */
-static int php_ftp_dirstream_close(php_stream *stream, int close_handle TSRMLS_DC)
-{
- php_stream *innerstream = (php_stream *)stream->abstract;
-
- if (innerstream->wrapperdata) {
- php_stream_close((php_stream *)innerstream->wrapperdata);
- innerstream->wrapperdata = NULL;
- }
- php_stream_close((php_stream *)stream->abstract);
- stream->abstract = NULL;
-
- return 0;
-}
-/* }}} */
-
-/* ftp dirstreams only need to support read and close operations,
- They can't be rewound because the underlying ftp stream can't be rewound. */
-static php_stream_ops php_ftp_dirstream_ops = {
- NULL, /* write */
- php_ftp_dirstream_read, /* read */
- php_ftp_dirstream_close, /* close */
- NULL, /* flush */
- "ftpdir",
- NULL, /* rewind */
- NULL, /* cast */
- NULL, /* stat */
- NULL /* set option */
-};
-
-/* {{{ php_stream_ftp_opendir
- */
-php_stream * php_stream_ftp_opendir(php_stream_wrapper *wrapper, char *path, char *mode, int options, char **opened_path, php_stream_context *context STREAMS_DC TSRMLS_DC)
-{
- php_stream *stream, *reuseid, *datastream = NULL;
- php_url *resource = NULL;
- int result, use_ssl, use_ssl_on_data = 0;
- char *hoststart = NULL, tmp_line[512];
- char ip[sizeof("123.123.123.123")];
- unsigned short portno;
-
- stream = php_ftp_fopen_connect(wrapper, path, mode, options, opened_path, context, &reuseid, &resource, &use_ssl, &use_ssl_on_data TSRMLS_CC);
- if (!stream) {
- goto opendir_errexit;
- }
-
- /* set the connection to be ascii */
- php_stream_write_string(stream, "TYPE A\r\n");
- result = GET_FTP_RESULT(stream);
- if (result > 299 || result < 200)
- goto opendir_errexit;
-
- /* set up the passive connection */
- portno = php_fopen_do_pasv(stream, ip, sizeof(ip), &hoststart TSRMLS_CC);
-
- if (!portno) {
- goto opendir_errexit;
- }
-
- php_stream_write_string(stream, "NLST ");
- if (resource->path != NULL) {
- php_stream_write_string(stream, resource->path);
- } else {
- php_stream_write_string(stream, "/");
- }
- php_stream_write_string(stream, "\r\n");
-
- /* open the data channel */
- if (hoststart == NULL) {
- hoststart = resource->host;
- }
- datastream = php_stream_sock_open_host(hoststart, portno, SOCK_STREAM, 0, 0);
- if (datastream == NULL) {
- goto opendir_errexit;
- }
-
- result = GET_FTP_RESULT(stream);
- if (result != 150 && result != 125) {
- /* Could not retrieve or send the file
- * this data will only be sent to us after connection on the data port was initiated.
- */
- php_stream_close(datastream);
- datastream = NULL;
- goto opendir_errexit;
- }
-
- php_stream_context_set(datastream, context);
-
- if (use_ssl_on_data && (php_stream_xport_crypto_setup(stream,
- STREAM_CRYPTO_METHOD_SSLv23_CLIENT, NULL TSRMLS_CC) < 0 ||
- php_stream_xport_crypto_enable(stream, 1 TSRMLS_CC) < 0)) {
-
- php_stream_wrapper_log_error(wrapper, options TSRMLS_CC, "Unable to activate SSL mode");
- php_stream_close(datastream);
- datastream = NULL;
- goto opendir_errexit;
- }
-
- /* remember control stream */
- datastream->wrapperdata = (zval *)stream;
-
- php_url_free(resource);
- return php_stream_alloc(&php_ftp_dirstream_ops, datastream, 0, mode);
-
- opendir_errexit:
- if (resource) {
- php_url_free(resource);
- }
- if (stream) {
- php_stream_notify_error(context, PHP_STREAM_NOTIFY_FAILURE, tmp_line, result);
- php_stream_close(stream);
- }
- if (tmp_line[0] != '\0')
- php_stream_wrapper_log_error(wrapper, options TSRMLS_CC, "FTP server reports %s", tmp_line);
- return NULL;
-}
-/* }}} */
-
-/* {{{ php_stream_ftp_url_stat
- */
-static int php_stream_ftp_url_stat(php_stream_wrapper *wrapper, char *url, int flags, php_stream_statbuf *ssb, php_stream_context *context TSRMLS_DC)
-{
- php_stream *stream = NULL;
- php_url *resource = NULL;
- int result;
- char tmp_line[512];
-
- /* If ssb is NULL then someone is misbehaving */
- if (!ssb) return -1;
-
- stream = php_ftp_fopen_connect(wrapper, url, "r", 0, NULL, context, NULL, &resource, NULL, NULL TSRMLS_CC);
- if (!stream) {
- goto stat_errexit;
- }
-
- ssb->sb.st_mode = 0644; /* FTP won't give us a valid mode, so aproximate one based on being readable */
- php_stream_write_string(stream, "CWD "); /* If we can CWD to it, it's a directory (maybe a link, but we can't tell) */
- php_stream_write_string(stream, resource->path);
- php_stream_write_string(stream, "\r\n");
- result = GET_FTP_RESULT(stream);
- if (result < 200 || result > 299) {
- ssb->sb.st_mode |= S_IFREG;
- } else {
- ssb->sb.st_mode |= S_IFDIR;
- }
-
- php_stream_write_string(stream, "SIZE ");
- if (resource->path != NULL) {
- php_stream_write_string(stream, resource->path);
- } else {
- php_stream_write_string(stream, "/");
- }
- php_stream_write_string(stream, "\r\n");
- result = GET_FTP_RESULT(stream);
- if (result < 200 || result > 299) {
- /* Failure either means it doesn't exist
- or it's a directory and this server
- fails on listing directory sizes */
- if (ssb->sb.st_mode & S_IFDIR) {
- ssb->sb.st_size = 0;
- } else {
- goto stat_errexit;
- }
- } else {
- ssb->sb.st_size = atoi(tmp_line + 4);
- }
-
- php_stream_write_string(stream, "MDTM ");
- if (resource->path != NULL) {
- php_stream_write_string(stream, resource->path);
- } else {
- php_stream_write_string(stream, "/");
- }
- php_stream_write_string(stream, "\r\n");
- result = GET_FTP_RESULT(stream);
- if (result == 213) {
- char *p = tmp_line + 4;
- int n;
- struct tm tm, tmbuf, *gmt;
- time_t stamp;
-
- while (p - tmp_line < sizeof(tmp_line) && !isdigit(*p)) {
- p++;
- }
-
- if (p - tmp_line > sizeof(tmp_line)) {
- goto mdtm_error;
- }
-
- n = sscanf(p, "%4u%2u%2u%2u%2u%2u", &tm.tm_year, &tm.tm_mon, &tm.tm_mday, &tm.tm_hour, &tm.tm_min, &tm.tm_sec);
- if (n != 6) {
- goto mdtm_error;
- }
-
- tm.tm_year -= 1900;
- tm.tm_mon--;
- tm.tm_isdst = -1;
-
- /* figure out the GMT offset */
- stamp = time(NULL);
- gmt = php_gmtime_r(&stamp, &tmbuf);
- gmt->tm_isdst = -1;
-
- /* apply the GMT offset */
- tm.tm_sec += stamp - mktime(gmt);
- tm.tm_isdst = gmt->tm_isdst;
-
- ssb->sb.st_mtime = mktime(&tm);
- } else {
- /* error or unsupported command */
- mdtm_error:
- ssb->sb.st_mtime = -1;
- }
-
- ssb->sb.st_ino = 0; /* Unknown values */
- ssb->sb.st_dev = 0;
- ssb->sb.st_uid = 0;
- ssb->sb.st_gid = 0;
- ssb->sb.st_atime = -1;
- ssb->sb.st_ctime = -1;
- ssb->sb.st_nlink = 1;
- ssb->sb.st_rdev = -1;
-#ifdef HAVE_ST_BLKSIZE
- ssb->sb.st_blksize = 4096; /* Guess since FTP won't expose this information */
-#ifdef HAVE_ST_BLOCKS
- ssb->sb.st_blocks = (int)((4095 + ssb->sb.st_size) / ssb->sb.st_blksize); /* emulate ceil */
-#endif
-#endif
- php_stream_close(stream);
- php_url_free(resource);
- return 0;
-
- stat_errexit:
- if (resource) {
- php_url_free(resource);
- }
- if (stream) {
- php_stream_close(stream);
- }
- return -1;
-}
-/* }}} */
-
-/* {{{ php_stream_ftp_unlink
- */
-static int php_stream_ftp_unlink(php_stream_wrapper *wrapper, char *url, int options, php_stream_context *context TSRMLS_DC)
-{
- php_stream *stream = NULL;
- php_url *resource = NULL;
- int result;
- char tmp_line[512];
-
- stream = php_ftp_fopen_connect(wrapper, url, "r", 0, NULL, NULL, NULL, &resource, NULL, NULL TSRMLS_CC);
- if (!stream) {
- if (options & REPORT_ERRORS) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to connect to %s", url);
- }
- goto unlink_errexit;
- }
-
- if (resource->path == NULL) {
- if (options & REPORT_ERRORS) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid path provided in %s", url);
- }
- goto unlink_errexit;
- }
-
- /* Attempt to delete the file */
- php_stream_write_string(stream, "DELE ");
- php_stream_write_string(stream, resource->path);
- php_stream_write_string(stream, "\r\n");
-
- result = GET_FTP_RESULT(stream);
- if (result < 200 || result > 299) {
- if (options & REPORT_ERRORS) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Error Deleting file: %s", tmp_line);
- }
- goto unlink_errexit;
- }
-
- php_url_free(resource);
- php_stream_close(stream);
- return 1;
-
- unlink_errexit:
- if (resource) {
- php_url_free(resource);
- }
- if (stream) {
- php_stream_close(stream);
- }
- return 0;
-}
-/* }}} */
-
-/* {{{ php_stream_ftp_rename
- */
-static int php_stream_ftp_rename(php_stream_wrapper *wrapper, char *url_from, char *url_to, int options, php_stream_context *context TSRMLS_DC)
-{
- php_stream *stream = NULL;
- php_url *resource_from = NULL, *resource_to = NULL;
- int result;
- char tmp_line[512];
-
- resource_from = php_url_parse(url_from);
- resource_to = php_url_parse(url_to);
- /* Must be same scheme (ftp/ftp or ftps/ftps), same host, and same port
- (or a 21/0 0/21 combination which is also "same")
- Also require paths to/from */
- if (!resource_from ||
- !resource_to ||
- !resource_from->scheme ||
- !resource_to->scheme ||
- strcmp(resource_from->scheme, resource_to->scheme) ||
- !resource_from->host ||
- !resource_to->host ||
- strcmp(resource_from->host, resource_to->host) ||
- (resource_from->port != resource_to->port &&
- resource_from->port * resource_to->port != 0 &&
- resource_from->port + resource_to->port != 21) ||
- !resource_from->path ||
- !resource_to->path) {
- goto rename_errexit;
- }
-
- stream = php_ftp_fopen_connect(wrapper, url_from, "r", 0, NULL, NULL, NULL, NULL, NULL, NULL TSRMLS_CC);
- if (!stream) {
- if (options & REPORT_ERRORS) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to connect to %s", resource_from->host);
- }
- goto rename_errexit;
- }
-
- /* Rename FROM */
- php_stream_write_string(stream, "RNFR ");
- php_stream_write_string(stream, resource_from->path);
- php_stream_write_string(stream, "\r\n");
-
- result = GET_FTP_RESULT(stream);
- if (result < 300 || result > 399) {
- if (options & REPORT_ERRORS) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Error Renaming file: %s", tmp_line);
- }
- goto rename_errexit;
- }
-
- /* Rename TO */
- php_stream_write_string(stream, "RNTO ");
- php_stream_write_string(stream, resource_to->path);
- php_stream_write_string(stream, "\r\n");
-
- result = GET_FTP_RESULT(stream);
- if (result < 200 || result > 299) {
- if (options & REPORT_ERRORS) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Error Renaming file: %s", tmp_line);
- }
- goto rename_errexit;
- }
-
- php_url_free(resource_from);
- php_url_free(resource_to);
- php_stream_close(stream);
- return 1;
-
- rename_errexit:
- if (resource_from) {
- php_url_free(resource_from);
- }
- if (resource_to) {
- php_url_free(resource_to);
- }
- if (stream) {
- php_stream_close(stream);
- }
- return 0;
-}
-/* }}} */
-
-/* {{{ php_stream_ftp_mkdir
- */
-static int php_stream_ftp_mkdir(php_stream_wrapper *wrapper, char *url, int mode, int options, php_stream_context *context TSRMLS_DC)
-{
- php_stream *stream = NULL;
- php_url *resource = NULL;
- int result, recursive = options & PHP_STREAM_MKDIR_RECURSIVE;
- char tmp_line[512];
-
- stream = php_ftp_fopen_connect(wrapper, url, "r", 0, NULL, NULL, NULL, &resource, NULL, NULL TSRMLS_CC);
- if (!stream) {
- if (options & REPORT_ERRORS) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to connect to %s", url);
- }
- goto mkdir_errexit;
- }
-
- if (resource->path == NULL) {
- if (options & REPORT_ERRORS) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid path provided in %s", url);
- }
- goto mkdir_errexit;
- }
-
- if (!recursive) {
- php_stream_printf(stream TSRMLS_CC, "MKD %s\r\n", resource->path);
- result = GET_FTP_RESULT(stream);
- } else {
- /* we look for directory separator from the end of string, thus hopefuly reducing our work load */
- char *p, *e, *buf;
-
- buf = estrdup(resource->path);
- e = buf + strlen(buf);
-
- /* find a top level directory we need to create */
- while ((p = strrchr(buf, '/'))) {
- *p = '\0';
- php_stream_printf(stream TSRMLS_CC, "CWD %s\r\n", buf);
- result = GET_FTP_RESULT(stream);
- if (result >= 200 && result <= 299) {
- *p = '/';
- break;
- }
- }
- if (p == buf) {
- php_stream_printf(stream TSRMLS_CC, "MKD %s\r\n", resource->path);
- result = GET_FTP_RESULT(stream);
- } else {
- php_stream_printf(stream TSRMLS_CC, "MKD %s\r\n", buf);
- result = GET_FTP_RESULT(stream);
- if (result >= 200 && result <= 299) {
- if (!p) {
- p = buf;
- }
- /* create any needed directories if the creation of the 1st directory worked */
- while (++p != e) {
- if (*p == '\0' && *(p + 1) != '\0') {
- *p = '/';
- php_stream_printf(stream TSRMLS_CC, "MKD %s\r\n", buf);
- result = GET_FTP_RESULT(stream);
- if (result < 200 || result > 299) {
- if (options & REPORT_ERRORS) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", tmp_line);
- }
- break;
- }
- }
- }
- }
- }
- efree(buf);
- }
-
- php_url_free(resource);
- php_stream_close(stream);
-
- if (result < 200 || result > 299) {
- /* Failure */
- return 0;
- }
-
- return 1;
-
- mkdir_errexit:
- if (resource) {
- php_url_free(resource);
- }
- if (stream) {
- php_stream_close(stream);
- }
- return 0;
-}
-/* }}} */
-
-/* {{{ php_stream_ftp_rmdir
- */
-static int php_stream_ftp_rmdir(php_stream_wrapper *wrapper, char *url, int options, php_stream_context *context TSRMLS_DC)
-{
- php_stream *stream = NULL;
- php_url *resource = NULL;
- int result;
- char tmp_line[512];
-
- stream = php_ftp_fopen_connect(wrapper, url, "r", 0, NULL, NULL, NULL, &resource, NULL, NULL TSRMLS_CC);
- if (!stream) {
- if (options & REPORT_ERRORS) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to connect to %s", url);
- }
- goto rmdir_errexit;
- }
-
- if (resource->path == NULL) {
- if (options & REPORT_ERRORS) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid path provided in %s", url);
- }
- goto rmdir_errexit;
- }
-
- php_stream_printf(stream TSRMLS_CC, "RMD %s\r\n", resource->path);
- result = GET_FTP_RESULT(stream);
-
- if (result < 200 || result > 299) {
- if (options & REPORT_ERRORS) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", tmp_line);
- }
- goto rmdir_errexit;
- }
-
- php_url_free(resource);
- php_stream_close(stream);
-
- return 1;
-
- rmdir_errexit:
- if (resource) {
- php_url_free(resource);
- }
- if (stream) {
- php_stream_close(stream);
- }
- return 0;
-}
-/* }}} */
-
-static php_stream_wrapper_ops ftp_stream_wops = {
- php_stream_url_wrap_ftp,
- php_stream_ftp_stream_close, /* stream_close */
- php_stream_ftp_stream_stat,
- php_stream_ftp_url_stat, /* stat_url */
- php_stream_ftp_opendir, /* opendir */
- "ftp",
- php_stream_ftp_unlink, /* unlink */
- php_stream_ftp_rename, /* rename */
- php_stream_ftp_mkdir, /* mkdir */
- php_stream_ftp_rmdir /* rmdir */
-};
-
-PHPAPI php_stream_wrapper php_stream_ftp_wrapper = {
- &ftp_stream_wops,
- NULL,
- 1 /* is_url */
-};
-
-
-/*
- * 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/standard/head.c b/ext/standard/head.c
deleted file mode 100644
index 8ece988ab8..0000000000
--- a/ext/standard/head.c
+++ /dev/null
@@ -1,269 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Rasmus Lerdorf <rasmus@lerdorf.on.ca> |
- +----------------------------------------------------------------------+
- */
-/* $Id$ */
-
-#include <stdio.h>
-
-#if defined(NETWARE) && !defined(NEW_LIBC)
-#include <sys/socket.h>
-#endif
-
-#include "php.h"
-#include "ext/standard/php_standard.h"
-#include "SAPI.h"
-#include "php_main.h"
-#include "head.h"
-#include "SAPI.h"
-#ifdef TM_IN_SYS_TIME
-#include <sys/time.h>
-#else
-#include <time.h>
-#endif
-
-#include "php_globals.h"
-#include "safe_mode.h"
-
-
-/* Implementation of the language Header() function */
-/* {{{ proto void header(string header [, bool replace, [int http_response_code]])
- Sends a raw HTTP header */
-PHP_FUNCTION(header)
-{
- zend_bool rep = 1;
- sapi_header_line ctr = {0};
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|bl", &ctr.line,
- &ctr.line_len, &rep, &ctr.response_code) == FAILURE)
- return;
-
- sapi_header_op(rep ? SAPI_HEADER_REPLACE:SAPI_HEADER_ADD, &ctr TSRMLS_CC);
-}
-/* }}} */
-
-PHPAPI int php_header(TSRMLS_D)
-{
- if (sapi_send_headers(TSRMLS_C)==FAILURE || SG(request_info).headers_only) {
- return 0; /* don't allow output */
- } else {
- return 1; /* allow output */
- }
-}
-
-
-PHPAPI int php_setcookie(char *name, int name_len, char *value, int value_len, time_t expires, char *path, int path_len, char *domain, int domain_len, int secure, int url_encode TSRMLS_DC)
-{
- char *cookie, *encoded_value = NULL;
- int len=sizeof("Set-Cookie: ");
- time_t t;
- char *dt;
- sapi_header_line ctr = {0};
- 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 );
- 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 );
- return FAILURE;
- }
-
- len += name_len;
- if (value && url_encode) {
- int encoded_value_len;
-
- encoded_value = php_url_encode(value, value_len, &encoded_value_len);
- len += encoded_value_len;
- } else if ( value ) {
- encoded_value = estrdup(value);
- len += value_len;
- }
- if (path) {
- len += path_len;
- }
- if (domain) {
- len += domain_len;
- }
- cookie = emalloc(len + 100);
-
- if (value && value_len == 0) {
- /*
- * MSIE doesn't delete a cookie when you set it to a null value
- * so in order to force cookies to be deleted, even on MSIE, we
- * pick an expiry date 1 year and 1 second in the past
- */
- t = time(NULL) - 31536001;
- dt = php_std_date(t TSRMLS_CC);
- sprintf(cookie, "Set-Cookie: %s=deleted; expires=%s", name, dt);
- efree(dt);
- } else {
- sprintf(cookie, "Set-Cookie: %s=%s", name, value ? encoded_value : "");
- if (expires > 0) {
- strcat(cookie, "; expires=");
- dt = php_std_date(expires TSRMLS_CC);
- strcat(cookie, dt);
- efree(dt);
- }
- }
-
- if (encoded_value) {
- efree(encoded_value);
- }
-
- if (path && path_len > 0) {
- strcat(cookie, "; path=");
- strcat(cookie, path);
- }
- if (domain && domain_len > 0) {
- strcat(cookie, "; domain=");
- strcat(cookie, domain);
- }
- if (secure) {
- strcat(cookie, "; secure");
- }
-
- ctr.line = cookie;
- ctr.line_len = strlen(cookie);
-
- result = sapi_header_op(SAPI_HEADER_ADD, &ctr TSRMLS_CC);
- efree(cookie);
- return result;
-}
-
-
-/* php_set_cookie(name, value, expires, path, domain, secure) */
-/* {{{ proto bool setcookie(string name [, string value [, int expires [, string path [, string domain [, bool secure]]]]])
- Send a cookie */
-PHP_FUNCTION(setcookie)
-{
- char *name, *value = NULL, *path = NULL, *domain = NULL;
- long expires = 0;
- zend_bool secure = 0;
- int name_len, value_len, path_len, domain_len;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|slssb", &name,
- &name_len, &value, &value_len, &expires, &path,
- &path_len, &domain, &domain_len, &secure) == FAILURE) {
- return;
- }
-
- if (php_setcookie(name, name_len, value, value_len, expires, path, path_len, domain, domain_len, secure, 1 TSRMLS_CC) == SUCCESS) {
- RETVAL_TRUE;
- } else {
- RETVAL_FALSE;
- }
-}
-/* }}} */
-
-/* {{{ proto bool setrawcookie(string name [, string value [, int expires [, string path [, string domain [, bool secure]]]]])
- Send a cookie with no url encoding of the value */
-PHP_FUNCTION(setrawcookie)
-{
- char *name, *value = NULL, *path = NULL, *domain = NULL;
- long expires = 0;
- zend_bool secure = 0;
- int name_len, value_len, path_len, domain_len;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|slssb", &name,
- &name_len, &value, &value_len, &expires, &path,
- &path_len, &domain, &domain_len, &secure) == FAILURE) {
- return;
- }
-
- if (php_setcookie(name, name_len, value, value_len, expires, path, path_len, domain, domain_len, secure, 0 TSRMLS_CC) == SUCCESS) {
- RETVAL_TRUE;
- } else {
- RETVAL_FALSE;
- }
-}
-/* }}} */
-
-
-/* {{{ proto bool headers_sent([string &$file [, int &$line]])
- Returns true if headers have already been sent, false otherwise */
-PHP_FUNCTION(headers_sent)
-{
- zval *arg1, *arg2;
- char *file="";
- int line=0;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|zz", &arg1, &arg2) == FAILURE)
- return;
-
- if (SG(headers_sent)) {
- line = php_get_output_start_lineno(TSRMLS_C);
- file = php_get_output_start_filename(TSRMLS_C);
- }
-
- switch(ZEND_NUM_ARGS()) {
- case 2:
- zval_dtor(arg2);
- ZVAL_LONG(arg2, line);
- case 1:
- zval_dtor(arg1);
- if (file) {
- ZVAL_STRING(arg1, file, 1);
- } else {
- ZVAL_STRING(arg1, "", 1);
- }
- break;
- }
-
- if (SG(headers_sent)) {
- RETURN_TRUE;
- } else {
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-/* {{{ php_head_apply_header_list_to_hash
- Turn an llist of sapi_header_struct headers into a numerically indexed zval hash */
-static void php_head_apply_header_list_to_hash(void *data, void *arg TSRMLS_DC)
-{
- sapi_header_struct *sapi_header = (sapi_header_struct *)data;
-
- if (arg && sapi_header) {
- add_next_index_string((zval *)arg, (char *)(sapi_header->header), 1);
- }
-}
-
-/* {{{ proto array headers_list(void)
- Return list of headers to be sent / already sent */
-PHP_FUNCTION(headers_list)
-{
- if (ZEND_NUM_ARGS() > 0) {
- WRONG_PARAM_COUNT;
- }
-
- if (!&SG(sapi_headers).headers) {
- RETURN_FALSE;
- }
- array_init(return_value);
- zend_llist_apply_with_argument(&SG(sapi_headers).headers, php_head_apply_header_list_to_hash, return_value TSRMLS_CC);
-}
-/* }}} */
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * vim600: sw=4 ts=4 fdm=marker
- * vim<600: sw=4 ts=4 * End:
- */
diff --git a/ext/standard/head.h b/ext/standard/head.h
deleted file mode 100644
index 2f14e73f09..0000000000
--- a/ext/standard/head.h
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Rasmus Lerdorf <rasmus@lerdorf.on.ca> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifndef HEAD_H
-#define HEAD_H
-
-extern PHP_RINIT_FUNCTION(head);
-PHP_FUNCTION(header);
-PHP_FUNCTION(setcookie);
-PHP_FUNCTION(setrawcookie);
-PHP_FUNCTION(headers_sent);
-PHP_FUNCTION(headers_list);
-
-PHPAPI int php_header(TSRMLS_D);
-PHPAPI int php_setcookie(char *name, int name_len, char *value, int value_len, time_t expires, char *path, int path_len, char *domain, int domain_len, int secure, int url_encode TSRMLS_DC);
-
-#endif
diff --git a/ext/standard/html.c b/ext/standard/html.c
deleted file mode 100644
index e3a38c3d15..0000000000
--- a/ext/standard/html.c
+++ /dev/null
@@ -1,1293 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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. |
- +----------------------------------------------------------------------+
- | Authors: Rasmus Lerdorf <rasmus@php.net> |
- | Jaakko Hyvätti <jaakko.hyvatti@iki.fi> |
- | Wez Furlong <wez@thebrainroom.com> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-/*
- * HTML entity resources:
- *
- * http://msdn.microsoft.com/workshop/author/dhtml/reference/charsets/charset2.asp
- * http://msdn.microsoft.com/workshop/author/dhtml/reference/charsets/charset3.asp
- * http://www.unicode.org/Public/MAPPINGS/OBSOLETE/UNI2SGML.TXT
- *
- */
-
-#include "php.h"
-#if PHP_WIN32
-#include "config.w32.h"
-#elif defined NETWARE
-#include "config.nw.h"
-#else
-#include "php_config.h"
-#endif
-#include "reg.h"
-#include "html.h"
-#include "php_string.h"
-#include "SAPI.h"
-#if HAVE_LOCALE_H
-#include <locale.h>
-#endif
-#if HAVE_LANGINFO_H
-#include <langinfo.h>
-#endif
-
-#if HAVE_MBSTRING
-# include "ext/mbstring/mbstring.h"
-ZEND_EXTERN_MODULE_GLOBALS(mbstring)
-#endif
-
-enum entity_charset { cs_terminator, cs_8859_1, cs_cp1252,
- cs_8859_15, cs_utf_8, cs_big5, cs_gb2312,
- cs_big5hkscs, cs_sjis, cs_eucjp, cs_koi8r,
- cs_cp1251, cs_8859_5, cs_cp866, cs_macroman
- };
-typedef const char *entity_table_t;
-
-/* codepage 1252 is a Windows extension to iso-8859-1. */
-static entity_table_t ent_cp_1252[] = {
- "euro", NULL, "sbquo", "fnof", "bdquo", "hellip", "dagger",
- "Dagger", "circ", "permil", "Scaron", "lsaquo", "OElig",
- NULL, NULL, NULL, NULL, "lsquo", "rsquo", "ldquo", "rdquo",
- "bull", "ndash", "mdash", "tilde", "trade", "scaron", "rsaquo",
- "oelig", NULL, NULL, "Yuml"
-};
-
-static entity_table_t ent_iso_8859_1[] = {
- "nbsp", "iexcl", "cent", "pound", "curren", "yen", "brvbar",
- "sect", "uml", "copy", "ordf", "laquo", "not", "shy", "reg",
- "macr", "deg", "plusmn", "sup2", "sup3", "acute", "micro",
- "para", "middot", "cedil", "sup1", "ordm", "raquo", "frac14",
- "frac12", "frac34", "iquest", "Agrave", "Aacute", "Acirc",
- "Atilde", "Auml", "Aring", "AElig", "Ccedil", "Egrave",
- "Eacute", "Ecirc", "Euml", "Igrave", "Iacute", "Icirc",
- "Iuml", "ETH", "Ntilde", "Ograve", "Oacute", "Ocirc", "Otilde",
- "Ouml", "times", "Oslash", "Ugrave", "Uacute", "Ucirc", "Uuml",
- "Yacute", "THORN", "szlig", "agrave", "aacute", "acirc",
- "atilde", "auml", "aring", "aelig", "ccedil", "egrave",
- "eacute", "ecirc", "euml", "igrave", "iacute", "icirc",
- "iuml", "eth", "ntilde", "ograve", "oacute", "ocirc", "otilde",
- "ouml", "divide", "oslash", "ugrave", "uacute", "ucirc",
- "uuml", "yacute", "thorn", "yuml"
-};
-
-static entity_table_t ent_iso_8859_15[] = {
- "nbsp", "iexcl", "cent", "pound", "euro", "yen", "Scaron",
- "sect", "scaron", "copy", "ordf", "laquo", "not", "shy", "reg",
- "macr", "deg", "plusmn", "sup2", "sup3", NULL, /* Zcaron */
- "micro", "para", "middot", NULL, /* zcaron */ "sup1", "ordm",
- "raquo", "OElig", "oelig", "Yuml", "iquest", "Agrave", "Aacute",
- "Acirc", "Atilde", "Auml", "Aring", "AElig", "Ccedil", "Egrave",
- "Eacute", "Ecirc", "Euml", "Igrave", "Iacute", "Icirc",
- "Iuml", "ETH", "Ntilde", "Ograve", "Oacute", "Ocirc", "Otilde",
- "Ouml", "times", "Oslash", "Ugrave", "Uacute", "Ucirc", "Uuml",
- "Yacute", "THORN", "szlig", "agrave", "aacute", "acirc",
- "atilde", "auml", "aring", "aelig", "ccedil", "egrave",
- "eacute", "ecirc", "euml", "igrave", "iacute", "icirc",
- "iuml", "eth", "ntilde", "ograve", "oacute", "ocirc", "otilde",
- "ouml", "divide", "oslash", "ugrave", "uacute", "ucirc",
- "uuml", "yacute", "thorn", "yuml"
-};
-
-static entity_table_t ent_uni_338_402[] = {
- /* 338 */
- "OElig", "oelig", NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL,
- /* 352 */
- "Scaron", "scaron",
- /* 354 - 375 */
- NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- /* 376 */
- "Yuml",
- /* 377 - 401 */
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- /* 402 */
- "fnof"
-};
-
-static entity_table_t ent_uni_spacing[] = {
- /* 710 */
- "circ",
- /* 711 - 731 */
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- /* 732 */
- "tilde",
-};
-
-static entity_table_t ent_uni_greek[] = {
- /* 913 */
- "Alpha", "Beta", "Gamma", "Delta", "Epsilon", "Zeta", "Eta", "Theta",
- "Iota", "Kappa", "Lambda", "Mu", "Nu", "Xi", "Omicron", "Pi", "Rho",
- NULL, "Sigma", "Tau", "Upsilon", "Phi", "Chi", "Psi", "Omega",
- /* 938 - 944 are not mapped */
- NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- "alpha", "beta", "gamma", "delta", "epsilon", "zeta", "eta", "theta",
- "iota", "kappa", "lambda", "mu", "nu", "xi", "omicron", "pi", "rho",
- "sigmaf", "sigma", "tau", "upsilon", "phi", "chi", "psi", "omega",
- /* 970 - 976 are not mapped */
- NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- "thetasym", "ups1h",
- NULL, NULL, NULL,
- "p1v"
-};
-
-static entity_table_t ent_uni_punct[] = {
- /* 8194 */
- "ensp", "emsp", NULL, NULL, NULL, NULL, NULL,
- "thinsp", NULL, NULL, "zwnj", "zwj", "lrm", "rlm",
- NULL, NULL, NULL, "ndash", "mdash", NULL, NULL, NULL,
- /* 8216 */
- "lsquo", "rsquo", "sbquo", NULL, "ldquo", "rdquo", "bdquo", NULL,
- "dagger", "Dagger", "bull", NULL, NULL, NULL, "hellip",
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, "permil", NULL,
- /* 8242 */
- "prime", "Prime", NULL, NULL, NULL, NULL, NULL, "lsaquo", "rsaquo", NULL,
- NULL, NULL, "oline", NULL, NULL, NULL, NULL, NULL,
- "frasl"
-};
-
-static entity_table_t ent_uni_euro[] = {
- "euro"
-};
-
-static entity_table_t ent_uni_8465_8501[] = {
- /* 8465 */
- "image", NULL, NULL, NULL, NULL, NULL, NULL,
- /* 8472 */
- "weierp", NULL, NULL, NULL,
- /* 8476 */
- "real", NULL, NULL, NULL, NULL, NULL,
- /* 8482 */
- "trade", NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- /* 8501 */
- "alefsym",
-};
-
-static entity_table_t ent_uni_8592_9002[] = {
- /* 8592 (0x2190) */
- "larr", "uarr", "rarr", "darr", "harr", NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- /* 8608 (0x21a0) */
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- /* 8624 (0x21b0) */
- NULL, NULL, NULL, NULL, "crarr", NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- /* 8640 (0x21c0) */
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- /* 8656 (0x21d0) */
- "lArr", "uArr", "rArr", "dArr", "hArr", "vArr", NULL, NULL,
- NULL, NULL, "lAarr", "rAarr", NULL, "rarrw", NULL, NULL,
- /* 8672 (0x21e0) */
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- /* 8704 (0x2200) */
- "forall", "comp", "part", "exist", "nexist", "empty", NULL, "nabla",
- "isin", "notin", "epsis", NULL, "ni", "bepsi", NULL, "prod",
- /* 8720 (0x2210) */
- "coprod", "sum", "minus", "mnplus", "plusdo", NULL, "setmn", NULL,
- "compfn", NULL, "radic", NULL, NULL, "prop", "infin", "ang90",
- /* 8736 (0x2220) */
- "ang", "angmsd", "angsph", "mid", "nmid", "par", "npar", "and",
- "or", "cap", "cup", "int", NULL, NULL, "conint", NULL,
- /* 8752 (0x2230) */
- NULL, NULL, NULL, NULL, "there4", "becaus", NULL, NULL,
- NULL, NULL, NULL, NULL, "sim", "bsim", NULL, NULL,
- /* 8768 (0x2240) */
- "wreath", "nsim", NULL, "sime", "nsime", "cong", NULL, "ncong",
- "ap", "nap", "ape", NULL, "bcong", "asymp", "bump", "bumpe",
- /* 8784 (0x2250) */
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- /* 8800 (0x2260) */
- "ne", "equiv", NULL, NULL, "le", "ge", "lE", "gE",
- "lnE", "gnE", "Lt", "Gt", "twixt", NULL, "nlt", "ngt",
- /* 8816 (0x2270) */
- "nles", "nges", "lsim", "gsim", NULL, NULL, "lg", "gl",
- NULL, NULL, "pr", "sc", "cupre", "sscue", "prsim", "scsim",
- /* 8832 (0x2280) */
- "npr", "nsc", "sub", "sup", "nsub", "nsup", "sube", "supe",
- /* 8840 - 8852 */
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- /* 8853 */
- "oplus", NULL, "otimes",
- /* 8856 - 8868 */
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- /* 8869 */
- "perp",
- /* 8870 - 8901 */
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL,
- /* 8901 */
- "sdot",
- /* 8902 - 8967 */
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL,
- /* 8968 */
- "lceil", "rceil", "lfloor", "rfloor",
- /* 8969 - 9000 */
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL,
- /* 9001 */
- "lang", "rang",
-};
-
-static entity_table_t ent_uni_9674[] = {
- /* 9674 */
- "loz"
-};
-
-static entity_table_t ent_uni_9824_9830[] = {
- /* 9824 */
- "spades", NULL, NULL, "clubs", NULL, "hearts", "diams"
-};
-
-static entity_table_t ent_koi8r[] = {
- "#1105", /* "jo "*/
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, "#1025", /* "JO" */
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- "#1102", "#1072", "#1073", "#1094", "#1076", "#1077", "#1092",
- "#1075", "#1093", "#1080", "#1081", "#1082", "#1083", "#1084",
- "#1085", "#1086", "#1087", "#1103", "#1088", "#1089", "#1090",
- "#1091", "#1078", "#1074", "#1100", "#1099", "#1079", "#1096",
- "#1101", "#1097", "#1095", "#1098", "#1070", "#1040", "#1041",
- "#1062", "#1044", "#1045", "#1060", "#1043", "#1061", "#1048",
- "#1049", "#1050", "#1051", "#1052", "#1053", "#1054", "#1055",
- "#1071", "#1056", "#1057", "#1058", "#1059", "#1046", "#1042",
- "#1068", "#1067", "#1047", "#1064", "#1069", "#1065", "#1063",
- "#1066"
-};
-
-static entity_table_t ent_cp_1251[] = {
- "#1026", "#1027", "#8218", "#1107", "#8222", "hellip", "dagger",
- "Dagger", "euro", "permil", "#1033", "#8249", "#1034", "#1036",
- "#1035", "#1039", "#1106", "#8216", "#8217", "#8219", "#8220",
- "bull", "ndash", "mdash", NULL, "trade", "#1113", "#8250",
- "#1114", "#1116", "#1115", "#1119", "nbsp", "#1038", "#1118",
- "#1032", "curren", "#1168", "brvbar", "sect", "#1025", "copy",
- "#1028", "laquo", "not", "shy", "reg", "#1031", "deg", "plusmn",
- "#1030", "#1110", "#1169", "micro", "para", "middot", "#1105",
- "#8470", "#1108", "raquo", "#1112", "#1029", "#1109", "#1111",
- "#1040", "#1041", "#1042", "#1043", "#1044", "#1045", "#1046",
- "#1047", "#1048", "#1049", "#1050", "#1051", "#1052", "#1053",
- "#1054", "#1055", "#1056", "#1057", "#1058", "#1059", "#1060",
- "#1061", "#1062", "#1063", "#1064", "#1065", "#1066", "#1067",
- "#1068", "#1069", "#1070", "#1071", "#1072", "#1073", "#1074",
- "#1075", "#1076", "#1077", "#1078", "#1079", "#1080", "#1081",
- "#1082", "#1083", "#1084", "#1085", "#1086", "#1087", "#1088",
- "#1089", "#1090", "#1091", "#1092", "#1093", "#1094", "#1095",
- "#1096", "#1097", "#1098", "#1099", "#1100", "#1101", "#1102",
- "#1103"
-};
-
-static entity_table_t ent_iso_8859_5[] = {
- "#1056", "#1057", "#1058", "#1059", "#1060", "#1061", "#1062",
- "#1063", "#1064", "#1065", "#1066", "#1067", "#1068", "#1069",
- "#1070", "#1071", "#1072", "#1073", "#1074", "#1075", "#1076",
- "#1077", "#1078", "#1079", "#1080", "#1081", "#1082", "#1083",
- "#1084", "#1085", "#1086", "#1087", "#1088", "#1089", "#1090",
- "#1091", "#1092", "#1093", "#1094", "#1095", "#1096", "#1097",
- "#1098", "#1099", "#1100", "#1101", "#1102", "#1103", "#1104",
- "#1105", "#1106", "#1107", "#1108", "#1109", "#1110", "#1111",
- "#1112", "#1113", "#1114", "#1115", "#1116", "#1117", "#1118",
- "#1119"
-};
-
-static entity_table_t ent_cp_866[] = {
-
- "#9492", "#9524", "#9516", "#9500", "#9472", "#9532", "#9566",
- "#9567", "#9562", "#9556", "#9577", "#9574", "#9568", "#9552",
- "#9580", "#9575", "#9576", "#9572", "#9573", "#9561", "#9560",
- "#9554", "#9555", "#9579", "#9578", "#9496", "#9484", "#9608",
- "#9604", "#9612", "#9616", "#9600", "#1088", "#1089", "#1090",
- "#1091", "#1092", "#1093", "#1094", "#1095", "#1096", "#1097",
- "#1098", "#1099", "#1100", "#1101", "#1102", "#1103", "#1025",
- "#1105", "#1028", "#1108", "#1031", "#1111", "#1038", "#1118",
- "#176", "#8729", "#183", "#8730", "#8470", "#164", "#9632",
- "#160"
-};
-
-/* MacRoman has a couple of low-ascii chars that need mapping too */
-/* Vertical tab (ASCII 11) is often used to store line breaks inside */
-/* DB exports, this mapping changes it to a space */
-static entity_table_t ent_macroman[] = {
- "sp", NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, "quot", NULL,
- NULL, NULL, "amp", NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, "lt", NULL, "gt", NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, "Auml", "Aring", "Ccedil", "Eacute", "Ntilde", "Ouml",
- "Uuml", "aacute", "agrave", "acirc", "auml", "atilde", "aring",
- "ccedil", "eacute", "egrave", "ecirc", "euml", "iacute", "igrave",
- "icirc", "iuml", "ntilde", "oacute", "ograve", "ocirc", "ouml",
- "otilde", "uacute", "ugrave", "ucirc", "uuml", "dagger", "deg",
- "cent", "pound", "sect", "bull", "para", "szlig", "reg",
- "copy", "trade", "acute", "uml", "ne", "AElig", "Oslash",
- "infin", "plusmn", "le", "ge", "yen", "micro", "part",
- "sum", "prod", "pi", "int", "ordf", "ordm", "Omega",
- "aelig", "oslash", "iquest", "iexcl", "not", "radic", "fnof",
- "asymp", "#8710", "laquo", "raquo", "hellip", "nbsp", "Agrave",
- "Atilde", "Otilde", "OElig", "oelig", "ndash", "mdash", "ldquo",
- "rdquo", "lsquo", "rsquo", "divide", "loz", "yuml", "Yuml",
- "frasl", "euro", "lsaquo", "rsaquo", "#xFB01", "#xFB02", "Dagger",
- "middot", "sbquo", "bdquo", "permil", "Acirc", "Ecirc", "Aacute",
- "Euml", "Egrave", "Iacute", "Icirc", "Iuml", "Igrave", "Oacute",
- "Ocirc", "#xF8FF", "Ograve", "Uacute", "Ucirc", "Ugrave", "#305",
- "circ", "tilde", "macr", "#728", "#729", "#730", "cedil",
- "#733", "#731", "#711"
-};
-
-struct html_entity_map {
- enum entity_charset charset; /* charset identifier */
- unsigned short basechar; /* char code at start of table */
- unsigned short endchar; /* last char code in the table */
- entity_table_t *table; /* the table of mappings */
-};
-
-static const struct html_entity_map entity_map[] = {
- { cs_cp1252, 0x80, 0x9f, ent_cp_1252 },
- { cs_cp1252, 0xa0, 0xff, ent_iso_8859_1 },
- { cs_8859_1, 0xa0, 0xff, ent_iso_8859_1 },
- { cs_8859_15, 0xa0, 0xff, ent_iso_8859_15 },
- { cs_utf_8, 0xa0, 0xff, ent_iso_8859_1 },
- { cs_utf_8, 338, 402, ent_uni_338_402 },
- { cs_utf_8, 710, 732, ent_uni_spacing },
- { cs_utf_8, 913, 982, ent_uni_greek },
- { cs_utf_8, 8194, 8260, ent_uni_punct },
- { cs_utf_8, 8364, 8364, ent_uni_euro },
- { cs_utf_8, 8465, 8501, ent_uni_8465_8501 },
- { cs_utf_8, 8592, 9002, ent_uni_8592_9002 },
- { cs_utf_8, 9674, 9674, ent_uni_9674 },
- { cs_utf_8, 9824, 9830, ent_uni_9824_9830 },
- { cs_big5, 0xa0, 0xff, ent_iso_8859_1 },
- { cs_gb2312, 0xa0, 0xff, ent_iso_8859_1 },
- { cs_big5hkscs, 0xa0, 0xff, ent_iso_8859_1 },
- { cs_sjis, 0xa0, 0xff, ent_iso_8859_1 },
- { cs_eucjp, 0xa0, 0xff, ent_iso_8859_1 },
- { cs_koi8r, 0xa3, 0xff, ent_koi8r },
- { cs_cp1251, 0x80, 0xff, ent_cp_1251 },
- { cs_8859_5, 0xc0, 0xff, ent_iso_8859_5 },
- { cs_cp866, 0xc0, 0xff, ent_cp_866 },
- { cs_macroman, 0x0b, 0xff, ent_macroman },
- { cs_terminator }
-};
-
-static const struct {
- const char *codeset;
- enum entity_charset charset;
-} charset_map[] = {
- { "ISO-8859-1", cs_8859_1 },
- { "ISO8859-1", cs_8859_1 },
- { "ISO-8859-15", cs_8859_15 },
- { "ISO8859-15", cs_8859_15 },
- { "utf-8", cs_utf_8 },
- { "cp1252", cs_cp1252 },
- { "Windows-1252", cs_cp1252 },
- { "1252", cs_cp1252 },
- { "BIG5", cs_big5 },
- { "950", cs_big5 },
- { "GB2312", cs_gb2312 },
- { "936", cs_gb2312 },
- { "BIG5-HKSCS", cs_big5hkscs },
- { "Shift_JIS", cs_sjis },
- { "SJIS", cs_sjis },
- { "932", cs_sjis },
- { "EUCJP", cs_eucjp },
- { "EUC-JP", cs_eucjp },
- { "KOI8-R", cs_koi8r },
- { "koi8-ru", cs_koi8r },
- { "koi8r", cs_koi8r },
- { "cp1251", cs_cp1251 },
- { "Windows-1251", cs_cp1251 },
- { "win-1251", cs_cp1251 },
- { "iso8859-5", cs_8859_5 },
- { "iso-8859-5", cs_8859_5 },
- { "cp866", cs_cp866 },
- { "866", cs_cp866 },
- { "ibm866", cs_cp866 },
- { "MacRoman", cs_macroman },
- { NULL }
-};
-
-static const struct {
- unsigned short charcode;
- char *entity;
- int entitylen;
- int flags;
-} basic_entities[] = {
- { '"', "&quot;", 6, ENT_HTML_QUOTE_DOUBLE },
- { '\'', "&#039;", 6, ENT_HTML_QUOTE_SINGLE },
- { '\'', "&#39;", 5, ENT_HTML_QUOTE_SINGLE },
- { '<', "&lt;", 4, 0 },
- { '>', "&gt;", 4, 0 },
- { 0, NULL, 0, 0 }
-};
-
-#define MB_RETURN { \
- *newpos = pos; \
- mbseq[mbpos] = '\0'; \
- *mbseqlen = mbpos; \
- return this_char; }
-
-#define MB_WRITE(mbchar) { \
- mbspace--; \
- if (mbspace == 0) { \
- MB_RETURN; \
- } \
- mbseq[mbpos++] = (mbchar); }
-
-/* {{{ get_next_char
- */
-inline static unsigned short get_next_char(enum entity_charset charset,
- unsigned char * str,
- int * newpos,
- unsigned char * mbseq,
- int * mbseqlen)
-{
- int pos = *newpos;
- int mbpos = 0;
- int mbspace = *mbseqlen;
- unsigned short this_char = str[pos++];
-
- if (mbspace <= 0) {
- *mbseqlen = 0;
- return this_char;
- }
-
- MB_WRITE((unsigned char)this_char);
-
- switch (charset) {
- case cs_utf_8:
- {
- unsigned long utf = 0;
- int stat = 0;
- int more = 1;
-
- /* unpack utf-8 encoding into a wide char.
- * Code stolen from the mbstring extension */
-
- do {
- if (this_char < 0x80) {
- more = 0;
- break;
- } else if (this_char < 0xc0) {
- switch (stat) {
- case 0x10: /* 2, 2nd */
- case 0x21: /* 3, 3rd */
- case 0x32: /* 4, 4th */
- case 0x43: /* 5, 5th */
- case 0x54: /* 6, 6th */
- /* last byte in sequence */
- more = 0;
- utf |= (this_char & 0x3f);
- this_char = (unsigned short)utf;
- break;
- case 0x20: /* 3, 2nd */
- case 0x31: /* 4, 3rd */
- case 0x42: /* 5, 4th */
- case 0x53: /* 6, 5th */
- /* penultimate char */
- utf |= ((this_char & 0x3f) << 6);
- stat++;
- break;
- case 0x30: /* 4, 2nd */
- case 0x41: /* 5, 3rd */
- case 0x52: /* 6, 4th */
- utf |= ((this_char & 0x3f) << 12);
- stat++;
- break;
- case 0x40: /* 5, 2nd */
- case 0x51:
- utf |= ((this_char & 0x3f) << 18);
- stat++;
- break;
- case 0x50: /* 6, 2nd */
- utf |= ((this_char & 0x3f) << 24);
- stat++;
- break;
- default:
- /* invalid */
- more = 0;
- }
- }
- /* lead byte */
- else if (this_char < 0xe0) {
- stat = 0x10; /* 2 byte */
- utf = (this_char & 0x1f) << 6;
- } else if (this_char < 0xf0) {
- stat = 0x20; /* 3 byte */
- utf = (this_char & 0xf) << 12;
- } else if (this_char < 0xf8) {
- stat = 0x30; /* 4 byte */
- utf = (this_char & 0x7) << 18;
- } else if (this_char < 0xfc) {
- stat = 0x40; /* 5 byte */
- utf = (this_char & 0x3) << 24;
- } else if (this_char < 0xfe) {
- stat = 0x50; /* 6 byte */
- utf = (this_char & 0x1) << 30;
- } else {
- /* invalid; bail */
- more = 0;
- break;
- }
-
- if (more) {
- this_char = str[pos++];
- MB_WRITE((unsigned char)this_char);
- }
- } while (more);
- }
- break;
- case cs_big5:
- case cs_gb2312:
- case cs_big5hkscs:
- {
- /* check if this is the first of a 2-byte sequence */
- if (this_char >= 0xa1 && this_char <= 0xfe) {
- /* peek at the next char */
- unsigned char next_char = str[pos];
- if ((next_char >= 0x40 && next_char <= 0x7e) ||
- (next_char >= 0xa1 && next_char <= 0xfe)) {
- /* yes, this a wide char */
- this_char <<= 8;
- MB_WRITE(next_char);
- this_char |= next_char;
- pos++;
- }
-
- }
- break;
- }
- case cs_sjis:
- {
- /* check if this is the first of a 2-byte sequence */
- if ( (this_char >= 0x81 && this_char <= 0x9f) ||
- (this_char >= 0xe0 && this_char <= 0xef)
- ) {
- /* peek at the next char */
- unsigned char next_char = str[pos];
- if ((next_char >= 0x40 && next_char <= 0x7e) ||
- (next_char >= 0x80 && next_char <= 0xfc))
- {
- /* yes, this a wide char */
- this_char <<= 8;
- MB_WRITE(next_char);
- this_char |= next_char;
- pos++;
- }
-
- }
- break;
- }
- case cs_eucjp:
- {
- /* check if this is the first of a multi-byte sequence */
- if (this_char >= 0xa1 && this_char <= 0xfe) {
- /* peek at the next char */
- unsigned char next_char = str[pos];
- if (next_char >= 0xa1 && next_char <= 0xfe) {
- /* yes, this a jis kanji char */
- this_char <<= 8;
- MB_WRITE(next_char);
- this_char |= next_char;
- pos++;
- }
-
- } else if (this_char == 0x8e) {
- /* peek at the next char */
- unsigned char next_char = str[pos];
- if (next_char >= 0xa1 && next_char <= 0xdf) {
- /* JIS X 0201 kana */
- this_char <<= 8;
- MB_WRITE(next_char);
- this_char |= next_char;
- pos++;
- }
-
- } else if (this_char == 0x8f) {
- /* peek at the next two char */
- unsigned char next_char = str[pos];
- unsigned char next2_char = str[pos+1];
- if ((next_char >= 0xa1 && next_char <= 0xfe) &&
- (next2_char >= 0xa1 && next2_char <= 0xfe)) {
- /* JIS X 0212 hojo-kanji */
- this_char <<= 8;
- MB_WRITE(next_char);
- this_char |= next_char;
- pos++;
- this_char <<= 8;
- MB_WRITE(next2_char);
- this_char |= next2_char;
- pos++;
- }
-
- }
- break;
- }
- default:
- break;
- }
- MB_RETURN;
-}
-/* }}} */
-
-/* {{{ entity_charset determine_charset
- * returns the charset identifier based on current locale or a hint.
- * defaults to iso-8859-1 */
-static enum entity_charset determine_charset(char *charset_hint TSRMLS_DC)
-{
- int i;
- enum entity_charset charset = cs_8859_1;
- int len = 0;
- zval *uf_result = NULL;
-
- /* Guarantee default behaviour for backwards compatibility */
- if (charset_hint == NULL)
- return cs_8859_1;
-
- if ((len = strlen(charset_hint)) != 0) {
- goto det_charset;
- }
-#if HAVE_MBSTRING
-#if !defined(COMPILE_DL_MBSTRING)
- /* XXX: Ugly things. Why don't we look for a more sophisticated way? */
- switch (MBSTRG(current_internal_encoding)) {
- case mbfl_no_encoding_8859_1:
- return cs_8859_1;
-
- case mbfl_no_encoding_utf8:
- return cs_utf_8;
-
- case mbfl_no_encoding_euc_jp:
- case mbfl_no_encoding_eucjp_win:
- return cs_eucjp;
-
- case mbfl_no_encoding_sjis:
- case mbfl_no_encoding_sjis_win:
- case mbfl_no_encoding_sjis_mac:
- return cs_sjis;
-
- case mbfl_no_encoding_cp1252:
- return cs_cp1252;
-
- case mbfl_no_encoding_8859_15:
- return cs_8859_15;
-
- case mbfl_no_encoding_big5:
- return cs_big5;
-
- case mbfl_no_encoding_euc_cn:
- case mbfl_no_encoding_hz:
- case mbfl_no_encoding_cp936:
- return cs_gb2312;
-
- case mbfl_no_encoding_koi8r:
- return cs_koi8r;
-
- case mbfl_no_encoding_cp866:
- return cs_cp866;
-
- case mbfl_no_encoding_cp1251:
- return cs_cp1251;
-
- case mbfl_no_encoding_8859_5:
- return cs_8859_5;
-
- default:
- ;
- }
-#else
- {
- zval nm_mb_internal_encoding;
-
- ZVAL_STRING(&nm_mb_internal_encoding, "mb_internal_encoding", 0);
-
- if (call_user_function_ex(CG(function_table), NULL, &nm_mb_internal_encoding, &uf_result, 0, NULL, 1, NULL TSRMLS_CC) != FAILURE) {
-
- charset_hint = Z_STRVAL_P(uf_result);
- len = Z_STRLEN_P(uf_result);
-
- goto det_charset;
- }
- }
-#endif
-#endif
-
- charset_hint = SG(default_charset);
- if (charset_hint != NULL && (len=strlen(charset_hint)) != 0) {
- goto det_charset;
- }
-
- /* try to detect the charset for the locale */
-#if HAVE_NL_LANGINFO && HAVE_LOCALE_H && defined(CODESET)
- charset_hint = nl_langinfo(CODESET);
- if (charset_hint != NULL && (len=strlen(charset_hint)) != 0) {
- goto det_charset;
- }
-#endif
-
-#if HAVE_LOCALE_H
- /* try to figure out the charset from the locale */
- {
- char *localename;
- char *dot, *at;
-
- /* lang[_territory][.codeset][@modifier] */
- localename = setlocale(LC_CTYPE, NULL);
-
- dot = strchr(localename, '.');
- if (dot) {
- dot++;
- /* locale specifies a codeset */
- at = strchr(dot, '@');
- if (at)
- len = at - dot;
- else
- len = strlen(dot);
- charset_hint = dot;
- } else {
- /* no explicit name; see if the name itself
- * is the charset */
- charset_hint = localename;
- len = strlen(charset_hint);
- }
- }
-#endif
-
-det_charset:
-
- if (charset_hint) {
- int found = 0;
-
- /* now walk the charset map and look for the codeset */
- for (i = 0; charset_map[i].codeset; i++) {
- if (strncasecmp(charset_hint, charset_map[i].codeset, len) == 0) {
- charset = charset_map[i].charset;
- found = 1;
- break;
- }
- }
- if (!found) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "charset `%s' not supported, assuming iso-8859-1",
- charset_hint);
- }
- }
- if (uf_result != NULL) {
- zval_ptr_dtor(&uf_result);
- }
- return charset;
-}
-/* }}} */
-
-/* {{{ php_utf32_utf8 */
-size_t php_utf32_utf8(unsigned char *buf, int k)
-{
- size_t retval = 0;
-
- if (k < 0x80) {
- buf[0] = k;
- retval = 1;
- } else if (k < 0x800) {
- buf[0] = 0xc0 | (k >> 6);
- buf[1] = 0x80 | (k & 0x3f);
- retval = 2;
- } else if (k < 0x10000) {
- buf[0] = 0xe0 | (k >> 12);
- buf[1] = 0x80 | ((k >> 6) & 0x3f);
- buf[2] = 0x80 | (k & 0x3f);
- retval = 3;
- } else if (k < 0x200000) {
- buf[0] = 0xf0 | (k >> 18);
- buf[1] = 0x80 | ((k >> 12) & 0x3f);
- buf[2] = 0x80 | ((k >> 6) & 0x3f);
- buf[3] = 0x80 | (k & 0x3f);
- retval = 4;
- } else if (k < 0x4000000) {
- buf[0] = 0xf8 | (k >> 24);
- buf[1] = 0x80 | ((k >> 18) & 0x3f);
- buf[2] = 0x80 | ((k >> 12) & 0x3f);
- buf[3] = 0x80 | ((k >> 6) & 0x3f);
- buf[4] = 0x80 | (k & 0x3f);
- retval = 5;
- } else {
- buf[0] = 0xfc | (k >> 30);
- buf[1] = 0x80 | ((k >> 24) & 0x3f);
- buf[2] = 0x80 | ((k >> 18) & 0x3f);
- buf[3] = 0x80 | ((k >> 12) & 0x3f);
- buf[4] = 0x80 | ((k >> 6) & 0x3f);
- buf[5] = 0x80 | (k & 0x3f);
- retval = 6;
- }
- buf[retval] = '\0';
-
- return retval;
-}
-/* }}} */
-
-/* {{{ php_unescape_html_entities
- */
-PHPAPI char *php_unescape_html_entities(unsigned char *old, int oldlen, int *newlen, int all, int quote_style, char *hint_charset TSRMLS_DC)
-{
- int retlen;
- int j, k;
- char *replaced, *ret, *p, *q, *lim, *next;
- enum entity_charset charset = determine_charset(hint_charset TSRMLS_CC);
- unsigned char replacement[15];
- int replacement_len;
-
- ret = estrdup(old);
- retlen = oldlen;
- if (!retlen) {
- goto empty_source;
- }
-
- if (all) {
- /* look for a match in the maps for this charset */
- for (j = 0; entity_map[j].charset != cs_terminator; j++) {
- if (entity_map[j].charset != charset)
- continue;
-
- for (k = entity_map[j].basechar; k <= entity_map[j].endchar; k++) {
- unsigned char entity[32];
- int entity_length = 0;
-
- if (entity_map[j].table[k - entity_map[j].basechar] == NULL)
- continue;
-
- entity[0] = '&';
- entity_length = strlen(entity_map[j].table[k - entity_map[j].basechar]);
- strncpy(&entity[1], entity_map[j].table[k - entity_map[j].basechar], sizeof(entity) - 2);
- entity[entity_length+1] = ';';
- entity[entity_length+2] = '\0';
- entity_length += 2;
-
- /* When we have MBCS entities in the tables above, this will need to handle it */
- replacement_len = 0;
- switch (charset) {
- case cs_8859_1:
- case cs_cp1252:
- case cs_8859_15:
- case cs_cp1251:
- case cs_8859_5:
- case cs_cp866:
- replacement[0] = k;
- replacement[1] = '\0';
- replacement_len = 1;
- break;
-
- case cs_big5:
- case cs_gb2312:
- case cs_big5hkscs:
- case cs_sjis:
- case cs_eucjp:
- /* we cannot properly handle those multibyte encodings
- * with php_str_to_str. skip it. */
- continue;
-
- case cs_utf_8:
- replacement_len = php_utf32_utf8(replacement, k);
- break;
-
- default:
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "cannot yet handle MBCS!");
- return 0;
- }
-
- replaced = php_str_to_str(ret, retlen, entity, entity_length, replacement, replacement_len, &retlen);
- efree(ret);
- ret = replaced;
- }
- }
- }
-
- for (j = 0; basic_entities[j].charcode != 0; j++) {
-
- if (basic_entities[j].flags && (quote_style & basic_entities[j].flags) == 0)
- continue;
-
- replacement[0] = (unsigned char)basic_entities[j].charcode;
- replacement[1] = '\0';
-
- replaced = php_str_to_str(ret, retlen, basic_entities[j].entity, basic_entities[j].entitylen, replacement, 1, &retlen);
- efree(ret);
- ret = replaced;
- }
-
- /* replace numeric entities & "&amp;" */
- lim = ret + retlen;
- for (p = ret, q = ret; p < lim;) {
- int code;
-
- if (p[0] == '&') {
- if (p + 2 < lim) {
- if (p[1] == '#') {
- int invalid_code = 0;
-
- if (p[2] == 'x' || p[2] == 'X') {
- code = strtol(p + 3, &next, 16);
- } else {
- code = strtol(p + 2, &next, 10);
- }
-
- if (next != NULL && *next == ';') {
- switch (charset) {
- case cs_utf_8:
- q += php_utf32_utf8(q, code);
- break;
-
- case cs_8859_1:
- case cs_8859_5:
- case cs_8859_15:
- if ((code >= 0x80 && code < 0xa0) || code > 0xff) {
- invalid_code = 1;
- } else {
- *(q++) = code;
- }
- break;
-
- case cs_cp1252:
- case cs_cp1251:
- case cs_cp866:
- if (code > 0xff) {
- invalid_code = 1;
- } else {
- *(q++) = code;
- }
- break;
-
- case cs_big5:
- case cs_big5hkscs:
- case cs_sjis:
- case cs_eucjp:
- if (code >= 0x80) {
- invalid_code = 1;
- } else {
- *(q++) = code;
- }
- break;
-
- case cs_gb2312:
- if (code >= 0x81) {
- invalid_code = 1;
- } else {
- *(q++) = code;
- }
- break;
-
- default:
- /* for backwards compatilibity */
- invalid_code = 1;
- break;
- }
- if (invalid_code) {
- for (; p <= next; p++) {
- *(q++) = *p;
- }
- }
- p = next + 1;
- } else {
- *(q++) = *(p++);
- *(q++) = *(p++);
- }
- } else if (p + 4 < lim &&
- p[1] == 'a' && p[2] == 'm' &&p[3] == 'p' &&
- p[4] == ';') {
- *(q++) = '&';
- p += 5;
- } else {
- *(q++) = *(p++);
- *(q++) = *(p++);
- }
- } else {
- *(q++) = *(p++);
- }
- } else {
- *(q++) = *(p++);
- }
- }
- *q = '\0';
- retlen = (size_t)(q - ret);
-empty_source:
- *newlen = retlen;
- return ret;
-}
-/* }}} */
-
-
-
-
-/* {{{ php_escape_html_entities
- */
-PHPAPI char *php_escape_html_entities(unsigned char *old, int oldlen, int *newlen, int all, int quote_style, char *hint_charset TSRMLS_DC)
-{
- int i, j, maxlen, len;
- char *replaced;
- enum entity_charset charset = determine_charset(hint_charset TSRMLS_CC);
- int matches_map;
-
- maxlen = 2 * oldlen;
- if (maxlen < 128)
- maxlen = 128;
- replaced = emalloc (maxlen);
- len = 0;
-
- i = 0;
- while (i < oldlen) {
- unsigned char mbsequence[16]; /* allow up to 15 characters in a multibyte sequence */
- int mbseqlen = sizeof(mbsequence);
- unsigned short this_char = get_next_char(charset, old, &i, mbsequence, &mbseqlen);
-
- matches_map = 0;
-
- if (len + 9 > maxlen)
- replaced = erealloc (replaced, maxlen += 128);
-
- if (all) {
- /* look for a match in the maps for this charset */
- unsigned char *rep = NULL;
-
-
- for (j = 0; entity_map[j].charset != cs_terminator; j++) {
- if (entity_map[j].charset == charset
- && this_char >= entity_map[j].basechar
- && this_char <= entity_map[j].endchar) {
- rep = (unsigned char*)entity_map[j].table[this_char - entity_map[j].basechar];
- if (rep == NULL) {
- /* there is no entity for this position; fall through and
- * just output the character itself */
- break;
- }
-
- matches_map = 1;
- break;
- }
- }
-
- if (matches_map) {
- replaced[len++] = '&';
- strcpy(replaced + len, rep);
- len += strlen(rep);
- replaced[len++] = ';';
- }
- }
- if (!matches_map) {
- int is_basic = 0;
-
- if (this_char == '&') {
- memcpy(replaced + len, "&amp;", sizeof("&amp;") - 1);
- len += sizeof("&amp;") - 1;
- is_basic = 1;
- } else {
- for (j = 0; basic_entities[j].charcode != 0; j++) {
- if ((basic_entities[j].charcode != this_char) ||
- (basic_entities[j].flags &&
- (quote_style & basic_entities[j].flags) == 0)) {
- continue;
- }
-
- memcpy(replaced + len, basic_entities[j].entity, basic_entities[j].entitylen);
- len += basic_entities[j].entitylen;
-
- is_basic = 1;
- break;
- }
- }
-
- if (!is_basic) {
- /* a wide char without a named entity; pass through the original sequence */
- if (mbseqlen > 1) {
- memcpy(replaced + len, mbsequence, mbseqlen);
- len += mbseqlen;
- } else {
- replaced[len++] = (unsigned char)this_char;
- }
- }
- }
- }
- replaced[len] = '\0';
- *newlen = len;
-
- return replaced;
-
-
-}
-/* }}} */
-
-/* {{{ php_html_entities
- */
-static void php_html_entities(INTERNAL_FUNCTION_PARAMETERS, int all)
-{
- char *str, *hint_charset = NULL;
- int str_len, hint_charset_len = 0;
- int len;
- long quote_style = ENT_COMPAT;
- char *replaced;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|ls", &str, &str_len, &quote_style, &hint_charset, &hint_charset_len) == FAILURE) {
- return;
- }
-
- replaced = php_escape_html_entities(str, str_len, &len, all, quote_style, hint_charset TSRMLS_CC);
- RETVAL_STRINGL(replaced, len, 0);
-}
-/* }}} */
-
-#define HTML_SPECIALCHARS 0
-#define HTML_ENTITIES 1
-
-/* {{{ register_html_constants
- */
-void register_html_constants(INIT_FUNC_ARGS)
-{
- REGISTER_LONG_CONSTANT("HTML_SPECIALCHARS", HTML_SPECIALCHARS, CONST_PERSISTENT|CONST_CS);
- REGISTER_LONG_CONSTANT("HTML_ENTITIES", HTML_ENTITIES, CONST_PERSISTENT|CONST_CS);
- REGISTER_LONG_CONSTANT("ENT_COMPAT", ENT_COMPAT, CONST_PERSISTENT|CONST_CS);
- REGISTER_LONG_CONSTANT("ENT_QUOTES", ENT_QUOTES, CONST_PERSISTENT|CONST_CS);
- REGISTER_LONG_CONSTANT("ENT_NOQUOTES", ENT_NOQUOTES, CONST_PERSISTENT|CONST_CS);
-}
-/* }}} */
-
-/* {{{ proto string htmlspecialchars(string string [, int quote_style][, string charset])
- Convert special characters to HTML entities */
-PHP_FUNCTION(htmlspecialchars)
-{
- php_html_entities(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0);
-}
-/* }}} */
-
-/* {{{ proto string html_entity_decode(string string [, int quote_style][, string charset])
- Convert all HTML entities to their applicable characters */
-PHP_FUNCTION(html_entity_decode)
-{
- char *str, *hint_charset = NULL;
- int str_len, hint_charset_len, len;
- long quote_style = ENT_COMPAT;
- char *replaced;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|ls", &str, &str_len,
- &quote_style, &hint_charset, &hint_charset_len) == FAILURE) {
- return;
- }
-
- replaced = php_unescape_html_entities(str, str_len, &len, 1, quote_style, hint_charset TSRMLS_CC);
- RETVAL_STRINGL(replaced, len, 0);
-}
-/* }}} */
-
-
-/* {{{ proto string htmlentities(string string [, int quote_style][, string charset])
- Convert all applicable characters to HTML entities */
-PHP_FUNCTION(htmlentities)
-{
- php_html_entities(INTERNAL_FUNCTION_PARAM_PASSTHRU, 1);
-}
-/* }}} */
-
-/* {{{ proto array get_html_translation_table([int table [, int quote_style]])
- Returns the internal translation table used by htmlspecialchars and htmlentities */
-PHP_FUNCTION(get_html_translation_table)
-{
- long which = HTML_SPECIALCHARS, quote_style = ENT_COMPAT;
- int i, j;
- char ind[2];
- enum entity_charset charset = determine_charset(NULL TSRMLS_CC);
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|ll", &which, &quote_style) == FAILURE) {
- return;
- }
-
- array_init(return_value);
-
- ind[1] = 0;
-
- switch (which) {
- case HTML_ENTITIES:
- for (j=0; entity_map[j].charset != cs_terminator; j++) {
- if (entity_map[j].charset != charset)
- continue;
- for (i = 0; i <= entity_map[j].endchar - entity_map[j].basechar; i++) {
- char buffer[16];
-
- if (entity_map[j].table[i] == NULL)
- continue;
- /* what about wide chars here ?? */
- ind[0] = i + entity_map[j].basechar;
- sprintf(buffer, "&%s;", entity_map[j].table[i]);
- add_assoc_string(return_value, ind, buffer, 1);
-
- }
- }
- /* break thru */
-
- case HTML_SPECIALCHARS:
- for (j = 0; basic_entities[j].charcode != 0; j++) {
-
- if (basic_entities[j].flags && (quote_style & basic_entities[j].flags) == 0)
- continue;
-
- ind[0] = (unsigned char)basic_entities[j].charcode;
- add_assoc_stringl(return_value, ind, basic_entities[j].entity, basic_entities[j].entitylen, 1);
- }
- add_assoc_stringl(return_value, "&", "&amp;", sizeof("&amp;") - 1, 1);
-
- break;
- }
-}
-/* }}} */
-
-/*
- * 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/standard/html.h b/ext/standard/html.h
deleted file mode 100644
index e2f7c76994..0000000000
--- a/ext/standard/html.h
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Rasmus Lerdorf <rasmus@lerdorf.on.ca> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifndef HTML_H
-#define HTML_H
-
-#define ENT_HTML_QUOTE_NONE 0
-#define ENT_HTML_QUOTE_SINGLE 1
-#define ENT_HTML_QUOTE_DOUBLE 2
-
-#define ENT_COMPAT ENT_HTML_QUOTE_DOUBLE
-#define ENT_QUOTES (ENT_HTML_QUOTE_DOUBLE | ENT_HTML_QUOTE_SINGLE)
-#define ENT_NOQUOTES ENT_HTML_QUOTE_NONE
-
-void register_html_constants(INIT_FUNC_ARGS);
-
-PHP_FUNCTION(htmlspecialchars);
-PHP_FUNCTION(htmlentities);
-PHP_FUNCTION(html_entity_decode);
-PHP_FUNCTION(get_html_translation_table);
-
-PHPAPI char *php_escape_html_entities(unsigned char *old, int oldlen, int *newlen, int all, int quote_style, char *hint_charset TSRMLS_DC);
-
-#endif /* HTML_H */
diff --git a/ext/standard/http.c b/ext/standard/http.c
deleted file mode 100644
index 0464dced4c..0000000000
--- a/ext/standard/http.c
+++ /dev/null
@@ -1,229 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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. |
- +----------------------------------------------------------------------+
- | Authors: Sara Golemon <pollita@php.net> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#include "php_http.h"
-#include "php_ini.h"
-#include "url.h"
-
-#define URL_DEFAULT_ARG_SEP "&"
-
-/* {{{ php_url_encode_hash */
-PHPAPI int php_url_encode_hash_ex(HashTable *ht, smart_str *formstr,
- const char *num_prefix, int num_prefix_len,
- const char *key_prefix, int key_prefix_len,
- const char *key_suffix, int key_suffix_len,
- zval *type TSRMLS_DC)
-{
- char *arg_sep = NULL, *key = NULL, *ekey, *newprefix, *p;
- int arg_sep_len, key_len, ekey_len, key_type, newprefix_len;
- ulong idx;
- zval **zdata = NULL, *copyzval;
-
- if (!ht) {
- return FAILURE;
- }
-
- if (ht->nApplyCount > 0) {
- /* Prevent recursion */
- return SUCCESS;
- }
-
- arg_sep = INI_STR("arg_separator.output");
- if (!arg_sep || !strlen(arg_sep)) {
- arg_sep = URL_DEFAULT_ARG_SEP;
- }
- arg_sep_len = strlen(arg_sep);
-
- for (zend_hash_internal_pointer_reset(ht);
- (key_type = zend_hash_get_current_key_ex(ht, &key, &key_len, &idx, 0, NULL)) != HASH_KEY_NON_EXISTANT;
- zend_hash_move_forward(ht)
- ) {
- if (key_type == HASH_KEY_IS_STRING && key_len && key[key_len-1] == '\0') {
- /* We don't want that trailing NULL */
- key_len -= 1;
- }
-
- /* handling for private & protected object properties */
- if (key && *key == '\0' && type != NULL) {
- char *tmp;
-
- zend_object *zobj = zend_objects_get_address(type TSRMLS_CC);
- if (zend_check_property_access(zobj, key TSRMLS_CC) != SUCCESS) {
- /* private or protected property access outside of the class */
- continue;
- }
- zend_unmangle_property_name(key, &tmp, &key);
- key_len = strlen(key);
- }
-
- if (zend_hash_get_current_data_ex(ht, (void **)&zdata, NULL) == FAILURE || !zdata || !(*zdata)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Error traversing form data array.");
- return FAILURE;
- }
- if (Z_TYPE_PP(zdata) == IS_ARRAY || Z_TYPE_PP(zdata) == IS_OBJECT) {
- if (key_type == HASH_KEY_IS_STRING) {
- ekey = php_url_encode(key, key_len, &ekey_len);
- newprefix_len = key_suffix_len + ekey_len + key_prefix_len + 1;
- newprefix = emalloc(newprefix_len + 1);
- p = newprefix;
-
- if (key_prefix) {
- memcpy(p, key_prefix, key_prefix_len);
- p += key_prefix_len;
- }
-
- memcpy(p, ekey, ekey_len);
- p += ekey_len;
- efree(ekey);
-
- if (key_suffix) {
- memcpy(p, key_suffix, key_suffix_len);
- p += key_suffix_len;
- }
-
- *(p++) = '[';
- *p = '\0';
- } else {
- /* Is an integer key */
- ekey_len = spprintf(&ekey, 12, "%ld", idx);
- newprefix_len = key_prefix_len + num_prefix_len + ekey_len + key_suffix_len + 1;
- newprefix = emalloc(newprefix_len + 1);
- p = newprefix;
-
- if (key_prefix) {
- memcpy(p, key_prefix, key_prefix_len);
- p += key_prefix_len;
- }
-
- memcpy(p, num_prefix, num_prefix_len);
- p += num_prefix_len;
-
- memcpy(p, ekey, ekey_len);
- p += ekey_len;
- efree(ekey);
-
- if (key_suffix) {
- memcpy(p, key_suffix, key_suffix_len);
- p += key_suffix_len;
- }
- *(p++) = '[';
- *p = '\0';
- }
- ht->nApplyCount++;
- php_url_encode_hash_ex(HASH_OF(*zdata), formstr, NULL, 0, newprefix, newprefix_len, "]", 1, (Z_TYPE_PP(zdata) == IS_OBJECT ? *zdata : NULL) TSRMLS_CC);
- ht->nApplyCount--;
- efree(newprefix);
- } else if (Z_TYPE_PP(zdata) == IS_NULL || Z_TYPE_PP(zdata) == IS_RESOURCE) {
- /* Skip these types */
- continue;
- } else {
- if (formstr->len) {
- smart_str_appendl(formstr, arg_sep, arg_sep_len);
- }
- /* Simple key=value */
- smart_str_appendl(formstr, key_prefix, key_prefix_len);
- if (key_type == HASH_KEY_IS_STRING) {
- ekey = php_url_encode(key, key_len, &ekey_len);
- smart_str_appendl(formstr, ekey, ekey_len);
- efree(ekey);
- } else {
- /* Numeric key */
- if (num_prefix) {
- smart_str_appendl(formstr, num_prefix, num_prefix_len);
- }
- ekey_len = spprintf(&ekey, 12, "%ld", idx);
- smart_str_appendl(formstr, ekey, ekey_len);
- efree(ekey);
- }
- smart_str_appendl(formstr, key_suffix, key_suffix_len);
- smart_str_appendl(formstr, "=", 1);
- switch (Z_TYPE_PP(zdata)) {
- case IS_STRING:
- ekey = php_url_encode(Z_STRVAL_PP(zdata), Z_STRLEN_PP(zdata), &ekey_len);
- break;
- case IS_LONG:
- case IS_BOOL:
- ekey_len = spprintf(&ekey, 12, "%ld", Z_LVAL_PP(zdata));
- break;
- case IS_DOUBLE:
- ekey_len = spprintf(&ekey, 48, "%.*G", (int) EG(precision), Z_DVAL_PP(zdata));
- break;
- default:
- /* fall back on convert to string */
- MAKE_STD_ZVAL(copyzval);
- *copyzval = **zdata;
- zval_copy_ctor(copyzval);
- convert_to_string_ex(&copyzval);
- ekey = php_url_encode(Z_STRVAL_P(copyzval), Z_STRLEN_P(copyzval), &ekey_len);
- zval_ptr_dtor(&copyzval);
- }
- smart_str_appendl(formstr, ekey, ekey_len);
- efree(ekey);
- }
- }
-
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ proto string http_build_query(mixed formdata [, string prefix])
- Generates a form-encoded query string from an associative array or object. */
-PHP_FUNCTION(http_build_query)
-{
- zval *formdata;
- char *prefix = NULL;
- int prefix_len = 0;
- smart_str formstr = {0};
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z|s", &formdata, &prefix, &prefix_len) != SUCCESS) {
- RETURN_FALSE;
- }
-
- if (Z_TYPE_P(formdata) != IS_ARRAY && Z_TYPE_P(formdata) != IS_OBJECT) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Parameter 1 expected to be Array or Object. Incorrect value given.");
- RETURN_FALSE;
- }
-
- if (php_url_encode_hash_ex(HASH_OF(formdata), &formstr, prefix, prefix_len, NULL, 0, NULL, 0, (Z_TYPE_P(formdata) == IS_OBJECT ? formdata : NULL) TSRMLS_CC) == FAILURE) {
- if (formstr.c) {
- efree(formstr.c);
- }
- RETURN_FALSE;
- }
-
- if (!formstr.c) {
- RETURN_NULL();
- }
-
- smart_str_0(&formstr);
-
- RETURN_STRINGL(formstr.c, formstr.len, 0);
-}
-/* }}} */
-
-/*
- * 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/standard/http_fopen_wrapper.c b/ext/standard/http_fopen_wrapper.c
deleted file mode 100644
index 682ef2759d..0000000000
--- a/ext/standard/http_fopen_wrapper.c
+++ /dev/null
@@ -1,632 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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. |
- +----------------------------------------------------------------------+
- | Authors: Rasmus Lerdorf <rasmus@php.net> |
- | Jim Winstead <jimw@php.net> |
- | Hartmut Holzgraefe <hholzgra@php.net> |
- | Wez Furlong <wez@thebrainroom.com> |
- +----------------------------------------------------------------------+
- */
-/* $Id$ */
-
-#include "php.h"
-#include "php_globals.h"
-#include "php_streams.h"
-#include "php_network.h"
-#include "php_ini.h"
-#include "ext/standard/basic_functions.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <errno.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <fcntl.h>
-
-#ifdef PHP_WIN32
-#define O_RDONLY _O_RDONLY
-#include "win32/param.h"
-#elif defined(NETWARE)
-/*#include <ws2nlm.h>*/
-/*#include <sys/socket.h>*/
-#ifdef NEW_LIBC
-#include <sys/param.h>
-#else
-#include "netware/param.h"
-#endif
-#else
-#include <sys/param.h>
-#endif
-
-#include "php_standard.h"
-
-#include <sys/types.h>
-#if HAVE_SYS_SOCKET_H
-#include <sys/socket.h>
-#endif
-
-#ifdef PHP_WIN32
-#include <winsock2.h>
-#elif defined(NETWARE) && defined(USE_WINSOCK)
-/*#include <ws2nlm.h>*/
-#include <novsock2.h>
-#else
-#include <netinet/in.h>
-#include <netdb.h>
-#if HAVE_ARPA_INET_H
-#include <arpa/inet.h>
-#endif
-#endif
-
-#if defined(PHP_WIN32) || defined(__riscos__) || defined(NETWARE)
-#undef AF_UNIX
-#endif
-
-#if defined(AF_UNIX)
-#include <sys/un.h>
-#endif
-
-#include "php_fopen_wrappers.h"
-
-#define HTTP_HEADER_BLOCK_SIZE 1024
-#define PHP_URL_REDIRECT_MAX 20
-#define HTTP_HEADER_USER_AGENT 1
-#define HTTP_HEADER_HOST 2
-#define HTTP_HEADER_AUTH 4
-#define HTTP_HEADER_FROM 8
-#define HTTP_HEADER_CONTENT_LENGTH 16
-#define HTTP_HEADER_TYPE 32
-
-php_stream *php_stream_url_wrap_http_ex(php_stream_wrapper *wrapper, char *path, char *mode, int options, char **opened_path, php_stream_context *context, int redirect_max, int header_init STREAMS_DC TSRMLS_DC)
-{
- php_stream *stream = NULL;
- php_url *resource = NULL;
- int use_ssl;
- char *scratch = NULL;
- char *tmp = NULL;
- char *ua_str = NULL;
- zval **ua_zval = NULL, **tmpzval = NULL;
- int scratch_len = 0;
- int body = 0;
- char location[HTTP_HEADER_BLOCK_SIZE];
- zval **response_header = NULL;
- int reqok = 0;
- char *http_header_line = NULL;
- char tmp_line[128];
- size_t chunk_size = 0, file_size = 0;
- int eol_detect = 0;
- char *transport_string, *errstr = NULL;
- int transport_len, have_header = 0, request_fulluri = 0;
-
- if (redirect_max < 1) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Circular redirect, aborting.");
- return NULL;
- }
-
- resource = php_url_parse(path);
- if (resource == NULL) {
- return NULL;
- }
-
- if (strncasecmp(resource->scheme, "http", sizeof("http")) && strncasecmp(resource->scheme, "https", sizeof("https"))) {
- if (!context ||
- php_stream_context_get_option(context, wrapper->wops->label, "proxy", &tmpzval) == FAILURE ||
- Z_TYPE_PP(tmpzval) != IS_STRING ||
- Z_STRLEN_PP(tmpzval) <= 0) {
- php_url_free(resource);
- return php_stream_open_wrapper_ex(path, mode, ENFORCE_SAFE_MODE | REPORT_ERRORS, NULL, context);
- }
- /* Called from a non-http wrapper with http proxying requested (i.e. ftp) */
- request_fulluri = 1;
- use_ssl = 0;
-
- transport_len = Z_STRLEN_PP(tmpzval);
- transport_string = estrndup(Z_STRVAL_PP(tmpzval), Z_STRLEN_PP(tmpzval));
- } else {
- /* Normal http request (possibly with proxy) */
-
- if (strpbrk(mode, "awx+")) {
- php_stream_wrapper_log_error(wrapper, options TSRMLS_CC, "HTTP wrapper does not support writeable connections.");
- return NULL;
- }
-
- use_ssl = resource->scheme && (strlen(resource->scheme) > 4) && resource->scheme[4] == 's';
- /* choose default ports */
- if (use_ssl && resource->port == 0)
- resource->port = 443;
- else if (resource->port == 0)
- resource->port = 80;
-
- if (context && !use_ssl &&
- php_stream_context_get_option(context, wrapper->wops->label, "proxy", &tmpzval) == SUCCESS &&
- Z_TYPE_PP(tmpzval) == IS_STRING &&
- Z_STRLEN_PP(tmpzval) > 0) {
- /* Don't use proxy server for SSL resources */
- transport_len = Z_STRLEN_PP(tmpzval);
- transport_string = estrndup(Z_STRVAL_PP(tmpzval), Z_STRLEN_PP(tmpzval));
- } else {
- transport_len = spprintf(&transport_string, 0, "%s://%s:%d", use_ssl ? "ssl" : "tcp", resource->host, resource->port);
- }
- }
-
- stream = php_stream_xport_create(transport_string, transport_len, options,
- STREAM_XPORT_CLIENT | STREAM_XPORT_CONNECT,
- NULL, NULL, context, &errstr, NULL);
-
- if (errstr) {
- php_stream_wrapper_log_error(wrapper, options TSRMLS_CC, "%s", errstr);
- efree(errstr);
- errstr = NULL;
- }
-
- efree(transport_string);
-
- if (stream == NULL)
- goto out;
-
- /* avoid buffering issues while reading header */
- if (options & STREAM_WILL_CAST)
- chunk_size = php_stream_set_chunk_size(stream, 1);
-
- /* avoid problems with auto-detecting when reading the headers -> the headers
- * are always in canonical \r\n format */
- eol_detect = stream->flags & (PHP_STREAM_FLAG_DETECT_EOL | PHP_STREAM_FLAG_EOL_MAC);
- stream->flags &= ~(PHP_STREAM_FLAG_DETECT_EOL | PHP_STREAM_FLAG_EOL_MAC);
-
- php_stream_context_set(stream, context);
-
- php_stream_notify_info(context, PHP_STREAM_NOTIFY_CONNECT, NULL, 0);
-
- if (context &&
- php_stream_context_get_option(context, "http", "method", &tmpzval) == SUCCESS) {
- if (Z_TYPE_PP(tmpzval) == IS_STRING && Z_STRLEN_PP(tmpzval) > 0) {
- scratch_len = strlen(path) + 29 + Z_STRLEN_PP(tmpzval);
- scratch = emalloc(scratch_len);
- strlcpy(scratch, Z_STRVAL_PP(tmpzval), Z_STRLEN_PP(tmpzval) + 1);
- strcat(scratch, " ");
- }
- }
-
- if (!scratch) {
- scratch_len = strlen(path) + 32;
- scratch = emalloc(scratch_len);
- strcpy(scratch, "GET ");
- }
-
- /* Should we send the entire path in the request line, default to no. */
- if (!request_fulluri &&
- context &&
- php_stream_context_get_option(context, "http", "request_fulluri", &tmpzval) == SUCCESS) {
- (*tmpzval)->refcount++;
- SEPARATE_ZVAL(tmpzval);
- convert_to_boolean_ex(tmpzval);
- request_fulluri = Z_BVAL_PP(tmpzval) ? 1 : 0;
- zval_ptr_dtor(tmpzval);
- }
-
- if (request_fulluri) {
- /* Ask for everything */
- strcat(scratch, path);
- } else {
- /* Send the traditional /path/to/file?query_string */
-
- /* file */
- if (resource->path && *resource->path) {
- strlcat(scratch, resource->path, scratch_len);
- } else {
- strlcat(scratch, "/", scratch_len);
- }
-
- /* query string */
- if (resource->query) {
- strlcat(scratch, "?", scratch_len);
- strlcat(scratch, resource->query, scratch_len);
- }
- }
-
- /* protocol version we are speaking */
- strlcat(scratch, " HTTP/1.0\r\n", scratch_len);
-
- /* send it */
- php_stream_write(stream, scratch, strlen(scratch));
-
- if (context &&
- php_stream_context_get_option(context, "http", "header", &tmpzval) == SUCCESS &&
- Z_STRLEN_PP(tmpzval)) {
- /* Remove newlines and spaces from start and end,
- php_trim will estrndup() */
- tmp = php_trim(Z_STRVAL_PP(tmpzval), Z_STRLEN_PP(tmpzval), NULL, 0, NULL, 3 TSRMLS_CC);
- if (strlen(tmp) > 0) {
- /* Output trimmed headers with \r\n at the end */
- php_stream_write(stream, tmp, strlen(tmp));
- php_stream_write(stream, "\r\n", sizeof("\r\n") - 1);
-
- /* Make lowercase for easy comparison against 'standard' headers */
- php_strtolower(tmp, strlen(tmp));
- if (strstr(tmp, "user-agent:")) {
- have_header |= HTTP_HEADER_USER_AGENT;
- }
- if (strstr(tmp, "host:")) {
- have_header |= HTTP_HEADER_HOST;
- }
- if (strstr(tmp, "from:")) {
- have_header |= HTTP_HEADER_FROM;
- }
- if (strstr(tmp, "authorization:")) {
- have_header |= HTTP_HEADER_AUTH;
- }
- if (strstr(tmp, "content-length:")) {
- have_header |= HTTP_HEADER_CONTENT_LENGTH;
- }
- if (strstr(tmp, "content-type:")) {
- have_header |= HTTP_HEADER_TYPE;
- }
- }
- efree(tmp);
- }
-
- /* auth header if it was specified */
- if (((have_header & HTTP_HEADER_AUTH) == 0) && resource->user && resource->pass) {
- /* decode the strings first */
- php_url_decode(resource->user, strlen(resource->user));
- php_url_decode(resource->pass, strlen(resource->pass));
-
- /* scratch is large enough, since it was made large enough for the whole URL */
- strcpy(scratch, resource->user);
- strcat(scratch, ":");
- strcat(scratch, resource->pass);
-
- tmp = php_base64_encode((unsigned char*)scratch, strlen(scratch), NULL);
-
- if (snprintf(scratch, scratch_len, "Authorization: Basic %s\r\n", tmp) > 0) {
- php_stream_write(stream, scratch, strlen(scratch));
- php_stream_notify_info(context, PHP_STREAM_NOTIFY_AUTH_REQUIRED, NULL, 0);
- }
-
- efree(tmp);
- tmp = NULL;
- }
-
- /* if the user has configured who they are, send a From: line */
- if (((have_header & HTTP_HEADER_FROM) == 0) && cfg_get_string("from", &tmp) == SUCCESS) {
- if (snprintf(scratch, scratch_len, "From: %s\r\n", tmp) > 0)
- php_stream_write(stream, scratch, strlen(scratch));
- }
-
- /* Send Host: header so name-based virtual hosts work */
- if ((have_header & HTTP_HEADER_HOST) == 0) {
- if ((use_ssl && resource->port != 443 && resource->port != 0) ||
- (!use_ssl && resource->port != 80 && resource->port != 0)) {
- if (snprintf(scratch, scratch_len, "Host: %s:%i\r\n", resource->host, resource->port) > 0)
- php_stream_write(stream, scratch, strlen(scratch));
- } else {
- if (snprintf(scratch, scratch_len, "Host: %s\r\n", resource->host) > 0) {
- php_stream_write(stream, scratch, strlen(scratch));
- }
- }
- }
-
- if (context &&
- php_stream_context_get_option(context, "http", "user_agent", &ua_zval) == SUCCESS) {
- ua_str = Z_STRVAL_PP(ua_zval);
- } else if (FG(user_agent)) {
- ua_str = FG(user_agent);
- }
-
- if (((have_header & HTTP_HEADER_USER_AGENT) == 0) && ua_str) {
-#define _UA_HEADER "User-Agent: %s\r\n"
- char *ua;
- size_t ua_len;
-
- ua_len = sizeof(_UA_HEADER) + strlen(ua_str);
-
- /* ensure the header is only sent if user_agent is not blank */
- if (ua_len > sizeof(_UA_HEADER)) {
- ua = emalloc(ua_len + 1);
- if ((ua_len = snprintf(ua, ua_len, _UA_HEADER, ua_str)) > 0) {
- ua[ua_len] = 0;
- php_stream_write(stream, ua, ua_len);
- } else {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Cannot construct User-agent header");
- }
-
- if (ua) {
- efree(ua);
- }
- }
- }
-
- /* Request content, such as for POST requests */
- if (context &&
- php_stream_context_get_option(context, "http", "content", &tmpzval) == SUCCESS &&
- Z_STRLEN_PP(tmpzval) > 0) {
- if (!(have_header & HTTP_HEADER_CONTENT_LENGTH)) {
- scratch_len = snprintf(scratch, scratch_len, "Content-Length: %d\r\n", Z_STRLEN_PP(tmpzval));
- php_stream_write(stream, scratch, scratch_len);
- }
- if (!(have_header & HTTP_HEADER_TYPE)) {
- php_stream_write(stream, "Content-Type: application/x-www-form-urlencoded\r\n",
- sizeof("Content-Type: application/x-www-form-urlencoded\r\n") - 1);
- php_error_docref(NULL TSRMLS_CC, E_NOTICE, "Content-type not specified assuming application/x-www-form-urlencoded");
- }
- php_stream_write(stream, "\r\n", sizeof("\r\n")-1);
- php_stream_write(stream, Z_STRVAL_PP(tmpzval), Z_STRLEN_PP(tmpzval));
- php_stream_write(stream, "\r\n\r\n", sizeof("\r\n\r\n")-1);
- } else {
- php_stream_write(stream, "\r\n", sizeof("\r\n")-1);
- }
-
- location[0] = '\0';
-
- if (!header_init && FAILURE == zend_hash_find(EG(active_symbol_table),
- "http_response_header", sizeof("http_response_header"), (void **) &response_header)) {
- header_init = 1;
- }
-
- if (header_init) {
- zval *tmp;
- MAKE_STD_ZVAL(tmp);
- array_init(tmp);
- ZEND_SET_SYMBOL(EG(active_symbol_table), "http_response_header", tmp);
-
- zend_hash_find(EG(active_symbol_table),
- "http_response_header", sizeof("http_response_header"), (void **) &response_header);
- }
-
-
- if (!php_stream_eof(stream)) {
- size_t tmp_line_len;
- /* get response header */
-
- if (_php_stream_get_line(stream, tmp_line, sizeof(tmp_line) - 1, &tmp_line_len TSRMLS_CC) != NULL) {
- zval *http_response;
- int response_code;
-
- MAKE_STD_ZVAL(http_response);
- ZVAL_NULL(http_response);
-
- if (tmp_line_len > 9) {
- response_code = atoi(tmp_line + 9);
- } else {
- response_code = 0;
- }
- switch(response_code) {
- case 200:
- case 302:
- case 301:
- reqok = 1;
- break;
- case 403:
- php_stream_notify_error(context, PHP_STREAM_NOTIFY_AUTH_RESULT,
- tmp_line, response_code);
- break;
- default:
- /* safety net in the event tmp_line == NULL */
- if (!tmp_line_len) {
- tmp_line[0] = '\0';
- }
- php_stream_notify_error(context, PHP_STREAM_NOTIFY_FAILURE,
- tmp_line, response_code);
- }
-
- Z_STRLEN_P(http_response) = tmp_line_len;
- Z_STRVAL_P(http_response) = estrndup(tmp_line, Z_STRLEN_P(http_response));
- if (Z_STRVAL_P(http_response)[Z_STRLEN_P(http_response)-1]=='\n') {
- Z_STRVAL_P(http_response)[Z_STRLEN_P(http_response)-1]=0;
- Z_STRLEN_P(http_response)--;
- if (Z_STRVAL_P(http_response)[Z_STRLEN_P(http_response)-1]=='\r') {
- Z_STRVAL_P(http_response)[Z_STRLEN_P(http_response)-1]=0;
- Z_STRLEN_P(http_response)--;
- }
- }
- Z_TYPE_P(http_response) = IS_STRING;
- zend_hash_next_index_insert(Z_ARRVAL_PP(response_header), &http_response, sizeof(zval *), NULL);
- }
- } else {
- php_stream_wrapper_log_error(wrapper, options TSRMLS_CC, "HTTP request failed, unexpected end of socket!");
- goto out;
- }
-
- /* read past HTTP headers */
-
- http_header_line = emalloc(HTTP_HEADER_BLOCK_SIZE);
-
- while (!body && !php_stream_eof(stream)) {
-
- if (php_stream_gets(stream, http_header_line, HTTP_HEADER_BLOCK_SIZE-1) != NULL) {
- char *p;
- int found_eol = 0;
- int http_header_line_length;
-
- http_header_line[HTTP_HEADER_BLOCK_SIZE-1] = '\0';
-
- p = http_header_line;
- while(*p) {
- while(*p == '\n' || *p == '\r') {
- *p = '\0';
- p--;
- found_eol = 1;
- }
- if (found_eol)
- break;
- p++;
- }
- http_header_line_length = p-http_header_line+1;
-
- if (!strncasecmp(http_header_line, "Location: ", 10)) {
- strlcpy(location, http_header_line + 10, sizeof(location));
- } else if (!strncasecmp(http_header_line, "Content-Type: ", 14)) {
- php_stream_notify_info(context, PHP_STREAM_NOTIFY_MIME_TYPE_IS, http_header_line + 14, 0);
- } else if (!strncasecmp(http_header_line, "Content-Length: ", 16)) {
- file_size = atoi(http_header_line + 16);
- php_stream_notify_file_size(context, file_size, http_header_line, 0);
- }
-
- if (http_header_line[0] == '\0') {
- body = 1;
- } else {
- zval *http_header;
-
- MAKE_STD_ZVAL(http_header);
-
- ZVAL_STRINGL(http_header, http_header_line, http_header_line_length, 1);
-
- zend_hash_next_index_insert(Z_ARRVAL_PP(response_header), &http_header, sizeof(zval *), NULL);
- }
- } else {
- break;
- }
- }
-
- if (!reqok || location[0] != '\0') {
- if (location[0] != '\0')
- php_stream_notify_info(context, PHP_STREAM_NOTIFY_REDIRECTED, location, 0);
-
- php_stream_close(stream);
- stream = NULL;
-
- if (location[0] != '\0') {
-
- zval *entry, **entryp;
- char new_path[HTTP_HEADER_BLOCK_SIZE];
- char loc_path[HTTP_HEADER_BLOCK_SIZE];
-
- *new_path='\0';
- if (strlen(location)<8 || (strncasecmp(location, "http://", sizeof("http://")-1) &&
- strncasecmp(location, "https://", sizeof("https://")-1) &&
- strncasecmp(location, "ftp://", sizeof("ftp://")-1) &&
- strncasecmp(location, "ftps://", sizeof("ftps://")-1)))
- {
- if (*location != '/') {
- if (*(location+1) != '\0' && resource->path) {
- char *s = strrchr(resource->path, '/');
- if (!s) {
- s = resource->path;
- if (!s[0]) {
- efree(s);
- s = resource->path = estrdup("/");
- } else {
- *s = '/';
- }
- }
- s[1] = '\0';
- if (resource->path && *(resource->path) == '/' && *(resource->path + 1) == '\0') {
- snprintf(loc_path, sizeof(loc_path) - 1, "%s%s", resource->path, location);
- } else {
- snprintf(loc_path, sizeof(loc_path) - 1, "%s/%s", resource->path, location);
- }
- } else {
- snprintf(loc_path, sizeof(loc_path) - 1, "/%s", location);
- }
- } else {
- strlcpy(loc_path, location, sizeof(loc_path));
- }
- if ((use_ssl && resource->port != 443) || (!use_ssl && resource->port != 80)) {
- snprintf(new_path, sizeof(new_path) - 1, "%s://%s:%d%s", resource->scheme, resource->host, resource->port, loc_path);
- } else {
- snprintf(new_path, sizeof(new_path) - 1, "%s://%s%s", resource->scheme, resource->host, loc_path);
- }
- } else {
- strlcpy(new_path, location, sizeof(new_path));
- }
- stream = php_stream_url_wrap_http_ex(wrapper, new_path, mode, options, opened_path, context, --redirect_max, 0 STREAMS_CC TSRMLS_CC);
- if (stream && stream->wrapperdata) {
- entryp = &entry;
- MAKE_STD_ZVAL(entry);
- ZVAL_EMPTY_STRING(entry);
- zend_hash_next_index_insert(Z_ARRVAL_PP(response_header), entryp, sizeof(zval *), NULL);
- zend_hash_internal_pointer_reset(Z_ARRVAL_P(stream->wrapperdata));
- while (zend_hash_get_current_data(Z_ARRVAL_P(stream->wrapperdata), (void **)&entryp) == SUCCESS) {
- zval_add_ref(entryp);
- zend_hash_next_index_insert(Z_ARRVAL_PP(response_header), entryp, sizeof(zval *), NULL);
- zend_hash_move_forward(Z_ARRVAL_P(stream->wrapperdata));
- }
- zval_dtor(stream->wrapperdata);
- FREE_ZVAL(stream->wrapperdata);
- }
- } else {
- php_stream_wrapper_log_error(wrapper, options TSRMLS_CC, "HTTP request failed! %s", tmp_line);
- }
- }
-out:
- if (http_header_line)
- efree(http_header_line);
- if (scratch)
- efree(scratch);
- php_url_free(resource);
-
- if (stream) {
- if (header_init) {
- stream->wrapperdata = *response_header;
- zval_add_ref(response_header);
- }
- php_stream_notify_progress_init(context, 0, file_size);
- /* Restore original chunk size now that we're done with headers */
- if (options & STREAM_WILL_CAST)
- php_stream_set_chunk_size(stream, chunk_size);
-
- /* restore the users auto-detect-line-endings setting */
- stream->flags |= eol_detect;
-
- /* as far as streams are concerned, we are now at the start of
- * the stream */
- stream->position = 0;
- }
-
- return stream;
-}
-
-php_stream *php_stream_url_wrap_http(php_stream_wrapper *wrapper, char *path, char *mode, int options, char **opened_path, php_stream_context *context STREAMS_DC TSRMLS_DC)
-{
- return php_stream_url_wrap_http_ex(wrapper, path, mode, options, opened_path, context, PHP_URL_REDIRECT_MAX, 1 STREAMS_CC TSRMLS_CC);
-}
-
-static int php_stream_http_stream_stat(php_stream_wrapper *wrapper,
- php_stream *stream,
- php_stream_statbuf *ssb
- TSRMLS_DC)
-{
- /* one day, we could fill in the details based on Date: and Content-Length:
- * headers. For now, we return with a failure code to prevent the underlying
- * file's details from being used instead. */
- return -1;
-}
-
-static php_stream_wrapper_ops http_stream_wops = {
- php_stream_url_wrap_http,
- NULL, /* stream_close */
- php_stream_http_stream_stat,
- NULL, /* stat_url */
- NULL, /* opendir */
- "http",
- NULL, /* unlink */
- NULL, /* rename */
- NULL, /* mkdir */
- NULL /* rmdir */
-};
-
-PHPAPI php_stream_wrapper php_stream_http_wrapper = {
- &http_stream_wops,
- NULL,
- 1 /* is_url */
-};
-
-/*
- * 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/standard/image.c b/ext/standard/image.c
deleted file mode 100644
index 8b85ab7192..0000000000
--- a/ext/standard/image.c
+++ /dev/null
@@ -1,1362 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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. |
- +----------------------------------------------------------------------+
- | Authors: Rasmus Lerdorf <rasmus@php.net> |
- | Marcus Boerger <helly@php.net> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-#include "php.h"
-#include <stdio.h>
-#if defined(NETWARE) && !defined(NEW_LIBC)
-#include <sys/socket.h>
-#endif
-#if HAVE_FCNTL_H
-#include <fcntl.h>
-#endif
-#include "fopen_wrappers.h"
-#include "ext/standard/fsock.h"
-#if HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-#include "php_image.h"
-
-#if HAVE_ZLIB && !defined(COMPILE_DL_ZLIB)
-#include "zlib.h"
-#endif
-
-/* file type markers */
-PHPAPI const char php_sig_gif[3] = {'G', 'I', 'F'};
-PHPAPI const char php_sig_psd[4] = {'8', 'B', 'P', 'S'};
-PHPAPI const char php_sig_bmp[2] = {'B', 'M'};
-PHPAPI const char php_sig_swf[3] = {'F', 'W', 'S'};
-PHPAPI const char php_sig_swc[3] = {'C', 'W', 'S'};
-PHPAPI const char php_sig_jpg[3] = {(char) 0xff, (char) 0xd8, (char) 0xff};
-PHPAPI const char php_sig_png[8] = {(char) 0x89, (char) 0x50, (char) 0x4e, (char) 0x47,
- (char) 0x0d, (char) 0x0a, (char) 0x1a, (char) 0x0a};
-PHPAPI const char php_sig_tif_ii[4] = {'I','I', (char)0x2A, (char)0x00};
-PHPAPI const char php_sig_tif_mm[4] = {'M','M', (char)0x00, (char)0x2A};
-PHPAPI const char php_sig_jpc[3] = {(char)0xff, (char)0x4f, (char)0xff};
-PHPAPI const char php_sig_jp2[12] = {(char)0x00, (char)0x00, (char)0x00, (char)0x0c,
- (char)0x6a, (char)0x50, (char)0x20, (char)0x20,
- (char)0x0d, (char)0x0a, (char)0x87, (char)0x0a};
-PHPAPI const char php_sig_iff[4] = {'F','O','R','M'};
-
-/* REMEMBER TO ADD MIME-TYPE TO FUNCTION php_image_type_to_mime_type */
-/* PCX must check first 64bytes and byte 0=0x0a and byte2 < 0x06 */
-
-/* return info as a struct, to make expansion easier */
-
-struct gfxinfo {
- unsigned int width;
- unsigned int height;
- unsigned int bits;
- unsigned int channels;
-};
-
-/* {{{ PHP_MINIT_FUNCTION(imagetypes)
- * Register IMAGETYPE_<xxx> constants used by GetImageSize(), image_type_to_mime_type, ext/exif */
-PHP_MINIT_FUNCTION(imagetypes)
-{
- REGISTER_LONG_CONSTANT("IMAGETYPE_GIF", IMAGE_FILETYPE_GIF, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("IMAGETYPE_JPEG", IMAGE_FILETYPE_JPEG, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("IMAGETYPE_PNG", IMAGE_FILETYPE_PNG, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("IMAGETYPE_SWF", IMAGE_FILETYPE_SWF, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("IMAGETYPE_PSD", IMAGE_FILETYPE_PSD, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("IMAGETYPE_BMP", IMAGE_FILETYPE_BMP, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("IMAGETYPE_TIFF_II", IMAGE_FILETYPE_TIFF_II, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("IMAGETYPE_TIFF_MM", IMAGE_FILETYPE_TIFF_MM, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("IMAGETYPE_JPC", IMAGE_FILETYPE_JPC, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("IMAGETYPE_JP2", IMAGE_FILETYPE_JP2, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("IMAGETYPE_JPX", IMAGE_FILETYPE_JPX, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("IMAGETYPE_JB2", IMAGE_FILETYPE_JB2, CONST_CS | CONST_PERSISTENT);
-#if HAVE_ZLIB && !defined(COMPILE_DL_ZLIB)
- REGISTER_LONG_CONSTANT("IMAGETYPE_SWC", IMAGE_FILETYPE_SWC, CONST_CS | CONST_PERSISTENT);
-#endif
- REGISTER_LONG_CONSTANT("IMAGETYPE_IFF", IMAGE_FILETYPE_IFF, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("IMAGETYPE_WBMP", IMAGE_FILETYPE_WBMP, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("IMAGETYPE_JPEG2000",IMAGE_FILETYPE_JPC, CONST_CS | CONST_PERSISTENT); /* keep alias */
- REGISTER_LONG_CONSTANT("IMAGETYPE_XBM", IMAGE_FILETYPE_XBM, CONST_CS | CONST_PERSISTENT);
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ php_handle_gif
- * routine to handle GIF files. If only everything were that easy... ;} */
-static struct gfxinfo *php_handle_gif (php_stream * stream TSRMLS_DC)
-{
- struct gfxinfo *result = NULL;
- unsigned char dim[5];
-
- if (php_stream_seek(stream, 3, SEEK_CUR))
- return NULL;
-
- if (php_stream_read(stream, dim, sizeof(dim)) != sizeof(dim))
- return NULL;
-
- result = (struct gfxinfo *) ecalloc(1, sizeof(struct gfxinfo));
- result->width = (unsigned int)dim[0] | (((unsigned int)dim[1])<<8);
- result->height = (unsigned int)dim[2] | (((unsigned int)dim[3])<<8);
- result->bits = dim[4]&0x80 ? ((((unsigned int)dim[4])&0x07) + 1) : 0;
- result->channels = 3; /* allways */
-
- return result;
-}
-/* }}} */
-
-/* {{{ php_handle_psd
- */
-static struct gfxinfo *php_handle_psd (php_stream * stream TSRMLS_DC)
-{
- struct gfxinfo *result = NULL;
- unsigned char dim[8];
-
- if (php_stream_seek(stream, 11, SEEK_CUR))
- return NULL;
-
- if (php_stream_read(stream, dim, sizeof(dim)) != sizeof(dim))
- return NULL;
-
- result = (struct gfxinfo *) ecalloc(1, sizeof(struct gfxinfo));
- result->height = (((unsigned int)dim[0]) << 24) + (((unsigned int)dim[1]) << 16) + (((unsigned int)dim[2]) << 8) + ((unsigned int)dim[3]);
- result->width = (((unsigned int)dim[4]) << 24) + (((unsigned int)dim[5]) << 16) + (((unsigned int)dim[6]) << 8) + ((unsigned int)dim[7]);
-
- return result;
-}
-/* }}} */
-
-/* {{{ php_handle_bmp
- */
-static struct gfxinfo *php_handle_bmp (php_stream * stream TSRMLS_DC)
-{
- struct gfxinfo *result = NULL;
- unsigned char dim[16];
- int size;
-
- if (php_stream_seek(stream, 11, SEEK_CUR))
- return NULL;
-
- if (php_stream_read(stream, dim, sizeof(dim)) != sizeof(dim))
- return NULL;
-
- size = (((unsigned int)dim[ 3]) << 24) + (((unsigned int)dim[ 2]) << 16) + (((unsigned int)dim[ 1]) << 8) + ((unsigned int) dim[ 0]);
- if (size == 12) {
- result = (struct gfxinfo *) ecalloc (1, sizeof(struct gfxinfo));
- result->width = (((unsigned int)dim[ 5]) << 8) + ((unsigned int) dim[ 4]);
- result->height = (((unsigned int)dim[ 7]) << 8) + ((unsigned int) dim[ 6]);
- result->bits = ((unsigned int)dim[11]);
- } else if (size > 12 && (size <= 64 || size == 108)) {
- result = (struct gfxinfo *) ecalloc (1, sizeof(struct gfxinfo));
- result->width = (((unsigned int)dim[ 7]) << 24) + (((unsigned int)dim[ 6]) << 16) + (((unsigned int)dim[ 5]) << 8) + ((unsigned int) dim[ 4]);
- result->height = (((unsigned int)dim[11]) << 24) + (((unsigned int)dim[10]) << 16) + (((unsigned int)dim[ 9]) << 8) + ((unsigned int) dim[ 8]);
- result->bits = (((unsigned int)dim[15]) << 8) + ((unsigned int)dim[14]);
- } else {
- return NULL;
- }
-
- return result;
-}
-/* }}} */
-
-/* {{{ php_swf_get_bits
- * routines to handle SWF files. */
-static unsigned long int php_swf_get_bits (unsigned char* buffer, unsigned int pos, unsigned int count)
-{
- unsigned int loop;
- unsigned long int result = 0;
-
- for (loop = pos; loop < pos + count; loop++)
- {
- result = result +
- ((((buffer[loop / 8]) >> (7 - (loop % 8))) & 0x01) << (count - (loop - pos) - 1));
- }
- return result;
-}
-/* }}} */
-
-#if HAVE_ZLIB && !defined(COMPILE_DL_ZLIB)
-/* {{{ php_handle_swc
- */
-static struct gfxinfo *php_handle_swc(php_stream * stream TSRMLS_DC)
-{
- struct gfxinfo *result = NULL;
-
- long bits;
- unsigned char a[64];
- unsigned long len=64, szlength;
- int factor=1,maxfactor=16;
- int slength, status=0;
- char *b, *buf=NULL, *bufz=NULL;
-
- b = ecalloc (1, len + 1);
-
- if (php_stream_seek(stream, 5, SEEK_CUR))
- return NULL;
-
- if (php_stream_read(stream, a, sizeof(a)) != sizeof(a))
- return NULL;
-
- if (uncompress(b, &len, a, sizeof(a)) != Z_OK) {
- /* failed to decompress the file, will try reading the rest of the file */
- if (php_stream_seek(stream, 8, SEEK_SET))
- return NULL;
-
- slength = php_stream_copy_to_mem(stream, &bufz, PHP_STREAM_COPY_ALL, 0);
-
- /*
- * zlib::uncompress() wants to know the output data length
- * if none was given as a parameter
- * we try from input length * 2 up to input length * 2^8
- * doubling it whenever it wasn't big enough
- * that should be eneugh for all real life cases
- */
-
- do {
- szlength=slength*(1<<factor++);
- buf = (char *) erealloc(buf,szlength);
- status = uncompress(buf, &szlength, bufz, slength);
- } while ((status==Z_BUF_ERROR)&&(factor<maxfactor));
-
- if (bufz) {
- pefree(bufz, 0);
- }
-
- if (status == Z_OK) {
- memcpy(b, buf, len);
- }
-
- if (buf) {
- efree(buf);
- }
- }
-
- if (!status) {
- result = (struct gfxinfo *) ecalloc (1, sizeof (struct gfxinfo));
- bits = php_swf_get_bits (b, 0, 5);
- result->width = (php_swf_get_bits (b, 5 + bits, bits) -
- php_swf_get_bits (b, 5, bits)) / 20;
- result->height = (php_swf_get_bits (b, 5 + (3 * bits), bits) -
- php_swf_get_bits (b, 5 + (2 * bits), bits)) / 20;
- } else {
- result = NULL;
- }
-
- efree (b);
- return result;
-}
-/* }}} */
-#endif
-
-/* {{{ php_handle_swf
- */
-static struct gfxinfo *php_handle_swf (php_stream * stream TSRMLS_DC)
-{
- struct gfxinfo *result = NULL;
- long bits;
- unsigned char a[32];
-
- if (php_stream_seek(stream, 5, SEEK_CUR))
- return NULL;
-
- if (php_stream_read(stream, a, sizeof(a)) != sizeof(a))
- return NULL;
-
- result = (struct gfxinfo *) ecalloc (1, sizeof (struct gfxinfo));
- bits = php_swf_get_bits (a, 0, 5);
- result->width = (php_swf_get_bits (a, 5 + bits, bits) -
- php_swf_get_bits (a, 5, bits)) / 20;
- result->height = (php_swf_get_bits (a, 5 + (3 * bits), bits) -
- php_swf_get_bits (a, 5 + (2 * bits), bits)) / 20;
- result->bits = 0;
- result->channels = 0;
- return result;
-}
-/* }}} */
-
-/* {{{ php_handle_png
- * routine to handle PNG files */
-static struct gfxinfo *php_handle_png (php_stream * stream TSRMLS_DC)
-{
- struct gfxinfo *result = NULL;
- unsigned char dim[9];
-/* Width: 4 bytes
- * Height: 4 bytes
- * Bit depth: 1 byte
- * Color type: 1 byte
- * Compression method: 1 byte
- * Filter method: 1 byte
- * Interlace method: 1 byte
- */
-
- if (php_stream_seek(stream, 8, SEEK_CUR))
- return NULL;
-
- if((php_stream_read(stream, dim, sizeof(dim))) < sizeof(dim))
- return NULL;
-
- result = (struct gfxinfo *) ecalloc(1, sizeof(struct gfxinfo));
- result->width = (((unsigned int)dim[0]) << 24) + (((unsigned int)dim[1]) << 16) + (((unsigned int)dim[2]) << 8) + ((unsigned int)dim[3]);
- result->height = (((unsigned int)dim[4]) << 24) + (((unsigned int)dim[5]) << 16) + (((unsigned int)dim[6]) << 8) + ((unsigned int)dim[7]);
- result->bits = (unsigned int)dim[8];
- return result;
-}
-/* }}} */
-
-/* routines to handle JPEG data */
-
-/* some defines for the different JPEG block types */
-#define M_SOF0 0xC0 /* Start Of Frame N */
-#define M_SOF1 0xC1 /* N indicates which compression process */
-#define M_SOF2 0xC2 /* Only SOF0-SOF2 are now in common use */
-#define M_SOF3 0xC3
-#define M_SOF5 0xC5 /* NB: codes C4 and CC are NOT SOF markers */
-#define M_SOF6 0xC6
-#define M_SOF7 0xC7
-#define M_SOF9 0xC9
-#define M_SOF10 0xCA
-#define M_SOF11 0xCB
-#define M_SOF13 0xCD
-#define M_SOF14 0xCE
-#define M_SOF15 0xCF
-#define M_SOI 0xD8
-#define M_EOI 0xD9 /* End Of Image (end of datastream) */
-#define M_SOS 0xDA /* Start Of Scan (begins compressed data) */
-#define M_APP0 0xe0
-#define M_APP1 0xe1
-#define M_APP2 0xe2
-#define M_APP3 0xe3
-#define M_APP4 0xe4
-#define M_APP5 0xe5
-#define M_APP6 0xe6
-#define M_APP7 0xe7
-#define M_APP8 0xe8
-#define M_APP9 0xe9
-#define M_APP10 0xea
-#define M_APP11 0xeb
-#define M_APP12 0xec
-#define M_APP13 0xed
-#define M_APP14 0xee
-#define M_APP15 0xef
-#define M_COM 0xFE /* COMment */
-
-#define M_PSEUDO 0xFFD8 /* pseudo marker for start of image(byte 0) */
-
-/* {{{ php_read2
- */
-static unsigned short php_read2(php_stream * stream TSRMLS_DC)
-{
- unsigned char a[2];
-
- /* just return 0 if we hit the end-of-file */
- if((php_stream_read(stream, a, sizeof(a))) <= 0) return 0;
-
- return (((unsigned short)a[0]) << 8) + ((unsigned short)a[1]);
-}
-/* }}} */
-
-/* {{{ php_next_marker
- * get next marker byte from file */
-static unsigned int php_next_marker(php_stream * stream, int last_marker, int comment_correction, int ff_read TSRMLS_DC)
-{
- int a=0, marker;
-
- /* get marker byte, swallowing possible padding */
- if (last_marker==M_COM && comment_correction) {
- /* some software does not count the length bytes of COM section */
- /* one company doing so is very much envolved in JPEG... so we accept too */
- /* by the way: some of those companies changed their code now... */
- comment_correction = 2;
- } else {
- last_marker = 0;
- comment_correction = 0;
- }
- if (ff_read) {
- a = 1; /* already read 0xff in filetype detection */
- }
- do {
- if ((marker = php_stream_getc(stream)) == EOF)
- {
- return M_EOI;/* we hit EOF */
- }
- if (last_marker==M_COM && comment_correction>0)
- {
- if (marker != 0xFF)
- {
- marker = 0xff;
- comment_correction--;
- } else {
- last_marker = M_PSEUDO; /* stop skipping non 0xff for M_COM */
- }
- }
- if (++a > 10)
- {
- /* who knows the maxim amount of 0xff? though 7 */
- /* but found other implementations */
- return M_EOI;
- }
- } while (marker == 0xff);
- if (a < 2)
- {
- return M_EOI; /* at least one 0xff is needed before marker code */
- }
- if ( last_marker==M_COM && comment_correction)
- {
- return M_EOI; /* ah illegal: char after COM section not 0xFF */
- }
- return (unsigned int)marker;
-}
-/* }}} */
-
-/* {{{ php_skip_variable
- * skip over a variable-length block; assumes proper length marker */
-static int php_skip_variable(php_stream * stream TSRMLS_DC)
-{
- off_t length = ((unsigned int)php_read2(stream TSRMLS_CC));
-
- if (length < 2) {
- return 0;
- }
- length = length - 2;
- php_stream_seek(stream, (long)length, SEEK_CUR);
- return 1;
-}
-/* }}} */
-
-/* {{{ php_read_APP
- */
-static int php_read_APP(php_stream * stream, unsigned int marker, zval *info TSRMLS_DC)
-{
- unsigned short length;
- unsigned char *buffer;
- unsigned char markername[16];
- zval *tmp;
-
- length = php_read2(stream TSRMLS_CC);
- if (length < 2) {
- return 0;
- }
- length -= 2; /* length includes itself */
-
- buffer = emalloc(length);
-
- if (php_stream_read(stream, buffer, (long) length) <= 0) {
- efree(buffer);
- return 0;
- }
-
- sprintf(markername, "APP%d", marker - M_APP0);
-
- if (zend_hash_find(Z_ARRVAL_P(info), markername, strlen(markername)+1, (void **) &tmp) == FAILURE) {
- /* XXX we onyl catch the 1st tag of it's kind! */
- add_assoc_stringl(info, markername, buffer, length, 1);
- }
-
- efree(buffer);
- return 1;
-}
-/* }}} */
-
-/* {{{ php_handle_jpeg
- main loop to parse JPEG structure */
-static struct gfxinfo *php_handle_jpeg (php_stream * stream, pval *info TSRMLS_DC)
-{
- struct gfxinfo *result = NULL;
- unsigned int marker = M_PSEUDO;
- unsigned short length, ff_read=1;
-
- for (;;) {
- marker = php_next_marker(stream, marker, 1, ff_read TSRMLS_CC);
- ff_read = 0;
- switch (marker) {
- case M_SOF0:
- case M_SOF1:
- case M_SOF2:
- case M_SOF3:
- case M_SOF5:
- case M_SOF6:
- case M_SOF7:
- case M_SOF9:
- case M_SOF10:
- case M_SOF11:
- case M_SOF13:
- case M_SOF14:
- case M_SOF15:
- if (result == NULL) {
- /* handle SOFn block */
- result = (struct gfxinfo *) ecalloc(1, sizeof(struct gfxinfo));
- length = php_read2(stream TSRMLS_CC);
- result->bits = php_stream_getc(stream);
- result->height = php_read2(stream TSRMLS_CC);
- result->width = php_read2(stream TSRMLS_CC);
- result->channels = php_stream_getc(stream);
- if (!info || length < 8) { /* if we don't want an extanded info -> return */
- return result;
- }
- if (php_stream_seek(stream, length - 8, SEEK_CUR)) { /* file error after info */
- return result;
- }
- } else {
- if (!php_skip_variable(stream TSRMLS_CC)) {
- return result;
- }
- }
- break;
-
- case M_APP0:
- case M_APP1:
- case M_APP2:
- case M_APP3:
- case M_APP4:
- case M_APP5:
- case M_APP6:
- case M_APP7:
- case M_APP8:
- case M_APP9:
- case M_APP10:
- case M_APP11:
- case M_APP12:
- case M_APP13:
- case M_APP14:
- case M_APP15:
- if (info) {
- if (!php_read_APP(stream, marker, info TSRMLS_CC)) { /* read all the app markes... */
- return result;
- }
- } else {
- if (!php_skip_variable(stream TSRMLS_CC)) {
- return result;
- }
- }
- break;
-
- case M_SOS:
- case M_EOI:
- return result; /* we're about to hit image data, or are at EOF. stop processing. */
-
- default:
- if (!php_skip_variable(stream TSRMLS_CC)) { /* anything else isn't interesting */
- return result;
- }
- break;
- }
- }
-
- return result; /* perhaps image broken -> no info but size */
-}
-/* }}} */
-
-/* {{{ php_read4
- */
-static unsigned int php_read4(php_stream * stream TSRMLS_DC)
-{
- unsigned char a[4];
-
- /* just return 0 if we hit the end-of-file */
- if ((php_stream_read(stream, a, sizeof(a))) != sizeof(a)) return 0;
-
- return (((unsigned int)a[0]) << 24)
- + (((unsigned int)a[1]) << 16)
- + (((unsigned int)a[2]) << 8)
- + (((unsigned int)a[3]));
-}
-/* }}} */
-
-/* {{{ JPEG 2000 Marker Codes */
-#define JPEG2000_MARKER_PREFIX 0xFF /* All marker codes start with this */
-#define JPEG2000_MARKER_SOC 0x4F /* Start of Codestream */
-#define JPEG2000_MARKER_SOT 0x90 /* Start of Tile part */
-#define JPEG2000_MARKER_SOD 0x93 /* Start of Data */
-#define JPEG2000_MARKER_EOC 0xD9 /* End of Codestream */
-#define JPEG2000_MARKER_SIZ 0x51 /* Image and tile size */
-#define JPEG2000_MARKER_COD 0x52 /* Coding style default */
-#define JPEG2000_MARKER_COC 0x53 /* Coding style component */
-#define JPEG2000_MARKER_RGN 0x5E /* Region of interest */
-#define JPEG2000_MARKER_QCD 0x5C /* Quantization default */
-#define JPEG2000_MARKER_QCC 0x5D /* Quantization component */
-#define JPEG2000_MARKER_POC 0x5F /* Progression order change */
-#define JPEG2000_MARKER_TLM 0x55 /* Tile-part lengths */
-#define JPEG2000_MARKER_PLM 0x57 /* Packet length, main header */
-#define JPEG2000_MARKER_PLT 0x58 /* Packet length, tile-part header */
-#define JPEG2000_MARKER_PPM 0x60 /* Packed packet headers, main header */
-#define JPEG2000_MARKER_PPT 0x61 /* Packed packet headers, tile part header */
-#define JPEG2000_MARKER_SOP 0x91 /* Start of packet */
-#define JPEG2000_MARKER_EPH 0x92 /* End of packet header */
-#define JPEG2000_MARKER_CRG 0x63 /* Component registration */
-#define JPEG2000_MARKER_COM 0x64 /* Comment */
-/* }}} */
-
-/* {{{ php_handle_jpc
- Main loop to parse JPEG2000 raw codestream structure */
-static struct gfxinfo *php_handle_jpc(php_stream * stream TSRMLS_DC)
-{
- struct gfxinfo *result = NULL;
- unsigned short dummy_short;
- int dummy_int, highest_bit_depth, bit_depth;
- unsigned char first_marker_id;
- unsigned int i;
-
- /* JPEG 2000 components can be vastly different from one another.
- Each component can be sampled at a different resolution, use
- a different colour space, have a seperate colour depth, and
- be compressed totally differently! This makes giving a single
- "bit depth" answer somewhat problematic. For this implementation
- we'll use the highest depth encountered. */
-
- /* Get the single byte that remains after the file type indentification */
- first_marker_id = php_stream_getc(stream);
-
- /* Ensure that this marker is SIZ (as is mandated by the standard) */
- if (first_marker_id != JPEG2000_MARKER_SIZ) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "JPEG2000 codestream corrupt(Expected SIZ marker not found after SOC)");
- return NULL;
- }
-
- result = (struct gfxinfo *)ecalloc(1, sizeof(struct gfxinfo));
-
- dummy_short = php_read2(stream TSRMLS_CC); /* Lsiz */
- dummy_short = php_read2(stream TSRMLS_CC); /* Rsiz */
- result->height = php_read4(stream TSRMLS_CC); /* Xsiz */
- result->width = php_read4(stream TSRMLS_CC); /* Ysiz */
-
- dummy_int = php_read4(stream TSRMLS_CC); /* XOsiz */
- dummy_int = php_read4(stream TSRMLS_CC); /* YOsiz */
- dummy_int = php_read4(stream TSRMLS_CC); /* XTsiz */
- dummy_int = php_read4(stream TSRMLS_CC); /* YTsiz */
- dummy_int = php_read4(stream TSRMLS_CC); /* XTOsiz */
- dummy_int = php_read4(stream TSRMLS_CC); /* YTOsiz */
-
- result->channels = php_read2(stream TSRMLS_CC); /* Csiz */
-
- /* Collect bit depth info */
- highest_bit_depth = bit_depth = 0;
- for (i = 0; i < result->channels; i++) {
- bit_depth = php_stream_getc(stream); /* Ssiz[i] */
- bit_depth++;
- if (bit_depth > highest_bit_depth) {
- highest_bit_depth = bit_depth;
- }
-
- php_stream_getc(stream); /* XRsiz[i] */
- php_stream_getc(stream); /* YRsiz[i] */
- }
-
- result->bits = highest_bit_depth;
-
- return result;
-}
-/* }}} */
-
-/* {{{ php_handle_jp2
- main loop to parse JPEG 2000 JP2 wrapper format structure */
-static struct gfxinfo *php_handle_jp2(php_stream *stream TSRMLS_DC)
-{
- struct gfxinfo *result = NULL;
- unsigned int box_length;
- unsigned int box_type;
- char jp2c_box_id[] = {(char)0x6a, (char)0x70, (char)0x32, (char)0x63};
-
- /* JP2 is a wrapper format for JPEG 2000. Data is contained within "boxes".
- Boxes themselves can be contained within "super-boxes". Super-Boxes can
- contain super-boxes which provides us with a hierarchical storage system.
-
- It is valid for a JP2 file to contain multiple individual codestreams.
- We'll just look for the first codestream at the root of the box structure
- and handle that.
- */
-
- for (;;)
- {
- box_length = php_read4(stream TSRMLS_CC); /* LBox */
- /* TBox */
- if (php_stream_read(stream, (void *)&box_type, sizeof(box_type)) != sizeof(box_type)) {
- /* Use this as a general "out of stream" error */
- break;
- }
-
- if (box_length == 1) {
- /* We won't handle XLBoxes */
- return NULL;
- }
-
- if (!memcmp(&box_type, jp2c_box_id, 4))
- {
- /* Skip the first 3 bytes to emulate the file type examination */
- php_stream_seek(stream, 3, SEEK_CUR);
-
- result = php_handle_jpc(stream TSRMLS_CC);
- break;
- }
-
- /* Skip over LBox (Which includes both TBox and LBox itself */
- php_stream_seek(stream, box_length - 8, SEEK_CUR);
- }
-
- if (result == NULL) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "JP2 file has no codestreams at root level");
- }
-
- return result;
-}
-/* }}} */
-
-/* {{{ tiff constants
- */
-PHPAPI const int php_tiff_bytes_per_format[] = {0, 1, 1, 2, 4, 8, 1, 1, 2, 4, 8, 4, 8};
-
-/* uncompressed only */
-#define TAG_IMAGEWIDTH 0x0100
-#define TAG_IMAGEHEIGHT 0x0101
-/* compressed images only */
-#define TAG_COMP_IMAGEWIDTH 0xA002
-#define TAG_COMP_IMAGEHEIGHT 0xA003
-
-#define TAG_FMT_BYTE 1
-#define TAG_FMT_STRING 2
-#define TAG_FMT_USHORT 3
-#define TAG_FMT_ULONG 4
-#define TAG_FMT_URATIONAL 5
-#define TAG_FMT_SBYTE 6
-#define TAG_FMT_UNDEFINED 7
-#define TAG_FMT_SSHORT 8
-#define TAG_FMT_SLONG 9
-#define TAG_FMT_SRATIONAL 10
-#define TAG_FMT_SINGLE 11
-#define TAG_FMT_DOUBLE 12
-/* }}} */
-
-/* {{{ php_ifd_get16u
- * Convert a 16 bit unsigned value from file's native byte order */
-static int php_ifd_get16u(void *Short, int motorola_intel)
-{
- if (motorola_intel) {
- return (((unsigned char *)Short)[0] << 8) | ((unsigned char *)Short)[1];
- } else {
- return (((unsigned char *)Short)[1] << 8) | ((unsigned char *)Short)[0];
- }
-}
-/* }}} */
-
-/* {{{ php_ifd_get16s
- * Convert a 16 bit signed value from file's native byte order */
-static signed short php_ifd_get16s(void *Short, int motorola_intel)
-{
- return (signed short)php_ifd_get16u(Short, motorola_intel);
-}
-/* }}} */
-
-/* {{{ php_ifd_get32s
- * Convert a 32 bit signed value from file's native byte order */
-static int php_ifd_get32s(void *Long, int motorola_intel)
-{
- if (motorola_intel) {
- return ((( char *)Long)[0] << 24) | (((unsigned char *)Long)[1] << 16)
- | (((unsigned char *)Long)[2] << 8 ) | (((unsigned char *)Long)[3] << 0 );
- } else {
- return ((( char *)Long)[3] << 24) | (((unsigned char *)Long)[2] << 16)
- | (((unsigned char *)Long)[1] << 8 ) | (((unsigned char *)Long)[0] << 0 );
- }
-}
-/* }}} */
-
-/* {{{ php_ifd_get32u
- * Convert a 32 bit unsigned value from file's native byte order */
-static unsigned php_ifd_get32u(void *Long, int motorola_intel)
-{
- return (unsigned)php_ifd_get32s(Long, motorola_intel) & 0xffffffff;
-}
-/* }}} */
-
-/* {{{ php_handle_tiff
- main loop to parse TIFF structure */
-static struct gfxinfo *php_handle_tiff (php_stream * stream, pval *info, int motorola_intel TSRMLS_DC)
-{
- struct gfxinfo *result = NULL;
- int i, num_entries;
- unsigned char *dir_entry;
- size_t ifd_size, dir_size, entry_value, width=0, height=0, ifd_addr;
- int entry_tag , entry_type;
- char *ifd_data, ifd_ptr[4];
-
- if (php_stream_read(stream, ifd_ptr, 4) != 4)
- return NULL;
- ifd_addr = php_ifd_get32u(ifd_ptr, motorola_intel);
- if (php_stream_seek(stream, ifd_addr-8, SEEK_CUR))
- return NULL;
- ifd_size = 2;
- ifd_data = emalloc(ifd_size);
- if (php_stream_read(stream, ifd_data, 2) != 2) {
- efree(ifd_data);
- return NULL;
- }
- num_entries = php_ifd_get16u(ifd_data, motorola_intel);
- dir_size = 2/*num dir entries*/ +12/*length of entry*/*num_entries +4/* offset to next ifd (points to thumbnail or NULL)*/;
- ifd_size = dir_size;
- ifd_data = erealloc(ifd_data,ifd_size);
- if (php_stream_read(stream, ifd_data+2, dir_size-2) != dir_size-2) {
- efree(ifd_data);
- return NULL;
- }
- /* now we have the directory we can look how long it should be */
- ifd_size = dir_size;
- for(i=0;i<num_entries;i++) {
- dir_entry = ifd_data+2+i*12;
- entry_tag = php_ifd_get16u(dir_entry+0, motorola_intel);
- entry_type = php_ifd_get16u(dir_entry+2, motorola_intel);
- switch(entry_type) {
- case TAG_FMT_BYTE:
- case TAG_FMT_SBYTE:
- entry_value = (size_t)(dir_entry[8]);
- break;
- case TAG_FMT_USHORT:
- entry_value = php_ifd_get16u(dir_entry+8, motorola_intel);
- break;
- case TAG_FMT_SSHORT:
- entry_value = php_ifd_get16s(dir_entry+8, motorola_intel);
- break;
- case TAG_FMT_ULONG:
- entry_value = php_ifd_get32u(dir_entry+8, motorola_intel);
- break;
- case TAG_FMT_SLONG:
- entry_value = php_ifd_get32s(dir_entry+8, motorola_intel);
- break;
- default:
- continue;
- }
- switch(entry_tag) {
- case TAG_IMAGEWIDTH:
- case TAG_COMP_IMAGEWIDTH:
- width = entry_value;
- break;
- case TAG_IMAGEHEIGHT:
- case TAG_COMP_IMAGEHEIGHT:
- height = entry_value;
- break;
- }
- }
- efree(ifd_data);
- if ( width && height) {
- /* not the same when in for-loop */
- result = (struct gfxinfo *) ecalloc(1, sizeof(struct gfxinfo));
- result->height = height;
- result->width = width;
- result->bits = 0;
- result->channels = 0;
- return result;
- }
- return NULL;
-}
-/* }}} */
-
-/* {{{ php_handle_psd
- */
-static struct gfxinfo *php_handle_iff(php_stream * stream TSRMLS_DC)
-{
- struct gfxinfo *result = NULL;
- unsigned char a[10];
- int chunkId;
- int size;
-
- if (php_stream_read(stream, a, 8) != 8)
- return NULL;
- if (strncmp(a+4, "ILBM", 4) && strncmp(a+4, "PBM ", 4))
- return NULL;
-
- result = (struct gfxinfo *) ecalloc(1, sizeof(struct gfxinfo));
-
- /* loop chunks to find BMHD chunk */
- do {
- if (php_stream_read(stream, a, 8) != 8) {
- efree(result);
- return NULL;
- }
- chunkId = php_ifd_get32s(a+0, 1);
- size = php_ifd_get32s(a+4, 1);
- if ((size & 1) == 1) {
- size++;
- }
- if (chunkId == 0x424d4844) { /* BMHD chunk */
- if (php_stream_read(stream, a, 9) != 9) {
- efree(result);
- return NULL;
- }
- result->width = php_ifd_get16s(a+0, 1);
- result->height = php_ifd_get16s(a+2, 1);
- result->bits = a[8] & 0xff;
- result->channels = 0;
- if (result->width > 0 && result->height > 0 && result->bits > 0 && result->bits < 33)
- return result;
- } else {
- if (php_stream_seek(stream, size, SEEK_CUR)) {
- efree(result);
- return NULL;
- }
- }
- } while (1);
-}
-/* }}} */
-
-/* {{{ php_get_wbmp
- * int WBMP file format type
- * byte Header Type
- * byte Extended Header
- * byte Header Data (type 00 = multibyte)
- * byte Header Data (type 11 = name/pairs)
- * int Number of columns
- * int Number of rows
- */
-static int php_get_wbmp(php_stream *stream, struct gfxinfo **result, int check TSRMLS_DC)
-{
- int i, width = 0, height = 0;
-
- if (php_stream_rewind(stream)) {
- return 0;
- }
-
- /* get type */
- if (php_stream_getc(stream) != 0) {
- return 0;
- }
-
- /* skip header */
- do {
- i = php_stream_getc(stream);
- if (i < 0) {
- return 0;
- }
- } while (i & 0x80);
-
- /* get width */
- do {
- i = php_stream_getc(stream);
- if (i < 0) {
- return 0;
- }
- width = (width << 7) | (i & 0x7f);
- } while (i & 0x80);
-
- /* get height */
- do {
- i = php_stream_getc(stream);
- if (i < 0) {
- return 0;
- }
- height = (height << 7) | (i & 0x7f);
- } while (i & 0x80);
-
- /* maximum valid sizes for wbmp (although 127x127 may be a more accurate one) */
- if (height > 2048 || width > 2048) {
- return 0;
- }
-
- if (!check) {
- (*result)->width = width;
- (*result)->height = height;
- }
-
- return IMAGE_FILETYPE_WBMP;
-}
-/* }}} */
-
-/* {{{ php_handle_wbmp
-*/
-static struct gfxinfo *php_handle_wbmp(php_stream * stream TSRMLS_DC)
-{
- struct gfxinfo *result = (struct gfxinfo *) ecalloc(1, sizeof(struct gfxinfo));
-
- if (!php_get_wbmp(stream, &result, 0 TSRMLS_CC)) {
- efree(result);
- return NULL;
- }
-
- return result;
-}
-/* }}} */
-
-/* {{{ php_get_xbm
- */
-static int php_get_xbm(php_stream *stream, struct gfxinfo **result TSRMLS_DC)
-{
- char *fline;
- char *iname;
- char *type;
- int value;
- unsigned int width = 0, height = 0;
-
- if (result) {
- *result = NULL;
- }
- if (php_stream_rewind(stream)) {
- return 0;
- }
- while ((fline=php_stream_gets(stream, NULL, 0)) != NULL) {
- iname = estrdup(fline); /* simple way to get necessary buffer of required size */
- if (sscanf(fline, "#define %s %d", iname, &value) == 2) {
- if (!(type = strrchr(iname, '_'))) {
- type = iname;
- } else {
- type++;
- }
-
- if (!strcmp("width", type)) {
- width = (unsigned int) value;
- if (height) {
- efree(iname);
- break;
- }
- }
- if (!strcmp("height", type)) {
- height = (unsigned int) value;
- if (width) {
- efree(iname);
- break;
- }
- }
- }
- efree(fline);
- efree(iname);
- }
- if (fline) {
- efree(fline);
- }
-
- if (width && height) {
- if (result) {
- *result = (struct gfxinfo *) ecalloc(1, sizeof(struct gfxinfo));
- (*result)->width = width;
- (*result)->height = height;
- }
- return IMAGE_FILETYPE_XBM;
- }
-
- return 0;
-}
-/* }}} */
-
-/* {{{ php_handle_xbm
- */
-static struct gfxinfo *php_handle_xbm(php_stream * stream TSRMLS_DC)
-{
- struct gfxinfo *result;
- php_get_xbm(stream, &result TSRMLS_CC);
- return result;
-}
-/* }}} */
-
-/* {{{ php_image_type_to_mime_type
- * Convert internal image_type to mime type */
-PHPAPI char * php_image_type_to_mime_type(int image_type)
-{
- switch( image_type) {
- case IMAGE_FILETYPE_GIF:
- return "image/gif";
- case IMAGE_FILETYPE_JPEG:
- return "image/jpeg";
- case IMAGE_FILETYPE_PNG:
- return "image/png";
- case IMAGE_FILETYPE_SWF:
- case IMAGE_FILETYPE_SWC:
- return "application/x-shockwave-flash";
- case IMAGE_FILETYPE_PSD:
- return "image/psd";
- case IMAGE_FILETYPE_BMP:
- return "image/bmp";
- case IMAGE_FILETYPE_TIFF_II:
- case IMAGE_FILETYPE_TIFF_MM:
- return "image/tiff";
- case IMAGE_FILETYPE_IFF:
- return "image/iff";
- case IMAGE_FILETYPE_WBMP:
- return "image/vnd.wap.wbmp";
- case IMAGE_FILETYPE_JPC:
- return "application/octet-stream";
- case IMAGE_FILETYPE_JP2:
- return "image/jp2";
- case IMAGE_FILETYPE_XBM:
- return "image/xbm";
- default:
- case IMAGE_FILETYPE_UNKNOWN:
- return "application/octet-stream"; /* suppose binary format */
- }
-}
-/* }}} */
-
-/* {{{ proto string image_type_to_mime_type(int imagetype)
- Get Mime-Type for image-type returned by getimagesize, exif_read_data, exif_thumbnail, exif_imagetype */
-PHP_FUNCTION(image_type_to_mime_type)
-{
- zval **p_image_type;
- int arg_c = ZEND_NUM_ARGS();
-
- if ((arg_c!=1) || zend_get_parameters_ex(arg_c, &p_image_type) == FAILURE) {
- RETVAL_FALSE;
- WRONG_PARAM_COUNT;
- }
- convert_to_long_ex(p_image_type);
- ZVAL_STRING(return_value, (char*)php_image_type_to_mime_type(Z_LVAL_PP(p_image_type)), 1);
-}
-/* }}} */
-
-/* {{{ proto string image_type_to_extension(int imagetype [, bool include_dot])
- Get file extension for image-type returned by getimagesize, exif_read_data, exif_thumbnail, exif_imagetype */
-PHP_FUNCTION(image_type_to_extension)
-{
- long image_type;
- zend_bool inc_dot=1;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l|b", &image_type, &inc_dot) == FAILURE) {
- RETURN_FALSE;
- }
-
- switch (image_type) {
- case IMAGE_FILETYPE_GIF:
- RETURN_STRING(".gif" + !inc_dot, 1);
- case IMAGE_FILETYPE_JPEG:
- RETURN_STRING(".jpeg" + !inc_dot, 1);
- case IMAGE_FILETYPE_PNG:
- RETURN_STRING(".png" + !inc_dot, 1);
- case IMAGE_FILETYPE_SWF:
- case IMAGE_FILETYPE_SWC:
- RETURN_STRING(".swf" + !inc_dot, 1);
- case IMAGE_FILETYPE_PSD:
- RETURN_STRING(".psd" + !inc_dot, 1);
- case IMAGE_FILETYPE_BMP:
- case IMAGE_FILETYPE_WBMP:
- RETURN_STRING(".bmp" + !inc_dot, 1);
- case IMAGE_FILETYPE_TIFF_II:
- case IMAGE_FILETYPE_TIFF_MM:
- RETURN_STRING(".tiff" + !inc_dot, 1);
- case IMAGE_FILETYPE_IFF:
- RETURN_STRING(".iff" + !inc_dot, 1);
- case IMAGE_FILETYPE_JPC:
- RETURN_STRING(".jpc" + !inc_dot, 1);
- case IMAGE_FILETYPE_JP2:
- RETURN_STRING(".jp2" + !inc_dot, 1);
- case IMAGE_FILETYPE_XBM:
- RETURN_STRING(".xbm" + !inc_dot, 1);
- }
-
- RETURN_FALSE;
-}
-/* }}} */
-
-/* {{{ php_imagetype
- detect filetype from first bytes */
-PHPAPI int php_getimagetype(php_stream * stream, char *filetype TSRMLS_DC)
-{
- char tmp[12];
-
- if ( !filetype) filetype = tmp;
- if((php_stream_read(stream, filetype, 3)) != 3) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Read error!");
- return IMAGE_FILETYPE_UNKNOWN;
- }
-
-/* BYTES READ: 3 */
- if (!memcmp(filetype, php_sig_gif, 3)) {
- return IMAGE_FILETYPE_GIF;
- } else if (!memcmp(filetype, php_sig_jpg, 3)) {
- return IMAGE_FILETYPE_JPEG;
- } else if (!memcmp(filetype, php_sig_png, 3)) {
- if (php_stream_read(stream, filetype+3, 5) != 5) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Read error!");
- return IMAGE_FILETYPE_UNKNOWN;
- }
- if (!memcmp(filetype, php_sig_png, 8)) {
- return IMAGE_FILETYPE_PNG;
- } else {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "PNG file corrupted by ASCII conversion");
- return IMAGE_FILETYPE_UNKNOWN;
- }
- } else if (!memcmp(filetype, php_sig_swf, 3)) {
- return IMAGE_FILETYPE_SWF;
- } else if (!memcmp(filetype, php_sig_swc, 3)) {
- return IMAGE_FILETYPE_SWC;
- } else if (!memcmp(filetype, php_sig_psd, 3)) {
- return IMAGE_FILETYPE_PSD;
- } else if (!memcmp(filetype, php_sig_bmp, 2)) {
- return IMAGE_FILETYPE_BMP;
- } else if (!memcmp(filetype, php_sig_jpc, 3)) {
- return IMAGE_FILETYPE_JPC;
- }
-
- if (php_stream_read(stream, filetype+3, 1) != 1) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Read error!");
- return IMAGE_FILETYPE_UNKNOWN;
- }
-/* BYTES READ: 4 */
- if (!memcmp(filetype, php_sig_tif_ii, 4)) {
- return IMAGE_FILETYPE_TIFF_II;
- } else
- if (!memcmp(filetype, php_sig_tif_mm, 4)) {
- return IMAGE_FILETYPE_TIFF_MM;
- }
- if (!memcmp(filetype, php_sig_iff, 4)) {
- return IMAGE_FILETYPE_IFF;
- }
-
- if (php_stream_read(stream, filetype+4, 8) != 8) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Read error!");
- return IMAGE_FILETYPE_UNKNOWN;
- }
-/* BYTES READ: 12 */
- if (!memcmp(filetype, php_sig_jp2, 12)) {
- return IMAGE_FILETYPE_JP2;
- }
-
-/* AFTER ALL ABOVE FAILED */
- if (php_get_wbmp(stream, NULL, 1 TSRMLS_CC)) {
- return IMAGE_FILETYPE_WBMP;
- }
- if (php_get_xbm(stream, NULL TSRMLS_CC)) {
- return IMAGE_FILETYPE_XBM;
- }
- return IMAGE_FILETYPE_UNKNOWN;
-}
-/* }}} */
-
-/* {{{ proto array getimagesize(string imagefile [, array info])
- Get the size of an image as 4-element array */
-PHP_FUNCTION(getimagesize)
-{
- zval **arg1, **info = NULL;
- int itype = 0;
- char *temp;
- struct gfxinfo *result = NULL;
- php_stream * stream = NULL;
-
- switch(ZEND_NUM_ARGS()) {
-
- case 1:
- if (zend_get_parameters_ex(1, &arg1) == FAILURE) {
- RETVAL_FALSE;
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex(arg1);
- break;
-
- case 2:
- if (zend_get_parameters_ex(2, &arg1, &info) == FAILURE) {
- RETVAL_FALSE;
- WRONG_PARAM_COUNT;
- }
- zval_dtor(*info);
-
- array_init(*info);
-
- convert_to_string_ex(arg1);
- break;
-
- default:
- RETVAL_FALSE;
- WRONG_PARAM_COUNT;
- }
-
- stream = php_stream_open_wrapper(Z_STRVAL_PP(arg1), "rb", STREAM_MUST_SEEK|REPORT_ERRORS|IGNORE_PATH|ENFORCE_SAFE_MODE, NULL);
-
- if (!stream) {
- RETURN_FALSE;
- }
-
- itype = php_getimagetype(stream, NULL TSRMLS_CC);
- switch( itype) {
- case IMAGE_FILETYPE_GIF:
- result = php_handle_gif (stream TSRMLS_CC);
- break;
- case IMAGE_FILETYPE_JPEG:
- if (info) {
- result = php_handle_jpeg(stream, *info TSRMLS_CC);
- } else {
- result = php_handle_jpeg(stream, NULL TSRMLS_CC);
- }
- break;
- case IMAGE_FILETYPE_PNG:
- result = php_handle_png(stream TSRMLS_CC);
- break;
- case IMAGE_FILETYPE_SWF:
- result = php_handle_swf(stream TSRMLS_CC);
- break;
- case IMAGE_FILETYPE_SWC:
-#if HAVE_ZLIB && !defined(COMPILE_DL_ZLIB)
- result = php_handle_swc(stream TSRMLS_CC);
-#else
- php_error_docref(NULL TSRMLS_CC, E_NOTICE, "The image is a compressed SWF file, but you do not have a static version of the zlib extension enabled.");
-
-#endif
- break;
- case IMAGE_FILETYPE_PSD:
- result = php_handle_psd(stream TSRMLS_CC);
- break;
- case IMAGE_FILETYPE_BMP:
- result = php_handle_bmp(stream TSRMLS_CC);
- break;
- case IMAGE_FILETYPE_TIFF_II:
- result = php_handle_tiff(stream, NULL, 0 TSRMLS_CC);
- break;
- case IMAGE_FILETYPE_TIFF_MM:
- result = php_handle_tiff(stream, NULL, 1 TSRMLS_CC);
- break;
- case IMAGE_FILETYPE_JPC:
- result = php_handle_jpc(stream TSRMLS_CC);
- break;
- case IMAGE_FILETYPE_JP2:
- result = php_handle_jp2(stream TSRMLS_CC);
- break;
- case IMAGE_FILETYPE_IFF:
- result = php_handle_iff(stream TSRMLS_CC);
- break;
- case IMAGE_FILETYPE_WBMP:
- result = php_handle_wbmp(stream TSRMLS_CC);
- break;
- case IMAGE_FILETYPE_XBM:
- result = php_handle_xbm(stream TSRMLS_CC);
- break;
- default:
- case IMAGE_FILETYPE_UNKNOWN:
- break;
- }
-
- php_stream_close(stream);
-
- if (result) {
- array_init(return_value);
- add_index_long(return_value, 0, result->width);
- add_index_long(return_value, 1, result->height);
- add_index_long(return_value, 2, itype);
- spprintf(&temp, 0, "width=\"%d\" height=\"%d\"", result->width, result->height);
- add_index_string(return_value, 3, temp, 0);
-
- if (result->bits != 0) {
- add_assoc_long(return_value, "bits", result->bits);
- }
- if (result->channels != 0) {
- add_assoc_long(return_value, "channels", result->channels);
- }
- add_assoc_string(return_value, "mime", (char*)php_image_type_to_mime_type(itype), 1);
- efree(result);
- } else {
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-/*
- * 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/standard/incomplete_class.c b/ext/standard/incomplete_class.c
deleted file mode 100644
index 7f45cd88f3..0000000000
--- a/ext/standard/incomplete_class.c
+++ /dev/null
@@ -1,169 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Sascha Schumann <sascha@schumann.cx> |
- +----------------------------------------------------------------------+
- */
-
-
-/* $Id$ */
-
-#include "php.h"
-#include "basic_functions.h"
-#include "php_incomplete_class.h"
-
-#define INCOMPLETE_CLASS_MSG \
- "The script tried to execute a method or " \
- "access a property of an incomplete object. " \
- "Please ensure that the class definition \"%s\" 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 "
-
-
-static zend_object_handlers php_incomplete_object_handlers;
-
-/* {{{ incomplete_class_message
- */
-static void incomplete_class_message(zval *object, int error_type TSRMLS_DC)
-{
- char *class_name;
-
- class_name = php_lookup_class_name(object, NULL);
-
- if (!class_name) {
- class_name = "unknown";
- }
-
- php_error_docref(NULL TSRMLS_CC, error_type, INCOMPLETE_CLASS_MSG, class_name);
-}
-/* }}} */
-
-static zval *incomplete_class_get_property(zval *object, zval *member, int type TSRMLS_DC)
-{
- incomplete_class_message(object, E_NOTICE TSRMLS_CC);
- if(type == BP_VAR_W || type == BP_VAR_RW) {
- return EG(error_zval_ptr);
- } else {
- return EG(uninitialized_zval_ptr);
- }
-}
-
-static void incomplete_class_write_property(zval *object, zval *member, zval *value TSRMLS_DC)
-{
- incomplete_class_message(object, E_NOTICE TSRMLS_CC);
-}
-
-static zval **incomplete_class_get_property_ptr_ptr(zval *object, zval *member TSRMLS_DC)
-{
- incomplete_class_message(object, E_NOTICE TSRMLS_CC);
- return &EG(error_zval_ptr);
-}
-
-static void incomplete_class_unset_property(zval *object, zval *member TSRMLS_DC)
-{
- incomplete_class_message(object, E_NOTICE TSRMLS_CC);
-}
-
-static int incomplete_class_has_property(zval *object, zval *member, int check_empty TSRMLS_DC)
-{
- incomplete_class_message(object, E_NOTICE TSRMLS_CC);
- return 0;
-}
-
-static union _zend_function *incomplete_class_get_method(zval *object, char *method, int method_len TSRMLS_DC) {
- incomplete_class_message(object, E_ERROR TSRMLS_CC);
- return NULL;
-}
-
-/* {{{ php_create_incomplete_class
- */
-static zend_object_value php_create_incomplete_object(zend_class_entry *class_type TSRMLS_DC) {
- zend_object *object;
- zend_object_value value;
-
- value = zend_objects_new(&object, class_type TSRMLS_CC);
- value.handlers = &php_incomplete_object_handlers;
-
- ALLOC_HASHTABLE(object->properties);
- zend_hash_init(object->properties, 0, NULL, ZVAL_PTR_DTOR, 0);
- return value;
-}
-
-zend_class_entry *php_create_incomplete_class(TSRMLS_D)
-{
- zend_class_entry incomplete_class;
-
- INIT_CLASS_ENTRY(incomplete_class, INCOMPLETE_CLASS, NULL);
- incomplete_class.create_object = php_create_incomplete_object;
-
- memcpy(&php_incomplete_object_handlers, &std_object_handlers, sizeof(zend_object_handlers));
- php_incomplete_object_handlers.read_property = incomplete_class_get_property;
- php_incomplete_object_handlers.has_property = incomplete_class_has_property;
- php_incomplete_object_handlers.unset_property = incomplete_class_unset_property;
- php_incomplete_object_handlers.write_property = incomplete_class_write_property;
- php_incomplete_object_handlers.get_property_ptr_ptr = incomplete_class_get_property_ptr_ptr;
- php_incomplete_object_handlers.get_method = incomplete_class_get_method;
-
- return zend_register_internal_class(&incomplete_class TSRMLS_CC);
-}
-/* }}} */
-
-/* {{{ php_lookup_class_name
- */
-char *php_lookup_class_name(zval *object, size_t *nlen)
-{
- zval **val;
- char *retval = NULL;
- HashTable *object_properties;
- TSRMLS_FETCH();
-
- object_properties = Z_OBJPROP_P(object);
-
- if (zend_hash_find(object_properties, MAGIC_MEMBER, sizeof(MAGIC_MEMBER), (void **) &val) == SUCCESS) {
- retval = estrndup(Z_STRVAL_PP(val), Z_STRLEN_PP(val));
-
- if (nlen)
- *nlen = Z_STRLEN_PP(val);
- }
-
- return (retval);
-}
-/* }}} */
-
-/* {{{ php_store_class_name
- */
-void php_store_class_name(zval *object, const char *name, size_t len)
-{
- zval *val;
- TSRMLS_FETCH();
-
- MAKE_STD_ZVAL(val);
-
- Z_TYPE_P(val) = IS_STRING;
- Z_STRVAL_P(val) = estrndup(name, len);
- Z_STRLEN_P(val) = len;
-
- zend_hash_update(Z_OBJPROP_P(object), MAGIC_MEMBER, sizeof(MAGIC_MEMBER), &val, sizeof(val), NULL);
-}
-/* }}} */
-
-/*
- * 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/standard/info.c b/ext/standard/info.c
deleted file mode 100644
index afed555193..0000000000
--- a/ext/standard/info.c
+++ /dev/null
@@ -1,1098 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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. |
- +----------------------------------------------------------------------+
- | Authors: Rasmus Lerdorf <rasmus@php.net> |
- | Zeev Suraski <zeev@zend.com> |
- | Colin Viebrock <colin@easydns.com> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#include "php.h"
-#include "php_ini.h"
-#include "php_globals.h"
-#include "ext/standard/head.h"
-#include "ext/standard/html.h"
-#include "info.h"
-#include "credits.h"
-#include "css.h"
-#include "SAPI.h"
-#include <time.h>
-#include "php_main.h"
-#include "zend_globals.h" /* needs ELS */
-#include "zend_extensions.h"
-#include "zend_highlight.h"
-#ifdef HAVE_SYS_UTSNAME_H
-#include <sys/utsname.h>
-#endif
-
-#if HAVE_MBSTRING
-#include "ext/mbstring/mbstring.h"
-ZEND_EXTERN_MODULE_GLOBALS(mbstring)
-#endif
-
-#if HAVE_ICONV
-#include "ext/iconv/php_iconv.h"
-ZEND_EXTERN_MODULE_GLOBALS(iconv)
-#endif
-
-#define SECTION(name) if (!sapi_module.phpinfo_as_text) { \
- PUTS("<h2>" name "</h2>\n"); \
- } else { \
- php_info_print_table_start(); \
- php_info_print_table_header(1, name); \
- php_info_print_table_end(); \
- } \
-
-PHPAPI extern char *php_ini_opened_path;
-PHPAPI extern char *php_ini_scanned_files;
-
-/* {{{ _display_module_info
- */
-static int _display_module_info(zend_module_entry *module, void *arg TSRMLS_DC)
-{
- int show_info_func = *((int *) arg);
-
- if (show_info_func && module->info_func) {
- if (!sapi_module.phpinfo_as_text) {
- php_printf("<h2><a name=\"module_%s\">%s</a></h2>\n", module->name, module->name);
- } else {
- php_info_print_table_start();
- php_info_print_table_header(1, module->name);
- php_info_print_table_end();
- }
- module->info_func(module TSRMLS_CC);
- } else if (!show_info_func && !module->info_func) {
- if (!sapi_module.phpinfo_as_text) {
- php_printf("<tr>");
- php_printf("<td>");
- php_printf("%s", module->name);
- php_printf("</td></tr>\n");
- } else {
- php_printf("%s", module->name);
- php_printf("\n");
- }
- }
- return 0;
-}
-/* }}} */
-
-/* {{{ php_print_gpcse_array
- */
-static void php_print_gpcse_array(char *name, uint name_length TSRMLS_DC)
-{
- zval **data, **tmp, tmp2;
- char *string_key;
- uint string_len;
- ulong num_key;
- char *elem_esc = NULL;
-
- zend_is_auto_global(name, name_length TSRMLS_CC);
-
- if (zend_hash_find(&EG(symbol_table), name, name_length+1, (void **) &data)!=FAILURE
- && (Z_TYPE_PP(data)==IS_ARRAY)) {
- zend_hash_internal_pointer_reset(Z_ARRVAL_PP(data));
- while (zend_hash_get_current_data(Z_ARRVAL_PP(data), (void **) &tmp) == SUCCESS) {
- if (!sapi_module.phpinfo_as_text) {
- PUTS("<tr>");
- PUTS("<td class=\"e\">");
-
- }
-
- PUTS(name);
- PUTS("[\"");
-
- switch (zend_hash_get_current_key_ex(Z_ARRVAL_PP(data), &string_key, &string_len, &num_key, 0, NULL)) {
- case HASH_KEY_IS_STRING:
- if (!sapi_module.phpinfo_as_text) {
- elem_esc = php_info_html_esc(string_key TSRMLS_CC);
- PUTS(elem_esc);
- efree(elem_esc);
- } else {
- PUTS(string_key);
- }
- break;
- case HASH_KEY_IS_LONG:
- php_printf("%ld", num_key);
- break;
- }
- PUTS("\"]");
- if (!sapi_module.phpinfo_as_text) {
- PUTS("</td><td class=\"v\">");
- } else {
- PUTS(" => ");
- }
- if (Z_TYPE_PP(tmp) == IS_ARRAY) {
- if (!sapi_module.phpinfo_as_text) {
- PUTS("<pre>");
- }
- zend_print_zval_r(*tmp, 0 TSRMLS_CC);
- if (!sapi_module.phpinfo_as_text) {
- PUTS("</pre>");
- }
- } else if (Z_TYPE_PP(tmp) != IS_STRING) {
- tmp2 = **tmp;
- zval_copy_ctor(&tmp2);
- convert_to_string(&tmp2);
- if (!sapi_module.phpinfo_as_text) {
- if (Z_STRLEN(tmp2) == 0) {
- PUTS("<i>no value</i>");
- } else {
- elem_esc = php_info_html_esc(Z_STRVAL(tmp2) TSRMLS_CC);
- PUTS(elem_esc);
- efree(elem_esc);
- }
- } else {
- PUTS(Z_STRVAL(tmp2));
- }
- zval_dtor(&tmp2);
- } else {
- if (!sapi_module.phpinfo_as_text) {
- if (Z_STRLEN_PP(tmp) == 0) {
- PUTS("<i>no value</i>");
- } else {
- elem_esc = php_info_html_esc(Z_STRVAL_PP(tmp) TSRMLS_CC);
- PUTS(elem_esc);
- efree(elem_esc);
- }
- } else {
- PUTS(Z_STRVAL_PP(tmp));
- }
- }
- if (!sapi_module.phpinfo_as_text) {
- PUTS("</td></tr>\n");
- } else {
- PUTS("\n");
- }
- zend_hash_move_forward(Z_ARRVAL_PP(data));
- }
- }
-}
-/* }}} */
-
-/* {{{ php_info_print_style
- */
-void php_info_print_style(TSRMLS_D)
-{
- php_printf("<style type=\"text/css\"><!--\n");
- php_info_print_css(TSRMLS_C);
- php_printf("//--></style>\n");
-}
-/* }}} */
-
-
-/* {{{ php_info_html_esc
- */
-PHPAPI char *php_info_html_esc(char *string TSRMLS_DC)
-{
- int new_len;
- return php_escape_html_entities(string, strlen(string), &new_len, 0, ENT_NOQUOTES, NULL TSRMLS_CC);
-}
-/* }}} */
-
-
-/* {{{ php_get_uname
- */
-PHPAPI char *php_get_uname(char mode)
-{
- char *php_uname;
- char tmp_uname[256];
-#ifdef PHP_WIN32
- DWORD dwBuild=0;
- DWORD dwVersion = GetVersion();
- DWORD dwWindowsMajorVersion = (DWORD)(LOBYTE(LOWORD(dwVersion)));
- DWORD dwWindowsMinorVersion = (DWORD)(HIBYTE(LOWORD(dwVersion)));
- DWORD dwSize = MAX_COMPUTERNAME_LENGTH + 1;
- char ComputerName[MAX_COMPUTERNAME_LENGTH + 1];
- SYSTEM_INFO SysInfo;
-
- GetComputerName(ComputerName, &dwSize);
- GetSystemInfo(&SysInfo);
-
- if (mode == 's') {
- if (dwVersion < 0x80000000) {
- php_uname = "Windows NT";
- } else {
- php_uname = "Windows 9x";
- }
- } else if (mode == 'r') {
- snprintf(tmp_uname, sizeof(tmp_uname), "%d.%d", dwWindowsMajorVersion, dwWindowsMinorVersion);
- php_uname = tmp_uname;
- } else if (mode == 'n') {
- php_uname = ComputerName;
- } else if (mode == 'v') {
- dwBuild = (DWORD)(HIWORD(dwVersion));
- snprintf(tmp_uname, sizeof(tmp_uname), "build %d", dwBuild);
- php_uname = tmp_uname;
- } else if (mode == 'm') {
- switch (SysInfo.wProcessorArchitecture) {
- case PROCESSOR_ARCHITECTURE_INTEL :
- snprintf(tmp_uname, sizeof(tmp_uname), "i%d", SysInfo.dwProcessorType);
- php_uname = tmp_uname;
- break;
- case PROCESSOR_ARCHITECTURE_MIPS :
- php_uname = "MIPS R4000";
- php_uname = tmp_uname;
- break;
- case PROCESSOR_ARCHITECTURE_ALPHA :
- snprintf(tmp_uname, sizeof(tmp_uname), "Alpha %d", SysInfo.wProcessorLevel);
- php_uname = tmp_uname;
- break;
- case PROCESSOR_ARCHITECTURE_PPC :
- snprintf(tmp_uname, sizeof(tmp_uname), "PPC 6%02d", SysInfo.wProcessorLevel);
- php_uname = tmp_uname;
- break;
- case PROCESSOR_ARCHITECTURE_IA64 :
- php_uname = "IA64";
- break;
-#if defined(PROCESSOR_ARCHITECTURE_IA32_ON_WIN64)
- case PROCESSOR_ARCHITECTURE_IA32_ON_WIN64 :
- php_uname = "IA32";
- break;
-#endif
-#if defined(PROCESSOR_ARCHITECTURE_AMD64)
- case PROCESSOR_ARCHITECTURE_AMD64 :
- php_uname = "AMD64";
- break;
-#endif
- case PROCESSOR_ARCHITECTURE_UNKNOWN :
- default :
- php_uname = "Unknown";
- break;
- }
- } else { /* assume mode == 'a' */
- /* Get build numbers for Windows NT or Win95 */
- if (dwVersion < 0x80000000){
- dwBuild = (DWORD)(HIWORD(dwVersion));
- snprintf(tmp_uname, sizeof(tmp_uname), "%s %s %d.%d build %d",
- "Windows NT", ComputerName,
- dwWindowsMajorVersion, dwWindowsMinorVersion, dwBuild);
- } else {
- snprintf(tmp_uname, sizeof(tmp_uname), "%s %s %d.%d",
- "Windows 9x", ComputerName,
- dwWindowsMajorVersion, dwWindowsMinorVersion);
- }
- php_uname = tmp_uname;
- }
-#else
-#ifdef HAVE_SYS_UTSNAME_H
- struct utsname buf;
- if (uname((struct utsname *)&buf) == -1) {
- php_uname = PHP_UNAME;
- } else {
- if (mode == 's') {
- php_uname = buf.sysname;
- } else if (mode == 'r') {
- php_uname = buf.release;
- } else if (mode == 'n') {
- php_uname = buf.nodename;
- } else if (mode == 'v') {
- php_uname = buf.version;
- } else if (mode == 'm') {
- php_uname = buf.machine;
- } else { /* assume mode == 'a' */
- snprintf(tmp_uname, sizeof(tmp_uname), "%s %s %s %s %s",
- buf.sysname, buf.nodename, buf.release, buf.version,
- buf.machine);
- php_uname = tmp_uname;
- }
- }
-#else
- php_uname = PHP_UNAME;
-#endif
-#endif
- return estrdup(php_uname);
-}
-/* }}} */
-
-
-/* {{{ php_print_info_htmlhead
- */
-PHPAPI void php_print_info_htmlhead(TSRMLS_D)
-{
-
-/*** none of this is needed now ***
-
- const char *charset = NULL;
-
- if (SG(default_charset)) {
- charset = SG(default_charset);
- }
-
-#if HAVE_MBSTRING
- if (php_ob_handler_used("mb_output_handler" TSRMLS_CC)) {
- if (MBSTRG(current_http_output_encoding) == mbfl_no_encoding_pass) {
- charset = "US-ASCII";
- } else {
- charset = mbfl_no2preferred_mime_name(MBSTRG(current_http_output_encoding));
- }
- }
-#endif
-
-#if HAVE_ICONV
- if (php_ob_handler_used("ob_iconv_handler" TSRMLS_CC)) {
- charset = ICONVG(output_encoding);
- }
-#endif
-
- if (!charset || !charset[0]) {
- charset = "US-ASCII";
- }
-
-*** none of that is needed now ***/
-
-
- PUTS("<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"DTD/xhtml1-transitional.dtd\">\n");
- PUTS("<html>");
- PUTS("<head>\n");
- php_info_print_style(TSRMLS_C);
- PUTS("<title>phpinfo()</title>");
-/*
- php_printf("<meta http-equiv=\"Content-Type\" content=\"text/html; charset=%s\" />\n", charset);
-*/
- PUTS("</head>\n");
- PUTS("<body><div class=\"center\">\n");
-}
-/* }}} */
-
-/* {{{ module_name_cmp */
-static int module_name_cmp(const void *a, const void *b TSRMLS_DC)
-{
- Bucket *f = *((Bucket **) a);
- Bucket *s = *((Bucket **) b);
-
- return strcasecmp(((zend_module_entry *)f->pData)->name,
- ((zend_module_entry *)s->pData)->name);
-}
-/* }}} */
-
-/* {{{ php_print_info
- */
-PHPAPI void php_print_info(int flag TSRMLS_DC)
-{
- char **env, *tmp1, *tmp2;
- char *php_uname;
- int expose_php = INI_INT("expose_php");
-
- if (!sapi_module.phpinfo_as_text) {
- php_print_info_htmlhead(TSRMLS_C);
- } else {
- PUTS("phpinfo()\n");
- }
-
- if (flag & PHP_INFO_GENERAL) {
- char *zend_version = get_zend_version();
- char temp_api[10];
- char *logo_guid;
-
- php_uname = php_get_uname('a');
-
- if (!sapi_module.phpinfo_as_text) {
- php_info_print_box_start(1);
- }
-
- if (expose_php && !sapi_module.phpinfo_as_text) {
- PUTS("<a href=\"http://www.php.net/\"><img border=\"0\" src=\"");
- if (SG(request_info).request_uri) {
- PUTS(SG(request_info).request_uri);
- }
- PUTS("?=");
- logo_guid = php_logo_guid();
- PUTS(logo_guid);
- efree(logo_guid);
- PUTS("\" alt=\"PHP Logo\" /></a>");
- }
-
- if (!sapi_module.phpinfo_as_text) {
- php_printf("<h1 class=\"p\">PHP Version %s</h1>\n", PHP_VERSION);
- } else {
- php_info_print_table_row(2, "PHP Version", PHP_VERSION);
- }
- php_info_print_box_end();
- php_info_print_table_start();
- php_info_print_table_row(2, "System", php_uname );
- php_info_print_table_row(2, "Build Date", __DATE__ " " __TIME__ );
-#ifdef CONFIGURE_COMMAND
- php_info_print_table_row(2, "Configure Command", CONFIGURE_COMMAND );
-#endif
- if (sapi_module.pretty_name) {
- php_info_print_table_row(2, "Server API", sapi_module.pretty_name );
- }
-
-#ifdef VIRTUAL_DIR
- php_info_print_table_row(2, "Virtual Directory Support", "enabled" );
-#else
- php_info_print_table_row(2, "Virtual Directory Support", "disabled" );
-#endif
-
- php_info_print_table_row(2, "Configuration File (php.ini) Path", php_ini_opened_path?php_ini_opened_path:PHP_CONFIG_FILE_PATH);
-
- 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);
-
- snprintf(temp_api, sizeof(temp_api), "%d", ZEND_MODULE_API_NO);
- php_info_print_table_row(2, "PHP Extension", temp_api);
-
- snprintf(temp_api, sizeof(temp_api), "%d", ZEND_EXTENSION_API_NO);
- php_info_print_table_row(2, "Zend Extension", temp_api);
-
-#if ZEND_DEBUG
- php_info_print_table_row(2, "Debug Build", "yes" );
-#else
- php_info_print_table_row(2, "Debug Build", "no" );
-#endif
-
-#ifdef ZTS
- php_info_print_table_row(2, "Thread Safety", "enabled" );
-#else
- php_info_print_table_row(2, "Thread Safety", "disabled" );
-#endif
-
-#if HAVE_IPV6
- php_info_print_table_row(2, "IPv6 Support", "enabled" );
-#else
- php_info_print_table_row(2, "IPv6 Support", "disabled" );
-#endif
- {
- HashTable *url_stream_wrappers_hash;
- char *stream_protocol, *stream_protocols_buf = NULL;
- int stream_protocol_len, stream_protocols_buf_len = 0;
- ulong num_key;
-
- if ((url_stream_wrappers_hash = php_stream_get_url_stream_wrappers_hash())) {
- for (zend_hash_internal_pointer_reset(url_stream_wrappers_hash);
- zend_hash_get_current_key_ex(url_stream_wrappers_hash, &stream_protocol, &stream_protocol_len, &num_key, 0, NULL) == HASH_KEY_IS_STRING;
- zend_hash_move_forward(url_stream_wrappers_hash)) {
- stream_protocols_buf = erealloc(stream_protocols_buf, stream_protocols_buf_len + stream_protocol_len + 2 + 1);
- memcpy(stream_protocols_buf + stream_protocols_buf_len, stream_protocol, stream_protocol_len);
- stream_protocols_buf[stream_protocols_buf_len + stream_protocol_len] = ',';
- stream_protocols_buf[stream_protocols_buf_len + stream_protocol_len + 1] = ' ';
- stream_protocols_buf_len += stream_protocol_len + 2;
- }
- if (stream_protocols_buf) {
- stream_protocols_buf[stream_protocols_buf_len - 2] = ' ';
- stream_protocols_buf[stream_protocols_buf_len] = 0;
- php_info_print_table_row(2, "Registered PHP Streams", stream_protocols_buf);
- efree(stream_protocols_buf);
- } else {
- /* Any chances we will ever hit this? */
- php_info_print_table_row(2, "Registered PHP Streams", "no streams registered");
- }
- } else {
- /* Any chances we will ever hit this? */
- php_info_print_table_row(2, "PHP Streams", "disabled"); /* ?? */
- }
- }
-
- {
- HashTable *stream_xport_hash;
- char *xport_name, *xport_buf = NULL;
- int xport_name_len, xport_buf_len = 0, xport_buf_size = 0;
- ulong num_key;
-
- if ((stream_xport_hash = php_stream_xport_get_hash())) {
- for(zend_hash_internal_pointer_reset(stream_xport_hash);
- zend_hash_get_current_key_ex(stream_xport_hash, &xport_name, &xport_name_len, &num_key, 0, NULL) == HASH_KEY_IS_STRING;
- zend_hash_move_forward(stream_xport_hash)) {
- if (xport_buf_len + xport_name_len + 3 > xport_buf_size) {
- while (xport_buf_len + xport_name_len + 3 > xport_buf_size) {
- xport_buf_size += 256;
- }
- if (xport_buf) {
- xport_buf = erealloc(xport_buf, xport_buf_size);
- } else {
- xport_buf = emalloc(xport_buf_size);
- }
- }
- if (xport_buf_len > 0) {
- xport_buf[xport_buf_len++] = ',';
- xport_buf[xport_buf_len++] = ' ';
- }
- memcpy(xport_buf + xport_buf_len, xport_name, xport_name_len);
- xport_buf_len += xport_name_len;
- xport_buf[xport_buf_len] = '\0';
- }
- if (xport_buf) {
- php_info_print_table_row(2, "Registered Stream Socket Transports", xport_buf);
- efree(xport_buf);
- } else {
- /* Any chances we will ever hit this? */
- php_info_print_table_row(2, "Registered Stream Socket Transports", "no transports registered");
- }
- } else {
- /* Any chances we will ever hit this? */
- php_info_print_table_row(2, "Stream Socket Transports", "disabled"); /* ?? */
- }
- }
-
- php_info_print_table_end();
-
- /* Zend Engine */
- php_info_print_box_start(0);
- if (expose_php && !sapi_module.phpinfo_as_text) {
- PUTS("<a href=\"http://www.zend.com/\"><img border=\"0\" src=\"");
- if (SG(request_info).request_uri) {
- PUTS(SG(request_info).request_uri);
- }
- PUTS("?="ZEND_LOGO_GUID"\" alt=\"Zend logo\" /></a>\n");
- }
- PUTS("This program makes use of the Zend Scripting Language Engine:");
- PUTS(!sapi_module.phpinfo_as_text?"<br />":"\n");
- if (sapi_module.phpinfo_as_text) {
- PUTS(zend_version);
- } else {
- zend_html_puts(zend_version, strlen(zend_version) TSRMLS_CC);
- }
- php_info_print_box_end();
- efree(php_uname);
- }
-
- if ((flag & PHP_INFO_CREDITS) && expose_php && !sapi_module.phpinfo_as_text) {
- php_info_print_hr();
- PUTS("<h1><a href=\"");
- if (SG(request_info).request_uri) {
- PUTS(SG(request_info).request_uri);
- }
- PUTS("?=PHPB8B5F2A0-3C92-11d3-A3A9-4C7B08C10000\">");
- PUTS("PHP Credits");
- PUTS("</a></h1>\n");
- }
-
- zend_ini_sort_entries(TSRMLS_C);
-
- if (flag & PHP_INFO_CONFIGURATION) {
- php_info_print_hr();
- if (!sapi_module.phpinfo_as_text) {
- PUTS("<h1>Configuration</h1>\n");
- } else {
- SECTION("Configuration");
- }
- SECTION("PHP Core");
- display_ini_entries(NULL);
- }
-
- if (flag & PHP_INFO_MODULES) {
- int show_info_func;
- HashTable sorted_registry;
- zend_module_entry tmp;
-
- zend_hash_init(&sorted_registry, 50, NULL, NULL, 1);
- zend_hash_copy(&sorted_registry, &module_registry, NULL, &tmp, sizeof(zend_module_entry));
- zend_hash_sort(&sorted_registry, zend_qsort, module_name_cmp, 0 TSRMLS_CC);
-
- show_info_func = 1;
- zend_hash_apply_with_argument(&sorted_registry, (apply_func_arg_t) _display_module_info, &show_info_func TSRMLS_CC);
-
- SECTION("Additional Modules");
- php_info_print_table_start();
- php_info_print_table_header(1, "Module Name");
- show_info_func = 0;
- zend_hash_apply_with_argument(&sorted_registry, (apply_func_arg_t) _display_module_info, &show_info_func TSRMLS_CC);
- php_info_print_table_end();
-
- zend_hash_destroy(&sorted_registry);
- }
-
- if (flag & PHP_INFO_ENVIRONMENT) {
- SECTION("Environment");
- php_info_print_table_start();
- php_info_print_table_header(2, "Variable", "Value");
- for (env=environ; env!=NULL && *env !=NULL; env++) {
- tmp1 = estrdup(*env);
- if (!(tmp2=strchr(tmp1,'='))) { /* malformed entry? */
- efree(tmp1);
- continue;
- }
- *tmp2 = 0;
- tmp2++;
- php_info_print_table_row(2, tmp1, tmp2);
- efree(tmp1);
- }
- php_info_print_table_end();
- }
-
- if (flag & PHP_INFO_VARIABLES) {
- pval **data;
-
- SECTION("PHP Variables");
-
- php_info_print_table_start();
- php_info_print_table_header(2, "Variable", "Value");
- if (zend_hash_find(&EG(symbol_table), "PHP_SELF", sizeof("PHP_SELF"), (void **) &data) != FAILURE) {
- php_info_print_table_row(2, "PHP_SELF", Z_STRVAL_PP(data));
- }
- if (zend_hash_find(&EG(symbol_table), "PHP_AUTH_TYPE", sizeof("PHP_AUTH_TYPE"), (void **) &data) != FAILURE) {
- php_info_print_table_row(2, "PHP_AUTH_TYPE", Z_STRVAL_PP(data));
- }
- if (zend_hash_find(&EG(symbol_table), "PHP_AUTH_USER", sizeof("PHP_AUTH_USER"), (void **) &data) != FAILURE) {
- php_info_print_table_row(2, "PHP_AUTH_USER", Z_STRVAL_PP(data));
- }
- if (zend_hash_find(&EG(symbol_table), "PHP_AUTH_PW", sizeof("PHP_AUTH_PW"), (void **) &data) != FAILURE) {
- php_info_print_table_row(2, "PHP_AUTH_PW", Z_STRVAL_PP(data));
- }
- php_print_gpcse_array("_REQUEST", sizeof("_REQUEST")-1 TSRMLS_CC);
- php_print_gpcse_array("_GET", sizeof("_GET")-1 TSRMLS_CC);
- php_print_gpcse_array("_POST", sizeof("_POST")-1 TSRMLS_CC);
- php_print_gpcse_array("_FILES", sizeof("_FILES")-1 TSRMLS_CC);
- php_print_gpcse_array("_COOKIE", sizeof("_COOKIE")-1 TSRMLS_CC);
- php_print_gpcse_array("_SERVER", sizeof("_SERVER")-1 TSRMLS_CC);
- php_print_gpcse_array("_ENV", sizeof("_ENV")-1 TSRMLS_CC);
- php_info_print_table_end();
- }
-
- if (flag & PHP_INFO_LICENSE) {
- if (!sapi_module.phpinfo_as_text) {
- SECTION("PHP License");
- php_info_print_box_start(0);
- PUTS("<p>\n");
- PUTS("This program is free software; you can redistribute it and/or modify ");
- PUTS("it under the terms of the PHP License as published by the PHP Group ");
- PUTS("and included in the distribution in the file: LICENSE\n");
- PUTS("</p>\n");
- PUTS("<p>");
- PUTS("This program is distributed in the hope that it will be useful, ");
- PUTS("but WITHOUT ANY WARRANTY; without even the implied warranty of ");
- PUTS("MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n");
- PUTS("</p>\n");
- PUTS("<p>");
- PUTS("If you did not receive a copy of the PHP license, or have any questions about ");
- PUTS("PHP licensing, please contact license@php.net.\n");
- PUTS("</p>\n");
- php_info_print_box_end();
- } else {
- PUTS("\nPHP License\n");
- PUTS("This program is free software; you can redistribute it and/or modify\n");
- PUTS("it under the terms of the PHP License as published by the PHP Group\n");
- PUTS("and included in the distribution in the file: LICENSE\n");
- PUTS("\n");
- PUTS("This program is distributed in the hope that it will be useful,\n");
- PUTS("but WITHOUT ANY WARRANTY; without even the implied warranty of\n");
- PUTS("MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n");
- PUTS("\n");
- PUTS("If you did not receive a copy of the PHP license, or have any\n");
- PUTS("questions about PHP licensing, please contact license@php.net.\n");
- }
- }
- if (!sapi_module.phpinfo_as_text) {
- PUTS("</div></body></html>");
- }
-}
-/* }}} */
-
-
-PHPAPI void php_info_print_table_start()
-{
- if (!sapi_module.phpinfo_as_text) {
- php_printf("<table border=\"0\" cellpadding=\"3\" width=\"600\">\n");
- } else {
- php_printf("\n");
- }
-}
-
-PHPAPI void php_info_print_table_end()
-{
- if (!sapi_module.phpinfo_as_text) {
- php_printf("</table><br />\n");
- }
-
-}
-
-PHPAPI void php_info_print_box_start(int flag)
-{
- php_info_print_table_start();
- if (flag) {
- if (!sapi_module.phpinfo_as_text) {
- php_printf("<tr class=\"h\"><td>\n");
- }
- } else {
- if (!sapi_module.phpinfo_as_text) {
- php_printf("<tr class=\"v\"><td>\n");
- } else {
- php_printf("\n");
- }
- }
-}
-
-PHPAPI void php_info_print_box_end()
-{
- if (!sapi_module.phpinfo_as_text) {
- php_printf("</td></tr>\n");
- }
- php_info_print_table_end();
-}
-
-PHPAPI void php_info_print_hr()
-{
- if (!sapi_module.phpinfo_as_text) {
- php_printf("<hr />\n");
- } else {
- php_printf("\n\n _______________________________________________________________________\n\n");
- }
-}
-
-PHPAPI void php_info_print_table_colspan_header(int num_cols, char *header)
-{
- int spaces;
-
- if (!sapi_module.phpinfo_as_text) {
- php_printf("<tr class=\"h\"><th colspan=\"%d\">%s</th></tr>\n", num_cols, header );
- } else {
- spaces = (74 - strlen(header));
- php_printf("%*s%s%*s\n", (int)(spaces/2), " ", header, (int)(spaces/2), " ");
- }
-}
-
-/* {{{ php_info_print_table_header
- */
-PHPAPI void php_info_print_table_header(int num_cols, ...)
-{
- int i;
- va_list row_elements;
- char *row_element;
-
- TSRMLS_FETCH();
-
- va_start(row_elements, num_cols);
- if (!sapi_module.phpinfo_as_text) {
- php_printf("<tr class=\"h\">");
- }
- for (i=0; i<num_cols; i++) {
- row_element = va_arg(row_elements, char *);
- if (!row_element || !*row_element) {
- row_element = " ";
- }
- if (!sapi_module.phpinfo_as_text) {
- PUTS("<th>");
- PUTS(row_element);
- PUTS("</th>");
- } else {
- PUTS(row_element);
- if (i < num_cols-1) {
- PUTS(" => ");
- } else {
- PUTS("\n");
- }
- }
- }
- if (!sapi_module.phpinfo_as_text) {
- php_printf("</tr>\n");
- }
-
- va_end(row_elements);
-}
-/* }}} */
-
-/* {{{ php_info_print_table_row_internal
- */
-static void php_info_print_table_row_internal(int num_cols,
- const char *value_class, va_list row_elements)
-{
- int i;
- char *row_element;
- char *elem_esc = NULL;
-/*
- int elem_esc_len;
-*/
-
- TSRMLS_FETCH();
-
- if (!sapi_module.phpinfo_as_text) {
- php_printf("<tr>");
- }
- for (i=0; i<num_cols; i++) {
- if (!sapi_module.phpinfo_as_text) {
- php_printf("<td class=\"%s\">",
- (i==0 ? "e" : value_class )
- );
- }
- row_element = va_arg(row_elements, char *);
- if (!row_element || !*row_element) {
- if (!sapi_module.phpinfo_as_text) {
- PUTS( "<i>no value</i>" );
- } else {
- PUTS( " " );
- }
- } else {
- if (!sapi_module.phpinfo_as_text) {
- elem_esc = php_info_html_esc(row_element TSRMLS_CC);
- PUTS(elem_esc);
- efree(elem_esc);
- } else {
- PUTS(row_element);
- if (i < num_cols-1) {
- PUTS(" => ");
- }
- }
- }
- if (!sapi_module.phpinfo_as_text) {
- php_printf(" </td>");
- } else if (i == (num_cols - 1)) {
- PUTS("\n");
- }
- }
- if (!sapi_module.phpinfo_as_text) {
- php_printf("</tr>\n");
- }
-}
-/* }}} */
-
-/* {{{ php_info_print_table_row
- */
-PHPAPI void php_info_print_table_row(int num_cols, ...)
-{
- va_list row_elements;
-
- va_start(row_elements, num_cols);
- php_info_print_table_row_internal(num_cols, "v", row_elements);
- va_end(row_elements);
-}
-/* }}} */
-
-/* {{{ php_info_print_table_row_ex
- */
-PHPAPI void php_info_print_table_row_ex(int num_cols, const char *value_class,
- ...)
-{
- va_list row_elements;
-
- va_start(row_elements, value_class);
- php_info_print_table_row_internal(num_cols, value_class, row_elements);
- va_end(row_elements);
-}
-/* }}} */
-
-/* {{{ register_phpinfo_constants
- */
-void register_phpinfo_constants(INIT_FUNC_ARGS)
-{
- REGISTER_LONG_CONSTANT("INFO_GENERAL", PHP_INFO_GENERAL, CONST_PERSISTENT|CONST_CS);
- REGISTER_LONG_CONSTANT("INFO_CREDITS", PHP_INFO_CREDITS, CONST_PERSISTENT|CONST_CS);
- REGISTER_LONG_CONSTANT("INFO_CONFIGURATION", PHP_INFO_CONFIGURATION, CONST_PERSISTENT|CONST_CS);
- REGISTER_LONG_CONSTANT("INFO_MODULES", PHP_INFO_MODULES, CONST_PERSISTENT|CONST_CS);
- REGISTER_LONG_CONSTANT("INFO_ENVIRONMENT", PHP_INFO_ENVIRONMENT, CONST_PERSISTENT|CONST_CS);
- REGISTER_LONG_CONSTANT("INFO_VARIABLES", PHP_INFO_VARIABLES, CONST_PERSISTENT|CONST_CS);
- REGISTER_LONG_CONSTANT("INFO_LICENSE", PHP_INFO_LICENSE, CONST_PERSISTENT|CONST_CS);
- REGISTER_LONG_CONSTANT("INFO_ALL", PHP_INFO_ALL, CONST_PERSISTENT|CONST_CS);
- REGISTER_LONG_CONSTANT("CREDITS_GROUP", PHP_CREDITS_GROUP, CONST_PERSISTENT|CONST_CS);
- REGISTER_LONG_CONSTANT("CREDITS_GENERAL", PHP_CREDITS_GENERAL, CONST_PERSISTENT|CONST_CS);
- REGISTER_LONG_CONSTANT("CREDITS_SAPI", PHP_CREDITS_SAPI, CONST_PERSISTENT|CONST_CS);
- REGISTER_LONG_CONSTANT("CREDITS_MODULES", PHP_CREDITS_MODULES, CONST_PERSISTENT|CONST_CS);
- REGISTER_LONG_CONSTANT("CREDITS_DOCS", PHP_CREDITS_DOCS, CONST_PERSISTENT|CONST_CS);
- REGISTER_LONG_CONSTANT("CREDITS_FULLPAGE", PHP_CREDITS_FULLPAGE, CONST_PERSISTENT|CONST_CS);
- REGISTER_LONG_CONSTANT("CREDITS_QA", PHP_CREDITS_QA, CONST_PERSISTENT|CONST_CS);
- REGISTER_LONG_CONSTANT("CREDITS_ALL", PHP_CREDITS_ALL, CONST_PERSISTENT|CONST_CS);
-}
-/* }}} */
-
-/* {{{ proto void phpinfo([int what])
- Output a page of useful information about PHP and the current request */
-PHP_FUNCTION(phpinfo)
-{
- int argc = ZEND_NUM_ARGS();
- long flag;
-
- if (zend_parse_parameters(argc TSRMLS_CC, "|l", &flag) == FAILURE) {
- return;
- }
-
- if(!argc) {
- flag = PHP_INFO_ALL;
- }
-
- /* Andale! Andale! Yee-Hah! */
- php_start_ob_buffer(NULL, 4096, 0 TSRMLS_CC);
- php_print_info(flag TSRMLS_CC);
- php_end_ob_buffer(1, 0 TSRMLS_CC);
-
- RETURN_TRUE;
-}
-
-/* }}} */
-
-/* {{{ proto string phpversion([string extension])
- Return the current PHP version */
-PHP_FUNCTION(phpversion)
-{
- zval **arg;
- int argc = ZEND_NUM_ARGS();
-
- if (argc == 0) {
- RETURN_STRING(PHP_VERSION, 1);
- } else if (argc == 1 && zend_get_parameters_ex(1, &arg) == SUCCESS) {
- char *version;
- convert_to_string_ex(arg);
- version = zend_get_module_version(Z_STRVAL_PP(arg));
- if (version == NULL) {
- RETURN_FALSE;
- }
- RETURN_STRING(version, 1);
- } else {
- WRONG_PARAM_COUNT;
- }
-}
-/* }}} */
-
-/* {{{ proto void phpcredits([int flag])
- Prints the list of people who've contributed to the PHP project */
-PHP_FUNCTION(phpcredits)
-{
- int argc = ZEND_NUM_ARGS();
- long flag;
-
- if (zend_parse_parameters(argc TSRMLS_CC, "|l", &flag) == FAILURE) {
- return;
- }
-
- if(!argc) {
- flag = PHP_CREDITS_ALL;
- }
-
- php_print_credits(flag TSRMLS_CC);
- RETURN_TRUE;
-}
-/* }}} */
-
-
-/* {{{ php_logo_guid
- */
-PHPAPI char *php_logo_guid()
-{
- char *logo_guid;
-
- time_t the_time;
- struct tm *ta, tmbuf;
-
- the_time = time(NULL);
- ta = php_localtime_r(&the_time, &tmbuf);
-
- if ((ta->tm_mon==3) && (ta->tm_mday==1)) {
- logo_guid = PHP_EGG_LOGO_GUID;
- } else {
- logo_guid = PHP_LOGO_GUID;
- }
-
- return estrdup(logo_guid);
-
-}
-/* }}} */
-
-/* {{{ proto string php_logo_guid(void)
- Return the special ID used to request the PHP logo in phpinfo screens*/
-PHP_FUNCTION(php_logo_guid)
-{
-
- if (ZEND_NUM_ARGS() != 0) {
- WRONG_PARAM_COUNT;
- }
-
- RETURN_STRING(php_logo_guid(), 0);
-}
-/* }}} */
-
-/* {{{ proto string php_real_logo_guid(void)
- Return the special ID used to request the PHP logo in phpinfo screens*/
-PHP_FUNCTION(php_real_logo_guid)
-{
-
- if (ZEND_NUM_ARGS() != 0) {
- WRONG_PARAM_COUNT;
- }
-
- RETURN_STRINGL(PHP_LOGO_GUID, sizeof(PHP_LOGO_GUID)-1, 1);
-}
-/* }}} */
-
-/* {{{ proto string php_egg_logo_guid(void)
- Return the special ID used to request the PHP logo in phpinfo screens*/
-PHP_FUNCTION(php_egg_logo_guid)
-{
- if (ZEND_NUM_ARGS() != 0) {
- WRONG_PARAM_COUNT;
- }
-
- RETURN_STRINGL(PHP_EGG_LOGO_GUID, sizeof(PHP_EGG_LOGO_GUID)-1, 1);
-}
-/* }}} */
-
-/* {{{ proto string zend_logo_guid(void)
- Return the special ID used to request the Zend logo in phpinfo screens*/
-PHP_FUNCTION(zend_logo_guid)
-{
- if (ZEND_NUM_ARGS() != 0) {
- WRONG_PARAM_COUNT;
- }
-
- RETURN_STRINGL(ZEND_LOGO_GUID, sizeof(ZEND_LOGO_GUID)-1, 1);
-}
-/* }}} */
-
-/* {{{ proto string php_sapi_name(void)
- Return the current SAPI module name */
-PHP_FUNCTION(php_sapi_name)
-{
- if (ZEND_NUM_ARGS() != 0) {
- WRONG_PARAM_COUNT;
- }
-
- if (sapi_module.name) {
- RETURN_STRING(sapi_module.name, 1);
- } else {
- RETURN_FALSE;
- }
-}
-
-/* }}} */
-
-/* {{{ proto string php_uname(void)
- Return information about the system PHP was built on */
-PHP_FUNCTION(php_uname)
-{
- char *mode = "a";
- int modelen;
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|s", &mode, &modelen) == FAILURE) {
- return;
- }
- RETURN_STRING(php_get_uname(*mode), 0);
-}
-
-/* }}} */
-
-/* {{{ proto string php_ini_scanned_files(void)
- Return comma-separated string of .ini files parsed from the additional ini dir */
-PHP_FUNCTION(php_ini_scanned_files)
-{
- if (strlen(PHP_CONFIG_FILE_SCAN_DIR) && php_ini_scanned_files) {
- RETURN_STRING(php_ini_scanned_files, 1);
- } else {
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-/*
- * 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/standard/info.h b/ext/standard/info.h
deleted file mode 100644
index d2a5492e0e..0000000000
--- a/ext/standard/info.h
+++ /dev/null
@@ -1,88 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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. |
- +----------------------------------------------------------------------+
- | Authors: Rasmus Lerdorf <rasmus@php.net> |
- | Zeev Suraski <zeev@zend.com> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifndef INFO_H
-#define INFO_H
-
-#define PHP_ENTRY_NAME_COLOR "#ccccff"
-#define PHP_CONTENTS_COLOR "#cccccc"
-#define PHP_HEADER_COLOR "#9999cc"
-
-#define PHP_INFO_GENERAL (1<<0)
-#define PHP_INFO_CREDITS (1<<1)
-#define PHP_INFO_CONFIGURATION (1<<2)
-#define PHP_INFO_MODULES (1<<3)
-#define PHP_INFO_ENVIRONMENT (1<<4)
-#define PHP_INFO_VARIABLES (1<<5)
-#define PHP_INFO_LICENSE (1<<6)
-#define PHP_INFO_ALL 0xFFFFFFFF
-
-#ifndef HAVE_CREDITS_DEFS
-#define HAVE_CREDITS_DEFS
-
-#define PHP_CREDITS_GROUP (1<<0)
-#define PHP_CREDITS_GENERAL (1<<1)
-#define PHP_CREDITS_SAPI (1<<2)
-#define PHP_CREDITS_MODULES (1<<3)
-#define PHP_CREDITS_DOCS (1<<4)
-#define PHP_CREDITS_FULLPAGE (1<<5)
-#define PHP_CREDITS_QA (1<<6)
-#define PHP_CREDITS_WEB (1<<7)
-#define PHP_CREDITS_ALL 0xFFFFFFFF
-
-#endif /* HAVE_CREDITS_DEFS */
-
-#define PHP_LOGO_GUID "PHPE9568F34-D428-11d2-A769-00AA001ACF42"
-#define PHP_EGG_LOGO_GUID "PHPE9568F36-D428-11d2-A769-00AA001ACF42"
-#define ZEND_LOGO_GUID "PHPE9568F35-D428-11d2-A769-00AA001ACF42"
-#define PHP_CREDITS_GUID "PHPB8B5F2A0-3C92-11d3-A3A9-4C7B08C10000"
-
-BEGIN_EXTERN_C()
-PHP_FUNCTION(phpversion);
-PHP_FUNCTION(phpinfo);
-PHP_FUNCTION(phpcredits);
-PHP_FUNCTION(php_logo_guid);
-PHP_FUNCTION(php_real_logo_guid);
-PHP_FUNCTION(zend_logo_guid);
-PHP_FUNCTION(php_egg_logo_guid);
-PHP_FUNCTION(php_sapi_name);
-PHP_FUNCTION(php_uname);
-PHP_FUNCTION(php_ini_scanned_files);
-PHPAPI char *php_info_html_esc(char *string TSRMLS_DC);
-PHPAPI void php_print_info_htmlhead(TSRMLS_D);
-PHPAPI void php_print_info(int flag TSRMLS_DC);
-PHPAPI void php_print_style(void);
-PHPAPI void php_info_print_style(TSRMLS_D);
-PHPAPI void php_info_print_table_colspan_header(int num_cols, char *header);
-PHPAPI void php_info_print_table_header(int num_cols, ...);
-PHPAPI void php_info_print_table_row(int num_cols, ...);
-PHPAPI void php_info_print_table_row_ex(int num_cols, const char *, ...);
-PHPAPI void php_info_print_table_start(void);
-PHPAPI void php_info_print_table_end(void);
-PHPAPI void php_info_print_box_start(int bg);
-PHPAPI void php_info_print_box_end(void);
-PHPAPI void php_info_print_hr(void);
-PHPAPI char *php_logo_guid(void);
-
-void register_phpinfo_constants(INIT_FUNC_ARGS);
-END_EXTERN_C()
-
-#endif /* INFO_H */
diff --git a/ext/standard/iptc.c b/ext/standard/iptc.c
deleted file mode 100644
index bf7f63ddfc..0000000000
--- a/ext/standard/iptc.c
+++ /dev/null
@@ -1,391 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Thies C. Arntzen <thies@thieso.net> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-/*
- * Functions to parse & compse IPTC data.
- * PhotoShop >= 3.0 can read and write textual data to JPEG files.
- * ... more to come .....
- *
- * i know, parts of this is now duplicated in image.c
- * but in this case i think it's okay!
- */
-
-/*
- * TODO:
- * - add IPTC translation table
- */
-
-#include "php.h"
-#include "php_iptc.h"
-#include "ext/standard/head.h"
-
-#include <sys/stat.h>
-
-
-/* some defines for the different JPEG block types */
-#define M_SOF0 0xC0 /* Start Of Frame N */
-#define M_SOF1 0xC1 /* N indicates which compression process */
-#define M_SOF2 0xC2 /* Only SOF0-SOF2 are now in common use */
-#define M_SOF3 0xC3
-#define M_SOF5 0xC5 /* NB: codes C4 and CC are NOT SOF markers */
-#define M_SOF6 0xC6
-#define M_SOF7 0xC7
-#define M_SOF9 0xC9
-#define M_SOF10 0xCA
-#define M_SOF11 0xCB
-#define M_SOF13 0xCD
-#define M_SOF14 0xCE
-#define M_SOF15 0xCF
-#define M_SOI 0xD8
-#define M_EOI 0xD9 /* End Of Image (end of datastream) */
-#define M_SOS 0xDA /* Start Of Scan (begins compressed data) */
-#define M_APP0 0xe0
-#define M_APP1 0xe1
-#define M_APP2 0xe2
-#define M_APP3 0xe3
-#define M_APP4 0xe4
-#define M_APP5 0xe5
-#define M_APP6 0xe6
-#define M_APP7 0xe7
-#define M_APP8 0xe8
-#define M_APP9 0xe9
-#define M_APP10 0xea
-#define M_APP11 0xeb
-#define M_APP12 0xec
-#define M_APP13 0xed
-#define M_APP14 0xee
-#define M_APP15 0xef
-
-/* {{{ php_iptc_put1
- */
-static int php_iptc_put1(FILE *fp, int spool, unsigned char c, unsigned char **spoolbuf TSRMLS_DC)
-{
- if (spool > 0)
- PUTC(c);
-
- if (spoolbuf) *(*spoolbuf)++ = c;
-
- return c;
-}
-/* }}} */
-
-/* {{{ php_iptc_get1
- */
-static int php_iptc_get1(FILE *fp, int spool, unsigned char **spoolbuf TSRMLS_DC)
-{
- int c;
- char cc;
-
- c = getc(fp);
-
- if (c == EOF) return EOF;
-
- if (spool > 0) {
- cc = c;
- PUTC(cc);
- }
-
- if (spoolbuf) *(*spoolbuf)++ = c;
-
- return c;
-}
-/* }}} */
-
-/* {{{ php_iptc_read_remaining
- */
-static int php_iptc_read_remaining(FILE *fp, int spool, unsigned char **spoolbuf TSRMLS_DC)
-{
- while (php_iptc_get1(fp, spool, spoolbuf TSRMLS_CC) != EOF) continue;
-
- return M_EOI;
-}
-/* }}} */
-
-/* {{{ php_iptc_skip_variable
- */
-static int php_iptc_skip_variable(FILE *fp, int spool, unsigned char **spoolbuf TSRMLS_DC)
-{
- unsigned int length;
- int c1, c2;
-
- if ((c1 = php_iptc_get1(fp, spool, spoolbuf TSRMLS_CC)) == EOF) return M_EOI;
-
- if ((c2 = php_iptc_get1(fp, spool, spoolbuf TSRMLS_CC)) == EOF) return M_EOI;
-
- length = (((unsigned char) c1) << 8) + ((unsigned char) c2);
-
- length -= 2;
-
- while (length--)
- if (php_iptc_get1(fp, spool, spoolbuf TSRMLS_CC) == EOF) return M_EOI;
-
- return 0;
-}
-/* }}} */
-
-/* {{{ php_iptc_next_marker
- */
-static int php_iptc_next_marker(FILE *fp, int spool, unsigned char **spoolbuf TSRMLS_DC)
-{
- int c;
-
- /* skip unimportant stuff */
-
- c = php_iptc_get1(fp, spool, spoolbuf TSRMLS_CC);
-
- if (c == EOF) return M_EOI;
-
- while (c != 0xff) {
- if ((c = php_iptc_get1(fp, spool, spoolbuf TSRMLS_CC)) == EOF)
- return M_EOI; /* we hit EOF */
- }
-
- /* get marker byte, swallowing possible padding */
- do {
- c = php_iptc_get1(fp, 0, 0 TSRMLS_CC);
- if (c == EOF)
- return M_EOI; /* we hit EOF */
- else
- if (c == 0xff)
- php_iptc_put1(fp, spool, (unsigned char)c, spoolbuf TSRMLS_CC);
- } while (c == 0xff);
-
- return (unsigned int) c;
-}
-/* }}} */
-
-static char psheader[] = "\xFF\xED\0\0Photoshop 3.0\08BIM\x04\x04\0\0\0\0";
-
-/* {{{ proto array iptcembed(string iptcdata, string jpeg_file_name [, int spool])
- Embed binary IPTC data into a JPEG image. */
-PHP_FUNCTION(iptcembed)
-{
- zval **iptcdata, **jpeg_file, **spool_flag;
- FILE *fp;
- unsigned int marker;
- unsigned int spool = 0, done = 0, inx, len;
- unsigned char *spoolbuf=0, *poi=0;
- struct stat sb;
-
- switch(ZEND_NUM_ARGS()){
- case 3:
- if (zend_get_parameters_ex(3, &iptcdata, &jpeg_file, &spool_flag) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex(iptcdata);
- convert_to_string_ex(jpeg_file);
- convert_to_long_ex(spool_flag);
- spool = Z_LVAL_PP(spool_flag);
- break;
-
- case 2:
- if (zend_get_parameters_ex(2, &iptcdata, &jpeg_file) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex(iptcdata);
- convert_to_string_ex(jpeg_file);
- break;
-
- default:
- WRONG_PARAM_COUNT;
- break;
- }
-
- if (PG(safe_mode) && (!php_checkuid(Z_STRVAL_PP(jpeg_file), NULL, CHECKUID_CHECK_FILE_AND_DIR))) {
- RETURN_FALSE;
- }
-
- if (php_check_open_basedir(Z_STRVAL_PP(jpeg_file) TSRMLS_CC)) {
- RETURN_FALSE;
- }
-
- if ((fp = VCWD_FOPEN(Z_STRVAL_PP(jpeg_file), "rb")) == 0) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to open %s", Z_STRVAL_PP(jpeg_file));
- RETURN_FALSE;
- }
-
- len = Z_STRLEN_PP(iptcdata);
-
- if (spool < 2) {
- fstat(fileno(fp), &sb);
-
- poi = spoolbuf = emalloc(len + sizeof(psheader) + sb.st_size + 1024);
-
- if (! spoolbuf) {
- fclose(fp);
- RETURN_FALSE;
- }
- }
-
- if (php_iptc_get1(fp, spool, poi?&poi:0 TSRMLS_CC) != 0xFF) {
- fclose(fp);
- RETURN_FALSE;
- }
-
- if (php_iptc_get1(fp, spool, poi?&poi:0 TSRMLS_CC) != 0xD8) {
- fclose(fp);
- RETURN_FALSE;
- }
-
- while (!done) {
- marker = php_iptc_next_marker(fp, spool, poi?&poi:0 TSRMLS_CC);
-
- if (marker == M_EOI) { /* EOF */
- break;
- } else if (marker != M_APP13) {
- php_iptc_put1(fp, spool, (unsigned char)marker, poi?&poi:0 TSRMLS_CC);
- }
-
- switch (marker) {
- case M_APP13:
- /* we are going to write a new APP13 marker, so don't output the old one */
- php_iptc_skip_variable(fp, 0, 0 TSRMLS_CC);
- php_iptc_read_remaining(fp, spool, poi?&poi:0 TSRMLS_CC);
- done = 1;
- break;
-
- case M_APP0:
- /* APP0 is in each and every JPEG, so when we hit APP0 we insert our new APP13! */
- php_iptc_skip_variable(fp, spool, poi?&poi:0 TSRMLS_CC);
-
- if (len & 1) len++; /* make the length even */
-
- psheader[ 2 ] = (len+28)>>8;
- psheader[ 3 ] = (len+28)&0xff;
-
- for (inx = 0; inx < 28; inx++)
- php_iptc_put1(fp, spool, psheader[inx], poi?&poi:0 TSRMLS_CC);
-
- php_iptc_put1(fp, spool, (unsigned char)(len>>8), poi?&poi:0 TSRMLS_CC);
- php_iptc_put1(fp, spool, (unsigned char)(len&0xff), poi?&poi:0 TSRMLS_CC);
-
- for (inx = 0; inx < len; inx++)
- php_iptc_put1(fp, spool, Z_STRVAL_PP(iptcdata)[inx], poi?&poi:0 TSRMLS_CC);
- break;
-
- case M_SOS:
- /* we hit data, no more marker-inserting can be done! */
- php_iptc_read_remaining(fp, spool, poi?&poi:0 TSRMLS_CC);
- done = 1;
- break;
-
- default:
- php_iptc_skip_variable(fp, spool, poi?&poi:0 TSRMLS_CC);
- break;
- }
- }
-
- fclose(fp);
-
- if (spool < 2) {
- RETVAL_STRINGL(spoolbuf, poi - spoolbuf, 0);
- } else {
- RETURN_TRUE;
- }
-}
-/* }}} */
-
-/* {{{ proto array iptcparse(string iptcdata)
- Parse binary IPTC-data into associative array */
-PHP_FUNCTION(iptcparse)
-{
- unsigned int length, inx, len, tagsfound;
- unsigned char *buffer;
- unsigned char recnum, dataset;
- unsigned char key[ 16 ];
- zval *values, **str, **element;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &str) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex(str);
-
- inx = 0;
- length = Z_STRLEN_PP(str);
- buffer = Z_STRVAL_PP(str);
-
- tagsfound = 0; /* number of tags already found */
-
- while (inx < length) { /* find 1st tag */
- if ((buffer[inx] == 0x1c) && ((buffer[inx+1] == 0x01) || (buffer[inx+1] == 0x02))){
- break;
- } else {
- inx++;
- }
- }
-
- while (inx < length) {
- if (buffer[ inx++ ] != 0x1c) {
- break; /* we ran against some data which does not conform to IPTC - stop parsing! */
- }
-
- if ((inx + 4) >= length)
- break;
-
- dataset = buffer[ inx++ ];
- recnum = buffer[ inx++ ];
-
- if (buffer[ inx ] & (unsigned char) 0x80) { /* long tag */
- len = (((long) buffer[ inx + 2 ]) << 24) + (((long) buffer[ inx + 3 ]) << 16) +
- (((long) buffer[ inx + 4 ]) << 8) + (((long) buffer[ inx + 5 ]));
- inx += 6;
- } else { /* short tag */
- len = (((unsigned short) buffer[ inx ])<<8) | (unsigned short)buffer[ inx+1 ];
- inx += 2;
- }
-
- snprintf(key, sizeof(key), "%d#%03d", (unsigned int) dataset, (unsigned int) recnum);
-
- if ((len > length) || (inx + len) > length)
- break;
-
- if (tagsfound == 0) { /* found the 1st tag - initialize the return array */
- array_init(return_value);
- }
-
- if (zend_hash_find(Z_ARRVAL_P(return_value), key, strlen(key) + 1, (void **) &element) == FAILURE) {
- ALLOC_ZVAL(values);
- INIT_PZVAL(values);
- array_init(values);
-
- zend_hash_update(Z_ARRVAL_P(return_value), key, strlen(key)+1, (void *) &values, sizeof(pval*), (void **) &element);
- }
-
- add_next_index_stringl(*element, buffer+inx, len, 1);
-
- inx += len;
-
- tagsfound++;
- }
-
- if (! tagsfound) {
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-/*
- * 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/standard/lcg.c b/ext/standard/lcg.c
deleted file mode 100644
index 5d1f1cd128..0000000000
--- a/ext/standard/lcg.c
+++ /dev/null
@@ -1,138 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Sascha Schumann <sascha@schumann.cx> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#include "php.h"
-#include "php_lcg.h"
-
-#if HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-
-#ifdef PHP_WIN32
-#include "win32/time.h"
-#elif defined(NETWARE)
-#ifdef NEW_LIBC
-#include <sys/timeval.h>
-#else
-#include "netware/time_nw.h"
-#endif
-#else
-#include <sys/time.h>
-#endif
-
-#ifdef ZTS
-int lcg_globals_id;
-#else
-static php_lcg_globals lcg_globals;
-#endif
-
-
-#ifdef PHP_WIN32
-#include <process.h>
-#endif
-
-/*
- * combinedLCG() returns a pseudo random number in the range of (0, 1).
- * The function combines two CGs with periods of
- * 2^31 - 85 and 2^31 - 249. The period of this function
- * is equal to the product of both primes.
- */
-
-#define MODMULT(a, b, c, m, s) q = s/a;s=b*(s-a*q)-c*q;if(s<0)s+=m
-
-static void lcg_seed(TSRMLS_D);
-
-PHPAPI double php_combined_lcg(TSRMLS_D)
-{
- php_int32 q;
- php_int32 z;
-
- if (!LCG(seeded)) {
- lcg_seed(TSRMLS_C);
- }
-
- MODMULT(53668, 40014, 12211, 2147483563L, LCG(s1));
- MODMULT(52774, 40692, 3791, 2147483399L, LCG(s2));
-
- z = LCG(s1) - LCG(s2);
- if (z < 1) {
- z += 2147483562;
- }
-
- return z * 4.656613e-10;
-}
-
-static void lcg_seed(TSRMLS_D)
-{
- struct timeval tv;
-
- if (gettimeofday(&tv, NULL) == 0) {
- LCG(s1) = tv.tv_sec ^ (~tv.tv_usec);
- } else {
- LCG(s1) = 1;
- }
-#ifdef ZTS
- LCG(s2) = (long) tsrm_thread_id();
-#else
- LCG(s2) = (long) getpid();
-#endif
-
- LCG(seeded) = 1;
-}
-
-static void lcg_init_globals(php_lcg_globals *lcg_globals_p TSRMLS_DC)
-{
- LCG(seeded) = 0;
-}
-
-PHP_MINIT_FUNCTION(lcg)
-{
-#ifdef ZTS
- ts_allocate_id(&lcg_globals_id, sizeof(php_lcg_globals), (ts_allocate_ctor) lcg_init_globals, NULL);
-#else
- lcg_init_globals(&lcg_globals);
-#endif
- return SUCCESS;
-}
-
-PHP_RINIT_FUNCTION(lcg)
-{
- if (!LCG(seeded)) {
- lcg_seed(TSRMLS_C);
- }
- return SUCCESS;
-}
-
-/* {{{ proto float lcg_value()
- Returns a value from the combined linear congruential generator */
-PHP_FUNCTION(lcg_value)
-{
- RETURN_DOUBLE(php_combined_lcg(TSRMLS_C));
-}
-/* }}} */
-
-/*
- * 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/standard/levenshtein.c b/ext/standard/levenshtein.c
deleted file mode 100644
index ba9445da20..0000000000
--- a/ext/standard/levenshtein.c
+++ /dev/null
@@ -1,150 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Hartmut Holzgraefe <hholzgra@php.net> |
- +----------------------------------------------------------------------+
- */
-/* $Id$ */
-
-#include "php.h"
-#include <stdlib.h>
-#include <errno.h>
-#include <ctype.h>
-#include "php_string.h"
-
-#define LEVENSHTEIN_MAX_LENTH 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 )
-{
- 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))
- return -1;
-
- 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;
- }
-
- c0=p1[l2];
-
- efree(p1);
- efree(p2);
-
- return c0;
-}
-/* }}} */
-
-/* {{{ custom_levdist
- */
-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 */
-
- return -1;
-}
-/* }}} */
-
-/* {{{ proto int levenshtein(string str1, string str2)
- 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) {
- 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) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Argument string(s) too long");
- }
-
- RETURN_LONG(distance);
-}
-/* }}} */
-
-/*
- * 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/standard/link.c b/ext/standard/link.c
deleted file mode 100644
index 42ab3d8d25..0000000000
--- a/ext/standard/link.c
+++ /dev/null
@@ -1,227 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-#include "php.h"
-#include "php_filestat.h"
-#include "php_globals.h"
-
-#ifdef HAVE_SYMLINK
-
-#include <stdlib.h>
-#if HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-#include <sys/stat.h>
-#include <string.h>
-#if HAVE_PWD_H
-#ifdef PHP_WIN32
-#include "win32/pwd.h"
-#elif defined(NETWARE)
-#include "netware/pwd.h"
-#else
-#include <pwd.h>
-#endif
-#endif
-#if HAVE_GRP_H
-#ifdef PHP_WIN32
-#include "win32/grp.h"
-#else
-#include <grp.h>
-#endif
-#endif
-#include <errno.h>
-#include <ctype.h>
-
-#include "safe_mode.h"
-#include "php_link.h"
-
-/* {{{ proto string readlink(string filename)
- Return the target of a symbolic link */
-PHP_FUNCTION(readlink)
-{
- zval **filename;
- char buff[MAXPATHLEN];
- int ret;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &filename) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex(filename);
-
- ret = readlink(Z_STRVAL_PP(filename), buff, MAXPATHLEN-1);
-
- if (ret == -1) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", strerror(errno));
- RETURN_FALSE;
- }
- /* Append NULL to the end of the string */
- buff[ret] = '\0';
-
- RETURN_STRING(buff, 1);
-}
-/* }}} */
-
-/* {{{ proto int linkinfo(string filename)
- Returns the st_dev field of the UNIX C stat structure describing the link */
-PHP_FUNCTION(linkinfo)
-{
- zval **filename;
-#if defined(NETWARE) && defined(CLIB_STAT_PATCH)
- struct stat_libc sb;
-#else
- struct stat sb;
-#endif
- int ret;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &filename) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex(filename);
-
- ret = VCWD_LSTAT(Z_STRVAL_PP(filename), &sb);
- if (ret == -1) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", strerror(errno));
- RETURN_LONG(-1L);
- }
-
- RETURN_LONG((long) sb.st_dev);
-}
-/* }}} */
-
-/* {{{ proto int symlink(string target, string link)
- Create a symbolic link */
-PHP_FUNCTION(symlink)
-{
- zval **topath, **frompath;
- int ret;
- char source_p[MAXPATHLEN];
- char dest_p[MAXPATHLEN];
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &topath, &frompath) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex(topath);
- convert_to_string_ex(frompath);
-
- expand_filepath(Z_STRVAL_PP(frompath), source_p TSRMLS_CC);
- expand_filepath(Z_STRVAL_PP(topath), dest_p TSRMLS_CC);
-
- if (php_stream_locate_url_wrapper(source_p, NULL, STREAM_LOCATE_WRAPPERS_ONLY TSRMLS_CC) ||
- php_stream_locate_url_wrapper(dest_p, NULL, STREAM_LOCATE_WRAPPERS_ONLY TSRMLS_CC) )
- {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to symlink to a URL");
- RETURN_FALSE;
- }
-
- if (PG(safe_mode) && !php_checkuid(dest_p, NULL, CHECKUID_CHECK_FILE_AND_DIR)) {
- RETURN_FALSE;
- }
-
- if (PG(safe_mode) && !php_checkuid(source_p, NULL, CHECKUID_CHECK_FILE_AND_DIR)) {
- RETURN_FALSE;
- }
-
- if (php_check_open_basedir(dest_p TSRMLS_CC)) {
- RETURN_FALSE;
- }
-
- if (php_check_open_basedir(source_p TSRMLS_CC)) {
- RETURN_FALSE;
- }
-
-#ifndef ZTS
- ret = symlink(Z_STRVAL_PP(topath), Z_STRVAL_PP(frompath));
-#else
- ret = symlink(dest_p, source_p);
-#endif
- if (ret == -1) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", strerror(errno));
- RETURN_FALSE;
- }
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto int link(string target, string link)
- Create a hard link */
-PHP_FUNCTION(link)
-{
- zval **topath, **frompath;
- int ret;
- char source_p[MAXPATHLEN];
- char dest_p[MAXPATHLEN];
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &topath, &frompath) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex(topath);
- convert_to_string_ex(frompath);
-
- expand_filepath(Z_STRVAL_PP(frompath), source_p TSRMLS_CC);
- expand_filepath(Z_STRVAL_PP(topath), dest_p TSRMLS_CC);
-
- if (php_stream_locate_url_wrapper(source_p, NULL, STREAM_LOCATE_WRAPPERS_ONLY TSRMLS_CC) ||
- php_stream_locate_url_wrapper(dest_p, NULL, STREAM_LOCATE_WRAPPERS_ONLY TSRMLS_CC) )
- {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to link to a URL");
- RETURN_FALSE;
- }
-
- if (PG(safe_mode) && !php_checkuid(dest_p, NULL, CHECKUID_CHECK_FILE_AND_DIR)) {
- RETURN_FALSE;
- }
-
- if (PG(safe_mode) && !php_checkuid(source_p, NULL, CHECKUID_CHECK_FILE_AND_DIR)) {
- RETURN_FALSE;
- }
-
- if (php_check_open_basedir(dest_p TSRMLS_CC)) {
- RETURN_FALSE;
- }
-
- if (php_check_open_basedir(source_p TSRMLS_CC)) {
- RETURN_FALSE;
- }
-
-#ifndef ZTS
- ret = link(Z_STRVAL_PP(topath), Z_STRVAL_PP(frompath));
-#else
- ret = link(dest_p, source_p);
-#endif
- if (ret == -1) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", strerror(errno));
- RETURN_FALSE;
- }
-
- RETURN_TRUE;
-}
-/* }}} */
-
-#endif
-
-/*
- * 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/standard/mail.c b/ext/standard/mail.c
deleted file mode 100644
index 921036b939..0000000000
--- a/ext/standard/mail.c
+++ /dev/null
@@ -1,295 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Rasmus Lerdorf <rasmus@php.net> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-#include <stdlib.h>
-#include <ctype.h>
-#include <stdio.h>
-#include "php.h"
-#include "ext/standard/info.h"
-
-#if HAVE_SYSEXITS_H
-#include <sysexits.h>
-#endif
-#if HAVE_SYS_SYSEXITS_H
-#include <sys/sysexits.h>
-#endif
-
-#include "php_mail.h"
-#include "php_ini.h"
-#include "safe_mode.h"
-#include "exec.h"
-
-#if HAVE_SENDMAIL
-#ifdef PHP_WIN32
-#include "win32/sendmail.h"
-#endif
-
-#ifdef NETWARE
-#include "netware/pipe.h" /* For popen(), pclose() */
-#include "netware/sysexits.h" /* For exit status codes like EX_OK */
-#endif
-
-#define SKIP_LONG_HEADER_SEP(str, pos) \
- if (str[pos] == '\r' && str[pos + 1] == '\n' && (str[pos + 2] == ' ' || str[pos + 2] == '\t')) { \
- pos += 3; \
- while (str[pos] == ' ' || str[pos] == '\t') { \
- pos++; \
- } \
- continue; \
- } \
-
-/* {{{ proto int ezmlm_hash(string addr)
- Calculate EZMLM list hash value. */
-PHP_FUNCTION(ezmlm_hash)
-{
- char *str = NULL;
- unsigned long h = 5381L;
- int j, str_len;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s",
- &str, &str_len) == FAILURE) {
- return;
- }
-
- for (j = 0; j < str_len; j++) {
- h = (h + (h << 5)) ^ (unsigned long) (unsigned char) tolower(str[j]);
- }
-
- h = (h % 53);
-
- RETURN_LONG((int) h);
-}
-/* }}} */
-
-/* {{{ proto int mail(string to, string subject, string message [, string additional_headers [, string additional_parameters]])
- Send an email message */
-PHP_FUNCTION(mail)
-{
- char *to=NULL, *message=NULL, *headers=NULL;
- char *subject=NULL, *extra_cmd=NULL;
- int to_len, message_len, headers_len;
- int subject_len, extra_cmd_len, i;
- char *force_extra_parameters = INI_STR("mail.force_extra_parameters");
- char *to_r, *subject_r;
-
- if (PG(safe_mode) && (ZEND_NUM_ARGS() == 5)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "SAFE MODE Restriction in effect. The fifth parameter is disabled in SAFE MODE.");
- RETURN_FALSE;
- }
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "sss|ss",
- &to, &to_len,
- &subject, &subject_len,
- &message, &message_len,
- &headers, &headers_len,
- &extra_cmd, &extra_cmd_len
- ) == FAILURE) {
- return;
- }
-
- if (to_len > 0) {
- to_r = estrndup(to, to_len);
- for (; to_len; to_len--) {
- if (!isspace((unsigned char) to_r[to_len - 1])) {
- break;
- }
- to_r[to_len - 1] = '\0';
- }
- for (i = 0; to_r[i]; i++) {
- if (iscntrl((unsigned char) to_r[i])) {
- /* According to RFC 822, section 3.1.1 long headers may be separated into
- * parts using CRLF followed at least one linear-white-space character ('\t' or ' ').
- * To prevent these separators from being replaced with a space, we use the
- * SKIP_LONG_HEADER_SEP to skip over them.
- */
- SKIP_LONG_HEADER_SEP(to_r, i);
- to_r[i] = ' ';
- }
- }
- } else {
- to_r = to;
- }
-
- if (subject_len > 0) {
- subject_r = estrndup(subject, subject_len);
- for (; subject_len; subject_len--) {
- if (!isspace((unsigned char) subject_r[subject_len - 1])) {
- break;
- }
- subject_r[subject_len - 1] = '\0';
- }
- for(i = 0; subject_r[i]; i++) {
- if (iscntrl((unsigned char) subject_r[i])) {
- SKIP_LONG_HEADER_SEP(subject_r, i);
- subject_r[i] = ' ';
- }
- }
- } else {
- subject_r = subject;
- }
-
- if (force_extra_parameters) {
- extra_cmd = estrdup(force_extra_parameters);
- } else if (extra_cmd) {
- extra_cmd = php_escape_shell_cmd(extra_cmd);
- }
-
- if (php_mail(to_r, subject_r, message, headers, extra_cmd TSRMLS_CC)) {
- RETVAL_TRUE;
- } else {
- RETVAL_FALSE;
- }
-
- if (extra_cmd) {
- efree (extra_cmd);
- }
- if (to_r != to) {
- efree(to_r);
- }
- if (subject_r != subject) {
- efree(subject_r);
- }
-}
-/* }}} */
-
-/* {{{ php_mail
- */
-PHPAPI int php_mail(char *to, char *subject, char *message, char *headers, char *extra_cmd TSRMLS_DC)
-{
-#if (defined PHP_WIN32 || defined NETWARE)
- int tsm_err;
- char *tsm_errmsg = NULL;
-#endif
- FILE *sendmail;
- int ret;
- char *sendmail_path = INI_STR("sendmail_path");
- char *sendmail_cmd = NULL;
-
- if (!sendmail_path) {
-#if (defined PHP_WIN32 || defined NETWARE)
- /* handle old style win smtp sending */
- if (TSendMail(INI_STR("SMTP"), &tsm_err, &tsm_errmsg, headers, subject, to, message, NULL, NULL, NULL) == FAILURE) {
- if (tsm_errmsg) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", tsm_errmsg);
- efree(tsm_errmsg);
- } else {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", GetSMErrorText(tsm_err));
- }
- return 0;
- }
- return 1;
-#else
- return 0;
-#endif
- }
- if (extra_cmd != NULL) {
- sendmail_cmd = emalloc (strlen (sendmail_path) + strlen (extra_cmd) + 2);
- strcpy (sendmail_cmd, sendmail_path);
- strcat (sendmail_cmd, " ");
- strcat (sendmail_cmd, extra_cmd);
- } else {
- sendmail_cmd = sendmail_path;
- }
-
-#ifdef PHP_WIN32
- sendmail = popen(sendmail_cmd, "wb");
-#else
- /* Since popen() doesn't indicate if the internal fork() doesn't work
- * (e.g. the shell can't be executed) we explicitely set it to 0 to be
- * sure we don't catch any older errno value. */
- errno = 0;
- sendmail = popen(sendmail_cmd, "w");
-#endif
- if (extra_cmd != NULL)
- efree (sendmail_cmd);
-
- if (sendmail) {
-#ifndef PHP_WIN32
- 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);
- return 0;
- }
-#endif
- fprintf(sendmail, "To: %s\n", to);
- fprintf(sendmail, "Subject: %s\n", subject);
- if (headers != NULL) {
- fprintf(sendmail, "%s\n", headers);
- }
- fprintf(sendmail, "\n%s\n", message);
- ret = pclose(sendmail);
-#ifdef PHP_WIN32
- if (ret == -1)
-#else
-#if defined(EX_TEMPFAIL)
- if ((ret != EX_OK)&&(ret != EX_TEMPFAIL))
-#elif defined(EX_OK)
- if (ret != EX_OK)
-#else
- if (ret != 0)
-#endif
-#endif
- {
- return 0;
- } else {
- return 1;
- }
- } else {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Could not execute mail delivery program '%s'", sendmail_path);
- return 0;
- }
-
- return 1; /* never reached */
-}
-/* }}} */
-
-/* {{{ PHP_MINFO_FUNCTION
- */
-PHP_MINFO_FUNCTION(mail)
-{
- char *sendmail_path = INI_STR("sendmail_path");
-
-#ifdef PHP_WIN32
- if (!sendmail_path) {
- php_info_print_table_row(2, "Internal Sendmail Support for Windows", "enabled");
- } else {
- php_info_print_table_row(2, "Path to sendmail", sendmail_path);
- }
-#else
- php_info_print_table_row(2, "Path to sendmail", sendmail_path);
-#endif
-}
-/* }}} */
-
-#else
-
-PHP_FUNCTION(mail) {}
-PHP_MINFO_FUNCTION(mail) {}
-
-#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/standard/math.c b/ext/standard/math.c
deleted file mode 100644
index 8a2b3ecec1..0000000000
--- a/ext/standard/math.c
+++ /dev/null
@@ -1,1182 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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. |
- +----------------------------------------------------------------------+
- | Authors: Jim Winstead <jimw@php.net> |
- | Stig Sæther Bakken <ssb@php.net> |
- | Zeev Suraski <zeev@zend.com> |
- | PHP 4.0 patches by Thies C. Arntzen <thies@thieso.net> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#include "php.h"
-#include "php_math.h"
-#include "zend_multiply.h"
-
-#include <math.h>
-#include <float.h>
-#include <stdlib.h>
-
-#ifndef M_PI
-#define M_PI 3.14159265358979323846
-#endif
-
-#ifndef PHP_ROUND_FUZZ
-# ifndef PHP_WIN32
-# define PHP_ROUND_FUZZ 0.50000000001
-# else
-# define PHP_ROUND_FUZZ 0.5
-# endif
-#endif
-
-#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; \
-} \
-
-/* {{{ proto int abs(int number)
- Return the absolute value of the number */
-
-PHP_FUNCTION(abs)
-{
- zval **value;
-
- if (ZEND_NUM_ARGS()!=1||zend_get_parameters_ex(1, &value)==FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_scalar_to_number_ex(value);
-
- if (Z_TYPE_PP(value) == IS_DOUBLE) {
- RETURN_DOUBLE(fabs(Z_DVAL_PP(value)));
- } else if (Z_TYPE_PP(value) == IS_LONG) {
- if (Z_LVAL_PP(value) == LONG_MIN) {
- RETURN_DOUBLE(-(double)LONG_MIN);
- } else {
- RETURN_LONG(Z_LVAL_PP(value) < 0 ? -Z_LVAL_PP(value) : Z_LVAL_PP(value));
- }
- }
-
- RETURN_FALSE;
-}
-
-/* }}} */
-/* {{{ proto float ceil(float number)
- Returns the next highest integer value of the number */
-PHP_FUNCTION(ceil)
-{
- zval **value;
-
- if (ZEND_NUM_ARGS()!=1||zend_get_parameters_ex(1, &value)==FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_scalar_to_number_ex(value);
-
- if (Z_TYPE_PP(value) == IS_DOUBLE) {
- RETURN_DOUBLE(ceil(Z_DVAL_PP(value)));
- } else if (Z_TYPE_PP(value) == IS_LONG) {
- convert_to_double_ex(value);
- RETURN_DOUBLE(Z_DVAL_PP(value));
- }
-
- RETURN_FALSE;
-}
-
-/* }}} */
-/* {{{ proto float floor(float number)
- Returns the next lowest integer value from the number */
-PHP_FUNCTION(floor)
-{
- zval **value;
-
- if (ZEND_NUM_ARGS()!=1||zend_get_parameters_ex(1, &value)==FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_scalar_to_number_ex(value);
-
- if (Z_TYPE_PP(value) == IS_DOUBLE) {
- RETURN_DOUBLE(floor(Z_DVAL_PP(value)));
- } else if (Z_TYPE_PP(value) == IS_LONG) {
- convert_to_double_ex(value);
- RETURN_DOUBLE(Z_DVAL_PP(value));
- }
-
- RETURN_FALSE;
-}
-
-/* }}} */
-
-
-/* {{{ proto float round(float number [, int precision])
- Returns the number rounded to specified precision */
-PHP_FUNCTION(round)
-{
- zval **value, **precision;
- int places = 0;
- double return_val;
-
- if (ZEND_NUM_ARGS() < 1 || ZEND_NUM_ARGS() > 2 ||
- zend_get_parameters_ex(ZEND_NUM_ARGS(), &value, &precision) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- if (ZEND_NUM_ARGS() == 2) {
- convert_to_long_ex(precision);
- places = (int) Z_LVAL_PP(precision);
- }
-
- convert_scalar_to_number_ex(value);
-
- switch (Z_TYPE_PP(value)) {
- case IS_LONG:
- /* Simple case - long that doesn't need to be rounded. */
- if (places >= 0) {
- RETURN_DOUBLE((double) Z_LVAL_PP(value));
- }
- /* break omitted intentionally */
-
- case IS_DOUBLE:
- 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_DOUBLE(return_val);
- break;
-
- default:
- RETURN_FALSE;
- break;
- }
-}
-/* }}} */
-/* {{{ proto float sin(float number)
- Returns the sine of the number in radians */
-
-PHP_FUNCTION(sin)
-{
- zval **num;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &num) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_double_ex(num);
- Z_DVAL_P(return_value) = sin(Z_DVAL_PP(num));
- Z_TYPE_P(return_value) = IS_DOUBLE;
-}
-
-/* }}} */
-/* {{{ proto float cos(float number)
- Returns the cosine of the number in radians */
-
-PHP_FUNCTION(cos)
-{
- zval **num;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &num) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_double_ex(num);
- Z_DVAL_P(return_value) = cos(Z_DVAL_PP(num));
- Z_TYPE_P(return_value) = IS_DOUBLE;
-}
-/* }}} */
-/* {{{ proto float tan(float number)
- Returns the tangent of the number in radians */
-PHP_FUNCTION(tan)
-{
- zval **num;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &num) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_double_ex(num);
- Z_DVAL_P(return_value) = tan(Z_DVAL_PP(num));
- Z_TYPE_P(return_value) = IS_DOUBLE;
-}
-
-/* }}} */
-/* {{{ proto float asin(float number)
- Returns the arc sine of the number in radians */
-
-PHP_FUNCTION(asin)
-{
- zval **num;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &num) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_double_ex(num);
- Z_DVAL_P(return_value) = asin(Z_DVAL_PP(num));
- Z_TYPE_P(return_value) = IS_DOUBLE;
-}
-
-/* }}} */
-/* {{{ proto float acos(float number)
- Return the arc cosine of the number in radians */
-
-PHP_FUNCTION(acos)
-{
- zval **num;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &num) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_double_ex(num);
- Z_DVAL_P(return_value) = acos(Z_DVAL_PP(num));
- Z_TYPE_P(return_value) = IS_DOUBLE;
-}
-
-/* }}} */
-/* {{{ proto float atan(float number)
- Returns the arc tangent of the number in radians */
-
-PHP_FUNCTION(atan)
-{
- zval **num;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &num) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_double_ex(num);
- Z_DVAL_P(return_value) = atan(Z_DVAL_PP(num));
- Z_TYPE_P(return_value) = IS_DOUBLE;
-}
-
-/* }}} */
-/* {{{ proto float atan2(float y, float x)
- Returns the arc tangent of y/x, with the resulting quadrant determined by the signs of y and x */
-
-PHP_FUNCTION(atan2)
-{
- zval **num1, **num2;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &num1, &num2) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_double_ex(num1);
- convert_to_double_ex(num2);
- Z_DVAL_P(return_value) = atan2(Z_DVAL_PP(num1), Z_DVAL_PP(num2));
- Z_TYPE_P(return_value) = IS_DOUBLE;
-}
-
-/* }}} */
-/* {{{ proto float sinh(float number)
- Returns the hyperbolic sine of the number, defined as (exp(number) - exp(-number))/2 */
-
-PHP_FUNCTION(sinh)
-{
- zval **num;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &num) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_double_ex(num);
- Z_DVAL_P(return_value) = sinh(Z_DVAL_PP(num));
- Z_TYPE_P(return_value) = IS_DOUBLE;
-}
-
-/* }}} */
-/* {{{ proto float cosh(float number)
- Returns the hyperbolic cosine of the number, defined as (exp(number) + exp(-number))/2 */
-
-PHP_FUNCTION(cosh)
-{
- zval **num;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &num) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_double_ex(num);
- Z_DVAL_P(return_value) = cosh(Z_DVAL_PP(num));
- Z_TYPE_P(return_value) = IS_DOUBLE;
-}
-/* }}} */
-/* {{{ proto float tanh(float number)
- Returns the hyperbolic tangent of the number, defined as sinh(number)/cosh(number) */
-PHP_FUNCTION(tanh)
-{
- zval **num;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &num) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_double_ex(num);
- Z_DVAL_P(return_value) = tanh(Z_DVAL_PP(num));
- Z_TYPE_P(return_value) = IS_DOUBLE;
-}
-
-/* }}} */
-
-#if !defined(PHP_WIN32) && !defined(NETWARE)
-#ifdef HAVE_ASINH
-/* {{{ proto float asinh(float number)
- Returns the inverse hyperbolic sine of the number, i.e. the value whose hyperbolic sine is number */
-PHP_FUNCTION(asinh)
-{
- zval **num;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &num) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_double_ex(num);
- Z_DVAL_P(return_value) = asinh(Z_DVAL_PP(num));
- Z_TYPE_P(return_value) = IS_DOUBLE;
-}
-/* }}} */
-#endif /* HAVE_ASINH */
-
-#ifdef HAVE_ACOSH
-/* {{{ proto float acosh(float number)
- Returns the inverse hyperbolic cosine of the number, i.e. the value whose hyperbolic cosine is number */
-PHP_FUNCTION(acosh)
-{
- zval **num;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &num) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_double_ex(num);
- Z_DVAL_P(return_value) = acosh(Z_DVAL_PP(num));
- Z_TYPE_P(return_value) = IS_DOUBLE;
-}
-/* }}} */
-#endif /* HAVE_ACOSH */
-
-#ifdef HAVE_ATANH
-/* {{{ proto float atanh(float number)
- Returns the inverse hyperbolic tangent of the number, i.e. the value whose hyperbolic tangent is number */
-PHP_FUNCTION(atanh)
-{
- zval **num;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &num) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_double_ex(num);
- Z_DVAL_P(return_value) = atanh(Z_DVAL_PP(num));
- Z_TYPE_P(return_value) = IS_DOUBLE;
-}
-/* }}} */
-#endif /* HAVE_ATANH */
-#endif /* !defined(PHP_WIN32) && !defined(NETWARE) */
-
-
-/* {{{ proto float pi(void)
- Returns an approximation of pi */
-PHP_FUNCTION(pi)
-{
- Z_DVAL_P(return_value) = M_PI;
- Z_TYPE_P(return_value) = IS_DOUBLE;
-}
-/* }}} */
-
-
-/* {{{ proto bool is_finite(float val)
- Returns whether argument is finite */
-PHP_FUNCTION(is_finite)
-{
- double dval;
-
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "d", &dval) == FAILURE) {
- return;
- }
- RETURN_BOOL(zend_finite(dval));
-}
-/* }}} */
-
-/* {{{ proto bool is_infinite(float val)
- Returns whether argument is infinite */
-PHP_FUNCTION(is_infinite)
-{
- double dval;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "d", &dval) == FAILURE) {
- return;
- }
- RETURN_BOOL(zend_isinf(dval));
-}
-/* }}} */
-
-/* {{{ proto bool is_nan(float val)
- Returns whether argument is not a number */
-PHP_FUNCTION(is_nan)
-{
- double dval;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "d", &dval) == FAILURE) {
- return;
- }
- RETURN_BOOL(zend_isnan(dval));
-}
-/* }}} */
-
-/* {{{ proto number pow(number base, number exponent)
- Returns base raised to the power of exponent. Returns integer result when possible */
-PHP_FUNCTION(pow)
-{
- zval *zbase, *zexp;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z/z/", &zbase, &zexp) == FAILURE) {
- return;
- }
-
- /* make sure we're dealing with numbers */
- convert_scalar_to_number(zbase TSRMLS_CC);
- convert_scalar_to_number(zexp TSRMLS_CC);
-
- /* if both base and exponent were longs, we'll try to get a long out */
- if (Z_TYPE_P(zbase) == IS_LONG && Z_TYPE_P(zexp) == IS_LONG && Z_LVAL_P(zexp) >= 0) {
- long l1 = 1, l2 = Z_LVAL_P(zbase), i = Z_LVAL_P(zexp);
-
- if (i == 0) {
- RETURN_LONG(1L);
- } else if (l2 == 0) {
- RETURN_LONG(0);
- }
-
- /* calculate pow(long,long) in O(log exp) operations, bail if overflow */
- while (i >= 1) {
- int overflow;
- double dval;
-
- if (i % 2) {
- --i;
- ZEND_SIGNED_MULTIPLY_LONG(l1,l2,l1,dval,overflow);
- if (overflow) RETURN_DOUBLE(dval * pow(l2,i));
- } else {
- i /= 2;
- ZEND_SIGNED_MULTIPLY_LONG(l2,l2,l2,dval,overflow);
- if (overflow) RETURN_DOUBLE((double)l1 * pow(dval,i));
- }
- if (i == 0) {
- RETURN_LONG(l1);
- }
- }
- }
- convert_to_double(zbase);
- convert_to_double(zexp);
-
- RETURN_DOUBLE( pow(Z_DVAL_P(zbase),Z_DVAL_P(zexp)) );
-}
-/* }}} */
-
-/* {{{ proto float exp(float number)
- Returns e raised to the power of the number */
-
-PHP_FUNCTION(exp)
-{
- zval **num;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &num) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_double_ex(num);
- Z_DVAL_P(return_value) = exp(Z_DVAL_PP(num));
- Z_TYPE_P(return_value) = IS_DOUBLE;
-}
-
-/* }}} */
-
-
-#if !defined(PHP_WIN32) && !defined(NETWARE)
-/* {{{ proto float expm1(float number)
- Returns exp(number) - 1, computed in a way that accurate even when the value of number is close to zero */
-
-/*
- WARNING: this function is expermental: it could change its name or
- disappear in the next version of PHP!
-*/
-
-PHP_FUNCTION(expm1)
-{
- zval **num;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &num) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_double_ex(num);
- Z_DVAL_P(return_value) = expm1(Z_DVAL_PP(num));
- Z_TYPE_P(return_value) = IS_DOUBLE;
-}
-
-/* }}} */
-/* {{{ proto float log1p(float number)
- Returns log(1 + number), computed in a way that accurate even when the value of number is close to zero */
-
-/*
- WARNING: this function is expermental: it could change its name or
- disappear in the next version of PHP!
-*/
-
-PHP_FUNCTION(log1p)
-{
-#ifdef HAVE_LOG1P
- zval **num;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &num) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_double_ex(num);
- Z_DVAL_P(return_value) = log1p(Z_DVAL_PP(num));
- Z_TYPE_P(return_value) = IS_DOUBLE;
-#endif
-}
-
-/* }}} */
-
-#endif
-/* {{{ proto float log(float number, [float base])
- Returns the natural logarithm of the number, or the base log if base is specified */
-
-PHP_FUNCTION(log)
-{
- zval **num, **base;
-
- switch (ZEND_NUM_ARGS()) {
- case 1:
- if (zend_get_parameters_ex(1, &num) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_double_ex(num);
- RETURN_DOUBLE(log(Z_DVAL_PP(num)));
- case 2:
- if (zend_get_parameters_ex(2, &num, &base) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_double_ex(num);
- convert_to_double_ex(base);
-
- if (Z_DVAL_PP(base) <= 0.0) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "base must be greater than 0");
- RETURN_FALSE;
- }
- RETURN_DOUBLE(log(Z_DVAL_PP(num)) / log(Z_DVAL_PP(base)));
- default:
- WRONG_PARAM_COUNT;
- }
-}
-
-/* }}} */
-/* {{{ proto float log10(float number)
- Returns the base-10 logarithm of the number */
-
-PHP_FUNCTION(log10)
-{
- zval **num;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &num) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_double_ex(num);
- Z_DVAL_P(return_value) = log10(Z_DVAL_PP(num));
- Z_TYPE_P(return_value) = IS_DOUBLE;
-}
-
-/* }}} */
-/* {{{ proto float sqrt(float number)
- Returns the square root of the number */
-
-PHP_FUNCTION(sqrt)
-{
- zval **num;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &num) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_double_ex(num);
- Z_DVAL_P(return_value) = sqrt(Z_DVAL_PP(num));
- Z_TYPE_P(return_value) = IS_DOUBLE;
-}
-
-/* }}} */
-
-
-/* {{{ proto float hypot(float num1, float num2)
- Returns sqrt(num1*num1 + num2*num2) */
-
-#ifdef HAVE_HYPOT
-PHP_FUNCTION(hypot)
-{
- zval **num1, **num2;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &num1, &num2) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_double_ex(num1);
- convert_to_double_ex(num2);
- Z_DVAL_P(return_value) = hypot(Z_DVAL_PP(num1), Z_DVAL_PP(num2));
- Z_TYPE_P(return_value) = IS_DOUBLE;
-}
-#endif
-
-/* }}} */
-
-/* {{{ proto float deg2rad(float number)
- Converts the number in degrees to the radian equivalent */
-
-PHP_FUNCTION(deg2rad)
-{
- zval **deg;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &deg) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_double_ex(deg);
- RETVAL_DOUBLE((Z_DVAL_PP(deg) / 180.0) * M_PI);
-}
-
-/* }}} */
-/* {{{ proto float rad2deg(float number)
- Converts the radian number to the equivalent number in degrees */
-
-PHP_FUNCTION(rad2deg)
-{
- zval **rad;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &rad) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_double_ex(rad);
- RETVAL_DOUBLE((Z_DVAL_PP(rad) / M_PI) * 180);
-}
-
-/* }}} */
-/* {{{ _php_math_basetolong */
-
-/*
- * Convert a string representation of a base(2-36) number to a long.
- */
-PHPAPI long
-_php_math_basetolong(zval *arg, int base) {
- long num = 0, digit, onum;
- int i;
- char c, *s;
-
- if (Z_TYPE_P(arg) != IS_STRING || base < 2 || base > 36) {
- return 0;
- }
-
- s = Z_STRVAL_P(arg);
-
- for (i = Z_STRLEN_P(arg); i > 0; i--) {
- c = *s++;
-
- digit = (c >= '0' && c <= '9') ? c - '0'
- : (c >= 'A' && c <= 'Z') ? c - 'A' + 10
- : (c >= 'a' && c <= 'z') ? c - 'a' + 10
- : base;
-
- if (digit >= base) {
- continue;
- }
-
- onum = num;
- num = num * base + digit;
- if (num > onum)
- continue;
-
- {
- TSRMLS_FETCH();
-
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Number '%s' is too big to fit in long", s);
- return LONG_MAX;
- }
- }
-
- return num;
-}
-
-/* }}} */
-/* {{{ _php_math_longtobase */
-
-/* {{{ _php_math_basetozval */
-
-/*
- * Convert a string representation of a base(2-36) number to a zval.
- */
-PHPAPI int
-_php_math_basetozval(zval *arg, int base, zval *ret) {
- long num = 0;
- double fnum = 0;
- int i;
- int mode = 0;
- char c, *s;
- long cutoff;
- int cutlim;
-
- if (Z_TYPE_P(arg) != IS_STRING || base < 2 || base > 36) {
- return FAILURE;
- }
-
- s = Z_STRVAL_P(arg);
-
- cutoff = LONG_MAX / base;
- cutlim = LONG_MAX % base;
-
- for (i = Z_STRLEN_P(arg); i > 0; i--) {
- c = *s++;
-
- /* might not work for EBCDIC */
- if (c >= '0' && c <= '9')
- c -= '0';
- else if (c >= 'A' && c <= 'Z')
- c -= 'A' - 10;
- else if (c >= 'a' && c <= 'z')
- c -= 'a' - 10;
- else
- continue;
-
- if (c >= base)
- continue;
-
- switch (mode) {
- case 0: /* Integer */
- if (num < cutoff || (num == cutoff && c <= cutlim)) {
- num = num * base + c;
- break;
- } else {
- fnum = num;
- mode = 1;
- }
- /* fall-through */
- case 1: /* Float */
- fnum = fnum * base + c;
- }
- }
-
- if (mode == 1) {
- ZVAL_DOUBLE(ret, fnum);
- } else {
- ZVAL_LONG(ret, num);
- }
- return SUCCESS;
-}
-
-/* }}} */
-/* {{{ _php_math_longtobase */
-
-/*
- * Convert a long to a string containing a base(2-36) representation of
- * the number.
- */
-PHPAPI char *
-_php_math_longtobase(zval *arg, int base)
-{
- static char digits[] = "0123456789abcdefghijklmnopqrstuvwxyz";
- char buf[(sizeof(unsigned long) << 3) + 1];
- char *ptr, *end;
- unsigned long value;
-
- if (Z_TYPE_P(arg) != IS_LONG || base < 2 || base > 36) {
- return STR_EMPTY_ALLOC();
- }
-
- value = Z_LVAL_P(arg);
-
- end = ptr = buf + sizeof(buf) - 1;
- *ptr = '\0';
-
- do {
- *--ptr = digits[value % base];
- value /= base;
- } while (ptr > buf && value);
-
- return estrndup(ptr, end - ptr);
-}
-
-/* }}} */
-/* {{{ _php_math_zvaltobase */
-
-/*
- * Convert a zval to a string containing a base(2-36) representation of
- * the number.
- */
-PHPAPI char *
-_php_math_zvaltobase(zval *arg, int base TSRMLS_DC)
-{
- static char digits[] = "0123456789abcdefghijklmnopqrstuvwxyz";
-
- if ((Z_TYPE_P(arg) != IS_LONG && Z_TYPE_P(arg) != IS_DOUBLE) || base < 2 || base > 36) {
- return STR_EMPTY_ALLOC();
- }
-
- if (Z_TYPE_P(arg) == IS_DOUBLE) {
- double fvalue = floor(Z_DVAL_P(arg)); /* floor it just in case */
- char *ptr, *end;
- char buf[(sizeof(double) << 3) + 1];
-
- /* Don't try to convert +/- infinity */
- if (fvalue == HUGE_VAL || fvalue == -HUGE_VAL) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Number too large");
- return STR_EMPTY_ALLOC();
- }
-
- end = ptr = buf + sizeof(buf) - 1;
- *ptr = '\0';
-
- do {
- *--ptr = digits[(int) fmod(fvalue, base)];
- fvalue /= base;
- } while (ptr > buf && fabs(fvalue) >= 1);
-
- return estrndup(ptr, end - ptr);
- }
-
- return _php_math_longtobase(arg, base);
-}
-
-/* }}} */
-/* {{{ proto int bindec(string binary_number)
- Returns the decimal equivalent of the binary number */
-
-PHP_FUNCTION(bindec)
-{
- zval **arg;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_string_ex(arg);
- if(_php_math_basetozval(*arg, 2, return_value) != SUCCESS) {
- RETURN_FALSE;
- }
-}
-
-/* }}} */
-/* {{{ proto int hexdec(string hexadecimal_number)
- Returns the decimal equivalent of the hexadecimal number */
-
-PHP_FUNCTION(hexdec)
-{
- zval **arg;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_string_ex(arg);
-
- if(_php_math_basetozval(*arg, 16, return_value) != SUCCESS) {
- RETURN_FALSE;
- }
-}
-
-/* }}} */
-/* {{{ proto int octdec(string octal_number)
- Returns the decimal equivalent of an octal string */
-
-PHP_FUNCTION(octdec)
-{
- zval **arg;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_string_ex(arg);
-
- if(_php_math_basetozval(*arg, 8, return_value) != SUCCESS) {
- RETURN_FALSE;
- }
-}
-
-/* }}} */
-/* {{{ proto string decbin(int decimal_number)
- Returns a string containing a binary representation of the number */
-
-PHP_FUNCTION(decbin)
-{
- zval **arg;
- char *result;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long_ex(arg);
-
- result = _php_math_longtobase(*arg, 2);
- Z_TYPE_P(return_value) = IS_STRING;
- Z_STRLEN_P(return_value) = strlen(result);
- Z_STRVAL_P(return_value) = result;
-}
-
-/* }}} */
-/* {{{ proto string decoct(int decimal_number)
- Returns a string containing an octal representation of the given number */
-
-PHP_FUNCTION(decoct)
-{
- zval **arg;
- char *result;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long_ex(arg);
-
- result = _php_math_longtobase(*arg, 8);
- Z_TYPE_P(return_value) = IS_STRING;
- Z_STRLEN_P(return_value) = strlen(result);
- Z_STRVAL_P(return_value) = result;
-}
-
-/* }}} */
-/* {{{ proto string dechex(int decimal_number)
- Returns a string containing a hexadecimal representation of the given number */
-
-PHP_FUNCTION(dechex)
-{
- zval **arg;
- char *result;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long_ex(arg);
-
- result = _php_math_longtobase(*arg, 16);
- Z_TYPE_P(return_value) = IS_STRING;
- Z_STRLEN_P(return_value) = strlen(result);
- Z_STRVAL_P(return_value) = result;
-}
-
-/* }}} */
-/* {{{ proto string base_convert(string number, int frombase, int tobase)
- Converts a number in a string from any base <= 36 to any base <= 36 */
-
-PHP_FUNCTION(base_convert)
-{
- zval **number, **frombase, **tobase, temp;
- char *result;
-
- if (ZEND_NUM_ARGS() != 3 || zend_get_parameters_ex(3, &number, &frombase, &tobase) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex(number);
- convert_to_long_ex(frombase);
- convert_to_long_ex(tobase);
- if (Z_LVAL_PP(frombase) < 2 || Z_LVAL_PP(frombase) > 36) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid `from base' (%ld)", Z_LVAL_PP(frombase));
- RETURN_FALSE;
- }
- if (Z_LVAL_PP(tobase) < 2 || Z_LVAL_PP(tobase) > 36) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid `to base' (%ld)", Z_LVAL_PP(tobase));
- RETURN_FALSE;
- }
-
- if(_php_math_basetozval(*number, Z_LVAL_PP(frombase), &temp) != SUCCESS) {
- RETURN_FALSE;
- }
- result = _php_math_zvaltobase(&temp, Z_LVAL_PP(tobase) TSRMLS_CC);
- RETVAL_STRING(result, 0);
-}
-
-/* }}} */
-/* {{{ _php_math_number_format */
-
-PHPAPI char *_php_math_number_format(double d, int dec, char dec_point, char thousand_sep)
-{
- char *tmpbuf = NULL, *resbuf;
- char *s, *t; /* source, target */
- char *dp;
- int integral;
- int tmplen, reslen=0;
- int count=0;
- int is_negative=0;
-
- if (d < 0) {
- is_negative = 1;
- d = -d;
- }
- if (!dec_point && dec > 0) {
- d *= pow(10, dec);
- dec = 0;
- } else {
- dec = MAX(0, dec);
- }
-
- PHP_ROUND_WITH_FUZZ(d, dec);
-
- tmplen = spprintf(&tmpbuf, 0, "%.*f", dec, d);
-
- if (tmpbuf == NULL || !isdigit((int)tmpbuf[0])) {
- return tmpbuf;
- }
-
- /* calculate the length of the return buffer */
- dp = strchr(tmpbuf, '.');
- if (dp) {
- integral = dp - tmpbuf;
- } else {
- /* no decimal point was found */
- integral = tmplen;
- }
-
- /* allow for thousand separators */
- if (thousand_sep) {
- integral += (integral-1) / 3;
- }
-
- reslen = integral;
-
- if (dec) {
- reslen += 1 + dec;
- }
-
- /* add a byte for minus sign */
- if (is_negative) {
- reslen++;
- }
- resbuf = (char *) emalloc(reslen+1); /* +1 for NUL terminator */
-
- s = tmpbuf+tmplen-1;
- t = resbuf+reslen;
- *t-- = '\0';
-
- /* copy the decimal places.
- * Take care, as the sprintf implementation may return less places than
- * we requested due to internal buffer limitations */
- if (dec) {
- int declen = dp ? strlen(dp+1) : 0;
- int topad = declen > 0 ? dec - declen : 0;
-
- /* pad with '0's */
-
- while (topad--) {
- *t-- = '0';
- }
-
- if (dp) {
- /* now copy the chars after the point */
- memcpy(t - declen + 1, dp + 1, declen);
-
- t -= declen;
- s -= declen;
- }
-
- /* add decimal point */
- *t-- = dec_point;
- s--;
- }
-
- /* copy the numbers before the decimal place, adding thousand
- * separator every three digits */
- while(s >= tmpbuf) {
- *t-- = *s--;
- if (thousand_sep && (++count%3)==0 && s>=tmpbuf) {
- *t-- = thousand_sep;
- }
- }
-
- /* and a minus sign, if needed */
- if (is_negative) {
- *t-- = '-';
- }
-
- efree(tmpbuf);
-
- return resbuf;
-}
-
-/* }}} */
-/* {{{ proto string number_format(float number [, int num_decimal_places [, string dec_seperator, string thousands_seperator]])
- Formats a number with grouped thousands */
-
-PHP_FUNCTION(number_format)
-{
- zval **num, **dec, **t_s, **d_p;
- char thousand_sep=',', dec_point='.';
-
- switch(ZEND_NUM_ARGS()) {
- case 1:
- if (zend_get_parameters_ex(1, &num)==FAILURE) {
- RETURN_FALSE;
- }
- convert_to_double_ex(num);
- RETURN_STRING(_php_math_number_format(Z_DVAL_PP(num), 0, dec_point, thousand_sep), 0);
- break;
- case 2:
- if (zend_get_parameters_ex(2, &num, &dec)==FAILURE) {
- RETURN_FALSE;
- }
- convert_to_double_ex(num);
- convert_to_long_ex(dec);
- RETURN_STRING(_php_math_number_format(Z_DVAL_PP(num), Z_LVAL_PP(dec), dec_point, thousand_sep), 0);
- break;
- case 4:
- if (zend_get_parameters_ex(4, &num, &dec, &d_p, &t_s)==FAILURE) {
- RETURN_FALSE;
- }
- convert_to_double_ex(num);
- convert_to_long_ex(dec);
- convert_to_string_ex(d_p);
- convert_to_string_ex(t_s);
- if (Z_STRLEN_PP(d_p)==1) {
- dec_point=Z_STRVAL_PP(d_p)[0];
- } else if (Z_STRLEN_PP(d_p)==0) {
- dec_point=0;
- }
- if (Z_STRLEN_PP(t_s)==1) {
- thousand_sep=Z_STRVAL_PP(t_s)[0];
- } else if(Z_STRLEN_PP(t_s)==0) {
- thousand_sep=0;
- }
- RETURN_STRING(_php_math_number_format(Z_DVAL_PP(num), Z_LVAL_PP(dec), dec_point, thousand_sep), 0);
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
-}
-/* }}} */
-
-/* {{{ proto float fmod(float x, float y)
- Returns the remainder of dividing x by y as a float */
-PHP_FUNCTION(fmod)
-{
- double num1, num2;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "dd", &num1, &num2) == FAILURE) {
- return;
- }
-
- Z_DVAL_P(return_value) = fmod(num1, num2);
- Z_TYPE_P(return_value) = IS_DOUBLE;
-}
-/* }}} */
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- * vim600: fdm=marker
- * vim: noet sw=4 ts=4
- */
diff --git a/ext/standard/md5.c b/ext/standard/md5.c
deleted file mode 100644
index ef76ebf29d..0000000000
--- a/ext/standard/md5.c
+++ /dev/null
@@ -1,446 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Lachlan Roche |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-/*
- * md5.c - Copyright 1997 Lachlan Roche
- * md5_file() added by Alessandro Astarita <aleast@capri.it>
- */
-
-#include <stdio.h>
-#include "php.h"
-
-#include "md5.h"
-
-PHPAPI void make_digest(char *md5str, unsigned char *digest)
-{
- int i;
-
- for (i = 0; i < 16; i++) {
- sprintf(md5str, "%02x", digest[i]);
- md5str += 2;
- }
-
- *md5str = '\0';
-}
-
-/* {{{ proto string md5(string str, [ bool raw_output])
- Calculate the md5 hash of a string */
-PHP_NAMED_FUNCTION(php_if_md5)
-{
- char *arg;
- int arg_len;
- zend_bool raw_output = 0;
- char md5str[33];
- PHP_MD5_CTX context;
- unsigned char digest[16];
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|b", &arg, &arg_len, &raw_output) == FAILURE) {
- return;
- }
-
- md5str[0] = '\0';
- PHP_MD5Init(&context);
- PHP_MD5Update(&context, arg, arg_len);
- PHP_MD5Final(digest, &context);
- if (raw_output) {
- RETURN_STRINGL(digest, 16, 1);
- } else {
- make_digest(md5str, digest);
- RETVAL_STRING(md5str, 1);
- }
-
-}
-/* }}} */
-
-/* {{{ proto string md5_file(string filename [, bool raw_output])
- Calculate the md5 hash of given filename */
-PHP_NAMED_FUNCTION(php_if_md5_file)
-{
- char *arg;
- int arg_len;
- zend_bool raw_output = 0;
- char md5str[33];
- unsigned char buf[1024];
- unsigned char digest[16];
- PHP_MD5_CTX context;
- int n;
- FILE *fp;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|b", &arg, &arg_len, &raw_output) == FAILURE) {
- return;
- }
-
- if (PG(safe_mode) && (!php_checkuid(arg, NULL, CHECKUID_CHECK_FILE_AND_DIR))) {
- RETURN_FALSE;
- }
-
- if (php_check_open_basedir(arg TSRMLS_CC)) {
- RETURN_FALSE;
- }
-
- if ((fp = VCWD_FOPEN(arg, "rb")) == NULL) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to open file");
- RETURN_FALSE;
- }
-
- PHP_MD5Init(&context);
-
- while ((n = fread(buf, 1, sizeof(buf), fp)) > 0) {
- PHP_MD5Update(&context, buf, n);
- }
-
- PHP_MD5Final(digest, &context);
-
- if (ferror(fp)) {
- fclose(fp);
- RETURN_FALSE;
- }
-
- fclose(fp);
-
- if (raw_output) {
- RETURN_STRINGL(digest, 16, 1);
- } else {
- make_digest(md5str, digest);
- RETVAL_STRING(md5str, 1);
- }
-}
-/* }}} */
-
-/*
- * The remaining code is the reference MD5 code (md5c.c) from rfc1321
- */
-/* MD5C.C - RSA Data Security, Inc., MD5 message-digest algorithm
- */
-
-/* Copyright (C) 1991-2, RSA Data Security, Inc. Created 1991. All
- rights reserved.
-
- License to copy and use this software is granted provided that it
- is identified as the "RSA Data Security, Inc. MD5 Message-Digest
- Algorithm" in all material mentioning or referencing this software
- or this function.
-
- License is also granted to make and use derivative works provided
- that such works are identified as "derived from the RSA Data
- Security, Inc. MD5 Message-Digest Algorithm" in all material
- mentioning or referencing the derived work.
-
- RSA Data Security, Inc. makes no representations concerning either
- the merchantability of this software or the suitability of this
- software for any particular purpose. It is provided "as is"
- without express or implied warranty of any kind.
-
- These notices must be retained in any copies of any part of this
- documentation and/or software.
- */
-
-/* Constants for MD5Transform routine.
- */
-
-
-#define S11 7
-#define S12 12
-#define S13 17
-#define S14 22
-#define S21 5
-#define S22 9
-#define S23 14
-#define S24 20
-#define S31 4
-#define S32 11
-#define S33 16
-#define S34 23
-#define S41 6
-#define S42 10
-#define S43 15
-#define S44 21
-
-static void MD5Transform(php_uint32[4], const unsigned char[64]);
-static void Encode(unsigned char *, php_uint32 *, unsigned int);
-static void Decode(php_uint32 *, const unsigned char *, unsigned int);
-
-static unsigned char PADDING[64] =
-{
- 0x80, 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, 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
-};
-
-/* F, G, H and I are basic MD5 functions.
- */
-#define F(x, y, z) (((x) & (y)) | ((~x) & (z)))
-#define G(x, y, z) (((x) & (z)) | ((y) & (~z)))
-#define H(x, y, z) ((x) ^ (y) ^ (z))
-#define I(x, y, z) ((y) ^ ((x) | (~z)))
-
-/* ROTATE_LEFT rotates x left n bits.
- */
-#define ROTATE_LEFT(x, n) (((x) << (n)) | ((x) >> (32-(n))))
-
-/* FF, GG, HH, and II transformations for rounds 1, 2, 3, and 4.
- Rotation is separate from addition to prevent recomputation.
- */
-#define FF(a, b, c, d, x, s, ac) { \
- (a) += F ((b), (c), (d)) + (x) + (php_uint32)(ac); \
- (a) = ROTATE_LEFT ((a), (s)); \
- (a) += (b); \
- }
-#define GG(a, b, c, d, x, s, ac) { \
- (a) += G ((b), (c), (d)) + (x) + (php_uint32)(ac); \
- (a) = ROTATE_LEFT ((a), (s)); \
- (a) += (b); \
- }
-#define HH(a, b, c, d, x, s, ac) { \
- (a) += H ((b), (c), (d)) + (x) + (php_uint32)(ac); \
- (a) = ROTATE_LEFT ((a), (s)); \
- (a) += (b); \
- }
-#define II(a, b, c, d, x, s, ac) { \
- (a) += I ((b), (c), (d)) + (x) + (php_uint32)(ac); \
- (a) = ROTATE_LEFT ((a), (s)); \
- (a) += (b); \
- }
-
-/* {{{ PHP_MD5Init
- * MD5 initialization. Begins an MD5 operation, writing a new context.
- */
-PHPAPI void PHP_MD5Init(PHP_MD5_CTX * context)
-{
- context->count[0] = context->count[1] = 0;
- /* Load magic initialization constants.
- */
- context->state[0] = 0x67452301;
- context->state[1] = 0xefcdab89;
- context->state[2] = 0x98badcfe;
- context->state[3] = 0x10325476;
-}
-/* }}} */
-
-/* {{{ PHP_MD5Update
- MD5 block update operation. Continues an MD5 message-digest
- operation, processing another message block, and updating the
- context.
- */
-PHPAPI void PHP_MD5Update(PHP_MD5_CTX * context, const unsigned char *input,
- unsigned int inputLen)
-{
- unsigned int i, index, partLen;
-
- /* Compute number of bytes mod 64 */
- index = (unsigned int) ((context->count[0] >> 3) & 0x3F);
-
- /* Update number of bits */
- if ((context->count[0] += ((php_uint32) inputLen << 3))
- < ((php_uint32) inputLen << 3))
- context->count[1]++;
- context->count[1] += ((php_uint32) inputLen >> 29);
-
- partLen = 64 - index;
-
- /* Transform as many times as possible.
- */
- if (inputLen >= partLen) {
- memcpy
- ((unsigned char*) & context->buffer[index], (unsigned char*) input, partLen);
- MD5Transform(context->state, context->buffer);
-
- for (i = partLen; i + 63 < inputLen; i += 64)
- MD5Transform(context->state, &input[i]);
-
- index = 0;
- } else
- i = 0;
-
- /* Buffer remaining input */
- memcpy
- ((unsigned char*) & context->buffer[index], (unsigned char*) & input[i],
- inputLen - i);
-}
-/* }}} */
-
-/* {{{ PHP_MD5Final
- MD5 finalization. Ends an MD5 message-digest operation, writing the
- the message digest and zeroizing the context.
- */
-PHPAPI void PHP_MD5Final(unsigned char digest[16], PHP_MD5_CTX * context)
-{
- unsigned char bits[8];
- unsigned int index, padLen;
-
- /* Save number of bits */
- Encode(bits, context->count, 8);
-
- /* Pad out to 56 mod 64.
- */
- index = (unsigned int) ((context->count[0] >> 3) & 0x3f);
- padLen = (index < 56) ? (56 - index) : (120 - index);
- PHP_MD5Update(context, PADDING, padLen);
-
- /* Append length (before padding) */
- PHP_MD5Update(context, bits, 8);
-
- /* Store state in digest */
- Encode(digest, context->state, 16);
-
- /* Zeroize sensitive information.
- */
- memset((unsigned char*) context, 0, sizeof(*context));
-}
-/* }}} */
-
-/* {{{ MD5Transform
- * MD5 basic transformation. Transforms state based on block.
- */
-static void MD5Transform(state, block)
-php_uint32 state[4];
-const unsigned char block[64];
-{
- php_uint32 a = state[0], b = state[1], c = state[2], d = state[3], x[16];
-
- Decode(x, block, 64);
-
- /* Round 1 */
- FF(a, b, c, d, x[0], S11, 0xd76aa478); /* 1 */
- FF(d, a, b, c, x[1], S12, 0xe8c7b756); /* 2 */
- FF(c, d, a, b, x[2], S13, 0x242070db); /* 3 */
- FF(b, c, d, a, x[3], S14, 0xc1bdceee); /* 4 */
- FF(a, b, c, d, x[4], S11, 0xf57c0faf); /* 5 */
- FF(d, a, b, c, x[5], S12, 0x4787c62a); /* 6 */
- FF(c, d, a, b, x[6], S13, 0xa8304613); /* 7 */
- FF(b, c, d, a, x[7], S14, 0xfd469501); /* 8 */
- FF(a, b, c, d, x[8], S11, 0x698098d8); /* 9 */
- FF(d, a, b, c, x[9], S12, 0x8b44f7af); /* 10 */
- FF(c, d, a, b, x[10], S13, 0xffff5bb1); /* 11 */
- FF(b, c, d, a, x[11], S14, 0x895cd7be); /* 12 */
- FF(a, b, c, d, x[12], S11, 0x6b901122); /* 13 */
- FF(d, a, b, c, x[13], S12, 0xfd987193); /* 14 */
- FF(c, d, a, b, x[14], S13, 0xa679438e); /* 15 */
- FF(b, c, d, a, x[15], S14, 0x49b40821); /* 16 */
-
- /* Round 2 */
- GG(a, b, c, d, x[1], S21, 0xf61e2562); /* 17 */
- GG(d, a, b, c, x[6], S22, 0xc040b340); /* 18 */
- GG(c, d, a, b, x[11], S23, 0x265e5a51); /* 19 */
- GG(b, c, d, a, x[0], S24, 0xe9b6c7aa); /* 20 */
- GG(a, b, c, d, x[5], S21, 0xd62f105d); /* 21 */
- GG(d, a, b, c, x[10], S22, 0x2441453); /* 22 */
- GG(c, d, a, b, x[15], S23, 0xd8a1e681); /* 23 */
- GG(b, c, d, a, x[4], S24, 0xe7d3fbc8); /* 24 */
- GG(a, b, c, d, x[9], S21, 0x21e1cde6); /* 25 */
- GG(d, a, b, c, x[14], S22, 0xc33707d6); /* 26 */
- GG(c, d, a, b, x[3], S23, 0xf4d50d87); /* 27 */
- GG(b, c, d, a, x[8], S24, 0x455a14ed); /* 28 */
- GG(a, b, c, d, x[13], S21, 0xa9e3e905); /* 29 */
- GG(d, a, b, c, x[2], S22, 0xfcefa3f8); /* 30 */
- GG(c, d, a, b, x[7], S23, 0x676f02d9); /* 31 */
- GG(b, c, d, a, x[12], S24, 0x8d2a4c8a); /* 32 */
-
- /* Round 3 */
- HH(a, b, c, d, x[5], S31, 0xfffa3942); /* 33 */
- HH(d, a, b, c, x[8], S32, 0x8771f681); /* 34 */
- HH(c, d, a, b, x[11], S33, 0x6d9d6122); /* 35 */
- HH(b, c, d, a, x[14], S34, 0xfde5380c); /* 36 */
- HH(a, b, c, d, x[1], S31, 0xa4beea44); /* 37 */
- HH(d, a, b, c, x[4], S32, 0x4bdecfa9); /* 38 */
- HH(c, d, a, b, x[7], S33, 0xf6bb4b60); /* 39 */
- HH(b, c, d, a, x[10], S34, 0xbebfbc70); /* 40 */
- HH(a, b, c, d, x[13], S31, 0x289b7ec6); /* 41 */
- HH(d, a, b, c, x[0], S32, 0xeaa127fa); /* 42 */
- HH(c, d, a, b, x[3], S33, 0xd4ef3085); /* 43 */
- HH(b, c, d, a, x[6], S34, 0x4881d05); /* 44 */
- HH(a, b, c, d, x[9], S31, 0xd9d4d039); /* 45 */
- HH(d, a, b, c, x[12], S32, 0xe6db99e5); /* 46 */
- HH(c, d, a, b, x[15], S33, 0x1fa27cf8); /* 47 */
- HH(b, c, d, a, x[2], S34, 0xc4ac5665); /* 48 */
-
- /* Round 4 */
- II(a, b, c, d, x[0], S41, 0xf4292244); /* 49 */
- II(d, a, b, c, x[7], S42, 0x432aff97); /* 50 */
- II(c, d, a, b, x[14], S43, 0xab9423a7); /* 51 */
- II(b, c, d, a, x[5], S44, 0xfc93a039); /* 52 */
- II(a, b, c, d, x[12], S41, 0x655b59c3); /* 53 */
- II(d, a, b, c, x[3], S42, 0x8f0ccc92); /* 54 */
- II(c, d, a, b, x[10], S43, 0xffeff47d); /* 55 */
- II(b, c, d, a, x[1], S44, 0x85845dd1); /* 56 */
- II(a, b, c, d, x[8], S41, 0x6fa87e4f); /* 57 */
- II(d, a, b, c, x[15], S42, 0xfe2ce6e0); /* 58 */
- II(c, d, a, b, x[6], S43, 0xa3014314); /* 59 */
- II(b, c, d, a, x[13], S44, 0x4e0811a1); /* 60 */
- II(a, b, c, d, x[4], S41, 0xf7537e82); /* 61 */
- II(d, a, b, c, x[11], S42, 0xbd3af235); /* 62 */
- II(c, d, a, b, x[2], S43, 0x2ad7d2bb); /* 63 */
- II(b, c, d, a, x[9], S44, 0xeb86d391); /* 64 */
-
- state[0] += a;
- state[1] += b;
- state[2] += c;
- state[3] += d;
-
- /* Zeroize sensitive information. */
- memset((unsigned char*) x, 0, sizeof(x));
-}
-/* }}} */
-
-/* {{{ Encode
- Encodes input (php_uint32) into output (unsigned char). Assumes len is
- a multiple of 4.
- */
-static void Encode(output, input, len)
-unsigned char *output;
-php_uint32 *input;
-unsigned int len;
-{
- unsigned int i, j;
-
- for (i = 0, j = 0; j < len; i++, j += 4) {
- output[j] = (unsigned char) (input[i] & 0xff);
- output[j + 1] = (unsigned char) ((input[i] >> 8) & 0xff);
- output[j + 2] = (unsigned char) ((input[i] >> 16) & 0xff);
- output[j + 3] = (unsigned char) ((input[i] >> 24) & 0xff);
- }
-}
-/* }}} */
-
-/* {{{ Decode
- Decodes input (unsigned char) into output (php_uint32). Assumes len is
- a multiple of 4.
- */
-static void Decode(output, input, len)
-php_uint32 *output;
-const unsigned char *input;
-unsigned int len;
-{
- unsigned int i, j;
-
- for (i = 0, j = 0; j < len; i++, j += 4)
- output[i] = ((php_uint32) input[j]) | (((php_uint32) input[j + 1]) << 8) |
- (((php_uint32) input[j + 2]) << 16) | (((php_uint32) input[j + 3]) << 24);
-}
-/* }}} */
-
-/*
- * 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/standard/md5.h b/ext/standard/md5.h
deleted file mode 100644
index 917a4e6b38..0000000000
--- a/ext/standard/md5.h
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Rasmus Lerdorf <rasmus@lerdorf.on.ca> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifndef MD5_H
-#define MD5_H
-/* MD5.H - header file for MD5C.C
- */
-
-/* Copyright (C) 1991-2, RSA Data Security, Inc. Created 1991. All
- rights reserved.
-
- License to copy and use this software is granted provided that it
- is identified as the "RSA Data Security, Inc. MD5 Message-Digest
- Algorithm" in all material mentioning or referencing this software
- or this function.
-
- License is also granted to make and use derivative works provided
- that such works are identified as "derived from the RSA Data
- Security, Inc. MD5 Message-Digest Algorithm" in all material
- mentioning or referencing the derived work.
-
- RSA Data Security, Inc. makes no representations concerning either
- the merchantability of this software or the suitability of this
- software for any particular purpose. It is provided "as is"
- without express or implied warranty of any kind.
-
- These notices must be retained in any copies of any part of this
- documentation and/or software.
- */
-
-#include "ext/standard/basic_functions.h"
-
-/* MD5 context. */
-typedef struct {
- php_uint32 state[4]; /* state (ABCD) */
- php_uint32 count[2]; /* number of bits, modulo 2^64 (lsb first) */
- unsigned char buffer[64]; /* input buffer */
-} PHP_MD5_CTX;
-
-PHPAPI void make_digest(char *md5str, unsigned char *digest);
-PHPAPI void PHP_MD5Init(PHP_MD5_CTX *);
-PHPAPI void PHP_MD5Update(PHP_MD5_CTX *, const unsigned char *, unsigned int);
-PHPAPI void PHP_MD5Final(unsigned char[16], PHP_MD5_CTX *);
-
-PHP_NAMED_FUNCTION(php_if_md5);
-PHP_NAMED_FUNCTION(php_if_md5_file);
-
-#endif
diff --git a/ext/standard/metaphone.c b/ext/standard/metaphone.c
deleted file mode 100644
index 108098dd0a..0000000000
--- a/ext/standard/metaphone.c
+++ /dev/null
@@ -1,478 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Thies C. Arntzen <thies@thieso.net> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-/*
- Based on CPANs "Text-Metaphone-1.96" by Michael G Schwern <schwern@pobox.com>
-*/
-
-#include "php.h"
-#include "php_metaphone.h"
-
-static int metaphone(char *word, int word_len, int max_phonemes, char **phoned_word, int traditional);
-
-PHP_FUNCTION(metaphone);
-
-/* {{{ proto string metaphone(string text, int phones)
- Break english phrases down into their phonemes */
-PHP_FUNCTION(metaphone)
-{
- char *str;
- char *result = 0;
- int str_len;
- long phones = 0;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|l", &str, &str_len,
- &phones) == FAILURE) {
- return;
- }
-
- if (metaphone(str, str_len, phones, &result, 1) == 0) {
- RETVAL_STRING(result, 0);
- } else {
- if (result) {
- efree(result);
- }
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-/*
- this is now the original code by Michael G Schwern:
- i've changed it just a slightly bit (use emalloc,
- get rid of includes etc)
- - thies - 13.09.1999
-*/
-
-/*----------------------------- */
-/* this used to be "metaphone.h" */
-/*----------------------------- */
-
-/* Special encodings */
-#define SH 'X'
-#define TH '0'
-
-/*----------------------------- */
-/* end of "metaphone.h" */
-/*----------------------------- */
-
-/*----------------------------- */
-/* this used to be "metachar.h" */
-/*----------------------------- */
-
-/* Metachar.h ... little bits about characters for metaphone */
-/*-- Character encoding array & accessing macros --*/
-/* Stolen directly out of the book... */
-char _codes[26] =
-{
- 1, 16, 4, 16, 9, 2, 4, 16, 9, 2, 0, 2, 2, 2, 1, 4, 0, 2, 4, 4, 1, 0, 0, 0, 8, 0
-/* a b c d e f g h i j k l m n o p q r s t u v w x y z */
-};
-
-
-#define ENCODE(c) (isalpha(c) ? _codes[((toupper(c)) - 'A')] : 0)
-
-#define isvowel(c) (ENCODE(c) & 1) /* AEIOU */
-
-/* These letters are passed through unchanged */
-#define NOCHANGE(c) (ENCODE(c) & 2) /* FJMNR */
-
-/* These form dipthongs when preceding H */
-#define AFFECTH(c) (ENCODE(c) & 4) /* CGPST */
-
-/* These make C and G soft */
-#define MAKESOFT(c) (ENCODE(c) & 8) /* EIY */
-
-/* These prevent GH from becoming F */
-#define NOGHTOF(c) (ENCODE(c) & 16) /* BDH */
-
-/*----------------------------- */
-/* end of "metachar.h" */
-/*----------------------------- */
-
-/* I suppose I could have been using a character pointer instead of
- * accesssing the array directly... */
-
-/* Look at the next letter in the word */
-#define Next_Letter (toupper(word[w_idx+1]))
-/* Look at the current letter in the word */
-#define Curr_Letter (toupper(word[w_idx]))
-/* Go N letters back. */
-#define Look_Back_Letter(n) (w_idx >= n ? toupper(word[w_idx-n]) : '\0')
-/* Previous letter. I dunno, should this return null on failure? */
-#define Prev_Letter (Look_Back_Letter(1))
-/* Look two letters down. It makes sure you don't walk off the string. */
-#define After_Next_Letter (Next_Letter != '\0' ? toupper(word[w_idx+2]) \
- : '\0')
-#define Look_Ahead_Letter(n) (toupper(Lookahead(word+w_idx, n)))
-
-
-/* Allows us to safely look ahead an arbitrary # of letters */
-/* I probably could have just used strlen... */
-static char Lookahead(char *word, int how_far)
-{
- char letter_ahead = '\0'; /* null by default */
- int idx;
- for (idx = 0; word[idx] != '\0' && idx < how_far; idx++);
- /* Edge forward in the string... */
-
- letter_ahead = word[idx]; /* idx will be either == to how_far or
- * at the end of the string
- */
- return letter_ahead;
-}
-
-
-/* phonize one letter
- * We don't know the buffers size in advance. On way to solve this is to just
- * re-allocate the buffer size. We're using an extra of 2 characters (this
- * could be one though; or more too). */
-#define Phonize(c) { \
- if (p_idx >= max_buffer_len) { \
- *phoned_word = erealloc(*phoned_word, max_buffer_len + 2); \
- max_buffer_len += 2; \
- } \
- (*phoned_word)[p_idx++] = c; \
- }
-/* Slap a null character on the end of the phoned word */
-#define End_Phoned_Word {(*phoned_word)[p_idx] = '\0';}
-/* How long is the phoned word? */
-#define Phone_Len (p_idx)
-
-/* Note is a letter is a 'break' in the word */
-#define Isbreak(c) (!isalpha(c))
-
-/* {{{ metaphone
- */
-static int metaphone(char *word, int word_len, int max_phonemes, char **phoned_word, int traditional)
-{
- int w_idx = 0; /* point in the phonization we're at. */
- int p_idx = 0; /* end of the phoned phrase */
- int max_buffer_len = 0; /* maximum length of the destination buffer */
-
-/*-- Parameter checks --*/
- /* Negative phoneme length is meaningless */
-
- if (max_phonemes < 0)
- return -1;
-
- /* Empty/null string is meaningless */
- /* Overly paranoid */
- /* assert(word != NULL && word[0] != '\0'); */
-
- if (word == NULL)
- return -1;
-
-/*-- Allocate memory for our phoned_phrase --*/
- if (max_phonemes == 0) { /* Assume largest possible */
- max_buffer_len = word_len;
- *phoned_word = safe_emalloc(sizeof(char), word_len, 1);
- } else {
- max_buffer_len = max_phonemes;
- *phoned_word = safe_emalloc(sizeof(char), max_phonemes, 1);
- }
-
-
-/*-- The first phoneme has to be processed specially. --*/
- /* Find our first letter */
- for (; !isalpha(Curr_Letter); w_idx++) {
- /* On the off chance we were given nothing but crap... */
- if (Curr_Letter == '\0') {
- End_Phoned_Word
- return SUCCESS; /* For testing */
- }
- }
-
- switch (Curr_Letter) {
- /* AE becomes E */
- case 'A':
- if (Next_Letter == 'E') {
- Phonize('E');
- w_idx += 2;
- }
- /* Remember, preserve vowels at the beginning */
- else {
- Phonize('A');
- w_idx++;
- }
- break;
- /* [GKP]N becomes N */
- case 'G':
- case 'K':
- case 'P':
- if (Next_Letter == 'N') {
- Phonize('N');
- w_idx += 2;
- }
- break;
- /* WH becomes H,
- WR becomes R
- W if followed by a vowel */
- case 'W':
- if (Next_Letter == 'H' ||
- Next_Letter == 'R') {
- Phonize(Next_Letter);
- w_idx += 2;
- } else if (isvowel(Next_Letter)) {
- Phonize('W');
- w_idx += 2;
- }
- /* else ignore */
- break;
- /* X becomes S */
- case 'X':
- Phonize('S');
- w_idx++;
- break;
- /* Vowels are kept */
- /* We did A already
- case 'A':
- case 'a':
- */
- case 'E':
- case 'I':
- case 'O':
- case 'U':
- Phonize(Curr_Letter);
- w_idx++;
- break;
- default:
- /* do nothing */
- break;
- }
-
-
-
- /* On to the metaphoning */
- for (; Curr_Letter != '\0' &&
- (max_phonemes == 0 || Phone_Len < max_phonemes);
- w_idx++) {
- /* How many letters to skip because an eariler encoding handled
- * multiple letters */
- unsigned short int skip_letter = 0;
-
-
- /* THOUGHT: It would be nice if, rather than having things like...
- * well, SCI. For SCI you encode the S, then have to remember
- * to skip the C. So the phonome SCI invades both S and C. It would
- * be better, IMHO, to skip the C from the S part of the encoding.
- * Hell, I'm trying it.
- */
-
- /* Ignore non-alphas */
- if (!isalpha(Curr_Letter))
- continue;
-
- /* Drop duplicates, except CC */
- if (Curr_Letter == Prev_Letter &&
- Curr_Letter != 'C')
- continue;
-
- switch (Curr_Letter) {
- /* B -> B unless in MB */
- case 'B':
- if (Prev_Letter != 'M')
- Phonize('B');
- break;
- /* 'sh' if -CIA- or -CH, but not SCH, except SCHW.
- * (SCHW is handled in S)
- * S if -CI-, -CE- or -CY-
- * dropped if -SCI-, SCE-, -SCY- (handed in S)
- * else K
- */
- case 'C':
- if (MAKESOFT(Next_Letter)) { /* C[IEY] */
- if (After_Next_Letter == 'A' &&
- Next_Letter == 'I') { /* CIA */
- Phonize(SH);
- }
- /* SC[IEY] */
- else if (Prev_Letter == 'S') {
- /* Dropped */
- } else {
- Phonize('S');
- }
- } else if (Next_Letter == 'H') {
- if ((!traditional) && (After_Next_Letter == 'R' || Prev_Letter == 'S')) { /* Christ, School */
- Phonize('K');
- } else {
- Phonize(SH);
- }
- skip_letter++;
- } else {
- Phonize('K');
- }
- break;
- /* J if in -DGE-, -DGI- or -DGY-
- * else T
- */
- case 'D':
- if (Next_Letter == 'G' &&
- MAKESOFT(After_Next_Letter)) {
- Phonize('J');
- skip_letter++;
- } else
- Phonize('T');
- break;
- /* F if in -GH and not B--GH, D--GH, -H--GH, -H---GH
- * else dropped if -GNED, -GN,
- * else dropped if -DGE-, -DGI- or -DGY- (handled in D)
- * else J if in -GE-, -GI, -GY and not GG
- * else K
- */
- case 'G':
- if (Next_Letter == 'H') {
- if (!(NOGHTOF(Look_Back_Letter(3)) ||
- Look_Back_Letter(4) == 'H')) {
- Phonize('F');
- skip_letter++;
- } else {
- /* silent */
- }
- } else if (Next_Letter == 'N') {
- if (Isbreak(After_Next_Letter) ||
- (After_Next_Letter == 'E' &&
- Look_Ahead_Letter(3) == 'D')) {
- /* dropped */
- } else
- Phonize('K');
- } else if (MAKESOFT(Next_Letter) &&
- Prev_Letter != 'G') {
- Phonize('J');
- } else {
- Phonize('K');
- }
- break;
- /* H if before a vowel and not after C,G,P,S,T */
- case 'H':
- if (isvowel(Next_Letter) &&
- !AFFECTH(Prev_Letter))
- Phonize('H');
- break;
- /* dropped if after C
- * else K
- */
- case 'K':
- if (Prev_Letter != 'C')
- Phonize('K');
- break;
- /* F if before H
- * else P
- */
- case 'P':
- if (Next_Letter == 'H') {
- Phonize('F');
- } else {
- Phonize('P');
- }
- break;
- /* K
- */
- case 'Q':
- Phonize('K');
- break;
- /* 'sh' in -SH-, -SIO- or -SIA- or -SCHW-
- * else S
- */
- case 'S':
- if (Next_Letter == 'I' &&
- (After_Next_Letter == 'O' ||
- After_Next_Letter == 'A')) {
- Phonize(SH);
- } else if (Next_Letter == 'H') {
- Phonize(SH);
- skip_letter++;
- } else if ((!traditional) && (Next_Letter == 'C' && Look_Ahead_Letter(2) == 'H' && Look_Ahead_Letter(3) == 'W')) {
- Phonize(SH);
- skip_letter += 2;
- } else {
- Phonize('S');
- }
- break;
- /* 'sh' in -TIA- or -TIO-
- * else 'th' before H
- * else T
- */
- case 'T':
- if (Next_Letter == 'I' &&
- (After_Next_Letter == 'O' ||
- After_Next_Letter == 'A')) {
- Phonize(SH);
- } else if (Next_Letter == 'H') {
- Phonize(TH);
- skip_letter++;
- } else {
- Phonize('T');
- }
- break;
- /* F */
- case 'V':
- Phonize('F');
- break;
- /* W before a vowel, else dropped */
- case 'W':
- if (isvowel(Next_Letter))
- Phonize('W');
- break;
- /* KS */
- case 'X':
- Phonize('K');
- Phonize('S');
- break;
- /* Y if followed by a vowel */
- case 'Y':
- if (isvowel(Next_Letter))
- Phonize('Y');
- break;
- /* S */
- case 'Z':
- Phonize('S');
- break;
- /* No transformation */
- case 'F':
- case 'J':
- case 'L':
- case 'M':
- case 'N':
- case 'R':
- Phonize(Curr_Letter);
- break;
- default:
- /* nothing */
- break;
- } /* END SWITCH */
-
- w_idx += skip_letter;
- } /* END FOR */
-
- End_Phoned_Word;
-
- return 0;
-} /* END metaphone */
-/* }}} */
-
-/*
- * 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/standard/microtime.c b/ext/standard/microtime.c
deleted file mode 100644
index 801c73afba..0000000000
--- a/ext/standard/microtime.c
+++ /dev/null
@@ -1,173 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Paul Panotzki - Bunyip Information Systems |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-#include "php.h"
-
-#ifdef HAVE_SYS_TYPES_H
-#include <sys/types.h>
-#endif
-#ifdef PHP_WIN32
-#include "win32/time.h"
-#elif defined(NETWARE)
-#ifdef NEW_LIBC
-#include <sys/timeval.h>
-#else
-#include "netware/time_nw.h"
-#endif
-#else
-#include <sys/time.h>
-#endif
-#ifdef HAVE_SYS_RESOURCE_H
-#include <sys/resource.h>
-#endif
-#ifdef HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-#include <stdlib.h>
-#include <string.h>
-#include <stdio.h>
-#include <errno.h>
-
-#include "microtime.h"
-
-#define NUL '\0'
-#define MICRO_IN_SEC 1000000.00
-#define SEC_IN_MIN 60
-
-#ifdef HAVE_GETTIMEOFDAY
-/* {{{ proto mixed microtime([bool get_as_float])
- Returns either a string or a float containing the current time in seconds and microseconds */
-PHP_FUNCTION(microtime)
-{
- struct timeval tp;
- long sec = 0L;
- double msec = 0.0;
- zend_bool get_as_float = 0;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|b", &get_as_float) == FAILURE) {
- return;
- }
-
- if (gettimeofday((struct timeval *) &tp, (NUL)) == 0) {
- msec = (double) (tp.tv_usec / MICRO_IN_SEC);
- sec = tp.tv_sec;
-
- if (msec >= 1.0) msec -= (long) msec;
- if (get_as_float == 0) {
- char ret[100];
-
- snprintf(ret, 100, "%.8f %ld", msec, sec);
- RETURN_STRING(ret,1);
- } else {
- RETURN_DOUBLE((double) (sec + msec));
- }
- } else {
- RETURN_FALSE;
- }
-
-}
-/* }}} */
-#endif
-
-/* {{{ proto array gettimeofday(void)
- Returns the current time as array */
-#ifdef HAVE_GETTIMEOFDAY
-PHP_FUNCTION(gettimeofday)
-{
- struct timeval tp;
- struct timezone tz;
-
- memset(&tp, 0, sizeof(tp));
- memset(&tz, 0, sizeof(tz));
- if(gettimeofday(&tp, &tz) == 0) {
- array_init(return_value);
- add_assoc_long(return_value, "sec", tp.tv_sec);
- add_assoc_long(return_value, "usec", tp.tv_usec);
-#ifdef PHP_WIN32
- add_assoc_long(return_value, "minuteswest", tz.tz_minuteswest/SEC_IN_MIN);
-#else
- add_assoc_long(return_value, "minuteswest", tz.tz_minuteswest);
-#endif
- add_assoc_long(return_value, "dsttime", tz.tz_dsttime);
- return;
- } else {
- RETURN_FALSE;
- }
-}
-#endif
-/* }}} */
-
-#ifdef HAVE_GETRUSAGE
-/* {{{ proto array getrusage([int who])
- Returns an array of usage statistics */
-PHP_FUNCTION(getrusage)
-{
- struct rusage usg;
- int ac = ZEND_NUM_ARGS();
- pval **pwho;
- int who = RUSAGE_SELF;
-
- if(ac == 1 &&
- zend_get_parameters_ex(ac, &pwho) != FAILURE) {
- convert_to_long_ex(pwho);
- if(Z_LVAL_PP(pwho) == 1)
- who = RUSAGE_CHILDREN;
- }
-
- memset(&usg, 0, sizeof(usg));
- if(getrusage(who, &usg) == -1) {
- RETURN_FALSE;
- }
-
- array_init(return_value);
-#define PHP_RUSAGE_PARA(a) \
- add_assoc_long(return_value, #a, usg.a)
-#if !defined( _OSD_POSIX) && !defined(__BEOS__) /* BS2000 has only a few fields in the rusage struct */
- PHP_RUSAGE_PARA(ru_oublock);
- PHP_RUSAGE_PARA(ru_inblock);
- PHP_RUSAGE_PARA(ru_msgsnd);
- PHP_RUSAGE_PARA(ru_msgrcv);
- PHP_RUSAGE_PARA(ru_maxrss);
- PHP_RUSAGE_PARA(ru_ixrss);
- PHP_RUSAGE_PARA(ru_idrss);
- PHP_RUSAGE_PARA(ru_minflt);
- PHP_RUSAGE_PARA(ru_majflt);
- PHP_RUSAGE_PARA(ru_nsignals);
- PHP_RUSAGE_PARA(ru_nvcsw);
- PHP_RUSAGE_PARA(ru_nivcsw);
-#endif /*_OSD_POSIX*/
- PHP_RUSAGE_PARA(ru_utime.tv_usec);
- PHP_RUSAGE_PARA(ru_utime.tv_sec);
- PHP_RUSAGE_PARA(ru_stime.tv_usec);
- PHP_RUSAGE_PARA(ru_stime.tv_sec);
-#undef PHP_RUSAGE_PARA
-}
-#endif /* HAVE_GETRUSAGE */
-
-/* }}} */
-
-/*
- * 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/standard/microtime.h b/ext/standard/microtime.h
deleted file mode 100644
index c1920963b8..0000000000
--- a/ext/standard/microtime.h
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Paul Panotzki - Bunyip Information Systems |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifndef MICROTIME_H
-#define MICROTIME_H
-
-#ifdef HAVE_GETTIMEOFDAY
-PHP_FUNCTION(microtime);
-PHP_FUNCTION(gettimeofday);
-#endif
-#ifdef HAVE_GETRUSAGE
-PHP_FUNCTION(getrusage);
-#endif
-
-#endif /* MICROTIME_H */
diff --git a/ext/standard/pack.c b/ext/standard/pack.c
deleted file mode 100644
index 0376a7316a..0000000000
--- a/ext/standard/pack.c
+++ /dev/null
@@ -1,918 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Chris Schneider <cschneid@relog.ch> |
- +----------------------------------------------------------------------+
- */
-/* $Id$ */
-
-#include "php.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <errno.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <fcntl.h>
-#ifdef PHP_WIN32
-#define O_RDONLY _O_RDONLY
-#include "win32/param.h"
-#elif defined(NETWARE)
-#ifdef USE_WINSOCK
-/*#include <ws2nlm.h>*/
-#include <novsock2.h>
-#else
-#include <sys/socket.h>
-#endif
-#ifdef NEW_LIBC
-#include <sys/param.h>
-#else
-#include "netware/param.h"
-#endif
-#else
-#include <sys/param.h>
-#endif
-#include "ext/standard/head.h"
-#include "safe_mode.h"
-#include "php_string.h"
-#include "pack.h"
-#if HAVE_PWD_H
-#ifdef PHP_WIN32
-#include "win32/pwd.h"
-#elif defined(NETWARE)
-#include "netware/pwd.h"
-#else
-#include <pwd.h>
-#endif
-#endif
-#include "fsock.h"
-#if HAVE_NETINET_IN_H
-#include <netinet/in.h>
-#endif
-
-/* Whether machine is little endian */
-char machine_little_endian;
-
-/* Mapping of byte from char (8bit) to long for machine endian */
-static int byte_map[1];
-
-/* Mappings of bytes from int (machine dependant) to int for machine endian */
-static int int_map[sizeof(int)];
-
-/* Mappings of bytes from shorts (16bit) for all endian environments */
-static int machine_endian_short_map[2];
-static int big_endian_short_map[2];
-static int little_endian_short_map[2];
-
-/* Mappings of bytes from longs (32bit) for all endian environments */
-static int machine_endian_long_map[4];
-static int big_endian_long_map[4];
-static int little_endian_long_map[4];
-
-/* {{{ php_pack
- */
-static void php_pack(zval **val, int size, int *map, char *output)
-{
- int i;
- char *v;
-
- convert_to_long_ex(val);
- v = (char *) &Z_LVAL_PP(val);
-
- for (i = 0; i < size; i++) {
- *output++ = v[map[i]];
- }
-}
-/* }}} */
-
-/* pack() idea stolen from Perl (implemented formats behave the same as there)
- * Implemented formats are A, a, h, H, c, C, s, S, i, I, l, L, n, N, f, d, x, X, @.
- */
-/* {{{ proto string pack(string format, mixed arg1 [, mixed arg2 [, mixed ...]])
- Takes one or more arguments and packs them into a binary string according to the format argument */
-PHP_FUNCTION(pack)
-{
- zval ***argv;
- int argc, i;
- int currentarg;
- char *format;
- int formatlen;
- char *formatcodes;
- int *formatargs;
- int formatcount = 0;
- int outputpos = 0, outputsize = 0;
- char *output;
-
- argc = ZEND_NUM_ARGS();
-
- if (argc < 1) {
- WRONG_PARAM_COUNT;
- }
-
- argv = safe_emalloc(argc, sizeof(zval **), 0);
-
- if (zend_get_parameters_array_ex(argc, argv) == FAILURE) {
- efree(argv);
- WRONG_PARAM_COUNT;
- }
-
- convert_to_string_ex(argv[0]);
- format = Z_STRVAL_PP(argv[0]);
- formatlen = Z_STRLEN_PP(argv[0]);
-
- /* We have a maximum of <formatlen> format codes to deal with */
- formatcodes = safe_emalloc(formatlen, sizeof(*formatcodes), 0);
- formatargs = safe_emalloc(formatlen, sizeof(*formatargs), 0);
- currentarg = 1;
-
- /* Preprocess format into formatcodes and formatargs */
- for (i = 0; i < formatlen; formatcount++) {
- char code = format[i++];
- int arg = 1;
-
- /* Handle format arguments if any */
- if (i < formatlen) {
- char c = format[i];
-
- if (c == '*') {
- arg = -1;
- i++;
- }
- else if (c >= '0' && c <= '9') {
- arg = atoi(&format[i]);
-
- while (format[i] >= '0' && format[i] <= '9' && i < formatlen) {
- i++;
- }
- }
- }
-
- /* Handle special arg '*' for all codes and check argv overflows */
- switch ((int) code) {
- /* Never uses any args */
- case 'x':
- case 'X':
- case '@':
- if (arg < 0) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Type %c: '*' ignored", code);
- arg = 1;
- }
- break;
-
- /* Always uses one arg */
- case 'a':
- case 'A':
- case 'h':
- case 'H':
- if (currentarg >= argc) {
- efree(argv);
- efree(formatcodes);
- efree(formatargs);
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Type %c: not enough arguments", code);
- RETURN_FALSE;
- }
-
- if (arg < 0) {
- arg = Z_STRLEN_PP(argv[currentarg]);
- }
-
- currentarg++;
- break;
-
- /* Use as many args as specified */
- case 'c':
- case 'C':
- case 's':
- case 'S':
- case 'i':
- case 'I':
- case 'l':
- case 'L':
- case 'n':
- case 'N':
- case 'v':
- case 'V':
- case 'f':
- case 'd':
- if (arg < 0) {
- arg = argc - currentarg;
- }
-
- currentarg += arg;
-
- if (currentarg > argc) {
- efree(argv);
- efree(formatcodes);
- efree(formatargs);
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Type %c: too few arguments", code);
- RETURN_FALSE;
- }
- break;
-
- default:
- efree(argv);
- efree(formatcodes);
- efree(formatargs);
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Type %c: unknown format code", code);
- RETURN_FALSE;
- }
-
- formatcodes[formatcount] = code;
- formatargs[formatcount] = arg;
- }
-
- if (currentarg < argc) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "%d arguments unused", (argc - currentarg));
- }
-
- /* Calculate output length and upper bound while processing*/
- for (i = 0; i < formatcount; i++) {
- int code = (int) formatcodes[i];
- int arg = formatargs[i];
-
- switch ((int) code) {
- case 'h':
- case 'H':
- outputpos += (arg + 1) / 2; /* 4 bit per arg */
- break;
-
- case 'a':
- case 'A':
- case 'c':
- case 'C':
- case 'x':
- outputpos += arg; /* 8 bit per arg */
- break;
-
- case 's':
- case 'S':
- case 'n':
- case 'v':
- outputpos += arg * 2; /* 16 bit per arg */
- break;
-
- case 'i':
- case 'I':
- outputpos += arg * sizeof(int);
- break;
-
- case 'l':
- case 'L':
- case 'N':
- case 'V':
- outputpos += arg * 4; /* 32 bit per arg */
- break;
-
- case 'f':
- outputpos += arg * sizeof(float);
- break;
-
- case 'd':
- outputpos += arg * sizeof(double);
- break;
-
- case 'X':
- outputpos -= arg;
-
- if (outputpos < 0) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Type %c: outside of string", code);
- outputpos = 0;
- }
- break;
-
- case '@':
- outputpos = arg;
- break;
- }
-
- if (outputsize < outputpos) {
- outputsize = outputpos;
- }
- }
-
- output = emalloc(outputsize + 1);
- outputpos = 0;
- currentarg = 1;
-
- /* Do actual packing */
- for (i = 0; i < formatcount; i++) {
- int code = (int) formatcodes[i];
- int arg = formatargs[i];
- zval **val;
-
- switch ((int) code) {
- case 'a':
- case 'A':
- memset(&output[outputpos], (code == 'a') ? '\0' : ' ', arg);
- val = argv[currentarg++];
- convert_to_string_ex(val);
- memcpy(&output[outputpos], Z_STRVAL_PP(val),
- (Z_STRLEN_PP(val) < arg) ? Z_STRLEN_PP(val) : arg);
- outputpos += arg;
- break;
-
- case 'h':
- case 'H': {
- int nibbleshift = (code == 'h') ? 0 : 4;
- int first = 1;
- char *v;
-
- val = argv[currentarg++];
- convert_to_string_ex(val);
- v = Z_STRVAL_PP(val);
- outputpos--;
- if(arg > Z_STRLEN_PP(val)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Type %c: not enough characters in string", code);
- arg = Z_STRLEN_PP(val);
- }
-
- while (arg-- > 0) {
- char n = *v++;
-
- if (n >= '0' && n <= '9') {
- n -= '0';
- } else if (n >= 'A' && n <= 'F') {
- n -= ('A' - 10);
- } else if (n >= 'a' && n <= 'f') {
- n -= ('a' - 10);
- } else {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Type %c: illegal hex digit %c", code, n);
- n = 0;
- }
-
- if (first--) {
- output[++outputpos] = 0;
- } else {
- first = 1;
- }
-
- output[outputpos] |= (n << nibbleshift);
- nibbleshift = (nibbleshift + 4) & 7;
- }
-
- outputpos++;
- break;
- }
-
- case 'c':
- case 'C':
- while (arg-- > 0) {
- php_pack(argv[currentarg++], 1, byte_map, &output[outputpos]);
- outputpos++;
- }
- break;
-
- case 's':
- case 'S':
- case 'n':
- case 'v': {
- int *map = machine_endian_short_map;
-
- if (code == 'n') {
- map = big_endian_short_map;
- } else if (code == 'v') {
- map = little_endian_short_map;
- }
-
- while (arg-- > 0) {
- php_pack(argv[currentarg++], 2, map, &output[outputpos]);
- outputpos += 2;
- }
- break;
- }
-
- case 'i':
- case 'I':
- while (arg-- > 0) {
- php_pack(argv[currentarg++], sizeof(int), int_map, &output[outputpos]);
- outputpos += sizeof(int);
- }
- break;
-
- case 'l':
- case 'L':
- case 'N':
- case 'V': {
- int *map = machine_endian_long_map;
-
- if (code == 'N') {
- map = big_endian_long_map;
- } else if (code == 'V') {
- map = little_endian_long_map;
- }
-
- while (arg-- > 0) {
- php_pack(argv[currentarg++], 4, map, &output[outputpos]);
- outputpos += 4;
- }
- break;
- }
-
- case 'f': {
- float v;
-
- while (arg-- > 0) {
- val = argv[currentarg++];
- convert_to_double_ex(val);
- v = (float) Z_DVAL_PP(val);
- memcpy(&output[outputpos], &v, sizeof(v));
- outputpos += sizeof(v);
- }
- break;
- }
-
- case 'd': {
- double v;
-
- while (arg-- > 0) {
- val = argv[currentarg++];
- convert_to_double_ex(val);
- v = (double) Z_DVAL_PP(val);
- memcpy(&output[outputpos], &v, sizeof(v));
- outputpos += sizeof(v);
- }
- break;
- }
-
- case 'x':
- memset(&output[outputpos], '\0', arg);
- outputpos += arg;
- break;
-
- case 'X':
- outputpos -= arg;
-
- if (outputpos < 0) {
- outputpos = 0;
- }
- break;
-
- case '@':
- if (arg > outputpos) {
- memset(&output[outputpos], '\0', arg - outputpos);
- }
- outputpos = arg;
- break;
- }
- }
-
- efree(argv);
- efree(formatcodes);
- efree(formatargs);
- output[outputpos] = '\0';
- RETVAL_STRINGL(output, outputpos, 1);
- efree(output);
-}
-/* }}} */
-
-/* {{{ php_unpack
- */
-static long php_unpack(char *data, int size, int issigned, int *map)
-{
- long result;
- char *cresult = (char *) &result;
- int i;
-
- result = issigned ? -1 : 0;
-
- for (i = 0; i < size; i++) {
- cresult[map[i]] = *data++;
- }
-
- return result;
-}
-/* }}} */
-
-/* unpack() is based on Perl's unpack(), but is modified a bit from there.
- * Rather than depending on error-prone ordered lists or syntactically
- * unpleasant pass-by-reference, we return an object with named paramters
- * (like *_fetch_object()). Syntax is "f[repeat]name/...", where "f" is the
- * formatter char (like pack()), "[repeat]" is the optional repeater argument,
- * and "name" is the name of the variable to use.
- * Example: "c2chars/nints" will return an object with fields
- * chars1, chars2, and ints.
- * Numeric pack types will return numbers, a and A will return strings,
- * f and d will return doubles.
- * Implemented formats are A, a, h, H, c, C, s, S, i, I, l, L, n, N, f, d, x, X, @.
- */
-/* {{{ proto array unpack(string format, string input)
- Unpack binary string into named array elements according to format argument */
-PHP_FUNCTION(unpack)
-{
- zval **formatarg;
- zval **inputarg;
- char *format;
- char *input;
- int formatlen;
- int inputpos, inputlen;
- int i;
-
- if (ZEND_NUM_ARGS() != 2 ||
- zend_get_parameters_ex(2, &formatarg, &inputarg) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_string_ex(formatarg);
- convert_to_string_ex(inputarg);
-
- format = Z_STRVAL_PP(formatarg);
- formatlen = Z_STRLEN_PP(formatarg);
- input = Z_STRVAL_PP(inputarg);
- inputlen = Z_STRLEN_PP(inputarg);
- inputpos = 0;
-
- array_init(return_value);
-
- while (formatlen-- > 0) {
- char type = *(format++);
- char c;
- int arg = 1;
- char *name;
- int namelen;
- int size=0;
-
- /* Handle format arguments if any */
- if (formatlen > 0) {
- c = *format;
-
- if (c >= '0' && c <= '9') {
- arg = atoi(format);
-
- while (formatlen > 0 && *format >= '0' && *format <= '9') {
- format++;
- formatlen--;
- }
- } else if (c == '*') {
- arg = -1;
- format++;
- formatlen--;
- }
- }
-
- /* Get of new value in array */
- name = format;
-
- while (formatlen > 0 && *format != '/') {
- formatlen--;
- format++;
- }
-
- namelen = format - name;
-
- if (namelen > 200)
- namelen = 200;
-
- switch ((int) type) {
- /* Never use any input */
- case 'X':
- size = -1;
- break;
-
- case '@':
- size = 0;
- break;
-
- case 'a':
- case 'A':
- size = arg;
- arg = 1;
- break;
-
- case 'h':
- case 'H':
- size = (arg > 0) ? arg / 2 : arg;
- arg = 1;
- break;
-
- /* Use 1 byte of input */
- case 'c':
- case 'C':
- case 'x':
- size = 1;
- break;
-
- /* Use 2 bytes of input */
- case 's':
- case 'S':
- case 'n':
- case 'v':
- size = 2;
- break;
-
- /* Use sizeof(int) bytes of input */
- case 'i':
- case 'I':
- size = sizeof(int);
- break;
-
- /* Use 4 bytes of input */
- case 'l':
- case 'L':
- case 'N':
- case 'V':
- size = 4;
- break;
-
- /* Use sizeof(float) bytes of input */
- case 'f':
- size = sizeof(float);
- break;
-
- /* Use sizeof(double) bytes of input */
- case 'd':
- size = sizeof(double);
- break;
- }
-
- /* Do actual unpacking */
- for (i = 0; i != arg; i++ ) {
- /* Space for name + number, safe as namelen is ensured <= 200 */
- char n[256];
-
- if (arg != 1 || namelen == 0) {
- /* Need to add element number to name */
- sprintf(n, "%.*s%d", namelen, name, i + 1);
- } else {
- /* Truncate name to next format code or end of string */
- sprintf(n, "%.*s", namelen, name);
- }
-
- if ((inputpos + size) <= inputlen) {
- switch ((int) type) {
- case 'a':
- case 'A': {
- char pad = (type == 'a') ? '\0' : ' ';
- int len = inputlen - inputpos; /* Remaining string */
-
- /* If size was given take minimum of len and size */
- if ((size >= 0) && (len > size)) {
- len = size;
- }
-
- size = len;
-
- /* Remove padding chars from unpacked data */
- while (--len >= 0) {
- if (input[inputpos + len] != pad)
- break;
- }
-
- add_assoc_stringl(return_value, n, &input[inputpos], len + 1, 1);
- break;
- }
-
- case 'h':
- case 'H': {
- int len = (inputlen - inputpos) * 2; /* Remaining */
- int nibbleshift = (type == 'h') ? 0 : 4;
- int first = 1;
- char *buf;
- int ipos, opos;
-
- /* If size was given take minimum of len and size */
- if (size >= 0 && len > (size * 2)) {
- len = size * 2;
- }
-
- buf = emalloc(len + 1);
-
- for (ipos = opos = 0; opos < len; opos++) {
- char c = (input[inputpos + ipos] >> nibbleshift) & 0xf;
-
- if (c < 10) {
- c += '0';
- } else {
- c += 'a' - 10;
- }
-
- buf[opos] = c;
- nibbleshift = (nibbleshift + 4) & 7;
-
- if (first-- == 0) {
- ipos++;
- first = 1;
- }
- }
-
- buf[len] = '\0';
- add_assoc_stringl(return_value, n, buf, len, 1);
- efree(buf);
- break;
- }
-
- case 'c':
- case 'C': {
- int issigned = (type == 'c') ? (input[inputpos] & 0x80) : 0;
- long v = php_unpack(&input[inputpos], 1, issigned, byte_map);
- add_assoc_long(return_value, n, v);
- break;
- }
-
- case 's':
- case 'S':
- case 'n':
- case 'v': {
- long v;
- int issigned = 0;
- int *map = machine_endian_short_map;
-
- if (type == 's') {
- issigned = input[inputpos + (machine_little_endian ? 1 : 0)] & 0x80;
- } else if (type == 'n') {
- map = big_endian_short_map;
- } else if (type == 'v') {
- map = little_endian_short_map;
- }
-
- v = php_unpack(&input[inputpos], 2, issigned, map);
- add_assoc_long(return_value, n, v);
- break;
- }
-
- case 'i':
- case 'I': {
- long v;
- int issigned = 0;
-
- if (type == 'i') {
- issigned = input[inputpos + (machine_little_endian ? (sizeof(int) - 1) : 0)] & 0x80;
- }
-
- v = php_unpack(&input[inputpos], sizeof(int), issigned, int_map);
- add_assoc_long(return_value, n, v);
- break;
- }
-
- case 'l':
- case 'L':
- case 'N':
- case 'V': {
- int issigned = 0;
- int *map = machine_endian_long_map;
- long v;
-
- if (type == 'l') {
- issigned = input[inputpos + (machine_little_endian ? 3 : 0)] & 0x80;
- } else if (type == 'N') {
- map = big_endian_long_map;
- } else if (type == 'V') {
- map = little_endian_long_map;
- }
-
- v = php_unpack(&input[inputpos], 4, issigned, map);
- add_assoc_long(return_value, n, v);
- break;
- }
-
- case 'f': {
- float v;
-
- memcpy(&v, &input[inputpos], sizeof(float));
- add_assoc_double(return_value, n, (double)v);
- break;
- }
-
- case 'd': {
- double v;
-
- memcpy(&v, &input[inputpos], sizeof(double));
- add_assoc_double(return_value, n, v);
- break;
- }
-
- case 'x':
- /* Do nothing with input, just skip it */
- break;
-
- case 'X':
- if (inputpos < size) {
- inputpos = -size;
- i = arg - 1; /* Break out of for loop */
-
- if (arg >= 0) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Type %c: outside of string", type);
- }
- }
- break;
-
- case '@':
- if (arg <= inputlen) {
- inputpos = arg;
- } else {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Type %c: outside of string", type);
- }
-
- i = arg - 1; /* Done, break out of for loop */
- break;
- }
-
- inputpos += size;
- } else if (arg < 0) {
- /* Reached end of input for '*' repeater */
- break;
- } else {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Type %c: not enough input, need %d, have %d", type, size, inputlen - inputpos);
- zval_dtor(return_value);
- RETURN_FALSE;
- }
- }
-
- formatlen--; /* Skip '/' separator, does no harm if inputlen == 0 */
- format++;
- }
-}
-/* }}} */
-
-/* {{{ PHP_MINIT_FUNCTION
- */
-PHP_MINIT_FUNCTION(pack)
-{
- int machine_endian_check = 1;
- int i;
-
- machine_little_endian = ((char *)&machine_endian_check)[0];
-
- if (machine_little_endian) {
- /* Where to get lo to hi bytes from */
- byte_map[0] = 0;
-
- for (i = 0; i < (int)sizeof(int); i++) {
- int_map[i] = i;
- }
-
- machine_endian_short_map[0] = 0;
- machine_endian_short_map[1] = 1;
- big_endian_short_map[0] = 1;
- big_endian_short_map[1] = 0;
- little_endian_short_map[0] = 0;
- little_endian_short_map[1] = 1;
-
- machine_endian_long_map[0] = 0;
- machine_endian_long_map[1] = 1;
- machine_endian_long_map[2] = 2;
- machine_endian_long_map[3] = 3;
- big_endian_long_map[0] = 3;
- big_endian_long_map[1] = 2;
- big_endian_long_map[2] = 1;
- big_endian_long_map[3] = 0;
- little_endian_long_map[0] = 0;
- little_endian_long_map[1] = 1;
- little_endian_long_map[2] = 2;
- little_endian_long_map[3] = 3;
- }
- else {
- zval val;
- int size = sizeof(Z_LVAL(val));
- Z_LVAL(val)=0; /*silence a warning*/
-
- /* Where to get hi to lo bytes from */
- byte_map[0] = size - 1;
-
- for (i = 0; i < (int)sizeof(int); i++) {
- int_map[i] = size - (sizeof(int) - i);
- }
-
- machine_endian_short_map[0] = size - 2;
- machine_endian_short_map[1] = size - 1;
- big_endian_short_map[0] = size - 2;
- big_endian_short_map[1] = size - 1;
- little_endian_short_map[0] = size - 1;
- little_endian_short_map[1] = size - 2;
-
- machine_endian_long_map[0] = size - 4;
- machine_endian_long_map[1] = size - 3;
- machine_endian_long_map[2] = size - 2;
- machine_endian_long_map[3] = size - 1;
- big_endian_long_map[0] = size - 4;
- big_endian_long_map[1] = size - 3;
- big_endian_long_map[2] = size - 2;
- big_endian_long_map[3] = size - 1;
- little_endian_long_map[0] = size - 1;
- little_endian_long_map[1] = size - 2;
- little_endian_long_map[2] = size - 3;
- little_endian_long_map[3] = size - 4;
- }
-
- return SUCCESS;
-}
-/* }}} */
-
-/*
- * 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/standard/pack.h b/ext/standard/pack.h
deleted file mode 100644
index 6b960afbef..0000000000
--- a/ext/standard/pack.h
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Rasmus Lerdorf <rasmus@lerdorf.on.ca> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifndef PACK_H
-#define PACK_H
-
-PHP_MINIT_FUNCTION(pack);
-PHP_FUNCTION(pack);
-PHP_FUNCTION(unpack);
-
-#endif /* PACK_H */
diff --git a/ext/standard/pageinfo.c b/ext/standard/pageinfo.c
deleted file mode 100644
index 9f02be2be5..0000000000
--- a/ext/standard/pageinfo.c
+++ /dev/null
@@ -1,196 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Jim Winstead <jimw@php.net> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#include "php.h"
-#include "pageinfo.h"
-#include "SAPI.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-#if HAVE_PWD_H
-#ifdef PHP_WIN32
-#include "win32/pwd.h"
-#elif defined(NETWARE)
-#ifdef ZTS
-extern int basic_globals_id;
-#endif
-#include "netware/pwd.h"
-#else
-#include <pwd.h>
-#endif
-#endif
-#if HAVE_GRP_H
-# ifdef PHP_WIN32
-# include "win32/grp.h"
-# else
-# include <grp.h>
-# endif
-#endif
-#ifdef PHP_WIN32
-#undef getgid
-#define getgroups(a, b) 0
-#define getgid() 1
-#define getuid() 1
-#endif
-#if HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-#include <sys/stat.h>
-#include <sys/types.h>
-#ifdef PHP_WIN32
-#include <process.h>
-#endif
-
-#include "ext/standard/basic_functions.h"
-
-/* {{{ php_statpage
- */
-PHPAPI void php_statpage(TSRMLS_D)
-{
-#if defined(NETWARE) && defined(CLIB_STAT_PATCH)
- struct stat_libc *pstat;
-#else
- struct stat *pstat;
-#endif
-
- pstat = sapi_get_stat(TSRMLS_C);
-
- if (BG(page_uid)==-1 || BG(page_gid)==-1) {
- if(pstat) {
- BG(page_uid) = pstat->st_uid;
- BG(page_gid) = pstat->st_gid;
- BG(page_inode) = pstat->st_ino;
-#if defined(NETWARE) && defined(NEW_LIBC)
- BG(page_mtime) = (pstat->st_mtime).tv_nsec;
-#else
- BG(page_mtime) = pstat->st_mtime;
-#endif
- } else { /* handler for situations where there is no source file, ex. php -r */
- BG(page_uid) = getuid();
- BG(page_gid) = getgid();
- }
- }
-}
-/* }}} */
-
-/* {{{ php_getuid
- */
-long php_getuid(void)
-{
- TSRMLS_FETCH();
-
- php_statpage(TSRMLS_C);
- return (BG(page_uid));
-}
-/* }}} */
-
-long php_getgid(void)
-{
- TSRMLS_FETCH();
-
- php_statpage(TSRMLS_C);
- return (BG(page_gid));
-}
-
-/* {{{ proto int getmyuid(void)
- Get PHP script owner's UID */
-PHP_FUNCTION(getmyuid)
-{
- long uid;
-
- uid = php_getuid();
- if (uid < 0) {
- RETURN_FALSE;
- } else {
- RETURN_LONG(uid);
- }
-}
-/* }}} */
-
-/* {{{ proto int getmygid(void)
- Get PHP script owner's GID */
-PHP_FUNCTION(getmygid)
-{
- long gid;
-
- gid = php_getgid();
- if (gid < 0) {
- RETURN_FALSE;
- } else {
- RETURN_LONG(gid);
- }
-}
-/* }}} */
-
-/* {{{ proto int getmypid(void)
- Get current process ID */
-PHP_FUNCTION(getmypid)
-{
- int pid;
-
- pid = getpid();
- if (pid < 0) {
- RETURN_FALSE;
- } else {
- RETURN_LONG((long) pid);
- }
-}
-/* }}} */
-
-/* {{{ proto int getmyinode(void)
- Get the inode of the current script being parsed */
-PHP_FUNCTION(getmyinode)
-{
- php_statpage(TSRMLS_C);
- if (BG(page_inode) < 0) {
- RETURN_FALSE;
- } else {
- RETURN_LONG(BG(page_inode));
- }
-}
-/* }}} */
-
-PHPAPI long php_getlastmod(TSRMLS_D)
-{
- php_statpage(TSRMLS_C);
- return BG(page_mtime);
-}
-
-/* {{{ proto int getlastmod(void)
- Get time of last page modification */
-PHP_FUNCTION(getlastmod)
-{
- long lm = php_getlastmod(TSRMLS_C);
- if (lm < 0) {
- RETURN_FALSE;
- } else {
- RETURN_LONG(lm);
- }
-}
-/* }}} */
-
-/*
- * 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/standard/pageinfo.h b/ext/standard/pageinfo.h
deleted file mode 100644
index f89c0b6e74..0000000000
--- a/ext/standard/pageinfo.h
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Jim Winstead <jimw@php.net> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifndef PAGEINFO_H
-#define PAGEINFO_H
-
-PHP_FUNCTION(getmyuid);
-PHP_FUNCTION(getmygid);
-PHP_FUNCTION(getmypid);
-PHP_FUNCTION(getmyinode);
-PHP_FUNCTION(getlastmod);
-
-PHPAPI void php_statpage(TSRMLS_D);
-PHPAPI long php_getlastmod(TSRMLS_D);
-extern long php_getuid(void);
-extern long php_getgid(void);
-
-#endif
diff --git a/ext/standard/parsedate.y b/ext/standard/parsedate.y
deleted file mode 100644
index 6776550d24..0000000000
--- a/ext/standard/parsedate.y
+++ /dev/null
@@ -1,1161 +0,0 @@
-%{
-/*
-** Originally written by Steven M. Bellovin <smb@research.att.com> while
-** at the University of North Carolina at Chapel Hill. Later tweaked by
-** a couple of people on Usenet. Completely overhauled by Rich $alz
-** <rsalz@bbn.com> and Jim Berets <jberets@bbn.com> in August, 1990.
-**
-** This code is in the public domain and has no copyright.
-*/
-
-/* $Id$ */
-
-#include "php.h"
-
-#ifdef PHP_WIN32
-#include <malloc.h>
-#endif
-
-#include <stdio.h>
-#include <sys/types.h>
-#include <time.h>
-#include <ctype.h>
-
-#ifdef HAVE_SYS_TIME_H
-# include <sys/time.h>
-#endif
-#ifdef PHP_WIN32
-# include "win32/time.h"
-#endif
-
-#include "php_parsedate.h"
-
-#if HAVE_STDLIB_H
-# include <stdlib.h> /* for `free'; used by Bison 1.27 */
-#endif
-
-#if defined(_HPUX_SOURCE)
-#include <alloca.h>
-#endif
-
-#if defined (STDC_HEADERS) || (!defined (isascii) && !defined (HAVE_ISASCII))
-# define IN_CTYPE_DOMAIN(c) 1
-#else
-# define IN_CTYPE_DOMAIN(c) isascii(c)
-#endif
-
-#define ISSPACE(c) (IN_CTYPE_DOMAIN (c) && isspace (c))
-#define ISALPHA(c) (IN_CTYPE_DOMAIN (c) && isalpha (c))
-#define ISUPPER(c) (IN_CTYPE_DOMAIN (c) && isupper (c))
-#define ISDIGIT_LOCALE(c) (IN_CTYPE_DOMAIN (c) && isdigit (c))
-
-/* ISDIGIT differs from ISDIGIT_LOCALE, as follows:
- - Its arg may be any int or unsigned int; it need not be an unsigned char.
- - It's guaranteed to evaluate its argument exactly once.
- - It's typically faster.
- Posix 1003.2-1992 section 2.5.2.1 page 50 lines 1556-1558 says that
- only '0' through '9' are digits. Prefer ISDIGIT to ISDIGIT_LOCALE unless
- it's important to use the locale's definition of `digit' even when the
- host does not conform to Posix. */
-#define ISDIGIT(c) ((unsigned) (c) - '0' <= 9)
-
-#if defined (STDC_HEADERS) || defined (USG)
-# include <string.h>
-#endif
-
-#if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 7)
-# define __attribute__(x)
-#endif
-
-#ifndef ATTRIBUTE_UNUSED
-# define ATTRIBUTE_UNUSED __attribute__ ((__unused__))
-#endif
-
-/* Some old versions of bison generate parsers that use bcopy.
- That loses on systems that don't provide the function, so we have
- to redefine it here. */
-#if !defined (HAVE_BCOPY) && defined (HAVE_MEMCPY) && !defined (bcopy)
-# define bcopy(from, to, len) memcpy ((to), (from), (len))
-#endif
-
-/* Remap normal yacc parser interface names (yyparse, yylex, yyerror, etc),
- as well as gratuitiously global symbol names, so we can have multiple
- yacc generated parsers in the same program. Note that these are only
- the variables produced by yacc. If other parser generators (bison,
- byacc, etc) produce additional global names that conflict at link time,
- then those parser generators need to be fixed instead of adding those
- names to this list. */
-
-#define yyparse php_gd_parse
-#define yylex php_gd_lex
-
-static int yyerror ();
-
-#define EPOCH 1970
-#define HOUR(x) ((x) * 60)
-
-#define MAX_BUFF_LEN 128 /* size of buffer to read the date into */
-
-/*
-** An entry in the lexical lookup table.
-*/
-typedef struct _TABLE {
- const char *name;
- int type;
- int value;
-} TABLE;
-
-
-/*
-** Meridian: am, pm, or 24-hour style.
-*/
-typedef enum _MERIDIAN {
- MERam, MERpm, MER24
-} MERIDIAN;
-
-struct date_yy {
- const char *yyInput;
- int yyDayOrdinal;
- int yyDayNumber;
- int yyHaveDate;
- int yyHaveDay;
- int yyHaveRel;
- int yyHaveTime;
- int yyHaveZone;
- int yyTimezone;
- int yyDay;
- int yyHour;
- int yyMinutes;
- int yyMonth;
- int yySeconds;
- int yyYear;
- MERIDIAN yyMeridian;
- int yyRelDay;
- int yyRelHour;
- int yyRelMinutes;
- int yyRelMonth;
- int yyRelSeconds;
- int yyRelYear;
-};
-
-typedef union _date_ll {
- int Number;
- enum _MERIDIAN Meridian;
-} date_ll;
-
-#define YYPARSE_PARAM parm
-#define YYLEX_PARAM parm
-#define YYSTYPE date_ll
-#define YYLTYPE void
-
-static int yylex (YYSTYPE *lvalp, void *parm);
-%}
-
-/* This grammar has 56 shift/reduce conflicts. */
-%expect 56
-%pure_parser
-
-%token tAGO tDAY tDAY_UNIT tDAYZONE tDST tHOUR_UNIT tID tTZONE tWZONE tZZONE
-%token tMERIDIAN tMINUTE_UNIT tMONTH tMONTH_UNIT
-%token tSEC_UNIT tSNUMBER tUNUMBER tYEAR_UNIT tZONE
-
-%type <Number> tDAY tDAY_UNIT tDAYZONE tHOUR_UNIT tMINUTE_UNIT
-%type <Number> tMONTH tMONTH_UNIT
-%type <Number> tSEC_UNIT tSNUMBER tUNUMBER tYEAR_UNIT tZONE tTZONE tWZONE tZZONE
-%type <Meridian> tMERIDIAN
-
-%%
-
-spec : /* NULL */
- | spec item
- ;
-
-item : time {
- ((struct date_yy *)parm)->yyHaveTime++;
- }
- | zone {
- ((struct date_yy *)parm)->yyHaveZone++;
- }
- | date {
- ((struct date_yy *)parm)->yyHaveDate++;
- }
- | day {
- ((struct date_yy *)parm)->yyHaveDay++;
- }
- | rel {
- ((struct date_yy *)parm)->yyHaveRel++;
- }
- | number
- | o_merid
- ;
-
-time : tUNUMBER tMERIDIAN {
- ((struct date_yy *)parm)->yyHour = $1;
- ((struct date_yy *)parm)->yyMinutes = 0;
- ((struct date_yy *)parm)->yySeconds = 0;
- ((struct date_yy *)parm)->yyMeridian = $2;
- }
- | iso8601time_colon
- /* | pgsqltime ... shares a common spec with ISO8601 */
- ;
-
-iso8601time_colon: HMStime_with_colon sec_fraction_part rel {
- ((struct date_yy *)parm)->yyMeridian = MER24;
- }
- | HMtime_with_colon sec_fraction_part rel {
- ((struct date_yy *)parm)->yyMeridian = MER24;
- ((struct date_yy *)parm)->yySeconds = 0;
- }
- | HMStime_with_colon sec_fraction_part iso8601zonepart {
- ((struct date_yy *)parm)->yyMeridian = MER24;
- }
- | HMtime_with_colon sec_fraction_part iso8601zonepart {
- ((struct date_yy *)parm)->yyMeridian = MER24;
- ((struct date_yy *)parm)->yySeconds = 0;
- }
- ;
-
-iso8601zonepart: zonepart_numeric_without_colon {
- ((struct date_yy *)parm)->yyHaveZone++;
- }
- | zonepart_numeric_with_colon {
- ((struct date_yy *)parm)->yyHaveZone++;
- }
- | zone {
- ((struct date_yy *)parm)->yyHaveZone++;
- }
- | /* empty */
- ;
-
-sec_fraction_part: '.' tUNUMBER {
- }
- | /* empty */
- ;
-
-zonepart_numeric_without_colon: tSNUMBER {
- /* format: [+-]hhmm */
- if ($1 <= -100 || $1 >= 100) {
- ((struct date_yy *)parm)->yyTimezone = (-$1 / 100) * 60 + (-$1 % 100);
- } else if ($1 >= -99 || $1 <= 99) {
- ((struct date_yy *)parm)->yyTimezone = -$1 * 60;
- }
- }
- ;
-
-zonepart_numeric_with_colon: tSNUMBER ':' tUNUMBER {
- /* format: [+-]hh:mm */
- ((struct date_yy *)parm)->yyTimezone = -$1 * 60 + ($1 > 0 ? -$3: $3);
- }
- ;
-
-HMStime_with_colon: HMtime_with_colon ':' tUNUMBER {
- /* format: hh:mm:ss */
- ((struct date_yy *)parm)->yySeconds = $3;
- }
- ;
-
-HMtime_with_colon: tUNUMBER ':' tUNUMBER {
- /* format: hh:mm */
- ((struct date_yy *)parm)->yyHour = $1;
- ((struct date_yy *)parm)->yyMinutes = $3;
- }
- ;
-
-
- /* we have to deal with a special case for the datetime format
- of XML Schema here: '2003-11-18T22:40:00Z'
- the combination of a 'T' timezone specifier later followed
- by a 'Z' is now recognized and allowed
- TODO: change the grammer so that the exact positions are checked
- right now '2003-11-18 22:40:00 TZ' is also accepted (hartmut)
- */
-
-zone : tTZONE {
- ((struct date_yy *)parm)->yyTimezone = $1;
- }
- | tWZONE {
- ((struct date_yy *)parm)->yyTimezone = $1;
- }
- | tZZONE {
- ((struct date_yy *)parm)->yyTimezone = $1;
- }
- | tZONE {
- ((struct date_yy *)parm)->yyTimezone = $1;
- }
- | tDAYZONE {
- ((struct date_yy *)parm)->yyTimezone = $1 - 60;
- }
- | tZONE tDST {
- ((struct date_yy *)parm)->yyTimezone = $1 - 60;
- }
- ;
-
-day : tDAY {
- ((struct date_yy *)parm)->yyDayOrdinal = 1;
- ((struct date_yy *)parm)->yyDayNumber = $1;
- }
- | tDAY ',' {
- ((struct date_yy *)parm)->yyDayOrdinal = 1;
- ((struct date_yy *)parm)->yyDayNumber = $1;
- }
- | tUNUMBER tDAY {
- ((struct date_yy *)parm)->yyDayOrdinal = $1;
- ((struct date_yy *)parm)->yyDayNumber = $2;
- }
- ;
-
-date : tUNUMBER '/' tUNUMBER {
- ((struct date_yy *)parm)->yyMonth = $1;
- ((struct date_yy *)parm)->yyDay = $3;
- }
- | tMONTH tUNUMBER tUNUMBER ':' tUNUMBER ':' tUNUMBER tUNUMBER {
- ((struct date_yy *)parm)->yyYear = $8;
- ((struct date_yy *)parm)->yyMonth = $1;
- ((struct date_yy *)parm)->yyDay = $2;
-
- ((struct date_yy *)parm)->yyHour = $3;
- ((struct date_yy *)parm)->yyMinutes = $5;
- ((struct date_yy *)parm)->yySeconds = $7;
-
- ((struct date_yy *)parm)->yyHaveTime = 1;
- }
- | tUNUMBER '/' tUNUMBER '/' tUNUMBER {
- /* Interpret as YYYY/MM/DD if $1 >= 1000, otherwise as MM/DD/YY.
- The goal in recognizing YYYY/MM/DD is solely to support legacy
- machine-generated dates like those in an RCS log listing. If
- you want portability, use the ISO 8601 format. */
- if ($1 >= 1000)
- {
- ((struct date_yy *)parm)->yyYear = $1;
- ((struct date_yy *)parm)->yyMonth = $3;
- ((struct date_yy *)parm)->yyDay = $5;
- }
- else
- {
- ((struct date_yy *)parm)->yyMonth = $1;
- ((struct date_yy *)parm)->yyDay = $3;
- ((struct date_yy *)parm)->yyYear = $5;
- }
- }
- | iso8601date
- | iso8601datetime {
- ((struct date_yy *)parm)->yyHaveTime++;
- }
- | tUNUMBER tMONTH tSNUMBER {
- /* e.g. 17-JUN-1992. */
- ((struct date_yy *)parm)->yyDay = $1;
- ((struct date_yy *)parm)->yyMonth = $2;
- ((struct date_yy *)parm)->yyYear = -$3;
- }
- | tMONTH tUNUMBER tUNUMBER {
- ((struct date_yy *)parm)->yyMonth = $1;
- ((struct date_yy *)parm)->yyDay = $2;
- ((struct date_yy *)parm)->yyYear = $3;
- }
- | tMONTH tUNUMBER {
- ((struct date_yy *)parm)->yyMonth = $1;
- if ($2 > 1000) {
- ((struct date_yy *)parm)->yyYear = $2;
- } else {
- ((struct date_yy *)parm)->yyDay = $2;
- }
- }
- | tMONTH tUNUMBER ',' tUNUMBER {
- ((struct date_yy *)parm)->yyMonth = $1;
- ((struct date_yy *)parm)->yyDay = $2;
- ((struct date_yy *)parm)->yyYear = $4;
- }
- | tUNUMBER tMONTH {
- ((struct date_yy *)parm)->yyMonth = $2;
- if ($1 > 1000) {
- ((struct date_yy *)parm)->yyYear = $1;
- } else {
- ((struct date_yy *)parm)->yyDay = $1;
- }
- }
- | tUNUMBER tMONTH tUNUMBER {
- ((struct date_yy *)parm)->yyMonth = $2;
- ((struct date_yy *)parm)->yyDay = $1;
- ((struct date_yy *)parm)->yyYear = $3;
- }
- ;
-
-iso8601datetime: iso8601date tTZONE iso8601time
- | tUNUMBER tTZONE iso8601time {
- int i = $1;
-
- if (i >= 10000) {
- /* format: yyyymmdd */
- ((struct date_yy *)parm)->yyYear = i / 10000;
- i %= 10000;
- ((struct date_yy *)parm)->yyMonth = i / 100;
- i %= 100;
- ((struct date_yy *)parm)->yyDay = i;
- } else if (i >= 1000 && i <= 9999) {
- /* format: yyyy */
- ((struct date_yy *)parm)->yyYear = i;
- ((struct date_yy *)parm)->yyDay= 1;
- ((struct date_yy *)parm)->yyMonth = 1;
- }
- }
- ;
-
-iso8601date: tUNUMBER tSNUMBER tSNUMBER {
- /* ISO 8601 format. yyyy-mm-dd. */
- ((struct date_yy *)parm)->yyYear = $1;
- ((struct date_yy *)parm)->yyMonth = -$2;
- ((struct date_yy *)parm)->yyDay = -$3;
- }
- | tUNUMBER tSNUMBER {
- /* ISO 8601 format yyyy-mm */
- ((struct date_yy *)parm)->yyYear = $1;
- ((struct date_yy *)parm)->yyMonth = -$2;
- ((struct date_yy *)parm)->yyDay = 1;
- }
- | tUNUMBER iso8601weekspec {
- const int om = (1 + 9) % 12; /* offset month */
- const int oy = $1 - 1; /* offset year */
-
- ((struct date_yy *)parm)->yyYear = $1;
- ((struct date_yy *)parm)->yyMonth = 1;
- /* Zeller's formula */
- ((struct date_yy *)parm)->yyDay -= ((13 * om + 12) / 5 +
- oy + oy / 4 + oy / 400 - oy / 100) % 7 - 1;
- }
- ;
-
-iso8601weekspec: tWZONE tUNUMBER {
- ((struct date_yy *)parm)->yyDay = ($2 / 10) * 7 + ($2 % 10) - 8;
- }
- | tWZONE tUNUMBER tSNUMBER {
- ((struct date_yy *)parm)->yyDay = $2 * 7 - $3 - 8;
- }
- ;
-
-iso8601time:
- iso8601time_colon
- | tUNUMBER sec_fraction_part iso8601zonepart {
- int i = $1;
-
- if (i <= -100000 || i >= 100000) {
- ((struct date_yy *)parm)->yyHour = i / 10000;
- i %= 10000;
- ((struct date_yy *)parm)->yyMinutes = i / 100;
- i %= 100;
- ((struct date_yy *)parm)->yySeconds = i;
- } else if (i <= -1000 || i >= 1000) {
- ((struct date_yy *)parm)->yyHour = i / 100;
- i %= 100;
- ((struct date_yy *)parm)->yyMinutes = i;
- ((struct date_yy *)parm)->yySeconds = 0;
- } else if (i >= -99 || i <= 99) {
- ((struct date_yy *)parm)->yyHour = $1;
- ((struct date_yy *)parm)->yyMinutes = 0;
- ((struct date_yy *)parm)->yySeconds = 0;
- } else {
- ((struct date_yy *)parm)->yyHaveTime = 0;
- }
- ((struct date_yy *)parm)->yyMeridian = MER24;
- }
- ;
-
-rel : relunit tAGO {
- ((struct date_yy *)parm)->yyRelSeconds =
- -((struct date_yy *)parm)->yyRelSeconds;
- ((struct date_yy *)parm)->yyRelMinutes =
- -((struct date_yy *)parm)->yyRelMinutes;
- ((struct date_yy *)parm)->yyRelHour =
- -((struct date_yy *)parm)->yyRelHour;
- ((struct date_yy *)parm)->yyRelDay =
- -((struct date_yy *)parm)->yyRelDay;
- ((struct date_yy *)parm)->yyRelMonth =
- -((struct date_yy *)parm)->yyRelMonth;
- ((struct date_yy *)parm)->yyRelYear =
- -((struct date_yy *)parm)->yyRelYear;
- }
- | relunit
- ;
-
-relunit : tUNUMBER tYEAR_UNIT {
- ((struct date_yy *)parm)->yyRelYear += $1 * $2;
- }
- | tSNUMBER tYEAR_UNIT {
- ((struct date_yy *)parm)->yyRelYear += $1 * $2;
- }
- | tYEAR_UNIT {
- ((struct date_yy *)parm)->yyRelYear += $1;
- }
- | tUNUMBER tMONTH_UNIT {
- ((struct date_yy *)parm)->yyRelMonth += $1 * $2;
- }
- | tSNUMBER tMONTH_UNIT {
- ((struct date_yy *)parm)->yyRelMonth += $1 * $2;
- }
- | tMONTH_UNIT {
- ((struct date_yy *)parm)->yyRelMonth += $1;
- }
- | tUNUMBER tDAY_UNIT {
- ((struct date_yy *)parm)->yyRelDay += $1 * $2;
- }
- | tSNUMBER tDAY_UNIT {
- ((struct date_yy *)parm)->yyRelDay += $1 * $2;
- }
- | tDAY_UNIT {
- ((struct date_yy *)parm)->yyRelDay += $1;
- }
- | tUNUMBER tHOUR_UNIT {
- ((struct date_yy *)parm)->yyRelHour += $1 * $2;
- }
- | tSNUMBER tHOUR_UNIT {
- ((struct date_yy *)parm)->yyRelHour += $1 * $2;
- }
- | tHOUR_UNIT {
- ((struct date_yy *)parm)->yyRelHour += $1;
- }
- | tUNUMBER tMINUTE_UNIT {
- ((struct date_yy *)parm)->yyRelMinutes += $1 * $2;
- }
- | tSNUMBER tMINUTE_UNIT {
- ((struct date_yy *)parm)->yyRelMinutes += $1 * $2;
- }
- | tMINUTE_UNIT {
- ((struct date_yy *)parm)->yyRelMinutes += $1;
- }
- | tUNUMBER tSEC_UNIT {
- ((struct date_yy *)parm)->yyRelSeconds += $1 * $2;
- }
- | tSNUMBER tSEC_UNIT {
- ((struct date_yy *)parm)->yyRelSeconds += $1 * $2;
- }
- | tSEC_UNIT {
- ((struct date_yy *)parm)->yyRelSeconds += $1;
- }
- ;
-
-number : tUNUMBER
- {
- if (((struct date_yy *)parm)->yyHaveTime &&
- ((struct date_yy *)parm)->yyHaveDate &&
- !((struct date_yy *)parm)->yyHaveRel)
- ((struct date_yy *)parm)->yyYear = $1;
- else
- {
- if ($1>10000)
- {
- ((struct date_yy *)parm)->yyHaveDate++;
- ((struct date_yy *)parm)->yyDay= ($1)%100;
- ((struct date_yy *)parm)->yyMonth= ($1/100)%100;
- ((struct date_yy *)parm)->yyYear = $1/10000;
- }
- else
- {
- ((struct date_yy *)parm)->yyHaveTime++;
- if ($1 < 100)
- {
- ((struct date_yy *)parm)->yyHour = $1;
- ((struct date_yy *)parm)->yyMinutes = 0;
- }
- else
- {
- ((struct date_yy *)parm)->yyHour = $1 / 100;
- ((struct date_yy *)parm)->yyMinutes = $1 % 100;
- }
- ((struct date_yy *)parm)->yySeconds = 0;
- ((struct date_yy *)parm)->yyMeridian = MER24;
- }
- }
- }
- ;
-
-o_merid : tMERIDIAN
- {
- ((struct date_yy *)parm)->yyMeridian = $1;
- }
- ;
-
-%%
-
-time_t get_date (char *p, time_t *now);
-
-#ifndef PHP_WIN32
-extern struct tm *gmtime();
-extern struct tm *localtime();
-extern time_t mktime();
-#endif
-
-/* Month and day table. */
-static TABLE const MonthDayTable[] = {
- { "january", tMONTH, 1 },
- { "february", tMONTH, 2 },
- { "march", tMONTH, 3 },
- { "april", tMONTH, 4 },
- { "may", tMONTH, 5 },
- { "june", tMONTH, 6 },
- { "july", tMONTH, 7 },
- { "august", tMONTH, 8 },
- { "september", tMONTH, 9 },
- { "sept", tMONTH, 9 },
- { "october", tMONTH, 10 },
- { "november", tMONTH, 11 },
- { "december", tMONTH, 12 },
- { "sunday", tDAY, 0 },
- { "monday", tDAY, 1 },
- { "tuesday", tDAY, 2 },
- { "tues", tDAY, 2 },
- { "wednesday", tDAY, 3 },
- { "wednes", tDAY, 3 },
- { "thursday", tDAY, 4 },
- { "thur", tDAY, 4 },
- { "thurs", tDAY, 4 },
- { "friday", tDAY, 5 },
- { "saturday", tDAY, 6 },
- { NULL, 0, 0 }
-};
-
-/* Time units table. */
-static TABLE const UnitsTable[] = {
- { "year", tYEAR_UNIT, 1 },
- { "month", tMONTH_UNIT, 1 },
- { "fortnight", tDAY_UNIT, 14 },
- { "week", tDAY_UNIT, 7 },
- { "day", tDAY_UNIT, 1 },
- { "hour", tHOUR_UNIT, 1 },
- { "minute", tMINUTE_UNIT, 1 },
- { "min", tMINUTE_UNIT, 1 },
- { "second", tSEC_UNIT, 1 },
- { "sec", tSEC_UNIT, 1 },
- { NULL, 0, 0 }
-};
-
-/* Assorted relative-time words. */
-static TABLE const OtherTable[] = {
- { "tomorrow", tDAY_UNIT, 1 },
- { "yesterday", tDAY_UNIT, -1 },
- { "today", tDAY_UNIT, 0 },
- { "now", tDAY_UNIT, 0 },
- { "last", tUNUMBER, -1 },
- { "this", tUNUMBER, 0 },
- { "next", tUNUMBER, 2 },
- { "first", tUNUMBER, 1 },
-/* { "second", tUNUMBER, 2 }, */
- { "third", tUNUMBER, 3 },
- { "fourth", tUNUMBER, 4 },
- { "fifth", tUNUMBER, 5 },
- { "sixth", tUNUMBER, 6 },
- { "seventh", tUNUMBER, 7 },
- { "eighth", tUNUMBER, 8 },
- { "ninth", tUNUMBER, 9 },
- { "tenth", tUNUMBER, 10 },
- { "eleventh", tUNUMBER, 11 },
- { "twelfth", tUNUMBER, 12 },
- { "ago", tAGO, 1 },
- { NULL, 0, 0 }
-};
-
-/* The timezone table. */
-static TABLE const TimezoneTable[] = {
- { "gmt", tZONE, HOUR ( 0) }, /* Greenwich Mean */
- { "ut", tZONE, HOUR ( 0) }, /* Universal (Coordinated) */
- { "utc", tZONE, HOUR ( 0) },
- { "wet", tZONE, HOUR ( 0) }, /* Western European */
- { "bst", tDAYZONE, HOUR ( 0) }, /* British Summer */
- { "wat", tZONE, HOUR ( 1) }, /* West Africa */
- { "at", tZONE, HOUR ( 2) }, /* Azores */
-#if 0
- /* For completeness. BST is also British Summer, and GST is
- * also Guam Standard. */
- { "bst", tZONE, HOUR ( 3) }, /* Brazil Standard */
- { "gst", tZONE, HOUR ( 3) }, /* Greenland Standard */
-#endif
-#if 0
- { "nft", tZONE, HOUR (3.5) }, /* Newfoundland */
- { "nst", tZONE, HOUR (3.5) }, /* Newfoundland Standard */
- { "ndt", tDAYZONE, HOUR (3.5) }, /* Newfoundland Daylight */
-#endif
- { "ast", tZONE, HOUR ( 4) }, /* Atlantic Standard */
- { "adt", tDAYZONE, HOUR ( 4) }, /* Atlantic Daylight */
- { "est", tZONE, HOUR ( 5) }, /* Eastern Standard */
- { "edt", tDAYZONE, HOUR ( 5) }, /* Eastern Daylight */
- { "cst", tZONE, HOUR ( 6) }, /* Central Standard */
- { "cdt", tDAYZONE, HOUR ( 6) }, /* Central Daylight */
- { "mst", tZONE, HOUR ( 7) }, /* Mountain Standard */
- { "mdt", tDAYZONE, HOUR ( 7) }, /* Mountain Daylight */
- { "pst", tZONE, HOUR ( 8) }, /* Pacific Standard */
- { "pdt", tDAYZONE, HOUR ( 8) }, /* Pacific Daylight */
- { "yst", tZONE, HOUR ( 9) }, /* Yukon Standard */
- { "ydt", tDAYZONE, HOUR ( 9) }, /* Yukon Daylight */
- { "hst", tZONE, HOUR (10) }, /* Hawaii Standard */
- { "hdt", tDAYZONE, HOUR (10) }, /* Hawaii Daylight */
- { "cat", tZONE, HOUR (10) }, /* Central Alaska */
- { "akst", tZONE, HOUR (10) }, /* Alaska Standard */
- { "akdt", tZONE, HOUR (10) }, /* Alaska Daylight */
- { "ahst", tZONE, HOUR (10) }, /* Alaska-Hawaii Standard */
- { "nt", tZONE, HOUR (11) }, /* Nome */
- { "idlw", tZONE, HOUR (12) }, /* International Date Line West */
- { "cet", tZONE, -HOUR (1) }, /* Central European */
- { "cest", tDAYZONE, -HOUR (1) }, /* Central European Summer */
- { "met", tZONE, -HOUR (1) }, /* Middle European */
- { "mewt", tZONE, -HOUR (1) }, /* Middle European Winter */
- { "mest", tDAYZONE, -HOUR (1) }, /* Middle European Summer */
- { "mesz", tDAYZONE, -HOUR (1) }, /* Middle European Summer */
- { "swt", tZONE, -HOUR (1) }, /* Swedish Winter */
- { "sst", tDAYZONE, -HOUR (1) }, /* Swedish Summer */
- { "fwt", tZONE, -HOUR (1) }, /* French Winter */
- { "fst", tDAYZONE, -HOUR (1) }, /* French Summer */
- { "eet", tZONE, -HOUR (2) }, /* Eastern Europe, USSR Zone 1 */
- { "bt", tZONE, -HOUR (3) }, /* Baghdad, USSR Zone 2 */
-#if 0
- { "it", tZONE, -HOUR (3.5) },/* Iran */
-#endif
- { "zp4", tZONE, -HOUR (4) }, /* USSR Zone 3 */
- { "zp5", tZONE, -HOUR (5) }, /* USSR Zone 4 */
-#if 0
- { "ist", tZONE, -HOUR (5.5) },/* Indian Standard */
-#endif
- { "zp6", tZONE, -HOUR (6) }, /* USSR Zone 5 */
-#if 0
- /* For completeness. NST is also Newfoundland Standard, and SST is
- * also Swedish Summer. */
- { "nst", tZONE, -HOUR (6.5) },/* North Sumatra */
- { "sst", tZONE, -HOUR (7) }, /* South Sumatra, USSR Zone 6 */
-#endif /* 0 */
- { "wast", tZONE, -HOUR (7) }, /* West Australian Standard */
- { "wadt", tDAYZONE, -HOUR (7) }, /* West Australian Daylight */
-#if 0
- { "jt", tZONE, -HOUR (7.5) },/* Java (3pm in Cronusland!) */
-#endif
- { "cct", tZONE, -HOUR (8) }, /* China Coast, USSR Zone 7 */
- { "jst", tZONE, -HOUR (9) }, /* Japan Standard, USSR Zone 8 */
-#if 0
- { "cast", tZONE, -HOUR (9.5) },/* Central Australian Standard */
- { "cadt", tDAYZONE, -HOUR (9.5) },/* Central Australian Daylight */
-#endif
- { "east", tZONE, -HOUR (10) }, /* Eastern Australian Standard */
- { "eadt", tDAYZONE, -HOUR (10) }, /* Eastern Australian Daylight */
- { "gst", tZONE, -HOUR (10) }, /* Guam Standard, USSR Zone 9 */
- { "nzt", tZONE, -HOUR (12) }, /* New Zealand */
- { "nzst", tZONE, -HOUR (12) }, /* New Zealand Standard */
- { "nzdt", tDAYZONE, -HOUR (12) }, /* New Zealand Daylight */
- { "idle", tZONE, -HOUR (12) }, /* International Date Line East */
- { NULL, 0, 0 }
-};
-
-/* Military timezone table. */
-static TABLE const MilitaryTable[] = {
- { "a", tZONE, HOUR (- 1) },
- { "b", tZONE, HOUR (- 2) },
- { "c", tZONE, HOUR (- 3) },
- { "d", tZONE, HOUR (- 4) },
- { "e", tZONE, HOUR (- 5) },
- { "f", tZONE, HOUR (- 6) },
- { "g", tZONE, HOUR (- 7) },
- { "h", tZONE, HOUR (- 8) },
- { "i", tZONE, HOUR (- 9) },
- { "k", tZONE, HOUR (-10) },
- { "l", tZONE, HOUR (-11) },
- { "m", tZONE, HOUR (-12) },
- { "n", tZONE, HOUR ( 1) },
- { "o", tZONE, HOUR ( 2) },
- { "p", tZONE, HOUR ( 3) },
- { "q", tZONE, HOUR ( 4) },
- { "r", tZONE, HOUR ( 5) },
- { "s", tZONE, HOUR ( 6) },
- { "t", tTZONE, HOUR ( 7) },
- { "u", tZONE, HOUR ( 8) },
- { "v", tZONE, HOUR ( 9) },
- { "w", tWZONE, HOUR ( 10) },
- { "x", tZONE, HOUR ( 11) },
- { "y", tZONE, HOUR ( 12) },
- { "z", tZZONE, HOUR ( 0) },
- { NULL, 0, 0 }
-};
-
-
-
-
-/* ARGSUSED */
-static int
-yyerror (s)
- char *s ATTRIBUTE_UNUSED;
-{
- return 0;
-}
-
-static int
-ToHour (Hours, Meridian)
- int Hours;
- MERIDIAN Meridian;
-{
- switch (Meridian)
- {
- case MER24:
- if (Hours < 0 || Hours > 23)
- return -1;
- return Hours;
- case MERam:
- if (Hours < 1 || Hours > 12)
- return -1;
- if (Hours == 12)
- Hours = 0;
- return Hours;
- case MERpm:
- if (Hours < 1 || Hours > 12)
- return -1;
- if (Hours == 12)
- Hours = 0;
- return Hours + 12;
- default:
- abort ();
- }
- /* NOTREACHED */
-}
-
-static int
-ToYear (Year)
- int Year;
-{
- if (Year < 0)
- Year = -Year;
-
- /* XPG4 suggests that years 00-68 map to 2000-2068, and
- years 69-99 map to 1969-1999. */
- if (Year < 69)
- Year += 2000;
- else if (Year < 100)
- Year += 1900;
-
- return Year;
-}
-
-static int
-LookupWord (lvalp,buff)
- YYSTYPE *lvalp;
- char *buff;
-{
- register char *p;
- register char *q;
- register const TABLE *tp;
- int i;
- int abbrev;
-
- /* Make it lowercase. */
- for (p = buff; *p; p++)
- if (ISUPPER ((unsigned char) *p))
- *p = tolower (*p);
-
- if (strcmp (buff, "am") == 0 || strcmp (buff, "a.m.") == 0)
- {
- lvalp->Meridian = MERam;
- return tMERIDIAN;
- }
- if (strcmp (buff, "pm") == 0 || strcmp (buff, "p.m.") == 0)
- {
- lvalp->Meridian = MERpm;
- return tMERIDIAN;
- }
-
- /* See if we have an abbreviation for a month. */
- if (strlen (buff) == 3)
- abbrev = 1;
- else if (strlen (buff) == 4 && buff[3] == '.')
- {
- abbrev = 1;
- buff[3] = '\0';
- }
- else
- abbrev = 0;
-
- for (tp = MonthDayTable; tp->name; tp++)
- {
- if (abbrev)
- {
- if (strncmp (buff, tp->name, 3) == 0)
- {
- lvalp->Number = tp->value;
- return tp->type;
- }
- }
- else if (strcmp (buff, tp->name) == 0)
- {
- lvalp->Number = tp->value;
- return tp->type;
- }
- }
-
- for (tp = TimezoneTable; tp->name; tp++)
- if (strcmp (buff, tp->name) == 0)
- {
- lvalp->Number = tp->value;
- return tp->type;
- }
-
- if (strcmp (buff, "dst") == 0)
- return tDST;
-
- for (tp = UnitsTable; tp->name; tp++)
- if (strcmp (buff, tp->name) == 0)
- {
- lvalp->Number = tp->value;
- return tp->type;
- }
-
- /* Strip off any plural and try the units table again. */
- i = strlen (buff) - 1;
- if (buff[i] == 's')
- {
- buff[i] = '\0';
- for (tp = UnitsTable; tp->name; tp++)
- if (strcmp (buff, tp->name) == 0)
- {
- lvalp->Number = tp->value;
- return tp->type;
- }
- buff[i] = 's'; /* Put back for "this" in OtherTable. */
- }
-
- for (tp = OtherTable; tp->name; tp++)
- if (strcmp (buff, tp->name) == 0)
- {
- lvalp->Number = tp->value;
- return tp->type;
- }
-
- /* Military timezones. */
- if (buff[1] == '\0' && ISALPHA ((unsigned char) *buff))
- {
- for (tp = MilitaryTable; tp->name; tp++)
- if (strcmp (buff, tp->name) == 0)
- {
- lvalp->Number = tp->value;
- return tp->type;
- }
- }
-
- /* Drop out any periods and try the timezone table again. */
- for (i = 0, p = q = buff; *q; q++)
- if (*q != '.')
- *p++ = *q;
- else
- i++;
- *p = '\0';
- if (i)
- for (tp = TimezoneTable; tp->name; tp++)
- if (strcmp (buff, tp->name) == 0)
- {
- lvalp->Number = tp->value;
- return tp->type;
- }
-
- return tID;
-}
-
-int yylex (YYSTYPE *lvalp, void *parm)
-{
- register unsigned char c;
- register char *p;
- char buff[20];
- int Count;
- int sign;
- struct date_yy * date = (struct date_yy *)parm;
-
- for (;;)
- {
- while (ISSPACE ((unsigned char) *date->yyInput))
- date->yyInput++;
-
- if (ISDIGIT (c = *date->yyInput) || c == '-' || c == '+')
- {
- if (c == '-' || c == '+')
- {
- sign = c == '-' ? -1 : 1;
- if (!ISDIGIT (*++date->yyInput))
- /* skip the '-' sign */
- continue;
- }
- else
- sign = 0;
- for (lvalp->Number = 0; ISDIGIT (c = *date->yyInput++);)
- lvalp->Number = 10 * lvalp->Number + c - '0';
- date->yyInput--;
- if (sign < 0)
- lvalp->Number = -lvalp->Number;
- /* Ignore ordinal suffixes on numbers */
- c = *date->yyInput;
- if (c == 's' || c == 'n' || c == 'r' || c == 't') {
- c = *++date->yyInput;
- if (c == 't' || c == 'd' || c == 'h') {
- date->yyInput++;
- } else {
- date->yyInput--;
- }
- }
- return sign ? tSNUMBER : tUNUMBER;
- }
- if (ISALPHA (c))
- {
- for (p = buff; (c = *date->yyInput++, ISALPHA (c)) || c == '.';)
- if (p < &buff[sizeof buff - 1])
- *p++ = c;
- *p = '\0';
- date->yyInput--;
- return LookupWord (lvalp, buff);
- }
- if (c != '(')
- return *date->yyInput++;
- Count = 0;
- do
- {
- c = *date->yyInput++;
- if (c == '\0')
- return c;
- if (c == '(')
- Count++;
- else if (c == ')')
- Count--;
- }
- while (Count > 0);
- }
-}
-
-#define TM_YEAR_ORIGIN 1900
-
-/* Yield A - B, measured in seconds. */
-static long
-difftm (struct tm *a, struct tm *b)
-{
- int ay = a->tm_year + (TM_YEAR_ORIGIN - 1);
- int by = b->tm_year + (TM_YEAR_ORIGIN - 1);
- long days = (
- /* difference in day of year */
- a->tm_yday - b->tm_yday
- /* + intervening leap days */
- + ((ay >> 2) - (by >> 2))
- - (ay / 100 - by / 100)
- + ((ay / 100 >> 2) - (by / 100 >> 2))
- /* + difference in years * 365 */
- + (long) (ay - by) * 365
- );
- return (60 * (60 * (24 * days + (a->tm_hour - b->tm_hour))
- + (a->tm_min - b->tm_min))
- + (a->tm_sec - b->tm_sec));
-}
-
-time_t php_parse_date(char *p, time_t *now)
-{
- struct tm tm, tm0, *tmp;
- time_t Start;
- struct date_yy date;
-
- date.yyInput = p;
- Start = now ? *now : time ((time_t *) NULL);
- tmp = localtime (&Start);
- if (!tmp)
- return -1;
- date.yyYear = tmp->tm_year + TM_YEAR_ORIGIN;
- date.yyMonth = tmp->tm_mon + 1;
- date.yyDay = tmp->tm_mday;
- date.yyHour = tmp->tm_hour;
- date.yyMinutes = tmp->tm_min;
- date.yySeconds = tmp->tm_sec;
- tm.tm_isdst = tmp->tm_isdst;
- date.yyMeridian = MER24;
- date.yyRelSeconds = 0;
- date.yyRelMinutes = 0;
- date.yyRelHour = 0;
- date.yyRelDay = 0;
- date.yyRelMonth = 0;
- date.yyRelYear = 0;
- date.yyHaveDate = 0;
- date.yyHaveDay = 0;
- date.yyHaveRel = 0;
- date.yyHaveTime = 0;
- date.yyHaveZone = 0;
-
- if (yyparse ((void *)&date)
- || date.yyHaveTime > 1 || date.yyHaveZone > 1
- || date.yyHaveDate > 1 || date.yyHaveDay > 1) {
- return -1;
- }
- tm.tm_year = ToYear (date.yyYear) - TM_YEAR_ORIGIN + date.yyRelYear;
- tm.tm_mon = date.yyMonth - 1 + date.yyRelMonth;
- tm.tm_mday = date.yyDay + date.yyRelDay;
- if (date.yyHaveTime /*|| (date.yyHaveRel && !date.yyHaveDate && !date.yyHaveDay) */)
- {
- tm.tm_hour = ToHour (date.yyHour, date.yyMeridian);
- if (tm.tm_hour < 0)
- return -1;
- tm.tm_min = date.yyMinutes;
- tm.tm_sec = date.yySeconds;
- }
- else
- {
- tm.tm_hour = tm.tm_min = tm.tm_sec = 0;
- }
- tm.tm_hour += date.yyRelHour;
- tm.tm_min += date.yyRelMinutes;
- tm.tm_sec += date.yyRelSeconds;
-
- /* Let mktime deduce tm_isdst if we have an absolute timestamp,
- or if the relative timestamp mentions days, months, or years. */
- if (date.yyHaveDate | date.yyHaveDay | date.yyHaveTime | date.yyRelDay | date.yyRelMonth | date.yyRelYear)
- tm.tm_isdst = -1;
-
- tm0 = tm;
-
- Start = mktime (&tm);
-
- if (Start == (time_t) -1)
- {
-
- /* Guard against falsely reporting errors near the time_t boundaries
- when parsing times in other time zones. For example, if the min
- time_t value is 1970-01-01 00:00:00 UTC and we are 8 hours ahead
- of UTC, then the min localtime value is 1970-01-01 08:00:00; if
- we apply mktime to 1970-01-01 00:00:00 we will get an error, so
- we apply mktime to 1970-01-02 08:00:00 instead and adjust the time
- zone by 24 hours to compensate. This algorithm assumes that
- there is no DST transition within a day of the time_t boundaries. */
- if (date.yyHaveZone)
- {
- tm = tm0;
- if (tm.tm_year <= EPOCH - TM_YEAR_ORIGIN)
- {
- tm.tm_mday++;
- date.yyTimezone -= 24 * 60;
- }
- else
- {
- tm.tm_mday--;
- date.yyTimezone += 24 * 60;
- }
- Start = mktime (&tm);
- }
-
- if (Start == (time_t) -1)
- return Start;
- }
-
- if (date.yyHaveDay && !date.yyHaveDate)
- {
- tm.tm_mday += ((date.yyDayNumber - tm.tm_wday + 7) % 7
- + 7 * (date.yyDayOrdinal - (0 < date.yyDayOrdinal)));
- Start = mktime (&tm);
- if (Start == (time_t) -1)
- return Start;
- }
-
- if (date.yyHaveZone)
- {
- long delta;
- struct tm *gmt = gmtime (&Start);
- if (!gmt)
- return -1;
- delta = date.yyTimezone * 60L + difftm (&tm, gmt);
-
- if ((Start + delta < Start) != (delta < 0))
- return -1; /* time_t overflow */
- Start += delta;
- }
-
- return Start;
-}
diff --git a/ext/standard/php_array.h b/ext/standard/php_array.h
deleted file mode 100644
index 077862c5c3..0000000000
--- a/ext/standard/php_array.h
+++ /dev/null
@@ -1,118 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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. |
- +----------------------------------------------------------------------+
- | Authors: Andi Gutmans <andi@zend.com> |
- | Zeev Suraski <zeev@zend.com> |
- | Rasmus Lerdorf <rasmus@php.net> |
- | Andrei Zmievski <andrei@php.net> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifndef PHP_ARRAY_H
-#define PHP_ARRAY_H
-
-PHP_MINIT_FUNCTION(array);
-PHP_MSHUTDOWN_FUNCTION(array);
-
-PHP_FUNCTION(ksort);
-PHP_FUNCTION(krsort);
-PHP_FUNCTION(natsort);
-PHP_FUNCTION(natcasesort);
-PHP_FUNCTION(asort);
-PHP_FUNCTION(arsort);
-PHP_FUNCTION(sort);
-PHP_FUNCTION(rsort);
-PHP_FUNCTION(usort);
-PHP_FUNCTION(uasort);
-PHP_FUNCTION(uksort);
-PHP_FUNCTION(array_walk);
-PHP_FUNCTION(array_walk_recursive);
-PHP_FUNCTION(count);
-PHP_FUNCTION(end);
-PHP_FUNCTION(prev);
-PHP_FUNCTION(next);
-PHP_FUNCTION(reset);
-PHP_FUNCTION(current);
-PHP_FUNCTION(key);
-PHP_FUNCTION(min);
-PHP_FUNCTION(max);
-PHP_FUNCTION(in_array);
-PHP_FUNCTION(array_search);
-PHP_FUNCTION(extract);
-PHP_FUNCTION(compact);
-PHP_FUNCTION(array_fill);
-PHP_FUNCTION(range);
-PHP_FUNCTION(shuffle);
-PHP_FUNCTION(array_multisort);
-PHP_FUNCTION(array_push);
-PHP_FUNCTION(array_pop);
-PHP_FUNCTION(array_shift);
-PHP_FUNCTION(array_unshift);
-PHP_FUNCTION(array_splice);
-PHP_FUNCTION(array_slice);
-PHP_FUNCTION(array_merge);
-PHP_FUNCTION(array_merge_recursive);
-PHP_FUNCTION(array_keys);
-PHP_FUNCTION(array_values);
-PHP_FUNCTION(array_count_values);
-PHP_FUNCTION(array_reverse);
-PHP_FUNCTION(array_reduce);
-PHP_FUNCTION(array_pad);
-PHP_FUNCTION(array_flip);
-PHP_FUNCTION(array_change_key_case);
-PHP_FUNCTION(array_rand);
-PHP_FUNCTION(array_unique);
-PHP_FUNCTION(array_intersect);
-PHP_FUNCTION(array_intersect_key);
-PHP_FUNCTION(array_intersect_ukey);
-PHP_FUNCTION(array_uintersect);
-PHP_FUNCTION(array_intersect_assoc);
-PHP_FUNCTION(array_uintersect_assoc);
-PHP_FUNCTION(array_intersect_uassoc);
-PHP_FUNCTION(array_uintersect_uassoc);
-PHP_FUNCTION(array_diff);
-PHP_FUNCTION(array_diff_key);
-PHP_FUNCTION(array_diff_ukey);
-PHP_FUNCTION(array_udiff);
-PHP_FUNCTION(array_diff_assoc);
-PHP_FUNCTION(array_udiff_assoc);
-PHP_FUNCTION(array_diff_uassoc);
-PHP_FUNCTION(array_udiff_uassoc);
-PHP_FUNCTION(array_sum);
-PHP_FUNCTION(array_filter);
-PHP_FUNCTION(array_map);
-PHP_FUNCTION(array_key_exists);
-PHP_FUNCTION(array_chunk);
-PHP_FUNCTION(array_combine);
-
-HashTable* php_splice(HashTable *, int, int, zval ***, int, HashTable **);
-PHPAPI int php_array_merge(HashTable *dest, HashTable *src, int recursive TSRMLS_DC);
-int multisort_compare(const void *a, const void *b TSRMLS_DC);
-
-typedef struct {
- int *multisort_flags[2];
- int (*compare_func)(zval *result, zval *op1, zval *op2 TSRMLS_DC);
-} php_array_globals;
-
-#ifdef ZTS
-#define ARRAYG(v) TSRMG(array_globals_id, php_array_globals *, v)
-extern int array_globals_id;
-#else
-#define ARRAYG(v) (array_globals.v)
-extern php_array_globals array_globals;
-#endif
-
-#endif /* PHP_ARRAY_H */
diff --git a/ext/standard/php_assert.h b/ext/standard/php_assert.h
deleted file mode 100644
index ca52cd7f7f..0000000000
--- a/ext/standard/php_assert.h
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Thies C. Arntzen <thies@thieso.net> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifndef PHP_ASSERT_H
-#define PHP_ASSERT_H
-
-PHP_MINIT_FUNCTION(assert);
-PHP_MSHUTDOWN_FUNCTION(assert);
-PHP_RINIT_FUNCTION(assert);
-PHP_RSHUTDOWN_FUNCTION(assert);
-PHP_MINFO_FUNCTION(assert);
-PHP_FUNCTION(assert);
-PHP_FUNCTION(assert_options);
-
-#endif /* PHP_ASSERT_H */
diff --git a/ext/standard/php_browscap.h b/ext/standard/php_browscap.h
deleted file mode 100644
index 1b77c1785b..0000000000
--- a/ext/standard/php_browscap.h
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Zeev Suraski <zeev@zend.com> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifndef PHP_BROWSCAP_H
-#define PHP_BROWSCAP_H
-
-PHP_MINIT_FUNCTION(browscap);
-PHP_MSHUTDOWN_FUNCTION(browscap);
-
-PHP_FUNCTION(get_browser);
-
-#endif /* PHP_BROWSCAP_H */
diff --git a/ext/standard/php_crypt.h b/ext/standard/php_crypt.h
deleted file mode 100644
index c0b42107e8..0000000000
--- a/ext/standard/php_crypt.h
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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. |
- +----------------------------------------------------------------------+
- | Authors: Stig Bakken <ssb@php.net> |
- | Zeev Suraski <zeev@zend.com> |
- | Rasmus Lerdorf <rasmus@php.net> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifndef PHP_CRYPT_H
-#define PHP_CRYPT_H
-
-PHP_FUNCTION(crypt);
-#if HAVE_CRYPT
-PHP_MINIT_FUNCTION(crypt);
-PHP_RINIT_FUNCTION(crypt);
-#endif
-
-#endif
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- */
diff --git a/ext/standard/php_dir.h b/ext/standard/php_dir.h
deleted file mode 100644
index e415544e7a..0000000000
--- a/ext/standard/php_dir.h
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Thies C. Arntzen <thies@thieso.net> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-#ifndef PHP_DIR_H
-#define PHP_DIR_H
-
-/* directory functions */
-PHP_MINIT_FUNCTION(dir);
-PHP_RINIT_FUNCTION(dir);
-PHP_FUNCTION(opendir);
-PHP_FUNCTION(closedir);
-PHP_FUNCTION(chdir);
-#if defined(HAVE_CHROOT) && !defined(ZTS) && ENABLE_CHROOT_FUNC
-PHP_FUNCTION(chroot);
-#endif
-PHP_FUNCTION(getcwd);
-PHP_FUNCTION(rewinddir);
-PHP_NAMED_FUNCTION(php_if_readdir);
-PHP_FUNCTION(getdir);
-PHP_FUNCTION(glob);
-PHP_FUNCTION(scandir);
-
-#endif /* PHP_DIR_H */
diff --git a/ext/standard/php_ext_syslog.h b/ext/standard/php_ext_syslog.h
deleted file mode 100644
index 305ec4f043..0000000000
--- a/ext/standard/php_ext_syslog.h
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Stig Sæther Bakken <ssb@php.net> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifndef PHP_EXT_SYSLOG_H
-#define PHP_EXT_SYSLOG_H
-
-#ifdef HAVE_SYSLOG_H
-
-#include "php_syslog.h"
-
-PHP_MINIT_FUNCTION(syslog);
-PHP_RINIT_FUNCTION(syslog);
-PHP_RSHUTDOWN_FUNCTION(syslog);
-
-PHP_FUNCTION(openlog);
-PHP_FUNCTION(syslog);
-PHP_FUNCTION(closelog);
-PHP_FUNCTION(define_syslog_variables);
-
-#endif
-
-#endif /* PHP_EXT_SYSLOG_H */
diff --git a/ext/standard/php_filestat.h b/ext/standard/php_filestat.h
deleted file mode 100644
index b5ad27dc81..0000000000
--- a/ext/standard/php_filestat.h
+++ /dev/null
@@ -1,106 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Jim Winstead <jimw@php.net> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifndef PHP_FILESTAT_H
-#define PHP_FILESTAT_H
-
-PHP_RINIT_FUNCTION(filestat);
-PHP_RSHUTDOWN_FUNCTION(filestat);
-
-PHP_FUNCTION(clearstatcache);
-PHP_FUNCTION(fileatime);
-PHP_FUNCTION(filectime);
-PHP_FUNCTION(filegroup);
-PHP_FUNCTION(fileinode);
-PHP_FUNCTION(filemtime);
-PHP_FUNCTION(fileowner);
-PHP_FUNCTION(fileperms);
-PHP_FUNCTION(filesize);
-PHP_FUNCTION(filetype);
-PHP_FUNCTION(is_writable);
-PHP_FUNCTION(is_readable);
-PHP_FUNCTION(is_executable);
-PHP_FUNCTION(is_file);
-PHP_FUNCTION(is_dir);
-PHP_FUNCTION(is_link);
-PHP_FUNCTION(file_exists);
-PHP_NAMED_FUNCTION(php_if_stat);
-PHP_NAMED_FUNCTION(php_if_lstat);
-PHP_FUNCTION(disk_total_space);
-PHP_FUNCTION(disk_free_space);
-PHP_FUNCTION(chown);
-PHP_FUNCTION(chgrp);
-PHP_FUNCTION(chmod);
-#if HAVE_UTIME
-PHP_FUNCTION(touch);
-#endif
-PHP_FUNCTION(clearstatcache);
-
-#define MAKE_LONG_ZVAL_INCREF(name, val)\
- MAKE_STD_ZVAL(name); \
- ZVAL_LONG(name, val); \
- name->refcount++;
-
-#ifdef PHP_WIN32
-#define S_IRUSR S_IREAD
-#define S_IWUSR S_IWRITE
-#define S_IXUSR S_IEXEC
-#define S_IRGRP S_IREAD
-#define S_IWGRP S_IWRITE
-#define S_IXGRP S_IEXEC
-#define S_IROTH S_IREAD
-#define S_IWOTH S_IWRITE
-#define S_IXOTH S_IEXEC
-
-#undef getgid
-#define getgroups(a, b) 0
-#define getgid() 1
-#define getuid() 1
-#endif
-
-#ifdef PHP_WIN32
-typedef unsigned int php_stat_len;
-#else
-typedef int php_stat_len;
-#endif
-
-PHPAPI void php_stat(const char *filename, php_stat_len filename_length, int type, pval *return_value TSRMLS_DC);
-
-/* Switches for various filestat functions: */
-#define FS_PERMS 0
-#define FS_INODE 1
-#define FS_SIZE 2
-#define FS_OWNER 3
-#define FS_GROUP 4
-#define FS_ATIME 5
-#define FS_MTIME 6
-#define FS_CTIME 7
-#define FS_TYPE 8
-#define FS_IS_W 9
-#define FS_IS_R 10
-#define FS_IS_X 11
-#define FS_IS_FILE 12
-#define FS_IS_DIR 13
-#define FS_IS_LINK 14
-#define FS_EXISTS 15
-#define FS_LSTAT 16
-#define FS_STAT 17
-
-#endif /* PHP_FILESTAT_H */
diff --git a/ext/standard/php_fopen_wrapper.c b/ext/standard/php_fopen_wrapper.c
deleted file mode 100644
index 4e53594326..0000000000
--- a/ext/standard/php_fopen_wrapper.c
+++ /dev/null
@@ -1,256 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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. |
- +----------------------------------------------------------------------+
- | Authors: Rasmus Lerdorf <rasmus@php.net> |
- | Jim Winstead <jimw@php.net> |
- | Hartmut Holzgraefe <hholzgra@php.net> |
- +----------------------------------------------------------------------+
- */
-/* $Id$ */
-
-#include <stdio.h>
-#include <stdlib.h>
-#if HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-
-#include "php.h"
-#include "php_globals.h"
-#include "php_standard.h"
-#include "php_fopen_wrappers.h"
-#include "SAPI.h"
-
-static size_t php_stream_output_write(php_stream *stream, const char *buf, size_t count TSRMLS_DC)
-{
- PHPWRITE(buf, count);
- return count;
-}
-
-static size_t php_stream_output_read(php_stream *stream, char *buf, size_t count TSRMLS_DC)
-{
- stream->eof = 1;
- return 0;
-}
-
-static int php_stream_output_close(php_stream *stream, int close_handle TSRMLS_DC)
-{
- 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,
- "Output",
- NULL, /* seek */
- NULL, /* cast */
- NULL, /* stat */
- NULL /* set_option */
-};
-
-static size_t php_stream_input_write(php_stream *stream, const char *buf, size_t count TSRMLS_DC)
-{
- return -1;
-}
-
-static size_t php_stream_input_read(php_stream *stream, char *buf, size_t count TSRMLS_DC)
-{
- size_t read_bytes = 0;
- if(!stream->eof) {
- if(SG(request_info).raw_post_data) { /* data has already been read by a post handler */
- read_bytes = SG(request_info).raw_post_data_length - stream->position;
- if(read_bytes <= count) {
- stream->eof = 1;
- } else {
- read_bytes = count;
- }
- if(read_bytes) {
- memcpy(buf, SG(request_info).raw_post_data + stream->position, read_bytes);
- }
- } else if(sapi_module.read_post) {
- read_bytes = sapi_module.read_post(buf, count TSRMLS_CC);
- if(read_bytes <= 0){
- stream->eof = 1;
- read_bytes = 0;
- }
- } else {
- stream->eof = 1;
- }
- }
-
- SG(read_post_bytes) += read_bytes;
- return read_bytes;
-}
-
-static int php_stream_input_close(php_stream *stream, int close_handle TSRMLS_DC)
-{
- return 0;
-}
-
-static int php_stream_input_flush(php_stream *stream TSRMLS_DC)
-{
- return -1;
-}
-
-php_stream_ops php_stream_input_ops = {
- php_stream_input_write,
- php_stream_input_read,
- php_stream_input_close,
- php_stream_input_flush,
- "Input",
- NULL, /* seek */
- NULL, /* cast */
- NULL, /* stat */
- NULL /* set_option */
-};
-
-static void php_stream_apply_filter_list(php_stream *stream, char *filterlist, int read_chain, int write_chain TSRMLS_DC) {
- char *p, *token;
- php_stream_filter *temp_filter;
-
- p = php_strtok_r(filterlist, "|", &token);
- while (p) {
- if (read_chain) {
- if ((temp_filter = php_stream_filter_create(p, NULL, php_stream_is_persistent(stream) TSRMLS_CC))) {
- php_stream_filter_append(&stream->readfilters, temp_filter);
- } else {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to create filter (%s)\n", p);
- }
- }
- if (write_chain) {
- if ((temp_filter = php_stream_filter_create(p, NULL, php_stream_is_persistent(stream) TSRMLS_CC))) {
- php_stream_filter_append(&stream->writefilters, temp_filter);
- } else {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to create filter (%s)\n", p);
- }
- }
- p = php_strtok_r(NULL, "|", &token);
- }
-}
-
-
-php_stream * php_stream_url_wrap_php(php_stream_wrapper *wrapper, char *path, char *mode, int options, char **opened_path, php_stream_context *context STREAMS_DC TSRMLS_DC)
-{
- int fd = -1;
- int mode_rw = 0;
- php_stream * stream = NULL;
- char *p, *token, *pathdup;
-
- if (!strncasecmp(path, "php://", 6))
- path += 6;
-
- if (!strcasecmp(path, "output")) {
- return php_stream_alloc(&php_stream_output_ops, NULL, 0, "wb");
- }
-
- if (!strcasecmp(path, "input")) {
- return php_stream_alloc(&php_stream_input_ops, NULL, 0, "rb");
- }
-
- if (!strcasecmp(path, "stdin")) {
- fd = !strcmp(sapi_module.name, "cli") ? STDIN_FILENO : dup(STDIN_FILENO);
- } else if (!strcasecmp(path, "stdout")) {
- fd = !strcmp(sapi_module.name, "cli") ? STDOUT_FILENO : dup(STDOUT_FILENO);
- } else if (!strcasecmp(path, "stderr")) {
- fd = !strcmp(sapi_module.name, "cli") ? STDERR_FILENO : dup(STDERR_FILENO);
- } else if (!strncasecmp(path, "filter/", 7)) {
- /* Save time/memory when chain isn't specified */
- if (strchr(mode, 'r') || strchr(mode, '+')) {
- mode_rw |= PHP_STREAM_FILTER_READ;
- }
- if (strchr(mode, 'w') || strchr(mode, '+') || strchr(mode, 'a')) {
- mode_rw |= PHP_STREAM_FILTER_WRITE;
- }
- pathdup = estrndup(path + 6, strlen(path + 6));
- p = strstr(pathdup, "/resource=");
- if (!p) {
- php_error_docref(NULL TSRMLS_CC, E_ERROR, "No URL resource specified.");
- efree(pathdup);
- return NULL;
- }
- if (!(stream = php_stream_open_wrapper(p + 10, mode, options, opened_path))) {
- efree(pathdup);
- return NULL;
- }
-
- *p = '\0';
-
- p = php_strtok_r(pathdup + 1, "/", &token);
- while (p) {
- if (!strncasecmp(p, "read=", 5)) {
- php_stream_apply_filter_list(stream, p + 5, 1, 0 TSRMLS_CC);
- } else if (!strncasecmp(p, "write=", 6)) {
- php_stream_apply_filter_list(stream, p + 6, 0, 1 TSRMLS_CC);
- } else {
- php_stream_apply_filter_list(stream, p, mode_rw & PHP_STREAM_FILTER_READ, mode_rw & PHP_STREAM_FILTER_WRITE TSRMLS_CC);
- }
- p = php_strtok_r(NULL, "/", &token);
- }
- efree(pathdup);
-
- return stream;
- } else {
- /* invalid php://thingy */
- return NULL;
- }
-
- /* must be stdin, stderr or stdout */
- if (fd == -1) {
- /* failed to dup */
- return NULL;
- }
-
- stream = php_stream_fopen_from_fd(fd, mode, NULL);
- if (stream == NULL) {
- close(fd);
- }
-
- return stream;
-}
-
-static php_stream_wrapper_ops php_stdio_wops = {
- php_stream_url_wrap_php,
- NULL, /* close */
- NULL, /* fstat */
- NULL, /* stat */
- NULL, /* opendir */
- "PHP",
- NULL, /* unlink */
- NULL, /* rename */
- NULL, /* mkdir */
- NULL /* rmdir */
-};
-
-php_stream_wrapper php_stream_php_wrapper = {
- &php_stdio_wops,
- NULL,
- 0, /* is_url */
-};
-
-
-/*
- * 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/standard/php_fopen_wrappers.h b/ext/standard/php_fopen_wrappers.h
deleted file mode 100644
index 539fe76432..0000000000
--- a/ext/standard/php_fopen_wrappers.h
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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. |
- +----------------------------------------------------------------------+
- | Authors: Rasmus Lerdorf <rasmus@php.net> |
- | Jim Winstead <jimw@php.net> |
- | Hartmut Holzgraefe <hholzgra@php.net> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifndef PHP_FOPEN_WRAPPERS_H
-#define PHP_FOPEN_WRAPPERS_H
-
-php_stream *php_stream_url_wrap_http(php_stream_wrapper *wrapper, char *path, char *mode, int options, char **opened_path, php_stream_context *context STREAMS_DC TSRMLS_DC);
-php_stream *php_stream_url_wrap_ftp(php_stream_wrapper *wrapper, char *path, char *mode, int options, char **opened_path, php_stream_context *context STREAMS_DC TSRMLS_DC);
-extern PHPAPI php_stream_wrapper php_stream_http_wrapper;
-extern PHPAPI php_stream_wrapper php_stream_ftp_wrapper;
-extern php_stream_wrapper php_stream_php_wrapper;
-extern php_stream_wrapper php_plain_files_wrapper;
-
-#endif
diff --git a/ext/standard/php_ftok.h b/ext/standard/php_ftok.h
deleted file mode 100644
index 6c86079afd..0000000000
--- a/ext/standard/php_ftok.h
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Andrew Sitnikov <sitnikov@infonet.ee> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifndef PHP_FTOK_H
-#define PHP_FTOK_H
-
-#if HAVE_FTOK
-PHP_FUNCTION(ftok);
-#endif
-
-#endif /* PHP_FTOK_H */
diff --git a/ext/standard/php_http.h b/ext/standard/php_http.h
deleted file mode 100644
index c97fda4ced..0000000000
--- a/ext/standard/php_http.h
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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. |
- +----------------------------------------------------------------------+
- | Authors: Sara Golemon <pollita@php.net> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifndef PHP_HTTP_H
-#define PHP_HTTP_H
-
-#include "php.h"
-#include "php_smart_str.h"
-
-PHPAPI int php_url_encode_hash_ex(HashTable *ht, smart_str *formstr,
- const char *num_prefix, int num_prefix_len,
- const char *key_prefix, int key_prefix_len,
- const char *key_suffix, int key_suffix_len,
- zval *type TSRMLS_DC);
-#define php_url_encode_hash(ht, formstr) php_url_encode_hash_ex((ht), (formstr), NULL, 0, NULL, 0, NULL, 0 TSRMLS_CC)
-
-PHP_FUNCTION(http_build_query);
-
-#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/standard/php_image.h b/ext/standard/php_image.h
deleted file mode 100644
index 613351bee5..0000000000
--- a/ext/standard/php_image.h
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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. |
- +----------------------------------------------------------------------+
- | Authors: Rasmus Lerdorf <rasmus@php.net> |
- | Marcus Boerger <helly@php.net> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifndef PHP_IMAGE_H
-#define PHP_IMAGE_H
-
-PHP_FUNCTION(getimagesize);
-
-PHP_FUNCTION(image_type_to_mime_type);
-PHP_FUNCTION(image_type_to_extension);
-
-/* {{{ enum image_filetype
- This enum is used to have ext/standard/image.c and ext/exif/exif.c use
- the same constants for file types.
-*/
-typedef enum
-{ IMAGE_FILETYPE_UNKNOWN=0,
- IMAGE_FILETYPE_GIF=1,
- IMAGE_FILETYPE_JPEG,
- IMAGE_FILETYPE_PNG,
- IMAGE_FILETYPE_SWF,
- IMAGE_FILETYPE_PSD,
- IMAGE_FILETYPE_BMP,
- IMAGE_FILETYPE_TIFF_II, /* intel */
- IMAGE_FILETYPE_TIFF_MM, /* motorola */
- IMAGE_FILETYPE_JPC,
- IMAGE_FILETYPE_JP2,
- IMAGE_FILETYPE_JPX,
- IMAGE_FILETYPE_JB2,
- IMAGE_FILETYPE_SWC,
- IMAGE_FILETYPE_IFF,
- IMAGE_FILETYPE_WBMP,
- /* IMAGE_FILETYPE_JPEG2000 is a userland alias for IMAGE_FILETYPE_JPC */
- IMAGE_FILETYPE_XBM
-/* WHEN EXTENDING: PLEASE ALSO REGISTER IN image.c:PHP_MINIT_FUNCTION(imagetypes) */
-} image_filetype;
-/* }}} */
-
-PHP_MINIT_FUNCTION(imagetypes);
-
-PHPAPI int php_getimagetype(php_stream *stream, char *filetype TSRMLS_DC);
-
-PHPAPI char * php_image_type_to_mime_type(int image_type);
-
-#endif /* PHP_IMAGE_H */
diff --git a/ext/standard/php_incomplete_class.h b/ext/standard/php_incomplete_class.h
deleted file mode 100644
index 8c7f68ae15..0000000000
--- a/ext/standard/php_incomplete_class.h
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Sascha Schumann <sascha@schumann.cx> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifndef PHP_INCOMPLETE_CLASS_H
-#define PHP_INCOMPLETE_CLASS_H
-
-#include "ext/standard/basic_functions.h"
-
-#define PHP_IC_ENTRY \
- BG(incomplete_class)
-
-#define PHP_SET_CLASS_ATTRIBUTES(struc) \
- /* OBJECTS_FIXME: Fix for new object model */ \
- if (Z_OBJCE_P(struc) == BG(incomplete_class)) { \
- class_name = php_lookup_class_name(struc, &name_len); \
- free_class_name = 1; \
- incomplete_class = 1; \
- } else { \
- class_name = Z_OBJCE_P(struc)->name; \
- name_len = Z_OBJCE_P(struc)->name_length; \
- }
-
-#define PHP_CLEANUP_CLASS_ATTRIBUTES() \
- if (free_class_name) efree(class_name)
-
-#define PHP_CLASS_ATTRIBUTES \
- char *class_name; \
- size_t name_len; \
- zend_bool free_class_name = 0; \
- zend_bool incomplete_class = 0
-
-#define INCOMPLETE_CLASS "__PHP_Incomplete_Class"
-#define MAGIC_MEMBER "__PHP_Incomplete_Class_Name"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-zend_class_entry *php_create_incomplete_class(TSRMLS_D);
-
-char *php_lookup_class_name(zval *object, size_t *nlen);
-void php_store_class_name(zval *object, const char *name, size_t len);
-
-#ifdef __cplusplus
-};
-#endif
-
-#endif
diff --git a/ext/standard/php_iptc.h b/ext/standard/php_iptc.h
deleted file mode 100644
index 720968fdc5..0000000000
--- a/ext/standard/php_iptc.h
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Thies C. Arntzen <thies@thieso.net> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifndef PHP_IPTC_H
-#define PHP_IPTC_H
-
-PHP_FUNCTION(iptcparse);
-PHP_FUNCTION(iptcembed);
-
-#endif /* PHP_IPTC_H */
diff --git a/ext/standard/php_lcg.h b/ext/standard/php_lcg.h
deleted file mode 100644
index d5dd3a473f..0000000000
--- a/ext/standard/php_lcg.h
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Sascha Schumann <sascha@schumann.cx> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifndef PHP_LCG_H
-#define PHP_LCG_H
-
-#include "ext/standard/basic_functions.h"
-
-typedef struct {
- php_int32 s1;
- php_int32 s2;
- int seeded;
-} php_lcg_globals;
-
-PHPAPI double php_combined_lcg(TSRMLS_D);
-PHP_FUNCTION(lcg_value);
-
-PHP_MINIT_FUNCTION(lcg);
-PHP_RINIT_FUNCTION(lcg);
-
-#ifdef ZTS
-#define LCG(v) TSRMG(lcg_globals_id, php_lcg_globals *, v)
-#else
-#define LCG(v) (lcg_globals.v)
-#endif
-
-#endif
diff --git a/ext/standard/php_link.h b/ext/standard/php_link.h
deleted file mode 100644
index 15b547a38a..0000000000
--- a/ext/standard/php_link.h
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifndef PHP_LINK_H
-#define PHP_LINK_H
-
-#ifdef HAVE_SYMLINK
-
-PHP_FUNCTION(link);
-PHP_FUNCTION(readlink);
-PHP_FUNCTION(linkinfo);
-PHP_FUNCTION(symlink);
-
-#endif
-
-#endif /* PHP_LINK_H */
diff --git a/ext/standard/php_mail.h b/ext/standard/php_mail.h
deleted file mode 100644
index 2472378ab6..0000000000
--- a/ext/standard/php_mail.h
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Rasmus Lerdorf <rasmus@lerdorf.on.ca> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifndef PHP_MAIL_H
-#define PHP_MAIL_H
-
-PHP_FUNCTION(mail);
-PHP_MINFO_FUNCTION(mail);
-
-#if HAVE_SENDMAIL
-
-PHP_FUNCTION(ezmlm_hash);
-PHPAPI extern int php_mail(char *to, char *subject, char *message, char *headers, char *extra_cmd TSRMLS_DC);
-
-#endif
-
-#endif /* PHP_MAIL_H */
diff --git a/ext/standard/php_math.h b/ext/standard/php_math.h
deleted file mode 100644
index 2f1c005787..0000000000
--- a/ext/standard/php_math.h
+++ /dev/null
@@ -1,160 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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. |
- +----------------------------------------------------------------------+
- | Authors: Jim Winstead <jimw@php.net> |
- | Stig Sæther Bakken <ssb@php.net> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifndef PHP_MATH_H
-#define PHP_MATH_H
-
-PHPAPI char *_php_math_number_format(double, int, char , char);
-
-PHP_FUNCTION(sin);
-PHP_FUNCTION(cos);
-PHP_FUNCTION(tan);
-PHP_FUNCTION(asin);
-PHP_FUNCTION(acos);
-PHP_FUNCTION(atan);
-PHP_FUNCTION(atan2);
-PHP_FUNCTION(pi);
-PHP_FUNCTION(exp);
-PHP_FUNCTION(log);
-PHP_FUNCTION(log10);
-PHP_FUNCTION(is_finite);
-PHP_FUNCTION(is_infinite);
-PHP_FUNCTION(is_nan);
-PHP_FUNCTION(pow);
-PHP_FUNCTION(sqrt);
-PHP_FUNCTION(srand);
-PHP_FUNCTION(rand);
-PHP_FUNCTION(getrandmax);
-PHP_FUNCTION(mt_srand);
-PHP_FUNCTION(mt_rand);
-PHP_FUNCTION(mt_getrandmax);
-PHP_FUNCTION(abs);
-PHP_FUNCTION(ceil);
-PHP_FUNCTION(floor);
-PHP_FUNCTION(round);
-PHP_FUNCTION(decbin);
-PHP_FUNCTION(dechex);
-PHP_FUNCTION(decoct);
-PHP_FUNCTION(bindec);
-PHP_FUNCTION(hexdec);
-PHP_FUNCTION(octdec);
-PHP_FUNCTION(base_convert);
-PHP_FUNCTION(number_format);
-PHP_FUNCTION(fmod);
-PHP_FUNCTION(deg2rad);
-PHP_FUNCTION(rad2deg);
-
- /*
- WARNING: these functions are expermental: they could change their names or
- disappear in the next version of PHP!
- */
-#ifdef HAVE_HYPOT
-PHP_FUNCTION(hypot);
-#endif
-PHP_FUNCTION(expm1);
-PHP_FUNCTION(log1p);
-
-
-PHP_FUNCTION(sinh);
-PHP_FUNCTION(cosh);
-PHP_FUNCTION(tanh);
-
-#ifdef HAVE_ASINH
-PHP_FUNCTION(asinh);
-#endif
-#ifdef HAVE_ACOSH
-PHP_FUNCTION(acosh);
-#endif
-#ifdef HAVE_ATANH
-PHP_FUNCTION(atanh);
-#endif
-
-#include <math.h>
-
-#ifndef M_E
-#define M_E 2.7182818284590452354 /* e */
-#endif
-
-#ifndef M_LOG2E
-#define M_LOG2E 1.4426950408889634074 /* log_2 e */
-#endif
-
-#ifndef M_LOG10E
-#define M_LOG10E 0.43429448190325182765 /* log_10 e */
-#endif
-
-#ifndef M_LN2
-#define M_LN2 0.69314718055994530942 /* log_e 2 */
-#endif
-
-#ifndef M_LN10
-#define M_LN10 2.30258509299404568402 /* log_e 10 */
-#endif
-
-#ifndef M_PI
-#define M_PI 3.14159265358979323846 /* pi */
-#endif
-
-#ifndef M_PI_2
-#define M_PI_2 1.57079632679489661923 /* pi/2 */
-#endif
-
-#ifndef M_PI_4
-#define M_PI_4 0.78539816339744830962 /* pi/4 */
-#endif
-
-#ifndef M_1_PI
-#define M_1_PI 0.31830988618379067154 /* 1/pi */
-#endif
-
-#ifndef M_2_PI
-#define M_2_PI 0.63661977236758134308 /* 2/pi */
-#endif
-
-#ifndef M_SQRTPI
-#define M_SQRTPI 1.77245385090551602729 /* sqrt(pi) */
-#endif
-
-#ifndef M_2_SQRTPI
-#define M_2_SQRTPI 1.12837916709551257390 /* 2/sqrt(pi) */
-#endif
-
-#ifndef M_LNPI
-#define M_LNPI 1.14472988584940017414 /* ln(pi) */
-#endif
-
-#ifndef M_EULER
-#define M_EULER 0.57721566490153286061 /* Euler constant */
-#endif
-
-#ifndef M_SQRT2
-#define M_SQRT2 1.41421356237309504880 /* sqrt(2) */
-#endif
-
-#ifndef M_SQRT1_2
-#define M_SQRT1_2 0.70710678118654752440 /* 1/sqrt(2) */
-#endif
-
-#ifndef M_SQRT3
-#define M_SQRT3 1.73205080756887729352 /* sqrt(3) */
-#endif
-
-#endif /* PHP_MATH_H */
diff --git a/ext/standard/php_metaphone.h b/ext/standard/php_metaphone.h
deleted file mode 100644
index 18601f9931..0000000000
--- a/ext/standard/php_metaphone.h
+++ /dev/null
@@ -1,26 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Thies C. Arntzen <thies@thieso.net> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-#ifndef PHP_METAPHONE_H
-#define PHP_METAPHONE_H
-
-PHP_FUNCTION(metaphone);
-
-#endif
diff --git a/ext/standard/php_parsedate.h b/ext/standard/php_parsedate.h
deleted file mode 100644
index 7d96c3fc0e..0000000000
--- a/ext/standard/php_parsedate.h
+++ /dev/null
@@ -1,26 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Sascha Schumann <sascha@schumann.cx> |
- +----------------------------------------------------------------------+
- */
-
-#ifndef PHP_PARSEDATE_H
-#define PHP_PARSEDATE_H
-
-#include <time.h>
-
-time_t php_parse_date(char *p, time_t *now);
-
-#endif
diff --git a/ext/standard/php_rand.h b/ext/standard/php_rand.h
deleted file mode 100644
index 1638a7ace7..0000000000
--- a/ext/standard/php_rand.h
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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. |
- +----------------------------------------------------------------------+
- | Authors: Rasmus Lerdorf <rasmus@php.net> |
- | Zeev Suraski <zeev@zend.com> |
- | Pedro Melo <melo@ip.pt> |
- | Sterling Hughes <sterling@php.net> |
- | |
- | Based on code from: Shawn Cokus <Cokus@math.washington.edu> |
- +----------------------------------------------------------------------+
- */
-/* $Id$ */
-
-#ifndef PHP_RAND_H
-#define PHP_RAND_H
-
-#include <stdlib.h>
-#include "basic_functions.h"
-
-/* System Rand functions */
-#ifndef RAND_MAX
-#define RAND_MAX (1<<15)
-#endif
-
-/* In ZTS mode we rely on rand_r() so we must use RAND_MAX. */
-#if !defined(ZTS) && (defined(HAVE_LRAND48) || defined(HAVE_RANDOM))
-#define PHP_RAND_MAX 2147483647
-#else
-#define PHP_RAND_MAX RAND_MAX
-#endif
-
-#define RAND_RANGE(__n, __min, __max, __tmax) \
- (__n) = (__min) + (long) ((double) ( (double) (__max) - (__min) + 1.0) * ((__n) / ((__tmax) + 1.0)))
-
-/* MT Rand */
-#define PHP_MT_RAND_MAX ((long) (0x7FFFFFFF)) /* (1<<31) - 1 */
-
-#ifdef PHP_WIN32
-#define GENERATE_SEED() ((long) (time(0) * GetCurrentProcessId() * 1000000 * php_combined_lcg(TSRMLS_C)))
-#else
-#define GENERATE_SEED() ((long) (time(0) * getpid() * 1000000 * php_combined_lcg(TSRMLS_C)))
-#endif
-
-PHPAPI void php_srand(long seed TSRMLS_DC);
-PHPAPI long php_rand(TSRMLS_D);
-PHPAPI void php_mt_srand(php_uint32 seed TSRMLS_DC);
-PHPAPI php_uint32 php_mt_rand(TSRMLS_D);
-
-#endif /* PHP_RAND_H */
diff --git a/ext/standard/php_smart_str.h b/ext/standard/php_smart_str.h
deleted file mode 100644
index a659a94d59..0000000000
--- a/ext/standard/php_smart_str.h
+++ /dev/null
@@ -1,193 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Sascha Schumann <sascha@schumann.cx> |
- +----------------------------------------------------------------------+
- */
-
-#ifndef PHP_SMART_STR_H
-#define PHP_SMART_STR_H
-
-#include "php_smart_str_public.h"
-
-#include <stdlib.h>
-#ifndef SMART_STR_USE_REALLOC
-#include <zend.h>
-#endif
-
-#define smart_str_0(x) do { \
- if ((x)->c) { \
- (x)->c[(x)->len] = '\0'; \
- } \
-} while (0)
-
-#ifndef SMART_STR_PREALLOC
-#define SMART_STR_PREALLOC 128
-#endif
-
-#ifndef SMART_STR_START_SIZE
-#define SMART_STR_START_SIZE 78
-#endif
-
-#ifdef SMART_STR_USE_REALLOC
-#define SMART_STR_REALLOC(a,b,c) realloc((a),(b))
-#else
-#define SMART_STR_REALLOC(a,b,c) perealloc((a),(b),(c))
-#endif
-
-#define SMART_STR_DO_REALLOC(d, what) \
- (d)->c = SMART_STR_REALLOC((d)->c, (d)->a + 1, (what))
-
-#define smart_str_alloc4(d, n, what, newlen) do { \
- if (!(d)->c) { \
- (d)->len = 0; \
- newlen = (n); \
- (d)->a = newlen < SMART_STR_START_SIZE \
- ? SMART_STR_START_SIZE \
- : newlen + SMART_STR_PREALLOC; \
- SMART_STR_DO_REALLOC(d, what); \
- } else { \
- newlen = (d)->len + (n); \
- if (newlen >= (d)->a) { \
- (d)->a = newlen + SMART_STR_PREALLOC; \
- SMART_STR_DO_REALLOC(d, what); \
- } \
- } \
-} while (0)
-
-#define smart_str_alloc(d, n, what) \
- smart_str_alloc4((d), (n), (what), newlen)
-
-/* wrapper */
-
-#define smart_str_appends_ex(dest, src, what) \
- smart_str_appendl_ex((dest), (src), strlen(src), (what))
-#define smart_str_appends(dest, src) \
- smart_str_appendl((dest), (src), strlen(src))
-
-#define smart_str_appendc(dest, c) \
- smart_str_appendc_ex((dest), (c), 0)
-#define smart_str_free(s) \
- smart_str_free_ex((s), 0)
-#define smart_str_appendl(dest, src, len) \
- smart_str_appendl_ex((dest), (src), (len), 0)
-#define smart_str_append(dest, src) \
- smart_str_append_ex((dest), (src), 0)
-#define smart_str_append_long(dest, val) \
- smart_str_append_long_ex((dest), (val), 0)
-#define smart_str_append_off_t(dest, val) \
- smart_str_append_off_t_ex((dest), (val), 0)
-#define smart_str_append_unsigned(dest, val) \
- smart_str_append_unsigned_ex((dest), (val), 0)
-
-#define smart_str_appendc_ex(dest, ch, what) do { \
- register size_t __nl; \
- smart_str_alloc4((dest), 1, (what), __nl); \
- (dest)->len = __nl; \
- ((unsigned char *) (dest)->c)[(dest)->len - 1] = (ch); \
-} while (0)
-
-#define smart_str_free_ex(s, what) do { \
- smart_str *__s = (smart_str *) (s); \
- if (__s->c) { \
- pefree(__s->c, what); \
- __s->c = NULL; \
- } \
- __s->a = __s->len = 0; \
-} while (0)
-
-#define smart_str_appendl_ex(dest, src, nlen, what) do { \
- register size_t __nl; \
- smart_str *__dest = (smart_str *) (dest); \
- \
- smart_str_alloc4(__dest, (nlen), (what), __nl); \
- memcpy(__dest->c + __dest->len, (src), (nlen)); \
- __dest->len = __nl; \
-} while (0)
-
-/* input: buf points to the END of the buffer */
-#define smart_str_print_unsigned4(buf, num, vartype, result) do { \
- char *__p = (buf); \
- vartype __num = (num); \
- *__p = '\0'; \
- do { \
- *--__p = (char) (__num % 10) + '0'; \
- __num /= 10; \
- } while (__num > 0); \
- result = __p; \
-} while (0)
-
-/* buf points to the END of the buffer */
-#define smart_str_print_long4(buf, num, vartype, result) do { \
- if (num < 0) { \
- /* this might cause problems when dealing with LONG_MIN \
- and machines which don't support long long. Works \
- flawlessly on 32bit x86 */ \
- smart_str_print_unsigned4((buf), -(num), vartype, (result)); \
- *--(result) = '-'; \
- } else { \
- smart_str_print_unsigned4((buf), (num), vartype, (result)); \
- } \
-} while (0)
-
-/*
- * these could be replaced using a braced-group inside an expression
- * for GCC compatible compilers, e.g.
- *
- * #define f(..) ({char *r;..;__r;})
- */
-
-static inline char *smart_str_print_long(char *buf, long num) {
- char *r;
- smart_str_print_long4(buf, num, unsigned long, r);
- return r;
-}
-
-static inline char *smart_str_print_unsigned(char *buf, long num) {
- char *r;
- smart_str_print_unsigned4(buf, num, unsigned long, r);
- return r;
-}
-
-#define smart_str_append_generic_ex(dest, num, type, vartype, func) do { \
- char __b[32]; \
- char *__t; \
- smart_str_print##func##4 (__b + sizeof(__b) - 1, (num), vartype, __t); \
- smart_str_appendl_ex((dest), __t, __b + sizeof(__b) - 1 - __t, (type)); \
-} while (0)
-
-#define smart_str_append_unsigned_ex(dest, num, type) \
- smart_str_append_generic_ex((dest), (num), (type), unsigned long, _unsigned)
-
-#define smart_str_append_long_ex(dest, num, type) \
- smart_str_append_generic_ex((dest), (num), (type), unsigned long, _long)
-
-#define smart_str_append_off_t_ex(dest, num, type) \
- smart_str_append_generic_ex((dest), (num), (type), off_t, _long)
-
-#define smart_str_append_ex(dest, src, what) \
- smart_str_appendl_ex((dest), ((smart_str *)(src))->c, \
- ((smart_str *)(src))->len, (what));
-
-
-#define smart_str_setl(dest, src, nlen) do { \
- (dest)->len = (nlen); \
- (dest)->a = (nlen) + 1; \
- (dest)->c = (char *) (src); \
-} while (0)
-
-#define smart_str_sets(dest, src) \
- smart_str_setl((dest), (src), strlen(src));
-
-#endif
diff --git a/ext/standard/php_smart_str_public.h b/ext/standard/php_smart_str_public.h
deleted file mode 100644
index 79f5d22e27..0000000000
--- a/ext/standard/php_smart_str_public.h
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Sascha Schumann <sascha@schumann.cx> |
- +----------------------------------------------------------------------+
- */
-
-#ifndef PHP_SMART_STR_PUBLIC_H
-#define PHP_SMART_STR_PUBLIC_H
-
-#include <sys/types.h>
-
-typedef struct {
- char *c;
- size_t len;
- size_t a;
-} smart_str;
-
-#endif
diff --git a/ext/standard/php_standard.h b/ext/standard/php_standard.h
deleted file mode 100644
index 485c289f2a..0000000000
--- a/ext/standard/php_standard.h
+++ /dev/null
@@ -1,74 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#include "basic_functions.h"
-#include "php_math.h"
-#include "php_string.h"
-#include "base64.h"
-#include "php_dir.h"
-#include "dns.h"
-#include "reg.h"
-#include "php_mail.h"
-#include "md5.h"
-#include "sha1.h"
-#include "html.h"
-#include "exec.h"
-#include "file.h"
-#include "php_ext_syslog.h"
-#include "php_filestat.h"
-#include "php_browscap.h"
-#include "pack.h"
-#include "datetime.h"
-#include "microtime.h"
-#include "url.h"
-#include "pageinfo.h"
-#include "cyr_convert.h"
-#include "php_link.h"
-#include "fsock.h"
-#include "php_image.h"
-#include "php_iptc.h"
-#include "info.h"
-#include "uniqid.h"
-#include "php_var.h"
-#include "quot_print.h"
-#include "dl.h"
-#include "php_crypt.h"
-#include "head.h"
-#include "php_lcg.h"
-#include "php_metaphone.h"
-#include "php_output.h"
-#include "php_array.h"
-#include "php_assert.h"
-#include "php_versioning.h"
-#include "php_ftok.h"
-#include "php_type.h"
-#include "php_sunfuncs.h"
-
-#define phpext_standard_ptr basic_functions_module_ptr
-PHP_MINIT_FUNCTION(standard_filters);
-PHP_MSHUTDOWN_FUNCTION(standard_filters);
-
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- */
diff --git a/ext/standard/php_string.h b/ext/standard/php_string.h
deleted file mode 100644
index 3097d4f114..0000000000
--- a/ext/standard/php_string.h
+++ /dev/null
@@ -1,159 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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. |
- +----------------------------------------------------------------------+
- | Authors: Rasmus Lerdorf <rasmus@php.net> |
- | Stig Sæther Bakken <ssb@php.net> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-/* Synced with php 3.0 revision 1.43 1999-06-16 [ssb] */
-
-#ifndef PHP_STRING_H
-#define PHP_STRING_H
-
-PHP_FUNCTION(strspn);
-PHP_FUNCTION(strcspn);
-PHP_FUNCTION(str_replace);
-PHP_FUNCTION(str_ireplace);
-PHP_FUNCTION(rtrim);
-PHP_FUNCTION(trim);
-PHP_FUNCTION(ltrim);
-PHP_FUNCTION(soundex);
-PHP_FUNCTION(levenshtein);
-
-PHP_FUNCTION(count_chars);
-PHP_FUNCTION(wordwrap);
-PHP_FUNCTION(explode);
-PHP_FUNCTION(implode);
-PHP_FUNCTION(strtok);
-PHP_FUNCTION(strtoupper);
-PHP_FUNCTION(strtolower);
-PHP_FUNCTION(basename);
-PHP_FUNCTION(dirname);
-PHP_FUNCTION(pathinfo);
-PHP_FUNCTION(strstr);
-PHP_FUNCTION(strpos);
-PHP_FUNCTION(stripos);
-PHP_FUNCTION(strrpos);
-PHP_FUNCTION(strripos);
-PHP_FUNCTION(strrchr);
-PHP_FUNCTION(substr);
-PHP_FUNCTION(quotemeta);
-PHP_FUNCTION(ucfirst);
-PHP_FUNCTION(ucwords);
-PHP_FUNCTION(strtr);
-PHP_FUNCTION(strrev);
-PHP_FUNCTION(hebrev);
-PHP_FUNCTION(hebrevc);
-PHP_FUNCTION(user_sprintf);
-PHP_FUNCTION(user_printf);
-PHP_FUNCTION(vprintf);
-PHP_FUNCTION(vsprintf);
-PHP_FUNCTION(addcslashes);
-PHP_FUNCTION(addslashes);
-PHP_FUNCTION(stripcslashes);
-PHP_FUNCTION(stripslashes);
-PHP_FUNCTION(chr);
-PHP_FUNCTION(ord);
-PHP_FUNCTION(nl2br);
-PHP_FUNCTION(setlocale);
-PHP_FUNCTION(localeconv);
-PHP_FUNCTION(nl_langinfo);
-PHP_FUNCTION(stristr);
-PHP_FUNCTION(chunk_split);
-PHP_FUNCTION(parse_str);
-PHP_FUNCTION(bin2hex);
-PHP_FUNCTION(similar_text);
-PHP_FUNCTION(strip_tags);
-PHP_FUNCTION(str_repeat);
-PHP_FUNCTION(substr_replace);
-PHP_FUNCTION(strnatcmp);
-PHP_FUNCTION(strnatcasecmp);
-PHP_FUNCTION(substr_count);
-PHP_FUNCTION(str_pad);
-PHP_FUNCTION(sscanf);
-PHP_FUNCTION(str_shuffle);
-PHP_FUNCTION(str_word_count);
-PHP_FUNCTION(str_split);
-PHP_FUNCTION(strpbrk);
-PHP_FUNCTION(substr_compare);
-#ifdef HAVE_STRCOLL
-PHP_FUNCTION(strcoll);
-#endif
-#if HAVE_STRFMON
-PHP_FUNCTION(money_format);
-#endif
-
-#if defined(HAVE_LOCALECONV) && defined(ZTS)
-PHP_MINIT_FUNCTION(localeconv);
-PHP_MSHUTDOWN_FUNCTION(localeconv);
-#endif
-#if HAVE_NL_LANGINFO
-PHP_MINIT_FUNCTION(nl_langinfo);
-#endif
-
-#define strnatcmp(a, b) \
- strnatcmp_ex(a, strlen(a), b, strlen(b), 0)
-#define strnatcasecmp(a, b) \
- strnatcmp_ex(a, strlen(a), b, strlen(b), 1)
-PHPAPI int strnatcmp_ex(char const *a, size_t a_len, char const *b, size_t b_len, int fold_case);
-
-#ifdef HAVE_LOCALECONV
-struct lconv *localeconv_r(struct lconv *out);
-#endif
-
-PHPAPI char *php_strtoupper(char *s, size_t len);
-PHPAPI char *php_strtolower(char *s, size_t len);
-PHPAPI char *php_strtr(char *str, int len, char *str_from, char *str_to, int trlen);
-PHPAPI char *php_addslashes(char *str, int length, int *new_length, int freeit TSRMLS_DC);
-PHPAPI char *php_addcslashes(char *str, int length, int *new_length, int freeit, char *what, int wlength TSRMLS_DC);
-PHPAPI void php_stripslashes(char *str, int *len TSRMLS_DC);
-PHPAPI void php_stripcslashes(char *str, int *len);
-PHPAPI void php_basename(char *s, size_t len, char *suffix, size_t sufflen, char **p_ret, size_t *p_len TSRMLS_DC);
-PHPAPI size_t php_dirname(char *str, size_t len);
-PHPAPI char *php_stristr(unsigned char *s, unsigned char *t, size_t s_len, size_t t_len);
-PHPAPI char *php_str_to_str_ex(char *haystack, int length, char *needle,
- int needle_len, char *str, int str_len, int *_new_length, int case_sensitivity, int *replace_count);
-PHPAPI char *php_str_to_str(char *haystack, int length, char *needle,
- int needle_len, char *str, int str_len, int *_new_length);
-PHPAPI char *php_trim(char *c, int len, char *what, int what_len, zval *return_value, int mode TSRMLS_DC);
-PHPAPI size_t php_strip_tags(char *rbuf, int len, int *state, char *allow, int allow_len);
-PHPAPI int php_char_to_str_ex(char *str, uint len, char from, char *to, int to_len, pval *result, int case_sensitivity, int *replace_count);
-PHPAPI int php_char_to_str(char *str, uint len, char from, char *to, int to_len, pval *result);
-PHPAPI void php_implode(zval *delim, zval *arr, zval *return_value);
-PHPAPI void php_explode(zval *delim, zval *str, zval *return_value, int limit);
-
-PHPAPI size_t php_strspn(char *s1, char *s2, char *s1_end, char *s2_end);
-PHPAPI size_t php_strcspn(char *s1, char *s2, char *s1_end, char *s2_end);
-
-#ifndef HAVE_STRERROR
-PHPAPI char *php_strerror(int errnum);
-#define strerror php_strerror
-#endif
-
-#ifndef HAVE_MBLEN
-# define php_mblen(ptr, len) 1
-#else
-# if defined(_REENTRANT) && defined(HAVE_MBRLEN) && defined(HAVE_MBSTATE_T)
-# define php_mblen(ptr, len) ((ptr) == NULL ? mbsinit(&BG(mblen_state)): (int)mbrlen(ptr, len, &BG(mblen_state)))
-# else
-# define php_mblen(ptr, len) mblen(ptr, len)
-# endif
-#endif
-
-void register_string_constants(INIT_FUNC_ARGS);
-
-#endif /* PHP_STRING_H */
diff --git a/ext/standard/php_sunfuncs.h b/ext/standard/php_sunfuncs.h
deleted file mode 100644
index b47888c89b..0000000000
--- a/ext/standard/php_sunfuncs.h
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Moshe Doron <mosdoron@netvision.net.il> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifndef PHP_SUNFUNCS_H
-#define PHP_SUNFUNCS_H
-
-/* default ini entries: */
-/* Jerusalem one. */
-#define DATE_DEFAULT_LATITUDE "31.7667"
-#define DATE_DEFAULT_LONGITUDE "35.2333"
-
-/* on 90'50; common jewish sunset declaration (start of sun body appear) */
-#define DATE_SUNSET_ZENITH "90.83"
-
-/* on 90'50; common jewish sunrise declaration (sun body disappeared) */
-#define DATE_SUNRISE_ZENITH "90.83"
-
-#define SUNFUNCS_RET_TIMESTAMP 0
-#define SUNFUNCS_RET_STRING 1
-#define SUNFUNCS_RET_DOUBLE 2
-
-PHP_FUNCTION(date_sunrise);
-PHP_FUNCTION(date_sunset);
-
-#endif /* PHP_SUNFUNCS_H */
diff --git a/ext/standard/php_type.h b/ext/standard/php_type.h
deleted file mode 100644
index 5b5d7c3883..0000000000
--- a/ext/standard/php_type.h
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Rasmus Lerdorf <rasmus@lerdorf.on.ca> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifndef PHP_TYPE_H
-#define PHP_TYPE_H
-
-PHP_FUNCTION(intval);
-PHP_FUNCTION(floatval);
-PHP_FUNCTION(strval);
-PHP_FUNCTION(gettype);
-PHP_FUNCTION(settype);
-PHP_FUNCTION(is_null);
-PHP_FUNCTION(is_resource);
-PHP_FUNCTION(is_bool);
-PHP_FUNCTION(is_long);
-PHP_FUNCTION(is_float);
-PHP_FUNCTION(is_numeric);
-PHP_FUNCTION(is_string);
-PHP_FUNCTION(is_array);
-PHP_FUNCTION(is_object);
-PHP_FUNCTION(is_scalar);
-PHP_FUNCTION(is_callable);
-
-#endif
diff --git a/ext/standard/php_uuencode.h b/ext/standard/php_uuencode.h
deleted file mode 100644
index e32b22adf8..0000000000
--- a/ext/standard/php_uuencode.h
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Ilia Alshanetsky <ilia@php.net> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifndef PHP_UUENCODE_H
-#define PHP_UUENCODE_H
-
-PHP_FUNCTION(convert_uudecode);
-PHP_FUNCTION(convert_uuencode);
-
-PHPAPI int php_uudecode(char *src, int src_len, char **dest);
-PHPAPI int php_uuencode(char *src, int src_len, char **dest);
-
-#endif /* PHP_UUENCODE_H */
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- */
diff --git a/ext/standard/php_var.h b/ext/standard/php_var.h
deleted file mode 100644
index c17929afa6..0000000000
--- a/ext/standard/php_var.h
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Jani Lehtimäki <jkl@njet.net> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifndef PHP_VAR_H
-#define PHP_VAR_H
-
-#include "ext/standard/php_smart_str_public.h"
-
-PHP_FUNCTION(var_dump);
-PHP_FUNCTION(var_export);
-PHP_FUNCTION(debug_zval_dump);
-PHP_FUNCTION(serialize);
-PHP_FUNCTION(unserialize);
-#if MEMORY_LIMIT
-PHP_FUNCTION(memory_get_usage);
-#endif
-
-PHPAPI void php_var_dump(zval **struc, int level TSRMLS_DC);
-PHPAPI void php_var_export(zval **struc, int level TSRMLS_DC);
-PHPAPI void php_debug_zval_dump(zval **struc, int level TSRMLS_DC);
-
-/* typdef HashTable php_serialize_data_t; */
-#define php_serialize_data_t HashTable
-
-struct php_unserialize_data {
- void *first;
-};
-
-typedef struct php_unserialize_data php_unserialize_data_t;
-
-PHPAPI void php_var_serialize(smart_str *buf, zval **struc, php_serialize_data_t *var_hash TSRMLS_DC);
-PHPAPI int php_var_unserialize(zval **rval, const unsigned char **p, const unsigned char *max, php_unserialize_data_t *var_hash TSRMLS_DC);
-
-#define PHP_VAR_SERIALIZE_INIT(var_hash) \
- zend_hash_init(&(var_hash), 10, NULL, NULL, 0)
-#define PHP_VAR_SERIALIZE_DESTROY(var_hash) \
- zend_hash_destroy(&(var_hash))
-
-#define PHP_VAR_UNSERIALIZE_INIT(var_hash) \
- (var_hash).first = 0
-#define PHP_VAR_UNSERIALIZE_DESTROY(var_hash) \
- var_destroy(&(var_hash))
-
-PHPAPI void var_replace(php_unserialize_data_t *var_hash, zval *ozval, zval **nzval);
-PHPAPI void var_destroy(php_unserialize_data_t *var_hash);
-
-#define PHP_VAR_UNSERIALIZE_ZVAL_CHANGED(var_hash, ozval, nzval) \
- var_replace((var_hash), (ozval), &(nzval))
-
-PHPAPI zend_class_entry *php_create_empty_class(char *class_name, int len);
-
-#endif /* PHP_VAR_H */
diff --git a/ext/standard/php_versioning.h b/ext/standard/php_versioning.h
deleted file mode 100644
index 772c41204d..0000000000
--- a/ext/standard/php_versioning.h
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Stig Sæther Bakken <ssb@php.net> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifndef PHP_VERSIONING_H
-#define PHP_VERSIONING_H
-
-#include "ext/standard/basic_functions.h"
-
-PHPAPI char *php_canonicalize_version(const char *);
-PHPAPI int php_version_compare(const char *, const char *);
-PHP_FUNCTION(version_compare);
-
-#endif
diff --git a/ext/standard/proc_open.c b/ext/standard/proc_open.c
deleted file mode 100644
index 8b036faea4..0000000000
--- a/ext/standard/proc_open.c
+++ /dev/null
@@ -1,919 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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@thebrainroom.com> |
- +----------------------------------------------------------------------+
- */
-/* $Id$ */
-
-#if 0 && (defined(__linux__) || defined(sun) || defined(__IRIX__))
-# define _BSD_SOURCE /* linux wants this when XOPEN mode is on */
-# define _BSD_COMPAT /* irix: uint */
-# define _XOPEN_SOURCE 500 /* turn on Unix98 */
-# define __EXTENSIONS__ 1 /* Solaris: uint */
-#endif
-
-#include "php.h"
-#include <stdio.h>
-#include <ctype.h>
-#include "php_string.h"
-#include "safe_mode.h"
-#include "ext/standard/head.h"
-#include "ext/standard/file.h"
-#include "exec.h"
-#include "php_globals.h"
-#include "SAPI.h"
-
-#if HAVE_SYS_WAIT_H
-#include <sys/wait.h>
-#endif
-#if HAVE_SIGNAL_H
-#include <signal.h>
-#endif
-
-#if HAVE_SYS_STAT_H
-#include <sys/stat.h>
-#endif
-#if HAVE_FCNTL_H
-#include <fcntl.h>
-#endif
-
-/* This symbol is defined in ext/standard/config.m4.
- * Essentially, it is set if you HAVE_FORK || PHP_WIN32
- * Otherplatforms may modify that configure check and add suitable #ifdefs
- * around the alternate code.
- * */
-#ifdef PHP_CAN_SUPPORT_PROC_OPEN
-
-#if 0 && HAVE_PTSNAME && HAVE_GRANTPT && HAVE_UNLOCKPT && HAVE_SYS_IOCTL_H && HAVE_TERMIOS_H
-# include <sys/ioctl.h>
-# include <termios.h>
-# define PHP_CAN_DO_PTS 1
-#endif
-
-#include "proc_open.h"
-
-static int le_proc_open;
-
-/* {{{ _php_array_to_envp */
-static php_process_env_t _php_array_to_envp(zval *environment, int is_persistent TSRMLS_DC)
-{
- zval **element;
- php_process_env_t env;
- char *string_key, *data;
-#ifndef PHP_WIN32
- char **ep;
-#endif
- char *p;
- uint string_length, cnt, l, sizeenv=0, el_len;
- ulong num_key;
- HashTable *target_hash;
- HashPosition pos;
-
- memset(&env, 0, sizeof(env));
-
- if (!environment) {
- return env;
- }
-
- cnt = zend_hash_num_elements(Z_ARRVAL_P(environment));
-
- if (cnt < 1) {
- return env;
- }
-
- target_hash = HASH_OF(environment);
- if (!target_hash) {
- return env;
- }
-
- /* first, we have to get the size of all the elements in the hash */
- for (zend_hash_internal_pointer_reset_ex(target_hash, &pos);
- zend_hash_get_current_data_ex(target_hash, (void **) &element, &pos) == SUCCESS;
- zend_hash_move_forward_ex(target_hash, &pos)) {
-
- convert_to_string_ex(element);
- el_len = Z_STRLEN_PP(element);
- if (el_len == 0) {
- continue;
- }
-
- sizeenv += el_len+1;
-
- switch (zend_hash_get_current_key_ex(target_hash, &string_key, &string_length, &num_key, 0, &pos)) {
- case HASH_KEY_IS_STRING:
- if (string_length == 0) {
- continue;
- }
- sizeenv += string_length+1;
- break;
- }
- }
-
-#ifndef PHP_WIN32
- ep = env.envarray = (char **) pecalloc(cnt + 1, sizeof(char *), is_persistent);
-#endif
- p = env.envp = (char *) pecalloc(sizeenv + 4, 1, is_persistent);
-
- for (zend_hash_internal_pointer_reset_ex(target_hash, &pos);
- zend_hash_get_current_data_ex(target_hash, (void **) &element, &pos) == SUCCESS;
- zend_hash_move_forward_ex(target_hash, &pos)) {
-
- convert_to_string_ex(element);
- el_len = Z_STRLEN_PP(element);
-
- if (el_len == 0) {
- continue;
- }
-
- data = Z_STRVAL_PP(element);
- switch (zend_hash_get_current_key_ex(target_hash, &string_key, &string_length, &num_key, 0, &pos)) {
- case HASH_KEY_IS_STRING:
- if (string_length == 0) {
- continue;
- }
- l = string_length + el_len + 1;
- memcpy(p, string_key, string_length);
- strcat(p, "=");
- strcat(p, data);
-
-#ifndef PHP_WIN32
- *ep = p;
- ++ep;
-#endif
- p += l;
- break;
- case HASH_KEY_IS_LONG:
- memcpy(p,data,el_len);
-#ifndef PHP_WIN32
- *ep = p;
- ++ep;
-#endif
- p += el_len + 1;
- break;
- case HASH_KEY_NON_EXISTANT:
- break;
- }
- }
-
- assert(p - env.envp <= sizeenv);
-
- zend_hash_internal_pointer_reset_ex(target_hash, &pos);
-
- return env;
-}
-/* }}} */
-
-/* {{{ _php_free_envp */
-static void _php_free_envp(php_process_env_t env, int is_persistent)
-{
-#ifndef PHP_WIN32
- if (env.envarray) {
- pefree(env.envarray, is_persistent);
- }
-#endif
- if (env.envp) {
- pefree(env.envp, is_persistent);
- }
-}
-/* }}} */
-
-/* {{{ proc_open_rsrc_dtor */
-static void proc_open_rsrc_dtor(zend_rsrc_list_entry *rsrc TSRMLS_DC)
-{
- struct php_process_handle *proc = (struct php_process_handle*)rsrc->ptr;
- int i;
-#ifdef PHP_WIN32
- DWORD wstatus;
-#elif HAVE_SYS_WAIT_H
- int wstatus;
- pid_t wait_pid;
-#endif
-
- /* Close all handles to avoid a deadlock */
- for (i = 0; i < proc->npipes; i++) {
- if (proc->pipes[i] != 0) {
- zend_list_delete(proc->pipes[i]);
- proc->pipes[i] = 0;
- }
- }
-
-#ifdef PHP_WIN32
-
- WaitForSingleObject(proc->child, INFINITE);
- GetExitCodeProcess(proc->child, &wstatus);
- FG(pclose_ret) = wstatus;
-
-#elif HAVE_SYS_WAIT_H
-
- do {
- wait_pid = waitpid(proc->child, &wstatus, 0);
- } while (wait_pid == -1 && errno == EINTR);
-
- if (wait_pid == -1)
- FG(pclose_ret) = -1;
- else {
- if (WIFEXITED(wstatus))
- wstatus = WEXITSTATUS(wstatus);
- FG(pclose_ret) = wstatus;
- }
-
-#else
- FG(pclose_ret) = -1;
-#endif
- _php_free_envp(proc->env, proc->is_persistent);
- pefree(proc->command, proc->is_persistent);
- pefree(proc, proc->is_persistent);
-
-}
-/* }}} */
-
-/* {{{ php_make_safe_mode_command */
-static int php_make_safe_mode_command(char *cmd, char **safecmd, int is_persistent TSRMLS_DC)
-{
- int lcmd, larg0, ldir, len, overflow_limit;
- char *space, *sep, *arg0;
-
- if (!PG(safe_mode)) {
- *safecmd = pestrdup(cmd, is_persistent);
- return SUCCESS;
- }
-
- lcmd = strlen(cmd);
- ldir = strlen(PG(safe_mode_exec_dir));
- len = lcmd + ldir + 2;
- overflow_limit = len;
-
- arg0 = emalloc(len);
-
- strcpy(arg0, cmd);
-
- space = strchr(arg0, ' ');
- if (space) {
- *space = '\0';
- }
- larg0 = strlen(arg0);
-
- if (strstr(arg0, "..")) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "No '..' components allowed in path");
- efree(arg0);
- return FAILURE;
- }
-
- *safecmd = emalloc(len);
- strcpy(*safecmd, PG(safe_mode_exec_dir));
- overflow_limit -= ldir;
-
- sep = strrchr(arg0, PHP_DIR_SEPARATOR);
- if (sep) {
- strcat(*safecmd, sep);
- overflow_limit -= strlen(sep);
- } else {
- strcat(*safecmd, "/");
- strcat(*safecmd, arg0);
- overflow_limit -= larg0 + 1;
- }
- if (space) {
- strncat(*safecmd, cmd + larg0, overflow_limit);
- }
- efree(arg0);
- arg0 = php_escape_shell_cmd(*safecmd);
- efree(*safecmd);
- if (is_persistent) {
- *safecmd = pestrdup(arg0, 1);
- efree(arg0);
- } else {
- *safecmd = arg0;
- }
-
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ PHP_MINIT_FUNCTION(proc_open) */
-PHP_MINIT_FUNCTION(proc_open)
-{
- le_proc_open = zend_register_list_destructors_ex(proc_open_rsrc_dtor, NULL, "process", module_number);
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ proto int proc_terminate(resource process [, long signal])
- kill a process opened by proc_open */
-PHP_FUNCTION(proc_terminate)
-{
- zval *zproc;
- struct php_process_handle *proc;
- long sig_no = SIGTERM;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r|l", &zproc, &sig_no) == FAILURE) {
- RETURN_FALSE;
- }
-
- ZEND_FETCH_RESOURCE(proc, struct php_process_handle *, &zproc, -1, "process", le_proc_open);
-
-#ifdef PHP_WIN32
- TerminateProcess(proc->child, 255);
-#else
- kill(proc->child, sig_no);
-#endif
-
- zend_list_delete(Z_LVAL_P(zproc));
- RETURN_LONG(FG(pclose_ret));
-}
-/* }}} */
-
-/* {{{ proto int proc_close(resource process)
- close a process opened by proc_open */
-PHP_FUNCTION(proc_close)
-{
- zval *zproc;
- struct php_process_handle *proc;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &zproc) == FAILURE) {
- RETURN_FALSE;
- }
-
- ZEND_FETCH_RESOURCE(proc, struct php_process_handle *, &zproc, -1, "process", le_proc_open);
-
- zend_list_delete(Z_LVAL_P(zproc));
- RETURN_LONG(FG(pclose_ret));
-}
-/* }}} */
-
-/* {{{ proto array proc_get_status(resource process)
- get information about a process opened by proc_open */
-PHP_FUNCTION(proc_get_status)
-{
- zval *zproc;
- struct php_process_handle *proc;
-#ifdef PHP_WIN32
- DWORD wstatus;
-#elif HAVE_SYS_WAIT_H
- int wstatus;
- pid_t wait_pid;
-#endif
- int running = 1, signaled = 0, stopped = 0;
- int exitcode = -1, termsig = 0, stopsig = 0;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &zproc) == FAILURE) {
- RETURN_FALSE;
- }
-
- ZEND_FETCH_RESOURCE(proc, struct php_process_handle *, &zproc, -1, "process", le_proc_open);
-
- array_init(return_value);
-
- add_assoc_string(return_value, "command", proc->command, 1);
- add_assoc_long(return_value, "pid", (long) proc->child);
-
-#ifdef PHP_WIN32
-
- GetExitCodeProcess(proc->child, &wstatus);
-
- running = wstatus == STILL_ACTIVE;
- exitcode == STILL_ACTIVE ? -1 : wstatus;
-
-#elif HAVE_SYS_WAIT_H
-
- errno = 0;
- wait_pid = waitpid(proc->child, &wstatus, WNOHANG|WUNTRACED);
-
- if (wait_pid == proc->child) {
- if (WIFEXITED(wstatus)) {
- running = 0;
- exitcode = WEXITSTATUS(wstatus);
- }
- if (WIFSIGNALED(wstatus)) {
- signaled = 1;
- termsig = WTERMSIG(wstatus);
- }
- if (WIFSTOPPED(wstatus)) {
- stopped = 1;
- stopsig = WSTOPSIG(wstatus);
- }
- }
-#endif
-
- add_assoc_bool(return_value, "running", running);
- add_assoc_bool(return_value, "signaled", signaled);
- add_assoc_bool(return_value, "stopped", stopped);
- add_assoc_long(return_value, "exitcode", exitcode);
- add_assoc_long(return_value, "termsig", termsig);
- add_assoc_long(return_value, "stopsig", stopsig);
-}
-/* }}} */
-
-/* {{{ handy definitions for portability/readability */
-#ifdef PHP_WIN32
-# define pipe(pair) (CreatePipe(&pair[0], &pair[1], &security, 2048L) ? 0 : -1)
-
-# define COMSPEC_NT "cmd.exe"
-# define COMSPEC_9X "command.com"
-
-static inline HANDLE dup_handle(HANDLE src, BOOL inherit, BOOL closeorig)
-{
- HANDLE copy, self = GetCurrentProcess();
-
- if (!DuplicateHandle(self, src, self, &copy, 0, inherit, DUPLICATE_SAME_ACCESS |
- (closeorig ? DUPLICATE_CLOSE_SOURCE : 0)))
- return NULL;
- return copy;
-}
-
-static inline HANDLE dup_fd_as_handle(int fd)
-{
- return dup_handle((HANDLE)_get_osfhandle(fd), TRUE, FALSE);
-}
-
-# define close_descriptor(fd) CloseHandle(fd)
-#else
-# define close_descriptor(fd) close(fd)
-#endif
-
-#define DESC_PIPE 1
-#define DESC_FILE 2
-#define DESC_PARENT_MODE_WRITE 8
-
-struct php_proc_open_descriptor_item {
- int index; /* desired fd number in child process */
- php_file_descriptor_t parentend, childend; /* fds for pipes in parent/child */
- int mode; /* mode for proc_open code */
- int mode_flags; /* mode flags for opening fds */
-};
-/* }}} */
-
-/* {{{ proto resource proc_open(string command, array descriptorspec, array &pipes [, string cwd [, array env [, array other_options]]])
- Run a process with more control over it's file descriptors */
-PHP_FUNCTION(proc_open)
-{
- char *command, *cwd=NULL;
- int command_len, cwd_len;
- zval *descriptorspec;
- zval *pipes;
- zval *environment = NULL;
- zval *other_options = NULL;
- php_process_env_t env;
- int ndesc = 0;
- int i;
- zval **descitem = NULL;
- HashPosition pos;
- struct php_proc_open_descriptor_item descriptors[PHP_PROC_OPEN_MAX_DESCRIPTORS];
-#ifdef PHP_WIN32
- PROCESS_INFORMATION pi;
- STARTUPINFO si;
- BOOL newprocok;
- SECURITY_ATTRIBUTES security;
- char *command_with_cmd;
- UINT old_error_mode;
-#endif
- php_process_id_t child;
- struct php_process_handle *proc;
- int is_persistent = 0; /* TODO: ensure that persistent procs will work */
- int suppress_errors = 0;
-#if PHP_CAN_DO_PTS
- php_file_descriptor_t dev_ptmx = -1; /* master */
- php_file_descriptor_t slave_pty = -1;
-#endif
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "saz|s!a!a!", &command,
- &command_len, &descriptorspec, &pipes, &cwd, &cwd_len, &environment,
- &other_options) == FAILURE) {
- RETURN_FALSE;
- }
-
- if (FAILURE == php_make_safe_mode_command(command, &command, is_persistent TSRMLS_CC)) {
- RETURN_FALSE;
- }
-
- if (other_options) {
- zval **item;
- if (SUCCESS == zend_hash_find(Z_ARRVAL_P(other_options), "suppress_errors", sizeof("suppress_errors"), (void**)&item)) {
- if (Z_TYPE_PP(item) == IS_BOOL && Z_BVAL_PP(item)) {
- suppress_errors = 1;
- }
- }
- }
-
- command_len = strlen(command);
-
- if (environment) {
- env = _php_array_to_envp(environment, is_persistent TSRMLS_CC);
- } else {
- memset(&env, 0, sizeof(env));
- }
-
- memset(descriptors, 0, sizeof(descriptors));
-
-#ifdef PHP_WIN32
- /* we use this to allow the child to inherit handles */
- memset(&security, 0, sizeof(security));
- security.nLength = sizeof(security);
- security.bInheritHandle = TRUE;
- security.lpSecurityDescriptor = NULL;
-#endif
-
- /* walk the descriptor spec and set up files/pipes */
- zend_hash_internal_pointer_reset_ex(Z_ARRVAL_P(descriptorspec), &pos);
- while (zend_hash_get_current_data_ex(Z_ARRVAL_P(descriptorspec), (void **)&descitem, &pos) == SUCCESS) {
- char *str_index;
- ulong nindex;
- zval **ztype;
-
- str_index = NULL;
- zend_hash_get_current_key_ex(Z_ARRVAL_P(descriptorspec), &str_index, NULL, &nindex, 0, &pos);
-
- if (str_index) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "descriptor spec must be an integer indexed array");
- goto exit_fail;
- }
-
- descriptors[ndesc].index = nindex;
-
- if (Z_TYPE_PP(descitem) == IS_RESOURCE) {
- /* should be a stream - try and dup the descriptor */
- php_stream *stream;
- int fd;
-
- php_stream_from_zval(stream, descitem);
-
- if (FAILURE == php_stream_cast(stream, PHP_STREAM_AS_FD, (void **)&fd, REPORT_ERRORS)) {
- goto exit_fail;
- }
-
-#ifdef PHP_WIN32
- descriptors[ndesc].childend = dup_fd_as_handle(fd);
- if (descriptors[ndesc].childend == NULL) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "unable to dup File-Handle for descriptor %d", nindex);
- goto exit_fail;
- }
-#else
- descriptors[ndesc].childend = dup(fd);
- if (descriptors[ndesc].childend < 0) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "unable to dup File-Handle for descriptor %ld - %s", nindex, strerror(errno));
- goto exit_fail;
- }
-#endif
- descriptors[ndesc].mode = DESC_FILE;
-
- } else if (Z_TYPE_PP(descitem) != IS_ARRAY) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Descriptor item must be either an array or a File-Handle");
- goto exit_fail;
- } else {
-
- if (zend_hash_index_find(Z_ARRVAL_PP(descitem), 0, (void **)&ztype) == SUCCESS) {
- convert_to_string_ex(ztype);
- } else {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Missing handle qualifier in array");
- goto exit_fail;
- }
-
- if (strcmp(Z_STRVAL_PP(ztype), "pipe") == 0) {
- php_file_descriptor_t newpipe[2];
- zval **zmode;
-
- if (zend_hash_index_find(Z_ARRVAL_PP(descitem), 1, (void **)&zmode) == SUCCESS) {
- convert_to_string_ex(zmode);
- } else {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Missing mode parameter for 'pipe'");
- goto exit_fail;
- }
-
- descriptors[ndesc].mode = DESC_PIPE;
-
- if (0 != pipe(newpipe)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "unable to create pipe %s", strerror(errno));
- goto exit_fail;
- }
-
- if (strcmp(Z_STRVAL_PP(zmode), "w") != 0) {
- descriptors[ndesc].parentend = newpipe[1];
- descriptors[ndesc].childend = newpipe[0];
- descriptors[ndesc].mode |= DESC_PARENT_MODE_WRITE;
- } else {
- descriptors[ndesc].parentend = newpipe[0];
- descriptors[ndesc].childend = newpipe[1];
- }
-#ifdef PHP_WIN32
- /* don't let the child inherit the parent side of the pipe */
- descriptors[ndesc].parentend = dup_handle(descriptors[ndesc].parentend, FALSE, TRUE);
-#endif
- descriptors[ndesc].mode_flags = descriptors[ndesc].mode & DESC_PARENT_MODE_WRITE ? O_WRONLY : O_RDONLY;
-#ifdef PHP_WIN32
- if (Z_STRLEN_PP(zmode) >= 2 && Z_STRVAL_PP(zmode)[1] == 'b')
- descriptors[ndesc].mode_flags |= O_BINARY;
-#endif
-
-
-
- } else if (strcmp(Z_STRVAL_PP(ztype), "file") == 0) {
- zval **zfile, **zmode;
- int fd;
- php_stream *stream;
-
- descriptors[ndesc].mode = DESC_FILE;
-
- if (zend_hash_index_find(Z_ARRVAL_PP(descitem), 1, (void **)&zfile) == SUCCESS) {
- convert_to_string_ex(zfile);
- } else {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Missing file name parameter for 'file'");
- goto exit_fail;
- }
-
- if (zend_hash_index_find(Z_ARRVAL_PP(descitem), 2, (void **)&zmode) == SUCCESS) {
- convert_to_string_ex(zmode);
- } else {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Missing mode parameter for 'file'");
- goto exit_fail;
- }
-
- /* try a wrapper */
- stream = php_stream_open_wrapper(Z_STRVAL_PP(zfile), Z_STRVAL_PP(zmode),
- ENFORCE_SAFE_MODE|REPORT_ERRORS|STREAM_WILL_CAST, NULL);
-
- /* force into an fd */
- if (stream == NULL || FAILURE == php_stream_cast(stream,
- PHP_STREAM_CAST_RELEASE|PHP_STREAM_AS_FD,
- (void **)&fd, REPORT_ERRORS)) {
- goto exit_fail;
- }
-
-#ifdef PHP_WIN32
- descriptors[ndesc].childend = (HANDLE)_get_osfhandle(fd);
-#else
- descriptors[ndesc].childend = fd;
-#endif
- } else if (strcmp(Z_STRVAL_PP(ztype), "pty") == 0) {
-#if PHP_CAN_DO_PTS
- if (dev_ptmx == -1) {
- /* open things up */
- dev_ptmx = open("/dev/ptmx", O_RDWR);
- if (dev_ptmx == -1) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "failed to open /dev/ptmx, errno %d", errno);
- goto exit_fail;
- }
- grantpt(dev_ptmx);
- unlockpt(dev_ptmx);
- slave_pty = open(ptsname(dev_ptmx), O_RDWR);
-
- if (slave_pty == -1) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "failed to open slave pty, errno %d", errno);
- goto exit_fail;
- }
- }
- descriptors[ndesc].mode = DESC_PIPE;
- descriptors[ndesc].childend = dup(slave_pty);
- descriptors[ndesc].parentend = dup(dev_ptmx);
- descriptors[ndesc].mode_flags = O_RDWR;
-#else
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "pty pseudo terminal is not support on this system");
- goto exit_fail;
-#endif
- } else {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s is not a valid descriptor spec/mode", Z_STRVAL_PP(ztype));
- goto exit_fail;
- }
- }
-
- zend_hash_move_forward_ex(Z_ARRVAL_P(descriptorspec), &pos);
- if (++ndesc == PHP_PROC_OPEN_MAX_DESCRIPTORS)
- break;
- }
-
-#ifdef PHP_WIN32
- memset(&si, 0, sizeof(si));
- si.cb = sizeof(si);
- si.dwFlags = STARTF_USESTDHANDLES;
-
- si.hStdInput = GetStdHandle(STD_INPUT_HANDLE);
- si.hStdOutput = GetStdHandle(STD_OUTPUT_HANDLE);
- si.hStdError = GetStdHandle(STD_ERROR_HANDLE);
-
- /* redirect stdin/stdout/stderr if requested */
- for (i = 0; i < ndesc; i++) {
- switch(descriptors[i].index) {
- case 0:
- si.hStdInput = descriptors[i].childend;
- break;
- case 1:
- si.hStdOutput = descriptors[i].childend;
- break;
- case 2:
- si.hStdError = descriptors[i].childend;
- break;
- }
- }
-
-
- memset(&pi, 0, sizeof(pi));
-
- command_with_cmd = emalloc(command_len + sizeof(COMSPEC_9X) + 1 + sizeof(" /c "));
- sprintf(command_with_cmd, "%s /c %s", GetVersion() < 0x80000000 ? COMSPEC_NT : COMSPEC_9X, command);
-
- if (suppress_errors) {
- old_error_mode = SetErrorMode(SEM_FAILCRITICALERRORS|SEM_NOGPFAULTERRORBOX);
- }
-
- newprocok = CreateProcess(NULL, command_with_cmd, &security, &security, TRUE, NORMAL_PRIORITY_CLASS, env.envp, cwd, &si, &pi);
-
- if (suppress_errors) {
- SetErrorMode(old_error_mode);
- }
-
- efree(command_with_cmd);
-
- if (FALSE == newprocok) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "CreateProcess failed");
- goto exit_fail;
- }
-
- child = pi.hProcess;
- CloseHandle(pi.hThread);
-
-#elif HAVE_FORK
- /* the unix way */
- child = fork();
-
- if (child == 0) {
- /* this is the child process */
-
-#if PHP_CAN_DO_PTS
- if (dev_ptmx >= 0) {
- int my_pid = getpid();
-
-#ifdef TIOCNOTTY
- /* detach from original tty. Might only need this if isatty(0) is true */
- ioctl(0,TIOCNOTTY,NULL);
-#else
- setsid();
-#endif
- /* become process group leader */
- setpgid(my_pid, my_pid);
- tcsetpgrp(0, my_pid);
- }
-#endif
-
- /* close those descriptors that we just opened for the parent stuff,
- * dup new descriptors into required descriptors and close the original
- * cruft */
- for (i = 0; i < ndesc; i++) {
- switch (descriptors[i].mode & ~DESC_PARENT_MODE_WRITE) {
- case DESC_PIPE:
- close(descriptors[i].parentend);
- break;
- }
- if (dup2(descriptors[i].childend, descriptors[i].index) < 0)
- perror("dup2");
- if (descriptors[i].childend != descriptors[i].index)
- close(descriptors[i].childend);
- }
-
-#if PHP_CAN_DO_PTS
- if (dev_ptmx >= 0) {
- close(dev_ptmx);
- close(slave_pty);
- }
-#endif
-
- if (cwd) {
- chdir(cwd);
- }
-
- if (env.envarray) {
- execle("/bin/sh", "sh", "-c", command, NULL, env.envarray);
- } else {
- execl("/bin/sh", "sh", "-c", command, NULL);
- }
- _exit(127);
-
- } else if (child < 0) {
- /* failed to fork() */
-
- /* clean up all the descriptors */
- for (i = 0; i < ndesc; i++) {
- close(descriptors[i].childend);
- close(descriptors[i].parentend);
- }
-
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "fork failed - %s", strerror(errno));
-
- goto exit_fail;
-
- }
-#else
-# error You lose (configure should not have let you get here)
-#endif
- /* we forked/spawned and this is the parent */
-
- proc = (struct php_process_handle*)pemalloc(sizeof(struct php_process_handle), is_persistent);
- proc->is_persistent = is_persistent;
- proc->command = command;
- proc->npipes = ndesc;
- proc->child = child;
- proc->env = env;
-
- if (pipes != NULL) {
- zval_dtor(pipes);
- }
- array_init(pipes);
-
-#if PHP_CAN_DO_PTS
- if (dev_ptmx >= 0) {
- close(dev_ptmx);
- close(slave_pty);
- }
-#endif
-
- /* clean up all the child ends and then open streams on the parent
- * ends, where appropriate */
- for (i = 0; i < ndesc; i++) {
- char *mode_string=NULL;
- php_stream *stream = NULL;
-
- close_descriptor(descriptors[i].childend);
-
- switch (descriptors[i].mode & ~DESC_PARENT_MODE_WRITE) {
- case DESC_PIPE:
- switch(descriptors[i].mode_flags) {
-#ifdef PHP_WIN32
- case O_WRONLY|O_BINARY:
- mode_string = "wb";
- break;
- case O_RDONLY|O_BINARY:
- mode_string = "rb";
- break;
-#endif
- case O_WRONLY:
- mode_string = "w";
- break;
- case O_RDONLY:
- mode_string = "r";
- break;
- case O_RDWR:
- mode_string = "r+";
- break;
- }
-#ifdef PHP_WIN32
- stream = php_stream_fopen_from_fd(_open_osfhandle((long)descriptors[i].parentend,
- descriptors[i].mode_flags), mode_string, NULL);
-#else
- stream = php_stream_fopen_from_fd(descriptors[i].parentend, mode_string, NULL);
-#endif
- if (stream) {
- zval *retfp;
-
- /* nasty hack; don't copy it */
- stream->flags |= PHP_STREAM_FLAG_NO_SEEK;
-
- MAKE_STD_ZVAL(retfp);
- php_stream_to_zval(stream, retfp);
- add_index_zval(pipes, descriptors[i].index, retfp);
-
- proc->pipes[i] = Z_LVAL_P(retfp);
- }
- break;
- default:
- proc->pipes[i] = 0;
- }
- }
-
- ZEND_REGISTER_RESOURCE(return_value, proc, le_proc_open);
- return;
-
-exit_fail:
- _php_free_envp(env, is_persistent);
- pefree(command, is_persistent);
-#if PHP_CAN_DO_PTS
- if (dev_ptmx >= 0) {
- close(dev_ptmx);
- }
- if (slave_pty >= 0) {
- close(slave_pty);
- }
-#endif
- RETURN_FALSE;
-
-}
-/* }}} */
-
-#endif /* PHP_CAN_SUPPORT_PROC_OPEN */
-
-/*
- * 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/standard/proc_open.h b/ext/standard/proc_open.h
deleted file mode 100644
index b38871a04d..0000000000
--- a/ext/standard/proc_open.h
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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@thebrainroom.com> |
- +----------------------------------------------------------------------+
- */
-/* $Id$ */
-
-#ifdef PHP_WIN32
-typedef HANDLE php_file_descriptor_t;
-typedef HANDLE php_process_id_t;
-#else
-typedef int php_file_descriptor_t;
-typedef pid_t php_process_id_t;
-#endif
-
-#define PHP_PROC_OPEN_MAX_DESCRIPTORS 16
-
-/* Environment block under win32 is a NUL terminated sequence of NUL terminated
- * name=value strings.
- * Under unix, it is an argv style array.
- * */
-typedef struct _php_process_env {
- char *envp;
-#ifndef PHP_WIN32
- char **envarray;
-#endif
-} php_process_env_t;
-
-struct php_process_handle {
- php_process_id_t child;
- int npipes;
- long pipes[PHP_PROC_OPEN_MAX_DESCRIPTORS];
- char *command;
- int is_persistent;
- php_process_env_t env;
-};
-
diff --git a/ext/standard/quot_print.c b/ext/standard/quot_print.c
deleted file mode 100644
index 372ed73c17..0000000000
--- a/ext/standard/quot_print.c
+++ /dev/null
@@ -1,220 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Kirill Maximov <kir@actimind.com> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-#include <stdlib.h>
-
-#ifdef HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-#include <string.h>
-#include <errno.h>
-
-#include "php.h"
-#include "quot_print.h"
-
-#include <stdio.h>
-
-/*
-* Converting HEX char to INT value
-*/
-static char php_hex2int(int c)
-{
- if (isdigit(c)) {
- return c - '0';
- }
- else if (c >= 'A' && c <= 'F') {
- return c - 'A' + 10;
- }
- else if (c >= 'a' && c <= 'f') {
- return c - 'a' + 10;
- }
- else {
- return -1;
- }
-}
-
-PHPAPI unsigned char *php_quot_print_decode(const unsigned char *str, size_t length, size_t *ret_length, int replace_us_by_ws)
-{
- register unsigned int i;
- register unsigned const char *p1;
- register unsigned char *p2;
- register unsigned int h_nbl, l_nbl;
-
- size_t decoded_len, buf_size;
- unsigned char *retval;
-
- static unsigned int hexval_tbl[256] = {
- 64, 64, 64, 64, 64, 64, 64, 64, 64, 32, 16, 64, 64, 16, 64, 64,
- 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
- 32, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
- 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 64, 64, 64, 64, 64, 64,
- 64, 10, 11, 12, 13, 14, 15, 64, 64, 64, 64, 64, 64, 64, 64, 64,
- 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
- 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
- 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
- 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
- 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
- 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
- 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
- 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
- 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
- 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
- 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64
- };
-
- if (replace_us_by_ws) {
- replace_us_by_ws = '_';
- }
-
- i = length, p1 = str; buf_size = length;
-
- while (i > 1 && *p1 != '\0') {
- if (*p1 == '=') {
- buf_size -= 2;
- p1++;
- i--;
- }
- p1++;
- i--;
- }
-
- retval = emalloc(buf_size + 1);
- i = length; p1 = str; p2 = retval;
- decoded_len = 0;
-
- while (i > 0 && *p1 != '\0') {
- if (*p1 == '=') {
- i--, p1++;
- if (i == 0 || *p1 == '\0') {
- break;
- }
- h_nbl = hexval_tbl[*p1];
- if (h_nbl < 16) {
- /* next char should be a hexadecimal digit */
- if ((--i) == 0 || (l_nbl = hexval_tbl[*(++p1)]) >= 16) {
- efree(retval);
- return NULL;
- }
- *(p2++) = (h_nbl << 4) | l_nbl, decoded_len++;
- i--, p1++;
- } else if (h_nbl < 64) {
- /* soft line break */
- while (h_nbl == 32) {
- if (--i == 0 || (h_nbl = hexval_tbl[*(++p1)]) == 64) {
- efree(retval);
- return NULL;
- }
- }
- if (p1[0] == '\r' && i >= 2 && p1[1] == '\n') {
- i--, p1++;
- }
- i--, p1++;
- } else {
- efree(retval);
- return NULL;
- }
- } else {
- *(p2++) = (replace_us_by_ws == *p1 ? '\x20': *p1);
- i--, p1++, decoded_len++;
- }
- }
-
- *p2 = '\0';
- *ret_length = decoded_len;
- return retval;
-}
-
-
-/*
-*
-* Decoding Quoted-printable string.
-*
-*/
-/* {{{ proto string quoted_printable_decode(string str)
- Convert a quoted-printable string to an 8 bit string */
-PHP_FUNCTION(quoted_printable_decode)
-{
- pval **arg1;
- char *str_in, *str_out;
- int i = 0, j = 0, k;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg1) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex(arg1);
-
- if (Z_STRLEN_PP(arg1) == 0) {
- /* shortcut */
- RETURN_EMPTY_STRING();
- }
-
- str_in = Z_STRVAL_PP(arg1);
- str_out = emalloc(Z_STRLEN_PP(arg1) + 1);
- while (str_in[i]) {
- switch (str_in[i]) {
- case '=':
- if (str_in[i + 1] && str_in[i + 2] &&
- isxdigit((int) str_in[i + 1]) &&
- isxdigit((int) str_in[i + 2]))
- {
- str_out[j++] = (php_hex2int((int) str_in[i + 1]) << 4)
- + php_hex2int((int) str_in[i + 2]);
- i += 3;
- } else /* check for soft line break according to RFC 2045*/ {
- k = 1;
- while (str_in[i + k] && ((str_in[i + k] == 32) || (str_in[i + k] == 9))) {
- /* Possibly, skip spaces/tabs at the end of line */
- k++;
- }
- if (!str_in[i + k]) {
- /* End of line reached */
- i += k;
- }
- else if ((str_in[i + k] == 13) && (str_in[i + k + 1] == 10)) {
- /* CRLF */
- i += k + 2;
- }
- else if ((str_in[i + k] == 13) || (str_in[i + k] == 10)) {
- /* CR or LF */
- i += k + 1;
- }
- else {
- str_out[j++] = str_in[i++];
- }
- }
- break;
- default:
- str_out[j++] = str_in[i++];
- }
- }
- str_out[j] = '\0';
-
- RETVAL_STRINGL(str_out, j, 0);
-}
-/* }}} */
-
-/*
- * 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/standard/quot_print.h b/ext/standard/quot_print.h
deleted file mode 100644
index 69cfc5d749..0000000000
--- a/ext/standard/quot_print.h
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Kirill Maximov (kir@rus.net) |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifndef QUOT_PRINT_H
-#define QUOT_PRINT_H
-
-PHPAPI unsigned char *php_quot_print_decode(const unsigned char *str, size_t length, size_t *ret_length, int replace_us_by_ws);
-
-PHP_FUNCTION(quoted_printable_decode);
-
-#endif /* QUOT_PRINT_H */
diff --git a/ext/standard/rand.c b/ext/standard/rand.c
deleted file mode 100644
index 851508c45c..0000000000
--- a/ext/standard/rand.c
+++ /dev/null
@@ -1,407 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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. |
- +----------------------------------------------------------------------+
- | Authors: Rasmus Lerdorf <rasmus@php.net> |
- | Zeev Suraski <zeev@zend.com> |
- | Pedro Melo <melo@ip.pt> |
- | Sterling Hughes <sterling@php.net> |
- | |
- | Based on code from: Shawn Cokus <Cokus@math.washington.edu> |
- +----------------------------------------------------------------------+
- */
-/* $Id$ */
-
-#include <stdlib.h>
-
-#if defined(NETWARE) && !defined(NEW_LIBC) /* For getpid() used below */
-#include "netware/pwd.h"
-#endif
-
-#include "php.h"
-#include "php_math.h"
-#include "php_rand.h"
-#include "php_lcg.h"
-
-#include "basic_functions.h"
-
-
-/* SYSTEM RAND FUNCTIONS */
-
-/* {{{ php_srand
- */
-PHPAPI void php_srand(long seed TSRMLS_DC)
-{
-#ifdef ZTS
- BG(rand_seed) = (unsigned int) seed;
-#else
-# if defined(HAVE_SRANDOM)
- srandom((unsigned int) seed);
-# elif defined(HAVE_SRAND48)
- srand48(seed);
-# else
- srand((unsigned int) seed);
-# endif
-#endif
-
- /* Seed only once */
- BG(rand_is_seeded) = 1;
-}
-/* }}} */
-
-/* {{{ php_rand
- */
-PHPAPI long php_rand(TSRMLS_D)
-{
- long ret;
-
- if (!BG(rand_is_seeded)) {
- php_srand(GENERATE_SEED() TSRMLS_CC);
- }
-
-#ifdef ZTS
- ret = php_rand_r(&BG(rand_seed));
-#else
-# if defined(HAVE_RANDOM)
- ret = random();
-# elif defined(HAVE_LRAND48)
- ret = lrand48();
-# else
- ret = rand();
-# endif
-#endif
-
- return ret;
-}
-/* }}} */
-
-
-/* MT RAND FUNCTIONS */
-
-/*
- This is the ``Mersenne Twister'' random number generator MT19937, which
- generates pseudorandom integers uniformly distributed in 0..(2^32 - 1)
- starting from any odd seed in 0..(2^32 - 1). This version is a recode
- by Shawn Cokus (Cokus@math.washington.edu) on March 8, 1998 of a version by
- Takuji Nishimura (who had suggestions from Topher Cooper and Marc Rieffel in
- July-August 1997).
-
- Effectiveness of the recoding (on Goedel2.math.washington.edu, a DEC Alpha
- running OSF/1) using GCC -O3 as a compiler: before recoding: 51.6 sec. to
- generate 300 million random numbers; after recoding: 24.0 sec. for the same
- (i.e., 46.5% of original time), so speed is now about 12.5 million random
- number generations per second on this machine.
-
- According to the URL <http://www.math.keio.ac.jp/~matumoto/emt.html>
- (and paraphrasing a bit in places), the Mersenne Twister is ``designed
- with consideration of the flaws of various existing generators,'' has
- a period of 2^19937 - 1, gives a sequence that is 623-dimensionally
- equidistributed, and ``has passed many stringent tests, including the
- die-hard test of G. Marsaglia and the load test of P. Hellekalek and
- S. Wegenkittl.'' It is efficient in memory usage (typically using 2506
- to 5012 bytes of static data, depending on data type sizes, and the code
- is quite short as well). It generates random numbers in batches of 624
- at a time, so the caching and pipelining of modern systems is exploited.
- It is also divide- and mod-free.
-
- This library is free software; you can redistribute it and/or modify it
- under the terms of the GNU Library General Public License as published by
- the Free Software Foundation (either version 2 of the License or, at your
- option, any later version). This library is distributed in the hope that
- it will be useful, but WITHOUT ANY WARRANTY, without even the implied
- warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
- the GNU Library General Public License for more details. You should have
- received a copy of the GNU Library General Public License along with this
- library; if not, write to the Free Software Foundation, Inc., 59 Temple
- Place, Suite 330, Boston, MA 02111-1307, USA.
-
- The code as Shawn received it included the following notice:
-
- Copyright (C) 1997 Makoto Matsumoto and Takuji Nishimura. When
- you use this, send an e-mail to <matumoto@math.keio.ac.jp> with
- an appropriate reference to your work.
-
- It would be nice to CC: <Cokus@math.washington.edu> when you write.
-
-
-
- php_uint32 must be an unsigned integer type capable of holding at least 32
- bits; exactly 32 should be fastest, but 64 is better on an Alpha with
- GCC at -O3 optimization so try your options and see what's best for you
-
- Melo: we should put some ifdefs here to catch those alphas...
-*/
-#define N MT_N /* length of state vector */
-#define M (397) /* a period parameter */
-#define K (0x9908B0DFU) /* a magic constant */
-#define hiBit(u) ((u) & 0x80000000U) /* mask all but highest bit of u */
-#define loBit(u) ((u) & 0x00000001U) /* mask all but lowest bit of u */
-#define loBits(u) ((u) & 0x7FFFFFFFU) /* mask the highest bit of u */
-#define mixBits(u, v) (hiBit(u)|loBits(v)) /* move hi bit of u to hi bit of v */
-
-/* {{{ php_mt_srand
- */
-PHPAPI void php_mt_srand(php_uint32 seed TSRMLS_DC)
-{
- /*
- We initialize state[0..(N-1)] via the generator
-
- x_new = (69069 * x_old) mod 2^32
-
- from Line 15 of Table 1, p. 106, Sec. 3.3.4 of Knuth's
- _The Art of Computer Programming_, Volume 2, 3rd ed.
-
- Notes (SJC): I do not know what the initial state requirements
- of the Mersenne Twister are, but it seems this seeding generator
- could be better. It achieves the maximum period for its modulus
- (2^30) iff x_initial is odd (p. 20-21, Sec. 3.2.1.2, Knuth); if
- x_initial can be even, you have sequences like 0, 0, 0, ...;
- 2^31, 2^31, 2^31, ...; 2^30, 2^30, 2^30, ...; 2^29, 2^29 + 2^31,
- 2^29, 2^29 + 2^31, ..., etc. so I force seed to be odd below.
-
-
- Even if x_initial is odd, if x_initial is 1 mod 4 then
-
- the lowest bit of x is always 1,
- the next-to-lowest bit of x is always 0,
- the 2nd-from-lowest bit of x alternates ... 0 1 0 1 0 1 0 1 ... ,
- the 3rd-from-lowest bit of x 4-cycles ... 0 1 1 0 0 1 1 0 ... ,
- the 4th-from-lowest bit of x has the 8-cycle ... 0 0 0 1 1 1 1 0 ... ,
- ...
-
- and if x_initial is 3 mod 4 then
-
- the lowest bit of x is always 1,
- the next-to-lowest bit of x is always 1,
- the 2nd-from-lowest bit of x alternates ... 0 1 0 1 0 1 0 1 ... ,
- the 3rd-from-lowest bit of x 4-cycles ... 0 0 1 1 0 0 1 1 ... ,
- the 4th-from-lowest bit of x has the 8-cycle ... 0 0 1 1 1 1 0 0 ... ,
- ...
-
- The generator's potency (min. s>=0 with (69069-1)^s = 0 mod 2^32) is
- 16, which seems to be alright by p. 25, Sec. 3.2.1.3 of Knuth. It
- also does well in the dimension 2..5 spectral tests, but it could be
- better in dimension 6 (Line 15, Table 1, p. 106, Sec. 3.3.4, Knuth).
-
- Note that the random number user does not see the values generated
- here directly since reloadMT() will always munge them first, so maybe
- none of all of this matters. In fact, the seed values made here could
- even be extra-special desirable if the Mersenne Twister theory says
- so-- that's why the only change I made is to restrict to odd seeds.
- */
-
- register php_uint32 x = (seed | 1U) & 0xFFFFFFFFU, *s = BG(state);
- register int j;
-
- for (BG(left) = 0, *s++ = x, j = N; --j;
- *s++ = (x *= 69069U) & 0xFFFFFFFFU);
-
- /* Seed only once */
- BG(mt_rand_is_seeded) = 1;
-}
-/* }}} */
-
-/* {{{ php_mt_reload
- */
-static php_uint32 php_mt_reload(TSRMLS_D)
-{
- register php_uint32 *p0 = BG(state), *p2 = BG(state) + 2, *pM = BG(state) + M, s0, s1;
- register int j;
-
- if (BG(left) < -1)
- php_mt_srand(4357U TSRMLS_CC);
-
- BG(left) = N - 1, BG(next) = BG(state) + 1;
-
- for (s0 = BG(state)[0], s1 = BG(state)[1], j = N - M + 1; --j; s0 = s1, s1 = *p2++)
- *p0++ = *pM++ ^ (mixBits(s0, s1) >> 1) ^ (loBit(s1) ? K : 0U);
-
- for (pM = BG(state), j = M; --j; s0 = s1, s1 = *p2++)
- *p0++ = *pM++ ^ (mixBits(s0, s1) >> 1) ^ (loBit(s1) ? K : 0U);
-
- s1 = BG(state)[0], *p0 = *pM ^ (mixBits(s0, s1) >> 1) ^ (loBit(s1) ? K : 0U);
- s1 ^= (s1 >> 11);
- s1 ^= (s1 << 7) & 0x9D2C5680U;
- s1 ^= (s1 << 15) & 0xEFC60000U;
-
- return s1 ^ (s1 >> 18);
-}
-/* }}} */
-
-/* {{{ php_mt_rand
- */
-PHPAPI php_uint32 php_mt_rand(TSRMLS_D)
-{
- php_uint32 y;
-
- if (--BG(left) < 0)
- return php_mt_reload(TSRMLS_C);
-
- y = *BG(next)++;
- y ^= (y >> 11);
- y ^= (y << 7) & 0x9D2C5680U;
- y ^= (y << 15) & 0xEFC60000U;
-
- return y ^ (y >> 18);
-}
-/* }}} */
-
-/* {{{ proto void srand([int seed])
- Seeds random number generator */
-PHP_FUNCTION(srand)
-{
- long seed;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|l", &seed) == FAILURE)
- return;
-
- if (ZEND_NUM_ARGS() == 0)
- seed = GENERATE_SEED();
-
- php_srand(seed TSRMLS_CC);
-}
-/* }}} */
-
-/* {{{ proto void mt_srand([int seed])
- Seeds Mersenne Twister random number generator */
-PHP_FUNCTION(mt_srand)
-{
- long seed;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|l", &seed) == FAILURE)
- return;
-
- if (ZEND_NUM_ARGS() == 0)
- seed = GENERATE_SEED();
-
- php_mt_srand(seed TSRMLS_CC);
-}
-/* }}} */
-
-
-/*
- * A bit of tricky math here. We want to avoid using a modulus because
- * that simply tosses the high-order bits and might skew the distribution
- * of random values over the range. Instead we map the range directly.
- *
- * We need to map the range from 0...M evenly to the range a...b
- * Let n = the random number and n' = the mapped random number
- *
- * Then we have: n' = a + n(b-a)/M
- *
- * We have a problem here in that only n==M will get mapped to b which
- # means the chances of getting b is much much less than getting any of
- # the other values in the range. We can fix this by increasing our range
- # artifically and using:
- #
- # n' = a + n(b-a+1)/M
- *
- # Now we only have a problem if n==M which would cause us to produce a
- # number of b+1 which would be bad. So we bump M up by one to make sure
- # this will never happen, and the final algorithm looks like this:
- #
- # n' = a + n(b-a+1)/(M+1)
- *
- * -RL
- */
-
-/* {{{ proto int rand([int min, int max])
- Returns a random number */
-PHP_FUNCTION(rand)
-{
- long min;
- long max;
- long number;
- int argc = ZEND_NUM_ARGS();
-
- if (argc != 0 && zend_parse_parameters(argc TSRMLS_CC, "ll", &min, &max) == FAILURE)
- return;
-
- number = php_rand(TSRMLS_C);
- if (argc == 2) {
- RAND_RANGE(number, min, max, PHP_RAND_MAX);
- }
-
- RETURN_LONG(number);
-}
-/* }}} */
-
-/* {{{ proto int mt_rand([int min, int max])
- Returns a random number from Mersenne Twister */
-PHP_FUNCTION(mt_rand)
-{
- long min;
- long max;
- long number;
- int argc = ZEND_NUM_ARGS();
-
- if (argc != 0 && zend_parse_parameters(argc TSRMLS_CC, "ll", &min, &max) == FAILURE)
- return;
-
- if (!BG(mt_rand_is_seeded)) {
- php_mt_srand(GENERATE_SEED() TSRMLS_CC);
- }
-
- /*
- * Melo: hmms.. randomMT() returns 32 random bits...
- * Yet, the previous php_rand only returns 31 at most.
- * So I put a right shift to loose the lsb. It *seems*
- * better than clearing the msb.
- * Update:
- * I talked with Cokus via email and it won't ruin the algorithm
- */
- number = (long) (php_mt_rand(TSRMLS_C) >> 1);
- if (argc == 2) {
- RAND_RANGE(number, min, max, PHP_MT_RAND_MAX);
- }
-
- RETURN_LONG(number);
-}
-/* }}} */
-
-/* {{{ proto int getrandmax(void)
- Returns the maximum value a random number can have */
-PHP_FUNCTION(getrandmax)
-{
- if (ZEND_NUM_ARGS() != 0) {
- WRONG_PARAM_COUNT;
- }
-
- RETURN_LONG(PHP_RAND_MAX);
-}
-/* }}} */
-
-/* {{{ proto int mt_getrandmax(void)
- Returns the maximum value a random number from Mersenne Twister can have */
-PHP_FUNCTION(mt_getrandmax)
-{
- if (ZEND_NUM_ARGS() != 0) {
- WRONG_PARAM_COUNT;
- }
-
- /*
- * Melo: it could be 2^^32 but we only use 2^^31 to maintain
- * compatibility with the previous php_rand
- */
- RETURN_LONG(PHP_MT_RAND_MAX); /* 2^^31 */
-}
-/* }}} */
-
-/*
- * 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/standard/reg.c b/ext/standard/reg.c
deleted file mode 100644
index 02d1903539..0000000000
--- a/ext/standard/reg.c
+++ /dev/null
@@ -1,637 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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. |
- +----------------------------------------------------------------------+
- | Authors: Rasmus Lerdorf <rasmus@php.net> |
- | Jim Winstead <jimw@php.net> |
- | Jaakko Hyvätti <jaakko@hyvatti.iki.fi> |
- +----------------------------------------------------------------------+
- */
-/* $Id$ */
-
-#include <stdio.h>
-#include <ctype.h>
-#include "php.h"
-#include "php_string.h"
-#include "reg.h"
-#include "ext/standard/info.h"
-
-ZEND_DECLARE_MODULE_GLOBALS(reg)
-
-typedef struct {
- regex_t preg;
- int cflags;
-} reg_cache;
-
-/* {{{ _php_regcomp
- */
-static int _php_regcomp(regex_t *preg, const char *pattern, int cflags)
-{
- int r = 0;
- int patlen = strlen(pattern);
- reg_cache *rc = NULL;
- TSRMLS_FETCH();
-
- if(zend_hash_find(&REG(ht_rc), (char *) pattern, patlen+1, (void **) &rc) == FAILURE ||
- rc->cflags != cflags) {
- r = regcomp(preg, pattern, cflags);
- if(!r) {
- reg_cache rcp;
-
- rcp.cflags = cflags;
- memcpy(&rcp.preg, preg, sizeof(*preg));
- zend_hash_update(&REG(ht_rc), (char *) pattern, patlen+1,
- (void *) &rcp, sizeof(rcp), NULL);
- }
- } else {
- memcpy(preg, &rc->preg, sizeof(*preg));
- }
-
- return r;
-}
-/* }}} */
-
-static void _free_reg_cache(reg_cache *rc)
-{
- regfree(&rc->preg);
-}
-
-#undef regfree
-#define regfree(a);
-#undef regcomp
-#define regcomp(a, b, c) _php_regcomp(a, b, c)
-
-static void php_reg_init_globals(zend_reg_globals *reg_globals TSRMLS_DC)
-{
- zend_hash_init(&reg_globals->ht_rc, 0, NULL, (void (*)(void *)) _free_reg_cache, 1);
-}
-
-static void php_reg_destroy_globals(zend_reg_globals *reg_globals TSRMLS_DC)
-{
- zend_hash_destroy(&reg_globals->ht_rc);
-}
-
-PHP_MINIT_FUNCTION(regex)
-{
- ZEND_INIT_MODULE_GLOBALS(reg, php_reg_init_globals, php_reg_destroy_globals);
- return SUCCESS;
-}
-
-PHP_MSHUTDOWN_FUNCTION(regex)
-{
-#ifndef ZTS
- php_reg_destroy_globals(&reg_globals TSRMLS_CC);
-#endif
-
- return SUCCESS;
-}
-
-PHP_MINFO_FUNCTION(regex)
-{
-#if HSREGEX
- php_info_print_table_row(2, "Regex Library", "Bundled library enabled");
-#else
- php_info_print_table_row(2, "Regex Library", "System library enabled");
-#endif
-}
-
-
-/* {{{ php_reg_eprint
- * php_reg_eprint - convert error number to name
- */
-static void php_reg_eprint(int err, regex_t *re) {
- char *buf = NULL, *message = NULL;
- size_t len;
- size_t buf_len;
-
-#ifdef REG_ITOA
- /* get the length of the message */
- buf_len = regerror(REG_ITOA | err, re, NULL, 0);
- if (buf_len) {
- buf = (char *)safe_emalloc(buf_len, sizeof(char), 0);
- if (!buf) return; /* fail silently */
- /* finally, get the error message */
- regerror(REG_ITOA | err, re, buf, buf_len);
- }
-#else
- buf_len = 0;
-#endif
- len = regerror(err, re, NULL, 0);
- if (len) {
- TSRMLS_FETCH();
-
- message = (char *)safe_emalloc((buf_len + len + 2), sizeof(char), 0);
- if (!message) {
- return; /* fail silently */
- }
- if (buf_len) {
- snprintf(message, buf_len, "%s: ", buf);
- buf_len += 1; /* so pointer math below works */
- }
- /* drop the message into place */
- regerror(err, re, message + buf_len, len);
-
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", message);
- }
-
- STR_FREE(buf);
- STR_FREE(message);
-}
-/* }}} */
-
-/* {{{ php_ereg
- */
-static void php_ereg(INTERNAL_FUNCTION_PARAMETERS, int icase)
-{
- pval **regex, /* Regular expression */
- **findin, /* String to apply expression to */
- **array = NULL; /* Optional register array */
- regex_t re;
- regmatch_t *subs;
- int err, match_len, string_len;
- uint i;
- int copts = 0;
- off_t start, end;
- char *buf = NULL;
- char *string = NULL;
- int argc = ZEND_NUM_ARGS();
-
- if (argc < 2 || argc > 3 ||
- zend_get_parameters_ex(argc, &regex, &findin, &array) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- if (icase)
- copts |= REG_ICASE;
-
- if (argc == 2)
- copts |= REG_NOSUB;
-
- /* compile the regular expression from the supplied regex */
- if (Z_TYPE_PP(regex) == IS_STRING) {
- err = regcomp(&re, Z_STRVAL_PP(regex), REG_EXTENDED | copts);
- } else {
- /* we convert numbers to integers and treat them as a string */
- if (Z_TYPE_PP(regex) == IS_DOUBLE)
- convert_to_long_ex(regex); /* get rid of decimal places */
- convert_to_string_ex(regex);
- /* don't bother doing an extended regex with just a number */
- err = regcomp(&re, Z_STRVAL_PP(regex), copts);
- }
-
- if (err) {
- php_reg_eprint(err, &re);
- RETURN_FALSE;
- }
-
- /* make a copy of the string we're looking in */
- convert_to_string_ex(findin);
- string = estrndup(Z_STRVAL_PP(findin), Z_STRLEN_PP(findin));
-
- /* allocate storage for (sub-)expression-matches */
- subs = (regmatch_t *)ecalloc(sizeof(regmatch_t),re.re_nsub+1);
-
- /* actually execute the regular expression */
- err = regexec(&re, string, re.re_nsub+1, subs, 0);
- if (err && err != REG_NOMATCH) {
- php_reg_eprint(err, &re);
- regfree(&re);
- efree(subs);
- RETURN_FALSE;
- }
- match_len = 1;
-
- if (array && err != REG_NOMATCH) {
- match_len = (int) (subs[0].rm_eo - subs[0].rm_so);
- string_len = Z_STRLEN_PP(findin) + 1;
-
- buf = emalloc(string_len);
-
- zval_dtor(*array); /* start with clean array */
- array_init(*array);
-
- for (i = 0; i <= re.re_nsub; i++) {
- start = subs[i].rm_so;
- end = subs[i].rm_eo;
- if (start != -1 && end > 0 && start < string_len && end < string_len && start < end) {
- add_index_stringl(*array, i, string+start, end-start, 1);
- } else {
- add_index_bool(*array, i, 0);
- }
- }
- efree(buf);
- }
-
- efree(subs);
- efree(string);
- if (err == REG_NOMATCH) {
- RETVAL_FALSE;
- } else {
- if (match_len == 0)
- match_len = 1;
- RETVAL_LONG(match_len);
- }
- regfree(&re);
-}
-/* }}} */
-
-/* {{{ proto int ereg(string pattern, string string [, array registers])
- Regular expression match */
-PHP_FUNCTION(ereg)
-{
- php_ereg(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0);
-}
-/* }}} */
-
-/* {{{ proto int eregi(string pattern, string string [, array registers])
- Case-insensitive regular expression match */
-PHP_FUNCTION(eregi)
-{
- php_ereg(INTERNAL_FUNCTION_PARAM_PASSTHRU, 1);
-}
-/* }}} */
-
-/* {{{ php_reg_replace
- * this is the meat and potatoes of regex replacement! */
-PHPAPI char *php_reg_replace(const char *pattern, const char *replace, const char *string, int icase, int extended)
-{
- regex_t re;
- regmatch_t *subs;
-
- char *buf, /* buf is where we build the replaced string */
- *nbuf, /* nbuf is used when we grow the buffer */
- *walkbuf; /* used to walk buf when replacing backrefs */
- const char *walk; /* used to walk replacement string for backrefs */
- int buf_len;
- int pos, tmp, string_len, new_l;
- int err, copts = 0;
-
- string_len = strlen(string);
-
- if (icase) {
- copts = REG_ICASE;
- }
- if (extended) {
- copts |= REG_EXTENDED;
- }
-
- err = regcomp(&re, pattern, copts);
- if (err) {
- php_reg_eprint(err, &re);
- return ((char *) -1);
- }
-
-
- /* allocate storage for (sub-)expression-matches */
- subs = (regmatch_t *)ecalloc(sizeof(regmatch_t),re.re_nsub+1);
-
- /* start with a buffer that is twice the size of the stringo
- we're doing replacements in */
- buf_len = 2 * string_len + 1;
- buf = safe_emalloc(buf_len, sizeof(char), 0);
-
- err = pos = 0;
- buf[0] = '\0';
- while (!err) {
- err = regexec(&re, &string[pos], re.re_nsub+1, subs, (pos ? REG_NOTBOL : 0));
-
- if (err && err != REG_NOMATCH) {
- php_reg_eprint(err, &re);
- efree(subs);
- efree(buf);
- regfree(&re);
- return ((char *) -1);
- }
-
- if (!err) {
- /* backref replacement is done in two passes:
- 1) find out how long the string will be, and allocate buf
- 2) copy the part before match, replacement and backrefs to buf
-
- Jaakko Hyvätti <Jaakko.Hyvatti@iki.fi>
- */
-
- new_l = strlen(buf) + subs[0].rm_so; /* part before the match */
- walk = replace;
- while (*walk) {
- if ('\\' == *walk && isdigit((unsigned char)walk[1]) && ((unsigned char)walk[1]) - '0' <= re.re_nsub) {
- if (subs[walk[1] - '0'].rm_so > -1 && subs[walk[1] - '0'].rm_eo > -1) {
- new_l += subs[walk[1] - '0'].rm_eo - subs[walk[1] - '0'].rm_so;
- }
- walk += 2;
- } else {
- new_l++;
- walk++;
- }
- }
- if (new_l + 1 > buf_len) {
- buf_len = 1 + buf_len + 2 * new_l;
- nbuf = emalloc(buf_len);
- strcpy(nbuf, buf);
- efree(buf);
- buf = nbuf;
- }
- tmp = strlen(buf);
- /* copy the part of the string before the match */
- strncat(buf, &string[pos], subs[0].rm_so);
-
- /* copy replacement and backrefs */
- walkbuf = &buf[tmp + subs[0].rm_so];
- walk = replace;
- while (*walk) {
- if ('\\' == *walk && isdigit(walk[1]) && walk[1] - '0' <= (int)re.re_nsub) {
- if (subs[walk[1] - '0'].rm_so > -1 && subs[walk[1] - '0'].rm_eo > -1
- /* this next case shouldn't happen. it does. */
- && subs[walk[1] - '0'].rm_so <= subs[walk[1] - '0'].rm_eo) {
-
- tmp = subs[walk[1] - '0'].rm_eo - subs[walk[1] - '0'].rm_so;
- memcpy (walkbuf, &string[pos + subs[walk[1] - '0'].rm_so], tmp);
- walkbuf += tmp;
- }
- walk += 2;
- } else {
- *walkbuf++ = *walk++;
- }
- }
- *walkbuf = '\0';
-
- /* and get ready to keep looking for replacements */
- if (subs[0].rm_so == subs[0].rm_eo) {
- if (subs[0].rm_so + pos >= string_len) {
- break;
- }
- new_l = strlen (buf) + 1;
- if (new_l + 1 > buf_len) {
- buf_len = 1 + buf_len + 2 * new_l;
- nbuf = safe_emalloc(buf_len, sizeof(char), 0);
- strcpy(nbuf, buf);
- efree(buf);
- buf = nbuf;
- }
- pos += subs[0].rm_eo + 1;
- buf [new_l-1] = string [pos-1];
- buf [new_l] = '\0';
- } else {
- pos += subs[0].rm_eo;
- }
- } else { /* REG_NOMATCH */
- new_l = strlen(buf) + strlen(&string[pos]);
- if (new_l + 1 > buf_len) {
- buf_len = new_l + 1; /* now we know exactly how long it is */
- nbuf = safe_emalloc(buf_len, sizeof(char), 0);
- strcpy(nbuf, buf);
- efree(buf);
- buf = nbuf;
- }
- /* stick that last bit of string on our output */
- strcat(buf, &string[pos]);
- }
- }
-
- /* don't want to leak memory .. */
- efree(subs);
- regfree(&re);
-
- /* whew. */
- return (buf);
-}
-/* }}} */
-
-/* {{{ php_ereg_replace
- */
-static void php_ereg_replace(INTERNAL_FUNCTION_PARAMETERS, int icase)
-{
- pval **arg_pattern,
- **arg_replace,
- **arg_string;
- char *pattern;
- char *string;
- char *replace;
- char *ret;
-
- if (ZEND_NUM_ARGS() != 3 ||
- zend_get_parameters_ex(3, &arg_pattern, &arg_replace, &arg_string) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- if (Z_TYPE_PP(arg_pattern) == IS_STRING) {
- if (Z_STRVAL_PP(arg_pattern) && Z_STRLEN_PP(arg_pattern))
- pattern = estrndup(Z_STRVAL_PP(arg_pattern), Z_STRLEN_PP(arg_pattern));
- else
- pattern = STR_EMPTY_ALLOC();
- } else {
- convert_to_long_ex(arg_pattern);
- pattern = emalloc(2);
- pattern[0] = (char) Z_LVAL_PP(arg_pattern);
- pattern[1] = '\0';
- }
-
- if (Z_TYPE_PP(arg_replace) == IS_STRING) {
- if (Z_STRVAL_PP(arg_replace) && Z_STRLEN_PP(arg_replace))
- replace = estrndup(Z_STRVAL_PP(arg_replace), Z_STRLEN_PP(arg_replace));
- else
- replace = STR_EMPTY_ALLOC();
- } else {
- convert_to_long_ex(arg_replace);
- replace = emalloc(2);
- replace[0] = (char) Z_LVAL_PP(arg_replace);
- replace[1] = '\0';
- }
-
- convert_to_string_ex(arg_string);
- if (Z_STRVAL_PP(arg_string) && Z_STRLEN_PP(arg_string))
- string = estrndup(Z_STRVAL_PP(arg_string), Z_STRLEN_PP(arg_string));
- else
- string = STR_EMPTY_ALLOC();
-
- /* do the actual work */
- ret = php_reg_replace(pattern, replace, string, icase, 1);
- if (ret == (char *) -1) {
- RETVAL_FALSE;
- } else {
- RETVAL_STRING(ret, 1);
- STR_FREE(ret);
- }
-
- STR_FREE(string);
- STR_FREE(replace);
- STR_FREE(pattern);
-}
-/* }}} */
-
-/* {{{ proto string ereg_replace(string pattern, string replacement, string string)
- Replace regular expression */
-PHP_FUNCTION(ereg_replace)
-{
- php_ereg_replace(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0);
-}
-/* }}} */
-
-/* {{{ proto string eregi_replace(string pattern, string replacement, string string)
- Case insensitive replace regular expression */
-PHP_FUNCTION(eregi_replace)
-{
- php_ereg_replace(INTERNAL_FUNCTION_PARAM_PASSTHRU, 1);
-}
-/* }}} */
-
-/* {{{ php_split
- */
-static void php_split(INTERNAL_FUNCTION_PARAMETERS, int icase)
-{
- zval **spliton, **str, **arg_count = NULL;
- regex_t re;
- regmatch_t subs[1];
- char *strp, *endp;
- int err, size, count = -1, copts = 0;
- int argc = ZEND_NUM_ARGS();
-
- if (argc < 2 || argc > 3 ||
- zend_get_parameters_ex(argc, &spliton, &str, &arg_count) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- if (argc > 2) {
- convert_to_long_ex(arg_count);
- count = Z_LVAL_PP(arg_count);
- }
-
- if (icase)
- copts = REG_ICASE;
-
- convert_to_string_ex(spliton);
- convert_to_string_ex(str);
-
- strp = Z_STRVAL_PP(str);
- endp = strp + Z_STRLEN_PP(str);
-
- err = regcomp(&re, Z_STRVAL_PP(spliton), REG_EXTENDED | copts);
- if (err) {
- php_reg_eprint(err, &re);
- RETURN_FALSE;
- }
-
- array_init(return_value);
-
- /* churn through str, generating array entries as we go */
- while ((count == -1 || count > 1) && !(err = regexec(&re, strp, 1, subs, 0))) {
- if (subs[0].rm_so == 0 && subs[0].rm_eo) {
- /* match is at start of string, return empty string */
- add_next_index_stringl(return_value, "", 0, 1);
- /* skip ahead the length of the regex match */
- strp += subs[0].rm_eo;
- } else if (subs[0].rm_so == 0 && subs[0].rm_eo == 0) {
- /* No more matches */
- regfree(&re);
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid Regular Expression to split()");
- zend_hash_destroy(Z_ARRVAL_P(return_value));
- efree(Z_ARRVAL_P(return_value));
- RETURN_FALSE;
- } else {
- /* On a real match */
-
- /* make a copy of the substring */
- size = subs[0].rm_so;
-
- /* add it to the array */
- add_next_index_stringl(return_value, strp, size, 1);
-
- /* point at our new starting point */
- strp = strp + subs[0].rm_eo;
- }
-
- /* if we're only looking for a certain number of points,
- stop looking once we hit it */
- if (count != -1) {
- count--;
- }
- }
-
- /* see if we encountered an error */
- if (err && err != REG_NOMATCH) {
- php_reg_eprint(err, &re);
- regfree(&re);
- zend_hash_destroy(Z_ARRVAL_P(return_value));
- efree(Z_ARRVAL_P(return_value));
- RETURN_FALSE;
- }
-
- /* otherwise we just have one last element to add to the array */
- size = endp - strp;
-
- add_next_index_stringl(return_value, strp, size, 1);
-
- regfree(&re);
-}
-/* }}} */
-
-/* {{{ proto array split(string pattern, string string [, int limit])
- Split string into array by regular expression */
-PHP_FUNCTION(split)
-{
- php_split(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0);
-}
-/* }}} */
-
-/* {{{ proto array spliti(string pattern, string string [, int limit])
- Split string into array by regular expression case-insensitive */
-
-PHP_FUNCTION(spliti)
-{
- php_split(INTERNAL_FUNCTION_PARAM_PASSTHRU, 1);
-}
-
-/* }}} */
-
-/* {{{ proto string sql_regcase(string string)
- Make regular expression for case insensitive match */
-PHPAPI PHP_FUNCTION(sql_regcase)
-{
- zval **string;
- char *tmp;
- unsigned char c;
- register int i, j;
-
- if (ZEND_NUM_ARGS()!=1 || zend_get_parameters_ex(1, &string)==FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex(string);
-
- tmp = safe_emalloc(Z_STRLEN_PP(string), 4, 1);
-
- for (i = j = 0; i < Z_STRLEN_PP(string); i++) {
- c = (unsigned char) Z_STRVAL_PP(string)[i];
- if(isalpha(c)) {
- tmp[j++] = '[';
- tmp[j++] = toupper(c);
- tmp[j++] = tolower(c);
- tmp[j++] = ']';
- } else {
- tmp[j++] = c;
- }
- }
- tmp[j] = 0;
-
- RETVAL_STRINGL(tmp, j, 1);
- efree(tmp);
-}
-/* }}} */
-
-/*
- * 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/standard/reg.h b/ext/standard/reg.h
deleted file mode 100644
index 4d63884da6..0000000000
--- a/ext/standard/reg.h
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Rasmus Lerdorf <rasmus@lerdorf.on.ca> |
- +----------------------------------------------------------------------+
-*/
-
-
-/* $Id$ */
-
-#ifndef REG_H
-#define REG_H
-
-PHPAPI char *php_reg_replace(const char *pattern, const char *replace, const char *string, int icase, int extended);
-
-PHP_FUNCTION(ereg);
-PHP_FUNCTION(eregi);
-PHP_FUNCTION(eregi_replace);
-PHP_FUNCTION(ereg_replace);
-PHP_FUNCTION(split);
-PHP_FUNCTION(spliti);
-PHPAPI PHP_FUNCTION(sql_regcase);
-
-ZEND_BEGIN_MODULE_GLOBALS(reg)
- HashTable ht_rc;
-ZEND_END_MODULE_GLOBALS(reg)
-
-PHP_MINIT_FUNCTION(regex);
-PHP_MSHUTDOWN_FUNCTION(regex);
-PHP_MINFO_FUNCTION(regex);
-
-
-#ifdef ZTS
-#define REG(v) TSRMG(reg_globals_id, zend_reg_globals *, v)
-#else
-#define REG(v) (reg_globals.v)
-#endif
-
-#endif /* REG_H */
diff --git a/ext/standard/scanf.c b/ext/standard/scanf.c
deleted file mode 100644
index ba158e598c..0000000000
--- a/ext/standard/scanf.c
+++ /dev/null
@@ -1,1260 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Clayton Collie <clcollie@mindspring.com> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-/*
- scanf.c --
-
- This file contains the base code which implements sscanf and by extension
- fscanf. Original code is from TCL8.3.0 and bears the following copyright
-
-
-
- This software is copyrighted by the Regents of the University of
- California, Sun Microsystems, Inc., Scriptics Corporation,
- and other parties. The following terms apply to all files associated
- with the software unless explicitly disclaimed in individual files.
-
- The authors hereby grant permission to use, copy, modify, distribute,
- and license this software and its documentation for any purpose, provided
- that existing copyright notices are retained in all copies and that this
- notice is included verbatim in any distributions. No written agreement,
- license, or royalty fee is required for any of the authorized uses.
- Modifications to this software may be copyrighted by their authors
- and need not follow the licensing terms described here, provided that
- the new terms are clearly indicated on the first page of each file where
- they apply.
-
- IN NO EVENT SHALL THE AUTHORS OR DISTRIBUTORS BE LIABLE TO ANY PARTY
- FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
- ARISING OUT OF THE USE OF THIS SOFTWARE, ITS DOCUMENTATION, OR ANY
- DERIVATIVES THEREOF, EVEN IF THE AUTHORS HAVE BEEN ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-
- THE AUTHORS AND DISTRIBUTORS SPECIFICALLY DISCLAIM ANY WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT. THIS SOFTWARE
- IS PROVIDED ON AN "AS IS" BASIS, AND THE AUTHORS AND DISTRIBUTORS HAVE
- NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR
- MODIFICATIONS.
-
- GOVERNMENT USE: If you are acquiring this software on behalf of the
- U.S. government, the Government shall have only "Restricted Rights"
- in the software and related documentation as defined in the Federal
- Acquisition Regulations (FARs) in Clause 52.227.19 (c) (2). If you
- are acquiring the software on behalf of the Department of Defense, the
- software shall be classified as "Commercial Computer Software" and the
- Government shall have only "Restricted Rights" as defined in Clause
- 252.227-7013 (c) (1) of DFARs. Notwithstanding the foregoing, the
- authors grant the U.S. Government and others acting in its behalf
- permission to use and distribute the software in accordance with the
- terms specified in this license.
-
- */
-
-#include <stdio.h>
-#include <limits.h>
-#include <ctype.h>
-#include "php.h"
-#include "php_variables.h"
-#ifdef HAVE_LOCALE_H
-#include <locale.h>
-#endif
-#include "zend_execute.h"
-#include "zend_operators.h"
-#include "php_globals.h"
-#include "basic_functions.h"
-#include "scanf.h"
-
-/*
- * Flag values used internally by [f|s]canf.
- */
-
-#define SCAN_NOSKIP 0x1 /* Don't skip blanks. */
-#define SCAN_SUPPRESS 0x2 /* Suppress assignment. */
-#define SCAN_UNSIGNED 0x4 /* Read an unsigned value. */
-#define SCAN_WIDTH 0x8 /* A width value was supplied. */
-
-#define SCAN_SIGNOK 0x10 /* A +/- character is allowed. */
-#define SCAN_NODIGITS 0x20 /* No digits have been scanned. */
-#define SCAN_NOZERO 0x40 /* No zero digits have been scanned. */
-#define SCAN_XOK 0x80 /* An 'x' is allowed. */
-#define SCAN_PTOK 0x100 /* Decimal point is allowed. */
-#define SCAN_EXPOK 0x200 /* An exponent is allowed. */
-
-#define UCHAR(x) (zend_uchar)(x)
-
-
-
-/*
- * The following structure contains the information associated with
- * a character set.
- */
-
-typedef struct CharSet {
- int exclude; /* 1 if this is an exclusion set. */
- int nchars;
- char *chars;
- int nranges;
- struct Range {
- char start;
- char end;
- } *ranges;
-} CharSet;
-
-/*
- * Declarations for functions used only in this file.
- */
-
-static char *BuildCharSet(CharSet *cset, char *format);
-static int CharInSet(CharSet *cset, int ch);
-static void ReleaseCharSet(CharSet *cset);
-static inline void scan_set_error_return(int numVars, pval **return_value);
-
-
-/* {{{ BuildCharSet
- *----------------------------------------------------------------------
- *
- * BuildCharSet --
- *
- * This function examines a character set format specification
- * and builds a CharSet containing the individual characters and
- * character ranges specified.
- *
- * Results:
- * Returns the next format position.
- *
- * Side effects:
- * Initializes the charset.
- *
- *----------------------------------------------------------------------
- */
-static char * BuildCharSet(CharSet *cset, char *format)
-{
- char *ch, start;
- int nranges;
- char *end;
-
- memset(cset, 0, sizeof(CharSet));
-
- ch = format;
- if (*ch == '^') {
- cset->exclude = 1;
- ch = ++format;
- }
- end = format + 1; /* verify this - cc */
-
- /*
- * Find the close bracket so we can overallocate the set.
- */
-
- if (*ch == ']') {
- ch = end++;
- }
- nranges = 0;
- while (*ch != ']') {
- if (*ch == '-') {
- nranges++;
- }
- ch = end++;
- }
-
- cset->chars = (char *) safe_emalloc(sizeof(char), (end - format - 1), 0);
- if (nranges > 0) {
- cset->ranges = (struct Range *) safe_emalloc(sizeof(struct Range), nranges, 0);
- } else {
- cset->ranges = NULL;
- }
-
- /*
- * Now build the character set.
- */
-
- cset->nchars = cset->nranges = 0;
- ch = format++;
- start = *ch;
- if (*ch == ']' || *ch == '-') {
- cset->chars[cset->nchars++] = *ch;
- ch = format++;
- }
- while (*ch != ']') {
- if (*format == '-') {
- /*
- * This may be the first character of a range, so don't add
- * it yet.
- */
-
- start = *ch;
- } else if (*ch == '-') {
- /*
- * Check to see if this is the last character in the set, in which
- * case it is not a range and we should add the previous character
- * as well as the dash.
- */
-
- if (*format == ']') {
- cset->chars[cset->nchars++] = start;
- cset->chars[cset->nchars++] = *ch;
- } else {
- ch = format++;
-
- /*
- * Check to see if the range is in reverse order.
- */
-
- if (start < *ch) {
- cset->ranges[cset->nranges].start = start;
- cset->ranges[cset->nranges].end = *ch;
- } else {
- cset->ranges[cset->nranges].start = *ch;
- cset->ranges[cset->nranges].end = start;
- }
- cset->nranges++;
- }
- } else {
- cset->chars[cset->nchars++] = *ch;
- }
- ch = format++;
- }
- return format;
-}
-/* }}} */
-
-/* {{{ CharInSet
- *----------------------------------------------------------------------
- *
- * CharInSet --
- *
- * Check to see if a character matches the given set.
- *
- * Results:
- * Returns non-zero if the character matches the given set.
- *
- * Side effects:
- * None.
- *
- *----------------------------------------------------------------------
- */
-static int CharInSet(CharSet *cset, int c)
-{
- char ch = (char) c;
- int i, match = 0;
-
- for (i = 0; i < cset->nchars; i++) {
- if (cset->chars[i] == ch) {
- match = 1;
- break;
- }
- }
- if (!match) {
- for (i = 0; i < cset->nranges; i++) {
- if ((cset->ranges[i].start <= ch)
- && (ch <= cset->ranges[i].end)) {
- match = 1;
- break;
- }
- }
- }
- return (cset->exclude ? !match : match);
-}
-/* }}} */
-
-/* {{{ ReleaseCharSet
- *----------------------------------------------------------------------
- *
- * ReleaseCharSet --
- *
- * Free the storage associated with a character set.
- *
- * Results:
- * None.
- *
- * Side effects:
- * None.
- *
- *----------------------------------------------------------------------
- */
-static void ReleaseCharSet(CharSet *cset)
-{
- efree((char *)cset->chars);
- if (cset->ranges) {
- efree((char *)cset->ranges);
- }
-}
-/* }}} */
-
-/* {{{ ValidateFormat
- *----------------------------------------------------------------------
- *
- * ValidateFormat --
- *
- * Parse the format string and verify that it is properly formed
- * and that there are exactly enough variables on the command line.
- *
- * Results:
- * FAILURE or SUCCESS.
- *
- * Side effects:
- * May set php_error based on abnormal conditions.
- *
- * Parameters :
- * format The format string.
- * numVars The number of variables passed to the scan command.
- * totalSubs The number of variables that will be required.
- *
- *----------------------------------------------------------------------
-*/
-PHPAPI int ValidateFormat(char *format, int numVars, int *totalSubs)
-{
-#define STATIC_LIST_SIZE 16
- int gotXpg, gotSequential, value, i, flags;
- char *end, *ch = NULL;
- int staticAssign[STATIC_LIST_SIZE];
- int *nassign = staticAssign;
- int objIndex, xpgSize, nspace = STATIC_LIST_SIZE;
- TSRMLS_FETCH();
-
- /*
- * Initialize an array that records the number of times a variable
- * is assigned to by the format string. We use this to detect if
- * a variable is multiply assigned or left unassigned.
- */
-
- if (numVars > nspace) {
- nassign = (int*)safe_emalloc(sizeof(int), numVars, 0);
- nspace = numVars;
- }
- for (i = 0; i < nspace; i++) {
- nassign[i] = 0;
- }
-
- xpgSize = objIndex = gotXpg = gotSequential = 0;
-
- while (*format != '\0') {
- ch = format++;
- flags = 0;
-
- if (*ch != '%') {
- continue;
- }
- ch = format++;
- if (*ch == '%') {
- continue;
- }
- if (*ch == '*') {
- flags |= SCAN_SUPPRESS;
- ch = format++;
- goto xpgCheckDone;
- }
-
- if ( isdigit( (int)*ch ) ) {
- /*
- * Check for an XPG3-style %n$ specification. Note: there
- * must not be a mixture of XPG3 specs and non-XPG3 specs
- * in the same format string.
- */
-
- value = strtoul(format-1, &end, 10);
- if (*end != '$') {
- goto notXpg;
- }
- format = end+1;
- ch = format++;
- gotXpg = 1;
- if (gotSequential) {
- goto mixedXPG;
- }
- objIndex = value - 1;
- if ((objIndex < 0) || (numVars && (objIndex >= numVars))) {
- goto badIndex;
- } else if (numVars == 0) {
- /*
- * In the case where no vars are specified, the user can
- * specify %9999$ legally, so we have to consider special
- * rules for growing the assign array. 'value' is
- * guaranteed to be > 0.
- */
-
- /* set a lower artificial limit on this
- * in the interest of security and resource friendliness
- * 255 arguments should be more than enough. - cc
- */
- if (value > SCAN_MAX_ARGS) {
- goto badIndex;
- }
-
- xpgSize = (xpgSize > value) ? xpgSize : value;
- }
- goto xpgCheckDone;
- }
-
- notXpg:
- gotSequential = 1;
- if (gotXpg) {
- mixedXPG:
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", "cannot mix \"%\" and \"%n$\" conversion specifiers");
- goto error;
- }
-
- xpgCheckDone:
- /*
- * Parse any width specifier.
- */
-
- if (isdigit(UCHAR(*ch))) {
- value = strtoul(format-1, &format, 10);
- flags |= SCAN_WIDTH;
- ch = format++;
- }
-
- /*
- * Ignore size specifier.
- */
-
- if ((*ch == 'l') || (*ch == 'L') || (*ch == 'h')) {
- ch = format++;
- }
-
- if (!(flags & SCAN_SUPPRESS) && numVars && (objIndex >= numVars)) {
- goto badIndex;
- }
-
- /*
- * Handle the various field types.
- */
-
- switch (*ch) {
- case 'n':
- case 'd':
- case 'D':
- case 'i':
- case 'o':
- case 'x':
- case 'X':
- case 'u':
- case 'f':
- case 'e':
- case 'E':
- case 'g':
- case 's':
- break;
- case 'c':
- /* we differ here with the TCL implementation in allowing for */
- /* a character width specification, to be more consistent with */
- /* ANSI. since Zend auto allocates space for vars, this is no */
- /* problem - cc */
- /*
- if (flags & SCAN_WIDTH) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Field width may not be specified in %c conversion");
- goto error;
- }
- */
- break;
- case '[':
- if (*format == '\0') {
- goto badSet;
- }
- ch = format++;
- if (*ch == '^') {
- if (*format == '\0') {
- goto badSet;
- }
- ch = format++;
- }
- if (*ch == ']') {
- if (*format == '\0') {
- goto badSet;
- }
- ch = format++;
- }
- while (*ch != ']') {
- if (*format == '\0') {
- goto badSet;
- }
- ch = format++;
- }
- break;
- badSet:
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unmatched [ in format string");
- goto error;
- default:
- {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Bad scan conversion character \"%c\"", *ch);
- goto error;
- }
- }
- if (!(flags & SCAN_SUPPRESS)) {
- if (objIndex >= nspace) {
- /*
- * Expand the nassign buffer. If we are using XPG specifiers,
- * make sure that we grow to a large enough size. xpgSize is
- * guaranteed to be at least one larger than objIndex.
- */
- value = nspace;
- if (xpgSize) {
- nspace = xpgSize;
- } else {
- nspace += STATIC_LIST_SIZE;
- }
- if (nassign == staticAssign) {
- nassign = (void *)safe_emalloc(nspace, sizeof(int), 0);
- for (i = 0; i < STATIC_LIST_SIZE; ++i) {
- nassign[i] = staticAssign[i];
- }
- } else {
- nassign = (void *)erealloc((void *)nassign, nspace * sizeof(int));
- }
- for (i = value; i < nspace; i++) {
- nassign[i] = 0;
- }
- }
- nassign[objIndex]++;
- objIndex++;
- }
- } /* while (*format != '\0') */
-
- /*
- * Verify that all of the variable were assigned exactly once.
- */
-
- if (numVars == 0) {
- if (xpgSize) {
- numVars = xpgSize;
- } else {
- numVars = objIndex;
- }
- }
- if (totalSubs) {
- *totalSubs = numVars;
- }
- for (i = 0; i < numVars; i++) {
- if (nassign[i] > 1) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", "Variable is assigned by multiple \"%n$\" conversion specifiers");
- goto error;
- } else if (!xpgSize && (nassign[i] == 0)) {
- /*
- * If the space is empty, and xpgSize is 0 (means XPG wasn't
- * used, and/or numVars != 0), then too many vars were given
- */
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Variable is not assigned by any conversion specifiers");
- goto error;
- }
- }
-
- if (nassign != staticAssign) {
- efree((char *)nassign);
- }
- return SCAN_SUCCESS;
-
-badIndex:
- if (gotXpg) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", "\"%n$\" argument index out of range");
- } else {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Different numbers of variable names and field specifiers");
- }
-
-error:
- if (nassign != staticAssign) {
- efree((char *)nassign);
- }
- return SCAN_ERROR_INVALID_FORMAT;
-#undef STATIC_LIST_SIZE
-}
-/* }}} */
-
-/* {{{ php_sscanf_internal
- * This is the internal function which does processing on behalf of
- * both sscanf() and fscanf()
- *
- * parameters :
- * string literal string to be processed
- * format format string
- * argCount total number of elements in the args array
- * args arguments passed in from user function (f|s)scanf
- * varStart offset (in args) of 1st variable passed in to (f|s)scanf
- * return_value set with the results of the scan
- */
-
-PHPAPI int php_sscanf_internal( char *string, char *format,
- int argCount, zval ***args,
- int varStart, pval **return_value TSRMLS_DC)
-{
- int numVars, nconversions, totalVars = -1;
- int i, value, result;
- int objIndex;
- char *end, *baseString;
- zval **current;
- char op = 0;
- int base = 0;
- int underflow = 0;
- size_t width;
- long (*fn)() = NULL;
- char *ch, sch;
- int flags;
- char buf[64]; /* Temporary buffer to hold scanned
- * number strings before they are
- * passed to strtoul. */
-
-
- /* do some sanity checking */
- if ((varStart > argCount) || (varStart < 0)){
- varStart = SCAN_MAX_ARGS + 1;
- }
- numVars = argCount - varStart;
- if (numVars < 0) {
- numVars = 0;
- }
-
-#if 0
- zend_printf("<br>in sscanf_internal : <br> string is \"%s\", format = \"%s\"<br> NumVars = %d. VarStart = %d<br>-------------------------<br>",
- string, format, numVars, varStart);
-#endif
- /*
- * Check for errors in the format string.
- */
- if (ValidateFormat(format, numVars, &totalVars) != SCAN_SUCCESS) {
- scan_set_error_return( numVars, return_value );
- return SCAN_ERROR_INVALID_FORMAT;
- }
-
- objIndex = numVars ? varStart : 0;
-
- /*
- * If any variables are passed, make sure they are all passed by reference
- */
- if (numVars) {
- for (i = varStart;i < argCount;i++){
- if ( ! PZVAL_IS_REF( *args[ i ] ) ) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Parameter %d must be passed by reference", i);
- scan_set_error_return(numVars, return_value);
- return SCAN_ERROR_VAR_PASSED_BYVAL;
- }
- }
- }
-
-
- /*
- * Allocate space for the result objects. Only happens when no variables
- * are specified
- */
-
- if (!numVars) {
- /* allocate an array for return */
- array_init(*return_value);
-
- for (i = 0; i < totalVars; i++) {
- if (add_next_index_null(*return_value) == FAILURE) {
- scan_set_error_return(0, return_value);
- return FAILURE;
- }
- }
- }
-
- baseString = string;
-
- /*
- * Iterate over the format string filling in the result objects until
- * we reach the end of input, the end of the format string, or there
- * is a mismatch.
- */
-
- nconversions = 0;
- /* note ! - we need to limit the loop for objIndex to keep it in bounds */
-
- while (*format != '\0') {
-
- ch = format++;
-
- flags = 0;
-
- /*
- * If we see whitespace in the format, skip whitespace in the string.
- */
-
- if ( isspace( (int)*ch ) ) {
- sch = *string;
- while ( isspace( (int)sch ) ) {
- if (*string == '\0') {
- goto done;
- }
- string++;
- sch = *string;
- }
- continue;
- }
-
- if (*ch != '%') {
- literal:
- if (*string == '\0') {
- underflow = 1;
- goto done;
- }
- sch = *string;
- string++;
- if (*ch != sch) {
- goto done;
- }
- continue;
- }
-
- ch = format++;
- if (*ch == '%') {
- goto literal;
- }
-
- /*
- * Check for assignment suppression ('*') or an XPG3-style
- * assignment ('%n$').
- */
-
- if (*ch == '*') {
- flags |= SCAN_SUPPRESS;
- ch = format++;
- } else if ( isdigit(UCHAR(*ch))) {
- value = strtoul(format-1, &end, 10);
- if (*end == '$') {
- format = end+1;
- ch = format++;
- objIndex = varStart + value;
- }
- }
-
- /*
- * Parse any width specifier.
- */
-
- if ( isdigit(UCHAR(*ch))) {
- width = strtoul(format-1, &format, 10);
- ch = format++;
- } else {
- width = 0;
- }
-
- /*
- * Ignore size specifier.
- */
-
- if ((*ch == 'l') || (*ch == 'L') || (*ch == 'h')) {
- ch = format++;
- }
-
- /*
- * Handle the various field types.
- */
-
- switch (*ch) {
- case 'n':
- if (!(flags & SCAN_SUPPRESS)) {
- if (numVars) {
- zend_uint refcount;
-
- current = args[objIndex++];
- refcount = (*current)->refcount;
- zval_dtor( *current );
- ZVAL_LONG( *current, (long)(string - baseString) );
- (*current)->refcount = refcount;
- (*current)->is_ref = 1;
- } else {
- add_index_long(*return_value, objIndex++, string - baseString);
- }
- }
- nconversions++;
- continue;
-
- case 'd':
- case 'D':
- op = 'i';
- base = 10;
- fn = (long (*)())strtol;
- break;
- case 'i':
- op = 'i';
- base = 0;
- fn = (long (*)())strtol;
- break;
- case 'o':
- op = 'i';
- base = 8;
- fn = (long (*)())strtol;
- break;
- case 'x':
- case 'X':
- op = 'i';
- base = 16;
- fn = (long (*)())strtol;
- break;
- case 'u':
- op = 'i';
- base = 10;
- flags |= SCAN_UNSIGNED;
- fn = (long (*)())strtoul;
- break;
-
- case 'f':
- case 'e':
- case 'E':
- case 'g':
- op = 'f';
- break;
-
- case 's':
- op = 's';
- break;
-
- case 'c':
- op = 's';
- flags |= SCAN_NOSKIP;
- /*-cc-*/
- if (0 == width) {
- width = 1;
- }
- /*-cc-*/
- break;
- case '[':
- op = '[';
- flags |= SCAN_NOSKIP;
- break;
- } /* switch */
-
- /*
- * At this point, we will need additional characters from the
- * string to proceed.
- */
-
- if (*string == '\0') {
- underflow = 1;
- goto done;
- }
-
- /*
- * Skip any leading whitespace at the beginning of a field unless
- * the format suppresses this behavior.
- */
-
- if (!(flags & SCAN_NOSKIP)) {
- while (*string != '\0') {
- sch = *string;
- if (! isspace((int)sch) ) {
- break;
- }
- string++;
- }
- if (*string == '\0') {
- underflow = 1;
- goto done;
- }
- }
-
- /*
- * Perform the requested scanning operation.
- */
-
- switch (op) {
- case 'c':
- case 's':
- /*
- * Scan a string up to width characters or whitespace.
- */
-
- if (width == 0) {
- width = (size_t) ~0;
- }
- end = string;
- while (*end != '\0') {
- sch = *end;
- if ( isspace( (int)sch ) ) {
- break;
- }
- end++;
- if (--width == 0) {
- break;
- }
- }
- if (!(flags & SCAN_SUPPRESS)) {
- if (numVars) {
- zend_uint refcount;
-
- current = args[objIndex++];
- refcount = (*current)->refcount;
- zval_dtor( *current );
- ZVAL_STRINGL( *current, string, end-string, 1);
- (*current)->refcount = refcount;
- (*current)->is_ref = 1;
- } else {
- add_index_stringl( *return_value, objIndex++, string, end-string, 1);
- }
- }
- string = end;
- break;
-
- case '[': {
- CharSet cset;
-
- if (width == 0) {
- width = (size_t) ~0;
- }
- end = string;
-
- format = BuildCharSet(&cset, format);
- while (*end != '\0') {
- sch = *end;
- if (!CharInSet(&cset, (int)sch)) {
- break;
- }
- end++;
- if (--width == 0) {
- break;
- }
- }
- ReleaseCharSet(&cset);
-
- if (string == end) {
- /*
- * Nothing matched the range, stop processing
- */
- goto done;
- }
- if (!(flags & SCAN_SUPPRESS)) {
- if (numVars) {
- current = args[objIndex++];
- zval_dtor( *current );
- ZVAL_STRINGL( *current, string, end-string, 1);
- } else {
- add_index_stringl(*return_value, objIndex++, string, end-string, 1);
- }
- }
- string = end;
-
- break;
- }
- /*
- case 'c':
- / Scan a single character./
-
- sch = *string;
- string++;
- if (!(flags & SCAN_SUPPRESS)) {
- if (numVars) {
- char __buf[2];
- __buf[0] = sch;
- __buf[1] = '\0';;
- current = args[objIndex++];
- convert_to_string_ex( current );
- ZVAL_STRINGL( *current, __buf, 1, 1);
- } else {
- add_index_stringl(*return_value, objIndex++, &sch, 1, 1);
- }
- }
- break;
- */
- case 'i':
- /*
- * Scan an unsigned or signed integer.
- */
-
- /*-cc-*/
- buf[0] = '\0';
- /*-cc-*/
- if ((width == 0) || (width > sizeof(buf) - 1)) {
- width = sizeof(buf) - 1;
- }
-
- flags |= SCAN_SIGNOK | SCAN_NODIGITS | SCAN_NOZERO;
- for (end = buf; width > 0; width--) {
- switch (*string) {
- /*
- * The 0 digit has special meaning at the beginning of
- * a number. If we are unsure of the base, it
- * indicates that we are in base 8 or base 16 (if it is
- * followed by an 'x').
- */
- case '0':
- /*-cc-*/
- if (base == 16) {
- flags |= SCAN_XOK;
- }
- /*-cc-*/
- if (base == 0) {
- base = 8;
- flags |= SCAN_XOK;
- }
- if (flags & SCAN_NOZERO) {
- flags &= ~(SCAN_SIGNOK | SCAN_NODIGITS | SCAN_NOZERO);
- } else {
- flags &= ~(SCAN_SIGNOK | SCAN_XOK | SCAN_NODIGITS);
- }
- goto addToInt;
-
- case '1': case '2': case '3': case '4':
- case '5': case '6': case '7':
- if (base == 0) {
- base = 10;
- }
- flags &= ~(SCAN_SIGNOK | SCAN_XOK | SCAN_NODIGITS);
- goto addToInt;
-
- case '8': case '9':
- if (base == 0) {
- base = 10;
- }
- if (base <= 8) {
- break;
- }
- flags &= ~(SCAN_SIGNOK | SCAN_XOK | SCAN_NODIGITS);
- goto addToInt;
-
- case 'A': case 'B': case 'C':
- case 'D': case 'E': case 'F':
- case 'a': case 'b': case 'c':
- case 'd': case 'e': case 'f':
- if (base <= 10) {
- break;
- }
- flags &= ~(SCAN_SIGNOK | SCAN_XOK | SCAN_NODIGITS);
- goto addToInt;
-
- case '+': case '-':
- if (flags & SCAN_SIGNOK) {
- flags &= ~SCAN_SIGNOK;
- goto addToInt;
- }
- break;
-
- case 'x': case 'X':
- if ((flags & SCAN_XOK) && (end == buf+1)) {
- base = 16;
- flags &= ~SCAN_XOK;
- goto addToInt;
- }
- break;
- }
-
- /*
- * We got an illegal character so we are done accumulating.
- */
-
- break;
-
- addToInt:
- /*
- * Add the character to the temporary buffer.
- */
- *end++ = *string++;
- if (*string == '\0') {
- break;
- }
- }
-
- /*
- * Check to see if we need to back up because we only got a
- * sign or a trailing x after a 0.
- */
-
- if (flags & SCAN_NODIGITS) {
- if (*string == '\0') {
- underflow = 1;
- }
- goto done;
- } else if (end[-1] == 'x' || end[-1] == 'X') {
- end--;
- string--;
- }
-
-
- /*
- * Scan the value from the temporary buffer. If we are
- * returning a large unsigned value, we have to convert it back
- * to a string since PHP only supports signed values.
- */
-
- if (!(flags & SCAN_SUPPRESS)) {
- *end = '\0';
- value = (int) (*fn)(buf, NULL, base);
- if ((flags & SCAN_UNSIGNED) && (value < 0)) {
- sprintf(buf, "%u", value); /* INTL: ISO digit */
- if (numVars) {
- /* change passed value type to string */
- current = args[objIndex++];
- convert_to_string( *current );
- ZVAL_STRING( *current, buf, 1 );
- } else {
- add_index_string(*return_value, objIndex++, buf, 1);
- }
- } else {
- if (numVars) {
- current = args[objIndex++];
- convert_to_long( *current );
- Z_LVAL(**current) = value;
- } else {
- add_index_long(*return_value, objIndex++, value);
- }
- }
- }
-
- break;
-
- case 'f':
- /*
- * Scan a floating point number
- */
- buf[0] = '\0'; /* call me pedantic */
- if ((width == 0) || (width > sizeof(buf) - 1)) {
- width = sizeof(buf) - 1;
- }
- flags |= SCAN_SIGNOK | SCAN_NODIGITS | SCAN_PTOK | SCAN_EXPOK;
- for (end = buf; width > 0; width--) {
- switch (*string) {
- case '0': case '1': case '2': case '3':
- case '4': case '5': case '6': case '7':
- case '8': case '9':
- flags &= ~(SCAN_SIGNOK | SCAN_NODIGITS);
- goto addToFloat;
- case '+': case '-':
- if (flags & SCAN_SIGNOK) {
- flags &= ~SCAN_SIGNOK;
- goto addToFloat;
- }
- break;
- case '.':
- if (flags & SCAN_PTOK) {
- flags &= ~(SCAN_SIGNOK | SCAN_PTOK);
- goto addToFloat;
- }
- break;
- case 'e': case 'E':
- /*
- * An exponent is not allowed until there has
- * been at least one digit.
- */
-
- if ((flags & (SCAN_NODIGITS | SCAN_EXPOK)) == SCAN_EXPOK) {
- flags = (flags & ~(SCAN_EXPOK|SCAN_PTOK))
- | SCAN_SIGNOK | SCAN_NODIGITS;
- goto addToFloat;
- }
- break;
- }
-
- /*
- * We got an illegal character so we are done accumulating.
- */
-
- break;
-
- addToFloat:
- /*
- * Add the character to the temporary buffer.
- */
-
- *end++ = *string++;
- if (*string == '\0') {
- break;
- }
- }
-
- /*
- * Check to see if we need to back up because we saw a
- * trailing 'e' or sign.
- */
-
- if (flags & SCAN_NODIGITS) {
- if (flags & SCAN_EXPOK) {
- /*
- * There were no digits at all so scanning has
- * failed and we are done.
- */
- if (*string == '\0') {
- underflow = 1;
- }
- goto done;
- }
-
- /*
- * We got a bad exponent ('e' and maybe a sign).
- */
-
- end--;
- string--;
- if (*end != 'e' && *end != 'E') {
- end--;
- string--;
- }
- }
-
- /*
- * Scan the value from the temporary buffer.
- */
-
- if (!(flags & SCAN_SUPPRESS)) {
- double dvalue;
- *end = '\0';
- dvalue = strtod(buf, NULL);
- if (numVars) {
- current = args[objIndex++];
- convert_to_double( *current );
- Z_DVAL_PP( current ) = dvalue;
- } else {
- add_index_double( *return_value, objIndex++, dvalue );
- }
- }
- break;
- } /* switch (op) */
- nconversions++;
- } /* while (*format != '\0') */
-
-done:
- result = SCAN_SUCCESS;
-
- if (underflow && (0==nconversions)) {
- scan_set_error_return( numVars, return_value );
- result = SCAN_ERROR_EOF;
- } else if (numVars) {
- convert_to_long( *return_value );
- Z_LVAL_PP(return_value) = nconversions;
- } else if (nconversions < totalVars) {
- /* to do : not all elements converted. we need to prune the list - cc
- */
- }
-
- return result;
-}
-/* }}} */
-
-/* the compiler choked when i tried to make this a macro */
-static inline void scan_set_error_return(int numVars, pval **return_value)
-{
- if (numVars) {
- Z_TYPE_PP(return_value) = IS_LONG;
- Z_LVAL_PP(return_value) = SCAN_ERROR_EOF; /* EOF marker */
- } else {
- /* pval_destructor( *return_value ); */
- /* convert_to_null calls destructor */
- convert_to_null( *return_value );
- }
-}
-
-
-/*
- * 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/standard/scanf.h b/ext/standard/scanf.h
deleted file mode 100644
index 95b4670723..0000000000
--- a/ext/standard/scanf.h
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Clayton Collie <clcollie@mindspring.com> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifndef SCANF_H
-#define SCANF_H
-
-
-#define SCAN_MAX_ARGS 0xFF /* Maximum number of variable which can be */
- /* passed to (f|s)scanf. This is an artifical */
- /* upper limit to keep resources in check and */
- /* minimize the possibility of exploits */
-
-#define SCAN_SUCCESS SUCCESS
-#define SCAN_ERROR_EOF -1 /* indicates premature termination of scan */
- /* can be caused by bad parameters or format*/
- /* string. */
-#define SCAN_ERROR_INVALID_FORMAT (SCAN_ERROR_EOF - 1)
-#define SCAN_ERROR_VAR_PASSED_BYVAL (SCAN_ERROR_INVALID_FORMAT - 1)
-#define SCAN_ERROR_WRONG_PARAM_COUNT (SCAN_ERROR_VAR_PASSED_BYVAL - 1)
-#define SCAN_ERROR_INTERNAL (SCAN_ERROR_WRONG_PARAM_COUNT - 1)
-
-
-/*
- * The following are here solely for the benefit of the scanf type functions
- * e.g. fscanf
- */
-PHPAPI int ValidateFormat(char *format, int numVars, int *totalVars);
-PHPAPI int php_sscanf_internal(char *string,char *format,int argCount,zval ***args,
- int varStart, pval **return_value TSRMLS_DC);
-
-
-#endif /* SCANF_H */
diff --git a/ext/standard/sha1.c b/ext/standard/sha1.c
deleted file mode 100644
index a115e6fa9b..0000000000
--- a/ext/standard/sha1.c
+++ /dev/null
@@ -1,427 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Stefan Esser <sesser@php.net> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#include <stdio.h>
-#include "php.h"
-
-/* This code is heavily based on the PHP md5 implementation */
-
-#include "sha1.h"
-
-PHPAPI void make_sha1_digest(char *sha1str, unsigned char *digest)
-{
- int i;
-
- for (i = 0; i < 20; i++) {
- sprintf(sha1str, "%02x", digest[i]);
- sha1str += 2;
- }
-
- *sha1str = '\0';
-}
-
-/* {{{ proto string sha1(string str [, bool raw_output])
- Calculate the sha1 hash of a string */
-PHP_FUNCTION(sha1)
-{
- char *arg;
- int arg_len;
- zend_bool raw_output = 0;
- char sha1str[41];
- PHP_SHA1_CTX context;
- unsigned char digest[20];
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|b", &arg, &arg_len, &raw_output) == FAILURE) {
- return;
- }
-
- sha1str[0] = '\0';
- PHP_SHA1Init(&context);
- PHP_SHA1Update(&context, arg, arg_len);
- PHP_SHA1Final(digest, &context);
- if (raw_output) {
- RETURN_STRINGL(digest, 20, 1);
- } else {
- make_sha1_digest(sha1str, digest);
- RETVAL_STRING(sha1str, 1);
- }
-
-}
-
-/* }}} */
-
-/* {{{ proto string sha1_file(string filename [, bool raw_output])
- Calculate the sha1 hash of given filename */
-PHP_FUNCTION(sha1_file)
-{
- char *arg;
- int arg_len;
- zend_bool raw_output = 0;
- char sha1str[41];
- unsigned char buf[1024];
- unsigned char digest[20];
- PHP_SHA1_CTX context;
- int n;
- FILE *fp;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|b", &arg, &arg_len, &raw_output) == FAILURE) {
- return;
- }
-
- if (PG(safe_mode) && (!php_checkuid(arg, NULL, CHECKUID_CHECK_FILE_AND_DIR))) {
- RETURN_FALSE;
- }
-
- if (php_check_open_basedir(arg TSRMLS_CC)) {
- RETURN_FALSE;
- }
-
- if ((fp = VCWD_FOPEN(arg, "rb")) == NULL) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to open file");
- RETURN_FALSE;
- }
-
- PHP_SHA1Init(&context);
-
- while ((n = fread(buf, 1, sizeof(buf), fp)) > 0) {
- PHP_SHA1Update(&context, buf, n);
- }
-
- PHP_SHA1Final(digest, &context);
-
- if (ferror(fp)) {
- fclose(fp);
- RETURN_FALSE;
- }
-
- fclose(fp);
-
- if (raw_output) {
- RETURN_STRINGL(digest, 20, 1);
- } else {
- make_sha1_digest(sha1str, digest);
- RETVAL_STRING(sha1str, 1);
- }
-}
-/* }}} */
-
-
-static void SHA1Transform(php_uint32[5], const unsigned char[64]);
-static void SHA1Encode(unsigned char *, php_uint32 *, unsigned int);
-static void SHA1Decode(php_uint32 *, const unsigned char *, unsigned int);
-
-static unsigned char PADDING[64] =
-{
- 0x80, 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, 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
-};
-
-/* F, G, H and I are basic SHA1 functions.
- */
-#define F(x, y, z) ((z) ^ ((x) & ((y) ^ (z))))
-#define G(x, y, z) ((x) ^ (y) ^ (z))
-#define H(x, y, z) (((x) & (y)) | ((z) & ((x) | (y))))
-#define I(x, y, z) ((x) ^ (y) ^ (z))
-
-/* ROTATE_LEFT rotates x left n bits.
- */
-#define ROTATE_LEFT(x, n) (((x) << (n)) | ((x) >> (32-(n))))
-
-/* W[i]
- */
-#define W(i) ( tmp=x[(i-3)&15]^x[(i-8)&15]^x[(i-14)&15]^x[i&15], \
- (x[i&15]=ROTATE_LEFT(tmp, 1)) )
-
-/* FF, GG, HH, and II transformations for rounds 1, 2, 3, and 4.
- */
-#define FF(a, b, c, d, e, w) { \
- (e) += F ((b), (c), (d)) + (w) + (php_uint32)(0x5A827999); \
- (e) += ROTATE_LEFT ((a), 5); \
- (b) = ROTATE_LEFT((b), 30); \
- }
-#define GG(a, b, c, d, e, w) { \
- (e) += G ((b), (c), (d)) + (w) + (php_uint32)(0x6ED9EBA1); \
- (e) += ROTATE_LEFT ((a), 5); \
- (b) = ROTATE_LEFT((b), 30); \
- }
-#define HH(a, b, c, d, e, w) { \
- (e) += H ((b), (c), (d)) + (w) + (php_uint32)(0x8F1BBCDC); \
- (e) += ROTATE_LEFT ((a), 5); \
- (b) = ROTATE_LEFT((b), 30); \
- }
-#define II(a, b, c, d, e, w) { \
- (e) += I ((b), (c), (d)) + (w) + (php_uint32)(0xCA62C1D6); \
- (e) += ROTATE_LEFT ((a), 5); \
- (b) = ROTATE_LEFT((b), 30); \
- }
-
-
-/* {{{ PHP_SHA1Init
- * SHA1 initialization. Begins an SHA1 operation, writing a new context.
- */
-PHPAPI void PHP_SHA1Init(PHP_SHA1_CTX * context)
-{
- context->count[0] = context->count[1] = 0;
- /* Load magic initialization constants.
- */
- context->state[0] = 0x67452301;
- context->state[1] = 0xefcdab89;
- context->state[2] = 0x98badcfe;
- context->state[3] = 0x10325476;
- context->state[4] = 0xc3d2e1f0;
-}
-/* }}} */
-
-/* {{{ PHP_SHA1Update
- SHA1 block update operation. Continues an SHA1 message-digest
- operation, processing another message block, and updating the
- context.
- */
-PHPAPI void PHP_SHA1Update(PHP_SHA1_CTX * context, const unsigned char *input,
- unsigned int inputLen)
-{
- unsigned int i, index, partLen;
-
- /* Compute number of bytes mod 64 */
- index = (unsigned int) ((context->count[0] >> 3) & 0x3F);
-
- /* Update number of bits */
- if ((context->count[0] += ((php_uint32) inputLen << 3))
- < ((php_uint32) inputLen << 3))
- context->count[1]++;
- context->count[1] += ((php_uint32) inputLen >> 29);
-
- partLen = 64 - index;
-
- /* Transform as many times as possible.
- */
- if (inputLen >= partLen) {
- memcpy
- ((unsigned char*) & context->buffer[index], (unsigned char*) input, partLen);
- SHA1Transform(context->state, context->buffer);
-
- for (i = partLen; i + 63 < inputLen; i += 64)
- SHA1Transform(context->state, &input[i]);
-
- index = 0;
- } else
- i = 0;
-
- /* Buffer remaining input */
- memcpy
- ((unsigned char*) & context->buffer[index], (unsigned char*) & input[i],
- inputLen - i);
-}
-/* }}} */
-
-/* {{{ PHP_SHA1Final
- SHA1 finalization. Ends an SHA1 message-digest operation, writing the
- the message digest and zeroizing the context.
- */
-PHPAPI void PHP_SHA1Final(unsigned char digest[20], PHP_SHA1_CTX * context)
-{
- unsigned char bits[8];
- unsigned int index, padLen;
-
- /* Save number of bits */
- bits[7] = context->count[0] & 0xFF;
- bits[6] = (context->count[0] >> 8) & 0xFF;
- bits[5] = (context->count[0] >> 16) & 0xFF;
- bits[4] = (context->count[0] >> 24) & 0xFF;
- bits[3] = context->count[1] & 0xFF;
- bits[2] = (context->count[1] >> 8) & 0xFF;
- bits[1] = (context->count[1] >> 16) & 0xFF;
- bits[0] = (context->count[1] >> 24) & 0xFF;
-
- /* Pad out to 56 mod 64.
- */
- index = (unsigned int) ((context->count[0] >> 3) & 0x3f);
- padLen = (index < 56) ? (56 - index) : (120 - index);
- PHP_SHA1Update(context, PADDING, padLen);
-
- /* Append length (before padding) */
- PHP_SHA1Update(context, bits, 8);
-
- /* Store state in digest */
- SHA1Encode(digest, context->state, 20);
-
- /* Zeroize sensitive information.
- */
- memset((unsigned char*) context, 0, sizeof(*context));
-}
-/* }}} */
-
-/* {{{ SHA1Transform
- * SHA1 basic transformation. Transforms state based on block.
- */
-static void SHA1Transform(state, block)
-php_uint32 state[5];
-const unsigned char block[64];
-{
- php_uint32 a = state[0], b = state[1], c = state[2];
- php_uint32 d = state[3], e = state[4], x[16], tmp;
-
- SHA1Decode(x, block, 64);
-
- /* Round 1 */
- FF(a, b, c, d, e, x[0]); /* 1 */
- FF(e, a, b, c, d, x[1]); /* 2 */
- FF(d, e, a, b, c, x[2]); /* 3 */
- FF(c, d, e, a, b, x[3]); /* 4 */
- FF(b, c, d, e, a, x[4]); /* 5 */
- FF(a, b, c, d, e, x[5]); /* 6 */
- FF(e, a, b, c, d, x[6]); /* 7 */
- FF(d, e, a, b, c, x[7]); /* 8 */
- FF(c, d, e, a, b, x[8]); /* 9 */
- FF(b, c, d, e, a, x[9]); /* 10 */
- FF(a, b, c, d, e, x[10]); /* 11 */
- FF(e, a, b, c, d, x[11]); /* 12 */
- FF(d, e, a, b, c, x[12]); /* 13 */
- FF(c, d, e, a, b, x[13]); /* 14 */
- FF(b, c, d, e, a, x[14]); /* 15 */
- FF(a, b, c, d, e, x[15]); /* 16 */
- FF(e, a, b, c, d, W(16)); /* 17 */
- FF(d, e, a, b, c, W(17)); /* 18 */
- FF(c, d, e, a, b, W(18)); /* 19 */
- FF(b, c, d, e, a, W(19)); /* 20 */
-
- /* Round 2 */
- GG(a, b, c, d, e, W(20)); /* 21 */
- GG(e, a, b, c, d, W(21)); /* 22 */
- GG(d, e, a, b, c, W(22)); /* 23 */
- GG(c, d, e, a, b, W(23)); /* 24 */
- GG(b, c, d, e, a, W(24)); /* 25 */
- GG(a, b, c, d, e, W(25)); /* 26 */
- GG(e, a, b, c, d, W(26)); /* 27 */
- GG(d, e, a, b, c, W(27)); /* 28 */
- GG(c, d, e, a, b, W(28)); /* 29 */
- GG(b, c, d, e, a, W(29)); /* 30 */
- GG(a, b, c, d, e, W(30)); /* 31 */
- GG(e, a, b, c, d, W(31)); /* 32 */
- GG(d, e, a, b, c, W(32)); /* 33 */
- GG(c, d, e, a, b, W(33)); /* 34 */
- GG(b, c, d, e, a, W(34)); /* 35 */
- GG(a, b, c, d, e, W(35)); /* 36 */
- GG(e, a, b, c, d, W(36)); /* 37 */
- GG(d, e, a, b, c, W(37)); /* 38 */
- GG(c, d, e, a, b, W(38)); /* 39 */
- GG(b, c, d, e, a, W(39)); /* 40 */
-
- /* Round 3 */
- HH(a, b, c, d, e, W(40)); /* 41 */
- HH(e, a, b, c, d, W(41)); /* 42 */
- HH(d, e, a, b, c, W(42)); /* 43 */
- HH(c, d, e, a, b, W(43)); /* 44 */
- HH(b, c, d, e, a, W(44)); /* 45 */
- HH(a, b, c, d, e, W(45)); /* 46 */
- HH(e, a, b, c, d, W(46)); /* 47 */
- HH(d, e, a, b, c, W(47)); /* 48 */
- HH(c, d, e, a, b, W(48)); /* 49 */
- HH(b, c, d, e, a, W(49)); /* 50 */
- HH(a, b, c, d, e, W(50)); /* 51 */
- HH(e, a, b, c, d, W(51)); /* 52 */
- HH(d, e, a, b, c, W(52)); /* 53 */
- HH(c, d, e, a, b, W(53)); /* 54 */
- HH(b, c, d, e, a, W(54)); /* 55 */
- HH(a, b, c, d, e, W(55)); /* 56 */
- HH(e, a, b, c, d, W(56)); /* 57 */
- HH(d, e, a, b, c, W(57)); /* 58 */
- HH(c, d, e, a, b, W(58)); /* 59 */
- HH(b, c, d, e, a, W(59)); /* 60 */
-
- /* Round 4 */
- II(a, b, c, d, e, W(60)); /* 61 */
- II(e, a, b, c, d, W(61)); /* 62 */
- II(d, e, a, b, c, W(62)); /* 63 */
- II(c, d, e, a, b, W(63)); /* 64 */
- II(b, c, d, e, a, W(64)); /* 65 */
- II(a, b, c, d, e, W(65)); /* 66 */
- II(e, a, b, c, d, W(66)); /* 67 */
- II(d, e, a, b, c, W(67)); /* 68 */
- II(c, d, e, a, b, W(68)); /* 69 */
- II(b, c, d, e, a, W(69)); /* 70 */
- II(a, b, c, d, e, W(70)); /* 71 */
- II(e, a, b, c, d, W(71)); /* 72 */
- II(d, e, a, b, c, W(72)); /* 73 */
- II(c, d, e, a, b, W(73)); /* 74 */
- II(b, c, d, e, a, W(74)); /* 75 */
- II(a, b, c, d, e, W(75)); /* 76 */
- II(e, a, b, c, d, W(76)); /* 77 */
- II(d, e, a, b, c, W(77)); /* 78 */
- II(c, d, e, a, b, W(78)); /* 79 */
- II(b, c, d, e, a, W(79)); /* 80 */
-
- state[0] += a;
- state[1] += b;
- state[2] += c;
- state[3] += d;
- state[4] += e;
-
- /* Zeroize sensitive information. */
- memset((unsigned char*) x, 0, sizeof(x));
-}
-/* }}} */
-
-/* {{{ SHA1Encode
- Encodes input (php_uint32) into output (unsigned char). Assumes len is
- a multiple of 4.
- */
-static void SHA1Encode(output, input, len)
-unsigned char *output;
-php_uint32 *input;
-unsigned int len;
-{
- unsigned int i, j;
-
- for (i = 0, j = 0; j < len; i++, j += 4) {
- output[j] = (unsigned char) ((input[i] >> 24) & 0xff);
- output[j + 1] = (unsigned char) ((input[i] >> 16) & 0xff);
- output[j + 2] = (unsigned char) ((input[i] >> 8) & 0xff);
- output[j + 3] = (unsigned char) (input[i] & 0xff);
- }
-}
-/* }}} */
-
-/* {{{ SHA1Decode
- Decodes input (unsigned char) into output (php_uint32). Assumes len is
- a multiple of 4.
- */
-static void SHA1Decode(output, input, len)
-php_uint32 *output;
-const unsigned char *input;
-unsigned int len;
-{
- unsigned int i, j;
-
- for (i = 0, j = 0; j < len; i++, j += 4)
- output[i] = ((php_uint32) input[j + 3]) | (((php_uint32) input[j + 2]) << 8) |
- (((php_uint32) input[j + 1]) << 16) | (((php_uint32) input[j]) << 24);
-}
-/* }}} */
-
-/*
- * 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/standard/sha1.h b/ext/standard/sha1.h
deleted file mode 100644
index 6e23cbedc2..0000000000
--- a/ext/standard/sha1.h
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Stefan Esser <sesser@php.net> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifndef SHA1_H
-#define SHA1_H
-
-#include "ext/standard/basic_functions.h"
-
-/* SHA1 context. */
-typedef struct {
- php_uint32 state[5]; /* state (ABCD) */
- php_uint32 count[2]; /* number of bits, modulo 2^64 (lsb first) */
- unsigned char buffer[64]; /* input buffer */
-} PHP_SHA1_CTX;
-
-PHPAPI void PHP_SHA1Init(PHP_SHA1_CTX *);
-PHPAPI void PHP_SHA1Update(PHP_SHA1_CTX *, const unsigned char *, unsigned int);
-PHPAPI void PHP_SHA1Final(unsigned char[20], PHP_SHA1_CTX *);
-
-PHP_FUNCTION(sha1);
-PHP_FUNCTION(sha1_file);
-
-#endif
diff --git a/ext/standard/soundex.c b/ext/standard/soundex.c
deleted file mode 100644
index 5341d8a35d..0000000000
--- a/ext/standard/soundex.c
+++ /dev/null
@@ -1,115 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Bjørn Borud - Guardian Networks AS <borud@guardian.no> |
- +----------------------------------------------------------------------+
- */
-/* $Id$ */
-
-#include "php.h"
-#include <stdlib.h>
-#include <errno.h>
-#include <ctype.h>
-#include "php_string.h"
-
-/* Simple soundex algorithm as described by Knuth in TAOCP, vol 3 */
-/* {{{ proto string soundex(string str)
- Calculate the soundex key of a string */
-PHP_FUNCTION(soundex)
-{
- char *str;
- int i, _small, str_len, code, last;
- char soundex[4 + 1];
-
- static char soundex_table[26] =
- {0, /* A */
- '1', /* B */
- '2', /* C */
- '3', /* D */
- 0, /* E */
- '1', /* F */
- '2', /* G */
- 0, /* H */
- 0, /* I */
- '2', /* J */
- '2', /* K */
- '4', /* L */
- '5', /* M */
- '5', /* N */
- 0, /* O */
- '1', /* P */
- '2', /* Q */
- '6', /* R */
- '2', /* S */
- '3', /* T */
- 0, /* U */
- '1', /* V */
- 0, /* W */
- '2', /* X */
- 0, /* Y */
- '2'}; /* Z */
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &str, &str_len) == FAILURE) {
- return;
- }
- if (str_len == 0) {
- RETURN_FALSE;
- }
-
- /* build soundex string */
- last = -1;
- for (i = 0, _small = 0; i < str_len && _small < 4; i++) {
- /* convert chars to upper case and strip non-letter chars */
- /* BUG: should also map here accented letters used in non */
- /* English words or names (also found in English text!): */
- /* esstsett, thorn, n-tilde, c-cedilla, s-caron, ... */
- code = toupper((int)(unsigned char)str[i]);
- if (code >= 'A' && code <= 'Z') {
- if (_small == 0) {
- /* remember first valid char */
- soundex[_small++] = code;
- last = soundex_table[code - 'A'];
- }
- else {
- /* ignore sequences of consonants with same soundex */
- /* code in trail, and vowels unless they separate */
- /* consonant letters */
- code = soundex_table[code - 'A'];
- if (code != last) {
- if (code != 0) {
- soundex[_small++] = code;
- }
- last = code;
- }
- }
- }
- }
- /* pad with '0' and terminate with 0 ;-) */
- while (_small < 4) {
- soundex[_small++] = '0';
- }
- soundex[_small] = '\0';
-
- RETURN_STRINGL(soundex, _small, 1);
-}
-/* }}} */
-
-/*
- * 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/standard/streamsfuncs.c b/ext/standard/streamsfuncs.c
deleted file mode 100644
index 75b7014e47..0000000000
--- a/ext/standard/streamsfuncs.c
+++ /dev/null
@@ -1,1235 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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. |
- +----------------------------------------------------------------------+
- | Authors: Wez Furlong <wez@thebrainroom.com> |
- | Sara Golemon <pollita@php.net> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#include "php.h"
-#include "php_globals.h"
-#include "ext/standard/flock_compat.h"
-#include "ext/standard/file.h"
-#include "ext/standard/php_filestat.h"
-#include "php_open_temporary_file.h"
-#include "ext/standard/basic_functions.h"
-#include "php_ini.h"
-#include "streamsfuncs.h"
-#include "php_network.h"
-#include "php_string.h"
-
-#ifndef PHP_WIN32
-#define php_select(m, r, w, e, t) select(m, r, w, e, t)
-#else
-#include "win32/select.h"
-#endif
-
-static php_stream_context *decode_context_param(zval *contextresource TSRMLS_DC);
-
-/* Streams based network functions */
-
-/* {{{ 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)
-{
- char *host;
- int host_len;
- zval *zerrno = NULL, *zerrstr = NULL, *zcontext = NULL;
- double timeout = FG(default_socket_timeout);
- unsigned long conv;
- struct timeval tv;
- char *hashkey = NULL;
- php_stream *stream = NULL;
- int err;
- long flags = PHP_STREAM_CLIENT_CONNECT;
- char *errstr = NULL;
- php_stream_context *context = NULL;
-
- RETVAL_FALSE;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|zzd!lr", &host, &host_len, &zerrno, &zerrstr, &timeout, &flags, &zcontext) == FAILURE) {
- RETURN_FALSE;
- }
-
- context = php_stream_context_from_zval(zcontext, flags & PHP_FILE_NO_DEFAULT_CONTEXT);
-
- if (flags & PHP_STREAM_CLIENT_PERSISTENT) {
- spprintf(&hashkey, 0, "stream_socket_client__%s", host);
- }
-
- /* prepare the timeout value for use */
- conv = (unsigned long) (timeout * 1000000.0);
- tv.tv_sec = conv / 1000000;
- tv.tv_usec = conv % 1000000;
-
- if (zerrno) {
- zval_dtor(zerrno);
- ZVAL_LONG(zerrno, 0);
- }
- if (zerrstr) {
- zval_dtor(zerrstr);
- ZVAL_STRING(zerrstr, "", 1);
- }
-
- stream = php_stream_xport_create(host, host_len, ENFORCE_SAFE_MODE | REPORT_ERRORS,
- 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 */
- char *quoted_host = php_addslashes(host, host_len, NULL, 0 TSRMLS_CC);
-
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "unable to connect to %s (%s)", quoted_host, errstr == NULL ? "Unknown error" : errstr);
- efree(quoted_host);
- }
-
- if (hashkey) {
- efree(hashkey);
- }
-
- if (stream == NULL) {
- if (zerrno) {
- zval_dtor(zerrno);
- ZVAL_LONG(zerrno, err);
- }
- if (zerrstr && errstr) {
- /* no need to dup; we need to efree buf anyway */
- zval_dtor(zerrstr);
- ZVAL_STRING(zerrstr, errstr, 0);
- } else if (errstr) {
- efree(errstr);
- }
- RETURN_FALSE;
- }
-
- if (errstr) {
- efree(errstr);
- }
-
- php_stream_to_zval(stream, return_value);
-
- if (zcontext) {
- zend_list_addref(Z_RESVAL_P(zcontext));
- }
-}
-/* }}} */
-
-/* {{{ 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)
-{
- char *host;
- int host_len;
- zval *zerrno = NULL, *zerrstr = NULL, *zcontext = NULL;
- php_stream *stream = NULL;
- int err = 0;
- long flags = STREAM_XPORT_BIND | STREAM_XPORT_LISTEN;
- char *errstr = NULL;
- php_stream_context *context = NULL;
-
- RETVAL_FALSE;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|zzlr", &host, &host_len, &zerrno, &zerrstr, &flags, &zcontext) == FAILURE) {
- RETURN_FALSE;
- }
-
- context = php_stream_context_from_zval(zcontext, flags & PHP_FILE_NO_DEFAULT_CONTEXT);
-
- if (zerrno) {
- zval_dtor(zerrno);
- ZVAL_LONG(zerrno, 0);
- }
- if (zerrstr) {
- zval_dtor(zerrstr);
- ZVAL_STRING(zerrstr, "", 1);
- }
-
- 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);
- }
-
- if (stream == NULL) {
- if (zerrno) {
- zval_dtor(zerrno);
- ZVAL_LONG(zerrno, err);
- }
- if (zerrstr && errstr) {
- /* no need to dup; we need to efree buf anyway */
- zval_dtor(zerrstr);
- ZVAL_STRING(zerrstr, errstr, 0);
- }
- RETURN_FALSE;
- }
-
- if (errstr) {
- efree(errstr);
- }
-
- php_stream_to_zval(stream, return_value);
-
- if (zcontext) {
- zend_list_addref(Z_RESVAL_P(zcontext));
- }
-}
-/* }}} */
-
-/* {{{ proto resource stream_socket_accept(resource serverstream, [ double timeout, string &peername ])
- Accept a client connection from a server socket */
-PHP_FUNCTION(stream_socket_accept)
-{
- double timeout = FG(default_socket_timeout);
- zval *peername = NULL;
- unsigned long conv;
- struct timeval tv;
- php_stream *stream = NULL, *clistream = NULL;
- zval *zstream;
-
- char *errstr = NULL;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r|dz", &zstream, &timeout, &peername) == FAILURE) {
- RETURN_FALSE;
- }
-
- php_stream_from_zval(stream, &zstream);
-
- /* prepare the timeout value for use */
- conv = (unsigned long) (timeout * 1000000.0);
- tv.tv_sec = conv / 1000000;
- tv.tv_usec = conv % 1000000;
-
- if (peername) {
- zval_dtor(peername);
- ZVAL_STRING(peername, "", 1);
- }
-
- if (0 == php_stream_xport_accept(stream, &clistream,
- peername ? &Z_STRVAL_P(peername) : NULL,
- peername ? &Z_STRLEN_P(peername) : NULL,
- NULL, NULL,
- &tv, &errstr
- TSRMLS_CC) && clistream) {
-
- php_stream_to_zval(clistream, return_value);
- } else {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "accept failed: %s", errstr ? errstr : "Unknown error");
-
- RETVAL_FALSE;
- }
-
- if (errstr) {
- efree(errstr);
- }
-}
-/* }}} */
-
-/* {{{ proto string stream_socket_get_name(resource stream, bool want_peer)
- Returns either the locally bound or remote name for a socket stream */
-PHP_FUNCTION(stream_socket_get_name)
-{
- php_stream *stream;
- zval *zstream;
- zend_bool want_peer;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rb", &zstream, &want_peer) == FAILURE) {
- RETURN_FALSE;
- }
-
- php_stream_from_zval(stream, &zstream);
-
- Z_TYPE_P(return_value) = IS_STRING;
-
- if (0 != php_stream_xport_get_name(stream, want_peer,
- &Z_STRVAL_P(return_value),
- &Z_STRLEN_P(return_value),
- NULL, NULL
- TSRMLS_CC)) {
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-/* {{{ proto long stream_socket_sendto(resouce stream, string data [, long flags [, string target_addr]])
- Send data to a socket stream. If target_addr is specified it must be in dotted quad (or [ipv6]) format */
-PHP_FUNCTION(stream_socket_sendto)
-{
- php_stream *stream;
- zval *zstream;
- long flags = 0;
- char *data, *target_addr;
- int datalen, target_addr_len = 0;
- php_sockaddr_storage sa;
- socklen_t sl = 0;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rs|ls", &zstream, &data, &datalen, &flags, &target_addr, &target_addr_len) == FAILURE) {
- RETURN_FALSE;
- }
- php_stream_from_zval(stream, &zstream);
-
- if (target_addr_len) {
- /* parse the address */
- if (FAILURE == php_network_parse_network_address_with_port(target_addr, target_addr_len, (struct sockaddr*)&sa, &sl TSRMLS_CC)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Failed to parse `%s' into a valid network address", target_addr);
- RETURN_FALSE;
- }
- }
-
- RETURN_LONG(php_stream_xport_sendto(stream, data, datalen, flags, target_addr ? &sa : NULL, sl TSRMLS_CC));
-}
-/* }}} */
-
-/* {{{ proto string stream_socket_recvfrom(resource stream, long amount [, long flags [, string &remote_addr]])
- Receives data from a socket stream */
-PHP_FUNCTION(stream_socket_recvfrom)
-{
- php_stream *stream;
- zval *zstream, *zremote = NULL;
- long to_read = 0;
- char *read_buf;
- long flags = 0;
- int recvd;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rl|lz", &zstream, &to_read, &flags, &zremote) == FAILURE) {
- RETURN_FALSE;
- }
-
- php_stream_from_zval(stream, &zstream);
-
- if (zremote) {
- zval_dtor(zremote);
- ZVAL_NULL(zremote);
- Z_STRLEN_P(zremote) = 0;
- }
-
- if (to_read <= 0) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Length parameter must be greater than 0.");
- RETURN_FALSE;
- }
-
- read_buf = emalloc(to_read + 1);
-
- recvd = php_stream_xport_recvfrom(stream, read_buf, to_read, flags, NULL, NULL,
- zremote ? &Z_STRVAL_P(zremote) : NULL,
- zremote ? &Z_STRLEN_P(zremote) : NULL
- TSRMLS_CC);
-
- if (recvd >= 0) {
- if (zremote && Z_STRLEN_P(zremote)) {
- Z_TYPE_P(zremote) = IS_STRING;
- }
- read_buf[recvd] = '\0';
-
- if (PG(magic_quotes_runtime)) {
- Z_TYPE_P(return_value) = IS_STRING;
- Z_STRVAL_P(return_value) = php_addslashes(Z_STRVAL_P(return_value),
- Z_STRLEN_P(return_value), &Z_STRLEN_P(return_value), 1 TSRMLS_CC);
- return;
- } else {
- RETURN_STRINGL(read_buf, recvd, 0);
- }
- }
-
- RETURN_FALSE;
-}
-/* }}} */
-
-/* {{{ proto long stream_get_contents(resource source [, long maxlen ])
- Reads all remaining bytes (or up to maxlen bytes) from a stream and returns them as a string. */
-PHP_FUNCTION(stream_get_contents)
-{
- php_stream *stream;
- zval *zsrc;
- long maxlen = PHP_STREAM_COPY_ALL;
- int len, newlen;
- char *contents = NULL;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r|l", &zsrc, &maxlen) == FAILURE) {
- RETURN_FALSE;
- }
-
- php_stream_from_zval(stream, &zsrc);
-
- if ((len = php_stream_copy_to_mem(stream, &contents, maxlen, 0)) > 0) {
-
- if (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;
- }
-}
-/* }}} */
-
-/* {{{ proto long stream_copy_to_stream(resource source, resource dest [, long maxlen ])
- Reads up to maxlen bytes from source stream and writes them to dest stream. */
-PHP_FUNCTION(stream_copy_to_stream)
-{
- php_stream *src, *dest;
- zval *zsrc, *zdest;
- long maxlen = PHP_STREAM_COPY_ALL;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rr|l", &zsrc, &zdest, &maxlen) == FAILURE) {
- RETURN_FALSE;
- }
-
- php_stream_from_zval(src, &zsrc);
- php_stream_from_zval(dest, &zdest);
-
- RETURN_LONG(php_stream_copy_to_stream(src, dest, maxlen));
-}
-/* }}} */
-
-/* {{{ proto resource stream_get_meta_data(resource fp)
- Retrieves header/meta data from streams/file pointers */
-PHP_FUNCTION(stream_get_meta_data)
-{
- zval **arg1;
- php_stream *stream;
- zval *newval;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg1) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- php_stream_from_zval(stream, arg1);
-
- array_init(return_value);
-
- if (stream->wrapperdata) {
- MAKE_STD_ZVAL(newval);
- *newval = *(stream->wrapperdata);
- zval_copy_ctor(newval);
- INIT_PZVAL(newval);
-
- add_assoc_zval(return_value, "wrapper_data", newval);
- }
- if (stream->wrapper) {
- add_assoc_string(return_value, "wrapper_type", (char *)stream->wrapper->wops->label, 1);
- }
- add_assoc_string(return_value, "stream_type", (char *)stream->ops->label, 1);
-
- add_assoc_string(return_value, "mode", stream->mode, 1);
-
-#if 0 /* TODO: needs updating for new filter API */
- if (stream->filterhead) {
- php_stream_filter *filter;
-
- MAKE_STD_ZVAL(newval);
- array_init(newval);
-
- for (filter = stream->filterhead; filter != NULL; filter = filter->next) {
- add_next_index_string(newval, (char *)filter->fops->label, 1);
- }
-
- add_assoc_zval(return_value, "filters", newval);
- }
-#endif
-
- add_assoc_long(return_value, "unread_bytes", stream->writepos - stream->readpos);
-
- add_assoc_bool(return_value, "seekable", (stream->ops->seek) && (stream->flags & PHP_STREAM_FLAG_NO_SEEK) == 0);
- if (stream->orig_path) {
- add_assoc_string(return_value, "uri", stream->orig_path, 1);
- }
-
- if (!php_stream_populate_meta_data(stream, return_value)) {
- add_assoc_bool(return_value, "timed_out", 0);
- add_assoc_bool(return_value, "blocked", 1);
- add_assoc_bool(return_value, "eof", php_stream_eof(stream));
- }
-
-}
-/* }}} */
-
-/* {{{ proto array stream_get_transports()
- Retrieves list of registered socket transports */
-PHP_FUNCTION(stream_get_transports)
-{
- HashTable *stream_xport_hash;
- char *stream_xport;
- int stream_xport_len;
- ulong num_key;
-
- if (ZEND_NUM_ARGS() != 0) {
- WRONG_PARAM_COUNT;
- }
-
- if ((stream_xport_hash = php_stream_xport_get_hash())) {
- array_init(return_value);
- zend_hash_internal_pointer_reset(stream_xport_hash);
- while (zend_hash_get_current_key_ex(stream_xport_hash,
- &stream_xport, &stream_xport_len,
- &num_key, 0, NULL) == HASH_KEY_IS_STRING) {
- add_next_index_stringl(return_value, stream_xport, stream_xport_len, 1);
- zend_hash_move_forward(stream_xport_hash);
- }
- } else {
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-/* {{{ proto array stream_get_wrappers()
- Retrieves list of registered stream wrappers */
-PHP_FUNCTION(stream_get_wrappers)
-{
- HashTable *url_stream_wrappers_hash;
- char *stream_protocol;
- int key_flags, stream_protocol_len = 0;
- ulong num_key;
-
- if (ZEND_NUM_ARGS() != 0) {
- WRONG_PARAM_COUNT;
- }
-
- if ((url_stream_wrappers_hash = php_stream_get_url_stream_wrappers_hash())) {
- array_init(return_value);
- for(zend_hash_internal_pointer_reset(url_stream_wrappers_hash);
- (key_flags = zend_hash_get_current_key_ex(url_stream_wrappers_hash, &stream_protocol, &stream_protocol_len, &num_key, 0, NULL)) != HASH_KEY_NON_EXISTANT;
- zend_hash_move_forward(url_stream_wrappers_hash)) {
- if (key_flags == HASH_KEY_IS_STRING) {
- add_next_index_stringl(return_value, stream_protocol, stream_protocol_len, 1);
- }
- }
- } else {
- RETURN_FALSE;
- }
-
-}
-/* }}} */
-
-/* {{{ stream_select related functions */
-static int stream_array_to_fd_set(zval *stream_array, fd_set *fds, php_socket_t *max_fd TSRMLS_DC)
-{
- zval **elem;
- php_stream *stream;
- php_socket_t this_fd;
-
- if (Z_TYPE_P(stream_array) != IS_ARRAY) {
- return 0;
- }
- for (zend_hash_internal_pointer_reset(Z_ARRVAL_P(stream_array));
- zend_hash_get_current_data(Z_ARRVAL_P(stream_array), (void **) &elem) == SUCCESS;
- zend_hash_move_forward(Z_ARRVAL_P(stream_array))) {
-
- php_stream_from_zval_no_verify(stream, elem);
- if (stream == NULL) {
- continue;
- }
- /* get the fd.
- * NB: Most other code will NOT use the PHP_STREAM_CAST_INTERNAL flag
- * when casting. It is only used here so that the buffered data warning
- * is not displayed.
- * */
- if (SUCCESS == php_stream_cast(stream, PHP_STREAM_AS_FD_FOR_SELECT | PHP_STREAM_CAST_INTERNAL, (void*)&this_fd, 1) && this_fd >= 0) {
- FD_SET(this_fd, fds);
- if (this_fd > *max_fd) {
- *max_fd = this_fd;
- }
- }
- }
- return 1;
-}
-
-static int stream_array_from_fd_set(zval *stream_array, fd_set *fds TSRMLS_DC)
-{
- zval **elem, **dest_elem;
- php_stream *stream;
- HashTable *new_hash;
- int this_fd, ret = 0;
-
- if (Z_TYPE_P(stream_array) != IS_ARRAY) {
- return 0;
- }
- ALLOC_HASHTABLE(new_hash);
- zend_hash_init(new_hash, 0, NULL, ZVAL_PTR_DTOR, 0);
-
- for (zend_hash_internal_pointer_reset(Z_ARRVAL_P(stream_array));
- zend_hash_get_current_data(Z_ARRVAL_P(stream_array), (void **) &elem) == SUCCESS;
- zend_hash_move_forward(Z_ARRVAL_P(stream_array))) {
-
- php_stream_from_zval_no_verify(stream, elem);
- if (stream == NULL) {
- continue;
- }
- /* get the fd
- * NB: Most other code will NOT use the PHP_STREAM_CAST_INTERNAL flag
- * when casting. It is only used here so that the buffered data warning
- * is not displayed.
- */
- if (SUCCESS == php_stream_cast(stream, PHP_STREAM_AS_FD_FOR_SELECT | PHP_STREAM_CAST_INTERNAL, (void*)&this_fd, 1) && this_fd >= 0) {
- if (FD_ISSET(this_fd, fds)) {
- zend_hash_next_index_insert(new_hash, (void *)elem, sizeof(zval *), (void **)&dest_elem);
- if (dest_elem) {
- zval_add_ref(dest_elem);
- }
- ret++;
- continue;
- }
- }
- }
-
- /* destroy old array and add new one */
- zend_hash_destroy(Z_ARRVAL_P(stream_array));
- efree(Z_ARRVAL_P(stream_array));
-
- zend_hash_internal_pointer_reset(new_hash);
- Z_ARRVAL_P(stream_array) = new_hash;
-
- return ret;
-}
-
-static int stream_array_emulate_read_fd_set(zval *stream_array TSRMLS_DC)
-{
- zval **elem, **dest_elem;
- php_stream *stream;
- HashTable *new_hash;
- int ret = 0;
-
- if (Z_TYPE_P(stream_array) != IS_ARRAY) {
- return 0;
- }
- ALLOC_HASHTABLE(new_hash);
- zend_hash_init(new_hash, 0, NULL, ZVAL_PTR_DTOR, 0);
-
- for (zend_hash_internal_pointer_reset(Z_ARRVAL_P(stream_array));
- zend_hash_get_current_data(Z_ARRVAL_P(stream_array), (void **) &elem) == SUCCESS;
- zend_hash_move_forward(Z_ARRVAL_P(stream_array))) {
-
- php_stream_from_zval_no_verify(stream, elem);
- if (stream == NULL) {
- continue;
- }
- if ((stream->writepos - stream->readpos) > 0) {
- /* allow readable non-descriptor based streams to participate in stream_select.
- * Non-descriptor streams will only "work" if they have previously buffered the
- * data. Not ideal, but better than nothing.
- * This branch of code also allows blocking streams with buffered data to
- * operate correctly in stream_select.
- * */
- zend_hash_next_index_insert(new_hash, (void *)elem, sizeof(zval *), (void **)&dest_elem);
- if (dest_elem) {
- zval_add_ref(dest_elem);
- }
- ret++;
- continue;
- }
- }
-
- if (ret > 0) {
- /* destroy old array and add new one */
- zend_hash_destroy(Z_ARRVAL_P(stream_array));
- efree(Z_ARRVAL_P(stream_array));
-
- zend_hash_internal_pointer_reset(new_hash);
- Z_ARRVAL_P(stream_array) = new_hash;
- } else {
- zend_hash_destroy(new_hash);
- FREE_HASHTABLE(new_hash);
- }
-
- return ret;
-}
-/* }}} */
-
-/* {{{ proto int stream_select(array &read_streams, array &write_streams, array &except_streams, int tv_sec[, int tv_usec])
- Runs the select() system call on the sets of streams with a timeout specified by tv_sec and tv_usec */
-PHP_FUNCTION(stream_select)
-{
- zval *r_array, *w_array, *e_array, *sec = NULL;
- struct timeval tv;
- struct timeval *tv_p = NULL;
- fd_set rfds, wfds, efds;
- int max_fd = 0;
- int retval, sets = 0;
- long usec = 0;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "a!a!a!z!|l", &r_array, &w_array, &e_array, &sec, &usec) == FAILURE)
- return;
-
- FD_ZERO(&rfds);
- FD_ZERO(&wfds);
- FD_ZERO(&efds);
-
- if (r_array != NULL) sets += stream_array_to_fd_set(r_array, &rfds, &max_fd TSRMLS_CC);
- if (w_array != NULL) sets += stream_array_to_fd_set(w_array, &wfds, &max_fd TSRMLS_CC);
- if (e_array != NULL) sets += stream_array_to_fd_set(e_array, &efds, &max_fd TSRMLS_CC);
-
- if (!sets) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "No stream arrays were passed");
- RETURN_FALSE;
- }
-
- /* If seconds is not set to null, build the timeval, else we wait indefinitely */
- if (sec != NULL) {
- convert_to_long_ex(&sec);
-
- /* Solaris + BSD do not like microsecond values which are >= 1 sec */
- if (usec > 999999) {
- tv.tv_sec = Z_LVAL_P(sec) + (usec / 1000000);
- tv.tv_usec = usec % 1000000;
- } else {
- tv.tv_sec = Z_LVAL_P(sec);
- tv.tv_usec = usec;
- }
-
- tv_p = &tv;
- }
-
- /* slight hack to support buffered data; if there is data sitting in the
- * read buffer of any of the streams in the read array, let's pretend
- * that we selected, but return only the readable sockets */
- if (r_array != NULL) {
-
- retval = stream_array_emulate_read_fd_set(r_array TSRMLS_CC);
- if (retval > 0) {
- RETURN_LONG(retval);
- }
- }
-
- retval = php_select(max_fd+1, &rfds, &wfds, &efds, tv_p);
-
- if (retval == -1) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "unable to select [%d]: %s (max_fd=%d)",
- errno, strerror(errno), max_fd);
- RETURN_FALSE;
- }
-
- if (r_array != NULL) stream_array_from_fd_set(r_array, &rfds TSRMLS_CC);
- if (w_array != NULL) stream_array_from_fd_set(w_array, &wfds TSRMLS_CC);
- if (e_array != NULL) stream_array_from_fd_set(e_array, &efds TSRMLS_CC);
-
- RETURN_LONG(retval);
-}
-/* }}} */
-
-/* {{{ stream_context related functions */
-static void user_space_stream_notifier(php_stream_context *context, int notifycode, int severity,
- char *xmsg, int xcode, size_t bytes_sofar, size_t bytes_max, void * ptr TSRMLS_DC)
-{
- zval *callback = (zval*)context->notifier->ptr;
- zval *retval = NULL;
- zval zvs[6];
- zval *ps[6];
- zval **ptps[6];
- int i;
-
- for (i = 0; i < 6; i++) {
- INIT_ZVAL(zvs[i]);
- ps[i] = &zvs[i];
- ptps[i] = &ps[i];
- }
-
- ZVAL_LONG(ps[0], notifycode);
- ZVAL_LONG(ps[1], severity);
- if (xmsg) {
- ZVAL_STRING(ps[2], xmsg, 0);
- } else {
- ZVAL_NULL(ps[2]);
- }
- ZVAL_LONG(ps[3], xcode);
- ZVAL_LONG(ps[4], bytes_sofar);
- ZVAL_LONG(ps[5], bytes_max);
-
- 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");
- }
- if (retval) {
- zval_ptr_dtor(&retval);
- }
-}
-
-static void user_space_stream_notifier_dtor(php_stream_notifier *notifier)
-{
- if (notifier && notifier->ptr) {
- zval_ptr_dtor((zval **)&(notifier->ptr));
- notifier->ptr = NULL;
- }
-}
-
-static int parse_context_options(php_stream_context *context, zval *options)
-{
- HashPosition pos, opos;
- zval **wval, **oval;
- char *wkey, *okey;
- int wkey_len, okey_len;
- int ret = SUCCESS;
- ulong num_key;
-
- zend_hash_internal_pointer_reset_ex(Z_ARRVAL_P(options), &pos);
- while (SUCCESS == zend_hash_get_current_data_ex(Z_ARRVAL_P(options), (void**)&wval, &pos)) {
- if (HASH_KEY_IS_STRING == zend_hash_get_current_key_ex(Z_ARRVAL_P(options), &wkey, &wkey_len, &num_key, 0, &pos)
- && Z_TYPE_PP(wval) == IS_ARRAY) {
-
- zend_hash_internal_pointer_reset_ex(Z_ARRVAL_PP(wval), &opos);
- while (SUCCESS == zend_hash_get_current_data_ex(Z_ARRVAL_PP(wval), (void**)&oval, &opos)) {
-
- if (HASH_KEY_IS_STRING == zend_hash_get_current_key_ex(Z_ARRVAL_PP(wval), &okey, &okey_len, &num_key, 0, &opos)) {
- php_stream_context_set_option(context, wkey, okey, *oval);
- }
- zend_hash_move_forward_ex(Z_ARRVAL_PP(wval), &opos);
- }
-
- } else {
- zend_error(E_WARNING, "options should have the form [\"wrappername\"][\"optionname\"] = $value");
- }
- zend_hash_move_forward_ex(Z_ARRVAL_P(options), &pos);
- }
-
- return ret;
-}
-
-static int parse_context_params(php_stream_context *context, zval *params)
-{
- int ret = SUCCESS;
- zval **tmp;
-
- if (SUCCESS == zend_hash_find(Z_ARRVAL_P(params), "notification", sizeof("notification"), (void**)&tmp)) {
-
- if (context->notifier) {
- php_stream_notification_free(context->notifier);
- context->notifier = NULL;
- }
-
- context->notifier = php_stream_notification_alloc();
- context->notifier->func = user_space_stream_notifier;
- context->notifier->ptr = *tmp;
- ZVAL_ADDREF(*tmp);
- 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);
- }
-
- return ret;
-}
-
-/* given a zval which is either a stream or a context, return the underlying
- * stream_context. If it is a stream that does not have a context assigned, it
- * will create and assign a context and return that. */
-static php_stream_context *decode_context_param(zval *contextresource TSRMLS_DC)
-{
- php_stream_context *context = NULL;
-
- context = zend_fetch_resource(&contextresource TSRMLS_CC, -1, NULL, NULL, 1, php_le_stream_context());
- if (context == NULL) {
- php_stream *stream;
-
- stream = zend_fetch_resource(&contextresource TSRMLS_CC, -1, NULL, NULL, 2, php_file_le_stream(), php_file_le_pstream);
-
- if (stream) {
- context = stream->context;
- if (context == NULL) {
- /* Only way this happens is if file is opened with NO_DEFAULT_CONTEXT
- param, but then something is called which requires a context.
- Don't give them the default one though since they already said they
- didn't want it. */
- context = stream->context = php_stream_context_alloc();
- }
- }
- }
-
- return context;
-}
-/* }}} */
-
-/* {{{ proto array stream_context_get_options(resource context|resource stream)
- Retrieve options for a stream/wrapper/context */
-PHP_FUNCTION(stream_context_get_options)
-{
- zval *zcontext;
- php_stream_context *context;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &zcontext) == FAILURE) {
- RETURN_FALSE;
- }
- context = decode_context_param(zcontext TSRMLS_CC);
- if (!context) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid stream/context parameter.");
- RETURN_FALSE;
- }
-
- *return_value = *context->options;
- zval_copy_ctor(return_value);
- INIT_PZVAL(return_value);
-}
-/* }}} */
-
-/* {{{ proto bool stream_context_set_option(resource context|resource stream, string wrappername, string optionname, mixed value)
- Set an option for a wrapper */
-PHP_FUNCTION(stream_context_set_option)
-{
- zval *options = NULL, *zcontext = NULL, *zvalue = NULL;
- php_stream_context *context;
- char *wrappername, *optionname;
- int wrapperlen, optionlen;
-
- if (zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, ZEND_NUM_ARGS() TSRMLS_CC,
- "rssz", &zcontext, &wrappername, &wrapperlen,
- &optionname, &optionlen, &zvalue) == FAILURE) {
- if (zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, ZEND_NUM_ARGS() TSRMLS_CC,
- "ra", &zcontext, &options) == FAILURE) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "called with wrong number or type of parameters; please RTM");
- RETURN_FALSE;
- }
- }
-
- /* figure out where the context is coming from exactly */
- context = decode_context_param(zcontext TSRMLS_CC);
- if (!context) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid stream/context parameter.");
- RETURN_FALSE;
- }
-
- if (options) {
- /* handle the array syntax */
- RETVAL_BOOL(parse_context_options(context, options) == SUCCESS);
- } else {
- php_stream_context_set_option(context, wrappername, optionname, zvalue);
- RETVAL_TRUE;
- }
-}
-/* }}} */
-
-/* {{{ proto bool stream_context_set_params(resource context|resource stream, array options)
- Set parameters for a file context */
-PHP_FUNCTION(stream_context_set_params)
-{
- zval *params, *zcontext;
- php_stream_context *context;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ra", &zcontext, &params) == FAILURE) {
- RETURN_FALSE;
- }
-
- context = decode_context_param(zcontext TSRMLS_CC);
- if (!context) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid stream/context parameter.");
- RETURN_FALSE;
- }
-
- RETVAL_BOOL(parse_context_params(context, params) == SUCCESS);
-}
-/* }}} */
-
-/* {{{ proto resource stream_context_get_default([array options])
- Get a handle on the default file/stream context and optionally set parameters */
-PHP_FUNCTION(stream_context_get_default)
-{
- zval *params = NULL;
- php_stream_context *context;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|a", &params) == FAILURE) {
- RETURN_FALSE;
- }
-
- if (FG(default_context) == NULL) {
- FG(default_context) = php_stream_context_alloc();
- }
- context = FG(default_context);
-
- if (params) {
- parse_context_options(context, params);
- }
-
- php_stream_context_to_zval(context, return_value);
-}
-/* }}} */
-
-/* {{{ proto resource stream_context_create([array options])
- Create a file context and optionally set parameters */
-PHP_FUNCTION(stream_context_create)
-{
- zval *params = NULL;
- php_stream_context *context;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|a", &params) == FAILURE) {
- RETURN_FALSE;
- }
-
- context = php_stream_context_alloc();
-
- if (params) {
- parse_context_options(context, params);
- }
-
- php_stream_context_to_zval(context, return_value);
-}
-/* }}} */
-
-/* {{{ streams filter functions */
-static void apply_filter_to_stream(int append, INTERNAL_FUNCTION_PARAMETERS)
-{
- zval *zstream;
- php_stream *stream;
- char *filtername;
- int filternamelen;
- long read_write = 0;
- zval *filterparams = NULL;
- php_stream_filter *filter;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rs|lz", &zstream,
- &filtername, &filternamelen, &read_write, &filterparams) == FAILURE) {
- RETURN_FALSE;
- }
-
- php_stream_from_zval(stream, &zstream);
-
- if ((read_write & PHP_STREAM_FILTER_ALL) == 0) {
- /* Chain not specified.
- * Examine stream->mode to determine which filters are needed
- * There's no harm in attaching a filter to an unused chain,
- * but why waste the memory and clock cycles?
- */
- if (strchr(stream->mode, 'r') || strchr(stream->mode, '+')) {
- read_write |= PHP_STREAM_FILTER_READ;
- }
- if (strchr(stream->mode, 'w') || strchr(stream->mode, '+') || strchr(stream->mode, 'a')) {
- read_write |= PHP_STREAM_FILTER_WRITE;
- }
- }
-
- if (read_write & PHP_STREAM_FILTER_READ) {
- filter = php_stream_filter_create(filtername, filterparams, php_stream_is_persistent(stream) TSRMLS_CC);
- if (filter == NULL) {
- RETURN_FALSE;
- }
-
- if (append) {
- php_stream_filter_append(&stream->readfilters, filter);
- } else {
- php_stream_filter_prepend(&stream->readfilters, filter);
- }
- }
-
- if (read_write & PHP_STREAM_FILTER_WRITE) {
- filter = php_stream_filter_create(filtername, filterparams, php_stream_is_persistent(stream) TSRMLS_CC);
- if (filter == NULL) {
- RETURN_FALSE;
- }
-
- if (append) {
- php_stream_filter_append(&stream->writefilters, filter);
- } else {
- php_stream_filter_prepend(&stream->writefilters, filter);
- }
- }
-
- RETURN_TRUE;
-}
-
-/* {{{ proto bool stream_filter_prepend(resource stream, string filtername[, int read_write[, string filterparams]])
- Prepend a filter to a stream */
-PHP_FUNCTION(stream_filter_prepend)
-{
- apply_filter_to_stream(0, INTERNAL_FUNCTION_PARAM_PASSTHRU);
-}
-/* }}} */
-
-/* {{{ proto bool stream_filter_append(resource stream, string filtername[, int read_write[, string filterparams]])
- Append a filter to a stream */
-PHP_FUNCTION(stream_filter_append)
-{
- apply_filter_to_stream(1, INTERNAL_FUNCTION_PARAM_PASSTHRU);
-}
-/* }}} */
-
-/* }}} */
-
-/* {{{ proto string stream_get_line(resource stream, int maxlen, string ending)
- Read up to maxlen bytes from a stream or until the ending string is found */
-PHP_FUNCTION(stream_get_line)
-{
- char *str;
- int str_len;
- long max_length;
- zval *zstream;
- char *buf;
- size_t buf_size;
- php_stream *stream;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rls", &zstream, &max_length, &str, &str_len) == FAILURE) {
- RETURN_FALSE;
- }
-
- if (max_length < 0) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "The maximum allowed length must be greater then or equal to zero.");
- RETURN_FALSE;
- }
-
- php_stream_from_zval(stream, &zstream);
-
- if ((buf = php_stream_get_record(stream, max_length, &buf_size, str, str_len TSRMLS_CC))) {
- RETURN_STRINGL(buf, buf_size, 0);
- } else {
- RETURN_FALSE;
- }
-}
-
-/* }}} */
-
-/* {{{ proto bool stream_set_blocking(resource socket, int mode)
- Set blocking/non-blocking mode on a socket or stream */
-PHP_FUNCTION(stream_set_blocking)
-{
- zval **arg1, **arg2;
- int block;
- php_stream *stream;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &arg1, &arg2) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- php_stream_from_zval(stream, arg1);
-
- convert_to_long_ex(arg2);
- block = Z_LVAL_PP(arg2);
-
- if (php_stream_set_option(stream, PHP_STREAM_OPTION_BLOCKING, block == 0 ? 0 : 1, NULL) == -1)
- RETURN_FALSE;
- RETURN_TRUE;
-}
-
-/* }}} */
-
-/* {{{ proto bool set_socket_blocking(resource socket, int mode)
- Set blocking/non-blocking mode on a socket */
-PHP_FUNCTION(set_socket_blocking)
-{
- php_error_docref(NULL TSRMLS_CC, E_NOTICE, "This function is deprecated, use stream_set_blocking() instead");
- PHP_FN(stream_set_blocking)(INTERNAL_FUNCTION_PARAM_PASSTHRU);
-}
-/* }}} */
-
-/* {{{ proto bool stream_set_timeout(resource stream, int seconds, int microseconds)
- Set timeout on stream read to seconds + microseonds */
-#if HAVE_SYS_TIME_H || defined(PHP_WIN32)
-PHP_FUNCTION(stream_set_timeout)
-{
- zval **socket, **seconds, **microseconds;
- struct timeval t;
- php_stream *stream;
-
- if (ZEND_NUM_ARGS() < 2 || ZEND_NUM_ARGS() > 3 ||
- zend_get_parameters_ex(ZEND_NUM_ARGS(), &socket, &seconds, &microseconds)==FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- php_stream_from_zval(stream, socket);
-
- convert_to_long_ex(seconds);
- t.tv_sec = Z_LVAL_PP(seconds);
-
- if (ZEND_NUM_ARGS() == 3) {
- convert_to_long_ex(microseconds);
- t.tv_usec = Z_LVAL_PP(microseconds) % 1000000;
- t.tv_sec += Z_LVAL_PP(microseconds) / 1000000;
- }
- else
- t.tv_usec = 0;
-
- if (PHP_STREAM_OPTION_RETURN_OK == php_stream_set_option(stream, PHP_STREAM_OPTION_READ_TIMEOUT, 0, &t)) {
- RETURN_TRUE;
- }
-
- RETURN_FALSE;
-}
-#endif /* HAVE_SYS_TIME_H || defined(PHP_WIN32) */
-/* }}} */
-
-/* {{{ proto int stream_set_write_buffer(resource fp, int buffer)
- Set file write buffer */
-PHP_FUNCTION(stream_set_write_buffer)
-{
- zval **arg1, **arg2;
- int ret;
- size_t buff;
- php_stream *stream;
-
- switch (ZEND_NUM_ARGS()) {
- case 2:
- if (zend_get_parameters_ex(2, &arg1, &arg2)==FAILURE) {
- RETURN_FALSE;
- }
- break;
- default:
- WRONG_PARAM_COUNT;
- /* NOTREACHED */
- break;
- }
-
- php_stream_from_zval(stream, arg1);
-
- convert_to_long_ex(arg2);
- buff = Z_LVAL_PP(arg2);
-
- /* if buff is 0 then set to non-buffered */
- if (buff == 0) {
- ret = php_stream_set_option(stream, PHP_STREAM_OPTION_WRITE_BUFFER, PHP_STREAM_BUFFER_NONE, NULL);
- } else {
- ret = php_stream_set_option(stream, PHP_STREAM_OPTION_WRITE_BUFFER, PHP_STREAM_BUFFER_FULL, &buff);
- }
-
- RETURN_LONG(ret == 0 ? 0 : EOF);
-}
-/* }}} */
-
-/* {{{ proto bool 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)
-{
- long cryptokind;
- zval *zstream, *zsessstream = NULL;
- php_stream *stream, *sessstream = NULL;
- zend_bool enable;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rb|lr", &zstream, &enable, &cryptokind, &zsessstream) == FAILURE) {
- RETURN_FALSE;
- }
-
- php_stream_from_zval(stream, &zstream);
-
- if (ZEND_NUM_ARGS() >= 3) {
- if (zsessstream) {
- php_stream_from_zval(sessstream, &zsessstream);
- }
-
- if (php_stream_xport_crypto_setup(stream, cryptokind, sessstream TSRMLS_CC) < 0) {
- RETURN_FALSE;
- }
- }
-
- RETURN_BOOL(php_stream_xport_crypto_enable(stream, enable TSRMLS_CC) < 0 ? 0 : 1);
-}
-/* }}} */
-
-/*
- * 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/standard/streamsfuncs.h b/ext/standard/streamsfuncs.h
deleted file mode 100644
index 6ec9dba491..0000000000
--- a/ext/standard/streamsfuncs.h
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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. |
- +----------------------------------------------------------------------+
- | Authors: Wez Furlong <wez@thebrainroom.com> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-/* Flags for stream_socket_client */
-#define PHP_STREAM_CLIENT_PERSISTENT 1
-#define PHP_STREAM_CLIENT_ASYNC_CONNECT 2
-#define PHP_STREAM_CLIENT_CONNECT 4
-
-PHP_FUNCTION(stream_socket_client);
-PHP_FUNCTION(stream_socket_server);
-PHP_FUNCTION(stream_socket_accept);
-PHP_FUNCTION(stream_socket_get_name);
-PHP_FUNCTION(stream_socket_recvfrom);
-PHP_FUNCTION(stream_socket_sendto);
-
-PHP_FUNCTION(stream_copy_to_stream);
-PHP_FUNCTION(stream_get_contents);
-
-PHP_FUNCTION(set_socket_blocking); /* deprecated */
-PHP_FUNCTION(stream_set_blocking);
-PHP_FUNCTION(stream_select);
-PHP_FUNCTION(stream_set_timeout);
-PHP_FUNCTION(stream_set_write_buffer);
-PHP_FUNCTION(stream_get_transports);
-PHP_FUNCTION(stream_get_wrappers);
-PHP_FUNCTION(stream_get_line);
-PHP_FUNCTION(stream_get_meta_data);
-PHP_FUNCTION(stream_wrapper_register);
-PHP_FUNCTION(stream_context_create);
-PHP_FUNCTION(stream_context_set_params);
-PHP_FUNCTION(stream_context_set_option);
-PHP_FUNCTION(stream_context_get_options);
-PHP_FUNCTION(stream_context_get_default);
-PHP_FUNCTION(stream_filter_prepend);
-PHP_FUNCTION(stream_filter_append);
-PHP_FUNCTION(stream_socket_enable_crypto);
-
-/*
- * 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/standard/string.c b/ext/standard/string.c
deleted file mode 100644
index 3eb4e8f707..0000000000
--- a/ext/standard/string.c
+++ /dev/null
@@ -1,4860 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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. |
- +----------------------------------------------------------------------+
- | Authors: Rasmus Lerdorf <rasmus@php.net> |
- | Stig Sæther Bakken <ssb@php.net> |
- | Zeev Suraski <zeev@zend.com> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-/* Synced with php 3.0 revision 1.193 1999-06-16 [ssb] */
-
-#include <stdio.h>
-#include "php.h"
-#include "reg.h"
-#include "php_rand.h"
-#include "php_string.h"
-#include "php_variables.h"
-#ifdef HAVE_LOCALE_H
-# include <locale.h>
-#endif
-#ifdef HAVE_LANGINFO_H
-# include <langinfo.h>
-#endif
-#ifdef HAVE_MONETARY_H
-# include <monetary.h>
-#endif
-#ifdef HAVE_LIBINTL
-# include <libintl.h> /* For LC_MESSAGES */
-#endif
-
-#include <math.h>
-
-#include "scanf.h"
-#include "zend_API.h"
-#include "zend_execute.h"
-#include "php_globals.h"
-#include "basic_functions.h"
-#include "php_smart_str.h"
-#ifdef ZTS
-#include "TSRM.h"
-#endif
-
-#define STR_PAD_LEFT 0
-#define STR_PAD_RIGHT 1
-#define STR_PAD_BOTH 2
-#define PHP_PATHINFO_DIRNAME 1
-#define PHP_PATHINFO_BASENAME 2
-#define PHP_PATHINFO_EXTENSION 4
-#define PHP_PATHINFO_ALL (PHP_PATHINFO_DIRNAME | PHP_PATHINFO_BASENAME | PHP_PATHINFO_EXTENSION)
-
-#define STR_STRSPN 0
-#define STR_STRCSPN 1
-
-/* {{{ register_string_constants
- */
-void register_string_constants(INIT_FUNC_ARGS)
-{
- REGISTER_LONG_CONSTANT("STR_PAD_LEFT", STR_PAD_LEFT, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("STR_PAD_RIGHT", STR_PAD_RIGHT, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("STR_PAD_BOTH", STR_PAD_BOTH, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("PATHINFO_DIRNAME", PHP_PATHINFO_DIRNAME, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("PATHINFO_BASENAME", PHP_PATHINFO_BASENAME, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("PATHINFO_EXTENSION", PHP_PATHINFO_EXTENSION, CONST_CS | CONST_PERSISTENT);
-
-#ifdef HAVE_LOCALECONV
- /* If last members of struct lconv equal CHAR_MAX, no grouping is done */
-
-/* This is bad, but since we are going to be hardcoding in the POSIX stuff anyway... */
-# ifndef HAVE_LIMITS_H
-# define CHAR_MAX 127
-# endif
-
- REGISTER_LONG_CONSTANT("CHAR_MAX", CHAR_MAX, CONST_CS | CONST_PERSISTENT);
-#endif
-
-#ifdef HAVE_LOCALE_H
- REGISTER_LONG_CONSTANT("LC_CTYPE", LC_CTYPE, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("LC_NUMERIC", LC_NUMERIC, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("LC_TIME", LC_TIME, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("LC_COLLATE", LC_COLLATE, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("LC_MONETARY", LC_MONETARY, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("LC_ALL", LC_ALL, CONST_CS | CONST_PERSISTENT);
-# ifdef LC_MESSAGES
- REGISTER_LONG_CONSTANT("LC_MESSAGES", LC_MESSAGES, CONST_CS | CONST_PERSISTENT);
-# endif
-#endif
-
-}
-/* }}} */
-
-int php_tag_find(char *tag, int len, char *set);
-
-/* this is read-only, so it's ok */
-static char hexconvtab[] = "0123456789abcdef";
-
-/* localeconv mutex */
-#ifdef ZTS
-static MUTEX_T locale_mutex = NULL;
-#endif
-
-/* {{{ php_bin2hex
- */
-static char *php_bin2hex(const unsigned char *old, const size_t oldlen, size_t *newlen)
-{
- register unsigned char *result = NULL;
- size_t i, j;
-
- result = (char *) safe_emalloc(oldlen * 2, sizeof(char), 1);
-
- for (i = j = 0; i < oldlen; i++) {
- result[j++] = hexconvtab[old[i] >> 4];
- result[j++] = hexconvtab[old[i] & 15];
- }
- result[j] = '\0';
-
- if (newlen)
- *newlen = oldlen * 2 * sizeof(char);
-
- return result;
-}
-/* }}} */
-
-#ifdef HAVE_LOCALECONV
-/* {{{ localeconv_r
- * glibc's localeconv is not reentrant, so lets make it so ... sorta */
-struct lconv *localeconv_r(struct lconv *out)
-{
- struct lconv *res;
-
-# ifdef ZTS
- tsrm_mutex_lock( locale_mutex );
-# endif
-
- /* localeconv doesn't return an error condition */
- res = localeconv();
-
- *out = *res;
-
-# ifdef ZTS
- tsrm_mutex_unlock( locale_mutex );
-# endif
-
- return out;
-}
-/* }}} */
-
-# ifdef ZTS
-/* {{{ PHP_MINIT_FUNCTION
- */
-PHP_MINIT_FUNCTION(localeconv)
-{
- locale_mutex = tsrm_mutex_alloc();
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ PHP_MSHUTDOWN_FUNCTION
- */
-PHP_MSHUTDOWN_FUNCTION(localeconv)
-{
- tsrm_mutex_free( locale_mutex );
- locale_mutex = NULL;
- return SUCCESS;
-}
-/* }}} */
-# endif
-#endif
-
-/* {{{ proto string bin2hex(string data)
- Converts the binary representation of data to hex */
-PHP_FUNCTION(bin2hex)
-{
- zval **data;
- char *result;
- size_t newlen;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &data) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex(data);
-
- result = php_bin2hex(Z_STRVAL_PP(data), Z_STRLEN_PP(data), &newlen);
-
- if (!result) {
- RETURN_FALSE;
- }
-
- RETURN_STRINGL(result, newlen, 0);
-}
-/* }}} */
-
-static void php_spn_common_handler(INTERNAL_FUNCTION_PARAMETERS, int behavior)
-{
- char *s11, *s22;
- int len1, len2;
- long start, len;
-
- start = 0;
- len = 0;
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ss|ll", &s11, &len1,
- &s22, &len2, &start, &len) == FAILURE) {
- return;
- }
-
- if (ZEND_NUM_ARGS() < 4) {
- len = len1;
- }
-
- /* look at substr() function for more information */
-
- if (start < 0) {
- start += len1;
- if (start < 0) {
- start = 0;
- }
- } else if (start > len1) {
- RETURN_FALSE;
- }
-
- if (len < 0) {
- len += (len1 - start);
- if (len < 0) {
- len = 0;
- }
- }
-
- if (((unsigned) start + (unsigned) len) > len1) {
- len = len1 - start;
- }
-
- if (behavior == STR_STRSPN) {
- RETURN_LONG(php_strspn(s11 + start /*str1_start*/,
- s22 /*str2_start*/,
- s11 + start + len /*str1_end*/,
- s22 + len2 /*str2_end*/));
- } else if (behavior == STR_STRCSPN) {
- RETURN_LONG(php_strcspn(s11 + start /*str1_start*/,
- s22 /*str2_start*/,
- s11 + start + len /*str1_end*/,
- s22 + len2 /*str2_end*/));
- }
-
-}
-
-/* {{{ proto int strspn(string str, string mask [, start [, len]])
- Finds length of initial segment consisting entirely of characters found in mask. If start or/and length is provided works like strspn(substr($s,$start,$len),$good_chars) */
-PHP_FUNCTION(strspn)
-{
- php_spn_common_handler(INTERNAL_FUNCTION_PARAM_PASSTHRU, STR_STRSPN);
-}
-/* }}} */
-
-/* {{{ proto int strcspn(string str, string mask [, start [, len]])
- Finds length of initial segment consisting entirely of characters not found in mask. If start or/and length is provide works like strcspn(substr($s,$start,$len),$bad_chars) */
-PHP_FUNCTION(strcspn)
-{
- php_spn_common_handler(INTERNAL_FUNCTION_PARAM_PASSTHRU, STR_STRCSPN);
-}
-/* }}} */
-
-/* {{{ PHP_MINIT_FUNCTION(nl_langinfo) */
-#if HAVE_NL_LANGINFO
-PHP_MINIT_FUNCTION(nl_langinfo)
-{
-#define REGISTER_NL_LANGINFO_CONSTANT(x) REGISTER_LONG_CONSTANT(#x, x, CONST_CS | CONST_PERSISTENT)
-#ifdef ABDAY_1
- REGISTER_NL_LANGINFO_CONSTANT(ABDAY_1);
- REGISTER_NL_LANGINFO_CONSTANT(ABDAY_2);
- REGISTER_NL_LANGINFO_CONSTANT(ABDAY_3);
- REGISTER_NL_LANGINFO_CONSTANT(ABDAY_4);
- REGISTER_NL_LANGINFO_CONSTANT(ABDAY_5);
- REGISTER_NL_LANGINFO_CONSTANT(ABDAY_6);
- REGISTER_NL_LANGINFO_CONSTANT(ABDAY_7);
-#endif
-#ifdef DAY_1
- REGISTER_NL_LANGINFO_CONSTANT(DAY_1);
- REGISTER_NL_LANGINFO_CONSTANT(DAY_2);
- REGISTER_NL_LANGINFO_CONSTANT(DAY_3);
- REGISTER_NL_LANGINFO_CONSTANT(DAY_4);
- REGISTER_NL_LANGINFO_CONSTANT(DAY_5);
- REGISTER_NL_LANGINFO_CONSTANT(DAY_6);
- REGISTER_NL_LANGINFO_CONSTANT(DAY_7);
-#endif
-#ifdef ABMON_1
- REGISTER_NL_LANGINFO_CONSTANT(ABMON_1);
- REGISTER_NL_LANGINFO_CONSTANT(ABMON_2);
- REGISTER_NL_LANGINFO_CONSTANT(ABMON_3);
- REGISTER_NL_LANGINFO_CONSTANT(ABMON_4);
- REGISTER_NL_LANGINFO_CONSTANT(ABMON_5);
- REGISTER_NL_LANGINFO_CONSTANT(ABMON_6);
- REGISTER_NL_LANGINFO_CONSTANT(ABMON_7);
- REGISTER_NL_LANGINFO_CONSTANT(ABMON_8);
- REGISTER_NL_LANGINFO_CONSTANT(ABMON_9);
- REGISTER_NL_LANGINFO_CONSTANT(ABMON_10);
- REGISTER_NL_LANGINFO_CONSTANT(ABMON_11);
- REGISTER_NL_LANGINFO_CONSTANT(ABMON_12);
-#endif
-#ifdef MON_1
- REGISTER_NL_LANGINFO_CONSTANT(MON_1);
- REGISTER_NL_LANGINFO_CONSTANT(MON_2);
- REGISTER_NL_LANGINFO_CONSTANT(MON_3);
- REGISTER_NL_LANGINFO_CONSTANT(MON_4);
- REGISTER_NL_LANGINFO_CONSTANT(MON_5);
- REGISTER_NL_LANGINFO_CONSTANT(MON_6);
- REGISTER_NL_LANGINFO_CONSTANT(MON_7);
- REGISTER_NL_LANGINFO_CONSTANT(MON_8);
- REGISTER_NL_LANGINFO_CONSTANT(MON_9);
- REGISTER_NL_LANGINFO_CONSTANT(MON_10);
- REGISTER_NL_LANGINFO_CONSTANT(MON_11);
- REGISTER_NL_LANGINFO_CONSTANT(MON_12);
-#endif
-#ifdef AM_STR
- REGISTER_NL_LANGINFO_CONSTANT(AM_STR);
-#endif
-#ifdef PM_STR
- REGISTER_NL_LANGINFO_CONSTANT(PM_STR);
-#endif
-#ifdef D_T_FMT
- REGISTER_NL_LANGINFO_CONSTANT(D_T_FMT);
-#endif
-#ifdef D_FMT
- REGISTER_NL_LANGINFO_CONSTANT(D_FMT);
-#endif
-#ifdef T_FMT
- REGISTER_NL_LANGINFO_CONSTANT(T_FMT);
-#endif
-#ifdef T_FMT_AMPM
- REGISTER_NL_LANGINFO_CONSTANT(T_FMT_AMPM);
-#endif
-#ifdef ERA
- REGISTER_NL_LANGINFO_CONSTANT(ERA);
-#endif
-#ifdef ERA_YEAR
- REGISTER_NL_LANGINFO_CONSTANT(ERA_YEAR);
-#endif
-#ifdef ERA_D_T_FMT
- REGISTER_NL_LANGINFO_CONSTANT(ERA_D_T_FMT);
-#endif
-#ifdef ERA_D_FMT
- REGISTER_NL_LANGINFO_CONSTANT(ERA_D_FMT);
-#endif
-#ifdef ERA_T_FMT
- REGISTER_NL_LANGINFO_CONSTANT(ERA_T_FMT);
-#endif
-#ifdef ALT_DIGITS
- REGISTER_NL_LANGINFO_CONSTANT(ALT_DIGITS);
-#endif
-#ifdef INT_CURR_SYMBOL
- REGISTER_NL_LANGINFO_CONSTANT(INT_CURR_SYMBOL);
-#endif
-#ifdef CURRENCY_SYMBOL
- REGISTER_NL_LANGINFO_CONSTANT(CURRENCY_SYMBOL);
-#endif
-#ifdef CRNCYSTR
- REGISTER_NL_LANGINFO_CONSTANT(CRNCYSTR);
-#endif
-#ifdef MON_DECIMAL_POINT
- REGISTER_NL_LANGINFO_CONSTANT(MON_DECIMAL_POINT);
-#endif
-#ifdef MON_THOUSANDS_SEP
- REGISTER_NL_LANGINFO_CONSTANT(MON_THOUSANDS_SEP);
-#endif
-#ifdef MON_GROUPING
- REGISTER_NL_LANGINFO_CONSTANT(MON_GROUPING);
-#endif
-#ifdef POSITIVE_SIGN
- REGISTER_NL_LANGINFO_CONSTANT(POSITIVE_SIGN);
-#endif
-#ifdef NEGATIVE_SIGN
- REGISTER_NL_LANGINFO_CONSTANT(NEGATIVE_SIGN);
-#endif
-#ifdef INT_FRAC_DIGITS
- REGISTER_NL_LANGINFO_CONSTANT(INT_FRAC_DIGITS);
-#endif
-#ifdef FRAC_DIGITS
- REGISTER_NL_LANGINFO_CONSTANT(FRAC_DIGITS);
-#endif
-#ifdef P_CS_PRECEDES
- REGISTER_NL_LANGINFO_CONSTANT(P_CS_PRECEDES);
-#endif
-#ifdef P_SEP_BY_SPACE
- REGISTER_NL_LANGINFO_CONSTANT(P_SEP_BY_SPACE);
-#endif
-#ifdef N_CS_PRECEDES
- REGISTER_NL_LANGINFO_CONSTANT(N_CS_PRECEDES);
-#endif
-#ifdef N_SEP_BY_SPACE
- REGISTER_NL_LANGINFO_CONSTANT(N_SEP_BY_SPACE);
-#endif
-#ifdef P_SIGN_POSN
- REGISTER_NL_LANGINFO_CONSTANT(P_SIGN_POSN);
-#endif
-#ifdef N_SIGN_POSN
- REGISTER_NL_LANGINFO_CONSTANT(N_SIGN_POSN);
-#endif
-#ifdef DECIMAL_POINT
- REGISTER_NL_LANGINFO_CONSTANT(DECIMAL_POINT);
-#endif
-#ifdef RADIXCHAR
- REGISTER_NL_LANGINFO_CONSTANT(RADIXCHAR);
-#endif
-#ifdef THOUSANDS_SEP
- REGISTER_NL_LANGINFO_CONSTANT(THOUSANDS_SEP);
-#endif
-#ifdef THOUSEP
- REGISTER_NL_LANGINFO_CONSTANT(THOUSEP);
-#endif
-#ifdef GROUPING
- REGISTER_NL_LANGINFO_CONSTANT(GROUPING);
-#endif
-#ifdef YESEXPR
- REGISTER_NL_LANGINFO_CONSTANT(YESEXPR);
-#endif
-#ifdef NOEXPR
- REGISTER_NL_LANGINFO_CONSTANT(NOEXPR);
-#endif
-#ifdef YESSTR
- REGISTER_NL_LANGINFO_CONSTANT(YESSTR);
-#endif
-#ifdef NOSTR
- REGISTER_NL_LANGINFO_CONSTANT(NOSTR);
-#endif
-#ifdef CODESET
- REGISTER_NL_LANGINFO_CONSTANT(CODESET);
-#endif
-#undef REGISTER_NL_LANGINFO_CONSTANT
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ proto string nl_langinfo(int item)
- Query language and locale information */
-PHP_FUNCTION(nl_langinfo)
-{
- zval **item;
- char *value;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &item) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long_ex(item);
-
- value = nl_langinfo(Z_LVAL_PP(item));
- if (value == NULL) {
- RETURN_FALSE;
- } else {
- RETURN_STRING(value, 1);
- }
-}
-#endif
-/* }}} */
-
-#ifdef HAVE_STRCOLL
-/* {{{ proto int strcoll(string str1, string str2)
- Compares two strings using the current locale */
-PHP_FUNCTION(strcoll)
-{
- zval **s1, **s2;
-
- if (ZEND_NUM_ARGS()!=2 || zend_get_parameters_ex(2, &s1, &s2) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex(s1);
- convert_to_string_ex(s2);
-
- RETURN_LONG(strcoll((const char *) Z_STRVAL_PP(s1),
- (const char *) Z_STRVAL_PP(s2)));
-}
-/* }}} */
-#endif
-
-/* {{{ php_charmask
- * Fills a 256-byte bytemask with input. You can specify a range like 'a..z',
- * it needs to be incrementing.
- * Returns: FAILURE/SUCCESS wether the input was correct (i.e. no range errors)
- */
-static inline int php_charmask(unsigned char *input, int len, char *mask TSRMLS_DC)
-{
- unsigned char *end;
- unsigned char c;
- int result = SUCCESS;
-
- memset(mask, 0, 256);
- for (end = input+len; input < end; input++) {
- c=*input;
- if ((input+3 < end) && input[1] == '.' && input[2] == '.'
- && input[3] >= c) {
- memset(mask+c, 1, input[3] - c + 1);
- input+=3;
- } else if ((input+1 < end) && input[0] == '.' && input[1] == '.') {
- /* Error, try to be as helpful as possible:
- (a range ending/starting with '.' won't be captured here) */
- if (end-len >= input) { /* there was no 'left' char */
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid '..'-range, no character to the left of '..'.");
- result = FAILURE;
- continue;
- }
- if (input+2 >= end) { /* there is no 'right' char */
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid '..'-range, no character to the right of '..'.");
- result = FAILURE;
- continue;
- }
- if (input[-1] > input[2]) { /* wrong order */
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid '..'-range, '..'-range needs to be incrementing.");
- result = FAILURE;
- continue;
- }
- /* FIXME: better error (a..b..c is the only left possibility?) */
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid '..'-range.");
- result = FAILURE;
- continue;
- } else {
- mask[c]=1;
- }
- }
- return result;
-}
-/* }}} */
-
-/* {{{ php_trim()
- * mode 1 : trim left
- * mode 2 : trim right
- * mode 3 : trim left and right
- * what indicates which chars are to be trimmed. NULL->default (' \t\n\r\v\0')
- */
-PHPAPI char *php_trim(char *c, int len, char *what, int what_len, zval *return_value, int mode TSRMLS_DC)
-{
- register int i;
- int trimmed = 0;
- char mask[256];
-
- if (what) {
- php_charmask(what, what_len, mask TSRMLS_CC);
- } else {
- php_charmask(" \n\r\t\v\0", 6, mask TSRMLS_CC);
- }
-
- if (mode & 1) {
- for (i = 0; i < len; i++) {
- if (mask[(unsigned char)c[i]]) {
- trimmed++;
- } else {
- break;
- }
- }
- len -= trimmed;
- c += trimmed;
- }
- if (mode & 2) {
- for (i = len - 1; i >= 0; i--) {
- if (mask[(unsigned char)c[i]]) {
- len--;
- } else {
- break;
- }
- }
- }
-
- if (return_value) {
- RETVAL_STRINGL(c, len, 1);
- } else {
- return estrndup(c, len);
- }
- return "";
-}
-/* }}} */
-
-/* {{{ php_do_trim
- * Base for trim(), rtrim() and ltrim() functions.
- */
-static void php_do_trim(INTERNAL_FUNCTION_PARAMETERS, int mode)
-{
- zval **str;
- zval **what = NULL;
- int argc = ZEND_NUM_ARGS();
-
- if (argc < 1 || argc > 2 || zend_get_parameters_ex(argc, &str, &what) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_string_ex(str);
-
- if (argc > 1) {
- convert_to_string_ex(what);
- php_trim(Z_STRVAL_PP(str), Z_STRLEN_PP(str), Z_STRVAL_PP(what), Z_STRLEN_PP(what), return_value, mode TSRMLS_CC);
- } else {
- php_trim(Z_STRVAL_PP(str), Z_STRLEN_PP(str), NULL, 0, return_value, mode TSRMLS_CC);
- }
-}
-/* }}} */
-
-/* {{{ proto string trim(string str [, string character_mask])
- Strips whitespace from the beginning and end of a string */
-PHP_FUNCTION(trim)
-{
- php_do_trim(INTERNAL_FUNCTION_PARAM_PASSTHRU, 3);
-}
-/* }}} */
-
-/* {{{ proto string rtrim(string str [, string character_mask])
- Removes trailing whitespace */
-PHP_FUNCTION(rtrim)
-{
- php_do_trim(INTERNAL_FUNCTION_PARAM_PASSTHRU, 2);
-}
-/* }}} */
-
-/* {{{ proto string ltrim(string str [, string character_mask])
- Strips whitespace from the beginning of a string */
-PHP_FUNCTION(ltrim)
-{
- php_do_trim(INTERNAL_FUNCTION_PARAM_PASSTHRU, 1);
-}
-/* }}} */
-
-/* {{{ proto string wordwrap(string str [, int width [, string break [, boolean cut]]])
- Wraps buffer to selected number of characters using string break char */
-PHP_FUNCTION(wordwrap)
-{
- const char *text, *breakchar = "\n";
- char *newtext;
- int textlen, breakcharlen = 1, newtextlen, alloced, chk;
- long current = 0, laststart = 0, lastspace = 0;
- long linelength = 75;
- zend_bool docut = 0;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|lsb", &text, &textlen, &linelength, &breakchar, &breakcharlen, &docut) == FAILURE) {
- return;
- }
-
- if (textlen == 0) {
- RETURN_EMPTY_STRING();
- }
-
- if (linelength == 0 && docut) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Can't force cut when width is zero.");
- RETURN_FALSE;
- }
-
- /* Special case for a single-character break as it needs no
- additional storage space */
- if (breakcharlen == 1 && !docut) {
- newtext = estrndup(text, textlen);
-
- laststart = lastspace = 0;
- for (current = 0; current < textlen; current++) {
- if (text[current] == breakchar[0]) {
- laststart = lastspace = current;
- } else if (text[current] == ' ') {
- if (current - laststart >= linelength) {
- newtext[current] = breakchar[0];
- laststart = current + 1;
- }
- lastspace = current;
- } else if (current - laststart >= linelength && laststart != lastspace) {
- newtext[lastspace] = breakchar[0];
- laststart = lastspace;
- }
- }
-
- RETURN_STRINGL(newtext, textlen, 0);
- } else {
- /* Multiple character line break or forced cut */
- if (linelength > 0) {
- chk = (int)(textlen/linelength + 1);
- alloced = textlen + chk * breakcharlen + 1;
- } else {
- chk = textlen;
- alloced = textlen * (breakcharlen + 1) + 1;
- }
- newtext = emalloc(alloced);
-
- /* now keep track of the actual new text length */
- newtextlen = 0;
-
- laststart = lastspace = 0;
- for (current = 0; current < textlen; current++) {
- if (chk <= 0) {
- alloced += (int) (((textlen - current + 1)/linelength + 1) * breakcharlen) + 1;
- newtext = erealloc(newtext, alloced);
- chk = (int) ((textlen - current)/linelength) + 1;
- }
- /* when we hit an existing break, copy to new buffer, and
- * fix up laststart and lastspace */
- if (text[current] == breakchar[0]
- && current + breakcharlen < textlen
- && !strncmp(text+current, breakchar, breakcharlen)) {
- memcpy(newtext+newtextlen, text+laststart, current-laststart+breakcharlen);
- newtextlen += current-laststart+breakcharlen;
- current += breakcharlen - 1;
- laststart = lastspace = current + 1;
- chk--;
- }
- /* if it is a space, check if it is at the line boundary,
- * copy and insert a break, or just keep track of it */
- else if (text[current] == ' ') {
- if (current - laststart >= linelength) {
- memcpy(newtext+newtextlen, text+laststart, current-laststart);
- newtextlen += current - laststart;
- memcpy(newtext+newtextlen, breakchar, breakcharlen);
- newtextlen += breakcharlen;
- laststart = current + 1;
- chk--;
- }
- lastspace = current;
- }
- /* if we are cutting, and we've accumulated enough
- * characters, and we haven't see a space for this line,
- * copy and insert a break. */
- else if (current - laststart >= linelength
- && docut && laststart >= lastspace) {
- memcpy(newtext+newtextlen, text+laststart, current-laststart);
- newtextlen += current - laststart;
- memcpy(newtext+newtextlen, breakchar, breakcharlen);
- newtextlen += breakcharlen;
- laststart = lastspace = current;
- chk--;
- }
- /* if the current word puts us over the linelength, copy
- * back up until the last space, insert a break, and move
- * up the laststart */
- else if (current - laststart >= linelength
- && laststart < lastspace) {
- memcpy(newtext+newtextlen, text+laststart, lastspace-laststart);
- newtextlen += lastspace - laststart;
- memcpy(newtext+newtextlen, breakchar, breakcharlen);
- newtextlen += breakcharlen;
- laststart = lastspace = lastspace + 1;
- chk--;
- }
- }
-
- /* copy over any stragglers */
- if (laststart != current) {
- memcpy(newtext+newtextlen, text+laststart, current-laststart);
- newtextlen += current - laststart;
- }
-
- newtext[newtextlen] = '\0';
- /* free unused memory */
- newtext = erealloc(newtext, newtextlen+1);
-
- RETURN_STRINGL(newtext, newtextlen, 0);
- }
-}
-/* }}} */
-
-/* {{{ php_explode
- */
-PHPAPI void php_explode(zval *delim, zval *str, zval *return_value, int limit)
-{
- char *p1, *p2, *endp;
-
- endp = Z_STRVAL_P(str) + Z_STRLEN_P(str);
-
- p1 = Z_STRVAL_P(str);
- p2 = php_memnstr(Z_STRVAL_P(str), Z_STRVAL_P(delim), Z_STRLEN_P(delim), endp);
-
- if (p2 == NULL) {
- add_next_index_stringl(return_value, p1, Z_STRLEN_P(str), 1);
- } else {
- do {
- add_next_index_stringl(return_value, p1, p2 - p1, 1);
- p1 = p2 + Z_STRLEN_P(delim);
- } while ((p2 = php_memnstr(p1, Z_STRVAL_P(delim), Z_STRLEN_P(delim), endp)) != NULL &&
- (limit == -1 || --limit > 1));
-
- if (p1 <= endp)
- add_next_index_stringl(return_value, p1, endp-p1, 1);
- }
-}
-/* }}} */
-
-/* {{{ php_explode_negative_limit
- */
-PHPAPI void php_explode_negative_limit(zval *delim, zval *str, zval *return_value, int limit)
-{
-#define EXPLODE_ALLOC_STEP 50
- char *p1, *p2, *endp;
- int allocated = EXPLODE_ALLOC_STEP, found = 0, i = 0, to_return = 0;
- char **positions = safe_emalloc(allocated, sizeof(char *), 0);
-
- endp = Z_STRVAL_P(str) + Z_STRLEN_P(str);
-
- p1 = Z_STRVAL_P(str);
- p2 = php_memnstr(Z_STRVAL_P(str), Z_STRVAL_P(delim), Z_STRLEN_P(delim), endp);
-
- if (p2 == NULL) {
- /*
- do nothing since limit <= -1, thus if only one chunk - 1 + (limit) <= 0
- by doing nothing we return empty array
- */
- } else {
- positions[found++] = p1;
- do {
- if (found >= allocated) {
- allocated = found + EXPLODE_ALLOC_STEP;/* make sure we have enough memory */
- positions = erealloc(positions, allocated*sizeof(char *));
- }
- positions[found++] = p1 = p2 + Z_STRLEN_P(delim);
- } while ((p2 = php_memnstr(p1, Z_STRVAL_P(delim), Z_STRLEN_P(delim), endp)) != NULL);
-
- to_return = limit + found;
- /* limit is at least -1 therefore no need of bounds checking : i will be always less than found */
- for (i = 0;i < to_return;i++) { /* this checks also for to_return > 0 */
- add_next_index_stringl(return_value, positions[i],
- (positions[i+1] - Z_STRLEN_P(delim)) - positions[i],
- 1
- );
- }
- }
- efree(positions);
-#undef EXPLODE_ALLOC_STEP
-}
-/* }}} */
-
-
-/* {{{ proto array explode(string separator, string str [, int limit])
- Splits a string on string separator and return array of components. If limit is positive only limit number of components is returned. If limit is negative all components except the last abs(limit) are returned. */
-PHP_FUNCTION(explode)
-{
- zval **str, **delim, **zlimit = NULL;
- int limit = -1;
- int argc = ZEND_NUM_ARGS();
-
- if (argc < 2 || argc > 3 || zend_get_parameters_ex(argc, &delim, &str, &zlimit) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex(str);
- convert_to_string_ex(delim);
-
- if (argc > 2) {
- convert_to_long_ex(zlimit);
- limit = Z_LVAL_PP(zlimit);
- }
-
- if (! Z_STRLEN_PP(delim)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Empty delimiter.");
- RETURN_FALSE;
- }
-
- array_init(return_value);
-
- if (! Z_STRLEN_PP(str)) {
- add_next_index_stringl(return_value, "", sizeof("") - 1, 1);
- return;
- }
-
-
- if (limit == 0 || limit == 1) {
- add_index_stringl(return_value, 0, Z_STRVAL_PP(str), Z_STRLEN_PP(str), 1);
- } else if (limit < 0 && argc == 3) {
- php_explode_negative_limit(*delim, *str, return_value, limit);
- } else {
- php_explode(*delim, *str, return_value, limit);
- }
-}
-/* }}} */
-
-/* {{{ proto string join(array src, string glue)
- An alias for implode */
-/* }}} */
-
-/* {{{ php_implode
- */
-PHPAPI void php_implode(zval *delim, zval *arr, zval *return_value)
-{
- zval **tmp;
- HashPosition pos;
- smart_str implstr = {0};
- int numelems, i = 0;
-
- numelems = zend_hash_num_elements(Z_ARRVAL_P(arr));
-
- if (numelems == 0) {
- RETURN_EMPTY_STRING();
- }
-
- zend_hash_internal_pointer_reset_ex(Z_ARRVAL_P(arr), &pos);
-
- while (zend_hash_get_current_data_ex(Z_ARRVAL_P(arr), (void **) &tmp, &pos) == SUCCESS) {
- if ((*tmp)->type != IS_STRING) {
- SEPARATE_ZVAL(tmp);
- convert_to_string(*tmp);
- }
-
- smart_str_appendl(&implstr, Z_STRVAL_PP(tmp), Z_STRLEN_PP(tmp));
- if (++i != numelems) {
- smart_str_appendl(&implstr, Z_STRVAL_P(delim), Z_STRLEN_P(delim));
- }
- zend_hash_move_forward_ex(Z_ARRVAL_P(arr), &pos);
- }
- smart_str_0(&implstr);
-
- RETURN_STRINGL(implstr.c, implstr.len, 0);
-}
-/* }}} */
-
-/* {{{ proto string implode([string glue,] array pieces)
- Joins array elements placing glue string between items and return one string */
-PHP_FUNCTION(implode)
-{
- zval **arg1 = NULL, **arg2 = NULL, *delim, *arr;
- int argc = ZEND_NUM_ARGS();
-
- if (argc < 1 || argc > 2 ||
- zend_get_parameters_ex(argc, &arg1, &arg2) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- if (argc == 1) {
- if (Z_TYPE_PP(arg1) != IS_ARRAY) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Argument to implode must be an array.");
- return;
- }
-
- MAKE_STD_ZVAL(delim);
-#define _IMPL_EMPTY ""
- ZVAL_STRINGL(delim, _IMPL_EMPTY, sizeof(_IMPL_EMPTY) - 1, 0);
-
- SEPARATE_ZVAL(arg1);
- arr = *arg1;
- } else {
- if (Z_TYPE_PP(arg1) == IS_ARRAY) {
- SEPARATE_ZVAL(arg1);
- arr = *arg1;
- convert_to_string_ex(arg2);
- delim = *arg2;
- } else if (Z_TYPE_PP(arg2) == IS_ARRAY) {
- SEPARATE_ZVAL(arg2);
- arr = *arg2;
- convert_to_string_ex(arg1);
- delim = *arg1;
- } else {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Bad arguments.");
- return;
- }
- }
-
- php_implode(delim, arr, return_value);
-
- if (argc == 1) {
- FREE_ZVAL(delim);
- }
-}
-/* }}} */
-
-#define STRTOK_TABLE(p) BG(strtok_table)[(unsigned char) *p]
-
-/* {{{ proto string strtok([string str,] string token)
- Tokenize a string */
-PHP_FUNCTION(strtok)
-{
- zval **args[2];
- zval **tok, **str;
- char *token;
- char *token_end;
- char *p;
- char *pe;
- int skipped = 0;
-
- if (ZEND_NUM_ARGS() < 1 || ZEND_NUM_ARGS() > 2 || zend_get_parameters_array_ex(ZEND_NUM_ARGS(), args) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- switch (ZEND_NUM_ARGS()) {
- case 1:
- tok = args[0];
- break;
-
- default:
- case 2:
- str = args[0];
- tok = args[1];
- convert_to_string_ex(str);
-
- zval_add_ref(str);
- if (BG(strtok_zval)) {
- zval_ptr_dtor(&BG(strtok_zval));
- }
- BG(strtok_zval) = *str;
- BG(strtok_last) = BG(strtok_string) = Z_STRVAL_PP(str);
- BG(strtok_len) = Z_STRLEN_PP(str);
- break;
- }
-
- p = BG(strtok_last); /* Where we start to search */
- pe = BG(strtok_string) + BG(strtok_len);
-
- if (!p || p >= pe) {
- RETURN_FALSE;
- }
-
- convert_to_string_ex(tok);
-
- token = Z_STRVAL_PP(tok);
- token_end = token + Z_STRLEN_PP(tok);
-
- while (token < token_end) {
- STRTOK_TABLE(token++) = 1;
- }
-
- /* Skip leading delimiters */
- while (STRTOK_TABLE(p)) {
- if (++p >= pe) {
- /* no other chars left */
- BG(strtok_last) = NULL;
- RETVAL_FALSE;
- goto restore;
- }
- skipped++;
- }
-
- /* We know at this place that *p is no delimiter, so skip it */
- while (++p < pe) {
- if (STRTOK_TABLE(p)) {
- goto return_token;
- }
- }
-
- if (p - BG(strtok_last)) {
-return_token:
- RETVAL_STRINGL(BG(strtok_last) + skipped, (p - BG(strtok_last)) - skipped, 1);
- BG(strtok_last) = p + 1;
- } else {
- RETVAL_FALSE;
- BG(strtok_last) = NULL;
- }
-
- /* Restore table -- usually faster then memset'ing the table on every invocation */
-restore:
- token = Z_STRVAL_PP(tok);
-
- while (token < token_end) {
- STRTOK_TABLE(token++) = 0;
- }
-}
-/* }}} */
-
-/* {{{ php_strtoupper
- */
-PHPAPI char *php_strtoupper(char *s, size_t len)
-{
- unsigned char *c, *e;
-
- c = s;
- e = c+len;
-
- while (c < e) {
- *c = toupper(*c);
- c++;
- }
- return s;
-}
-/* }}} */
-
-/* {{{ proto string strtoupper(string str)
- Makes a string uppercase */
-PHP_FUNCTION(strtoupper)
-{
- zval **arg;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg)) {
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex(arg);
-
- *return_value = **arg;
- zval_copy_ctor(return_value);
- php_strtoupper(Z_STRVAL_P(return_value), Z_STRLEN_P(return_value));
-}
-/* }}} */
-
-/* {{{ php_strtolower
- */
-PHPAPI char *php_strtolower(char *s, size_t len)
-{
- unsigned char *c, *e;
-
- c = s;
- e = c+len;
-
- while (c < e) {
- *c = tolower(*c);
- c++;
- }
- return s;
-}
-/* }}} */
-
-/* {{{ proto string strtolower(string str)
- Makes a string lowercase */
-PHP_FUNCTION(strtolower)
-{
- zval **str;
- char *ret;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &str)) {
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex(str);
-
- *return_value = **str;
- zval_copy_ctor(return_value);
- ret = php_strtolower(Z_STRVAL_P(return_value), Z_STRLEN_P(return_value));
-}
-/* }}} */
-
-/* {{{ php_basename
- */
-PHPAPI void php_basename(char *s, size_t len, char *suffix, size_t sufflen, char **p_ret, size_t *p_len TSRMLS_DC)
-{
- char *ret = NULL, *c, *comp, *cend;
- size_t inc_len, cnt;
- int state;
-
- c = comp = cend = s;
- cnt = len;
- state = 0;
- while (cnt > 0) {
- inc_len = (*c == '\0' ? 1: php_mblen(c, cnt));
-
- switch (inc_len) {
- case -2:
- case -1:
- inc_len = 1;
- php_mblen(NULL, 0);
- break;
- case 0:
- goto quit_loop;
- case 1:
-#ifdef PHP_WIN32
- if (*c == '/' || *c == '\\') {
-#else
- if (*c == '/') {
-#endif
- if (state == 1) {
- state = 0;
- cend = c;
- }
- } else {
- if (state == 0) {
- comp = c;
- state = 1;
- }
- }
- default:
- break;
- }
- c += inc_len;
- cnt -= inc_len;
- }
-
-quit_loop:
- if (state == 1) {
- cend = c;
- }
- if (suffix != NULL && sufflen < (cend - comp) &&
- memcmp(cend - sufflen, suffix, sufflen) == 0) {
- cend -= sufflen;
- }
-
- len = cend - comp;
- ret = emalloc(len + 1);
- memcpy(ret, comp, len);
- ret[len] = '\0';
-
- if (p_ret) {
- *p_ret = ret;
- }
- if (p_len) {
- *p_len = len;
- }
-}
-/* }}} */
-
-/* {{{ proto string basename(string path [, string suffix])
- Returns the filename component of the path */
-PHP_FUNCTION(basename)
-{
- char *string, *suffix = NULL, *ret;
- int string_len, suffix_len = 0;
- size_t ret_len;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|s", &string, &string_len, &suffix, &suffix_len) == FAILURE) {
- return;
- }
-
- php_basename(string, string_len, suffix, suffix_len, &ret, &ret_len TSRMLS_CC);
- RETURN_STRINGL(ret, (int)ret_len, 0);
-}
-/* }}} */
-
-/* {{{ php_dirname
- Returns directory name component of path */
-PHPAPI size_t php_dirname(char *path, size_t len)
-{
- register char *end = path + len - 1;
- unsigned int len_adjust = 0;
-
-#ifdef PHP_WIN32
- /* Note that on Win32 CWD is per drive (heritage from CP/M).
- * This means dirname("c:foo") maps to "c:." or "c:" - which means CWD on C: drive.
- */
- if ((2 <= len) && isalpha((int)((unsigned char *)path)[0]) && (':' == path[1])) {
- /* Skip over the drive spec (if any) so as not to change */
- path += 2;
- len_adjust += 2;
- if (2 == len) {
- /* Return "c:" on Win32 for dirname("c:").
- * It would be more consistent to return "c:."
- * but that would require making the string *longer*.
- */
- return len;
- }
- }
-#endif
-
- if (len == 0) {
- /* Illegal use of this function */
- return 0;
- }
-
- /* Strip trailing slashes */
- while (end >= path && IS_SLASH_P(end)) {
- end--;
- }
- if (end < path) {
- /* The path only contained slashes */
- path[0] = DEFAULT_SLASH;
- path[1] = '\0';
- return 1 + len_adjust;
- }
-
- /* Strip filename */
- while (end >= path && !IS_SLASH_P(end)) {
- end--;
- }
- if (end < path) {
- /* No slash found, therefore return '.' */
- path[0] = '.';
- path[1] = '\0';
- return 1 + len_adjust;
- }
-
- /* Strip slashes which came before the file name */
- while (end >= path && IS_SLASH_P(end)) {
- end--;
- }
- if (end < path) {
- path[0] = DEFAULT_SLASH;
- path[1] = '\0';
- return 1 + len_adjust;
- }
- *(end+1) = '\0';
-
- return (size_t)(end + 1 - path) + len_adjust;
-}
-/* }}} */
-
-/* {{{ proto string dirname(string path)
- Returns the directory name component of the path */
-PHP_FUNCTION(dirname)
-{
- zval **str;
- char *ret;
- size_t ret_len;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &str) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex(str);
-
- ret = estrndup(Z_STRVAL_PP(str), Z_STRLEN_PP(str));
- ret_len = php_dirname(ret, Z_STRLEN_PP(str));
-
- RETURN_STRINGL(ret, ret_len, 0);
-}
-/* }}} */
-
-/* {{{ proto array pathinfo(string path)
- Returns information about a certain string */
-PHP_FUNCTION(pathinfo)
-{
- zval *tmp;
- char *path, *ret = NULL;
- int path_len;
- size_t ret_len;
- long opt = PHP_PATHINFO_ALL;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|l", &path, &path_len, &opt) == FAILURE) {
- return;
- }
-
- MAKE_STD_ZVAL(tmp);
- array_init(tmp);
-
- if ((opt & PHP_PATHINFO_DIRNAME) == PHP_PATHINFO_DIRNAME) {
- ret = estrndup(path, path_len);
- php_dirname(ret, path_len);
- if (*ret) {
- add_assoc_string(tmp, "dirname", ret, 1);
- }
- efree(ret);
- }
-
- if ((opt & PHP_PATHINFO_BASENAME) == PHP_PATHINFO_BASENAME) {
- php_basename(path, path_len, NULL, 0, &ret, &ret_len TSRMLS_CC);
- add_assoc_stringl(tmp, "basename", ret, ret_len, 0);
- }
-
- if ((opt & PHP_PATHINFO_EXTENSION) == PHP_PATHINFO_EXTENSION) {
- char *p;
- int idx;
- int have_basename = ((opt & PHP_PATHINFO_BASENAME) == PHP_PATHINFO_BASENAME);
-
- /* Have we alrady looked up the basename? */
- if (!have_basename) {
- php_basename(path, path_len, NULL, 0, &ret, &ret_len TSRMLS_CC);
- }
-
- p = strrchr(ret, '.');
-
- if (p) {
- idx = p - ret;
- add_assoc_stringl(tmp, "extension", ret + idx + 1, ret_len - idx - 1, 1);
- }
-
- if (!have_basename) {
- efree(ret);
- }
- }
-
- if (opt == PHP_PATHINFO_ALL) {
- *return_value = *tmp;
- } else {
- zval **element;
- if (zend_hash_get_current_data(Z_ARRVAL_P(tmp), (void **) &element) == SUCCESS) {
- *return_value = **element;
- } else {
- ZVAL_EMPTY_STRING(return_value);
- }
- }
-
- zval_copy_ctor(return_value);
- zval_dtor(tmp);
- efree(tmp);
-}
-/* }}} */
-
-/* {{{ php_stristr
- case insensitve strstr */
-PHPAPI char *php_stristr(unsigned char *s, unsigned char *t, size_t s_len, size_t t_len)
-{
- php_strtolower(s, s_len);
- php_strtolower(t, t_len);
- return php_memnstr(s, t, t_len, s + s_len);
-}
-/* }}} */
-
-/* {{{ php_strspn
- */
-PHPAPI size_t php_strspn(char *s1, char *s2, char *s1_end, char *s2_end)
-{
- register const char *p = s1, *spanp;
- register char c = *p;
-
-cont:
- for (spanp = s2; p != s1_end && spanp != s2_end;) {
- if (*spanp++ == c) {
- c = *(++p);
- goto cont;
- }
- }
- return (p - s1);
-}
-/* }}} */
-
-/* {{{ php_strcspn
- */
-PHPAPI size_t php_strcspn(char *s1, char *s2, char *s1_end, char *s2_end)
-{
- register const char *p, *spanp;
- register char c = *s1;
-
- for (p = s1;;) {
- spanp = s2;
- do {
- if (*spanp == c || p == s1_end) {
- return p - s1;
- }
- } while (spanp++ < s2_end);
- c = *++p;
- }
- /* NOTREACHED */
-}
-/* }}} */
-
-/* {{{ proto string stristr(string haystack, string needle)
- Finds first occurrence of a string within another, case insensitive */
-PHP_FUNCTION(stristr)
-{
- zval **haystack, **needle;
- char *found = NULL;
- int found_offset;
- char *haystack_orig;
- char needle_char[2];
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &haystack, &needle) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- SEPARATE_ZVAL(haystack);
- SEPARATE_ZVAL(needle);
-
- convert_to_string_ex(haystack);
-
- haystack_orig = estrndup(Z_STRVAL_PP(haystack), Z_STRLEN_PP(haystack));
-
- if (Z_TYPE_PP(needle) == IS_STRING) {
- if (!Z_STRLEN_PP(needle)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Empty delimiter.");
- efree(haystack_orig);
- zval_ptr_dtor(haystack);
- zval_ptr_dtor(needle);
- RETURN_FALSE;
- }
-
- found = php_stristr(Z_STRVAL_PP(haystack),
- Z_STRVAL_PP(needle),
- Z_STRLEN_PP(haystack),
- Z_STRLEN_PP(needle));
- } else {
- convert_to_long_ex(needle);
- needle_char[0] = (char) Z_LVAL_PP(needle);
- needle_char[1] = 0;
-
- found = php_stristr(Z_STRVAL_PP(haystack),
- needle_char,
- Z_STRLEN_PP(haystack),
- 1);
- }
-
- if (found) {
- found_offset = found - Z_STRVAL_PP(haystack);
- RETVAL_STRINGL(haystack_orig + found_offset, Z_STRLEN_PP(haystack) - found_offset, 1);
- } else {
- RETVAL_FALSE;
- }
-
- zval_ptr_dtor(haystack);
- zval_ptr_dtor(needle);
- efree(haystack_orig);
-}
-/* }}} */
-
-/* {{{ proto string strstr(string haystack, string needle)
- Finds first occurrence of a string within another */
-PHP_FUNCTION(strstr)
-{
- zval **haystack, **needle;
- char *found = NULL;
- char needle_char[2];
- long found_offset;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &haystack, &needle) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_string_ex(haystack);
-
- if (Z_TYPE_PP(needle) == IS_STRING) {
- if (!Z_STRLEN_PP(needle)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Empty delimiter.");
- RETURN_FALSE;
- }
-
- found = php_memnstr(Z_STRVAL_PP(haystack),
- Z_STRVAL_PP(needle),
- Z_STRLEN_PP(needle),
- Z_STRVAL_PP(haystack) + Z_STRLEN_PP(haystack));
- } else {
- convert_to_long_ex(needle);
- needle_char[0] = (char) Z_LVAL_PP(needle);
- needle_char[1] = 0;
-
- found = php_memnstr(Z_STRVAL_PP(haystack),
- needle_char,
- 1,
- Z_STRVAL_PP(haystack) + Z_STRLEN_PP(haystack));
- }
-
- if (found) {
- found_offset = found - Z_STRVAL_PP(haystack);
- RETURN_STRINGL(found, Z_STRLEN_PP(haystack) - found_offset, 1);
- } else {
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-/* {{{ proto string strchr(string haystack, string needle)
- An alias for strstr */
-/* }}} */
-
-/* {{{ proto int strpos(string haystack, string needle [, int offset])
- Finds position of first occurrence of a string within another */
-PHP_FUNCTION(strpos)
-{
- zval **haystack, **needle, **z_offset;
- char *found = NULL;
- char needle_char[2];
- int offset = 0;
- int argc = ZEND_NUM_ARGS();
-
- if (argc < 2 || argc > 3 || zend_get_parameters_ex(argc, &haystack, &needle, &z_offset) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex(haystack);
-
- if (argc > 2) {
- convert_to_long_ex(z_offset);
- offset = Z_LVAL_PP(z_offset);
- }
-
- if (offset < 0 || offset > Z_STRLEN_PP(haystack)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Offset not contained in string.");
- RETURN_FALSE;
- }
-
- if (Z_TYPE_PP(needle) == IS_STRING) {
- if (!Z_STRLEN_PP(needle)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Empty delimiter.");
- RETURN_FALSE;
- }
-
- found = php_memnstr(Z_STRVAL_PP(haystack) + offset,
- Z_STRVAL_PP(needle),
- Z_STRLEN_PP(needle),
- Z_STRVAL_PP(haystack) + Z_STRLEN_PP(haystack));
- } else {
- convert_to_long_ex(needle);
- needle_char[0] = (char) Z_LVAL_PP(needle);
- needle_char[1] = 0;
-
- found = php_memnstr(Z_STRVAL_PP(haystack) + offset,
- needle_char,
- 1,
- Z_STRVAL_PP(haystack) + Z_STRLEN_PP(haystack));
- }
-
- if (found) {
- RETURN_LONG(found - Z_STRVAL_PP(haystack));
- } else {
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-/* {{{ proto int stripos(string haystack, string needle [, int offset])
- Finds position of first occurrence of a string within another, case insensitive */
-PHP_FUNCTION(stripos)
-{
- char *found = NULL;
- char *haystack;
- int haystack_len;
- long offset = 0;
- char *needle_dup = NULL, *haystack_dup;
- char needle_char[2];
- zval *needle;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "sz|l", &haystack, &haystack_len, &needle, &offset) == FAILURE) {
- return;
- }
-
- if (offset < 0 || offset > haystack_len) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Offset not contained in string.");
- RETURN_FALSE;
- }
-
- haystack_dup = estrndup(haystack, haystack_len);
- php_strtolower(haystack_dup, haystack_len);
-
- if (Z_TYPE_P(needle) == IS_STRING) {
- needle_dup = estrndup(Z_STRVAL_P(needle), Z_STRLEN_P(needle));
- php_strtolower(needle_dup, Z_STRLEN_P(needle));
- found = php_memnstr(haystack_dup + offset, needle_dup, Z_STRLEN_P(needle), haystack_dup + haystack_len);
- } else {
- switch (Z_TYPE_P(needle)) {
- case IS_LONG:
- case IS_BOOL:
- needle_char[0] = tolower((char) Z_LVAL_P(needle));
- break;
- case IS_DOUBLE:
- needle_char[0] = tolower((char) Z_DVAL_P(needle));
- break;
- default:
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "needle is not a string or an integer.");
- efree(haystack_dup);
- RETURN_FALSE;
- break;
-
- }
- needle_char[1] = '\0';
- found = php_memnstr(haystack_dup + offset,
- needle_char,
- sizeof(needle_char) - 1,
- haystack_dup + haystack_len);
- }
-
- efree(haystack_dup);
- if (needle_dup) {
- efree(needle_dup);
- }
-
- if (found) {
- RETURN_LONG(found - haystack_dup);
- } else {
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-/* {{{ proto int strrpos(string haystack, string needle [, int offset])
- Finds position of last occurrence of a string within another string */
-PHP_FUNCTION(strrpos)
-{
- zval *zneedle;
- char *needle, *haystack;
- int needle_len, haystack_len;
- long offset = 0;
- char *p, *e, ord_needle[2];
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "sz|l", &haystack, &haystack_len, &zneedle, &offset) == FAILURE) {
- RETURN_FALSE;
- }
-
- if (Z_TYPE_P(zneedle) == IS_STRING) {
- needle = Z_STRVAL_P(zneedle);
- needle_len = Z_STRLEN_P(zneedle);
- } else {
- convert_to_long(zneedle);
- ord_needle[0] = (char)(Z_LVAL_P(zneedle) & 0xFF);
- ord_needle[1] = '\0';
- needle = ord_needle;
- needle_len = 1;
- }
-
- if ((haystack_len == 0) || (needle_len == 0)) {
- RETURN_FALSE;
- }
-
- if (offset >= 0) {
- p = haystack + offset;
- e = haystack + haystack_len - needle_len;
- } else {
- p = haystack;
- if (-offset > haystack_len) {
- e = haystack - needle_len;
- } else if (needle_len > -offset) {
- e = haystack + haystack_len - needle_len;
- } else {
- e = haystack + haystack_len + offset;
- }
- }
-
- if (needle_len == 1) {
- /* Single character search can shortcut memcmps */
- while (e >= p) {
- if (*e == *needle) {
- RETURN_LONG(e - p + (offset > 0 ? offset : 0));
- }
- e--;
- }
- RETURN_FALSE;
- }
-
- while (e >= p) {
- if (memcmp(e, needle, needle_len) == 0) {
- RETURN_LONG(e - p + (offset > 0 ? offset : 0));
- }
- e--;
- }
-
- RETURN_FALSE;
-}
-/* }}} */
-
-/* {{{ proto int strripos(string haystack, string needle [, int offset])
- Finds position of last occurrence of a string within another string */
-PHP_FUNCTION(strripos)
-{
- zval *zneedle;
- char *needle, *haystack;
- int needle_len, haystack_len;
- long offset = 0;
- char *p, *e, ord_needle[2];
- char *needle_dup, *haystack_dup;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "sz|l", &haystack, &haystack_len, &zneedle, &offset) == FAILURE) {
- RETURN_FALSE;
- }
-
- if (Z_TYPE_P(zneedle) == IS_STRING) {
- needle = Z_STRVAL_P(zneedle);
- needle_len = Z_STRLEN_P(zneedle);
- } else {
- convert_to_long(zneedle);
- ord_needle[0] = (char)(Z_LVAL_P(zneedle) & 0xFF);
- ord_needle[1] = '\0';
- needle = ord_needle;
- needle_len = 1;
- }
-
- if ((haystack_len == 0) || (needle_len == 0)) {
- RETURN_FALSE;
- }
-
- if (needle_len == 1) {
- /* Single character search can shortcut memcmps
- Can also avoid tolower emallocs */
- if (offset >= 0) {
- p = haystack + offset;
- e = haystack + haystack_len - 1;
- } else {
- p = haystack;
- if (-offset > haystack_len) {
- e = haystack + haystack_len - 1;
- } else {
- e = haystack + haystack_len + offset;
- }
- }
- /* Borrow that ord_needle buffer to avoid repeatedly tolower()ing needle */
- *ord_needle = tolower(*needle);
- while (e >= p) {
- if (tolower(*e) == *ord_needle) {
- RETURN_LONG(e - p + (offset > 0 ? offset : 0));
- }
- e--;
- }
- RETURN_FALSE;
- }
-
- needle_dup = estrndup(needle, needle_len);
- php_strtolower(needle_dup, needle_len);
- haystack_dup = estrndup(haystack, haystack_len);
- php_strtolower(haystack_dup, haystack_len);
-
- if (offset >= 0) {
- p = haystack_dup + offset;
- e = haystack_dup + haystack_len - needle_len;
- } else {
- p = haystack_dup;
- if (-offset > haystack_len) {
- e = haystack_dup - needle_len;
- } else if (needle_len > -offset) {
- e = haystack_dup + haystack_len - needle_len;
- } else {
- e = haystack_dup + haystack_len + offset;
- }
- }
-
- while (e >= p) {
- if (memcmp(e, needle_dup, needle_len) == 0) {
- efree(haystack_dup);
- efree(needle_dup);
- RETURN_LONG(e - p + (offset > 0 ? offset : 0));
- }
- e--;
- }
-
- efree(haystack_dup);
- efree(needle_dup);
- RETURN_FALSE;
-}
-/* }}} */
-
-/* {{{ proto string strrchr(string haystack, string needle)
- Finds the last occurrence of a character in a string within another */
-PHP_FUNCTION(strrchr)
-{
- zval **haystack, **needle;
- char *found = NULL;
- long found_offset;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &haystack, &needle) ==
- FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex(haystack);
-
- if (Z_TYPE_PP(needle) == IS_STRING) {
- found = strrchr(Z_STRVAL_PP(haystack), *Z_STRVAL_PP(needle));
- } else {
- convert_to_long_ex(needle);
- found = strrchr(Z_STRVAL_PP(haystack), (char) Z_LVAL_PP(needle));
- }
-
- if (found) {
- found_offset = found - Z_STRVAL_PP(haystack);
- RETURN_STRINGL(found, Z_STRLEN_PP(haystack) - found_offset, 1);
- } else {
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-/* {{{ php_chunk_split
- */
-static char *php_chunk_split(char *src, int srclen, char *end, int endlen, int chunklen, int *destlen)
-{
- char *dest;
- char *p, *q;
- int chunks; /* complete chunks! */
- int restlen;
-
- chunks = srclen / chunklen;
- restlen = srclen - chunks * chunklen; /* srclen % chunklen */
-
- dest = safe_emalloc((srclen + (chunks + 1) * endlen + 1), sizeof(char), 0);
-
- for (p = src, q = dest; p < (src + srclen - chunklen + 1); ) {
- memcpy(q, p, chunklen);
- q += chunklen;
- memcpy(q, end, endlen);
- q += endlen;
- p += chunklen;
- }
-
- if (restlen) {
- memcpy(q, p, restlen);
- q += restlen;
- memcpy(q, end, endlen);
- q += endlen;
- }
-
- *q = '\0';
- if (destlen) {
- *destlen = q - dest;
- }
-
- return(dest);
-}
-/* }}} */
-
-/* {{{ proto string chunk_split(string str [, int chunklen [, string ending]])
- Returns split line */
-PHP_FUNCTION(chunk_split)
-{
- zval **p_str, **p_chunklen, **p_ending;
- char *result;
- char *end = "\r\n";
- int endlen = 2;
- int chunklen = 76;
- int result_len;
- int argc = ZEND_NUM_ARGS();
-
- if (argc < 1 || argc > 3 || zend_get_parameters_ex(argc, &p_str, &p_chunklen, &p_ending) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_string_ex(p_str);
-
- if (argc > 1) {
- convert_to_long_ex(p_chunklen);
- chunklen = Z_LVAL_PP(p_chunklen);
- }
-
- if (argc > 2) {
- convert_to_string_ex(p_ending);
- end = Z_STRVAL_PP(p_ending);
- endlen = Z_STRLEN_PP(p_ending);
- }
-
- if (chunklen <= 0) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Chunk length should be greater than zero.");
- RETURN_FALSE;
- }
-
- if (!Z_STRLEN_PP(p_str)) {
- RETURN_EMPTY_STRING();
- }
-
- result = php_chunk_split(Z_STRVAL_PP(p_str), Z_STRLEN_PP(p_str), end, endlen, chunklen, &result_len);
-
- if (result) {
- RETURN_STRINGL(result, result_len, 0);
- } else {
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-/* {{{ proto string substr(string str, int start [, int length])
- Returns part of a string */
-PHP_FUNCTION(substr)
-{
- zval **str, **from, **len;
- int l;
- int f;
- int argc = ZEND_NUM_ARGS();
-
- if (argc < 2 || argc > 3 || zend_get_parameters_ex(argc, &str, &from, &len) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_string_ex(str);
- convert_to_long_ex(from);
-
- if (argc > 2) {
- convert_to_long_ex(len);
- l = Z_LVAL_PP(len);
- } else {
- l = Z_STRLEN_PP(str);
- }
-
- f = Z_LVAL_PP(from);
-
- /* if "from" position is negative, count start position from the end
- * of the string
- */
- if (f < 0) {
- f = Z_STRLEN_PP(str) + f;
- if (f < 0) {
- f = 0;
- }
- }
-
- /* if "length" position is negative, set it to the length
- * needed to stop that many chars from the end of the string
- */
- if (l < 0) {
- l = (Z_STRLEN_PP(str) - f) + l;
- if (l < 0) {
- l = 0;
- }
- }
-
- if (f >= Z_STRLEN_PP(str)) {
- RETURN_FALSE;
- }
-
- if (((unsigned) f + (unsigned) l) > Z_STRLEN_PP(str)) {
- l = Z_STRLEN_PP(str) - f;
- }
-
- RETURN_STRINGL(Z_STRVAL_PP(str) + f, l, 1);
-}
-/* }}} */
-
-
-/* {{{ proto mixed substr_replace(mixed str, mixed repl, mixed start [, mixed length])
- Replaces part of a string with another string */
-PHP_FUNCTION(substr_replace)
-{
- zval **str;
- zval **from;
- zval **len = NULL;
- zval **repl;
- char *result;
- int result_len;
- int l = 0;
- int f;
- int argc = ZEND_NUM_ARGS();
-
- HashPosition pos_str, pos_from, pos_repl, pos_len;
- zval **tmp_str = NULL, **tmp_from = NULL, **tmp_repl = NULL, **tmp_len= NULL;
-
-
- if (argc < 3 || argc > 4 || zend_get_parameters_ex(argc, &str, &repl, &from, &len) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- if (Z_TYPE_PP(str) != IS_ARRAY) {
- convert_to_string_ex(str);
- }
- if (Z_TYPE_PP(repl) != IS_ARRAY) {
- convert_to_string_ex(repl);
- }
- if (Z_TYPE_PP(from) != IS_ARRAY) {
- convert_to_long_ex(from);
- }
-
- if (argc > 3) {
- if (Z_TYPE_PP(len) != IS_ARRAY) {
- convert_to_long_ex(len);
- l = Z_LVAL_PP(len);
- }
- } else {
- if (Z_TYPE_PP(str) != IS_ARRAY) {
- l = Z_STRLEN_PP(str);
- }
- }
-
- if (Z_TYPE_PP(str) == IS_STRING) {
- if (
- (argc == 3 && Z_TYPE_PP(from) == IS_ARRAY)
- ||
- (argc == 4 && Z_TYPE_PP(from) != Z_TYPE_PP(len))
- ) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "'from' and 'len' should be of same type - numerical or array ");
- RETURN_STRINGL(Z_STRVAL_PP(str), Z_STRLEN_PP(str), 1);
- }
- if (argc == 4 && Z_TYPE_PP(from) == IS_ARRAY) {
- if (zend_hash_num_elements(Z_ARRVAL_PP(from)) != zend_hash_num_elements(Z_ARRVAL_PP(len))) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "'from' and 'len' should have the same number of elements");
- RETURN_STRINGL(Z_STRVAL_PP(str), Z_STRLEN_PP(str), 1);
- }
- }
- }
-
-
- if (Z_TYPE_PP(str) != IS_ARRAY) {
- if (Z_TYPE_PP(from) != IS_ARRAY) {
- int repl_len = 0;
-
- f = Z_LVAL_PP(from);
-
- /* if "from" position is negative, count start position from the end
- * of the string
- */
- if (f < 0) {
- f = Z_STRLEN_PP(str) + f;
- if (f < 0) {
- f = 0;
- }
- } else if (f > Z_STRLEN_PP(str)) {
- f = Z_STRLEN_PP(str);
- }
- /* if "length" position is negative, set it to the length
- * needed to stop that many chars from the end of the string
- */
- if (l < 0) {
- l = (Z_STRLEN_PP(str) - f) + l;
- if (l < 0) {
- l = 0;
- }
- }
-
- if (((unsigned) f + (unsigned) l) > Z_STRLEN_PP(str)) {
- l = Z_STRLEN_PP(str) - f;
- }
- if (Z_TYPE_PP(repl) == IS_ARRAY) {
- zend_hash_internal_pointer_reset_ex(Z_ARRVAL_PP(repl), &pos_repl);
- if (SUCCESS == zend_hash_get_current_data_ex(Z_ARRVAL_PP(repl), (void **) &tmp_repl, &pos_repl)) {
- convert_to_string_ex(tmp_repl);
- repl_len = Z_STRLEN_PP(tmp_repl);
- }
- } else {
- repl_len = Z_STRLEN_PP(repl);
- }
- result_len = Z_STRLEN_PP(str) - l + repl_len;
- result = emalloc(result_len + 1);
-
- memcpy(result, Z_STRVAL_PP(str), f);
- if (repl_len) {
- memcpy((result + f), (Z_TYPE_PP(repl) == IS_ARRAY ? Z_STRVAL_PP(tmp_repl) : Z_STRVAL_PP(repl)), repl_len);
- }
- memcpy((result + f + repl_len), Z_STRVAL_PP(str) + f + l, Z_STRLEN_PP(str) - f - l);
- result[result_len] = '\0';
- RETURN_STRINGL(result, result_len, 0);
- } else {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Functionality of 'from' and 'len' as arrays is not implemented.");
- RETURN_STRINGL(Z_STRVAL_PP(str), Z_STRLEN_PP(str), 1);
- }
- } else { /* str is array of strings */
- array_init(return_value);
-
- if (Z_TYPE_PP(from) == IS_ARRAY) {
- zend_hash_internal_pointer_reset_ex(Z_ARRVAL_PP(from), &pos_from);
- }
-
- if (argc > 3 && Z_TYPE_PP(len) == IS_ARRAY) {
- zend_hash_internal_pointer_reset_ex(Z_ARRVAL_PP(len), &pos_len);
- }
-
- if (Z_TYPE_PP(repl) == IS_ARRAY) {
- zend_hash_internal_pointer_reset_ex(Z_ARRVAL_PP(repl), &pos_repl);
- }
-
- zend_hash_internal_pointer_reset_ex(Z_ARRVAL_PP(str), &pos_str);
- while (zend_hash_get_current_data_ex(Z_ARRVAL_PP(str), (void **) &tmp_str, &pos_str) == SUCCESS) {
- convert_to_string_ex(tmp_str);
-
- if (Z_TYPE_PP(from) == IS_ARRAY) {
- if (SUCCESS == zend_hash_get_current_data_ex(Z_ARRVAL_PP(from), (void **) &tmp_from, &pos_from)) {
- convert_to_long_ex(tmp_from);
-
- f = Z_LVAL_PP(tmp_from);
- if (f < 0) {
- f = Z_STRLEN_PP(tmp_str) + f;
- if (f < 0) {
- f = 0;
- }
- } else if (f > Z_STRLEN_PP(tmp_str)) {
- f = Z_STRLEN_PP(tmp_str);
- }
- zend_hash_move_forward_ex(Z_ARRVAL_PP(from), &pos_from);
- } else {
- f = 0;
- }
- } else {
- f = Z_LVAL_PP(from);
- if (f < 0) {
- f = Z_STRLEN_PP(tmp_str) + f;
- if (f < 0) {
- f = 0;
- }
- } else if (f > Z_STRLEN_PP(tmp_str)) {
- f = Z_STRLEN_PP(tmp_str);
- }
- }
-
- if (argc > 3 && Z_TYPE_PP(len) == IS_ARRAY) {
- if (SUCCESS == zend_hash_get_current_data_ex(Z_ARRVAL_PP(len), (void **) &tmp_len, &pos_len)) {
- convert_to_long_ex(tmp_len);
-
- l = Z_LVAL_PP(tmp_len);
- zend_hash_move_forward_ex(Z_ARRVAL_PP(len), &pos_len);
- } else {
- l = Z_STRLEN_PP(tmp_str);
- }
- } else if (argc > 3) {
- l = Z_LVAL_PP(len);
- } else {
- l = Z_STRLEN_PP(tmp_str);
- }
-
- if (l < 0) {
- l = (Z_STRLEN_PP(tmp_str) - f) + l;
- if (l < 0) {
- l = 0;
- }
- }
-
- if (((unsigned) f + (unsigned) l) > Z_STRLEN_PP(tmp_str)) {
- l = Z_STRLEN_PP(tmp_str) - f;
- }
-
- result_len = Z_STRLEN_PP(tmp_str) - l;
-
- if (Z_TYPE_PP(repl) == IS_ARRAY) {
- if (SUCCESS == zend_hash_get_current_data_ex(Z_ARRVAL_PP(repl), (void **) &tmp_repl, &pos_repl)) {
- convert_to_string_ex(tmp_repl);
- result_len += Z_STRLEN_PP(tmp_repl);
- zend_hash_move_forward_ex(Z_ARRVAL_PP(repl), &pos_repl);
- result = emalloc(result_len + 1);
-
- memcpy(result, Z_STRVAL_PP(tmp_str), f);
- memcpy((result + f), Z_STRVAL_PP(tmp_repl), Z_STRLEN_PP(tmp_repl));
- memcpy((result + f + Z_STRLEN_PP(tmp_repl)), Z_STRVAL_PP(tmp_str) + f + l, Z_STRLEN_PP(tmp_str) - f - l);
- } else {
- result = emalloc(result_len + 1);
-
- memcpy(result, Z_STRVAL_PP(tmp_str), f);
- memcpy((result + f), Z_STRVAL_PP(tmp_str) + f + l, Z_STRLEN_PP(tmp_str) - f - l);
- }
- } else {
- result_len += Z_STRLEN_PP(repl);
-
- result = emalloc(result_len + 1);
-
- memcpy(result, Z_STRVAL_PP(tmp_str), f);
- memcpy((result + f), Z_STRVAL_PP(repl), Z_STRLEN_PP(repl));
- memcpy((result + f + Z_STRLEN_PP(repl)), Z_STRVAL_PP(tmp_str) + f + l, Z_STRLEN_PP(tmp_str) - f - l);
- }
-
- result[result_len] = '\0';
- add_next_index_stringl(return_value, result, result_len, 0);
-
- zend_hash_move_forward_ex(Z_ARRVAL_PP(str), &pos_str);
- } /*while*/
- } /* if */
-}
-/* }}} */
-
-
-
-
-/* {{{ proto string quotemeta(string str)
- Quotes meta characters */
-PHP_FUNCTION(quotemeta)
-{
- zval **arg;
- char *str, *old;
- char *old_end;
- char *p, *q;
- char c;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_string_ex(arg);
-
- old = Z_STRVAL_PP(arg);
- old_end = Z_STRVAL_PP(arg) + Z_STRLEN_PP(arg);
-
- if (old == old_end) {
- RETURN_FALSE;
- }
-
- str = safe_emalloc(2, Z_STRLEN_PP(arg), 1);
-
- for (p = old, q = str; p != old_end; p++) {
- c = *p;
- switch (c) {
- case '.':
- case '\\':
- case '+':
- case '*':
- case '?':
- case '[':
- case '^':
- case ']':
- case '$':
- case '(':
- case ')':
- *q++ = '\\';
- /* break is missing _intentionally_ */
- default:
- *q++ = c;
- }
- }
- *q = 0;
-
- RETURN_STRINGL(erealloc(str, q - str + 1), q - str, 0);
-}
-/* }}} */
-
-/* {{{ proto int ord(string character)
- Returns ASCII value of character */
-PHP_FUNCTION(ord)
-{
- zval **str;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &str) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex(str);
-
- RETURN_LONG((unsigned char) Z_STRVAL_PP(str)[0]);
-}
-/* }}} */
-
-/* {{{ proto string chr(int ascii)
- Converts ASCII code to a character */
-PHP_FUNCTION(chr)
-{
- zval **num;
- char temp[2];
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &num) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long_ex(num);
-
- temp[0] = (char) Z_LVAL_PP(num);
- temp[1] = 0;
-
- RETVAL_STRINGL(temp, 1, 1);
-}
-/* }}} */
-
-/* {{{ proto string ucfirst(string str)
- Makes a string's first character uppercase */
-PHP_FUNCTION(ucfirst)
-{
- zval **str;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &str) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex(str);
-
- if (!Z_STRLEN_PP(str)) {
- RETURN_EMPTY_STRING();
- }
-
- ZVAL_STRINGL(return_value, Z_STRVAL_PP(str), Z_STRLEN_PP(str), 1);
- *Z_STRVAL_P(return_value) = toupper((unsigned char) *Z_STRVAL_P(return_value));
-}
-/* }}} */
-
-/* {{{ proto string ucwords(string str)
- Uppercase the first character of every word in a string */
-PHP_FUNCTION(ucwords)
-{
- zval **str;
- register char *r, *r_end;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &str) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex(str);
-
- if (!Z_STRLEN_PP(str)) {
- RETURN_EMPTY_STRING();
- }
-
- ZVAL_STRINGL(return_value, Z_STRVAL_PP(str), Z_STRLEN_PP(str), 1);
- r = Z_STRVAL_P(return_value);
-
- *r = toupper((unsigned char) *r);
- for (r_end = r + Z_STRLEN_P(return_value) - 1; r < r_end; ) {
- if (isspace((int) *(unsigned char *)r++)) {
- *r = toupper((unsigned char) *r);
- }
- }
-}
-/* }}} */
-
-/* {{{ php_strtr
- */
-PHPAPI char *php_strtr(char *str, int len, char *str_from, char *str_to, int trlen)
-{
- int i;
- unsigned char xlat[256];
-
- if ((trlen < 1) || (len < 1)) {
- return str;
- }
-
- for (i = 0; i < 256; xlat[i] = i, i++);
-
- for (i = 0; i < trlen; i++) {
- xlat[(unsigned char) str_from[i]] = str_to[i];
- }
-
- for (i = 0; i < len; i++) {
- str[i] = xlat[(unsigned char) str[i]];
- }
-
- return str;
-}
-/* }}} */
-
-/* {{{ php_strtr_array
- */
-static void php_strtr_array(zval *return_value, char *str, int slen, HashTable *hash)
-{
- zval **entry;
- char *string_key;
- uint string_key_len;
- zval **trans;
- zval ctmp;
- ulong num_key;
- int minlen = 128*1024;
- int maxlen = 0, pos, len, found;
- char *key;
- HashPosition hpos;
- smart_str result = {0};
- HashTable tmp_hash;
-
- zend_hash_init(&tmp_hash, 0, NULL, NULL, 0);
- zend_hash_internal_pointer_reset_ex(hash, &hpos);
- while (zend_hash_get_current_data_ex(hash, (void **)&entry, &hpos) == SUCCESS) {
- switch (zend_hash_get_current_key_ex(hash, &string_key, &string_key_len, &num_key, 0, &hpos)) {
- case HASH_KEY_IS_STRING:
- len = string_key_len-1;
- if (len < 1) {
- zend_hash_destroy(&tmp_hash);
- RETURN_FALSE;
- }
- zend_hash_add(&tmp_hash, string_key, string_key_len, entry, sizeof(zval*), NULL);
- if (len > maxlen) {
- maxlen = len;
- }
- if (len < minlen) {
- minlen = len;
- }
- break;
-
- case HASH_KEY_IS_LONG:
- Z_TYPE(ctmp) = IS_LONG;
- Z_LVAL(ctmp) = num_key;
-
- convert_to_string(&ctmp);
- len = Z_STRLEN(ctmp);
- zend_hash_add(&tmp_hash, Z_STRVAL(ctmp), len+1, entry, sizeof(zval*), NULL);
- zval_dtor(&ctmp);
-
- if (len > maxlen) {
- maxlen = len;
- }
- if (len < minlen) {
- minlen = len;
- }
- break;
- }
- zend_hash_move_forward_ex(hash, &hpos);
- }
-
- key = emalloc(maxlen+1);
- pos = 0;
-
- while (pos < slen) {
- if ((pos + maxlen) > slen) {
- maxlen = slen - pos;
- }
-
- found = 0;
- memcpy(key, str+pos, maxlen);
-
- for (len = maxlen; len >= minlen; len--) {
- key[len] = 0;
-
- if (zend_hash_find(&tmp_hash, key, len+1, (void**)&trans) == SUCCESS) {
- char *tval;
- int tlen;
- zval tmp;
-
- if (Z_TYPE_PP(trans) != IS_STRING) {
- tmp = **trans;
- zval_copy_ctor(&tmp);
- convert_to_string(&tmp);
- tval = Z_STRVAL(tmp);
- tlen = Z_STRLEN(tmp);
- } else {
- tval = Z_STRVAL_PP(trans);
- tlen = Z_STRLEN_PP(trans);
- }
-
- smart_str_appendl(&result, tval, tlen);
- pos += len;
- found = 1;
-
- if (Z_TYPE_PP(trans) != IS_STRING) {
- zval_dtor(&tmp);
- }
- break;
- }
- }
-
- if (! found) {
- smart_str_appendc(&result, str[pos++]);
- }
- }
-
- efree(key);
- zend_hash_destroy(&tmp_hash);
- smart_str_0(&result);
- RETVAL_STRINGL(result.c, result.len, 0);
-}
-/* }}} */
-
-/* {{{ proto string strtr(string str, string from, string to)
- Translates characters in str using given translation tables */
-PHP_FUNCTION(strtr)
-{
- zval **str, **from, **to;
- int ac = ZEND_NUM_ARGS();
-
- if (ac < 2 || ac > 3 || zend_get_parameters_ex(ac, &str, &from, &to) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- if (ac == 2 && Z_TYPE_PP(from) != IS_ARRAY) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "The second argument is not an array.");
- RETURN_FALSE;
- }
-
- convert_to_string_ex(str);
-
- /* shortcut for empty string */
- if (Z_STRLEN_PP(str) == 0) {
- RETURN_EMPTY_STRING();
- }
-
- if (ac == 2) {
- php_strtr_array(return_value, Z_STRVAL_PP(str), Z_STRLEN_PP(str), HASH_OF(*from));
- } else {
- convert_to_string_ex(from);
- convert_to_string_ex(to);
-
- ZVAL_STRINGL(return_value, Z_STRVAL_PP(str), Z_STRLEN_PP(str), 1);
-
- php_strtr(Z_STRVAL_P(return_value),
- Z_STRLEN_P(return_value),
- Z_STRVAL_PP(from),
- Z_STRVAL_PP(to),
- MIN(Z_STRLEN_PP(from),
- Z_STRLEN_PP(to)));
- }
-}
-/* }}} */
-
-/* {{{ proto string strrev(string str)
- Reverse a string */
-PHP_FUNCTION(strrev)
-{
- zval **str;
- char *s, *e, *n, *p;
-
- if (ZEND_NUM_ARGS()!=1 || zend_get_parameters_ex(1, &str) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex(str);
-
- n = emalloc(Z_STRLEN_PP(str)+1);
- p = n;
-
- s = Z_STRVAL_PP(str);
- e = s + Z_STRLEN_PP(str);
-
- while (--e>=s) {
- *p++ = *e;
- }
-
- *p = '\0';
-
- RETVAL_STRINGL(n, Z_STRLEN_PP(str), 0);
-}
-/* }}} */
-
-/* {{{ php_similar_str
- */
-static void php_similar_str(const char *txt1, int len1, const char *txt2, int len2, int *pos1, int *pos2, int *max)
-{
- char *p, *q;
- char *end1 = (char *) txt1 + len1;
- char *end2 = (char *) txt2 + len2;
- int l;
-
- *max = 0;
- for (p = (char *) txt1; p < end1; p++) {
- for (q = (char *) txt2; q < end2; q++) {
- for (l = 0; (p + l < end1) && (q + l < end2) && (p[l] == q[l]); l++);
- if (l > *max) {
- *max = l;
- *pos1 = p - txt1;
- *pos2 = q - txt2;
- }
- }
- }
-}
-/* }}} */
-
-/* {{{ php_similar_char
- */
-static int php_similar_char(const char *txt1, int len1, const char *txt2, int len2)
-{
- int sum;
- int pos1, pos2, max;
-
- php_similar_str(txt1, len1, txt2, len2, &pos1, &pos2, &max);
- if ((sum = max)) {
- if (pos1 && pos2) {
- sum += php_similar_char(txt1, pos1,
- txt2, pos2);
- }
- if ((pos1 + max < len1) && (pos2 + max < len2)) {
- sum += php_similar_char(txt1 + pos1 + max, len1 - pos1 - max,
- txt2 + pos2 + max, len2 - pos2 - max);
- }
- }
-
- return sum;
-}
-/* }}} */
-
-/* {{{ proto int similar_text(string str1, string str2 [, float percent])
- Calculates the similarity between two strings */
-PHP_FUNCTION(similar_text)
-{
- zval **t1, **t2, **percent;
- int ac = ZEND_NUM_ARGS();
- int sim;
-
- if (ac < 2 || ac > 3 || zend_get_parameters_ex(ac, &t1, &t2, &percent) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_string_ex(t1);
- convert_to_string_ex(t2);
-
- if (ac > 2) {
- convert_to_double_ex(percent);
- }
-
- if (Z_STRLEN_PP(t1) + Z_STRLEN_PP(t2) == 0) {
- if (ac > 2) {
- Z_DVAL_PP(percent) = 0;
- }
-
- RETURN_LONG(0);
- }
-
- sim = php_similar_char(Z_STRVAL_PP(t1), Z_STRLEN_PP(t1), Z_STRVAL_PP(t2), Z_STRLEN_PP(t2));
-
- if (ac > 2) {
- Z_DVAL_PP(percent) = sim * 200.0 / (Z_STRLEN_PP(t1) + Z_STRLEN_PP(t2));
- }
-
- RETURN_LONG(sim);
-}
-/* }}} */
-
-/* {{{ php_stripslashes
- *
- * be careful, this edits the string in-place */
-PHPAPI void php_stripslashes(char *str, int *len TSRMLS_DC)
-{
- char *s, *t;
- int l;
-
- if (len != NULL) {
- l = *len;
- } else {
- l = strlen(str);
- }
- s = str;
- t = str;
-
- if (PG(magic_quotes_sybase)) {
- while (l > 0) {
- if (*t == '\'') {
- if ((l > 0) && (t[1] == '\'')) {
- t++;
- if (len != NULL) {
- (*len)--;
- }
- l--;
- }
- *s++ = *t++;
- } else if (*t == '\\' && t[1] == '0' && l > 0) {
- *s++='\0';
- t+=2;
- if (len != NULL) {
- (*len)--;
- }
- l--;
- } else {
- *s++ = *t++;
- }
- l--;
- }
- *s = '\0';
-
- return;
- }
-
- while (l > 0) {
- if (*t == '\\') {
- t++; /* skip the slash */
- if (len != NULL) {
- (*len)--;
- }
- l--;
- if (l > 0) {
- if (*t == '0') {
- *s++='\0';
- t++;
- } else {
- *s++ = *t++; /* preserve the next character */
- }
- l--;
- }
- } else {
- *s++ = *t++;
- l--;
- }
- }
- if (s != t) {
- *s = '\0';
- }
-}
-/* }}} */
-
-/* {{{ proto string addcslashes(string str, string charlist)
- Escapes all chars mentioned in charlist with backslash. It creates octal representations if asked to backslash characters with 8th bit set or with ASCII<32 (except '\n', '\r', '\t' etc...) */
-PHP_FUNCTION(addcslashes)
-{
- zval **str, **what;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &str, &what) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex(str);
- convert_to_string_ex(what);
-
- if (Z_STRLEN_PP(str) == 0) {
- RETURN_EMPTY_STRING();
- }
-
- if (Z_STRLEN_PP(what) == 0) {
- RETURN_STRINGL(Z_STRVAL_PP(str), Z_STRLEN_PP(str), 1);
- }
-
- RETURN_STRING(php_addcslashes(Z_STRVAL_PP(str),
- Z_STRLEN_PP(str),
- &Z_STRLEN_P(return_value), 0,
- Z_STRVAL_PP(what),
- Z_STRLEN_PP(what) TSRMLS_CC), 0);
-}
-/* }}} */
-
-/* {{{ proto string addslashes(string str)
- Escapes single quote, double quotes and backslash characters in a string with backslashes */
-PHP_FUNCTION(addslashes)
-{
- zval **str;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &str) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex(str);
-
- if (Z_STRLEN_PP(str) == 0) {
- RETURN_EMPTY_STRING();
- }
-
- RETURN_STRING(php_addslashes(Z_STRVAL_PP(str),
- Z_STRLEN_PP(str),
- &Z_STRLEN_P(return_value), 0
- TSRMLS_CC), 0);
-}
-/* }}} */
-
-/* {{{ proto string stripcslashes(string str)
- Strips backslashes from a string. Uses C-style conventions */
-PHP_FUNCTION(stripcslashes)
-{
- zval **str;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &str) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex(str);
-
- ZVAL_STRINGL(return_value, Z_STRVAL_PP(str), Z_STRLEN_PP(str), 1);
- php_stripcslashes(Z_STRVAL_P(return_value), &Z_STRLEN_P(return_value));
-}
-/* }}} */
-
-/* {{{ proto string stripslashes(string str)
- Strips backslashes from a string */
-PHP_FUNCTION(stripslashes)
-{
- zval **str;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &str) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex(str);
-
- ZVAL_STRINGL(return_value, Z_STRVAL_PP(str), Z_STRLEN_PP(str), 1);
- php_stripslashes(Z_STRVAL_P(return_value), &Z_STRLEN_P(return_value) TSRMLS_CC);
-}
-/* }}} */
-
-#ifndef HAVE_STRERROR
-/* {{{ php_strerror
- */
-char *php_strerror(int errnum)
-{
- extern int sys_nerr;
- extern char *sys_errlist[];
- TSRMLS_FETCH();
-
- if ((unsigned int) errnum < sys_nerr) {
- return(sys_errlist[errnum]);
- }
-
- (void) sprintf(BG(str_ebuf), "Unknown error: %d", errnum);
- return(BG(str_ebuf));
-}
-/* }}} */
-#endif
-
-/* {{{ php_stripcslashes
- */
-PHPAPI void php_stripcslashes(char *str, int *len)
-{
- char *source, *target, *end;
- int nlen = *len, i;
- char numtmp[4];
-
- for (source=str, end=str+nlen, target=str; source < end; source++) {
- if (*source == '\\' && source+1 < end) {
- source++;
- switch (*source) {
- case 'n': *target++='\n'; nlen--; break;
- case 'r': *target++='\r'; nlen--; break;
- case 'a': *target++='\a'; nlen--; break;
- case 't': *target++='\t'; nlen--; break;
- case 'v': *target++='\v'; nlen--; break;
- case 'b': *target++='\b'; nlen--; break;
- case 'f': *target++='\f'; nlen--; break;
- case '\\': *target++='\\'; nlen--; break;
- case 'x':
- if (source+1 < end && isxdigit((int)(*(source+1)))) {
- numtmp[0] = *++source;
- if (source+1 < end && isxdigit((int)(*(source+1)))) {
- numtmp[1] = *++source;
- numtmp[2] = '\0';
- nlen-=3;
- } else {
- numtmp[1] = '\0';
- nlen-=2;
- }
- *target++=(char)strtol(numtmp, NULL, 16);
- break;
- }
- /* break is left intentionally */
- default:
- i=0;
- while (source < end && *source >= '0' && *source <= '7' && i<3) {
- numtmp[i++] = *source++;
- }
- if (i) {
- numtmp[i]='\0';
- *target++=(char)strtol(numtmp, NULL, 8);
- nlen-=i;
- source--;
- } else {
- *target++=*source;
- nlen--;
- }
- }
- } else {
- *target++=*source;
- }
- }
-
- if (nlen != 0) {
- *target='\0';
- }
-
- *len = nlen;
-}
-/* }}} */
-
-/* {{{ php_addcslashes
- */
-PHPAPI char *php_addcslashes(char *str, int length, int *new_length, int should_free, char *what, int wlength TSRMLS_DC)
-{
- char flags[256];
- char *new_str = safe_emalloc(4, (length?length:(length=strlen(str))), 1);
- char *source, *target;
- char *end;
- char c;
- int newlen;
-
- if (!wlength) {
- wlength = strlen(what);
- }
-
- if (!length) {
- length = strlen(str);
- }
-
- php_charmask(what, wlength, flags TSRMLS_CC);
-
- for (source = str, end = source + length, target = new_str; (c = *source) || (source < end); source++) {
- if (flags[(unsigned char)c]) {
- if ((unsigned char) c < 32 || (unsigned char) c > 126) {
- *target++ = '\\';
- switch (c) {
- case '\n': *target++ = 'n'; break;
- case '\t': *target++ = 't'; break;
- case '\r': *target++ = 'r'; break;
- case '\a': *target++ = 'a'; break;
- case '\v': *target++ = 'v'; break;
- case '\b': *target++ = 'b'; break;
- case '\f': *target++ = 'f'; break;
- default: target += sprintf(target, "%03o", (unsigned char) c);
- }
- continue;
- }
- *target++ = '\\';
- }
- *target++ = c;
- }
- *target = 0;
- newlen = target - new_str;
- if (target - new_str < length * 4) {
- new_str = erealloc(new_str, newlen + 1);
- }
- if (new_length) {
- *new_length = newlen;
- }
- if (should_free) {
- STR_FREE(str);
- }
- return new_str;
-}
-/* }}} */
-
-/* {{{ php_addslashes
- */
-PHPAPI char *php_addslashes(char *str, int length, int *new_length, int should_free TSRMLS_DC)
-{
- /* maximum string length, worst case situation */
- char *new_str;
- char *source, *target;
- char *end;
- int local_new_length;
-
- if (!new_length) {
- new_length = &local_new_length;
- }
- if (!str) {
- *new_length = 0;
- return str;
- }
- new_str = (char *) safe_emalloc(2, (length ? length : (length = strlen(str))), 1);
- source = str;
- end = source + length;
- target = new_str;
-
- if (PG(magic_quotes_sybase)) {
- while (source < end) {
- switch (*source) {
- case '\0':
- *target++ = '\\';
- *target++ = '0';
- break;
- case '\'':
- *target++ = '\'';
- *target++ = '\'';
- break;
- default:
- *target++ = *source;
- break;
- }
- source++;
- }
- } else {
- while (source < end) {
- switch (*source) {
- case '\0':
- *target++ = '\\';
- *target++ = '0';
- break;
- case '\'':
- case '\"':
- case '\\':
- *target++ = '\\';
- /* break is missing *intentionally* */
- default:
- *target++ = *source;
- break;
- }
-
- source++;
- }
- }
-
- *target = 0;
- *new_length = target - new_str;
- if (should_free) {
- STR_FREE(str);
- }
- new_str = (char *) erealloc(new_str, *new_length + 1);
- return new_str;
-}
-/* }}} */
-
-#define _HEB_BLOCK_TYPE_ENG 1
-#define _HEB_BLOCK_TYPE_HEB 2
-#define isheb(c) (((((unsigned char) c) >= 224) && (((unsigned char) c) <= 250)) ? 1 : 0)
-#define _isblank(c) (((((unsigned char) c) == ' ' || ((unsigned char) c) == '\t')) ? 1 : 0)
-#define _isnewline(c) (((((unsigned char) c) == '\n' || ((unsigned char) c) == '\r')) ? 1 : 0)
-
-/* {{{ php_char_to_str_ex
- */
-PHPAPI int php_char_to_str_ex(char *str, uint len, char from, char *to, int to_len, zval *result, int case_sensitivity, int *replace_count)
-{
- int char_count = 0;
- int replaced = 0;
- char *source, *target, *tmp, *source_end=str+len, *tmp_end = NULL;
-
- for (source = str; source < source_end; source++) {
- if (*source == from) {
- char_count++;
- }
- }
-
- if (char_count == 0) {
- ZVAL_STRINGL(result, str, len, 1);
- return 0;
- }
-
- Z_STRLEN_P(result) = len + (char_count * (to_len - 1));
- Z_STRVAL_P(result) = target = emalloc(Z_STRLEN_P(result) + 1);
- Z_TYPE_P(result) = IS_STRING;
-
- for (source = str; source < source_end; source++) {
- if ((case_sensitivity && *source == from) || (!case_sensitivity && tolower(*source) == tolower(from))) {
- replaced = 1;
- if (replace_count) {
- *replace_count += 1;
- }
- for (tmp = to, tmp_end = tmp+to_len; tmp < tmp_end; tmp++) {
- *target = *tmp;
- target++;
- }
- } else {
- *target = *source;
- target++;
- }
- }
- *target = 0;
- return replaced;
-}
-/* }}} */
-
-/* {{{ php_char_to_str
- */
-PHPAPI int php_char_to_str(char *str, uint len, char from, char *to, int to_len, zval *result)
-{
- return php_char_to_str_ex(str, len, from, to, to_len, result, 1, NULL);
-}
-/* }}} */
-
-/* {{{ php_str_to_str_ex
- */
-PHPAPI char *php_str_to_str_ex(char *haystack, int length,
- char *needle, int needle_len, char *str, int str_len, int *_new_length, int case_sensitivity, int *replace_count)
-{
- char *new_str;
-
- if (needle_len < length) {
- char *end, *haystack_dup = NULL, *needle_dup = NULL;
- char *e, *s, *p, *r;
-
- if (needle_len == str_len) {
- new_str = estrndup(haystack, length);
- *_new_length = length;
-
- if (case_sensitivity) {
- end = new_str + length;
- for (p = new_str; (r = php_memnstr(p, needle, needle_len, end)); p = r + needle_len) {
- memcpy(r, str, str_len);
- if (replace_count) {
- (*replace_count)++;
- }
- }
- } else {
- haystack_dup = estrndup(haystack, length);
- needle_dup = estrndup(needle, needle_len);
- php_strtolower(haystack_dup, length);
- php_strtolower(needle_dup, needle_len);
- end = haystack_dup + length;
- for (p = haystack_dup; (r = php_memnstr(p, needle_dup, needle_len, end)); p = r + needle_len) {
- memcpy(new_str + (r - haystack_dup), str, str_len);
- if (replace_count) {
- (*replace_count)++;
- }
- }
- efree(haystack_dup);
- efree(needle_dup);
- }
- return new_str;
- } else {
- if (!case_sensitivity) {
- haystack_dup = estrndup(haystack, length);
- needle_dup = estrndup(needle, needle_len);
- php_strtolower(haystack_dup, length);
- php_strtolower(needle_dup, needle_len);
- }
-
- if (str_len < needle_len) {
- new_str = emalloc(length + 1);
- } else {
- int count = 0;
- char *o, *n, *endp;
-
- if (case_sensitivity) {
- o = haystack;
- n = needle;
- } else {
- o = haystack_dup;
- n = needle_dup;
- }
- endp = o + length;
-
- while ((o = php_memnstr(o, n, needle_len, endp))) {
- o += needle_len;
- count++;
- }
- if (count == 0) {
- /* Needle doesn't occur, shortcircuit the actual replacement. */
- if (haystack_dup) {
- efree(haystack_dup);
- }
- if (needle_dup) {
- efree(needle_dup);
- }
- new_str = estrndup(haystack, length);
- if (_new_length) {
- *_new_length = length;
- }
- return new_str;
- } else {
- new_str = safe_emalloc(count, str_len - needle_len, length + 1);
- }
- }
-
- e = s = new_str;
-
- if (case_sensitivity) {
- end = haystack + length;
- for (p = haystack; (r = php_memnstr(p, needle, needle_len, end)); p = r + needle_len) {
- memcpy(e, p, r - p);
- e += r - p;
- memcpy(e, str, str_len);
- e += str_len;
- if (replace_count) {
- (*replace_count)++;
- }
- }
-
- if (p < end) {
- memcpy(e, p, end - p);
- e += end - p;
- }
- } else {
- end = haystack_dup + length;
-
- for (p = haystack_dup; (r = php_memnstr(p, needle_dup, needle_len, end)); p = r + needle_len) {
- memcpy(e, haystack + (p - haystack_dup), r - p);
- e += r - p;
- memcpy(e, str, str_len);
- e += str_len;
- if (replace_count) {
- (*replace_count)++;
- }
- }
-
- if (p < end) {
- memcpy(e, haystack + (p - haystack_dup), end - p);
- e += end - p;
- }
- }
-
- if (haystack_dup) {
- efree(haystack_dup);
- }
- if (needle_dup) {
- efree(needle_dup);
- }
-
- *e = '\0';
- *_new_length = e - s;
-
- new_str = erealloc(new_str, *_new_length + 1);
- return new_str;
- }
- } else if (needle_len > length) {
-nothing_todo:
- *_new_length = length;
- new_str = estrndup(haystack, length);
- return new_str;
- } else {
- if (case_sensitivity ? strncmp(haystack, needle, length) : strncasecmp(haystack, needle, length)) {
- goto nothing_todo;
- } else {
- *_new_length = str_len;
- new_str = estrndup(str, str_len);
- if (replace_count) {
- (*replace_count)++;
- }
- return new_str;
- }
- }
-
-}
-/* }}} */
-
-/* {{{ php_str_to_str
- */
-PHPAPI char *php_str_to_str(char *haystack, int length,
- char *needle, int needle_len, char *str, int str_len, int *_new_length)
-{
- return php_str_to_str_ex(haystack, length, needle, needle_len, str, str_len, _new_length, 1, NULL);
-}
-/* }}}
- */
-
-/* {{{ php_str_replace_in_subject
- */
-static void php_str_replace_in_subject(zval *search, zval *replace, zval **subject, zval *result, int case_sensitivity, int *replace_count)
-{
- zval **search_entry,
- **replace_entry = NULL,
- temp_result;
- char *replace_value = NULL;
- int replace_len = 0;
-
- /* Make sure we're dealing with strings. */
- convert_to_string_ex(subject);
- Z_TYPE_P(result) = IS_STRING;
- if (Z_STRLEN_PP(subject) == 0) {
- ZVAL_STRINGL(result, "", 0, 1);
- return;
- }
-
- /* If search is an array */
- if (Z_TYPE_P(search) == IS_ARRAY) {
- /* Duplicate subject string for repeated replacement */
- *result = **subject;
- zval_copy_ctor(result);
- INIT_PZVAL(result);
-
- zend_hash_internal_pointer_reset(Z_ARRVAL_P(search));
-
- if (Z_TYPE_P(replace) == IS_ARRAY) {
- zend_hash_internal_pointer_reset(Z_ARRVAL_P(replace));
- } else {
- /* Set replacement value to the passed one */
- replace_value = Z_STRVAL_P(replace);
- replace_len = Z_STRLEN_P(replace);
- }
-
- /* For each entry in the search array, get the entry */
- while (zend_hash_get_current_data(Z_ARRVAL_P(search), (void **) &search_entry) == SUCCESS) {
- /* Make sure we're dealing with strings. */
- SEPARATE_ZVAL(search_entry);
- convert_to_string(*search_entry);
- if (Z_STRLEN_PP(search_entry) == 0) {
- zend_hash_move_forward(Z_ARRVAL_P(search));
- if (Z_TYPE_P(replace) == IS_ARRAY) {
- zend_hash_move_forward(Z_ARRVAL_P(replace));
- }
- continue;
- }
-
- /* If replace is an array. */
- if (Z_TYPE_P(replace) == IS_ARRAY) {
- /* Get current entry */
- if (zend_hash_get_current_data(Z_ARRVAL_P(replace), (void **)&replace_entry) == SUCCESS) {
- /* Make sure we're dealing with strings. */
- convert_to_string_ex(replace_entry);
-
- /* Set replacement value to the one we got from array */
- replace_value = Z_STRVAL_PP(replace_entry);
- replace_len = Z_STRLEN_PP(replace_entry);
-
- zend_hash_move_forward(Z_ARRVAL_P(replace));
- } else {
- /* We've run out of replacement strings, so use an empty one. */
- replace_value = "";
- replace_len = 0;
- }
- }
-
- if (Z_STRLEN_PP(search_entry) == 1) {
- php_char_to_str_ex(Z_STRVAL_P(result),
- Z_STRLEN_P(result),
- Z_STRVAL_PP(search_entry)[0],
- replace_value,
- replace_len,
- &temp_result,
- case_sensitivity,
- replace_count);
- } else if (Z_STRLEN_PP(search_entry) > 1) {
- Z_STRVAL(temp_result) = php_str_to_str_ex(Z_STRVAL_P(result), Z_STRLEN_P(result),
- Z_STRVAL_PP(search_entry), Z_STRLEN_PP(search_entry),
- replace_value, replace_len, &Z_STRLEN(temp_result), case_sensitivity, replace_count);
- }
-
- efree(Z_STRVAL_P(result));
- Z_STRVAL_P(result) = Z_STRVAL(temp_result);
- Z_STRLEN_P(result) = Z_STRLEN(temp_result);
-
- if (Z_STRLEN_P(result) == 0) {
- return;
- }
-
- zend_hash_move_forward(Z_ARRVAL_P(search));
- }
- } else {
- if (Z_STRLEN_P(search) == 1) {
- php_char_to_str_ex(Z_STRVAL_PP(subject),
- Z_STRLEN_PP(subject),
- Z_STRVAL_P(search)[0],
- Z_STRVAL_P(replace),
- Z_STRLEN_P(replace),
- result,
- case_sensitivity,
- replace_count);
- } else if (Z_STRLEN_P(search) > 1) {
- Z_STRVAL_P(result) = php_str_to_str_ex(Z_STRVAL_PP(subject), Z_STRLEN_PP(subject),
- Z_STRVAL_P(search), Z_STRLEN_P(search),
- Z_STRVAL_P(replace), Z_STRLEN_P(replace), &Z_STRLEN_P(result), case_sensitivity, replace_count);
- } else {
- *result = **subject;
- zval_copy_ctor(result);
- INIT_PZVAL(result);
- }
- }
-}
-/* }}} */
-
-/* {{{ php_str_replace_common
- */
-static void php_str_replace_common(INTERNAL_FUNCTION_PARAMETERS, int case_sensitivity)
-{
- zval **subject, **search, **replace, **subject_entry, **zcount;
- zval *result;
- char *string_key;
- uint string_key_len;
- ulong num_key;
- int count = 0;
- int argc = ZEND_NUM_ARGS();
-
- if (argc < 3 || argc > 4 ||
- zend_get_parameters_ex(argc, &search, &replace, &subject, &zcount) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- SEPARATE_ZVAL(search);
- SEPARATE_ZVAL(replace);
- SEPARATE_ZVAL(subject);
-
- /* Make sure we're dealing with strings and do the replacement. */
- if (Z_TYPE_PP(search) != IS_ARRAY) {
- convert_to_string_ex(search);
- convert_to_string_ex(replace);
- } else if (Z_TYPE_PP(replace) != IS_ARRAY) {
- convert_to_string_ex(replace);
- }
-
- /* if subject is an array */
- if (Z_TYPE_PP(subject) == IS_ARRAY) {
- array_init(return_value);
- zend_hash_internal_pointer_reset(Z_ARRVAL_PP(subject));
-
- /* For each subject entry, convert it to string, then perform replacement
- and add the result to the return_value array. */
- while (zend_hash_get_current_data(Z_ARRVAL_PP(subject), (void **)&subject_entry) == SUCCESS) {
- if (Z_TYPE_PP(subject_entry) != IS_ARRAY && Z_TYPE_PP(subject_entry) != IS_OBJECT) {
- MAKE_STD_ZVAL(result);
- SEPARATE_ZVAL(subject_entry);
- php_str_replace_in_subject(*search, *replace, subject_entry, result, case_sensitivity, (argc > 3) ? &count : NULL);
- } else {
- ALLOC_ZVAL(result);
- ZVAL_ADDREF(*subject_entry);
- COPY_PZVAL_TO_ZVAL(*result, *subject_entry);
- }
- /* Add to return array */
- switch (zend_hash_get_current_key_ex(Z_ARRVAL_PP(subject), &string_key,
- &string_key_len, &num_key, 0, NULL)) {
- case HASH_KEY_IS_STRING:
- add_assoc_zval_ex(return_value, string_key, string_key_len, result);
- break;
-
- case HASH_KEY_IS_LONG:
- add_index_zval(return_value, num_key, result);
- break;
- }
-
- zend_hash_move_forward(Z_ARRVAL_PP(subject));
- }
- } else { /* if subject is not an array */
- php_str_replace_in_subject(*search, *replace, subject, return_value, case_sensitivity, (argc > 3) ? &count : NULL);
- }
- if (argc > 3) {
- zval_dtor(*zcount);
- ZVAL_LONG(*zcount, count);
- }
-}
-/* }}} */
-
-/* {{{ proto mixed str_replace(mixed search, mixed replace, mixed subject [, int &replace_count])
- Replaces all occurrences of search in haystack with replace */
-PHP_FUNCTION(str_replace)
-{
- php_str_replace_common(INTERNAL_FUNCTION_PARAM_PASSTHRU, 1);
-}
-/* }}} */
-
-/* {{{ proto mixed str_ireplace(mixed search, mixed replace, mixed subject [, int &replace_count])
- Replaces all occurrences of search in haystack with replace / case-insensitive */
-PHP_FUNCTION(str_ireplace)
-{
- php_str_replace_common(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0);
-}
-/* }}} */
-
-/* {{{ php_hebrev
- *
- * Converts Logical Hebrew text (Hebrew Windows style) to Visual text
- * Cheers/complaints/flames - Zeev Suraski <zeev@php.net>
- */
-static void php_hebrev(INTERNAL_FUNCTION_PARAMETERS, int convert_newlines)
-{
- zval **str, **max_chars_per_line;
- char *heb_str, *tmp, *target, *broken_str;
- int block_start, block_end, block_type, block_length, i;
- long max_chars=0;
- int begin, end, char_count, orig_begin;
-
-
- switch (ZEND_NUM_ARGS()) {
- case 1:
- if (zend_get_parameters_ex(1, &str) == FAILURE) {
- RETURN_FALSE;
- }
- break;
- case 2:
- if (zend_get_parameters_ex(2, &str, &max_chars_per_line) == FAILURE) {
- RETURN_FALSE;
- }
- convert_to_long_ex(max_chars_per_line);
- max_chars = Z_LVAL_PP(max_chars_per_line);
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
-
- convert_to_string_ex(str);
-
- if (Z_STRLEN_PP(str) == 0) {
- RETURN_FALSE;
- }
-
- tmp = Z_STRVAL_PP(str);
- block_start=block_end=0;
-
- heb_str = (char *) emalloc(Z_STRLEN_PP(str)+1);
- target = heb_str+Z_STRLEN_PP(str);
- *target = 0;
- target--;
-
- block_length=0;
-
- if (isheb(*tmp)) {
- block_type = _HEB_BLOCK_TYPE_HEB;
- } else {
- block_type = _HEB_BLOCK_TYPE_ENG;
- }
-
- do {
- if (block_type == _HEB_BLOCK_TYPE_HEB) {
- while ((isheb((int)*(tmp+1)) || _isblank((int)*(tmp+1)) || ispunct((int)*(tmp+1)) || (int)*(tmp+1)=='\n' ) && block_end<Z_STRLEN_PP(str)-1) {
- tmp++;
- block_end++;
- block_length++;
- }
- for (i = block_start; i<= block_end; i++) {
- *target = Z_STRVAL_PP(str)[i];
- switch (*target) {
- case '(':
- *target = ')';
- break;
- case ')':
- *target = '(';
- break;
- case '[':
- *target = ']';
- break;
- case ']':
- *target = '[';
- break;
- case '{':
- *target = '}';
- break;
- case '}':
- *target = '{';
- break;
- case '<':
- *target = '>';
- break;
- case '>':
- *target = '<';
- break;
- case '\\':
- *target = '/';
- break;
- case '/':
- *target = '\\';
- break;
- default:
- break;
- }
- target--;
- }
- block_type = _HEB_BLOCK_TYPE_ENG;
- } else {
- while (!isheb(*(tmp+1)) && (int)*(tmp+1)!='\n' && block_end < Z_STRLEN_PP(str)-1) {
- tmp++;
- block_end++;
- block_length++;
- }
- while ((_isblank((int)*tmp) || ispunct((int)*tmp)) && *tmp!='/' && *tmp!='-' && block_end > block_start) {
- tmp--;
- block_end--;
- }
- for (i = block_end; i >= block_start; i--) {
- *target = Z_STRVAL_PP(str)[i];
- target--;
- }
- block_type = _HEB_BLOCK_TYPE_HEB;
- }
- block_start=block_end+1;
- } while (block_end < Z_STRLEN_PP(str)-1);
-
-
- broken_str = (char *) emalloc(Z_STRLEN_PP(str)+1);
- begin=end=Z_STRLEN_PP(str)-1;
- target = broken_str;
-
- while (1) {
- char_count=0;
- while ((!max_chars || char_count < max_chars) && begin > 0) {
- char_count++;
- begin--;
- if (begin <= 0 || _isnewline(heb_str[begin])) {
- while (begin > 0 && _isnewline(heb_str[begin-1])) {
- begin--;
- char_count++;
- }
- break;
- }
- }
- if (char_count == max_chars) { /* try to avoid breaking words */
- int new_char_count=char_count, new_begin=begin;
-
- while (new_char_count > 0) {
- if (_isblank(heb_str[new_begin]) || _isnewline(heb_str[new_begin])) {
- break;
- }
- new_begin++;
- new_char_count--;
- }
- if (new_char_count > 0) {
- char_count=new_char_count;
- begin=new_begin;
- }
- }
- orig_begin=begin;
-
- if (_isblank(heb_str[begin])) {
- heb_str[begin]='\n';
- }
- while (begin <= end && _isnewline(heb_str[begin])) { /* skip leading newlines */
- begin++;
- }
- for (i = begin; i <= end; i++) { /* copy content */
- *target = heb_str[i];
- target++;
- }
- for (i = orig_begin; i <= end && _isnewline(heb_str[i]); i++) {
- *target = heb_str[i];
- target++;
- }
- begin=orig_begin;
-
- if (begin <= 0) {
- *target = 0;
- break;
- }
- begin--;
- end=begin;
- }
- efree(heb_str);
-
- if (convert_newlines) {
- php_char_to_str(broken_str, Z_STRLEN_PP(str),'\n', "<br />\n", 7, return_value);
- efree(broken_str);
- } else {
- Z_STRVAL_P(return_value) = broken_str;
- Z_STRLEN_P(return_value) = Z_STRLEN_PP(str);
- Z_TYPE_P(return_value) = IS_STRING;
- }
-}
-/* }}} */
-
-/* {{{ proto string hebrev(string str [, int max_chars_per_line])
- Converts logical Hebrew text to visual text */
-PHP_FUNCTION(hebrev)
-{
- php_hebrev(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0);
-}
-/* }}} */
-
-/* {{{ proto string hebrevc(string str [, int max_chars_per_line])
- Converts logical Hebrew text to visual text with newline conversion */
-PHP_FUNCTION(hebrevc)
-{
- php_hebrev(INTERNAL_FUNCTION_PARAM_PASSTHRU, 1);
-}
-/* }}} */
-
-
-/* {{{ proto string nl2br(string str)
- Converts newlines to HTML line breaks */
-PHP_FUNCTION(nl2br)
-{
- /* in brief this inserts <br /> before matched regexp \n\r?|\r\n? */
- zval **zstr;
- char *tmp, *str;
- int new_length;
- char *end, *target;
- int repl_cnt = 0;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &zstr) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_string_ex(zstr);
-
- str = Z_STRVAL_PP(zstr);
- end = str + Z_STRLEN_PP(zstr);
-
- /* it is really faster to scan twice and allocate mem once insted scanning once
- and constantly reallocing */
- while (str < end) {
- if (*str == '\r') {
- if (*(str+1) == '\n') {
- str++;
- }
- repl_cnt++;
- } else if (*str == '\n') {
- if (*(str+1) == '\r') {
- str++;
- }
- repl_cnt++;
- }
-
- str++;
- }
-
- if (repl_cnt == 0) {
- RETURN_STRINGL(Z_STRVAL_PP(zstr), Z_STRLEN_PP(zstr), 1);
- }
-
- new_length = Z_STRLEN_PP(zstr) + repl_cnt * (sizeof("<br />") - 1);
- tmp = target = emalloc(new_length + 1);
-
- str = Z_STRVAL_PP(zstr);
-
- while (str < end) {
- switch (*str) {
- case '\r':
- case '\n':
- *target++ = '<';
- *target++ = 'b';
- *target++ = 'r';
- *target++ = ' ';
- *target++ = '/';
- *target++ = '>';
-
- if ((*str == '\r' && *(str+1) == '\n') || (*str == '\n' && *(str+1) == '\r')) {
- *target++ = *str++;
- }
- /* lack of a break; is intentional */
- default:
- *target++ = *str;
- }
-
- str++;
- }
-
- *target = '\0';
-
- RETURN_STRINGL(tmp, new_length, 0);
-}
-/* }}} */
-
-
-/* {{{ proto string strip_tags(string str [, string allowable_tags])
- Strips HTML and PHP tags from a string */
-PHP_FUNCTION(strip_tags)
-{
- char *buf;
- zval **str, **allow=NULL;
- char *allowed_tags=NULL;
- int allowed_tags_len=0;
- size_t retval_len;
-
- switch (ZEND_NUM_ARGS()) {
- case 1:
- if (zend_get_parameters_ex(1, &str) == FAILURE) {
- RETURN_FALSE;
- }
- break;
- case 2:
- if (zend_get_parameters_ex(2, &str, &allow) == FAILURE) {
- RETURN_FALSE;
- }
- convert_to_string_ex(allow);
- allowed_tags = Z_STRVAL_PP(allow);
- allowed_tags_len = Z_STRLEN_PP(allow);
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
- convert_to_string_ex(str);
- buf = estrndup(Z_STRVAL_PP(str), Z_STRLEN_PP(str));
- retval_len = php_strip_tags(buf, Z_STRLEN_PP(str), NULL, allowed_tags, allowed_tags_len);
- RETURN_STRINGL(buf, retval_len, 0);
-}
-/* }}} */
-
-/* {{{ proto string setlocale(mixed category, string locale [, string ...])
- Set locale information */
-PHP_FUNCTION(setlocale)
-{
- pval ***args = (pval ***) safe_emalloc(sizeof(pval **), ZEND_NUM_ARGS(), 0);
- zval **pcategory, **plocale;
- int i, cat, n_args=ZEND_NUM_ARGS();
- char *loc, *retval;
-
- if (zend_get_parameters_array_ex(n_args, args) == FAILURE || n_args < 2) {
- efree(args);
- WRONG_PARAM_COUNT;
- }
-#ifdef HAVE_SETLOCALE
- pcategory = args[0];
- if (Z_TYPE_PP(pcategory) == IS_LONG) {
- convert_to_long_ex(pcategory);
- cat = Z_LVAL_PP(pcategory);
- } else { /* FIXME: The following behaviour should be removed. */
- char *category;
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Passing locale category name as string is deprecated. Use the LC_* -constants instead.");
- convert_to_string_ex(pcategory);
- category = Z_STRVAL_P(*pcategory);
-
- if (!strcasecmp ("LC_ALL", category))
- cat = LC_ALL;
- else if (!strcasecmp ("LC_COLLATE", category))
- cat = LC_COLLATE;
- else if (!strcasecmp ("LC_CTYPE", category))
- cat = LC_CTYPE;
-#ifdef LC_MESSAGES
- else if (!strcasecmp ("LC_MESSAGES", category))
- cat = LC_MESSAGES;
-#endif
- else if (!strcasecmp ("LC_MONETARY", category))
- cat = LC_MONETARY;
- else if (!strcasecmp ("LC_NUMERIC", category))
- cat = LC_NUMERIC;
- else if (!strcasecmp ("LC_TIME", category))
- cat = LC_TIME;
- else {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid locale category name %s, must be one of LC_ALL, LC_COLLATE, LC_CTYPE, LC_MONETARY, LC_NUMERIC, or LC_TIME.", category);
- efree(args);
- RETURN_FALSE;
- }
- }
-
- if (Z_TYPE_PP(args[1]) == IS_ARRAY) {
- zend_hash_internal_pointer_reset(Z_ARRVAL_PP(args[1]));
- i=0; /* not needed in this case: only kill a compiler warning */
- } else {
- i=1;
- }
- while (1) {
- if (Z_TYPE_PP(args[1]) == IS_ARRAY) {
- if (!zend_hash_num_elements(Z_ARRVAL_PP(args[1]))) {
- break;
- }
- zend_hash_get_current_data(Z_ARRVAL_PP(args[1]),(void **)&plocale);
- } else {
- plocale = args[i];
- }
-
- convert_to_string_ex(plocale);
-
- if (!strcmp ("0", Z_STRVAL_PP(plocale))) {
- loc = NULL;
- } else {
- loc = Z_STRVAL_PP(plocale);
- }
-
- retval = setlocale (cat, loc);
- if (retval) {
- /* Remember if locale was changed */
- if (loc) {
- STR_FREE(BG(locale_string));
- BG(locale_string) = estrdup(retval);
- }
-
- efree(args);
- RETVAL_STRING(retval, 1);
-
- if (cat == LC_NUMERIC || cat == LC_ALL) {
- struct lconv lc;
- localeconv_r(&lc);
-
- EG(float_separator)[0] = (lc.decimal_point)[0];
-
- if ((lc.decimal_point)[0] != '.') {
- /* set locale back to C */
- setlocale(LC_NUMERIC, "C");
- }
- }
-
- return;
- }
-
- if (Z_TYPE_PP(args[1]) == IS_ARRAY) {
- if (zend_hash_move_forward(Z_ARRVAL_PP(args[1])) == FAILURE) break;
- } else {
- if (++i >= n_args) break;
- }
- }
-
-#endif
- efree(args);
-
- RETURN_FALSE;
-}
-/* }}} */
-
-/* {{{ proto void parse_str(string encoded_string [, array result])
- Parses GET/POST/COOKIE data and sets global variables */
-PHP_FUNCTION(parse_str)
-{
- zval **arg;
- zval **arrayArg;
- zval *sarg;
- char *res = NULL;
- int argCount;
- int old_rg;
-
- argCount = ZEND_NUM_ARGS();
- if (argCount < 1 || argCount > 2 || zend_get_parameters_ex(argCount, &arg, &arrayArg) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_string_ex(arg);
- sarg = *arg;
- if (Z_STRVAL_P(sarg) && *Z_STRVAL_P(sarg)) {
- res = estrndup(Z_STRVAL_P(sarg), Z_STRLEN_P(sarg));
- }
-
- old_rg = PG(register_globals);
- if (argCount == 1) {
- PG(register_globals) = 1;
- sapi_module.treat_data(PARSE_STRING, res, NULL TSRMLS_CC);
- } else {
- PG(register_globals) = 0;
- /* Clear out the array that was passed in. */
- zval_dtor(*arrayArg);
- array_init(*arrayArg);
-
- sapi_module.treat_data(PARSE_STRING, res, *arrayArg TSRMLS_CC);
- }
- PG(register_globals) = old_rg;
-}
-/* }}} */
-
-#define PHP_TAG_BUF_SIZE 1023
-
-/* {{{ php_tag_find
- *
- * Check if tag is in a set of tags
- *
- * states:
- *
- * 0 start tag
- * 1 first non-whitespace char seen
- */
-int php_tag_find(char *tag, int len, char *set) {
- char c, *n, *t;
- int state=0, done=0;
- char *norm = emalloc(len+1);
-
- n = norm;
- t = tag;
- c = tolower(*t);
- /*
- normalize the tag removing leading and trailing whitespace
- and turn any <a whatever...> into just <a> and any </tag>
- into <tag>
- */
- if (!len) {
- return 0;
- }
- while (!done) {
- switch (c) {
- case '<':
- *(n++) = c;
- break;
- case '>':
- done =1;
- break;
- default:
- if (!isspace((int)c)) {
- if (state == 0) {
- state=1;
- if (c != '/')
- *(n++) = c;
- } else {
- *(n++) = c;
- }
- } else {
- if (state == 1)
- done=1;
- }
- break;
- }
- c = tolower(*(++t));
- }
- *(n++) = '>';
- *n = '\0';
- if (strstr(set, norm)) {
- done=1;
- } else {
- done=0;
- }
- efree(norm);
- return done;
-}
-/* }}} */
-
-/* {{{ php_strip_tags
-
- A simple little state-machine to strip out html and php tags
-
- State 0 is the output state, State 1 means we are inside a
- normal html tag and state 2 means we are inside a php tag.
-
- The state variable is passed in to allow a function like fgetss
- to maintain state across calls to the function.
-
- lc holds the last significant character read and br is a bracket
- counter.
-
- When an allow string is passed in we keep track of the string
- in state 1 and when the tag is closed check it against the
- allow string to see if we should allow it.
-
- swm: Added ability to strip <?xml tags without assuming it PHP
- code.
-*/
-PHPAPI size_t php_strip_tags(char *rbuf, int len, int *stateptr, char *allow, int allow_len)
-{
- char *tbuf, *buf, *p, *tp, *rp, c, lc;
- int br, i=0, depth=0;
- int state = 0;
-
- if (stateptr)
- state = *stateptr;
-
- buf = estrndup(rbuf, len);
- c = *buf;
- lc = '\0';
- p = buf;
- rp = rbuf;
- br = 0;
- if (allow) {
- php_strtolower(allow, allow_len);
- tbuf = emalloc(PHP_TAG_BUF_SIZE+1);
- tp = tbuf;
- } else {
- tbuf = tp = NULL;
- }
-
- while (i < len) {
- switch (c) {
- case '\0':
- break;
- case '<':
- if (isspace(*(p + 1))) {
- goto reg_char;
- }
- if (state == 0) {
- lc = '<';
- state = 1;
- if (allow) {
- tp = ((tp-tbuf) >= PHP_TAG_BUF_SIZE ? tbuf: tp);
- *(tp++) = '<';
- }
- } else if (state == 1) {
- depth++;
- }
- break;
-
- case '(':
- if (state == 2) {
- if (lc != '"' && lc != '\'') {
- lc = '(';
- br++;
- }
- } else if (allow && state == 1) {
- tp = ((tp-tbuf) >= PHP_TAG_BUF_SIZE ? tbuf: tp);
- *(tp++) = c;
- } else if (state == 0) {
- *(rp++) = c;
- }
- break;
-
- case ')':
- if (state == 2) {
- if (lc != '"' && lc != '\'') {
- lc = ')';
- br--;
- }
- } else if (allow && state == 1) {
- tp = ((tp-tbuf) >= PHP_TAG_BUF_SIZE ? tbuf: tp);
- *(tp++) = c;
- } else if (state == 0) {
- *(rp++) = c;
- }
- break;
-
- case '>':
- if (depth) {
- depth--;
- break;
- }
-
- switch (state) {
- case 1: /* HTML/XML */
- lc = '>';
- state = 0;
- if (allow) {
- tp = ((tp-tbuf) >= PHP_TAG_BUF_SIZE ? tbuf: tp);
- *(tp++) = '>';
- *tp='\0';
- if (php_tag_find(tbuf, tp-tbuf, allow)) {
- memcpy(rp, tbuf, tp-tbuf);
- rp += tp-tbuf;
- }
- tp = tbuf;
- }
- break;
-
- case 2: /* PHP */
- if (!br && lc != '\"' && *(p-1) == '?') {
- state = 0;
- tp = tbuf;
- }
- break;
-
- case 3:
- state = 0;
- tp = tbuf;
- break;
-
- case 4: /* JavaScript/CSS/etc... */
- if (p >= buf + 2 && *(p-1) == '-' && *(p-2) == '-') {
- state = 0;
- tp = tbuf;
- }
- break;
-
- default:
- *(rp++) = c;
- break;
- }
- break;
-
- case '"':
- case '\'':
- if (state == 2 && *(p-1) != '\\') {
- if (lc == c) {
- lc = '\0';
- } else if (lc != '\\') {
- lc = c;
- }
- } else if (state == 0) {
- *(rp++) = c;
- } else if (allow && state == 1) {
- tp = ((tp-tbuf) >= PHP_TAG_BUF_SIZE ? tbuf: tp);
- *(tp++) = c;
- }
- break;
-
- case '!':
- /* JavaScript & Other HTML scripting languages */
- if (state == 1 && *(p-1) == '<') {
- state = 3;
- lc = c;
- } else {
- if (state == 0) {
- *(rp++) = c;
- } else if (allow && state == 1) {
- tp = ((tp-tbuf) >= PHP_TAG_BUF_SIZE ? tbuf: tp);
- *(tp++) = c;
- }
- }
- break;
-
- case '-':
- if (state == 3 && p >= buf + 2 && *(p-1) == '-' && *(p-2) == '!') {
- state = 4;
- } else {
- goto reg_char;
- }
- break;
-
- case '?':
-
- if (state == 1 && *(p-1) == '<') {
- br=0;
- state=2;
- break;
- }
-
- case 'E':
- case 'e':
- /* !DOCTYPE exception */
- if (state==3 && p > buf+6
- && tolower(*(p-1)) == 'p'
- && tolower(*(p-2)) == 'y'
- && tolower(*(p-3)) == 't'
- && tolower(*(p-4)) == 'c'
- && tolower(*(p-5)) == 'o'
- && tolower(*(p-6)) == 'd') {
- state = 1;
- break;
- }
- /* fall-through */
-
- 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') {
- state = 1;
- break;
- }
-
- /* fall-through */
- default:
-reg_char:
- if (state == 0) {
- *(rp++) = c;
- } else if (allow && state == 1) {
- tp = ((tp-tbuf) >= PHP_TAG_BUF_SIZE ? tbuf: tp);
- *(tp++) = c;
- }
- break;
- }
- c = *(++p);
- i++;
- }
- if (rp < rbuf + len) {
- *rp = '\0';
- }
- efree(buf);
- if (allow)
- efree(tbuf);
- if (stateptr)
- *stateptr = state;
-
- return (size_t)(rp - rbuf);
-}
-/* }}} */
-
-/* {{{ proto string str_repeat(string input, int mult)
- Returns the input string repeat mult times */
-PHP_FUNCTION(str_repeat)
-{
- zval **input_str; /* Input string */
- zval **mult; /* Multiplier */
- char *result; /* Resulting string */
- int result_len; /* Length of the resulting string */
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &input_str, &mult) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- /* Make sure we're dealing with proper types */
- convert_to_string_ex(input_str);
- convert_to_long_ex(mult);
-
- if (Z_LVAL_PP(mult) < 0) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Second argument has to be greater than or equal to 0.");
- return;
- }
-
- /* Don't waste our time if it's empty */
- if (Z_STRLEN_PP(input_str) == 0)
- RETURN_STRINGL("", 0, 1);
-
- /* ... or if the multiplier is zero */
- if (Z_LVAL_PP(mult) == 0)
- RETURN_STRINGL("", 0, 1);
-
- /* Initialize the result string */
- result_len = Z_STRLEN_PP(input_str) * Z_LVAL_PP(mult);
- if (result_len < 1 || result_len > 2147483647) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "You may not create strings longer then 2147483647 bytes");
- RETURN_FALSE;
- }
- result = (char *)emalloc(result_len + 1);
-
- /* Heavy optimization for situations where input string is 1 byte long */
- if (Z_STRLEN_PP(input_str) == 1) {
- memset(result, *(Z_STRVAL_PP(input_str)), Z_LVAL_PP(mult));
- } else {
- char *s, *e, *ee;
- int l=0;
- memcpy(result, Z_STRVAL_PP(input_str), Z_STRLEN_PP(input_str));
- s = result;
- e = result + Z_STRLEN_PP(input_str);
- ee = result + result_len;
-
- while (e<ee) {
- l = (e-s) < (ee-e) ? (e-s) : (ee-e);
- memmove(e, s, l);
- e += l;
- }
- }
-
- result[result_len] = '\0';
-
- RETURN_STRINGL(result, result_len, 0);
-}
-/* }}} */
-
-/* {{{ proto mixed count_chars(string input [, int mode])
- Returns info about what characters are used in input */
-PHP_FUNCTION(count_chars)
-{
- zval **input, **mode;
- int chars[256];
- int ac=ZEND_NUM_ARGS();
- int mymode=0;
- unsigned char *buf;
- int len, inx;
- char retstr[256];
- int retlen=0;
-
- if (ac < 1 || ac > 2 || zend_get_parameters_ex(ac, &input, &mode) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_string_ex(input);
-
- if (ac == 2) {
- convert_to_long_ex(mode);
- mymode = Z_LVAL_PP(mode);
-
- if (mymode < 0 || mymode > 4) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unknown mode.");
- RETURN_FALSE;
- }
- }
-
- len = Z_STRLEN_PP(input);
- buf = (unsigned char *) Z_STRVAL_PP(input);
- memset((void*) chars, 0, sizeof(chars));
-
- while (len > 0) {
- chars[*buf]++;
- buf++;
- len--;
- }
-
- if (mymode < 3) {
- array_init(return_value);
- }
-
- for (inx = 0; inx < 256; inx++) {
- switch (mymode) {
- case 0:
- add_index_long(return_value, inx, chars[inx]);
- break;
- case 1:
- if (chars[inx] != 0) {
- add_index_long(return_value, inx, chars[inx]);
- }
- break;
- case 2:
- if (chars[inx] == 0) {
- add_index_long(return_value, inx, chars[inx]);
- }
- break;
- case 3:
- if (chars[inx] != 0) {
- retstr[retlen++] = inx;
- }
- break;
- case 4:
- if (chars[inx] == 0) {
- retstr[retlen++] = inx;
- }
- break;
- }
- }
-
- if (mymode >= 3 && mymode <= 4) {
- RETURN_STRINGL(retstr, retlen, 1);
- }
-}
-/* }}} */
-
-/* {{{ php_strnatcmp
- */
-static void php_strnatcmp(INTERNAL_FUNCTION_PARAMETERS, int fold_case)
-{
- zval **s1, **s2;
-
- if (ZEND_NUM_ARGS()!=2 || zend_get_parameters_ex(2, &s1, &s2) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_string_ex(s1);
- convert_to_string_ex(s2);
-
- RETURN_LONG(strnatcmp_ex(Z_STRVAL_PP(s1), Z_STRLEN_PP(s1),
- Z_STRVAL_PP(s2), Z_STRLEN_PP(s2),
- fold_case));
-}
-/* }}} */
-
-/* {{{ proto int strnatcmp(string s1, string s2)
- Returns the result of string comparison using 'natural' algorithm */
-PHP_FUNCTION(strnatcmp)
-{
- php_strnatcmp(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0);
-}
-/* }}} */
-
-/* {{{ proto array localeconv(void)
- Returns numeric formatting information based on the current locale */
-PHP_FUNCTION(localeconv)
-{
- zval *grouping, *mon_grouping;
- int len, i;
-
- /* We don't need no stinkin' parameters... */
- if (ZEND_NUM_ARGS() > 0) {
- WRONG_PARAM_COUNT;
- }
-
- MAKE_STD_ZVAL(grouping);
- MAKE_STD_ZVAL(mon_grouping);
-
- array_init(return_value);
- array_init(grouping);
- array_init(mon_grouping);
-
-#ifdef HAVE_LOCALECONV
- {
- struct lconv currlocdata;
-
- localeconv_r( &currlocdata );
-
- /* Grab the grouping data out of the array */
- len = strlen(currlocdata.grouping);
-
- for (i = 0; i < len; i++) {
- add_index_long(grouping, i, currlocdata.grouping[i]);
- }
-
- /* Grab the monetary grouping data out of the array */
- len = strlen(currlocdata.mon_grouping);
-
- for (i = 0; i < len; i++) {
- add_index_long(mon_grouping, i, currlocdata.mon_grouping[i]);
- }
-
- add_assoc_string(return_value, "decimal_point", currlocdata.decimal_point, 1);
- add_assoc_string(return_value, "thousands_sep", currlocdata.thousands_sep, 1);
- add_assoc_string(return_value, "int_curr_symbol", currlocdata.int_curr_symbol, 1);
- add_assoc_string(return_value, "currency_symbol", currlocdata.currency_symbol, 1);
- add_assoc_string(return_value, "mon_decimal_point", currlocdata.mon_decimal_point, 1);
- add_assoc_string(return_value, "mon_thousands_sep", currlocdata.mon_thousands_sep, 1);
- add_assoc_string(return_value, "positive_sign", currlocdata.positive_sign, 1);
- add_assoc_string(return_value, "negative_sign", currlocdata.negative_sign, 1);
- add_assoc_long( return_value, "int_frac_digits", currlocdata.int_frac_digits );
- add_assoc_long( return_value, "frac_digits", currlocdata.frac_digits );
- add_assoc_long( return_value, "p_cs_precedes", currlocdata.p_cs_precedes );
- add_assoc_long( return_value, "p_sep_by_space", currlocdata.p_sep_by_space );
- add_assoc_long( return_value, "n_cs_precedes", currlocdata.n_cs_precedes );
- add_assoc_long( return_value, "n_sep_by_space", currlocdata.n_sep_by_space );
- add_assoc_long( return_value, "p_sign_posn", currlocdata.p_sign_posn );
- add_assoc_long( return_value, "n_sign_posn", currlocdata.n_sign_posn );
- }
-#else
- /* Ok, it doesn't look like we have locale info floating around, so I guess it
- wouldn't hurt to just go ahead and return the POSIX locale information? */
-
- add_index_long(grouping, 0, -1);
- add_index_long(mon_grouping, 0, -1);
-
- add_assoc_string(return_value, "decimal_point", "\x2E", 1);
- add_assoc_string(return_value, "thousands_sep", "", 1);
- add_assoc_string(return_value, "int_curr_symbol", "", 1);
- add_assoc_string(return_value, "currency_symbol", "", 1);
- add_assoc_string(return_value, "mon_decimal_point", "\x2E", 1);
- add_assoc_string(return_value, "mon_thousands_sep", "", 1);
- add_assoc_string(return_value, "positive_sign", "", 1);
- add_assoc_string(return_value, "negative_sign", "", 1);
- add_assoc_long( return_value, "int_frac_digits", CHAR_MAX );
- add_assoc_long( return_value, "frac_digits", CHAR_MAX );
- add_assoc_long( return_value, "p_cs_precedes", CHAR_MAX );
- add_assoc_long( return_value, "p_sep_by_space", CHAR_MAX );
- add_assoc_long( return_value, "n_cs_precedes", CHAR_MAX );
- add_assoc_long( return_value, "n_sep_by_space", CHAR_MAX );
- add_assoc_long( return_value, "p_sign_posn", CHAR_MAX );
- add_assoc_long( return_value, "n_sign_posn", CHAR_MAX );
-#endif
-
- zend_hash_update(Z_ARRVAL_P(return_value), "grouping", 9, &grouping, sizeof(zval *), NULL);
- zend_hash_update(Z_ARRVAL_P(return_value), "mon_grouping", 13, &mon_grouping, sizeof(zval *), NULL);
-}
-/* }}} */
-
-/* {{{ proto int strnatcasecmp(string s1, string s2)
- Returns the result of case-insensitive string comparison using 'natural' algorithm */
-PHP_FUNCTION(strnatcasecmp)
-{
- php_strnatcmp(INTERNAL_FUNCTION_PARAM_PASSTHRU, 1);
-}
-/* }}} */
-
-/* {{{ proto int substr_count(string haystack, string needle)
- Returns the number of times a substring occurs in the string */
-PHP_FUNCTION(substr_count)
-{
- zval **haystack, **needle;
- int count = 0;
- char *p, *endp, cmp;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &haystack, &needle) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_string_ex(haystack);
- convert_to_string_ex(needle);
-
- if (Z_STRLEN_PP(needle) == 0) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Empty substring.");
- RETURN_FALSE;
- }
-
- p = Z_STRVAL_PP(haystack);
- endp = p + Z_STRLEN_PP(haystack);
-
- if (Z_STRLEN_PP(needle) == 1) {
- cmp = Z_STRVAL_PP(needle)[0];
-
- while (p < endp) {
- if (*(p++) == cmp) {
- count++;
- }
- }
- } else {
- while ((p = php_memnstr(p, Z_STRVAL_PP(needle), Z_STRLEN_PP(needle), endp))) {
- p += Z_STRLEN_PP(needle);
- count++;
- }
- }
-
- RETURN_LONG(count);
-}
-/* }}} */
-
-/* {{{ proto string str_pad(string input, int pad_length [, string pad_string [, int pad_type]])
- Returns input string padded on the left or right to specified length with pad_string */
-PHP_FUNCTION(str_pad)
-{
- /* Input arguments */
- zval **input, /* Input string */
- **pad_length, /* Length to pad to */
- **pad_string, /* Padding string */
- **pad_type; /* Padding type (left/right/both) */
-
- /* Helper variables */
- int num_pad_chars; /* Number of padding characters (total - input size) */
- char *result = NULL; /* Resulting string */
- int result_len = 0; /* Length of the resulting string */
- char *pad_str_val = " "; /* Pointer to padding string */
- int pad_str_len = 1; /* Length of the padding string */
- int pad_type_val = STR_PAD_RIGHT; /* The padding type value */
- int i, left_pad=0, right_pad=0;
-
-
- if (ZEND_NUM_ARGS() < 2 || ZEND_NUM_ARGS() > 4 ||
- zend_get_parameters_ex(ZEND_NUM_ARGS(), &input, &pad_length, &pad_string, &pad_type) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- /* Perform initial conversion to expected data types. */
- convert_to_string_ex(input);
- convert_to_long_ex(pad_length);
-
- num_pad_chars = Z_LVAL_PP(pad_length) - Z_STRLEN_PP(input);
-
- /* If resulting string turns out to be shorter than input string,
- we simply copy the input and return. */
- if (num_pad_chars < 0) {
- *return_value = **input;
- zval_copy_ctor(return_value);
- return;
- }
-
- /* Setup the padding string values if specified. */
- if (ZEND_NUM_ARGS() > 2) {
- convert_to_string_ex(pad_string);
- if (Z_STRLEN_PP(pad_string) == 0) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Padding string cannot be empty.");
- return;
- }
- pad_str_val = Z_STRVAL_PP(pad_string);
- pad_str_len = Z_STRLEN_PP(pad_string);
-
- if (ZEND_NUM_ARGS() > 3) {
- convert_to_long_ex(pad_type);
- pad_type_val = Z_LVAL_PP(pad_type);
- if (pad_type_val < STR_PAD_LEFT || pad_type_val > STR_PAD_BOTH) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Padding type has to be STR_PAD_LEFT, STR_PAD_RIGHT, or STR_PAD_BOTH.");
- return;
- }
- }
- }
-
- result = (char *)emalloc(Z_STRLEN_PP(input) + num_pad_chars + 1);
-
- /* We need to figure out the left/right padding lengths. */
- switch (pad_type_val) {
- case STR_PAD_RIGHT:
- left_pad = 0;
- right_pad = num_pad_chars;
- break;
-
- case STR_PAD_LEFT:
- left_pad = num_pad_chars;
- right_pad = 0;
- break;
-
- case STR_PAD_BOTH:
- left_pad = num_pad_chars / 2;
- right_pad = num_pad_chars - left_pad;
- break;
- }
-
- /* First we pad on the left. */
- for (i = 0; i < left_pad; i++)
- result[result_len++] = pad_str_val[i % pad_str_len];
-
- /* Then we copy the input string. */
- memcpy(result + result_len, Z_STRVAL_PP(input), Z_STRLEN_PP(input));
- result_len += Z_STRLEN_PP(input);
-
- /* Finally, we pad on the right. */
- for (i = 0; i < right_pad; i++)
- result[result_len++] = pad_str_val[i % pad_str_len];
-
- result[result_len] = '\0';
-
- RETURN_STRINGL(result, result_len, 0);
-}
-/* }}} */
-
-/* {{{ proto mixed sscanf(string str, string format [, string ...])
- Implements an ANSI C compatible sscanf */
-PHP_FUNCTION(sscanf)
-{
- zval ***args;
- int result;
- int argc = ZEND_NUM_ARGS();
-
- if (argc < 2) {
- WRONG_PARAM_COUNT;
- }
-
- args = (zval ***) safe_emalloc(argc, sizeof(zval **), 0);
- if (zend_get_parameters_array_ex(argc, args) == FAILURE) {
- efree(args);
- WRONG_PARAM_COUNT;
- }
-
- convert_to_string_ex(args[0]);
- convert_to_string_ex(args[1]);
-
- result = php_sscanf_internal(Z_STRVAL_PP(args[0]),
- Z_STRVAL_PP(args[1]),
- argc, args,
- 2, &return_value TSRMLS_CC);
- efree(args);
-
- if (SCAN_ERROR_WRONG_PARAM_COUNT == result) {
- WRONG_PARAM_COUNT;
- }
-}
-/* }}} */
-
-static char rot13_from[] = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
-static char rot13_to[] = "nopqrstuvwxyzabcdefghijklmNOPQRSTUVWXYZABCDEFGHIJKLM";
-
-/* {{{ proto string str_rot13(string str)
- Perform the rot13 transform on a string */
-PHP_FUNCTION(str_rot13)
-{
- zval **arg;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg)) {
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex(arg);
- *return_value = **arg;
- zval_copy_ctor(return_value);
-
- php_strtr(Z_STRVAL_P(return_value), Z_STRLEN_P(return_value), rot13_from, rot13_to, 52);
-}
-/* }}} */
-
-
-static void php_string_shuffle(char *str, long len TSRMLS_DC)
-{
- long n_elems, rnd_idx, n_left;
- char temp;
- /* The implementation is stolen from array_data_shuffle */
- /* Thus the characteristics of the randomization are the same */
- n_elems = len;
-
- if (n_elems <= 1) {
- return;
- }
-
- n_left = n_elems;
-
- while (--n_left) {
- rnd_idx = php_rand(TSRMLS_C);
- RAND_RANGE(rnd_idx, 0, n_left, PHP_RAND_MAX);
- if (rnd_idx != n_left) {
- temp = str[n_left];
- str[n_left] = str[rnd_idx];
- str[rnd_idx] = temp;
- }
- }
-}
-
-
-/* {{{ proto void str_shuffle(string str)
- Shuffles string. One permutation of all possible is created */
-PHP_FUNCTION(str_shuffle)
-{
- zval **arg;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg)) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_string_ex(arg);
- *return_value = **arg;
- zval_copy_ctor(return_value);
- if (Z_STRLEN_P(return_value) > 1) {
- php_string_shuffle(Z_STRVAL_P(return_value), (long) Z_STRLEN_P(return_value) TSRMLS_CC);
- }
-}
-/* }}} */
-
-/* {{{ proto mixed str_word_count(string str, [int format])
- Counts the number of words inside a string. If format of 1 is specified,
- then the function will return an array containing all the words
- found inside the string. If format of 2 is specified, then the function
- will return an associated array where the position of the word is the key
- and the word itself is the value.
-
- For the purpose of this function, 'word' is defined as a locale dependent
- string containing alphabetic characters, which also may contain, but not start
- with "'" and "-" characters.
-*/
-PHP_FUNCTION(str_word_count)
-{
- zval **str, **o_format;
- char *s, *e, *p, *buf;
- int word_count = 0;
- int type = 0;
- int n_args = ZEND_NUM_ARGS();
-
- if (n_args > 2 || n_args < 1 || zend_get_parameters_ex(n_args, &str, &o_format) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- if (n_args == 2) {
- convert_to_long_ex(o_format);
- type = Z_LVAL_PP(o_format);
-
- if (type != 1 && type != 2) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "The specified format parameter, '%d' is invalid.", type);
- RETURN_FALSE;
- }
- }
-
- convert_to_string_ex(str);
-
- p = s = Z_STRVAL_PP(str);
- e = Z_STRVAL_PP(str) + Z_STRLEN_PP(str);
-
- if (type == 1 || type == 2) {
- array_init(return_value);
- }
-
- while (p < e) {
- if (isalpha(*p++)) {
- s = p - 1;
- while (isalpha(*p) || *p == '\'' || (*p == '-' && isalpha(*(p+1)))) {
- p++;
- }
-
- switch (type)
- {
- case 1:
- buf = estrndup(s, (p-s));
- add_next_index_stringl(return_value, buf, (p-s), 1);
- efree(buf);
- break;
- case 2:
- buf = estrndup(s, (p-s));
- add_index_stringl(return_value, (s - Z_STRVAL_PP(str)), buf, p-s, 1);
- efree(buf);
- break;
- default:
- word_count++;
- break;
- }
- }
- }
-
- if (!type) {
- RETURN_LONG(word_count);
- }
-}
-
-/* }}} */
-
-#if HAVE_STRFMON
-/* {{{ proto string money_format(string format , float value)
- Convert monetary value(s) to string */
-PHP_FUNCTION(money_format)
-{
- int format_len = 0, str_len;
- char *format, *str;
- double value;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "sd", &format, &format_len, &value) == FAILURE) {
- return;
- }
-
- str_len = format_len + 1024;
- str = emalloc(str_len);
- if ((str_len = strfmon(str, str_len, format, value)) < 0) {
- efree(str);
- RETURN_FALSE;
- }
- str[str_len] = 0;
-
- RETURN_STRINGL(erealloc(str, str_len + 1), str_len, 0);
-}
-/* }}} */
-#endif
-
-/* {{{ proto array str_split(string str [, int split_length])
- Convert a string to an array. If split_length is specified, break the string down into chunks each split_length characters long. */
-PHP_FUNCTION(str_split)
-{
- char *str;
- int str_len;
- long split_length = 1;
- char *p;
- int n_reg_segments;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|l", &str, &str_len, &split_length) == FAILURE) {
- return;
- }
-
- if (split_length <= 0) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "The the length of each segment must be greater then zero.");
- RETURN_FALSE;
- }
-
- array_init(return_value);
-
- n_reg_segments = floor(str_len / split_length);
- p = str;
-
- while (n_reg_segments-- > 0) {
- add_next_index_stringl(return_value, p, split_length, 1);
- p += split_length;
- }
-
- if (p != (str + str_len)) {
- add_next_index_stringl(return_value, p, (str + str_len - p), 1);
- }
-}
-/* }}} */
-
-/* {{{ proto array strpbrk(string haystack, string char_list)
- Search a string for any of a set of characters */
-PHP_FUNCTION(strpbrk)
-{
- char *haystack, *char_list;
- int haystack_len, char_list_len;
- char *p;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ss", &haystack, &haystack_len, &char_list, &char_list_len) == FAILURE) {
- RETURN_FALSE;
- }
-
- if (!char_list_len) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "The character list cannot be empty.");
- RETURN_FALSE;
- }
-
- if ((p = strpbrk(haystack, char_list))) {
- RETURN_STRINGL(p, (haystack + haystack_len - p), 1);
- } else {
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-/* {{{ proto int substr_compare(string main_str, string str, int offset [, int length [, bool case_sensitivity]])
- Binary safe optionally case insensitive comparison of 2 strings from an offset, up to length characters */
-PHP_FUNCTION(substr_compare)
-{
- char *s1, *s2;
- int s1_len, s2_len;
- long offset, len=0;
- zend_bool cs=0;
- uint cmp_len;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ssl|lb", &s1, &s1_len, &s2, &s2_len, &offset, &len, &cs) == FAILURE) {
- RETURN_FALSE;
- }
-
- if (len && offset >= s1_len) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "The start position cannot exceed initial string length.");
- RETURN_FALSE;
- }
-
- cmp_len = (uint) (len ? len : MAX(s2_len, (s1_len - offset)));
-
- if (!cs) {
- RETURN_LONG(zend_binary_strncmp(s1 + offset, (s1_len - offset), s2, s2_len, cmp_len));
- } else {
- RETURN_LONG(zend_binary_strncasecmp(s1 + offset, (s1_len - offset), s2, s2_len, cmp_len));
- }
-}
-/* }}} */
-
-/*
- * 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/standard/strnatcmp.c b/ext/standard/strnatcmp.c
deleted file mode 100644
index e1f491a3df..0000000000
--- a/ext/standard/strnatcmp.c
+++ /dev/null
@@ -1,175 +0,0 @@
-/* -*- mode: c; c-file-style: "k&r" -*-
-
- Modified for PHP by Andrei Zmievski <andrei@ispi.net>
-
- strnatcmp.c -- Perform 'natural order' comparisons of strings in C.
- Copyright (C) 2000 by Martin Pool <mbp@humbug.org.au>
-
- This software is provided 'as-is', without any express or implied
- warranty. In no event will the authors be held liable for any damages
- arising from the use of this software.
-
- Permission is granted to anyone to use this software for any purpose,
- including commercial applications, and to alter it and redistribute it
- freely, subject to the following restrictions:
-
- 1. The origin of this software must not be misrepresented; you must not
- claim that you wrote the original software. If you use this software
- in a product, an acknowledgment in the product documentation would be
- appreciated but is not required.
- 2. Altered source versions must be plainly marked as such, and must not be
- misrepresented as being the original software.
- 3. This notice may not be removed or altered from any source distribution.
-*/
-
-#include <ctype.h>
-#include <string.h>
-#include <assert.h>
-#include <stdio.h>
-
-#include "php.h"
-#include "php_string.h"
-
-#if defined(__GNUC__)
-# define UNUSED __attribute__((__unused__))
-#else
-# define UNUSED
-#endif
-
-#if 0
-static char const *version UNUSED =
- "$Id$";
-#endif
-/* {{{ compare_right
- */
-static int
-compare_right(char const **a, char const *aend, char const **b, char const *bend)
-{
- int bias = 0;
-
- /* The longest run of digits wins. That aside, the greatest
- value wins, but we can't know that it will until we've scanned
- both numbers to know that they have the same magnitude, so we
- remember it in BIAS. */
- for(;; (*a)++, (*b)++) {
- if ((*a == aend || !isdigit((int)(unsigned char)**a)) &&
- (*b == bend || !isdigit((int)(unsigned char)**b)))
- return bias;
- else if (*a == aend || !isdigit((int)(unsigned char)**a))
- return -1;
- else if (*b == bend || !isdigit((int)(unsigned char)**b))
- return +1;
- else if (**a < **b) {
- if (!bias)
- bias = -1;
- } else if (**a > **b) {
- if (!bias)
- bias = +1;
- }
- }
-
- return 0;
-}
-/* }}} */
-
-/* {{{ compare_left
- */
-static int
-compare_left(char const **a, char const *aend, char const **b, char const *bend)
-{
- /* Compare two left-aligned numbers: the first to have a
- different value wins. */
- for(;; (*a)++, (*b)++) {
- if ((*a == aend || !isdigit((int)(unsigned char)**a)) &&
- (*b == bend || !isdigit((int)(unsigned char)**b)))
- return 0;
- else if (*a == aend || !isdigit((int)(unsigned char)**a))
- return -1;
- else if (*b == bend || !isdigit((int)(unsigned char)**b))
- return +1;
- else if (**a < **b)
- return -1;
- else if (**a > **b)
- return +1;
- }
-
- return 0;
-}
-/* }}} */
-
-/* {{{ strnatcmp_ex
- */
-PHPAPI int strnatcmp_ex(char const *a, size_t a_len, char const *b, size_t b_len, int fold_case)
-{
- char ca, cb;
- char const *ap, *bp;
- char const *aend = a + a_len,
- *bend = b + b_len;
- int fractional, result;
-
- if (a_len == 0 || b_len == 0)
- return a_len - b_len;
-
- ap = a;
- bp = b;
- while (1) {
- ca = *ap; cb = *bp;
-
- /* skip over leading spaces or zeros */
- while (isspace((int)(unsigned char)ca))
- ca = *++ap;
-
- while (isspace((int)(unsigned char)cb))
- cb = *++bp;
-
- /* process run of digits */
- if (isdigit((int)(unsigned char)ca) && isdigit((int)(unsigned char)cb)) {
- fractional = (ca == '0' || cb == '0');
-
- if (fractional)
- result = compare_left(&ap, aend, &bp, bend);
- else
- result = compare_right(&ap, aend, &bp, bend);
-
- if (result != 0)
- return result;
- else if (ap == aend && bp == bend)
- /* End of the strings. Let caller sort them out. */
- return 0;
- else {
- /* Keep on comparing from the current point. */
- ca = *ap; cb = *bp;
- }
- }
-
- if (fold_case) {
- ca = toupper((int)(unsigned char)ca);
- cb = toupper((int)(unsigned char)cb);
- }
-
- if (ca < cb)
- return -1;
- else if (ca > cb)
- return +1;
-
- ++ap; ++bp;
- if (ap >= aend && bp >= bend)
- /* The strings compare the same. Perhaps the caller
- will want to call strcmp to break the tie. */
- return 0;
- else if (ap >= aend)
- return -1;
- else if (bp >= bend)
- return 1;
- }
-}
-/* }}} */
-
-/*
- * 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/standard/sunfuncs.c b/ext/standard/sunfuncs.c
deleted file mode 100644
index 67ba3ffe8c..0000000000
--- a/ext/standard/sunfuncs.c
+++ /dev/null
@@ -1,244 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Moshe Doron <mosdoron@netvision.net.il> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-/*
- The sun position algorithm taken from the 'US Naval Observatory's
- Almanac for Computers', implemented by Ken Bloom <kekabloom@ucdavis.edu>
- for the zmanim project <http://sourceforge.net/projects/zmanim/>
- and finally converted to C by Moshe Doron <mosdoron@netvision.net.il>.
-*/
-
-#include "php.h"
-#include "php_sunfuncs.h"
-#include "datetime.h"
-#include "php_ini.h"
-
-#include <assert.h>
-#include <math.h>
-#include <stdlib.h>
-
-/* {{{ macros and constants
- */
-#ifndef M_PI
-#define M_PI 3.14159265358979323846
-#endif
-
-#define to_rad(degrees) (degrees * M_PI / 180)
-#define to_rad_with_min(degrees) (degrees + minutes / 60)
-#define to_deg(rad) (rad * 180 / M_PI)
-/* }}} */
-
-/* {{{ php_sunrise_sunset
- returns time in UTC */
-static double php_sunrise_sunset(long N, double latitude, double longitude, double zenith, int calc_sunset)
-{
- double lngHour, t, M, L, Lx, RA, RAx, Lquadrant, RAquadrant, sinDec, cosDec, cosH, H, T, UT, UTx;
-
- /* step 1: First calculate the day of the year
- int N = theday - date(1, 1, theday.year()) + 1;
- */
-
- /* step 2: convert the longitude to hour value and calculate an approximate time */
- lngHour = longitude / 15;
-
- /* use 18 for sunset instead of 6 */
- if (calc_sunset) {
- t = (double) N + ((18 - lngHour) / 24); /* Sunset */
- } else {
- t = (double) N + ((6 - lngHour) / 24); /* Sunrise */
- }
-
- /* step 3: calculate the sun's mean anomaly */
- M = (0.9856 * t) - 3.289;
-
- /* step 4: calculate the sun's true longitude */
- L = M + (1.916 * sin(to_rad(M))) + (0.020 * sin (to_rad(2 * M))) + 282.634;
-
- while (L < 0) {
- Lx = L + 360;
- assert (Lx != L); /* askingtheguru: realy needed? */
- L = Lx;
- }
-
- while (L >= 360) {
- Lx = L - 360;
- assert (Lx != L); /* askingtheguru: realy needed? */
- L = Lx;
- }
-
- /* step 5a: calculate the sun's right ascension */
- RA = to_deg(atan(0.91764 * tan(to_rad(L))));
-
- while (RA < 0) {
- RAx = RA + 360;
- assert (RAx != RA); /* askingtheguru: realy needed? */
- RA = RAx;
- }
-
- while (RA >= 360) {
- RAx = RA - 360;
- assert (RAx != RA); /* askingtheguru: realy needed? */
- RA = RAx;
- }
-
- /* step 5b: right ascension value needs to be in the same quadrant as L */
- Lquadrant = floor(L / 90) * 90;
- RAquadrant = floor(RA / 90) * 90;
- RA = RA + (Lquadrant - RAquadrant);
-
- /* step 5c: right ascension value needs to be converted into hours */
- RA /= 15;
-
- /* step 6: calculate the sun's declination */
- sinDec = 0.39782 * sin(to_rad(L));
- cosDec = cos(asin(sinDec));
-
- /* step 7a: calculate the sun's local hour angle */
- cosH = (cos(to_rad(zenith)) - (sinDec * sin(to_rad(latitude)))) / (cosDec * cos(to_rad(latitude)));
-
- /* XXX: What's the use of this block.. ?
- * if (!calc_sunset && cosH > 1 || calc_sunset && cosH < -1) {
- * throw doesnthappen();
- * }
- */
-
- /* step 7b: finish calculating H and convert into hours */
- if (calc_sunset) {
- H = to_deg(acos(cosH)); /* Sunset */
- } else {
- H = 360 - to_deg(acos(cosH)); /* Sunrise */
- }
- H = H / 15;
-
- /* step 8: calculate local mean time */
- T = H + RA - (0.06571 * t) - 6.622;
-
- /* step 9: convert to UTC */
- UT = T - lngHour;
-
- while (UT < 0) {
- UTx = UT + 24;
- assert (UTx != UT); /* askingtheguru: realy needed? */
- UT = UTx;
- }
-
- while (UT >= 24) {
- UTx = UT - 24;
- assert (UTx != UT); /* askingtheguru: realy needed? */
- UT = UTx;
- }
-
- return UT;
-}
-/* }}} */
-
-/* {{{ php_do_date_sunrise_sunset
- * Common for date_sunrise() and date_sunset() functions
- */
-static void php_do_date_sunrise_sunset(INTERNAL_FUNCTION_PARAMETERS, int calc_sunset)
-{
- zval *date;
- double latitude, longitude, zenith, gmt_offset, ret;
- int time, N;
- long retformat;
- char retstr[6];
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z|ldddd", &date, &retformat, &latitude, &longitude, &zenith, &gmt_offset) == FAILURE) {
- RETURN_FALSE;
- }
-
- switch (Z_TYPE_P(date)) {
- case IS_LONG:
- time = Z_LVAL_P(date);
- break;
- case IS_STRING:
- /* todo: more user friendly format */
- default:
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "date must be timestamp for now");
- RETURN_FALSE;
- }
-
- N = php_idate('z', time, 0) + 1;
-
- switch (ZEND_NUM_ARGS()) {
- case 1:
- retformat = SUNFUNCS_RET_STRING;
- case 2:
- latitude = INI_FLT("date.default_latitude");
- case 3:
- longitude = INI_FLT("date.default_longitude");
- case 4:
- if (calc_sunset) {
- zenith = INI_FLT("date.sunset_zenith");
- } else {
- zenith = INI_FLT("date.sunrise_zenith");
- }
- case 5:
- gmt_offset = php_idate('Z', time, 0) / 3600;
- case 6:
- break;
- default:
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "invalid format");
- RETURN_FALSE;
- break;
- }
-
- ret = php_sunrise_sunset(N, latitude, longitude, zenith, calc_sunset) + gmt_offset;
-
- switch (retformat) {
- case SUNFUNCS_RET_TIMESTAMP:
- RETURN_LONG((int) (time - (time % (24 * 3600))) + (int) (60 * ret));
- break;
- case SUNFUNCS_RET_STRING:
- N = (int) ret;
- sprintf(retstr, "%02d:%02d", N, (int) (60 * (ret - (double) N)));
- RETVAL_STRINGL(retstr, 5, 1);
- break;
- case SUNFUNCS_RET_DOUBLE:
- RETURN_DOUBLE(ret);
- break;
- }
-}
-/* }}} */
-
-/* {{{ proto mixed date_sunrise(mixed time [, int format [, float latitude [, float longitude [, float zenith [, float gmt_offset]]]]])
- Returns time of sunrise for a given day and location */
-PHP_FUNCTION(date_sunrise)
-{
- php_do_date_sunrise_sunset(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0);
-}
-/* }}} */
-
-/* {{{ proto mixed date_sunset(mixed time [, int format [, float latitude [, float longitude [, float zenith [, float gmt_offset]]]]])
- Returns time of sunset for a given day and location */
-PHP_FUNCTION(date_sunset)
-{
- php_do_date_sunrise_sunset(INTERNAL_FUNCTION_PARAM_PASSTHRU, 1);
-}
-/* }}} */
-
-/*
- * 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/standard/syslog.c b/ext/standard/syslog.c
deleted file mode 100644
index 9710ea4d60..0000000000
--- a/ext/standard/syslog.c
+++ /dev/null
@@ -1,282 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Stig Sæther Bakken <ssb@php.net> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-#include "php.h"
-
-#ifdef HAVE_SYSLOG_H
-#include "php_ini.h"
-#include "zend_globals.h"
-
-#include <stdlib.h>
-#if HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-
-#include <string.h>
-#include <errno.h>
-
-#include <stdio.h>
-#include "basic_functions.h"
-#include "php_ext_syslog.h"
-
-static void start_syslog(TSRMLS_D);
-
-/* {{{ PHP_MINIT_FUNCTION
- */
-PHP_MINIT_FUNCTION(syslog)
-{
- /* error levels */
- REGISTER_LONG_CONSTANT("LOG_EMERG", LOG_EMERG, CONST_CS | CONST_PERSISTENT); /* system unusable */
- REGISTER_LONG_CONSTANT("LOG_ALERT", LOG_ALERT, CONST_CS | CONST_PERSISTENT); /* immediate action required */
- REGISTER_LONG_CONSTANT("LOG_CRIT", LOG_CRIT, CONST_CS | CONST_PERSISTENT); /* critical conditions */
- REGISTER_LONG_CONSTANT("LOG_ERR", LOG_ERR, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("LOG_WARNING", LOG_WARNING, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("LOG_NOTICE", LOG_NOTICE, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("LOG_INFO", LOG_INFO, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("LOG_DEBUG", LOG_DEBUG, CONST_CS | CONST_PERSISTENT);
- /* facility: type of program logging the message */
- REGISTER_LONG_CONSTANT("LOG_KERN", LOG_KERN, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("LOG_USER", LOG_USER, CONST_CS | CONST_PERSISTENT); /* generic user level */
- REGISTER_LONG_CONSTANT("LOG_MAIL", LOG_MAIL, CONST_CS | CONST_PERSISTENT); /* log to email */
- REGISTER_LONG_CONSTANT("LOG_DAEMON", LOG_DAEMON, CONST_CS | CONST_PERSISTENT); /* other system daemons */
- REGISTER_LONG_CONSTANT("LOG_AUTH", LOG_AUTH, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("LOG_SYSLOG", LOG_SYSLOG, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("LOG_LPR", LOG_LPR, CONST_CS | CONST_PERSISTENT);
-#ifdef LOG_NEWS
- /* No LOG_NEWS on HP-UX */
- REGISTER_LONG_CONSTANT("LOG_NEWS", LOG_NEWS, CONST_CS | CONST_PERSISTENT); /* usenet new */
-#endif
-#ifdef LOG_UUCP
- /* No LOG_UUCP on HP-UX */
- REGISTER_LONG_CONSTANT("LOG_UUCP", LOG_UUCP, CONST_CS | CONST_PERSISTENT);
-#endif
-#ifdef LOG_CRON
- /* apparently some systems don't have this one */
- REGISTER_LONG_CONSTANT("LOG_CRON", LOG_CRON, CONST_CS | CONST_PERSISTENT);
-#endif
-#ifdef LOG_AUTHPRIV
- /* AIX doesn't have LOG_AUTHPRIV */
- REGISTER_LONG_CONSTANT("LOG_AUTHPRIV", LOG_AUTHPRIV, CONST_CS | CONST_PERSISTENT);
-#endif
-#if !defined(PHP_WIN32) && !defined(NETWARE)
- REGISTER_LONG_CONSTANT("LOG_LOCAL0", LOG_LOCAL0, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("LOG_LOCAL1", LOG_LOCAL1, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("LOG_LOCAL2", LOG_LOCAL2, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("LOG_LOCAL3", LOG_LOCAL3, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("LOG_LOCAL4", LOG_LOCAL4, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("LOG_LOCAL5", LOG_LOCAL5, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("LOG_LOCAL6", LOG_LOCAL6, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("LOG_LOCAL7", LOG_LOCAL7, CONST_CS | CONST_PERSISTENT);
-#endif
- /* options */
- REGISTER_LONG_CONSTANT("LOG_PID", LOG_PID, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("LOG_CONS", LOG_CONS, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("LOG_ODELAY", LOG_ODELAY, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("LOG_NDELAY", LOG_NDELAY, CONST_CS | CONST_PERSISTENT);
-#ifdef LOG_NOWAIT
- REGISTER_LONG_CONSTANT("LOG_NOWAIT", LOG_NOWAIT, CONST_CS | CONST_PERSISTENT);
-#endif
-#ifdef LOG_PERROR
- /* AIX doesn't have LOG_PERROR */
- REGISTER_LONG_CONSTANT("LOG_PERROR", LOG_PERROR, CONST_CS | CONST_PERSISTENT); /*log to stderr*/
-#endif
-
- return SUCCESS;
-}
-/* }}} */
-
-PHP_RINIT_FUNCTION(syslog)
-{
- if (INI_INT("define_syslog_variables")) {
- start_syslog(TSRMLS_C);
- } else {
- BG(syslog_started)=0;
- }
- BG(syslog_device)=NULL;
- return SUCCESS;
-}
-
-
-PHP_RSHUTDOWN_FUNCTION(syslog)
-{
- if (BG(syslog_device)) {
- efree(BG(syslog_device));
- }
-#ifdef PHP_WIN32
- closelog();
-#endif
- return SUCCESS;
-}
-
-/* {{{ start_syslog
- */
-static void start_syslog(TSRMLS_D)
-{
- /* error levels */
- SET_VAR_LONG("LOG_EMERG", LOG_EMERG); /* system unusable */
- SET_VAR_LONG("LOG_ALERT", LOG_ALERT); /* immediate action required */
- SET_VAR_LONG("LOG_CRIT", LOG_CRIT); /* critical conditions */
- SET_VAR_LONG("LOG_ERR", LOG_ERR);
- SET_VAR_LONG("LOG_WARNING", LOG_WARNING);
- SET_VAR_LONG("LOG_NOTICE", LOG_NOTICE);
- SET_VAR_LONG("LOG_INFO", LOG_INFO);
- SET_VAR_LONG("LOG_DEBUG", LOG_DEBUG);
- /* facility: type of program logging the message */
- SET_VAR_LONG("LOG_KERN", LOG_KERN);
- SET_VAR_LONG("LOG_USER", LOG_USER); /* generic user level */
- SET_VAR_LONG("LOG_MAIL", LOG_MAIL); /* log to email */
- SET_VAR_LONG("LOG_DAEMON", LOG_DAEMON); /* other system daemons */
- SET_VAR_LONG("LOG_AUTH", LOG_AUTH);
- SET_VAR_LONG("LOG_SYSLOG", LOG_SYSLOG);
- SET_VAR_LONG("LOG_LPR", LOG_LPR);
-#ifdef LOG_NEWS
- /* No LOG_NEWS on HP-UX */
- SET_VAR_LONG("LOG_NEWS", LOG_NEWS); /* usenet new */
-#endif
-#ifdef LOG_UUCP
- /* No LOG_UUCP on HP-UX */
- SET_VAR_LONG("LOG_UUCP", LOG_UUCP);
-#endif
-#ifdef LOG_CRON
- /* apparently some systems don't have this one */
- SET_VAR_LONG("LOG_CRON", LOG_CRON);
-#endif
-#ifdef LOG_AUTHPRIV
- /* AIX doesn't have LOG_AUTHPRIV */
- SET_VAR_LONG("LOG_AUTHPRIV", LOG_AUTHPRIV);
-#endif
-#if !defined(PHP_WIN32) && !defined(NETWARE)
- SET_VAR_LONG("LOG_LOCAL0", LOG_LOCAL0);
- SET_VAR_LONG("LOG_LOCAL1", LOG_LOCAL1);
- SET_VAR_LONG("LOG_LOCAL2", LOG_LOCAL2);
- SET_VAR_LONG("LOG_LOCAL3", LOG_LOCAL3);
- SET_VAR_LONG("LOG_LOCAL4", LOG_LOCAL4);
- SET_VAR_LONG("LOG_LOCAL5", LOG_LOCAL5);
- SET_VAR_LONG("LOG_LOCAL6", LOG_LOCAL6);
- SET_VAR_LONG("LOG_LOCAL7", LOG_LOCAL7);
-#endif
- /* options */
- SET_VAR_LONG("LOG_PID", LOG_PID);
- SET_VAR_LONG("LOG_CONS", LOG_CONS);
- SET_VAR_LONG("LOG_ODELAY", LOG_ODELAY);
- SET_VAR_LONG("LOG_NDELAY", LOG_NDELAY);
-#ifdef LOG_NOWAIT
- /* BeOS doesn't have LOG_NOWAIT */
- SET_VAR_LONG("LOG_NOWAIT", LOG_NOWAIT);
-#endif
-#ifdef LOG_PERROR
- /* AIX doesn't have LOG_PERROR */
- SET_VAR_LONG("LOG_PERROR", LOG_PERROR); /*log to stderr*/
-#endif
-
- BG(syslog_started)=1;
-}
-/* }}} */
-
-/* {{{ proto void define_syslog_variables(void)
- Initializes all syslog-related variables */
-PHP_FUNCTION(define_syslog_variables)
-{
- if (ZEND_NUM_ARGS() != 0) {
- WRONG_PARAM_COUNT;
- }
-
- if (!BG(syslog_started)) {
- start_syslog(TSRMLS_C);
- }
-}
-/* }}} */
-
-/* {{{ proto bool openlog(string ident, int option, int facility)
- Open connection to system logger */
-/*
- ** OpenLog("nettopp", $LOG_PID, $LOG_LOCAL1);
- ** Syslog($LOG_EMERG, "help me!")
- ** CloseLog();
- */
-PHP_FUNCTION(openlog)
-{
- char *ident;
- long option, facility;
- int ident_len;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "sll", &ident,
- &ident_len, &option, &facility) == FAILURE) {
- return;
- }
- if (BG(syslog_device)) {
- efree(BG(syslog_device));
- }
- BG(syslog_device) = estrndup(ident, ident_len);
- openlog(BG(syslog_device), option, facility);
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto bool closelog(void)
- Close connection to system logger */
-PHP_FUNCTION(closelog)
-{
- if (ZEND_NUM_ARGS() != 0) {
- WRONG_PARAM_COUNT;
- }
-
- closelog();
- if (BG(syslog_device)) {
- efree(BG(syslog_device));
- BG(syslog_device)=NULL;
- }
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto bool syslog(int priority, string message)
- Generate a system log message */
-PHP_FUNCTION(syslog)
-{
- long priority;
- char *message;
- int message_len;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ls", &priority,
- &message, &message_len) == FAILURE) {
- return;
- }
-
- /*
- * CAVEAT: if the message contains patterns such as "%s",
- * this will cause problems.
- */
-
- php_syslog(priority, "%.500s", message);
- RETURN_TRUE;
-}
-/* }}} */
-
-#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/standard/tests/array/001.phpt b/ext/standard/tests/array/001.phpt
deleted file mode 100644
index 797a79781f..0000000000
--- a/ext/standard/tests/array/001.phpt
+++ /dev/null
@@ -1,157 +0,0 @@
---TEST--
-Test array_merge and array_walk
---INI--
-precision=14
---FILE--
-<?php
-require(dirname(__FILE__) . '/data.inc');
-/*
-** Create sample arrays
-** Test alpha, numeric (decimal, hex, octal) and special data
-**
-**
-*/
-
-/* Helper function to build testing arrays */
-function make_nested_array ($depth, $breadth, $function = NULL, $args = array ()) {
- for ($x = 0; $x < $breadth; ++$x) {
- if (NULL === $function) {
- $array = array (0);
- } else {
- $array = array (call_user_func_array ($function, $args));
- }
- for ($y = 1; $y < $depth; ++$y) {
- $array[0] = array ($array[0]);
- }
- $temp[$x] = $array;
- }
- return $temp;
-}
-
-/* Nested array */
-$data2 = make_nested_array (3, 3);
-$data = array_merge($data, $data2);
-
-var_dump ($data);
-
-function echo_kv ($value, $key) {
- var_dump ($key);
- var_dump ($value);
-}
-
-echo " -- Testing array_walk() -- \n";
-array_walk ($data, 'echo_kv');
-
-?>
---EXPECT--
-array(11) {
- [0]=>
- string(3) "PHP"
- [1]=>
- string(27) "PHP: Hypertext Preprocessor"
- [2]=>
- string(4) "Test"
- ["test"]=>
- int(27)
- [3]=>
- string(4) "test"
- [4]=>
- array(2) {
- [0]=>
- string(6) "banana"
- [1]=>
- string(6) "orange"
- }
- [5]=>
- string(6) "monkey"
- [6]=>
- float(-0.33333333333333)
- [7]=>
- array(1) {
- [0]=>
- array(1) {
- [0]=>
- array(1) {
- [0]=>
- int(0)
- }
- }
- }
- [8]=>
- array(1) {
- [0]=>
- array(1) {
- [0]=>
- array(1) {
- [0]=>
- int(0)
- }
- }
- }
- [9]=>
- array(1) {
- [0]=>
- array(1) {
- [0]=>
- array(1) {
- [0]=>
- int(0)
- }
- }
- }
-}
- -- Testing array_walk() --
-int(0)
-string(3) "PHP"
-int(1)
-string(27) "PHP: Hypertext Preprocessor"
-int(2)
-string(4) "Test"
-string(4) "test"
-int(27)
-int(3)
-string(4) "test"
-int(4)
-array(2) {
- [0]=>
- string(6) "banana"
- [1]=>
- string(6) "orange"
-}
-int(5)
-string(6) "monkey"
-int(6)
-float(-0.33333333333333)
-int(7)
-array(1) {
- [0]=>
- array(1) {
- [0]=>
- array(1) {
- [0]=>
- int(0)
- }
- }
-}
-int(8)
-array(1) {
- [0]=>
- array(1) {
- [0]=>
- array(1) {
- [0]=>
- int(0)
- }
- }
-}
-int(9)
-array(1) {
- [0]=>
- array(1) {
- [0]=>
- array(1) {
- [0]=>
- int(0)
- }
- }
-}
diff --git a/ext/standard/tests/array/002.phpt b/ext/standard/tests/array/002.phpt
deleted file mode 100644
index f33cf42067..0000000000
--- a/ext/standard/tests/array/002.phpt
+++ /dev/null
@@ -1,644 +0,0 @@
---TEST--
-Test arsort, asort, krsort, ksort, rsort, and sort
---INI--
-precision=14
---FILE--
-<?php
-require(dirname(__FILE__) . '/data.inc');
-
-function test_sort ($sort_function, $data) {
- echo "\n -- Testing $sort_function() -- \n";
- echo "No second argument:\n";
- $sort_function ($data);
- var_dump ($data);
- echo "Using SORT_REGULAR:\n";
- $sort_function ($data, SORT_REGULAR);
- var_dump ($data);
- echo "Using SORT_NUMERIC:\n";
- $sort_function ($data, SORT_NUMERIC);
- var_dump ($data);
- echo "Using SORT_STRING\n";
- $sort_function ($data, SORT_STRING);
- var_dump ($data);
-}
-
-echo "Unsorted data:\n";
-var_dump ($data);
-foreach (array ('arsort', 'asort', 'krsort', 'ksort', 'rsort', 'sort') as $test_function) {
- test_sort ($test_function, $data);
-}
-
-?>
---EXPECT--
-Unsorted data:
-array(8) {
- [0]=>
- string(3) "PHP"
- [17]=>
- string(27) "PHP: Hypertext Preprocessor"
- [5]=>
- string(4) "Test"
- ["test"]=>
- int(27)
- [1000]=>
- string(4) "test"
- [-1000]=>
- array(2) {
- [0]=>
- string(6) "banana"
- [1]=>
- string(6) "orange"
- }
- [1001]=>
- string(6) "monkey"
- [16777216]=>
- float(-0.33333333333333)
-}
-
- -- Testing arsort() --
-No second argument:
-array(8) {
- [-1000]=>
- array(2) {
- [0]=>
- string(6) "banana"
- [1]=>
- string(6) "orange"
- }
- ["test"]=>
- int(27)
- [1000]=>
- string(4) "test"
- [1001]=>
- string(6) "monkey"
- [5]=>
- string(4) "Test"
- [17]=>
- string(27) "PHP: Hypertext Preprocessor"
- [0]=>
- string(3) "PHP"
- [16777216]=>
- float(-0.33333333333333)
-}
-Using SORT_REGULAR:
-array(8) {
- [-1000]=>
- array(2) {
- [0]=>
- string(6) "banana"
- [1]=>
- string(6) "orange"
- }
- ["test"]=>
- int(27)
- [1000]=>
- string(4) "test"
- [1001]=>
- string(6) "monkey"
- [5]=>
- string(4) "Test"
- [17]=>
- string(27) "PHP: Hypertext Preprocessor"
- [0]=>
- string(3) "PHP"
- [16777216]=>
- float(-0.33333333333333)
-}
-Using SORT_NUMERIC:
-array(8) {
- ["test"]=>
- int(27)
- [-1000]=>
- array(2) {
- [0]=>
- string(6) "banana"
- [1]=>
- string(6) "orange"
- }
- [0]=>
- string(3) "PHP"
- [17]=>
- string(27) "PHP: Hypertext Preprocessor"
- [1001]=>
- string(6) "monkey"
- [5]=>
- string(4) "Test"
- [1000]=>
- string(4) "test"
- [16777216]=>
- float(-0.33333333333333)
-}
-Using SORT_STRING
-array(8) {
- [1000]=>
- string(4) "test"
- [1001]=>
- string(6) "monkey"
- [5]=>
- string(4) "Test"
- [17]=>
- string(27) "PHP: Hypertext Preprocessor"
- [0]=>
- string(3) "PHP"
- [-1000]=>
- array(2) {
- [0]=>
- string(6) "banana"
- [1]=>
- string(6) "orange"
- }
- ["test"]=>
- int(27)
- [16777216]=>
- float(-0.33333333333333)
-}
-
- -- Testing asort() --
-No second argument:
-array(8) {
- [16777216]=>
- float(-0.33333333333333)
- [0]=>
- string(3) "PHP"
- [17]=>
- string(27) "PHP: Hypertext Preprocessor"
- [5]=>
- string(4) "Test"
- [1001]=>
- string(6) "monkey"
- [1000]=>
- string(4) "test"
- ["test"]=>
- int(27)
- [-1000]=>
- array(2) {
- [0]=>
- string(6) "banana"
- [1]=>
- string(6) "orange"
- }
-}
-Using SORT_REGULAR:
-array(8) {
- [16777216]=>
- float(-0.33333333333333)
- [0]=>
- string(3) "PHP"
- [17]=>
- string(27) "PHP: Hypertext Preprocessor"
- [5]=>
- string(4) "Test"
- [1001]=>
- string(6) "monkey"
- [1000]=>
- string(4) "test"
- ["test"]=>
- int(27)
- [-1000]=>
- array(2) {
- [0]=>
- string(6) "banana"
- [1]=>
- string(6) "orange"
- }
-}
-Using SORT_NUMERIC:
-array(8) {
- [16777216]=>
- float(-0.33333333333333)
- [1001]=>
- string(6) "monkey"
- [1000]=>
- string(4) "test"
- [5]=>
- string(4) "Test"
- [17]=>
- string(27) "PHP: Hypertext Preprocessor"
- [0]=>
- string(3) "PHP"
- [-1000]=>
- array(2) {
- [0]=>
- string(6) "banana"
- [1]=>
- string(6) "orange"
- }
- ["test"]=>
- int(27)
-}
-Using SORT_STRING
-array(8) {
- [16777216]=>
- float(-0.33333333333333)
- ["test"]=>
- int(27)
- [-1000]=>
- array(2) {
- [0]=>
- string(6) "banana"
- [1]=>
- string(6) "orange"
- }
- [0]=>
- string(3) "PHP"
- [17]=>
- string(27) "PHP: Hypertext Preprocessor"
- [5]=>
- string(4) "Test"
- [1001]=>
- string(6) "monkey"
- [1000]=>
- string(4) "test"
-}
-
- -- Testing krsort() --
-No second argument:
-array(8) {
- [16777216]=>
- float(-0.33333333333333)
- [1001]=>
- string(6) "monkey"
- [1000]=>
- string(4) "test"
- [17]=>
- string(27) "PHP: Hypertext Preprocessor"
- [5]=>
- string(4) "Test"
- ["test"]=>
- int(27)
- [0]=>
- string(3) "PHP"
- [-1000]=>
- array(2) {
- [0]=>
- string(6) "banana"
- [1]=>
- string(6) "orange"
- }
-}
-Using SORT_REGULAR:
-array(8) {
- [16777216]=>
- float(-0.33333333333333)
- [1001]=>
- string(6) "monkey"
- [1000]=>
- string(4) "test"
- [17]=>
- string(27) "PHP: Hypertext Preprocessor"
- [5]=>
- string(4) "Test"
- [0]=>
- string(3) "PHP"
- ["test"]=>
- int(27)
- [-1000]=>
- array(2) {
- [0]=>
- string(6) "banana"
- [1]=>
- string(6) "orange"
- }
-}
-Using SORT_NUMERIC:
-array(8) {
- [16777216]=>
- float(-0.33333333333333)
- [1001]=>
- string(6) "monkey"
- [1000]=>
- string(4) "test"
- [17]=>
- string(27) "PHP: Hypertext Preprocessor"
- [5]=>
- string(4) "Test"
- ["test"]=>
- int(27)
- [0]=>
- string(3) "PHP"
- [-1000]=>
- array(2) {
- [0]=>
- string(6) "banana"
- [1]=>
- string(6) "orange"
- }
-}
-Using SORT_STRING
-array(8) {
- ["test"]=>
- int(27)
- [5]=>
- string(4) "Test"
- [17]=>
- string(27) "PHP: Hypertext Preprocessor"
- [16777216]=>
- float(-0.33333333333333)
- [1001]=>
- string(6) "monkey"
- [1000]=>
- string(4) "test"
- [0]=>
- string(3) "PHP"
- [-1000]=>
- array(2) {
- [0]=>
- string(6) "banana"
- [1]=>
- string(6) "orange"
- }
-}
-
- -- Testing ksort() --
-No second argument:
-array(8) {
- [-1000]=>
- array(2) {
- [0]=>
- string(6) "banana"
- [1]=>
- string(6) "orange"
- }
- [0]=>
- string(3) "PHP"
- ["test"]=>
- int(27)
- [5]=>
- string(4) "Test"
- [17]=>
- string(27) "PHP: Hypertext Preprocessor"
- [1000]=>
- string(4) "test"
- [1001]=>
- string(6) "monkey"
- [16777216]=>
- float(-0.33333333333333)
-}
-Using SORT_REGULAR:
-array(8) {
- [-1000]=>
- array(2) {
- [0]=>
- string(6) "banana"
- [1]=>
- string(6) "orange"
- }
- ["test"]=>
- int(27)
- [0]=>
- string(3) "PHP"
- [5]=>
- string(4) "Test"
- [17]=>
- string(27) "PHP: Hypertext Preprocessor"
- [1000]=>
- string(4) "test"
- [1001]=>
- string(6) "monkey"
- [16777216]=>
- float(-0.33333333333333)
-}
-Using SORT_NUMERIC:
-array(8) {
- [-1000]=>
- array(2) {
- [0]=>
- string(6) "banana"
- [1]=>
- string(6) "orange"
- }
- [0]=>
- string(3) "PHP"
- ["test"]=>
- int(27)
- [5]=>
- string(4) "Test"
- [17]=>
- string(27) "PHP: Hypertext Preprocessor"
- [1000]=>
- string(4) "test"
- [1001]=>
- string(6) "monkey"
- [16777216]=>
- float(-0.33333333333333)
-}
-Using SORT_STRING
-array(8) {
- [-1000]=>
- array(2) {
- [0]=>
- string(6) "banana"
- [1]=>
- string(6) "orange"
- }
- [0]=>
- string(3) "PHP"
- [1000]=>
- string(4) "test"
- [1001]=>
- string(6) "monkey"
- [16777216]=>
- float(-0.33333333333333)
- [17]=>
- string(27) "PHP: Hypertext Preprocessor"
- [5]=>
- string(4) "Test"
- ["test"]=>
- int(27)
-}
-
- -- Testing rsort() --
-No second argument:
-array(8) {
- [0]=>
- array(2) {
- [0]=>
- string(6) "banana"
- [1]=>
- string(6) "orange"
- }
- [1]=>
- int(27)
- [2]=>
- string(4) "test"
- [3]=>
- string(6) "monkey"
- [4]=>
- string(4) "Test"
- [5]=>
- string(27) "PHP: Hypertext Preprocessor"
- [6]=>
- string(3) "PHP"
- [7]=>
- float(-0.33333333333333)
-}
-Using SORT_REGULAR:
-array(8) {
- [0]=>
- array(2) {
- [0]=>
- string(6) "banana"
- [1]=>
- string(6) "orange"
- }
- [1]=>
- int(27)
- [2]=>
- string(4) "test"
- [3]=>
- string(6) "monkey"
- [4]=>
- string(4) "Test"
- [5]=>
- string(27) "PHP: Hypertext Preprocessor"
- [6]=>
- string(3) "PHP"
- [7]=>
- float(-0.33333333333333)
-}
-Using SORT_NUMERIC:
-array(8) {
- [0]=>
- int(27)
- [1]=>
- array(2) {
- [0]=>
- string(6) "banana"
- [1]=>
- string(6) "orange"
- }
- [2]=>
- string(3) "PHP"
- [3]=>
- string(27) "PHP: Hypertext Preprocessor"
- [4]=>
- string(6) "monkey"
- [5]=>
- string(4) "Test"
- [6]=>
- string(4) "test"
- [7]=>
- float(-0.33333333333333)
-}
-Using SORT_STRING
-array(8) {
- [0]=>
- string(4) "test"
- [1]=>
- string(6) "monkey"
- [2]=>
- string(4) "Test"
- [3]=>
- string(27) "PHP: Hypertext Preprocessor"
- [4]=>
- string(3) "PHP"
- [5]=>
- array(2) {
- [0]=>
- string(6) "banana"
- [1]=>
- string(6) "orange"
- }
- [6]=>
- int(27)
- [7]=>
- float(-0.33333333333333)
-}
-
- -- Testing sort() --
-No second argument:
-array(8) {
- [0]=>
- float(-0.33333333333333)
- [1]=>
- string(3) "PHP"
- [2]=>
- string(27) "PHP: Hypertext Preprocessor"
- [3]=>
- string(4) "Test"
- [4]=>
- string(6) "monkey"
- [5]=>
- string(4) "test"
- [6]=>
- int(27)
- [7]=>
- array(2) {
- [0]=>
- string(6) "banana"
- [1]=>
- string(6) "orange"
- }
-}
-Using SORT_REGULAR:
-array(8) {
- [0]=>
- float(-0.33333333333333)
- [1]=>
- string(3) "PHP"
- [2]=>
- string(27) "PHP: Hypertext Preprocessor"
- [3]=>
- string(4) "Test"
- [4]=>
- string(6) "monkey"
- [5]=>
- string(4) "test"
- [6]=>
- int(27)
- [7]=>
- array(2) {
- [0]=>
- string(6) "banana"
- [1]=>
- string(6) "orange"
- }
-}
-Using SORT_NUMERIC:
-array(8) {
- [0]=>
- float(-0.33333333333333)
- [1]=>
- string(6) "monkey"
- [2]=>
- string(4) "test"
- [3]=>
- string(4) "Test"
- [4]=>
- string(27) "PHP: Hypertext Preprocessor"
- [5]=>
- string(3) "PHP"
- [6]=>
- array(2) {
- [0]=>
- string(6) "banana"
- [1]=>
- string(6) "orange"
- }
- [7]=>
- int(27)
-}
-Using SORT_STRING
-array(8) {
- [0]=>
- float(-0.33333333333333)
- [1]=>
- int(27)
- [2]=>
- array(2) {
- [0]=>
- string(6) "banana"
- [1]=>
- string(6) "orange"
- }
- [3]=>
- string(3) "PHP"
- [4]=>
- string(27) "PHP: Hypertext Preprocessor"
- [5]=>
- string(4) "Test"
- [6]=>
- string(6) "monkey"
- [7]=>
- string(4) "test"
-}
diff --git a/ext/standard/tests/array/003.phpt b/ext/standard/tests/array/003.phpt
deleted file mode 100644
index f307186553..0000000000
--- a/ext/standard/tests/array/003.phpt
+++ /dev/null
@@ -1,104 +0,0 @@
---TEST--
-Test usort, uksort and uasort
---INI--
-precision=14
---FILE--
-<?php
-require(dirname(__FILE__) . '/data.inc');
-
-function cmp ($a, $b) {
- is_array ($a)
- and $a = array_sum ($a);
- is_array ($b)
- and $b = array_sum ($b);
- return strcmp ($a, $b);
-}
-
-echo " -- Testing uasort() -- \n";
-uasort ($data, 'cmp');
-var_dump ($data);
-
-
-echo "\n -- Testing uksort() -- \n";
-uksort ($data, 'cmp');
-var_dump ($data);
-
-echo "\n -- Testing usort() -- \n";
-usort ($data, 'cmp');
-var_dump ($data);
-?>
---EXPECT--
--- Testing uasort() --
-array(8) {
- [16777216]=>
- float(-0.33333333333333)
- [-1000]=>
- array(2) {
- [0]=>
- string(6) "banana"
- [1]=>
- string(6) "orange"
- }
- ["test"]=>
- int(27)
- [0]=>
- string(3) "PHP"
- [17]=>
- string(27) "PHP: Hypertext Preprocessor"
- [5]=>
- string(4) "Test"
- [1001]=>
- string(6) "monkey"
- [1000]=>
- string(4) "test"
-}
-
- -- Testing uksort() --
-array(8) {
- [-1000]=>
- array(2) {
- [0]=>
- string(6) "banana"
- [1]=>
- string(6) "orange"
- }
- [0]=>
- string(3) "PHP"
- [1000]=>
- string(4) "test"
- [1001]=>
- string(6) "monkey"
- [16777216]=>
- float(-0.33333333333333)
- [17]=>
- string(27) "PHP: Hypertext Preprocessor"
- [5]=>
- string(4) "Test"
- ["test"]=>
- int(27)
-}
-
- -- Testing usort() --
-array(8) {
- [0]=>
- float(-0.33333333333333)
- [1]=>
- array(2) {
- [0]=>
- string(6) "banana"
- [1]=>
- string(6) "orange"
- }
- [2]=>
- int(27)
- [3]=>
- string(3) "PHP"
- [4]=>
- string(27) "PHP: Hypertext Preprocessor"
- [5]=>
- string(4) "Test"
- [6]=>
- string(6) "monkey"
- [7]=>
- string(4) "test"
-}
diff --git a/ext/standard/tests/array/004.phpt b/ext/standard/tests/array/004.phpt
deleted file mode 100644
index 1074134890..0000000000
--- a/ext/standard/tests/array/004.phpt
+++ /dev/null
@@ -1,59 +0,0 @@
---TEST--
-Test natsort and natcasesort
---INI--
-precision=14
---FILE--
-<?php
-$data = array(
- 'Test1',
- 'teST2'=>0,
- 5=>'test2',
- 'abc'=>'test10',
- 'test21'
-);
-
-var_dump($data);
-
-natsort($data);
-var_dump($data);
-
-natcasesort($data);
-var_dump($data);
-?>
---EXPECT--
-array(5) {
- [0]=>
- string(5) "Test1"
- ["teST2"]=>
- int(0)
- [5]=>
- string(5) "test2"
- ["abc"]=>
- string(6) "test10"
- [6]=>
- string(6) "test21"
-}
-array(5) {
- ["teST2"]=>
- int(0)
- [0]=>
- string(5) "Test1"
- [5]=>
- string(5) "test2"
- ["abc"]=>
- string(6) "test10"
- [6]=>
- string(6) "test21"
-}
-array(5) {
- ["teST2"]=>
- int(0)
- [0]=>
- string(5) "Test1"
- [5]=>
- string(5) "test2"
- ["abc"]=>
- string(6) "test10"
- [6]=>
- string(6) "test21"
-} \ No newline at end of file
diff --git a/ext/standard/tests/array/005.phpt b/ext/standard/tests/array/005.phpt
deleted file mode 100644
index cdf731827d..0000000000
--- a/ext/standard/tests/array/005.phpt
+++ /dev/null
@@ -1,46 +0,0 @@
---TEST--
-Test array_shift behaviour
---FILE--
-<?php
-
-array_shift($GLOBALS);
-
-$a = array("foo", "bar", "fubar");
-$b = array("3" => "foo", "4" => "bar", "5" => "fubar");
-$c = array("a" => "foo", "b" => "bar", "c" => "fubar");
-
-/* simple array */
-echo array_shift($a), "\n";
-var_dump($a);
-
-/* numerical assoc indices */
-echo array_shift($b), "\n";
-var_dump($b);
-
-/* assoc indices */
-echo array_shift($c), "\n";
-var_dump($c);
-
-?>
---EXPECT--
-foo
-array(2) {
- [0]=>
- string(3) "bar"
- [1]=>
- string(5) "fubar"
-}
-foo
-array(2) {
- [0]=>
- string(3) "bar"
- [1]=>
- string(5) "fubar"
-}
-foo
-array(2) {
- ["b"]=>
- string(3) "bar"
- ["c"]=>
- string(5) "fubar"
-}
diff --git a/ext/standard/tests/array/006.phpt b/ext/standard/tests/array/006.phpt
deleted file mode 100644
index 4893ad3f06..0000000000
--- a/ext/standard/tests/array/006.phpt
+++ /dev/null
@@ -1,49 +0,0 @@
---TEST--
-Test array_pop behaviour
---FILE--
-<?php
-
-array_pop($GLOBALS);
-
-$a = array("foo", "bar", "fubar");
-$b = array("3" => "foo", "4" => "bar", "5" => "fubar");
-$c = array("a" => "foo", "b" => "bar", "c" => "fubar");
-
-/* simple array */
-echo array_pop($a), "\n";
-array_push($a, "foobar");
-var_dump($a);
-
-/* numerical assoc indices */
-echo array_pop($b), "\n";
-var_dump($b);
-
-/* assoc indices */
-echo array_pop($c), "\n";
-var_dump($c);
-
-?>
---EXPECT--
-fubar
-array(3) {
- [0]=>
- string(3) "foo"
- [1]=>
- string(3) "bar"
- [2]=>
- string(6) "foobar"
-}
-fubar
-array(2) {
- [3]=>
- string(3) "foo"
- [4]=>
- string(3) "bar"
-}
-fubar
-array(2) {
- ["a"]=>
- string(3) "foo"
- ["b"]=>
- string(3) "bar"
-}
diff --git a/ext/standard/tests/array/007.phpt b/ext/standard/tests/array/007.phpt
deleted file mode 100644
index 95479e18bb..0000000000
--- a/ext/standard/tests/array/007.phpt
+++ /dev/null
@@ -1,651 +0,0 @@
---TEST--
-Test array_diff and array_diff_assoc behaviour
---FILE--
-<?php
-$a = array(1,"big"=>2,3,6,3,5,3,3,3,3,3,3,3,3,3,3);
-$b = array(2,2,3,3,3,3,3,3,3,3,3,3,3,3,3);
-$c = array(-1,1);
-echo '$a='.var_export($a,TRUE).";\n";
-echo '$b='.var_export($b,TRUE).";\n";
-echo '$c='.var_export($c,TRUE).";\n";
-var_dump(array_diff($a,$b,$c));
-var_dump(array_diff_assoc($a,$b,$c));
-$a = array(
-'a'=>2,
-'b'=>'some',
-'c'=>'done',
-'z'=>'foo',
-'f'=>5,
-'fan'=>'fen',
-7=>18,
-9=>25,
-11=>42,
-12=>42,
-45=>42,
-73=>'foo',
-95=>'some',
-'som3'=>'some',
-'want'=>'wanna');
-$b = array(
-'a'=>7,
-7=>18,
-9=>13,
-11=>42,
-45=>46,
-'som3'=>'some',
-'foo'=>'some',
-'goo'=>'foo',
-'f'=>5,
-'z'=>'equal'
-);
-$c = array(
-73=>'foo',
-95=>'some');
-echo '$a='.var_export($a,TRUE).";\n";
-echo '$b='.var_export($b,TRUE).";\n";
-echo '$c='.var_export($c,TRUE).";\n";
-echo "Results:\n\n";
-var_dump(array_diff($a,$b,$c));
-var_dump(array_diff_assoc($a,$b,$c));
-
-echo "-=-=-=-=-=-=-=-=- New functionality from 5.0.0 -=-=-=-=-=-=-=-\n";
-error_reporting(E_ALL);
-class cr {
- private $priv_member;
- public $public_member;
- function cr($val) {
- $this->priv_member = $val;
- $this->public_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;
- }
-}
-
-function comp_func($a, $b) {
- if ($a === $b) return 0;
- return ($a > $b)? 1:-1;
-
-}
-
-function comp_func_cr($a, $b) {
- if ($a->public_member === $b->public_member) return 0;
- return ($a->public_member > $b->public_member)? 1:-1;
-}
-
-
-/*
-$a = array(1,"big"=>2,3,6,3,5,3,3,3,3,3,3,3,3,3,3);
-$b = array(2,2,3,3,3,3,3,3,3,3,3,3,3,3,3);
-$c = array(-1,1);
-echo '$a='.var_export($a,TRUE).";\n";
-echo '$b='.var_export($b,TRUE).";\n";
-echo '$c='.var_export($c,TRUE).";\n";
-var_dump(array_diff($a,$b,$c));
-var_dump(array_diff_assoc($a,$b,$c));
-var_dump(array_udiff($a, $b, $c, "comp_func"));
-var_dump(array_diff_uassoc($a,$b,$c, "comp_func"));
-*/
-
-/*
- $a = array(new cr(9),new cr(12),new cr(23),new cr(4),new cr(-15),);
- $b = array(new cr(9),new cr(22),new cr( 3),new cr(4),new cr(-15),);
- var_dump(array_udiff($a, $b, "comp_func_cr"));
-*/
-$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),);
-
-echo '$a='.var_export($a,TRUE).";\n";
-echo '$b='.var_export($b,TRUE).";\n";
-echo 'var_dump(array_udiff_uassoc($a, $b, "comp_func_cr", "comp_func"));'."\n";
-var_dump(array_udiff_uassoc($a, $b, "comp_func_cr", "comp_func"));
-
-
-echo '$a='.var_export($a,TRUE).";\n";
-echo '$b='.var_export($b,TRUE).";\n";
-echo 'var_dump(array_udiff_uassoc($a, $b, array("cr", "comp_func_cr"), "comp_func"));'."\n";
-var_dump(array_udiff_uassoc($a, $b, array("cr", "comp_func_cr"), "comp_func"));
-
-
-echo '$a='.var_export($a,TRUE).";\n";
-echo '$b='.var_export($b,TRUE).";\n";
-echo 'var_dump(array_diff_assoc($a, $b));'."\n";
-var_dump(@array_diff_assoc($a, $b));
-
-
-echo '$a='.var_export($a,TRUE).";\n";
-echo '$b='.var_export($b,TRUE).";\n";
-echo 'var_dump(array_udiff($a, $b, "comp_func_cr"));'."\n";
-var_dump(array_udiff($a, $b, "comp_func_cr"));
-
-
-echo '$a='.var_export($a,TRUE).";\n";
-echo '$b='.var_export($b,TRUE).";\n";
-echo 'var_dump(array_udiff_assoc($a, $b, "comp_func_cr"));'."\n";
-var_dump(array_udiff_assoc($a, $b, "comp_func_cr"));
-
-?>
---EXPECTF--
-$a=array (
- 0 => 1,
- 'big' => 2,
- 1 => 3,
- 2 => 6,
- 3 => 3,
- 4 => 5,
- 5 => 3,
- 6 => 3,
- 7 => 3,
- 8 => 3,
- 9 => 3,
- 10 => 3,
- 11 => 3,
- 12 => 3,
- 13 => 3,
- 14 => 3,
-);
-$b=array (
- 0 => 2,
- 1 => 2,
- 2 => 3,
- 3 => 3,
- 4 => 3,
- 5 => 3,
- 6 => 3,
- 7 => 3,
- 8 => 3,
- 9 => 3,
- 10 => 3,
- 11 => 3,
- 12 => 3,
- 13 => 3,
- 14 => 3,
-);
-$c=array (
- 0 => -1,
- 1 => 1,
-);
-array(2) {
- [2]=>
- int(6)
- [4]=>
- int(5)
-}
-array(5) {
- [0]=>
- int(1)
- ["big"]=>
- int(2)
- [1]=>
- int(3)
- [2]=>
- int(6)
- [4]=>
- int(5)
-}
-$a=array (
- 'a' => 2,
- 'b' => 'some',
- 'c' => 'done',
- 'z' => 'foo',
- 'f' => 5,
- 'fan' => 'fen',
- 7 => 18,
- 9 => 25,
- 11 => 42,
- 12 => 42,
- 45 => 42,
- 73 => 'foo',
- 95 => 'some',
- 'som3' => 'some',
- 'want' => 'wanna',
-);
-$b=array (
- 'a' => 7,
- 7 => 18,
- 9 => 13,
- 11 => 42,
- 45 => 46,
- 'som3' => 'some',
- 'foo' => 'some',
- 'goo' => 'foo',
- 'f' => 5,
- 'z' => 'equal',
-);
-$c=array (
- 73 => 'foo',
- 95 => 'some',
-);
-Results:
-
-array(5) {
- ["a"]=>
- int(2)
- ["c"]=>
- string(4) "done"
- ["fan"]=>
- string(3) "fen"
- [9]=>
- int(25)
- ["want"]=>
- string(5) "wanna"
-}
-array(9) {
- ["a"]=>
- int(2)
- ["b"]=>
- string(4) "some"
- ["c"]=>
- string(4) "done"
- ["z"]=>
- string(3) "foo"
- ["fan"]=>
- string(3) "fen"
- [9]=>
- int(25)
- [12]=>
- int(42)
- [45]=>
- int(42)
- ["want"]=>
- string(5) "wanna"
-}
--=-=-=-=-=-=-=-=- New functionality from 5.0.0 -=-=-=-=-=-=-=-
-$a=array (
- '0.1' =>
- class cr {
- private $priv_member = 9;
- public $public_member = 9;
- },
- '0.5' =>
- class cr {
- private $priv_member = 12;
- public $public_member = 12;
- },
- 0 =>
- class cr {
- private $priv_member = 23;
- public $public_member = 23;
- },
- 1 =>
- class cr {
- private $priv_member = 4;
- public $public_member = 4;
- },
- 2 =>
- class cr {
- private $priv_member = -15;
- public $public_member = -15;
- },
-);
-$b=array (
- '0.2' =>
- class cr {
- private $priv_member = 9;
- public $public_member = 9;
- },
- '0.5' =>
- class cr {
- private $priv_member = 22;
- public $public_member = 22;
- },
- 0 =>
- class cr {
- private $priv_member = 3;
- public $public_member = 3;
- },
- 1 =>
- class cr {
- private $priv_member = 4;
- public $public_member = 4;
- },
- 2 =>
- class cr {
- private $priv_member = -15;
- public $public_member = -15;
- },
-);
-var_dump(array_udiff_uassoc($a, $b, "comp_func_cr", "comp_func"));
-array(3) {
- ["0.1"]=>
- object(cr)#1 (2) {
- ["priv_member:private"]=>
- int(9)
- ["public_member"]=>
- int(9)
- }
- ["0.5"]=>
- object(cr)#2 (2) {
- ["priv_member:private"]=>
- int(12)
- ["public_member"]=>
- int(12)
- }
- [0]=>
- object(cr)#3 (2) {
- ["priv_member:private"]=>
- int(23)
- ["public_member"]=>
- int(23)
- }
-}
-$a=array (
- '0.1' =>
- class cr {
- private $priv_member = 9;
- public $public_member = 9;
- },
- '0.5' =>
- class cr {
- private $priv_member = 12;
- public $public_member = 12;
- },
- 0 =>
- class cr {
- private $priv_member = 23;
- public $public_member = 23;
- },
- 1 =>
- class cr {
- private $priv_member = 4;
- public $public_member = 4;
- },
- 2 =>
- class cr {
- private $priv_member = -15;
- public $public_member = -15;
- },
-);
-$b=array (
- '0.2' =>
- class cr {
- private $priv_member = 9;
- public $public_member = 9;
- },
- '0.5' =>
- class cr {
- private $priv_member = 22;
- public $public_member = 22;
- },
- 0 =>
- class cr {
- private $priv_member = 3;
- public $public_member = 3;
- },
- 1 =>
- class cr {
- private $priv_member = 4;
- public $public_member = 4;
- },
- 2 =>
- class cr {
- private $priv_member = -15;
- public $public_member = -15;
- },
-);
-var_dump(array_udiff_uassoc($a, $b, array("cr", "comp_func_cr"), "comp_func"));
-array(3) {
- ["0.1"]=>
- object(cr)#1 (2) {
- ["priv_member:private"]=>
- int(9)
- ["public_member"]=>
- int(9)
- }
- ["0.5"]=>
- object(cr)#2 (2) {
- ["priv_member:private"]=>
- int(12)
- ["public_member"]=>
- int(12)
- }
- [0]=>
- object(cr)#3 (2) {
- ["priv_member:private"]=>
- int(23)
- ["public_member"]=>
- int(23)
- }
-}
-$a=array (
- '0.1' =>
- class cr {
- private $priv_member = 9;
- public $public_member = 9;
- },
- '0.5' =>
- class cr {
- private $priv_member = 12;
- public $public_member = 12;
- },
- 0 =>
- class cr {
- private $priv_member = 23;
- public $public_member = 23;
- },
- 1 =>
- class cr {
- private $priv_member = 4;
- public $public_member = 4;
- },
- 2 =>
- class cr {
- private $priv_member = -15;
- public $public_member = -15;
- },
-);
-$b=array (
- '0.2' =>
- class cr {
- private $priv_member = 9;
- public $public_member = 9;
- },
- '0.5' =>
- class cr {
- private $priv_member = 22;
- public $public_member = 22;
- },
- 0 =>
- class cr {
- private $priv_member = 3;
- public $public_member = 3;
- },
- 1 =>
- class cr {
- private $priv_member = 4;
- public $public_member = 4;
- },
- 2 =>
- class cr {
- private $priv_member = -15;
- public $public_member = -15;
- },
-);
-var_dump(array_diff_assoc($a, $b));
-array(5) {
- ["0.1"]=>
- object(cr)#1 (2) {
- ["priv_member:private"]=>
- int(9)
- ["public_member"]=>
- int(9)
- }
- ["0.5"]=>
- object(cr)#2 (2) {
- ["priv_member:private"]=>
- int(12)
- ["public_member"]=>
- int(12)
- }
- [0]=>
- object(cr)#3 (2) {
- ["priv_member:private"]=>
- int(23)
- ["public_member"]=>
- int(23)
- }
- [1]=>
- object(cr)#4 (2) {
- ["priv_member:private"]=>
- int(4)
- ["public_member"]=>
- int(4)
- }
- [2]=>
- object(cr)#5 (2) {
- ["priv_member:private"]=>
- int(-15)
- ["public_member"]=>
- int(-15)
- }
-}
-$a=array (
- '0.1' =>
- class cr {
- private $priv_member = 9;
- public $public_member = 9;
- },
- '0.5' =>
- class cr {
- private $priv_member = 12;
- public $public_member = 12;
- },
- 0 =>
- class cr {
- private $priv_member = 23;
- public $public_member = 23;
- },
- 1 =>
- class cr {
- private $priv_member = 4;
- public $public_member = 4;
- },
- 2 =>
- class cr {
- private $priv_member = -15;
- public $public_member = -15;
- },
-);
-$b=array (
- '0.2' =>
- class cr {
- private $priv_member = 9;
- public $public_member = 9;
- },
- '0.5' =>
- class cr {
- private $priv_member = 22;
- public $public_member = 22;
- },
- 0 =>
- class cr {
- private $priv_member = 3;
- public $public_member = 3;
- },
- 1 =>
- class cr {
- private $priv_member = 4;
- public $public_member = 4;
- },
- 2 =>
- class cr {
- private $priv_member = -15;
- public $public_member = -15;
- },
-);
-var_dump(array_udiff($a, $b, "comp_func_cr"));
-array(2) {
- ["0.5"]=>
- object(cr)#2 (2) {
- ["priv_member:private"]=>
- int(12)
- ["public_member"]=>
- int(12)
- }
- [0]=>
- object(cr)#3 (2) {
- ["priv_member:private"]=>
- int(23)
- ["public_member"]=>
- int(23)
- }
-}
-$a=array (
- '0.1' =>
- class cr {
- private $priv_member = 9;
- public $public_member = 9;
- },
- '0.5' =>
- class cr {
- private $priv_member = 12;
- public $public_member = 12;
- },
- 0 =>
- class cr {
- private $priv_member = 23;
- public $public_member = 23;
- },
- 1 =>
- class cr {
- private $priv_member = 4;
- public $public_member = 4;
- },
- 2 =>
- class cr {
- private $priv_member = -15;
- public $public_member = -15;
- },
-);
-$b=array (
- '0.2' =>
- class cr {
- private $priv_member = 9;
- public $public_member = 9;
- },
- '0.5' =>
- class cr {
- private $priv_member = 22;
- public $public_member = 22;
- },
- 0 =>
- class cr {
- private $priv_member = 3;
- public $public_member = 3;
- },
- 1 =>
- class cr {
- private $priv_member = 4;
- public $public_member = 4;
- },
- 2 =>
- class cr {
- private $priv_member = -15;
- public $public_member = -15;
- },
-);
-var_dump(array_udiff_assoc($a, $b, "comp_func_cr"));
-array(3) {
- ["0.1"]=>
- object(cr)#1 (2) {
- ["priv_member:private"]=>
- int(9)
- ["public_member"]=>
- int(9)
- }
- ["0.5"]=>
- object(cr)#2 (2) {
- ["priv_member:private"]=>
- int(12)
- ["public_member"]=>
- int(12)
- }
- [0]=>
- object(cr)#3 (2) {
- ["priv_member:private"]=>
- int(23)
- ["public_member"]=>
- int(23)
- }
-}
diff --git a/ext/standard/tests/array/008.phpt b/ext/standard/tests/array/008.phpt
deleted file mode 100644
index a3dde36296..0000000000
--- a/ext/standard/tests/array/008.phpt
+++ /dev/null
@@ -1,310 +0,0 @@
---TEST--
-Test array_intersect and array_intersect_assoc behaviour
---FILE--
-<?php
-//-=-=-=-=--=-=-=-=-=-=-=-=-=-=-=-=- TEST 1 -=-=-=-=-
-$a = array(1,"big"=>2,2,6,3,5,3,3,454,'some_string',3,3,3,3,3,3,3,3,17);
-$b = array(2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,17,25,'some_string',7,8,9,109,78,17);
-$c = array(-1,2,1,15,25,17);
-echo str_repeat("-=",10)." TEST 1 ".str_repeat("-=",20)."\n";
-echo '$a='.var_export($a,TRUE).";\n";
-echo '$b='.var_export($b,TRUE).";\n";
-echo '$c='.var_export($c,TRUE).";\n";
-
-echo 'array_intersect($a,$b,$c);'."\n";
-var_dump(array_intersect($a,$b,$c));
-
-echo 'array_intersect_assoc($a,$b,$c);'."\n";
-var_dump(array_intersect_assoc($a,$b,$c));
-
-echo 'array_intersect($a,$b);'."\n";
-var_dump(array_intersect($a,$b));
-
-echo 'array_intersect_assoc($a,$b);'."\n";
-var_dump(array_intersect_assoc($a,$b));
-
-//-=-==-=-=-=-=-=-=-=-=-=-=-=-=-=-=- TEST 2 -=-=-=-=-=-
-$a = array(
-'a'=>2,
-'b'=>'some',
-'c'=>'done',
-'z'=>'foo',
-'f'=>5,
-'fan'=>'fen',
-'bad'=>'bed',
-'gate'=>'web',
-7=>18,
-9=>25,
-11=>42,
-12=>42,
-45=>42,
-73=>'foo',
-95=>'some',
-'som3'=>'some',
-'want'=>'wanna');
-
-
-$b = array(
-'a'=>7,
-7=>18,
-9=>13,
-11=>42,
-45=>46,
-'som3'=>'some',
-'foo'=>'some',
-'goo'=>'foo',
-'f'=>5,
-'z'=>'equal',
-'gate'=>'web'
-);
-$c = array(
-'gate'=>'web',
-73=>'foo',
-95=>'some'
-);
-
-echo str_repeat("-=",10)." TEST 2 ".str_repeat("-=",20)."\n";
-echo '$a='.var_export($a,TRUE).";\n";
-echo '$b='.var_export($b,TRUE).";\n";
-echo '$c='.var_export($c,TRUE).";\n";
-echo "\n\nResults:\n\n";
-
-echo 'array_intersect($a,$b,$c);'."\n";
-var_dump(array_intersect($a,$b,$c));
-
-echo 'array_intersect_assoc($a,$b,$c);'."\n";
-var_dump(array_intersect_assoc($a,$b,$c));
-
-echo 'array_intersect($a,$b);'."\n";
-var_dump(array_intersect($a,$b));
-
-echo 'array_intersect_assoc($a,$b);'."\n";
-var_dump(array_intersect_assoc($a,$b));
-?>
---EXPECT--
--=-=-=-=-=-=-=-=-=-= TEST 1 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
-$a=array (
- 0 => 1,
- 'big' => 2,
- 1 => 2,
- 2 => 6,
- 3 => 3,
- 4 => 5,
- 5 => 3,
- 6 => 3,
- 7 => 454,
- 8 => 'some_string',
- 9 => 3,
- 10 => 3,
- 11 => 3,
- 12 => 3,
- 13 => 3,
- 14 => 3,
- 15 => 3,
- 16 => 3,
- 17 => 17,
-);
-$b=array (
- 0 => 2,
- 1 => 2,
- 2 => 3,
- 3 => 3,
- 4 => 3,
- 5 => 3,
- 6 => 3,
- 7 => 3,
- 8 => 3,
- 9 => 3,
- 10 => 3,
- 11 => 3,
- 12 => 3,
- 13 => 3,
- 14 => 3,
- 15 => 17,
- 16 => 25,
- 17 => 'some_string',
- 18 => 7,
- 19 => 8,
- 20 => 9,
- 21 => 109,
- 22 => 78,
- 23 => 17,
-);
-$c=array (
- 0 => -1,
- 1 => 2,
- 2 => 1,
- 3 => 15,
- 4 => 25,
- 5 => 17,
-);
-array_intersect($a,$b,$c);
-array(3) {
- ["big"]=>
- int(2)
- [1]=>
- int(2)
- [17]=>
- int(17)
-}
-array_intersect_assoc($a,$b,$c);
-array(1) {
- [1]=>
- int(2)
-}
-array_intersect($a,$b);
-array(15) {
- ["big"]=>
- int(2)
- [1]=>
- int(2)
- [3]=>
- int(3)
- [5]=>
- int(3)
- [6]=>
- int(3)
- [8]=>
- string(11) "some_string"
- [9]=>
- int(3)
- [10]=>
- int(3)
- [11]=>
- int(3)
- [12]=>
- int(3)
- [13]=>
- int(3)
- [14]=>
- int(3)
- [15]=>
- int(3)
- [16]=>
- int(3)
- [17]=>
- int(17)
-}
-array_intersect_assoc($a,$b);
-array(10) {
- [1]=>
- int(2)
- [3]=>
- int(3)
- [5]=>
- int(3)
- [6]=>
- int(3)
- [9]=>
- int(3)
- [10]=>
- int(3)
- [11]=>
- int(3)
- [12]=>
- int(3)
- [13]=>
- int(3)
- [14]=>
- int(3)
-}
--=-=-=-=-=-=-=-=-=-= TEST 2 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
-$a=array (
- 'a' => 2,
- 'b' => 'some',
- 'c' => 'done',
- 'z' => 'foo',
- 'f' => 5,
- 'fan' => 'fen',
- 'bad' => 'bed',
- 'gate' => 'web',
- 7 => 18,
- 9 => 25,
- 11 => 42,
- 12 => 42,
- 45 => 42,
- 73 => 'foo',
- 95 => 'some',
- 'som3' => 'some',
- 'want' => 'wanna',
-);
-$b=array (
- 'a' => 7,
- 7 => 18,
- 9 => 13,
- 11 => 42,
- 45 => 46,
- 'som3' => 'some',
- 'foo' => 'some',
- 'goo' => 'foo',
- 'f' => 5,
- 'z' => 'equal',
- 'gate' => 'web',
-);
-$c=array (
- 'gate' => 'web',
- 73 => 'foo',
- 95 => 'some',
-);
-
-
-Results:
-
-array_intersect($a,$b,$c);
-array(6) {
- ["b"]=>
- string(4) "some"
- ["z"]=>
- string(3) "foo"
- ["gate"]=>
- string(3) "web"
- [73]=>
- string(3) "foo"
- [95]=>
- string(4) "some"
- ["som3"]=>
- string(4) "some"
-}
-array_intersect_assoc($a,$b,$c);
-array(1) {
- ["gate"]=>
- string(3) "web"
-}
-array_intersect($a,$b);
-array(11) {
- ["b"]=>
- string(4) "some"
- ["z"]=>
- string(3) "foo"
- ["f"]=>
- int(5)
- ["gate"]=>
- string(3) "web"
- [7]=>
- int(18)
- [11]=>
- int(42)
- [12]=>
- int(42)
- [45]=>
- int(42)
- [73]=>
- string(3) "foo"
- [95]=>
- string(4) "some"
- ["som3"]=>
- string(4) "some"
-}
-array_intersect_assoc($a,$b);
-array(5) {
- ["f"]=>
- int(5)
- ["gate"]=>
- string(3) "web"
- [7]=>
- int(18)
- [11]=>
- int(42)
- ["som3"]=>
- string(4) "some"
-}
diff --git a/ext/standard/tests/array/array_change_key_case.phpt b/ext/standard/tests/array/array_change_key_case.phpt
deleted file mode 100644
index 0cd1d8203a..0000000000
--- a/ext/standard/tests/array/array_change_key_case.phpt
+++ /dev/null
@@ -1,769 +0,0 @@
---TEST--
-array_change_key_case()
---FILE--
-<?php
-$arrays = array (
- array (),
- array (0),
- array (1),
- array (-1),
- array (0, 2, 3, 4, 5),
- array (1, 2, 3, 4, 5),
- array ("" => 1),
- array ("a" => 1),
- array ("Z" => 1),
- array ("one" => 1),
- array ("ONE" => 1),
- array ("OnE" => 1),
- array ("oNe" => 1),
- array ("one" => 1, "two" => 2),
- array ("ONE" => 1, "two" => 2),
- array ("OnE" => 1, "two" => 2),
- array ("oNe" => 1, "two" => 2),
- array ("one" => 1, "TWO" => 2),
- array ("ONE" => 1, "TWO" => 2),
- array ("OnE" => 1, "TWO" => 2),
- array ("oNe" => 1, "TWO" => 2),
- array ("one" => 1, "TwO" => 2),
- array ("ONE" => 1, "TwO" => 2),
- array ("OnE" => 1, "TwO" => 2),
- array ("oNe" => 1, "TwO" => 2),
- array ("one" => 1, "tWo" => 2),
- array ("ONE" => 1, "tWo" => 2),
- array ("OnE" => 1, "tWo" => 2),
- array ("oNe" => 1, "tWo" => 2),
- array ("one" => 1, 2),
- array ("ONE" => 1, 2),
- array ("OnE" => 1, 2),
- array ("oNe" => 1, 2),
- array ("ONE" => 1, "TWO" => 2, "THREE" => 3, "FOUR" => "four"),
- array ("one" => 1, "two" => 2, "three" => 3, "four" => "FOUR"),
- array ("ONE" => 1, "TWO" => 2, "three" => 3, "four" => "FOUR"),
- array ("one" => 1, "two" => 2, "THREE" => 3, "FOUR" => "four")
-);
-
-foreach ($arrays as $item) {
- var_dump(array_change_key_case($item));
- var_dump(array_change_key_case($item, CASE_UPPER));
- var_dump(array_change_key_case($item, CASE_LOWER));
- echo "\n";
-}
-echo "end\n";
-?>
---EXPECT--
-array(0) {
-}
-array(0) {
-}
-array(0) {
-}
-
-array(1) {
- [0]=>
- int(0)
-}
-array(1) {
- [0]=>
- int(0)
-}
-array(1) {
- [0]=>
- int(0)
-}
-
-array(1) {
- [0]=>
- int(1)
-}
-array(1) {
- [0]=>
- int(1)
-}
-array(1) {
- [0]=>
- int(1)
-}
-
-array(1) {
- [0]=>
- int(-1)
-}
-array(1) {
- [0]=>
- int(-1)
-}
-array(1) {
- [0]=>
- int(-1)
-}
-
-array(5) {
- [0]=>
- int(0)
- [1]=>
- int(2)
- [2]=>
- int(3)
- [3]=>
- int(4)
- [4]=>
- int(5)
-}
-array(5) {
- [0]=>
- int(0)
- [1]=>
- int(2)
- [2]=>
- int(3)
- [3]=>
- int(4)
- [4]=>
- int(5)
-}
-array(5) {
- [0]=>
- int(0)
- [1]=>
- int(2)
- [2]=>
- int(3)
- [3]=>
- int(4)
- [4]=>
- int(5)
-}
-
-array(5) {
- [0]=>
- int(1)
- [1]=>
- int(2)
- [2]=>
- int(3)
- [3]=>
- int(4)
- [4]=>
- int(5)
-}
-array(5) {
- [0]=>
- int(1)
- [1]=>
- int(2)
- [2]=>
- int(3)
- [3]=>
- int(4)
- [4]=>
- int(5)
-}
-array(5) {
- [0]=>
- int(1)
- [1]=>
- int(2)
- [2]=>
- int(3)
- [3]=>
- int(4)
- [4]=>
- int(5)
-}
-
-array(1) {
- [""]=>
- int(1)
-}
-array(1) {
- [""]=>
- int(1)
-}
-array(1) {
- [""]=>
- int(1)
-}
-
-array(1) {
- ["a"]=>
- int(1)
-}
-array(1) {
- ["A"]=>
- int(1)
-}
-array(1) {
- ["a"]=>
- int(1)
-}
-
-array(1) {
- ["z"]=>
- int(1)
-}
-array(1) {
- ["Z"]=>
- int(1)
-}
-array(1) {
- ["z"]=>
- int(1)
-}
-
-array(1) {
- ["one"]=>
- int(1)
-}
-array(1) {
- ["ONE"]=>
- int(1)
-}
-array(1) {
- ["one"]=>
- int(1)
-}
-
-array(1) {
- ["one"]=>
- int(1)
-}
-array(1) {
- ["ONE"]=>
- int(1)
-}
-array(1) {
- ["one"]=>
- int(1)
-}
-
-array(1) {
- ["one"]=>
- int(1)
-}
-array(1) {
- ["ONE"]=>
- int(1)
-}
-array(1) {
- ["one"]=>
- int(1)
-}
-
-array(1) {
- ["one"]=>
- int(1)
-}
-array(1) {
- ["ONE"]=>
- int(1)
-}
-array(1) {
- ["one"]=>
- int(1)
-}
-
-array(2) {
- ["one"]=>
- int(1)
- ["two"]=>
- int(2)
-}
-array(2) {
- ["ONE"]=>
- int(1)
- ["TWO"]=>
- int(2)
-}
-array(2) {
- ["one"]=>
- int(1)
- ["two"]=>
- int(2)
-}
-
-array(2) {
- ["one"]=>
- int(1)
- ["two"]=>
- int(2)
-}
-array(2) {
- ["ONE"]=>
- int(1)
- ["TWO"]=>
- int(2)
-}
-array(2) {
- ["one"]=>
- int(1)
- ["two"]=>
- int(2)
-}
-
-array(2) {
- ["one"]=>
- int(1)
- ["two"]=>
- int(2)
-}
-array(2) {
- ["ONE"]=>
- int(1)
- ["TWO"]=>
- int(2)
-}
-array(2) {
- ["one"]=>
- int(1)
- ["two"]=>
- int(2)
-}
-
-array(2) {
- ["one"]=>
- int(1)
- ["two"]=>
- int(2)
-}
-array(2) {
- ["ONE"]=>
- int(1)
- ["TWO"]=>
- int(2)
-}
-array(2) {
- ["one"]=>
- int(1)
- ["two"]=>
- int(2)
-}
-
-array(2) {
- ["one"]=>
- int(1)
- ["two"]=>
- int(2)
-}
-array(2) {
- ["ONE"]=>
- int(1)
- ["TWO"]=>
- int(2)
-}
-array(2) {
- ["one"]=>
- int(1)
- ["two"]=>
- int(2)
-}
-
-array(2) {
- ["one"]=>
- int(1)
- ["two"]=>
- int(2)
-}
-array(2) {
- ["ONE"]=>
- int(1)
- ["TWO"]=>
- int(2)
-}
-array(2) {
- ["one"]=>
- int(1)
- ["two"]=>
- int(2)
-}
-
-array(2) {
- ["one"]=>
- int(1)
- ["two"]=>
- int(2)
-}
-array(2) {
- ["ONE"]=>
- int(1)
- ["TWO"]=>
- int(2)
-}
-array(2) {
- ["one"]=>
- int(1)
- ["two"]=>
- int(2)
-}
-
-array(2) {
- ["one"]=>
- int(1)
- ["two"]=>
- int(2)
-}
-array(2) {
- ["ONE"]=>
- int(1)
- ["TWO"]=>
- int(2)
-}
-array(2) {
- ["one"]=>
- int(1)
- ["two"]=>
- int(2)
-}
-
-array(2) {
- ["one"]=>
- int(1)
- ["two"]=>
- int(2)
-}
-array(2) {
- ["ONE"]=>
- int(1)
- ["TWO"]=>
- int(2)
-}
-array(2) {
- ["one"]=>
- int(1)
- ["two"]=>
- int(2)
-}
-
-array(2) {
- ["one"]=>
- int(1)
- ["two"]=>
- int(2)
-}
-array(2) {
- ["ONE"]=>
- int(1)
- ["TWO"]=>
- int(2)
-}
-array(2) {
- ["one"]=>
- int(1)
- ["two"]=>
- int(2)
-}
-
-array(2) {
- ["one"]=>
- int(1)
- ["two"]=>
- int(2)
-}
-array(2) {
- ["ONE"]=>
- int(1)
- ["TWO"]=>
- int(2)
-}
-array(2) {
- ["one"]=>
- int(1)
- ["two"]=>
- int(2)
-}
-
-array(2) {
- ["one"]=>
- int(1)
- ["two"]=>
- int(2)
-}
-array(2) {
- ["ONE"]=>
- int(1)
- ["TWO"]=>
- int(2)
-}
-array(2) {
- ["one"]=>
- int(1)
- ["two"]=>
- int(2)
-}
-
-array(2) {
- ["one"]=>
- int(1)
- ["two"]=>
- int(2)
-}
-array(2) {
- ["ONE"]=>
- int(1)
- ["TWO"]=>
- int(2)
-}
-array(2) {
- ["one"]=>
- int(1)
- ["two"]=>
- int(2)
-}
-
-array(2) {
- ["one"]=>
- int(1)
- ["two"]=>
- int(2)
-}
-array(2) {
- ["ONE"]=>
- int(1)
- ["TWO"]=>
- int(2)
-}
-array(2) {
- ["one"]=>
- int(1)
- ["two"]=>
- int(2)
-}
-
-array(2) {
- ["one"]=>
- int(1)
- ["two"]=>
- int(2)
-}
-array(2) {
- ["ONE"]=>
- int(1)
- ["TWO"]=>
- int(2)
-}
-array(2) {
- ["one"]=>
- int(1)
- ["two"]=>
- int(2)
-}
-
-array(2) {
- ["one"]=>
- int(1)
- ["two"]=>
- int(2)
-}
-array(2) {
- ["ONE"]=>
- int(1)
- ["TWO"]=>
- int(2)
-}
-array(2) {
- ["one"]=>
- int(1)
- ["two"]=>
- int(2)
-}
-
-array(2) {
- ["one"]=>
- int(1)
- [0]=>
- int(2)
-}
-array(2) {
- ["ONE"]=>
- int(1)
- [0]=>
- int(2)
-}
-array(2) {
- ["one"]=>
- int(1)
- [0]=>
- int(2)
-}
-
-array(2) {
- ["one"]=>
- int(1)
- [0]=>
- int(2)
-}
-array(2) {
- ["ONE"]=>
- int(1)
- [0]=>
- int(2)
-}
-array(2) {
- ["one"]=>
- int(1)
- [0]=>
- int(2)
-}
-
-array(2) {
- ["one"]=>
- int(1)
- [0]=>
- int(2)
-}
-array(2) {
- ["ONE"]=>
- int(1)
- [0]=>
- int(2)
-}
-array(2) {
- ["one"]=>
- int(1)
- [0]=>
- int(2)
-}
-
-array(2) {
- ["one"]=>
- int(1)
- [0]=>
- int(2)
-}
-array(2) {
- ["ONE"]=>
- int(1)
- [0]=>
- int(2)
-}
-array(2) {
- ["one"]=>
- int(1)
- [0]=>
- int(2)
-}
-
-array(4) {
- ["one"]=>
- int(1)
- ["two"]=>
- int(2)
- ["three"]=>
- int(3)
- ["four"]=>
- string(4) "four"
-}
-array(4) {
- ["ONE"]=>
- int(1)
- ["TWO"]=>
- int(2)
- ["THREE"]=>
- int(3)
- ["FOUR"]=>
- string(4) "four"
-}
-array(4) {
- ["one"]=>
- int(1)
- ["two"]=>
- int(2)
- ["three"]=>
- int(3)
- ["four"]=>
- string(4) "four"
-}
-
-array(4) {
- ["one"]=>
- int(1)
- ["two"]=>
- int(2)
- ["three"]=>
- int(3)
- ["four"]=>
- string(4) "FOUR"
-}
-array(4) {
- ["ONE"]=>
- int(1)
- ["TWO"]=>
- int(2)
- ["THREE"]=>
- int(3)
- ["FOUR"]=>
- string(4) "FOUR"
-}
-array(4) {
- ["one"]=>
- int(1)
- ["two"]=>
- int(2)
- ["three"]=>
- int(3)
- ["four"]=>
- string(4) "FOUR"
-}
-
-array(4) {
- ["one"]=>
- int(1)
- ["two"]=>
- int(2)
- ["three"]=>
- int(3)
- ["four"]=>
- string(4) "FOUR"
-}
-array(4) {
- ["ONE"]=>
- int(1)
- ["TWO"]=>
- int(2)
- ["THREE"]=>
- int(3)
- ["FOUR"]=>
- string(4) "FOUR"
-}
-array(4) {
- ["one"]=>
- int(1)
- ["two"]=>
- int(2)
- ["three"]=>
- int(3)
- ["four"]=>
- string(4) "FOUR"
-}
-
-array(4) {
- ["one"]=>
- int(1)
- ["two"]=>
- int(2)
- ["three"]=>
- int(3)
- ["four"]=>
- string(4) "four"
-}
-array(4) {
- ["ONE"]=>
- int(1)
- ["TWO"]=>
- int(2)
- ["THREE"]=>
- int(3)
- ["FOUR"]=>
- string(4) "four"
-}
-array(4) {
- ["one"]=>
- int(1)
- ["two"]=>
- int(2)
- ["three"]=>
- int(3)
- ["four"]=>
- string(4) "four"
-}
-
-end
diff --git a/ext/standard/tests/array/array_chunk.phpt b/ext/standard/tests/array/array_chunk.phpt
deleted file mode 100644
index 061c6994bf..0000000000
--- a/ext/standard/tests/array/array_chunk.phpt
+++ /dev/null
@@ -1,5326 +0,0 @@
---TEST--
-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";
- }
- 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_count_values.phpt b/ext/standard/tests/array/array_count_values.phpt
deleted file mode 100644
index d9a3ba3d5a..0000000000
--- a/ext/standard/tests/array/array_count_values.phpt
+++ /dev/null
@@ -1,95 +0,0 @@
---TEST--
-array_count_values()
---FILE--
-<?php
-$arrays = array (
- array (),
- array (0),
- array (1),
- array (-1),
- array (0, 0),
- array (0, 1),
- array (1, 1),
- array (1, "hello", 1, "world", "hello"),
- array ("hello", "world", "hello"),
- array ("", "world", "", "hello", "world", "hello", "hello", "world", "hello"),
- array (0, array (1, "hello", 1, "world", "hello")),
- array (1, array (1, "hello", 1, "world", "hello"), array (1, "hello", 1, "world", "hello"), array (1, "hello", 1, "world", "hello")),
-);
-
-foreach ($arrays as $item) {
- var_dump (@array_count_values ($item));
- echo "\n";
-}
-?>
---EXPECT--
-array(0) {
-}
-
-array(1) {
- [0]=>
- int(1)
-}
-
-array(1) {
- [1]=>
- int(1)
-}
-
-array(1) {
- [-1]=>
- int(1)
-}
-
-array(1) {
- [0]=>
- int(2)
-}
-
-array(2) {
- [0]=>
- int(1)
- [1]=>
- int(1)
-}
-
-array(1) {
- [1]=>
- int(2)
-}
-
-array(3) {
- [1]=>
- int(2)
- ["hello"]=>
- int(2)
- ["world"]=>
- int(1)
-}
-
-array(2) {
- ["hello"]=>
- int(2)
- ["world"]=>
- int(1)
-}
-
-array(3) {
- [""]=>
- int(2)
- ["world"]=>
- int(3)
- ["hello"]=>
- int(4)
-}
-
-array(1) {
- [0]=>
- int(1)
-}
-
-array(1) {
- [1]=>
- int(1)
-}
-
diff --git a/ext/standard/tests/array/array_diff_1.phpt b/ext/standard/tests/array/array_diff_1.phpt
deleted file mode 100644
index a25d19d5ca..0000000000
--- a/ext/standard/tests/array/array_diff_1.phpt
+++ /dev/null
@@ -1,15 +0,0 @@
---TEST--
-Test array_diff when non-array is passed
---FILE--
-<?php
-//-=-=-=-=-
-$a = array();
-$b = 3;
-$c = array(5);
-array_diff($a, $b, $c);
-//-=-=-=-=-=-
-echo "OK!";
-?>
---EXPECTF--
-Warning: array_diff(): Argument #2 is not an array in %s
-OK!
diff --git a/ext/standard/tests/array/array_diff_key.phpt b/ext/standard/tests/array/array_diff_key.phpt
deleted file mode 100644
index 91664a8711..0000000000
--- a/ext/standard/tests/array/array_diff_key.phpt
+++ /dev/null
@@ -1,250 +0,0 @@
---TEST--
-Test of the array_diff_key() and array_diff_ukey()
---FILE--
-<?php
-$a = array(1, 6, 2, -20, 15, 1200, -2500);
-$b = array(0, 7, 2, -20, 11, 1100, -2500);
-$c = array(0, 6, 2, -20, 19, 1000, -2500);
-$d = array(3, 8,-2, -20, 14, 900, -2600);
-$a_f = array_flip($a);
-$b_f = array_flip($b);
-$c_f = array_flip($c);
-$d_f = array_flip($d);
-$i = 1;
-/* give nicer values */
-foreach ($a_f as $k=> &$a_f_el) { $a_f_el =$k*2;}
-foreach ($b_f as $k=> &$b_f_el) { $b_f_el =$k*2;}
-foreach ($c_f as $k=> &$c_f_el) { $c_f_el =$k*2;}
-foreach ($d_f as $k=> &$d_f_el) { $d_f_el =$k*2;}
-
-echo "------ Test $i --------\n";$i++;// 1
-var_dump(array_diff_key($a_f, $b_f));// keys -> 1, 6, 15, 1200
-var_dump(array_diff_ukey($a_f, $b_f, "comp_func"));// 1, 6, 15, 1200
-
-echo "------ Test $i --------\n";$i++;// 2
-var_dump(array_diff_key($a_f, $c_f));// keys -> 1, 15, 1200
-var_dump(array_diff_ukey($a_f, $c_f, "comp_func"));// 1, 15, 1200
-
-echo "------ Test $i --------\n";$i++;// 3
-var_dump(array_diff_key($a_f, $d_f));// 1, 6, 2, 15, 1200, -2500
-var_dump(array_diff_ukey($a_f, $d_f, "comp_func"));// 1, 6, 2, 15, 1200, -2500
-
-echo "------ Test $i --------\n";$i++;// 4
-var_dump(array_diff_key($a_f, $b_f, $c_f));// 1, 15, 1200
-var_dump(array_diff_ukey($a_f, $b_f, $c_f, "comp_func"));// 1, 15, 1200
-
-echo "------ Test $i --------\n";$i++;// 5
-var_dump(array_diff_key($a_f, $b_f, $d_f));// 1, 6, 15, 1200
-var_dump(array_diff_ukey($a_f, $b_f, $d_f, "comp_func"));// 1, 6, 15, 1200
-
-
-echo "------ Test $i --------\n";$i++;// 6
-var_dump(array_diff_key($a_f, $b_f, $c_f, $d_f));// 1, 15, 1200
-var_dump(array_diff_ukey($a_f, $b_f, $c_f, $d_f, "comp_func"));//1, 15, 1200
-
-
-echo "------ Test $i --------\n";$i++;// 7
-var_dump(array_diff_key($b_f, $c_f));// 7, 11, 1100
-var_dump(array_diff_ukey($b_f, $c_f, "comp_func"));//7, 11, 1100
-
-echo "------ Test $i --------\n";$i++;// 8
-var_dump(array_diff_key($b_f, $d_f));//0, 7, 2, 11, 1100, -2500
-var_dump(array_diff_ukey($b_f, $d_f, "comp_func"));//0, 7, 2, 11, 1100, -2500
-
-
-echo "------ Test $i --------\n";$i++;// 9
-var_dump(array_diff_key($b_f, $c_f, $d_f));// 7, 11, 1100
-var_dump(array_diff_ukey($b_f, $c_f, $d_f, "comp_func"));// 7, 11, 1000
-
-function comp_func($a, $b) {
- if ($a === $b) return 0;
- return ($a > $b)? 1:-1;
-
-}
-?>
---EXPECTF--
------- Test 1 --------
-array(4) {
- [1]=>
- &int(2)
- [6]=>
- &int(12)
- [15]=>
- &int(30)
- [1200]=>
- &int(2400)
-}
-array(4) {
- [1]=>
- int(2)
- [6]=>
- int(12)
- [15]=>
- int(30)
- [1200]=>
- int(2400)
-}
------- Test 2 --------
-array(3) {
- [1]=>
- int(2)
- [15]=>
- int(30)
- [1200]=>
- int(2400)
-}
-array(3) {
- [1]=>
- int(2)
- [15]=>
- int(30)
- [1200]=>
- int(2400)
-}
------- Test 3 --------
-array(6) {
- [1]=>
- int(2)
- [6]=>
- int(12)
- [2]=>
- int(4)
- [15]=>
- int(30)
- [1200]=>
- int(2400)
- [-2500]=>
- &int(-5000)
-}
-array(6) {
- [1]=>
- int(2)
- [6]=>
- int(12)
- [2]=>
- int(4)
- [15]=>
- int(30)
- [1200]=>
- int(2400)
- [-2500]=>
- &int(-5000)
-}
------- Test 4 --------
-array(3) {
- [1]=>
- int(2)
- [15]=>
- int(30)
- [1200]=>
- int(2400)
-}
-array(3) {
- [1]=>
- int(2)
- [15]=>
- int(30)
- [1200]=>
- int(2400)
-}
------- Test 5 --------
-array(4) {
- [1]=>
- int(2)
- [6]=>
- int(12)
- [15]=>
- int(30)
- [1200]=>
- int(2400)
-}
-array(4) {
- [1]=>
- int(2)
- [6]=>
- int(12)
- [15]=>
- int(30)
- [1200]=>
- int(2400)
-}
------- Test 6 --------
-array(3) {
- [1]=>
- int(2)
- [15]=>
- int(30)
- [1200]=>
- int(2400)
-}
-array(3) {
- [1]=>
- int(2)
- [15]=>
- int(30)
- [1200]=>
- int(2400)
-}
------- Test 7 --------
-array(3) {
- [7]=>
- &int(14)
- [11]=>
- &int(22)
- [1100]=>
- &int(2200)
-}
-array(3) {
- [7]=>
- int(14)
- [11]=>
- int(22)
- [1100]=>
- int(2200)
-}
------- Test 8 --------
-array(6) {
- [0]=>
- int(0)
- [7]=>
- int(14)
- [2]=>
- int(4)
- [11]=>
- int(22)
- [1100]=>
- int(2200)
- [-2500]=>
- &int(-5000)
-}
-array(6) {
- [0]=>
- int(0)
- [7]=>
- int(14)
- [2]=>
- int(4)
- [11]=>
- int(22)
- [1100]=>
- int(2200)
- [-2500]=>
- &int(-5000)
-}
------- Test 9 --------
-array(3) {
- [7]=>
- int(14)
- [11]=>
- int(22)
- [1100]=>
- int(2200)
-}
-array(3) {
- [7]=>
- int(14)
- [11]=>
- int(22)
- [1100]=>
- int(2200)
-}
diff --git a/ext/standard/tests/array/array_intersect_1.phpt b/ext/standard/tests/array/array_intersect_1.phpt
deleted file mode 100644
index 1fed25dcb2..0000000000
--- a/ext/standard/tests/array/array_intersect_1.phpt
+++ /dev/null
@@ -1,565 +0,0 @@
---TEST--
-Test of the *intersect* bunch of functions (both assoc and non-assoc)
---FILE--
-<?php
-error_reporting(E_ALL);
-class cr {
- private $priv_member;
- public $public_member;
- function cr($val) {
- $this->priv_member = $val;
- $this->public_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;
- }
-}
-
-function comp_func($a, $b) {
- if ($a === $b) return 0;
- return ($a > $b)? 1:-1;
-
-}
-
-function comp_func_cr($a, $b) {
- if ($a->public_member === $b->public_member) return 0;
- return ($a->public_member > $b->public_member)? 1:-1;
-}
-
-$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),);
-
-/* array_intersect() */
-echo "begin ------------ array_intersect() ----------------------------\n";
-echo '$a='.var_export($a,TRUE).";\n";
-echo '$b='.var_export($b,TRUE).";\n";
-echo 'var_dump(array_intersect($a, $b);'."\n";
-var_dump(@array_intersect($a, $b));
-echo "end ------------ array_intersect() ----------------------------\n";
-
-/* array_uintersect() */
-echo "begin ------------ array_uintersect() ---------------------------\n";
-echo '$a='.var_export($a,TRUE).";\n";
-echo '$b='.var_export($b,TRUE).";\n";
-echo 'var_dump(array_uintersect($a, $b, "comp_func_cr"));'."\n";
-var_dump(array_uintersect($a, $b, "comp_func_cr"));
-echo "end ------------ array_uintersect() ---------------------------\n";
-
-/* array_intersect_assoc() */
-echo "begin ------------ array_intersect_assoc() ----------------------\n";
-echo '$a='.var_export($a,TRUE).";\n";
-echo '$b='.var_export($b,TRUE).";\n";
-echo 'var_dump(array_intersect_assoc($a, $b));'."\n";
-var_dump(@array_intersect_assoc($a, $b));
-echo "end ------------ array_intersect_assoc() ----------------------\n";
-
-/* array_uintersect_assoc() */
-echo "begin ------------ array_uintersect_assoc() ---------------------\n";
-echo '$a='.var_export($a,TRUE).";\n";
-echo '$b='.var_export($b,TRUE).";\n";
-echo 'var_dump(array_uintersect_assoc($a, $b, "comp_func_cr"));'."\n";
-var_dump(array_uintersect_assoc($a, $b, "comp_func_cr"));
-echo "end ------------ array_uintersect_assoc() ---------------------\n";
-
-/* array_intersect_uassoc() */
-echo "begin ------------ array_intersect_uassoc() ---------------------\n";
-echo '$a='.var_export($a,TRUE).";\n";
-echo '$b='.var_export($b,TRUE).";\n";
-echo 'var_dump(array_intersect_uassoc($a, $b, "comp_func"));'."\n";
-var_dump(@array_intersect_uassoc($a, $b, "comp_func"));
-echo "end ------------ array_intersect_uassoc() ---------------------\n";
-
-/* array_uintersect_uassoc() - with ordinary function */
-echo "begin ------------ array_uintersect_uassoc() with ordinary func -\n";
-echo '$a='.var_export($a,TRUE).";\n";
-echo '$b='.var_export($b,TRUE).";\n";
-echo 'var_dump(array_uintersect_uassoc($a, $b, "comp_func_cr", "comp_func"));'."\n";
-var_dump(array_uintersect_uassoc($a, $b, "comp_func_cr", "comp_func"));
-echo "end ------------ array_uintersect_uassoc() with ordinary func -\n";
-
-/* array_uintersect_uassoc() - by method call */
-echo "begin ------------ array_uintersect_uassoc() with method --------\n";
-echo '$a='.var_export($a,TRUE).";\n";
-echo '$b='.var_export($b,TRUE).";\n";
-echo 'var_dump(array_uintersect_uassoc($a, $b, array("cr", "comp_func_cr"), "comp_func"));'."\n";
-var_dump(array_uintersect_uassoc($a, $b, array("cr", "comp_func_cr"), "comp_func"));
-echo "end ------------ array_uintersect_uassoc() with method --------\n";
-?>
---EXPECTF--
-begin ------------ array_intersect() ----------------------------
-$a=array (
- '0.1' =>
- class cr {
- private $priv_member = 9;
- public $public_member = 9;
- },
- '0.5' =>
- class cr {
- private $priv_member = 12;
- public $public_member = 12;
- },
- 0 =>
- class cr {
- private $priv_member = 23;
- public $public_member = 23;
- },
- 1 =>
- class cr {
- private $priv_member = 4;
- public $public_member = 4;
- },
- 2 =>
- class cr {
- private $priv_member = -15;
- public $public_member = -15;
- },
-);
-$b=array (
- '0.2' =>
- class cr {
- private $priv_member = 9;
- public $public_member = 9;
- },
- '0.5' =>
- class cr {
- private $priv_member = 22;
- public $public_member = 22;
- },
- 0 =>
- class cr {
- private $priv_member = 3;
- public $public_member = 3;
- },
- 1 =>
- class cr {
- private $priv_member = 4;
- public $public_member = 4;
- },
- 2 =>
- class cr {
- private $priv_member = -15;
- public $public_member = -15;
- },
-);
-var_dump(array_intersect($a, $b);
-array(0) {
-}
-end ------------ array_intersect() ----------------------------
-begin ------------ array_uintersect() ---------------------------
-$a=array (
- '0.1' =>
- class cr {
- private $priv_member = 9;
- public $public_member = 9;
- },
- '0.5' =>
- class cr {
- private $priv_member = 12;
- public $public_member = 12;
- },
- 0 =>
- class cr {
- private $priv_member = 23;
- public $public_member = 23;
- },
- 1 =>
- class cr {
- private $priv_member = 4;
- public $public_member = 4;
- },
- 2 =>
- class cr {
- private $priv_member = -15;
- public $public_member = -15;
- },
-);
-$b=array (
- '0.2' =>
- class cr {
- private $priv_member = 9;
- public $public_member = 9;
- },
- '0.5' =>
- class cr {
- private $priv_member = 22;
- public $public_member = 22;
- },
- 0 =>
- class cr {
- private $priv_member = 3;
- public $public_member = 3;
- },
- 1 =>
- class cr {
- private $priv_member = 4;
- public $public_member = 4;
- },
- 2 =>
- class cr {
- private $priv_member = -15;
- public $public_member = -15;
- },
-);
-var_dump(array_uintersect($a, $b, "comp_func_cr"));
-array(3) {
- ["0.1"]=>
- object(cr)#1 (2) {
- ["priv_member:private"]=>
- int(9)
- ["public_member"]=>
- int(9)
- }
- [1]=>
- object(cr)#4 (2) {
- ["priv_member:private"]=>
- int(4)
- ["public_member"]=>
- int(4)
- }
- [2]=>
- object(cr)#5 (2) {
- ["priv_member:private"]=>
- int(-15)
- ["public_member"]=>
- int(-15)
- }
-}
-end ------------ array_uintersect() ---------------------------
-begin ------------ array_intersect_assoc() ----------------------
-$a=array (
- '0.1' =>
- class cr {
- private $priv_member = 9;
- public $public_member = 9;
- },
- '0.5' =>
- class cr {
- private $priv_member = 12;
- public $public_member = 12;
- },
- 0 =>
- class cr {
- private $priv_member = 23;
- public $public_member = 23;
- },
- 1 =>
- class cr {
- private $priv_member = 4;
- public $public_member = 4;
- },
- 2 =>
- class cr {
- private $priv_member = -15;
- public $public_member = -15;
- },
-);
-$b=array (
- '0.2' =>
- class cr {
- private $priv_member = 9;
- public $public_member = 9;
- },
- '0.5' =>
- class cr {
- private $priv_member = 22;
- public $public_member = 22;
- },
- 0 =>
- class cr {
- private $priv_member = 3;
- public $public_member = 3;
- },
- 1 =>
- class cr {
- private $priv_member = 4;
- public $public_member = 4;
- },
- 2 =>
- class cr {
- private $priv_member = -15;
- public $public_member = -15;
- },
-);
-var_dump(array_intersect_assoc($a, $b));
-array(0) {
-}
-end ------------ array_intersect_assoc() ----------------------
-begin ------------ array_uintersect_assoc() ---------------------
-$a=array (
- '0.1' =>
- class cr {
- private $priv_member = 9;
- public $public_member = 9;
- },
- '0.5' =>
- class cr {
- private $priv_member = 12;
- public $public_member = 12;
- },
- 0 =>
- class cr {
- private $priv_member = 23;
- public $public_member = 23;
- },
- 1 =>
- class cr {
- private $priv_member = 4;
- public $public_member = 4;
- },
- 2 =>
- class cr {
- private $priv_member = -15;
- public $public_member = -15;
- },
-);
-$b=array (
- '0.2' =>
- class cr {
- private $priv_member = 9;
- public $public_member = 9;
- },
- '0.5' =>
- class cr {
- private $priv_member = 22;
- public $public_member = 22;
- },
- 0 =>
- class cr {
- private $priv_member = 3;
- public $public_member = 3;
- },
- 1 =>
- class cr {
- private $priv_member = 4;
- public $public_member = 4;
- },
- 2 =>
- class cr {
- private $priv_member = -15;
- public $public_member = -15;
- },
-);
-var_dump(array_uintersect_assoc($a, $b, "comp_func_cr"));
-array(2) {
- [1]=>
- object(cr)#4 (2) {
- ["priv_member:private"]=>
- int(4)
- ["public_member"]=>
- int(4)
- }
- [2]=>
- object(cr)#5 (2) {
- ["priv_member:private"]=>
- int(-15)
- ["public_member"]=>
- int(-15)
- }
-}
-end ------------ array_uintersect_assoc() ---------------------
-begin ------------ array_intersect_uassoc() ---------------------
-$a=array (
- '0.1' =>
- class cr {
- private $priv_member = 9;
- public $public_member = 9;
- },
- '0.5' =>
- class cr {
- private $priv_member = 12;
- public $public_member = 12;
- },
- 0 =>
- class cr {
- private $priv_member = 23;
- public $public_member = 23;
- },
- 1 =>
- class cr {
- private $priv_member = 4;
- public $public_member = 4;
- },
- 2 =>
- class cr {
- private $priv_member = -15;
- public $public_member = -15;
- },
-);
-$b=array (
- '0.2' =>
- class cr {
- private $priv_member = 9;
- public $public_member = 9;
- },
- '0.5' =>
- class cr {
- private $priv_member = 22;
- public $public_member = 22;
- },
- 0 =>
- class cr {
- private $priv_member = 3;
- public $public_member = 3;
- },
- 1 =>
- class cr {
- private $priv_member = 4;
- public $public_member = 4;
- },
- 2 =>
- class cr {
- private $priv_member = -15;
- public $public_member = -15;
- },
-);
-var_dump(array_intersect_uassoc($a, $b, "comp_func"));
-array(0) {
-}
-end ------------ array_intersect_uassoc() ---------------------
-begin ------------ array_uintersect_uassoc() with ordinary func -
-$a=array (
- '0.1' =>
- class cr {
- private $priv_member = 9;
- public $public_member = 9;
- },
- '0.5' =>
- class cr {
- private $priv_member = 12;
- public $public_member = 12;
- },
- 0 =>
- class cr {
- private $priv_member = 23;
- public $public_member = 23;
- },
- 1 =>
- class cr {
- private $priv_member = 4;
- public $public_member = 4;
- },
- 2 =>
- class cr {
- private $priv_member = -15;
- public $public_member = -15;
- },
-);
-$b=array (
- '0.2' =>
- class cr {
- private $priv_member = 9;
- public $public_member = 9;
- },
- '0.5' =>
- class cr {
- private $priv_member = 22;
- public $public_member = 22;
- },
- 0 =>
- class cr {
- private $priv_member = 3;
- public $public_member = 3;
- },
- 1 =>
- class cr {
- private $priv_member = 4;
- public $public_member = 4;
- },
- 2 =>
- class cr {
- private $priv_member = -15;
- public $public_member = -15;
- },
-);
-var_dump(array_uintersect_uassoc($a, $b, "comp_func_cr", "comp_func"));
-array(2) {
- [1]=>
- object(cr)#4 (2) {
- ["priv_member:private"]=>
- int(4)
- ["public_member"]=>
- int(4)
- }
- [2]=>
- object(cr)#5 (2) {
- ["priv_member:private"]=>
- int(-15)
- ["public_member"]=>
- int(-15)
- }
-}
-end ------------ array_uintersect_uassoc() with ordinary func -
-begin ------------ array_uintersect_uassoc() with method --------
-$a=array (
- '0.1' =>
- class cr {
- private $priv_member = 9;
- public $public_member = 9;
- },
- '0.5' =>
- class cr {
- private $priv_member = 12;
- public $public_member = 12;
- },
- 0 =>
- class cr {
- private $priv_member = 23;
- public $public_member = 23;
- },
- 1 =>
- class cr {
- private $priv_member = 4;
- public $public_member = 4;
- },
- 2 =>
- class cr {
- private $priv_member = -15;
- public $public_member = -15;
- },
-);
-$b=array (
- '0.2' =>
- class cr {
- private $priv_member = 9;
- public $public_member = 9;
- },
- '0.5' =>
- class cr {
- private $priv_member = 22;
- public $public_member = 22;
- },
- 0 =>
- class cr {
- private $priv_member = 3;
- public $public_member = 3;
- },
- 1 =>
- class cr {
- private $priv_member = 4;
- public $public_member = 4;
- },
- 2 =>
- class cr {
- private $priv_member = -15;
- public $public_member = -15;
- },
-);
-var_dump(array_uintersect_uassoc($a, $b, array("cr", "comp_func_cr"), "comp_func"));
-array(2) {
- [1]=>
- object(cr)#4 (2) {
- ["priv_member:private"]=>
- int(4)
- ["public_member"]=>
- int(4)
- }
- [2]=>
- object(cr)#5 (2) {
- ["priv_member:private"]=>
- int(-15)
- ["public_member"]=>
- int(-15)
- }
-}
-end ------------ array_uintersect_uassoc() with method --------
diff --git a/ext/standard/tests/array/array_intersect_key.phpt b/ext/standard/tests/array/array_intersect_key.phpt
deleted file mode 100644
index 6a5965ba73..0000000000
--- a/ext/standard/tests/array/array_intersect_key.phpt
+++ /dev/null
@@ -1,209 +0,0 @@
---TEST--
-Test of the array_intersect_key() and array_intersect_ukey()
---FILE--
-<?php
-$a = array(1, 6, 2, -20, 15, 1200, -2500);
-$b = array(0, 7, 2, -20, 11, 1100, -2500);
-$c = array(0, 6, 2, -20, 19, 1000, -2500);
-$d = array(3, 8,-2, -20, 14, 900, -2600);
-
-$a_f = array_flip($a);
-$b_f = array_flip($b);
-$c_f = array_flip($c);
-$d_f = array_flip($d);
-
-/* give nicer values */
-foreach ($a_f as $k=> &$a_f_el) { $a_f_el =$k*2;}
-foreach ($b_f as $k=> &$b_f_el) { $b_f_el =$k*2;}
-foreach ($c_f as $k=> &$c_f_el) { $c_f_el =$k*2;}
-foreach ($d_f as $k=> &$d_f_el) { $d_f_el =$k*2;}
-
-var_dump(array_intersect_key($a_f, $b_f));// keys -> 2, -20, -2500
-var_dump(array_intersect_ukey($a_f, $b_f, "comp_func"));// 2, 20, -2500
-var_dump(array_intersect_key($a_f, $c_f));// keys -> 6, 2, -20, -2500
-var_dump(array_intersect_ukey($a_f, $c_f, "comp_func"));// 6, 2, -20, -2500
-var_dump(array_intersect_key($a_f, $d_f));// -20
-var_dump(array_intersect_ukey($a_f, $d_f, "comp_func"));// -20
-
-var_dump(array_intersect_key($a_f, $b_f, $c_f));// 2, -20, -2500
-var_dump(array_intersect_ukey($a_f, $b_f, $c_f, "comp_func"));// 2, -20, -2500
-var_dump(array_intersect_key($a_f, $b_f, $d_f));// -20
-var_dump(array_intersect_ukey($a_f, $b_f, $d_f, "comp_func"));// -20
-
-var_dump(array_intersect_key($a_f, $b_f, $c_f, $d_f));// -20
-var_dump(array_intersect_ukey($a_f, $b_f, $c_f, $d_f, "comp_func"));//-20
-
-
-var_dump(array_intersect_key($b_f, $c_f));// 0, 2, -20, -2500
-var_dump(array_intersect_ukey($b_f, $c_f, "comp_func"));//0, 2, -20, 2500
-
-var_dump(array_intersect_key($b_f, $d_f));// -20
-var_dump(array_intersect_ukey($b_f, $d_f, "comp_func"));// -20
-
-var_dump(array_intersect_key($b_f, $c_f, $d_f));// -20
-var_dump(array_intersect_ukey($b_f, $c_f, $d_f, "comp_func"));// -20
-
-
-echo "----- Now testing array_intersect() ------- \n";
-var_dump(array_intersect($a, $b_f));
-var_dump(array_uintersect($a, $b, "comp_func"));
-var_dump(array_intersect($a, $b, $c));
-var_dump(array_uintersect($a, $b, $c, "comp_func"));
-var_dump(array_intersect($a, $b, $c, $d));
-var_dump(array_uintersect($a, $b, $c, $d, "comp_func"));
-
-///////////////////////////////////////////////////////////////////////
-function comp_func($a, $b) {
- if ($a === $b) return 0;
- return ($a > $b)? 1:-1;
-
-}
-?>
---EXPECTF--
-array(3) {
- [2]=>
- &int(4)
- [-20]=>
- &int(-40)
- [-2500]=>
- &int(-5000)
-}
-array(3) {
- [2]=>
- int(4)
- [-20]=>
- int(-40)
- [-2500]=>
- &int(-5000)
-}
-array(4) {
- [6]=>
- int(12)
- [2]=>
- int(4)
- [-20]=>
- int(-40)
- [-2500]=>
- &int(-5000)
-}
-array(4) {
- [6]=>
- int(12)
- [2]=>
- int(4)
- [-20]=>
- int(-40)
- [-2500]=>
- &int(-5000)
-}
-array(1) {
- [-20]=>
- int(-40)
-}
-array(1) {
- [-20]=>
- int(-40)
-}
-array(3) {
- [2]=>
- int(4)
- [-20]=>
- int(-40)
- [-2500]=>
- &int(-5000)
-}
-array(3) {
- [2]=>
- int(4)
- [-20]=>
- int(-40)
- [-2500]=>
- &int(-5000)
-}
-array(1) {
- [-20]=>
- int(-40)
-}
-array(1) {
- [-20]=>
- int(-40)
-}
-array(1) {
- [-20]=>
- int(-40)
-}
-array(1) {
- [-20]=>
- int(-40)
-}
-array(4) {
- [0]=>
- &int(0)
- [2]=>
- &int(4)
- [-20]=>
- &int(-40)
- [-2500]=>
- &int(-5000)
-}
-array(4) {
- [0]=>
- int(0)
- [2]=>
- int(4)
- [-20]=>
- int(-40)
- [-2500]=>
- &int(-5000)
-}
-array(1) {
- [-20]=>
- int(-40)
-}
-array(1) {
- [-20]=>
- int(-40)
-}
-array(1) {
- [-20]=>
- int(-40)
-}
-array(1) {
- [-20]=>
- int(-40)
-}
------ Now testing array_intersect() -------
-array(0) {
-}
-array(3) {
- [2]=>
- int(2)
- [3]=>
- int(-20)
- [6]=>
- int(-2500)
-}
-array(3) {
- [2]=>
- int(2)
- [3]=>
- int(-20)
- [6]=>
- int(-2500)
-}
-array(3) {
- [2]=>
- int(2)
- [3]=>
- int(-20)
- [6]=>
- int(-2500)
-}
-array(1) {
- [3]=>
- int(-20)
-}
-array(1) {
- [3]=>
- int(-20)
-}
diff --git a/ext/standard/tests/array/array_search.phpt b/ext/standard/tests/array/array_search.phpt
deleted file mode 100644
index e95fda1286..0000000000
--- a/ext/standard/tests/array/array_search.phpt
+++ /dev/null
@@ -1,23 +0,0 @@
---TEST--
-search_array and in_array (including bug 13567)
---FILE--
-<?php
-
-$arr1 = array('a','b','c');
-$arr2 = array();
-$arr3 = array('c','key'=>'d');
-$arr4 = array("a\0b"=>'e','key'=>'d', 'f');
-
-$tests = <<<TESTS
-FALSE === in_array(123, \$arr1)
-FALSE === array_search(123, \$arr1)
-TRUE === in_array('a', \$arr1)
-0 === array_search('a', \$arr1)
-"a\\0b"=== array_search('e', \$arr4)
-'key'=== array_search('d', \$arr4)
-TESTS;
-
-include(dirname(__FILE__) . '/../../../../tests/quicktester.inc');
-
---EXPECT--
-OK
diff --git a/ext/standard/tests/array/array_sum.phpt b/ext/standard/tests/array/array_sum.phpt
deleted file mode 100644
index d4c91e991c..0000000000
--- a/ext/standard/tests/array/array_sum.phpt
+++ /dev/null
@@ -1,29 +0,0 @@
---TEST--
-Test array_sum()
---INI--
-memory_limit=16M
---FILE--
-<?php
-$i = 0;
-while ($i++ < 1000) {
- $a[] = $i;
- $b[] = (string)$i;
-}
-$s1 = array_sum($a);
-$s2 = array_sum($b);
-var_dump($s1, $s2);
-
-$j = 0;
-while ($j++ < 100000) {
- $c[] = $j;
- $d[] = (string) $j;
-}
-$s3 = array_sum($c);
-$s4 = array_sum($d);
-var_dump($s3, $s4);
-?>
---EXPECTF--
-int(500500)
-int(500500)
-%st(5000050000)
-%st(5000050000)
diff --git a/ext/standard/tests/array/bug12776.phpt b/ext/standard/tests/array/bug12776.phpt
deleted file mode 100644
index 54c6f6fceb..0000000000
--- a/ext/standard/tests/array/bug12776.phpt
+++ /dev/null
@@ -1,25 +0,0 @@
---TEST--
-Bug #12776 (array_walk crash)
---FILE--
-<?php
-
-function test($val,$key)
-{
- global $globalArray;
- $globalArray[]=$key; // this will end up crashing
- $globalArray[]=(string)$key; // this will end up OK
- print "val: $val; key: $key\n"; flush();
-}
-
-$arr=array('k'=>'v');
-array_walk($arr,'test');
-
-print "First value: ".$globalArray[0];
-
-print "\nDone\n";
-
-?>
---EXPECT--
-val: v; key: k
-First value: k
-Done
diff --git a/ext/standard/tests/array/bug14580.phpt b/ext/standard/tests/array/bug14580.phpt
deleted file mode 100644
index 8a80bddcb4..0000000000
--- a/ext/standard/tests/array/bug14580.phpt
+++ /dev/null
@@ -1,11 +0,0 @@
---TEST--n
-Bug #14580 (key() not binary safe)
---FILE--
-<?php
- $arr = array ("foo\0bar" => "foo\0bar");
- $key = key($arr);
- echo strlen($key), ': ';
- echo urlencode($key), "\n";
-?>
---EXPECT--
-7: foo%00bar
diff --git a/ext/standard/tests/array/bug20381.phpt b/ext/standard/tests/array/bug20381.phpt
deleted file mode 100644
index 1adaa863b7..0000000000
--- a/ext/standard/tests/array/bug20381.phpt
+++ /dev/null
@@ -1,79 +0,0 @@
---TEST--
-Bug #20381 (array_merge_recursive mangles input arrays)
---FILE--
-<?php
-$a = array(
- 'a1' => 1,
- 'a2' => array( 1, 2, 3 ),
- 'a3' => array(
- 'a' => array( 10, 20, 30 ),
- 'b' => 'b'
- )
- );
-$b = array( 'a1' => 2,
- 'a2' => array( 3, 4, 5 ),
- 'a3' => array(
- 'c' => 'cc',
- 'a' => array( 10, 40 )
- )
- );
-
-var_dump($a);
-array_merge_recursive( $a, $b );
-var_dump($a);
-?>
---EXPECT--
-array(3) {
- ["a1"]=>
- int(1)
- ["a2"]=>
- array(3) {
- [0]=>
- int(1)
- [1]=>
- int(2)
- [2]=>
- int(3)
- }
- ["a3"]=>
- array(2) {
- ["a"]=>
- array(3) {
- [0]=>
- int(10)
- [1]=>
- int(20)
- [2]=>
- int(30)
- }
- ["b"]=>
- string(1) "b"
- }
-}
-array(3) {
- ["a1"]=>
- int(1)
- ["a2"]=>
- array(3) {
- [0]=>
- int(1)
- [1]=>
- int(2)
- [2]=>
- int(3)
- }
- ["a3"]=>
- array(2) {
- ["a"]=>
- array(3) {
- [0]=>
- int(10)
- [1]=>
- int(20)
- [2]=>
- int(30)
- }
- ["b"]=>
- string(1) "b"
- }
-}
diff --git a/ext/standard/tests/array/bug20865.phpt b/ext/standard/tests/array/bug20865.phpt
deleted file mode 100644
index f1edbabab5..0000000000
--- a/ext/standard/tests/array/bug20865.phpt
+++ /dev/null
@@ -1,11 +0,0 @@
---TEST--
-Bug #20865 (array_key_exists and NULL key)
---FILE--
-<?php
- $ta = array(1, 2, 3);
- $ta[NULL] = "Null Value";
-
- var_dump(array_key_exists(NULL, $ta));
-?>
---EXPECT--
-bool(true)
diff --git a/ext/standard/tests/array/bug21182.phpt b/ext/standard/tests/array/bug21182.phpt
deleted file mode 100644
index af4602ab74..0000000000
--- a/ext/standard/tests/array/bug21182.phpt
+++ /dev/null
@@ -1,12 +0,0 @@
---TEST--
-Bug #21182 (range modifies arguments)
---FILE--
-<?php
-$a = "20"; $b = "30";
-echo "a1: $a\n";
-$result = range($a, $b);
-echo "a2: $a : type : " . gettype($a) . "\n";
-?>
---EXPECT--
-a1: 20
-a2: 20 : type : string
diff --git a/ext/standard/tests/array/bug21918.phpt b/ext/standard/tests/array/bug21918.phpt
deleted file mode 100755
index 1c9d746fdf..0000000000
--- a/ext/standard/tests/array/bug21918.phpt
+++ /dev/null
@@ -1,55 +0,0 @@
---TEST--
-Bug #21918 (different handling of positive vs. negative array indexes)
---FILE--
-<?php
-
-echo "==Mixed==\n";
-$a = array(-1=>'a', '-2'=>'b', 3=>'c', '4'=>'d', 5=>'e', '6001'=>'f', '07'=>'g');
-
-foreach($a as $k => $v) {
- var_dump($k);
- var_dump($v);
-}
-
-echo "==Normal==\n";
-$b = array();
-$b[] = 'a';
-
-foreach($b as $k => $v) {
- var_dump($k);
- var_dump($v);
-}
-
-echo "==Negative==\n";
-$c = array('-2' => 'a');
-
-foreach($c as $k => $v) {
- var_dump($k);
- var_dump($v);
-}
-
-echo "==Done==\n";
-?>
---EXPECT--
-==Mixed==
-int(-1)
-string(1) "a"
-int(-2)
-string(1) "b"
-int(3)
-string(1) "c"
-int(4)
-string(1) "d"
-int(5)
-string(1) "e"
-int(6001)
-string(1) "f"
-string(2) "07"
-string(1) "g"
-==Normal==
-int(0)
-string(1) "a"
-==Negative==
-int(-2)
-string(1) "a"
-==Done==
diff --git a/ext/standard/tests/array/bug21998.phpt b/ext/standard/tests/array/bug21998.phpt
deleted file mode 100644
index aa52dc590a..0000000000
--- a/ext/standard/tests/array/bug21998.phpt
+++ /dev/null
@@ -1,24 +0,0 @@
---TEST--
-Bug #21998 (array_pop() does not reset the current array position)
---FILE--
-<?php
-
-$a = array("a", "b", "c");
-
-var_dump(key($a));
-var_dump(array_pop($a));
-var_dump(key($a));
-var_dump(array_pop($a));
-var_dump(key($a));
-var_dump(array_pop($a));
-var_dump(key($a));
-
-?>
---EXPECT--
-int(0)
-string(1) "c"
-int(0)
-string(1) "b"
-int(0)
-string(1) "a"
-NULL
diff --git a/ext/standard/tests/array/bug22088.phpt b/ext/standard/tests/array/bug22088.phpt
deleted file mode 100644
index 4352cff914..0000000000
--- a/ext/standard/tests/array/bug22088.phpt
+++ /dev/null
@@ -1,33 +0,0 @@
---TEST--
-Bug #22088 (array_shift() leaves next index to be +1 too much)
---FILE--
-<?php
-
-$a = array('a', 'b', 'c');
-$last = array_shift ($a);
-$a[] = 'a';
-var_dump($a);
-
-$a = array('a' => 1, 'b' => 2, 'c' => 3);
-$last = array_shift ($a);
-$a[] = 'a';
-var_dump($a);
-
-?>
---EXPECT--
-array(3) {
- [0]=>
- string(1) "b"
- [1]=>
- string(1) "c"
- [2]=>
- string(1) "a"
-}
-array(3) {
- ["b"]=>
- int(2)
- ["c"]=>
- int(3)
- [0]=>
- string(1) "a"
-}
diff --git a/ext/standard/tests/array/bug22463.phpt b/ext/standard/tests/array/bug22463.phpt
deleted file mode 100644
index dcede511bb..0000000000
--- a/ext/standard/tests/array/bug22463.phpt
+++ /dev/null
@@ -1,29 +0,0 @@
---TEST--
-Bug #22463 (array_reduce() segfaults)
---FILE--
-<?php
-
-function a($ary) {
- return (is_array($ary) ? array_reduce($ary, 'cb', 0) : 1);
-}
-
-function cb($v, $elem) {
- return $v + a($elem);
-}
-
-$ary = array(
- array(
- array(
- array(
- array(
- array(0, 1, 2, 3, 4)
- )
- )
- )
- )
-);
-
-var_dump(a($ary));
-?>
---EXPECT--
-int(5)
diff --git a/ext/standard/tests/array/bug23581.phpt b/ext/standard/tests/array/bug23581.phpt
deleted file mode 100644
index 06e1e388ef..0000000000
--- a/ext/standard/tests/array/bug23581.phpt
+++ /dev/null
@@ -1,44 +0,0 @@
---TEST--
-Bug #23581 (array_map(NULL, array, array, ...) yields an undefined result)
---FILE--
-<?php
-var_dump(
- array_map(
- NULL,
- array(1,2,3),
- array(4,5,6),
- array(7,8,9)
- )
-);
-?>
---EXPECT--
-array(3) {
- [0]=>
- array(3) {
- [0]=>
- int(1)
- [1]=>
- int(4)
- [2]=>
- int(7)
- }
- [1]=>
- array(3) {
- [0]=>
- int(2)
- [1]=>
- int(5)
- [2]=>
- int(8)
- }
- [2]=>
- array(3) {
- [0]=>
- int(3)
- [1]=>
- int(6)
- [2]=>
- int(9)
- }
-}
-
diff --git a/ext/standard/tests/array/bug23788.phpt b/ext/standard/tests/array/bug23788.phpt
deleted file mode 100644
index 022b3cecd4..0000000000
--- a/ext/standard/tests/array/bug23788.phpt
+++ /dev/null
@@ -1,24 +0,0 @@
---TEST--
-Bug #23788 (*_replace() clobbers referenced array elements)
---FILE--
-<?php
-$numeric = 123;
-$bool = true;
-$foo = array(&$numeric, &$bool);
-var_dump($foo);
-str_replace("abc", "def", $foo);
-var_dump($foo);
-?>
---EXPECT--
-array(2) {
- [0]=>
- &int(123)
- [1]=>
- &bool(true)
-}
-array(2) {
- [0]=>
- &int(123)
- [1]=>
- &bool(true)
-}
diff --git a/ext/standard/tests/array/bug24198.phpt b/ext/standard/tests/array/bug24198.phpt
deleted file mode 100644
index b1cd523026..0000000000
--- a/ext/standard/tests/array/bug24198.phpt
+++ /dev/null
@@ -1,25 +0,0 @@
---TEST--n
-Bug #24198 (array_merge_recursive() invalid recursion detection)
---FILE--
-<?php
-$c = array('a' => 'aa','b' => 'bb');
-
-var_dump(array_merge_recursive($c, $c));
-?>
---EXPECT--
-array(2) {
- ["a"]=>
- array(2) {
- [0]=>
- string(2) "aa"
- [1]=>
- string(2) "aa"
- }
- ["b"]=>
- array(2) {
- [0]=>
- string(2) "bb"
- [1]=>
- string(2) "bb"
- }
-}
diff --git a/ext/standard/tests/array/bug24220.phpt b/ext/standard/tests/array/bug24220.phpt
deleted file mode 100644
index c8e25709e9..0000000000
--- a/ext/standard/tests/array/bug24220.phpt
+++ /dev/null
@@ -1,91 +0,0 @@
---TEST--n
-Bug #24220 (range() numeric string handling)
---FILE--
-<?php
- var_dump(range("2003", "2004"));
- var_dump(range("a", "z"));
- var_dump(range("1", "10"));
-?>
---EXPECT--
-array(2) {
- [0]=>
- int(2003)
- [1]=>
- int(2004)
-}
-array(26) {
- [0]=>
- string(1) "a"
- [1]=>
- string(1) "b"
- [2]=>
- string(1) "c"
- [3]=>
- string(1) "d"
- [4]=>
- string(1) "e"
- [5]=>
- string(1) "f"
- [6]=>
- string(1) "g"
- [7]=>
- string(1) "h"
- [8]=>
- string(1) "i"
- [9]=>
- string(1) "j"
- [10]=>
- string(1) "k"
- [11]=>
- string(1) "l"
- [12]=>
- string(1) "m"
- [13]=>
- string(1) "n"
- [14]=>
- string(1) "o"
- [15]=>
- string(1) "p"
- [16]=>
- string(1) "q"
- [17]=>
- string(1) "r"
- [18]=>
- string(1) "s"
- [19]=>
- string(1) "t"
- [20]=>
- string(1) "u"
- [21]=>
- string(1) "v"
- [22]=>
- string(1) "w"
- [23]=>
- string(1) "x"
- [24]=>
- string(1) "y"
- [25]=>
- string(1) "z"
-}
-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/bug24766.phpt b/ext/standard/tests/array/bug24766.phpt
deleted file mode 100644
index d6f82f3b16..0000000000
--- a/ext/standard/tests/array/bug24766.phpt
+++ /dev/null
@@ -1,45 +0,0 @@
---TEST--
-Bug #24766 (strange result array from unpack)
---FILE--
-<?php
-
-error_reporting(E_ALL);
-
-$a = unpack('C2', "\0224V");
-$b = array(1 => 18, 2 => 52);
-debug_zval_dump($a, $b);
-$k = array_keys($a);
-$l = array_keys($b);
-debug_zval_dump($k, $l);
-$i=$k[0];
-var_dump($a[$i]);
-$i=$l[0];
-var_dump($b[$i]);
-?>
---EXPECT--
-array(2) refcount(2){
- [1]=>
- long(18) refcount(1)
- [2]=>
- long(52) refcount(1)
-}
-array(2) refcount(2){
- [1]=>
- long(18) refcount(1)
- [2]=>
- long(52) refcount(1)
-}
-array(2) refcount(2){
- [0]=>
- long(1) refcount(1)
- [1]=>
- long(2) refcount(1)
-}
-array(2) refcount(2){
- [0]=>
- long(1) refcount(1)
- [1]=>
- long(2) refcount(1)
-}
-int(18)
-int(18)
diff --git a/ext/standard/tests/array/bug24897.phpt b/ext/standard/tests/array/bug24897.phpt
deleted file mode 100644
index 45bcde340f..0000000000
--- a/ext/standard/tests/array/bug24897.phpt
+++ /dev/null
@@ -1,21 +0,0 @@
---TEST--
-Bug #24897 (inconsistent behaviour or shuffle() & array_multisort())
---FILE--
-<?php
-$a = array(1 => 2);
-shuffle($a);
-var_dump($a);
-
-$a = array(1 => 2);
-array_multisort($a);
-var_dump($a);
-?>
---EXPECT--
-array(1) {
- [0]=>
- int(2)
-}
-array(1) {
- [0]=>
- int(2)
-}
diff --git a/ext/standard/tests/array/bug24980.phpt b/ext/standard/tests/array/bug24980.phpt
deleted file mode 100644
index b9e04fd67f..0000000000
--- a/ext/standard/tests/array/bug24980.phpt
+++ /dev/null
@@ -1,53 +0,0 @@
---TEST--
-Bug #24980 (array_reduce() uses first element as default running total)
---FILE--
-<?php
-/* test #1: numeric data */
-function add_up($running_total, $current_value)
-{
- echo "running_total is ".(int)$running_total.", current_value is {$current_value}\n";
- $running_total += $current_value * $current_value;
- return $running_total;
-}
-
-$numbers = array (2,3,5,7);
-$total = array_reduce($numbers, 'add_up');
-print "Total is $total\n";
-
-/* test #2: string data */
-$a = array("a", "b", "c");
-function foo ($a, $b)
-{
- return $a . $b;
-}
-var_dump(array_reduce($a, "foo"));
-
-/* test #3: basic test (used to leak memory) */
-function rsum($v, $w)
-{
- $v += $w;
- return $v;
-}
-function rmul($v, $w)
-{
- $v *= $w;
- return $v;
-}
-$a = array(1, 2, 3, 4, 5);
-$x = array();
-$b = array_reduce($a, "rsum");
-$c = array_reduce($a, "rmul", 10);
-$d = array_reduce($x, "rsum", 1);
-
-var_dump($b, $c, $d);
-?>
---EXPECT--
-running_total is 0, current_value is 2
-running_total is 4, current_value is 3
-running_total is 13, current_value is 5
-running_total is 38, current_value is 7
-Total is 87
-string(3) "abc"
-int(15)
-int(1200)
-int(1)
diff --git a/ext/standard/tests/array/bug25708.phpt b/ext/standard/tests/array/bug25708.phpt
deleted file mode 100644
index d3da3e3399..0000000000
--- a/ext/standard/tests/array/bug25708.phpt
+++ /dev/null
@@ -1,223 +0,0 @@
---TEST--
-Bug #25708 (extract($GLOBALS, EXTR_REFS) mangles $GLOBALS)
---FILE--
-<?php
-function foo($ref, $alt) {
- unset($GLOBALS['a']);
- unset($GLOBALS['b']);
- $GLOBALS['a'] = 1;
- $GLOBALS['b'] = 2;
-
- $org_a = $GLOBALS['a'];
- $org_b = $GLOBALS['b'];
-
- if ($ref) {
- global $a, $b;
- } else {
- /* zval temp_var(NULL); // refcount = 1
- * a = temp_var[x] // refcount = 2
- */
- $a = NULL;
- $b = NULL;
- }
-
- debug_zval_dump($a, $b, $GLOBALS['a'], $GLOBALS['b']);
- echo "--\n";
- if ($alt) {
- $a = &$GLOBALS['a'];
- $b = &$GLOBALS['b'];
- } else {
- extract($GLOBALS, EXTR_REFS);
- }
- debug_zval_dump($a, $b, $GLOBALS['a'], $GLOBALS['b']);
- echo "--\n";
- $a = &$GLOBALS['a'];
- $b = &$GLOBALS['b'];
- debug_zval_dump($a, $b, $GLOBALS['a'], $GLOBALS['b']);
- echo "--\n";
- $GLOBALS['b'] = 3;
- debug_zval_dump($a, $b, $GLOBALS['a'], $GLOBALS['b']);
- echo "--\n";
- $a = 4;
- debug_zval_dump($a, $b, $GLOBALS['a'], $GLOBALS['b']);
- echo "--\n";
- $c = $b;
- debug_zval_dump($b, $GLOBALS['b'], $c);
- echo "--\n";
- $b = 'x';
- debug_zval_dump($a, $b, $GLOBALS['a'], $GLOBALS['b'], $c);
- echo "--\n";
- debug_zval_dump($org_a, $org_b);
- echo "----";
- if ($ref) echo 'r';
- if ($alt) echo 'a';
- echo "\n";
-}
-
-$a = 'ok';
-$b = 'ok';
-$_a = $a;
-$_b = $b;
-
-foo(false, true);
-foo(true, true);
-foo(false, false);
-foo(true, false);
-
-debug_zval_dump($_a, $_b);
-?>
---EXPECT--
-NULL refcount(2)
-NULL refcount(2)
-long(1) refcount(3)
-long(2) refcount(3)
---
-long(1) refcount(1)
-long(2) refcount(1)
-long(1) refcount(1)
-long(2) refcount(1)
---
-long(1) refcount(1)
-long(2) refcount(1)
-long(1) refcount(1)
-long(2) refcount(1)
---
-long(1) refcount(1)
-long(3) refcount(1)
-long(1) refcount(1)
-long(3) refcount(1)
---
-long(4) refcount(1)
-long(3) refcount(1)
-long(4) refcount(1)
-long(3) refcount(1)
---
-long(3) refcount(1)
-long(3) refcount(1)
-long(3) refcount(2)
---
-long(4) refcount(1)
-string(1) "x" refcount(1)
-long(4) refcount(1)
-string(1) "x" refcount(1)
-long(3) refcount(2)
---
-long(1) refcount(2)
-long(2) refcount(2)
-----a
-long(1) refcount(1)
-long(2) refcount(1)
-long(1) refcount(1)
-long(2) refcount(1)
---
-long(1) refcount(1)
-long(2) refcount(1)
-long(1) refcount(1)
-long(2) refcount(1)
---
-long(1) refcount(1)
-long(2) refcount(1)
-long(1) refcount(1)
-long(2) refcount(1)
---
-long(1) refcount(1)
-long(3) refcount(1)
-long(1) refcount(1)
-long(3) refcount(1)
---
-long(4) refcount(1)
-long(3) refcount(1)
-long(4) refcount(1)
-long(3) refcount(1)
---
-long(3) refcount(1)
-long(3) refcount(1)
-long(3) refcount(2)
---
-long(4) refcount(1)
-string(1) "x" refcount(1)
-long(4) refcount(1)
-string(1) "x" refcount(1)
-long(3) refcount(2)
---
-long(1) refcount(2)
-long(2) refcount(2)
-----ra
-NULL refcount(2)
-NULL refcount(2)
-long(1) refcount(3)
-long(2) refcount(3)
---
-long(1) refcount(1)
-long(2) refcount(1)
-long(1) refcount(1)
-long(2) refcount(1)
---
-long(1) refcount(1)
-long(2) refcount(1)
-long(1) refcount(1)
-long(2) refcount(1)
---
-long(1) refcount(1)
-long(3) refcount(1)
-long(1) refcount(1)
-long(3) refcount(1)
---
-long(4) refcount(1)
-long(3) refcount(1)
-long(4) refcount(1)
-long(3) refcount(1)
---
-long(3) refcount(1)
-long(3) refcount(1)
-long(3) refcount(2)
---
-long(4) refcount(1)
-string(1) "x" refcount(1)
-long(4) refcount(1)
-string(1) "x" refcount(1)
-long(3) refcount(2)
---
-long(1) refcount(2)
-long(2) refcount(2)
-----
-long(1) refcount(1)
-long(2) refcount(1)
-long(1) refcount(1)
-long(2) refcount(1)
---
-long(1) refcount(1)
-long(2) refcount(1)
-long(1) refcount(1)
-long(2) refcount(1)
---
-long(1) refcount(1)
-long(2) refcount(1)
-long(1) refcount(1)
-long(2) refcount(1)
---
-long(1) refcount(1)
-long(3) refcount(1)
-long(1) refcount(1)
-long(3) refcount(1)
---
-long(4) refcount(1)
-long(3) refcount(1)
-long(4) refcount(1)
-long(3) refcount(1)
---
-long(3) refcount(1)
-long(3) refcount(1)
-long(3) refcount(2)
---
-long(4) refcount(1)
-string(1) "x" refcount(1)
-long(4) refcount(1)
-string(1) "x" refcount(1)
-long(3) refcount(2)
---
-long(1) refcount(2)
-long(2) refcount(2)
-----r
-string(2) "ok" refcount(2)
-string(2) "ok" refcount(2)
diff --git a/ext/standard/tests/array/bug25758.phpt b/ext/standard/tests/array/bug25758.phpt
deleted file mode 100644
index ff97d2e3fb..0000000000
--- a/ext/standard/tests/array/bug25758.phpt
+++ /dev/null
@@ -1,14 +0,0 @@
---TEST--
-Bug #25758 (var_export does not escape ' & \ inside array keys)
---FILE--
-<?php
- $a = array ("quote'" => array("quote'"));
- echo var_export($a, true);
-?>
---EXPECT--
-array (
- 'quote\'' =>
- array (
- 0 => 'quote\'',
- ),
-)
diff --git a/ext/standard/tests/array/bug26458.phpt b/ext/standard/tests/array/bug26458.phpt
deleted file mode 100644
index d24e1f151b..0000000000
--- a/ext/standard/tests/array/bug26458.phpt
+++ /dev/null
Binary files differ
diff --git a/ext/standard/tests/array/bug28739.phpt b/ext/standard/tests/array/bug28739.phpt
deleted file mode 100644
index af888918c5..0000000000
--- a/ext/standard/tests/array/bug28739.phpt
+++ /dev/null
@@ -1,58 +0,0 @@
---TEST--
-Bug #28739 (*diff() and *intersect() not clearing the fci cache before work)
---FILE--
-<?php
-class p {
- public $x;
- function __construct($x){$this->x=$x;}
-}
-function a(&$a, &$b){var_dump(__FUNCTION__);return $a->x - $b->x;}
-function b(&$a, &$b){var_dump(__FUNCTION__);return $a->x - $b->x;}
-
-$p1 = array(new p(2), new p(1), new p(0));
-$p2 = array(new p(0), new p(2), new p(3));
-
-uasort($p1, 'a');
-print_r($p1);
-echo "Now diffing:\n";
-print_r(array_udiff($p1,$p2, 'b'));
-?>
---EXPECT--
-string(1) "a"
-string(1) "a"
-Array
-(
- [2] => p Object
- (
- [x] => 0
- )
-
- [1] => p Object
- (
- [x] => 1
- )
-
- [0] => p Object
- (
- [x] => 2
- )
-
-)
-Now diffing:
-string(1) "b"
-string(1) "b"
-string(1) "b"
-string(1) "b"
-string(1) "b"
-string(1) "b"
-string(1) "b"
-string(1) "b"
-string(1) "b"
-Array
-(
- [1] => p Object
- (
- [x] => 1
- )
-
-) \ No newline at end of file
diff --git a/ext/standard/tests/array/bug28974.phpt b/ext/standard/tests/array/bug28974.phpt
deleted file mode 100644
index fb272e1d74..0000000000
--- a/ext/standard/tests/array/bug28974.phpt
+++ /dev/null
@@ -1,89 +0,0 @@
---TEST--
-Bug #28974 array_(p)slice() treats large lengths incorrectly - overflow
---FILE--
-<?php
-$a = $b = $c = array(0,1,2,3,4,5);
-print_r($a);
-// this is ok:
-print_r(array_slice($a,2,2147483645));
-
-// this is wrong:
-print_r(array_slice($a,2,2147483646));
-echo 'print_r(array_splice($a,2,1));'."\n";
-print_r(array_splice($a,2,1));
-echo "\$a is :";
-print_r($a);
-echo 'print_r(array_splice($b,2,2147483645));'."\n";
-print_r(array_splice($b,2,2147483645));
-echo "\$b is :";
-print_r($b);
-
-// this is wrong:
-echo 'print_r(array_splice($c,2,2147483646));'."\n";
-print_r(array_splice($c,2,2147483646));
-echo "\$c is :";
-print_r($c);
-?>
---EXPECT--
-Array
-(
- [0] => 0
- [1] => 1
- [2] => 2
- [3] => 3
- [4] => 4
- [5] => 5
-)
-Array
-(
- [0] => 2
- [1] => 3
- [2] => 4
- [3] => 5
-)
-Array
-(
- [0] => 2
- [1] => 3
- [2] => 4
- [3] => 5
-)
-print_r(array_splice($a,2,1));
-Array
-(
- [0] => 2
-)
-$a is :Array
-(
- [0] => 0
- [1] => 1
- [2] => 3
- [3] => 4
- [4] => 5
-)
-print_r(array_splice($b,2,2147483645));
-Array
-(
- [0] => 2
- [1] => 3
- [2] => 4
- [3] => 5
-)
-$b is :Array
-(
- [0] => 0
- [1] => 1
-)
-print_r(array_splice($c,2,2147483646));
-Array
-(
- [0] => 2
- [1] => 3
- [2] => 4
- [3] => 5
-)
-$c is :Array
-(
- [0] => 0
- [1] => 1
-)
diff --git a/ext/standard/tests/array/count_recursive.phpt b/ext/standard/tests/array/count_recursive.phpt
deleted file mode 100644
index e6824ab0e5..0000000000
--- a/ext/standard/tests/array/count_recursive.phpt
+++ /dev/null
@@ -1,52 +0,0 @@
---TEST--
-count
---FILE--
-<?php
-print "Testing NULL...\n";
-$arr = NULL;
-print "COUNT_NORMAL: should be 0, is ".count($arr, COUNT_NORMAL)."\n";
-print "COUNT_RECURSIVE: should be 0, is ".count($arr, COUNT_RECURSIVE)."\n";
-
-print "Testing arrays...\n";
-$arr = array(1, array(3, 4, array(6, array(8))));
-print "COUNT_NORMAL: should be 2, is ".count($arr, COUNT_NORMAL)."\n";
-print "COUNT_RECURSIVE: should be 8, is ".count($arr, COUNT_RECURSIVE)."\n";
-
-print "Testing hashes...\n";
-$arr = array("a" => 1, "b" => 2, array("c" => 3, array("d" => 5)));
-print "COUNT_NORMAL: should be 3, is ".count($arr, COUNT_NORMAL)."\n";
-print "COUNT_RECURSIVE: should be 6, is ".count($arr, COUNT_RECURSIVE)."\n";
-
-print "Testing strings...\n";
-print "COUNT_NORMAL: should be 1, is ".count("string", COUNT_NORMAL)."\n";
-print "COUNT_RECURSIVE: should be 1, is ".count("string", COUNT_RECURSIVE)."\n";
-
-print "Testing various types with no second argument.\n";
-print "COUNT_NORMAL: should be 1, is ".count("string")."\n";
-print "COUNT_NORMAL: should be 2, is ".count(array("a", array("b")))."\n";
-
-$arr = array('a'=>array(NULL, NULL, NULL), 1=>array(NULL=>1, 1=>NULL),
- array(array(array(array(array(NULL))))));
-print "Testing really cool arrays ;)\n";
-print "COUNT_NORMAL: should be 3, is ".count($arr, COUNT_NORMAL)."\n";
-print "COUNT_RECURSIVE: should be 13, is ".count($arr, COUNT_RECURSIVE)."\n";
-?>
---EXPECT--
-Testing NULL...
-COUNT_NORMAL: should be 0, is 0
-COUNT_RECURSIVE: should be 0, is 0
-Testing arrays...
-COUNT_NORMAL: should be 2, is 2
-COUNT_RECURSIVE: should be 8, is 8
-Testing hashes...
-COUNT_NORMAL: should be 3, is 3
-COUNT_RECURSIVE: should be 6, is 6
-Testing strings...
-COUNT_NORMAL: should be 1, is 1
-COUNT_RECURSIVE: should be 1, is 1
-Testing various types with no second argument.
-COUNT_NORMAL: should be 1, is 1
-COUNT_NORMAL: should be 2, is 2
-Testing really cool arrays ;)
-COUNT_NORMAL: should be 3, is 3
-COUNT_RECURSIVE: should be 13, is 13
diff --git a/ext/standard/tests/array/data.inc b/ext/standard/tests/array/data.inc
deleted file mode 100644
index 2991274be8..0000000000
--- a/ext/standard/tests/array/data.inc
+++ /dev/null
@@ -1,13 +0,0 @@
-<?php
-$tmp = pow(2,24);
-$data = array(
- 'PHP',
- 17=>'PHP: Hypertext Preprocessor',
- 5=>'Test',
- 'test'=>27,
- 1000=>'test',
- "-1000"=>array('banana', 'orange'),
- 'monkey',
- $tmp=>-1/3
-);
-?>
diff --git a/ext/standard/tests/array/range.phpt b/ext/standard/tests/array/range.phpt
deleted file mode 100644
index 23fb985f86..0000000000
--- a/ext/standard/tests/array/range.phpt
+++ /dev/null
@@ -1,1345 +0,0 @@
---TEST--
-range()
---FILE--
-<?php
- var_dump(range(1, 100));
- var_dump(range(100, 1));
-
- var_dump(range("1", "100"));
- var_dump(range("100", "1"));
-
- var_dump(range("a", "z"));
- var_dump(range("z", "a"));
- var_dump(range("q", "q"));
-
- var_dump(range(5, 5));
-
- var_dump(range(5.1, 10.1));
- var_dump(range(10.1, 5.1));
-
- var_dump(range("5.1", "10.1"));
- var_dump(range("10.1", "5.1"));
-
- var_dump(range(1, 5, 0.1));
- var_dump(range(5, 1, 0.1));
-
- var_dump(range(1, 5, "0.1"));
- var_dump(range("1", "5", 0.1));
-?>
---EXPECT--
-array(100) {
- [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)
- [10]=>
- int(11)
- [11]=>
- int(12)
- [12]=>
- int(13)
- [13]=>
- int(14)
- [14]=>
- int(15)
- [15]=>
- int(16)
- [16]=>
- int(17)
- [17]=>
- int(18)
- [18]=>
- int(19)
- [19]=>
- int(20)
- [20]=>
- int(21)
- [21]=>
- int(22)
- [22]=>
- int(23)
- [23]=>
- int(24)
- [24]=>
- int(25)
- [25]=>
- int(26)
- [26]=>
- int(27)
- [27]=>
- int(28)
- [28]=>
- int(29)
- [29]=>
- int(30)
- [30]=>
- int(31)
- [31]=>
- int(32)
- [32]=>
- int(33)
- [33]=>
- int(34)
- [34]=>
- int(35)
- [35]=>
- int(36)
- [36]=>
- int(37)
- [37]=>
- int(38)
- [38]=>
- int(39)
- [39]=>
- int(40)
- [40]=>
- int(41)
- [41]=>
- int(42)
- [42]=>
- int(43)
- [43]=>
- int(44)
- [44]=>
- int(45)
- [45]=>
- int(46)
- [46]=>
- int(47)
- [47]=>
- int(48)
- [48]=>
- int(49)
- [49]=>
- int(50)
- [50]=>
- int(51)
- [51]=>
- int(52)
- [52]=>
- int(53)
- [53]=>
- int(54)
- [54]=>
- int(55)
- [55]=>
- int(56)
- [56]=>
- int(57)
- [57]=>
- int(58)
- [58]=>
- int(59)
- [59]=>
- int(60)
- [60]=>
- int(61)
- [61]=>
- int(62)
- [62]=>
- int(63)
- [63]=>
- int(64)
- [64]=>
- int(65)
- [65]=>
- int(66)
- [66]=>
- int(67)
- [67]=>
- int(68)
- [68]=>
- int(69)
- [69]=>
- int(70)
- [70]=>
- int(71)
- [71]=>
- int(72)
- [72]=>
- int(73)
- [73]=>
- int(74)
- [74]=>
- int(75)
- [75]=>
- int(76)
- [76]=>
- int(77)
- [77]=>
- int(78)
- [78]=>
- int(79)
- [79]=>
- int(80)
- [80]=>
- int(81)
- [81]=>
- int(82)
- [82]=>
- int(83)
- [83]=>
- int(84)
- [84]=>
- int(85)
- [85]=>
- int(86)
- [86]=>
- int(87)
- [87]=>
- int(88)
- [88]=>
- int(89)
- [89]=>
- int(90)
- [90]=>
- int(91)
- [91]=>
- int(92)
- [92]=>
- int(93)
- [93]=>
- int(94)
- [94]=>
- int(95)
- [95]=>
- int(96)
- [96]=>
- int(97)
- [97]=>
- int(98)
- [98]=>
- int(99)
- [99]=>
- int(100)
-}
-array(100) {
- [0]=>
- int(100)
- [1]=>
- int(99)
- [2]=>
- int(98)
- [3]=>
- int(97)
- [4]=>
- int(96)
- [5]=>
- int(95)
- [6]=>
- int(94)
- [7]=>
- int(93)
- [8]=>
- int(92)
- [9]=>
- int(91)
- [10]=>
- int(90)
- [11]=>
- int(89)
- [12]=>
- int(88)
- [13]=>
- int(87)
- [14]=>
- int(86)
- [15]=>
- int(85)
- [16]=>
- int(84)
- [17]=>
- int(83)
- [18]=>
- int(82)
- [19]=>
- int(81)
- [20]=>
- int(80)
- [21]=>
- int(79)
- [22]=>
- int(78)
- [23]=>
- int(77)
- [24]=>
- int(76)
- [25]=>
- int(75)
- [26]=>
- int(74)
- [27]=>
- int(73)
- [28]=>
- int(72)
- [29]=>
- int(71)
- [30]=>
- int(70)
- [31]=>
- int(69)
- [32]=>
- int(68)
- [33]=>
- int(67)
- [34]=>
- int(66)
- [35]=>
- int(65)
- [36]=>
- int(64)
- [37]=>
- int(63)
- [38]=>
- int(62)
- [39]=>
- int(61)
- [40]=>
- int(60)
- [41]=>
- int(59)
- [42]=>
- int(58)
- [43]=>
- int(57)
- [44]=>
- int(56)
- [45]=>
- int(55)
- [46]=>
- int(54)
- [47]=>
- int(53)
- [48]=>
- int(52)
- [49]=>
- int(51)
- [50]=>
- int(50)
- [51]=>
- int(49)
- [52]=>
- int(48)
- [53]=>
- int(47)
- [54]=>
- int(46)
- [55]=>
- int(45)
- [56]=>
- int(44)
- [57]=>
- int(43)
- [58]=>
- int(42)
- [59]=>
- int(41)
- [60]=>
- int(40)
- [61]=>
- int(39)
- [62]=>
- int(38)
- [63]=>
- int(37)
- [64]=>
- int(36)
- [65]=>
- int(35)
- [66]=>
- int(34)
- [67]=>
- int(33)
- [68]=>
- int(32)
- [69]=>
- int(31)
- [70]=>
- int(30)
- [71]=>
- int(29)
- [72]=>
- int(28)
- [73]=>
- int(27)
- [74]=>
- int(26)
- [75]=>
- int(25)
- [76]=>
- int(24)
- [77]=>
- int(23)
- [78]=>
- int(22)
- [79]=>
- int(21)
- [80]=>
- int(20)
- [81]=>
- int(19)
- [82]=>
- int(18)
- [83]=>
- int(17)
- [84]=>
- int(16)
- [85]=>
- int(15)
- [86]=>
- int(14)
- [87]=>
- int(13)
- [88]=>
- int(12)
- [89]=>
- int(11)
- [90]=>
- int(10)
- [91]=>
- int(9)
- [92]=>
- int(8)
- [93]=>
- int(7)
- [94]=>
- int(6)
- [95]=>
- int(5)
- [96]=>
- int(4)
- [97]=>
- int(3)
- [98]=>
- int(2)
- [99]=>
- int(1)
-}
-array(100) {
- [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)
- [10]=>
- int(11)
- [11]=>
- int(12)
- [12]=>
- int(13)
- [13]=>
- int(14)
- [14]=>
- int(15)
- [15]=>
- int(16)
- [16]=>
- int(17)
- [17]=>
- int(18)
- [18]=>
- int(19)
- [19]=>
- int(20)
- [20]=>
- int(21)
- [21]=>
- int(22)
- [22]=>
- int(23)
- [23]=>
- int(24)
- [24]=>
- int(25)
- [25]=>
- int(26)
- [26]=>
- int(27)
- [27]=>
- int(28)
- [28]=>
- int(29)
- [29]=>
- int(30)
- [30]=>
- int(31)
- [31]=>
- int(32)
- [32]=>
- int(33)
- [33]=>
- int(34)
- [34]=>
- int(35)
- [35]=>
- int(36)
- [36]=>
- int(37)
- [37]=>
- int(38)
- [38]=>
- int(39)
- [39]=>
- int(40)
- [40]=>
- int(41)
- [41]=>
- int(42)
- [42]=>
- int(43)
- [43]=>
- int(44)
- [44]=>
- int(45)
- [45]=>
- int(46)
- [46]=>
- int(47)
- [47]=>
- int(48)
- [48]=>
- int(49)
- [49]=>
- int(50)
- [50]=>
- int(51)
- [51]=>
- int(52)
- [52]=>
- int(53)
- [53]=>
- int(54)
- [54]=>
- int(55)
- [55]=>
- int(56)
- [56]=>
- int(57)
- [57]=>
- int(58)
- [58]=>
- int(59)
- [59]=>
- int(60)
- [60]=>
- int(61)
- [61]=>
- int(62)
- [62]=>
- int(63)
- [63]=>
- int(64)
- [64]=>
- int(65)
- [65]=>
- int(66)
- [66]=>
- int(67)
- [67]=>
- int(68)
- [68]=>
- int(69)
- [69]=>
- int(70)
- [70]=>
- int(71)
- [71]=>
- int(72)
- [72]=>
- int(73)
- [73]=>
- int(74)
- [74]=>
- int(75)
- [75]=>
- int(76)
- [76]=>
- int(77)
- [77]=>
- int(78)
- [78]=>
- int(79)
- [79]=>
- int(80)
- [80]=>
- int(81)
- [81]=>
- int(82)
- [82]=>
- int(83)
- [83]=>
- int(84)
- [84]=>
- int(85)
- [85]=>
- int(86)
- [86]=>
- int(87)
- [87]=>
- int(88)
- [88]=>
- int(89)
- [89]=>
- int(90)
- [90]=>
- int(91)
- [91]=>
- int(92)
- [92]=>
- int(93)
- [93]=>
- int(94)
- [94]=>
- int(95)
- [95]=>
- int(96)
- [96]=>
- int(97)
- [97]=>
- int(98)
- [98]=>
- int(99)
- [99]=>
- int(100)
-}
-array(100) {
- [0]=>
- int(100)
- [1]=>
- int(99)
- [2]=>
- int(98)
- [3]=>
- int(97)
- [4]=>
- int(96)
- [5]=>
- int(95)
- [6]=>
- int(94)
- [7]=>
- int(93)
- [8]=>
- int(92)
- [9]=>
- int(91)
- [10]=>
- int(90)
- [11]=>
- int(89)
- [12]=>
- int(88)
- [13]=>
- int(87)
- [14]=>
- int(86)
- [15]=>
- int(85)
- [16]=>
- int(84)
- [17]=>
- int(83)
- [18]=>
- int(82)
- [19]=>
- int(81)
- [20]=>
- int(80)
- [21]=>
- int(79)
- [22]=>
- int(78)
- [23]=>
- int(77)
- [24]=>
- int(76)
- [25]=>
- int(75)
- [26]=>
- int(74)
- [27]=>
- int(73)
- [28]=>
- int(72)
- [29]=>
- int(71)
- [30]=>
- int(70)
- [31]=>
- int(69)
- [32]=>
- int(68)
- [33]=>
- int(67)
- [34]=>
- int(66)
- [35]=>
- int(65)
- [36]=>
- int(64)
- [37]=>
- int(63)
- [38]=>
- int(62)
- [39]=>
- int(61)
- [40]=>
- int(60)
- [41]=>
- int(59)
- [42]=>
- int(58)
- [43]=>
- int(57)
- [44]=>
- int(56)
- [45]=>
- int(55)
- [46]=>
- int(54)
- [47]=>
- int(53)
- [48]=>
- int(52)
- [49]=>
- int(51)
- [50]=>
- int(50)
- [51]=>
- int(49)
- [52]=>
- int(48)
- [53]=>
- int(47)
- [54]=>
- int(46)
- [55]=>
- int(45)
- [56]=>
- int(44)
- [57]=>
- int(43)
- [58]=>
- int(42)
- [59]=>
- int(41)
- [60]=>
- int(40)
- [61]=>
- int(39)
- [62]=>
- int(38)
- [63]=>
- int(37)
- [64]=>
- int(36)
- [65]=>
- int(35)
- [66]=>
- int(34)
- [67]=>
- int(33)
- [68]=>
- int(32)
- [69]=>
- int(31)
- [70]=>
- int(30)
- [71]=>
- int(29)
- [72]=>
- int(28)
- [73]=>
- int(27)
- [74]=>
- int(26)
- [75]=>
- int(25)
- [76]=>
- int(24)
- [77]=>
- int(23)
- [78]=>
- int(22)
- [79]=>
- int(21)
- [80]=>
- int(20)
- [81]=>
- int(19)
- [82]=>
- int(18)
- [83]=>
- int(17)
- [84]=>
- int(16)
- [85]=>
- int(15)
- [86]=>
- int(14)
- [87]=>
- int(13)
- [88]=>
- int(12)
- [89]=>
- int(11)
- [90]=>
- int(10)
- [91]=>
- int(9)
- [92]=>
- int(8)
- [93]=>
- int(7)
- [94]=>
- int(6)
- [95]=>
- int(5)
- [96]=>
- int(4)
- [97]=>
- int(3)
- [98]=>
- int(2)
- [99]=>
- int(1)
-}
-array(26) {
- [0]=>
- string(1) "a"
- [1]=>
- string(1) "b"
- [2]=>
- string(1) "c"
- [3]=>
- string(1) "d"
- [4]=>
- string(1) "e"
- [5]=>
- string(1) "f"
- [6]=>
- string(1) "g"
- [7]=>
- string(1) "h"
- [8]=>
- string(1) "i"
- [9]=>
- string(1) "j"
- [10]=>
- string(1) "k"
- [11]=>
- string(1) "l"
- [12]=>
- string(1) "m"
- [13]=>
- string(1) "n"
- [14]=>
- string(1) "o"
- [15]=>
- string(1) "p"
- [16]=>
- string(1) "q"
- [17]=>
- string(1) "r"
- [18]=>
- string(1) "s"
- [19]=>
- string(1) "t"
- [20]=>
- string(1) "u"
- [21]=>
- string(1) "v"
- [22]=>
- string(1) "w"
- [23]=>
- string(1) "x"
- [24]=>
- string(1) "y"
- [25]=>
- string(1) "z"
-}
-array(26) {
- [0]=>
- string(1) "z"
- [1]=>
- string(1) "y"
- [2]=>
- string(1) "x"
- [3]=>
- string(1) "w"
- [4]=>
- string(1) "v"
- [5]=>
- string(1) "u"
- [6]=>
- string(1) "t"
- [7]=>
- string(1) "s"
- [8]=>
- string(1) "r"
- [9]=>
- string(1) "q"
- [10]=>
- string(1) "p"
- [11]=>
- string(1) "o"
- [12]=>
- string(1) "n"
- [13]=>
- string(1) "m"
- [14]=>
- string(1) "l"
- [15]=>
- string(1) "k"
- [16]=>
- string(1) "j"
- [17]=>
- string(1) "i"
- [18]=>
- string(1) "h"
- [19]=>
- string(1) "g"
- [20]=>
- string(1) "f"
- [21]=>
- string(1) "e"
- [22]=>
- string(1) "d"
- [23]=>
- string(1) "c"
- [24]=>
- string(1) "b"
- [25]=>
- string(1) "a"
-}
-array(1) {
- [0]=>
- string(1) "q"
-}
-array(1) {
- [0]=>
- int(5)
-}
-array(6) {
- [0]=>
- float(5.1)
- [1]=>
- float(6.1)
- [2]=>
- float(7.1)
- [3]=>
- float(8.1)
- [4]=>
- float(9.1)
- [5]=>
- float(10.1)
-}
-array(6) {
- [0]=>
- float(10.1)
- [1]=>
- float(9.1)
- [2]=>
- float(8.1)
- [3]=>
- float(7.1)
- [4]=>
- float(6.1)
- [5]=>
- float(5.1)
-}
-array(6) {
- [0]=>
- float(5.1)
- [1]=>
- float(6.1)
- [2]=>
- float(7.1)
- [3]=>
- float(8.1)
- [4]=>
- float(9.1)
- [5]=>
- float(10.1)
-}
-array(6) {
- [0]=>
- float(10.1)
- [1]=>
- float(9.1)
- [2]=>
- float(8.1)
- [3]=>
- float(7.1)
- [4]=>
- float(6.1)
- [5]=>
- float(5.1)
-}
-array(41) {
- [0]=>
- float(1)
- [1]=>
- float(1.1)
- [2]=>
- float(1.2)
- [3]=>
- float(1.3)
- [4]=>
- float(1.4)
- [5]=>
- float(1.5)
- [6]=>
- float(1.6)
- [7]=>
- float(1.7)
- [8]=>
- float(1.8)
- [9]=>
- float(1.9)
- [10]=>
- float(2)
- [11]=>
- float(2.1)
- [12]=>
- float(2.2)
- [13]=>
- float(2.3)
- [14]=>
- float(2.4)
- [15]=>
- float(2.5)
- [16]=>
- float(2.6)
- [17]=>
- float(2.7)
- [18]=>
- float(2.8)
- [19]=>
- float(2.9)
- [20]=>
- float(3)
- [21]=>
- float(3.1)
- [22]=>
- float(3.2)
- [23]=>
- float(3.3)
- [24]=>
- float(3.4)
- [25]=>
- float(3.5)
- [26]=>
- float(3.6)
- [27]=>
- float(3.7)
- [28]=>
- float(3.8)
- [29]=>
- float(3.9)
- [30]=>
- float(4)
- [31]=>
- float(4.1)
- [32]=>
- float(4.2)
- [33]=>
- float(4.3)
- [34]=>
- float(4.4)
- [35]=>
- float(4.5)
- [36]=>
- float(4.6)
- [37]=>
- float(4.7)
- [38]=>
- float(4.8)
- [39]=>
- float(4.9)
- [40]=>
- float(5)
-}
-array(41) {
- [0]=>
- float(5)
- [1]=>
- float(4.9)
- [2]=>
- float(4.8)
- [3]=>
- float(4.7)
- [4]=>
- float(4.6)
- [5]=>
- float(4.5)
- [6]=>
- float(4.4)
- [7]=>
- float(4.3)
- [8]=>
- float(4.2)
- [9]=>
- float(4.1)
- [10]=>
- float(4)
- [11]=>
- float(3.9)
- [12]=>
- float(3.8)
- [13]=>
- float(3.7)
- [14]=>
- float(3.6)
- [15]=>
- float(3.5)
- [16]=>
- float(3.4)
- [17]=>
- float(3.3)
- [18]=>
- float(3.2)
- [19]=>
- float(3.1)
- [20]=>
- float(3)
- [21]=>
- float(2.9)
- [22]=>
- float(2.8)
- [23]=>
- float(2.7)
- [24]=>
- float(2.6)
- [25]=>
- float(2.5)
- [26]=>
- float(2.4)
- [27]=>
- float(2.3)
- [28]=>
- float(2.2)
- [29]=>
- float(2.1)
- [30]=>
- float(2)
- [31]=>
- float(1.9)
- [32]=>
- float(1.8)
- [33]=>
- float(1.7)
- [34]=>
- float(1.6)
- [35]=>
- float(1.5)
- [36]=>
- float(1.4)
- [37]=>
- float(1.3)
- [38]=>
- float(1.2)
- [39]=>
- float(1.1)
- [40]=>
- float(1)
-}
-array(41) {
- [0]=>
- float(1)
- [1]=>
- float(1.1)
- [2]=>
- float(1.2)
- [3]=>
- float(1.3)
- [4]=>
- float(1.4)
- [5]=>
- float(1.5)
- [6]=>
- float(1.6)
- [7]=>
- float(1.7)
- [8]=>
- float(1.8)
- [9]=>
- float(1.9)
- [10]=>
- float(2)
- [11]=>
- float(2.1)
- [12]=>
- float(2.2)
- [13]=>
- float(2.3)
- [14]=>
- float(2.4)
- [15]=>
- float(2.5)
- [16]=>
- float(2.6)
- [17]=>
- float(2.7)
- [18]=>
- float(2.8)
- [19]=>
- float(2.9)
- [20]=>
- float(3)
- [21]=>
- float(3.1)
- [22]=>
- float(3.2)
- [23]=>
- float(3.3)
- [24]=>
- float(3.4)
- [25]=>
- float(3.5)
- [26]=>
- float(3.6)
- [27]=>
- float(3.7)
- [28]=>
- float(3.8)
- [29]=>
- float(3.9)
- [30]=>
- float(4)
- [31]=>
- float(4.1)
- [32]=>
- float(4.2)
- [33]=>
- float(4.3)
- [34]=>
- float(4.4)
- [35]=>
- float(4.5)
- [36]=>
- float(4.6)
- [37]=>
- float(4.7)
- [38]=>
- float(4.8)
- [39]=>
- float(4.9)
- [40]=>
- float(5)
-}
-array(41) {
- [0]=>
- float(1)
- [1]=>
- float(1.1)
- [2]=>
- float(1.2)
- [3]=>
- float(1.3)
- [4]=>
- float(1.4)
- [5]=>
- float(1.5)
- [6]=>
- float(1.6)
- [7]=>
- float(1.7)
- [8]=>
- float(1.8)
- [9]=>
- float(1.9)
- [10]=>
- float(2)
- [11]=>
- float(2.1)
- [12]=>
- float(2.2)
- [13]=>
- float(2.3)
- [14]=>
- float(2.4)
- [15]=>
- float(2.5)
- [16]=>
- float(2.6)
- [17]=>
- float(2.7)
- [18]=>
- float(2.8)
- [19]=>
- float(2.9)
- [20]=>
- float(3)
- [21]=>
- float(3.1)
- [22]=>
- float(3.2)
- [23]=>
- float(3.3)
- [24]=>
- float(3.4)
- [25]=>
- float(3.5)
- [26]=>
- float(3.6)
- [27]=>
- float(3.7)
- [28]=>
- float(3.8)
- [29]=>
- float(3.9)
- [30]=>
- float(4)
- [31]=>
- float(4.1)
- [32]=>
- float(4.2)
- [33]=>
- float(4.3)
- [34]=>
- float(4.4)
- [35]=>
- float(4.5)
- [36]=>
- float(4.6)
- [37]=>
- float(4.7)
- [38]=>
- float(4.8)
- [39]=>
- float(4.9)
- [40]=>
- float(5)
-}
diff --git a/ext/standard/tests/array/var_export.phpt b/ext/standard/tests/array/var_export.phpt
deleted file mode 100644
index d5acf9dada..0000000000
--- a/ext/standard/tests/array/var_export.phpt
+++ /dev/null
@@ -1,11 +0,0 @@
---TEST--
-var_export() and objects with numeric indexes properties
---FILE--
-<?php
-$a = (object) array (1, 3, "foo" => "bar");
-var_export($a);
-?>
---EXPECT--
-class stdClass {
- public $foo = 'bar';
-}
diff --git a/ext/standard/tests/assert/assert.phpt b/ext/standard/tests/assert/assert.phpt
deleted file mode 100644
index bced47d8f3..0000000000
--- a/ext/standard/tests/assert/assert.phpt
+++ /dev/null
@@ -1,39 +0,0 @@
---TEST--
-assert()
---INI--
-error_reporting = 2039
---FILE--
-<?php
-function a($file,$line,$myev)
-{
- echo "assertion failed $line,\"$myev\"\n";
-}
-
-class a
-{
- function assert($file,$line,$myev)
- {
- echo "class assertion failed $line,\"$myev\"\n";
- }
-}
-
-assert_options(ASSERT_ACTIVE,1);
-assert_options(ASSERT_QUIET_EVAL,1);
-assert_options(ASSERT_WARNING,0);
-
-$a = 0;
-
-assert_options(ASSERT_CALLBACK,"a");
-assert('$a != 0');
-
-assert_options(ASSERT_CALLBACK,array("a","assert"));
-assert('$a != 0');
-
-$obj = new a();
-assert_options(ASSERT_CALLBACK,array(&$obj,"assert"));
-assert('$a != 0');
-?>
---EXPECT--
-assertion failed 22,"$a != 0"
-class assertion failed 25,"$a != 0"
-class assertion failed 29,"$a != 0"
diff --git a/ext/standard/tests/file/001-win32.phpt b/ext/standard/tests/file/001-win32.phpt
deleted file mode 100644
index 09ab2b7a1b..0000000000
--- a/ext/standard/tests/file/001-win32.phpt
+++ /dev/null
@@ -1,125 +0,0 @@
---TEST--
-File type functions
---SKIPIF--
-<?php
-if (substr(PHP_OS, 0, 3) != 'WIN') {
- die('skip only for Windows');
-}
-?>
---FILE--
-<?php
-chdir(dirname(__FILE__));
-@unlink('test.file');
-@unlink('test.link');
-if (file_exists('test.file')) {
- echo "test.file exists\n";
-} else {
- echo "test.file does not exist\n";
-}
-fclose (fopen('test.file', 'w'));
-chmod ('test.file', 0744);
-if (file_exists('test.file')) {
- echo "test.file exists\n";
-} 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 {
- echo "test.file does not exist\n";
-}
-$s = stat ('test.file');
-$ls = lstat ('test.file');
-for ($i = 0; $i <= 12; $i++) {
- if ($ls[$i] != $s[$i]) {
- echo "test.file lstat and stat differ at element $i\n";
- }
-}
-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')) {
- echo "test.file is writeable\n";
-} else {
- echo "test.file is not writeable\n";
-}
-if (is_readable('test.file')) {
- echo "test.file is readable\n";
-} else {
- echo "test.file is not readable\n";
-}
-if (is_file('test.file')) {
- echo "test.file is a regular file\n";
-} 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 {
- echo "../file is not a directory\n";
-}
-if (is_dir('test.file')) {
- echo "test.file is a directory\n";
-} else {
- echo "test.file is not a directory\n";
-}
-unlink('test.file');
-if (file_exists('test.file')) {
- echo "test.file exists (cached)\n";
-} else {
- echo "test.file does not exist\n";
-}
-clearstatcache();
-if (file_exists('test.file')) {
- echo "test.file exists\n";
-} else {
- echo "test.file does not exist\n";
-}
-?>
---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/001.phpt b/ext/standard/tests/file/001.phpt
deleted file mode 100644
index e3768b19dd..0000000000
--- a/ext/standard/tests/file/001.phpt
+++ /dev/null
@@ -1,145 +0,0 @@
---TEST--
-File type functions
---SKIPIF--
-<?php
-if (substr(PHP_OS, 0, 3) == 'WIN') {
- die('skip no symlinks on Windows');
-}
-?>
---FILE--
-<?php
-chdir(dirname(__FILE__));
-@unlink('test.file');
-@unlink('test.link');
-if (file_exists('test.file')) {
- echo "test.file exists\n";
-} else {
- echo "test.file does not exist\n";
-}
-fclose (fopen('test.file', 'w'));
-chmod ('test.file', 0744);
-if (file_exists('test.file')) {
- echo "test.file exists\n";
-} else {
- echo "test.file does not exist\n";
-}
-sleep (2);
-symlink('test.file','test.link');
-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 {
- echo "test.file does not exist\n";
-}
-$s = stat ('test.file');
-$ls = lstat ('test.file');
-for ($i = 0; $i <= 12; $i++) {
- if ($ls[$i] != $s[$i]) {
- echo "test.file lstat and stat differ at element $i\n";
- }
-}
-$s = stat ('test.link');
-$ls = lstat ('test.link');
-for ($i = 0; $i <= 11; $i++) {
- if ($ls[$i] != $s[$i]) {
- if ($i != 6 && $i != 10 && $i != 11) echo "test.link lstat and stat differ at element $i\n";
- }
-}
-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')) {
- echo "test.file is writeable\n";
-} else {
- echo "test.file is not writeable\n";
-}
-if (is_readable('test.file')) {
- echo "test.file is readable\n";
-} else {
- echo "test.file is not readable\n";
-}
-if (is_executable('test.file')) {
- echo "test.file is executable\n";
-} else {
- echo "test.file is not executable\n";
-}
-if (is_file('test.file')) {
- echo "test.file is a regular file\n";
-} 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 {
- echo "../file is not a directory\n";
-}
-if (is_dir('test.file')) {
- echo "test.file is a directory\n";
-} else {
- echo "test.file is not a directory\n";
-}
-unlink('test.file');
-unlink('test.link');
-if (file_exists('test.file')) {
- echo "test.file exists (cached)\n";
-} else {
- echo "test.file does not exist\n";
-}
-clearstatcache();
-if (file_exists('test.file')) {
- echo "test.file exists\n";
-} else {
- echo "test.file does not exist\n";
-}
-?>
---EXPECT--
-test.file does not exist
-test.file exists
-test.link exists
-test.file is not a symlink
-test.link is a symlink
-test.file exists
-test.link lstat and stat differ at element 1
-test.link lstat and stat differ at element 2
-test.link lstat and stat differ at element 7
-test.link lstat and stat differ at element 8
-test.link lstat and stat differ at element 9
-test.file is file
-test.link is link
-test.file permissions are 0744
-test.file size is 0
-test.file is writeable
-test.file is readable
-test.file is executable
-test.file is a regular file
-test.link is 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/002.phpt b/ext/standard/tests/file/002.phpt
deleted file mode 100644
index 134f5416fc..0000000000
--- a/ext/standard/tests/file/002.phpt
+++ /dev/null
@@ -1,52 +0,0 @@
---TEST--
-File/Stream functions
---FILE--
-<?php
-
-$data = <<<EOD
-blah blah blah blah blah blah blah
-blah blah blah blah blah blah blah
-blah blah blah blah blah blah blah
-blah blah blah blah blah blah blah
-blah blah blah blah blah blah blah
-blah blah blah blah blah blah blah
-blah blah blah blah blah blah blah
-blah blah blah blah blah blah blah
-blah blah blah blah blah blah blah
-blah blah blah blah blah blah blah
-blah blah blah blah blah blah blah
-blah blah blah blah blah blah blah
-blah blah blah blah blah blah blah
-blah blah blah blah blah blah blah
-blah blah blah blah blah blah blah
-blah blah blah blah blah blah blah
-EOD;
-
-$name = tempnam("./ext/standard/tests/file/", "php");
-$fp = fopen($name, "w");
-fwrite($fp, $data);
-fclose($fp);
-
-//readfile($name);
-echo file_get_contents($name);
-
-unlink($name);
-
-?>
---EXPECT--
-blah blah blah blah blah blah blah
-blah blah blah blah blah blah blah
-blah blah blah blah blah blah blah
-blah blah blah blah blah blah blah
-blah blah blah blah blah blah blah
-blah blah blah blah blah blah blah
-blah blah blah blah blah blah blah
-blah blah blah blah blah blah blah
-blah blah blah blah blah blah blah
-blah blah blah blah blah blah blah
-blah blah blah blah blah blah blah
-blah blah blah blah blah blah blah
-blah blah blah blah blah blah blah
-blah blah blah blah blah blah blah
-blah blah blah blah blah blah blah
-blah blah blah blah blah blah blah
diff --git a/ext/standard/tests/file/003.phpt b/ext/standard/tests/file/003.phpt
deleted file mode 100644
index 8eeaa939eb..0000000000
--- a/ext/standard/tests/file/003.phpt
+++ /dev/null
@@ -1,41 +0,0 @@
---TEST--
-is_*() and file_exists() return values are boolean.
---FILE--
-<?php
-
-$funcs = array(
- 'is_writable',
- 'is_readable',
- 'is_executable',
- 'is_file',
- 'file_exists',
-);
-
-$filename="";
-
-foreach ($funcs as $test) {
- $bb = $test($filename);
- echo gettype($bb)."\n";
- clearstatcache();
-}
-
-$filename="run-tests.php";
-
-foreach ($funcs as $test) {
- $bb = $test($filename);
- echo gettype($bb)."\n";
- clearstatcache();
-}
-
-?>
---EXPECT--
-boolean
-boolean
-boolean
-boolean
-boolean
-boolean
-boolean
-boolean
-boolean
-boolean
diff --git a/ext/standard/tests/file/004.phpt b/ext/standard/tests/file/004.phpt
deleted file mode 100644
index f1fab47ac3..0000000000
--- a/ext/standard/tests/file/004.phpt
+++ /dev/null
@@ -1,61 +0,0 @@
---TEST--
-file_put_contents() test
---FILE--
-<?php
- chdir(dirname(__FILE__));
- for ($i = 1; $i < 6; $i++) {
- @unlink("./TEST{$i}");
- }
-
- echo "String Test: ";
- echo file_put_contents("TEST1", file_get_contents(__FILE__)) !== FALSE ? 'OK' : 'FAIL';
- echo "\n";
-
- $old_int = $int = rand();
- $ret = file_put_contents("TEST2", $int);
- echo "Integer Test: ";
- if ($int === $old_int && $ret !== FALSE && md5($int) == md5_file("TEST2")) {
- echo 'OK';
- } else {
- echo 'FAIL';
- }
- echo "\n";
-
- $old_int = $int = time() / 1000;
- $ret = file_put_contents("TEST3", $int);
- echo "Float Test: ";
- if ($int === $old_int && $ret !== FALSE && md5($int) == md5_file("TEST3")) {
- echo 'OK';
- } else {
- echo 'FAIL';
- }
- echo "\n";
-
- $ret = file_put_contents("TEST4", __FILE__);
- echo "Bool Test: ";
- if ($ret !== FALSE && md5(__FILE__) == md5_file("TEST4")) {
- echo 'OK';
- } else {
- echo 'FAIL';
- }
- echo "\n";
-
- $ret = @file_put_contents("TEST5", $_SERVER);
- echo "Array Test: ";
- if ($ret !== FALSE && @md5(implode('', $_SERVER)) == md5_file("TEST5")) {
- echo 'OK';
- } else {
- echo 'FAIL';
- }
- echo "\n";
-
- for ($i = 1; $i < 6; $i++) {
- @unlink("./TEST{$i}");
- }
-?>
---EXPECT--
-String Test: OK
-Integer Test: OK
-Float Test: OK
-Bool Test: OK
-Array Test: OK
diff --git a/ext/standard/tests/file/bug12556.phpt b/ext/standard/tests/file/bug12556.phpt
deleted file mode 100644
index c8e35cfcad..0000000000
--- a/ext/standard/tests/file/bug12556.phpt
+++ /dev/null
@@ -1,48 +0,0 @@
---TEST--
-Bug #12556 (fgetcsv() ignores lengths when quotes not closed)
---FILE--
-<?php
-$fp = fopen(dirname(__FILE__)."/test.csv", "r");
-while($line = fgetcsv($fp, 24)) {
- $line = str_replace("\x0d\x0a", "\x0a", $line);
- var_dump($line);
-}
-fclose($fp);
-?>
---EXPECT--
-array(4) {
- [0]=>
- string(1) "6"
- [1]=>
- string(1) "7"
- [2]=>
- string(1) "8"
- [3]=>
- string(5) "line1"
-}
-array(4) {
- [0]=>
- string(1) "1"
- [1]=>
- string(1) "2"
- [2]=>
- string(1) "3"
- [3]=>
- string(186) "line2
-2,4,5,line3
-2,4,5,line3
-2,4,5,line3
-2,4,5,line3
-2,4,5,line3
-2,4,5,line3
-2,4,5,line3
-2,4,5,line3
-2,4,5,line3
-2,4,5,line3
-2,4,5,line3
-2,4,5,line3
-2,4,5,line3
-2,4,5,line3
-2,4,5,line3
-"
-}
diff --git a/ext/standard/tests/file/bug20424.phpt b/ext/standard/tests/file/bug20424.phpt
deleted file mode 100644
index df10d4abdb..0000000000
--- a/ext/standard/tests/file/bug20424.phpt
+++ /dev/null
@@ -1,10 +0,0 @@
---TEST--
-Bug #20424 (stream_get_meta_data crashes on a normal file stream)
---FILE--
-<?php
-$f = fopen(dirname(__FILE__) . "/../../../../run-tests.php", "r");
-$dummy = var_export(stream_get_meta_data($f), TRUE);
-echo "I'm alive!\n";
-?>
---EXPECT--
-I'm alive!
diff --git a/ext/standard/tests/file/bug22382.phpt b/ext/standard/tests/file/bug22382.phpt
deleted file mode 100644
index 2ba36ee1de..0000000000
--- a/ext/standard/tests/file/bug22382.phpt
+++ /dev/null
@@ -1,25 +0,0 @@
---TEST--
-Bug #22382 (fgetcsv() does not handle escaped quotes correctly)
---FILE--
-<?php
-$fp = fopen(dirname(__FILE__)."/test2.csv", "r");
-while(($line = fgetcsv($fp, 1024))) {
- var_dump($line);
-}
-fclose($fp);
-?>
---EXPECT--
-array(6) {
- [0]=>
- string(3) "One"
- [1]=>
- string(7) "\"Two\""
- [2]=>
- string(7) "Three\""
- [3]=>
- string(4) "Four"
- [4]=>
- string(2) "\\"
- [5]=>
- string(28) "\\\\\\\\\\\\\\\\\\\\\\\"\\\\"
-}
diff --git a/ext/standard/tests/file/bug22414.phpt b/ext/standard/tests/file/bug22414.phpt
deleted file mode 100644
index f4f097d66d..0000000000
--- a/ext/standard/tests/file/bug22414.phpt
+++ /dev/null
@@ -1,34 +0,0 @@
---TEST--
-Bug #22414 (passthru() does not read data correctly)
---INI--
-safe_mode=
-output_handler=
---FILE--
-<?php
-
- $php = getenv('TEST_PHP_EXECUTABLE');
- $tmpfile = tempnam('/tmp', 'phpt');
-
- /* Regular Data Test */
- passthru($php . ' -n -r " echo \"HELLO\"; "');
-
- echo "\n";
-
- /* Binary Data Test */
- @unlink($pwd . '/passthru_test');
-
- $cmd = $php . ' -n -r \"readfile(@getenv(\'TEST_PHP_EXECUTABLE\')); \"';
- $cmd = $php . ' -n -r \' passthru("'.$cmd.'"); \' > '.$tmpfile ;
- exec($cmd);
-
- if (md5_file($php) == md5_file($tmpfile)) {
- echo "Works\n";
- } else {
- echo "Does not work\n";
- }
-
- @unlink($tmpfile);
-?>
---EXPECT--
-HELLO
-Works
diff --git a/ext/standard/tests/file/bug24313.phpt b/ext/standard/tests/file/bug24313.phpt
deleted file mode 100644
index dcea58ffef..0000000000
--- a/ext/standard/tests/file/bug24313.phpt
+++ /dev/null
@@ -1,10 +0,0 @@
---TEST--
-Bug #24313 (file_exists() warning on non-existant files when is open_basedir enabled)
---INI--
-open_basedir=/tmp
---FILE--
-<?php
- var_dump(file_exists("./foobar"));
-?>
---EXPECT--
-bool(false)
diff --git a/ext/standard/tests/file/bug24482.phpt b/ext/standard/tests/file/bug24482.phpt
deleted file mode 100644
index 4bf12e8f66..0000000000
--- a/ext/standard/tests/file/bug24482.phpt
+++ /dev/null
@@ -1,37 +0,0 @@
---TEST--
-Bug #24482 (GLOB_ONLYDIR not working)
---SKIPIF--
-<?php
-if (!function_exists("glob")) {
- die('skip glob() not available');
-}
-?>
---FILE--
-<?php
-$globdirs = glob("*", GLOB_ONLYDIR);
-
-$dirs = array();
-$dh = opendir(".");
-while (is_string($file = readdir($dh))) {
- if ($file{0} === ".") continue;
- if (!is_dir($file)) continue;
- $dirs[] = $file;
-}
-closedir($dh);
-
-if (count($dirs) != count($globdirs)) {
- echo "Directory count mismatch\n";
-
- echo "glob found:\n";
- sort($globdirs);
- var_dump($globdirs);
-
- echo "opendir/readdir/isdir found:\n";
- sort($dirs);
- var_dump($dirs);
-} else {
- echo "OK\n";
-}
-?>
---EXPECT--
-OK
diff --git a/ext/standard/tests/file/bug26003.phpt b/ext/standard/tests/file/bug26003.phpt
deleted file mode 100644
index 7d08374693..0000000000
--- a/ext/standard/tests/file/bug26003.phpt
+++ /dev/null
Binary files differ
diff --git a/ext/standard/tests/file/bug26615.phpt b/ext/standard/tests/file/bug26615.phpt
deleted file mode 100644
index 656c53a449..0000000000
--- a/ext/standard/tests/file/bug26615.phpt
+++ /dev/null
@@ -1,14 +0,0 @@
---TEST--
-Bug #26615 (exec crash on long input lines)
---FILE--
-<?php
-$out = array();
-$status = -1;
-exec($_ENV['TEST_PHP_EXECUTABLE'].' -r \'for($i=1;$i<=5000;$i++) print "$i\n";\' | tr \'\n\' \' \'', $out, $status);
-print_r($out);
-?>
---EXPECT--
-Array
-(
- [0] => 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 1365 1366 1367 1368 1369 1370 1371 1372 1373 1374 1375 1376 1377 1378 1379 1380 1381 1382 1383 1384 1385 1386 1387 1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 1402 1403 1404 1405 1406 1407 1408 1409 1410 1411 1412 1413 1414 1415 1416 1417 1418 1419 1420 1421 1422 1423 1424 1425 1426 1427 1428 1429 1430 1431 1432 1433 1434 1435 1436 1437 1438 1439 1440 1441 1442 1443 1444 1445 1446 1447 1448 1449 1450 1451 1452 1453 1454 1455 1456 1457 1458 1459 1460 1461 1462 1463 1464 1465 1466 1467 1468 1469 1470 1471 1472 1473 1474 1475 1476 1477 1478 1479 1480 1481 1482 1483 1484 1485 1486 1487 1488 1489 1490 1491 1492 1493 1494 1495 1496 1497 1498 1499 1500 1501 1502 1503 1504 1505 1506 1507 1508 1509 1510 1511 1512 1513 1514 1515 1516 1517 1518 1519 1520 1521 1522 1523 1524 1525 1526 1527 1528 1529 1530 1531 1532 1533 1534 1535 1536 1537 1538 1539 1540 1541 1542 1543 1544 1545 1546 1547 1548 1549 1550 1551 1552 1553 1554 1555 1556 1557 1558 1559 1560 1561 1562 1563 1564 1565 1566 1567 1568 1569 1570 1571 1572 1573 1574 1575 1576 1577 1578 1579 1580 1581 1582 1583 1584 1585 1586 1587 1588 1589 1590 1591 1592 1593 1594 1595 1596 1597 1598 1599 1600 1601 1602 1603 1604 1605 1606 1607 1608 1609 1610 1611 1612 1613 1614 1615 1616 1617 1618 1619 1620 1621 1622 1623 1624 1625 1626 1627 1628 1629 1630 1631 1632 1633 1634 1635 1636 1637 1638 1639 1640 1641 1642 1643 1644 1645 1646 1647 1648 1649 1650 1651 1652 1653 1654 1655 1656 1657 1658 1659 1660 1661 1662 1663 1664 1665 1666 1667 1668 1669 1670 1671 1672 1673 1674 1675 1676 1677 1678 1679 1680 1681 1682 1683 1684 1685 1686 1687 1688 1689 1690 1691 1692 1693 1694 1695 1696 1697 1698 1699 1700 1701 1702 1703 1704 1705 1706 1707 1708 1709 1710 1711 1712 1713 1714 1715 1716 1717 1718 1719 1720 1721 1722 1723 1724 1725 1726 1727 1728 1729 1730 1731 1732 1733 1734 1735 1736 1737 1738 1739 1740 1741 1742 1743 1744 1745 1746 1747 1748 1749 1750 1751 1752 1753 1754 1755 1756 1757 1758 1759 1760 1761 1762 1763 1764 1765 1766 1767 1768 1769 1770 1771 1772 1773 1774 1775 1776 1777 1778 1779 1780 1781 1782 1783 1784 1785 1786 1787 1788 1789 1790 1791 1792 1793 1794 1795 1796 1797 1798 1799 1800 1801 1802 1803 1804 1805 1806 1807 1808 1809 1810 1811 1812 1813 1814 1815 1816 1817 1818 1819 1820 1821 1822 1823 1824 1825 1826 1827 1828 1829 1830 1831 1832 1833 1834 1835 1836 1837 1838 1839 1840 1841 1842 1843 1844 1845 1846 1847 1848 1849 1850 1851 1852 1853 1854 1855 1856 1857 1858 1859 1860 1861 1862 1863 1864 1865 1866 1867 1868 1869 1870 1871 1872 1873 1874 1875 1876 1877 1878 1879 1880 1881 1882 1883 1884 1885 1886 1887 1888 1889 1890 1891 1892 1893 1894 1895 1896 1897 1898 1899 1900 1901 1902 1903 1904 1905 1906 1907 1908 1909 1910 1911 1912 1913 1914 1915 1916 1917 1918 1919 1920 1921 1922 1923 1924 1925 1926 1927 1928 1929 1930 1931 1932 1933 1934 1935 1936 1937 1938 1939 1940 1941 1942 1943 1944 1945 1946 1947 1948 1949 1950 1951 1952 1953 1954 1955 1956 1957 1958 1959 1960 1961 1962 1963 1964 1965 1966 1967 1968 1969 1970 1971 1972 1973 1974 1975 1976 1977 1978 1979 1980 1981 1982 1983 1984 1985 1986 1987 1988 1989 1990 1991 1992 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 2019 2020 2021 2022 2023 2024 2025 2026 2027 2028 2029 2030 2031 2032 2033 2034 2035 2036 2037 2038 2039 2040 2041 2042 2043 2044 2045 2046 2047 2048 2049 2050 2051 2052 2053 2054 2055 2056 2057 2058 2059 2060 2061 2062 2063 2064 2065 2066 2067 2068 2069 2070 2071 2072 2073 2074 2075 2076 2077 2078 2079 2080 2081 2082 2083 2084 2085 2086 2087 2088 2089 2090 2091 2092 2093 2094 2095 2096 2097 2098 2099 2100 2101 2102 2103 2104 2105 2106 2107 2108 2109 2110 2111 2112 2113 2114 2115 2116 2117 2118 2119 2120 2121 2122 2123 2124 2125 2126 2127 2128 2129 2130 2131 2132 2133 2134 2135 2136 2137 2138 2139 2140 2141 2142 2143 2144 2145 2146 2147 2148 2149 2150 2151 2152 2153 2154 2155 2156 2157 2158 2159 2160 2161 2162 2163 2164 2165 2166 2167 2168 2169 2170 2171 2172 2173 2174 2175 2176 2177 2178 2179 2180 2181 2182 2183 2184 2185 2186 2187 2188 2189 2190 2191 2192 2193 2194 2195 2196 2197 2198 2199 2200 2201 2202 2203 2204 2205 2206 2207 2208 2209 2210 2211 2212 2213 2214 2215 2216 2217 2218 2219 2220 2221 2222 2223 2224 2225 2226 2227 2228 2229 2230 2231 2232 2233 2234 2235 2236 2237 2238 2239 2240 2241 2242 2243 2244 2245 2246 2247 2248 2249 2250 2251 2252 2253 2254 2255 2256 2257 2258 2259 2260 2261 2262 2263 2264 2265 2266 2267 2268 2269 2270 2271 2272 2273 2274 2275 2276 2277 2278 2279 2280 2281 2282 2283 2284 2285 2286 2287 2288 2289 2290 2291 2292 2293 2294 2295 2296 2297 2298 2299 2300 2301 2302 2303 2304 2305 2306 2307 2308 2309 2310 2311 2312 2313 2314 2315 2316 2317 2318 2319 2320 2321 2322 2323 2324 2325 2326 2327 2328 2329 2330 2331 2332 2333 2334 2335 2336 2337 2338 2339 2340 2341 2342 2343 2344 2345 2346 2347 2348 2349 2350 2351 2352 2353 2354 2355 2356 2357 2358 2359 2360 2361 2362 2363 2364 2365 2366 2367 2368 2369 2370 2371 2372 2373 2374 2375 2376 2377 2378 2379 2380 2381 2382 2383 2384 2385 2386 2387 2388 2389 2390 2391 2392 2393 2394 2395 2396 2397 2398 2399 2400 2401 2402 2403 2404 2405 2406 2407 2408 2409 2410 2411 2412 2413 2414 2415 2416 2417 2418 2419 2420 2421 2422 2423 2424 2425 2426 2427 2428 2429 2430 2431 2432 2433 2434 2435 2436 2437 2438 2439 2440 2441 2442 2443 2444 2445 2446 2447 2448 2449 2450 2451 2452 2453 2454 2455 2456 2457 2458 2459 2460 2461 2462 2463 2464 2465 2466 2467 2468 2469 2470 2471 2472 2473 2474 2475 2476 2477 2478 2479 2480 2481 2482 2483 2484 2485 2486 2487 2488 2489 2490 2491 2492 2493 2494 2495 2496 2497 2498 2499 2500 2501 2502 2503 2504 2505 2506 2507 2508 2509 2510 2511 2512 2513 2514 2515 2516 2517 2518 2519 2520 2521 2522 2523 2524 2525 2526 2527 2528 2529 2530 2531 2532 2533 2534 2535 2536 2537 2538 2539 2540 2541 2542 2543 2544 2545 2546 2547 2548 2549 2550 2551 2552 2553 2554 2555 2556 2557 2558 2559 2560 2561 2562 2563 2564 2565 2566 2567 2568 2569 2570 2571 2572 2573 2574 2575 2576 2577 2578 2579 2580 2581 2582 2583 2584 2585 2586 2587 2588 2589 2590 2591 2592 2593 2594 2595 2596 2597 2598 2599 2600 2601 2602 2603 2604 2605 2606 2607 2608 2609 2610 2611 2612 2613 2614 2615 2616 2617 2618 2619 2620 2621 2622 2623 2624 2625 2626 2627 2628 2629 2630 2631 2632 2633 2634 2635 2636 2637 2638 2639 2640 2641 2642 2643 2644 2645 2646 2647 2648 2649 2650 2651 2652 2653 2654 2655 2656 2657 2658 2659 2660 2661 2662 2663 2664 2665 2666 2667 2668 2669 2670 2671 2672 2673 2674 2675 2676 2677 2678 2679 2680 2681 2682 2683 2684 2685 2686 2687 2688 2689 2690 2691 2692 2693 2694 2695 2696 2697 2698 2699 2700 2701 2702 2703 2704 2705 2706 2707 2708 2709 2710 2711 2712 2713 2714 2715 2716 2717 2718 2719 2720 2721 2722 2723 2724 2725 2726 2727 2728 2729 2730 2731 2732 2733 2734 2735 2736 2737 2738 2739 2740 2741 2742 2743 2744 2745 2746 2747 2748 2749 2750 2751 2752 2753 2754 2755 2756 2757 2758 2759 2760 2761 2762 2763 2764 2765 2766 2767 2768 2769 2770 2771 2772 2773 2774 2775 2776 2777 2778 2779 2780 2781 2782 2783 2784 2785 2786 2787 2788 2789 2790 2791 2792 2793 2794 2795 2796 2797 2798 2799 2800 2801 2802 2803 2804 2805 2806 2807 2808 2809 2810 2811 2812 2813 2814 2815 2816 2817 2818 2819 2820 2821 2822 2823 2824 2825 2826 2827 2828 2829 2830 2831 2832 2833 2834 2835 2836 2837 2838 2839 2840 2841 2842 2843 2844 2845 2846 2847 2848 2849 2850 2851 2852 2853 2854 2855 2856 2857 2858 2859 2860 2861 2862 2863 2864 2865 2866 2867 2868 2869 2870 2871 2872 2873 2874 2875 2876 2877 2878 2879 2880 2881 2882 2883 2884 2885 2886 2887 2888 2889 2890 2891 2892 2893 2894 2895 2896 2897 2898 2899 2900 2901 2902 2903 2904 2905 2906 2907 2908 2909 2910 2911 2912 2913 2914 2915 2916 2917 2918 2919 2920 2921 2922 2923 2924 2925 2926 2927 2928 2929 2930 2931 2932 2933 2934 2935 2936 2937 2938 2939 2940 2941 2942 2943 2944 2945 2946 2947 2948 2949 2950 2951 2952 2953 2954 2955 2956 2957 2958 2959 2960 2961 2962 2963 2964 2965 2966 2967 2968 2969 2970 2971 2972 2973 2974 2975 2976 2977 2978 2979 2980 2981 2982 2983 2984 2985 2986 2987 2988 2989 2990 2991 2992 2993 2994 2995 2996 2997 2998 2999 3000 3001 3002 3003 3004 3005 3006 3007 3008 3009 3010 3011 3012 3013 3014 3015 3016 3017 3018 3019 3020 3021 3022 3023 3024 3025 3026 3027 3028 3029 3030 3031 3032 3033 3034 3035 3036 3037 3038 3039 3040 3041 3042 3043 3044 3045 3046 3047 3048 3049 3050 3051 3052 3053 3054 3055 3056 3057 3058 3059 3060 3061 3062 3063 3064 3065 3066 3067 3068 3069 3070 3071 3072 3073 3074 3075 3076 3077 3078 3079 3080 3081 3082 3083 3084 3085 3086 3087 3088 3089 3090 3091 3092 3093 3094 3095 3096 3097 3098 3099 3100 3101 3102 3103 3104 3105 3106 3107 3108 3109 3110 3111 3112 3113 3114 3115 3116 3117 3118 3119 3120 3121 3122 3123 3124 3125 3126 3127 3128 3129 3130 3131 3132 3133 3134 3135 3136 3137 3138 3139 3140 3141 3142 3143 3144 3145 3146 3147 3148 3149 3150 3151 3152 3153 3154 3155 3156 3157 3158 3159 3160 3161 3162 3163 3164 3165 3166 3167 3168 3169 3170 3171 3172 3173 3174 3175 3176 3177 3178 3179 3180 3181 3182 3183 3184 3185 3186 3187 3188 3189 3190 3191 3192 3193 3194 3195 3196 3197 3198 3199 3200 3201 3202 3203 3204 3205 3206 3207 3208 3209 3210 3211 3212 3213 3214 3215 3216 3217 3218 3219 3220 3221 3222 3223 3224 3225 3226 3227 3228 3229 3230 3231 3232 3233 3234 3235 3236 3237 3238 3239 3240 3241 3242 3243 3244 3245 3246 3247 3248 3249 3250 3251 3252 3253 3254 3255 3256 3257 3258 3259 3260 3261 3262 3263 3264 3265 3266 3267 3268 3269 3270 3271 3272 3273 3274 3275 3276 3277 3278 3279 3280 3281 3282 3283 3284 3285 3286 3287 3288 3289 3290 3291 3292 3293 3294 3295 3296 3297 3298 3299 3300 3301 3302 3303 3304 3305 3306 3307 3308 3309 3310 3311 3312 3313 3314 3315 3316 3317 3318 3319 3320 3321 3322 3323 3324 3325 3326 3327 3328 3329 3330 3331 3332 3333 3334 3335 3336 3337 3338 3339 3340 3341 3342 3343 3344 3345 3346 3347 3348 3349 3350 3351 3352 3353 3354 3355 3356 3357 3358 3359 3360 3361 3362 3363 3364 3365 3366 3367 3368 3369 3370 3371 3372 3373 3374 3375 3376 3377 3378 3379 3380 3381 3382 3383 3384 3385 3386 3387 3388 3389 3390 3391 3392 3393 3394 3395 3396 3397 3398 3399 3400 3401 3402 3403 3404 3405 3406 3407 3408 3409 3410 3411 3412 3413 3414 3415 3416 3417 3418 3419 3420 3421 3422 3423 3424 3425 3426 3427 3428 3429 3430 3431 3432 3433 3434 3435 3436 3437 3438 3439 3440 3441 3442 3443 3444 3445 3446 3447 3448 3449 3450 3451 3452 3453 3454 3455 3456 3457 3458 3459 3460 3461 3462 3463 3464 3465 3466 3467 3468 3469 3470 3471 3472 3473 3474 3475 3476 3477 3478 3479 3480 3481 3482 3483 3484 3485 3486 3487 3488 3489 3490 3491 3492 3493 3494 3495 3496 3497 3498 3499 3500 3501 3502 3503 3504 3505 3506 3507 3508 3509 3510 3511 3512 3513 3514 3515 3516 3517 3518 3519 3520 3521 3522 3523 3524 3525 3526 3527 3528 3529 3530 3531 3532 3533 3534 3535 3536 3537 3538 3539 3540 3541 3542 3543 3544 3545 3546 3547 3548 3549 3550 3551 3552 3553 3554 3555 3556 3557 3558 3559 3560 3561 3562 3563 3564 3565 3566 3567 3568 3569 3570 3571 3572 3573 3574 3575 3576 3577 3578 3579 3580 3581 3582 3583 3584 3585 3586 3587 3588 3589 3590 3591 3592 3593 3594 3595 3596 3597 3598 3599 3600 3601 3602 3603 3604 3605 3606 3607 3608 3609 3610 3611 3612 3613 3614 3615 3616 3617 3618 3619 3620 3621 3622 3623 3624 3625 3626 3627 3628 3629 3630 3631 3632 3633 3634 3635 3636 3637 3638 3639 3640 3641 3642 3643 3644 3645 3646 3647 3648 3649 3650 3651 3652 3653 3654 3655 3656 3657 3658 3659 3660 3661 3662 3663 3664 3665 3666 3667 3668 3669 3670 3671 3672 3673 3674 3675 3676 3677 3678 3679 3680 3681 3682 3683 3684 3685 3686 3687 3688 3689 3690 3691 3692 3693 3694 3695 3696 3697 3698 3699 3700 3701 3702 3703 3704 3705 3706 3707 3708 3709 3710 3711 3712 3713 3714 3715 3716 3717 3718 3719 3720 3721 3722 3723 3724 3725 3726 3727 3728 3729 3730 3731 3732 3733 3734 3735 3736 3737 3738 3739 3740 3741 3742 3743 3744 3745 3746 3747 3748 3749 3750 3751 3752 3753 3754 3755 3756 3757 3758 3759 3760 3761 3762 3763 3764 3765 3766 3767 3768 3769 3770 3771 3772 3773 3774 3775 3776 3777 3778 3779 3780 3781 3782 3783 3784 3785 3786 3787 3788 3789 3790 3791 3792 3793 3794 3795 3796 3797 3798 3799 3800 3801 3802 3803 3804 3805 3806 3807 3808 3809 3810 3811 3812 3813 3814 3815 3816 3817 3818 3819 3820 3821 3822 3823 3824 3825 3826 3827 3828 3829 3830 3831 3832 3833 3834 3835 3836 3837 3838 3839 3840 3841 3842 3843 3844 3845 3846 3847 3848 3849 3850 3851 3852 3853 3854 3855 3856 3857 3858 3859 3860 3861 3862 3863 3864 3865 3866 3867 3868 3869 3870 3871 3872 3873 3874 3875 3876 3877 3878 3879 3880 3881 3882 3883 3884 3885 3886 3887 3888 3889 3890 3891 3892 3893 3894 3895 3896 3897 3898 3899 3900 3901 3902 3903 3904 3905 3906 3907 3908 3909 3910 3911 3912 3913 3914 3915 3916 3917 3918 3919 3920 3921 3922 3923 3924 3925 3926 3927 3928 3929 3930 3931 3932 3933 3934 3935 3936 3937 3938 3939 3940 3941 3942 3943 3944 3945 3946 3947 3948 3949 3950 3951 3952 3953 3954 3955 3956 3957 3958 3959 3960 3961 3962 3963 3964 3965 3966 3967 3968 3969 3970 3971 3972 3973 3974 3975 3976 3977 3978 3979 3980 3981 3982 3983 3984 3985 3986 3987 3988 3989 3990 3991 3992 3993 3994 3995 3996 3997 3998 3999 4000 4001 4002 4003 4004 4005 4006 4007 4008 4009 4010 4011 4012 4013 4014 4015 4016 4017 4018 4019 4020 4021 4022 4023 4024 4025 4026 4027 4028 4029 4030 4031 4032 4033 4034 4035 4036 4037 4038 4039 4040 4041 4042 4043 4044 4045 4046 4047 4048 4049 4050 4051 4052 4053 4054 4055 4056 4057 4058 4059 4060 4061 4062 4063 4064 4065 4066 4067 4068 4069 4070 4071 4072 4073 4074 4075 4076 4077 4078 4079 4080 4081 4082 4083 4084 4085 4086 4087 4088 4089 4090 4091 4092 4093 4094 4095 4096 4097 4098 4099 4100 4101 4102 4103 4104 4105 4106 4107 4108 4109 4110 4111 4112 4113 4114 4115 4116 4117 4118 4119 4120 4121 4122 4123 4124 4125 4126 4127 4128 4129 4130 4131 4132 4133 4134 4135 4136 4137 4138 4139 4140 4141 4142 4143 4144 4145 4146 4147 4148 4149 4150 4151 4152 4153 4154 4155 4156 4157 4158 4159 4160 4161 4162 4163 4164 4165 4166 4167 4168 4169 4170 4171 4172 4173 4174 4175 4176 4177 4178 4179 4180 4181 4182 4183 4184 4185 4186 4187 4188 4189 4190 4191 4192 4193 4194 4195 4196 4197 4198 4199 4200 4201 4202 4203 4204 4205 4206 4207 4208 4209 4210 4211 4212 4213 4214 4215 4216 4217 4218 4219 4220 4221 4222 4223 4224 4225 4226 4227 4228 4229 4230 4231 4232 4233 4234 4235 4236 4237 4238 4239 4240 4241 4242 4243 4244 4245 4246 4247 4248 4249 4250 4251 4252 4253 4254 4255 4256 4257 4258 4259 4260 4261 4262 4263 4264 4265 4266 4267 4268 4269 4270 4271 4272 4273 4274 4275 4276 4277 4278 4279 4280 4281 4282 4283 4284 4285 4286 4287 4288 4289 4290 4291 4292 4293 4294 4295 4296 4297 4298 4299 4300 4301 4302 4303 4304 4305 4306 4307 4308 4309 4310 4311 4312 4313 4314 4315 4316 4317 4318 4319 4320 4321 4322 4323 4324 4325 4326 4327 4328 4329 4330 4331 4332 4333 4334 4335 4336 4337 4338 4339 4340 4341 4342 4343 4344 4345 4346 4347 4348 4349 4350 4351 4352 4353 4354 4355 4356 4357 4358 4359 4360 4361 4362 4363 4364 4365 4366 4367 4368 4369 4370 4371 4372 4373 4374 4375 4376 4377 4378 4379 4380 4381 4382 4383 4384 4385 4386 4387 4388 4389 4390 4391 4392 4393 4394 4395 4396 4397 4398 4399 4400 4401 4402 4403 4404 4405 4406 4407 4408 4409 4410 4411 4412 4413 4414 4415 4416 4417 4418 4419 4420 4421 4422 4423 4424 4425 4426 4427 4428 4429 4430 4431 4432 4433 4434 4435 4436 4437 4438 4439 4440 4441 4442 4443 4444 4445 4446 4447 4448 4449 4450 4451 4452 4453 4454 4455 4456 4457 4458 4459 4460 4461 4462 4463 4464 4465 4466 4467 4468 4469 4470 4471 4472 4473 4474 4475 4476 4477 4478 4479 4480 4481 4482 4483 4484 4485 4486 4487 4488 4489 4490 4491 4492 4493 4494 4495 4496 4497 4498 4499 4500 4501 4502 4503 4504 4505 4506 4507 4508 4509 4510 4511 4512 4513 4514 4515 4516 4517 4518 4519 4520 4521 4522 4523 4524 4525 4526 4527 4528 4529 4530 4531 4532 4533 4534 4535 4536 4537 4538 4539 4540 4541 4542 4543 4544 4545 4546 4547 4548 4549 4550 4551 4552 4553 4554 4555 4556 4557 4558 4559 4560 4561 4562 4563 4564 4565 4566 4567 4568 4569 4570 4571 4572 4573 4574 4575 4576 4577 4578 4579 4580 4581 4582 4583 4584 4585 4586 4587 4588 4589 4590 4591 4592 4593 4594 4595 4596 4597 4598 4599 4600 4601 4602 4603 4604 4605 4606 4607 4608 4609 4610 4611 4612 4613 4614 4615 4616 4617 4618 4619 4620 4621 4622 4623 4624 4625 4626 4627 4628 4629 4630 4631 4632 4633 4634 4635 4636 4637 4638 4639 4640 4641 4642 4643 4644 4645 4646 4647 4648 4649 4650 4651 4652 4653 4654 4655 4656 4657 4658 4659 4660 4661 4662 4663 4664 4665 4666 4667 4668 4669 4670 4671 4672 4673 4674 4675 4676 4677 4678 4679 4680 4681 4682 4683 4684 4685 4686 4687 4688 4689 4690 4691 4692 4693 4694 4695 4696 4697 4698 4699 4700 4701 4702 4703 4704 4705 4706 4707 4708 4709 4710 4711 4712 4713 4714 4715 4716 4717 4718 4719 4720 4721 4722 4723 4724 4725 4726 4727 4728 4729 4730 4731 4732 4733 4734 4735 4736 4737 4738 4739 4740 4741 4742 4743 4744 4745 4746 4747 4748 4749 4750 4751 4752 4753 4754 4755 4756 4757 4758 4759 4760 4761 4762 4763 4764 4765 4766 4767 4768 4769 4770 4771 4772 4773 4774 4775 4776 4777 4778 4779 4780 4781 4782 4783 4784 4785 4786 4787 4788 4789 4790 4791 4792 4793 4794 4795 4796 4797 4798 4799 4800 4801 4802 4803 4804 4805 4806 4807 4808 4809 4810 4811 4812 4813 4814 4815 4816 4817 4818 4819 4820 4821 4822 4823 4824 4825 4826 4827 4828 4829 4830 4831 4832 4833 4834 4835 4836 4837 4838 4839 4840 4841 4842 4843 4844 4845 4846 4847 4848 4849 4850 4851 4852 4853 4854 4855 4856 4857 4858 4859 4860 4861 4862 4863 4864 4865 4866 4867 4868 4869 4870 4871 4872 4873 4874 4875 4876 4877 4878 4879 4880 4881 4882 4883 4884 4885 4886 4887 4888 4889 4890 4891 4892 4893 4894 4895 4896 4897 4898 4899 4900 4901 4902 4903 4904 4905 4906 4907 4908 4909 4910 4911 4912 4913 4914 4915 4916 4917 4918 4919 4920 4921 4922 4923 4924 4925 4926 4927 4928 4929 4930 4931 4932 4933 4934 4935 4936 4937 4938 4939 4940 4941 4942 4943 4944 4945 4946 4947 4948 4949 4950 4951 4952 4953 4954 4955 4956 4957 4958 4959 4960 4961 4962 4963 4964 4965 4966 4967 4968 4969 4970 4971 4972 4973 4974 4975 4976 4977 4978 4979 4980 4981 4982 4983 4984 4985 4986 4987 4988 4989 4990 4991 4992 4993 4994 4995 4996 4997 4998 4999 5000
-)
diff --git a/ext/standard/tests/file/bug26938.phpt b/ext/standard/tests/file/bug26938.phpt
deleted file mode 100644
index 8e059ee840..0000000000
--- a/ext/standard/tests/file/bug26938.phpt
+++ /dev/null
@@ -1,24 +0,0 @@
---TEST--
-Bug #26938 (exec does not read consecutive long lines correctly)
---FILE--
-<?php
-$out = array();
-$status = -1;
-$php = getenv('TEST_PHP_EXECUTABLE');
-exec($php . ' -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);
-for ($i=0;$i<6;$i++)
- print "md5(line $i)= " . md5($out[$i]) . " (length " .
-strlen($out[$i]) . ")\n";
-?>
---EXPECT--
-md5(line 0)= e86410fa2d6e2634fd8ac5f4b3afe7f3 (length 10)
-md5(line 1)= e84debf3a1d132871d7fe45c1c04c566 (length 20000)
-md5(line 2)= c33b4d2f86908eea5d75ee5a61fd81f4 (length 10000)
-md5(line 3)= 2ecdde3959051d913f61b14579ea136d (length 5)
-md5(line 4)= c33b4d2f86908eea5d75ee5a61fd81f4 (length 10000)
-md5(line 5)= 902fbdd2b1df0c4f70b4a5d23525e932 (length 3)
diff --git a/ext/standard/tests/file/bug27619.phpt b/ext/standard/tests/file/bug27619.phpt
deleted file mode 100644
index 095a18c199..0000000000
--- a/ext/standard/tests/file/bug27619.phpt
+++ /dev/null
@@ -1,18 +0,0 @@
---TEST--
-Bug #27619 (filters not applied to pre-buffered data)
---FILE--
-<?php
- $fp = tmpfile();
- fwrite($fp, "this is a lowercase string.\n");
- rewind($fp);
-
- /* Echo out the first four bytes 'this' without applying filter
- Remainder will get sucked into the read buffer though. */
- echo fread($fp, 4);
-
- stream_filter_append($fp, "string.toupper");
-
- fpassthru($fp);
-?>
---EXPECT--
-this IS A LOWERCASE STRING.
diff --git a/ext/standard/tests/file/fgetcsv.phpt b/ext/standard/tests/file/fgetcsv.phpt
deleted file mode 100644
index 868212c033..0000000000
--- a/ext/standard/tests/file/fgetcsv.phpt
+++ /dev/null
@@ -1,158 +0,0 @@
---TEST--
-various fgetcsv() functionality tests
---FILE--
-<?php
- $list = array(
- 'aaa,bbb',
- 'aaa,"bbb"',
- '"aaa","bbb"',
- 'aaa,bbb',
- '"aaa",bbb',
- '"aaa", "bbb"',
- ',',
- 'aaa,',
- ',"aaa"',
- '"",""',
- '"\\"","aaa"',
- '"""""",',
- '""""",aaa',
- '"\\""",aaa',
- 'aaa,"\\"bbb,ccc',
- 'aaa,bbb ',
- 'aaa,"bbb "',
- 'aaa"aaa","bbb"bbb',
- 'aaa"aaa""",bbb',
- 'aaa"\\"a","bbb"'
- );
-
- $file = dirname(__FILE__) . 'fgetcsv.csv';
- @unlink($file);
- foreach ($list as $v) {
- $fp = fopen($file, "w");
- fwrite($fp, $v . "\n");
- fclose($fp);
-
- var_dump(fgetcsv(fopen($file, "r"), 1024));
- }
- @unlink($file);
-?>
---EXPECT--
-array(2) {
- [0]=>
- string(3) "aaa"
- [1]=>
- string(3) "bbb"
-}
-array(2) {
- [0]=>
- string(3) "aaa"
- [1]=>
- string(3) "bbb"
-}
-array(2) {
- [0]=>
- string(3) "aaa"
- [1]=>
- string(3) "bbb"
-}
-array(2) {
- [0]=>
- string(3) "aaa"
- [1]=>
- string(3) "bbb"
-}
-array(2) {
- [0]=>
- string(3) "aaa"
- [1]=>
- string(3) "bbb"
-}
-array(2) {
- [0]=>
- string(3) "aaa"
- [1]=>
- string(3) "bbb"
-}
-array(2) {
- [0]=>
- string(0) ""
- [1]=>
- string(0) ""
-}
-array(2) {
- [0]=>
- string(3) "aaa"
- [1]=>
- string(0) ""
-}
-array(2) {
- [0]=>
- string(0) ""
- [1]=>
- string(3) "aaa"
-}
-array(2) {
- [0]=>
- string(0) ""
- [1]=>
- string(0) ""
-}
-array(2) {
- [0]=>
- string(2) "\""
- [1]=>
- string(3) "aaa"
-}
-array(2) {
- [0]=>
- string(2) """"
- [1]=>
- string(0) ""
-}
-array(1) {
- [0]=>
- string(7) """,aaa
-"
-}
-array(1) {
- [0]=>
- string(8) "\"",aaa
-"
-}
-array(2) {
- [0]=>
- string(3) "aaa"
- [1]=>
- string(10) "\"bbb,ccc
-"
-}
-array(2) {
- [0]=>
- string(3) "aaa"
- [1]=>
- string(6) "bbb "
-}
-array(2) {
- [0]=>
- string(3) "aaa"
- [1]=>
- string(6) "bbb "
-}
-array(2) {
- [0]=>
- string(8) "aaa"aaa""
- [1]=>
- string(6) "bbbbbb"
-}
-array(2) {
- [0]=>
- string(10) "aaa"aaa""""
- [1]=>
- string(3) "bbb"
-}
-array(2) {
- [0]=>
- string(8) "aaa"\"a""
- [1]=>
- string(3) "bbb"
-}
diff --git a/ext/standard/tests/file/fopencookie.phpt b/ext/standard/tests/file/fopencookie.phpt
deleted file mode 100644
index 1b2cfb17b8..0000000000
--- a/ext/standard/tests/file/fopencookie.phpt
+++ /dev/null
@@ -1,86 +0,0 @@
---TEST--
-fopencookie detected and working (or cast mechanism works)
---FILE--
-<?php
-# vim600:syn=php:
-
-/* This test verifies that the casting mechanism is working correctly.
- * On systems with fopencookie, a FILE* is created around the user
- * stream and that is passed back to the ZE to include.
- * On systems without fopencookie, the stream is fed into a temporary
- * file, and that temporary file is passed back to the ZE.
- * The important thing here is really fopencookie; the glibc people
- * changed the binary interface, so if haven't detected it correctly,
- * you can expect this test to segfault.
- *
- * FIXME: the test really needs something to fseek(3) on the FILE*
- * used internally for this test to be really effective.
- */
-
-class userstream {
- public $position = 0;
- public $data = "If you can read this, it worked";
-
- function stream_open($path, $mode, $options, &$opened_path)
- {
- return true;
- }
-
- function stream_read($count)
- {
- $ret = substr($this->data, $this->position, $count);
- $this->position += strlen($ret);
- return $ret;
- }
-
- function stream_tell()
- {
- return $this->position;
- }
-
- function stream_eof()
- {
- return $this->position >= strlen($this->data);
- }
-
- function stream_seek($offset, $whence)
- {
- switch($whence) {
- case SEEK_SET:
- if ($offset < strlen($this->data) && $offset >= 0) {
- $this->position = $offset;
- return true;
- } else {
- return false;
- }
- break;
- case SEEK_CUR:
- if ($offset >= 0) {
- $this->position += $offset;
- return true;
- } else {
- return false;
- }
- break;
- case SEEK_END:
- if (strlen($this->data) + $offset >= 0) {
- $this->position = strlen($this->data) + $offset;
- return true;
- } else {
- return false;
- }
- break;
- default:
- return false;
- }
- }
-
-}
-
-stream_wrapper_register("cookietest", "userstream");
-
-include("cookietest://foo");
-
-?>
---EXPECT--
-If you can read this, it worked
diff --git a/ext/standard/tests/file/proc_open01.phpt b/ext/standard/tests/file/proc_open01.phpt
deleted file mode 100644
index 39fc4e4cf6..0000000000
--- a/ext/standard/tests/file/proc_open01.phpt
+++ /dev/null
@@ -1,67 +0,0 @@
---TEST--
-proc_open() regression test 1 (proc_open() leak)
---FILE--
-<?php
-$pipes = array(1, 2, 3);
-$orig_pipes = $pipes;
-$php = getenv('TEST_PHP_EXECUTABLE');
-if ($php === false) {
- die("no php executable defined");
-}
-$proc = proc_open(
- $php,
- array(0 => array('pipe', 'r'), 1 => array('pipe', 'w')),
- $pipes
-);
-if ($proc === false) {
- print "something went wrong.\n";
-}
-var_dump($pipes);
-stream_set_blocking($pipes[1], FALSE);
-$test_string = "yay!\n";
-fwrite($pipes[0], $test_string);
-fflush($pipes[0]);
-fclose($pipes[0]);
-$cnt = '';
-$n=0;
-for ($left = strlen($test_string); $left > 0;) {
- if (++$n >1000) {
- print "terminated after 1000 iterations\n";
- break;
- }
- $read_fds = array($pipes[1]);
- $retval = stream_select($read_fds, $write_fds = NULL, $exp_fds = NULL, 1);
- if ($retval === false) {
- print "select() failed\n";
- break;
- }
- if ($retval === 0) {
- print "timed out\n";
- break;
- }
- $buf = fread($pipes[1], 1024);
- $cnt .= $buf;
- $left -= strlen($buf);
-}
-var_dump($cnt);
-fclose($pipes[1]);
-proc_close($proc);
-var_dump($orig_pipes);
-?>
---EXPECTF--
-array(2) {
- [0]=>
- resource(%d) of type (stream)
- [1]=>
- resource(%d) of type (stream)
-}
-string(5) "yay!
-"
-array(3) {
- [0]=>
- int(1)
- [1]=>
- int(2)
- [2]=>
- int(3)
-}
diff --git a/ext/standard/tests/file/statcache-corruption.phpt b/ext/standard/tests/file/statcache-corruption.phpt
deleted file mode 100644
index 7fa391624c..0000000000
--- a/ext/standard/tests/file/statcache-corruption.phpt
+++ /dev/null
@@ -1,13 +0,0 @@
---TEST--
-statcache corruption
---FILE--
-<?php
-$a = stat(__FILE__);
-is_link(__FILE__);
-$b = stat(__FILE__);
-print_r(array_diff($a, $b));
-?>
---EXPECT--
-Array
-(
-)
diff --git a/ext/standard/tests/file/test.csv b/ext/standard/tests/file/test.csv
deleted file mode 100644
index d99984c2ab..0000000000
--- a/ext/standard/tests/file/test.csv
+++ /dev/null
@@ -1,17 +0,0 @@
-6,7,8,line1
-1,2,3,"line2
-2,4,5,line3
-2,4,5,line3
-2,4,5,line3
-2,4,5,line3
-2,4,5,line3
-2,4,5,line3
-2,4,5,line3
-2,4,5,line3
-2,4,5,line3
-2,4,5,line3
-2,4,5,line3
-2,4,5,line3
-2,4,5,line3
-2,4,5,line3
-2,4,5,line3
diff --git a/ext/standard/tests/file/test2.csv b/ext/standard/tests/file/test2.csv
deleted file mode 100644
index d816464170..0000000000
--- a/ext/standard/tests/file/test2.csv
+++ /dev/null
@@ -1 +0,0 @@
-"One","\"Two\"","Three\"","Four","\\","\\\\\\\\\\\\\\\\\\\\\\\"\\\\"
diff --git a/ext/standard/tests/file/test3.csv b/ext/standard/tests/file/test3.csv
deleted file mode 100644
index 63f09033df..0000000000
--- a/ext/standard/tests/file/test3.csv
+++ /dev/null
Binary files differ
diff --git a/ext/standard/tests/file/userdirstream.phpt b/ext/standard/tests/file/userdirstream.phpt
deleted file mode 100644
index d457b1988d..0000000000
--- a/ext/standard/tests/file/userdirstream.phpt
+++ /dev/null
@@ -1,52 +0,0 @@
---TEST--
-Directory Streams
---FILE--
-<?php
-class test {
- public $idx = 0;
-
- function dir_opendir($path, $options) {
- print "Opening\n";
- $this->idx = 0;
-
- return true;
- }
-
- function dir_readdir() {
- $sample = array('first','second','third','fourth');
-
- if ($this->idx >= count($sample)) return false;
- else return $sample[$this->idx++];
- }
-
- function dir_rewinddir() {
- $this->idx = 0;
-
- return true;
- }
-
- function dir_closedir() {
- print "Closing up!\n";
-
- return true;
- }
-}
-
-stream_wrapper_register('test', 'test');
-
-var_dump(scandir('test://example.com/path/to/test'));
-?>
---EXPECT--
-Opening
-Closing up!
-array(4) {
- [0]=>
- string(5) "first"
- [1]=>
- string(6) "fourth"
- [2]=>
- string(6) "second"
- [3]=>
- string(5) "third"
-}
-
diff --git a/ext/standard/tests/file/userfilters.phpt b/ext/standard/tests/file/userfilters.phpt
deleted file mode 100644
index dfa8376fff..0000000000
--- a/ext/standard/tests/file/userfilters.phpt
+++ /dev/null
@@ -1,37 +0,0 @@
---TEST--
-stream userfilter test
---FILE--
-<?php
-# vim600:syn=php:
-class testfilter extends php_user_filter {
- function filter($in, $out, &$consumed, $closing) {
- while ($bucket = stream_bucket_make_writeable($in)) {
- $bucket->data = strtoupper($bucket->data);
- $consumed += strlen($bucket->data);
- stream_bucket_append($out, $bucket);
- }
- return PSFS_PASS_ON;
- }
-
- function oncreate() {
- echo "params: {$this->params}\n";
- }
-}
-
-stream_filter_register('testfilter','testfilter');
-
-$text = "Hello There!";
-
-$fp = tmpfile();
-fwrite($fp, $text);
-
-rewind($fp);
-stream_filter_append($fp, 'testfilter', STREAM_FILTER_READ, 'testuserfilter');
-
-var_dump(fgets($fp));
-fclose($fp);
-
-?>
---EXPECT--
-params: testuserfilter
-string(12) "HELLO THERE!"
diff --git a/ext/standard/tests/file/userstreams.phpt b/ext/standard/tests/file/userstreams.phpt
deleted file mode 100644
index 124825f24e..0000000000
--- a/ext/standard/tests/file/userstreams.phpt
+++ /dev/null
@@ -1,325 +0,0 @@
---TEST--
-User-space streams
---FILE--
-<?php
-# vim600:syn=php:
-
-/* This is a fairly aggressive test that looks at
- * user streams and also gives the seek/gets/buffer
- * layer of streams a thorough testing */
-
-$lyrics = <<<EOD
-...and the road becomes my bride
-I have stripped of all but pride
-so in her I do confide
-and she keeps me satisfied
-gives me all I need
-...and with dust in throat I crave
-to the game you stay a slave
-rover wanderer
-nomad vagabond
-call me what you will
- But Ill take my time anywhere
- Free to speak my mind anywhere
- and Ill redefine anywhere
- Anywhere I roam
- Where I lay my head is home
-...and the earth becomes my throne
-I adapt to the unknown
-under wandering stars Ive grown
-by myself but not alone
-I ask no one
-...and my ties are severed clean
-the less I have the more I gain
-off the beaten path I reign
-rover wanderer
-nomad vagabond
-call me what you will
- But Ill take my time anywhere
- Free to speak my mind anywhere
- and Ill never mind anywhere
- Anywhere I roam
- Where I lay my head is home
- But Ill take my time anywhere
- Free to speak my mind anywhere
- and Ill take my find anywhere
- Anywhere I roam
- Where I lay my head is home
- carved upon my stone
- my body lie but still I roam
- Wherever I may roam.
-
-Wherever I May Roam
-
-EOD;
-
-/* repeat the data a few times so that it grows larger than
- * the default cache chunk size and that we have something
- * to seek around... */
-$DATA = "";
-for ($i = 0; $i < 30; $i++) {
- if ($i % 2 == 0)
- $DATA .= str_rot13($lyrics);
- else
- $DATA .= $lyrics;
-}
-
-/* store the data in a regular file so that we can compare
- * the results */
-$tf = tmpfile();
-fwrite($tf, $DATA);
-$n = ftell($tf);
-rewind($tf) or die("failed to rewind tmp file!");
-if (ftell($tf) != 0)
- die("tmpfile is not at start!");
-$DATALEN = strlen($DATA);
-if ($n != $DATALEN)
- die("tmpfile stored $n bytes; should be $DATALEN!");
-
-class uselessstream
-{
-}
-
-class mystream
-{
- public $path;
- public $mode;
- public $options;
-
- public $position;
- public $varname;
-
- function stream_open($path, $mode, $options, &$opened_path)
- {
- $this->path = $path;
- $this->mode = $mode;
- $this->options = $options;
-
- $split = parse_url($path);
- $this->varname = $split["host"];
-
- if (strchr($mode, 'a'))
- $this->position = strlen($GLOBALS[$this->varname]);
- else
- $this->position = 0;
-
- return true;
- }
-
- function stream_read($count)
- {
- $ret = substr($GLOBALS[$this->varname], $this->position, $count);
- $this->position += strlen($ret);
- return $ret;
- }
-
- function stream_tell()
- {
- return $this->position;
- }
-
- function stream_eof()
- {
- return $this->position >= strlen($GLOBALS[$this->varname]);
- }
-
- function stream_seek($offset, $whence)
- {
- switch($whence) {
- case SEEK_SET:
- if ($offset < strlen($GLOBALS[$this->varname]) && $offset >= 0) {
- $this->position = $offset;
- return true;
- } else {
- return false;
- }
- break;
- case SEEK_CUR:
- if ($offset >= 0) {
- $this->position += $offset;
- return true;
- } else {
- return false;
- }
- break;
- case SEEK_END:
- if (strlen($GLOBALS[$this->varname]) + $offset >= 0) {
- $this->position = strlen($GLOBALS[$this->varname]) + $offset;
- return true;
- } else {
- return false;
- }
- break;
- default:
- return false;
- }
- }
-
-}
-
-if (@stream_wrapper_register("bogus", "class_not_exist")) {
- die("Registered a non-existant class!!!???");
-}
-echo "Not Registered\n";
-
-if (!stream_wrapper_register("test", "mystream")) {
- die("test wrapper registration failed");
-}
-echo "Registered\n";
-
-if (!stream_wrapper_register("bogon", "uselessstream")) {
- die("bogon wrapper registration failed");
-}
-echo "Registered\n";
-
-$b = @fopen("bogon://url", "rb");
-if (is_resource($b)) {
- die("Opened a bogon??");
-}
-
-$fp = fopen("test://DATA", "rb");
-if (!$fp || !is_resource($fp)) {
- die("Failed to open resource");
-}
-
-/* some default seeks that will cause buffer/cache misses */
-$seeks = array(
- array(SEEK_SET, 0, 0),
- array(SEEK_CUR, 8450, 8450),
- array(SEEK_CUR, -7904, 546),
- array(SEEK_CUR, 12456, 13002),
-
- /* end up at BOF so that randomly generated seek offsets
- * below will know where they are supposed to be */
- array(SEEK_SET, 0, 0)
-);
-
-$whence_map = array(
- SEEK_CUR,
- SEEK_SET,
- SEEK_END
-);
-$whence_names = array(
- SEEK_CUR => "SEEK_CUR",
- SEEK_SET => "SEEK_SET",
- SEEK_END => "SEEK_END"
- );
-
-/* generate some random seek offsets */
-$position = 0;
-for ($i = 0; $i < 256; $i++) {
- $whence = $whence_map[array_rand($whence_map, 1)];
- switch($whence) {
- case SEEK_SET:
- $offset = rand(0, $DATALEN);
- $position = $offset;
- break;
- case SEEK_END:
- $offset = -rand(0, $DATALEN);
- $position = $DATALEN + $offset;
- break;
- case SEEK_CUR:
- $offset = rand(0, $DATALEN);
- $offset -= $position;
- $position += $offset;
- break;
- }
-
- $seeks[] = array($whence, $offset, $position);
-}
-
-/* we compare the results of fgets using differing line lengths to
- * test the fgets layer also */
-$line_lengths = array(1024, 256, 64, 16);
-$fail_count = 0;
-
-ob_start();
-foreach($line_lengths as $line_length) {
- /* now compare the real stream with the user stream */
- $j = 0;
- rewind($tf);
- rewind($fp);
- foreach($seeks as $seekdata) {
- list($whence, $offset, $position) = $seekdata;
-
- $rpb = ftell($tf);
- $rr = (int)fseek($tf, $offset, $whence);
- $rpa = ftell($tf);
- $rline = fgets($tf, $line_length);
- (int)fseek($tf, - strlen($rline), SEEK_CUR);
-
- $upb = ftell($fp);
- $ur = (int)fseek($fp, $offset, $whence);
- $upa = ftell($fp);
- $uline = fgets($fp, $line_length);
- (int)fseek($fp, - strlen($uline), SEEK_CUR);
-
- printf("\n--[%d] whence=%s offset=%d line_length=%d position_should_be=%d --\n",
- $j, $whence_names[$whence], $offset, $line_length, $position);
- printf("REAL: pos=(%d,%d,%d) ret=%d line[%d]=`%s'\n", $rpb, $rpa, ftell($tf), $rr, strlen($rline), $rline);
- printf("USER: pos=(%d,%d,%d) ret=%d line[%d]=`%s'\n", $upb, $upa, ftell($fp), $ur, strlen($uline), $uline);
-
- if ($rr != $ur || $rline != $uline || $rpa != $position || $upa != $position) {
- $fail_count++;
- echo "###################################### FAIL!\n";
- $dat = stream_get_meta_data($fp);
- var_dump($dat);
- break;
- }
-
- $j++;
- }
- if ($fail_count)
- break;
-}
-
-if ($fail_count == 0) {
- ob_end_clean();
- echo "SEEK: OK\n";
-} else {
- echo "SEEK: FAIL\n";
- ob_end_flush();
-}
-
-$fail_count = 0;
-
-fseek($fp, $DATALEN / 2, SEEK_SET);
-fseek($tf, $DATALEN / 2, SEEK_SET);
-
-if (ftell($fp) != ftell($tf)) {
- echo "SEEK: positions do not match!\n";
-}
-
-$n = 0;
-while(!feof($fp)) {
- $uline = fgets($fp, 1024);
- $rline = fgets($tf, 1024);
-
- if ($uline != $rline) {
- echo "FGETS: FAIL\niter=$n user=$uline [pos=" . ftell($fp) . "]\nreal=$rline [pos=" . ftell($tf) . "]\n";
- $fail_count++;
- break;
- }
-}
-
-if ($fail_count == 0) {
- echo "FGETS: OK\n";
-}
-
-/* One final test to see if the position is respected when opened for append */
-$fp = fopen("test://lyrics", "a+");
-rewind($fp);
-var_dump(ftell($fp));
-$data = fgets($fp);
-fclose($fp);
-echo $data . "\n";
-
-?>
---EXPECT--
-Not Registered
-Registered
-Registered
-SEEK: OK
-FGETS: OK
-int(0)
-...and the road becomes my bride
diff --git a/ext/standard/tests/file/userwrapper.phpt b/ext/standard/tests/file/userwrapper.phpt
deleted file mode 100644
index 717e73c708..0000000000
--- a/ext/standard/tests/file/userwrapper.phpt
+++ /dev/null
@@ -1,83 +0,0 @@
---TEST--
-Userstream unlink, rename, mkdir, rmdir, and url_stat.
---FILE--
-<?php # vim:ft=php:
-class test {
- function unlink($file) {
- print "Unlinking file: $file\n";
- }
-
- function rename($from, $to) {
- print "Renaming $from to $to\n";
- }
-
- function mkdir($directory, $mode, $options) {
- printf("Making directory: %s as %o%s\n", $directory, $mode, $options & STREAM_MKDIR_RECURSIVE ? " recursively" : "");
- }
-
- function rmdir($directory, $options) {
- print "Removing directory: $directory\n";
- }
-
- function url_stat($path, $options) {
- /* By printing out a notice that we are actively stating the file
- then subsequently performing multiple stat operations on it
- we effectively test the stat cache mechanism */
- print "Stating file: $path\n";
- return array('dev'=>1, 'ino'=>2, 'mode'=>0644, 'nlink'=>3,
- 'uid'=>100, 'gid'=>1000, 'rdev'=>-1, 'size'=>31337,
- 'atime'=>1234567890, 'mtime'=>1231231231, 'ctime'=>1234564564,
- 'blksize'=>-1, 'blocks'=>-1);
- }
-}
-
-stream_wrapper_register('test', 'test');
-
-unlink('test://example.com/path/to/file');
-rename('test://example.com/path/to/from', 'test://example.com/path/to/to');
-/* We *want* this to fail and thus not output the watch statement */
-@rename('test://example.com/path/to/from', 'http://example.com/path/to/to');
-mkdir('test://example.com/path/to/directory', 0755);
-rmdir('test://example.com/path/to/directory');
-print_r(stat('test://example.com/path/to/file'));
-echo "Filesize = " . filesize('test://example.com/path/to/file') . "\n";
-echo "filemtime = " . filemtime('test://example.com/path/to/file') . "\n";
-?>
---EXPECT--
-Unlinking file: test://example.com/path/to/file
-Renaming test://example.com/path/to/from to test://example.com/path/to/to
-Making directory: test://example.com/path/to/directory as 755
-Removing directory: test://example.com/path/to/directory
-Stating file: test://example.com/path/to/file
-Array
-(
- [0] => 1
- [1] => 2
- [2] => 420
- [3] => 3
- [4] => 100
- [5] => 1000
- [6] => -1
- [7] => 31337
- [8] => 1234567890
- [9] => 1231231231
- [10] => 1234564564
- [11] => -1
- [12] => -1
- [dev] => 1
- [ino] => 2
- [mode] => 420
- [nlink] => 3
- [uid] => 100
- [gid] => 1000
- [rdev] => -1
- [size] => 31337
- [atime] => 1234567890
- [mtime] => 1231231231
- [ctime] => 1234564564
- [blksize] => -1
- [blocks] => -1
-)
-Filesize = 31337
-filemtime = 1231231231
-
diff --git a/ext/standard/tests/filters/basic.phpt b/ext/standard/tests/filters/basic.phpt
deleted file mode 100644
index 702c1ddadd..0000000000
--- a/ext/standard/tests/filters/basic.phpt
+++ /dev/null
@@ -1,44 +0,0 @@
---TEST--
-basic stream filter tests
---FILE--
-<?php
-# vim600:syn=php:
-
-$text = "Hello There!";
-$filters = array("string.rot13", "string.toupper", "string.tolower");
-
-function filter_test($names)
-{
- $fp = tmpfile();
- fwrite($fp, $GLOBALS["text"]);
- rewind($fp);
- foreach ($names as $name) {
- echo "filter: $name\n";
- var_dump(stream_filter_prepend($fp, $name));
- }
- var_dump(fgets($fp));
- fclose($fp);
-}
-
-foreach ($filters as $filter) {
- filter_test(array($filter));
-}
-
-filter_test(array($filters[0], $filters[1]));
-
-?>
---EXPECT--
-filter: string.rot13
-bool(true)
-string(12) "Uryyb Gurer!"
-filter: string.toupper
-bool(true)
-string(12) "HELLO THERE!"
-filter: string.tolower
-bool(true)
-string(12) "hello there!"
-filter: string.rot13
-bool(true)
-filter: string.toupper
-bool(true)
-string(12) "URYYB GURER!"
diff --git a/ext/standard/tests/filters/bug22538.phpt b/ext/standard/tests/filters/bug22538.phpt
deleted file mode 100644
index c01978730b..0000000000
--- a/ext/standard/tests/filters/bug22538.phpt
+++ /dev/null
@@ -1,44 +0,0 @@
---TEST--
-Bug #22538 (filtered stream doesn't update file pointer)
---FILE--
-<?php
-function my_stream_copy_to_stream($fin, $fout) {
- while (!feof($fin)) {
- fwrite($fout, fread($fin, 4096));
- }
-}
-
-$size = 65536;
-
-do {
- $path1 = sprintf("%s/%s%da", dirname(__FILE__), uniqid(), time());
- $path2 = sprintf("%s/%s%db", dirname(__FILE__), uniqid(), time());
-} while ($path1 == $path2);
-
-$fp = fopen($path1, "w");
-$str = "abcdefghijklmnopqrstuvwxyz\n";
-$str_len = strlen($str);
-$cnt = $size;
-while (($cnt -= $str_len) > 0) {
- fwrite($fp, $str);
-}
-$cnt = $size - ($str_len + $cnt);
-fclose($fp);
-$fin = fopen($path1, "r");
-$fout = fopen($path2, "w");
-stream_filter_append($fout, "string.rot13");
-my_stream_copy_to_stream($fin, $fout);
-fclose($fout);
-fclose($fin);
-var_dump($cnt);
-var_dump(filesize($path2));
-var_dump(md5_file($path1));
-var_dump(md5_file($path2));
-unlink($path1);
-unlink($path2);
-?>
---EXPECT--
-int(65529)
-int(65529)
-string(32) "e10e3d1ae81b084b822e8592d019b57a"
-string(32) "931f0fbf8a72312e3bab9965b1d1081c"
diff --git a/ext/standard/tests/general_functions/001.phpt b/ext/standard/tests/general_functions/001.phpt
deleted file mode 100644
index 164bd7fb21..0000000000
--- a/ext/standard/tests/general_functions/001.phpt
+++ /dev/null
@@ -1,67 +0,0 @@
---TEST--
-sprintf() function
---FILE--
-<?php
-
-$agent = sprintf("%.5s", "James Bond, 007");
-
-echo("sprintf string truncate test: ");
-if ($agent == "James") {
- echo("passed\n");
-} else {
- echo("failed!\n");
-}
-
-echo("sprintf padding and align test: ");
-$test = sprintf("abc%04d %-20s%c", 20, "fisketur", 33);
-if ($test == "abc0020 fisketur !") {
- echo("passed\n");
-} else {
- echo("failed!\n");
-}
-
-echo("sprintf octal and hex test: ");
-$test = sprintf("%4o %4x %4X %0"."8x", 128, 1024, 49151, 3457925);
-if ($test == " 200 400 BFFF 0034c385") {
- echo("passed\n");
-} else {
- echo("failed!\n");
-}
-
-echo("sprintf octal binary test: ");
-$test = sprintf("%b", 3457925);
-if ($test == "1101001100001110000101") {
- echo("passed\n");
-} else {
- echo("failed!\n");
-}
-
-echo("sprintf float test: ");
-$test = sprintf("%0"."06.2f", 10000/3.0);
-if ($test == "003333.33") {
- echo("passed\n");
-} else {
- echo("failed!\n");
-}
-
-echo sprintf("%.2f\n", "99.00");
-echo sprintf("%.2f\n", 99.00);
-
-echo sprintf("%e\n", 1.234E-18);
-echo sprintf("%e\n", 1.234E+18);
-echo sprintf("%e\n", 9843243.12);
-echo sprintf("%e\n", -9843243.12);
-
-?>
---EXPECT--
-sprintf string truncate test: passed
-sprintf padding and align test: passed
-sprintf octal and hex test: passed
-sprintf octal binary test: passed
-sprintf float test: passed
-99.00
-99.00
-1.23400e-18
-1.23400e+18
-9.84324e+6
--9.84324e+6
diff --git a/ext/standard/tests/general_functions/002.phpt b/ext/standard/tests/general_functions/002.phpt
deleted file mode 100644
index 58528da13a..0000000000
--- a/ext/standard/tests/general_functions/002.phpt
+++ /dev/null
@@ -1,11 +0,0 @@
---TEST--
-quoted_printable_decode() function test
---FILE--
-<?php echo quoted_printable_decode("=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"); ?>
---EXPECT--
-úwow-factorÁÐÕÝÅÎÎÙÅ
- ÔÏÒÇÏ×ÙÅ ÐÒÏÅËÔÙ
diff --git a/ext/standard/tests/general_functions/003.phpt b/ext/standard/tests/general_functions/003.phpt
deleted file mode 100644
index 7ad90c8b5a..0000000000
--- a/ext/standard/tests/general_functions/003.phpt
+++ /dev/null
@@ -1,58 +0,0 @@
---TEST--
-levenshtein() function test
---FILE--
-<?php
-
-function test_me($title,$expect,$text1,$text2,$cost1=0,$cost2=0,$cost3=0) {
-
- if($cost1==0)
- $result=levenshtein($text1,$text2);
- else
- $result=levenshtein($text1,$text2,$cost1,$cost2,$cost3);
-
- if($result==$expect) return 0;
-
- echo "$title: result is $result instead of $expect ";
- echo "for '$text1'/'$text2' ";
- if($cost1) echo "($cost1:$cost2:$cost3)";
- echo "\n";
-
- return 1;
-}
-
-$n=0;
-
-$n += test_me("equal" , 0, "12345", "12345");
-$n += test_me("1st empty" , 3, "", "xzy");
-$n += test_me("2nd empty" , 3, "xzy", "");
-$n += test_me("both empty" , 0, "", "");
-$n += test_me("1 char" , 1, "1", "2");
-$n += test_me("2 char swap", 2, "12", "21");
-
-$n += test_me("inexpensive delete", 2, "2121", "11", 2, 1, 1);
-$n += test_me("expensive delete" , 10, "2121", "11", 2, 1, 5);
-$n += test_me("inexpensive insert", 2, "11", "2121", 1, 1, 1);
-$n += test_me("expensive insert" , 10, "11", "2121", 5, 1, 1);
-
-$n += test_me("expensive replace" , 3, "111", "121", 2, 3, 2);
-$n += test_me("very expensive replace", 4, "111", "121", 2, 9, 2);
-
-$n += test_me("bug #7368", 2, "13458", "12345");
-$n += test_me("bug #7368", 2, "1345", "1234");
-
-$n += test_me("bug #6562", 1, "debugg", "debug");
-$n += test_me("bug #6562", 1, "ddebug", "debug");
-$n += test_me("bug #6562", 2, "debbbug", "debug");
-$n += test_me("bug #6562", 1, "debugging", "debuging");
-
-$n += test_me("bug #16473", 2, "a", "bc");
-$n += test_me("bug #16473", 2, "xa", "xbc");
-$n += test_me("bug #16473", 2, "xax", "xbcx");
-$n += test_me("bug #16473", 2, "ax", "bcx");
-
-
-echo ($n==0)?"all passed\n":"$n failed\n";
-
-?>
---EXPECT--
-all passed
diff --git a/ext/standard/tests/general_functions/004.data b/ext/standard/tests/general_functions/004.data
deleted file mode 100644
index 5dd0832842..0000000000
--- a/ext/standard/tests/general_functions/004.data
+++ /dev/null
@@ -1,4 +0,0 @@
-name value comment
-true 1 boolean true
-false 0 boolean false
-empty nothing
diff --git a/ext/standard/tests/general_functions/004.phpt b/ext/standard/tests/general_functions/004.phpt
deleted file mode 100644
index 40b47cc1ca..0000000000
--- a/ext/standard/tests/general_functions/004.phpt
+++ /dev/null
@@ -1,16 +0,0 @@
---TEST--
-fgetcsv() with tab delimited fields (BUG #8258)
---FILE--
-<?php
-chdir(dirname(__FILE__));
-$fp=fopen("004.data","r");
-while($a=fgetcsv($fp,100,"\t")) {
- echo join(",",$a)."\n";
-}
-fclose($fp);
-?>
---EXPECT--
-name,value,comment
-true,1,boolean true
-false,0,boolean false
-empty,,nothing
diff --git a/ext/standard/tests/general_functions/005.phpt b/ext/standard/tests/general_functions/005.phpt
deleted file mode 100644
index 027d124add..0000000000
--- a/ext/standard/tests/general_functions/005.phpt
+++ /dev/null
@@ -1,24 +0,0 @@
---TEST--
-is_scalar() function test
---FILE--
-<?php
-class foo {}
-var_dump (is_scalar (TRUE));
-var_dump (is_scalar (1));
-var_dump (is_scalar (1.0));
-var_dump (is_scalar ("Hi!"));
-var_dump (is_scalar (NULL));
-var_dump (is_scalar (array ()));
-var_dump (is_scalar (new foo()));
-var_dump (is_scalar (opendir('.')));
-?>
---EXPECT--
-bool(true)
-bool(true)
-bool(true)
-bool(true)
-bool(false)
-bool(false)
-bool(false)
-bool(false)
-
diff --git a/ext/standard/tests/general_functions/006.phpt b/ext/standard/tests/general_functions/006.phpt
deleted file mode 100644
index 6852286c5e..0000000000
--- a/ext/standard/tests/general_functions/006.phpt
+++ /dev/null
@@ -1,11 +0,0 @@
---TEST--
-quoted_printable_decode() function test with CR/LF
---FILE--
-<?php echo quoted_printable_decode("=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"); ?>
---EXPECT--
-úwow-factorÁÐÕÝÅÎÎÙÅ
- ÔÏÒÇÏ×ÙÅ ÐÒÏÅËÔÙ
diff --git a/ext/standard/tests/general_functions/007.phpt b/ext/standard/tests/general_functions/007.phpt
deleted file mode 100644
index f755ab4f80..0000000000
--- a/ext/standard/tests/general_functions/007.phpt
+++ /dev/null
@@ -1,24 +0,0 @@
---TEST--
-MD5 / Base64
---FILE--
-<?php
-function test($str) {
- $res = md5(base64_decode(base64_encode($str)))."\n";
- return $res;
-}
-echo test("");
-echo test("a");
-echo test("abc");
-echo test("message digest");
-echo test("abcdefghijklmnopqrstuvwxyz");
-echo test("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789");
-echo test("12345678901234567890123456789012345678901234567890123456789012345678901234567890");
-?>
---EXPECT--
-d41d8cd98f00b204e9800998ecf8427e
-0cc175b9c0f1b6a831c399e269772661
-900150983cd24fb0d6963f7d28e17f72
-f96b697d7cb7938d525a2f31aaf161d0
-c3fcd3d76192e4007dfb496cca67e13b
-d174ab98d277d9f5a5611c2c9f419d9f
-57edf4a22be3c955ac49da2e2107b67a
diff --git a/ext/standard/tests/general_functions/008.phpt b/ext/standard/tests/general_functions/008.phpt
deleted file mode 100644
index bb633c334d..0000000000
--- a/ext/standard/tests/general_functions/008.phpt
+++ /dev/null
@@ -1,40 +0,0 @@
---TEST--
-var_dump float test
---INI--
-precision=12
---FILE--
-<?php
-// this checks f,g,G conversion for snprintf/spprintf
-var_dump(array(ini_get('precision'),.012,-.012,.12,-.12,1.2,-1.2,12.,-12.,0.000123,.0000123,123456789012.0,1234567890123.0,12345678901234567890.0));
-?>
---EXPECT--
-array(14) {
- [0]=>
- string(2) "12"
- [1]=>
- float(0.012)
- [2]=>
- float(-0.012)
- [3]=>
- float(0.12)
- [4]=>
- float(-0.12)
- [5]=>
- float(1.2)
- [6]=>
- float(-1.2)
- [7]=>
- float(12)
- [8]=>
- float(-12)
- [9]=>
- float(0.000123)
- [10]=>
- float(1.23E-5)
- [11]=>
- float(123456789012)
- [12]=>
- float(1234567890120)
- [13]=>
- float(1.23456789012E+19)
-} \ No newline at end of file
diff --git a/ext/standard/tests/general_functions/009.phpt b/ext/standard/tests/general_functions/009.phpt
deleted file mode 100644
index e80d36140d..0000000000
--- a/ext/standard/tests/general_functions/009.phpt
+++ /dev/null
@@ -1,24 +0,0 @@
---TEST--
-SHA1
---FILE--
-<?php
-function test($str) {
- $res = sha1($str)."\n";
- return $res;
-}
-echo test("");
-echo test("a");
-echo test("abc");
-echo test("message digest");
-echo test("abcdefghijklmnopqrstuvwxyz");
-echo test("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789");
-echo test("12345678901234567890123456789012345678901234567890123456789012345678901234567890");
-?>
---EXPECT--
-da39a3ee5e6b4b0d3255bfef95601890afd80709
-86f7e437faa5a7fce15d1ddcb9eaeaea377667b8
-a9993e364706816aba3e25717850c26c9cd0d89d
-c12252ceda8be8994d5fa0290a47231c1d16aae3
-32d10c7b8cf96570ca04ce37f2a19d84240d3a89
-761c457bf73b14d27e9e9265c46f4b4dda11f940
-50abf5706a150990a08b2c5ea40fa0e585554732
diff --git a/ext/standard/tests/general_functions/bug25038.phpt b/ext/standard/tests/general_functions/bug25038.phpt
deleted file mode 100755
index 52fe032056..0000000000
--- a/ext/standard/tests/general_functions/bug25038.phpt
+++ /dev/null
@@ -1,32 +0,0 @@
---TEST--
-Bug #25038 (call_user_func issues warning if function throws exception)
---FILE--
-<?php
-
-function bar($x='no argument')
-{
- throw new Exception("This is an exception from bar({$x}).");
-}
-try
-{
- bar('first try');
-}
-catch (Exception $e)
-{
- print $e->getMessage()."\n";
-}
-try
-{
- call_user_func('bar','second try');
-}
-catch (Exception $e)
-{
- print $e->getMessage()."\n";
-}
-
-?>
-===DONE===
---EXPECT--
-This is an exception from bar(first try).
-This is an exception from bar(second try).
-===DONE===
diff --git a/ext/standard/tests/general_functions/bug29038.phpt b/ext/standard/tests/general_functions/bug29038.phpt
deleted file mode 100644
index 8804ffbaa9..0000000000
--- a/ext/standard/tests/general_functions/bug29038.phpt
+++ /dev/null
@@ -1,74 +0,0 @@
---TEST--
-bug #29038 (extract(), EXTR_PREFIX_SAME option prefixes empty strings)
---FILE--
-<?php
-function f1() {
- $c = extract(array("" => 1),EXTR_PREFIX_SAME,"prefix");
- echo "Extracted:";
- var_dump($c);
- print_r(get_defined_vars());
-}
-function f2() {
- $a = 1;
- $c = extract(array("a" => 1),EXTR_PREFIX_SAME,"prefix");
- echo "Extracted:";
- var_dump($c);
- print_r(get_defined_vars());
-}
-function f3() {
- $a = 1;
- $c = extract(array("a" => 1),EXTR_PREFIX_ALL,"prefix");
- echo "Extracted:";
- var_dump($c);
- print_r(get_defined_vars());
-}
-function f4() {
- $c = extract(array("" => 1),EXTR_PREFIX_ALL,"prefix");
- echo "Extracted:";
- var_dump($c);
- print_r(get_defined_vars());
-}
-function f5() {
- $c = extract(array("111" => 1),EXTR_PREFIX_ALL,"prefix");
- echo "Extracted:";
- var_dump($c);
- print_r(get_defined_vars());
-}
-
-f1();
-f2();
-f3();
-f4();
-f5();
-?>
---EXPECT--
-Extracted:int(0)
-Array
-(
- [c] => 0
-)
-Extracted:int(1)
-Array
-(
- [a] => 1
- [prefix_a] => 1
- [c] => 1
-)
-Extracted:int(1)
-Array
-(
- [a] => 1
- [prefix_a] => 1
- [c] => 1
-)
-Extracted:int(0)
-Array
-(
- [c] => 0
-)
-Extracted:int(1)
-Array
-(
- [prefix_111] => 1
- [c] => 1
-) \ No newline at end of file
diff --git a/ext/standard/tests/general_functions/getopt.phpt b/ext/standard/tests/general_functions/getopt.phpt
deleted file mode 100644
index e861268459..0000000000
--- a/ext/standard/tests/general_functions/getopt.phpt
+++ /dev/null
@@ -1,30 +0,0 @@
---TEST--
-getopt
---ARGS--
--v -h -d test -m 1234 -t -j
---INI--
-register_argc_argv=On
-variables_order=GPS
---SKIPIF--
-<?php
- if (substr(PHP_OS, 0, 3) == 'WIN') {
- die('skip getopt() is currently not available on Windows');
- }
-?>
---FILE--
-<?php
- var_dump(getopt("d:m:j:vht"));
-?>
---EXPECT--
-array(5) {
- ["v"]=>
- bool(false)
- ["h"]=>
- bool(false)
- ["d"]=>
- string(4) "test"
- ["m"]=>
- string(4) "1234"
- ["t"]=>
- bool(false)
-}
diff --git a/ext/standard/tests/general_functions/highlight_heredoc.phpt b/ext/standard/tests/general_functions/highlight_heredoc.phpt
deleted file mode 100644
index 58f83806a5..0000000000
--- a/ext/standard/tests/general_functions/highlight_heredoc.phpt
+++ /dev/null
@@ -1,19 +0,0 @@
---TEST--
-highlight_string() handling of heredoc
---FILE--
-<?php
-$str = '
-$x=<<<DD
-jhdsjkfhjdsh
-DD
-."";
-$a=<<<DDDD
-jhdsjkfhjdsh
-DDDD;
-';
-highlight_string($str);
-?>
---EXPECT--
-<code><span style="color: #000000">
-<br />$x=&lt;&lt;&lt;DD<br />jhdsjkfhjdsh<br />DD<br />."";<br />$a=&lt;&lt;&lt;DDDD<br />jhdsjkfhjdsh<br />DDDD;<br /></span>
-</code>
diff --git a/ext/standard/tests/general_functions/is_resource.phpt b/ext/standard/tests/general_functions/is_resource.phpt
deleted file mode 100644
index d44461e442..0000000000
--- a/ext/standard/tests/general_functions/is_resource.phpt
+++ /dev/null
@@ -1,10 +0,0 @@
---TEST--
-Bug #27822: is_resource() returns TRUE for closed resources
---FILE--
-<?php
- $f = fopen(__FILE__, 'r');
- fclose($f);
- var_dump(is_resource($f));
-?>
---EXPECT--
-bool(false)
diff --git a/ext/standard/tests/general_functions/proc_open.phpt b/ext/standard/tests/general_functions/proc_open.phpt
deleted file mode 100644
index ecf8d8ad79..0000000000
--- a/ext/standard/tests/general_functions/proc_open.phpt
+++ /dev/null
@@ -1,28 +0,0 @@
---TEST--
-proc_open
---SKIPIF--
-<?php # vim:syn=php
-if (!is_executable("/bin/cat")) echo "skip";
-if (!function_exists("proc_open")) echo "skip proc_open() is not available";
-?>
---FILE--
-<?php
-$ds = array(
- 0 => array("pipe", "r"),
- 1 => array("pipe", "w"),
- 2 => array("pipe", "w")
- );
-
-$cat = proc_open(
- "/bin/cat",
- $ds,
- $pipes
- );
-
-proc_close($cat);
-
-echo "I didn't segfault!\n";
-
-?>
---EXPECT--
-I didn't segfault!
diff --git a/ext/standard/tests/general_functions/sunfuncts.phpt b/ext/standard/tests/general_functions/sunfuncts.phpt
deleted file mode 100644
index 3e528b59c2..0000000000
--- a/ext/standard/tests/general_functions/sunfuncts.phpt
+++ /dev/null
@@ -1,44 +0,0 @@
---TEST--
-date_sunrise() and date_sunset() functions
---INI--
-precision=13
---FILE--
-<?php
-
-putenv ("TZ=Asia/Jerusalem");
-
-for($a=1;$a<=12;$a++){
- echo date_sunrise(mktime(1,1,1,$a,1,2003),SUNFUNCS_RET_TIMESTAMP,31.76670,35.23330,90.83,2)." ";
- echo date_sunrise(mktime(1,1,1,$a,1,2003),SUNFUNCS_RET_STRING,31.76670,35.23330,90.83,2)." ";
- echo date_sunrise(mktime(1,1,1,$a,1,2003),SUNFUNCS_RET_DOUBLE,31.76670,35.23330,90.83,2)."\n";
-
- echo date_sunset(mktime(1,1,1,$a,1,2003),SUNFUNCS_RET_TIMESTAMP,31.76670,35.23330,90.83,2)." ";
- echo date_sunset(mktime(1,1,1,$a,1,2003),SUNFUNCS_RET_STRING,31.76670,35.23330,90.83,2)." ";
- echo date_sunset(mktime(1,1,1,$a,1,2003),SUNFUNCS_RET_DOUBLE,31.76670,35.23330,90.83,2)."\n";
-}
-?>
---EXPECT--
-1041293199 06:39 6.652455761896
-1041293806 16:46 16.76937486746
-1043971592 06:32 6.54537029266
-1043972233 17:13 17.21752470874
-1046390766 06:06 6.115652675685
-1046391456 17:36 17.6108549623
-1049069128 05:28 5.472742029069
-1049069878 17:58 17.97255258437
-1051661094 04:54 4.901229982859
-1051661898 18:18 18.31368876948
-1054339474 04:34 4.57442928945
-1054340319 18:39 18.65640094324
-1056931476 04:36 4.616120450519
-1056932328 18:48 18.80887165777
-1059609894 04:54 4.906882509836
-1059610715 18:35 18.59928600203
-1062288314 05:14 5.236889557074
-1062289083 18:03 18.06054178788
-1064880332 05:32 5.542366581139
-1064881044 17:24 17.41150561492
-1067558754 05:54 5.916208842058
-1067559410 16:50 16.83369857063
-1070150780 06:20 6.34622155207
-1070151395 16:35 16.58358905554
diff --git a/ext/standard/tests/image/246x247.png b/ext/standard/tests/image/246x247.png
deleted file mode 100644
index 648a64e0aa..0000000000
--- a/ext/standard/tests/image/246x247.png
+++ /dev/null
Binary files differ
diff --git a/ext/standard/tests/image/384x385.png b/ext/standard/tests/image/384x385.png
deleted file mode 100644
index 843ddfaf08..0000000000
--- a/ext/standard/tests/image/384x385.png
+++ /dev/null
Binary files differ
diff --git a/ext/standard/tests/image/bug13213.jpg b/ext/standard/tests/image/bug13213.jpg
deleted file mode 100644
index b90c7a4059..0000000000
--- a/ext/standard/tests/image/bug13213.jpg
+++ /dev/null
Binary files differ
diff --git a/ext/standard/tests/image/bug13213.phpt b/ext/standard/tests/image/bug13213.phpt
deleted file mode 100644
index c97b7016b4..0000000000
--- a/ext/standard/tests/image/bug13213.phpt
+++ /dev/null
@@ -1,23 +0,0 @@
---TEST--
-Bug #13213 (GetImageSize and wrong JPEG Comments)
---FILE--
-<?php
-var_dump(GetImageSize(dirname(__FILE__).'/bug13213.jpg'));
-?>
---EXPECT--
-array(7) {
- [0]=>
- int(1)
- [1]=>
- int(1)
- [2]=>
- int(2)
- [3]=>
- string(20) "width="1" height="1""
- ["bits"]=>
- int(8)
- ["channels"]=>
- int(3)
- ["mime"]=>
- string(10) "image/jpeg"
-}
diff --git a/ext/standard/tests/image/getimagesize.phpt b/ext/standard/tests/image/getimagesize.phpt
deleted file mode 100644
index 46003cffac..0000000000
--- a/ext/standard/tests/image/getimagesize.phpt
+++ /dev/null
@@ -1,196 +0,0 @@
---TEST--
-GetImageSize()
---SKIPIF--
-<?php
- require_once('skipif_imagetype.inc');
-?>
---FILE--
-<?php
- // Note: SWC requires zlib
- $dir = opendir(dirname(__FILE__)) or die('cannot open directory: '.dirname(__FILE__));
- $result = array();
- $files = array();
- while (($file = readdir($dir)) !== FALSE) {
- if (preg_match('/^test.+pix\./',$file) && $file != "test13pix.swf") {
- $files[] = $file;
- }
- }
- closedir($dir);
- sort($files);
- foreach($files as $file) {
- $result[$file] = getimagesize(dirname(__FILE__)."/$file");
- }
- var_dump($result);
-?>
---EXPECT--
-array(11) {
- ["test1pix.bmp"]=>
- array(6) {
- [0]=>
- int(1)
- [1]=>
- int(1)
- [2]=>
- int(6)
- [3]=>
- string(20) "width="1" height="1""
- ["bits"]=>
- int(24)
- ["mime"]=>
- string(9) "image/bmp"
- }
- ["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"
- }
- ["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"
- }
- ["test1pix.jpg"]=>
- array(7) {
- [0]=>
- int(1)
- [1]=>
- int(1)
- [2]=>
- int(2)
- [3]=>
- string(20) "width="1" height="1""
- ["bits"]=>
- int(8)
- ["channels"]=>
- int(3)
- ["mime"]=>
- string(10) "image/jpeg"
- }
- ["test2pix.gif"]=>
- array(7) {
- [0]=>
- int(2)
- [1]=>
- int(1)
- [2]=>
- int(1)
- [3]=>
- string(20) "width="2" height="1""
- ["bits"]=>
- int(1)
- ["channels"]=>
- int(3)
- ["mime"]=>
- string(9) "image/gif"
- }
- ["test4pix.gif"]=>
- array(7) {
- [0]=>
- int(4)
- [1]=>
- int(1)
- [2]=>
- int(1)
- [3]=>
- string(20) "width="4" height="1""
- ["bits"]=>
- int(2)
- ["channels"]=>
- int(3)
- ["mime"]=>
- string(9) "image/gif"
- }
- ["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"
- }
- ["test4pix.png"]=>
- array(6) {
- [0]=>
- int(4)
- [1]=>
- int(1)
- [2]=>
- int(3)
- [3]=>
- string(20) "width="4" height="1""
- ["bits"]=>
- int(4)
- ["mime"]=>
- string(9) "image/png"
- }
- ["test4pix.psd"]=>
- array(5) {
- [0]=>
- int(4)
- [1]=>
- int(1)
- [2]=>
- int(5)
- [3]=>
- string(20) "width="4" height="1""
- ["mime"]=>
- string(9) "image/psd"
- }
- ["test4pix.swf"]=>
- array(5) {
- [0]=>
- int(550)
- [1]=>
- int(400)
- [2]=>
- int(4)
- [3]=>
- string(24) "width="550" height="400""
- ["mime"]=>
- string(29) "application/x-shockwave-flash"
- }
- ["test4pix.tif"]=>
- array(5) {
- [0]=>
- int(4)
- [1]=>
- int(1)
- [2]=>
- int(7)
- [3]=>
- string(20) "width="4" height="1""
- ["mime"]=>
- string(10) "image/tiff"
- }
-}
diff --git a/ext/standard/tests/image/getimagesize_246x247.phpt b/ext/standard/tests/image/getimagesize_246x247.phpt
deleted file mode 100644
index e5a0aea779..0000000000
--- a/ext/standard/tests/image/getimagesize_246x247.phpt
+++ /dev/null
@@ -1,42 +0,0 @@
---TEST--
-GetImageSize() with 246x247 pixels
---SKIPIF--
-<?php
- require_once('skipif_imagetype.inc');
-?>
---FILE--
-<?php
- // Note: SWC requires zlib
- $dir = opendir(dirname(__FILE__)) or die('cannot open directory: '.dirname(__FILE__));
- $result = array();
- $files = array();
- while (($file = readdir($dir)) !== FALSE) {
- if (preg_match('/^246x247\./',$file)) {
- $files[] = $file;
- }
- }
- closedir($dir);
- sort($files);
- foreach($files as $file) {
- $result[$file] = getimagesize(dirname(__FILE__)."/$file");
- }
- var_dump($result);
-?>
---EXPECT--
-array(1) {
- ["246x247.png"]=>
- array(6) {
- [0]=>
- int(246)
- [1]=>
- int(247)
- [2]=>
- int(3)
- [3]=>
- string(24) "width="246" height="247""
- ["bits"]=>
- int(4)
- ["mime"]=>
- string(9) "image/png"
- }
-}
diff --git a/ext/standard/tests/image/getimagesize_384x385.phpt b/ext/standard/tests/image/getimagesize_384x385.phpt
deleted file mode 100644
index 0051df71e0..0000000000
--- a/ext/standard/tests/image/getimagesize_384x385.phpt
+++ /dev/null
@@ -1,42 +0,0 @@
---TEST--
-GetImageSize() with 384x385 pixels
---SKIPIF--
-<?php
- require_once('skipif_imagetype.inc');
-?>
---FILE--
-<?php
- // Note: SWC requires zlib
- $dir = opendir(dirname(__FILE__)) or die('cannot open directory: '.dirname(__FILE__));
- $result = array();
- $files = array();
- while (($file = readdir($dir)) !== FALSE) {
- if (preg_match('/^384x385\./',$file)) {
- $files[] = $file;
- }
- }
- closedir($dir);
- sort($files);
- foreach($files as $file) {
- $result[$file] = getimagesize(dirname(__FILE__)."/$file");
- }
- var_dump($result);
-?>
---EXPECT--
-array(1) {
- ["384x385.png"]=>
- array(6) {
- [0]=>
- int(384)
- [1]=>
- int(385)
- [2]=>
- int(3)
- [3]=>
- string(24) "width="384" height="385""
- ["bits"]=>
- int(1)
- ["mime"]=>
- string(9) "image/png"
- }
-}
diff --git a/ext/standard/tests/image/getimagesize_swc.phpt b/ext/standard/tests/image/getimagesize_swc.phpt
deleted file mode 100644
index b9b83f4373..0000000000
--- a/ext/standard/tests/image/getimagesize_swc.phpt
+++ /dev/null
@@ -1,25 +0,0 @@
---TEST--
-GetImageSize() for compressed swf files
---SKIPIF--
-<?php
- if (!defined("IMAGETYPE_SWC") || !extension_loaded('zlib')) {
- die("skip zlib extension is not avaliable");
- }
-?>
---FILE--
-<?php
- var_dump(getimagesize(dirname(__FILE__) . "/test13pix.swf"));
-?>
---EXPECT--
-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"
-}
diff --git a/ext/standard/tests/image/image_type_to_mime_type.phpt b/ext/standard/tests/image/image_type_to_mime_type.phpt
deleted file mode 100644
index 94aabba0b9..0000000000
--- a/ext/standard/tests/image/image_type_to_mime_type.phpt
+++ /dev/null
@@ -1,51 +0,0 @@
---TEST--
-image_type_to_mime_type()
---SKIPIF--
-<?php
- if (!function_exists('image_type_to_mime_type')) die('skip image_type_to_mime_type() not available');
- require_once('skipif_imagetype.inc');
-?>
---FILE--
-<?php
- // Note: SWC requires zlib
- $dir = opendir(dirname(__FILE__)) or die('cannot open directory: '.dirname(__FILE__));
- $result = array();
- $files = array();
- while (($file = readdir($dir)) !== FALSE) {
- if (preg_match('/^test.+pix\./',$file) && $file != "test13pix.swf") {
- $files[] = $file;
- }
- }
- closedir($dir);
- sort($files);
- foreach($files as $file) {
- $result[$file] = getimagesize(dirname(__FILE__)."/$file");
- $result[$file] = image_type_to_mime_type($result[$file][2]);
- }
- var_dump($result);
-?>
---EXPECT--
-array(11) {
- ["test1pix.bmp"]=>
- string(9) "image/bmp"
- ["test1pix.jp2"]=>
- string(9) "image/jp2"
- ["test1pix.jpc"]=>
- string(24) "application/octet-stream"
- ["test1pix.jpg"]=>
- string(10) "image/jpeg"
- ["test2pix.gif"]=>
- string(9) "image/gif"
- ["test4pix.gif"]=>
- string(9) "image/gif"
- ["test4pix.iff"]=>
- string(9) "image/iff"
- ["test4pix.png"]=>
- string(9) "image/png"
- ["test4pix.psd"]=>
- string(9) "image/psd"
- ["test4pix.swf"]=>
- string(29) "application/x-shockwave-flash"
- ["test4pix.tif"]=>
- string(10) "image/tiff"
-} \ No newline at end of file
diff --git a/ext/standard/tests/image/skipif_imagetype.inc b/ext/standard/tests/image/skipif_imagetype.inc
deleted file mode 100644
index 827f10c179..0000000000
--- a/ext/standard/tests/image/skipif_imagetype.inc
+++ /dev/null
@@ -1,15 +0,0 @@
-<?php
-if (!defined('IMAGETYPE_GIF')) die('skip images of type GIF not supported');
-if (!defined('IMAGETYPE_JPEG')) die('skip images of type JPEG not supported');
-if (!defined('IMAGETYPE_PNG')) die('skip images of type PNG not supported');
-if (!defined('IMAGETYPE_SWF')) die('skip images of type SWF not supported');
-if (!defined('IMAGETYPE_PSD')) die('skip images of type PSD not supported');
-if (!defined('IMAGETYPE_BMP')) die('skip images of type BMP not supported');
-if (!defined('IMAGETYPE_TIFF_II')) die('skip images of type TIFF not supported');
-if (!defined('IMAGETYPE_TIFF_MM')) die('skip images of type TIFF not supported');
-if (!defined('IMAGETYPE_JPC')) die('skip images of type JPC not supported');
-//if (!defined('IMAGETYPE_JP2')) die('skip images of type JP2 not supported');
-//if (!defined('IMAGETYPE_JPX')) die('skip images of type JPX not supported');
-//if (!defined('IMAGETYPE_JB2')) die('skip images of type JB2 not supported');
-if (!defined('IMAGETYPE_IFF')) die('skip images of type IFF not supported');
-?>
diff --git a/ext/standard/tests/image/test13pix.swf b/ext/standard/tests/image/test13pix.swf
deleted file mode 100755
index 0d40cb743e..0000000000
--- a/ext/standard/tests/image/test13pix.swf
+++ /dev/null
Binary files differ
diff --git a/ext/standard/tests/image/test1pix.bmp b/ext/standard/tests/image/test1pix.bmp
deleted file mode 100644
index f3799d2d1e..0000000000
--- a/ext/standard/tests/image/test1pix.bmp
+++ /dev/null
Binary files differ
diff --git a/ext/standard/tests/image/test1pix.jp2 b/ext/standard/tests/image/test1pix.jp2
deleted file mode 100644
index 8a1172e10d..0000000000
--- a/ext/standard/tests/image/test1pix.jp2
+++ /dev/null
Binary files differ
diff --git a/ext/standard/tests/image/test1pix.jpc b/ext/standard/tests/image/test1pix.jpc
deleted file mode 100644
index ac11c6bc81..0000000000
--- a/ext/standard/tests/image/test1pix.jpc
+++ /dev/null
Binary files differ
diff --git a/ext/standard/tests/image/test1pix.jpg b/ext/standard/tests/image/test1pix.jpg
deleted file mode 100644
index 121decb65a..0000000000
--- a/ext/standard/tests/image/test1pix.jpg
+++ /dev/null
Binary files differ
diff --git a/ext/standard/tests/image/test2pix.gif b/ext/standard/tests/image/test2pix.gif
deleted file mode 100644
index c4d4483544..0000000000
--- a/ext/standard/tests/image/test2pix.gif
+++ /dev/null
Binary files differ
diff --git a/ext/standard/tests/image/test4pix.gif b/ext/standard/tests/image/test4pix.gif
deleted file mode 100644
index a02ebe9784..0000000000
--- a/ext/standard/tests/image/test4pix.gif
+++ /dev/null
Binary files differ
diff --git a/ext/standard/tests/image/test4pix.iff b/ext/standard/tests/image/test4pix.iff
deleted file mode 100644
index fe9daebbae..0000000000
--- a/ext/standard/tests/image/test4pix.iff
+++ /dev/null
Binary files differ
diff --git a/ext/standard/tests/image/test4pix.png b/ext/standard/tests/image/test4pix.png
deleted file mode 100644
index 2b75ac5fb2..0000000000
--- a/ext/standard/tests/image/test4pix.png
+++ /dev/null
Binary files differ
diff --git a/ext/standard/tests/image/test4pix.psd b/ext/standard/tests/image/test4pix.psd
deleted file mode 100644
index 4c378239d7..0000000000
--- a/ext/standard/tests/image/test4pix.psd
+++ /dev/null
Binary files differ
diff --git a/ext/standard/tests/image/test4pix.swf b/ext/standard/tests/image/test4pix.swf
deleted file mode 100755
index b1d41c6766..0000000000
--- a/ext/standard/tests/image/test4pix.swf
+++ /dev/null
Binary files differ
diff --git a/ext/standard/tests/image/test4pix.tif b/ext/standard/tests/image/test4pix.tif
deleted file mode 100644
index 13367ee173..0000000000
--- a/ext/standard/tests/image/test4pix.tif
+++ /dev/null
Binary files differ
diff --git a/ext/standard/tests/math/abs.phpt b/ext/standard/tests/math/abs.phpt
deleted file mode 100644
index f5c26c3037..0000000000
--- a/ext/standard/tests/math/abs.phpt
+++ /dev/null
@@ -1,24 +0,0 @@
---TEST--
-Simple math tests
---FILE--
-<?php // $Id$
-
-define('LONG_MAX', is_int(5000000000)? 9223372036854775807 : 0x7FFFFFFF);
-define('LONG_MIN', -LONG_MAX - 1);
-printf("%d,%d,%d,%d\n",is_int(LONG_MIN ),is_int(LONG_MAX ),
- is_int(LONG_MIN-1),is_int(LONG_MAX+1));
-
-$tests = <<<TESTS
- 1 === abs(-1)
- 1.5 === abs(-1.5)
- 1 === abs("-1")
- 1.5 === abs("-1.5")
--LONG_MIN+1 === abs(LONG_MIN-1)
--LONG_MIN === abs(LONG_MIN)
--(LONG_MIN+1) === abs(LONG_MIN+1)
-TESTS;
-
-include(dirname(__FILE__) . '/../../../../tests/quicktester.inc');
---EXPECT--
-1,1,0,0
-OK
diff --git a/ext/standard/tests/math/bug21523.phpt b/ext/standard/tests/math/bug21523.phpt
deleted file mode 100644
index aaeb8e865c..0000000000
--- a/ext/standard/tests/math/bug21523.phpt
+++ /dev/null
@@ -1,11 +0,0 @@
---TEST--
-Bug #21523 (number_format tries to allocate negative amount of memory)
---FILE--
-<?php // $Id$ vim600:syn=php
-
-var_dump(number_format(-2000, 2768));
-echo "OK";
-?>
---EXPECT--
-string(2775) "-2,000.00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
-OK
diff --git a/ext/standard/tests/math/bug24142.phpt b/ext/standard/tests/math/bug24142.phpt
deleted file mode 100644
index 244952369d..0000000000
--- a/ext/standard/tests/math/bug24142.phpt
+++ /dev/null
@@ -1,20 +0,0 @@
---TEST--
-Bug #24142 (round() problems)
---FILE--
-<?php // $Id$ vim600:syn=php
-$v = 0.005;
-for ($i = 1; $i < 10; $i++) {
- echo "round({$v}, 2) -> ".round($v, 2)."\n";
- $v += 0.01;
-}
-?>
---EXPECT--
-round(0.005, 2) -> 0.01
-round(0.015, 2) -> 0.02
-round(0.025, 2) -> 0.03
-round(0.035, 2) -> 0.04
-round(0.045, 2) -> 0.05
-round(0.055, 2) -> 0.06
-round(0.065, 2) -> 0.07
-round(0.075, 2) -> 0.08
-round(0.085, 2) -> 0.09
diff --git a/ext/standard/tests/math/bug25665.phpt b/ext/standard/tests/math/bug25665.phpt
deleted file mode 100644
index b7875db11e..0000000000
--- a/ext/standard/tests/math/bug25665.phpt
+++ /dev/null
@@ -1,11 +0,0 @@
---TEST--
-Bug #25665 (var_dump () hangs on Nan and INF)
---FILE--
-<?php
-set_time_limit(5);
-var_dump(acos(1.01));
-var_dump(log(0));
-?>
---EXPECT--
-float(NAN)
-float(-INF)
diff --git a/ext/standard/tests/math/bug25694.phpt b/ext/standard/tests/math/bug25694.phpt
deleted file mode 100644
index 165e1db083..0000000000
--- a/ext/standard/tests/math/bug25694.phpt
+++ /dev/null
@@ -1,35 +0,0 @@
---TEST--
-Bug #25694 (round() and number_format() inconsistency)
---FILE--
-<?php
-echo "round 0.045 = " . round(0.045, 2) . "\n";
-echo "number format 0.045 = " . number_format(0.045, 2) . "\n\n";
-echo "round 0.055 = " . round(0.055, 2) . "\n";
-echo "number format 0.055 = " . number_format(0.055, 2) . "\n\n";
-echo "round 5.045 = " . round(5.045, 2) . "\n";
-echo "number format 5.045 = " . number_format(5.045, 2) . "\n\n";
-echo "round 5.055 = " . round(5.055, 2) . "\n";
-echo "number format 5.055 = " . number_format(5.055, 2) . "\n\n";
-echo "round 3.025 = " . round(3.025, 2) . "\n";
-echo "number format 3.025 = " . number_format(3.025, 2) . "\n\n";
-echo "round 4.025 = " . round(4.025, 2) . "\n";
-echo "number format 4.025 = " . number_format(4.025, 2) . "\n\n";
-?>
---EXPECT--
-round 0.045 = 0.05
-number format 0.045 = 0.05
-
-round 0.055 = 0.06
-number format 0.055 = 0.06
-
-round 5.045 = 5.05
-number format 5.045 = 5.05
-
-round 5.055 = 5.06
-number format 5.055 = 5.06
-
-round 3.025 = 3.03
-number format 3.025 = 3.03
-
-round 4.025 = 4.03
-number format 4.025 = 4.03
diff --git a/ext/standard/tests/math/bug27646.phpt b/ext/standard/tests/math/bug27646.phpt
deleted file mode 100755
index 2df6d8f37a..0000000000
--- a/ext/standard/tests/math/bug27646.phpt
+++ /dev/null
@@ -1,47 +0,0 @@
---TEST--
-Bug #27646 (Cannot serialize/unserialize non-finite numeric values)
---FILE--
-<?php
-
-$f=12.3;
-var_dump($f);
-var_dump(serialize($f));
-var_dump(unserialize(serialize($f)));
-
-$f=-12.3;
-var_dump($f);
-var_dump(serialize($f));
-var_dump(unserialize(serialize($f)));
-
-$f=-INF;
-var_dump($f);
-var_dump(serialize($f));
-var_dump(unserialize(serialize($f)));
-
-$f=INF;
-var_dump($f);
-var_dump(serialize($f));
-var_dump(unserialize(serialize($f)));
-
-$f=NAN;
-var_dump($f);
-var_dump(serialize($f));
-var_dump(unserialize(serialize($f)));
-
-?>
---EXPECTF--
-float(1%f)
-string(%d) "d:1%s;"
-float(1%f)
-float(-1%f)
-string(%d) "d:-1%s;"
-float(-1%f)
-float(-INF)
-string(7) "d:-INF;"
-float(-INF)
-float(INF)
-string(6) "d:INF;"
-float(INF)
-float(NAN)
-string(6) "d:NAN;"
-float(NAN)
diff --git a/ext/standard/tests/math/bug28228.phpt b/ext/standard/tests/math/bug28228.phpt
deleted file mode 100755
index 3d6cebcfd4..0000000000
--- a/ext/standard/tests/math/bug28228.phpt
+++ /dev/null
@@ -1,14 +0,0 @@
---TEST--
-Bug #28228 (number_format() does not allow empty decimal separator)
---FILE--
-<?php
-echo number_format(1234.5678, 4, '', '') . "\n";
-echo number_format(1234.5678, 4, NULL, ',') . "\n";
-echo number_format(1234.5678, 4, 0, ',') . "\n";
-echo number_format(1234.5678, 4);
-?>
---EXPECT--
-12345678
-12,345,678
-1,23405678
-1,234.5678
diff --git a/ext/standard/tests/math/floorceil.phpt b/ext/standard/tests/math/floorceil.phpt
deleted file mode 100644
index 2f7d82c6e6..0000000000
--- a/ext/standard/tests/math/floorceil.phpt
+++ /dev/null
@@ -1,44 +0,0 @@
---TEST--
-Tests for floor en ceil
---FILE--
-<?php
- $a = ceil (-0); $b = ceil (-1); $c = ceil (-1.5);
- $d = ceil (-1.8); $e = ceil (-2.7);
- var_dump ($a, $b, $c, $d, $e);
-
- $a = ceil (0); $b = ceil (0.5); $c = ceil (1);
- $d = ceil (1.5); $e = ceil (1.8); $f = ceil (2.7);
- var_dump ($a, $b, $c, $d, $e, $f);
-
- $a = floor (-0); $b = floor (-0.5); $c = floor (-1);
- $d = floor (-1.5); $e = floor (-1.8); $f = floor (-2.7);
- var_dump ($a, $b, $c, $d, $e, $f);
-
- $a = floor (0); $b = floor (0.5); $c = floor (1);
- $d = floor (1.5); $e = floor (1.8); $f = floor (2.7);
- var_dump ($a, $b, $c, $d, $e, $f);
-?>
---EXPECT--
-float(0)
-float(-1)
-float(-1)
-float(-1)
-float(-2)
-float(0)
-float(1)
-float(1)
-float(2)
-float(2)
-float(3)
-float(0)
-float(-1)
-float(-1)
-float(-2)
-float(-2)
-float(-3)
-float(0)
-float(0)
-float(1)
-float(1)
-float(1)
-float(2)
diff --git a/ext/standard/tests/math/hexdec.phpt b/ext/standard/tests/math/hexdec.phpt
deleted file mode 100644
index d8ff71f1ce..0000000000
--- a/ext/standard/tests/math/hexdec.phpt
+++ /dev/null
@@ -1,22 +0,0 @@
---TEST--
-overflow check for _php_math_basetozval
---FILE--
-<?php
-
-var_dump(hexdec("012345"));
-var_dump(hexdec("12345"));
-var_dump(hexdec("q12345"));
-var_dump(hexdec("12345+?!"));
-var_dump(hexdec("12345q"));
-var_dump((float)hexdec("1234500001"));
-var_dump((float)hexdec("17fffffff"));
-
-?>
---EXPECT--
-int(74565)
-int(74565)
-int(74565)
-int(74565)
-int(74565)
-float(78187069441)
-float(6442450943)
diff --git a/ext/standard/tests/math/log.phpt b/ext/standard/tests/math/log.phpt
deleted file mode 100644
index 4f8b47a76b..0000000000
--- a/ext/standard/tests/math/log.phpt
+++ /dev/null
@@ -1,42 +0,0 @@
---TEST--
-log() tests
---FILE--
-<?php // $Id$
-echo "On failure, please mail result to php-dev@lists.php.net\n";
-for ($x = 0, $count= 0; $x < 200; $x++) {
- $x2 = (int) exp(log($x));
- // e ^ log(x) should be close in range to x
- if (($x2 < ($x + 2)) && ($x2 > ($x - 2))) {
- $count++;
- } else {
- print "$x : $x2\n";
- }
-}
-print $count . "\n";
-
-// Now test the base form of log
-for ($base = 2; $base < 11; $base++) {
- for ($x = 0, $count= 0; $x < 50; $x++) {
- $x2 = (int) pow($base, log($x, $base));
- // base ^ log(x) should be close in range to x
- if (($x2 < ($x + 2)) && ($x2 > ($x - 2))) {
- $count++;
- } else {
- print "base $base: $x : $x2\n";
- }
- }
- print $count . "\n";
-}
-?>
---EXPECT--
-On failure, please mail result to php-dev@lists.php.net
-200
-50
-50
-50
-50
-50
-50
-50
-50
-50
diff --git a/ext/standard/tests/math/pow.phpt b/ext/standard/tests/math/pow.phpt
deleted file mode 100644
index a1e8944830..0000000000
--- a/ext/standard/tests/math/pow.phpt
+++ /dev/null
@@ -1,149 +0,0 @@
---TEST--
-Various pow() tests
---FILE--
-<?php // $Id$
-
-define('LONG_MAX', is_int(5000000000)? 9223372036854775807 : 0x7FFFFFFF);
-define('LONG_MIN', -LONG_MAX - 1);
-printf("%d,%d,%d,%d\n",is_int(LONG_MIN ),is_int(LONG_MAX ),
- is_int(LONG_MIN-1),is_int(LONG_MAX+1));
-
-$tests = <<<TESTS
- 0.25 === pow(-2,-2)
--0.5 === pow(-2,-1)
- 1 === pow(-2, 0)
--2 === pow(-2, 1)
- 4 === pow(-2, 2)
- 1.0 === pow(-1,-2)
--1.0 === pow(-1,-1)
- 1 === pow(-1, 0)
--1 === pow(-1, 1)
- 1 === pow(-1, 2)
- TRUE === is_infinite(pow(0,-2))
- TRUE === is_infinite(pow(0,-1))
- 1 === pow( 0, 0)
- 0 === pow( 0, 1)
- 0 === pow( 0, 2)
- 1.0 === pow( 1,-2)
- 1.0 === pow( 1,-1)
- 1 === pow( 1, 0)
- 1 === pow( 1, 1)
- 1 === pow( 1, 2)
- 0.25 === pow( 2,-2)
- 0.5 === pow( 2,-1)
- 1 === pow( 2, 0)
- 2 === pow( 2, 1)
- 4 === pow( 2, 2)
- 0.25 === pow(-2,-2.0)
--0.5 === pow(-2,-1.0)
- 1.0 === pow(-2, 0.0)
--2.0 === pow(-2, 1.0)
- 4.0 === pow(-2, 2.0)
- 1.0 === pow(-1,-2.0)
--1.0 === pow(-1,-1.0)
- 1.0 === pow(-1, 0.0)
--1.0 === pow(-1, 1.0)
- 1.0 === pow(-1, 2.0)
- TRUE === is_infinite(pow(0,-2.0))
- TRUE === is_infinite(pow(0,-1.0))
- 1.0 === pow( 0, 0.0)
- 0.0 === pow( 0, 1.0)
- 0.0 === pow( 0, 2.0)
- 1.0 === pow( 1,-2.0)
- 1.0 === pow( 1,-1.0)
- 1.0 === pow( 1, 0.0)
- 1.0 === pow( 1, 1.0)
- 1.0 === pow( 1, 2.0)
- 0.25 === pow( 2,-2.0)
- 0.5 === pow( 2,-1.0)
- 1.0 === pow( 2, 0.0)
- 2.0 === pow( 2, 1.0)
- 4.0 === pow( 2, 2.0)
- 2147483648 === pow(2,31)
--2147483648 ~== pow(-2,31)
- 1000000000 === pow(10,9)
- 100000000 === pow(-10,8)
- 1 === pow(-1,1443279822)
--1 === pow(-1,1443279821)
-sqrt(2) ~== pow(2,1/2)
- 0.25 === pow(-2.0,-2.0)
--0.5 === pow(-2.0,-1.0)
- 1.0 === pow(-2.0, 0.0)
--2.0 === pow(-2.0, 1.0)
- 4.0 === pow(-2.0, 2.0)
- 1.0 === pow(-1.0,-2.0)
--1.0 === pow(-1.0,-1.0)
- 1.0 === pow(-1.0, 0.0)
--1.0 === pow(-1.0, 1.0)
- 1.0 === pow(-1.0, 2.0)
- TRUE === is_infinite(pow(0.0,-2.0))
- TRUE === is_infinite(pow(0.0,-1.0))
- 1.0 === pow( 0.0, 0.0)
- 0.0 === pow( 0.0, 1.0)
- 0.0 === pow( 0.0, 2.0)
- 1.0 === pow( 1.0,-2.0)
- 1.0 === pow( 1.0,-1.0)
- 1.0 === pow( 1.0, 0.0)
- 1.0 === pow( 1.0, 1.0)
- 1.0 === pow( 1.0, 2.0)
- 0.25 === pow( 2.0,-2.0)
- 0.5 === pow( 2.0,-1.0)
- 1.0 === pow( 2.0, 0.0)
- 2.0 === pow( 2.0, 1.0)
- 4.0 === pow( 2.0, 2.0)
- 0.25 === pow(-2.0,-2)
--0.5 === pow(-2.0,-1)
- 1.0 === pow(-2.0, 0)
--2.0 === pow(-2.0, 1)
- 4.0 === pow(-2.0, 2)
- 1.0 === pow(-1.0,-2)
--1.0 === pow(-1.0,-1)
- 1.0 === pow(-1.0, 0)
--1.0 === pow(-1.0, 1)
- 1.0 === pow(-1.0, 2)
- TRUE === is_infinite(pow( 0.0,-2))
- TRUE === is_infinite(pow( 0.0,-1))
- 1.0 === pow( 0.0, 0)
- 0.0 === pow( 0.0, 1)
- 0.0 === pow( 0.0, 2)
- 1.0 === pow( 1.0,-2)
- 1.0 === pow( 1.0,-1)
- 1.0 === pow( 1.0, 0)
- 1.0 === pow( 1.0, 1)
- 1.0 === pow( 1.0, 2)
- 0.25 === pow( 2.0,-2)
- 0.5 === pow( 2.0,-1)
- 1.0 === pow( 2.0, 0)
- 2.0 === pow( 2.0, 1)
- 4.0 === pow( 2.0, 2)
- 2.0 === pow( 4, 0.5)
- 2.0 === pow( 4.0, 0.5)
- 3.0 === pow( 27, 1/3)
- 3.0 === pow(27.0, 1/3)
- 0.5 === pow( 4, -0.5)
- 0.5 === pow( 4.0, -0.5)
-LONG_MAX-1 === pow(LONG_MAX-1,1)
-LONG_MIN+1 === pow(LONG_MIN+1,1)
-(LONG_MAX-1)*(LONG_MAX-1) ~== pow(LONG_MAX-1,2)
-(LONG_MIN+1)*(LONG_MIN+1) ~== pow(LONG_MIN+1,2)
-(float)(LONG_MAX-1) === pow(LONG_MAX-1,1.0)
-(float)(LONG_MIN+1) === pow(LONG_MIN+1,1.0)
-(LONG_MAX-1)*(LONG_MAX-1) ~== pow(LONG_MAX-1,2.0)
-(LONG_MIN+1)*(LONG_MIN+1) ~== pow(LONG_MIN+1,2.0)
-LONG_MAX === pow(LONG_MAX,1)
-LONG_MIN === pow(LONG_MIN,1)
-LONG_MAX*LONG_MAX ~== pow(LONG_MAX,2)
-LONG_MIN*LONG_MIN ~== pow(LONG_MIN,2)
-(float)LONG_MAX === pow(LONG_MAX,1.0)
-(float)LONG_MIN === pow(LONG_MIN,1.0)
-LONG_MAX*LONG_MAX ~== pow(LONG_MAX,2.0)
-LONG_MIN*LONG_MIN ~== pow(LONG_MIN,2.0)
-TESTS;
-
- echo "On failure, please mail result to php-dev@lists.php.net\n";
- include(dirname(__FILE__) . '/../../../../tests/quicktester.inc');
-
---EXPECT--
-1,1,0,0
-On failure, please mail result to php-dev@lists.php.net
-OK
diff --git a/ext/standard/tests/math/round.phpt b/ext/standard/tests/math/round.phpt
deleted file mode 100644
index 47f57dad18..0000000000
--- a/ext/standard/tests/math/round.phpt
+++ /dev/null
@@ -1,37 +0,0 @@
---TEST--
-Simple math tests
---FILE--
-<?php // $Id$
-
-define('LONG_MAX', is_int(5000000000)? 9223372036854775807 : 0x7FFFFFFF);
-define('LONG_MIN', -LONG_MAX - 1);
-printf("%d,%d,%d,%d\n",is_int(LONG_MIN ),is_int(LONG_MAX ),
- is_int(LONG_MIN-1),is_int(LONG_MAX+1));
-
-$tests = <<<TESTS
--1 ~== ceil(-1.5)
- 2 ~== ceil( 1.5)
--2 ~== floor(-1.5)
- 1 ~== floor(1.5)
- LONG_MIN ~== ceil(LONG_MIN - 0.5)
- LONG_MIN+1 ~== ceil(LONG_MIN + 0.5)
- LONG_MIN-1 ~== round(LONG_MIN - 0.6)
- LONG_MIN ~== round(LONG_MIN - 0.4)
- LONG_MIN ~== round(LONG_MIN + 0.4)
- LONG_MIN+1 ~== round(LONG_MIN + 0.6)
- LONG_MIN-1 ~== floor(LONG_MIN - 0.5)
- LONG_MIN ~== floor(LONG_MIN + 0.5)
- LONG_MAX ~== ceil(LONG_MAX - 0.5)
- LONG_MAX+1 ~== ceil(LONG_MAX + 0.5)
- LONG_MAX-1 ~== round(LONG_MAX - 0.6)
- LONG_MAX ~== round(LONG_MAX - 0.4)
- LONG_MAX ~== round(LONG_MAX + 0.4)
- LONG_MAX+1 ~== round(LONG_MAX + 0.6)
- LONG_MAX-1 ~== floor(LONG_MAX - 0.5)
- LONG_MAX ~== floor(LONG_MAX + 0.5)
-TESTS;
-
-include(dirname(__FILE__) . '/../../../../tests/quicktester.inc');
---EXPECT--
-1,1,0,0
-OK
diff --git a/ext/standard/tests/network/bug20134.phpt b/ext/standard/tests/network/bug20134.phpt
deleted file mode 100644
index e311f892f7..0000000000
--- a/ext/standard/tests/network/bug20134.phpt
+++ /dev/null
@@ -1,24 +0,0 @@
---TEST--
-Bug #20134 (UDP reads from invalid ports)
---FILE--
-<?php
-# vim600:syn=php:
-$fp = fsockopen("udp://localhost", 65534, $errno, $errstr);
-if (!$fp) {
- /* UDP will never cause a connection error, as it is
- * a connection-LESS protocol */
- echo "ERROR: $errno - $errstr<br>\n";
-}
-else {
- /* Likewise, writes will always appear to succeed */
- $x = fwrite($fp,"\n");
- var_dump($x);
- /* But reads should always fail */
- $content = fread($fp, 40);
- var_dump($content);
- fclose($fp);
-}
-?>
---EXPECT--
-int(1)
-string(0) ""
diff --git a/ext/standard/tests/network/tcp4loop.phpt b/ext/standard/tests/network/tcp4loop.phpt
deleted file mode 100644
index afd955918e..0000000000
--- a/ext/standard/tests/network/tcp4loop.phpt
+++ /dev/null
@@ -1,34 +0,0 @@
---TEST--
-Streams Based IPv4 TCP Loopback test
---FILE--
-<?php # vim:ft=php:
- /* Setup socket server */
- $server = stream_socket_server('tcp://127.0.0.1:31337');
- if (!$server) {
- die('Unable to create AF_INET socket [server]');
- }
-
- /* Connect to it */
- $client = stream_socket_client('tcp://127.0.0.1:31337');
- if (!$client) {
- die('Unable to create AF_INET socket [client]');
- }
-
- /* Accept that connection */
- $socket = stream_socket_accept($server);
- if (!$socket) {
- die('Unable to accept connection');
- }
-
- fwrite($client, "ABCdef123\n");
-
- $data = fread($socket, 10);
- var_dump($data);
-
- fclose($client);
- fclose($socket);
- fclose($server);
-?>
---EXPECT--
-string(10) "ABCdef123
-"
diff --git a/ext/standard/tests/network/tcp6loop.phpt b/ext/standard/tests/network/tcp6loop.phpt
deleted file mode 100644
index 3f28cd4437..0000000000
--- a/ext/standard/tests/network/tcp6loop.phpt
+++ /dev/null
@@ -1,42 +0,0 @@
---TEST--
-Streams Based IPv6 TCP Loopback test
---SKIPIF--
-<?php
- /* If IPv6 is supported on the platform this will error out with code 111 - Connection refused.
- If IPv6 is NOT supported, $errno will be set to something else (indicating parse/getaddrinfo error)
- Note: Might be a good idea to export an IPv6 support indicator (such as AF_INET6 exported by ext/sockets) */
- @stream_socket_client('tcp://[::1]:0', $errno);
- if ($errno != 111) die('skip IPv6 not supported.');
-?>
---FILE--
-<?php
- /* Setup socket server */
- $server = stream_socket_server('tcp://[::1]:31337');
- if (!$server) {
- die('Unable to create AF_INET6 socket [server]');
- }
-
- /* Connect to it */
- $client = stream_socket_client('tcp://[::1]:31337');
- if (!$client) {
- die('Unable to create AF_INET6 socket [client]');
- }
-
- /* Accept that connection */
- $socket = stream_socket_accept($server);
- if (!$socket) {
- die('Unable to accept connection');
- }
-
- fwrite($client, "ABCdef123\n");
-
- $data = fread($socket, 10);
- var_dump($data);
-
- fclose($client);
- fclose($socket);
- fclose($server);
-?>
---EXPECT--
-string(10) "ABCdef123
-"
diff --git a/ext/standard/tests/network/udgloop.phpt b/ext/standard/tests/network/udgloop.phpt
deleted file mode 100644
index a61d082c18..0000000000
--- a/ext/standard/tests/network/udgloop.phpt
+++ /dev/null
@@ -1,37 +0,0 @@
---TEST--
-Streams Based Unix Domain Datagram Loopback test
---SKIPIF--
-<?php # vim:ft=php:
- if (array_search("udg",stream_get_transports()) === false)
- die('SKIP No support for UNIX domain sockets.');
-?>
---FILE--
-<?php
- $uniqid = uniqid();
- if (file_exists("/tmp/$uniqid.sock"))
- die('Temporary socket /tmp/$uniqid.sock already exists.');
-
- /* Setup socket server */
- $server = stream_socket_server("udg:///tmp/$uniqid.sock", $errno, $errstr, STREAM_SERVER_BIND);
- if (!$server) {
- die('Unable to create AF_UNIX socket [server]');
- }
-
- /* Connect to it */
- $client = stream_socket_client("udg:///tmp/$uniqid.sock");
- if (!$client) {
- die('Unable to create AF_UNIX socket [client]');
- }
-
- fwrite($client, "ABCdef123\n");
-
- $data = fread($server, 10);
- var_dump($data);
-
- fclose($client);
- fclose($server);
- unlink("/tmp/$uniqid.sock");
-?>
---EXPECT--
-string(10) "ABCdef123
-"
diff --git a/ext/standard/tests/network/udp4loop.phpt b/ext/standard/tests/network/udp4loop.phpt
deleted file mode 100644
index 10d36ed73f..0000000000
--- a/ext/standard/tests/network/udp4loop.phpt
+++ /dev/null
@@ -1,27 +0,0 @@
---TEST--
-Streams Based IPv4 UDP Loopback test
---FILE--
-<?php
- /* Setup socket server */
- $server = stream_socket_server('udp://127.0.0.1:31338', $errno, $errstr, STREAM_SERVER_BIND);
- if (!$server) {
- die('Unable to create AF_INET socket [server]');
- }
-
- /* Connect to it */
- $client = stream_socket_client('udp://127.0.0.1:31338');
- if (!$client) {
- die('Unable to create AF_INET socket [client]');
- }
-
- fwrite($client, "ABCdef123\n");
-
- $data = fread($server, 10);
- var_dump($data);
-
- fclose($client);
- fclose($server);
-?>
---EXPECT--
-string(10) "ABCdef123
-"
diff --git a/ext/standard/tests/network/udp6loop.phpt b/ext/standard/tests/network/udp6loop.phpt
deleted file mode 100644
index 5fcf7a7f46..0000000000
--- a/ext/standard/tests/network/udp6loop.phpt
+++ /dev/null
@@ -1,41 +0,0 @@
---TEST--
-Streams Based IPv6 UDP Loopback test
---SKIPIF--
-<?php # vim:ft=php:
- /* If IPv6 is supported on the platform this will error out with code 111 -
- * Connection refused. If IPv6 is NOT supported, $errno will be set to
- * something else (indicating parse/getaddrinfo error)
- * Note: Might be a good idea to export an IPv6 support indicator
- * (such as AF_INET6 exported by ext/sockets), however, since we
- * cannot tell for sure if IPv6 works until we probe it at run time,
- * this isn't really practical.
- */
-
- @stream_socket_client('tcp://[::1]:0', $errno);
- if ($errno != 111) die('skip IPv6 not supported.');
-?>
---FILE--
-<?php
- /* Setup socket server */
- $server = stream_socket_server('udp://[::1]:31337', $errno, $errstr, STREAM_SERVER_BIND);
- if (!$server) {
- die('Unable to create AF_INET6 socket [server]');
- }
-
- /* Connect to it */
- $client = stream_socket_client('udp://[::1]:31337');
- if (!$client) {
- die('Unable to create AF_INET6 socket [client]');
- }
-
- fwrite($client, "ABCdef123\n");
-
- $data = fread($server, 10);
- var_dump($data);
-
- fclose($client);
- fclose($server);
-?>
---EXPECT--
-string(10) "ABCdef123
-"
diff --git a/ext/standard/tests/network/unixloop.phpt b/ext/standard/tests/network/unixloop.phpt
deleted file mode 100644
index abb103b0d1..0000000000
--- a/ext/standard/tests/network/unixloop.phpt
+++ /dev/null
@@ -1,44 +0,0 @@
---TEST--
-Streams Based Unix Domain Loopback test
---SKIPIF--
-<?php # vim:ft=php:
- if (array_search("unix",stream_get_transports()) === false)
- die('SKIP No support for UNIX domain sockets.');
-?>
---FILE--
-<?php
- $uniqid = uniqid();
- if (file_exists("/tmp/$uniqid.sock"))
- die('Temporary socket already exists.');
-
- /* Setup socket server */
- $server = stream_socket_server("unix:///tmp/$uniqid.sock");
- if (!$server) {
- die('Unable to create AF_UNIX socket [server]');
- }
-
- /* Connect to it */
- $client = stream_socket_client("unix:///tmp/$uniqid.sock");
- if (!$client) {
- die('Unable to create AF_UNIX socket [client]');
- }
-
- /* Accept that connection */
- $socket = stream_socket_accept($server);
- if (!$socket) {
- die('Unable to accept connection');
- }
-
- fwrite($client, "ABCdef123\n");
-
- $data = fread($socket, 10);
- var_dump($data);
-
- fclose($client);
- fclose($socket);
- fclose($server);
- unlink("/tmp/$uniqid.sock");
-?>
---EXPECT--
-string(10) "ABCdef123
-"
diff --git a/ext/standard/tests/reg/001.phpt b/ext/standard/tests/reg/001.phpt
deleted file mode 100644
index 13c50d0d1e..0000000000
--- a/ext/standard/tests/reg/001.phpt
+++ /dev/null
@@ -1,7 +0,0 @@
---TEST--
-RegReplace test 1
---FILE--
-<?php $a="abc123";
- echo ereg_replace("123","def",$a)?>
---EXPECT--
-abcdef
diff --git a/ext/standard/tests/reg/002.phpt b/ext/standard/tests/reg/002.phpt
deleted file mode 100644
index abe9e063d8..0000000000
--- a/ext/standard/tests/reg/002.phpt
+++ /dev/null
@@ -1,7 +0,0 @@
---TEST--
-RegReplace test 2
---FILE--
-<?php $a="abc123";
- echo ereg_replace("123","",$a)?>
---EXPECT--
-abc
diff --git a/ext/standard/tests/reg/003.phpt b/ext/standard/tests/reg/003.phpt
deleted file mode 100644
index 4257f0d27e..0000000000
--- a/ext/standard/tests/reg/003.phpt
+++ /dev/null
@@ -1,8 +0,0 @@
---TEST--
-ereg_replace single-quote test
---FILE--
-<?php $a="\\'test";
- echo ereg_replace("\\\\'","'",$a)
-?>
---EXPECT--
-'test
diff --git a/ext/standard/tests/reg/004.phpt b/ext/standard/tests/reg/004.phpt
deleted file mode 100644
index 3e535c6a9d..0000000000
--- a/ext/standard/tests/reg/004.phpt
+++ /dev/null
@@ -1,14 +0,0 @@
---TEST--
-simple ereg test
---FILE--
-<?php $a="This is a nice and simple string";
- if (ereg(".*nice and simple.*",$a)) {
- echo "ok\n";
- }
- if (!ereg(".*doesn't exist.*",$a)) {
- echo "ok\n";
- }
-?>
---EXPECT--
-ok
-ok
diff --git a/ext/standard/tests/reg/005.phpt b/ext/standard/tests/reg/005.phpt
deleted file mode 100644
index ee9ccc6da4..0000000000
--- a/ext/standard/tests/reg/005.phpt
+++ /dev/null
@@ -1,18 +0,0 @@
---TEST--
-Test Regular expression register support in ereg
---FILE--
-<?php $a="This is a nice and simple string";
- echo ereg(".*(is).*(is).*",$a,$registers);
- echo "\n";
- echo $registers[0];
- echo "\n";
- echo $registers[1];
- echo "\n";
- echo $registers[2];
- echo "\n";
-?>
---EXPECT--
-32
-This is a nice and simple string
-is
-is
diff --git a/ext/standard/tests/reg/006.phpt b/ext/standard/tests/reg/006.phpt
deleted file mode 100644
index cae349672e..0000000000
--- a/ext/standard/tests/reg/006.phpt
+++ /dev/null
@@ -1,8 +0,0 @@
---TEST--
-Test ereg_replace of start-of-line
---FILE--
-<?php $a="This is a nice and simple string";
- echo ereg_replace("^This","That",$a);
-?>
---EXPECT--
-That is a nice and simple string
diff --git a/ext/standard/tests/reg/007.phpt b/ext/standard/tests/reg/007.phpt
deleted file mode 100644
index beb3cdc159..0000000000
--- a/ext/standard/tests/reg/007.phpt
+++ /dev/null
@@ -1,10 +0,0 @@
---TEST--
-Test empty result buffer in reg_replace
---FILE--
-<?php
- $a="abcd";
- $b=ereg_replace("abcd","",$a);
- echo "strlen(\$b)=".strlen($b);
-?>
---EXPECT--
-strlen($b)=0
diff --git a/ext/standard/tests/reg/008.phpt b/ext/standard/tests/reg/008.phpt
deleted file mode 100644
index 9a0cedabc5..0000000000
--- a/ext/standard/tests/reg/008.phpt
+++ /dev/null
@@ -1,8 +0,0 @@
---TEST--
-Test back-references in regular expressions
---FILE--
-<?php
- echo ereg_replace("([a-z]*)([-=+|]*)([0-9]+)","\\3 \\1 \\2\n","abc+-|=123");
-?>
---EXPECT--
-123 abc +-|=
diff --git a/ext/standard/tests/reg/009.phpt b/ext/standard/tests/reg/009.phpt
deleted file mode 100644
index 528606f3c8..0000000000
--- a/ext/standard/tests/reg/009.phpt
+++ /dev/null
@@ -1,17 +0,0 @@
---TEST--
-Test split()
---FILE--
-<?php
- $a=split("[[:space:]]","this is a
-test");
- echo count($a) . "\n";
- for ($i = 0; $i < count($a); $i++) {
- echo $a[$i] . "\n";
- }
-?>
---EXPECT--
-4
-this
-is
-a
-test
diff --git a/ext/standard/tests/reg/010.phpt b/ext/standard/tests/reg/010.phpt
deleted file mode 100644
index f6f8909f73..0000000000
--- a/ext/standard/tests/reg/010.phpt
+++ /dev/null
@@ -1,7 +0,0 @@
---TEST--
-Long back references
---FILE--
-<?php $a="abc122222222223";
- echo ereg_replace("1(2*)3","\\1def\\1",$a)?>
---EXPECT--
-abc2222222222def2222222222
diff --git a/ext/standard/tests/reg/011.phpt b/ext/standard/tests/reg/011.phpt
deleted file mode 100644
index 65554b302f..0000000000
--- a/ext/standard/tests/reg/011.phpt
+++ /dev/null
@@ -1,7 +0,0 @@
---TEST--
-\0 back reference
---FILE--
-<?php $a="abc123";
- echo ereg_replace("123","def\\0ghi",$a)?>
---EXPECT--
-abcdef123ghi
diff --git a/ext/standard/tests/reg/012.phpt b/ext/standard/tests/reg/012.phpt
deleted file mode 100644
index 88ad5992ad..0000000000
--- a/ext/standard/tests/reg/012.phpt
+++ /dev/null
@@ -1,7 +0,0 @@
---TEST--
-nonexisting back reference
---FILE--
-<?php $a="abc123";
- echo ereg_replace("123",'def\1ghi',$a)?>
---EXPECT--
-abcdef\1ghi
diff --git a/ext/standard/tests/reg/013.phpt b/ext/standard/tests/reg/013.phpt
deleted file mode 100644
index a2d9ee0099..0000000000
--- a/ext/standard/tests/reg/013.phpt
+++ /dev/null
@@ -1,7 +0,0 @@
---TEST--
-escapes in replace string
---FILE--
-<?php $a="abc123";
- echo ereg_replace("123","def\\g\\\\hi\\",$a)?>
---EXPECT--
-abcdef\g\\hi\
diff --git a/ext/standard/tests/reg/014.phpt b/ext/standard/tests/reg/014.phpt
deleted file mode 100644
index d2a32451a9..0000000000
--- a/ext/standard/tests/reg/014.phpt
+++ /dev/null
@@ -1,7 +0,0 @@
---TEST--
-backreferences not replaced recursively
---FILE--
-<?php $a="a\\2bxc";
- echo ereg_replace("a(.*)b(.*)c","\\1",$a)?>
---EXPECT--
-\2
diff --git a/ext/standard/tests/reg/015.phpt b/ext/standard/tests/reg/015.phpt
deleted file mode 100644
index c255ddf05b..0000000000
--- a/ext/standard/tests/reg/015.phpt
+++ /dev/null
@@ -1,6 +0,0 @@
---TEST--
-replace empty matches
---FILE--
-<?php echo ereg_replace("^","z","abc123")?>
---EXPECT--
-zabc123
diff --git a/ext/standard/tests/reg/016.phpt b/ext/standard/tests/reg/016.phpt
deleted file mode 100644
index c354ab26fc..0000000000
--- a/ext/standard/tests/reg/016.phpt
+++ /dev/null
@@ -1,6 +0,0 @@
---TEST--
-test backslash handling in regular expressions
---FILE--
-<?php echo ereg_replace('\?',"abc","?123?")?>
---EXPECT--
-abc123abc
diff --git a/ext/standard/tests/serialize/001.phpt b/ext/standard/tests/serialize/001.phpt
deleted file mode 100644
index 21a2d6c534..0000000000
--- a/ext/standard/tests/serialize/001.phpt
+++ /dev/null
@@ -1,120 +0,0 @@
---TEST--
-serialize()/unserialize()/var_dump()
---FILE--
-<?php
-class t
-{
- function t()
- {
- $this->a = "hallo";
- }
-}
-
-class s
-{
- public $a;
- public $b;
- public $c;
-
- function s()
- {
- $this->a = "hallo";
- $this->b = "php";
- $this->c = "world";
- $this->d = "!";
- }
-
- function __sleep()
- {
- echo "__sleep called\n";
- return array("a","c");
- }
-
- function __wakeup()
- {
- echo "__wakeup called\n";
- }
-}
-
-
-echo serialize(NULL)."\n";
-echo serialize((bool) true)."\n";
-echo serialize((bool) false)."\n";
-echo serialize(1)."\n";
-echo serialize(0)."\n";
-echo serialize(-1)."\n";
-echo serialize(2147483647)."\n";
-echo serialize(-2147483647)."\n";
-echo serialize(1.123456789)."\n";
-echo serialize(1.0)."\n";
-echo serialize(0.0)."\n";
-echo serialize(-1.0)."\n";
-echo serialize(-1.123456789)."\n";
-echo serialize("hallo")."\n";
-echo serialize(array(1,1.1,"hallo",NULL,true,array()))."\n";
-
-$t = new t();
-$data = serialize($t);
-echo "$data\n";
-$t = unserialize($data);
-var_dump($t);
-
-$t = new s();
-$data = serialize($t);
-echo "$data\n";
-$t = unserialize($data);
-var_dump($t);
-
-$a = array("a" => "test");
-$a[ "b" ] = &$a[ "a" ];
-var_dump($a);
-$data = serialize($a);
-echo "$data\n";
-$a = unserialize($data);
-var_dump($a);
-?>
---EXPECTF--
-N;
-b:1;
-b:0;
-i:1;
-i:0;
-i:-1;
-i:2147483647;
-i:-2147483647;
-d:1.123456789000000011213842299184761941432952880859375;
-d:1;
-d:0;
-d:-1;
-d:-1.123456789000000011213842299184761941432952880859375;
-s:5:"hallo";
-a:6:{i:0;i:1;i:1;d:1.100000000000000088817841970012523233890533447265625;i:2;s:5:"hallo";i:3;N;i:4;b:1;i:5;a:0:{}}
-O:1:"t":1:{s:1:"a";s:5:"hallo";}
-object(t)#%d (1) {
- ["a"]=>
- string(5) "hallo"
-}
-__sleep called
-O:1:"s":2:{s:1:"a";s:5:"hallo";s:1:"c";s:5:"world";}
-__wakeup called
-object(s)#%d (3) {
- ["a"]=>
- string(5) "hallo"
- ["b"]=>
- NULL
- ["c"]=>
- string(5) "world"
-}
-array(2) {
- ["a"]=>
- &string(4) "test"
- ["b"]=>
- &string(4) "test"
-}
-a:2:{s:1:"a";s:4:"test";s:1:"b";R:2;}
-array(2) {
- ["a"]=>
- &string(4) "test"
- ["b"]=>
- &string(4) "test"
-}
diff --git a/ext/standard/tests/serialize/003.phpt b/ext/standard/tests/serialize/003.phpt
deleted file mode 100644
index 173f57b72c..0000000000
--- a/ext/standard/tests/serialize/003.phpt
+++ /dev/null
@@ -1,25 +0,0 @@
---TEST--
-unserialize() floats with E notation (#18654)
---INI--
-precision=12
-serialize_precision=100
---FILE--
-<?php
-foreach(array(1e2, 5.2e25, 85.29e-23, 9e-9) AS $value) {
- echo ($ser = serialize($value))."\n";
- var_dump(unserialize($ser));
- echo "\n";
-}
-?>
---EXPECTREGEX--
-d:100;
-float\(100\)
-
-d:5\.2E\+25;
-float\(5\.2E\+25\)
-
-d:8\.52[89][0-9]+E-22;
-float\(8\.529E-22\)
-
-d:9\.[0-9]*E-9;
-float\(9\.0E-9\)
diff --git a/ext/standard/tests/serialize/004.phpt b/ext/standard/tests/serialize/004.phpt
deleted file mode 100644
index a4a7c68d6f..0000000000
--- a/ext/standard/tests/serialize/004.phpt
+++ /dev/null
@@ -1,33 +0,0 @@
---TEST--
-serialize()/unserialize() floats in array.
---INI--
-precision=12
-serialize_precision=100
---FILE--
-<?php
-error_reporting (E_ALL);
-$a = array(4);
-$str = serialize($a);
-print('Serialized array: '.$str."\n");
-$b = unserialize($str);
-print('Unserialized array: ');
-var_dump($b);
-print("\n");
-$str = serialize(array(4.5));
-print('Serialized array: '.$str."\n");
-$b = unserialize($str);
-print('Unserialized array: ') ;
-var_dump($b);
-?>
---EXPECT--
-Serialized array: a:1:{i:0;i:4;}
-Unserialized array: array(1) {
- [0]=>
- int(4)
-}
-
-Serialized array: a:1:{i:0;d:4.5;}
-Unserialized array: array(1) {
- [0]=>
- float(4.5)
-}
diff --git a/ext/standard/tests/serialize/bug14293.phpt b/ext/standard/tests/serialize/bug14293.phpt
deleted file mode 100644
index 3fca7e406e..0000000000
--- a/ext/standard/tests/serialize/bug14293.phpt
+++ /dev/null
@@ -1,36 +0,0 @@
---TEST--
-Bug #14293 (serialize() and __sleep())
---FILE--
-<?php
-class t
-{
- function t()
- {
- $this->a = 'hello';
- }
-
- function __sleep()
- {
- echo "__sleep called\n";
- return array('a','b');
- }
-}
-
-$t = new t();
-$data = serialize($t);
-echo "$data\n";
-$t = unserialize($data);
-var_dump($t);
-
-?>
---EXPECTF--
-__sleep called
-
-Notice: serialize(): "b" returned as member variable from __sleep() but does not exist in %sbug14293.php on line %d
-O:1:"t":2:{s:1:"a";s:5:"hello";s:1:"b";N;}
-object(t)#%d (2) {
- ["a"]=>
- string(5) "hello"
- ["b"]=>
- NULL
-}
diff --git a/ext/standard/tests/serialize/bug21957.phpt b/ext/standard/tests/serialize/bug21957.phpt
deleted file mode 100644
index 29eeb2ee6c..0000000000
--- a/ext/standard/tests/serialize/bug21957.phpt
+++ /dev/null
@@ -1,49 +0,0 @@
---TEST--
-Bug #21957 (serialize() mangles objects with __sleep)
---FILE--
-<?php
-class test
-{
- public $a, $b;
-
- function test()
- {
- $this->a = 7;
- $this->b = 2;
- }
-
- function __sleep()
- {
- $this->b = 0;
- }
-}
-
-$t['one'] = 'ABC';
-$t['two'] = new test();
-
-var_dump($t);
-
-$s = @serialize($t);
-echo $s . "\n";
-
-var_dump(unserialize($s));
-?>
---EXPECT--
-array(2) {
- ["one"]=>
- string(3) "ABC"
- ["two"]=>
- object(test)#1 (2) {
- ["a"]=>
- int(7)
- ["b"]=>
- int(2)
- }
-}
-a:2:{s:3:"one";s:3:"ABC";s:3:"two";N;}
-array(2) {
- ["one"]=>
- string(3) "ABC"
- ["two"]=>
- NULL
-}
diff --git a/ext/standard/tests/serialize/bug23298.phpt b/ext/standard/tests/serialize/bug23298.phpt
deleted file mode 100644
index a5305cf37c..0000000000
--- a/ext/standard/tests/serialize/bug23298.phpt
+++ /dev/null
@@ -1,13 +0,0 @@
---TEST--
-Bug #23298 (serialize() and floats/doubles)
---INI--
-serialize_precision=100
---FILE--
-<?php
- ini_set('precision', 12);
- $foo = 1.428571428571428647642857142;
- $bar = unserialize(serialize($foo));
- var_dump(($foo === $bar));
-?>
---EXPECT--
-bool(true)
diff --git a/ext/standard/tests/serialize/bug24063.phpt b/ext/standard/tests/serialize/bug24063.phpt
deleted file mode 100644
index e1cdfecf55..0000000000
--- a/ext/standard/tests/serialize/bug24063.phpt
+++ /dev/null
@@ -1,23 +0,0 @@
---TEST--
-Bug #24063 (serialize() missing 0 after the . on scientific notation)
---INI--
-serialize_precision=100
-precision=12
---FILE--
-<?php
-$v = 1;
-for ($i = 1; $i < 10; $i++) {
- $v /= 10;
- echo "{$v} ".unserialize(serialize($v))."\n";
-}
-?>
---EXPECT--
-0.1 0.1
-0.01 0.01
-0.001 0.001
-0.0001 0.0001
-1E-05 1E-05
-1E-06 1E-06
-1E-07 1E-07
-1E-08 1E-08
-1E-09 1E-09
diff --git a/ext/standard/tests/serialize/bug25378.phpt b/ext/standard/tests/serialize/bug25378.phpt
deleted file mode 100644
index e865b96e99..0000000000
--- a/ext/standard/tests/serialize/bug25378.phpt
+++ /dev/null
@@ -1,59 +0,0 @@
---TEST--
-Bug #25378 (unserialize() crashes with invalid data)
---FILE--
-<?php
-var_dump(unserialize("s:-1:\"\";"));
-var_dump(unserialize("i:823"));
-var_dump(unserialize("O:8:\"stdClass :0:{}"));
-var_dump(unserialize("O:8:\"stdClass\"+0:{}"));
-var_dump(unserialize("O:1000:\"stdClass\":0:{}"));
-var_dump(unserialize("a:2:{i:0;s:2:\"12\":"));
-var_dump(unserialize("a:2:{i:0;s:2:\"12\";i:1;s:3000:\"123"));
-var_dump(unserialize("a:2:{i:0;s:2:\"12\"+i:1;s:3:\"123\";}"));
-var_dump(unserialize("a:2:{i:0;s:2:\"12\";i:1;s:3:\"123\";"));
-var_dump(unserialize("s:3000:\"123\";"));
-var_dump(unserialize("s:3000:\"123"));
-var_dump(unserialize("s:3:\"123;"));
-var_dump(unserialize("s:0:\"123\";"));
-?>
-===DONE===
---EXPECTF--
-Notice: unserialize(): Error at offset 0 of 8 bytes in %sbug25378.php on line %d
-bool(false)
-
-Notice: unserialize(): Error at offset 0 of 5 bytes in %sbug25378.php on line %d
-bool(false)
-
-Notice: unserialize(): Error at offset 13 of 19 bytes in %sbug25378.php on line %d
-bool(false)
-
-Notice: unserialize(): Error at offset 14 of 19 bytes in %sbug25378.php on line %d
-bool(false)
-
-Notice: unserialize(): Error at offset 2 of 22 bytes in %sbug25378.php on line %d
-bool(false)
-
-Notice: unserialize(): Error at offset 17 of 18 bytes in %sbug25378.php on line %d
-bool(false)
-
-Notice: unserialize(): Error at offset 24 of 33 bytes in %sbug25378.php on line %d
-bool(false)
-
-Notice: unserialize(): Error at offset 17 of 33 bytes in %sbug25378.php on line %d
-bool(false)
-
-Notice: unserialize(): Error at offset 33 of 32 bytes in %sbug25378.php on line %d
-bool(false)
-
-Notice: unserialize(): Error at offset 2 of 13 bytes in %sbug25378.php on line %d
-bool(false)
-
-Notice: unserialize(): Error at offset 2 of 11 bytes in %sbug25378.php on line %d
-bool(false)
-
-Notice: unserialize(): Error at offset 8 of 9 bytes in %sbug25378.php on line %d
-bool(false)
-
-Notice: unserialize(): Error at offset 5 of 10 bytes in %sbug25378.php on line %d
-bool(false)
-===DONE===
diff --git a/ext/standard/tests/serialize/bug26762.phpt b/ext/standard/tests/serialize/bug26762.phpt
deleted file mode 100755
index 3011bb602c..0000000000
--- a/ext/standard/tests/serialize/bug26762.phpt
+++ /dev/null
@@ -1,27 +0,0 @@
---TEST--
-Bug #26762 (unserialize() produces lowercase classnames)
---SKIPIF--
-<?php
- if (version_compare(zend_version(), '2.0.0-dev', '<')) die('skip ZendEngine 2 needed');
- if (class_exists('autoload_root')) die('skip Autoload test classes exist already');
-?>
---FILE--
-<?php
-
-ini_set('unserialize_callback_func','check');
-
-function check($name) {
- var_dump($name);
- throw new exception;
-}
-
-try {
- @unserialize('O:3:"FOO":0:{}');
-}
-catch (Exception $e) {
- /* ignore */
-}
-
-?>
---EXPECTF--
-string(3) "FOO"
diff --git a/ext/standard/tests/serialize/bug27469.phpt b/ext/standard/tests/serialize/bug27469.phpt
deleted file mode 100644
index e8d14106a8..0000000000
--- a/ext/standard/tests/serialize/bug27469.phpt
+++ /dev/null
@@ -1,27 +0,0 @@
---TEST--
-Bug #27469 (serialize() objects of incomplete class)
---FILE--
-<?php
-$str = 'O:9:"TestClass":0:{}';
-$obj = unserialize($str);
-var_dump($obj);
-echo serialize($obj)."\n";
-var_dump($obj);
-echo serialize($obj)."\n";
-var_dump($obj);
-?>
---EXPECT--
-object(__PHP_Incomplete_Class)#1 (1) {
- ["__PHP_Incomplete_Class_Name"]=>
- string(9) "TestClass"
-}
-O:9:"TestClass":0:{}
-object(__PHP_Incomplete_Class)#1 (1) {
- ["__PHP_Incomplete_Class_Name"]=>
- string(9) "TestClass"
-}
-O:9:"TestClass":0:{}
-object(__PHP_Incomplete_Class)#1 (1) {
- ["__PHP_Incomplete_Class_Name"]=>
- string(9) "TestClass"
-}
diff --git a/ext/standard/tests/serialize/bug28325.phpt b/ext/standard/tests/serialize/bug28325.phpt
deleted file mode 100644
index 7f2bd66371..0000000000
--- a/ext/standard/tests/serialize/bug28325.phpt
+++ /dev/null
@@ -1,39 +0,0 @@
---TEST--
-Bug #28325 (Problem in serialisation of circular references)
---FILE--
-<?php
-class a {
- public $b;
-}
-class b {
- public $c;
-}
-class c {
- public $d;
-}
-$a = new a();
-$a->b = new b();
-$a->b->c = new c();
-$a->b->c->d = $a;
-var_dump(unserialize(serialize($a)));
-?>
---EXPECTF--
-object(a)#%d (1) {
- ["b"]=>
- object(b)#%d (1) {
- ["c"]=>
- object(c)#%d (1) {
- ["d"]=>
- object(a)#%d (1) {
- ["b"]=>
- object(b)#%d (1) {
- ["c"]=>
- object(c)#%d (1) {
- ["d"]=>
- *RECURSION*
- }
- }
- }
- }
- }
-}
diff --git a/ext/standard/tests/strings/004.phpt b/ext/standard/tests/strings/004.phpt
deleted file mode 100644
index b9904c614a..0000000000
--- a/ext/standard/tests/strings/004.phpt
+++ /dev/null
@@ -1,84 +0,0 @@
---TEST--
-Testing randomization of shuffle() and str_shuffle().
---FILE--
-<?php
-function stats($f, $a) {
- $times = 90000;
- print "$f\n";
- ksort($a);
- foreach($a as $k => $v)
- print "$k: $v: " . sprintf('%0.3f', $v / $times) . "\n";
-}
-$a = array();
-$times = 90000;
-for ($i = 0; $i < $times; $i++) {
- $p = range(1,4);
- shuffle($p);
- $s = join('', $p);
- if (empty($a[$s])) $a[$s] = 0;
- $a[$s]++;
-}
-
-stats('shuffle', $a);
-$a = array();
-$times = 90000;
-for ($i = 0; $i < $times; $i++) {
- $p = '1234';
- $s = str_shuffle($p);
- if (empty($a[$s])) $a[$s] = 0;
- $a[$s]++;
-}
-
-stats('str_shuffle', $a);
-?>
---EXPECTREGEX--
-shuffle
-1234: 3[0-9][0-9][0-9]: 0.0[3-4][0-9]
-1243: 3[0-9][0-9][0-9]: 0.0[3-4][0-9]
-1324: 3[0-9][0-9][0-9]: 0.0[3-4][0-9]
-1342: 3[0-9][0-9][0-9]: 0.0[3-4][0-9]
-1423: 3[0-9][0-9][0-9]: 0.0[3-4][0-9]
-1432: 3[0-9][0-9][0-9]: 0.0[3-4][0-9]
-2134: 3[0-9][0-9][0-9]: 0.0[3-4][0-9]
-2143: 3[0-9][0-9][0-9]: 0.0[3-4][0-9]
-2314: 3[0-9][0-9][0-9]: 0.0[3-4][0-9]
-2341: 3[0-9][0-9][0-9]: 0.0[3-4][0-9]
-2413: 3[0-9][0-9][0-9]: 0.0[3-4][0-9]
-2431: 3[0-9][0-9][0-9]: 0.0[3-4][0-9]
-3124: 3[0-9][0-9][0-9]: 0.0[3-4][0-9]
-3142: 3[0-9][0-9][0-9]: 0.0[3-4][0-9]
-3214: 3[0-9][0-9][0-9]: 0.0[3-4][0-9]
-3241: 3[0-9][0-9][0-9]: 0.0[3-4][0-9]
-3412: 3[0-9][0-9][0-9]: 0.0[3-4][0-9]
-3421: 3[0-9][0-9][0-9]: 0.0[3-4][0-9]
-4123: 3[0-9][0-9][0-9]: 0.0[3-4][0-9]
-4132: 3[0-9][0-9][0-9]: 0.0[3-4][0-9]
-4213: 3[0-9][0-9][0-9]: 0.0[3-4][0-9]
-4231: 3[0-9][0-9][0-9]: 0.0[3-4][0-9]
-4312: 3[0-9][0-9][0-9]: 0.0[3-4][0-9]
-4321: 3[0-9][0-9][0-9]: 0.0[3-4][0-9]
-str_shuffle
-1234: 3[0-9][0-9][0-9]: 0.0[3-4][0-9]
-1243: 3[0-9][0-9][0-9]: 0.0[3-4][0-9]
-1324: 3[0-9][0-9][0-9]: 0.0[3-4][0-9]
-1342: 3[0-9][0-9][0-9]: 0.0[3-4][0-9]
-1423: 3[0-9][0-9][0-9]: 0.0[3-4][0-9]
-1432: 3[0-9][0-9][0-9]: 0.0[3-4][0-9]
-2134: 3[0-9][0-9][0-9]: 0.0[3-4][0-9]
-2143: 3[0-9][0-9][0-9]: 0.0[3-4][0-9]
-2314: 3[0-9][0-9][0-9]: 0.0[3-4][0-9]
-2341: 3[0-9][0-9][0-9]: 0.0[3-4][0-9]
-2413: 3[0-9][0-9][0-9]: 0.0[3-4][0-9]
-2431: 3[0-9][0-9][0-9]: 0.0[3-4][0-9]
-3124: 3[0-9][0-9][0-9]: 0.0[3-4][0-9]
-3142: 3[0-9][0-9][0-9]: 0.0[3-4][0-9]
-3214: 3[0-9][0-9][0-9]: 0.0[3-4][0-9]
-3241: 3[0-9][0-9][0-9]: 0.0[3-4][0-9]
-3412: 3[0-9][0-9][0-9]: 0.0[3-4][0-9]
-3421: 3[0-9][0-9][0-9]: 0.0[3-4][0-9]
-4123: 3[0-9][0-9][0-9]: 0.0[3-4][0-9]
-4132: 3[0-9][0-9][0-9]: 0.0[3-4][0-9]
-4213: 3[0-9][0-9][0-9]: 0.0[3-4][0-9]
-4231: 3[0-9][0-9][0-9]: 0.0[3-4][0-9]
-4312: 3[0-9][0-9][0-9]: 0.0[3-4][0-9]
-4321: 3[0-9][0-9][0-9]: 0.0[3-4][0-9]
diff --git a/ext/standard/tests/strings/add-and-stripcslashes.phpt b/ext/standard/tests/strings/add-and-stripcslashes.phpt
deleted file mode 100644
index 7c7e36edc5..0000000000
--- a/ext/standard/tests/strings/add-and-stripcslashes.phpt
+++ /dev/null
@@ -1,26 +0,0 @@
---TEST--
-addcslashes() and stripcslashes() function
---FILE--
-<?php
-echo addcslashes("", "")."\n";
-echo addcslashes("", "burp")."\n";
-echo addcslashes("kaboemkara!", "")."\n";
-echo addcslashes("foobarbaz", 'bar')."\n";
-echo addcslashes('foo[ ]', 'A..z')."\n";
-echo @addcslashes("zoo['.']", 'z..A')."\n";
-echo addcslashes('abcdefghijklmnopqrstuvwxyz', "a\145..\160z")."\n";
-echo "\n\r" == stripcslashes('\n\r'),"\n";
-echo stripcslashes('\065\x64')."\n";
-echo stripcslashes('')."\n";
-?>
---EXPECT--
-
-
-kaboemkara!
-foo\b\a\r\b\az
-\f\o\o\[ \]
-\zoo['\.']
-\abcd\e\f\g\h\i\j\k\l\m\n\o\pqrstuvwxy\z
-1
-5d
-
diff --git a/ext/standard/tests/strings/add-and-stripslashes.phpt b/ext/standard/tests/strings/add-and-stripslashes.phpt
deleted file mode 100644
index a5eab410b9..0000000000
--- a/ext/standard/tests/strings/add-and-stripslashes.phpt
+++ /dev/null
@@ -1,30 +0,0 @@
---TEST--
-addslashes() and stripslashes() functions, normal and sybase-style
---FILE--
-<?php
-
-$input = '';
-for($i=0; $i<512; $i++) {
- $input .= chr($i%256);
-}
-
-echo "Normal: ";
-ini_set('magic_quotes_sybase', 0);
-if($input === stripslashes(addslashes($input))) {
- echo "OK\n";
-} else {
- echo "FAILED\n";
-}
-
-echo "Sybase: ";
-ini_set('magic_quotes_sybase', 1);
-if($input === stripslashes(addslashes($input))) {
- echo "OK\n";
-} else {
- echo "FAILED\n";
-}
-
-?>
---EXPECT--
-Normal: OK
-Sybase: OK
diff --git a/ext/standard/tests/strings/basename.phpt b/ext/standard/tests/strings/basename.phpt
deleted file mode 100644
index a39a6f9aeb..0000000000
--- a/ext/standard/tests/strings/basename.phpt
+++ /dev/null
Binary files differ
diff --git a/ext/standard/tests/strings/bin2hex.phpt b/ext/standard/tests/strings/bin2hex.phpt
deleted file mode 100644
index 42a4f4c594..0000000000
--- a/ext/standard/tests/strings/bin2hex.phpt
+++ /dev/null
@@ -1,14 +0,0 @@
---TEST--
-bin2hex() function
---FILE--
-<?php
-$s = '';
-for($i=0; $i<256; $i++) {
- $s .= chr($i);
-}
-echo bin2hex($s)."\n";
-echo bin2hex("abc")."\n";
-?>
---EXPECT--
-000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff
-616263
diff --git a/ext/standard/tests/strings/bug20108.phpt b/ext/standard/tests/strings/bug20108.phpt
deleted file mode 100644
index 6e2219d990..0000000000
--- a/ext/standard/tests/strings/bug20108.phpt
+++ /dev/null
@@ -1,11 +0,0 @@
---TEST--
-Bug #20108 (Segfault on printf statement)
---FILE--
-<?php
- $a = "boo";
- $z = sprintf("%580.58s\n", $a);
- var_dump($z);
-?>
---EXPECT--
-string(581) " boo
-"
diff --git a/ext/standard/tests/strings/bug20169.phpt b/ext/standard/tests/strings/bug20169.phpt
deleted file mode 100644
index c606578677..0000000000
--- a/ext/standard/tests/strings/bug20169.phpt
+++ /dev/null
@@ -1,14 +0,0 @@
---TEST--
-Bug #20169 (implode() clobbers first argument)
---FILE--
-<?php
- @set_time_limit(5);
- $delimiter = "|";
-
- echo "delimiter: $delimiter\n";
- implode($delimiter, array("foo", "bar"));
- echo "delimiter: $delimiter\n";
-?>
---EXPECT--
-delimiter: |
-delimiter: |
diff --git a/ext/standard/tests/strings/bug20261.phpt b/ext/standard/tests/strings/bug20261.phpt
deleted file mode 100644
index 163e905a4a..0000000000
--- a/ext/standard/tests/strings/bug20261.phpt
+++ /dev/null
@@ -1,26 +0,0 @@
---TEST--
-Bug #20261 (str_rot13() changes too much)
---FILE--
-<?php
- $first = "boo";
- $second = $first;
- $rot = "";
-
- echo "1: ".$first."\n";
- echo "2: ".$second."\n";
- echo "3: ".$rot."\n";
-
- $rot = str_rot13($second);
-
- echo "1: ".$first."\n";
- echo "2: ".$second."\n";
- echo "3: ".$rot."\n";
-?>
---EXPECT--
-1: boo
-2: boo
-3:
-1: boo
-2: boo
-3: obb
-
diff --git a/ext/standard/tests/strings/bug20927.phpt b/ext/standard/tests/strings/bug20927.phpt
deleted file mode 100644
index 7575f2af02..0000000000
--- a/ext/standard/tests/strings/bug20927.phpt
+++ /dev/null
@@ -1,17 +0,0 @@
---TEST--
-Bug #20927 (Segfault on wordwrap statement)
---FILE--
-<?php
-$string = str_repeat("1234567890 X ", 10);
-$break = str_repeat("a-very-long-break-string-to-clobber-the-heap", 8);
-$linelength = 10;
-
-echo "Length of original string: ".strlen($string)."\n";
-echo "Length of break string: ".strlen($break)."\n";
-
-var_dump(wordwrap($string, $linelength, $break, 1));
-?>
---EXPECT--
-Length of original string: 130
-Length of break string: 352
-string(6799) "1234567890a-very-long-break-string-to-clobber-the-heapa-very-long-break-string-to-clobber-the-heapa-very-long-break-string-to-clobber-the-heapa-very-long-break-string-to-clobber-the-heapa-very-long-break-string-to-clobber-the-heapa-very-long-break-string-to-clobber-the-heapa-very-long-break-string-to-clobber-the-heapa-very-long-break-string-to-clobber-the-heapXa-very-long-break-string-to-clobber-the-heapa-very-long-break-string-to-clobber-the-heapa-very-long-break-string-to-clobber-the-heapa-very-long-break-string-to-clobber-the-heapa-very-long-break-string-to-clobber-the-heapa-very-long-break-string-to-clobber-the-heapa-very-long-break-string-to-clobber-the-heapa-very-long-break-string-to-clobber-the-heap1234567890a-very-long-break-string-to-clobber-the-heapa-very-long-break-string-to-clobber-the-heapa-very-long-break-string-to-clobber-the-heapa-very-long-break-string-to-clobber-the-heapa-very-long-break-string-to-clobber-the-heapa-very-long-break-string-to-clobber-the-heapa-very-long-break-string-to-clobber-the-heapa-very-long-break-string-to-clobber-the-heapXa-very-long-break-string-to-clobber-the-heapa-very-long-break-string-to-clobber-the-heapa-very-long-break-string-to-clobber-the-heapa-very-long-break-string-to-clobber-the-heapa-very-long-break-string-to-clobber-the-heapa-very-long-break-string-to-clobber-the-heapa-very-long-break-string-to-clobber-the-heapa-very-long-break-string-to-clobber-the-heap1234567890a-very-long-break-string-to-clobber-the-heapa-very-long-break-string-to-clobber-the-heapa-very-long-break-string-to-clobber-the-heapa-very-long-break-string-to-clobber-the-heapa-very-long-break-string-to-clobber-the-heapa-very-long-break-string-to-clobber-the-heapa-very-long-break-string-to-clobber-the-heapa-very-long-break-string-to-clobber-the-heapXa-very-long-break-string-to-clobber-the-heapa-very-long-break-string-to-clobber-the-heapa-very-long-break-string-to-clobber-the-heapa-very-long-break-string-to-clobber-the-heapa-very-long-break-string-to-clobber-the-heapa-very-long-break-string-to-clobber-the-heapa-very-long-break-string-to-clobber-the-heapa-very-long-break-string-to-clobber-the-heap1234567890a-very-long-break-string-to-clobber-the-heapa-very-long-break-string-to-clobber-the-heapa-very-long-break-string-to-clobber-the-heapa-very-long-break-string-to-clobber-the-heapa-very-long-break-string-to-clobber-the-heapa-very-long-break-string-to-clobber-the-heapa-very-long-break-string-to-clobber-the-heapa-very-long-break-string-to-clobber-the-heapXa-very-long-break-string-to-clobber-the-heapa-very-long-break-string-to-clobber-the-heapa-very-long-break-string-to-clobber-the-heapa-very-long-break-string-to-clobber-the-heapa-very-long-break-string-to-clobber-the-heapa-very-long-break-string-to-clobber-the-heapa-very-long-break-string-to-clobber-the-heapa-very-long-break-string-to-clobber-the-heap1234567890a-very-long-break-string-to-clobber-the-heapa-very-long-break-string-to-clobber-the-heapa-very-long-break-string-to-clobber-the-heapa-very-long-break-string-to-clobber-the-heapa-very-long-break-string-to-clobber-the-heapa-very-long-break-string-to-clobber-the-heapa-very-long-break-string-to-clobber-the-heapa-very-long-break-string-to-clobber-the-heapXa-very-long-break-string-to-clobber-the-heapa-very-long-break-string-to-clobber-the-heapa-very-long-break-string-to-clobber-the-heapa-very-long-break-string-to-clobber-the-heapa-very-long-break-string-to-clobber-the-heapa-very-long-break-string-to-clobber-the-heapa-very-long-break-string-to-clobber-the-heapa-very-long-break-string-to-clobber-the-heap1234567890a-very-long-break-string-to-clobber-the-heapa-very-long-break-string-to-clobber-the-heapa-very-long-break-string-to-clobber-the-heapa-very-long-break-string-to-clobber-the-heapa-very-long-break-string-to-clobber-the-heapa-very-long-break-string-to-clobber-the-heapa-very-long-break-string-to-clobber-the-heapa-very-long-break-string-to-clobber-the-heapXa-very-long-break-string-to-clobber-the-heapa-very-long-break-string-to-clobber-the-heapa-very-long-break-string-to-clobber-the-heapa-very-long-break-string-to-clobber-the-heapa-very-long-break-string-to-clobber-the-heapa-very-long-break-string-to-clobber-the-heapa-very-long-break-string-to-clobber-the-heapa-very-long-break-string-to-clobber-the-heap1234567890a-very-long-break-string-to-clobber-the-heapa-very-long-break-string-to-clobber-the-heapa-very-long-break-string-to-clobber-the-heapa-very-long-break-string-to-clobber-the-heapa-very-long-break-string-to-clobber-the-heapa-very-long-break-string-to-clobber-the-heapa-very-long-break-string-to-clobber-the-heapa-very-long-break-string-to-clobber-the-heapXa-very-long-break-string-to-clobber-the-heapa-very-long-break-string-to-clobber-the-heapa-very-long-break-string-to-clobber-the-heapa-very-long-break-string-to-clobber-the-heapa-very-long-break-string-to-clobber-the-heapa-very-long-break-string-to-clobber-the-heapa-very-long-break-string-to-clobber-the-heapa-very-long-break-string-to-clobber-the-heap1234567890a-very-long-break-string-to-clobber-the-heapa-very-long-break-string-to-clobber-the-heapa-very-long-break-string-to-clobber-the-heapa-very-long-break-string-to-clobber-the-heapa-very-long-break-string-to-clobber-the-heapa-very-long-break-string-to-clobber-the-heapa-very-long-break-string-to-clobber-the-heapa-very-long-break-string-to-clobber-the-heapXa-very-long-break-string-to-clobber-the-heapa-very-long-break-string-to-clobber-the-heapa-very-long-break-string-to-clobber-the-heapa-very-long-break-string-to-clobber-the-heapa-very-long-break-string-to-clobber-the-heapa-very-long-break-string-to-clobber-the-heapa-very-long-break-string-to-clobber-the-heapa-very-long-break-string-to-clobber-the-heap1234567890a-very-long-break-string-to-clobber-the-heapa-very-long-break-string-to-clobber-the-heapa-very-long-break-string-to-clobber-the-heapa-very-long-break-string-to-clobber-the-heapa-very-long-break-string-to-clobber-the-heapa-very-long-break-string-to-clobber-the-heapa-very-long-break-string-to-clobber-the-heapa-very-long-break-string-to-clobber-the-heapXa-very-long-break-string-to-clobber-the-heapa-very-long-break-string-to-clobber-the-heapa-very-long-break-string-to-clobber-the-heapa-very-long-break-string-to-clobber-the-heapa-very-long-break-string-to-clobber-the-heapa-very-long-break-string-to-clobber-the-heapa-very-long-break-string-to-clobber-the-heapa-very-long-break-string-to-clobber-the-heap1234567890a-very-long-break-string-to-clobber-the-heapa-very-long-break-string-to-clobber-the-heapa-very-long-break-string-to-clobber-the-heapa-very-long-break-string-to-clobber-the-heapa-very-long-break-string-to-clobber-the-heapa-very-long-break-string-to-clobber-the-heapa-very-long-break-string-to-clobber-the-heapa-very-long-break-string-to-clobber-the-heapX "
diff --git a/ext/standard/tests/strings/bug20934.phpt b/ext/standard/tests/strings/bug20934.phpt
deleted file mode 100644
index 0d95081d54..0000000000
--- a/ext/standard/tests/strings/bug20934.phpt
+++ /dev/null
@@ -1,17 +0,0 @@
---TEST--
-Bug #20934 (htmlspecialchars returns latin1 from UTF-8)
---SKIPIF--
-<?php
-if (!function_exists("utf8_encode") || !function_exists("utf8_decode")) {
- die("SKIP Neither utf8_encode() nor utf8_decode() are available");
-}
-?>
---FILE--
-<?php
-$str = utf8_encode("\xe0\xe1");
-var_dump(utf8_decode($str));
-var_dump(utf8_decode(htmlspecialchars($str, ENT_COMPAT, "UTF-8")));
-?>
---EXPECT--
-string(2) "àá"
-string(2) "àá"
diff --git a/ext/standard/tests/strings/bug21338.phpt b/ext/standard/tests/strings/bug21338.phpt
deleted file mode 100644
index c84576563e..0000000000
--- a/ext/standard/tests/strings/bug21338.phpt
+++ /dev/null
@@ -1,10 +0,0 @@
---TEST--
-Bug #20934 (html_entity_decode() crash when "" is passed)
---FILE--
-<?php
- var_dump(html_entity_decode(NULL));
- var_dump(html_entity_decode(""));
-?>
---EXPECT--
-string(0) ""
-string(0) ""
diff --git a/ext/standard/tests/strings/bug21453.phpt b/ext/standard/tests/strings/bug21453.phpt
deleted file mode 100644
index 40d89dd1b4..0000000000
--- a/ext/standard/tests/strings/bug21453.phpt
+++ /dev/null
@@ -1,18 +0,0 @@
---TEST--
-Bug #21453 (handling of non-encoded <)
---FILE--
-<?php
-$test = "
-<table>
- <tr><td>first cell before < first cell after</td></tr>
- <tr><td>second cell before < second cell after</td></tr>
-</table>";
-
- var_dump(strip_tags($test));
-?>
---EXPECT--
-string(80) "
-
- first cell before < first cell after
- second cell before < second cell after
-"
diff --git a/ext/standard/tests/strings/bug21730.phpt b/ext/standard/tests/strings/bug21730.phpt
deleted file mode 100644
index 8d40e204ce..0000000000
--- a/ext/standard/tests/strings/bug21730.phpt
+++ /dev/null
@@ -1,35 +0,0 @@
---TEST--
-Bug #21730 (*scanf "%n" conversion flag gives string instead of integer)
---FILE--
-<?php
-$foo = "ABC = DEF";
-$fmt = "%s = %s %n";
-$res_a = array();
-
-/* $res_a[2] is supposed to be a integer value that
- * represents the number of characters consumed so far
- */
-sscanf($foo, $fmt, $res_a[0], $res_a[1], $res_a[2]);
-
-$res_b = sscanf($foo, $fmt);
-
-var_dump($res_a);
-var_dump($res_b);
-?>
---EXPECT--
-array(3) {
- [0]=>
- string(3) "ABC"
- [1]=>
- string(3) "DEF"
- [2]=>
- int(9)
-}
-array(3) {
- [0]=>
- string(3) "ABC"
- [1]=>
- string(3) "DEF"
- [2]=>
- int(9)
-}
diff --git a/ext/standard/tests/strings/bug21744.phpt b/ext/standard/tests/strings/bug21744.phpt
deleted file mode 100644
index 925dac3fa0..0000000000
--- a/ext/standard/tests/strings/bug21744.phpt
+++ /dev/null
@@ -1,15 +0,0 @@
---TEST--
-Bug #21744 (strip_tags misses exclamation marks in alt text)
---FILE--
-<?php
-$test = <<< HERE
-<a href="test?test\\!!!test">test</a>
-<!-- test -->
-HERE;
-
-print strip_tags($test, '');
-print strip_tags($test, '<a>');
-?>
---EXPECT--
-test
-<a href="test?test\!!!test">test</a>
diff --git a/ext/standard/tests/strings/bug22008.phpt b/ext/standard/tests/strings/bug22008.phpt
deleted file mode 100644
index 0965337e64..0000000000
--- a/ext/standard/tests/strings/bug22008.phpt
+++ /dev/null
@@ -1,24 +0,0 @@
---TEST--
-Bug #22008 (strip_tags() eliminates too much)
---FILE--
-<?php
-$html = <<< HERE
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html>
-<head>
-<title>test</title>
-</head>
-<body>
-<b>PHP!</b>
-</body>
-</html>
-
-HERE;
-
-echo trim(strip_tags($html, '<b>'))."\n";
-?>
---EXPECT--
-test
-
-
-<b>PHP!</b>
diff --git a/ext/standard/tests/strings/bug22187.phpt b/ext/standard/tests/strings/bug22187.phpt
deleted file mode 100644
index dccaccc04d..0000000000
--- a/ext/standard/tests/strings/bug22187.phpt
+++ /dev/null
@@ -1,10 +0,0 @@
---TEST--
-Bug #22187 (possible crash in number_format() function)
---FILE--
-<?php
- var_dump(number_format(0.0001, 1));
- var_dump(number_format(0.0001, 0));
-?>
---EXPECT--
-string(3) "0.0"
-string(1) "0"
diff --git a/ext/standard/tests/strings/bug22207.phpt b/ext/standard/tests/strings/bug22207.phpt
deleted file mode 100644
index 688bb5b744..0000000000
--- a/ext/standard/tests/strings/bug22207.phpt
+++ /dev/null
@@ -1,11 +0,0 @@
---TEST--
-Bug #22207 (missing 0 when using the e notation in *printf functions)
---FILE--
-<?php
- printf("%10.5e\n", 1.1);
- var_dump(sprintf("%10.5e\n", 1.1));
-?>
---EXPECT--
-1.1000e+0
-string(11) " 1.1000e+0
-"
diff --git a/ext/standard/tests/strings/bug22224.phpt b/ext/standard/tests/strings/bug22224.phpt
deleted file mode 100644
index d64fc0acfc..0000000000
--- a/ext/standard/tests/strings/bug22224.phpt
+++ /dev/null
@@ -1,26 +0,0 @@
---TEST--
-Bug #22224 (implode changes object references in array)
---INI--
-error_reporting=0
---FILE--
-<?php
-class foo {
-}
-
-
-$a = new foo();
-
-$arr = array(0=>&$a, 1=>&$a);
-var_dump(implode(",",$arr));
-var_dump($arr)
-?>
---EXPECTF--
-string(13) "Object,Object"
-array(2) {
- [0]=>
- &object(foo)#%d (0) {
- }
- [1]=>
- &object(foo)#%d (0) {
- }
-}
diff --git a/ext/standard/tests/strings/bug22227.phpt b/ext/standard/tests/strings/bug22227.phpt
deleted file mode 100644
index eb980f9865..0000000000
--- a/ext/standard/tests/strings/bug22227.phpt
+++ /dev/null
@@ -1,9 +0,0 @@
---TEST--
-Bug #22227 (printf() field limiters broke between 4.2.3 and 4.3.0)
---FILE--
-<?php
-printf("%-3.3s", "abcdef");
-print "\n";
-?>
---EXPECT--
-abc
diff --git a/ext/standard/tests/strings/bug22904.phpt b/ext/standard/tests/strings/bug22904.phpt
deleted file mode 100644
index 3c56e1a414..0000000000
--- a/ext/standard/tests/strings/bug22904.phpt
+++ /dev/null
@@ -1,30 +0,0 @@
---TEST--
-Bug #22904 (magic mode failed for cybase with '\0')
---FILE--
-not active yet
-<?php
-
-/*
-ini_set("magic_quotes_sybase","on");
-test();
-ini_set("magic_quotes_sybase","off");
-test();
-*/
-function test(){
- $buf = 'g\g"\0g'."'";
- $slashed = addslashes($buf);
- echo "$buf\n";
- echo "$slashed\n";
- echo stripslashes($slashed."\n");
-/*
-g\g"\0g'
-g\\g"\\0g''
-g\g"\0g'
-g\g"\0g'
-g\\g\"\\0g\'
-g\g"\0g'
-*/
-}
-?>
---EXPECT--
-not active yet
diff --git a/ext/standard/tests/strings/bug23650.phpt b/ext/standard/tests/strings/bug23650.phpt
deleted file mode 100644
index 01dc88843d..0000000000
--- a/ext/standard/tests/strings/bug23650.phpt
+++ /dev/null
@@ -1,31 +0,0 @@
---TEST--
-Bug #23650 (strip_tags() removes hyphens)
---FILE--
-<?php
-$str = <<< HERE
-1:<!-- abc - -->
-2:<!doctype -- >
-3:
-4:<abc - def>
-5:abc - def
-6:</abc>
-
-HERE;
-
-echo strip_tags($str);
-echo strip_tags($str, '<abc>');
-?>
---EXPECT--
-1:
-2:
-3:
-4:
-5:abc - def
-6:
-1:
-2:
-3:
-4:<abc - def>
-5:abc - def
-6:</abc>
-
diff --git a/ext/standard/tests/strings/bug23894.phpt b/ext/standard/tests/strings/bug23894.phpt
deleted file mode 100644
index 9cc0316a24..0000000000
--- a/ext/standard/tests/strings/bug23894.phpt
+++ /dev/null
@@ -1,15 +0,0 @@
---TEST--
-Bug #23894 (sprintf() decimal specifiers problem)
---FILE--
-<?php
-$a = -12.3456;
-$test = sprintf("%04d", $a);
-var_dump($test, bin2hex($test));
-$test = sprintf("% 13u", $a);
-var_dump($test, bin2hex($test));
-?>
---EXPECT--
-string(4) "-012"
-string(8) "2d303132"
-string(13) " 4294967284"
-string(26) "20202034323934393637323834"
diff --git a/ext/standard/tests/strings/bug24098.phpt b/ext/standard/tests/strings/bug24098.phpt
deleted file mode 100644
index 9ff51a420f..0000000000
--- a/ext/standard/tests/strings/bug24098.phpt
+++ /dev/null
@@ -1,17 +0,0 @@
---TEST--
-Bug #24098 (pathinfo() crash)
---SKIPIF--
-<?php if (DIRECTORY_SEPARATOR == '\\') die("skip directory separator won't match expected output"); ?>
---FILE--
-<?php
- var_dump(pathinfo("/dsds.asa"));
-?>
---EXPECT--
-array(3) {
- ["dirname"]=>
- string(1) "/"
- ["basename"]=>
- string(8) "dsds.asa"
- ["extension"]=>
- string(3) "asa"
-}
diff --git a/ext/standard/tests/strings/bug24208.phpt b/ext/standard/tests/strings/bug24208.phpt
deleted file mode 100644
index bed28d95c5..0000000000
--- a/ext/standard/tests/strings/bug24208.phpt
+++ /dev/null
@@ -1,12 +0,0 @@
---TEST--
-Bug #24208 (parse_str() is not working)
---FILE--
-<?php
-$a = $b = $c = "oops";
-parse_str("a=1&b=2&c=3");
-var_dump($a, $b, $c);
-?>
---EXPECT--
-string(1) "1"
-string(1) "2"
-string(1) "3"
diff --git a/ext/standard/tests/strings/bug24281.phpt b/ext/standard/tests/strings/bug24281.phpt
deleted file mode 100644
index 3c041d67cb..0000000000
--- a/ext/standard/tests/strings/bug24281.phpt
+++ /dev/null
@@ -1,18 +0,0 @@
---TEST--
-Bug #24281 (str_replace count not returned if variable wasn't initialized)
---SKIPIF--
-<?php
- if (version_compare(zend_version(), '2.0.0-dev', '<')) die('SKIP PHP5 functionality');
-?>
---FILE--
-<?php
-$string = "He had had to have had it";
-$newstring = str_replace("had", "foo", $string, $count);
-print "$count changes were made.\n";
-$count = "foo";
-$newstring = str_replace("had", "foo", $string, $count);
-print "$count changes were made.\n";
-?>
---EXPECT--
-3 changes were made.
-3 changes were made.
diff --git a/ext/standard/tests/strings/bug24312.phpt b/ext/standard/tests/strings/bug24312.phpt
deleted file mode 100644
index 5ec444dd58..0000000000
--- a/ext/standard/tests/strings/bug24312.phpt
+++ /dev/null
@@ -1,27 +0,0 @@
---TEST--
-Bug #24208 (base64_decode() not skipping 0xF0 - 0xFF)
---FILE--
-<?php
-$data = str_repeat("a", 100);
-for ($i = 0xF0; $i < 0xFF + 1; $i++) {
- $enc = chunk_split(base64_encode($data), 10, chr($i));
- var_dump(base64_decode($enc));
-}
-?>
---EXPECT--
-string(100) "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
-string(100) "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
-string(100) "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
-string(100) "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
-string(100) "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
-string(100) "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
-string(100) "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
-string(100) "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
-string(100) "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
-string(100) "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
-string(100) "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
-string(100) "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
-string(100) "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
-string(100) "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
-string(100) "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
-string(100) "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
diff --git a/ext/standard/tests/strings/bug25671.phpt b/ext/standard/tests/strings/bug25671.phpt
deleted file mode 100644
index ac64790704..0000000000
--- a/ext/standard/tests/strings/bug25671.phpt
+++ /dev/null
@@ -1,23 +0,0 @@
---TEST--
-Bug #25671 (subarrays not copied correctly)
---FILE--
-<?php
- $arr = array(
- "This is string one.",
- "This is string two.",
- array(
- "This is another string.",
- "This is a last string."),
- "This is a last string.");
-
- echo serialize(str_replace("string", "strung", $arr)) . "\n";
- echo serialize(str_replace("string", "strung", $arr)) . "\n";
- echo serialize(str_replace(" ", "", $arr)) . "\n";
- echo serialize(str_replace(" ", "", $arr)) . "\n";
-?>
---EXPECT--
-a:4:{i:0;s:19:"This is strung one.";i:1;s:19:"This is strung two.";i:2;a:2:{i:0;s:23:"This is another string.";i:1;s:22:"This is a last string.";}i:3;s:22:"This is a last strung.";}
-a:4:{i:0;s:19:"This is strung one.";i:1;s:19:"This is strung two.";i:2;a:2:{i:0;s:23:"This is another string.";i:1;s:22:"This is a last string.";}i:3;s:22:"This is a last strung.";}
-a:4:{i:0;s:16:"Thisisstringone.";i:1;s:16:"Thisisstringtwo.";i:2;a:2:{i:0;s:23:"This is another string.";i:1;s:22:"This is a last string.";}i:3;s:18:"Thisisalaststring.";}
-a:4:{i:0;s:16:"Thisisstringone.";i:1;s:16:"Thisisstringtwo.";i:2;a:2:{i:0;s:23:"This is another string.";i:1;s:22:"This is a last string.";}i:3;s:18:"Thisisalaststring.";}
-
diff --git a/ext/standard/tests/strings/bug25707.phpt b/ext/standard/tests/strings/bug25707.phpt
deleted file mode 100644
index 4954fb1ae5..0000000000
--- a/ext/standard/tests/strings/bug25707.phpt
+++ /dev/null
@@ -1,12 +0,0 @@
---TEST--
-Bug #25707 (html_entity_decode over-decodes &amp;lt;)
---FILE--
-<?php
-var_dump(html_entity_decode("&amp;lt;", ENT_COMPAT, 'ISO-8859-1'));
-var_dump(html_entity_decode("&amp;#38;", ENT_COMPAT, 'ISO-8859-1'));
-var_dump(html_entity_decode("&amp;#38;lt;", ENT_COMPAT, 'ISO-8859-1'));
-?>
---EXPECT--
-string(4) "&lt;"
-string(5) "&#38;"
-string(8) "&#38;lt;"
diff --git a/ext/standard/tests/strings/bug26817.phpt b/ext/standard/tests/strings/bug26817.phpt
deleted file mode 100644
index 228348708c..0000000000
--- a/ext/standard/tests/strings/bug26817.phpt
+++ /dev/null
@@ -1,26 +0,0 @@
---TEST--
-Bug #26817 (http_build_query() did not handle private & protected object properties)
---FILE--
-<?php
-class test {
- protected $foo;
- private $bar;
- public $test;
-
- function foo()
- {
- $this->bar = 'meuh';
- $this->foo = 'lala';
- $this->test = 'test';
-
- var_dump(http_build_query($this));
- }
-}
-
-$obj = new test();
-$obj->foo();
-var_dump(http_build_query($obj));
-?>
---EXPECT--
-string(27) "foo=lala&bar=meuh&test=test"
-string(9) "test=test"
diff --git a/ext/standard/tests/strings/bug26819.phpt b/ext/standard/tests/strings/bug26819.phpt
deleted file mode 100644
index 4a53539434..0000000000
--- a/ext/standard/tests/strings/bug26819.phpt
+++ /dev/null
@@ -1,9 +0,0 @@
---TEST--
-Bug #26819 (http_build_query() crash on empty output)
---FILE--
-<?php
-$a = array();
-var_dump(http_build_query($a));
-?>
---EXPECT--
-NULL
diff --git a/ext/standard/tests/strings/bug26878.phpt b/ext/standard/tests/strings/bug26878.phpt
deleted file mode 100644
index 602f710c83..0000000000
--- a/ext/standard/tests/strings/bug26878.phpt
+++ /dev/null
@@ -1,9 +0,0 @@
---TEST--
-Bug #26878 (problem with multiple references to the same variable with different types)
---FILE--
-<?php
- printf('Int: %1$d and as string: %1$s', 'some string');
- echo "\n";
-?>
---EXPECT--
-Int: 0 and as string: some string
diff --git a/ext/standard/tests/strings/bug26973.phpt b/ext/standard/tests/strings/bug26973.phpt
deleted file mode 100644
index 4a586ecaa2..0000000000
--- a/ext/standard/tests/strings/bug26973.phpt
+++ /dev/null
@@ -1,34 +0,0 @@
---TEST--
-Bug #26973 (*printf() '+' modifier problem)
---FILE--
-<?php
-
-printf("%+05d\n", 200);
-printf("%+05d\n", -200);
-printf("%+05f\n", 200);
-printf("%+05f\n", -200);
-printf("%+05u\n", 200);
-printf("%+05u\n", -200);
-echo "---\n";
-printf("%05d\n", 200);
-printf("%05d\n", -200);
-printf("%05f\n", 200);
-printf("%05f\n", -200);
-printf("%05u\n", 200);
-printf("%05u\n", -200);
-
-?>
---EXPECT--
-+0200
--0200
-+200.000000
--200.000000
-00200
-4294967096
----
-00200
--0200
-200.000000
--200.000000
-00200
-4294967096
diff --git a/ext/standard/tests/strings/bug27276.phpt b/ext/standard/tests/strings/bug27276.phpt
deleted file mode 100644
index f27e1d560b..0000000000
--- a/ext/standard/tests/strings/bug27276.phpt
+++ /dev/null
@@ -1,15 +0,0 @@
---TEST--
-Bug #27276 (str_replace tries to use obscene amounts of ram)
---FILE--
-<?php
-ini_set("memory_limit", "12m");
-$replacement = str_repeat("x", 12444);
-$string = str_repeat("x", 9432);
-$key = "{BLURPS}";
-
-str_replace($key, $replacement, $string);
-
-echo "Alive!\n";
-?>
---EXPECT--
-Alive!
diff --git a/ext/standard/tests/strings/bug27278.phpt b/ext/standard/tests/strings/bug27278.phpt
deleted file mode 100644
index 1a94692d19..0000000000
--- a/ext/standard/tests/strings/bug27278.phpt
+++ /dev/null
@@ -1,21 +0,0 @@
---TEST--
-Bug #27278 (*printf() functions treat arguments as if passed by reference)
---FILE--
-<?php
-
-function foo ($a)
-{
- $a=sprintf("%02d",$a);
- var_dump($a);
-}
-
-$x="02";
-var_dump($x);
-foo($x);
-var_dump($x);
-
-?>
---EXPECT--
-string(2) "02"
-string(2) "02"
-string(2) "02"
diff --git a/ext/standard/tests/strings/bug27295.phpt b/ext/standard/tests/strings/bug27295.phpt
deleted file mode 100644
index d23d27049f..0000000000
--- a/ext/standard/tests/strings/bug27295.phpt
+++ /dev/null
@@ -1,14 +0,0 @@
---TEST--
-Bug #27295 (memory leak inside sscanf())
---FILE--
-<?php
-$strings = array("foo = bar", "bar = foo");
-foreach( $strings as $string )
-{
- sscanf( $string, "%s = %[^[]]", $var, $val );
- echo "$var = $val\n";
-}
-?>
---EXPECT--
-foo = bar
-bar = foo
diff --git a/ext/standard/tests/strings/bug27457.phpt b/ext/standard/tests/strings/bug27457.phpt
deleted file mode 100644
index 6f5ec05f79..0000000000
--- a/ext/standard/tests/strings/bug27457.phpt
+++ /dev/null
@@ -1,21 +0,0 @@
---TEST--
-Bug #27457 (Problem with strtr() and translation array)
---FILE--
-<?php
- $test = "Dot in brackets [.]\n";
- echo $test;
- $test = strtr($test, array('.' => '0'));
- echo $test;
- $test = strtr($test, array('0' => '.'));
- echo $test;
- $test = strtr($test, '.', '0');
- echo $test;
- $test = strtr($test, '0', '.');
- echo $test;
-?>
---EXPECT--
-Dot in brackets [.]
-Dot in brackets [0]
-Dot in brackets [.]
-Dot in brackets [0]
-Dot in brackets [.]
diff --git a/ext/standard/tests/strings/bug27675.phpt b/ext/standard/tests/strings/bug27675.phpt
deleted file mode 100644
index a5d4294b2c..0000000000
--- a/ext/standard/tests/strings/bug27675.phpt
+++ /dev/null
@@ -1,8 +0,0 @@
---TEST--
-Bug #27675 (str_ireplace segfaults when shrinking string)
---FILE--
-<?php
-echo str_ireplace('/*<B>', '<B>', '/*<b> I am a comment</b>*/');
-?>
---EXPECT--
-<B> I am a comment</b>*/
diff --git a/ext/standard/tests/strings/bug28386.phpt b/ext/standard/tests/strings/bug28386.phpt
deleted file mode 100644
index 9c7c158bc9..0000000000
--- a/ext/standard/tests/strings/bug28386.phpt
+++ /dev/null
@@ -1,13 +0,0 @@
---TEST--
-Bug #28386 (wordwrap() wraps text 1 character too soon)
---FILE--
-<?php
-$text = "Some text";
-$string = "$text $text $text $text";
-echo wordwrap($string, 9);
-?>
---EXPECT--
-Some text
-Some text
-Some text
-Some text
diff --git a/ext/standard/tests/strings/bug28633.phpt b/ext/standard/tests/strings/bug28633.phpt
deleted file mode 100644
index 5a1c2567fa..0000000000
--- a/ext/standard/tests/strings/bug28633.phpt
+++ /dev/null
@@ -1,10 +0,0 @@
---TEST--
-Bug #28633 (sprintf incorrectly adding padding to floats)
---FILE--
-<?php
- echo sprintf("%05.2f", 0.02) . "\n";
- echo sprintf("%05.2f", 2.02) . "\n";
-?>
---EXPECT--
-00.02
-02.02
diff --git a/ext/standard/tests/strings/bug29075.phpt b/ext/standard/tests/strings/bug29075.phpt
deleted file mode 100644
index 7fe7da6c49..0000000000
--- a/ext/standard/tests/strings/bug29075.phpt
+++ /dev/null
@@ -1,14 +0,0 @@
---TEST--
-Bug #29075 (strnatcmp() incorrectly handles whitespace)
---FILE--
-<?php
- var_dump(
- strnatcmp('foo ', 'foo '),
- strnatcmp('foo', 'foo'),
- strnatcmp(' foo', ' foo')
- );
-?>
---EXPECT--
-int(0)
-int(0)
-int(0)
diff --git a/ext/standard/tests/strings/bug29119.phpt b/ext/standard/tests/strings/bug29119.phpt
deleted file mode 100644
index 8b419b81a1..0000000000
--- a/ext/standard/tests/strings/bug29119.phpt
+++ /dev/null
@@ -1,8 +0,0 @@
---TEST--
-Bug #29119 (html_entity_decode() misbehaves with UTF-8)
---FILE--
-<?php
-var_dump(bin2hex(html_entity_decode('&ensp;&thinsp;&lsquo;&dagger;&prime;&frasl;&euro;', ENT_QUOTES, 'UTF-8')));
-?>
---EXPECT--
-string(42) "e28082e28089e28098e280a0e280b2e28184e282ac"
diff --git a/ext/standard/tests/strings/chr_ord.phpt b/ext/standard/tests/strings/chr_ord.phpt
deleted file mode 100644
index 56cfef70a3..0000000000
--- a/ext/standard/tests/strings/chr_ord.phpt
+++ /dev/null
@@ -1,10 +0,0 @@
---TEST--
-chr() and ord() functions
---FILE--
-<?php
-echo "Testing ord() & chr()...";
-for($i=0; $i<256; $i++) echo !ord(chr($i)) == $i;
-echo " done";
-?>
---EXPECT--
-Testing ord() & chr()... done
diff --git a/ext/standard/tests/strings/chunk_split.phpt b/ext/standard/tests/strings/chunk_split.phpt
deleted file mode 100644
index 6aec9fd24d..0000000000
--- a/ext/standard/tests/strings/chunk_split.phpt
+++ /dev/null
@@ -1,17 +0,0 @@
---TEST--
-chunk_split() function
---FILE--
-<?php
-echo chunk_split('abc', 1, '-')."\n";
-echo chunk_split('foooooooooooooooo', 5)."\n";
-echo chunk_split(str_repeat('X', 2*76))."\n";
-?>
---EXPECT--
-a-b-c-
-foooo
-ooooo
-ooooo
-oo
-
-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
diff --git a/ext/standard/tests/strings/count_chars.phpt b/ext/standard/tests/strings/count_chars.phpt
deleted file mode 100644
index fe21b656f0..0000000000
--- a/ext/standard/tests/strings/count_chars.phpt
+++ /dev/null
@@ -1,18 +0,0 @@
---TEST--
-count_chars() function
---FILE--
-<?php
-$s = "het leven is net erwtensoep - je kunt er geen touw aan vastknopen";
-for($i=0; $i<3; $i++) {
- echo implode(count_chars($s, $i))."\n";
-}
-echo $a = count_chars($s, 3), "\n";
-echo (int) strlen(count_chars($s, 4)) == 256-strlen($a),"\n";
-
-?>
---EXPECT--
-000000000000000000000000000000001200000000000010000000000000000000000000000000000000000000000000003000120111121083202362220000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
-121312111121832236222
-000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
- -aeghijklnoprstuvw
-1
diff --git a/ext/standard/tests/strings/crc32.phpt b/ext/standard/tests/strings/crc32.phpt
deleted file mode 100644
index e1b338f011..0000000000
--- a/ext/standard/tests/strings/crc32.phpt
+++ /dev/null
@@ -1,14 +0,0 @@
---TEST--
-crc32() function
---FILE--
-<?php
-$input = array("foo", "bar", "baz", "grldsajkopallkjasd");
-foreach($input AS $i) {
- printf("%u\n", crc32($i));
-}
-?>
---EXPECT--
-2356372769
-1996459178
-2015626392
-824412087
diff --git a/ext/standard/tests/strings/crypt.phpt b/ext/standard/tests/strings/crypt.phpt
deleted file mode 100644
index 5368178e11..0000000000
--- a/ext/standard/tests/strings/crypt.phpt
+++ /dev/null
@@ -1,32 +0,0 @@
---TEST--
-crypt() function
---SKIPIF--
-<?php
-if (!function_exists('crypt')) {
- die("SKIP crypt() is not available");
-}
-?>
---FILE--
-<?php
-
-$str = 'rasmuslerdorf';
-$salt1 = 'rl';
-$res_1 = 'rl.3StKT.4T8M';
-$salt2 = '_J9..rasm';
-$res_2 = '_J9..rasmBYk8r9AiWNc';
-$salt3 = '$1$rasmusle$';
-$res_3 = '$1$rasmusle$rISCgZzpwk3UhDidwXvin0';
-$salt4 = '$2a$07$rasmuslerd............';
-$res_4 = '$2a$07$rasmuslerd............nIdrcHdxcUxWomQX9j6kvERCFjTg7Ra';
-
-echo (CRYPT_STD_DES) ? ((crypt($str, $salt1) === $res_1) ? 'STD' : 'STD - ERROR') : 'STD', "\n";
-echo (CRYPT_EXT_DES) ? ((crypt($str, $salt2) === $res_2) ? 'EXT' : 'EXT - ERROR') : 'EXT', "\n";
-echo (CRYPT_MD5) ? ((crypt($str, $salt3) === $res_3) ? 'MD5' : 'MD5 - ERROR') : 'MD5', "\n";
-echo (CRYPT_BLOWFISH) ? ((crypt($str, $salt4) === $res_4) ? 'BLO' : 'BLO - ERROR') : 'BLO', "\n";
-
-?>
---EXPECT--
-STD
-EXT
-MD5
-BLO
diff --git a/ext/standard/tests/strings/explode.phpt b/ext/standard/tests/strings/explode.phpt
deleted file mode 100644
index 1198a09a97..0000000000
--- a/ext/standard/tests/strings/explode.phpt
+++ /dev/null
@@ -1,154 +0,0 @@
---TEST--
-explode() function
---INI--
-error_reporting=2047
---FILE--
-<?php
-/* From http://bugs.php.net/19865 */
-echo md5(var_export(explode("\1", "a". chr(1). "b". chr(0). "d" . chr(1) . "f" . chr(1). "1" . chr(1) . "d"), TRUE));
-echo "\n";
-var_dump(@explode("", ""));
-var_dump(@explode("", NULL));
-var_dump(@explode(NULL, ""));
-var_dump(@explode("a", ""));
-var_dump(@explode("a", "a"));
-var_dump(@explode("a", NULL));
-var_dump(@explode(NULL, a));
-var_dump(@explode("abc", "acb"));
-var_dump(@explode("somestring", "otherstring"));
-var_dump(@explode("a", "aaaaaa"));
-var_dump(@explode("==", str_repeat("-=".ord(0)."=-", 10)));
-var_dump(@explode("=", str_repeat("-=".ord(0)."=-", 10)));
-//////////////////////////////////////
-var_dump(explode(":","a lazy dog:jumps:over:",-1));
-var_dump(explode(":","a lazy dog:jumps:over", -1));
-var_dump(explode(":","a lazy dog:jumps:over", -2));
-var_dump(explode(":","a lazy dog:jumps:over:",-4));
-var_dump(explode(":","a lazy dog:jumps:over:",-40000000000000));
-var_dump(explode(":^:","a lazy dog:^:jumps::over:^:",-1));
-var_dump(explode(":^:","a lazy dog:^:jumps::over:^:",-2));
-?>
---EXPECTF--
-26d4e18734cb2582df5055e2175223df
-bool(false)
-bool(false)
-bool(false)
-array(1) {
- [0]=>
- string(0) ""
-}
-array(2) {
- [0]=>
- string(0) ""
- [1]=>
- string(0) ""
-}
-array(1) {
- [0]=>
- string(0) ""
-}
-bool(false)
-array(1) {
- [0]=>
- string(3) "acb"
-}
-array(1) {
- [0]=>
- string(11) "otherstring"
-}
-array(7) {
- [0]=>
- string(0) ""
- [1]=>
- string(0) ""
- [2]=>
- string(0) ""
- [3]=>
- string(0) ""
- [4]=>
- string(0) ""
- [5]=>
- string(0) ""
- [6]=>
- string(0) ""
-}
-array(1) {
- [0]=>
- string(60) "-=48=--=48=--=48=--=48=--=48=--=48=--=48=--=48=--=48=--=48=-"
-}
-array(21) {
- [0]=>
- string(1) "-"
- [1]=>
- string(2) "48"
- [2]=>
- string(2) "--"
- [3]=>
- string(2) "48"
- [4]=>
- string(2) "--"
- [5]=>
- string(2) "48"
- [6]=>
- string(2) "--"
- [7]=>
- string(2) "48"
- [8]=>
- string(2) "--"
- [9]=>
- string(2) "48"
- [10]=>
- string(2) "--"
- [11]=>
- string(2) "48"
- [12]=>
- string(2) "--"
- [13]=>
- string(2) "48"
- [14]=>
- string(2) "--"
- [15]=>
- string(2) "48"
- [16]=>
- string(2) "--"
- [17]=>
- string(2) "48"
- [18]=>
- string(2) "--"
- [19]=>
- string(2) "48"
- [20]=>
- string(1) "-"
-}
-array(3) {
- [0]=>
- string(10) "a lazy dog"
- [1]=>
- string(5) "jumps"
- [2]=>
- string(4) "over"
-}
-array(2) {
- [0]=>
- string(10) "a lazy dog"
- [1]=>
- string(5) "jumps"
-}
-array(1) {
- [0]=>
- string(10) "a lazy dog"
-}
-array(0) {
-}
-array(0) {
-}
-array(2) {
- [0]=>
- string(10) "a lazy dog"
- [1]=>
- string(11) "jumps::over"
-}
-array(1) {
- [0]=>
- string(10) "a lazy dog"
-}
diff --git a/ext/standard/tests/strings/htmlentities.phpt b/ext/standard/tests/strings/htmlentities.phpt
deleted file mode 100644
index 743651ecad..0000000000
--- a/ext/standard/tests/strings/htmlentities.phpt
+++ /dev/null
@@ -1,19 +0,0 @@
---TEST--
-HTML entities
---INI--
-output_handler=
---FILE--
-<?php
-setlocale (LC_CTYPE, "C");
-$sc_encoded = htmlspecialchars ("<>\"&åÄ\n");
-echo $sc_encoded;
-$ent_encoded = htmlentities ("<>\"&åÄ\n");
-echo $ent_encoded;
-echo html_entity_decode($sc_encoded);
-echo html_entity_decode($ent_encoded);
-?>
---EXPECT--
-&lt;&gt;&quot;&amp;åÄ
-&lt;&gt;&quot;&amp;&aring;&Auml;
-<>"&åÄ
-<>"&åÄ
diff --git a/ext/standard/tests/strings/htmlentities01.phpt b/ext/standard/tests/strings/htmlentities01.phpt
deleted file mode 100644
index 4ab49472d1..0000000000
--- a/ext/standard/tests/strings/htmlentities01.phpt
+++ /dev/null
@@ -1,13 +0,0 @@
---TEST--
-htmlentities() test 1 (cp1252)
---INI--
-output_handler=
-mbstring.internal_encoding=pass
---FILE--
-<?php
- var_dump(htmlentities("\x82\x86\x99\x9f", ENT_QUOTES, 'cp1252'));
- var_dump(htmlentities("\x80\xa2\xa3\xa4\xa5", ENT_QUOTES, 'cp1252'));
-?>
---EXPECT--
-string(28) "&sbquo;&dagger;&trade;&Yuml;"
-string(32) "&euro;&cent;&pound;&curren;&yen;"
diff --git a/ext/standard/tests/strings/htmlentities02.phpt b/ext/standard/tests/strings/htmlentities02.phpt
deleted file mode 100644
index 666c4f650b..0000000000
--- a/ext/standard/tests/strings/htmlentities02.phpt
+++ /dev/null
@@ -1,21 +0,0 @@
---TEST--
-htmlentities() test 2 (setlocale / fr_FR.ISO-8859-15)
---SKIPIF--
-<?php
-$result = (bool)setlocale(LC_CTYPE, "fr_FR.ISO-8859-15", "fr_FR.ISO8859-15");
-if (!$result || preg_match('/ISO/i', setlocale(LC_CTYPE, 0)) == 0) {
- die("skip setlocale() failed\n");
-}
-echo "warn possibly braindead libc\n";
-?>
---INI--
-output_handler=
-default_charset=
-mbstring.internal_encoding=none
---FILE--
-<?php
- setlocale( LC_CTYPE, "fr_FR.ISO-8859-15", "fr_FR.ISO8859-15" );
- var_dump(htmlentities("\xbc\xbd\xbe", ENT_QUOTES, ''));
-?>
---EXPECT--
-string(20) "&OElig;&oelig;&Yuml;"
diff --git a/ext/standard/tests/strings/htmlentities03.phpt b/ext/standard/tests/strings/htmlentities03.phpt
deleted file mode 100644
index 7e933544fe..0000000000
--- a/ext/standard/tests/strings/htmlentities03.phpt
+++ /dev/null
@@ -1,20 +0,0 @@
---TEST--
-htmlentities() test 3 (setlocale / de_DE.ISO-8859-1)
---SKIPIF--
-<?php
-$result = (bool)setlocale(LC_CTYPE, "de_DE.ISO-8859-1", "de_DE.ISO8859-1");
-if (!$result || preg_match('/ISO/i', setlocale(LC_CTYPE, 0)) == 0) {
- die("skip setlocale() failed\n");
-}
-?>
---INI--
-output_handler=
-default_charset=
-mbstring.internal_encoding=none
---FILE--
-<?php
- setlocale( LC_CTYPE, "de_DE.ISO-8859-1", "de_DE.ISO8859-1");
- var_dump(htmlentities("\xe4\xf6\xfc", ENT_QUOTES, ''));
-?>
---EXPECT--
-string(18) "&auml;&ouml;&uuml;"
diff --git a/ext/standard/tests/strings/htmlentities04.phpt b/ext/standard/tests/strings/htmlentities04.phpt
deleted file mode 100644
index 8e362d073c..0000000000
--- a/ext/standard/tests/strings/htmlentities04.phpt
+++ /dev/null
@@ -1,20 +0,0 @@
---TEST--
-htmlentities() test 4 (setlocale / ja_JP.EUC-JP)
---SKIPIF--
-<?php
-$result = (bool)setlocale(LC_CTYPE, "ja_JP.EUC-JP", "ja_JP.eucJP");
-if (!$result || preg_match('/EUC[^a-zA-Z]*JP/i', setlocale(LC_CTYPE, 0)) == 0) {
- die("skip setlocale() failed\n");
-}
-?>
---INI--
-output_handler=
-default_charset=
-mbstring.internal_encoding=none
---FILE--
-<?php
- setlocale( LC_CTYPE, "ja_JP.EUC-JP", "ja_JP.eucJP" );
- var_dump(htmlentities("\xa1\xa2\xa1\xa3\xa1\xa4", ENT_QUOTES, ''));
-?>
---EXPECT--
-string(6) "¡¢¡£¡¤"
diff --git a/ext/standard/tests/strings/htmlentities05.phpt b/ext/standard/tests/strings/htmlentities05.phpt
deleted file mode 100644
index 779cf289b0..0000000000
--- a/ext/standard/tests/strings/htmlentities05.phpt
+++ /dev/null
@@ -1,25 +0,0 @@
---TEST--
-htmlentities() test 5 (mbstring / cp1252)
---INI--
-output_handler=
---SKIPIF--
-<?php
- extension_loaded("mbstring") or die("skip mbstring not available\n");
- mb_internal_encoding('cp1252');
- $php_errormsg = NULL;
- @htmlentities("\x82\x86\x99\x9f", ENT_QUOTES, '');
- if ($php_errormsg) {
- die("skip cp1252 chracter set is not supported on this platform.\n");
- }
-?>
---FILE--
-<?php
- mb_internal_encoding('cp1252');
- print mb_internal_encoding()."\n";
- var_dump(htmlentities("\x82\x86\x99\x9f", ENT_QUOTES, ''));
- var_dump(htmlentities("\x80\xa2\xa3\xa4\xa5", ENT_QUOTES, ''));
-?>
---EXPECT--
-Windows-1252
-string(28) "&sbquo;&dagger;&trade;&Yuml;"
-string(32) "&euro;&cent;&pound;&curren;&yen;"
diff --git a/ext/standard/tests/strings/htmlentities06.phpt b/ext/standard/tests/strings/htmlentities06.phpt
deleted file mode 100644
index 44d1466da9..0000000000
--- a/ext/standard/tests/strings/htmlentities06.phpt
+++ /dev/null
@@ -1,22 +0,0 @@
---TEST--
-htmlentities() test 6 (mbstring / ISO-8859-15)
---INI--
-output_handler=
---SKIPIF--
-<?php
- extension_loaded("mbstring") or die("skip mbstring not available\n");
- @mb_internal_encoding('ISO-8859-15');
- @htmlentities("\xbc\xbd\xbe", ENT_QUOTES, '');
- if (@$php_errormsg) {
- die("skip ISO-8859-15 chracter set is not supported on this platform.\n");
- }
-?>
---FILE--
-<?php
- mb_internal_encoding('ISO-8859-15');
- print mb_internal_encoding()."\n";
- var_dump(htmlentities("\xbc\xbd\xbe", ENT_QUOTES, ''));
-?>
---EXPECT--
-ISO-8859-15
-string(20) "&OElig;&oelig;&Yuml;"
diff --git a/ext/standard/tests/strings/htmlentities07.phpt b/ext/standard/tests/strings/htmlentities07.phpt
deleted file mode 100644
index efd06f08ad..0000000000
--- a/ext/standard/tests/strings/htmlentities07.phpt
+++ /dev/null
@@ -1,23 +0,0 @@
---TEST--
-htmlentities() test 7 (mbstring / ISO-8859-1)
---INI--
-output_handler=
---SKIPIF--
-<?php
- extension_loaded("mbstring") or die("skip mbstring not available\n");
- mb_internal_encoding('ISO-8859-1');
- $php_errormsg = NULL;
- @htmlentities("\xe4\xf6\xfc", ENT_QUOTES, '');
- if ($php_errormsg) {
- die("skip ISO-8859-1 chracter set is not supported on this platform.\n");
- }
-?>
---FILE--
-<?php
- mb_internal_encoding('ISO-8859-1');
- print mb_internal_encoding()."\n";
- var_dump(htmlentities("\xe4\xf6\xfc", ENT_QUOTES, ''));
-?>
---EXPECT--
-ISO-8859-1
-string(18) "&auml;&ouml;&uuml;"
diff --git a/ext/standard/tests/strings/htmlentities08.phpt b/ext/standard/tests/strings/htmlentities08.phpt
deleted file mode 100644
index 0f8f912f27..0000000000
--- a/ext/standard/tests/strings/htmlentities08.phpt
+++ /dev/null
@@ -1,23 +0,0 @@
---TEST--
-htmlentities() test 8 (mbstring / EUC-JP)
---INI--
-output_handler=
---SKIPIF--
-<?php
- extension_loaded("mbstring") or die("skip mbstring not available\n");
- mb_internal_encoding('EUC-JP');
- $php_errormsg = NULL;
- @htmlentities("\xa1\xa2\xa1\xa3\xa1\xa4", ENT_QUOTES, '');
- if ($php_errormsg) {
- die("skip EUC-JP chracter set is not supported on this platform.\n");
- }
-?>
---FILE--
-<?php
- mb_internal_encoding('EUC-JP');
- print mb_internal_encoding()."\n";
- var_dump(htmlentities("\xa1\xa2\xa1\xa3\xa1\xa4", ENT_QUOTES, ''));
-?>
---EXPECT--
-EUC-JP
-string(6) "¡¢¡£¡¤"
diff --git a/ext/standard/tests/strings/htmlentities09.phpt b/ext/standard/tests/strings/htmlentities09.phpt
deleted file mode 100644
index 4c6ef60c74..0000000000
--- a/ext/standard/tests/strings/htmlentities09.phpt
+++ /dev/null
@@ -1,23 +0,0 @@
---TEST--
-htmlentities() test 9 (mbstring / Shift_JIS)
---INI--
-output_handler=
---SKIPIF--
-<?php
- extension_loaded("mbstring") or die("skip mbstring not available\n");
- mb_internal_encoding('Shift_JIS');
- $php_errormsg = NULL;
- @htmlentities("\x81\x41\x81\x42\x81\x43", ENT_QUOTES, '');
- if ($php_errormsg) {
- die("skip Shift_JIS chracter set is not supported on this platform.\n");
- }
-?>
---FILE--
-<?php
- mb_internal_encoding('Shift_JIS');
- print mb_internal_encoding()."\n";
- var_dump(htmlentities("\x81\x41\x81\x42\x81\x43", ENT_QUOTES, ''));
-?>
---EXPECT--
-SJIS
-string(6) "ABC"
diff --git a/ext/standard/tests/strings/htmlentities10.phpt b/ext/standard/tests/strings/htmlentities10.phpt
deleted file mode 100644
index ee5099cf34..0000000000
--- a/ext/standard/tests/strings/htmlentities10.phpt
+++ /dev/null
@@ -1,16 +0,0 @@
---TEST--
-htmlentities() test 10 (default_charset / cp1252)
---INI--
-output_handler=
-mbstring.internal_encoding=pass
-default_charset=cp1252
---FILE--
-<?php
- print ini_get('default_charset')."\n";
- var_dump(htmlentities("\x82\x86\x99\x9f", ENT_QUOTES, ''));
- var_dump(htmlentities("\x80\xa2\xa3\xa4\xa5", ENT_QUOTES, ''));
-?>
---EXPECT--
-cp1252
-string(28) "&sbquo;&dagger;&trade;&Yuml;"
-string(32) "&euro;&cent;&pound;&curren;&yen;"
diff --git a/ext/standard/tests/strings/htmlentities11.phpt b/ext/standard/tests/strings/htmlentities11.phpt
deleted file mode 100644
index 62b6aec7c8..0000000000
--- a/ext/standard/tests/strings/htmlentities11.phpt
+++ /dev/null
@@ -1,14 +0,0 @@
---TEST--
-htmlentities() test 11 (default_charset / ISO-8859-15)
---INI--
-output_handler=
-mbstring.internal_encoding=pass
-default_charset=ISO-8859-15
---FILE--
-<?php
- print ini_get('default_charset')."\n";
- var_dump(htmlentities("\xbc\xbd\xbe", ENT_QUOTES, ''));
-?>
---EXPECT--
-ISO-8859-15
-string(20) "&OElig;&oelig;&Yuml;"
diff --git a/ext/standard/tests/strings/htmlentities12.phpt b/ext/standard/tests/strings/htmlentities12.phpt
deleted file mode 100644
index 826706680d..0000000000
--- a/ext/standard/tests/strings/htmlentities12.phpt
+++ /dev/null
@@ -1,14 +0,0 @@
---TEST--
-htmlentities() test 12 (default_charset / ISO-8859-1)
---INI--
-output_handler=
-mbstring.internal_encoding=pass
-default_charset=ISO-8859-1
---FILE--
-<?php
- print ini_get('default_charset')."\n";
- var_dump(htmlentities("\xe4\xf6\xfc", ENT_QUOTES, ''));
-?>
---EXPECT--
-ISO-8859-1
-string(18) "&auml;&ouml;&uuml;"
diff --git a/ext/standard/tests/strings/htmlentities13.phpt b/ext/standard/tests/strings/htmlentities13.phpt
deleted file mode 100644
index 2c559916e9..0000000000
--- a/ext/standard/tests/strings/htmlentities13.phpt
+++ /dev/null
@@ -1,14 +0,0 @@
---TEST--
-htmlentities() test 13 (default_charset / EUC-JP)
---INI--
-output_handler=
-mbstring.internal_encoding=pass
-default_charset=EUC-JP
---FILE--
-<?php
- print ini_get('default_charset')."\n";
- var_dump(htmlentities("\xa1\xa2\xa1\xa3\xa1\xa4", ENT_QUOTES, ''));
-?>
---EXPECT--
-EUC-JP
-string(6) "¡¢¡£¡¤"
diff --git a/ext/standard/tests/strings/htmlentities14.phpt b/ext/standard/tests/strings/htmlentities14.phpt
deleted file mode 100644
index 9190d26515..0000000000
--- a/ext/standard/tests/strings/htmlentities14.phpt
+++ /dev/null
@@ -1,14 +0,0 @@
---TEST--
-htmlentities() test 14 (default_charset / Shift_JIS)
---INI--
-output_handler=
-mbstring.internal_encoding=pass
-default_charset=Shift_JIS
---FILE--
-<?php
- print ini_get('default_charset')."\n";
- var_dump(htmlentities("\x81\x41\x81\x42\x81\x43", ENT_QUOTES, ''));
-?>
---EXPECT--
-Shift_JIS
-string(6) "ABC"
diff --git a/ext/standard/tests/strings/htmlentities15.phpt b/ext/standard/tests/strings/htmlentities15.phpt
deleted file mode 100644
index a0e534aba0..0000000000
--- a/ext/standard/tests/strings/htmlentities15.phpt
+++ /dev/null
@@ -1,22 +0,0 @@
---TEST--
-htmlentities() test 15 (setlocale / KOI8-R)
---INI--
-output_handler=
-default_charset=
-mbstring.internal_encoding=none
---SKIPIF--
-<?php
-$result = (bool)setlocale(LC_CTYPE, "ru_RU.koi8r");
-if (!$result || preg_match('/koi8/i', setlocale(LC_CTYPE, 0)) == 0) {
- die("skip setlocale() failed\n");
-}
-?>
---FILE--
-<?php
-setlocale(LC_CTYPE, "ru_RU.koi8r");
-$str = "ÒÏÓËÏÛÎÙÊ";
-var_dump($str, htmlentities($str, ENT_QUOTES, ''));
-?>
---EXPECT--
-string(9) "ÒÏÓËÏÛÎÙÊ"
-string(63) "&#1088;&#1086;&#1089;&#1082;&#1086;&#1096;&#1085;&#1099;&#1081;"
diff --git a/ext/standard/tests/strings/htmlentities16.phpt b/ext/standard/tests/strings/htmlentities16.phpt
deleted file mode 100644
index 0f945280b5..0000000000
--- a/ext/standard/tests/strings/htmlentities16.phpt
+++ /dev/null
@@ -1,21 +0,0 @@
---TEST--
-htmlentities() test 16 (mbstring / cp1251)
---INI--
-output_handler=
---SKIPIF--
-<?php
- extension_loaded("mbstring") or die("skip mbstring not available\n");
- if (!@mb_internal_encoding('cp1251') ||
- @htmlentities("\x88\xa9\xd2\xcf\xd3\xcb\xcf\xdb\xce\xd9\xca", ENT_QUOTES, '') == '') {
- die("skip cp1251 character set is not available in this build.\n");
- }
-?>
---FILE--
-<?php
-mb_internal_encoding('cp1251');
-$str = "\x88\xa9\xf0\xee\xf1\xea\xee\xf8\xed\xfb\xe9";
-var_dump($str, htmlentities($str, ENT_QUOTES, ''));
-?>
---EXPECT--
-string(11) "ˆ©ðîñêîøíûé"
-string(75) "&euro;&copy;&#1088;&#1086;&#1089;&#1082;&#1086;&#1096;&#1085;&#1099;&#1081;"
diff --git a/ext/standard/tests/strings/implode.phpt b/ext/standard/tests/strings/implode.phpt
deleted file mode 100644
index 36be0f395c..0000000000
--- a/ext/standard/tests/strings/implode.phpt
+++ /dev/null
@@ -1,23 +0,0 @@
---TEST--
-implode() function
---INI--
-error_reporting=2047
-log_errors=0
-display_errors=0
-track_errors=1
---FILE--
-<?php
-echo implode(array())."\n";
-echo implode('nothing', array())."\n";
-echo implode(array('foo', 'bar', 'baz'))."\n";
-echo implode(':', array('foo', 'bar', 'baz'))."\n";
-echo implode(':', array('foo', array('bar', 'baz'), 'burp'))."\n";
-echo $php_errormsg."\n";
-?>
---EXPECTF--
-
-
-foobarbaz
-foo:bar:baz
-foo:Array:burp
-Array to string conversion
diff --git a/ext/standard/tests/strings/md5.phpt b/ext/standard/tests/strings/md5.phpt
deleted file mode 100644
index 32dba03609..0000000000
--- a/ext/standard/tests/strings/md5.phpt
+++ /dev/null
@@ -1,20 +0,0 @@
---TEST--
-md5() with ASCII output
---FILE--
-<?php
-echo md5("")."\n";
-echo md5("a")."\n";
-echo md5("abc")."\n";
-echo md5("message digest")."\n";
-echo md5("abcdefghijklmnopqrstuvwxyz")."\n";
-echo md5("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789")."\n";
-echo md5("12345678901234567890123456789012345678901234567890123456789012345678901234567890")."\n";
-?>
---EXPECT--
-d41d8cd98f00b204e9800998ecf8427e
-0cc175b9c0f1b6a831c399e269772661
-900150983cd24fb0d6963f7d28e17f72
-f96b697d7cb7938d525a2f31aaf161d0
-c3fcd3d76192e4007dfb496cca67e13b
-d174ab98d277d9f5a5611c2c9f419d9f
-57edf4a22be3c955ac49da2e2107b67a
diff --git a/ext/standard/tests/strings/md5raw.phpt b/ext/standard/tests/strings/md5raw.phpt
deleted file mode 100644
index 8f71ea6d0e..0000000000
--- a/ext/standard/tests/strings/md5raw.phpt
+++ /dev/null
@@ -1,20 +0,0 @@
---TEST--
-md5() with RAW output
---FILE--
-<?php
-echo bin2hex(md5("", TRUE))."\n";
-echo bin2hex(md5("a", TRUE))."\n";
-echo bin2hex(md5("abc", TRUE))."\n";
-echo bin2hex(md5("message digest", TRUE))."\n";
-echo bin2hex(md5("abcdefghijklmnopqrstuvwxyz", TRUE))."\n";
-echo bin2hex(md5("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789", TRUE))."\n";
-echo bin2hex(md5("12345678901234567890123456789012345678901234567890123456789012345678901234567890", TRUE))."\n";
-?>
---EXPECT--
-d41d8cd98f00b204e9800998ecf8427e
-0cc175b9c0f1b6a831c399e269772661
-900150983cd24fb0d6963f7d28e17f72
-f96b697d7cb7938d525a2f31aaf161d0
-c3fcd3d76192e4007dfb496cca67e13b
-d174ab98d277d9f5a5611c2c9f419d9f
-57edf4a22be3c955ac49da2e2107b67a
diff --git a/ext/standard/tests/strings/nl2br.phpt b/ext/standard/tests/strings/nl2br.phpt
deleted file mode 100644
index e43d435dfe..0000000000
--- a/ext/standard/tests/strings/nl2br.phpt
+++ /dev/null
@@ -1,60 +0,0 @@
---TEST--
-nl2br() function
---FILE--
-<?php
- var_dump(nl2br("test"));
- var_dump(nl2br(""));
- var_dump(nl2br(NULL));
- var_dump(nl2br("\r\n"));
- var_dump(nl2br("\n"));
- var_dump(nl2br("\r"));
- var_dump(nl2br("\n\r"));
-
- var_dump(nl2br("\n\r\r\n\r\r\r\r"));
- var_dump(nl2br("\n\r\n\n\r\n\r\r\n\r\n"));
- var_dump(nl2br("\n\r\n\n\n\n\r\r\r\r\n\r"));
-
-?>
---EXPECT--
-string(4) "test"
-string(0) ""
-string(0) ""
-string(8) "<br />
-"
-string(7) "<br />
-"
-string(7) "<br />
-"
-string(8) "<br />
-
-"
-string(44) "<br />
-
-<br />
-<br />
-<br />
-<br />
-<br />
-"
-string(47) "<br />
-
-<br />
-<br />
-
-<br />
-
-<br />
-<br />
-"
-string(66) "<br />
-
-<br />
-<br />
-<br />
-<br />
-
-<br />
-<br />
-<br />
-<br />
-"
diff --git a/ext/standard/tests/strings/sha1.phpt b/ext/standard/tests/strings/sha1.phpt
deleted file mode 100644
index c405eedde5..0000000000
--- a/ext/standard/tests/strings/sha1.phpt
+++ /dev/null
@@ -1,14 +0,0 @@
---TEST--
-sha1() with ASCII output
---FILE--
-<?php
-echo sha1("abc")."\n";
-echo sha1("abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq")."\n";
-echo sha1("a")."\n";
-echo sha1("0123456701234567012345670123456701234567012345670123456701234567")."\n";
-?>
---EXPECT--
-a9993e364706816aba3e25717850c26c9cd0d89d
-84983e441c3bd26ebaae4aa1f95129e5e54670f1
-86f7e437faa5a7fce15d1ddcb9eaeaea377667b8
-e0c094e867ef46c350ef54a7f59dd60bed92ae83
diff --git a/ext/standard/tests/strings/sha1raw.phpt b/ext/standard/tests/strings/sha1raw.phpt
deleted file mode 100644
index 6777cab3ee..0000000000
--- a/ext/standard/tests/strings/sha1raw.phpt
+++ /dev/null
@@ -1,14 +0,0 @@
---TEST--
-sha1() with RAW output
---FILE--
-<?php
-echo bin2hex(sha1("abc", TRUE))."\n";
-echo bin2hex(sha1("abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq", TRUE))."\n";
-echo bin2hex(sha1("a", TRUE))."\n";
-echo bin2hex(sha1("0123456701234567012345670123456701234567012345670123456701234567", TRUE))."\n";
-?>
---EXPECT--
-a9993e364706816aba3e25717850c26c9cd0d89d
-84983e441c3bd26ebaae4aa1f95129e5e54670f1
-86f7e437faa5a7fce15d1ddcb9eaeaea377667b8
-e0c094e867ef46c350ef54a7f59dd60bed92ae83
diff --git a/ext/standard/tests/strings/sprintf_f.phpt b/ext/standard/tests/strings/sprintf_f.phpt
deleted file mode 100755
index 6135270d23..0000000000
--- a/ext/standard/tests/strings/sprintf_f.phpt
+++ /dev/null
@@ -1,40 +0,0 @@
---TEST--
-sprintf %f
---FILE--
-<?php
-
-var_dump(sprintf("%3.2f", 1.2));
-var_dump(sprintf("%-3.2f", 1.2));
-var_dump(sprintf("%03.2f", 1.2));
-var_dump(sprintf("%-03.2f", 1.2));
-echo "\n";
-var_dump(sprintf("%5.2f", 3.4));
-var_dump(sprintf("%-5.2f", 3.4));
-var_dump(sprintf("%05.2f", 3.4));
-var_dump(sprintf("%-05.2f", 3.4));
-echo "\n";
-var_dump(sprintf("%7.2f", -5.6));
-var_dump(sprintf("%-7.2f", -5.6));
-var_dump(sprintf("%07.2f", -5.6));
-var_dump(sprintf("%-07.2f", -5.6));
-echo "\n";
-var_dump(sprintf("%3.4f", 1.2345678e99));
-
-?>
---EXPECTF--
-string(4) "1.20"
-string(4) "1.20"
-string(4) "1.20"
-string(4) "1.20"
-
-string(5) " 3.40"
-string(5) "3.40 "
-string(5) "03.40"
-string(5) "3.400"
-
-string(7) " -5.60"
-string(7) "-5.60 "
-string(7) "-005.60"
-string(7) "-5.6000"
-
-string(105) "12345678%d00000000000000000000000000000000000000000000000000.0000" \ No newline at end of file
diff --git a/ext/standard/tests/strings/str_repeat.phpt b/ext/standard/tests/strings/str_repeat.phpt
deleted file mode 100644
index f91bd31b67..0000000000
--- a/ext/standard/tests/strings/str_repeat.phpt
+++ /dev/null
@@ -1,27 +0,0 @@
---TEST--
-str_repeat() function
---FILE--
-<?php
-$input = array('a', 'foo', 'barbazbax');
-foreach($input AS $i) {
- for($n=0; $n<5; $n++) {
- echo str_repeat($i, $n)."\n";
- }
-}
-?>
---EXPECT--
-
-a
-aa
-aaa
-aaaa
-
-foo
-foofoo
-foofoofoo
-foofoofoofoo
-
-barbazbax
-barbazbaxbarbazbax
-barbazbaxbarbazbaxbarbazbax
-barbazbaxbarbazbaxbarbazbaxbarbazbax
diff --git a/ext/standard/tests/strings/str_shuffle.phpt b/ext/standard/tests/strings/str_shuffle.phpt
deleted file mode 100644
index 32f387287b..0000000000
--- a/ext/standard/tests/strings/str_shuffle.phpt
+++ /dev/null
@@ -1,12 +0,0 @@
---TEST--
-Testing str_shuffle.
---FILE--
-<?php
-/* Do not change this test it is a README.TESTING example. */
-$s = '123';
-var_dump(str_shuffle($s));
-var_dump($s);
-?>
---EXPECTF--
-string(3) %s
-string(3) "123" \ No newline at end of file
diff --git a/ext/standard/tests/strings/strcspn.phpt b/ext/standard/tests/strings/strcspn.phpt
deleted file mode 100644
index 88bcee5c19..0000000000
--- a/ext/standard/tests/strings/strcspn.phpt
+++ /dev/null
@@ -1,18 +0,0 @@
---TEST--
-Test strcspn() behavior
---FILE--
-<?php
-$a = "22222222aaaa bbb1111 cccc";
-$b = "1234";
-var_dump($a);
-var_dump($b);
-var_dump(strcspn($a,$b));
-var_dump(strcspn($a,$b,9));
-var_dump(strcspn($a,$b,9,6));
-?>
---EXPECT--
-string(25) "22222222aaaa bbb1111 cccc"
-string(4) "1234"
-int(0)
-int(7)
-int(6)
diff --git a/ext/standard/tests/strings/strings001.phpt b/ext/standard/tests/strings/strings001.phpt
deleted file mode 100644
index 87f8489b8a..0000000000
--- a/ext/standard/tests/strings/strings001.phpt
+++ /dev/null
@@ -1,12 +0,0 @@
---TEST--
-Test whether strstr() and strrchr() are binary safe.
---FILE--
-<?php
-/* Do not change this test it is a README.TESTING example. */
-$s = "alabala nica".chr(0)."turska panica";
-var_dump(strstr($s, "nic"));
-var_dump(strrchr($s," nic"));
-?>
---EXPECTREGEX--
-string\(18\) \"nica\x00turska panica\"
-string\(19\) \" nica\x00turska panica\"
diff --git a/ext/standard/tests/strings/strip_tags.phpt b/ext/standard/tests/strings/strip_tags.phpt
deleted file mode 100644
index 7beebf1b0c..0000000000
--- a/ext/standard/tests/strings/strip_tags.phpt
+++ /dev/null
@@ -1,27 +0,0 @@
---TEST--
-strip_tags() function
---FILE--
-<?php
- echo strip_tags('NEAT <? cool < blah ?> STUFF');
- echo "\n";
- echo strip_tags('NEAT <? cool > blah ?> STUFF');
- echo "\n";
- echo strip_tags('NEAT <!-- cool < blah --> STUFF');
- echo "\n";
- echo strip_tags('NEAT <!-- cool > blah --> STUFF');
- echo "\n";
- echo strip_tags('NEAT <? echo \"\\\"\"?> STUFF');
- echo "\n";
- echo strip_tags('NEAT <? echo \'\\\'\'?> STUFF');
- echo "\n";
- echo strip_tags('TESTS ?!!?!?!!!?!!');
- echo "\n";
-?>
---EXPECT--
-NEAT STUFF
-NEAT STUFF
-NEAT STUFF
-NEAT STUFF
-NEAT STUFF
-NEAT STUFF
-TESTS ?!!?!?!!!?!!
diff --git a/ext/standard/tests/strings/strpos.phpt b/ext/standard/tests/strings/strpos.phpt
deleted file mode 100644
index 4d30e98229..0000000000
--- a/ext/standard/tests/strings/strpos.phpt
+++ /dev/null
@@ -1,30 +0,0 @@
---TEST--
-strpos() function
---FILE--
-<?php
- var_dump(strpos("test string", "test"));
- var_dump(strpos("test string", "string"));
- var_dump(strpos("test string", "strin"));
- var_dump(strpos("test string", "t s"));
- var_dump(strpos("test string", "g"));
- var_dump(strpos("te".chr(0)."st", chr(0)));
- var_dump(strpos("tEst", "test"));
- var_dump(strpos("teSt", "test"));
- var_dump(@strpos("", ""));
- var_dump(@strpos("a", ""));
- var_dump(@strpos("", "a"));
- var_dump(@strpos("\\\\a", "\\a"));
-?>
---EXPECT--
-int(0)
-int(5)
-int(5)
-int(3)
-int(10)
-int(2)
-bool(false)
-bool(false)
-bool(false)
-bool(false)
-bool(false)
-int(1)
diff --git a/ext/standard/tests/strings/strrev.phpt b/ext/standard/tests/strings/strrev.phpt
deleted file mode 100644
index 321aca5bd7..0000000000
--- a/ext/standard/tests/strings/strrev.phpt
+++ /dev/null
@@ -1,19 +0,0 @@
---TEST--
-strrev() function
---FILE--
-<?php
- $i = 0;
- $str = '';
-
- while ($i<256) {
- $str .= chr($i++);
- }
-
- var_dump(md5(strrev($str)));
- var_dump(strrev(NULL));
- var_dump(strrev(""));
-?>
---EXPECT--
-string(32) "ec6df70f2569891eae50321a9179eb82"
-string(0) ""
-string(0) ""
diff --git a/ext/standard/tests/strings/strripos.phpt b/ext/standard/tests/strings/strripos.phpt
deleted file mode 100644
index eb4e70bd35..0000000000
--- a/ext/standard/tests/strings/strripos.phpt
+++ /dev/null
@@ -1,33 +0,0 @@
---TEST--
-strripos() function
---FILE--
-<?php
- var_dump(strripos("test test string", "test"));
- var_dump(strripos("test string sTring", "string"));
- var_dump(strripos("test strip string strand", "str"));
- var_dump(strripos("I am what I am and that's all what I am", "am", -3));
- var_dump(strripos("test string", "g"));
- var_dump(strripos("te".chr(0)."st", chr(0)));
- var_dump(strripos("tEst", "test"));
- var_dump(strripos("teSt", "test"));
- var_dump(@strripos("foo", "f", 1));
- var_dump(@strripos("", ""));
- var_dump(@strripos("a", ""));
- var_dump(@strripos("", "a"));
- var_dump(@strripos("\\\\a", "\\a"));
-?>
---EXPECT--
-int(5)
-int(12)
-int(18)
-int(12)
-int(10)
-int(2)
-int(0)
-int(0)
-bool(false)
-bool(false)
-bool(false)
-bool(false)
-int(1)
-
diff --git a/ext/standard/tests/strings/strrpos.phpt b/ext/standard/tests/strings/strrpos.phpt
deleted file mode 100644
index 691f67e599..0000000000
--- a/ext/standard/tests/strings/strrpos.phpt
+++ /dev/null
@@ -1,32 +0,0 @@
---TEST--
-strrpos() function
---FILE--
-<?php
- var_dump(strrpos("test test string", "test"));
- var_dump(strrpos("test string sTring", "string"));
- var_dump(strrpos("test strip string strand", "str"));
- var_dump(strrpos("I am what I am and that's all what I am", "am", -3));
- var_dump(strrpos("test string", "g"));
- var_dump(strrpos("te".chr(0)."st", chr(0)));
- var_dump(strrpos("tEst", "test"));
- var_dump(strrpos("teSt", "test"));
- var_dump(@strrpos("foo", "f", 1));
- var_dump(@strrpos("", ""));
- var_dump(@strrpos("a", ""));
- var_dump(@strrpos("", "a"));
- var_dump(@strrpos("\\\\a", "\\a"));
-?>
---EXPECT--
-int(5)
-int(5)
-int(18)
-int(12)
-int(10)
-int(2)
-bool(false)
-bool(false)
-bool(false)
-bool(false)
-bool(false)
-bool(false)
-int(1)
diff --git a/ext/standard/tests/strings/strspn.phpt b/ext/standard/tests/strings/strspn.phpt
deleted file mode 100644
index 9f498b84d6..0000000000
--- a/ext/standard/tests/strings/strspn.phpt
+++ /dev/null
@@ -1,18 +0,0 @@
---TEST--
-Test strspn() behavior
---FILE--
-<?php
-$a = "22222222aaaa bbb1111 cccc";
-$b = "1234";
-var_dump($a);
-var_dump($b);
-var_dump(strspn($a,$b));
-var_dump(strspn($a,$b,2));
-var_dump(strspn($a,$b,2,3));
-?>
---EXPECT--
-string(25) "22222222aaaa bbb1111 cccc"
-string(4) "1234"
-int(8)
-int(6)
-int(3)
diff --git a/ext/standard/tests/strings/strstr.phpt b/ext/standard/tests/strings/strstr.phpt
deleted file mode 100644
index 10ed33ddc7..0000000000
--- a/ext/standard/tests/strings/strstr.phpt
+++ /dev/null
@@ -1,30 +0,0 @@
---TEST--
-strstr() function
---FILE--
-<?php
- var_dump(strstr("test string", "test"));
- var_dump(strstr("test string", "string"));
- var_dump(strstr("test string", "strin"));
- var_dump(strstr("test string", "t s"));
- var_dump(strstr("test string", "g"));
- var_dump(md5(strstr("te".chr(0)."st", chr(0))));
- var_dump(strstr("tEst", "test"));
- var_dump(strstr("teSt", "test"));
- var_dump(@strstr("", ""));
- var_dump(@strstr("a", ""));
- var_dump(@strstr("", "a"));
- var_dump(md5(@strstr("\\\\a\\", "\\a")));
-?>
---EXPECT--
-string(11) "test string"
-string(6) "string"
-string(6) "string"
-string(8) "t string"
-string(1) "g"
-string(32) "7272696018bdeb2c9a3f8d01fc2a9273"
-bool(false)
-bool(false)
-bool(false)
-bool(false)
-bool(false)
-string(32) "6ec19f52f0766c463f3bb240f4396913"
diff --git a/ext/standard/tests/strings/strtoupper.phpt b/ext/standard/tests/strings/strtoupper.phpt
deleted file mode 100644
index 41bc5e6080..0000000000
--- a/ext/standard/tests/strings/strtoupper.phpt
+++ /dev/null
@@ -1,20 +0,0 @@
---TEST--
-Test strtoupper on non-ASCII characters
---SKIPIF--
-<?php
-if (!setlocale(LC_CTYPE, "de_DE", "de", "german", "ge", "de_DE.ISO8859-1", "ISO8859-1")) {
- die("skip locale needed for this test is not supported on this platform");
-}
-?>
---FILE--
-<?php
-$chars = "äöü";
-// Not sure which is most portable. BSD's answer to
-// this one. A small array based on PHP_OS should
-// cover a majority of systems and makes the problem
-// of locales transparent for the end user.
-setlocale(LC_CTYPE, "de_DE", "de", "german", "ge", "de_DE.ISO8859-1", "ISO8859-1");
-echo strtoupper($chars)."\n";
-?>
---EXPECT--
-ÄÖÜ
diff --git a/ext/standard/tests/strings/strtr.phpt b/ext/standard/tests/strings/strtr.phpt
deleted file mode 100644
index 80ed722b8e..0000000000
--- a/ext/standard/tests/strings/strtr.phpt
+++ /dev/null
@@ -1,10 +0,0 @@
---TEST--
-strtr() function
---FILE--
-<?php
-/* Do not change this test it is a README.TESTING example. */
-$trans = array("hello"=>"hi", "hi"=>"hello", "a"=>"A", "world"=>"planet");
-var_dump(strtr("# hi all, I said hello world! #", $trans));
-?>
---EXPECT--
-string(32) "# hello All, I sAid hi planet! #" \ No newline at end of file
diff --git a/ext/standard/tests/strings/substr_count.phpt b/ext/standard/tests/strings/substr_count.phpt
deleted file mode 100644
index 636590bb73..0000000000
--- a/ext/standard/tests/strings/substr_count.phpt
+++ /dev/null
@@ -1,24 +0,0 @@
---TEST--
-substr_count() function
---FILE--
-<?php
- var_dump(@substr_count("", ""));
- var_dump(@substr_count("a", ""));
- var_dump(@substr_count("", "a"));
- var_dump(@substr_count("", "a"));
- var_dump(@substr_count("", chr(0)));
-
- $a = str_repeat("abcacba", 100);
- var_dump(@substr_count($a, "bca"));
-
- $a = str_repeat("abcacbabca", 100);
- var_dump(@substr_count($a, "bca"));
-?>
---EXPECT--
-bool(false)
-bool(false)
-int(0)
-int(0)
-int(0)
-int(100)
-int(200)
diff --git a/ext/standard/tests/strings/substr_replace.phpt b/ext/standard/tests/strings/substr_replace.phpt
deleted file mode 100644
index 27620de964..0000000000
--- a/ext/standard/tests/strings/substr_replace.phpt
+++ /dev/null
@@ -1,810 +0,0 @@
---TEST--
-substr_replace() function
---FILE--
-<?php
-$str = "try this";
-$repl = "bala ";
-$start = 2;
-echo "\n";
-
-
-echo "substr_replace('$str', '$repl', $start)\n";
-var_dump(substr_replace($str, $repl, $start));
-echo "\n";
-
-$len = 3;
-echo "substr_replace('$str', '$repl', $start, $len)\n";
-var_dump(substr_replace($str, $repl, $start, $len));
-echo "\n";
-
-$len = 0;
-echo "substr_replace('$str', '$repl', $start, $len)\n";
-var_dump(substr_replace($str, $repl, $start, $len));
-echo "\n";
-
-$len = -2;
-echo "substr_replace('$str', '$repl', $start, $len)\n";
-var_dump(substr_replace($str, $repl, $start, $len));
-echo "\n";
-echo "\n";
-echo "\n";
-
-
-$str = "try this";
-$repl = array("bala ");
-$start = 4;
-$len = 3;
-echo str_replace("\n","","substr_replace(".var_export($str,1).", ".var_export($repl,1).", ".var_export($start,1)."")."\n";
-var_dump(substr_replace($str, $repl, $start))."\n";
-echo "\n";
-echo str_replace("\n","","substr_replace(".var_export($str,1).", ".var_export($repl,1).", ".var_export($start,1)."")."\n";
-var_dump(substr_replace($str, $repl, $start, $len))."\n";
-echo "\n";
-
-echo "\n";
-echo "\n";
-echo "\n";
-
-
-
-$str = array("ala portokala");
-$repl = array("bala ");
-$start = array(4);
-$len = array(3);
-echo str_replace("\n","","substr_replace(".var_export($str,1).", ".var_export($repl,1).", ".var_export($start,1)."")."\n";
-var_dump(substr_replace($str, $repl, $start))."\n";
-echo "\n";
-
-$len = array(3);
-echo str_replace("\n","","substr_replace(".var_export($str,1).", ".var_export($repl,1).", ".var_export($start,1).", ".var_export($len,1).")")."\n";
-var_dump(substr_replace($str, $repl, $start, $len))."\n";
-echo "\n";
-
-$len = array(0);
-echo str_replace("\n","","substr_replace(".var_export($str,1).", ".var_export($repl,1).", ".var_export($start,1).", ".var_export($len,1).")")."\n";
-var_dump(substr_replace($str, $repl, $start, $len))."\n";
-echo "\n";
-
-$len = array(-2);
-echo str_replace("\n","","substr_replace(".var_export($str,1).", ".var_export($repl,1).", ".var_export($start,1).", ".var_export($len,1).")")."\n";
-var_dump(substr_replace($str, $repl, $start, $len))."\n";
-echo "\n";
-echo "\n";
-echo "\n";
-
-
-
-
-$str = array("ala portokala");
-$repl = "bala ";
-$start = 4;
-$len = 3;
-echo str_replace("\n","","substr_replace(".var_export($str,1).", ".var_export($repl,1).",".var_export($start,1).")")."\n";
-var_dump(substr_replace($str, $repl, $start))."\n";
-echo "\n";
-echo "\n";
-
-
-
-$str = array("ala portokala", "try this");
-$repl = array("bala ");
-$start = 4;
-$len = 3;
-echo str_replace("\n","","substr_replace(".var_export($str,1).", ".var_export($repl,1).",".var_export($start,1).", ".var_export($len,1).")")."\n";
-var_dump(substr_replace($str, $repl, $start, $len))."\n";
-echo "\n";
-echo "\n";
-
-
-$str = array("ala portokala", "try this");
-$repl = "bala ";
-$start = 4;
-$len = 3;
-echo str_replace("\n","","substr_replace(".var_export($str,1).", ".var_export($repl,1).",".var_export($start,1).", ".var_export($len,1).")")."\n";
-var_dump(substr_replace($str, $repl, $start, $len))."\n";
-echo "\n";
-
-
-$str = array("ala portokala", "try this");
-$repl = array("bala ");
-$start = 4;
-$len = 0;
-echo str_replace("\n","","substr_replace(".var_export($str,1).", ".var_export($repl,1).",".var_export($start,1).", ".var_export($len,1).")")."\n";
-var_dump(substr_replace($str, $repl, $start, $len))."\n";
-echo "\n";
-echo "\n";
-
-
-$str = array("ala portokala", "try this");
-$repl = "bala ";
-$start = 4;
-$len = 0;
-echo str_replace("\n","","substr_replace(".var_export($str,1).", ".var_export($repl,1).",".var_export($start,1).", ".var_export($len,1).")")."\n";
-var_dump(substr_replace($str, $repl, $start, $len))."\n";
-echo "\n";
-
-$str = array("ala portokala", "try this");
-$repl = array("bala ");
-$start = 4;
-$len = -2;
-echo str_replace("\n","","substr_replace(".var_export($str,1).", ".var_export($repl,1).",".var_export($start,1).", ".var_export($len,1).")")."\n";
-var_dump(substr_replace($str, $repl, $start, $len))."\n";
-echo "\n";
-echo "\n";
-
-
-$str = array("ala portokala", "try this");
-$repl = "bala ";
-$start = 4;
-$len = -2;
-echo str_replace("\n","","substr_replace(".var_export($str,1).", ".var_export($repl,1).",".var_export($start,1).", ".var_export($len,1).")")."\n";
-var_dump(substr_replace($str, $repl, $start, $len))."\n";
-echo "\n";
-echo "\n";
-echo "\n";
-echo "\n";
-echo "\n";
-echo "\n";
-
-
-
-
-$str = array("ala portokala");
-$repl = "bala ";
-$start = array(4);
-$len = 3;
-echo str_replace("\n","","substr_replace(".var_export($str,1).", ".var_export($repl,1).",".var_export($start,1).")")."\n";
-var_dump(substr_replace($str, $repl, $start))."\n";
-echo "\n";
-echo "\n";
-
-
-
-$str = array("ala portokala", "try this");
-$repl = array("bala ");
-$start = array(4);
-$len = 3;
-echo str_replace("\n","","substr_replace(".var_export($str,1).", ".var_export($repl,1).",".var_export($start,1).", ".var_export($len,1).")")."\n";
-var_dump(substr_replace($str, $repl, $start, $len))."\n";
-echo "\n";
-echo "\n";
-
-
-$str = array("ala portokala", "try this");
-$repl = "bala ";
-$start = array(4);
-$len = 3;
-echo str_replace("\n","","substr_replace(".var_export($str,1).", ".var_export($repl,1).",".var_export($start,1).", ".var_export($len,1).")")."\n";
-var_dump(substr_replace($str, $repl, $start, $len))."\n";
-echo "\n";
-
-
-$str = array("ala portokala", "try this");
-$repl = array("bala ");
-$start = array(4);
-$len = 0;
-echo str_replace("\n","","substr_replace(".var_export($str,1).", ".var_export($repl,1).",".var_export($start,1).", ".var_export($len,1).")")."\n";
-var_dump(substr_replace($str, $repl, $start, $len))."\n";
-echo "\n";
-echo "\n";
-
-
-$str = array("ala portokala", "try this");
-$repl = "bala ";
-$start = array(4);
-$len = 0;
-echo str_replace("\n","","substr_replace(".var_export($str,1).", ".var_export($repl,1).",".var_export($start,1).", ".var_export($len,1).")")."\n";
-var_dump(substr_replace($str, $repl, $start, $len))."\n";
-echo "\n";
-
-$str = array("ala portokala", "try this");
-$repl = array("bala ");
-$start = array(4);
-$len = -2;
-echo str_replace("\n","","substr_replace(".var_export($str,1).", ".var_export($repl,1).",".var_export($start,1).", ".var_export($len,1).")")."\n";
-var_dump(substr_replace($str, $repl, $start, $len))."\n";
-echo "\n";
-echo "\n";
-
-
-$str = array("ala portokala", "try this");
-$repl = "bala ";
-$start = array(4);
-$len = -2;
-echo str_replace("\n","","substr_replace(".var_export($str,1).", ".var_export($repl,1).",".var_export($start,1).", ".var_export($len,1).")")."\n";
-var_dump(substr_replace($str, $repl, $start, $len))."\n";
-echo "\n";
-
-
-echo "\n";
-echo "\n";
-echo "\n";
-echo "\n";
-echo "\n";
-echo "\n";
-
-
-$str = array("ala portokala");
-$repl = "bala ";
-$start = array(4,2);
-$len = 3;
-echo str_replace("\n","","substr_replace(".var_export($str,1).", ".var_export($repl,1).",".var_export($start,1).")")."\n";
-var_dump(substr_replace($str, $repl, $start))."\n";
-echo "\n";
-echo "\n";
-
-
-
-$str = array("ala portokala", "try this");
-$repl = array("bala ");
-$start = array(4,2);
-$len = 3;
-echo str_replace("\n","","substr_replace(".var_export($str,1).", ".var_export($repl,1).",".var_export($start,1).", ".var_export($len,1).")")."\n";
-var_dump(substr_replace($str, $repl, $start, $len))."\n";
-echo "\n";
-echo "\n";
-
-
-$str = array("ala portokala", "try this");
-$repl = "bala ";
-$start = array(4,2);
-$len = 3;
-echo str_replace("\n","","substr_replace(".var_export($str,1).", ".var_export($repl,1).",".var_export($start,1).", ".var_export($len,1).")")."\n";
-var_dump(substr_replace($str, $repl, $start, $len))."\n";
-echo "\n";
-
-
-$str = array("ala portokala", "try this");
-$repl = array("bala ");
-$start = array(4,2);
-$len = 0;
-echo str_replace("\n","","substr_replace(".var_export($str,1).", ".var_export($repl,1).",".var_export($start,1).", ".var_export($len,1).")")."\n";
-var_dump(substr_replace($str, $repl, $start, $len))."\n";
-echo "\n";
-echo "\n";
-
-
-$str = array("ala portokala", "try this");
-$repl = "bala ";
-$start = array(4,2);
-$len = 0;
-echo str_replace("\n","","substr_replace(".var_export($str,1).", ".var_export($repl,1).",".var_export($start,1).", ".var_export($len,1).")")."\n";
-var_dump(substr_replace($str, $repl, $start, $len))."\n";
-echo "\n";
-
-$str = array("ala portokala", "try this");
-$repl = array("bala ");
-$start = array(4,2);
-$len = -2;
-echo str_replace("\n","","substr_replace(".var_export($str,1).", ".var_export($repl,1).",".var_export($start,1).", ".var_export($len,1).")")."\n";
-var_dump(substr_replace($str, $repl, $start, $len))."\n";
-echo "\n";
-echo "\n";
-
-
-$str = array("ala portokala", "try this");
-$repl = "bala ";
-$start = array(4,2);
-$len = -2;
-echo str_replace("\n","","substr_replace(".var_export($str,1).", ".var_export($repl,1).",".var_export($start,1).", ".var_export($len,1).")")."\n";
-var_dump(substr_replace($str, $repl, $start, $len))."\n";
-echo "\n";
-
-
-
-echo "\n";
-echo "\n";
-echo "\n";
-echo "\n";
-echo "\n";
-echo "\n";
-
-
-$str = array("ala portokala");
-$repl = "bala ";
-$start = array(4,2);
-$len = array(3);
-echo str_replace("\n","","substr_replace(".var_export($str,1).", ".var_export($repl,1).",".var_export($start,1).")")."\n";
-var_dump(substr_replace($str, $repl, $start))."\n";
-echo "\n";
-echo "\n";
-
-
-
-$str = array("ala portokala", "try this");
-$repl = array("bala ");
-$start = array(4,2);
-$len = array(3);
-echo str_replace("\n","","substr_replace(".var_export($str,1).", ".var_export($repl,1).",".var_export($start,1).", ".var_export($len,1).")")."\n";
-var_dump(substr_replace($str, $repl, $start, $len))."\n";
-echo "\n";
-echo "\n";
-
-
-$str = array("ala portokala", "try this");
-$repl = "bala ";
-$start = array(4,2);
-$len = array(3);
-echo str_replace("\n","","substr_replace(".var_export($str,1).", ".var_export($repl,1).",".var_export($start,1).", ".var_export($len,1).")")."\n";
-var_dump(substr_replace($str, $repl, $start, $len))."\n";
-echo "\n";
-
-
-$str = array("ala portokala", "try this");
-$repl = array("bala ");
-$start = array(4,2);
-$len = array(0);
-echo str_replace("\n","","substr_replace(".var_export($str,1).", ".var_export($repl,1).",".var_export($start,1).", ".var_export($len,1).")")."\n";
-var_dump(substr_replace($str, $repl, $start, $len))."\n";
-echo "\n";
-echo "\n";
-
-
-$str = array("ala portokala", "try this");
-$repl = "bala ";
-$start = array(4,2);
-$len = array(0);
-echo str_replace("\n","","substr_replace(".var_export($str,1).", ".var_export($repl,1).",".var_export($start,1).", ".var_export($len,1).")")."\n";
-var_dump(substr_replace($str, $repl, $start, $len))."\n";
-echo "\n";
-
-$str = array("ala portokala", "try this");
-$repl = array("bala ");
-$start = array(4,2);
-$len = array(-2);
-echo str_replace("\n","","substr_replace(".var_export($str,1).", ".var_export($repl,1).",".var_export($start,1).", ".var_export($len,1).")")."\n";
-var_dump(substr_replace($str, $repl, $start, $len))."\n";
-echo "\n";
-echo "\n";
-
-
-$str = array("ala portokala", "try this");
-$repl = "bala ";
-$start = array(4,2);
-$len = array(-2);
-echo str_replace("\n","","substr_replace(".var_export($str,1).", ".var_export($repl,1).",".var_export($start,1).", ".var_export($len,1).")")."\n";
-var_dump(substr_replace($str, $repl, $start, $len))."\n";
-echo "\n";
-
-
-echo "\n";
-echo "\n";
-echo "\n";
-echo "\n";
-echo "\n";
-echo "\n";
-
-
-$str = array("ala portokala");
-$repl = "bala ";
-$start = array(4,2);
-$len = array(3,2);
-echo str_replace("\n","","substr_replace(".var_export($str,1).", ".var_export($repl,1).",".var_export($start,1).")")."\n";
-var_dump(substr_replace($str, $repl, $start))."\n";
-echo "\n";
-echo "\n";
-
-
-
-$str = array("ala portokala", "try this");
-$repl = array("bala ");
-$start = array(4,2);
-$len = array(3,2);
-echo str_replace("\n","","substr_replace(".var_export($str,1).", ".var_export($repl,1).",".var_export($start,1).", ".var_export($len,1).")")."\n";
-var_dump(substr_replace($str, $repl, $start, $len))."\n";
-echo "\n";
-echo "\n";
-
-
-$str = array("ala portokala", "try this");
-$repl = "bala ";
-$start = array(4,2);
-$len = array(3,2);
-echo str_replace("\n","","substr_replace(".var_export($str,1).", ".var_export($repl,1).",".var_export($start,1).", ".var_export($len,1).")")."\n";
-var_dump(substr_replace($str, $repl, $start, $len))."\n";
-echo "\n";
-
-
-$str = array("ala portokala", "try this");
-$repl = array("bala ");
-$start = array(4,2);
-$len = array(0,0);
-echo str_replace("\n","","substr_replace(".var_export($str,1).", ".var_export($repl,1).",".var_export($start,1).", ".var_export($len,1).")")."\n";
-var_dump(substr_replace($str, $repl, $start, $len))."\n";
-echo "\n";
-echo "\n";
-
-
-$str = array("ala portokala", "try this");
-$repl = "bala ";
-$start = array(4,2);
-$len = array(0,0);
-echo str_replace("\n","","substr_replace(".var_export($str,1).", ".var_export($repl,1).",".var_export($start,1).", ".var_export($len,1).")")."\n";
-var_dump(substr_replace($str, $repl, $start, $len))."\n";
-echo "\n";
-
-$str = array("ala portokala", "try this");
-$repl = array("bala ");
-$start = array(4,2);
-$len = array(-2,-3);
-echo str_replace("\n","","substr_replace(".var_export($str,1).", ".var_export($repl,1).",".var_export($start,1).", ".var_export($len,1).")")."\n";
-var_dump(substr_replace($str, $repl, $start, $len))."\n";
-echo "\n";
-echo "\n";
-
-
-$str = array("ala portokala", "try this");
-$repl = "bala ";
-$start = array(4,2);
-$len = array(-2,-3);
-echo str_replace("\n","","substr_replace(".var_export($str,1).", ".var_export($repl,1).",".var_export($start,1).", ".var_export($len,1).")")."\n";
-var_dump(substr_replace($str, $repl, $start, $len))."\n";
-echo "\n";
-
-
-
-
-?>
---EXPECT--
-substr_replace('try this', 'bala ', 2)
-string(7) "trbala "
-
-substr_replace('try this', 'bala ', 2, 3)
-string(10) "trbala his"
-
-substr_replace('try this', 'bala ', 2, 0)
-string(13) "trbala y this"
-
-substr_replace('try this', 'bala ', 2, -2)
-string(9) "trbala is"
-
-
-
-substr_replace('try this', array ( 0 => 'bala ',), 4
-string(9) "try bala "
-
-substr_replace('try this', array ( 0 => 'bala ',), 4
-string(10) "try bala s"
-
-
-
-
-substr_replace(array ( 0 => 'ala portokala',), array ( 0 => 'bala ',), array ( 0 => 4,)
-array(1) {
- [0]=>
- string(9) "ala bala "
-}
-
-substr_replace(array ( 0 => 'ala portokala',), array ( 0 => 'bala ',), array ( 0 => 4,), array ( 0 => 3,))
-array(1) {
- [0]=>
- string(15) "ala bala tokala"
-}
-
-substr_replace(array ( 0 => 'ala portokala',), array ( 0 => 'bala ',), array ( 0 => 4,), array ( 0 => 0,))
-array(1) {
- [0]=>
- string(18) "ala bala portokala"
-}
-
-substr_replace(array ( 0 => 'ala portokala',), array ( 0 => 'bala ',), array ( 0 => 4,), array ( 0 => -2,))
-array(1) {
- [0]=>
- string(11) "ala bala la"
-}
-
-
-
-substr_replace(array ( 0 => 'ala portokala',), 'bala ',4)
-array(1) {
- [0]=>
- string(9) "ala bala "
-}
-
-
-substr_replace(array ( 0 => 'ala portokala', 1 => 'try this',), array ( 0 => 'bala ',),4, 3)
-array(2) {
- [0]=>
- string(15) "ala bala tokala"
- [1]=>
- string(5) "try s"
-}
-
-
-substr_replace(array ( 0 => 'ala portokala', 1 => 'try this',), 'bala ',4, 3)
-array(2) {
- [0]=>
- string(15) "ala bala tokala"
- [1]=>
- string(10) "try bala s"
-}
-
-substr_replace(array ( 0 => 'ala portokala', 1 => 'try this',), array ( 0 => 'bala ',),4, 0)
-array(2) {
- [0]=>
- string(18) "ala bala portokala"
- [1]=>
- string(8) "try this"
-}
-
-
-substr_replace(array ( 0 => 'ala portokala', 1 => 'try this',), 'bala ',4, 0)
-array(2) {
- [0]=>
- string(18) "ala bala portokala"
- [1]=>
- string(13) "try bala this"
-}
-
-substr_replace(array ( 0 => 'ala portokala', 1 => 'try this',), array ( 0 => 'bala ',),4, -2)
-array(2) {
- [0]=>
- string(11) "ala bala la"
- [1]=>
- string(6) "try is"
-}
-
-
-substr_replace(array ( 0 => 'ala portokala', 1 => 'try this',), 'bala ',4, -2)
-array(2) {
- [0]=>
- string(11) "ala bala la"
- [1]=>
- string(11) "try bala is"
-}
-
-
-
-
-
-
-substr_replace(array ( 0 => 'ala portokala',), 'bala ',array ( 0 => 4,))
-array(1) {
- [0]=>
- string(9) "ala bala "
-}
-
-
-substr_replace(array ( 0 => 'ala portokala', 1 => 'try this',), array ( 0 => 'bala ',),array ( 0 => 4,), 3)
-array(2) {
- [0]=>
- string(15) "ala bala tokala"
- [1]=>
- string(5) " this"
-}
-
-
-substr_replace(array ( 0 => 'ala portokala', 1 => 'try this',), 'bala ',array ( 0 => 4,), 3)
-array(2) {
- [0]=>
- string(15) "ala bala tokala"
- [1]=>
- string(10) "bala this"
-}
-
-substr_replace(array ( 0 => 'ala portokala', 1 => 'try this',), array ( 0 => 'bala ',),array ( 0 => 4,), 0)
-array(2) {
- [0]=>
- string(18) "ala bala portokala"
- [1]=>
- string(8) "try this"
-}
-
-
-substr_replace(array ( 0 => 'ala portokala', 1 => 'try this',), 'bala ',array ( 0 => 4,), 0)
-array(2) {
- [0]=>
- string(18) "ala bala portokala"
- [1]=>
- string(13) "bala try this"
-}
-
-substr_replace(array ( 0 => 'ala portokala', 1 => 'try this',), array ( 0 => 'bala ',),array ( 0 => 4,), -2)
-array(2) {
- [0]=>
- string(11) "ala bala la"
- [1]=>
- string(2) "is"
-}
-
-
-substr_replace(array ( 0 => 'ala portokala', 1 => 'try this',), 'bala ',array ( 0 => 4,), -2)
-array(2) {
- [0]=>
- string(11) "ala bala la"
- [1]=>
- string(7) "bala is"
-}
-
-
-
-
-
-
-
-substr_replace(array ( 0 => 'ala portokala',), 'bala ',array ( 0 => 4, 1 => 2,))
-array(1) {
- [0]=>
- string(9) "ala bala "
-}
-
-
-substr_replace(array ( 0 => 'ala portokala', 1 => 'try this',), array ( 0 => 'bala ',),array ( 0 => 4, 1 => 2,), 3)
-array(2) {
- [0]=>
- string(15) "ala bala tokala"
- [1]=>
- string(5) "trhis"
-}
-
-
-substr_replace(array ( 0 => 'ala portokala', 1 => 'try this',), 'bala ',array ( 0 => 4, 1 => 2,), 3)
-array(2) {
- [0]=>
- string(15) "ala bala tokala"
- [1]=>
- string(10) "trbala his"
-}
-
-substr_replace(array ( 0 => 'ala portokala', 1 => 'try this',), array ( 0 => 'bala ',),array ( 0 => 4, 1 => 2,), 0)
-array(2) {
- [0]=>
- string(18) "ala bala portokala"
- [1]=>
- string(8) "try this"
-}
-
-
-substr_replace(array ( 0 => 'ala portokala', 1 => 'try this',), 'bala ',array ( 0 => 4, 1 => 2,), 0)
-array(2) {
- [0]=>
- string(18) "ala bala portokala"
- [1]=>
- string(13) "trbala y this"
-}
-
-substr_replace(array ( 0 => 'ala portokala', 1 => 'try this',), array ( 0 => 'bala ',),array ( 0 => 4, 1 => 2,), -2)
-array(2) {
- [0]=>
- string(11) "ala bala la"
- [1]=>
- string(4) "tris"
-}
-
-
-substr_replace(array ( 0 => 'ala portokala', 1 => 'try this',), 'bala ',array ( 0 => 4, 1 => 2,), -2)
-array(2) {
- [0]=>
- string(11) "ala bala la"
- [1]=>
- string(9) "trbala is"
-}
-
-
-
-
-
-
-
-substr_replace(array ( 0 => 'ala portokala',), 'bala ',array ( 0 => 4, 1 => 2,))
-array(1) {
- [0]=>
- string(9) "ala bala "
-}
-
-
-substr_replace(array ( 0 => 'ala portokala', 1 => 'try this',), array ( 0 => 'bala ',),array ( 0 => 4, 1 => 2,), array ( 0 => 3,))
-array(2) {
- [0]=>
- string(15) "ala bala tokala"
- [1]=>
- string(2) "tr"
-}
-
-
-substr_replace(array ( 0 => 'ala portokala', 1 => 'try this',), 'bala ',array ( 0 => 4, 1 => 2,), array ( 0 => 3,))
-array(2) {
- [0]=>
- string(15) "ala bala tokala"
- [1]=>
- string(7) "trbala "
-}
-
-substr_replace(array ( 0 => 'ala portokala', 1 => 'try this',), array ( 0 => 'bala ',),array ( 0 => 4, 1 => 2,), array ( 0 => 0,))
-array(2) {
- [0]=>
- string(18) "ala bala portokala"
- [1]=>
- string(2) "tr"
-}
-
-
-substr_replace(array ( 0 => 'ala portokala', 1 => 'try this',), 'bala ',array ( 0 => 4, 1 => 2,), array ( 0 => 0,))
-array(2) {
- [0]=>
- string(18) "ala bala portokala"
- [1]=>
- string(7) "trbala "
-}
-
-substr_replace(array ( 0 => 'ala portokala', 1 => 'try this',), array ( 0 => 'bala ',),array ( 0 => 4, 1 => 2,), array ( 0 => -2,))
-array(2) {
- [0]=>
- string(11) "ala bala la"
- [1]=>
- string(2) "tr"
-}
-
-
-substr_replace(array ( 0 => 'ala portokala', 1 => 'try this',), 'bala ',array ( 0 => 4, 1 => 2,), array ( 0 => -2,))
-array(2) {
- [0]=>
- string(11) "ala bala la"
- [1]=>
- string(7) "trbala "
-}
-
-
-
-
-
-
-
-substr_replace(array ( 0 => 'ala portokala',), 'bala ',array ( 0 => 4, 1 => 2,))
-array(1) {
- [0]=>
- string(9) "ala bala "
-}
-
-
-substr_replace(array ( 0 => 'ala portokala', 1 => 'try this',), array ( 0 => 'bala ',),array ( 0 => 4, 1 => 2,), array ( 0 => 3, 1 => 2,))
-array(2) {
- [0]=>
- string(15) "ala bala tokala"
- [1]=>
- string(6) "trthis"
-}
-
-
-substr_replace(array ( 0 => 'ala portokala', 1 => 'try this',), 'bala ',array ( 0 => 4, 1 => 2,), array ( 0 => 3, 1 => 2,))
-array(2) {
- [0]=>
- string(15) "ala bala tokala"
- [1]=>
- string(11) "trbala this"
-}
-
-substr_replace(array ( 0 => 'ala portokala', 1 => 'try this',), array ( 0 => 'bala ',),array ( 0 => 4, 1 => 2,), array ( 0 => 0, 1 => 0,))
-array(2) {
- [0]=>
- string(18) "ala bala portokala"
- [1]=>
- string(8) "try this"
-}
-
-
-substr_replace(array ( 0 => 'ala portokala', 1 => 'try this',), 'bala ',array ( 0 => 4, 1 => 2,), array ( 0 => 0, 1 => 0,))
-array(2) {
- [0]=>
- string(18) "ala bala portokala"
- [1]=>
- string(13) "trbala y this"
-}
-
-substr_replace(array ( 0 => 'ala portokala', 1 => 'try this',), array ( 0 => 'bala ',),array ( 0 => 4, 1 => 2,), array ( 0 => -2, 1 => -3,))
-array(2) {
- [0]=>
- string(11) "ala bala la"
- [1]=>
- string(5) "trhis"
-}
-
-
-substr_replace(array ( 0 => 'ala portokala', 1 => 'try this',), 'bala ',array ( 0 => 4, 1 => 2,), array ( 0 => -2, 1 => -3,))
-array(2) {
- [0]=>
- string(11) "ala bala la"
- [1]=>
- string(10) "trbala his"
-}
-
diff --git a/ext/standard/tests/strings/trim.phpt b/ext/standard/tests/strings/trim.phpt
deleted file mode 100644
index a69f17c6d7..0000000000
--- a/ext/standard/tests/strings/trim.phpt
+++ /dev/null
@@ -1,27 +0,0 @@
---TEST--
-trim(), rtrim() and ltrim() functions
---FILE--
-<?php
-
-$tests = <<<TESTS
-'ABC' === trim('ABC')
-'ABC' === ltrim('ABC')
-'ABC' === rtrim('ABC')
-'ABC' === trim(" \\0\\t\\nABC \\0\\t\\n")
-"ABC \\0\\t\\n" === ltrim(" \\0\\t\\nABC \\0\\t\\n")
-" \\0\\t\\nABC" === rtrim(" \\0\\t\\nABC \\0\\t\\n")
-" \\0\\t\\nABC \\0\\t\\n" === trim(" \\0\\t\\nABC \\0\\t\\n",'')
-" \\0\\t\\nABC \\0\\t\\n" === ltrim(" \\0\\t\\nABC \\0\\t\\n",'')
-" \\0\\t\\nABC \\0\\t\\n" === rtrim(" \\0\\t\\nABC \\0\\t\\n",'')
-"ABC\\x50\\xC1" === trim("ABC\\x50\\xC1\\x60\\x90","\\x51..\\xC0")
-"ABC\\x50" === trim("ABC\\x50\\xC1\\x60\\x90","\\x51..\\xC1")
-"ABC" === trim("ABC\\x50\\xC1\\x60\\x90","\\x50..\\xC1")
-"ABC\\x50\\xC1" === trim("ABC\\x50\\xC1\\x60\\x90","\\x51..\\xC0")
-"ABC\\x50" === trim("ABC\\x50\\xC1\\x60\\x90","\\x51..\\xC1")
-"ABC" === trim("ABC\\x50\\xC1\\x60\\x90","\\x50..\\xC1")
-TESTS;
-
-include(dirname(__FILE__) . '/../../../../tests/quicktester.inc');
-
---EXPECT--
-OK
diff --git a/ext/standard/tests/strings/url_t.phpt b/ext/standard/tests/strings/url_t.phpt
deleted file mode 100644
index 88e6e4800d..0000000000
--- a/ext/standard/tests/strings/url_t.phpt
+++ /dev/null
@@ -1,650 +0,0 @@
---TEST--
-parse_url() function
---FILE--
-<?php
-$sample_urls = array (
-'',
-'64.246.30.37',
-'http://64.246.30.37',
-'http://64.246.30.37/',
-'64.246.30.37/',
-'64.246.30.37:80/',
-'php.net',
-'php.net/',
-'http://php.net',
-'http://php.net/',
-'www.php.net',
-'www.php.net/',
-'http://www.php.net',
-'http://www.php.net/',
-'www.php.net:80',
-'http://www.php.net:80',
-'http://www.php.net:80/',
-'http://www.php.net/index.php',
-'www.php.net/?',
-'www.php.net:80/?',
-'http://www.php.net/?',
-'http://www.php.net:80/?',
-'http://www.php.net:80/index.php',
-'http://www.php.net:80/foo/bar/index.php',
-'http://www.php.net:80/this/is/a/very/deep/directory/structure/and/file.php',
-'http://www.php.net:80/this/is/a/very/deep/directory/structure/and/file.php?lots=1&of=2&parameters=3&too=4&here=5',
-'http://www.php.net:80/this/is/a/very/deep/directory/structure/and/',
-'http://www.php.net:80/this/is/a/very/deep/directory/structure/and/file.php',
-'http://www.php.net:80/this/../a/../deep/directory',
-'http://www.php.net:80/this/../a/../deep/directory/',
-'http://www.php.net:80/this/is/a/very/deep/directory/../file.php',
-'http://www.php.net:80/index.php',
-'http://www.php.net:80/index.php?',
-'http://www.php.net:80/#foo',
-'http://www.php.net:80/?#',
-'http://www.php.net:80/?test=1',
-'http://www.php.net/?test=1&',
-'http://www.php.net:80/?&',
-'http://www.php.net:80/index.php?test=1&',
-'http://www.php.net/index.php?&',
-'http://www.php.net:80/index.php?foo&',
-'http://www.php.net/index.php?&foo',
-'http://www.php.net:80/index.php?test=1&test2=char&test3=mixesCI',
-'www.php.net:80/index.php?test=1&test2=char&test3=mixesCI#some_page_ref123',
-'http://secret@www.php.net:80/index.php?test=1&test2=char&test3=mixesCI#some_page_ref123',
-'http://secret:@www.php.net/index.php?test=1&test2=char&test3=mixesCI#some_page_ref123',
-'http://:hideout@www.php.net:80/index.php?test=1&test2=char&test3=mixesCI#some_page_ref123',
-'http://secret:hideout@www.php.net/index.php?test=1&test2=char&test3=mixesCI#some_page_ref123',
-'http://secret@hideout@www.php.net:80/index.php?test=1&test2=char&test3=mixesCI#some_page_ref123',
-'http://secret:hid:out@www.php.net:80/index.php?test=1&test2=char&test3=mixesCI#some_page_ref123',
-'nntp://news.php.net',
-'ftp://ftp.gnu.org/gnu/glic/glibc.tar.gz',
-'zlib:http://foo@bar',
-'zlib:filename.txt',
-'zlib:/path/to/my/file/file.txt',
-'foo://foo@bar',
-'mailto:me@mydomain.com',
-'/foo.php?a=b&c=d',
-'foo.php?a=b&c=d',
-'http://user:passwd@www.example.com:8080?bar=1&boom=0',
-'file:///path/to/file',
-'file://path/to/file',
-'file:/path/to/file',
-'http://1.2.3.4:/abc.asp?a=1&b=2'
-);
-
- foreach ($sample_urls as $url) {
- var_dump(@parse_url($url));
- }
-?>
---EXPECT--
-array(1) {
- ["path"]=>
- string(0) ""
-}
-array(1) {
- ["path"]=>
- string(12) "64.246.30.37"
-}
-array(2) {
- ["scheme"]=>
- string(4) "http"
- ["host"]=>
- string(12) "64.246.30.37"
-}
-array(3) {
- ["scheme"]=>
- string(4) "http"
- ["host"]=>
- string(12) "64.246.30.37"
- ["path"]=>
- string(1) "/"
-}
-array(1) {
- ["path"]=>
- string(13) "64.246.30.37/"
-}
-array(3) {
- ["host"]=>
- string(12) "64.246.30.37"
- ["port"]=>
- int(80)
- ["path"]=>
- string(1) "/"
-}
-array(1) {
- ["path"]=>
- string(7) "php.net"
-}
-array(1) {
- ["path"]=>
- string(8) "php.net/"
-}
-array(2) {
- ["scheme"]=>
- string(4) "http"
- ["host"]=>
- string(7) "php.net"
-}
-array(3) {
- ["scheme"]=>
- string(4) "http"
- ["host"]=>
- string(7) "php.net"
- ["path"]=>
- string(1) "/"
-}
-array(1) {
- ["path"]=>
- string(11) "www.php.net"
-}
-array(1) {
- ["path"]=>
- string(12) "www.php.net/"
-}
-array(2) {
- ["scheme"]=>
- string(4) "http"
- ["host"]=>
- string(11) "www.php.net"
-}
-array(3) {
- ["scheme"]=>
- string(4) "http"
- ["host"]=>
- string(11) "www.php.net"
- ["path"]=>
- string(1) "/"
-}
-array(2) {
- ["host"]=>
- string(11) "www.php.net"
- ["port"]=>
- int(80)
-}
-array(3) {
- ["scheme"]=>
- string(4) "http"
- ["host"]=>
- string(11) "www.php.net"
- ["port"]=>
- int(80)
-}
-array(4) {
- ["scheme"]=>
- string(4) "http"
- ["host"]=>
- string(11) "www.php.net"
- ["port"]=>
- int(80)
- ["path"]=>
- string(1) "/"
-}
-array(3) {
- ["scheme"]=>
- string(4) "http"
- ["host"]=>
- string(11) "www.php.net"
- ["path"]=>
- string(10) "/index.php"
-}
-array(1) {
- ["path"]=>
- string(12) "www.php.net/"
-}
-array(3) {
- ["host"]=>
- string(11) "www.php.net"
- ["port"]=>
- int(80)
- ["path"]=>
- string(1) "/"
-}
-array(3) {
- ["scheme"]=>
- string(4) "http"
- ["host"]=>
- string(11) "www.php.net"
- ["path"]=>
- string(1) "/"
-}
-array(4) {
- ["scheme"]=>
- string(4) "http"
- ["host"]=>
- string(11) "www.php.net"
- ["port"]=>
- int(80)
- ["path"]=>
- string(1) "/"
-}
-array(4) {
- ["scheme"]=>
- string(4) "http"
- ["host"]=>
- string(11) "www.php.net"
- ["port"]=>
- int(80)
- ["path"]=>
- string(10) "/index.php"
-}
-array(4) {
- ["scheme"]=>
- string(4) "http"
- ["host"]=>
- string(11) "www.php.net"
- ["port"]=>
- int(80)
- ["path"]=>
- string(18) "/foo/bar/index.php"
-}
-array(4) {
- ["scheme"]=>
- string(4) "http"
- ["host"]=>
- string(11) "www.php.net"
- ["port"]=>
- int(80)
- ["path"]=>
- string(53) "/this/is/a/very/deep/directory/structure/and/file.php"
-}
-array(5) {
- ["scheme"]=>
- string(4) "http"
- ["host"]=>
- string(11) "www.php.net"
- ["port"]=>
- int(80)
- ["path"]=>
- string(53) "/this/is/a/very/deep/directory/structure/and/file.php"
- ["query"]=>
- string(37) "lots=1&of=2&parameters=3&too=4&here=5"
-}
-array(4) {
- ["scheme"]=>
- string(4) "http"
- ["host"]=>
- string(11) "www.php.net"
- ["port"]=>
- int(80)
- ["path"]=>
- string(45) "/this/is/a/very/deep/directory/structure/and/"
-}
-array(4) {
- ["scheme"]=>
- string(4) "http"
- ["host"]=>
- string(11) "www.php.net"
- ["port"]=>
- int(80)
- ["path"]=>
- string(53) "/this/is/a/very/deep/directory/structure/and/file.php"
-}
-array(4) {
- ["scheme"]=>
- string(4) "http"
- ["host"]=>
- string(11) "www.php.net"
- ["port"]=>
- int(80)
- ["path"]=>
- string(28) "/this/../a/../deep/directory"
-}
-array(4) {
- ["scheme"]=>
- string(4) "http"
- ["host"]=>
- string(11) "www.php.net"
- ["port"]=>
- int(80)
- ["path"]=>
- string(29) "/this/../a/../deep/directory/"
-}
-array(4) {
- ["scheme"]=>
- string(4) "http"
- ["host"]=>
- string(11) "www.php.net"
- ["port"]=>
- int(80)
- ["path"]=>
- string(42) "/this/is/a/very/deep/directory/../file.php"
-}
-array(4) {
- ["scheme"]=>
- string(4) "http"
- ["host"]=>
- string(11) "www.php.net"
- ["port"]=>
- int(80)
- ["path"]=>
- string(10) "/index.php"
-}
-array(4) {
- ["scheme"]=>
- string(4) "http"
- ["host"]=>
- string(11) "www.php.net"
- ["port"]=>
- int(80)
- ["path"]=>
- string(10) "/index.php"
-}
-array(5) {
- ["scheme"]=>
- string(4) "http"
- ["host"]=>
- string(11) "www.php.net"
- ["port"]=>
- int(80)
- ["path"]=>
- string(1) "/"
- ["fragment"]=>
- string(3) "foo"
-}
-array(4) {
- ["scheme"]=>
- string(4) "http"
- ["host"]=>
- string(11) "www.php.net"
- ["port"]=>
- int(80)
- ["path"]=>
- string(1) "/"
-}
-array(5) {
- ["scheme"]=>
- string(4) "http"
- ["host"]=>
- string(11) "www.php.net"
- ["port"]=>
- int(80)
- ["path"]=>
- string(1) "/"
- ["query"]=>
- string(6) "test=1"
-}
-array(4) {
- ["scheme"]=>
- string(4) "http"
- ["host"]=>
- string(11) "www.php.net"
- ["path"]=>
- string(1) "/"
- ["query"]=>
- string(7) "test=1&"
-}
-array(5) {
- ["scheme"]=>
- string(4) "http"
- ["host"]=>
- string(11) "www.php.net"
- ["port"]=>
- int(80)
- ["path"]=>
- string(1) "/"
- ["query"]=>
- string(1) "&"
-}
-array(5) {
- ["scheme"]=>
- string(4) "http"
- ["host"]=>
- string(11) "www.php.net"
- ["port"]=>
- int(80)
- ["path"]=>
- string(10) "/index.php"
- ["query"]=>
- string(7) "test=1&"
-}
-array(4) {
- ["scheme"]=>
- string(4) "http"
- ["host"]=>
- string(11) "www.php.net"
- ["path"]=>
- string(10) "/index.php"
- ["query"]=>
- string(1) "&"
-}
-array(5) {
- ["scheme"]=>
- string(4) "http"
- ["host"]=>
- string(11) "www.php.net"
- ["port"]=>
- int(80)
- ["path"]=>
- string(10) "/index.php"
- ["query"]=>
- string(4) "foo&"
-}
-array(4) {
- ["scheme"]=>
- string(4) "http"
- ["host"]=>
- string(11) "www.php.net"
- ["path"]=>
- string(10) "/index.php"
- ["query"]=>
- string(4) "&foo"
-}
-array(5) {
- ["scheme"]=>
- string(4) "http"
- ["host"]=>
- string(11) "www.php.net"
- ["port"]=>
- int(80)
- ["path"]=>
- string(10) "/index.php"
- ["query"]=>
- string(31) "test=1&test2=char&test3=mixesCI"
-}
-array(5) {
- ["host"]=>
- string(11) "www.php.net"
- ["port"]=>
- int(80)
- ["path"]=>
- string(10) "/index.php"
- ["query"]=>
- string(31) "test=1&test2=char&test3=mixesCI"
- ["fragment"]=>
- string(16) "some_page_ref123"
-}
-array(7) {
- ["scheme"]=>
- string(4) "http"
- ["host"]=>
- string(11) "www.php.net"
- ["port"]=>
- int(80)
- ["user"]=>
- string(6) "secret"
- ["path"]=>
- string(10) "/index.php"
- ["query"]=>
- string(31) "test=1&test2=char&test3=mixesCI"
- ["fragment"]=>
- string(16) "some_page_ref123"
-}
-array(6) {
- ["scheme"]=>
- string(4) "http"
- ["host"]=>
- string(11) "www.php.net"
- ["user"]=>
- string(6) "secret"
- ["path"]=>
- string(10) "/index.php"
- ["query"]=>
- string(31) "test=1&test2=char&test3=mixesCI"
- ["fragment"]=>
- string(16) "some_page_ref123"
-}
-array(7) {
- ["scheme"]=>
- string(4) "http"
- ["host"]=>
- string(11) "www.php.net"
- ["port"]=>
- int(80)
- ["pass"]=>
- string(7) "hideout"
- ["path"]=>
- string(10) "/index.php"
- ["query"]=>
- string(31) "test=1&test2=char&test3=mixesCI"
- ["fragment"]=>
- string(16) "some_page_ref123"
-}
-array(7) {
- ["scheme"]=>
- string(4) "http"
- ["host"]=>
- string(11) "www.php.net"
- ["user"]=>
- string(6) "secret"
- ["pass"]=>
- string(7) "hideout"
- ["path"]=>
- string(10) "/index.php"
- ["query"]=>
- string(31) "test=1&test2=char&test3=mixesCI"
- ["fragment"]=>
- string(16) "some_page_ref123"
-}
-array(7) {
- ["scheme"]=>
- string(4) "http"
- ["host"]=>
- string(19) "hideout@www.php.net"
- ["port"]=>
- int(80)
- ["user"]=>
- string(6) "secret"
- ["path"]=>
- string(10) "/index.php"
- ["query"]=>
- string(31) "test=1&test2=char&test3=mixesCI"
- ["fragment"]=>
- string(16) "some_page_ref123"
-}
-array(8) {
- ["scheme"]=>
- string(4) "http"
- ["host"]=>
- string(11) "www.php.net"
- ["port"]=>
- int(80)
- ["user"]=>
- string(6) "secret"
- ["pass"]=>
- string(7) "hid:out"
- ["path"]=>
- string(10) "/index.php"
- ["query"]=>
- string(31) "test=1&test2=char&test3=mixesCI"
- ["fragment"]=>
- string(16) "some_page_ref123"
-}
-array(2) {
- ["scheme"]=>
- string(4) "nntp"
- ["host"]=>
- string(12) "news.php.net"
-}
-array(3) {
- ["scheme"]=>
- string(3) "ftp"
- ["host"]=>
- string(11) "ftp.gnu.org"
- ["path"]=>
- string(22) "/gnu/glic/glibc.tar.gz"
-}
-array(2) {
- ["scheme"]=>
- string(4) "zlib"
- ["path"]=>
- string(14) "http://foo@bar"
-}
-array(2) {
- ["scheme"]=>
- string(4) "zlib"
- ["path"]=>
- string(12) "filename.txt"
-}
-array(2) {
- ["scheme"]=>
- string(4) "zlib"
- ["path"]=>
- string(25) "/path/to/my/file/file.txt"
-}
-array(3) {
- ["scheme"]=>
- string(3) "foo"
- ["host"]=>
- string(3) "bar"
- ["user"]=>
- string(3) "foo"
-}
-array(2) {
- ["scheme"]=>
- string(6) "mailto"
- ["path"]=>
- string(15) "me@mydomain.com"
-}
-array(2) {
- ["path"]=>
- string(8) "/foo.php"
- ["query"]=>
- string(7) "a=b&c=d"
-}
-array(2) {
- ["path"]=>
- string(7) "foo.php"
- ["query"]=>
- string(7) "a=b&c=d"
-}
-array(6) {
- ["scheme"]=>
- string(4) "http"
- ["host"]=>
- string(15) "www.example.com"
- ["port"]=>
- int(8080)
- ["user"]=>
- string(4) "user"
- ["pass"]=>
- string(6) "passwd"
- ["query"]=>
- string(12) "bar=1&boom=0"
-}
-array(2) {
- ["scheme"]=>
- string(4) "file"
- ["path"]=>
- string(13) "/path/to/file"
-}
-array(3) {
- ["scheme"]=>
- string(4) "file"
- ["host"]=>
- string(4) "path"
- ["path"]=>
- string(8) "/to/file"
-}
-array(2) {
- ["scheme"]=>
- string(4) "file"
- ["path"]=>
- string(13) "/path/to/file"
-}
-array(4) {
- ["scheme"]=>
- string(4) "http"
- ["host"]=>
- string(7) "1.2.3.4"
- ["path"]=>
- string(8) "/abc.asp"
- ["query"]=>
- string(7) "a=1&b=2"
-}
diff --git a/ext/standard/tests/strings/wordwrap.phpt b/ext/standard/tests/strings/wordwrap.phpt
deleted file mode 100644
index 66104e3c77..0000000000
--- a/ext/standard/tests/strings/wordwrap.phpt
+++ /dev/null
@@ -1,35 +0,0 @@
---TEST--
-wordwrap() function
---FILE--
-<?php
-
-$tests = <<<TESTS
-"12345 12345 12345 12345" === wordwrap("12345 12345 12345 12345")
-"12345 12345\\n1234567890\\n1234567890" === wordwrap("12345 12345 1234567890 1234567890",12)
-"12345\\n12345\\n12345\\n12345" === wordwrap("12345 12345 12345 12345",0)
-"12345ab12345ab12345ab12345" === wordwrap("12345 12345 12345 12345",0,"ab")
-"12345 12345ab1234567890ab1234567890" === wordwrap("12345 12345 1234567890 1234567890",12,"ab")
-"123ab123ab123" === wordwrap("123ab123ab123", 3, "ab")
-"123ab123ab123" === wordwrap("123ab123ab123", 5, "ab")
-"123ab 123ab123" === wordwrap("123 123ab123", 3, "ab")
-"123ab123ab123" === wordwrap("123 123ab123", 5, "ab")
-"123 123ab123" === wordwrap("123 123 123", 10, "ab")
-
-"123ab123ab123" === wordwrap("123ab123ab123", 3, "ab", 1)
-"123ab123ab123" === wordwrap("123ab123ab123", 5, "ab", 1)
-"123ab 12ab3ab123" === wordwrap("123 123ab123", 3, "ab", 1)
-"123 ab123ab123" === wordwrap("123 123ab123", 5, "ab", 1)
-"123 123ab 123" === wordwrap("123 123 123", 8, "ab", 1)
-"123 ab12345 ab123" === wordwrap("123 12345 123", 8, "ab", 1)
-"1ab2ab3ab4" === wordwrap("1234", 1, "ab", 1)
-
-"12345|12345|67890" === wordwrap("12345 1234567890", 5, "|", 1)
-
-"123|==1234567890|==123" === wordwrap("123 1234567890 123", 10, "|==", 1)
-
-TESTS;
-
-include(dirname(__FILE__) . '/../../../../tests/quicktester.inc');
-
---EXPECT--
-OK
diff --git a/ext/standard/tests/time/001.phpt b/ext/standard/tests/time/001.phpt
deleted file mode 100644
index 3b0ed8a77f..0000000000
--- a/ext/standard/tests/time/001.phpt
+++ /dev/null
@@ -1,34 +0,0 @@
---TEST--
-microtime() function
---SKIPIF--
-<?php
- if (!function_exists('microtime')) die('skip microtime() not available');
- die('warn system dependent');
-?>
---FILE--
-<?php
-$passed = 0;
-$failed = 0;
-$last_m = 0;
-$last_t = 0;
-$result = '';
-
-set_time_limit(0);
-
-for ($i=1;$i<=100000;$i++) {
- list($micro,$time)=explode(" ",microtime());
- if ($time > $last_t || ($time == $last_t && $micro >= $last_m)) {
- $passed++;
- } else if ($failed++ <=10) {
- $result .= sprintf('%06d', $i).": $time $micro < $last_t $last_m\n";
- }
- $last_m = $micro;
- $last_t = $time;
-}
-echo "Passed: $passed\n";
-echo "Failed: $failed\n";
-echo $result;
-?>
---EXPECT--
-Passed: 100000
-Failed: 0
diff --git a/ext/standard/tests/time/002-win32.phpt b/ext/standard/tests/time/002-win32.phpt
deleted file mode 100644
index 1d7ef57153..0000000000
--- a/ext/standard/tests/time/002-win32.phpt
+++ /dev/null
@@ -1,66 +0,0 @@
---TEST--
-strtotime() function
---SKIPIF--
-<?php
-if (substr(PHP_OS, 0, 3) != 'WIN') {
- print 'skip test for win32 only';
-}
-if (!@putenv("TZ=GST-1GDT") || getenv("TZ") != 'GST-1GDT') {
- die("skip unable to change TZ enviroment variable\n");
-}
-?>
---FILE--
-<?php
- $dates = array (
- "1999-10-13",
- "Oct 13 1999",
- "2000-01-19",
- "Jan 19 2000",
- "2001-12-21",
- "Dec 21 2001",
- "2001-12-21 12:16",
- "Dec 21 2001 12:16",
- "2001-10-22 21:19:58",
- "2001-10-22 21:19:58-02",
- "2001-10-22 21:19:58-0213",
- "2001-10-22 21:19:58+02",
- "2001-10-22 21:19:58+0213"
- );
-
- putenv ("TZ=GMT");
- foreach ($dates as $date) {
- echo date("Y-m-d H:i:s\n", strtotime ($date));
- }
-
- putenv ("TZ=GST-1GDT");
- foreach ($dates as $date) {
- echo date("Y-m-d H:i:s\n", strtotime ($date));
- }
-?>
---EXPECT--
-1999-10-13 00:00:00
-1999-10-13 00:00:00
-2000-01-19 00:00:00
-2000-01-19 00:00:00
-2001-12-21 00:00:00
-2001-12-21 00:00:00
-2001-12-21 12:16:00
-2001-12-21 12:16:00
-2001-10-22 21:19:58
-2001-10-22 23:19:58
-2001-10-22 23:32:58
-2001-10-22 19:19:58
-2001-10-22 19:06:58
-1999-10-13 00:00:00
-1999-10-13 00:00:00
-2000-01-19 00:00:00
-2000-01-19 00:00:00
-2001-12-21 00:00:00
-2001-12-21 00:00:00
-2001-12-21 12:16:00
-2001-12-21 12:16:00
-2001-10-22 21:19:58
-2001-10-23 01:19:58
-2001-10-23 01:32:58
-2001-10-22 21:19:58
-2001-10-22 21:06:58
diff --git a/ext/standard/tests/time/002.phpt b/ext/standard/tests/time/002.phpt
deleted file mode 100644
index 78cfad9fbc..0000000000
--- a/ext/standard/tests/time/002.phpt
+++ /dev/null
@@ -1,96 +0,0 @@
---TEST--
-strtotime() function
---SKIPIF--
-<?php
-if (substr(PHP_OS, 0, 3) == 'WIN') {
- die('skip Windows does not support dates prior to midnight (00:00:00), January 1, 1970');
-}
-if (!@putenv("TZ=EST5") || getenv("TZ") != 'EST5') {
- die("skip unable to change TZ enviroment variable\n");
-}
-?>
---FILE--
-<?php
- $dates = array (
- "1999-10-13",
- "Oct 13 1999",
- "2000-01-19",
- "Jan 19 2000",
- "2001-12-21",
- "Dec 21 2001",
- "2001-12-21 12:16",
- "Dec 21 2001 12:16",
- "Dec 21 12:16",
- "2001-10-22 21:19:58",
- "2001-10-22 21:19:58-02",
- "2001-10-22 21:19:58-0213",
- "2001-10-22 21:19:58+02",
- "2001-10-22 21:19:58+0213",
- "2001-10-22T21:20:58-03:40",
- "2001-10-22T211958-2",
- "20011022T211958+0213",
- "20011022T21:20+0215",
- "1997W011",
- "2004W101T05:00+0",
- );
-
- echo "*** GMT0\n";
- putenv ("TZ=GMT0");
- foreach ($dates as $date) {
- echo date ("Y-m-d H:i:s\n", strtotime ($date));
- }
-
- echo "*** US/Eastern\n";
- putenv("TZ=US/Eastern");
- if( date("T") == "GMT" ) {
- // POSIX style
- putenv ("TZ=EST5EDT4,M4.1.0,M10.5.0");
- }
-
- foreach ($dates as $date) {
- echo date ("Y-m-d H:i:s\n", strtotime ($date));
- }
-?>
---EXPECT--
-*** GMT0
-1999-10-13 00:00:00
-1999-10-13 00:00:00
-2000-01-19 00:00:00
-2000-01-19 00:00:00
-2001-12-21 00:00:00
-2001-12-21 00:00:00
-2001-12-21 12:16:00
-2001-12-21 12:16:00
-1969-12-31 23:59:59
-2001-10-22 21:19:58
-2001-10-22 23:19:58
-2001-10-22 23:32:58
-2001-10-22 19:19:58
-2001-10-22 19:06:58
-2001-10-23 01:00:58
-2001-10-22 23:19:58
-2001-10-22 19:06:58
-2001-10-22 19:05:00
-1996-12-30 00:00:00
-2004-03-01 05:00:00
-*** US/Eastern
-1999-10-13 00:00:00
-1999-10-13 00:00:00
-2000-01-19 00:00:00
-2000-01-19 00:00:00
-2001-12-21 00:00:00
-2001-12-21 00:00:00
-2001-12-21 12:16:00
-2001-12-21 12:16:00
-1969-12-31 18:59:59
-2001-10-22 21:19:58
-2001-10-22 19:19:58
-2001-10-22 19:32:58
-2001-10-22 15:19:58
-2001-10-22 15:06:58
-2001-10-22 21:00:58
-2001-10-22 19:19:58
-2001-10-22 15:06:58
-2001-10-22 15:05:00
-1996-12-30 00:00:00
-2004-03-01 00:00:00
diff --git a/ext/standard/tests/time/003.phpt b/ext/standard/tests/time/003.phpt
deleted file mode 100644
index 0bf1c84e35..0000000000
--- a/ext/standard/tests/time/003.phpt
+++ /dev/null
@@ -1,41 +0,0 @@
---TEST--
-Check for mktime with out-of-range parameters
---FILE--
-<?php
- # MacOS/X libc implementation doesn't treat out-of-range values
- # the same way other unices do (Bug# 10686) so some extra code
- # was added to datetime.c to take care of this
- echo date("Y-m-d", mktime( 12, 0, 0, 3, 0, 2000)) ."\n";
- echo date("Y-m-d", mktime( 12, 0, 0, 3, -1, 2000)) ."\n";
- echo date("Y-m-d", mktime( 12, 0, 0, 2, 29, 2000)) ."\n";
- echo date("Y-m-d", mktime( 12, 0, 0, 3, 0, 2001)) ."\n";
- echo date("Y-m-d", mktime( 12, 0, 0, 2, 29, 2001)) ."\n";
- echo date("Y-m-d", mktime( 12, 0, 0, 0, 0, 2000)) ."\n";
-
- putenv("TZ=Europe/London");
- echo date("Y-m-d H:i:s", mktime(12,0,0,3,+90,2000,-1))."\n";
- echo date("Y-m-d H:i:s", mktime(12,0,0,3,+90,2000,0))."\n";
- echo date("Y-m-d H:i:s", mktime(12,0,0,3,+90,2000,1))."\n";
- echo date("Y-m-d H:i:s", mktime(12,0,0,5,-90,2000,-1))."\n";
- echo date("Y-m-d H:i:s", mktime(12,0,0,5,-90,2000,0))."\n";
- echo date("Y-m-d H:i:s", mktime(12,0,0,5,-90,2000,1))."\n";
- echo date("Y-m-d H:i:s", mktime(12,0,0,5,-1,2000,-1))."\n";
- echo date("Y-m-d H:i:s", mktime(12,0,0,5,-1,2000,0))."\n";
- echo date("Y-m-d H:i:s", mktime(12,0,0,5,-1,2000,1))."\n";
-?>
---EXPECT--
-2000-02-29
-2000-02-28
-2000-02-29
-2001-02-28
-2001-03-01
-1999-11-30
-2000-05-29 12:00:00
-2000-05-29 13:00:00
-2000-05-29 12:00:00
-2000-01-31 12:00:00
-2000-01-31 12:00:00
-2000-01-31 11:00:00
-2000-04-29 12:00:00
-2000-04-29 13:00:00
-2000-04-29 12:00:00
diff --git a/ext/standard/tests/time/bug13142.phpt b/ext/standard/tests/time/bug13142.phpt
deleted file mode 100644
index af3e1f2f31..0000000000
--- a/ext/standard/tests/time/bug13142.phpt
+++ /dev/null
@@ -1,20 +0,0 @@
---TEST--
-Bug #13142 strtotime handling of "M d H:i:s Y" format
---SKIPIF--
-<?php
-if (!@putenv("TZ=US/Eastern") || getenv("TZ") != 'US/Eastern') {
- die("skip unable to change TZ enviroment variable\n");
-}
-?>
---FILE--
-<?php
-putenv("TZ=US/Eastern");
-if (date('T') == 'GMT') {
- putenv("TZ=EST5EDT4,M4.1.0,M10.5.0");
-}
-echo date("r\n", strtotime("Sep 04 16:39:45 2001"));
-echo date("r\n", strtotime("Sep 04 2001 16:39:45"));
-?>
---EXPECT--
-Tue, 4 Sep 2001 16:39:45 -0400
-Tue, 4 Sep 2001 16:39:45 -0400
diff --git a/ext/standard/tests/time/bug17988.phpt b/ext/standard/tests/time/bug17988.phpt
deleted file mode 100644
index 5fbc3c845f..0000000000
--- a/ext/standard/tests/time/bug17988.phpt
+++ /dev/null
@@ -1,33 +0,0 @@
---TEST--
-Bug #17988 strtotime handling of postgresql timestamps
---FILE--
-<?php
-putenv("TZ=GMT");
-echo gmdate('Y-m-d H:i:s', strtotime("2002-06-25 14:18:48.543728"))."\n";
-echo gmdate('Y-m-d H:i:s', strtotime("2002-06-25 14:18:48.543728 GMT"))."\n";
-echo gmdate('Y-m-d H:i:s', strtotime("2002-06-25 14:18:48.543728 MET"))."\n";
-echo gmdate('Y-m-d H:i:s', strtotime("2002-06-25 14:18:48.543728 MEST"))."\n";
-echo gmdate('Y-m-d H:i:s', strtotime("2002-06-25 14:18:48.543728 EDT"))."\n";
-echo gmdate('Y-m-d H:i:s', strtotime("2002-06-25 14:18:48.543728-00"))."\n";
-echo gmdate('Y-m-d H:i:s', strtotime("2002-06-25 14:18:48.543728+00"))."\n";
-echo gmdate('Y-m-d H:i:s', strtotime("2002-06-25 14:18:48.543728-04"))."\n";
-echo gmdate('Y-m-d H:i:s', strtotime("2002-06-25 14:18:48.543728+04"))."\n";
-echo gmdate('Y-m-d H:i:s', strtotime("2002-06-25 14:18:48.543728-0300"))."\n";
-echo gmdate('Y-m-d H:i:s', strtotime("2002-06-25 14:18:48.543728+0300"))."\n";
-echo gmdate('Y-m-d H:i:s', strtotime("2002-06-25 14:18:48.543728-0330"))."\n";
-echo gmdate('Y-m-d H:i:s', strtotime("2002-06-25 14:18:48.543728+0330"))."\n";
-?>
---EXPECT--
-2002-06-25 14:18:48
-2002-06-25 14:18:48
-2002-06-25 13:18:48
-2002-06-25 12:18:48
-2002-06-25 18:18:48
-2002-06-25 14:18:48
-2002-06-25 14:18:48
-2002-06-25 18:18:48
-2002-06-25 10:18:48
-2002-06-25 17:18:48
-2002-06-25 11:18:48
-2002-06-25 17:48:48
-2002-06-25 10:48:48
diff --git a/ext/standard/tests/time/bug20382.phpt b/ext/standard/tests/time/bug20382.phpt
deleted file mode 100644
index 4da8c21105..0000000000
--- a/ext/standard/tests/time/bug20382.phpt
+++ /dev/null
@@ -1,16 +0,0 @@
---TEST--
-Bug #20382 (strtotime ("Monday", $date) produces wrong result on DST changeover)
---FILE--
-<?php
- putenv("TZ=Europe/Amsterdam");
- $tStamp = mktime (17, 17, 17, 10, 27, 2004);
- echo "tStamp=". date("l Y-m-d H:i:s T", $tStamp). "\n";
-
- $strtotime_timestamp = strtotime ("Monday", $tStamp);
- echo "result=". date("l Y-m-d H:i:s T", $strtotime_timestamp). "\n";
- echo "wanted=Monday 2004-11-01 00:00:00 CET\n";
-?>
---EXPECT--
-tStamp=Wednesday 2004-10-27 17:17:17 CEST
-result=Monday 2004-11-01 00:00:00 CET
-wanted=Monday 2004-11-01 00:00:00 CET
diff --git a/ext/standard/tests/time/bug21966.phpt b/ext/standard/tests/time/bug21966.phpt
deleted file mode 100644
index 31f592fa98..0000000000
--- a/ext/standard/tests/time/bug21966.phpt
+++ /dev/null
@@ -1,19 +0,0 @@
---TEST--
-Bug #21966 (date() or mktime() returning bad value for mktime month param of '2')
---FILE--
-<?php
-putenv("TZ=Europe/London");
-
-echo '27/3/04 = ' . strval(mktime(0,0,0,3,27,2004)) . "\n"; // 1080345600
-echo '28/3/04 = ' . strval(mktime(0,0,0,3,28,2004)) . "\n"; // -3662 - should be 108043200
-echo '28/3/04 = ' . strval(mktime(2,0,0,3,28,2004)) . "\n"; // 1080435600
-echo '29/3/04 = ' . strval(mktime(0,0,0,3,29,2004)) . "\n"; // 1080514800
-echo '30/3/04 = ' . strval(mktime(0,0,0,3,30,2004)) . "\n"; // 1080601200
-
-?>
---EXPECT--
-27/3/04 = 1080345600
-28/3/04 = 1080432000
-28/3/04 = 1080435600
-29/3/04 = 1080514800
-30/3/04 = 1080601200
diff --git a/ext/standard/tests/time/bug26198.phpt b/ext/standard/tests/time/bug26198.phpt
deleted file mode 100644
index 318108da78..0000000000
--- a/ext/standard/tests/time/bug26198.phpt
+++ /dev/null
@@ -1,10 +0,0 @@
---TEST--
-Bug #26198 (strtotime handling of "M Y" and "Y M" format)
---FILE--
-<?php
- echo date("F Y\n", strtotime("Oct 2001"));
- echo date("M Y\n", strtotime("2001 Oct"));
-?>
---EXPECT--
-October 2001
-Oct 2001
diff --git a/ext/standard/tests/time/bug26317.phpt b/ext/standard/tests/time/bug26317.phpt
deleted file mode 100644
index c889666dc9..0000000000
--- a/ext/standard/tests/time/bug26317.phpt
+++ /dev/null
@@ -1,17 +0,0 @@
---TEST--
-Bug #26317 (military timezone offset signedness)
---SKIP--
-if (!@putenv("TZ=GMT0") || getenv("TZ") != 'GMT0') {
- die("skip unable to change TZ enviroment variable\n");
-}
---FILE--
-<?php
- putenv("TZ=GMT0");
- echo date("Y-m-d H:i:s\n", strtotime("2003-11-19 16:20:42 Z"));
- echo date("Y-m-d H:i:s\n", strtotime("2003-11-19 09:20:42 T"));
- echo date("Y-m-d H:i:s\n", strtotime("2003-11-19 19:20:42 C"));
-?>
---EXPECT--
-2003-11-19 16:20:42
-2003-11-19 16:20:42
-2003-11-19 16:20:42
diff --git a/ext/standard/tests/time/bug26320.phpt b/ext/standard/tests/time/bug26320.phpt
deleted file mode 100644
index b57712009f..0000000000
--- a/ext/standard/tests/time/bug26320.phpt
+++ /dev/null
@@ -1,15 +0,0 @@
---TEST--
-Bug #26320 (strtotime handling of XML Schema/ISO 8601 format)
---SKIP--
-if (!@putenv("TZ=GMT0") || getenv("TZ") != 'GMT0') {
- die("skip unable to change TZ enviroment variable\n");
-}
---FILE--
-<?php
- putenv("TZ=GMT0");
- echo date("Y-m-d H:i:s\n", strtotime("2003-11-19T12:30:42"));
- echo date("Y-m-d H:i:s\n", strtotime("2003-11-19T12:30:42Z"));
-?>
---EXPECT--
-2003-11-19 12:30:42
-2003-11-19 12:30:42 \ No newline at end of file
diff --git a/ext/standard/tests/time/bug27719.phpt b/ext/standard/tests/time/bug27719.phpt
deleted file mode 100644
index 2484356aaa..0000000000
--- a/ext/standard/tests/time/bug27719.phpt
+++ /dev/null
@@ -1,65 +0,0 @@
---TEST--
-Bug #27719: mktime returns incorrect timestamp for dst days
---FILE--
-<?php /* $Id$ */
- putenv("TZ=EST"); // No DST
- $a = mktime(0, 0, 0, 4, 4, 2004, 0);
- $b = mktime(0, 0, 0, 4, 4, 2004, 1);
- $c = mktime(0, 0, 0, 4, 4, 2004, -1);
- echo "$a ".date("m/d/y h:i:s\n",$a);
- echo "$b ".date("m/d/y h:i:s\n",$b);
- echo "$c ".date("m/d/y h:i:s\n",$c);
- echo "\n";
- putenv("TZ=EST5DST"); // DST not in effect
- $a = mktime(0, 0, 0, 2, 4, 2004, 0);
- $b = mktime(0, 0, 0, 2, 4, 2004, 1);
- $c = mktime(0, 0, 0, 2, 4, 2004, -1);
- echo "$a ".date("m/d/y h:i:s\n",$a);
- echo "$b ".date("m/d/y h:i:s\n",$b);
- echo "$c ".date("m/d/y h:i:s\n",$c);
- echo "\n";
- putenv("TZ=EST5DST"); // Just before DST changeover
- $a = mktime(0, 0, 0, 4, 4, 2004, 0);
- $b = mktime(0, 0, 0, 4, 4, 2004, 1);
- $c = mktime(0, 0, 0, 4, 4, 2004, -1);
- echo "$a ".date("m/d/y h:i:s\n",$a);
- echo "$b ".date("m/d/y h:i:s\n",$b);
- echo "$c ".date("m/d/y h:i:s\n",$c);
- echo "\n";
- putenv("TZ=EST5DST"); // Just after DST changeover
- $a = mktime(3, 0, 0, 4, 4, 2004, 0);
- $b = mktime(3, 0, 0, 4, 4, 2004, 1);
- $c = mktime(3, 0, 0, 4, 4, 2004, -1);
- echo "$a ".date("m/d/y h:i:s\n",$a);
- echo "$b ".date("m/d/y h:i:s\n",$b);
- echo "$c ".date("m/d/y h:i:s\n",$c);
- echo "\n";
- putenv("TZ=EST5DST"); // DST in effect
- $a = mktime(0, 0, 0, 6, 4, 2004, 0);
- $b = mktime(0, 0, 0, 6, 4, 2004, 1);
- $c = mktime(0, 0, 0, 6, 4, 2004, -1);
- echo "$a ".date("m/d/y h:i:s\n",$a);
- echo "$b ".date("m/d/y h:i:s\n",$b);
- echo "$c ".date("m/d/y h:i:s\n",$c);
- echo "\n";
-?>
---EXPECTF--
-1081054800 04/04/04 12:00:00
-%s
-1081054800 04/04/04 12:00:00
-
-1075870800 02/04/04 12:00:00
-1075867200 02/03/04 11:00:00
-1075870800 02/04/04 12:00:00
-
-1081054800 04/04/04 12:00:00
-1081051200 04/03/04 11:00:00
-1081054800 04/04/04 12:00:00
-
-1081065600 04/04/04 04:00:00
-1081062000 04/04/04 03:00:00
-1081062000 04/04/04 03:00:00
-
-1086325200 06/04/04 01:00:00
-1086321600 06/04/04 12:00:00
-1086321600 06/04/04 12:00:00
diff --git a/ext/standard/tests/time/bug27780.phpt b/ext/standard/tests/time/bug27780.phpt
deleted file mode 100644
index 1c10340d47..0000000000
--- a/ext/standard/tests/time/bug27780.phpt
+++ /dev/null
@@ -1,113 +0,0 @@
---TEST--
-Bug #27780 (strtotime(+1 xxx) returns a wrong date/time)
---FILE--
-<?php
-$timezones = array (
- "America/Chicago", "Europe/Amsterdam", "Asia/Jerusalem",
- "Asia/Singapore", "America/Sao_Paulo"
-);
-
-$timestrings = array (
- "2004-04-07 00:00:00 -2 months +7 days +23 hours +59 minutes +59 seconds",
- "2004-04-07 00:00:00 -2 months +7 days +23 hours +59 minutes +60 seconds",
- "2004-04-07 00:00:00 -2 months +7 days +23 hours +59 minutes +61 seconds",
- "2004-04-07 00:00:00 -21 days",
- "2004-04-07 00:00:00 11 days ago",
- "2004-04-07 00:00:00 -10 day +2 hours",
- "2004-04-07 00:00:00 -1 day",
- "2004-04-07 00:00:00",
- "2004-04-07 00:00:00 +1 hour",
- "2004-04-07 00:00:00 +2 hour",
- "2004-04-07 00:00:00 +1 day",
- "2004-04-07 00:00:00 1 day",
- "2004-04-07 00:00:00 +21 days",
-);
-
-foreach ($timezones as $timezone) {
- putenv("TZ=$timezone");
- echo $timezone, "\n";
-
- foreach ($timestrings as $timestring) {
- $time = strtotime($timestring);
-
- echo $time, strftime(" [%Y-%m-%d %H:%M:%S %Z]", $time), " [$timestring]\n";
- }
-
- echo "\n";
-}
-?>
---EXPECT--
-America/Chicago
-1076824799 [2004-02-14 23:59:59 CST] [2004-04-07 00:00:00 -2 months +7 days +23 hours +59 minutes +59 seconds]
-1076824800 [2004-02-15 00:00:00 CST] [2004-04-07 00:00:00 -2 months +7 days +23 hours +59 minutes +60 seconds]
-1076824801 [2004-02-15 00:00:01 CST] [2004-04-07 00:00:00 -2 months +7 days +23 hours +59 minutes +61 seconds]
-1079503200 [2004-03-17 00:00:00 CST] [2004-04-07 00:00:00 -21 days]
-1080367200 [2004-03-27 00:00:00 CST] [2004-04-07 00:00:00 11 days ago]
-1080460800 [2004-03-28 02:00:00 CST] [2004-04-07 00:00:00 -10 day +2 hours]
-1081227600 [2004-04-06 00:00:00 CDT] [2004-04-07 00:00:00 -1 day]
-1081314000 [2004-04-07 00:00:00 CDT] [2004-04-07 00:00:00]
-1081317600 [2004-04-07 01:00:00 CDT] [2004-04-07 00:00:00 +1 hour]
-1081321200 [2004-04-07 02:00:00 CDT] [2004-04-07 00:00:00 +2 hour]
-1081400400 [2004-04-08 00:00:00 CDT] [2004-04-07 00:00:00 +1 day]
-1081400400 [2004-04-08 00:00:00 CDT] [2004-04-07 00:00:00 1 day]
-1083128400 [2004-04-28 00:00:00 CDT] [2004-04-07 00:00:00 +21 days]
-
-Europe/Amsterdam
-1076799599 [2004-02-14 23:59:59 CET] [2004-04-07 00:00:00 -2 months +7 days +23 hours +59 minutes +59 seconds]
-1076799600 [2004-02-15 00:00:00 CET] [2004-04-07 00:00:00 -2 months +7 days +23 hours +59 minutes +60 seconds]
-1076799601 [2004-02-15 00:00:01 CET] [2004-04-07 00:00:00 -2 months +7 days +23 hours +59 minutes +61 seconds]
-1079478000 [2004-03-17 00:00:00 CET] [2004-04-07 00:00:00 -21 days]
-1080342000 [2004-03-27 00:00:00 CET] [2004-04-07 00:00:00 11 days ago]
-1080435600 [2004-03-28 03:00:00 CEST] [2004-04-07 00:00:00 -10 day +2 hours]
-1081202400 [2004-04-06 00:00:00 CEST] [2004-04-07 00:00:00 -1 day]
-1081288800 [2004-04-07 00:00:00 CEST] [2004-04-07 00:00:00]
-1081292400 [2004-04-07 01:00:00 CEST] [2004-04-07 00:00:00 +1 hour]
-1081296000 [2004-04-07 02:00:00 CEST] [2004-04-07 00:00:00 +2 hour]
-1081375200 [2004-04-08 00:00:00 CEST] [2004-04-07 00:00:00 +1 day]
-1081375200 [2004-04-08 00:00:00 CEST] [2004-04-07 00:00:00 1 day]
-1083103200 [2004-04-28 00:00:00 CEST] [2004-04-07 00:00:00 +21 days]
-
-Asia/Jerusalem
-1076795999 [2004-02-14 23:59:59 IST] [2004-04-07 00:00:00 -2 months +7 days +23 hours +59 minutes +59 seconds]
-1076796000 [2004-02-15 00:00:00 IST] [2004-04-07 00:00:00 -2 months +7 days +23 hours +59 minutes +60 seconds]
-1076796001 [2004-02-15 00:00:01 IST] [2004-04-07 00:00:00 -2 months +7 days +23 hours +59 minutes +61 seconds]
-1079474400 [2004-03-17 00:00:00 IST] [2004-04-07 00:00:00 -21 days]
-1080338400 [2004-03-27 00:00:00 IST] [2004-04-07 00:00:00 11 days ago]
-1080432000 [2004-03-28 02:00:00 IST] [2004-04-07 00:00:00 -10 day +2 hours]
-1081202400 [2004-04-06 00:00:00 IST] [2004-04-07 00:00:00 -1 day]
-1081288800 [2004-04-07 00:00:00 IST] [2004-04-07 00:00:00]
-1081292400 [2004-04-07 02:00:00 IDT] [2004-04-07 00:00:00 +1 hour]
-1081292400 [2004-04-07 02:00:00 IDT] [2004-04-07 00:00:00 +2 hour]
-1081371600 [2004-04-08 00:00:00 IDT] [2004-04-07 00:00:00 +1 day]
-1081371600 [2004-04-08 00:00:00 IDT] [2004-04-07 00:00:00 1 day]
-1083099600 [2004-04-28 00:00:00 IDT] [2004-04-07 00:00:00 +21 days]
-
-Asia/Singapore
-1076774399 [2004-02-14 23:59:59 SGT] [2004-04-07 00:00:00 -2 months +7 days +23 hours +59 minutes +59 seconds]
-1076774400 [2004-02-15 00:00:00 SGT] [2004-04-07 00:00:00 -2 months +7 days +23 hours +59 minutes +60 seconds]
-1076774401 [2004-02-15 00:00:01 SGT] [2004-04-07 00:00:00 -2 months +7 days +23 hours +59 minutes +61 seconds]
-1079452800 [2004-03-17 00:00:00 SGT] [2004-04-07 00:00:00 -21 days]
-1080316800 [2004-03-27 00:00:00 SGT] [2004-04-07 00:00:00 11 days ago]
-1080410400 [2004-03-28 02:00:00 SGT] [2004-04-07 00:00:00 -10 day +2 hours]
-1081180800 [2004-04-06 00:00:00 SGT] [2004-04-07 00:00:00 -1 day]
-1081267200 [2004-04-07 00:00:00 SGT] [2004-04-07 00:00:00]
-1081270800 [2004-04-07 01:00:00 SGT] [2004-04-07 00:00:00 +1 hour]
-1081274400 [2004-04-07 02:00:00 SGT] [2004-04-07 00:00:00 +2 hour]
-1081353600 [2004-04-08 00:00:00 SGT] [2004-04-07 00:00:00 +1 day]
-1081353600 [2004-04-08 00:00:00 SGT] [2004-04-07 00:00:00 1 day]
-1083081600 [2004-04-28 00:00:00 SGT] [2004-04-07 00:00:00 +21 days]
-
-America/Sao_Paulo
-1076810399 [2004-02-14 23:59:59 BRST] [2004-04-07 00:00:00 -2 months +7 days +23 hours +59 minutes +59 seconds]
-1076810400 [2004-02-14 23:00:00 BRT] [2004-04-07 00:00:00 -2 months +7 days +23 hours +59 minutes +60 seconds]
-1076810401 [2004-02-14 23:00:01 BRT] [2004-04-07 00:00:00 -2 months +7 days +23 hours +59 minutes +61 seconds]
-1079492400 [2004-03-17 00:00:00 BRT] [2004-04-07 00:00:00 -21 days]
-1080356400 [2004-03-27 00:00:00 BRT] [2004-04-07 00:00:00 11 days ago]
-1080450000 [2004-03-28 02:00:00 BRT] [2004-04-07 00:00:00 -10 day +2 hours]
-1081220400 [2004-04-06 00:00:00 BRT] [2004-04-07 00:00:00 -1 day]
-1081306800 [2004-04-07 00:00:00 BRT] [2004-04-07 00:00:00]
-1081310400 [2004-04-07 01:00:00 BRT] [2004-04-07 00:00:00 +1 hour]
-1081314000 [2004-04-07 02:00:00 BRT] [2004-04-07 00:00:00 +2 hour]
-1081393200 [2004-04-08 00:00:00 BRT] [2004-04-07 00:00:00 +1 day]
-1081393200 [2004-04-08 00:00:00 BRT] [2004-04-07 00:00:00 1 day]
-1083121200 [2004-04-28 00:00:00 BRT] [2004-04-07 00:00:00 +21 days]
diff --git a/ext/standard/tests/time/date.phpt b/ext/standard/tests/time/date.phpt
deleted file mode 100644
index 87cae0b310..0000000000
--- a/ext/standard/tests/time/date.phpt
+++ /dev/null
@@ -1,22 +0,0 @@
---TEST--
-date() function
---FILE--
-<?php
-$tmp = "cr";
-putenv ("TZ=GMT0");
-
-for($a = 0;$a < strlen($tmp); $a++){
- echo $tmp{$a}, ': ', date($tmp{$a}, 1043324459)."\n";
-}
-
-putenv ("TZ=MET");
-
-for($a = 0;$a < strlen($tmp); $a++){
- echo $tmp{$a}, ': ', date($tmp{$a}, 1043324459)."\n";
-}
-?>
---EXPECT--
-c: 2003-01-23T12:20:59+00:00
-r: Thu, 23 Jan 2003 12:20:59 +0000
-c: 2003-01-23T13:20:59+01:00
-r: Thu, 23 Jan 2003 13:20:59 +0100
diff --git a/ext/standard/tests/time/idate.phpt b/ext/standard/tests/time/idate.phpt
deleted file mode 100644
index 485f9804af..0000000000
--- a/ext/standard/tests/time/idate.phpt
+++ /dev/null
@@ -1,32 +0,0 @@
---TEST--
-idate() function
---FILE--
-<?php
-putenv ("TZ=GMT0");
-
-$tmp = "UYzymndjHGhgistwLBIW";
-for($a = 0;$a < strlen($tmp); $a++){
- echo $tmp{$a}, ': ', idate($tmp{$a}, 1043324459)."\n";
-}
-?>
---EXPECT--
-U: 1043324459
-Y: 2003
-z: 22
-y: 3
-m: 1
-n: 1
-d: 23
-j: 23
-H: 12
-G: 12
-h: 12
-g: 12
-i: 20
-s: 59
-t: 31
-w: 4
-L: 0
-B: 556
-I: 0
-W: 4
diff --git a/ext/standard/tests/time/mktime.phpt b/ext/standard/tests/time/mktime.phpt
deleted file mode 100644
index 8914ea0787..0000000000
--- a/ext/standard/tests/time/mktime.phpt
+++ /dev/null
@@ -1,49 +0,0 @@
---TEST--
-mktime()
---FILE--
-<?php /* $Id$ */
-$timezones = array(
- 'GMT0',
- 'Europe/London'
-);
-
-foreach($timezones as $timezone)
-{
- putenv('TZ='.$timezone);
-
- /* status of daylight saving time unknown */
- var_dump(mktime(0, 0, 0, 1, 1, 2002));
- /* status of daylight saving time unknown */
- var_dump(mktime(0, 0, 0, 1, 1, 2002, -1));
- /* daylight saving time is not in effect */
- var_dump(mktime(0, 0, 0, 1, 1, 2002, 0));
- /* daylight saving time is in effect */
- var_dump(mktime(0, 0, 0, 1, 1, 2002, 1));
-
- /* status of daylight saving time unknown */
- var_dump(mktime(0, 0, 0, 7, 1, 2002));
- /* status of daylight saving time unknown */
- var_dump(mktime(0, 0, 0, 7, 1, 2002, -1));
- /* daylight saving time is not in effect */
- var_dump(mktime(0, 0, 0, 7, 1, 2002, 0));
- /* daylight saving time is in effect */
- var_dump(mktime(0, 0, 0, 7, 1, 2002, 1));
-}
-?>
---EXPECTF--
-int(1009843200)
-int(1009843200)
-int(1009843200)
-int(%s)
-int(1025481600)
-int(1025481600)
-int(1025481600)
-int(%s)
-int(1009843200)
-int(1009843200)
-int(1009843200)
-int(1009839600)
-int(1025478000)
-int(1025478000)
-int(1025481600)
-int(1025478000)
diff --git a/ext/standard/tests/versioning/version_compare.phpt b/ext/standard/tests/versioning/version_compare.phpt
deleted file mode 100644
index 6ef49ba777..0000000000
--- a/ext/standard/tests/versioning/version_compare.phpt
+++ /dev/null
@@ -1,600 +0,0 @@
---TEST--
-version_compare test
---FILE--
-<?php
-
-print "TESTING COMPARE\n";
-$special_forms = array("-dev", "a1", "b1", "RC1", "", "pl1");
-$operators = array(
- "lt", "<",
- "le", "<=",
- "gt", ">",
- "ge", ">=",
- "eq", "=", "==",
- "ne", "<>", "!="
-);
-test("1", "2");
-test("10", "2");
-test("1.0", "1.1");
-test("1.2", "1.0.1");
-foreach ($special_forms as $f1) {
- foreach ($special_forms as $f2) {
- test("1.0$f1", "1.0$f2");
- }
-}
-print "TESTING OPERATORS\n";
-foreach ($special_forms as $f1) {
- foreach ($special_forms as $f2) {
- foreach ($operators as $op) {
- $v1 = "1.0$f1";
- $v2 = "1.0$f2";
- $test = version_compare($v1, $v2, $op) ? "true" : "false";
- printf("%7s %2s %-7s : %s\n", $v1, $op, $v2, $test);
- }
- }
-}
-
-function test($v1, $v2) {
- $compare = version_compare($v1, $v2);
- switch ($compare) {
- case -1:
- print "$v1 < $v2\n";
- break;
- case 1:
- print "$v1 > $v2\n";
- break;
- case 0:
- default:
- print "$v1 = $v2\n";
- break;
- }
-}
-
-?>
---EXPECT--
-TESTING COMPARE
-1 < 2
-10 > 2
-1.0 < 1.1
-1.2 > 1.0.1
-1.0-dev = 1.0-dev
-1.0-dev < 1.0a1
-1.0-dev < 1.0b1
-1.0-dev < 1.0RC1
-1.0-dev < 1.0
-1.0-dev < 1.0pl1
-1.0a1 > 1.0-dev
-1.0a1 = 1.0a1
-1.0a1 < 1.0b1
-1.0a1 < 1.0RC1
-1.0a1 < 1.0
-1.0a1 < 1.0pl1
-1.0b1 > 1.0-dev
-1.0b1 > 1.0a1
-1.0b1 = 1.0b1
-1.0b1 < 1.0RC1
-1.0b1 < 1.0
-1.0b1 < 1.0pl1
-1.0RC1 > 1.0-dev
-1.0RC1 > 1.0a1
-1.0RC1 > 1.0b1
-1.0RC1 = 1.0RC1
-1.0RC1 < 1.0
-1.0RC1 < 1.0pl1
-1.0 > 1.0-dev
-1.0 > 1.0a1
-1.0 > 1.0b1
-1.0 > 1.0RC1
-1.0 = 1.0
-1.0 < 1.0pl1
-1.0pl1 > 1.0-dev
-1.0pl1 > 1.0a1
-1.0pl1 > 1.0b1
-1.0pl1 > 1.0RC1
-1.0pl1 > 1.0
-1.0pl1 = 1.0pl1
-TESTING OPERATORS
-1.0-dev lt 1.0-dev : false
-1.0-dev < 1.0-dev : false
-1.0-dev le 1.0-dev : true
-1.0-dev <= 1.0-dev : true
-1.0-dev gt 1.0-dev : false
-1.0-dev > 1.0-dev : false
-1.0-dev ge 1.0-dev : true
-1.0-dev >= 1.0-dev : true
-1.0-dev eq 1.0-dev : true
-1.0-dev = 1.0-dev : true
-1.0-dev == 1.0-dev : true
-1.0-dev ne 1.0-dev : false
-1.0-dev <> 1.0-dev : false
-1.0-dev != 1.0-dev : false
-1.0-dev lt 1.0a1 : true
-1.0-dev < 1.0a1 : true
-1.0-dev le 1.0a1 : true
-1.0-dev <= 1.0a1 : true
-1.0-dev gt 1.0a1 : false
-1.0-dev > 1.0a1 : false
-1.0-dev ge 1.0a1 : false
-1.0-dev >= 1.0a1 : false
-1.0-dev eq 1.0a1 : false
-1.0-dev = 1.0a1 : false
-1.0-dev == 1.0a1 : false
-1.0-dev ne 1.0a1 : true
-1.0-dev <> 1.0a1 : true
-1.0-dev != 1.0a1 : true
-1.0-dev lt 1.0b1 : true
-1.0-dev < 1.0b1 : true
-1.0-dev le 1.0b1 : true
-1.0-dev <= 1.0b1 : true
-1.0-dev gt 1.0b1 : false
-1.0-dev > 1.0b1 : false
-1.0-dev ge 1.0b1 : false
-1.0-dev >= 1.0b1 : false
-1.0-dev eq 1.0b1 : false
-1.0-dev = 1.0b1 : false
-1.0-dev == 1.0b1 : false
-1.0-dev ne 1.0b1 : true
-1.0-dev <> 1.0b1 : true
-1.0-dev != 1.0b1 : true
-1.0-dev lt 1.0RC1 : true
-1.0-dev < 1.0RC1 : true
-1.0-dev le 1.0RC1 : true
-1.0-dev <= 1.0RC1 : true
-1.0-dev gt 1.0RC1 : false
-1.0-dev > 1.0RC1 : false
-1.0-dev ge 1.0RC1 : false
-1.0-dev >= 1.0RC1 : false
-1.0-dev eq 1.0RC1 : false
-1.0-dev = 1.0RC1 : false
-1.0-dev == 1.0RC1 : false
-1.0-dev ne 1.0RC1 : true
-1.0-dev <> 1.0RC1 : true
-1.0-dev != 1.0RC1 : true
-1.0-dev lt 1.0 : true
-1.0-dev < 1.0 : true
-1.0-dev le 1.0 : true
-1.0-dev <= 1.0 : true
-1.0-dev gt 1.0 : false
-1.0-dev > 1.0 : false
-1.0-dev ge 1.0 : false
-1.0-dev >= 1.0 : false
-1.0-dev eq 1.0 : false
-1.0-dev = 1.0 : false
-1.0-dev == 1.0 : false
-1.0-dev ne 1.0 : true
-1.0-dev <> 1.0 : true
-1.0-dev != 1.0 : true
-1.0-dev lt 1.0pl1 : true
-1.0-dev < 1.0pl1 : true
-1.0-dev le 1.0pl1 : true
-1.0-dev <= 1.0pl1 : true
-1.0-dev gt 1.0pl1 : false
-1.0-dev > 1.0pl1 : false
-1.0-dev ge 1.0pl1 : false
-1.0-dev >= 1.0pl1 : false
-1.0-dev eq 1.0pl1 : false
-1.0-dev = 1.0pl1 : false
-1.0-dev == 1.0pl1 : false
-1.0-dev ne 1.0pl1 : true
-1.0-dev <> 1.0pl1 : true
-1.0-dev != 1.0pl1 : true
- 1.0a1 lt 1.0-dev : false
- 1.0a1 < 1.0-dev : false
- 1.0a1 le 1.0-dev : false
- 1.0a1 <= 1.0-dev : false
- 1.0a1 gt 1.0-dev : true
- 1.0a1 > 1.0-dev : true
- 1.0a1 ge 1.0-dev : true
- 1.0a1 >= 1.0-dev : true
- 1.0a1 eq 1.0-dev : false
- 1.0a1 = 1.0-dev : false
- 1.0a1 == 1.0-dev : false
- 1.0a1 ne 1.0-dev : true
- 1.0a1 <> 1.0-dev : true
- 1.0a1 != 1.0-dev : true
- 1.0a1 lt 1.0a1 : false
- 1.0a1 < 1.0a1 : false
- 1.0a1 le 1.0a1 : true
- 1.0a1 <= 1.0a1 : true
- 1.0a1 gt 1.0a1 : false
- 1.0a1 > 1.0a1 : false
- 1.0a1 ge 1.0a1 : true
- 1.0a1 >= 1.0a1 : true
- 1.0a1 eq 1.0a1 : true
- 1.0a1 = 1.0a1 : true
- 1.0a1 == 1.0a1 : true
- 1.0a1 ne 1.0a1 : false
- 1.0a1 <> 1.0a1 : false
- 1.0a1 != 1.0a1 : false
- 1.0a1 lt 1.0b1 : true
- 1.0a1 < 1.0b1 : true
- 1.0a1 le 1.0b1 : true
- 1.0a1 <= 1.0b1 : true
- 1.0a1 gt 1.0b1 : false
- 1.0a1 > 1.0b1 : false
- 1.0a1 ge 1.0b1 : false
- 1.0a1 >= 1.0b1 : false
- 1.0a1 eq 1.0b1 : false
- 1.0a1 = 1.0b1 : false
- 1.0a1 == 1.0b1 : false
- 1.0a1 ne 1.0b1 : true
- 1.0a1 <> 1.0b1 : true
- 1.0a1 != 1.0b1 : true
- 1.0a1 lt 1.0RC1 : true
- 1.0a1 < 1.0RC1 : true
- 1.0a1 le 1.0RC1 : true
- 1.0a1 <= 1.0RC1 : true
- 1.0a1 gt 1.0RC1 : false
- 1.0a1 > 1.0RC1 : false
- 1.0a1 ge 1.0RC1 : false
- 1.0a1 >= 1.0RC1 : false
- 1.0a1 eq 1.0RC1 : false
- 1.0a1 = 1.0RC1 : false
- 1.0a1 == 1.0RC1 : false
- 1.0a1 ne 1.0RC1 : true
- 1.0a1 <> 1.0RC1 : true
- 1.0a1 != 1.0RC1 : true
- 1.0a1 lt 1.0 : true
- 1.0a1 < 1.0 : true
- 1.0a1 le 1.0 : true
- 1.0a1 <= 1.0 : true
- 1.0a1 gt 1.0 : false
- 1.0a1 > 1.0 : false
- 1.0a1 ge 1.0 : false
- 1.0a1 >= 1.0 : false
- 1.0a1 eq 1.0 : false
- 1.0a1 = 1.0 : false
- 1.0a1 == 1.0 : false
- 1.0a1 ne 1.0 : true
- 1.0a1 <> 1.0 : true
- 1.0a1 != 1.0 : true
- 1.0a1 lt 1.0pl1 : true
- 1.0a1 < 1.0pl1 : true
- 1.0a1 le 1.0pl1 : true
- 1.0a1 <= 1.0pl1 : true
- 1.0a1 gt 1.0pl1 : false
- 1.0a1 > 1.0pl1 : false
- 1.0a1 ge 1.0pl1 : false
- 1.0a1 >= 1.0pl1 : false
- 1.0a1 eq 1.0pl1 : false
- 1.0a1 = 1.0pl1 : false
- 1.0a1 == 1.0pl1 : false
- 1.0a1 ne 1.0pl1 : true
- 1.0a1 <> 1.0pl1 : true
- 1.0a1 != 1.0pl1 : true
- 1.0b1 lt 1.0-dev : false
- 1.0b1 < 1.0-dev : false
- 1.0b1 le 1.0-dev : false
- 1.0b1 <= 1.0-dev : false
- 1.0b1 gt 1.0-dev : true
- 1.0b1 > 1.0-dev : true
- 1.0b1 ge 1.0-dev : true
- 1.0b1 >= 1.0-dev : true
- 1.0b1 eq 1.0-dev : false
- 1.0b1 = 1.0-dev : false
- 1.0b1 == 1.0-dev : false
- 1.0b1 ne 1.0-dev : true
- 1.0b1 <> 1.0-dev : true
- 1.0b1 != 1.0-dev : true
- 1.0b1 lt 1.0a1 : false
- 1.0b1 < 1.0a1 : false
- 1.0b1 le 1.0a1 : false
- 1.0b1 <= 1.0a1 : false
- 1.0b1 gt 1.0a1 : true
- 1.0b1 > 1.0a1 : true
- 1.0b1 ge 1.0a1 : true
- 1.0b1 >= 1.0a1 : true
- 1.0b1 eq 1.0a1 : false
- 1.0b1 = 1.0a1 : false
- 1.0b1 == 1.0a1 : false
- 1.0b1 ne 1.0a1 : true
- 1.0b1 <> 1.0a1 : true
- 1.0b1 != 1.0a1 : true
- 1.0b1 lt 1.0b1 : false
- 1.0b1 < 1.0b1 : false
- 1.0b1 le 1.0b1 : true
- 1.0b1 <= 1.0b1 : true
- 1.0b1 gt 1.0b1 : false
- 1.0b1 > 1.0b1 : false
- 1.0b1 ge 1.0b1 : true
- 1.0b1 >= 1.0b1 : true
- 1.0b1 eq 1.0b1 : true
- 1.0b1 = 1.0b1 : true
- 1.0b1 == 1.0b1 : true
- 1.0b1 ne 1.0b1 : false
- 1.0b1 <> 1.0b1 : false
- 1.0b1 != 1.0b1 : false
- 1.0b1 lt 1.0RC1 : true
- 1.0b1 < 1.0RC1 : true
- 1.0b1 le 1.0RC1 : true
- 1.0b1 <= 1.0RC1 : true
- 1.0b1 gt 1.0RC1 : false
- 1.0b1 > 1.0RC1 : false
- 1.0b1 ge 1.0RC1 : false
- 1.0b1 >= 1.0RC1 : false
- 1.0b1 eq 1.0RC1 : false
- 1.0b1 = 1.0RC1 : false
- 1.0b1 == 1.0RC1 : false
- 1.0b1 ne 1.0RC1 : true
- 1.0b1 <> 1.0RC1 : true
- 1.0b1 != 1.0RC1 : true
- 1.0b1 lt 1.0 : true
- 1.0b1 < 1.0 : true
- 1.0b1 le 1.0 : true
- 1.0b1 <= 1.0 : true
- 1.0b1 gt 1.0 : false
- 1.0b1 > 1.0 : false
- 1.0b1 ge 1.0 : false
- 1.0b1 >= 1.0 : false
- 1.0b1 eq 1.0 : false
- 1.0b1 = 1.0 : false
- 1.0b1 == 1.0 : false
- 1.0b1 ne 1.0 : true
- 1.0b1 <> 1.0 : true
- 1.0b1 != 1.0 : true
- 1.0b1 lt 1.0pl1 : true
- 1.0b1 < 1.0pl1 : true
- 1.0b1 le 1.0pl1 : true
- 1.0b1 <= 1.0pl1 : true
- 1.0b1 gt 1.0pl1 : false
- 1.0b1 > 1.0pl1 : false
- 1.0b1 ge 1.0pl1 : false
- 1.0b1 >= 1.0pl1 : false
- 1.0b1 eq 1.0pl1 : false
- 1.0b1 = 1.0pl1 : false
- 1.0b1 == 1.0pl1 : false
- 1.0b1 ne 1.0pl1 : true
- 1.0b1 <> 1.0pl1 : true
- 1.0b1 != 1.0pl1 : true
- 1.0RC1 lt 1.0-dev : false
- 1.0RC1 < 1.0-dev : false
- 1.0RC1 le 1.0-dev : false
- 1.0RC1 <= 1.0-dev : false
- 1.0RC1 gt 1.0-dev : true
- 1.0RC1 > 1.0-dev : true
- 1.0RC1 ge 1.0-dev : true
- 1.0RC1 >= 1.0-dev : true
- 1.0RC1 eq 1.0-dev : false
- 1.0RC1 = 1.0-dev : false
- 1.0RC1 == 1.0-dev : false
- 1.0RC1 ne 1.0-dev : true
- 1.0RC1 <> 1.0-dev : true
- 1.0RC1 != 1.0-dev : true
- 1.0RC1 lt 1.0a1 : false
- 1.0RC1 < 1.0a1 : false
- 1.0RC1 le 1.0a1 : false
- 1.0RC1 <= 1.0a1 : false
- 1.0RC1 gt 1.0a1 : true
- 1.0RC1 > 1.0a1 : true
- 1.0RC1 ge 1.0a1 : true
- 1.0RC1 >= 1.0a1 : true
- 1.0RC1 eq 1.0a1 : false
- 1.0RC1 = 1.0a1 : false
- 1.0RC1 == 1.0a1 : false
- 1.0RC1 ne 1.0a1 : true
- 1.0RC1 <> 1.0a1 : true
- 1.0RC1 != 1.0a1 : true
- 1.0RC1 lt 1.0b1 : false
- 1.0RC1 < 1.0b1 : false
- 1.0RC1 le 1.0b1 : false
- 1.0RC1 <= 1.0b1 : false
- 1.0RC1 gt 1.0b1 : true
- 1.0RC1 > 1.0b1 : true
- 1.0RC1 ge 1.0b1 : true
- 1.0RC1 >= 1.0b1 : true
- 1.0RC1 eq 1.0b1 : false
- 1.0RC1 = 1.0b1 : false
- 1.0RC1 == 1.0b1 : false
- 1.0RC1 ne 1.0b1 : true
- 1.0RC1 <> 1.0b1 : true
- 1.0RC1 != 1.0b1 : true
- 1.0RC1 lt 1.0RC1 : false
- 1.0RC1 < 1.0RC1 : false
- 1.0RC1 le 1.0RC1 : true
- 1.0RC1 <= 1.0RC1 : true
- 1.0RC1 gt 1.0RC1 : false
- 1.0RC1 > 1.0RC1 : false
- 1.0RC1 ge 1.0RC1 : true
- 1.0RC1 >= 1.0RC1 : true
- 1.0RC1 eq 1.0RC1 : true
- 1.0RC1 = 1.0RC1 : true
- 1.0RC1 == 1.0RC1 : true
- 1.0RC1 ne 1.0RC1 : false
- 1.0RC1 <> 1.0RC1 : false
- 1.0RC1 != 1.0RC1 : false
- 1.0RC1 lt 1.0 : true
- 1.0RC1 < 1.0 : true
- 1.0RC1 le 1.0 : true
- 1.0RC1 <= 1.0 : true
- 1.0RC1 gt 1.0 : false
- 1.0RC1 > 1.0 : false
- 1.0RC1 ge 1.0 : false
- 1.0RC1 >= 1.0 : false
- 1.0RC1 eq 1.0 : false
- 1.0RC1 = 1.0 : false
- 1.0RC1 == 1.0 : false
- 1.0RC1 ne 1.0 : true
- 1.0RC1 <> 1.0 : true
- 1.0RC1 != 1.0 : true
- 1.0RC1 lt 1.0pl1 : true
- 1.0RC1 < 1.0pl1 : true
- 1.0RC1 le 1.0pl1 : true
- 1.0RC1 <= 1.0pl1 : true
- 1.0RC1 gt 1.0pl1 : false
- 1.0RC1 > 1.0pl1 : false
- 1.0RC1 ge 1.0pl1 : false
- 1.0RC1 >= 1.0pl1 : false
- 1.0RC1 eq 1.0pl1 : false
- 1.0RC1 = 1.0pl1 : false
- 1.0RC1 == 1.0pl1 : false
- 1.0RC1 ne 1.0pl1 : true
- 1.0RC1 <> 1.0pl1 : true
- 1.0RC1 != 1.0pl1 : true
- 1.0 lt 1.0-dev : false
- 1.0 < 1.0-dev : false
- 1.0 le 1.0-dev : false
- 1.0 <= 1.0-dev : false
- 1.0 gt 1.0-dev : true
- 1.0 > 1.0-dev : true
- 1.0 ge 1.0-dev : true
- 1.0 >= 1.0-dev : true
- 1.0 eq 1.0-dev : false
- 1.0 = 1.0-dev : false
- 1.0 == 1.0-dev : false
- 1.0 ne 1.0-dev : true
- 1.0 <> 1.0-dev : true
- 1.0 != 1.0-dev : true
- 1.0 lt 1.0a1 : false
- 1.0 < 1.0a1 : false
- 1.0 le 1.0a1 : false
- 1.0 <= 1.0a1 : false
- 1.0 gt 1.0a1 : true
- 1.0 > 1.0a1 : true
- 1.0 ge 1.0a1 : true
- 1.0 >= 1.0a1 : true
- 1.0 eq 1.0a1 : false
- 1.0 = 1.0a1 : false
- 1.0 == 1.0a1 : false
- 1.0 ne 1.0a1 : true
- 1.0 <> 1.0a1 : true
- 1.0 != 1.0a1 : true
- 1.0 lt 1.0b1 : false
- 1.0 < 1.0b1 : false
- 1.0 le 1.0b1 : false
- 1.0 <= 1.0b1 : false
- 1.0 gt 1.0b1 : true
- 1.0 > 1.0b1 : true
- 1.0 ge 1.0b1 : true
- 1.0 >= 1.0b1 : true
- 1.0 eq 1.0b1 : false
- 1.0 = 1.0b1 : false
- 1.0 == 1.0b1 : false
- 1.0 ne 1.0b1 : true
- 1.0 <> 1.0b1 : true
- 1.0 != 1.0b1 : true
- 1.0 lt 1.0RC1 : false
- 1.0 < 1.0RC1 : false
- 1.0 le 1.0RC1 : false
- 1.0 <= 1.0RC1 : false
- 1.0 gt 1.0RC1 : true
- 1.0 > 1.0RC1 : true
- 1.0 ge 1.0RC1 : true
- 1.0 >= 1.0RC1 : true
- 1.0 eq 1.0RC1 : false
- 1.0 = 1.0RC1 : false
- 1.0 == 1.0RC1 : false
- 1.0 ne 1.0RC1 : true
- 1.0 <> 1.0RC1 : true
- 1.0 != 1.0RC1 : true
- 1.0 lt 1.0 : false
- 1.0 < 1.0 : false
- 1.0 le 1.0 : true
- 1.0 <= 1.0 : true
- 1.0 gt 1.0 : false
- 1.0 > 1.0 : false
- 1.0 ge 1.0 : true
- 1.0 >= 1.0 : true
- 1.0 eq 1.0 : true
- 1.0 = 1.0 : true
- 1.0 == 1.0 : true
- 1.0 ne 1.0 : false
- 1.0 <> 1.0 : false
- 1.0 != 1.0 : false
- 1.0 lt 1.0pl1 : true
- 1.0 < 1.0pl1 : true
- 1.0 le 1.0pl1 : true
- 1.0 <= 1.0pl1 : true
- 1.0 gt 1.0pl1 : false
- 1.0 > 1.0pl1 : false
- 1.0 ge 1.0pl1 : false
- 1.0 >= 1.0pl1 : false
- 1.0 eq 1.0pl1 : false
- 1.0 = 1.0pl1 : false
- 1.0 == 1.0pl1 : false
- 1.0 ne 1.0pl1 : true
- 1.0 <> 1.0pl1 : true
- 1.0 != 1.0pl1 : true
- 1.0pl1 lt 1.0-dev : false
- 1.0pl1 < 1.0-dev : false
- 1.0pl1 le 1.0-dev : false
- 1.0pl1 <= 1.0-dev : false
- 1.0pl1 gt 1.0-dev : true
- 1.0pl1 > 1.0-dev : true
- 1.0pl1 ge 1.0-dev : true
- 1.0pl1 >= 1.0-dev : true
- 1.0pl1 eq 1.0-dev : false
- 1.0pl1 = 1.0-dev : false
- 1.0pl1 == 1.0-dev : false
- 1.0pl1 ne 1.0-dev : true
- 1.0pl1 <> 1.0-dev : true
- 1.0pl1 != 1.0-dev : true
- 1.0pl1 lt 1.0a1 : false
- 1.0pl1 < 1.0a1 : false
- 1.0pl1 le 1.0a1 : false
- 1.0pl1 <= 1.0a1 : false
- 1.0pl1 gt 1.0a1 : true
- 1.0pl1 > 1.0a1 : true
- 1.0pl1 ge 1.0a1 : true
- 1.0pl1 >= 1.0a1 : true
- 1.0pl1 eq 1.0a1 : false
- 1.0pl1 = 1.0a1 : false
- 1.0pl1 == 1.0a1 : false
- 1.0pl1 ne 1.0a1 : true
- 1.0pl1 <> 1.0a1 : true
- 1.0pl1 != 1.0a1 : true
- 1.0pl1 lt 1.0b1 : false
- 1.0pl1 < 1.0b1 : false
- 1.0pl1 le 1.0b1 : false
- 1.0pl1 <= 1.0b1 : false
- 1.0pl1 gt 1.0b1 : true
- 1.0pl1 > 1.0b1 : true
- 1.0pl1 ge 1.0b1 : true
- 1.0pl1 >= 1.0b1 : true
- 1.0pl1 eq 1.0b1 : false
- 1.0pl1 = 1.0b1 : false
- 1.0pl1 == 1.0b1 : false
- 1.0pl1 ne 1.0b1 : true
- 1.0pl1 <> 1.0b1 : true
- 1.0pl1 != 1.0b1 : true
- 1.0pl1 lt 1.0RC1 : false
- 1.0pl1 < 1.0RC1 : false
- 1.0pl1 le 1.0RC1 : false
- 1.0pl1 <= 1.0RC1 : false
- 1.0pl1 gt 1.0RC1 : true
- 1.0pl1 > 1.0RC1 : true
- 1.0pl1 ge 1.0RC1 : true
- 1.0pl1 >= 1.0RC1 : true
- 1.0pl1 eq 1.0RC1 : false
- 1.0pl1 = 1.0RC1 : false
- 1.0pl1 == 1.0RC1 : false
- 1.0pl1 ne 1.0RC1 : true
- 1.0pl1 <> 1.0RC1 : true
- 1.0pl1 != 1.0RC1 : true
- 1.0pl1 lt 1.0 : false
- 1.0pl1 < 1.0 : false
- 1.0pl1 le 1.0 : false
- 1.0pl1 <= 1.0 : false
- 1.0pl1 gt 1.0 : true
- 1.0pl1 > 1.0 : true
- 1.0pl1 ge 1.0 : true
- 1.0pl1 >= 1.0 : true
- 1.0pl1 eq 1.0 : false
- 1.0pl1 = 1.0 : false
- 1.0pl1 == 1.0 : false
- 1.0pl1 ne 1.0 : true
- 1.0pl1 <> 1.0 : true
- 1.0pl1 != 1.0 : true
- 1.0pl1 lt 1.0pl1 : false
- 1.0pl1 < 1.0pl1 : false
- 1.0pl1 le 1.0pl1 : true
- 1.0pl1 <= 1.0pl1 : true
- 1.0pl1 gt 1.0pl1 : false
- 1.0pl1 > 1.0pl1 : false
- 1.0pl1 ge 1.0pl1 : true
- 1.0pl1 >= 1.0pl1 : true
- 1.0pl1 eq 1.0pl1 : true
- 1.0pl1 = 1.0pl1 : true
- 1.0pl1 == 1.0pl1 : true
- 1.0pl1 ne 1.0pl1 : false
- 1.0pl1 <> 1.0pl1 : false
- 1.0pl1 != 1.0pl1 : false
diff --git a/ext/standard/type.c b/ext/standard/type.c
deleted file mode 100644
index 3005df1dce..0000000000
--- a/ext/standard/type.c
+++ /dev/null
@@ -1,395 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Rasmus Lerdorf <rasmus@php.net> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#include "php.h"
-#include "php_incomplete_class.h"
-
-/* {{{ proto string gettype(mixed var)
- Returns the type of the variable */
-PHP_FUNCTION(gettype)
-{
- pval **arg;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- switch (Z_TYPE_PP(arg)) {
- case IS_NULL:
- RETVAL_STRING("NULL", 1);
- break;
-
- case IS_BOOL:
- RETVAL_STRING("boolean", 1);
- break;
-
- case IS_LONG:
- RETVAL_STRING("integer", 1);
- break;
-
- case IS_RESOURCE:
- RETVAL_STRING("resource", 1);
- break;
-
- case IS_DOUBLE:
- RETVAL_STRING("double", 1);
- break;
-
- case IS_STRING:
- RETVAL_STRING("string", 1);
- break;
-
- case IS_ARRAY:
- RETVAL_STRING("array", 1);
- break;
-
- case IS_OBJECT:
- RETVAL_STRING("object", 1);
- /*
- {
- char *result;
- int res_len;
-
- res_len = sizeof("object of type ")-1 + Z_OBJCE_P(arg)->name_length;
- result = (char *) emalloc(res_len+1);
- sprintf(result, "object of type %s", Z_OBJCE_P(arg)->name);
- RETVAL_STRINGL(result, res_len, 0);
- }
- */
- break;
-
- default:
- RETVAL_STRING("unknown type", 1);
- }
-}
-/* }}} */
-
-/* {{{ proto bool settype(mixed var, string type)
- Set the type of the variable */
-PHP_FUNCTION(settype)
-{
- pval **var, **type;
- char *new_type;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &var, &type) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_string_ex(type);
- new_type = Z_STRVAL_PP(type);
-
- if (!strcasecmp(new_type, "integer")) {
- convert_to_long(*var);
- } else if (!strcasecmp(new_type, "int")) {
- convert_to_long(*var);
- } else if (!strcasecmp(new_type, "float")) {
- convert_to_double(*var);
- } else if (!strcasecmp(new_type, "double")) { /* deprecated */
- convert_to_double(*var);
- } else if (!strcasecmp(new_type, "string")) {
- convert_to_string(*var);
- } else if (!strcasecmp(new_type, "array")) {
- convert_to_array(*var);
- } else if (!strcasecmp(new_type, "object")) {
- convert_to_object(*var);
- } else if (!strcasecmp(new_type, "bool")) {
- convert_to_boolean(*var);
- } else if (!strcasecmp(new_type, "boolean")) {
- convert_to_boolean(*var);
- } else if (!strcasecmp(new_type, "null")) {
- convert_to_null(*var);
- } else if (!strcasecmp(new_type, "resource")) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Cannot convert to resource type");
- RETURN_FALSE;
- } else {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid type");
- RETURN_FALSE;
- }
- RETVAL_TRUE;
-}
-/* }}} */
-
-/* {{{ proto int intval(mixed var [, int base])
- Get the integer value of a variable using the optional base for the conversion */
-PHP_FUNCTION(intval)
-{
- pval **num, **arg_base;
- int base;
-
- switch (ZEND_NUM_ARGS()) {
- case 1:
- if (zend_get_parameters_ex(1, &num) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- base = 10;
- break;
-
- case 2:
- if (zend_get_parameters_ex(2, &num, &arg_base) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long_ex(arg_base);
- base = Z_LVAL_PP(arg_base);
- break;
-
- default:
- WRONG_PARAM_COUNT;
- }
-
- *return_value = **num;
- zval_copy_ctor(return_value);
- convert_to_long_base(return_value, base);
-}
-/* }}} */
-
-/* {{{ proto float floatval(mixed var)
- Get the float value of a variable */
-PHP_FUNCTION(floatval)
-{
- pval **num;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &num) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- *return_value = **num;
- zval_copy_ctor(return_value);
- convert_to_double(return_value);
-}
-/* }}} */
-
-/* {{{ proto string strval(mixed var)
- Get the string value of a variable */
-PHP_FUNCTION(strval)
-{
- pval **num;
- zval expr_copy;
- int use_copy;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &num) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- *return_value = **num;
-
- zend_make_printable_zval(return_value, &expr_copy, &use_copy);
- if (use_copy) {
- *return_value = expr_copy;
- INIT_PZVAL(return_value);
- zval_copy_ctor(return_value);
- zval_dtor(&expr_copy);
- } else {
- zval_copy_ctor(return_value);
- }
-}
-/* }}} */
-
-static void php_is_type(INTERNAL_FUNCTION_PARAMETERS, int type)
-{
- pval **arg;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg) == FAILURE) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Only one argument expected");
- RETURN_FALSE;
- }
-
- if (Z_TYPE_PP(arg) == type) {
- if (type == IS_OBJECT) {
- zend_class_entry *ce;
- ce = Z_OBJCE_PP(arg);
- if (!strcmp(ce->name, INCOMPLETE_CLASS)) {
- RETURN_FALSE;
- }
- }
- if (type == IS_RESOURCE) {
- char *type_name;
- type_name = zend_rsrc_list_get_rsrc_type(Z_LVAL_PP(arg) TSRMLS_CC);
- if (!type_name) {
- RETURN_FALSE;
- }
- }
- RETURN_TRUE;
- } else {
- RETURN_FALSE;
- }
-}
-
-
-/* {{{ proto bool is_null(mixed var)
- Returns true if variable is null */
-PHP_FUNCTION(is_null)
-{
- php_is_type(INTERNAL_FUNCTION_PARAM_PASSTHRU, IS_NULL);
-}
-/* }}} */
-
-/* {{{ proto bool is_resource(mixed var)
- Returns true if variable is a resource */
-PHP_FUNCTION(is_resource)
-{
- php_is_type(INTERNAL_FUNCTION_PARAM_PASSTHRU, IS_RESOURCE);
-}
-/* }}} */
-
-/* {{{ proto bool is_bool(mixed var)
- Returns true if variable is a boolean */
-PHP_FUNCTION(is_bool)
-{
- php_is_type(INTERNAL_FUNCTION_PARAM_PASSTHRU, IS_BOOL);
-}
-/* }}} */
-
-/* {{{ proto bool is_long(mixed var)
- Returns true if variable is a long (integer) */
-PHP_FUNCTION(is_long)
-{
- php_is_type(INTERNAL_FUNCTION_PARAM_PASSTHRU, IS_LONG);
-}
-/* }}} */
-
-/* {{{ proto bool is_float(mixed var)
- Returns true if variable is float point*/
-PHP_FUNCTION(is_float)
-{
- php_is_type(INTERNAL_FUNCTION_PARAM_PASSTHRU, IS_DOUBLE);
-}
-/* }}} */
-
-/* {{{ proto bool is_string(mixed var)
- Returns true if variable is a string */
-PHP_FUNCTION(is_string)
-{
- php_is_type(INTERNAL_FUNCTION_PARAM_PASSTHRU, IS_STRING);
-}
-/* }}} */
-
-/* {{{ proto bool is_array(mixed var)
- Returns true if variable is an array */
-PHP_FUNCTION(is_array)
-{
- php_is_type(INTERNAL_FUNCTION_PARAM_PASSTHRU, IS_ARRAY);
-}
-/* }}} */
-
-/* {{{ proto bool is_object(mixed var)
- Returns true if variable is an object */
-PHP_FUNCTION(is_object)
-{
- php_is_type(INTERNAL_FUNCTION_PARAM_PASSTHRU, IS_OBJECT);
-}
-/* }}} */
-
-/* {{{ proto bool is_numeric(mixed value)
- Returns true if value is a number or a numeric string */
-PHP_FUNCTION(is_numeric)
-{
- zval **arg;
- int result;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- switch (Z_TYPE_PP(arg)) {
- case IS_LONG:
- case IS_DOUBLE:
- RETURN_TRUE;
- break;
-
- case IS_STRING:
- result = is_numeric_string(Z_STRVAL_PP(arg), Z_STRLEN_PP(arg), NULL, NULL, 0);
- if (result == IS_LONG || result == IS_DOUBLE) {
- RETURN_TRUE;
- } else {
- RETURN_FALSE;
- }
- break;
-
- default:
- RETURN_FALSE;
- break;
- }
-}
-/* }}} */
-
-/* {{{ proto bool is_scalar(mixed value)
- Returns true if value is a scalar */
-PHP_FUNCTION(is_scalar)
-{
- zval **arg;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- switch (Z_TYPE_PP(arg)) {
- case IS_BOOL:
- case IS_DOUBLE:
- case IS_LONG:
- case IS_STRING:
- RETURN_TRUE;
- break;
-
- default:
- RETURN_FALSE;
- break;
- }
-}
-/* }}} */
-
-/* {{{ proto bool is_callable(mixed var [, bool syntax_only [, string callable_name]])
- Returns true if var is callable. */
-PHP_FUNCTION(is_callable)
-{
- zval **var, **syntax_only, **callable_name;
- char *name;
- zend_bool retval;
- zend_bool syntax = 0;
- int argc=ZEND_NUM_ARGS();
-
- if (argc < 1 || argc > 3 || zend_get_parameters_ex(argc, &var, &syntax_only, &callable_name) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- if (argc > 1) {
- convert_to_boolean_ex(syntax_only);
- syntax = Z_BVAL_PP(syntax_only);
- }
-
- if (argc > 2) {
- retval = zend_is_callable(*var, syntax, &name);
- zval_dtor(*callable_name);
- ZVAL_STRING(*callable_name, name, 0);
- } else {
- retval = zend_is_callable(*var, syntax, NULL);
- }
-
- RETURN_BOOL(retval);
-}
-/* }}} */
-
-/*
- * 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/standard/uniqid.c b/ext/standard/uniqid.c
deleted file mode 100644
index 997ca4b5f3..0000000000
--- a/ext/standard/uniqid.c
+++ /dev/null
@@ -1,97 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Stig Sæther Bakken <ssb@php.net> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-#include "php.h"
-
-#include <stdlib.h>
-#if HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-
-#include <string.h>
-#include <errno.h>
-
-#include <stdio.h>
-#ifdef PHP_WIN32
-#include "win32/time.h"
-#else
-#include <sys/time.h>
-#endif
-
-#include "php_lcg.h"
-#include "uniqid.h"
-
-/* {{{ proto string uniqid([string prefix , bool more_entropy])
- Generates a unique ID */
-#ifdef HAVE_GETTIMEOFDAY
-PHP_FUNCTION(uniqid)
-{
- char *prefix = "";
-#if defined(__CYGWIN__)
- zend_bool more_entropy = 1;
-#else
- zend_bool more_entropy = 0;
-#endif
- char *uniqid;
- int sec, usec, argc, prefix_len = 0;
- struct timeval tv;
-
- argc = ZEND_NUM_ARGS();
- if (zend_parse_parameters(argc TSRMLS_CC, "|sb", &prefix, &prefix_len,
- &more_entropy)) {
- return;
- }
-
-#if HAVE_USLEEP && !defined(PHP_WIN32)
- if (!more_entropy) {
-#if defined(__CYGWIN__)
- php_error_docref(NULL TSRMLS_CC, E_ERROR, "You must use 'more entropy' under CYGWIN.");
- return;
-#else
- usleep(1);
-#endif
- }
-#endif
- gettimeofday((struct timeval *) &tv, (struct timezone *) NULL);
- sec = (int) tv.tv_sec;
- usec = (int) (tv.tv_usec % 0x100000);
-
- /* The max value usec can have is 0xF423F, so we use only five hex
- * digits for usecs.
- */
- if (more_entropy) {
- spprintf(&uniqid, 0, "%s%08x%05x%.8f", prefix, sec, usec, php_combined_lcg(TSRMLS_C) * 10);
- } else {
- spprintf(&uniqid, 0, "%s%08x%05x", prefix, sec, usec);
- }
-
- RETURN_STRING(uniqid, 0);
-}
-#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/standard/uniqid.h b/ext/standard/uniqid.h
deleted file mode 100644
index bbcd3e8973..0000000000
--- a/ext/standard/uniqid.h
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Stig Sæther Bakken <ssb@php.net> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-#ifndef UNIQID_H
-#define UNIQID_H
-
-#ifdef HAVE_GETTIMEOFDAY
-PHP_FUNCTION(uniqid);
-#endif
-
-#endif /* UNIQID_H */
diff --git a/ext/standard/url.c b/ext/standard/url.c
deleted file mode 100644
index 9055583ec3..0000000000
--- a/ext/standard/url.c
+++ /dev/null
@@ -1,655 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Jim Winstead <jimw@php.net> |
- +----------------------------------------------------------------------+
- */
-/* $Id$ */
-
-#include <stdlib.h>
-#include <string.h>
-#include <ctype.h>
-#include <sys/types.h>
-
-#include "php.h"
-
-#include "url.h"
-#ifdef _OSD_POSIX
-#ifndef APACHE
-#error On this EBCDIC platform, PHP is only supported as an Apache module.
-#else /*APACHE*/
-#ifndef CHARSET_EBCDIC
-#define CHARSET_EBCDIC /* this machine uses EBCDIC, not ASCII! */
-#endif
-#include "ebcdic.h"
-#endif /*APACHE*/
-#endif /*_OSD_POSIX*/
-
-/* {{{ free_url
- */
-PHPAPI void php_url_free(php_url *theurl)
-{
- if (theurl->scheme)
- efree(theurl->scheme);
- if (theurl->user)
- efree(theurl->user);
- if (theurl->pass)
- efree(theurl->pass);
- if (theurl->host)
- efree(theurl->host);
- if (theurl->path)
- efree(theurl->path);
- if (theurl->query)
- efree(theurl->query);
- if (theurl->fragment)
- efree(theurl->fragment);
- efree(theurl);
-}
-/* }}} */
-
-/* {{{ php_replace_controlchars
- */
-PHPAPI char *php_replace_controlchars(char *str)
-{
- unsigned char *s = (unsigned char *)str;
-
- if (!str) {
- return (NULL);
- }
-
- while (*s) {
-
- if (iscntrl(*s)) {
- *s='_';
- }
- s++;
- }
-
- return (str);
-}
-/* }}} */
-
-
-/* {{{ php_url_parse
- */
-PHPAPI php_url *php_url_parse(char const *str)
-{
- int length = strlen(str);
- char port_buf[6];
- php_url *ret = ecalloc(1, sizeof(php_url));
- char const *s, *e, *p, *pp, *ue;
-
- s = str;
- ue = s + length;
-
- /* parse scheme */
- if ((e = strchr(s, ':')) && (e-s)) {
- /*
- * certain schemas like mailto: and zlib: may not have any / after them
- * this check ensures we support those.
- */
- if (*(e+1) != '/') {
- /* check if the data we get is a port this allows us to
- * correctly parse things like a.com:80
- */
- p = e + 1;
- while (isdigit(*p)) {
- p++;
- }
-
- if ((*p) == '\0' || *p == '/') {
- goto parse_port;
- }
-
- ret->scheme = estrndup(s, (e-s));
- php_replace_controlchars(ret->scheme);
-
- length -= ++e - s;
- s = e;
- goto just_path;
- } else {
- ret->scheme = estrndup(s, (e-s));
- php_replace_controlchars(ret->scheme);
-
- if (*(e+2) == '/') {
- s = e + 3;
- if (!strncasecmp("file", ret->scheme, sizeof("file"))) {
- if (*(e + 3) == '/') {
- /* support windows drive letters as in:
- file:///c:/somedir/file.txt
- */
- if (*(e + 5) == ':') {
- s = e + 4;
- }
- goto nohost;
- }
- }
- } else {
- s = e + 1;
- if (!strncasecmp("file", ret->scheme, sizeof("file"))) {
- goto nohost;
- } else {
- length -= ++e - s;
- s = e;
- goto just_path;
- }
- }
- }
- } else if (e) { /* no scheme, look for port */
- parse_port:
- p = e + 1;
- pp = p;
-
- while (pp-p < 6 && isdigit(*pp)) {
- pp++;
- }
-
- if (pp-p < 6 && (*pp == '/' || *pp == '\0')) {
- memcpy(port_buf, p, (pp-p));
- port_buf[pp-p] = '\0';
- ret->port = atoi(port_buf);
- } else {
- goto just_path;
- }
- } else {
- just_path:
- ue = s + length;
- goto nohost;
- }
-
- e = ue;
-
- if (!(p = strchr(s, '/'))) {
- if ((p = strchr(s, '?'))) {
- e = p;
- }
- } else {
- e = p;
- }
-
- /* check for login and password */
- if ((p = memchr(s, '@', (e-s)))) {
- if ((pp = memchr(s, ':', (p-s)))) {
- if ((pp-s) > 0) {
- ret->user = estrndup(s, (pp-s));
- php_replace_controlchars(ret->user);
- }
-
- pp++;
- if (p-pp > 0) {
- ret->pass = estrndup(pp, (p-pp));
- php_replace_controlchars(ret->pass);
- }
- } else {
- ret->user = estrndup(s, (p-s));
- php_replace_controlchars(ret->user);
- }
-
- s = p + 1;
- }
-
- /* check for port */
- if (*s == '[' && *(e-1) == ']') {
- /* Short circuit portscan,
- we're dealing with an
- IPv6 embedded address */
- p = s;
- } else {
- /* memrchr is a GNU specific extension
- Emulate for wide compatability */
- for(p = e; *p != ':' && p >= s; p--);
- }
-
- if (p >= s && *p == ':') {
- if (!ret->port) {
- p++;
- if (e-p > 5) { /* port cannot be longer then 5 characters */
- STR_FREE(ret->scheme);
- STR_FREE(ret->user);
- STR_FREE(ret->pass);
- efree(ret);
- return NULL;
- } else if (e - p > 0) {
- memcpy(port_buf, p, (e-p));
- port_buf[e-p] = '\0';
- ret->port = atoi(port_buf);
- }
- p--;
- }
- } else {
- p = e;
- }
-
- /* check if we have a valid host, if we don't reject the string as url */
- if ((p-s) < 1) {
- STR_FREE(ret->scheme);
- STR_FREE(ret->user);
- STR_FREE(ret->pass);
- efree(ret);
- return NULL;
- }
-
- ret->host = estrndup(s, (p-s));
- php_replace_controlchars(ret->host);
-
- if (e == ue) {
- return ret;
- }
-
- s = e;
-
- nohost:
-
- if ((p = strchr(s, '?'))) {
- pp = strchr(s, '#');
-
- if (pp && pp < p) {
- p = pp;
- pp = strchr(pp+2, '#');
- }
-
- if (p - s) {
- ret->path = estrndup(s, (p-s));
- php_replace_controlchars(ret->path);
- }
-
- if (pp) {
- if (pp - ++p) {
- ret->query = estrndup(p, (pp-p));
- php_replace_controlchars(ret->query);
- }
- p = pp;
- goto label_parse;
- } else if (++p - ue) {
- ret->query = estrndup(p, (ue-p));
- php_replace_controlchars(ret->query);
- }
- } else if ((p = strchr(s, '#'))) {
- if (p - s) {
- ret->path = estrndup(s, (p-s));
- php_replace_controlchars(ret->path);
- }
-
- label_parse:
- p++;
-
- if (ue - p) {
- ret->fragment = estrndup(p, (ue-p));
- php_replace_controlchars(ret->fragment);
- }
- } else {
- ret->path = estrndup(s, (ue-s));
- php_replace_controlchars(ret->path);
- }
-
- return ret;
-}
-/* }}} */
-
-/* {{{ proto array parse_url(string url)
- Parse a URL and return its components */
-PHP_FUNCTION(parse_url)
-{
- char *str;
- int str_len;
- php_url *resource;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &str, &str_len) == FAILURE) {
- return;
- }
-
- resource = php_url_parse(str);
- if (resource == NULL) {
- php_error_docref1(NULL TSRMLS_CC, str, E_WARNING, "Unable to parse url");
- RETURN_FALSE;
- }
-
- /* allocate an array for return */
- array_init(return_value);
-
- /* add the various elements to the array */
- if (resource->scheme != NULL)
- add_assoc_string(return_value, "scheme", resource->scheme, 1);
- if (resource->host != NULL)
- add_assoc_string(return_value, "host", resource->host, 1);
- if (resource->port != 0)
- add_assoc_long(return_value, "port", resource->port);
- if (resource->user != NULL)
- add_assoc_string(return_value, "user", resource->user, 1);
- if (resource->pass != NULL)
- add_assoc_string(return_value, "pass", resource->pass, 1);
- if (resource->path != NULL)
- add_assoc_string(return_value, "path", resource->path, 1);
- if (resource->query != NULL)
- add_assoc_string(return_value, "query", resource->query, 1);
- if (resource->fragment != NULL)
- add_assoc_string(return_value, "fragment", resource->fragment, 1);
-
- php_url_free(resource);
-}
-/* }}} */
-
-/* {{{ php_htoi
- */
-static int php_htoi(char *s)
-{
- int value;
- int c;
-
- c = ((unsigned char *)s)[0];
- if (isupper(c))
- c = tolower(c);
- value = (c >= '0' && c <= '9' ? c - '0' : c - 'a' + 10) * 16;
-
- c = ((unsigned char *)s)[1];
- if (isupper(c))
- c = tolower(c);
- value += c >= '0' && c <= '9' ? c - '0' : c - 'a' + 10;
-
- return (value);
-}
-/* }}} */
-
-/* rfc1738:
-
- ...The characters ";",
- "/", "?", ":", "@", "=" and "&" are the characters which may be
- reserved for special meaning within a scheme...
-
- ...Thus, only alphanumerics, the special characters "$-_.+!*'(),", and
- reserved characters used for their reserved purposes may be used
- unencoded within a URL...
-
- For added safety, we only leave -_. unencoded.
- */
-
-static unsigned char hexchars[] = "0123456789ABCDEF";
-
-/* {{{ php_url_encode
- */
-PHPAPI char *php_url_encode(char const *s, int len, int *new_length)
-{
- register unsigned char c;
- unsigned char *to, *start;
- unsigned char const *from, *end;
-
- from = s;
- end = s + len;
- start = to = (unsigned char *) safe_emalloc(3, len, 1);
-
- while (from < end) {
- c = *from++;
-
- if (c == ' ') {
- *to++ = '+';
-#ifndef CHARSET_EBCDIC
- } else if ((c < '0' && c != '-' && c != '.') ||
- (c < 'A' && c > '9') ||
- (c > 'Z' && c < 'a' && c != '_') ||
- (c > 'z')) {
- to[0] = '%';
- to[1] = hexchars[c >> 4];
- to[2] = hexchars[c & 15];
- to += 3;
-#else /*CHARSET_EBCDIC*/
- } else if (!isalnum(c) && strchr("_-.", c) == NULL) {
- /* Allow only alphanumeric chars and '_', '-', '.'; escape the rest */
- to[0] = '%';
- to[1] = hexchars[os_toascii[c] >> 4];
- to[2] = hexchars[os_toascii[c] & 15];
- to += 3;
-#endif /*CHARSET_EBCDIC*/
- } else {
- *to++ = c;
- }
- }
- *to = 0;
- if (new_length) {
- *new_length = to - start;
- }
- return (char *) start;
-}
-/* }}} */
-
-/* {{{ proto string urlencode(string str)
- URL-encodes string */
-PHP_FUNCTION(urlencode)
-{
- char *in_str, *out_str;
- int in_str_len, out_str_len;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &in_str,
- &in_str_len) == FAILURE) {
- return;
- }
-
- out_str = php_url_encode(in_str, in_str_len, &out_str_len);
- RETURN_STRINGL(out_str, out_str_len, 0);
-}
-/* }}} */
-
-/* {{{ proto string urldecode(string str)
- Decodes URL-encoded string */
-PHP_FUNCTION(urldecode)
-{
- char *in_str, *out_str;
- int in_str_len, out_str_len;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &in_str,
- &in_str_len) == FAILURE) {
- return;
- }
-
- out_str = estrndup(in_str, in_str_len);
- out_str_len = php_url_decode(out_str, in_str_len);
-
- RETURN_STRINGL(out_str, out_str_len, 0);
-}
-/* }}} */
-
-/* {{{ php_url_decode
- */
-PHPAPI int php_url_decode(char *str, int len)
-{
- char *dest = str;
- char *data = str;
-
- while (len--) {
- if (*data == '+') {
- *dest = ' ';
- }
- else if (*data == '%' && len >= 2 && isxdigit((int) *(data + 1))
- && isxdigit((int) *(data + 2))) {
-#ifndef CHARSET_EBCDIC
- *dest = (char) php_htoi(data + 1);
-#else
- *dest = os_toebcdic[(char) php_htoi(data + 1)];
-#endif
- data += 2;
- len -= 2;
- } else {
- *dest = *data;
- }
- data++;
- dest++;
- }
- *dest = '\0';
- return dest - str;
-}
-/* }}} */
-
-/* {{{ php_raw_url_encode
- */
-PHPAPI char *php_raw_url_encode(char const *s, int len, int *new_length)
-{
- register int x, y;
- unsigned char *str;
-
- str = (unsigned char *) safe_emalloc(3, len, 1);
- for (x = 0, y = 0; len--; x++, y++) {
- str[y] = (unsigned char) s[x];
-#ifndef CHARSET_EBCDIC
- if ((str[y] < '0' && str[y] != '-' && str[y] != '.') ||
- (str[y] < 'A' && str[y] > '9') ||
- (str[y] > 'Z' && str[y] < 'a' && str[y] != '_') ||
- (str[y] > 'z')) {
- str[y++] = '%';
- str[y++] = hexchars[(unsigned char) s[x] >> 4];
- str[y] = hexchars[(unsigned char) s[x] & 15];
-#else /*CHARSET_EBCDIC*/
- if (!isalnum(str[y]) && strchr("_-.", str[y]) != NULL) {
- str[y++] = '%';
- str[y++] = hexchars[os_toascii[(unsigned char) s[x]] >> 4];
- str[y] = hexchars[os_toascii[(unsigned char) s[x]] & 15];
-#endif /*CHARSET_EBCDIC*/
- }
- }
- str[y] = '\0';
- if (new_length) {
- *new_length = y;
- }
- return ((char *) str);
-}
-/* }}} */
-
-/* {{{ proto string rawurlencode(string str)
- URL-encodes string */
-PHP_FUNCTION(rawurlencode)
-{
- char *in_str, *out_str;
- int in_str_len, out_str_len;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &in_str,
- &in_str_len) == FAILURE) {
- return;
- }
-
- out_str = php_raw_url_encode(in_str, in_str_len, &out_str_len);
- RETURN_STRINGL(out_str, out_str_len, 0);
-}
-/* }}} */
-
-/* {{{ proto string rawurldecode(string str)
- Decodes URL-encodes string */
-PHP_FUNCTION(rawurldecode)
-{
- char *in_str, *out_str;
- int in_str_len, out_str_len;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &in_str,
- &in_str_len) == FAILURE) {
- return;
- }
-
- out_str = estrndup(in_str, in_str_len);
- out_str_len = php_raw_url_decode(out_str, in_str_len);
-
- RETURN_STRINGL(out_str, out_str_len, 0);
-}
-/* }}} */
-
-/* {{{ php_raw_url_decode
- */
-PHPAPI int php_raw_url_decode(char *str, int len)
-{
- char *dest = str;
- char *data = str;
-
- while (len--) {
- if (*data == '%' && len >= 2 && isxdigit((int) *(data + 1))
- && isxdigit((int) *(data + 2))) {
-#ifndef CHARSET_EBCDIC
- *dest = (char) php_htoi(data + 1);
-#else
- *dest = os_toebcdic[(char) php_htoi(data + 1)];
-#endif
- data += 2;
- len -= 2;
- } else {
- *dest = *data;
- }
- data++;
- dest++;
- }
- *dest = '\0';
- return dest - str;
-}
-/* }}} */
-
-/* {{{ proto array get_headers(string url)
- fetches all the headers sent by the server in response to a HTTP request */
-PHP_FUNCTION(get_headers)
-{
- char *url;
- int url_len;
- php_stream_context *context = NULL;
- php_stream *stream;
- zval **prev_val, **hdr = NULL;
- HashPosition pos;
- long format = 0;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|l", &url, &url_len, &format) == FAILURE) {
- return;
- }
-
- if (!(stream = php_stream_open_wrapper_ex(url, "r", REPORT_ERRORS | STREAM_USE_URL | STREAM_ONLY_GET_HEADERS, NULL, context))) {
- RETURN_FALSE;
- }
-
- array_init(return_value);
-
- zend_hash_internal_pointer_reset_ex(HASH_OF(stream->wrapperdata), &pos);
- while (zend_hash_get_current_data_ex(HASH_OF(stream->wrapperdata), (void**)&hdr, &pos) != FAILURE) {
- if (!format) {
-no_name_header:
- add_next_index_stringl(return_value, Z_STRVAL_PP(hdr), Z_STRLEN_PP(hdr), 1);
- } else {
- char c;
- char *s, *p;
-
- if ((p = strchr(Z_STRVAL_PP(hdr), ':'))) {
- c = *p;
- *p = '\0';
- s = p + 1;
- while (isspace((int)*(unsigned char *)s)) {
- s++;
- }
-
- if (zend_hash_find(HASH_OF(return_value), Z_STRVAL_PP(hdr), (p - Z_STRVAL_PP(hdr) + 1), (void **) &prev_val) == FAILURE) {
- add_assoc_stringl_ex(return_value, Z_STRVAL_PP(hdr), (p - Z_STRVAL_PP(hdr) + 1), s, (Z_STRLEN_PP(hdr) - (s - Z_STRVAL_PP(hdr))), 1);
- } else { /* some headers may occur more then once, therefor we need to remake the string into an array */
- convert_to_array(*prev_val);
- add_next_index_stringl(*prev_val, s, (Z_STRLEN_PP(hdr) - (s - Z_STRVAL_PP(hdr))), 1);
- }
-
- *p = c;
- } else {
- goto no_name_header;
- }
- }
- zend_hash_move_forward_ex(HASH_OF(stream->wrapperdata), &pos);
- }
-
- php_stream_close(stream);
-}
-/* }}} */
-
-/*
- * 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/standard/url.h b/ext/standard/url.h
deleted file mode 100644
index 709e830c26..0000000000
--- a/ext/standard/url.h
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Jim Winstead <jimw@php.net> |
- +----------------------------------------------------------------------+
- */
-/* $Id$ */
-
-#ifndef URL_H
-#define URL_H
-
-typedef struct php_url {
- char *scheme;
- char *user;
- char *pass;
- char *host;
- unsigned short port;
- char *path;
- char *query;
- char *fragment;
-} php_url;
-
-PHPAPI void php_url_free(php_url *theurl);
-PHPAPI php_url *php_url_parse(char const *str);
-PHPAPI int php_url_decode(char *str, int len); /* return value: length of decoded string */
-PHPAPI int php_raw_url_decode(char *str, int len); /* return value: length of decoded string */
-PHPAPI char *php_url_encode(char const *s, int len, int *new_length);
-PHPAPI char *php_raw_url_encode(char const *s, int len, int *new_length);
-
-PHP_FUNCTION(parse_url);
-PHP_FUNCTION(urlencode);
-PHP_FUNCTION(urldecode);
-PHP_FUNCTION(rawurlencode);
-PHP_FUNCTION(rawurldecode);
-PHP_FUNCTION(get_headers);
-
-#endif /* URL_H */
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- */
diff --git a/ext/standard/url_scanner.c b/ext/standard/url_scanner.c
deleted file mode 100644
index 9e7299d7ef..0000000000
--- a/ext/standard/url_scanner.c
+++ /dev/null
@@ -1,384 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Hartmut Holzgraefe <hholzgra@php.net> |
- +----------------------------------------------------------------------+
- */
-/* $Id$ */
-
-#include "php.h"
-
-#include "php_globals.h"
-
-#include <sys/types.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include "basic_functions.h"
-#include "url_scanner.h"
-
-#ifndef BUFSIZE
-#define BUFSIZE 256
-#endif
-
-int php_url_scanner_activate(TSRMLS_D)
-{
- url_adapt(NULL,0,NULL,NULL);
- return SUCCESS;
-}
-
-
-int php_url_scanner_deactivate(TSRMLS_D)
-{
- url_adapt(NULL,0,NULL,NULL);
- return SUCCESS;
-}
-
-/* {{{ url_attr_addon
- */
-static char *url_attr_addon(const char *tag,const char *attr,const char *val,const char *buf)
-{
- int flag = 0;
- TSRMLS_FETCH();
-
- if(!strcasecmp(tag,"a") && !strcasecmp(attr,"href")) {
- flag = 1;
- } else if(!strcasecmp(tag,"area" ) && !strcasecmp(attr,"href" )) {
- flag = 1;
- } else if(!strcasecmp(tag,"form" ) && !strcasecmp(attr,"action" )) {
- flag = 1;
- } else if(!strcasecmp(tag,"frame") && !strcasecmp(attr,"source" )) {
- flag = 1;
- } else if(!strcasecmp(tag,"img" ) && !strcasecmp(attr,"action" )) {
- flag = 1;
- }
- if(flag) {
- if(!strstr(val,buf)&&!strchr(val,':'))
- {
- char *result = (char *)emalloc(strlen(buf)+strlen(PG(arg_separator).output)+1);
- int n;
-
- if(strchr(val,'?')) {
- strcpy(result,PG(arg_separator).output);
- n=strlen(PG(arg_separator).output);
- } else {
- *result='?';
- n=1;
- }
- strcpy(result+n,buf);
- return result;
- }
- }
- return NULL;
-}
-/* }}} */
-
-#define US BG(url_adapt_state)
-
-/* {{{ url_adapt_ext
- */
-char *url_adapt_ext(const char *src, uint srclen, const char *name, const char *val, size_t *newlen)
-{
- char buf[1024];
-
- snprintf(buf, sizeof(buf)-1, "%s=%s", name, val);
-
- return url_adapt(src, srclen, buf, newlen);
-}
-/* }}} */
-
-/* {{{ url_adapt
- */
-char *url_adapt(const char *src, size_t srclen, const char *data, size_t *newlen)
-{
- char *out,*outp;
- int maxl,n;
- TSRMLS_FETCH();
-
- if(src==NULL) {
- US.state=STATE_NORMAL;
- if(US.tag) { efree(US.tag); US.tag =NULL; }
- if(US.attr) { efree(US.attr); US.attr=NULL; }
- if(US.val) { efree(US.val); US.val =NULL; }
- return NULL;
- }
-
- if(srclen==0)
- srclen=strlen(src);
-
- out=malloc(srclen+1);
- maxl=srclen;
- n=srclen;
-
- *newlen=0;
- outp=out;
-
- while(n--) {
- switch(US.state) {
- case STATE_NORMAL:
- if(*src=='<')
- US.state=STATE_TAG_START;
- break;
-
- case STATE_TAG_START:
- if(! isalnum(*src))
- US.state=STATE_NORMAL;
- US.state=STATE_TAG;
- US.ml=BUFSIZE;
- US.p=US.tag=erealloc(US.tag,US.ml);
- *(US.p)++=*src;
- US.l=1;
- break;
-
- case STATE_TAG:
- if(isalnum(*src)) {
- *(US.p)++ = *src;
- US.l++;
- if(US.l==US.ml) {
- US.ml+=BUFSIZE;
- US.tag=erealloc(US.tag,US.ml);
- US.p = US.tag+US.l;
- }
- } else if (isspace(*src)) {
- US.state = STATE_IN_TAG;
- *US.p='\0';
- US.tag=erealloc(US.tag,US.l);
- } else {
- US.state = STATE_NORMAL;
- efree(US.tag);
- US.tag=NULL;
- }
- break;
-
- case STATE_IN_TAG:
- if(isalnum(*src)) {
- US.state=STATE_TAG_ATTR;
- US.ml=BUFSIZE;
- US.p=US.attr=erealloc(US.attr,US.ml);
- *(US.p)++=*src;
- US.l=1;
- } else if (! isspace(*src)) {
- US.state = STATE_NORMAL;
- efree(US.tag);
- US.tag=NULL;
- }
- break;
-
- case STATE_TAG_ATTR:
- if(isalnum(*src)) {
- *US.p++=*src;
- ++US.l;
- if(US.l==US.ml) {
- US.ml+=BUFSIZE;
- US.attr=erealloc(US.attr,US.ml);
- US.p = US.attr+US.l;
- }
- if(US.l==US.ml) {
- US.ml+=BUFSIZE;
- US.attr=erealloc(US.attr,US.ml);
- US.p = US.attr+US.l;
- }
- } else if(isspace(*src)||(*src=='=')){
- US.state=STATE_TAG_IS;
- *US.p=0;
- US.attr=erealloc(US.attr,US.l);
- } else if(*src=='>') {
- US.state=STATE_NORMAL;
- } else {
- efree(US.attr);
- US.attr=NULL;
- US.state=STATE_IN_TAG;
- }
- break;
-
- case STATE_TAG_IS:
- case STATE_TAG_IS2:
- if(*src=='>'){
- US.state=STATE_NORMAL;
- if(! (US.attr_done)) {
- char *p;
- p=url_attr_addon(US.tag,US.attr,"",data);
- if(p) {
- int l= strlen(p);
- maxl+=l;
- out=realloc(out,maxl);
- outp=out+*newlen;
- strcpy(outp,p);
- outp+=l;
- *newlen+=l;
- efree(p);
- }
- }
- } else if(*src=='#') {
- if(! (US.attr_done)) {
- char *p;
- US.attr_done=1;
- p=url_attr_addon(US.tag,US.attr,"#",data);
- if(p) {
- int l= strlen(p);
- maxl+=l;
- out=realloc(out,maxl);
- outp=out+*newlen;
- strcpy(outp,p);
- outp+=l;
- *newlen+=l;
- efree(p);
- }
- }
- } else if(!isspace(*src)&&(*src!='=')) {
- US.ml=BUFSIZE;
- US.p=US.val=erealloc(US.val,US.ml);
- US.l=0;
- US.attr_done=0;
- if((*src=='"')||(*src=='\'')) {
- US.state=STATE_TAG_QVAL2;
- US.delim=*src;
- } else {
- US.state=STATE_TAG_VAL;
- *US.p++=*src;
- US.l++;
- }
- }
- break;
-
-
- case STATE_TAG_QVAL2:
- if(*src=='#') {
- if(! (US.attr_done)) {
- char *p;
- US.attr_done=1;
- *US.p='\0';
- p=url_attr_addon(US.tag,US.attr,US.val,data);
- if(p) {
- int l= strlen(p);
- maxl+=l;
- out=realloc(out,maxl);
- outp=out+*newlen;
- strcpy(outp,p);
- outp+=l;
- *newlen+=l;
- efree(p);
- }
- }
- } else if(*src==US.delim) {
- US.state=STATE_IN_TAG;
- *US.p='\0';
- if(! (US.attr_done)) {
- char *p;
- p=url_attr_addon(US.tag,US.attr,US.val,data);
- if(p) {
- int l= strlen(p);
- maxl+=l;
- out=realloc(out,maxl);
- outp=out+*newlen;
- strcpy(outp,p);
- outp+=l;
- *newlen+=l;
- efree(p);
- }
- }
- break;
- } else if(*src=='\\') {
- US.state=STATE_TAG_QVAL2b;
- } else if (*src=='>') {
- US.state=STATE_NORMAL;
- }
-
- *US.p++=*src;
- ++US.l;
- if(US.l==US.ml) {
- US.ml+=BUFSIZE;
- US.val=erealloc(US.val,US.ml);
- US.p = US.val+US.l;
- }
-
- break;
-
- case STATE_TAG_QVAL2b:
- US.state=STATE_TAG_QVAL2;
- *US.p++=*src;
- ++US.l;
- if(US.l==US.ml) {
- US.ml+=BUFSIZE;
- US.val=erealloc(US.val,US.ml);
- US.p = US.val+US.l;
- }
- break;
-
- case STATE_TAG_VAL:
- case STATE_TAG_VAL2:
- if(*src=='#') {
- if(! (US.attr_done)) {
- char *p;
- US.attr_done=1;
- *US.p='\0';
- p=url_attr_addon(US.tag,US.attr,US.val,data);
- if(p) {
- int l= strlen(p);
- maxl+=l;
- out=realloc(out,maxl);
- outp=out+*newlen;
- strcpy(outp,p);
- outp+=l;
- *newlen+=l;
- efree(p);
- }
- }
- } else if(isspace(*src)||(*src=='>')) {
- US.state=(*src=='>')?STATE_NORMAL:STATE_IN_TAG;
- *US.p='\0';
- if(! (US.attr_done)) {
- char *p;
- p=url_attr_addon(US.tag,US.attr,US.val,data);
- if(p) {
- int l= strlen(p);
- maxl+=l;
- out=realloc(out,maxl);
- outp=out+*newlen;
- strcpy(outp,p);
- outp+=l;
- *newlen+=l;
- efree(p);
- }
- }
- } else {
- *US.p++=*src;
- US.l++;
- if(US.l==US.ml) {
- US.ml+=BUFSIZE;
- US.val=erealloc(US.val,US.ml);
- US.p = US.val+US.l;
- }
- }
- break;
- default:
- break;
- }
-
- *outp++=*src++;
- *newlen+=1;
- }
- *outp='\0';
- return out;
-}
-/* }}} */
-
-/*
- * 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/standard/url_scanner.h b/ext/standard/url_scanner.h
deleted file mode 100644
index 505ac4da43..0000000000
--- a/ext/standard/url_scanner.h
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Sascha Schumann <sascha@schumann.cx> |
- +----------------------------------------------------------------------+
- */
-/* $Id$ */
-
-#ifndef URI_SCANNER_H
-#define URI_SCANNER_H
-
-int php_url_scanner_activate(TSRMLS_D);
-int php_url_scanner_deactivate(TSRMLS_D);
-
-char *url_adapt(const char *src, size_t srclen, const char *data, size_t *newlen);
-
-enum url_state {
- STATE_NORMAL,
- STATE_TAG_START,
- STATE_TAG,
- STATE_IN_TAG,
- STATE_TAG_ATTR,
- STATE_TAG_IS,
- STATE_TAG_IS2,
- STATE_TAG_VAL,
- STATE_TAG_VAL2,
- STATE_TAG_QVAL1,
- STATE_TAG_QVAL2,
- STATE_TAG_QVAL2b
-};
-
-typedef struct url_adapt_struct {
- enum url_state state;
- char *tag;
- char *attr;
- char *val;
- char delim;
- char *p;
- int l, ml;
- int attr_done;
-} url_adapt_state_t;
-
-#endif
diff --git a/ext/standard/url_scanner_ex.c b/ext/standard/url_scanner_ex.c
deleted file mode 100644
index 8ef4c2e355..0000000000
--- a/ext/standard/url_scanner_ex.c
+++ /dev/null
@@ -1,1101 +0,0 @@
-/* Generated by re2c 0.9.2 on Sat Mar 13 15:56:45 2004 */
-#line 1 "/usr/src/php5/ext/standard/url_scanner_ex.re"
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Sascha Schumann <sascha@schumann.cx> |
- +----------------------------------------------------------------------+
-*/
-
-#include "php.h"
-
-#ifdef HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-#ifdef HAVE_LIMITS_H
-#include <limits.h>
-#endif
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include "php_ini.h"
-#include "php_globals.h"
-#define STATE_TAG SOME_OTHER_STATE_TAG
-#include "basic_functions.h"
-#include "url.h"
-#undef STATE_TAG
-
-#define url_scanner url_scanner_ex
-
-#include "php_smart_str.h"
-
-static PHP_INI_MH(OnUpdateTags)
-{
- url_adapt_state_ex_t *ctx;
- char *key;
- char *lasts;
- char *tmp;
-
- ctx = &BG(url_adapt_state_ex);
-
- tmp = estrndup(new_value, new_value_length);
-
- if (ctx->tags)
- zend_hash_destroy(ctx->tags);
- else
- ctx->tags = malloc(sizeof(HashTable));
-
- zend_hash_init(ctx->tags, 0, NULL, NULL, 1);
-
- for (key = php_strtok_r(tmp, ",", &lasts);
- key;
- key = php_strtok_r(NULL, ",", &lasts)) {
- char *val;
-
- val = strchr(key, '=');
- if (val) {
- char *q;
- int keylen;
-
- *val++ = '\0';
- for (q = key; *q; q++)
- *q = tolower(*q);
- keylen = q - key;
- /* key is stored withOUT NUL
- val is stored WITH NUL */
- zend_hash_add(ctx->tags, key, keylen, val, strlen(val)+1, NULL);
- }
- }
-
- efree(tmp);
-
- return SUCCESS;
-}
-
-PHP_INI_BEGIN()
- STD_PHP_INI_ENTRY("url_rewriter.tags", "a=href,area=href,frame=src,form=,fieldset=", PHP_INI_ALL, OnUpdateTags, url_adapt_state_ex, php_basic_globals, basic_globals)
-PHP_INI_END()
-
-#line 95 "/usr/src/php5/ext/standard/url_scanner_ex.re"
-
-
-#define YYFILL(n) goto done
-#define YYCTYPE unsigned char
-#define YYCURSOR p
-#define YYLIMIT q
-#define YYMARKER r
-
-static inline void append_modified_url(smart_str *url, smart_str *dest, smart_str *url_app, const char *separator)
-{
- register const char *p, *q;
- const char *bash = NULL;
- const char *sep = "?";
-
- q = (p = url->c) + url->len;
-
-scan:
-
-#line 7 "re2c-output.c"
-{
- YYCTYPE yych;
- unsigned int yyaccept;
- static unsigned char yybm[] = {
- 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 0, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 0, 128, 128, 128, 128, 0,
- 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128,
- };
- goto yy0;
-yy1: ++YYCURSOR;
-yy0:
- if(YYLIMIT == YYCURSOR) YYFILL(1);
- yych = *YYCURSOR;
- if(yybm[0+yych] & 128) goto yy8;
- if(yych <= '9') goto yy6;
- if(yych >= ';') goto yy4;
- goto yy2;
-yy2: yych = *++YYCURSOR;
- goto yy3;
-yy3:
-#line 113 "/usr/src/php5/ext/standard/url_scanner_ex.re"
-{ smart_str_append(dest, url); return; }
-#line 59 "re2c-output.c"
-yy4: yych = *++YYCURSOR;
- goto yy5;
-yy5:
-#line 114 "/usr/src/php5/ext/standard/url_scanner_ex.re"
-{ sep = separator; goto scan; }
-#line 65 "re2c-output.c"
-yy6: yych = *++YYCURSOR;
- goto yy7;
-yy7:
-#line 115 "/usr/src/php5/ext/standard/url_scanner_ex.re"
-{ bash = p - 1; goto done; }
-#line 71 "re2c-output.c"
-yy8: ++YYCURSOR;
- if(YYLIMIT == YYCURSOR) YYFILL(1);
- yych = *YYCURSOR;
- goto yy9;
-yy9: if(yybm[0+yych] & 128) goto yy8;
- goto yy10;
-yy10:
-#line 116 "/usr/src/php5/ext/standard/url_scanner_ex.re"
-{ goto scan; }
-#line 81 "re2c-output.c"
-}
-#line 117 "/usr/src/php5/ext/standard/url_scanner_ex.re"
-
-done:
-
- /* Don't modify URLs of the format "#mark" */
- if (bash && bash - url->c == 0) {
- smart_str_append(dest, url);
- return;
- }
-
- if (bash)
- smart_str_appendl(dest, url->c, bash - url->c);
- else
- smart_str_append(dest, url);
-
- smart_str_appends(dest, sep);
- smart_str_append(dest, url_app);
-
- if (bash)
- smart_str_appendl(dest, bash, q - bash);
-}
-
-
-#undef YYFILL
-#undef YYCTYPE
-#undef YYCURSOR
-#undef YYLIMIT
-#undef YYMARKER
-
-static inline void tag_arg(url_adapt_state_ex_t *ctx, char quotes, char type TSRMLS_DC)
-{
- char f = 0;
-
- if (strncasecmp(ctx->arg.c, ctx->lookup_data, ctx->arg.len) == 0)
- f = 1;
-
- if (quotes)
- smart_str_appendc(&ctx->result, type);
- if (f) {
- append_modified_url(&ctx->val, &ctx->result, &ctx->url_app, PG(arg_separator).output);
- } else {
- smart_str_append(&ctx->result, &ctx->val);
- }
- if (quotes)
- smart_str_appendc(&ctx->result, type);
-}
-
-enum {
- STATE_PLAIN = 0,
- STATE_TAG,
- STATE_NEXT_ARG,
- STATE_ARG,
- STATE_BEFORE_VAL,
- STATE_VAL
-};
-
-#define YYFILL(n) goto stop
-#define YYCTYPE unsigned char
-#define YYCURSOR xp
-#define YYLIMIT end
-#define YYMARKER q
-#define STATE ctx->state
-
-#define STD_PARA url_adapt_state_ex_t *ctx, char *start, char *YYCURSOR TSRMLS_DC
-#define STD_ARGS ctx, start, xp TSRMLS_CC
-
-#if SCANNER_DEBUG
-#define scdebug(x) printf x
-#else
-#define scdebug(x)
-#endif
-
-static inline void passthru(STD_PARA)
-{
- scdebug(("appending %d chars, starting with %c\n", YYCURSOR-start, *start));
- smart_str_appendl(&ctx->result, start, YYCURSOR - start);
-}
-
-/*
- * This function appends a hidden input field after a <form> or
- * <fieldset>. The latter is important for XHTML.
- */
-
-static void handle_form(STD_PARA)
-{
- int doit = 0;
-
- if (ctx->form_app.len > 0) {
- switch (ctx->tag.len) {
-
-#define RECOGNIZE(x) do { \
- case sizeof(x)-1: \
- if (strncasecmp(ctx->tag.c, x, sizeof(x)-1) == 0) \
- doit = 1; \
- break; \
-} while (0)
-
- RECOGNIZE("form");
- RECOGNIZE("fieldset");
- }
-
- if (doit)
- smart_str_append(&ctx->result, &ctx->form_app);
- }
-}
-
-
-
-/*
- * HANDLE_TAG copies the HTML Tag and checks whether we
- * have that tag in our table. If we might modify it,
- * we continue to scan the tag, otherwise we simply copy the complete
- * HTML stuff to the result buffer.
- */
-
-static inline void handle_tag(STD_PARA)
-{
- int ok = 0;
- int i;
-
- ctx->tag.len = 0;
- smart_str_appendl(&ctx->tag, start, YYCURSOR - start);
- for (i = 0; i < ctx->tag.len; i++)
- ctx->tag.c[i] = tolower((int)(unsigned char)ctx->tag.c[i]);
- if (zend_hash_find(ctx->tags, ctx->tag.c, ctx->tag.len, (void **) &ctx->lookup_data) == SUCCESS)
- ok = 1;
- STATE = ok ? STATE_NEXT_ARG : STATE_PLAIN;
-}
-
-static inline void handle_arg(STD_PARA)
-{
- ctx->arg.len = 0;
- smart_str_appendl(&ctx->arg, start, YYCURSOR - start);
-}
-
-static inline void handle_val(STD_PARA, char quotes, char type)
-{
- smart_str_setl(&ctx->val, start + quotes, YYCURSOR - start - quotes * 2);
- tag_arg(ctx, quotes, type TSRMLS_CC);
-}
-
-static inline void xx_mainloop(url_adapt_state_ex_t *ctx, const char *newdata, size_t newlen TSRMLS_DC)
-{
- char *end, *q;
- char *xp;
- char *start;
- int rest;
-
- smart_str_appendl(&ctx->buf, newdata, newlen);
-
- YYCURSOR = ctx->buf.c;
- YYLIMIT = ctx->buf.c + ctx->buf.len;
-
- switch (STATE) {
- case STATE_PLAIN: goto state_plain;
- case STATE_TAG: goto state_tag;
- case STATE_NEXT_ARG: goto state_next_arg;
- case STATE_ARG: goto state_arg;
- case STATE_BEFORE_VAL: goto state_before_val;
- case STATE_VAL: goto state_val;
- }
-
-
-state_plain_begin:
- STATE = STATE_PLAIN;
-
-state_plain:
- start = YYCURSOR;
-
-#line 85 "re2c-output.c"
-{
- YYCTYPE yych;
- unsigned int yyaccept;
- static unsigned char yybm[] = {
- 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 0, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128,
- };
- goto yy11;
-yy12: ++YYCURSOR;
-yy11:
- if(YYLIMIT == YYCURSOR) YYFILL(1);
- yych = *YYCURSOR;
- if(yybm[0+yych] & 128) goto yy15;
- goto yy13;
-yy13: yych = *++YYCURSOR;
- goto yy14;
-yy14:
-#line 285 "/usr/src/php5/ext/standard/url_scanner_ex.re"
-{ passthru(STD_ARGS); STATE = STATE_TAG; goto state_tag; }
-#line 135 "re2c-output.c"
-yy15: ++YYCURSOR;
- if(YYLIMIT == YYCURSOR) YYFILL(1);
- yych = *YYCURSOR;
- goto yy16;
-yy16: if(yybm[0+yych] & 128) goto yy15;
- goto yy17;
-yy17:
-#line 286 "/usr/src/php5/ext/standard/url_scanner_ex.re"
-{ passthru(STD_ARGS); goto state_plain; }
-#line 145 "re2c-output.c"
-}
-#line 287 "/usr/src/php5/ext/standard/url_scanner_ex.re"
-
-
-state_tag:
- start = YYCURSOR;
-
-#line 149 "re2c-output.c"
-{
- YYCTYPE yych;
- unsigned int yyaccept;
- static unsigned char yybm[] = {
- 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, 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, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 0, 0, 0, 0, 0,
- 0, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 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, 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, 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, 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, 0,
- };
- goto yy18;
-yy19: ++YYCURSOR;
-yy18:
- if((YYLIMIT - YYCURSOR) < 2) YYFILL(2);
- yych = *YYCURSOR;
- if(yych <= '@') goto yy22;
- if(yych <= 'Z') goto yy20;
- if(yych <= '`') goto yy22;
- if(yych >= '{') goto yy22;
- goto yy20;
-yy20: yych = *++YYCURSOR;
- goto yy25;
-yy21:
-#line 292 "/usr/src/php5/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 202 "re2c-output.c"
-yy22: yych = *++YYCURSOR;
- goto yy23;
-yy23:
-#line 293 "/usr/src/php5/ext/standard/url_scanner_ex.re"
-{ passthru(STD_ARGS); goto state_plain_begin; }
-#line 208 "re2c-output.c"
-yy24: ++YYCURSOR;
- if(YYLIMIT == YYCURSOR) YYFILL(1);
- yych = *YYCURSOR;
- goto yy25;
-yy25: if(yybm[0+yych] & 128) goto yy24;
- goto yy21;
-}
-#line 294 "/usr/src/php5/ext/standard/url_scanner_ex.re"
-
-
-state_next_arg_begin:
- STATE = STATE_NEXT_ARG;
-
-state_next_arg:
- start = YYCURSOR;
-
-#line 218 "re2c-output.c"
-{
- YYCTYPE yych;
- unsigned int yyaccept;
- static unsigned char yybm[] = {
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 128, 128, 128, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 128, 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, 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, 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, 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, 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, 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, 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,
- };
- goto yy26;
-yy27: ++YYCURSOR;
-yy26:
- if((YYLIMIT - YYCURSOR) < 2) YYFILL(2);
- yych = *YYCURSOR;
- if(yych <= '='){
- if(yych <= '\v'){
- if(yych <= '\b') goto yy34;
- goto yy30;
- } else {
- if(yych == ' ') goto yy30;
- goto yy34;
- }
- } else {
- if(yych <= 'Z'){
- if(yych <= '>') goto yy28;
- if(yych <= '@') goto yy34;
- goto yy32;
- } else {
- if(yych <= '`') goto yy34;
- if(yych <= 'z') goto yy32;
- goto yy34;
- }
- }
-yy28: yych = *++YYCURSOR;
- goto yy29;
-yy29:
-#line 302 "/usr/src/php5/ext/standard/url_scanner_ex.re"
-{ passthru(STD_ARGS); handle_form(STD_ARGS); goto state_plain_begin; }
-#line 285 "re2c-output.c"
-yy30: yych = *++YYCURSOR;
- goto yy37;
-yy31:
-#line 303 "/usr/src/php5/ext/standard/url_scanner_ex.re"
-{ passthru(STD_ARGS); goto state_next_arg; }
-#line 291 "re2c-output.c"
-yy32: yych = *++YYCURSOR;
- goto yy33;
-yy33:
-#line 304 "/usr/src/php5/ext/standard/url_scanner_ex.re"
-{ --YYCURSOR; STATE = STATE_ARG; goto state_arg; }
-#line 297 "re2c-output.c"
-yy34: yych = *++YYCURSOR;
- goto yy35;
-yy35:
-#line 305 "/usr/src/php5/ext/standard/url_scanner_ex.re"
-{ passthru(STD_ARGS); goto state_plain_begin; }
-#line 303 "re2c-output.c"
-yy36: ++YYCURSOR;
- if(YYLIMIT == YYCURSOR) YYFILL(1);
- yych = *YYCURSOR;
- goto yy37;
-yy37: if(yybm[0+yych] & 128) goto yy36;
- goto yy31;
-}
-#line 306 "/usr/src/php5/ext/standard/url_scanner_ex.re"
-
-
-state_arg:
- start = YYCURSOR;
-
-#line 313 "re2c-output.c"
-{
- YYCTYPE yych;
- unsigned int yyaccept;
- static unsigned char yybm[] = {
- 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, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 128, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 0, 0, 0, 0, 0,
- 0, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 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, 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, 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, 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, 0,
- };
- goto yy38;
-yy39: ++YYCURSOR;
-yy38:
- 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;
- goto yy40;
-yy40: yych = *++YYCURSOR;
- goto yy45;
-yy41:
-#line 311 "/usr/src/php5/ext/standard/url_scanner_ex.re"
-{ passthru(STD_ARGS); handle_arg(STD_ARGS); STATE = STATE_BEFORE_VAL; goto state_before_val; }
-#line 366 "re2c-output.c"
-yy42: yych = *++YYCURSOR;
- goto yy43;
-yy43:
-#line 312 "/usr/src/php5/ext/standard/url_scanner_ex.re"
-{ passthru(STD_ARGS); STATE = STATE_NEXT_ARG; goto state_next_arg; }
-#line 372 "re2c-output.c"
-yy44: ++YYCURSOR;
- if(YYLIMIT == YYCURSOR) YYFILL(1);
- yych = *YYCURSOR;
- goto yy45;
-yy45: if(yybm[0+yych] & 128) goto yy44;
- goto yy41;
-}
-#line 313 "/usr/src/php5/ext/standard/url_scanner_ex.re"
-
-
-state_before_val:
- start = YYCURSOR;
-
-#line 382 "re2c-output.c"
-{
- YYCTYPE yych;
- unsigned int yyaccept;
- static unsigned char yybm[] = {
- 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,
- 128, 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, 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, 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, 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, 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, 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, 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,
- };
- goto yy46;
-yy47: ++YYCURSOR;
-yy46:
- if((YYLIMIT - YYCURSOR) < 2) YYFILL(2);
- yych = *YYCURSOR;
- if(yych == ' ') goto yy48;
- if(yych == '=') goto yy50;
- goto yy52;
-yy48: yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych == ' ') goto yy55;
- if(yych == '=') goto yy53;
- goto yy49;
-yy49:
-#line 319 "/usr/src/php5/ext/standard/url_scanner_ex.re"
-{ --YYCURSOR; goto state_next_arg_begin; }
-#line 436 "re2c-output.c"
-yy50: yych = *++YYCURSOR;
- goto yy54;
-yy51:
-#line 318 "/usr/src/php5/ext/standard/url_scanner_ex.re"
-{ passthru(STD_ARGS); STATE = STATE_VAL; goto state_val; }
-#line 442 "re2c-output.c"
-yy52: yych = *++YYCURSOR;
- goto yy49;
-yy53: ++YYCURSOR;
- if(YYLIMIT == YYCURSOR) YYFILL(1);
- yych = *YYCURSOR;
- goto yy54;
-yy54: if(yybm[0+yych] & 128) goto yy53;
- goto yy51;
-yy55: ++YYCURSOR;
- if(YYLIMIT == YYCURSOR) YYFILL(1);
- yych = *YYCURSOR;
- goto yy56;
-yy56: if(yych == ' ') goto yy55;
- if(yych == '=') goto yy53;
- goto yy57;
-yy57: YYCURSOR = YYMARKER;
- switch(yyaccept){
- case 0: goto yy49;
- }
-}
-#line 320 "/usr/src/php5/ext/standard/url_scanner_ex.re"
-
-
-
-state_val:
- start = YYCURSOR;
-
-#line 465 "re2c-output.c"
-{
- YYCTYPE yych;
- unsigned int yyaccept;
- static unsigned char yybm[] = {
- 248, 248, 248, 248, 248, 248, 248, 248,
- 248, 160, 160, 248, 248, 248, 248, 248,
- 248, 248, 248, 248, 248, 248, 248, 248,
- 248, 248, 248, 248, 248, 248, 248, 248,
- 160, 248, 56, 248, 248, 248, 248, 200,
- 248, 248, 248, 248, 248, 248, 248, 248,
- 248, 248, 248, 248, 248, 248, 248, 248,
- 248, 248, 248, 248, 248, 248, 0, 248,
- 248, 248, 248, 248, 248, 248, 248, 248,
- 248, 248, 248, 248, 248, 248, 248, 248,
- 248, 248, 248, 248, 248, 248, 248, 248,
- 248, 248, 248, 248, 248, 248, 248, 248,
- 248, 248, 248, 248, 248, 248, 248, 248,
- 248, 248, 248, 248, 248, 248, 248, 248,
- 248, 248, 248, 248, 248, 248, 248, 248,
- 248, 248, 248, 248, 248, 248, 248, 248,
- 248, 248, 248, 248, 248, 248, 248, 248,
- 248, 248, 248, 248, 248, 248, 248, 248,
- 248, 248, 248, 248, 248, 248, 248, 248,
- 248, 248, 248, 248, 248, 248, 248, 248,
- 248, 248, 248, 248, 248, 248, 248, 248,
- 248, 248, 248, 248, 248, 248, 248, 248,
- 248, 248, 248, 248, 248, 248, 248, 248,
- 248, 248, 248, 248, 248, 248, 248, 248,
- 248, 248, 248, 248, 248, 248, 248, 248,
- 248, 248, 248, 248, 248, 248, 248, 248,
- 248, 248, 248, 248, 248, 248, 248, 248,
- 248, 248, 248, 248, 248, 248, 248, 248,
- 248, 248, 248, 248, 248, 248, 248, 248,
- 248, 248, 248, 248, 248, 248, 248, 248,
- 248, 248, 248, 248, 248, 248, 248, 248,
- 248, 248, 248, 248, 248, 248, 248, 248,
- };
- goto yy58;
-yy59: ++YYCURSOR;
-yy58:
- if((YYLIMIT - YYCURSOR) < 3) YYFILL(3);
- yych = *YYCURSOR;
- if(yych <= '!'){
- if(yych <= '\n'){
- if(yych <= '\b') goto yy63;
- goto yy64;
- } else {
- if(yych == ' ') goto yy64;
- goto yy63;
- }
- } else {
- if(yych <= '\''){
- if(yych <= '"') goto yy60;
- if(yych <= '&') goto yy63;
- goto yy62;
- } else {
- if(yych == '>') goto yy64;
- goto yy63;
- }
- }
-yy60: yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- goto yy77;
-yy61:
-#line 328 "/usr/src/php5/ext/standard/url_scanner_ex.re"
-{ handle_val(STD_ARGS, 0, '\0'); goto state_next_arg_begin; }
-#line 532 "re2c-output.c"
-yy62: yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- goto yy69;
-yy63: yych = *++YYCURSOR;
- goto yy67;
-yy64: yych = *++YYCURSOR;
- goto yy65;
-yy65:
-#line 329 "/usr/src/php5/ext/standard/url_scanner_ex.re"
-{ passthru(STD_ARGS); goto state_next_arg_begin; }
-#line 543 "re2c-output.c"
-yy66: ++YYCURSOR;
- if(YYLIMIT == YYCURSOR) YYFILL(1);
- yych = *YYCURSOR;
- goto yy67;
-yy67: if(yybm[0+yych] & 8) goto yy66;
- goto yy61;
-yy68: yyaccept = 0;
- YYMARKER = ++YYCURSOR;
- if(YYLIMIT == YYCURSOR) YYFILL(1);
- yych = *YYCURSOR;
- goto yy69;
-yy69: if(yybm[0+yych] & 16) goto yy68;
- if(yych <= '&') goto yy72;
- if(yych >= '(') goto yy61;
- goto yy70;
-yy70: yych = *++YYCURSOR;
- if(yybm[0+yych] & 8) goto yy66;
- goto yy71;
-yy71:
-#line 327 "/usr/src/php5/ext/standard/url_scanner_ex.re"
-{ handle_val(STD_ARGS, 1, '\''); goto state_next_arg_begin; }
-#line 565 "re2c-output.c"
-yy72: ++YYCURSOR;
- if(YYLIMIT == YYCURSOR) YYFILL(1);
- yych = *YYCURSOR;
- goto yy73;
-yy73: if(yybm[0+yych] & 32) goto yy72;
- if(yych <= '=') goto yy75;
- goto yy74;
-yy74: YYCURSOR = YYMARKER;
- switch(yyaccept){
- case 0: goto yy61;
- }
-yy75: yych = *++YYCURSOR;
- goto yy71;
-yy76: yyaccept = 0;
- YYMARKER = ++YYCURSOR;
- if(YYLIMIT == YYCURSOR) YYFILL(1);
- yych = *YYCURSOR;
- goto yy77;
-yy77: if(yybm[0+yych] & 64) goto yy76;
- if(yych <= '!') goto yy80;
- if(yych >= '#') goto yy61;
- goto yy78;
-yy78: yych = *++YYCURSOR;
- if(yybm[0+yych] & 8) goto yy66;
- goto yy79;
-yy79:
-#line 326 "/usr/src/php5/ext/standard/url_scanner_ex.re"
-{ handle_val(STD_ARGS, 1, '"'); goto state_next_arg_begin; }
-#line 594 "re2c-output.c"
-yy80: ++YYCURSOR;
- if(YYLIMIT == YYCURSOR) YYFILL(1);
- yych = *YYCURSOR;
- goto yy81;
-yy81: if(yybm[0+yych] & 128) goto yy80;
- if(yych >= '>') goto yy74;
- goto yy82;
-yy82: yych = *++YYCURSOR;
- goto yy79;
-}
-#line 330 "/usr/src/php5/ext/standard/url_scanner_ex.re"
-
-
-stop:
- rest = YYLIMIT - start;
- scdebug(("stopped in state %d at pos %d (%d:%c) %d\n", STATE, YYCURSOR - ctx->buf.c, *YYCURSOR, *YYCURSOR, rest));
- /* XXX: Crash avoidance. Need to work with reporter to figure out what goes wrong */
- if (rest < 0) rest = 0;
-
- if (rest) memmove(ctx->buf.c, start, rest);
- ctx->buf.len = rest;
-}
-
-char *php_url_scanner_adapt_single_url(const char *url, size_t urllen, const char *name, const char *value, size_t *newlen TSRMLS_DC)
-{
- smart_str surl = {0};
- smart_str buf = {0};
- smart_str url_app = {0};
-
- smart_str_setl(&surl, url, urllen);
-
- smart_str_appends(&url_app, name);
- smart_str_appendc(&url_app, '=');
- smart_str_appends(&url_app, value);
-
- append_modified_url(&surl, &buf, &url_app, PG(arg_separator).output);
-
- smart_str_0(&buf);
- if (newlen) *newlen = buf.len;
-
- smart_str_free(&url_app);
-
- return buf.c;
-}
-
-
-static char *url_adapt_ext(const char *src, size_t srclen, size_t *newlen, zend_bool do_flush TSRMLS_DC)
-{
- url_adapt_state_ex_t *ctx;
- char *retval;
-
- ctx = &BG(url_adapt_state_ex);
-
- xx_mainloop(ctx, src, srclen TSRMLS_CC);
-
- *newlen = ctx->result.len;
- if (!ctx->result.c) {
- smart_str_appendl(&ctx->result, "", 0);
- }
- smart_str_0(&ctx->result);
- if (do_flush) {
- smart_str_appendl(&ctx->result, ctx->buf.c, ctx->buf.len);
- *newlen += ctx->buf.len;
- smart_str_free(&ctx->buf);
- }
- retval = ctx->result.c;
- ctx->result.c = NULL;
- ctx->result.len = 0;
- return retval;
-}
-
-int php_url_scanner_ex_activate(TSRMLS_D)
-{
- url_adapt_state_ex_t *ctx;
-
- ctx = &BG(url_adapt_state_ex);
-
- memset(ctx, 0, ((size_t) &((url_adapt_state_ex_t *)0)->tags));
-
- return SUCCESS;
-}
-
-int php_url_scanner_ex_deactivate(TSRMLS_D)
-{
- url_adapt_state_ex_t *ctx;
-
- ctx = &BG(url_adapt_state_ex);
-
- smart_str_free(&ctx->result);
- smart_str_free(&ctx->buf);
- smart_str_free(&ctx->tag);
- smart_str_free(&ctx->arg);
-
- return SUCCESS;
-}
-
-static void php_url_scanner_output_handler(char *output, uint output_len, char **handled_output, uint *handled_output_len, int mode TSRMLS_DC)
-{
- size_t len;
-
- if (BG(url_adapt_state_ex).url_app.len != 0) {
- *handled_output = url_adapt_ext(output, output_len, &len, (zend_bool) (mode & PHP_OUTPUT_HANDLER_END ? 1 : 0) TSRMLS_CC);
- if (sizeof(uint) < sizeof(size_t)) {
- if (len > UINT_MAX)
- len = UINT_MAX;
- }
- *handled_output_len = len;
- } else if (BG(url_adapt_state_ex).url_app.len == 0) {
- url_adapt_state_ex_t *ctx = &BG(url_adapt_state_ex);
- if (ctx->buf.len) {
- smart_str_appendl(&ctx->result, ctx->buf.c, ctx->buf.len);
- smart_str_appendl(&ctx->result, output, output_len);
-
- *handled_output = ctx->result.c;
- *handled_output_len = ctx->buf.len + output_len;
-
- ctx->result.c = NULL;
- ctx->result.len = 0;
- smart_str_free(&ctx->buf);
- } else {
- *handled_output = NULL;
- }
- } else {
- *handled_output = NULL;
- }
-}
-
-int php_url_scanner_add_var(char *name, int name_len, char *value, int value_len, int urlencode TSRMLS_DC)
-{
- char *encoded;
- int encoded_len;
- smart_str val;
-
- if (! BG(url_adapt_state_ex).active) {
- php_url_scanner_ex_activate(TSRMLS_C);
- php_ob_set_internal_handler(php_url_scanner_output_handler, 0, "URL-Rewriter", 1 TSRMLS_CC);
- BG(url_adapt_state_ex).active = 1;
- }
-
-
- if (BG(url_adapt_state_ex).url_app.len != 0) {
- smart_str_appends(&BG(url_adapt_state_ex).url_app, PG(arg_separator).output);
- }
-
- if (urlencode) {
- encoded = php_url_encode(value, value_len, &encoded_len);
- smart_str_setl(&val, encoded, encoded_len);
- } else {
- smart_str_setl(&val, value, value_len);
- }
-
- smart_str_appendl(&BG(url_adapt_state_ex).url_app, name, name_len);
- smart_str_appendc(&BG(url_adapt_state_ex).url_app, '=');
- smart_str_append(&BG(url_adapt_state_ex).url_app, &val);
-
- smart_str_appends(&BG(url_adapt_state_ex).form_app, "<input type=\"hidden\" name=\"");
- smart_str_appendl(&BG(url_adapt_state_ex).form_app, name, name_len);
- smart_str_appends(&BG(url_adapt_state_ex).form_app, "\" value=\"");
- smart_str_append(&BG(url_adapt_state_ex).form_app, &val);
- smart_str_appends(&BG(url_adapt_state_ex).form_app, "\" />");
-
- if (urlencode)
- efree(encoded);
-
- return SUCCESS;
-}
-
-int php_url_scanner_reset_vars(TSRMLS_D)
-{
- BG(url_adapt_state_ex).form_app.len = 0;
- BG(url_adapt_state_ex).url_app.len = 0;
-
- return FAILURE;
-}
-
-PHP_MINIT_FUNCTION(url_scanner)
-{
- BG(url_adapt_state_ex).tags = NULL;
-
- BG(url_adapt_state_ex).form_app.c = BG(url_adapt_state_ex).url_app.c = 0;
- BG(url_adapt_state_ex).form_app.len = BG(url_adapt_state_ex).url_app.len = 0;
-
- REGISTER_INI_ENTRIES();
- return SUCCESS;
-}
-
-PHP_MSHUTDOWN_FUNCTION(url_scanner)
-{
- UNREGISTER_INI_ENTRIES();
-
- return SUCCESS;
-}
-
-PHP_RINIT_FUNCTION(url_scanner)
-{
- BG(url_adapt_state_ex).active = 0;
-
- return SUCCESS;
-}
-
-PHP_RSHUTDOWN_FUNCTION(url_scanner)
-{
- if (BG(url_adapt_state_ex).active) {
- php_url_scanner_ex_deactivate(TSRMLS_C);
- BG(url_adapt_state_ex).active = 0;
- }
-
- smart_str_free(&BG(url_adapt_state_ex).form_app);
- smart_str_free(&BG(url_adapt_state_ex).url_app);
-
- return SUCCESS;
-}
diff --git a/ext/standard/url_scanner_ex.h b/ext/standard/url_scanner_ex.h
deleted file mode 100644
index a5969fb4f9..0000000000
--- a/ext/standard/url_scanner_ex.h
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Sascha Schumann <sascha@schumann.cx> |
- +----------------------------------------------------------------------+
-*/
-
-#ifndef URL_SCANNER_EX_H
-#define URL_SCANNER_EX_H
-
-PHP_MINIT_FUNCTION(url_scanner_ex);
-PHP_MSHUTDOWN_FUNCTION(url_scanner_ex);
-
-PHP_RINIT_FUNCTION(url_scanner_ex);
-PHP_RSHUTDOWN_FUNCTION(url_scanner_ex);
-
-char *php_url_scanner_adapt_single_url(const char *url, size_t urllen, const char *name, const char *value, size_t *newlen TSRMLS_DC);
-
-int php_url_scanner_add_var(char *name, int name_len, char *value, int value_len, int urlencode TSRMLS_DC);
-int php_url_scanner_reset_vars(TSRMLS_D);
-
-int php_url_scanner_ex_activate(TSRMLS_D);
-int php_url_scanner_ex_deactivate(TSRMLS_D);
-
-#include "php_smart_str_public.h"
-
-typedef struct {
- /* Used by the mainloop of the scanner */
- smart_str tag; /* read only */
- smart_str arg; /* read only */
- smart_str val; /* read only */
- smart_str buf;
-
- /* The result buffer */
- smart_str result;
-
- /* The data which is appended to each relative URL/FORM */
- smart_str form_app, url_app;
-
- int active;
-
- char *lookup_data;
- int state;
-
- /* Everything above is zeroed in RINIT */
- HashTable *tags;
-} url_adapt_state_ex_t;
-
-typedef struct {
- smart_str var;
- smart_str val;
-} url_adapt_var_t;
-
-#endif
diff --git a/ext/standard/url_scanner_ex.re b/ext/standard/url_scanner_ex.re
deleted file mode 100644
index ec02d5ebb8..0000000000
--- a/ext/standard/url_scanner_ex.re
+++ /dev/null
@@ -1,530 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Sascha Schumann <sascha@schumann.cx> |
- +----------------------------------------------------------------------+
-*/
-
-#include "php.h"
-
-#ifdef HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-#ifdef HAVE_LIMITS_H
-#include <limits.h>
-#endif
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include "php_ini.h"
-#include "php_globals.h"
-#define STATE_TAG SOME_OTHER_STATE_TAG
-#include "basic_functions.h"
-#include "url.h"
-#undef STATE_TAG
-
-#define url_scanner url_scanner_ex
-
-#include "php_smart_str.h"
-
-static PHP_INI_MH(OnUpdateTags)
-{
- url_adapt_state_ex_t *ctx;
- char *key;
- char *lasts;
- char *tmp;
-
- ctx = &BG(url_adapt_state_ex);
-
- tmp = estrndup(new_value, new_value_length);
-
- if (ctx->tags)
- zend_hash_destroy(ctx->tags);
- else
- ctx->tags = malloc(sizeof(HashTable));
-
- zend_hash_init(ctx->tags, 0, NULL, NULL, 1);
-
- for (key = php_strtok_r(tmp, ",", &lasts);
- key;
- key = php_strtok_r(NULL, ",", &lasts)) {
- char *val;
-
- val = strchr(key, '=');
- if (val) {
- char *q;
- int keylen;
-
- *val++ = '\0';
- for (q = key; *q; q++)
- *q = tolower(*q);
- keylen = q - key;
- /* key is stored withOUT NUL
- val is stored WITH NUL */
- zend_hash_add(ctx->tags, key, keylen, val, strlen(val)+1, NULL);
- }
- }
-
- efree(tmp);
-
- return SUCCESS;
-}
-
-PHP_INI_BEGIN()
- STD_PHP_INI_ENTRY("url_rewriter.tags", "a=href,area=href,frame=src,form=,fieldset=", PHP_INI_ALL, OnUpdateTags, url_adapt_state_ex, php_basic_globals, basic_globals)
-PHP_INI_END()
-
-/*!re2c
-any = [\000-\377];
-N = (any\[<]);
-alpha = [a-zA-Z];
-alphadash = ([a-zA-Z] | "-");
-*/
-
-#define YYFILL(n) goto done
-#define YYCTYPE unsigned char
-#define YYCURSOR p
-#define YYLIMIT q
-#define YYMARKER r
-
-static inline void append_modified_url(smart_str *url, smart_str *dest, smart_str *url_app, const char *separator)
-{
- register const char *p, *q;
- const char *bash = NULL;
- const char *sep = "?";
-
- q = (p = url->c) + url->len;
-
-scan:
-/*!re2c
- ":" { smart_str_append(dest, url); return; }
- "?" { sep = separator; goto scan; }
- "#" { bash = p - 1; goto done; }
- (any\[:?#])+ { goto scan; }
-*/
-done:
-
- /* Don't modify URLs of the format "#mark" */
- if (bash && bash - url->c == 0) {
- smart_str_append(dest, url);
- return;
- }
-
- if (bash)
- smart_str_appendl(dest, url->c, bash - url->c);
- else
- smart_str_append(dest, url);
-
- smart_str_appends(dest, sep);
- smart_str_append(dest, url_app);
-
- if (bash)
- smart_str_appendl(dest, bash, q - bash);
-}
-
-
-#undef YYFILL
-#undef YYCTYPE
-#undef YYCURSOR
-#undef YYLIMIT
-#undef YYMARKER
-
-static inline void tag_arg(url_adapt_state_ex_t *ctx, char quotes, char type TSRMLS_DC)
-{
- char f = 0;
-
- if (strncasecmp(ctx->arg.c, ctx->lookup_data, ctx->arg.len) == 0)
- f = 1;
-
- if (quotes)
- smart_str_appendc(&ctx->result, type);
- if (f) {
- append_modified_url(&ctx->val, &ctx->result, &ctx->url_app, PG(arg_separator).output);
- } else {
- smart_str_append(&ctx->result, &ctx->val);
- }
- if (quotes)
- smart_str_appendc(&ctx->result, type);
-}
-
-enum {
- STATE_PLAIN = 0,
- STATE_TAG,
- STATE_NEXT_ARG,
- STATE_ARG,
- STATE_BEFORE_VAL,
- STATE_VAL
-};
-
-#define YYFILL(n) goto stop
-#define YYCTYPE unsigned char
-#define YYCURSOR xp
-#define YYLIMIT end
-#define YYMARKER q
-#define STATE ctx->state
-
-#define STD_PARA url_adapt_state_ex_t *ctx, char *start, char *YYCURSOR TSRMLS_DC
-#define STD_ARGS ctx, start, xp TSRMLS_CC
-
-#if SCANNER_DEBUG
-#define scdebug(x) printf x
-#else
-#define scdebug(x)
-#endif
-
-static inline void passthru(STD_PARA)
-{
- scdebug(("appending %d chars, starting with %c\n", YYCURSOR-start, *start));
- smart_str_appendl(&ctx->result, start, YYCURSOR - start);
-}
-
-/*
- * This function appends a hidden input field after a <form> or
- * <fieldset>. The latter is important for XHTML.
- */
-
-static void handle_form(STD_PARA)
-{
- int doit = 0;
-
- if (ctx->form_app.len > 0) {
- switch (ctx->tag.len) {
-
-#define RECOGNIZE(x) do { \
- case sizeof(x)-1: \
- if (strncasecmp(ctx->tag.c, x, sizeof(x)-1) == 0) \
- doit = 1; \
- break; \
-} while (0)
-
- RECOGNIZE("form");
- RECOGNIZE("fieldset");
- }
-
- if (doit)
- smart_str_append(&ctx->result, &ctx->form_app);
- }
-}
-
-
-
-/*
- * HANDLE_TAG copies the HTML Tag and checks whether we
- * have that tag in our table. If we might modify it,
- * we continue to scan the tag, otherwise we simply copy the complete
- * HTML stuff to the result buffer.
- */
-
-static inline void handle_tag(STD_PARA)
-{
- int ok = 0;
- int i;
-
- ctx->tag.len = 0;
- smart_str_appendl(&ctx->tag, start, YYCURSOR - start);
- for (i = 0; i < ctx->tag.len; i++)
- ctx->tag.c[i] = tolower((int)(unsigned char)ctx->tag.c[i]);
- if (zend_hash_find(ctx->tags, ctx->tag.c, ctx->tag.len, (void **) &ctx->lookup_data) == SUCCESS)
- ok = 1;
- STATE = ok ? STATE_NEXT_ARG : STATE_PLAIN;
-}
-
-static inline void handle_arg(STD_PARA)
-{
- ctx->arg.len = 0;
- smart_str_appendl(&ctx->arg, start, YYCURSOR - start);
-}
-
-static inline void handle_val(STD_PARA, char quotes, char type)
-{
- smart_str_setl(&ctx->val, start + quotes, YYCURSOR - start - quotes * 2);
- tag_arg(ctx, quotes, type TSRMLS_CC);
-}
-
-static inline void xx_mainloop(url_adapt_state_ex_t *ctx, const char *newdata, size_t newlen TSRMLS_DC)
-{
- char *end, *q;
- char *xp;
- char *start;
- int rest;
-
- smart_str_appendl(&ctx->buf, newdata, newlen);
-
- YYCURSOR = ctx->buf.c;
- YYLIMIT = ctx->buf.c + ctx->buf.len;
-
- switch (STATE) {
- case STATE_PLAIN: goto state_plain;
- case STATE_TAG: goto state_tag;
- case STATE_NEXT_ARG: goto state_next_arg;
- case STATE_ARG: goto state_arg;
- case STATE_BEFORE_VAL: goto state_before_val;
- case STATE_VAL: goto state_val;
- }
-
-
-state_plain_begin:
- STATE = STATE_PLAIN;
-
-state_plain:
- start = YYCURSOR;
-/*!re2c
- "<" { passthru(STD_ARGS); STATE = STATE_TAG; goto state_tag; }
- N+ { passthru(STD_ARGS); goto state_plain; }
-*/
-
-state_tag:
- start = YYCURSOR;
-/*!re2c
- alpha+ { handle_tag(STD_ARGS); /* Sets STATE */; passthru(STD_ARGS); if (STATE == STATE_PLAIN) goto state_plain; else goto state_next_arg; }
- any { passthru(STD_ARGS); goto state_plain_begin; }
-*/
-
-state_next_arg_begin:
- STATE = STATE_NEXT_ARG;
-
-state_next_arg:
- start = YYCURSOR;
-/*!re2c
- ">" { passthru(STD_ARGS); handle_form(STD_ARGS); goto state_plain_begin; }
- [ \v\t\n]+ { passthru(STD_ARGS); goto state_next_arg; }
- alpha { --YYCURSOR; STATE = STATE_ARG; goto state_arg; }
- any { passthru(STD_ARGS); goto state_plain_begin; }
-*/
-
-state_arg:
- start = YYCURSOR;
-/*!re2c
- alpha alphadash* { passthru(STD_ARGS); handle_arg(STD_ARGS); STATE = STATE_BEFORE_VAL; goto state_before_val; }
- any { passthru(STD_ARGS); STATE = STATE_NEXT_ARG; goto state_next_arg; }
-*/
-
-state_before_val:
- start = YYCURSOR;
-/*!re2c
- [ ]* "=" [ ]* { passthru(STD_ARGS); STATE = STATE_VAL; goto state_val; }
- any { --YYCURSOR; goto state_next_arg_begin; }
-*/
-
-
-state_val:
- start = YYCURSOR;
-/*!re2c
- ["] (any\[">])* ["] { handle_val(STD_ARGS, 1, '"'); goto state_next_arg_begin; }
- ['] (any\['>])* ['] { handle_val(STD_ARGS, 1, '\''); goto state_next_arg_begin; }
- (any\[ \t\n>])+ { handle_val(STD_ARGS, 0, '\0'); goto state_next_arg_begin; }
- any { passthru(STD_ARGS); goto state_next_arg_begin; }
-*/
-
-stop:
- rest = YYLIMIT - start;
- scdebug(("stopped in state %d at pos %d (%d:%c) %d\n", STATE, YYCURSOR - ctx->buf.c, *YYCURSOR, *YYCURSOR, rest));
- /* XXX: Crash avoidance. Need to work with reporter to figure out what goes wrong */
- if (rest < 0) rest = 0;
-
- if (rest) memmove(ctx->buf.c, start, rest);
- ctx->buf.len = rest;
-}
-
-char *php_url_scanner_adapt_single_url(const char *url, size_t urllen, const char *name, const char *value, size_t *newlen TSRMLS_DC)
-{
- smart_str surl = {0};
- smart_str buf = {0};
- smart_str url_app = {0};
-
- smart_str_setl(&surl, url, urllen);
-
- smart_str_appends(&url_app, name);
- smart_str_appendc(&url_app, '=');
- smart_str_appends(&url_app, value);
-
- append_modified_url(&surl, &buf, &url_app, PG(arg_separator).output);
-
- smart_str_0(&buf);
- if (newlen) *newlen = buf.len;
-
- smart_str_free(&url_app);
-
- return buf.c;
-}
-
-
-static char *url_adapt_ext(const char *src, size_t srclen, size_t *newlen, zend_bool do_flush TSRMLS_DC)
-{
- url_adapt_state_ex_t *ctx;
- char *retval;
-
- ctx = &BG(url_adapt_state_ex);
-
- xx_mainloop(ctx, src, srclen TSRMLS_CC);
-
- *newlen = ctx->result.len;
- if (!ctx->result.c) {
- smart_str_appendl(&ctx->result, "", 0);
- }
- smart_str_0(&ctx->result);
- if (do_flush) {
- smart_str_appendl(&ctx->result, ctx->buf.c, ctx->buf.len);
- *newlen += ctx->buf.len;
- smart_str_free(&ctx->buf);
- }
- retval = ctx->result.c;
- ctx->result.c = NULL;
- ctx->result.len = 0;
- return retval;
-}
-
-int php_url_scanner_ex_activate(TSRMLS_D)
-{
- url_adapt_state_ex_t *ctx;
-
- ctx = &BG(url_adapt_state_ex);
-
- memset(ctx, 0, ((size_t) &((url_adapt_state_ex_t *)0)->tags));
-
- return SUCCESS;
-}
-
-int php_url_scanner_ex_deactivate(TSRMLS_D)
-{
- url_adapt_state_ex_t *ctx;
-
- ctx = &BG(url_adapt_state_ex);
-
- smart_str_free(&ctx->result);
- smart_str_free(&ctx->buf);
- smart_str_free(&ctx->tag);
- smart_str_free(&ctx->arg);
-
- return SUCCESS;
-}
-
-static void php_url_scanner_output_handler(char *output, uint output_len, char **handled_output, uint *handled_output_len, int mode TSRMLS_DC)
-{
- size_t len;
-
- if (BG(url_adapt_state_ex).url_app.len != 0) {
- *handled_output = url_adapt_ext(output, output_len, &len, (zend_bool) (mode & PHP_OUTPUT_HANDLER_END ? 1 : 0) TSRMLS_CC);
- if (sizeof(uint) < sizeof(size_t)) {
- if (len > UINT_MAX)
- len = UINT_MAX;
- }
- *handled_output_len = len;
- } else if (BG(url_adapt_state_ex).url_app.len == 0) {
- url_adapt_state_ex_t *ctx = &BG(url_adapt_state_ex);
- if (ctx->buf.len) {
- smart_str_appendl(&ctx->result, ctx->buf.c, ctx->buf.len);
- smart_str_appendl(&ctx->result, output, output_len);
-
- *handled_output = ctx->result.c;
- *handled_output_len = ctx->buf.len + output_len;
-
- ctx->result.c = NULL;
- ctx->result.len = 0;
- smart_str_free(&ctx->buf);
- } else {
- *handled_output = NULL;
- }
- } else {
- *handled_output = NULL;
- }
-}
-
-int php_url_scanner_add_var(char *name, int name_len, char *value, int value_len, int urlencode TSRMLS_DC)
-{
- char *encoded;
- int encoded_len;
- smart_str val;
-
- if (! BG(url_adapt_state_ex).active) {
- php_url_scanner_ex_activate(TSRMLS_C);
- php_ob_set_internal_handler(php_url_scanner_output_handler, 0, "URL-Rewriter", 1 TSRMLS_CC);
- BG(url_adapt_state_ex).active = 1;
- }
-
-
- if (BG(url_adapt_state_ex).url_app.len != 0) {
- smart_str_appends(&BG(url_adapt_state_ex).url_app, PG(arg_separator).output);
- }
-
- if (urlencode) {
- encoded = php_url_encode(value, value_len, &encoded_len);
- smart_str_setl(&val, encoded, encoded_len);
- } else {
- smart_str_setl(&val, value, value_len);
- }
-
- smart_str_appendl(&BG(url_adapt_state_ex).url_app, name, name_len);
- smart_str_appendc(&BG(url_adapt_state_ex).url_app, '=');
- smart_str_append(&BG(url_adapt_state_ex).url_app, &val);
-
- smart_str_appends(&BG(url_adapt_state_ex).form_app, "<input type=\"hidden\" name=\"");
- smart_str_appendl(&BG(url_adapt_state_ex).form_app, name, name_len);
- smart_str_appends(&BG(url_adapt_state_ex).form_app, "\" value=\"");
- smart_str_append(&BG(url_adapt_state_ex).form_app, &val);
- smart_str_appends(&BG(url_adapt_state_ex).form_app, "\" />");
-
- if (urlencode)
- efree(encoded);
-
- return SUCCESS;
-}
-
-int php_url_scanner_reset_vars(TSRMLS_D)
-{
- BG(url_adapt_state_ex).form_app.len = 0;
- BG(url_adapt_state_ex).url_app.len = 0;
-
- return FAILURE;
-}
-
-PHP_MINIT_FUNCTION(url_scanner)
-{
- BG(url_adapt_state_ex).tags = NULL;
-
- BG(url_adapt_state_ex).form_app.c = BG(url_adapt_state_ex).url_app.c = 0;
- BG(url_adapt_state_ex).form_app.len = BG(url_adapt_state_ex).url_app.len = 0;
-
- REGISTER_INI_ENTRIES();
- return SUCCESS;
-}
-
-PHP_MSHUTDOWN_FUNCTION(url_scanner)
-{
- UNREGISTER_INI_ENTRIES();
-
- return SUCCESS;
-}
-
-PHP_RINIT_FUNCTION(url_scanner)
-{
- BG(url_adapt_state_ex).active = 0;
-
- return SUCCESS;
-}
-
-PHP_RSHUTDOWN_FUNCTION(url_scanner)
-{
- if (BG(url_adapt_state_ex).active) {
- php_url_scanner_ex_deactivate(TSRMLS_C);
- BG(url_adapt_state_ex).active = 0;
- }
-
- smart_str_free(&BG(url_adapt_state_ex).form_app);
- smart_str_free(&BG(url_adapt_state_ex).url_app);
-
- return SUCCESS;
-}
diff --git a/ext/standard/user_filters.c b/ext/standard/user_filters.c
deleted file mode 100644
index e1ecf3c206..0000000000
--- a/ext/standard/user_filters.c
+++ /dev/null
@@ -1,547 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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. |
- +----------------------------------------------------------------------+
- | Authors: |
- | Wez Furlong (wez@thebrainroom.com) |
- | Sara Golemon (pollita@php.net) |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#include "php.h"
-#include "php_globals.h"
-#include "ext/standard/basic_functions.h"
-#include "ext/standard/file.h"
-
-#define PHP_STREAM_BRIGADE_RES_NAME "userfilter.bucket brigade"
-#define PHP_STREAM_BUCKET_RES_NAME "userfilter.bucket"
-#define PHP_STREAM_FILTER_RES_NAME "userfilter.filter"
-
-struct php_user_filter_data {
- zend_class_entry *ce;
- /* variable length; this *must* be last in the structure */
- char classname[1];
-};
-
-/* to provide context for calling into the next filter from user-space */
-static int le_userfilters;
-static int le_bucket_brigade;
-static int le_bucket;
-
-#define GET_FILTER_FROM_OBJ() { \
- zval **tmp; \
- if (FAILURE == zend_hash_index_find(Z_OBJPROP_P(this_ptr), 0, (void**)&tmp)) { \
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "filter property vanished"); \
- RETURN_FALSE; \
- } \
- ZEND_FETCH_RESOURCE(filter, php_stream_filter*, tmp, -1, "filter", le_userfilters); \
-}
-
-/* define the base filter class */
-
-PHP_FUNCTION(user_filter_nop)
-{
-}
-
-static zend_function_entry user_filter_class_funcs[] = {
- PHP_NAMED_FE(filter, PHP_FN(user_filter_nop), NULL)
- PHP_NAMED_FE(onCreate, PHP_FN(user_filter_nop), NULL)
- PHP_NAMED_FE(onClose, PHP_FN(user_filter_nop), NULL)
- { NULL, NULL, NULL }
-};
-
-static zend_class_entry user_filter_class_entry;
-
-PHP_MINIT_FUNCTION(user_filters)
-{
- /* init the filter class ancestor */
- INIT_CLASS_ENTRY(user_filter_class_entry, "php_user_filter", user_filter_class_funcs);
- if (NULL == zend_register_internal_class(&user_filter_class_entry TSRMLS_CC)) {
- return FAILURE;
- }
-
- /* init the filter resource; it has no dtor, as streams will always clean it up
- * at the correct time */
- le_userfilters = zend_register_list_destructors_ex(NULL, NULL, PHP_STREAM_FILTER_RES_NAME, 0);
-
- if (le_userfilters == FAILURE) {
- return FAILURE;
- }
-
- /* Filters will dispose of their brigades */
- le_bucket_brigade = zend_register_list_destructors_ex(NULL, NULL, PHP_STREAM_BRIGADE_RES_NAME, module_number);
- /* Brigades will dispose of their buckets */
- le_bucket = zend_register_list_destructors_ex(NULL, NULL, PHP_STREAM_BUCKET_RES_NAME, module_number);
-
- if (le_bucket_brigade == FAILURE) {
- return FAILURE;
- }
-
- REGISTER_LONG_CONSTANT("PSFS_PASS_ON", PSFS_PASS_ON, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("PSFS_FEED_ME", PSFS_FEED_ME, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("PSFS_ERR_FATAL", PSFS_ERR_FATAL, CONST_CS | CONST_PERSISTENT);
-
- REGISTER_LONG_CONSTANT("PSFS_FLAG_NORMAL", PSFS_FLAG_NORMAL, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("PSFS_FLAG_FLUSH_INC", PSFS_FLAG_FLUSH_INC, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("PSFS_FLAG_FLUSH_CLOSE", PSFS_FLAG_FLUSH_CLOSE, CONST_CS | CONST_PERSISTENT);
-
- return SUCCESS;
-}
-
-PHP_RSHUTDOWN_FUNCTION(user_filters)
-{
- if (BG(user_filter_map)) {
- zend_hash_destroy(BG(user_filter_map));
- efree(BG(user_filter_map));
- BG(user_filter_map) = NULL;
- }
-
- return SUCCESS;
-}
-
-static void userfilter_dtor(php_stream_filter *thisfilter TSRMLS_DC)
-{
- zval *obj = (zval*)thisfilter->abstract;
- zval func_name;
- zval *retval = NULL;
- zval **tmp;
-
- if (obj == NULL) {
- /* If there's no object associated then there's nothing to dispose of */
- return;
- }
-
- ZVAL_STRINGL(&func_name, "onclose", sizeof("onclose")-1, 0);
-
- call_user_function_ex(NULL,
- &obj,
- &func_name,
- &retval,
- 0, NULL,
- 0, NULL TSRMLS_CC);
-
- if (retval)
- zval_ptr_dtor(&retval);
-
- if (SUCCESS == zend_hash_find(Z_OBJPROP_P(obj), "filter", sizeof("filter"), (void**)&tmp)) {
- zend_list_delete(Z_LVAL_PP(tmp));
- FREE_ZVAL(*tmp);
- }
-
- /* kill the object */
- zval_ptr_dtor(&obj);
-}
-
-php_stream_filter_status_t userfilter_filter(
- php_stream *stream,
- php_stream_filter *thisfilter,
- php_stream_bucket_brigade *buckets_in,
- php_stream_bucket_brigade *buckets_out,
- size_t *bytes_consumed,
- int flags
- TSRMLS_DC)
-{
- int ret = PSFS_ERR_FATAL;
- zval *obj = (zval*)thisfilter->abstract;
- zval func_name;
- zval *retval = NULL;
- zval **args[4];
- zval *zclosing, *zconsumed, *zin, *zout, *zstream;
- 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);
- add_property_zval(obj, "stream", zstream);
- /* add_property_zval increments the refcount which is unwanted here */
- zval_ptr_dtor(&zstream);
- }
-
- ZVAL_STRINGL(&func_name, "filter", sizeof("filter")-1, 0);
-
- /* Setup calling arguments */
- ALLOC_INIT_ZVAL(zin);
- ZEND_REGISTER_RESOURCE(zin, buckets_in, le_bucket_brigade);
- args[0] = &zin;
-
- ALLOC_INIT_ZVAL(zout);
- ZEND_REGISTER_RESOURCE(zout, buckets_out, le_bucket_brigade);
- args[1] = &zout;
-
- ALLOC_INIT_ZVAL(zconsumed);
- if (bytes_consumed) {
- ZVAL_LONG(zconsumed, *bytes_consumed);
- } else {
- ZVAL_NULL(zconsumed);
- }
- args[2] = &zconsumed;
-
- ALLOC_INIT_ZVAL(zclosing);
- ZVAL_BOOL(zclosing, flags & PSFS_FLAG_FLUSH_CLOSE);
- args[3] = &zclosing;
-
- call_result = call_user_function_ex(NULL,
- &obj,
- &func_name,
- &retval,
- 4, args,
- 0, NULL TSRMLS_CC);
-
- if (call_result == SUCCESS && retval != NULL) {
- convert_to_long(retval);
- ret = Z_LVAL_P(retval);
- } else if (call_result == FAILURE) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "failed to call filter function");
- }
-
- if (bytes_consumed) {
- *bytes_consumed = Z_LVAL_P(zconsumed);
- }
-
- if (retval)
- zval_ptr_dtor(&retval);
- zval_ptr_dtor(&zclosing);
- zval_ptr_dtor(&zconsumed);
- zval_ptr_dtor(&zout);
- zval_ptr_dtor(&zin);
-
- return ret;
-}
-
-static php_stream_filter_ops userfilter_ops = {
- userfilter_filter,
- userfilter_dtor,
- "user-filter"
-};
-
-static php_stream_filter *user_filter_factory_create(const char *filtername,
- zval *filterparams, int persistent TSRMLS_DC)
-{
- struct php_user_filter_data *fdat = NULL;
- php_stream_filter *filter;
- zval *obj, *zfilter;
- zval func_name;
- zval *retval = NULL;
-
- /* some sanity checks */
- if (persistent) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING,
- "cannot use a user-space filter with a persistent stream");
- return NULL;
- }
-
- /* determine the classname/class entry */
- if (FAILURE == zend_hash_find(BG(user_filter_map), (char*)filtername,
- strlen(filtername), (void**)&fdat)) {
- char *period;
-
- /* Userspace Filters using ambiguous wildcards could cause problems.
- i.e.: myfilter.foo.bar will always call into myfilter.foo.*
- never seeing myfilter.*
- TODO: Allow failed userfilter creations to continue
- scanning through the list */
- if ((period = strrchr(filtername, '.'))) {
- char *wildcard;
-
- /* Search for wildcard matches instead */
- wildcard = estrdup(filtername);
- period = wildcard + (period - filtername);
- while (period) {
- *period = '\0';
- strcat(wildcard, ".*");
- if (SUCCESS == zend_hash_find(BG(user_filter_map), wildcard, strlen(wildcard), (void**)&fdat)) {
- period = NULL;
- } else {
- *period = '\0';
- period = strrchr(wildcard, '.');
- }
- }
- efree(wildcard);
- }
- if (fdat == NULL) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING,
- "Err, filter \"%s\" is not in the user-filter map, but somehow the user-filter-factory was invoked for it!?", filtername);
- return NULL;
- }
- }
-
- /* bind the classname to the actual class */
- if (fdat->ce == NULL) {
- if (FAILURE == zend_lookup_class(fdat->classname, strlen(fdat->classname),
- (zend_class_entry ***)&fdat->ce TSRMLS_CC)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING,
- "user-filter \"%s\" requires class \"%s\", but that class is not defined",
- filtername, fdat->classname);
- return NULL;
- }
- fdat->ce = *(zend_class_entry**)fdat->ce;
-
- }
-
- filter = php_stream_filter_alloc(&userfilter_ops, NULL, 0);
- if (filter == NULL) {
- return NULL;
- }
-
- /* create the object */
- ALLOC_ZVAL(obj);
- object_init_ex(obj, fdat->ce);
- ZVAL_REFCOUNT(obj) = 1;
- PZVAL_IS_REF(obj) = 1;
-
- /* filtername */
- add_property_string(obj, "filtername", (char*)filtername, 1);
-
- /* and the parameters, if any */
- if (filterparams) {
- add_property_zval(obj, "params", filterparams);
- } else {
- add_property_null(obj, "params");
- }
-
- /* invoke the constructor */
- ZVAL_STRINGL(&func_name, "oncreate", sizeof("oncreate")-1, 0);
-
- call_user_function_ex(NULL,
- &obj,
- &func_name,
- &retval,
- 0, NULL,
- 0, NULL TSRMLS_CC);
-
- if (retval) {
- if (Z_TYPE_P(retval) == IS_BOOL && Z_LVAL_P(retval) == 0) {
- /* User reported filter creation error "return false;" */
- zval_ptr_dtor(&retval);
-
- /* Kill the filter (safely) */
- filter->abstract = NULL;
- php_stream_filter_free(filter TSRMLS_CC);
-
- /* Kill the object */
- zval_ptr_dtor(&obj);
-
- /* Report failure to filter_alloc */
- return NULL;
- }
- zval_ptr_dtor(&retval);
- }
-
- /* set the filter property, this will be used during cleanup */
- ALLOC_INIT_ZVAL(zfilter);
- ZEND_REGISTER_RESOURCE(zfilter, filter, le_userfilters);
- filter->abstract = obj;
- add_property_zval(obj, "filter", zfilter);
-
- return filter;
-}
-
-static php_stream_filter_factory user_filter_factory = {
- user_filter_factory_create
-};
-
-static void filter_item_dtor(struct php_user_filter_data *fdat)
-{
-}
-
-/* {{{ proto object stream_bucket_make_writeable(resource brigade)
- Return a bucket object from the brigade for operating on */
-PHP_FUNCTION(stream_bucket_make_writeable)
-{
- zval *zbrigade, *zbucket;
- php_stream_bucket_brigade *brigade;
- php_stream_bucket *bucket;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z", &zbrigade) == FAILURE) {
- RETURN_FALSE;
- }
-
- ZEND_FETCH_RESOURCE(brigade, php_stream_bucket_brigade *, &zbrigade, -1, PHP_STREAM_BRIGADE_RES_NAME, le_bucket_brigade);
-
- ZVAL_NULL(return_value);
-
- if (brigade->head && (bucket = php_stream_bucket_make_writeable(brigade->head TSRMLS_CC))) {
- ALLOC_INIT_ZVAL(zbucket);
- ZEND_REGISTER_RESOURCE(zbucket, bucket, le_bucket);
- object_init(return_value);
- add_property_zval(return_value, "bucket", zbucket);
- /* add_property_zval increments the refcount which is unwanted here */
- zval_ptr_dtor(&zbucket);
- add_property_stringl(return_value, "data", bucket->buf, bucket->buflen, 1);
- add_property_long(return_value, "datalen", bucket->buflen);
- }
-}
-/* }}} */
-
-/* {{{ php_stream_bucket_attach */
-static void php_stream_bucket_attach(int append, INTERNAL_FUNCTION_PARAMETERS)
-{
- zval *zbrigade, *zobject;
- zval **pzbucket, **pzdata;
- php_stream_bucket_brigade *brigade;
- php_stream_bucket *bucket;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "zo", &zbrigade, &zobject) == FAILURE) {
- RETURN_FALSE;
- }
-
- if (FAILURE == zend_hash_find(Z_OBJPROP_P(zobject), "bucket", 7, (void**)&pzbucket)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Object has no bucket property");
- RETURN_FALSE;
- }
-
- ZEND_FETCH_RESOURCE(brigade, php_stream_bucket_brigade *, &zbrigade, -1, PHP_STREAM_BRIGADE_RES_NAME, le_bucket_brigade);
- ZEND_FETCH_RESOURCE(bucket, php_stream_bucket *, pzbucket, -1, PHP_STREAM_BUCKET_RES_NAME, le_bucket);
-
- if (SUCCESS == zend_hash_find(Z_OBJPROP_P(zobject), "data", 5, (void**)&pzdata) && (*pzdata)->type == IS_STRING) {
- if (!bucket->own_buf) {
- bucket = php_stream_bucket_make_writeable(bucket TSRMLS_CC);
- }
- if (bucket->buflen != Z_STRLEN_PP(pzdata)) {
- bucket->buf = perealloc(bucket->buf, Z_STRLEN_PP(pzdata), bucket->is_persistent);
- bucket->buflen = Z_STRLEN_PP(pzdata);
- }
- memcpy(bucket->buf, Z_STRVAL_PP(pzdata), bucket->buflen);
- }
-
- if (append) {
- php_stream_bucket_append(brigade, bucket TSRMLS_CC);
- } else {
- php_stream_bucket_prepend(brigade, bucket TSRMLS_CC);
- }
-}
-/* }}} */
-
-/* {{{ proto void stream_bucket_prepend(resource brigade, resource bucket)
- Prepend bucket to brigade */
-PHP_FUNCTION(stream_bucket_prepend)
-{
- php_stream_bucket_attach(0, INTERNAL_FUNCTION_PARAM_PASSTHRU);
-}
-/* }}} */
-
-/* {{{ proto void stream_bucket_append(resource brigade, resource bucket)
- Append bucket to brigade */
-PHP_FUNCTION(stream_bucket_append)
-{
- php_stream_bucket_attach(1, INTERNAL_FUNCTION_PARAM_PASSTHRU);
-}
-/* }}} */
-
-/* {{{ proto resource stream_bucket_new(resource stream, string buffer)
- Create a new bucket for use on the current stream */
-PHP_FUNCTION(stream_bucket_new)
-{
- zval *zstream, *zbucket;
- php_stream *stream;
- char *buffer;
- char *pbuffer;
- int buffer_len;
- php_stream_bucket *bucket;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "zs", &zstream, &buffer, &buffer_len) == FAILURE) {
- RETURN_FALSE;
- }
-
- php_stream_from_zval(stream, &zstream);
-
- if (!(pbuffer = pemalloc(buffer_len, php_stream_is_persistent(stream)))) {
- RETURN_FALSE;
- }
-
- memcpy(pbuffer, buffer, buffer_len);
-
- bucket = php_stream_bucket_new(stream, pbuffer, buffer_len, 1, php_stream_is_persistent(stream) TSRMLS_CC);
-
- ALLOC_INIT_ZVAL(zbucket);
- ZEND_REGISTER_RESOURCE(zbucket, bucket, le_bucket);
- object_init(return_value);
- add_property_zval(return_value, "bucket", zbucket);
- add_property_stringl(return_value, "data", bucket->buf, bucket->buflen, 1);
- add_property_long(return_value, "datalen", bucket->buflen);
-}
-/* }}} */
-
-/* {{{ proto array stream_get_filters(void)
- Returns a list of registered filters */
-PHP_FUNCTION(stream_get_filters)
-{
- char *filter_name;
- int key_flags, filter_name_len = 0;
- HashTable *filters_hash;
- ulong num_key;
-
- if (ZEND_NUM_ARGS() != 0) {
- WRONG_PARAM_COUNT;
- }
-
- array_init(return_value);
-
- filters_hash = php_get_stream_filters_hash();
-
- if (filters_hash) {
- for(zend_hash_internal_pointer_reset(filters_hash);
- (key_flags = zend_hash_get_current_key_ex(filters_hash, &filter_name, &filter_name_len, &num_key, 0, NULL)) != HASH_KEY_NON_EXISTANT;
- zend_hash_move_forward(filters_hash))
- if (key_flags == HASH_KEY_IS_STRING)
- add_next_index_stringl(return_value, filter_name, filter_name_len, 1);
- }
- /* It's okay to return an empty array if no filters are registered */
-}
-/* }}} */
-
-/* {{{ proto bool stream_filter_register(string filtername, string classname)
- Registers a custom filter handler class */
-PHP_FUNCTION(stream_filter_register)
-{
- char *filtername, *classname;
- int filtername_len, classname_len;
- struct php_user_filter_data *fdat;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ss", &filtername, &filtername_len,
- &classname, &classname_len) == FAILURE) {
- RETURN_FALSE;
- }
-
- RETVAL_FALSE;
-
- if (!BG(user_filter_map)) {
- BG(user_filter_map) = (HashTable*) emalloc(sizeof(HashTable));
- zend_hash_init(BG(user_filter_map), 5, NULL, (dtor_func_t) filter_item_dtor, 0);
- }
-
- fdat = ecalloc(1, sizeof(*fdat) + classname_len);
- memcpy(fdat->classname, classname, classname_len);
-
- if (zend_hash_add(BG(user_filter_map), filtername, filtername_len, (void*)fdat,
- sizeof(*fdat) + classname_len, NULL) == SUCCESS &&
- php_stream_filter_register_factory_volatile(filtername, &user_filter_factory TSRMLS_CC) == SUCCESS) {
- RETVAL_TRUE;
- }
-
- efree(fdat);
-}
-/* }}} */
-
-
-/*
- * 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/standard/uuencode.c b/ext/standard/uuencode.c
deleted file mode 100644
index 9606fbaccb..0000000000
--- a/ext/standard/uuencode.c
+++ /dev/null
@@ -1,222 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Ilia Alshanetsky <ilia@php.net> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-/*
- * Portions of this code are based on Berkeley's uuencode/uudecode
- * implementation.
- *
- * Copyright (c) 1983, 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. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement:
- * This product includes software developed by the University of
- * California, Berkeley and its contributors.
- * 4. 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 <math.h>
-
-#include "php.h"
-#include "php_uuencode.h"
-
-#define PHP_UU_ENC(c) ((c) ? ((c) & 077) + ' ' : '`')
-#define PHP_UU_ENC_C2(c) PHP_UU_ENC(((*(c) << 4) & 060) | ((*((c) + 1) >> 4) & 017))
-#define PHP_UU_ENC_C3(c) PHP_UU_ENC(((*(c + 1) << 2) & 074) | ((*((c) + 2) >> 6) & 03))
-
-#define PHP_UU_DEC(c) (((c) - ' ') & 077)
-
-PHPAPI int php_uuencode(char *src, int src_len, char **dest)
-{
- int len = 45;
- char *p, *s, *e, *ee;
-
- /* encoded length is ~ 38% greater then the original */
- p = *dest = emalloc((ceil(src_len * 1.38) + 45 + 1));
- s = src;
- e = src + src_len;
-
- while ((s + 3) < e) {
- ee = s + len;
- if (ee > e) {
- ee = e;
- len = ee - s;
- if (len % 3) {
- ee = s + (int) (floor(len / 3) * 3);
- }
- }
- *p++ = PHP_UU_ENC(len);
-
- while (s < ee) {
- *p++ = PHP_UU_ENC(*s >> 2);
- *p++ = PHP_UU_ENC_C2(s);
- *p++ = PHP_UU_ENC_C3(s);
- *p++ = PHP_UU_ENC(*(s + 2) & 077);
-
- s += 3;
- }
-
- if (len == 45) {
- *p++ = '\n';
- }
- }
-
- if (s < e) {
- if (len == 45) {
- *p++ = PHP_UU_ENC(e - s);
- len = 0;
- }
-
- *p++ = PHP_UU_ENC(*s >> 2);
- *p++ = PHP_UU_ENC_C2(s);
- *p++ = ((e - s) > 1) ? PHP_UU_ENC_C3(s) : PHP_UU_ENC('\0');
- *p++ = ((e - s) > 2) ? PHP_UU_ENC(*(s + 2) & 077) : PHP_UU_ENC('\0');
- }
-
- if (len < 45) {
- *p++ = '\n';
- }
-
- *p++ = PHP_UU_ENC('\0');
- *p++ = '\n';
- *p = '\0';
-
- return (p - *dest);
-}
-
-PHPAPI int php_uudecode(char *src, int src_len, char **dest)
-{
- int len, total_len=0;
- char *s, *e, *p, *ee;
-
- p = *dest = emalloc(ceil(src_len * 0.75) + 1);
- s = src;
- e = src + src_len;
-
- while (s < e) {
- if ((len = PHP_UU_DEC(*s++)) <= 0) {
- break;
- }
- /* sanity check */
- if (len > src_len) {
- goto err;
- }
-
- total_len += len;
-
- ee = s + (len == 45 ? 60 : (int) floor(len * 1.33));
- /* sanity check */
- if (ee > e) {
- goto err;
- }
-
- while (s < ee) {
- *p++ = PHP_UU_DEC(*s) << 2 | PHP_UU_DEC(*(s + 1)) >> 4;
- *p++ = PHP_UU_DEC(*(s + 1)) << 4 | PHP_UU_DEC(*(s + 2)) >> 2;
- *p++ = PHP_UU_DEC(*(s + 2)) << 6 | PHP_UU_DEC(*(s + 3));
- s += 4;
- }
-
- if (len < 45) {
- break;
- }
-
- /* skip \n */
- s++;
- }
-
- if ((len = total_len > (p - *dest))) {
- *p++ = PHP_UU_DEC(*s) << 2 | PHP_UU_DEC(*(s + 1)) >> 4;
- if (len > 1) {
- *p++ = PHP_UU_DEC(*(s + 1)) << 4 | PHP_UU_DEC(*(s + 2)) >> 2;
- if (len > 2) {
- *p++ = PHP_UU_DEC(*(s + 2)) << 6 | PHP_UU_DEC(*(s + 3));
- }
- }
- }
-
- *(*dest + total_len) = '\0';
-
- return total_len;
-
-err:
- efree(*dest);
- return -1;
-}
-
-/* {{{ proto string uuencode(string data)
- uuencode a string */
-PHP_FUNCTION(convert_uuencode)
-{
- char *src, *dst;
- int src_len, dst_len;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &src, &src_len) == FAILURE || src_len < 1) {
- RETURN_FALSE;
- }
-
- dst_len = php_uuencode(src, src_len, &dst);
-
- RETURN_STRINGL(dst, dst_len, 0);
-}
-/* }}} */
-
-/* {{{ proto string uudecode(string data)
- decode a uuencoded string */
-PHP_FUNCTION(convert_uudecode)
-{
- char *src, *dst;
- int src_len, dst_len;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &src, &src_len) == FAILURE || src_len < 1) {
- RETURN_FALSE;
- }
-
- dst_len = php_uudecode(src, src_len, &dst);
- if (dst_len < 0) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "The given parameter is not a valid uuencoded string.");
- RETURN_FALSE;
- }
-
- RETURN_STRINGL(dst, dst_len, 0);
-}
-/* }}} */
diff --git a/ext/standard/var.c b/ext/standard/var.c
deleted file mode 100644
index 3d18d753e5..0000000000
--- a/ext/standard/var.c
+++ /dev/null
@@ -1,864 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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. |
- +----------------------------------------------------------------------+
- | Authors: Jani Lehtimäki <jkl@njet.net> |
- | Thies C. Arntzen <thies@thieso.net> |
- | Sascha Schumann <sascha@schumann.cx> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-
-/* {{{ includes
-*/
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <errno.h>
-#include "php.h"
-#include "php_string.h"
-#include "php_var.h"
-#include "php_smart_str.h"
-#include "basic_functions.h"
-#include "php_incomplete_class.h"
-
-#define COMMON ((*struc)->is_ref ? "&" : "")
-#define Z_REFCOUNT_PP(a) ((*a)->refcount)
-
-/* }}} */
-/* {{{ php_var_dump */
-
-static int php_array_element_dump(zval **zv, int num_args, va_list args, zend_hash_key *hash_key)
-{
- int level;
- TSRMLS_FETCH();
-
- level = va_arg(args, int);
-
- if (hash_key->nKeyLength==0) { /* numeric key */
- php_printf("%*c[%ld]=>\n", level + 1, ' ', hash_key->h);
- } else { /* string key */
- if (va_arg(args, int) && hash_key->arKey[0] == '\0') {
- /* XXX: perhaps when we are inside the class we should permit access to
- * private & protected values
- */
- return 0;
- }
- php_printf("%*c[\"", level + 1, ' ');
- PHPWRITE(hash_key->arKey, hash_key->nKeyLength - 1);
- php_printf("\"]=>\n");
- }
- php_var_dump(zv, level + 2 TSRMLS_CC);
- return 0;
-}
-
-static int php_object_property_dump(zval **zv, int num_args, va_list args, zend_hash_key *hash_key)
-{
- int level;
- char *prop_name, *class_name;
- TSRMLS_FETCH();
-
- level = va_arg(args, int);
-
- if (hash_key->nKeyLength ==0 ) { /* numeric key */
- php_printf("%*c[%ld]=>\n", level + 1, ' ', hash_key->h);
- } else { /* string key */
- zend_unmangle_property_name(hash_key->arKey, &class_name, &prop_name);
- if (class_name) {
- php_printf("%*c[\"%s", level + 1, ' ', prop_name);
- if (class_name[0]=='*') {
- ZEND_PUTS(":protected");
- } else {
- ZEND_PUTS(":private");
- }
- } else {
- php_printf("%*c[\"%s", level + 1, ' ', hash_key->arKey);
-#ifdef ANDREY_0
- ZEND_PUTS(":public");
-#endif
- }
- ZEND_PUTS("\"]=>\n");
- }
- php_var_dump(zv, level + 2 TSRMLS_CC);
- return 0;
-}
-
-
-PHPAPI void php_var_dump(zval **struc, int level TSRMLS_DC)
-{
- HashTable *myht = NULL;
- char *class_name;
- zend_uint class_name_len;
- int (*php_element_dump_func)(zval**, int, va_list, zend_hash_key*);
-
- if (level > 1) {
- php_printf("%*c", level - 1, ' ');
- }
-
- switch (Z_TYPE_PP(struc)) {
- case IS_BOOL:
- php_printf("%sbool(%s)\n", COMMON, Z_LVAL_PP(struc)?"true":"false");
- break;
- case IS_NULL:
- php_printf("%sNULL\n", COMMON);
- break;
- case IS_LONG:
- php_printf("%sint(%ld)\n", COMMON, Z_LVAL_PP(struc));
- break;
- case IS_DOUBLE:
- php_printf("%sfloat(%.*G)\n", COMMON, (int) EG(precision), Z_DVAL_PP(struc));
- break;
- case IS_STRING:
- php_printf("%sstring(%d) \"", COMMON, Z_STRLEN_PP(struc));
- PHPWRITE(Z_STRVAL_PP(struc), Z_STRLEN_PP(struc));
- PUTS("\"\n");
- break;
- case IS_ARRAY:
- myht = Z_ARRVAL_PP(struc);
- if (myht->nApplyCount > 1) {
- PUTS("*RECURSION*\n");
- return;
- }
- php_printf("%sarray(%d) {\n", COMMON, zend_hash_num_elements(myht));
- php_element_dump_func = php_array_element_dump;
- goto head_done;
- case IS_OBJECT:
- myht = Z_OBJPROP_PP(struc);
- if (myht && myht->nApplyCount > 1) {
- PUTS("*RECURSION*\n");
- return;
- }
-
- Z_OBJ_HANDLER(**struc, get_class_name)(*struc, &class_name, &class_name_len, 0 TSRMLS_CC);
- php_printf("%sobject(%s)#%d (%d) {\n", COMMON, class_name, Z_OBJ_HANDLE_PP(struc), myht ? zend_hash_num_elements(myht) : 0);
- efree(class_name);
- php_element_dump_func = php_object_property_dump;
-head_done:
- if (myht) {
- zend_hash_apply_with_arguments(myht, (apply_func_args_t) php_element_dump_func, 1, level, (Z_TYPE_PP(struc) == IS_ARRAY ? 0 : 1));
- }
- if (level > 1) {
- php_printf("%*c", level-1, ' ');
- }
- PUTS("}\n");
- break;
- case IS_RESOURCE: {
- char *type_name;
-
- type_name = zend_rsrc_list_get_rsrc_type(Z_LVAL_PP(struc) TSRMLS_CC);
- php_printf("%sresource(%ld) of type (%s)\n", COMMON, Z_LVAL_PP(struc), type_name ? type_name : "Unknown");
- break;
- }
- default:
- php_printf("%sUNKNOWN:0\n", COMMON);
- break;
- }
-}
-
-/* }}} */
-
-
-
-/* {{{ proto void var_dump(mixed var)
- Dumps a string representation of variable to output */
-PHP_FUNCTION(var_dump)
-{
- zval ***args;
- int argc;
- int i;
-
- argc = ZEND_NUM_ARGS();
-
- args = (zval ***)safe_emalloc(argc, sizeof(zval **), 0);
- if (ZEND_NUM_ARGS() == 0 || zend_get_parameters_array_ex(argc, args) == FAILURE) {
- efree(args);
- WRONG_PARAM_COUNT;
- }
-
- for (i=0; i<argc; i++)
- php_var_dump(args[i], 1 TSRMLS_CC);
-
- efree(args);
-}
-/* }}} */
-
-/* {{{ debug_zval_dump */
-
-static int zval_array_element_dump(zval **zv, int num_args, va_list args, zend_hash_key *hash_key)
-{
- int level;
- TSRMLS_FETCH();
-
- level = va_arg(args, int);
-
- if (hash_key->nKeyLength==0) { /* numeric key */
- php_printf("%*c[%ld]=>\n", level + 1, ' ', hash_key->h);
- } else { /* string key */
- /* XXX: perphaps when we are inside the class we should permit access to
- * private & protected values
- */
- if (va_arg(args, int) && hash_key->arKey[0] == '\0') {
- return 0;
- }
- php_printf("%*c[\"", level + 1, ' ');
- PHPWRITE(hash_key->arKey, hash_key->nKeyLength - 1);
- php_printf("\"]=>\n");
- }
- php_debug_zval_dump(zv, level + 2 TSRMLS_CC);
- return 0;
-}
-
-PHPAPI void php_debug_zval_dump(zval **struc, int level TSRMLS_DC)
-{
- HashTable *myht = NULL;
- char *class_name;
- zend_uint class_name_len;
- zend_class_entry *ce;
-
- if (level > 1) {
- php_printf("%*c", level - 1, ' ');
- }
-
- switch (Z_TYPE_PP(struc)) {
- case IS_BOOL:
- php_printf("%sbool(%s) refcount(%u)\n", COMMON, Z_LVAL_PP(struc)?"true":"false", Z_REFCOUNT_PP(struc));
- break;
- case IS_NULL:
- php_printf("%sNULL refcount(%u)\n", COMMON, Z_REFCOUNT_PP(struc));
- break;
- case IS_LONG:
- php_printf("%slong(%ld) refcount(%u)\n", COMMON, Z_LVAL_PP(struc), Z_REFCOUNT_PP(struc));
- break;
- case IS_DOUBLE:
- php_printf("%sdouble(%.*G) refcount(%u)\n", COMMON, (int) EG(precision), Z_DVAL_PP(struc), Z_REFCOUNT_PP(struc));
- break;
- case IS_STRING:
- php_printf("%sstring(%d) \"", COMMON, Z_STRLEN_PP(struc));
- PHPWRITE(Z_STRVAL_PP(struc), Z_STRLEN_PP(struc));
- php_printf("\" refcount(%u)\n", Z_REFCOUNT_PP(struc));
- break;
- case IS_ARRAY:
- myht = Z_ARRVAL_PP(struc);
- php_printf("%sarray(%d) refcount(%u){\n", COMMON, zend_hash_num_elements(myht), Z_REFCOUNT_PP(struc));
- goto head_done;
- case IS_OBJECT:
- myht = Z_OBJPROP_PP(struc);
- ce = Z_OBJCE(**struc);
- Z_OBJ_HANDLER(**struc, get_class_name)(*struc, &class_name, &class_name_len, 0 TSRMLS_CC);
- php_printf("%sobject(%s)#%d (%d) refcount(%u){\n", COMMON, class_name, Z_OBJ_HANDLE_PP(struc), myht ? zend_hash_num_elements(myht) : 0, Z_REFCOUNT_PP(struc));
- efree(class_name);
-head_done:
- if (myht) {
- zend_hash_apply_with_arguments(myht, (apply_func_args_t) zval_array_element_dump, 1, level, (Z_TYPE_PP(struc) == IS_ARRAY ? 0 : 1));
- }
- if (level > 1) {
- php_printf("%*c", level-1, ' ');
- }
- PUTS("}\n");
- break;
- case IS_RESOURCE: {
- char *type_name;
-
- type_name = zend_rsrc_list_get_rsrc_type(Z_LVAL_PP(struc) TSRMLS_CC);
- php_printf("%sresource(%ld) of type (%s) refcount(%u)\n", COMMON, Z_LVAL_PP(struc), type_name ? type_name : "Unknown", Z_REFCOUNT_PP(struc));
- break;
- }
- default:
- php_printf("%sUNKNOWN:0\n", COMMON);
- break;
- }
-}
-
-/* }}} */
-
-/* {{{ proto void debug_zval_dump(mixed var)
- Dumps a string representation of an internal zend value to output. */
-PHP_FUNCTION(debug_zval_dump)
-{
- zval ***args;
- int argc;
- int i;
-
- argc = ZEND_NUM_ARGS();
-
- args = (zval ***)safe_emalloc(argc, sizeof(zval **), 0);
- if (ZEND_NUM_ARGS() == 0 || zend_get_parameters_array_ex(argc, args) == FAILURE) {
- efree(args);
- WRONG_PARAM_COUNT;
- }
-
- for (i=0; i<argc; i++)
- php_debug_zval_dump(args[i], 1 TSRMLS_CC);
-
- efree(args);
-}
-/* }}} */
-
-
-/* {{{ php_var_export */
-
-static int php_array_element_export(zval **zv, int num_args, va_list args, zend_hash_key *hash_key)
-{
- int level;
- TSRMLS_FETCH();
-
- level = va_arg(args, int);
-
- if (hash_key->nKeyLength==0) { /* numeric key */
- php_printf("%*c%ld => ", level + 1, ' ', hash_key->h);
- } else { /* string key */
- /* XXX: perphaps when we are inside the class we should permit access to
- * private & protected values
- */
- if (va_arg(args, int) && hash_key->arKey[0] == '\0') {
- return 0;
- } else {
- char *key;
- int key_len;
- key = php_addcslashes(hash_key->arKey, hash_key->nKeyLength - 1, &key_len, 0, "'\\", 2 TSRMLS_CC);
- php_printf("%*c'", level + 1, ' ');
- PHPWRITE(key, key_len);
- php_printf("' => ");
- efree(key);
- }
- }
- php_var_export(zv, level + 2 TSRMLS_CC);
- PUTS (",\n");
- return 0;
-}
-
-static int php_object_element_export(zval **zv, int num_args, va_list args, zend_hash_key *hash_key)
-{
- int level;
- char *prop_name, *class_name;
- TSRMLS_FETCH();
-
- level = va_arg(args, int);
-
- if (hash_key->nKeyLength != 0) {
- php_printf("%*c", level + 1, ' ');
- zend_unmangle_property_name(hash_key->arKey, &class_name, &prop_name);
- if (class_name) {
- if (class_name[0] == '*') {
- php_printf("protected");
- } else {
- php_printf("private");
- }
- } else {
- php_printf("public");
- }
- php_printf(" $%s = ", prop_name);
- php_var_export(zv, level + 2 TSRMLS_CC);
- PUTS (";\n");
- }
- return 0;
-}
-
-PHPAPI void php_var_export(zval **struc, int level TSRMLS_DC)
-{
- HashTable *myht;
- char* tmp_str;
- int tmp_len;
- char *class_name;
- zend_uint class_name_len;
-
- switch (Z_TYPE_PP(struc)) {
- case IS_BOOL:
- php_printf("%s", Z_LVAL_PP(struc) ? "true" : "false");
- break;
- case IS_NULL:
- php_printf("NULL");
- break;
- case IS_LONG:
- php_printf("%ld", Z_LVAL_PP(struc));
- break;
- case IS_DOUBLE:
- php_printf("%.*G", (int) EG(precision), Z_DVAL_PP(struc));
- break;
- case IS_STRING:
- tmp_str = php_addcslashes(Z_STRVAL_PP(struc), Z_STRLEN_PP(struc), &tmp_len, 0, "'\\", 2 TSRMLS_CC);
- PUTS ("'");
- PHPWRITE(tmp_str, tmp_len);
- PUTS ("'");
- efree (tmp_str);
- break;
- case IS_ARRAY:
- myht = Z_ARRVAL_PP(struc);
- if (level > 1) {
- 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));
- if (level > 1) {
- php_printf("%*c", level - 1, ' ');
- }
- PUTS(")");
- break;
- case IS_OBJECT:
- myht = Z_OBJPROP_PP(struc);
- if (level > 1) {
- php_printf("\n%*c", level - 1, ' ');
- }
- Z_OBJ_HANDLER(**struc, get_class_name)(*struc, &class_name, &class_name_len, 0 TSRMLS_CC);
- php_printf ("class %s {\n", class_name);
- efree(class_name);
- if (myht) {
- zend_hash_apply_with_arguments(myht, (apply_func_args_t) php_object_element_export, 1, level);
- }
- if (level > 1) {
- php_printf("%*c", level - 1, ' ');
- }
- PUTS("}");
- break;
- default:
- PUTS ("NULL");
- break;
- }
-}
-
-/* }}} */
-
-
-/* {{{ proto mixed var_export(mixed var [, bool return])
- Outputs or returns a string representation of a variable */
-PHP_FUNCTION(var_export)
-{
- zval *var;
- zend_bool return_output = 0;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z|b", &var, &return_output) == FAILURE) {
- return;
- }
-
- if (return_output) {
- php_start_ob_buffer (NULL, 0, 1 TSRMLS_CC);
- }
-
- php_var_export(&var, 1 TSRMLS_CC);
-
- if (return_output) {
- php_ob_get_buffer (return_value TSRMLS_CC);
- php_end_ob_buffer (0, 0 TSRMLS_CC);
- }
-}
-/* }}} */
-
-
-
-/* {{{ php_var_serialize */
-
-static void php_var_serialize_intern(smart_str *buf, zval **struc, HashTable *var_hash TSRMLS_DC);
-
-static inline int php_add_var_hash(HashTable *var_hash, zval *var, void *var_old TSRMLS_DC)
-{
- ulong var_no;
- char id[32], *p;
- register int len;
-
- /* relies on "(long)" being a perfect hash function for data pointers,
- however the actual identity of an object has had to be determined
- by its object handle and the class entry since 5.0. */
- if (Z_TYPE_P(var) == IS_OBJECT) {
- p = smart_str_print_long(id + sizeof(id) - 1,
- (((unsigned long)Z_OBJCE_P(var) << 5)
- | ((unsigned long)Z_OBJCE_P(var) >> (sizeof(long) * 8 - 5)))
- + (long) Z_OBJ_HANDLE_P(var));
- *(--p) = 'O';
- len = id + sizeof(id) - 1 - p;
- } else {
- p = smart_str_print_long(id + sizeof(id) - 1, (long) var);
- len = id + sizeof(id) - 1 - p;
- }
-
- if (var_old && zend_hash_find(var_hash, p, len, var_old) == SUCCESS) {
- if (!var->is_ref) {
- /* we still need to bump up the counter, since non-refs will
- be counted separately by unserializer */
- var_no = -1;
- zend_hash_next_index_insert(var_hash, &var_no, sizeof(var_no), NULL);
- }
- return FAILURE;
- }
-
- /* +1 because otherwise hash will think we are trying to store NULL pointer */
- var_no = zend_hash_num_elements(var_hash) + 1;
- zend_hash_add(var_hash, p, len, &var_no, sizeof(var_no), NULL);
- return SUCCESS;
-}
-
-static inline void php_var_serialize_long(smart_str *buf, long val)
-{
- smart_str_appendl(buf, "i:", 2);
- smart_str_append_long(buf, val);
- smart_str_appendc(buf, ';');
-}
-
-static inline void php_var_serialize_string(smart_str *buf, char *str, int len)
-{
- smart_str_appendl(buf, "s:", 2);
- smart_str_append_long(buf, len);
- smart_str_appendl(buf, ":\"", 2);
- smart_str_appendl(buf, str, len);
- smart_str_appendl(buf, "\";", 2);
-}
-
-static inline zend_bool php_var_serialize_class_name(smart_str *buf, zval **struc TSRMLS_DC)
-{
- PHP_CLASS_ATTRIBUTES;
-
- PHP_SET_CLASS_ATTRIBUTES(*struc);
- smart_str_appendl(buf, "O:", 2);
- smart_str_append_long(buf, name_len);
- smart_str_appendl(buf, ":\"", 2);
- smart_str_appendl(buf, class_name, name_len);
- smart_str_appendl(buf, "\":", 2);
- PHP_CLEANUP_CLASS_ATTRIBUTES();
- return incomplete_class;
-}
-
-static void php_var_serialize_class(smart_str *buf, zval **struc, zval *retval_ptr, HashTable *var_hash TSRMLS_DC)
-{
- int count;
- zend_bool incomplete_class;
-
- incomplete_class = php_var_serialize_class_name(buf, struc TSRMLS_CC);
- /* count after serializing name, since php_var_serialize_class_name
- changes the count if the variable is incomplete class */
- count = zend_hash_num_elements(HASH_OF(retval_ptr));
- if (incomplete_class) {
- --count;
- }
- smart_str_append_long(buf, count);
- smart_str_appendl(buf, ":{", 2);
-
- if (count > 0) {
- char *key;
- zval **d, **name;
- ulong index;
- HashPosition pos;
- int i;
- zval nval, *nvalp;
-
- ZVAL_NULL(&nval);
- nvalp = &nval;
-
- zend_hash_internal_pointer_reset_ex(HASH_OF(retval_ptr), &pos);
-
- for (;; zend_hash_move_forward_ex(HASH_OF(retval_ptr), &pos)) {
- i = zend_hash_get_current_key_ex(HASH_OF(retval_ptr), &key, NULL,
- &index, 0, &pos);
-
- if (i == HASH_KEY_NON_EXISTANT)
- break;
-
- if (incomplete_class && strcmp(key, MAGIC_MEMBER) == 0) {
- continue;
- }
- zend_hash_get_current_data_ex(HASH_OF(retval_ptr),
- (void **) &name, &pos);
-
- if (Z_TYPE_PP(name) != IS_STRING) {
- php_error_docref(NULL TSRMLS_CC, E_NOTICE, "__sleep should return an array only "
- "containing the names of instance-variables to "
- "serialize.");
- /* we should still add element even if it's not OK,
- since we already wrote the length of the array before */
- smart_str_appendl(buf,"N;", 2);
- continue;
- }
- if (zend_hash_find(Z_OBJPROP_PP(struc), Z_STRVAL_PP(name),
- Z_STRLEN_PP(name) + 1, (void *) &d) == SUCCESS) {
- php_var_serialize_string(buf, Z_STRVAL_PP(name), Z_STRLEN_PP(name));
- php_var_serialize_intern(buf, d, var_hash TSRMLS_CC);
- } else {
- zend_class_entry *ce;
- ce = zend_get_class_entry(*struc TSRMLS_CC);
- if (ce) {
- char *prot_name, *priv_name;
- int prop_name_length;
-
- do {
- zend_mangle_property_name(&priv_name, &prop_name_length, ce->name, ce->name_length,
- Z_STRVAL_PP(name), Z_STRLEN_PP(name) + 1, ce->type & ZEND_INTERNAL_CLASS);
- if (zend_hash_find(Z_OBJPROP_PP(struc), priv_name, prop_name_length, (void *) &d) == SUCCESS) {
- php_var_serialize_string(buf, priv_name, prop_name_length-1);
- efree(priv_name);
- php_var_serialize_intern(buf, d, var_hash TSRMLS_CC);
- break;
- }
- efree(priv_name);
- zend_mangle_property_name(&prot_name, &prop_name_length, "*", 1,
- Z_STRVAL_PP(name), Z_STRLEN_PP(name) + 1, ce->type & ZEND_INTERNAL_CLASS);
- if (zend_hash_find(Z_OBJPROP_PP(struc), prot_name, prop_name_length, (void *) &d) == SUCCESS) {
- php_var_serialize_string(buf, prot_name, prop_name_length - 1);
- efree(prot_name);
- php_var_serialize_intern(buf, d, var_hash TSRMLS_CC);
- break;
- }
- efree(prot_name);
- php_error_docref(NULL TSRMLS_CC, E_NOTICE, "\"%s\" returned as member variable from __sleep() but does not exist", Z_STRVAL_PP(name));
- php_var_serialize_string(buf, Z_STRVAL_PP(name), Z_STRLEN_PP(name));
- php_var_serialize_intern(buf, &nvalp, var_hash TSRMLS_CC);
- } while (0);
- } else {
- php_var_serialize_string(buf, Z_STRVAL_PP(name), Z_STRLEN_PP(name));
- php_var_serialize_intern(buf, &nvalp, var_hash TSRMLS_CC);
- }
- }
- }
- }
- smart_str_appendc(buf, '}');
-}
-
-
-static void php_var_serialize_intern(smart_str *buf, zval **struc, HashTable *var_hash TSRMLS_DC)
-{
- int i;
- ulong *var_already;
- HashTable *myht;
-
- if (var_hash
- && php_add_var_hash(var_hash, *struc, (void *) &var_already TSRMLS_CC) == FAILURE) {
- if((*struc)->is_ref) {
- smart_str_appendl(buf, "R:", 2);
- smart_str_append_long(buf, *var_already);
- smart_str_appendc(buf, ';');
- return;
- } else if(Z_TYPE_PP(struc) == IS_OBJECT) {
- smart_str_appendl(buf, "r:", 2);
- smart_str_append_long(buf, *var_already);
- smart_str_appendc(buf, ';');
- return;
- }
- }
-
- switch (Z_TYPE_PP(struc)) {
- case IS_BOOL:
- smart_str_appendl(buf, "b:", 2);
- smart_str_append_long(buf, Z_LVAL_PP(struc));
- smart_str_appendc(buf, ';');
- return;
-
- case IS_NULL:
- smart_str_appendl(buf, "N;", 2);
- return;
-
- case IS_LONG:
- php_var_serialize_long(buf, Z_LVAL_PP(struc));
- return;
-
- case IS_DOUBLE: {
- char *s;
- ulong slen;
-
- slen = spprintf(&s, 0, "d:%.*G;", (int) PG(serialize_precision), Z_DVAL_PP(struc));
- smart_str_appendl(buf, s, slen);
- efree(s);
- return;
- }
-
- case IS_STRING:
- php_var_serialize_string(buf, Z_STRVAL_PP(struc), Z_STRLEN_PP(struc));
- return;
-
- case IS_OBJECT: {
- zval *retval_ptr = NULL;
- zval fname;
- int res;
-
- if(Z_OBJCE_PP(struc) != PHP_IC_ENTRY) {
- INIT_PZVAL(&fname);
- ZVAL_STRINGL(&fname, "__sleep", sizeof("__sleep") - 1, 0);
- res = call_user_function_ex(CG(function_table), struc, &fname,
- &retval_ptr, 0, 0, 1, NULL TSRMLS_CC);
-
- if (res == SUCCESS) {
- if (retval_ptr) {
- if (HASH_OF(retval_ptr)) {
- php_var_serialize_class(buf, struc, retval_ptr,
- var_hash TSRMLS_CC);
- } else {
- php_error_docref(NULL TSRMLS_CC, E_NOTICE, "__sleep should return an array only "
- "containing the names of instance-variables to "
- "serialize.");
- /* we should still add element even if it's not OK,
- since we already wrote the length of the array before */
- smart_str_appendl(buf,"N;", 2);
- }
-
- zval_ptr_dtor(&retval_ptr);
- }
- return;
- }
- }
-
- if (retval_ptr)
- zval_ptr_dtor(&retval_ptr);
- /* fall-through */
- }
- case IS_ARRAY: {
- zend_bool incomplete_class = 0;
- if (Z_TYPE_PP(struc) == IS_ARRAY) {
- smart_str_appendl(buf, "a:", 2);
- myht = HASH_OF(*struc);
- } else {
- incomplete_class = php_var_serialize_class_name(buf, struc TSRMLS_CC);
- myht = Z_OBJPROP_PP(struc);
- }
- /* count after serializing name, since php_var_serialize_class_name
- changes the count if the variable is incomplete class */
- i = myht ? zend_hash_num_elements(myht) : 0;
- if (i > 0 && incomplete_class) {
- --i;
- }
- smart_str_append_long(buf, i);
- smart_str_appendl(buf, ":{", 2);
- if (i > 0) {
- char *key;
- zval **data;
- ulong index;
- uint key_len;
- HashPosition pos;
-
- zend_hash_internal_pointer_reset_ex(myht, &pos);
- for (;; zend_hash_move_forward_ex(myht, &pos)) {
- i = zend_hash_get_current_key_ex(myht, &key, &key_len,
- &index, 0, &pos);
- if (i == HASH_KEY_NON_EXISTANT)
- break;
-
- if (incomplete_class && strcmp(key, MAGIC_MEMBER) == 0) {
- continue;
- }
-
- switch (i) {
- case HASH_KEY_IS_LONG:
- php_var_serialize_long(buf, index);
- break;
- case HASH_KEY_IS_STRING:
- php_var_serialize_string(buf, key, key_len - 1);
- break;
- }
-
- /* we should still add element even if it's not OK,
- since we already wrote the length of the array before */
- if (zend_hash_get_current_data_ex(myht,
- (void **) &data, &pos) != SUCCESS
- || !data
- || data == struc) {
- smart_str_appendl(buf, "N;", 2);
- } else {
- php_var_serialize_intern(buf, data, var_hash TSRMLS_CC);
- }
- }
- }
- smart_str_appendc(buf, '}');
- return;
- }
- default:
- smart_str_appendl(buf, "i:0;", 4);
- return;
- }
-}
-
-PHPAPI void php_var_serialize(smart_str *buf, zval **struc, HashTable *var_hash TSRMLS_DC)
-{
- php_var_serialize_intern(buf, struc, var_hash TSRMLS_CC);
- smart_str_0(buf);
-}
-
-/* }}} */
-
-/* {{{ proto string serialize(mixed variable)
- Returns a string representation of variable (which can later be unserialized) */
-PHP_FUNCTION(serialize)
-{
- zval **struc;
- php_serialize_data_t var_hash;
- smart_str buf = {0};
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &struc) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- Z_TYPE_P(return_value) = IS_STRING;
- Z_STRVAL_P(return_value) = NULL;
- Z_STRLEN_P(return_value) = 0;
-
- PHP_VAR_SERIALIZE_INIT(var_hash);
- php_var_serialize(&buf, struc, &var_hash TSRMLS_CC);
- PHP_VAR_SERIALIZE_DESTROY(var_hash);
-
- if (buf.c) {
- RETURN_STRINGL(buf.c, buf.len, 0);
- } else {
- RETURN_NULL();
- }
-}
-
-/* }}} */
-/* {{{ proto mixed unserialize(string variable_representation)
- Takes a string representation of variable and recreates it */
-
-
-PHP_FUNCTION(unserialize)
-{
- zval **buf;
- php_unserialize_data_t var_hash;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &buf) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- if (Z_TYPE_PP(buf) == IS_STRING) {
- const unsigned char *p = (unsigned char*)Z_STRVAL_PP(buf);
-
- if (Z_STRLEN_PP(buf) == 0) {
- RETURN_FALSE;
- }
-
- PHP_VAR_UNSERIALIZE_INIT(var_hash);
- if (!php_var_unserialize(&return_value, &p, p + Z_STRLEN_PP(buf), &var_hash TSRMLS_CC)) {
- PHP_VAR_UNSERIALIZE_DESTROY(var_hash);
- zval_dtor(return_value);
- php_error_docref(NULL TSRMLS_CC, E_NOTICE, "Error at offset %ld of %d bytes", (long)((char*)p - Z_STRVAL_PP(buf)), Z_STRLEN_PP(buf));
- RETURN_FALSE;
- }
- PHP_VAR_UNSERIALIZE_DESTROY(var_hash);
- } else {
- php_error_docref(NULL TSRMLS_CC, E_NOTICE, "Argument is not an string");
- RETURN_FALSE;
- }
-}
-
-/* }}} */
-
-#if MEMORY_LIMIT
-/* {{{ proto int memory_get_usage()
- Returns the allocated by PHP memory */
-PHP_FUNCTION(memory_get_usage) {
- RETURN_LONG(AG(allocated_memory));
-}
-/* }}} */
-#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/standard/var_unserializer.c b/ext/standard/var_unserializer.c
deleted file mode 100644
index e9f9b545ed..0000000000
--- a/ext/standard/var_unserializer.c
+++ /dev/null
@@ -1,1011 +0,0 @@
-/* Generated by re2c 0.9.4 on Sun Sep 5 19:19:02 2004 */
-#line 1 "/usr/src/php-cvs/ext/standard/var_unserializer.re"
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Sascha Schumann <sascha@schumann.cx> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#include "php.h"
-#include "ext/standard/php_var.h"
-#include "php_incomplete_class.h"
-
-/* {{{ reference-handling for unserializer: var_* */
-#define VAR_ENTRIES_MAX 1024
-
-typedef struct {
- zval *data[VAR_ENTRIES_MAX];
- int used_slots;
- void *next;
-} var_entries;
-
-static inline void var_push(php_unserialize_data_t *var_hashx, zval **rval)
-{
- var_entries *var_hash = var_hashx->first, *prev = NULL;
-
- while (var_hash && var_hash->used_slots == VAR_ENTRIES_MAX) {
- prev = var_hash;
- var_hash = var_hash->next;
- }
-
- if (!var_hash) {
- var_hash = emalloc(sizeof(var_entries));
- var_hash->used_slots = 0;
- var_hash->next = 0;
-
- if (!var_hashx->first)
- var_hashx->first = var_hash;
- else
- prev->next = var_hash;
- }
-
- var_hash->data[var_hash->used_slots++] = *rval;
-}
-
-PHPAPI void var_replace(php_unserialize_data_t *var_hashx, zval *ozval, zval **nzval)
-{
- int i;
- var_entries *var_hash = var_hashx->first;
-
- while (var_hash) {
- for (i = 0; i < var_hash->used_slots; i++) {
- if (var_hash->data[i] == ozval) {
- var_hash->data[i] = *nzval;
- return;
- }
- }
- var_hash = var_hash->next;
- }
-}
-
-static int var_access(php_unserialize_data_t *var_hashx, int id, zval ***store)
-{
- var_entries *var_hash = var_hashx->first;
-
- while (id >= VAR_ENTRIES_MAX && var_hash && var_hash->used_slots == VAR_ENTRIES_MAX) {
- var_hash = var_hash->next;
- id -= VAR_ENTRIES_MAX;
- }
-
- if (!var_hash) return !SUCCESS;
-
- if (id >= var_hash->used_slots) return !SUCCESS;
-
- *store = &var_hash->data[id];
-
- return SUCCESS;
-}
-
-PHPAPI void var_destroy(php_unserialize_data_t *var_hashx)
-{
- void *next;
- var_entries *var_hash = var_hashx->first;
-
- while (var_hash) {
- next = var_hash->next;
- efree(var_hash);
- var_hash = next;
- }
-}
-
-/* }}} */
-
-#define YYFILL(n) do { } while (0)
-#define YYCTYPE unsigned char
-#define YYCURSOR cursor
-#define YYLIMIT limit
-#define YYMARKER marker
-
-
-#line 118 "/usr/src/php-cvs/ext/standard/var_unserializer.re"
-
-
-
-
-static inline int parse_iv2(const unsigned char *p, const unsigned char **q)
-{
- char cursor;
- int result = 0;
- int neg = 0;
-
- switch (*p) {
- case '-':
- neg++;
- /* fall-through */
- case '+':
- p++;
- }
-
- while (1) {
- cursor = (char)*p;
- if (cursor >= '0' && cursor <= '9') {
- result = result * 10 + cursor - '0';
- } else {
- break;
- }
- p++;
- }
- if (q) *q = p;
- if (neg) return -result;
- return result;
-}
-
-static inline int parse_iv(const unsigned char *p)
-{
- return parse_iv2(p, NULL);
-}
-
-/* no need to check for length - re2c already did */
-static inline size_t parse_uiv(const unsigned char *p)
-{
- unsigned char cursor;
- size_t result = 0;
-
- if (*p == '+') {
- p++;
- }
-
- while (1) {
- cursor = *p;
- if (cursor >= '0' && cursor <= '9') {
- result = result * 10 + (size_t)(cursor - (unsigned char)'0');
- } else {
- break;
- }
- p++;
- }
- return result;
-}
-
-#define UNSERIALIZE_PARAMETER zval **rval, const unsigned char **p, const unsigned char *max, php_unserialize_data_t *var_hash TSRMLS_DC
-#define UNSERIALIZE_PASSTHRU rval, p, max, var_hash TSRMLS_CC
-
-static inline int process_nested_data(UNSERIALIZE_PARAMETER, HashTable *ht, int elements)
-{
- while (elements-- > 0) {
- zval *key, *data;
-
- ALLOC_INIT_ZVAL(key);
-
- if (!php_var_unserialize(&key, p, max, NULL TSRMLS_CC)) {
- zval_dtor(key);
- FREE_ZVAL(key);
- return 0;
- }
-
- ALLOC_INIT_ZVAL(data);
-
- if (!php_var_unserialize(&data, p, max, var_hash TSRMLS_CC)) {
- zval_dtor(key);
- FREE_ZVAL(key);
- zval_dtor(data);
- FREE_ZVAL(data);
- return 0;
- }
-
- switch (Z_TYPE_P(key)) {
- case IS_LONG:
- zend_hash_index_update(ht, Z_LVAL_P(key), &data, sizeof(data), NULL);
- break;
- case IS_STRING:
- zend_hash_update(ht, Z_STRVAL_P(key), Z_STRLEN_P(key) + 1, &data, sizeof(data), NULL);
- break;
-
- }
-
- zval_dtor(key);
- FREE_ZVAL(key);
-
- if (elements && *(*p-1) != ';') {
-#if SOMETHING_NEW_MIGHT_LEAD_TO_CRASH_ENABLE_IF_YOU_ARE_BRAVE
- zval_ptr_dtor(rval);
-#endif
- (*p)--;
- return 0;
- }
- }
-
- return 1;
-}
-
-static inline int finish_nested_data(UNSERIALIZE_PARAMETER)
-{
- if (*((*p)++) == '}')
- return 1;
-
-#if SOMETHING_NEW_MIGHT_LEAD_TO_CRASH_ENABLE_IF_YOU_ARE_BRAVE
- zval_ptr_dtor(rval);
-#endif
- return 0;
-}
-
-static inline int object_common1(UNSERIALIZE_PARAMETER, zend_class_entry *ce)
-{
- int elements;
-
- elements = parse_iv2((*p) + 2, p);
-
- (*p) += 2;
-
- object_init_ex(*rval, ce);
- return elements;
-}
-
-static inline int object_common2(UNSERIALIZE_PARAMETER, int elements)
-{
- zval *retval_ptr = NULL;
- zval fname;
-
- if (!process_nested_data(UNSERIALIZE_PASSTHRU, Z_OBJPROP_PP(rval), elements)) {
- return 0;
- }
-
- if(Z_OBJCE_PP(rval) != PHP_IC_ENTRY) {
- INIT_PZVAL(&fname);
- ZVAL_STRINGL(&fname, "__wakeup", sizeof("__wakeup") - 1, 0);
- call_user_function_ex(CG(function_table), rval, &fname, &retval_ptr, 0, 0, 1, NULL TSRMLS_CC);
- }
-
- if (retval_ptr)
- zval_ptr_dtor(&retval_ptr);
-
- return finish_nested_data(UNSERIALIZE_PASSTHRU);
-
-}
-
-PHPAPI int php_var_unserialize(UNSERIALIZE_PARAMETER)
-{
- const unsigned char *cursor, *limit, *marker, *start;
- zval **rval_ref;
-
- limit = cursor = *p;
-
- if (var_hash && cursor[0] != 'R') {
- var_push(var_hash, rval);
- }
-
- start = cursor;
-
-
-
-
-#line 7 "<stdout>"
-{
- YYCTYPE yych;
- unsigned int yyaccept;
- static unsigned char yybm[] = {
- 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, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 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, 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, 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, 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, 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, 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,
- };
- goto yy0;
-yy1: ++YYCURSOR;
-yy0:
- if((YYLIMIT - YYCURSOR) < 7) YYFILL(7);
- yych = *YYCURSOR;
- if(yych <= 'd'){
- if(yych <= 'R'){
- if(yych <= 'N'){
- if(yych <= 'M') goto yy16;
- goto yy6;
- } else {
- if(yych <= 'O') goto yy13;
- if(yych <= 'Q') goto yy16;
- goto yy3;
- }
- } else {
- if(yych <= 'a'){
- if(yych <= '`') goto yy16;
- goto yy11;
- } else {
- if(yych <= 'b') goto yy7;
- if(yych <= 'c') goto yy16;
- goto yy9;
- }
- }
- } else {
- if(yych <= 'q'){
- if(yych <= 'i'){
- if(yych <= 'h') goto yy16;
- goto yy8;
- } else {
- if(yych == 'o') goto yy12;
- goto yy16;
- }
- } else {
- if(yych <= '|'){
- if(yych <= 'r') goto yy5;
- if(yych <= 's') goto yy10;
- goto yy16;
- } else {
- if(yych <= '}') goto yy14;
- if(yych <= 0xBF) goto yy16;
- goto yy2;
- }
- }
- }
-yy2: YYCURSOR = YYMARKER;
- switch(yyaccept){
- case 0: goto yy4;
- }
-yy3: yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych == ':') goto yy87;
- goto yy4;
-yy4:
-#line 530 "/usr/src/php-cvs/ext/standard/var_unserializer.re"
-{ return 0; }
-#line 102 "<stdout>"
-yy5: yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych == ':') goto yy81;
- goto yy4;
-yy6: yych = *++YYCURSOR;
- if(yych == ';') goto yy79;
- goto yy4;
-yy7: yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych == ':') goto yy75;
- goto yy4;
-yy8: yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych == ':') goto yy69;
- goto yy4;
-yy9: yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych == ':') goto yy45;
- goto yy4;
-yy10: yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych == ':') goto yy38;
- goto yy4;
-yy11: yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych == ':') goto yy31;
- goto yy4;
-yy12: yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych == ':') goto yy24;
- goto yy4;
-yy13: yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych == ':') goto yy17;
- goto yy4;
-yy14: ++YYCURSOR;
- goto yy15;
-yy15:
-#line 524 "/usr/src/php-cvs/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 147 "<stdout>"
-yy16: yych = *++YYCURSOR;
- goto yy4;
-yy17: yych = *++YYCURSOR;
- if(yybm[0+yych] & 128) goto yy19;
- if(yych != '+') goto yy2;
- goto yy18;
-yy18: yych = *++YYCURSOR;
- if(yybm[0+yych] & 128) goto yy19;
- goto yy2;
-yy19: ++YYCURSOR;
- if(YYLIMIT == YYCURSOR) YYFILL(1);
- yych = *YYCURSOR;
- goto yy20;
-yy20: if(yybm[0+yych] & 128) goto yy19;
- if(yych != ':') goto yy2;
- goto yy21;
-yy21: yych = *++YYCURSOR;
- if(yych != '"') goto yy2;
- goto yy22;
-yy22: ++YYCURSOR;
- goto yy23;
-yy23:
-#line 431 "/usr/src/php-cvs/ext/standard/var_unserializer.re"
-{
- size_t len, len2, maxlen;
- int elements;
- char *class_name;
- zend_class_entry *ce;
- zend_class_entry **pce;
- int incomplete_class = 0;
-
- zval *user_func;
- zval *retval_ptr;
- zval **args[1];
- zval *arg_func_name;
-
- INIT_PZVAL(*rval);
- len2 = len = parse_uiv(start + 2);
- maxlen = max - YYCURSOR;
- if (maxlen < len || len == 0) {
- *p = start + 2;
- return 0;
- }
-
- class_name = (char*)YYCURSOR;
-
- YYCURSOR += len;
-
- if (*(YYCURSOR) != '"') {
- *p = YYCURSOR;
- return 0;
- }
- if (*(YYCURSOR+1) != ':') {
- *p = YYCURSOR+1;
- return 0;
- }
-
- class_name = estrndup(class_name, len);
-
- do {
- /* Try to find class directly */
- if (zend_lookup_class(class_name, len2, &pce TSRMLS_CC) == SUCCESS) {
- ce = *pce;
- break;
- }
-
- /* Check for unserialize callback */
- if ((PG(unserialize_callback_func) == NULL) || (PG(unserialize_callback_func)[0] == '\0')) {
- incomplete_class = 1;
- ce = PHP_IC_ENTRY;
- break;
- }
-
- /* Call unserialize callback */
- MAKE_STD_ZVAL(user_func);
- ZVAL_STRING(user_func, PG(unserialize_callback_func), 1);
- args[0] = &arg_func_name;
- MAKE_STD_ZVAL(arg_func_name);
- ZVAL_STRING(arg_func_name, class_name, 1);
- if (call_user_function_ex(CG(function_table), NULL, user_func, &retval_ptr, 1, args, 0, NULL TSRMLS_CC) != SUCCESS) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "defined (%s) but not found", user_func->value.str.val);
- incomplete_class = 1;
- ce = PHP_IC_ENTRY;
- zval_ptr_dtor(&user_func);
- zval_ptr_dtor(&arg_func_name);
- break;
- }
- if (retval_ptr) {
- zval_ptr_dtor(&retval_ptr);
- }
-
- /* The callback function may have defined the class */
- if (zend_lookup_class(class_name, len2, &pce TSRMLS_CC) == SUCCESS) {
- ce = *pce;
- } else {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Function %s() hasn't defined the class it was called for", user_func->value.str.val);
- incomplete_class = 1;
- ce = PHP_IC_ENTRY;
- }
-
- zval_ptr_dtor(&user_func);
- zval_ptr_dtor(&arg_func_name);
- break;
- } while (1);
-
- *p = YYCURSOR;
- elements = object_common1(UNSERIALIZE_PASSTHRU, ce);
-
- if (incomplete_class) {
- php_store_class_name(*rval, class_name, len2);
- }
- efree(class_name);
-
- return object_common2(UNSERIALIZE_PASSTHRU, elements);
-}
-#line 264 "<stdout>"
-yy24: yych = *++YYCURSOR;
- if(yych <= ','){
- if(yych != '+') goto yy2;
- goto yy25;
- } else {
- if(yych <= '-') goto yy25;
- if(yych <= '/') goto yy2;
- if(yych <= '9') goto yy26;
- goto yy2;
- }
-yy25: yych = *++YYCURSOR;
- if(yych <= '/') goto yy2;
- if(yych >= ':') goto yy2;
- goto yy26;
-yy26: ++YYCURSOR;
- if(YYLIMIT == YYCURSOR) YYFILL(1);
- yych = *YYCURSOR;
- goto yy27;
-yy27: if(yych <= '/') goto yy2;
- if(yych <= '9') goto yy26;
- if(yych >= ';') goto yy2;
- goto yy28;
-yy28: yych = *++YYCURSOR;
- if(yych != '"') goto yy2;
- goto yy29;
-yy29: ++YYCURSOR;
- goto yy30;
-yy30:
-#line 423 "/usr/src/php-cvs/ext/standard/var_unserializer.re"
-{
-
- INIT_PZVAL(*rval);
-
- return object_common2(UNSERIALIZE_PASSTHRU,
- object_common1(UNSERIALIZE_PASSTHRU, ZEND_STANDARD_CLASS_DEF_PTR));
-}
-#line 302 "<stdout>"
-yy31: yych = *++YYCURSOR;
- if(yych == '+') goto yy32;
- if(yych <= '/') goto yy2;
- if(yych <= '9') goto yy33;
- goto yy2;
-yy32: yych = *++YYCURSOR;
- if(yych <= '/') goto yy2;
- if(yych >= ':') goto yy2;
- goto yy33;
-yy33: ++YYCURSOR;
- if(YYLIMIT == YYCURSOR) YYFILL(1);
- yych = *YYCURSOR;
- goto yy34;
-yy34: if(yych <= '/') goto yy2;
- if(yych <= '9') goto yy33;
- if(yych >= ';') goto yy2;
- goto yy35;
-yy35: yych = *++YYCURSOR;
- if(yych != '{') goto yy2;
- goto yy36;
-yy36: ++YYCURSOR;
- goto yy37;
-yy37:
-#line 405 "/usr/src/php-cvs/ext/standard/var_unserializer.re"
-{
- int elements = parse_iv(start + 2);
-
- *p = YYCURSOR;
-
- INIT_PZVAL(*rval);
- Z_TYPE_PP(rval) = IS_ARRAY;
- ALLOC_HASHTABLE(Z_ARRVAL_PP(rval));
-
- zend_hash_init(Z_ARRVAL_PP(rval), elements + 1, NULL, ZVAL_PTR_DTOR, 0);
-
- if (!process_nested_data(UNSERIALIZE_PASSTHRU, Z_ARRVAL_PP(rval), elements)) {
- return 0;
- }
-
- return finish_nested_data(UNSERIALIZE_PASSTHRU);
-}
-#line 345 "<stdout>"
-yy38: yych = *++YYCURSOR;
- if(yych == '+') goto yy39;
- if(yych <= '/') goto yy2;
- if(yych <= '9') goto yy40;
- goto yy2;
-yy39: yych = *++YYCURSOR;
- if(yych <= '/') goto yy2;
- if(yych >= ':') goto yy2;
- goto yy40;
-yy40: ++YYCURSOR;
- if(YYLIMIT == YYCURSOR) YYFILL(1);
- yych = *YYCURSOR;
- goto yy41;
-yy41: if(yych <= '/') goto yy2;
- if(yych <= '9') goto yy40;
- if(yych >= ';') goto yy2;
- goto yy42;
-yy42: yych = *++YYCURSOR;
- if(yych != '"') goto yy2;
- goto yy43;
-yy43: ++YYCURSOR;
- goto yy44;
-yy44:
-#line 377 "/usr/src/php-cvs/ext/standard/var_unserializer.re"
-{
- size_t len, maxlen;
- char *str;
-
- len = parse_uiv(start + 2);
- maxlen = max - YYCURSOR;
- if (maxlen < len) {
- *p = start + 2;
- return 0;
- }
-
- str = (char*)YYCURSOR;
-
- YYCURSOR += len;
-
- if (*(YYCURSOR) != '"') {
- *p = YYCURSOR;
- return 0;
- }
-
- YYCURSOR += 2;
- *p = YYCURSOR;
-
- INIT_PZVAL(*rval);
- ZVAL_STRINGL(*rval, str, len, 1);
- return 1;
-}
-#line 398 "<stdout>"
-yy45: yych = *++YYCURSOR;
- if(yych <= '/'){
- if(yych <= ','){
- if(yych == '+') goto yy49;
- goto yy2;
- } else {
- if(yych <= '-') goto yy47;
- if(yych <= '.') goto yy52;
- goto yy2;
- }
- } else {
- if(yych <= 'I'){
- if(yych <= '9') goto yy50;
- if(yych <= 'H') goto yy2;
- goto yy48;
- } else {
- if(yych != 'N') goto yy2;
- goto yy46;
- }
- }
-yy46: yych = *++YYCURSOR;
- if(yych == 'A') goto yy68;
- goto yy2;
-yy47: yych = *++YYCURSOR;
- if(yych <= '/'){
- if(yych == '.') goto yy52;
- goto yy2;
- } else {
- if(yych <= '9') goto yy50;
- if(yych != 'I') goto yy2;
- goto yy48;
- }
-yy48: yych = *++YYCURSOR;
- if(yych == 'N') goto yy64;
- goto yy2;
-yy49: yych = *++YYCURSOR;
- if(yych == '.') goto yy52;
- if(yych <= '/') goto yy2;
- if(yych >= ':') goto yy2;
- goto yy50;
-yy50: ++YYCURSOR;
- if(YYLIMIT == YYCURSOR) YYFILL(1);
- yych = *YYCURSOR;
- goto yy51;
-yy51: if(yych <= ':'){
- if(yych <= '.'){
- if(yych <= '-') goto yy2;
- goto yy62;
- } else {
- if(yych <= '/') goto yy2;
- if(yych <= '9') goto yy50;
- goto yy2;
- }
- } else {
- if(yych <= 'E'){
- if(yych <= ';') goto yy55;
- if(yych <= 'D') goto yy2;
- goto yy57;
- } else {
- if(yych == 'e') goto yy57;
- goto yy2;
- }
- }
-yy52: yych = *++YYCURSOR;
- if(yych <= '/') goto yy2;
- if(yych >= ':') goto yy2;
- goto yy53;
-yy53: ++YYCURSOR;
- if(YYLIMIT == YYCURSOR) YYFILL(1);
- yych = *YYCURSOR;
- goto yy54;
-yy54: if(yych <= ';'){
- if(yych <= '/') goto yy2;
- if(yych <= '9') goto yy53;
- if(yych <= ':') goto yy2;
- goto yy55;
- } else {
- if(yych <= 'E'){
- if(yych <= 'D') goto yy2;
- goto yy57;
- } else {
- if(yych == 'e') goto yy57;
- goto yy2;
- }
- }
-yy55: ++YYCURSOR;
- goto yy56;
-yy56:
-#line 370 "/usr/src/php-cvs/ext/standard/var_unserializer.re"
-{
- *p = YYCURSOR;
- INIT_PZVAL(*rval);
- ZVAL_DOUBLE(*rval, atof(start + 2));
- return 1;
-}
-#line 496 "<stdout>"
-yy57: yych = *++YYCURSOR;
- if(yych <= ','){
- if(yych != '+') goto yy2;
- goto yy58;
- } else {
- if(yych <= '-') goto yy58;
- if(yych <= '/') goto yy2;
- if(yych <= '9') goto yy59;
- goto yy2;
- }
-yy58: yych = *++YYCURSOR;
- if(yych <= ','){
- if(yych == '+') goto yy61;
- goto yy2;
- } else {
- if(yych <= '-') goto yy61;
- if(yych <= '/') goto yy2;
- if(yych >= ':') goto yy2;
- goto yy59;
- }
-yy59: ++YYCURSOR;
- if(YYLIMIT == YYCURSOR) YYFILL(1);
- yych = *YYCURSOR;
- goto yy60;
-yy60: if(yych <= '/') goto yy2;
- if(yych <= '9') goto yy59;
- if(yych == ';') goto yy55;
- goto yy2;
-yy61: yych = *++YYCURSOR;
- if(yych <= '/') goto yy2;
- if(yych <= '9') goto yy59;
- goto yy2;
-yy62: ++YYCURSOR;
- if((YYLIMIT - YYCURSOR) < 4) YYFILL(4);
- yych = *YYCURSOR;
- goto yy63;
-yy63: if(yych <= ';'){
- if(yych <= '/') goto yy2;
- if(yych <= '9') goto yy62;
- if(yych <= ':') goto yy2;
- goto yy55;
- } else {
- if(yych <= 'E'){
- if(yych <= 'D') goto yy2;
- goto yy57;
- } else {
- if(yych == 'e') goto yy57;
- goto yy2;
- }
- }
-yy64: yych = *++YYCURSOR;
- if(yych != 'F') goto yy2;
- goto yy65;
-yy65: yych = *++YYCURSOR;
- if(yych != ';') goto yy2;
- goto yy66;
-yy66: ++YYCURSOR;
- goto yy67;
-yy67:
-#line 353 "/usr/src/php-cvs/ext/standard/var_unserializer.re"
-{
- *p = YYCURSOR;
- INIT_PZVAL(*rval);
-#if defined(HAVE_ATOF_ACCEPTS_NAN) && defined(HAVE_ATOF_ACCEPTS_INF)
- ZVAL_DOUBLE(*rval, atof(start + 2));
-#else
- if (!strncmp(start + 2, "NAN", 3)) {
- ZVAL_DOUBLE(*rval, php_get_nan());
- } else if (!strncmp(start + 2, "INF", 3)) {
- ZVAL_DOUBLE(*rval, php_get_inf());
- } else if (!strncmp(start + 2, "-INF", 4)) {
- ZVAL_DOUBLE(*rval, -php_get_inf());
- }
-#endif
- return 1;
-}
-#line 575 "<stdout>"
-yy68: yych = *++YYCURSOR;
- if(yych == 'N') goto yy65;
- goto yy2;
-yy69: yych = *++YYCURSOR;
- if(yych <= ','){
- if(yych != '+') goto yy2;
- goto yy70;
- } else {
- if(yych <= '-') goto yy70;
- if(yych <= '/') goto yy2;
- if(yych <= '9') goto yy71;
- goto yy2;
- }
-yy70: yych = *++YYCURSOR;
- if(yych <= '/') goto yy2;
- if(yych >= ':') goto yy2;
- goto yy71;
-yy71: ++YYCURSOR;
- if(YYLIMIT == YYCURSOR) YYFILL(1);
- yych = *YYCURSOR;
- goto yy72;
-yy72: if(yych <= '/') goto yy2;
- if(yych <= '9') goto yy71;
- if(yych != ';') goto yy2;
- goto yy73;
-yy73: ++YYCURSOR;
- goto yy74;
-yy74:
-#line 346 "/usr/src/php-cvs/ext/standard/var_unserializer.re"
-{
- *p = YYCURSOR;
- INIT_PZVAL(*rval);
- ZVAL_LONG(*rval, parse_iv(start + 2));
- return 1;
-}
-#line 612 "<stdout>"
-yy75: yych = *++YYCURSOR;
- if(yych <= '/') goto yy2;
- if(yych >= '2') goto yy2;
- goto yy76;
-yy76: yych = *++YYCURSOR;
- if(yych != ';') goto yy2;
- goto yy77;
-yy77: ++YYCURSOR;
- goto yy78;
-yy78:
-#line 339 "/usr/src/php-cvs/ext/standard/var_unserializer.re"
-{
- *p = YYCURSOR;
- INIT_PZVAL(*rval);
- ZVAL_BOOL(*rval, parse_iv(start + 2));
- return 1;
-}
-#line 630 "<stdout>"
-yy79: ++YYCURSOR;
- goto yy80;
-yy80:
-#line 332 "/usr/src/php-cvs/ext/standard/var_unserializer.re"
-{
- *p = YYCURSOR;
- INIT_PZVAL(*rval);
- ZVAL_NULL(*rval);
- return 1;
-}
-#line 641 "<stdout>"
-yy81: yych = *++YYCURSOR;
- if(yych <= ','){
- if(yych != '+') goto yy2;
- goto yy82;
- } else {
- if(yych <= '-') goto yy82;
- if(yych <= '/') goto yy2;
- if(yych <= '9') goto yy83;
- goto yy2;
- }
-yy82: yych = *++YYCURSOR;
- if(yych <= '/') goto yy2;
- if(yych >= ':') goto yy2;
- goto yy83;
-yy83: ++YYCURSOR;
- if(YYLIMIT == YYCURSOR) YYFILL(1);
- yych = *YYCURSOR;
- goto yy84;
-yy84: if(yych <= '/') goto yy2;
- if(yych <= '9') goto yy83;
- if(yych != ';') goto yy2;
- goto yy85;
-yy85: ++YYCURSOR;
- goto yy86;
-yy86:
-#line 311 "/usr/src/php-cvs/ext/standard/var_unserializer.re"
-{
- int id;
-
- *p = YYCURSOR;
- if (!var_hash) return 0;
-
- id = parse_iv(start + 2) - 1;
- if (id == -1 || var_access(var_hash, id, &rval_ref) != SUCCESS) {
- return 0;
- }
-
- if (*rval != NULL) {
- zval_ptr_dtor(rval);
- }
- *rval = *rval_ref;
- (*rval)->refcount++;
- (*rval)->is_ref = 0;
-
- return 1;
-}
-#line 689 "<stdout>"
-yy87: yych = *++YYCURSOR;
- if(yych <= ','){
- if(yych != '+') goto yy2;
- goto yy88;
- } else {
- if(yych <= '-') goto yy88;
- if(yych <= '/') goto yy2;
- if(yych <= '9') goto yy89;
- goto yy2;
- }
-yy88: yych = *++YYCURSOR;
- if(yych <= '/') goto yy2;
- if(yych >= ':') goto yy2;
- goto yy89;
-yy89: ++YYCURSOR;
- if(YYLIMIT == YYCURSOR) YYFILL(1);
- yych = *YYCURSOR;
- goto yy90;
-yy90: if(yych <= '/') goto yy2;
- if(yych <= '9') goto yy89;
- if(yych != ';') goto yy2;
- goto yy91;
-yy91: ++YYCURSOR;
- goto yy92;
-yy92:
-#line 290 "/usr/src/php-cvs/ext/standard/var_unserializer.re"
-{
- int id;
-
- *p = YYCURSOR;
- if (!var_hash) return 0;
-
- id = parse_iv(start + 2) - 1;
- if (id == -1 || var_access(var_hash, id, &rval_ref) != SUCCESS) {
- return 0;
- }
-
- if (*rval != NULL) {
- zval_ptr_dtor(rval);
- }
- *rval = *rval_ref;
- (*rval)->refcount++;
- (*rval)->is_ref = 1;
-
- return 1;
-}
-#line 737 "<stdout>"
-}
-#line 532 "/usr/src/php-cvs/ext/standard/var_unserializer.re"
-
-
- return 0;
-}
diff --git a/ext/standard/var_unserializer.re b/ext/standard/var_unserializer.re
deleted file mode 100644
index 8839cf5d6f..0000000000
--- a/ext/standard/var_unserializer.re
+++ /dev/null
@@ -1,535 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Sascha Schumann <sascha@schumann.cx> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#include "php.h"
-#include "ext/standard/php_var.h"
-#include "php_incomplete_class.h"
-
-/* {{{ reference-handling for unserializer: var_* */
-#define VAR_ENTRIES_MAX 1024
-
-typedef struct {
- zval *data[VAR_ENTRIES_MAX];
- int used_slots;
- void *next;
-} var_entries;
-
-static inline void var_push(php_unserialize_data_t *var_hashx, zval **rval)
-{
- var_entries *var_hash = var_hashx->first, *prev = NULL;
-
- while (var_hash && var_hash->used_slots == VAR_ENTRIES_MAX) {
- prev = var_hash;
- var_hash = var_hash->next;
- }
-
- if (!var_hash) {
- var_hash = emalloc(sizeof(var_entries));
- var_hash->used_slots = 0;
- var_hash->next = 0;
-
- if (!var_hashx->first)
- var_hashx->first = var_hash;
- else
- prev->next = var_hash;
- }
-
- var_hash->data[var_hash->used_slots++] = *rval;
-}
-
-PHPAPI void var_replace(php_unserialize_data_t *var_hashx, zval *ozval, zval **nzval)
-{
- int i;
- var_entries *var_hash = var_hashx->first;
-
- while (var_hash) {
- for (i = 0; i < var_hash->used_slots; i++) {
- if (var_hash->data[i] == ozval) {
- var_hash->data[i] = *nzval;
- return;
- }
- }
- var_hash = var_hash->next;
- }
-}
-
-static int var_access(php_unserialize_data_t *var_hashx, int id, zval ***store)
-{
- var_entries *var_hash = var_hashx->first;
-
- while (id >= VAR_ENTRIES_MAX && var_hash && var_hash->used_slots == VAR_ENTRIES_MAX) {
- var_hash = var_hash->next;
- id -= VAR_ENTRIES_MAX;
- }
-
- if (!var_hash) return !SUCCESS;
-
- if (id >= var_hash->used_slots) return !SUCCESS;
-
- *store = &var_hash->data[id];
-
- return SUCCESS;
-}
-
-PHPAPI void var_destroy(php_unserialize_data_t *var_hashx)
-{
- void *next;
- var_entries *var_hash = var_hashx->first;
-
- while (var_hash) {
- next = var_hash->next;
- efree(var_hash);
- var_hash = next;
- }
-}
-
-/* }}} */
-
-#define YYFILL(n) do { } while (0)
-#define YYCTYPE unsigned char
-#define YYCURSOR cursor
-#define YYLIMIT limit
-#define YYMARKER marker
-
-
-/*!re2c
-uiv = [+]? [0-9]+;
-iv = [+-]? [0-9]+;
-nv = [+-]? ([0-9]* "." [0-9]+|[0-9]+ "." [0-9]*);
-nvexp = (iv | nv) [eE] [+-]? iv;
-any = [\000-\277];
-*/
-
-
-
-static inline int parse_iv2(const unsigned char *p, const unsigned char **q)
-{
- char cursor;
- int result = 0;
- int neg = 0;
-
- switch (*p) {
- case '-':
- neg++;
- /* fall-through */
- case '+':
- p++;
- }
-
- while (1) {
- cursor = (char)*p;
- if (cursor >= '0' && cursor <= '9') {
- result = result * 10 + cursor - '0';
- } else {
- break;
- }
- p++;
- }
- if (q) *q = p;
- if (neg) return -result;
- return result;
-}
-
-static inline int parse_iv(const unsigned char *p)
-{
- return parse_iv2(p, NULL);
-}
-
-/* no need to check for length - re2c already did */
-static inline size_t parse_uiv(const unsigned char *p)
-{
- unsigned char cursor;
- size_t result = 0;
-
- if (*p == '+') {
- p++;
- }
-
- while (1) {
- cursor = *p;
- if (cursor >= '0' && cursor <= '9') {
- result = result * 10 + (size_t)(cursor - (unsigned char)'0');
- } else {
- break;
- }
- p++;
- }
- return result;
-}
-
-#define UNSERIALIZE_PARAMETER zval **rval, const unsigned char **p, const unsigned char *max, php_unserialize_data_t *var_hash TSRMLS_DC
-#define UNSERIALIZE_PASSTHRU rval, p, max, var_hash TSRMLS_CC
-
-static inline int process_nested_data(UNSERIALIZE_PARAMETER, HashTable *ht, int elements)
-{
- while (elements-- > 0) {
- zval *key, *data;
-
- ALLOC_INIT_ZVAL(key);
-
- if (!php_var_unserialize(&key, p, max, NULL TSRMLS_CC)) {
- zval_dtor(key);
- FREE_ZVAL(key);
- return 0;
- }
-
- ALLOC_INIT_ZVAL(data);
-
- if (!php_var_unserialize(&data, p, max, var_hash TSRMLS_CC)) {
- zval_dtor(key);
- FREE_ZVAL(key);
- zval_dtor(data);
- FREE_ZVAL(data);
- return 0;
- }
-
- switch (Z_TYPE_P(key)) {
- case IS_LONG:
- zend_hash_index_update(ht, Z_LVAL_P(key), &data, sizeof(data), NULL);
- break;
- case IS_STRING:
- zend_hash_update(ht, Z_STRVAL_P(key), Z_STRLEN_P(key) + 1, &data, sizeof(data), NULL);
- break;
-
- }
-
- zval_dtor(key);
- FREE_ZVAL(key);
-
- if (elements && *(*p-1) != ';') {
-#if SOMETHING_NEW_MIGHT_LEAD_TO_CRASH_ENABLE_IF_YOU_ARE_BRAVE
- zval_ptr_dtor(rval);
-#endif
- (*p)--;
- return 0;
- }
- }
-
- return 1;
-}
-
-static inline int finish_nested_data(UNSERIALIZE_PARAMETER)
-{
- if (*((*p)++) == '}')
- return 1;
-
-#if SOMETHING_NEW_MIGHT_LEAD_TO_CRASH_ENABLE_IF_YOU_ARE_BRAVE
- zval_ptr_dtor(rval);
-#endif
- return 0;
-}
-
-static inline int object_common1(UNSERIALIZE_PARAMETER, zend_class_entry *ce)
-{
- int elements;
-
- elements = parse_iv2((*p) + 2, p);
-
- (*p) += 2;
-
- object_init_ex(*rval, ce);
- return elements;
-}
-
-static inline int object_common2(UNSERIALIZE_PARAMETER, int elements)
-{
- zval *retval_ptr = NULL;
- zval fname;
-
- if (!process_nested_data(UNSERIALIZE_PASSTHRU, Z_OBJPROP_PP(rval), elements)) {
- return 0;
- }
-
- if(Z_OBJCE_PP(rval) != PHP_IC_ENTRY) {
- INIT_PZVAL(&fname);
- ZVAL_STRINGL(&fname, "__wakeup", sizeof("__wakeup") - 1, 0);
- call_user_function_ex(CG(function_table), rval, &fname, &retval_ptr, 0, 0, 1, NULL TSRMLS_CC);
- }
-
- if (retval_ptr)
- zval_ptr_dtor(&retval_ptr);
-
- return finish_nested_data(UNSERIALIZE_PASSTHRU);
-
-}
-
-PHPAPI int php_var_unserialize(UNSERIALIZE_PARAMETER)
-{
- const unsigned char *cursor, *limit, *marker, *start;
- zval **rval_ref;
-
- limit = cursor = *p;
-
- if (var_hash && cursor[0] != 'R') {
- var_push(var_hash, rval);
- }
-
- start = cursor;
-
-
-
-/*!re2c
-
-"R:" iv ";" {
- int id;
-
- *p = YYCURSOR;
- if (!var_hash) return 0;
-
- id = parse_iv(start + 2) - 1;
- if (id == -1 || var_access(var_hash, id, &rval_ref) != SUCCESS) {
- return 0;
- }
-
- if (*rval != NULL) {
- zval_ptr_dtor(rval);
- }
- *rval = *rval_ref;
- (*rval)->refcount++;
- (*rval)->is_ref = 1;
-
- return 1;
-}
-
-"r:" iv ";" {
- int id;
-
- *p = YYCURSOR;
- if (!var_hash) return 0;
-
- id = parse_iv(start + 2) - 1;
- if (id == -1 || var_access(var_hash, id, &rval_ref) != SUCCESS) {
- return 0;
- }
-
- if (*rval != NULL) {
- zval_ptr_dtor(rval);
- }
- *rval = *rval_ref;
- (*rval)->refcount++;
- (*rval)->is_ref = 0;
-
- return 1;
-}
-
-"N;" {
- *p = YYCURSOR;
- INIT_PZVAL(*rval);
- ZVAL_NULL(*rval);
- return 1;
-}
-
-"b:" [01] ";" {
- *p = YYCURSOR;
- INIT_PZVAL(*rval);
- ZVAL_BOOL(*rval, parse_iv(start + 2));
- return 1;
-}
-
-"i:" iv ";" {
- *p = YYCURSOR;
- INIT_PZVAL(*rval);
- ZVAL_LONG(*rval, parse_iv(start + 2));
- return 1;
-}
-
-"d:" ("NAN" | "-"? "INF") ";" {
- *p = YYCURSOR;
- INIT_PZVAL(*rval);
-#if defined(HAVE_ATOF_ACCEPTS_NAN) && defined(HAVE_ATOF_ACCEPTS_INF)
- ZVAL_DOUBLE(*rval, atof(start + 2));
-#else
- if (!strncmp(start + 2, "NAN", 3)) {
- ZVAL_DOUBLE(*rval, php_get_nan());
- } else if (!strncmp(start + 2, "INF", 3)) {
- ZVAL_DOUBLE(*rval, php_get_inf());
- } else if (!strncmp(start + 2, "-INF", 4)) {
- ZVAL_DOUBLE(*rval, -php_get_inf());
- }
-#endif
- return 1;
-}
-
-"d:" (iv | nv | nvexp) ";" {
- *p = YYCURSOR;
- INIT_PZVAL(*rval);
- ZVAL_DOUBLE(*rval, atof(start + 2));
- return 1;
-}
-
-"s:" uiv ":" ["] {
- size_t len, maxlen;
- char *str;
-
- len = parse_uiv(start + 2);
- maxlen = max - YYCURSOR;
- if (maxlen < len) {
- *p = start + 2;
- return 0;
- }
-
- str = (char*)YYCURSOR;
-
- YYCURSOR += len;
-
- if (*(YYCURSOR) != '"') {
- *p = YYCURSOR;
- return 0;
- }
-
- YYCURSOR += 2;
- *p = YYCURSOR;
-
- INIT_PZVAL(*rval);
- ZVAL_STRINGL(*rval, str, len, 1);
- return 1;
-}
-
-"a:" uiv ":" "{" {
- int elements = parse_iv(start + 2);
-
- *p = YYCURSOR;
-
- INIT_PZVAL(*rval);
- Z_TYPE_PP(rval) = IS_ARRAY;
- ALLOC_HASHTABLE(Z_ARRVAL_PP(rval));
-
- zend_hash_init(Z_ARRVAL_PP(rval), elements + 1, NULL, ZVAL_PTR_DTOR, 0);
-
- if (!process_nested_data(UNSERIALIZE_PASSTHRU, Z_ARRVAL_PP(rval), elements)) {
- return 0;
- }
-
- return finish_nested_data(UNSERIALIZE_PASSTHRU);
-}
-
-"o:" iv ":" ["] {
-
- INIT_PZVAL(*rval);
-
- return object_common2(UNSERIALIZE_PASSTHRU,
- object_common1(UNSERIALIZE_PASSTHRU, ZEND_STANDARD_CLASS_DEF_PTR));
-}
-
-"O:" uiv ":" ["] {
- size_t len, len2, maxlen;
- int elements;
- char *class_name;
- zend_class_entry *ce;
- zend_class_entry **pce;
- int incomplete_class = 0;
-
- zval *user_func;
- zval *retval_ptr;
- zval **args[1];
- zval *arg_func_name;
-
- INIT_PZVAL(*rval);
- len2 = len = parse_uiv(start + 2);
- maxlen = max - YYCURSOR;
- if (maxlen < len || len == 0) {
- *p = start + 2;
- return 0;
- }
-
- class_name = (char*)YYCURSOR;
-
- YYCURSOR += len;
-
- if (*(YYCURSOR) != '"') {
- *p = YYCURSOR;
- return 0;
- }
- if (*(YYCURSOR+1) != ':') {
- *p = YYCURSOR+1;
- return 0;
- }
-
- class_name = estrndup(class_name, len);
-
- do {
- /* Try to find class directly */
- if (zend_lookup_class(class_name, len2, &pce TSRMLS_CC) == SUCCESS) {
- ce = *pce;
- break;
- }
-
- /* Check for unserialize callback */
- if ((PG(unserialize_callback_func) == NULL) || (PG(unserialize_callback_func)[0] == '\0')) {
- incomplete_class = 1;
- ce = PHP_IC_ENTRY;
- break;
- }
-
- /* Call unserialize callback */
- MAKE_STD_ZVAL(user_func);
- ZVAL_STRING(user_func, PG(unserialize_callback_func), 1);
- args[0] = &arg_func_name;
- MAKE_STD_ZVAL(arg_func_name);
- ZVAL_STRING(arg_func_name, class_name, 1);
- if (call_user_function_ex(CG(function_table), NULL, user_func, &retval_ptr, 1, args, 0, NULL TSRMLS_CC) != SUCCESS) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "defined (%s) but not found", user_func->value.str.val);
- incomplete_class = 1;
- ce = PHP_IC_ENTRY;
- zval_ptr_dtor(&user_func);
- zval_ptr_dtor(&arg_func_name);
- break;
- }
- if (retval_ptr) {
- zval_ptr_dtor(&retval_ptr);
- }
-
- /* The callback function may have defined the class */
- if (zend_lookup_class(class_name, len2, &pce TSRMLS_CC) == SUCCESS) {
- ce = *pce;
- } else {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Function %s() hasn't defined the class it was called for", user_func->value.str.val);
- incomplete_class = 1;
- ce = PHP_IC_ENTRY;
- }
-
- zval_ptr_dtor(&user_func);
- zval_ptr_dtor(&arg_func_name);
- break;
- } while (1);
-
- *p = YYCURSOR;
- elements = object_common1(UNSERIALIZE_PASSTHRU, ce);
-
- if (incomplete_class) {
- php_store_class_name(*rval, class_name, len2);
- }
- efree(class_name);
-
- return object_common2(UNSERIALIZE_PASSTHRU, elements);
-}
-
-"}" {
- /* 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? */
-}
-
-any { return 0; }
-
-*/
-
- return 0;
-}
diff --git a/ext/standard/versioning.c b/ext/standard/versioning.c
deleted file mode 100644
index ea8cfe21cf..0000000000
--- a/ext/standard/versioning.c
+++ /dev/null
@@ -1,256 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Stig Sæther Bakken <ssb@php.net> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-#include <stdio.h>
-#include <sys/types.h>
-#include <ctype.h>
-#include <stdlib.h>
-#include <string.h>
-#include "php.h"
-#include "php_versioning.h"
-
-#define sign(n) ((n)<0?-1:((n)>0?1:0))
-
-/* {{{ php_canonicalize_version() */
-
-PHPAPI char *
-php_canonicalize_version(const char *version)
-{
- int len = strlen(version);
- char *buf = safe_emalloc(len, 2, 1), *q, lp, lq;
- const char *p;
-
- if (len == 0) {
- *buf = '\0';
- return buf;
- }
-
- p = version;
- q = buf;
- *q++ = lp = *p++;
- lq = '\0';
- while (*p) {
-/* s/[-_+]/./g;
- * s/([^\d\.])([^\D\.])/$1.$2/g;
- * s/([^\D\.])([^\d\.])/$1.$2/g;
- */
-#define isdig(x) (isdigit(x)&&(x)!='.')
-#define isndig(x) (!isdigit(x)&&(x)!='.')
-#define isspecialver(x) ((x)=='-'||(x)=='_'||(x)=='+')
-
- lq = *(q - 1);
- if (isspecialver(*p)) {
- if (lq != '.') {
- lq = *q++ = '.';
- }
- } else if ((isndig(lp) && isdig(*p)) || (isdig(lp) && isndig(*p))) {
- if (lq != '.') {
- *q++ = '.';
- }
- lq = *q++ = *p;
- } else if (!isalnum(*p)) {
- if (lq != '.') {
- lq = *q++ = '.';
- }
- } else {
- lq = *q++ = *p;
- }
- lp = *p++;
- }
- *q++ = '\0';
- return buf;
-}
-
-/* }}} */
-/* {{{ compare_special_version_forms() */
-
-typedef struct {
- const char *name;
- int order;
-} special_forms_t;
-
-static int
-compare_special_version_forms(char *form1, char *form2)
-{
- int found1 = -1, found2 = -1;
- special_forms_t special_forms[10] = {
- {"dev", 0},
- {"alpha", 1},
- {"a", 1},
- {"beta", 2},
- {"b", 2},
- {"RC", 3},
- {"#", 4},
- {"pl", 5},
- {"p", 5},
- {NULL, 0},
- };
- special_forms_t *pp;
-
- for (pp = special_forms; pp && pp->name; pp++) {
- if (strncmp(form1, pp->name, strlen(pp->name)) == 0) {
- found1 = pp->order;
- break;
- }
- }
- for (pp = special_forms; pp && pp->name; pp++) {
- if (strncmp(form2, pp->name, strlen(pp->name)) == 0) {
- found2 = pp->order;
- break;
- }
- }
- return sign(found1 - found2);
-}
-
-/* }}} */
-/* {{{ php_version_compare() */
-
-PHPAPI int
-php_version_compare(const char *orig_ver1, const char *orig_ver2)
-{
- char *ver1;
- char *ver2;
- char *p1, *p2, *n1, *n2;
- long l1, l2;
- int compare = 0;
-
- if (!*orig_ver1 || !*orig_ver2) {
- if (!*orig_ver1 && !*orig_ver2) {
- return 0;
- } else {
- return *orig_ver1 ? 1 : -1;
- }
- }
- if (orig_ver1[0] == '#') {
- ver1 = estrdup(orig_ver1);
- } else {
- ver1 = php_canonicalize_version(orig_ver1);
- }
- if (orig_ver2[0] == '#') {
- ver2 = estrdup(orig_ver2);
- } else {
- ver2 = php_canonicalize_version(orig_ver2);
- }
- p1 = n1 = ver1;
- p2 = n2 = ver2;
- while (*p1 && *p2 && n1 && n2) {
- if ((n1 = strchr(p1, '.')) != NULL) {
- *n1 = '\0';
- }
- if ((n2 = strchr(p2, '.')) != NULL) {
- *n2 = '\0';
- }
- if (isdigit(*p1) && isdigit(*p2)) {
- /* compare element numerically */
- l1 = strtol(p1, NULL, 10);
- l2 = strtol(p2, NULL, 10);
- compare = sign(l1 - l2);
- } else if (!isdigit(*p1) && !isdigit(*p2)) {
- /* compare element names */
- compare = compare_special_version_forms(p1, p2);
- } else {
- /* mix of names and numbers */
- if (isdigit(*p1)) {
- compare = compare_special_version_forms("#N#", p2);
- } else {
- compare = compare_special_version_forms(p1, "#N#");
- }
- }
- if (compare != 0) {
- break;
- }
- if (n1 != NULL) {
- p1 = n1 + 1;
- }
- if (n2 != NULL) {
- p2 = n2 + 1;
- }
- }
- if (compare == 0) {
- if (n1 != NULL) {
- if (isdigit(*p1)) {
- compare = 1;
- } else {
- compare = php_version_compare(p1, "#N#");
- }
- } else if (n2 != NULL) {
- if (isdigit(*p2)) {
- compare = -1;
- } else {
- compare = php_version_compare("#N#", p2);
- }
- }
- }
- efree(ver1);
- efree(ver2);
- return compare;
-}
-
-/* }}} */
-/* {{{ do_version_compare() */
-
-/* {{{ proto int version_compare(string ver1, string ver2 [, string oper])
- Compares two "PHP-standardized" version number strings */
-
-PHP_FUNCTION(version_compare)
-{
- char *v1, *v2, *op;
- int v1_len, v2_len, op_len;
- int compare, argc;
-
- argc = ZEND_NUM_ARGS();
- if (zend_parse_parameters(argc TSRMLS_CC, "ss|s", &v1, &v1_len, &v2,
- &v2_len, &op, &op_len) == FAILURE) {
- return;
- }
- compare = php_version_compare(v1, v2);
- if (argc == 2) {
- RETURN_LONG(compare);
- }
- if (!strncmp(op, "<", op_len) || !strncmp(op, "lt", op_len)) {
- RETURN_BOOL(compare == -1);
- }
- if (!strncmp(op, "<=", op_len) || !strncmp(op, "le", op_len)) {
- RETURN_BOOL(compare != 1);
- }
- if (!strncmp(op, ">", op_len) || !strncmp(op, "gt", op_len)) {
- RETURN_BOOL(compare == 1);
- }
- if (!strncmp(op, ">=", op_len) || !strncmp(op, "ge", op_len)) {
- RETURN_BOOL(compare != -1);
- }
- if (!strncmp(op, "==", op_len) || !strncmp(op, "=", op_len) || !strncmp(op, "eq", op_len)) {
- RETURN_BOOL(compare == 0);
- }
- if (!strncmp(op, "!=", op_len) || !strncmp(op, "<>", op_len) || !strncmp(op, "ne", op_len)) {
- RETURN_BOOL(compare != 0);
- }
- RETURN_NULL();
-}
-
-/* }}} */
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * indent-tabs-mode: t
- * End:
- */
diff --git a/ext/sybase/CREDITS b/ext/sybase/CREDITS
deleted file mode 100644
index 632dcce0ca..0000000000
--- a/ext/sybase/CREDITS
+++ /dev/null
@@ -1,2 +0,0 @@
-Sybase-DB
-Zeev Suraski
diff --git a/ext/sybase/config.m4 b/ext/sybase/config.m4
deleted file mode 100644
index 5d0c25f73f..0000000000
--- a/ext/sybase/config.m4
+++ /dev/null
@@ -1,30 +0,0 @@
-dnl
-dnl $Id$
-dnl
-
-PHP_ARG_WITH(sybase,for Sybase support,
-[ --with-sybase[=DIR] Include Sybase-DB support. DIR is the Sybase home
- directory, defaults to /home/sybase.])
-
-
-if test "$PHP_SYBASE" != "no"; then
- if test "$PHP_SYBASE" = "yes"; then
- SYBASE_INCDIR=/home/sybase/include
- SYBASE_LIBDIR=/home/sybase/lib
- else
- SYBASE_INCDIR=$PHP_SYBASE/include
- SYBASE_LIBDIR=$PHP_SYBASE/lib
- fi
- PHP_ADD_INCLUDE($SYBASE_INCDIR)
- PHP_ADD_LIBRARY_WITH_PATH(sybdb, $SYBASE_LIBDIR, SYBASE_SHARED_LIBADD)
- PHP_NEW_EXTENSION(sybase, php_sybase_db.c, $ext_shared)
- AC_CHECK_LIB(dnet_stub, dnet_addr,
- [ PHP_ADD_LIBRARY_WITH_PATH(dnet_stub,,SYBASE_SHARED_LIBADD)
- AC_DEFINE(HAVE_LIBDNET_STUB,1,[ ])
- ])
- AC_DEFINE(HAVE_SYBASE,1,[ ])
- AC_CHECK_LIB(sybdb, tdsdbopen,
- [ AC_DEFINE(PHP_SYBASE_DBOPEN,tdsdbopen,[ ])
- AC_DEFINE(DBMFIX,1,[ ]) ],
- [ AC_DEFINE(PHP_SYBASE_DBOPEN,dbopen,[ ]) ])
-fi
diff --git a/ext/sybase/php_sybase_db.c b/ext/sybase/php_sybase_db.c
deleted file mode 100644
index a6f0886f86..0000000000
--- a/ext/sybase/php_sybase_db.c
+++ /dev/null
@@ -1,1452 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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. |
- +----------------------------------------------------------------------+
- | Authors: Zeev Suraski <zeev@zend.com> |
- +----------------------------------------------------------------------+
- | php_sybase_get_column_content_with_type() based on code by: |
- | Muhammad A Muquit <MA_Muquit@fccc.edu> |
- | Rasmus Lerdorf <rasmus@lerdorf.on.ca> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "php.h"
-#include "php_sybase_db.h"
-#include "ext/standard/php_standard.h"
-#include "ext/standard/info.h"
-#include "php_globals.h"
-
-#if HAVE_SYBASE
-
-#include <sybfront.h>
-#include <sybdb.h>
-#include <syberror.h>
-
-#if BROKEN_SYBASE_PCONNECTS
-#include "http_log.h"
-#endif
-
-/* Moved these structures/defines into the .c file (or into a *private* header),
- because leaving them in php_sybase_db.h caused namespace pollution in
- main/internal_functions.c. */
-
-#define coltype(j) dbcoltype(sybase_ptr->link,j)
-#define intcol(i) ((int) *(DBINT *) dbdata(sybase_ptr->link,i))
-#define smallintcol(i) ((int) *(DBSMALLINT *) dbdata(sybase_ptr->link,i))
-#define tinyintcol(i) ((int) *(DBTINYINT *) dbdata(sybase_ptr->link,i))
-#define anyintcol(j) (coltype(j)==SYBINT4?intcol(j):(coltype(j)==SYBINT2?smallintcol(j):tinyintcol(j)))
-#define charcol(i) ((DBCHAR *) dbdata(sybase_ptr->link,i))
-#define floatcol(i) ((float) *(DBFLT8 *) dbdata(sybase_ptr->link,i))
-
-typedef struct sybase_link_struct sybase_link;
-
-struct sybase_link_struct {
- LOGINREC *login;
- DBPROCESS *link;
- int valid;
-};
-
-#define SYBASE_ROWS_BLOCK 128
-
-typedef struct {
- char *name,*column_source;
- int max_length, numeric;
- int type;
-} sybase_field;
-
-typedef struct {
- pval ***data;
- sybase_field *fields;
- sybase_link *sybase_ptr;
- int cur_row,cur_field;
- int num_rows,num_fields;
-} sybase_result;
-
-
-function_entry sybase_functions[] = {
- PHP_FE(sybase_connect, NULL)
- PHP_FE(sybase_pconnect, NULL)
- PHP_FE(sybase_close, NULL)
- PHP_FE(sybase_select_db, NULL)
- PHP_FE(sybase_query, NULL)
- PHP_FE(sybase_free_result, NULL)
- PHP_FE(sybase_get_last_message, NULL)
- PHP_FE(sybase_num_rows, NULL)
- PHP_FE(sybase_num_fields, NULL)
- PHP_FE(sybase_fetch_row, NULL)
- PHP_FE(sybase_fetch_array, NULL)
- PHP_FE(sybase_fetch_object, NULL)
- PHP_FE(sybase_data_seek, NULL)
- PHP_FE(sybase_fetch_field, NULL)
- PHP_FE(sybase_field_seek, NULL)
- PHP_FE(sybase_result, NULL)
- PHP_FE(sybase_affected_rows, NULL)
- PHP_FE(sybase_min_error_severity, NULL)
- PHP_FE(sybase_min_message_severity, NULL)
- PHP_FALIAS(mssql_connect, sybase_connect, NULL)
- PHP_FALIAS(mssql_pconnect, sybase_pconnect, NULL)
- PHP_FALIAS(mssql_close, sybase_close, NULL)
- PHP_FALIAS(mssql_select_db, sybase_select_db, NULL)
- PHP_FALIAS(mssql_query, sybase_query, NULL)
- PHP_FALIAS(mssql_free_result, sybase_free_result, NULL)
- PHP_FALIAS(mssql_get_last_message, sybase_get_last_message, NULL)
- PHP_FALIAS(mssql_num_rows, sybase_num_rows, NULL)
- PHP_FALIAS(mssql_num_fields, sybase_num_fields, NULL)
- PHP_FALIAS(mssql_fetch_row, sybase_fetch_row, NULL)
- PHP_FALIAS(mssql_fetch_array, sybase_fetch_array, NULL)
- PHP_FALIAS(mssql_fetch_object, sybase_fetch_object, NULL)
- PHP_FALIAS(mssql_data_seek, sybase_data_seek, NULL)
- PHP_FALIAS(mssql_fetch_field, sybase_fetch_field, NULL)
- PHP_FALIAS(mssql_field_seek, sybase_field_seek, NULL)
- PHP_FALIAS(mssql_result, sybase_result, NULL)
- PHP_FALIAS(mssql_affected_rows, sybase_affected_rows, NULL)
- PHP_FALIAS(mssql_min_error_severity, sybase_min_error_severity, NULL)
- PHP_FALIAS(mssql_min_message_severity, sybase_min_message_severity, NULL)
- {NULL, NULL, NULL}
-};
-
-zend_module_entry sybase_module_entry = {
- STANDARD_MODULE_HEADER,
- "sybase", sybase_functions, PHP_MINIT(sybase), PHP_MSHUTDOWN(sybase), PHP_RINIT(sybase), PHP_RSHUTDOWN(sybase), PHP_MINFO(sybase), NO_VERSION_YET, STANDARD_MODULE_PROPERTIES
-};
-
-#ifdef COMPILE_DL_SYBASE
-ZEND_GET_MODULE(sybase)
-#endif
-
-THREAD_LS sybase_module php_sybase_module;
-
-
-#define CHECK_LINK(link) { if (link==-1) { php_error_docref(NULL TSRMLS_CC, E_WARNING, "Sybase: A link to the server could not be established"); RETURN_FALSE; } }
-
-
-static void php_sybase_get_column_content(sybase_link *sybase_ptr,int offset,pval **result_ptr, int column_type);
-
-/* error handler */
-static int php_sybase_error_handler(DBPROCESS *dbproc,int severity,int dberr,
- int oserr,char *dberrstr,char *oserrstr)
-{
- if (severity >= php_sybase_module.min_error_severity) {
- TSRMLS_FETCH();
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Sybase error: %s (severity %d)",dberrstr,severity);
- }
- return INT_CANCEL;
-}
-
-/* message handler */
-static int php_sybase_message_handler(DBPROCESS *dbproc,DBINT msgno,int msgstate,
- int severity,char *msgtext,char *srvname,
- char *procname,DBUSMALLINT line)
-{
- if (severity >= php_sybase_module.min_message_severity) {
- TSRMLS_FETCH();
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Sybase message: %s (severity %d)",msgtext,severity);
- }
- STR_FREE(php_sybase_module.server_message);
- php_sybase_module.server_message = estrdup(msgtext);
- return 0;
-}
-
-
-static int _clean_invalid_results(list_entry *le TSRMLS_DC)
-{
- if (Z_TYPE_P(le) == php_sybase_module.le_result) {
- sybase_link *sybase_ptr = ((sybase_result *) le->ptr)->sybase_ptr;
-
- if (!sybase_ptr->valid) {
- return 1;
- }
- }
- return 0;
-}
-
-
-static void _free_sybase_result(zend_rsrc_list_entry *rsrc TSRMLS_DC)
-{
- sybase_result *result = (sybase_result *)rsrc->ptr;
- int i,j;
-
- if (result->data) {
- for (i=0; i<result->num_rows; i++) {
- for (j=0; j<result->num_fields; j++) {
- zval_ptr_dtor(&result->data[i][j]);
- }
- efree(result->data[i]);
- }
- efree(result->data);
- }
-
- if (result->fields) {
- for (i=0; i<result->num_fields; i++) {
- STR_FREE(result->fields[i].name);
- STR_FREE(result->fields[i].column_source);
- }
- efree(result->fields);
- }
- efree(result);
-}
-
-
-static void _close_sybase_link(zend_rsrc_list_entry *rsrc TSRMLS_DC)
-{
- sybase_link *sybase_ptr = (sybase_link *)rsrc->ptr;
-
- sybase_ptr->valid = 0;
-
- /*
- this can cause crashes in the current model.
- if the resource gets destroyed via destroy_resource_list() resource_list
- will *not* be in a consistent state. thies@thieso.net
- */
-
- zend_hash_apply(&EG(regular_list), (apply_func_t) _clean_invalid_results TSRMLS_CC);
- dbclose(sybase_ptr->link);
- dbloginfree(sybase_ptr->login);
- efree(sybase_ptr);
- php_sybase_module.num_links--;
-}
-
-
-static void _close_sybase_plink(zend_rsrc_list_entry *rsrc TSRMLS_DC)
-{
- sybase_link *sybase_ptr = (sybase_link *)rsrc->ptr;
-
- dbclose(sybase_ptr->link);
- dbloginfree(sybase_ptr->login);
- free(sybase_ptr);
- php_sybase_module.num_persistent--;
- php_sybase_module.num_links--;
-}
-
-
-PHP_MINIT_FUNCTION(sybase)
-{
- char *interface_file;
-
- if (dbinit()==FAIL) {
- return FAILURE;
- }
- dberrhandle((EHANDLEFUNC) php_sybase_error_handler);
- dbmsghandle((MHANDLEFUNC) php_sybase_message_handler);
-
- if (cfg_get_string("sybase.interface_file",&interface_file)==SUCCESS) {
- dbsetifile(interface_file);
- }
- if (cfg_get_long("sybase.allow_persistent",&php_sybase_module.allow_persistent)==FAILURE) {
- php_sybase_module.allow_persistent=1;
- }
- if (cfg_get_long("sybase.max_persistent",&php_sybase_module.max_persistent)==FAILURE) {
- php_sybase_module.max_persistent=-1;
- }
- if (cfg_get_long("sybase.max_links",&php_sybase_module.max_links)==FAILURE) {
- php_sybase_module.max_links=-1;
- }
- if (cfg_get_long("sybase.min_error_severity",&php_sybase_module.cfg_min_error_severity)==FAILURE) {
- php_sybase_module.cfg_min_error_severity=10;
- }
- if (cfg_get_long("sybase.min_message_severity",&php_sybase_module.cfg_min_message_severity)==FAILURE) {
- php_sybase_module.cfg_min_message_severity=10;
- }
- if (cfg_get_long("sybase.compatability_mode",&php_sybase_module.compatability_mode)==FAILURE) {
- php_sybase_module.compatability_mode = 0;
- }
-
- php_sybase_module.num_persistent=0;
- php_sybase_module.le_link = zend_register_list_destructors_ex(_close_sybase_link, NULL, "sybase-db link", module_number);
- php_sybase_module.le_plink = zend_register_list_destructors_ex(NULL, _close_sybase_plink, "sybase-db link persistent", module_number);
- php_sybase_module.le_result = zend_register_list_destructors_ex(_free_sybase_result, NULL, "sybase-db result", module_number);
-
- return SUCCESS;
-}
-
-
-PHP_RINIT_FUNCTION(sybase)
-{
- php_sybase_module.default_link=-1;
- php_sybase_module.num_links = php_sybase_module.num_persistent;
- php_sybase_module.appname = estrndup("PHP " PHP_VERSION, sizeof("PHP " PHP_VERSION));
- php_sybase_module.server_message = STR_EMPTY_ALLOC();
- php_sybase_module.min_error_severity = php_sybase_module.cfg_min_error_severity;
- php_sybase_module.min_message_severity = php_sybase_module.cfg_min_message_severity;
- return SUCCESS;
-}
-
-PHP_MSHUTDOWN_FUNCTION(sybase)
-{
- dbexit();
- return SUCCESS;
-}
-
-PHP_RSHUTDOWN_FUNCTION(sybase)
-{
- efree(php_sybase_module.appname);
- php_sybase_module.appname = NULL;
- STR_FREE(php_sybase_module.server_message);
- php_sybase_module.server_message = NULL;
- return SUCCESS;
-}
-
-static void php_sybase_do_connect(INTERNAL_FUNCTION_PARAMETERS,int persistent)
-{
- char *user=NULL,*passwd=NULL,*host=NULL,*charset=NULL,*appname=NULL;
- char *hashed_details;
- int hashed_details_length;
- sybase_link sybase,*sybase_ptr;
-
- switch(ZEND_NUM_ARGS()) {
- case 0: /* defaults */
- hashed_details_length=6+3;
- hashed_details = (char *) emalloc(hashed_details_length+1);
- strcpy(hashed_details,"sybase___");
- break;
- case 1: {
- zval **yyhost;
-
- if (zend_get_parameters_ex(1, &yyhost) == FAILURE) {
- RETURN_FALSE;
- }
- convert_to_string_ex(yyhost);
- host = Z_STRVAL_PP(yyhost);
- hashed_details_length = Z_STRLEN_PP(yyhost)+6+5;
- hashed_details = (char *) emalloc(hashed_details_length+1);
- sprintf(hashed_details,"sybase_%s____", Z_STRVAL_PP(yyhost));
- }
- break;
- case 2: {
- zval **yyhost, **yyuser;
-
- if (zend_get_parameters_ex(2, &yyhost, &yyuser) == FAILURE) {
- RETURN_FALSE;
- }
- convert_to_string_ex(yyhost);
- convert_to_string_ex(yyuser);
- host = Z_STRVAL_PP(yyhost);
- user = Z_STRVAL_PP(yyuser);
- hashed_details_length = Z_STRLEN_PP(yyhost)+Z_STRLEN_PP(yyuser)+6+5;
- hashed_details = (char *) emalloc(hashed_details_length+1);
- sprintf(hashed_details,"sybase_%s_%s___",Z_STRVAL_PP(yyhost),Z_STRVAL_PP(yyuser));
- }
- break;
- case 3: {
- zval **yyhost, **yyuser,**yypasswd;
-
- if (zend_get_parameters_ex(3, &yyhost, &yyuser, &yypasswd) == FAILURE) {
- RETURN_FALSE;
- }
- convert_to_string_ex(yyhost);
- convert_to_string_ex(yyuser);
- convert_to_string_ex(yypasswd);
- host = Z_STRVAL_PP(yyhost);
- user = Z_STRVAL_PP(yyuser);
- passwd = Z_STRVAL_PP(yypasswd);
- hashed_details_length = Z_STRLEN_PP(yyhost)+Z_STRLEN_PP(yyuser)+Z_STRLEN_PP(yypasswd)+6+5;
- hashed_details = (char *) emalloc(hashed_details_length+1);
- sprintf(hashed_details,"sybase_%s_%s_%s__",Z_STRVAL_PP(yyhost),Z_STRVAL_PP(yyuser),Z_STRVAL_PP(yypasswd)); /* SAFE */
- }
- break;
- case 4: {
- zval **yyhost, **yyuser, **yypasswd, **yycharset;
-
- if (zend_get_parameters_ex(4, &yyhost, &yyuser, &yypasswd, &yycharset) == FAILURE) {
- RETURN_FALSE;
- }
- convert_to_string_ex(yyhost);
- convert_to_string_ex(yyuser);
- convert_to_string_ex(yypasswd);
- convert_to_string_ex(yycharset);
- host = Z_STRVAL_PP(yyhost);
- user = Z_STRVAL_PP(yyuser);
- passwd = Z_STRVAL_PP(yypasswd);
- charset = Z_STRVAL_PP(yycharset);
- hashed_details_length = Z_STRLEN_PP(yyhost)+Z_STRLEN_PP(yyuser)+Z_STRLEN_PP(yypasswd)+Z_STRLEN_PP(yycharset)+6+5;
- hashed_details = (char *) emalloc(hashed_details_length+1);
- sprintf(hashed_details,"sybase_%s_%s_%s_%s_",Z_STRVAL_PP(yyhost),Z_STRVAL_PP(yyuser),Z_STRVAL_PP(yypasswd),Z_STRVAL_PP(yycharset)); /* SAFE */
- }
- break;
- case 5: {
- zval **yyhost, **yyuser, **yypasswd, **yycharset, **yyappname;
-
- if (zend_get_parameters_ex(5, &yyhost, &yyuser, &yypasswd, &yycharset, &yyappname) == FAILURE) {
- RETURN_FALSE;
- }
- convert_to_string_ex(yyhost);
- convert_to_string_ex(yyuser);
- convert_to_string_ex(yypasswd);
- convert_to_string_ex(yycharset);
- convert_to_string_ex(yyappname);
- host = Z_STRVAL_PP(yyhost);
- user = Z_STRVAL_PP(yyuser);
- passwd = Z_STRVAL_PP(yypasswd);
- charset = Z_STRVAL_PP(yycharset);
- appname = Z_STRVAL_PP(yyappname);
- hashed_details_length = Z_STRLEN_PP(yyhost)+Z_STRLEN_PP(yyuser)+Z_STRLEN_PP(yypasswd)+Z_STRLEN_PP(yycharset)+Z_STRLEN_PP(yyappname)+6+5;
- hashed_details = (char *) emalloc(hashed_details_length+1);
- sprintf(hashed_details,"sybase_%s_%s_%s_%s_%s",Z_STRVAL_PP(yyhost),Z_STRVAL_PP(yyuser),Z_STRVAL_PP(yypasswd),Z_STRVAL_PP(yycharset),Z_STRVAL_PP(yyappname)); /* SAFE */
- }
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
-
-
- /* set a DBLOGIN record */
- if ((sybase.login=dblogin())==NULL) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING,"Sybase: Unable to allocate login record");
- goto err;
- }
-
- if (user) {
- DBSETLUSER(sybase.login,user);
- }
- if (passwd) {
- DBSETLPWD(sybase.login,passwd);
- }
- if (charset) {
- DBSETLCHARSET(sybase.login,charset);
- }
- if (appname) {
- DBSETLAPP(sybase.login,appname);
- } else {
- DBSETLAPP(sybase.login,php_sybase_module.appname);
- }
-
- sybase.valid = 1;
-
- if (!php_sybase_module.allow_persistent) {
- persistent=0;
- }
- if (persistent) {
- list_entry *le;
-
- /* try to find if we already have this link in our persistent list */
- if (zend_hash_find(&EG(persistent_list), hashed_details, hashed_details_length+1, (void **) &le)==FAILURE) { /* we don't */
- list_entry new_le;
-
- if (php_sybase_module.max_links!=-1 && php_sybase_module.num_links>=php_sybase_module.max_links) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING,"Sybase: Too many open links (%d)",php_sybase_module.num_links);
- goto err_login;
- }
- if (php_sybase_module.max_persistent!=-1 && php_sybase_module.num_persistent>=php_sybase_module.max_persistent) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING,"Sybase: Too many open persistent links (%d)",php_sybase_module.num_persistent);
- goto err_login;
- }
- /* create the link */
- if ((sybase.link=PHP_SYBASE_DBOPEN(sybase.login,host))==FAIL) {
- /*php_error_docref(NULL TSRMLS_CC, E_WARNING,"Sybase: Unable to connect to server: %s",sybase_error(sybase));*/
- goto err_login;
- }
-
- if (dbsetopt(sybase.link,DBBUFFER,"2",-1)==FAIL) {
- goto err_link;
- }
-
- /* hash it up */
- sybase_ptr = (sybase_link *) malloc(sizeof(sybase_link));
- memcpy(sybase_ptr,&sybase,sizeof(sybase_link));
- Z_TYPE(new_le) = php_sybase_module.le_plink;
- new_le.ptr = sybase_ptr;
- if (zend_hash_update(&EG(persistent_list), hashed_details, hashed_details_length+1, (void *) &new_le, sizeof(list_entry),NULL)==FAILURE) {
- free(sybase_ptr);
- goto err_link;
- }
- php_sybase_module.num_persistent++;
- php_sybase_module.num_links++;
- } else { /* we do */
- if (Z_TYPE_P(le) != php_sybase_module.le_plink) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING,"Sybase: Hashed persistent link is not a Sybase link!");
- goto err_login;
- }
-
- sybase_ptr = (sybase_link *) le->ptr;
- /* test that the link hasn't died */
- if (DBDEAD(sybase_ptr->link)==TRUE) {
- if ((sybase_ptr->link=PHP_SYBASE_DBOPEN(sybase_ptr->login,host))==FAIL) {
- /*php_error_docref(NULL TSRMLS_CC, E_WARNING,"Sybase: Link to server lost, unable to reconnect");*/
- zend_hash_del(&EG(persistent_list), hashed_details, hashed_details_length+1);
- goto err_login;
- }
- if (dbsetopt(sybase_ptr->link,DBBUFFER,"2",-1)==FAIL) {
- zend_hash_del(&EG(persistent_list), hashed_details, hashed_details_length+1);
- goto err_login;
- }
- }
- }
- Z_LVAL_P(return_value) = zend_list_insert(sybase_ptr,php_sybase_module.le_plink);
- Z_TYPE_P(return_value) = IS_LONG;
- } else { /* non persistent */
- list_entry *index_ptr,new_index_ptr;
-
- /* first we check the hash for the hashed_details key. if it exists,
- * it should point us to the right offset where the actual sybase link sits.
- * if it doesn't, open a new sybase link, add it to the resource list,
- * and add a pointer to it with hashed_details as the key.
- */
- if (zend_hash_find(&EG(regular_list),hashed_details,hashed_details_length+1,(void **) &index_ptr)==SUCCESS) {
- int type,link;
- void *ptr;
-
- if (Z_TYPE_P(index_ptr) != le_index_ptr) {
- goto err_login;
- }
- link = (int) index_ptr->ptr;
- ptr = zend_list_find(link,&type); /* check if the link is still there */
- if (ptr && (type==php_sybase_module.le_link || type==php_sybase_module.le_plink)) {
- Z_LVAL_P(return_value) = php_sybase_module.default_link = link;
- Z_TYPE_P(return_value) = IS_LONG;
- efree(hashed_details);
- dbloginfree(sybase.login);
- return;
- } else {
- zend_hash_del(&EG(regular_list),hashed_details,hashed_details_length+1);
- }
- }
- if (php_sybase_module.max_links!=-1 && php_sybase_module.num_links>=php_sybase_module.max_links) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING,"Sybase: Too many open links (%d)",php_sybase_module.num_links);
- goto err_login;
- }
-
- if ((sybase.link=PHP_SYBASE_DBOPEN(sybase.login,host))==NULL) {
- /*php_error_docref(NULL TSRMLS_CC, E_WARNING,"Sybase: Unable to connect to server: %s",sybase_error(sybase));*/
- goto err_login;
- }
-
- if (dbsetopt(sybase.link,DBBUFFER,"2",-1)==FAIL) {
- goto err_link;
- }
-
- /* add it to the list */
- sybase_ptr = (sybase_link *) emalloc(sizeof(sybase_link));
- memcpy(sybase_ptr,&sybase,sizeof(sybase_link));
- Z_LVAL_P(return_value) = zend_list_insert(sybase_ptr,php_sybase_module.le_link);
- Z_TYPE_P(return_value) = IS_LONG;
-
- /* add it to the hash */
- new_index_ptr.ptr = (void *) Z_LVAL_P(return_value);
- Z_TYPE(new_index_ptr) = le_index_ptr;
- if (zend_hash_update(&EG(regular_list),hashed_details,hashed_details_length+1,(void *) &new_index_ptr, sizeof(list_entry),NULL)==FAILURE) {
- goto err_link;
- }
- php_sybase_module.num_links++;
- }
- efree(hashed_details);
- php_sybase_module.default_link=Z_LVAL_P(return_value);
- return;
-
-err_link:
- dbclose(sybase.link);
-err_login:
- dbloginfree(sybase.login);
-err:
- efree(hashed_details);
- RETURN_FALSE;
-}
-
-
-static int php_sybase_get_default_link(INTERNAL_FUNCTION_PARAMETERS)
-{
- if (php_sybase_module.default_link==-1) { /* no link opened yet, implicitly open one */
- ht = 0;
- php_sybase_do_connect(INTERNAL_FUNCTION_PARAM_PASSTHRU,0);
- }
- return php_sybase_module.default_link;
-}
-
-
-/* {{{ proto int sybase_connect([string host [, string user [, string password [, string charset [, string appname]]]]])
- Open Sybase server connection */
-PHP_FUNCTION(sybase_connect)
-{
- php_sybase_do_connect(INTERNAL_FUNCTION_PARAM_PASSTHRU,0);
-}
-/* }}} */
-
-/* {{{ proto int sybase_pconnect([string host [, string user [, string password [, string charset [, string appname]]]]])
- Open persistent Sybase connection */
-PHP_FUNCTION(sybase_pconnect)
-{
- php_sybase_do_connect(INTERNAL_FUNCTION_PARAM_PASSTHRU,1);
-}
-/* }}} */
-
-/* {{{ proto bool sybase_close([int link_id])
- Close Sybase connection */
-PHP_FUNCTION(sybase_close)
-{
- zval **sybase_link_index;
- int id,type;
-
- switch (ZEND_NUM_ARGS()) {
- case 0:
- id = php_sybase_module.default_link;
- break;
- case 1:
- if (zend_get_parameters_ex(1, &sybase_link_index) == FAILURE) {
- RETURN_FALSE;
- }
- convert_to_long_ex(sybase_link_index);
- id = Z_LVAL_PP(sybase_link_index);
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
-
- zend_list_find(id,&type);
- if (type!=php_sybase_module.le_link && type!=php_sybase_module.le_plink) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING,"%d is not a Sybase link index",id);
- RETURN_FALSE;
- }
-
- zend_list_delete(id);
- RETURN_TRUE;
-}
-/* }}} */
-
-
-/* {{{ proto bool sybase_select_db(string database [, int link_id])
- Select Sybase database */
-PHP_FUNCTION(sybase_select_db)
-{
- zval **db, **sybase_link_index;
- int id,type;
- sybase_link *sybase_ptr;
-
- switch(ZEND_NUM_ARGS()) {
- case 1:
- if (zend_get_parameters_ex(1, &db) == FAILURE) {
- RETURN_FALSE;
- }
- id = php_sybase_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU);
- break;
- case 2:
- if (zend_get_parameters_ex(2, &db, &sybase_link_index) == FAILURE) {
- RETURN_FALSE;
- }
- convert_to_long_ex(sybase_link_index);
- id = Z_LVAL_PP(sybase_link_index);
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
-
- CHECK_LINK(id);
-
- sybase_ptr = (sybase_link *) zend_list_find(id,&type);
- if (type!=php_sybase_module.le_link && type!=php_sybase_module.le_plink) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING,"%d is not a Sybase link index",id);
- RETURN_FALSE;
- }
-
- convert_to_string_ex(db);
-
- if (dbuse(sybase_ptr->link,Z_STRVAL_PP(db))==FAIL) {
- /*php_error_docref(NULL TSRMLS_CC, E_WARNING,"Sybase: Unable to select database: %s",sybase_error(sybase));*/
- RETURN_FALSE;
- } else {
- RETURN_TRUE;
- }
-}
-/* }}} */
-
-
-static void php_sybase_get_column_content(sybase_link *sybase_ptr,int offset,pval **result_ptr, int column_type)
-{
- zval *result;
-
- ALLOC_INIT_ZVAL(result);
- *result_ptr = result;
-
- if (dbdatlen(sybase_ptr->link,offset) == 0) {
- ZVAL_FALSE(result);
- return;
- }
-
- switch (column_type)
- {
- case SYBINT2:
- case SYBINT4: {
- Z_LVAL_P(result) = (long) anyintcol(offset);
- Z_TYPE_P(result) = IS_LONG;
- break;
- }
- case SYBCHAR:
- case SYBTEXT: {
- int length;
- char *data = charcol(offset);
-
- length=dbdatlen(sybase_ptr->link,offset);
- while (length>0 && charcol(offset)[length-1] == ' ') { /* nuke trailing whitespace */
- length--;
- }
- Z_STRVAL_P(result) = estrndup(data,length);
- Z_STRLEN_P(result) = length;
- Z_TYPE_P(result) = IS_STRING;
- break;
- }
- /*case SYBFLT8:*/
- case SYBREAL: {
- Z_DVAL_P(result) = (double) floatcol(offset);
- Z_TYPE_P(result) = IS_DOUBLE;
- break;
- }
- default: {
- if (dbwillconvert(coltype(offset),SYBCHAR)) {
- char *res_buf;
- int res_length = dbdatlen(sybase_ptr->link,offset);
- int src_length = res_length;
- register char *p;
-
- switch (coltype(offset)) {
- case SYBBINARY:
- case SYBVARBINARY:
- case SYBIMAGE:
- res_length *= 2;
- break;
- case SYBCHAR:
- case SYBVARCHAR:
- case SYBTEXT:
- break;
- default:
- /* take no chances, no telling how big the result would really be */
- res_length += 20;
- break;
- }
-
- res_buf = (char *) emalloc(res_length+1);
- memset(res_buf,' ',res_length+1); /* XXX i'm sure there's a better way
- but i don't have sybase here to test
- 991105 thies@thieso.net */
- dbconvert(NULL,coltype(offset),dbdata(sybase_ptr->link,offset), src_length,SYBCHAR,res_buf,res_length);
-#if ilia_0
- /* get rid of trailing spaces */
- p = res_buf + res_length;
- while (p >= res_buf && (*p == ' ' || *p == '\0')) {
- p--;
- }
- *(++p) = 0; /* put a trailing NULL */
- res_length = p - res_buf;
-#endif
- Z_STRLEN_P(result) = res_length;
- Z_STRVAL_P(result) = res_buf;
- Z_TYPE_P(result) = IS_STRING;
- } else {
- TSRMLS_FETCH();
- php_error_docref(NULL TSRMLS_CC, E_WARNING,"Sybase: column %d has unknown data type (%d)", offset, coltype(offset));
- ZVAL_FALSE(result);
- }
- }
- }
-}
-
-
-/* {{{ proto int sybase_query(string query [, int link_id])
- Send Sybase query */
-PHP_FUNCTION(sybase_query)
-{
- zval **query, **sybase_link_index;
- int id,type,retvalue;
- sybase_link *sybase_ptr;
- sybase_result *result;
- int num_fields;
- int blocks_initialized=1;
- int i,j;
- int *column_types;
- RETCODE dbresults_retval;
-
- switch(ZEND_NUM_ARGS()) {
- case 1:
- if (zend_get_parameters_ex(1, &query) == FAILURE) {
- RETURN_FALSE;
- }
- id = php_sybase_module.default_link;
- break;
- case 2:
- if (zend_get_parameters_ex(2, &query, &sybase_link_index) == FAILURE) {
- RETURN_FALSE;
- }
- convert_to_long_ex(sybase_link_index);
- id = Z_LVAL_PP(sybase_link_index);
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
-
- sybase_ptr = (sybase_link *) zend_list_find(id,&type);
- if (type!=php_sybase_module.le_link && type!=php_sybase_module.le_plink) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING,"%d is not a Sybase link index",id);
- RETURN_FALSE;
- }
-
- convert_to_string_ex(query);
- if (dbcmd(sybase_ptr->link,Z_STRVAL_PP(query))==FAIL) {
- /*php_error_docref(NULL TSRMLS_CC, E_WARNING,"Sybase: Unable to set query");*/
- RETURN_FALSE;
- }
-
- if (dbsqlexec(sybase_ptr->link)==FAIL) {
- /*php_error(E_WARNING,"Sybase: Query failed");*/
- RETURN_FALSE;
- }
-
- dbresults_retval = dbresults(sybase_ptr->link);
- if (dbresults_retval==FAIL) {
- /*php_error_docref(NULL TSRMLS_CC, E_WARNING,"Sybase: Query failed");*/
- RETURN_FALSE;
- }
-
- /* The following is more or less the equivalent of mysql_store_result().
- * fetch all rows from the server into the row buffer, thus:
- * 1) Being able to fire up another query without explicitly reading all rows
- * 2) Having numrows accessible
- */
-
- retvalue=dbnextrow(sybase_ptr->link);
-
- if (retvalue==FAIL) {
- RETURN_FALSE;
- }
-
- num_fields = dbnumcols(sybase_ptr->link);
- if (num_fields<=0) {
- RETURN_TRUE;
- }
-
- column_types = (int *) safe_emalloc(sizeof(int), num_fields, 0);
- for (i=0; i<num_fields; i++) {
- column_types[i] = coltype(i+1);
- }
-
- result = (sybase_result *) emalloc(sizeof(sybase_result));
- result->data = (pval ***) safe_emalloc(sizeof(pval **), SYBASE_ROWS_BLOCK, 0);
- result->sybase_ptr = sybase_ptr;
- result->cur_field=result->cur_row=result->num_rows=0;
- result->num_fields = num_fields;
-
- i=0;
- while (retvalue!=FAIL && retvalue!=NO_MORE_ROWS) {
- result->num_rows++;
- if (result->num_rows > blocks_initialized*SYBASE_ROWS_BLOCK) {
- result->data = (pval ***) erealloc(result->data,sizeof(pval **)*SYBASE_ROWS_BLOCK*(++blocks_initialized));
- }
- result->data[i] = (pval **) safe_emalloc(sizeof(pval *), num_fields, 0);
- for (j=1; j<=num_fields; j++) {
- php_sybase_get_column_content(sybase_ptr, j, &result->data[i][j-1], column_types[j-1]);
- if (!php_sybase_module.compatability_mode) {
- zval *cur_value = result->data[i][j-1];
-
- convert_to_string(cur_value);
- if (PG(magic_quotes_runtime)) {
- Z_STRVAL_P(cur_value) = php_addslashes(Z_STRVAL_P(cur_value), Z_STRLEN_P(cur_value), &Z_STRLEN_P(cur_value),0 TSRMLS_CC);
- }
- }
- }
- retvalue=dbnextrow(sybase_ptr->link);
- dbclrbuf(sybase_ptr->link,DBLASTROW(sybase_ptr->link)-1);
- i++;
- }
- result->num_rows = DBCOUNT(sybase_ptr->link);
-
- result->fields = (sybase_field *) safe_emalloc(sizeof(sybase_field), num_fields, 0);
- j=0;
- for (i=0; i<num_fields; i++) {
- char *fname = dbcolname(sybase_ptr->link,i+1);
- char computed_buf[16];
-
- if (*fname) {
- result->fields[i].name = estrdup(fname);
- } else {
- if (j>0) {
- snprintf(computed_buf,16,"computed%d",j);
- } else {
- strcpy(computed_buf,"computed");
- }
- result->fields[i].name = estrdup(computed_buf);
- j++;
- }
- result->fields[i].max_length = dbcollen(sybase_ptr->link,i+1);
- result->fields[i].column_source = estrdup(dbcolsource(sybase_ptr->link,i+1));
- if (!result->fields[i].column_source) {
- result->fields[i].column_source = STR_EMPTY_ALLOC();
- }
- Z_TYPE(result->fields[i]) = column_types[i];
- /* set numeric flag */
- switch (column_types[i]) {
- case SYBINT2:
- case SYBINT4:
- case SYBFLT8:
- case SYBREAL:
- result->fields[i].numeric = 1;
- break;
- case SYBCHAR:
- case SYBTEXT:
- default:
- result->fields[i].numeric = 0;
- break;
- }
- }
- efree(column_types);
- Z_LVAL_P(return_value) = zend_list_insert(result,php_sybase_module.le_result);
- Z_TYPE_P(return_value) = IS_LONG;
-
- /**
- * mgruetzner@rw3.com -- 3-6/2003
- *
- * If you do a query that calls a stored procedure which returns
- * data AND calls raiserror to generated a user-defined error message,
- * then after retrieving the first set of results above, the call
- * to dbresults will have returned SUCCESS, instead of NO_MORE_RESULTS
- * which indicates that the message generated by raiserror is still
- * waiting to be read. If this is the case, then call dbresults
- * again to force the reading of the message. This will ensure the
- * get_last_message call will return the message properly if called
- * after mssql_query, like it should.
- *
- * One thing to note, we are assuming that no more data should follow
- * in this case--only the message will be read. To make sure, I have
- * added a call to dbnextrow. The assumption is that it will return
- * NO_MORE_ROWS in this case. If the assumption is false, generate
- * a PHP error so we can debug this case.
- *
- */
- if (dbresults_retval != NO_MORE_RESULTS) {
- /* Call dbresults again to read message */
- dbresults_retval = dbresults(sybase_ptr->link);
-
- /* Check assumption that dbnextrow returns NO_MORE_ROWS */
- retvalue = dbnextrow(sybase_ptr->link);
- if (retvalue != NO_MORE_ROWS) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING,"Expected dbnextrow() to return NO_MORE_ROWS.");
- }
- }
-}
-/* }}} */
-
-
-/* {{{ proto bool sybase_free_result(int result)
- Free result memory */
-PHP_FUNCTION(sybase_free_result)
-{
- zval **sybase_result_index;
- sybase_result *result;
- int type;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &sybase_result_index) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long_ex(sybase_result_index);
- if (Z_LVAL_PP(sybase_result_index)==0) {
- RETURN_FALSE;
- }
- result = (sybase_result *) zend_list_find(Z_LVAL_PP(sybase_result_index),&type);
-
- if (type!=php_sybase_module.le_result) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "%ld is not a Sybase result index", Z_LVAL_PP(sybase_result_index));
- RETURN_FALSE;
- }
- zend_list_delete(Z_LVAL_PP(sybase_result_index));
- RETURN_TRUE;
-}
-/* }}} */
-
-
-
-/* {{{ proto string sybase_get_last_message(void)
- Returns the last message from server (over min_message_severity) */
-PHP_FUNCTION(sybase_get_last_message)
-{
- RETURN_STRING(php_sybase_module.server_message,1);
-}
-/* }}} */
-
-/* {{{ proto int sybase_num_rows(int result)
- Get number of rows in result */
-PHP_FUNCTION(sybase_num_rows)
-{
- zval **result_index;
- int type,id;
- sybase_result *result;
-
- if (ZEND_NUM_ARGS() !=1 || zend_get_parameters_ex(1, &result_index) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long_ex(result_index);
- id = Z_LVAL_PP(result_index);
-
- result = (sybase_result *) zend_list_find(id,&type);
- if (type!=php_sybase_module.le_result) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING,"%d is not a Sybase result index",id);
- RETURN_FALSE;
- }
-
- Z_LVAL_P(return_value) = result->num_rows;
- Z_TYPE_P(return_value) = IS_LONG;
-}
-/* }}} */
-
-/* {{{ proto int sybase_num_fields(int result)
- Get number of fields in result */
-PHP_FUNCTION(sybase_num_fields)
-{
- zval **result_index;
- int type,id;
- sybase_result *result;
-
- if (ZEND_NUM_ARGS() !=1 || zend_get_parameters_ex(1, &result_index) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long_ex(result_index);
- id = Z_LVAL_PP(result_index);
-
- result = (sybase_result *) zend_list_find(id,&type);
- if (type!=php_sybase_module.le_result) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING,"%d is not a Sybase result index",id);
- RETURN_FALSE;
- }
-
- Z_LVAL_P(return_value) = result->num_fields;
- Z_TYPE_P(return_value) = IS_LONG;
-}
-/* }}} */
-
-/* {{{ proto array sybase_fetch_row(int result)
- Get row as enumerated array */
-PHP_FUNCTION(sybase_fetch_row)
-{
- zval **sybase_result_index;
- int type,i,id;
- sybase_result *result;
- pval *field_content;
-
- if (ZEND_NUM_ARGS() !=1 || zend_get_parameters_ex(1, &sybase_result_index)==FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long_ex(sybase_result_index);
- id = Z_LVAL_PP(sybase_result_index);
-
- result = (sybase_result *) zend_list_find(id,&type);
- if (type!=php_sybase_module.le_result) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING,"%d is not a Sybase result index",id);
- RETURN_FALSE;
- }
-
- if (result->cur_row >= result->num_rows) {
- RETURN_FALSE;
- }
-
- array_init(return_value);
- for (i=0; i<result->num_fields; i++) {
- ZVAL_ADDREF(result->data[result->cur_row][i]);
- zend_hash_index_update(Z_ARRVAL_P(return_value), i, (void *) &result->data[result->cur_row][i], sizeof(pval *), NULL);
- }
- result->cur_row++;
-}
-/* }}} */
-
-
-static void php_sybase_fetch_hash(INTERNAL_FUNCTION_PARAMETERS)
-{
- zval **sybase_result_index;
- sybase_result *result;
- int type;
- int i;
-
- if (ZEND_NUM_ARGS() !=1 || zend_get_parameters_ex(1, &sybase_result_index) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long_ex(sybase_result_index);
- result = (sybase_result *) zend_list_find(Z_LVAL_PP(sybase_result_index),&type);
-
- if (type!=php_sybase_module.le_result) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "%ld is not a Sybase result index", Z_LVAL_PP(sybase_result_index));
- RETURN_FALSE;
- }
-
- if (result->cur_row >= result->num_rows) {
- RETURN_FALSE;
- }
-
- array_init(return_value);
-
- for (i=0; i<result->num_fields; i++) {
- ZVAL_ADDREF(result->data[result->cur_row][i]);
- zend_hash_index_update(Z_ARRVAL_P(return_value), i, (void *) &result->data[result->cur_row][i], sizeof(pval *), NULL);
- ZVAL_ADDREF(result->data[result->cur_row][i]);
- zend_hash_update(Z_ARRVAL_P(return_value), result->fields[i].name, strlen(result->fields[i].name)+1, (void *) &result->data[result->cur_row][i], sizeof(pval *), NULL);
- }
- result->cur_row++;
-}
-
-
-/* {{{ proto object sybase_fetch_object(int result)
- Fetch row as object */
-PHP_FUNCTION(sybase_fetch_object)
-{
- php_sybase_fetch_hash(INTERNAL_FUNCTION_PARAM_PASSTHRU);
- if (Z_TYPE_P(return_value)==IS_ARRAY) {
- Z_TYPE_P(return_value)=IS_OBJECT;
- Z_OBJPROP_P(return_value) = Z_ARRVAL_P(return_value);
- Z_OBJCE_P(return_value) = ZEND_STANDARD_CLASS_DEF_PTR;
- }
-}
-/* }}} */
-
-/* {{{ proto array sybase_fetch_array(int result)
- Fetch row as array */
-PHP_FUNCTION(sybase_fetch_array)
-{
- php_sybase_fetch_hash(INTERNAL_FUNCTION_PARAM_PASSTHRU);
-}
-/* }}} */
-
-/* {{{ proto bool sybase_data_seek(int result, int offset)
- Move internal row pointer */
-PHP_FUNCTION(sybase_data_seek)
-{
- zval **sybase_result_index, **offset;
- int type,id;
- sybase_result *result;
-
- if (ZEND_NUM_ARGS()!=2 || zend_get_parameters_ex(2, &sybase_result_index, &offset) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long_ex(sybase_result_index);
- id = Z_LVAL_PP(sybase_result_index);
-
- result = (sybase_result *) zend_list_find(id,&type);
- if (type!=php_sybase_module.le_result) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING,"%d is not a Sybase result index",id);
- RETURN_FALSE;
- }
-
- convert_to_long_ex(offset);
- if (Z_LVAL_PP(offset)<0 || Z_LVAL_PP(offset)>=result->num_rows) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING,"Sybase: Bad row offset");
- RETURN_FALSE;
- }
-
- result->cur_row = Z_LVAL_PP(offset);
- RETURN_TRUE;
-}
-/* }}} */
-
-static char *php_sybase_get_field_name(int type)
-{
- switch (type) {
- case SYBBINARY:
- case SYBVARBINARY:
- return "blob";
- break;
- case SYBCHAR:
- case SYBVARCHAR:
- case SYBTEXT:
- return "string";
- case SYBDATETIME:
- case SYBDATETIME4:
- case SYBDATETIMN:
- return "datetime";
- break;
- case SYBDECIMAL:
- case SYBFLT8:
- case SYBFLTN:
- case SYBREAL:
- case SYBNUMERIC:
- return "real";
- break;
- case SYBINT1:
- case SYBINT2:
- case SYBINT4:
- case SYBINTN:
- return "int";
- break;
- case SYBMONEY:
- case SYBMONEY4:
- case SYBMONEYN:
- return "money";
- break;
- case SYBBIT:
- return "bit";
- break;
- case SYBIMAGE:
- return "image";
- break;
- default:
- return "unknown";
- break;
- }
-}
-
-
-/* {{{ proto object sybase_fetch_field(int result [, int offset])
- Get field information */
-PHP_FUNCTION(sybase_fetch_field)
-{
- zval **sybase_result_index, **offset;
- int type,id,field_offset;
- sybase_result *result;
-
- switch (ZEND_NUM_ARGS()) {
- case 1:
- if (zend_get_parameters_ex(1, &sybase_result_index) == FAILURE) {
- RETURN_FALSE;
- }
- field_offset=-1;
- break;
- case 2:
- if (zend_get_parameters_ex(2, &sybase_result_index, &offset) == FAILURE) {
- RETURN_FALSE;
- }
- convert_to_long_ex(offset);
- field_offset = Z_LVAL_PP(offset);
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
-
- convert_to_long_ex(sybase_result_index);
- id = Z_LVAL_PP(sybase_result_index);
-
- result = (sybase_result *) zend_list_find(id,&type);
- if (type!=php_sybase_module.le_result) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING,"%d is not a Sybase result index",id);
- RETURN_FALSE;
- }
-
- if (field_offset==-1) {
- field_offset = result->cur_field;
- result->cur_field++;
- }
-
- if (field_offset<0 || field_offset >= result->num_fields) {
- if (ZEND_NUM_ARGS()==2) { /* field specified explicitly */
- php_error_docref(NULL TSRMLS_CC, E_WARNING,"Sybase: Bad column offset");
- }
- RETURN_FALSE;
- }
-
- object_init(return_value);
-
- add_property_string(return_value, "name",result->fields[field_offset].name, 1);
- add_property_long(return_value, "max_length",result->fields[field_offset].max_length);
- add_property_string(return_value, "column_source",result->fields[field_offset].column_source, 1);
- add_property_long(return_value, "numeric", result->fields[field_offset].numeric);
- add_property_string(return_value, "type", php_sybase_get_field_name(Z_TYPE(result->fields[field_offset])), 1);
-}
-/* }}} */
-
-/* {{{ proto bool sybase_field_seek(int result, int offset)
- Set field offset */
-PHP_FUNCTION(sybase_field_seek)
-{
- zval **sybase_result_index, **offset;
- int type,id,field_offset;
- sybase_result *result;
-
- if (ZEND_NUM_ARGS() !=2 || zend_get_parameters_ex(2, &sybase_result_index, &offset) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long_ex(sybase_result_index);
- id = Z_LVAL_PP(sybase_result_index);
-
- result = (sybase_result *) zend_list_find(id,&type);
- if (type!=php_sybase_module.le_result) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING,"%d is not a Sybase result index",id);
- RETURN_FALSE;
- }
-
- convert_to_long_ex(offset);
- field_offset = Z_LVAL_PP(offset);
-
- if (field_offset<0 || field_offset >= result->num_fields) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING,"Sybase: Bad column offset");
- RETURN_FALSE;
- }
-
- result->cur_field = field_offset;
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto string sybase_result(int result, int row, mixed field)
- Get result data */
-PHP_FUNCTION(sybase_result)
-{
- zval **row, **field, **sybase_result_index;
- int id,type,field_offset=0;
- sybase_result *result;
-
-
- if (ZEND_NUM_ARGS() !=3 || zend_get_parameters_ex(3, &sybase_result_index, &row, &field) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long_ex(sybase_result_index);
- id = Z_LVAL_PP(sybase_result_index);
-
- result = (sybase_result *) zend_list_find(id,&type);
- if (type!=php_sybase_module.le_result) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING,"%d is not a Sybase result index",id);
- RETURN_FALSE;
- }
-
- convert_to_long_ex(row);
- if (Z_LVAL_PP(row)<0 || Z_LVAL_PP(row)>=result->num_rows) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING,"Sybase: Bad row offset (%ld)", Z_LVAL_PP(row));
- RETURN_FALSE;
- }
-
- switch(Z_TYPE_PP(field)) {
- case IS_STRING: {
- int i;
-
- for (i=0; i<result->num_fields; i++) {
- if (!strcasecmp(result->fields[i].name,Z_STRVAL_PP(field))) {
- field_offset = i;
- break;
- }
- }
- if (i>=result->num_fields) { /* no match found */
- php_error_docref(NULL TSRMLS_CC, E_WARNING,"Sybase: %s field not found in result",Z_STRVAL_PP(field));
- RETURN_FALSE;
- }
- break;
- }
- default:
- convert_to_long_ex(field);
- field_offset = Z_LVAL_PP(field);
- if (field_offset<0 || field_offset>=result->num_fields) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING,"Sybase: Bad column offset specified");
- RETURN_FALSE;
- }
- break;
- }
-
- *return_value = *result->data[Z_LVAL_PP(row)][field_offset];
- pval_copy_constructor(return_value);
-}
-/* }}} */
-
-
-/* {{{ proto int sybase_affected_rows([int link_id])
- Get number of affected rows in last query */
-PHP_FUNCTION(sybase_affected_rows)
-{
- zval **sybase_link_index = NULL;
- sybase_link *sybase_ptr = NULL;
- int id = 0;
- int type = 0;
-
- switch(ZEND_NUM_ARGS()) {
- case 0:
- id = php_sybase_module.default_link;
- break;
- case 1:
- if (zend_get_parameters_ex(1, &sybase_link_index) == FAILURE) {
- RETURN_FALSE;
- }
- convert_to_long_ex(sybase_link_index);
- id = Z_LVAL_PP(sybase_link_index);
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
-
- sybase_ptr = (sybase_link *)zend_list_find(id, &type);
-
- if(type != php_sybase_module.le_link && type != php_sybase_module.le_plink) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING,"%d is not a Sybase link index",id);
- RETURN_FALSE;
- }
-
- Z_LVAL_P(return_value) = DBCOUNT(sybase_ptr->link);
- Z_TYPE_P(return_value) = IS_LONG;
-}
-
-
-PHP_MINFO_FUNCTION(sybase)
-{
- char maxp[32], maxl[32];
-
- if (php_sybase_module.max_persistent==-1) {
- snprintf(maxp, 31, "%ld/unlimited", php_sybase_module.num_persistent );
- } else {
- snprintf(maxp, 31, "%ld/%ld", php_sybase_module.num_persistent, php_sybase_module.max_persistent);
- }
- maxp[31]=0;
-
- if (php_sybase_module.max_links==-1) {
- snprintf(maxl, 31, "%ld/unlimited", php_sybase_module.num_links );
- } else {
- snprintf(maxl, 31, "%ld/%ld", php_sybase_module.num_links, php_sybase_module.max_links);
- }
- maxl[31]=0;
-
- php_info_print_table_start();
- php_info_print_table_row(2, "Sybase Support", "enabled");
- php_info_print_table_row(2, "Allow Persistent Links", (php_sybase_module.allow_persistent?"Yes":"No") );
- php_info_print_table_row(2, "Persistent Links", maxp);
- php_info_print_table_row(2, "Total Links", maxl);
- php_info_print_table_row(2, "Application Name", php_sybase_module.appname );
- php_info_print_table_row(2, "Client API Version", dbversion() );
- php_info_print_table_end();
-
-}
-
-
-/* {{{ proto void sybase_min_error_severity(int severity)
- Sets the minimum error severity */
-PHP_FUNCTION(sybase_min_error_severity)
-{
- zval **severity;
-
- if (ZEND_NUM_ARGS() !=1 || zend_get_parameters_ex(1, &severity) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long_ex(severity);
- php_sybase_module.min_error_severity = Z_LVAL_PP(severity);
-}
-/* }}} */
-
-/* {{{ proto void sybase_min_message_severity(int severity)
- Sets the minimum message severity */
-PHP_FUNCTION(sybase_min_message_severity)
-{
- zval **severity;
-
- if (ZEND_NUM_ARGS() !=1 || zend_get_parameters_ex(1, &severity) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long_ex(severity);
- php_sybase_module.min_message_severity = Z_LVAL_PP(severity);
-}
-/* }}} */
-
-#endif
diff --git a/ext/sybase/php_sybase_db.h b/ext/sybase/php_sybase_db.h
deleted file mode 100644
index 0166269888..0000000000
--- a/ext/sybase/php_sybase_db.h
+++ /dev/null
@@ -1,89 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Zeev Suraski <zeev@zend.com> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifndef PHP_SYBASE_DB_H
-#define PHP_SYBASE_DB_H
-
-#if HAVE_SYBASE
-
-extern zend_module_entry sybase_module_entry;
-#define sybase_module_ptr &sybase_module_entry
-
-PHP_MINIT_FUNCTION(sybase);
-PHP_RINIT_FUNCTION(sybase);
-PHP_MSHUTDOWN_FUNCTION(sybase);
-PHP_RSHUTDOWN_FUNCTION(sybase);
-PHP_MINFO_FUNCTION(sybase);
-PHP_FUNCTION(sybase_connect);
-PHP_FUNCTION(sybase_pconnect);
-PHP_FUNCTION(sybase_close);
-PHP_FUNCTION(sybase_select_db);
-PHP_FUNCTION(sybase_query);
-PHP_FUNCTION(sybase_free_result);
-PHP_FUNCTION(sybase_get_last_message);
-PHP_FUNCTION(sybase_num_rows);
-PHP_FUNCTION(sybase_num_fields);
-PHP_FUNCTION(sybase_fetch_row);
-PHP_FUNCTION(sybase_fetch_array);
-PHP_FUNCTION(sybase_fetch_object);
-PHP_FUNCTION(sybase_data_seek);
-PHP_FUNCTION(sybase_affected_rows);
-PHP_FUNCTION(sybase_result);
-PHP_FUNCTION(sybase_field_seek);
-PHP_FUNCTION(sybase_min_error_severity);
-PHP_FUNCTION(sybase_min_message_severity);
-
-PHP_FUNCTION(sybase_db_query);
-PHP_FUNCTION(sybase_list_fields);
-PHP_FUNCTION(sybase_fetch_lengths);
-PHP_FUNCTION(sybase_fetch_field);
-PHP_FUNCTION(sybase_field_seek);
-PHP_FUNCTION(sybase_free_result);
-PHP_FUNCTION(sybase_field_name);
-PHP_FUNCTION(sybase_field_table);
-PHP_FUNCTION(sybase_field_len);
-PHP_FUNCTION(sybase_field_type);
-PHP_FUNCTION(sybase_field_flags);
-
-
-typedef struct {
- long default_link;
- long num_links,num_persistent;
- long max_links,max_persistent;
- long allow_persistent;
- char *appname;
- char *server_message;
- int le_link,le_plink,le_result;
- long min_error_severity,min_message_severity;
- long cfg_min_error_severity,cfg_min_message_severity;
- long compatability_mode;
-} sybase_module;
-
-extern sybase_module php_sybase_module;
-
-#else
-
-#define sybase_module_ptr NULL
-
-#endif
-
-#define phpext_sybase_ptr sybase_module_ptr
-
-#endif /* PHP_SYBASE_DB_H */
diff --git a/ext/sybase_ct/CREDITS b/ext/sybase_ct/CREDITS
deleted file mode 100644
index f739a533c4..0000000000
--- a/ext/sybase_ct/CREDITS
+++ /dev/null
@@ -1,2 +0,0 @@
-Sybase-CT
-Zeev Suraski, Tom May, Timm Friebe
diff --git a/ext/sybase_ct/config.m4 b/ext/sybase_ct/config.m4
deleted file mode 100644
index d4ed5f70ac..0000000000
--- a/ext/sybase_ct/config.m4
+++ /dev/null
@@ -1,56 +0,0 @@
-dnl
-dnl $Id$
-dnl
-
-PHP_ARG_WITH(sybase-ct, for Sybase-CT support,
-[ --with-sybase-ct[=DIR] Include Sybase-CT support. DIR is the Sybase home
- directory. Defaults to /home/sybase.])
-
-if test "$PHP_SYBASE_CT" != "no"; then
-
- if test "$PHP_SYBASE" != "no" && test "$ext_shared" = "no"; then
- AC_MSG_ERROR([You can not use both --with-sybase and --with-sybase-ct in same build!])
- fi
-
- AC_DEFINE(HAVE_SYBASE_CT,1,[ ])
- PHP_NEW_EXTENSION(sybase_ct, php_sybase_ct.c, $ext_shared)
- PHP_SUBST(SYBASE_CT_SHARED_LIBADD)
-
- if test "$PHP_SYBASE_CT" = "yes"; then
- SYBASE_CT_INCDIR=/home/sybase/include
- SYBASE_CT_LIBDIR=/home/sybase/lib
- else
- SYBASE_CT_INCDIR=$PHP_SYBASE_CT/include
- SYBASE_CT_LIBDIR=$PHP_SYBASE_CT/lib
- fi
-
- if test -f $SYBASE_CT_INCDIR/ctpublic.h; then
- PHP_ADD_INCLUDE($SYBASE_CT_INCDIR)
- else
- AC_MSG_ERROR([ctpublic.h missing!])
- fi
-
- PHP_ADD_LIBPATH($SYBASE_CT_LIBDIR, SYBASE_CT_SHARED_LIBADD)
- if test -f $SYBASE_CT_INCDIR/tds.h; then
- PHP_ADD_LIBRARY(ct,, SYBASE_CT_SHARED_LIBADD)
- SYBASE_CT_LIBS="-L$SYBASE_CT_LIBDIR -lct"
- else
- PHP_ADD_LIBRARY(cs,, SYBASE_CT_SHARED_LIBADD)
- PHP_ADD_LIBRARY(ct,, SYBASE_CT_SHARED_LIBADD)
- PHP_ADD_LIBRARY(comn,, SYBASE_CT_SHARED_LIBADD)
- PHP_ADD_LIBRARY(intl,, SYBASE_CT_SHARED_LIBADD)
-
- SYBASE_CT_LIBS="-L$SYBASE_CT_LIBDIR -lcs -lct -lcomn -lintl"
-
- PHP_CHECK_LIBRARY(tcl, netg_errstr, [
- PHP_ADD_LIBRARY(tcl,,SYBASE_CT_SHARED_LIBADD)
- ],[
- PHP_ADD_LIBRARY(sybtcl,,SYBASE_CT_SHARED_LIBADD)
- ],[
- $SYBASE_CT_LIBS
- ])
-
- PHP_CHECK_LIBRARY(insck, insck__getVdate, [PHP_ADD_LIBRARY(insck,, SYBASE_CT_SHARED_LIBADD)],[],[-L$SYBASE_CT_LIBDIR])
- PHP_CHECK_LIBRARY(insck, bsd_tcp, [PHP_ADD_LIBRARY(insck,, SYBASE_CT_SHARED_LIBADD)],[],[-L$SYBASE_CT_LIBDIR])
- fi
-fi
diff --git a/ext/sybase_ct/config.w32 b/ext/sybase_ct/config.w32
deleted file mode 100644
index bf56bd1402..0000000000
--- a/ext/sybase_ct/config.w32
+++ /dev/null
@@ -1,18 +0,0 @@
-
-// $Id$
-// vim:ft=javascript
-
-ARG_WITH("sybase-ct", "SYBASE_CT support", "no");
-
-if (PHP_SYBASE_CT != "no") {
-
- if (CHECK_HEADER_ADD_INCLUDE("ctpublic.h", "CFLAGS_SYBASE_CT", PHP_PHP_BUILD + "\\sybase\\include;" + PHP_SYBASE_CT) &&
- CHECK_LIB("libcs.lib", "sybase_ct", PHP_PHP_BUILD + "\\sybase\\lib;" + PHP_SYBASE_CT) &&
- CHECK_LIB("libct.lib", "sybase_ct", PHP_PHP_BUILD + "\\sybase\\lib;" + PHP_SYBASE_CT)) {
- EXTENSION('sybase_ct', 'php_sybase_ct.c');
- AC_DEFINE('HAVE_SYBASE_CT', 1);
- } else {
- WARNING("sybase_ct not enabled; libraries and headers not found");
- }
-}
-
diff --git a/ext/sybase_ct/php_sybase_ct.c b/ext/sybase_ct/php_sybase_ct.c
deleted file mode 100644
index e49a4a7856..0000000000
--- a/ext/sybase_ct/php_sybase_ct.c
+++ /dev/null
@@ -1,2250 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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. |
- +----------------------------------------------------------------------+
- | Authors: Zeev Suraski <zeev@zend.com> |
- | Tom May <tom@go2net.com> |
- | Timm Friebe <php_sybase_ct@thekid.de> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "php.h"
-#include "php_sybase_ct.h"
-#include "ext/standard/php_standard.h"
-#include "ext/standard/info.h"
-#include "php_globals.h"
-#include "php_ini.h"
-
-/* True globals, no need for thread safety */
-static int le_link, le_plink, le_result;
-
-#if HAVE_SYBASE_CT
-
-function_entry sybase_functions[] = {
- PHP_FE(sybase_connect, NULL)
- PHP_FE(sybase_pconnect, NULL)
- PHP_FE(sybase_close, NULL)
- PHP_FE(sybase_select_db, NULL)
- PHP_FE(sybase_query, NULL)
- PHP_FE(sybase_unbuffered_query, NULL)
- PHP_FE(sybase_free_result, NULL)
- PHP_FE(sybase_get_last_message, NULL)
- PHP_FE(sybase_num_rows, NULL)
- PHP_FE(sybase_num_fields, NULL)
- PHP_FE(sybase_fetch_row, NULL)
- PHP_FE(sybase_fetch_array, NULL)
- PHP_FE(sybase_fetch_assoc, NULL)
- PHP_FE(sybase_fetch_object, NULL)
- PHP_FE(sybase_data_seek, NULL)
- PHP_FE(sybase_fetch_field, NULL)
- PHP_FE(sybase_field_seek, NULL)
- PHP_FE(sybase_result, NULL)
- PHP_FE(sybase_affected_rows, NULL)
- PHP_FE(sybase_min_client_severity, NULL)
- PHP_FE(sybase_min_server_severity, NULL)
- PHP_FE(sybase_set_message_handler, NULL)
- PHP_FE(sybase_deadlock_retry_count, NULL)
-
- PHP_FALIAS(mssql_connect, sybase_connect, NULL)
- PHP_FALIAS(mssql_pconnect, sybase_pconnect, NULL)
- PHP_FALIAS(mssql_close, sybase_close, NULL)
- PHP_FALIAS(mssql_select_db, sybase_select_db, NULL)
- PHP_FALIAS(mssql_query, sybase_query, NULL)
- PHP_FALIAS(mssql_unbuffered_query, sybase_unbuffered_query, NULL)
- PHP_FALIAS(mssql_free_result, sybase_free_result, NULL)
- PHP_FALIAS(mssql_get_last_message, sybase_get_last_message, NULL)
- PHP_FALIAS(mssql_num_rows, sybase_num_rows, NULL)
- PHP_FALIAS(mssql_num_fields, sybase_num_fields, NULL)
- PHP_FALIAS(mssql_fetch_row, sybase_fetch_row, NULL)
- PHP_FALIAS(mssql_fetch_array, sybase_fetch_array, NULL)
- PHP_FALIAS(mssql_fetch_assoc, sybase_fetch_assoc, NULL)
- PHP_FALIAS(mssql_fetch_object, sybase_fetch_object, NULL)
- PHP_FALIAS(mssql_data_seek, sybase_data_seek, NULL)
- PHP_FALIAS(mssql_fetch_field, sybase_fetch_field, NULL)
- PHP_FALIAS(mssql_field_seek, sybase_field_seek, NULL)
- PHP_FALIAS(mssql_result, sybase_result, NULL)
- PHP_FALIAS(mssql_affected_rows, sybase_affected_rows, NULL)
- PHP_FALIAS(mssql_min_client_severity, sybase_min_client_severity, NULL)
- PHP_FALIAS(mssql_min_server_severity, sybase_min_server_severity, NULL)
- PHP_FALIAS(mssql_set_message_handler, sybase_set_message_handler, NULL)
- PHP_FALIAS(mssql_deadlock_retry_count, sybase_deadlock_retry_count, NULL)
-
- {NULL, NULL, NULL}
-};
-
-zend_module_entry sybase_module_entry = {
- STANDARD_MODULE_HEADER,
- "sybase_ct", sybase_functions, PHP_MINIT(sybase), PHP_MSHUTDOWN(sybase), PHP_RINIT(sybase), PHP_RSHUTDOWN(sybase), PHP_MINFO(sybase), NO_VERSION_YET, STANDARD_MODULE_PROPERTIES
-};
-
-ZEND_DECLARE_MODULE_GLOBALS(sybase)
-/* static CS_CONTEXT *context; */
-
-#ifdef COMPILE_DL_SYBASE_CT
-ZEND_GET_MODULE(sybase)
-#endif
-
-ZEND_DECLARE_MODULE_GLOBALS(sybase)
-
-#define CHECK_LINK(link) { if (link==-1) { php_error_docref(NULL TSRMLS_CC, E_WARNING, "Sybase: A link to the server could not be established"); RETURN_FALSE; } }
-
-
-static int _clean_invalid_results(list_entry *le TSRMLS_DC)
-{
- if (Z_TYPE_P(le) == le_result) {
- sybase_link *sybase_ptr = ((sybase_result *) le->ptr)->sybase_ptr;
-
- if (!sybase_ptr->valid) {
- return 1;
- }
- }
- return 0;
-}
-
-static void _free_sybase_result(sybase_result *result)
-{
- int i, j;
-
- if (result->data) {
- for (i = 0; i < (result->store ? result->num_rows : MIN(1, result->num_rows)); i++) {
- for (j=0; j<result->num_fields; j++) {
- zval_dtor(&result->data[i][j]);
- }
- efree(result->data[i]);
- }
- efree(result->data);
- }
-
- if (result->fields) {
- for (i=0; i<result->num_fields; i++) {
- STR_FREE(result->fields[i].name);
- STR_FREE(result->fields[i].column_source);
- }
- efree(result->fields);
- }
-
- efree(result);
-}
-
-/* Forward declaration */
-static int php_sybase_finish_results (sybase_result *result);
-
-static void php_free_sybase_result(zend_rsrc_list_entry *rsrc TSRMLS_DC)
-{
- sybase_result *result = (sybase_result *)rsrc->ptr;
-
- /* Check to see if we've read all rows */
- if (result->sybase_ptr && result->sybase_ptr->active_result_index) {
- if (result->sybase_ptr->cmd) {
- ct_cancel(NULL, result->sybase_ptr->cmd, CS_CANCEL_ALL);
- }
- php_sybase_finish_results(result);
- }
-
- _free_sybase_result(result);
-}
-
-static void _close_sybase_link(zend_rsrc_list_entry *rsrc TSRMLS_DC)
-{
- sybase_link *sybase_ptr = (sybase_link *)rsrc->ptr;
- CS_INT con_status;
-
- sybase_ptr->valid = 0;
- if (sybase_ptr->callback_name != NULL) {
- zval_ptr_dtor(&sybase_ptr->callback_name);
- sybase_ptr->callback_name= NULL;
- }
-
- zend_hash_apply(&EG(regular_list), (apply_func_t) _clean_invalid_results TSRMLS_CC);
-
- /* Non-persistent connections will always be connected or we wouldn't
- * get here, but since we want to check the death status anyway
- * we might as well double-check the connect status.
- */
- if (ct_con_props(sybase_ptr->connection, CS_GET, CS_CON_STATUS,
- &con_status, CS_UNUSED, NULL)!=CS_SUCCEED) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Sybase: Unable to get connection status on close");
- /* Assume the worst. */
- con_status = CS_CONSTAT_CONNECTED | CS_CONSTAT_DEAD;
- }
- if (con_status & CS_CONSTAT_CONNECTED) {
- if ((con_status & CS_CONSTAT_DEAD) || ct_close(sybase_ptr->connection, CS_UNUSED)!=CS_SUCCEED) {
- ct_close(sybase_ptr->connection, CS_FORCE_CLOSE);
- }
- }
-
- ct_cmd_drop(sybase_ptr->cmd);
- ct_con_drop(sybase_ptr->connection);
- efree(sybase_ptr);
- SybCtG(num_links)--;
-}
-
-
-static void _close_sybase_plink(zend_rsrc_list_entry *rsrc TSRMLS_DC)
-{
- sybase_link *sybase_ptr = (sybase_link *)rsrc->ptr;
- CS_INT con_status;
-
- /* Persistent connections may have been closed before a failed
- * reopen attempt.
- */
- if (ct_con_props(sybase_ptr->connection, CS_GET, CS_CON_STATUS,
- &con_status, CS_UNUSED, NULL)!=CS_SUCCEED) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Sybase: Unable to get connection status on close");
- /* Assume the worst. */
- con_status = CS_CONSTAT_CONNECTED | CS_CONSTAT_DEAD;
- }
- if (con_status & CS_CONSTAT_CONNECTED) {
- if ((con_status & CS_CONSTAT_DEAD) || ct_close(sybase_ptr->connection, CS_UNUSED)!=CS_SUCCEED) {
- ct_close(sybase_ptr->connection, CS_FORCE_CLOSE);
- }
- }
-
- ct_con_drop(sybase_ptr->connection);
- free(sybase_ptr);
- SybCtG(num_persistent)--;
- SybCtG(num_links)--;
-}
-
-
-static CS_RETCODE CS_PUBLIC _client_message_handler(CS_CONTEXT *context, CS_CONNECTION *connection, CS_CLIENTMSG *errmsg)
-{
- TSRMLS_FETCH();
-
- if (CS_SEVERITY(errmsg->msgnumber) >= SybCtG(min_client_severity)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Sybase: Client message: %s (severity %d)", errmsg->msgstring, CS_SEVERITY(errmsg->msgnumber));
- }
- STR_FREE(SybCtG(server_message));
- SybCtG(server_message) = estrdup(errmsg->msgstring);
-
-
- /* If this is a timeout message, return CS_FAIL to cancel the
- * operation and mark the connection as dead.
- */
- if (CS_SEVERITY(errmsg->msgnumber) == CS_SV_RETRY_FAIL &&
- CS_NUMBER(errmsg->msgnumber) == 63 &&
- CS_ORIGIN(errmsg->msgnumber) == 2 &&
- CS_LAYER(errmsg->msgnumber) == 1)
- {
- return CS_FAIL;
- }
-
- return CS_SUCCEED;
-}
-
-static int _call_message_handler(zval *callback_name, CS_SERVERMSG *srvmsg TSRMLS_DC)
-{
- int handled = 0;
-
- if (callback_name) {
- zval *msgnumber, *severity, *state, *line, *text, *retval = NULL;
- zval **args[5];
-
- MAKE_STD_ZVAL(msgnumber);
- ZVAL_LONG(msgnumber, srvmsg->msgnumber);
- args[0] = &msgnumber;
-
- MAKE_STD_ZVAL(severity);
- ZVAL_LONG(severity, srvmsg->severity);
- args[1] = &severity;
-
- MAKE_STD_ZVAL(state);
- ZVAL_LONG(state, srvmsg->state);
- args[2] = &state;
-
- MAKE_STD_ZVAL(line);
- ZVAL_LONG(line, srvmsg->line);
- args[3] = &line;
-
- MAKE_STD_ZVAL(text);
- ZVAL_STRING(text, srvmsg->text, 1);
- args[4] = &text;
-
- if (call_user_function_ex(EG(function_table), NULL, callback_name, &retval, 5, args, 0, NULL TSRMLS_CC) == FAILURE) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Sybase: Cannot call the messagehandler %s", Z_STRVAL_P(callback_name));
- }
-
- if (retval) {
- handled= ((Z_TYPE_P(retval) != IS_BOOL) || (Z_BVAL_P(retval) != 0));
- zval_ptr_dtor(&retval);
- }
-
- zval_ptr_dtor(&msgnumber);
- zval_ptr_dtor(&severity);
- zval_ptr_dtor(&state);
- zval_ptr_dtor(&line);
- zval_ptr_dtor(&text);
- }
-
- return handled;
-}
-
-static CS_RETCODE CS_PUBLIC _server_message_handler(CS_CONTEXT *context, CS_CONNECTION *connection, CS_SERVERMSG *srvmsg)
-{
- sybase_link *sybase;
- int handled = 0;
- TSRMLS_FETCH();
-
- /* Remember the last server message in any case */
- STR_FREE(SybCtG(server_message));
- SybCtG(server_message) = estrdup(srvmsg->text);
-
- /* Retrieve sybase link */
- if (ct_con_props(connection, CS_GET, CS_USERDATA, &sybase, CS_SIZEOF(sybase), NULL) != CS_SUCCEED) {
- sybase = NULL;
- }
-
- /* If this is a deadlock message, set the connection's deadlock flag
- * so we will retry the request. Sorry about the bare constant here,
- * but it's not defined anywhere and it's a "well-known" number.
- */
- if (sybase && (srvmsg->msgnumber == 1205)) {
- sybase->deadlock = 1;
- }
-
- /* Check mininum server severity level */
- if (srvmsg->severity < SybCtG(min_server_severity)) {
- return CS_SUCCEED;
- }
-
- /* Call global message handler */
- handled = handled | _call_message_handler(SybCtG(callback_name), srvmsg TSRMLS_CC);
-
- /* Call link specific message handler */
- if (sybase) {
- handled = handled | _call_message_handler(sybase->callback_name, srvmsg TSRMLS_CC);
- }
-
- /* Spit out a warning if neither of them has handled this message */
- if (!handled) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Sybase: Server message: %s (severity %d, procedure %s)",
- srvmsg->text, srvmsg->severity, ((srvmsg->proclen>0) ? srvmsg->proc : "N/A"));
- }
-
- return CS_SUCCEED;
-}
-
-
-PHP_INI_BEGIN()
- STD_PHP_INI_BOOLEAN("sybct.allow_persistent", "1", PHP_INI_SYSTEM, OnUpdateLong, allow_persistent, zend_sybase_globals, sybase_globals)
- STD_PHP_INI_ENTRY_EX("sybct.max_persistent", "-1", PHP_INI_SYSTEM, OnUpdateLong, max_persistent, zend_sybase_globals, sybase_globals, display_link_numbers)
- STD_PHP_INI_ENTRY_EX("sybct.max_links", "-1", PHP_INI_SYSTEM, OnUpdateLong, max_links, zend_sybase_globals, sybase_globals, display_link_numbers)
- STD_PHP_INI_ENTRY("sybct.min_server_severity", "10", PHP_INI_ALL, OnUpdateLong, min_server_severity, zend_sybase_globals, sybase_globals)
- STD_PHP_INI_ENTRY("sybct.min_client_severity", "10", PHP_INI_ALL, OnUpdateLong, min_client_severity, zend_sybase_globals, sybase_globals)
- STD_PHP_INI_ENTRY("sybct.login_timeout", "-1", PHP_INI_ALL, OnUpdateLong, login_timeout, zend_sybase_globals, sybase_globals)
- STD_PHP_INI_ENTRY("sybct.hostname", NULL, PHP_INI_ALL, OnUpdateString, hostname, zend_sybase_globals, sybase_globals)
- STD_PHP_INI_ENTRY_EX("sybct.deadlock_retry_count", "-1", PHP_INI_ALL, OnUpdateLong, deadlock_retry_count, zend_sybase_globals, sybase_globals, display_link_numbers)
-PHP_INI_END()
-
-
-static void php_sybase_init_globals(zend_sybase_globals *sybase_globals)
-{
- long opt;
- TSRMLS_FETCH();
-
- if (cs_ctx_alloc(CTLIB_VERSION, &sybase_globals->context)!=CS_SUCCEED || ct_init(sybase_globals->context, CTLIB_VERSION)!=CS_SUCCEED) {
- return;
- }
-
- /* Initialize message handlers */
- if (ct_callback(sybase_globals->context, NULL, CS_SET, CS_SERVERMSG_CB, (CS_VOID *)_server_message_handler)!=CS_SUCCEED) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Sybase: Unable to set server message handler");
- }
-
- if (ct_callback(sybase_globals->context, NULL, CS_SET, CS_CLIENTMSG_CB, (CS_VOID *)_client_message_handler)!=CS_SUCCEED) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Sybase: Unable to set client message handler");
- }
-
- /* Set datetime conversion format to "Nov 3 1998 8:06PM".
- * This is the default format for the ct-lib that comes with
- * Sybase ASE 11.5.1 for Solaris, but the Linux libraries that
- * come with 11.0.3.3 default to "03/11/98" which is singularly
- * useless. This levels the playing field for all platforms.
- */
- {
- CS_INT dt_convfmt = CS_DATES_SHORT;
- if (cs_dt_info(sybase_globals->context, CS_SET, NULL, CS_DT_CONVFMT, CS_UNUSED, &dt_convfmt, sizeof(dt_convfmt), NULL)!=CS_SUCCEED) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Sybase: Unable to set datetime conversion format");
- }
- }
-
- /* Set the timeout, which is per context and can't be set with
- * ct_con_props(), so set it globally from the config value if
- * requested. The default is CS_NO_LIMIT.
- *
- * Note that despite some noise in the documentation about using
- * signals to implement timeouts, they are actually implemented
- * by using poll() or select() on Solaris and Linux.
- */
- if (cfg_get_long("sybct.timeout", &opt)==SUCCESS) {
- CS_INT cs_timeout = opt;
- if (ct_config(sybase_globals->context, CS_SET, CS_TIMEOUT, &cs_timeout, CS_UNUSED, NULL)!=CS_SUCCEED) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Sybase: Unable to update the timeout");
- }
- }
-
- sybase_globals->num_persistent=0;
- sybase_globals->callback_name = NULL;
-}
-
-
-static void php_sybase_destroy_globals(zend_sybase_globals *sybase_globals)
-{
- ct_exit(sybase_globals->context, CS_UNUSED);
- cs_ctx_drop(sybase_globals->context);
-}
-
-PHP_MINIT_FUNCTION(sybase)
-{
- ZEND_INIT_MODULE_GLOBALS(sybase, php_sybase_init_globals, php_sybase_destroy_globals);
-
- REGISTER_INI_ENTRIES();
-
- le_link = zend_register_list_destructors_ex(_close_sybase_link, NULL, "sybase-ct link", module_number);
- le_plink = zend_register_list_destructors_ex(NULL, _close_sybase_plink, "sybase-ct link persistent", module_number);
- le_result = zend_register_list_destructors_ex(php_free_sybase_result, NULL, "sybase-ct result", module_number);
-
- return SUCCESS;
-}
-
-
-
-PHP_RINIT_FUNCTION(sybase)
-{
- SybCtG(default_link)=-1;
- SybCtG(num_links) = SybCtG(num_persistent);
- SybCtG(appname) = estrndup("PHP " PHP_VERSION, sizeof("PHP " PHP_VERSION));
- SybCtG(server_message) = STR_EMPTY_ALLOC();
- return SUCCESS;
-}
-
-
-
-PHP_MSHUTDOWN_FUNCTION(sybase)
-{
- UNREGISTER_INI_ENTRIES();
-#if 0
- ct_exit(context, CS_UNUSED);
- cs_ctx_drop(context);
-#endif
- return SUCCESS;
-}
-
-
-PHP_RSHUTDOWN_FUNCTION(sybase)
-{
- efree(SybCtG(appname));
- SybCtG(appname) = NULL;
- if (SybCtG(callback_name)) {
- zval_ptr_dtor(&SybCtG(callback_name));
- SybCtG(callback_name)= NULL;
- }
- STR_FREE(SybCtG(server_message));
- SybCtG(server_message) = NULL;
- return SUCCESS;
-}
-
-
-static int php_sybase_do_connect_internal(sybase_link *sybase, char *host, char *user, char *passwd, char *charset, char *appname)
-{
- CS_LOCALE *tmp_locale;
- TSRMLS_FETCH();
- long packetsize;
-
- /* set a CS_CONNECTION record */
- if (ct_con_alloc(SybCtG(context), &sybase->connection)!=CS_SUCCEED) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Sybase: Unable to allocate connection record");
- return 0;
- }
-
- /* Note - this saves a copy of sybase, not a pointer to it. */
- if (ct_con_props(sybase->connection, CS_SET, CS_USERDATA, &sybase, CS_SIZEOF(sybase), NULL)!=CS_SUCCEED) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Sybase: Unable to set userdata");
- ct_con_drop(sybase->connection);
- return 0;
- }
-
- if (user) {
- ct_con_props(sybase->connection, CS_SET, CS_USERNAME, user, CS_NULLTERM, NULL);
- }
- if (passwd) {
- ct_con_props(sybase->connection, CS_SET, CS_PASSWORD, passwd, CS_NULLTERM, NULL);
- }
- if (appname) {
- ct_con_props(sybase->connection, CS_SET, CS_APPNAME, appname, CS_NULLTERM, NULL);
- } else {
- ct_con_props(sybase->connection, CS_SET, CS_APPNAME, SybCtG(appname), CS_NULLTERM, NULL);
- }
-
- if (SybCtG(hostname)) {
- ct_con_props(sybase->connection, CS_SET, CS_HOSTNAME, SybCtG(hostname), CS_NULLTERM, NULL);
- }
-
- if (charset) {
- if (cs_loc_alloc(SybCtG(context), &tmp_locale)!=CS_SUCCEED) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Sybase: Unable to allocate locale information.");
- } else {
- if (cs_locale(SybCtG(context), CS_SET, tmp_locale, CS_LC_ALL, NULL, CS_NULLTERM, NULL)!=CS_SUCCEED) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Sybase: Unable to load default locale data.");
- } else {
- if (cs_locale(SybCtG(context), CS_SET, tmp_locale, CS_SYB_CHARSET, charset, CS_NULLTERM, NULL)!=CS_SUCCEED) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Sybase: Unable to update character set.");
- } else {
- if (ct_con_props(sybase->connection, CS_SET, CS_LOC_PROP, tmp_locale, CS_UNUSED, NULL)!=CS_SUCCEED) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Sybase: Unable to update connection properties.");
- }
- }
- }
- }
- }
-
- if (cfg_get_long("sybct.packet_size", &packetsize) == SUCCESS) {
- if (ct_con_props(sybase->connection, CS_SET, CS_PACKETSIZE, (CS_VOID *)&packetsize, CS_UNUSED, NULL) != CS_SUCCEED) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Sybase: Unable to update connection packetsize.");
- }
- }
-
- /* Set the login timeout. Actually, the login timeout is per context
- * and not per connection, but we will update the context here to
- * allow for code such as the following:
- *
- * ini_set('sybct.login_timeout', $timeout);
- * sybase_connect(...)
- *
- * Note that preceding calls to sybase_connect() will now use the
- * updated value and not the default one!
- *
- * The default value for CS_LOGIN_TIMEOUT is 60 (1 minute).
- */
- if (SybCtG(login_timeout) != -1) {
- CS_INT cs_login_timeout = SybCtG(login_timeout);
- if (ct_config(SybCtG(context), CS_SET, CS_LOGIN_TIMEOUT, &cs_login_timeout, CS_UNUSED, NULL)!=CS_SUCCEED) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Sybase: Unable to update the login timeout");
- }
- }
-
- sybase->valid = 1;
- sybase->dead = 0;
- sybase->active_result_index = 0;
- sybase->callback_name = NULL;
-
- /* create the link */
- if (ct_connect(sybase->connection, host, CS_NULLTERM)!=CS_SUCCEED) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Sybase: Unable to connect");
- ct_con_drop(sybase->connection);
- return 0;
- }
-
- if (ct_cmd_alloc(sybase->connection, &sybase->cmd)!=CS_SUCCEED) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Sybase: Unable to allocate command record");
- ct_close(sybase->connection, CS_UNUSED);
- ct_con_drop(sybase->connection);
- return 0;
- }
-
- return 1;
-}
-
-
-static void php_sybase_do_connect(INTERNAL_FUNCTION_PARAMETERS, int persistent)
-{
- char *user, *passwd, *host, *charset, *appname;
- char *hashed_details;
- int hashed_details_length;
- sybase_link *sybase_ptr;
-
- switch(ZEND_NUM_ARGS()) {
- case 0: /* defaults */
- host=user=passwd=charset=appname=NULL;
- hashed_details_length=6+5;
- hashed_details = (char *) emalloc(hashed_details_length+1);
- strcpy(hashed_details, "sybase_____");
- break;
- case 1: {
- zval **yyhost;
-
- if (zend_get_parameters_ex(1, &yyhost) == FAILURE) {
- RETURN_FALSE;
- }
- convert_to_string_ex(yyhost);
- host = Z_STRVAL_PP(yyhost);
- user=passwd=charset=appname=NULL;
- hashed_details_length = Z_STRLEN_PP(yyhost)+6+5;
- hashed_details = (char *) emalloc(hashed_details_length+1);
- sprintf(hashed_details, "sybase_%s____", Z_STRVAL_PP(yyhost));
- }
- break;
- case 2: {
- zval **yyhost, **yyuser;
-
- if (zend_get_parameters_ex(2, &yyhost, &yyuser) == FAILURE) {
- RETURN_FALSE;
- }
- convert_to_string_ex(yyhost);
- convert_to_string_ex(yyuser);
- host = Z_STRVAL_PP(yyhost);
- user = Z_STRVAL_PP(yyuser);
- passwd=charset=appname=NULL;
- hashed_details_length = Z_STRLEN_PP(yyhost)+Z_STRLEN_PP(yyuser)+6+5;
- hashed_details = (char *) emalloc(hashed_details_length+1);
- sprintf(hashed_details, "sybase_%s_%s___", Z_STRVAL_PP(yyhost), Z_STRVAL_PP(yyuser));
- }
- break;
- case 3: {
- zval **yyhost, **yyuser, **yypasswd;
-
- if (zend_get_parameters_ex(3, &yyhost, &yyuser, &yypasswd) == FAILURE) {
- RETURN_FALSE;
- }
- convert_to_string_ex(yyhost);
- convert_to_string_ex(yyuser);
- convert_to_string_ex(yypasswd);
- host = Z_STRVAL_PP(yyhost);
- user = Z_STRVAL_PP(yyuser);
- passwd = Z_STRVAL_PP(yypasswd);
- charset=appname=NULL;
- hashed_details_length = Z_STRLEN_PP(yyhost)+Z_STRLEN_PP(yyuser)+Z_STRLEN_PP(yypasswd)+6+5;
- hashed_details = (char *) emalloc(hashed_details_length+1);
- sprintf(hashed_details, "sybase_%s_%s_%s__", Z_STRVAL_PP(yyhost), Z_STRVAL_PP(yyuser), Z_STRVAL_PP(yypasswd));
- }
- break;
- case 4: {
- zval **yyhost, **yyuser, **yypasswd, **yycharset;
-
- if (zend_get_parameters_ex(4, &yyhost, &yyuser, &yypasswd, &yycharset) == FAILURE) {
- RETURN_FALSE;
- }
- convert_to_string_ex(yyhost);
- convert_to_string_ex(yyuser);
- convert_to_string_ex(yypasswd);
- convert_to_string_ex(yycharset);
- host = Z_STRVAL_PP(yyhost);
- user = Z_STRVAL_PP(yyuser);
- passwd = Z_STRVAL_PP(yypasswd);
- charset = Z_STRVAL_PP(yycharset);
- appname=NULL;
- hashed_details_length = Z_STRLEN_PP(yyhost)+Z_STRLEN_PP(yyuser)+Z_STRLEN_PP(yypasswd)+Z_STRLEN_PP(yycharset)+6+5;
- hashed_details = (char *) emalloc(hashed_details_length+1);
- sprintf(hashed_details, "sybase_%s_%s_%s_%s_", Z_STRVAL_PP(yyhost), Z_STRVAL_PP(yyuser), Z_STRVAL_PP(yypasswd), Z_STRVAL_PP(yycharset));
- }
- break;
- case 5: {
- zval **yyhost, **yyuser, **yypasswd, **yycharset, **yyappname;
-
- if (zend_get_parameters_ex(5, &yyhost, &yyuser, &yypasswd, &yycharset, &yyappname) == FAILURE) {
- RETURN_FALSE;
- }
- convert_to_string_ex(yyhost);
- convert_to_string_ex(yyuser);
- convert_to_string_ex(yypasswd);
- convert_to_string_ex(yycharset);
- convert_to_string_ex(yyappname);
- host = Z_STRVAL_PP(yyhost);
- user = Z_STRVAL_PP(yyuser);
- passwd = Z_STRVAL_PP(yypasswd);
- charset = Z_STRVAL_PP(yycharset);
- appname = Z_STRVAL_PP(yyappname);
- hashed_details_length = Z_STRLEN_PP(yyhost)+Z_STRLEN_PP(yyuser)+Z_STRLEN_PP(yypasswd)+Z_STRLEN_PP(yycharset)+Z_STRLEN_PP(yyappname)+6+5;
- hashed_details = (char *) emalloc(hashed_details_length+1);
- sprintf(hashed_details, "sybase_%s_%s_%s_%s_%s", Z_STRVAL_PP(yyhost), Z_STRVAL_PP(yyuser), Z_STRVAL_PP(yypasswd), Z_STRVAL_PP(yycharset), Z_STRVAL_PP(yyappname));
- }
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
-
- if (!SybCtG(allow_persistent)) {
- persistent=0;
- }
- if (persistent) {
- list_entry *le;
-
- /* try to find if we already have this link in our persistent list */
- if (zend_hash_find(&EG(persistent_list), hashed_details, hashed_details_length+1, (void **) &le)==FAILURE) { /* we don't */
- list_entry new_le;
-
- if (SybCtG(max_links)!=-1 && SybCtG(num_links)>=SybCtG(max_links)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Sybase: Too many open links (%ld)", SybCtG(num_links));
- efree(hashed_details);
- RETURN_FALSE;
- }
- if (SybCtG(max_persistent)!=-1 && SybCtG(num_persistent)>=SybCtG(max_persistent)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Sybase: Too many open persistent links (%ld)", SybCtG(num_persistent));
- efree(hashed_details);
- RETURN_FALSE;
- }
-
- sybase_ptr = (sybase_link *) malloc(sizeof(sybase_link));
- if (!php_sybase_do_connect_internal(sybase_ptr, host, user, passwd, charset, appname)) {
- free(sybase_ptr);
- efree(hashed_details);
- RETURN_FALSE;
- }
-
- /* hash it up */
- Z_TYPE(new_le) = le_plink;
- new_le.ptr = sybase_ptr;
- if (zend_hash_update(&EG(persistent_list), hashed_details, hashed_details_length+1, (void *) &new_le, sizeof(list_entry), NULL)==FAILURE) {
- ct_close(sybase_ptr->connection, CS_UNUSED);
- ct_con_drop(sybase_ptr->connection);
- free(sybase_ptr);
- efree(hashed_details);
- RETURN_FALSE;
- }
- SybCtG(num_persistent)++;
- SybCtG(num_links)++;
- } else { /* we do */
- CS_INT con_status;
-
- if (Z_TYPE_P(le) != le_plink) {
- efree(hashed_details);
- RETURN_FALSE;
- }
-
- sybase_ptr = (sybase_link *) le->ptr;
-
- /* If the link has died, close it and overwrite it with a new one. */
-
- if (ct_con_props(sybase_ptr->connection, CS_GET, CS_CON_STATUS,
- &con_status, CS_UNUSED, NULL)!=CS_SUCCEED) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Sybase: Unable to get connection status");
- efree(hashed_details);
- RETURN_FALSE;
- }
- if (!(con_status & CS_CONSTAT_CONNECTED) || (con_status & CS_CONSTAT_DEAD) || sybase_ptr->dead) {
- sybase_link sybase;
-
- if (con_status & CS_CONSTAT_CONNECTED) {
- ct_close(sybase_ptr->connection, CS_FORCE_CLOSE);
- }
- /* Create a new connection, then replace the old
- * connection. If we fail to create a new connection,
- * put the old one back so there will be a connection,
- * even if it is a non-functional one. This is because
- * code may still be holding an id for this connection
- * so we can't free the CS_CONNECTION.
- * (This is actually totally hokey, it would be better
- * to just ct_con_drop() the connection and set
- * sybase_ptr->connection to NULL, then test it for
- * NULL before trying to use it elsewhere . . .)
- */
- memcpy(&sybase, sybase_ptr, sizeof(sybase_link));
- if (!php_sybase_do_connect_internal(sybase_ptr, host, user, passwd, charset, appname)) {
- memcpy(sybase_ptr, &sybase, sizeof(sybase_link));
- efree(hashed_details);
- RETURN_FALSE;
- }
- ct_con_drop(sybase.connection); /* drop old connection */
- }
- }
- ZEND_REGISTER_RESOURCE(return_value, sybase_ptr, le_plink);
- } else { /* non persistent */
- list_entry *index_ptr, new_index_ptr;
-
- /* first we check the hash for the hashed_details key. if it exists,
- * it should point us to the right offset where the actual sybase link sits.
- * if it doesn't, open a new sybase link, add it to the resource list,
- * and add a pointer to it with hashed_details as the key.
- */
- if (zend_hash_find(&EG(regular_list), hashed_details, hashed_details_length+1, (void **) &index_ptr)==SUCCESS) {
- int type, link;
- void *ptr;
-
- if (Z_TYPE_P(index_ptr) != le_index_ptr) {
- efree(hashed_details);
- RETURN_FALSE;
- }
- link = (int) index_ptr->ptr;
- ptr = zend_list_find(link, &type); /* check if the link is still there */
- if (ptr && (type==le_link || type==le_plink)) {
- zend_list_addref(link);
- Z_LVAL_P(return_value) = SybCtG(default_link) = link;
- Z_TYPE_P(return_value) = IS_RESOURCE;
- efree(hashed_details);
- return;
- } else {
- zend_hash_del(&EG(regular_list), hashed_details, hashed_details_length+1);
- }
- }
- if (SybCtG(max_links)!=-1 && SybCtG(num_links)>=SybCtG(max_links)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Sybase: Too many open links (%ld)", SybCtG(num_links));
- efree(hashed_details);
- RETURN_FALSE;
- }
-
- sybase_ptr = (sybase_link *) emalloc(sizeof(sybase_link));
- if (!php_sybase_do_connect_internal(sybase_ptr, host, user, passwd, charset, appname)) {
- efree(sybase_ptr);
- efree(hashed_details);
- RETURN_FALSE;
- }
-
- /* add it to the list */
- ZEND_REGISTER_RESOURCE(return_value, sybase_ptr, le_link);
-
- /* add it to the hash */
- new_index_ptr.ptr = (void *) Z_LVAL_P(return_value);
- Z_TYPE(new_index_ptr) = le_index_ptr;
- if (zend_hash_update(&EG(regular_list), hashed_details, hashed_details_length+1, (void *) &new_index_ptr, sizeof(list_entry), NULL)==FAILURE) {
- ct_close(sybase_ptr->connection, CS_UNUSED);
- ct_con_drop(sybase_ptr->connection);
- efree(sybase_ptr);
- efree(hashed_details);
- RETURN_FALSE;
- }
- SybCtG(num_links)++;
- }
- efree(hashed_details);
- SybCtG(default_link)=Z_LVAL_P(return_value);
- zend_list_addref(SybCtG(default_link));
-}
-
-
-static int php_sybase_get_default_link(INTERNAL_FUNCTION_PARAMETERS)
-{
- if (SybCtG(default_link)==-1) { /* no link opened yet, implicitly open one */
- ht = 0;
- php_sybase_do_connect(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0);
- }
- return SybCtG(default_link);
-}
-
-
-/* {{{ proto int sybase_connect([string host [, string user [, string password [, string charset [, string appname]]]]])
- Open Sybase server connection */
-PHP_FUNCTION(sybase_connect)
-{
- php_sybase_do_connect(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0);
-}
-
-/* }}} */
-
-/* {{{ proto int sybase_pconnect([string host [, string user [, string password [, string charset [, string appname]]]]])
- Open persistent Sybase connection */
-PHP_FUNCTION(sybase_pconnect)
-{
- php_sybase_do_connect(INTERNAL_FUNCTION_PARAM_PASSTHRU, 1);
-}
-
-/* }}} */
-
-
-/* {{{ proto bool sybase_close([int link_id])
- Close Sybase connection */
-PHP_FUNCTION(sybase_close)
-{
- zval **sybase_link_index = 0;
- int id;
- sybase_link *sybase_ptr;
-
- switch (ZEND_NUM_ARGS()) {
- case 0:
- id = SybCtG(default_link);
- break;
- case 1:
- if (zend_get_parameters_ex(1, &sybase_link_index) == FAILURE) {
- RETURN_FALSE;
- }
- id = -1;
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
-
- ZEND_FETCH_RESOURCE2(sybase_ptr, sybase_link *, sybase_link_index, id, "Sybase-Link", le_link, le_plink);
-
- if (id == -1) { /* explicit resource number */
- zend_list_delete(Z_RESVAL_PP(sybase_link_index));
- }
-
- if (id != -1 || (sybase_link_index && Z_RESVAL_PP(sybase_link_index)==SybCtG(default_link))) {
- zend_list_delete(SybCtG(default_link));
- SybCtG(default_link) = -1;
- }
-
- RETURN_TRUE;
-}
-
-/* }}} */
-
-
-static int exec_cmd(sybase_link *sybase_ptr, char *cmdbuf)
-{
- CS_RETCODE retcode;
- CS_INT restype;
- int failure=0;
-
- /* Fail if we already marked this connection dead. */
-
- if (sybase_ptr->dead) {
- return FAILURE;
- }
-
- /*
- ** Get a command handle, store the command string in it, and
- ** send it to the server.
- */
-
- if (ct_command(sybase_ptr->cmd, CS_LANG_CMD, cmdbuf, CS_NULLTERM, CS_UNUSED)!=CS_SUCCEED) {
- sybase_ptr->dead = 1;
- return FAILURE;
- }
- if (ct_send(sybase_ptr->cmd)!=CS_SUCCEED) {
- sybase_ptr->dead = 1;
- return FAILURE;
- }
-
- while ((retcode = ct_results(sybase_ptr->cmd, &restype))==CS_SUCCEED) {
- switch ((int) restype) {
- case CS_CMD_SUCCEED:
- case CS_CMD_DONE:
- break;
-
- case CS_CMD_FAIL:
- failure=1;
- break;
-
- case CS_STATUS_RESULT:
- ct_cancel(NULL, sybase_ptr->cmd, CS_CANCEL_CURRENT);
- break;
-
- default:
- failure=1;
- break;
- }
- if (failure) {
- ct_cancel(NULL, sybase_ptr->cmd, CS_CANCEL_ALL);
- return FAILURE;
- }
- }
-
- switch (retcode) {
- case CS_END_RESULTS:
- return SUCCESS;
- break;
-
- case CS_FAIL:
- /* Hopefully this either cleans up the connection, or the
- * connection ends up marked dead so it will be reopened
- * if it is persistent. We may want to do
- * ct_close(CS_FORCE_CLOSE) if ct_cancel() fails; see the
- * doc for ct_results()==CS_FAIL.
- */
- ct_cancel(NULL, sybase_ptr->cmd, CS_CANCEL_ALL);
- /* Don't take chances with the vagaries of ct-lib. Mark it
- * dead ourselves.
- */
- sybase_ptr->dead = 1;
- return FAILURE;
-
- default:
- return FAILURE;
- }
-}
-
-
-/* {{{ proto bool sybase_select_db(string database [, int link_id])
- Select Sybase database */
-PHP_FUNCTION(sybase_select_db)
-{
- zval **db, **sybase_link_index;
- int id;
- char *cmdbuf;
- sybase_link *sybase_ptr;
-
- switch(ZEND_NUM_ARGS()) {
- case 1:
- if (zend_get_parameters_ex(1, &db) == FAILURE) {
- RETURN_FALSE;
- }
- id = php_sybase_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU);
- CHECK_LINK(id);
- break;
- case 2:
- if (zend_get_parameters_ex(2, &db, &sybase_link_index) == FAILURE) {
- RETURN_FALSE;
- }
- id = -1;
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
-
- ZEND_FETCH_RESOURCE2(sybase_ptr, sybase_link *, sybase_link_index, id, "Sybase-Link", le_link, le_plink);
-
- convert_to_string_ex(db);
- cmdbuf = (char *) emalloc(sizeof("use ")+Z_STRLEN_PP(db)+1);
- sprintf(cmdbuf, "use %s", Z_STRVAL_PP(db)); /* SAFE */
-
- if (exec_cmd(sybase_ptr, cmdbuf)==FAILURE) {
- efree(cmdbuf);
- RETURN_FALSE;
- } else {
- efree(cmdbuf);
- RETURN_TRUE;
- }
-}
-
-/* }}} */
-
-static int php_sybase_finish_results (sybase_result *result)
-{
- int i, fail;
- CS_RETCODE retcode;
- CS_INT restype;
- TSRMLS_FETCH();
-
- efree(result->datafmt);
- efree(result->lengths);
- efree(result->indicators);
- efree(result->numerics);
- efree(result->types);
- for (i=0; i<result->num_fields; i++) {
- efree(result->tmp_buffer[i]);
- }
- efree(result->tmp_buffer);
-
- /* Indicate we have read all rows */
- result->sybase_ptr->active_result_index= 0;
-
- /* The only restype we should get now is CS_CMD_DONE, possibly
- * followed by a CS_STATUS_RESULT/CS_CMD_SUCCEED/CS_CMD_DONE
- * sequence if the command was a stored procedure call. But we
- * still need to read and discard unexpected results. We might
- * want to return a failure in this case because the application
- * won't be getting all the results it asked for.
- */
- fail = 0;
- while ((retcode = ct_results(result->sybase_ptr->cmd, &restype))==CS_SUCCEED) {
- switch ((int) restype) {
- case CS_CMD_SUCCEED:
- case CS_CMD_DONE:
- break;
-
- case CS_CMD_FAIL:
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Sybase: Command failed, cancelling rest");
- ct_cancel(NULL, result->sybase_ptr->cmd, CS_CANCEL_ALL);
- fail = 1;
- break;
-
- case CS_COMPUTE_RESULT:
- case CS_CURSOR_RESULT:
- case CS_PARAM_RESULT:
- case CS_ROW_RESULT:
- /* Unexpected results, cancel them. */
- php_error_docref(NULL TSRMLS_CC, E_NOTICE, "Sybase: Unexpected results, cancelling current");
- ct_cancel(NULL, result->sybase_ptr->cmd, CS_CANCEL_CURRENT);
- break;
-
- case CS_STATUS_RESULT:
- /* Status result from a stored procedure, cancel it but do not tell user */
- ct_cancel(NULL, result->sybase_ptr->cmd, CS_CANCEL_CURRENT);
- break;
-
- default:
- php_error_docref(NULL TSRMLS_CC, E_NOTICE, "Sybase: Unexpected results, cancelling all");
- ct_cancel(NULL, result->sybase_ptr->cmd, CS_CANCEL_ALL);
- break;
- }
-
- if (fail) {
- break;
- }
- }
-
- switch (retcode) {
- case CS_END_RESULTS:
- /* Normal. */
- break;
-
- case CS_FAIL:
- /* Hopefully this either cleans up the connection, or the
- * connection ends up marked dead so it will be reopened
- * if it is persistent. We may want to do
- * ct_close(CS_FORCE_CLOSE) if ct_cancel() fails; see the
- * doc for ct_results()==CS_FAIL.
- */
- ct_cancel(NULL, result->sybase_ptr->cmd, CS_CANCEL_ALL);
- /* Don't take chances with the vagaries of ct-lib. Mark it
- * dead ourselves.
- */
- result->sybase_ptr->dead = 1;
-
- case CS_CANCELED:
- default:
- _free_sybase_result(result);
- result = NULL;
- retcode = CS_FAIL;
- break;
- }
-
- return retcode;
-}
-
-#define RETURN_DOUBLE_VAL(result, buf, length) \
- if ((length - 1) <= EG(precision)) { \
- errno = 0; \
- Z_DVAL(result) = strtod(buf, NULL); \
- if (errno != ERANGE) { \
- Z_TYPE(result) = IS_DOUBLE; \
- } else { \
- ZVAL_STRINGL(&result, buf, length- 1, 1); \
- } \
- } else { \
- ZVAL_STRINGL(&result, buf, length- 1, 1); \
- }
-
-static int php_sybase_fetch_result_row (sybase_result *result, int numrows)
-{
- int i, j;
- CS_INT retcode;
- TSRMLS_FETCH();
-
- /* We've already fetched everything */
- if (result->last_retcode == CS_END_DATA || result->last_retcode == CS_END_RESULTS) {
- return result->last_retcode;
- }
-
- if (numrows!=-1) numrows+= result->num_rows;
- while ((retcode=ct_fetch(result->sybase_ptr->cmd, CS_UNUSED, CS_UNUSED, CS_UNUSED, NULL))==CS_SUCCEED
- || retcode==CS_ROW_FAIL) {
- /*
- if (retcode==CS_ROW_FAIL) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Sybase: Error reading row %d", result->num_rows);
- }
- */
-
- result->num_rows++;
- i= result->store ? result->num_rows- 1 : 0;
- if (i >= result->blocks_initialized*SYBASE_ROWS_BLOCK) {
- result->data = (zval **) erealloc(result->data, sizeof(zval *)*SYBASE_ROWS_BLOCK*(++result->blocks_initialized));
- }
- if (result->store || 1 == result->num_rows) {
- result->data[i] = (zval *) safe_emalloc(sizeof(zval), result->num_fields, 0);
- }
-
- for (j = 0; j < result->num_fields; j++) {
-
- /* If we are in non-storing mode, free the previous result */
- if (!result->store && result->num_rows > 1 && Z_TYPE(result->data[i][j]) == IS_STRING) {
- efree(Z_STRVAL(result->data[i][j]));
- }
-
- if (result->indicators[j] == -1) { /* null value */
- ZVAL_NULL(&result->data[i][j]);
- } else {
- switch (result->numerics[j]) {
- case 1: {
- /* This indicates a long */
- ZVAL_LONG(&result->data[i][j], strtol(result->tmp_buffer[j], NULL, 10));
- break;
- }
-
- case 2: {
- /* This indicates a float */
- RETURN_DOUBLE_VAL(result->data[i][j], result->tmp_buffer[j], result->lengths[j]);
- break;
- }
-
- case 3: {
- /* This indicates either a long or a float, which ever fits */
- errno = 0;
- Z_LVAL(result->data[i][j]) = strtol(result->tmp_buffer[j], NULL, 10);
- if (errno == ERANGE) {
-
- /* An overflow occurred, so try to fit it into a double */
- RETURN_DOUBLE_VAL(result->data[i][j], result->tmp_buffer[j], result->lengths[j]);
- break;
- }
- Z_TYPE(result->data[i][j]) = IS_LONG;
- break;
- }
-
- default: {
- /* This indicates anything else, return it as string */
- ZVAL_STRINGL(&result->data[i][j], result->tmp_buffer[j], result->lengths[j]- 1, 1);
- break;
- }
- }
- }
- }
- if (numrows!=-1 && result->num_rows>=numrows) break;
- }
-
- result->last_retcode= retcode;
- switch (retcode) {
- case CS_END_DATA:
- retcode = php_sybase_finish_results(result);
- break;
-
- case CS_ROW_FAIL:
- case CS_SUCCEED:
- break;
-
- default:
- _free_sybase_result(result);
- result = NULL;
- retcode = CS_FAIL; /* Just to be sure */
- break;
- }
-
- return retcode;
-}
-
-static sybase_result * php_sybase_fetch_result_set (sybase_link *sybase_ptr, int buffered, int store)
-{
- int num_fields;
- sybase_result *result;
- int i, j;
- CS_INT retcode;
-
- /* The following (if unbuffered) is more or less the equivalent of mysql_store_result().
- * fetch all rows from the server into the row buffer, thus:
- * 1) Being able to fire up another query without explicitly reading all rows
- * 2) Having numrows accessible
- */
- if (ct_res_info(sybase_ptr->cmd, CS_NUMDATA, &num_fields, CS_UNUSED, NULL)!=CS_SUCCEED) {
- return NULL;
- }
-
- result = (sybase_result *) emalloc(sizeof(sybase_result));
- result->data = (zval **) safe_emalloc(sizeof(zval *), SYBASE_ROWS_BLOCK, 0);
- result->fields = NULL;
- result->sybase_ptr = sybase_ptr;
- result->cur_field=result->cur_row=result->num_rows=0;
- result->num_fields = num_fields;
- result->last_retcode = 0;
- result->store= store;
- result->blocks_initialized= 1;
- result->tmp_buffer = (char **) safe_emalloc(sizeof(char *), num_fields, 0);
- result->lengths = (CS_INT *) safe_emalloc(sizeof(CS_INT), num_fields, 0);
- result->indicators = (CS_SMALLINT *) safe_emalloc(sizeof(CS_INT), num_fields, 0);
- result->datafmt = (CS_DATAFMT *) safe_emalloc(sizeof(CS_DATAFMT), num_fields, 0);
- result->numerics = (unsigned char *) safe_emalloc(sizeof(unsigned char), num_fields, 0);
- result->types = (CS_INT *) safe_emalloc(sizeof(CS_INT), num_fields, 0);
-
- for (i=0; i<num_fields; i++) {
- ct_describe(sybase_ptr->cmd, i+1, &result->datafmt[i]);
- result->types[i] = result->datafmt[i].datatype;
- switch (result->datafmt[i].datatype) {
- case CS_CHAR_TYPE:
- case CS_VARCHAR_TYPE:
- case CS_TEXT_TYPE:
- case CS_IMAGE_TYPE:
- result->datafmt[i].maxlength++;
- result->numerics[i] = 0;
- break;
- case CS_BINARY_TYPE:
- case CS_VARBINARY_TYPE:
- result->datafmt[i].maxlength *= 2;
- result->datafmt[i].maxlength++;
- result->numerics[i] = 0;
- break;
- case CS_BIT_TYPE:
- case CS_TINYINT_TYPE:
- result->datafmt[i].maxlength = 4;
- result->numerics[i] = 1;
- break;
- case CS_SMALLINT_TYPE:
- result->datafmt[i].maxlength = 7;
- result->numerics[i] = 1;
- break;
- case CS_INT_TYPE:
- result->datafmt[i].maxlength = 12;
- result->numerics[i] = 1;
- break;
- case CS_REAL_TYPE:
- case CS_FLOAT_TYPE:
- result->datafmt[i].maxlength = 24;
- result->numerics[i] = 2;
- break;
- case CS_MONEY_TYPE:
- case CS_MONEY4_TYPE:
- result->datafmt[i].maxlength = 24;
- result->numerics[i] = 2;
- break;
- case CS_DATETIME_TYPE:
- case CS_DATETIME4_TYPE:
- result->datafmt[i].maxlength = 30;
- result->numerics[i] = 0;
- break;
- case CS_NUMERIC_TYPE:
- case CS_DECIMAL_TYPE:
- result->datafmt[i].maxlength = result->datafmt[i].precision + 3;
- /* numeric(10) vs numeric(10, 1) */
- result->numerics[i] = (result->datafmt[i].scale == 0) ? 3 : 2;
- break;
- default:
- result->datafmt[i].maxlength++;
- result->numerics[i] = 0;
- break;
- }
- result->tmp_buffer[i] = (char *)emalloc(result->datafmt[i].maxlength);
- result->datafmt[i].datatype = CS_CHAR_TYPE;
- result->datafmt[i].format = CS_FMT_NULLTERM;
- ct_bind(sybase_ptr->cmd, i+1, &result->datafmt[i], result->tmp_buffer[i], &result->lengths[i], &result->indicators[i]);
- }
-
- result->fields = (sybase_field *) safe_emalloc(sizeof(sybase_field), num_fields, 0);
- j=0;
- for (i=0; i<num_fields; i++) {
- char computed_buf[16];
-
- if (result->datafmt[i].namelen>0) {
- result->fields[i].name = estrndup(result->datafmt[i].name, result->datafmt[i].namelen);
- } else {
- if (j>0) {
- snprintf(computed_buf, 16, "computed%d", j);
- } else {
- strcpy(computed_buf, "computed");
- }
- result->fields[i].name = estrdup(computed_buf);
- j++;
- }
- result->fields[i].column_source = STR_EMPTY_ALLOC();
- result->fields[i].max_length = result->datafmt[i].maxlength-1;
- result->fields[i].numeric = result->numerics[i];
- Z_TYPE(result->fields[i]) = result->types[i];
- }
-
- if (buffered) {
- retcode = CS_SUCCEED;
- } else {
- if ((retcode = php_sybase_fetch_result_row(result, -1)) == CS_FAIL) {
- return NULL;
- }
- }
-
- result->last_retcode = retcode;
- return result;
-}
-
-static void php_sybase_query (INTERNAL_FUNCTION_PARAMETERS, int buffered)
-{
- zval **query, **sybase_link_index=NULL;
- zval **store_mode= NULL;
- int id, deadlock_count, store;
- sybase_link *sybase_ptr;
- sybase_result *result;
- CS_INT restype;
- CS_RETCODE retcode;
- enum {
- Q_RESULT, /* Success with results. */
- Q_SUCCESS, /* Success but no results. */
- Q_FAILURE, /* Failure, no results. */
- } status;
-
- store= 1;
- switch(ZEND_NUM_ARGS()) {
- case 1:
- if (zend_get_parameters_ex(1, &query)==FAILURE) {
- RETURN_FALSE;
- }
- id = SybCtG(default_link);
- break;
- case 2:
- if (zend_get_parameters_ex(2, &query, &sybase_link_index)==FAILURE) {
- RETURN_FALSE;
- }
- id = -1;
- break;
- case 3:
- if (zend_get_parameters_ex(3, &query, &sybase_link_index, &store_mode)==FAILURE) {
- RETURN_FALSE;
- }
- if (!buffered) {
- php_error_docref(NULL TSRMLS_CC, E_NOTICE, "cannot use non-storing mode with buffered queries");
- store = 1;
- } else {
- convert_to_long_ex(store_mode);
- store= (Z_LVAL_PP(store_mode) != 0);
- }
- id = -1;
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
-
- ZEND_FETCH_RESOURCE2(sybase_ptr, sybase_link *, sybase_link_index, id, "Sybase-Link", le_link, le_plink);
-
- convert_to_string_ex(query);
-
- /* Fail if we already marked this connection dead. */
- if (sybase_ptr->dead) {
- RETURN_FALSE;
- }
-
- /* Check to see if a previous sybase_unbuffered_query has read all rows */
- if (sybase_ptr->active_result_index) {
- zval *tmp = NULL;
-
- php_error_docref(NULL TSRMLS_CC, E_NOTICE, "called without first fetching all rows from a previous unbuffered query");
- if (sybase_ptr->cmd) {
- ct_cancel(NULL, sybase_ptr->cmd, CS_CANCEL_ALL);
- }
-
- /* Get the resultset and free it */
- ALLOC_ZVAL(tmp);
- Z_LVAL_P(tmp)= sybase_ptr->active_result_index;
- Z_TYPE_P(tmp)= IS_RESOURCE;
- 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);
- }
- #endif
-
- zval_ptr_dtor(&tmp);
- zend_list_delete(sybase_ptr->active_result_index);
- sybase_ptr->active_result_index= 0;
- }
-
- /* Repeat until we don't deadlock. */
- deadlock_count= 0;
- for (;;) {
- result = NULL;
- sybase_ptr->deadlock = 0;
- sybase_ptr->affected_rows = 0;
-
- /* On Solaris 11.5, ct_command() can be moved outside the
- * loop, but not on Linux 11.0.
- */
- if (ct_command(sybase_ptr->cmd, CS_LANG_CMD, Z_STRVAL_PP(query), CS_NULLTERM, CS_UNUSED)!=CS_SUCCEED) {
- /* If this didn't work, the connection is screwed but
- * ct-lib might not set CS_CONSTAT_DEAD. So set our own
- * flag. This happens sometimes when the database is restarted
- * and/or its machine is rebooted, and ct_command() returns
- * CS_BUSY for some reason.
- */
- sybase_ptr->dead = 1;
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Sybase: Connection is dead");
- RETURN_FALSE;
- }
-
- if (ct_send(sybase_ptr->cmd)!=CS_SUCCEED) {
- ct_cancel(NULL, sybase_ptr->cmd, CS_CANCEL_ALL);
- sybase_ptr->dead = 1;
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Sybase: Cannot send command");
- RETURN_FALSE;
- }
-
- /* Use the first result set or succeed/fail status and discard the
- * others. Applications really shouldn't be making calls that
- * return multiple result sets, but if they do then we need to
- * properly read or cancel them or the connection will become
- * unusable.
- */
- if (ct_results(sybase_ptr->cmd, &restype)!=CS_SUCCEED) {
- ct_cancel(NULL, sybase_ptr->cmd, CS_CANCEL_ALL);
- sybase_ptr->dead = 1;
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Sybase: Cannot read results");
- RETURN_FALSE;
- }
- switch ((int) restype) {
- case CS_CMD_FAIL:
- default:
- status = Q_FAILURE;
- break;
- case CS_CMD_SUCCEED:
- case CS_CMD_DONE: {
- CS_INT row_count;
- if (ct_res_info(sybase_ptr->cmd, CS_ROW_COUNT, &row_count, CS_UNUSED, NULL)==CS_SUCCEED) {
- sybase_ptr->affected_rows = (long)row_count;
- }
- }
- /* Fall through */
- case CS_COMPUTEFMT_RESULT:
- case CS_ROWFMT_RESULT:
- case CS_DESCRIBE_RESULT:
- case CS_MSG_RESULT:
- buffered= 0; /* These queries have no need for buffering */
- status = Q_SUCCESS;
- break;
- case CS_COMPUTE_RESULT:
- case CS_CURSOR_RESULT:
- case CS_PARAM_RESULT:
- case CS_ROW_RESULT:
- case CS_STATUS_RESULT:
- result = php_sybase_fetch_result_set(sybase_ptr, buffered, store);
- if (result == NULL) {
- ct_cancel(NULL, sybase_ptr->cmd, CS_CANCEL_ALL);
- RETURN_FALSE;
- }
- status = Q_RESULT;
- break;
- }
-
- /* Check for left-over results */
- if (!buffered && status != Q_RESULT) {
- while ((retcode = ct_results(sybase_ptr->cmd, &restype))==CS_SUCCEED) {
- switch ((int) restype) {
- case CS_CMD_SUCCEED:
- case CS_CMD_DONE:
- break;
-
- case CS_CMD_FAIL:
- status = Q_FAILURE;
- break;
-
- case CS_COMPUTE_RESULT:
- case CS_CURSOR_RESULT:
- case CS_PARAM_RESULT:
- case CS_ROW_RESULT:
- if (status != Q_RESULT) {
- result = php_sybase_fetch_result_set(sybase_ptr, buffered, store);
- if (result == NULL) {
- ct_cancel(NULL, sybase_ptr->cmd, CS_CANCEL_ALL);
- sybase_ptr->dead = 1;
- RETURN_FALSE;
- }
- status = Q_RESULT;
- retcode = result->last_retcode;
- } else {
- /* Unexpected results, cancel them. */
- ct_cancel(NULL, sybase_ptr->cmd, CS_CANCEL_CURRENT);
- }
- break;
- case CS_STATUS_RESULT:
- /* Unexpected results, cancel them. */
- ct_cancel(NULL, sybase_ptr->cmd, CS_CANCEL_CURRENT);
- break;
-
- default:
- status = Q_FAILURE;
- break;
- }
- if (status == Q_FAILURE) {
- ct_cancel(NULL, sybase_ptr->cmd, CS_CANCEL_ALL);
- }
- if (retcode == CS_END_RESULTS) {
- break;
- }
- }
- switch (retcode) {
- case CS_END_RESULTS:
- /* Normal. */
- break;
-
- case CS_FAIL:
- /* Hopefully this either cleans up the connection, or the
- * connection ends up marked dead so it will be reopened
- * if it is persistent. We may want to do
- * ct_close(CS_FORCE_CLOSE) if ct_cancel() fails; see the
- * doc for ct_results()==CS_FAIL.
- */
- ct_cancel(NULL, sybase_ptr->cmd, CS_CANCEL_ALL);
- /* Don't take chances with the vagaries of ct-lib. Mark it
- * dead ourselves.
- */
- sybase_ptr->dead = 1;
- case CS_CANCELED:
- default:
- status = Q_FAILURE;
- break;
- }
- }
-
- /* 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\n", deadlock_count- 1, SybCtG(deadlock_retry_count));
- if (result != NULL) {
- _free_sybase_result(result);
- }
- break;
- }
-
- /* If query completed without deadlock, break out of the loop.
- * Sometimes deadlock results in failures and sometimes not,
- * it seems to depend on the server flavor. But we want to
- * retry all deadlocks.
- */
- if (sybase_ptr->dead || sybase_ptr->deadlock == 0) {
- break;
- }
-
- /* Get rid of any results we may have fetched. This happens:
- * e.g., our result set may be a stored procedure status which
- * is returned even if the stored procedure deadlocks. As an
- * 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);
- }
- }
-
- if (status == Q_SUCCESS) {
- RETURN_TRUE;
- }
-
- if (status == Q_FAILURE) {
- if (result != NULL) {
- _free_sybase_result(result);
- }
- RETURN_FALSE;
- }
-
- /* Indicate we have data in case of buffered queries */
- id= ZEND_REGISTER_RESOURCE(return_value, result, le_result);
- sybase_ptr->active_result_index= buffered ? id : 0;
-}
-
-/* {{{ proto int sybase_query(string query [, int link_id])
- Send Sybase query */
-PHP_FUNCTION(sybase_query)
-{
- php_sybase_query(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0);
-}
-/* }}} */
-
-/* {{{ proto int sybase_unbuffered_query(string query [, int link_id])
- Send Sybase query */
-PHP_FUNCTION(sybase_unbuffered_query)
-{
- php_sybase_query(INTERNAL_FUNCTION_PARAM_PASSTHRU, 1);
-}
-
-/* {{{ proto bool sybase_free_result(int result)
- Free result memory */
-PHP_FUNCTION(sybase_free_result)
-{
- zval **sybase_result_index;
- sybase_result *result;
-
- if (ZEND_NUM_ARGS() !=1 || zend_get_parameters_ex(1, &sybase_result_index) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- if (Z_TYPE_PP(sybase_result_index) == IS_RESOURCE && Z_LVAL_PP(sybase_result_index) == 0) {
- RETURN_FALSE;
- }
-
- ZEND_FETCH_RESOURCE(result, sybase_result *, sybase_result_index, -1, "Sybase result", le_result);
-
- /* Did we fetch up until the end? */
- if (result->last_retcode != CS_END_DATA && result->last_retcode != CS_END_RESULTS) {
- /* php_error_docref(NULL TSRMLS_CC, E_WARNING, "Sybase: Cancelling the rest of the results\n"); */
- ct_cancel(NULL, result->sybase_ptr->cmd, CS_CANCEL_ALL);
- php_sybase_finish_results(result);
- }
-
- zend_list_delete(Z_LVAL_PP(sybase_result_index));
- RETURN_TRUE;
-}
-
-/* }}} */
-
-/* {{{ proto string sybase_get_last_message(void)
- Returns the last message from server (over min_message_severity) */
-PHP_FUNCTION(sybase_get_last_message)
-{
- RETURN_STRING(SybCtG(server_message), 1);
-}
-/* }}} */
-
-/* {{{ proto int sybase_num_rows(int result)
- Get number of rows in result */
-PHP_FUNCTION(sybase_num_rows)
-{
- zval **sybase_result_index;
- sybase_result *result;
-
- if (ZEND_NUM_ARGS() !=1 || zend_get_parameters_ex(1, &sybase_result_index) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(result, sybase_result *, sybase_result_index, -1, "Sybase result", le_result);
-
- Z_LVAL_P(return_value) = result->num_rows;
- Z_TYPE_P(return_value) = IS_LONG;
-}
-
-/* }}} */
-
-/* {{{ proto int sybase_num_fields(int result)
- Get number of fields in result */
-PHP_FUNCTION(sybase_num_fields)
-{
- zval **sybase_result_index;
- sybase_result *result;
-
- if (ZEND_NUM_ARGS() !=1 || zend_get_parameters_ex(1, &sybase_result_index) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(result, sybase_result *, sybase_result_index, -1, "Sybase result", le_result);
-
- Z_LVAL_P(return_value) = result->num_fields;
- Z_TYPE_P(return_value) = IS_LONG;
-}
-
-/* }}} */
-
-/* {{{ proto array sybase_fetch_row(int result)
- Get row as enumerated array */
-PHP_FUNCTION(sybase_fetch_row)
-{
- zval **sybase_result_index;
- int i;
- sybase_result *result;
- zval *field_content;
-
- if (ZEND_NUM_ARGS() !=1 || zend_get_parameters_ex(1, &sybase_result_index) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(result, sybase_result *, sybase_result_index, -1, "Sybase result", le_result);
-
- /* Unbuffered? */
- if (result->last_retcode != CS_END_DATA && result->last_retcode != CS_END_RESULTS) {
- php_sybase_fetch_result_row(result, 1);
- }
-
- /* At the end? */
- if (result->cur_row >= result->num_rows) {
- RETURN_FALSE;
- }
-
- array_init(return_value);
- for (i=0; i<result->num_fields; i++) {
- ALLOC_ZVAL(field_content);
- *field_content = result->data[result->store ? result->cur_row : 0][i];
- INIT_PZVAL(field_content);
- zval_copy_ctor(field_content);
- zend_hash_index_update(Z_ARRVAL_P(return_value), i, (void *) &field_content, sizeof(zval* ), NULL);
- }
- result->cur_row++;
-}
-
-/* }}} */
-
-static void php_sybase_fetch_hash(INTERNAL_FUNCTION_PARAMETERS, int numerics)
-{
- zval **sybase_result_index;
- sybase_result *result;
- int i, j;
- zval *tmp;
- char name[32];
-
- if (ZEND_NUM_ARGS() !=1 || zend_get_parameters_ex(1, &sybase_result_index) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(result, sybase_result *, sybase_result_index, -1, "Sybase result", le_result);
-
- /* Unbuffered ? Fetch next row */
- if (result->last_retcode != CS_END_DATA && result->last_retcode != CS_END_RESULTS) {
- php_sybase_fetch_result_row(result, 1);
- }
-
- /* At the end? */
- if (result->cur_row >= result->num_rows) {
- RETURN_FALSE;
- }
-
- array_init(return_value);
-
- j= 1;
- for (i=0; i<result->num_fields; i++) {
- ALLOC_ZVAL(tmp);
- *tmp = result->data[result->store ? result->cur_row : 0][i];
- INIT_PZVAL(tmp);
- if (PG(magic_quotes_runtime) && Z_TYPE_P(tmp) == IS_STRING) {
- Z_STRVAL_P(tmp) = php_addslashes(Z_STRVAL_P(tmp), Z_STRLEN_P(tmp), &Z_STRLEN_P(tmp), 0 TSRMLS_CC);
- } else {
- zval_copy_ctor(tmp);
- }
- if (numerics) {
- zend_hash_index_update(Z_ARRVAL_P(return_value), i, (void *) &tmp, sizeof(zval *), NULL);
- tmp->refcount++;
- }
-
- if (zend_hash_exists(Z_ARRVAL_P(return_value), result->fields[i].name, strlen(result->fields[i].name)+1)) {
- snprintf(name, 32, "%s%d", result->fields[i].name, j);
- result->fields[i].name= estrdup(name);
- j++;
- }
- zend_hash_update(Z_ARRVAL_P(return_value), result->fields[i].name, strlen(result->fields[i].name)+1, (void *) &tmp, sizeof(zval *), NULL);
- }
- result->cur_row++;
-}
-
-
-/* {{{ proto object sybase_fetch_object(int result [, mixed object])
- Fetch row as object */
-PHP_FUNCTION(sybase_fetch_object)
-{
- zval **object= NULL;
- zval *sybase_result_index;
- zend_class_entry *ce= NULL;
-
- /* Was a second parameter given? */
- if (2 == ZEND_NUM_ARGS()) {
- if (zend_get_parameters_ex(2, &sybase_result_index, &object) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- switch (Z_TYPE_PP(object)) {
- case IS_OBJECT:
- ce = Z_OBJCE_PP(object);
- break;
- case IS_NULL:
- break;
- default: {
- zend_class_entry **pce = NULL;
-
- convert_to_string_ex(object);
- if (zend_lookup_class(Z_STRVAL_PP(object), Z_STRLEN_PP(object), &pce TSRMLS_CC) == FAILURE) {
- php_error_docref(NULL TSRMLS_CC, E_NOTICE, "Sybase: Class %s has not been declared", Z_STRVAL_PP(object));
- } else {
- ce = *pce;
- }
- }
- }
-
- /* Reset no. of arguments to 1 so that we can use INTERNAL_FUNCTION_PARAM_PASSTHRU */
- ht= 1;
- }
-
- php_sybase_fetch_hash(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0);
- if (Z_TYPE_P(return_value)==IS_ARRAY) {
- object_and_properties_init(
- return_value,
- ce ? ce : ZEND_STANDARD_CLASS_DEF_PTR,
- Z_ARRVAL_P(return_value)
- );
- }
-}
-/* }}} */
-
-/* {{{ proto array sybase_fetch_array(int result)
- Fetch row as array */
-PHP_FUNCTION(sybase_fetch_array)
-{
- php_sybase_fetch_hash(INTERNAL_FUNCTION_PARAM_PASSTHRU, 1);
-}
-/* }}} */
-
-/* {{{ proto array sybase_fetch_assoc(int result)
- Fetch row as array without numberic indices */
-PHP_FUNCTION(sybase_fetch_assoc)
-{
- php_sybase_fetch_hash(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0);
-}
-/* }}} */
-
-/* {{{ proto bool sybase_data_seek(int result, int offset)
- Move internal row pointer */
-PHP_FUNCTION(sybase_data_seek)
-{
- zval **sybase_result_index, **offset;
- sybase_result *result;
-
- if (ZEND_NUM_ARGS()!=2 || zend_get_parameters_ex(2, &sybase_result_index, &offset)==FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
-
- ZEND_FETCH_RESOURCE(result, sybase_result *, sybase_result_index, -1, "Sybase result", le_result);
-
- convert_to_long_ex(offset);
-
- /* Unbuffered ? */
- if (result->last_retcode != CS_END_DATA && result->last_retcode != CS_END_RESULTS && Z_LVAL_PP(offset)>=result->num_rows) {
- php_sybase_fetch_result_row(result, Z_LVAL_PP(offset)+ 1);
- }
-
- if (Z_LVAL_PP(offset)<0 || Z_LVAL_PP(offset)>=result->num_rows) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Sybase: Bad row offset %ld, must be betweem 0 and %d", Z_LVAL_PP(offset), result->num_rows - 1);
- RETURN_FALSE;
- }
-
- result->cur_row = Z_LVAL_PP(offset);
- RETURN_TRUE;
-}
-/* }}} */
-
-static char *php_sybase_get_field_name(CS_INT type)
-{
- switch (type) {
- case CS_CHAR_TYPE:
- case CS_VARCHAR_TYPE:
- case CS_TEXT_TYPE:
- return "string";
- break;
- case CS_IMAGE_TYPE:
- return "image";
- break;
- case CS_BINARY_TYPE:
- case CS_VARBINARY_TYPE:
- return "blob";
- break;
- case CS_BIT_TYPE:
- return "bit";
- break;
- case CS_TINYINT_TYPE:
- case CS_SMALLINT_TYPE:
- case CS_INT_TYPE:
- return "int";
- break;
- case CS_REAL_TYPE:
- case CS_FLOAT_TYPE:
- case CS_NUMERIC_TYPE:
- case CS_DECIMAL_TYPE:
- return "real";
- break;
- case CS_MONEY_TYPE:
- case CS_MONEY4_TYPE:
- return "money";
- break;
- case CS_DATETIME_TYPE:
- case CS_DATETIME4_TYPE:
- return "datetime";
- break;
- default:
- return "unknown";
- break;
- }
-}
-
-
-/* {{{ proto object sybase_fetch_field(int result [, int offset])
- Get field information */
-PHP_FUNCTION(sybase_fetch_field)
-{
- zval **sybase_result_index, **offset;
- int field_offset;
- sybase_result *result;
-
- switch (ZEND_NUM_ARGS()) {
- case 1:
- if (zend_get_parameters_ex(1, &sybase_result_index) == FAILURE) {
- RETURN_FALSE;
- }
- field_offset=-1;
- break;
- case 2:
- if (zend_get_parameters_ex(2, &sybase_result_index, &offset) == FAILURE) {
- RETURN_FALSE;
- }
- convert_to_long_ex(offset);
- field_offset = Z_LVAL_PP(offset);
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
-
- ZEND_FETCH_RESOURCE(result, sybase_result *, sybase_result_index, -1, "Sybase result", le_result);
-
- if (field_offset==-1) {
- field_offset = result->cur_field;
- result->cur_field++;
- }
-
- if (field_offset<0 || field_offset >= result->num_fields) {
- if (ZEND_NUM_ARGS()==2) { /* field specified explicitly */
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Sybase: Bad column offset");
- }
- RETURN_FALSE;
- }
-
- object_init(return_value);
-
- add_property_string(return_value, "name", result->fields[field_offset].name, 1);
- add_property_long(return_value, "max_length", result->fields[field_offset].max_length);
- add_property_string(return_value, "column_source", result->fields[field_offset].column_source, 1);
- add_property_long(return_value, "numeric", result->fields[field_offset].numeric);
- add_property_string(return_value, "type", php_sybase_get_field_name(Z_TYPE(result->fields[field_offset])), 1);
-}
-/* }}} */
-
-
-/* {{{ proto bool sybase_field_seek(int result, int offset)
- Set field offset */
-PHP_FUNCTION(sybase_field_seek)
-{
- zval **sybase_result_index, **offset;
- int field_offset;
- sybase_result *result;
-
- if (ZEND_NUM_ARGS() !=2 || zend_get_parameters_ex(2, &sybase_result_index, &offset) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(result, sybase_result *, sybase_result_index, -1, "Sybase result", le_result);
-
- convert_to_long_ex(offset);
- field_offset = Z_LVAL_PP(offset);
-
- if (field_offset<0 || field_offset >= result->num_fields) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Sybase: Bad column offset");
- RETURN_FALSE;
- }
-
- result->cur_field = field_offset;
- RETURN_TRUE;
-}
-/* }}} */
-
-
-/* {{{ proto string sybase_result(int result, int row, mixed field)
- Get result data */
-PHP_FUNCTION(sybase_result)
-{
- zval **row, **field, **sybase_result_index;
- int field_offset=0;
- sybase_result *result;
-
- if (ZEND_NUM_ARGS() !=3 || zend_get_parameters_ex(3, &sybase_result_index, &row, &field)==FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
-
- ZEND_FETCH_RESOURCE(result, sybase_result *, sybase_result_index, -1, "Sybase result", le_result);
-
- convert_to_long_ex(row);
-
- /* Unbuffered ? */
- if (result->last_retcode != CS_END_DATA && result->last_retcode != CS_END_RESULTS && Z_LVAL_PP(row) >= result->num_rows) {
- php_sybase_fetch_result_row(result, Z_LVAL_PP(row));
- }
-
- if (Z_LVAL_PP(row) < 0 || Z_LVAL_PP(row) >= result->num_rows) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Sybase: Bad row offset (%ld)", Z_LVAL_PP(row));
- RETURN_FALSE;
- }
-
- switch(Z_TYPE_PP(field)) {
- case IS_STRING: {
- int i;
-
- for (i=0; i<result->num_fields; i++) {
- if (!strcasecmp(result->fields[i].name, Z_STRVAL_PP(field))) {
- field_offset = i;
- break;
- }
- }
- if (i>=result->num_fields) { /* no match found */
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Sybase: %s field not found in result", Z_STRVAL_PP(field));
- RETURN_FALSE;
- }
- break;
- }
- default:
- convert_to_long_ex(field);
- field_offset = Z_LVAL_PP(field);
- if (field_offset<0 || field_offset>=result->num_fields) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Sybase: Bad column offset specified");
- RETURN_FALSE;
- }
- break;
- }
-
- *return_value = result->data[Z_LVAL_PP(row)][field_offset];
- zval_copy_ctor(return_value);
-}
-/* }}} */
-
-
-/* {{{ proto int sybase_affected_rows([int link_id])
- Get number of affected rows in last query */
-PHP_FUNCTION(sybase_affected_rows)
-{
- zval **sybase_link_index;
- sybase_link *sybase_ptr;
- int id;
-
- switch(ZEND_NUM_ARGS()) {
- case 0:
- id = php_sybase_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU);
- break;
- case 1:
- if (zend_get_parameters_ex(1, &sybase_link_index) == FAILURE) {
- RETURN_FALSE;
- }
- id = -1;
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
-
- ZEND_FETCH_RESOURCE2(sybase_ptr, sybase_link *, sybase_link_index, id, "Sybase-Link", le_link, le_plink);
-
- Z_LVAL_P(return_value) = sybase_ptr->affected_rows;
- Z_TYPE_P(return_value) = IS_LONG;
-}
-/* }}} */
-
-
-PHP_MINFO_FUNCTION(sybase)
-{
- char buf[32];
-
- php_info_print_table_start();
- php_info_print_table_header(2, "Sybase_CT Support", "enabled" );
- sprintf(buf, "%ld", SybCtG(num_persistent));
- php_info_print_table_row(2, "Active Persistent Links", buf);
- sprintf(buf, "%ld", SybCtG(num_links));
- php_info_print_table_row(2, "Active Links", buf);
- sprintf(buf, "%ld", SybCtG(min_server_severity));
- php_info_print_table_row(2, "Min server severity", buf);
- sprintf(buf, "%ld", SybCtG(min_client_severity));
- php_info_print_table_row(2, "Min client severity", buf);
- php_info_print_table_row(2, "Application Name", SybCtG(appname));
- sprintf(buf, "%ld", SybCtG(deadlock_retry_count));
- php_info_print_table_row(2, "Deadlock retry count", buf);
- php_info_print_table_end();
-
- DISPLAY_INI_ENTRIES();
-}
-
-
-/* {{{ proto void sybase_min_client_severity(int severity)
- Sets minimum client severity */
-PHP_FUNCTION(sybase_min_client_severity)
-{
- zval **severity;
-
- if (ZEND_NUM_ARGS() !=1 || zend_get_parameters_ex(1, &severity) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long_ex(severity);
- SybCtG(min_client_severity) = Z_LVAL_PP(severity);
-}
-/* }}} */
-
-
-/* {{{ proto void sybase_min_server_severity(int severity)
- Sets minimum server severity */
-PHP_FUNCTION(sybase_min_server_severity)
-{
- zval **severity;
-
- if (ZEND_NUM_ARGS() !=1 || zend_get_parameters_ex(1, &severity) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long_ex(severity);
- SybCtG(min_server_severity) = Z_LVAL_PP(severity);
-}
-/* }}} */
-
-/* {{{ proto void sybase_deadlock_retry_count(int retry_count)
- Sets deadlock retry count */
-PHP_FUNCTION(sybase_deadlock_retry_count)
-{
- zval **retry_count;
-
- if (ZEND_NUM_ARGS() !=1 || zend_get_parameters_ex(1, &retry_count) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long_ex(retry_count);
- SybCtG(deadlock_retry_count) = Z_LVAL_PP(retry_count);
-}
-/* }}} */
-
-
-/* {{{ proto bool sybase_set_message_handler(mixed error_func [, resource connection])
- Set the error handler, to be called when a server message is raised.
- If error_func is NULL the handler will be deleted */
-PHP_FUNCTION(sybase_set_message_handler)
-{
- zval **callback, **param, **sybase_link_index= NULL;
- char *name;
- sybase_link *sybase_ptr;
-
- switch (ZEND_NUM_ARGS()) {
- case 1: /* Default message handler */
- if (zend_get_parameters_ex(1, &param) == FAILURE) {
- RETURN_FALSE;
- }
- callback = &SybCtG(callback_name);
- break;
-
- case 2: /* Connection-based message handler */
- if (zend_get_parameters_ex(2, &param, &sybase_link_index) == FAILURE) {
- RETURN_FALSE;
- }
- ZEND_FETCH_RESOURCE2(sybase_ptr, sybase_link *, sybase_link_index, -1, "Sybase-Link", le_link, le_plink);
- callback = &sybase_ptr->callback_name;
- break;
-
- default:
- WRONG_PARAM_COUNT;
- }
-
- /* Clean out old callback */
- if (*callback) {
- zval_ptr_dtor(callback);
- *callback = NULL;
- }
-
- switch (Z_TYPE_PP(param)) {
- case IS_NULL:
- /* Return TRUE to indicate we deleted the message handler */
- RETURN_TRUE;
- break;
-
- case IS_ARRAY:
- case IS_STRING:
- /* Either "function", array("class", "function") or array($object, "function") */
- if (!zend_is_callable(*param, 0, &name)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "First argumented is expected to be a valid callback, '%s' was given", name);
- efree(name);
- RETURN_FALSE;
- }
- efree(name);
- break;
-
- default:
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "First argumented is expected to be either NULL, an array or string, %s given", zend_zval_type_name(*param));
- RETURN_FALSE;
- }
-
- ALLOC_ZVAL(*callback);
- **callback = **param;
- INIT_PZVAL(*callback);
- zval_copy_ctor(*callback);
- RETURN_TRUE;
-}
-/* }}} */
-
-
-#endif
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- */
diff --git a/ext/sybase_ct/php_sybase_ct.h b/ext/sybase_ct/php_sybase_ct.h
deleted file mode 100644
index 5eb7c0285f..0000000000
--- a/ext/sybase_ct/php_sybase_ct.h
+++ /dev/null
@@ -1,131 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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. |
- +----------------------------------------------------------------------+
- | Authors: Zeev Suraski <zeev@zend.com> |
- | Timm Friebe <php_sybase_ct@thekid.de> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifndef PHP_SYBASE_CT_H
-#define PHP_SYBASE_CT_H
-
-#if HAVE_SYBASE_CT
-
-#define CTLIB_VERSION CS_VERSION_100
-
-extern zend_module_entry sybase_module_entry;
-#define sybase_module_ptr &sybase_module_entry
-
-PHP_MINIT_FUNCTION(sybase);
-PHP_MSHUTDOWN_FUNCTION(sybase);
-PHP_RINIT_FUNCTION(sybase);
-PHP_RSHUTDOWN_FUNCTION(sybase);
-PHP_MINFO_FUNCTION(sybase);
-
-PHP_FUNCTION(sybase_connect);
-PHP_FUNCTION(sybase_pconnect);
-PHP_FUNCTION(sybase_close);
-PHP_FUNCTION(sybase_select_db);
-PHP_FUNCTION(sybase_query);
-PHP_FUNCTION(sybase_unbuffered_query);
-PHP_FUNCTION(sybase_free_result);
-PHP_FUNCTION(sybase_get_last_message);
-PHP_FUNCTION(sybase_num_rows);
-PHP_FUNCTION(sybase_num_fields);
-PHP_FUNCTION(sybase_fetch_row);
-PHP_FUNCTION(sybase_fetch_array);
-PHP_FUNCTION(sybase_fetch_assoc);
-PHP_FUNCTION(sybase_fetch_object);
-PHP_FUNCTION(sybase_data_seek);
-PHP_FUNCTION(sybase_result);
-PHP_FUNCTION(sybase_affected_rows);
-PHP_FUNCTION(sybase_field_seek);
-PHP_FUNCTION(sybase_min_client_severity);
-PHP_FUNCTION(sybase_min_server_severity);
-PHP_FUNCTION(sybase_fetch_field);
-PHP_FUNCTION(sybase_set_message_handler);
-PHP_FUNCTION(sybase_deadlock_retry_count);
-
-#include <ctpublic.h>
-
-ZEND_BEGIN_MODULE_GLOBALS(sybase)
- long default_link;
- long num_links,num_persistent;
- long max_links,max_persistent;
- long login_timeout;
- long allow_persistent;
- char *appname;
- char *hostname;
- char *server_message;
- long min_server_severity, min_client_severity;
- long deadlock_retry_count;
- zval *callback_name;
- CS_CONTEXT *context;
-ZEND_END_MODULE_GLOBALS(sybase)
-
-typedef struct {
- CS_CONNECTION *connection;
- CS_COMMAND *cmd;
- int valid;
- int deadlock;
- int dead;
- int active_result_index;
- long affected_rows;
- zval *callback_name;
-} sybase_link;
-
-#define SYBASE_ROWS_BLOCK 128
-
-typedef struct {
- char *name,*column_source;
- int max_length, numeric;
- CS_INT type;
-} sybase_field;
-
-typedef struct {
- pval **data;
- sybase_field *fields;
- sybase_link *sybase_ptr;
- int cur_row,cur_field;
- int num_rows,num_fields;
-
- /* For unbuffered reads */
- CS_INT *lengths;
- CS_SMALLINT *indicators;
- char **tmp_buffer;
- unsigned char *numerics;
- CS_INT *types;
- CS_DATAFMT *datafmt;
- int blocks_initialized;
- CS_RETCODE last_retcode;
- int store;
-} sybase_result;
-
-#ifdef ZTS
-# define SybCtG(v) TSRMG(sybase_globals_id, zend_sybase_globals *, v)
-#else
-# define SybCtG(v) (sybase_globals.v)
-#endif
-
-#else
-
-#define sybase_module_ptr NULL
-
-#endif
-
-#define phpext_sybase_ct_ptr sybase_module_ptr
-
-#endif /* PHP_SYBASE_CT_H */
diff --git a/ext/sybase_ct/sybase_ct.dsp b/ext/sybase_ct/sybase_ct.dsp
deleted file mode 100644
index be2f890bab..0000000000
--- a/ext/sybase_ct/sybase_ct.dsp
+++ /dev/null
@@ -1,114 +0,0 @@
-# Microsoft Developer Studio Project File - Name="sybase_ct" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=sybase_ct - Win32 Release_TS
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "sybase_ct.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "sybase_ct.mak" CFG="sybase_ct - Win32 Release_TS"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "sybase_ct - Win32 Release_TS" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "sybase_ct - Win32 Debug_TS" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "sybase_ct - Win32 Release_TS"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release_TS"
-# PROP BASE Intermediate_Dir "Release_TS"
-# PROP BASE Ignore_Export_Lib 0
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release_TS"
-# PROP Intermediate_Dir "Release_TS"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MT /W3 /GX /O2 /I "..\.." /I "..\..\..\Zend" /I "..\..\..\TSRM" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "SYBASE_CT_EXPORTS" /D "COMPILE_DL_SYBASE_CT" /D ZTS=1 /YX /FD /c
-# ADD CPP /nologo /MD /W3 /GX /O2 /I "..\.." /I "..\..\Zend" /I "..\..\TSRM" /I "..\..\main" /D "WIN32" /D "SYBASE_CT_EXPORTS" /D "COMPILE_DL_SYBASE_CT" /D HAVE_SYBASE_CT=1 /D ZTS=1 /D ZEND_DEBUG=0 /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "ZEND_WIN32" /D "PHP_WIN32" /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x406 /d "NDEBUG"
-# ADD RSC /l 0x406 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib php5ts.lib /nologo /dll /machine:I386
-# ADD LINK32 php5ts.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib libct.lib libcs.lib /nologo /dll /machine:I386 /out:"..\..\Release_TS/php_sybase_ct.dll" /libpath:"..\..\Release_TS" /libpath:"..\..\Release_TS_Inline"
-# SUBTRACT LINK32 /pdb:none
-
-!ELSEIF "$(CFG)" == "sybase_ct - Win32 Debug_TS"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Debug_TS"
-# PROP BASE Intermediate_Dir "Debug_TS"
-# PROP BASE Ignore_Export_Lib 0
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Debug_TS"
-# PROP Intermediate_Dir "Debug_TS"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MT /W3 /GX /O2 /I "..\.." /I "..\..\Zend" /I "..\..\TSRM" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "SYBASE_CT_EXPORTS" /D "COMPILE_DL_SYBASE_CT" /D ZTS=1 /YX /FD /c
-# ADD CPP /nologo /MDd /W3 /GX /O2 /I "..\.." /I "..\..\Zend" /I "..\..\TSRM" /I "..\..\main" /D ZEND_DEBUG=1 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "SYBASE_CT_EXPORTS" /D "COMPILE_DL_SYBASE_CT" /D ZTS=1 /D "ZEND_WIN32" /D "PHP_WIN32" /D HAVE_SYBASE_CT=1 /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x406 /d "NDEBUG"
-# ADD RSC /l 0x406 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib php5ts_debug.lib /nologo /dll /machine:I386
-# ADD LINK32 php5ts_debug.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 /out:"..\..\Debug_TS/php_sybase_ct.dll" /libpath:"..\..\Debug_TS"
-
-!ENDIF
-
-# Begin Target
-
-# Name "sybase_ct - Win32 Release_TS"
-# Name "sybase_ct - Win32 Debug_TS"
-# Begin Group "Source Files"
-
-# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
-# Begin Source File
-
-SOURCE=.\php_sybase_ct.c
-# End Source File
-# End Group
-# Begin Group "Header Files"
-
-# PROP Default_Filter "h;hpp;hxx;hm;inl"
-# Begin Source File
-
-SOURCE=.\php_sybase_ct.h
-# End Source File
-# End Group
-# Begin Group "Resource Files"
-
-# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
-# End Group
-# End Target
-# End Project
diff --git a/ext/sybase_ct/tests/bug22403.phpt b/ext/sybase_ct/tests/bug22403.phpt
deleted file mode 100644
index c9a2186f39..0000000000
--- a/ext/sybase_ct/tests/bug22403.phpt
+++ /dev/null
@@ -1,88 +0,0 @@
---TEST--
-Sybase-CT bug #22403 (crash when executing a stored procedure without parameters)
---SKIPIF--
-<?php require('skipif.inc'); ?>
---FILE--
-<?php
-/* This file is part of PHP test framework for ext/sybase_ct
- *
- * $Id$
- */
-
- require('test.inc');
-
- $db= sybase_connect_ex();
- sybase_set_message_handler('sybase_msg_handler');
- error_reporting(error_reporting() & !E_NOTICE); // Suppress notices
-
- // Check if stored procedure already exists
- $sp_name= basename(__FILE__, '.php');
- var_dump(sybase_select_db('tempdb', $db));
- if (!sybase_select_single($db, 'select object_id("'.$sp_name.'")')) {
- echo "Stored procedure {$sp_name} not found, creating\n";
- var_dump(sybase_query('
- create proc '.$sp_name.' (@param int)
- as
- begin
- select @param
- select @param + 1
- return @param
- end
- '));
- } else {
- echo "Stored procedure {$sp_name} found, using\n";
- var_dump(TRUE);
- }
-
- // These don't work
- var_dump(sybase_select_ex($db, 'exec '.$sp_name));
- var_dump(sybase_select_ex($db, 'exec '.$sp_name.' "foo"'));
- var_dump(sybase_select_ex($db, 'exec does_not_exist'));
-
- // These do
- var_dump(sybase_select_ex($db, 'exec '.$sp_name.' NULL'));
- var_dump(sybase_select_ex($db, 'exec '.$sp_name.' 1'));
-
- // Clean up after ourselves
- var_dump(sybase_query('drop proc '.$sp_name));
-
- sybase_close($db);
-?>
---EXPECTF--
-bool(true)
-Stored procedure %s
-bool(true)
->>> Query: exec %s
-*** Caught Sybase Server Message #201 [Severity 16, state 2] at line 0
- %s
-<<< Return: boolean
-bool(false)
->>> Query: exec %s "foo"
-*** Caught Sybase Server Message #257 [Severity 16, state 1] at line 0
- %s
-<<< Return: boolean
-bool(false)
->>> Query: exec does_not_exist
-*** Caught Sybase Server Message #2812 [Severity 16, state 4] at line 1
- %s
-<<< Return: boolean
-bool(false)
->>> Query: exec %s NULL
-<<< Return: resource
-array(1) {
- [0]=>
- array(1) {
- ["computed"]=>
- NULL
- }
-}
->>> Query: exec %s 1
-<<< Return: resource
-array(1) {
- [0]=>
- array(1) {
- ["computed"]=>
- int(1)
- }
-}
-bool(true)
diff --git a/ext/sybase_ct/tests/bug26407.phpt b/ext/sybase_ct/tests/bug26407.phpt
deleted file mode 100644
index b599c73dc5..0000000000
--- a/ext/sybase_ct/tests/bug26407.phpt
+++ /dev/null
@@ -1,91 +0,0 @@
---TEST--
-Sybase-CT bug #26407 (Result set fetching broken around transactions)
---SKIPIF--
-<?php require('skipif.inc'); ?>
---FILE--
-<?php
-/* This file is part of PHP test framework for ext/sybase_ct
- *
- * $Id$
- */
-
- require('test.inc');
-
- $db= sybase_connect_ex();
-
- // Create temporary table
- $table= basename(__FILE__, '.php');
- var_dump(sybase_query('create table #'.$table.' ( the_big_answer int )', $db));
-
- // I
- var_dump(sybase_select_ex($db, '
- begin transaction
- -- anything producing a result set here will fail;
- -- however, print or update statements will work
- select "foo"
- commit
- -- anything afterwards will fail, too
- '));
-
- // II
- var_dump(sybase_select_ex($db, '
- begin transaction
- -- no result returned...
- update #'.$table.' set the_big_answer=42
- commit
- '));
-
- // III
- var_dump(sybase_select_ex($db, '
- select "foo"
- begin transaction
- -- do anything, even return a result set
- commit
- select "bar"
- '));
-
- sybase_close($db);
-?>
---EXPECTF--
-bool(true)
->>> Query:
- begin transaction
- -- anything producing a result set here will fail;
- -- however, print or update statements will work
- select "foo"
- commit
- -- anything afterwards will fail, too
-
-<<< Return: resource
-array(1) {
- [0]=>
- array(1) {
- ["computed"]=>
- string(3) "foo"
- }
-}
->>> Query:
- begin transaction
- -- no result returned...
- update #bug26407 set the_big_answer=42
- commit
-
-<<< Return: boolean
-bool(true)
->>> Query:
- select "foo"
- begin transaction
- -- do anything, even return a result set
- commit
- select "bar"
-
-
-Notice: sybase_query(): Sybase: Unexpected results, cancelling current in %s/test.inc on line %d
-<<< Return: resource
-array(1) {
- [0]=>
- array(1) {
- ["computed"]=>
- string(3) "foo"
- }
-}
diff --git a/ext/sybase_ct/tests/bug27843.phpt b/ext/sybase_ct/tests/bug27843.phpt
deleted file mode 100644
index 30381695a8..0000000000
--- a/ext/sybase_ct/tests/bug27843.phpt
+++ /dev/null
@@ -1,54 +0,0 @@
---TEST--
-Sybase-CT bug #27843: notices when query is a stored procedure
---SKIPIF--
-<?php require('skipif.inc'); ?>
---FILE--
-<?php
-/* This file is part of PHP test framework for ext/sybase_ct
- *
- * $Id$
- */
-
- require('test.inc');
-
- $db= sybase_connect_ex();
-
- // Check if stored procedure already exists
- $sp_name= basename(__FILE__, '.php');
- var_dump(sybase_select_db('tempdb', $db));
- if (!sybase_select_single($db, 'select object_id("'.$sp_name.'")')) {
- echo "Stored procedure {$sp_name} not found, creating\n";
- var_dump(sybase_query('
- create proc '.$sp_name.'
- as
- begin
- select 1
- end
- '));
- } else {
- echo "Stored procedure {$sp_name} found, using\n";
- var_dump(TRUE);
- }
-
- // Execute stored procedure
- var_dump(sybase_select_ex($db, 'exec '.$sp_name));
-
- // Clean up after ourselves
- var_dump(sybase_query('drop proc '.$sp_name, $db));
-
- sybase_close($db);
-?>
---EXPECTF--
-bool(true)
-Stored procedure %s
-bool(true)
->>> Query: exec bug27843
-<<< Return: resource
-array(1) {
- [0]=>
- array(1) {
- ["computed"]=>
- int(1)
- }
-}
-bool(true)
diff --git a/ext/sybase_ct/tests/bug28354.phpt b/ext/sybase_ct/tests/bug28354.phpt
deleted file mode 100644
index ff6cecb466..0000000000
--- a/ext/sybase_ct/tests/bug28354.phpt
+++ /dev/null
@@ -1,46 +0,0 @@
---TEST--
-Sybase-CT bug #28354 (sybase_free_result crash)
---SKIPIF--
-<?php require('skipif.inc'); ?>
---FILE--
-<?php
-/* This file is part of PHP test framework for ext/sybase_ct
- *
- * $Id$
- */
-
- require('test.inc');
-
- $db= sybase_connect_ex();
- sybase_set_message_handler('sybase_msg_handler');
- error_reporting(error_reporting() & !E_NOTICE); // Suppress notices
-
- // Check if stored procedure already exists
- $sp_name= basename(__FILE__, '.php');
- var_dump(sybase_select_db('tempdb', $db));
- if (!sybase_select_single($db, 'select object_id("'.$sp_name.'")')) {
- echo "Stored procedure {$sp_name} not found, creating\n";
- var_dump(sybase_query('
- create proc '.$sp_name.' as begin
- select @@version
- end
- '));
- } else {
- echo "Stored procedure {$sp_name} found, using\n";
- var_dump(TRUE);
- }
-
- $r= sybase_query('exec '.$sp_name, $db);
- $i= 0;
- while ($row= sybase_fetch_row($r)) {
- var_dump($i++, $row[0]);
- }
- sybase_free_result($r);
- sybase_close($db);
-?>
---EXPECTF--
-bool(true)
-Stored procedure %s
-bool(true)
-int(0)
-string(%d) "%s"
diff --git a/ext/sybase_ct/tests/bug29064.phpt b/ext/sybase_ct/tests/bug29064.phpt
deleted file mode 100644
index 902fe43358..0000000000
--- a/ext/sybase_ct/tests/bug29064.phpt
+++ /dev/null
@@ -1,143 +0,0 @@
---TEST--
-Sybase-CT bug #29064 (Exact numeric/decimal/money datatypes lose precision)
---SKIPIF--
-<?php require('skipif.inc'); ?>
---FILE--
-<?php
-/* This file is part of PHP test framework for ext/sybase_ct
- *
- * $Id$
- */
-
- require('test.inc');
-
- $db= sybase_connect_ex();
-
- // Create a temporary table and fill it with test values
- var_dump(sybase_query('
- create table #test (
- test_decimal decimal(38, 6) null,
- test_numeric numeric(38, 12) null,
- test_money money null,
- test_bigint decimal(38, 0) null,
- test_int int null,
- test_smallmoney smallmoney null,
- test_smallint smallint null,
- test_tinyint tinyint null,
- test_real float null,
- test_double float null
- )
- ', $db));
- var_dump(sybase_query('
- insert into #test (
- test_decimal,
- test_numeric,
- test_money,
- test_bigint,
- test_int,
- test_smallmoney,
- test_smallint,
- test_tinyint,
- test_real,
- test_double
- ) values (
- 12345678901234567890123456789012.123456,
- 12345678901234567890123456.123456789012,
- 123456789012345.1234,
- 12345678901234567890123456789012345678,
- 1234567890,
- 123456.1234,
- 12345,
- 123,
- 123456789.12345679,
- 123456789.12345679
- )
- ', $db));
- var_dump(sybase_query('
- insert into #test (
- test_decimal,
- test_numeric,
- test_money,
- test_bigint,
- test_int,
- test_smallmoney,
- test_smallint,
- test_tinyint,
- test_real,
- test_double
- ) values (
- -12345678901234567890123456789012.123456,
- -12345678901234567890123456.123456789012,
- -123456789012345.1234,
- -12345678901234567890123456789012345678,
- -1234567890,
- -123456.1234,
- -12345,
- 255,
- -123456789.12345679,
- -123456789.12345679
- )
- ', $db));
-
- // Select the data
- var_dump(sybase_select_ex($db, 'select * from #test'));
-
- // Clean up and close connection
- var_dump(sybase_query('drop table #test', $db));
- sybase_close($db);
-?>
---EXPECTF--
-bool(true)
-bool(true)
-bool(true)
->>> Query: select * from #test
-<<< Return: resource
-array(2) {
- [0]=>
- array(10) {
- ["test_decimal"]=>
- string(39) "12345678901234567890123456789012.123456"
- ["test_numeric"]=>
- string(39) "12345678901234567890123456.123456789012"
- ["test_money"]=>
- string(18) "123456789012345.12"
- ["test_bigint"]=>
- string(38) "12345678901234567890123456789012345678"
- ["test_int"]=>
- int(1234567890)
- ["test_smallmoney"]=>
- float(123456.12)
- ["test_smallint"]=>
- int(12345)
- ["test_tinyint"]=>
- int(123)
- ["test_real"]=>
- string(16) "123456789.123457"
- ["test_double"]=>
- string(16) "123456789.123457"
- }
- [1]=>
- array(10) {
- ["test_decimal"]=>
- string(40) "-12345678901234567890123456789012.123456"
- ["test_numeric"]=>
- string(40) "-12345678901234567890123456.123456789012"
- ["test_money"]=>
- string(19) "-123456789012345.12"
- ["test_bigint"]=>
- string(39) "-12345678901234567890123456789012345678"
- ["test_int"]=>
- int(-1234567890)
- ["test_smallmoney"]=>
- float(-123456.12)
- ["test_smallint"]=>
- int(-12345)
- ["test_tinyint"]=>
- int(255)
- ["test_real"]=>
- string(17) "-123456789.123457"
- ["test_double"]=>
- string(17) "-123456789.123457"
- }
-}
-bool(true)
diff --git a/ext/sybase_ct/tests/bug6339.phpt b/ext/sybase_ct/tests/bug6339.phpt
deleted file mode 100644
index 3b0a072b4a..0000000000
--- a/ext/sybase_ct/tests/bug6339.phpt
+++ /dev/null
@@ -1,24 +0,0 @@
---TEST--
-Sybase-CT bug #6339 (invalid Sybase-link resource)
---SKIPIF--
-<?php require('skipif.inc'); ?>
---FILE--
-<?php
-/* This file is part of PHP test framework for ext/sybase_ct
- *
- * $Id$
- */
-
- require('test.inc');
-
- // Suppress "Changed database context" warnings
- sybase_min_server_severity(11);
- sybase_connect(HOST, USER, PASSWORD);
- var_dump(sybase_fetch_row(sybase_query('select 1')));
- sybase_close();
-?>
---EXPECTF--
-array(1) {
- [0]=>
- int(1)
-}
diff --git a/ext/sybase_ct/tests/skipif.inc b/ext/sybase_ct/tests/skipif.inc
deleted file mode 100644
index 8c07f7e61e..0000000000
--- a/ext/sybase_ct/tests/skipif.inc
+++ /dev/null
@@ -1,8 +0,0 @@
-<?php
-/* This file is part of PHP test framework for ext/sybase_ct
- *
- * $Id$
- */
-
- if (!extension_loaded('sybase_ct')) die('Sybase-CT extension not loaded');
-?>
diff --git a/ext/sybase_ct/tests/test.inc b/ext/sybase_ct/tests/test.inc
deleted file mode 100644
index 48aa7d23b3..0000000000
--- a/ext/sybase_ct/tests/test.inc
+++ /dev/null
@@ -1,84 +0,0 @@
-<?php
-/* This file is part of PHP test framework for ext/sybase_ct
- *
- * $Id$
- */
-
- // Change if needed
- define('HOST', '****');
- define('USER', '****');
- define('PASSWORD', '****');
-
- // {{{ bool sybase_msg_handler(int msgnumber, int severity, int state, int line, string text)
- // Handles server messages
- function sybase_msg_handler($msgnumber, $severity, $state, $line, $text) {
- printf(
- "*** Caught Sybase Server Message #%d [Severity %d, state %d] at line %d\n '%s'\n",
- $msgnumber,
- $severity,
- $state,
- $line,
- chop($text)
- );
- }
- // }}}
-
- // {{{ public class sybase
- class sybase {
-
- // {{{ public static bool static_handler(int msgnumber, int severity, int state, int line, string text)
- // Handles server messages
- function static_handler($msgnumber, $severity, $state, $line, $text) {
- return sybase_msg_handler($msgnumber, $severity, $state, $line, $text);
- }
- // }}}
-
- // {{{ public bool static_handler(int msgnumber, int severity, int state, int line, string text)
- // Handles server messages
- function handler($msgnumber, $severity, $state, $line, $text) {
- return sybase_msg_handler($msgnumber, $severity, $state, $line, $text);
- }
- // }}}
- }
- // }}}
-
- // {{{ void sybase_set_messagehandler_ex(string handler)
- // Sets the sybase message handler and dumps the result
- function sybase_set_messagehandler_ex($handler) {
- var_dump(sybase_set_message_handler($handler));
- }
-
- // {{{ resource sybase_connect_ex(string charset= NULL, string appname= NULL)
- // Connect to the sybase server using the defines HOST, USER and PASSWORD
- function sybase_connect_ex($charset= NULL, $appname= NULL) {
- sybase_min_server_severity(11); // Suppress "changed database context"
- if (!($db= sybase_connect(HOST, USER, PASSWORD, $charset ? $charset : 'iso_1', $appname))) {
- die('Connect to '.USER.'@'.HOST.' failed (using password: '.(PASSWORD ? 'yes' : 'no').')');
- }
- return $db;
- }
- // }}}
-
- // {{{ void sybase_select_ex(resource dbh, string query)
- // Returns all fetched rows from an SQL query
- function sybase_select_ex($dbh, $query) {
- printf(">>> Query: %s\n", $query);
- $h= sybase_query($query, $dbh);
- printf("<<< Return: %s\n", gettype($h));
- flush();
- if (!is_resource($h)) return $h;
-
- $return= array();
- while ($row= sybase_fetch_assoc($h)) {
- $return[]= $row;
- }
- return $return;
- }
-
- // {{{ mixed sybase_select_single(resource dbh, string query)
- // Fires an SQL query and returns the first value from the first row
- function sybase_select_single($dbh, $query) {
- return array_shift(sybase_fetch_row(sybase_query($query, $dbh)));
- }
- // }}}
-?>
diff --git a/ext/sybase_ct/tests/test_appname.phpt b/ext/sybase_ct/tests/test_appname.phpt
deleted file mode 100644
index 529ce38597..0000000000
--- a/ext/sybase_ct/tests/test_appname.phpt
+++ /dev/null
@@ -1,65 +0,0 @@
---TEST--
-Sybase-CT application name
---SKIPIF--
-<?php require('skipif.inc'); ?>
---FILE--
-<?php
-/* This file is part of PHP test framework for ext/sybase_ct
- *
- * $Id$
- */
-
- require('test.inc');
-
- // {{{ bool compare_string(string expect, string actual)
- // Compares expect to a trimmed version of actual
- function compare_string($expect, $actual) {
- $trimmed= rtrim($actual, ' ');
- return (0 == strncmp($expect, $trimmed, strlen($trimmed)));
- }
- // }}}
-
- $program_name= basename(__FILE__, '.php');
- $hostname= 'php.net';
- ini_set('sybct.hostname', $hostname);
-
- $db= sybase_connect_ex(NULL, $program_name);
- $r= sybase_select_ex($db, '
- select
- hostname,
- program_name
- from
- master..sysprocesses
- where
- program_name = "'.$program_name.'"'
- );
-
- var_dump(
- $r,
- compare_string($program_name, $r[0]['program_name']),
- compare_string($hostname, $r[0]['hostname'])
- );
-
- sybase_close($db);
-?>
---EXPECTF--
->>> Query:
- select
- hostname,
- program_name
- from
- master..sysprocesses
- where
- program_name = "test_appname"
-<<< Return: resource
-array(1) {
- [0]=>
- array(2) {
- ["hostname"]=>
- string(10) "php.net%s"
- ["program_name"]=>
- string(16) "test_appname%s"
- }
-}
-bool(true)
-bool(true)
diff --git a/ext/sybase_ct/tests/test_connect.phpt b/ext/sybase_ct/tests/test_connect.phpt
deleted file mode 100644
index e1e3eead38..0000000000
--- a/ext/sybase_ct/tests/test_connect.phpt
+++ /dev/null
@@ -1,19 +0,0 @@
---TEST--
-Sybase-CT connectivity
---SKIPIF--
-<?php require('skipif.inc'); ?>
---FILE--
-<?php
-/* This file is part of PHP test framework for ext/sybase_ct
- *
- * $Id$
- */
-
- require('test.inc');
-
- $db= sybase_connect_ex();
- var_dump($db);
- sybase_close($db);
-?>
---EXPECTF--
-resource(%d) of type (sybase-ct link)
diff --git a/ext/sybase_ct/tests/test_connectionbased_msghandler.phpt b/ext/sybase_ct/tests/test_connectionbased_msghandler.phpt
deleted file mode 100644
index 72e6b3a8dc..0000000000
--- a/ext/sybase_ct/tests/test_connectionbased_msghandler.phpt
+++ /dev/null
@@ -1,27 +0,0 @@
---TEST--
-Sybase-CT connection-based server message handler
---SKIPIF--
-<?php require('skipif.inc'); ?>
---FILE--
-<?php
-/* This file is part of PHP test framework for ext/sybase_ct
- *
- * $Id$
- */
-
- require('test.inc');
-
- $db= sybase_connect_ex();
- var_dump($db);
- var_dump(sybase_set_message_handler('sybase_msg_handler', $db));
- var_dump(sybase_select_ex($db, 'select getdate(NULL)'));
- sybase_close($db);
-?>
---EXPECTF--
-resource(%d) of type (sybase-ct link)
-bool(true)
->>> Query: select getdate(NULL)
-*** Caught Sybase Server Message #%d [Severity %d, state %d] at line %d
- %s
-<<< Return: boolean
-bool(false)
diff --git a/ext/sybase_ct/tests/test_fetch_object.phpt b/ext/sybase_ct/tests/test_fetch_object.phpt
deleted file mode 100644
index aba5ea938d..0000000000
--- a/ext/sybase_ct/tests/test_fetch_object.phpt
+++ /dev/null
@@ -1,74 +0,0 @@
---TEST--
-Sybase-CT sybase_fetch_object
---SKIPIF--
-<?php
- require('skipif.inc');
-?>
---FILE--
-<?php
-/* This file is part of PHP test framework for ext/sybase_ct
- *
- * $Id$
- */
-
- require('test.inc');
-
- // {{{ class article
- class article { }
- // }}}
-
- // {{{ resource fetch_object(resource db, [mixed arg= NULL])
- // Fetches a resultset and returns it as an object
- function fetch_object($db, $arg= NULL) {
- return sybase_fetch_object(sybase_query('select
- 1 as "id",
- "Hello" as "caption",
- "timm" as "author",
- getdate() as "lastchange"
- ', $db), $arg);
- }
- // }}}
-
- $db= sybase_connect_ex();
-
- // Test with stdClass
- var_export(fetch_object($db)); echo "\n";
-
- // Test with userland class
- var_export(fetch_object($db, 'article')); echo "\n";
-
- // Test with object
- var_export(fetch_object($db, new article())); echo "\n";
-
- // Test with non-existant class
- var_export(fetch_object($db, '***')); echo "\n";
-
- sybase_close($db);
-?>
---EXPECTF--
-class stdClass {
- %s $id = 1;
- %s $caption = 'Hello';
- %s $author = 'timm';
- %s $lastchange = '%s';
-}
-class article {
- %s $id = 1;
- %s $caption = 'Hello';
- %s $author = 'timm';
- %s $lastchange = '%s';
-}
-class article {
- %s $id = 1;
- %s $caption = 'Hello';
- %s $author = 'timm';
- %s $lastchange = '%s';
-}
-
-Notice: sybase_fetch_object(): Sybase: Class *** has not been declared in %s/test_fetch_object.php on line %d
-class stdClass {
- %s $id = 1;
- %s $caption = 'Hello';
- %s $author = 'timm';
- %s $lastchange = '%s';
-}
diff --git a/ext/sybase_ct/tests/test_fields.phpt b/ext/sybase_ct/tests/test_fields.phpt
deleted file mode 100644
index cda606ab21..0000000000
--- a/ext/sybase_ct/tests/test_fields.phpt
+++ /dev/null
@@ -1,76 +0,0 @@
---TEST--
-Sybase-CT sybase_field_* functions
---SKIPIF--
-<?php require('skipif.inc'); ?>
---FILE--
-<?php
-/* This file is part of PHP test framework for ext/sybase_ct
- *
- * $Id$
- */
-
- require('test.inc');
-
- $db= sybase_connect_ex();
-
- // Issue a query
- $q= sybase_unbuffered_query('select
- 1 as "id",
- "Hello" as "caption",
- "timm" as "author",
- getdate() as "lastchange"
- ', $db, FALSE);
- var_dump($q);
-
- var_dump(sybase_num_fields($q));
-
- // Go through each field, dumping it
- while ($field= sybase_fetch_field($q)) {
- var_export($field); echo "\n";
- }
-
- // Seek to the second field and fetch it
- var_dump(sybase_field_seek($q, 1));
- var_export(sybase_fetch_field($q)); echo "\n";
-
- sybase_close($db);
-?>
---EXPECTF--
-resource(%d) of type (sybase-ct result)
-int(4)
-class stdClass {
- %s $name = 'id';
- %s $max_length = 11;
- %s $column_source = '';
- %s $numeric = 1;
- %s $type = 'int';
-}
-class stdClass {
- %s $name = 'caption';
- %s $max_length = 5;
- %s $column_source = '';
- %s $numeric = 0;
- %s $type = 'string';
-}
-class stdClass {
- %s $name = 'author';
- %s $max_length = 4;
- %s $column_source = '';
- %s $numeric = 0;
- %s $type = 'string';
-}
-class stdClass {
- %s $name = 'lastchange';
- %s $max_length = 29;
- %s $column_source = '';
- %s $numeric = 0;
- %s $type = 'datetime';
-}
-bool(true)
-class stdClass {
- %s $name = 'caption';
- %s $max_length = 5;
- %s $column_source = '';
- %s $numeric = 0;
- %s $type = 'string';
-}
diff --git a/ext/sybase_ct/tests/test_long.phpt b/ext/sybase_ct/tests/test_long.phpt
deleted file mode 100644
index 9f940d8efd..0000000000
--- a/ext/sybase_ct/tests/test_long.phpt
+++ /dev/null
@@ -1,80 +0,0 @@
---TEST--
-Sybase-CT select LONG_MAX / LONG_MIN
---SKIPIF--
-<?php require('skipif.inc'); ?>
---FILE--
-<?php
-/* This file is part of PHP test framework for ext/sybase_ct
- *
- * $Id$
- */
-
- require('test.inc');
-
- define('LONG_MAX', is_int(2147483648) ? 9223372036854775807 : 2147483647);
- define('LONG_MIN', -LONG_MAX - 1);
-
- $db= sybase_connect_ex();
- var_dump(sybase_select_db('tempdb', $db));
-
- // Create table and insert some values
- var_dump(sybase_query('create table test_long (value numeric(20, 0))'));
- var_dump(sybase_query('insert test_long values ('.(LONG_MAX - 1).')'));
- var_dump(sybase_query('insert test_long values ('.(LONG_MAX).')'));
- var_dump(sybase_query('insert test_long values ('.(LONG_MAX + 1).')'));
- var_dump(sybase_query('insert test_long values ('.(LONG_MIN + 1).')'));
- var_dump(sybase_query('insert test_long values ('.(LONG_MIN).')'));
- var_dump(sybase_query('insert test_long values ('.(LONG_MIN - 1).')'));
-
- // Select values
- var_dump(sybase_select_ex($db, 'select value from test_long'));
-
- // Drop table
- var_dump(sybase_query('drop table test_long'));
-
- sybase_close($db);
-?>
---EXPECTF--
-bool(true)
-bool(true)
-bool(true)
-bool(true)
-bool(true)
-bool(true)
-bool(true)
-bool(true)
->>> Query: select value from test_long
-<<< Return: resource
-array(6) {
- [0]=>
- array(1) {
- ["value"]=>
- int(%s)
- }
- [1]=>
- array(1) {
- ["value"]=>
- int(%s)
- }
- [2]=>
- array(1) {
- ["value"]=>
- float(%s)
- }
- [3]=>
- array(1) {
- ["value"]=>
- int(-%s)
- }
- [4]=>
- array(1) {
- ["value"]=>
- int(-%s)
- }
- [5]=>
- array(1) {
- ["value"]=>
- float(-%s)
- }
-}
-bool(true)
diff --git a/ext/sybase_ct/tests/test_msghandler.phpt b/ext/sybase_ct/tests/test_msghandler.phpt
deleted file mode 100644
index 742dc684ad..0000000000
--- a/ext/sybase_ct/tests/test_msghandler.phpt
+++ /dev/null
@@ -1,43 +0,0 @@
---TEST--
-Sybase-CT server message handler
---SKIPIF--
-<?php require('skipif.inc'); ?>
---FILE--
-<?php
-/* This file is part of PHP test framework for ext/sybase_ct
- *
- * $Id$
- */
-
- require('test.inc');
-
- $db= sybase_connect_ex();
-
- echo 'Nonexistant: '; sybase_set_messagehandler_ex('function_does_not_exist');
- echo 'Static method: '; sybase_set_messagehandler_ex(array('sybase', 'static_handler'));
- echo 'Instance method: '; sybase_set_messagehandler_ex(array(new sybase(), 'handler'));
- echo 'Lambda function: '; sybase_set_messagehandler_ex(create_function('', 'return FALSE;'));
- echo 'Unset: '; sybase_set_messagehandler_ex(NULL);
- echo 'Incorrect type: '; sybase_set_messagehandler_ex(1);
- echo 'Function: '; sybase_set_messagehandler_ex('sybase_msg_handler');
-
- var_dump(sybase_select_ex($db, 'select getdate(NULL)'));
- sybase_close($db);
-?>
---EXPECTF--
-Nonexistant:
-Warning: sybase_set_message_handler(): First argumented is expected to be a valid callback, 'function_does_not_exist' was given in %s/test.inc on line %d
-bool(false)
-Static method: bool(true)
-Instance method: bool(true)
-Lambda function: bool(true)
-Unset: bool(true)
-Incorrect type:
-Warning: sybase_set_message_handler(): First argumented is expected to be either NULL, an array or string, integer given in %s/test.inc on line %d
-bool(false)
-Function: bool(true)
->>> Query: select getdate(NULL)
-*** Caught Sybase Server Message #%d [Severity %d, state %d] at line %d
- %s
-<<< Return: boolean
-bool(false)
diff --git a/ext/sybase_ct/tests/test_msghandler_handled.phpt b/ext/sybase_ct/tests/test_msghandler_handled.phpt
deleted file mode 100644
index c9ccc1ddeb..0000000000
--- a/ext/sybase_ct/tests/test_msghandler_handled.phpt
+++ /dev/null
@@ -1,69 +0,0 @@
---TEST--
-Sybase-CT server message handler
---SKIPIF--
-<?php require('skipif.inc'); ?>
---FILE--
-<?php
-/* This file is part of PHP test framework for ext/sybase_ct
- *
- * $Id$
- */
-
- require('test.inc');
-
- // {{{ bool sybase_msg_handler(int msgnumber, int severity, int state, int line, string text)
- // Handles server messages
- function user_message_handler($msgnumber, $severity, $state, $line, $text) {
- switch ($msgnumber) {
- case 0: // print message
- printf("!!! %s\n", trim($text));
- return;
-
- case 174: // The function 'GETDATE' requires 0 arguments.
- printf("*** Caught '%s'\n", trim($text));
- return;
- }
- printf("Cannot handle message #%d\n", $msgnumber);
- return FALSE; // Indicate we can't handle this
- }
- // }}}
-
- sybase_set_messagehandler_ex('user_message_handler');
- $db= sybase_connect_ex();
- sybase_min_server_severity(0);
-
- // These are handled
- var_dump(sybase_select_ex($db, 'select getdate(NULL)'));
- var_dump(sybase_select_ex($db, 'print "Hi"'));
-
- // These aren't
- var_dump(sybase_select_ex($db, 'use NULL'));
- var_dump(sybase_select_ex($db, 'select convert(datetime, "notadate")'));
-
- sybase_close($db);
-?>
---EXPECTF--
-bool(true)
->>> Query: select getdate(NULL)
-*** Caught 'The function 'GETDATE' requires 0 arguments.'
-<<< Return: boolean
-bool(false)
->>> Query: print "Hi"
-!!! Hi
-<<< Return: boolean
-bool(true)
->>> Query: use NULL
-Cannot handle message #156
-
-Warning: sybase_query(): Sybase: Server message: Incorrect syntax near the keyword 'NULL'.
- (severity 15, procedure N/A) in %s on line %d
-<<< Return: boolean
-bool(false)
->>> Query: select convert(datetime, "notadate")
-Cannot handle message #249
-
-Warning: sybase_query(): Sybase: Server message: Syntax error during explicit conversion of VARCHAR value 'notadate' to a DATETIME field.
- (severity 16, procedure N/A) in %s on line %d
-<<< Return: resource
-array(0) {
-}
diff --git a/ext/sybase_ct/tests/test_query_nostore.phpt b/ext/sybase_ct/tests/test_query_nostore.phpt
deleted file mode 100644
index 9d717ec2fd..0000000000
--- a/ext/sybase_ct/tests/test_query_nostore.phpt
+++ /dev/null
@@ -1,98 +0,0 @@
---TEST--
-Sybase-CT query without storing
---SKIPIF--
-<?php require('skipif.inc'); ?>
---FILE--
-<?php
-/* This file is part of PHP test framework for ext/sybase_ct
- *
- * $Id$
- */
-
- require('test.inc');
-
- $db= sybase_connect_ex();
-
- // Create test table and insert some data
- var_dump(sybase_query('
- create table #test (
- id numeric(10, 0) primary key not null,
- caption varchar(255) not null,
- author varchar(50) not null,
- link varchar(255) null,
- lastchange datetime default getdate() null
- )
- ', $db));
- var_dump(sybase_query('insert into #test (
- id, caption, author
- ) values (
- 1, "Hello", "timm"
- )
- ', $db));
- var_dump(sybase_query('insert into #test (
- id, caption, author, link
- ) values (
- 2, "World", "thekid", "http://thekid.de/"
- )
- ', $db));
- var_dump(sybase_query('insert into #test (
- id, caption, author
- ) values (
- 3, "PHP", "friebe"
- )
- ', $db));
-
- // Fetch data
- $q= sybase_unbuffered_query('select * from #test order by id', $db, FALSE);
- var_dump($q);
- while ($row= sybase_fetch_assoc($q)) {
- var_dump($row);
- }
-
- // Clean up and close connection
- var_dump(sybase_query('drop table #test'));
- sybase_close($db);
-?>
---EXPECTF--
-bool(true)
-bool(true)
-bool(true)
-bool(true)
-resource(%d) of type (sybase-ct result)
-array(5) {
- ["id"]=>
- int(1)
- ["caption"]=>
- string(5) "Hello"
- ["author"]=>
- string(4) "timm"
- ["link"]=>
- NULL
- ["lastchange"]=>
- string(%d) "%s"
-}
-array(5) {
- ["id"]=>
- int(2)
- ["caption"]=>
- string(5) "World"
- ["author"]=>
- string(6) "thekid"
- ["link"]=>
- string(17) "http://thekid.de/"
- ["lastchange"]=>
- string(%d) "%s"
-}
-array(5) {
- ["id"]=>
- int(3)
- ["caption"]=>
- string(3) "PHP"
- ["author"]=>
- string(6) "friebe"
- ["link"]=>
- NULL
- ["lastchange"]=>
- string(%d) "%s"
-}
-bool(true)
diff --git a/ext/sybase_ct/tests/test_types.phpt b/ext/sybase_ct/tests/test_types.phpt
deleted file mode 100644
index 735c02d843..0000000000
--- a/ext/sybase_ct/tests/test_types.phpt
+++ /dev/null
@@ -1,87 +0,0 @@
---TEST--
-Sybase-CT select and types
---SKIPIF--
-<?php require('skipif.inc'); ?>
---FILE--
-<?php
-/* This file is part of PHP test framework for ext/sybase_ct
- *
- * $Id$
- */
-
- require('test.inc');
-
- define('LONG_MAX', is_int(2147483648) ? 9223372036854775807 : 2147483647);
- define('LONG_MIN', -LONG_MAX - 1);
-
- $db= sybase_connect_ex();
- var_dump(sybase_select_ex($db, 'select
- 1 as "integer",
- '.(LONG_MIN).' as "integer_min",
- '.(LONG_MIN - 1).' as "integer_min_exceed",
- '.(LONG_MAX).' as "integer_max",
- '.(LONG_MAX + 1).' as "integer_max_exceed",
- 1.0 as "float",
- 12345678901234567890123456789012.123456 as "large_float",
- $22.36 as "money",
- "Binford" as "string",
- convert(datetime, "2004-01-23") as "date",
- NULL as "null",
- convert(bit, 1) as "bit",
- convert(smalldatetime, "2004-01-23") as "smalldate",
- convert(char(10), "char") as "char10"
- '));
-
- sybase_close($db);
-?>
---EXPECTF--
->>> Query: select
- 1 as "integer",
- -%s as "integer_min",
- -%s as "integer_min_exceed",
- %s as "integer_max",
- %s as "integer_max_exceed",
- 1.0 as "float",
- 12345678901234567890123456789012.123456 as "large_float",
- $22.36 as "money",
- "Binford" as "string",
- convert(datetime, "2004-01-23") as "date",
- NULL as "null",
- convert(bit, 1) as "bit",
- convert(smalldatetime, "2004-01-23") as "smalldate",
- convert(char(10), "char") as "char10"
-
-<<< Return: resource
-array(1) {
- [0]=>
- array(%d) {
- ["integer"]=>
- int(1)
- ["integer_min"]=>
- int(-%s)
- ["integer_min_exceed"]=>
- float(-%s)
- ["integer_max"]=>
- int(%s)
- ["integer_max_exceed"]=>
- float(%s)
- ["float"]=>
- float(1)
- ["large_float"]=>
- string(39) "12345678901234567890123456789012.123456"
- ["money"]=>
- float(22.36)
- ["string"]=>
- string(7) "Binford"
- ["date"]=>
- string(19) "Jan 23 2004 12:00AM"
- ["null"]=>
- NULL
- ["bit"]=>
- int(1)
- ["smalldate"]=>
- string(19) "Jan 23 2004 12:00AM"
- ["char10"]=>
- string(10) "char "
- }
-}
diff --git a/ext/sybase_ct/tests/test_unbuffered_query.phpt b/ext/sybase_ct/tests/test_unbuffered_query.phpt
deleted file mode 100644
index 74b10143b2..0000000000
--- a/ext/sybase_ct/tests/test_unbuffered_query.phpt
+++ /dev/null
@@ -1,57 +0,0 @@
---TEST--
-Sybase-CT unbuffered query
---SKIPIF--
-<?php require('skipif.inc'); ?>
---FILE--
-<?php
-/* This file is part of PHP test framework for ext/sybase_ct
- *
- * $Id$
- */
-
- require('test.inc');
-
- $db= sybase_connect_ex();
- var_dump($db);
-
- // Test #1: num_rows
- $q= sybase_unbuffered_query('select name from master..systypes', $db);
- var_dump($q);
- $i= 0;
- while ($r= sybase_fetch_assoc($q)) {
- $i++;
- }
- var_dump($i, sybase_num_rows($q), $i == sybase_num_rows($q), $q);
- sybase_free_result($q);
- var_dump($q);
-
- // Test #2: after sybase_free_result, this should be an invalid resource
- var_dump(FALSE == sybase_num_rows($q));
-
- // Test #3: Seeking
- $q= sybase_unbuffered_query('select name from master..systypes', $db);
- var_dump($q);
- $j= 0;
- sybase_data_seek($q, 4);
- while ($r= sybase_fetch_assoc($q)) {
- $j++;
- }
- var_dump($i, $j, $i - $j);
-
- sybase_close($db);
-?>
---EXPECTF--
-resource(%d) of type (sybase-ct link)
-resource(%d) of type (sybase-ct result)
-int(%d)
-int(%d)
-bool(true)
-resource(%d) of type (sybase-ct result)
-resource(%d) of type (Unknown)
-
-Warning: sybase_num_rows(): %d is not a valid Sybase result resource in %s/test_unbuffered_query.php on line %d
-bool(true)
-resource(%d) of type (sybase-ct result)
-int(%d)
-int(%d)
-int(4)
diff --git a/ext/sysvmsg/CREDITS b/ext/sysvmsg/CREDITS
deleted file mode 100644
index 6b150d5301..0000000000
--- a/ext/sysvmsg/CREDITS
+++ /dev/null
@@ -1,2 +0,0 @@
-System V Message based IPC
-Wez Furlong
diff --git a/ext/sysvmsg/config.m4 b/ext/sysvmsg/config.m4
deleted file mode 100644
index 28f03e76d9..0000000000
--- a/ext/sysvmsg/config.m4
+++ /dev/null
@@ -1,9 +0,0 @@
-dnl $Id$
-
-PHP_ARG_ENABLE(sysvmsg,whether to enable System V IPC support,
-[ --enable-sysvmsg Enable sysvmsg support])
-
-if test "$PHP_SYSVMSG" != "no"; then
- AC_DEFINE(HAVE_SYSVMSG, 1, [ ])
- PHP_NEW_EXTENSION(sysvmsg, sysvmsg.c, $ext_shared)
-fi
diff --git a/ext/sysvmsg/package.xml b/ext/sysvmsg/package.xml
deleted file mode 100644
index a14335279f..0000000000
--- a/ext/sysvmsg/package.xml
+++ /dev/null
@@ -1,40 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1" ?>
-<!DOCTYPE package SYSTEM "../pear/package.dtd">
-<package>
- <name>sysvmsg</name>
- <summary>Unix System V IPC Message Queues</summary>
- <maintainers>
- <maintainer>
- <user>wez</user>
- <name>Wez Furlong</name>
- <email>wez@php.net</email>
- <role>lead</role>
- </maintainer>
- </maintainers>
- <description>
-Unix System V IPC Message Queues
- </description>
- <license>PHP</license>
- <release>
- <state>stable</state>
- <version>5.0.0rc1</version>
- <date>2004-03-19</date>
- <notes>
-package.xml added to support intallation using pear installer
- </notes>
- <filelist>
- <file role="doc" name="CREDITS"/>
- <file role="src" name="config.m4"/>
- <file role="src" name="sysvmsg.c"/>
- <file role="src" name="php_sysvmsg.h"/>
- <file role="test" name="tests/001.phpt"/>
- </filelist>
- <deps>
- <dep type="php" rel="ge" version="5" />
- <!-- doesn't work yet <dep type="os" rel="has" name="unix"/> -->
- </deps>
- </release>
-</package>
-<!--
-vim:et:ts=1:sw=1
--->
diff --git a/ext/sysvmsg/php_sysvmsg.h b/ext/sysvmsg/php_sysvmsg.h
deleted file mode 100644
index ac07d35fe5..0000000000
--- a/ext/sysvmsg/php_sysvmsg.h
+++ /dev/null
@@ -1,76 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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@thebrainroom.com> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifndef PHP_SYSVMSG_H
-#define PHP_SYSVMSG_H
-
-#if HAVE_SYSVMSG
-
-extern zend_module_entry sysvmsg_module_entry;
-#define phpext_sysvmsg_ptr &sysvmsg_module_entry
-
-#ifndef __USE_GNU
-/* we want to use mtype instead of __mtype */
-#define __USE_GNU
-#endif
-
-#include <sys/types.h>
-#include <sys/ipc.h>
-#include <sys/msg.h>
-
-#ifdef ZTS
-#include "TSRM.h"
-#endif
-
-PHP_MINIT_FUNCTION(sysvmsg);
-PHP_MSHUTDOWN_FUNCTION(sysvmsg);
-PHP_RINIT_FUNCTION(sysvmsg);
-PHP_RSHUTDOWN_FUNCTION(sysvmsg);
-PHP_MINFO_FUNCTION(sysvmsg);
-
-PHP_FUNCTION(msg_get_queue);
-PHP_FUNCTION(msg_remove_queue);
-PHP_FUNCTION(msg_stat_queue);
-PHP_FUNCTION(msg_set_queue);
-PHP_FUNCTION(msg_send);
-PHP_FUNCTION(msg_receive);
-
-typedef struct {
- key_t key;
- long id;
-} sysvmsg_queue_t;
-
-struct php_msgbuf {
- long mtype;
- char mtext[1];
-};
-
-#endif /* HAVE_SYSVMSG */
-
-#endif /* PHP_SYSVMSG_H */
-
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * indent-tabs-mode: t
- * End:
- */
diff --git a/ext/sysvmsg/sysvmsg.c b/ext/sysvmsg/sysvmsg.c
deleted file mode 100644
index 59d3c0ead7..0000000000
--- a/ext/sysvmsg/sysvmsg.c
+++ /dev/null
@@ -1,425 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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@thebrainroom.com> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "php.h"
-#include "php_globals.h"
-#include "php_ini.h"
-#include "ext/standard/info.h"
-#include "php_sysvmsg.h"
-#include "ext/standard/php_var.h"
-#include "ext/standard/php_smart_str.h"
-
-/* In order to detect MSG_EXCEPT use at run time; we have no way
- * of knowing what the bit definitions are, so we can't just define
- * out own MSG_EXCEPT value. */
-#define PHP_MSG_IPC_NOWAIT 1
-#define PHP_MSG_NOERROR 2
-#define PHP_MSG_EXCEPT 4
-
-/* True global resources - no need for thread safety here */
-static int le_sysvmsg;
-
-static
- ZEND_BEGIN_ARG_INFO(sixth_arg_force_ref, 0)
- ZEND_ARG_PASS_INFO(0)
- ZEND_ARG_PASS_INFO(0)
- ZEND_ARG_PASS_INFO(0)
- ZEND_ARG_PASS_INFO(0)
- ZEND_ARG_PASS_INFO(0)
- ZEND_ARG_PASS_INFO(1)
- ZEND_END_ARG_INFO();
-
-static
- ZEND_BEGIN_ARG_INFO(msg_receive_args_force_ref, 0)
- ZEND_ARG_PASS_INFO(0)
- ZEND_ARG_PASS_INFO(0)
- ZEND_ARG_PASS_INFO(1)
- ZEND_ARG_PASS_INFO(0)
- ZEND_ARG_PASS_INFO(1)
- ZEND_ARG_PASS_INFO(0)
- ZEND_ARG_PASS_INFO(0)
- ZEND_ARG_PASS_INFO(1)
- ZEND_END_ARG_INFO();
-
-/* {{{ sysvmsg_functions[]
- *
- * Every user visible function must have an entry in sysvmsg_functions[].
- */
-function_entry sysvmsg_functions[] = {
- PHP_FE(msg_get_queue, NULL)
- PHP_FE(msg_send, sixth_arg_force_ref)
- PHP_FE(msg_receive, msg_receive_args_force_ref)
- PHP_FE(msg_remove_queue, NULL)
- PHP_FE(msg_stat_queue, NULL)
- PHP_FE(msg_set_queue, NULL)
- {NULL, NULL, NULL} /* Must be the last line in sysvmsg_functions[] */
-};
-/* }}} */
-
-/* {{{ sysvmsg_module_entry
- */
-zend_module_entry sysvmsg_module_entry = {
- STANDARD_MODULE_HEADER,
- "sysvmsg",
- sysvmsg_functions,
- PHP_MINIT(sysvmsg),
- PHP_MSHUTDOWN(sysvmsg),
- NULL,
- NULL,
- PHP_MINFO(sysvmsg),
- NO_VERSION_YET,
- STANDARD_MODULE_PROPERTIES
-};
-/* }}} */
-
-#ifdef COMPILE_DL_SYSVMSG
-ZEND_GET_MODULE(sysvmsg)
-# ifdef PHP_WIN32
-# include "zend_arg_defs.c"
-# endif
-#endif
-
-/* {{{ PHP_INI
- */
-/* Remove comments and fill if you need to have entries in php.ini
-PHP_INI_BEGIN()
- STD_PHP_INI_ENTRY("sysvmsg.value", "42", PHP_INI_ALL, OnUpdateLong, global_value, zend_sysvmsg_globals, sysvmsg_globals)
- STD_PHP_INI_ENTRY("sysvmsg.string", "foobar", PHP_INI_ALL, OnUpdateString, global_string, zend_sysvmsg_globals, sysvmsg_globals)
-PHP_INI_END()
-*/
-/* }}} */
-
-static void sysvmsg_release(zend_rsrc_list_entry *rsrc TSRMLS_DC)
-{
- sysvmsg_queue_t * mq = (sysvmsg_queue_t *) rsrc->ptr;
- efree(mq);
-}
-
-/* {{{ PHP_MINIT_FUNCTION
- */
-PHP_MINIT_FUNCTION(sysvmsg)
-{
- le_sysvmsg = zend_register_list_destructors_ex(sysvmsg_release, NULL, "sysvmsg queue", module_number);
- REGISTER_LONG_CONSTANT("MSG_IPC_NOWAIT", PHP_MSG_IPC_NOWAIT, CONST_PERSISTENT|CONST_CS);
- REGISTER_LONG_CONSTANT("MSG_NOERROR", PHP_MSG_NOERROR, CONST_PERSISTENT|CONST_CS);
- REGISTER_LONG_CONSTANT("MSG_EXCEPT", PHP_MSG_EXCEPT, CONST_PERSISTENT|CONST_CS);
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ PHP_MSHUTDOWN_FUNCTION
- */
-PHP_MSHUTDOWN_FUNCTION(sysvmsg)
-{
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ PHP_MINFO_FUNCTION
- */
-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$");
- php_info_print_table_end();
-}
-/* }}} */
-
-/* {{{ proto bool msg_set_queue(resource queue, array data)
- Set information for a message queue */
-PHP_FUNCTION(msg_set_queue)
-{
- zval *queue, *data;
- sysvmsg_queue_t *mq = NULL;
- struct msqid_ds stat;
-
- RETVAL_FALSE;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ra", &queue, &data) == FAILURE) {
- return;
- }
-
- ZEND_FETCH_RESOURCE(mq, sysvmsg_queue_t *, &queue, -1, "sysvmsg queue", le_sysvmsg);
-
- if (msgctl(mq->id, IPC_STAT, &stat) == 0) {
- zval **item;
-
- /* now pull out members of data and set them in the stat buffer */
- if (zend_hash_find(Z_ARRVAL_P(data), "msg_perm.uid", sizeof("msg_perm.uid"), (void **) &item) == SUCCESS) {
- convert_to_long_ex(item);
- stat.msg_perm.uid = Z_LVAL_PP(item);
- }
- if (zend_hash_find(Z_ARRVAL_P(data), "msg_perm.gid", sizeof("msg_perm.gid"), (void **) &item) == SUCCESS) {
- convert_to_long_ex(item);
- stat.msg_perm.gid = Z_LVAL_PP(item);
- }
- if (zend_hash_find(Z_ARRVAL_P(data), "msg_perm.mode", sizeof("msg_perm.mode"), (void **) &item) == SUCCESS) {
- convert_to_long_ex(item);
- stat.msg_perm.mode = Z_LVAL_PP(item);
- }
- if (zend_hash_find(Z_ARRVAL_P(data), "msg_qbytes", sizeof("msg_qbytes"), (void **) &item) == SUCCESS) {
- convert_to_long_ex(item);
- stat.msg_qbytes = Z_LVAL_PP(item);
- }
- if (msgctl(mq->id, IPC_SET, &stat) == 0) {
- RETVAL_TRUE;
- }
- }
-}
-/* }}} */
-
-/* {{{ proto array msg_stat_queue(resource queue)
- Returns information about a message queue */
-PHP_FUNCTION(msg_stat_queue)
-{
- zval *queue;
- sysvmsg_queue_t *mq = NULL;
- struct msqid_ds stat;
-
- RETVAL_FALSE;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &queue) == FAILURE) {
- return;
- }
-
- ZEND_FETCH_RESOURCE(mq, sysvmsg_queue_t *, &queue, -1, "sysvmsg queue", le_sysvmsg);
-
- if (msgctl(mq->id, IPC_STAT, &stat) == 0) {
- array_init(return_value);
-
- add_assoc_long(return_value, "msg_perm.uid", stat.msg_perm.uid);
- add_assoc_long(return_value, "msg_perm.gid", stat.msg_perm.gid);
- add_assoc_long(return_value, "msg_perm.mode", stat.msg_perm.mode);
- add_assoc_long(return_value, "msg_stime", stat.msg_stime);
- add_assoc_long(return_value, "msg_rtime", stat.msg_rtime);
- add_assoc_long(return_value, "msg_ctime", stat.msg_ctime);
- add_assoc_long(return_value, "msg_qnum", stat.msg_qnum);
- add_assoc_long(return_value, "msg_qbytes", stat.msg_qbytes);
- add_assoc_long(return_value, "msg_lspid", stat.msg_lspid);
- add_assoc_long(return_value, "msg_lrpid", stat.msg_lrpid);
- }
-}
-/* }}} */
-
-/* {{{ proto resource msg_get_queue(int key [, int perms])
- Attach to a message queue */
-PHP_FUNCTION(msg_get_queue)
-{
- long key;
- long perms = 0666;
- sysvmsg_queue_t *mq;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l|l", &key, &perms) == FAILURE) {
- return;
- }
-
- mq = (sysvmsg_queue_t *) emalloc(sizeof(sysvmsg_queue_t));
-
- mq->key = key;
- mq->id = msgget(key, 0);
- if (mq->id < 0) {
- /* doesn't already exist; create it */
- mq->id = msgget(key, IPC_CREAT | IPC_EXCL | perms);
- if (mq->id < 0) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "failed for key 0x%lx: %s", key, strerror(errno));
- efree(mq);
- RETURN_FALSE;
- }
- }
- RETVAL_RESOURCE(zend_list_insert(mq, le_sysvmsg));
-}
-/* }}} */
-
-/* {{{ proto bool msg_remove_queue(resource queue)
- Destroy the queue */
-PHP_FUNCTION(msg_remove_queue)
-{
- zval *queue;
- sysvmsg_queue_t *mq = NULL;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &queue) == FAILURE) {
- return;
- }
-
- ZEND_FETCH_RESOURCE(mq, sysvmsg_queue_t *, &queue, -1, "sysvmsg queue", le_sysvmsg);
-
- if (msgctl(mq->id, IPC_RMID, NULL) == 0) {
- RETVAL_TRUE;
- } else {
- RETVAL_FALSE;
- }
-}
-/* }}} */
-
-/* {{{ proto mixed msg_receive(resource queue, int desiredmsgtype, int &msgtype, int maxsize, mixed message [, bool unserialize=true [, int flags=0 [, int errorcode]]])
- Send a message of type msgtype (must be > 0) to a message queue */
-PHP_FUNCTION(msg_receive)
-{
- zval *out_message, *queue, *out_msgtype, *zerrcode = NULL;
- long desiredmsgtype, maxsize, flags = 0;
- long realflags = 0;
- zend_bool do_unserialize = 1;
- sysvmsg_queue_t *mq = NULL;
- struct php_msgbuf *messagebuffer = NULL; /* buffer to transmit */
- int result;
-
- RETVAL_FALSE;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rlzlz|blz",
- &queue, &desiredmsgtype, &out_msgtype, &maxsize,
- &out_message, &do_unserialize, &flags, &zerrcode) == FAILURE) {
- return;
- }
-
- if (flags != 0) {
- if (flags & PHP_MSG_EXCEPT) {
-#ifndef MSG_EXCEPT
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "MSG_EXCEPT is not supported on your system");
- RETURN_FALSE;
-#else
- realflags |= MSG_EXCEPT;
-#endif
- }
- if (flags & PHP_MSG_NOERROR) {
- realflags |= MSG_NOERROR;
- }
- if (flags & PHP_MSG_IPC_NOWAIT) {
- realflags |= IPC_NOWAIT;
- }
- }
-
- ZEND_FETCH_RESOURCE(mq, sysvmsg_queue_t *, &queue, -1, "sysvmsg queue", le_sysvmsg);
-
- messagebuffer = (struct php_msgbuf *) emalloc(sizeof(struct php_msgbuf) + maxsize);
-
- result = msgrcv(mq->id, messagebuffer, maxsize, desiredmsgtype, realflags);
-
- zval_dtor(out_msgtype);
- zval_dtor(out_message);
- ZVAL_LONG(out_msgtype, 0);
- ZVAL_FALSE(out_message);
-
- if (zerrcode) {
- zval_dtor(zerrcode);
- ZVAL_LONG(zerrcode, 0);
- }
-
- if (result >= 0) {
- /* got it! */
- ZVAL_LONG(out_msgtype, messagebuffer->mtype);
-
- if (do_unserialize) {
- php_unserialize_data_t var_hash;
- zval *tmp = NULL;
- const char *p = (const char *) messagebuffer->mtext;
-
- MAKE_STD_ZVAL(tmp);
- PHP_VAR_UNSERIALIZE_INIT(var_hash);
- if (!php_var_unserialize(&tmp, &p, p + result, &var_hash TSRMLS_CC)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "message corrupted");
- RETVAL_FALSE;
- }
- REPLACE_ZVAL_VALUE(&out_message, tmp, 0);
- FREE_ZVAL(tmp);
- PHP_VAR_UNSERIALIZE_DESTROY(var_hash);
- } else {
- ZVAL_STRINGL(out_message, messagebuffer->mtext, result, 1);
- }
- RETVAL_TRUE;
- } else if (zerrcode) {
- ZVAL_LONG(zerrcode, errno);
- }
- efree(messagebuffer);
-}
-/* }}} */
-
-/* {{{ proto bool msg_send(resource queue, int msgtype, mixed message [, bool serialize=true [, bool blocking=true [, int errorcode]]])
- Send a message of type msgtype (must be > 0) to a message queue */
-PHP_FUNCTION(msg_send)
-{
- zval *message, *queue, *zerror=NULL;
- long msgtype;
- zend_bool do_serialize = 1, blocking = 1;
- sysvmsg_queue_t * mq = NULL;
- struct php_msgbuf * messagebuffer = NULL; /* buffer to transmit */
- int result;
- int message_len = 0;
-
- RETVAL_FALSE;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rlz|bbz",
- &queue, &msgtype, &message, &do_serialize, &blocking, &zerror) == FAILURE) {
- return;
- }
-
- ZEND_FETCH_RESOURCE(mq, sysvmsg_queue_t*, &queue, -1, "sysvmsg queue", le_sysvmsg);
-
- if (do_serialize) {
- smart_str msg_var = {0};
- php_serialize_data_t var_hash;
-
- PHP_VAR_SERIALIZE_INIT(var_hash);
- php_var_serialize(&msg_var, &message, &var_hash TSRMLS_CC);
- PHP_VAR_SERIALIZE_DESTROY(var_hash);
-
- /* NB: php_msgbuf is 1 char bigger than a long, so there is no need to
- * allocate the extra byte. */
- messagebuffer = emalloc(sizeof(struct php_msgbuf) + msg_var.len);
- memcpy(messagebuffer->mtext, msg_var.c, msg_var.len + 1);
- message_len = msg_var.len;
- smart_str_free(&msg_var);
- } else {
- convert_to_string_ex(&message);
- messagebuffer = emalloc(sizeof(struct php_msgbuf) + Z_STRLEN_P(message));
- memcpy(messagebuffer->mtext, Z_STRVAL_P(message), Z_STRLEN_P(message) + 1);
- message_len = Z_STRLEN_P(message);
- }
-
- /* set the message type */
- messagebuffer->mtype = msgtype;
-
- result = msgsnd(mq->id, messagebuffer, message_len, blocking ? 0 : IPC_NOWAIT);
-
- efree(messagebuffer);
-
- if (result == -1) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "msgsnd failed: %s", strerror(errno));
- if (zerror) {
- ZVAL_LONG(zerror, errno);
- }
- } else {
- RETVAL_TRUE;
- }
-}
-/* }}} */
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- * vim600: noet sw=4 ts=4 tw=78 fdm=marker
- * vim<600: noet sw=4 ts=4 tw=78
- */
diff --git a/ext/sysvmsg/tests/001.phpt b/ext/sysvmsg/tests/001.phpt
deleted file mode 100644
index 4f57dba305..0000000000
--- a/ext/sysvmsg/tests/001.phpt
+++ /dev/null
@@ -1,22 +0,0 @@
---TEST--
-send/receive serialized message.
---SKIPIF--
-<?php // vim600:syn=php
-if (!extension_loaded("sysvmsg")) print "skip"; ?>
---FILE--
-<?php
-$key = ftok("./ext/sysvmsg/tests/001.phpt", "p");
-$q = msg_get_queue($key);
-msg_send($q, 1, "hello") or print "FAIL\n";
-$type = null;
-if (msg_receive($q, 0, $type, 1024, $message)) {
- echo "TYPE: $type\n";
- echo "DATA: $message\n";
-}
-if (!msg_remove_queue($q)) {
- echo "BAD: queue removal failed\n";
-}
-?>
---EXPECT--
-TYPE: 1
-DATA: hello
diff --git a/ext/sysvsem/CREDITS b/ext/sysvsem/CREDITS
deleted file mode 100644
index 45232809f0..0000000000
--- a/ext/sysvsem/CREDITS
+++ /dev/null
@@ -1,2 +0,0 @@
-System V Semaphores
-Tom May
diff --git a/ext/sysvsem/config.m4 b/ext/sysvsem/config.m4
deleted file mode 100644
index 0b635d6dde..0000000000
--- a/ext/sysvsem/config.m4
+++ /dev/null
@@ -1,29 +0,0 @@
-dnl
-dnl $Id$
-dnl
-
-PHP_ARG_ENABLE(sysvsem,whether to enable System V semaphore support,
-[ --enable-sysvsem Enable System V semaphore support.])
-
-if test "$PHP_SYSVSEM" != "no"; then
- PHP_NEW_EXTENSION(sysvsem, sysvsem.c, $ext_shared)
- AC_DEFINE(HAVE_SYSVSEM, 1, [ ])
- AC_CACHE_CHECK(for union semun,php_cv_semun,
- AC_TRY_COMPILE([
-#include <sys/types.h>
-#include <sys/ipc.h>
-#include <sys/sem.h>
- ],
- [union semun x;],
- [
- php_cv_semun=yes
- ],[
- php_cv_semun=no
- ])
- )
- if test "$php_cv_semun" = "yes"; then
- AC_DEFINE(HAVE_SEMUN, 1, [ ])
- else
- AC_DEFINE(HAVE_SEMUN, 0, [ ])
- fi
-fi
diff --git a/ext/sysvsem/package.xml b/ext/sysvsem/package.xml
deleted file mode 100644
index ea8f5c94a3..0000000000
--- a/ext/sysvsem/package.xml
+++ /dev/null
@@ -1,39 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1" ?>
-<!DOCTYPE package SYSTEM "../pear/package.dtd">
-<package>
- <name>sysvsem</name>
- <summary>Unix System V IPC Semaphores</summary>
- <maintainers>
- <maintainer>
- <user>???</user>
- <name>Tom May</name>
- <email>tom@go2net.com</email>
- <role>lead</role>
- </maintainer>
- </maintainers>
- <description>
-Unix System V IPC Semaphores
- </description>
- <license>PHP</license>
- <release>
- <state>beta</state>
- <version>5.0.0rc1</version>
- <date>2004-03-19</date>
- <notes>
-package.xml added to support intallation using pear installer
- </notes>
- <filelist>
- <file role="doc" name="CREDITS"/>
- <file role="src" name="config.m4"/>
- <file role="src" name="sysvsem.c"/>
- <file role="src" name="php_sysvsem.h"/>
- </filelist>
- <deps>
- <dep type="php" rel="ge" version="5" />
- <!-- doesn't work yet <dep type="os" rel="has" name="unix"/> -->
- </deps>
- </release>
-</package>
-<!--
-vim:et:ts=1:sw=1
--->
diff --git a/ext/sysvsem/php_sysvsem.h b/ext/sysvsem/php_sysvsem.h
deleted file mode 100644
index 825e939e93..0000000000
--- a/ext/sysvsem/php_sysvsem.h
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Tom May <tom@go2net.com> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifndef PHP_SYSVSEM_H
-#define PHP_SYSVSEM_H
-
-#if HAVE_SYSVSEM
-
-extern zend_module_entry sysvsem_module_entry;
-#define sysvsem_module_ptr &sysvsem_module_entry
-
-PHP_MINIT_FUNCTION(sysvsem);
-PHP_FUNCTION(sem_get);
-PHP_FUNCTION(sem_acquire);
-PHP_FUNCTION(sem_release);
-PHP_FUNCTION(sem_remove);
-
-typedef struct {
- int le_sem;
-} sysvsem_module;
-
-typedef struct {
- int id; /* For error reporting. */
- int key; /* For error reporting. */
- int semid; /* Returned by semget(). */
- int count; /* Acquire count for auto-release. */
- int auto_release; /* flag that says to auto-release. */
-} sysvsem_sem;
-
-extern sysvsem_module php_sysvsem_module;
-
-#else
-
-#define sysvsem_module_ptr NULL
-
-#endif
-
-#define phpext_sysvsem_ptr sysvsem_module_ptr
-
-#endif /* PHP_SYSVSEM_H */
diff --git a/ext/sysvsem/sysvsem.c b/ext/sysvsem/sysvsem.c
deleted file mode 100644
index d07893095c..0000000000
--- a/ext/sysvsem/sysvsem.c
+++ /dev/null
@@ -1,407 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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. |
- +----------------------------------------------------------------------+
- | Authors: Tom May <tom@go2net.com> |
- | Gavin Sherry <gavin@linuxworld.com.au> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-/* Latest update build anc tested on Linux 2.2.14
- *
- * This has been built and tested on Solaris 2.6 and Linux 2.1.122.
- * It may not compile or execute correctly on other systems.
- *
- * sas: Works for me on Linux 2.0.36 and FreeBSD 3.0-current
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "php.h"
-
-#if HAVE_SYSVSEM
-
-#include <sys/types.h>
-#include <sys/ipc.h>
-#include <sys/sem.h>
-#include <errno.h>
-
-#include "php_sysvsem.h"
-
-#if !HAVE_SEMUN
-
-union semun {
- int val; /* value for SETVAL */
- struct semid_ds *buf; /* buffer for IPC_STAT, IPC_SET */
- unsigned short int *array; /* array for GETALL, SETALL */
- struct seminfo *__buf; /* buffer for IPC_INFO */
-};
-
-#undef HAVE_SEMUN
-#define HAVE_SEMUN 1
-
-#endif
-
-/* {{{ sysvsem_functions[]
- */
-function_entry sysvsem_functions[] = {
- PHP_FE(sem_get, NULL)
- PHP_FE(sem_acquire, NULL)
- PHP_FE(sem_release, NULL)
- PHP_FE(sem_remove, NULL)
- {NULL, NULL, NULL}
-};
-/* }}} */
-
-/* {{{ sysvsem_module_entry
- */
-zend_module_entry sysvsem_module_entry = {
- STANDARD_MODULE_HEADER,
- "sysvsem",
- sysvsem_functions,
- PHP_MINIT(sysvsem),
- NULL,
- NULL,
- NULL,
- NULL,
- NO_VERSION_YET,
- STANDARD_MODULE_PROPERTIES
-};
-/* }}} */
-
-#ifdef COMPILE_DL_SYSVSEM
-ZEND_GET_MODULE(sysvsem)
-#endif
-
-
-THREAD_LS sysvsem_module php_sysvsem_module;
-
-/* Semaphore functions using System V semaphores. Each semaphore
- * actually consists of three semaphores allocated as a unit under the
- * same key. Semaphore 0 (SYSVSEM_SEM) is the actual semaphore, it is
- * initialized to max_acquire and decremented as processes acquire it.
- * The value of semaphore 1 (SYSVSEM_USAGE) is a count of the number
- * of processes using the semaphore. After calling semget(), if a
- * process finds that the usage count is 1, it will set the value of
- * SYSVSEM_SEM to max_acquire. This allows max_acquire to be set and
- * track the PHP code without having a global init routine or external
- * semaphore init code. Except see the bug regarding a race condition
- * php_sysvsem_get(). Semaphore 2 (SYSVSEM_SETVAL) serializes the
- * calls to GETVAL SYSVSEM_USAGE and SETVAL SYSVSEM_SEM. It can be
- * acquired only when it is zero.
- */
-
-#define SYSVSEM_SEM 0
-#define SYSVSEM_USAGE 1
-#define SYSVSEM_SETVAL 2
-
-/* {{{ release_sysvsem_sem
- */
-static void release_sysvsem_sem(zend_rsrc_list_entry *rsrc TSRMLS_DC)
-{
- sysvsem_sem *sem_ptr = (sysvsem_sem *)rsrc->ptr;
- struct sembuf sop[2];
- int opcount = 1;
-/*
- * if count == -1, semaphore has been removed
- * Need better way to handle this
- */
-
- if (sem_ptr->count == -1 || !sem_ptr->auto_release) {
- efree(sem_ptr);
- return;
- }
- /* Decrement the usage count. */
-
- sop[0].sem_num = SYSVSEM_USAGE;
- sop[0].sem_op = -1;
- sop[0].sem_flg = SEM_UNDO;
-
- /* Release the semaphore if it has been acquired but not released. */
-
- if (sem_ptr->count) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Releasing SysV semaphore id %d key 0x%x in request cleanup", sem_ptr->id, sem_ptr->key);
-
- sop[1].sem_num = SYSVSEM_SEM;
- sop[1].sem_op = sem_ptr->count;
- sop[1].sem_flg = SEM_UNDO;
-
- opcount++;
- }
- if (semop(sem_ptr->semid, sop, opcount) == -1) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "failed in release_sysvsem_sem for key 0x%x: %s", sem_ptr->key, strerror(errno));
- }
-
- efree(sem_ptr);
-}
-/* }}} */
-
-/* {{{ PHP_MINIT_FUNCTION
- */
-PHP_MINIT_FUNCTION(sysvsem)
-{
- php_sysvsem_module.le_sem = zend_register_list_destructors_ex(release_sysvsem_sem, NULL, "sysvsem", module_number);
- return SUCCESS;
-}
-/* }}} */
-
-#define SETVAL_WANTS_PTR
-
-#if defined(_AIX)
-#undef SETVAL_WANTS_PTR
-#endif
-
-/* {{{ proto resource sem_get(int key [, int max_acquire [, int perm [, int auto_release]])
- Return an id for the semaphore with the given key, and allow max_acquire (default 1) processes to acquire it simultaneously */
-PHP_FUNCTION(sem_get)
-{
- long key, max_acquire, perm, auto_release = 1;
- int semid;
- struct sembuf sop[3];
- int count;
- sysvsem_sem *sem_ptr;
-#if HAVE_SEMUN
- union semun un;
-#endif
-
- max_acquire = 1;
- perm = 0666;
-
- if (FAILURE == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l|lll", &key, &max_acquire, &perm, &auto_release)) {
- RETURN_FALSE;
- }
-
- /* Get/create the semaphore. Note that we rely on the semaphores
- * being zeroed when they are created. Despite the fact that
- * the(?) Linux semget() man page says they are not initialized,
- * the kernel versions 2.0.x and 2.1.z do in fact zero them.
- */
-
- semid = semget(key, 3, perm|IPC_CREAT);
- if (semid == -1) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "failed for key 0x%lx: %s", key, strerror(errno));
- RETURN_FALSE;
- }
-
- /* Find out how many processes are using this semaphore. Note
- * that on Linux (at least) there is a race condition here because
- * semaphore undo on process exit is not atomic, so we could
- * acquire SYSVSEM_SETVAL before a crashed process has decremented
- * SYSVSEM_USAGE in which case count will be greater than it
- * should be and we won't set max_acquire. Fortunately this
- * doesn't actually matter in practice.
- */
-
- /* Wait for sem 1 to be zero . . . */
-
- sop[0].sem_num = SYSVSEM_SETVAL;
- sop[0].sem_op = 0;
- sop[0].sem_flg = 0;
-
- /* . . . and increment it so it becomes non-zero . . . */
-
- sop[1].sem_num = SYSVSEM_SETVAL;
- sop[1].sem_op = 1;
- sop[1].sem_flg = SEM_UNDO;
-
- /* . . . and increment the usage count. */
-
- sop[2].sem_num = SYSVSEM_USAGE;
- sop[2].sem_op = 1;
- sop[2].sem_flg = SEM_UNDO;
- while (semop(semid, sop, 3) == -1) {
- if (errno != EINTR) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "failed acquiring SYSVSEM_SETVAL for key 0x%lx: %s", key, strerror(errno));
- break;
- }
- }
-
- /* Get the usage count. */
-#if HAVE_SEMUN
- count = semctl(semid, SYSVSEM_USAGE, GETVAL, un);
-#else
- count = semctl(semid, SYSVSEM_USAGE, GETVAL, NULL);
-#endif
- if (count == -1) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "failed for key 0x%lx: %s", key, strerror(errno));
- }
-
- /* If we are the only user, then take this opportunity to set the max. */
-
- if (count == 1) {
-#if HAVE_SEMUN
- /* This is correct for Linux which has union semun. */
- union semun semarg;
- semarg.val = max_acquire;
- if (semctl(semid, SYSVSEM_SEM, SETVAL, semarg) == -1) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "failed for key 0x%lx: %s", key, strerror(errno));
- }
-#elif defined(SETVAL_WANTS_PTR)
- /* This is correct for Solaris 2.6 which does not have union semun. */
- if (semctl(semid, SYSVSEM_SEM, SETVAL, &max_acquire) == -1) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "failed for key 0x%lx: %s", key, strerror(errno));
- }
-#else
- /* This works for i.e. AIX */
- if (semctl(semid, SYSVSEM_SEM, SETVAL, max_acquire) == -1) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "failed for key 0x%lx: %s", key, strerror(errno));
- }
-#endif
- }
-
- /* Set semaphore 1 back to zero. */
-
- sop[0].sem_num = SYSVSEM_SETVAL;
- sop[0].sem_op = -1;
- sop[0].sem_flg = SEM_UNDO;
- while (semop(semid, sop, 1) == -1) {
- if (errno != EINTR) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "failed releasing SYSVSEM_SETVAL for key 0x%lx: %s", key, strerror(errno));
- break;
- }
- }
-
- sem_ptr = (sysvsem_sem *) emalloc(sizeof(sysvsem_sem));
- sem_ptr->key = key;
- sem_ptr->semid = semid;
- sem_ptr->count = 0;
- sem_ptr->auto_release = auto_release;
-
- sem_ptr->id = ZEND_REGISTER_RESOURCE(return_value, sem_ptr, php_sysvsem_module.le_sem);
-}
-/* }}} */
-
-/* {{{ php_sysvsem_semop
- */
-static void php_sysvsem_semop(INTERNAL_FUNCTION_PARAMETERS, int acquire)
-{
- zval **arg_id;
- sysvsem_sem *sem_ptr;
- struct sembuf sop;
-
- switch(ZEND_NUM_ARGS()) {
- case 1:
- if (zend_get_parameters_ex(1, &arg_id)==FAILURE) {
- RETURN_FALSE;
- }
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
-
- ZEND_FETCH_RESOURCE(sem_ptr, sysvsem_sem *, arg_id, -1, "SysV semphore", php_sysvsem_module.le_sem);
-
- if (!acquire && sem_ptr->count == 0) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "SysV semaphore %ld (key 0x%x) is not currently acquired", Z_LVAL_PP(arg_id), sem_ptr->key);
- RETURN_FALSE;
- }
-
- sop.sem_num = SYSVSEM_SEM;
- sop.sem_op = acquire ? -1 : 1;
- sop.sem_flg = SEM_UNDO;
-
- while (semop(sem_ptr->semid, &sop, 1) == -1) {
- if (errno != EINTR) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "failed to %s key 0x%x: %s", acquire ? "acquire" : "release", sem_ptr->key, strerror(errno));
- RETURN_FALSE;
- }
- }
-
- sem_ptr->count -= acquire ? -1 : 1;
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto bool sem_acquire(resource id)
- Acquires the semaphore with the given id, blocking if necessary */
-PHP_FUNCTION(sem_acquire)
-{
- php_sysvsem_semop(INTERNAL_FUNCTION_PARAM_PASSTHRU, 1);
-}
-/* }}} */
-
-/* {{{ proto bool sem_release(resource id)
- Releases the semaphore with the given id */
-PHP_FUNCTION(sem_release)
-{
- php_sysvsem_semop(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0);
-}
-/* }}} */
-
-/* {{{ proto bool sem_remove(resource id)
- Removes semaphore from Unix systems */
-
-/*
- * contributed by Gavin Sherry gavin@linuxworld.com.au
- * Fri Mar 16 00:50:13 EST 2001
- */
-
-PHP_FUNCTION(sem_remove)
-{
- zval **arg_id;
- sysvsem_sem *sem_ptr;
-#if HAVE_SEMUN
- union semun un;
- struct semid_ds buf;
-#endif
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg_id) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(sem_ptr, sysvsem_sem *, arg_id, -1, "SysV semphore", php_sysvsem_module.le_sem);
-
-#if HAVE_SEMUN
- un.buf = &buf;
- if (semctl(sem_ptr->semid, 0, IPC_STAT, un) < 0) {
-#else
- if (semctl(sem_ptr->semid, 0, IPC_STAT, NULL) < 0) {
-#endif
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "SysV semphore %ld does not (any longer) exist", Z_LVAL_PP(arg_id));
- RETURN_FALSE;
- }
-
-#if HAVE_SEMUN
- if (semctl(sem_ptr->semid, 0, IPC_RMID, un) < 0) {
-#else
- if (semctl(sem_ptr->semid, 0, IPC_RMID, NULL) < 0) {
-#endif
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "failed for SysV sempphore %ld: %s", Z_LVAL_PP(arg_id), strerror(errno));
- RETURN_FALSE;
- }
-
- /* let release_sysvsem_sem know we have removed
- * the semaphore to avoid issues with releasing.
- */
-
- sem_ptr->count = -1;
- RETURN_TRUE;
-}
-
-/* }}} */
-
-#endif /* HAVE_SYSVSEM */
-
-/*
- * 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/sysvsem/tests/sysv.phpt b/ext/sysvsem/tests/sysv.phpt
deleted file mode 100644
index f7d95f7f48..0000000000
--- a/ext/sysvsem/tests/sysv.phpt
+++ /dev/null
@@ -1,114 +0,0 @@
---TEST--
-General semaphore and shared memory test
---SKIPIF--
-<?php // vim600: ts=4 sw=4 syn=php fdm=marker
-if(!extension_loaded('sysvsem') || !extension_loaded('sysvshm')) {
- die("skip Both sysvsem and sysvshm required");
-}
-?>
---INI--
-magic_quotes_runtime=0
---FILE--
-<?php
-$MEMSIZE = 512; // size of shared memory to allocate
-$SEMKEY = 1; // Semaphore key
-$SHMKEY = 2; // Shared memory key
-
-echo "Start.\n";
-// Get semaphore
-$sem_id = sem_get($SEMKEY, 1);
-if ($sem_id === FALSE) {
- echo "Fail to get semaphore";
- exit;
-}
-echo "Got semaphore $sem_id.\n";
-
-// Accuire semaphore
-if (! sem_acquire($sem_id)) {
- echo "Fail to aquire semaphore $sem_id.\n";
- sem_remove($sem_id);
- exit;
-}
-echo "Success aquire semaphore $sem_id.\n";
-
-$shm_id = shm_attach($SHMKEY, $MEMSIZE);
-if ($shm_id === FALSE) {
- echo "Fail to attach shared memory.\n";
- sem_remove($sem_id);
- exit;
-}
-echo "Success to attach shared memory : $shm_id.\n";
-
-// Write variable 1
-if (!shm_put_var($shm_id, 1, "Variable 1")) {
- echo "Fail to put var 1 on shared memory $shm_id.\n";
- sem_remove($sem_id);
- shm_remove ($shm_id);
- exit;
-}
-echo "Write var1 to shared memory.\n";
-
-// Write variable 2
-if (!shm_put_var($shm_id, 2, "Variable 2")) {
- echo "Fail to put var 2 on shared memory $shm_id.\n";
- sem_remove($sem_id);
- shm_remove ($shm_id);
- exit;
-}
-echo "Write var2 to shared memory.\n";
-
-// Read variable 1
-$var1 = shm_get_var ($shm_id, 1);
-if ($var1 === FALSE) {
- echo "Fail to retrieve Var 1 from Shared memory $shm_id, return value=$var1.\n";
-} else {
- echo "Read var1=$var1.\n";
-}
-
-// Read variable 1
-$var2 = shm_get_var ($shm_id, 2);
-if ($var1 === FALSE) {
- echo "Fail to retrieve Var 2 from Shared memory $shm_id, return value=$var2.\n";
-} else {
- echo "Read var2=$var2.\n";
-}
-// Release semaphore
-if (!sem_release($sem_id)) {
- echo "Fail to release $sem_id semaphore.\n";
-} else {
- echo "Semaphore $sem_id released.\n";
-}
-
-// remove shared memory segmant from SysV
-if (shm_remove ($shm_id)) {
- echo "Shared memory successfully removed from SysV.\n";
-} else {
- echo "Fail to remove $shm_id shared memory from SysV.\n";
-}
-
-// Remove semaphore
-if (sem_remove($sem_id)) {
- echo "semaphore removed successfully from SysV.\n";
-} else {
- echo "Fail to remove $sem_id semaphore from SysV.\n";
-}
-echo "End.\n";
-/* NOTE: assigned semids differ depending on the kernel, since
- * there are actually 3 semaphores per PHP-created
- * semaphores in effect, to keep state information.
- * That's the reason for EXPECTF.
- */
-?>
---EXPECTF--
-Start.
-Got semaphore Resource id #%i.
-Success aquire semaphore Resource id #%i.
-Success to attach shared memory : %i.
-Write var1 to shared memory.
-Write var2 to shared memory.
-Read var1=Variable 1.
-Read var2=Variable 2.
-Semaphore Resource id #%i released.
-Shared memory successfully removed from SysV.
-semaphore removed successfully from SysV.
-End.
diff --git a/ext/sysvshm/CREDITS b/ext/sysvshm/CREDITS
deleted file mode 100644
index 65a30ceb0c..0000000000
--- a/ext/sysvshm/CREDITS
+++ /dev/null
@@ -1,2 +0,0 @@
-System V Shared Memory
-Christian Cartus
diff --git a/ext/sysvshm/config.m4 b/ext/sysvshm/config.m4
deleted file mode 100644
index 671d050463..0000000000
--- a/ext/sysvshm/config.m4
+++ /dev/null
@@ -1,11 +0,0 @@
-dnl
-dnl $Id$
-dnl
-
-PHP_ARG_ENABLE(sysvshm,whether to enable System V shared memory support,
-[ --enable-sysvshm Enable the System V shared memory support.])
-
-if test "$PHP_SYSVSHM" != "no"; then
- AC_DEFINE(HAVE_SYSVSHM, 1, [ ])
- PHP_NEW_EXTENSION(sysvshm, sysvshm.c, $ext_shared)
-fi
diff --git a/ext/sysvshm/package.xml b/ext/sysvshm/package.xml
deleted file mode 100644
index 23e38c7ee6..0000000000
--- a/ext/sysvshm/package.xml
+++ /dev/null
@@ -1,40 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1" ?>
-<!DOCTYPE package SYSTEM "../pear/package.dtd">
-<package>
- <name>sysvsem</name>
- <summary>Unix System V IPC Shared Memory</summary>
- <maintainers>
- <maintainer>
- <user>???</user>
- <name>Cristian Cartus</name>
- <email>cartus@atrior.de</email>
- <role>lead</role>
- </maintainer>
- </maintainers>
- <description>
-Unix System V IPC Shared Memory
- </description>
- <license>PHP</license>
- <release>
- <state>beta</state>
- <version>5.0.0rc1</version>
- <date>2004-03-19</date>
- <notes>
-package.xml added to support intallation using pear installer
- </notes>
- <filelist>
- <file role="doc" name="CREDITS"/>
- <file role="src" name="config.m4"/>
- <file role="src" name="sysvsem.c"/>
- <file role="src" name="php_sysvshm.h"/>
- <file role="test" name="tests/sysvshm.phpt"/>
- </filelist>
- <deps>
- <dep type="php" rel="ge" version="5" />
- <!-- doesn't work yet <dep type="os" rel="has" name="unix"/> -->
- </deps>
- </release>
-</package>
-<!--
-vim:et:ts=1:sw=1
--->
diff --git a/ext/sysvshm/php_sysvshm.h b/ext/sysvshm/php_sysvshm.h
deleted file mode 100644
index 2e96be63d3..0000000000
--- a/ext/sysvshm/php_sysvshm.h
+++ /dev/null
@@ -1,77 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Christian Cartus <cartus@atrior.de> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifndef PHP_SYSVSHM_H
-#define PHP_SYSVSHM_H
-
-#if HAVE_SYSVSHM
-
-extern zend_module_entry sysvshm_module_entry;
-#define sysvshm_module_ptr &sysvshm_module_entry
-
-#include <sys/types.h>
-#include <sys/ipc.h>
-#include <sys/shm.h>
-
-typedef struct {
- int le_shm;
- long init_mem;
-} sysvshm_module;
-
-typedef struct {
- long key;
- long length;
- long next;
- char mem;
-} sysvshm_chunk;
-
-typedef struct {
- char magic[8];
- long start;
- long end;
- long free;
- long total;
-} sysvshm_chunk_head;
-
-typedef struct {
- key_t key; /* Key set by user */
- long id; /* Returned by shmget. */
- sysvshm_chunk_head *ptr; /* memoryaddress of shared memory */
-} sysvshm_shm;
-
-PHP_MINIT_FUNCTION(sysvshm);
-PHP_FUNCTION(shm_attach);
-PHP_FUNCTION(shm_detach);
-PHP_FUNCTION(shm_remove);
-PHP_FUNCTION(shm_put_var);
-PHP_FUNCTION(shm_get_var);
-PHP_FUNCTION(shm_remove_var);
-
-extern sysvshm_module php_sysvshm;
-
-#else
-
-#define sysvshm_module_ptr NULL
-
-#endif
-
-#define phpext_sysvshm_ptr sysvshm_module_ptr
-
-#endif /* PHP_SYSVSHM_H */
diff --git a/ext/sysvshm/sysvshm.c b/ext/sysvshm/sysvshm.c
deleted file mode 100644
index 47b979072d..0000000000
--- a/ext/sysvshm/sysvshm.c
+++ /dev/null
@@ -1,445 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Christian Cartus <cartus@atrior.de> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-/* This has been built and tested on Linux 2.2.14
- *
- * This has been built and tested on Solaris 2.6.
- * It may not compile or execute correctly on other systems.
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "php.h"
-
-#if HAVE_SYSVSHM
-
-#include <errno.h>
-
-#include "php_sysvshm.h"
-#include "ext/standard/php_var.h"
-#include "ext/standard/php_smart_str.h"
-
-/* {{{ sysvshm_functions[]
- */
-function_entry sysvshm_functions[] = {
- PHP_FE(shm_attach, NULL)
- PHP_FE(shm_remove, NULL)
- PHP_FE(shm_detach, NULL)
- PHP_FE(shm_put_var, NULL)
- PHP_FE(shm_get_var, NULL)
- PHP_FE(shm_remove_var, NULL)
- {NULL, NULL, NULL}
-};
-/* }}} */
-
-/* {{{ sysvshm_module_entry
- */
-zend_module_entry sysvshm_module_entry = {
- STANDARD_MODULE_HEADER,
- "sysvshm",
- sysvshm_functions,
- PHP_MINIT(sysvshm),
- NULL,
- NULL,
- NULL,
- NULL,
- NO_VERSION_YET,
- STANDARD_MODULE_PROPERTIES
-};
-/* }}} */
-
-#ifdef COMPILE_DL_SYSVSHM
-ZEND_GET_MODULE(sysvshm)
-#endif
-
-#undef shm_ptr /* undefine AIX-specific macro */
-
-THREAD_LS sysvshm_module php_sysvshm;
-
-static int php_put_shm_data(sysvshm_chunk_head *ptr, long key, char *data, long len);
-static long php_check_shm_data(sysvshm_chunk_head *ptr, long key);
-static int php_remove_shm_data(sysvshm_chunk_head *ptr, long shm_varpos);
-
-/* {{{ php_release_sysvshm
- */
-static void php_release_sysvshm(zend_rsrc_list_entry *rsrc TSRMLS_DC)
-{
- sysvshm_shm *shm_ptr = (sysvshm_shm *) rsrc->ptr;
- shmdt((void *) shm_ptr->ptr);
- efree(shm_ptr);
-}
-/* }}} */
-
-/* {{{ PHP_MINIT_FUNCTION
- */
-PHP_MINIT_FUNCTION(sysvshm)
-{
- php_sysvshm.le_shm = zend_register_list_destructors_ex(php_release_sysvshm, NULL, "sysvshm", module_number);
-
- if (cfg_get_long("sysvshm.init_mem", &php_sysvshm.init_mem) == FAILURE) {
- php_sysvshm.init_mem=10000;
- }
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ proto int shm_attach(int key [, int memsize [, int perm]])
- Creates or open a shared memory segment */
-PHP_FUNCTION(shm_attach)
-{
- zval **arg_key, **arg_size, **arg_flag;
- long shm_size, shm_flag;
- sysvshm_shm *shm_list_ptr;
- char *shm_ptr;
- sysvshm_chunk_head *chunk_ptr;
- key_t shm_key = (key_t) 0;
- long shm_id, list_id;
- int ac = ZEND_NUM_ARGS();
-
- shm_flag = 0666;
- shm_size = php_sysvshm.init_mem;
-
- if (ac < 1 || ac > 3 || zend_get_parameters_ex(ac, &arg_key, &arg_size, &arg_flag) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- switch (ac) {
- case 3:
- convert_to_long_ex(arg_flag);
- shm_flag = Z_LVAL_PP(arg_flag);
- case 2:
- convert_to_long_ex(arg_size);
- shm_size= Z_LVAL_PP(arg_size);
- case 1:
- convert_to_long_ex(arg_key);
- shm_key = Z_LVAL_PP(arg_key);
- }
-
- shm_list_ptr = (sysvshm_shm *) emalloc(sizeof(sysvshm_shm));
-
- /* get the id from a specified key or create new shared memory */
- if ((shm_id = shmget(shm_key, 0, 0)) < 0) {
- if (shm_size < sizeof(sysvshm_chunk_head)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "failed for key 0x%x: memorysize too small", shm_key);
- efree(shm_list_ptr);
- RETURN_FALSE;
- }
- if ((shm_id = shmget(shm_key, shm_size, shm_flag | IPC_CREAT | IPC_EXCL)) < 0) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "failed for key 0x%x: %s", shm_key, strerror(errno));
- efree(shm_list_ptr);
- RETURN_FALSE;
- }
- }
-
- if ((shm_ptr = shmat(shm_id, NULL, 0)) == (void *) - 1) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "failed for key 0x%x: %s", shm_key, strerror(errno));
- efree(shm_list_ptr);
- RETURN_FALSE;
- }
-
- /* check if shm is already initialized */
- chunk_ptr = (sysvshm_chunk_head *) shm_ptr;
- if (strcmp((char*) &(chunk_ptr->magic), "PHP_SM") != 0) {
- strcpy((char*) &(chunk_ptr->magic), "PHP_SM");
- chunk_ptr->start = sizeof(sysvshm_chunk_head);
- chunk_ptr->end = chunk_ptr->start;
- chunk_ptr->total = shm_size;
- chunk_ptr->free = shm_size-chunk_ptr->end;
- }
-
- shm_list_ptr->key = shm_key;
- shm_list_ptr->id = shm_id;
- shm_list_ptr->ptr = chunk_ptr;
- list_id = zend_list_insert(shm_list_ptr, php_sysvshm.le_shm);
- RETURN_LONG(list_id);
-}
-/* }}} */
-
-/* {{{ proto bool shm_detach(int shm_identifier)
- Disconnects from shared memory segment */
-PHP_FUNCTION(shm_detach)
-{
- zval **arg_id;
- int type;
- sysvshm_shm *shm_list_ptr;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg_id) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long_ex(arg_id);
- shm_list_ptr = (sysvshm_shm *) zend_list_find(Z_LVAL_PP(arg_id), &type);
- if (!shm_list_ptr || type != php_sysvshm.le_shm) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "The parameter is not a valid shm_indentifier");
- RETURN_FALSE;
- }
-
- zend_list_delete(Z_LVAL_PP(arg_id));
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto bool shm_remove(int shm_identifier)
- Removes shared memory from Unix systems */
-PHP_FUNCTION(shm_remove)
-{
- zval **arg_id;
- long id;
- int type;
- sysvshm_shm *shm_list_ptr;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg_id) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long_ex(arg_id);
- id = Z_LVAL_PP(arg_id);
- shm_list_ptr = (sysvshm_shm *) zend_list_find(id, &type);
-
- if (!shm_list_ptr) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "The parameter is not a valid shm_indentifier");
- RETURN_FALSE;
- }
-
- if (shmctl(shm_list_ptr->id, IPC_RMID,NULL) < 0) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "failed for key 0x%x, id %ld: %s", shm_list_ptr->key, id, strerror(errno));
- RETURN_FALSE;
- }
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto bool shm_put_var(int shm_identifier, int variable_key, mixed variable)
- Inserts or updates a variable in shared memory */
-PHP_FUNCTION(shm_put_var)
-{
- zval **arg_id, **arg_key, **arg_var;
- long key, id;
- sysvshm_shm *shm_list_ptr;
- int type;
- smart_str shm_var = {0};
- int ret;
- php_serialize_data_t var_hash;
-
- if (ZEND_NUM_ARGS() != 3 || zend_get_parameters_ex(3, &arg_id, &arg_key, &arg_var) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long_ex(arg_id);
- id = Z_LVAL_PP(arg_id);
- convert_to_long_ex(arg_key);
- key = Z_LVAL_PP(arg_key);
-
- shm_list_ptr = (sysvshm_shm *) zend_list_find(id, &type);
- if (type != php_sysvshm.le_shm) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "%ld is not a SysV shared memory index", id);
- RETURN_FALSE;
- }
-
- /* setup string-variable and serialize */
-
- PHP_VAR_SERIALIZE_INIT(var_hash);
- php_var_serialize(&shm_var, arg_var, &var_hash TSRMLS_CC);
- PHP_VAR_SERIALIZE_DESTROY(var_hash);
- /* insert serialized variable into shared memory */
- ret = php_put_shm_data(shm_list_ptr->ptr, key, shm_var.c, shm_var.len);
-
- /* free string */
- smart_str_free(&shm_var);
-
- if (ret == -1) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "not enough shared memory left");
- RETURN_FALSE;
- }
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto mixed shm_get_var(int id, int variable_key)
- Returns a variable from shared memory */
-PHP_FUNCTION(shm_get_var)
-{
- zval **arg_id, **arg_key;
- long key, id;
- sysvshm_shm *shm_list_ptr;
- int type;
- char *shm_data;
- long shm_varpos;
- sysvshm_chunk *shm_var;
- php_unserialize_data_t var_hash;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &arg_id, &arg_key) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long_ex(arg_id);
- id = Z_LVAL_PP(arg_id);
- convert_to_long_ex(arg_key);
- key = Z_LVAL_PP(arg_key);
-
- shm_list_ptr = (sysvshm_shm *) zend_list_find(id, &type);
- if (type != php_sysvshm.le_shm) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "%ld is not a SysV shared memory index", id);
- RETURN_FALSE;
- }
-
- /* setup string-variable and serialize */
- /* get serialized variable from shared memory */
- shm_varpos = php_check_shm_data((shm_list_ptr->ptr), key);
-
- if (shm_varpos < 0) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "variable key %ld doesn't exist", key);
- RETURN_FALSE;
- }
- shm_var = (sysvshm_chunk*) ((char *)shm_list_ptr->ptr + shm_varpos);
- shm_data = &shm_var->mem;
-
- PHP_VAR_UNSERIALIZE_INIT(var_hash);
- if (php_var_unserialize(&return_value, (const char **) &shm_data, shm_data + shm_var->length, &var_hash TSRMLS_CC) != 1) {
- PHP_VAR_UNSERIALIZE_DESTROY(var_hash);
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "variable data in shared memory is corruped");
- RETURN_FALSE;
- }
- PHP_VAR_UNSERIALIZE_DESTROY(var_hash);
-}
-/* }}} */
-
-/* {{{ proto bool shm_remove_var(int id, int variable_key)
- Removes variable from shared memory */
-PHP_FUNCTION(shm_remove_var)
-{
- zval **arg_id, **arg_key;
- long key, id;
- sysvshm_shm *shm_list_ptr;
- int type;
- long shm_varpos;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &arg_id, &arg_key) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long_ex(arg_id);
- id = Z_LVAL_PP(arg_id);
- convert_to_long_ex(arg_key);
- key = Z_LVAL_PP(arg_key);
-
- shm_list_ptr = (sysvshm_shm *) zend_list_find(id, &type);
- if (type != php_sysvshm.le_shm) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "%ld is not a SysV shared memory index", id);
- RETURN_FALSE;
- }
-
- shm_varpos = php_check_shm_data((shm_list_ptr->ptr), key);
-
- if (shm_varpos < 0) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "variable key %ld doesn't exist", key);
- RETURN_FALSE;
- }
- php_remove_shm_data((shm_list_ptr->ptr), shm_varpos);
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ php_put_shm_data
- * inserts an ascii-string into shared memory */
-static int php_put_shm_data(sysvshm_chunk_head *ptr, long key, char *data, long len)
-{
- sysvshm_chunk *shm_var;
- long total_size;
- long shm_varpos;
-
- total_size = ((long) (len + sizeof(sysvshm_chunk) - 1) / 4) * 4 + 4; /* 4-byte alligment */
-
- if ((shm_varpos = php_check_shm_data(ptr, key)) > 0) {
- php_remove_shm_data(ptr, shm_varpos);
- }
-
- if (ptr->free < total_size) {
- return -1; /* not enough memeory */
- }
-
- shm_var = (sysvshm_chunk *) ((char *) ptr + ptr->end);
- shm_var->key = key;
- shm_var->length = len;
- shm_var->next = total_size;
- memcpy(&(shm_var->mem), data, len);
- ptr->end += total_size;
- ptr->free -= total_size;
- return 0;
-}
-/* }}} */
-
-/* {{{ php_check_shm_data
- */
-static long php_check_shm_data(sysvshm_chunk_head *ptr, long key)
-{
- long pos;
- sysvshm_chunk *shm_var;
-
- pos = ptr->start;
-
- for (;;) {
- if (pos >= ptr->end) {
- return -1;
- }
- shm_var = (sysvshm_chunk*) ((char *) ptr + pos);
- if (shm_var->key == key) {
- return pos;
- }
- pos += shm_var->next;
- }
- return -1;
-}
-/* }}} */
-
-/* {{{ php_remove_shm_data
- */
-static int php_remove_shm_data(sysvshm_chunk_head *ptr, long shm_varpos)
-{
- sysvshm_chunk *chunk_ptr, *next_chunk_ptr;
- long memcpy_len;
-
- chunk_ptr = (sysvshm_chunk *) ((char *) ptr + shm_varpos);
- next_chunk_ptr = (sysvshm_chunk *) ((char *) ptr + shm_varpos + chunk_ptr->next);
-
- memcpy_len = ptr->end-shm_varpos - chunk_ptr->next;
- ptr->free += chunk_ptr->next;
- ptr->end -= chunk_ptr->next;
- if (memcpy_len > 0) {
- memcpy(chunk_ptr, next_chunk_ptr, memcpy_len);
- }
- return 0;
-}
-/* }}} */
-
-#endif /* HAVE_SYSVSHM */
-
-/*
- * 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/tidy/CREDITS b/ext/tidy/CREDITS
deleted file mode 100644
index 1c77b2ff3b..0000000000
--- a/ext/tidy/CREDITS
+++ /dev/null
@@ -1,2 +0,0 @@
-tidy
-John Coggeshall, Ilia Alshanetsky
diff --git a/ext/tidy/README b/ext/tidy/README
deleted file mode 100644
index 19f6b9ff6a..0000000000
--- a/ext/tidy/README
+++ /dev/null
@@ -1,16 +0,0 @@
-
-README FOR ext/tidy by John Coggeshall <john@php.net>
-
-
-Tidy is an extension based on Libtidy (http://tidy.sf.net/) and allows a PHP developer
-to clean, repair, and traverse HTML, XHTML, and XML documents -- including ones with
-embedded scripting languages such as PHP or ASP within them using OO constructs.
-
----------------------------------------------------------------------------------------
-!! Important Note !!
----------------------------------------------------------------------------------------
-Older versions of libtidy have a small memory leak inside the ParseConfigFileEnc() function
-used to load configuration from a file. If you intend to use this functionality apply
-the "libtidy.txt" patch (cd tidy/src/; patch -p0 < libtidy.txt) to libtidy sources and
-then recompile libtidy.
----------------------------------------------------------------------------------------
diff --git a/ext/tidy/TODO b/ext/tidy/TODO
deleted file mode 100644
index 8a13162cc0..0000000000
--- a/ext/tidy/TODO
+++ /dev/null
@@ -1,3 +0,0 @@
-TODO
-
-Do the docs.
diff --git a/ext/tidy/config.m4 b/ext/tidy/config.m4
deleted file mode 100644
index bd6e018e12..0000000000
--- a/ext/tidy/config.m4
+++ /dev/null
@@ -1,38 +0,0 @@
-dnl
-dnl $Id$
-dnl
-
-PHP_ARG_WITH(tidy,for TIDY support,
-[ --with-tidy[=DIR] Include TIDY support])
-
-if test "$PHP_TIDY" != "no"; then
-
- if test "$PHP_TIDY" != "yes"; then
- TIDY_SEARCH_DIRS=$PHP_TIDY
- else
- TIDY_SEARCH_DIRS="/usr/local /usr"
- fi
-
- for i in $TIDY_SEARCH_DIRS; do
- if test -f $i/include/tidy/tidy.h; then
- TIDY_DIR=$i
- TIDY_INCDIR=$i/include/tidy
- elif test -f $i/include/tidy.h; then
- TIDY_DIR=$i
- TIDY_INCDIR=$i/include
- fi
- done
-
- if test -z "$TIDY_DIR"; then
- AC_MSG_ERROR(Cannot find libtidy)
- fi
-
- TIDY_LIBDIR=$TIDY_DIR/lib
-
- PHP_ADD_LIBRARY_WITH_PATH(tidy, $TIDY_LIBDIR, TIDY_SHARED_LIBADD)
- PHP_ADD_INCLUDE($TIDY_INCDIR)
-
- PHP_NEW_EXTENSION(tidy, tidy.c, $ext_shared)
- PHP_SUBST(TIDY_SHARED_LIBADD)
- AC_DEFINE(HAVE_TIDY,1,[ ])
-fi
diff --git a/ext/tidy/config.w32 b/ext/tidy/config.w32
deleted file mode 100644
index e9e2a225f7..0000000000
--- a/ext/tidy/config.w32
+++ /dev/null
@@ -1,22 +0,0 @@
-// $Id$
-// vim:ft=javascript
-
-ARG_WITH("tidy", "TIDY support", "no");
-
-if (PHP_TIDY != "no") {
- if (CHECK_LIB("libtidy.lib", "tidy", PHP_TIDY) &&
- (
- CHECK_HEADER_ADD_INCLUDE("tidy.h", "CFLAGS_TIDY") ||
- CHECK_HEADER_ADD_INCLUDE("tidy/tidy.h", "CFLAGS_TIDY", null, null, true) ||
- CHECK_HEADER_ADD_INCLUDE("libtidy/tidy.h", "CFLAGS_TIDY", null, null, true)
- )) {
- EXTENSION("tidy", "tidy.c");
- AC_DEFINE('HAVE_TIDY', 1, 'Have TIDY library');
- if (!PHP_TIDY_SHARED) {
- ADD_DEF_FILE("ext\\tidy\\php_tidy.def");
- }
- } else {
- WARNING("tidy not enabled; libraries and headers not found");
- }
-}
-
diff --git a/ext/tidy/examples/cleanhtml.php b/ext/tidy/examples/cleanhtml.php
deleted file mode 100644
index 9a6713dc55..0000000000
--- a/ext/tidy/examples/cleanhtml.php
+++ /dev/null
@@ -1,40 +0,0 @@
-<?php
-
- /*
- * cleanhtml.php
- *
- * A simple script to clean and repair HTML,XHTML,PHP,ASP,etc. documents
- * if no file is provided, it reads from standard input.
- *
- * NOTE: Works only with tidy for PHP 4.3.x, for tidy in PHP 5 see cleanhtml5.php
- *
- * By: John Coggeshall <john@php.net>
- *
- * Usage: php cleanhtml.php [filename]
- *
- */
-
- if(!isset($_SERVER['argv'][1])) {
- $data = file_get_contents("php://stdin");
- tidy_parse_string($data);
- } else {
- tidy_parse_file($_SERVER['argv'][1]);
- }
-
- tidy_clean_repair();
-
- if(tidy_warning_count() ||
- tidy_error_count()) {
-
- echo "\n\nThe following errors or warnings occured:\n";
- echo tidy_get_error_buffer();
- echo "\n";
- }
-
- echo tidy_get_output();
-
-?>
-
-
-
- \ No newline at end of file
diff --git a/ext/tidy/examples/cleanhtml5.php b/ext/tidy/examples/cleanhtml5.php
deleted file mode 100644
index 4dfd7643e1..0000000000
--- a/ext/tidy/examples/cleanhtml5.php
+++ /dev/null
@@ -1,39 +0,0 @@
-<?php
-
- /*
- * cleanhtml5.php
- *
- * A simple script to clean and repair HTML,XHTML,PHP,ASP,etc. documents
- * if no file is provided, it reads from standard input.
- *
- * NOTE: Works only with tidy for PHP 5, for tidy in PHP 4.3.x see cleanhtml.php
- *
- * By: John Coggeshall <john@php.net>
- *
- * Usage: php cleanhtml5.php [filename]
- *
- */
-
- if(!isset($_SERVER['argv'][1])) {
- $data = file_get_contents("php://stdin");
- $tidy = tidy_parse_string($data);
- } else {
- $tidy = tidy_parse_file($_SERVER['argv'][1]);
- }
-
- $tidy->cleanRepair();
-
- if(!empty($tidy->errorBuffer)) {
-
- echo "\n\nThe following errors or warnings occured:\n";
- echo "{$tidy->errorBuffer}\n";
-
- }
-
- echo $tidy;
-
-?>
-
-
-
-
diff --git a/ext/tidy/examples/dumpit5.php b/ext/tidy/examples/dumpit5.php
deleted file mode 100644
index d7aee2d652..0000000000
--- a/ext/tidy/examples/dumpit5.php
+++ /dev/null
@@ -1,92 +0,0 @@
-<?php
- /*
- * dumpit5.php
- *
- * a command-line script which dumps the given HTML, PHP, ASP, XHTML, etc.
- * file as it is represented in the document model.
- *
- * NOTE: Only works with tidy for PHP 5+, for tidy in 4.3.x, see dumpit.php
- *
- * By: John Coggeshall <john@php.net>
- *
- * Usage; php dumpit5.php <filename>
- */
-
- $tidy = tidy_parse_file($_SERVER['argv'][1]);
-
- /* Optionally you can do this here if you want to fix up the document */
-
- /* $tidy->clean_repair() */
-
- $tree = $tidy->root();
- dump_tree($tree);
- echo "\n";
-
- function node_type($type) {
-
- switch($type) {
-
- case TIDY_NODETYPE_ROOT: return "Root Node";
- case TIDY_NODETYPE_DOCTYPE: return "DocType Node";
- case TIDY_NODETYPE_COMMENT: return "Comment Node";
- case TIDY_NODETYPE_PROCINS: return "ProcIns Node";
- case TIDY_NODETYPE_TEXT: return "Text Node";
- case TIDY_NODETYPE_START: return "Start Node";
- case TIDY_NODETYPE_END: return "End Node";
- case TIDY_NODETYPE_STARTEND: return "Start/End Node";
- case TIDY_NODETYPE_CDATA: return "CDATA Node";
- case TIDY_NODETYPE_SECTION: return "Section Node";
- case TIDY_NODETYPE_ASP: return "ASP Source Code Node";
- case TIDY_NODETYPE_PHP: return "PHP Source Code Node";
- case TIDY_NODETYPE_JSTE: return "JSTE Source Code";
- case TIDY_NODETYPE_XMLDECL: return "XML Declaration Node";
- default: return "Unknown Node";
- }
- }
-
- function do_leaf($string, $indent) {
- for($i = 0; $i < $indent; $i++) {
- echo " ";
- }
- echo $string;
- }
-
- function dump_tree(tidyNode $node, $indent = 0) {
-
- /* Put something there if the node name is empty */
- $nodename = trim(strtoupper($node->name));
- $nodename = (empty($nodename)) ? "[EMPTY]" : $nodename;
-
- /* Generate the Node, and a pretty name for it */
- do_leaf(" + $nodename (".node_type($node->type).")\n", $indent);
-
- /* Check to see if this node is a text node. Text nodes are
- generated by start/end tags and contain the text in between.
- i.e. <B>foo</B> will create a text node with $node->value
- equal to 'foo' */
- if($node->type == TIDY_NODETYPE_TEXT) {
- do_leaf(" |\n", $indent);
- do_leaf(" +---- Value: '{$node->value}'\n", $indent);
- }
-
- if(count($node->attribute)) {
- do_leaf(" |\n", $indent);
- do_leaf(" +---- Attributes\n", $indent);
-
- foreach($node->attribute as $name=>$value) {
- @do_leaf(" +-- $name\n", $indent);
- do_leaf(" | +-- Value: $value\n", $indent);
- }
- }
-
- /* Recurse along the children to generate the remaining nodes */
- if($node->hasChildren()) {
- foreach($node->child as $child) {
- dump_tree($child, $indent + 3);
- }
- }
-
- }
-
-
-?> \ No newline at end of file
diff --git a/ext/tidy/examples/urlgrab5.php b/ext/tidy/examples/urlgrab5.php
deleted file mode 100644
index 875baf0cf9..0000000000
--- a/ext/tidy/examples/urlgrab5.php
+++ /dev/null
@@ -1,39 +0,0 @@
-<?php
- /*
- * urlgrab5.php
- *
- * A simple command-line utility to extract all of the URLS contained
- * within <A HREF> tags from a document.
- *
- * NOTE: Only works with tidy for PHP 5, please see urlgrab.php for tidy for PHP 4.3.x
- *
- * By: John Coggeshall <john@php.net>
- *
- * Usage: php urlgrab5.php <file>
- *
- */
- function dump_nodes(tidyNode $node, &$urls = NULL) {
-
- $urls = (is_array($urls)) ? $urls : array();
-
- if(isset($node->id)) {
- if($node->id == TIDY_TAG_A) {
- $urls[] = $node->attribute['href'];
- }
- }
-
- if($node->hasChildren()) {
-
- foreach($node->child as $c) {
- dump_nodes($c, $urls);
- }
-
- }
-
- return $urls;
- }
-
- $a = tidy_parse_file($_SERVER['argv'][1]);
- $a->cleanRepair();
- print_r(dump_nodes($a->html()));
-?>
diff --git a/ext/tidy/libtidy.txt b/ext/tidy/libtidy.txt
deleted file mode 100644
index 53185d9fc2..0000000000
--- a/ext/tidy/libtidy.txt
+++ /dev/null
@@ -1,12 +0,0 @@
---- config.c Mon Jun 9 04:07:55 2003
-+++ config.c Sun Sep 21 16:13:04 2003
-@@ -719,7 +719,8 @@
- }
-
- fclose( fin );
-- MemFree( cfg->cfgIn );
-+ MemFree( cfg->cfgIn->source.sourceData );
-+ MemFree( cfg->cfgIn );
- cfg->cfgIn = NULL;
- }
-
diff --git a/ext/tidy/package.xml b/ext/tidy/package.xml
deleted file mode 100644
index a5b461ce45..0000000000
--- a/ext/tidy/package.xml
+++ /dev/null
@@ -1,65 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1" ?>
-<!DOCTYPE package SYSTEM "../pear/package.dtd">
-<package>
- <name>tidy</name>
- <summary>Tidy HTML Repairing and Parsing</summary>
- <maintainers>
- <maintainer>
- <user>john</user>
- <name>John Coggeshall</name>
- <email>john@php.net</email>
- <role>lead</role>
- </maintainer>
- <maintainer>
- <user>iliaa</user>
- <name>Ilia Alshanetsky</name>
- <email>ilia@php.net</email>
- <role>developer</role>
- </maintainer>
- </maintainers>
- <description>
-Tidy is a binding for the Tidy HTML clean and repair utility which
-allows you to not only clean and otherwise manipluate HTML documents,
-but also traverse the document tree using the Zend Engine 2 OO semantics.
- </description>
- <license>PHP</license>
- <release>
- <state>beta</state>
- <version>2.0dev</version>
- <date>2003-11-13</date>
- <notes>
- Major API changes for PHP 5.0, including the re-introduction of resources, output buffering support,
- dual-nature syntax (tidy_clean_repair($tidy_res) or $tidy->clean_repair()) and more.
- </notes>
- <configureoptions>
- <configureoption name="with-tidy" default="autodetect" prompt="Tidy library installation dir?"/>
- </configureoptions>
- <filelist>
- <file role="src" name="config.m4"/>
- <file role="src" name="tidy.c"/>
- <file role="src" name="php_tidy.h"/>
-
- <file role="doc" name="CREDITS"/>
- <file role="doc" name="TODO"/>
- <file role="doc" name="examples/cleanhtml.php"/>
- <file role="doc" name="examples/dumpit.php"/>
- <file role="doc" name="examples/urlgrab.php"/>
- <file role="doc" name="libtidy.txt"/>
-
- <file role="test" name="tests/001.phpt"/>
- <file role="test" name="tests/002.phpt"/>
- <file role="test" name="tests/003.phpt"/>
- <file role="test" name="tests/004.phpt"/>
- <file role="test" name="tests/005.phpt"/>
- <file role="test" name="tests/005.html"/>
- <file role="test" name="tests/006.phpt"/>
- <file role="test" name="tests/007.phpt"/>
- </filelist>
- <deps>
- <dep type="php" rel="ge" version="5" />
- </deps>
- </release>
-</package>
-<!--
-vim:et:ts=1:sw=1
--->
diff --git a/ext/tidy/php_tidy.def b/ext/tidy/php_tidy.def
deleted file mode 100644
index 1c17276de6..0000000000
--- a/ext/tidy/php_tidy.def
+++ /dev/null
@@ -1,292 +0,0 @@
-EXPORTS
-tidyBufInit
-tidyBufAlloc
-tidyBufCheckAlloc
-tidyBufFree
-tidyBufClear
-tidyBufAttach
-tidyBufDetach
-tidyBufAppend
-tidyBufPutByte
-tidyBufPopByte
-tidyBufGetByte
-tidyBufEndOfInput
-tidyBufUngetByte
-initInputBuffer
-initOutputBuffer
-tidyCreate
-tidyRelease
-tidySetAppData
-tidyGetAppData
-tidyReleaseDate
-tidyStatus
-tidyDetectedHtmlVersion
-tidyDetectedXhtml
-tidyDetectedGenericXml
-tidyErrorCount
-tidyWarningCount
-tidyAccessWarningCount
-tidyConfigErrorCount
-tidyLoadConfig
-tidyLoadConfigEnc
-tidyFileExists
-tidySetCharEncoding
-tidySetOptionCallback
-tidyOptGetIdForName
-tidyGetOptionList
-tidyGetNextOption
-tidyGetOption
-tidyGetOptionByName
-tidyOptGetId
-tidyOptGetName
-tidyOptGetType
-tidyOptIsReadOnly
-tidyOptGetCategory
-tidyOptGetDefault
-tidyOptGetDefaultInt
-tidyOptGetDefaultBool
-tidyOptGetPickList
-tidyOptGetNextPick
-tidyOptGetValue
-tidyOptSetValue
-tidyOptParseValue
-tidyOptGetInt
-tidyOptSetInt
-tidyOptGetBool
-tidyOptSetBool
-tidyOptResetToDefault
-tidyOptResetAllToDefault
-tidyOptSnapshot
-tidyOptResetToSnapshot
-tidyOptDiffThanDefault
-tidyOptDiffThanSnapshot
-tidyOptCopyConfig
-tidyOptGetEncName
-tidyOptGetCurrPick
-tidyOptGetDeclTagList
-tidyOptGetNextDeclTag
-tidyInitSource
-tidyGetByte
-tidyUngetByte
-tidyIsEOF
-tidyInitSink
-tidyPutByte
-tidySetReportFilter
-tidySetErrorFile
-tidySetErrorBuffer
-tidySetErrorSink
-tidySetMallocCall
-tidySetReallocCall
-tidySetFreeCall
-tidySetPanicCall
-tidyParseFile
-tidyParseStdin
-tidyParseString
-tidyParseBuffer
-tidyParseSource
-tidyCleanAndRepair
-tidyRunDiagnostics
-tidySaveFile
-tidySaveStdout
-tidySaveBuffer
-tidySaveString
-tidySaveSink
-tidyOptSaveFile
-tidyOptSaveSink
-tidyErrorSummary
-tidyGeneralInfo
-tidyGetRoot
-tidyGetHtml
-tidyGetHead
-tidyGetBody
-tidyGetParent
-tidyGetChild
-tidyGetNext
-tidyGetPrev
-tidyAttrFirst
-tidyAttrNext
-tidyAttrName
-tidyAttrValue
-tidyNodeGetType
-tidyNodeGetName
-tidyNodeIsText
-tidyNodeIsProp
-tidyNodeIsHeader
-tidyNodeHasText
-tidyNodeGetText
-tidyNodeGetId
-tidyNodeLine
-tidyNodeColumn
-tidyNodeIsHTML
-tidyNodeIsHEAD
-tidyNodeIsTITLE
-tidyNodeIsBASE
-tidyNodeIsMETA
-tidyNodeIsBODY
-tidyNodeIsFRAMESET
-tidyNodeIsFRAME
-tidyNodeIsIFRAME
-tidyNodeIsNOFRAMES
-tidyNodeIsHR
-tidyNodeIsH1
-tidyNodeIsH2
-tidyNodeIsPRE
-tidyNodeIsLISTING
-tidyNodeIsP
-tidyNodeIsUL
-tidyNodeIsOL
-tidyNodeIsDL
-tidyNodeIsDIR
-tidyNodeIsLI
-tidyNodeIsDT
-tidyNodeIsDD
-tidyNodeIsTABLE
-tidyNodeIsCAPTION
-tidyNodeIsTD
-tidyNodeIsTH
-tidyNodeIsTR
-tidyNodeIsCOL
-tidyNodeIsCOLGROUP
-tidyNodeIsBR
-tidyNodeIsA
-tidyNodeIsLINK
-tidyNodeIsB
-tidyNodeIsI
-tidyNodeIsSTRONG
-tidyNodeIsEM
-tidyNodeIsBIG
-tidyNodeIsSMALL
-tidyNodeIsPARAM
-tidyNodeIsOPTION
-tidyNodeIsOPTGROUP
-tidyNodeIsIMG
-tidyNodeIsMAP
-tidyNodeIsAREA
-tidyNodeIsNOBR
-tidyNodeIsWBR
-tidyNodeIsFONT
-tidyNodeIsLAYER
-tidyNodeIsSPACER
-tidyNodeIsCENTER
-tidyNodeIsSTYLE
-tidyNodeIsSCRIPT
-tidyNodeIsNOSCRIPT
-tidyNodeIsFORM
-tidyNodeIsTEXTAREA
-tidyNodeIsBLOCKQUOTE
-tidyNodeIsAPPLET
-tidyNodeIsOBJECT
-tidyNodeIsDIV
-tidyNodeIsSPAN
-tidyNodeIsINPUT
-tidyNodeIsQ
-tidyNodeIsLABEL
-tidyNodeIsH3
-tidyNodeIsH4
-tidyNodeIsH5
-tidyNodeIsH6
-tidyNodeIsADDRESS
-tidyNodeIsXMP
-tidyNodeIsSELECT
-tidyNodeIsBLINK
-tidyNodeIsMARQUEE
-tidyNodeIsEMBED
-tidyNodeIsBASEFONT
-tidyNodeIsISINDEX
-tidyNodeIsS
-tidyNodeIsSTRIKE
-tidyNodeIsU
-tidyNodeIsMENU
-tidyAttrGetId
-tidyAttrIsEvent
-tidyAttrIsProp
-tidyAttrIsHREF
-tidyAttrIsSRC
-tidyAttrIsID
-tidyAttrIsNAME
-tidyAttrIsSUMMARY
-tidyAttrIsALT
-tidyAttrIsLONGDESC
-tidyAttrIsUSEMAP
-tidyAttrIsISMAP
-tidyAttrIsLANGUAGE
-tidyAttrIsTYPE
-tidyAttrIsVALUE
-tidyAttrIsCONTENT
-tidyAttrIsTITLE
-tidyAttrIsXMLNS
-tidyAttrIsDATAFLD
-tidyAttrIsWIDTH
-tidyAttrIsHEIGHT
-tidyAttrIsFOR
-tidyAttrIsSELECTED
-tidyAttrIsCHECKED
-tidyAttrIsLANG
-tidyAttrIsTARGET
-tidyAttrIsHTTP_EQUIV
-tidyAttrIsREL
-tidyAttrIsOnMOUSEMOVE
-tidyAttrIsOnMOUSEDOWN
-tidyAttrIsOnMOUSEUP
-tidyAttrIsOnCLICK
-tidyAttrIsOnMOUSEOVER
-tidyAttrIsOnMOUSEOUT
-tidyAttrIsOnKEYDOWN
-tidyAttrIsOnKEYUP
-tidyAttrIsOnKEYPRESS
-tidyAttrIsOnFOCUS
-tidyAttrIsOnBLUR
-tidyAttrIsBGCOLOR
-tidyAttrIsLINK
-tidyAttrIsALINK
-tidyAttrIsVLINK
-tidyAttrIsTEXT
-tidyAttrIsSTYLE
-tidyAttrIsABBR
-tidyAttrIsCOLSPAN
-tidyAttrIsROWSPAN
-tidyAttrGetHREF
-tidyAttrGetSRC
-tidyAttrGetID
-tidyAttrGetNAME
-tidyAttrGetSUMMARY
-tidyAttrGetALT
-tidyAttrGetLONGDESC
-tidyAttrGetUSEMAP
-tidyAttrGetISMAP
-tidyAttrGetLANGUAGE
-tidyAttrGetTYPE
-tidyAttrGetVALUE
-tidyAttrGetCONTENT
-tidyAttrGetTITLE
-tidyAttrGetXMLNS
-tidyAttrGetDATAFLD
-tidyAttrGetWIDTH
-tidyAttrGetHEIGHT
-tidyAttrGetFOR
-tidyAttrGetSELECTED
-tidyAttrGetCHECKED
-tidyAttrGetLANG
-tidyAttrGetTARGET
-tidyAttrGetHTTP_EQUIV
-tidyAttrGetREL
-tidyAttrGetOnMOUSEMOVE
-tidyAttrGetOnMOUSEDOWN
-tidyAttrGetOnMOUSEUP
-tidyAttrGetOnCLICK
-tidyAttrGetOnMOUSEOVER
-tidyAttrGetOnMOUSEOUT
-tidyAttrGetOnKEYDOWN
-tidyAttrGetOnKEYUP
-tidyAttrGetOnKEYPRESS
-tidyAttrGetOnFOCUS
-tidyAttrGetOnBLUR
-tidyAttrGetBGCOLOR
-tidyAttrGetLINK
-tidyAttrGetALINK
-tidyAttrGetVLINK
-tidyAttrGetTEXT
-tidyAttrGetSTYLE
-tidyAttrGetABBR
-tidyAttrGetCOLSPAN
-tidyAttrGetROWSPAN
diff --git a/ext/tidy/php_tidy.h b/ext/tidy/php_tidy.h
deleted file mode 100644
index c6db213256..0000000000
--- a/ext/tidy/php_tidy.h
+++ /dev/null
@@ -1,113 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: John Coggeshall <john@php.net> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifndef PHP_TIDY_H
-#define PHP_TIDY_H
-
-extern zend_module_entry tidy_module_entry;
-#define phpext_tidy_ptr &tidy_module_entry
-
-#ifdef PHP_WIN32
-#define PHP_TIDY_API __declspec(dllexport)
-#else
-#define PHP_TIDY_API
-#endif
-
-#define TIDY_METHOD_MAP(name, func_name, arg_types) \
- ZEND_NAMED_FE(name, ZEND_FN(func_name), arg_types)
-#define TIDY_NODE_METHOD(name) PHP_FUNCTION(tnm_ ##name)
-#define TIDY_NODE_ME(name, param) TIDY_METHOD_MAP(name, tnm_ ##name, param)
-#define TIDY_DOC_METHOD(name) PHP_FUNCTION(tdm_ ##name)
-#define TIDY_DOC_ME(name, param) TIDY_METHOD_MAP(name, tdm_ ##name, param)
-#define TIDY_ATTR_METHOD(name) PHP_FUNCTION(tam_ ##name)
-#define TIDY_ATTR_ME(name, param) TIDY_METHOD_MAP(name, tam_ ##name, param)
-
-PHP_MINIT_FUNCTION(tidy);
-PHP_MSHUTDOWN_FUNCTION(tidy);
-PHP_RINIT_FUNCTION(tidy);
-PHP_RSHUTDOWN_FUNCTION(tidy);
-PHP_MINFO_FUNCTION(tidy);
-
-PHP_FUNCTION(tidy_getopt);
-PHP_FUNCTION(tidy_parse_string);
-PHP_FUNCTION(tidy_parse_file);
-PHP_FUNCTION(tidy_clean_repair);
-PHP_FUNCTION(tidy_repair_string);
-PHP_FUNCTION(tidy_repair_file);
-PHP_FUNCTION(tidy_diagnose);
-PHP_FUNCTION(tidy_get_output);
-PHP_FUNCTION(tidy_get_error_buffer);
-PHP_FUNCTION(tidy_get_release);
-PHP_FUNCTION(tidy_reset_config);
-PHP_FUNCTION(tidy_get_config);
-PHP_FUNCTION(tidy_get_status);
-PHP_FUNCTION(tidy_get_html_ver);
-PHP_FUNCTION(tidy_is_xhtml);
-PHP_FUNCTION(tidy_is_xml);
-PHP_FUNCTION(tidy_error_count);
-PHP_FUNCTION(tidy_warning_count);
-PHP_FUNCTION(tidy_access_count);
-PHP_FUNCTION(tidy_config_count);
-
-PHP_FUNCTION(ob_tidyhandler);
-
-PHP_FUNCTION(tidy_get_root);
-PHP_FUNCTION(tidy_get_html);
-PHP_FUNCTION(tidy_get_head);
-PHP_FUNCTION(tidy_get_body);
-
-TIDY_DOC_METHOD(__construct);
-TIDY_DOC_METHOD(parseFile);
-TIDY_DOC_METHOD(parseString);
-
-TIDY_NODE_METHOD(__construct);
-TIDY_NODE_METHOD(hasChildren);
-TIDY_NODE_METHOD(hasSiblings);
-TIDY_NODE_METHOD(isComment);
-TIDY_NODE_METHOD(isHtml);
-TIDY_NODE_METHOD(isXhtml);
-TIDY_NODE_METHOD(isXml);
-TIDY_NODE_METHOD(isText);
-TIDY_NODE_METHOD(isJste);
-TIDY_NODE_METHOD(isAsp);
-TIDY_NODE_METHOD(isPhp);
-
-ZEND_BEGIN_MODULE_GLOBALS(tidy)
- char *default_config;
- zval *inst;
-ZEND_END_MODULE_GLOBALS(tidy)
-
-#ifdef ZTS
-#define TG(v) TSRMG(tidy_globals_id, zend_tidy_globals *, v)
-#else
-#define TG(v) (tidy_globals.v)
-#endif
-
-#endif
-
-
-/*
- * 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/tidy/tests/001.phpt b/ext/tidy/tests/001.phpt
deleted file mode 100644
index bfd3782078..0000000000
--- a/ext/tidy/tests/001.phpt
+++ /dev/null
@@ -1,10 +0,0 @@
---TEST--
-Check for tidy presence
---SKIPIF--
-<?php if (!extension_loaded("tidy")) print "skip"; ?>
---FILE--
-<?php
-echo "tidy extension is available";
-?>
---EXPECT--
-tidy extension is available
diff --git a/ext/tidy/tests/002.phpt b/ext/tidy/tests/002.phpt
deleted file mode 100644
index 89c3804b89..0000000000
--- a/ext/tidy/tests/002.phpt
+++ /dev/null
@@ -1,18 +0,0 @@
---TEST--
-tidy_parse_string()
---SKIPIF--
-<?php if (!extension_loaded("tidy")) print "skip"; ?>
---FILE--
-<?php
- $a = tidy_parse_string("<HTML></HTML>");
- echo tidy_get_output($a);
-
-?>
---EXPECT--
-<html>
-<head>
-<title></title>
-</head>
-<body>
-</body>
-</html> \ No newline at end of file
diff --git a/ext/tidy/tests/003.phpt b/ext/tidy/tests/003.phpt
deleted file mode 100644
index 7201d6a5a2..0000000000
--- a/ext/tidy/tests/003.phpt
+++ /dev/null
@@ -1,21 +0,0 @@
---TEST--
-tidy_clean_repair()
---SKIPIF--
-<?php if (!extension_loaded("tidy")) print "skip"; ?>
---FILE--
-<?php
-
- $a = tidy_parse_string("<HTML></HTML>");
- tidy_clean_repair($a);
- echo tidy_get_output($a);
-
-?>
---EXPECT--
-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
-<html>
-<head>
-<title></title>
-</head>
-<body>
-</body>
-</html>
diff --git a/ext/tidy/tests/004.phpt b/ext/tidy/tests/004.phpt
deleted file mode 100644
index e941de452b..0000000000
--- a/ext/tidy/tests/004.phpt
+++ /dev/null
@@ -1,17 +0,0 @@
---TEST--
-tidy_diagnose()
---SKIPIF--
-<?php if (!extension_loaded("tidy")) print "skip"; ?>
---FILE--
-<?php
- $a = tidy_parse_string("<HTML></HTML>");
- tidy_diagnose($a);
- echo tidy_get_error_buffer($a);
-?>
---EXPECT--
-
-line 1 column 1 - Warning: missing <!DOCTYPE> declaration
-line 1 column 7 - Warning: discarding unexpected </html>
-line 1 column 14 - Warning: inserting missing 'title' element
-Info: Document content looks like HTML 3.2
-3 warnings, 0 errors were found! \ No newline at end of file
diff --git a/ext/tidy/tests/005.html b/ext/tidy/tests/005.html
deleted file mode 100644
index 8c17451f91..0000000000
--- a/ext/tidy/tests/005.html
+++ /dev/null
@@ -1 +0,0 @@
-<HTML></HTML>
diff --git a/ext/tidy/tests/005.phpt b/ext/tidy/tests/005.phpt
deleted file mode 100644
index b8da50721b..0000000000
--- a/ext/tidy/tests/005.phpt
+++ /dev/null
@@ -1,18 +0,0 @@
---TEST--
-tidy_parse_file()
---SKIPIF--
-<?php if (!extension_loaded("tidy")) print "skip"; ?>
---FILE--
-<?php
- $a = tidy_parse_file("ext/tidy/tests/005.html");
- echo tidy_get_output($a);
-
-?>
---EXPECT--
-<html>
-<head>
-<title></title>
-</head>
-<body>
-</body>
-</html> \ No newline at end of file
diff --git a/ext/tidy/tests/006.phpt b/ext/tidy/tests/006.phpt
deleted file mode 100644
index c826181314..0000000000
--- a/ext/tidy/tests/006.phpt
+++ /dev/null
@@ -1,16 +0,0 @@
---TEST--
-Verbose tidy_get_error_buffer()
---SKIPIF--
-<?php if (!extension_loaded("tidy")) print "skip"; ?>
---FILE--
-<?php
- $a = tidy_parse_string("<HTML><asd asdf></HTML>");
- echo tidy_get_error_buffer($a);
-
-?>
---EXPECT--
-line 1 column 1 - Warning: missing <!DOCTYPE> declaration
-line 1 column 7 - Error: <asd> is not recognized!
-line 1 column 7 - Warning: discarding unexpected <asd>
-line 1 column 17 - Warning: discarding unexpected </html>
-line 1 column 7 - Warning: inserting missing 'title' element \ No newline at end of file
diff --git a/ext/tidy/tests/007.html b/ext/tidy/tests/007.html
deleted file mode 100644
index 7dc0357779..0000000000
--- a/ext/tidy/tests/007.html
+++ /dev/null
@@ -1 +0,0 @@
-<B>testing</I>
diff --git a/ext/tidy/tests/007.phpt b/ext/tidy/tests/007.phpt
deleted file mode 100644
index d2fbb2ceb4..0000000000
--- a/ext/tidy/tests/007.phpt
+++ /dev/null
@@ -1,21 +0,0 @@
---TEST--
-Verbose tidy_getopt()
---SKIPIF--
-<?php if (!extension_loaded("tidy")) print "skip"; ?>
---INI--
-tidy.default_config=
---FILE--
-<?php
- $a = new tidy("ext/tidy/tests/007.html");
- echo "Current Value of 'tidy-mark': ";
- var_dump($a->getopt("tidy-mark"));
- echo "Current Value of 'error-file': ";
- var_dump($a->getopt("error-file"));
- echo "Current Value of 'tab-size': ";
- var_dump($a->getopt("tab-size"));
-
-?>
---EXPECT--
-Current Value of 'tidy-mark': bool(false)
-Current Value of 'error-file': string(0) ""
-Current Value of 'tab-size': int(8)
diff --git a/ext/tidy/tests/008.phpt b/ext/tidy/tests/008.phpt
deleted file mode 100644
index 150b98f560..0000000000
--- a/ext/tidy/tests/008.phpt
+++ /dev/null
@@ -1,15 +0,0 @@
---TEST--
-Accessing the error buffer via $obj->error_buf...
---SKIPIF--
-<?php if (!extension_loaded("tidy")) print "skip"; ?>
---FILE--
-<?php
- $a = tidy_parse_string("<HTML><asd asdf></HTML>");
- echo $a->errorBuffer;
-?>
---EXPECT--
-line 1 column 1 - Warning: missing <!DOCTYPE> declaration
-line 1 column 7 - Error: <asd> is not recognized!
-line 1 column 7 - Warning: discarding unexpected <asd>
-line 1 column 17 - Warning: discarding unexpected </html>
-line 1 column 7 - Warning: inserting missing 'title' element \ No newline at end of file
diff --git a/ext/tidy/tests/009.phpt b/ext/tidy/tests/009.phpt
deleted file mode 100644
index 02c65df7cb..0000000000
--- a/ext/tidy/tests/009.phpt
+++ /dev/null
@@ -1,19 +0,0 @@
---TEST--
-tidy_doc object overloading
---SKIPIF--
-<?php if (!extension_loaded("tidy")) print "skip"; ?>
---FILE--
-<?php
-
- $a = tidy_parse_string("<HTML></HTML>");
- echo $a;
-
-?>
---EXPECT--
-<html>
-<head>
-<title></title>
-</head>
-<body>
-</body>
-</html> \ No newline at end of file
diff --git a/ext/tidy/tests/010.phpt b/ext/tidy/tests/010.phpt
deleted file mode 100644
index 2bb66d49a7..0000000000
--- a/ext/tidy/tests/010.phpt
+++ /dev/null
@@ -1,245 +0,0 @@
---TEST--
-Accessing root, body, html, and head nodes..
---SKIPIF--
-<?php if (!extension_loaded("tidy")) print "skip"; ?>
---FILE--
-<?php
- $a = tidy_parse_string("<HTML><BODY BGCOLOR=#FFFFFF ALINK=#000000></BODY></HTML>");
- var_dump($a->root());
- var_dump($a->body());
- var_dump($a->html());
- var_dump($a->head());
-
-?>
---EXPECT--
-object(tidyNode)#2 (5) {
- ["value"]=>
- string(94) "<html>
-<head>
-<title></title>
-</head>
-<body bgcolor="#FFFFFF" alink="#000000">
-</body>
-</html>"
- ["name"]=>
- string(0) ""
- ["type"]=>
- int(0)
- ["attribute"]=>
- NULL
- ["child"]=>
- array(1) {
- [0]=>
- &object(tidyNode)#3 (6) {
- ["value"]=>
- string(94) "<html>
-<head>
-<title></title>
-</head>
-<body bgcolor="#FFFFFF" alink="#000000">
-</body>
-</html>"
- ["name"]=>
- string(4) "html"
- ["type"]=>
- int(5)
- ["id"]=>
- int(48)
- ["attribute"]=>
- NULL
- ["child"]=>
- array(2) {
- [0]=>
- &object(tidyNode)#4 (6) {
- ["value"]=>
- string(31) "<head>
-<title></title>
-</head>
-"
- ["name"]=>
- string(4) "head"
- ["type"]=>
- int(5)
- ["id"]=>
- int(46)
- ["attribute"]=>
- NULL
- ["child"]=>
- array(1) {
- [0]=>
- &object(tidyNode)#5 (6) {
- ["value"]=>
- string(16) "<title></title>
-"
- ["name"]=>
- string(5) "title"
- ["type"]=>
- int(5)
- ["id"]=>
- int(111)
- ["attribute"]=>
- NULL
- ["child"]=>
- NULL
- }
- }
- }
- [1]=>
- &object(tidyNode)#6 (6) {
- ["value"]=>
- string(49) "<body bgcolor="#FFFFFF" alink="#000000">
-</body>
-"
- ["name"]=>
- string(4) "body"
- ["type"]=>
- int(5)
- ["id"]=>
- int(16)
- ["attribute"]=>
- array(2) {
- ["bgcolor"]=>
- string(7) "#FFFFFF"
- ["alink"]=>
- string(7) "#000000"
- }
- ["child"]=>
- NULL
- }
- }
- }
- }
-}
-object(tidyNode)#2 (6) {
- ["value"]=>
- string(49) "<body bgcolor="#FFFFFF" alink="#000000">
-</body>
-"
- ["name"]=>
- string(4) "body"
- ["type"]=>
- int(5)
- ["id"]=>
- int(16)
- ["attribute"]=>
- array(2) {
- ["bgcolor"]=>
- string(7) "#FFFFFF"
- ["alink"]=>
- string(7) "#000000"
- }
- ["child"]=>
- NULL
-}
-object(tidyNode)#2 (6) {
- ["value"]=>
- string(94) "<html>
-<head>
-<title></title>
-</head>
-<body bgcolor="#FFFFFF" alink="#000000">
-</body>
-</html>"
- ["name"]=>
- string(4) "html"
- ["type"]=>
- int(5)
- ["id"]=>
- int(48)
- ["attribute"]=>
- NULL
- ["child"]=>
- array(2) {
- [0]=>
- &object(tidyNode)#3 (6) {
- ["value"]=>
- string(31) "<head>
-<title></title>
-</head>
-"
- ["name"]=>
- string(4) "head"
- ["type"]=>
- int(5)
- ["id"]=>
- int(46)
- ["attribute"]=>
- NULL
- ["child"]=>
- array(1) {
- [0]=>
- &object(tidyNode)#6 (6) {
- ["value"]=>
- string(16) "<title></title>
-"
- ["name"]=>
- string(5) "title"
- ["type"]=>
- int(5)
- ["id"]=>
- int(111)
- ["attribute"]=>
- NULL
- ["child"]=>
- NULL
- }
- }
- }
- [1]=>
- &object(tidyNode)#4 (6) {
- ["value"]=>
- string(49) "<body bgcolor="#FFFFFF" alink="#000000">
-</body>
-"
- ["name"]=>
- string(4) "body"
- ["type"]=>
- int(5)
- ["id"]=>
- int(16)
- ["attribute"]=>
- array(2) {
- ["bgcolor"]=>
- string(7) "#FFFFFF"
- ["alink"]=>
- string(7) "#000000"
- }
- ["child"]=>
- NULL
- }
- }
-}
-object(tidyNode)#2 (6) {
- ["value"]=>
- string(31) "<head>
-<title></title>
-</head>
-"
- ["name"]=>
- string(4) "head"
- ["type"]=>
- int(5)
- ["id"]=>
- int(46)
- ["attribute"]=>
- NULL
- ["child"]=>
- array(1) {
- [0]=>
- &object(tidyNode)#4 (6) {
- ["value"]=>
- string(16) "<title></title>
-"
- ["name"]=>
- string(5) "title"
- ["type"]=>
- int(5)
- ["id"]=>
- int(111)
- ["attribute"]=>
- NULL
- ["child"]=>
- NULL
- }
- }
-}
diff --git a/ext/tidy/tests/011.phpt b/ext/tidy/tests/011.phpt
deleted file mode 100644
index 2a94616759..0000000000
--- a/ext/tidy/tests/011.phpt
+++ /dev/null
@@ -1,22 +0,0 @@
---TEST--
-Accessing attributes of a node
---SKIPIF--
-<?php if (!extension_loaded("tidy")) print "skip"; ?>
---FILE--
-<?php
- $a = tidy_parse_string("<HTML><BODY BGCOLOR=#FFFFFF ALINK=#000000></BODY></HTML>");
- $body = $a->body();
- var_dump($body->attribute);
- foreach($body->attribute as $key=>$val) {
- echo "Attrib '$key': $val\n";
- }
-?>
---EXPECT--
-array(2) {
- ["bgcolor"]=>
- string(7) "#FFFFFF"
- ["alink"]=>
- string(7) "#000000"
-}
-Attrib 'bgcolor': #FFFFFF
-Attrib 'alink': #000000 \ No newline at end of file
diff --git a/ext/tidy/tests/012.phpt b/ext/tidy/tests/012.phpt
deleted file mode 100644
index 5cec346b11..0000000000
--- a/ext/tidy/tests/012.phpt
+++ /dev/null
@@ -1,347 +0,0 @@
---TEST--
-Accessing children nodes
---SKIPIF--
-<?php if (!extension_loaded("tidy")) print "skip"; ?>
---FILE--
-<?php
-
- function dump_nodes(tidyNode $node) {
-
- var_dump($node->hasChildren());
- if($node->hasChildren()) {
-
- foreach($node->child as $c) {
-
- var_dump($c);
-
- if($c->hasChildren()) {
-
- dump_nodes($c);
-
- }
- }
-
- }
-
- }
-
- $a = tidy_parse_string("<HTML><BODY BGCOLOR=#FFFFFF ALINK=#000000><B>Hi</B><I>Bye<U>Test</U></I></BODY></HTML>");
- $html = $a->html();
- dump_nodes($html);
-
-?>
---EXPECT--
-bool(true)
-object(tidyNode)#3 (6) {
- ["value"]=>
- string(31) "<head>
-<title></title>
-</head>
-"
- ["name"]=>
- string(4) "head"
- ["type"]=>
- int(5)
- ["id"]=>
- int(46)
- ["attribute"]=>
- NULL
- ["child"]=>
- array(1) {
- [0]=>
- &object(tidyNode)#4 (6) {
- ["value"]=>
- string(16) "<title></title>
-"
- ["name"]=>
- string(5) "title"
- ["type"]=>
- int(5)
- ["id"]=>
- int(111)
- ["attribute"]=>
- NULL
- ["child"]=>
- NULL
- }
- }
-}
-bool(true)
-object(tidyNode)#4 (6) {
- ["value"]=>
- string(16) "<title></title>
-"
- ["name"]=>
- string(5) "title"
- ["type"]=>
- int(5)
- ["id"]=>
- int(111)
- ["attribute"]=>
- NULL
- ["child"]=>
- NULL
-}
-object(tidyNode)#5 (6) {
- ["value"]=>
- string(80) "<body bgcolor="#FFFFFF" alink="#000000">
-<b>Hi</b><i>Bye<u>Test</u></i>
-</body>
-"
- ["name"]=>
- string(4) "body"
- ["type"]=>
- int(5)
- ["id"]=>
- int(16)
- ["attribute"]=>
- array(2) {
- ["bgcolor"]=>
- string(7) "#FFFFFF"
- ["alink"]=>
- string(7) "#000000"
- }
- ["child"]=>
- array(2) {
- [0]=>
- &object(tidyNode)#6 (6) {
- ["value"]=>
- string(9) "<b>Hi</b>"
- ["name"]=>
- string(1) "b"
- ["type"]=>
- int(5)
- ["id"]=>
- int(8)
- ["attribute"]=>
- NULL
- ["child"]=>
- array(1) {
- [0]=>
- &object(tidyNode)#7 (5) {
- ["value"]=>
- string(2) "Hi"
- ["name"]=>
- string(0) ""
- ["type"]=>
- int(4)
- ["attribute"]=>
- NULL
- ["child"]=>
- NULL
- }
- }
- }
- [1]=>
- &object(tidyNode)#8 (6) {
- ["value"]=>
- string(21) "<i>Bye<u>Test</u></i>"
- ["name"]=>
- string(1) "i"
- ["type"]=>
- int(5)
- ["id"]=>
- int(49)
- ["attribute"]=>
- NULL
- ["child"]=>
- array(2) {
- [0]=>
- &object(tidyNode)#9 (5) {
- ["value"]=>
- string(3) "Bye"
- ["name"]=>
- string(0) ""
- ["type"]=>
- int(4)
- ["attribute"]=>
- NULL
- ["child"]=>
- NULL
- }
- [1]=>
- &object(tidyNode)#10 (6) {
- ["value"]=>
- string(11) "<u>Test</u>"
- ["name"]=>
- string(1) "u"
- ["type"]=>
- int(5)
- ["id"]=>
- int(114)
- ["attribute"]=>
- NULL
- ["child"]=>
- array(1) {
- [0]=>
- &object(tidyNode)#11 (5) {
- ["value"]=>
- string(4) "Test"
- ["name"]=>
- string(0) ""
- ["type"]=>
- int(4)
- ["attribute"]=>
- NULL
- ["child"]=>
- NULL
- }
- }
- }
- }
- }
- }
-}
-bool(true)
-object(tidyNode)#6 (6) {
- ["value"]=>
- string(9) "<b>Hi</b>"
- ["name"]=>
- string(1) "b"
- ["type"]=>
- int(5)
- ["id"]=>
- int(8)
- ["attribute"]=>
- NULL
- ["child"]=>
- array(1) {
- [0]=>
- &object(tidyNode)#7 (5) {
- ["value"]=>
- string(2) "Hi"
- ["name"]=>
- string(0) ""
- ["type"]=>
- int(4)
- ["attribute"]=>
- NULL
- ["child"]=>
- NULL
- }
- }
-}
-bool(true)
-object(tidyNode)#7 (5) {
- ["value"]=>
- string(2) "Hi"
- ["name"]=>
- string(0) ""
- ["type"]=>
- int(4)
- ["attribute"]=>
- NULL
- ["child"]=>
- NULL
-}
-object(tidyNode)#8 (6) {
- ["value"]=>
- string(21) "<i>Bye<u>Test</u></i>"
- ["name"]=>
- string(1) "i"
- ["type"]=>
- int(5)
- ["id"]=>
- int(49)
- ["attribute"]=>
- NULL
- ["child"]=>
- array(2) {
- [0]=>
- &object(tidyNode)#9 (5) {
- ["value"]=>
- string(3) "Bye"
- ["name"]=>
- string(0) ""
- ["type"]=>
- int(4)
- ["attribute"]=>
- NULL
- ["child"]=>
- NULL
- }
- [1]=>
- &object(tidyNode)#10 (6) {
- ["value"]=>
- string(11) "<u>Test</u>"
- ["name"]=>
- string(1) "u"
- ["type"]=>
- int(5)
- ["id"]=>
- int(114)
- ["attribute"]=>
- NULL
- ["child"]=>
- array(1) {
- [0]=>
- &object(tidyNode)#11 (5) {
- ["value"]=>
- string(4) "Test"
- ["name"]=>
- string(0) ""
- ["type"]=>
- int(4)
- ["attribute"]=>
- NULL
- ["child"]=>
- NULL
- }
- }
- }
- }
-}
-bool(true)
-object(tidyNode)#9 (5) {
- ["value"]=>
- string(3) "Bye"
- ["name"]=>
- string(0) ""
- ["type"]=>
- int(4)
- ["attribute"]=>
- NULL
- ["child"]=>
- NULL
-}
-object(tidyNode)#10 (6) {
- ["value"]=>
- string(11) "<u>Test</u>"
- ["name"]=>
- string(1) "u"
- ["type"]=>
- int(5)
- ["id"]=>
- int(114)
- ["attribute"]=>
- NULL
- ["child"]=>
- array(1) {
- [0]=>
- &object(tidyNode)#11 (5) {
- ["value"]=>
- string(4) "Test"
- ["name"]=>
- string(0) ""
- ["type"]=>
- int(4)
- ["attribute"]=>
- NULL
- ["child"]=>
- NULL
- }
- }
-}
-bool(true)
-object(tidyNode)#11 (5) {
- ["value"]=>
- string(4) "Test"
- ["name"]=>
- string(0) ""
- ["type"]=>
- int(4)
- ["attribute"]=>
- NULL
- ["child"]=>
- NULL
-}
diff --git a/ext/tidy/tests/013.html b/ext/tidy/tests/013.html
deleted file mode 100644
index 7dc0357779..0000000000
--- a/ext/tidy/tests/013.html
+++ /dev/null
@@ -1 +0,0 @@
-<B>testing</I>
diff --git a/ext/tidy/tests/013.phpt b/ext/tidy/tests/013.phpt
deleted file mode 100644
index 37efa3d69d..0000000000
--- a/ext/tidy/tests/013.phpt
+++ /dev/null
@@ -1,13 +0,0 @@
---TEST--
-Parsing a file using constructor
---SKIPIF--
-<?php if (!extension_loaded("tidy")) print "skip"; ?>
---FILE--
-<?php
- $tidy = new tidy("ext/tidy/tests/013.html", array("show-body-only"=>true));
- $tidy->cleanRepair();
- echo $tidy;
-
-?>
---EXPECT--
-<b>testing</b>
diff --git a/ext/tidy/tests/014.phpt b/ext/tidy/tests/014.phpt
deleted file mode 100644
index a391b3dc9e..0000000000
--- a/ext/tidy/tests/014.phpt
+++ /dev/null
@@ -1,14 +0,0 @@
---TEST--
-Passing configuration options through tidy_parse_string().
---SKIPIF--
-<?php if (!extension_loaded("tidy")) print "skip"; ?>
---FILE--
-<?php
- $text = "<B>testing</I>";
- $tidy = tidy_parse_string($text, array('show-body-only'=>true));
- tidy_clean_repair($tidy);
- echo tidy_get_output($tidy);
-
-?>
---EXPECT--
-<b>testing</b> \ No newline at end of file
diff --git a/ext/tidy/tests/015.html b/ext/tidy/tests/015.html
deleted file mode 100644
index 7dc0357779..0000000000
--- a/ext/tidy/tests/015.html
+++ /dev/null
@@ -1 +0,0 @@
-<B>testing</I>
diff --git a/ext/tidy/tests/015.phpt b/ext/tidy/tests/015.phpt
deleted file mode 100644
index 080d3db4aa..0000000000
--- a/ext/tidy/tests/015.phpt
+++ /dev/null
@@ -1,13 +0,0 @@
---TEST--
-Passing configuration options through tidy_parse_file().
---SKIPIF--
-<?php if (!extension_loaded("tidy")) print "skip"; ?>
---FILE--
-<?php
- $tidy = tidy_parse_file("ext/tidy/tests/015.html", array('show-body-only'=>true));
- tidy_clean_repair($tidy);
- echo tidy_get_output($tidy);
-
-?>
---EXPECT--
-<b>testing</b> \ No newline at end of file
diff --git a/ext/tidy/tests/016.html b/ext/tidy/tests/016.html
deleted file mode 100644
index 7dc6e4aba8..0000000000
--- a/ext/tidy/tests/016.html
+++ /dev/null
@@ -1 +0,0 @@
-<P><B><FONT SIZE=10 COLOR=#FF0000>testing</FONT></I></P>
diff --git a/ext/tidy/tests/016.phpt b/ext/tidy/tests/016.phpt
deleted file mode 100644
index 660b85e337..0000000000
--- a/ext/tidy/tests/016.phpt
+++ /dev/null
@@ -1,24 +0,0 @@
---TEST--
-Passing configuration file through tidy_parse_file()
---SKIPIF--
-<?php if (!extension_loaded("tidy")) print "skip"; ?>
---FILE--
-<?php
- $tidy = tidy_parse_file("ext/tidy/tests/016.html", "ext/tidy/tests/016.tcfg");
- tidy_clean_repair($tidy);
- echo tidy_get_output($tidy);
-?>
---EXPECT--
-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
-<html>
-<head>
-<title></title>
-
-<style type="text/css">
- p.c1 {font-weight: bold}
-</style>
-</head>
-<body>
-<p class="c1">testing</p>
-</body>
-</html>
diff --git a/ext/tidy/tests/016.tcfg b/ext/tidy/tests/016.tcfg
deleted file mode 100644
index fd6e4e44f4..0000000000
--- a/ext/tidy/tests/016.tcfg
+++ /dev/null
@@ -1 +0,0 @@
-clean: yes
diff --git a/ext/tidy/tests/017.phpt b/ext/tidy/tests/017.phpt
deleted file mode 100644
index ba620a32ec..0000000000
--- a/ext/tidy/tests/017.phpt
+++ /dev/null
@@ -1,17 +0,0 @@
---TEST--
-The Tidy Output Buffer Filter
---SKIPIF--
-<?php if (!extension_loaded("tidy")) print "skip"; ?>
---FILE--
-<?php ob_start("ob_tidyhandler"); ?>
-<B>testing</I>
---EXPECT--
-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
-<html>
-<head>
-<title></title>
-</head>
-<body>
-<b>testing</b>
-</body>
-</html> \ No newline at end of file
diff --git a/ext/tidy/tidy.c b/ext/tidy/tidy.c
deleted file mode 100644
index a64d7c6444..0000000000
--- a/ext/tidy/tidy.c
+++ /dev/null
@@ -1,1772 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: John Coggeshall <john@php.net> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "php.h"
-#include "php_tidy.h"
-
-#if HAVE_TIDY
-
-#include "php_ini.h"
-#include "ext/standard/info.h"
-#include "safe_mode.h"
-
-#include "Zend/zend_exceptions.h"
-#include "Zend/zend_object_handlers.h"
-
-#include "tidy.h"
-#include "buffio.h"
-
-#define PHP_TIDY_MODULE_VERSION "2.0"
-
-/* {{{ ext/tidy macros
-*/
-#define REMOVE_NEWLINE(_z) _z->value.str.val[_z->value.str.len-1] = '\0'; _z->value.str.len--;
-
-#define TIDYDOC_FROM_OBJECT(tdoc, object) \
- { \
- PHPTidyObj *obj = (PHPTidyObj*) zend_object_store_get_object(object TSRMLS_CC); \
- tdoc = obj->ptdoc; \
- }
-
-#define TIDY_SET_CONTEXT \
- zval *object; \
- TG(inst) = getThis(); \
- object = TG(inst)
-
-#define TIDY_FETCH_OBJECT \
- PHPTidyObj *obj; \
- TIDY_SET_CONTEXT; \
- if (object) { \
- if (ZEND_NUM_ARGS()) { \
- WRONG_PARAM_COUNT; \
- } \
- } else { \
- if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, NULL, "O", &object, tidy_ce_doc) == FAILURE) { \
- RETURN_FALSE; \
- } \
- } \
- obj = (PHPTidyObj *) zend_object_store_get_object(object TSRMLS_CC); \
-
-#define TIDY_FETCH_ONLY_OBJECT \
- PHPTidyObj *obj; \
- TIDY_SET_CONTEXT; \
- if (ZEND_NUM_ARGS()) { \
- WRONG_PARAM_COUNT; \
- } \
- obj = (PHPTidyObj *) zend_object_store_get_object(object TSRMLS_CC); \
-
-
-#define Z_OBJ_P(zval_p) zend_objects_get_address(zval_p TSRMLS_CC)
-
-#define TIDY_APPLY_CONFIG_ZVAL(_doc, _val) \
- if(_val) { \
- if(Z_TYPE_P(_val) == IS_ARRAY) { \
- _php_tidy_apply_config_array(_doc, HASH_OF(_val) TSRMLS_CC); \
- } else { \
- convert_to_string_ex(&_val); \
- TIDY_SAFE_MODE_CHECK(Z_STRVAL_P(_val)); \
- if (tidyLoadConfig(_doc, Z_STRVAL_P(_val)) < 0) { \
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Could not load configuration file '%s'", Z_STRVAL_P(_val)); \
- RETURN_FALSE; \
- } \
- } \
- }
-
-#define REGISTER_TIDY_CLASS(classname, name, parent, __flags) \
- { \
- zend_class_entry ce; \
- INIT_CLASS_ENTRY(ce, # classname, tidy_funcs_ ## name); \
- ce.create_object = tidy_object_new_ ## name; \
- tidy_ce_ ## name = zend_register_internal_class_ex(&ce, parent, NULL TSRMLS_CC); \
- tidy_ce_ ## name->ce_flags |= __flags; \
- memcpy(&tidy_object_handlers_ ## name, zend_get_std_object_handlers(), sizeof(zend_object_handlers)); \
- tidy_object_handlers_ ## name.clone_obj = NULL; \
- }
-
-#define TIDY_TAG_CONST(tag) REGISTER_LONG_CONSTANT("TIDY_TAG_" #tag, TidyTag_##tag, CONST_CS | CONST_PERSISTENT)
-#define TIDY_NODE_CONST(name, type) REGISTER_LONG_CONSTANT("TIDY_NODETYPE_" #name, TidyNode_##type, CONST_CS | CONST_PERSISTENT)
-
-#ifndef TRUE
-#define TRUE 1
-#endif
-
-#ifndef FALSE
-#define FALSE 0
-#endif
-
-#define ADD_PROPERTY_STRING(_table, _key, _string) \
- { \
- zval *tmp; \
- MAKE_STD_ZVAL(tmp); \
- if (_string) { \
- ZVAL_STRING(tmp, (char *)_string, 1); \
- } else { \
- ZVAL_EMPTY_STRING(tmp); \
- } \
- zend_hash_update(_table, #_key, sizeof(#_key), (void *)&tmp, sizeof(zval *), NULL); \
- }
-
-#define ADD_PROPERTY_LONG(_table, _key, _long) \
- { \
- zval *tmp; \
- MAKE_STD_ZVAL(tmp); \
- ZVAL_LONG(tmp, _long); \
- zend_hash_update(_table, #_key, sizeof(#_key), (void *)&tmp, sizeof(zval *), NULL); \
- }
-
-#define ADD_PROPERTY_NULL(_table, _key) \
- { \
- zval *tmp; \
- MAKE_STD_ZVAL(tmp); \
- ZVAL_NULL(tmp); \
- zend_hash_update(_table, #_key, sizeof(#_key), (void *)&tmp, sizeof(zval *), NULL); \
- }
-
-#define TIDY_SAFE_MODE_CHECK(filename) \
-if ((PG(safe_mode) && (!php_checkuid(filename, NULL, CHECKUID_CHECK_FILE_AND_DIR))) || php_check_open_basedir(filename TSRMLS_CC)) { \
- RETURN_FALSE; \
-} \
-
-#define TIDY_SET_DEFAULT_CONFIG(_doc) \
- if (TG(default_config) && TG(default_config)[0]) { \
- if (tidyLoadConfig(_doc, TG(default_config)) < 0) { \
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to load Tidy configuration file at '%s'.", TG(default_config)); \
- } \
- }
-/* }}} */
-
-/* {{{ ext/tidy structs
-*/
-typedef struct _PHPTidyDoc PHPTidyDoc;
-typedef struct _PHPTidyObj PHPTidyObj;
-
-typedef enum {
- is_node,
- is_doc,
- is_exception
-} tidy_obj_type;
-
-typedef enum {
- is_root_node,
- is_html_node,
- is_head_node,
- is_body_node
-} tidy_base_nodetypes;
-
-struct _PHPTidyDoc {
- TidyDoc doc;
- TidyBuffer *errbuf;
- unsigned int ref_count;
-};
-
-struct _PHPTidyObj {
- zend_object std;
- TidyNode node;
- tidy_obj_type type;
- PHPTidyDoc *ptdoc;
-};
-/* }}} */
-
-/* {{{ ext/tidy prototypes
-*/
-static char *php_tidy_file_to_mem(char *, zend_bool TSRMLS_DC);
-static void tidy_object_free_storage(void * TSRMLS_DC);
-static zend_object_value tidy_object_new_node(zend_class_entry * TSRMLS_DC);
-static zend_object_value tidy_object_new_doc(zend_class_entry * TSRMLS_DC);
-static zend_object_value tidy_object_new_exception(zend_class_entry * TSRMLS_DC);
-static zend_class_entry *tidy_get_ce_node(zval * TSRMLS_DC);
-static zend_class_entry *tidy_get_ce_doc(zval * TSRMLS_DC);
-static zval * tidy_instanciate(zend_class_entry *, zval * TSRMLS_DC);
-static int tidy_doc_cast_handler(zval *, zval *, int, int TSRMLS_DC);
-static int tidy_node_cast_handler(zval *, zval *, int, int TSRMLS_DC);
-static void tidy_doc_update_properties(PHPTidyObj * TSRMLS_DC);
-static void tidy_add_default_properties(PHPTidyObj *, tidy_obj_type TSRMLS_DC);
-static void *php_tidy_get_opt_val(PHPTidyDoc *, TidyOption, TidyOptionType * TSRMLS_DC);
-static void php_tidy_create_node(INTERNAL_FUNCTION_PARAMETERS, tidy_base_nodetypes);
-static int _php_tidy_set_tidy_opt(TidyDoc, char *, zval * TSRMLS_DC);
-static int _php_tidy_apply_config_array(TidyDoc doc, HashTable *ht_options TSRMLS_DC);
-static void _php_tidy_register_nodetypes(INIT_FUNC_ARGS);
-static void _php_tidy_register_tags(INIT_FUNC_ARGS);
-/* }}} */
-
-ZEND_DECLARE_MODULE_GLOBALS(tidy)
-
-PHP_INI_BEGIN()
-STD_PHP_INI_ENTRY("tidy.default_config", "", PHP_INI_SYSTEM, OnUpdateString, default_config, zend_tidy_globals, tidy_globals)
-PHP_INI_ENTRY("tidy.clean_output", "0", PHP_INI_PERDIR, NULL)
-PHP_INI_END()
-
-function_entry tidy_functions[] = {
- PHP_FE(tidy_getopt, NULL)
- PHP_FE(tidy_parse_string, NULL)
- PHP_FE(tidy_parse_file, NULL)
- PHP_FE(tidy_get_output, NULL)
- PHP_FE(tidy_get_error_buffer, NULL)
- PHP_FE(tidy_clean_repair, NULL)
- PHP_FE(tidy_repair_string, NULL)
- PHP_FE(tidy_repair_file, NULL)
- PHP_FE(tidy_diagnose, NULL)
- PHP_FE(tidy_get_release, NULL)
- PHP_FE(tidy_get_config, NULL)
- PHP_FE(tidy_get_status, NULL)
- PHP_FE(tidy_get_html_ver, NULL)
- PHP_FE(tidy_is_xhtml, NULL)
- PHP_FE(tidy_is_xml, NULL)
- PHP_FE(tidy_error_count, NULL)
- PHP_FE(tidy_warning_count, NULL)
- PHP_FE(tidy_access_count, NULL)
- PHP_FE(tidy_config_count, NULL)
- PHP_FE(tidy_get_root, NULL)
- PHP_FE(tidy_get_head, NULL)
- PHP_FE(tidy_get_html, NULL)
- PHP_FE(tidy_get_body, NULL)
- PHP_FE(ob_tidyhandler, NULL)
- {NULL, NULL, NULL}
-};
-
-function_entry tidy_funcs_doc[] = {
- TIDY_METHOD_MAP(getOpt, tidy_getopt, NULL)
- TIDY_METHOD_MAP(cleanRepair, tidy_clean_repair, NULL)
- TIDY_DOC_ME(parseFile, NULL)
- TIDY_DOC_ME(parseString, NULL)
- TIDY_METHOD_MAP(repairString, tidy_repair_string, NULL)
- TIDY_METHOD_MAP(repairFile, tidy_repair_file, NULL)
- TIDY_METHOD_MAP(diagnose, tidy_diagnose, NULL)
- TIDY_METHOD_MAP(getRelease, tidy_get_release, NULL)
- TIDY_METHOD_MAP(getConfig, tidy_get_config, NULL)
- TIDY_METHOD_MAP(getStatus, tidy_get_status, NULL)
- TIDY_METHOD_MAP(getHtmlVer, tidy_get_html_ver, NULL)
- TIDY_METHOD_MAP(isXhtml, tidy_is_xhtml, NULL)
- TIDY_METHOD_MAP(isXml, tidy_is_xml, NULL)
- TIDY_METHOD_MAP(root, tidy_get_root, NULL)
- TIDY_METHOD_MAP(head, tidy_get_head, NULL)
- TIDY_METHOD_MAP(html, tidy_get_html, NULL)
- TIDY_METHOD_MAP(body, tidy_get_body, NULL)
- TIDY_DOC_ME(__construct, NULL)
- {NULL, NULL, NULL}
-};
-
-function_entry tidy_funcs_node[] = {
- TIDY_NODE_ME(__construct, NULL)
- TIDY_NODE_ME(hasChildren, NULL)
- TIDY_NODE_ME(hasSiblings, NULL)
- TIDY_NODE_ME(isComment, NULL)
- TIDY_NODE_ME(isHtml, NULL)
- TIDY_NODE_ME(isText, NULL)
- TIDY_NODE_ME(isJste, NULL)
- TIDY_NODE_ME(isAsp, NULL)
- TIDY_NODE_ME(isPhp, NULL)
- {NULL, NULL, NULL}
-};
-
-function_entry tidy_funcs_exception[] = {
- {NULL, NULL, NULL}
-};
-
-zend_class_entry *tidy_ce_doc, *tidy_ce_node, *tidy_ce_exception;
-
-static zend_object_handlers tidy_object_handlers_doc;
-static zend_object_handlers tidy_object_handlers_node;
-static zend_object_handlers tidy_object_handlers_exception;
-
-zend_module_entry tidy_module_entry = {
- STANDARD_MODULE_HEADER,
- "tidy",
- tidy_functions,
- PHP_MINIT(tidy),
- PHP_MSHUTDOWN(tidy),
- PHP_RINIT(tidy),
- PHP_RSHUTDOWN(tidy),
- PHP_MINFO(tidy),
- PHP_TIDY_MODULE_VERSION,
- STANDARD_MODULE_PROPERTIES
-};
-
-#ifdef COMPILE_DL_TIDY
-ZEND_GET_MODULE(tidy)
-#endif
-
-void *php_tidy_malloc(size_t len)
-{
- return emalloc(len);
-}
-
-void *php_tidy_realloc(void *buf, size_t len)
-{
- return erealloc(buf, len);
-}
-
-void php_tidy_free(void *buf)
-{
- efree(buf);
-}
-
-void php_tidy_panic(ctmbstr msg)
-{
- TSRMLS_FETCH();
- php_error_docref(NULL TSRMLS_CC, E_ERROR, "Could not allocate memory for tidy! (Reason: %s)", (char *)msg);
-}
-
-static int _php_tidy_set_tidy_opt(TidyDoc doc, char *optname, zval *value TSRMLS_DC)
-{
- TidyOption opt = tidyGetOptionByName(doc, optname);
- zval conv = *value;
-
- if (!opt) {
- php_error_docref(NULL TSRMLS_CC, E_NOTICE, "Unknown Tidy Configuration Option '%s'", optname);
- return FAILURE;
- }
-
- if (tidyOptIsReadOnly(opt)) {
- php_error_docref(NULL TSRMLS_CC, E_NOTICE, "Attempting to set read-only option '%s'", optname);
- return FAILURE;
- }
-
- switch(tidyOptGetType(opt)) {
- case TidyString:
- if (Z_TYPE(conv) != IS_STRING) {
- zval_copy_ctor(&conv);
- convert_to_string(&conv);
- }
- if (tidyOptSetValue(doc, tidyOptGetId(opt), Z_STRVAL(conv))) {
- if (Z_TYPE(conv) != Z_TYPE_P(value)) {
- zval_dtor(&conv);
- }
- return SUCCESS;
- }
- if (Z_TYPE(conv) != Z_TYPE_P(value)) {
- zval_dtor(&conv);
- }
- break;
-
- case TidyInteger:
- if (Z_TYPE(conv) != IS_LONG) {
- zval_copy_ctor(&conv);
- convert_to_long(&conv);
- }
- if (tidyOptSetInt(doc, tidyOptGetId(opt), Z_LVAL(conv))) {
- return SUCCESS;
- }
- break;
-
- case TidyBoolean:
- if (Z_TYPE(conv) != IS_LONG) {
- zval_copy_ctor(&conv);
- convert_to_long(&conv);
- }
- if (tidyOptSetBool(doc, tidyOptGetId(opt), Z_LVAL(conv))) {
- return SUCCESS;
- }
- break;
-
- default:
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to determine type of configuration option");
- break;
- }
-
- return FAILURE;
-}
-
-static void php_tidy_quick_repair(INTERNAL_FUNCTION_PARAMETERS, zend_bool is_file)
-{
- char *data=NULL, *arg1, *enc = NULL;
- int arg1_len, enc_len = 0;
- zend_bool use_include_path = 0;
- TidyDoc doc;
- TidyBuffer *errbuf;
- zval *config;
-
- TIDY_SET_CONTEXT;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|zsb", &arg1, &arg1_len, &config, &enc, &enc_len, &use_include_path) == FAILURE) {
- RETURN_FALSE;
- }
-
- if (is_file) {
- if (!(data = php_tidy_file_to_mem(arg1, use_include_path TSRMLS_CC))) {
- RETURN_FALSE;
- }
- } else {
- data = arg1;
- }
-
- doc = tidyCreate();
- errbuf = emalloc(sizeof(TidyBuffer));
- tidyBufInit(errbuf);
-
- if (tidySetErrorBuffer(doc, errbuf) != 0) {
- tidyBufFree(errbuf);
- efree(errbuf);
- tidyRelease(doc);
- php_error_docref(NULL TSRMLS_CC, E_ERROR, "Could not set Tidy error buffer");
- }
-
- tidyOptSetBool(doc, TidyForceOutput, yes);
- tidyOptSetBool(doc, TidyMark, no);
-
- TIDY_SET_DEFAULT_CONFIG(doc);
-
- /* We can't use TIDY_APPLY_CONFIG_ZVAL() here, it uses RETURN_FALSE */
-
- if(Z_TYPE_P(config) == IS_ARRAY) {
- _php_tidy_apply_config_array(doc, HASH_OF(config) TSRMLS_CC);
- } else {
- convert_to_string_ex(&config);
- TIDY_SAFE_MODE_CHECK(Z_STRVAL_P(config));
- if (tidyLoadConfig(doc, Z_STRVAL_P(config)) < 0) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Could not load configuration file '%s'", Z_STRVAL_P(config));
- RETVAL_FALSE;
- }
- }
-
- if(enc_len) {
- if (tidySetCharEncoding(doc, enc) < 0) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Could not set encoding '%s'", enc);
- RETVAL_FALSE;
- }
- }
-
- if (data) {
- if (tidyParseString(doc, data) < 0) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", errbuf->bp);
- RETVAL_FALSE;
- } else {
- if (tidyCleanAndRepair(doc) >= 0) {
- TidyBuffer output = {0};
-
- tidySaveBuffer (doc, &output);
- RETVAL_STRING(output.bp, 1);
- tidyBufFree(&output);
- } else {
- RETVAL_FALSE;
- }
- }
- }
-
- if (is_file) {
- efree(data);
- }
-
- tidyBufFree(errbuf);
- efree(errbuf);
- tidyRelease(doc);
-}
-
-static char *php_tidy_file_to_mem(char *filename, zend_bool use_include_path TSRMLS_DC)
-{
- php_stream *stream;
- int len;
- char *data = NULL;
-
- if (!(stream = php_stream_open_wrapper(filename, "rb", (use_include_path ? USE_PATH : 0) | ENFORCE_SAFE_MODE, NULL))) {
- return NULL;
- }
- if ((len = php_stream_copy_to_mem(stream, &data, PHP_STREAM_COPY_ALL, 0)) == 0) {
- data = estrdup("");
- }
- php_stream_close(stream);
-
- return data;
-}
-
-static void tidy_object_free_storage(void *object TSRMLS_DC)
-{
- PHPTidyObj *intern = (PHPTidyObj *)object;
-
- zend_hash_destroy(intern->std.properties);
- FREE_HASHTABLE(intern->std.properties);
-
- intern->ptdoc->ref_count--;
-
- if (intern->ptdoc->ref_count <= 0) {
- tidyBufFree(intern->ptdoc->errbuf);
- efree(intern->ptdoc->errbuf);
- tidyRelease(intern->ptdoc->doc);
- efree(intern->ptdoc);
- }
-
- efree(object);
-}
-
-static void tidy_object_new(zend_class_entry *class_type, zend_object_handlers *handlers,
- zend_object_value *retval, tidy_obj_type objtype TSRMLS_DC)
-{
- PHPTidyObj *intern;
- zval *tmp;
-
- intern = emalloc(sizeof(PHPTidyObj));
- memset(intern, 0, sizeof(PHPTidyObj));
- intern->std.ce = class_type;
-
- ALLOC_HASHTABLE(intern->std.properties);
- zend_hash_init(intern->std.properties, 0, NULL, ZVAL_PTR_DTOR, 0);
- zend_hash_copy(intern->std.properties, &class_type->default_properties, (copy_ctor_func_t) zval_add_ref, (void *) &tmp, sizeof(zval *));
-
- switch(objtype) {
- case is_node:
- break;
-
- case is_doc:
- tidySetMallocCall(php_tidy_malloc);
- tidySetReallocCall(php_tidy_realloc);
- tidySetFreeCall(php_tidy_free);
- tidySetPanicCall(php_tidy_panic);
-
- intern->ptdoc = emalloc(sizeof(PHPTidyDoc));
- intern->ptdoc->doc = tidyCreate();
- intern->ptdoc->ref_count = 1;
- intern->ptdoc->errbuf = emalloc(sizeof(TidyBuffer));
- tidyBufInit(intern->ptdoc->errbuf);
-
- if (tidySetErrorBuffer(intern->ptdoc->doc, intern->ptdoc->errbuf) != 0) {
- tidyBufFree(intern->ptdoc->errbuf);
- efree(intern->ptdoc->errbuf);
- tidyRelease(intern->ptdoc->doc);
- efree(intern->ptdoc);
- efree(intern);
- php_error_docref(NULL TSRMLS_CC, E_ERROR, "Could not set Tidy error buffer");
- }
-
- tidyOptSetBool(intern->ptdoc->doc, TidyForceOutput, yes);
- tidyOptSetBool(intern->ptdoc->doc, TidyMark, no);
-
- TIDY_SET_DEFAULT_CONFIG(intern->ptdoc->doc);
-
- tidy_add_default_properties(intern, is_doc TSRMLS_CC);
- break;
-
- default:
- break;
- }
-
- retval->handle = zend_objects_store_put(intern, NULL, (zend_objects_free_object_storage_t) tidy_object_free_storage, NULL TSRMLS_CC);
- retval->handlers = handlers;
-}
-
-static zend_object_value tidy_object_new_node(zend_class_entry *class_type TSRMLS_DC)
-{
- zend_object_value retval;
- tidy_object_new(class_type, &tidy_object_handlers_node, &retval, is_node TSRMLS_CC);
- return retval;
-}
-
-static zend_object_value tidy_object_new_doc(zend_class_entry *class_type TSRMLS_DC)
-{
- zend_object_value retval;
- tidy_object_new(class_type, &tidy_object_handlers_doc, &retval, is_doc TSRMLS_CC);
- return retval;
-}
-
-static zend_object_value tidy_object_new_exception(zend_class_entry *class_type TSRMLS_DC)
-{
- zend_object_value retval;
- tidy_object_new(class_type, &tidy_object_handlers_exception, &retval, is_exception TSRMLS_CC);
- return retval;
-}
-
-static zend_class_entry *tidy_get_ce_node(zval *object TSRMLS_DC)
-{
- return tidy_ce_node;
-}
-
-static zend_class_entry *tidy_get_ce_doc(zval *object TSRMLS_DC)
-{
- return tidy_ce_doc;
-}
-
-static zval * tidy_instanciate(zend_class_entry *pce, zval *object TSRMLS_DC)
-{
- if (!object) {
- ALLOC_ZVAL(object);
- }
-
- Z_TYPE_P(object) = IS_OBJECT;
- object_init_ex(object, pce);
- object->refcount = 1;
- object->is_ref = 1;
- return object;
-}
-
-static int tidy_doc_cast_handler(zval *in, zval *out, int type, int free TSRMLS_DC)
-{
- TidyBuffer output = {0};
- PHPTidyObj *obj;
-
- switch(type) {
- case IS_LONG:
- ZVAL_LONG(out, 0);
- break;
-
- case IS_DOUBLE:
- ZVAL_DOUBLE(out, 0);
- break;
-
- case IS_BOOL:
- ZVAL_BOOL(out, TRUE);
- break;
-
- case IS_STRING:
- obj = (PHPTidyObj *)zend_object_store_get_object(in TSRMLS_CC);
- tidySaveBuffer (obj->ptdoc->doc, &output);
- ZVAL_STRINGL(out, output.bp, output.size, TRUE);
- tidyBufFree(&output);
- break;
-
- default:
- return FAILURE;
- }
-
- return SUCCESS;
-}
-
-static int tidy_node_cast_handler(zval *in, zval *out, int type, int free TSRMLS_DC)
-{
- TidyBuffer buf = {0};
- PHPTidyObj *obj;
-
- switch(type) {
- case IS_LONG:
- ZVAL_LONG(out, 0);
- break;
-
- case IS_DOUBLE:
- ZVAL_DOUBLE(out, 0);
- break;
-
- case IS_BOOL:
- ZVAL_BOOL(out, TRUE);
- break;
-
- case IS_STRING:
- obj = (PHPTidyObj *)zend_object_store_get_object(in TSRMLS_CC);
- tidyNodeGetText(obj->ptdoc->doc, obj->node, &buf);
- ZVAL_STRINGL(out, buf.bp, buf.size, TRUE);
- tidyBufFree(&buf);
- break;
-
- default:
- return FAILURE;
- }
-
- return SUCCESS;
-}
-
-static void tidy_doc_update_properties(PHPTidyObj *obj TSRMLS_DC)
-{
-
- TidyBuffer output = {0};
- zval *temp;
-
- tidySaveBuffer (obj->ptdoc->doc, &output);
-
- if (output.size) {
- MAKE_STD_ZVAL(temp);
- ZVAL_STRINGL(temp, output.bp, output.size, TRUE);
- zend_hash_update(obj->std.properties, "value", sizeof("value"), (void *)&temp, sizeof(zval *), NULL);
- }
-
- tidyBufFree(&output);
-
- if (obj->ptdoc->errbuf->size) {
- MAKE_STD_ZVAL(temp);
- ZVAL_STRINGL(temp, obj->ptdoc->errbuf->bp, obj->ptdoc->errbuf->size, TRUE);
- zend_hash_update(obj->std.properties, "errorBuffer", sizeof("errorBuffer"), (void *)&temp, sizeof(zval *), NULL);
- }
-}
-
-static void tidy_add_default_properties(PHPTidyObj *obj, tidy_obj_type type TSRMLS_DC)
-{
-
- TidyBuffer buf;
- TidyAttr tempattr;
- TidyNode tempnode;
- zval *attribute, *children, *temp;
- PHPTidyObj *newobj;
-
- switch(type) {
-
- case is_node:
-
- memset(&buf, 0, sizeof(buf));
- tidyNodeGetText(obj->ptdoc->doc, obj->node, &buf);
- buf.bp[buf.size-1] = '\0';
- ADD_PROPERTY_STRING(obj->std.properties, value, buf.bp);
- tidyBufFree(&buf);
-
- ADD_PROPERTY_STRING(obj->std.properties, name, tidyNodeGetName(obj->node));
- ADD_PROPERTY_LONG(obj->std.properties, type, tidyNodeGetType(obj->node));
-
- switch(tidyNodeGetType(obj->node)) {
- case TidyNode_Root:
- case TidyNode_DocType:
- case TidyNode_Text:
- case TidyNode_Comment:
- break;
-
- default:
- ADD_PROPERTY_LONG(obj->std.properties, id, tidyNodeGetId(obj->node));
- }
-
- tempattr = tidyAttrFirst(obj->node);
- MAKE_STD_ZVAL(attribute);
-
- if (tempattr) {
- char *name, *val;
- array_init(attribute);
-
- do {
- name = (char *)tidyAttrName(tempattr);
- val = (char *)tidyAttrValue(tempattr);
- if (name && val) {
- add_assoc_string(attribute, name, val, TRUE);
- }
- } while((tempattr = tidyAttrNext(tempattr)));
- } else {
- ZVAL_NULL(attribute);
- }
- zend_hash_update(obj->std.properties, "attribute", sizeof("attribute"), (void *)&attribute, sizeof(zval *), NULL);
-
- tempnode = tidyGetChild(obj->node);
-
- MAKE_STD_ZVAL(children);
- if (tempnode) {
- array_init(children);
- do {
- MAKE_STD_ZVAL(temp);
- tidy_instanciate(tidy_ce_node, temp TSRMLS_CC);
- newobj = (PHPTidyObj *) zend_object_store_get_object(temp TSRMLS_CC);
- newobj->node = tempnode;
- newobj->type = is_node;
- newobj->ptdoc = obj->ptdoc;
- newobj->ptdoc->ref_count++;
-
- tidy_add_default_properties(newobj, is_node TSRMLS_CC);
- add_next_index_zval(children, temp);
-
- } while((tempnode = tidyGetNext(tempnode)));
-
- } else {
- ZVAL_NULL(children);
- }
-
- zend_hash_update(obj->std.properties, "child", sizeof("child"), (void *)&children, sizeof(zval *), NULL);
-
- break;
-
- case is_doc:
- ADD_PROPERTY_NULL(obj->std.properties, errorBuffer);
- ADD_PROPERTY_NULL(obj->std.properties, value);
- break;
-
- case is_exception:
- default:
- break;
- }
-}
-
-static void *php_tidy_get_opt_val(PHPTidyDoc *ptdoc, TidyOption opt, TidyOptionType *type TSRMLS_DC)
-{
- *type = tidyOptGetType(opt);
-
- switch (*type) {
- case TidyString: {
- char *val = (char *) tidyOptGetValue(ptdoc->doc, tidyOptGetId(opt));
- if (val) {
- return (void *) estrdup(val);
- } else {
- return (void *) estrdup("");
- }
- }
- break;
-
- case TidyInteger:
- return (void *) tidyOptGetInt(ptdoc->doc, tidyOptGetId(opt));
- break;
-
- case TidyBoolean:
- return (void *) tidyOptGetBool(ptdoc->doc, tidyOptGetId(opt));
- break;
- }
-
- /* should not happen */
- return NULL;
-}
-
-static void php_tidy_create_node(INTERNAL_FUNCTION_PARAMETERS, tidy_base_nodetypes node)
-{
- PHPTidyObj *newobj;
- TIDY_FETCH_OBJECT;
-
- tidy_instanciate(tidy_ce_node, return_value TSRMLS_CC);
- newobj = (PHPTidyObj *) zend_object_store_get_object(return_value TSRMLS_CC);
- newobj->type = is_node;
- newobj->ptdoc = obj->ptdoc;
- newobj->ptdoc->ref_count++;
-
- switch(node) {
- case is_root_node:
- newobj->node = tidyGetRoot(newobj->ptdoc->doc);
- break;
-
- case is_html_node:
- newobj->node = tidyGetHtml(newobj->ptdoc->doc);
- break;
-
- case is_head_node:
- newobj->node = tidyGetHead(newobj->ptdoc->doc);
- break;
-
- case is_body_node:
- newobj->node = tidyGetBody(newobj->ptdoc->doc);
- break;
- }
-
- tidy_add_default_properties(newobj, is_node TSRMLS_CC);
-}
-
-static int _php_tidy_apply_config_array(TidyDoc doc, HashTable *ht_options TSRMLS_DC)
-{
- char *opt_name = NULL;
- zval **opt_val;
- ulong opt_indx;
-
- for (zend_hash_internal_pointer_reset(ht_options);
- zend_hash_get_current_data(ht_options, (void **)&opt_val) == SUCCESS;
- zend_hash_move_forward(ht_options)) {
-
- if(zend_hash_get_current_key(ht_options, &opt_name, &opt_indx, FALSE) == FAILURE) {
- php_error_docref(NULL TSRMLS_CC, E_ERROR, "Could not retrieve key from option array");
- return FAILURE;
- }
-
- if(opt_name) {
- _php_tidy_set_tidy_opt(doc, opt_name, *opt_val TSRMLS_CC);
- opt_name = NULL;
- }
-
- }
-
- return SUCCESS;
-}
-
-static int php_tidy_parse_string(PHPTidyObj *obj, char *string, char *enc TSRMLS_DC)
-{
- if(enc) {
- if (tidySetCharEncoding(obj->ptdoc->doc, enc) < 0) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Could not set encoding '%s'", enc);
- return FAILURE;
- }
- }
-
- if (tidyParseString(obj->ptdoc->doc, string) < 0) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", obj->ptdoc->errbuf->bp);
- return FAILURE;
-
- } else {
- tidy_doc_update_properties(obj TSRMLS_CC);
-
- return SUCCESS;
- }
-
- tidy_doc_update_properties(obj TSRMLS_CC);
-
-}
-
-static void tidy_globals_ctor(void *global TSRMLS_DC)
-{
-
-}
-
-static void tidy_globals_dtor(void *global TSRMLS_DC)
-{
-
-}
-
-PHP_MINIT_FUNCTION(tidy)
-{
- ZEND_INIT_MODULE_GLOBALS(tidy, tidy_globals_ctor, tidy_globals_dtor);
-
- REGISTER_INI_ENTRIES();
- REGISTER_TIDY_CLASS(tidy, doc, NULL, 0);
- REGISTER_TIDY_CLASS(tidyNode, node, NULL, ZEND_ACC_FINAL_CLASS);
- /* no exceptions for now..
- REGISTER_TIDY_CLASS(tidyException, exception, zend_exception_get_default());
- */
- tidy_object_handlers_doc.get_class_entry = tidy_get_ce_doc;
- tidy_object_handlers_node.get_class_entry = tidy_get_ce_node;
-
- tidy_object_handlers_doc.cast_object = tidy_doc_cast_handler;
- tidy_object_handlers_node.cast_object = tidy_node_cast_handler;
-
- _php_tidy_register_tags(INIT_FUNC_ARGS_PASSTHRU);
- _php_tidy_register_nodetypes(INIT_FUNC_ARGS_PASSTHRU);
-
- return SUCCESS;
-}
-
-
-PHP_MSHUTDOWN_FUNCTION(tidy)
-{
- return SUCCESS;
-}
-
-PHP_RINIT_FUNCTION(tidy)
-{
- if (INI_BOOL("tidy.clean_output") == TRUE) {
- if (php_start_ob_buffer_named("ob_tidyhandler", 0, 1 TSRMLS_CC) == FAILURE) {
- zend_error(E_NOTICE, "Failure installing Tidy output buffering.");
- }
- }
-
- return SUCCESS;
-}
-
-PHP_RSHUTDOWN_FUNCTION(tidy)
-{
- return SUCCESS;
-}
-
-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$)");
- php_info_print_table_end();
-
- DISPLAY_INI_ENTRIES();
-}
-
-PHP_FUNCTION(ob_tidyhandler)
-{
- char *input;
- int input_len;
- long mode;
- TidyBuffer errbuf = {0};
- TidyDoc doc;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|l", &input, &input_len, &mode) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- doc = tidyCreate();
- tidyBufInit(&errbuf);
-
- tidyOptSetBool(doc, TidyForceOutput, yes);
- tidyOptSetBool(doc, TidyMark, no);
-
- if (tidySetErrorBuffer(doc, &errbuf) != 0) {
- tidyRelease(doc);
- tidyBufFree(&errbuf);
-
- php_error_docref(NULL TSRMLS_CC, E_ERROR, "Could not set Tidy error buffer");
- }
-
- TIDY_SET_DEFAULT_CONFIG(doc);
-
- if (input_len > 1) {
- if (tidyParseString(doc, input) < 0 || tidyCleanAndRepair(doc) < 0) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", errbuf.bp);
- RETVAL_NULL();
- } else {
- TidyBuffer output = {0};
- tidyBufInit(&output);
-
- tidySaveBuffer(doc, &output);
- RETVAL_STRING(output.bp, 1);
-
- tidyBufFree(&output);
- }
- } else {
- RETVAL_NULL();
- }
-
- tidyRelease(doc);
- tidyBufFree(&errbuf);
-}
-
-/* {{{ proto bool tidy_parse_string(string input [, mixed config_options [, string encoding]])
- Parse a document stored in a string */
-PHP_FUNCTION(tidy_parse_string)
-{
- char *input, *enc = NULL;
- int input_len, enc_len = 0;
- zval *options = NULL;
-
- PHPTidyObj *obj;
-
- TIDY_SET_CONTEXT;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|zs", &input, &input_len, &options, &enc, &enc_len) == FAILURE) {
- RETURN_FALSE;
- }
-
- tidy_instanciate(tidy_ce_doc, return_value TSRMLS_CC);
- obj = (PHPTidyObj *) zend_object_store_get_object(return_value TSRMLS_CC);
-
- TIDY_APPLY_CONFIG_ZVAL(obj->ptdoc->doc, options);
-
- if(php_tidy_parse_string(obj, input, enc TSRMLS_CC) == FAILURE) {
- zval_dtor(return_value);
- INIT_ZVAL(*return_value);
- RETURN_FALSE;
- }
-
-}
-/* }}} */
-
-/* {{{ proto string tidy_get_error_buffer([boolean detailed])
- Return warnings and errors which occured parsing the specified document*/
-PHP_FUNCTION(tidy_get_error_buffer)
-{
- TIDY_FETCH_OBJECT;
-
- if (obj->ptdoc->errbuf && obj->ptdoc->errbuf->bp) {
- RETURN_STRING(obj->ptdoc->errbuf->bp, 1);
- } else {
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-/* {{{ proto string tidy_get_output()
- Return a string representing the parsed tidy markup */
-PHP_FUNCTION(tidy_get_output)
-{
- TidyBuffer output = {0};
- TIDY_FETCH_OBJECT;
-
- tidySaveBuffer(obj->ptdoc->doc, &output);
-
- RETVAL_STRING(output.bp, 1);
-
- tidyBufFree(&output);
-}
-/* }}} */
-
-/* {{{ proto boolean tidy_parse_file(string file [, mixed config_options [, string encoding [, bool use_include_path]]])
- Parse markup in file or URI */
-PHP_FUNCTION(tidy_parse_file)
-{
- char *inputfile, *enc = NULL;
- int input_len, enc_len = 0;
- zend_bool use_include_path = 0;
- char *contents;
- zval *options = NULL;
-
- PHPTidyObj *obj;
- TIDY_SET_CONTEXT;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|zsb", &inputfile, &input_len,
- &options, &enc, &enc_len, &use_include_path) == FAILURE) {
- RETURN_FALSE;
- }
-
- tidy_instanciate(tidy_ce_doc, return_value TSRMLS_CC);
- obj = (PHPTidyObj *) zend_object_store_get_object(return_value TSRMLS_CC);
-
- if (!(contents = php_tidy_file_to_mem(inputfile, use_include_path TSRMLS_CC))) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Cannot Load '%s' into memory %s", inputfile, (use_include_path) ? "(Using include path)" : "");
- return;
- }
-
- TIDY_APPLY_CONFIG_ZVAL(obj->ptdoc->doc, options);
-
- if(php_tidy_parse_string(obj, contents, enc TSRMLS_CC) == FAILURE) {
- zval_dtor(return_value);
- INIT_ZVAL(*return_value);
- RETVAL_FALSE;
- }
-
- efree(contents);
-}
-/* }}} */
-
-/* {{{ proto boolean tidy_clean_repair()
- Execute configured cleanup and repair operations on parsed markup */
-PHP_FUNCTION(tidy_clean_repair)
-{
- TIDY_FETCH_OBJECT;
-
- if (tidyCleanAndRepair(obj->ptdoc->doc) >= 0) {
- tidy_doc_update_properties(obj TSRMLS_CC);
- RETURN_TRUE;
- }
-
- RETURN_FALSE;
-}
-/* }}} */
-
-/* {{{ proto boolean tidy_repair_string(string data [, mixed config_file [, string encoding]])
- Repair a string using an optionally provided configuration file */
-PHP_FUNCTION(tidy_repair_string)
-{
- TIDY_SET_CONTEXT;
- php_tidy_quick_repair(INTERNAL_FUNCTION_PARAM_PASSTHRU, FALSE);
-}
-/* }}} */
-
-/* {{{ proto boolean tidy_repair_file(string filename [, mixed config_file [, string encoding [, bool use_include_path]]])
- Repair a file using an optionally provided configuration file */
-PHP_FUNCTION(tidy_repair_file)
-{
- TIDY_SET_CONTEXT;
- php_tidy_quick_repair(INTERNAL_FUNCTION_PARAM_PASSTHRU, TRUE);
-}
-/* }}} */
-
-/* {{{ proto boolean tidy_diagnose()
- Run configured diagnostics on parsed and repaired markup. */
-PHP_FUNCTION(tidy_diagnose)
-{
- TIDY_FETCH_OBJECT;
-
- if (tidyRunDiagnostics(obj->ptdoc->doc) >= 0) {
- tidy_doc_update_properties(obj TSRMLS_CC);
- RETURN_TRUE;
- }
-
- RETURN_FALSE;
-}
-/* }}} */
-
-/* {{{ proto string tidy_get_release()
- Get release date (version) for Tidy library */
-PHP_FUNCTION(tidy_get_release)
-{
- TIDY_SET_CONTEXT;
-
- if (ZEND_NUM_ARGS()) {
- WRONG_PARAM_COUNT;
- }
-
- RETURN_STRING((char *)tidyReleaseDate(), 1);
-}
-/* }}} */
-
-/* {{{ proto array tidy_get_config()
- Get current Tidy configuarion */
-PHP_FUNCTION(tidy_get_config)
-{
- TidyIterator itOpt;
- char *opt_name;
- void *opt_value;
- TidyOptionType optt;
-
- TIDY_FETCH_OBJECT;
-
- itOpt = tidyGetOptionList(obj->ptdoc->doc);
-
- array_init(return_value);
-
- while (itOpt) {
- TidyOption opt = tidyGetNextOption(obj->ptdoc->doc, &itOpt);
-
- opt_name = (char *)tidyOptGetName(opt);
- opt_value = php_tidy_get_opt_val(obj->ptdoc, opt, &optt TSRMLS_CC);
- switch (optt) {
- case TidyString:
- add_assoc_string(return_value, opt_name, (char*)opt_value, 0);
- break;
-
- case TidyInteger:
- add_assoc_long(return_value, opt_name, (long)opt_value);
- break;
-
- case TidyBoolean:
- add_assoc_bool(return_value, opt_name, (long)opt_value);
- break;
- }
- }
-
- return;
-}
-/* }}} */
-
-/* {{{ proto int tidy_get_status()
- Get status of specfied document. */
-PHP_FUNCTION(tidy_get_status)
-{
- TIDY_FETCH_OBJECT;
-
- RETURN_LONG(tidyStatus(obj->ptdoc->doc));
-}
-/* }}} */
-
-/* {{{ proto int tidy_get_html_ver()
- Get the Detected HTML version for the specified document. */
-PHP_FUNCTION(tidy_get_html_ver)
-{
- TIDY_FETCH_OBJECT;
-
- RETURN_LONG(tidyDetectedHtmlVersion(obj->ptdoc->doc));
-}
-/* }}} */
-
-/* {{{ proto boolean tidy_is_xhtml()
- Indicates if the document is a XHTML document. */
-PHP_FUNCTION(tidy_is_xhtml)
-{
- TIDY_FETCH_OBJECT;
-
- RETURN_BOOL(tidyDetectedXhtml(obj->ptdoc->doc));
-}
-/* }}} */
-
-/* {{{ proto boolean tidy_is_xhtml()
- Indicates if the document is a generic (non HTML/XHTML) XML document. */
-PHP_FUNCTION(tidy_is_xml)
-{
- TIDY_FETCH_OBJECT;
-
- RETURN_BOOL(tidyDetectedGenericXml(obj->ptdoc->doc));
-}
-/* }}} */
-
-/* {{{ proto int tidy_error_count()
- Returns the Number of Tidy errors encountered for specified document. */
-PHP_FUNCTION(tidy_error_count)
-{
- TIDY_FETCH_OBJECT;
-
- RETURN_LONG(tidyErrorCount(obj->ptdoc->doc));
-}
-/* }}} */
-
-/* {{{ proto int tidy_warning_count()
- Returns the Number of Tidy warnings encountered for specified document. */
-PHP_FUNCTION(tidy_warning_count)
-{
- TIDY_FETCH_OBJECT;
-
- RETURN_LONG(tidyWarningCount(obj->ptdoc->doc));
-}
-/* }}} */
-
-/* {{{ proto int tidy_access_count()
- Returns the Number of Tidy accessibility warnings encountered for specified document. */
-PHP_FUNCTION(tidy_access_count)
-{
- TIDY_FETCH_OBJECT;
-
- RETURN_LONG(tidyAccessWarningCount(obj->ptdoc->doc));
-}
-/* }}} */
-
-/* {{{ proto int tidy_config_count()
- Returns the Number of Tidy configuration errors encountered for specified document. */
-PHP_FUNCTION(tidy_config_count)
-{
- TIDY_FETCH_OBJECT;
-
- RETURN_LONG(tidyConfigErrorCount(obj->ptdoc->doc));
-}
-/* }}} */
-
-/* {{{ proto mixed tidy_getopt(string option)
- Returns the value of the specified configuration option for the tidy document. */
-PHP_FUNCTION(tidy_getopt)
-{
- PHPTidyObj *obj;
- char *optname;
- void *optval;
- int optname_len;
- TidyOption opt;
- TidyOptionType optt;
-
- TIDY_SET_CONTEXT;
-
- if (object) {
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &optname, &optname_len) == FAILURE) {
- RETURN_FALSE;
- }
- } else {
- if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, NULL, "Os", &object, tidy_ce_doc, &optname, &optname_len) == FAILURE) {
- RETURN_FALSE;
- }
- }
-
- obj = (PHPTidyObj *) zend_object_store_get_object(object TSRMLS_CC);
-
- opt = tidyGetOptionByName(obj->ptdoc->doc, optname);
-
- if (!opt) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unknown Tidy Configuration Option '%s'", optname);
- RETURN_FALSE;
- }
-
- optval = php_tidy_get_opt_val(obj->ptdoc, opt, &optt TSRMLS_CC);
- switch (optt) {
- case TidyString:
- RETURN_STRING((char *)optval, 0);
- break;
-
- case TidyInteger:
- RETURN_LONG((long)optval);
- break;
-
- case TidyBoolean:
- if (optval) {
- RETURN_TRUE;
- } else {
- RETURN_FALSE;
- }
- break;
-
- default:
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to determine type of configuration option");
- break;
- }
-
- RETURN_FALSE;
-}
-/* }}} */
-
-TIDY_DOC_METHOD(__construct)
-{
- char *inputfile = NULL, *enc = NULL;
- int input_len = 0, enc_len = 0;
- zend_bool use_include_path = 0;
- char *contents;
- zval *options = NULL;
-
- PHPTidyObj *obj;
- TIDY_SET_CONTEXT;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|szsb", &inputfile, &input_len,
- &options, &enc, &enc_len, &use_include_path) == FAILURE) {
- RETURN_FALSE;
- }
-
- obj = (PHPTidyObj *)zend_object_store_get_object(object TSRMLS_CC);
-
- if(inputfile) {
-
- if (!(contents = php_tidy_file_to_mem(inputfile, use_include_path TSRMLS_CC))) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Cannot Load '%s' into memory %s", inputfile, (use_include_path) ? "(Using include path)" : "");
- return;
- }
-
- TIDY_APPLY_CONFIG_ZVAL(obj->ptdoc->doc, options);
-
- php_tidy_parse_string(obj, contents, enc TSRMLS_CC);
-
- efree(contents);
- }
-
-}
-
-TIDY_DOC_METHOD(parseFile)
-{
- char *inputfile, *enc = NULL;
- int input_len, enc_len = 0;
- zend_bool use_include_path = 0;
- char *contents;
- zval *options = NULL;
- PHPTidyObj *obj;
-
- TIDY_SET_CONTEXT;
-
- obj = (PHPTidyObj *)zend_object_store_get_object(object TSRMLS_CC);
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|zsb", &inputfile, &input_len,
- &options, &enc, &enc_len, &use_include_path) == FAILURE) {
- RETURN_FALSE;
- }
-
- if (!(contents = php_tidy_file_to_mem(inputfile, use_include_path TSRMLS_CC))) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Cannot Load '%s' into memory %s", inputfile, (use_include_path) ? "(Using include path)" : "");
- RETURN_FALSE;
- }
-
- TIDY_APPLY_CONFIG_ZVAL(obj->ptdoc->doc, options);
-
- if(php_tidy_parse_string(obj, contents, enc TSRMLS_CC) == FAILURE) {
- RETVAL_FALSE;
- } else {
- RETVAL_TRUE;
- }
-
- efree(contents);
-}
-
-TIDY_DOC_METHOD(parseString)
-{
- char *input, *enc = NULL;
- int input_len, enc_len = 0;
- zval *options = NULL;
- PHPTidyObj *obj;
-
- TIDY_SET_CONTEXT;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|zs", &input, &input_len, &options, &enc, &enc_len) == FAILURE) {
- RETURN_FALSE;
- }
-
- obj = (PHPTidyObj *)zend_object_store_get_object(object TSRMLS_CC);
-
- TIDY_APPLY_CONFIG_ZVAL(obj->ptdoc->doc, options);
-
- if(php_tidy_parse_string(obj, input, enc TSRMLS_CC) == SUCCESS) {
- RETURN_TRUE;
- }
-
- RETURN_FALSE;
-}
-
-
-/* {{{ proto TidyNode tidy_get_root()
- Returns a TidyNode Object representing the root of the tidy parse tree */
-PHP_FUNCTION(tidy_get_root)
-{
- TIDY_SET_CONTEXT;
- php_tidy_create_node(INTERNAL_FUNCTION_PARAM_PASSTHRU, is_root_node);
-}
-/* }}} */
-
-/* {{{ proto TidyNode tidy_get_html()
- Returns a TidyNode Object starting from the <HTML> tag of the tidy parse tree */
-PHP_FUNCTION(tidy_get_html)
-{
- TIDY_SET_CONTEXT;
- php_tidy_create_node(INTERNAL_FUNCTION_PARAM_PASSTHRU, is_html_node);
-}
-/* }}} */
-
-/* {{{ proto TidyNode tidy_get_head()
- Returns a TidyNode Object starting from the <HEAD> tag of the tidy parse tree */
-PHP_FUNCTION(tidy_get_head)
-{
- TIDY_SET_CONTEXT;
- php_tidy_create_node(INTERNAL_FUNCTION_PARAM_PASSTHRU, is_head_node);
-}
-/* }}} */
-
-/* {{{ proto TidyNode tidy_get_body(resource tidy)
- Returns a TidyNode Object starting from the <BODY> tag of the tidy parse tree */
-PHP_FUNCTION(tidy_get_body)
-{
- TIDY_SET_CONTEXT;
- php_tidy_create_node(INTERNAL_FUNCTION_PARAM_PASSTHRU, is_body_node);
-}
-/* }}} */
-
-/* {{{ proto tidyNode::tidyNode()
- Constructor. */
-TIDY_NODE_METHOD(__construct)
-{
-}
-/* }}} */
-
-/* {{{ proto boolean tidyNode::hasChildren()
- Returns true if this node has children */
-TIDY_NODE_METHOD(hasChildren)
-{
- TIDY_FETCH_ONLY_OBJECT;
-
- if (tidyGetChild(obj->node)) {
- RETURN_TRUE;
- } else {
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-/* {{{ proto boolean tidyNode::hasSiblings()
- Returns true if this node has siblings */
-TIDY_NODE_METHOD(hasSiblings)
-{
- TIDY_FETCH_ONLY_OBJECT;
-
- if (tidyGetNext(obj->node)) {
- RETURN_TRUE;
- } else {
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-/* {{{ proto boolean tidyNode::isComment()
- Returns true if this node represents a comment */
-TIDY_NODE_METHOD(isComment)
-{
- TIDY_FETCH_ONLY_OBJECT;
-
- if (tidyNodeGetType(obj->node) == TidyNode_Comment) {
- RETURN_TRUE;
- } else {
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-/* {{{ proto boolean tidyNode::isHtml()
- Returns true if this node is part of a HTML document */
-TIDY_NODE_METHOD(isHtml)
-{
- TIDY_FETCH_ONLY_OBJECT;
-
- if (tidyNodeGetType(obj->node) & (TidyNode_Start | TidyNode_End | TidyNode_StartEnd)) {
- RETURN_TRUE;
- }
-
- RETURN_FALSE;
-}
-/* }}} */
-
-/* {{{ proto boolean tidyNode::isXhtml()
- Returns true if this node is part of a XHTML document */
-TIDY_NODE_METHOD(isXhtml)
-{
- TIDY_FETCH_ONLY_OBJECT;
-
- if (tidyDetectedXhtml(obj->ptdoc->doc)) {
- RETURN_TRUE;
- } else {
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-/* {{{ proto boolean tidyNode::isXml()
- Returns true if this node is part of a XML document */
-TIDY_NODE_METHOD(isXml)
-{
- TIDY_FETCH_ONLY_OBJECT;
-
- if (tidyDetectedGenericXml(obj->ptdoc->doc)) {
- RETURN_TRUE;
- } else {
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-/* {{{ proto boolean tidyNode::isText()
- Returns true if this node represents text (no markup) */
-TIDY_NODE_METHOD(isText)
-{
- TIDY_FETCH_ONLY_OBJECT;
-
- if (tidyNodeGetType(obj->node) == TidyNode_Text) {
- RETURN_TRUE;
- } else {
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-/* {{{ proto boolean tidyNode::isJste()
- Returns true if this node is JSTE */
-TIDY_NODE_METHOD(isJste)
-{
- TIDY_FETCH_ONLY_OBJECT;
-
- if (tidyNodeGetType(obj->node) == TidyNode_Jste) {
- RETURN_TRUE;
- } else {
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-/* {{{ proto boolean tidyNode::isAsp()
- Returns true if this node is ASP */
-TIDY_NODE_METHOD(isAsp)
-{
- TIDY_FETCH_ONLY_OBJECT;
-
- if (tidyNodeGetType(obj->node) == TidyNode_Asp) {
- RETURN_TRUE;
- } else {
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-/* {{{ proto boolean tidyNode::isPhp()
- Returns true if this node is PHP */
-TIDY_NODE_METHOD(isPhp)
-{
- TIDY_FETCH_ONLY_OBJECT;
-
- if (tidyNodeGetType(obj->node) == TidyNode_Php) {
- RETURN_TRUE;
- } else {
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-static void _php_tidy_register_nodetypes(INIT_FUNC_ARGS)
-{
- TIDY_NODE_CONST(ROOT, Root);
- TIDY_NODE_CONST(DOCTYPE, DocType);
- TIDY_NODE_CONST(COMMENT, Comment);
- TIDY_NODE_CONST(PROCINS, ProcIns);
- TIDY_NODE_CONST(TEXT, Text);
- TIDY_NODE_CONST(START, Start);
- TIDY_NODE_CONST(END, End);
- TIDY_NODE_CONST(STARTEND, StartEnd);
- TIDY_NODE_CONST(CDATA, CDATA);
- TIDY_NODE_CONST(SECTION, Section);
- TIDY_NODE_CONST(ASP, Asp);
- TIDY_NODE_CONST(JSTE, Jste);
- TIDY_NODE_CONST(PHP, Php);
- TIDY_NODE_CONST(XMLDECL, XmlDecl);
-}
-
-static void _php_tidy_register_tags(INIT_FUNC_ARGS)
-{
- TIDY_TAG_CONST(UNKNOWN);
- TIDY_TAG_CONST(A);
- TIDY_TAG_CONST(ABBR);
- TIDY_TAG_CONST(ACRONYM);
- TIDY_TAG_CONST(ADDRESS);
- TIDY_TAG_CONST(ALIGN);
- TIDY_TAG_CONST(APPLET);
- TIDY_TAG_CONST(AREA);
- TIDY_TAG_CONST(B);
- TIDY_TAG_CONST(BASE);
- TIDY_TAG_CONST(BASEFONT);
- TIDY_TAG_CONST(BDO);
- TIDY_TAG_CONST(BGSOUND);
- TIDY_TAG_CONST(BIG);
- TIDY_TAG_CONST(BLINK);
- TIDY_TAG_CONST(BLOCKQUOTE);
- TIDY_TAG_CONST(BODY);
- TIDY_TAG_CONST(BR);
- TIDY_TAG_CONST(BUTTON);
- TIDY_TAG_CONST(CAPTION);
- TIDY_TAG_CONST(CENTER);
- TIDY_TAG_CONST(CITE);
- TIDY_TAG_CONST(CODE);
- TIDY_TAG_CONST(COL);
- TIDY_TAG_CONST(COLGROUP);
- TIDY_TAG_CONST(COMMENT);
- TIDY_TAG_CONST(DD);
- TIDY_TAG_CONST(DEL);
- TIDY_TAG_CONST(DFN);
- TIDY_TAG_CONST(DIR);
- TIDY_TAG_CONST(DIV);
- TIDY_TAG_CONST(DL);
- TIDY_TAG_CONST(DT);
- TIDY_TAG_CONST(EM);
- TIDY_TAG_CONST(EMBED);
- TIDY_TAG_CONST(FIELDSET);
- TIDY_TAG_CONST(FONT);
- TIDY_TAG_CONST(FORM);
- TIDY_TAG_CONST(FRAME);
- TIDY_TAG_CONST(FRAMESET);
- TIDY_TAG_CONST(H1);
- TIDY_TAG_CONST(H2);
- TIDY_TAG_CONST(H3);
- TIDY_TAG_CONST(H4);
- TIDY_TAG_CONST(H5);
- TIDY_TAG_CONST(H6);
- TIDY_TAG_CONST(HEAD);
- TIDY_TAG_CONST(HR);
- TIDY_TAG_CONST(HTML);
- TIDY_TAG_CONST(I);
- TIDY_TAG_CONST(IFRAME);
- TIDY_TAG_CONST(ILAYER);
- TIDY_TAG_CONST(IMG);
- TIDY_TAG_CONST(INPUT);
- TIDY_TAG_CONST(INS);
- TIDY_TAG_CONST(ISINDEX);
- TIDY_TAG_CONST(KBD);
- TIDY_TAG_CONST(KEYGEN);
- TIDY_TAG_CONST(LABEL);
- TIDY_TAG_CONST(LAYER);
- TIDY_TAG_CONST(LEGEND);
- TIDY_TAG_CONST(LI);
- TIDY_TAG_CONST(LINK);
- TIDY_TAG_CONST(LISTING);
- TIDY_TAG_CONST(MAP);
- TIDY_TAG_CONST(MARQUEE);
- TIDY_TAG_CONST(MENU);
- TIDY_TAG_CONST(META);
- TIDY_TAG_CONST(MULTICOL);
- TIDY_TAG_CONST(NOBR);
- TIDY_TAG_CONST(NOEMBED);
- TIDY_TAG_CONST(NOFRAMES);
- TIDY_TAG_CONST(NOLAYER);
- TIDY_TAG_CONST(NOSAVE);
- TIDY_TAG_CONST(NOSCRIPT);
- TIDY_TAG_CONST(OBJECT);
- TIDY_TAG_CONST(OL);
- TIDY_TAG_CONST(OPTGROUP);
- TIDY_TAG_CONST(OPTION);
- TIDY_TAG_CONST(P);
- TIDY_TAG_CONST(PARAM);
- TIDY_TAG_CONST(PLAINTEXT);
- TIDY_TAG_CONST(PRE);
- TIDY_TAG_CONST(Q);
- TIDY_TAG_CONST(RB);
- TIDY_TAG_CONST(RBC);
- TIDY_TAG_CONST(RP);
- TIDY_TAG_CONST(RT);
- TIDY_TAG_CONST(RTC);
- TIDY_TAG_CONST(RUBY);
- TIDY_TAG_CONST(S);
- TIDY_TAG_CONST(SAMP);
- TIDY_TAG_CONST(SCRIPT);
- TIDY_TAG_CONST(SELECT);
- TIDY_TAG_CONST(SERVER);
- TIDY_TAG_CONST(SERVLET);
- TIDY_TAG_CONST(SMALL);
- TIDY_TAG_CONST(SPACER);
- TIDY_TAG_CONST(SPAN);
- TIDY_TAG_CONST(STRIKE);
- TIDY_TAG_CONST(STRONG);
- TIDY_TAG_CONST(STYLE);
- TIDY_TAG_CONST(SUB);
- TIDY_TAG_CONST(SUP);
- TIDY_TAG_CONST(TABLE);
- TIDY_TAG_CONST(TBODY);
- TIDY_TAG_CONST(TD);
- TIDY_TAG_CONST(TEXTAREA);
- TIDY_TAG_CONST(TFOOT);
- TIDY_TAG_CONST(TH);
- TIDY_TAG_CONST(THEAD);
- TIDY_TAG_CONST(TITLE);
- TIDY_TAG_CONST(TR);
- TIDY_TAG_CONST(TT);
- TIDY_TAG_CONST(U);
- TIDY_TAG_CONST(UL);
- TIDY_TAG_CONST(VAR);
- TIDY_TAG_CONST(WBR);
- TIDY_TAG_CONST(XMP);
-}
-
-#endif
-
-/*
- * 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/tidy/tidy.dsp b/ext/tidy/tidy.dsp
deleted file mode 100755
index fe44fa7a51..0000000000
--- a/ext/tidy/tidy.dsp
+++ /dev/null
@@ -1,108 +0,0 @@
-# Microsoft Developer Studio Project File - Name="tidy" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=tidy - Win32 Debug_TS
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "tidy.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "tidy.mak" CFG="tidy - Win32 Debug_TS"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "tidy - Win32 Release_TS" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "tidy - Win32 Debug_TS" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "tidy - Win32 Release_TS"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release_TS"
-# PROP BASE Intermediate_Dir "Release_TS"
-# PROP BASE Ignore_Export_Lib 0
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release_TS"
-# PROP Intermediate_Dir "Release_TS"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MD /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "TIDY_EXPORTS" /YX /FD /c
-# ADD CPP /nologo /MD /W3 /GX /O2 /I "..\.." /I "..\..\main" /I "..\..\Zend" /I "..\..\TSRM" /I "..\..\..\php_build\include" /I "..\..\..\php_build\include\libtidy" /D ZEND_DEBUG=0 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "COMPILE_DL_TIDY" /D ZTS=1 /D "ZEND_WIN32" /D "PHP_WIN32" /D "PHP_TIDY_EXPORTS" /D "HAVE_ZLIB" /FR /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x407 /d "NDEBUG"
-# ADD RSC /l 0x407 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386
-# ADD LINK32 php5ts.lib libtidy.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 /out:"..\..\Release_TS/php_tidy.dll" /libpath:"..\..\Release_TS" /libpath:"..\..\Release_TS_Inline" /libpath:"..\..\..\php_build\release"
-
-!ELSEIF "$(CFG)" == "tidy - Win32 Debug_TS"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug_TS"
-# PROP BASE Intermediate_Dir "Debug_TS"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug_TS"
-# PROP Intermediate_Dir "Debug_TS"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "TIDY_EXPORTS" /YX /FD /GZ /c
-# ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "..\.." /I "..\..\main" /I "..\..\Zend" /I "..\..\TSRM" /I "..\..\..\php_build\include" /I "..\..\..\php_build\include\libtidy" /D ZEND_DEBUG=1 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "COMPILE_DL_TIDY" /D ZTS=1 /D "ZEND_WIN32" /D "PHP_WIN32" /D "PHP_TIDY_EXPORTS" /D "HAVE_ZLIB" /YX /FD /GZ /c
-# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x407 /d "_DEBUG"
-# ADD RSC /l 0x407 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 php5ts_debug.lib libtidy.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /out:"..\..\Debug_TS/php_tidy.dll" /pdbtype:sept /libpath:"..\..\Debug_TS" /libpath:"..\..\..\php_build\release"
-
-!ENDIF
-
-# Begin Target
-
-# Name "tidy - Win32 Release_TS"
-# Name "tidy - Win32 Debug_TS"
-# Begin Group "Source Files"
-
-# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
-# Begin Source File
-
-SOURCE=.\tidy.c
-# End Source File
-# End Group
-# Begin Group "Header Files"
-
-# PROP Default_Filter "h;hpp;hxx;hm;inl"
-# Begin Source File
-
-SOURCE=.\php_tidy.h
-# End Source File
-# End Group
-# End Target
-# End Project
diff --git a/ext/tokenizer/CREDITS b/ext/tokenizer/CREDITS
deleted file mode 100644
index c2879dd4ee..0000000000
--- a/ext/tokenizer/CREDITS
+++ /dev/null
@@ -1,2 +0,0 @@
-tokenizer
-Andrei Zmievski
diff --git a/ext/tokenizer/Makefile.frag b/ext/tokenizer/Makefile.frag
deleted file mode 100644
index eaca6e7f4f..0000000000
--- a/ext/tokenizer/Makefile.frag
+++ /dev/null
@@ -1,2 +0,0 @@
-Zend/zend_language_parser.h:
-$(builddir)/tokenizer.lo: Zend/zend_language_parser.h
diff --git a/ext/tokenizer/config.m4 b/ext/tokenizer/config.m4
deleted file mode 100644
index eed403626e..0000000000
--- a/ext/tokenizer/config.m4
+++ /dev/null
@@ -1,12 +0,0 @@
-dnl $Id$
-dnl config.m4 for extension tokenizer
-
-dnl Otherwise use enable:
-
-PHP_ARG_ENABLE(tokenizer, whether to enable tokenizer support,
-[ --disable-tokenizer Disable tokenizer support], yes)
-
-if test "$PHP_TOKENIZER" != "no"; then
- PHP_NEW_EXTENSION(tokenizer, tokenizer.c, $ext_shared)
- PHP_ADD_MAKEFILE_FRAGMENT
-fi
diff --git a/ext/tokenizer/config.w32 b/ext/tokenizer/config.w32
deleted file mode 100644
index 404b399057..0000000000
--- a/ext/tokenizer/config.w32
+++ /dev/null
@@ -1,11 +0,0 @@
-// $Id$
-// vim:ft=javascript
-
-ARG_ENABLE("tokenizer", "tokenizer support", "yes");
-
-if (PHP_TOKENIZER == "yes") {
- EXTENSION("tokenizer", "tokenizer.c");
- AC_DEFINE("HAVE_TOKENIZER", 1, "Tokenizer support");
-}
-
-
diff --git a/ext/tokenizer/package.xml b/ext/tokenizer/package.xml
deleted file mode 100644
index 16757db7df..0000000000
--- a/ext/tokenizer/package.xml
+++ /dev/null
@@ -1,46 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1" ?>
-<!DOCTYPE package SYSTEM "../pear/package.dtd">
-<package>
- <name>tokenizer</name>
- <summary>PHP Source code tokenizer</summary>
- <maintainers>
- <maintainer>
- <user>andrei</user>
- <name>Andrei Zmievski</name>
- <email>andrei@php.net</email>
- <role>lead</role>
- </maintainer>
- </maintainers>
- <description>
-The tokenizer functions provide an interface to the PHP tokenizer
-embedded in the Zend Engine. Using these functions you may write
-your own PHP source analyzing or modification tools without having
-to deal with the language specification at the lexical level.
- </description>
- <license>PHP</license>
- <release>
- <state>beta</state>
- <version>5.0.0rc1</version>
- <date>2004-03-19</date>
- <notes>
-package.xml added to support intallation using pear installer
- </notes>
- <filelist>
- <file role="doc" name="CREDITS"/>
- <file role="src" name="config.m4"/>
- <file role="src" name="Makefile.frag"/>
- <file role="src" name="config.w32"/>
- <file role="src" name="tokenizer.dsp"/>
- <file role="src" name="tokenizer.c"/>
- <file role="src" name="php_tokenizer.h"/>
- <file role="doc" name="tokenizer.php"/>
- <file role="test" name="tests/bug26463.phpt"/>
- </filelist>
- <deps>
- <dep type="php" rel="ge" version="5" />
- </deps>
- </release>
-</package>
-<!--
-vim:et:ts=1:sw=1
--->
diff --git a/ext/tokenizer/php_tokenizer.h b/ext/tokenizer/php_tokenizer.h
deleted file mode 100644
index c8230cbae6..0000000000
--- a/ext/tokenizer/php_tokenizer.h
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Andrei Zmievski <andrei@php.net> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-#ifndef PHP_TOKENIZER_H
-#define PHP_TOKENIZER_H
-
-extern zend_module_entry tokenizer_module_entry;
-#define phpext_tokenizer_ptr &tokenizer_module_entry
-
-#ifdef PHP_WIN32
-#define PHP_TOKENIZER_API __declspec(dllexport)
-#else
-#define PHP_TOKENIZER_API
-#endif
-
-#ifdef ZTS
-#include "TSRM.h"
-#endif
-
-PHP_MINIT_FUNCTION(tokenizer);
-PHP_MSHUTDOWN_FUNCTION(tokenizer);
-PHP_RINIT_FUNCTION(tokenizer);
-PHP_RSHUTDOWN_FUNCTION(tokenizer);
-PHP_MINFO_FUNCTION(tokenizer);
-
-PHP_FUNCTION(confirm_tokenizer_compiled); /* For testing, remove later. */
-PHP_FUNCTION(token_get_all);
-PHP_FUNCTION(token_name);
-
-#ifdef ZTS
-#define TOKENIZER_G(v) TSRMG(tokenizer_globals_id, zend_tokenizer_globals *, v)
-#else
-#define TOKENIZER_G(v) (tokenizer_globals.v)
-#endif
-
-#endif /* PHP_TOKENIZER_H */
-
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * indent-tabs-mode: t
- * End:
- */
diff --git a/ext/tokenizer/tests/bug26463.phpt b/ext/tokenizer/tests/bug26463.phpt
deleted file mode 100644
index 7480aa2f59..0000000000
--- a/ext/tokenizer/tests/bug26463.phpt
+++ /dev/null
@@ -1,118 +0,0 @@
---TEST--
-Bug #26463 (token_get_all() does not correctly handle semicolons after T_END_HEREDOC)
---FILE--
-<?php
-$str = '<?php
-$x=<<<DD
-jhdsjkfhjdsh
-DD
-."";
-$a=<<<DDDD
-jhdsjkfhjdsh
-DDDD;
-?>';
-var_dump(token_get_all($str));
-?>
---EXPECTF--
-array(17) {
- [0]=>
- array(2) {
- [0]=>
- int(%d)
- [1]=>
- string(6) "<?php
-"
- }
- [1]=>
- array(2) {
- [0]=>
- int(%d)
- [1]=>
- string(2) "$x"
- }
- [2]=>
- string(1) "="
- [3]=>
- array(2) {
- [0]=>
- int(%d)
- [1]=>
- string(6) "<<<DD
-"
- }
- [4]=>
- array(2) {
- [0]=>
- int(%d)
- [1]=>
- string(13) "jhdsjkfhjdsh
-"
- }
- [5]=>
- array(2) {
- [0]=>
- int(%d)
- [1]=>
- string(2) "DD"
- }
- [6]=>
- string(1) "."
- [7]=>
- array(2) {
- [0]=>
- int(%d)
- [1]=>
- string(2) """"
- }
- [8]=>
- string(1) ";"
- [9]=>
- array(2) {
- [0]=>
- int(%d)
- [1]=>
- string(1) "
-"
- }
- [10]=>
- array(2) {
- [0]=>
- int(%d)
- [1]=>
- string(2) "$a"
- }
- [11]=>
- string(1) "="
- [12]=>
- array(2) {
- [0]=>
- int(%d)
- [1]=>
- string(8) "<<<DDDD
-"
- }
- [13]=>
- array(2) {
- [0]=>
- int(%d)
- [1]=>
- string(13) "jhdsjkfhjdsh
-"
- }
- [14]=>
- array(2) {
- [0]=>
- int(%d)
- [1]=>
- string(4) "DDDD"
- }
- [15]=>
- string(1) ";"
- [16]=>
- array(2) {
- [0]=>
- int(%d)
- [1]=>
- string(2) "?>"
- }
-}
diff --git a/ext/tokenizer/tokenizer.c b/ext/tokenizer/tokenizer.c
deleted file mode 100644
index 292603a7ca..0000000000
--- a/ext/tokenizer/tokenizer.c
+++ /dev/null
@@ -1,550 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Andrei Zmievski <andrei@php.net> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "php.h"
-#include "php_ini.h"
-#include "ext/standard/info.h"
-#include "php_tokenizer.h"
-
-typedef struct yy_buffer_state *YY_BUFFER_STATE;
-typedef unsigned int yy_size_t;
-struct yy_buffer_state
- {
- FILE *yy_input_file;
-
- char *yy_ch_buf; /* input buffer */
- char *yy_buf_pos; /* current position in input buffer */
-
- /* Size of input buffer in bytes, not including room for EOB
- * characters.
- */
- yy_size_t yy_buf_size;
-
- /* Number of characters read into yy_ch_buf, not including EOB
- * characters.
- */
- int yy_n_chars;
-
- /* Whether we "own" the buffer - i.e., we know we created it,
- * and can realloc() it to grow it, and should free() it to
- * delete it.
- */
- int yy_is_our_buffer;
-
- /* Whether this is an "interactive" input source; if so, and
- * if we're using stdio for input, then we want to use getc()
- * instead of fread(), to make sure we stop fetching input after
- * each newline.
- */
- int yy_is_interactive;
-
- /* Whether we're considered to be at the beginning of a line.
- * If so, '^' rules will be active on the next match, otherwise
- * not.
- */
- int yy_at_bol;
-
- /* Whether to try to fill the input buffer when we reach the
- * end of it.
- */
- int yy_fill_buffer;
-
- int yy_buffer_status;
-#define YY_BUFFER_NEW 0
-#define YY_BUFFER_NORMAL 1
- /* When an EOF's been seen but there's still some text to process
- * then we mark the buffer as YY_EOF_PENDING, to indicate that we
- * shouldn't try reading from the input source any more. We might
- * still have a bunch of tokens to match, though, because of
- * possible backing-up.
- *
- * When we actually see the EOF, we change the status to "new"
- * (via yyrestart()), so that the user can continue scanning by
- * just pointing yyin at a new input file.
- */
-#define YY_BUFFER_EOF_PENDING 2
- };
-
-#include "zend.h"
-#include "zend_language_scanner.h"
-#include "zend_language_parser.h"
-
-#define zendtext LANG_SCNG(yy_text)
-#define zendleng LANG_SCNG(yy_leng)
-/* If you declare any globals in php_tokenizer.h uncomment this:
-ZEND_DECLARE_MODULE_GLOBALS(tokenizer)
-*/
-
-/* True global resources - no need for thread safety here */
-/* static int le_tokenizer; */
-
-/* {{{ tokenizer_functions[]
- *
- * Every user visible function must have an entry in tokenizer_functions[].
- */
-function_entry tokenizer_functions[] = {
- PHP_FE(token_get_all, NULL)
- PHP_FE(token_name, NULL)
- {NULL, NULL, NULL} /* Must be the last line in tokenizer_functions[] */
-};
-/* }}} */
-
-/* {{{ tokenizer_module_entry
- */
-zend_module_entry tokenizer_module_entry = {
-#if ZEND_MODULE_API_NO >= 20010901
- STANDARD_MODULE_HEADER,
-#endif
- "tokenizer",
- tokenizer_functions,
- PHP_MINIT(tokenizer),
- PHP_MSHUTDOWN(tokenizer),
- PHP_RINIT(tokenizer), /* Replace with NULL if there's nothing to do at request start */
- PHP_RSHUTDOWN(tokenizer), /* Replace with NULL if there's nothing to do at request end */
- PHP_MINFO(tokenizer),
-#if ZEND_MODULE_API_NO >= 20010901
- "0.1", /* Replace with version number for your extension */
-#endif
- STANDARD_MODULE_PROPERTIES
-};
-/* }}} */
-
-#ifdef COMPILE_DL_TOKENIZER
-ZEND_GET_MODULE(tokenizer)
-#endif
-
-/* {{{ PHP_INI
- */
-/* Remove comments and fill if you need to have entries in php.ini
-PHP_INI_BEGIN()
- STD_PHP_INI_ENTRY("tokenizer.global_value", "42", PHP_INI_ALL, OnUpdateLong, global_value, zend_tokenizer_globals, tokenizer_globals)
- STD_PHP_INI_ENTRY("tokenizer.global_string", "foobar", PHP_INI_ALL, OnUpdateString, global_string, zend_tokenizer_globals, tokenizer_globals)
-PHP_INI_END()
-*/
-/* }}} */
-
-/* {{{ php_tokenizer_init_globals
- */
-/* Uncomment this function if you have INI entries
-static void php_tokenizer_init_globals(zend_tokenizer_globals *tokenizer_globals)
-{
- tokenizer_globals->global_value = 0;
- tokenizer_globals->global_string = NULL;
-}
-*/
-/* }}} */
-
-/* {{{ PHP_MINIT_FUNCTION
- */
-PHP_MINIT_FUNCTION(tokenizer)
-{
- /* If you have INI entries, uncomment these lines
- ZEND_INIT_MODULE_GLOBALS(tokenizer, php_tokenizer_init_globals, NULL);
- REGISTER_INI_ENTRIES();
- */
-
- REGISTER_LONG_CONSTANT("T_INCLUDE", T_INCLUDE, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("T_INCLUDE_ONCE", T_INCLUDE_ONCE, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("T_EVAL", T_EVAL, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("T_REQUIRE", T_REQUIRE, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("T_REQUIRE_ONCE", T_REQUIRE_ONCE, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("T_LOGICAL_OR", T_LOGICAL_OR, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("T_LOGICAL_XOR", T_LOGICAL_XOR, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("T_LOGICAL_AND", T_LOGICAL_AND, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("T_PRINT", T_PRINT, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("T_PLUS_EQUAL", T_PLUS_EQUAL, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("T_MINUS_EQUAL", T_MINUS_EQUAL, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("T_MUL_EQUAL", T_MUL_EQUAL, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("T_DIV_EQUAL", T_DIV_EQUAL, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("T_CONCAT_EQUAL", T_CONCAT_EQUAL, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("T_MOD_EQUAL", T_MOD_EQUAL, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("T_AND_EQUAL", T_AND_EQUAL, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("T_OR_EQUAL", T_OR_EQUAL, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("T_XOR_EQUAL", T_XOR_EQUAL, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("T_SL_EQUAL", T_SL_EQUAL, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("T_SR_EQUAL", T_SR_EQUAL, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("T_BOOLEAN_OR", T_BOOLEAN_OR, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("T_BOOLEAN_AND", T_BOOLEAN_AND, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("T_IS_EQUAL", T_IS_EQUAL, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("T_IS_NOT_EQUAL", T_IS_NOT_EQUAL, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("T_IS_IDENTICAL", T_IS_IDENTICAL, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("T_IS_NOT_IDENTICAL", T_IS_NOT_IDENTICAL, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("T_IS_SMALLER_OR_EQUAL", T_IS_SMALLER_OR_EQUAL, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("T_IS_GREATER_OR_EQUAL", T_IS_GREATER_OR_EQUAL, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("T_SL", T_SL, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("T_SR", T_SR, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("T_INC", T_INC, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("T_DEC", T_DEC, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("T_INT_CAST", T_INT_CAST, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("T_DOUBLE_CAST", T_DOUBLE_CAST, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("T_STRING_CAST", T_STRING_CAST, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("T_ARRAY_CAST", T_ARRAY_CAST, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("T_OBJECT_CAST", T_OBJECT_CAST, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("T_BOOL_CAST", T_BOOL_CAST, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("T_UNSET_CAST", T_UNSET_CAST, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("T_NEW", T_NEW, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("T_EXIT", T_EXIT, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("T_IF", T_IF, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("T_ELSEIF", T_ELSEIF, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("T_ELSE", T_ELSE, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("T_ENDIF", T_ENDIF, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("T_LNUMBER", T_LNUMBER, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("T_DNUMBER", T_DNUMBER, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("T_STRING", T_STRING, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("T_STRING_VARNAME", T_STRING_VARNAME, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("T_VARIABLE", T_VARIABLE, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("T_NUM_STRING", T_NUM_STRING, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("T_INLINE_HTML", T_INLINE_HTML, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("T_CHARACTER", T_CHARACTER, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("T_BAD_CHARACTER", T_BAD_CHARACTER, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("T_ENCAPSED_AND_WHITESPACE", T_ENCAPSED_AND_WHITESPACE, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("T_CONSTANT_ENCAPSED_STRING", T_CONSTANT_ENCAPSED_STRING, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("T_ECHO", T_ECHO, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("T_DO", T_DO, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("T_WHILE", T_WHILE, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("T_ENDWHILE", T_ENDWHILE, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("T_FOR", T_FOR, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("T_ENDFOR", T_ENDFOR, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("T_FOREACH", T_FOREACH, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("T_ENDFOREACH", T_ENDFOREACH, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("T_DECLARE", T_DECLARE, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("T_ENDDECLARE", T_ENDDECLARE, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("T_AS", T_AS, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("T_SWITCH", T_SWITCH, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("T_ENDSWITCH", T_ENDSWITCH, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("T_CASE", T_CASE, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("T_DEFAULT", T_DEFAULT, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("T_BREAK", T_BREAK, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("T_CONTINUE", T_CONTINUE, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("T_FUNCTION", T_FUNCTION, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("T_CONST", T_CONST, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("T_RETURN", T_RETURN, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("T_USE", T_USE, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("T_GLOBAL", T_GLOBAL, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("T_STATIC", T_STATIC, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("T_VAR", T_VAR, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("T_UNSET", T_UNSET, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("T_ISSET", T_ISSET, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("T_EMPTY", T_EMPTY, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("T_CLASS", T_CLASS, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("T_EXTENDS", T_EXTENDS, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("T_INTERFACE", T_INTERFACE, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("T_IMPLEMENTS", T_IMPLEMENTS, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("T_OBJECT_OPERATOR", T_OBJECT_OPERATOR, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("T_DOUBLE_ARROW", T_DOUBLE_ARROW, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("T_LIST", T_LIST, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("T_ARRAY", T_ARRAY, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("T_CLASS_C", T_CLASS_C, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("T_FUNC_C", T_FUNC_C, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("T_METHOD_C", T_METHOD_C, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("T_LINE", T_LINE, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("T_FILE", T_FILE, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("T_COMMENT", T_COMMENT, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("T_DOC_COMMENT", T_DOC_COMMENT, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("T_OPEN_TAG", T_OPEN_TAG, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("T_OPEN_TAG_WITH_ECHO", T_OPEN_TAG_WITH_ECHO, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("T_CLOSE_TAG", T_CLOSE_TAG, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("T_WHITESPACE", T_WHITESPACE, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("T_START_HEREDOC", T_START_HEREDOC, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("T_END_HEREDOC", T_END_HEREDOC, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("T_DOLLAR_OPEN_CURLY_BRACES", T_DOLLAR_OPEN_CURLY_BRACES, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("T_CURLY_OPEN", T_CURLY_OPEN, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("T_PAAMAYIM_NEKUDOTAYIM", T_PAAMAYIM_NEKUDOTAYIM, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("T_DOUBLE_COLON", T_PAAMAYIM_NEKUDOTAYIM, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("T_ABSTRACT", T_ABSTRACT, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("T_CATCH", T_CATCH, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("T_FINAL", T_FINAL, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("T_INSTANCEOF", T_INSTANCEOF, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("T_PRIVATE", T_PRIVATE, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("T_PROTECTED", T_PROTECTED, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("T_PUBLIC", T_PUBLIC, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("T_THROW", T_THROW, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("T_TRY", T_TRY, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("T_CLONE", T_CLONE, CONST_CS | CONST_PERSISTENT);
-
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ PHP_MSHUTDOWN_FUNCTION
- */
-PHP_MSHUTDOWN_FUNCTION(tokenizer)
-{
- /* uncomment this line if you have INI entries
- UNREGISTER_INI_ENTRIES();
- */
- return SUCCESS;
-}
-/* }}} */
-
-/* Remove if there's nothing to do at request start */
-/* {{{ PHP_RINIT_FUNCTION
- */
-PHP_RINIT_FUNCTION(tokenizer)
-{
- return SUCCESS;
-}
-/* }}} */
-
-/* Remove if there's nothing to do at request end */
-/* {{{ PHP_RSHUTDOWN_FUNCTION
- */
-PHP_RSHUTDOWN_FUNCTION(tokenizer)
-{
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ PHP_MINFO_FUNCTION
- */
-PHP_MINFO_FUNCTION(tokenizer)
-{
- php_info_print_table_start();
- php_info_print_table_row(2, "Tokenizer Support", "enabled");
- php_info_print_table_end();
-
- /* Remove comments if you have entries in php.ini
- DISPLAY_INI_ENTRIES();
- */
-}
-/* }}} */
-
-static void tokenize(zval *return_value TSRMLS_DC)
-{
- zval token;
- zval *keyword;
- int token_type;
- zend_bool destroy;
-
- array_init(return_value);
-
- ZVAL_NULL(&token);
- while ((token_type = lex_scan(&token TSRMLS_CC))) {
- destroy = 1;
- switch (token_type) {
- case T_OPEN_TAG:
- case T_OPEN_TAG_WITH_ECHO:
- case T_WHITESPACE:
- case T_COMMENT:
- case T_DOC_COMMENT:
- case T_CLOSE_TAG:
- destroy = 0;
- break;
- }
-
- if (token_type >= 256) {
- MAKE_STD_ZVAL(keyword);
- array_init(keyword);
- add_next_index_long(keyword, token_type);
- if (token_type == T_END_HEREDOC) {
- add_next_index_stringl(keyword, Z_STRVAL(token), Z_STRLEN(token), 1);
- efree(Z_STRVAL(token));
- } else {
- add_next_index_stringl(keyword, zendtext, zendleng, 1);
- }
- add_next_index_zval(return_value, keyword);
- } else {
- add_next_index_stringl(return_value, zendtext, zendleng, 1);
- }
- if (destroy && Z_TYPE(token) != IS_NULL) {
- zval_dtor(&token);
- }
- ZVAL_NULL(&token);
- }
-}
-
-static char *
-get_token_type_name(int token_type)
-{
- switch (token_type) {
- case T_INCLUDE: return "T_INCLUDE";
- case T_INCLUDE_ONCE: return "T_INCLUDE_ONCE";
- case T_EVAL: return "T_EVAL";
- case T_REQUIRE: return "T_REQUIRE";
- case T_REQUIRE_ONCE: return "T_REQUIRE_ONCE";
- case T_LOGICAL_OR: return "T_LOGICAL_OR";
- case T_LOGICAL_XOR: return "T_LOGICAL_XOR";
- case T_LOGICAL_AND: return "T_LOGICAL_AND";
- case T_PRINT: return "T_PRINT";
- case T_PLUS_EQUAL: return "T_PLUS_EQUAL";
- case T_MINUS_EQUAL: return "T_MINUS_EQUAL";
- case T_MUL_EQUAL: return "T_MUL_EQUAL";
- case T_DIV_EQUAL: return "T_DIV_EQUAL";
- case T_CONCAT_EQUAL: return "T_CONCAT_EQUAL";
- case T_MOD_EQUAL: return "T_MOD_EQUAL";
- case T_AND_EQUAL: return "T_AND_EQUAL";
- case T_OR_EQUAL: return "T_OR_EQUAL";
- case T_XOR_EQUAL: return "T_XOR_EQUAL";
- case T_SL_EQUAL: return "T_SL_EQUAL";
- case T_SR_EQUAL: return "T_SR_EQUAL";
- case T_BOOLEAN_OR: return "T_BOOLEAN_OR";
- case T_BOOLEAN_AND: return "T_BOOLEAN_AND";
- case T_IS_EQUAL: return "T_IS_EQUAL";
- case T_IS_NOT_EQUAL: return "T_IS_NOT_EQUAL";
- case T_IS_IDENTICAL: return "T_IS_IDENTICAL";
- case T_IS_NOT_IDENTICAL: return "T_IS_NOT_IDENTICAL";
- case T_IS_SMALLER_OR_EQUAL: return "T_IS_SMALLER_OR_EQUAL";
- case T_IS_GREATER_OR_EQUAL: return "T_IS_GREATER_OR_EQUAL";
- case T_SL: return "T_SL";
- case T_SR: return "T_SR";
- case T_INC: return "T_INC";
- case T_DEC: return "T_DEC";
- case T_INT_CAST: return "T_INT_CAST";
- case T_DOUBLE_CAST: return "T_DOUBLE_CAST";
- case T_STRING_CAST: return "T_STRING_CAST";
- case T_ARRAY_CAST: return "T_ARRAY_CAST";
- case T_OBJECT_CAST: return "T_OBJECT_CAST";
- case T_BOOL_CAST: return "T_BOOL_CAST";
- case T_UNSET_CAST: return "T_UNSET_CAST";
- case T_NEW: return "T_NEW";
- case T_EXIT: return "T_EXIT";
- case T_IF: return "T_IF";
- case T_ELSEIF: return "T_ELSEIF";
- case T_ELSE: return "T_ELSE";
- case T_ENDIF: return "T_ENDIF";
- case T_LNUMBER: return "T_LNUMBER";
- case T_DNUMBER: return "T_DNUMBER";
- case T_STRING: return "T_STRING";
- case T_STRING_VARNAME: return "T_STRING_VARNAME";
- case T_VARIABLE: return "T_VARIABLE";
- case T_NUM_STRING: return "T_NUM_STRING";
- case T_INLINE_HTML: return "T_INLINE_HTML";
- case T_CHARACTER: return "T_CHARACTER";
- case T_BAD_CHARACTER: return "T_BAD_CHARACTER";
- case T_ENCAPSED_AND_WHITESPACE: return "T_ENCAPSED_AND_WHITESPACE";
- case T_CONSTANT_ENCAPSED_STRING: return "T_CONSTANT_ENCAPSED_STRING";
- case T_ECHO: return "T_ECHO";
- case T_DO: return "T_DO";
- case T_WHILE: return "T_WHILE";
- case T_ENDWHILE: return "T_ENDWHILE";
- case T_FOR: return "T_FOR";
- case T_ENDFOR: return "T_ENDFOR";
- case T_FOREACH: return "T_FOREACH";
- case T_ENDFOREACH: return "T_ENDFOREACH";
- case T_DECLARE: return "T_DECLARE";
- case T_ENDDECLARE: return "T_ENDDECLARE";
- case T_AS: return "T_AS";
- case T_SWITCH: return "T_SWITCH";
- case T_ENDSWITCH: return "T_ENDSWITCH";
- case T_CASE: return "T_CASE";
- case T_DEFAULT: return "T_DEFAULT";
- case T_BREAK: return "T_BREAK";
- case T_CONTINUE: return "T_CONTINUE";
- case T_FUNCTION: return "T_FUNCTION";
- case T_CONST: return "T_CONST";
- case T_RETURN: return "T_RETURN";
- case T_USE: return "T_USE";
- case T_GLOBAL: return "T_GLOBAL";
- case T_STATIC: return "T_STATIC";
- case T_VAR: return "T_VAR";
- case T_UNSET: return "T_UNSET";
- case T_ISSET: return "T_ISSET";
- case T_EMPTY: return "T_EMPTY";
- case T_CLASS: return "T_CLASS";
- case T_EXTENDS: return "T_EXTENDS";
- case T_INTERFACE: return "T_INTERFACE";
- case T_IMPLEMENTS: return "T_IMPLEMENTS";
- case T_OBJECT_OPERATOR: return "T_OBJECT_OPERATOR";
- case T_DOUBLE_ARROW: return "T_DOUBLE_ARROW";
- case T_LIST: return "T_LIST";
- case T_ARRAY: return "T_ARRAY";
- case T_CLASS_C: return "T_CLASS_C";
- case T_FUNC_C: return "T_FUNC_C";
- case T_METHOD_C: return "T_METHOD_C";
- case T_LINE: return "T_LINE";
- case T_FILE: return "T_FILE";
- case T_COMMENT: return "T_COMMENT";
- case T_OPEN_TAG: return "T_OPEN_TAG";
- case T_OPEN_TAG_WITH_ECHO: return "T_OPEN_TAG_WITH_ECHO";
- case T_CLOSE_TAG: return "T_CLOSE_TAG";
- case T_WHITESPACE: return "T_WHITESPACE";
- case T_START_HEREDOC: return "T_START_HEREDOC";
- case T_END_HEREDOC: return "T_END_HEREDOC";
- case T_DOLLAR_OPEN_CURLY_BRACES: return "T_DOLLAR_OPEN_CURLY_BRACES";
- case T_CURLY_OPEN: return "T_CURLY_OPEN";
- case T_PAAMAYIM_NEKUDOTAYIM: return "T_DOUBLE_COLON";
- case T_DOC_COMMENT: return "T_DOC_COMMENT";
- case T_ABSTRACT: return "T_ABSTRACT";
- case T_CATCH: return "T_CATCH";
- case T_FINAL: return "T_FINAL";
- case T_INSTANCEOF: return "T_INSTANCEOF";
- case T_PRIVATE: return "T_PRIVATE";
- case T_PROTECTED: return "T_PROTECTED";
- case T_PUBLIC: return "T_PUBLIC";
- case T_THROW: return "T_THROW";
- case T_TRY: return "T_TRY";
- case T_CLONE: return "T_CLONE";
- }
- return "UNKNOWN";
-}
-
-/* {{{ proto array token_get_all(string source)
- */
-PHP_FUNCTION(token_get_all)
-{
- char *source = NULL;
- int argc = ZEND_NUM_ARGS();
- int source_len;
- zval source_z;
- zend_lex_state original_lex_state;
-
- if (zend_parse_parameters(argc TSRMLS_CC, "s", &source, &source_len) == FAILURE)
- return;
-
- ZVAL_STRINGL(&source_z, source, source_len, 1);
- zend_save_lexical_state(&original_lex_state TSRMLS_CC);
-
- if (zend_prepare_string_for_scanning(&source_z, "" TSRMLS_CC) == FAILURE) {
- RETURN_EMPTY_STRING();
- }
-
- tokenize(return_value TSRMLS_CC);
-
- zend_restore_lexical_state(&original_lex_state TSRMLS_CC);
- zval_dtor(&source_z);
-}
-/* }}} */
-
-/* {{{ proto string token_name(int type)
- */
-PHP_FUNCTION(token_name)
-{
- int argc = ZEND_NUM_ARGS();
- long type;
-
- if (zend_parse_parameters(argc TSRMLS_CC, "l", &type) == FAILURE) {
- return;
- }
- RETVAL_STRING(get_token_type_name(type), 1);
-}
-/* }}} */
-
-/*
- * 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/tokenizer/tokenizer.dsp b/ext/tokenizer/tokenizer.dsp
deleted file mode 100644
index 9844574a8a..0000000000
--- a/ext/tokenizer/tokenizer.dsp
+++ /dev/null
@@ -1,108 +0,0 @@
-# Microsoft Developer Studio Project File - Name="tokenizer" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=tokenizer - Win32 Debug_TS
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "tokenizer.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "tokenizer.mak" CFG="tokenizer - Win32 Debug_TS"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "tokenizer - Win32 Release_TS" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "tokenizer - Win32 Debug_TS" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "tokenizer - Win32 Release_TS"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release_TS"
-# PROP BASE Intermediate_Dir "Release_TS"
-# PROP BASE Ignore_Export_Lib 0
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release_TS"
-# PROP Intermediate_Dir "Release_TS"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MD /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "TOKENIZER_EXPORTS" /YX /FD /c
-# ADD CPP /nologo /MD /W3 /GX /O2 /I "..\.." /I "..\..\main" /I "..\..\Zend" /I "..\..\TSRM" /D ZEND_DEBUG=0 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "PHP_EXPORTS" /D "COMPILE_DL_TOKENIZER" /D ZTS=1 /D "ZEND_WIN32" /D "PHP_WIN32" /D HAVE_TOKENIZER=1 /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x407 /d "NDEBUG"
-# ADD RSC /l 0x407 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386
-# ADD LINK32 php5ts.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 /out:"..\..\Release_TS/php_tokenizer.dll" /libpath:"..\..\Release_TS" /libpath:"..\..\Release_TS_Inline"
-
-!ELSEIF "$(CFG)" == "tokenizer - Win32 Debug_TS"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug_TS"
-# PROP BASE Intermediate_Dir "Debug_TS"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug_TS"
-# PROP Intermediate_Dir "Debug_TS"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "TOKENIZER_EXPORTS" /YX /FD /GZ /c
-# ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "..\.." /I "..\..\main" /I "..\..\Zend" /I "..\..\TSRM" /D ZEND_DEBUG=1 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "PHP_EXPORTS" /D "COMPILE_DL_TOKENIZER" /D ZTS=1 /D "ZEND_WIN32" /D "PHP_WIN32" /D HAVE_TOKENIZER=1 /YX /FD /GZ /c
-# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x407 /d "_DEBUG"
-# ADD RSC /l 0x407 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 php5ts_debug.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /out:"..\..\Debug_TS/php_tokenizer.dll" /pdbtype:sept /libpath:"..\..\Debug_TS"
-
-!ENDIF
-
-# Begin Target
-
-# Name "tokenizer - Win32 Release_TS"
-# Name "tokenizer - Win32 Debug_TS"
-# Begin Group "Source Files"
-
-# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
-# Begin Source File
-
-SOURCE=.\tokenizer.c
-# End Source File
-# End Group
-# Begin Group "Header Files"
-
-# PROP Default_Filter "h;hpp;hxx;hm;inl"
-# Begin Source File
-
-SOURCE=.\php_tokenizer.h
-# End Source File
-# End Group
-# End Target
-# End Project
diff --git a/ext/tokenizer/tokenizer.php b/ext/tokenizer/tokenizer.php
deleted file mode 100644
index c13063c628..0000000000
--- a/ext/tokenizer/tokenizer.php
+++ /dev/null
@@ -1,35 +0,0 @@
-<?php
-
-if(!extension_loaded('tokenizer')) {
- dl('tokenizer.so');
-}
-
-$fp = fopen('php://stdin', 'r');
-while (!feof($fp)) {
- $content .= fread($fp, 4096);
-}
-fclose($fp);
-
-$tokens = token_get_all($content);
-
-$count = count($tokens);
-$state = 0;
-for ($i = 0; $i < $count; $i++) {
- $token = $tokens[$i];
- if (is_array($token)) {
- if ($state == 1 && $token[0] == T_STRING) {
- $token[1] = preg_replace('!([a-z])([A-Z])!e', '"$1_".strtolower("$2")', $token[1]);
- $state = 0;
- } else if ($token[0] == T_FUNCTION) {
- $state = 1;
- }
- $chunk = $token[1];
- } else {
- $chunk = $token;
- }
- $output .= $chunk;
-}
-
-print $output;
-
-?>
diff --git a/ext/w32api/CREDITS b/ext/w32api/CREDITS
deleted file mode 100644
index 8d55cfc6b2..0000000000
--- a/ext/w32api/CREDITS
+++ /dev/null
@@ -1,2 +0,0 @@
-W32API
-James Moore
diff --git a/ext/w32api/EXPERIMENTAL b/ext/w32api/EXPERIMENTAL
deleted file mode 100644
index e69de29bb2..0000000000
--- a/ext/w32api/EXPERIMENTAL
+++ /dev/null
diff --git a/ext/w32api/README b/ext/w32api/README
deleted file mode 100644
index 66a65ee747..0000000000
--- a/ext/w32api/README
+++ /dev/null
@@ -1,5 +0,0 @@
-Win 32 API Extension
-====================
-/* $Revision$ */
-
-See notes in w32api.c \ No newline at end of file
diff --git a/ext/w32api/TODO b/ext/w32api/TODO
deleted file mode 100644
index 771ad3b384..0000000000
--- a/ext/w32api/TODO
+++ /dev/null
@@ -1,3 +0,0 @@
- TODO
- ====
-.... LOTS .... \ No newline at end of file
diff --git a/ext/w32api/package.xml b/ext/w32api/package.xml
deleted file mode 100644
index ddcbdb022a..0000000000
--- a/ext/w32api/package.xml
+++ /dev/null
@@ -1,47 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1" ?>
-<!DOCTYPE package SYSTEM "../pear/package.dtd">
-<package>
- <name>w32api</name>
- <summary>Win32 and DLL API interface functions</summary>
- <maintainers>
- <maintainer>
- <user>jmoore</user>
- <name>James Moore</name>
- <email>jmoore@php.net</email>
- <role>lead</role>
- </maintainer>
- </maintainers>
- <description>
-This extension is a generic extension API to DLLs.
-This was originally written to allow access to the Win32 API from PHP,
-although you can also access other functions exported via other DLLs.
- </description>
- <license>PHP</license>
- <release>
- <state>beta</state>
- <version>5.0.0rc1</version>
- <date>2004-03-19</date>
- <notes>
-package.xml added to support intallation using pear installer
- </notes>
- <filelist>
- <file role="doc" name="CREDITS"/>
- <file role="doc" name="README"/>
- <file role="doc" name="TODO"/>
- <file role="src" name="w32api.dsp"/>
- <file role="src" name="w32api.c"/>
- <file role="src" name="w32api_function_definition_parser.y"/>
- <file role="src" name="w32api_function_definition_scanner.l"/>
- <file role="src" name="w32api_type_definition_parser.y"/>
- <file role="src" name="w32api_type_definition_scanner.l"/>
- <file role="src" name="php_w32api.h"/>
- </filelist>
- <deps>
- <dep type="php" rel="ge" version="5" />
- <!-- doesn't work yet <dep type="os" rel="has" name="windows"/> -->
- </deps>
- </release>
-</package>
-<!--
-vim:et:ts=1:sw=1
--->
diff --git a/ext/w32api/php_w32api.h b/ext/w32api/php_w32api.h
deleted file mode 100644
index bc844b54ea..0000000000
--- a/ext/w32api/php_w32api.h
+++ /dev/null
@@ -1,345 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP version 4.0 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2001 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. |
- +----------------------------------------------------------------------+
- | Authors: James Moore <jmoore@php.net> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#if HAVE_W32API
-
-#ifndef PHP_W32API_H
-#define PHP_W32API_H
-
-/* ================================================================================================
- * Type Definitions
- * ================================================================================================
- */
-typedef struct _w32api_lib_handle w32api_lib_handle;
-typedef struct _w32api_func_handle w32api_func_handle;
-typedef struct _w32api_type_handle w32api_type_handle;
-typedef struct _w32api_type_instance w32api_type_instance;
-typedef struct _arguments arguments;
-typedef struct _argument argument;
-typedef union _w32api_parser_function_definition_union w32api_parser_function_definition_union;
-typedef struct _w32api_func_handle_ptr w32api_func_handle_ptr;
-typedef struct _w32api_type_handle_ptr w32api_type_handle_ptr;
-typedef union _w32api_parser_type_definition_union w32api_parser_type_definition_union;
-typedef struct _member member;
-typedef struct _members members;
-typedef union _w32api_result w32api_result;
-typedef struct _w32api_dynamic_param w32api_dynamic_param;
-
-struct _w32api_lib_handle
-{
- HINSTANCE handle; /* Handle for our library */
- char *library_name; /* name of our library */
- int ref_count; /* reference counter */
-};
-
-struct _w32api_func_handle_ptr /* Temporary structure */
-{ /* To work around problems */
- w32api_func_handle *hnd; /* at 3am.. Ill sort it out */
-}; /* When I can think straight */
-
-struct _w32api_type_handle_ptr /* Ditto.. should really combine */
-{ /* These two into a union at least */
- w32api_type_handle *hnd;
-};
-
-struct _w32api_type_handle
-{
- char *type_name; /* Name of our type */
- long size; /* Size of type */
- members *member_list; /* Pointer List of members */
- long member_count; /* Number of members */
-};
-
-struct _w32api_type_instance
-{
- w32api_type_handle *type; /* pointer to w32api_type_handle */
- zval **values; /* First element of an array of ptr's to zvals */
-};
-
-struct _w32api_func_handle
-{
- FARPROC handle; /* Handle for our function */
- w32api_lib_handle *lib; /* Pointer to the library handle */
- char *function_name; /* Name of our function (Alias is store if supplied) */
- long return_type_id; /* ID of return type */
- char *return_type_name; /* Name of return type (if W32API_COMPLEX) */
- long flags; /* Flags for function */
- arguments *argument_list; /* Pointer List of arguments */
-};
-
-struct _arguments
-{
- argument *arg; /* Current Argument */
- arguments *next_arg; /* Next Arugment */
- arguments *prev_arg; /* Previous Argument */
-};
-
-struct _argument
-{
- long type_id; /* ID of the return type */
- char *type_name; /* Name of type (if W32API_COMPLEX) */
- char *argument_name; /* Name of argument, currently not used */
- long flags; /* Currently used for byref/byval */
-};
-
-struct _member
-{
- char *member_name;
- long member_type_id;
- char *member_type_name;
- long flags;
- long offset;
-};
-
-struct _members
-{
- member *member;
- members *next_member;
- members *prev_member;
-};
-
-union _w32api_result
-{
- int ival;
- unsigned long lval;
- DWORD dwval;
- void *ptr;
- float fval;
- double dval;
- __int64 i64val;
-};
-
-struct _w32api_dynamic_param
-{
- long flags;
- int width;
- union {
- unsigned long argument;
- void *argument_ptr;
- };
-};
-
-
-union _w32api_parser_function_definition_union
-{
- char *s;
- arguments *arg;
-};
-
-union _w32api_parser_type_definition_union
-{
- char *s;
- members *type;
-};
-
-/* ================================================================================================
- * Constants
- * ================================================================================================
- */
-
-/* Recognised Base types */
-#define W32API_UNKNOWN -1
-#define W32API_NULL 1
-#define W32API_INT 2
-#define W32API_LONG 3
-#define W32API_DOUBLE 4
-#define W32API_FLOAT 5
-#define W32API_STRING 6
-#define W32API_BYTE 7
-#define W32API_BOOL 8
-#define W32API_COMPLEX 9
-
-/* Function Flags */
-#define W32API_ARGPTR (1<<0)
-#define W32API_BORLAND (1<<1)
-#define W32API_CDECL (1<<2)
-#define W32API_REAL4 (1<<3)
-#define W32API_REAL8 (1<<4)
-
-/* ================================================================================================
- * Utility Macros
- * ================================================================================================
- */
-#define PROP_SET_ARGS zend_property_reference *property_reference, pval *value
-#define PROP_GET_ARGS zend_property_reference *property_reference
-
-#define W32API_PROP_SET_FUNCTION_N(class_name) w32api_set_property_handler_##class_name
-#define W32API_PROP_GET_FUNCTION_N(class_name) w32api_get_property_handler_##class_name
-#define W32API_CALL_FUNCTION_N(class_name) w32api_call_handler_##class_name
-
-#define W32API_PROP_SET_FUNCTION(class_name) PHP_W32API_API int W32API_PROP_SET_FUNCTION_N(class_name)(PROP_SET_ARGS)
-#define W32API_PROP_GET_FUNCTION(class_name) PHP_W32API_API zval W32API_PROP_GET_FUNCTION_N(class_name)(PROP_GET_ARGS)
-#define W32API_CALL_FUNCITON(class_name) PHP_W32API_API void W32API_CALL_FUNCTION_N(class_name)(INTERNAL_FUNCTION_PARAMETERS, zend_property_reference *property_reference)
-
-#define W32API_CLASS_FUNCTION(class_name, function_name) PHP_FUNCTION(##class_name##function_name)
-#define W32API_CLASS_FN(class_name, function_name) PHP_FN(##class_name##function_name)
-#define W32API_CLASS_FE(class_name, function_name, function_args) {#function_name, W32API_CLASS_FN(class_name, function_name), function_args},
-
-/* ================================================================================================
- * Module exports, Global Variables and General Definitions
- * ================================================================================================
- */
-extern zend_module_entry w32api_module_entry;
-#define phpext_w32api_ptr &w32api_module_entry;
-
-#define PHP_W32API_API __declspec(dllexport)
-
-#ifdef ZTS
-#include "TSRM.h"
-#endif /* ZTS */
-
-ZEND_BEGIN_MODULE_GLOBALS(w32api)
- zend_class_entry *win32_ce; /* The class entry for our win32 class */
- zend_class_entry *type_ce; /* The class entry for our type class */
- HashTable *funcs; /* Functions we registered */
- HashTable *libraries; /* Libraries we load using LoadLibrary */
- HashTable *types; /* Types we have registed with us */
- HashTable *callbacks; /* Callbacks we have registered with us */
- long le_type_instance; /* Resource hanlde for runtime instances */
-ZEND_END_MODULE_GLOBALS(w32api)
-
-ZEND_DECLARE_MODULE_GLOBALS(w32api)
-
-#ifdef ZTS
-#define WG(v) TSRMG(w32api_globals_id, zend_w32api_globals *, v)
-#else
-#define WG(v) (w32api_globals.v)
-#endif
-
-
-/* ================================================================================================
- * Startup, Shutdown and Info Functions
- * ================================================================================================
- */
-PHP_MINIT_FUNCTION(w32api);
-PHP_MSHUTDOWN_FUNCTION(w32api);
-PHP_RINIT_FUNCTION(w32api);
-PHP_RSHUTDOWN_FUNCTION(w32api);
-PHP_MINFO_FUNCTION(w32api);
-static void php_w32api_init_globals(zend_w32api_globals *w32api_globals);
-static void php_w32api_hash_lib_dtor(void *data);
-static void php_w32api_hash_func_dtor(void *data);
-static void php_w32api_hash_callback_dtor(void *data);
-static void php_w32api_hash_type_dtor(void *data);
-static void w32api_type_instance_dtor(zend_rsrc_list_entry *rsrc TSRMLS_DC);
-
-/* ================================================================================================
- * Win32 Class Functions
- * ================================================================================================
- */
-int win32_class_init(TSRMLS_D);
-int win32_class_rshutdown(TSRMLS_D);
-W32API_CLASS_FUNCTION(win32, registerfunction);
-W32API_CLASS_FUNCTION(win32, unregisterfunction);
-W32API_CLASS_FUNCTION(win32, registercallback);
-W32API_CLASS_FUNCTION(win32, definetype);
-W32API_CLASS_FUNCTION(win32, gettypesize);
-W32API_CLASS_FUNCTION(win32, inittype);
-W32API_CLASS_FUNCTION(win32, decref);
-W32API_CLASS_FUNCTION(win32, invokefunction);
-
-
-/* ================================================================================================
- * Type Class Functions
- * ================================================================================================
- */
-int type_class_init(TSRMLS_DC);
-
-W32API_CLASS_FUNCTION(type, clone);
-W32API_PROP_SET_FUNCTION(type);
-W32API_PROP_GET_FUNCTION(type);
-
-/* ================================================================================================
- * Utility Functions
- * ================================================================================================
- */
-
-static int php_w32api_load_function (char *definition, int definition_len, int flags TSRMLS_DC);
-static void php_w32api_unload_function (w32api_func_handle **fh TSRMLS_DC);
-
-static int php_w32api_load_library (char *library_name, w32api_lib_handle **lh TSRMLS_DC);
-static void php_w32api_unload_library (w32api_lib_handle *lh, int flags TSRMLS_DC);
-
-static int php_w32api_register_callback(char *function_definition, int function_definition_len TSRMLS_DC);
-
-static void php_w32api_free_arguments(arguments *argument_list);
-static void php_w32api_free_members(members *member_list);
-
-static int php_w32api_get_type_id_from_name(char *type);
-static unsigned char *php_w32api_do_arg_types(arguments **arguments);
-
-void php_w32api_marshall_zval_to_c(argument *arg, w32api_dynamic_param *dp, zval *pzval TSRMLS_DC);
-
-static void php_w32api_init_type(w32api_type_handle *th, zval *obj TSRMLS_DC);
-static int php_w32api_do_prop_get(zval *object, zval *return_value, zend_llist_element **element TSRMLS_DC);
-static int php_w32api_do_prop_set(zval *object, zval *value, zend_llist_element **element TSRMLS_DC);
-static void *php_w32api_complex_marshall_zval_to_c(zval *pzval, int *width, void *data TSRMLS_DC);
-
-/* ================================================================================================
- * Parser & Scanner Functions
- * ================================================================================================
- */
-#define w32api_parser_load_alias_function w32api_parser_load_function_ex
-#define w32api_parser_load_function(return_type, function_name, arguments, library_name) w32api_parser_load_function_ex (return_type, function_name, NULL, arguments, library_name)
-#define w32api_parser_make_argument_byref(arg_type, arg_name) w32api_parser_make_argument(arg_type, arg_name, BYREF_FORCE)
-#define w32api_parser_make_argument_byval(arg_type, arg_name) w32api_parser_make_argument(arg_type, arg_name, BYREF_NONE)
-
-#define w32api_parser_type_make_byref_value(member_name, member_type) w32api_parser_type_make_value(member_name, member_type, BYREF_FORCE)
-#define w32api_parser_type_make_byval_value(member_name, member_type) w32api_parser_type_make_value(member_name, member_type, BYREF_NONE)
-
-w32api_func_handle *w32api_parser_load_function_ex(char *return_type, char *function_name, char *alias_name, arguments *argument_list, char *library_name);
-arguments *w32api_parser_make_argument(char *arg_type, char *arg_name, int byref);
-arguments *w32api_parser_join_arguments(arguments *lval, arguments *rval);
-int w32api_function_definition_error(char *s);
-
-w32api_type_handle *w32api_parser_register_type(char *type_name, members *member_list);
-members *w32api_parser_type_make_value(char *member_name, char *type_name, long flags);
-members *w32api_parser_type_join_values(members *lval, members *rval);
-int w32api_type_definition_error(char *s);
-
-struct yy_buffer_state *w32api_function_definition_scan_bytes(char *bytes, int len); /* Definied in w32api_function_definition_scanner.c */
-int w32api_function_definition_parse(void *fh); /* Definied in w32api_function_definition_parser.c */
-
-struct yy_buffer_state *w32api_type_definition_scan_bytes(char *bytes, int len); /* Definied in w32api_type_definition_scanner.c */
-int w32api_type_definition_parse(void *th); /* Definied in w32api_type_definition_parser.c */
-
-
-/* ================================================================================================
- * Various Debugging Functions
- * ================================================================================================
- */
-#ifndef NDEBUG
-W32API_CLASS_FUNCTION(win32, dump_library_hash);
-W32API_CLASS_FUNCTION(win32, dump_function_hash);
-W32API_CLASS_FUNCTION(win32, dump_callback_hash);
-W32API_CLASS_FUNCTION(win32, dump_type_hash);
-
-int php_w32api_dump_library_hash_cb(void *pData TSRMLS_DC);
-int php_w32api_dump_function_hash_cb(void *pData TSRMLS_DC);
-int php_w32api_dump_callback_hash_cb(void *pData TSRMLS_DC);
-int php_w32api_dump_type_hash_cb(void *pData TSRMLS_DC);
-
-void php_w32api_print_arguments(arguments *argument_list);
-void php_w32api_print_members(members *member_list);
-
-#endif /* ifndef NDEBUG */
-
-#endif /* ifndef PHP_W32API_H */
-#endif /* if HAVE_W32API */ \ No newline at end of file
diff --git a/ext/w32api/w32api.c b/ext/w32api/w32api.c
deleted file mode 100644
index b05b5449b7..0000000000
--- a/ext/w32api/w32api.c
+++ /dev/null
@@ -1,2293 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP version 4.0 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2001 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. |
- +----------------------------------------------------------------------+
- | Authors: James Moore <jmoore@php.net> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-/*
- * Win32 API Extension for PHP
- * ===========================
- *
- * This extension allows PHP Developers to access the underlying functions in the
- * Win32 API Dll's in a generic way, it provides a mechanism for the user to load
- * and register functions from dll's and then to call them, it also implements a
- * generic callback handler which allows the user to pass a pointer to one of
- * their PHP functions to act as a callback from the C function enabling the PHP
- * programmer to handle callbacks in PHP seemlessly. Finally the extension marshalls
- * from PHP types (Zvals) to C structures seemlessly once it has been told about them
- *
- * I would like to thank Ton Plooy for his article on a similar subject which gave me
- * the initial idea for a generic dll caller and some good pointers on how to actaully
- * implement it.
- */
-
-/*
- * Interface the PHP Programmer Sees
- * ==================================
- *
- * To keep namespaces tidy the module will introduce two classes, the first is
- * the win32 class which has several functions to load and register functions from
- * the underlying DLL's. The Win32 class also has functions for informing the
- * module about the C types we will be using so it can marshall and demarshall to and from
- * the C Interface. . Our second class is the Type class. The type class is our container
- * for complex C types which are registered and initiated using our win32 class functions.
- *
- * Win32 Class Functions
- * =====================
- *
- * static int Win32::RegisterFunction( string Definition, long flags )
- * -------------------------------------------------------------------
- *
- * This function is used for registering a dll function with the module. The Definition should take
- * the form:
- * Definition: <return_type> <function_name> [Alias <alias_name] (<argument_list>) From <some_dll>
- *
- * return_type :- Either a simple type or a type that has
- * been registered with the module
- *
- * function_name :- The name of the function within the dll, if this is not found
- * we append an A to the function name to check for a ASCII version,
- * if this is not found we fail.
- *
- * alias_name :- If this is provided then we register the function under this name
- * in the PHP Symbol table.
- *
- * argument_list :- A comma seperated list of arguments in the form <argument_type>
- * [&]argument_name.
- *
- * argument_type :- Argument type is a type known to the module
- *
- * argument_name :- This is not currently used although if it is proceeded by an
- * & (Ampersand) then a pointer is passed rather than the value.
- *
- * some_dll :- This is the name of the dll to find the function in.
- *
- * On success the function returns TRUE, on error FALSE, The function issues appropriate errors
- * to allow the PHP Progammer to catch individual errors.
- *
- * static int Win32::UnregisterFunction(string FunctionName)
- * ---------------------------------------------------------
- *
- * Allows the PHP programmer to force a function to be unregistered saving on memory resources. Can
- * be useful in long running scripts.
- *
- * Returns TRUE on success, FALSE on error.
- *
- *
- * static int Win32::DefineType( string Definition )
- * -------------------------------------------------
- *
- * This function is used to register a C-Type which will be used when calling a function, it only
- * supports the equivilent of C structures at this time so if you need to use a union you must use the
- * largest member of that union as the type in the struct for this to work.
- *
- * The definition string takes the form:
- *
- * Definition: <type_name> { <type_list> }
- *
- * type_name :- A unique name for this type.
- *
- * type_list :- Takes for form <member_type> [&]<member_name>
- *
- * member_type :- The type of this member.
- *
- * member_name :- The name for this member, if an & (ampersand) preceeds
- * the name it will be stripped and a pointer rather than
- * the value will be used.
- *
- * Returns TRUE on success, FALSE on error.
- *
- *
- * static int Win32::GetTypeSize(mixed TypeHandle)
- * -----------------------------------------------
- *
- * This function returns the size of a type registered with the module. The parameter should
- * either be the name of the type or an instance of it. The Function returns FALSE on error
- * ***USE === to distinguish between this and a size of 0*** or the size of the type on success.
- *
- *
- * static mixed Win32::InitType(String TypeName)
- * ---------------------------------------------
- *
- * Creates an instance of the type so that the PHP Programmer can assign values and then pass
- * it to a C Function. Returns NULL on error.
- *
- * static int Win32::DecRef(mixed var)
- * -----------------------------------
- * Decreases the reference count on a variable only if we incremented the refcount when passing
- * the variable to a C function.
- *
- * TYPE Functions
- * ==============
- *
- * mixed Type::Type(String TypeName)
- * ---------------------------------
- * See Win32::InitType,
- *
- * mixed Type::Clone()
- * -------------------
- *
- * Allows you to make an exact copy of the class, this should be used rather than the &= syntax
- * Due to the nesting within classes. This function WILL become redundant in PHP 5.
- */
-
-/*
- * Implementation Details
- * ======================
- *
- * This module will only work on the Intel platform.
- *
- * We basically want to set up this structure:
- *
- * +-----------+
- * | PHP |
- * +-----------+
- * Call | /|\
- * \|/ | call_user_function_ex
- * +------------------------+
- * | Win 32 API Extension |
- * +------------------------+
- * | /|\
- * \|/ | Callback
- * +-------------+
- * | C-Space |
- * +-------------+
- *
- * Win32 Needs to then Marshall between zvals and
- *
- * Marshalling from ZVAL's to C Types.
- * -----------------------------------
- * For simple types this is very easy as we either just copy the value or a pointer
- * to it onto the stack, if we copy a pointer then we must increase the refcount on
- * the zval and must also make sure we get it passed to us by reference.
- *
- * The problem here is when to dereference the zval again as we may get into the following
- * situation
- *
- * We call somefunction giving it an argument by reference (IE we pass a pointer to the value union of a zval)
- * we must increase the ref count on the zval to avoid the possibility of a GPE (IE the zval is dtord and then
- * the function uses the zval in some sort of callback we could end up with a GPE)
- * But if we increase the zval's refcount without dtoring it anywhere it would cause a mem leak.
- *
- * Therefore we probably need to keep a local reference table so we can either allow the user to call
- * Win32::DecRef($var) to decrement the reference count (We would want to keep a local table to avoid anyone
- * breaking Zend's handling off it as well..))
- *
- * Then at MSHUTDOWN we free this hashtable decrementing the refcount as needed..
- *
- * Complex types are less clear cut on how to handle them. My prefered method is to always
- * keep these in a C Format but to allow access to these via a wrapper object which calculates
- * the offset of the data to allow access to it from PHP. This also allows us to do no conversion
- * when dealing with C types coming to us allowing us to deal with pointers in a more clear way.
- *
- *
- * Enabling C Code to call PHP Code in a generic fashion
- * -----------------------------------------------------
- * What we do here is we use _declspec(naked) to tell the compiler we will handle all stack operations
- * ourself, we also then create (At runtime) function prologues which we place on the heap which push
- * extra arguments onto the stack which tell us which php_function is being called back and the callback type
- * which has been registered with us.
- *
- */
-
-#if HAVE_W32API
-
-#include <stdio.h>
-#include <stdlib.h>
-
-#include "php.h"
-#include "php_ini.h"
-#include "ext/standard/info.h"
-#include "ext/standard/php_string.h"
-#include "php_w32api.h"
-
-
-/* =====================================================================================================
- * PHP Module Startup, Shutdown & Info Code
- * =====================================================================================================
- */
-
-#ifdef COMPILE_DL_W32API
-ZEND_GET_MODULE(w32api)
-#endif
-
-/* {{{ w32api_module_entry
- */
-zend_module_entry w32api_module_entry = {
- STANDARD_MODULE_HEADER,
- "Win32 API",
- NULL, /* We define no global functions */
- PHP_MINIT(w32api),
- PHP_MSHUTDOWN(w32api),
- PHP_RINIT(w32api),
- PHP_RSHUTDOWN(w32api),
- PHP_MINFO(w32api),
- "0.2",
- STANDARD_MODULE_PROPERTIES
-};
-/* }}} */
-
-
-/* {{{ PHP_MINIT_FUNCTION
- */
-PHP_MINIT_FUNCTION(w32api)
-{
- /* Setup out module globals */
- ZEND_INIT_MODULE_GLOBALS(w32api, php_w32api_init_globals, NULL);
-
-
- if(win32_class_init(TSRMLS_C) != SUCCESS)
- {
- return FAILURE;
- }
-
- if(type_class_init(TSRMLS_C) != SUCCESS)
- {
- return FAILURE;
- }
-
- WG(le_type_instance) = zend_register_list_destructors_ex(w32api_type_instance_dtor, NULL, "Type Instance", module_number);
-
- /* Function Flags */
- REGISTER_LONG_CONSTANT( "W32API_ARGPTR", W32API_ARGPTR, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT( "W32API_BORLAND", W32API_BORLAND, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT( "W32API_CDECL", W32API_CDECL, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT( "W32API_REAL4", W32API_REAL4, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT( "W32API_REAL8", W32API_REAL8, CONST_CS | CONST_PERSISTENT);
-
-
- return SUCCESS;
-
-};
-/* }}} */
-
-/* {{{ PHP_MSHUTDOWN_FUNCTION
- */
-PHP_MSHUTDOWN_FUNCTION(w32api)
-{
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ PHP_RINIT_FUNCTION
- */
-PHP_RINIT_FUNCTION(w32api)
-{
- HashTable *tmp;
- WG(funcs) = WG(libraries) = WG(callbacks) = WG(types) = NULL;
-
- /* Allocate Request Specific HT's here
- */
- ALLOC_HASHTABLE(tmp);
- zend_hash_init(tmp, 1, NULL, php_w32api_hash_func_dtor, 1);
- WG(funcs) = tmp;
-
- ALLOC_HASHTABLE(tmp);
- zend_hash_init(tmp, 1, NULL, php_w32api_hash_lib_dtor, 1);
- WG(libraries) = tmp;
-
- ALLOC_HASHTABLE(tmp);
- zend_hash_init(tmp, 1, NULL, php_w32api_hash_callback_dtor, 1);
- WG(callbacks) = tmp;
-
- ALLOC_HASHTABLE(tmp);
- zend_hash_init(tmp, 1, NULL, php_w32api_hash_type_dtor, 1);
- WG(types) = tmp;
-
- return SUCCESS;
-
-};
-/* }}} */
-
-/* {{{ PHP_RSHUTDOWN_FUNCTION
- */
-PHP_RSHUTDOWN_FUNCTION(w32api)
-{
-
- win32_class_rshutdown(TSRMLS_C);
-
- /* Must be dtor'd before libraries */
- zend_hash_destroy(WG(funcs));
- FREE_HASHTABLE(WG(funcs));
-
- zend_hash_destroy(WG(libraries));
- FREE_HASHTABLE(WG(libraries)); /* we may only want to do this on MSHUTDOWN but for now it can be here */
-
- zend_hash_destroy(WG(callbacks));
- FREE_HASHTABLE(WG(callbacks));
-
- zend_hash_destroy(WG(types));
- FREE_HASHTABLE(WG(types));
-
- WG(funcs) = WG(libraries) = WG(callbacks) = WG(types) = NULL;
-
- return SUCCESS;
-}
-/* }}} */
-
-
-/* {{{ PHP_MINFO_FUNCTION
- */
-PHP_MINFO_FUNCTION(w32api)
-{
- php_info_print_table_start();
- php_info_print_table_row(2, "Win32 API Support", "enabled" );
- php_info_print_table_end();
-}
-/* }}} */
-
-/* {{{ php_w32api_init_globals
- */
-static void php_w32api_init_globals(zend_w32api_globals *w32api_globals)
-{
- w32api_globals->win32_ce = NULL;
- w32api_globals->type_ce = NULL;
- w32api_globals->funcs = NULL;
- w32api_globals->libraries = NULL;
- w32api_globals->callbacks = NULL;
- w32api_globals->types = NULL;
-}
-/* }}} */
-
-/* {{{ php_w32api_hash_lib_dtor (void *data)
- * Dtor function called when hash is destroied, unloads library
- */
-static void php_w32api_hash_lib_dtor(void *data)
-{
- w32api_lib_handle *lh; /* Library Handle */
- TSRMLS_FETCH(); /* Get thread safe stuff */
- lh = (w32api_lib_handle *)data;
-
- FreeLibrary(lh->handle);
- efree(lh->library_name);
-}
-/* }}} */
-
-/* {{{ php_w32api_hash_func_dtor (void *data)
- * Dtor function called when hash is destroied, unloads function.
- */
-static void php_w32api_hash_func_dtor(void *data)
-{
- w32api_func_handle **fh; /* Function Handle */
- TSRMLS_FETCH(); /* Get thread safe stuff */
-
- fh = (w32api_func_handle **)data;
- php_w32api_unload_function(fh TSRMLS_CC);
-}
-/* }}} */
-
-/* {{{ php_w32api_hash_callback_dtor
- * DTOR function called when hash is destroied, removes callback.
- */
-static void php_w32api_hash_callback_dtor(void *data)
-{
- w32api_func_handle **fh;
-
- fh = (w32api_func_handle **)data;
-
- php_w32api_free_arguments((*fh)->argument_list);
- efree((*fh)->function_name);
-
- if((*fh)->return_type_name)
- efree((*fh)->return_type_name);
-
- efree(*fh);
-}
-
-/* {{{ php_w32api_hash_type_dtor
- * DTOR function called when hash is destroied, removes callback.
- */
-static void php_w32api_hash_type_dtor(void *data)
-{
- w32api_type_handle **th;
-
- th = (w32api_type_handle **)data;
-
- php_w32api_free_members((*th)->member_list);
- efree((*th)->type_name);
- efree(*th);
-}
-
-static void w32api_type_instance_dtor(zend_rsrc_list_entry *rsrc TSRMLS_DC)
-{
- w32api_type_instance *ti;
- int i = 0;
-
- if(!rsrc || !rsrc->ptr)
- return;
-
- ti = (w32api_type_instance *)rsrc->ptr;
-
- for(i = 0; i < ti->type->member_count; i++)
- {
- if(ti->values[i])
- zval_ptr_dtor(&ti->values[i]);
- }
-
- efree(ti);
-
- return;
-}
-/* =====================================================================================================
- * Utility Functions
- * =====================================================================================================
- */
-
-/* {{{ php_w32api_unload_library
- * Expects two arguments, the first is the pointer to a w32api_lib_handle
- * and the second is a flag, if the flag is 0 then the reference counter is
- * use if it is one then the library is unloaded irrespective of the reference
- * counter
- */
-static void php_w32api_unload_library (w32api_lib_handle *lh, int flags TSRMLS_DC)
-{
-
- if(flags == 0)
- {
- lh->ref_count--;
- }
-
- if((flags == 1) || (lh->ref_count == 0))
- {
- /* remove outselves from the hashtable */
- zend_hash_del(WG(libraries), lh->library_name, strlen(lh->library_name) + 1);
- }
-}
-/* }}} */
-
-/* {{{ php_w32api_unload_function
- * Expects one argument, a pointer to a w32api_func_handle, unloads this
- * function from both the function table internally and the PHP function
- * table then it decrements the reference counter on the library.
- */
-static void php_w32api_unload_function (w32api_func_handle **fh TSRMLS_DC)
-{
- zend_function *function = NULL;
-
- efree((*fh)->return_type_name);
- php_w32api_free_arguments((*fh)->argument_list);
-
- /* If needs be we need to retrieve function ptr from hash table
- * and free anything we allocate when creating them at runtime (most notably
- * arg_types
- */
- if(zend_hash_find( &WG(win32_ce)->function_table,
- (*fh)->function_name,
- strlen((*fh)->function_name) + 1,
- (void **)&function) == SUCCESS)
- {
- zend_internal_function *internal_function = (zend_internal_function *)function;
- if(internal_function->arg_types)
- efree(internal_function->arg_types);
- }
-
- /* Remove from Function Table */
- zend_hash_del(&WG(win32_ce)->function_table, (*fh)->function_name, strlen((*fh)->function_name) + 1);
- php_w32api_unload_library((*fh)->lib, 0 TSRMLS_CC);
-
- efree((*fh)->function_name);
- efree(*fh);
-
-}
-/* }}} */
-
-/* {{{ php_w32api_load_function
- * Expects three arguments, The definition of the function in string format, the definitions length
- * and a pointer to a pointer to a function handle. returns SUCCESS or FAILURE.
- */
-static int php_w32api_load_function (char *definition, int definition_len, int flags TSRMLS_DC)
-{
- zend_function function;
- zend_internal_function *internal_function = (zend_internal_function *)&function;
- w32api_func_handle **fh;
- w32api_func_handle_ptr hnd;
-
- fh = emalloc(sizeof(w32api_func_handle *));
- *fh = NULL;
-
- /* Parse function */
- w32api_function_definition_scan_bytes(definition, definition_len);
- if((w32api_function_definition_parse((void *)&hnd) != 0))
- {
- *fh = hnd.hnd;
- if(*fh != NULL)
- efree(*fh);
-
- efree(fh);
- return FAILURE;
- }
- *fh = hnd.hnd;
-
- if(!*fh)
- return FAILURE;
-
-
- if(zend_hash_exists(&WG(win32_ce)->function_table, (*fh)->function_name, strlen((*fh)->function_name) + 1))
- {
- php_error_docref(NULL TSRMLS_CC, E_WARNING,
- "A function by the name %s already has been registered, cannot redefine function",
- (*fh)->function_name);
-
- /* We dont want to unload function as it already exists so lets just free it ourselves */
- php_w32api_unload_library((*fh)->lib, 0 TSRMLS_CC);
- php_w32api_free_arguments((*fh)->argument_list);
- efree((*fh)->return_type_name);
- efree((*fh)->function_name);
- efree(*fh);
- efree(fh);
-
- return FAILURE;
- }
-
- /* Insert it into our hash table */
- if(zend_hash_add( WG(funcs),
- (*fh)->function_name,
- strlen((*fh)->function_name) + 1,
- fh,
- sizeof(w32api_func_handle),
- NULL) != SUCCESS)
- {
-
- php_error_docref(NULL TSRMLS_CC, E_WARNING,
- "Loading of function %s failed: Could not insert function handle into hash",
- (*fh)->function_name);
-
- /* Tidy up */
- zend_hash_del(WG(funcs), (*fh)->function_name, strlen((*fh)->function_name) +1);
- return FAILURE;
- }
-
- /* Insert function into win32_ce's function_table */
- internal_function->type = ZEND_INTERNAL_FUNCTION;
- internal_function->handler = W32API_CLASS_FN(win32, invokefunction);
- internal_function->function_name = (*fh)->function_name;
- internal_function->arg_types = php_w32api_do_arg_types(&(*fh)->argument_list);
-
- if(zend_hash_add(&WG(win32_ce)->function_table, (*fh)->function_name,
- strlen((*fh)->function_name) + 1, &function, sizeof(zend_function), NULL) == FAILURE)
- {
- php_error_docref(NULL TSRMLS_CC, E_ERROR, "Could not register function %s into function table", (*fh)->function_name);
- zend_hash_del(WG(funcs), (*fh)->function_name, strlen((*fh)->function_name) +1);
-
- return FAILURE;;
- }
-
- if(flags)
- {
- (*fh)->flags = (*fh)->flags | flags;
- }
-
-
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ php_w32api_unload_type
- * Expects one argument, a pointer to a w32api_type_handle, unloads this
- * type.
- */
-static void php_w32api_unload_type (w32api_type_handle **th TSRMLS_DC)
-{
- php_w32api_free_members((*th)->member_list);
-
- zend_hash_del(WG(types), (*th)->type_name, strlen((*th)->type_name) + 1);
-
-}
-/* }}} */
-
-/* {{{ php_w32api_register_type
- */
-static int php_w32api_register_type(char *type_definition, int type_definition_len TSRMLS_DC)
-{
- w32api_type_handle **th;
- w32api_type_handle_ptr hnd;
-
- th = emalloc(sizeof(w32api_type_handle *));
- *th = NULL;
-
- w32api_type_definition_scan_bytes(type_definition, type_definition_len);
- if(w32api_type_definition_parse((void *)&hnd) != 0)
- {
- *th = hnd.hnd;
-
- /* Leaks */
- if(*th != NULL)
- efree(*th);
-
- efree(th);
- return FAILURE;
- }
-
- *th = hnd.hnd;
-
- if(!*th)
- return FAILURE;
-
- if((zend_hash_exists(WG(callbacks), (*th)->type_name, strlen((*th)->type_name) +1)) ||
- (zend_hash_exists(WG(types), (*th)->type_name, strlen((*th)->type_name) + 1)))
- {
- php_error_docref(NULL TSRMLS_CC, E_WARNING,
- "A type or callback by the name %s already has been registered, cannot redefine type or callback",
- (*th)->type_name);
-
- /* We dont want to unload function as it already exists so lets just free it ourselves */
- php_w32api_free_members((*th)->member_list);
- efree((*th)->type_name);
- efree(*th);
- efree(th);
-
- return FAILURE;
- }
-
- /* Insert it into our hash table */
- if(zend_hash_add( WG(types),
- (*th)->type_name,
- strlen((*th)->type_name) + 1,
- th,
- sizeof(w32api_type_handle *),
- NULL) != SUCCESS)
- {
-
- php_error_docref(NULL TSRMLS_CC, E_WARNING,
- "Loading of type %s failed: Could not insert type handle into hash",
- (*th)->type_name);
-
- /* Tidy up */
- zend_hash_del(WG(types), (*th)->type_name, strlen((*th)->type_name) + 1);
- return FAILURE;
- }
-
- return SUCCESS;
-
-}
-/* }}} */
-
-
-/* {{{ php_w32api_register_callback
- */
-static int php_w32api_register_callback(char *function_definition, int function_definition_len TSRMLS_DC)
-{
- w32api_func_handle **fh;
- w32api_func_handle_ptr hnd;
-
- char *new_definition = NULL;
-
- fh = emalloc(sizeof(w32api_func_handle *));
- *fh = NULL;
-
- new_definition = emalloc(function_definition_len + sizeof(" from cb.cb"));
-
- snprintf(new_definition, function_definition_len + sizeof(" from cb.cb"), "%s from cb.cb", function_definition);
-
-
- /* Parse function */
- w32api_function_definition_scan_bytes(new_definition, function_definition_len + sizeof(" from cb.cb"));
- if(w32api_function_definition_parse((void *)&hnd) != 0)
- {
- *fh = hnd.hnd;
-
- /* Leaks */
- if(*fh != NULL)
- efree(*fh);
-
- efree(fh);
- return FAILURE;
- }
- *fh = hnd.hnd;
-
- if(!*fh)
- return FAILURE;
-
-
- if(zend_hash_exists(WG(callbacks), (*fh)->function_name, strlen((*fh)->function_name) + 1))
- {
- php_error_docref(NULL TSRMLS_CC, E_WARNING,
- "A callback by the name %s already has been registered, cannot redefine type",
- (*fh)->function_name);
-
- /* We dont want to unload function as it already exists so lets just free it ourselves */
- php_w32api_free_arguments((*fh)->argument_list);
- efree((*fh)->return_type_name);
- efree((*fh)->function_name);
- efree(*fh);
- efree(fh);
-
- return FAILURE;
- }
-
- /* Insert it into our hash table */
- if(zend_hash_add( WG(callbacks),
- (*fh)->function_name,
- strlen((*fh)->function_name) + 1,
- fh,
- sizeof(w32api_func_handle *),
- NULL) != SUCCESS)
- {
-
- php_error_docref(NULL TSRMLS_CC, E_WARNING,
- "Loading of function %s failed: Could not insert function handle into hash",
- (*fh)->function_name);
-
- /* Tidy up */
- zend_hash_del(WG(callbacks), (*fh)->function_name, strlen((*fh)->function_name) + 1);
- return FAILURE;
- }
-
- return SUCCESS;
-
-
-
-}
-/* }}} */
-
-
-/* {{{ php_w32api_free_arguments
- * Expects one argument, the head of a list of arguments to free
- */
-static void php_w32api_free_arguments(arguments *argument_list)
-{
- if(argument_list == NULL)
- return;
-
- efree(argument_list->arg->argument_name);
- efree(argument_list->arg->type_name);
- efree(argument_list->arg);
-
- if(argument_list->next_arg != NULL)
- {
- php_w32api_free_arguments(argument_list->next_arg);
- }
-
- efree(argument_list);
-
- return;
-}
-/* }}} */
-
-/* {{{ php_w32api_free_members
- * Expects one argument, the head of a list of members to free
- */
-static void php_w32api_free_members(members *member_list)
-{
- if(member_list == NULL)
- return;
-
- efree(member_list->member->member_name);
-
- if(member_list->member->member_type_name != NULL)
- efree(member_list->member->member_type_name);
-
- efree(member_list->member);
-
- php_w32api_free_members(member_list->next_member);
- efree(member_list);
- return;
-}
-/* }}} */
-
-/* {{{ php_w32api_load_library
- * Expects two parameters, first is libraries name the second is a pointer
- * to a pointer to w32api_lib_handle which will recieve the resultant handle.
- * returns SUCCESS on success and FAILURE on failure.
- */
-static int php_w32api_load_library (char *library_name, w32api_lib_handle **lh TSRMLS_DC)
-{
- if(zend_hash_find(WG(libraries), library_name, strlen(library_name) + 1, (void **)lh) == SUCCESS)
- {
- (*lh)->ref_count++;
- return SUCCESS;
- }
-
- *lh = (w32api_lib_handle *) emalloc( sizeof(w32api_lib_handle) );
- (*lh)->ref_count = 1;
- (*lh)->library_name = estrdup(library_name);
-
- (*lh)->handle = LoadLibrary((*lh)->library_name);
-
- if(!(*lh)->handle) /* Could not load library */
- {
- LPVOID message_buffer;
- FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER |
- FORMAT_MESSAGE_FROM_SYSTEM |
- FORMAT_MESSAGE_IGNORE_INSERTS,
- NULL,
- GetLastError(),
- MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), /* Default language */
- (LPTSTR)&message_buffer,
- 0,
- NULL);
-
- /* Tidy up */
- efree((*lh)->library_name);
- efree(*lh);
- efree(lh);
-
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Loading of library failed: %s", message_buffer);
- LocalFree(message_buffer);
-
- return FAILURE;
- }
-
- /* Add to hash */
- if(zend_hash_add( WG(libraries),
- (*lh)->library_name,
- strlen((*lh)->library_name) + 1,
- *lh,
- sizeof(w32api_lib_handle),
- NULL) != SUCCESS)
- {
-
- php_error_docref(NULL TSRMLS_CC, E_WARNING,
- "Loading of library %s failed: Could not insert library handle into hash",
- (*lh)->library_name);
-
- /* Tidy up */
- efree((*lh)->library_name);
- efree(*lh);
- efree(lh);
-
- return FAILURE;
- }
-
-
- return SUCCESS;
-
-}
-/* }}} */
-
-
-/* {{{ php_w32api_do_arg_types
- */
-static unsigned char *php_w32api_do_arg_types(arguments **argument_list)
-{
- int i = 0;
- int j = 0;
- arguments *curr_arg = NULL;
- unsigned char *retval = NULL;
-
- if(!(argument_list) || !(*argument_list))
- return NULL;
-
- curr_arg = *argument_list;
-
- /* See how much room we need to emalloc */
- while(curr_arg)
- {
- i++;
-
- if(curr_arg->arg->flags & BYREF_FORCE)
- {
- j = i;
- }
-
- curr_arg = curr_arg->next_arg;
- }
-
- /* Check to see if any args are by ref */
- if( j == 0 )
- return NULL;
-
- retval = (unsigned char *)safe_emalloc(sizeof(unsigned char), j, 1);
- retval[0] = (unsigned char)j;
-
- curr_arg = *argument_list;
-
- for(i=1; i <= j; i++)
- {
-
- retval[i] = (unsigned char)curr_arg->arg->flags;
- curr_arg = curr_arg->next_arg;
-
- }
-
- return retval;
-}
-/* }}} */
-
-static int php_w32api_get_type_size(int type_id, char *type_name, int flags)
-{
- TSRMLS_FETCH();
-
- if(flags & BYREF_FORCE)
- {
- return sizeof(void *); /* Pointers are always the same size */
- }
-
- switch(type_id)
- {
- case W32API_NULL:
- return sizeof(void *);
- case W32API_INT:
- return sizeof(int);
- case W32API_LONG:
- return sizeof(long);
- case W32API_DOUBLE:
- return sizeof(double);
- case W32API_FLOAT:
- return sizeof(float);
- case W32API_STRING:
- return sizeof(char *);
- case W32API_BYTE:
- return sizeof(char);
- case W32API_BOOL:
- return sizeof(int);
- case W32API_COMPLEX:
- {
- w32api_type_handle **th;
-
- if(zend_hash_find(WG(types), type_name, strlen(type_name) +1, (void **)&th) != SUCCESS)
- {
- php_error_docref(NULL TSRMLS_CC, E_ERROR, "Unknown type %s", type_name);
- return -1;
- }
-
- return (*th)->size;
-
- }
- break;
- case W32API_UNKNOWN:
- default:
- php_error_docref(NULL TSRMLS_CC, E_ERROR, "Unknown type %s", type_name);
- return -1;
- }
-}
-
-static int php_w32api_get_type_id_from_name(char *type)
-{
-
- TSRMLS_FETCH();
-
- if(!strcmp(type, "long"))
- {
- return W32API_LONG;
- }
- else if(!strcmp(type, "int"))
- {
- return W32API_INT;
- }
- else if (!strcmp(type, "string"))
- {
- return W32API_STRING;
- }
- else if (!strcmp(type, "byte"))
- {
- return W32API_BYTE;
- }
- else if (!strcmp(type, "bool"))
- {
- return W32API_BOOL;
- }
- else if (!strcmp(type, "double"))
- {
- return W32API_DOUBLE;
- }
- else if (!strcmp(type, "float"))
- {
- return W32API_FLOAT;
- }
- else if (!strcmp(type, "void"))
- {
- return W32API_NULL;
- }
- else
- {
- if(zend_hash_exists(WG(types), type, strlen(type) +1))
- {
- return W32API_COMPLEX;
- }
- else
- {
- return W32API_UNKNOWN;
- }
- }
-}
-
-static void php_w32api_init_type(w32api_type_handle *th, zval *obj TSRMLS_DC)
-{
- w32api_type_instance *ti;
- zval *rsrc_handle = NULL;
-
- ti = emalloc(sizeof(w32api_type_instance));
-
- if(!obj)
- MAKE_STD_ZVAL(obj);
-
- object_init_ex(obj, WG(type_ce));
-
- ti->type = th;
- ti->values = safe_emalloc(sizeof(zval *), th->member_count, 0);
- memset(ti->values, '\0', sizeof(zval *) * th->member_count);
-
- MAKE_STD_ZVAL(rsrc_handle);
- ZEND_REGISTER_RESOURCE(rsrc_handle, ti, WG(le_type_instance));
-
- zend_hash_index_update(Z_OBJPROP_P(obj), 0, &rsrc_handle, sizeof(zval *), NULL);
-}
-
-
-static int php_w32api_do_prop_get(zval *object, zval *return_value, zend_llist_element **element TSRMLS_DC)
-{
- w32api_type_instance *th;
- zval **type_instance_handle;
- members *current_member;
- char *property_name;
- int i = 0;
-
- zend_hash_index_find(Z_OBJPROP_P(object), 0, (void **) &type_instance_handle);
-
- th = (w32api_type_instance *)zend_fetch_resource(type_instance_handle TSRMLS_CC,
- -1, "Complex Type Instance", NULL,
- 1, WG(le_type_instance));
-
- if(!th)
- return FAILURE;
-
- property_name = Z_STRVAL(((zend_overloaded_element *)(*element)->data)->element);
-
- current_member = th->type->member_list;
-
- while(strcmp(current_member->member->member_name, property_name) != 0)
- {
- i++;
-
- if(current_member->next_member != NULL)
- current_member = current_member->next_member;
- else
- return FAILURE;
- }
-
- *return_value = *(th->values[i]);
- zval_copy_ctor(return_value);
-
- return SUCCESS;
-}
-
-static int php_w32api_do_prop_set(zval *object, zval *value, zend_llist_element **element TSRMLS_DC)
-{
- w32api_type_instance *th;
- zval **type_instance_handle;
- zval *new_var;
- members *current_member;
- char *property_name;
- int i = 0;
-
- zend_hash_index_find(Z_OBJPROP_P(object), 0, (void **) &type_instance_handle);
-
- th = (w32api_type_instance *)zend_fetch_resource(type_instance_handle TSRMLS_CC,
- -1, "Complex Type Instance", NULL,
- 1, WG(le_type_instance));
-
- if(!th)
- return FAILURE;
-
- property_name = Z_STRVAL(((zend_overloaded_element *)(*element)->data)->element);
-
- current_member = th->type->member_list;
-
- while(strcmp(current_member->member->member_name, property_name) != 0)
- {
- i++;
-
- if(current_member->next_member != NULL)
- current_member = current_member->next_member;
- else
- return FAILURE;
- }
-
- if(current_member->member->flags & BYREF_FORCE)
- {
- if(th->values[i])
- zval_ptr_dtor(&th->values[i]);
-
- MAKE_STD_ZVAL(new_var);
- *new_var = *value;
- zval_copy_ctor(new_var);
- th->values[i] = new_var;
-
- }
- else
- {
- th->values[i] = value;
- zval_add_ref(&value);
- }
-
- return SUCCESS;
-}
-
-w32api_result php_w32api_do_dynamic_dll_call(w32api_func_handle *fh, int argc, w32api_dynamic_param *params, void *return_buffer, int return_buffer_size)
-{
-
- /**
- * Theory Behind Implementation
- * ============================
- * We have four main jobs:
- * 1) Push arguments onto stach aligned at 4 bytes.
- * 2) Call Function
- * 3) Get Return Values
- * 4) Perform any cleanup needed.
- *
- * Pushing arguments onto the stack is fairly simple, just push from right to left
- * so for a function with the prototype int sum(int a, int b) we would push b and
- * then a in that order.
- *
- * Calling the function is fine as we already have the pointer to the function which
- * we can use with call [function_pointer] to make the actual call.
- *
- * Return values are where we begin to get complicated. Now for simple return values up
- * to 8 bytes they are returned via the EAX/EDX register pair. This means we can just
- * copy the EAX/EDX pair to the win32_result sturcture and be sure we get any simple
- * return type. If the return type is more than 8 bytes then things get complicated.
- * When calling we must pass a hidden argument on the stach which points to a tempory
- * buffer with enough memory to hold the return value, this return value is then copied
- * to the correct varaible by us. Microsoft being the nice bunnies they are, decided to
- * copy an optimization Borland introduced under win16 which is to pass structs of under
- * 8 bytes directly via EAX/EDX pair. One final notable exception is dealing with floating
- * point return types where we need to retrive the floating point number of the systems
- * math coprocessor stack using the fstp call.
- *
- * Finally if its a __cdecl call we have to clean up the stack, otherwise the callee does this.
- *
- */
-
- w32api_result result = { 0 };
- DWORD *stack_pointer, stack_size = 0, eaxv, edxv;
- BYTE *arg_ptr = NULL;
- int size = 0, i = 0;
- FARPROC fp = fh->handle;
-
- _asm mov stack_pointer, esp /* Store stack pointer (esp) in stack_pointer */
- _asm sub esp, 0x100 /* Give ourselves 256 bytes on the stack */
-
-
- for(i = (argc - 1); i >= 0; i--)
- {
- size = (params[i].width + 3)/4 * 4;
- arg_ptr = (unsigned char *)params[i].argument_ptr + size - 4;
- stack_size += (unsigned long)size;
-
- while(size > 0)
- {
- stack_pointer--;
- if(params[i].flags == W32API_ARGPTR)
- {
- *stack_pointer = *(unsigned long *)arg_ptr;
- arg_ptr -= 4;
- }
- else
- {
- *stack_pointer = params[i].argument;
- }
-
- size -= 4;
- }
- }
-
- if((return_buffer) && ((fh->flags & W32API_BORLAND) || (return_buffer_size > 8)))
- {
-
- stack_size += 4;
- stack_pointer--;
- *stack_pointer = (unsigned long)return_buffer;
- }
-
- _asm add esp, 0x100
- _asm sub esp, stack_size
- _asm call [fp]
- _asm mov eaxv, eax
- _asm mov edxv, edx
-
- if(fh->flags & W32API_CDECL)
- {
- _asm add esp, stack_size
- }
-
- if(fh->flags & W32API_REAL4)
- _asm fstp dword ptr [result]
- else if (fh->flags & W32API_REAL8)
- _asm fstp qword ptr [result]
- else if (!return_buffer)
- {
- _asm mov eax, [eaxv]
- _asm mov edx, [edxv]
- _asm mov DWORD PTR [result], eax
- _asm mov DWORD PTR [result + 4], edx
- }
- else if (!(fh->flags & W32API_BORLAND) && (return_buffer_size <= 8))
- {
- _asm mov ecx, DWORD PTR [return_buffer]
- _asm mov eax, [eaxv]
- _asm mov DWORD PTR [ecx], eax
- _asm mov edx, [edxv]
- _asm mov DWORD PTR [ecx + 4], edx
- }
-
- return result;
-}
-
-void php_w32api_marshall_zval_to_c(argument *arg, w32api_dynamic_param *dp, zval *pzval TSRMLS_DC)
-{
- dp->flags = 0;
-
- /* We should have been passed a write reference when
- * BYREF_FORCE is Set so we just add a reference
- * when we pass it to the function,
- * TODO: register the reference internally for safe unreferencing
- */
-
- switch(arg->type_id)
- {
- case W32API_INT:
- convert_to_long_ex(&pzval);
- if(arg->flags & BYREF_FORCE)
- {
- dp->argument = (unsigned long)&pzval->value.lval;
- dp->width = sizeof(int *);
-
- }
- else
- {
- dp->argument = (int)pzval->value.lval;
- dp->width = sizeof(int);
- }
- break;
- case W32API_LONG:
- convert_to_long_ex(&pzval);
-
- if(arg->flags & BYREF_FORCE)
- {
- dp->argument = (unsigned long)&pzval->value.lval;
- dp->width = sizeof(int *);
- zval_add_ref(&pzval);
- }
- else
- {
- dp->argument = pzval->value.lval;
- dp->width = sizeof(int);
- }
- break;
- case W32API_STRING:
-
- convert_to_string_ex(&pzval);
- if(!(arg->flags & BYREF_FORCE))
- {
- /* Need to free this when we demarshall */
- dp->argument = (unsigned long)estrndup(Z_STRVAL_P(pzval), Z_STRLEN_P(pzval));
- }
- else
- {
- dp->argument = (unsigned long)Z_STRVAL_P(pzval);
- zval_add_ref(&pzval);
- }
-
- dp->width = sizeof(char *);
- break;
-
- case W32API_DOUBLE:
- convert_to_double_ex(&pzval);
-
- if(arg->flags & BYREF_FORCE)
- {
- dp->argument = (unsigned long)&pzval->value.dval;
- dp->width = sizeof(double *);
- zval_add_ref(&pzval);
- }
- else
- {
- dp->argument_ptr = &pzval->value.dval;
- dp->width = sizeof(double);
- dp->flags = W32API_ARGPTR;
- }
- break;
- case W32API_FLOAT:
- convert_to_double_ex(&pzval);
-
- if(arg->flags & BYREF_FORCE)
- {
- dp->argument = (unsigned long)&pzval->value.dval;
- dp->width = sizeof(double *);
- zval_add_ref(&pzval);
- }
- else
- {
- dp->argument_ptr = &pzval->value.dval;
- dp->width = sizeof(float);
- dp->flags = W32API_ARGPTR;
- }
- break;
- case W32API_BYTE:
- /* Thanks sterling */
- convert_to_string_ex(&pzval);
- if(arg->flags & BYREF_FORCE)
- {
- dp->argument = (unsigned long)&Z_STRVAL_P(pzval);
- dp->width = sizeof(char *);
- zval_add_ref(&pzval);
- }
- else
- {
- dp->argument = (char)Z_STRVAL_P(pzval)[0];
- dp->width = sizeof(char);
- }
- break;
- case W32API_BOOL:
- convert_to_boolean_ex(&pzval);
-
- if(arg->flags & BYREF_FORCE)
- {
- dp->argument = (unsigned long)&pzval->value.lval;
- dp->width = sizeof(int *);
- zval_add_ref(&pzval);
- }
- else
- {
- dp->argument = (int)pzval->value.lval;
- dp->width = sizeof(int);
- }
- break;
- case W32API_COMPLEX:
- if(Z_TYPE_P(pzval) != IS_OBJECT)
- {
- php_error_docref(NULL TSRMLS_CC, E_ERROR, "Variable passed as complex value is not an object");
- break;
- }
-
- if(arg->flags & BYREF_FORCE)
- {
- int width= 0;
- void **ptr = NULL;
- ptr = emalloc(sizeof(void *));
- *ptr = php_w32api_complex_marshall_zval_to_c(pzval, &width, NULL TSRMLS_CC);
- dp->argument = (unsigned long)ptr;
- dp->width = width;
- }
- else
- {
- int width= 0;
- dp->argument_ptr = php_w32api_complex_marshall_zval_to_c(pzval, &width, NULL TSRMLS_CC);
- dp->width = width;
- }
- break;
-
- case W32API_UNKNOWN:
- php_error_docref(NULL TSRMLS_CC, E_ERROR, "Unknown type when calling function, marshalling failed");
- break;
- }
-
-}
-
-static void *php_w32api_complex_marshall_zval_to_c(zval *pzval, int *width, void *return_value TSRMLS_DC)
-{
- w32api_type_instance *th;
- zval **type_instance_handle;
- members *current_member;
- char *offset = return_value;
- int i = 0;
-
-
- if(return_value == NULL)
- {
- /* First call */
-/* return_value = emalloc(th->type->size);
-
- zend_hash_index_find(Z_OBJPROP_P(object), 0, (void **) &type_instance_handle);
- th = (w32api_type_instance *)zend_fetch_resource(type_instance_handle TSRMLS_CC,
- -1, "Complex Type Instance", NULL,
- 1, WG(le_type_instance));
-
- if(!th)
- return NULL;
-
-
- for(i = 0; i < th->type->member_count; i++)
- {
-
-
- }
-*/ }
-
-
-}
-
-
-/* =====================================================================================================
- * Win32 Class Code
- * =====================================================================================================
- */
-
-/* {{{ win32_class_functions[]
- */
-function_entry win32_class_functions[] = {
- W32API_CLASS_FE(win32, registerfunction, NULL)
- W32API_CLASS_FE(win32, unregisterfunction, NULL)
- W32API_CLASS_FE(win32, registercallback, NULL)
- W32API_CLASS_FE(win32, definetype, NULL)
- W32API_CLASS_FE(win32, gettypesize, NULL)
- W32API_CLASS_FE(win32, inittype, NULL)
- W32API_CLASS_FE(win32, decref, NULL)
-#ifndef NDEBUG
- W32API_CLASS_FE(win32, dump_function_hash, NULL)
- W32API_CLASS_FE(win32, dump_library_hash, NULL)
- W32API_CLASS_FE(win32, dump_callback_hash, NULL)
- W32API_CLASS_FE(win32, dump_type_hash, NULL)
-#endif
- {NULL, NULL, NULL}
-};
-/* }}} */
-
-/* {{{ win32_class_init(TSRMLS_D)
- */
-int win32_class_init(TSRMLS_D)
-{
- zend_class_entry ce;
-
- INIT_CLASS_ENTRY(ce,
- "win32",
- win32_class_functions);
-
- WG(win32_ce) = zend_register_internal_class(&ce TSRMLS_CC);
-
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ win32_class_rshutdown(TSRMLS_D)
- * Cleans up at the end of the shutdown removing and freeing anything we added to the function
- * table.
- */
-int win32_class_rshutdown(TSRMLS_D)
-{
-
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ proto: int Win32::RegisterFunction(string definition [, int flags])
- * Registers and Loads a function from an underlying Dll
- */
-W32API_CLASS_FUNCTION(win32, registerfunction)
-{
- char *function_definition = NULL;
- int function_definition_len;
- long flags = 0;
-
- if(zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|l",
- &function_definition,
- &function_definition_len,
- &flags) == FAILURE)
- {
- return;
- }
-
- if(php_w32api_load_function(function_definition, function_definition_len, flags TSRMLS_CC) != SUCCESS)
- {
- php_error_docref(NULL TSRMLS_CC, E_ERROR, "Registering Function %s failed", function_definition);
- RETURN_FALSE;
- }
-
- RETURN_TRUE;
-
-
-}
-/* }}} */
-
-/* {{{ proto: int Win32::UnregisterFunction(string function_name)
- * Unregisters a previously loaded function
- */
-W32API_CLASS_FUNCTION(win32, unregisterfunction)
-{
- char *function_name = NULL;
- int function_name_len;
- w32api_func_handle **fh = NULL;
-
- if(zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s",
- &function_name,
- &function_name_len) == FAILURE)
- {
- return;
- }
-
- /* Our deleteor handler removes us from the WG(win32_ce)->function_table
- * so no need to delete specifically from there
- */
- zend_hash_del(WG(funcs), function_name, strlen(function_name) + 1);
-
- RETURN_TRUE;
-
-}
-/* }}} */
-
-/* {{{ proto: int Win32::RegisterCallback(string definition)
- * Registers a callback type
- */
-W32API_CLASS_FUNCTION(win32, registercallback)
-{
- char *function_definition = NULL;
- int function_definition_len;
- w32api_func_handle **fh = NULL;
-
- if(zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s",
- &function_definition,
- &function_definition_len) == FAILURE)
- {
- return;
- }
-
- if(php_w32api_register_callback(function_definition, function_definition_len TSRMLS_CC) != SUCCESS)
- {
- RETURN_FALSE;
- }
-
- RETURN_TRUE;
-
-}
-/* }}} */
-
-
-/* {{{ proto: int Win32::DefineType(string definition)
- * Defines a C Like Type for use.
- */
-W32API_CLASS_FUNCTION(win32, definetype)
-{
- char *type_definition = NULL;
- int type_definition_len;
-
- if(zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s",
- &type_definition,
- &type_definition_len) == FAILURE)
- {
- return;
- }
-
- if(php_w32api_register_type(type_definition, type_definition_len TSRMLS_CC) != SUCCESS)
- {
- php_error_docref(NULL TSRMLS_CC, E_ERROR, "Registering Type %s failed", type_definition);
- RETURN_FALSE;
- }
-
- RETURN_TRUE;
-
-}
-/* }}} */
-
-/* {{{ proto: int Win32::GetTypeSize(string type_name)
- * Returns the size of a registered type
- */
-W32API_CLASS_FUNCTION(win32, gettypesize)
-{
- char *type = NULL;
- int type_len;
-
- if(zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s",
- &type,
- &type_len) == FAILURE)
- {
- return;
- }
-
- RETURN_LONG(php_w32api_get_type_size(php_w32api_get_type_id_from_name(type), type, BYREF_NONE));
-
-
-}
-/* }}} */
-
-/* {{{ proto: int Win32::InitType(string TypeName)
- * Creates an instance of type TypeName
- */
-W32API_CLASS_FUNCTION(win32, inittype)
-{
- char *type_name = NULL;
- int type_name_len = 0;
- w32api_type_handle **th = NULL;
-
- if(zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s",
- &type_name, &type_name_len) == FAILURE)
- {
- return;
- }
-
- if(zend_hash_find(WG(types), type_name, type_name_len +1, (void **)&th) == FAILURE)
- {
- php_error_docref(NULL TSRMLS_CC, E_ERROR, "Could not retrieve type handle for type %s from hash table", type_name);
- RETURN_FALSE;
- }
-
- php_w32api_init_type(*th, return_value TSRMLS_CC);
-
-}
-/* }}} */
-
-/* {{{ proto: int Win32::DecRef(mixed Variable)
- * Decreases the reference count on a variable
- */
-W32API_CLASS_FUNCTION(win32, decref)
-{
-
-}
-/* }}} */
-
-/* {{{ XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- * THIS FUNCTION IS NOT PUBLICALLY ACCESSABLE
- * IT IS USED AS A GENERIC HANDLER FOR W32API
- * CALLS.
- */
-W32API_CLASS_FUNCTION(win32, invokefunction)
-{
- char *function_name = get_active_function_name(TSRMLS_C);
- int argc = ZEND_NUM_ARGS();
- int i = 0;
- w32api_dynamic_param *params = NULL;
- w32api_dynamic_param *current_dynamic_param = NULL;
- w32api_func_handle **fh = NULL;
- w32api_result res = {0};
- void *w32api_return_buffer = NULL;
- int w32api_return_buffer_size = 0;
- zval **func_arguments = NULL;
- zval *current_zval = NULL;
- arguments *curr_arg = NULL;
- w32api_type_handle *th = NULL;
-
- if(zend_hash_find(WG(funcs), function_name, strlen(function_name) +1, (void **)&fh) == FAILURE)
- {
- php_error_docref(NULL TSRMLS_CC, E_ERROR, "Could not retrieve function handle from hash table");
- RETURN_FALSE;
- }
-
- if(argc)
- {
- if(zend_get_parameters_array_ex(argc, &func_arguments) == FAILURE)
- {
- WRONG_PARAM_COUNT
- }
-
- params = (w32api_dynamic_param *)safe_emalloc(sizeof(w32api_dynamic_param), argc, 0);
-
- curr_arg = (*fh)->argument_list;
- current_dynamic_param = params;
-
- for(i = 0; i < argc; i++)
- {
- current_zval = func_arguments[i];
- php_w32api_marshall_zval_to_c(curr_arg->arg, current_dynamic_param, current_zval TSRMLS_CC);
-
- current_dynamic_param++;
- curr_arg = curr_arg->next_arg;
- }
- }
- else
- {
- params = NULL;
- }
-
- if((*fh)->return_type_id == W32API_COMPLEX)
- {
- if(zend_hash_find(WG(types), (*fh)->return_type_name, strlen((*fh)->return_type_name) +1, (void **)&th) != SUCCESS)
- php_error_docref(NULL TSRMLS_CC, E_ERROR, "Could not find type handle for type %s", (*fh)->return_type_name);
-
- w32api_return_buffer = emalloc(th->size);
- w32api_return_buffer_size = th->size;
- }
-
-
-
- res = php_w32api_do_dynamic_dll_call(*fh, argc, params, w32api_return_buffer, w32api_return_buffer_size);
-
- if(argc)
- /* We should demarshall here not just efree */
- efree(params);
-
- switch((*fh)->return_type_id)
- {
- case W32API_LONG:
- RETURN_LONG(res.lval);
- break;
- case W32API_INT:
- RETURN_LONG(res.ival);
- break;
- case W32API_STRING:
- case W32API_BYTE:
- RETURN_STRING(res.ptr, 1);
- break;
- case W32API_DOUBLE:
- RETURN_DOUBLE(res.dval);
- break;
- case W32API_FLOAT:
- RETURN_DOUBLE(res.fval);
- break;
- case W32API_BOOL:
- if(res.ival)
- {
- RETURN_TRUE;
- }
- else
- {
- RETURN_FALSE;
- }
- break;
- case W32API_COMPLEX:
- break;
- default:
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unknown return type %s", (*fh)->return_type_name);
- }
-
-}
-/* }}} */
-
-#ifndef NDEBUG
-W32API_CLASS_FUNCTION(win32, dump_library_hash)
-{
- zend_hash_apply(WG(libraries), (apply_func_t)php_w32api_dump_library_hash_cb TSRMLS_CC);
-}
-
-W32API_CLASS_FUNCTION(win32, dump_function_hash)
-{
- zend_hash_apply(WG(funcs), (apply_func_t)php_w32api_dump_function_hash_cb TSRMLS_CC);
-}
-
-W32API_CLASS_FUNCTION(win32, dump_callback_hash)
-{
-
- zend_hash_apply(WG(callbacks), (apply_func_t)php_w32api_dump_callback_hash_cb TSRMLS_CC);
-}
-
-
-W32API_CLASS_FUNCTION(win32, dump_type_hash)
-{
-
- zend_hash_apply(WG(types), (apply_func_t)php_w32api_dump_type_hash_cb TSRMLS_CC);
-}
-
-int php_w32api_dump_library_hash_cb(void *pData TSRMLS_DC)
-{
- w32api_lib_handle *lh = pData;
-
- printf("=====================================================================\n");
- printf("Library Name: \t\t%s\n", lh->library_name);
- printf("Reference Count: \t\t%d\n", lh->ref_count);
- printf("Library Handle: \t\t%p\n", lh->handle);
- printf("Lib ptr loc \t\t%p\n", lh);
- printf("ll n loc \t\t%p\n", &lh->ref_count);
-
- printf("=====================================================================\n");
-
- return 0;
-}
-
-int php_w32api_dump_function_hash_cb(void *pData TSRMLS_DC)
-{
- w32api_func_handle **fh = pData;
-
- printf("=====================================================================\n");
- printf("Function Name: \t\t%s\n", (*fh)->function_name);
- printf("Return Type Name: \t\t%s\n", (*fh)->return_type_name);
- printf("Library Name: \t\t%s\n", (*fh)->lib->library_name );
- printf("Function Flags: \t\t%d\n", (*fh)->flags);
- printf("Function Handle: \t\t%p\n", (*fh)->handle);
- printf("Return Type ID: \t\t%d\n", (*fh)->return_type_id);
- printf("Return Type Name: \t\t%s\n", (*fh)->return_type_name);
- printf("## Arguments ##\n");
- printf("---------------------------------------------------------------------\n");
- php_w32api_print_arguments((*fh)->argument_list);
- printf("=====================================================================\n\n");
-
- return 0;
-}
-
-int php_w32api_dump_callback_hash_cb(void *pData TSRMLS_DC)
-{
- w32api_func_handle **fh = pData;
-
- printf("=====================================================================\n");
- printf("Callback Name: \t\t%s\n", (*fh)->function_name);
- printf("Return Type Name: \t\t%s\n", (*fh)->return_type_name);
- printf("Callback Flags: \t\t%d\n", (*fh)->flags);
- printf("Return Type ID: \t\t%d\n", (*fh)->return_type_id);
- printf("Return Type Name: \t\t%s\n", (*fh)->return_type_name);
- printf("## Arguments ##\n");
- printf("---------------------------------------------------------------------\n");
- php_w32api_print_arguments((*fh)->argument_list);
- printf("=====================================================================\n\n");
-
- return 0;
-}
-
-int php_w32api_dump_type_hash_cb(void *pData TSRMLS_DC)
-{
- w32api_type_handle **th = pData;
-
-
- printf("=====================================================================\n");
- printf("Type Name: \t\t%s\n", (*th)->type_name);
- printf("Type Size: \t\t%d\n", (*th)->size);
- printf("Member Count: \t\t%d\n", (*th)->member_count);
- printf("## Members ##\n");
- printf("---------------------------------------------------------------------\n");
- php_w32api_print_members((*th)->member_list);
- printf("=====================================================================\n\n");
-
- return 0;
-}
-
-void php_w32api_print_members(members *member_list)
-{
- if(member_list == NULL)
- return;
-
- printf("\tMember Name: \t%s\n", member_list->member->member_name);
- printf("\tMember Flags: \t%d\n", member_list->member->flags);
- printf("\tMember Type ID: \t%d\n", member_list->member->member_type_id);
- printf("\tMember Type Name:\t%s\n", member_list->member->member_type_name);
- printf("\tMember Offset: \t%d\n", member_list->member->offset);
- printf("---------------------------------------------------------------------\n");
-
- php_w32api_print_members(member_list->next_member);
-
-}
-void php_w32api_print_arguments(arguments *argument_list)
-{
- if(argument_list == NULL)
- return;
-
- printf("\tArgument Name: \t%s\n", argument_list->arg->argument_name);
- printf("\tArgument Flags: \t%d\n", argument_list->arg->flags);
- printf("\tArgument Type ID:\t%d\n", argument_list->arg->type_id);
- printf("\tArg Type Name: \t%s\n", argument_list->arg->type_name);
- printf("---------------------------------------------------------------------\n");
-
- php_w32api_print_arguments(argument_list->next_arg);
-}
-#endif
-/* =====================================================================================================
- * Type Class Code
- * =====================================================================================================
- */
-
-/* {{{ type_class_functions[]
- */
-function_entry type_class_functions[] = {
- W32API_CLASS_FE(type, clone, NULL)
- {NULL, NULL, NULL}
-};
-/* }}} */
-
-
-/* {{{ type_class_init(TSRMLS_DC)
- */
-int type_class_init(TSRMLS_D)
-{
- zend_class_entry ce;
-
- INIT_OVERLOADED_CLASS_ENTRY(ce,
- "type",
- type_class_functions,
- NULL,
- W32API_PROP_GET_FUNCTION_N(type),
- W32API_PROP_SET_FUNCTION_N(type));
-
- WG(type_ce) = zend_register_internal_class(&ce TSRMLS_CC);
-
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ W32API_PROP_SET_FUNCTION(type)
- */
-/* Most of this code is borrowed from php-gtk. Thanks to Andrei and Zeev for their
- * help with the prop-get/set functions
- */
-W32API_PROP_SET_FUNCTION(type)
-{
- zval result, temp;
- zval *temp_ptr = &temp;
- zval *new_val;
- zend_overloaded_element *overloaded_property;
- zend_llist_element *element;
- zval **object = &property_reference->object;
- int setter_retval, getter_retval;
- TSRMLS_FETCH();
-
-
- /* If we have $foo->bar->baz->boo->bin we have to do sucessive propgets
- * Until we can do our prop set (thanks Zeev, Andrei)
- */
- for (element=property_reference->elements_list->head; element != property_reference->elements_list->tail; element=element->next) {
- overloaded_property = (zend_overloaded_element *)element->data;
-
- getter_retval = FAILURE;
- if (Z_TYPE_P(overloaded_property) == OE_IS_OBJECT) {
- if (Z_TYPE_PP(object) == IS_NULL ||
- (Z_TYPE_PP(object) == IS_BOOL && Z_LVAL_PP(object) == 0) ||
- (Z_TYPE_PP(object) == IS_STRING && Z_STRLEN_PP(object) == 0)) {
- object_init(*object);
- }
-
-
- /* Trying to access a property on a non-object. */
- if (Z_TYPE_PP(object) != IS_OBJECT) {
- return FAILURE;
- }
-
- getter_retval = php_w32api_do_prop_get(*object, &result, &element TSRMLS_CC);
-
- if (getter_retval == SUCCESS) {
- temp = result;
- object = &temp_ptr;
- } else {
- if ((getter_retval = zend_hash_find(Z_OBJPROP_PP(object),
- Z_STRVAL(overloaded_property->element),
- Z_STRLEN(overloaded_property->element)+1,
- (void **)&object)) == FAILURE) {
- MAKE_STD_ZVAL(new_val);
- ZVAL_NULL(new_val);
- zend_hash_update(Z_OBJPROP_PP(object),
- Z_STRVAL(overloaded_property->element),
- Z_STRLEN(overloaded_property->element)+1,
- &new_val, sizeof(void *), (void **)&object);
- }
- }
-
- } else if (Z_TYPE_P(overloaded_property) == OE_IS_ARRAY) {
- if (Z_TYPE_PP(object) == IS_NULL ||
- (Z_TYPE_PP(object) == IS_BOOL && Z_LVAL_PP(object) == 0) ||
- (Z_TYPE_PP(object) == IS_STRING && Z_STRLEN_PP(object) == 0)) {
- array_init(*object);
- }
-
- /* Trying to access index on a non-array. */
- if (Z_TYPE_PP(object) != IS_ARRAY) {
- return FAILURE;
- }
-
- if (Z_TYPE(overloaded_property->element) == IS_STRING) {
- getter_retval = zend_hash_find(Z_ARRVAL_PP(object),
- Z_STRVAL(overloaded_property->element),
- Z_STRLEN(overloaded_property->element)+1,
- (void **)&object);
- } else if (Z_TYPE(overloaded_property->element) == IS_LONG) {
- getter_retval = zend_hash_index_find(Z_ARRVAL_PP(object),
- Z_LVAL(overloaded_property->element),
- (void **)&object);
- }
-
- if (getter_retval == FAILURE) {
- MAKE_STD_ZVAL(new_val);
- ZVAL_NULL(new_val);
-
- if (Z_TYPE(overloaded_property->element) == IS_STRING) {
- zend_hash_update(Z_ARRVAL_PP(object),
- Z_STRVAL(overloaded_property->element),
- Z_STRLEN(overloaded_property->element)+1,
- &new_val, sizeof(void *), (void **)&object);
- } else if (Z_TYPE(overloaded_property->element) == IS_LONG) {
- zend_hash_index_update(Z_ARRVAL_PP(object),
- Z_LVAL(overloaded_property->element),
- &new_val, sizeof(void *), (void **)&object);
- }
- }
- }
-
- zval_dtor(&overloaded_property->element);
- }
-
- /* object is now the object we want to set our property on */
- overloaded_property = (zend_overloaded_element *) element->data;
- setter_retval = php_w32api_do_prop_set(*object, value, &element TSRMLS_CC);
- zval_dtor(&overloaded_property->element);
-
- return setter_retval;
-
-}
-/* }}} */
-
-/* {{{ W32API_PROP_GET_FUNCTION(type)
- */
-W32API_PROP_GET_FUNCTION(type)
-{
- zval result;
- zval *result_ptr = &result;
- zval **prop_result;
- zend_overloaded_element *overloaded_property;
- zend_llist_element *element;
- zval object = *property_reference->object;
- int getter_retval;
- TSRMLS_FETCH();
-
- for (element=property_reference->elements_list->head; element; element=element->next) {
- overloaded_property = (zend_overloaded_element *) element->data;
-
- getter_retval = FAILURE;
- ZVAL_NULL(&result);
- if (Z_TYPE_P(overloaded_property) == OE_IS_OBJECT) {
- /* Trying to access a property on a non-object. */
- if (Z_TYPE(object) != IS_OBJECT ||
- Z_TYPE(overloaded_property->element) != IS_STRING) {
- return result;
- }
-
- if ((getter_retval = php_w32api_do_prop_get(&object, &result, &element TSRMLS_CC) == FAILURE)) {
- if ((getter_retval = zend_hash_find(Z_OBJPROP(object),
- Z_STRVAL(overloaded_property->element),
- Z_STRLEN(overloaded_property->element)+1,
- (void **)&prop_result)) == SUCCESS) {
- result = **prop_result;
- }
- }
- } else if (Z_TYPE_P(overloaded_property) == OE_IS_ARRAY) {
- /* Trying to access index on a non-array. */
- if (Z_TYPE(object) != IS_ARRAY) {
- return result;
- }
-
- if (Z_TYPE(overloaded_property->element) == IS_STRING) {
- getter_retval = zend_hash_find(Z_ARRVAL(object),
- Z_STRVAL(overloaded_property->element),
- Z_STRLEN(overloaded_property->element)+1,
- (void **)&prop_result);
- } else if (Z_TYPE(overloaded_property->element) == IS_LONG) {
- getter_retval = zend_hash_index_find(Z_ARRVAL(object),
- Z_LVAL(overloaded_property->element),
- (void **)&prop_result);
- }
- if (getter_retval == SUCCESS)
- result = **prop_result;
- }
-
- zval_dtor(&overloaded_property->element);
-
- object = result;
-
- if (getter_retval == FAILURE) {
- return result;
- }
- }
-
- zval_add_ref(&result_ptr);
- SEPARATE_ZVAL(&result_ptr);
- return *result_ptr;
-}
-/* }}} */
-
-/* {{{ proto: Type Type::Clone()
- * Creates an exact clone of the object.
- */
-W32API_CLASS_FUNCTION(type, clone)
-{
-
-}
-/* }}} */
-
-/* =====================================================================================================
- * Scanner & Parser Functions
- * =====================================================================================================
- */
-
-/* -----------------------------
- * Function Definition Functions
- * -----------------------------
- */
-
-/* {{{ w32api_parser_load_function_ex
- * Callback for the parser, if the library name is cb.cb we are registering a
- * callback so the LoadLibary and GetProcAddress code is skipped
- */
-w32api_func_handle *w32api_parser_load_function_ex(char *return_type, char *function_name, char *alias_name, arguments *argument_list, char *library_name)
-{
- w32api_func_handle *return_value;
- TSRMLS_FETCH();
-
- return_value = (w32api_func_handle *)emalloc(sizeof(w32api_func_handle));
- memset(return_value, '\0', sizeof(w32api_func_handle));
-
- return_value->argument_list = argument_list;
- return_value->flags = 0;
- return_value->function_name = (alias_name)?alias_name:function_name; /* This is estrdup'd in the Scanner already!! */
- return_value->return_type_name = return_type; /* This is estrdup'd in the Scanner already!! */
- return_value->return_type_id = php_w32api_get_type_id_from_name(return_type);
-
- if(strcmp("cb.cb", library_name)) /* Bit of a hack but we are registering a callback */
- {
- php_w32api_load_library(library_name, &return_value->lib TSRMLS_CC);
-
- if(!return_value->lib)
- {
- /* php_w32api_load_library has already given error */
- efree(return_value);
- return NULL;
- }
-
- return_value->handle = GetProcAddress(return_value->lib->handle, function_name);
-
- if(!return_value->handle)
- {
- /* Check for variation ending with A */
- char *ascii_name = NULL;
-
- ascii_name = emalloc(strlen(function_name) + 2);
- strcpy(ascii_name, function_name);
- ascii_name[strlen(function_name)] = 'A';
- ascii_name[strlen(function_name) + 1] = '\0';
- return_value->handle = GetProcAddress(return_value->lib->handle, ascii_name);
- efree(ascii_name);
-
- if(!return_value->handle)
- {
- /* TODO: php_error_docref and GetLastError etc */
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Could not load function %s", function_name);
- efree(return_value);
- return NULL;
- }
- }
- }
-
- /* We want function_name in lowercase now */
- php_strtolower(return_value->function_name, strlen(return_value->function_name));
-
- /* Free it if we have a alias */
- if(alias_name)
- efree(function_name);
-
- return return_value;
-}
-/* }}} */
-
-/* {{{ w32api_parser_make_argument
- * Helper function for the parser
- */
-arguments *w32api_parser_make_argument(char *arg_type, char *arg_name, int byref)
-{
- arguments *return_value = NULL; /* Pointer to our return value */
- argument *argument_value = NULL; /* Our actual argument */
-
- argument_value = emalloc(sizeof(argument));
- return_value = emalloc(sizeof(arguments));
-
- return_value->arg = argument_value;
- return_value->next_arg = return_value->prev_arg = NULL;
-
- argument_value->flags = byref;
- argument_value->argument_name = arg_name;
- argument_value->type_name = arg_type;
- argument_value->type_id = php_w32api_get_type_id_from_name(arg_type);
-
- if(argument_value->type_id == W32API_UNKNOWN) {
- TSRMLS_FETCH();
- php_error_docref(NULL TSRMLS_CC, E_NOTICE, "Unknown type %s used as arugment type", arg_type);
- }
-
- return return_value;
-}
-/* }}} */
-
-/* {{{ w32api_parser_join_arguments
- * Helper function for the parser
- */
-arguments *w32api_parser_join_arguments(arguments *lval, arguments *rval)
-{
- lval->next_arg = rval;
- rval->prev_arg = lval;
-
- return lval;
-}
-/* }}} */
-
-/* {{{ w32api_function_definition_error
- * Error function for the parser
- */
-int w32api_function_definition_error(char *s)
-{
- TSRMLS_FETCH();
- php_error_docref(NULL TSRMLS_CC, E_ERROR, "Function Definition Parse Error: %s", s);
- return 0;
-}
-/* }}} */
-
-/* -------------------------
- * Type Definition Functions
- * -------------------------
- */
-w32api_type_handle *w32api_parser_register_type(char *type_name, members *member_list)
-{
- w32api_type_handle *return_value = NULL;
- members *current_member;
- int offset = 0;
- int member_count = 0;
-
- return_value = emalloc(sizeof(w32api_type_handle));
-
- return_value->member_list = member_list;
- return_value->type_name = type_name; /* estrdup'd in parser */
- return_value->member_count = 0;
-
- current_member = return_value->member_list;
-
-
- while(current_member != NULL)
- {
- return_value->member_count++;
- current_member->member->offset = offset;
- offset += php_w32api_get_type_size(current_member->member->member_type_id, current_member->member->member_type_name, current_member->member->flags);
- current_member = current_member->next_member;
- }
-
-
- return_value->size = offset;
-
- return return_value;
-
-
-}
-
-members *w32api_parser_type_make_value(char *type_name, char *member_name, long flags)
-{
- members *return_value = NULL; /* Pointer to our return value */
- member *member_value = NULL; /* Our actual member */
-
- member_value = emalloc(sizeof(member));
- return_value = emalloc(sizeof(members));
-
- return_value->member = member_value;
- return_value->next_member = return_value->prev_member = NULL;
-
- member_value->member_name = member_name; /* estrdup'd in parser */
- member_value->member_type_name = type_name; /* estrdup'd in parser */
- member_value->member_type_id = php_w32api_get_type_id_from_name(type_name);
- member_value->flags = flags;
-
- return return_value;
-}
-
-
-members *w32api_parser_type_join_values(members *lval, members *rval)
-{
- lval->next_member = rval;
- rval->prev_member = lval;
-
- return lval;
-}
-
-/* {{{ w32api_function_definition_error
- * Error function for the parser
- */
-int w32api_type_definition_error(char *s)
-{
- TSRMLS_FETCH();
- php_error_docref(NULL TSRMLS_CC, E_ERROR, "Type Definition Parse Error: %s", s);
- return 0;
-}
-/* }}} */
-
-
-#endif /* HAVE_W32API */
diff --git a/ext/w32api/w32api.dsp b/ext/w32api/w32api.dsp
deleted file mode 100644
index aa77f36218..0000000000
--- a/ext/w32api/w32api.dsp
+++ /dev/null
@@ -1,281 +0,0 @@
-# Microsoft Developer Studio Project File - Name="w32api" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=w32api - Win32 Debug_TS
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "w32api.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "w32api.mak" CFG="w32api - Win32 Debug_TS"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "w32api - Win32 Debug_TS" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "w32api - Win32 Release_TS" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "w32api - Win32 Debug_TS"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "w32api___Win32_Debug_TS"
-# PROP BASE Intermediate_Dir "w32api___Win32_Debug_TS"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "../../Debug_TS"
-# PROP Intermediate_Dir "Debug_TS"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "W32API_EXPORTS" /YX /FD /GZ /c
-# ADD CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /I "..\.." /I "..\..\main" /I "..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\TSRM" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "W32API_EXPORTS" /D HAVE_W32API=1 /D "COMPILE_DL_W32API" /D ZTS=1 /D "ZEND_WIN32" /D "PHP_WIN32" /D ZEND_DEBUG=1 /YX /FD /GZ /c
-# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x809 /d "_DEBUG"
-# ADD RSC /l 0x809 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 php5ts_debug.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /out:"../../Debug_TS/php_w32api.dll" /pdbtype:sept /libpath:"..\..\Debug_TS"
-
-!ELSEIF "$(CFG)" == "w32api - Win32 Release_TS"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "w32api___Win32_Release_TS"
-# PROP BASE Intermediate_Dir "w32api___Win32_Release_TS"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "../../Release_TS"
-# PROP Intermediate_Dir "Release_TS"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "W32API_EXPORTS" /YX /FD /c
-# ADD CPP /nologo /MD /W3 /GX /Zi /O2 /I "..\.." /I "..\..\main" /I "..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\TSRM" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "W32API_EXPORTS" /D "HAVE_W32API" /D "COMPILE_DL_W32API" /D ZTS=1 /D "ZEND_WIN32" /D "PHP_WIN32" /D ZEND_DEBUG=0 /YX /FD /c
-# SUBTRACT CPP /WX /Fr
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x809 /d "NDEBUG"
-# ADD RSC /l 0x809 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386
-# ADD LINK32 php5ts.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /debugtype:both /machine:I386 /out:"../../Release_TS/php_w32api.dll" /libpath:"..\..\Release_TS"
-# SUBTRACT LINK32 /incremental:yes
-
-!ENDIF
-
-# Begin Target
-
-# Name "w32api - Win32 Debug_TS"
-# Name "w32api - Win32 Release_TS"
-# Begin Group "Source Files"
-
-# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
-# Begin Source File
-
-SOURCE=.\w32api.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\w32api_function_definition_parser.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\w32api_function_definition_scanner.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\w32api_type_definition_parser.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\w32api_type_definition_scanner.c
-# End Source File
-# End Group
-# Begin Group "Header Files"
-
-# PROP Default_Filter "h;hpp;hxx;hm;inl"
-# Begin Source File
-
-SOURCE=.\php_w32api.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\w32api_function_definition_parser.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\w32api_type_definition_parser.h
-# End Source File
-# End Group
-# Begin Group "Resource Files"
-
-# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
-# End Group
-# Begin Group "Parsers"
-
-# PROP Default_Filter ".y"
-# Begin Source File
-
-SOURCE=.\w32api_function_definition_parser.y
-
-!IF "$(CFG)" == "w32api - Win32 Debug_TS"
-
-# Begin Custom Build
-InputDir=.
-InputPath=.\w32api_function_definition_parser.y
-
-BuildCmds= \
- bison --output=w32api_function_definition_parser.c -v -d -p w32api_function_definition_ w32api_function_definition_parser.y
-
-"$(InputDir)/w32api_function_definition_parser.c" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- $(BuildCmds)
-
-"$(InputDir)/w32api_function_definition_parser.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- $(BuildCmds)
-# End Custom Build
-
-!ELSEIF "$(CFG)" == "w32api - Win32 Release_TS"
-
-# Begin Custom Build
-InputDir=.
-InputPath=.\w32api_function_definition_parser.y
-
-BuildCmds= \
- bison --output=w32api_function_definition_parser.c -v -d -p w32api_function_definition_ w32api_function_definition_parser.y
-
-"$(InputDir)/w32api_function_definition_parser.c" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- $(BuildCmds)
-
-"$(InputDir)/w32api_function_definition_parser.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- $(BuildCmds)
-# End Custom Build
-
-!ENDIF
-
-# End Source File
-# Begin Source File
-
-SOURCE=.\w32api_type_definition_parser.y
-
-!IF "$(CFG)" == "w32api - Win32 Debug_TS"
-
-# Begin Custom Build
-InputDir=.
-InputPath=.\w32api_type_definition_parser.y
-
-BuildCmds= \
- bison --output=w32api_type_definition_parser.c -v -d -p w32api_type_definition_ w32api_type_definition_parser.y
-
-"$(InputDir)/w32api_type_definition_parser.c" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- $(BuildCmds)
-
-"$(InputDir)/w32api_type_definition_parser.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- $(BuildCmds)
-# End Custom Build
-
-!ELSEIF "$(CFG)" == "w32api - Win32 Release_TS"
-
-# Begin Custom Build
-InputDir=.
-InputPath=.\w32api_type_definition_parser.y
-
-BuildCmds= \
- bison --output=w32api_type_definition_parser.c -v -d -p w32api_type_definition_ w32api_type_definition_parser.y
-
-"$(InputDir)/w32api_type_definition_parser.c" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- $(BuildCmds)
-
-"$(InputDir)/w32api_type_definition_parser.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- $(BuildCmds)
-# End Custom Build
-
-!ENDIF
-
-# End Source File
-# End Group
-# Begin Group "Scanners"
-
-# PROP Default_Filter ".l"
-# Begin Source File
-
-SOURCE=.\w32api_function_definition_scanner.l
-
-!IF "$(CFG)" == "w32api - Win32 Debug_TS"
-
-# Begin Custom Build
-InputDir=.
-InputPath=.\w32api_function_definition_scanner.l
-
-"$(InputDir)\w32api_function_definition_scanner.c" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- flex -B -i -Pw32api_function_definition -ow32api_function_definition_scanner.c w32api_function_definition_scanner.l
-
-# End Custom Build
-
-!ELSEIF "$(CFG)" == "w32api - Win32 Release_TS"
-
-# Begin Custom Build
-InputDir=.
-InputPath=.\w32api_function_definition_scanner.l
-
-"$(InputDir)\w32api_function_definition_scanner.c" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- flex -B -i -Pw32api_function_definition -ow32api_function_definition_scanner.c w32api_function_definition_scanner.l
-
-# End Custom Build
-
-!ENDIF
-
-# End Source File
-# Begin Source File
-
-SOURCE=.\w32api_type_definition_scanner.l
-
-!IF "$(CFG)" == "w32api - Win32 Debug_TS"
-
-# Begin Custom Build
-InputDir=.
-InputPath=.\w32api_type_definition_scanner.l
-
-"$(InputDir)/w32api_type_definition_scanner.c" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- flex -B -i -Pw32api_type_definition -ow32api_type_definition_scanner.c w32api_type_definition_scanner.l
-
-# End Custom Build
-
-!ELSEIF "$(CFG)" == "w32api - Win32 Release_TS"
-
-# Begin Custom Build
-InputDir=.
-InputPath=.\w32api_type_definition_scanner.l
-
-"$(InputDir)/w32api_type_definition_scanner.c" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- flex -B -i -Pw32api_type_definition -ow32api_type_definition_scanner.c w32api_type_definition_scanner.l
-
-# End Custom Build
-
-!ENDIF
-
-# End Source File
-# End Group
-# End Target
-# End Project
diff --git a/ext/w32api/w32api_function_definition_parser.y b/ext/w32api/w32api_function_definition_parser.y
deleted file mode 100644
index 8967629814..0000000000
--- a/ext/w32api/w32api_function_definition_parser.y
+++ /dev/null
@@ -1,67 +0,0 @@
-%{
-/*
- +----------------------------------------------------------------------+
- | PHP version 4.0 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2001 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. |
- +----------------------------------------------------------------------+
- | Authors: James Moore <jmoore@php.net> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-#include <stdio.h>
-#include <stdlib.h>
-#define WIN32_LEAN_AND_MEAN
-#include <windows.h>
-#include <string.h>
-
-#include "php.h"
-#include "php_ini.h"
-#include "ext/standard/info.h"
-#include "ext/standard/php_string.h"
-#include "php_w32api.h"
-
-
-#define YYSTYPE w32api_parser_function_definition_union
-#define YYPARSE_PARAM fh
-
-int w32api_function_definition_lex(w32api_parser_function_definition_union *funcdef_lval);
-
-%}
-
-%pure_parser
-
-%token tFROM
-%token tBYREF
-%token tALIAS
-%token <s> tIDENTIFIER
-%token <s> tFILENAME
-
-%type <arg> argument argument_list
-
-%start funcdef
-
-%%
-
-funcdef: tIDENTIFIER tIDENTIFIER tALIAS tIDENTIFIER'(' argument_list ')' tFROM tFILENAME {((w32api_func_handle_ptr *)fh)->hnd = w32api_parser_load_alias_function($1, $2, $4, $6, $9);}
- | tIDENTIFIER tIDENTIFIER '(' argument_list ')' tFROM tFILENAME {((w32api_func_handle_ptr *)fh)->hnd = w32api_parser_load_function($1, $2, $4, $7);}
-;
-
-argument_list: argument ',' argument_list { $$ = w32api_parser_join_arguments($1, $3);}
- | argument {$$ = $1;}
- | {$$ = NULL;}
-;
-
-argument: tIDENTIFIER tIDENTIFIER { $$ = w32api_parser_make_argument_byval($1, $2); }
- | tIDENTIFIER tBYREF tIDENTIFIER { $$ = w32api_parser_make_argument_byref($1, $3); }
-;
diff --git a/ext/w32api/w32api_function_definition_scanner.l b/ext/w32api/w32api_function_definition_scanner.l
deleted file mode 100644
index e49e9348ec..0000000000
--- a/ext/w32api/w32api_function_definition_scanner.l
+++ /dev/null
@@ -1,63 +0,0 @@
-%{
-/*
- +----------------------------------------------------------------------+
- | PHP version 4.0 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2001 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. |
- +----------------------------------------------------------------------+
- | Authors: James Moore <jmoore@php.net> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-
-#include <stdio.h>
-#include <stdlib.h>
-#define WIN32_LEAN_AND_MEAN
-#include <windows.h>
-#include <string.h>
-
-#include "php.h"
-#include "php_ini.h"
-#include "ext/standard/info.h"
-#include "ext/standard/php_string.h"
-#include "php_w32api.h"
-#include "w32api_function_definition_parser.h"
-
-#ifdef YYSTYPE
-#undef YYSTYPE
-#endif
-
-#define YYSTYPE w32api_parser_function_definition_union
-
-#define YY_DECL int w32api_function_definition_lex(w32api_parser_function_definition_union *funcdef_lval)
-
-
-%}
-
-ID [A-Za-z][A-Za-z0-9_]*
-FILENAME {ID}\.{ID}
-
-%option noyywrap
-
-%%
-
-"from" {return tFROM;}
-"alias" {return tALIAS;}
-"&" {return tBYREF;}
-{FILENAME} {funcdef_lval->s = estrdup(yytext); return tFILENAME;}
-{ID} {funcdef_lval->s = estrdup(yytext); return tIDENTIFIER;}
-[ \r\t\n] /* Ignore Whitespace */
-. {return *yytext;}
-
-%%
-
diff --git a/ext/w32api/w32api_type_definition_parser.y b/ext/w32api/w32api_type_definition_parser.y
deleted file mode 100644
index 3e98cf40f1..0000000000
--- a/ext/w32api/w32api_type_definition_parser.y
+++ /dev/null
@@ -1,67 +0,0 @@
-%{
-/*
- +----------------------------------------------------------------------+
- | PHP version 4.0 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2001 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. |
- +----------------------------------------------------------------------+
- | Authors: James Moore <jmoore@php.net> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-#include <stdio.h>
-#include <stdlib.h>
-#define WIN32_LEAN_AND_MEAN
-#include <windows.h>
-#include <string.h>
-
-#include "php.h"
-#include "php_ini.h"
-#include "ext/standard/info.h"
-#include "ext/standard/php_string.h"
-#include "php_w32api.h"
-
-#define YYSTYPE w32api_parser_type_definition_union
-#define YYPARSE_PARAM th
-
-int w32api_type_definition_lex(w32api_parser_type_definition_union *typedef_lval);
-
-%}
-
-%pure_parser
-
-%token <s> tTYPEID
-%token tBYREF
-
-%type <type> value_list value
-
-%%
-
-start:
- type_definition
-;
-
-type_definition:
- tTYPEID '{' value_list '}' {((w32api_type_handle_ptr *)th)->hnd = w32api_parser_register_type($1, $3);}
-;
-
-value_list:
- value ';' value_list {$$ = w32api_parser_type_join_values($1, $3);}
- | value ';' {$$ = $1;}
-;
-
-value:
- tTYPEID tTYPEID {$$ = w32api_parser_type_make_byval_value($1, $2);}
- | tTYPEID tBYREF tTYPEID {$$ = w32api_parser_type_make_byref_value($1, $3);}
-;
-
diff --git a/ext/w32api/w32api_type_definition_scanner.l b/ext/w32api/w32api_type_definition_scanner.l
deleted file mode 100644
index 2f0cdbe9af..0000000000
--- a/ext/w32api/w32api_type_definition_scanner.l
+++ /dev/null
@@ -1,56 +0,0 @@
-%{
-/*
- +----------------------------------------------------------------------+
- | PHP version 4.0 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2001 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. |
- +----------------------------------------------------------------------+
- | Authors: James Moore <jmoore@php.net> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-#include <stdio.h>
-#include <stdlib.h>
-#define WIN32_LEAN_AND_MEAN
-#include <windows.h>
-#include <string.h>
-
-#include "php.h"
-#include "php_ini.h"
-#include "ext/standard/info.h"
-#include "ext/standard/php_string.h"
-#include "php_w32api.h"
-#include "w32api_type_definition_parser.h"
-
-#ifdef YYSTYPE
-#undef YYSTYPE
-#endif
-
-#define YYSTYPE w32api_parser_type_definition_union
-
-#define YY_DECL int w32api_type_definition_lex(w32api_parser_type_definition_union *typedef_lval)
-
-%}
-
-TYPEID [A-Za-z][A-Za-z0-9_]*
-
-%option noyywrap
-
-%%
-
-"&" {return tBYREF;}
-{TYPEID} {typedef_lval->s = estrdup(yytext); return tTYPEID;}
-[ \r\t\n] /* Ignore Whitespace */
-. {return *yytext;}
-
-%% \ No newline at end of file
diff --git a/ext/wddx/CREDITS b/ext/wddx/CREDITS
deleted file mode 100644
index 4c98513048..0000000000
--- a/ext/wddx/CREDITS
+++ /dev/null
@@ -1,2 +0,0 @@
-WDDX
-Andrei Zmievski
diff --git a/ext/wddx/config.m4 b/ext/wddx/config.m4
deleted file mode 100644
index 856af34f52..0000000000
--- a/ext/wddx/config.m4
+++ /dev/null
@@ -1,15 +0,0 @@
-dnl
-dnl $Id$
-dnl
-
-PHP_ARG_ENABLE(wddx,whether to enable WDDX support,
-[ --enable-wddx Enable WDDX support.])
-
-if test "$PHP_WDDX" != "no"; then
- if test "$ext_shared" != "yes" && test "$enable_xml" = "no"; then
- AC_MSG_WARN(Activating XML)
- enable_xml=yes
- fi
- AC_DEFINE(HAVE_WDDX, 1, [ ])
- PHP_NEW_EXTENSION(wddx, wddx.c, $ext_shared)
-fi
diff --git a/ext/wddx/config.w32 b/ext/wddx/config.w32
deleted file mode 100644
index d88523ca36..0000000000
--- a/ext/wddx/config.w32
+++ /dev/null
@@ -1,12 +0,0 @@
-// $Id$
-// vim:ft=javascript
-
-ARG_WITH("wddx", "WDDX support", "yes");
-
-if (PHP_WDDX == "yes" && PHP_LIBXML == "yes") {
- EXTENSION("wddx", "wddx.c");
- AC_DEFINE("HAVE_WDDX", 1, "WDDX support");
- ADD_EXTENSION_DEP('wddx', 'libxml');
-}
-
-
diff --git a/ext/wddx/package.xml b/ext/wddx/package.xml
deleted file mode 100644
index 4351d356bb..0000000000
--- a/ext/wddx/package.xml
+++ /dev/null
@@ -1,43 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1" ?>
-<!DOCTYPE package SYSTEM "../pear/package.dtd">
-<package>
- <name>wddx</name>
- <summary>WDDX serialization functions</summary>
- <maintainers>
- <maintainer>
- <user>andrei</user>
- <name>Andrei Zmievski</name>
- <email>andrei@php.net</email>
- <role>lead</role>
- </maintainer>
- </maintainers>
- <description>
-These functions are intended for work with WDDX (http://www.openwddx.org/)
- </description>
- <license>PHP</license>
- <release>
- <state>beta</state>
- <version>5.0.0rc1</version>
- <date>2004-03-19</date>
- <notes>
-package.xml added to support intallation using pear installer
- </notes>
- <filelist>
- <file role="doc" name="CREDITS"/>
- <file role="src" name="config.m4"/>
- <file role="src" name="config.w32"/>
- <file role="src" name="wddx.c"/>
- <file role="src" name="php_wddx.h"/>
- <file role="src" name="php_wddx_api.h"/>
- <file role="test" name="tests/001.phpt"/>
- <file role="test" name="tests/wddx.xml"/>
- <file role="test" name="tests/bug27287.phpt"/>
- </filelist>
- <deps>
- <dep type="php" rel="ge" version="5" />
- </deps>
- </release>
-</package>
-<!--
-vim:et:ts=1:sw=1
--->
diff --git a/ext/wddx/php_wddx.h b/ext/wddx/php_wddx.h
deleted file mode 100644
index b99ca7a02d..0000000000
--- a/ext/wddx/php_wddx.h
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Andrei Zmievski <andrei@php.net> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-#ifndef PHP_WDDX_H
-#define PHP_WDDX_H
-
-#if HAVE_WDDX
-
-extern zend_module_entry wddx_module_entry;
-#define wddx_module_ptr &wddx_module_entry
-
-PHP_FUNCTION(wddx_serialize_value);
-PHP_FUNCTION(wddx_serialize_vars);
-PHP_FUNCTION(wddx_packet_start);
-PHP_FUNCTION(wddx_packet_end);
-PHP_FUNCTION(wddx_add_vars);
-PHP_FUNCTION(wddx_deserialize);
-
-#else
-
-#define wddx_module_ptr NULL
-
-#endif /* HAVE_WDDX */
-
-#define phpext_wddx_ptr wddx_module_ptr
-
-#endif /* !PHP_WDDX_H */
diff --git a/ext/wddx/php_wddx_api.h b/ext/wddx/php_wddx_api.h
deleted file mode 100644
index b7264e9d64..0000000000
--- a/ext/wddx/php_wddx_api.h
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Andrei Zmievski <andrei@ispi.net> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-#ifndef PHP_WDDX_API_H
-#define PHP_WDDX_API_H
-
-#include "ext/standard/php_smart_str.h"
-
-#define WDDX_ARRAY_S "<array length='%d'>"
-#define WDDX_ARRAY_E "</array>"
-#define WDDX_BINARY_S "<binary>"
-#define WDDX_BINARY_E "</binary>"
-#define WDDX_BOOLEAN "<boolean value='%s'/>"
-#define WDDX_CHAR "<char code='%02X'/>"
-#define WDDX_COMMENT_S "<comment>"
-#define WDDX_COMMENT_E "</comment>"
-#define WDDX_DATA_S "<data>"
-#define WDDX_DATA_E "</data>"
-#define WDDX_HEADER "<header/>"
-#define WDDX_HEADER_S "<header>"
-#define WDDX_HEADER_E "</header>"
-#define WDDX_NULL "<null/>"
-#define WDDX_NUMBER "<number>%s</number>"
-#define WDDX_PACKET_S "<wddxPacket version='1.0'>"
-#define WDDX_PACKET_E "</wddxPacket>"
-#define WDDX_STRING_S "<string>"
-#define WDDX_STRING_E "</string>"
-#define WDDX_STRUCT_S "<struct>"
-#define WDDX_STRUCT_E "</struct>"
-#define WDDX_VAR_S "<var name='%s'>"
-#define WDDX_VAR_E "</var>"
-
-#define php_wddx_add_chunk(packet, str) smart_str_appends(packet, str)
-#define php_wddx_add_chunk_ex(packet, str, len) smart_str_appendl(packet, str, len)
-#define php_wddx_add_chunk_static(packet, str) smart_str_appendl(packet, str, sizeof(str)-1)
-
-typedef smart_str wddx_packet;
-
-wddx_packet* php_wddx_constructor(void);
-void php_wddx_destructor(wddx_packet *packet);
-
-void php_wddx_packet_start(wddx_packet *packet, char *comment, int comment_len);
-void php_wddx_packet_end(wddx_packet *packet);
-
-void php_wddx_serialize_var(wddx_packet *packet, zval *var, char *name, int name_len TSRMLS_DC);
-int php_wddx_deserialize_ex(char *, int, zval *return_value);
-#define php_wddx_gather(packet) estrndup(packet->c, packet->len)
-
-#endif /* PHP_WDDX_API_H */
diff --git a/ext/wddx/tests/001.phpt b/ext/wddx/tests/001.phpt
deleted file mode 100644
index 3aae148530..0000000000
--- a/ext/wddx/tests/001.phpt
+++ /dev/null
@@ -1,57 +0,0 @@
---TEST--
-wddx deserialization test
---FILE--
-<?php
- $path = dirname(__FILE__);
- var_dump(wddx_deserialize(file_get_contents("{$path}/wddx.xml")));
-?>
---EXPECT--
-array(11) {
- ["aNull"]=>
- NULL
- ["aString"]=>
- string(8) "a string"
- ["aNumber"]=>
- float(-12.456)
- ["aDateTime"]=>
- int(897625932)
- ["aDateTime2"]=>
- int(329632332)
- ["aDateTime3"]=>
- string(22) "2040-06-12T04:32:12+00"
- ["aBoolean"]=>
- bool(true)
- ["anArray"]=>
- array(2) {
- [0]=>
- int(10)
- [1]=>
- string(14) "second element"
- }
- ["aBinary"]=>
- string(11) "binary data"
- ["anObject"]=>
- array(2) {
- ["s"]=>
- string(8) "a string"
- ["n"]=>
- float(-12.456)
- }
- ["aRecordset"]=>
- array(2) {
- ["NAME"]=>
- array(2) {
- [0]=>
- string(8) "John Doe"
- [1]=>
- string(8) "Jane Doe"
- }
- ["AGE"]=>
- array(2) {
- [0]=>
- int(34)
- [1]=>
- int(31)
- }
- }
-}
diff --git a/ext/wddx/tests/bug27287.phpt b/ext/wddx/tests/bug27287.phpt
deleted file mode 100755
index 3183fbc2a0..0000000000
--- a/ext/wddx/tests/bug27287.phpt
+++ /dev/null
@@ -1,18 +0,0 @@
---TEST--
-Bug #27287 (segfault with deserializing object data)
---FILE--
-<?php
-
- class foo {
- }
- $foo = new foo();
- $foo->abc = 'def';
-
- $string = wddx_serialize_value($foo);
- $bar = wddx_deserialize($string);
-
- echo "OK\n";
-
-?>
---EXPECT--
-OK
diff --git a/ext/wddx/tests/wddx.xml b/ext/wddx/tests/wddx.xml
deleted file mode 100644
index 46ad58d664..0000000000
--- a/ext/wddx/tests/wddx.xml
+++ /dev/null
@@ -1,60 +0,0 @@
-<?xml version='1.0'?>
-<!DOCTYPE wddxPacket SYSTEM 'wddx_0100.dtd'>
-<wddxPacket version='1.0'>
-<header/>
- <data>
- <struct>
- <var name='aNull'>
- <null/>
- </var>
- <var name='aString'>
- <string>a string</string>
- </var>
- <var name='aNumber'>
- <number>-12.456</number>
- </var>
- <var name='aDateTime'>
- <dateTime>1998-06-12T04:32:12+00</dateTime>
- </var>
- <var name='aDateTime2'>
- <dateTime>1980-06-12T04:32:12+00</dateTime>
- </var>
- <var name='aDateTime3'>
- <dateTime>2040-06-12T04:32:12</dateTime>
- </var>
- <var name='aBoolean'>
- <boolean value='true'/>
- </var>
- <var name='anArray'>
- <array length='2'>
- <number>10</number>
- <string>second element</string>
- </array>
- </var>
- <var name='aBinary'>
- <binary length='11'>YmluYXJ5IGRhdGE=</binary>
- </var>
- <var name='anObject'>
- <struct>
- <var name='s'>
- <string>a string</string>
- </var>
- <var name='n'>
- <number>-12.456</number>
- </var>
- </struct>
- </var>
- <var name='aRecordset'>
- <recordset rowCount='2' fieldNames='NAME,AGE'>
- <field name='NAME'>
- <string>John Doe</string>
- <string>Jane Doe</string>
- </field>
- <field name='AGE'>
- <number>34</number>
- <number>31</number>
- </field>
- </recordset>
- </struct>
- </data>
-</wddxPacket>
diff --git a/ext/wddx/wddx.c b/ext/wddx/wddx.c
deleted file mode 100644
index 59c5188505..0000000000
--- a/ext/wddx/wddx.c
+++ /dev/null
@@ -1,1340 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Andrei Zmievski <andrei@php.net> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-#include "php.h"
-
-#if HAVE_WDDX
-
-#include "ext/xml/expat_compat.h"
-#include "php_wddx.h"
-#include "php_wddx_api.h"
-
-#define PHP_XML_INTERNAL
-#include "ext/xml/php_xml.h"
-#include "ext/standard/php_incomplete_class.h"
-#include "ext/standard/base64.h"
-#include "ext/standard/info.h"
-#include "ext/standard/php_smart_str.h"
-#include "ext/standard/html.h"
-#include "ext/standard/php_string.h"
-#include "ext/standard/php_parsedate.h"
-
-#define WDDX_BUF_LEN 256
-#define PHP_CLASS_NAME_VAR "php_class_name"
-
-#define EL_ARRAY "array"
-#define EL_BINARY "binary"
-#define EL_BOOLEAN "boolean"
-#define EL_CHAR "char"
-#define EL_CHAR_CODE "code"
-#define EL_NULL "null"
-#define EL_NUMBER "number"
-#define EL_PACKET "wddxPacket"
-#define EL_STRING "string"
-#define EL_STRUCT "struct"
-#define EL_VALUE "value"
-#define EL_VAR "var"
-#define EL_NAME "name"
-#define EL_VERSION "version"
-#define EL_RECORDSET "recordset"
-#define EL_FIELD "field"
-#define EL_DATETIME "dateTime"
-
-#define php_wddx_deserialize(a,b) \
- php_wddx_deserialize_ex((a)->value.str.val, (a)->value.str.len, (b))
-
-#define SET_STACK_VARNAME \
- if (stack->varname) { \
- ent.varname = estrdup(stack->varname); \
- efree(stack->varname); \
- stack->varname = NULL; \
- } else \
- ent.varname = NULL; \
-
-static int le_wddx;
-
-typedef struct {
- zval *data;
- enum {
- ST_ARRAY,
- ST_BOOLEAN,
- ST_NULL,
- ST_NUMBER,
- ST_STRING,
- ST_BINARY,
- ST_STRUCT,
- ST_RECORDSET,
- ST_FIELD,
- ST_DATETIME
- } type;
- char *varname;
-} st_entry;
-
-typedef struct {
- int top, max;
- char *varname;
- zend_bool done;
- void **elements;
-} wddx_stack;
-
-
-static void php_wddx_process_data(void *user_data, const XML_Char *s, int len);
-
-/* {{{ wddx_functions[]
- */
-function_entry wddx_functions[] = {
- PHP_FE(wddx_serialize_value, NULL)
- PHP_FE(wddx_serialize_vars, NULL)
- PHP_FE(wddx_packet_start, NULL)
- PHP_FE(wddx_packet_end, NULL)
- PHP_FE(wddx_add_vars, NULL)
- PHP_FE(wddx_deserialize, NULL)
- {NULL, NULL, NULL}
-};
-/* }}} */
-
-PHP_MINIT_FUNCTION(wddx);
-PHP_MINFO_FUNCTION(wddx);
-
-/* {{{ dynamically loadable module stuff */
-#ifdef COMPILE_DL_WDDX
-ZEND_GET_MODULE(wddx)
-#endif /* COMPILE_DL_WDDX */
-/* }}} */
-
-/* {{{ wddx_module_entry
- */
-zend_module_entry wddx_module_entry = {
- STANDARD_MODULE_HEADER,
- "wddx",
- wddx_functions,
- PHP_MINIT(wddx),
- NULL,
- NULL,
- NULL,
- PHP_MINFO(wddx),
- NO_VERSION_YET,
- STANDARD_MODULE_PROPERTIES
-};
-/* }}} */
-
-/* {{{ wddx_stack_init
- */
-static int wddx_stack_init(wddx_stack *stack)
-{
- stack->top = 0;
- stack->elements = (void **) safe_emalloc(sizeof(void **), STACK_BLOCK_SIZE, 0);
- stack->max = STACK_BLOCK_SIZE;
- stack->varname = NULL;
- stack->done = 0;
-
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ wddx_stack_push
- */
-static int wddx_stack_push(wddx_stack *stack, void *element, int size)
-{
- if (stack->top >= stack->max) { /* we need to allocate more memory */
- stack->elements = (void **) erealloc(stack->elements,
- (sizeof(void **) * (stack->max += STACK_BLOCK_SIZE)));
- }
- stack->elements[stack->top] = (void *) emalloc(size);
- memcpy(stack->elements[stack->top], element, size);
- return stack->top++;
-}
-/* }}} */
-
-/* {{{ wddx_stack_top
- */
-static int wddx_stack_top(wddx_stack *stack, void **element)
-{
- if (stack->top > 0) {
- *element = stack->elements[stack->top - 1];
- return SUCCESS;
- } else {
- *element = NULL;
- return FAILURE;
- }
-}
-/* }}} */
-
-/* {{{ wddx_stack_is_empty
- */
-static int wddx_stack_is_empty(wddx_stack *stack)
-{
- if (stack->top == 0) {
- return 1;
- } else {
- return 0;
- }
-}
-/* }}} */
-
-/* {{{ wddx_stack_destroy
- */
-static int wddx_stack_destroy(wddx_stack *stack)
-{
- register int i;
-
- if (stack->elements) {
- for (i = 0; i < stack->top; i++) {
- if (((st_entry *)stack->elements[i])->data)
- {
- zval_ptr_dtor(&((st_entry *)stack->elements[i])->data);
- }
- if (((st_entry *)stack->elements[i])->varname)
- efree(((st_entry *)stack->elements[i])->varname);
- efree(stack->elements[i]);
- }
- efree(stack->elements);
- }
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ release_wddx_packet_rsrc
- */
-static void release_wddx_packet_rsrc(zend_rsrc_list_entry *rsrc TSRMLS_DC)
-{
- smart_str *str = (smart_str *)rsrc->ptr;
- smart_str_free(str);
- efree(str);
-}
-/* }}} */
-
-#include "ext/session/php_session.h"
-
-#if HAVE_PHP_SESSION
-/* {{{ PS_SERIALIZER_ENCODE_FUNC
- */
-PS_SERIALIZER_ENCODE_FUNC(wddx)
-{
- wddx_packet *packet;
- PS_ENCODE_VARS;
-
- packet = php_wddx_constructor();
-
- php_wddx_packet_start(packet, NULL, 0);
- php_wddx_add_chunk_static(packet, WDDX_STRUCT_S);
-
- PS_ENCODE_LOOP(
- php_wddx_serialize_var(packet, *struc, key, key_length TSRMLS_CC);
- );
-
- php_wddx_add_chunk_static(packet, WDDX_STRUCT_E);
- php_wddx_packet_end(packet);
- *newstr = php_wddx_gather(packet);
- php_wddx_destructor(packet);
-
- if (newlen)
- *newlen = strlen(*newstr);
-
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ PS_SERIALIZER_DECODE_FUNC
- */
-PS_SERIALIZER_DECODE_FUNC(wddx)
-{
- zval *retval;
- zval **ent;
- char *key;
- uint key_length;
- char tmp[128];
- ulong idx;
- int hash_type;
- int ret;
-
- if (vallen == 0)
- return SUCCESS;
-
- MAKE_STD_ZVAL(retval);
-
- if ((ret = php_wddx_deserialize_ex((char *)val, vallen, retval)) == SUCCESS) {
-
- for (zend_hash_internal_pointer_reset(Z_ARRVAL_P(retval));
- zend_hash_get_current_data(Z_ARRVAL_P(retval), (void **) &ent) == SUCCESS;
- zend_hash_move_forward(Z_ARRVAL_P(retval))) {
- hash_type = zend_hash_get_current_key_ex(Z_ARRVAL_P(retval), &key, &key_length, &idx, 0, NULL);
-
- switch (hash_type) {
- case HASH_KEY_IS_LONG:
- sprintf(tmp, "%ld", idx);
- key = tmp;
- /* fallthru */
- case HASH_KEY_IS_STRING:
- php_set_session_var(key, key_length-1, *ent, NULL TSRMLS_CC);
- PS_ADD_VAR(key);
- }
- }
- }
-
- zval_ptr_dtor(&retval);
-
- return ret;
-}
-/* }}} */
-#endif
-
-/* {{{ PHP_MINIT_FUNCTION
- */
-PHP_MINIT_FUNCTION(wddx)
-{
- le_wddx = zend_register_list_destructors_ex(release_wddx_packet_rsrc, NULL, "wddx", module_number);
-
-#if HAVE_PHP_SESSION
- php_session_register_serializer("wddx",
- PS_SERIALIZER_ENCODE_NAME(wddx),
- PS_SERIALIZER_DECODE_NAME(wddx));
-#endif
-
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ PHP_MINFO_FUNCTION
- */
-PHP_MINFO_FUNCTION(wddx)
-{
- php_info_print_table_start();
-#if HAVE_PHP_SESSION
- php_info_print_table_header(2, "WDDX Support", "enabled" );
- php_info_print_table_row(2, "WDDX Session Serializer", "enabled" );
-#else
- php_info_print_table_row(2, "WDDX Support", "enabled" );
-#endif
- php_info_print_table_end();
-}
-/* }}} */
-
-/* {{{ php_wddx_packet_start
- */
-void php_wddx_packet_start(wddx_packet *packet, char *comment, int comment_len)
-{
- php_wddx_add_chunk_static(packet, WDDX_PACKET_S);
- if (comment) {
- php_wddx_add_chunk_static(packet, WDDX_HEADER_S);
- php_wddx_add_chunk_static(packet, WDDX_COMMENT_S);
- php_wddx_add_chunk_ex(packet, comment, comment_len);
- php_wddx_add_chunk_static(packet, WDDX_COMMENT_E);
- php_wddx_add_chunk_static(packet, WDDX_HEADER_E);
- } else
- php_wddx_add_chunk_static(packet, WDDX_HEADER);
- php_wddx_add_chunk_static(packet, WDDX_DATA_S);
-}
-/* }}} */
-
-/* {{{ php_wddx_packet_end
- */
-void php_wddx_packet_end(wddx_packet *packet)
-{
- php_wddx_add_chunk_static(packet, WDDX_DATA_E);
- php_wddx_add_chunk_static(packet, WDDX_PACKET_E);
-}
-/* }}} */
-
-#define FLUSH_BUF() \
- if (l > 0) { \
- php_wddx_add_chunk_ex(packet, buf, l); \
- l = 0; \
- }
-
-/* {{{ php_wddx_serialize_string
- */
-static void php_wddx_serialize_string(wddx_packet *packet, zval *var)
-{
- char *buf,
- *p,
- *vend,
- control_buf[WDDX_BUF_LEN];
- int l;
-
- php_wddx_add_chunk_static(packet, WDDX_STRING_S);
-
- if (Z_STRLEN_P(var) > 0) {
- l = 0;
- vend = Z_STRVAL_P(var) + Z_STRLEN_P(var);
- buf = (char *)emalloc(Z_STRLEN_P(var) + 1);
-
- for(p = Z_STRVAL_P(var); p != vend; p++) {
- switch (*p) {
- case '<':
- FLUSH_BUF();
- php_wddx_add_chunk_static(packet, "&lt;");
- break;
-
- case '&':
- FLUSH_BUF();
- php_wddx_add_chunk_static(packet, "&amp;");
- break;
-
- case '>':
- FLUSH_BUF();
- php_wddx_add_chunk_static(packet, "&gt;");
- break;
-
- default:
- if (iscntrl((int)*(unsigned char *)p)) {
- FLUSH_BUF();
- sprintf(control_buf, WDDX_CHAR, *p);
- php_wddx_add_chunk(packet, control_buf);
- } else
- buf[l++] = *p;
- break;
- }
- }
-
- FLUSH_BUF();
- efree(buf);
- }
-
- php_wddx_add_chunk_static(packet, WDDX_STRING_E);
-}
-/* }}} */
-
-/* {{{ php_wddx_serialize_number
- */
-static void php_wddx_serialize_number(wddx_packet *packet, zval *var)
-{
- char tmp_buf[WDDX_BUF_LEN];
- zval tmp;
-
- tmp = *var;
- zval_copy_ctor(&tmp);
- convert_to_string(&tmp);
- sprintf(tmp_buf, WDDX_NUMBER, Z_STRVAL(tmp));
- zval_dtor(&tmp);
-
- php_wddx_add_chunk(packet, tmp_buf);
-}
-/* }}} */
-
-/* {{{ php_wddx_serialize_boolean
- */
-static void php_wddx_serialize_boolean(wddx_packet *packet, zval *var)
-{
- char tmp_buf[WDDX_BUF_LEN];
-
- sprintf(tmp_buf, WDDX_BOOLEAN, Z_LVAL_P(var) ? "true" : "false");
- php_wddx_add_chunk(packet, tmp_buf);
-}
-/* }}} */
-
-/* {{{ php_wddx_serialize_unset
- */
-static void php_wddx_serialize_unset(wddx_packet *packet)
-{
- php_wddx_add_chunk_static(packet, WDDX_NULL);
-}
-/* }}} */
-
-/* {{{ php_wddx_serialize_object
- */
-static void php_wddx_serialize_object(wddx_packet *packet, zval *obj)
-{
-/* OBJECTS_FIXME */
- zval **ent, *fname, **varname;
- zval *retval = NULL;
- char *key;
- ulong idx;
- char tmp_buf[WDDX_BUF_LEN];
- TSRMLS_FETCH();
-
- MAKE_STD_ZVAL(fname);
- ZVAL_STRING(fname, "__sleep", 1);
-
- /*
- * We try to call __sleep() method on object. It's supposed to return an
- * 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)) {
- PHP_CLASS_ATTRIBUTES;
-
- PHP_SET_CLASS_ATTRIBUTES(obj);
-
- php_wddx_add_chunk_static(packet, WDDX_STRUCT_S);
- sprintf(tmp_buf, WDDX_VAR_S, PHP_CLASS_NAME_VAR);
- php_wddx_add_chunk(packet, tmp_buf);
- php_wddx_add_chunk_static(packet, WDDX_STRING_S);
- php_wddx_add_chunk_ex(packet, class_name, name_len);
- php_wddx_add_chunk_static(packet, WDDX_STRING_E);
- php_wddx_add_chunk_static(packet, WDDX_VAR_E);
-
- PHP_CLEANUP_CLASS_ATTRIBUTES();
-
- 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))) {
- 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) {
- php_wddx_serialize_var(packet, *ent, Z_STRVAL_PP(varname), Z_STRLEN_PP(varname) TSRMLS_CC);
- }
- }
-
- php_wddx_add_chunk_static(packet, WDDX_STRUCT_E);
- }
- } else {
- uint key_len;
-
- PHP_CLASS_ATTRIBUTES;
-
- PHP_SET_CLASS_ATTRIBUTES(obj);
-
- php_wddx_add_chunk_static(packet, WDDX_STRUCT_S);
- sprintf(tmp_buf, WDDX_VAR_S, PHP_CLASS_NAME_VAR);
- php_wddx_add_chunk(packet, tmp_buf);
- php_wddx_add_chunk_static(packet, WDDX_STRING_S);
- php_wddx_add_chunk_ex(packet, class_name, name_len);
- php_wddx_add_chunk_static(packet, WDDX_STRING_E);
- php_wddx_add_chunk_static(packet, WDDX_VAR_E);
-
- 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)
- continue;
-
- if (zend_hash_get_current_key_ex(HASH_OF(obj), &key, &key_len, &idx, 0, NULL) == HASH_KEY_IS_STRING) {
- php_wddx_serialize_var(packet, *ent, key, key_len TSRMLS_CC);
- } else {
- key_len = sprintf(tmp_buf, "%ld", idx);
- php_wddx_serialize_var(packet, *ent, tmp_buf, key_len TSRMLS_CC);
- }
- }
- php_wddx_add_chunk_static(packet, WDDX_STRUCT_E);
- }
-
- zval_dtor(fname);
- FREE_ZVAL(fname);
-
- if (retval) {
- zval_ptr_dtor(&retval);
- }
-}
-/* }}} */
-
-/* {{{ php_wddx_serialize_array
- */
-static void php_wddx_serialize_array(wddx_packet *packet, zval *arr)
-{
- zval **ent;
- char *key;
- uint key_len;
- int is_struct = 0, ent_type;
- ulong idx;
- HashTable *target_hash;
- char tmp_buf[WDDX_BUF_LEN];
- ulong ind = 0;
- int type;
- TSRMLS_FETCH();
-
- target_hash = HASH_OF(arr);
-
- for (zend_hash_internal_pointer_reset(target_hash);
- zend_hash_get_current_data(target_hash, (void**)&ent) == SUCCESS;
- zend_hash_move_forward(target_hash)) {
-
- type = zend_hash_get_current_key(target_hash, &key, &idx, 0);
-
- if (type == HASH_KEY_IS_STRING) {
- is_struct = 1;
- break;
- }
-
- if (idx != ind) {
- is_struct = 1;
- break;
- }
-
- ind++;
- }
-
- if (is_struct) {
- php_wddx_add_chunk_static(packet, WDDX_STRUCT_S);
- } else {
- sprintf(tmp_buf, WDDX_ARRAY_S, zend_hash_num_elements(target_hash));
- php_wddx_add_chunk(packet, tmp_buf);
- }
-
- for (zend_hash_internal_pointer_reset(target_hash);
- zend_hash_get_current_data(target_hash, (void**)&ent) == SUCCESS;
- zend_hash_move_forward(target_hash)) {
- if (*ent == arr)
- continue;
-
- if (is_struct) {
- ent_type = zend_hash_get_current_key_ex(target_hash, &key, &key_len, &idx, 0, NULL);
-
- if (ent_type == HASH_KEY_IS_STRING) {
- php_wddx_serialize_var(packet, *ent, key, key_len TSRMLS_CC);
- } else {
- key_len = sprintf(tmp_buf, "%ld", idx);
- php_wddx_serialize_var(packet, *ent, tmp_buf, key_len TSRMLS_CC);
- }
- } else
- php_wddx_serialize_var(packet, *ent, NULL, 0 TSRMLS_CC);
- }
-
- if (is_struct) {
- php_wddx_add_chunk_static(packet, WDDX_STRUCT_E);
- } else {
- php_wddx_add_chunk_static(packet, WDDX_ARRAY_E);
- }
-}
-/* }}} */
-
-/* {{{ php_wddx_serialize_var
- */
-void php_wddx_serialize_var(wddx_packet *packet, zval *var, char *name, int name_len TSRMLS_DC)
-{
- char tmp_buf[WDDX_BUF_LEN];
- char *name_esc;
- int name_esc_len;
-
- if (name) {
- name_esc = php_escape_html_entities(name, name_len, &name_esc_len, 0, ENT_QUOTES, NULL TSRMLS_CC);
- sprintf(tmp_buf, WDDX_VAR_S, name_esc);
- php_wddx_add_chunk(packet, tmp_buf);
- efree(name_esc);
- }
-
- switch(Z_TYPE_P(var)) {
- case IS_STRING:
- php_wddx_serialize_string(packet, var);
- break;
-
- case IS_LONG:
- case IS_DOUBLE:
- php_wddx_serialize_number(packet, var);
- break;
-
- case IS_BOOL:
- php_wddx_serialize_boolean(packet, var);
- break;
-
- case IS_NULL:
- php_wddx_serialize_unset(packet);
- break;
-
- case IS_ARRAY:
- php_wddx_serialize_array(packet, var);
- break;
-
- case IS_OBJECT:
- php_wddx_serialize_object(packet, var);
- break;
- }
-
- if (name) {
- php_wddx_add_chunk_static(packet, WDDX_VAR_E);
- }
-}
-/* }}} */
-
-/* {{{ php_wddx_add_var
- */
-static void php_wddx_add_var(wddx_packet *packet, zval *name_var)
-{
- zval **val;
- HashTable *target_hash;
- TSRMLS_FETCH();
-
- if (Z_TYPE_P(name_var) == IS_STRING)
- {
- if (zend_hash_find(EG(active_symbol_table), Z_STRVAL_P(name_var),
- Z_STRLEN_P(name_var)+1, (void**)&val) != FAILURE) {
- php_wddx_serialize_var(packet, *val, Z_STRVAL_P(name_var), Z_STRLEN_P(name_var) TSRMLS_CC);
- }
- }
- else if (Z_TYPE_P(name_var) == IS_ARRAY || Z_TYPE_P(name_var) == IS_OBJECT)
- {
- target_hash = HASH_OF(name_var);
-
- zend_hash_internal_pointer_reset(target_hash);
-
- while(zend_hash_get_current_data(target_hash, (void**)&val) == SUCCESS) {
- php_wddx_add_var(packet, *val);
-
- zend_hash_move_forward(target_hash);
- }
- }
-}
-/* }}} */
-
-/* {{{ php_wddx_push_element
- */
-static void php_wddx_push_element(void *user_data, const XML_Char *name, const XML_Char **atts)
-{
- st_entry ent;
- wddx_stack *stack = (wddx_stack *)user_data;
-
- if (!strcmp(name, EL_PACKET)) {
- int i;
-
- for (i=0; atts[i]; i++) {
- if (!strcmp(atts[i], EL_VERSION)) {
- /* nothing for now */
- }
- }
- } else if (!strcmp(name, EL_STRING)) {
- ent.type = ST_STRING;
- SET_STACK_VARNAME;
-
- ALLOC_ZVAL(ent.data);
- INIT_PZVAL(ent.data);
- Z_TYPE_P(ent.data) = IS_STRING;
- Z_STRVAL_P(ent.data) = STR_EMPTY_ALLOC();
- Z_STRLEN_P(ent.data) = 0;
- wddx_stack_push((wddx_stack *)stack, &ent, sizeof(st_entry));
- } else if (!strcmp(name, EL_BINARY)) {
- ent.type = ST_BINARY;
- SET_STACK_VARNAME;
-
- ALLOC_ZVAL(ent.data);
- INIT_PZVAL(ent.data);
- Z_TYPE_P(ent.data) = IS_STRING;
- Z_STRVAL_P(ent.data) = STR_EMPTY_ALLOC();
- Z_STRLEN_P(ent.data) = 0;
- wddx_stack_push((wddx_stack *)stack, &ent, sizeof(st_entry));
- } else if (!strcmp(name, EL_CHAR)) {
- int i;
-
- for (i = 0; atts[i]; i++) {
- if (!strcmp(atts[i], EL_CHAR_CODE) && atts[++i] && atts[i][0]) {
- char tmp_buf[2];
-
- sprintf(tmp_buf, "%c", (char)strtol(atts[i], NULL, 16));
- php_wddx_process_data(user_data, tmp_buf, strlen(tmp_buf));
- break;
- }
- }
- } else if (!strcmp(name, EL_NUMBER)) {
- ent.type = ST_NUMBER;
- SET_STACK_VARNAME;
-
- ALLOC_ZVAL(ent.data);
- INIT_PZVAL(ent.data);
- Z_TYPE_P(ent.data) = IS_LONG;
- wddx_stack_push((wddx_stack *)stack, &ent, sizeof(st_entry));
- } else if (!strcmp(name, EL_BOOLEAN)) {
- int i;
-
- for (i = 0; atts[i]; i++) {
- if (!strcmp(atts[i], EL_VALUE) && atts[++i] && atts[i][0]) {
- ent.type = ST_BOOLEAN;
- SET_STACK_VARNAME;
-
- ALLOC_ZVAL(ent.data);
- INIT_PZVAL(ent.data);
- Z_TYPE_P(ent.data) = IS_BOOL;
- wddx_stack_push((wddx_stack *)stack, &ent, sizeof(st_entry));
- php_wddx_process_data(user_data, atts[i], strlen(atts[i]));
- break;
- }
- }
- } else if (!strcmp(name, EL_NULL)) {
- ent.type = ST_NULL;
- SET_STACK_VARNAME;
-
- ALLOC_ZVAL(ent.data);
- INIT_PZVAL(ent.data);
- ZVAL_NULL(ent.data);
-
- wddx_stack_push((wddx_stack *)stack, &ent, sizeof(st_entry));
- } else if (!strcmp(name, EL_ARRAY)) {
- ent.type = ST_ARRAY;
- SET_STACK_VARNAME;
-
- ALLOC_ZVAL(ent.data);
- array_init(ent.data);
- INIT_PZVAL(ent.data);
- wddx_stack_push((wddx_stack *)stack, &ent, sizeof(st_entry));
- } else if (!strcmp(name, EL_STRUCT)) {
- ent.type = ST_STRUCT;
- SET_STACK_VARNAME;
-
- ALLOC_ZVAL(ent.data);
- array_init(ent.data);
- INIT_PZVAL(ent.data);
- wddx_stack_push((wddx_stack *)stack, &ent, sizeof(st_entry));
- } else if (!strcmp(name, EL_VAR)) {
- int i;
-
- 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;
- break;
- }
- }
- } else if (!strcmp(name, EL_RECORDSET)) {
- int i;
-
- ent.type = ST_RECORDSET;
- SET_STACK_VARNAME;
- MAKE_STD_ZVAL(ent.data);
- array_init(ent.data);
-
- for (i = 0; atts[i]; i++) {
- if (!strcmp(atts[i], "fieldNames") && atts[++i] && atts[i][0]) {
- 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;
- while ((p2 = php_memnstr(p1, ",", sizeof(",")-1, endp)) != NULL) {
- key = estrndup(p1, p2 - p1);
- MAKE_STD_ZVAL(tmp);
- array_init(tmp);
- add_assoc_zval_ex(ent.data, key, p2 - p1 + 1, tmp);
- p1 = p2 + sizeof(",")-1;
- efree(key);
- }
-
- if (p1 <= endp) {
- MAKE_STD_ZVAL(tmp);
- array_init(tmp);
- add_assoc_zval_ex(ent.data, p1, endp - p1 + 1, tmp);
- }
-
- efree(decoded);
- break;
- }
- }
-
- wddx_stack_push((wddx_stack *)stack, &ent, sizeof(st_entry));
- } else if (!strcmp(name, EL_FIELD)) {
- int i;
- st_entry ent;
-
- ent.type = ST_FIELD;
- ent.varname = NULL;
- ent.data = NULL;
-
- 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) {
- ent.data = *field;
- }
-
- efree(decoded);
- break;
- }
- }
-
- wddx_stack_push((wddx_stack *)stack, &ent, sizeof(st_entry));
- } else if (!strcmp(name, EL_DATETIME)) {
- ent.type = ST_DATETIME;
- SET_STACK_VARNAME;
-
- ALLOC_ZVAL(ent.data);
- INIT_PZVAL(ent.data);
- Z_TYPE_P(ent.data) = IS_LONG;
- wddx_stack_push((wddx_stack *)stack, &ent, sizeof(st_entry));
- }
-}
-/* }}} */
-
-/* {{{ php_wddx_pop_element
- */
-static void php_wddx_pop_element(void *user_data, const XML_Char *name)
-{
- st_entry *ent1, *ent2;
- wddx_stack *stack = (wddx_stack *)user_data;
- HashTable *target_hash;
- zend_class_entry **pce;
- zval *obj;
- zval *tmp;
- TSRMLS_FETCH();
-
-/* OBJECTS_FIXME */
- if (stack->top == 0)
- return;
-
- if (!strcmp(name, EL_STRING) || !strcmp(name, EL_NUMBER) ||
- !strcmp(name, EL_BOOLEAN) || !strcmp(name, EL_NULL) ||
- !strcmp(name, EL_ARRAY) || !strcmp(name, EL_STRUCT) ||
- !strcmp(name, EL_RECORDSET) || !strcmp(name, EL_BINARY) ||
- !strcmp(name, EL_DATETIME)) {
- wddx_stack_top(stack, (void**)&ent1);
-
- if (!strcmp(name, EL_BINARY)) {
- int new_len=0;
- unsigned char *new_str;
-
- new_str = php_base64_decode(Z_STRVAL_P(ent1->data), Z_STRLEN_P(ent1->data), &new_len);
- STR_FREE(Z_STRVAL_P(ent1->data));
- Z_STRVAL_P(ent1->data) = new_str;
- Z_STRLEN_P(ent1->data) = new_len;
- }
-
- /* Call __wakeup() method on the object. */
- if (Z_TYPE_P(ent1->data) == IS_OBJECT) {
- zval *fname, *retval = NULL;
-
- MAKE_STD_ZVAL(fname);
- ZVAL_STRING(fname, "__wakeup", 1);
-
- call_user_function_ex(NULL, &ent1->data, fname, &retval, 0, 0, 0, NULL TSRMLS_CC);
-
- zval_dtor(fname);
- FREE_ZVAL(fname);
- if (retval)
- zval_ptr_dtor(&retval);
- }
-
- if (stack->top > 1) {
- stack->top--;
- wddx_stack_top(stack, (void**)&ent2);
-
- /* if non-existent field */
- if (ent2->type == ST_FIELD && ent2->data == NULL) {
- zval_ptr_dtor(&ent1->data);
- efree(ent1);
- return;
- }
-
- if (Z_TYPE_P(ent2->data) == IS_ARRAY || Z_TYPE_P(ent2->data) == IS_OBJECT) {
- target_hash = HASH_OF(ent2->data);
-
- if (ent1->varname) {
- if (!strcmp(ent1->varname, PHP_CLASS_NAME_VAR) &&
- Z_TYPE_P(ent1->data) == IS_STRING && Z_STRLEN_P(ent1->data)) {
- zend_bool incomplete_class = 0;
-
- zend_str_tolower(Z_STRVAL_P(ent1->data), Z_STRLEN_P(ent1->data));
- if (zend_hash_find(EG(class_table), Z_STRVAL_P(ent1->data),
- Z_STRLEN_P(ent1->data)+1, (void **) &pce)==FAILURE) {
- incomplete_class = 1;
- pce = &PHP_IC_ENTRY;
- }
-
- /* Initialize target object */
- MAKE_STD_ZVAL(obj);
- object_init_ex(obj, *pce);
-
- /* Merge current hashtable with object's default properties */
- zend_hash_merge(Z_OBJPROP_P(obj),
- Z_ARRVAL_P(ent2->data),
- (void (*)(void *)) zval_add_ref,
- (void *) &tmp, sizeof(zval *), 0);
-
- if (incomplete_class) {
- php_store_class_name(obj, Z_STRVAL_P(ent1->data), Z_STRLEN_P(ent1->data));
- }
-
- /* Clean up old array entry */
- zval_ptr_dtor(&ent2->data);
-
- /* Set stack entry to point to the newly created object */
- ent2->data = obj;
-
- /* Clean up class name var entry */
- zval_ptr_dtor(&ent1->data);
- } else
- zend_hash_update(target_hash,
- ent1->varname, strlen(ent1->varname)+1,
- &ent1->data, sizeof(zval *), NULL);
- efree(ent1->varname);
- } else {
- zend_hash_next_index_insert(target_hash,
- &ent1->data,
- sizeof(zval *), NULL);
- }
- }
- efree(ent1);
- } else
- stack->done = 1;
- } else if (!strcmp(name, EL_VAR) && stack->varname) {
- efree(stack->varname);
- } else if (!strcmp(name, EL_FIELD)) {
- st_entry *ent;
- wddx_stack_top(stack, (void **)&ent);
- efree(ent);
- stack->top--;
- }
-}
-/* }}} */
-
-/* {{{ php_wddx_process_data
- */
-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) {
- Z_STRVAL_P(ent->data) = estrndup(decoded, decoded_len);
- Z_STRLEN_P(ent->data) = decoded_len;
- } else {
- Z_STRVAL_P(ent->data) = erealloc(Z_STRVAL_P(ent->data),
- Z_STRLEN_P(ent->data) + decoded_len + 1);
- strncpy(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)[Z_STRLEN_P(ent->data)] = '\0';
- }
-
- efree(decoded);
- break;
-
- case ST_BINARY:
- if (Z_STRLEN_P(ent->data) == 0) {
- Z_STRVAL_P(ent->data) = estrndup(s, len + 1);
- } else {
- 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';
- break;
-
- case ST_NUMBER:
- Z_TYPE_P(ent->data) = IS_STRING;
- Z_STRLEN_P(ent->data) = len;
- Z_STRVAL_P(ent->data) = estrndup(s, len);
- convert_scalar_to_number(ent->data TSRMLS_CC);
- break;
-
- case ST_BOOLEAN:
- if (!strcmp(s, "true"))
- Z_LVAL_P(ent->data) = 1;
- else if (!strcmp(s, "false"))
- Z_LVAL_P(ent->data) = 0;
- else {
- stack->top--;
- zval_ptr_dtor(&ent->data);
- if (ent->varname)
- efree(ent->varname);
- efree(ent);
- }
- break;
-
- case ST_DATETIME: {
- char *tmp;
-
- tmp = emalloc(len + 1);
- memcpy(tmp, s, len);
- tmp[len] = '\0';
-
- Z_LVAL_P(ent->data) = php_parse_date(tmp, NULL);
- /* date out of range < 1969 or > 2038 */
- if (Z_LVAL_P(ent->data) == -1) {
- Z_TYPE_P(ent->data) = IS_STRING;
- Z_STRLEN_P(ent->data) = len;
- Z_STRVAL_P(ent->data) = estrndup(s, len);
- }
- efree(tmp);
- }
- break;
-
- default:
- break;
- }
- }
-}
-/* }}} */
-
-/* {{{ php_wddx_deserialize_ex
- */
-int php_wddx_deserialize_ex(char *value, int vallen, zval *return_value)
-{
- wddx_stack stack;
- XML_Parser parser;
- st_entry *ent;
- int retval;
-
- wddx_stack_init(&stack);
- parser = XML_ParserCreate("ISO-8859-1");
-
- XML_SetUserData(parser, &stack);
- XML_SetElementHandler(parser, php_wddx_push_element, php_wddx_pop_element);
- XML_SetCharacterDataHandler(parser, php_wddx_process_data);
-
- XML_Parse(parser, value, vallen, 1);
-
- XML_ParserFree(parser);
-
- if (stack.top == 1) {
- wddx_stack_top(&stack, (void**)&ent);
- *return_value = *(ent->data);
- zval_copy_ctor(return_value);
- retval = SUCCESS;
- } else
- retval = FAILURE;
-
- wddx_stack_destroy(&stack);
-
- return retval;
-}
-/* }}} */
-
-/* {{{ proto string wddx_serialize_value(mixed var [, string comment])
- Creates a new packet and serializes the given value */
-PHP_FUNCTION(wddx_serialize_value)
-{
- zval *var;
- char *comment = NULL;
- int comment_len = 0;
- wddx_packet *packet;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z|s",
- &var, &comment, &comment_len) == FAILURE)
- return;
-
- packet = php_wddx_constructor();
-
- php_wddx_packet_start(packet, comment, comment_len);
- php_wddx_serialize_var(packet, var, NULL, 0 TSRMLS_CC);
- php_wddx_packet_end(packet);
-
- ZVAL_STRINGL(return_value, packet->c, packet->len, 1);
- smart_str_free(packet);
- efree(packet);
-}
-/* }}} */
-
-/* {{{ proto string wddx_serialize_vars(mixed var_name [, mixed ...])
- Creates a new packet and serializes given variables into a struct */
-PHP_FUNCTION(wddx_serialize_vars)
-{
- int argc, i;
- wddx_packet *packet;
- zval ***args;
-
- argc = ZEND_NUM_ARGS();
- if (argc < 1) {
- WRONG_PARAM_COUNT;
- }
-
- /* Allocate arguments array and get the arguments, checking for errors. */
- args = (zval ***)safe_emalloc(argc, sizeof(zval **), 0);
- if (zend_get_parameters_array_ex(argc, args) == FAILURE) {
- efree(args);
- WRONG_PARAM_COUNT;
- }
-
- packet = php_wddx_constructor();
-
- php_wddx_packet_start(packet, NULL, 0);
- php_wddx_add_chunk_static(packet, WDDX_STRUCT_S);
-
- for (i=0; i<argc; i++) {
- if (Z_TYPE_PP(args[i]) != IS_ARRAY && Z_TYPE_PP(args[i]) != IS_OBJECT)
- convert_to_string_ex(args[i]);
- php_wddx_add_var(packet, *args[i]);
- }
-
- php_wddx_add_chunk_static(packet, WDDX_STRUCT_E);
- php_wddx_packet_end(packet);
-
- efree(args);
-
- ZVAL_STRINGL(return_value, packet->c, packet->len, 1);
- smart_str_free(packet);
- efree(packet);
-}
-/* }}} */
-
-/* {{{ php_wddx_constructor
- */
-wddx_packet *php_wddx_constructor(void)
-{
- smart_str *packet;
-
- packet = (smart_str *)emalloc(sizeof(smart_str));
- packet->c = NULL;
-
- return packet;
-}
-/* }}} */
-
-/* {{{ php_wddx_destructor
- */
-void php_wddx_destructor(wddx_packet *packet)
-{
- smart_str_free(packet);
- efree(packet);
-}
-/* }}} */
-
-/* {{{ proto int wddx_packet_start([string comment])
- Starts a WDDX packet with optional comment and returns the packet id */
-PHP_FUNCTION(wddx_packet_start)
-{
- char *comment = NULL;
- int comment_len = 0;
- wddx_packet *packet;
-
- comment = NULL;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|s", &comment, &comment_len) == FAILURE)
- return;
-
- packet = php_wddx_constructor();
-
- php_wddx_packet_start(packet, comment, comment_len);
- php_wddx_add_chunk_static(packet, WDDX_STRUCT_S);
-
- ZEND_REGISTER_RESOURCE(return_value, packet, le_wddx);
-}
-/* }}} */
-
-/* {{{ proto string wddx_packet_end(int packet_id)
- Ends specified WDDX packet and returns the string containing the packet */
-PHP_FUNCTION(wddx_packet_end)
-{
- zval *packet_id;
- wddx_packet *packet = NULL;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &packet_id) == FAILURE)
- return;
-
- ZEND_FETCH_RESOURCE(packet, wddx_packet *, &packet_id, -1, "WDDX packet ID", le_wddx);
-
- php_wddx_add_chunk_static(packet, WDDX_STRUCT_E);
-
- php_wddx_packet_end(packet);
-
- ZVAL_STRINGL(return_value, packet->c, packet->len, 1);
-
- zend_list_delete(Z_LVAL_P(packet_id));
-}
-/* }}} */
-
-/* {{{ proto int wddx_add_vars(int packet_id, mixed var_names [, mixed ...])
- Serializes given variables and adds them to packet given by packet_id */
-PHP_FUNCTION(wddx_add_vars)
-{
- int argc, i;
- zval ***args;
- zval **packet_id;
- wddx_packet *packet = NULL;
-
- argc = ZEND_NUM_ARGS();
- if (argc < 2) {
- WRONG_PARAM_COUNT;
- }
-
- /* Allocate arguments array and get the arguments, checking for errors. */
- args = (zval ***)safe_emalloc(argc, sizeof(zval **), 0);
- if (zend_get_parameters_array_ex(argc, args) == FAILURE) {
- efree(args);
- WRONG_PARAM_COUNT;
- }
-
- packet_id = args[0];
-
- packet = (wddx_packet *)zend_fetch_resource(packet_id TSRMLS_CC, -1, "WDDX packet ID", NULL, 1, le_wddx);
- if (!packet)
- {
- efree(args);
- RETURN_FALSE;
- }
-
- for (i=1; i<argc; i++) {
- if (Z_TYPE_PP(args[i]) != IS_ARRAY && Z_TYPE_PP(args[i]) != IS_OBJECT)
- convert_to_string_ex(args[i]);
- php_wddx_add_var(packet, (*args[i]));
- }
-
- efree(args);
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto mixed wddx_deserialize(mixed packet)
- Deserializes given packet and returns a PHP value */
-PHP_FUNCTION(wddx_deserialize)
-{
- zval *packet;
- char *payload;
- int payload_len;
- php_stream *stream = NULL;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z", &packet) == FAILURE)
- return;
-
- if (Z_TYPE_P(packet) == IS_STRING) {
- payload = Z_STRVAL_P(packet);
- payload_len = Z_STRLEN_P(packet);
- }
- else if (Z_TYPE_P(packet) == IS_RESOURCE) {
- php_stream_from_zval(stream, &packet);
- if (stream) {
- payload_len = php_stream_copy_to_mem(stream, &payload, PHP_STREAM_COPY_ALL, 0);
- }
- } else {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Expecting parameter 1 to be a string or a stream");
- return;
- }
-
- if (payload_len == 0)
- return;
-
- php_wddx_deserialize_ex(payload, payload_len, return_value);
-
- if (stream)
- pefree(payload, 0);
-}
-/* }}} */
-
-#endif /* HAVE_LIBEXPAT */
-
-/*
- * 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/xml/CREDITS b/ext/xml/CREDITS
deleted file mode 100644
index b9cbfdd5af..0000000000
--- a/ext/xml/CREDITS
+++ /dev/null
@@ -1,2 +0,0 @@
-XML
-Stig Bakken, Thies C. Arntzen, Sterling Hughes
diff --git a/ext/xml/compat.c b/ext/xml/compat.c
deleted file mode 100644
index a5797ad37d..0000000000
--- a/ext/xml/compat.c
+++ /dev/null
@@ -1,633 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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. |
- +----------------------------------------------------------------------+
- | Authors: Sterling Hughes <sterling@php.net> |
- +----------------------------------------------------------------------+
- */
-
-#include "php.h"
-#if defined(HAVE_LIBXML) && defined(HAVE_XML) && !defined(HAVE_LIBEXPAT)
-#include "expat_compat.h"
-
-typedef struct _php_xml_ns {
- xmlNsPtr nsptr;
- int ref_count;
- void *next;
- void *prev;
-} php_xml_ns;
-
-#ifdef LIBXML_EXPAT_COMPAT
-
-#define IS_NS_DECL(__ns) \
- ((__ns) != NULL && strlen(__ns) == 5 && *(__ns) == 'x' && *((__ns)+1) == 'm' && \
- *((__ns)+2) == 'l' && *((__ns)+3) == 'n' && *((__ns)+4) == 's')
-
-#if LIBXML_VERSION >= 20600
-static void
-_qualify_namespace(XML_Parser parser, const xmlChar *name, const xmlChar *URI, xmlChar **qualified)
-{
- if (URI) {
- /* 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));
- } else {
- *qualified = xmlStrdup(name);
- }
-}
-#endif
-
-static void
-_start_element_handler(void *user, const xmlChar *name, const xmlChar **attributes)
-{
- XML_Parser parser = (XML_Parser) user;
- xmlChar *qualified_name = NULL;
-
- if (parser->h_start_element == NULL) {
- return;
- }
-
- qualified_name = xmlStrdup(name);
-
- parser->h_start_element(parser->user, (const XML_Char *) qualified_name, (const XML_Char **) attributes);
-
- xmlFree(qualified_name);
-}
-
-#if LIBXML_VERSION >= 20600
-static void
-_start_element_handler_ns(void *user, const xmlChar *name, const xmlChar *prefix, const xmlChar *URI, int nb_namespaces, const xmlChar ** namespaces, int nb_attributes, int nb_defaulted, const xmlChar ** attributes)
-{
- XML_Parser parser = (XML_Parser) user;
- xmlChar *qualified_name = NULL;
- xmlChar **attrs = NULL;
- int i;
- int z = 0;
- int y = 0;
-
- if (parser->h_start_element == NULL) {
- return;
- }
- _qualify_namespace(parser, name, URI, &qualified_name);
-
- if (attributes != NULL) {
- xmlChar *qualified_name_attr = NULL;
- attrs = safe_emalloc((nb_attributes * 2) + 1, sizeof(int *), 0);
-
- for (i = 0; i < nb_attributes; i += 1) {
-
- if (attributes[y+1] != NULL) {
- _qualify_namespace(parser, attributes[y] , attributes[2], &qualified_name_attr);
- } else {
- qualified_name_attr = xmlStrdup(attributes[y]);
- }
- attrs[z] = qualified_name_attr;
- attrs[z + 1] = xmlStrndup(attributes[y + 3] , (int) (attributes[y + 4] - attributes[y + 3]));
- z += 2;
- y += 5;
- }
-
- attrs[z] = NULL;
- }
- parser->h_start_element(parser->user, (const XML_Char *) qualified_name, (const XML_Char **) attrs);
- if (attrs) {
- for (i = 0; i < z; i++) {
- xmlFree(attrs[i]);
- }
- efree(attrs);
- }
- xmlFree(qualified_name);
-}
-#endif
-
-static void
-_namespace_handler(XML_Parser parser, xmlNsPtr nsptr)
-{
- if (nsptr != NULL) {
- _namespace_handler(parser, nsptr->next);
- parser->h_end_ns(parser->user, nsptr->prefix);
- }
-}
-
-static void
-_end_element_handler(void *user, const xmlChar *name)
-{
- xmlChar *qualified_name;
- XML_Parser parser = (XML_Parser) user;
-
- if (parser->h_end_element == NULL) {
- return;
- }
-
- qualified_name = xmlStrdup(name);
-
- parser->h_end_element(parser->user, (const XML_Char *) qualified_name);
-
- xmlFree(qualified_name);
-}
-
-#if LIBXML_VERSION >= 20600
-static void
-_end_element_handler_ns(void *user, const xmlChar *name, const xmlChar * prefix, const xmlChar *URI)
-{
- xmlChar *qualified_name;
- XML_Parser parser = (XML_Parser) user;
-
- if (parser->h_end_element == NULL) {
- return;
- }
-
- _qualify_namespace(parser, name, URI, &qualified_name);
-
- parser->h_end_element(parser->user, (const XML_Char *) qualified_name);
-
- xmlFree(qualified_name);
-}
-#endif
-
-static void
-_cdata_handler(void *user, const xmlChar *cdata, int cdata_len)
-{
- XML_Parser parser = (XML_Parser) user;
-
- if (parser->h_cdata == NULL) {
- return;
- }
-
- parser->h_cdata(parser->user, (const XML_Char *) cdata, cdata_len);
-}
-
-static void
-_pi_handler(void *user, const xmlChar *target, const xmlChar *data)
-{
- XML_Parser parser = (XML_Parser) user;
-
- if (parser->h_pi == NULL) {
- return;
- }
-
- parser->h_pi(parser->user, (const XML_Char *) target, (const XML_Char *) data);
-}
-
-static void
-_unparsed_entity_decl_handler(void *user,
- const xmlChar *name,
- const xmlChar *sys_id,
- const xmlChar *pub_id,
- const xmlChar *notation)
-{
- XML_Parser parser = (XML_Parser) user;
-
- if (parser->h_unparsed_entity_decl == NULL) {
- return;
- }
-
- parser->h_unparsed_entity_decl(parser->user, name, NULL, sys_id, pub_id, notation);
-}
-
-static void
-_notation_decl_handler(void *user, const xmlChar *notation, const xmlChar *sys_id, const xmlChar *pub_id)
-{
- XML_Parser parser = (XML_Parser) user;
-
- if (parser->h_notation_decl == NULL) {
- return;
- }
-
- parser->h_notation_decl(parser->user, notation, NULL, sys_id, pub_id);
-}
-
-static void
-_build_comment(const xmlChar *data, int data_len, xmlChar **comment, int *comment_len)
-{
- *comment_len = data_len + 6;
-
- *comment = xmlMalloc(*comment_len + 1);
- memcpy(*comment, "<--", 3);
- memcpy(*comment + 3, data, data_len);
- memcpy(*comment + 3 + data_len, "-->", 3);
-
- (*comment)[*comment_len] = '\0';
-}
-
-static void
-_comment_handler(void *user, const xmlChar *comment)
-{
- XML_Parser parser = (XML_Parser) user;
-
- if (parser->h_default) {
- xmlChar *d_comment;
- int d_comment_len;
-
- _build_comment(comment, xmlStrlen(comment), &d_comment, &d_comment_len);
- parser->h_default(parser->user, d_comment, d_comment_len);
- xmlFree(d_comment);
- }
-}
-
-static void
-_build_entity(const xmlChar *name, int len, xmlChar **entity, int *entity_len)
-{
- *entity_len = len + 2;
- *entity = xmlMalloc(*entity_len + 1);
- (*entity)[0] = '&';
- memcpy(*entity+1, name, len);
- (*entity)[len+1] = ';';
- (*entity)[*entity_len] = '\0';
-}
-
-static xmlEntityPtr
-_get_entity(void *user, const xmlChar *name)
-{
- XML_Parser parser = (XML_Parser) user;
-
- if (parser->h_default) {
- xmlChar *entity;
- int len;
-
- _build_entity(name, xmlStrlen(name), &entity, &len);
- parser->h_default(parser->user, (const xmlChar *) entity, len);
- xmlFree(entity);
- }
-
- return NULL;
-}
-
-static void
-_external_entity_ref_handler(void *user, const xmlChar *names, int type, const xmlChar *sys_id, const xmlChar *pub_id, xmlChar *content)
-{
- XML_Parser parser = (XML_Parser) user;
-
- if (parser->h_external_entity_ref == NULL) {
- return;
- }
-
- parser->h_external_entity_ref(parser, names, "", sys_id, pub_id);
-}
-
-static xmlSAXHandler
-php_xml_compat_handlers = {
- NULL, /* internalSubset */
- NULL, /* isStandalone */
- NULL, /* hasInternalSubset */
- NULL, /* hasExternalSubset */
- NULL, /* resolveEntity */
- _get_entity, /* getEntity */
- _external_entity_ref_handler, /* entityDecl */
- _notation_decl_handler,
- NULL, /* attributeDecl */
- NULL, /* elementDecl */
- _unparsed_entity_decl_handler, /* unparsedEntity */
- NULL, /* setDocumentLocator */
- NULL, /* startDocument */
- NULL, /* endDocument */
- _start_element_handler, /* startElement */
- _end_element_handler, /* endElement */
- NULL, /* reference */
- _cdata_handler,
- NULL, /* ignorableWhitespace */
- _pi_handler,
- _comment_handler, /* comment */
- NULL, /* warning */
- NULL, /* error */
- NULL, /* fatalError */
- NULL, /* getParameterEntity */
- _cdata_handler, /* cdataBlock */
- NULL, /* externalSubset */
- 1
-#if LIBXML_VERSION >= 20600
- ,
- NULL,
- _start_element_handler_ns,
- _end_element_handler_ns,
- NULL
-#endif
-
-};
-
-PHPAPI XML_Parser
-XML_ParserCreate(const XML_Char *encoding)
-{
- return XML_ParserCreate_MM(encoding, NULL, NULL);
-}
-
-PHPAPI XML_Parser
-XML_ParserCreateNS(const XML_Char *encoding, const XML_Char sep)
-{
- XML_Char tmp[2];
- tmp[0] = sep;
- tmp[1] = '\0';
- return XML_ParserCreate_MM(encoding, NULL, tmp);
-}
-
-PHPAPI XML_Parser
-XML_ParserCreate_MM(const XML_Char *encoding, const XML_Memory_Handling_Suite *memsuite, const XML_Char *sep)
-{
- XML_Parser parser;
-
- parser = (XML_Parser) emalloc(sizeof(struct _XML_Parser));
- memset(parser, 0, sizeof(struct _XML_Parser));
- parser->use_namespace = 0;
- parser->_ns_seperator = NULL;
-
- parser->parser = xmlCreatePushParserCtxt((xmlSAXHandlerPtr) &php_xml_compat_handlers, (void *) parser, NULL, 0, NULL);
- if (parser->parser == NULL) {
- efree(parser);
- return NULL;
- }
- if (encoding != NULL) {
- parser->parser->encoding = xmlStrdup(encoding);
- } else {
- parser->parser->charset = XML_CHAR_ENCODING_NONE;
- }
- parser->parser->replaceEntities = 1;
- if (sep != NULL) {
- parser->use_namespace = 1;
-#if LIBXML_VERSION >= 20600
- parser->parser->sax2 = 1;
-#endif
- parser->_ns_seperator = xmlStrdup(sep);
- }
- return parser;
-}
-
-PHPAPI void
-XML_SetUserData(XML_Parser parser, void *user)
-{
- parser->user = user;
-}
-
-PHPAPI void *
-XML_GetUserData(XML_Parser parser)
-{
- return parser->user;
-}
-
-PHPAPI void
-XML_SetElementHandler(XML_Parser parser, XML_StartElementHandler start, XML_EndElementHandler end)
-{
- parser->h_start_element = start;
- parser->h_end_element = end;
-}
-
-PHPAPI void
-XML_SetCharacterDataHandler(XML_Parser parser, XML_CharacterDataHandler cdata)
-{
- parser->h_cdata = cdata;
-}
-
-PHPAPI void
-XML_SetProcessingInstructionHandler(XML_Parser parser, XML_ProcessingInstructionHandler pi)
-{
- parser->h_pi = pi;
-}
-
-PHPAPI void
-XML_SetCommentHandler(XML_Parser parser, XML_CommentHandler comment)
-{
- parser->h_comment = comment;
-}
-
-PHPAPI void
-XML_SetDefaultHandler(XML_Parser parser, XML_DefaultHandler d)
-{
- parser->h_default = d;
-}
-
-PHPAPI void
-XML_SetUnparsedEntityDeclHandler(XML_Parser parser, XML_UnparsedEntityDeclHandler unparsed_decl)
-{
- parser->h_unparsed_entity_decl = unparsed_decl;
-}
-
-PHPAPI void
-XML_SetNotationDeclHandler(XML_Parser parser, XML_NotationDeclHandler notation_decl)
-{
- parser->h_notation_decl = notation_decl;
-}
-
-PHPAPI void
-XML_SetExternalEntityRefHandler(XML_Parser parser, XML_ExternalEntityRefHandler ext_entity)
-{
- parser->h_external_entity_ref = ext_entity;
-}
-
-PHPAPI void
-XML_SetStartNamespaceDeclHandler(XML_Parser parser, XML_StartNamespaceDeclHandler start_ns)
-{
- parser->h_start_ns = start_ns;
-}
-
-PHPAPI void
-XML_SetEndNamespaceDeclHandler(XML_Parser parser, XML_EndNamespaceDeclHandler end_ns)
-{
- parser->h_end_ns = end_ns;
-}
-
-PHPAPI int
-XML_Parse(XML_Parser parser, const XML_Char *data, int data_len, int is_final)
-{
-#if LIBXML_VERSION >= 20600
- int error;
- error = xmlParseChunk(parser->parser, data, data_len, is_final);
- if (!error) {
- return 1;
- } else if (parser->parser->lastError.level > XML_ERR_WARNING ){
- return 0;
- } else {
- return 1;
- }
-#else
- return !xmlParseChunk(parser->parser, data, data_len, is_final);
-#endif
-}
-
-PHPAPI int
-XML_GetErrorCode(XML_Parser parser)
-{
- return parser->parser->errNo;
-}
-
-const XML_Char *error_mapping[] = {
- "No error",
- "Internal error",
- "No memory",
- "Invalid document start",
- "Empty document",
- "Invalid document end",
- "Invalid hexadecimal character reference",
- "Invalid decimal character reference",
- "Invalid character reference",
- "Invalid character",
- "XML_ERR_CHARREF_AT_EOF",
- "XML_ERR_CHARREF_IN_PROLOG",
- "XML_ERR_CHARREF_IN_EPILOG",
- "XML_ERR_CHARREF_IN_DTD",
- "XML_ERR_ENTITYREF_AT_EOF",
- "XML_ERR_ENTITYREF_IN_PROLOG",
- "XML_ERR_ENTITYREF_IN_EPILOG",
- "XML_ERR_ENTITYREF_IN_DTD",
- "PEReference at end of document",
- "PEReference in prolog",
- "PEReference in epilog",
- "PEReference: forbidden within markup decl in internal subset",
- "XML_ERR_ENTITYREF_NO_NAME",
- "EntityRef: expecting ';'",
- "PEReference: no name",
- "PEReference: expecting ';'",
- "Undeclared entity error",
- "Undeclared entity warning",
- "Unparsed Entity",
- "XML_ERR_ENTITY_IS_EXTERNAL",
- "XML_ERR_ENTITY_IS_PARAMETER",
- "Unknown encoding",
- "Unsupported encoding",
- "String not started expecting ' or \"",
- "String not closed expecting \" or '",
- "Namespace declaration error",
- "EntityValue: \" or ' expected",
- "EntityValue: \" or ' expected",
- "< in attribute",
- "Attribute not started",
- "Attribute not finished",
- "Attribute without value",
- "Attribute redefined",
- "SystemLiteral \" or ' expected",
- "SystemLiteral \" or ' expected",
- /* "XML_ERR_COMMENT_NOT_STARTED", <= eliminated on purpose */
- "Comment not finished",
- "Processing Instruction not started",
- "Processing Instruction not finished",
- "NOTATION: Name expected here",
- "'>' required to close NOTATION declaration",
- "'(' required to start ATTLIST enumeration",
- "'(' required to start ATTLIST enumeration",
- "MixedContentDecl : '|' or ')*' expected",
- "XML_ERR_MIXED_NOT_FINISHED",
- "ELEMENT in DTD not started",
- "ELEMENT in DTD not finished",
- "XML declaration not started",
- "XML declaration not finished",
- "XML_ERR_CONDSEC_NOT_STARTED",
- "XML conditional section not closed",
- "Content error in the external subset",
- "DOCTYPE not finished",
- "Sequence ']]>' not allowed in content",
- "CDATA not finished",
- "Reserved XML Name",
- "Space required",
- "XML_ERR_SEPARATOR_REQUIRED",
- "NmToken expected in ATTLIST enumeration",
- "XML_ERR_NAME_REQUIRED",
- "MixedContentDecl : '#PCDATA' expected",
- "SYSTEM or PUBLIC, the URI is missing",
- "PUBLIC, the Public Identifier is missing",
- "< required",
- "> required",
- "</ required",
- "= required",
- "Mismatched tag",
- "Tag not finished",
- "standalone accepts only 'yes' or 'no'",
- "Invalid XML encoding name",
- "Comment must not contain '--' (double-hyphen)",
- "Invalid encoding",
- "external parsed entities cannot be standalone",
- "XML conditional section '[' expected",
- "Entity value required",
- "chunk is not well balanced",
- "extra content at the end of well balanced chunk",
- "XML_ERR_ENTITY_CHAR_ERROR",
- "PEReferences forbidden in internal subset",
- "Detected an entity reference loop",
- "XML_ERR_ENTITY_BOUNDARY",
- "Invalid URI",
- "Fragment not allowed",
- "XML_WAR_CATALOG_PI",
- "XML_ERR_NO_DTD",
- "conditional section INCLUDE or IGNORE keyword expected", /* 95 */
- "Version in XML Declaration missing", /* 96 */
- "XML_WAR_UNKNOWN_VERSION", /* 97 */
- "XML_WAR_LANG_VALUE", /* 98 */
- "XML_WAR_NS_URI", /* 99 */
- "XML_WAR_NS_URI_RELATIVE", /* 100 */
- "Missing encoding in text declaration" /* 101 */
-};
-
-PHPAPI const XML_Char *
-XML_ErrorString(int code)
-{
- if (code < 0 || code >= (int)(sizeof(error_mapping) / sizeof(error_mapping[0]))) {
- return "Unknown";
- }
- return error_mapping[code];
-}
-
-PHPAPI int
-XML_GetCurrentLineNumber(XML_Parser parser)
-{
- return parser->parser->input->line;
-}
-
-PHPAPI int
-XML_GetCurrentColumnNumber(XML_Parser parser)
-{
- return parser->parser->input->col;
-}
-
-PHPAPI int
-XML_GetCurrentByteIndex(XML_Parser parser)
-{
- return parser->parser->input->consumed +
- (parser->parser->input->cur - parser->parser->input->base);
-}
-
-PHPAPI int
-XML_GetCurrentByteCount(XML_Parser parser)
-{
- /* WARNING: this is identical to ByteIndex; it should probably
- * be different */
- return parser->parser->input->consumed +
- (parser->parser->input->cur - parser->parser->input->base);
-}
-
-PHPAPI const XML_Char *XML_ExpatVersion(void)
-{
- return "1.0";
-}
-
-PHPAPI void
-XML_ParserFree(XML_Parser parser)
-{
- if (parser->use_namespace) {
- if (parser->_ns_seperator) {
- xmlFree(parser->_ns_seperator);
- }
- }
- xmlFreeParserCtxt(parser->parser);
- efree(parser);
-}
-
-#endif /* LIBXML_EXPAT_COMPAT */
-#endif
-
-/**
- * Local Variables:
- * tab-width: 4
- * c-basic-offset: 4
- * indent-tabs-mode: t
- * End:
- * vim600: fdm=marker
- * vim: ts=4 noet sw=4
- */
diff --git a/ext/xml/config.m4 b/ext/xml/config.m4
deleted file mode 100644
index a7c87e3673..0000000000
--- a/ext/xml/config.m4
+++ /dev/null
@@ -1,52 +0,0 @@
-dnl
-dnl $Id$
-dnl
-
-PHP_ARG_ENABLE(xml,whether to enable XML support,
-[ --disable-xml Disable XML support.], yes)
-
-if test -z "$PHP_LIBXML_DIR"; then
- PHP_ARG_WITH(libxml-dir, libxml2 install dir,
- [ --with-libxml-dir=DIR XML: libxml2 install prefix], no, no)
-fi
-
-PHP_ARG_WITH(libexpat-dir, libexpat install dir,
-[ --with-libexpat-dir=DIR XML: libexpat install prefix (deprecated)], no, no)
-
-if test "$PHP_XML" != "no" && test "$PHP_LIBXML" != "no" -o "$PHP_LIBEXPAT_DIR" != "no"; then
- dnl
- dnl Default to libxml2.
- dnl
- PHP_SETUP_LIBXML(XML_SHARED_LIBADD, [
- xml_extra_sources="compat.c"
- ], [
- if test "$PHP_LIBEXPAT_DIR" = "no"; then
- AC_MSG_ERROR([xml2-config not found. Use --with-libxml-dir=<DIR>])
- fi
- ])
-
- dnl
- dnl Check for expat only if --with-libexpat-dir is used.
- dnl
- if test "$PHP_LIBEXPAT_DIR" != "no"; then
- for i in $PHP_XML $PHP_LIBEXPAT_DIR; do
- if test -f "$i/lib/libexpat.a" -o -f "$i/lib/libexpat.$SHLIB_SUFFIX_NAME"; then
- EXPAT_DIR=$i
- break
- fi
- done
-
- if test -z "$EXPAT_DIR"; then
- AC_MSG_ERROR(not found. Please reinstall the expat distribution.)
- fi
-
- PHP_ADD_INCLUDE($EXPAT_DIR/include)
- PHP_ADD_LIBRARY_WITH_PATH(expat, $EXPAT_DIR/lib, XML_SHARED_LIBADD)
- AC_DEFINE(HAVE_LIBEXPAT, 1, [ ])
- fi
-
- PHP_NEW_EXTENSION(xml, xml.c $xml_extra_sources, $ext_shared)
- PHP_SUBST(XML_SHARED_LIBADD)
- PHP_ADD_EXTENSION_DEP(xml, libxml)
- AC_DEFINE(HAVE_XML, 1, [ ])
-fi
diff --git a/ext/xml/config.w32 b/ext/xml/config.w32
deleted file mode 100644
index 08d25ffe57..0000000000
--- a/ext/xml/config.w32
+++ /dev/null
@@ -1,15 +0,0 @@
-// $Id$
-// vim:ft=javascript
-
-ARG_WITH("xml", "XML support", "yes");
-
-if (PHP_XML == "yes" && PHP_LIBXML == "yes") {
- EXTENSION("xml", "xml.c compat.c");
- AC_DEFINE("HAVE_XML", 1, "XML support");
- if (!PHP_XML_SHARED) {
- ADD_FLAG("CFLAGS_XML", "/D LIBXML_STATIC ");
- }
- ADD_EXTENSION_DEP('xml', 'libxml');
-}
-
-
diff --git a/ext/xml/expat_compat.h b/ext/xml/expat_compat.h
deleted file mode 100644
index a13c900041..0000000000
--- a/ext/xml/expat_compat.h
+++ /dev/null
@@ -1,149 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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. |
- +----------------------------------------------------------------------+
- | Authors: Sterling Hughes <sterling@php.net> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifndef PHP_EXPAT_COMPAT_H
-#define PHP_EXPAT_COMPAT_H
-
-#if !defined(HAVE_LIBEXPAT) && defined(HAVE_LIBXML)
-#define LIBXML_EXPAT_COMPAT 1
-
-#include "php_compat.h"
-
-#include <libxml/parser.h>
-#include <libxml/parserInternals.h>
-#include <libxml/tree.h>
-#include <libxml/hash.h>
-
-typedef xmlChar XML_Char;
-
-typedef void (*XML_StartElementHandler)(void *, const XML_Char *, const XML_Char **);
-typedef void (*XML_EndElementHandler)(void *, const XML_Char *);
-typedef void (*XML_CharacterDataHandler)(void *, const XML_Char *, int);
-typedef void (*XML_ProcessingInstructionHandler)(void *, const XML_Char *, const XML_Char *);
-typedef void (*XML_CommentHandler)(void *, const XML_Char *);
-typedef void (*XML_DefaultHandler)(void *, const XML_Char *, int);
-typedef void (*XML_UnparsedEntityDeclHandler)(void *, const XML_Char *, const XML_Char *, const XML_Char *, const XML_Char *, const XML_Char *);
-typedef void (*XML_NotationDeclHandler)(void *, const XML_Char *, const XML_Char *, const XML_Char *, const XML_Char *);
-typedef int (*XML_ExternalEntityRefHandler)(void *, const XML_Char *, const XML_Char *, const XML_Char *, const XML_Char *);
-typedef void (*XML_StartNamespaceDeclHandler)(void *, const XML_Char *, const XML_Char *);
-typedef void (*XML_EndNamespaceDeclHandler)(void *, const XML_Char *);
-
-typedef struct _XML_Memory_Handling_Suite {
- void *(*malloc_fcn)(size_t size);
- void *(*realloc_fcn)(void *ptr, size_t size);
- void (*free_fcn)(void *ptr);
-} XML_Memory_Handling_Suite;
-
-typedef struct _XML_Parser {
- int use_namespace;
-
- xmlChar *_ns_seperator;
-
- void *user;
- xmlParserCtxtPtr parser;
-
- XML_StartElementHandler h_start_element;
- XML_EndElementHandler h_end_element;
- XML_CharacterDataHandler h_cdata;
- XML_ProcessingInstructionHandler h_pi;
- XML_CommentHandler h_comment;
- XML_DefaultHandler h_default;
- XML_UnparsedEntityDeclHandler h_unparsed_entity_decl;
- XML_NotationDeclHandler h_notation_decl;
- XML_ExternalEntityRefHandler h_external_entity_ref;
- XML_StartNamespaceDeclHandler h_start_ns;
- XML_EndNamespaceDeclHandler h_end_ns;
-} *XML_Parser;
-
-enum XML_Error {
- XML_ERROR_NONE,
- XML_ERROR_NO_MEMORY,
- XML_ERROR_SYNTAX,
- XML_ERROR_NO_ELEMENTS,
- XML_ERROR_INVALID_TOKEN,
- XML_ERROR_UNCLOSED_TOKEN,
- XML_ERROR_PARTIAL_CHAR,
- XML_ERROR_TAG_MISMATCH,
- XML_ERROR_DUPLICATE_ATTRIBUTE,
- XML_ERROR_JUNK_AFTER_DOC_ELEMENT,
- XML_ERROR_PARAM_ENTITY_REF,
- XML_ERROR_UNDEFINED_ENTITY,
- XML_ERROR_RECURSIVE_ENTITY_REF,
- XML_ERROR_ASYNC_ENTITY,
- XML_ERROR_BAD_CHAR_REF,
- XML_ERROR_BINARY_ENTITY_REF,
- XML_ERROR_ATTRIBUTE_EXTERNAL_ENTITY_REF,
- XML_ERROR_MISPLACED_XML_PI,
- XML_ERROR_UNKNOWN_ENCODING,
- XML_ERROR_INCORRECT_ENCODING,
- XML_ERROR_UNCLOSED_CDATA_SECTION,
- XML_ERROR_EXTERNAL_ENTITY_HANDLING,
- XML_ERROR_NOT_STANDALONE,
- XML_ERROR_UNEXPECTED_STATE,
- XML_ERROR_ENTITY_DECLARED_IN_PE,
- XML_ERROR_FEATURE_REQUIRES_XML_DTD,
- XML_ERROR_CANT_CHANGE_FEATURE_ONCE_PARSING
-};
-
-enum XML_Content_Type {
- XML_CTYPE_EMPTY = 1,
- XML_CTYPE_ANY,
- XML_CTYPE_MIXED,
- XML_CTYPE_NAME,
- XML_CTYPE_CHOICE,
- XML_CTYPE_SEQ
-};
-
-PHPAPI XML_Parser XML_ParserCreate(const XML_Char *);
-PHPAPI XML_Parser XML_ParserCreateNS(const XML_Char *, const XML_Char);
-PHPAPI XML_Parser XML_ParserCreate_MM(const XML_Char *, const XML_Memory_Handling_Suite *, const XML_Char *);
-PHPAPI void XML_SetUserData(XML_Parser, void *);
-PHPAPI void *XML_GetUserData(XML_Parser);
-PHPAPI void XML_SetElementHandler(XML_Parser, XML_StartElementHandler, XML_EndElementHandler);
-PHPAPI void XML_SetCharacterDataHandler(XML_Parser, XML_CharacterDataHandler);
-PHPAPI void XML_SetProcessingInstructionHandler(XML_Parser, XML_ProcessingInstructionHandler);
-PHPAPI void XML_SetDefaultHandler(XML_Parser, XML_DefaultHandler);
-PHPAPI void XML_SetUnparsedEntityDeclHandler(XML_Parser, XML_UnparsedEntityDeclHandler);
-PHPAPI void XML_SetNotationDeclHandler(XML_Parser, XML_NotationDeclHandler);
-PHPAPI void XML_SetExternalEntityRefHandler(XML_Parser, XML_ExternalEntityRefHandler);
-PHPAPI void XML_SetStartNamespaceDeclHandler(XML_Parser, XML_StartNamespaceDeclHandler);
-PHPAPI void XML_SetEndNamespaceDeclHandler(XML_Parser, XML_EndNamespaceDeclHandler);
-PHPAPI int XML_Parse(XML_Parser, const XML_Char *, int data_len, int is_final);
-PHPAPI int XML_GetErrorCode(XML_Parser);
-PHPAPI const XML_Char *XML_ErrorString(int);
-PHPAPI int XML_GetCurrentLineNumber(XML_Parser);
-PHPAPI int XML_GetCurrentColumnNumber(XML_Parser);
-PHPAPI int XML_GetCurrentByteIndex(XML_Parser);
-PHPAPI int XML_GetCurrentByteCount(XML_Parser);
-PHPAPI const XML_Char *XML_ExpatVersion(void);
-PHPAPI void XML_ParserFree(XML_Parser);
-
-#elif defined(HAVE_LIBEXPAT)
-#include <expat.h>
-#endif /* HAVE_LIBEXPAT */
-
-#endif /* PHP_EXPAT_COMPAT_H */
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- */
diff --git a/ext/xml/package.xml b/ext/xml/package.xml
deleted file mode 100644
index f7f4ce62b5..0000000000
--- a/ext/xml/package.xml
+++ /dev/null
@@ -1,74 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1" ?>
-<!DOCTYPE package SYSTEM "../pear/package.dtd">
-<package>
- <name>xml</name>
- <summary>XML Parsing functions</summary>
- <maintainers>
- <maintainer>
- <user>ssb</user>
- <name>Stig Bakken</name>
- <email>ssb@php.net</email>
- <role>lead</role>
- </maintainer>
- <maintainer>
- <user>thies</user>
- <name>Thies Arntzen</name>
- <email>thies@php.net</email>
- <role>lead</role>
- </maintainer>
- <maintainer>
- <user>sterling</user>
- <name>Sterling Hughes</name>
- <email>sterling@php.net</email>
- <role>lead</role>
- </maintainer>
- </maintainers>
- <description>
-This extension lets you create XML parsers and then define
-handlers for different XML events. Each XML parser also has
-a few parameters you can adjust.
- </description>
- <license>PHP</license>
- <release>
- <state>beta</state>
- <version>5.0rc1</version>
- <date>2004-03-19</date>
- <notes>
-package.xml added to support intallation using pear installer
- </notes>
- <configureoptions>
- <configureoption name="with-curl" default="autodetect" prompt="path to curl installation?"/>
- </configureoptions>
- <filelist>
- <file role="doc" name="CREDITS"/>
- <file role="src" name="config.m4"/>
- <file role="src" name="config.mw32"/>
- <file role="src" name="xml.mak"/>
- <file role="src" name="compat.c"/>
- <file role="src" name="expat_compat.h"/>
- <file role="src" name="php_xml.h"/>
- <file role="src" name="xml.c"/>
- <file role="test" name="tests/.cvsignore"/>
- <file role="test" name="tests/inc.ent"/>
- <file role="test" name="tests/skipif.inc"/>
- <file role="test" name="tests/xml001.phpt"/>
- <file role="test" name="tests/xml002.phpt"/>
- <file role="test" name="tests/xml003.phpt"/>
- <file role="test" name="tests/xml004.phpt"/>
- <file role="test" name="tests/xml006.phpt"/>
- <file role="test" name="tests/xml007.phpt"/>
- <file role="test" name="tests/xmltest.xml"/>
- <file role="test" name="tests/bug25666.phpt"/>
- <file role="test" name="tests/bug26528.phpt"/>
- <file role="test" name="tests/bug26614.phpt"/>
- <file role="test" name="tests/xml009.phpt"/>
- <file role="test" name="tests/xml010.phpt"/>
- </filelist>
- <deps>
- <dep type="php" rel="ge" version="5" />
- </deps>
- </release>
-</package>
-<!--
-vim:et:ts=1:sw=1
--->
diff --git a/ext/xml/php_xml.h b/ext/xml/php_xml.h
deleted file mode 100644
index 1864937b04..0000000000
--- a/ext/xml/php_xml.h
+++ /dev/null
@@ -1,161 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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. |
- +----------------------------------------------------------------------+
- | Authors: Stig Sæther Bakken <ssb@php.net> |
- | Thies C. Arntzen <thies@thieso.net> |
- | Sterling Hughes <sterling@php.net> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifndef PHP_XML_H
-#define PHP_XML_H
-
-#ifdef HAVE_XML
-extern zend_module_entry xml_module_entry;
-#define xml_module_ptr &xml_module_entry
-#else
-#define xml_module_ptr NULL
-#endif
-
-#ifdef HAVE_XML
-
-#include "ext/xml/expat_compat.h"
-
-#ifdef PHP_WIN32
-#define PHP_XML_API __declspec(dllexport)
-#else
-#define PHP_XML_API
-#endif
-
-
-#ifdef XML_UNICODE
-#error "UTF-16 Unicode support not implemented!"
-#endif
-
-typedef struct {
- XML_Char *default_encoding;
-} php_xml_globals;
-
-typedef struct {
- int index;
- int case_folding;
- XML_Parser parser;
- XML_Char *target_encoding;
-
- zval *startElementHandler;
- zval *endElementHandler;
- zval *characterDataHandler;
- zval *processingInstructionHandler;
- zval *defaultHandler;
- zval *unparsedEntityDeclHandler;
- zval *notationDeclHandler;
- zval *externalEntityRefHandler;
- zval *unknownEncodingHandler;
- zval *startNamespaceDeclHandler;
- zval *endNamespaceDeclHandler;
-
- zend_function *startElementPtr;
- zend_function *endElementPtr;
- zend_function *characterDataPtr;
- zend_function *processingInstructionPtr;
- zend_function *defaultPtr;
- zend_function *unparsedEntityDeclPtr;
- zend_function *notationDeclPtr;
- zend_function *externalEntityRefPtr;
- zend_function *unknownEncodingPtr;
- zend_function *startNamespaceDeclPtr;
- zend_function *endNamespaceDeclPtr;
-
- zval *object;
-
- zval *data;
- zval *info;
- int level;
- int toffset;
- int curtag;
- pval **ctag;
- char **ltags;
- int lastwasopen;
- int skipwhite;
-
- XML_Char *baseURI;
-} xml_parser;
-
-
-typedef struct {
- XML_Char *name;
- char (*decoding_function)(unsigned short);
- unsigned short (*encoding_function)(unsigned char);
-} xml_encoding;
-
-
-enum php_xml_option {
- PHP_XML_OPTION_CASE_FOLDING = 1,
- PHP_XML_OPTION_TARGET_ENCODING,
- PHP_XML_OPTION_SKIP_TAGSTART,
- PHP_XML_OPTION_SKIP_WHITE
-};
-
-/* for xml_parse_into_struct */
-
-#define XML_MAXLEVEL 255 /* XXX this should be dynamic */
-
-PHP_FUNCTION(xml_parser_create);
-PHP_FUNCTION(xml_parser_create_ns);
-PHP_FUNCTION(xml_set_object);
-PHP_FUNCTION(xml_set_element_handler);
-PHP_FUNCTION(xml_set_character_data_handler);
-PHP_FUNCTION(xml_set_processing_instruction_handler);
-PHP_FUNCTION(xml_set_default_handler);
-PHP_FUNCTION(xml_set_unparsed_entity_decl_handler);
-PHP_FUNCTION(xml_set_notation_decl_handler);
-PHP_FUNCTION(xml_set_external_entity_ref_handler);
-PHP_FUNCTION(xml_set_start_namespace_decl_handler);
-PHP_FUNCTION(xml_set_end_namespace_decl_handler);
-PHP_FUNCTION(xml_parse);
-PHP_FUNCTION(xml_get_error_code);
-PHP_FUNCTION(xml_error_string);
-PHP_FUNCTION(xml_get_current_line_number);
-PHP_FUNCTION(xml_get_current_column_number);
-PHP_FUNCTION(xml_get_current_byte_index);
-PHP_FUNCTION(xml_parser_free);
-PHP_FUNCTION(xml_parser_set_option);
-PHP_FUNCTION(xml_parser_get_option);
-PHP_FUNCTION(utf8_encode);
-PHP_FUNCTION(utf8_decode);
-PHP_FUNCTION(xml_parse_into_struct);
-
-PHPAPI char *_xml_zval_strdup(zval *val);
-PHPAPI char *xml_utf8_decode(const XML_Char *, int, int *, const XML_Char *);
-
-#endif /* HAVE_LIBEXPAT */
-
-#define phpext_xml_ptr xml_module_ptr
-
-#ifdef ZTS
-#define XML(v) TSRMG(xml_globals_id, php_xml_globals *, v)
-#else
-#define XML(v) (xml_globals.v)
-#endif
-
-#endif /* PHP_XML_H */
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- */
diff --git a/ext/xml/tests/bug25666.phpt b/ext/xml/tests/bug25666.phpt
deleted file mode 100644
index ce67ea8ed4..0000000000
--- a/ext/xml/tests/bug25666.phpt
+++ /dev/null
@@ -1,34 +0,0 @@
---TEST--
-Bug #25666 (XML namespaces broken in libxml-based SAX interface)
---SKIPIF--
-<?php
-if (! @xml_parser_create_ns('ISO-8859-1')) { die("skip xml_parser_create_ns is not supported on this plattform");}
-?>
---FILE--
-<?php
-function start_elem($parser,$name,$attribs) {
- var_dump($name);
-}
-function end_elem()
-{
-}
-
-$xml = <<<HERE
-<foo:a xmlns:foo="http://example.com/foo"
- xmlns:bar="http://example.com/bar"
- xmlns:baz="http://example.com/baz">
- <bar:b />
- <baz:c />
-</foo>
-HERE;
-
-$parser = xml_parser_create_ns("ISO-8859-1","@");
-xml_set_element_handler($parser,'start_elem','end_elem');
-xml_parser_set_option($parser,XML_OPTION_CASE_FOLDING,0);
-xml_parse($parser, $xml);
-xml_parser_free($parser);
-?>
---EXPECT--
-string(24) "http://example.com/foo@a"
-string(24) "http://example.com/bar@b"
-string(24) "http://example.com/baz@c"
diff --git a/ext/xml/tests/bug26528.phpt b/ext/xml/tests/bug26528.phpt
deleted file mode 100644
index 2fa015a84d..0000000000
--- a/ext/xml/tests/bug26528.phpt
+++ /dev/null
@@ -1,27 +0,0 @@
---TEST--
-Bug #26528 (HTML entities are not being decoded)
---FILE--
-<?php
- $sample = "<?xml version=\"1.0\"?><test attr=\"angle&lt;bracket\"/>";
- $parser = xml_parser_create();
- $res = xml_parse_into_struct($parser,$sample,$vals,$index);
- xml_parser_free($parser);
- var_dump($vals);
-?>
---EXPECT--
-array(1) {
- [0]=>
- array(4) {
- ["tag"]=>
- string(4) "TEST"
- ["type"]=>
- string(8) "complete"
- ["level"]=>
- int(1)
- ["attributes"]=>
- array(1) {
- ["ATTR"]=>
- string(13) "angle<bracket"
- }
- }
-}
diff --git a/ext/xml/tests/bug26614.phpt b/ext/xml/tests/bug26614.phpt
deleted file mode 100644
index 14a4ea8a9f..0000000000
--- a/ext/xml/tests/bug26614.phpt
+++ /dev/null
@@ -1,88 +0,0 @@
---TEST--
-Bug #26614 (CDATA sections skipped on line count)
---FILE--
-<?php
-/*
-this test works fine with Expat but fails with libxml
-which we now use as default
-
-further investigation has shown that not only line count
-is skippet on CDATA sections but that libxml does also
-show different column numbers and byte positions depending
-on context and in opposition to what one would expect to
-see and what good old Expat reported just fine ...
-*/
-
-$xmls = array();
-
-// Case 1: CDATA Sections
-$xmls["CDATA"] ='<?xml version="1.0" encoding="iso-8859-1" ?>
-<data>
-<![CDATA[
-multi
-line
-CDATA
-block
-]]>
-</data>';
-
-// Case 2: replace some characters so that we get comments instead
-$xmls["Comment"] ='<?xml version="1.0" encoding="iso-8859-1" ?>
-<data>
-<!-- ATA[
-multi
-line
-CDATA
-block
--->
-</data>';
-
-// Case 3: replace even more characters so that only textual data is left
-$xmls["Text"] ='<?xml version="1.0" encoding="iso-8859-1" ?>
-<data>
--!-- ATA[
-multi
-line
-CDATA
-block
----
-</data>';
-
-function startElement($parser, $name, $attrs) {
- printf("<$name> at line %d, col %d (byte %d)\n",
- xml_get_current_line_number($parser),
- xml_get_current_column_number($parser),
- xml_get_current_byte_index($parser));
-}
-
-function endElement($parser, $name) {
- printf("</$name> at line %d, col %d (byte %d)\n",
- xml_get_current_line_number($parser),
- xml_get_current_column_number($parser),
- xml_get_current_byte_index($parser));
-}
-
-function characterData($parser, $data) {
- // dummy
-}
-
-foreach ($xmls as $desc => $xml) {
- echo "$desc\n";
- $xml_parser = xml_parser_create();
- xml_set_element_handler($xml_parser, "startElement", "endElement");
- xml_set_character_data_handler($xml_parser, "characterData");
- if (!xml_parse($xml_parser, $xml, true))
- echo "Error: ".xml_error_string(xml_get_error_code($xml_parser))."\n";
- xml_parser_free($xml_parser);
-}
-?>
---EXPECT--
-CDATA
-<DATA> at line 2, col 0 (byte 45)
-</DATA> at line 9, col 0 (byte 90)
-Comment
-<DATA> at line 2, col 0 (byte 45)
-</DATA> at line 9, col 0 (byte 90)
-Text
-<DATA> at line 2, col 0 (byte 45)
-</DATA> at line 9, col 0 (byte 90)
diff --git a/ext/xml/tests/inc.ent b/ext/xml/tests/inc.ent
deleted file mode 100644
index 8f86465c2a..0000000000
--- a/ext/xml/tests/inc.ent
+++ /dev/null
@@ -1 +0,0 @@
-<!ENTITY included-entity "This is text included from an entity">
diff --git a/ext/xml/tests/skipif.inc b/ext/xml/tests/skipif.inc
deleted file mode 100644
index 44898f3da6..0000000000
--- a/ext/xml/tests/skipif.inc
+++ /dev/null
@@ -1,10 +0,0 @@
-<?php
-// DO NOT dl load extension
-//if (!extension_loaded("xml")) {
-// $dlext = (substr(PHP_OS, 0, 3) == "WIN") ? ".dll" : ".so";
-// @dl("xml$dlext");
-//}
-if (!extension_loaded("xml")) {
- die('skip xml extension not available');
-}
-?>
diff --git a/ext/xml/tests/xml001.phpt b/ext/xml/tests/xml001.phpt
deleted file mode 100644
index 6ee908e46d..0000000000
--- a/ext/xml/tests/xml001.phpt
+++ /dev/null
@@ -1,99 +0,0 @@
---TEST--
-XML parser test, function callbacks
---SKIPIF--
-<?php
-require_once("skipif.inc");
-XML_SAX_IMPL == 'libxml' && die('skip this test is not intended for libxml SAX parser');
-?>
---INI--
-magic_quotes_runtime=0
---FILE--
-<?php
-chdir(dirname(__FILE__));
-
-$xml_parser = xml_parser_create();
-xml_parser_set_option($xml_parser, XML_OPTION_CASE_FOLDING, 1);
-xml_set_element_handler($xml_parser, "startElement", "endElement");
-xml_set_character_data_handler($xml_parser, "characterData");
-xml_set_processing_instruction_handler($xml_parser, "PIHandler");
-xml_set_default_handler($xml_parser, "defaultHandler");
-xml_set_external_entity_ref_handler($xml_parser, "externalEntityRefHandler");
-
-if (!($fp = @fopen("xmltest.xml", "r"))) {
- die("could not open XML input");
-}
-
-while ($data = fread($fp, 4096)) {
- if (!xml_parse($xml_parser, $data, feof($fp))) {
- die(sprintf("XML error: %s at line %d\n",
- xml_error_string(xml_get_error_code($xml_parser)),
- xml_get_current_line_number($xml_parser)));
- }
-}
-print "parse complete\n";
-xml_parser_free($xml_parser);
-
-function startElement($parser, $name, $attribs)
-{
- print "\{$name";
- if (sizeof($attribs)) {
- while (list($k, $v) = each($attribs)) {
- print " $k=\"$v\"";
- }
- }
- print "}";
-}
-
-function endElement($parser, $name)
-{
- print "\{/$name}";
-}
-
-function characterData($parser, $data)
-{
- print "\{CDATA[$data]}";
-}
-
-function PIHandler($parser, $target, $data)
-{
- print "\{PI[$target,$data]}";
-}
-
-function defaultHandler($parser, $data)
-{
- if (substr($data, 0, 1) == "&" && substr($data, -1, 1) == ";") {
- print "\{ENTREF[$data]}";
- } else {
- print "\{?[$data]}";
- }
-}
-
-function externalEntityRefHandler($parser, $openEntityNames, $base, $systemId, $publicId)
-{
- print "\{EXTENTREF[$openEntityNames,$base,$systemId,$publicId]}\n";
- return true;
-}
-
-?>
---EXPECT--
-{?[<?xml version="1.0" encoding="ISO-8859-1"?>]}{?[
-]}{?[<!DOCTYPE]}{?[ ]}{?[phptest]}{?[ ]}{?[SYSTEM]}{?[ ]}{?["notfound.dtd"]}{?[ ]}{?[[]}{?[
-]}{?[<!ENTITY]}{?[ ]}{?[%]}{?[ ]}{?[incent]}{?[ ]}{?[SYSTEM]}{?[ ]}{?["inc.ent"]}{?[>]}{?[
-]}{?[%incent;]}{?[
-]}{?[]]}{?[>]}{?[
-]}{ROOT ID="elem1"}{CDATA[
-]}{CDATA[ Plain text.]}{CDATA[
-]}{CDATA[ ]}{ELEM1}{CDATA[
-]}{CDATA[ ]}{?[<!-- comment -->]}{CDATA[
-]}{CDATA[ ]}{ELEM2}{CDATA[
-]}{CDATA[ ]}{?[<![CDATA[]}{CDATA[CDATA block]}{?[]]>]}{CDATA[
-]}{CDATA[ ]}{ELEM3}{CDATA[
-]}{CDATA[ ]}{ENTREF[&included-entity;]}{CDATA[
-]}{CDATA[ ]}{ELEM4}{CDATA[
-]}{CDATA[ ]}{PI[test,processing instruction ]}{CDATA[
-]}{CDATA[ ]}{/ELEM4}{CDATA[
-]}{CDATA[ ]}{/ELEM3}{CDATA[
-]}{CDATA[ ]}{/ELEM2}{CDATA[
-]}{CDATA[ ]}{/ELEM1}{CDATA[
-]}{/ROOT}{?[
-]}parse complete
diff --git a/ext/xml/tests/xml002.phpt b/ext/xml/tests/xml002.phpt
deleted file mode 100644
index 9785002926..0000000000
--- a/ext/xml/tests/xml002.phpt
+++ /dev/null
@@ -1,100 +0,0 @@
---TEST--
-XML parser test, object tuple callbacks
---SKIPIF--
-<?php
-require_once("skipif.inc");
-XML_SAX_IMPL == 'libxml' && die('skip this test is not intended for libxml SAX parser');
-?>
---INI--
-magic_quotes_runtime=0
---FILE--
-<?php
-chdir(dirname(__FILE__));
-
-class myclass
-{
- function startElement($parser, $name, $attribs)
- {
- print "\{$name";
- if (sizeof($attribs)) {
- while (list($k, $v) = each($attribs)) {
- print " $k=\"$v\"";
- }
- }
- print "}";
- }
- function endElement($parser, $name)
- {
- print "\{/$name}";
- }
- function characterData($parser, $data)
- {
- print "\{CDATA[$data]}";
- }
- function PIHandler($parser, $target, $data)
- {
- print "\{PI[$target,$data]}";
- }
- function defaultHandler($parser, $data)
- {
- if (substr($data, 0, 1) == "&" && substr($data, -1, 1) == ";") {
- print "\{ENTREF[$data]}";
- } else {
- print "\{?[$data]}";
- }
- }
- function externalEntityRefHandler($parser, $openEntityNames, $base, $systemId, $publicId)
- {
- print "\{EXTENTREF[$openEntityNames,$base,$systemId,$publicId]}\n";
- return true;
- }
-}
-
-$xml_parser = xml_parser_create();
-$obj = new myclass;
-xml_parser_set_option($xml_parser, XML_OPTION_CASE_FOLDING, 1);
-xml_set_element_handler($xml_parser, array($obj,"startElement"),
-array($obj, "endElement"));
-xml_set_character_data_handler($xml_parser, array($obj, "characterData"));
-xml_set_processing_instruction_handler($xml_parser, array($obj, "PIHandler"));
-xml_set_default_handler($xml_parser, array($obj, "defaultHandler"));
-xml_set_external_entity_ref_handler($xml_parser,
-array($obj, "externalEntityRefHandler"));
-
-if (!($fp = @fopen("xmltest.xml", "r"))) {
- die("could not open XML input");
-}
-
-while ($data = fread($fp, 4096)) {
- if (!xml_parse($xml_parser, $data, feof($fp))) {
- die(sprintf("XML error: %s at line %d\n",
- xml_error_string(xml_get_error_code($xml_parser)),
- xml_get_current_line_number($xml_parser)));
- }
-}
-print "parse complete\n";
-xml_parser_free($xml_parser);
-
-?>
---EXPECT--
-{?[<?xml version="1.0" encoding="ISO-8859-1"?>]}{?[
-]}{?[<!DOCTYPE]}{?[ ]}{?[phptest]}{?[ ]}{?[SYSTEM]}{?[ ]}{?["notfound.dtd"]}{?[ ]}{?[[]}{?[
-]}{?[<!ENTITY]}{?[ ]}{?[%]}{?[ ]}{?[incent]}{?[ ]}{?[SYSTEM]}{?[ ]}{?["inc.ent"]}{?[>]}{?[
-]}{?[%incent;]}{?[
-]}{?[]]}{?[>]}{?[
-]}{ROOT ID="elem1"}{CDATA[
-]}{CDATA[ Plain text.]}{CDATA[
-]}{CDATA[ ]}{ELEM1}{CDATA[
-]}{CDATA[ ]}{?[<!-- comment -->]}{CDATA[
-]}{CDATA[ ]}{ELEM2}{CDATA[
-]}{CDATA[ ]}{?[<![CDATA[]}{CDATA[CDATA block]}{?[]]>]}{CDATA[
-]}{CDATA[ ]}{ELEM3}{CDATA[
-]}{CDATA[ ]}{ENTREF[&included-entity;]}{CDATA[
-]}{CDATA[ ]}{ELEM4}{CDATA[
-]}{CDATA[ ]}{PI[test,processing instruction ]}{CDATA[
-]}{CDATA[ ]}{/ELEM4}{CDATA[
-]}{CDATA[ ]}{/ELEM3}{CDATA[
-]}{CDATA[ ]}{/ELEM2}{CDATA[
-]}{CDATA[ ]}{/ELEM1}{CDATA[
-]}{/ROOT}{?[
-]}parse complete
diff --git a/ext/xml/tests/xml003.phpt b/ext/xml/tests/xml003.phpt
deleted file mode 100644
index fa0984e893..0000000000
--- a/ext/xml/tests/xml003.phpt
+++ /dev/null
@@ -1,98 +0,0 @@
---TEST--
-XML parser test, xml_set_object callbacks
---SKIPIF--
-<?php
-require_once("skipif.inc");
-XML_SAX_IMPL == 'libxml' && die('skip this test is not intended for libxml SAX parser');
-?>
---INI--
-magic_quotes_runtime=0
---FILE--
-<?php
-chdir(dirname(__FILE__));
-
-class myclass
-{
- function startElement($parser, $name, $attribs)
- {
- print "\{$name";
- if (sizeof($attribs)) {
- while (list($k, $v) = each($attribs)) {
- print " $k=\"$v\"";
- }
- }
- print "}";
- }
- function endElement($parser, $name)
- {
- print "\{/$name}";
- }
- function characterData($parser, $data)
- {
- print "\{CDATA[$data]}";
- }
- function PIHandler($parser, $target, $data)
- {
- print "\{PI[$target,$data]}";
- }
- function defaultHandler($parser, $data)
- {
- if (substr($data, 0, 1) == "&" && substr($data, -1, 1) == ";") {
- print "\{ENTREF[$data]}";
- } else {
- print "\{?[$data]}";
- }
- }
- function externalEntityRefHandler($parser, $openEntityNames, $base, $systemId, $publicId)
- {
- print "\{EXTENTREF[$openEntityNames,$base,$systemId,$publicId]}\n";
- return true;
- }
-}
-
-$xml_parser = xml_parser_create();
-$obj = new myclass;
-xml_set_object($xml_parser, $obj);
-xml_parser_set_option($xml_parser, XML_OPTION_CASE_FOLDING, 1);
-xml_set_element_handler($xml_parser, "startElement", "endElement");
-xml_set_character_data_handler($xml_parser, "characterData");
-xml_set_processing_instruction_handler($xml_parser, "PIHandler");
-xml_set_default_handler($xml_parser, "defaultHandler");
-xml_set_external_entity_ref_handler($xml_parser, "externalEntityRefHandler");
-
-if (!($fp = @fopen("xmltest.xml", "r"))) {
- die("could not open XML input");
-}
-
-while ($data = fread($fp, 4096)) {
- if (!xml_parse($xml_parser, $data, feof($fp))) {
- die(sprintf("XML error: %s at line %d\n",
- xml_error_string(xml_get_error_code($xml_parser)),
- xml_get_current_line_number($xml_parser)));
- }
-}
-print "parse complete\n";
-xml_parser_free($xml_parser);
-?>
---EXPECT--
-{?[<?xml version="1.0" encoding="ISO-8859-1"?>]}{?[
-]}{?[<!DOCTYPE]}{?[ ]}{?[phptest]}{?[ ]}{?[SYSTEM]}{?[ ]}{?["notfound.dtd"]}{?[ ]}{?[[]}{?[
-]}{?[<!ENTITY]}{?[ ]}{?[%]}{?[ ]}{?[incent]}{?[ ]}{?[SYSTEM]}{?[ ]}{?["inc.ent"]}{?[>]}{?[
-]}{?[%incent;]}{?[
-]}{?[]]}{?[>]}{?[
-]}{ROOT ID="elem1"}{CDATA[
-]}{CDATA[ Plain text.]}{CDATA[
-]}{CDATA[ ]}{ELEM1}{CDATA[
-]}{CDATA[ ]}{?[<!-- comment -->]}{CDATA[
-]}{CDATA[ ]}{ELEM2}{CDATA[
-]}{CDATA[ ]}{?[<![CDATA[]}{CDATA[CDATA block]}{?[]]>]}{CDATA[
-]}{CDATA[ ]}{ELEM3}{CDATA[
-]}{CDATA[ ]}{ENTREF[&included-entity;]}{CDATA[
-]}{CDATA[ ]}{ELEM4}{CDATA[
-]}{CDATA[ ]}{PI[test,processing instruction ]}{CDATA[
-]}{CDATA[ ]}{/ELEM4}{CDATA[
-]}{CDATA[ ]}{/ELEM3}{CDATA[
-]}{CDATA[ ]}{/ELEM2}{CDATA[
-]}{CDATA[ ]}{/ELEM1}{CDATA[
-]}{/ROOT}{?[
-]}parse complete
diff --git a/ext/xml/tests/xml004.phpt b/ext/xml/tests/xml004.phpt
deleted file mode 100644
index 78840ee122..0000000000
--- a/ext/xml/tests/xml004.phpt
+++ /dev/null
@@ -1,64 +0,0 @@
---TEST--
-XML parser case folding test
---SKIPIF--
-<?php include("skipif.inc"); ?>
---INI--
-magic_quotes_runtime=0
---FILE--
-<?php
-chdir(dirname(__FILE__));
-
-$xp = xml_parser_create();
-xml_parser_set_option($xp, XML_OPTION_CASE_FOLDING, false);
-xml_set_element_handler($xp, "start_element", "end_element");
-$fp = fopen("xmltest.xml", "r");
-while ($data = fread($fp, 4096)) {
- xml_parse($xp, $data, feof($fp));
-}
-xml_parser_free($xp);
-$xp = xml_parser_create();
-xml_parser_set_option($xp, XML_OPTION_CASE_FOLDING, true);
-xml_set_element_handler($xp, "start_element", "end_element");
-$fp = fopen("xmltest.xml", "r");
-while ($data = fread($fp, 4096)) {
- xml_parse($xp, $data, feof($fp));
-}
-xml_parser_free($xp);
-
-function start_element($xp, $elem, $attribs)
-{
- print "<$elem";
- if (sizeof($attribs)) {
- while (list($k, $v) = each($attribs)) {
- print " $k=\"$v\"";
- }
- }
- print ">\n";
-}
-
-function end_element($xp, $elem)
-{
- print "</$elem>\n";
-}
-?>
---EXPECT--
-<root id="elem1">
-<elem1>
-<elem2>
-<elem3>
-<elem4>
-</elem4>
-</elem3>
-</elem2>
-</elem1>
-</root>
-<ROOT ID="elem1">
-<ELEM1>
-<ELEM2>
-<ELEM3>
-<ELEM4>
-</ELEM4>
-</ELEM3>
-</ELEM2>
-</ELEM1>
-</ROOT>
diff --git a/ext/xml/tests/xml006.phpt b/ext/xml/tests/xml006.phpt
deleted file mode 100644
index c714e85913..0000000000
--- a/ext/xml/tests/xml006.phpt
+++ /dev/null
@@ -1,12 +0,0 @@
---TEST--
-UTF-8<->ISO Latin 1 encoding/decoding test
---SKIPIF--
-<?php include("skipif.inc"); ?>
---FILE--
-<?php
-printf("%s -> %s\n", urlencode("æ"), urlencode(utf8_encode("æ")));
-printf("%s <- %s\n", urlencode(utf8_decode(urldecode("%C3%A6"))), "%C3%A6");
-?>
---EXPECT--
-%E6 -> %C3%A6
-%E6 <- %C3%A6
diff --git a/ext/xml/tests/xml007.phpt b/ext/xml/tests/xml007.phpt
deleted file mode 100644
index 377475bb1c..0000000000
--- a/ext/xml/tests/xml007.phpt
+++ /dev/null
@@ -1,53 +0,0 @@
---TEST--
-xml_parse_into_struct/umlauts in tags
---SKIPIF--
-<?php // vim600: syn=php
-include("skipif.inc");
-if(strtoupper("äöüß") != "ÄÖÜß")
-{
- die("skip strtoupper on non-ascii not supported on this platform");
-}
-?>
---FILE--
-<?php
-function startHandler($parser,$tag,$attr)
-{
- var_dump($tag,$attr);
-}
-
-function endHandler($parser,$tag)
-{
- var_dump($tag);
-}
-
-$xmldata = '<?xml version="1.0" encoding="ISO-8859-1"?><äöü üäß="Üäß">ÄÖÜ</äöü>';
-$parser = xml_parser_create('ISO-8859-1');
-xml_set_element_handler($parser, "startHandler", "endHandler");
-xml_parse_into_struct($parser, $xmldata, $struct, $index);
-var_dump($struct);
-?>
---EXPECT--
-string(3) "ÄÖÜ"
-array(1) {
- ["ÜÄß"]=>
- string(3) "Üäß"
-}
-string(3) "ÄÖÜ"
-array(1) {
- [0]=>
- array(5) {
- ["tag"]=>
- string(3) "ÄÖÜ"
- ["type"]=>
- string(8) "complete"
- ["level"]=>
- int(1)
- ["attributes"]=>
- array(1) {
- ["ÜÄß"]=>
- string(3) "Üäß"
- }
- ["value"]=>
- string(3) "ÄÖÜ"
- }
-}
diff --git a/ext/xml/tests/xml009.phpt b/ext/xml/tests/xml009.phpt
deleted file mode 100644
index 3b64e7b8ba..0000000000
--- a/ext/xml/tests/xml009.phpt
+++ /dev/null
@@ -1,34 +0,0 @@
---TEST--
-XML parser test, default namespaces
---SKIPIF--
-<?php
-if (! @xml_parser_create_ns('ISO-8859-1')) { die("skip xml_parser_create_ns is not supported on this plattform");}
-?>
---FILE--
-<?php
-function start_elem($parser,$name,$attribs) {
- var_dump($name);
-}
-function end_elem()
-{
-}
-
-$xml = <<<HERE
-<a xmlns="http://example.com/foo"
- xmlns:bar="http://example.com/bar"
- xmlns:baz="http://example.com/baz">
- <bar:b />
- <bar:c xmlns:bar="http://example.com/foo"/>
-</a>
-HERE;
-
-$parser = xml_parser_create_ns("ISO-8859-1","@");
-xml_set_element_handler($parser,'start_elem','end_elem');
-xml_parser_set_option($parser,XML_OPTION_CASE_FOLDING,0);
-xml_parse($parser, $xml);
-xml_parser_free($parser);
-?>
---EXPECT--
-string(24) "http://example.com/foo@a"
-string(24) "http://example.com/bar@b"
-string(24) "http://example.com/foo@c"
diff --git a/ext/xml/tests/xml010.phpt b/ext/xml/tests/xml010.phpt
deleted file mode 100644
index 125e9c7b03..0000000000
--- a/ext/xml/tests/xml010.phpt
+++ /dev/null
@@ -1,38 +0,0 @@
---TEST--
-XML parser test, attributes
---SKIPIF--
-<?php
-if (! @xml_parser_create_ns('ISO-8859-1')) { die("skip xml_parser_create_ns is not supported on this plattform");}
-?>
---FILE--
-<?php
-function start_elem($parser,$name,$attribs) {
- print "$name ";
-
- foreach($attribs as $key => $value) {
- print "$key = $value ";
- }
- print "\n";
-}
-function end_elem()
-{
-}
-
-$xml = <<<HERE
-<a xmlns="http://example.com/foo"
- xmlns:bar="http://example.com/bar">
- <bar:b foo="bar"/>
- <bar:c bar:nix="null" foo="bar"/>
-</a>
-HERE;
-
-$parser = xml_parser_create_ns("ISO-8859-1","@");
-xml_set_element_handler($parser,'start_elem','end_elem');
-xml_parser_set_option($parser,XML_OPTION_CASE_FOLDING,0);
-xml_parse($parser, $xml);
-xml_parser_free($parser);
-?>
---EXPECT--
-http://example.com/foo@a
-http://example.com/bar@b foo = bar
-http://example.com/bar@c http://example.com/bar@nix = null foo = bar
diff --git a/ext/xml/tests/xmltest.xml b/ext/xml/tests/xmltest.xml
deleted file mode 100644
index c15d6ea1ab..0000000000
--- a/ext/xml/tests/xmltest.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE phptest SYSTEM "notfound.dtd" [
-<!ENTITY % incent SYSTEM "inc.ent">
-%incent;
-]>
-<root id="elem1">
- Plain text.
- <elem1>
- <!-- comment -->
- <elem2>
- <![CDATA[CDATA block]]>
- <elem3>
- &included-entity;
- <elem4>
- <?test processing instruction ?>
- </elem4>
- </elem3>
- </elem2>
- </elem1>
-</root>
diff --git a/ext/xml/xml.c b/ext/xml/xml.c
deleted file mode 100644
index fba42e2e71..0000000000
--- a/ext/xml/xml.c
+++ /dev/null
@@ -1,1630 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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. |
- +----------------------------------------------------------------------+
- | Authors: Stig Sæther Bakken <ssb@php.net> |
- | Thies C. Arntzen <thies@thieso.net> |
- | Sterling Hughes <sterling@php.net> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-#define IS_EXT_MODULE
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "php.h"
-
-#define PHP_XML_INTERNAL
-#include "zend_variables.h"
-#include "ext/standard/php_string.h"
-#include "ext/standard/info.h"
-
-#if HAVE_XML
-
-#include "php_xml.h"
-# include "ext/standard/head.h"
-#ifdef LIBXML_EXPAT_COMPAT
-#include "ext/libxml/php_libxml.h"
-#endif
-
-/* Short-term TODO list:
- * - Implement XML_ExternalEntityParserCreate()
- * - XML_SetCommentHandler
- * - XML_SetCdataSectionHandler
- * - XML_SetParamEntityParsing
- */
-
-/* Long-term TODO list:
- * - Fix the expat library so you can install your own memory manager
- * functions
- */
-
-/* Known bugs:
- * - Weird things happen with <![CDATA[]]> sections.
- */
-
-#ifdef ZTS
-int xml_globals_id;
-#else
-PHP_XML_API php_xml_globals xml_globals;
-#endif
-
-/* {{{ dynamically loadable module stuff */
-#ifdef COMPILE_DL_XML
-ZEND_GET_MODULE(xml)
-# ifdef PHP_WIN32
-# include "zend_arg_defs.c"
-# endif
-#endif /* COMPILE_DL_XML */
-/* }}} */
-
-/* {{{ function prototypes */
-PHP_MINIT_FUNCTION(xml);
-PHP_RINIT_FUNCTION(xml);
-PHP_MSHUTDOWN_FUNCTION(xml);
-PHP_RSHUTDOWN_FUNCTION(xml);
-PHP_MINFO_FUNCTION(xml);
-
-static void xml_parser_dtor(zend_rsrc_list_entry *rsrc TSRMLS_DC);
-static void xml_set_handler(zval **, zval **);
-inline static unsigned short xml_encode_iso_8859_1(unsigned char);
-inline static char xml_decode_iso_8859_1(unsigned short);
-inline static unsigned short xml_encode_us_ascii(unsigned char);
-inline static char xml_decode_us_ascii(unsigned short);
-static XML_Char *xml_utf8_encode(const char *, int, int *, const XML_Char *);
-static zval *xml_call_handler(xml_parser *, zval *, zend_function *, int, zval **);
-static zval *_xml_xmlchar_zval(const XML_Char *, int, const XML_Char *);
-static int _xml_xmlcharlen(const XML_Char *);
-static void _xml_add_to_info(xml_parser *parser,char *name);
-inline static char *_xml_decode_tag(xml_parser *parser, const char *tag);
-
-void _xml_startElementHandler(void *, const XML_Char *, const XML_Char **);
-void _xml_endElementHandler(void *, const XML_Char *);
-void _xml_characterDataHandler(void *, const XML_Char *, int);
-void _xml_processingInstructionHandler(void *, const XML_Char *, const XML_Char *);
-void _xml_defaultHandler(void *, const XML_Char *, int);
-void _xml_unparsedEntityDeclHandler(void *, const XML_Char *, const XML_Char *, const XML_Char *, const XML_Char *, const XML_Char *);
-void _xml_notationDeclHandler(void *, const XML_Char *, const XML_Char *, const XML_Char *, const XML_Char *);
-int _xml_externalEntityRefHandler(XML_Parser, const XML_Char *, const XML_Char *, const XML_Char *, const XML_Char *);
-
-void _xml_startNamespaceDeclHandler(void *, const XML_Char *, const XML_Char *);
-void _xml_endNamespaceDeclHandler(void *, const XML_Char *);
-/* }}} */
-
-/* {{{ extension definition structures */
-static
- ZEND_BEGIN_ARG_INFO(third_and_fourth_args_force_ref, 0)
- ZEND_ARG_PASS_INFO(0)
- ZEND_ARG_PASS_INFO(0)
- ZEND_ARG_PASS_INFO(1)
- ZEND_ARG_PASS_INFO(1)
- ZEND_END_ARG_INFO();
-
-function_entry xml_functions[] = {
- PHP_FE(xml_parser_create, NULL)
- PHP_FE(xml_parser_create_ns, NULL)
- PHP_FE(xml_set_object, second_arg_force_ref)
- PHP_FE(xml_set_element_handler, NULL)
- PHP_FE(xml_set_character_data_handler, NULL)
- PHP_FE(xml_set_processing_instruction_handler, NULL)
- PHP_FE(xml_set_default_handler, NULL)
- PHP_FE(xml_set_unparsed_entity_decl_handler, NULL)
- PHP_FE(xml_set_notation_decl_handler, NULL)
- PHP_FE(xml_set_external_entity_ref_handler, NULL)
- PHP_FE(xml_set_start_namespace_decl_handler, NULL)
- PHP_FE(xml_set_end_namespace_decl_handler, NULL)
- PHP_FE(xml_parse, NULL)
- PHP_FE(xml_parse_into_struct, third_and_fourth_args_force_ref)
- PHP_FE(xml_get_error_code, NULL)
- PHP_FE(xml_error_string, NULL)
- PHP_FE(xml_get_current_line_number, NULL)
- PHP_FE(xml_get_current_column_number, NULL)
- PHP_FE(xml_get_current_byte_index, NULL)
- PHP_FE(xml_parser_free, NULL)
- PHP_FE(xml_parser_set_option, NULL)
- PHP_FE(xml_parser_get_option, NULL)
- PHP_FE(utf8_encode, NULL)
- PHP_FE(utf8_decode, NULL)
- {NULL, NULL, NULL}
-};
-
-zend_module_entry xml_module_entry = {
- STANDARD_MODULE_HEADER,
- "xml", /* extension name */
- xml_functions, /* extension function list */
- PHP_MINIT(xml), /* extension-wide startup function */
- PHP_MSHUTDOWN(xml), /* extension-wide shutdown function */
- PHP_RINIT(xml), /* per-request startup function */
- PHP_RSHUTDOWN(xml), /* per-request shutdown function */
- PHP_MINFO(xml), /* information function */
- NO_VERSION_YET,
- STANDARD_MODULE_PROPERTIES
-};
-
-/* All the encoding functions are set to NULL right now, since all
- * the encoding is currently done internally by expat/xmltok.
- */
-xml_encoding xml_encodings[] = {
- { "ISO-8859-1", xml_decode_iso_8859_1, xml_encode_iso_8859_1 },
- { "US-ASCII", xml_decode_us_ascii, xml_encode_us_ascii },
- { "UTF-8", NULL, NULL },
- { NULL, NULL, NULL }
-};
-
-static XML_Memory_Handling_Suite php_xml_mem_hdlrs;
-
-/* True globals, no need for thread safety */
-static int le_xml_parser;
-
-/* }}} */
-
-/* {{{ startup, shutdown and info functions */
-#ifdef ZTS
-static void php_xml_init_globals(php_xml_globals *xml_globals_p TSRMLS_DC)
-{
- XML(default_encoding) = "UTF-8";
-}
-#endif
-
-static void *php_xml_malloc_wrapper(size_t sz)
-{
- return emalloc(sz);
-}
-
-static void *php_xml_realloc_wrapper(void *ptr, size_t sz)
-{
- return erealloc(ptr, sz);
-}
-
-static void php_xml_free_wrapper(void *ptr)
-{
- if (ptr != NULL) {
- efree(ptr);
- }
-}
-
-PHP_MINIT_FUNCTION(xml)
-{
- le_xml_parser = zend_register_list_destructors_ex(xml_parser_dtor, NULL, "xml", module_number);
-
-#ifdef ZTS
- ts_allocate_id(&xml_globals_id, sizeof(php_xml_globals), (ts_allocate_ctor) php_xml_init_globals, NULL);
-#else
- XML(default_encoding) = "UTF-8";
-#endif
-
- REGISTER_LONG_CONSTANT("XML_ERROR_NONE", XML_ERROR_NONE, CONST_CS|CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("XML_ERROR_NO_MEMORY", XML_ERROR_NO_MEMORY, CONST_CS|CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("XML_ERROR_SYNTAX", XML_ERROR_SYNTAX, CONST_CS|CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("XML_ERROR_NO_ELEMENTS", XML_ERROR_NO_ELEMENTS, CONST_CS|CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("XML_ERROR_INVALID_TOKEN", XML_ERROR_INVALID_TOKEN, CONST_CS|CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("XML_ERROR_UNCLOSED_TOKEN", XML_ERROR_UNCLOSED_TOKEN, CONST_CS|CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("XML_ERROR_PARTIAL_CHAR", XML_ERROR_PARTIAL_CHAR, CONST_CS|CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("XML_ERROR_TAG_MISMATCH", XML_ERROR_TAG_MISMATCH, CONST_CS|CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("XML_ERROR_DUPLICATE_ATTRIBUTE", XML_ERROR_DUPLICATE_ATTRIBUTE, CONST_CS|CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("XML_ERROR_JUNK_AFTER_DOC_ELEMENT", XML_ERROR_JUNK_AFTER_DOC_ELEMENT, CONST_CS|CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("XML_ERROR_PARAM_ENTITY_REF", XML_ERROR_PARAM_ENTITY_REF, CONST_CS|CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("XML_ERROR_UNDEFINED_ENTITY", XML_ERROR_UNDEFINED_ENTITY, CONST_CS|CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("XML_ERROR_RECURSIVE_ENTITY_REF", XML_ERROR_RECURSIVE_ENTITY_REF, CONST_CS|CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("XML_ERROR_ASYNC_ENTITY", XML_ERROR_ASYNC_ENTITY, CONST_CS|CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("XML_ERROR_BAD_CHAR_REF", XML_ERROR_BAD_CHAR_REF, CONST_CS|CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("XML_ERROR_BINARY_ENTITY_REF", XML_ERROR_BINARY_ENTITY_REF, CONST_CS|CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("XML_ERROR_ATTRIBUTE_EXTERNAL_ENTITY_REF", XML_ERROR_ATTRIBUTE_EXTERNAL_ENTITY_REF, CONST_CS|CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("XML_ERROR_MISPLACED_XML_PI", XML_ERROR_MISPLACED_XML_PI, CONST_CS|CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("XML_ERROR_UNKNOWN_ENCODING", XML_ERROR_UNKNOWN_ENCODING, CONST_CS|CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("XML_ERROR_INCORRECT_ENCODING", XML_ERROR_INCORRECT_ENCODING, CONST_CS|CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("XML_ERROR_UNCLOSED_CDATA_SECTION", XML_ERROR_UNCLOSED_CDATA_SECTION, CONST_CS|CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("XML_ERROR_EXTERNAL_ENTITY_HANDLING", XML_ERROR_EXTERNAL_ENTITY_HANDLING, CONST_CS|CONST_PERSISTENT);
-
- REGISTER_LONG_CONSTANT("XML_OPTION_CASE_FOLDING", PHP_XML_OPTION_CASE_FOLDING, CONST_CS|CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("XML_OPTION_TARGET_ENCODING", PHP_XML_OPTION_TARGET_ENCODING, CONST_CS|CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("XML_OPTION_SKIP_TAGSTART", PHP_XML_OPTION_SKIP_TAGSTART, CONST_CS|CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("XML_OPTION_SKIP_WHITE", PHP_XML_OPTION_SKIP_WHITE, CONST_CS|CONST_PERSISTENT);
-
- /* this object should not be pre-initialised at compile time,
- as the order of members may vary */
-
- php_xml_mem_hdlrs.malloc_fcn = php_xml_malloc_wrapper;
- php_xml_mem_hdlrs.realloc_fcn = php_xml_realloc_wrapper;
- php_xml_mem_hdlrs.free_fcn = php_xml_free_wrapper;
-
-#ifdef LIBXML_EXPAT_COMPAT
- REGISTER_STRING_CONSTANT("XML_SAX_IMPL", "libxml", CONST_CS|CONST_PERSISTENT);
-#else
- REGISTER_STRING_CONSTANT("XML_SAX_IMPL", "expat", CONST_CS|CONST_PERSISTENT);
-#endif
-
- return SUCCESS;
-}
-
-
-PHP_RINIT_FUNCTION(xml)
-{
- return SUCCESS;
-}
-
-
-PHP_MSHUTDOWN_FUNCTION(xml)
-{
- return SUCCESS;
-}
-
-
-PHP_RSHUTDOWN_FUNCTION(xml)
-{
- return SUCCESS;
-}
-
-
-PHP_MINFO_FUNCTION(xml)
-{
- php_info_print_table_start();
- php_info_print_table_row(2, "XML Support", "active");
- php_info_print_table_row(2, "XML Namespace Support", "active");
-#if defined(LIBXML_DOTTED_VERSION) && defined(LIBXML_EXPAT_COMPAT)
- php_info_print_table_row(2, "libxml2 Version", LIBXML_DOTTED_VERSION);
-#else
- php_info_print_table_row(2, "EXPAT Version", XML_ExpatVersion());
-#endif
- php_info_print_table_end();
-}
-/* }}} */
-
-/* {{{ extension-internal functions */
-static zval *_xml_resource_zval(long value)
-{
- zval *ret;
- TSRMLS_FETCH();
-
- MAKE_STD_ZVAL(ret);
-
- Z_TYPE_P(ret) = IS_RESOURCE;
- Z_LVAL_P(ret) = value;
-
- zend_list_addref(value);
-
- return ret;
-}
-
-static zval *_xml_string_zval(const char *str)
-{
- zval *ret;
- int len = strlen(str);
- MAKE_STD_ZVAL(ret);
-
- Z_TYPE_P(ret) = IS_STRING;
- Z_STRLEN_P(ret) = len;
- Z_STRVAL_P(ret) = estrndup(str, len);
- return ret;
-}
-
-static zval *_xml_xmlchar_zval(const XML_Char *s, int len, const XML_Char *encoding)
-{
- zval *ret;
- MAKE_STD_ZVAL(ret);
-
- if (s == NULL) {
- ZVAL_FALSE(ret);
- return ret;
- }
- if (len == 0) {
- len = _xml_xmlcharlen(s);
- }
- Z_TYPE_P(ret) = IS_STRING;
- Z_STRVAL_P(ret) = xml_utf8_decode(s, len, &Z_STRLEN_P(ret), encoding);
- return ret;
-}
-/* }}} */
-
-/* {{{ xml_parser_dtor() */
-static void xml_parser_dtor(zend_rsrc_list_entry *rsrc TSRMLS_DC)
-{
- xml_parser *parser = (xml_parser *)rsrc->ptr;
-
- if (parser->parser) {
- XML_ParserFree(parser->parser);
- }
- if (parser->ltags) {
- int inx;
- for (inx = 0; inx < parser->level; inx++)
- efree(parser->ltags[ inx ]);
- efree(parser->ltags);
- }
- if (parser->startElementHandler) {
- zval_ptr_dtor(&parser->startElementHandler);
- }
- if (parser->endElementHandler) {
- zval_ptr_dtor(&parser->endElementHandler);
- }
- if (parser->characterDataHandler) {
- zval_ptr_dtor(&parser->characterDataHandler);
- }
- if (parser->processingInstructionHandler) {
- zval_ptr_dtor(&parser->processingInstructionHandler);
- }
- if (parser->defaultHandler) {
- zval_ptr_dtor(&parser->defaultHandler);
- }
- if (parser->unparsedEntityDeclHandler) {
- zval_ptr_dtor(&parser->unparsedEntityDeclHandler);
- }
- if (parser->notationDeclHandler) {
- zval_ptr_dtor(&parser->notationDeclHandler);
- }
- if (parser->externalEntityRefHandler) {
- zval_ptr_dtor(&parser->externalEntityRefHandler);
- }
- if (parser->unknownEncodingHandler) {
- zval_ptr_dtor(&parser->unknownEncodingHandler);
- }
- if (parser->startNamespaceDeclHandler) {
- zval_ptr_dtor(&parser->startNamespaceDeclHandler);
- }
- if (parser->endNamespaceDeclHandler) {
- zval_ptr_dtor(&parser->endNamespaceDeclHandler);
- }
- if (parser->baseURI) {
- efree(parser->baseURI);
- }
- if (parser->object) {
- zval_ptr_dtor(&parser->object);
- }
-
- efree(parser);
-}
-/* }}} */
-
-/* {{{ xml_set_handler() */
-static void xml_set_handler(zval **handler, zval **data)
-{
- /* If we have already a handler, release it */
- if (*handler) {
- zval_ptr_dtor(handler);
- }
-
- /* IS_ARRAY might indicate that we're using array($obj, 'method') syntax */
- if (Z_TYPE_PP(data) != IS_ARRAY) {
- convert_to_string_ex(data);
- }
-
- zval_add_ref(data);
-
- *handler = *data;
-}
-/* }}} */
-
-/* {{{ xml_call_handler() */
-static zval *xml_call_handler(xml_parser *parser, zval *handler, zend_function *function_ptr, int argc, zval **argv)
-{
- TSRMLS_FETCH();
-
- if (parser && handler) {
- zval ***args;
- zval *retval;
- int i;
- int result;
- zend_fcall_info fci;
-
- args = safe_emalloc(sizeof(zval **), argc, 0);
- for (i = 0; i < argc; i++) {
- args[i] = &argv[i];
- }
-
- fci.size = sizeof(fci);
- fci.function_table = EG(function_table);
- fci.function_name = handler;
- fci.symbol_table = NULL;
- fci.object_pp = &parser->object;
- fci.retval_ptr_ptr = &retval;
- fci.param_count = argc;
- fci.params = args;
- fci.no_separation = 0;
- /*fci.function_handler_cache = &function_ptr;*/
-
- result = zend_call_function(&fci, NULL TSRMLS_CC);
- if (result == FAILURE) {
- zval **method;
- zval **obj;
-
- if (Z_TYPE_P(handler) == IS_STRING) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to call handler %s()", Z_STRVAL_P(handler));
- } else if (zend_hash_index_find(Z_ARRVAL_P(handler), 0, (void **) &obj) == SUCCESS &&
- zend_hash_index_find(Z_ARRVAL_P(handler), 1, (void **) &method) == SUCCESS &&
- Z_TYPE_PP(obj) == IS_OBJECT &&
- Z_TYPE_PP(method) == IS_STRING) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to call handler %s::%s()", Z_OBJCE_PP(obj)->name, Z_STRVAL_PP(method));
- } else
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to call handler");
- }
-
- for (i = 0; i < argc; i++) {
- zval_ptr_dtor(args[i]);
- }
- efree(args);
-
- if (result == FAILURE) {
- return NULL;
- } else {
- return retval;
- }
- }
- return NULL;
-}
-/* }}} */
-
-/* {{{ xml_encode_iso_8859_1() */
-inline static unsigned short xml_encode_iso_8859_1(unsigned char c)
-{
- return (unsigned short)c;
-}
-/* }}} */
-
-/* {{{ xml_decode_iso_8859_1() */
-inline static char xml_decode_iso_8859_1(unsigned short c)
-{
- return (char)(c > 0xff ? '?' : c);
-}
-/* }}} */
-
-/* {{{ xml_encode_us_ascii() */
-inline static unsigned short xml_encode_us_ascii(unsigned char c)
-{
- return (unsigned short)c;
-}
-/* }}} */
-
-/* {{{ xml_decode_us_ascii() */
-inline static char xml_decode_us_ascii(unsigned short c)
-{
- return (char)(c > 0x7f ? '?' : c);
-}
-/* }}} */
-
-/* {{{ xml_get_encoding() */
-static xml_encoding *xml_get_encoding(const XML_Char *name)
-{
- xml_encoding *enc = &xml_encodings[0];
-
- while (enc && enc->name) {
- if (strcasecmp(name, enc->name) == 0) {
- return enc;
- }
- enc++;
- }
- return NULL;
-}
-/* }}} */
-
-/* {{{ xml_utf8_encode */
-static XML_Char *xml_utf8_encode(const char *s, int len, int *newlen, const XML_Char *encoding)
-{
- int pos = len;
- char *newbuf;
- unsigned int c;
- unsigned short (*encoder)(unsigned char) = NULL;
- xml_encoding *enc = xml_get_encoding(encoding);
-
- *newlen = 0;
- if (enc) {
- encoder = enc->encoding_function;
- } else {
- /* If the target encoding was unknown, fail */
- return NULL;
- }
- if (encoder == NULL) {
- /* If no encoder function was specified, return the data as-is.
- */
- newbuf = emalloc(len + 1);
- memcpy(newbuf, s, len);
- *newlen = len;
- newbuf[*newlen] = '\0';
- return newbuf;
- }
- /* This is the theoretical max (will never get beyond len * 2 as long
- * as we are converting from single-byte characters, though) */
- newbuf = safe_emalloc(len, 4, 1);
- while (pos > 0) {
- c = encoder ? encoder((unsigned char)(*s)) : (unsigned short)(*s);
- if (c < 0x80) {
- newbuf[(*newlen)++] = (char) c;
- } else if (c < 0x800) {
- newbuf[(*newlen)++] = (0xc0 | (c >> 6));
- newbuf[(*newlen)++] = (0x80 | (c & 0x3f));
- } else if (c < 0x10000) {
- newbuf[(*newlen)++] = (0xe0 | (c >> 12));
- newbuf[(*newlen)++] = (0xc0 | ((c >> 6) & 0x3f));
- newbuf[(*newlen)++] = (0x80 | (c & 0x3f));
- } else if (c < 0x200000) {
- newbuf[(*newlen)++] = (0xf0 | (c >> 18));
- newbuf[(*newlen)++] = (0xe0 | ((c >> 12) & 0x3f));
- newbuf[(*newlen)++] = (0xc0 | ((c >> 6) & 0x3f));
- newbuf[(*newlen)++] = (0x80 | (c & 0x3f));
- }
- pos--;
- s++;
- }
- newbuf[*newlen] = 0;
- newbuf = erealloc(newbuf, (*newlen)+1);
- return newbuf;
-}
-/* }}} */
-
-/* {{{ xml_utf8_decode */
-PHPAPI char *xml_utf8_decode(const XML_Char *s, int len, int *newlen, const XML_Char *encoding)
-{
- int pos = len;
- char *newbuf = emalloc(len + 1);
- unsigned short c;
- char (*decoder)(unsigned short) = NULL;
- xml_encoding *enc = xml_get_encoding(encoding);
-
- *newlen = 0;
- if (enc) {
- decoder = enc->decoding_function;
- }
- if (decoder == NULL) {
- /* If the target encoding was unknown, or no decoder function
- * was specified, return the UTF-8-encoded data as-is.
- */
- memcpy(newbuf, s, len);
- *newlen = len;
- newbuf[*newlen] = '\0';
- return newbuf;
- }
- while (pos > 0) {
- c = (unsigned char)(*s);
- if (c >= 0xf0) { /* four bytes encoded, 21 bits */
- c = ((s[0]&7)<<18) | ((s[1]&63)<<12) | ((s[2]&63)<<6) | (s[3]&63);
- s += 4;
- pos -= 4;
- } else if (c >= 0xe0) { /* three bytes encoded, 16 bits */
- c = ((s[0]&63)<<12) | ((s[1]&63)<<6) | (s[2]&63);
- s += 3;
- pos -= 3;
- } else if (c >= 0xc0) { /* two bytes encoded, 11 bits */
- c = ((s[0]&63)<<6) | (s[1]&63);
- s += 2;
- pos -= 2;
- } else {
- s++;
- pos--;
- }
- newbuf[*newlen] = decoder ? decoder(c) : c;
- ++*newlen;
- }
- if (*newlen < len) {
- newbuf = erealloc(newbuf, *newlen + 1);
- }
- newbuf[*newlen] = '\0';
- return newbuf;
-}
-/* }}} */
-
-/* {{{ _xml_xmlcharlen() */
-static int _xml_xmlcharlen(const XML_Char *s)
-{
- int len = 0;
-
- while (*s) {
- len++;
- s++;
- }
- return len;
-}
-/* }}} */
-
-/* {{{ _xml_zval_strdup() */
-PHPAPI char *_xml_zval_strdup(zval *val)
-{
- if (Z_TYPE_P(val) == IS_STRING) {
- char *buf = emalloc(Z_STRLEN_P(val) + 1);
- memcpy(buf, Z_STRVAL_P(val), Z_STRLEN_P(val));
- buf[Z_STRLEN_P(val)] = '\0';
- return buf;
- }
- return NULL;
-}
-/* }}} */
-
-/* {{{ _xml_add_to_info */
-static void _xml_add_to_info(xml_parser *parser,char *name)
-{
- zval **element, *values;
-
- if (! parser->info) {
- return;
- }
-
- if (zend_hash_find(Z_ARRVAL_P(parser->info),name,strlen(name) + 1,(void **) &element) == FAILURE) {
- MAKE_STD_ZVAL(values);
-
- array_init(values);
-
- zend_hash_update(Z_ARRVAL_P(parser->info), name, strlen(name)+1, (void *) &values, sizeof(zval*), (void **) &element);
- }
-
- add_next_index_long(*element,parser->curtag);
-
- parser->curtag++;
-}
-/* }}} */
-
-/* {{{ _xml_decode_tag() */
-static char *_xml_decode_tag(xml_parser *parser, const char *tag)
-{
- char *newstr;
- int out_len;
-
- newstr = xml_utf8_decode(tag, strlen(tag), &out_len, parser->target_encoding);
-
- if (parser->case_folding) {
- php_strtoupper(newstr, out_len);
- }
-
- return newstr;
-}
-/* }}} */
-
-/* {{{ _xml_startElementHandler() */
-void _xml_startElementHandler(void *userData, const XML_Char *name, const XML_Char **attributes)
-{
- xml_parser *parser = (xml_parser *)userData;
- const char **attrs = (const char **) attributes;
- char *tag_name;
- char *att, *val;
- int val_len;
- zval *retval, *args[3];
-
- if (parser) {
- parser->level++;
-
- tag_name = _xml_decode_tag(parser, name);
-
- if (parser->startElementHandler) {
- args[0] = _xml_resource_zval(parser->index);
- args[1] = _xml_string_zval(tag_name);
- MAKE_STD_ZVAL(args[2]);
- array_init(args[2]);
-
- while (attributes && *attributes) {
- att = _xml_decode_tag(parser, attributes[0]);
- val = xml_utf8_decode(attributes[1], strlen(attributes[1]), &val_len, parser->target_encoding);
-
- add_assoc_stringl(args[2], att, val, val_len, 0);
-
- attributes += 2;
-
- efree(att);
- }
-
- if ((retval = xml_call_handler(parser, parser->startElementHandler, parser->startElementPtr, 3, args))) {
- zval_ptr_dtor(&retval);
- }
- }
-
- if (parser->data) {
- zval *tag, *atr;
- int atcnt = 0;
-
- MAKE_STD_ZVAL(tag);
- MAKE_STD_ZVAL(atr);
-
- array_init(tag);
- array_init(atr);
-
- _xml_add_to_info(parser,((char *) tag_name) + parser->toffset);
-
- add_assoc_string(tag,"tag",((char *) tag_name) + parser->toffset,1); /* cast to avoid gcc-warning */
- add_assoc_string(tag,"type","open",1);
- add_assoc_long(tag,"level",parser->level);
-
- parser->ltags[parser->level-1] = estrdup(tag_name);
- parser->lastwasopen = 1;
-
- attributes = (const XML_Char **) attrs;
-
- while (attributes && *attributes) {
- att = _xml_decode_tag(parser, attributes[0]);
- val = xml_utf8_decode(attributes[1], strlen(attributes[1]), &val_len, parser->target_encoding);
-
- add_assoc_stringl(atr,att,val,val_len,0);
-
- atcnt++;
- attributes += 2;
-
- efree(att);
- }
-
- if (atcnt) {
- zend_hash_add(Z_ARRVAL_P(tag),"attributes",sizeof("attributes"),&atr,sizeof(zval*),NULL);
- } else {
- zval_ptr_dtor(&atr);
- }
-
- zend_hash_next_index_insert(Z_ARRVAL_P(parser->data),&tag,sizeof(zval*),(void *) &parser->ctag);
- }
-
- efree(tag_name);
- }
-}
-/* }}} */
-
-/* {{{ _xml_endElementHandler() */
-void _xml_endElementHandler(void *userData, const XML_Char *name)
-{
- xml_parser *parser = (xml_parser *)userData;
- char *tag_name;
-
- if (parser) {
- zval *retval, *args[2];
-
- tag_name = _xml_decode_tag(parser, name);
-
- if (parser->endElementHandler) {
- args[0] = _xml_resource_zval(parser->index);
- args[1] = _xml_string_zval(tag_name);
-
- if ((retval = xml_call_handler(parser, parser->endElementHandler, parser->endElementPtr, 2, args))) {
- zval_ptr_dtor(&retval);
- }
- }
-
- if (parser->data) {
- zval *tag;
-
- if (parser->lastwasopen) {
- add_assoc_string(*(parser->ctag),"type","complete",1);
- } else {
- MAKE_STD_ZVAL(tag);
-
- array_init(tag);
-
- _xml_add_to_info(parser,((char *) tag_name) + parser->toffset);
-
- add_assoc_string(tag,"tag",((char *) tag_name) + parser->toffset,1); /* cast to avoid gcc-warning */
- add_assoc_string(tag,"type","close",1);
- add_assoc_long(tag,"level",parser->level);
-
- zend_hash_next_index_insert(Z_ARRVAL_P(parser->data),&tag,sizeof(zval*),NULL);
- }
-
- parser->lastwasopen = 0;
- }
-
- efree(tag_name);
-
- if (parser->ltags) {
- efree(parser->ltags[parser->level-1]);
- }
-
- parser->level--;
- }
-}
-/* }}} */
-
-/* {{{ _xml_characterDataHandler() */
-void _xml_characterDataHandler(void *userData, const XML_Char *s, int len)
-{
- xml_parser *parser = (xml_parser *)userData;
-
- if (parser) {
- zval *retval, *args[2];
-
- if (parser->characterDataHandler) {
- args[0] = _xml_resource_zval(parser->index);
- args[1] = _xml_xmlchar_zval(s, len, parser->target_encoding);
- if ((retval = xml_call_handler(parser, parser->characterDataHandler, parser->characterDataPtr, 2, args))) {
- zval_ptr_dtor(&retval);
- }
- }
-
- if (parser->data) {
- int i;
- int doprint = 0;
-
- char *decoded_value;
- int decoded_len;
-
- decoded_value = xml_utf8_decode(s,len,&decoded_len,parser->target_encoding);
- for (i = 0; i < decoded_len; i++) {
- switch (decoded_value[i]) {
- case ' ':
- case '\t':
- case '\n':
- continue;
- default:
- doprint = 1;
- break;
- }
- if (doprint) {
- break;
- }
- }
- if (doprint || (! parser->skipwhite)) {
- if (parser->lastwasopen) {
- zval **myval;
-
- /* check if the current tag already has a value - if yes append to that! */
- if (zend_hash_find(Z_ARRVAL_PP(parser->ctag),"value",sizeof("value"),(void **) &myval) == SUCCESS) {
- int newlen = Z_STRLEN_PP(myval) + decoded_len;
- Z_STRVAL_PP(myval) = erealloc(Z_STRVAL_PP(myval),newlen+1);
- strcpy(Z_STRVAL_PP(myval) + Z_STRLEN_PP(myval),decoded_value);
- Z_STRLEN_PP(myval) += decoded_len;
- efree(decoded_value);
- } else {
- add_assoc_string(*(parser->ctag),"value",decoded_value,0);
- }
-
- } else {
- zval *tag;
-
- MAKE_STD_ZVAL(tag);
-
- array_init(tag);
-
- _xml_add_to_info(parser,parser->ltags[parser->level-1] + parser->toffset);
-
- add_assoc_string(tag,"tag",parser->ltags[parser->level-1] + parser->toffset,1);
- add_assoc_string(tag,"value",decoded_value,0);
- add_assoc_string(tag,"type","cdata",1);
- add_assoc_long(tag,"level",parser->level);
-
- zend_hash_next_index_insert(Z_ARRVAL_P(parser->data),&tag,sizeof(zval*),NULL);
- }
- } else {
- efree(decoded_value);
- }
- }
- }
-}
-/* }}} */
-
-/* {{{ _xml_processingInstructionHandler() */
-void _xml_processingInstructionHandler(void *userData, const XML_Char *target, const XML_Char *data)
-{
- xml_parser *parser = (xml_parser *)userData;
-
- if (parser && parser->processingInstructionHandler) {
- zval *retval, *args[3];
-
- args[0] = _xml_resource_zval(parser->index);
- args[1] = _xml_xmlchar_zval(target, 0, parser->target_encoding);
- args[2] = _xml_xmlchar_zval(data, 0, parser->target_encoding);
- if ((retval = xml_call_handler(parser, parser->processingInstructionHandler, parser->processingInstructionPtr, 3, args))) {
- zval_ptr_dtor(&retval);
- }
- }
-}
-/* }}} */
-
-/* {{{ _xml_defaultHandler() */
-void _xml_defaultHandler(void *userData, const XML_Char *s, int len)
-{
- xml_parser *parser = (xml_parser *)userData;
-
- if (parser && parser->defaultHandler) {
- zval *retval, *args[2];
-
- args[0] = _xml_resource_zval(parser->index);
- args[1] = _xml_xmlchar_zval(s, len, parser->target_encoding);
- if ((retval = xml_call_handler(parser, parser->defaultHandler, parser->defaultPtr, 2, args))) {
- zval_ptr_dtor(&retval);
- }
- }
-}
-/* }}} */
-
-/* {{{ _xml_unparsedEntityDeclHandler() */
-void _xml_unparsedEntityDeclHandler(void *userData,
- const XML_Char *entityName,
- const XML_Char *base,
- const XML_Char *systemId,
- const XML_Char *publicId,
- const XML_Char *notationName)
-{
- xml_parser *parser = (xml_parser *)userData;
-
- if (parser && parser->unparsedEntityDeclHandler) {
- zval *retval, *args[6];
-
- args[0] = _xml_resource_zval(parser->index);
- args[1] = _xml_xmlchar_zval(entityName, 0, parser->target_encoding);
- args[2] = _xml_xmlchar_zval(base, 0, parser->target_encoding);
- args[3] = _xml_xmlchar_zval(systemId, 0, parser->target_encoding);
- args[4] = _xml_xmlchar_zval(publicId, 0, parser->target_encoding);
- args[5] = _xml_xmlchar_zval(notationName, 0, parser->target_encoding);
- if ((retval = xml_call_handler(parser, parser->unparsedEntityDeclHandler, parser->unparsedEntityDeclPtr, 6, args))) {
- zval_ptr_dtor(&retval);
- }
- }
-}
-/* }}} */
-
-/* {{{ _xml_notationDeclHandler() */
-void _xml_notationDeclHandler(void *userData,
- const XML_Char *notationName,
- const XML_Char *base,
- const XML_Char *systemId,
- const XML_Char *publicId)
-{
- xml_parser *parser = (xml_parser *)userData;
-
- if (parser && parser->notationDeclHandler) {
- zval *retval, *args[5];
-
- args[0] = _xml_resource_zval(parser->index);
- args[1] = _xml_xmlchar_zval(notationName, 0, parser->target_encoding);
- args[2] = _xml_xmlchar_zval(base, 0, parser->target_encoding);
- args[3] = _xml_xmlchar_zval(systemId, 0, parser->target_encoding);
- args[4] = _xml_xmlchar_zval(publicId, 0, parser->target_encoding);
- if ((retval = xml_call_handler(parser, parser->notationDeclHandler, parser->notationDeclPtr, 5, args))) {
- zval_ptr_dtor(&retval);
- }
- }
-}
-/* }}} */
-
-/* {{{ _xml_externalEntityRefHandler() */
-int _xml_externalEntityRefHandler(XML_Parser parserPtr,
- const XML_Char *openEntityNames,
- const XML_Char *base,
- const XML_Char *systemId,
- const XML_Char *publicId)
-{
- xml_parser *parser = XML_GetUserData(parserPtr);
- int ret = 0; /* abort if no handler is set (should be configurable?) */
-
- if (parser && parser->externalEntityRefHandler) {
- zval *retval, *args[5];
-
- args[0] = _xml_resource_zval(parser->index);
- args[1] = _xml_xmlchar_zval(openEntityNames, 0, parser->target_encoding);
- args[2] = _xml_xmlchar_zval(base, 0, parser->target_encoding);
- args[3] = _xml_xmlchar_zval(systemId, 0, parser->target_encoding);
- args[4] = _xml_xmlchar_zval(publicId, 0, parser->target_encoding);
- if ((retval = xml_call_handler(parser, parser->externalEntityRefHandler, parser->externalEntityRefPtr, 5, args))) {
- convert_to_long(retval);
- ret = Z_LVAL_P(retval);
- efree(retval);
- } else {
- ret = 0;
- }
- }
- return ret;
-}
-/* }}} */
-
-/* {{{ _xml_startNamespaceDeclHandler() */
-void _xml_startNamespaceDeclHandler(void *userData,const XML_Char *prefix, const XML_Char *uri)
-{
- xml_parser *parser = (xml_parser *)userData;
-
- if (parser && parser->startNamespaceDeclHandler) {
- zval *retval, *args[3];
-
- args[0] = _xml_resource_zval(parser->index);
- args[1] = _xml_xmlchar_zval(prefix, 0, parser->target_encoding);
- args[2] = _xml_xmlchar_zval(uri, 0, parser->target_encoding);
- if ((retval = xml_call_handler(parser, parser->startNamespaceDeclHandler, parser->startNamespaceDeclPtr, 3, args))) {
- zval_ptr_dtor(&retval);
- }
- }
-}
-/* }}} */
-
-/* {{{ _xml_endNamespaceDeclHandler() */
-void _xml_endNamespaceDeclHandler(void *userData, const XML_Char *prefix)
-{
- xml_parser *parser = (xml_parser *)userData;
-
- if (parser && parser->endNamespaceDeclHandler) {
- zval *retval, *args[2];
-
- args[0] = _xml_resource_zval(parser->index);
- args[1] = _xml_xmlchar_zval(prefix, 0, parser->target_encoding);
- if ((retval = xml_call_handler(parser, parser->endNamespaceDeclHandler, parser->endNamespaceDeclPtr, 2, args))) {
- zval_ptr_dtor(&retval);
- }
- }
-}
-/* }}} */
-
-/************************* EXTENSION FUNCTIONS *************************/
-
-static void php_xml_parser_create_impl(INTERNAL_FUNCTION_PARAMETERS, int ns_support)
-{
- xml_parser *parser;
- int auto_detect = 0;
-
- char *encoding_param = NULL;
- int encoding_param_len = 0;
-
- char *ns_param = NULL;
- int ns_param_len = 0;
-
- XML_Char *encoding;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, (ns_support ? "|ss": "|s"), &encoding_param, &encoding_param_len, &ns_param, &ns_param_len) == FAILURE) {
- RETURN_FALSE;
- }
-
- if (encoding_param != NULL) {
- /* The supported encoding types are hardcoded here because
- * we are limited to the encodings supported by expat/xmltok.
- */
- if (encoding_param_len == 0) {
- encoding = XML(default_encoding);
- auto_detect = 1;
- } else if (strcasecmp(encoding_param, "ISO-8859-1") == 0) {
- encoding = "ISO-8859-1";
- } else if (strcasecmp(encoding_param, "UTF-8") == 0) {
- encoding = "UTF-8";
- } else if (strcasecmp(encoding_param, "US-ASCII") == 0) {
- encoding = "US-ASCII";
- } else {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "unsupported source encoding \"%s\"", encoding_param);
- RETURN_FALSE;
- }
- } else {
- encoding = XML(default_encoding);
- }
-
- if (ns_support && ns_param == NULL){
- ns_param = ":";
- }
-
- parser = ecalloc(sizeof(xml_parser), 1);
- parser->parser = XML_ParserCreate_MM((auto_detect ? NULL : encoding),
- &php_xml_mem_hdlrs, ns_param);
-
- parser->target_encoding = encoding;
- parser->case_folding = 1;
- parser->object = NULL;
- XML_SetUserData(parser->parser, parser);
-
- ZEND_REGISTER_RESOURCE(return_value, parser,le_xml_parser);
- parser->index = Z_LVAL_P(return_value);
-}
-
-/* {{{ proto resource xml_parser_create([string encoding])
- Create an XML parser */
-PHP_FUNCTION(xml_parser_create)
-{
- php_xml_parser_create_impl(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0);
-}
-/* }}} */
-
-/* {{{ proto resource xml_parser_create_ns([string encoding [, string sep]])
- Create an XML parser */
-PHP_FUNCTION(xml_parser_create_ns)
-{
-#if defined(HAVE_LIBXML) && defined(HAVE_XML) && !defined(HAVE_LIBEXPAT) && LIBXML_VERSION < 20600
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "is broken with libxml2 %s. Please upgrade to libxml2 2.6", LIBXML_DOTTED_VERSION);
- RETURN_FALSE;
-#else
- php_xml_parser_create_impl(INTERNAL_FUNCTION_PARAM_PASSTHRU, 1);
-#endif
-}
-/* }}} */
-
-/* {{{ proto int xml_set_object(resource parser, object &obj)
- Set up object which should be used for callbacks */
-PHP_FUNCTION(xml_set_object)
-{
- xml_parser *parser;
- zval **pind, **mythis;
-
- if (ZEND_NUM_ARGS() != 2 ||
- zend_get_parameters_ex(2, &pind, &mythis) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- if (Z_TYPE_PP(mythis) != IS_OBJECT) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Argument 2 has wrong type");
- RETURN_FALSE;
- }
-
- ZEND_FETCH_RESOURCE(parser,xml_parser *,pind, -1, "XML Parser", le_xml_parser);
-
- /* please leave this commented - or ask thies@thieso.net before doing it (again) */
- if (parser->object) {
- zval_ptr_dtor(&parser->object);
- }
-
- /* please leave this commented - or ask thies@thieso.net before doing it (again) */
-/* #ifdef ZEND_ENGINE_2
- zval_add_ref(&parser->object);
-#endif */
-
- ALLOC_ZVAL(parser->object);
- *parser->object = **mythis;
- zval_copy_ctor(parser->object);
- INIT_PZVAL(parser->object);
-
- RETVAL_TRUE;
-}
-/* }}} */
-
-/* {{{ proto int xml_set_element_handler(resource parser, string shdl, string ehdl)
- Set up start and end element handlers */
-PHP_FUNCTION(xml_set_element_handler)
-{
- xml_parser *parser;
- zval **pind, **shdl, **ehdl;
-
- if (ZEND_NUM_ARGS() != 3 ||
- zend_get_parameters_ex(3, &pind, &shdl, &ehdl) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(parser,xml_parser *,pind, -1, "XML Parser", le_xml_parser);
-
- xml_set_handler(&parser->startElementHandler, shdl);
- xml_set_handler(&parser->endElementHandler, ehdl);
- XML_SetElementHandler(parser->parser, _xml_startElementHandler, _xml_endElementHandler);
- RETVAL_TRUE;
-}
-/* }}} */
-
-/* {{{ proto int xml_set_character_data_handler(resource parser, string hdl)
- Set up character data handler */
-PHP_FUNCTION(xml_set_character_data_handler)
-{
- xml_parser *parser;
- zval **pind, **hdl;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &pind, &hdl) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(parser,xml_parser *, pind, -1, "XML Parser", le_xml_parser);
-
- xml_set_handler(&parser->characterDataHandler, hdl);
- XML_SetCharacterDataHandler(parser->parser, _xml_characterDataHandler);
- RETVAL_TRUE;
-}
-/* }}} */
-
-/* {{{ proto int xml_set_processing_instruction_handler(resource parser, string hdl)
- Set up processing instruction (PI) handler */
-PHP_FUNCTION(xml_set_processing_instruction_handler)
-{
- xml_parser *parser;
- zval **pind, **hdl;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &pind, &hdl) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(parser,xml_parser *, pind, -1, "XML Parser", le_xml_parser);
-
- xml_set_handler(&parser->processingInstructionHandler, hdl);
- XML_SetProcessingInstructionHandler(parser->parser, _xml_processingInstructionHandler);
- RETVAL_TRUE;
-}
-/* }}} */
-
-/* {{{ proto int xml_set_default_handler(resource parser, string hdl)
- Set up default handler */
-PHP_FUNCTION(xml_set_default_handler)
-{
- xml_parser *parser;
- zval **pind, **hdl;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &pind, &hdl) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- ZEND_FETCH_RESOURCE(parser,xml_parser *, pind, -1, "XML Parser", le_xml_parser);
-
- xml_set_handler(&parser->defaultHandler, hdl);
- XML_SetDefaultHandler(parser->parser, _xml_defaultHandler);
- RETVAL_TRUE;
-}
-/* }}} */
-
-/* {{{ proto int xml_set_unparsed_entity_decl_handler(resource parser, string hdl)
- Set up unparsed entity declaration handler */
-PHP_FUNCTION(xml_set_unparsed_entity_decl_handler)
-{
- xml_parser *parser;
- zval **pind, **hdl;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &pind, &hdl) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(parser,xml_parser *, pind, -1, "XML Parser", le_xml_parser);
-
- xml_set_handler(&parser->unparsedEntityDeclHandler, hdl);
- XML_SetUnparsedEntityDeclHandler(parser->parser, _xml_unparsedEntityDeclHandler);
- RETVAL_TRUE;
-}
-/* }}} */
-
-/* {{{ proto int xml_set_notation_decl_handler(resource parser, string hdl)
- Set up notation declaration handler */
-PHP_FUNCTION(xml_set_notation_decl_handler)
-{
- xml_parser *parser;
- zval **pind, **hdl;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &pind, &hdl) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- ZEND_FETCH_RESOURCE(parser,xml_parser *, pind, -1, "XML Parser", le_xml_parser);
-
- xml_set_handler(&parser->notationDeclHandler, hdl);
- XML_SetNotationDeclHandler(parser->parser, _xml_notationDeclHandler);
- RETVAL_TRUE;
-}
-/* }}} */
-
-/* {{{ proto int xml_set_external_entity_ref_handler(resource parser, string hdl)
- Set up external entity reference handler */
-PHP_FUNCTION(xml_set_external_entity_ref_handler)
-{
- xml_parser *parser;
- zval **pind, **hdl;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &pind, &hdl) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- ZEND_FETCH_RESOURCE(parser,xml_parser *, pind, -1, "XML Parser", le_xml_parser);
-
- xml_set_handler(&parser->externalEntityRefHandler, hdl);
- XML_SetExternalEntityRefHandler(parser->parser, (void *) _xml_externalEntityRefHandler);
- RETVAL_TRUE;
-}
-/* }}} */
-
-/* {{{ proto int xml_set_start_namespace_decl_handler(resource parser, string hdl)
- Set up character data handler */
-PHP_FUNCTION(xml_set_start_namespace_decl_handler)
-{
- xml_parser *parser;
- zval **pind, **hdl;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &pind, &hdl) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(parser,xml_parser *, pind, -1, "XML Parser", le_xml_parser);
-
- xml_set_handler(&parser->startNamespaceDeclHandler, hdl);
- XML_SetStartNamespaceDeclHandler(parser->parser, _xml_startNamespaceDeclHandler);
- RETVAL_TRUE;
-}
-/* }}} */
-
-/* {{{ proto int xml_set_end_namespace_decl_handler(resource parser, string hdl)
- Set up character data handler */
-PHP_FUNCTION(xml_set_end_namespace_decl_handler)
-{
- xml_parser *parser;
- zval **pind, **hdl;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &pind, &hdl) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(parser,xml_parser *, pind, -1, "XML Parser", le_xml_parser);
-
- xml_set_handler(&parser->endNamespaceDeclHandler, hdl);
- XML_SetEndNamespaceDeclHandler(parser->parser, _xml_endNamespaceDeclHandler);
- RETVAL_TRUE;
-}
-/* }}} */
-
-/* {{{ proto int xml_parse(resource parser, string data [, int isFinal])
- Start parsing an XML document */
-PHP_FUNCTION(xml_parse)
-{
- xml_parser *parser;
- zval **pind, **data, **final;
- int argc, isFinal, ret;
-
- argc = ZEND_NUM_ARGS();
- if (argc < 2 || argc > 3 || zend_get_parameters_ex(argc, &pind, &data, &final) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- ZEND_FETCH_RESOURCE(parser,xml_parser *, pind, -1, "XML Parser", le_xml_parser);
-
- convert_to_string_ex(data);
-
- if (argc == 3) {
- convert_to_long_ex(final);
- isFinal = Z_LVAL_PP(final);
- } else {
- isFinal = 0;
- }
-
- ret = XML_Parse(parser->parser, Z_STRVAL_PP(data), Z_STRLEN_PP(data), isFinal);
- RETVAL_LONG(ret);
-}
-
-/* }}} */
-
-/* {{{ proto int xml_parse_into_struct(resource parser, string data, array &struct, array &index)
- Parsing a XML document */
-
-PHP_FUNCTION(xml_parse_into_struct)
-{
- xml_parser *parser;
- zval **pind, **data, **xdata, **info = 0;
- int argc, ret;
-
- argc = ZEND_NUM_ARGS();
- if (zend_get_parameters_ex(4, &pind, &data, &xdata,&info) == SUCCESS) {
- zval_dtor(*info);
- array_init(*info);
- } else if (zend_get_parameters_ex(3, &pind, &data, &xdata) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(parser,xml_parser *, pind, -1, "XML Parser", le_xml_parser);
-
- convert_to_string_ex(data);
- zval_dtor(*xdata);
- array_init(*xdata);
-
- parser->data = *xdata;
- if (info)
- parser->info = *info;
- parser->level = 0;
- parser->ltags = safe_emalloc(XML_MAXLEVEL, sizeof(char *), 0);
-
- XML_SetDefaultHandler(parser->parser, _xml_defaultHandler);
- XML_SetElementHandler(parser->parser, _xml_startElementHandler, _xml_endElementHandler);
- XML_SetCharacterDataHandler(parser->parser, _xml_characterDataHandler);
-
- ret = XML_Parse(parser->parser, Z_STRVAL_PP(data), Z_STRLEN_PP(data), 1);
-
- RETVAL_LONG(ret);
-}
-/* }}} */
-
-/* {{{ proto int xml_get_error_code(resource parser)
- Get XML parser error code */
-PHP_FUNCTION(xml_get_error_code)
-{
- xml_parser *parser;
- zval **pind;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &pind) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- ZEND_FETCH_RESOURCE(parser,xml_parser *, pind, -1, "XML Parser", le_xml_parser);
-
- RETVAL_LONG((long)XML_GetErrorCode(parser->parser));
-}
-/* }}} */
-
-/* {{{ proto string xml_error_string(int code)
- Get XML parser error string */
-PHP_FUNCTION(xml_error_string)
-{
- zval **code;
- char *str;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &code) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_long_ex(code);
- str = (char *)XML_ErrorString((int)Z_LVAL_PP(code));
- if (str) {
- RETVAL_STRING(str, 1);
- }
-}
-/* }}} */
-
-/* {{{ proto int xml_get_current_line_number(resource parser)
- Get current line number for an XML parser */
-PHP_FUNCTION(xml_get_current_line_number)
-{
- xml_parser *parser;
- zval **pind;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &pind) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- ZEND_FETCH_RESOURCE(parser,xml_parser *, pind, -1, "XML Parser", le_xml_parser);
-
- RETVAL_LONG(XML_GetCurrentLineNumber(parser->parser));
-}
-/* }}} */
-
-/* {{{ proto int xml_get_current_column_number(resource parser)
- Get current column number for an XML parser */
-PHP_FUNCTION(xml_get_current_column_number)
-{
- xml_parser *parser;
- zval **pind;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &pind) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- ZEND_FETCH_RESOURCE(parser,xml_parser *, pind, -1, "XML Parser", le_xml_parser);
-
- RETVAL_LONG(XML_GetCurrentColumnNumber(parser->parser));
-}
-/* }}} */
-
-/* {{{ proto int xml_get_current_byte_index(resource parser)
- Get current byte index for an XML parser */
-PHP_FUNCTION(xml_get_current_byte_index)
-{
- xml_parser *parser;
- zval **pind;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &pind) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- ZEND_FETCH_RESOURCE(parser,xml_parser *, pind, -1, "XML Parser", le_xml_parser);
-
- RETVAL_LONG(XML_GetCurrentByteIndex(parser->parser));
-}
-/* }}} */
-
-/* {{{ proto int xml_parser_free(resource parser)
- Free an XML parser */
-PHP_FUNCTION(xml_parser_free)
-{
- zval **pind;
- xml_parser *parser;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &pind) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(parser,xml_parser *, pind, -1, "XML Parser", le_xml_parser);
-
- if (zend_list_delete(parser->index) == FAILURE) {
- RETURN_FALSE;
- }
-
- RETVAL_TRUE;
-}
-/* }}} */
-
-/* {{{ proto int xml_parser_set_option(resource parser, int option, mixed value)
- Set options in an XML parser */
-PHP_FUNCTION(xml_parser_set_option)
-{
- xml_parser *parser;
- zval **pind, **opt, **val;
-
- if (ZEND_NUM_ARGS() != 3 || zend_get_parameters_ex(3, &pind, &opt, &val) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- ZEND_FETCH_RESOURCE(parser,xml_parser *, pind, -1, "XML Parser", le_xml_parser);
-
- convert_to_long_ex(opt);
-
- switch (Z_LVAL_PP(opt)) {
- case PHP_XML_OPTION_CASE_FOLDING:
- convert_to_long_ex(val);
- parser->case_folding = Z_LVAL_PP(val);
- break;
- case PHP_XML_OPTION_SKIP_TAGSTART:
- convert_to_long_ex(val);
- parser->toffset = Z_LVAL_PP(val);
- break;
- case PHP_XML_OPTION_SKIP_WHITE:
- convert_to_long_ex(val);
- parser->skipwhite = Z_LVAL_PP(val);
- break;
- case PHP_XML_OPTION_TARGET_ENCODING: {
- xml_encoding *enc;
- convert_to_string_ex(val);
- enc = xml_get_encoding(Z_STRVAL_PP(val));
- if (enc == NULL) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unsupported target encoding \"%s\"", Z_STRVAL_PP(val));
- RETURN_FALSE;
- }
- parser->target_encoding = enc->name;
- break;
- }
- default:
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unknown option");
- RETURN_FALSE;
- break;
- }
- RETVAL_TRUE;
-}
-/* }}} */
-
-/* {{{ proto int xml_parser_get_option(resource parser, int option)
- Get options from an XML parser */
-PHP_FUNCTION(xml_parser_get_option)
-{
- xml_parser *parser;
- zval **pind, **opt;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &pind, &opt) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- ZEND_FETCH_RESOURCE(parser,xml_parser *, pind, -1, "XML Parser", le_xml_parser);
-
- convert_to_long_ex(opt);
-
- switch (Z_LVAL_PP(opt)) {
- case PHP_XML_OPTION_CASE_FOLDING:
- RETURN_LONG(parser->case_folding);
- break;
- case PHP_XML_OPTION_TARGET_ENCODING:
- RETURN_STRING(parser->target_encoding, 1);
- break;
- default:
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unknown option");
- RETURN_FALSE;
- break;
- }
-
- RETVAL_FALSE; /* never reached */
-}
-/* }}} */
-
-/* {{{ proto string utf8_encode(string data)
- Encodes an ISO-8859-1 string to UTF-8 */
-PHP_FUNCTION(utf8_encode)
-{
- zval **arg;
- XML_Char *encoded;
- int len;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex(arg);
- encoded = xml_utf8_encode(Z_STRVAL_PP(arg), Z_STRLEN_PP(arg), &len, "ISO-8859-1");
- if (encoded == NULL) {
- RETURN_FALSE;
- }
- RETVAL_STRINGL(encoded, len, 0);
-}
-/* }}} */
-
-/* {{{ proto string utf8_decode(string data)
- Converts a UTF-8 encoded string to ISO-8859-1 */
-PHP_FUNCTION(utf8_decode)
-{
- zval **arg;
- XML_Char *decoded;
- int len;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex(arg);
- decoded = xml_utf8_decode(Z_STRVAL_PP(arg), Z_STRLEN_PP(arg), &len, "ISO-8859-1");
- if (decoded == NULL) {
- RETURN_FALSE;
- }
- RETVAL_STRINGL(decoded, len, 0);
-}
-/* }}} */
-
-#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/xml/xml.mak b/ext/xml/xml.mak
deleted file mode 100644
index ab60f28eed..0000000000
--- a/ext/xml/xml.mak
+++ /dev/null
@@ -1,172 +0,0 @@
-# Temporarily here -- later may go into some batch file
-# which will set this as an environment variable
-PROJECT_ROOT = ..\..
-
-# Module details
-MODULE_NAME = php_xml
-MODULE_DESC = "PHP 5 - XML Extension"
-VMAJ = 3
-VMIN = 0
-VREV = 0
-
-#include the common settings
-include $(PROJECT_ROOT)/netware/common.mif
-
-# Extensions of all input and output files
-.SUFFIXES:
-.SUFFIXES: .nlm .lib .obj .cpp .c .msg .mlc .mdb .xdc .d
-
-# Source files
-C_SRC = xml.c \
- start.c
-
-CPP_SRC_NODIR = $(notdir $(CPP_SRC))
-C_SRC_NODIR = $(notdir $(C_SRC))
-SRC_DIR = $(dir $(CPP_SRC) $(C_SRC))
-
-# Library files
-LIBRARY =
-
-# Destination directories and files
-OBJ_DIR = $(BUILD)
-FINAL_DIR = $(BUILD)
-MAP_FILE = $(FINAL_DIR)\$(MODULE_NAME).map
-OBJECTS = $(addprefix $(OBJ_DIR)/,$(CPP_SRC_NODIR:.c=.obj) $(C_SRC_NODIR:.c=.obj))
-DEPDS = $(addprefix $(OBJ_DIR)/,$(CPP_SRC_NODIR:.c=.d) $(C_SRC_NODIR:.c=.d))
-
-# Binary file
-ifndef BINARY
- BINARY=$(FINAL_DIR)\$(MODULE_NAME).nlm
-endif
-
-# Compile flags
-C_FLAGS += -c -maxerrors 25 -msgstyle gcc
-C_FLAGS += -wchar_t on -bool on
-C_FLAGS += -processor Pentium
-C_FLAGS += -nostdinc -nosyspath
-C_FLAGS += -relax_pointers # To remove type-casting errors
-C_FLAGS += -DNETWARE -DZTS
-C_FLAGS += -DNEW_LIBC
-C_FLAGS += -DCOMPILE_DL_XML -DHAVE_LIBEXPAT=1
-C_FLAGS += -I. -I- -I$(PROJECT_ROOT) -I$(PROJECT_ROOT)/main
-C_FLAGS += -I$(PROJECT_ROOT)/ext/standard -I$(PROJECT_ROOT)/netware
-C_FLAGS += -I$(PROJECT_ROOT)/zend -I$(PROJECT_ROOT)/tsrm
-C_FLAGS += -I$(SDK_DIR)/include -I$(MWCIncludes)
-C_FLAGS += -I$(EXPAT_DIR)/include
-
-ifndef STACK_SIZE
-STACK_SIZE=8192
-endif
-
-# Extra stuff based on debug / release builds
-ifeq '$(BUILD)' 'debug'
- SYM_FILE = $(FINAL_DIR)\$(MODULE_NAME).sym
- C_FLAGS += -inline smart -sym on -sym codeview4 -opt off -opt intrinsics -sym internal -DDEBUGGING -DDKFBPON
- C_FLAGS += -exc cw -DZEND_DEBUG=1
- LD_FLAGS += -sym on -sym codeview4 -osym $(SYM_FILE)
- export MWLibraryFiles=$(SDK_DIR)/imports/libcpre.o;mwcrtld.lib
-else
- C_FLAGS += -opt speed -inline on -inline smart -inline auto -sym off
- C_FLAGS += -opt intrinsics
- C_FLAGS += -opt level=4 -DZEND_DEBUG=0
- LD_FLAGS += -sym off
- export MWLibraryFiles=$(SDK_DIR)/imports/libcpre.o;mwcrtl.lib
-endif
-
-# Dependencies
-MODULE = LibC \
- expatlbc \
- phplib
-IMPORT = @$(SDK_DIR)/imports/libc.imp \
- @$(SDK_DIR)/imports/ws2nlm.imp \
- @$(MPK_DIR)/import/mpkOrg.imp \
- @$(EXPAT_DIR)/imports/expatlbc.imp \
- @$(PROJECT_ROOT)/netware/phplib.imp
-EXPORT = ($(MODULE_NAME)) get_module
-API = OutputToScreen
-
-
-# Virtual paths
-vpath %.cpp .
-vpath %.c . ..\..\netware
-vpath %.obj $(OBJ_DIR)
-
-
-all: prebuild project
-
-.PHONY: all
-
-prebuild:
- @if not exist $(OBJ_DIR) md $(OBJ_DIR)
-
-project: $(BINARY)
- @echo Build complete.
-
-$(OBJ_DIR)/%.d: %.cpp
- @echo Building Dependencies for $(<F)
- @$(CC) -M $< $(C_FLAGS) -o $@
-
-$(OBJ_DIR)/%.d: %.c
- @echo Building Dependencies for $(<F)
- @$(CC) -M $< $(C_FLAGS) -o $@
-
-$(OBJ_DIR)/%.obj: %.cpp
- @echo Compiling $?...
- @$(CC) $< $(C_FLAGS) -o $@
-
-$(OBJ_DIR)/%.obj: %.c
- @echo Compiling $?...
- @$(CC) $< $(C_FLAGS) -o $@
-
-
-$(BINARY): $(OBJECTS)
- @echo Import $(IMPORT) > $(basename $@).def
-ifdef API
- @echo Import $(API) >> $(basename $@).def
-endif
- @echo Module $(MODULE) >> $(basename $@).def
-ifdef EXPORT
- @echo Export $(EXPORT) >> $(basename $@).def
-endif
- @echo AutoUnload >> $(basename $@).def
-ifeq '$(BUILD)' 'debug'
- @echo Debug >> $(basename $@).def
-endif
- @echo Flag_On 0x00000008 >> $(basename $@).def
- @echo Start _LibCPrelude >> $(basename $@).def
- @echo Exit _LibCPostlude >> $(basename $@).def
-
- $(MPKTOOL) $(XDCFLAGS) $(basename $@).xdc
- @echo xdcdata $(basename $@).xdc >> $(basename $@).def
-
- @echo Linking $@...
- @echo $(LD_FLAGS) -commandfile $(basename $@).def > $(basename $@).link
- @echo $(LIBRARY) $(OBJECTS) >> $(basename $@).link
-
- @$(LINK) @$(basename $@).link
-
-
-.PHONY: clean
-clean: cleanobj cleanbin
-
-.PHONY: cleand
-cleand:
- @echo Deleting all dependency files...
- -@del "$(OBJ_DIR)\*.d"
-
-.PHONY: cleanobj
-cleanobj:
- @echo Deleting all object files...
- -@del "$(OBJ_DIR)\*.obj"
-
-.PHONY: cleanbin
-cleanbin:
- @echo Deleting binary files...
- -@del "$(FINAL_DIR)\$(MODULE_NAME).nlm"
- @echo Deleting MAP, DEF files, etc....
- -@del "$(FINAL_DIR)\$(MODULE_NAME).map"
- -@del "$(FINAL_DIR)\$(MODULE_NAME).def"
- -@del "$(FINAL_DIR)\$(MODULE_NAME).link"
-ifeq '$(BUILD)' 'debug'
- -@del $(FINAL_DIR)\$(MODULE_NAME).sym
-endif
diff --git a/ext/xmlreader/CREDITS b/ext/xmlreader/CREDITS
deleted file mode 100644
index 35f3af1933..0000000000
--- a/ext/xmlreader/CREDITS
+++ /dev/null
@@ -1,2 +0,0 @@
-XMLReader
-Rob Richards
diff --git a/ext/xmlreader/README b/ext/xmlreader/README
deleted file mode 100644
index 0d946f62da..0000000000
--- a/ext/xmlreader/README
+++ /dev/null
@@ -1,5 +0,0 @@
-XMLReader represents a reader that provides non-cached,
-forward-only access to XML data. It is based upon the
-xmlTextReader api from libxml
-
-This extension is designed to only work under PHP 5.
diff --git a/ext/xmlreader/TODO b/ext/xmlreader/TODO
deleted file mode 100644
index 744c56192a..0000000000
--- a/ext/xmlreader/TODO
+++ /dev/null
@@ -1,8 +0,0 @@
-- Implement functions to support PHP 4
-
-- Refactor internals once libxml 2.6.x is minimum requirement for PHP 5
- use new api for creating the xmlTextReaderPtr
-
-- Add Custom Error Handling
-
-
diff --git a/ext/xmlreader/config.m4 b/ext/xmlreader/config.m4
deleted file mode 100644
index 2de9292ca8..0000000000
--- a/ext/xmlreader/config.m4
+++ /dev/null
@@ -1,22 +0,0 @@
-dnl
-dnl $Id$
-dnl
-
-PHP_ARG_WITH(xmlreader, for XMLReader support,
-[ --with-xmlreader Include XMLReader support.])
-
-if test -z "$PHP_LIBXML_DIR"; then
- PHP_ARG_WITH(libxml-dir, libxml2 install dir,
- [ --with-libxml-dir=DIR XMLReader: libxml2 install prefix], no, no)
-fi
-
-if test "$PHP_XMLREADER" != "no" && test "$PHP_LIBXML" != "no"; then
-
- PHP_SETUP_LIBXML(XMLREADER_SHARED_LIBADD, [
- AC_DEFINE(HAVE_XMLREADER,1,[ ])
- PHP_NEW_EXTENSION(xmlreader, php_xmlreader.c, $ext_shared)
- PHP_SUBST(XMLREADER_SHARED_LIBADD)
- ], [
- AC_MSG_ERROR([xml2-config not found. Please check your libxml2 installation.])
- ])
-fi
diff --git a/ext/xmlreader/config.w32 b/ext/xmlreader/config.w32
deleted file mode 100644
index d77fccc8f6..0000000000
--- a/ext/xmlreader/config.w32
+++ /dev/null
@@ -1,14 +0,0 @@
-// $Id$
-// vim:ft=javascript
-
-ARG_WITH("xmlreader", "XMLReader support", "no");
-
-if (PHP_XMLREADER == "yes" && PHP_LIBXML == "yes") {
- EXTENSION("xmlreader", "php_xmlreader.c");
- AC_DEFINE("HAVE_XMLREADER", 1, "XMLReader support");
- if (!PHP_XMLREADER_SHARED) {
- ADD_FLAG("CFLAGS_XMLREADER", "/D LIBXML_STATIC");
- }
- ADD_EXTENSION_DEP('xmlreader', 'libxml');
-}
-
diff --git a/ext/xmlreader/examples/dtdexample.dtd b/ext/xmlreader/examples/dtdexample.dtd
deleted file mode 100644
index ce53f0bc18..0000000000
--- a/ext/xmlreader/examples/dtdexample.dtd
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!ELEMENT LIST (MOVIE+)>
-<!ELEMENT MOVIE (TITLE, ORGTITLE, LOC, INFO)>
-<!ATTLIST MOVIE ID ID #REQUIRED>
-<!ELEMENT TITLE (#PCDATA)>
-<!ELEMENT ORGTITLE (#PCDATA)>
-<!ELEMENT LOC (#PCDATA)>
-<!ELEMENT INFO (#PCDATA)>
diff --git a/ext/xmlreader/examples/dtdexample.xml b/ext/xmlreader/examples/dtdexample.xml
deleted file mode 100644
index 052889c05d..0000000000
--- a/ext/xmlreader/examples/dtdexample.xml
+++ /dev/null
@@ -1,15 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE LIST SYSTEM "dtdexample.dtd">
-<LIST>
-<MOVIE ID="x200338360">
-<TITLE>Move Title 1</TITLE>
-<ORGTITLE/><LOC>Location 1</LOC>
-<INFO/>
-</MOVIE>
-<MOVIE ID="m200338361">
-<TITLE>Move Title 2</TITLE>
-<ORGTITLE/>
-<LOC>Location 2</LOC>
-<INFO/>
-</MOVIE>
-</LIST>
diff --git a/ext/xmlreader/examples/relaxNG.rng b/ext/xmlreader/examples/relaxNG.rng
deleted file mode 100644
index f4357e04ef..0000000000
--- a/ext/xmlreader/examples/relaxNG.rng
+++ /dev/null
@@ -1,11 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-<grammar xmlns="http://relaxng.org/ns/structure/1.0"
- datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
-
-<include href="relaxNG2.rng">
-<define name="TEI.prose"><ref name="INCLUDE"/></define>
-</include>
-</grammar>
-
-
-
diff --git a/ext/xmlreader/examples/relaxNG.xml b/ext/xmlreader/examples/relaxNG.xml
deleted file mode 100644
index 6b0cac1225..0000000000
--- a/ext/xmlreader/examples/relaxNG.xml
+++ /dev/null
@@ -1 +0,0 @@
-<TEI.2>hello</TEI.2> \ No newline at end of file
diff --git a/ext/xmlreader/examples/relaxNG2.rng b/ext/xmlreader/examples/relaxNG2.rng
deleted file mode 100644
index 4adae7b151..0000000000
--- a/ext/xmlreader/examples/relaxNG2.rng
+++ /dev/null
@@ -1,23 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<grammar xmlns="http://relaxng.org/ns/structure/1.0" xmlns:t="http://www.thaiopensource.com/ns/annotations" xmlns:a="http://relaxng.org/ns/compatibility/annotations/1.0" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
-
- <start>
- <ref name="TEI.2"/>
- </start>
- <define name="IGNORE">
- <notAllowed/>
- </define>
- <define name="INCLUDE">
- <empty/>
- </define>
-
-
- <include href="relaxNG3.rng"/>
-
- <define name="TEI.2">
- <element name="TEI.2">
- <text/>
- </element>
- </define>
-
-</grammar> \ No newline at end of file
diff --git a/ext/xmlreader/examples/relaxNG3.rng b/ext/xmlreader/examples/relaxNG3.rng
deleted file mode 100644
index 73e1eb6165..0000000000
--- a/ext/xmlreader/examples/relaxNG3.rng
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<grammar xmlns="http://relaxng.org/ns/structure/1.0" xmlns:t="http://www.thaiopensource.com/ns/annotations" xmlns:a="http://relaxng.org/ns/compatibility/annotations/1.0" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
-
- <define name="TEI.prose" combine="interleave">
- <ref name="IGNORE"/>
- </define>
-
-</grammar> \ No newline at end of file
diff --git a/ext/xmlreader/examples/xmlreader.xml b/ext/xmlreader/examples/xmlreader.xml
deleted file mode 100644
index 4c53743de6..0000000000
--- a/ext/xmlreader/examples/xmlreader.xml
+++ /dev/null
@@ -1,10 +0,0 @@
-<books>
- <book num="1">
- <title>The Grapes of Wrath</title>
- <author>John Steinbeck</author>
- </book>
- <book num="2">
- <title>The Pearl</title>
- <author>John Steinbeck</author>
- </book>
-</books>
diff --git a/ext/xmlreader/examples/xmlreader_file.php b/ext/xmlreader/examples/xmlreader_file.php
deleted file mode 100644
index 480b152d7e..0000000000
--- a/ext/xmlreader/examples/xmlreader_file.php
+++ /dev/null
@@ -1,20 +0,0 @@
-<?php
-$reader = new XMLReader();
-$reader->open('xmlreader.xml');
-while ($reader->read()) {
- if ($reader->nodeType != XMLREADER_END_ELEMENT) {
- print "Node Name: ".$reader->name."\n";
- print "Node Value: ".$reader->value."\n";
- print "Node Depth: ".$reader->depth."\n";
- if ($reader->nodeType==XMLREADER_ELEMENT && $reader->hasAttributes) {
- $attr = $reader->moveToFirstAttribute();
- while ($attr) {
- print " Attribute Name: ".$reader->name."\n";
- print " Attribute Value: ".$reader->value."\n";
- $attr = $reader->moveToNextAttribute();
- }
- }
- print "\n";
- }
-}
-?>
diff --git a/ext/xmlreader/examples/xmlreader_relaxNG.php b/ext/xmlreader/examples/xmlreader_relaxNG.php
deleted file mode 100644
index e56739a2fb..0000000000
--- a/ext/xmlreader/examples/xmlreader_relaxNG.php
+++ /dev/null
@@ -1,25 +0,0 @@
-<?php
-$indent = 5; /* Number of spaces to indent per level */
-
-$reader = new XMLReader();
-$reader->open('relaxNG.xml');
-/*
-Example setting relaxNG using string:
-$reader->setRelaxNGSchemaSource(file_get_contents('relaxNG.rng'));
-*/
-if ($reader->setRelaxNGSchema('relaxNG.rng')) {
- while ($reader->read()) {
- /* Print node name indenting it based on depth and $indent var */
- print str_repeat(" ", $reader->depth * $indent).$reader->name."\n";
- }
-}
-
-print "\n";
-
-if (! $reader->isValid()) {
- print "Document is not valid\n";
-} else {
- print "Document is valid\n";
-}
-
-?> \ No newline at end of file
diff --git a/ext/xmlreader/examples/xmlreader_string.php b/ext/xmlreader/examples/xmlreader_string.php
deleted file mode 100644
index d545c22c8b..0000000000
--- a/ext/xmlreader/examples/xmlreader_string.php
+++ /dev/null
@@ -1,31 +0,0 @@
-<?php
-$xmlstring = '<books>
- <book num="1">
- <title>The Grapes of Wrath</title>
- <author>John Steinbeck</author>
- </book>
- <book num="2">
- <title>The Pearl</title>
- <author>John Steinbeck</author>
- </book>
-</books>';
-
-$reader = new XMLReader();
-$reader->XML($xmlstring);
-while ($reader->read()) {
- if ($reader->nodeType != XMLREADER_END_ELEMENT) {
- print "Node Name: ".$reader->name."\n";
- print "Node Value: ".$reader->value."\n";
- print "Node Depth: ".$reader->depth."\n";
- if ($reader->nodeType==XMLREADER_ELEMENT && $reader->hasAttributes) {
- $attr = $reader->moveToFirstAttribute();
- while ($attr) {
- print " Attribute Name: ".$reader->name."\n";
- print " Attribute Value: ".$reader->value."\n";
- $attr = $reader->moveToNextAttribute();
- }
- }
- print "\n";
- }
-}
-?>
diff --git a/ext/xmlreader/examples/xmlreader_validatedtd.php b/ext/xmlreader/examples/xmlreader_validatedtd.php
deleted file mode 100644
index 5173154f5a..0000000000
--- a/ext/xmlreader/examples/xmlreader_validatedtd.php
+++ /dev/null
@@ -1,18 +0,0 @@
-<?php
-$indent = 5; /* Number of spaces to indent per level */
-
-$xml = new XMLReader();
-$xml->open("dtdexample.xml");
-$xml->setParserProperty(XMLREADER_LOADDTD, TRUE);
-$xml->setParserProperty(XMLREADER_VALIDATE, TRUE);
-while($xml->read()) {
- /* Print node name indenting it based on depth and $indent var */
- print str_repeat(" ", $xml->depth * $indent).$xml->name."\n";
- if ($xml->hasAttributes) {
- $attCount = $xml->attributeCount;
- print str_repeat(" ", $xml->depth * $indent)." Number of Attributes: ".$xml->attributeCount."\n";
- }
-}
-print "\n\nValid:\n";
-var_dump($xml->isValid());
-?> \ No newline at end of file
diff --git a/ext/xmlreader/package.xml b/ext/xmlreader/package.xml
deleted file mode 100644
index a2f80c3da1..0000000000
--- a/ext/xmlreader/package.xml
+++ /dev/null
@@ -1,77 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1" ?>
-<!DOCTYPE package SYSTEM "../package.dtd">
-<package>
- <name>xmlreader</name>
- <summary>Provides fast, non-cached, forward-only access to XML data under PHP 5.</summary>
- <description>
- This extension wraps the libxml xmlReader API. The reader acts as a cursor
- going forward on the document stream and stopping at each node in the way.
- xmlReader is similar to SAX though uses a much simpler API.
- </description>
- <license>PHP License</license>
- <maintainers>
- <maintainer>
- <user>rrichards</user>
- <name>Rob Richards</name>
- <email>rrichards@php.net</email>
- <role>lead</role>
- </maintainer>
- <maintainer>
- <user>chregu</user>
- <role>lead</role>
- <name>Christian Stocker</name>
- <email>chregu@php.net</email>
- </maintainer>
- </maintainers>
-
- <release>
- <version>1.0</version>
- <date>2004-07-27</date>
- <state>stable</state>
- <notes>
- Add name parameter to next() to skip to next named sibling node.
- </notes>
- </release>
-
- <changelog>
- <release>
- <version>0.2</version>
- <date>2004-05-10</date>
- <state>beta</state>
- <notes>
- Allow open and XML methods to be called statically.
- Add expand() support to export copies of nodes as DOM objects. (chregu)
- Add next() support to skip to next sibling node. (chregu)
- </notes>
- </release>
- </changelog>
-
- <configureoptions>
- <configureoption name="with-xmlreader" default="autodetect" prompt="Include XMLReader support?"/>
- </configureoptions>
- <filelist>
- <file role="src" name="config.m4"/>
- <file role="src" name="config.w32"/>
- <file role="src" name="php_xmlreader.c"/>
- <file role="src" name="php_xmlreader.h"/>
-
- <file role="doc" name="CREDITS"/>
- <file role="doc" name="TODO"/>
- <file role="doc" name="README"/>
- <file role="doc" name="examples/xmlreader_file.php"/>
- <file role="doc" name="examples/xmlreader_string.php"/>
- <file role="doc" name="examples/xmlreader.xml"/>
- <file role="doc" name="examples/xmlreader_validatedtd.php"/>
- <file role="doc" name="examples/dtdexample.xml"/>
- <file role="doc" name="examples/dtdexample.dtd"/>
- <file role="doc" name="examples/xmlreader_relaxNG.php"/>
- <file role="doc" name="examples/relaxNG.xml"/>
- <file role="doc" name="examples/relaxNG.rng"/>
- <file role="doc" name="examples/relaxNG2.rng"/>
- <file role="doc" name="examples/relaxNG3.rng"/>
- </filelist>
- <deps>
- <dep type="php" rel="ge" version="5" />
- <dep type="ext" rel="has">libxml</dep>
- </deps>
-</package>
diff --git a/ext/xmlreader/php_xmlreader.c b/ext/xmlreader/php_xmlreader.c
deleted file mode 100644
index 11cb6110ca..0000000000
--- a/ext/xmlreader/php_xmlreader.c
+++ /dev/null
@@ -1,1174 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Rob Richards <rrichards@php.net> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-
-#include "php.h"
-#include "php_ini.h"
-#include "ext/standard/info.h"
-#include "php_xmlreader.h"
-#ifdef HAVE_DOM
-#include "ext/dom/xml_common.h"
-#endif
-#include <libxml/uri.h>
-
-zend_class_entry *xmlreader_class_entry;
-
-static zend_object_handlers xmlreader_object_handlers;
-
-static HashTable xmlreader_prop_handlers;
-
-typedef int (*xmlreader_read_int_t)(xmlTextReaderPtr reader);
-typedef unsigned char *(*xmlreader_read_char_t)(xmlTextReaderPtr reader);
-typedef int (*xmlreader_write_t)(xmlreader_object *obj, zval *newval TSRMLS_DC);
-
-typedef unsigned char *(*xmlreader_read_one_char_t)(xmlTextReaderPtr reader, const unsigned char *);
-
-typedef struct _xmlreader_prop_handler {
- xmlreader_read_int_t read_int_func;
- xmlreader_read_char_t read_char_func;
- xmlreader_write_t write_func;
- int type;
-} xmlreader_prop_handler;
-
-#define XMLREADER_LOAD_STRING 0
-#define XMLREADER_LOAD_FILE 1
-
-static void xmlreader_register_prop_handler(HashTable *prop_handler, char *name, xmlreader_read_int_t read_int_func, xmlreader_read_char_t read_char_func, int rettype TSRMLS_DC)
-{
- xmlreader_prop_handler hnd;
-
- hnd.read_char_func = read_char_func;
- hnd.read_int_func = read_int_func;
- hnd.type = rettype;
- zend_hash_add(prop_handler, name, strlen(name)+1, &hnd, sizeof(xmlreader_prop_handler), NULL);
-}
-
-static int xmlreader_property_reader(xmlreader_object *obj, xmlreader_prop_handler *hnd, zval **retval TSRMLS_DC)
-{
- char *retchar = NULL;
- int retint = 0;
-
- if (obj->ptr != NULL) {
- if (hnd->read_char_func) {
- retchar = hnd->read_char_func(obj->ptr);
- } else {
- if (hnd->read_int_func) {
- retint = hnd->read_int_func(obj->ptr);
- if (retint == -1) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Internal libxml error returned");
- return FAILURE;
- }
- }
- }
- }
-
- ALLOC_ZVAL(*retval);
-
- switch (hnd->type) {
- case IS_STRING:
- if (retchar) {
- ZVAL_STRING(*retval, retchar, 1);
- xmlFree(retchar);
- } else {
- ZVAL_EMPTY_STRING(*retval);
- }
- break;
- case IS_BOOL:
- ZVAL_BOOL(*retval, retint);
- break;
- case IS_LONG:
- ZVAL_LONG(*retval, retint);
- break;
- default:
- ZVAL_NULL(*retval);
- }
-
- return SUCCESS;
-}
-
-/* {{{ xmlreader_read_property */
-zval *xmlreader_read_property(zval *object, zval *member, int type TSRMLS_DC)
-{
- xmlreader_object *obj;
- zval tmp_member;
- zval *retval;
- xmlreader_prop_handler *hnd;
- zend_object_handlers *std_hnd;
- int ret;
-
- if (member->type != IS_STRING) {
- tmp_member = *member;
- zval_copy_ctor(&tmp_member);
- convert_to_string(&tmp_member);
- member = &tmp_member;
- }
-
- ret = FAILURE;
- obj = (xmlreader_object *)zend_objects_get_address(object TSRMLS_CC);
-
- if (obj->prop_handler != NULL) {
- ret = zend_hash_find(obj->prop_handler, Z_STRVAL_P(member), Z_STRLEN_P(member)+1, (void **) &hnd);
- }
- if (ret == SUCCESS) {
- ret = xmlreader_property_reader(obj, hnd, &retval TSRMLS_CC);
- if (ret == SUCCESS) {
- /* ensure we're creating a temporary variable */
- retval->refcount = 0;
- } else {
- retval = EG(uninitialized_zval_ptr);
- }
- } else {
- std_hnd = zend_get_std_object_handlers();
- retval = std_hnd->read_property(object, member, type TSRMLS_CC);
- }
-
- if (member == &tmp_member) {
- zval_dtor(member);
- }
- return retval;
-}
-/* }}} */
-
-/* {{{ xmlreader_write_property */
-void xmlreader_write_property(zval *object, zval *member, zval *value TSRMLS_DC)
-{
- xmlreader_object *obj;
- zval tmp_member;
- xmlreader_prop_handler *hnd;
- zend_object_handlers *std_hnd;
- int ret;
-
- if (member->type != IS_STRING) {
- tmp_member = *member;
- zval_copy_ctor(&tmp_member);
- convert_to_string(&tmp_member);
- member = &tmp_member;
- }
-
- ret = FAILURE;
- obj = (xmlreader_object *)zend_objects_get_address(object TSRMLS_CC);
-
- if (obj->prop_handler != NULL) {
- ret = zend_hash_find((HashTable *)obj->prop_handler, Z_STRVAL_P(member), Z_STRLEN_P(member)+1, (void **) &hnd);
- }
- if (ret == SUCCESS) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Cannot write to read-only property");
- } else {
- std_hnd = zend_get_std_object_handlers();
- std_hnd->write_property(object, member, value TSRMLS_CC);
- }
-
- if (member == &tmp_member) {
- zval_dtor(member);
- }
-}
-/* }}} */
-
-/* _xmlreader_get_valid_file_path and _xmlreader_get_relaxNG should be made a
- common function in libxml extension as code is common to a few xml extensions */
-char *_xmlreader_get_valid_file_path(char *source, char *resolved_path, int resolved_path_len TSRMLS_DC) {
- xmlURI *uri;
- xmlChar *escsource;
- char *file_dest;
- int isFileUri = 0;
-
- uri = xmlCreateURI();
- escsource = xmlURIEscapeStr(source, ":");
- xmlParseURIReference(uri, escsource);
- xmlFree(escsource);
-
- if (uri->scheme != NULL) {
- /* absolute file uris - libxml only supports localhost or empty host */
- if (strncasecmp(source, "file:///",8) == 0) {
- isFileUri = 1;
-#ifdef PHP_WIN32
- source += 8;
-#else
- source += 7;
-#endif
- } else if (strncasecmp(source, "file://localhost/",17) == 0) {
- isFileUri = 1;
-#ifdef PHP_WIN32
- source += 17;
-#else
- source += 16;
-#endif
- }
- }
-
- file_dest = source;
-
- if ((uri->scheme == NULL || isFileUri)) {
- /* XXX possible buffer overflow if VCWD_REALPATH does not know size of resolved_path */
- if (! VCWD_REALPATH(source, resolved_path)) {
- expand_filepath(source, resolved_path TSRMLS_CC);
- }
- file_dest = resolved_path;
- }
-
- xmlFreeURI(uri);
-
- return file_dest;
-}
-
-#ifdef LIBXML_SCHEMAS_ENABLED
-static xmlRelaxNGPtr _xmlreader_get_relaxNG(char *source, int source_len, int type,
- xmlRelaxNGValidityErrorFunc error_func,
- xmlRelaxNGValidityWarningFunc warn_func TSRMLS_DC)
-{
- char *valid_file = NULL;
- xmlRelaxNGParserCtxtPtr parser = NULL;
- xmlRelaxNGPtr sptr;
- char resolved_path[MAXPATHLEN + 1];
-
- switch (type) {
- case XMLREADER_LOAD_FILE:
- valid_file = _xmlreader_get_valid_file_path(source, resolved_path, MAXPATHLEN TSRMLS_CC);
- if (!valid_file) {
- return NULL;
- }
- parser = xmlRelaxNGNewParserCtxt(valid_file);
- break;
- case XMLREADER_LOAD_STRING:
- parser = xmlRelaxNGNewMemParserCtxt(source, source_len);
- /* If loading from memory, we need to set the base directory for the document
- but it is not apparent how to do that for schema's */
- break;
- default:
- return NULL;
- }
-
- if (parser == NULL) {
- return NULL;
- }
-
- if (error_func || warn_func) {
- xmlRelaxNGSetParserErrors(parser,
- (xmlRelaxNGValidityErrorFunc) error_func,
- (xmlRelaxNGValidityWarningFunc) warn_func,
- parser);
- }
- sptr = xmlRelaxNGParse(parser);
- xmlRelaxNGFreeParserCtxt(parser);
-
- return sptr;
-}
-#endif
-
-/* {{{ xmlreader_module_entry
- */
-zend_module_entry xmlreader_module_entry = {
- STANDARD_MODULE_HEADER,
- "xmlreader",
- NULL,
- PHP_MINIT(xmlreader),
- PHP_MSHUTDOWN(xmlreader),
- NULL,
- NULL,
- PHP_MINFO(xmlreader),
- "0.1", /* Replace with version number for your extension */
- STANDARD_MODULE_PROPERTIES
-};
-/* }}} */
-
-#ifdef COMPILE_DL_XMLREADER
-ZEND_GET_MODULE(xmlreader)
-#endif
-
-/* {{{ xmlreader_objects_clone */
-void xmlreader_objects_clone(void *object, void **object_clone TSRMLS_DC)
-{
- /* TODO */
-}
-/* }}} */
-
-static void xmlreader_free_resources(xmlreader_object *intern) {
- if (intern) {
- if (intern->input) {
- xmlFreeParserInputBuffer(intern->input);
- intern->input = NULL;
- }
-
- if (intern->ptr) {
- xmlFreeTextReader(intern->ptr);
- intern->ptr = NULL;
- }
-#ifdef LIBXML_SCHEMAS_ENABLED
- if (intern->schema) {
- xmlRelaxNGFree((xmlRelaxNGPtr) intern->schema);
- intern->schema = NULL;
- }
-#endif
- }
-}
-
-/* {{{ xmlreader_objects_free_storage */
-void xmlreader_objects_free_storage(void *object TSRMLS_DC)
-{
- xmlreader_object *intern = (xmlreader_object *)object;
-
- zend_hash_destroy(intern->std.properties);
- FREE_HASHTABLE(intern->std.properties);
-
- xmlreader_free_resources(intern);
-
- efree(object);
-}
-/* }}} */
-
-/* {{{ xmlreader_objects_new */
-zend_object_value xmlreader_objects_new(zend_class_entry *class_type TSRMLS_DC)
-{
- zend_object_value retval;
- xmlreader_object *intern;
- zval *tmp;
-
- intern = emalloc(sizeof(xmlreader_object));
- intern->std.ce = class_type;
- intern->std.in_get = 0;
- intern->std.in_set = 0;
- intern->ptr = NULL;
- intern->input = NULL;
- intern->schema = NULL;
- intern->prop_handler = &xmlreader_prop_handlers;
-
- ALLOC_HASHTABLE(intern->std.properties);
- zend_hash_init(intern->std.properties, 0, NULL, ZVAL_PTR_DTOR, 0);
- zend_hash_copy(intern->std.properties, &class_type->default_properties, (copy_ctor_func_t) zval_add_ref, (void *) &tmp, sizeof(zval *));
- retval.handle = zend_objects_store_put(intern, NULL, (zend_objects_free_object_storage_t) xmlreader_objects_free_storage, xmlreader_objects_clone TSRMLS_CC);
- intern->handle = retval.handle;
- retval.handlers = &xmlreader_object_handlers;
- return retval;
-}
-/* }}} */
-
-static void php_xmlreader_string_arg(INTERNAL_FUNCTION_PARAMETERS, xmlreader_read_one_char_t internal_function) {
- zval *id;
- int name_len = 0;
- char *retchar = NULL;
- xmlreader_object *intern;
- char *name;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &name, &name_len) == FAILURE) {
- return;
- }
-
- if (!name_len) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Argument cannot be an empty string");
- RETURN_FALSE;
- }
-
- id = getThis();
-
- intern = (xmlreader_object *)zend_object_store_get_object(id TSRMLS_CC);
- if (intern && intern->ptr) {
- retchar = internal_function(intern->ptr, name);
- }
- if (retchar) {
- RETVAL_STRING(retchar, 1);
- xmlFree(retchar);
- return;
- } else {
- RETVAL_EMPTY_STRING();
- }
-}
-
-static void php_xmlreader_no_arg(INTERNAL_FUNCTION_PARAMETERS, xmlreader_read_int_t internal_function) {
- zval *id;
- int retval;
- xmlreader_object *intern;
-
- id = getThis();
-
- intern = (xmlreader_object *)zend_object_store_get_object(id TSRMLS_CC);
- if (intern && intern->ptr) {
- retval = internal_function(intern->ptr);
- if (retval == 1) {
- RETURN_TRUE;
- }
- }
-
- RETURN_FALSE;
-}
-
-/* This function not yet needed until some additional functions are implemented in libxml
-static void php_xmlreader_no_arg_string(INTERNAL_FUNCTION_PARAMETERS, xmlreader_read_char_t internal_function) {
- zval *id;
- char *retchar = NULL;
- xmlreader_object *intern;
-
- id = getThis();
-
- intern = (xmlreader_object *)zend_object_store_get_object(id TSRMLS_CC);
- if (intern && intern->ptr) {
- retchar = xmlTextReaderReadString(intern->ptr);
- }
- if (retchar) {
- RETVAL_STRING(retchar, 1);
- xmlFree(retchar);
- return;
- } else {
- RETVAL_EMPTY_STRING();
- }
-}
-*/
-
-static void php_xmlreader_set_relaxng_schema(INTERNAL_FUNCTION_PARAMETERS, int type) {
-#ifdef LIBXML_SCHEMAS_ENABLED
- zval *id;
- int source_len = 0, retval = -1;
- xmlreader_object *intern;
- xmlRelaxNGPtr schema = NULL;
- char *source;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s!", &source, &source_len) == FAILURE) {
- return;
- }
-
- if (source != NULL && !source_len) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Schema data source is requried");
- RETURN_FALSE;
- }
-
- id = getThis();
-
- intern = (xmlreader_object *)zend_object_store_get_object(id TSRMLS_CC);
- if (intern && intern->ptr) {
- if (source) {
- schema = _xmlreader_get_relaxNG(source, source_len, type, NULL, NULL TSRMLS_CC);
- if (schema) {
- retval = xmlTextReaderRelaxNGSetSchema(intern->ptr, schema);
- }
- } else {
- /* unset the associated relaxNG context and schema if one exists */
- retval = xmlTextReaderRelaxNGSetSchema(intern->ptr, NULL);
- }
-
- if (retval == 0) {
- if (intern->schema) {
- xmlRelaxNGFree((xmlRelaxNGPtr) intern->schema);
- }
-
- intern->schema = schema;
-
- RETURN_TRUE;
- }
- }
-
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to set schema. This must be set prior to reading or schema contains errors.");
-
- RETURN_FALSE;
-#else
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "No Schema support built into libxml.");
-
- RETURN_FALSE;
-#endif
-}
-
-/* {{{ proto boolean close()
-Closes xmlreader - current frees resources until xmlTextReaderClose is fixed in libxml */
-PHP_METHOD(xmlreader, close)
-{
- zval *id;
- xmlreader_object *intern;
-
- id = getThis();
- intern = (xmlreader_object *)zend_object_store_get_object(id TSRMLS_CC);
- /* libxml is segfaulting in versions up to 2.6.8 using xmlTextReaderClose so for
- now we will free the whole reader when close is called as it would get rebuilt on
- a new load anyways */
- xmlreader_free_resources(intern);
-
- RETURN_TRUE;
-}
-
-/* {{{ proto string getAttribute(string name)
-Get value of an attribute from current element */
-PHP_METHOD(xmlreader, getAttribute)
-{
- php_xmlreader_string_arg(INTERNAL_FUNCTION_PARAM_PASSTHRU, xmlTextReaderGetAttribute);
-}
-/* }}} */
-
-/* {{{ proto string getAttributeNo(int index)
-Get value of an attribute at index from current element */
-PHP_METHOD(xmlreader, getAttributeNo)
-{
- zval *id;
- int attr_pos;
- char *retchar = NULL;
- xmlreader_object *intern;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &attr_pos) == FAILURE) {
- return;
- }
-
- id = getThis();
-
- intern = (xmlreader_object *)zend_object_store_get_object(id TSRMLS_CC);
- if (intern && intern->ptr) {
- retchar = xmlTextReaderGetAttributeNo(intern->ptr,attr_pos);
- }
- if (retchar) {
- RETVAL_STRING(retchar, 1);
- xmlFree(retchar);
- return;
- } else {
- RETURN_EMPTY_STRING();
- }
-}
-/* }}} */
-
-/* {{{ proto string getAttributeNs(string name, string namespaceURI)
-Get value of a attribute via name and namespace from current element */
-PHP_METHOD(xmlreader, getAttributeNs)
-{
- zval *id;
- int name_len = 0, ns_uri_len = 0;
- xmlreader_object *intern;
- char *name, *ns_uri, *retchar = NULL;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ss", &name, &name_len, &ns_uri, &ns_uri_len) == FAILURE) {
- return;
- }
-
- if (name_len == 0 || ns_uri_len == 0) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Attribute Name and Namespace URI cannot be empty");
- RETURN_FALSE;
- }
-
- id = getThis();
-
- intern = (xmlreader_object *)zend_object_store_get_object(id TSRMLS_CC);
- if (intern && intern->ptr) {
- retchar = xmlTextReaderGetAttributeNs(intern->ptr, name, ns_uri);
- }
- if (retchar) {
- RETVAL_STRING(retchar, 1);
- xmlFree(retchar);
- return;
- } else {
- RETURN_EMPTY_STRING();
- }
-}
-/* }}} */
-
-/* {{{ proto boolean getParserProperty(int property)
-Indicates wether given property (one of the parser option constants) is set or not on parser */
-PHP_METHOD(xmlreader, getParserProperty)
-{
- zval *id;
- int property, retval = -1;
- xmlreader_object *intern;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &property) == FAILURE) {
- return;
- }
-
- id = getThis();
-
- intern = (xmlreader_object *)zend_object_store_get_object(id TSRMLS_CC);
- if (intern && intern->ptr) {
- retval = xmlTextReaderGetParserProp(intern->ptr,property);
- }
- if (retval == -1) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid parser property");
- RETURN_FALSE;
- }
-
- RETURN_BOOL(retval);
-}
-/* }}} */
-
-/* {{{ proto boolean isValid()
-Returns boolean indicating if parsed document is valid or not.
-Must set XMLREADER_LOADDTD or XMLREADER_VALIDATE parser option prior to the first call to read
-or this method will always return FALSE */
-PHP_METHOD(xmlreader, isValid)
-{
- php_xmlreader_no_arg(INTERNAL_FUNCTION_PARAM_PASSTHRU, xmlTextReaderIsValid);
-}
-/* }}} */
-
-/* {{{ proto string lookupNamespace(string prefix)
-Return namespaceURI for associated prefix on current node */
-PHP_METHOD(xmlreader, lookupNamespace)
-{
- php_xmlreader_string_arg(INTERNAL_FUNCTION_PARAM_PASSTHRU, xmlTextReaderLookupNamespace);
-}
-/* }}} */
-
-/* {{{ proto boolean moveToAttribute(string name)
-Positions reader at specified attribute - Returns TRUE on success and FALSE on failure */
-PHP_METHOD(xmlreader, moveToAttribute)
-{
- zval *id;
- int name_len = 0, retval;
- xmlreader_object *intern;
- char *name;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &name, &name_len) == FAILURE) {
- return;
- }
-
- if (name_len == 0) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Attribute Name is required");
- RETURN_FALSE;
- }
-
- id = getThis();
-
- intern = (xmlreader_object *)zend_object_store_get_object(id TSRMLS_CC);
- if (intern && intern->ptr) {
- retval = xmlTextReaderMoveToAttribute(intern->ptr, name);
- if (retval == 1) {
- RETURN_TRUE;
- }
- }
-
- RETURN_FALSE;
-}
-/* }}} */
-
-/* {{{ proto boolean moveToAttributeNo(int index)
-Positions reader at attribute at spcecified index.
-Returns TRUE on success and FALSE on failure */
-PHP_METHOD(xmlreader, moveToAttributeNo)
-{
- zval *id;
- int attr_pos, retval;
- xmlreader_object *intern;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &attr_pos) == FAILURE) {
- return;
- }
-
- id = getThis();
-
- intern = (xmlreader_object *)zend_object_store_get_object(id TSRMLS_CC);
- if (intern && intern->ptr) {
- retval = xmlTextReaderMoveToAttributeNo(intern->ptr, attr_pos);
- if (retval == 1) {
- RETURN_TRUE;
- }
- }
-
- RETURN_FALSE;
-}
-/* }}} */
-
-/* {{{ proto boolean moveToAttributeNs(string name, string namespaceURI)
-Positions reader at attribute spcified by name and namespaceURI.
-Returns TRUE on success and FALSE on failure */
-PHP_METHOD(xmlreader, moveToAttributeNs)
-{
- zval *id;
- int name_len=0, ns_uri_len=0, retval;
- xmlreader_object *intern;
- char *name, *ns_uri;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ss", &name, &name_len, &ns_uri, &ns_uri_len) == FAILURE) {
- return;
- }
-
- if (name_len == 0 || ns_uri_len == 0) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Attribute Name and Namespace URI cannot be empty");
- RETURN_FALSE;
- }
-
- id = getThis();
-
- intern = (xmlreader_object *)zend_object_store_get_object(id TSRMLS_CC);
- if (intern && intern->ptr) {
- retval = xmlTextReaderMoveToAttributeNs(intern->ptr, name, ns_uri);
- if (retval == 1) {
- RETURN_TRUE;
- }
- }
-
- RETURN_FALSE;
-}
-/* }}} */
-
-/* {{{ proto boolean moveToElement()
-Moves the position of the current instance to the node that contains the current Attribute node. */
-PHP_METHOD(xmlreader, moveToElement)
-{
- php_xmlreader_no_arg(INTERNAL_FUNCTION_PARAM_PASSTHRU, xmlTextReaderMoveToElement);
-}
-/* }}} */
-
-/* {{{ proto boolean moveToFirstAttribute()
-Moves the position of the current instance to the first attribute associated with the current node. */
-PHP_METHOD(xmlreader, moveToFirstAttribute)
-{
- php_xmlreader_no_arg(INTERNAL_FUNCTION_PARAM_PASSTHRU, xmlTextReaderMoveToFirstAttribute);
-}
-/* }}} */
-
-/* {{{ proto boolean moveToNextAttribute()
-Moves the position of the current instance to the next attribute associated with the current node. */
-PHP_METHOD(xmlreader, moveToNextAttribute)
-{
- php_xmlreader_no_arg(INTERNAL_FUNCTION_PARAM_PASSTHRU, xmlTextReaderMoveToNextAttribute);
-}
-/* }}} */
-
-/* {{{ proto boolean read()
-Moves the position of the current instance to the next node in the stream. */
-PHP_METHOD(xmlreader, read)
-{
- zval *id;
- int retval;
- xmlreader_object *intern;
-
- id = getThis();
- intern = (xmlreader_object *)zend_object_store_get_object(id TSRMLS_CC);
- if (intern != NULL && intern->ptr != NULL) {
- retval = xmlTextReaderRead(intern->ptr);
- if (retval == -1) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "An Error Occured while reading");
- RETURN_FALSE;
- } else {
- RETURN_BOOL(retval);
- }
- }
-
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Load Data before trying to read");
- RETURN_FALSE;
-}
-/* }}} */
-
-/* {{{ proto boolean next([string localname])
-Moves the position of the current instance to the next node in the stream. */
-PHP_METHOD(xmlreader, next)
-{
- zval *id;
- int retval, name_len=0;
- xmlreader_object *intern;
- char *name = NULL;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|s", &name, &name_len) == FAILURE) {
- return;
- }
-
- id = getThis();
- intern = (xmlreader_object *)zend_object_store_get_object(id TSRMLS_CC);
- if (intern != NULL && intern->ptr != NULL) {
- retval = xmlTextReaderNext(intern->ptr);
- while (name != NULL && retval == 1) {
-#ifdef PHP_WIN32
- /* xmlTextReaderConstLocalName should be used once its added to win def libxml.def file.
- Doing so will not require localname to be freed as its not allocated */
- xmlChar *localname = xmlTextReaderLocalName(intern->ptr);
- if (xmlStrEqual(localname, name)) {
- xmlFree(localname);
- RETURN_TRUE;
- }
- xmlFree(localname);
-#else
- if (xmlStrEqual(xmlTextReaderConstLocalName(intern->ptr), name)) {
- RETURN_TRUE;
- }
-#endif
- retval = xmlTextReaderNext(intern->ptr);
- }
- if (retval == -1) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "An Error Occured while reading");
- RETURN_FALSE;
- } else {
- RETURN_BOOL(retval);
- }
- }
-
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Load Data before trying to read");
- RETURN_FALSE;
-}
-/* }}} */
-
-/* {{{ proto boolean open(string URI)
-Sets the URI that the the XMLReader will parse. */
-PHP_METHOD(xmlreader, open)
-{
- zval *id;
- int source_len = 0;
- xmlreader_object *intern;
- char *source, *valid_file = NULL;
- char resolved_path[MAXPATHLEN + 1];
- xmlTextReaderPtr reader = NULL;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &source, &source_len) == FAILURE) {
- return;
- }
-
- id = getThis();
- if (id != NULL) {
- if (! instanceof_function(Z_OBJCE_P(id), xmlreader_class_entry TSRMLS_CC)) {
- id = NULL;
- } else {
- intern = (xmlreader_object *)zend_object_store_get_object(id TSRMLS_CC);
- xmlreader_free_resources(intern);
- }
- }
-
- if (!source_len) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Empty string supplied as input");
- RETURN_FALSE;
- }
-
- valid_file = _xmlreader_get_valid_file_path(source, resolved_path, MAXPATHLEN TSRMLS_CC);
-
- if (valid_file) {
- reader = xmlNewTextReaderFilename(valid_file);
- }
-
- if (reader == NULL) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to open source data");
- RETURN_FALSE;
- }
-
- if (id == NULL) {
- object_init_ex(return_value, xmlreader_class_entry);
- intern = (xmlreader_object *)zend_objects_get_address(return_value TSRMLS_CC);
- intern->ptr = reader;
- return;
- }
-
- intern->ptr = reader;
-
- RETURN_TRUE;
-
-}
-/* }}} */
-
-/* Not Yet Implemented in libxml - functions exist just not coded
-PHP_METHOD(xmlreader, readInnerXml)
-{
- php_xmlreader_no_arg_string(INTERNAL_FUNCTION_PARAM_PASSTHRU, xmlTextReaderReadInnerXml);
-}
-
-PHP_METHOD(xmlreader, readOuterXml)
-{
- php_xmlreader_no_arg_string(INTERNAL_FUNCTION_PARAM_PASSTHRU, xmlTextReaderReadInnerXml);
-}
-
-PHP_METHOD(xmlreader, readString)
-{
- php_xmlreader_no_arg_string(INTERNAL_FUNCTION_PARAM_PASSTHRU, xmlTextReaderReadString);
-}
-
-PHP_METHOD(xmlreader, resetState)
-{
-
-}
-*/
-
-/* {{{ proto boolean setParserProperty(int property, boolean value)
-Sets parser property (one of the parser option constants).
-Properties must be set after open() or XML() and before the first read() is called */
-PHP_METHOD(xmlreader, setParserProperty)
-{
- zval *id;
- int property, value, retval = -1;
- xmlreader_object *intern;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "lb", &property, &value) == FAILURE) {
- return;
- }
-
- id = getThis();
-
- intern = (xmlreader_object *)zend_object_store_get_object(id TSRMLS_CC);
- if (intern && intern->ptr) {
- retval = xmlTextReaderSetParserProp(intern->ptr,property, value);
- }
- if (retval == -1) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid parser property");
- RETURN_FALSE;
- }
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto boolean setRelaxNGSchemaSource(string filename)
-Sets the string that the the XMLReader will parse. */
-PHP_METHOD(xmlreader, setRelaxNGSchema)
-{
- php_xmlreader_set_relaxng_schema(INTERNAL_FUNCTION_PARAM_PASSTHRU, XMLREADER_LOAD_FILE);
-}
-/* }}} */
-
-/* {{{ proto boolean setRelaxNGSchemaSource(string source)
-Sets the string that the the XMLReader will parse. */
-PHP_METHOD(xmlreader, setRelaxNGSchemaSource)
-{
- php_xmlreader_set_relaxng_schema(INTERNAL_FUNCTION_PARAM_PASSTHRU, XMLREADER_LOAD_STRING);
-}
-/* }}} */
-
-/* {{{ proto boolean XML(string source)
-Sets the string that the the XMLReader will parse. */
-PHP_METHOD(xmlreader, XML)
-{
- zval *id;
- int source_len = 0;
- xmlreader_object *intern;
- char *source, *uri = NULL;
- int resolved_path_len;
- char *directory=NULL, resolved_path[MAXPATHLEN];
- xmlParserInputBufferPtr inputbfr;
- xmlTextReaderPtr reader;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &source, &source_len) == FAILURE) {
- return;
- }
-
- id = getThis();
- if (id != NULL && ! instanceof_function(Z_OBJCE_P(id), xmlreader_class_entry TSRMLS_CC)) {
- id = NULL;
- }
- if (id != NULL) {
- intern = (xmlreader_object *)zend_object_store_get_object(id TSRMLS_CC);
- xmlreader_free_resources(intern);
- }
-
- if (!source_len) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Empty string supplied as input");
- RETURN_FALSE;
- }
-
- inputbfr = xmlParserInputBufferCreateMem(source, source_len, XML_CHAR_ENCODING_NONE);
-
- if (inputbfr != NULL) {
-/* Get the URI of the current script so that we can set the base directory in libxml */
-#if HAVE_GETCWD
- directory = VCWD_GETCWD(resolved_path, MAXPATHLEN);
-#elif HAVE_GETWD
- directory = VCWD_GETWD(resolved_path);
-#endif
- if (directory) {
- resolved_path_len = strlen(resolved_path);
- if (resolved_path[resolved_path_len - 1] != DEFAULT_SLASH) {
- resolved_path[resolved_path_len] = DEFAULT_SLASH;
- resolved_path[++resolved_path_len] = '\0';
- }
- uri = (char *) xmlCanonicPath((const xmlChar *) resolved_path);
- }
- reader = xmlNewTextReader(inputbfr, uri);
- if (uri) {
- xmlFree(uri);
- }
- if (reader != NULL) {
- if (id == NULL) {
- object_init_ex(return_value, xmlreader_class_entry);
- intern = (xmlreader_object *)zend_objects_get_address(return_value TSRMLS_CC);
- intern->input = inputbfr;
- intern->ptr = reader;
- return;
- } else {
- intern->input = inputbfr;
- intern->ptr = reader;
- RETURN_TRUE;
-
- }
- }
- }
-
- if (inputbfr) {
- xmlFreeParserInputBuffer(inputbfr);
- }
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to load source data");
- RETURN_FALSE;
-}
-/* }}} */
-
-/* {{{ proto boolean expand()
-Moves the position of the current instance to the next node in the stream. */
-PHP_METHOD(xmlreader, expand)
-{
-#ifdef HAVE_DOM
- zval *id, *rv = NULL;
- int ret;
- xmlreader_object *intern;
- xmlNode *node, *nodec;
-
- id = getThis();
- intern = (xmlreader_object *)zend_object_store_get_object(id TSRMLS_CC);
-
- if (intern && intern->ptr) {
- node = xmlTextReaderExpand(intern->ptr);
-
- if (node == NULL) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "An Error Occured while expanding ");
- RETURN_FALSE;
- } else {
- nodec = xmlCopyNode(node, 1);
- DOM_RET_OBJ(rv, nodec, &ret, NULL);
- }
- } else {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Load Data before trying to expand");
- RETURN_FALSE;
- }
-#else
- php_error(E_WARNING, "DOM support is not enabled");
- return;
-#endif
-}
-/* }}} */
-
-static zend_function_entry xmlreader_functions[] = {
- PHP_ME(xmlreader, close, NULL, ZEND_ACC_PUBLIC)
- PHP_ME(xmlreader, getAttribute, NULL, ZEND_ACC_PUBLIC)
- PHP_ME(xmlreader, getAttributeNo, NULL, ZEND_ACC_PUBLIC)
- PHP_ME(xmlreader, getAttributeNs, NULL, ZEND_ACC_PUBLIC)
- PHP_ME(xmlreader, getParserProperty, NULL, ZEND_ACC_PUBLIC)
- PHP_ME(xmlreader, isValid, NULL, ZEND_ACC_PUBLIC)
- PHP_ME(xmlreader, lookupNamespace, NULL, ZEND_ACC_PUBLIC)
- PHP_ME(xmlreader, moveToAttributeNo, NULL, ZEND_ACC_PUBLIC)
- PHP_ME(xmlreader, moveToAttribute, NULL, ZEND_ACC_PUBLIC)
- PHP_ME(xmlreader, moveToAttributeNs, NULL, ZEND_ACC_PUBLIC)
- PHP_ME(xmlreader, moveToElement, NULL, ZEND_ACC_PUBLIC)
- PHP_ME(xmlreader, moveToFirstAttribute, NULL, ZEND_ACC_PUBLIC)
- PHP_ME(xmlreader, moveToNextAttribute, NULL, ZEND_ACC_PUBLIC)
- PHP_ME(xmlreader, open, NULL, ZEND_ACC_PUBLIC|ZEND_ACC_ALLOW_STATIC)
- PHP_ME(xmlreader, read, NULL, ZEND_ACC_PUBLIC)
- PHP_ME(xmlreader, next, NULL, ZEND_ACC_PUBLIC)
-/* Not Yet Implemented though defined in libxml as of 2.6.9dev
- PHP_ME(xmlreader, readInnerXml, NULL, ZEND_ACC_PUBLIC)
- PHP_ME(xmlreader, readOuterXml, NULL, ZEND_ACC_PUBLIC)
- PHP_ME(xmlreader, readString, NULL, ZEND_ACC_PUBLIC)
- PHP_ME(xmlreader, resetState, NULL, ZEND_ACC_PUBLIC)
-*/
- PHP_ME(xmlreader, setParserProperty, NULL, ZEND_ACC_PUBLIC)
- PHP_ME(xmlreader, setRelaxNGSchema, NULL, ZEND_ACC_PUBLIC)
- PHP_ME(xmlreader, setRelaxNGSchemaSource, NULL, ZEND_ACC_PUBLIC)
- PHP_ME(xmlreader, XML, NULL, ZEND_ACC_PUBLIC|ZEND_ACC_ALLOW_STATIC)
- PHP_ME(xmlreader, expand, NULL, ZEND_ACC_PUBLIC)
- {NULL, NULL, NULL}
-};
-
-/* {{{ PHP_MINIT_FUNCTION
- */
-PHP_MINIT_FUNCTION(xmlreader)
-{
-
- zend_class_entry ce;
-
- memcpy(&xmlreader_object_handlers, zend_get_std_object_handlers(), sizeof(zend_object_handlers));
- xmlreader_object_handlers.read_property = xmlreader_read_property;
- xmlreader_object_handlers.write_property = xmlreader_write_property;
- xmlreader_object_handlers.get_property_ptr_ptr = NULL;
-
- INIT_CLASS_ENTRY(ce, "XMLReader", xmlreader_functions);
- ce.create_object = xmlreader_objects_new;
- xmlreader_class_entry = zend_register_internal_class(&ce TSRMLS_CC);
-
- zend_hash_init(&xmlreader_prop_handlers, 0, NULL, NULL, 1);
- xmlreader_register_prop_handler(&xmlreader_prop_handlers, "attributeCount", xmlTextReaderAttributeCount, NULL, IS_LONG TSRMLS_CC);
- xmlreader_register_prop_handler(&xmlreader_prop_handlers, "baseURI", NULL, xmlTextReaderBaseUri, IS_STRING TSRMLS_CC);
- xmlreader_register_prop_handler(&xmlreader_prop_handlers, "depth", xmlTextReaderDepth, NULL, IS_LONG TSRMLS_CC);
- xmlreader_register_prop_handler(&xmlreader_prop_handlers, "hasAttributes", xmlTextReaderHasAttributes, NULL, IS_BOOL TSRMLS_CC);
- xmlreader_register_prop_handler(&xmlreader_prop_handlers, "hasValue", xmlTextReaderHasValue, NULL, IS_BOOL TSRMLS_CC);
- xmlreader_register_prop_handler(&xmlreader_prop_handlers, "isDefault", xmlTextReaderIsDefault, NULL, IS_BOOL TSRMLS_CC);
- xmlreader_register_prop_handler(&xmlreader_prop_handlers, "isEmptyElement", xmlTextReaderIsEmptyElement, NULL, IS_BOOL TSRMLS_CC);
- xmlreader_register_prop_handler(&xmlreader_prop_handlers, "localName", NULL, xmlTextReaderLocalName, IS_STRING TSRMLS_CC);
- xmlreader_register_prop_handler(&xmlreader_prop_handlers, "name", NULL, xmlTextReaderName, IS_STRING TSRMLS_CC);
- xmlreader_register_prop_handler(&xmlreader_prop_handlers, "namespaceURI", NULL, xmlTextReaderNamespaceUri, IS_STRING TSRMLS_CC);
- xmlreader_register_prop_handler(&xmlreader_prop_handlers, "nodeType", xmlTextReaderNodeType, NULL, IS_LONG TSRMLS_CC);
- xmlreader_register_prop_handler(&xmlreader_prop_handlers, "prefix", NULL, xmlTextReaderPrefix, IS_STRING TSRMLS_CC);
- xmlreader_register_prop_handler(&xmlreader_prop_handlers, "value", NULL, xmlTextReaderValue, IS_STRING TSRMLS_CC);
- xmlreader_register_prop_handler(&xmlreader_prop_handlers, "xmlLang", NULL, xmlTextReaderXmlLang, IS_STRING TSRMLS_CC);
-
- /* Constants for NodeType - cannot define common types to share with dom as there are differences in these types */
- REGISTER_LONG_CONSTANT("XMLREADER_NONE", XML_READER_TYPE_NONE, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("XMLREADER_ELEMENT", XML_READER_TYPE_ELEMENT, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("XMLREADER_ATTRIBUTE", XML_READER_TYPE_ATTRIBUTE, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("XMLREADER_TEXT", XML_READER_TYPE_TEXT, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("XMLREADER_CDATA", XML_READER_TYPE_CDATA, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("XMLREADER_ENTITY_REF", XML_READER_TYPE_ENTITY_REFERENCE, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("XMLREADER_ENTITY", XML_READER_TYPE_ENTITY, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("XMLREADER_PI", XML_READER_TYPE_PROCESSING_INSTRUCTION, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("XMLREADER_COMMENT", XML_READER_TYPE_COMMENT, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("XMLREADER_DOC", XML_READER_TYPE_DOCUMENT, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("XMLREADER_DOC_TYPE", XML_READER_TYPE_DOCUMENT_TYPE, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("XMLREADER_DOC_FRAGMENT", XML_READER_TYPE_DOCUMENT_FRAGMENT, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("XMLREADER_NOTATION", XML_READER_TYPE_NOTATION, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("XMLREADER_WHITESPACE", XML_READER_TYPE_WHITESPACE, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("XMLREADER_SIGNIFICANT_WHITESPACE", XML_READER_TYPE_SIGNIFICANT_WHITESPACE, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("XMLREADER_END_ELEMENT", XML_READER_TYPE_END_ELEMENT, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("XMLREADER_END_ENTITY", XML_READER_TYPE_END_ENTITY, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("XMLREADER_XML_DECLARATION", XML_READER_TYPE_XML_DECLARATION, CONST_CS | CONST_PERSISTENT);
-
- /* Constants for Parser options */
- REGISTER_LONG_CONSTANT("XMLREADER_LOADDTD", XML_PARSER_LOADDTD, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("XMLREADER_DEFAULTATTRS", XML_PARSER_DEFAULTATTRS, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("XMLREADER_VALIDATE", XML_PARSER_VALIDATE, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("XMLREADER_SUBST_ENTITIES", XML_PARSER_SUBST_ENTITIES, CONST_CS | CONST_PERSISTENT);
-
- /* Constants for Errors when loading - not yet used until we implement custom error handling
- REGISTER_LONG_CONSTANT("XMLREADER_VALIDITY_WARNING", XML_PARSER_SEVERITY_VALIDITY_WARNING, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("XMLREADER_VALIDITY_ERROR", XML_PARSER_SEVERITY_VALIDITY_ERROR, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("XMLREADER_WARNING", XML_PARSER_SEVERITY_WARNING, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("XMLREADER_ERROR", XML_PARSER_SEVERITY_ERROR, CONST_CS | CONST_PERSISTENT);
- */
-
- return SUCCESS;
-}
-/* }}} */
-
-
-/* {{{ PHP_MSHUTDOWN_FUNCTION
- */
-PHP_MSHUTDOWN_FUNCTION(xmlreader)
-{
- zend_hash_destroy(&xmlreader_prop_handlers);
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ PHP_MINFO_FUNCTION
- */
-PHP_MINFO_FUNCTION(xmlreader)
-{
- php_info_print_table_start();
- {
- php_info_print_table_row(2, "XMLReader", "enabled");
- }
- php_info_print_table_end();
-
- /* Remove comments if you have entries in php.ini
- DISPLAY_INI_ENTRIES();
- */
-}
-/* }}} */
-
-/*
- * 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/xmlreader/php_xmlreader.h b/ext/xmlreader/php_xmlreader.h
deleted file mode 100644
index 2a753efe4f..0000000000
--- a/ext/xmlreader/php_xmlreader.h
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Rob Richards <rrichards@php.net> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifndef PHP_XMLREADER_H
-#define PHP_XMLREADER_H
-
-extern zend_module_entry xmlreader_module_entry;
-#define phpext_xmlreader_ptr &xmlreader_module_entry
-
-#ifdef PHP_WIN32
-#define PHP_XMLREADER_API __declspec(dllexport)
-#else
-#define PHP_XMLREADER_API
-#endif
-
-#ifdef ZTS
-#include "TSRM.h"
-#endif
-
-#include "ext/libxml/php_libxml.h"
-#include <libxml/xmlreader.h>
-
-typedef struct _xmlreader_object {
- zend_object std;
- xmlTextReaderPtr ptr;
- /* input is used to allow strings to be loaded under libxml 2.5.x
- must manually allocate and de-allocate these - can be refactored when
- libxml 2.6.x becomes minimum version */
- xmlParserInputBufferPtr input;
- void *schema;
- HashTable *prop_handler;
- zend_object_handle handle;
-} xmlreader_object;
-
-PHP_MINIT_FUNCTION(xmlreader);
-PHP_MSHUTDOWN_FUNCTION(xmlreader);
-PHP_MINFO_FUNCTION(xmlreader);
-
-
-#ifdef ZTS
-#define XMLREADER_G(v) TSRMG(xmlreader_globals_id, zend_xmlreader_globals *, v)
-#else
-#define XMLREADER_G(v) (xmlreader_globals.v)
-#endif
-
-#endif /* PHP_XMLREADER_H */
-
-/*
- * 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/xmlreader/xmlreader.dsp b/ext/xmlreader/xmlreader.dsp
deleted file mode 100644
index 7b21518ba3..0000000000
--- a/ext/xmlreader/xmlreader.dsp
+++ /dev/null
@@ -1,114 +0,0 @@
-# Microsoft Developer Studio Project File - Name="xmlreader" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=xmlreader - Win32 Release_TS
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "xmlreader.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "xmlreader.mak" CFG="xmlreader - Win32 Release_TS"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "xmlreader - Win32 Debug_TS" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "xmlreader - Win32 Release_TS" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "xmlreader - Win32 Debug_TS"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "xmlreader___Win32_Debug_TS"
-# PROP BASE Intermediate_Dir "xmlreader___Win32_Debug_TS"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug_TS"
-# PROP Intermediate_Dir "Debug_TS"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "XMLREADER_EXPORTS" /YX /FD /GZ /c
-# ADD CPP /nologo /MDd /W3 /GX /ZI /Od /I "..\.." /I "..\..\Zend" /I "..\..\TSRM" /I "..\..\main" /D ZEND_DEBUG=1 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "XMLREADER_EXPORTS" /D "COMPILE_DL_XMLREADER" /D ZTS=1 /D "ZEND_WIN32" /D "PHP_WIN32" /D "LIBXML_THREAD_ENABLED" /FR /YX /FD /GZ /c
-# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 php5ts_debug.lib resolv.lib kernel32.lib user32.lib gdi32.lib winspool.lib /nologo /dll /debug /machine:I386 /nodefaultlib:"msvcrt" /out:"..\..\Debug_TS/php_xmlreader.dll" /libpath:"..\..\Debug_TS" /libpath:"..\..\..\bindlib_w32\Release"
-
-!ELSEIF "$(CFG)" == "xmlreader - Win32 Release_TS"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "xmlreader___Win32_Release_TS0"
-# PROP BASE Intermediate_Dir "xmlreader___Win32_Release_TS0"
-# PROP BASE Ignore_Export_Lib 0
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Release_TS"
-# PROP Intermediate_Dir "Release_TS"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MDd /W3 /GX /ZI /Od /I "..\.." /I "..\..\Zend" /I "..\..\TSRM" /I "..\..\main" /D ZEND_DEBUG=1 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "XMLREADER_EXPORTS" /D "COMPILE_DL_XSL" /D ZTS=1 /D "ZEND_WIN32" /D "PHP_WIN32" /D "LIBXML_THREAD_ENABLED" /FR /YX /FD /GZ /c
-# ADD CPP /nologo /MD /W3 /GX /O2 /I "..\.." /I "..\..\Zend" /I "..\..\TSRM" /I "..\..\main" /D ZEND_DEBUG=0 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "XMLREADER_EXPORTS" /D "COMPILE_DL_XSL" /D ZTS=1 /D "ZEND_WIN32" /D "PHP_WIN32" /D "LIBXML_THREAD_ENABLED" /YX /FD /GZ /c
-# SUBTRACT CPP /Fr
-# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 php5ts_debug.lib resolv.lib kernel32.lib user32.lib gdi32.lib winspool.lib /nologo /dll /debug /machine:I386 /nodefaultlib:"msvcrt" /out:"..\..\Debug_TS/php_xmlreader.dll" /libpath:"..\..\Debug_TS" /libpath:"..\..\..\bindlib_w32\Release"
-# ADD LINK32 php5ts.lib resolv.lib kernel32.lib user32.lib gdi32.lib winspool.lib /nologo /dll /incremental:no /machine:I386 /out:"..\..\Release_TS/php_xmlreader.dll" /libpath:"..\..\Debug_TS" /libpath:"..\..\..\bindlib_w32\Release"
-# SUBTRACT LINK32 /debug
-
-!ENDIF
-
-# Begin Target
-
-# Name "xmlreader - Win32 Debug_TS"
-# Name "xmlreader - Win32 Release_TS"
-# Begin Group "Source Files"
-
-# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
-# Begin Source File
-
-SOURCE=.\php_xmlreader.c
-# End Source File
-# End Group
-# Begin Group "Header Files"
-
-# PROP Default_Filter "h;hpp;hxx;hm;inl"
-# Begin Source File
-
-SOURCE=.\php_xmlreader.h
-# End Source File
-# End Group
-# Begin Group "Resource Files"
-
-# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
-# End Group
-# End Target
-# End Project
diff --git a/ext/xmlrpc/CREDITS b/ext/xmlrpc/CREDITS
deleted file mode 100644
index cfb14faf80..0000000000
--- a/ext/xmlrpc/CREDITS
+++ /dev/null
@@ -1,2 +0,0 @@
-xmlrpc
-Dan Libby
diff --git a/ext/xmlrpc/EXPERIMENTAL b/ext/xmlrpc/EXPERIMENTAL
deleted file mode 100644
index 6443e99646..0000000000
--- a/ext/xmlrpc/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/xmlrpc/config.m4 b/ext/xmlrpc/config.m4
deleted file mode 100644
index 8551f6b958..0000000000
--- a/ext/xmlrpc/config.m4
+++ /dev/null
@@ -1,93 +0,0 @@
-dnl
-dnl $Id$
-dnl
-
-sinclude(ext/xmlrpc/libxmlrpc/acinclude.m4)
-sinclude(ext/xmlrpc/libxmlrpc/xmlrpc.m4)
-sinclude(libxmlrpc/acinclude.m4)
-sinclude(libxmlrpc/xmlrpc.m4)
-
-PHP_ARG_WITH(xmlrpc, for XMLRPC-EPI support,
-[ --with-xmlrpc[=DIR] Include XMLRPC-EPI support.])
-
-PHP_ARG_WITH(expat-dir, libexpat dir for XMLRPC-EPI,
-[ --with-expat-dir=DIR XMLRPC-EPI: libexpat dir for XMLRPC-EPI.],no,no)
-
-PHP_ARG_WITH(iconv-dir, iconv dir for XMLRPC-EPI,
-[ --with-iconv-dir=DIR XMLRPC-EPI: iconv dir for XMLRPC-EPI.],no,no)
-
-if test "$PHP_XMLRPC" != "no"; then
-
- PHP_SUBST(XMLRPC_SHARED_LIBADD)
- AC_DEFINE(HAVE_XMLRPC,1,[ ])
-
- testval=no
- for i in $PHP_EXPAT_DIR $XMLRPC_DIR /usr/local /usr; do
- if test -f $i/lib/libexpat.a -o -f $i/lib/libexpat.$SHLIB_SUFFIX_NAME; then
- AC_DEFINE(HAVE_LIBEXPAT2,1,[ ])
- PHP_ADD_LIBRARY_WITH_PATH(expat, $i/lib, XMLRPC_SHARED_LIBADD)
- PHP_ADD_INCLUDE($i/include)
- testval=yes
- break
- fi
- done
-
- if test "$testval" = "no"; then
- AC_MSG_ERROR(XML-RPC support requires libexpat. Use --with-expat-dir=<DIR>)
- fi
-
- if test "$PHP_ICONV_DIR" != "no"; then
- PHP_ICONV=$PHP_ICONV_DIR
- fi
-
- if test "$PHP_ICONV" = "no"; then
- PHP_ICONV=yes
- fi
-
- PHP_SETUP_ICONV(XMLRPC_SHARED_LIBADD, [], [
- AC_MSG_ERROR([iconv not found, in order to build xmlrpc you need the iconv library])
- ])
-fi
-
-
-if test "$PHP_XMLRPC" = "yes"; then
- XMLRPC_CHECKS
- PHP_NEW_EXTENSION(xmlrpc,xmlrpc-epi-php.c libxmlrpc/base64.c \
- libxmlrpc/simplestring.c libxmlrpc/xml_to_dandarpc.c \
- libxmlrpc/xmlrpc_introspection.c libxmlrpc/encodings.c \
- libxmlrpc/system_methods.c libxmlrpc/xml_to_xmlrpc.c \
- libxmlrpc/queue.c libxmlrpc/xml_element.c libxmlrpc/xmlrpc.c \
- libxmlrpc/xml_to_soap.c,$ext_shared,,
- -I@ext_srcdir@/libxmlrpc -DVERSION="0.50")
- PHP_ADD_BUILD_DIR($ext_builddir/libxmlrpc)
- XMLRPC_MODULE_TYPE=builtin
-
-elif test "$PHP_XMLRPC" != "no"; then
-
- if test -r $PHP_XMLRPC/include/xmlrpc.h; then
- XMLRPC_DIR=$PHP_XMLRPC/include
- elif test -r $PHP_XMLRPC/include/xmlrpc-epi/xmlrpc.h; then
-dnl some xmlrpc-epi header files have generic file names like
-dnl queue.h or base64.h. Distributions have to create dir
-dnl for xmlrpc-epi because of this.
- XMLRPC_DIR=$PHP_XMLRPC/include/xmlrpc-epi
- else
- AC_MSG_CHECKING(for XMLRPC-EPI in default path)
- for i in /usr/local /usr; do
- if test -r $i/include/xmlrpc.h; then
- XMLRPC_DIR=$i/include
- AC_MSG_RESULT(found in $i)
- break
- fi
- done
- fi
-
- if test -z "$XMLRPC_DIR"; then
- AC_MSG_RESULT(not found)
- AC_MSG_ERROR(Please reinstall the XMLRPC-EPI distribution)
- fi
-
- PHP_ADD_INCLUDE($XMLRPC_DIR)
- PHP_ADD_LIBRARY_WITH_PATH(xmlrpc, $XMLRPC_DIR/lib, XMLRPC_SHARED_LIBADD)
-fi
-
diff --git a/ext/xmlrpc/config.w32 b/ext/xmlrpc/config.w32
deleted file mode 100644
index 8c399cd147..0000000000
--- a/ext/xmlrpc/config.w32
+++ /dev/null
@@ -1,14 +0,0 @@
-// $Id$
-// vim:ft=javascript
-
-ARG_WITH("xmlrpc", "XMLRPC-EPI support", "no");
-
-if (PHP_XMLRPC != "no") {
- CHECK_HEADER_ADD_INCLUDE("xmlrpc.h", "CFLAGS_XMLRPC", configure_module_dirname + "/libxmlrpc");
- EXTENSION('xmlrpc', 'xmlrpc-epi-php.c', PHP_XMLRPC_SHARED, "-DVERSION=\"0.50\"");
- ADD_SOURCES(configure_module_dirname + "/libxmlrpc", "base64.c simplestring.c xml_to_dandarpc.c \
- xmlrpc_introspection.c encodings.c system_methods.c xml_to_xmlrpc.c \
- queue.c xml_element.c xmlrpc.c xml_to_soap.c", "xmlrpc");
- ADD_EXTENSION_DEP('xmlrpc', 'libxml');
-}
-
diff --git a/ext/xmlrpc/libxmlrpc/README b/ext/xmlrpc/libxmlrpc/README
deleted file mode 100644
index 323edfa671..0000000000
--- a/ext/xmlrpc/libxmlrpc/README
+++ /dev/null
@@ -1,17 +0,0 @@
-organization of this directory is moving towards this approach:
-
-<module>.h -- public API and data types
-<module>_private.h -- protected API and data types
-<module>.c -- implementation and private API / types
-
-The rules are:
-.c files may include *_private.h.
-.h files may not include *_private.h
-
-This allows us to have a nicely encapsulated C api with opaque data types and private functions
-that are nonetheless shared between source files without redundant extern declarations..
-
-
-
-
-
diff --git a/ext/xmlrpc/libxmlrpc/acinclude.m4 b/ext/xmlrpc/libxmlrpc/acinclude.m4
deleted file mode 100644
index 07bf4f0b07..0000000000
--- a/ext/xmlrpc/libxmlrpc/acinclude.m4
+++ /dev/null
@@ -1,32 +0,0 @@
-# Local macros for automake & autoconf
-
-AC_DEFUN(XMLRPC_FUNCTION_CHECKS,[
-
-# Standard XMLRPC list
-AC_CHECK_FUNCS( \
- strtoul strtoull snprintf \
- strstr strpbrk strerror\
- memcpy memmove)
-
-])
-
-AC_DEFUN(XMLRPC_HEADER_CHECKS,[
-AC_HEADER_STDC
-AC_CHECK_HEADERS(xmlparse.h xmltok.h stdlib.h strings.h string.h)
-])
-
-AC_DEFUN(XMLRPC_TYPE_CHECKS,[
-
-AC_REQUIRE([AC_C_CONST])
-AC_REQUIRE([AC_C_INLINE])
-AC_CHECK_SIZEOF(char, 1)
-
-AC_CHECK_SIZEOF(int, 4)
-AC_CHECK_SIZEOF(long, 4)
-AC_CHECK_SIZEOF(long long, 8)
-AC_TYPE_SIZE_T
-AC_HEADER_TIME
-AC_TYPE_UID_T
-
-
-])
diff --git a/ext/xmlrpc/libxmlrpc/base64.c b/ext/xmlrpc/libxmlrpc/base64.c
deleted file mode 100644
index 7788d028d7..0000000000
--- a/ext/xmlrpc/libxmlrpc/base64.c
+++ /dev/null
@@ -1,192 +0,0 @@
-static const char rcsid[] = "#(@) $Id$";
-
-/*
-
- Encode or decode file as MIME base64 (RFC 1341)
-
- by John Walker
- http://www.fourmilab.ch/
-
- This program is in the public domain.
-
-*/
-#include <stdio.h>
-
-/* ENCODE -- Encode binary file into base64. */
-#include <stdlib.h>
-#include <ctype.h>
-
-#include "base64.h"
-
-static unsigned char dtable[512];
-
-void buffer_new(struct buffer_st *b)
-{
- b->length = 512;
- b->data = malloc(sizeof(char)*(b->length));
- b->data[0] = 0;
- b->ptr = b->data;
- b->offset = 0;
-}
-
-void buffer_add(struct buffer_st *b, char c)
-{
- *(b->ptr++) = c;
- b->offset++;
- if (b->offset == b->length) {
- b->length += 512;
- b->data = realloc(b->data, b->length);
- b->ptr = b->data + b->offset;
- }
-}
-
-void buffer_delete(struct buffer_st *b)
-{
- free(b->data);
- b->length = 0;
- b->offset = 0;
- b->ptr = NULL;
- b->data = NULL;
-}
-
-void base64_encode(struct buffer_st *b, const char *source, int length)
-{
- int i, hiteof = 0;
- int offset = 0;
- int olen;
-
- olen = 0;
-
- buffer_new(b);
-
- /* Fill dtable with character encodings. */
-
- for (i = 0; i < 26; i++) {
- dtable[i] = 'A' + i;
- dtable[26 + i] = 'a' + i;
- }
- for (i = 0; i < 10; i++) {
- dtable[52 + i] = '0' + i;
- }
- dtable[62] = '+';
- dtable[63] = '/';
-
- while (!hiteof) {
- unsigned char igroup[3], ogroup[4];
- int c, n;
-
- igroup[0] = igroup[1] = igroup[2] = 0;
- for (n = 0; n < 3; n++) {
- c = *(source++);
- offset++;
- if (offset > length) {
- hiteof = 1;
- break;
- }
- igroup[n] = (unsigned char) c;
- }
- if (n > 0) {
- ogroup[0] = dtable[igroup[0] >> 2];
- ogroup[1] = dtable[((igroup[0] & 3) << 4) | (igroup[1] >> 4)];
- ogroup[2] = dtable[((igroup[1] & 0xF) << 2) | (igroup[2] >> 6)];
- ogroup[3] = dtable[igroup[2] & 0x3F];
-
- /* Replace characters in output stream with "=" pad
- characters if fewer than three characters were
- read from the end of the input stream. */
-
- if (n < 3) {
- ogroup[3] = '=';
- if (n < 2) {
- ogroup[2] = '=';
- }
- }
- for (i = 0; i < 4; i++) {
- buffer_add(b, ogroup[i]);
- if (!(b->offset % 72)) {
- /* buffer_add(b, '\r'); */
- buffer_add(b, '\n');
- }
- }
- }
- }
- /* buffer_add(b, '\r'); */
- buffer_add(b, '\n');
-}
-
-void base64_decode(struct buffer_st *bfr, const char *source, int length)
-{
- int i;
- int offset = 0;
- int endoffile;
- int count;
-
- buffer_new(bfr);
-
- for (i = 0; i < 255; i++) {
- dtable[i] = 0x80;
- }
- for (i = 'A'; i <= 'Z'; i++) {
- dtable[i] = 0 + (i - 'A');
- }
- for (i = 'a'; i <= 'z'; i++) {
- dtable[i] = 26 + (i - 'a');
- }
- for (i = '0'; i <= '9'; i++) {
- dtable[i] = 52 + (i - '0');
- }
- dtable['+'] = 62;
- dtable['/'] = 63;
- dtable['='] = 0;
-
- endoffile = 0;
-
- /*CONSTANTCONDITION*/
- while (1) {
- unsigned char a[4], b[4], o[3];
-
- for (i = 0; i < 4; i++) {
- int c;
- while (1) {
- c = *(source++);
- offset++;
- if (offset > length) endoffile = 1;
- if (isspace(c) || c == '\n' || c == '\r') continue;
- break;
- }
-
- if (endoffile) {
- /*
- if (i > 0) {
- fprintf(stderr, "Input file incomplete.\n");
- exit(1);
- }
- */
- return;
- }
-
- if (dtable[c] & 0x80) {
- /*
- fprintf(stderr, "Offset %i length %i\n", offset, length);
- fprintf(stderr, "character '%c:%x:%c' in input file.\n", c, c, dtable[c]);
- exit(1);
- */
- i--;
- continue;
- }
- a[i] = (unsigned char) c;
- b[i] = (unsigned char) dtable[c];
- }
- o[0] = (b[0] << 2) | (b[1] >> 4);
- o[1] = (b[1] << 4) | (b[2] >> 2);
- o[2] = (b[2] << 6) | b[3];
- i = a[2] == '=' ? 1 : (a[3] == '=' ? 2 : 3);
- count = 0;
- while (count < i) {
- buffer_add(bfr, o[count++]);
- }
- if (i < 3) {
- return;
- }
- }
-}
diff --git a/ext/xmlrpc/libxmlrpc/base64.h b/ext/xmlrpc/libxmlrpc/base64.h
deleted file mode 100644
index 4cf156ad1e..0000000000
--- a/ext/xmlrpc/libxmlrpc/base64.h
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
-
- Encode or decode file as MIME base64 (RFC 1341)
-
- by John Walker
- http://www.fourmilab.ch/
-
- This program is in the public domain.
-
-*/
-
-
-struct buffer_st {
- char *data;
- int length;
- char *ptr;
- int offset;
-};
-
-void buffer_new(struct buffer_st *b);
-void buffer_add(struct buffer_st *b, char c);
-void buffer_delete(struct buffer_st *b);
-
-void base64_encode(struct buffer_st *b, const char *source, int length);
-void base64_decode(struct buffer_st *b, const char *source, int length);
-
-/*
-#define DEBUG_MALLOC
- */
-
-#ifdef DEBUG_MALLOC
-void *_malloc_real(size_t s, char *file, int line);
-void _free_real(void *p, char *file, int line);
-
-#define malloc(s) _malloc_real(s,__FILE__,__LINE__)
-#define free(p) _free_real(p, __FILE__,__LINE__)
-#endif
-
diff --git a/ext/xmlrpc/libxmlrpc/encodings.c b/ext/xmlrpc/libxmlrpc/encodings.c
deleted file mode 100644
index 1637a0961c..0000000000
--- a/ext/xmlrpc/libxmlrpc/encodings.c
+++ /dev/null
@@ -1,118 +0,0 @@
-/*
- This file is part of libXMLRPC - a C library for xml-encoded function calls.
-
- Author: Dan Libby (dan@libby.com)
- Epinions.com may be contacted at feedback@epinions-inc.com
-*/
-
-/*
- Copyright 2000 Epinions, Inc.
-
- Subject to the following 3 conditions, Epinions, Inc. permits you, free
- of charge, to (a) use, copy, distribute, modify, perform and display this
- software and associated documentation files (the "Software"), and (b)
- permit others to whom the Software is furnished to do so as well.
-
- 1) The above copyright notice and this permission notice shall be included
- without modification in all copies or substantial portions of the
- Software.
-
- 2) THE SOFTWARE IS PROVIDED "AS IS", WITHOUT ANY WARRANTY OR CONDITION OF
- ANY KIND, EXPRESS, IMPLIED OR STATUTORY, INCLUDING WITHOUT LIMITATION ANY
- IMPLIED WARRANTIES OF ACCURACY, MERCHANTABILITY, FITNESS FOR A PARTICULAR
- PURPOSE OR NONINFRINGEMENT.
-
- 3) IN NO EVENT SHALL EPINIONS, INC. BE LIABLE FOR ANY DIRECT, INDIRECT,
- SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES OR LOST PROFITS ARISING OUT
- OF OR IN CONNECTION WITH THE SOFTWARE (HOWEVER ARISING, INCLUDING
- NEGLIGENCE), EVEN IF EPINIONS, INC. IS AWARE OF THE POSSIBILITY OF SUCH
- DAMAGES.
-
-*/
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#ifndef PHP_WIN32
-#include <php_config.h>
-#else
-#include <config.w32.h>
-#include <stdlib.h>
-#endif
-
-static const char rcsid[] = "#(@) $Id$";
-
-#include <errno.h>
-
-#ifdef HAVE_GICONV_H
-#include <giconv.h>
-#else
-#include <iconv.h>
-#endif
-
-#include "encodings.h"
-
-static char* convert(const char* src, int src_len, int *new_len, const char* from_enc, const char* to_enc) {
- char* outbuf = 0;
-
- if(src && src_len && from_enc && to_enc) {
- size_t outlenleft = src_len;
- size_t inlenleft = src_len;
- int outlen = src_len;
- iconv_t ic = iconv_open(to_enc, from_enc);
- char* out_ptr = 0;
-
- if(ic != (iconv_t)-1) {
- size_t st;
- outbuf = (char*)malloc(outlen + 1);
-
- if(outbuf) {
- out_ptr = (char*)outbuf;
- while(inlenleft) {
- st = iconv(ic, (char**)&src, &inlenleft, &out_ptr, &outlenleft);
- if(st == -1) {
- if(errno == E2BIG) {
- int diff = out_ptr - outbuf;
- outlen += inlenleft;
- outlenleft += inlenleft;
- outbuf = (char*)realloc(outbuf, outlen + 1);
- if(!outbuf) {
- break;
- }
- out_ptr = outbuf + diff;
- }
- else {
- free(outbuf);
- outbuf = 0;
- break;
- }
- }
- }
- }
- iconv_close(ic);
- }
- outlen -= outlenleft;
-
- if(new_len) {
- *new_len = outbuf ? outlen : 0;
- }
- if(outbuf) {
- outbuf[outlen] = 0;
- }
- }
- return outbuf;
-}
-
-/* returns a new string that must be freed */
-char* utf8_encode(const char *s, int len, int *newlen, const char* encoding)
-{
- return convert(s, len, newlen, encoding, "UTF-8");
-}
-
-/* returns a new string, possibly decoded */
-char* utf8_decode(const char *s, int len, int *newlen, const char* encoding)
-{
- return convert(s, len, newlen, "UTF-8", encoding);
-}
-
diff --git a/ext/xmlrpc/libxmlrpc/encodings.h b/ext/xmlrpc/libxmlrpc/encodings.h
deleted file mode 100644
index 486360b1be..0000000000
--- a/ext/xmlrpc/libxmlrpc/encodings.h
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- This file is part of libXMLRPC - a C library for xml-encoded function calls.
-
- Author: Dan Libby (dan@libby.com)
- Epinions.com may be contacted at feedback@epinions-inc.com
-*/
-
-/*
- Copyright 2000 Epinions, Inc.
-
- Subject to the following 3 conditions, Epinions, Inc. permits you, free
- of charge, to (a) use, copy, distribute, modify, perform and display this
- software and associated documentation files (the "Software"), and (b)
- permit others to whom the Software is furnished to do so as well.
-
- 1) The above copyright notice and this permission notice shall be included
- without modification in all copies or substantial portions of the
- Software.
-
- 2) THE SOFTWARE IS PROVIDED "AS IS", WITHOUT ANY WARRANTY OR CONDITION OF
- ANY KIND, EXPRESS, IMPLIED OR STATUTORY, INCLUDING WITHOUT LIMITATION ANY
- IMPLIED WARRANTIES OF ACCURACY, MERCHANTABILITY, FITNESS FOR A PARTICULAR
- PURPOSE OR NONINFRINGEMENT.
-
- 3) IN NO EVENT SHALL EPINIONS, INC. BE LIABLE FOR ANY DIRECT, INDIRECT,
- SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES OR LOST PROFITS ARISING OUT
- OF OR IN CONNECTION WITH THE SOFTWARE (HOWEVER ARISING, INCLUDING
- NEGLIGENCE), EVEN IF EPINIONS, INC. IS AWARE OF THE POSSIBILITY OF SUCH
- DAMAGES.
-
-*/
-
-
-#ifndef __ENCODINGS__H
-#define __ENCODINGS__H
-
-/* these defines are for legacy purposes. */
-#define encoding_utf_8 "UTF-8"
-typedef const char* ENCODING_ID;
-#define utf8_get_encoding_id_string(desired_enc) ((const char*)desired_enc)
-#define utf8_get_encoding_id_from_string(id_string) ((ENCODING_ID)id_string)
-
-char* utf8_encode(const char *s, int len, int *newlen, ENCODING_ID encoding);
-char* utf8_decode(const char *s, int len, int *newlen, ENCODING_ID encoding);
-
-#endif /* __ENCODINGS__H */
diff --git a/ext/xmlrpc/libxmlrpc/queue.c b/ext/xmlrpc/libxmlrpc/queue.c
deleted file mode 100644
index 24187383fd..0000000000
--- a/ext/xmlrpc/libxmlrpc/queue.c
+++ /dev/null
@@ -1,982 +0,0 @@
-static const char rcsid[] = "#(@) $Id$";
-
-/*
- * Date last modified: Jan 2001
- * Modifications by Dan Libby (dan@libby.com), including:
- * - various fixes, null checks, etc
- * - addition of Q_Iter funcs, macros
- */
-
-
-/*-**************************************************************
- *
- * File : q.c
- *
- * Author: Peter Yard [1993.01.02] -- 02 Jan 1993
- *
- * Disclaimer: This code is released to the public domain.
- *
- * Description:
- * Generic double ended queue (Deque pronounced DEK) for handling
- * any data types, with sorting.
- *
- * By use of various functions in this module the caller
- * can create stacks, queues, lists, doubly linked lists,
- * sorted lists, indexed lists. All lists are dynamic.
- *
- * It is the responsibility of the caller to malloc and free
- * memory for insertion into the queue. A pointer to the object
- * is used so that not only can any data be used but various kinds
- * of data can be pushed on the same queue if one so wished e.g.
- * various length string literals mixed with pointers to structures
- * or integers etc.
- *
- * Enhancements:
- * A future improvement would be the option of multiple "cursors"
- * so that multiple locations could occur in the one queue to allow
- * placemarkers and additional flexibility. Perhaps even use queue
- * itself to have a list of cursors.
- *
- * Usage:
- *
- * /x init queue x/
- * queue q;
- * Q_Init(&q);
- *
- * To create a stack :
- *
- * Q_PushHead(&q, &mydata1); /x push x/
- * Q_PushHead(&q, &mydata2);
- * .....
- * data_ptr = Q_PopHead(&q); /x pop x/
- * .....
- * data_ptr = Q_Head(&q); /x top of stack x/
- *
- * To create a FIFO:
- *
- * Q_PushHead(&q, &mydata1);
- * .....
- * data_ptr = Q_PopTail(&q);
- *
- * To create a double list:
- *
- * data_ptr = Q_Head(&q);
- * ....
- * data_ptr = Q_Next(&q);
- * data_ptr = Q_Tail(&q);
- * if (Q_IsEmpty(&q)) ....
- * .....
- * data_ptr = Q_Previous(&q);
- *
- * To create a sorted list:
- *
- * Q_PushHead(&q, &mydata1); /x push x/
- * Q_PushHead(&q, &mydata2);
- * .....
- * if (!Q_Sort(&q, MyFunction))
- * .. error ..
- *
- * /x fill in key field of mydata1.
- * * NB: Q_Find does linear search
- * x/
- *
- * if (Q_Find(&q, &mydata1, MyFunction))
- * {
- * /x found it, queue cursor now at correct record x/
- * /x can retrieve with x/
- * data_ptr = Q_Get(&q);
- *
- * /x alter data , write back with x/
- * Q_Put(&q, data_ptr);
- * }
- *
- * /x Search with binary search x/
- * if (Q_Seek(&q, &mydata, MyFunction))
- * /x etc x/
- *
- *
- ****************************************************************/
-
-#ifdef _WIN32
-#include "xmlrpc_win32.h"
-#endif
-#include <stdlib.h>
-#include "queue.h"
-
-
-static void QuickSort(void *list[], int low, int high,
- int (*Comp)(const void *, const void *));
-static int Q_BSearch(queue *q, void *key,
- int (*Comp)(const void *, const void *));
-
-/* The index: a pointer to pointers */
-
-static void **index;
-static datanode **posn_index;
-
-
-/***
- *
- ** function : Q_Init
- *
- ** purpose : Initialise queue object and pointers.
- *
- ** parameters : 'queue' pointer.
- *
- ** returns : True_ if init successful else False_
- *
- ** comments :
- ***/
-
-int Q_Init(queue *q)
-{
- if(q) {
- q->head = q->tail = NULL;
- q->cursor = q->head;
- q->size = 0;
- q->sorted = False_;
- }
-
- return True_;
-}
-
-/***
- *
- ** function : Q_AtHead
- *
- ** purpose : tests if cursor is at head of queue
- *
- ** parameters : 'queue' pointer.
- *
- ** returns : boolean - True_ is at head else False_
- *
- ** comments :
- *
- ***/
-
-int Q_AtHead(queue *q)
-{
- return(q && q->cursor == q->head);
-}
-
-
-/***
- *
- ** function : Q_AtTail
- *
- ** purpose : boolean test if cursor at tail of queue
- *
- ** parameters : 'queue' pointer to test.
- *
- ** returns : True_ or False_
- *
- ** comments :
- *
- ***/
-
-int Q_AtTail(queue *q)
-{
- return(q && q->cursor == q->tail);
-}
-
-
-/***
- *
- ** function : Q_IsEmpty
- *
- ** purpose : test if queue has nothing in it.
- *
- ** parameters : 'queue' pointer
- *
- ** returns : True_ if IsEmpty queue, else False_
- *
- ** comments :
- *
- ***/
-
-inline int Q_IsEmpty(queue *q)
-{
- return(!q || q->size == 0);
-}
-
-/***
- *
- ** function : Q_Size
- *
- ** purpose : return the number of elements in the queue
- *
- ** parameters : queue pointer
- *
- ** returns : number of elements
- *
- ** comments :
- *
- ***/
-
-int Q_Size(queue *q)
-{
- return q ? q->size : 0;
-}
-
-
-/***
- *
- ** function : Q_Head
- *
- ** purpose : position queue cursor to first element (head) of queue.
- *
- ** parameters : 'queue' pointer
- *
- ** returns : pointer to data at head. If queue is IsEmpty returns NULL
- *
- ** comments :
- *
- ***/
-
-void *Q_Head(queue *q)
-{
- if(Q_IsEmpty(q))
- return NULL;
-
- q->cursor = q->head;
-
- return q->cursor->data;
-}
-
-
-/***
- *
- ** function : Q_Tail
- *
- ** purpose : locate cursor at tail of queue.
- *
- ** parameters : 'queue' pointer
- *
- ** returns : pointer to data at tail , if queue IsEmpty returns NULL
- *
- ** comments :
- *
- ***/
-
-void *Q_Tail(queue *q)
-{
- if(Q_IsEmpty(q))
- return NULL;
-
- q->cursor = q->tail;
-
- return q->cursor->data;
-}
-
-
-/***
- *
- ** function : Q_PushHead
- *
- ** purpose : put a data pointer at the head of the queue
- *
- ** parameters : 'queue' pointer, void pointer to the data.
- *
- ** returns : True_ if success else False_ if unable to push data.
- *
- ** comments :
- *
- ***/
-
-int Q_PushHead(queue *q, void *d)
-{
- if(q && d) {
- node *n;
- datanode *p;
-
- p = malloc(sizeof(datanode));
- if(p == NULL)
- return False_;
-
- n = q->head;
-
- q->head = (node*)p;
- q->head->prev = NULL;
-
- if(q->size == 0) {
- q->head->next = NULL;
- q->tail = q->head;
- }
- else {
- q->head->next = (datanode*)n;
- n->prev = q->head;
- }
-
- q->head->data = d;
- q->size++;
-
- q->cursor = q->head;
-
- q->sorted = False_;
-
- return True_;
- }
- return False_;
-}
-
-
-
-/***
- *
- ** function : Q_PushTail
- *
- ** purpose : put a data element pointer at the tail of the queue
- *
- ** parameters : queue pointer, pointer to the data
- *
- ** returns : True_ if data pushed, False_ if data not inserted.
- *
- ** comments :
- *
- ***/
-
-int Q_PushTail(queue *q, void *d)
-{
- if(q && d) {
- node *p;
- datanode *n;
-
- n = malloc(sizeof(datanode));
- if(n == NULL)
- return False_;
-
- p = q->tail;
- q->tail = (node *)n;
-
- if(q->size == 0) {
- q->tail->prev = NULL;
- q->head = q->tail;
- }
- else {
- q->tail->prev = (datanode *)p;
- p->next = q->tail;
- }
-
- q->tail->next = NULL;
-
- q->tail->data = d;
- q->cursor = q->tail;
- q->size++;
-
- q->sorted = False_;
-
- return True_;
- }
- return False_;
-}
-
-
-
-/***
- *
- ** function : Q_PopHead
- *
- ** purpose : remove and return the top element at the head of the
- * queue.
- *
- ** parameters : queue pointer
- *
- ** returns : pointer to data element or NULL if queue is IsEmpty.
- *
- ** comments :
- *
- ***/
-
-void *Q_PopHead(queue *q)
-{
- datanode *n;
- void *d;
-
- if(Q_IsEmpty(q))
- return NULL;
-
- d = q->head->data;
- n = q->head->next;
- free(q->head);
-
- q->size--;
-
- if(q->size == 0)
- q->head = q->tail = q->cursor = NULL;
- else {
- q->head = (node *)n;
- q->head->prev = NULL;
- q->cursor = q->head;
- }
-
- q->sorted = False_;
-
- return d;
-}
-
-
-/***
- *
- ** function : Q_PopTail
- *
- ** purpose : remove element from tail of queue and return data.
- *
- ** parameters : queue pointer
- *
- ** returns : pointer to data element that was at tail. NULL if queue
- * IsEmpty.
- *
- ** comments :
- *
- ***/
-
-void *Q_PopTail(queue *q)
-{
- datanode *p;
- void *d;
-
- if(Q_IsEmpty(q))
- return NULL;
-
- d = q->tail->data;
- p = q->tail->prev;
- free(q->tail);
- q->size--;
-
- if(q->size == 0)
- q->head = q->tail = q->cursor = NULL;
- else {
- q->tail = (node *)p;
- q->tail->next = NULL;
- q->cursor = q->tail;
- }
-
- q->sorted = False_;
-
- return d;
-}
-
-
-
-/***
- *
- ** function : Q_Next
- *
- ** purpose : Move to the next element in the queue without popping
- *
- ** parameters : queue pointer.
- *
- ** returns : pointer to data element of new element or NULL if end
- * of the queue.
- *
- ** comments : This uses the cursor for the current position. Q_Next
- * only moves in the direction from the head of the queue
- * to the tail.
- ***/
-
-void *Q_Next(queue *q)
-{
- if(!q)
- return NULL;
-
- if(!q->cursor || q->cursor->next == NULL)
- return NULL;
-
- q->cursor = (node *)q->cursor->next;
-
- return q->cursor->data ;
-}
-
-
-
-/***
- *
- ** function : Q_Previous
- *
- ** purpose : Opposite of Q_Next. Move to next element closer to the
- * head of the queue.
- *
- ** parameters : pointer to queue
- *
- ** returns : pointer to data of new element else NULL if queue IsEmpty
- *
- ** comments : Makes cursor move towards the head of the queue.
- *
- ***/
-
-void *Q_Previous(queue *q)
-{
- if(!q)
- return NULL;
-
- if(q->cursor->prev == NULL)
- return NULL;
-
- q->cursor = (node *)q->cursor->prev;
-
- return q->cursor->data;
-}
-
-
-void *Q_Iter_Del(queue *q, q_iter iter)
-{
- void *d;
- datanode *n, *p;
-
- if(!q)
- return NULL;
-
- if(iter == NULL)
- return NULL;
-
- if(iter == (q_iter)q->head)
- return Q_PopHead(q);
-
- if(iter == (q_iter)q->tail)
- return Q_PopTail(q);
-
- n = ((node*)iter)->next;
- p = ((node*)iter)->prev;
- d = ((node*)iter)->data;
-
- free(iter);
-
- if(p) {
- p->next = n;
- }
- if (q->cursor == (node*)iter) {
- if (p) {
- q->cursor = p;
- } else {
- q->cursor = n;
- }
- }
-
-
- if (n != NULL) {
- n->prev = p;
- }
-
- q->size--;
-
- q->sorted = False_;
-
- return d;
-}
-
-
-
-/***
- *
- ** function : Q_DelCur
- *
- ** purpose : Delete the current queue element as pointed to by
- * the cursor.
- *
- ** parameters : queue pointer
- *
- ** returns : pointer to data element.
- *
- ** comments : WARNING! It is the responsibility of the caller to
- * free any memory. Queue cannot distinguish between
- * pointers to literals and malloced memory.
- *
- ***/
-
-void *Q_DelCur(queue* q) {
- if(q) {
- return Q_Iter_Del(q, (q_iter)q->cursor);
- }
- return 0;
-}
-
-
-/***
- *
- ** function : Q_Destroy
- *
- ** purpose : Free all queue resources
- *
- ** parameters : queue pointer
- *
- ** returns : null.
- *
- ** comments : WARNING! It is the responsibility of the caller to
- * free any memory. Queue cannot distinguish between
- * pointers to literals and malloced memory.
- *
- ***/
-
-void Q_Destroy(queue *q)
-{
- while(!Q_IsEmpty(q)) {
- Q_PopHead(q);
- }
-}
-
-
-/***
- *
- ** function : Q_Get
- *
- ** purpose : get the pointer to the data at the cursor location
- *
- ** parameters : queue pointer
- *
- ** returns : data element pointer
- *
- ** comments :
- *
- ***/
-
-void *Q_Get(queue *q)
-{
- if(!q)
- return NULL;
-
- if(q->cursor == NULL)
- return NULL;
- return q->cursor->data;
-}
-
-
-
-/***
- *
- ** function : Q_Put
- *
- ** purpose : replace pointer to data with new pointer to data.
- *
- ** parameters : queue pointer, data pointer
- *
- ** returns : boolean- True_ if successful, False_ if cursor at NULL
- *
- ** comments :
- *
- ***/
-
-int Q_Put(queue *q, void *data)
-{
- if(q && data) {
- if(q->cursor == NULL)
- return False_;
-
- q->cursor->data = data;
- return True_;
- }
- return False_;
-}
-
-
-/***
- *
- ** function : Q_Find
- *
- ** purpose : Linear search of queue for match with key in *data
- *
- ** parameters : queue pointer q, data pointer with data containing key
- * comparison function here called Comp.
- *
- ** returns : True_ if found , False_ if not in queue.
- *
- ** comments : Useful for small queues that are constantly changing
- * and would otherwise need constant sorting with the
- * Q_Seek function.
- * For description of Comp see Q_Sort.
- * Queue cursor left on position found item else at end.
- *
- ***/
-
-int Q_Find(queue *q, void *data,
- int (*Comp)(const void *, const void *))
-{
- void *d;
-
- if (q == NULL) {
- return False_;
- }
-
- d = Q_Head(q);
- do {
- if(Comp(d, data) == 0)
- return True_;
- d = Q_Next(q);
- } while(!Q_AtTail(q));
-
- if(Comp(d, data) == 0)
- return True_;
-
- return False_;
-}
-
-/*======== Sorted Queue and Index functions ========= */
-
-
-static void QuickSort(void *list[], int low, int high,
- int (*Comp)(const void *, const void *))
-{
- int flag = 1, i, j;
- void *key, *temp;
-
- if(low < high) {
- i = low;
- j = high + 1;
-
- key = list[ low ];
-
- while(flag) {
- i++;
- while(Comp(list[i], key) < 0)
- i++;
-
- j--;
- while(Comp(list[j], key) > 0)
- j--;
-
- if(i < j) {
- temp = list[i];
- list[i] = list[j];
- list[j] = temp;
- }
- else flag = 0;
- }
-
- temp = list[low];
- list[low] = list[j];
- list[j] = temp;
-
- QuickSort(list, low, j-1, Comp);
- QuickSort(list, j+1, high, Comp);
- }
-}
-
-
-/***
- *
- ** function : Q_Sort
- *
- ** purpose : sort the queue and allow index style access.
- *
- ** parameters : queue pointer, comparison function compatible with
- * with 'qsort'.
- *
- ** returns : True_ if sort succeeded. False_ if error occurred.
- *
- ** comments : Comp function supplied by caller must return
- * -1 if data1 < data2
- * 0 if data1 == data2
- * +1 if data1 > data2
- *
- * for Comp(data1, data2)
- *
- * If queue is already sorted it frees the memory of the
- * old index and starts again.
- *
- ***/
-
-int Q_Sort(queue *q, int (*Comp)(const void *, const void *))
-{
- int i;
- void *d;
- datanode *dn;
-
- /* if already sorted free memory for tag array */
-
- if(q->sorted) {
- free(index);
- free(posn_index);
- q->sorted = False_;
- }
-
- /* Now allocate memory of array, array of pointers */
-
- index = malloc(q->size * sizeof(q->cursor->data));
- if(index == NULL)
- return False_;
-
- posn_index = malloc(q->size * sizeof(q->cursor));
- if(posn_index == NULL) {
- free(index);
- return False_;
- }
-
- /* Walk queue putting pointers into array */
-
- d = Q_Head(q);
- for(i=0; i < q->size; i++) {
- index[i] = d;
- posn_index[i] = q->cursor;
- d = Q_Next(q);
- }
-
- /* Now sort the index */
-
- QuickSort(index, 0, q->size - 1, Comp);
-
- /* Rearrange the actual queue into correct order */
-
- dn = q->head;
- i = 0;
- while(dn != NULL) {
- dn->data = index[i++];
- dn = dn->next;
- }
-
- /* Re-position to original element */
-
- if(d != NULL)
- Q_Find(q, d, Comp);
- else Q_Head(q);
-
- q->sorted = True_;
-
- return True_;
-}
-
-
-/***
- *
- ** function : Q_BSearch
- *
- ** purpose : binary search of queue index for node containing key
- *
- ** parameters : queue pointer 'q', data pointer of key 'key',
- * Comp comparison function.
- *
- ** returns : integer index into array of node pointers,
- * or -1 if not found.
- *
- ** comments : see Q_Sort for description of 'Comp' function.
- *
- ***/
-
-static int Q_BSearch( queue *q, void *key,
- int (*Comp)(const void *, const void*))
-{
- int low, mid, hi, val;
-
- low = 0;
- hi = q->size - 1;
-
- while(low <= hi) {
- mid = (low + hi) / 2;
- val = Comp(key, index[ mid ]);
-
- if(val < 0)
- hi = mid - 1;
-
- else if(val > 0)
- low = mid + 1;
-
- else /* Success */
- return mid;
- }
-
- /* Not Found */
-
- return -1;
-}
-
-
-/***
- *
- ** function : Q_Seek
- *
- ** purpose : use index to locate data according to key in 'data'
- *
- ** parameters : queue pointer 'q', data pointer 'data', Comp comparison
- * function.
- *
- ** returns : pointer to data or NULL if could not find it or could
- * not sort queue.
- *
- ** comments : see Q_Sort for description of 'Comp' function.
- *
- ***/
-
-void *Q_Seek(queue *q, void *data, int (*Comp)(const void *, const void *))
-{
- int idx;
-
- if (q == NULL) {
- return NULL;
- }
-
- if(!q->sorted) {
- if(!Q_Sort(q, Comp))
- return NULL;
- }
-
- idx = Q_BSearch(q, data, Comp);
-
- if(idx < 0)
- return NULL;
-
- q->cursor = posn_index[idx];
-
- return index[idx];
-}
-
-
-
-/***
- *
- ** function : Q_Insert
- *
- ** purpose : Insert an element into an indexed queue
- *
- ** parameters : queue pointer 'q', data pointer 'data', Comp comparison
- * function.
- *
- ** returns : pointer to data or NULL if could not find it or could
- * not sort queue.
- *
- ** comments : see Q_Sort for description of 'Comp' function.
- * WARNING! This code can be very slow since each new
- * element means a new Q_Sort. Should only be used for
- * the insertion of the odd element ,not the piecemeal
- * building of an entire queue.
- ***/
-
-int Q_Insert(queue *q, void *data, int (*Comp)(const void *, const void *))
-{
- if (q == NULL) {
- return False_;
- }
-
- Q_PushHead(q, data);
-
- if(!Q_Sort(q, Comp))
- return False_;
-
- return True_;
-}
-
-/* read only funcs for iterating through queue. above funcs modify queue */
-q_iter Q_Iter_Head(queue *q) {
- return q ? (q_iter)q->head : NULL;
-}
-
-q_iter Q_Iter_Tail(queue *q) {
- return q ? (q_iter)q->tail : NULL;
-}
-
-q_iter Q_Iter_Next(q_iter qi) {
- return qi ? (q_iter)((node*)qi)->next : NULL;
-}
-
-q_iter Q_Iter_Prev(q_iter qi) {
- return qi ? (q_iter)((node*)qi)->prev : NULL;
-}
-
-void * Q_Iter_Get(q_iter qi) {
- return qi ? ((node*)qi)->data : NULL;
-}
-
-int Q_Iter_Put(q_iter qi, void* data) {
- if(qi) {
- ((node*)qi)->data = data;
- return True_;
- }
- return False_;
-}
diff --git a/ext/xmlrpc/libxmlrpc/queue.h b/ext/xmlrpc/libxmlrpc/queue.h
deleted file mode 100644
index be73f6da00..0000000000
--- a/ext/xmlrpc/libxmlrpc/queue.h
+++ /dev/null
@@ -1,89 +0,0 @@
-/*
- * Date last modified: Jan 2001
- * Modifications by Dan Libby (dan@libby.com), including:
- * - various fixes, null checks, etc
- * - addition of Q_Iter funcs, macros
- */
-
-/*
- * File : q.h
- *
- * Peter Yard 02 Jan 1993.
- *
- * Disclaimer: This code is released to the public domain.
- */
-
-#ifndef Q__H
-#define Q__H
-
-#ifndef False_
- #define False_ 0
-#endif
-
-#ifndef True_
- #define True_ 1
-#endif
-
-typedef struct nodeptr datanode;
-
-typedef struct nodeptr {
- void *data ;
- datanode *prev, *next ;
-} node ;
-
-/* For external use with Q_Iter* funcs */
-typedef struct nodeptr* q_iter;
-
-typedef struct {
- node *head, *tail, *cursor;
- int size, sorted, item_deleted;
-} queue;
-
-typedef struct {
- void *dataptr;
- node *loc ;
-} index_elt ;
-
-
-int Q_Init(queue *q);
-void Q_Destroy(queue *q);
-int Q_IsEmpty(queue *q);
-int Q_Size(queue *q);
-int Q_AtHead(queue *q);
-int Q_AtTail(queue *q);
-int Q_PushHead(queue *q, void *d);
-int Q_PushTail(queue *q, void *d);
-void *Q_Head(queue *q);
-void *Q_Tail(queue *q);
-void *Q_PopHead(queue *q);
-void *Q_PopTail(queue *q);
-void *Q_Next(queue *q);
-void *Q_Previous(queue *q);
-void *Q_DelCur(queue *q);
-void *Q_Get(queue *q);
-int Q_Put(queue *q, void *data);
-int Q_Sort(queue *q, int (*Comp)(const void *, const void *));
-int Q_Find(queue *q, void *data,
- int (*Comp)(const void *, const void *));
-void *Q_Seek(queue *q, void *data,
- int (*Comp)(const void *, const void *));
-int Q_Insert(queue *q, void *data,
- int (*Comp)(const void *, const void *));
-
-/* read only funcs for iterating through queue. above funcs modify queue */
-q_iter Q_Iter_Head(queue *q);
-q_iter Q_Iter_Tail(queue *q);
-q_iter Q_Iter_Next(q_iter qi);
-q_iter Q_Iter_Prev(q_iter qi);
-void* Q_Iter_Get(q_iter qi);
-int Q_Iter_Put(q_iter qi, void* data); /* not read only! here for completeness. */
-void* Q_Iter_Del(queue *q, q_iter iter); /* not read only! here for completeness. */
-
-/* Fast (macro'd) versions of above */
-#define Q_Iter_Head_F(q) (q ? (q_iter)((queue*)q)->head : NULL)
-#define Q_Iter_Tail_F(q) (q ? (q_iter)((queue*)q)->tail : NULL)
-#define Q_Iter_Next_F(qi) (qi ? (q_iter)((node*)qi)->next : NULL)
-#define Q_Iter_Prev_F(qi) (qi ? (q_iter)((node*)qi)->prev : NULL)
-#define Q_Iter_Get_F(qi) (qi ? ((node*)qi)->data : NULL)
-
-#endif /* Q__H */
diff --git a/ext/xmlrpc/libxmlrpc/simplestring.c b/ext/xmlrpc/libxmlrpc/simplestring.c
deleted file mode 100644
index 7211d2cd94..0000000000
--- a/ext/xmlrpc/libxmlrpc/simplestring.c
+++ /dev/null
@@ -1,248 +0,0 @@
-/*
- This file is part of libXMLRPC - a C library for xml-encoded function calls.
-
- Author: Dan Libby (dan@libby.com)
- Epinions.com may be contacted at feedback@epinions-inc.com
-*/
-
-/*
- Copyright 2000 Epinions, Inc.
-
- Subject to the following 3 conditions, Epinions, Inc. permits you, free
- of charge, to (a) use, copy, distribute, modify, perform and display this
- software and associated documentation files (the "Software"), and (b)
- permit others to whom the Software is furnished to do so as well.
-
- 1) The above copyright notice and this permission notice shall be included
- without modification in all copies or substantial portions of the
- Software.
-
- 2) THE SOFTWARE IS PROVIDED "AS IS", WITHOUT ANY WARRANTY OR CONDITION OF
- ANY KIND, EXPRESS, IMPLIED OR STATUTORY, INCLUDING WITHOUT LIMITATION ANY
- IMPLIED WARRANTIES OF ACCURACY, MERCHANTABILITY, FITNESS FOR A PARTICULAR
- PURPOSE OR NONINFRINGEMENT.
-
- 3) IN NO EVENT SHALL EPINIONS, INC. BE LIABLE FOR ANY DIRECT, INDIRECT,
- SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES OR LOST PROFITS ARISING OUT
- OF OR IN CONNECTION WITH THE SOFTWARE (HOWEVER ARISING, INCLUDING
- NEGLIGENCE), EVEN IF EPINIONS, INC. IS AWARE OF THE POSSIBILITY OF SUCH
- DAMAGES.
-
-*/
-
-
-static const char rcsid[] = "#(@) $Id$";
-
-
-#define SIMPLESTRING_INCR 32
-
-/****h* ABOUT/simplestring
- * NAME
- * simplestring
- * AUTHOR
- * Dan Libby, aka danda (dan@libby.com)
- * CREATION DATE
- * 06/2000
- * HISTORY
- * $Log$
- * Revision 1.3 2002/08/22 01:25:50 sniper
- * kill some compile warnings
- *
- * Revision 1.2 2002/07/05 04:43:53 danda
- * merged in updates from SF project. bring php repository up to date with xmlrpc-epi version 0.51
- *
- * Revision 1.4 2002/02/13 20:58:50 danda
- * patch to make source more windows friendly, contributed by Jeff Lawson
- *
- * Revision 1.3 2001/09/29 21:58:05 danda
- * adding cvs log to history section
- *
- * 10/15/2000 -- danda -- adding robodoc documentation
- * PORTABILITY
- * Coded on RedHat Linux 6.2. Builds on Solaris x86. Should build on just
- * about anything with minor mods.
- * NOTES
- * This code was written primarily for xmlrpc, but has found some other uses.
- *
- * simplestring is, as the name implies, a simple API for dealing with C strings.
- * Why would I write yet another string API? Because I couldn't find any that were
- * a) free / GPL, b) simple/lightweight, c) fast, not doing unneccesary strlens all
- * over the place. So. It is simple, and it seems to work, and it is pretty fast.
- *
- * Oh, and it is also binary safe, ie it can handle strings with embedded NULLs,
- * so long as the real length is passed in.
- *
- * And the masses rejoiced.
- *
- * BUGS
- * there must be some.
- ******/
-
-#include <stdlib.h>
-#include <string.h>
-#include "simplestring.h"
-
-#define my_free(thing) if(thing) {free(thing); thing = 0;}
-
-/*----------------------**
-* Begin String Functions *
-*-----------------------*/
-
-/****f* FUNC/simplestring_init
- * NAME
- * simplestring_init
- * SYNOPSIS
- * void simplestring_init(simplestring* string)
- * FUNCTION
- * initialize string
- * INPUTS
- * string - pointer to a simplestring struct that will be initialized
- * RESULT
- * void
- * NOTES
- * SEE ALSO
- * simplestring_free ()
- * simplestring_clear ()
- * SOURCE
- */
-void simplestring_init(simplestring* string) {
- memset(string, 0, sizeof(simplestring));
-}
-/******/
-
-static void simplestring_init_str(simplestring* string) {
- string->str = (char*)malloc(SIMPLESTRING_INCR);
- if(string->str) {
- string->str[0] = 0;
- string->len = 0;
- string->size = SIMPLESTRING_INCR;
- }
- else {
- string->size = 0;
- }
-}
-
-/****f* FUNC/simplestring_clear
- * NAME
- * simplestring_clear
- * SYNOPSIS
- * void simplestring_clear(simplestring* string)
- * FUNCTION
- * clears contents of a string
- * INPUTS
- * string - the string value to clear
- * RESULT
- * void
- * NOTES
- * This function is very fast as it does not de-allocate any memory.
- * SEE ALSO
- *
- * SOURCE
- */
-void simplestring_clear(simplestring* string) {
- if(string->str) {
- string->str[0] = 0;
- }
- string->len = 0;
-}
-/******/
-
-/****f* FUNC/simplestring_free
- * NAME
- * simplestring_free
- * SYNOPSIS
- * void simplestring_free(simplestring* string)
- * FUNCTION
- * frees contents of a string, if any. Does *not* free the simplestring struct itself.
- * INPUTS
- * string - value containing string to be free'd
- * RESULT
- * void
- * NOTES
- * caller is responsible for allocating and freeing simplestring* struct itself.
- * SEE ALSO
- * simplestring_init ()
- * SOURCE
- */
-void simplestring_free(simplestring* string) {
- if(string && string->str) {
- my_free(string->str);
- string->len = 0;
- }
-}
-/******/
-
-/****f* FUNC/simplestring_addn
- * NAME
- * simplestring_addn
- * SYNOPSIS
- * void simplestring_addn(simplestring* string, const char* add, int add_len)
- * FUNCTION
- * copies n characters from source to target string
- * INPUTS
- * target - target string
- * source - source string
- * add_len - number of characters to copy
- * RESULT
- * void
- * NOTES
- * SEE ALSO
- * simplestring_add ()
- * SOURCE
- */
-void simplestring_addn(simplestring* target, const char* source, int add_len) {
- if(target && source) {
- if(!target->str) {
- simplestring_init_str(target);
- }
- if(target->len + add_len + 1 > target->size) {
- /* newsize is current length + new length */
- int newsize = target->len + add_len + 1;
- int incr = target->size * 2;
-
- /* align to SIMPLESTRING_INCR increments */
- newsize = newsize - (newsize % incr) + incr;
- target->str = (char*)realloc(target->str, newsize);
-
- target->size = target->str ? newsize : 0;
- }
-
- if(target->str) {
- if(add_len) {
- memcpy(target->str + target->len, source, add_len);
- }
- target->len += add_len;
- target->str[target->len] = 0; /* null terminate */
- }
- }
-}
-/******/
-
-/****f* FUNC/simplestring_add
- * NAME
- * simplestring_add
- * SYNOPSIS
- * void simplestring_add(simplestring* string, const char* add)
- * FUNCTION
- * appends a string of unknown length from source to target
- * INPUTS
- * target - the target string to append to
- * source - the source string of unknown length
- * RESULT
- * void
- * NOTES
- * SEE ALSO
- * simplestring_addn ()
- * SOURCE
- */
-void simplestring_add(simplestring* target, const char* source) {
- if(target && source) {
- simplestring_addn(target, source, strlen(source));
- }
-}
-/******/
-
-
-/*----------------------
-* End String Functions *
-*--------------------**/
diff --git a/ext/xmlrpc/libxmlrpc/simplestring.h b/ext/xmlrpc/libxmlrpc/simplestring.h
deleted file mode 100644
index c5d98cf1d8..0000000000
--- a/ext/xmlrpc/libxmlrpc/simplestring.h
+++ /dev/null
@@ -1,76 +0,0 @@
-/*
- This file is part of libXMLRPC - a C library for xml-encoded function calls.
-
- Author: Dan Libby (dan@libby.com)
- Epinions.com may be contacted at feedback@epinions-inc.com
-*/
-
-/*
- Copyright 2000 Epinions, Inc.
-
- Subject to the following 3 conditions, Epinions, Inc. permits you, free
- of charge, to (a) use, copy, distribute, modify, perform and display this
- software and associated documentation files (the "Software"), and (b)
- permit others to whom the Software is furnished to do so as well.
-
- 1) The above copyright notice and this permission notice shall be included
- without modification in all copies or substantial portions of the
- Software.
-
- 2) THE SOFTWARE IS PROVIDED "AS IS", WITHOUT ANY WARRANTY OR CONDITION OF
- ANY KIND, EXPRESS, IMPLIED OR STATUTORY, INCLUDING WITHOUT LIMITATION ANY
- IMPLIED WARRANTIES OF ACCURACY, MERCHANTABILITY, FITNESS FOR A PARTICULAR
- PURPOSE OR NONINFRINGEMENT.
-
- 3) IN NO EVENT SHALL EPINIONS, INC. BE LIABLE FOR ANY DIRECT, INDIRECT,
- SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES OR LOST PROFITS ARISING OUT
- OF OR IN CONNECTION WITH THE SOFTWARE (HOWEVER ARISING, INCLUDING
- NEGLIGENCE), EVEN IF EPINIONS, INC. IS AWARE OF THE POSSIBILITY OF SUCH
- DAMAGES.
-
-*/
-
-#ifndef __SIMPLESTRING_H__
- #define __SIMPLESTRING_H__
-
-/*-********************************
-* begin simplestring header stuff *
-**********************************/
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
- /****s* struct/simplestring
- * NAME
- * simplestring
- * NOTES
- * represents a string efficiently for fast appending, etc.
- * SOURCE
- */
-typedef struct _simplestring {
- char* str; /* string buf */
- int len; /* length of string/buf */
- int size; /* size of allocated buffer */
-} simplestring;
-/******/
-
-#ifndef NULL
- #define NULL 0
-#endif
-
-void simplestring_init(simplestring* string);
-void simplestring_clear(simplestring* string);
-void simplestring_free(simplestring* string);
-void simplestring_add(simplestring* string, const char* add);
-void simplestring_addn(simplestring* string, const char* add, int add_len);
-
-#ifdef __cplusplus
-}
-#endif
-
-/*-******************************
-* end simplestring header stuff *
-********************************/
-
-#endif /* __SIMPLESTRING_H__ */
diff --git a/ext/xmlrpc/libxmlrpc/system_methods.c b/ext/xmlrpc/libxmlrpc/system_methods.c
deleted file mode 100644
index c47236df14..0000000000
--- a/ext/xmlrpc/libxmlrpc/system_methods.c
+++ /dev/null
@@ -1,375 +0,0 @@
-/*
- This file is part of libXMLRPC - a C library for xml-encoded function calls.
-
- Author: Dan Libby (dan@libby.com)
- Epinions.com may be contacted at feedback@epinions-inc.com
-*/
-
-/*
- Copyright 2001 Epinions, Inc.
-
- Subject to the following 3 conditions, Epinions, Inc. permits you, free
- of charge, to (a) use, copy, distribute, modify, perform and display this
- software and associated documentation files (the "Software"), and (b)
- permit others to whom the Software is furnished to do so as well.
-
- 1) The above copyright notice and this permission notice shall be included
- without modification in all copies or substantial portions of the
- Software.
-
- 2) THE SOFTWARE IS PROVIDED "AS IS", WITHOUT ANY WARRANTY OR CONDITION OF
- ANY KIND, EXPRESS, IMPLIED OR STATUTORY, INCLUDING WITHOUT LIMITATION ANY
- IMPLIED WARRANTIES OF ACCURACY, MERCHANTABILITY, FITNESS FOR A PARTICULAR
- PURPOSE OR NONINFRINGEMENT.
-
- 3) IN NO EVENT SHALL EPINIONS, INC. BE LIABLE FOR ANY DIRECT, INDIRECT,
- SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES OR LOST PROFITS ARISING OUT
- OF OR IN CONNECTION WITH THE SOFTWARE (HOWEVER ARISING, INCLUDING
- NEGLIGENCE), EVEN IF EPINIONS, INC. IS AWARE OF THE POSSIBILITY OF SUCH
- DAMAGES.
-
-*/
-
-
-/****h* ABOUT/system_methods
- * AUTHOR
- * Dan Libby, aka danda (dan@libby.com)
- * HISTORY
- * $Log$
- * Revision 1.7 2001/09/29 21:58:05 danda
- * adding cvs log to history section
- *
- * 4/28/2001 -- danda -- adding system.multicall and separating out system methods.
- * TODO
- * NOTES
- *******/
-
-
-#include "queue.h"
-#include "xmlrpc.h"
-#include "xmlrpc_private.h"
-#include "xmlrpc_introspection_private.h"
-#include "system_methods_private.h"
-#include <string.h>
-#include <stdlib.h>
-#include <stdarg.h>
-
-
-static const char* xsm_introspection_xml =
-"<?xml version='1.0' ?>"
-
-"<introspection version='1.0'>"
- "<typeList>"
-
- "<typeDescription name='system.value' basetype='struct' desc='description of a value'>"
- "<value type='string' name='name' optional='yes'>value identifier</value>"
- "<value type='string' name='type'>value&apos;s xmlrpc or user-defined type</value>"
- "<value type='string' name='description'>value&apos;s textual description</value> "
- "<value type='boolean' name='optional'>true if value is optional, else it is required</value> "
- "<value type='any' name='member' optional='yes'>a child of this element. n/a for scalar types</value> "
- "</typeDescription>"
-
- "<typeDescription name='system.valueList' basetype='array' desc='list of value descriptions'>"
- "<value type='system.value'/>"
- "</typeDescription>"
-
- "<typeDescription name='system.stringList' basetype='array' desc='list of strings'>"
- "<value type='string'/>"
- "</typeDescription>"
-
-
- "</typeList>"
-
- "<methodList>"
-
- "<!-- system.describeMethods -->"
- "<methodDescription name='system.describeMethods'>"
- "<author>Dan Libby</author>"
- "<purpose>fully describes the methods and types implemented by this XML-RPC server.</purpose>"
- "<version>1.1</version>"
- "<signatures>"
- "<signature>"
- "<params>"
- "<value type='array' name='methodList' optional='yes' desc='a list of methods to be described. if omitted, all are described.'>"
- "<value type='string'>a valid method name</value>"
- "</value>"
- "</params>"
- "<returns>"
- "<value type='struct' desc='contains methods list and types list'>"
- "<value type='array' name='methodList' desc='a list of methods'>"
- "<value type='struct' desc='representation of a single method'>"
- "<value type='string' name='name'>method name</value>"
- "<value type='string' name='version' optional='yes'>method version</value>"
- "<value type='string' name='author' optional='yes'>method author</value>"
- "<value type='string' name='purpose' optional='yes'>method purpose</value>"
- "<value type='array' name='signatures' desc='list of method signatures'>"
- "<value type='struct' desc='representation of a single signature'>"
- "<value type='system.valueList' name='params' optional='yes'>parameter list</value>"
- "<value type='system.valueList' name='returns' optional='yes'>return value list</value>"
- "</value>"
- "</value>"
- "<value type='system.stringList' name='bugs' optional='yes'>list of known bugs</value>"
- "<value type='system.stringList' name='errors' optional='yes'>list of possible errors and error codes</value>"
- "<value type='system.stringList' name='examples' optional='yes'>list of examples</value>"
- "<value type='system.stringList' name='history' optional='yes'>list of modifications</value>"
- "<value type='system.stringList' name='notes' optional='yes'>list of notes</value>"
- "<value type='system.stringList' name='see' optional='yes'>see also. list of related methods</value>"
- "<value type='system.stringList' name='todo' optional='yes'>list of unimplemented features</value>"
- "</value>"
- "</value>"
- "<value type='array' name='typeList' desc='a list of type descriptions. Typically used for referencing complex types'>"
- "<value type='system.value'>a type description</value>"
- "</value>"
- "</value>"
- "</returns>"
- "</signature>"
- "</signatures>"
- "<see>"
- "<item name='system.listMethods' />"
- "<item name='system.methodSignature' />"
- "<item name='system.methodHelp' />"
- "</see>"
- "<example/>"
- "<error/>"
- "<note/>"
- "<bug/>"
- "<todo/>"
- "</methodDescription>"
-
- "<!-- system.listMethods -->"
- "<methodDescription name='system.listMethods'>"
- "<author>Dan Libby</author>"
- "<purpose>enumerates the methods implemented by this XML-RPC server.</purpose>"
- "<version>1.0</version>"
- "<signatures>"
- "<signature>"
- "<returns>"
- "<value type='array' desc='an array of strings'>"
- "<value type='string'>name of a method implemented by the server.</value>"
- "</value>"
- "</returns>"
- "</signature>"
- "</signatures>"
- "<see>"
- "<item name='system.describeMethods' />"
- "<item name='system.methodSignature' />"
- "<item name='system.methodHelp' />"
- "</see>"
- "<example/>"
- "<error/>"
- "<note/>"
- "<bug/>"
- "<todo/>"
- "</methodDescription>"
-
- "<!-- system.methodHelp -->"
- "<methodDescription name='system.methodHelp'>"
- "<author>Dan Libby</author>"
- "<purpose>provides documentation string for a single method</purpose>"
- "<version>1.0</version>"
- "<signatures>"
- "<signature>"
- "<params>"
- "<value type='string' name='methodName'>name of the method for which documentation is desired</value>"
- "</params>"
- "<returns>"
- "<value type='string'>help text if defined for the method passed, otherwise an empty string</value>"
- "</returns>"
- "</signature>"
- "</signatures>"
- "<see>"
- "<item name='system.listMethods' />"
- "<item name='system.methodSignature' />"
- "<item name='system.methodHelp' />"
- "</see>"
- "<example/>"
- "<error/>"
- "<note/>"
- "<bug/>"
- "<todo/>"
- "</methodDescription>"
-
- "<!-- system.methodSignature -->"
- "<methodDescription name='system.methodSignature'>"
- "<author>Dan Libby</author>"
- "<purpose>provides 1 or more signatures for a single method</purpose>"
- "<version>1.0</version>"
- "<signatures>"
- "<signature>"
- "<params>"
- "<value type='string' name='methodName'>name of the method for which documentation is desired</value>"
- "</params>"
- "<returns>"
- "<value type='array' desc='a list of arrays, each representing a signature'>"
- "<value type='array' desc='a list of strings. the first element represents the method return value. subsequent elements represent parameters.'>"
- "<value type='string'>a string indicating the xmlrpc type of a value. one of: string, int, double, base64, datetime, array, struct</value>"
- "</value>"
- "</value>"
- "</returns>"
- "</signature>"
- "</signatures>"
- "<see>"
- "<item name='system.listMethods' />"
- "<item name='system.methodHelp' />"
- "<item name='system.describeMethods' />"
- "</see>"
- "<example/>"
- "<error/>"
- "<note/>"
- "<bug/>"
- "<todo/>"
- "</methodDescription>"
-
- "<!-- system.multiCall -->"
- "<methodDescription name='system.multiCall'>"
- "<author>Dan Libby</author>"
- "<purpose>executes multiple methods in sequence and returns the results</purpose>"
- "<version>1.0</version>"
- "<signatures>"
- "<signature>"
- "<params>"
- "<value type='array' name='methodList' desc='an array of method call structs'>"
- "<value type='struct' desc='a struct representing a single method call'>"
- "<value type='string' name='methodName' desc='name of the method to be executed'/>"
- "<value type='array' name='params' desc='an array representing the params to a method. sub-elements should match method signature'/>"
- "</value>"
- "</value>"
- "</params>"
- "<returns>"
- "<value type='array' desc='an array of method responses'>"
- "<value type='array' desc='an array containing a single value, which is the method&apos;s response'/>"
- "</value>"
- "</returns>"
- "</signature>"
- "</signatures>"
- "<see>"
- "<item name='system.listMethods' />"
- "<item name='system.methodHelp' />"
- "<item name='system.describeMethods' />"
- "</see>"
- "<example/>"
- "<error/>"
- "<note/>"
- "<bug/>"
- "<todo/>"
- "</methodDescription>"
-
- "<!-- system.getCapabilities -->"
- "<methodDescription name='system.getCapabilities'>"
- "<author>Dan Libby</author>"
- "<purpose>returns a list of capabilities supported by this server</purpose>"
- "<version>1.0</version>"
- "<notes><item>spec url: http://groups.yahoo.com/group/xml-rpc/message/2897</item></notes>"
- "<signatures>"
- "<signature>"
- "<returns>"
- "<value type='struct' desc='list of capabilities, each with a unique key defined by the capability&apos;s spec'>"
- "<value type='struct' desc='definition of a single capability'>"
- "<value type='string' name='specURL'>www address of the specification defining this capability</value>"
- "<value type='int' name='specVersion'>version of the spec that this server's implementation conforms to</value>"
- "</value>"
- "</value>"
- "</returns>"
- "</signature>"
- "</signatures>"
- "<see>"
- "<item name='system.listMethods' />"
- "<item name='system.methodHelp' />"
- "<item name='system.describeMethods' />"
- "</see>"
- "<example/>"
- "<error/>"
- "<note/>"
- "<bug/>"
- "<todo/>"
- "</methodDescription>"
-
- "</methodList>"
-"</introspection>";
-
-
-/* forward declarations for static (non public, non api) funcs */
-static XMLRPC_VALUE xsm_system_multicall_cb(XMLRPC_SERVER server, XMLRPC_REQUEST input, void* userData);
-static XMLRPC_VALUE xsm_system_get_capabilities_cb(XMLRPC_SERVER server, XMLRPC_REQUEST input, void* userData);
-
-/*-*******************
-* System Methods API *
-*********************/
-
-static void xsm_lazy_doc_methods_cb(XMLRPC_SERVER server, void* userData) {
- XMLRPC_VALUE xDesc = XMLRPC_IntrospectionCreateDescription(xsm_introspection_xml, NULL);
- XMLRPC_ServerAddIntrospectionData(server, xDesc);
- XMLRPC_CleanupValue(xDesc);
-}
-
-void xsm_register(XMLRPC_SERVER server) {
- xi_register_system_methods(server);
-
- XMLRPC_ServerRegisterMethod(server, xsm_token_system_multicall, xsm_system_multicall_cb);
- XMLRPC_ServerRegisterMethod(server, xsm_token_system_get_capabilities, xsm_system_get_capabilities_cb);
-
- /* callback for documentation generation should it be requested */
- XMLRPC_ServerRegisterIntrospectionCallback(server, xsm_lazy_doc_methods_cb);
-}
-
-XMLRPC_VALUE xsm_system_multicall_cb(XMLRPC_SERVER server, XMLRPC_REQUEST input, void* userData) {
- XMLRPC_VALUE xArray = XMLRPC_VectorRewind(XMLRPC_RequestGetData(input));
- XMLRPC_VALUE xReturn = XMLRPC_CreateVector(0, xmlrpc_vector_array);
-
- if (xArray) {
- XMLRPC_VALUE xMethodIter = XMLRPC_VectorRewind(xArray);
-
- while (xMethodIter) {
- XMLRPC_REQUEST request = XMLRPC_RequestNew();
- if(request) {
- const char* methodName = XMLRPC_VectorGetStringWithID(xMethodIter, "methodName");
- XMLRPC_VALUE params = XMLRPC_VectorGetValueWithID(xMethodIter, "params");
-
- if(methodName && params) {
- XMLRPC_VALUE xRandomArray = XMLRPC_CreateVector(0, xmlrpc_vector_array);
- XMLRPC_RequestSetMethodName(request, methodName);
- XMLRPC_RequestSetData(request, params);
- XMLRPC_RequestSetRequestType(request, xmlrpc_request_call);
-
- XMLRPC_AddValueToVector(xRandomArray,
- XMLRPC_ServerCallMethod(server, request, userData));
-
- XMLRPC_AddValueToVector(xReturn, xRandomArray);
- }
- XMLRPC_RequestFree(request, 1);
- }
- xMethodIter = XMLRPC_VectorNext(xArray);
- }
- }
- return xReturn;
-}
-
-
-XMLRPC_VALUE xsm_system_get_capabilities_cb(XMLRPC_SERVER server, XMLRPC_REQUEST input, void* userData) {
- XMLRPC_VALUE xReturn = XMLRPC_CreateVector(0, xmlrpc_vector_struct);
- XMLRPC_VALUE xFaults = XMLRPC_CreateVector("faults_interop", xmlrpc_vector_struct);
- XMLRPC_VALUE xIntro = XMLRPC_CreateVector("introspection", xmlrpc_vector_struct);
-
- /* support for fault spec */
- XMLRPC_VectorAppendString(xFaults, "specURL", "http://xmlrpc-epi.sourceforge.net/specs/rfc.fault_codes.php", 0);
- XMLRPC_VectorAppendInt(xFaults, "specVersion", 20010516);
-
- /* support for introspection spec */
- XMLRPC_VectorAppendString(xIntro, "specURL", "http://xmlrpc-epi.sourceforge.net/specs/rfc.introspection.php", 0);
- XMLRPC_VectorAppendInt(xIntro, "specVersion", 20010516);
-
- XMLRPC_AddValuesToVector(xReturn,
- xFaults,
- xIntro,
- NULL);
-
- return xReturn;
-
-}
-
-/*-***********************
-* End System Methods API *
-*************************/
-
-
-
diff --git a/ext/xmlrpc/libxmlrpc/system_methods_private.h b/ext/xmlrpc/libxmlrpc/system_methods_private.h
deleted file mode 100644
index 72408fd3c4..0000000000
--- a/ext/xmlrpc/libxmlrpc/system_methods_private.h
+++ /dev/null
@@ -1,91 +0,0 @@
-/*
- This file is part of libXMLRPC - a C library for xml-encoded function calls.
-
- Author: Dan Libby (dan@libby.com)
- Epinions.com may be contacted at feedback@epinions-inc.com
-*/
-
-/*
- Copyright 2001 Dan Libby, Epinions, Inc.
-
- Subject to the following 3 conditions, Epinions, Inc. permits you, free
- of charge, to (a) use, copy, distribute, modify, perform and display this
- software and associated documentation files (the "Software"), and (b)
- permit others to whom the Software is furnished to do so as well.
-
- 1) The above copyright notice and this permission notice shall be included
- without modification in all copies or substantial portions of the
- Software.
-
- 2) THE SOFTWARE IS PROVIDED "AS IS", WITHOUT ANY WARRANTY OR CONDITION OF
- ANY KIND, EXPRESS, IMPLIED OR STATUTORY, INCLUDING WITHOUT LIMITATION ANY
- IMPLIED WARRANTIES OF ACCURACY, MERCHANTABILITY, FITNESS FOR A PARTICULAR
- PURPOSE OR NONINFRINGEMENT.
-
- 3) IN NO EVENT SHALL EPINIONS, INC. BE LIABLE FOR ANY DIRECT, INDIRECT,
- SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES OR LOST PROFITS ARISING OUT
- OF OR IN CONNECTION WITH THE SOFTWARE (HOWEVER ARISING, INCLUDING
- NEGLIGENCE), EVEN IF EPINIONS, INC. IS AWARE OF THE POSSIBILITY OF SUCH
- DAMAGES.
-
-*/
-
-/* IMPORTANT!
- *
- * only non-public things should be in this file. It is fine for any .c file
- * in xmlrpc/src to include it, but users of the public API should never
- * include it, and thus *.h files that are part of the public API should
- * never include it, or they would break if this file is not present.
- */
-
-
-#ifndef __SYSTEM_METHODS_PRIVATE_H
-/*
- * Avoid include redundancy.
- */
-#define __SYSTEM_METHODS_PRIVATE_H
-
-/*----------------------------------------------------------------------------
- * system_methods_private.h
- *
- * Purpose:
- * define non-public system.* methods
- * Comments:
- * xsm = xmlrpc system methods
- */
-
-/*----------------------------------------------------------------------------
- * Constants
- */
-#define xsm_token_system_multicall "system.multiCall"
-#define xsm_token_system_get_capabilities "system.getCapabilities"
-
-
-/*----------------------------------------------------------------------------
- * Includes
- */
-
-/*----------------------------------------------------------------------------
- * Structures
- */
-
-/*----------------------------------------------------------------------------
- * Globals
- */
-
-/*----------------------------------------------------------------------------
- * Functions
- */
-void xsm_register(XMLRPC_SERVER server);
-int xsm_is_system_method(XMLRPC_Callback cb);
-
-/*----------------------------------------------------------------------------
- * Macros
- */
-
-
-#endif /* __SYSTEM_METHODS_PRIVATE_H */
-
-
-
-
diff --git a/ext/xmlrpc/libxmlrpc/xml_element.c b/ext/xmlrpc/libxmlrpc/xml_element.c
deleted file mode 100644
index 5fee23959c..0000000000
--- a/ext/xmlrpc/libxmlrpc/xml_element.c
+++ /dev/null
@@ -1,742 +0,0 @@
-/*
- This file is part of libXMLRPC - a C library for xml-encoded function calls.
-
- Author: Dan Libby (dan@libby.com)
- Epinions.com may be contacted at feedback@epinions-inc.com
-*/
-
-/*
- Copyright 2000 Epinions, Inc.
-
- Subject to the following 3 conditions, Epinions, Inc. permits you, free
- of charge, to (a) use, copy, distribute, modify, perform and display this
- software and associated documentation files (the "Software"), and (b)
- permit others to whom the Software is furnished to do so as well.
-
- 1) The above copyright notice and this permission notice shall be included
- without modification in all copies or substantial portions of the
- Software.
-
- 2) THE SOFTWARE IS PROVIDED "AS IS", WITHOUT ANY WARRANTY OR CONDITION OF
- ANY KIND, EXPRESS, IMPLIED OR STATUTORY, INCLUDING WITHOUT LIMITATION ANY
- IMPLIED WARRANTIES OF ACCURACY, MERCHANTABILITY, FITNESS FOR A PARTICULAR
- PURPOSE OR NONINFRINGEMENT.
-
- 3) IN NO EVENT SHALL EPINIONS, INC. BE LIABLE FOR ANY DIRECT, INDIRECT,
- SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES OR LOST PROFITS ARISING OUT
- OF OR IN CONNECTION WITH THE SOFTWARE (HOWEVER ARISING, INCLUDING
- NEGLIGENCE), EVEN IF EPINIONS, INC. IS AWARE OF THE POSSIBILITY OF SUCH
- DAMAGES.
-
-*/
-
-
-static const char rcsid[] = "#(@) $Id$";
-
-
-
-/****h* ABOUT/xml_element
- * NAME
- * xml_element
- * AUTHOR
- * Dan Libby, aka danda (dan@libby.com)
- * CREATION DATE
- * 06/2000
- * HISTORY
- * $Log$
- * Revision 1.5 2003/12/16 21:00:21 sniper
- * Fix some compile warnings (patch by Joe Orton)
- *
- * Revision 1.4 2002/11/26 23:01:16 fmk
- * removing unused variables
- *
- * Revision 1.3 2002/07/05 04:43:53 danda
- * merged in updates from SF project. bring php repository up to date with xmlrpc-epi version 0.51
- *
- * Revision 1.9 2002/07/03 20:54:30 danda
- * root element should not have a parent. patch from anon SF user
- *
- * Revision 1.8 2002/05/23 17:46:51 danda
- * patch from mukund - fix non utf-8 encoding conversions
- *
- * Revision 1.7 2002/02/13 20:58:50 danda
- * patch to make source more windows friendly, contributed by Jeff Lawson
- *
- * Revision 1.6 2002/01/08 01:06:55 danda
- * enable <?xml version="1.0"?> format for parsers that are very picky.
- *
- * Revision 1.5 2001/09/29 21:58:05 danda
- * adding cvs log to history section
- *
- * 10/15/2000 -- danda -- adding robodoc documentation
- * TODO
- * Nicer external API. Get rid of macros. Make opaque types, etc.
- * PORTABILITY
- * Coded on RedHat Linux 6.2. Builds on Solaris x86. Should build on just
- * about anything with minor mods.
- * NOTES
- * This code incorporates ideas from expat-ensor from http://xml.ensor.org.
- *
- * It was coded primarily to act as a go-between for expat and xmlrpc. To this
- * end, it stores xml elements, their sub-elements, and their attributes in an
- * in-memory tree. When expat is done parsing, the tree can be walked, thus
- * retrieving the values. The code can also be used to build a tree via API then
- * write out the tree to a buffer, thus "serializing" the xml.
- *
- * It turns out this is useful for other purposes, such as parsing config files.
- * YMMV.
- *
- * Some Features:
- * - output option for xml escaping data. Choices include no escaping, entity escaping,
- * or CDATA sections.
- * - output option for character encoding. Defaults to (none) utf-8.
- * - output option for verbosity/readability. ultra-compact, newlines, pretty/level indented.
- *
- * BUGS
- * there must be some.
- ******/
-
-#ifdef _WIN32
-#include "xmlrpc_win32.h"
-#endif
-#include <stdlib.h>
-#include <string.h>
-#include <ctype.h>
-
-#include "xml_element.h"
-#include "queue.h"
-#include "expat.h"
-#include "encodings.h"
-
-#define my_free(thing) if(thing) {free(thing); thing = 0;}
-
-#define XML_DECL_START "<?xml"
-#define XML_DECL_START_LEN sizeof(XML_DECL_START) - 1
-#define XML_DECL_VERSION "version=\"1.0\""
-#define XML_DECL_VERSION_LEN sizeof(XML_DECL_VERSION) - 1
-#define XML_DECL_ENCODING_ATTR "encoding"
-#define XML_DECL_ENCODING_ATTR_LEN sizeof(XML_DECL_ENCODING_ATTR) - 1
-#define XML_DECL_ENCODING_DEFAULT "utf-8"
-#define XML_DECL_ENCODING_DEFAULT_LEN sizeof(XML_DECL_ENCODING_DEFAULT) - 1
-#define XML_DECL_END "?>"
-#define XML_DECL_END_LEN sizeof(XML_DECL_END) - 1
-#define START_TOKEN_BEGIN "<"
-#define START_TOKEN_BEGIN_LEN sizeof(START_TOKEN_BEGIN) - 1
-#define START_TOKEN_END ">"
-#define START_TOKEN_END_LEN sizeof(START_TOKEN_END) - 1
-#define EMPTY_START_TOKEN_END "/>"
-#define EMPTY_START_TOKEN_END_LEN sizeof(EMPTY_START_TOKEN_END) - 1
-#define END_TOKEN_BEGIN "</"
-#define END_TOKEN_BEGIN_LEN sizeof(END_TOKEN_BEGIN) - 1
-#define END_TOKEN_END ">"
-#define END_TOKEN_END_LEN sizeof(END_TOKEN_END) - 1
-#define ATTR_DELIMITER "\""
-#define ATTR_DELIMITER_LEN sizeof(ATTR_DELIMITER) - 1
-#define CDATA_BEGIN "<![CDATA["
-#define CDATA_BEGIN_LEN sizeof(CDATA_BEGIN) - 1
-#define CDATA_END "]]>"
-#define CDATA_END_LEN sizeof(CDATA_END) - 1
-#define EQUALS "="
-#define EQUALS_LEN sizeof(EQUALS) - 1
-#define WHITESPACE " "
-#define WHITESPACE_LEN sizeof(WHITESPACE) - 1
-#define NEWLINE "\n"
-#define NEWLINE_LEN sizeof(NEWLINE) - 1
-#define MAX_VAL_BUF 144
-#define SCALAR_STR "SCALAR"
-#define SCALAR_STR_LEN sizeof(SCALAR_STR) - 1
-#define VECTOR_STR "VECTOR"
-#define VECTOR_STR_LEN sizeof(VECTOR_STR) - 1
-#define RESPONSE_STR "RESPONSE"
-#define RESPONSE_STR_LEN sizeof(RESPONSE_STR) - 1
-
-
-/*-----------------------------
-- Begin xml_element Functions -
------------------------------*/
-
-/****f* xml_element/xml_elem_free_non_recurse
- * NAME
- * xml_elem_free_non_recurse
- * SYNOPSIS
- * void xml_elem_free_non_recurse(xml_element* root)
- * FUNCTION
- * free a single xml element. child elements will not be freed.
- * INPUTS
- * root - the element to free
- * RESULT
- * void
- * NOTES
- * SEE ALSO
- * xml_elem_free ()
- * xml_elem_new ()
- * SOURCE
- */
-void xml_elem_free_non_recurse(xml_element* root) {
- if(root) {
- xml_element_attr* attrs = Q_Head(&root->attrs);
- while(attrs) {
- my_free(attrs->key);
- my_free(attrs->val);
- my_free(attrs);
- attrs = Q_Next(&root->attrs);
- }
-
- Q_Destroy(&root->children);
- Q_Destroy(&root->attrs);
- my_free((char*)root->name);
- simplestring_free(&root->text);
- my_free(root);
- }
-}
-/******/
-
-/****f* xml_element/xml_elem_free
- * NAME
- * xml_elem_free
- * SYNOPSIS
- * void xml_elem_free(xml_element* root)
- * FUNCTION
- * free an xml element and all of its child elements
- * INPUTS
- * root - the root of an xml tree you would like to free
- * RESULT
- * void
- * NOTES
- * SEE ALSO
- * xml_elem_free_non_recurse ()
- * xml_elem_new ()
- * SOURCE
- */
-void xml_elem_free(xml_element* root) {
- if(root) {
- xml_element* kids = Q_Head(&root->children);
- while(kids) {
- xml_elem_free(kids);
- kids = Q_Next(&root->children);
- }
- xml_elem_free_non_recurse(root);
- }
-}
-/******/
-
-/****f* xml_element/xml_elem_new
- * NAME
- * xml_elem_new
- * SYNOPSIS
- * xml_element* xml_elem_new()
- * FUNCTION
- * allocates and initializes a new xml_element
- * INPUTS
- * none
- * RESULT
- * xml_element* or NULL. NULL indicates an out-of-memory condition.
- * NOTES
- * SEE ALSO
- * xml_elem_free ()
- * xml_elem_free_non_recurse ()
- * SOURCE
- */
-xml_element* xml_elem_new() {
- xml_element* elem = calloc(1, sizeof(xml_element));
- if(elem) {
- Q_Init(&elem->children);
- Q_Init(&elem->attrs);
- simplestring_init(&elem->text);
-
- /* init empty string in case we don't find any char data */
- simplestring_addn(&elem->text, "", 0);
- }
- return elem;
-}
-/******/
-
-static int xml_elem_writefunc(int (*fptr)(void *data, const char *text, int size), const char *text, void *data, int len)
-{
- return fptr && text ? fptr(data, text, len ? len : strlen(text)) : 0;
-}
-
-
-
-static int create_xml_escape(char *pString, unsigned char c)
-{
- int counter = 0;
-
- pString[counter++] = '&';
- pString[counter++] = '#';
- if(c >= 100) {
- pString[counter++] = c / 100 + '0';
- c = c % 100;
- }
- pString[counter++] = c / 10 + '0';
- c = c % 10;
-
- pString[counter++] = c + '0';
- pString[counter++] = ';';
- return counter;
-}
-
-#define non_ascii(c) (c > 127)
-#define non_print(c) (!isprint(c))
-#define markup(c) (c == '&' || c == '\"' || c == '>' || c == '<')
-#define entity_length(c) ( (c >= 100) ? 3 : ((c >= 10) ? 2 : 1) ) + 3; /* "&#" + c + ";" */
-
-/*
- * xml_elem_entity_escape
- *
- * Purpose:
- * escape reserved xml chars and non utf-8 chars as xml entities
- * Comments:
- * The return value may be a new string, or null if no
- * conversion was performed. In the latter case, *newlen will
- * be 0.
- * Flags (to escape)
- * xml_elem_no_escaping = 0x000,
- * xml_elem_entity_escaping = 0x002, // escape xml special chars as entities
- * xml_elem_non_ascii_escaping = 0x008, // escape chars above 127
- * xml_elem_cdata_escaping = 0x010, // wrap in cdata
- */
-static char* xml_elem_entity_escape(const char* buf, int old_len, int *newlen, XML_ELEM_ESCAPING flags) {
- char *pRetval = 0;
- int iNewBufLen=0;
-
-#define should_escape(c, flag) ( ((flag & xml_elem_markup_escaping) && markup(c)) || \
- ((flag & xml_elem_non_ascii_escaping) && non_ascii(c)) || \
- ((flag & xml_elem_non_print_escaping) && non_print(c)) )
-
- if(buf && *buf) {
- const unsigned char *bufcopy;
- char *NewBuffer;
- int ToBeXmlEscaped=0;
- int iLength;
- bufcopy = buf;
- iLength= old_len ? old_len : strlen(buf);
- while(*bufcopy) {
- if( should_escape(*bufcopy, flags) ) {
- /* the length will increase by length of xml escape - the character length */
- iLength += entity_length(*bufcopy);
- ToBeXmlEscaped=1;
- }
- bufcopy++;
- }
-
- if(ToBeXmlEscaped) {
-
- NewBuffer= malloc(iLength+1);
- if(NewBuffer) {
- bufcopy=buf;
- while(*bufcopy) {
- if(should_escape(*bufcopy, flags)) {
- iNewBufLen += create_xml_escape(NewBuffer+iNewBufLen,*bufcopy);
- }
- else {
- NewBuffer[iNewBufLen++]=*bufcopy;
- }
- bufcopy++;
- }
- NewBuffer[iNewBufLen] = 0;
- pRetval = NewBuffer;
- }
- }
- }
-
- if(newlen) {
- *newlen = iNewBufLen;
- }
-
- return pRetval;
-}
-
-
-static void xml_element_serialize(xml_element *el, int (*fptr)(void *data, const char *text, int size), void *data, XML_ELEM_OUTPUT_OPTIONS options, int depth)
-{
- int i;
- static STRUCT_XML_ELEM_OUTPUT_OPTIONS default_opts = {xml_elem_pretty, xml_elem_markup_escaping | xml_elem_non_print_escaping, XML_DECL_ENCODING_DEFAULT};
- static char whitespace[] = " "
- " "
- " ";
- depth++;
-
- if(!el) {
- fprintf(stderr, "Nothing to write\n");
- return;
- }
- if(!options) {
- options = &default_opts;
- }
-
- /* print xml declaration if at root level */
- if(depth == 1) {
- xml_elem_writefunc(fptr, XML_DECL_START, data, XML_DECL_START_LEN);
- xml_elem_writefunc(fptr, WHITESPACE, data, WHITESPACE_LEN);
- xml_elem_writefunc(fptr, XML_DECL_VERSION, data, XML_DECL_VERSION_LEN);
- if(options->encoding && *options->encoding) {
- xml_elem_writefunc(fptr, WHITESPACE, data, WHITESPACE_LEN);
- xml_elem_writefunc(fptr, XML_DECL_ENCODING_ATTR, data, XML_DECL_ENCODING_ATTR_LEN);
- xml_elem_writefunc(fptr, EQUALS, data, EQUALS_LEN);
- xml_elem_writefunc(fptr, ATTR_DELIMITER, data, ATTR_DELIMITER_LEN);
- xml_elem_writefunc(fptr, options->encoding, data, 0);
- xml_elem_writefunc(fptr, ATTR_DELIMITER, data, ATTR_DELIMITER_LEN);
- }
- xml_elem_writefunc(fptr, XML_DECL_END, data, XML_DECL_END_LEN);
- if(options->verbosity != xml_elem_no_white_space) {
- xml_elem_writefunc(fptr, NEWLINE, data, NEWLINE_LEN);
- }
- }
-
- if(options->verbosity == xml_elem_pretty && depth > 2) {
- xml_elem_writefunc(fptr, whitespace, data, depth - 2);
- }
- /* begin element */
- xml_elem_writefunc(fptr,START_TOKEN_BEGIN, data, START_TOKEN_BEGIN_LEN);
- if(el->name) {
- xml_elem_writefunc(fptr, el->name, data, 0);
-
- /* write attrs, if any */
- if(Q_Size(&el->attrs)) {
- xml_element_attr* iter = Q_Head(&el->attrs);
- while( iter ) {
- xml_elem_writefunc(fptr, WHITESPACE, data, WHITESPACE_LEN);
- xml_elem_writefunc(fptr, iter->key, data, 0);
- xml_elem_writefunc(fptr, EQUALS, data, EQUALS_LEN);
- xml_elem_writefunc(fptr, ATTR_DELIMITER, data, ATTR_DELIMITER_LEN);
- xml_elem_writefunc(fptr, iter->val, data, 0);
- xml_elem_writefunc(fptr, ATTR_DELIMITER, data, ATTR_DELIMITER_LEN);
-
- iter = Q_Next(&el->attrs);
- }
- }
- }
- else {
- xml_elem_writefunc(fptr, "None", data, 0);
- }
- /* if no text and no children, use abbreviated form, eg: <foo/> */
- if(!el->text.len && !Q_Size(&el->children)) {
- xml_elem_writefunc(fptr, EMPTY_START_TOKEN_END, data, EMPTY_START_TOKEN_END_LEN);
- }
- /* otherwise, print element contents */
- else {
- xml_elem_writefunc(fptr, START_TOKEN_END, data, START_TOKEN_END_LEN);
-
- /* print text, if any */
- if(el->text.len) {
- char* escaped_str = el->text.str;
- int buflen = el->text.len;
-
- if(options->escaping && options->escaping != xml_elem_cdata_escaping) {
- escaped_str = xml_elem_entity_escape(el->text.str, buflen, &buflen, options->escaping );
- if(!escaped_str) {
- escaped_str = el->text.str;
- }
- }
-
- if(options->escaping & xml_elem_cdata_escaping) {
- xml_elem_writefunc(fptr, CDATA_BEGIN, data, CDATA_BEGIN_LEN);
- }
-
- xml_elem_writefunc(fptr, escaped_str, data, buflen);
-
- if(escaped_str != el->text.str) {
- my_free(escaped_str);
- }
-
- if(options->escaping & xml_elem_cdata_escaping) {
- xml_elem_writefunc(fptr, CDATA_END, data, CDATA_END_LEN);
- }
- }
- /* no text, so print child elems */
- else {
- xml_element *kids = Q_Head(&el->children);
- i = 0;
- while( kids ) {
- if(i++ == 0) {
- if(options->verbosity != xml_elem_no_white_space) {
- xml_elem_writefunc(fptr, NEWLINE, data, NEWLINE_LEN);
- }
- }
- xml_element_serialize(kids, fptr, data, options, depth);
- kids = Q_Next(&el->children);
- }
- if(i) {
- if(options->verbosity == xml_elem_pretty && depth > 2) {
- xml_elem_writefunc(fptr, whitespace, data, depth - 2);
- }
- }
- }
-
- xml_elem_writefunc(fptr, END_TOKEN_BEGIN, data, END_TOKEN_BEGIN_LEN);
- xml_elem_writefunc(fptr,el->name ? el->name : "None", data, 0);
- xml_elem_writefunc(fptr, END_TOKEN_END, data, END_TOKEN_END_LEN);
- }
- if(options->verbosity != xml_elem_no_white_space) {
- xml_elem_writefunc(fptr, NEWLINE, data, NEWLINE_LEN);
- }
-}
-
-/* print buf to file */
-static int file_out_fptr(void *f, const char *text, int size)
-{
- fputs(text, (FILE *)f);
- return 0;
-}
-
-/* print buf to simplestring */
-static int simplestring_out_fptr(void *f, const char *text, int size)
-{
- simplestring* buf = (simplestring*)f;
- if(buf) {
- simplestring_addn(buf, text, size);
- }
- return 0;
-}
-
-/****f* xml_element/xml_elem_serialize_to_string
- * NAME
- * xml_elem_serialize_to_string
- * SYNOPSIS
- * void xml_element_serialize_to_string(xml_element *el, XML_ELEM_OUTPUT_OPTIONS options, int *buf_len)
- * FUNCTION
- * writes element tree as XML into a newly allocated buffer
- * INPUTS
- * el - root element of tree
- * options - options determining how output is written. see XML_ELEM_OUTPUT_OPTIONS
- * buf_len - length of returned buffer, if not null.
- * RESULT
- * char* or NULL. Must be free'd by caller.
- * NOTES
- * SEE ALSO
- * xml_elem_serialize_to_stream ()
- * xml_elem_parse_buf ()
- * SOURCE
- */
-char* xml_elem_serialize_to_string(xml_element *el, XML_ELEM_OUTPUT_OPTIONS options, int *buf_len)
-{
- simplestring buf;
- simplestring_init(&buf);
-
- xml_element_serialize(el, simplestring_out_fptr, (void *)&buf, options, 0);
-
- if(buf_len) {
- *buf_len = buf.len;
- }
-
- return buf.str;
-}
-/******/
-
-/****f* xml_element/xml_elem_serialize_to_stream
- * NAME
- * xml_elem_serialize_to_stream
- * SYNOPSIS
- * void xml_elem_serialize_to_stream(xml_element *el, FILE *output, XML_ELEM_OUTPUT_OPTIONS options)
- * FUNCTION
- * writes element tree as XML into a stream (typically an opened file)
- * INPUTS
- * el - root element of tree
- * output - stream handle
- * options - options determining how output is written. see XML_ELEM_OUTPUT_OPTIONS
- * RESULT
- * void
- * NOTES
- * SEE ALSO
- * xml_elem_serialize_to_string ()
- * xml_elem_parse_buf ()
- * SOURCE
- */
-void xml_elem_serialize_to_stream(xml_element *el, FILE *output, XML_ELEM_OUTPUT_OPTIONS options)
-{
- xml_element_serialize(el, file_out_fptr, (void *)output, options, 0);
-}
-/******/
-
-/*--------------------------*
-* End xml_element Functions *
-*--------------------------*/
-
-
-/*----------------------
-* Begin Expat Handlers *
-*---------------------*/
-
-typedef struct _xml_elem_data {
- xml_element* root;
- xml_element* current;
- XML_ELEM_INPUT_OPTIONS input_options;
- int needs_enc_conversion;
-} xml_elem_data;
-
-
-/* expat start of element handler */
-static void startElement(void *userData, const char *name, const char **attrs)
-{
- xml_element *c;
- xml_elem_data* mydata = (xml_elem_data*)userData;
- const char** p = attrs;
-
- if(mydata) {
- c = mydata->current;
-
- mydata->current = xml_elem_new();
- mydata->current->name = (char*)strdup(name);
- mydata->current->parent = c;
-
- /* init attrs */
- while(p && *p) {
- xml_element_attr* attr = malloc(sizeof(xml_element_attr));
- if(attr) {
- attr->key = strdup(*p);
- attr->val = strdup(*(p+1));
- Q_PushTail(&mydata->current->attrs, attr);
-
- p += 2;
- }
- }
- }
-}
-
-/* expat end of element handler */
-static void endElement(void *userData, const char *name)
-{
- xml_elem_data* mydata = (xml_elem_data*)userData;
-
- if(mydata && mydata->current && mydata->current->parent) {
- Q_PushTail(&mydata->current->parent->children, mydata->current);
-
- mydata->current = mydata->current->parent;
- }
-}
-
-/* expat char data handler */
-static void charHandler(void *userData,
- const char *s,
- int len)
-{
- xml_elem_data* mydata = (xml_elem_data*)userData;
- if(mydata && mydata->current) {
-
- /* Check if we need to decode utf-8 parser output to another encoding */
- if(mydata->needs_enc_conversion && mydata->input_options->encoding) {
- int new_len = 0;
- char* add_text = utf8_decode(s, len, &new_len, mydata->input_options->encoding);
- if(add_text) {
- len = new_len;
- simplestring_addn(&mydata->current->text, add_text, len);
- free(add_text);
- return;
- }
- }
- simplestring_addn(&mydata->current->text, s, len);
- }
-}
-/******/
-
-/*-------------------*
-* End Expat Handlers *
-*-------------------*/
-
-/*-------------------*
-* xml_elem_parse_buf *
-*-------------------*/
-
-/****f* xml_element/xml_elem_parse_buf
- * NAME
- * xml_elem_parse_buf
- * SYNOPSIS
- * xml_element* xml_elem_parse_buf(const char* in_buf, int len, XML_ELEM_INPUT_OPTIONS options, XML_ELEM_ERROR error)
- * FUNCTION
- * parse a buffer containing XML into an xml_element in-memory tree
- * INPUTS
- * in_buf - buffer containing XML document
- * len - length of buffer
- * options - input options. optional
- * error - error result data. optional. check if result is null.
- * RESULT
- * void
- * NOTES
- * The returned data must be free'd by caller
- * SEE ALSO
- * xml_elem_serialize_to_string ()
- * xml_elem_free ()
- * SOURCE
- */
-xml_element* xml_elem_parse_buf(const char* in_buf, int len, XML_ELEM_INPUT_OPTIONS options, XML_ELEM_ERROR error)
-{
- xml_element* xReturn = NULL;
- char buf[100] = "";
- static STRUCT_XML_ELEM_INPUT_OPTIONS default_opts = {encoding_utf_8};
-
- if(!options) {
- options = &default_opts;
- }
-
- if(in_buf) {
- XML_Parser parser;
- xml_elem_data mydata = {0};
-
- parser = XML_ParserCreate(NULL);
-
- mydata.root = xml_elem_new();
- mydata.current = mydata.root;
- mydata.input_options = options;
- mydata.needs_enc_conversion = options->encoding && strcmp(options->encoding, encoding_utf_8);
-
- XML_SetElementHandler(parser, startElement, endElement);
- XML_SetCharacterDataHandler(parser, charHandler);
-
- /* pass the xml_elem_data struct along */
- XML_SetUserData(parser, (void*)&mydata);
-
- if(!len) {
- len = strlen(in_buf);
- }
-
- /* parse the XML */
- if(XML_Parse(parser, in_buf, len, 1) == 0) {
- enum XML_Error err_code = XML_GetErrorCode(parser);
- int line_num = XML_GetCurrentLineNumber(parser);
- int col_num = XML_GetCurrentColumnNumber(parser);
- long byte_idx = XML_GetCurrentByteIndex(parser);
- int byte_total = XML_GetCurrentByteCount(parser);
- const char * error_str = XML_ErrorString(err_code);
- if(byte_idx >= 0) {
- snprintf(buf,
- sizeof(buf),
- "\n\tdata beginning %ld before byte index: %s\n",
- 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"
- "\tcolumn: %i\n"
- "\tbyte index: %ld\n"
- "\ttotal bytes: %i\n%s ",
- err_code, error_str, line_num,
- col_num, byte_idx, byte_total, buf);
-
-
- /* error condition */
- if(error) {
- error->parser_code = (long)err_code;
- error->line = line_num;
- error->column = col_num;
- error->byte_index = byte_idx;
- error->parser_error = error_str;
- }
- }
- else {
- xReturn = (xml_element*)Q_Head(&mydata.root->children);
- xReturn->parent = NULL;
- }
-
- XML_ParserFree(parser);
-
-
- xml_elem_free_non_recurse(mydata.root);
- }
-
- return xReturn;
-}
-
-/******/
diff --git a/ext/xmlrpc/libxmlrpc/xml_element.h b/ext/xmlrpc/libxmlrpc/xml_element.h
deleted file mode 100644
index cfe7ca2483..0000000000
--- a/ext/xmlrpc/libxmlrpc/xml_element.h
+++ /dev/null
@@ -1,202 +0,0 @@
-/*
- This file is part of libXMLRPC - a C library for xml-encoded function calls.
-
- Author: Dan Libby (dan@libby.com)
- Epinions.com may be contacted at feedback@epinions-inc.com
-*/
-
-/*
- Copyright 2000 Epinions, Inc.
-
- Subject to the following 3 conditions, Epinions, Inc. permits you, free
- of charge, to (a) use, copy, distribute, modify, perform and display this
- software and associated documentation files (the "Software"), and (b)
- permit others to whom the Software is furnished to do so as well.
-
- 1) The above copyright notice and this permission notice shall be included
- without modification in all copies or substantial portions of the
- Software.
-
- 2) THE SOFTWARE IS PROVIDED "AS IS", WITHOUT ANY WARRANTY OR CONDITION OF
- ANY KIND, EXPRESS, IMPLIED OR STATUTORY, INCLUDING WITHOUT LIMITATION ANY
- IMPLIED WARRANTIES OF ACCURACY, MERCHANTABILITY, FITNESS FOR A PARTICULAR
- PURPOSE OR NONINFRINGEMENT.
-
- 3) IN NO EVENT SHALL EPINIONS, INC. BE LIABLE FOR ANY DIRECT, INDIRECT,
- SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES OR LOST PROFITS ARISING OUT
- OF OR IN CONNECTION WITH THE SOFTWARE (HOWEVER ARISING, INCLUDING
- NEGLIGENCE), EVEN IF EPINIONS, INC. IS AWARE OF THE POSSIBILITY OF SUCH
- DAMAGES.
-
-*/
-
-#ifndef __XML_ELEMENT_H__
- #define __XML_ELEMENT_H__
-
-/* includes */
-#include <stdio.h>
-#include "queue.h"
-#include "simplestring.h"
-#include "encodings.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/****d* enum/XML_ELEM_VERBOSITY
- * NAME
- * XML_ELEM_VERBOSITY
- * NOTES
- * verbosity/readability options for generated xml
- * SEE ALSO
- * XML_ELEM_OUTPUT_OPTIONS
- * SOURCE
- */
-typedef enum _xml_elem_verbosity {
- xml_elem_no_white_space, /* compact xml with no white space */
- xml_elem_newlines_only, /* add newlines for enhanced readability */
- xml_elem_pretty /* add newlines and indent accordint to depth */
-} XML_ELEM_VERBOSITY;
-/******/
-
-
-/****d* enum/XML_ELEM_ESCAPING
- * NAME
- * XML_ELEM_ESCAPING
- * NOTES
- * xml escaping options for generated xml
- * SEE ALSO
- * XML_ELEM_OUTPUT_OPTIONS
- * SOURCE
- */
-typedef enum _xml_elem_escaping {
- xml_elem_no_escaping = 0x000,
- xml_elem_markup_escaping = 0x002, /* entity escape xml special chars */
- xml_elem_non_ascii_escaping = 0x008, /* entity escape chars above 127 */
- xml_elem_non_print_escaping = 0x010, /* entity escape non print (illegal) chars */
- xml_elem_cdata_escaping = 0x020, /* wrap in cdata section */
-} XML_ELEM_ESCAPING;
-/******/
-
-
-/****s* struct/XML_ELEM_OUTPUT_OPTIONS
- * NAME
- * XML_ELEM_OUTPUT_OPTIONS
- * NOTES
- * defines various output options
- * SOURCE
- */
-typedef struct _xml_output_options {
- XML_ELEM_VERBOSITY verbosity; /* length/verbosity of xml */
- XML_ELEM_ESCAPING escaping; /* how to escape special chars */
- const char* encoding; /* <?xml encoding="<encoding>" ?> */
-} STRUCT_XML_ELEM_OUTPUT_OPTIONS, *XML_ELEM_OUTPUT_OPTIONS;
-/******/
-
-/****s* struct/XML_ELEM_INPUT_OPTIONS
- * NAME
- * XML_ELEM_INPUT_OPTIONS
- * NOTES
- * defines various input options
- * SOURCE
- */
-typedef struct _xml_input_options {
- ENCODING_ID encoding; /* which encoding to use. */
-} STRUCT_XML_ELEM_INPUT_OPTIONS, *XML_ELEM_INPUT_OPTIONS;
-/******/
-
-/****s* struct/XML_ELEM_ERROR
- * NAME
- * XML_ELEM_ERROR
- * NOTES
- * defines an xml parser error
- * SOURCE
- */
-typedef struct _xml_elem_error {
- int parser_code;
- const char* parser_error;
- long line;
- long column;
- long byte_index;
-} STRUCT_XML_ELEM_ERROR, *XML_ELEM_ERROR;
-/******/
-
-
-/*-************************
-* begin xml element stuff *
-**************************/
-
-/****s* struct/xml_elem_attr
- * NAME
- * xml_elem_attr
- * NOTES
- * representation of an xml attribute, foo="bar"
- * SOURCE
- */
-typedef struct _xml_element_attr {
- char* key; /* attribute key */
- char* val; /* attribute value */
-} xml_element_attr;
-/******/
-
-/****s* struct/xml_elem_attr
- * NAME
- * xml_elem_attr
- * NOTES
- * representation of an xml element, eg <candidate name="Harry Browne" party="Libertarian"/>
- * SOURCE
- */
-typedef struct _xml_element {
- const char* name; /* element identifier */
- simplestring text; /* text contained between element begin/end pairs */
- struct _xml_element* parent; /* element's parent */
-
- queue attrs; /* attribute list */
- queue children; /* child element list */
-} xml_element;
-/******/
-
-void xml_elem_free(xml_element* root);
-void xml_elem_free_non_recurse(xml_element* root);
-xml_element* xml_elem_new(void);
-char* xml_elem_serialize_to_string(xml_element *el, XML_ELEM_OUTPUT_OPTIONS options, int *buf_len);
-void xml_elem_serialize_to_stream(xml_element *el, FILE *output, XML_ELEM_OUTPUT_OPTIONS options);
-xml_element* xml_elem_parse_buf(const char* in_buf, int len, XML_ELEM_INPUT_OPTIONS options, XML_ELEM_ERROR error);
-
-/*-**********************
-* end xml element stuff *
-************************/
-
-/*-**********************
-* Begin xml_element API *
-************************/
-
-/****d* VALUE/XMLRPC_MACROS
- * NAME
- * Some Helpful Macros
- * NOTES
- * Some macros for making life easier. Should be self-explanatory.
- * SEE ALSO
- * XMLRPC_AddValueToVector ()
- * XMLRPC_VectorGetValueWithID_Case ()
- * XMLRPC_VALUE
- * SOURCE
- */
-#define xml_elem_next_element(el) ((el) ? (xml_element *)Q_Next(&el->children) : NULL)
-#define xml_elem_head_element(el) ((el) ? (xml_element *)Q_Head(&el->children) : NULL)
-#define xml_elem_next_attr(el) ((el) ? (xml_element_attr *)Q_Next(&el->attrs) : NULL)
-#define xml_elem_head_attr(el) ((el) ? (xml_element_attr *)Q_Head(&el->attrs) : NULL)
-#define xml_elem_get_name(el) (char *)((el) ? el->name : NULL)
-#define xml_elem_get_val(el) (char *)((el) ? el->text.str : NULL)
-/******/
-
-
-/*-********************
-* End xml_element API *
-**********************/
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* __XML_ELEMENT_H__ */
diff --git a/ext/xmlrpc/libxmlrpc/xml_to_dandarpc.c b/ext/xmlrpc/libxmlrpc/xml_to_dandarpc.c
deleted file mode 100644
index b51d991723..0000000000
--- a/ext/xmlrpc/libxmlrpc/xml_to_dandarpc.c
+++ /dev/null
@@ -1,319 +0,0 @@
-/*
- This file is part of libXMLRPC - a C library for xml-encoded function calls.
-
- Author: Dan Libby (dan@libby.com)
- Epinions.com may be contacted at feedback@epinions-inc.com
-*/
-
-/*
- Copyright 2000 Epinions, Inc.
-
- Subject to the following 3 conditions, Epinions, Inc. permits you, free
- of charge, to (a) use, copy, distribute, modify, perform and display this
- software and associated documentation files (the "Software"), and (b)
- permit others to whom the Software is furnished to do so as well.
-
- 1) The above copyright notice and this permission notice shall be included
- without modification in all copies or substantial portions of the
- Software.
-
- 2) THE SOFTWARE IS PROVIDED "AS IS", WITHOUT ANY WARRANTY OR CONDITION OF
- ANY KIND, EXPRESS, IMPLIED OR STATUTORY, INCLUDING WITHOUT LIMITATION ANY
- IMPLIED WARRANTIES OF ACCURACY, MERCHANTABILITY, FITNESS FOR A PARTICULAR
- PURPOSE OR NONINFRINGEMENT.
-
- 3) IN NO EVENT SHALL EPINIONS, INC. BE LIABLE FOR ANY DIRECT, INDIRECT,
- SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES OR LOST PROFITS ARISING OUT
- OF OR IN CONNECTION WITH THE SOFTWARE (HOWEVER ARISING, INCLUDING
- NEGLIGENCE), EVEN IF EPINIONS, INC. IS AWARE OF THE POSSIBILITY OF SUCH
- DAMAGES.
-
-*/
-
-#ifdef _WIN32
-#include "xmlrpc_win32.h"
-#endif
-#include <string.h>
-#include <stdlib.h>
-#include "xml_to_dandarpc.h"
-#include "base64.h"
-
-/* list of tokens used in vocab */
-#define ELEM_METHODCALL "methodCall"
-#define ELEM_METHODNAME "methodName"
-#define ELEM_METHODRESPONSE "methodResponse"
-#define ELEM_ROOT "simpleRPC"
-
-#define ATTR_ARRAY "array"
-#define ATTR_BASE64 "base64"
-#define ATTR_BOOLEAN "boolean"
-#define ATTR_DATETIME "dateTime.iso8601"
-#define ATTR_DOUBLE "double"
-#define ATTR_ID "id"
-#define ATTR_INT "int"
-#define ATTR_MIXED "mixed"
-#define ATTR_SCALAR "scalar"
-#define ATTR_STRING "string"
-#define ATTR_STRUCT "struct"
-#define ATTR_TYPE "type"
-#define ATTR_VECTOR "vector"
-#define ATTR_VERSION "version"
-
-#define VAL_VERSION_0_9 "0.9"
-
-
-XMLRPC_VALUE xml_element_to_DANDARPC_REQUEST_worker(XMLRPC_REQUEST request, XMLRPC_VALUE xCurrent, xml_element* el) {
- if(!xCurrent) {
- xCurrent = XMLRPC_CreateValueEmpty();
- }
-
- if(el->name) {
- const char* id = NULL;
- const char* type = NULL;
- xml_element_attr* attr_iter = Q_Head(&el->attrs);
-
- while(attr_iter) {
- if(!strcmp(attr_iter->key, ATTR_ID)) {
- id = attr_iter->val;
- }
- if(!strcmp(attr_iter->key, ATTR_TYPE)) {
- type = attr_iter->val;
- }
- attr_iter = Q_Next(&el->attrs);
- }
-
- if(id) {
- XMLRPC_SetValueID_Case(xCurrent, id, 0, xmlrpc_case_exact);
- }
-
- if(!strcmp(el->name, ATTR_SCALAR)) {
- if(!type || !strcmp(type, ATTR_STRING)) {
- XMLRPC_SetValueString(xCurrent, el->text.str, el->text.len);
- }
- else if(!strcmp(type, ATTR_INT)) {
- XMLRPC_SetValueInt(xCurrent, atoi(el->text.str));
- }
- else if(!strcmp(type, ATTR_BOOLEAN)) {
- XMLRPC_SetValueBoolean(xCurrent, atoi(el->text.str));
- }
- else if(!strcmp(type, ATTR_DOUBLE)) {
- XMLRPC_SetValueDouble(xCurrent, atof(el->text.str));
- }
- else if(!strcmp(type, ATTR_DATETIME)) {
- XMLRPC_SetValueDateTime_ISO8601(xCurrent, el->text.str);
- }
- else if(!strcmp(type, ATTR_BASE64)) {
- struct buffer_st buf;
- base64_decode(&buf, el->text.str, el->text.len);
- XMLRPC_SetValueBase64(xCurrent, buf.data, buf.offset);
- buffer_delete(&buf);
- }
- }
- else if(!strcmp(el->name, ATTR_VECTOR)) {
- xml_element* iter = (xml_element*)Q_Head(&el->children);
-
- if(!type || !strcmp(type, ATTR_MIXED)) {
- XMLRPC_SetIsVector(xCurrent, xmlrpc_vector_mixed);
- }
- else if(!strcmp(type, ATTR_ARRAY)) {
- XMLRPC_SetIsVector(xCurrent, xmlrpc_vector_array);
- }
- else if(!strcmp(type, ATTR_STRUCT)) {
- XMLRPC_SetIsVector(xCurrent, xmlrpc_vector_struct);
- }
- while( iter ) {
- XMLRPC_VALUE xNext = XMLRPC_CreateValueEmpty();
- xml_element_to_DANDARPC_REQUEST_worker(request, xNext, iter);
- XMLRPC_AddValueToVector(xCurrent, xNext);
- iter = (xml_element*)Q_Next(&el->children);
- }
- }
- else {
- xml_element* iter = (xml_element*)Q_Head(&el->children);
- while( iter ) {
- xml_element_to_DANDARPC_REQUEST_worker(request, xCurrent, iter);
- iter = (xml_element*)Q_Next(&el->children);
- }
-
- if(!strcmp(el->name, ELEM_METHODCALL)) {
- if(request) {
- XMLRPC_RequestSetRequestType(request, xmlrpc_request_call);
- }
- }
- else if(!strcmp(el->name, ELEM_METHODRESPONSE)) {
- if(request) {
- XMLRPC_RequestSetRequestType(request, xmlrpc_request_response);
- }
- }
- else if(!strcmp(el->name, ELEM_METHODNAME)) {
- if(request) {
- XMLRPC_RequestSetMethodName(request, el->text.str);
- }
- }
- }
- }
- return xCurrent;
-}
-
-XMLRPC_VALUE xml_element_to_DANDARPC_VALUE(xml_element* el)
-{
- return xml_element_to_DANDARPC_REQUEST_worker(NULL, NULL, el);
-}
-
-XMLRPC_VALUE xml_element_to_DANDARPC_REQUEST(XMLRPC_REQUEST request, xml_element* el)
-{
- if(request) {
- return XMLRPC_RequestSetData(request, xml_element_to_DANDARPC_REQUEST_worker(request, NULL, el));
- }
- return NULL;
-}
-
-xml_element* DANDARPC_to_xml_element_worker(XMLRPC_REQUEST request, XMLRPC_VALUE node) {
-#define BUF_SIZE 512
- xml_element* root = NULL;
- if(node) {
- char buf[BUF_SIZE];
- const char* id = XMLRPC_GetValueID(node);
- XMLRPC_VALUE_TYPE type = XMLRPC_GetValueType(node);
- XMLRPC_REQUEST_OUTPUT_OPTIONS output = XMLRPC_RequestGetOutputOptions(request);
- int bNoAddType = (type == xmlrpc_string && request && output && output->xml_elem_opts.verbosity == xml_elem_no_white_space);
- xml_element* elem_val = xml_elem_new();
- const char* pAttrType = NULL;
-
- xml_element_attr* attr_type = bNoAddType ? NULL : malloc(sizeof(xml_element_attr));
-
- if(attr_type) {
- attr_type->key = strdup(ATTR_TYPE);
- attr_type->val = 0;
- Q_PushTail(&elem_val->attrs, attr_type);
- }
-
- elem_val->name = (type == xmlrpc_vector) ? strdup(ATTR_VECTOR) : strdup(ATTR_SCALAR);
-
- if(id && *id) {
- xml_element_attr* attr_id = malloc(sizeof(xml_element_attr));
- if(attr_id) {
- attr_id->key = strdup(ATTR_ID);
- attr_id->val = strdup(id);
- Q_PushTail(&elem_val->attrs, attr_id);
- }
- }
-
- switch(type) {
- case xmlrpc_string:
- pAttrType = ATTR_STRING;
- simplestring_addn(&elem_val->text, XMLRPC_GetValueString(node), XMLRPC_GetValueStringLen(node));
- break;
- case xmlrpc_int:
- pAttrType = ATTR_INT;
- snprintf(buf, BUF_SIZE, "%i", XMLRPC_GetValueInt(node));
- simplestring_add(&elem_val->text, buf);
- break;
- case xmlrpc_boolean:
- pAttrType = ATTR_BOOLEAN;
- snprintf(buf, BUF_SIZE, "%i", XMLRPC_GetValueBoolean(node));
- simplestring_add(&elem_val->text, buf);
- break;
- case xmlrpc_double:
- pAttrType = ATTR_DOUBLE;
- snprintf(buf, BUF_SIZE, "%f", XMLRPC_GetValueDouble(node));
- simplestring_add(&elem_val->text, buf);
- break;
- case xmlrpc_datetime:
- pAttrType = ATTR_DATETIME;
- simplestring_add(&elem_val->text, XMLRPC_GetValueDateTime_ISO8601(node));
- break;
- case xmlrpc_base64:
- {
- struct buffer_st buf;
- pAttrType = ATTR_BASE64;
- base64_encode(&buf, XMLRPC_GetValueBase64(node), XMLRPC_GetValueStringLen(node));
- simplestring_addn(&elem_val->text, buf.data, buf.offset );
- buffer_delete(&buf);
- }
- break;
- case xmlrpc_vector:
- {
- XMLRPC_VECTOR_TYPE my_type = XMLRPC_GetVectorType(node);
- XMLRPC_VALUE xIter = XMLRPC_VectorRewind(node);
-
- switch(my_type) {
- case xmlrpc_vector_array:
- pAttrType = ATTR_ARRAY;
- break;
- case xmlrpc_vector_mixed:
- pAttrType = ATTR_MIXED;
- break;
- case xmlrpc_vector_struct:
- pAttrType = ATTR_STRUCT;
- break;
- default:
- break;
- }
-
- /* recurse through sub-elements */
- while( xIter ) {
- xml_element* next_el = DANDARPC_to_xml_element_worker(request, xIter);
- if(next_el) {
- Q_PushTail(&elem_val->children, next_el);
- }
- xIter = XMLRPC_VectorNext(node);
- }
- }
- break;
- default:
- break;
- }
- if(pAttrType && attr_type && !bNoAddType) {
- attr_type->val = strdup(pAttrType);
- }
- root = elem_val;
- }
- return root;
-}
-
-xml_element* DANDARPC_VALUE_to_xml_element(XMLRPC_VALUE node) {
- return DANDARPC_to_xml_element_worker(NULL, node);
-}
-
-xml_element* DANDARPC_REQUEST_to_xml_element(XMLRPC_REQUEST request) {
- xml_element* wrapper = NULL;
- xml_element* root = NULL;
- if(request) {
- XMLRPC_REQUEST_TYPE request_type = XMLRPC_RequestGetRequestType(request);
- const char* pStr = NULL;
- xml_element_attr* version = malloc(sizeof(xml_element_attr));
- version->key = strdup(ATTR_VERSION);
- version->val = strdup(VAL_VERSION_0_9);
-
- wrapper = xml_elem_new();
-
- if(request_type == xmlrpc_request_response) {
- pStr = ELEM_METHODRESPONSE;
- }
- else if(request_type == xmlrpc_request_call) {
- pStr = ELEM_METHODCALL;
- }
- if(pStr) {
- wrapper->name = strdup(pStr);
- }
-
- root = xml_elem_new();
- root->name = strdup(ELEM_ROOT);
- Q_PushTail(&root->attrs, version);
- Q_PushTail(&root->children, wrapper);
-
- pStr = XMLRPC_RequestGetMethodName(request);
-
- if(pStr) {
- xml_element* method = xml_elem_new();
- method->name = strdup(ELEM_METHODNAME);
- simplestring_add(&method->text, pStr);
- Q_PushTail(&wrapper->children, method);
- }
- Q_PushTail(&wrapper->children,
- DANDARPC_to_xml_element_worker(request, XMLRPC_RequestGetData(request)));
- }
- return root;
-}
-
diff --git a/ext/xmlrpc/libxmlrpc/xml_to_dandarpc.h b/ext/xmlrpc/libxmlrpc/xml_to_dandarpc.h
deleted file mode 100644
index 6facb55778..0000000000
--- a/ext/xmlrpc/libxmlrpc/xml_to_dandarpc.h
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- This file is part of libXMLRPC - a C library for xml-encoded function calls.
-
- Author: Dan Libby (dan@libby.com)
- Epinions.com may be contacted at feedback@epinions-inc.com
-*/
-
-/*
- Copyright 2000 Epinions, Inc.
-
- Subject to the following 3 conditions, Epinions, Inc. permits you, free
- of charge, to (a) use, copy, distribute, modify, perform and display this
- software and associated documentation files (the "Software"), and (b)
- permit others to whom the Software is furnished to do so as well.
-
- 1) The above copyright notice and this permission notice shall be included
- without modification in all copies or substantial portions of the
- Software.
-
- 2) THE SOFTWARE IS PROVIDED "AS IS", WITHOUT ANY WARRANTY OR CONDITION OF
- ANY KIND, EXPRESS, IMPLIED OR STATUTORY, INCLUDING WITHOUT LIMITATION ANY
- IMPLIED WARRANTIES OF ACCURACY, MERCHANTABILITY, FITNESS FOR A PARTICULAR
- PURPOSE OR NONINFRINGEMENT.
-
- 3) IN NO EVENT SHALL EPINIONS, INC. BE LIABLE FOR ANY DIRECT, INDIRECT,
- SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES OR LOST PROFITS ARISING OUT
- OF OR IN CONNECTION WITH THE SOFTWARE (HOWEVER ARISING, INCLUDING
- NEGLIGENCE), EVEN IF EPINIONS, INC. IS AWARE OF THE POSSIBILITY OF SUCH
- DAMAGES.
-
-*/
-
-#ifndef XML_TO_DANDARPC_H
- #define XML_TO_DANDARPC_H
-
-#include "time.h"
-#include "xmlrpc.h"
-
-XMLRPC_VALUE xml_element_to_DANDARPC_VALUE(xml_element* el);
-XMLRPC_VALUE xml_element_to_DANDARPC_REQUEST(XMLRPC_REQUEST request, xml_element* el);
-xml_element* DANDARPC_VALUE_to_xml_element(XMLRPC_VALUE node);
-xml_element* DANDARPC_REQUEST_to_xml_element(XMLRPC_REQUEST request);
-
-#endif /* XML_TO_DANDARPC_H */
diff --git a/ext/xmlrpc/libxmlrpc/xml_to_soap.c b/ext/xmlrpc/libxmlrpc/xml_to_soap.c
deleted file mode 100644
index 8390f06e8e..0000000000
--- a/ext/xmlrpc/libxmlrpc/xml_to_soap.c
+++ /dev/null
@@ -1,670 +0,0 @@
-/*
- This file is part of libXMLRPC - a C library for xml-encoded function calls.
-
- Author: Dan Libby (dan@libby.com)
-*/
-
-
-/*-**********************************************************************
-* TODO: *
-* - [SOAP-ENC:position] read sparse arrays (and write?) *
-* - [SOAP-ENC:offset] read partially transmitted arrays (and write?) *
-* - read "flattened" multi-dimensional arrays. (don't bother writing) *
-* *
-* BUGS: *
-* - does not read schema. thus only knows soap pre-defined types. *
-* - references (probably) do not work. untested. *
-* - does not expose SOAP-ENV:Header to application at all. *
-* - does not use namespaces correctly, thus: *
-* - namespaces are hard-coded in comparison tokens *
-* - if a sender uses another namespace identifer, it will break *
-************************************************************************/
-
-
-static const char rcsid[] = "#(@) $Id:";
-
-#ifdef _WIN32
-#include "xmlrpc_win32.h"
-#endif
-#include <string.h>
-#include <stdlib.h>
-#include "xml_to_soap.h"
-#include "base64.h"
-
-/* list of tokens used in vocab */
-#define TOKEN_ANY "xsd:ur-type"
-#define TOKEN_ARRAY "SOAP-ENC:Array"
-#define TOKEN_ARRAY_TYPE "SOAP-ENC:arrayType"
-#define TOKEN_BASE64 "SOAP-ENC:base64"
-#define TOKEN_BOOLEAN "xsd:boolean"
-#define TOKEN_DATETIME "xsd:timeInstant"
-#define TOKEN_DOUBLE "xsd:double"
-#define TOKEN_FLOAT "xsd:float"
-#define TOKEN_ID "id"
-#define TOKEN_INT "xsd:int"
-#define TOKEN_NULL "xsi:null"
-#define TOKEN_STRING "xsd:string"
-#define TOKEN_STRUCT "xsd:struct"
-#define TOKEN_TYPE "xsi:type"
-#define TOKEN_FAULT "SOAP-ENV:Fault"
-#define TOKEN_MUSTUNDERSTAND "SOAP-ENV:mustUnderstand"
-#define TOKEN_ACTOR "SOAP-ENV:actor"
-#define TOKEN_ACTOR_NEXT "http://schemas.xmlsoap.org/soap/actor/next"
-
-#define TOKEN_XMLRPC_FAULTCODE "faultCode"
-#define TOKEN_XMLRPC_FAULTSTRING "faultString"
-#define TOKEN_SOAP_FAULTCODE "faultcode"
-#define TOKEN_SOAP_FAULTSTRING "faultstring"
-#define TOKEN_SOAP_FAULTDETAILS "details"
-#define TOKEN_SOAP_FAULTACTOR "actor"
-
-
-/* determine if a string represents a soap type, as used in element names */
-static inline int is_soap_type(const char* soap_type) {
- return(strstr(soap_type, "SOAP-ENC:") || strstr(soap_type, "xsd:")) ? 1 : 0;
-}
-
-/* utility func to generate a new attribute. possibly should be in xml_element.c?? */
-static xml_element_attr* new_attr(const char* key, const char* val) {
- xml_element_attr* attr = malloc(sizeof(xml_element_attr));
- if (attr) {
- attr->key = key ? strdup(key) : NULL;
- attr->val = val ? strdup(val) : NULL;
- }
- return attr;
-}
-
-struct array_info {
- char kids_type[30];
- unsigned long size;
- /* ... ? */
-};
-
-
-/* parses soap arrayType attribute to generate an array_info structure.
- * TODO: should deal with sparse, flattened, & multi-dimensional arrays
- */
-static struct array_info* parse_array_type_info(const char* array_type) {
- struct array_info* ai = NULL;
- if (array_type) {
- ai = (struct array_info*)calloc(1, sizeof(struct array_info));
- if (ai) {
- char buf[128], *p;
- snprintf(buf, sizeof(buf), "%s", array_type);
- p = strchr(buf, '[');
- if (p) {
- *p = 0;
- }
- strcpy(ai->kids_type, buf);
- }
- }
- return ai;
-}
-
-/* performs heuristics on an xmlrpc_vector_array to determine
- * appropriate soap arrayType string.
- */
-static const char* get_array_soap_type(XMLRPC_VALUE node) {
- XMLRPC_VALUE_TYPE_EASY type = xmlrpc_type_none;
-
- XMLRPC_VALUE xIter = XMLRPC_VectorRewind(node);
- int loopCount = 0;
- const char* soapType = TOKEN_ANY;
-
- type = XMLRPC_GetValueTypeEasy(xIter);
- xIter = XMLRPC_VectorNext(node);
-
- while (xIter) {
- /* 50 seems like a decent # of loops. That will likely
- * cover most cases. Any more and we start to sacrifice
- * performance.
- */
- if ( (XMLRPC_GetValueTypeEasy(xIter) != type) || loopCount >= 50) {
- type = xmlrpc_type_none;
- break;
- }
- loopCount ++;
-
- xIter = XMLRPC_VectorNext(node);
- }
- switch (type) {
- case xmlrpc_type_none:
- soapType = TOKEN_ANY;
- break;
- case xmlrpc_type_empty:
- soapType = TOKEN_NULL;
- break;
- case xmlrpc_type_int:
- soapType = TOKEN_INT;
- break;
- case xmlrpc_type_double:
- soapType = TOKEN_DOUBLE;
- break;
- case xmlrpc_type_boolean:
- soapType = TOKEN_BOOLEAN;
- break;
- case xmlrpc_type_string:
- soapType = TOKEN_STRING;
- break;
- case xmlrpc_type_base64:
- soapType = TOKEN_BASE64;
- break;
- case xmlrpc_type_datetime:
- soapType = TOKEN_DATETIME;
- break;
- case xmlrpc_type_struct:
- soapType = TOKEN_STRUCT;
- break;
- case xmlrpc_type_array:
- soapType = TOKEN_ARRAY;
- break;
- case xmlrpc_type_mixed:
- soapType = TOKEN_STRUCT;
- break;
- }
- return soapType;
-}
-
-/* determines wether a node is a fault or not, and of which type:
- * 0 = not a fault,
- * 1 = xmlrpc style fault
- * 2 = soap style fault.
- */
-static inline int get_fault_type(XMLRPC_VALUE node) {
- if (XMLRPC_VectorGetValueWithID(node, TOKEN_XMLRPC_FAULTCODE) &&
- XMLRPC_VectorGetValueWithID(node, TOKEN_XMLRPC_FAULTSTRING)) {
- return 1;
- }
- else if (XMLRPC_VectorGetValueWithID(node, TOKEN_SOAP_FAULTCODE) &&
- XMLRPC_VectorGetValueWithID(node, TOKEN_SOAP_FAULTSTRING)) {
- return 2;
- }
- return 0;
-}
-
-/* input: an XMLRPC_VALUE representing a fault struct in xml-rpc style.
- * output: an XMLRPC_VALUE representing a fault struct in soap style,
- * with xmlrpc codes mapped to soap codes, and all other values preserved.
- * note that the returned value is a completely new value, and must be freed.
- * the input value is untouched.
- */
-static XMLRPC_VALUE gen_fault_xmlrpc(XMLRPC_VALUE node, xml_element* el_target) {
- XMLRPC_VALUE xDup = XMLRPC_DupValueNew(node);
- XMLRPC_VALUE xCode = XMLRPC_VectorGetValueWithID(xDup, TOKEN_XMLRPC_FAULTCODE);
- XMLRPC_VALUE xStr = XMLRPC_VectorGetValueWithID(xDup, TOKEN_XMLRPC_FAULTSTRING);
-
- XMLRPC_SetValueID(xCode, TOKEN_SOAP_FAULTCODE, 0);
- XMLRPC_SetValueID(xStr, TOKEN_SOAP_FAULTSTRING, 0);
-
- /* rough mapping of xmlrpc fault codes to soap codes */
- switch (XMLRPC_GetValueInt(xCode)) {
- case -32700: /* "parse error. not well formed", */
- case -32701: /* "parse error. unsupported encoding" */
- case -32702: /* "parse error. invalid character for encoding" */
- case -32600: /* "server error. invalid xml-rpc. not conforming to spec." */
- case -32601: /* "server error. requested method not found" */
- case -32602: /* "server error. invalid method parameters" */
- XMLRPC_SetValueString(xCode, "SOAP-ENV:Client", 0);
- break;
- case -32603: /* "server error. internal xml-rpc error" */
- case -32500: /* "application error" */
- case -32400: /* "system error" */
- case -32300: /* "transport error */
- XMLRPC_SetValueString(xCode, "SOAP-ENV:Server", 0);
- break;
- }
- return xDup;
-}
-
-/* returns a new XMLRPC_VALUE representing a soap fault, comprised of a struct with four keys. */
-static XMLRPC_VALUE gen_soap_fault(const char* fault_code, const char* fault_string,
- const char* actor, const char* details) {
- XMLRPC_VALUE xReturn = XMLRPC_CreateVector(TOKEN_FAULT, xmlrpc_vector_struct);
- XMLRPC_AddValuesToVector(xReturn,
- XMLRPC_CreateValueString(TOKEN_SOAP_FAULTCODE, fault_code, 0),
- XMLRPC_CreateValueString(TOKEN_SOAP_FAULTSTRING, fault_string, 0),
- XMLRPC_CreateValueString(TOKEN_SOAP_FAULTACTOR, actor, 0),
- XMLRPC_CreateValueString(TOKEN_SOAP_FAULTDETAILS, details, 0),
- NULL);
- return xReturn;
-}
-
-/* translates xml soap dom to native data structures. recursive. */
-XMLRPC_VALUE xml_element_to_SOAP_REQUEST_worker(XMLRPC_REQUEST request,
- XMLRPC_VALUE xParent,
- struct array_info* parent_array,
- XMLRPC_VALUE xCurrent,
- xml_element* el,
- int depth) {
- XMLRPC_REQUEST_TYPE rtype = xmlrpc_request_none;
-
- /* no current element on first call */
- if (!xCurrent) {
- xCurrent = XMLRPC_CreateValueEmpty();
- }
-
- /* increment recursion depth guage */
- depth ++;
-
- /* safety first. must have a valid element */
- if (el && el->name) {
- const char* id = NULL;
- const char* type = NULL, *arrayType=NULL, *actor = NULL;
- xml_element_attr* attr_iter = Q_Head(&el->attrs);
- int b_must_understand = 0;
-
- /* in soap, types may be specified in either element name -or- with xsi:type attribute. */
- if (is_soap_type(el->name)) {
- type = el->name;
- }
- /* if our parent node, by definition a vector, is not an array, then
- our element name must be our key identifier. */
- else if (XMLRPC_GetVectorType(xParent) != xmlrpc_vector_array) {
- id = el->name;
- if(!strcmp(id, "item")) {
- }
- }
-
- /* iterate through element attributes, pick out useful stuff. */
- while (attr_iter) {
- /* element's type */
- if (!strcmp(attr_iter->key, TOKEN_TYPE)) {
- type = attr_iter->val;
- }
- /* array type */
- else if (!strcmp(attr_iter->key, TOKEN_ARRAY_TYPE)) {
- arrayType = attr_iter->val;
- }
- /* must understand, sometimes present in headers. */
- else if (!strcmp(attr_iter->key, TOKEN_MUSTUNDERSTAND)) {
- b_must_understand = strchr(attr_iter->val, '1') ? 1 : 0;
- }
- /* actor, used in conjuction with must understand. */
- else if (!strcmp(attr_iter->key, TOKEN_ACTOR)) {
- actor = attr_iter->val;
- }
- attr_iter = Q_Next(&el->attrs);
- }
-
- /* check if caller says we must understand something in a header. */
- if (b_must_understand) {
- /* is must understand actually indended for us?
- BUG: spec says we should also determine if actor is our URL, but
- we do not have that information. */
- if (!actor || !strcmp(actor, TOKEN_ACTOR_NEXT)) {
- /* TODO: implement callbacks or other mechanism for applications
- to "understand" these headers. For now, we just bail if we
- get a mustUnderstand header intended for us. */
- XMLRPC_RequestSetError(request,
- gen_soap_fault("SOAP-ENV:MustUnderstand",
- "SOAP Must Understand Error",
- "", ""));
- return xCurrent;
- }
- }
-
- /* set id (key) if one was found. */
- if (id) {
- XMLRPC_SetValueID_Case(xCurrent, id, 0, xmlrpc_case_exact);
- }
-
- /* according to soap spec,
- depth 1 = Envelope, 2 = Header, Body & Fault, 3 = methodcall or response. */
- if (depth == 3) {
- const char* methodname = el->name;
- char* p = NULL;
-
- /* BUG: we determine request or response type using presence of "Response" in element name.
- According to spec, this is only recommended, not required. Apparently, implementations
- are supposed to know the type of action based on state, which strikes me as a bit lame.
- Anyway, we don't have that state info, thus we use Response as a heuristic. */
- rtype =
-#ifdef strcasestr
- strcasestr(el->name, "response") ? xmlrpc_request_response : xmlrpc_request_call;
-#else
- strstr(el->name, "esponse") ? xmlrpc_request_response : xmlrpc_request_call;
-#endif
- XMLRPC_RequestSetRequestType(request, rtype);
-
- /* Get methodname. strip xml namespace crap. */
- p = strchr(el->name, ':');
- if (p) {
- methodname = p + 1;
- }
- if (rtype == xmlrpc_request_call) {
- XMLRPC_RequestSetMethodName(request, methodname);
- }
- }
-
-
- /* Next, we begin to convert actual values. if no children, then must be a scalar value. */
- if (!Q_Size(&el->children)) {
- if (!type && parent_array && parent_array->kids_type[0]) {
- type = parent_array->kids_type;
- }
- if (!type || !strcmp(type, TOKEN_STRING)) {
- XMLRPC_SetValueString(xCurrent, el->text.str, el->text.len);
- }
- else if (!strcmp(type, TOKEN_INT)) {
- XMLRPC_SetValueInt(xCurrent, atoi(el->text.str));
- }
- else if (!strcmp(type, TOKEN_BOOLEAN)) {
- XMLRPC_SetValueBoolean(xCurrent, atoi(el->text.str));
- }
- else if (!strcmp(type, TOKEN_DOUBLE) ||
- !strcmp(type, TOKEN_FLOAT)) {
- XMLRPC_SetValueDouble(xCurrent, atof(el->text.str));
- }
- else if (!strcmp(type, TOKEN_NULL)) {
- /* already an empty val. do nothing. */
- }
- else if (!strcmp(type, TOKEN_DATETIME)) {
- XMLRPC_SetValueDateTime_ISO8601(xCurrent, el->text.str);
- }
- else if (!strcmp(type, TOKEN_BASE64)) {
- struct buffer_st buf;
- base64_decode(&buf, el->text.str, el->text.len);
- XMLRPC_SetValueBase64(xCurrent, buf.data, buf.offset);
- buffer_delete(&buf);
- }
- }
- /* Element has children, thus a vector, or "compound type" in soap-speak. */
- else {
- struct array_info* ai = NULL;
- xml_element* iter = (xml_element*)Q_Head(&el->children);
-
- if (!type || !strcmp(type, TOKEN_STRUCT)) {
- XMLRPC_SetIsVector(xCurrent, xmlrpc_vector_struct);
- }
- else if (!strcmp(type, TOKEN_ARRAY) || arrayType != NULL) {
- /* determine magic associated with soap array type.
- this is passed down as we recurse, so our children have access to the info. */
- ai = parse_array_type_info(arrayType); // alloc'ed ai free'd below.
- XMLRPC_SetIsVector(xCurrent, xmlrpc_vector_array);
- }
- else {
- /* mixed is probably closest thing we have to compound type. */
- XMLRPC_SetIsVector(xCurrent, xmlrpc_vector_mixed);
- }
- /* Recurse, adding values as we go. Check for error during recursion
- and if found, bail. this short-circuits us out of the recursion. */
- while ( iter && !XMLRPC_RequestGetError(request) ) {
- XMLRPC_VALUE xNext = NULL;
- /* top level elements don't actually represent values, so we just pass the
- current value along until we are deep enough. */
- if ( depth <= 2 ||
- (rtype == xmlrpc_request_response && depth <= 3) ) {
- xml_element_to_SOAP_REQUEST_worker(request, NULL, ai, xCurrent, iter, depth);
- }
- /* ready to do some actual de-serialization. create a new empty value and
- pass that along to be init'd, then add it to our current vector. */
- else {
- xNext = XMLRPC_CreateValueEmpty();
- xml_element_to_SOAP_REQUEST_worker(request, xCurrent, ai, xNext, iter, depth);
- XMLRPC_AddValueToVector(xCurrent, xNext);
- }
- iter = (xml_element*)Q_Next(&el->children);
- }
- /* cleanup */
- if (ai) {
- free(ai);
- }
- }
- }
- return xCurrent;
-}
-
-/* Convert soap xml dom to XMLRPC_VALUE, sans request info. untested. */
-XMLRPC_VALUE xml_element_to_SOAP_VALUE(xml_element* el)
-{
- return xml_element_to_SOAP_REQUEST_worker(NULL, NULL, NULL, NULL, el, 0);
-}
-
-/* Convert soap xml dom to XMLRPC_REQUEST */
-XMLRPC_VALUE xml_element_to_SOAP_REQUEST(XMLRPC_REQUEST request, xml_element* el)
-{
- if (request) {
- return XMLRPC_RequestSetData(request, xml_element_to_SOAP_REQUEST_worker(request, NULL, NULL, NULL, el, 0));
- }
- return NULL;
-}
-
-
-/* translates data structures to soap/xml. recursive */
-xml_element* SOAP_to_xml_element_worker(XMLRPC_REQUEST request, XMLRPC_VALUE node) {
-#define BUF_SIZE 128
- xml_element* elem_val = NULL;
- if (node) {
- int bFreeNode = 0; /* sometimes we may need to free 'node' variable */
- char buf[BUF_SIZE];
- XMLRPC_VALUE_TYPE_EASY type = XMLRPC_GetValueTypeEasy(node);
- char* pName = NULL, *pAttrType = NULL;
-
- /* create our return value element */
- elem_val = xml_elem_new();
-
- switch (type) {
- case xmlrpc_type_struct:
- case xmlrpc_type_mixed:
- case xmlrpc_type_array:
- if (type == xmlrpc_type_array) {
- /* array's are _very_ special in soap.
- TODO: Should handle sparse/partial arrays here. */
-
- /* determine soap array type. */
- const char* type = get_array_soap_type(node);
- xml_element_attr* attr_array_type = NULL;
-
- /* specify array kids type and array size. */
- snprintf(buf, sizeof(buf), "%s[%i]", type, XMLRPC_VectorSize(node));
- attr_array_type = new_attr(TOKEN_ARRAY_TYPE, buf);
-
- Q_PushTail(&elem_val->attrs, attr_array_type);
-
- pAttrType = TOKEN_ARRAY;
- }
- /* check for fault, which is a rather special case.
- (can't these people design anything consistent/simple/elegant?) */
- else if (type == xmlrpc_type_struct) {
- int fault_type = get_fault_type(node);
- if (fault_type) {
- if (fault_type == 1) {
- /* gen fault from xmlrpc style fault codes
- notice that we get a new node, which must be freed herein. */
- node = gen_fault_xmlrpc(node, elem_val);
- bFreeNode = 1;
- }
- pName = TOKEN_FAULT;
- }
- }
-
- {
- /* recurse through sub-elements */
- XMLRPC_VALUE xIter = XMLRPC_VectorRewind(node);
- while ( xIter ) {
- xml_element* next_el = SOAP_to_xml_element_worker(request, xIter);
- if (next_el) {
- Q_PushTail(&elem_val->children, next_el);
- }
- xIter = XMLRPC_VectorNext(node);
- }
- }
-
- break;
-
- /* handle scalar types */
- case xmlrpc_type_empty:
- pAttrType = TOKEN_NULL;
- break;
- case xmlrpc_type_string:
- pAttrType = TOKEN_STRING;
- simplestring_addn(&elem_val->text, XMLRPC_GetValueString(node), XMLRPC_GetValueStringLen(node));
- break;
- case xmlrpc_type_int:
- pAttrType = TOKEN_INT;
- snprintf(buf, BUF_SIZE, "%i", XMLRPC_GetValueInt(node));
- simplestring_add(&elem_val->text, buf);
- break;
- case xmlrpc_type_boolean:
- pAttrType = TOKEN_BOOLEAN;
- snprintf(buf, BUF_SIZE, "%i", XMLRPC_GetValueBoolean(node));
- simplestring_add(&elem_val->text, buf);
- break;
- case xmlrpc_type_double:
- pAttrType = TOKEN_DOUBLE;
- snprintf(buf, BUF_SIZE, "%f", XMLRPC_GetValueDouble(node));
- simplestring_add(&elem_val->text, buf);
- break;
- case xmlrpc_type_datetime:
- {
- time_t tt = XMLRPC_GetValueDateTime(node);
- struct tm *tm = localtime (&tt);
- pAttrType = TOKEN_DATETIME;
- if(strftime (buf, BUF_SIZE, "%Y-%m-%dT%H:%M:%SZ", tm)) {
- simplestring_add(&elem_val->text, buf);
- }
- }
- break;
- case xmlrpc_type_base64:
- {
- struct buffer_st buf;
- pAttrType = TOKEN_BASE64;
- base64_encode(&buf, XMLRPC_GetValueBase64(node), XMLRPC_GetValueStringLen(node));
- simplestring_addn(&elem_val->text, buf.data, buf.offset );
- buffer_delete(&buf);
- }
- break;
- break;
- default:
- break;
- }
-
- /* determining element's name is a bit tricky, due to soap semantics. */
- if (!pName) {
- /* if the value's type is known... */
- if (pAttrType) {
- /* see if it has an id (key). If so, use that as name, and type as an attribute. */
- pName = (char*)XMLRPC_GetValueID(node);
- if (pName) {
- Q_PushTail(&elem_val->attrs, new_attr(TOKEN_TYPE, pAttrType));
- }
-
- /* otherwise, use the type as the name. */
- else {
- pName = pAttrType;
- }
- }
- /* if the value's type is not known... (a rare case?) */
- else {
- /* see if it has an id (key). otherwise, default to generic "item" */
- pName = (char*)XMLRPC_GetValueID(node);
- if (!pName) {
- pName = "item";
- }
- }
- }
- elem_val->name = strdup(pName);
-
- /* cleanup */
- if (bFreeNode) {
- XMLRPC_CleanupValue(node);
- }
- }
- return elem_val;
-}
-
-/* convert XMLRPC_VALUE to soap xml dom. untested. */
-xml_element* SOAP_VALUE_to_xml_element(XMLRPC_VALUE node) {
- return SOAP_to_xml_element_worker(NULL, node);
-}
-
-/* convert XMLRPC_REQUEST to soap xml dom. */
-xml_element* SOAP_REQUEST_to_xml_element(XMLRPC_REQUEST request) {
- xml_element* root = xml_elem_new();
-
- /* safety first. */
- if (root) {
- xml_element* body = xml_elem_new();
- root->name = strdup("SOAP-ENV:Envelope");
-
- /* silly namespace stuff */
- Q_PushTail(&root->attrs, new_attr("xmlns:SOAP-ENV", "http://schemas.xmlsoap.org/soap/envelope/"));
- Q_PushTail(&root->attrs, new_attr("xmlns:xsi", "http://www.w3.org/1999/XMLSchema-instance"));
- Q_PushTail(&root->attrs, new_attr("xmlns:xsd", "http://www.w3.org/1999/XMLSchema"));
- Q_PushTail(&root->attrs, new_attr("xmlns:SOAP-ENC", "http://schemas.xmlsoap.org/soap/encoding/"));
- Q_PushTail(&root->attrs, new_attr("xmlns:si", "http://soapinterop.org/xsd"));
- Q_PushTail(&root->attrs, new_attr("xmlns:ns6", "http://testuri.org"));
- Q_PushTail(&root->attrs, new_attr("SOAP-ENV:encodingStyle", "http://schemas.xmlsoap.org/soap/encoding/"));
-
- /* Q_PushHead(&root->attrs, new_attr("xmlns:ks", "http://kitchen.sink.org/soap/everything/under/sun"));
- JUST KIDDING!! :-) ----> ------------------------------------------------- */
-
- if (body) {
- /* go ahead and serialize first... */
- xml_element* el_serialized =
- SOAP_to_xml_element_worker(request,
- XMLRPC_RequestGetData(request));
-
- /* check for fault, in which case, there is no intermediate element */
- if (el_serialized && !strcmp(el_serialized->name, TOKEN_FAULT)) {
- Q_PushTail(&body->children, el_serialized);
- }
- /* usual case: not a fault. Add Response element in between. */
- else {
- xml_element* rpc = xml_elem_new();
-
- if (rpc) {
- const char* methodname = XMLRPC_RequestGetMethodName(request);
- XMLRPC_REQUEST_TYPE rtype = XMLRPC_RequestGetRequestType(request);
-
- /* if we are making a request, we want to use the methodname as is. */
- if (rtype == xmlrpc_request_call) {
- if (methodname) {
- rpc->name = strdup(methodname);
- }
- }
- /* if it's a response, we append "Response". Also, given xmlrpc-epi
- API/architecture, it's likely that we don't have a methodname for
- the response, so we have to check that. */
- else {
- char buf[128];
- snprintf(buf, sizeof(buf), "%s%s",
- methodname ? methodname : "",
- "Response");
-
- rpc->name = strdup(buf);
- }
-
- /* add serialized data to method call/response.
- add method call/response to body element */
- if (rpc->name) {
- if(el_serialized) {
- if(Q_Size(&el_serialized->children) && rtype == xmlrpc_request_call) {
- xml_element* iter = (xml_element*)Q_Head(&el_serialized->children);
- while(iter) {
- Q_PushTail(&rpc->children, iter);
- iter = (xml_element*)Q_Next(&el_serialized->children);
- }
- xml_elem_free_non_recurse(el_serialized);
- }
- else {
- Q_PushTail(&rpc->children, el_serialized);
- }
- }
-
- Q_PushTail(&body->children, rpc);
- }
- else {
- /* no method name?!
- TODO: fault here...? */
- }
- }
- }
- body->name = strdup("SOAP-ENV:Body");
- Q_PushTail(&root->children, body);
- }
- }
-
- return root;
-}
-
diff --git a/ext/xmlrpc/libxmlrpc/xml_to_soap.h b/ext/xmlrpc/libxmlrpc/xml_to_soap.h
deleted file mode 100644
index 9ae9308b22..0000000000
--- a/ext/xmlrpc/libxmlrpc/xml_to_soap.h
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- This file is part of libXMLRPC - a C library for xml-encoded function calls.
-
- Author: Dan Libby (dan@libby.com)
- Epinions.com may be contacted at feedback@epinions-inc.com
-*/
-
-/*
- Copyright 2000 Epinions, Inc.
-
- Subject to the following 3 conditions, Epinions, Inc. permits you, free
- of charge, to (a) use, copy, distribute, modify, perform and display this
- software and associated documentation files (the "Software"), and (b)
- permit others to whom the Software is furnished to do so as well.
-
- 1) The above copyright notice and this permission notice shall be included
- without modification in all copies or substantial portions of the
- Software.
-
- 2) THE SOFTWARE IS PROVIDED "AS IS", WITHOUT ANY WARRANTY OR CONDITION OF
- ANY KIND, EXPRESS, IMPLIED OR STATUTORY, INCLUDING WITHOUT LIMITATION ANY
- IMPLIED WARRANTIES OF ACCURACY, MERCHANTABILITY, FITNESS FOR A PARTICULAR
- PURPOSE OR NONINFRINGEMENT.
-
- 3) IN NO EVENT SHALL EPINIONS, INC. BE LIABLE FOR ANY DIRECT, INDIRECT,
- SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES OR LOST PROFITS ARISING OUT
- OF OR IN CONNECTION WITH THE SOFTWARE (HOWEVER ARISING, INCLUDING
- NEGLIGENCE), EVEN IF EPINIONS, INC. IS AWARE OF THE POSSIBILITY OF SUCH
- DAMAGES.
-
-*/
-
-
-#ifndef XML_TO_SOAP_H
- #define XML_TO_SOAP_H
-
-#include "xmlrpc.h"
-
-XMLRPC_VALUE xml_element_to_SOAP_VALUE(xml_element* el);
-XMLRPC_VALUE xml_element_to_SOAP_REQUEST(XMLRPC_REQUEST request, xml_element* el);
-xml_element* SOAP_VALUE_to_xml_element(XMLRPC_VALUE node);
-xml_element* SOAP_REQUEST_to_xml_element(XMLRPC_REQUEST request);
-
-#endif /* XML_TO_XMLRPC_H */
diff --git a/ext/xmlrpc/libxmlrpc/xml_to_xmlrpc.c b/ext/xmlrpc/libxmlrpc/xml_to_xmlrpc.c
deleted file mode 100644
index 4caf9e3afd..0000000000
--- a/ext/xmlrpc/libxmlrpc/xml_to_xmlrpc.c
+++ /dev/null
@@ -1,409 +0,0 @@
-/*
- This file is part of libXMLRPC - a C library for xml-encoded function calls.
-
- Author: Dan Libby (dan@libby.com)
- Epinions.com may be contacted at feedback@epinions-inc.com
-*/
-
-/*
- Copyright 2000 Epinions, Inc.
-
- Subject to the following 3 conditions, Epinions, Inc. permits you, free
- of charge, to (a) use, copy, distribute, modify, perform and display this
- software and associated documentation files (the "Software"), and (b)
- permit others to whom the Software is furnished to do so as well.
-
- 1) The above copyright notice and this permission notice shall be included
- without modification in all copies or substantial portions of the
- Software.
-
- 2) THE SOFTWARE IS PROVIDED "AS IS", WITHOUT ANY WARRANTY OR CONDITION OF
- ANY KIND, EXPRESS, IMPLIED OR STATUTORY, INCLUDING WITHOUT LIMITATION ANY
- IMPLIED WARRANTIES OF ACCURACY, MERCHANTABILITY, FITNESS FOR A PARTICULAR
- PURPOSE OR NONINFRINGEMENT.
-
- 3) IN NO EVENT SHALL EPINIONS, INC. BE LIABLE FOR ANY DIRECT, INDIRECT,
- SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES OR LOST PROFITS ARISING OUT
- OF OR IN CONNECTION WITH THE SOFTWARE (HOWEVER ARISING, INCLUDING
- NEGLIGENCE), EVEN IF EPINIONS, INC. IS AWARE OF THE POSSIBILITY OF SUCH
- DAMAGES.
-
-*/
-
-
-static const char rcsid[] = "#(@) $Id$";
-
-#ifdef _WIN32
-#include "xmlrpc_win32.h"
-#endif
-#include <string.h>
-#include <stdlib.h>
-#include "xml_to_xmlrpc.h"
-#include "base64.h"
-
-/* list of tokens used in vocab */
-#define ELEM_ARRAY "array"
-#define ELEM_BASE64 "base64"
-#define ELEM_BOOLEAN "boolean"
-#define ELEM_DATA "data"
-#define ELEM_DATETIME "dateTime.iso8601"
-#define ELEM_DOUBLE "double"
-#define ELEM_FAULT "fault"
-#define ELEM_FAULTCODE "faultCode"
-#define ELEM_FAULTSTRING "faultString"
-#define ELEM_I4 "i4"
-#define ELEM_INT "int"
-#define ELEM_MEMBER "member"
-#define ELEM_METHODCALL "methodCall"
-#define ELEM_METHODNAME "methodName"
-#define ELEM_METHODRESPONSE "methodResponse"
-#define ELEM_NAME "name"
-#define ELEM_PARAM "param"
-#define ELEM_PARAMS "params"
-#define ELEM_STRING "string"
-#define ELEM_STRUCT "struct"
-#define ELEM_VALUE "value"
-
-
-XMLRPC_VALUE xml_element_to_XMLRPC_REQUEST_worker(XMLRPC_REQUEST request, XMLRPC_VALUE parent_vector, XMLRPC_VALUE current_val, xml_element* el) {
- if (!current_val) {
- /* This should only be the case for the first element */
- current_val = XMLRPC_CreateValueEmpty();
- }
-
- if (el->name) {
-
- /* first, deal with the crazy/stupid fault format */
- if (!strcmp(el->name, ELEM_FAULT)) {
- xml_element* fault_value = (xml_element*)Q_Head(&el->children);
- XMLRPC_SetIsVector(current_val, xmlrpc_vector_struct);
-
- if(fault_value) {
- xml_element* fault_struct = (xml_element*)Q_Head(&fault_value->children);
- if(fault_struct) {
- xml_element* iter = (xml_element*)Q_Head(&fault_struct->children);
-
- while (iter) {
- XMLRPC_VALUE xNextVal = XMLRPC_CreateValueEmpty();
- xml_element_to_XMLRPC_REQUEST_worker(request, current_val, xNextVal, iter);
- XMLRPC_AddValueToVector(current_val, xNextVal);
- iter = (xml_element*)Q_Next(&fault_struct->children);
- }
- }
- }
- }
- else if (!strcmp(el->name, ELEM_DATA) /* should be ELEM_ARRAY, but there is an extra level. weird */
- || (!strcmp(el->name, ELEM_PARAMS) &&
- (XMLRPC_RequestGetRequestType(request) == xmlrpc_request_call)) ) { /* this "PARAMS" concept is silly. dave?! */
- xml_element* iter = (xml_element*)Q_Head(&el->children);
- XMLRPC_SetIsVector(current_val, xmlrpc_vector_array);
-
- while (iter) {
- XMLRPC_VALUE xNextVal = XMLRPC_CreateValueEmpty();
- xml_element_to_XMLRPC_REQUEST_worker(request, current_val, xNextVal, iter);
- XMLRPC_AddValueToVector(current_val, xNextVal);
- iter = (xml_element*)Q_Next(&el->children);
- }
- }
- else if (!strcmp(el->name, ELEM_STRUCT)) {
- xml_element* iter = (xml_element*)Q_Head(&el->children);
- XMLRPC_SetIsVector(current_val, xmlrpc_vector_struct);
-
- while ( iter ) {
- XMLRPC_VALUE xNextVal = XMLRPC_CreateValueEmpty();
- xml_element_to_XMLRPC_REQUEST_worker(request, current_val, xNextVal, iter);
- XMLRPC_AddValueToVector(current_val, xNextVal);
- iter = (xml_element*)Q_Next(&el->children);
- }
- }
- else if (!strcmp(el->name, ELEM_STRING) ||
- (!strcmp(el->name, ELEM_VALUE) && Q_Size(&el->children) == 0)) {
- XMLRPC_SetValueString(current_val, el->text.str, el->text.len);
- }
- else if (!strcmp(el->name, ELEM_NAME)) {
- XMLRPC_SetValueID_Case(current_val, el->text.str, 0, xmlrpc_case_exact);
- }
- else if (!strcmp(el->name, ELEM_INT) || !strcmp(el->name, ELEM_I4)) {
- XMLRPC_SetValueInt(current_val, atoi(el->text.str));
- }
- else if (!strcmp(el->name, ELEM_BOOLEAN)) {
- XMLRPC_SetValueBoolean(current_val, atoi(el->text.str));
- }
- else if (!strcmp(el->name, ELEM_DOUBLE)) {
- XMLRPC_SetValueDouble(current_val, atof(el->text.str));
- }
- else if (!strcmp(el->name, ELEM_DATETIME)) {
- XMLRPC_SetValueDateTime_ISO8601(current_val, el->text.str);
- }
- else if (!strcmp(el->name, ELEM_BASE64)) {
- struct buffer_st buf;
- base64_decode(&buf, el->text.str, el->text.len);
- XMLRPC_SetValueBase64(current_val, buf.data, buf.offset);
- buffer_delete(&buf);
- }
- else {
- xml_element* iter;
-
- if (!strcmp(el->name, ELEM_METHODCALL)) {
- if (request) {
- XMLRPC_RequestSetRequestType(request, xmlrpc_request_call);
- }
- }
- else if (!strcmp(el->name, ELEM_METHODRESPONSE)) {
- if (request) {
- XMLRPC_RequestSetRequestType(request, xmlrpc_request_response);
- }
- }
- else if (!strcmp(el->name, ELEM_METHODNAME)) {
- if (request) {
- XMLRPC_RequestSetMethodName(request, el->text.str);
- }
- }
-
- iter = (xml_element*)Q_Head(&el->children);
- while ( iter ) {
- xml_element_to_XMLRPC_REQUEST_worker(request, parent_vector,
- current_val, iter);
- iter = (xml_element*)Q_Next(&el->children);
- }
- }
- }
- return current_val;
-}
-
-XMLRPC_VALUE xml_element_to_XMLRPC_VALUE(xml_element* el)
-{
- return xml_element_to_XMLRPC_REQUEST_worker(NULL, NULL, NULL, el);
-}
-
-XMLRPC_VALUE xml_element_to_XMLRPC_REQUEST(XMLRPC_REQUEST request, xml_element* el)
-{
- if (request) {
- return XMLRPC_RequestSetData(request, xml_element_to_XMLRPC_REQUEST_worker(request, NULL, NULL, el));
- }
- return NULL;
-}
-
-xml_element* XMLRPC_to_xml_element_worker(XMLRPC_VALUE current_vector, XMLRPC_VALUE node,
- XMLRPC_REQUEST_TYPE request_type, int depth) {
-#define BUF_SIZE 512
- xml_element* root = NULL;
- if (node) {
- char buf[BUF_SIZE];
- XMLRPC_VALUE_TYPE type = XMLRPC_GetValueType(node);
- XMLRPC_VECTOR_TYPE vtype = XMLRPC_GetVectorType(node);
- xml_element* elem_val = xml_elem_new();
-
- /* special case for when root element is not an array */
- if (depth == 0 &&
- !(type == xmlrpc_vector &&
- vtype == xmlrpc_vector_array &&
- request_type == xmlrpc_request_call) ) {
- int bIsFault = (vtype == xmlrpc_vector_struct && XMLRPC_VectorGetValueWithID(node, ELEM_FAULTCODE));
-
- xml_element* next_el = XMLRPC_to_xml_element_worker(NULL, node, request_type, depth + 1);
- if (next_el) {
- Q_PushTail(&elem_val->children, next_el);
- }
- elem_val->name = strdup(bIsFault ? ELEM_FAULT : ELEM_PARAMS);
- }
- else {
- switch (type) {
- case xmlrpc_empty: /* treat null value as empty string in xmlrpc. */
- case xmlrpc_string:
- elem_val->name = strdup(ELEM_STRING);
- simplestring_addn(&elem_val->text, XMLRPC_GetValueString(node), XMLRPC_GetValueStringLen(node));
- break;
- case xmlrpc_int:
- elem_val->name = strdup(ELEM_INT);
- snprintf(buf, BUF_SIZE, "%i", XMLRPC_GetValueInt(node));
- simplestring_add(&elem_val->text, buf);
- break;
- case xmlrpc_boolean:
- elem_val->name = strdup(ELEM_BOOLEAN);
- snprintf(buf, BUF_SIZE, "%i", XMLRPC_GetValueBoolean(node));
- simplestring_add(&elem_val->text, buf);
- break;
- case xmlrpc_double:
- elem_val->name = strdup(ELEM_DOUBLE);
- snprintf(buf, BUF_SIZE, "%f", XMLRPC_GetValueDouble(node));
- simplestring_add(&elem_val->text, buf);
- break;
- case xmlrpc_datetime:
- elem_val->name = strdup(ELEM_DATETIME);
- simplestring_add(&elem_val->text, XMLRPC_GetValueDateTime_ISO8601(node));
- break;
- case xmlrpc_base64:
- {
- struct buffer_st buf;
- elem_val->name = strdup(ELEM_BASE64);
- base64_encode(&buf, XMLRPC_GetValueBase64(node), XMLRPC_GetValueStringLen(node));
- simplestring_addn(&elem_val->text, buf.data, buf.offset );
- buffer_delete(&buf);
- }
- break;
- case xmlrpc_vector:
- {
- XMLRPC_VECTOR_TYPE my_type = XMLRPC_GetVectorType(node);
- XMLRPC_VALUE xIter = XMLRPC_VectorRewind(node);
- xml_element* root_vector_elem = elem_val;
-
- switch (my_type) {
- case xmlrpc_vector_array:
- {
- if(depth == 0) {
- elem_val->name = strdup(ELEM_PARAMS);
- }
- else {
- /* Hi my name is Dave and I like to make things as confusing
- * as possible, thus I will throw in this 'data' element
- * where it absolutely does not belong just so that people
- * cannot code arrays and structs in a similar and straight
- * forward manner. Have a good day.
- *
- * GRRRRRRRRR!
- */
- xml_element* data = xml_elem_new();
- data->name = strdup(ELEM_DATA);
-
- elem_val->name = strdup(ELEM_ARRAY);
- Q_PushTail(&elem_val->children, data);
- root_vector_elem = data;
- }
- }
- break;
- case xmlrpc_vector_mixed: /* not officially supported */
- case xmlrpc_vector_struct:
- elem_val->name = strdup(ELEM_STRUCT);
- break;
- default:
- break;
- }
-
- /* recurse through sub-elements */
- while ( xIter ) {
- xml_element* next_el = XMLRPC_to_xml_element_worker(node, xIter, request_type, depth + 1);
- if (next_el) {
- Q_PushTail(&root_vector_elem->children, next_el);
- }
- xIter = XMLRPC_VectorNext(node);
- }
- }
- break;
- default:
- break;
- }
- }
-
- {
- XMLRPC_VECTOR_TYPE vtype = XMLRPC_GetVectorType(current_vector);
-
- if (depth == 1) {
- xml_element* value = xml_elem_new();
- value->name = strdup(ELEM_VALUE);
-
- /* yet another hack for the "fault" crap */
- if (XMLRPC_VectorGetValueWithID(node, ELEM_FAULTCODE)) {
- root = value;
- }
- else {
- xml_element* param = xml_elem_new();
- param->name = strdup(ELEM_PARAM);
-
- Q_PushTail(&param->children, value);
-
- root = param;
- }
- Q_PushTail(&value->children, elem_val);
- }
- else if (vtype == xmlrpc_vector_struct || vtype == xmlrpc_vector_mixed) {
- xml_element* member = xml_elem_new();
- xml_element* name = xml_elem_new();
- xml_element* value = xml_elem_new();
-
- member->name = strdup(ELEM_MEMBER);
- name->name = strdup(ELEM_NAME);
- value->name = strdup(ELEM_VALUE);
-
- simplestring_add(&name->text, XMLRPC_GetValueID(node));
-
- Q_PushTail(&member->children, name);
- Q_PushTail(&member->children, value);
- Q_PushTail(&value->children, elem_val);
-
- root = member;
- }
- else if (vtype == xmlrpc_vector_array) {
- xml_element* value = xml_elem_new();
-
- value->name = strdup(ELEM_VALUE);
-
- Q_PushTail(&value->children, elem_val);
-
- root = value;
- }
- else if (vtype == xmlrpc_vector_none) {
- /* no parent. non-op */
- root = elem_val;
- }
- else {
- xml_element* value = xml_elem_new();
-
- value->name = strdup(ELEM_VALUE);
-
- Q_PushTail(&value->children, elem_val);
-
- root = value;
- }
- }
- }
- return root;
-}
-
-xml_element* XMLRPC_VALUE_to_xml_element(XMLRPC_VALUE node) {
- return XMLRPC_to_xml_element_worker(NULL, node, xmlrpc_request_none, 0);
-}
-
-xml_element* XMLRPC_REQUEST_to_xml_element(XMLRPC_REQUEST request) {
- xml_element* wrapper = NULL;
- if (request) {
- const char* pStr = NULL;
- XMLRPC_REQUEST_TYPE request_type = XMLRPC_RequestGetRequestType(request);
- XMLRPC_VALUE xParams = XMLRPC_RequestGetData(request);
-
- wrapper = xml_elem_new();
-
- if (request_type == xmlrpc_request_call) {
- pStr = ELEM_METHODCALL;
- }
- else if (request_type == xmlrpc_request_response) {
- pStr = ELEM_METHODRESPONSE;
- }
- if (pStr) {
- wrapper->name = strdup(pStr);
- }
-
- if(request_type == xmlrpc_request_call) {
- pStr = XMLRPC_RequestGetMethodName(request);
-
- if (pStr) {
- xml_element* method = xml_elem_new();
- method->name = strdup(ELEM_METHODNAME);
- simplestring_add(&method->text, pStr);
- Q_PushTail(&wrapper->children, method);
- }
- }
- if (xParams) {
- Q_PushTail(&wrapper->children,
- XMLRPC_to_xml_element_worker(NULL, XMLRPC_RequestGetData(request), XMLRPC_RequestGetRequestType(request), 0));
- }
- else {
- /* Despite the spec, the xml-rpc list folk want me to send an empty params element */
- xml_element* params = xml_elem_new();
- params->name = strdup(ELEM_PARAMS);
- Q_PushTail(&wrapper->children, params);
- }
- }
- return wrapper;
-}
-
diff --git a/ext/xmlrpc/libxmlrpc/xml_to_xmlrpc.h b/ext/xmlrpc/libxmlrpc/xml_to_xmlrpc.h
deleted file mode 100644
index 234a153460..0000000000
--- a/ext/xmlrpc/libxmlrpc/xml_to_xmlrpc.h
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- This file is part of libXMLRPC - a C library for xml-encoded function calls.
-
- Author: Dan Libby (dan@libby.com)
- Epinions.com may be contacted at feedback@epinions-inc.com
-*/
-
-/*
- Copyright 2000 Epinions, Inc.
-
- Subject to the following 3 conditions, Epinions, Inc. permits you, free
- of charge, to (a) use, copy, distribute, modify, perform and display this
- software and associated documentation files (the "Software"), and (b)
- permit others to whom the Software is furnished to do so as well.
-
- 1) The above copyright notice and this permission notice shall be included
- without modification in all copies or substantial portions of the
- Software.
-
- 2) THE SOFTWARE IS PROVIDED "AS IS", WITHOUT ANY WARRANTY OR CONDITION OF
- ANY KIND, EXPRESS, IMPLIED OR STATUTORY, INCLUDING WITHOUT LIMITATION ANY
- IMPLIED WARRANTIES OF ACCURACY, MERCHANTABILITY, FITNESS FOR A PARTICULAR
- PURPOSE OR NONINFRINGEMENT.
-
- 3) IN NO EVENT SHALL EPINIONS, INC. BE LIABLE FOR ANY DIRECT, INDIRECT,
- SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES OR LOST PROFITS ARISING OUT
- OF OR IN CONNECTION WITH THE SOFTWARE (HOWEVER ARISING, INCLUDING
- NEGLIGENCE), EVEN IF EPINIONS, INC. IS AWARE OF THE POSSIBILITY OF SUCH
- DAMAGES.
-
-*/
-
-
-#ifndef XML_TO_XMLRPC_H
- #define XML_TO_XMLRPC_H
-
-#include "time.h"
-#include "xmlrpc.h"
-
-XMLRPC_VALUE xml_element_to_XMLRPC_VALUE(xml_element* el);
-XMLRPC_VALUE xml_element_to_XMLRPC_REQUEST(XMLRPC_REQUEST request, xml_element* el);
-xml_element* XMLRPC_VALUE_to_xml_element(XMLRPC_VALUE node);
-xml_element* XMLRPC_REQUEST_to_xml_element(XMLRPC_REQUEST request);
-
-#endif /* XML_TO_XMLRPC_H */
diff --git a/ext/xmlrpc/libxmlrpc/xmlrpc.c b/ext/xmlrpc/libxmlrpc/xmlrpc.c
deleted file mode 100644
index 1fbb4a7ec3..0000000000
--- a/ext/xmlrpc/libxmlrpc/xmlrpc.c
+++ /dev/null
@@ -1,2957 +0,0 @@
-/*
- This file is part of libXMLRPC - a C library for xml-encoded function calls.
-
- Author: Dan Libby (dan@libby.com)
- Epinions.com may be contacted at feedback@epinions-inc.com
-*/
-
-/*
- Copyright 2000 Epinions, Inc.
-
- Subject to the following 3 conditions, Epinions, Inc. permits you, free
- of charge, to (a) use, copy, distribute, modify, perform and display this
- software and associated documentation files (the "Software"), and (b)
- permit others to whom the Software is furnished to do so as well.
-
- 1) The above copyright notice and this permission notice shall be included
- without modification in all copies or substantial portions of the
- Software.
-
- 2) THE SOFTWARE IS PROVIDED "AS IS", WITHOUT ANY WARRANTY OR CONDITION OF
- ANY KIND, EXPRESS, IMPLIED OR STATUTORY, INCLUDING WITHOUT LIMITATION ANY
- IMPLIED WARRANTIES OF ACCURACY, MERCHANTABILITY, FITNESS FOR A PARTICULAR
- PURPOSE OR NONINFRINGEMENT.
-
- 3) IN NO EVENT SHALL EPINIONS, INC. BE LIABLE FOR ANY DIRECT, INDIRECT,
- SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES OR LOST PROFITS ARISING OUT
- OF OR IN CONNECTION WITH THE SOFTWARE (HOWEVER ARISING, INCLUDING
- NEGLIGENCE), EVEN IF EPINIONS, INC. IS AWARE OF THE POSSIBILITY OF SUCH
- DAMAGES.
-
-*/
-
-
-static const char rcsid[] = "#(@) $Id$";
-
-
-/****h* ABOUT/xmlrpc
- * NAME
- * XMLRPC_VALUE
- * AUTHOR
- * Dan Libby, aka danda (dan@libby.com)
- * CREATION DATE
- * 9/1999 - 10/2000
- * HISTORY
- * $Log$
- * Revision 1.5 2003/12/16 21:00:21 sniper
- * Fix some compile warnings (patch by Joe Orton)
- *
- * Revision 1.4 2002/07/05 04:43:53 danda
- * merged in updates from SF project. bring php repository up to date with xmlrpc-epi version 0.51
- *
- * Revision 1.22 2002/03/09 23:15:44 danda
- * add fault interrogation funcs
- *
- * Revision 1.21 2002/03/09 22:27:41 danda
- * win32 build patches contributed by Jeff Lawson
- *
- * Revision 1.20 2002/02/13 20:58:50 danda
- * patch to make source more windows friendly, contributed by Jeff Lawson
- *
- * Revision 1.19 2001/10/12 23:25:54 danda
- * default to writing xmlrpc
- *
- * Revision 1.18 2001/09/29 21:58:05 danda
- * adding cvs log to history section
- *
- * 10/15/2000 -- danda -- adding robodoc documentation
- * 08/2000 -- danda -- PHP C extension that uses XMLRPC
- * 08/2000 -- danda -- support for two vocabularies: danda-rpc and xml-rpc
- * 09/1999 -- danda -- Initial API, before I even knew of standard XMLRPC vocab. Response only.
- * 07/2000 -- danda -- wrote new implementation to be compatible with xmlrpc standard and
- * incorporated some ideas from ensor, most notably the separation of
- * xml dom from xmlrpc api.
- * 06/2000 -- danda -- played with expat-ensor from www.ensor.org. Cool, but some flaws.
- * TODO
- * PORTABILITY
- * Coded on RedHat Linux 6.2. Builds on Solaris x86. Should build on just
- * about anything with minor mods.
- * NOTES
- * Welcome to XMLRPC. For more info on the specification and history, see
- * http://www.xmlrpc.org.
- *
- * This code aims to be a full-featured C implementation of XMLRPC. It does not
- * have any networking code. Rather, it is intended to be plugged into apps
- * or libraries with existing networking facilities, eg PHP, apache, perl, mozilla,
- * home-brew application servers, etc.
- *
- * Usage Paradigm:
- * The user of this library will typically be implementing either an XMLRPC server,
- * an XMLRPC client, or both. The client will use the library to build an in-memory
- * representation of a request, and then serialize (encode) that request into XML. The
- * client will then send the XML to the server via external mechanism. The server will
- * de-serialize the XML back into an binary representation, call the appropriate registered
- * method -- thereby generating a response. The response will be serialized into XML and
- * sent back to the client. The client will de-serialize it into memory, and can
- * iterate through the results via API.
- *
- * Both the request and the response may consist of arbitrarily long, arbitrarily nested
- * values. The values may be one of several types, as defined by XMLRPC_VALUE_TYPE.
- *
- * Features and Architecture:
- * - The XML parsing (xml_element.c) is completely independent of the XMLRPC api. In fact,
- * it can be used as a standalone dom implementation.
- * - Because of this, the same XMLRPC data can be serialized into multiple xml vocabularies.
- * It is simply a matter of writing a transport. So far, two transports have been defined.
- * The default xmlrpc vocab (xml_to_xmlrpc.c), and simple-rpc (xml_to_dandarpc.c) which is
- * proprietary, but imho more readable, and nice for proprietary legacy reasons.
- * - Various output options, including: xml escaping via CDATA or entity, case folding,
- * vocab version, and character encoding.
- * - One to One mapping between C structures and actual values, unlike ensor which forces
- * one to understand the arcana of the xmlrpc vocab.
- * - support for mixed indexed/keyed vector types, making it more compatible with
- * languages such as PHP.
- * - quite speedy compared to implementations written in interpreted languages. Also, uses
- * intelligent string handling, so not many strlen() calls, etc.
- * - comprehensive API for manipulation of values
- *******/
-
-
-#ifdef _WIN32
-#include "xmlrpc_win32.h"
-#endif
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <stdarg.h>
-#include <time.h>
-#include <ctype.h>
-
-#include "queue.h"
-#include "xmlrpc.h"
-#include "expat.h"
-#include "base64.h"
-
-#include "xml_to_xmlrpc.h"
-#include "xml_to_dandarpc.h"
-#include "xml_to_soap.h"
-#include "xml_element.h"
-#include "xmlrpc_private.h"
-#include "xmlrpc_introspection_private.h"
-#include "system_methods_private.h"
-
-
-
-/*-*********************
-* Begin Time Functions *
-***********************/
-
-static int date_from_ISO8601 (const char *text, time_t * value) {
- struct tm tm;
- int n;
- int i;
- char buf[18];
-
- if (strchr (text, '-')) {
- char *p = (char *) text, *p2 = buf;
- while (p && *p) {
- if (*p != '-') {
- *p2 = *p;
- p2++;
- }
- p++;
- }
- text = buf;
- }
-
-
- tm.tm_isdst = -1;
-
- if(strlen(text) < 17) {
- return -1;
- }
-
- n = 1000;
- tm.tm_year = 0;
- for(i = 0; i < 4; i++) {
- tm.tm_year += (text[i]-'0')*n;
- n /= 10;
- }
- n = 10;
- tm.tm_mon = 0;
- for(i = 0; i < 2; i++) {
- tm.tm_mon += (text[i+4]-'0')*n;
- n /= 10;
- }
- tm.tm_mon --;
-
- n = 10;
- tm.tm_mday = 0;
- for(i = 0; i < 2; i++) {
- tm.tm_mday += (text[i+6]-'0')*n;
- n /= 10;
- }
-
- n = 10;
- tm.tm_hour = 0;
- for(i = 0; i < 2; i++) {
- tm.tm_hour += (text[i+9]-'0')*n;
- n /= 10;
- }
-
- n = 10;
- tm.tm_min = 0;
- for(i = 0; i < 2; i++) {
- tm.tm_min += (text[i+12]-'0')*n;
- n /= 10;
- }
-
- n = 10;
- tm.tm_sec = 0;
- for(i = 0; i < 2; i++) {
- tm.tm_sec += (text[i+15]-'0')*n;
- n /= 10;
- }
-
- tm.tm_year -= 1900;
-
- *value = mktime(&tm);
-
- return 0;
-
-}
-
-static int date_to_ISO8601 (time_t value, char *buf, int length) {
- struct tm *tm;
- tm = localtime(&value);
-#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);
-#endif
-}
-
-/*-*******************
-* End Time Functions *
-*********************/
-
-
-/*-***************************
-* Begin XMLRPC_REQUEST funcs *
-*****************************/
-
-/****f* REQUEST/XMLRPC_RequestNew
- * NAME
- * XMLRPC_RequestNew
- * SYNOPSIS
- * XMLRPC_REQUEST XMLRPC_RequestNew()
- * FUNCTION
- * Creates a new XMLRPC_Request data struct
- * INPUTS
- * none
- * SEE ALSO
- * XMLRPC_RequestFree ()
- * SOURCE
- */
-XMLRPC_REQUEST XMLRPC_RequestNew() {
- XMLRPC_REQUEST xRequest = calloc(1, sizeof(STRUCT_XMLRPC_REQUEST));
- if(xRequest) {
- simplestring_init(&xRequest->methodName);
- }
- return xRequest;
-}
-
-/*******/
-
-/****f* REQUEST/XMLRPC_RequestFree
- * NAME
- * XMLRPC_RequestFree
- * SYNOPSIS
- * void XMLRPC_RequestFree(XMLRPC_REQUEST request, int bFreeIO)
- * FUNCTION
- * Free XMLRPC Request and all sub-values
- * INPUTS
- * request -- previously allocated request struct
- * bFreeIO -- 1 = also free request value data, if any, 0 = ignore.
- * SEE ALSO
- * XMLRPC_RequestNew ()
- * XMLRPC_CleanupValue ()
- * SOURCE
- */
-void XMLRPC_RequestFree(XMLRPC_REQUEST request, int bFreeIO) {
- if(request) {
- simplestring_free(&request->methodName);
-
- if(request->io && bFreeIO) {
- XMLRPC_CleanupValue(request->io);
- }
- if(request->error) {
- XMLRPC_CleanupValue(request->error);
- }
- my_free(request);
- }
-}
-
-/*******/
-
-/* Set Method Name to call */
-/****f* REQUEST/XMLRPC_RequestSetMethodName
- * NAME
- * XMLRPC_RequestSetMethodName
- * SYNOPSIS
- * const char* XMLRPC_RequestSetMethodName(XMLRPC_REQUEST request, const char* methodName)
- * FUNCTION
- * Set name of method to call with this request.
- * INPUTS
- * request -- previously allocated request struct
- * methodName -- name of method
- * SEE ALSO
- * XMLRPC_RequestNew ()
- * XMLRPC_RequestGetMethodName ()
- * XMLRPC_RequestFree ()
- * SOURCE
- */
-const char* XMLRPC_RequestSetMethodName(XMLRPC_REQUEST request, const char* methodName) {
- if(request) {
- simplestring_clear(&request->methodName);
- simplestring_add(&request->methodName, methodName);
- return request->methodName.str;
- }
- return NULL;
-}
-
-/*******/
-
-/****f* REQUEST/XMLRPC_RequestGetMethodName
- * NAME
- * XMLRPC_RequestGetMethodName
- * SYNOPSIS
- * const char* XMLRPC_RequestGetMethodName(XMLRPC_REQUEST request)
- * FUNCTION
- * Get name of method called by this request
- * INPUTS
- * request -- previously allocated request struct
- * SEE ALSO
- * XMLRPC_RequestNew ()
- * XMLRPC_RequestSetMethodName ()
- * XMLRPC_RequestFree ()
- * SOURCE
- */
-const char* XMLRPC_RequestGetMethodName(XMLRPC_REQUEST request) {
- return request ? request->methodName.str : NULL;
-}
-
-/*******/
-
-/****f* REQUEST/XMLRPC_RequestSetRequestType
- * NAME
- * XMLRPC_RequestSetRequestType
- * SYNOPSIS
- * XMLRPC_REQUEST_TYPE XMLRPC_RequestSetRequestType(XMLRPC_REQUEST request, XMLRPC_REQUEST_TYPE type)
- * FUNCTION
- * A request struct may be allocated by a caller or by xmlrpc
- * in response to a request. This allows setting the
- * request type.
- * INPUTS
- * request -- previously allocated request struct
- * type -- request type [xmlrpc_method_call | xmlrpc_method_response]
- * SEE ALSO
- * XMLRPC_RequestNew ()
- * XMLRPC_RequestGetRequestType ()
- * XMLRPC_RequestFree ()
- * XMLRPC_REQUEST_TYPE
- * SOURCE
- */
-XMLRPC_REQUEST_TYPE XMLRPC_RequestSetRequestType (XMLRPC_REQUEST request,
- XMLRPC_REQUEST_TYPE type) {
- if(request) {
- request->request_type = type;
- return request->request_type;
- }
- return xmlrpc_request_none;
-}
-
-/*******/
-
-/****f* REQUEST/XMLRPC_RequestGetRequestType
- * NAME
- * XMLRPC_RequestGetRequestType
- * SYNOPSIS
- * XMLRPC_REQUEST_TYPE XMLRPC_RequestGetRequestType(XMLRPC_REQUEST request)
- * FUNCTION
- * A request struct may be allocated by a caller or by xmlrpc
- * in response to a request. This allows setting the
- * request type.
- * INPUTS
- * request -- previously allocated request struct
- * RESULT
- * type -- request type [xmlrpc_method_call | xmlrpc_method_response]
- * SEE ALSO
- * XMLRPC_RequestNew ()
- * XMLRPC_RequestSetRequestType ()
- * XMLRPC_RequestFree ()
- * XMLRPC_REQUEST_TYPE
- * SOURCE
- */
-XMLRPC_REQUEST_TYPE XMLRPC_RequestGetRequestType(XMLRPC_REQUEST request) {
- return request ? request->request_type : xmlrpc_request_none;
-}
-
-/*******/
-
-
-/****f* REQUEST/XMLRPC_RequestSetData
- * NAME
- * XMLRPC_RequestSetData
- * SYNOPSIS
- * XMLRPC_VALUE XMLRPC_RequestSetData(XMLRPC_REQUEST request, XMLRPC_VALUE data)
- * FUNCTION
- * Associates a block of xmlrpc data with the request. The
- * data is *not* copied. A pointer is kept. The caller
- * should be careful not to doubly free the data value,
- * which may optionally be free'd by XMLRPC_RequestFree().
- * INPUTS
- * request -- previously allocated request struct
- * data -- previously allocated data struct
- * RESULT
- * XMLRPC_VALUE -- pointer to value stored, or NULL
- * SEE ALSO
- * XMLRPC_RequestNew ()
- * XMLRPC_RequestGetData ()
- * XMLRPC_RequestFree ()
- * XMLRPC_REQUEST
- * XMLRPC_VALUE
- * SOURCE
- */
-XMLRPC_VALUE XMLRPC_RequestSetData(XMLRPC_REQUEST request, XMLRPC_VALUE data) {
- if(request && data) {
- if (request->io) {
- XMLRPC_CleanupValue (request->io);
- }
- request->io = XMLRPC_CopyValue(data);
- return request->io;
- }
- return NULL;
-}
-
-/*******/
-
-/****f* REQUEST/XMLRPC_RequestGetData
- * NAME
- * XMLRPC_RequestGetData
- * SYNOPSIS
- * XMLRPC_VALUE XMLRPC_RequestGetData(XMLRPC_REQUEST request)
- * FUNCTION
- * Returns data associated with request, if any.
- * INPUTS
- * request -- previously allocated request struct
- * RESULT
- * XMLRPC_VALUE -- pointer to value stored, or NULL
- * SEE ALSO
- * XMLRPC_RequestNew ()
- * XMLRPC_RequestSetData ()
- * XMLRPC_RequestFree ()
- * XMLRPC_REQUEST
- * XMLRPC_VALUE
- * SOURCE
- */
-XMLRPC_VALUE XMLRPC_RequestGetData(XMLRPC_REQUEST request) {
- return request ? request->io : NULL;
-}
-
-/*******/
-
-/****f* REQUEST/XMLRPC_RequestSetError
- * NAME
- * XMLRPC_RequestSetError
- * SYNOPSIS
- * XMLRPC_VALUE XMLRPC_RequestSetError(XMLRPC_REQUEST request, XMLRPC_VALUE error)
- * FUNCTION
- * Associates a block of xmlrpc data, representing an error
- * condition, with the request.
- * INPUTS
- * request -- previously allocated request struct
- * error -- previously allocated error code or struct
- * RESULT
- * XMLRPC_VALUE -- pointer to value stored, or NULL
- * NOTES
- * This is a private function for usage by internals only.
- * SEE ALSO
- * XMLRPC_RequestGetError ()
- * SOURCE
- */
-XMLRPC_VALUE XMLRPC_RequestSetError (XMLRPC_REQUEST request, XMLRPC_VALUE error) {
- if (request && error) {
- if (request->error) {
- XMLRPC_CleanupValue (request->error);
- }
- request->error = XMLRPC_CopyValue (error);
- return request->error;
- }
- return NULL;
-}
-
-/*******/
-
-/****f* REQUEST/XMLRPC_RequestGetError
- * NAME
- * XMLRPC_RequestGetError
- * SYNOPSIS
- * XMLRPC_VALUE XMLRPC_RequestGetError(XMLRPC_REQUEST request)
- * FUNCTION
- * Returns error data associated with request, if any.
- * INPUTS
- * request -- previously allocated request struct
- * RESULT
- * XMLRPC_VALUE -- pointer to error value stored, or NULL
- * NOTES
- * This is a private function for usage by internals only.
- * SEE ALSO
- * XMLRPC_RequestSetError ()
- * XMLRPC_RequestFree ()
- * SOURCE
- */
-XMLRPC_VALUE XMLRPC_RequestGetError (XMLRPC_REQUEST request) {
- return request ? request->error : NULL;
-}
-
-/*******/
-
-
-/****f* REQUEST/XMLRPC_RequestSetOutputOptions
- * NAME
- * XMLRPC_RequestSetOutputOptions
- * SYNOPSIS
- * XMLRPC_REQUEST_OUTPUT_OPTIONS XMLRPC_RequestSetOutputOptions(XMLRPC_REQUEST request, XMLRPC_REQUEST_OUTPUT_OPTIONS output)
- * FUNCTION
- * Sets output options used for generating XML. The output struct
- * is copied, and may be freed by the caller.
- * INPUTS
- * request -- previously allocated request struct
- * output -- output options struct initialized by caller
- * RESULT
- * XMLRPC_REQUEST_OUTPUT_OPTIONS -- pointer to value stored, or NULL
- * SEE ALSO
- * XMLRPC_RequestNew ()
- * XMLRPC_RequestGetOutputOptions ()
- * XMLRPC_RequestFree ()
- * XMLRPC_REQUEST
- * XMLRPC_REQUEST_OUTPUT_OPTIONS
- * SOURCE
- */
-XMLRPC_REQUEST_OUTPUT_OPTIONS XMLRPC_RequestSetOutputOptions(XMLRPC_REQUEST request, XMLRPC_REQUEST_OUTPUT_OPTIONS output) {
- if(request && output) {
- memcpy (&request->output, output,
- sizeof (STRUCT_XMLRPC_REQUEST_OUTPUT_OPTIONS));
- return &request->output;
- }
- return NULL;
-}
-
-/*******/
-
-
-/****f* REQUEST/XMLRPC_RequestGetOutputOptions
- * NAME
- * XMLRPC_RequestGetOutputOptions
- * SYNOPSIS
- * XMLRPC_REQUEST_OUTPUT_OPTIONS XMLRPC_RequestGetOutputOptions(XMLRPC_REQUEST request)
- * FUNCTION
- * Gets a pointer to output options used for generating XML.
- * INPUTS
- * request -- previously allocated request struct
- * RESULT
- * XMLRPC_REQUEST_OUTPUT_OPTIONS -- pointer to options stored, or NULL
- * SEE ALSO
- * XMLRPC_RequestNew ()
- * XMLRPC_RequestSetOutputOptions ()
- * XMLRPC_RequestFree ()
- * XMLRPC_REQUEST
- * XMLRPC_REQUEST_OUTPUT_OPTIONS
- * SOURCE
- */
-XMLRPC_REQUEST_OUTPUT_OPTIONS XMLRPC_RequestGetOutputOptions(XMLRPC_REQUEST request) {
- return request ? &request->output : NULL;
-}
-
-/*******/
-
-/*-*************************
-* End XMLRPC_REQUEST funcs *
-***************************/
-
-
-/*-***************************
-* Begin Serializiation funcs *
-*****************************/
-
-/****f* SERIALIZE/XMLRPC_VALUE_ToXML
- * NAME
- * XMLRPC_VALUE_ToXML
- * SYNOPSIS
- * char* XMLRPC_VALUE_ToXML(XMLRPC_VALUE val)
- * FUNCTION
- * encode XMLRPC_VALUE into XML buffer. Note that the generated
- * buffer will not contain a methodCall.
- * INPUTS
- * val -- previously allocated XMLRPC_VALUE
- * buf_len -- length of returned buffer, if not null
- * RESULT
- * char* -- newly allocated buffer containing XML.
- * It is the caller's responsibility to free it.
- * SEE ALSO
- * XMLRPC_REQUEST_ToXML ()
- * XMLRPC_VALUE_FromXML ()
- * XMLRPC_Free ()
- * XMLRPC_VALUE
- * SOURCE
- */
-char* XMLRPC_VALUE_ToXML(XMLRPC_VALUE val, int* buf_len) {
- xml_element *root_elem = XMLRPC_VALUE_to_xml_element(val);
- char* pRet = NULL;
-
- if(root_elem) {
- pRet = xml_elem_serialize_to_string(root_elem, NULL, buf_len);
- xml_elem_free(root_elem);
- }
- return pRet;
-}
-
-/*******/
-
-/****f* SERIALIZE/XMLRPC_REQUEST_ToXML
- * NAME
- * XMLRPC_REQUEST_ToXML
- * SYNOPSIS
- * char* XMLRPC_REQUEST_ToXML(XMLRPC_REQUEST request)
- * FUNCTION
- * encode XMLRPC_REQUEST into XML buffer
- * INPUTS
- * request -- previously allocated XMLRPC_REQUEST
- * buf_len -- size of returned buf, if not null
- * RESULT
- * char* -- newly allocated buffer containing XML.
- * It is the caller's responsibility to free it.
- * SEE ALSO
- * XMLRPC_REQUEST_ToXML ()
- * XMLRPC_REQUEST_FromXML ()
- * XMLRPC_Free ()
- * XMLRPC_VALUE_ToXML ()
- * XMLRPC_REQUEST
- * SOURCE
- */
-char* XMLRPC_REQUEST_ToXML(XMLRPC_REQUEST request, int* buf_len) {
- char* pRet = NULL;
- if (request) {
- xml_element *root_elem = NULL;
- if (request->output.version == xmlrpc_version_simple) {
- root_elem = DANDARPC_REQUEST_to_xml_element (request);
- }
- else if (request->output.version == xmlrpc_version_1_0 ||
- request->output.version == xmlrpc_version_none) {
- root_elem = XMLRPC_REQUEST_to_xml_element (request);
- }
- else if (request->output.version == xmlrpc_version_soap_1_1) {
- root_elem = SOAP_REQUEST_to_xml_element (request);
- }
-
- if(root_elem) {
- pRet =
- xml_elem_serialize_to_string (root_elem,
- &request->output.xml_elem_opts,
- buf_len);
- xml_elem_free(root_elem);
- }
- }
- return pRet;
-}
-
-/*******/
-
-/****f* SERIALIZE/XMLRPC_VALUE_FromXML
- * NAME
- * XMLRPC_VALUE_FromXML
- * SYNOPSIS
- * XMLRPC_VALUE XMLRPC_VALUE_FromXML(const char* in_buf, int le
- * FUNCTION
- * Retrieve XMLRPC_VALUE from XML buffer. Note that this will
- * ignore any methodCall. See XMLRPC_REQUEST_FromXML
- * INPUTS
- * in_buf -- character buffer containing XML
- * len -- length of buffer
- * RESULT
- * XMLRPC_VALUE -- newly allocated data, or NULL if error. Should
- * be free'd by caller.
- * SEE ALSO
- * XMLRPC_VALUE_ToXML ()
- * XMLRPC_REQUEST_FromXML ()
- * XMLRPC_VALUE
- * SOURCE
- */
-XMLRPC_VALUE XMLRPC_VALUE_FromXML (const char *in_buf, int len, XMLRPC_REQUEST_INPUT_OPTIONS in_options) {
- XMLRPC_VALUE xResponse = NULL;
- XMLRPC_REQUEST req = XMLRPC_REQUEST_FromXML(in_buf, len, in_options);
-
- if(req) {
- xResponse = req->io;
- XMLRPC_RequestFree(req, 0);
- }
- return xResponse;
-}
-
-/*******/
-
-/* map parser errors to standard xml-rpc errors */
-static XMLRPC_VALUE map_expat_errors(XML_ELEM_ERROR error) {
- XMLRPC_VALUE xReturn = NULL;
- if(error) {
- XMLRPC_ERROR_CODE code;
- char buf[1024];
- snprintf(buf, sizeof(buf),
- "error occurred at line %ld, column %ld, byte index %ld",
- error->line, error->column, error->byte_index);
-
- /* expat specific errors */
- switch(error->parser_code) {
- case XML_ERROR_UNKNOWN_ENCODING:
- code = xmlrpc_error_parse_unknown_encoding;
- break;
- case XML_ERROR_INCORRECT_ENCODING:
- code = xmlrpc_error_parse_bad_encoding;
- break;
- default:
- code = xmlrpc_error_parse_xml_syntax;
- break;
- }
- xReturn = XMLRPC_UtilityCreateFault(code, buf);
- }
- return xReturn;
-}
-
-/****f* SERIALIZE/XMLRPC_REQUEST_FromXML
- * NAME
- * XMLRPC_REQUEST_FromXML
- * SYNOPSIS
- * XMLRPC_REQUEST XMLRPC_REQUEST_FromXML(const char* in_buf, int le
- * FUNCTION
- * Retrieve XMLRPC_REQUEST from XML buffer
- * INPUTS
- * in_buf -- character buffer containing XML
- * len -- length of buffer
- * RESULT
- * XMLRPC_REQUEST -- newly allocated data, or NULL if error. Should
- * be free'd by caller.
- * SEE ALSO
- * XMLRPC_REQUEST_ToXML ()
- * XMLRPC_VALUE_FromXML ()
- * XMLRPC_REQUEST
- * SOURCE
- */
-XMLRPC_REQUEST XMLRPC_REQUEST_FromXML (const char *in_buf, int len,
- XMLRPC_REQUEST_INPUT_OPTIONS in_options) {
- XMLRPC_REQUEST request = XMLRPC_RequestNew();
- STRUCT_XML_ELEM_ERROR error = {0};
-
- if(request) {
- xml_element *root_elem =
- xml_elem_parse_buf (in_buf, len,
- (in_options ? &in_options->xml_elem_opts : NULL),
- &error);
-
- if(root_elem) {
- if(!strcmp(root_elem->name, "simpleRPC")) {
- request->output.version = xmlrpc_version_simple;
- xml_element_to_DANDARPC_REQUEST(request, root_elem);
- }
- else if (!strcmp (root_elem->name, "SOAP-ENV:Envelope")) {
- request->output.version = xmlrpc_version_soap_1_1;
- xml_element_to_SOAP_REQUEST (request, root_elem);
- }
- else {
- request->output.version = xmlrpc_version_1_0;
- xml_element_to_XMLRPC_REQUEST(request, root_elem);
- }
- xml_elem_free(root_elem);
- }
- else {
- if(error.parser_error) {
- XMLRPC_RequestSetError (request, map_expat_errors (&error));
- }
- }
- }
-
- return request;
-}
-
-/*******/
-
-/*-************************
-* End Serialization Funcs *
-**************************/
-
-
-
-/****f* VALUE/XMLRPC_CreateValueEmpty
- * NAME
- * XMLRPC_CreateValueEmpty
- * SYNOPSIS
- * XMLRPC_VALUE XMLRPC_CreateValueEmpty ()
- * FUNCTION
- * Create an XML value to be used/modified elsewhere.
- * INPUTS
- * RESULT
- * XMLRPC_VALUE. The new value, or NULL on failure.
- * SEE ALSO
- * XMLRPC_CleanupValue ()
- * XMLRPC_VALUE
- * SOURCE
- */
-XMLRPC_VALUE XMLRPC_CreateValueEmpty() {
- XMLRPC_VALUE v = calloc(1, sizeof(STRUCT_XMLRPC_VALUE));
- if(v) {
-#ifdef XMLRPC_DEBUG_REFCOUNT
- printf ("calloc'd 0x%x\n", v);
-#endif
- v->type = xmlrpc_empty;
- simplestring_init(&v->id);
- simplestring_init(&v->str);
- }
- return v;
-}
-
-/*******/
-
-/****f* VALUE/XMLRPC_SetValueID_Case
- * NAME
- * XMLRPC_SetValueID_Case
- * SYNOPSIS
- * const char *XMLRPC_SetValueID_Case(XMLRPC_VALUE value, const char* id, int len, XMLRPC_CASE id_case)
- * FUNCTION
- * Assign an ID (key) to an XMLRPC value.
- * INPUTS
- * value The xml value who's ID we will set.
- * id The desired new id.
- * len length of id string if known, or 0 if unknown.
- * id_case one of XMLRPC_CASE
- * RESULT
- * const char* pointer to the newly allocated id string, or NULL
- * SEE ALSO
- * XMLRPC_SetValueID ()
- * XMLRPC_GetValueID ()
- * XMLRPC_VALUE
- * XMLRPC_CASE
- * SOURCE
- */
-const char *XMLRPC_SetValueID_Case(XMLRPC_VALUE value, const char* id, int len, XMLRPC_CASE id_case) {
- const char* pRetval = NULL;
- if(value) {
- if(id) {
- simplestring_clear(&value->id);
- (len > 0) ? simplestring_addn(&value->id, id, len) :
- simplestring_add(&value->id, id);
-
- /* upper or lower case string in place if required. could be a seperate func. */
- if(id_case == xmlrpc_case_lower || id_case == xmlrpc_case_upper) {
- int i;
- for(i = 0; i < value->id.len; i++) {
- value->id.str[i] =
- (id_case ==
- xmlrpc_case_lower) ? tolower (value->id.
- str[i]) : toupper (value->
- id.
- str[i]);
- }
- }
-
- pRetval = value->id.str;
-
-#ifdef XMLRPC_DEBUG_REFCOUNT
- printf("set value id: %s\n", pRetval);
-#endif
- }
- }
-
- return pRetval;
-}
-
-/*******/
-
-
-/****f* VALUE/XMLRPC_SetValueString
- * NAME
- * XMLRPC_SetValueString
- * SYNOPSIS
- * const char *XMLRPC_SetValueString(XMLRPC_VALUE value, const char* val, int len)
- * FUNCTION
- * Assign a string value to an XMLRPC_VALUE, and set it to type xmlrpc_string
- * INPUTS
- * value The xml value who's ID we will set.
- * val The desired new string val.
- * len length of val string if known, or 0 if unknown.
- * RESULT
- * const char* pointer to the newly allocated value string, or NULL
- * SEE ALSO
- * XMLRPC_GetValueString ()
- * XMLRPC_VALUE
- * XMLRPC_VALUE_TYPE
- * SOURCE
- */
-const char *XMLRPC_SetValueString(XMLRPC_VALUE value, const char* val, int len) {
- char *pRetval = NULL;
- if(value && val) {
- simplestring_clear(&value->str);
- (len > 0) ? simplestring_addn(&value->str, val, len) :
- simplestring_add(&value->str, val);
- value->type = xmlrpc_string;
- pRetval = (char *)value->str.str;
- }
-
- return pRetval;
-}
-
-/*******/
-
-/****f* VALUE/XMLRPC_SetValueInt
- * NAME
- * XMLRPC_SetValueInt
- * SYNOPSIS
- * void XMLRPC_SetValueInt(XMLRPC_VALUE value, int val)
- * FUNCTION
- * Assign an int value to an XMLRPC_VALUE, and set it to type xmlrpc_int
- * INPUTS
- * value The xml value who's ID we will set.
- * val The desired new integer value
- * RESULT
- * SEE ALSO
- * XMLRPC_GetValueInt ()
- * XMLRPC_VALUE
- * XMLRPC_VALUE_TYPE
- * SOURCE
- */
-void XMLRPC_SetValueInt(XMLRPC_VALUE value, int val) {
- if(value) {
- value->type = xmlrpc_int;
- value->i = val;
- }
-}
-
-/*******/
-
-/****f* VALUE/XMLRPC_SetValueBoolean
- * NAME
- * XMLRPC_SetValueBoolean
- * SYNOPSIS
- * void XMLRPC_SetValueBoolean(XMLRPC_VALUE value, int val)
- * FUNCTION
- * Assign a boolean value to an XMLRPC_VALUE, and set it to type xmlrpc_boolean
- * INPUTS
- * value The xml value who's value we will set.
- * val The desired new boolean value. [0 | 1]
- * RESULT
- * SEE ALSO
- * XMLRPC_GetValueBoolean ()
- * XMLRPC_VALUE
- * XMLRPC_VALUE_TYPE
- * SOURCE
- */
-void XMLRPC_SetValueBoolean(XMLRPC_VALUE value, int val) {
- if(value) {
- value->type = xmlrpc_boolean;
- value->i = val ? 1 : 0;
- }
-}
-
-/*******/
-
-
-/****f* VECTOR/XMLRPC_SetIsVector
- * NAME
- * XMLRPC_SetIsVector
- * SYNOPSIS
- * int XMLRPC_SetIsVector(XMLRPC_VALUE value, XMLRPC_VECTOR_TYPE type)
- * FUNCTION
- * Set the XMLRPC_VALUE to be a vector (list) type. The vector may be one of
- * [xmlrpc_array | xmlrpc_struct | xmlrpc_mixed]. An array has only index values.
- * A struct has key/val pairs. Mixed allows both index and key/val combinations.
- * INPUTS
- * value The xml value who's vector type we will set
- * type New type of vector as enumerated by XMLRPC_VECTOR_TYPE
- * RESULT
- * int 1 if successful, 0 otherwise
- * SEE ALSO
- * XMLRPC_GetValueType ()
- * XMLRPC_GetVectorType ()
- * XMLRPC_VALUE
- * XMLRPC_VECTOR_TYPE
- * XMLRPC_VALUE_TYPE
- * SOURCE
- */
-int XMLRPC_SetIsVector(XMLRPC_VALUE value, XMLRPC_VECTOR_TYPE type) {
- int bSuccess = 0;
-
- if (value) {
- /* we can change the type so long as nothing is currently stored. */
- if(value->type == xmlrpc_vector) {
- if(value->v) {
- if(!Q_Size(value->v->q)) {
- value->v->type = type;
- }
- }
- }
- else {
- value->v = calloc(1, sizeof(STRUCT_XMLRPC_VECTOR));
- if(value->v) {
- value->v->q = (queue*)malloc(sizeof(queue));
- if(value->v->q) {
- Q_Init(value->v->q);
- value->v->type = type;
- value->type = xmlrpc_vector;
- bSuccess = 1;
- }
- }
- }
- }
-
- return bSuccess;
-}
-
-/*******/
-
-/****f* VECTOR/XMLRPC_CreateVector
- * NAME
- * XMLRPC_CreateVector
- * SYNOPSIS
- * XMLRPC_VALUE XMLRPC_CreateVector(const char* id, XMLRPC_VECTOR_TYPE type)
- * FUNCTION
- * Create a new vector and optionally set an id.
- * INPUTS
- * id The id of the vector, or NULL
- * type New type of vector as enumerated by XMLRPC_VECTOR_TYPE
- * RESULT
- * XMLRPC_VALUE The new vector, or NULL on failure.
- * SEE ALSO
- * XMLRPC_CreateValueEmpty ()
- * XMLRPC_SetIsVector ()
- * XMLRPC_GetValueType ()
- * XMLRPC_GetVectorType ()
- * XMLRPC_VALUE
- * XMLRPC_VECTOR_TYPE
- * XMLRPC_VALUE_TYPE
- * SOURCE
- */
-XMLRPC_VALUE XMLRPC_CreateVector(const char* id, XMLRPC_VECTOR_TYPE type) {
- XMLRPC_VALUE val = NULL;
-
- val = XMLRPC_CreateValueEmpty();
- if(val) {
- if(XMLRPC_SetIsVector(val, type)) {
- if(id) {
- const char *pSVI = NULL;
-
- pSVI = XMLRPC_SetValueID(val, id, 0);
- if(NULL == pSVI) {
- val = NULL;
- }
- }
- }
- else {
- val = NULL;
- }
- }
- return val;
-}
-
-/*******/
-
-
-/* Not yet implemented.
- *
- * This should use a hash to determine if a given target id has already
- * been appended.
- *
- * Alternately, it could walk the entire vector, but that could be quite
- * slow for very large lists.
- */
-static int isDuplicateEntry(XMLRPC_VALUE target, XMLRPC_VALUE source) {
- return 0;
-}
-
-/****f* VECTOR/XMLRPC_AddValueToVector
- * NAME
- * XMLRPC_AddValueToVector
- * SYNOPSIS
- * int XMLRPC_AddValueToVector(XMLRPC_VALUE target, XMLRPC_VALUE source)
- * FUNCTION
- * Add (append) an existing XMLRPC_VALUE to a vector.
- * INPUTS
- * target The target vector
- * source The source value to append
- * RESULT
- * int 1 if successful, else 0
- * SEE ALSO
- * XMLRPC_AddValuesToVector ()
- * XMLRPC_VectorGetValueWithID_Case ()
- * XMLRPC_VALUE
- * NOTES
- * The function will fail and return 0 if an attempt is made to add
- * a value with an ID into a vector of type xmlrpc_vector_array. Such
- * values can only be added to xmlrpc_vector_struct.
- * SOURCE
- */
-int XMLRPC_AddValueToVector(XMLRPC_VALUE target, XMLRPC_VALUE source) {
- if(target && source) {
- if(target->type == xmlrpc_vector && target->v &&
- target->v->q && target->v->type != xmlrpc_vector_none) {
-
- /* guard against putting value of unknown type into vector */
- switch(source->type) {
- case xmlrpc_empty:
- case xmlrpc_base64:
- case xmlrpc_boolean:
- case xmlrpc_datetime:
- case xmlrpc_double:
- case xmlrpc_int:
- case xmlrpc_string:
- case xmlrpc_vector:
- /* Guard against putting a key/val pair into an array vector */
- if( !(source->id.len && target->v->type == xmlrpc_vector_array) ) {
- if (isDuplicateEntry (target, source)
- || Q_PushTail (target->v->q, XMLRPC_CopyValue (source))) {
- return 1;
- }
- }
- else {
- 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");
- break;
- }
- }
- }
- return 0;
-}
-
-/*******/
-
-
-/****f* VECTOR/XMLRPC_AddValuesToVector
- * NAME
- * XMLRPC_AddValuesToVector
- * SYNOPSIS
- * XMLRPC_AddValuesToVector ( target, val1, val2, val3, val(n), 0 )
- * XMLRPC_AddValuesToVector( XMLRPC_VALUE, ... )
- * FUNCTION
- * Add (append) a series of existing XMLRPC_VALUE to a vector.
- * INPUTS
- * target The target vector
- * ... The source value(s) to append. The last item *must* be 0.
- * RESULT
- * int 1 if successful, else 0
- * SEE ALSO
- * XMLRPC_AddValuesToVector ()
- * XMLRPC_VectorGetValueWithID_Case ()
- * XMLRPC_VALUE
- * NOTES
- * This function may actually return failure after it has already modified
- * or added items to target. You can not trust the state of target
- * if this function returns failure.
- * SOURCE
- */
-int XMLRPC_AddValuesToVector(XMLRPC_VALUE target, ...) {
- int iRetval = 0;
-
- if(target) {
- if(target->type == xmlrpc_vector) {
- XMLRPC_VALUE v = NULL;
- va_list vl;
-
- va_start(vl, target);
-
- do {
- v = va_arg(vl, XMLRPC_VALUE);
- if(v) {
- if(!XMLRPC_AddValueToVector(target, v)) {
- iRetval = 0;
- break;
- }
- }
- }
- while (v);
-
- va_end(vl);
-
- if(NULL == v) {
- iRetval = 1;
- }
- }
- }
- return iRetval;
-}
-
-/*******/
-
-
-/****f* VECTOR/XMLRPC_VectorGetValueWithID_Case
- * NAME
- * XMLRPC_VectorGetValueWithID_Case
- * SYNOPSIS
- * XMLRPC_VALUE XMLRPC_VectorGetValueWithID_Case(XMLRPC_VALUE vector, const char* id, XMLRPC_CASE_COMPARISON id_case)
- * FUNCTION
- * Get value from vector matching id (key)
- * INPUTS
- * vector The source vector
- * id The key to find
- * id_case Rule for how to match key
- * RESULT
- * int 1 if successful, else 0
- * SEE ALSO
- * XMLRPC_SetValueID_Case ()
- * XMLRPC_VALUE
- * XMLRPC_CASE_COMPARISON
- * SOURCE
- */
-XMLRPC_VALUE XMLRPC_VectorGetValueWithID_Case (XMLRPC_VALUE vector, const char *id,
- XMLRPC_CASE_COMPARISON id_case) {
- if(vector && vector->v && vector->v->q) {
- q_iter qi = Q_Iter_Head_F(vector->v->q);
-
- while(qi) {
- XMLRPC_VALUE xIter = Q_Iter_Get_F(qi);
- if(xIter && xIter->id.str) {
- if(id_case == xmlrpc_case_sensitive) {
- if(!strcmp(xIter->id.str, id)) {
- return xIter;
- }
- }
- else if(id_case == xmlrpc_case_insensitive) {
- if(!strcasecmp(xIter->id.str, id)) {
- return xIter;
- }
- }
- }
- qi = Q_Iter_Next_F(qi);
- }
- }
- return NULL;
-}
-
-/*******/
-
-
-int XMLRPC_VectorRemoveValue(XMLRPC_VALUE vector, XMLRPC_VALUE value) {
- if(vector && vector->v && vector->v->q && value) {
- q_iter qi = Q_Iter_Head_F(vector->v->q);
-
- while(qi) {
- XMLRPC_VALUE xIter = Q_Iter_Get_F(qi);
- if(xIter == value) {
- XMLRPC_CleanupValue(xIter);
- Q_Iter_Del(vector->v->q, qi);
- return 1;
- }
- qi = Q_Iter_Next_F(qi);
- }
- }
- return 0;
-}
-
-
-/****f* VALUE/XMLRPC_CreateValueString
- * NAME
- * XMLRPC_CreateValueString
- * SYNOPSIS
- * XMLRPC_VALUE XMLRPC_CreateValueString(const char* id, const char* val, int len)
- * FUNCTION
- * Create an XMLRPC_VALUE, and assign a string to it
- * INPUTS
- * id The id of the value, or NULL
- * val The desired new string val.
- * len length of val string if known, or 0 if unknown.
- * RESULT
- * newly allocated XMLRPC_VALUE, or NULL
- * SEE ALSO
- * XMLRPC_GetValueString ()
- * XMLRPC_CreateValueEmpty ()
- * XMLRPC_VALUE
- * XMLRPC_VALUE_TYPE
- * SOURCE
- */
-XMLRPC_VALUE XMLRPC_CreateValueString(const char* id, const char* val, int len) {
- XMLRPC_VALUE value = NULL;
- if(val) {
- value = XMLRPC_CreateValueEmpty();
- if(value) {
- XMLRPC_SetValueString(value, val, len);
- if(id) {
- XMLRPC_SetValueID(value, id, 0);
- }
- }
- }
- return value;
-}
-
-/*******/
-
-/****f* VALUE/XMLRPC_CreateValueInt
- * NAME
- * XMLRPC_CreateValueInt
- * SYNOPSIS
- * XMLRPC_VALUE XMLRPC_CreateValueInt(const char* id, int i)
- * FUNCTION
- * Create an XMLRPC_VALUE, and assign an int to it
- * INPUTS
- * id The id of the value, or NULL
- * i The desired new int val.
- * RESULT
- * newly allocated XMLRPC_VALUE, or NULL
- * SEE ALSO
- * XMLRPC_GetValueInt ()
- * XMLRPC_CreateValueEmpty ()
- * XMLRPC_VALUE
- * XMLRPC_VALUE_TYPE
- * SOURCE
- */
-XMLRPC_VALUE XMLRPC_CreateValueInt(const char* id, int i) {
- XMLRPC_VALUE val = XMLRPC_CreateValueEmpty();
- if(val) {
- XMLRPC_SetValueInt(val, i);
- if(id) {
- XMLRPC_SetValueID(val, id, 0);
- }
- }
- return val;
-}
-
-/*******/
-
-/****f* VALUE/XMLRPC_CreateValueBoolean
- * NAME
- * XMLRPC_CreateValueBoolean
- * SYNOPSIS
- * XMLRPC_VALUE XMLRPC_CreateValueBoolean(const char* id, int i)
- * FUNCTION
- * Create an XMLRPC_VALUE, and assign an int to it
- * INPUTS
- * id The id of the value, or NULL
- * i The desired new int val.
- * RESULT
- * newly allocated XMLRPC_VALUE, or NULL
- * SEE ALSO
- * XMLRPC_GetValueBoolean ()
- * XMLRPC_CreateValueEmpty ()
- * XMLRPC_VALUE
- * XMLRPC_VALUE_TYPE
- * SOURCE
- */
-XMLRPC_VALUE XMLRPC_CreateValueBoolean(const char* id, int i) {
- XMLRPC_VALUE val = XMLRPC_CreateValueEmpty();
- if(val) {
- XMLRPC_SetValueBoolean(val, i);
- if(id) {
- XMLRPC_SetValueID(val, id, 0);
- }
- }
- return val;
-}
-
-/*******/
-
-
-/****f* VALUE/XMLRPC_CleanupValue
- * NAME
- * XMLRPC_CleanupValue
- * SYNOPSIS
- * void XMLRPC_CleanupValue(XMLRPC_VALUE value)
- * FUNCTION
- * Frees all memory allocated for an XMLRPC_VALUE and any of its children (if a vector)
- * INPUTS
- * value The id of the value to be cleaned up.
- * RESULT
- * void
- * NOTES
- * Normally this function will be called for the topmost vector, thus free-ing
- * all children. If a child of a vector is free'd first, results are undefined.
- * Failure to call this function *will* cause memory leaks.
- *
- * Also, this function is implemented using reference counting. Thus a value
- * may be added and freed from multiple parents so long as a reference is added
- * first using XMLRPC_CopyValue()
- * SEE ALSO
- * XMLRPC_RequestFree ()
- * XMLRPC_CreateValueEmpty ()
- * XMLRPC_CopyValue()
- * XMLRPC_VALUE
- * SOURCE
- */
-void XMLRPC_CleanupValue(XMLRPC_VALUE value) {
- if(value) {
- if(value->iRefCount > 0) {
- value->iRefCount --;
- }
-
-#ifdef XMLRPC_DEBUG_REFCOUNT
- if(value->id.str) {
- printf ("decremented refcount of %s, now %i\n", value->id.str,
- value->iRefCount);
- }
- else {
- printf ("decremented refcount of 0x%x, now %i\n", value,
- value->iRefCount);
- }
-#endif
-
- if(value->type == xmlrpc_vector) {
- if(value->v) {
- if(value->iRefCount == 0) {
- XMLRPC_VALUE cur = (XMLRPC_VALUE)Q_Head(value->v->q);
- while( cur ) {
- XMLRPC_CleanupValue(cur);
-
- /* Make sure some idiot didn't include a vector as a child of itself
- * and thus it would have already free'd these.
- */
- if(value->v && value->v->q) {
- cur = Q_Next(value->v->q);
- }
- else {
- break;
- }
- }
-
- Q_Destroy(value->v->q);
- my_free(value->v->q);
- my_free(value->v);
- }
- }
- }
-
-
- if(value->iRefCount == 0) {
-
- /* guard against freeing invalid types */
- switch(value->type) {
- case xmlrpc_empty:
- case xmlrpc_base64:
- case xmlrpc_boolean:
- case xmlrpc_datetime:
- case xmlrpc_double:
- case xmlrpc_int:
- case xmlrpc_string:
- case xmlrpc_vector:
-#ifdef XMLRPC_DEBUG_REFCOUNT
- if(value->id.str) {
- printf("free'd %s\n", value->id.str);
- }
- else {
- printf("free'd 0x%x\n", value);
- }
-#endif
- simplestring_free(&value->id);
- simplestring_free(&value->str);
-
- memset(value, 0, sizeof(STRUCT_XMLRPC_VALUE));
- my_free(value);
- break;
- default:
- fprintf (stderr,
- "xmlrpc: attempted to free value of invalid type\n");
- break;
- }
- }
- }
-}
-
-/*******/
-
-
-/****f* VALUE/XMLRPC_SetValueDateTime
- * NAME
- * XMLRPC_SetValueDateTime
- * SYNOPSIS
- * void XMLRPC_SetValueDateTime(XMLRPC_VALUE value, time_t time)
- * FUNCTION
- * Assign time value to XMLRPC_VALUE
- * INPUTS
- * value The target XMLRPC_VALUE
- * time The desired new unix time value (time_t)
- * RESULT
- * void
- * SEE ALSO
- * XMLRPC_GetValueDateTime ()
- * XMLRPC_SetValueDateTime_ISO8601 ()
- * XMLRPC_CreateValueDateTime ()
- * XMLRPC_VALUE
- * SOURCE
- */
-void XMLRPC_SetValueDateTime(XMLRPC_VALUE value, time_t time) {
- if(value) {
- char timeBuf[30];
- value->type = xmlrpc_datetime;
- value->i = time;
-
- timeBuf[0] = 0;
-
- date_to_ISO8601(time, timeBuf, sizeof(timeBuf));
-
- if(timeBuf[0]) {
- simplestring_clear(&value->str);
- simplestring_add(&value->str, timeBuf);
- }
- }
-}
-
-/*******/
-
-/****f* VALUE/XMLRPC_CopyValue
- * NAME
- * XMLRPC_CopyValue
- * SYNOPSIS
- * XMLRPC_VALUE XMLRPC_CopyValue(XMLRPC_VALUE value)
- * FUNCTION
- * Make a copy (reference) of an XMLRPC_VALUE
- * INPUTS
- * value The target XMLRPC_VALUE
- * RESULT
- * XMLRPC_VALUE -- address of the copy
- * SEE ALSO
- * XMLRPC_CleanupValue ()
- * XMLRPC_DupValueNew ()
- * NOTES
- * This function is implemented via reference counting, so the
- * returned value is going to be the same as the passed in value.
- * The value must be freed the same number of times it is copied
- * or there will be a memory leak.
- * SOURCE
- */
-XMLRPC_VALUE XMLRPC_CopyValue(XMLRPC_VALUE value) {
- if(value) {
- value->iRefCount ++;
-#ifdef XMLRPC_DEBUG_REFCOUNT
- if(value->id.str) {
- printf ("incremented refcount of %s, now %i\n", value->id.str,
- value->iRefCount);
- }
- else {
- printf ("incremented refcount of 0x%x, now %i\n", value,
- value->iRefCount);
- }
-#endif
- }
- return value;
-}
-
-/*******/
-
-
-/****f* VALUE/XMLRPC_DupValueNew
- * NAME
- * XMLRPC_DupValueNew
- * SYNOPSIS
- * XMLRPC_VALUE XMLRPC_DupValueNew(XMLRPC_VALUE value)
- * FUNCTION
- * Make a duplicate (non reference) of an XMLRPC_VALUE with newly allocated mem.
- * INPUTS
- * value The source XMLRPC_VALUE to duplicate
- * RESULT
- * XMLRPC_VALUE -- address of the duplicate value
- * SEE ALSO
- * XMLRPC_CleanupValue ()
- * XMLRPC_CopyValue ()
- * NOTES
- * Use this when function when you need to modify the contents of
- * the copied value seperately from the original.
- *
- * this function is recursive, thus the value and all of its children
- * (if any) will be duplicated.
- * SOURCE
- */
-XMLRPC_VALUE XMLRPC_DupValueNew (XMLRPC_VALUE xSource) {
- XMLRPC_VALUE xReturn = NULL;
- if (xSource) {
- xReturn = XMLRPC_CreateValueEmpty ();
- if (xSource->id.len) {
- XMLRPC_SetValueID (xReturn, xSource->id.str, xSource->id.len);
- }
-
- switch (xSource->type) {
- case xmlrpc_int:
- case xmlrpc_boolean:
- XMLRPC_SetValueInt (xReturn, xSource->i);
- break;
- case xmlrpc_string:
- case xmlrpc_base64:
- XMLRPC_SetValueString (xReturn, xSource->str.str, xSource->str.len);
- break;
- case xmlrpc_datetime:
- XMLRPC_SetValueDateTime (xReturn, xSource->i);
- break;
- case xmlrpc_double:
- XMLRPC_SetValueDouble (xReturn, xSource->d);
- break;
- case xmlrpc_vector:
- {
- q_iter qi = Q_Iter_Head_F (xSource->v->q);
- XMLRPC_SetIsVector (xReturn, xSource->v->type);
-
- while (qi) {
- XMLRPC_VALUE xIter = Q_Iter_Get_F (qi);
- XMLRPC_AddValueToVector (xReturn, XMLRPC_DupValueNew (xIter));
- qi = Q_Iter_Next_F (qi);
- }
- }
- break;
- default:
- break;
- }
- }
- return xReturn;
-}
-
-/*******/
-
-
-
-/****f* VALUE/XMLRPC_CreateValueDateTime
- * NAME
- * XMLRPC_CreateValueDateTime
- * SYNOPSIS
- * XMLRPC_VALUE XMLRPC_CreateValueDateTime(const char* id, time_t time)
- * FUNCTION
- * Create new datetime value from time_t
- * INPUTS
- * id id of the new value, or NULL
- * time The desired unix time value (time_t)
- * RESULT
- * void
- * SEE ALSO
- * XMLRPC_GetValueDateTime ()
- * XMLRPC_SetValueDateTime ()
- * XMLRPC_CreateValueDateTime_ISO8601 ()
- * XMLRPC_VALUE
- * SOURCE
- */
-XMLRPC_VALUE XMLRPC_CreateValueDateTime(const char* id, time_t time) {
- XMLRPC_VALUE val = XMLRPC_CreateValueEmpty();
- if(val) {
- XMLRPC_SetValueDateTime(val, time);
- if(id) {
- XMLRPC_SetValueID(val, id, 0);
- }
- }
- return val;
-}
-
-/*******/
-
-
-/****f* VALUE/XMLRPC_SetValueDateTime_ISO8601
- * NAME
- * XMLRPC_SetValueDateTime_ISO8601
- * SYNOPSIS
- * void XMLRPC_SetValueDateTime_ISO8601(XMLRPC_VALUE value, const char* s)
- * FUNCTION
- * Set datetime value from IS08601 encoded string
- * INPUTS
- * value The target XMLRPC_VALUE
- * s The desired new time value
- * RESULT
- * void
- * BUGS
- * This function currently attempts to convert the time string to a valid unix time
- * value before passing it. Behavior when the string is invalid or out of range
- * is not well defined, but will probably result in Jan 1, 1970 (0) being passed.
- * SEE ALSO
- * XMLRPC_GetValueDateTime_ISO8601 ()
- * XMLRPC_CreateValueDateTime_ISO8601 ()
- * XMLRPC_CreateValueDateTime ()
- * XMLRPC_VALUE
- * SOURCE
- */
-void XMLRPC_SetValueDateTime_ISO8601(XMLRPC_VALUE value, const char* s) {
- if(value) {
- time_t time_val = 0;
- if(s) {
- date_from_ISO8601(s, &time_val);
- XMLRPC_SetValueDateTime(value, time_val);
- }
- }
-}
-
-/*******/
-
-/****f* VALUE/XMLRPC_CreateValueDateTime_ISO8601
- * NAME
- * XMLRPC_CreateValueDateTime_ISO8601
- * SYNOPSIS
- * XMLRPC_VALUE XMLRPC_CreateValueDateTime_ISO8601(const char* id, const char *s)
- * FUNCTION
- * Create datetime value from IS08601 encoded string
- * INPUTS
- * id The id of the new value, or NULL
- * s The desired new time value
- * RESULT
- * newly allocated XMLRPC_VALUE, or NULL if no value created.
- * BUGS
- * See XMLRPC_SetValueDateTime_ISO8601 ()
- * SEE ALSO
- * XMLRPC_GetValueDateTime_ISO8601 ()
- * XMLRPC_SetValueDateTime_ISO8601 ()
- * XMLRPC_CreateValueDateTime ()
- * XMLRPC_VALUE
- * SOURCE
- */
-XMLRPC_VALUE XMLRPC_CreateValueDateTime_ISO8601(const char* id, const char *s) {
- XMLRPC_VALUE val = XMLRPC_CreateValueEmpty();
- if(val) {
- XMLRPC_SetValueDateTime_ISO8601(val, s);
- if(id) {
- XMLRPC_SetValueID(val, id, 0);
- }
- }
- return val;
-}
-
-/*******/
-
-
-/****f* VALUE/XMLRPC_SetValueBase64
- * NAME
- * XMLRPC_SetValueBase64
- * SYNOPSIS
- * void XMLRPC_SetValueBase64(XMLRPC_VALUE value, const char* s, int len)
- * FUNCTION
- * Set base64 value. Base64 is useful for transferring binary data, such as an image.
- * INPUTS
- * value The target XMLRPC_VALUE
- * s The desired new binary value
- * len The length of s, or NULL. If buffer is not null terminated, len *must* be passed.
- * RESULT
- * void
- * NOTES
- * Data is set/stored/retrieved as passed in, but is base64 encoded for XML transfer, and
- * decoded on the other side. This is transparent to the caller.
- * SEE ALSO
- * XMLRPC_GetValueBase64 ()
- * XMLRPC_CreateValueBase64 ()
- * XMLRPC_VALUE
- * SOURCE
- */
-void XMLRPC_SetValueBase64(XMLRPC_VALUE value, const char* s, int len) {
- if(value && s) {
- simplestring_clear(&value->str);
- (len > 0) ? simplestring_addn(&value->str, s, len) :
- simplestring_add(&value->str, s);
- value->type = xmlrpc_base64;
- }
-}
-
-/*******/
-
-
-/****f* VALUE/XMLRPC_CreateValueBase64
- * NAME
- * XMLRPC_CreateValueBase64
- * SYNOPSIS
- * XMLRPC_VALUE XMLRPC_CreateValueBase64(const char* id, const char* s, int len)
- * FUNCTION
- * Create base64 value. Base64 is useful for transferring binary data, such as an image.
- * INPUTS
- * id id of the new value, or NULL
- * s The desired new binary value
- * len The length of s, or NULL. If buffer is not null terminated, len *must* be passed.
- * RESULT
- * newly allocated XMLRPC_VALUE, or NULL if error
- * NOTES
- * See XMLRPC_SetValueBase64 ()
- * SEE ALSO
- * XMLRPC_GetValueBase64 ()
- * XMLRPC_SetValueBase64 ()
- * XMLRPC_VALUE
- * SOURCE
- */
-XMLRPC_VALUE XMLRPC_CreateValueBase64(const char* id, const char* s, int len) {
- XMLRPC_VALUE val = XMLRPC_CreateValueEmpty();
- if(val) {
- XMLRPC_SetValueBase64(val, s, len);
- if(id) {
- XMLRPC_SetValueID(val, id, 0);
- }
- }
- return val;
-}
-
-/*******/
-
-/****f* VALUE/XMLRPC_SetValueDouble
- * NAME
- * XMLRPC_SetValueDouble
- * SYNOPSIS
- * void XMLRPC_SetValueDouble(XMLRPC_VALUE value, double val)
- * FUNCTION
- * Set double (floating point) value.
- * INPUTS
- * value The target XMLRPC_VALUE
- * val The desired new double value
- * RESULT
- * void
- * SEE ALSO
- * XMLRPC_GetValueDouble ()
- * XMLRPC_CreateValueDouble ()
- * XMLRPC_VALUE
- * SOURCE
- */
-void XMLRPC_SetValueDouble(XMLRPC_VALUE value, double val) {
- if(value) {
- value->type = xmlrpc_double;
- value->d = val;
- }
-}
-
-/*******/
-
-/****f* VALUE/XMLRPC_CreateValueDouble
- * NAME
- * XMLRPC_CreateValueDouble
- * SYNOPSIS
- * XMLRPC_VALUE XMLRPC_CreateValueDouble(const char* id, double d)
- * FUNCTION
- * Create double (floating point) value.
- * INPUTS
- * id id of the newly created value, or NULL
- * d The desired new double value
- * RESULT
- * void
- * SEE ALSO
- * XMLRPC_GetValueDouble ()
- * XMLRPC_CreateValueDouble ()
- * XMLRPC_VALUE
- * SOURCE
- */
-XMLRPC_VALUE XMLRPC_CreateValueDouble(const char* id, double d) {
- XMLRPC_VALUE val = XMLRPC_CreateValueEmpty();
- if(val) {
- XMLRPC_SetValueDouble(val, d);
- if(id) {
- XMLRPC_SetValueID(val, id, 0);
- }
- }
- return val;
-}
-
-/*******/
-
-/****f* VALUE/XMLRPC_GetValueString
- * NAME
- * XMLRPC_GetValueString
- * SYNOPSIS
- * const char* XMLRPC_GetValueString(XMLRPC_VALUE value)
- * FUNCTION
- * retrieve string value
- * INPUTS
- * value source XMLRPC_VALUE of type xmlrpc_string
- * RESULT
- * void
- * SEE ALSO
- * XMLRPC_SetValueString ()
- * XMLRPC_GetValueType ()
- * XMLRPC_VALUE
- * SOURCE
- */
-const char* XMLRPC_GetValueString(XMLRPC_VALUE value) {
- return ((value && value->type == xmlrpc_string) ? value->str.str : 0);
-}
-
-/*******/
-
-/****f* VALUE/XMLRPC_GetValueStringLen
- * NAME
- * XMLRPC_GetValueStringLen
- * SYNOPSIS
- * int XMLRPC_GetValueStringLen(XMLRPC_VALUE value)
- * FUNCTION
- * determine length of string value
- * INPUTS
- * value XMLRPC_VALUE of type xmlrpc_string
- * RESULT
- * length of string, or 0
- * NOTES
- * SEE ALSO
- * XMLRPC_SetValueString ()
- * XMLRPC_GetValueString ()
- * SOURCE
- */
-int XMLRPC_GetValueStringLen(XMLRPC_VALUE value) {
- return ((value) ? value->str.len : 0);
-}
-
-/*******/
-
-/****f* VALUE/XMLRPC_GetValueInt
- * NAME
- * XMLRPC_GetValueInt
- * SYNOPSIS
- * int XMLRPC_GetValueInt(XMLRPC_VALUE value)
- * FUNCTION
- * retrieve integer value.
- * INPUTS
- * value XMLRPC_VALUE of type xmlrpc_int
- * RESULT
- * integer value or 0 if value is not valid int
- * NOTES
- * use XMLRPC_GetValueType () to be sure if 0 is real return value or not
- * SEE ALSO
- * XMLRPC_SetValueInt ()
- * XMLRPC_CreateValueInt ()
- * SOURCE
- */
-int XMLRPC_GetValueInt(XMLRPC_VALUE value) {
- return ((value && value->type == xmlrpc_int) ? value->i : 0);
-}
-
-/*******/
-
-/****f* VALUE/XMLRPC_GetValueBoolean
- * NAME
- * XMLRPC_GetValueBoolean
- * SYNOPSIS
- * int XMLRPC_GetValueBoolean(XMLRPC_VALUE value)
- * FUNCTION
- * retrieve boolean value.
- * INPUTS
- * XMLRPC_VALUE of type xmlrpc_boolean
- * RESULT
- * boolean value or 0 if value is not valid boolean
- * NOTES
- * use XMLRPC_GetValueType() to be sure if 0 is real value or not
- * SEE ALSO
- * XMLRPC_SetValueBoolean ()
- * XMLRPC_CreateValueBoolean ()
- * SOURCE
- */
-int XMLRPC_GetValueBoolean(XMLRPC_VALUE value) {
- return ((value && value->type == xmlrpc_boolean) ? value->i : 0);
-}
-
-/*******/
-
-/****f* VALUE/XMLRPC_GetValueDouble
- * NAME
- * XMLRPC_GetValueDouble
- * SYNOPSIS
- * double XMLRPC_GetValueDouble(XMLRPC_VALUE value)
- * FUNCTION
- * retrieve double value
- * INPUTS
- * XMLRPC_VALUE of type xmlrpc_double
- * RESULT
- * double value or 0 if value is not valid double.
- * NOTES
- * use XMLRPC_GetValueType() to be sure if 0 is real value or not
- * SEE ALSO
- * XMLRPC_SetValueDouble ()
- * XMLRPC_CreateValueDouble ()
- * SOURCE
- */
-double XMLRPC_GetValueDouble(XMLRPC_VALUE value) {
- return ((value && value->type == xmlrpc_double) ? value->d : 0);
-}
-
-/*******/
-
-/****f* VALUE/XMLRPC_GetValueBase64
- * NAME
- * XMLRPC_GetValueBase64
- * SYNOPSIS
- * const char* XMLRPC_GetValueBase64(XMLRPC_VALUE value)
- * FUNCTION
- * retrieve binary value
- * INPUTS
- * XMLRPC_VALUE of type xmlrpc_base64
- * RESULT
- * pointer to binary value or 0 if value is not valid.
- * SEE ALSO
- * XMLRPC_SetValueBase64 ()
- * XMLRPC_CreateValueBase64 ()
- * NOTES
- * Call XMLRPC_GetValueStringLen() to retrieve real length of binary data. strlen()
- * will not be accurate, as returned data may contain embedded nulls.
- * SOURCE
- */
-const char* XMLRPC_GetValueBase64(XMLRPC_VALUE value) {
- return ((value && value->type == xmlrpc_base64) ? value->str.str : 0);
-}
-
-/*******/
-
-/****f* VALUE/XMLRPC_GetValueDateTime
- * NAME
- * XMLRPC_GetValueDateTime
- * SYNOPSIS
- * time_t XMLRPC_GetValueDateTime(XMLRPC_VALUE value)
- * FUNCTION
- * retrieve time_t value
- * INPUTS
- * XMLRPC_VALUE of type xmlrpc_datetime
- * RESULT
- * time_t value or 0 if value is not valid datetime.
- * NOTES
- * use XMLRPC_GetValueType() to be sure if 0 is real value or not
- * SEE ALSO
- * XMLRPC_SetValueDateTime ()
- * XMLRPC_GetValueDateTime_ISO8601 ()
- * XMLRPC_CreateValueDateTime ()
- * SOURCE
- */
-time_t XMLRPC_GetValueDateTime(XMLRPC_VALUE value) {
- return (time_t)((value && value->type == xmlrpc_datetime) ? value->i : 0);
-}
-
-/*******/
-
-/****f* VALUE/XMLRPC_GetValueDateTime_IOS8601
- * NAME
- * XMLRPC_GetValueDateTime_IOS8601
- * SYNOPSIS
- * const char* XMLRPC_GetValueDateTime_IOS8601(XMLRPC_VALUE value)
- * FUNCTION
- * retrieve ISO8601 formatted time value
- * INPUTS
- * XMLRPC_VALUE of type xmlrpc_datetime
- * RESULT
- * const char* value or 0 if value is not valid datetime.
- * SEE ALSO
- * XMLRPC_SetValueDateTime_IOS8601 ()
- * XMLRPC_GetValueDateTime ()
- * XMLRPC_CreateValueDateTime_IOS8601 ()
- * SOURCE
- */
-const char* XMLRPC_GetValueDateTime_ISO8601(XMLRPC_VALUE value) {
- return ((value && value->type == xmlrpc_datetime) ? value->str.str : 0);
-}
-
-/*******/
-
-/* Get ID (key) of value or NULL */
-/****f* VALUE/XMLRPC_GetValueID
- * NAME
- * XMLRPC_GetValueID
- * SYNOPSIS
- * const char* XMLRPC_GetValueID(XMLRPC_VALUE value)
- * FUNCTION
- * retrieve id (key) of value
- * INPUTS
- * XMLRPC_VALUE of any type
- * RESULT
- * const char* pointer to id of value, or NULL
- * NOTES
- * SEE ALSO
- * XMLRPC_SetValueID()
- * XMLRPC_CreateValueEmpty()
- * SOURCE
- */
-const char* XMLRPC_GetValueID(XMLRPC_VALUE value) {
- return (const char*)((value && value->id.len) ? value->id.str : 0);
-}
-
-/*******/
-
-
-/****f* VECTOR/XMLRPC_VectorSize
- * NAME
- * XMLRPC_VectorSize
- * SYNOPSIS
- * int XMLRPC_VectorSize(XMLRPC_VALUE value)
- * FUNCTION
- * retrieve size of vector
- * INPUTS
- * XMLRPC_VALUE of type xmlrpc_vector
- * RESULT
- * count of items in vector
- * NOTES
- * This is a cheap operation even on large vectors. Vector size is
- * maintained by queue during add/remove ops.
- * SEE ALSO
- * XMLRPC_AddValueToVector ()
- * SOURCE
- */
-int XMLRPC_VectorSize(XMLRPC_VALUE value) {
- int size = 0;
- if(value && value->type == xmlrpc_vector && value->v) {
- size = Q_Size(value->v->q);
- }
- return size;
-}
-
-/*******/
-
-/****f* VECTOR/XMLRPC_VectorRewind
- * NAME
- * XMLRPC_VectorRewind
- * SYNOPSIS
- * XMLRPC_VALUE XMLRPC_VectorRewind(XMLRPC_VALUE value)
- * FUNCTION
- * reset vector to first item
- * INPUTS
- * XMLRPC_VALUE of type xmlrpc_vector
- * RESULT
- * first XMLRPC_VALUE in list, or NULL if empty or error.
- * NOTES
- * Be careful to rewind any vector passed in to you if you expect to
- * iterate through the entire list.
- * SEE ALSO
- * XMLRPC_VectorNext ()
- * SOURCE
- */
-XMLRPC_VALUE XMLRPC_VectorRewind(XMLRPC_VALUE value) {
- XMLRPC_VALUE xReturn = NULL;
- if(value && value->type == xmlrpc_vector && value->v) {
- xReturn = (XMLRPC_VALUE)Q_Head(value->v->q);
- }
- return xReturn;
-}
-
-/*******/
-
-/****f* VECTOR/XMLRPC_VectorNext
- * NAME
- * XMLRPC_VectorNext
- * SYNOPSIS
- * XMLRPC_VALUE XMLRPC_VectorNext(XMLRPC_VALUE value)
- * FUNCTION
- * Iterate vector to next item in list.
- * INPUTS
- * XMLRPC_VALUE of type xmlrpc_vector
- * RESULT
- * Next XMLRPC_VALUE in vector, or NULL if at end.
- * NOTES
- * SEE ALSO
- * XMLRPC_VectorRewind ()
- * SOURCE
- */
-XMLRPC_VALUE XMLRPC_VectorNext(XMLRPC_VALUE value) {
- XMLRPC_VALUE xReturn = NULL;
- if(value && value->type == xmlrpc_vector && value->v) {
- xReturn = (XMLRPC_VALUE)Q_Next(value->v->q);
- }
- return xReturn;
-}
-
-/*******/
-
-/****f* VALUE/XMLRPC_GetValueType
- * NAME
- * XMLRPC_GetValueType
- * SYNOPSIS
- * XMLRPC_VALUE_TYPE XMLRPC_GetValueType(XMLRPC_VALUE value)
- * FUNCTION
- * determine data type of the XMLRPC_VALUE
- * INPUTS
- * XMLRPC_VALUE target of query
- * RESULT
- * data type of value as enumerated by XMLRPC_VALUE_TYPE
- * NOTES
- * all values are of type xmlrpc_empty until set.
- * Deprecated for public use. See XMLRPC_GetValueTypeEasy
- * SEE ALSO
- * XMLRPC_SetValue*
- * XMLRPC_CreateValue*
- * XMLRPC_Append*
- * XMLRPC_GetValueTypeEasy ()
- * SOURCE
- */
-XMLRPC_VALUE_TYPE XMLRPC_GetValueType(XMLRPC_VALUE value) {
- return value ? value->type : xmlrpc_empty;
-}
-
-/*******/
-
-/* Vector type accessor */
-/****f* VALUE/XMLRPC_GetVectorType
- * NAME
- * XMLRPC_GetVectorType
- * SYNOPSIS
- * XMLRPC_VECTOR_TYPE XMLRPC_GetVectorType(XMLRPC_VALUE value)
- * FUNCTION
- * determine vector type of the XMLRPC_VALUE
- * INPUTS
- * XMLRPC_VALUE of type xmlrpc_vector
- * RESULT
- * vector type of value as enumerated by XMLRPC_VECTOR_TYPE.
- * xmlrpc_none if not a value.
- * NOTES
- * xmlrpc_none is returned if value is not a vector
- * Deprecated for public use. See XMLRPC_GetValueTypeEasy
- * SEE ALSO
- * XMLRPC_SetIsVector ()
- * XMLRPC_GetValueType ()
- * XMLRPC_GetValueTypeEasy ()
- * SOURCE
- */
-XMLRPC_VECTOR_TYPE XMLRPC_GetVectorType(XMLRPC_VALUE value) {
- return(value && value->v) ? value->v->type : xmlrpc_none;
-}
-
-/*******/
-
-/****f* VALUE/XMLRPC_GetValueTypeEasy
- * NAME
- * XMLRPC_GetValueTypeEasy
- * SYNOPSIS
- * XMLRPC_VALUE_TYPE_EASY XMLRPC_GetValueTypeEasy(XMLRPC_VALUE value)
- * FUNCTION
- * determine data type of the XMLRPC_VALUE. includes vector types.
- * INPUTS
- * XMLRPC_VALUE target of query
- * RESULT
- * data type of value as enumerated by XMLRPC_VALUE_TYPE_EASY
- * xmlrpc_type_none if not a value.
- * NOTES
- * all values are of type xmlrpc_type_empty until set.
- * SEE ALSO
- * XMLRPC_SetValue*
- * XMLRPC_CreateValue*
- * XMLRPC_Append*
- * SOURCE
- */
-XMLRPC_VALUE_TYPE_EASY XMLRPC_GetValueTypeEasy (XMLRPC_VALUE value) {
- if (value) {
- switch (value->type) {
- case xmlrpc_vector:
- switch (value->v->type) {
- case xmlrpc_vector_none:
- return xmlrpc_type_none;
- case xmlrpc_vector_struct:
- return xmlrpc_type_struct;
- case xmlrpc_vector_mixed:
- return xmlrpc_type_mixed;
- case xmlrpc_vector_array:
- return xmlrpc_type_array;
- }
- default:
- /* evil cast, but we know they are the same */
- return(XMLRPC_VALUE_TYPE_EASY) value->type;
- }
- }
- return xmlrpc_none;
-}
-
-/*******/
-
-
-
-/*-*******************
-* Begin Server Funcs *
-*********************/
-
-
-/****f* VALUE/XMLRPC_ServerCreate
- * NAME
- * XMLRPC_ServerCreate
- * SYNOPSIS
- * XMLRPC_SERVER XMLRPC_ServerCreate()
- * FUNCTION
- * Allocate/Init XMLRPC Server Resources.
- * INPUTS
- * none
- * RESULT
- * newly allocated XMLRPC_SERVER
- * NOTES
- * SEE ALSO
- * XMLRPC_ServerDestroy ()
- * XMLRPC_GetGlobalServer ()
- * SOURCE
- */
-XMLRPC_SERVER XMLRPC_ServerCreate() {
- XMLRPC_SERVER server = calloc(1, sizeof(STRUCT_XMLRPC_SERVER));
- if(server) {
- Q_Init(&server->methodlist);
- Q_Init(&server->docslist);
-
- /* register system methods */
- xsm_register(server);
- }
- return server;
-}
-
-/*******/
-
-/* Return global server. Not locking! Not Thread Safe! */
-/****f* VALUE/XMLRPC_GetGlobalServer
- * NAME
- * XMLRPC_GetGlobalServer
- * SYNOPSIS
- * XMLRPC_SERVER XMLRPC_GetGlobalServer()
- * FUNCTION
- * Allocates a global (process-wide) server, or returns pointer if pre-existing.
- * INPUTS
- * none
- * RESULT
- * pointer to global server, or 0 if error.
- * NOTES
- * ***WARNING*** This function is not thread safe. It is included only for the very lazy.
- * Multi-threaded programs that use this may experience problems.
- * BUGS
- * There is currently no way to cleanup the global server gracefully.
- * SEE ALSO
- * XMLRPC_ServerCreate ()
- * SOURCE
- */
-XMLRPC_SERVER XMLRPC_GetGlobalServer() {
- static XMLRPC_SERVER xsServer = 0;
- if(!xsServer) {
- xsServer = XMLRPC_ServerCreate();
- }
- return xsServer;
-}
-
-/*******/
-
-/****f* VALUE/XMLRPC_ServerDestroy
- * NAME
- * XMLRPC_ServerDestroy
- * SYNOPSIS
- * void XMLRPC_ServerDestroy(XMLRPC_SERVER server)
- * FUNCTION
- * Free Server Resources
- * INPUTS
- * server The server to be free'd
- * RESULT
- * void
- * NOTES
- * This frees the server struct and any methods that have been added.
- * SEE ALSO
- * XMLRPC_ServerCreate ()
- * SOURCE
- */
-void XMLRPC_ServerDestroy(XMLRPC_SERVER server) {
- if(server) {
- doc_method* dm = Q_Head(&server->docslist);
- server_method* sm = Q_Head(&server->methodlist);
- while( dm ) {
- my_free(dm);
- dm = Q_Next(&server->docslist);
- }
- while( sm ) {
- if(sm->name) {
- my_free(sm->name);
- }
- if(sm->desc) {
- XMLRPC_CleanupValue(sm->desc);
- }
- my_free(sm);
- sm = Q_Next(&server->methodlist);
- }
- if(server->xIntrospection) {
- XMLRPC_CleanupValue(server->xIntrospection);
- }
-
- Q_Destroy(&server->methodlist);
- Q_Destroy(&server->docslist);
- my_free(server);
- }
-}
-
-/*******/
-
-
-/****f* VALUE/XMLRPC_ServerRegisterMethod
- * NAME
- * XMLRPC_ServerRegisterMethod
- * SYNOPSIS
- * void XMLRPC_ServerRegisterMethod(XMLRPC_SERVER server, const char *name, XMLRPC_Callback cb)
- * FUNCTION
- * Register new XMLRPC method with server
- * INPUTS
- * server The XMLRPC_SERVER to register the method with
- * name public name of the method
- * cb C function that implements the method
- * RESULT
- * int - 1 if success, else 0
- * NOTES
- * A C function must be registered for every "method" that the server recognizes. The
- * method name is equivalent to <methodCall><name> method name </name></methodCall> in the
- * XML syntax.
- * SEE ALSO
- * XMLRPC_ServerFindMethod ()
- * XMLRPC_ServerCallMethod ()
- * SOURCE
- */
-int XMLRPC_ServerRegisterMethod(XMLRPC_SERVER server, const char *name, XMLRPC_Callback cb) {
- if(server && name && cb) {
-
- server_method* sm = malloc(sizeof(server_method));
-
- if(sm) {
- sm->name = strdup(name);
- sm->method = cb;
- sm->desc = NULL;
-
- return Q_PushTail(&server->methodlist, sm);
- }
- }
- return 0;
-}
-
-/*******/
-
-server_method* find_method(XMLRPC_SERVER server, const char* name) {
- server_method* sm;
-
- q_iter qi = Q_Iter_Head_F(&server->methodlist);
-
- while( qi ) {
- sm = Q_Iter_Get_F(qi);
- if(sm && !strcmp(sm->name, name)) {
- return sm;
- }
- qi = Q_Iter_Next_F(qi);
- }
- return NULL;
-}
-
-
-const char* type_to_str(XMLRPC_VALUE_TYPE type, XMLRPC_VECTOR_TYPE vtype) {
- switch(type) {
- case xmlrpc_none:
- return "none";
- case xmlrpc_empty:
- return "empty";
- case xmlrpc_base64:
- return "base64";
- case xmlrpc_boolean:
- return "boolean";
- case xmlrpc_datetime:
- return "datetime";
- case xmlrpc_double:
- return "double";
- case xmlrpc_int:
- return "int";
- case xmlrpc_string:
- return "string";
- case xmlrpc_vector:
- switch(vtype) {
- case xmlrpc_vector_none:
- return "none";
- case xmlrpc_vector_array:
- return "array";
- case xmlrpc_vector_mixed:
- return "mixed vector (struct)";
- case xmlrpc_vector_struct:
- return "struct";
- }
- }
- return "unknown";
-}
-
-/****f* VALUE/XMLRPC_ServerFindMethod
- * NAME
- * XMLRPC_ServerFindMethod
- * SYNOPSIS
- * XMLRPC_Callback XMLRPC_ServerFindMethod(XMLRPC_SERVER server, const char* callName)
- * FUNCTION
- * retrieve C callback associated with a given method name.
- * INPUTS
- * server The XMLRPC_SERVER the method is registered with
- * callName the method to find
- * RESULT
- * previously registered XMLRPC_Callback, or NULL
- * NOTES
- * Typically, this is used to determine if a requested method exists, without actually calling it.
- * SEE ALSO
- * XMLRPC_ServerCallMethod ()
- * XMLRPC_ServerRegisterMethod ()
- * SOURCE
- */
-XMLRPC_Callback XMLRPC_ServerFindMethod(XMLRPC_SERVER server, const char* callName) {
- if(server && callName) {
- q_iter qi = Q_Iter_Head_F(&server->methodlist);
- while( qi ) {
- server_method* sm = Q_Iter_Get_F(qi);
- if(sm && !strcmp(sm->name, callName)) {
- return sm->method;
- }
- qi = Q_Iter_Next_F(qi);
- }
- }
- return NULL;
-}
-
-/*******/
-
-
-/* Call method specified in request */
-/****f* VALUE/XMLRPC_ServerCallMethod
- * NAME
- * XMLRPC_ServerCallMethod
- * SYNOPSIS
- * XMLRPC_VALUE XMLRPC_ServerCallMethod(XMLRPC_SERVER server, XMLRPC_REQUEST request, void* userData)
- * FUNCTION
- *
- * INPUTS
- * server The XMLRPC_SERVER the method is registered with
- * request the request to handle
- * userData any additional data to pass to the C callback, or NULL
- * RESULT
- * XMLRPC_VALUE allocated by the callback, or NULL
- * NOTES
- * It is typically the caller's responsibility to free the returned value.
- *
- * Often the caller will want to serialize the result as XML, via
- * XMLRPC_VALUE_To_XML () or XMLRPC_REQUEST_To_XML ()
- * SEE ALSO
- * XMLRPC_ServerFindMethod ()
- * XMLRPC_ServerRegisterMethod ()
- * XMLRPC_CleanupValue ()
- * SOURCE
- */
-XMLRPC_VALUE XMLRPC_ServerCallMethod(XMLRPC_SERVER server, XMLRPC_REQUEST request, void* userData) {
- XMLRPC_VALUE xReturn = NULL;
-
- /* check for error set during request parsing / generation */
- if(request && request->error) {
- xReturn = XMLRPC_CopyValue(request->error);
- }
- else if (server && request) {
- XMLRPC_Callback cb =
- XMLRPC_ServerFindMethod (server, request->methodName.str);
- if(cb) {
- xReturn = cb(server, request, userData);
- }
- else {
- xReturn =
- XMLRPC_UtilityCreateFault (xmlrpc_error_unknown_method,
- request->methodName.str);
- }
- }
- return xReturn;
-}
-
-/*******/
-
-/*-*****************
-* End server funcs *
-*******************/
-
-
-/*-***********************************
-* Begin XMLRPC General Options funcs *
-*************************************/
-
-/* For options used by XMLRPC_VALUE funcs that otherwise do not have
- * parameters for options. Kind of gross. :(
- */
-typedef struct _xmlrpc_options {
- XMLRPC_CASE id_case;
- XMLRPC_CASE_COMPARISON id_case_compare;
-}
-STRUCT_XMLRPC_OPTIONS, *XMLRPC_OPTIONS;
-
-static XMLRPC_OPTIONS XMLRPC_GetDefaultOptions() {
- static STRUCT_XMLRPC_OPTIONS options = {
- xmlrpc_case_exact,
- xmlrpc_case_sensitive
- };
- return &options;
-}
-
-/****f* VALUE/XMLRPC_GetDefaultIdCase
- * NAME
- * XMLRPC_GetDefaultIdCase
- * SYNOPSIS
- * XMLRPC_CASE XMLRPC_GetDefaultIdCase()
- * FUNCTION
- * Gets default case options used by XMLRPC_VALUE funcs
- * INPUTS
- * none
- * RESULT
- * XMLRPC_CASE
- * BUGS
- * Nasty and gross. Should be server specific, but that requires changing all
- * the XMLRPC_VALUE api's.
- * SEE ALSO
- * XMLRPC_SetDefaultIdCase ()
- * SOURCE
- */
-XMLRPC_CASE XMLRPC_GetDefaultIdCase() {
- XMLRPC_OPTIONS options = XMLRPC_GetDefaultOptions();
- return options->id_case;
-}
-
-/*******/
-
-/****f* VALUE/XMLRPC_SetDefaultIdCase
- * NAME
- * XMLRPC_SetDefaultIdCase
- * SYNOPSIS
- * XMLRPC_CASE XMLRPC_SetDefaultIdCase(XMLRPC_CASE id_case)
- * FUNCTION
- * Sets default case options used by XMLRPC_VALUE funcs
- * INPUTS
- * id_case case options as enumerated by XMLRPC_CASE
- * RESULT
- * XMLRPC_CASE -- newly set option
- * BUGS
- * Nasty and gross. Should be server specific, but that requires changing all
- * the XMLRPC_VALUE api's.
- * SEE ALSO
- * XMLRPC_GetDefaultIdCase ()
- * SOURCE
- */
-XMLRPC_CASE XMLRPC_SetDefaultIdCase(XMLRPC_CASE id_case) {
- XMLRPC_OPTIONS options = XMLRPC_GetDefaultOptions();
- options->id_case = id_case;
- return options->id_case;
-}
-
-/*******/
-
-/****f* VALUE/XMLRPC_GetDefaultIdCaseComparison
- * NAME
- * XMLRPC_GetDefaultIdCaseComparison
- * SYNOPSIS
- * XMLRPC_CASE XMLRPC_GetDefaultIdCaseComparison( )
- * FUNCTION
- * Gets default case comparison options used by XMLRPC_VALUE funcs
- * INPUTS
- * none
- * RESULT
- * XMLRPC_CASE_COMPARISON default
- * BUGS
- * Nasty and gross. Should be server specific, but that requires changing all
- * the XMLRPC_VALUE api's.
- * SEE ALSO
- * XMLRPC_SetDefaultIdCaseComparison ()
- * SOURCE
- */
-XMLRPC_CASE_COMPARISON XMLRPC_GetDefaultIdCaseComparison() {
- XMLRPC_OPTIONS options = XMLRPC_GetDefaultOptions();
- return options->id_case_compare;
-}
-
-/*******/
-
-/****f* VALUE/XMLRPC_SetDefaultIdCaseComparison
- * NAME
- * XMLRPC_SetDefaultIdCaseComparison
- * SYNOPSIS
- * XMLRPC_CASE XMLRPC_SetDefaultIdCaseComparison( XMLRPC_CASE_COMPARISON id_case_compare )
- * FUNCTION
- * Gets default case comparison options used by XMLRPC_VALUE funcs
- * INPUTS
- * id_case_compare case comparison rule to set as default
- * RESULT
- * XMLRPC_CASE_COMPARISON newly set default
- * BUGS
- * Nasty and gross. Should be server specific, but that requires changing all
- * the XMLRPC_VALUE api's.
- * SEE ALSO
- * XMLRPC_GetDefaultIdCaseComparison ()
- * SOURCE
- */
-XMLRPC_CASE_COMPARISON XMLRPC_SetDefaultIdCaseComparison(XMLRPC_CASE_COMPARISON id_case_compare) {
- XMLRPC_OPTIONS options = XMLRPC_GetDefaultOptions();
- options->id_case_compare = id_case_compare;
- return options->id_case_compare;
-}
-
-/*******/
-
-/*-*********************************
-* End XMLRPC General Options funcs *
-***********************************/
-
-
-/*-******************
-* Fault API funcs *
-********************/
-
-/****f* UTILITY/XMLRPC_UtilityCreateFault
- * NAME
- * XMLRPC_UtilityCreateFault
- * SYNOPSIS
- * XMLRPC_VALUE XMLRPC_UtilityCreateFault( int fault_code, const char* fault_string )
- * FUNCTION
- * generates a struct containing a string member with id "faultString" and an int member
- * with id "faultCode". When using the xmlrpc xml serialization, these will be translated
- * to <fault><value><struct>... format.
- * INPUTS
- * fault_code application specific error code. can be 0.
- * fault_string application specific error string. cannot be null.
- * RESULT
- * XMLRPC_VALUE a newly created struct vector representing the error, or null on error.
- * NOTES
- * This is a utility function. xmlrpc "faults" are not directly represented in this xmlrpc
- * API or data structures. It is the author's view, that this API is intended for simple
- * data types, and a "fault" is a complex data type consisting of multiple simple data
- * types. This function is provided for convenience only, the same result could be
- * achieved directly by the application.
- *
- * This function now supports some "standardized" fault codes, as specified at.
- * http://xmlrpc-epi.sourceforge.net/specs/rfc.fault_codes.php.
- * If one of these fault codes is received, the description string will automatically
- * be prefixed with a standard error string and 2 newlines.
- *
- * The actual transformation between this complex type and the xml "<fault>" element takes
- * place in the xmlrpc to xml serialization layer. This step is not performed when using the
- * simplerpc serialization, meaning that there will be no "<fault>" element in that
- * serialization. There will simply be a standard struct with 2 child elements.
- * imho, the "<fault>" element is unnecessary and/or out of place as part of the standard API.
- *
- * SOURCE
- */
-XMLRPC_VALUE XMLRPC_UtilityCreateFault(int fault_code, const char* fault_string) {
- XMLRPC_VALUE xOutput = NULL;
-
- char* string = NULL;
- simplestring description;
- simplestring_init(&description);
-
- switch (fault_code) {
- case xmlrpc_error_parse_xml_syntax:
- string = xmlrpc_error_parse_xml_syntax_str;
- break;
- case xmlrpc_error_parse_unknown_encoding:
- string = xmlrpc_error_parse_unknown_encoding_str;
- break;
- case xmlrpc_error_parse_bad_encoding:
- string = xmlrpc_error_parse_bad_encoding_str;
- break;
- case xmlrpc_error_invalid_xmlrpc:
- string = xmlrpc_error_invalid_xmlrpc_str;
- break;
- case xmlrpc_error_unknown_method:
- string = xmlrpc_error_unknown_method_str;
- break;
- case xmlrpc_error_invalid_params:
- string = xmlrpc_error_invalid_params_str;
- break;
- case xmlrpc_error_internal_server:
- string = xmlrpc_error_internal_server_str;
- break;
- case xmlrpc_error_application:
- string = xmlrpc_error_application_str;
- break;
- case xmlrpc_error_system:
- string = xmlrpc_error_system_str;
- break;
- case xmlrpc_error_transport:
- string = xmlrpc_error_transport_str;
- break;
- }
-
- simplestring_add(&description, string);
-
- if(string && fault_string) {
- simplestring_add(&description, "\n\n");
- }
- simplestring_add(&description, fault_string);
-
-
- if(description.len) {
- xOutput = XMLRPC_CreateVector(NULL, xmlrpc_vector_struct);
-
- XMLRPC_VectorAppendString (xOutput, "faultString", description.str,
- description.len);
- XMLRPC_VectorAppendInt(xOutput, "faultCode", fault_code);
- }
-
- simplestring_free(&description);
-
- return xOutput;
-}
-
-/*******/
-
-
-/****f* FAULT/XMLRPC_ValueIsFault
- * NAME
- * XMLRPC_ValueIsFault
- * SYNOPSIS
- * int XMLRPC_ValueIsFault (XMLRPC_VALUE value)
- * FUNCTION
- * Determines if a value encapsulates a fault "object"
- * INPUTS
- * value any XMLRPC_VALUE
- * RESULT
- * 1 if it is a fault, else 0
- * SEE ALSO
- * XMLRPC_ResponseIsFault ()
- * SOURCE
- */
-int XMLRPC_ValueIsFault (XMLRPC_VALUE value) {
- if( XMLRPC_VectorGetValueWithID(value, "faultCode") &&
- XMLRPC_VectorGetValueWithID(value, "faultString") ) {
- return 1;
- }
- return 0;
-}
-/*******/
-
-
-/****f* FAULT/XMLRPC_ResponseIsFault
- * NAME
- * XMLRPC_ResponseIsFault
- * SYNOPSIS
- * int XMLRPC_ResponseIsFault (XMLRPC_REQUEST response)
- * FUNCTION
- * Determines if a response contains an encapsulated fault "object"
- * INPUTS
- * value any XMLRPC_REQUEST. typically of type xmlrpc_request_response
- * RESULT
- * 1 if it contains a fault, else 0
- * SEE ALSO
- * XMLRPC_ValueIsFault ()
- * SOURCE
- */
-int XMLRPC_ResponseIsFault(XMLRPC_REQUEST response) {
- return XMLRPC_ValueIsFault( XMLRPC_RequestGetData(response) );
-}
-
-/*******/
-
-/****f* FAULT/XMLRPC_GetValueFaultCode
- * NAME
- * XMLRPC_GetValueFaultCode
- * SYNOPSIS
- * int XMLRPC_GetValueFaultCode (XMLRPC_VALUE value)
- * FUNCTION
- * returns fault code from a struct, if any
- * INPUTS
- * value XMLRPC_VALUE of type xmlrpc_vector_struct.
- * RESULT
- * fault code, else 0.
- * BUGS
- * impossible to distinguish faultCode == 0 from faultCode not present.
- * SEE ALSO
- * XMLRPC_GetResponseFaultCode ()
- * SOURCE
- */
-int XMLRPC_GetValueFaultCode (XMLRPC_VALUE value) {
- return XMLRPC_VectorGetIntWithID(value, "faultCode");
-}
-
-/*******/
-
-/****f* FAULT/XMLRPC_GetResponseFaultCode
- * NAME
- * XMLRPC_GetResponseFaultCode
- * SYNOPSIS
- * int XMLRPC_GetResponseFaultCode(XMLRPC_REQUEST response)
- * FUNCTION
- * returns fault code from a response, if any
- * INPUTS
- * response XMLRPC_REQUEST. typically of type xmlrpc_request_response.
- * RESULT
- * fault code, else 0.
- * BUGS
- * impossible to distinguish faultCode == 0 from faultCode not present.
- * SEE ALSO
- * XMLRPC_GetValueFaultCode ()
- * SOURCE
- */
-int XMLRPC_GetResponseFaultCode(XMLRPC_REQUEST response) {
- return XMLRPC_GetValueFaultCode( XMLRPC_RequestGetData(response) );
-}
-
-/*******/
-
-
-/****f* FAULT/XMLRPC_GetValueFaultString
- * NAME
- * XMLRPC_GetValueFaultString
- * SYNOPSIS
- * const char* XMLRPC_GetValueFaultString (XMLRPC_VALUE value)
- * FUNCTION
- * returns fault string from a struct, if any
- * INPUTS
- * value XMLRPC_VALUE of type xmlrpc_vector_struct.
- * RESULT
- * fault string, else 0.
- * SEE ALSO
- * XMLRPC_GetResponseFaultString ()
- * SOURCE
- */
-const char* XMLRPC_GetValueFaultString (XMLRPC_VALUE value) {
- return XMLRPC_VectorGetStringWithID(value, "faultString");
-}
-
-/*******/
-
-/****f* FAULT/XMLRPC_GetResponseFaultString
- * NAME
- * XMLRPC_GetResponseFaultString
- * SYNOPSIS
- * const char* XMLRPC_GetResponseFaultString (XMLRPC_REQUEST response)
- * FUNCTION
- * returns fault string from a response, if any
- * INPUTS
- * response XMLRPC_REQUEST. typically of type xmlrpc_request_response.
- * RESULT
- * fault string, else 0.
- * SEE ALSO
- * XMLRPC_GetValueFaultString ()
- * SOURCE
- */
-const char* XMLRPC_GetResponseFaultString (XMLRPC_REQUEST response) {
- return XMLRPC_GetValueFaultString( XMLRPC_RequestGetData(response) );
-}
-
-/*******/
-
-
-/*-******************
-* Utility API funcs *
-********************/
-
-
-/****f* UTILITY/XMLRPC_Free
- * NAME
- * XMLRPC_Free
- * SYNOPSIS
- * void XMLRPC_Free(void* mem)
- * FUNCTION
- * frees a block of memory allocated by xmlrpc.
- * INPUTS
- * mem memory to free
- * RESULT
- * void
- * NOTES
- * Useful for OS's where memory must be free'd
- * in the same library in which it is allocated.
- * SOURCE
- */
-void XMLRPC_Free(void* mem) {
- my_free(mem);
-}
-
-/*******/
-
-
-/****f* UTILITY/XMLRPC_GetVersionString
- * NAME
- * XMLRPC_GetVersionString
- * SYNOPSIS
- * const char* XMLRPC_GetVersionString()
- * FUNCTION
- * returns library version string
- * INPUTS
- *
- * RESULT
- * const char*
- * NOTES
- * SOURCE
- */
-const char* XMLRPC_GetVersionString() {
- return XMLRPC_VERSION_STR;
-}
-
-/*******/
-
-
-/*-**********************
-* End Utility API funcs *
-************************/
diff --git a/ext/xmlrpc/libxmlrpc/xmlrpc.h b/ext/xmlrpc/libxmlrpc/xmlrpc.h
deleted file mode 100644
index dde3d5e122..0000000000
--- a/ext/xmlrpc/libxmlrpc/xmlrpc.h
+++ /dev/null
@@ -1,454 +0,0 @@
-/*
- This file is part of libXMLRPC - a C library for xml-encoded function calls.
-
- Author: Dan Libby (dan@libby.com)
- Epinions.com may be contacted at feedback@epinions-inc.com
-*/
-
-/*
- Copyright 2000 Epinions, Inc.
-
- Subject to the following 3 conditions, Epinions, Inc. permits you, free
- of charge, to (a) use, copy, distribute, modify, perform and display this
- software and associated documentation files (the "Software"), and (b)
- permit others to whom the Software is furnished to do so as well.
-
- 1) The above copyright notice and this permission notice shall be included
- without modification in all copies or substantial portions of the
- Software.
-
- 2) THE SOFTWARE IS PROVIDED "AS IS", WITHOUT ANY WARRANTY OR CONDITION OF
- ANY KIND, EXPRESS, IMPLIED OR STATUTORY, INCLUDING WITHOUT LIMITATION ANY
- IMPLIED WARRANTIES OF ACCURACY, MERCHANTABILITY, FITNESS FOR A PARTICULAR
- PURPOSE OR NONINFRINGEMENT.
-
- 3) IN NO EVENT SHALL EPINIONS, INC. BE LIABLE FOR ANY DIRECT, INDIRECT,
- SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES OR LOST PROFITS ARISING OUT
- OF OR IN CONNECTION WITH THE SOFTWARE (HOWEVER ARISING, INCLUDING
- NEGLIGENCE), EVEN IF EPINIONS, INC. IS AWARE OF THE POSSIBILITY OF SUCH
- DAMAGES.
-
-*/
-
-#ifndef XMLRPC_ALREADY_INCLUDED
-#define XMLRPC_ALREADY_INCLUDED 1
-
-/* includes */
-#include "xml_element.h"
-#include <time.h> /* for time_t */
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/* allow version to be specified via compile line define */
-#ifndef XMLRPC_LIB_VERSION
- #define XMLRPC_LIB_VERSION "0.51"
-#endif
-
-/* this number, representing the date, must be increased each time the API changes */
-#define XMLRPC_API_NO 20020623
-
-/* this string should be changed with each packaged release */
-#define XMLRPC_VERSION_STR "xmlrpc-epi v. " XMLRPC_LIB_VERSION
-
-/* where to find more info. shouldn't need to change much */
-#define XMLRPC_HOME_PAGE_STR "http://xmlprc-epi.sourceforge.net/"
-
-
-/****d* VALUE/XMLRPC_VALUE_TYPE
- * NAME
- * XMLRPC_VALUE_TYPE
- * NOTES
- * Defines data types for XMLRPC_VALUE
- * Deprecated for public use. See XMLRPC_VALUE_TYPE_EASY
- * SEE ALSO
- * XMLRPC_VECTOR_TYPE
- * XMLRPC_REQUEST_TYPE
- * SOURCE
- */
-typedef enum _XMLRPC_VALUE_TYPE {
- xmlrpc_none, /* not a value */
- xmlrpc_empty, /* empty value, eg NULL */
- xmlrpc_base64, /* base64 value, eg binary data */
- xmlrpc_boolean, /* boolean [0 | 1] */
- xmlrpc_datetime, /* datetime [ISO8601 | time_t] */
- xmlrpc_double, /* double / floating point */
- xmlrpc_int, /* integer */
- xmlrpc_string, /* string */
- xmlrpc_vector /* vector, aka list, array */
-} XMLRPC_VALUE_TYPE;
-/*******/
-
-/****d* VALUE/XMLRPC_VECTOR_TYPE
- * NAME
- * XMLRPC_VECTOR_TYPE
- * NOTES
- * Defines data types for XMLRPC_VECTOR.
- * Deprecated for public use. See XMLRPC_VALUE_TYPE_EASY
- * SEE ALSO
- * XMLRPC_VALUE_TYPE
- * XMLRPC_REQUEST_TYPE
- * SOURCE
- */
-typedef enum _XMLRPC_VECTOR_TYPE {
- xmlrpc_vector_none, /* not an array */
- xmlrpc_vector_array, /* no values may have key names */
- xmlrpc_vector_mixed, /* some values may have key names */
- xmlrpc_vector_struct /* all values must have key names */
-} XMLRPC_VECTOR_TYPE;
-/*******/
-
-/****d* VALUE/XMLRPC_VALUE_TYPE_EASY
- * NAME
- * XMLRPC_VALUE_TYPE_EASY
- * NOTES
- * Defines data types for XMLRPC_VALUE, including vector types.
- * SEE ALSO
- * XMLRPC_VECTOR_TYPE
- * XMLRPC_REQUEST_TYPE
- * SOURCE
- */
-typedef enum _XMLRPC_VALUE_TYPE_EASY {
- xmlrpc_type_none, /* not a value */
- xmlrpc_type_empty, /* empty value, eg NULL */
- xmlrpc_type_base64, /* base64 value, eg binary data */
- xmlrpc_type_boolean, /* boolean [0 | 1] */
- xmlrpc_type_datetime, /* datetime [ISO8601 | time_t] */
- xmlrpc_type_double, /* double / floating point */
- xmlrpc_type_int, /* integer */
- xmlrpc_type_string, /* string */
-/* -- IMPORTANT: identical to XMLRPC_VALUE_TYPE to this point. -- */
- xmlrpc_type_array, /* vector array */
- xmlrpc_type_mixed, /* vector mixed */
- xmlrpc_type_struct /* vector struct */
-} XMLRPC_VALUE_TYPE_EASY;
-/*******/
-
-
-/****d* VALUE/XMLRPC_REQUEST_TYPE
- * NAME
- * XMLRPC_REQUEST_TYPE
- * NOTES
- * Defines data types for XMLRPC_REQUEST
- * SEE ALSO
- * XMLRPC_VALUE_TYPE
- * XMLRPC_VECTOR_TYPE
- * SOURCE
- */
-typedef enum _xmlrpc_request_type {
- xmlrpc_request_none, /* not a valid request */
- xmlrpc_request_call, /* calling/invoking a method */
- xmlrpc_request_response, /* responding to a method call */
-} XMLRPC_REQUEST_TYPE;
-/*******/
-
-/****d* VALUE/XMLRPC_ERROR_CODE
- * NAME
- * XMLRPC_ERROR_CODE
- * NOTES
- * All existing error codes
- * SEE ALSO
- * XMLRPC_REQUEST_ERROR
- * SOURCE
- */
-typedef enum _xmlrpc_error_code {
- xmlrpc_error_none = 0, /* not an error */
- xmlrpc_error_parse_xml_syntax = -32700,
- xmlrpc_error_parse_unknown_encoding = -32701,
- xmlrpc_error_parse_bad_encoding = -32702,
- xmlrpc_error_invalid_xmlrpc = -32600,
- xmlrpc_error_unknown_method = -32601,
- xmlrpc_error_invalid_params = -32602,
- xmlrpc_error_internal_server = -32603,
- xmlrpc_error_application = -32500,
- xmlrpc_error_system = -32400,
- xmlrpc_error_transport = -32300
-} XMLRPC_ERROR_CODE;
-/******/
-
-#define xmlrpc_error_parse_xml_syntax_str "parse error. not well formed."
-#define xmlrpc_error_parse_unknown_encoding_str "parse error. unknown encoding"
-#define xmlrpc_error_parse_bad_encoding_str "parse error. invalid character for encoding"
-#define xmlrpc_error_invalid_xmlrpc_str "server error. xml-rpc not conforming to spec"
-#define xmlrpc_error_unknown_method_str "server error. method not found."
-#define xmlrpc_error_invalid_params_str "server error. invalid method parameters"
-#define xmlrpc_error_internal_server_str "server error. internal xmlrpc library error"
-#define xmlrpc_error_application_str "application error."
-#define xmlrpc_error_system_str "system error."
-#define xmlrpc_error_transport_str "transport error."
-
-
-
-/****d* VALUE/XMLRPC_VERSION
- * NAME
- * XMLRPC_VERSION
- * NOTES
- * Defines xml vocabulary used for generated xml
- * SEE ALSO
- * XMLRPC_REQUEST_OUTPUT_OPTIONS
- * XMLRPC_REQUEST_To_XML ()
- * SOURCE
- */
-typedef enum _xmlrpc_version {
- xmlrpc_version_none = 0, /* not a recognized vocabulary */
- xmlrpc_version_1_0 = 1, /* xmlrpc 1.0 standard vocab */
- xmlrpc_version_simple = 2, /* alt more readable vocab */
- xmlrpc_version_danda = 2, /* same as simple. legacy */
- xmlrpc_version_soap_1_1 = 3 /* SOAP. version 1.1 */
-} XMLRPC_VERSION;
-/******/
-
-/****s* VALUE/XMLRPC_REQUEST_OUTPUT_OPTIONS
- * NAME
- * XMLRPC_REQUEST_OUTPUT_OPTIONS
- * NOTES
- * Defines output options for generated xml
- * SEE ALSO
- * XMLRPC_VERSION
- * XML_ELEM_OUTPUT_OPTIONS
- * XMLRPC_REQUEST_To_XML ()
- * SOURCE
- */
-typedef struct _xmlrpc_request_output_options {
- STRUCT_XML_ELEM_OUTPUT_OPTIONS xml_elem_opts; /* xml_element specific output options */
- XMLRPC_VERSION version; /* xml vocabulary to use */
-} STRUCT_XMLRPC_REQUEST_OUTPUT_OPTIONS, *XMLRPC_REQUEST_OUTPUT_OPTIONS;
-/******/
-
-/****s* VALUE/XMLRPC_REQUEST_INPUT_OPTIONS
- * NAME
- * XMLRPC_REQUEST_INPUT_OPTIONS
- * NOTES
- * Defines options for reading in xml data
- * SEE ALSO
- * XMLRPC_VERSION
- * XML_ELEM_INPUT_OPTIONS
- * XMLRPC_REQUEST_From_XML ()
- * SOURCE
- */
-typedef struct _xmlrpc_request_input_options {
- STRUCT_XML_ELEM_INPUT_OPTIONS xml_elem_opts; /* xml_element specific output options */
-} STRUCT_XMLRPC_REQUEST_INPUT_OPTIONS, *XMLRPC_REQUEST_INPUT_OPTIONS;
-/******/
-
-/****s* VALUE/XMLRPC_ERROR
- * NAME
- * XMLRPC_ERROR
- * NOTES
- * For the reporting and handling of errors
- * SOURCE
- */
-typedef struct _xmlrpc_error {
- XMLRPC_ERROR_CODE code;
- STRUCT_XML_ELEM_ERROR xml_elem_error; /* xml_element errors (parser errors) */
-} STRUCT_XMLRPC_ERROR, *XMLRPC_ERROR;
-/******/
-
-
-/****d* VALUE/XMLRPC_CASE_COMPARISON
- * NAME
- * XMLRPC_CASE_COMPARISON
- * NOTES
- * Defines case comparison options for XMLRPC_VALUE/VECTOR API's
- * SEE ALSO
- * XMLRPC_CASE
- * XMLRPC_VALUE
- * SOURCE
- */
-typedef enum _xmlrpc_case_comparison {
- xmlrpc_case_insensitive, /* use case-insensitive compare */
- xmlrpc_case_sensitive /* use case-sensitive compare */
-} XMLRPC_CASE_COMPARISON;
-/******/
-
-/****d* VALUE/XMLRPC_CASE
- * NAME
- * XMLRPC_CASE
- * NOTES
- * Defines case behavior when setting IDs in XMLRPC_VALUE API's
- * SEE ALSO
- * XMLRPC_CASE_COMPARISON
- * XMLRPC_VALUE
- * SOURCE
- */
-typedef enum _xmlrpc_case {
- xmlrpc_case_exact, /* leave case alone */
- xmlrpc_case_lower, /* lower-case id */
- xmlrpc_case_upper /* upper-case id */
-} XMLRPC_CASE;
-/******/
-
-/* if you don't like these defaults, you can set them with XMLRPC_SetDefaultIdCase*() */
-#define XMLRPC_DEFAULT_ID_CASE XMLRPC_GetDefaultIdCase()
-#define XMLRPC_DEFAULT_ID_CASE_SENSITIVITY XMLRPC_GetDefaultIdCaseComparison()
-
-/* opaque (non-public) types. defined locally in xmlrpc.c */
-typedef struct _xmlrpc_request* XMLRPC_REQUEST;
-typedef struct _xmlrpc_server* XMLRPC_SERVER;
-typedef struct _xmlrpc_value* XMLRPC_VALUE;
-
-/****d* VALUE/XMLRPC_Callback
- * NAME
- * XMLRPC_Callback
- * NOTES
- * Function prototype for user defined method handlers (callbacks).
- * SEE ALSO
- * XMLRPC_ServerRegisterMethod ()
- * XMLRPC_ServerCallMethod ()
- * XMLRPC_REQUEST
- * XMLRPC_VALUE
- * SOURCE
- */
-typedef XMLRPC_VALUE (*XMLRPC_Callback)(XMLRPC_SERVER server, XMLRPC_REQUEST input, void* userData);
-/******/
-
-/* ID Case Defaults */
-XMLRPC_CASE XMLRPC_GetDefaultIdCase(void);
-XMLRPC_CASE XMLRPC_SetDefaultIdCase(XMLRPC_CASE id_case);
-XMLRPC_CASE_COMPARISON XMLRPC_GetDefaultIdCaseComparison(void);
-XMLRPC_CASE_COMPARISON XMLRPC_SetDefaultIdCaseComparison(XMLRPC_CASE_COMPARISON id_case);
-
-/* Vector manipulation */
-int XMLRPC_VectorSize(XMLRPC_VALUE value);
-XMLRPC_VALUE XMLRPC_VectorRewind(XMLRPC_VALUE value);
-XMLRPC_VALUE XMLRPC_VectorNext(XMLRPC_VALUE value);
-int XMLRPC_SetIsVector(XMLRPC_VALUE value, XMLRPC_VECTOR_TYPE type);
-int XMLRPC_AddValueToVector(XMLRPC_VALUE target, XMLRPC_VALUE source);
-int XMLRPC_AddValuesToVector(XMLRPC_VALUE target, ...);
-int XMLRPC_VectorRemoveValue(XMLRPC_VALUE vector, XMLRPC_VALUE value);
-XMLRPC_VALUE XMLRPC_VectorGetValueWithID_Case(XMLRPC_VALUE vector, const char* id, XMLRPC_CASE_COMPARISON id_case);
-
-
-/* Create values */
-XMLRPC_VALUE XMLRPC_CreateValueBoolean(const char* id, int truth);
-XMLRPC_VALUE XMLRPC_CreateValueBase64(const char* id, const char* s, int len);
-XMLRPC_VALUE XMLRPC_CreateValueDateTime(const char* id, time_t time);
-XMLRPC_VALUE XMLRPC_CreateValueDateTime_ISO8601(const char* id, const char *s);
-XMLRPC_VALUE XMLRPC_CreateValueDouble(const char* id, double f);
-XMLRPC_VALUE XMLRPC_CreateValueInt(const char* id, int i);
-XMLRPC_VALUE XMLRPC_CreateValueString(const char* id, const char* s, int len);
-XMLRPC_VALUE XMLRPC_CreateValueEmpty(void);
-XMLRPC_VALUE XMLRPC_CreateVector(const char* id, XMLRPC_VECTOR_TYPE type);
-
-/* Cleanup values */
-void XMLRPC_CleanupValue(XMLRPC_VALUE value);
-
-/* Request error */
-XMLRPC_VALUE XMLRPC_RequestSetError (XMLRPC_REQUEST request, XMLRPC_VALUE error);
-XMLRPC_VALUE XMLRPC_RequestGetError (XMLRPC_REQUEST request);
-
-/* Copy values */
-XMLRPC_VALUE XMLRPC_CopyValue(XMLRPC_VALUE value);
-XMLRPC_VALUE XMLRPC_DupValueNew(XMLRPC_VALUE xSource);
-
-/* Set Values */
-void XMLRPC_SetValueDateTime(XMLRPC_VALUE value, time_t time);
-void XMLRPC_SetValueDateTime_ISO8601(XMLRPC_VALUE value, const char* s);
-void XMLRPC_SetValueDouble(XMLRPC_VALUE value, double val);
-void XMLRPC_SetValueInt(XMLRPC_VALUE value, int val);
-void XMLRPC_SetValueBoolean(XMLRPC_VALUE value, int val);
-const char *XMLRPC_SetValueString(XMLRPC_VALUE value, const char* s, int len);
-void XMLRPC_SetValueBase64(XMLRPC_VALUE value, const char* s, int len);
-const char *XMLRPC_SetValueID_Case(XMLRPC_VALUE value, const char* id, int len, XMLRPC_CASE id_case);
-#define XMLRPC_SetValueID(value, id, len) XMLRPC_SetValueID_Case(value, id, len, XMLRPC_DEFAULT_ID_CASE)
-
-/* Get Values */
-const char* XMLRPC_GetValueString(XMLRPC_VALUE value);
-int XMLRPC_GetValueStringLen(XMLRPC_VALUE value);
-int XMLRPC_GetValueInt(XMLRPC_VALUE value);
-int XMLRPC_GetValueBoolean(XMLRPC_VALUE value);
-double XMLRPC_GetValueDouble(XMLRPC_VALUE value);
-const char* XMLRPC_GetValueBase64(XMLRPC_VALUE value);
-time_t XMLRPC_GetValueDateTime(XMLRPC_VALUE value);
-const char* XMLRPC_GetValueDateTime_ISO8601(XMLRPC_VALUE value);
-const char* XMLRPC_GetValueID(XMLRPC_VALUE value);
-
-/* Type introspection */
-XMLRPC_VALUE_TYPE XMLRPC_GetValueType(XMLRPC_VALUE v);
-XMLRPC_VALUE_TYPE_EASY XMLRPC_GetValueTypeEasy(XMLRPC_VALUE v);
-XMLRPC_VECTOR_TYPE XMLRPC_GetVectorType(XMLRPC_VALUE v);
-
-/* Parsing and Creating XML */
-XMLRPC_REQUEST XMLRPC_REQUEST_FromXML(const char* in_buf, int len, XMLRPC_REQUEST_INPUT_OPTIONS in_options);
-XMLRPC_VALUE XMLRPC_VALUE_FromXML(const char* in_buf, int len, XMLRPC_REQUEST_INPUT_OPTIONS in_options);
-char* XMLRPC_REQUEST_ToXML(XMLRPC_REQUEST request, int *buf_len);
-char* XMLRPC_VALUE_ToXML(XMLRPC_VALUE val, int* buf_len);
-
-/* Request manipulation funcs */
-const char* XMLRPC_RequestSetMethodName(XMLRPC_REQUEST request, const char* methodName);
-const char* XMLRPC_RequestGetMethodName(XMLRPC_REQUEST request);
-XMLRPC_REQUEST XMLRPC_RequestNew(void);
-void XMLRPC_RequestFree(XMLRPC_REQUEST request, int bFreeIO);
-XMLRPC_REQUEST_OUTPUT_OPTIONS XMLRPC_RequestSetOutputOptions(XMLRPC_REQUEST request, XMLRPC_REQUEST_OUTPUT_OPTIONS output);
-XMLRPC_REQUEST_OUTPUT_OPTIONS XMLRPC_RequestGetOutputOptions(XMLRPC_REQUEST request);
-XMLRPC_VALUE XMLRPC_RequestSetData(XMLRPC_REQUEST request, XMLRPC_VALUE data);
-XMLRPC_VALUE XMLRPC_RequestGetData(XMLRPC_REQUEST request);
-XMLRPC_REQUEST_TYPE XMLRPC_RequestSetRequestType(XMLRPC_REQUEST request, XMLRPC_REQUEST_TYPE type);
-XMLRPC_REQUEST_TYPE XMLRPC_RequestGetRequestType(XMLRPC_REQUEST request);
-
-/* Server Creation/Destruction; Method Registration and Invocation */
-XMLRPC_SERVER XMLRPC_ServerCreate(void);
-XMLRPC_SERVER XMLRPC_GetGlobalServer(void); /* better to use XMLRPC_ServerCreate if you can */
-void XMLRPC_ServerDestroy(XMLRPC_SERVER server);
-int XMLRPC_ServerRegisterMethod(XMLRPC_SERVER server, const char *name, XMLRPC_Callback cb);
-XMLRPC_Callback XMLRPC_ServerFindMethod(XMLRPC_SERVER server, const char* callName);
-XMLRPC_VALUE XMLRPC_ServerCallMethod(XMLRPC_SERVER server, XMLRPC_REQUEST request, void* userData);
-
-#include "xmlrpc_introspection.h"
-
-/* Fault interrogation funcs */
-int XMLRPC_ValueIsFault (XMLRPC_VALUE value);
-int XMLRPC_ResponseIsFault(XMLRPC_REQUEST response);
-int XMLRPC_GetValueFaultCode (XMLRPC_VALUE value);
-int XMLRPC_GetResponseFaultCode(XMLRPC_REQUEST response);
-const char* XMLRPC_GetValueFaultString (XMLRPC_VALUE value);
-const char* XMLRPC_GetResponseFaultString (XMLRPC_REQUEST response);
-
-
-/* Public Utility funcs */
-XMLRPC_VALUE XMLRPC_UtilityCreateFault(int fault_code, const char* fault_string);
-void XMLRPC_Free(void* mem);
-const char* XMLRPC_GetVersionString(void);
-
-/****d* VALUE/XMLRPC_MACROS
- * NAME
- * Some Helpful Macros
- * NOTES
- * Some macros for making life easier. Should be self-explanatory.
- * SEE ALSO
- * XMLRPC_AddValueToVector ()
- * XMLRPC_VectorGetValueWithID_Case ()
- * XMLRPC_VALUE
- * SOURCE
- */
-
-/* Append values to vector */
-#define XMLRPC_VectorAppendString(vector, id, s, len) XMLRPC_AddValueToVector(vector, XMLRPC_CreateValueString(id, s, len))
-#define XMLRPC_VectorAppendBase64(vector, id, s, len) XMLRPC_AddValueToVector(vector, XMLRPC_CreateValueBase64(id, s, len))
-#define XMLRPC_VectorAppendDateTime(vector, id, time) XMLRPC_AddValueToVector(vector, XMLRPC_CreateValueDateTime(id, time))
-#define XMLRPC_VectorAppendDateTime_ISO8601(vector, id, s) XMLRPC_AddValueToVector(vector, XMLRPC_CreateValueDateTime_ISO8601(id, s))
-#define XMLRPC_VectorAppendDouble(vector, id, f) XMLRPC_AddValueToVector(vector, XMLRPC_CreateValueDouble(id, f))
-#define XMLRPC_VectorAppendInt(vector, id, i) XMLRPC_AddValueToVector(vector, XMLRPC_CreateValueInt(id, i))
-#define XMLRPC_VectorAppendBoolean(vector, id, i) XMLRPC_AddValueToVector(vector, XMLRPC_CreateValueBoolean(id, i))
-
-/* Get named values from vector */
-#define XMLRPC_VectorGetValueWithID(vector, id) XMLRPC_VectorGetValueWithID_Case(vector, id, XMLRPC_DEFAULT_ID_CASE_SENSITIVITY)
-#define XMLRPC_VectorGetStringWithID(vector, id) XMLRPC_GetValueString(XMLRPC_VectorGetValueWithID(vector, id))
-#define XMLRPC_VectorGetBase64WithID(vector, id) XMLRPC_GetValueBase64(XMLRPC_VectorGetValueWithID(vector, id))
-#define XMLRPC_VectorGetDateTimeWithID(vector, id) XMLRPC_GetValueDateTime(XMLRPC_VectorGetValueWithID(vector, id))
-#define XMLRPC_VectorGetDoubleWithID(vector, id) XMLRPC_GetValueDouble(XMLRPC_VectorGetValueWithID(vector, id))
-#define XMLRPC_VectorGetIntWithID(vector, id) XMLRPC_GetValueInt(XMLRPC_VectorGetValueWithID(vector, id))
-#define XMLRPC_VectorGetBooleanWithID(vector, id) XMLRPC_GetValueBoolean(XMLRPC_VectorGetValueWithID(vector, id))
-
-/******/
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* not XMLRPC_ALREADY_INCLUDED */
-
-
-
diff --git a/ext/xmlrpc/libxmlrpc/xmlrpc.m4 b/ext/xmlrpc/libxmlrpc/xmlrpc.m4
deleted file mode 100644
index e89c245f02..0000000000
--- a/ext/xmlrpc/libxmlrpc/xmlrpc.m4
+++ /dev/null
@@ -1,12 +0,0 @@
-AC_DEFUN(XMLRPC_CHECKS,[
-
-AC_REQUIRE([AC_PROG_CC])
-AC_REQUIRE([AC_PROG_LN_S])
-AC_REQUIRE([AC_PROG_RANLIB])
-
-AC_DEFINE(UNDEF_THREADS_HACK,,[ ])
-
-XMLRPC_HEADER_CHECKS
-XMLRPC_TYPE_CHECKS
-XMLRPC_FUNCTION_CHECKS
-])
diff --git a/ext/xmlrpc/libxmlrpc/xmlrpc_introspection.c b/ext/xmlrpc/libxmlrpc/xmlrpc_introspection.c
deleted file mode 100644
index 78ec658038..0000000000
--- a/ext/xmlrpc/libxmlrpc/xmlrpc_introspection.c
+++ /dev/null
@@ -1,601 +0,0 @@
-/*
- This file is part of libXMLRPC - a C library for xml-encoded function calls.
-
- Author: Dan Libby (dan@libby.com)
- Epinions.com may be contacted at feedback@epinions-inc.com
-*/
-
-/*
- Copyright 2001 Epinions, Inc.
-
- Subject to the following 3 conditions, Epinions, Inc. permits you, free
- of charge, to (a) use, copy, distribute, modify, perform and display this
- software and associated documentation files (the "Software"), and (b)
- permit others to whom the Software is furnished to do so as well.
-
- 1) The above copyright notice and this permission notice shall be included
- without modification in all copies or substantial portions of the
- Software.
-
- 2) THE SOFTWARE IS PROVIDED "AS IS", WITHOUT ANY WARRANTY OR CONDITION OF
- ANY KIND, EXPRESS, IMPLIED OR STATUTORY, INCLUDING WITHOUT LIMITATION ANY
- IMPLIED WARRANTIES OF ACCURACY, MERCHANTABILITY, FITNESS FOR A PARTICULAR
- PURPOSE OR NONINFRINGEMENT.
-
- 3) IN NO EVENT SHALL EPINIONS, INC. BE LIABLE FOR ANY DIRECT, INDIRECT,
- SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES OR LOST PROFITS ARISING OUT
- OF OR IN CONNECTION WITH THE SOFTWARE (HOWEVER ARISING, INCLUDING
- NEGLIGENCE), EVEN IF EPINIONS, INC. IS AWARE OF THE POSSIBILITY OF SUCH
- DAMAGES.
-
-*/
-
-
-/****h* ABOUT/xmlrpc_introspection
- * AUTHOR
- * Dan Libby, aka danda (dan@libby.com)
- * HISTORY
- * $Log$
- * Revision 1.3 2002/07/05 04:43:53 danda
- * merged in updates from SF project. bring php repository up to date with xmlrpc-epi version 0.51
- *
- * Revision 1.9 2001/09/29 21:58:05 danda
- * adding cvs log to history section
- *
- * 4/10/2001 -- danda -- initial introspection support
- * TODO
- * NOTES
- *******/
-
-
-#ifdef _WIN32
-#include "xmlrpc_win32.h"
-#endif
-#include "queue.h"
-#include "xmlrpc.h"
-#include "xmlrpc_private.h"
-#include "xmlrpc_introspection_private.h"
-#include <string.h>
-#include <stdlib.h>
-#include <stdarg.h>
-
-
-/* forward declarations for static (non public, non api) funcs */
-static XMLRPC_VALUE xi_system_describe_methods_cb(XMLRPC_SERVER server, XMLRPC_REQUEST input, void* userData);
-static XMLRPC_VALUE xi_system_list_methods_cb(XMLRPC_SERVER server, XMLRPC_REQUEST input, void* userData);
-static XMLRPC_VALUE xi_system_method_signature_cb(XMLRPC_SERVER server, XMLRPC_REQUEST input, void* userData);
-static XMLRPC_VALUE xi_system_method_help_cb(XMLRPC_SERVER server, XMLRPC_REQUEST input, void* userData);
-
-
-/*-**********************************
-* Introspection Callbacks (methods) *
-************************************/
-
-/* iterates through a list of structs and finds the one with key "name" matching
- * needle. slow, would benefit from a struct key hash.
- */
-inline XMLRPC_VALUE find_named_value(XMLRPC_VALUE list, const char* needle) {
- XMLRPC_VALUE xIter = XMLRPC_VectorRewind(list);
- while(xIter) {
- const char* name = XMLRPC_VectorGetStringWithID(xIter, xi_token_name);
- if(name && !strcmp(name, needle)) {
- return xIter;
- }
- xIter = XMLRPC_VectorNext(list);
- }
- return NULL;
-}
-
-
-/* iterates through docs callbacks and calls any that have not yet been called */
-static void check_docs_loaded(XMLRPC_SERVER server, void* userData) {
- if(server) {
- q_iter qi = Q_Iter_Head_F(&server->docslist);
- while( qi ) {
- doc_method* dm = Q_Iter_Get_F(qi);
- if(dm && !dm->b_called) {
- dm->method(server, userData);
- dm->b_called = 1;
- }
- qi = Q_Iter_Next_F(qi);
- }
- }
-}
-
-
-/* utility function for xi_system_describe_methods_cb */
-inline void describe_method(XMLRPC_SERVER server, XMLRPC_VALUE vector, const char* method) {
- if(method) {
- server_method* sm = find_method(server, method);
- if(sm) {
- XMLRPC_AddValueToVector(vector, sm->desc);
- }
- }
-}
-
-
-
-/* system.describeMethods() callback */
-static XMLRPC_VALUE xi_system_describe_methods_cb(XMLRPC_SERVER server, XMLRPC_REQUEST input, void* userData) {
- XMLRPC_VALUE xParams = XMLRPC_VectorRewind(XMLRPC_RequestGetData(input));
- XMLRPC_VALUE xResponse = XMLRPC_CreateVector(NULL, xmlrpc_vector_struct);
- XMLRPC_VALUE xMethodList = XMLRPC_CreateVector("methodList", xmlrpc_vector_array);
- XMLRPC_VALUE xTypeList = NULL;
- int bAll = 1;
-
- /* lazy loading of introspection data */
- check_docs_loaded(server, userData);
-
- xTypeList = XMLRPC_VectorGetValueWithID(server->xIntrospection, "typeList");
-
- XMLRPC_AddValueToVector(xResponse, xTypeList);
- XMLRPC_AddValueToVector(xResponse, xMethodList);
-
- /* check if we have any param */
- if(xParams) {
- /* check if string or vector (1 or n) */
- XMLRPC_VALUE_TYPE type = XMLRPC_GetValueType(xParams);
- if(type == xmlrpc_string) {
- /* just one. spit it out. */
- describe_method(server, xMethodList, XMLRPC_GetValueString(xParams));
- bAll = 0;
- }
- else if(type == xmlrpc_vector) {
- /* multiple. spit all out */
- XMLRPC_VALUE xIter = XMLRPC_VectorRewind(xParams);
- while(xIter) {
- describe_method(server, xMethodList, XMLRPC_GetValueString(xIter));
- xIter = XMLRPC_VectorNext(xParams);
- }
- bAll = 0;
- }
- }
-
- /* otherwise, default to sending all methods */
- if(bAll) {
- q_iter qi = Q_Iter_Head_F(&server->methodlist);
- while( qi ) {
- server_method* sm = Q_Iter_Get_F(qi);
- if(sm) {
- XMLRPC_AddValueToVector(xMethodList, sm->desc);
- }
- qi = Q_Iter_Next_F(qi);
- }
- }
-
- return xResponse;
-}
-
-/* this complies with system.listMethods as defined at http://xmlrpc.usefulinc.com/doc/reserved.html */
-static XMLRPC_VALUE xi_system_list_methods_cb(XMLRPC_SERVER server, XMLRPC_REQUEST input, void* userData) {
- XMLRPC_VALUE xResponse = XMLRPC_CreateVector(NULL, xmlrpc_vector_array);
-
- q_iter qi = Q_Iter_Head_F(&server->methodlist);
- while( qi ) {
- server_method* sm = Q_Iter_Get_F(qi);
- if(sm) {
- XMLRPC_VectorAppendString(xResponse, 0, sm->name, 0);
- }
- qi = Q_Iter_Next_F(qi);
- }
- return xResponse;
-}
-
-/* this complies with system.methodSignature as defined at
- * http://xmlrpc.usefulinc.com/doc/sysmethodsig.html
- */
-static XMLRPC_VALUE xi_system_method_signature_cb(XMLRPC_SERVER server, XMLRPC_REQUEST input, void* userData) {
- const char* method = XMLRPC_GetValueString(XMLRPC_VectorRewind(XMLRPC_RequestGetData(input)));
- XMLRPC_VALUE xResponse = NULL;
-
- /* lazy loading of introspection data */
- check_docs_loaded(server, userData);
-
- if(method) {
- server_method* sm = find_method(server, method);
- if(sm && sm->desc) {
- XMLRPC_VALUE xTypesArray = XMLRPC_CreateVector(NULL, xmlrpc_vector_array);
- XMLRPC_VALUE xIter, xParams, xSig, xSigIter;
- const char* type;
-
- /* array of possible signatures. */
- xResponse = XMLRPC_CreateVector(NULL, xmlrpc_vector_array);
-
- /* find first signature */
- xSig = XMLRPC_VectorGetValueWithID(sm->desc, xi_token_signatures);
- xSigIter = XMLRPC_VectorRewind( xSig );
-
- /* iterate through sigs */
- while(xSigIter) {
- /* first type is the return value */
- type = XMLRPC_VectorGetStringWithID(XMLRPC_VectorRewind(
- XMLRPC_VectorGetValueWithID(xSigIter, xi_token_returns)),
- xi_token_type);
- XMLRPC_AddValueToVector(xTypesArray,
- XMLRPC_CreateValueString(NULL,
- type ? type : type_to_str(xmlrpc_none, 0),
- 0));
-
- /* the rest are parameters */
- xParams = XMLRPC_VectorGetValueWithID(xSigIter, xi_token_params);
- xIter = XMLRPC_VectorRewind(xParams);
-
- /* iter through params, adding to types array */
- while(xIter) {
- XMLRPC_AddValueToVector(xTypesArray,
- XMLRPC_CreateValueString(NULL,
- XMLRPC_VectorGetStringWithID(xIter, xi_token_type),
- 0));
- xIter = XMLRPC_VectorNext(xParams);
- }
-
- /* add types for this signature */
- XMLRPC_AddValueToVector(xResponse, xTypesArray);
-
- xSigIter = XMLRPC_VectorNext( xSig );
- }
- }
- }
-
- return xResponse;
-}
-
-/* this complies with system.methodHelp as defined at
- * http://xmlrpc.usefulinc.com/doc/sysmethhelp.html
- */
-static XMLRPC_VALUE xi_system_method_help_cb(XMLRPC_SERVER server, XMLRPC_REQUEST input, void* userData) {
- const char* method = XMLRPC_GetValueString(XMLRPC_VectorRewind(XMLRPC_RequestGetData(input)));
- XMLRPC_VALUE xResponse = NULL;
-
- /* lazy loading of introspection data */
- check_docs_loaded(server, userData);
-
- if(method) {
- server_method* sm = find_method(server, method);
- if(sm && sm->desc) {
- const char* help = XMLRPC_VectorGetStringWithID(sm->desc, xi_token_purpose);
-
- /* returns a documentation string, or empty string */
- xResponse = XMLRPC_CreateValueString(NULL, help ? help : xi_token_empty, 0);
- }
- }
-
- return xResponse;
-}
-
-/*-**************************************
-* End Introspection Callbacks (methods) *
-****************************************/
-
-
-/*-************************
-* Introspection Utilities *
-**************************/
-
-/* performs registration of introspection methods */
-void xi_register_system_methods(XMLRPC_SERVER server) {
- XMLRPC_ServerRegisterMethod(server, xi_token_system_list_methods, xi_system_list_methods_cb);
- XMLRPC_ServerRegisterMethod(server, xi_token_system_method_help, xi_system_method_help_cb);
- XMLRPC_ServerRegisterMethod(server, xi_token_system_method_signature, xi_system_method_signature_cb);
- XMLRPC_ServerRegisterMethod(server, xi_token_system_describe_methods, xi_system_describe_methods_cb);
-}
-
-/* describe a value (param, return, type) */
-static XMLRPC_VALUE describeValue_worker(const char* type, const char* id, const char* desc, int optional, const char* default_val, XMLRPC_VALUE sub_params) {
- XMLRPC_VALUE xParam = NULL;
- if(id || desc) {
- xParam = XMLRPC_CreateVector(NULL, xmlrpc_vector_struct);
- XMLRPC_VectorAppendString(xParam, xi_token_name, id, 0);
- XMLRPC_VectorAppendString(xParam, xi_token_type, type, 0);
- XMLRPC_VectorAppendString(xParam, xi_token_description, desc, 0);
- if(optional != 2) {
- XMLRPC_VectorAppendInt(xParam, xi_token_optional, optional);
- }
- if(optional == 1 && default_val) {
- XMLRPC_VectorAppendString(xParam, xi_token_default, default_val, 0);
- }
- XMLRPC_AddValueToVector(xParam, sub_params);
- }
- return xParam;
-}
-
-
-/* convert an xml tree conforming to spec <url tbd> to XMLRPC_VALUE
- * suitable for use with XMLRPC_ServerAddIntrospectionData
- */
-XMLRPC_VALUE xml_element_to_method_description(xml_element* el, XMLRPC_ERROR err) {
- XMLRPC_VALUE xReturn = NULL;
-
- if(el->name) {
- const char* name = NULL;
- const char* type = NULL;
- const char* basetype = NULL;
- const char* desc = NULL;
- const char* def = NULL;
- int optional = 0;
- xml_element_attr* attr_iter = Q_Head(&el->attrs);
-
- /* grab element attributes up front to save redundant while loops */
- while(attr_iter) {
- if(!strcmp(attr_iter->key, "name")) {
- name = attr_iter->val;
- }
- else if(!strcmp(attr_iter->key, "type")) {
- type = attr_iter->val;
- }
- else if(!strcmp(attr_iter->key, "basetype")) {
- basetype = attr_iter->val;
- }
- else if(!strcmp(attr_iter->key, "desc")) {
- desc = attr_iter->val;
- }
- else if(!strcmp(attr_iter->key, "optional")) {
- if(attr_iter->val && !strcmp(attr_iter->val, "yes")) {
- optional = 1;
- }
- }
- else if(!strcmp(attr_iter->key, "default")) {
- def = attr_iter->val;
- }
- attr_iter = Q_Next(&el->attrs);
- }
-
- /* value and typeDescription behave about the same */
- if(!strcmp(el->name, "value") || !strcmp(el->name, "typeDescription")) {
- XMLRPC_VALUE xSubList = NULL;
- const char* ptype = !strcmp(el->name, "value") ? type : basetype;
- if(ptype) {
- if(Q_Size(&el->children) &&
- (!strcmp(ptype, "array") || !strcmp(ptype, "struct") || !strcmp(ptype, "mixed"))) {
- xSubList = XMLRPC_CreateVector("member", xmlrpc_vector_array);
-
- if(xSubList) {
- xml_element* elem_iter = Q_Head(&el->children);
- while(elem_iter) {
- XMLRPC_AddValueToVector(xSubList,
- xml_element_to_method_description(elem_iter, err));
- elem_iter = Q_Next(&el->children);
- }
- }
- }
- xReturn = describeValue_worker(ptype, name, (desc ? desc : (xSubList ? NULL : el->text.str)), optional, def, xSubList);
- }
- }
-
- /* these three kids are about equivalent */
- else if(!strcmp(el->name, "params") ||
- !strcmp(el->name, "returns") ||
- !strcmp(el->name, "signature")) {
- if(Q_Size(&el->children)) {
- xml_element* elem_iter = Q_Head(&el->children);
- xReturn = XMLRPC_CreateVector(!strcmp(el->name, "signature") ? NULL : el->name, xmlrpc_vector_struct);
-
-
- while(elem_iter) {
- XMLRPC_AddValueToVector(xReturn,
- xml_element_to_method_description(elem_iter, err));
- elem_iter = Q_Next(&el->children);
- }
- }
- }
-
-
- else if(!strcmp(el->name, "methodDescription")) {
- xml_element* elem_iter = Q_Head(&el->children);
- xReturn = XMLRPC_CreateVector(NULL, xmlrpc_vector_struct);
-
- XMLRPC_VectorAppendString(xReturn, xi_token_name, name, 0);
-
- while(elem_iter) {
- XMLRPC_AddValueToVector(xReturn,
- xml_element_to_method_description(elem_iter, err));
- elem_iter = Q_Next(&el->children);
- }
- }
-
- /* items are slightly special */
- else if(!strcmp(el->name, "item")) {
- xReturn = XMLRPC_CreateValueString(name, el->text.str, el->text.len);
- }
-
- /* sure. we'll let any ol element with children through */
- else if(Q_Size(&el->children)) {
- xml_element* elem_iter = Q_Head(&el->children);
- xReturn = XMLRPC_CreateVector(el->name, xmlrpc_vector_mixed);
-
- while(elem_iter) {
- XMLRPC_AddValueToVector(xReturn,
- xml_element_to_method_description(elem_iter, err));
- elem_iter = Q_Next(&el->children);
- }
- }
-
- /* or anything at all really, so long as its got some text.
- * no reason being all snotty about a spec, right?
- */
- else if(el->name && el->text.len) {
- xReturn = XMLRPC_CreateValueString(el->name, el->text.str, el->text.len);
- }
- }
-
- return xReturn;
-}
-
-/*-****************************
-* End Introspection Utilities *
-******************************/
-
-
-
-/*-******************
-* Introspection API *
-********************/
-
-
-/****f* VALUE/XMLRPC_IntrospectionCreateDescription
- * NAME
- * XMLRPC_IntrospectionCreateDescription
- * SYNOPSIS
- * XMLRPC_VALUE XMLRPC_IntrospectionCreateDescription(const char* xml, XMLRPC_ERROR err)
- * FUNCTION
- * converts raw xml describing types and methods into an
- * XMLRPC_VALUE suitable for use with XMLRPC_ServerAddIntrospectionData()
- * INPUTS
- * xml - xml data conforming to introspection spec at <url tbd>
- * err - optional pointer to error struct. filled in if error occurs and not NULL.
- * RESULT
- * XMLRPC_VALUE - newly created value, or NULL if fatal error.
- * BUGS
- * Currently does little or no validation of xml.
- * Only parse errors are currently reported in err, not structural errors.
- * SEE ALSO
- * XMLRPC_ServerAddIntrospectionData ()
- * SOURCE
- */
-XMLRPC_VALUE XMLRPC_IntrospectionCreateDescription(const char* xml, XMLRPC_ERROR err) {
- XMLRPC_VALUE xReturn = NULL;
- xml_element* root = xml_elem_parse_buf(xml, 0, 0, err ? &err->xml_elem_error : NULL);
-
- if(root) {
- xReturn = xml_element_to_method_description(root, err);
-
- xml_elem_free(root);
- }
-
- return xReturn;
-
-}
-/*******/
-
-
-/****f* SERVER/XMLRPC_ServerAddIntrospectionData
- * NAME
- * XMLRPC_ServerAddIntrospectionData
- * SYNOPSIS
- * int XMLRPC_ServerAddIntrospectionData(XMLRPC_SERVER server, XMLRPC_VALUE desc)
- * FUNCTION
- * updates server with additional introspection data
- * INPUTS
- * server - target server
- * desc - introspection data, should be a struct generated by
- * XMLRPC_IntrospectionCreateDescription ()
- * RESULT
- * int - 1 if success, else 0
- * NOTES
- * - function will fail if neither typeList nor methodList key is present in struct.
- * - if method or type already exists, it will be replaced.
- * - desc is never freed by the server. caller is responsible for cleanup.
- * BUGS
- * - horribly slow lookups. prime candidate for hash improvements.
- * - uglier and more complex than I like to see for API functions.
- * SEE ALSO
- * XMLRPC_ServerAddIntrospectionData ()
- * XMLRPC_ServerRegisterIntrospectionCallback ()
- * XMLRPC_CleanupValue ()
- * SOURCE
- */
-int XMLRPC_ServerAddIntrospectionData(XMLRPC_SERVER server, XMLRPC_VALUE desc) {
- int bSuccess = 0;
- if(server && desc) {
- XMLRPC_VALUE xNewTypes = XMLRPC_VectorGetValueWithID(desc, "typeList");
- XMLRPC_VALUE xNewMethods = XMLRPC_VectorGetValueWithID(desc, "methodList");
- XMLRPC_VALUE xServerTypes = XMLRPC_VectorGetValueWithID(server->xIntrospection, "typeList");
-
- if(xNewMethods) {
- XMLRPC_VALUE xMethod = XMLRPC_VectorRewind(xNewMethods);
-
- while(xMethod) {
- const char* name = XMLRPC_VectorGetStringWithID(xMethod, xi_token_name);
- server_method* sm = find_method(server, name);
-
- if(sm) {
- if(sm->desc) {
- XMLRPC_CleanupValue(sm->desc);
- }
- sm->desc = XMLRPC_CopyValue(xMethod);
- bSuccess = 1;
- }
-
- xMethod = XMLRPC_VectorNext(xNewMethods);
- }
- }
- if(xNewTypes) {
- if(!xServerTypes) {
- if(!server->xIntrospection) {
- server->xIntrospection = XMLRPC_CreateVector(NULL, xmlrpc_vector_struct);
- }
-
- XMLRPC_AddValueToVector(server->xIntrospection, xNewTypes);
- bSuccess = 1;
- }
- else {
- XMLRPC_VALUE xIter = XMLRPC_VectorRewind(xNewTypes);
- while(xIter) {
- /* get rid of old values */
- XMLRPC_VALUE xPrev = find_named_value(xServerTypes, XMLRPC_VectorGetStringWithID(xIter, xi_token_name));
- if(xPrev) {
- XMLRPC_VectorRemoveValue(xServerTypes, xPrev);
- }
- XMLRPC_AddValueToVector(xServerTypes, xIter);
- bSuccess = 1;
- xIter = XMLRPC_VectorNext(xNewTypes);
- }
- }
- }
- }
- return bSuccess;
-}
-/*******/
-
-
-/****f* SERVER/XMLRPC_ServerRegisterIntrospectionCallback
- * NAME
- * XMLRPC_ServerRegisterIntrospectionCallback
- * SYNOPSIS
- * int XMLRPC_ServerRegisterIntrospectionCallback(XMLRPC_SERVER server, XMLRPC_IntrospectionCallback cb)
- * FUNCTION
- * registers a callback for lazy generation of introspection data
- * INPUTS
- * server - target server
- * cb - callback that will generate introspection data
- * RESULT
- * int - 1 if success, else 0
- * NOTES
- * parsing xml and generating introspection data is fairly expensive, thus a
- * server may wish to wait until this data is actually requested before generating
- * it. Any number of callbacks may be registered at any time. A given callback
- * will only ever be called once, the first time an introspection request is
- * processed after the time of callback registration.
- * SEE ALSO
- * XMLRPC_ServerAddIntrospectionData ()
- * XMLRPC_IntrospectionCreateDescription ()
- * SOURCE
- */
-int XMLRPC_ServerRegisterIntrospectionCallback(XMLRPC_SERVER server, XMLRPC_IntrospectionCallback cb) {
- int bSuccess = 0;
- if(server && cb) {
-
- doc_method* dm = calloc(1, sizeof(doc_method));
-
- if(dm) {
- dm->method = cb;
- dm->b_called = 0;
-
- if(Q_PushTail(&server->docslist, dm)) {
- bSuccess = 1;
- }
- else {
- my_free(dm);
- }
- }
- }
- return 0;
-}
-/*******/
-
-/*-**********************
-* End Introspection API *
-************************/
-
-
-
diff --git a/ext/xmlrpc/libxmlrpc/xmlrpc_introspection.h b/ext/xmlrpc/libxmlrpc/xmlrpc_introspection.h
deleted file mode 100644
index 656e441b96..0000000000
--- a/ext/xmlrpc/libxmlrpc/xmlrpc_introspection.h
+++ /dev/null
@@ -1,101 +0,0 @@
-/*
- This file is part of libXMLRPC - a C library for xml-encoded function calls.
-
- Author: Dan Libby (dan@libby.com)
- Epinions.com may be contacted at feedback@epinions-inc.com
-*/
-
-/*
- Copyright 2000 Epinions, Inc.
-
- Subject to the following 3 conditions, Epinions, Inc. permits you, free
- of charge, to (a) use, copy, distribute, modify, perform and display this
- software and associated documentation files (the "Software"), and (b)
- permit others to whom the Software is furnished to do so as well.
-
- 1) The above copyright notice and this permission notice shall be included
- without modification in all copies or substantial portions of the
- Software.
-
- 2) THE SOFTWARE IS PROVIDED "AS IS", WITHOUT ANY WARRANTY OR CONDITION OF
- ANY KIND, EXPRESS, IMPLIED OR STATUTORY, INCLUDING WITHOUT LIMITATION ANY
- IMPLIED WARRANTIES OF ACCURACY, MERCHANTABILITY, FITNESS FOR A PARTICULAR
- PURPOSE OR NONINFRINGEMENT.
-
- 3) IN NO EVENT SHALL EPINIONS, INC. BE LIABLE FOR ANY DIRECT, INDIRECT,
- SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES OR LOST PROFITS ARISING OUT
- OF OR IN CONNECTION WITH THE SOFTWARE (HOWEVER ARISING, INCLUDING
- NEGLIGENCE), EVEN IF EPINIONS, INC. IS AWARE OF THE POSSIBILITY OF SUCH
- DAMAGES.
-
-*/
-
-/* IMPORTANT!
- *
- * only public (official API) things should be in this file. Anything else
- * should go in <group>_private.h, or in the appropriate .c file.
- */
-
-
-#ifndef __XI_INTROSPECTION_H
-/*
- * Avoid include redundancy.
- */
-#define __XI_INTROSPECTION_H
-
-/*----------------------------------------------------------------------------
- * xmlrpc_introspection.h
- *
- * Purpose:
- * define public introspection API
- * Comments:
- */
-
-/*----------------------------------------------------------------------------
- * Constants
- */
- #define xi_token_params "params"
- #define xi_token_returns "returns"
- #define xi_token_related "related"
- #define xi_token_sub "sub"
-
-
-/*----------------------------------------------------------------------------
- * Includes
- */
-
-/*----------------------------------------------------------------------------
- * Structures
- */
-
- /****d* VALUE/XMLRPC_IntrospectionCallback
- * NAME
- * XMLRPC_IntrospectionCallback
- * NOTES
- * Function prototype for lazy documentation generation (not generated until requested).
- * SOURCE
- */
-typedef void (*XMLRPC_IntrospectionCallback)(XMLRPC_SERVER server, void* userData);
-/******/
-
-
-/*----------------------------------------------------------------------------
- * Globals
- */
-
-/*----------------------------------------------------------------------------
- * Functions
- */
-XMLRPC_VALUE XMLRPC_IntrospectionCreateDescription(const char* xml, XMLRPC_ERROR error);
-int XMLRPC_ServerAddIntrospectionData(XMLRPC_SERVER server, XMLRPC_VALUE desc);
-int XMLRPC_ServerRegisterIntrospectionCallback(XMLRPC_SERVER server, XMLRPC_IntrospectionCallback cb);
-
-/*----------------------------------------------------------------------------
- * Macros
- */
-
-
-#endif /* __XI_INTROSPECTION_H */
-
-
-
diff --git a/ext/xmlrpc/libxmlrpc/xmlrpc_introspection_private.h b/ext/xmlrpc/libxmlrpc/xmlrpc_introspection_private.h
deleted file mode 100644
index 7b97fa7ed7..0000000000
--- a/ext/xmlrpc/libxmlrpc/xmlrpc_introspection_private.h
+++ /dev/null
@@ -1,106 +0,0 @@
-/*
- This file is part of libXMLRPC - a C library for xml-encoded function calls.
-
- Author: Dan Libby (dan@libby.com)
- Epinions.com may be contacted at feedback@epinions-inc.com
-*/
-
-/*
- Copyright 2001 Dan Libby, Epinions, Inc.
-
- Subject to the following 3 conditions, Epinions, Inc. permits you, free
- of charge, to (a) use, copy, distribute, modify, perform and display this
- software and associated documentation files (the "Software"), and (b)
- permit others to whom the Software is furnished to do so as well.
-
- 1) The above copyright notice and this permission notice shall be included
- without modification in all copies or substantial portions of the
- Software.
-
- 2) THE SOFTWARE IS PROVIDED "AS IS", WITHOUT ANY WARRANTY OR CONDITION OF
- ANY KIND, EXPRESS, IMPLIED OR STATUTORY, INCLUDING WITHOUT LIMITATION ANY
- IMPLIED WARRANTIES OF ACCURACY, MERCHANTABILITY, FITNESS FOR A PARTICULAR
- PURPOSE OR NONINFRINGEMENT.
-
- 3) IN NO EVENT SHALL EPINIONS, INC. BE LIABLE FOR ANY DIRECT, INDIRECT,
- SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES OR LOST PROFITS ARISING OUT
- OF OR IN CONNECTION WITH THE SOFTWARE (HOWEVER ARISING, INCLUDING
- NEGLIGENCE), EVEN IF EPINIONS, INC. IS AWARE OF THE POSSIBILITY OF SUCH
- DAMAGES.
-
-*/
-
-/* IMPORTANT!
- *
- * only non-public things should be in this file. It is fine for any .c file
- * in xmlrpc/src to include it, but users of the public API should never
- * include it, and thus *.h files that are part of the public API should
- * never include it, or they would break if this file is not present.
- */
-
-
-#ifndef __XI_INTROSPECTION_PRIVATE_H
-/*
- * Avoid include redundancy.
- */
-#define __XI_INTROSPECTION_PRIVATE_H
-
-/*----------------------------------------------------------------------------
- * xmlrpc_introspection_private.h
- *
- * Purpose:
- * define non-public introspection routines
- * Comments:
- */
-
-/*----------------------------------------------------------------------------
- * Constants
- */
-#define xi_token_default "default"
-#define xi_token_description "description"
-#define xi_token_name "name"
-#define xi_token_optional "optional"
-#define xi_token_params "params"
-#define xi_token_purpose "purpose"
-#define xi_token_returns "returns"
-#define xi_token_signatures "signatures"
-#define xi_token_type "type"
-#define xi_token_version "version"
-#define xi_token_empty ""
-#define xi_token_system_describe_methods "system.describeMethods"
-#define xi_token_system_list_methods "system.listMethods"
-#define xi_token_system_method_help "system.methodHelp"
-#define xi_token_system_method_signature "system.methodSignature"
-
-
-/*----------------------------------------------------------------------------
- * Includes
- */
-
-/*----------------------------------------------------------------------------
- * Structures
- */
-typedef struct _doc_method {
- XMLRPC_IntrospectionCallback method;
- int b_called;
-} doc_method;
-
-/*----------------------------------------------------------------------------
- * Globals
- */
-
-/*----------------------------------------------------------------------------
- * Functions
- */
-void xi_register_system_methods(XMLRPC_SERVER server);
-
-/*----------------------------------------------------------------------------
- * Macros
- */
-
-
-#endif /* __XI_INTROSPECTION_PRIVATE_H */
-
-
-
-
diff --git a/ext/xmlrpc/libxmlrpc/xmlrpc_private.h b/ext/xmlrpc/libxmlrpc/xmlrpc_private.h
deleted file mode 100644
index 65c6b136a6..0000000000
--- a/ext/xmlrpc/libxmlrpc/xmlrpc_private.h
+++ /dev/null
@@ -1,178 +0,0 @@
-/*
- This file is part of libXMLRPC - a C library for xml-encoded function calls.
-
- Author: Dan Libby (dan@libby.com)
- Epinions.com may be contacted at feedback@epinions-inc.com
-*/
-
-/*
- Copyright 2000 Epinions, Inc.
-
- Subject to the following 3 conditions, Epinions, Inc. permits you, free
- of charge, to (a) use, copy, distribute, modify, perform and display this
- software and associated documentation files (the "Software"), and (b)
- permit others to whom the Software is furnished to do so as well.
-
- 1) The above copyright notice and this permission notice shall be included
- without modification in all copies or substantial portions of the
- Software.
-
- 2) THE SOFTWARE IS PROVIDED "AS IS", WITHOUT ANY WARRANTY OR CONDITION OF
- ANY KIND, EXPRESS, IMPLIED OR STATUTORY, INCLUDING WITHOUT LIMITATION ANY
- IMPLIED WARRANTIES OF ACCURACY, MERCHANTABILITY, FITNESS FOR A PARTICULAR
- PURPOSE OR NONINFRINGEMENT.
-
- 3) IN NO EVENT SHALL EPINIONS, INC. BE LIABLE FOR ANY DIRECT, INDIRECT,
- SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES OR LOST PROFITS ARISING OUT
- OF OR IN CONNECTION WITH THE SOFTWARE (HOWEVER ARISING, INCLUDING
- NEGLIGENCE), EVEN IF EPINIONS, INC. IS AWARE OF THE POSSIBILITY OF SUCH
- DAMAGES.
-
-*/
-
-/* only non-public things should be in this file. It is fine for any .c file
- * in xmlrpc/src to include it, but users of the public API should never
- * include it, and thus *.h files that are part of the public API should
- * never include it, or they would break if this file is not present.
- */
-
-#ifndef XMLRPC_PRIVATE_ALREADY_INCLUDED
-/*
- * Avoid include redundancy.
- */
-#define XMLRPC_PRIVATE_ALREADY_INCLUDED
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-
-/*----------------------------------------------------------------------------
- * xmlrpc_private.h
- *
- * Purpose:
- * define non-public intra-library routines & data
- * Comments:
- */
-
-/*----------------------------------------------------------------------------
- * Constants
- */
-
-
-/*----------------------------------------------------------------------------
- * Includes
- */
-
-/*----------------------------------------------------------------------------
- * Structures
- */
-
-/* Some of these are typedef'd in xmlrpc.h for public use */
-
-typedef struct _xmlrpc_vector* XMLRPC_VECTOR;
-
-/****s* VALUE/XMLRPC_VALUE
- * NAME
- * XMLRPC_VALUE
- * NOTES
- * A value of variable data type. The most important object in this API. :)
- *
- * This struct is opaque to callers and should be accessed only via accessor functions.
- * SEE ALSO
- * XMLRPC_REQUEST
- * XMLRPC_CreateValueEmpty ()
- * XMLRPC_CleanupValue ()
- * SOURCE
- */
-typedef struct _xmlrpc_value {
- XMLRPC_VALUE_TYPE type; /* data type of this value */
- XMLRPC_VECTOR v; /* vector type specific info */
- simplestring str; /* string value buffer */
- simplestring id; /* id of this value. possibly empty. */
- int i; /* integer value. */
- double d; /* double value */
- int iRefCount; /* So we know when we can delete the value . */
-} STRUCT_XMLRPC_VALUE;
-/******/
-
-/****s* VALUE/XMLRPC_REQUEST
- * NAME
- * XMLRPC_REQUEST
- * NOTES
- * Internal representation of an XML request.
- *
- * This struct is opaque to callers and should be accessed only via accessor functions.
- *
- * SEE ALSO
- * XMLRPC_VALUE
- * XMLRPC_RequestNew ()
- * XMLRPC_RequestFree ()
- * SOURCE
- */
-typedef struct _xmlrpc_request {
- XMLRPC_VALUE io; /* data associated with this request */
- simplestring methodName; /* name of method being called */
- XMLRPC_REQUEST_TYPE request_type; /* type of request */
- STRUCT_XMLRPC_REQUEST_OUTPUT_OPTIONS output; /* xml output options */
- XMLRPC_VALUE error; /* error codes */
-} STRUCT_XMLRPC_REQUEST;
-/******/
-
-/* Vector type. Used by XMLRPC_VALUE. Never visible to users of the API. */
-typedef struct _xmlrpc_vector {
- XMLRPC_VECTOR_TYPE type; /* vector type */
- queue *q; /* list of child values */
-} STRUCT_XMLRPC_VECTOR;
-/******/
-
-/****s* VALUE/XMLRPC_SERVER
- * NAME
- * XMLRPC_SERVER
- * NOTES
- * internal representation of an xmlrpc server
- *
- * This struct is opaque to callers and should be accessed only via accessor functions.
- *
- * SEE ALSO
- * XMLRPC_ServerCreate ()
- * XMLRPC_ServerDestroy ()
- * SOURCE
- */
-typedef struct _xmlrpc_server {
- queue methodlist; /* list of callback methods */
- queue docslist; /* list of introspection callbacks */
- XMLRPC_VALUE xIntrospection;
-} STRUCT_XMLRPC_SERVER;
-/******/
-
-typedef struct _server_method {
- char* name;
- XMLRPC_VALUE desc;
- XMLRPC_Callback method;
-} server_method;
-
-
-/*----------------------------------------------------------------------------
- * Globals
- */
-
-/*----------------------------------------------------------------------------
- * Functions
- */
-server_method* find_method(XMLRPC_SERVER server, const char* name);
-const char* type_to_str(XMLRPC_VALUE_TYPE type, XMLRPC_VECTOR_TYPE vtype);
-
-/*----------------------------------------------------------------------------
- * Macros
- */
-#define my_free(thing) if(thing) {free(thing); thing = 0;}
-
-
-#ifdef __cplusplus
-}
-#endif
-
-
-#endif /* XMLRPC_PRIVATE_ALREADY_INCLUDED */
-
diff --git a/ext/xmlrpc/libxmlrpc/xmlrpc_win32.h b/ext/xmlrpc/libxmlrpc/xmlrpc_win32.h
deleted file mode 100644
index 58c54bbb80..0000000000
--- a/ext/xmlrpc/libxmlrpc/xmlrpc_win32.h
+++ /dev/null
@@ -1,11 +0,0 @@
-#ifndef _XMLRPC_WIN32_H
-#define _XMLRPC_WIN32_H
-/* just some things needed to compile win32 */
-#include <windows.h>
-#include <stdlib.h>
-#define inline __inline
-#define snprintf _snprintf
-#define strcasecmp(s1, s2) stricmp(s1, s2)
-
-
-#endif \ No newline at end of file
diff --git a/ext/xmlrpc/php_xmlrpc.h b/ext/xmlrpc/php_xmlrpc.h
deleted file mode 100644
index 265cf5bd8d..0000000000
--- a/ext/xmlrpc/php_xmlrpc.h
+++ /dev/null
@@ -1,122 +0,0 @@
-/*
- This file is part of, or distributed with, libXMLRPC - a C library for
- xml-encoded function calls.
-
- Author: Dan Libby (dan@libby.com)
- Epinions.com may be contacted at feedback@epinions-inc.com
-*/
-
-/*
- Copyright 2001 Epinions, Inc.
-
- Subject to the following 3 conditions, Epinions, Inc. permits you, free
- of charge, to (a) use, copy, distribute, modify, perform and display this
- software and associated documentation files (the "Software"), and (b)
- permit others to whom the Software is furnished to do so as well.
-
- 1) The above copyright notice and this permission notice shall be included
- without modification in all copies or substantial portions of the
- Software.
-
- 2) THE SOFTWARE IS PROVIDED "AS IS", WITHOUT ANY WARRANTY OR CONDITION OF
- ANY KIND, EXPRESS, IMPLIED OR STATUTORY, INCLUDING WITHOUT LIMITATION ANY
- IMPLIED WARRANTIES OF ACCURACY, MERCHANTABILITY, FITNESS FOR A PARTICULAR
- PURPOSE OR NONINFRINGEMENT.
-
- 3) IN NO EVENT SHALL EPINIONS, INC. BE LIABLE FOR ANY DIRECT, INDIRECT,
- SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES OR LOST PROFITS ARISING OUT
- OF OR IN CONNECTION WITH THE SOFTWARE (HOWEVER ARISING, INCLUDING
- NEGLIGENCE), EVEN IF EPINIONS, INC. IS AWARE OF THE POSSIBILITY OF SUCH
- DAMAGES.
-
-*/
-
-/* auto-generated portions of this file are also subject to the php license */
-
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Dan Libby |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-#ifndef _PHP_XMLRPC_H
-#define _PHP_XMLRPC_H
-
-/* You should tweak config.m4 so this symbol (or some else suitable)
- gets defined.
-*/
-#if 1 /* HAVE_XMLRPC */
-
-extern zend_module_entry xmlrpc_module_entry;
-#define phpext_xmlrpc_ptr &xmlrpc_module_entry
-
-#ifdef PHP_WIN32
-#define PHP_XMLRPC_API __declspec(dllexport)
-#else
-#define PHP_XMLRPC_API
-#endif
-
-PHP_MINIT_FUNCTION(xmlrpc);
-PHP_MSHUTDOWN_FUNCTION(xmlrpc);
-PHP_RINIT_FUNCTION(xmlrpc);
-PHP_RSHUTDOWN_FUNCTION(xmlrpc);
-PHP_MINFO_FUNCTION(xmlrpc);
-
-PHP_FUNCTION(xmlrpc_encode);
-PHP_FUNCTION(xmlrpc_decode);
-PHP_FUNCTION(xmlrpc_decode_request);
-PHP_FUNCTION(xmlrpc_encode_request);
-PHP_FUNCTION(xmlrpc_get_type);
-PHP_FUNCTION(xmlrpc_set_type);
-PHP_FUNCTION(xmlrpc_is_fault);
-PHP_FUNCTION(xmlrpc_server_create);
-PHP_FUNCTION(xmlrpc_server_destroy);
-PHP_FUNCTION(xmlrpc_server_register_method);
-PHP_FUNCTION(xmlrpc_server_call_method);
-PHP_FUNCTION(xmlrpc_parse_method_descriptions);
-PHP_FUNCTION(xmlrpc_server_add_introspection_data);
-PHP_FUNCTION(xmlrpc_server_register_introspection_callback);
-
-/* Fill in this structure and use entries in it
- for thread safety instead of using true globals.
-*/
-typedef struct {
- int x; /* fix error in msvc, cannot have empty structs */
-} zend_xmlrpc_globals;
-
-/* In every function that needs to use variables in zend_xmlrpc_globals,
- do call XMLRPCLS_FETCH(); after declaring other variables used by
- that function, and always refer to them as XMLRPCG(variable).
- You are encouraged to rename these macros something shorter, see
- examples in any other php module directory.
-*/
-
-#else
-
-#define phpext_xmlrpc_ptr NULL
-
-#endif
-
-#endif /* _PHP_XMLRPC_H */
-
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- */
diff --git a/ext/xmlrpc/xmlrpc-epi-php.c b/ext/xmlrpc/xmlrpc-epi-php.c
deleted file mode 100644
index 90cbe8863a..0000000000
--- a/ext/xmlrpc/xmlrpc-epi-php.c
+++ /dev/null
@@ -1,1492 +0,0 @@
-/*
- This file is part of, or distributed with, libXMLRPC - a C library for
- xml-encoded function calls.
-
- Author: Dan Libby (dan@libby.com)
- Epinions.com may be contacted at feedback@epinions-inc.com
-*/
-
-/*
- Copyright 2001 Epinions, Inc.
-
- Subject to the following 3 conditions, Epinions, Inc. permits you, free
- of charge, to (a) use, copy, distribute, modify, perform and display this
- software and associated documentation files (the "Software"), and (b)
- permit others to whom the Software is furnished to do so as well.
-
- 1) The above copyright notice and this permission notice shall be included
- without modification in all copies or substantial portions of the
- Software.
-
- 2) THE SOFTWARE IS PROVIDED "AS IS", WITHOUT ANY WARRANTY OR CONDITION OF
- ANY KIND, EXPRESS, IMPLIED OR STATUTORY, INCLUDING WITHOUT LIMITATION ANY
- IMPLIED WARRANTIES OF ACCURACY, MERCHANTABILITY, FITNESS FOR A PARTICULAR
- PURPOSE OR NONINFRINGEMENT.
-
- 3) IN NO EVENT SHALL EPINIONS, INC. BE LIABLE FOR ANY DIRECT, INDIRECT,
- SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES OR LOST PROFITS ARISING OUT
- OF OR IN CONNECTION WITH THE SOFTWARE (HOWEVER ARISING, INCLUDING
- NEGLIGENCE), EVEN IF EPINIONS, INC. IS AWARE OF THE POSSIBILITY OF SUCH
- DAMAGES.
-
-*/
-
-/* auto-generated portions of this file are also subject to the php license */
-
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Dan Libby |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-/**********************************************************************
-* BUGS: *
-* - when calling a php user function, there appears to be no way to *
-* distinguish between a return value of null, and no return value *
-* at all. The xml serialization layer(s) will then return a value *
-* of null, when the right thing may be no value at all. (SOAP) *
-**********************************************************************/
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "php.h"
-#include "ext/standard/info.h"
-#include "php_ini.h"
-#include "php_xmlrpc.h"
-#include "xmlrpc.h"
-
-#define PHP_EXT_VERSION "0.51"
-
-/* You should tweak config.m4 so this symbol (or some else suitable)
- gets defined. */
-
-ZEND_DECLARE_MODULE_GLOBALS(xmlrpc)
-
-static int le_xmlrpc_server;
-
-function_entry xmlrpc_functions[] = {
- PHP_FE(xmlrpc_encode, NULL)
- PHP_FE(xmlrpc_decode, NULL)
- PHP_FE(xmlrpc_decode_request, second_arg_force_ref)
- PHP_FE(xmlrpc_encode_request, NULL)
- PHP_FE(xmlrpc_get_type, NULL)
- PHP_FE(xmlrpc_set_type, first_arg_force_ref)
- PHP_FE(xmlrpc_is_fault, NULL)
- PHP_FE(xmlrpc_server_create, NULL)
- PHP_FE(xmlrpc_server_destroy, NULL)
- PHP_FE(xmlrpc_server_register_method, NULL)
- PHP_FE(xmlrpc_server_call_method, NULL)
- PHP_FE(xmlrpc_parse_method_descriptions, NULL)
- PHP_FE(xmlrpc_server_add_introspection_data, NULL)
- PHP_FE(xmlrpc_server_register_introspection_callback, NULL)
- {NULL, NULL, NULL}
-};
-
-zend_module_entry xmlrpc_module_entry = {
- STANDARD_MODULE_HEADER,
- "xmlrpc",
- xmlrpc_functions,
- PHP_MINIT(xmlrpc),
- PHP_MSHUTDOWN(xmlrpc),
- PHP_RINIT(xmlrpc), /* Replace with NULL if there's nothing to do at request start */
- PHP_RSHUTDOWN(xmlrpc), /* Replace with NULL if there's nothing to do at request end */
- PHP_MINFO(xmlrpc),
- PHP_EXT_VERSION,
- STANDARD_MODULE_PROPERTIES
-};
-
-#ifdef COMPILE_DL_XMLRPC
-ZEND_GET_MODULE(xmlrpc)
-# ifdef PHP_WIN32
-# include "zend_arg_defs.c"
-# endif
-#endif
-
-/*******************************
-* local structures and defines *
-*******************************/
-
-/* per server data */
-typedef struct _xmlrpc_server_data {
- zval* method_map;
- zval* introspection_map;
- XMLRPC_SERVER server_ptr;
-} xmlrpc_server_data;
-
-
-/* how to format output */
-typedef struct _php_output_options {
- int b_php_out;
- int b_auto_version;
- STRUCT_XMLRPC_REQUEST_OUTPUT_OPTIONS xmlrpc_out;
-} php_output_options;
-
-/* data passed to C callback */
-typedef struct _xmlrpc_callback_data {
- zval* xmlrpc_method;
- zval* php_function;
- zval* caller_params;
- zval* return_data;
- xmlrpc_server_data* server;
- char php_executed;
-} xmlrpc_callback_data;
-
-/* output options */
-#define OUTPUT_TYPE_KEY "output_type"
-#define OUTPUT_TYPE_KEY_LEN (sizeof(OUTPUT_TYPE_KEY) - 1)
-#define OUTPUT_TYPE_VALUE_PHP "php"
-#define OUTPUT_TYPE_VALUE_XML "xml"
-
-#define VERBOSITY_KEY "verbosity"
-#define VERBOSITY_KEY_LEN (sizeof(VERBOSITY_KEY) - 1)
-#define VERBOSITY_VALUE_NO_WHITE_SPACE "no_white_space"
-#define VERBOSITY_VALUE_NEWLINES_ONLY "newlines_only"
-#define VERBOSITY_VALUE_PRETTY "pretty"
-
-#define ESCAPING_KEY "escaping"
-#define ESCAPING_KEY_LEN (sizeof(ESCAPING_KEY) - 1)
-#define ESCAPING_VALUE_CDATA "cdata"
-#define ESCAPING_VALUE_NON_ASCII "non-ascii"
-#define ESCAPING_VALUE_NON_PRINT "non-print"
-#define ESCAPING_VALUE_MARKUP "markup"
-
-#define VERSION_KEY "version"
-#define VERSION_KEY_LEN (sizeof(VERSION_KEY) - 1)
-#define VERSION_VALUE_SIMPLE "simple"
-#define VERSION_VALUE_XMLRPC "xmlrpc"
-#define VERSION_VALUE_SOAP11 "soap 1.1"
-#define VERSION_VALUE_AUTO "auto"
-
-#define ENCODING_KEY "encoding"
-#define ENCODING_KEY_LEN (sizeof(ENCODING_KEY) - 1)
-#define ENCODING_DEFAULT "iso-8859-1"
-
-/* value types */
-#define OBJECT_TYPE_ATTR "xmlrpc_type"
-#define OBJECT_VALUE_ATTR "scalar"
-#define OBJECT_VALUE_TS_ATTR "timestamp"
-
-/* faults */
-#define FAULT_CODE "faultCode"
-#define FAULT_CODE_LEN (sizeof(FAULT_CODE) - 1)
-#define FAULT_STRING "faultString"
-#define FAULT_STRING_LEN (sizeof(FAULT_STRING) - 1)
-
-/***********************
-* forward declarations *
-***********************/
-XMLRPC_VALUE_TYPE get_zval_xmlrpc_type(zval* value, zval** newvalue);
-static void php_xmlrpc_introspection_callback(XMLRPC_SERVER server, void* data);
-int sset_zval_xmlrpc_type(zval* value, XMLRPC_VALUE_TYPE type);
-zval* decode_request_worker(zval* xml_in, zval* encoding_in, zval* method_name_out);
-const char* xmlrpc_type_as_str(XMLRPC_VALUE_TYPE type, XMLRPC_VECTOR_TYPE vtype);
-XMLRPC_VALUE_TYPE xmlrpc_str_as_type(const char* str);
-XMLRPC_VECTOR_TYPE xmlrpc_str_as_vector_type(const char* str);
-int set_zval_xmlrpc_type(zval* value, XMLRPC_VALUE_TYPE type);
-
-/*********************
-* startup / shutdown *
-*********************/
-
-static void destroy_server_data(xmlrpc_server_data *server)
-{
- if (server) {
- XMLRPC_ServerDestroy(server->server_ptr);
-
- zval_dtor(server->method_map);
- FREE_ZVAL(server->method_map);
-
- zval_dtor(server->introspection_map);
- FREE_ZVAL(server->introspection_map);
-
- efree(server);
- }
-}
-
-/* called when server is being destructed. either when xmlrpc_server_destroy
- * is called, or when request ends. */
-static void xmlrpc_server_destructor(zend_rsrc_list_entry *rsrc TSRMLS_DC)
-{
- if (rsrc && rsrc->ptr) {
- destroy_server_data((xmlrpc_server_data*) rsrc->ptr);
- }
-}
-
-/* module init */
-PHP_MINIT_FUNCTION(xmlrpc)
-{
- le_xmlrpc_server = zend_register_list_destructors_ex(xmlrpc_server_destructor, NULL, "xmlrpc server", module_number);
-
- return SUCCESS;
-}
-
-/* module shutdown */
-PHP_MSHUTDOWN_FUNCTION(xmlrpc)
-{
- return SUCCESS;
-}
-
-/* Remove if there's nothing to do at request start */
-PHP_RINIT_FUNCTION(xmlrpc)
-{
- return SUCCESS;
-}
-
-/* Remove if there's nothing to do at request end */
-PHP_RSHUTDOWN_FUNCTION(xmlrpc)
-{
- return SUCCESS;
-}
-
-/* display info in phpinfo() */
-PHP_MINFO_FUNCTION(xmlrpc)
-{
- php_info_print_table_start();
- php_info_print_table_row(2, "core library version", XMLRPC_GetVersionString());
- php_info_print_table_row(2, "php extension version", PHP_EXT_VERSION);
- php_info_print_table_row(2, "author", "Dan Libby");
- php_info_print_table_row(2, "homepage", "http://xmlrpc-epi.sourceforge.net");
- php_info_print_table_row(2, "open sourced by", "Epinions.com");
- php_info_print_table_end();
-}
-
-/*******************
-* random utilities *
-*******************/
-
-/* Utility functions for adding data types to arrays, with or without key (assoc, non-assoc).
- * Could easily be further generalized to work with objects.
- */
-#if 0
-static int add_long(zval* list, char* id, int num) {
- if(id) return add_assoc_long(list, id, num);
- else return add_next_index_long(list, num);
-}
-
-static int add_double(zval* list, char* id, double num) {
- if(id) return add_assoc_double(list, id, num);
- else return add_next_index_double(list, num);
-}
-
-static int add_string(zval* list, char* id, char* string, int duplicate) {
- if(id) return add_assoc_string(list, id, string, duplicate);
- else return add_next_index_string(list, string, duplicate);
-}
-
-static int add_stringl(zval* list, char* id, char* string, uint length, int duplicate) {
- if(id) return add_assoc_stringl(list, id, string, length, duplicate);
- else return add_next_index_stringl(list, string, length, duplicate);
-}
-
-#endif
-
-static int add_zval(zval* list, const char* id, zval** val)
-{
- if (list && val) {
- if (id) {
- return zend_hash_update(Z_ARRVAL_P(list), (char*) id, strlen(id) + 1, (void *) val, sizeof(zval **), NULL);
- } else {
- return zend_hash_next_index_insert(Z_ARRVAL_P(list), (void *) val, sizeof(zval **), NULL);
- }
- }
- /* what is the correct return on error? */
- return 0;
-}
-
-#define my_zend_hash_get_current_key(ht, my_key, num_index) zend_hash_get_current_key(ht, my_key, num_index, 0)
-
-
-/*************************
-* input / output options *
-*************************/
-
-/* parse an array (user input) into output options suitable for use by xmlrpc engine
- * and determine whether to return data as xml or php vars */
-static void set_output_options(php_output_options* options, zval* output_opts)
-{
- if (options) {
-
- /* defaults */
- options->b_php_out = 0;
- options->b_auto_version = 1;
- options->xmlrpc_out.version = xmlrpc_version_1_0;
- options->xmlrpc_out.xml_elem_opts.encoding = ENCODING_DEFAULT;
- options->xmlrpc_out.xml_elem_opts.verbosity = xml_elem_pretty;
- options->xmlrpc_out.xml_elem_opts.escaping = xml_elem_markup_escaping | xml_elem_non_ascii_escaping | xml_elem_non_print_escaping;
-
- if (output_opts && Z_TYPE_P(output_opts) == IS_ARRAY) {
- zval** val;
-
- /* type of output (xml/php) */
- if (zend_hash_find(Z_ARRVAL_P(output_opts), OUTPUT_TYPE_KEY, OUTPUT_TYPE_KEY_LEN + 1, (void**) &val) == SUCCESS) {
- if (Z_TYPE_PP(val) == IS_STRING) {
- if (!strcmp(Z_STRVAL_PP(val), OUTPUT_TYPE_VALUE_PHP)) {
- options->b_php_out = 1;
- } else if (!strcmp(Z_STRVAL_PP(val), OUTPUT_TYPE_VALUE_XML)) {
- options->b_php_out = 0;
- }
- }
- }
-
- /* verbosity of generated xml */
- if (zend_hash_find(Z_ARRVAL_P(output_opts), VERBOSITY_KEY, VERBOSITY_KEY_LEN + 1, (void**) &val) == SUCCESS) {
- if (Z_TYPE_PP(val) == IS_STRING) {
- if (!strcmp(Z_STRVAL_PP(val), VERBOSITY_VALUE_NO_WHITE_SPACE)) {
- options->xmlrpc_out.xml_elem_opts.verbosity = xml_elem_no_white_space;
- } else if (!strcmp(Z_STRVAL_PP(val), VERBOSITY_VALUE_NEWLINES_ONLY)) {
- options->xmlrpc_out.xml_elem_opts.verbosity = xml_elem_newlines_only;
- } else if (!strcmp(Z_STRVAL_PP(val), VERBOSITY_VALUE_PRETTY)) {
- options->xmlrpc_out.xml_elem_opts.verbosity = xml_elem_pretty;
- }
- }
- }
-
- /* version of xml to output */
- if (zend_hash_find(Z_ARRVAL_P(output_opts), VERSION_KEY, VERSION_KEY_LEN + 1, (void**) &val) == SUCCESS) {
- if (Z_TYPE_PP(val) == IS_STRING) {
- options->b_auto_version = 0;
- if (!strcmp(Z_STRVAL_PP(val), VERSION_VALUE_XMLRPC)) {
- options->xmlrpc_out.version = xmlrpc_version_1_0;
- } else if (!strcmp(Z_STRVAL_PP(val), VERSION_VALUE_SIMPLE)) {
- options->xmlrpc_out.version = xmlrpc_version_simple;
- } else if (!strcmp((*val)->value.str.val, VERSION_VALUE_SOAP11)) {
- options->xmlrpc_out.version = xmlrpc_version_soap_1_1;
- } else { /* if(!strcmp((*val)->value.str.val, VERSION_VALUE_AUTO)) { */
- options->b_auto_version = 1;
- }
- }
- }
-
- /* 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;
- }
- }
- }
- }
- }
-}
-
-
-/******************
-* encode / decode *
-******************/
-
-/* php arrays have no distinction between array and struct types.
- * they even allow mixed. Thus, we determine the type by iterating
- * through the entire array and figuring out each element.
- * room for some optimation here if we stop after a specific # of elements.
- */
-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);
- }
- 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)
-{
- 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;
-
- 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(1) {
- int res = my_zend_hash_get_current_key(Z_ARRVAL_P(val), &my_key, &num_index);
- if(res == HASH_KEY_IS_LONG) {
- if(zend_hash_get_current_data(Z_ARRVAL_P(val), (void**)&pIter) == SUCCESS) {
- XMLRPC_AddValueToVector(xReturn, PHP_to_XMLRPC_worker(0, *pIter, depth++));
- }
- }
- else if(res == HASH_KEY_NON_EXISTANT) {
- break;
- }
- else if(res == HASH_KEY_IS_STRING) {
- if(zend_hash_get_current_data(Z_ARRVAL_P(val), (void**)&pIter) == SUCCESS) {
- XMLRPC_AddValueToVector(xReturn, PHP_to_XMLRPC_worker(my_key, *pIter, depth++));
- }
- }
-
- zend_hash_move_forward(Z_ARRVAL_P(val));
- }
- }
- break;
- default:
- break;
- }
- }
- }
- return xReturn;
-}
-
-static XMLRPC_VALUE PHP_to_XMLRPC(zval* root_val)
-{
- return PHP_to_XMLRPC_worker(NULL, root_val, 0);
-}
-
-/* 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);
- }
- xIter = XMLRPC_VectorNext(el);
- }
- }
- break;
- default:
- break;
- }
- set_zval_xmlrpc_type(elem, type);
- }
- return elem;
-}
-
-/* {{{ proto string xmlrpc_encode_request(string method, mixed params)
- Generates XML for a method request */
-PHP_FUNCTION(xmlrpc_encode_request)
-{
- XMLRPC_REQUEST xRequest = NULL;
- zval **method, **vals, **out_opts;
- char* outBuf;
- php_output_options out;
-
- if (ZEND_NUM_ARGS() < 2 || ZEND_NUM_ARGS() > 3 || (zend_get_parameters_ex(ZEND_NUM_ARGS(), &method, &vals, &out_opts) == FAILURE)) {
- WRONG_PARAM_COUNT; /* prints/logs a warning and returns */
- }
-
- set_output_options(&out, (ZEND_NUM_ARGS() == 3) ? *out_opts : 0);
-
- if(return_value_used) {
- xRequest = XMLRPC_RequestNew();
-
- if(xRequest) {
- XMLRPC_RequestSetOutputOptions(xRequest, &out.xmlrpc_out);
- if (Z_TYPE_PP(method) == IS_NULL) {
- XMLRPC_RequestSetRequestType(xRequest, xmlrpc_request_response);
- } else {
- XMLRPC_RequestSetMethodName(xRequest, Z_STRVAL_PP(method));
- XMLRPC_RequestSetRequestType(xRequest, xmlrpc_request_call);
- }
- if (Z_TYPE_PP(vals) != IS_NULL) {
- XMLRPC_RequestSetData(xRequest, PHP_to_XMLRPC(*vals));
- }
-
- outBuf = XMLRPC_REQUEST_ToXML(xRequest, 0);
- if(outBuf) {
- RETVAL_STRING(outBuf, 1);
- free(outBuf);
- }
- XMLRPC_RequestFree(xRequest, 1);
- }
- }
-}
-/* }}} */
-
-/* {{{ proto string xmlrpc_encode(mixed value)
- Generates XML for a PHP value */
-PHP_FUNCTION(xmlrpc_encode)
-{
- XMLRPC_VALUE xOut = NULL;
- zval **arg1;
- char *outBuf;
-
- if (ZEND_NUM_ARGS() != 1 || (zend_get_parameters_ex(1, &arg1) == FAILURE)) {
- WRONG_PARAM_COUNT;
- }
-
- if( return_value_used ) {
- /* convert native php type to xmlrpc type */
- xOut = PHP_to_XMLRPC(*arg1);
-
- /* generate raw xml from xmlrpc data */
- outBuf = XMLRPC_VALUE_ToXML(xOut, 0);
-
- if(xOut) {
- if(outBuf) {
- RETVAL_STRING(outBuf, 1);
- free(outBuf);
- }
- /* cleanup */
- XMLRPC_CleanupValue(xOut);
- }
- }
-}
-/* }}} */
-
-
-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) {
- convert_to_string(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])
- Decodes XML into native PHP types */
-PHP_FUNCTION(xmlrpc_decode_request)
-{
- zval **xml, **method, **encoding = NULL;
- int argc = ZEND_NUM_ARGS();
-
- if (argc < 2 || argc > 3 || (zend_get_parameters_ex(argc, &xml, &method, &encoding) == FAILURE)) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_string_ex(xml);
- convert_to_string_ex(method);
- if(argc == 3) {
- convert_to_string_ex(encoding);
- }
-
- if(return_value_used) {
- zval* retval = decode_request_worker(*xml, encoding ? *encoding : NULL, *method);
- if(retval) {
- *return_value = *retval;
- FREE_ZVAL(retval);
- }
- }
-}
-/* }}} */
-
-
-/* {{{ proto array xmlrpc_decode(string xml [, string encoding])
- Decodes XML into native PHP types */
-PHP_FUNCTION(xmlrpc_decode)
-{
- zval **arg1, **arg2 = NULL;
- int argc = ZEND_NUM_ARGS();
-
- if (argc < 1 || argc > 2 || (zend_get_parameters_ex(argc, &arg1, &arg2) == FAILURE)) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_string_ex(arg1);
- if(argc == 2) {
- convert_to_string_ex(arg2);
- }
-
- if(return_value_used) {
- zval* retval = decode_request_worker(*arg1, arg2 ? *arg2 : NULL, NULL);
- if(retval) {
- *return_value = *retval;
- FREE_ZVAL(retval);
- }
- }
-}
-/* }}} */
-
-
-/*************************
-* server related methods *
-*************************/
-
-/* {{{ proto resource xmlrpc_server_create(void)
- Creates an xmlrpc server */
-PHP_FUNCTION(xmlrpc_server_create)
-{
- if(ZEND_NUM_ARGS() != 0) {
- WRONG_PARAM_COUNT;
- }
-
- if(return_value_used) {
- zval *method_map, *introspection_map;
- xmlrpc_server_data *server = emalloc(sizeof(xmlrpc_server_data));
- MAKE_STD_ZVAL(method_map);
- MAKE_STD_ZVAL(introspection_map);
-
- array_init(method_map);
- array_init(introspection_map);
-
- /* allocate server data. free'd in destroy_server_data() */
- server->method_map = method_map;
- server->introspection_map = introspection_map;
- server->server_ptr = XMLRPC_ServerCreate();
-
- XMLRPC_ServerRegisterIntrospectionCallback(server->server_ptr, php_xmlrpc_introspection_callback);
-
- /* store for later use */
- ZEND_REGISTER_RESOURCE(return_value,server, le_xmlrpc_server);
- }
-}
-/* }}} */
-
-/* {{{ proto int xmlrpc_server_destroy(resource server)
- Destroys server resources */
-PHP_FUNCTION(xmlrpc_server_destroy)
-{
- zval **arg1;
- int bSuccess = FAILURE;
-
- if (ZEND_NUM_ARGS() != 1 || (zend_get_parameters_ex(1, &arg1) == FAILURE)) {
- WRONG_PARAM_COUNT;
- }
-
- if(Z_TYPE_PP(arg1) == IS_RESOURCE) {
- int type;
-
- xmlrpc_server_data *server = zend_list_find(Z_LVAL_PP(arg1), &type);
-
- if(server && type == le_xmlrpc_server) {
- bSuccess = zend_list_delete(Z_LVAL_PP(arg1));
-
- /* called by hashtable destructor
- * destroy_server_data(server);
- */
- }
- }
- RETVAL_LONG(bSuccess == SUCCESS);
-}
-/* }}} */
-
-
-/* called by xmlrpc C engine as method handler for all registered methods.
- * it then calls the corresponding PHP function to handle the method.
- */
-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));
-
- /* 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 */
-
- /* 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;
-
- zval_dtor(xmlrpc_params);
- FREE_ZVAL(xmlrpc_params);
-
- return NULL;
-}
-
-/* called by the C server when it first receives an introspection request. We pass this on to
- * our PHP listeners, if any
- */
-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));
-}
-
-/* {{{ proto bool xmlrpc_server_register_method(resource server, string method_name, string function)
- Register a PHP function to handle method matching method_name */
-PHP_FUNCTION(xmlrpc_server_register_method)
-{
- zval **method_key, **method_name, **handle, *method_name_save;
- int type;
- xmlrpc_server_data* server;
-
- if (ZEND_NUM_ARGS() != 3 || (zend_get_parameters_ex(3, &handle, &method_key, &method_name) == FAILURE)) {
- WRONG_PARAM_COUNT;
- }
-
- server = zend_list_find(Z_LVAL_PP(handle), &type);
-
- if(type == le_xmlrpc_server) {
- /* register with C engine. every method just calls our standard callback,
- * and it then dispatches to php as necessary
- */
- if(XMLRPC_ServerRegisterMethod(server->server_ptr, Z_STRVAL_PP(method_key), php_xmlrpc_callback)) {
- /* save for later use */
- MAKE_STD_ZVAL(method_name_save);
- *method_name_save = **method_name;
- zval_copy_ctor(method_name_save);
-
- /* register our php method */
- add_zval(server->method_map, Z_STRVAL_PP(method_key), &method_name_save);
-
- RETURN_BOOL(1);
- }
- }
- RETURN_BOOL(0);
-}
-/* }}} */
-
-
-/* {{{ proto bool xmlrpc_server_register_introspection_callback(resource server, string function)
- Register a PHP function to generate documentation */
-PHP_FUNCTION(xmlrpc_server_register_introspection_callback)
-{
- zval **method_name, **handle, *method_name_save;
- int type;
- xmlrpc_server_data* server;
-
- if (ZEND_NUM_ARGS() != 2 || (zend_get_parameters_ex(2, &handle, &method_name) == FAILURE)) {
- WRONG_PARAM_COUNT;
- }
-
- server = zend_list_find(Z_LVAL_PP(handle), &type);
-
- if(type == le_xmlrpc_server) {
- /* save for later use */
- MAKE_STD_ZVAL(method_name_save);
- *method_name_save = **method_name;
- zval_copy_ctor(method_name_save);
-
- /* register our php method */
- add_zval(server->introspection_map, NULL, &method_name_save);
-
- RETURN_BOOL(1);
- }
- RETURN_BOOL(0);
-}
-/* }}} */
-
-
-/* this function is itchin for a re-write */
-
-/* {{{ proto mixed xmlrpc_server_call_method(resource server, string xml, mixed user_data [, array output_options])
- Parses XML requests and call methods */
-PHP_FUNCTION(xmlrpc_server_call_method)
-{
- xmlrpc_callback_data data = {0};
- XMLRPC_REQUEST xRequest;
- STRUCT_XMLRPC_REQUEST_INPUT_OPTIONS input_opts;
- xmlrpc_server_data* server;
- zval **rawxml, **caller_params, **handle, **output_opts = NULL;
- int type;
- php_output_options out;
- int argc =ZEND_NUM_ARGS();
-
- if (argc < 3 || argc > 4 || (zend_get_parameters_ex(argc, &handle, &rawxml, &caller_params, &output_opts) != SUCCESS)) {
- WRONG_PARAM_COUNT;
- }
- /* user output options */
- if (argc == 3) {
- set_output_options(&out, NULL);
- }
- else {
- set_output_options(&out, *output_opts);
- }
-
- server = zend_list_find(Z_LVAL_PP(handle), &type);
-
- if(type == le_xmlrpc_server) {
- /* HACK: use output encoding for now */
- input_opts.xml_elem_opts.encoding = utf8_get_encoding_id_from_string(out.xmlrpc_out.xml_elem_opts.encoding);
-
- /* generate an XMLRPC_REQUEST from the raw xml input */
- xRequest = XMLRPC_REQUEST_FromXML(Z_STRVAL_PP(rawxml), Z_STRLEN_PP(rawxml), &input_opts);
-
- if(xRequest) {
- const char* methodname = XMLRPC_RequestGetMethodName(xRequest);
- zval **php_function;
- XMLRPC_VALUE xAnswer = NULL;
- MAKE_STD_ZVAL(data.xmlrpc_method); /* init. very important. spent a frustrating day finding this out. */
- MAKE_STD_ZVAL(data.return_data);
- Z_TYPE_P(data.return_data) = IS_NULL; /* in case value is never init'd, we don't dtor to think it is a string or something */
- Z_TYPE_P(data.xmlrpc_method) = IS_NULL;
-
- if (!methodname) {
- methodname = "";
- }
-
- /* setup some data to pass to the callback function */
- Z_STRVAL_P(data.xmlrpc_method) = estrdup(methodname);
- Z_STRLEN_P(data.xmlrpc_method) = strlen(methodname);
- Z_TYPE_P(data.xmlrpc_method) = IS_STRING;
- data.caller_params = *caller_params;
- data.php_executed = 0;
- data.server = server;
-
- /* check if the called method has been previous registered */
- if(zend_hash_find(Z_ARRVAL_P(server->method_map),
- Z_STRVAL_P(data.xmlrpc_method),
- Z_STRLEN_P(data.xmlrpc_method) + 1,
- (void**)&php_function) == SUCCESS) {
-
- data.php_function = *php_function;
- }
-
- /* We could just call the php method directly ourselves at this point, but we do this
- * with a C callback in case the xmlrpc library ever implements some cool usage stats,
- * or somesuch.
- */
- xAnswer = XMLRPC_ServerCallMethod(server->server_ptr, xRequest, &data);
- if(xAnswer && out.b_php_out) {
- zval_dtor(data.return_data);
- FREE_ZVAL(data.return_data);
- data.return_data = XMLRPC_to_PHP(xAnswer);
- } else if(data.php_executed && !out.b_php_out) {
- xAnswer = PHP_to_XMLRPC(data.return_data);
- }
-
- /* should we return data as xml? */
- if(!out.b_php_out) {
- XMLRPC_REQUEST xResponse = XMLRPC_RequestNew();
- if(xResponse) {
- char *outBuf = 0;
- int buf_len = 0;
-
- /* automagically determine output serialization type from request type */
- if (out.b_auto_version) {
- XMLRPC_REQUEST_OUTPUT_OPTIONS opts = XMLRPC_RequestGetOutputOptions(xRequest);
- if (opts) {
- out.xmlrpc_out.version = opts->version;
- }
- }
- /* set some required request hoojum */
- XMLRPC_RequestSetOutputOptions(xResponse, &out.xmlrpc_out);
- XMLRPC_RequestSetRequestType(xResponse, xmlrpc_request_response);
- XMLRPC_RequestSetData(xResponse, xAnswer);
- XMLRPC_RequestSetMethodName(xResponse, methodname);
-
- /* generate xml */
- outBuf = XMLRPC_REQUEST_ToXML(xResponse, &buf_len);
- if(outBuf) {
- RETVAL_STRINGL(outBuf, buf_len, 1);
- free(outBuf);
- }
- /* cleanup after ourselves. what a sty! */
- XMLRPC_RequestFree(xResponse, 0);
- }
- } else { /* or as native php types? */
- *return_value = *data.return_data;
- zval_copy_ctor(return_value);
- }
-
- /* cleanup after ourselves. what a sty! */
- zval_dtor(data.xmlrpc_method);
- FREE_ZVAL(data.xmlrpc_method);
- zval_dtor(data.return_data);
- FREE_ZVAL(data.return_data);
-
- if(xAnswer) {
- XMLRPC_CleanupValue(xAnswer);
- }
-
- XMLRPC_RequestFree(xRequest, 1);
- }
- }
-}
-/* }}} */
-
-
-/* {{{ proto int xmlrpc_server_add_introspection_data(resource server, array desc)
- Adds introspection documentation */
-PHP_FUNCTION(xmlrpc_server_add_introspection_data)
-{
- zval **handle, **desc;
- int type;
- xmlrpc_server_data* server;
-
- if (ZEND_NUM_ARGS() != 2 || (zend_get_parameters_ex(2, &handle, &desc) == FAILURE)) {
- WRONG_PARAM_COUNT;
- }
-
- server = zend_list_find(Z_LVAL_PP(handle), &type);
-
- if (type == le_xmlrpc_server) {
- XMLRPC_VALUE xDesc = PHP_to_XMLRPC(*desc);
- if (xDesc) {
- int retval = XMLRPC_ServerAddIntrospectionData(server->server_ptr, xDesc);
- XMLRPC_CleanupValue(xDesc);
- RETURN_LONG(retval);
- }
- }
- RETURN_LONG(0);
-}
-/* }}} */
-
-
-/* {{{ proto array xmlrpc_parse_method_descriptions(string xml)
- Decodes XML into a list of method descriptions */
-PHP_FUNCTION(xmlrpc_parse_method_descriptions)
-{
- zval **arg1, *retval;
-
- if (ZEND_NUM_ARGS() != 1 || (zend_get_parameters_ex(1, &arg1) == FAILURE)) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_string_ex(arg1);
-
- if(return_value_used) {
- STRUCT_XMLRPC_ERROR err = {0};
- XMLRPC_VALUE xVal = XMLRPC_IntrospectionCreateDescription(Z_STRVAL_PP(arg1), &err);
- if(xVal) {
- retval = XMLRPC_to_PHP(xVal);
-
- if(retval) {
- *return_value = *retval;
- zval_copy_ctor(return_value);
- }
- /* dust, sweep, and mop */
- XMLRPC_CleanupValue(xVal);
- } 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 create introspection data",
- err.xml_elem_error.column, err.xml_elem_error.line, err.xml_elem_error.parser_error);
- } else {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid xml structure. Unable to create introspection data");
- }
-
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "xml parse error. no method description created");
- }
- }
-}
-/* }}} */
-
-
-/************
-* type data *
-************/
-
-#define XMLRPC_TYPE_COUNT 9
-#define XMLRPC_VECTOR_TYPE_COUNT 4
-#define TYPE_STR_MAP_SIZE (XMLRPC_TYPE_COUNT + XMLRPC_VECTOR_TYPE_COUNT)
-
-/* 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;
-}
-
-/* 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();
-
- 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;
-}
-
-/* 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;
-}
-
-
-/* set a given value to a particular type.
- * note: this only works on strings, and only for date and base64,
- * which do not have native php types. black magic lies herein.
- */
-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) {
- pval* 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);
- }
- }
- XMLRPC_CleanupValue(v);
- }
- }
- 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 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;
-#ifndef BOOL_AS_LONG
-
- /* Right thing to do, but it breaks some legacy code. */
- case IS_BOOL:
- type = xmlrpc_boolean;
- break;
-#else
- 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;
- }
- }
-
- /* if requested, return an unmolested (magic removed) copy of the value */
- if (newvalue) {
- zval** val;
-
- if ((type == xmlrpc_base64 && Z_TYPE_P(value) != IS_NULL) || type == xmlrpc_datetime) {
- if (zend_hash_find(Z_OBJPROP_P(value), OBJECT_VALUE_ATTR, sizeof(OBJECT_VALUE_ATTR), (void**) &val) == SUCCESS) {
- *newvalue = *val;
- }
- } else {
- *newvalue = value;
- }
- }
- }
-
- return type;
-}
-
-
-/* {{{ proto bool xmlrpc_set_type(string value, string type)
- Sets xmlrpc type, base64 or datetime, for a PHP string value */
-PHP_FUNCTION(xmlrpc_set_type)
-{
- zval **arg, **type;
- XMLRPC_VALUE_TYPE vtype;
-
- if (ZEND_NUM_ARGS() != 2 || (zend_get_parameters_ex(2, &arg, &type) == FAILURE)) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_string_ex(type);
- vtype = xmlrpc_str_as_type(Z_STRVAL_PP(type));
- if (vtype != xmlrpc_none) {
- if (set_zval_xmlrpc_type(*arg, vtype) == SUCCESS) {
- RETURN_TRUE;
- }
- } else {
- zend_error(E_WARNING,"invalid type '%s' passed to xmlrpc_set_type()", Z_STRVAL_PP(type));
- }
- RETURN_FALSE;
-}
-/* }}} */
-
-/* {{{ proto string xmlrpc_get_type(mixed value)
- Gets xmlrpc type for a PHP value. Especially useful for base64 and datetime strings */
-PHP_FUNCTION(xmlrpc_get_type)
-{
- zval **arg;
- XMLRPC_VALUE_TYPE type;
- XMLRPC_VECTOR_TYPE vtype = xmlrpc_vector_none;
-
- if (ZEND_NUM_ARGS() != 1 || (zend_get_parameters_ex(1, &arg) == FAILURE)) {
- WRONG_PARAM_COUNT;
- }
-
- type = get_zval_xmlrpc_type(*arg, 0);
- if (type == xmlrpc_vector) {
- vtype = determine_vector_type(Z_ARRVAL_PP(arg));
- }
-
- RETURN_STRING((char*) xmlrpc_type_as_str(type, vtype), 1);
-}
-/* }}} */
-
-/* {{{ proto bool xmlrpc_is_fault(array)
- Determines if an array value represents an XMLRPC fault. */
-PHP_FUNCTION(xmlrpc_is_fault)
-{
- zval **arg, **val;
-
- if (ZEND_NUM_ARGS() != 1 || (zend_get_parameters_ex(1, &arg) == FAILURE)) {
- WRONG_PARAM_COUNT;
- }
-
- if (Z_TYPE_PP(arg) != IS_ARRAY) {
- php_error_docref(NULL TSRMLS_CC, E_NOTICE, "Array argument expected");
- } else {
- /* The "correct" way to do this would be to call the xmlrpc
- * library XMLRPC_ValueIsFault() func. However, doing that
- * would require us to create an xmlrpc value from the php
- * array, which is rather expensive, especially if it was
- * a big array. Thus, we resort to this not so clever hackery.
- */
- if (zend_hash_find(Z_ARRVAL_PP(arg), FAULT_CODE, FAULT_CODE_LEN + 1, (void**) &val) == SUCCESS &&
- zend_hash_find(Z_ARRVAL_PP(arg), FAULT_STRING, FAULT_STRING_LEN + 1, (void**) &val) == SUCCESS) {
- RETURN_TRUE;
- }
- }
-
- RETURN_FALSE;
-}
-/* }}} */
-
-
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- */
-
diff --git a/ext/xmlrpc/xmlrpc.dsp b/ext/xmlrpc/xmlrpc.dsp
deleted file mode 100644
index 8c455d3fcd..0000000000
--- a/ext/xmlrpc/xmlrpc.dsp
+++ /dev/null
@@ -1,211 +0,0 @@
-# Microsoft Developer Studio Project File - Name="xmlrpc" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=xmlrpc - Win32 Debug_TS
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "xmlrpc.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "xmlrpc.mak" CFG="xmlrpc - Win32 Debug_TS"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "xmlrpc - Win32 Debug_TS" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "xmlrpc - Win32 Release_TS" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "xmlrpc - Win32 Debug_TS"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug_TS"
-# PROP BASE Intermediate_Dir "Debug_TS"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug_TS"
-# PROP Intermediate_Dir "Debug_TS"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "XMLRPC_EXPORTS" /YX /FD /GZ /c
-# ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "..\.." /I "..\..\main" /I "..\..\Zend" /I "..\..\TSRM" /I "libxmlrpc" /I "..\..\bundle\expat" /D HAVE_XMLRPC=1 /D "ZEND_WIN32" /D "PHP_WIN32" /D ZEND_DEBUG=1 /D ZTS=1 /D COMPILE_DL_XMLRPC=1 /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "XMLRPC_EXPORTS" /YX /FD /GZ /c
-# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x1009 /d "_DEBUG"
-# ADD RSC /l 0x1009 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 php5ts_debug.lib expat.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /out:"..\..\Debug_TS/php_xmlrpc.dll" /pdbtype:sept /libpath:"..\..\Debug_TS"
-
-!ELSEIF "$(CFG)" == "xmlrpc - Win32 Release_TS"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release_TS"
-# PROP BASE Intermediate_Dir "Release_TS"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release_TS"
-# PROP Intermediate_Dir "Release_TS"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "XMLRPC_EXPORTS" /YX /FD /c
-# ADD CPP /nologo /MD /W3 /GX /O2 /I "..\.." /I "..\..\main" /I "..\..\Zend" /I "..\..\TSRM" /I "libxmlrpc" /I "..\..\bundle\expat" /D HAVE_XMLRPC=1 /D "ZEND_WIN32" /D ZEND_DEBUG=0 /D "PHP_WIN32" /D ZTS=1 /D COMPILE_DL_XMLRPC=1 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "XMLRPC_EXPORTS" /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x1009 /d "NDEBUG"
-# ADD RSC /l 0x1009 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386
-# ADD LINK32 php5ts.lib expat.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 /out:"..\..\Release_TS/php_xmlrpc.dll" /libpath:"..\..\Release_TS"
-
-!ENDIF
-
-# Begin Target
-
-# Name "xmlrpc - Win32 Debug_TS"
-# Name "xmlrpc - Win32 Release_TS"
-# Begin Group "Source Files"
-
-# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
-# Begin Source File
-
-SOURCE=".\xmlrpc-epi-php.c"
-# End Source File
-# End Group
-# Begin Group "Header Files"
-
-# PROP Default_Filter "h;hpp;hxx;hm;inl"
-# Begin Source File
-
-SOURCE=.\php_xmlrpc.h
-# End Source File
-# End Group
-# Begin Group "Resource Files"
-
-# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
-# End Group
-# Begin Group "libxmlrpc"
-
-# PROP Default_Filter ""
-# Begin Source File
-
-SOURCE=.\libxmlrpc\base64.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\libxmlrpc\base64.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\libxmlrpc\encodings.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\libxmlrpc\encodings.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\libxmlrpc\queue.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\libxmlrpc\queue.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\libxmlrpc\simplestring.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\libxmlrpc\simplestring.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\libxmlrpc\system_methods.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\libxmlrpc\system_methods_private.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\libxmlrpc\xml_element.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\libxmlrpc\xml_element.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\libxmlrpc\xml_to_dandarpc.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\libxmlrpc\xml_to_dandarpc.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\libxmlrpc\xml_to_soap.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\libxmlrpc\xml_to_soap.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\libxmlrpc\xml_to_xmlrpc.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\libxmlrpc\xml_to_xmlrpc.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\libxmlrpc\xmlrpc.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\libxmlrpc\xmlrpc.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\libxmlrpc\xmlrpc_introspection.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\libxmlrpc\xmlrpc_introspection.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\libxmlrpc\xmlrpc_introspection_private.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\libxmlrpc\xmlrpc_private.h
-# End Source File
-# End Group
-# End Target
-# End Project
diff --git a/ext/xmlwriter/CREDITS b/ext/xmlwriter/CREDITS
deleted file mode 100644
index 08ab51b32b..0000000000
--- a/ext/xmlwriter/CREDITS
+++ /dev/null
@@ -1,2 +0,0 @@
-XMLWriter
-Rob Richards
diff --git a/ext/xmlwriter/EXPERIMENTAL b/ext/xmlwriter/EXPERIMENTAL
deleted file mode 100644
index dfa49ae496..0000000000
--- a/ext/xmlwriter/EXPERIMENTAL
+++ /dev/null
@@ -1,4 +0,0 @@
-this module is experimental,
-its functions may change their names
-so do not rely to much on them
-you have been warned!
diff --git a/ext/xmlwriter/TODO b/ext/xmlwriter/TODO
deleted file mode 100644
index 97ebcb5801..0000000000
--- a/ext/xmlwriter/TODO
+++ /dev/null
@@ -1,5 +0,0 @@
-- Decide on function naming for xmlwriter creation
-- Fix up config file for PHP 5 to use libxml extension configuration
-- Add OOP support
-
-
diff --git a/ext/xmlwriter/config.m4 b/ext/xmlwriter/config.m4
deleted file mode 100644
index 18d630482c..0000000000
--- a/ext/xmlwriter/config.m4
+++ /dev/null
@@ -1,61 +0,0 @@
-dnl
-dnl $Id$
-dnl
-
-AC_DEFUN(PHP_XMLWRITER_CHECK_VERSION,[
- old_CPPFLAGS=$CPPFLAGS
- CPPFLAGS=-I$XMLWRITER_DIR/include$XMLWRITER_DIR_ADD
- AC_MSG_CHECKING(for libxml version)
- AC_EGREP_CPP(yes,[
-#include <libxml/xmlversion.h>
-#if LIBXML_VERSION >= 20600
- yes
-#endif
- ],[
- AC_MSG_RESULT(>= 2.6.0)
- ],[
- AC_MSG_ERROR(libxml version 2.6.0 or greater required.)
- ])
- CPPFLAGS=$old_CPPFLAGS
-])
-
-PHP_ARG_WITH(xmlwriter, for XMLWriter support,
-[ --with-xmlwriter Include XMLWriter support.])
-
-if test "$PHP_XMLWRITER" != "no"; then
-
- XMLWRITER_DIR_ADD=""
- if test -r $PHP_XMLWRITER/include/libxml2/libxml/xmlwriter.h; then
- XMLWRITER_DIR=$PHP_XMLWRITER
- XMLWRITER_DIR_ADD="/libxml2"
- elif test -r $PHP_XMLWRITER/include/libxml/xmlwriter.h; then
- XMLWRITER_DIR=$PHP_XMLWRITER
- else
- for i in /usr/local /usr; do
- test -r $i/include/libxml/xmlwriter.h && XMLWRITER_DIR=$i
- test -r $i/include/libxml2/libxml/xmlwriter.h && XMLWRITER_DIR=$i && XMLWRITER_DIR_ADD="/libxml2"
- done
- fi
-
- if test -z "$XMLWRITER_DIR"; then
- AC_MSG_RESULT(not found)
- AC_MSG_ERROR(Please reinstall the libxml >= 2.6.0 distribution)
- fi
-
- PHP_XMLWRITER_CHECK_VERSION
-
- XML2_CONFIG=$XMLWRITER_DIR/bin/xml2-config
-
- if test -x $XML2_CONFIG; then
- XMLWRITER_LIBS=`$XML2_CONFIG --libs`
- PHP_EVAL_LIBLINE($XMLWRITER_LIBS, XMLWRITER_SHARED_LIBADD)
- else
- PHP_ADD_LIBRARY_WITH_PATH($XMLWRITER_LIBNAME, $XMLWRITER_DIR/lib, XMLWRITER_SHARED_LIBADD)
- fi
-
- PHP_ADD_INCLUDE($XMLWRITER_DIR/include$XMLWRITER_DIR_ADD)
-
- AC_DEFINE(HAVE_XMLWRITER,1,[ ])
- PHP_NEW_EXTENSION(xmlwriter, php_xmlwriter.c, $ext_shared)
- PHP_SUBST(XMLWRITER_SHARED_LIBADD)
-fi
diff --git a/ext/xmlwriter/config.w32 b/ext/xmlwriter/config.w32
deleted file mode 100644
index c18b2c13fd..0000000000
--- a/ext/xmlwriter/config.w32
+++ /dev/null
@@ -1,18 +0,0 @@
-// $Id$
-// vim:ft=javascript
-
-ARG_WITH("xmlwriter", "XMLWriter support", "no");
-
-if (PHP_XMLWRITER == "yes" && PHP_LIBXML == "yes") {
- if (CHECK_HEADER_ADD_INCLUDE('libxml/xmlwriter.h', 'CFLAGS_XMLWRITER', PHP_XMLWRITER)) {
- EXTENSION("xmlwriter", "php_xmlwriter.c");
- AC_DEFINE("HAVE_XMLWRITER", 1, "XMLWriter support");
- if (!PHP_XMLWRITER_SHARED) {
- ADD_FLAG("CFLAGS_XMLWRITER", "/D LIBXML_STATIC");
- }
- ADD_EXTENSION_DEP('xmlwriter', 'libxml');
- } else {
- WARNING('Could not find xmlwriter.h');
- }
-}
-
diff --git a/ext/xmlwriter/package.xml b/ext/xmlwriter/package.xml
deleted file mode 100644
index 98e6bc3c9e..0000000000
--- a/ext/xmlwriter/package.xml
+++ /dev/null
@@ -1,38 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1" ?>
-<!DOCTYPE package SYSTEM "../package.dtd">
-<package>
- <name>xmlwriter</name>
- <summary>Provides fast, non-cached, forward-only means to write XML data.</summary>
- <description>
- This extension wraps the libxml xmlWriter API. Represents a writer that
- provides a non-cached, forward-only means of generating streams or files
- containing XML data.
- </description>
- <license>PHP License</license>
- <maintainers>
- <maintainer>
- <user>rrichards</user>
- <name>Rob Richards</name>
- <email>rrichards@php.net</email>
- <role>lead</role>
- </maintainer>
- </maintainers>
- <release>
- <version>0.1</version>
- <date>2004-07-20</date>
- <state>alpha</state>
- <notes>Initial Release </notes>
- <configureoptions>
- <configureoption name="with-xmlwriter" default="autodetect" prompt="Include XMLWriter support?"/>
- </configureoptions>
- <filelist>
- <file role="src" name="config.m4"/>
- <file role="src" name="config.w32"/>
- <file role="src" name="php_xmlwriter.c"/>
- <file role="src" name="php_xmlwriter.h"/>
- </filelist>
- <deps>
- <dep type="php" rel="ge" version="4.3.0" />
- </deps>
- </release>
-</package>
diff --git a/ext/xmlwriter/php_xmlwriter.c b/ext/xmlwriter/php_xmlwriter.c
deleted file mode 100644
index 27eb44d886..0000000000
--- a/ext/xmlwriter/php_xmlwriter.c
+++ /dev/null
@@ -1,1317 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Rob Richards <rrichards@php.net> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-
-#include "php.h"
-#include "php_ini.h"
-#include "ext/standard/info.h"
-#include "php_xmlwriter.h"
-
-zend_class_entry *xmlwriter_class_entry;
-
-static zend_function_entry xmlwriter_functions[] = {
- PHP_FE(xmlwriter_open_uri, NULL)
- PHP_FE(xmlwriter_open_memory, NULL)
-#if LIBXML_VERSION >= 20605
- PHP_FE(xmlwriter_set_indent, NULL)
- PHP_FE(xmlwriter_set_indent_string, NULL)
-#endif
- PHP_FE(xmlwriter_start_attribute, NULL)
- PHP_FE(xmlwriter_end_attribute, NULL)
- PHP_FE(xmlwriter_start_attribute_ns, NULL)
- PHP_FE(xmlwriter_write_attribute, NULL)
- PHP_FE(xmlwriter_write_attribute_ns, NULL)
- PHP_FE(xmlwriter_start_element, NULL)
- PHP_FE(xmlwriter_end_element, NULL)
- PHP_FE(xmlwriter_start_element_ns, NULL)
- PHP_FE(xmlwriter_write_element, NULL)
- PHP_FE(xmlwriter_write_element_ns, NULL)
- PHP_FE(xmlwriter_start_pi, NULL)
- PHP_FE(xmlwriter_end_pi, NULL)
- PHP_FE(xmlwriter_write_pi, NULL)
- PHP_FE(xmlwriter_start_cdata, NULL)
- PHP_FE(xmlwriter_end_cdata, NULL)
- PHP_FE(xmlwriter_write_cdata, NULL)
- PHP_FE(xmlwriter_text, NULL)
- PHP_FE(xmlwriter_start_document, NULL)
- PHP_FE(xmlwriter_end_document, NULL)
- PHP_FE(xmlwriter_write_comment, NULL)
- PHP_FE(xmlwriter_start_dtd, NULL)
- PHP_FE(xmlwriter_end_dtd, NULL)
- PHP_FE(xmlwriter_write_dtd, NULL)
- PHP_FE(xmlwriter_start_dtd_element, NULL)
- PHP_FE(xmlwriter_end_dtd_element, NULL)
- PHP_FE(xmlwriter_output_memory, NULL)
- {NULL, NULL, NULL}
-};
-
-/* {{{ function prototypes */
-PHP_MINIT_FUNCTION(xmlwriter);
-PHP_MSHUTDOWN_FUNCTION(xmlwriter);
-PHP_MINFO_FUNCTION(xmlwriter);
-
-static int le_xmlwriter;
-
-/* _xmlwriter_get_valid_file_path should be made a
- common function in libxml extension as code is common to a few xml extensions */
-char *_xmlwriter_get_valid_file_path(char *source, char *resolved_path, int resolved_path_len TSRMLS_DC) {
- xmlURI *uri;
- xmlChar *escsource;
- char *file_dest;
- int isFileUri = 0;
-
- uri = xmlCreateURI();
- escsource = xmlURIEscapeStr(source, ":");
- xmlParseURIReference(uri, escsource);
- xmlFree(escsource);
-
- if (uri->scheme != NULL) {
- /* absolute file uris - libxml only supports localhost or empty host */
- if (strncasecmp(source, "file:///",8) == 0) {
- isFileUri = 1;
-#ifdef PHP_WIN32
- source += 8;
-#else
- source += 7;
-#endif
- } else if (strncasecmp(source, "file://localhost/",17) == 0) {
- isFileUri = 1;
-#ifdef PHP_WIN32
- source += 17;
-#else
- source += 16;
-#endif
- }
- }
-
- file_dest = source;
-
- if ((uri->scheme == NULL || isFileUri)) {
- /* XXX possible buffer overflow if VCWD_REALPATH does not know size of resolved_path */
- if (! VCWD_REALPATH(source, resolved_path)) {
- expand_filepath(source, resolved_path TSRMLS_CC);
- }
- file_dest = resolved_path;
- }
-
- xmlFreeURI(uri);
-
- return file_dest;
-}
-
-/* {{{ xmlwriter_module_entry
- */
-zend_module_entry xmlwriter_module_entry = {
- STANDARD_MODULE_HEADER,
- "xmlwriter",
- xmlwriter_functions,
- PHP_MINIT(xmlwriter),
- PHP_MSHUTDOWN(xmlwriter),
- NULL,
- NULL,
- PHP_MINFO(xmlwriter),
- "0.1",
- STANDARD_MODULE_PROPERTIES
-};
-/* }}} */
-
-#ifdef COMPILE_DL_XMLWRITER
-ZEND_GET_MODULE(xmlwriter)
-#endif
-
-/* {{{ xmlwriter_objects_clone */
-void xmlwriter_objects_clone(void *object, void **object_clone TSRMLS_DC)
-{
- /* TODO */
-}
-/* }}} */
-
-static void xmlwriter_dtor(zend_rsrc_list_entry *rsrc TSRMLS_DC) {
- xmlwriter_object *intern;
-
- intern = (xmlwriter_object *) rsrc->ptr;
- if (intern) {
- if (intern->ptr) {
- xmlFreeTextWriter(intern->ptr);
- intern->ptr = NULL;
- }
- if (intern->output) {
- xmlBufferFree(intern->output);
- intern->output = NULL;
- }
- efree(intern);
- }
-}
-
-#if LIBXML_VERSION >= 20605
-/* {{{ proto bool xmlwriter_set_indent(resource xmlwriter, bool)
-Toggle indentation on/off - returns FALSE on error */
-PHP_FUNCTION(xmlwriter_set_indent)
-{
- zval *pind;
- xmlwriter_object *intern;
- xmlTextWriterPtr ptr;
- int indent, retval;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rb", &pind, &indent) == FAILURE) {
- return;
- }
-
- ZEND_FETCH_RESOURCE(intern,xmlwriter_object *, &pind, -1, "XMLWriter", le_xmlwriter);
- ptr = intern->ptr;
-
- if (ptr) {
- retval = xmlTextWriterSetIndent(ptr, indent);
- if (retval == 0) {
- RETURN_TRUE;
- }
- }
-
- RETURN_FALSE;
-}
-
-/* {{{ proto bool xmlwriter_set_indent_string(resource xmlwriter, string indentString)
-Set string used for indenting - returns FALSE on error */
-PHP_FUNCTION(xmlwriter_set_indent_string)
-{
- zval *pind;
- xmlwriter_object *intern;
- xmlTextWriterPtr ptr;
- char *indent;
- int indent_len, retval;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rs", &pind, &indent, &indent_len) == FAILURE) {
- return;
- }
-
- ZEND_FETCH_RESOURCE(intern,xmlwriter_object *, &pind, -1, "XMLWriter", le_xmlwriter);
- ptr = intern->ptr;
-
- if (ptr) {
- retval = xmlTextWriterSetIndentString(ptr, indent);
- if (retval == 0) {
- RETURN_TRUE;
- }
- }
-
- RETURN_FALSE;
-}
-#endif
-
-/* {{{ proto bool xmlwriter_start_attribute(resource xmlwriter, string name)
-Create start attribute - returns FALSE on error */
-PHP_FUNCTION(xmlwriter_start_attribute)
-{
- zval *pind;
- xmlwriter_object *intern;
- xmlTextWriterPtr ptr;
- char *name;
- int name_len, retval;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rs", &pind, &name, &name_len) == FAILURE) {
- return;
- }
-
- retval = xmlValidateName((xmlChar *) name, 0);
- if (retval != 0) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid Attribute Name");
- RETURN_FALSE;
- }
-
- ZEND_FETCH_RESOURCE(intern,xmlwriter_object *, &pind, -1, "XMLWriter", le_xmlwriter);
- ptr = intern->ptr;
-
- if (ptr) {
- retval = xmlTextWriterStartAttribute(ptr, name);
- if (retval != -1) {
- RETURN_TRUE;
- }
- }
-
- RETURN_FALSE;
-}
-
-/* {{{ proto bool xmlwriter_end_attribute(resource xmlwriter)
-End attribute - returns FALSE on error */
-PHP_FUNCTION(xmlwriter_end_attribute)
-{
- zval *pind;
- xmlwriter_object *intern;
- xmlTextWriterPtr ptr;
- int retval;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &pind) == FAILURE) {
- return;
- }
-
- ZEND_FETCH_RESOURCE(intern,xmlwriter_object *, &pind, -1, "XMLWriter", le_xmlwriter);
- ptr = intern->ptr;
-
- if (ptr) {
- retval = xmlTextWriterEndAttribute(ptr);
- if (retval != -1) {
- RETURN_TRUE;
- }
- }
-
- RETURN_FALSE;
-}
-
-/* {{{ proto bool xmlwriter_start_attribute_ns(resource xmlwriter, string prefix, string name, string uri)
-Create start namespaced attribute - returns FALSE on error */
-PHP_FUNCTION(xmlwriter_start_attribute_ns)
-{
- zval *pind;
- xmlwriter_object *intern;
- xmlTextWriterPtr ptr;
- char *name, *prefix, *uri;
- int name_len, prefix_len, uri_len, retval;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rsss", &pind,
- &prefix, &prefix_len, &name, &name_len, &uri, &uri_len) == FAILURE) {
- return;
- }
-
- retval = xmlValidateName((xmlChar *) name, 0);
- if (retval != 0) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid Attribute Name");
- RETURN_FALSE;
- }
-
- ZEND_FETCH_RESOURCE(intern,xmlwriter_object *, &pind, -1, "XMLWriter", le_xmlwriter);
- ptr = intern->ptr;
-
- if (ptr) {
- retval = xmlTextWriterStartAttributeNS(ptr, prefix, name, uri);
- if (retval != -1) {
- RETURN_TRUE;
- }
- }
-
- RETURN_FALSE;
-}
-
-/* {{{ proto bool xmlwriter_write_attribute(resource xmlwriter, string name, string content)
-Write full attribute - returns FALSE on error */
-PHP_FUNCTION(xmlwriter_write_attribute)
-{
- zval *pind;
- xmlwriter_object *intern;
- xmlTextWriterPtr ptr;
- char *name, *content;
- int name_len, content_len, retval;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rss", &pind,
- &name, &name_len, &content, &content_len) == FAILURE) {
- return;
- }
-
- retval = xmlValidateName((xmlChar *) name, 0);
- if (retval != 0) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid Attribute Name");
- RETURN_FALSE;
- }
-
- ZEND_FETCH_RESOURCE(intern,xmlwriter_object *, &pind, -1, "XMLWriter", le_xmlwriter);
- ptr = intern->ptr;
-
- if (ptr) {
- retval = xmlTextWriterWriteAttribute(ptr, name, content);
- if (retval != -1) {
- RETURN_TRUE;
- }
- }
-
- RETURN_FALSE;
-}
-
-/* {{{ proto bool xmlwriter_write_attribute_ns(resource xmlwriter, string prefix, string name, string uri, string content)
-Write full namespaced attribute - returns FALSE on error */
-PHP_FUNCTION(xmlwriter_write_attribute_ns)
-{
- zval *pind;
- xmlwriter_object *intern;
- xmlTextWriterPtr ptr;
- char *name, *prefix, *uri, *content;
- int name_len, prefix_len, uri_len, content_len, retval;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rssss", &pind,
- &prefix, &prefix_len, &name, &name_len, &uri, &uri_len, &content, &content_len) == FAILURE) {
- return;
- }
-
- retval = xmlValidateName((xmlChar *) name, 0);
- if (retval != 0) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid Attribute Name");
- RETURN_FALSE;
- }
-
- ZEND_FETCH_RESOURCE(intern,xmlwriter_object *, &pind, -1, "XMLWriter", le_xmlwriter);
- ptr = intern->ptr;
-
- if (ptr) {
- retval = xmlTextWriterWriteAttributeNS(ptr, prefix, name, uri, content);
- if (retval != -1) {
- RETURN_TRUE;
- }
- }
-
- RETURN_FALSE;
-}
-
-/* {{{ proto bool xmlwriter_start_element(resource xmlwriter, string name)
-Create start element tag - returns FALSE on error */
-PHP_FUNCTION(xmlwriter_start_element)
-{
- zval *pind;
- xmlwriter_object *intern;
- xmlTextWriterPtr ptr;
- char *name;
- int name_len, retval;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rs", &pind, &name, &name_len) == FAILURE) {
- return;
- }
-
- retval = xmlValidateName((xmlChar *) name, 0);
- if (retval != 0) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid Element Name");
- RETURN_FALSE;
- }
-
- ZEND_FETCH_RESOURCE(intern,xmlwriter_object *, &pind, -1, "XMLWriter", le_xmlwriter);
- ptr = intern->ptr;
-
- if (ptr) {
- retval = xmlTextWriterStartElement(ptr, name);
- if (retval != -1) {
- RETURN_TRUE;
- }
- }
-
- RETURN_FALSE;
-}
-
-/* {{{ proto bool xmlwriter_start_element_ns(resource xmlwriter, string prefix, string name, string uri)
-Create start namespaced element tag - returns FALSE on error */
-PHP_FUNCTION(xmlwriter_start_element_ns)
-{
- zval *pind;
- xmlwriter_object *intern;
- xmlTextWriterPtr ptr;
- char *name, *prefix, *uri;
- int name_len, prefix_len, uri_len, retval;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rsss", &pind,
- &prefix, &prefix_len, &name, &name_len, &uri, &uri_len) == FAILURE) {
- return;
- }
-
- retval = xmlValidateName((xmlChar *) name, 0);
- if (retval != 0) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid Element Name");
- RETURN_FALSE;
- }
-
- ZEND_FETCH_RESOURCE(intern,xmlwriter_object *, &pind, -1, "XMLWriter", le_xmlwriter);
- ptr = intern->ptr;
-
- if (ptr) {
- retval = xmlTextWriterStartElementNS(ptr, prefix, name, uri);
- if (retval != -1) {
- RETURN_TRUE;
- }
- }
-
- RETURN_FALSE;
-}
-
-/* {{{ proto bool xmlwriter_end_element(resource xmlwriter)
-End current element - returns FALSE on error */
-PHP_FUNCTION(xmlwriter_end_element)
-{
- zval *pind;
- xmlwriter_object *intern;
- xmlTextWriterPtr ptr;
- int retval;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &pind) == FAILURE) {
- return;
- }
-
- ZEND_FETCH_RESOURCE(intern,xmlwriter_object *, &pind, -1, "XMLWriter", le_xmlwriter);
- ptr = intern->ptr;
-
- if (ptr) {
- retval = xmlTextWriterEndElement(ptr);
- if (retval != -1) {
- RETURN_TRUE;
- }
- }
-
- RETURN_FALSE;
-}
-
-/* {{{ proto bool xmlwriter_write_element(resource xmlwriter, string name, string content)
-Write full element tag - returns FALSE on error */
-PHP_FUNCTION(xmlwriter_write_element)
-{
- zval *pind;
- xmlwriter_object *intern;
- xmlTextWriterPtr ptr;
- char *name, *content;
- int name_len, content_len, retval;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rss", &pind,
- &name, &name_len, &content, &content_len) == FAILURE) {
- return;
- }
-
- retval = xmlValidateName((xmlChar *) name, 0);
- if (retval != 0) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid Element Name");
- RETURN_FALSE;
- }
-
- ZEND_FETCH_RESOURCE(intern,xmlwriter_object *, &pind, -1, "XMLWriter", le_xmlwriter);
- ptr = intern->ptr;
-
- if (ptr) {
- retval = xmlTextWriterWriteElement(ptr, name, content);
- if (retval != -1) {
- RETURN_TRUE;
- }
- }
-
- RETURN_FALSE;
-}
-
-/* {{{ proto bool xmlwriter_write_element_ns(resource xmlwriter, string prefix, string name, string uri, string content)
-Write full namesapced element tag - returns FALSE on error */
-PHP_FUNCTION(xmlwriter_write_element_ns)
-{
- zval *pind;
- xmlwriter_object *intern;
- xmlTextWriterPtr ptr;
- char *name, *prefix, *uri, *content;
- int name_len, prefix_len, uri_len, content_len, retval;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rssss", &pind,
- &prefix, &prefix_len, &name, &name_len, &uri, &uri_len, &content, &content_len) == FAILURE) {
- return;
- }
-
- retval = xmlValidateName((xmlChar *) name, 0);
- if (retval != 0) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid Element Name");
- RETURN_FALSE;
- }
-
- ZEND_FETCH_RESOURCE(intern,xmlwriter_object *, &pind, -1, "XMLWriter", le_xmlwriter);
- ptr = intern->ptr;
-
- if (ptr) {
- retval = xmlTextWriterWriteElementNS(ptr, prefix, name, uri, content);
- if (retval != -1) {
- RETURN_TRUE;
- }
- }
-
- RETURN_FALSE;
-}
-
-/* {{{ proto bool xmlwriter_start_pi(resource xmlwriter, string target)
-Create start PI tag - returns FALSE on error */
-PHP_FUNCTION(xmlwriter_start_pi)
-{
- zval *pind;
- xmlwriter_object *intern;
- xmlTextWriterPtr ptr;
- char *target;
- int target_len, retval;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rs", &pind, &target, &target_len) == FAILURE) {
- return;
- }
-
- retval = xmlValidateName((xmlChar *) target, 0);
- if (retval != 0) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid PI Target");
- RETURN_FALSE;
- }
-
- ZEND_FETCH_RESOURCE(intern,xmlwriter_object *, &pind, -1, "XMLWriter", le_xmlwriter);
- ptr = intern->ptr;
-
- if (ptr) {
- retval = xmlTextWriterStartPI(ptr, target);
- if (retval != -1) {
- RETURN_TRUE;
- }
- }
-
- RETURN_FALSE;
-}
-
-/* {{{ proto bool xmlwriter_end_pi(resource xmlwriter)
-End current PI - returns FALSE on error */
-PHP_FUNCTION(xmlwriter_end_pi)
-{
- zval *pind;
- xmlwriter_object *intern;
- xmlTextWriterPtr ptr;
- int retval;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &pind) == FAILURE) {
- return;
- }
-
- ZEND_FETCH_RESOURCE(intern,xmlwriter_object *, &pind, -1, "XMLWriter", le_xmlwriter);
- ptr = intern->ptr;
-
- if (ptr) {
- retval = xmlTextWriterEndPI(ptr);
- if (retval != -1) {
- RETURN_TRUE;
- }
- }
-
- RETURN_FALSE;
-}
-
-/* {{{ proto bool xmlwriter_write_pi(resource xmlwriter, string target, string content)
-Write full PI tag - returns FALSE on error */
-PHP_FUNCTION(xmlwriter_write_pi)
-{
- zval *pind;
- xmlwriter_object *intern;
- xmlTextWriterPtr ptr;
- char *target, *content;
- int target_len, content_len, retval;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rss", &pind,
- &target, &target_len, &content, &content_len) == FAILURE) {
- return;
- }
-
- retval = xmlValidateName((xmlChar *) target, 0);
- if (retval != 0) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid PI Target");
- RETURN_FALSE;
- }
-
- ZEND_FETCH_RESOURCE(intern,xmlwriter_object *, &pind, -1, "XMLWriter", le_xmlwriter);
- ptr = intern->ptr;
-
- if (ptr) {
- retval = xmlTextWriterWritePI(ptr, target, content);
- if (retval != -1) {
- RETURN_TRUE;
- }
- }
-
- RETURN_FALSE;
-}
-
-/* {{{ proto bool xmlwriter_start_cdata(resource xmlwriter)
-Create start CDATA tag - returns FALSE on error */
-PHP_FUNCTION(xmlwriter_start_cdata)
-{
- zval *pind;
- xmlwriter_object *intern;
- xmlTextWriterPtr ptr;
- int retval;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &pind) == FAILURE) {
- return;
- }
-
- ZEND_FETCH_RESOURCE(intern,xmlwriter_object *, &pind, -1, "XMLWriter", le_xmlwriter);
- ptr = intern->ptr;
-
- if (ptr) {
- retval = xmlTextWriterStartCDATA(ptr);
- if (retval != -1) {
- RETURN_TRUE;
- }
- }
-
- RETURN_FALSE;
-}
-
-/* {{{ proto bool xmlwriter_end_cdata(resource xmlwriter)
-End current CDATA - returns FALSE on error */
-PHP_FUNCTION(xmlwriter_end_cdata)
-{
- zval *pind;
- xmlwriter_object *intern;
- xmlTextWriterPtr ptr;
- int retval;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &pind) == FAILURE) {
- return;
- }
-
- ZEND_FETCH_RESOURCE(intern,xmlwriter_object *, &pind, -1, "XMLWriter", le_xmlwriter);
- ptr = intern->ptr;
-
- if (ptr) {
- retval = xmlTextWriterEndCDATA(ptr);
- if (retval != -1) {
- RETURN_TRUE;
- }
- }
-
- RETURN_FALSE;
-}
-
-/* {{{ proto bool xmlwriter_write_cdata(resource xmlwriter, string content)
-Write full CDATA tag - returns FALSE on error */
-PHP_FUNCTION(xmlwriter_write_cdata)
-{
- zval *pind;
- xmlwriter_object *intern;
- xmlTextWriterPtr ptr;
- char *content;
- int content_len, retval;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rs", &pind,
- &content, &content_len) == FAILURE) {
- return;
- }
-
- ZEND_FETCH_RESOURCE(intern,xmlwriter_object *, &pind, -1, "XMLWriter", le_xmlwriter);
- ptr = intern->ptr;
-
- if (ptr) {
- retval = xmlTextWriterWriteCDATA(ptr, content);
- if (retval != -1) {
- RETURN_TRUE;
- }
- }
-
- RETURN_FALSE;
-}
-
-/* {{{ proto bool xmlwriter_text(resource xmlwriter, string content)
-Write text - returns FALSE on error */
-PHP_FUNCTION(xmlwriter_text)
-{
- zval *pind;
- xmlwriter_object *intern;
- xmlTextWriterPtr ptr;
- char *content;
- int content_len, retval;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rs", &pind, &content, &content_len) == FAILURE) {
- return;
- }
-
- ZEND_FETCH_RESOURCE(intern,xmlwriter_object *, &pind, -1, "XMLWriter", le_xmlwriter);
- ptr = intern->ptr;
-
- if (ptr) {
- retval = xmlTextWriterWriteString(ptr, content);
- if (retval != -1) {
- RETURN_TRUE;
- }
- }
-
- RETURN_FALSE;
-}
-
-/* {{{ proto bool xmlwriter_write_comment(resource xmlwriter, string content)
-Write full comment tag - returns FALSE on error */
-PHP_FUNCTION(xmlwriter_write_comment)
-{
- zval *pind;
- xmlwriter_object *intern;
- xmlTextWriterPtr ptr;
- char *content;
- int content_len, retval;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rs", &pind,
- &content, &content_len) == FAILURE) {
- return;
- }
-
- ZEND_FETCH_RESOURCE(intern,xmlwriter_object *, &pind, -1, "XMLWriter", le_xmlwriter);
- ptr = intern->ptr;
-
- if (ptr) {
- retval = xmlTextWriterWriteComment(ptr, content);
- if (retval != -1) {
- RETURN_TRUE;
- }
- }
-
- RETURN_FALSE;
-}
-
-/* {{{ proto bool xmlwriter_start_document(resource xmlwriter, string version, string encoding, string standalone)
-Create document tag - returns FALSE on error */
-PHP_FUNCTION(xmlwriter_start_document)
-{
- zval *pind;
- xmlwriter_object *intern;
- xmlTextWriterPtr ptr;
- char *version, *enc, *alone;
- int version_len, enc_len, alone_len, retval;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rs", &pind, &version, &version_len, &enc, &enc_len, &alone, &alone_len) == FAILURE) {
- return;
- }
-
- ZEND_FETCH_RESOURCE(intern,xmlwriter_object *, &pind, -1, "XMLWriter", le_xmlwriter);
- ptr = intern->ptr;
-
- if (ptr) {
- retval = xmlTextWriterStartDocument(ptr, version, enc, alone);
- if (retval != -1) {
- RETURN_TRUE;
- }
- }
-
- RETURN_FALSE;
-}
-
-/* {{{ proto bool xmlwriter_end_document(resource xmlwriter)
-End current document - returns FALSE on error */
-PHP_FUNCTION(xmlwriter_end_document)
-{
- zval *pind;
- xmlwriter_object *intern;
- xmlTextWriterPtr ptr;
- int retval;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &pind) == FAILURE) {
- return;
- }
-
- ZEND_FETCH_RESOURCE(intern,xmlwriter_object *, &pind, -1, "XMLWriter", le_xmlwriter);
- ptr = intern->ptr;
-
- if (ptr) {
- retval = xmlTextWriterEndDocument(ptr);
- if (retval != -1) {
- RETURN_TRUE;
- }
- }
-
- RETURN_FALSE;
-}
-
-
-/* {{{ proto bool xmlwriter_start_dtd(resource xmlwriter, string name, string pubid, string sysid)
-Create start DTD tag - returns FALSE on error */
-PHP_FUNCTION(xmlwriter_start_dtd)
-{
- zval *pind;
- xmlwriter_object *intern;
- xmlTextWriterPtr ptr;
- char *name, *pubid, *sysid;
- int name_len, pubid_len, sysid_len, retval;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rs", &pind, &name, &name_len, &pubid, &pubid_len, &sysid, &sysid_len) == FAILURE) {
- return;
- }
-
- ZEND_FETCH_RESOURCE(intern,xmlwriter_object *, &pind, -1, "XMLWriter", le_xmlwriter);
- ptr = intern->ptr;
-
- if (ptr) {
- retval = xmlTextWriterStartDTD(ptr, name, pubid, sysid);
- if (retval != -1) {
- RETURN_TRUE;
- }
- }
-
- RETURN_FALSE;
-}
-
-/* {{{ proto bool xmlwriter_end_dtd(resource xmlwriter)
-End current DTD - returns FALSE on error */
-PHP_FUNCTION(xmlwriter_end_dtd)
-{
- zval *pind;
- xmlwriter_object *intern;
- xmlTextWriterPtr ptr;
- int retval;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &pind) == FAILURE) {
- return;
- }
-
- ZEND_FETCH_RESOURCE(intern,xmlwriter_object *, &pind, -1, "XMLWriter", le_xmlwriter);
- ptr = intern->ptr;
-
- if (ptr) {
- retval = xmlTextWriterEndDTD(ptr);
- if (retval != -1) {
- RETURN_TRUE;
- }
- }
-
- RETURN_FALSE;
-}
-
-/* {{{ proto bool xmlwriter_write_dtd(resource xmlwriter, string name, string pubid, string sysid, string subset)
-Write full DTD tag - returns FALSE on error */
-PHP_FUNCTION(xmlwriter_write_dtd)
-{
- zval *pind;
- xmlwriter_object *intern;
- xmlTextWriterPtr ptr;
- char *name, *pubid, *sysid, *subset;
- int name_len, pubid_len, sysid_len, subset_len, retval;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rs", &pind, &name, &name_len, &pubid, &pubid_len, &sysid, &sysid_len, &subset, &subset_len) == FAILURE) {
- return;
- }
-
- ZEND_FETCH_RESOURCE(intern,xmlwriter_object *, &pind, -1, "XMLWriter", le_xmlwriter);
- ptr = intern->ptr;
-
- if (ptr) {
- retval = xmlTextWriterWriteDTD(ptr, name, pubid, sysid, subset);
- if (retval != -1) {
- RETURN_TRUE;
- }
- }
-
- RETURN_FALSE;
-}
-
-/* {{{ proto bool xmlwriter_start_dtd_element(resource xmlwriter, string name)
-Create start DTD element - returns FALSE on error */
-PHP_FUNCTION(xmlwriter_start_dtd_element)
-{
- zval *pind;
- xmlwriter_object *intern;
- xmlTextWriterPtr ptr;
- char *name;
- int name_len, retval;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rs", &pind, &name, &name_len) == FAILURE) {
- return;
- }
-
- retval = xmlValidateName((xmlChar *) name, 0);
- if (retval != 0) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid Attribute Name");
- RETURN_FALSE;
- }
-
- ZEND_FETCH_RESOURCE(intern,xmlwriter_object *, &pind, -1, "XMLWriter", le_xmlwriter);
- ptr = intern->ptr;
-
- if (ptr) {
- retval = xmlTextWriterStartDTDElement(ptr, name);
- if (retval != -1) {
- RETURN_TRUE;
- }
- }
-
- RETURN_FALSE;
-}
-
-/* {{{ proto bool xmlwriter_end_dtd_element(resource xmlwriter)
-End current DTD element - returns FALSE on error */
-PHP_FUNCTION(xmlwriter_end_dtd_element)
-{
- zval *pind;
- xmlwriter_object *intern;
- xmlTextWriterPtr ptr;
- int retval;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &pind) == FAILURE) {
- return;
- }
-
- ZEND_FETCH_RESOURCE(intern,xmlwriter_object *, &pind, -1, "XMLWriter", le_xmlwriter);
- ptr = intern->ptr;
-
- if (ptr) {
- retval = xmlTextWriterEndDTDElement(ptr);
- if (retval != -1) {
- RETURN_TRUE;
- }
- }
-
- RETURN_FALSE;
-}
-
-/* {{{ proto bool xmlwriter_write_dtd_element(resource xmlwriter, string name, string content)
-Write full DTD element tag - returns FALSE on error */
-PHP_FUNCTION(xmlwriter_write_dtd_element)
-{
- zval *pind;
- xmlwriter_object *intern;
- xmlTextWriterPtr ptr;
- char *name, *content;
- int name_len, content_len, retval;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rss", &pind,
- &name, &name_len, &content, &content_len) == FAILURE) {
- return;
- }
-
- retval = xmlValidateName((xmlChar *) name, 0);
- if (retval != 0) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid Element Name");
- RETURN_FALSE;
- }
-
- ZEND_FETCH_RESOURCE(intern,xmlwriter_object *, &pind, -1, "XMLWriter", le_xmlwriter);
- ptr = intern->ptr;
-
- if (ptr) {
- retval = xmlTextWriterWriteDTDElement(ptr, name, content);
- if (retval != -1) {
- RETURN_TRUE;
- }
- }
-
- RETURN_FALSE;
-}
-
-/* {{{ proto bool xmlwriter_start_dtd_attlist(resource xmlwriter, string name)
-Create start DTD AttList - returns FALSE on error */
-PHP_FUNCTION(xmlwriter_start_dtd_attlist)
-{
- zval *pind;
- xmlwriter_object *intern;
- xmlTextWriterPtr ptr;
- char *name;
- int name_len, retval;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rs", &pind, &name, &name_len) == FAILURE) {
- return;
- }
-
- retval = xmlValidateName((xmlChar *) name, 0);
- if (retval != 0) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid Attribute Name");
- RETURN_FALSE;
- }
-
- ZEND_FETCH_RESOURCE(intern,xmlwriter_object *, &pind, -1, "XMLWriter", le_xmlwriter);
- ptr = intern->ptr;
-
- if (ptr) {
- retval = xmlTextWriterStartDTDAttlist(ptr, name);
- if (retval != -1) {
- RETURN_TRUE;
- }
- }
-
- RETURN_FALSE;
-}
-
-/* {{{ proto bool xmlwriter_end_dtd_attlist(resource xmlwriter)
-End current DTD AttList - returns FALSE on error */
-PHP_FUNCTION(xmlwriter_end_dtd_attlist)
-{
- zval *pind;
- xmlwriter_object *intern;
- xmlTextWriterPtr ptr;
- int retval;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &pind) == FAILURE) {
- return;
- }
-
- ZEND_FETCH_RESOURCE(intern,xmlwriter_object *, &pind, -1, "XMLWriter", le_xmlwriter);
- ptr = intern->ptr;
-
- if (ptr) {
- retval = xmlTextWriterEndDTDAttlist(ptr);
- if (retval != -1) {
- RETURN_TRUE;
- }
- }
-
- RETURN_FALSE;
-}
-
-/* {{{ proto bool xmlwriter_write_dtd_attlist(resource xmlwriter, string name, string content)
-Write full DTD AttList tag - returns FALSE on error */
-PHP_FUNCTION(xmlwriter_write_dtd_attlist)
-{
- zval *pind;
- xmlwriter_object *intern;
- xmlTextWriterPtr ptr;
- char *name, *content;
- int name_len, content_len, retval;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rss", &pind,
- &name, &name_len, &content, &content_len) == FAILURE) {
- return;
- }
-
- retval = xmlValidateName((xmlChar *) name, 0);
- if (retval != 0) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid Element Name");
- RETURN_FALSE;
- }
-
- ZEND_FETCH_RESOURCE(intern,xmlwriter_object *, &pind, -1, "XMLWriter", le_xmlwriter);
- ptr = intern->ptr;
-
- if (ptr) {
- retval = xmlTextWriterWriteDTDAttlist(ptr, name, content);
- if (retval != -1) {
- RETURN_TRUE;
- }
- }
-
- RETURN_FALSE;
-}
-
-/* {{{ proto bool xmlwriter_start_dtd_entity(resource xmlwriter, string name, bool isparam)
-Create start DTD Entity - returns FALSE on error */
-PHP_FUNCTION(xmlwriter_start_dtd_entity)
-{
- zval *pind;
- xmlwriter_object *intern;
- xmlTextWriterPtr ptr;
- char *name;
- int name_len, isparm, retval;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rs", &pind, &name, &name_len, &isparm) == FAILURE) {
- return;
- }
-
- retval = xmlValidateName((xmlChar *) name, 0);
- if (retval != 0) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid Attribute Name");
- RETURN_FALSE;
- }
-
- ZEND_FETCH_RESOURCE(intern,xmlwriter_object *, &pind, -1, "XMLWriter", le_xmlwriter);
- ptr = intern->ptr;
-
- if (ptr) {
- retval = xmlTextWriterStartDTDEntity(ptr, isparm, name);
- if (retval != -1) {
- RETURN_TRUE;
- }
- }
-
- RETURN_FALSE;
-}
-
-/* {{{ proto bool xmlwriter_end_dtd_entity(resource xmlwriter)
-End current DTD Entity - returns FALSE on error */
-PHP_FUNCTION(xmlwriter_end_dtd_entity)
-{
- zval *pind;
- xmlwriter_object *intern;
- xmlTextWriterPtr ptr;
- int retval;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &pind) == FAILURE) {
- return;
- }
-
- ZEND_FETCH_RESOURCE(intern,xmlwriter_object *, &pind, -1, "XMLWriter", le_xmlwriter);
- ptr = intern->ptr;
-
- if (ptr) {
- retval = xmlTextWriterEndDTDEntity(ptr);
- if (retval != -1) {
- RETURN_TRUE;
- }
- }
-
- RETURN_FALSE;
-}
-
-/* {{{ proto bool xmlwriter_write_dtd_entity(resource xmlwriter, string name, string content)
-Write full DTD Entity tag - returns FALSE on error */
-PHP_FUNCTION(xmlwriter_write_dtd_entity)
-{
- zval *pind;
- xmlwriter_object *intern;
- xmlTextWriterPtr ptr;
- char *name, *content;
- int name_len, content_len, retval;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rss", &pind,
- &name, &name_len, &content, &content_len) == FAILURE) {
- return;
- }
-
- retval = xmlValidateName((xmlChar *) name, 0);
- if (retval != 0) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid Element Name");
- RETURN_FALSE;
- }
-
- ZEND_FETCH_RESOURCE(intern,xmlwriter_object *, &pind, -1, "XMLWriter", le_xmlwriter);
- ptr = intern->ptr;
-
- if (ptr) {
- retval = xmlTextWriterWriteDTDAttlist(ptr, name, content);
- if (retval != -1) {
- RETURN_TRUE;
- }
- }
-
- RETURN_FALSE;
-}
-
-/* {{{ proto resource xmlwriter_open_uri(resource xmlwriter, string source)
-Create new xmlwriter using source uri for output */
-PHP_FUNCTION(xmlwriter_open_uri)
-{
- char *valid_file = NULL;
- xmlwriter_object *intern;
- xmlTextWriterPtr ptr;
- char *source;
- char resolved_path[MAXPATHLEN + 1];
- int source_len;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &source, &source_len) == FAILURE) {
- WRONG_PARAM_COUNT;
- return;
- }
-
- valid_file = _xmlwriter_get_valid_file_path(source, resolved_path, MAXPATHLEN TSRMLS_CC);
- if (!valid_file) {
- RETURN_FALSE;
- }
-
- ptr = xmlNewTextWriterFilename(valid_file, 0);
- if (! ptr) {
- RETURN_FALSE;
- }
-
- intern = emalloc(sizeof(xmlwriter_object));
- intern->ptr = ptr;
- intern->output = NULL;
-
- ZEND_REGISTER_RESOURCE(return_value,intern,le_xmlwriter);
-
-}
-
-/* {{{ proto resource xmlwriter_open_memory()
-Create new xmlwriter using memory for string output */
-PHP_FUNCTION(xmlwriter_open_memory)
-{
- xmlwriter_object *intern;
- xmlTextWriterPtr ptr;
- xmlBufferPtr buffer;
-
- buffer = xmlBufferCreate();
-
- if (buffer == NULL) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to create output buffer");
- RETURN_FALSE;
- }
-
- ptr = xmlNewTextWriterMemory(buffer, 0);
- if (! ptr) {
- xmlBufferFree(buffer);
- RETURN_FALSE;
- }
-
- intern = emalloc(sizeof(xmlwriter_object));
- intern->ptr = ptr;
- intern->output = buffer;
-
- ZEND_REGISTER_RESOURCE(return_value,intern,le_xmlwriter);
-
-}
-
-/* {{{ proto string xmlwriter_output_memory(resource xmlwriter [,bool flush])
-Output current buffer as string */
-PHP_FUNCTION(xmlwriter_output_memory)
-{
- zval *pind;
- xmlwriter_object *intern;
- xmlTextWriterPtr ptr;
- xmlBufferPtr buffer;
- int flush = 1;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r|b", &pind, &flush) == FAILURE) {
- return;
- }
-
- ZEND_FETCH_RESOURCE(intern,xmlwriter_object *, &pind, -1, "XMLWriter", le_xmlwriter);
- ptr = intern->ptr;
- buffer = intern->output;
-
- if (ptr && buffer) {
- xmlTextWriterFlush(ptr);
- RETVAL_STRING(buffer->content, 1);
- if (flush) {
- xmlBufferEmpty(buffer);
- }
- return;
- }
-
- RETURN_EMPTY_STRING()
-}
-
-/* {{{ PHP_MINIT_FUNCTION
- */
-PHP_MINIT_FUNCTION(xmlwriter)
-{
-
- le_xmlwriter = zend_register_list_destructors_ex(xmlwriter_dtor, NULL, "xmlwriter", module_number);
-
- return SUCCESS;
-}
-/* }}} */
-
-
-/* {{{ PHP_MSHUTDOWN_FUNCTION
- */
-PHP_MSHUTDOWN_FUNCTION(xmlwriter)
-{
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ PHP_MINFO_FUNCTION
- */
-PHP_MINFO_FUNCTION(xmlwriter)
-{
- php_info_print_table_start();
- {
- php_info_print_table_row(2, "XMLWriter", "enabled");
- }
- php_info_print_table_end();
-}
-/* }}} */
-
-/*
- * 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/xmlwriter/php_xmlwriter.h b/ext/xmlwriter/php_xmlwriter.h
deleted file mode 100644
index c0b4ea5ba0..0000000000
--- a/ext/xmlwriter/php_xmlwriter.h
+++ /dev/null
@@ -1,94 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Rob Richards <rrichards@php.net> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifndef PHP_XMLWRITER_H
-#define PHP_XMLWRITER_H
-
-extern zend_module_entry xmlwriter_module_entry;
-#define phpext_xmlwriter_ptr &xmlwriter_module_entry
-
-#ifdef PHP_WIN32
-#define PHP_XMLWRITER_API __declspec(dllexport)
-#else
-#define PHP_XMLWRITER_API
-#endif
-
-#ifdef ZTS
-#include "TSRM.h"
-#endif
-
-#include <libxml/tree.h>
-#include <libxml/xmlwriter.h>
-#include <libxml/uri.h>
-
-typedef struct _xmlwriter_object {
- xmlTextWriterPtr ptr;
- xmlBufferPtr output;
-} xmlwriter_object;
-
-#if LIBXML_VERSION >= 20605
-PHP_FUNCTION(xmlwriter_set_indent);
-PHP_FUNCTION(xmlwriter_set_indent_string);
-#endif
-PHP_FUNCTION(xmlwriter_start_attribute);
-PHP_FUNCTION(xmlwriter_end_attribute);
-PHP_FUNCTION(xmlwriter_start_attribute_ns);
-PHP_FUNCTION(xmlwriter_write_attribute);
-PHP_FUNCTION(xmlwriter_write_attribute_ns);
-PHP_FUNCTION(xmlwriter_start_element);
-PHP_FUNCTION(xmlwriter_end_element);
-PHP_FUNCTION(xmlwriter_start_element_ns);
-PHP_FUNCTION(xmlwriter_write_element);
-PHP_FUNCTION(xmlwriter_write_element_ns);
-PHP_FUNCTION(xmlwriter_start_pi);
-PHP_FUNCTION(xmlwriter_end_pi);
-PHP_FUNCTION(xmlwriter_write_pi);
-PHP_FUNCTION(xmlwriter_start_cdata);
-PHP_FUNCTION(xmlwriter_end_cdata);
-PHP_FUNCTION(xmlwriter_write_cdata);
-PHP_FUNCTION(xmlwriter_text);
-PHP_FUNCTION(xmlwriter_start_document);
-PHP_FUNCTION(xmlwriter_end_document);
-PHP_FUNCTION(xmlwriter_write_comment);
-PHP_FUNCTION(xmlwriter_start_dtd);
-PHP_FUNCTION(xmlwriter_end_dtd);
-PHP_FUNCTION(xmlwriter_write_dtd);
-PHP_FUNCTION(xmlwriter_start_dtd_element);
-PHP_FUNCTION(xmlwriter_end_dtd_element);
-PHP_FUNCTION(xmlwriter_open_uri);
-PHP_FUNCTION(xmlwriter_open_memory);
-PHP_FUNCTION(xmlwriter_output_memory);
-
-#ifdef ZTS
-#define XMLWRITER_G(v) TSRMG(xmlwriter_globals_id, zend_xmlwriter_globals *, v)
-#else
-#define XMLWRITER_G(v) (xmlwriter_globals.v)
-#endif
-
-#endif /* PHP_XMLWRITER_H */
-
-/*
- * 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/xsl/CREDITS b/ext/xsl/CREDITS
deleted file mode 100644
index 2f33c8874c..0000000000
--- a/ext/xsl/CREDITS
+++ /dev/null
@@ -1,2 +0,0 @@
-XSL
-Christian Stocker, Rob Richards
diff --git a/ext/xsl/config.m4 b/ext/xsl/config.m4
deleted file mode 100644
index 552ed94f2d..0000000000
--- a/ext/xsl/config.m4
+++ /dev/null
@@ -1,63 +0,0 @@
-dnl
-dnl $Id$
-dnl
-
-PHP_ARG_WITH(xsl, for XSL support,
-[ --with-xsl[=DIR] Include new XSL support (requires libxslt >= 1.0.18).
- DIR is the libxslt install directory.])
-
-if test "$PHP_XSL" != "no" -a "$PHP_DOM" = "no"; then
- AC_MSG_ERROR([XSL extension requires DOM extension, add --enable-dom.])
-fi
-
-if test "$PHP_XSL" != "no"; then
-
- for i in $PHP_XSL /usr/local /usr; do
- if test -x "$i/bin/xslt-config"; then
- XSLT_CONFIG=$i/bin/xslt-config
- break
- fi
- done
-
- if test -z "$XSLT_CONFIG"; then
- AC_MSG_ERROR([xslt-config not found. Please reinstall the libxslt >= 1.0.18 distribution])
- else
- libxslt_full_version=`$XSLT_CONFIG --version`
- ac_IFS=$IFS
- IFS="."
- set $libxslt_full_version
- IFS=$ac_IFS
- LIBXSLT_VERSION=`expr [$]1 \* 1000000 + [$]2 \* 1000 + [$]3`
- if test "$LIBXSLT_VERSION" -ge "1000018"; then
- XSL_LIBS=`$XSLT_CONFIG --libs`
- XSL_INCS=`$XSLT_CONFIG --cflags`
- PHP_EVAL_LIBLINE($XSL_LIBS, XSL_SHARED_LIBADD)
- PHP_EVAL_INCLINE($XSL_INCS)
-
- AC_MSG_CHECKING([for EXSLT support])
- for i in $PHP_XSL /usr/local /usr; do
- if test -r "$i/include/libexslt/exslt.h"; then
- PHP_XSL_EXSL_DIR=$i
- break
- fi
- done
- if test -z "$PHP_XSL_EXSL_DIR"; then
- AC_MSG_RESULT(not found)
- else
- AC_MSG_RESULT(found)
- PHP_ADD_LIBRARY_WITH_PATH(exslt, $PHP_XSL_EXSL_DIR/lib, XSL_SHARED_LIBADD)
- PHP_ADD_INCLUDE($PHP_XSL_EXSL_DIR/include)
- AC_DEFINE(HAVE_XSL_EXSLT,1,[ ])
- fi
- else
- AC_MSG_ERROR([libxslt version 1.0.18 or greater required.])
- fi
-
-
- fi
-
- AC_DEFINE(HAVE_XSL,1,[ ])
- PHP_NEW_EXTENSION(xsl, php_xsl.c xsltprocessor.c, $ext_shared)
- PHP_SUBST(XSL_SHARED_LIBADD)
- PHP_ADD_EXTENSION_DEP(xsl, libxml)
-fi
diff --git a/ext/xsl/config.w32 b/ext/xsl/config.w32
deleted file mode 100644
index 37da4bd630..0000000000
--- a/ext/xsl/config.w32
+++ /dev/null
@@ -1,47 +0,0 @@
-// $Id$
-// vim: ft=javascript
-
-ARG_WITH("xsl", "xsl support", "no");
-
-if (PHP_XSL != "no") {
- if (PHP_DOM == "yes" && PHP_LIBXML == "yes") {
- var ext_xsl_lib_found = false;
- var ext_exslt_lib_found = false;
-
- if (CHECK_LIB("libxslt_a.lib", "xsl", PHP_XSL)) {
- ext_xsl_lib_found = true;
- ADD_FLAG("CFLAGS_XSL", "/D LIBXSLT_STATIC ");
- if (CHECK_LIB("libexslt_a.lib", "xsl", PHP_XSL)) {
- ADD_FLAG("CFLAGS_XSL", "/D LIBEXSLT_STATIC ");
- ext_exslt_lib_found = true;
- }
- } else if (CHECK_LIB("libxslt.lib", "xsl", PHP_XSL)) {
- ext_xsl_lib_found = true;
- if (CHECK_LIB("libexslt.lib", "xsl", PHP_XSL)) {
- ext_exslt_lib_found = true;
- }
- }
-
- if (ext_xsl_lib_found && CHECK_HEADER_ADD_INCLUDE("libxslt\\xslt.h", "CFLAGS_XSL")) {
- if (ext_exslt_lib_found) {
- if (CHECK_HEADER_ADD_INCLUDE("libexslt\\exslt.h", "CFLAGS_XSL")) {
- AC_DEFINE("HAVE_XSL_EXSLT", 1, "");
- }
- }
- EXTENSION("xsl", "php_xsl.c xsltprocessor.c", PHP_XSL_SHARED);
- AC_DEFINE("HAVE_XSL", 1, "Define if xsl extension is enabled");
- if (! PHP_XSL_SHARED) {
- ADD_FLAG("CFLAGS_XSL", "/D DOM_EXPORTS /D LIBXML_STATIC");
- } else {
- if (PHP_DEBUG == "yes") {
- ADD_FLAG("LDFLAGS_XSL", "/nodefaultlib:msvcrt");
- }
- }
- ADD_EXTENSION_DEP('xsl', 'libxml');
- } else {
- WARNING("xsl not enabled; libraries and headers not found");
- }
- } else {
- WARNING("xsl not enabled; DOM extension required");
- }
-}
diff --git a/ext/xsl/php_xsl.c b/ext/xsl/php_xsl.c
deleted file mode 100644
index 70c8419012..0000000000
--- a/ext/xsl/php_xsl.c
+++ /dev/null
@@ -1,296 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Christian Stocker <chregu@php.net> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "php.h"
-#include "php_ini.h"
-#include "ext/standard/info.h"
-#include "php_xsl.h"
-
-
-/* If you declare any globals in php_xsl.h uncomment this:
-ZEND_DECLARE_MODULE_GLOBALS(xsl)
-*/
-
-static zend_object_handlers xsl_object_handlers;
-
-/* {{{ xsl_functions[]
- *
- * Every user visible function must have an entry in xsl_functions[].
- */
-function_entry xsl_functions[] = {
- {NULL, NULL, NULL} /* Must be the last line in xsl_functions[] */
-};
-/* }}} */
-
-/* {{{ xsl_module_entry
- */
-zend_module_entry xsl_module_entry = {
-#if ZEND_MODULE_API_NO >= 20010901
- STANDARD_MODULE_HEADER,
-#endif
- "xsl",
- xsl_functions,
- PHP_MINIT(xsl),
- PHP_MSHUTDOWN(xsl),
- PHP_RINIT(xsl), /* Replace with NULL if there's nothing to do at request start */
- PHP_RSHUTDOWN(xsl), /* Replace with NULL if there's nothing to do at request end */
- PHP_MINFO(xsl),
-#if ZEND_MODULE_API_NO >= 20010901
- "0.1", /* Replace with version number for your extension */
-#endif
- STANDARD_MODULE_PROPERTIES
-};
-/* }}} */
-
-#ifdef COMPILE_DL_XSL
-ZEND_GET_MODULE(xsl)
-#endif
-
-/* {{{ xsl_objects_free_storage */
-void xsl_objects_free_storage(void *object TSRMLS_DC)
-{
- xsl_object *intern = (xsl_object *)object;
-
- zend_hash_destroy(intern->std.properties);
- FREE_HASHTABLE(intern->std.properties);
-
- zend_hash_destroy(intern->parameter);
- FREE_HASHTABLE(intern->parameter);
-
- if (intern->node_list) {
- zend_hash_destroy(intern->node_list);
- FREE_HASHTABLE(intern->node_list);
- }
-
- if (intern->ptr) {
- /* free wrapper */
- if (((xsltStylesheetPtr) intern->ptr)->_private != NULL) {
- ((xsltStylesheetPtr) intern->ptr)->_private = NULL;
- }
-
- xsltFreeStylesheet((xsltStylesheetPtr) intern->ptr);
- intern->ptr = NULL;
- }
- efree(object);
-}
-/* }}} */
-/* {{{ xsl_objects_new */
-zend_object_value xsl_objects_new(zend_class_entry *class_type TSRMLS_DC)
-{
- zend_object_value retval;
- xsl_object *intern;
- zval *tmp;
-
- intern = emalloc(sizeof(xsl_object));
- intern->std.ce = class_type;
- intern->std.in_get = 0;
- intern->std.in_set = 0;
- intern->ptr = NULL;
- intern->prop_handler = NULL;
- intern->parameter = NULL;
- intern->hasKeys = 0;
- intern->registerPhpFunctions = 0;
- intern->node_list = NULL;
-
- ALLOC_HASHTABLE(intern->std.properties);
- zend_hash_init(intern->std.properties, 0, NULL, ZVAL_PTR_DTOR, 0);
- zend_hash_copy(intern->std.properties, &class_type->default_properties, (copy_ctor_func_t) zval_add_ref, (void *) &tmp, sizeof(zval *));
- ALLOC_HASHTABLE(intern->parameter);
- zend_hash_init(intern->parameter, 0, NULL, ZVAL_PTR_DTOR, 0);
- retval.handle = zend_objects_store_put(intern, NULL, (zend_objects_free_object_storage_t) xsl_objects_free_storage, NULL TSRMLS_CC);
- intern->handle = retval.handle;
- retval.handlers = &xsl_object_handlers;
- return retval;
-}
-/* }}} */
-
-/* {{{ PHP_MINIT_FUNCTION
- */
-PHP_MINIT_FUNCTION(xsl)
-{
-
- zend_class_entry ce;
-
- memcpy(&xsl_object_handlers, zend_get_std_object_handlers(), sizeof(zend_object_handlers));
- xsl_object_handlers.clone_obj = NULL;
-
- REGISTER_XSL_CLASS(ce, "XSLTProcessor", NULL, php_xsl_xsltprocessor_class_functions, xsl_xsltprocessor_class_entry);
-#if HAVE_XSL_EXSLT
- exsltRegisterAll();
-#endif
-
- REGISTER_LONG_CONSTANT("XSL_CLONE_AUTO", 0, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("XSL_CLONE_NEVER", -1, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("XSL_CLONE_ALWAYS", 1, CONST_CS | CONST_PERSISTENT);
-
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ xsl_object_get_data */
-zval *xsl_object_get_data(void *obj)
-{
- zval *dom_wrapper;
- dom_wrapper = ((xsltStylesheetPtr) obj)->_private;
- return dom_wrapper;
-}
-/* }}} */
-
-/* {{{ xsl_object_set_data */
-static void xsl_object_set_data(void *obj, zval *wrapper TSRMLS_DC)
-{
- ((xsltStylesheetPtr) obj)->_private = wrapper;
-}
-/* }}} */
-
-/* {{{ php_xsl_set_object */
-void php_xsl_set_object(zval *wrapper, void *obj TSRMLS_DC)
-{
- xsl_object *object;
-
- object = (xsl_object *)zend_objects_get_address(wrapper TSRMLS_CC);
- object->ptr = obj;
- xsl_object_set_data(obj, wrapper TSRMLS_CC);
-}
-/* }}} */
-
-/* {{{ php_xsl_create_object */
-zval *php_xsl_create_object(xsltStylesheetPtr obj, int *found, zval *wrapper_in, zval *return_value TSRMLS_DC)
-{
- zval *wrapper;
- zend_class_entry *ce;
-
- *found = 0;
-
- if (!obj) {
- if(!wrapper_in) {
- ALLOC_ZVAL(wrapper);
- } else {
- wrapper = wrapper_in;
- }
- ZVAL_NULL(wrapper);
- return wrapper;
- }
-
- if ((wrapper = (zval *) xsl_object_get_data((void *) obj))) {
- zval_add_ref(&wrapper);
- *found = 1;
- return wrapper;
- }
-
- if(!wrapper_in) {
- wrapper = return_value;
- } else {
- wrapper = wrapper_in;
- }
-
-
- ce = xsl_xsltprocessor_class_entry;
-
- if(!wrapper_in) {
- object_init_ex(wrapper, ce);
- }
- php_xsl_set_object(wrapper, (void *) obj TSRMLS_CC);
- return (wrapper);
-}
-/* }}} */
-
-
-
-
-/* {{{ PHP_MSHUTDOWN_FUNCTION
- */
-PHP_MSHUTDOWN_FUNCTION(xsl)
-{
- /* uncomment this line if you have INI entries
- UNREGISTER_INI_ENTRIES();
- */
- xsltCleanupGlobals();
-
- return SUCCESS;
-}
-/* }}} */
-
-/* Remove if there's nothing to do at request start */
-/* {{{ PHP_RINIT_FUNCTION
- */
-PHP_RINIT_FUNCTION(xsl)
-{
- xsltSetGenericErrorFunc(NULL, php_libxml_error_handler);
- return SUCCESS;
-}
-/* }}} */
-
-/* Remove if there's nothing to do at request end */
-/* {{{ PHP_RSHUTDOWN_FUNCTION
- */
-PHP_RSHUTDOWN_FUNCTION(xsl)
-{
- xsltSetGenericErrorFunc(NULL, NULL);
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ PHP_MINFO_FUNCTION
- */
-PHP_MINFO_FUNCTION(xsl)
-{
- php_info_print_table_start();
- {
- char buffer[128];
- int major, minor, subminor;
-
- php_info_print_table_row(2, "XSL", "enabled");
- major = xsltLibxsltVersion/10000;
- minor = (xsltLibxsltVersion - major * 10000) / 100;
- subminor = (xsltLibxsltVersion - major * 10000 - minor * 100);
- snprintf(buffer, 128, "%d.%d.%d", major, minor, subminor);
- php_info_print_table_row(2, "libxslt Version", buffer);
- major = xsltLibxmlVersion/10000;
- minor = (xsltLibxmlVersion - major * 10000) / 100;
- subminor = (xsltLibxmlVersion - major * 10000 - minor * 100);
- snprintf(buffer, 128, "%d.%d.%d", major, minor, subminor);
- php_info_print_table_row(2, "libxslt compiled against libxml Version", buffer);
- }
-#if HAVE_XSL_EXSLT
- php_info_print_table_row(2, "EXSLT", "enabled");
- php_info_print_table_row(2, "libexslt Version", LIBEXSLT_DOTTED_VERSION);
-#endif
- php_info_print_table_end();
-
- /* Remove comments if you have entries in php.ini
- DISPLAY_INI_ENTRIES();
- */
-}
-/* }}} */
-
-
-/*
- * 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/xsl/php_xsl.h b/ext/xsl/php_xsl.h
deleted file mode 100644
index 7d9258feca..0000000000
--- a/ext/xsl/php_xsl.h
+++ /dev/null
@@ -1,123 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifndef PHP_XSL_H
-#define PHP_XSL_H
-
-extern zend_module_entry xsl_module_entry;
-#define phpext_xsl_ptr &xsl_module_entry
-
-#ifdef PHP_WIN32
-#define PHP_XSL_API __declspec(dllexport)
-#else
-#define PHP_XSL_API
-#endif
-
-#ifdef ZTS
-#include "TSRM.h"
-#endif
-
-#include <libxslt/xsltconfig.h>
-#include <libxslt/xsltInternals.h>
-#include <libxslt/xsltutils.h>
-#include <libxslt/transform.h>
-#if HAVE_XSL_EXSLT
-#include <libexslt/exslt.h>
-#include <libexslt/exsltconfig.h>
-#endif
-
-#include "../dom/xml_common.h"
-#include "xsl_fe.h"
-
-#include <libxslt/extensions.h>
-#include <libxml/xpathInternals.h>
-
-typedef struct _xsl_object {
- zend_object std;
- void *ptr;
- HashTable *prop_handler;
- zend_object_handle handle;
- HashTable *parameter;
- int hasKeys;
- int registerPhpFunctions;
- HashTable *node_list;
-} xsl_object;
-
-void php_xsl_set_object(zval *wrapper, void *obj TSRMLS_DC);
-void xsl_objects_free_storage(void *object TSRMLS_DC);
-zval *php_xsl_create_object(xsltStylesheetPtr obj, int *found, zval *wrapper_in, zval *return_value TSRMLS_DC);
-
-#define REGISTER_XSL_CLASS(ce, name, parent_ce, funcs, entry) \
-INIT_CLASS_ENTRY(ce, name, funcs); \
-ce.create_object = xsl_objects_new; \
-entry = zend_register_internal_class_ex(&ce, parent_ce, NULL TSRMLS_CC);
-
-#define XSL_DOMOBJ_NEW(zval, obj, ret) \
- if (NULL == (zval = php_xsl_create_object(obj, ret, zval, return_value TSRMLS_CC))) { \
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Cannot create required DOM object"); \
- RETURN_FALSE; \
- }
-
-
-
-PHP_MINIT_FUNCTION(xsl);
-PHP_MSHUTDOWN_FUNCTION(xsl);
-PHP_RINIT_FUNCTION(xsl);
-PHP_RSHUTDOWN_FUNCTION(xsl);
-PHP_MINFO_FUNCTION(xsl);
-
-
-/*
- Declare any global variables you may need between the BEGIN
- and END macros here:
-
-ZEND_BEGIN_MODULE_GLOBALS(xsl)
- long global_value;
- char *global_string;
-ZEND_END_MODULE_GLOBALS(xsl)
-*/
-
-/* In every utility function you add that needs to use variables
- in php_xsl_globals, call TSRM_FETCH(); after declaring other
- variables used by that function, or better yet, pass in TSRMLS_CC
- after the last function argument and declare your utility function
- with TSRMLS_DC after the last declared argument. Always refer to
- the globals in your function as XSL_G(variable). You are
- encouraged to rename these macros something shorter, see
- examples in any other php module directory.
-*/
-
-#ifdef ZTS
-#define XSL_G(v) TSRMG(xsl_globals_id, zend_xsl_globals *, v)
-#else
-#define XSL_G(v) (xsl_globals.v)
-#endif
-
-#endif /* PHP_XSL_H */
-
-
-/*
- * 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/xsl/tests/area_list.xsl b/ext/xsl/tests/area_list.xsl
deleted file mode 100644
index e0c88c6215..0000000000
--- a/ext/xsl/tests/area_list.xsl
+++ /dev/null
@@ -1,10 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
-
- <xsl:output method="text" encoding="UTF-8"/>
-
- <xsl:key name="area" match="ROW" use="substring(translate(AREA_NAME, '&quot;', ''), 1, 1)"/>
-<xsl:template match="*">
- HERE
-</xsl:template>
-</xsl:stylesheet>
diff --git a/ext/xsl/tests/area_name.xml b/ext/xsl/tests/area_name.xml
deleted file mode 100644
index 76cea58511..0000000000
--- a/ext/xsl/tests/area_name.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<AREA_NAME>
- <ROW>
- <AREA_CODE>13</AREA_CODE>
- <AREA_NAME>&quot;Ðвтово&quot; м.</AREA_NAME>
- <AREA_NAME_ENG>m.&quot;Avtovo&quot;</AREA_NAME_ENG>
- </ROW>
-</AREA_NAME>
-
-
-
diff --git a/ext/xsl/tests/bug26384.phpt b/ext/xsl/tests/bug26384.phpt
deleted file mode 100644
index b8f80f8c3e..0000000000
--- a/ext/xsl/tests/bug26384.phpt
+++ /dev/null
@@ -1,33 +0,0 @@
---TEST--
-Bug #26384 (domxslt->process causes segfault with xsl:key)
---SKIPIF--
-<?php require_once('skipif.inc'); ?>
---FILE--
-<?php
-$dom = new domDocument;
-$dom->load(dirname(__FILE__)."/area_name.xml");
-if(!$dom) {
- echo "Error while parsing the document\n";
- exit;
-}
-$xsl = new domDocument;
-$xsl->load(dirname(__FILE__)."/area_list.xsl");
-if(!$xsl) {
- echo "Error while parsing the document\n";
- exit;
-}
-$proc = new xsltprocessor;
-if(!$proc) {
- echo "Error while making xsltprocessor object\n";
- exit;
-}
-
-$proc->importStylesheet($xsl);
-print $proc->transformToXml($dom);
-
-//this segfaulted before
-print $dom->documentElement->firstChild->nextSibling->nodeName;
-
---EXPECT--
-HERE
-ROW
diff --git a/ext/xsl/tests/documentxpath.xsl b/ext/xsl/tests/documentxpath.xsl
deleted file mode 100644
index 0e5c5c181d..0000000000
--- a/ext/xsl/tests/documentxpath.xsl
+++ /dev/null
@@ -1,10 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-<!-- $Id: documentxpath.xsl,v 1.1 2003-10-27 15:12:20 chregu Exp $ -->
-<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" >
- <xsl:output method="xml" encoding="iso-8859-1" indent="no"/>
-<xsl:template match="/">
-
-<xsl:value-of select="document('compress.zlib://ext/xsl/tests/xslt.xsl.gz')/xsl:stylesheet/xsl:param/@name"/>
-</xsl:template>
-
- </xsl:stylesheet>
diff --git a/ext/xsl/tests/exslt.xml b/ext/xsl/tests/exslt.xml
deleted file mode 100644
index 54913c6f5d..0000000000
--- a/ext/xsl/tests/exslt.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0"?>
-<page>
- <!-- valid xs:date -->
- <date date="0001-12-31Z"/>
- <date date="3000-01-31"/>
- <date date="2000-02-29"/>
- <date date="9990001-12-31Z"/>
- <date date="-0004-02-29"/>
-</page>
diff --git a/ext/xsl/tests/exslt.xsl b/ext/xsl/tests/exslt.xsl
deleted file mode 100644
index 8f0baef6ca..0000000000
--- a/ext/xsl/tests/exslt.xsl
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<xsl:stylesheet version="1.0"
- xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
- xmlns:date="http://exslt.org/dates-and-times"
- extension-element-prefixes="date">
-
-<xsl:output method="text"/>
-
-<xsl:template match="date">
- Test Date : <xsl:value-of select="@date"/>
- <!-- dateTime, date, gYearMonth or gYear; else NaN -->
- year : <xsl:value-of select="date:year(@date)"/>
- <!-- dateTime, date, gYearMonth or gYear; else NaN -->
- leap-year : <xsl:value-of select="date:leap-year(@date)"/>
- <!-- dateTime, date, gYearMonth, gMonth or gMonthDay; else NaN -->
- month-in-year : <xsl:value-of select="date:month-in-year(@date)"/>
- <!-- dateTime, date, gYearMonth or gMonth; else '' -->
- month-name : <xsl:value-of select="date:month-name(@date)"/>
- <!-- dateTime, date, gYearMonth or gMonth; else '' -->
- month-abbreviation : <xsl:value-of select="date:month-abbreviation(@date)"/>
- <!-- dateTime or date; else NaN -->
- week-in-year : <xsl:value-of select="date:week-in-year(@date)"/>
- <!-- dateTime, date; else NaN -->
- day-in-year : <xsl:value-of select="date:day-in-year(@date)"/>
- <!-- dateTime, date, gMonthDay or gDay; else NaN -->
- day-in-month : <xsl:value-of select="date:day-in-month(@date)"/>
- <!-- dateTime, date; else NaN -->
- day-of-week-in-month : <xsl:value-of select="date:day-of-week-in-month(@date)"/>
- <!-- dateTime, date; else NaN -->
- day-in-week : <xsl:value-of select="date:day-in-week(@date)"/>
- <!-- dateTime or date; else NaN -->
- day-name : <xsl:value-of select="date:day-name(@date)"/>
- <!-- dateTime or date; else NaN -->
- day-abbreviation : <xsl:value-of select="date:day-abbreviation(@date)"/>
- <!-- dateTime or time; else '' -->
- time : <xsl:value-of select="date:time(@date)"/>
- <!-- dateTime or time; else NaN -->
- hour-in-day : <xsl:value-of select="date:hour-in-day(@date)"/>
- <!-- dateTime or time; else NaN -->
- minute-in-hour : <xsl:value-of select="date:minute-in-hour(@date)"/>
- <!-- dateTime or time; else NaN -->
- second-in-minute : <xsl:value-of select="date:second-in-minute(@date)"/>
-</xsl:template>
-
-</xsl:stylesheet>
diff --git a/ext/xsl/tests/prepare.inc b/ext/xsl/tests/prepare.inc
deleted file mode 100644
index bd5bbee40c..0000000000
--- a/ext/xsl/tests/prepare.inc
+++ /dev/null
@@ -1,20 +0,0 @@
-<?php
-$dom = new domDocument;
-$dom->load(dirname(__FILE__)."/xslt.xml");
-if(!$dom) {
- echo "Error while parsing the document\n";
- exit;
-}
-$xsl = new domDocument;
-$xsl->load(dirname(__FILE__)."/xslt.xsl");
-if(!$xsl) {
- echo "Error while parsing the document\n";
- exit;
-}
-$proc = new xsltprocessor;
-if(!$proc) {
- echo "Error while making xsltprocessor object\n";
- exit;
-}
-
-?>
diff --git a/ext/xsl/tests/skipif.inc b/ext/xsl/tests/skipif.inc
deleted file mode 100644
index 0ef73723a3..0000000000
--- a/ext/xsl/tests/skipif.inc
+++ /dev/null
@@ -1 +0,0 @@
-<?php if (!extension_loaded('xsl')) die('skip xsl extension not available');?>
diff --git a/ext/xsl/tests/streamsinclude.xsl b/ext/xsl/tests/streamsinclude.xsl
deleted file mode 100644
index 6f8bc40ed9..0000000000
--- a/ext/xsl/tests/streamsinclude.xsl
+++ /dev/null
@@ -1,6 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-<!-- $Id: streamsinclude.xsl,v 1.1 2003-10-27 15:12:20 chregu Exp $ -->
-<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" >
- <xsl:output method="xml" encoding="iso-8859-1" indent="no"/>
- <xsl:include href="compress.zlib://xslt.xsl.gz"/>
-</xsl:stylesheet>
diff --git a/ext/xsl/tests/xslt.xml b/ext/xsl/tests/xslt.xml
deleted file mode 100644
index b0e9506c7b..0000000000
--- a/ext/xsl/tests/xslt.xml
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version='1.0' encoding="iso-8859-1" ?>
-<chapter language="en">
- <title language="en">Title</title>
- <para language="ge">
-
-<!-- comment -->
- <informaltable>
- <tgroup cols="3">
- <tbody>
- <row>
- <entry>a1</entry>
- <entry morerows="1">b1</entry>
- <entry>c1</entry>
- </row>
- <row>
- <entry>a2</entry>
- <entry>c2</entry>
- </row>
- <row>
- <entry>ä3</entry>
- <entry>b3</entry>
- <entry>c3</entry>
- </row>
- </tbody>
- </tgroup>
- </informaltable>
- </para>
-</chapter>
diff --git a/ext/xsl/tests/xslt.xsl b/ext/xsl/tests/xslt.xsl
deleted file mode 100644
index 8331ccc2b5..0000000000
--- a/ext/xsl/tests/xslt.xsl
+++ /dev/null
@@ -1,26 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-<!-- $Id: xslt.xsl,v 1.2 2003-11-29 13:01:19 chregu Exp $ -->
-<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" >
-
- <xsl:output method="xml" encoding="iso-8859-1" indent="no"/>
- <xsl:param name="foo" select="'bar'"/>
- <xsl:template match="/">
- <html>
- <body>
- <xsl:value-of select="$foo"/><xsl:text>
-</xsl:text>
- <xsl:apply-templates select="/chapter/para/informaltable/tgroup/tbody/row"/>
- </body>
- </html>
- </xsl:template>
-
- <xsl:template match="row">
- <xsl:for-each select="entry">
- <xsl:value-of select="."/>
- <xsl:text> </xsl:text>
- </xsl:for-each>
- <br/> <xsl:text>
-</xsl:text>
-
- </xsl:template>
-</xsl:stylesheet>
diff --git a/ext/xsl/tests/xslt.xsl.gz b/ext/xsl/tests/xslt.xsl.gz
deleted file mode 100644
index 910bb63c8e..0000000000
--- a/ext/xsl/tests/xslt.xsl.gz
+++ /dev/null
Binary files differ
diff --git a/ext/xsl/tests/xslt001.phpt b/ext/xsl/tests/xslt001.phpt
deleted file mode 100644
index 885e7c9824..0000000000
--- a/ext/xsl/tests/xslt001.phpt
+++ /dev/null
@@ -1,22 +0,0 @@
---TEST--
-Test 1: Transform To XML String
---SKIPIF--
-<?php require_once('skipif.inc'); ?>
---FILE--
-<?php
-echo "Test 1: Transform To XML String";
-include("prepare.inc");
-$proc->importStylesheet($xsl);
-print "\n";
-print $proc->transformToXml($dom);
-print "\n";
-
-
---EXPECT--
-Test 1: Transform To XML String
-<?xml version="1.0" encoding="iso-8859-1"?>
-<html><body>bar
-a1 b1 c1 <br/>
-a2 c2 <br/>
-ä3 b3 c3 <br/>
-</body></html>
diff --git a/ext/xsl/tests/xslt002.phpt b/ext/xsl/tests/xslt002.phpt
deleted file mode 100644
index 6c9f0c632c..0000000000
--- a/ext/xsl/tests/xslt002.phpt
+++ /dev/null
@@ -1,29 +0,0 @@
---TEST--
-Test 2: Transform To HTML String
---SKIPIF--
-<?php require_once('skipif.inc'); ?>
---FILE--
-<?php
-echo "Test 2: Transform To HTML String";
-include("prepare.inc");
-// changing output method to html
-$xp = new domxpath($xsl);
-$res = $xp->query("/xsl:stylesheet/xsl:output/@method");
-if ($res->length != 1) {
- print "No or more than one xsl:output/@method found";
- exit;
-}
-$res->item(0)->value = "html";
-$proc->importStylesheet($xsl);
-print "\n";
-print $proc->transformToXml($dom);
-print "\n";
-
-
---EXPECT--
-Test 2: Transform To HTML String
-<html><body>bar
-a1 b1 c1 <br>
-a2 c2 <br>
-ä3 b3 c3 <br>
-</body></html>
diff --git a/ext/xsl/tests/xslt003.phpt b/ext/xsl/tests/xslt003.phpt
deleted file mode 100644
index a3c848b1b7..0000000000
--- a/ext/xsl/tests/xslt003.phpt
+++ /dev/null
@@ -1,23 +0,0 @@
---TEST--
-Test 3: Using Parameters
---SKIPIF--
-<?php require_once('skipif.inc'); ?>
---FILE--
-<?php
-echo "Test 3: Using Parameters";
-include("prepare.inc");
-$proc->importStylesheet($xsl);
-$proc->setParameter( "", "foo","hello world");
-print "\n";
-print $proc->transformToXml($dom);
-print "\n";
-
-
---EXPECT--
-Test 3: Using Parameters
-<?xml version="1.0" encoding="iso-8859-1"?>
-<html><body>hello world
-a1 b1 c1 <br/>
-a2 c2 <br/>
-ä3 b3 c3 <br/>
-</body></html>
diff --git a/ext/xsl/tests/xslt004.phpt b/ext/xsl/tests/xslt004.phpt
deleted file mode 100644
index 6e8f476018..0000000000
--- a/ext/xsl/tests/xslt004.phpt
+++ /dev/null
@@ -1,29 +0,0 @@
---TEST--
-Test 4: Checking UTF8 Output
---SKIPIF--
-<?php require_once('skipif.inc'); ?>
---FILE--
-<?php
-echo "Test 4: Checking UTF8 Output";
-include("prepare.inc");
-$xp = new domxpath($xsl);
-$res = $xp->query("/xsl:stylesheet/xsl:output/@encoding");
-if ($res->length != 1) {
- print "No or more than one xsl:output/@encoding found";
- exit;
-}
-$res->item(0)->value = "utf-8";
-$proc->importStylesheet($xsl);
-print "\n";
-print $proc->transformToXml($dom);
-print "\n";
-
-
---EXPECT--
-Test 4: Checking UTF8 Output
-<?xml version="1.0" encoding="utf-8"?>
-<html><body>bar
-a1 b1 c1 <br/>
-a2 c2 <br/>
-ä3 b3 c3 <br/>
-</body></html>
diff --git a/ext/xsl/tests/xslt005.phpt b/ext/xsl/tests/xslt005.phpt
deleted file mode 100644
index a70e6ea4f1..0000000000
--- a/ext/xsl/tests/xslt005.phpt
+++ /dev/null
@@ -1,31 +0,0 @@
---TEST--
-Test 5: Checking Indent
---SKIPIF--
-<?php require_once('skipif.inc'); ?>
---FILE--
-<?php
-echo "Test 5: Checking Indent";
-include("prepare.inc");
-$xp = new domxpath($xsl);
-$res = $xp->query("/xsl:stylesheet/xsl:output/@indent");
-if ($res->length != 1) {
- print "No or more than one xsl:output/@indent found";
- exit;
-}
-$res->item(0)->value = "yes";
-$proc->importStylesheet($xsl);
-print "\n";
-print $proc->transformToXml($dom);
-print "\n";
-
-
---EXPECT--
-Test 5: Checking Indent
-<?xml version="1.0" encoding="iso-8859-1"?>
-<html>
- <body>bar
-a1 b1 c1 <br/>
-a2 c2 <br/>
-ä3 b3 c3 <br/>
-</body>
-</html>
diff --git a/ext/xsl/tests/xslt006.phpt b/ext/xsl/tests/xslt006.phpt
deleted file mode 100644
index 26fada1650..0000000000
--- a/ext/xsl/tests/xslt006.phpt
+++ /dev/null
@@ -1,23 +0,0 @@
---TEST--
-Test 6: Transform To Doc
---SKIPIF--
-<?php require_once('skipif.inc'); ?>
---FILE--
-<?php
-echo "Test 6: Transform To Doc";
-include("prepare.inc");
-$proc->importStylesheet($xsl);
-print "\n";
-$doc = $proc->transformToDoc($dom);
-print $doc->saveXML();
-print "\n";
-
-
---EXPECT--
-Test 6: Transform To Doc
-<?xml version="1.0" encoding="iso-8859-1"?>
-<html><body>bar
-a1 b1 c1 <br/>
-a2 c2 <br/>
-ä3 b3 c3 <br/>
-</body></html>
diff --git a/ext/xsl/tests/xslt007.phpt b/ext/xsl/tests/xslt007.phpt
deleted file mode 100644
index bc6ad8477a..0000000000
--- a/ext/xsl/tests/xslt007.phpt
+++ /dev/null
@@ -1,24 +0,0 @@
---TEST--
-Test 7: Transform To Uri
---SKIPIF--
-<?php require_once('skipif.inc'); ?>
---FILE--
-<?php
-echo "Test 7: Transform To Uri";
-include("prepare.inc");
-$proc->importStylesheet($xsl);
-print "\n";
-$doc = $proc->transformToUri($dom, "file://".dirname(__FILE__)."/out.xml");
-print file_get_contents(dirname(__FILE__)."/out.xml");
-unlink(dirname(__FILE__)."/out.xml");
-print "\n";
-
-
---EXPECT--
-Test 7: Transform To Uri
-<?xml version="1.0" encoding="iso-8859-1"?>
-<html><body>bar
-a1 b1 c1 <br/>
-a2 c2 <br/>
-ä3 b3 c3 <br/>
-</body></html>
diff --git a/ext/xsl/tests/xslt008.phpt b/ext/xsl/tests/xslt008.phpt
deleted file mode 100644
index 0efc88e8c5..0000000000
--- a/ext/xsl/tests/xslt008.phpt
+++ /dev/null
@@ -1,31 +0,0 @@
---TEST--
-Test 8: Stream Wrapper Includes
---SKIPIF--
-<?php
- require_once('skipif.inc');
- if (!extension_loaded('zlib')) die('skip zlib extension not available');
-?>
---FILE--
-<?php
-echo "Test 8: Stream Wrapper Includes ";
-include("prepare.inc");
-$xsl = new domDocument;
-$xsl->load(dirname(__FILE__)."/streamsinclude.xsl");
-if(!$xsl) {
- echo "Error while parsing the document\n";
- exit;
-}
-chdir(dirname(__FILE__));
-$proc->importStylesheet($xsl);
-print "\n";
-print $proc->transformToXML($dom);
-
-
---EXPECT--
-Test 8: Stream Wrapper Includes
-<?xml version="1.0" encoding="iso-8859-1"?>
-<html><body>bar
-a1 b1 c1 <br/>
-a2 c2 <br/>
-ä3 b3 c3 <br/>
-</body></html>
diff --git a/ext/xsl/tests/xslt009.phpt b/ext/xsl/tests/xslt009.phpt
deleted file mode 100644
index f763e84daa..0000000000
--- a/ext/xsl/tests/xslt009.phpt
+++ /dev/null
@@ -1,28 +0,0 @@
---TEST--
-Test 9: Stream Wrapper XPath-Document()
---SKIPIF--
-<?php
- require_once('skipif.inc');
- if (!extension_loaded('zlib')) die('skip zlib extension not available');
-?>
---FILE--
-<?php
-echo "Test 9: Stream Wrapper XPath-Document()";
-include("prepare.inc");
-
-$xsl = new domDocument;
-$xsl->load(dirname(__FILE__)."/documentxpath.xsl");
-if(!$xsl) {
- echo "Error while parsing the document\n";
- exit;
-}
-
-$proc->importStylesheet($xsl);
-print "\n";
-print $proc->transformToXML($dom);
-
-
---EXPECT--
-Test 9: Stream Wrapper XPath-Document()
-<?xml version="1.0" encoding="iso-8859-1"?>
-foo
diff --git a/ext/xsl/tests/xslt010.phpt b/ext/xsl/tests/xslt010.phpt
deleted file mode 100644
index 7c46d030f4..0000000000
--- a/ext/xsl/tests/xslt010.phpt
+++ /dev/null
@@ -1,112 +0,0 @@
---TEST--
-Test 10: EXSLT Support
---SKIPIF--
-<?php require_once('skipif.inc');
-$proc = new xsltprocessor;
-if (!$proc->hasExsltSupport()) die('skip EXSLT support not available');?>
---FILE--
-<?php
-echo "Test 10: EXSLT Support";
-
-$dom = new domDocument();
- $dom->load(dirname(__FILE__)."/exslt.xsl");
- $proc = new xsltprocessor;
- $xsl = $proc->importStylesheet($dom);
-
- $xml = new DomDocument();
- $xml->load(dirname(__FILE__)."/exslt.xml");
-
- print $proc->transformToXml($xml);
---EXPECT--
-Test 10: EXSLT Support
-
-
- Test Date : 0001-12-31Z
- year : 1
- leap-year : false
- month-in-year : 12
- month-name : December
- month-abbreviation : Dec
- week-in-year : 53
- day-in-year : 365
- day-in-month : 31
- day-of-week-in-month : 5
- day-in-week : 2
- day-name : Monday
- day-abbreviation : Mon
- time :
- hour-in-day : NaN
- minute-in-hour : NaN
- second-in-minute : NaN
-
- Test Date : 3000-01-31
- year : 3000
- leap-year : false
- month-in-year : 1
- month-name : January
- month-abbreviation : Jan
- week-in-year : 5
- day-in-year : 31
- day-in-month : 31
- day-of-week-in-month : 5
- day-in-week : 6
- day-name : Friday
- day-abbreviation : Fri
- time :
- hour-in-day : NaN
- minute-in-hour : NaN
- second-in-minute : NaN
-
- Test Date : 2000-02-29
- year : 2000
- leap-year : true
- month-in-year : 2
- month-name : February
- month-abbreviation : Feb
- week-in-year : 8
- day-in-year : 60
- day-in-month : 29
- day-of-week-in-month : 5
- day-in-week : 3
- day-name : Tuesday
- day-abbreviation : Tue
- time :
- hour-in-day : NaN
- minute-in-hour : NaN
- second-in-minute : NaN
-
- Test Date : 9990001-12-31Z
- year : 9990001
- leap-year : false
- month-in-year : 12
- month-name : December
- month-abbreviation : Dec
- week-in-year : 53
- day-in-year : 365
- day-in-month : 31
- day-of-week-in-month : 5
- day-in-week : 2
- day-name : Monday
- day-abbreviation : Mon
- time :
- hour-in-day : NaN
- minute-in-hour : NaN
- second-in-minute : NaN
-
- Test Date : -0004-02-29
- year : -4
- leap-year : true
- month-in-year : 2
- month-name : February
- month-abbreviation : Feb
- week-in-year : 9
- day-in-year : 60
- day-in-month : 29
- day-of-week-in-month : 5
- day-in-week : 1
- day-name : Sunday
- day-abbreviation : Sun
- time :
- hour-in-day : NaN
- minute-in-hour : NaN
- second-in-minute : NaN
diff --git a/ext/xsl/tests/xslt011.phpt b/ext/xsl/tests/xslt011.phpt
deleted file mode 100644
index 5f7865279e..0000000000
--- a/ext/xsl/tests/xslt011.phpt
+++ /dev/null
@@ -1,59 +0,0 @@
---TEST--
-Test 11: php:function Support
---SKIPIF--
-<?php require_once('skipif.inc'); ?>
---FILE--
-<?php
-print "Test 11: php:function Support\n";
- Class foo {
- function foo() {}
- function __toString() { return "not a DomNode object";}
- }
-
-$dom = new domDocument();
- $dom->load(dirname(__FILE__)."/xslt011.xsl");
- $proc = new xsltprocessor;
- $xsl = $proc->importStylesheet($dom);
-
- $xml = new DomDocument();
- $xml->load(dirname(__FILE__)."/xslt011.xml");
- $proc->registerPHPFunctions();
- print $proc->transformToXml($xml);
-
- function foobar($id, $secondArg = "" ) {
- if (is_array($id)) {
- return $id[0]->value . " - " . $secondArg;
- } else {
- return $id . " - " . $secondArg;
- }
- }
- function nodeSet($id = null) {
- if ($id and is_array($id)) {
- return $id[0];
- } else {
- $dom = new domdocument;
- $dom->loadXML("<root>this is from an external DomDocument</root>");
- return $dom->documentElement;
- }
- }
- function nonDomNode() {
- return new foo();
- }
-
- class aClass {
- static function aStaticFunction($id) {
- return $id;
- }
- }
-
---EXPECTF--
-Test 11: php:function Support
-
-Warning: XSLTProcessor::transformToXml(): A PHP Object can not be converted to a XPath-string in %s on line 16
-<?xml version="1.0"?>
-foobar - secondArg
-foobar -
-this is from an external DomDocument
-from the Input Document
-static
-
diff --git a/ext/xsl/tests/xslt011.xml b/ext/xsl/tests/xslt011.xml
deleted file mode 100644
index f40500b0f5..0000000000
--- a/ext/xsl/tests/xslt011.xml
+++ /dev/null
@@ -1 +0,0 @@
-<doc id="foobar">This is <i>from the Input Document</i></doc>
diff --git a/ext/xsl/tests/xslt011.xsl b/ext/xsl/tests/xslt011.xsl
deleted file mode 100644
index e1960e57d3..0000000000
--- a/ext/xsl/tests/xslt011.xsl
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version='1.0'?>
-<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
- xmlns:php="http://php.net/xsl"
- xsl:extension-element-prefixes="php"
- version='1.0'>
-<xsl:template match="/">
-<xsl:value-of select="php:functionString('foobar', /doc/@id, 'secondArg')"/>
-<xsl:text>
-</xsl:text>
-<xsl:value-of select="php:function('foobar', /doc/@id)"/>
-<xsl:text>
-</xsl:text>
-<xsl:value-of select="php:function('nodeSet')"/>
-<xsl:text>
-</xsl:text>
-<xsl:value-of select="php:function('nodeSet',/doc)/i"/>
-<xsl:text>
-</xsl:text>
-<xsl:value-of select="php:function('aClass::aStaticFunction','static')"/>
-<xsl:text>
-</xsl:text>
-
-<xsl:value-of select="php:function('nonDomNode')"/>
-</xsl:template>
-</xsl:stylesheet>
diff --git a/ext/xsl/tests/xslt012.phpt b/ext/xsl/tests/xslt012.phpt
deleted file mode 100644
index 60387af4ce..0000000000
--- a/ext/xsl/tests/xslt012.phpt
+++ /dev/null
@@ -1,52 +0,0 @@
---TEST--
-Test 12: Using Associative Array of Parameters
---SKIPIF--
-<?php require_once('skipif.inc'); ?>
---FILE--
-<?php
-echo "Test 12: Using Associative Array of Parameters";
-
-$dom = new domDocument;
-$dom->load(dirname(__FILE__)."/xslt.xml");
-if(!$dom) {
- echo "Error while parsing the document\n";
- exit;
-}
-
-$xsl = new domDocument;
-$xsl->load(dirname(__FILE__)."/xslt012.xsl");
-if(!$xsl) {
- echo "Error while parsing the document\n";
- exit;
-}
-
-$proc = new xsltprocessor;
-if(!$proc) {
- echo "Error while making xsltprocessor object\n";
- exit;
-}
-
-
-$proc->importStylesheet($xsl);
-
-$parameters = Array(
- 'foo' => 'barbar',
- 'foo1' => 'test',
- );
-
-$proc->setParameter( "", $parameters);
-
-print "\n";
-print $proc->transformToXml($dom);
-print "\n";
-
-
---EXPECT--
-Test 12: Using Associative Array of Parameters
-<?xml version="1.0" encoding="iso-8859-1"?>
-<html><body>barbar
-test
-a1 b1 c1 <br/>
-a2 c2 <br/>
-ä3 b3 c3 <br/>
-</body></html>
diff --git a/ext/xsl/tests/xslt012.xsl b/ext/xsl/tests/xslt012.xsl
deleted file mode 100644
index 27f413855f..0000000000
--- a/ext/xsl/tests/xslt012.xsl
+++ /dev/null
@@ -1,29 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-<!-- $Id: xslt012.xsl,v 1.1 2004-08-05 13:31:17 tony2001 Exp $ -->
-<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" >
-
- <xsl:output method="xml" encoding="iso-8859-1" indent="no"/>
- <xsl:param name="foo" select="'bar'"/>
- <xsl:param name="foo1" select="'bar1'"/>
- <xsl:template match="/">
- <html>
- <body>
- <xsl:value-of select="$foo"/><xsl:text>
-</xsl:text>
- <xsl:value-of select="$foo1"/><xsl:text>
-</xsl:text>
- <xsl:apply-templates select="/chapter/para/informaltable/tgroup/tbody/row"/>
- </body>
- </html>
- </xsl:template>
-
- <xsl:template match="row">
- <xsl:for-each select="entry">
- <xsl:value-of select="."/>
- <xsl:text> </xsl:text>
- </xsl:for-each>
- <br/> <xsl:text>
-</xsl:text>
-
- </xsl:template>
-</xsl:stylesheet>
diff --git a/ext/xsl/xsl.dsp b/ext/xsl/xsl.dsp
deleted file mode 100644
index ff7257d161..0000000000
--- a/ext/xsl/xsl.dsp
+++ /dev/null
@@ -1,120 +0,0 @@
-# Microsoft Developer Studio Project File - Name="xsl" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=xsl - Win32 Debug_TS
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "xsl.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "xsl.mak" CFG="xsl - Win32 Debug_TS"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "xsl - Win32 Release_TS" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "xsl - Win32 Debug_TS" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "xsl - Win32 Release_TS"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release_TS"
-# PROP BASE Intermediate_Dir "Release_TS"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release_TS"
-# PROP Intermediate_Dir "Release_TS"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "XSL_EXPORTS" /YX /FD /c
-# ADD CPP /nologo /MD /W3 /GX /O2 /I "..\.." /I "..\..\Zend" /I "..\..\TSRM" /I "..\..\main" /D ZEND_DEBUG=0 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "COMPILE_DL_XSL" /D ZTS=1 /D "ZEND_WIN32" /D "PHP_WIN32" /D "LIBXSLT_STATIC" /D "LIBEXSLT_STATIC" /D "LIBXML_THREAD_ENABLED" /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386
-# ADD LINK32 wsock32.lib php5ts.lib libxslt_a.lib libexslt_a.lib resolv.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /dll /machine:I386 /out:"..\..\Release_TS/php_xsl.dll" /implib:".Release_TS/php_xsl.lib" /libpath:"..\..\Release_TS" /libpath:"..\..\Release_TS_Inline" /libpath:"..\..\..\bindlib_w32\Release"
-# SUBTRACT LINK32 /pdb:none
-
-!ELSEIF "$(CFG)" == "xsl - Win32 Debug_TS"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug_TS"
-# PROP BASE Intermediate_Dir "Debug_TS"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug_TS"
-# PROP Intermediate_Dir "Debug_TS"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "XSL_EXPORTS" /YX /FD /GZ /c
-# ADD CPP /nologo /MDd /W3 /GX /ZI /Od /I "..\.." /I "..\..\Zend" /I "..\..\TSRM" /I "..\..\main" /D ZEND_DEBUG=1 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "XSL_EXPORTS" /D "COMPILE_DL_XSL" /D ZTS=1 /D "ZEND_WIN32" /D "PHP_WIN32" /D "LIBXSLT_STATIC" /D "LIBEXSLT_STATIC" /D "LIBXML_THREAD_ENABLED" /FR /YX /FD /c
-# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x406 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 php5ts_debug.lib libxslt_a.lib libexslt_a.lib resolv.lib kernel32.lib user32.lib gdi32.lib winspool.lib /nologo /dll /debug /machine:I386 /nodefaultlib:"msvcrt" /out:"..\..\Debug_TS/php_xsl.dll" /libpath:"..\..\Debug_TS" /libpath:"..\..\..\bindlib_w32\Release" /libpath:"..\..\..\php_build\lib\libxslt"
-
-!ENDIF
-
-# Begin Target
-
-# Name "xsl - Win32 Release_TS"
-# Name "xsl - Win32 Debug_TS"
-# Begin Group "Source Files"
-
-# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
-# Begin Source File
-
-SOURCE=.\php_xsl.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\xsltprocessor.c
-# End Source File
-# End Group
-# Begin Group "Header Files"
-
-# PROP Default_Filter "h;hpp;hxx;hm;inl"
-# Begin Source File
-
-SOURCE=.\php_xsl.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\xsl_fe.h
-# End Source File
-# End Group
-# Begin Group "Resource Files"
-
-# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
-# End Group
-# End Target
-# End Project
diff --git a/ext/xsl/xsl_fe.h b/ext/xsl/xsl_fe.h
deleted file mode 100644
index d0c673271a..0000000000
--- a/ext/xsl/xsl_fe.h
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Christian Stocker <chregu@php.net> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifndef XSL_FE_H
-#define XSL_FE_H
-
-extern zend_function_entry php_xsl_xsltprocessor_class_functions[];
-zend_class_entry *xsl_xsltprocessor_class_entry;
-
-PHP_FUNCTION(xsl_xsltprocessor_import_stylesheet);
-PHP_FUNCTION(xsl_xsltprocessor_transform_to_doc);
-PHP_FUNCTION(xsl_xsltprocessor_transform_to_uri);
-PHP_FUNCTION(xsl_xsltprocessor_transform_to_xml);
-PHP_FUNCTION(xsl_xsltprocessor_set_parameter);
-PHP_FUNCTION(xsl_xsltprocessor_get_parameter);
-PHP_FUNCTION(xsl_xsltprocessor_remove_parameter);
-PHP_FUNCTION(xsl_xsltprocessor_has_exslt_support);
-PHP_FUNCTION(xsl_xsltprocessor_register_php_functions);
-#endif
diff --git a/ext/xsl/xsltprocessor.c b/ext/xsl/xsltprocessor.c
deleted file mode 100644
index 1ed075a370..0000000000
--- a/ext/xsl/xsltprocessor.c
+++ /dev/null
@@ -1,719 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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. |
- +----------------------------------------------------------------------+
- | Authors: Christian Stocker <chregu@php.net> |
- | Rob Richards <rrichards@php.net> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "php.h"
-#include "php_xsl.h"
-#include "ext/libxml/php_libxml.h"
-
-static void xsl_ext_function_string_php(xmlXPathParserContextPtr ctxt, int nargs);
-static void xsl_ext_function_object_php(xmlXPathParserContextPtr ctxt, int nargs);
-
-/*
-* class xsl_xsltprocessor
-*
-* URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#
-* Since:
-*/
-
-zend_function_entry php_xsl_xsltprocessor_class_functions[] = {
- PHP_FALIAS(importStylesheet, xsl_xsltprocessor_import_stylesheet, NULL)
- PHP_FALIAS(transformToDoc, xsl_xsltprocessor_transform_to_doc, NULL)
- PHP_FALIAS(transformToUri, xsl_xsltprocessor_transform_to_uri, NULL)
- PHP_FALIAS(transformToXml, xsl_xsltprocessor_transform_to_xml, NULL)
- PHP_FALIAS(setParameter, xsl_xsltprocessor_set_parameter, NULL)
- PHP_FALIAS(getParameter, xsl_xsltprocessor_get_parameter, NULL)
- PHP_FALIAS(removeParameter, xsl_xsltprocessor_remove_parameter, NULL)
- PHP_FALIAS(hasExsltSupport, xsl_xsltprocessor_has_exslt_support, NULL)
- PHP_FALIAS(registerPHPFunctions, xsl_xsltprocessor_register_php_functions, NULL)
- {NULL, NULL, NULL}
-};
-
-/* {{{ attribute protos, not implemented yet */
-/* {{{ php_xsl_xslt_string_to_xpathexpr()
- Translates a string to a XPath Expression */
-static char *php_xsl_xslt_string_to_xpathexpr(const char *str TSRMLS_DC)
-{
- const xmlChar *string = (const xmlChar *)str;
-
- xmlChar *value;
- int str_len;
-
- str_len = xmlStrlen(string) + 3;
-
- if (xmlStrchr(string, '"')) {
- if (xmlStrchr(string, '\'')) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Cannot create XPath expression (string contains both quote and double-quotes)");
- return NULL;
- }
- value = (xmlChar*) safe_emalloc (str_len, sizeof(xmlChar), 0);
- snprintf(value, str_len, "'%s'", string);
- } else {
- value = (xmlChar*) safe_emalloc (str_len, sizeof(xmlChar), 0);
- snprintf(value, str_len, "\"%s\"", string);
- }
- return (char *) value;
-}
-
-static void php_xsl_unregister_php_functions() {
- xsltUnregisterExtModuleFunction ((const xmlChar *) "functionString",
- (const xmlChar *) "http://php.net/xsl");
- xsltUnregisterExtModuleFunction ((const xmlChar *) "function",
- (const xmlChar *) "http://php.net/xsl");
-}
-
-
-/* {{{ php_xsl_xslt_make_params()
- Translates a PHP array to a libxslt parameters array */
-static char **php_xsl_xslt_make_params(HashTable *parht, int xpath_params TSRMLS_DC)
-{
-
- int parsize;
- zval **value;
- char *xpath_expr, *string_key = NULL;
- ulong num_key;
- char **params = NULL;
- int i = 0;
-
- parsize = (2 * zend_hash_num_elements(parht) + 1) * sizeof(char *);
- params = (char **)emalloc(parsize);
- memset((char *)params, 0, parsize);
-
- for (zend_hash_internal_pointer_reset(parht);
- zend_hash_get_current_data(parht, (void **)&value) == SUCCESS;
- zend_hash_move_forward(parht)) {
-
- if (zend_hash_get_current_key(parht, &string_key, &num_key, 1) != HASH_KEY_IS_STRING) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid argument or parameter array");
- efree(params);
- return NULL;
- } else {
- if (Z_TYPE_PP(value) != IS_STRING) {
- SEPARATE_ZVAL(value);
- convert_to_string(*value);
- }
-
- if (!xpath_params) {
- xpath_expr = php_xsl_xslt_string_to_xpathexpr(Z_STRVAL_PP(value) TSRMLS_CC);
- } else {
- xpath_expr = estrndup(Z_STRVAL_PP(value), strlen(Z_STRVAL_PP(value)));
- }
- if (xpath_expr) {
- params[i++] = string_key;
- params[i++] = xpath_expr;
- }
- }
- }
-
- params[i++] = NULL;
-
- return params;
-}
-/* }}} */
-
-
-static void xsl_ext_function_php(xmlXPathParserContextPtr ctxt, int nargs, int type)
-{
- xsltTransformContextPtr tctxt;
- zval **args;
- zval *retval;
- int result, i, ret;
- zend_fcall_info fci;
- zval handler;
- xmlXPathObjectPtr obj;
- char *str;
- char *callable = NULL;
- xsl_object *intern;
-
- TSRMLS_FETCH();
-
- tctxt = xsltXPathGetTransformContext(ctxt);
- if (tctxt == NULL) {
- xsltGenericError(xsltGenericErrorContext,
- "xsltExtFunctionTest: failed to get the transformation context\n");
- return;
- }
-
- fci.param_count = nargs - 1;
- if (fci.param_count > 0) {
- fci.params = safe_emalloc(fci.param_count, sizeof(zval**), 0);
- args = safe_emalloc(fci.param_count, sizeof(zval *), 0);
- }
- /* Reverse order to pop values off ctxt stack */
- for (i = nargs - 2; i >= 0; i--) {
- obj = valuePop(ctxt);
- MAKE_STD_ZVAL(args[i]);
- switch (obj->type) {
- case XPATH_STRING:
- ZVAL_STRING(args[i], obj->stringval, 1);
- break;
- case XPATH_BOOLEAN:
- ZVAL_BOOL(args[i], obj->boolval);
- break;
- case XPATH_NUMBER:
- ZVAL_DOUBLE(args[i], obj->floatval);
- break;
- case XPATH_NODESET:
- if (type == 1) {
- str = xmlXPathCastToString(obj);
- ZVAL_STRING(args[i], str, 1);
- xmlFree(str);
- } else if (type == 2) {
- int j;
- dom_object *intern;
- array_init(args[i]);
- if (obj->nodesetval->nodeNr > 0) {
- intern = (dom_object *) php_dom_object_get_data((void *) obj->nodesetval->nodeTab[0]->doc);
- for (j = 0; j < obj->nodesetval->nodeNr; j++) {
- xmlNodePtr node = obj->nodesetval->nodeTab[j];
- zval *child;
-
- MAKE_STD_ZVAL(child);
- /* not sure, if we need this... it's copied from xpath.c */
- if (node->type == XML_NAMESPACE_DECL) {
- xmlNsPtr curns;
- xmlNodePtr nsparent;
-
- nsparent = node->_private;
- curns = xmlNewNs(NULL, node->name, NULL);
- if (node->children) {
- curns->prefix = xmlStrdup((char *) node->children);
- }
- if (node->children) {
- node = xmlNewDocNode(node->doc, NULL, (char *) node->children, node->name);
- } else {
- node = xmlNewDocNode(node->doc, NULL, "xmlns", node->name);
- }
- node->type = XML_NAMESPACE_DECL;
- node->parent = nsparent;
- node->ns = curns;
- }
- child = php_dom_create_object(node, &ret, NULL, child, intern TSRMLS_CC);
- add_next_index_zval(args[i], child);
- }
- }
- }
- break;
- default:
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "php:function object type %d is not supported yet", obj->type);
- ZVAL_STRING(args[i], "", 0);
- }
- xmlXPathFreeObject(obj);
- fci.params[i] = &args[i];
- }
-
- fci.size = sizeof(fci);
- fci.function_table = EG(function_table);
-
- obj = valuePop(ctxt);
- if (obj->stringval == NULL) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Handler name must be a string");
- xmlXPathFreeObject(obj);
- if (fci.param_count > 0) {
- for (i = 0; i < nargs - 1; i++) {
- zval_ptr_dtor(&args[i]);
- }
- efree(args);
- efree(fci.params);
- }
- return;
- }
- INIT_PZVAL(&handler);
- ZVAL_STRING(&handler, obj->stringval, 1);
- xmlXPathFreeObject(obj);
-
- fci.function_name = &handler;
- fci.symbol_table = NULL;
- fci.object_pp = NULL;
- fci.retval_ptr_ptr = &retval;
- fci.no_separation = 0;
- /*fci.function_handler_cache = &function_ptr;*/
- if (!zend_make_callable(&handler, &callable TSRMLS_CC)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to call handler %s()", callable);
-
- } else {
- result = zend_call_function(&fci, NULL TSRMLS_CC);
- if (result == FAILURE) {
- if (Z_TYPE(handler) == IS_STRING) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to call handler %s()", Z_STRVAL_P(&handler));
- }
- /* retval is == NULL, when an exception occured, don't report anything, because PHP itself will handle that */
- } else if (retval == NULL) {
- } else {
- if (retval->type == IS_OBJECT && instanceof_function( Z_OBJCE_P(retval), dom_node_class_entry TSRMLS_CC)) {
- xmlNode *nodep;
- dom_object *obj;
- intern = (xsl_object *) tctxt->_private;
- if (intern->node_list == NULL) {
- ALLOC_HASHTABLE(intern->node_list);
- zend_hash_init(intern->node_list, 0, NULL, ZVAL_PTR_DTOR, 0);
- }
- zval_add_ref(&retval);
- zend_hash_next_index_insert(intern->node_list, &retval, sizeof(zval *), NULL);
- obj = (dom_object *)zend_object_store_get_object(retval TSRMLS_CC);
- nodep = dom_object_get_node(obj);
- valuePush(ctxt, xmlXPathNewNodeSet(nodep));
- } else if (retval->type == IS_BOOL) {
- valuePush(ctxt, xmlXPathNewBoolean(retval->value.lval));
- } else if (retval->type == IS_OBJECT) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "A PHP Object can not be converted to a XPath-string");
- valuePush(ctxt, xmlXPathNewString(""));
- } else {
- convert_to_string_ex(&retval);
- valuePush(ctxt, xmlXPathNewString( Z_STRVAL_P(retval)));
- }
- zval_ptr_dtor(&retval);
- }
- }
- efree(callable);
- zval_dtor(&handler);
- if (fci.param_count > 0) {
- for (i = 0; i < nargs - 1; i++) {
- zval_ptr_dtor(&args[i]);
- }
- efree(args);
- efree(fci.params);
- }
-}
-
-static void xsl_ext_function_string_php(xmlXPathParserContextPtr ctxt, int nargs)
-{
- xsl_ext_function_php(ctxt, nargs, 1);
-}
-
-static void xsl_ext_function_object_php(xmlXPathParserContextPtr ctxt, int nargs)
-{
- xsl_ext_function_php(ctxt, nargs, 2);
-}
-
-
-/* {{{ proto xsl_xsltdocucument xsl_xsltprocessor_import_stylesheet(node index);
-URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#
-Since:
-*/
-PHP_FUNCTION(xsl_xsltprocessor_import_stylesheet)
-{
- zval *id, *docp = NULL;
- xmlDoc *doc = NULL, *newdoc = NULL;
- xsltStylesheetPtr sheetp, oldsheetp;
- xsl_object *intern;
- int prevSubstValue, prevExtDtdValue, clone_docu = 0;
- xmlNode *nodep = NULL;
- zend_object_handlers *std_hnd;
- zval *cloneDocu, *member;
-
- if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Oo", &id, xsl_xsltprocessor_class_entry, &docp) == FAILURE) {
- RETURN_FALSE;
- }
-
- nodep = php_libxml_import_node(docp TSRMLS_CC);
-
- if (nodep) {
- doc = nodep->doc;
- }
- if (doc == NULL) {
- php_error(E_WARNING, "Invalid Document");
- RETURN_NULL();
- }
-
- /* libxslt uses _private, so we must copy the imported
- stylesheet document otherwise the node proxies will be a mess */
- newdoc = xmlCopyDoc(doc, 1);
- xmlNodeSetBase((xmlNodePtr) newdoc, (xmlChar *)doc->URL);
- prevSubstValue = xmlSubstituteEntitiesDefault(1);
- prevExtDtdValue = xmlLoadExtDtdDefaultValue;
- xmlLoadExtDtdDefaultValue = XML_DETECT_IDS | XML_COMPLETE_ATTRS;
-
- sheetp = xsltParseStylesheetDoc(newdoc);
- xmlSubstituteEntitiesDefault(prevSubstValue);
- xmlLoadExtDtdDefaultValue = prevExtDtdValue;
-
- if (!sheetp) {
- xmlFreeDoc(newdoc);
- RETURN_FALSE;
- }
-
- intern = (xsl_object *)zend_object_store_get_object(id TSRMLS_CC);
-
- std_hnd = zend_get_std_object_handlers();
- MAKE_STD_ZVAL(member);
- ZVAL_STRING(member, "cloneDocument", 0);
- cloneDocu = std_hnd->read_property(id, member, BP_VAR_IS TSRMLS_CC);
- if (Z_TYPE_P(cloneDocu) != IS_NULL) {
- convert_to_long(cloneDocu);
- clone_docu = Z_LVAL_P(cloneDocu);
- }
- efree(member);
- if (clone_docu == 0) {
- /* check if the stylesheet is using xsl:key, if yes, we have to clone the document _always_ before a transformation */
- nodep = xmlDocGetRootElement(sheetp->doc)->children;
- while (nodep) {
- if (nodep->type == XML_ELEMENT_NODE && xmlStrEqual(nodep->name, "key") && xmlStrEqual(nodep->ns->href, XSLT_NAMESPACE)) {
- intern->hasKeys = 1;
- break;
- }
- nodep = nodep->next;
- }
- } else {
- intern->hasKeys = clone_docu;
- }
-
- if ((oldsheetp = (xsltStylesheetPtr)intern->ptr)) {
- /* free wrapper */
- if (((xsltStylesheetPtr) intern->ptr)->_private != NULL) {
- ((xsltStylesheetPtr) intern->ptr)->_private = NULL;
- }
- xsltFreeStylesheet((xsltStylesheetPtr) intern->ptr);
- intern->ptr = NULL;
- }
-
- php_xsl_set_object(id, sheetp TSRMLS_CC);
-}
-/* }}} end xsl_xsltprocessor_import_stylesheet */
-
-
-static xmlDocPtr php_xsl_apply_stylesheet(xsl_object *intern, xsltStylesheetPtr style, xmlDocPtr doc TSRMLS_DC)
-{
- xmlDocPtr newdocp;
- xsltTransformContextPtr ctxt;
- char **params = NULL;
- int clone;
-
- if (style == NULL) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "No stylesheet associated to this object");
- return NULL;
- }
- if (intern->parameter) {
- params = php_xsl_xslt_make_params(intern->parameter, 0 TSRMLS_CC);
- }
-
- if (intern->hasKeys == 1) {
- doc = xmlCopyDoc(doc, 1);
- }
-
- ctxt = xsltNewTransformContext(style, doc);
- ctxt->_private = (void *) intern;
-
- newdocp = xsltApplyStylesheetUser(style, doc, (const char**) params, NULL, NULL, ctxt);
-
- xsltFreeTransformContext(ctxt);
-
- if (intern->node_list != NULL) {
- zend_hash_destroy(intern->node_list);
- FREE_HASHTABLE(intern->node_list);
- intern->node_list = NULL;
- }
-
- if (intern->registerPhpFunctions == 1) {
- php_xsl_unregister_php_functions();
- }
-
- if (intern->hasKeys == 1) {
- xmlFreeDoc(doc);
- }
-
- if (params) {
- clone = 0;
- while(params[clone]) {
- efree(params[clone++]);
- }
- efree(params);
- }
-
- return newdocp;
-
-}
-
-/* {{{ proto xsl_document xsl_xsltprocessor_transform_to_doc(node doc [,boolean clone]);
-URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#
-Since:
-*/
-PHP_FUNCTION(xsl_xsltprocessor_transform_to_doc)
-{
- zval *id, *rv = NULL, *docp = NULL;
- xmlDoc *doc = NULL;
- xmlNodePtr node = NULL;
- xmlDoc *newdocp;
- xsltStylesheetPtr sheetp;
- int ret;
- xsl_object *intern;
-
- id = getThis();
- intern = (xsl_object *)zend_object_store_get_object(id TSRMLS_CC);
- sheetp = (xsltStylesheetPtr) intern->ptr;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "o", &docp) == FAILURE) {
- RETURN_FALSE;
- }
-
- node = php_libxml_import_node(docp TSRMLS_CC);
-
- if (node) {
- doc = node->doc;
- }
- if (doc == NULL) {
- php_error(E_WARNING, "Invalid Document");
- RETURN_NULL();
- }
-
- newdocp = php_xsl_apply_stylesheet(intern, sheetp, doc TSRMLS_CC);
-
- if (newdocp) {
- DOM_RET_OBJ(rv, (xmlNodePtr) newdocp, &ret, NULL);
- } else {
- RETURN_FALSE;
- }
-
-}
-/* }}} end xsl_xsltprocessor_transform_to_doc */
-
-
-/* {{{ proto xsl_ xsl_xsltprocessor_transform_to_uri(node doc, string uri [,boolean clone]);
-*/
-PHP_FUNCTION(xsl_xsltprocessor_transform_to_uri)
-{
- zval *id, *docp = NULL;
- xmlDoc *doc = NULL;
- xmlDoc *newdocp;
- xmlNodePtr node = NULL;
- xsltStylesheetPtr sheetp;
- int ret, uri_len;
- char *uri;
- xsl_object *intern;
-
- id = getThis();
- intern = (xsl_object *)zend_object_store_get_object(id TSRMLS_CC);
- sheetp = (xsltStylesheetPtr) intern->ptr;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "os", &docp, &uri, &uri_len) == FAILURE) {
- RETURN_FALSE;
- }
-
- node = php_libxml_import_node(docp TSRMLS_CC);
-
- if (node) {
- doc = node->doc;
- }
- if (doc == NULL) {
- php_error(E_WARNING, "Invalid Document");
- RETURN_NULL();
- }
-
- newdocp = php_xsl_apply_stylesheet(intern, sheetp, doc TSRMLS_CC);
-
- ret = -1;
- if (newdocp) {
- ret = xsltSaveResultToFilename(uri, newdocp, sheetp, 0);
- xmlFreeDoc(newdocp);
- }
-
- RETVAL_LONG(ret);
-}
-/* }}} end xsl_xsltprocessor_transform_to_uri */
-
-
-/* {{{ proto xsl_string xsl_xsltprocessor_transform_to_xml(node doc [,boolean clone]);
-*/
-PHP_FUNCTION(xsl_xsltprocessor_transform_to_xml)
-{
- zval *id, *docp = NULL;
- xmlDoc *doc = NULL;
- xmlDoc *newdocp;
- xmlNodePtr node = NULL;
- xsltStylesheetPtr sheetp;
- int ret;
- xmlChar *doc_txt_ptr;
- int doc_txt_len;
- xsl_object *intern;
-
- id = getThis();
- intern = (xsl_object *)zend_object_store_get_object(id TSRMLS_CC);
- sheetp = (xsltStylesheetPtr) intern->ptr;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "o", &docp) == FAILURE) {
- RETURN_FALSE;
- }
-
- node = php_libxml_import_node(docp TSRMLS_CC);
-
- if (node) {
- doc = node->doc;
- }
- if (doc == NULL) {
- php_error(E_WARNING, "Invalid Document");
- RETURN_NULL();
- }
-
- newdocp = php_xsl_apply_stylesheet(intern, sheetp, doc TSRMLS_CC);
-
- ret = -1;
- if (newdocp) {
- ret = xsltSaveResultToString(&doc_txt_ptr, &doc_txt_len, newdocp, sheetp);
- if (doc_txt_ptr) {
- RETVAL_STRINGL(doc_txt_ptr, doc_txt_len, 1);
- xmlFree(doc_txt_ptr);
- }
- xmlFreeDoc(newdocp);
- }
-
- if (ret < 0) {
- RETURN_FALSE;
- }
-}
-/* }}} end xsl_xsltprocessor_transform_to_xml */
-
-
-/* {{{ proto xsl_ xsl_xsltprocessor_set_parameter(string namespace, mixed name [, string value]);
-*/
-PHP_FUNCTION(xsl_xsltprocessor_set_parameter)
-{
-
- zval *id;
- zval *array_value, **entry, *new_string;
- xsl_object *intern;
- char *string_key, *name, *value, *namespace;
- ulong idx;
- int string_key_len, namespace_len, name_len, value_len;
- DOM_GET_THIS(id);
-
- if (zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, ZEND_NUM_ARGS() TSRMLS_CC, "sa", &namespace, &namespace_len, &array_value) == SUCCESS) {
- intern = (xsl_object *)zend_object_store_get_object(id TSRMLS_CC);
- zend_hash_internal_pointer_reset(Z_ARRVAL_P(array_value));
-
- while (zend_hash_get_current_data(Z_ARRVAL_P(array_value), (void **)&entry) == SUCCESS) {
- SEPARATE_ZVAL(entry);
- convert_to_string_ex(entry);
-
- if (zend_hash_get_current_key_ex(Z_ARRVAL_P(array_value), &string_key, &string_key_len, &idx, 0, NULL) != HASH_KEY_IS_STRING) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid parameter array");
- RETURN_FALSE;
- }
-
- ALLOC_ZVAL(new_string);
- ZVAL_ADDREF(*entry);
- COPY_PZVAL_TO_ZVAL(*new_string, *entry);
-
- zend_hash_update(intern->parameter, string_key, string_key_len + 1, &new_string, sizeof(zval*), NULL);
- zend_hash_move_forward(Z_ARRVAL_P(array_value));
- }
- RETURN_TRUE;
-
- } else if (zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, ZEND_NUM_ARGS() TSRMLS_CC, "sss", &namespace, &namespace_len, &name, &name_len, &value, &value_len) == SUCCESS) {
-
- intern = (xsl_object *)zend_object_store_get_object(id TSRMLS_CC);
-
- MAKE_STD_ZVAL(new_string);
- ZVAL_STRING(new_string, value, 1);
-
- zend_hash_update(intern->parameter, name, name_len + 1, &new_string, sizeof(zval*), NULL);
- RETURN_TRUE;
- } else {
- WRONG_PARAM_COUNT;
- }
-
-}
-/* }}} end xsl_xsltprocessor_set_parameter */
-
-/* {{{ proto xsl_ xsl_xsltprocessor_get_parameter(string namespace, string name);
-*/
-PHP_FUNCTION(xsl_xsltprocessor_get_parameter)
-{
- zval *id;
- int name_len = 0, namespace_len = 0;
- char *name, *namespace;
- zval **value;
- xsl_object *intern;
-
- DOM_GET_THIS(id);
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ss", &namespace, &namespace_len, &name, &name_len) == FAILURE) {
- RETURN_FALSE;
- }
- intern = (xsl_object *)zend_object_store_get_object(id TSRMLS_CC);
- if ( zend_hash_find(intern->parameter, name, name_len + 1, (void**) &value) == SUCCESS) {
- convert_to_string_ex(value);
- RETVAL_STRING(Z_STRVAL_PP(value),1);
- } else {
- RETURN_FALSE;
- }
-}
-/* }}} end xsl_xsltprocessor_get_parameter */
-
-/* {{{ proto xsl_ xsl_xsltprocessor_remove_parameter(string namespace, string name);
-*/
-PHP_FUNCTION(xsl_xsltprocessor_remove_parameter)
-{
- zval *id;
- int name_len = 0, namespace_len = 0;
- char *name, *namespace;
- xsl_object *intern;
-
- DOM_GET_THIS(id);
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ss", &namespace, &namespace_len, &name, &name_len) == FAILURE) {
- RETURN_FALSE;
- }
- intern = (xsl_object *)zend_object_store_get_object(id TSRMLS_CC);
- if ( zend_hash_del(intern->parameter, name, name_len + 1) == SUCCESS) {
- RETURN_TRUE;
- } else {
- RETURN_FALSE;
- }
-}
-/* }}} end xsl_xsltprocessor_remove_parameter */
-
-/* {{{ proto xsl_xsltprocessor_register_php_functions();
-*/
-PHP_FUNCTION(xsl_xsltprocessor_register_php_functions)
-{
- zval *id;
- xsl_object *intern;
-
- DOM_GET_THIS(id);
-
-
- intern = (xsl_object *)zend_object_store_get_object(id TSRMLS_CC);
- intern->registerPhpFunctions = 1;
-
- xsltRegisterExtModuleFunction ((const xmlChar *) "functionString",
- (const xmlChar *) "http://php.net/xsl",
- xsl_ext_function_string_php);
- xsltRegisterExtModuleFunction ((const xmlChar *) "function",
- (const xmlChar *) "http://php.net/xsl",
- xsl_ext_function_object_php);
-}
-/* }}} end xsl_xsltprocessor_register_php_functions(); */
-
-/* {{{ proto xsl_xsltprocessor_has_exslt_support();
-*/
-PHP_FUNCTION(xsl_xsltprocessor_has_exslt_support)
-{
-#if HAVE_XSL_EXSLT
- RETURN_TRUE;
-#else
- RETURN_FALSE;
-#endif
-}
-/* }}} end xsl_xsltprocessor_has_exslt_support(); */
-
diff --git a/ext/yp/CREDITS b/ext/yp/CREDITS
deleted file mode 100644
index 4c52145877..0000000000
--- a/ext/yp/CREDITS
+++ /dev/null
@@ -1,2 +0,0 @@
-Yellow Pages
-Stephanie Wehner, Fredrik Ohrn
diff --git a/ext/yp/config.m4 b/ext/yp/config.m4
deleted file mode 100644
index 3bdc76552b..0000000000
--- a/ext/yp/config.m4
+++ /dev/null
@@ -1,38 +0,0 @@
-dnl
-dnl $Id$
-dnl
-
-PHP_ARG_ENABLE(yp,whether to include YP support,
-[ --enable-yp Include YP support.])
-
-if test "$PHP_YP" != "no"; then
-
- AC_CHECK_LIB(nsl, yp_match, [
- YP_LIBS=nsl
- YP_CHECK_IN_LIB=nsl
- ],
- AC_CHECK_LIB(c, yp_match, [
- YP_LIBS=
- YP_CHECK_IN_LIB=c
- ],[
- AC_MSG_ERROR(Unable to find required yp/nis library)
- ])
- )
-
-
- AC_DEFINE(HAVE_YP,1,[ ])
- PHP_NEW_EXTENSION(yp, yp.c, $ext_shared)
-
- PHP_SUBST(YP_SHARED_LIBADD)
-
- if test -n "$YP_LIBS"; then
- PHP_ADD_LIBRARY_WITH_PATH($YP_LIBS, $YP_LIBDIR, YP_SHARED_LIBADD)
- fi
-
-
-
- case $host_alias in
- *solaris*)
- AC_DEFINE(SOLARIS_YP,1,[ ]) ;;
- esac
-fi
diff --git a/ext/yp/package.xml b/ext/yp/package.xml
deleted file mode 100644
index 12ebf916e2..0000000000
--- a/ext/yp/package.xml
+++ /dev/null
@@ -1,46 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1" ?>
-<!DOCTYPE package SYSTEM "../pear/package.dtd">
-<package>
- <name>yp</name>
- <summary>YP/NIS functions</summary>
- <maintainers>
- <maintainer>
- <user>???</user>
- <name>Stephanie Wehner</name>
- <email>_@r4k.net</email>
- <role>lead</role>
- </maintainer>
- <maintainer>
- <user>???</user>
- <name>Fredrik Ohrn</name>
- <email>???@php.net</email>
- <role>lead</role>
- </maintainer>
- </maintainers>
- <description>
-NIS (formerly called Yellow Pages) allows network management
-of important administrative files (e.g. the password file).
- </description>
- <license>PHP</license>
- <release>
- <state>beta</state>
- <version>5.0.0rc1</version>
- <date>2004-03-19</date>
- <notes>
-package.xml added to support intallation using pear installer
- </notes>
- <filelist>
- <file role="doc" name="CREDITS"/>
- <file role="src" name="config.m4"/>
- <file role="src" name="yp.c"/>
- <file role="src" name="php_yp.h"/>
- </filelist>
- <deps>
- <dep type="php" rel="ge" version="5" />
- <!-- doesn't work yet <dep type="os" rel="has" name="unix"/> -->
- </deps>
- </release>
-</package>
-<!--
-vim:et:ts=1:sw=1
--->
diff --git a/ext/yp/php_yp.h b/ext/yp/php_yp.h
deleted file mode 100644
index 5dffae8cec..0000000000
--- a/ext/yp/php_yp.h
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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. |
- +----------------------------------------------------------------------+
- | Authors: Stephanie Wehner <_@r4k.net> |
- | Fredrik Ohrn |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifndef PHP_YP_H
-#define PHP_YP_H
-
-#if HAVE_YP
-
-#ifdef PHP_WIN32
-#define PHP_YP_API __declspec(dllexport)
-#else
-#define PHP_YP_API
-#endif
-
-extern zend_module_entry yp_module_entry;
-#define yp_module_ptr &yp_module_entry
-
-/* yp.c functions */
-PHP_FUNCTION(yp_get_default_domain);
-PHP_FUNCTION(yp_order);
-PHP_FUNCTION(yp_master);
-PHP_FUNCTION(yp_match);
-PHP_FUNCTION(yp_first);
-PHP_FUNCTION(yp_next);
-PHP_FUNCTION(yp_all);
-PHP_FUNCTION(yp_cat);
-PHP_FUNCTION(yp_errno);
-PHP_FUNCTION(yp_err_string);
-PHP_MINIT_FUNCTION(yp);
-PHP_RINIT_FUNCTION(yp);
-PHP_MINFO_FUNCTION(yp);
-
-typedef struct {
- int error;
-} php_yp_globals;
-
-#ifdef ZTS
-#define YP(v) TSRMG(yp_globals_id, php_yp_globals *, v)
-#else
-#define YP(v) (yp_globals.v)
-#endif
-
-#else
-
-#define yp_module_ptr NULL
-
-#endif /* HAVE_YP */
-
-#define phpext_yp_ptr yp_module_ptr
-
-#endif /* PHP_YP_H */
diff --git a/ext/yp/yp.c b/ext/yp/yp.c
deleted file mode 100644
index 4b2005429b..0000000000
--- a/ext/yp/yp.c
+++ /dev/null
@@ -1,430 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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. |
- +----------------------------------------------------------------------+
- | Authors: Stephanie Wehner <_@r4k.net> |
- | Fredrik Ohrn |
- +----------------------------------------------------------------------+
- */
-/* $Id$ */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "php.h"
-#include "ext/standard/info.h"
-
-#if HAVE_YP
-
-#include "php_yp.h"
-
-#include <rpcsvc/ypclnt.h>
-
-/* {{{ thread safety stuff */
-
-#ifdef ZTS
-int yp_globals_id;
-#else
-PHP_YP_API php_yp_globals yp_globals;
-#endif
-
-/* }}} */
-
-function_entry yp_functions[] = {
- PHP_FE(yp_get_default_domain, NULL)
- PHP_FE(yp_order, NULL)
- PHP_FE(yp_master, NULL)
- PHP_FE(yp_match, NULL)
- PHP_FE(yp_first, NULL)
- PHP_FE(yp_next, NULL)
- PHP_FE(yp_all, NULL)
- PHP_FE(yp_cat, NULL)
- PHP_FE(yp_errno, NULL)
- PHP_FE(yp_err_string, NULL)
- {NULL, NULL, NULL}
-};
-
-zend_module_entry yp_module_entry = {
- STANDARD_MODULE_HEADER,
- "yp",
- yp_functions,
- PHP_MINIT(yp),
- NULL,
- PHP_RINIT(yp),
- NULL,
- PHP_MINFO(yp),
- NO_VERSION_YET,
- STANDARD_MODULE_PROPERTIES
-};
-
-#ifdef COMPILE_DL_YP
-ZEND_GET_MODULE(yp)
-#endif
-
-/* {{{ proto string yp_get_default_domain(void)
- Returns the domain or false */
-PHP_FUNCTION(yp_get_default_domain)
-{
- char *outdomain;
-
- if (ZEND_NUM_ARGS()) {
- WRONG_PARAM_COUNT;
- }
-
- if((YP(error) = yp_get_default_domain(&outdomain))) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", yperr_string (YP(error)));
- RETURN_FALSE;
- }
- RETVAL_STRING(outdomain,1);
-}
-/* }}} */
-
-/* {{{ proto int yp_order(string domain, string map)
- Returns the order number or false */
-PHP_FUNCTION(yp_order)
-{
- pval **domain, **map;
-
-#if SOLARIS_YP
- unsigned long outval;
-#else
- int outval;
-#endif
-
- if((ZEND_NUM_ARGS() != 2) || zend_get_parameters_ex(2,&domain,&map) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_string_ex(domain);
- convert_to_string_ex(map);
-
- if((YP(error) = yp_order(Z_STRVAL_PP (domain), Z_STRVAL_PP (map), &outval))) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", yperr_string (YP(error)));
- RETURN_FALSE;
- }
-
- RETVAL_LONG(outval);
-}
-/* }}} */
-
-/* {{{ proto string yp_master(string domain, string map)
- Returns the machine name of the master */
-PHP_FUNCTION(yp_master)
-{
- pval **domain, **map;
- char *outname;
-
- if((ZEND_NUM_ARGS() != 2) || zend_get_parameters_ex(2,&domain,&map) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_string_ex(domain);
- convert_to_string_ex(map);
-
- if((YP(error) = yp_master(Z_STRVAL_PP (domain), Z_STRVAL_PP (map), &outname))) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", yperr_string (YP(error)));
- RETURN_FALSE;
- }
-
- RETVAL_STRING(outname,1);
-}
-/* }}} */
-
-/* {{{ proto string yp_match(string domain, string map, string key)
- Returns the matched line or false */
-PHP_FUNCTION(yp_match)
-{
- pval **domain, **map, **key;
- char *outval;
- int outvallen;
-
- if((ZEND_NUM_ARGS() != 3) || zend_get_parameters_ex(3,&domain,&map,&key) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_string_ex(domain);
- convert_to_string_ex(map);
- convert_to_string_ex(key);
-
- if((YP(error) = yp_match(Z_STRVAL_PP (domain), Z_STRVAL_PP (map), Z_STRVAL_PP (key), Z_STRLEN_PP (key), &outval, &outvallen))) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", yperr_string (YP(error)));
- RETURN_FALSE;
- }
-
- RETVAL_STRINGL(outval,outvallen,1);
-}
-/* }}} */
-
-/* {{{ proto array yp_first(string domain, string map)
- Returns the first key as array with $var[$key] and the the line as the value */
-PHP_FUNCTION(yp_first)
-{
- pval **domain, **map;
- char *outval, *outkey;
- int outvallen, outkeylen;
-
- if((ZEND_NUM_ARGS() != 2) || zend_get_parameters_ex(2,&domain,&map) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_string_ex(domain);
- convert_to_string_ex(map);
-
- if((YP(error) = yp_first(Z_STRVAL_PP (domain), Z_STRVAL_PP (map), &outkey, &outkeylen, &outval, &outvallen))) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", yperr_string (YP(error)));
- RETURN_FALSE;
- }
- array_init(return_value);
- add_assoc_stringl_ex(return_value,outkey,outkeylen+1,outval,outvallen,1);
-
- /* Deprecated */
- add_assoc_stringl(return_value,"key",outkey,outkeylen,1);
- add_assoc_stringl(return_value,"value",outval,outvallen,1);
-}
-/* }}} */
-
-/* {{{ proto array yp_next(string domain, string map, string key)
- Returns an array with $var[$key] and the the line as the value */
-PHP_FUNCTION(yp_next)
-{
- pval **domain, **map, **key;
- char *outval, *outkey;
- int outvallen, outkeylen;
-
- if((ZEND_NUM_ARGS() != 3) || zend_get_parameters_ex(3,&domain,&map,&key) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_string_ex(domain);
- convert_to_string_ex(map);
- convert_to_string_ex(key);
-
- if((YP(error) = yp_next(Z_STRVAL_PP (domain), Z_STRVAL_PP (map), Z_STRVAL_PP (key), Z_STRLEN_PP (key), &outkey, &outkeylen, &outval, &outvallen))) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", yperr_string (YP(error)));
- RETURN_FALSE;
- }
-
- array_init(return_value);
- add_assoc_stringl_ex(return_value,outkey,outkeylen+1,outval,outvallen,1);
-}
-/* }}} */
-
-/* {{{ php_foreach_all
- */
-static int php_foreach_all (int instatus, char *inkey, int inkeylen, char *inval, int invallen, char *indata)
-{
- int r;
- zval *status, *key, *value;
- zval **args [3];
- zval *retval;
- TSRMLS_FETCH();
-
- args[0] = &status;
- args[1] = &key;
- args[2] = &value;
-
- MAKE_STD_ZVAL (status);
- ZVAL_LONG (status, ypprot_err (instatus));
-
- MAKE_STD_ZVAL (key);
- ZVAL_STRINGL (key, inkey, inkeylen, 1);
-
- MAKE_STD_ZVAL (value);
- ZVAL_STRINGL (value, inval, invallen, 1);
-
- if(call_user_function_ex(CG(function_table), NULL, *((zval **)indata), &retval, 3, args, 0, NULL TSRMLS_CC) != SUCCESS)
- {
- zval_ptr_dtor(&status);
- zval_ptr_dtor(&key);
- zval_ptr_dtor(&value);
-
- php_error_docref(NULL TSRMLS_CC, E_ERROR, "Function call failed");
- return 1;
- }
-
- convert_to_long_ex(&retval);
- r = Z_LVAL_P (retval);
-
- zval_ptr_dtor(&retval);
-
- zval_ptr_dtor(&status);
- zval_ptr_dtor(&key);
- zval_ptr_dtor(&value);
-
- return r;
-}
-/* }}} */
-
-/* {{{ proto bool yp_all(string domain, string map, string callback)
- Traverse the map and call a function on each entry */
-PHP_FUNCTION(yp_all)
-{
- pval **domain, **map, **php_callback;
- struct ypall_callback callback;
-
- if((ZEND_NUM_ARGS() != 3) || zend_get_parameters_ex(3,&domain,&map,&php_callback) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_string_ex(domain);
- convert_to_string_ex(map);
-
- callback.foreach = php_foreach_all;
- callback.data = (char *) php_callback;
-
- yp_all(Z_STRVAL_PP(domain),Z_STRVAL_PP(map),&callback);
-
- RETURN_FALSE;
-}
-/* }}} */
-
-/* {{{ php_foreach_cat
- */
-static int php_foreach_cat (int instatus, char *inkey, int inkeylen, char *inval, int invallen, char *indata)
-{
- int err;
-
- err = ypprot_err (instatus);
-
- if (!err)
- {
- if (inkeylen) {
- char *key = emalloc(inkeylen+1);
- strlcpy(key, inkey, inkeylen+1);
- add_assoc_stringl_ex((zval *) indata, key, inkeylen+1, inval, invallen, 1);
- efree(key);
- }
-
- return 0;
- }
-
- if (err != YPERR_NOMORE)
- {
- TSRMLS_FETCH();
-
- YP(error) = err;
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", yperr_string (err));
- }
-
- return 0;
-}
-/* }}} */
-
-/* {{{ proto array yp_cat(string domain, string map)
- Return an array containing the entire map */
-PHP_FUNCTION(yp_cat)
-{
- pval **domain, **map;
- struct ypall_callback callback;
-
- if((ZEND_NUM_ARGS() != 2) || zend_get_parameters_ex(2,&domain,&map) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_string_ex(domain);
- convert_to_string_ex(map);
-
- array_init(return_value);
-
- callback.foreach = php_foreach_cat;
- callback.data = (char *) return_value;
-
- yp_all(Z_STRVAL_PP(domain),Z_STRVAL_PP(map),&callback);
-}
-/* }}} */
-
-/* {{{ proto int yp_errno()
- Returns the error code from the last call or 0 if no error occured */
-PHP_FUNCTION(yp_errno)
-{
- if((ZEND_NUM_ARGS() != 0)) {
- WRONG_PARAM_COUNT;
- }
-
- RETURN_LONG (YP(error));
-}
-/* }}} */
-
-/* {{{ proto string yp_err_string(int errorcode)
- Returns the corresponding error string for the given error code */
-PHP_FUNCTION(yp_err_string)
-{
- pval **error;
- char *string;
-
- if((ZEND_NUM_ARGS() != 1) || zend_get_parameters_ex(1,&error) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_long_ex(error);
-
- if((string = yperr_string(Z_LVAL_PP(error))) == NULL) {
- RETURN_FALSE;
- }
-
- RETVAL_STRING(string,1);
-}
-/* }}} */
-
-/* {{{ PHP_MINIT_FUNCTION
- */
-PHP_MINIT_FUNCTION(yp)
-{
-#ifdef ZTS
- ts_allocate_id(&yp_globals_id, sizeof(php_yp_globals), NULL, NULL);
-#endif
-
- REGISTER_LONG_CONSTANT("YPERR_BADARGS", YPERR_BADARGS, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("YPERR_BADDB", YPERR_BADDB, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("YPERR_BUSY", YPERR_BUSY, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("YPERR_DOMAIN", YPERR_DOMAIN, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("YPERR_KEY", YPERR_KEY, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("YPERR_MAP", YPERR_MAP, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("YPERR_NODOM", YPERR_NODOM, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("YPERR_NOMORE", YPERR_NOMORE, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("YPERR_PMAP", YPERR_PMAP, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("YPERR_RESRC", YPERR_RESRC, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("YPERR_RPC", YPERR_RPC, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("YPERR_YPBIND", YPERR_YPBIND, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("YPERR_YPERR", YPERR_YPERR, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("YPERR_YPSERV", YPERR_YPSERV, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("YPERR_VERS", YPERR_VERS, CONST_CS | CONST_PERSISTENT);
-
- return SUCCESS;
-}
-/* }}} */
-
-PHP_RINIT_FUNCTION(yp)
-{
- YP(error) = 0;
-
- return SUCCESS;
-}
-
-PHP_MINFO_FUNCTION(yp)
-{
- php_info_print_table_start();
- php_info_print_table_row(2, "YP Support", "enabled");
- php_info_print_table_end();
-}
-#endif /* HAVE_YP */
-
-/*
- * 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/zlib/CREDITS b/ext/zlib/CREDITS
deleted file mode 100644
index c0a47dd293..0000000000
--- a/ext/zlib/CREDITS
+++ /dev/null
@@ -1,2 +0,0 @@
-Zlib
-Rasmus Lerdorf, Stefan Roehrich, Zeev Suraski, Jade Nicoletti
diff --git a/ext/zlib/config.w32 b/ext/zlib/config.w32
deleted file mode 100644
index 3639276c8c..0000000000
--- a/ext/zlib/config.w32
+++ /dev/null
@@ -1,17 +0,0 @@
-// $Id$
-// vim:ft=javascript
-
-ARG_ENABLE("zlib", "ZLIB support", "yes");
-
-if (PHP_ZLIB == "yes") {
- EXTENSION("zlib", "zlib.c zlib_fopen_wrapper.c zlib_filter.c", null, "/D ZLIB_EXPORTS");
- AC_DEFINE("HAVE_ZLIB", 1, "ZLIB support");
- CHECK_LIB("zlib.lib", "zlib", PHP_ZLIB);
- CHECK_HEADER_ADD_INCLUDE("zlib.h", "CFLAGS", "..\\zlib;" + php_usual_include_suspects);
- if (!PHP_ZLIB_SHARED) {
- ADD_DEF_FILE("ext\\zlib\\php_zlib.def");
- }
-
-}
-
-
diff --git a/ext/zlib/config0.m4 b/ext/zlib/config0.m4
deleted file mode 100644
index 495a952c2c..0000000000
--- a/ext/zlib/config0.m4
+++ /dev/null
@@ -1,58 +0,0 @@
-dnl
-dnl $Id$
-dnl
-
-PHP_ARG_WITH(zlib,for ZLIB support,
-[ --with-zlib[=DIR] Include ZLIB support (requires zlib >= 1.0.9).])
-
-PHP_ARG_WITH(zlib-dir,if the location of ZLIB install directory is defined,
-[ --with-zlib-dir=<DIR> Define the location of zlib install directory], no, no)
-
-if test "$PHP_ZLIB" != "no" -o "$PHP_ZLIB_DIR" != "no"; then
- PHP_NEW_EXTENSION(zlib, zlib.c zlib_fopen_wrapper.c zlib_filter.c, $ext_shared)
- PHP_SUBST(ZLIB_SHARED_LIBADD)
-
- if test "$PHP_ZLIB" != "yes" -a "$PHP_ZLIB" != "no"; then
- if test -f $PHP_ZLIB/include/zlib/zlib.h; then
- ZLIB_DIR=$PHP_ZLIB
- ZLIB_INCDIR=$ZLIB_DIR/include/zlib
- elif test -f $PHP_ZLIB/include/zlib.h; then
- ZLIB_DIR=$PHP_ZLIB
- ZLIB_INCDIR=$ZLIB_DIR/include
- fi
- else
- for i in /usr/local /usr $PHP_ZLIB_DIR; do
- if test -f $i/include/zlib/zlib.h; then
- ZLIB_DIR=$i
- ZLIB_INCDIR=$i/include/zlib
- elif test -f $i/include/zlib.h; then
- ZLIB_DIR=$i
- ZLIB_INCDIR=$i/include
- fi
- done
- fi
-
- if test -z "$ZLIB_DIR"; then
- AC_MSG_ERROR(Cannot find libz)
- fi
-
- case $ZLIB_DIR in
- /usr) ac_extra= ;;
- *) ac_extra=-L$ZLIB_DIR/lib ;;
- esac
-
- PHP_CHECK_LIBRARY(z, gzgets, [
- AC_DEFINE(HAVE_ZLIB,1,[ ])
- ],[
- AC_MSG_ERROR(ZLIB extension requires zlib >= 1.0.9)
- ],[
- $ac_extra
- ])
-
- PHP_ADD_LIBPATH($ZLIB_DIR/lib, ZLIB_SHARED_LIBADD)
-
- PHP_ZLIB_DIR=$ZLIB_DIR
- PHP_ADD_LIBRARY(z,, ZLIB_SHARED_LIBADD)
- PHP_ADD_INCLUDE($ZLIB_INCDIR)
-
-fi
diff --git a/ext/zlib/package.xml b/ext/zlib/package.xml
deleted file mode 100644
index 197357b89f..0000000000
--- a/ext/zlib/package.xml
+++ /dev/null
@@ -1,70 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1" ?>
-<!DOCTYPE package SYSTEM "../pear/package.dtd">
-<package>
- <name>zlib</name>
- <summary>zlib compression management</summary>
- <maintainers>
- <maintainer>
- <user>sr</user>
- <name>Stefan Roehrich</name>
- <email>sr@linux.de</email>
- <role>lead</role>
- </maintainer>
- <maintainer>
- <user>rasmus</user>
- <name>Rasmus Lerdorf</name>
- <email>rasmus@php.net</email>
- <role>developer</role>
- </maintainer>
- <maintainer>
- <user>zeev</user>
- <name>Zeev Suraski</name>
- <email>zeev@php.net</email>
- <role>developer</role>
- </maintainer>
- <maintainer>
- <user>???</user>
- <name>Jade Nicoletti</name>
- <email>???@php.net</email>
- <role>developer</role>
- </maintainer>
- </maintainers>
- <description>
-This module enables you to transparently read and write
-gzip (.gz) compressed files, through versions of most of
-the filesystem functions which work with gzip-compressed
-files (and uncompressed files, too, but not with sockets).
- </description>
- <license>PHP</license>
- <release>
- <state>beta</state>
- <version>5.0.0rc1</version>
- <date>2004-03-19</date>
- <notes>
-package.xml added to support intallation using pear installer
- </notes>
- <filelist>
- <file role="doc" name="CREDITS"/>
- <file role="doc" name="zlib_win32_howto.txt"/>
- <file role="src" name="config0.m4"/>
- <file role="src" name="config.w32"/>
- <file role="src" name="php_zlib.h"/>
- <file role="src" name="zlib.c"/>
- <file role="src" name="zlib.dsp"/>
- <file role="src" name="zlib_fopen_wrapper.c"/>
- <file role="src" name="php_zlib.def"/>
- <file role="test" name="tests/001.phpt"/>
- <file role="test" name="tests/002.phpt"/>
- <file role="test" name="tests/003.phpt"/>
- <file role="test" name="tests/gzreadgzwrite.phpt"/>
- <file role="test" name="tests/gzreadgzwriteplain.phpt"/>
- <file role="test" name="tests/gzfilegzreadfile.phpt"/>
- </filelist>
- <deps>
- <dep type="php" rel="ge" version="5" />
- </deps>
- </release>
-</package>
-<!--
-vim:et:ts=1:sw=1
--->
diff --git a/ext/zlib/php_zlib.def b/ext/zlib/php_zlib.def
deleted file mode 100644
index 7c4ce92635..0000000000
--- a/ext/zlib/php_zlib.def
+++ /dev/null
@@ -1,14 +0,0 @@
-EXPORTS
- compress
- compress2
- deflate
- deflateEnd
- deflateInit2_
- uncompress
- inflateInit_
- inflateInit2_
- inflate
- inflateEnd
- crc32
- inflateReset
- \ No newline at end of file
diff --git a/ext/zlib/php_zlib.h b/ext/zlib/php_zlib.h
deleted file mode 100644
index 92b1f874be..0000000000
--- a/ext/zlib/php_zlib.h
+++ /dev/null
@@ -1,83 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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. |
- +----------------------------------------------------------------------+
- | Authors: Rasmus Lerdorf <rasmus@lerdorf.on.ca> |
- | Stefan Röhrich <sr@linux.de> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifndef PHP_ZLIB_H
-#define PHP_ZLIB_H
-
-#include <zlib.h>
-
-ZEND_BEGIN_MODULE_GLOBALS(zlib)
- /* variables for transparent gzip encoding */
- int compression_coding;
- z_stream stream;
- uLong crc;
- int ob_gzhandler_status;
- long output_compression;
- long output_compression_level;
- char *output_handler;
-ZEND_END_MODULE_GLOBALS(zlib)
-
-extern php_stream_filter_factory php_zlib_filter_factory;
-extern zend_module_entry php_zlib_module_entry;
-#define zlib_module_ptr &php_zlib_module_entry
-
-PHP_MINIT_FUNCTION(zlib);
-PHP_MSHUTDOWN_FUNCTION(zlib);
-PHP_RINIT_FUNCTION(zlib);
-PHP_MINFO_FUNCTION(zlib);
-PHP_FUNCTION(gzopen);
-PHP_FUNCTION(readgzfile);
-PHP_FUNCTION(gzfile);
-PHP_FUNCTION(gzcompress);
-PHP_FUNCTION(gzuncompress);
-PHP_FUNCTION(gzdeflate);
-PHP_FUNCTION(gzinflate);
-PHP_FUNCTION(gzencode);
-PHP_FUNCTION(ob_gzhandler);
-PHP_FUNCTION(zlib_get_coding_type);
-
-int php_enable_output_compression(int buffer_size TSRMLS_DC);
-int php_ob_gzhandler_check(TSRMLS_D);
-
-php_stream *php_stream_gzopen(php_stream_wrapper *wrapper, char *path, char *mode, int options, char **opened_path, php_stream_context *context STREAMS_DC TSRMLS_DC);
-extern php_stream_ops php_stream_gzio_ops;
-extern php_stream_wrapper php_stream_gzip_wrapper;
-
-#ifdef ZTS
-#define ZLIBG(v) TSRMG(zlib_globals_id, zend_zlib_globals *, v)
-#else
-#define ZLIBG(v) (zlib_globals.v)
-#endif
-
-#define phpext_zlib_ptr zlib_module_ptr
-
-#define CODING_GZIP 1
-#define CODING_DEFLATE 2
-
-#endif /* PHP_ZLIB_H */
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * indent-tabs-mode: t
- * End:
- */
diff --git a/ext/zlib/tests/001.phpt b/ext/zlib/tests/001.phpt
deleted file mode 100644
index 4850a65a5a..0000000000
--- a/ext/zlib/tests/001.phpt
+++ /dev/null
@@ -1,32 +0,0 @@
---TEST--
-gzdeflate()/gzinflate()
---SKIPIF--
-<?php if (!extension_loaded("zlib")) print "skip"; ?>
---FILE--
-<?php /* $Id$ */
-$original = str_repeat("hallo php",4096);
-$packed=gzdeflate($original);
-echo strlen($packed)." ".strlen($original)."\n";
-$unpacked=gzinflate($packed);
-if (strcmp($original,$unpacked)==0) echo "Strings are equal\n";
-
-/* with explicit compression level, length */
-$original = str_repeat("hallo php",4096);
-$packed=gzdeflate($original, 9);
-echo strlen($packed)." ".strlen($original)."\n";
-$unpacked=gzinflate($packed, 40000);
-if (strcmp($original,$unpacked)==0) echo "Strings are equal\n";
-
-$original = 'aaaaaaaaaaaaaaa';
-$packed=gzdeflate($original);
-echo strlen($packed)." ".strlen($original)."\n";
-$unpacked=gzinflate($packed);
-if (strcmp($original,$unpacked)==0) echo "Strings are equal";
-?>
---EXPECT--
-100 36864
-Strings are equal
-100 36864
-Strings are equal
-5 15
-Strings are equal \ No newline at end of file
diff --git a/ext/zlib/tests/002.phpt b/ext/zlib/tests/002.phpt
deleted file mode 100644
index 9844a1b93d..0000000000
--- a/ext/zlib/tests/002.phpt
+++ /dev/null
@@ -1,24 +0,0 @@
---TEST--
-gzcompress()/gzuncompress()
---SKIPIF--
-<?php if (!extension_loaded("zlib")) print "skip"; ?>
---FILE--
-<?php /* $Id$ */
-$original = str_repeat("hallo php",4096);
-$packed=gzcompress($original);
-echo strlen($packed)." ".strlen($original)."\n";
-$unpacked=gzuncompress($packed);
-if (strcmp($original,$unpacked)==0) echo "Strings are equal\n";
-
-/* with explicit compression level, length */
-$original = str_repeat("hallo php",4096);
-$packed=gzcompress($original, 9);
-echo strlen($packed)." ".strlen($original)."\n";
-$unpacked=gzuncompress($packed, 40000);
-if (strcmp($original,$unpacked)==0) echo "Strings are equal\n";
-?>
---EXPECT--
-106 36864
-Strings are equal
-106 36864
-Strings are equal
diff --git a/ext/zlib/tests/003.phpt b/ext/zlib/tests/003.phpt
deleted file mode 100644
index 2732d4cea6..0000000000
--- a/ext/zlib/tests/003.phpt
+++ /dev/null
@@ -1,14 +0,0 @@
---TEST--
-gzencode()/base64_encode()
---SKIPIF--
-<?php if (!extension_loaded("zlib")) print "skip"; ?>
---FILE--
-<?php
-$original = str_repeat("hallo php",4096);
-$packed=gzencode($original);
-echo strlen($packed)." ".strlen($original)."\n";
-if (strcmp(base64_encode($packed),"H4sIAAAAAAAAA+3GoQ0AQAgEsFV+NdwJEthf/R6kVU11z9tsRERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERETu5gPlQAe9AJAAAA==")==0) echo "Strings are equal";
-?>
---EXPECT--
-118 36864
-Strings are equal
diff --git a/ext/zlib/tests/gzfilegzreadfile.phpt b/ext/zlib/tests/gzfilegzreadfile.phpt
deleted file mode 100644
index 2d6843ddd4..0000000000
--- a/ext/zlib/tests/gzfilegzreadfile.phpt
+++ /dev/null
@@ -1,82 +0,0 @@
---TEST--
-gzfile(), gzreadfile()
---SKIPIF--
-<?php /* $Id$ */
-if (!extension_loaded("zlib")) print "skip"; ?>
---FILE--
-<?php
-$original = <<<EOD
-blah blah blah blah blah blah blah
-blah blah blah blah blah blah blah
-blah blah blah blah blah blah blah
-blah blah blah blah blah blah blah
-blah blah blah blah blah blah blah
-blah blah blah blah blah blah blah
-blah blah blah blah blah blah blah
-blah blah blah blah blah blah blah
-blah blah blah blah blah blah blah
-blah blah blah blah blah blah blah
-blah blah blah blah blah blah blah
-blah blah blah blah blah blah blah
-blah blah blah blah blah blah blah
-blah blah blah blah blah blah blah
-blah blah blah blah blah blah blah
-blah blah blah blah blah blah blah
-
-EOD;
-
-$filename = tempnam("/tmp", "phpt");
-
-$fp = gzopen($filename, "wb");
-gzwrite($fp, $original);
-var_dump(strlen($original));
-fclose($fp);
-
-readgzfile($filename);
-
-echo "\n";
-
-$lines = gzfile($filename);
-
-unlink($filename);
-
-foreach ($lines as $line) {
- echo $line;
-}
-
-?>
---EXPECT--
-int(560)
-blah blah blah blah blah blah blah
-blah blah blah blah blah blah blah
-blah blah blah blah blah blah blah
-blah blah blah blah blah blah blah
-blah blah blah blah blah blah blah
-blah blah blah blah blah blah blah
-blah blah blah blah blah blah blah
-blah blah blah blah blah blah blah
-blah blah blah blah blah blah blah
-blah blah blah blah blah blah blah
-blah blah blah blah blah blah blah
-blah blah blah blah blah blah blah
-blah blah blah blah blah blah blah
-blah blah blah blah blah blah blah
-blah blah blah blah blah blah blah
-blah blah blah blah blah blah blah
-
-blah blah blah blah blah blah blah
-blah blah blah blah blah blah blah
-blah blah blah blah blah blah blah
-blah blah blah blah blah blah blah
-blah blah blah blah blah blah blah
-blah blah blah blah blah blah blah
-blah blah blah blah blah blah blah
-blah blah blah blah blah blah blah
-blah blah blah blah blah blah blah
-blah blah blah blah blah blah blah
-blah blah blah blah blah blah blah
-blah blah blah blah blah blah blah
-blah blah blah blah blah blah blah
-blah blah blah blah blah blah blah
-blah blah blah blah blah blah blah
-blah blah blah blah blah blah blah
diff --git a/ext/zlib/tests/gzreadgzwrite.phpt b/ext/zlib/tests/gzreadgzwrite.phpt
deleted file mode 100644
index 6d6729a72f..0000000000
--- a/ext/zlib/tests/gzreadgzwrite.phpt
+++ /dev/null
@@ -1,31 +0,0 @@
---TEST--
-gzopen(), gzread(), gzwrite()
---SKIPIF--
-<?php # vim600:syn=php:
-if (!extension_loaded("zlib")) print "skip"; ?>
---FILE--
-<?php
-$original = str_repeat("hallo php",4096);
-$filename = tempnam("/tmp", "phpt");
-
-$fp = gzopen($filename, "wb");
-gzwrite($fp, $original);
-var_dump(strlen($original));
-var_dump(gztell($fp));
-fclose($fp);
-
-$fp = gzopen($filename, "rb");
-$data = gzread($fp, strlen($original));
-if ($data == $original) {
- echo "Strings are equal\n";
-} else {
- echo "Strings are not equal\n";
- var_dump($data);
-}
-gzclose($fp);
-unlink($filename);
-?>
---EXPECT--
-int(36864)
-int(36864)
-Strings are equal
diff --git a/ext/zlib/tests/gzreadgzwriteplain.phpt b/ext/zlib/tests/gzreadgzwriteplain.phpt
deleted file mode 100644
index 7bb567d889..0000000000
--- a/ext/zlib/tests/gzreadgzwriteplain.phpt
+++ /dev/null
@@ -1,45 +0,0 @@
---TEST--
-gzopen(), gzread(), gzwrite() for non-compressed data
---SKIPIF--
-<?php # vim600:syn=php:
-if (!extension_loaded("zlib")) print "skip"; ?>
---FILE--
-<?php
-$original = str_repeat("hallo php",4096);
-$filename = tempnam("/tmp", "phpt");
-
-$fp = fopen($filename, "wb");
-fwrite($fp, $original);
-var_dump(strlen($original));
-var_dump(ftell($fp));
-fclose($fp);
-
-$fp = gzopen($filename, "rb");
-$data = gzread($fp, strlen($original));
-if ($data == $original) {
- echo "Strings are equal\n";
-} else {
- echo "Strings are not equal\n";
- var_dump($data);
-}
-
-gzseek($fp, strlen($original) / 2);
-$data = gzread($fp, strlen($original));
-
-var_dump(strlen($data));
-if ($data == substr($original, strlen($original) / 2)) {
- echo "Strings are equal\n";
-} else {
- echo "Strings are not equal\n";
- var_dump($data);
-}
-
-gzclose($fp);
-unlink($filename);
-?>
---EXPECT--
-int(36864)
-int(36864)
-Strings are equal
-int(18432)
-Strings are equal
diff --git a/ext/zlib/tests/zlib_filter_deflate.phpt b/ext/zlib/tests/zlib_filter_deflate.phpt
deleted file mode 100644
index 70c1bdfab7..0000000000
--- a/ext/zlib/tests/zlib_filter_deflate.phpt
+++ /dev/null
@@ -1,17 +0,0 @@
---TEST--
-zlib.deflate (with convert.base64-encode)
---SKIPIF--
-<?php if (!extension_loaded("zlib")) print "skip"; ?>
---FILE--
-<?php /* $Id$ */
-$text = 'I am the very model of a modern major general, I\'ve information vegetable, animal, and mineral.';
-
-$fp = fopen('php://stdout', 'w');
-stream_filter_append($fp, 'zlib.deflate', STREAM_FILTER_WRITE);
-stream_filter_append($fp, 'convert.base64-encode', STREAM_FILTER_WRITE);
-fwrite($fp, $text);
-fclose($fp);
-
-?>
---EXPECT--
-eJwdy0EOgCAMRNGrzM6N8R4co4YBMbRNGkLi7VV2f/FfgijGRUzGA/XMDi+QlWFQuT1QaQzpO9I2iWbFQ2U0t49VDjk7d4g1/R+xDG0LHC8+diGh
diff --git a/ext/zlib/tests/zlib_filter_inflate.phpt b/ext/zlib/tests/zlib_filter_inflate.phpt
deleted file mode 100644
index b91745f39f..0000000000
--- a/ext/zlib/tests/zlib_filter_inflate.phpt
+++ /dev/null
@@ -1,17 +0,0 @@
---TEST--
-zlib.inflate (with convert.base64-decode)
---SKIPIF--
-<?php if (!extension_loaded("zlib")) print "skip"; ?>
---FILE--
-<?php /* $Id$ */
-$text = 'eJwdy0EOgCAMRNGrzM6N8R4co4YBMbRNGkLi7VV2f/FfgijGRUzGA/XMDi+QlWFQuT1QaQzpO9I2iWbFQ2U0t49VDjk7d4g1/R+xDG0LHC8+diGh';
-
-$fp = fopen('php://stdout', 'w');
-stream_filter_append($fp, 'convert.base64-decode', STREAM_FILTER_WRITE);
-stream_filter_append($fp, 'zlib.inflate', STREAM_FILTER_WRITE);
-fwrite($fp, $text);
-fclose($fp);
-
-?>
---EXPECT--
-I am the very model of a modern major general, I've information vegetable, animal, and mineral.
diff --git a/ext/zlib/zlib.c b/ext/zlib/zlib.c
deleted file mode 100644
index 80e7d0dffb..0000000000
--- a/ext/zlib/zlib.c
+++ /dev/null
@@ -1,998 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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. |
- +----------------------------------------------------------------------+
- | Authors: Rasmus Lerdorf <rasmus@lerdorf.on.ca> |
- | Stefan Röhrich <sr@linux.de> |
- | Zeev Suraski <zeev@zend.com> |
- | Jade Nicoletti <nicoletti@nns.ch> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "php.h"
-#include "SAPI.h"
-#include "php_ini.h"
-
-#include <stdlib.h>
-#include <errno.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <fcntl.h>
-#ifdef PHP_WIN32
-#define O_RDONLY _O_RDONLY
-#include "win32/param.h"
-#else
-#include <sys/param.h>
-/* #include <sys/uio.h> */
-#endif
-#include "ext/standard/head.h"
-#include "safe_mode.h"
-#include "ext/standard/php_standard.h"
-#include "ext/standard/info.h"
-#include "php_zlib.h"
-#include "fopen_wrappers.h"
-#if HAVE_PWD_H
-#ifdef PHP_WIN32
-#include "win32/pwd.h"
-#else
-#include <pwd.h>
-#endif
-#endif
-#if defined(HAVE_UNISTD_H) && defined(PHP_WIN32)
-#undef HAVE_UNISTD_H
-#endif
-
-#ifdef COMPILE_DL_ZLIB
-#ifndef PUTS
-#define PUTS(a) php_printf("%s",a)
-#endif
-#ifndef PUTC
-#define PUTC(a) PUTS(a)
-#endif
-#ifndef PHPWRITE
-#define PHPWRITE(a,n) php_write((a),(n) TSRMLS_CC)
-#endif
-#endif
-
-#define OS_CODE 0x03 /* FIXME */
-#define GZIP_HEADER_LENGTH 10
-#define GZIP_FOOTER_LENGTH 8
-
-/* True globals, no need for thread safety */
-static int gz_magic[2] = {0x1f, 0x8b}; /* gzip magic header */
-
-/* {{{ php_zlib_functions[]
- */
-function_entry php_zlib_functions[] = {
- PHP_FE(readgzfile, NULL)
- PHP_FALIAS(gzrewind, rewind, NULL)
- PHP_FALIAS(gzclose, fclose, NULL)
- PHP_FALIAS(gzeof, feof, NULL)
- PHP_FALIAS(gzgetc, fgetc, NULL)
- PHP_FALIAS(gzgets, fgets, NULL)
- PHP_FALIAS(gzgetss, fgetss, NULL)
- PHP_FALIAS(gzread, fread, NULL)
- PHP_FE(gzopen, NULL)
- PHP_FALIAS(gzpassthru, fpassthru, NULL)
- PHP_FALIAS(gzseek, fseek, NULL)
- PHP_FALIAS(gztell, ftell, NULL)
- PHP_FALIAS(gzwrite, fwrite, NULL)
- PHP_FALIAS(gzputs, fwrite, NULL)
- PHP_FE(gzfile, NULL)
- PHP_FE(gzcompress, NULL)
- PHP_FE(gzuncompress, NULL)
- PHP_FE(gzdeflate, NULL)
- PHP_FE(gzinflate, NULL)
- PHP_FE(gzencode, NULL)
- PHP_FE(ob_gzhandler, NULL)
- PHP_FE(zlib_get_coding_type, NULL)
- {NULL, NULL, NULL}
-};
-/* }}} */
-
-/* {{{ php_zlib_module_entry
- */
-zend_module_entry php_zlib_module_entry = {
- STANDARD_MODULE_HEADER,
- "zlib",
- php_zlib_functions,
- PHP_MINIT(zlib),
- PHP_MSHUTDOWN(zlib),
- PHP_RINIT(zlib),
- NULL,
- PHP_MINFO(zlib),
- "1.1",
- STANDARD_MODULE_PROPERTIES
-};
-/* }}} */
-
-ZEND_DECLARE_MODULE_GLOBALS(zlib)
-
-#ifdef COMPILE_DL_ZLIB
-ZEND_GET_MODULE(php_zlib)
-#endif
-
-/* {{{ OnUpdate_zlib_output_compression */
-static PHP_INI_MH(OnUpdate_zlib_output_compression)
-{
- char *ini_value;
-
- if (new_value == NULL) {
- return FAILURE;
- }
-
- if (!strncasecmp(new_value, "off", sizeof("off"))) {
- new_value = "0";
- new_value_length = sizeof("0");
- } else if (!strncasecmp(new_value, "on", sizeof("on"))) {
- new_value = "1";
- new_value_length = sizeof("1");
- }
-
- ini_value = zend_ini_string("output_handler", sizeof("output_handler"), 0);
- if (ini_value != NULL && strlen(ini_value) != 0 && zend_atoi(new_value, new_value_length) != 0) {
- php_error_docref("ref.outcontrol" TSRMLS_CC, E_CORE_ERROR, "Cannot use both zlib.output_compression and output_handler together!!");
- return FAILURE;
- }
-
- if (stage == PHP_INI_STAGE_RUNTIME && SG(headers_sent) && !SG(request_info).no_headers) {
- php_error_docref("ref.outcontrol" TSRMLS_CC, E_WARNING, "Cannot change zlib.output_compression - headers already sent");
- return FAILURE;
- }
-
- OnUpdateLong(entry, new_value, new_value_length, mh_arg1, mh_arg2, mh_arg3, stage TSRMLS_CC);
-
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ OnUpdate_zlib_output_compression_level */
-static PHP_INI_MH(OnUpdate_zlib_output_compression_level)
-{
- OnUpdateLong(entry, new_value, new_value_length, mh_arg1, mh_arg2, mh_arg3, stage TSRMLS_CC);
-
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ OnUpdate_zlib_output_handler */
-static PHP_INI_MH(OnUpdate_zlib_output_handler)
-{
- if (stage == PHP_INI_STAGE_RUNTIME && SG(headers_sent) && !SG(request_info).no_headers) {
- php_error_docref("ref.outcontrol" TSRMLS_CC, E_WARNING, "Cannot change zlib.output_handler - headers already sent");
- return FAILURE;
- }
-
- OnUpdateString(entry, new_value, new_value_length, mh_arg1, mh_arg2, mh_arg3, stage TSRMLS_CC);
-
- return SUCCESS;
-}
-/* }}} */
-
-
-PHP_INI_BEGIN()
- STD_PHP_INI_BOOLEAN("zlib.output_compression", "0", PHP_INI_ALL, OnUpdate_zlib_output_compression, output_compression, zend_zlib_globals, zlib_globals)
- STD_PHP_INI_ENTRY("zlib.output_compression_level", "-1", PHP_INI_ALL, OnUpdate_zlib_output_compression_level, output_compression_level, zend_zlib_globals, zlib_globals)
- STD_PHP_INI_ENTRY("zlib.output_handler", "", PHP_INI_ALL, OnUpdate_zlib_output_handler, output_handler, zend_zlib_globals, zlib_globals)
-PHP_INI_END()
-
-#ifdef ZTS
-/* {{{ php_zlib_init_globals
- */
-static void php_zlib_init_globals(zend_zlib_globals *zlib_globals_p TSRMLS_DC)
-{
-}
-/* }}} */
-#endif
-
-/* {{{ PHP_MINIT_FUNCTION
- */
-PHP_MINIT_FUNCTION(zlib)
-{
-#ifdef ZTS
- ts_allocate_id(&zlib_globals_id, sizeof(zend_zlib_globals), (ts_allocate_ctor) php_zlib_init_globals, NULL);
-#endif
- php_register_url_stream_wrapper("compress.zlib", &php_stream_gzip_wrapper TSRMLS_CC);
- php_stream_filter_register_factory("zlib.*", &php_zlib_filter_factory TSRMLS_CC);
-
- REGISTER_LONG_CONSTANT("FORCE_GZIP", CODING_GZIP, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("FORCE_DEFLATE", CODING_DEFLATE, CONST_CS | CONST_PERSISTENT);
-
- REGISTER_INI_ENTRIES();
-
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ PHP_RINIT_FUNCTION
- */
-PHP_RINIT_FUNCTION(zlib)
-{
- uint chunk_size = ZLIBG(output_compression);
-
- ZLIBG(ob_gzhandler_status) = 0;
- ZLIBG(compression_coding) = 0;
- if (chunk_size) {
- if (chunk_size == 1) {
- chunk_size = 4096; /* use the default size */
- ZLIBG(output_compression) = chunk_size;
- }
- php_enable_output_compression(chunk_size TSRMLS_CC);
- }
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ PHP_MSHUTDOWN_FUNCTION
- */
-PHP_MSHUTDOWN_FUNCTION(zlib)
-{
- php_unregister_url_stream_wrapper("zlib" TSRMLS_CC);
- php_stream_filter_unregister_factory("zlib.*" TSRMLS_CC);
-
- UNREGISTER_INI_ENTRIES();
-
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ PHP_MINFO_FUNCTION
- */
-PHP_MINFO_FUNCTION(zlib)
-{
- php_info_print_table_start();
- php_info_print_table_row(2, "ZLib Support", "enabled");
- php_info_print_table_row(2, "Stream Wrapper support", "compress.zlib://");
- php_info_print_table_row(2, "Stream Filter support", "zlib.inflate, zlib.deflate");
- php_info_print_table_row(2, "Compiled Version", ZLIB_VERSION);
- php_info_print_table_row(2, "Linked Version", (char *) zlibVersion());
- php_info_print_table_end();
-
- DISPLAY_INI_ENTRIES();
-}
-/* }}} */
-
-/* {{{ proto array gzfile(string filename [, int use_include_path])
- Read und uncompress entire .gz-file into an array */
-PHP_FUNCTION(gzfile)
-{
- char *filename;
- int filename_len;
- long flags = 0;
- char *slashed, buf[8192];
- register int i = 0;
- int use_include_path = 0;
- php_stream *stream;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|l", &filename, &filename_len, &flags) == FAILURE) {
- return;
- }
-
- use_include_path = flags ? USE_PATH : 0;
-
- /* using a stream here is a bit more efficient (resource wise) than php_gzopen_wrapper */
- stream = php_stream_gzopen(NULL, filename, "rb", use_include_path | ENFORCE_SAFE_MODE | REPORT_ERRORS, NULL, NULL STREAMS_CC TSRMLS_CC);
- if (stream == NULL) {
- /* Error reporting is already done by stream code */
- RETURN_FALSE;
- }
-
- /* Initialize return array */
- array_init(return_value);
-
- /* Now loop through the file and do the magic quotes thing if needed */
- memset(buf,0,sizeof(buf));
-
- while (php_stream_gets(stream, buf, sizeof(buf) - 1) != NULL) {
- if (PG(magic_quotes_runtime)) {
- int len;
-
- slashed = php_addslashes(buf, 0, &len, 0 TSRMLS_CC); /* 0 = don't free source string */
- add_index_stringl(return_value, i++, slashed, len, 0);
- } else {
- add_index_string(return_value, i++, buf, 1);
- }
- }
- php_stream_close(stream);
-}
-/* }}} */
-
-/* {{{ proto resource gzopen(string filename, string mode [, int use_include_path])
- Open a .gz-file and return a .gz-file pointer */
-PHP_FUNCTION(gzopen)
-{
- char *filename, *mode;
- int filename_len, mode_len;
- long flags = 0;
- php_stream *stream;
- int use_include_path = 0;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ss|l", &filename, &filename_len, &mode, &mode_len, &flags) == FAILURE) {
- return;
- }
-
- use_include_path = flags ? USE_PATH : 0;
-
- stream = php_stream_gzopen(NULL, filename, mode, use_include_path | ENFORCE_SAFE_MODE | REPORT_ERRORS, NULL, NULL STREAMS_CC TSRMLS_CC);
-
- if (!stream) {
- RETURN_FALSE;
- }
- php_stream_to_zval(stream, return_value);
-}
-/* }}} */
-
-/*
- * Read a file and write the ouput to stdout
- */
-/* {{{ proto int readgzfile(string filename [, int use_include_path])
- Output a .gz-file */
-PHP_FUNCTION(readgzfile)
-{
- char *filename;
- int filename_len;
- long flags = 0;
- php_stream *stream;
- int size;
- int use_include_path = 0;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|l", &filename, &filename_len, &flags) == FAILURE) {
- return;
- }
-
- use_include_path = flags ? USE_PATH : 0;
-
- stream = php_stream_gzopen(NULL, filename, "rb", use_include_path | ENFORCE_SAFE_MODE, NULL, NULL STREAMS_CC TSRMLS_CC);
- if (!stream) {
- RETURN_FALSE;
- }
- size = php_stream_passthru(stream);
- php_stream_close(stream);
- RETURN_LONG(size);
-}
-/* }}} */
-
-/* {{{ proto string gzcompress(string data [, int level])
- Gzip-compress a string */
-PHP_FUNCTION(gzcompress)
-{
- int data_len, status;
- long level = Z_DEFAULT_COMPRESSION;
- unsigned long l2;
- char *data, *s2;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|l", &data, &data_len, &level) == FAILURE) {
- return;
- }
-
- if ((level < -1) || (level > 9)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "compression level (%ld) must be within -1..9", level);
- RETURN_FALSE;
- }
-
- l2 = data_len + (data_len / 1000) + 15 + 1; /* room for \0 */
- s2 = (char *) emalloc(l2);
- if (!s2) {
- RETURN_FALSE;
- }
-
- if (level >= 0) {
- status = compress2(s2, &l2, data, data_len, level);
- } else {
- status = compress(s2, &l2, data, data_len);
- }
-
- if (status == Z_OK) {
- s2 = erealloc(s2, l2 + 1);
- s2[l2] = '\0';
- RETURN_STRINGL(s2, l2, 0);
- } else {
- efree(s2);
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", zError(status));
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-/* {{{ proto string gzuncompress(string data [, int length])
- Unzip a gzip-compressed string */
-PHP_FUNCTION(gzuncompress)
-{
- int data_len, status;
- unsigned int factor=1, maxfactor=16;
- long limit = 0;
- unsigned long plength=0, length;
- char *data, *s1=NULL, *s2=NULL;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|l", &data, &data_len, &limit) == FAILURE) {
- return;
- }
-
- if (limit < 0) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "length (%ld) must be greater or equal zero", limit);
- RETURN_FALSE;
- }
- plength = limit;
-
- /*
- zlib::uncompress() wants to know the output data length
- if none was given as a parameter
- we try from input length * 2 up to input length * 2^15
- doubling it whenever it wasn't big enough
- that should be eneugh for all real life cases
- */
- do {
- length = plength ? plength : (unsigned long)data_len * (1 << factor++);
- s2 = (char *) erealloc(s1, length);
- status = uncompress(s2, &length, data, data_len);
- s1 = s2;
- } while ((status == Z_BUF_ERROR) && (!plength) && (factor < maxfactor));
-
- if (status == Z_OK) {
- s2 = erealloc(s2, length + 1); /* space for \0 */
- s2[ length ] = '\0';
- RETURN_STRINGL(s2, length, 0);
- } else {
- efree(s2);
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", zError(status));
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-/* {{{ proto string gzdeflate(string data [, int level])
- Gzip-compress a string */
-PHP_FUNCTION(gzdeflate)
-{
- int data_len,status;
- long level = Z_DEFAULT_COMPRESSION;
- z_stream stream;
- char *data, *s2;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|l", &data, &data_len, &level) == FAILURE) {
- return;
- }
-
- if ((level < -1) || (level > 9)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "compression level (%ld) must be within -1..9", level);
- RETURN_FALSE;
- }
-
- stream.data_type = Z_ASCII;
- stream.zalloc = (alloc_func) Z_NULL;
- stream.zfree = (free_func) Z_NULL;
- stream.opaque = (voidpf) Z_NULL;
-
- stream.next_in = (Bytef *) data;
- stream.avail_in = data_len;
-
- stream.avail_out = stream.avail_in + (stream.avail_in / 1000) + 15 + 1; /* room for \0 */
-
- s2 = (char *) emalloc(stream.avail_out);
- if (!s2) {
- RETURN_FALSE;
- }
-
- stream.next_out = s2;
-
- /* init with -MAX_WBITS disables the zlib internal headers */
- status = deflateInit2(&stream, level, Z_DEFLATED, -MAX_WBITS, MAX_MEM_LEVEL, 0);
- if (status == Z_OK) {
- status = deflate(&stream, Z_FINISH);
- if (status != Z_STREAM_END) {
- deflateEnd(&stream);
- if (status == Z_OK) {
- status = Z_BUF_ERROR;
- }
- } else {
- status = deflateEnd(&stream);
- }
- }
-
- if (status == Z_OK) {
- s2 = erealloc(s2,stream.total_out + 1); /* resize to buffer to the "right" size */
- s2[ stream.total_out ] = '\0';
- RETURN_STRINGL(s2, stream.total_out, 0);
- } else {
- efree(s2);
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", zError(status));
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-/* {{{ proto string gzinflate(string data [, int length])
- Unzip a gzip-compressed string */
-PHP_FUNCTION(gzinflate)
-{
- int data_len, status;
- unsigned int factor=1, maxfactor=16;
- long limit = 0;
- unsigned long plength=0, length;
- char *data, *s1=NULL, *s2=NULL;
- z_stream stream;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|l", &data, &data_len, &limit) == FAILURE) {
- return;
- }
-
- if (limit < 0) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "length (%ld) must be greater or equal zero", limit);
- RETURN_FALSE;
- }
- plength = limit;
-
- /*
- stream.avail_out wants to know the output data length
- if none was given as a parameter
- we try from input length * 2 up to input length * 2^15
- doubling it whenever it wasn't big enough
- that should be enaugh for all real life cases
- */
-
- stream.zalloc = (alloc_func) Z_NULL;
- stream.zfree = (free_func) Z_NULL;
-
- do {
- length = plength ? plength : (unsigned long)data_len * (1 << factor++);
- s2 = (char *) erealloc(s1, length);
-
- if (!s2 && s1) {
- efree(s1);
- RETURN_FALSE;
- }
-
- stream.next_in = (Bytef *) data;
- stream.avail_in = (uInt) data_len + 1; /* there is room for \0 */
-
- stream.next_out = s2;
- stream.avail_out = (uInt) length;
-
- /* init with -MAX_WBITS disables the zlib internal headers */
- status = inflateInit2(&stream, -MAX_WBITS);
- if (status == Z_OK) {
- status = inflate(&stream, Z_FINISH);
- if (status != Z_STREAM_END) {
- inflateEnd(&stream);
- if (status == Z_OK) {
- status = Z_BUF_ERROR;
- }
- } else {
- status = inflateEnd(&stream);
- }
- }
- s1 = s2;
-
- } while ((status == Z_BUF_ERROR) && (!plength) && (factor < maxfactor));
-
- if (status == Z_OK) {
- s2 = erealloc(s2, stream.total_out + 1); /* room for \0 */
- s2[ stream.total_out ] = '\0';
- RETURN_STRINGL(s2, stream.total_out, 0);
- } else {
- efree(s2);
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", zError(status));
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-/* {{{ proto string zlib_get_coding_type(void)
- Returns the coding type used for output compression */
-PHP_FUNCTION(zlib_get_coding_type)
-{
- switch (ZLIBG(compression_coding)) {
- case CODING_GZIP:
- RETURN_STRINGL("gzip", sizeof("gzip") - 1, 1);
-
- case CODING_DEFLATE:
- RETURN_STRINGL("deflate", sizeof("deflate") - 1, 1);
- }
-
- RETURN_FALSE;
-}
-
-/* {{{ php_do_deflate
- */
-static int php_do_deflate(uint str_length, Bytef **p_buffer, uint *p_buffer_len, zend_bool do_start, zend_bool do_end TSRMLS_DC)
-{
- Bytef *buffer;
- uInt prev_outlen, outlen;
- int err;
- int start_offset = ((do_start && ZLIBG(compression_coding) == CODING_GZIP) ? 10 : 0);
- int end_offset = (do_end ? 8 : 0);
-
- outlen = (uint) (sizeof(char) * (str_length * 1.001f + 12) + 1); /* leave some room for a trailing \0 */
- if ((outlen + start_offset + end_offset) > *p_buffer_len) {
- buffer = (Bytef *) emalloc(outlen + start_offset + end_offset);
- } else {
- buffer = *p_buffer;
- }
-
- ZLIBG(stream).next_out = buffer + start_offset;
- ZLIBG(stream).avail_out = outlen;
-
- err = deflate(&ZLIBG(stream), Z_SYNC_FLUSH);
- while (err == Z_OK && !ZLIBG(stream).avail_out) {
- prev_outlen = outlen;
- outlen *= 3;
- if ((outlen + start_offset + end_offset) > *p_buffer_len) {
- buffer = erealloc(buffer, outlen + start_offset + end_offset);
- }
-
- ZLIBG(stream).next_out = buffer + start_offset + prev_outlen;
- ZLIBG(stream).avail_out = prev_outlen * 2;
-
- err = deflate(&ZLIBG(stream), Z_SYNC_FLUSH);
- }
-
- if (do_end) {
- err = deflate(&ZLIBG(stream), Z_FINISH);
- }
-
- *p_buffer = buffer;
- *p_buffer_len = outlen - ZLIBG(stream).avail_out;
-
- return err;
-}
-/* }}} */
-
-/* {{{ php_deflate_string
- */
-static int php_deflate_string(const char *str, uint str_length, char **newstr, uint *new_length, zend_bool do_start, zend_bool do_end TSRMLS_DC)
-{
- int err;
-
- if (do_start) {
- ZLIBG(stream).zalloc = Z_NULL;
- ZLIBG(stream).zfree = Z_NULL;
- ZLIBG(stream).opaque = Z_NULL;
-
- switch (ZLIBG(compression_coding)) {
- case CODING_GZIP:
- /* windowBits is passed < 0 to suppress zlib header & trailer */
- if (deflateInit2(&ZLIBG(stream), ZLIBG(output_compression_level), Z_DEFLATED, -MAX_WBITS, MAX_MEM_LEVEL, Z_DEFAULT_STRATEGY) != Z_OK) {
- /* TODO: print out error */
- return FAILURE;
- }
-
- ZLIBG(crc) = crc32(0L, Z_NULL, 0);
- break;
-
- case CODING_DEFLATE:
- if (deflateInit(&ZLIBG(stream), ZLIBG(output_compression_level)) != Z_OK) {
- /* TODO: print out error */
- return FAILURE;
- }
- break;
- }
- }
-
- ZLIBG(stream).next_in = (Bytef *) str;
- ZLIBG(stream).avail_in = (uInt) str_length;
-
- if (ZLIBG(compression_coding) == CODING_GZIP) {
- ZLIBG(crc) = crc32(ZLIBG(crc), (const Bytef *) str, str_length);
- }
-
- err = php_do_deflate(str_length, (Bytef **) newstr, new_length, do_start, do_end TSRMLS_CC);
- /* TODO: error handling (err may be Z_STREAM_ERROR, Z_BUF_ERROR, ?) */
-
- if (do_start && ZLIBG(compression_coding) == CODING_GZIP) {
- /* Write a very simple .gz header: */
- (*newstr)[0] = gz_magic[0];
- (*newstr)[1] = gz_magic[1];
- (*newstr)[2] = Z_DEFLATED;
- (*newstr)[3] = (*newstr)[4] = (*newstr)[5] = (*newstr)[6] = (*newstr)[7] = (*newstr)[8] = 0;
- (*newstr)[9] = OS_CODE;
- *new_length += 10;
- }
- if (do_end) {
- if (ZLIBG(compression_coding) == CODING_GZIP) {
- char *trailer = (*newstr) + (*new_length);
-
- /* write crc & stream.total_in in LSB order */
- trailer[0] = (char) ZLIBG(crc) & 0xFF;
- trailer[1] = (char) (ZLIBG(crc) >> 8) & 0xFF;
- trailer[2] = (char) (ZLIBG(crc) >> 16) & 0xFF;
- trailer[3] = (char) (ZLIBG(crc) >> 24) & 0xFF;
- trailer[4] = (char) ZLIBG(stream).total_in & 0xFF;
- trailer[5] = (char) (ZLIBG(stream).total_in >> 8) & 0xFF;
- trailer[6] = (char) (ZLIBG(stream).total_in >> 16) & 0xFF;
- trailer[7] = (char) (ZLIBG(stream).total_in >> 24) & 0xFF;
- trailer[8] = '\0';
- *new_length += 8;
- }
- deflateEnd(&ZLIBG(stream));
- }
-
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ proto string gzencode(string data [, int level [, int encoding_mode]])
- GZ encode a string */
-PHP_FUNCTION(gzencode)
-{
- char *data, *s2;
- int data_len;
- long level = Z_DEFAULT_COMPRESSION, coding = CODING_GZIP;
- int status;
- z_stream stream;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|ll", &data, &data_len, &level, &coding) == FAILURE) {
- return;
- }
-
- if ((level < -1) || (level > 9)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "compression level(%ld) must be within -1..9", level);
- RETURN_FALSE;
- }
-
- if ((coding != CODING_GZIP) && (coding != CODING_DEFLATE)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "encoding mode must be FORCE_GZIP or FORCE_DEFLATE");
- RETURN_FALSE;
- }
-
- stream.zalloc = Z_NULL;
- stream.zfree = Z_NULL;
- stream.opaque = Z_NULL;
-
- stream.next_in = (Bytef *) data;
- stream.avail_in = data_len;
-
- stream.avail_out = stream.avail_in + (stream.avail_in / 1000) + 15 + 1; /* room for \0 */
- s2 = (char *) emalloc(stream.avail_out + GZIP_HEADER_LENGTH + (coding == CODING_GZIP ? GZIP_FOOTER_LENGTH : 0));
-
- /* add gzip file header */
- s2[0] = gz_magic[0];
- s2[1] = gz_magic[1];
- s2[2] = Z_DEFLATED;
- s2[3] = s2[4] = s2[5] = s2[6] = s2[7] = s2[8] = 0; /* time set to 0 */
- s2[9] = OS_CODE;
-
- stream.next_out = &(s2[GZIP_HEADER_LENGTH]);
-
- switch (coding) {
- case CODING_GZIP:
- /* windowBits is passed < 0 to suppress zlib header & trailer */
- if ((status = deflateInit2(&stream, level, Z_DEFLATED, -MAX_WBITS, MAX_MEM_LEVEL, Z_DEFAULT_STRATEGY)) != Z_OK) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", zError(status));
- RETURN_FALSE;
- }
-
- break;
- case CODING_DEFLATE:
- if ((status = deflateInit(&stream, level)) != Z_OK) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", zError(status));
- RETURN_FALSE;
- }
- break;
- }
-
- status = deflate(&stream, Z_FINISH);
- if (status != Z_STREAM_END) {
- deflateEnd(&stream);
- if (status == Z_OK) {
- status = Z_BUF_ERROR;
- }
- } else {
- status = deflateEnd(&stream);
- }
-
- if (status == Z_OK) {
- /* resize to buffer to the "right" size */
- s2 = erealloc(s2, stream.total_out + GZIP_HEADER_LENGTH + (coding == CODING_GZIP ? GZIP_FOOTER_LENGTH : 0) + 1);
-
- if (coding == CODING_GZIP) {
- char *trailer = s2 + (stream.total_out + GZIP_HEADER_LENGTH);
- uLong crc = crc32(0L, Z_NULL, 0);
-
- crc = crc32(crc, (const Bytef *) data, data_len);
-
- /* write crc & stream.total_in in LSB order */
- trailer[0] = (char) crc & 0xFF;
- trailer[1] = (char) (crc >> 8) & 0xFF;
- trailer[2] = (char) (crc >> 16) & 0xFF;
- trailer[3] = (char) (crc >> 24) & 0xFF;
- trailer[4] = (char) stream.total_in & 0xFF;
- trailer[5] = (char) (stream.total_in >> 8) & 0xFF;
- trailer[6] = (char) (stream.total_in >> 16) & 0xFF;
- trailer[7] = (char) (stream.total_in >> 24) & 0xFF;
- trailer[8] = '\0';
- }
- RETURN_STRINGL(s2, stream.total_out + GZIP_HEADER_LENGTH + (coding == CODING_GZIP ? GZIP_FOOTER_LENGTH : 0), 0);
- } else {
- efree(s2);
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", zError(status));
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-/* {{{ php_ob_gzhandler_check
- */
-int php_ob_gzhandler_check(TSRMLS_D)
-{
- /* check for wrong usages */
- if (OG(ob_nesting_level > 0)) {
- if (php_ob_handler_used("ob_gzhandler" TSRMLS_CC)) {
- php_error_docref("ref.outcontrol" TSRMLS_CC, E_WARNING, "output handler 'ob_gzhandler' cannot be used twice");
- return FAILURE;
- }
- if (php_ob_handler_used("mb_output_handler" TSRMLS_CC)) {
- php_error_docref("ref.outcontrol" TSRMLS_CC, E_WARNING, "output handler 'ob_gzhandler' cannot be used after 'mb_output_handler'");
- return FAILURE;
- }
- if (php_ob_handler_used("URL-Rewriter" TSRMLS_CC)) {
- php_error_docref("ref.outcontrol" TSRMLS_CC, E_WARNING, "output handler 'ob_gzhandler' cannot be used after 'URL-Rewriter'");
- return FAILURE;
- }
- if (php_ob_init_conflict("ob_gzhandler", "zlib output compression" TSRMLS_CC)) {
- return FAILURE;
- }
- }
-
- return SUCCESS;
-}
-
-/* }}} */
-
-/* {{{ proto string ob_gzhandler(string str, int mode)
- Encode str based on accept-encoding setting - designed to be called from ob_start() */
-PHP_FUNCTION(ob_gzhandler)
-{
- char *string;
- int string_len;
- long mode;
- zval **a_encoding;
- zend_bool return_original = 0;
- zend_bool do_start, do_end;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "sl", &string, &string_len, &mode) == FAILURE) {
- return;
- }
-
- if(ZLIBG(ob_gzhandler_status) == -1)
- RETURN_FALSE;
-
- zend_is_auto_global("_SERVER", sizeof("_SERVER")-1 TSRMLS_CC);
-
- if (!PG(http_globals)[TRACK_VARS_SERVER]
- || zend_hash_find(PG(http_globals)[TRACK_VARS_SERVER]->value.ht, "HTTP_ACCEPT_ENCODING", sizeof("HTTP_ACCEPT_ENCODING"), (void **) &a_encoding) == FAILURE
- ) {
- ZLIBG(ob_gzhandler_status) = -1;
- RETURN_FALSE;
- }
-
- convert_to_string_ex(a_encoding);
- if (php_memnstr(Z_STRVAL_PP(a_encoding), "gzip", 4, Z_STRVAL_PP(a_encoding) + Z_STRLEN_PP(a_encoding))) {
- ZLIBG(compression_coding) = CODING_GZIP;
- } else if (php_memnstr(Z_STRVAL_PP(a_encoding), "deflate", 7, Z_STRVAL_PP(a_encoding) + Z_STRLEN_PP(a_encoding))) {
- ZLIBG(compression_coding) = CODING_DEFLATE;
- } else {
- ZLIBG(ob_gzhandler_status) = -1;
- RETURN_FALSE;
- }
-
- do_start = ((mode & PHP_OUTPUT_HANDLER_START) ? 1 : 0);
- do_end = ((mode & PHP_OUTPUT_HANDLER_END) ? 1 : 0);
- Z_STRVAL_P(return_value) = NULL;
- Z_STRLEN_P(return_value) = 0;
-
- if (php_deflate_string(string, string_len, &Z_STRVAL_P(return_value), &Z_STRLEN_P(return_value), do_start, do_end TSRMLS_CC) == SUCCESS) {
- Z_TYPE_P(return_value) = IS_STRING;
- if (do_start) {
- switch (ZLIBG(compression_coding)) {
- case CODING_GZIP:
- if (sapi_add_header("Content-Encoding: gzip", sizeof("Content-Encoding: gzip") - 1, 1) == FAILURE) {
- return_original = 1;
- }
- if (sapi_add_header_ex("Vary: Accept-Encoding", sizeof("Vary: Accept-Encoding") - 1, 1, 0 TSRMLS_CC)==FAILURE) {
- return_original = 1;
- }
- break;
- case CODING_DEFLATE:
- if (sapi_add_header("Content-Encoding: deflate", sizeof("Content-Encoding: deflate") - 1, 1) == FAILURE) {
- return_original = 1;
- }
- if (sapi_add_header_ex("Vary: Accept-Encoding", sizeof("Vary: Accept-Encoding") - 1, 1, 0 TSRMLS_CC)==FAILURE) {
- return_original = 1;
- }
- break;
- default:
- return_original = 1;
- break;
- }
- }
-
- if (return_original) {
- zval_dtor(return_value);
- }
-
- } else {
- return_original = 1;
- }
-
- if (return_original) {
- /* return the original string */
- RETURN_STRINGL(string, string_len, 1);
- }
-}
-/* }}} */
-
-/* {{{ php_gzip_output_handler
- */
-static void php_gzip_output_handler(char *output, uint output_len, char **handled_output, uint *handled_output_len, int mode TSRMLS_DC)
-{
- zend_bool do_start, do_end;
-
- if (!ZLIBG(output_compression)) {
- *handled_output = NULL;
- } else {
- do_start = (mode & PHP_OUTPUT_HANDLER_START ? 1 : 0);
- do_end = (mode & PHP_OUTPUT_HANDLER_END ? 1 : 0);
- if (php_deflate_string(output, output_len, handled_output, handled_output_len, do_start, do_end TSRMLS_CC) != SUCCESS) {
- zend_error(E_ERROR, "Compression failed");
- }
- }
-}
-/* }}} */
-
-/* {{{ php_enable_output_compression
- */
-int php_enable_output_compression(int buffer_size TSRMLS_DC)
-{
- zval **a_encoding;
-
- zend_is_auto_global("_SERVER", sizeof("_SERVER")-1 TSRMLS_CC);
-
- if (!PG(http_globals)[TRACK_VARS_SERVER]
- || zend_hash_find(PG(http_globals)[TRACK_VARS_SERVER]->value.ht, "HTTP_ACCEPT_ENCODING", sizeof("HTTP_ACCEPT_ENCODING"), (void **) &a_encoding) == FAILURE
- ) {
- return FAILURE;
- }
-
- convert_to_string_ex(a_encoding);
-
- if (php_memnstr(Z_STRVAL_PP(a_encoding), "gzip", 4, Z_STRVAL_PP(a_encoding) + Z_STRLEN_PP(a_encoding))) {
- ZLIBG(compression_coding) = CODING_GZIP;
- } else if (php_memnstr(Z_STRVAL_PP(a_encoding), "deflate", 7, Z_STRVAL_PP(a_encoding) + Z_STRLEN_PP(a_encoding))) {
- ZLIBG(compression_coding) = CODING_DEFLATE;
- } else {
- return FAILURE;
- }
-
- php_ob_set_internal_handler(php_gzip_output_handler, (uint)buffer_size, "zlib output compression", 0 TSRMLS_CC);
-
- if (ZLIBG(output_handler) && strlen(ZLIBG(output_handler))) {
- php_start_ob_buffer_named(ZLIBG(output_handler), 0, 1 TSRMLS_CC);
- }
- return SUCCESS;
-}
-/* }}} */
-
-/*
- * 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/zlib/zlib.dsp b/ext/zlib/zlib.dsp
deleted file mode 100644
index 8986bc6f05..0000000000
--- a/ext/zlib/zlib.dsp
+++ /dev/null
@@ -1,121 +0,0 @@
-# Microsoft Developer Studio Project File - Name="zlib" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=zlib - Win32 Release_TS
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "zlib.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "zlib.mak" CFG="zlib - Win32 Release_TS"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "zlib - Win32 Release_TS" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "zlib - Win32 Debug_TS" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "zlib - Win32 Release_TS"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release_TS"
-# PROP BASE Intermediate_Dir "Release_TS"
-# PROP BASE Ignore_Export_Lib 0
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release_TS"
-# PROP Intermediate_Dir "Release_TS"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MT /W3 /GX /O2 /I "..\.." /I "..\..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\..\TSRM" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "COMPILE_DL_ZLIB" /D ZTS=1 /YX /FD /c
-# ADD CPP /nologo /MD /W3 /GX /O2 /I "..\.." /I "..\..\main" /I "..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\TSRM" /I "..\..\..\php_build\includes" /D ZEND_DEBUG=0 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "ZLIB_EXPORTS" /D "COMPILE_DL_ZLIB" /D ZTS=1 /D "ZEND_WIN32" /D "PHP_WIN32" /D HAVE_ZLIB=1 /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x406 /d "NDEBUG"
-# ADD RSC /l 0x406 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib php5ts.lib /nologo /dll /machine:I386
-# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib php5ts.lib zlib.lib /nologo /dll /machine:I386 /out:"..\..\Release_TS/php_zlib.dll" /libpath:"..\..\Release_TS" /libpath:"..\..\..\php_build\zlib\Release" /libpath:"..\..\Release_TS_Inline"
-
-!ELSEIF "$(CFG)" == "zlib - Win32 Debug_TS"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Debug_TS"
-# PROP BASE Intermediate_Dir "Debug_TS"
-# PROP BASE Ignore_Export_Lib 0
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Debug_TS"
-# PROP Intermediate_Dir "Debug_TS"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MT /W3 /GX /O2 /I "..\.." /I "..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\TSRM" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "COMPILE_DL_ZLIB" /D ZTS=1 /YX /FD /c
-# ADD CPP /nologo /MDd /W3 /GX /O2 /I "..\.." /I "..\..\main" /I "..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\TSRM" /I "..\..\..\php_build\includes" /D ZEND_DEBUG=1 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "ZLIB_EXPORTS" /D "COMPILE_DL_ZLIB" /D ZTS=1 /D "ZEND_WIN32" /D "PHP_WIN32" /D HAVE_ZLIB=1 /FR /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x406 /d "NDEBUG"
-# ADD RSC /l 0x406 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib php5ts_debug.lib /nologo /dll /machine:I386
-# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib php5ts_debug.lib zlib.lib /nologo /dll /machine:I386 /out:"..\..\Debug_TS/php_zlib.dll" /libpath:"..\..\Debug_TS" /libpath:"..\..\..\php_build\zlib\Debug"
-
-!ENDIF
-
-# Begin Target
-
-# Name "zlib - Win32 Release_TS"
-# Name "zlib - Win32 Debug_TS"
-# Begin Group "Source Files"
-
-# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
-# Begin Source File
-
-SOURCE=.\zlib.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\zlib_fopen_wrapper.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\zlib_filter.c
-# End Source File
-# End Group
-# Begin Group "Header Files"
-
-# PROP Default_Filter "h;hpp;hxx;hm;inl"
-# Begin Source File
-
-SOURCE=.\php_zlib.h
-# End Source File
-# End Group
-# Begin Group "Resource Files"
-
-# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
-# End Group
-# End Target
-# End Project
diff --git a/ext/zlib/zlib_filter.c b/ext/zlib/zlib_filter.c
deleted file mode 100644
index dafbfaa13c..0000000000
--- a/ext/zlib/zlib_filter.c
+++ /dev/null
@@ -1,421 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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. |
- +----------------------------------------------------------------------+
- | Authors: Sara Golemon (pollita@php.net) |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#include "php.h"
-#include "php_zlib.h"
-
-/* {{{ data structure */
-
-/* Passed as opaque in malloc callbacks */
-typedef struct _php_zlib_filter_data {
- int persistent;
- z_stream strm;
- char *inbuf;
- size_t inbuf_len;
- char *outbuf;
- size_t outbuf_len;
-} php_zlib_filter_data;
-
-/* }}} */
-
-/* {{{ Memory management wrappers */
-
-static voidpf php_zlib_alloc(voidpf opaque, uInt items, uInt size)
-{
- return (voidpf)safe_pemalloc(items, size, 0, ((php_zlib_filter_data*)opaque)->persistent);
-}
-
-static void php_zlib_free(voidpf opaque, voidpf address)
-{
- pefree((void*)address, ((php_zlib_filter_data*)opaque)->persistent);
-}
-/* }}} */
-
-/* {{{ zlib.inflate filter implementation */
-
-static php_stream_filter_status_t php_zlib_inflate_filter(
- php_stream *stream,
- php_stream_filter *thisfilter,
- php_stream_bucket_brigade *buckets_in,
- php_stream_bucket_brigade *buckets_out,
- size_t *bytes_consumed,
- int flags
- TSRMLS_DC)
-{
- php_zlib_filter_data *data;
- php_stream_bucket *bucket;
- size_t consumed = 0, original_out, original_in;
- int status;
- php_stream_filter_status_t exit_status = PSFS_FEED_ME;
- z_stream *streamp;
-
- if (!thisfilter || !thisfilter->abstract) {
- /* Should never happen */
- return PSFS_ERR_FATAL;
- }
-
- data = (php_zlib_filter_data *)(thisfilter->abstract);
- streamp = &(data->strm);
- original_in = data->strm.total_in;
- original_out = data->strm.total_out;
-
- while (buckets_in->head) {
- size_t bin = 0, desired;
-
- bucket = php_stream_bucket_make_writeable(buckets_in->head TSRMLS_CC);
- while (bin < bucket->buflen) {
- desired = bucket->buflen - bin;
- if (desired > data->inbuf_len) {
- desired = data->inbuf_len;
- }
- memcpy(data->strm.next_in, bucket->buf + bin, desired);
- 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) {
- /* Something bad happened */
- php_stream_bucket_delref(bucket TSRMLS_CC);
- return PSFS_ERR_FATAL;
- }
- desired -= data->strm.avail_in; /* desired becomes what we consumed this round through */
- data->strm.next_in = data->inbuf;
- data->strm.avail_in = 0;
- consumed += desired;
- bin += desired;
-
- if (data->strm.avail_out < data->outbuf_len) {
- php_stream_bucket *out_bucket;
- size_t bucketlen = data->outbuf_len - data->strm.avail_out;
- out_bucket = php_stream_bucket_new(stream, estrndup(data->outbuf, bucketlen), bucketlen, 1, 0 TSRMLS_CC);
- php_stream_bucket_append(buckets_out, out_bucket TSRMLS_CC);
- data->strm.avail_out = data->outbuf_len;
- data->strm.next_out = data->outbuf;
- exit_status = PSFS_PASS_ON;
- }
- }
- php_stream_bucket_delref(bucket TSRMLS_CC);
- }
-
- if (flags & PSFS_FLAG_FLUSH_CLOSE) {
- /* Spit it out! */
- status = Z_OK;
- while (status == Z_OK) {
- status = inflate(&(data->strm), Z_FINISH);
- if (data->strm.avail_out < data->outbuf_len) {
- size_t bucketlen = data->outbuf_len - data->strm.avail_out;
-
- bucket = php_stream_bucket_new(stream, estrndup(data->outbuf, bucketlen), bucketlen, 1, 0 TSRMLS_CC);
- php_stream_bucket_append(buckets_out, bucket TSRMLS_CC);
- data->strm.avail_out = data->outbuf_len;
- data->strm.next_out = data->outbuf;
- exit_status = PSFS_PASS_ON;
- }
- }
- }
-
- if (bytes_consumed) {
- *bytes_consumed = consumed;
- }
-
- return exit_status;
-}
-
-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));
- pefree(data->inbuf, data->persistent);
- pefree(data->outbuf, data->persistent);
- pefree(data, data->persistent);
- }
-}
-
-static php_stream_filter_ops php_zlib_inflate_ops = {
- php_zlib_inflate_filter,
- php_zlib_inflate_dtor,
- "zlib.inflate"
-};
-/* }}} */
-
-/* {{{ zlib.inflate filter implementation */
-
-static php_stream_filter_status_t php_zlib_deflate_filter(
- php_stream *stream,
- php_stream_filter *thisfilter,
- php_stream_bucket_brigade *buckets_in,
- php_stream_bucket_brigade *buckets_out,
- size_t *bytes_consumed,
- int flags
- TSRMLS_DC)
-{
- php_zlib_filter_data *data;
- php_stream_bucket *bucket;
- size_t consumed = 0, original_out, original_in;
- int status;
- php_stream_filter_status_t exit_status = PSFS_FEED_ME;
- z_stream *streamp;
-
- if (!thisfilter || !thisfilter->abstract) {
- /* Should never happen */
- return PSFS_ERR_FATAL;
- }
-
- data = (php_zlib_filter_data *)(thisfilter->abstract);
- streamp = &(data->strm);
- original_in = data->strm.total_in;
- original_out = data->strm.total_out;
-
- while (buckets_in->head) {
- size_t bin = 0, desired;
-
- bucket = php_stream_bucket_make_writeable(buckets_in->head TSRMLS_CC);
-
- while (bin < bucket->buflen) {
- desired = bucket->buflen - bin;
- if (desired > data->inbuf_len) {
- desired = data->inbuf_len;
- }
- memcpy(data->strm.next_in, bucket->buf + bin, desired);
- data->strm.avail_in = desired;
-
- status = deflate(&(data->strm), flags & PSFS_FLAG_FLUSH_CLOSE ? Z_FULL_FLUSH : (flags & PSFS_FLAG_FLUSH_INC ? Z_SYNC_FLUSH : Z_NO_FLUSH));
- if (status != Z_OK) {
- /* Something bad happened */
- php_stream_bucket_delref(bucket TSRMLS_CC);
- return PSFS_ERR_FATAL;
- }
- desired -= data->strm.avail_in; /* desired becomes what we consumed this round through */
- data->strm.next_in = data->inbuf;
- data->strm.avail_in = 0;
- consumed += desired;
- bin += desired;
-
- if (data->strm.avail_out < data->outbuf_len) {
- php_stream_bucket *out_bucket;
- size_t bucketlen = data->outbuf_len - data->strm.avail_out;
-
- out_bucket = php_stream_bucket_new(stream, estrndup(data->outbuf, bucketlen), bucketlen, 1, 0 TSRMLS_CC);
- php_stream_bucket_append(buckets_out, out_bucket TSRMLS_CC);
- data->strm.avail_out = data->outbuf_len;
- data->strm.next_out = data->outbuf;
- exit_status = PSFS_PASS_ON;
- }
- }
- php_stream_bucket_delref(bucket TSRMLS_CC);
- }
-
- if (flags & PSFS_FLAG_FLUSH_CLOSE) {
- /* Spit it out! */
- status = Z_OK;
- while (status == Z_OK) {
- status = deflate(&(data->strm), Z_FINISH);
- if (data->strm.avail_out < data->outbuf_len) {
- size_t bucketlen = data->outbuf_len - data->strm.avail_out;
-
- bucket = php_stream_bucket_new(stream, estrndup(data->outbuf, bucketlen), bucketlen, 1, 0 TSRMLS_CC);
- php_stream_bucket_append(buckets_out, bucket TSRMLS_CC);
- data->strm.avail_out = data->outbuf_len;
- data->strm.next_out = data->outbuf;
- exit_status = PSFS_PASS_ON;
- }
- }
- }
-
- if (bytes_consumed) {
- *bytes_consumed = consumed;
- }
- return exit_status;
-}
-
-static void php_zlib_deflate_dtor(php_stream_filter *thisfilter TSRMLS_DC)
-{
- if (thisfilter && thisfilter->abstract) {
- php_zlib_filter_data *data = thisfilter->abstract;
- deflateEnd(&(data->strm));
- pefree(data->inbuf, data->persistent);
- pefree(data->outbuf, data->persistent);
- pefree(data, data->persistent);
- }
-}
-
-static php_stream_filter_ops php_zlib_deflate_ops = {
- php_zlib_deflate_filter,
- php_zlib_deflate_dtor,
- "zlib.deflate"
-};
-
-/* }}} */
-
-/* {{{ zlib.* common factory */
-
-static php_stream_filter *php_zlib_filter_create(const char *filtername, zval *filterparams, int persistent TSRMLS_DC)
-{
- php_stream_filter_ops *fops = NULL;
- php_zlib_filter_data *data;
- int status;
-
- /* Create this filter */
- data = pecalloc(1, sizeof(php_zlib_filter_data), persistent);
- if (!data) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Failed allocating %d bytes.", sizeof(php_zlib_filter_data));
- return NULL;
- }
-
- /* Circular reference */
- data->strm.opaque = (voidpf) data;
-
- data->strm.zalloc = (alloc_func) php_zlib_alloc;
- data->strm.zfree = (free_func) php_zlib_free;
- data->strm.avail_out = data->outbuf_len = data->inbuf_len = 2048;
- data->strm.next_in = data->inbuf = (Bytef *) pemalloc(data->inbuf_len, persistent);
- if (!data->inbuf) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Failed allocating %d bytes.", data->inbuf_len);
- pefree(data, persistent);
- return NULL;
- }
- data->strm.avail_in = 0;
- data->strm.next_out = data->outbuf = (Bytef *) pemalloc(data->outbuf_len, persistent);
- if (!data->outbuf) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Failed allocating %d bytes.", data->outbuf_len);
- pefree(data->inbuf, persistent);
- pefree(data, persistent);
- return NULL;
- }
-
- data->strm.data_type = Z_ASCII;
-
- if (strcasecmp(filtername, "zlib.inflate") == 0) {
- int windowBits = MAX_WBITS;
-
- if (filterparams) {
- zval **tmpzval;
-
- if ((Z_TYPE_P(filterparams) == IS_ARRAY || Z_TYPE_P(filterparams) == IS_OBJECT) &&
- zend_hash_find(HASH_OF(filterparams), "window", sizeof("window"), (void **) &tmpzval) == SUCCESS) {
- /* log-2 base of history window (9 - 15) */
- SEPARATE_ZVAL(tmpzval);
- convert_to_long_ex(tmpzval);
- if (Z_LVAL_PP(tmpzval) < 9 || Z_LVAL_PP(tmpzval) > MAX_WBITS) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid parameter give for window size. (%ld)", Z_LVAL_PP(tmpzval));
- } else {
- windowBits = Z_LVAL_PP(tmpzval);
- }
- zval_ptr_dtor(tmpzval);
- }
- }
-
- /* RFC 1951 Inflate */
- status = inflateInit2(&(data->strm), windowBits);
- fops = &php_zlib_inflate_ops;
- } else if (strcasecmp(filtername, "zlib.deflate") == 0) {
- /* RFC 1951 Deflate */
- int level = Z_DEFAULT_COMPRESSION;
- int windowBits = MAX_WBITS;
- int memLevel = MAX_MEM_LEVEL;
-
-
- if (filterparams) {
- zval **tmpzval;
-
- /* filterparams can either be a scalar value to indicate compression level (shortcut method)
- Or can be a hash containing one or more of 'window', 'memory', and/or 'level' members. */
-
- switch (Z_TYPE_P(filterparams)) {
- case IS_ARRAY:
- case IS_OBJECT:
- if (zend_hash_find(HASH_OF(filterparams), "memory", sizeof("memory"), (void**) &tmpzval) == SUCCESS) {
- /* Memory Level (1 - 9) */
- SEPARATE_ZVAL(tmpzval);
- convert_to_long_ex(tmpzval);
- if (Z_LVAL_PP(tmpzval) < 1 || Z_LVAL_PP(tmpzval) > MAX_MEM_LEVEL) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid parameter give for memory level. (%ld)", Z_LVAL_PP(tmpzval));
- } else {
- memLevel = Z_LVAL_PP(tmpzval);
- }
- zval_ptr_dtor(tmpzval);
- }
-
- if (zend_hash_find(HASH_OF(filterparams), "window", sizeof("window"), (void**) &tmpzval) == SUCCESS) {
- /* log-2 base of history window (9 - 15) */
- SEPARATE_ZVAL(tmpzval);
- convert_to_long_ex(tmpzval);
- if (Z_LVAL_PP(tmpzval) < 9 || Z_LVAL_PP(tmpzval) > MAX_WBITS) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid parameter give for window size. (%ld)", Z_LVAL_PP(tmpzval));
- } else {
- windowBits = Z_LVAL_PP(tmpzval);
- }
- zval_ptr_dtor(tmpzval);
- }
-
- if (zend_hash_find(HASH_OF(filterparams), "level", sizeof("level"), (void**) &tmpzval) == SUCCESS) {
- /* Psuedo pass through to catch level validating code */
- goto factory_setlevel;
- }
- break;
- case IS_STRING:
- case IS_DOUBLE:
- case IS_LONG:
- tmpzval = &filterparams;
-factory_setlevel:
- /* Set compression level within reason (-1 == default, 0 == none, 1-9 == least to most compression */
- SEPARATE_ZVAL(tmpzval);
- convert_to_long_ex(tmpzval);
- if (Z_LVAL_PP(tmpzval) < -1 || Z_LVAL_PP(tmpzval) > 9) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid compression level specified. (%ld)", Z_LVAL_PP(tmpzval));
- } else {
- level = Z_LVAL_PP(tmpzval);
- }
- zval_ptr_dtor(tmpzval);
- break;
- default:
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid filter parameter, ignored.");
- }
- }
- status = deflateInit2(&(data->strm), level, Z_DEFLATED, windowBits, memLevel, 0);
- fops = &php_zlib_deflate_ops;
- } else {
- status = Z_DATA_ERROR;
- }
-
- if (status != Z_OK) {
- /* Unspecified (probably strm) error, let stream-filter error do its own whining */
- pefree(data->strm.next_in, persistent);
- pefree(data->strm.next_out, persistent);
- pefree(data, persistent);
- return NULL;
- }
-
- return php_stream_filter_alloc(fops, data, persistent);
-}
-
-php_stream_filter_factory php_zlib_filter_factory = {
- php_zlib_filter_create
-};
-/* }}} */
-
-/*
- * 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/zlib/zlib_fopen_wrapper.c b/ext/zlib/zlib_fopen_wrapper.c
deleted file mode 100644
index 69a5a9a09e..0000000000
--- a/ext/zlib/zlib_fopen_wrapper.c
+++ /dev/null
@@ -1,188 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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@thebrainroom.com>, based on work by: |
- | Hartmut Holzgraefe <hholzgra@php.net> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-#define _GNU_SOURCE
-
-#include "php.h"
-#include "php_zlib.h"
-#include "fopen_wrappers.h"
-
-struct php_gz_stream_data_t {
- gzFile gz_file;
- php_stream *stream;
-};
-
-static size_t php_gziop_read(php_stream *stream, char *buf, size_t count TSRMLS_DC)
-{
- struct php_gz_stream_data_t *self = (struct php_gz_stream_data_t *) stream->abstract;
- int read;
-
- read = gzread(self->gz_file, buf, count);
-
- if (gzeof(self->gz_file)) {
- stream->eof = 1;
- }
-
- return (read < 0) ? 0 : read;
-}
-
-static size_t php_gziop_write(php_stream *stream, const char *buf, size_t count TSRMLS_DC)
-{
- struct php_gz_stream_data_t *self = (struct php_gz_stream_data_t *) stream->abstract;
- int wrote;
-
- wrote = gzwrite(self->gz_file, (char *) buf, count);
-
- return (wrote < 0) ? 0 : wrote;
-}
-
-static int php_gziop_seek(php_stream *stream, off_t offset, int whence, off_t *newoffs TSRMLS_DC)
-{
- struct php_gz_stream_data_t *self = (struct php_gz_stream_data_t *) stream->abstract;
-
- assert(self != NULL);
-
- *newoffs = gzseek(self->gz_file, offset, whence);
-
- return (*newoffs < 0) ? -1 : 0;
-}
-
-static int php_gziop_close(php_stream *stream, int close_handle TSRMLS_DC)
-{
- struct php_gz_stream_data_t *self = (struct php_gz_stream_data_t *) stream->abstract;
- int ret = EOF;
-
- if (close_handle) {
- if (self->gz_file) {
- ret = gzclose(self->gz_file);
- self->gz_file = NULL;
- }
- if (self->stream) {
- php_stream_close(self->stream);
- self->stream = NULL;
- }
- }
- efree(self);
-
- return ret;
-}
-
-static int php_gziop_flush(php_stream *stream TSRMLS_DC)
-{
- struct php_gz_stream_data_t *self = (struct php_gz_stream_data_t *) stream->abstract;
-
- return gzflush(self->gz_file, Z_SYNC_FLUSH);
-}
-
-php_stream_ops php_stream_gzio_ops = {
- php_gziop_write, php_gziop_read,
- php_gziop_close, php_gziop_flush,
- "ZLIB",
- php_gziop_seek,
- NULL, /* cast */
- NULL, /* stat */
- NULL /* set_option */
-};
-
-php_stream *php_stream_gzopen(php_stream_wrapper *wrapper, char *path, char *mode, int options,
- char **opened_path, php_stream_context *context STREAMS_DC TSRMLS_DC)
-{
- struct php_gz_stream_data_t *self = {0};
- php_stream *stream = NULL, *innerstream = NULL;
-
- /* sanity check the stream: it can be either read-only or write-only */
- if (strchr(mode, '+')) {
- if (options & REPORT_ERRORS) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "cannot open a zlib stream for reading and writing at the same time!");
- }
- return NULL;
- }
-
- self = emalloc(sizeof(*self));
-
- if (strncasecmp("compress.zlib://", path, 16) == 0) {
- path += 16;
- } else if (strncasecmp("zlib:", path, 5) == 0) {
- path += 5;
- }
-
- innerstream = php_stream_open_wrapper(path, mode, STREAM_MUST_SEEK | options | STREAM_WILL_CAST, opened_path);
-
- if (innerstream) {
- int fd;
-
- if (SUCCESS == php_stream_cast(innerstream, PHP_STREAM_AS_FD, (void **) &fd, REPORT_ERRORS)) {
- self->gz_file = gzdopen(fd, mode);
- self->stream = innerstream;
- if (self->gz_file) {
- stream = php_stream_alloc_rel(&php_stream_gzio_ops, self, 0, mode);
- if (stream) {
- stream->flags |= PHP_STREAM_FLAG_NO_BUFFER;
- return stream;
- }
- gzclose(self->gz_file);
- }
- if (options & REPORT_ERRORS) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "gzopen failed");
- }
- } else if (innerstream) {
- php_stream_close(innerstream);
- }
- }
-
- if (stream) {
- php_stream_close(stream);
- }
-
- if (self) {
- efree(self);
- }
-
- return NULL;
-}
-
-static php_stream_wrapper_ops gzip_stream_wops = {
- php_stream_gzopen,
- NULL, /* close */
- NULL, /* stat */
- NULL, /* stat_url */
- NULL, /* opendir */
- "ZLIB",
- NULL, /* unlink */
- NULL, /* rename */
- NULL, /* mkdir */
- NULL /* rmdir */
-};
-
-php_stream_wrapper php_stream_gzip_wrapper = {
- &gzip_stream_wops,
- NULL,
- 0, /* is_url */
-};
-
-/*
- * 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/zlib/zlib_win32_howto.txt b/ext/zlib/zlib_win32_howto.txt
deleted file mode 100644
index a4e01a4845..0000000000
--- a/ext/zlib/zlib_win32_howto.txt
+++ /dev/null
@@ -1,16 +0,0 @@
-Rules for building ZLIB
------------------------
-
-The zlib project requires the folowing files:
-
-php_build\zlib\include\zlib.h
-php_build\zlib\include\zconf.h
-php_build\zlib\lib\zlibstat.lib
-
-php_build is a directory at the same level as php5.
-
-Start Visual Studio, load php_modules.dsw, select the ZLIB projects, and build
-it.
-
-
- \ No newline at end of file
diff --git a/footer b/footer
deleted file mode 100644
index 64d3768113..0000000000
--- a/footer
+++ /dev/null
@@ -1,9 +0,0 @@
-
-/*
- * 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/genfiles b/genfiles
deleted file mode 100755
index c20115f2eb..0000000000
--- a/genfiles
+++ /dev/null
@@ -1,14 +0,0 @@
-#! /bin/sh
-
-STD='make -f Makefile.frag LEX="flex -L" YACC="bison -y -l" srcdir=Zend builddir=Zend'
-
-(eval "$STD Zend/zend_language_parser.c Zend/zend_language_scanner.c Zend/zend_ini_parser.c Zend/zend_ini_scanner.c")
-
-set -x
-bison -d -y -l ext/standard/parsedate.y -o ext/standard/parsedate.c
-
-for f in ext/standard/url_scanner_ex.c ext/standard/var_unserializer.c; do
- cp $f $f.orig
- grep -v '#line ' $f.orig > $f
-done
-
diff --git a/header b/header
deleted file mode 100644
index 032ff0f3e4..0000000000
--- a/header
+++ /dev/null
@@ -1,19 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
diff --git a/ltmain.sh b/ltmain.sh
deleted file mode 100644
index 7e0c9f487c..0000000000
--- a/ltmain.sh
+++ /dev/null
@@ -1,5062 +0,0 @@
-# ltmain.sh - Provide generalized library-building support services.
-# NOTE: Changing this file will not affect anything until you rerun configure.
-#
-# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001
-# Free Software Foundation, Inc.
-# Originally by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful, but
-# WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-#
-# As a special exception to the GNU General Public License, if you
-# distribute this file as part of a program that contains a
-# configuration script generated by Autoconf, you may include it under
-# the same distribution terms that you use for the rest of that program.
-
-# Check that we have a working $echo.
-if test "X$1" = X--no-reexec; then
- # Discard the --no-reexec flag, and continue.
- shift
-elif test "X$1" = X--fallback-echo; then
- # Avoid inline document here, it may be left over
- :
-elif test "X`($echo '\t') 2>/dev/null`" = 'X\t'; then
- # Yippee, $echo works!
- :
-else
- # Restart under the correct shell, and then maybe $echo will work.
- exec $SHELL "$0" --no-reexec ${1+"$@"}
-fi
-
-if test "X$1" = X--fallback-echo; then
- # used as fallback echo
- shift
- cat <<EOF
-$*
-EOF
- exit 0
-fi
-
-# The name of this program.
-progname=`$echo "$0" | ${SED} 's%^.*/%%'`
-modename="$progname"
-
-# Constants.
-PROGRAM=ltmain.sh
-PACKAGE=libtool
-VERSION=1.4.3
-TIMESTAMP=" (1.922.2.110 2002/10/23 01:39:54)"
-
-default_mode=
-help="Try \`$progname --help' for more information."
-magic="%%%MAGIC variable%%%"
-mkdir="mkdir"
-mv="mv -f"
-rm="rm -f"
-
-# Sed substitution that helps us do robust quoting. It backslashifies
-# metacharacters that are still active within double-quoted strings.
-Xsed="${SED}"' -e 1s/^X//'
-sed_quote_subst='s/\([\\`\\"$\\\\]\)/\\\1/g'
-# test EBCDIC or ASCII
-case `echo A|od -x` in
- *[Cc]1*) # EBCDIC based system
- SP2NL="tr '\100' '\n'"
- NL2SP="tr '\r\n' '\100\100'"
- ;;
- *) # Assume ASCII based system
- SP2NL="tr '\040' '\012'"
- NL2SP="tr '\015\012' '\040\040'"
- ;;
-esac
-
-# NLS nuisances.
-# Only set LANG and LC_ALL to C if already set.
-# These must not be set unconditionally because not all systems understand
-# e.g. LANG=C (notably SCO).
-# We save the old values to restore during execute mode.
-if test "${LC_ALL+set}" = set; then
- save_LC_ALL="$LC_ALL"; LC_ALL=C; export LC_ALL
-fi
-if test "${LANG+set}" = set; then
- save_LANG="$LANG"; LANG=C; export LANG
-fi
-
-# Make sure IFS has a sensible default
-: ${IFS=" "}
-
-if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then
- echo "$modename: not configured to build any kind of library" 1>&2
- echo "Fatal configuration error. See the $PACKAGE docs for more information." 1>&2
- exit 1
-fi
-
-# Global variables.
-mode=$default_mode
-nonopt=
-prev=
-prevopt=
-run=
-show="$echo"
-show_help=
-execute_dlfiles=
-lo2o="s/\\.lo\$/.${objext}/"
-o2lo="s/\\.${objext}\$/.lo/"
-
-# Parse our command line options once, thoroughly.
-while test $# -gt 0
-do
- arg="$1"
- shift
-
- case $arg in
- -*=*) optarg=`$echo "X$arg" | $Xsed -e 's/[-_a-zA-Z0-9]*=//'` ;;
- *) optarg= ;;
- esac
-
- # If the previous option needs an argument, assign it.
- if test -n "$prev"; then
- case $prev in
- execute_dlfiles)
- execute_dlfiles="$execute_dlfiles $arg"
- ;;
- *)
- eval "$prev=\$arg"
- ;;
- esac
-
- prev=
- prevopt=
- continue
- fi
-
- # Have we seen a non-optional argument yet?
- case $arg in
- --help)
- show_help=yes
- ;;
-
- --version)
- echo "$PROGRAM (GNU $PACKAGE) $VERSION$TIMESTAMP"
- exit 0
- ;;
-
- --config)
- ${SED} -e '1,/^# ### BEGIN LIBTOOL CONFIG/d' -e '/^# ### END LIBTOOL CONFIG/,$d' $0
- exit 0
- ;;
-
- --debug)
- echo "$progname: enabling shell trace mode"
- set -x
- ;;
-
- --dry-run | -n)
- run=:
- ;;
-
- --features)
- echo "host: $host"
- if test "$build_libtool_libs" = yes; then
- echo "enable shared libraries"
- else
- echo "disable shared libraries"
- fi
- if test "$build_old_libs" = yes; then
- echo "enable static libraries"
- else
- echo "disable static libraries"
- fi
- exit 0
- ;;
-
- --finish) mode="finish" ;;
-
- --mode) prevopt="--mode" prev=mode ;;
- --mode=*) mode="$optarg" ;;
-
- --preserve-dup-deps) duplicate_deps="yes" ;;
-
- --quiet | --silent)
- show=:
- ;;
-
- -dlopen)
- prevopt="-dlopen"
- prev=execute_dlfiles
- ;;
-
- -*)
- $echo "$modename: unrecognized option \`$arg'" 1>&2
- $echo "$help" 1>&2
- exit 1
- ;;
-
- *)
- nonopt="$arg"
- break
- ;;
- esac
-done
-
-if test -n "$prevopt"; then
- $echo "$modename: option \`$prevopt' requires an argument" 1>&2
- $echo "$help" 1>&2
- exit 1
-fi
-
-# If this variable is set in any of the actions, the command in it
-# will be execed at the end. This prevents here-documents from being
-# left over by shells.
-exec_cmd=
-
-if test -z "$show_help"; then
-
- # Infer the operation mode.
- if test -z "$mode"; then
- case $nonopt in
- *cc | *++ | gcc* | *-gcc* | xlc*)
- mode=link
- for arg
- do
- case $arg in
- -c)
- mode=compile
- break
- ;;
- esac
- done
- ;;
- *db | *dbx | *strace | *truss)
- mode=execute
- ;;
- *install*|cp|mv)
- mode=install
- ;;
- *rm)
- mode=uninstall
- ;;
- *)
- # If we have no mode, but dlfiles were specified, then do execute mode.
- test -n "$execute_dlfiles" && mode=execute
-
- # Just use the default operation mode.
- if test -z "$mode"; then
- if test -n "$nonopt"; then
- $echo "$modename: warning: cannot infer operation mode from \`$nonopt'" 1>&2
- else
- $echo "$modename: warning: cannot infer operation mode without MODE-ARGS" 1>&2
- fi
- fi
- ;;
- esac
- fi
-
- # Only execute mode is allowed to have -dlopen flags.
- if test -n "$execute_dlfiles" && test "$mode" != execute; then
- $echo "$modename: unrecognized option \`-dlopen'" 1>&2
- $echo "$help" 1>&2
- exit 1
- fi
-
- # Change the help message to a mode-specific one.
- generic_help="$help"
- help="Try \`$modename --help --mode=$mode' for more information."
-
- # These modes are in order of execution frequency so that they run quickly.
- case $mode in
- # libtool compile mode
- compile)
- modename="$modename: compile"
- # Get the compilation command and the source file.
- base_compile=
- prev=
- lastarg=
- srcfile="$nonopt"
- suppress_output=
-
- user_target=no
- for arg
- do
- case $prev in
- "") ;;
- xcompiler)
- # Aesthetically quote the previous argument.
- prev=
- lastarg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`
-
- case $arg in
- # Double-quote args containing other shell metacharacters.
- # Many Bourne shells cannot handle close brackets correctly
- # in scan sets, so we specify it separately.
- *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"")
- arg="\"$arg\""
- ;;
- esac
-
- # Add the previous argument to base_compile.
- if test -z "$base_compile"; then
- base_compile="$lastarg"
- else
- base_compile="$base_compile $lastarg"
- fi
- continue
- ;;
- esac
-
- # Accept any command-line options.
- case $arg in
- -o)
- if test "$user_target" != "no"; then
- $echo "$modename: you cannot specify \`-o' more than once" 1>&2
- exit 1
- fi
- user_target=next
- ;;
-
- -static)
- build_old_libs=yes
- continue
- ;;
-
- -prefer-pic)
- pic_mode=yes
- continue
- ;;
-
- -prefer-non-pic)
- pic_mode=no
- continue
- ;;
-
- -Xcompiler)
- prev=xcompiler
- continue
- ;;
-
- -Wc,*)
- args=`$echo "X$arg" | $Xsed -e "s/^-Wc,//"`
- lastarg=
- save_ifs="$IFS"; IFS=','
- for arg in $args; do
- IFS="$save_ifs"
-
- # Double-quote args containing other shell metacharacters.
- # Many Bourne shells cannot handle close brackets correctly
- # in scan sets, so we specify it separately.
- case $arg in
- *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"")
- arg="\"$arg\""
- ;;
- esac
- lastarg="$lastarg $arg"
- done
- IFS="$save_ifs"
- lastarg=`$echo "X$lastarg" | $Xsed -e "s/^ //"`
-
- # Add the arguments to base_compile.
- if test -z "$base_compile"; then
- base_compile="$lastarg"
- else
- base_compile="$base_compile $lastarg"
- fi
- continue
- ;;
- esac
-
- case $user_target in
- next)
- # The next one is the -o target name
- user_target=yes
- continue
- ;;
- yes)
- # We got the output file
- user_target=set
- libobj="$arg"
- continue
- ;;
- esac
-
- # Accept the current argument as the source file.
- lastarg="$srcfile"
- srcfile="$arg"
-
- # Aesthetically quote the previous argument.
-
- # Backslashify any backslashes, double quotes, and dollar signs.
- # These are the only characters that are still specially
- # interpreted inside of double-quoted scrings.
- lastarg=`$echo "X$lastarg" | $Xsed -e "$sed_quote_subst"`
-
- # Double-quote args containing other shell metacharacters.
- # Many Bourne shells cannot handle close brackets correctly
- # in scan sets, so we specify it separately.
- case $lastarg in
- *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"")
- lastarg="\"$lastarg\""
- ;;
- esac
-
- # Add the previous argument to base_compile.
- if test -z "$base_compile"; then
- base_compile="$lastarg"
- else
- base_compile="$base_compile $lastarg"
- fi
- done
-
- case $user_target in
- set)
- ;;
- no)
- # Get the name of the library object.
- libobj=`$echo "X$srcfile" | $Xsed -e 's%^.*/%%'`
- ;;
- *)
- $echo "$modename: you must specify a target with \`-o'" 1>&2
- exit 1
- ;;
- esac
-
- # Recognize several different file suffixes.
- # If the user specifies -o file.o, it is replaced with file.lo
- xform='[cCFSfmso]'
- case $libobj in
- *.ada) xform=ada ;;
- *.adb) xform=adb ;;
- *.ads) xform=ads ;;
- *.asm) xform=asm ;;
- *.c++) xform=c++ ;;
- *.cc) xform=cc ;;
- *.cpp) xform=cpp ;;
- *.cxx) xform=cxx ;;
- *.f90) xform=f90 ;;
- *.for) xform=for ;;
- esac
-
- libobj=`$echo "X$libobj" | $Xsed -e "s/\.$xform$/.lo/"`
-
- case $libobj in
- *.lo) obj=`$echo "X$libobj" | $Xsed -e "$lo2o"` ;;
- *)
- $echo "$modename: cannot determine name of library object from \`$libobj'" 1>&2
- exit 1
- ;;
- esac
-
- if test -z "$base_compile"; then
- $echo "$modename: you must specify a compilation command" 1>&2
- $echo "$help" 1>&2
- exit 1
- fi
-
- # Delete any leftover library objects.
- if test "$build_old_libs" = yes; then
- removelist="$obj $libobj"
- else
- removelist="$libobj"
- fi
-
- $run $rm $removelist
- trap "$run $rm $removelist; exit 1" 1 2 15
-
- # On Cygwin there's no "real" PIC flag so we must build both object types
- case $host_os in
- cygwin* | mingw* | pw32* | os2*)
- pic_mode=default
- ;;
- esac
- if test "$pic_mode" = no && test "$deplibs_check_method" != pass_all; then
- # non-PIC code in shared libraries is not supported
- pic_mode=default
- fi
-
- # Calculate the filename of the output object if compiler does
- # not support -o with -c
- if test "$compiler_c_o" = no; then
- output_obj=`$echo "X$srcfile" | $Xsed -e 's%^.*/%%' -e 's%\.[^.]*$%%'`.${objext}
- lockfile="$output_obj.lock"
- removelist="$removelist $output_obj $lockfile"
- trap "$run $rm $removelist; exit 1" 1 2 15
- else
- need_locks=no
- lockfile=
- fi
-
- # Lock this critical section if it is needed
- # We use this script file to make the link, it avoids creating a new file
- if test "$need_locks" = yes; then
- until $run ln "$0" "$lockfile" 2>/dev/null; do
- $show "Waiting for $lockfile to be removed"
- sleep 2
- done
- elif test "$need_locks" = warn; then
- if test -f "$lockfile"; then
- echo "\
-*** ERROR, $lockfile exists and contains:
-`cat $lockfile 2>/dev/null`
-
-This indicates that another process is trying to use the same
-temporary object file, and libtool could not work around it because
-your compiler does not support \`-c' and \`-o' together. If you
-repeat this compilation, it may succeed, by chance, but you had better
-avoid parallel builds (make -j) in this platform, or get a better
-compiler."
-
- $run $rm $removelist
- exit 1
- fi
- echo $srcfile > "$lockfile"
- fi
-
- if test -n "$fix_srcfile_path"; then
- eval srcfile=\"$fix_srcfile_path\"
- fi
-
- # Only build a PIC object if we are building libtool libraries.
- if test "$build_libtool_libs" = yes; then
- # Without this assignment, base_compile gets emptied.
- fbsd_hideous_sh_bug=$base_compile
-
- if test "$pic_mode" != no; then
- # All platforms use -DPIC, to notify preprocessed assembler code.
- command="$base_compile $srcfile $pic_flag -DPIC"
- else
- # Don't build PIC code
- command="$base_compile $srcfile"
- fi
- if test "$build_old_libs" = yes; then
- lo_libobj="$libobj"
- dir=`$echo "X$libobj" | $Xsed -e 's%/[^/]*$%%'`
- if test "X$dir" = "X$libobj"; then
- dir="$objdir"
- else
- dir="$dir/$objdir"
- fi
- libobj="$dir/"`$echo "X$libobj" | $Xsed -e 's%^.*/%%'`
-
- if test -d "$dir"; then
- $show "$rm $libobj"
- $run $rm $libobj
- else
- $show "$mkdir $dir"
- $run $mkdir $dir
- status=$?
- if test $status -ne 0 && test ! -d $dir; then
- exit $status
- fi
- fi
- fi
- if test "$compiler_o_lo" = yes; then
- output_obj="$libobj"
- command="$command -o $output_obj"
- elif test "$compiler_c_o" = yes; then
- output_obj="$obj"
- command="$command -o $output_obj"
- fi
-
- $run $rm "$output_obj"
- $show "$command"
- if $run eval "$command"; then :
- else
- test -n "$output_obj" && $run $rm $removelist
- exit 1
- fi
-
- if test "$need_locks" = warn &&
- test x"`cat $lockfile 2>/dev/null`" != x"$srcfile"; then
- echo "\
-*** ERROR, $lockfile contains:
-`cat $lockfile 2>/dev/null`
-
-but it should contain:
-$srcfile
-
-This indicates that another process is trying to use the same
-temporary object file, and libtool could not work around it because
-your compiler does not support \`-c' and \`-o' together. If you
-repeat this compilation, it may succeed, by chance, but you had better
-avoid parallel builds (make -j) in this platform, or get a better
-compiler."
-
- $run $rm $removelist
- exit 1
- fi
-
- # Just move the object if needed, then go on to compile the next one
- if test x"$output_obj" != x"$libobj"; then
- $show "$mv $output_obj $libobj"
- if $run $mv $output_obj $libobj; then :
- else
- error=$?
- $run $rm $removelist
- exit $error
- fi
- fi
-
- # If we have no pic_flag, then copy the object into place and finish.
- if (test -z "$pic_flag" || test "$pic_mode" != default) &&
- test "$build_old_libs" = yes; then
- # Rename the .lo from within objdir to obj
- if test -f $obj; then
- $show $rm $obj
- $run $rm $obj
- fi
-
- $show "$mv $libobj $obj"
- if $run $mv $libobj $obj; then :
- else
- error=$?
- $run $rm $removelist
- exit $error
- fi
-
- xdir=`$echo "X$obj" | $Xsed -e 's%/[^/]*$%%'`
- if test "X$xdir" = "X$obj"; then
- xdir="."
- else
- xdir="$xdir"
- fi
- baseobj=`$echo "X$obj" | $Xsed -e "s%.*/%%"`
- libobj=`$echo "X$baseobj" | $Xsed -e "$o2lo"`
- # Now arrange that obj and lo_libobj become the same file
- $show "(cd $xdir && $LN_S $baseobj $libobj)"
- if $run eval '(cd $xdir && $LN_S $baseobj $libobj)'; then
- # Unlock the critical section if it was locked
- if test "$need_locks" != no; then
- $run $rm "$lockfile"
- fi
- exit 0
- else
- error=$?
- $run $rm $removelist
- exit $error
- fi
- fi
-
- # Allow error messages only from the first compilation.
- suppress_output=' >/dev/null 2>&1'
- fi
-
- # Only build a position-dependent object if we build old libraries.
- if test "$build_old_libs" = yes; then
- if test "$pic_mode" != yes; then
- # Don't build PIC code
- command="$base_compile $srcfile"
- else
- # All platforms use -DPIC, to notify preprocessed assembler code.
- command="$base_compile $srcfile $pic_flag -DPIC"
- fi
- if test "$compiler_c_o" = yes; then
- command="$command -o $obj"
- output_obj="$obj"
- fi
-
- # Suppress compiler output if we already did a PIC compilation.
- command="$command$suppress_output"
- $run $rm "$output_obj"
- $show "$command"
- if $run eval "$command"; then :
- else
- $run $rm $removelist
- exit 1
- fi
-
- if test "$need_locks" = warn &&
- test x"`cat $lockfile 2>/dev/null`" != x"$srcfile"; then
- echo "\
-*** ERROR, $lockfile contains:
-`cat $lockfile 2>/dev/null`
-
-but it should contain:
-$srcfile
-
-This indicates that another process is trying to use the same
-temporary object file, and libtool could not work around it because
-your compiler does not support \`-c' and \`-o' together. If you
-repeat this compilation, it may succeed, by chance, but you had better
-avoid parallel builds (make -j) in this platform, or get a better
-compiler."
-
- $run $rm $removelist
- exit 1
- fi
-
- # Just move the object if needed
- if test x"$output_obj" != x"$obj"; then
- $show "$mv $output_obj $obj"
- if $run $mv $output_obj $obj; then :
- else
- error=$?
- $run $rm $removelist
- exit $error
- fi
- fi
-
- # Create an invalid libtool object if no PIC, so that we do not
- # accidentally link it into a program.
- if test "$build_libtool_libs" != yes; then
- $show "echo timestamp > $libobj"
- $run eval "echo timestamp > \$libobj" || exit $?
- else
- # Move the .lo from within objdir
- $show "$mv $libobj $lo_libobj"
- if $run $mv $libobj $lo_libobj; then :
- else
- error=$?
- $run $rm $removelist
- exit $error
- fi
- fi
- fi
-
- # Unlock the critical section if it was locked
- if test "$need_locks" != no; then
- $run $rm "$lockfile"
- fi
-
- exit 0
- ;;
-
- # libtool link mode
- link | relink)
- modename="$modename: link"
- case $host in
- *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*)
- # It is impossible to link a dll without this setting, and
- # we shouldn't force the makefile maintainer to figure out
- # which system we are compiling for in order to pass an extra
- # flag for every libtool invokation.
- # allow_undefined=no
-
- # FIXME: Unfortunately, there are problems with the above when trying
- # to make a dll which has undefined symbols, in which case not
- # even a static library is built. For now, we need to specify
- # -no-undefined on the libtool link line when we can be certain
- # that all symbols are satisfied, otherwise we get a static library.
- allow_undefined=yes
- ;;
- *)
- allow_undefined=yes
- ;;
- esac
- libtool_args="$nonopt"
- compile_command="$nonopt"
- finalize_command="$nonopt"
-
- compile_rpath=
- finalize_rpath=
- compile_shlibpath=
- finalize_shlibpath=
- convenience=
- old_convenience=
- deplibs=
- old_deplibs=
- compiler_flags=
- linker_flags=
- dllsearchpath=
- lib_search_path=`pwd`
-
- avoid_version=no
- dlfiles=
- dlprefiles=
- dlself=no
- export_dynamic=no
- export_symbols=
- export_symbols_regex=
- generated=
- libobjs=
- ltlibs=
- module=no
- no_install=no
- objs=
- prefer_static_libs=no
- preload=no
- prev=
- prevarg=
- release=
- rpath=
- xrpath=
- perm_rpath=
- temp_rpath=
- thread_safe=no
- vinfo=
-
- # We need to know -static, to get the right output filenames.
- for arg
- do
- case $arg in
- -all-static | -static)
- if test "X$arg" = "X-all-static"; then
- if test "$build_libtool_libs" = yes && test -z "$link_static_flag"; then
- $echo "$modename: warning: complete static linking is impossible in this configuration" 1>&2
- fi
- if test -n "$link_static_flag"; then
- dlopen_self=$dlopen_self_static
- fi
- else
- if test -z "$pic_flag" && test -n "$link_static_flag"; then
- dlopen_self=$dlopen_self_static
- fi
- fi
- build_libtool_libs=no
- build_old_libs=yes
- prefer_static_libs=yes
- break
- ;;
- esac
- done
-
- # See if our shared archives depend on static archives.
- test -n "$old_archive_from_new_cmds" && build_old_libs=yes
-
- # Go through the arguments, transforming them on the way.
- while test $# -gt 0; do
- arg="$1"
- shift
- case $arg in
- *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"")
- qarg=\"`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`\" ### testsuite: skip nested quoting test
- ;;
- *) qarg=$arg ;;
- esac
- libtool_args="$libtool_args $qarg"
-
- # If the previous option needs an argument, assign it.
- if test -n "$prev"; then
- case $prev in
- output)
- compile_command="$compile_command @OUTPUT@"
- finalize_command="$finalize_command @OUTPUT@"
- ;;
- esac
-
- case $prev in
- dlfiles|dlprefiles)
- if test "$preload" = no; then
- # Add the symbol object into the linking commands.
- compile_command="$compile_command @SYMFILE@"
- finalize_command="$finalize_command @SYMFILE@"
- preload=yes
- fi
- case $arg in
- *.la | *.lo) ;; # We handle these cases below.
- force)
- if test "$dlself" = no; then
- dlself=needless
- export_dynamic=yes
- fi
- prev=
- continue
- ;;
- self)
- if test "$prev" = dlprefiles; then
- dlself=yes
- elif test "$prev" = dlfiles && test "$dlopen_self" != yes; then
- dlself=yes
- else
- dlself=needless
- export_dynamic=yes
- fi
- prev=
- continue
- ;;
- *)
- if test "$prev" = dlfiles; then
- dlfiles="$dlfiles $arg"
- else
- dlprefiles="$dlprefiles $arg"
- fi
- prev=
- continue
- ;;
- esac
- ;;
- expsyms)
- export_symbols="$arg"
- if test ! -f "$arg"; then
- $echo "$modename: symbol file \`$arg' does not exist"
- exit 1
- fi
- prev=
- continue
- ;;
- expsyms_regex)
- export_symbols_regex="$arg"
- prev=
- continue
- ;;
- release)
- release="-$arg"
- prev=
- continue
- ;;
- rpath | xrpath)
- # We need an absolute path.
- case $arg in
- [\\/]* | [A-Za-z]:[\\/]*) ;;
- *)
- $echo "$modename: only absolute run-paths are allowed" 1>&2
- exit 1
- ;;
- esac
- if test "$prev" = rpath; then
- case "$rpath " in
- *" $arg "*) ;;
- *) rpath="$rpath $arg" ;;
- esac
- else
- case "$xrpath " in
- *" $arg "*) ;;
- *) xrpath="$xrpath $arg" ;;
- esac
- fi
- prev=
- continue
- ;;
- xcompiler)
- compiler_flags="$compiler_flags $qarg"
- prev=
- compile_command="$compile_command $qarg"
- finalize_command="$finalize_command $qarg"
- continue
- ;;
- xlinker)
- linker_flags="$linker_flags $qarg"
- compiler_flags="$compiler_flags $wl$qarg"
- prev=
- compile_command="$compile_command $wl$qarg"
- finalize_command="$finalize_command $wl$qarg"
- continue
- ;;
- *)
- eval "$prev=\"\$arg\""
- prev=
- continue
- ;;
- esac
- fi # test -n $prev
-
- prevarg="$arg"
-
- case $arg in
- -all-static)
- if test -n "$link_static_flag"; then
- compile_command="$compile_command $link_static_flag"
- finalize_command="$finalize_command $link_static_flag"
- fi
- continue
- ;;
-
- -allow-undefined)
- # FIXME: remove this flag sometime in the future.
- $echo "$modename: \`-allow-undefined' is deprecated because it is the default" 1>&2
- continue
- ;;
-
- -avoid-version)
- avoid_version=yes
- continue
- ;;
-
- -dlopen)
- prev=dlfiles
- continue
- ;;
-
- -dlpreopen)
- prev=dlprefiles
- continue
- ;;
-
- -export-dynamic)
- export_dynamic=yes
- continue
- ;;
-
- -export-symbols | -export-symbols-regex)
- if test -n "$export_symbols" || test -n "$export_symbols_regex"; then
- $echo "$modename: more than one -exported-symbols argument is not allowed"
- exit 1
- fi
- if test "X$arg" = "X-export-symbols"; then
- prev=expsyms
- else
- prev=expsyms_regex
- fi
- continue
- ;;
-
- # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:*
- # so, if we see these flags be careful not to treat them like -L
- -L[A-Z][A-Z]*:*)
- case $with_gcc/$host in
- no/*-*-irix* | no/*-*-nonstopux*)
- compile_command="$compile_command $arg"
- finalize_command="$finalize_command $arg"
- ;;
- esac
- continue
- ;;
-
- -L*)
- dir=`$echo "X$arg" | $Xsed -e 's/^-L//'`
- # We need an absolute path.
- case $dir in
- [\\/]* | [A-Za-z]:[\\/]*) ;;
- *)
- absdir=`cd "$dir" && pwd`
- if test -z "$absdir"; then
- $echo "$modename: cannot determine absolute directory name of \`$dir'" 1>&2
- exit 1
- fi
- dir="$absdir"
- ;;
- esac
- case "$deplibs " in
- *" -L$dir "*) ;;
- *)
- deplibs="$deplibs -L$dir"
- lib_search_path="$lib_search_path $dir"
- ;;
- esac
- case $host in
- *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*)
- case :$dllsearchpath: in
- *":$dir:"*) ;;
- *) dllsearchpath="$dllsearchpath:$dir";;
- esac
- ;;
- esac
- continue
- ;;
-
- -l*)
- if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then
- case $host in
- *-*-cygwin* | *-*-pw32* | *-*-beos*)
- # These systems don't actually have a C or math library (as such)
- continue
- ;;
- *-*-mingw* | *-*-os2*)
- # These systems don't actually have a C library (as such)
- test "X$arg" = "X-lc" && continue
- ;;
- *-*-openbsd* | *-*-freebsd*)
- # Do not include libc due to us having libc/libc_r.
- test "X$arg" = "X-lc" && continue
- ;;
- esac
- elif test "X$arg" = "X-lc_r"; then
- case $host in
- *-*-openbsd* | *-*-freebsd*)
- # Do not include libc_r directly, use -pthread flag.
- continue
- ;;
- esac
- fi
- deplibs="$deplibs $arg"
- continue
- ;;
-
- -module)
- module=yes
- continue
- ;;
-
- -no-fast-install)
- fast_install=no
- continue
- ;;
-
- -no-install)
- case $host in
- *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*)
- # The PATH hackery in wrapper scripts is required on Windows
- # in order for the loader to find any dlls it needs.
- $echo "$modename: warning: \`-no-install' is ignored for $host" 1>&2
- $echo "$modename: warning: assuming \`-no-fast-install' instead" 1>&2
- fast_install=no
- ;;
- *) no_install=yes ;;
- esac
- continue
- ;;
-
- -no-undefined)
- allow_undefined=no
- continue
- ;;
-
- -o) prev=output ;;
-
- -release)
- prev=release
- continue
- ;;
-
- -rpath)
- prev=rpath
- continue
- ;;
-
- -R)
- prev=xrpath
- continue
- ;;
-
- -R*)
- dir=`$echo "X$arg" | $Xsed -e 's/^-R//'`
- # We need an absolute path.
- case $dir in
- [\\/]* | [A-Za-z]:[\\/]*) ;;
- *)
- $echo "$modename: only absolute run-paths are allowed" 1>&2
- exit 1
- ;;
- esac
- case "$xrpath " in
- *" $dir "*) ;;
- *) xrpath="$xrpath $dir" ;;
- esac
- continue
- ;;
-
- -static)
- # The effects of -static are defined in a previous loop.
- # We used to do the same as -all-static on platforms that
- # didn't have a PIC flag, but the assumption that the effects
- # would be equivalent was wrong. It would break on at least
- # Digital Unix and AIX.
- continue
- ;;
-
- -thread-safe)
- thread_safe=yes
- continue
- ;;
-
- -version-info)
- prev=vinfo
- continue
- ;;
-
- -Wc,*)
- args=`$echo "X$arg" | $Xsed -e "$sed_quote_subst" -e 's/^-Wc,//'`
- arg=
- save_ifs="$IFS"; IFS=','
- for flag in $args; do
- IFS="$save_ifs"
- case $flag in
- *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"")
- flag="\"$flag\""
- ;;
- esac
- arg="$arg $wl$flag"
- compiler_flags="$compiler_flags $flag"
- done
- IFS="$save_ifs"
- arg=`$echo "X$arg" | $Xsed -e "s/^ //"`
- ;;
-
- -Wl,*)
- args=`$echo "X$arg" | $Xsed -e "$sed_quote_subst" -e 's/^-Wl,//'`
- arg=
- save_ifs="$IFS"; IFS=','
- for flag in $args; do
- IFS="$save_ifs"
- case $flag in
- *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"")
- flag="\"$flag\""
- ;;
- esac
- arg="$arg $wl$flag"
- compiler_flags="$compiler_flags $wl$flag"
- linker_flags="$linker_flags $flag"
- done
- IFS="$save_ifs"
- arg=`$echo "X$arg" | $Xsed -e "s/^ //"`
- ;;
-
- -Xcompiler)
- prev=xcompiler
- continue
- ;;
-
- -Xlinker)
- prev=xlinker
- continue
- ;;
-
- # Some other compiler flag.
- -* | +*)
- # Unknown arguments in both finalize_command and compile_command need
- # to be aesthetically quoted because they are evaled later.
- arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`
- case $arg in
- *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"")
- arg="\"$arg\""
- ;;
- esac
- ;;
-
- *.lo | *.$objext)
- # A library or standard object.
- if test "$prev" = dlfiles; then
- # This file was specified with -dlopen.
- if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then
- dlfiles="$dlfiles $arg"
- prev=
- continue
- else
- # If libtool objects are unsupported, then we need to preload.
- prev=dlprefiles
- fi
- fi
-
- if test "$prev" = dlprefiles; then
- # Preload the old-style object.
- dlprefiles="$dlprefiles "`$echo "X$arg" | $Xsed -e "$lo2o"`
- prev=
- else
- case $arg in
- *.lo) libobjs="$libobjs $arg" ;;
- *) objs="$objs $arg" ;;
- esac
- fi
- ;;
-
- *.$libext)
- # An archive.
- deplibs="$deplibs $arg"
- old_deplibs="$old_deplibs $arg"
- continue
- ;;
-
- *.la)
- # A libtool-controlled library.
-
- if test "$prev" = dlfiles; then
- # This library was specified with -dlopen.
- dlfiles="$dlfiles $arg"
- prev=
- elif test "$prev" = dlprefiles; then
- # The library was specified with -dlpreopen.
- dlprefiles="$dlprefiles $arg"
- prev=
- else
- deplibs="$deplibs $arg"
- fi
- continue
- ;;
-
- # Some other compiler argument.
- *)
- # Unknown arguments in both finalize_command and compile_command need
- # to be aesthetically quoted because they are evaled later.
- arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`
- case $arg in
- *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"")
- arg="\"$arg\""
- ;;
- esac
- ;;
- esac # arg
-
- # Now actually substitute the argument into the commands.
- if test -n "$arg"; then
- compile_command="$compile_command $arg"
- finalize_command="$finalize_command $arg"
- fi
- done # argument parsing loop
-
- if test -n "$prev"; then
- $echo "$modename: the \`$prevarg' option requires an argument" 1>&2
- $echo "$help" 1>&2
- exit 1
- fi
-
- if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then
- eval arg=\"$export_dynamic_flag_spec\"
- compile_command="$compile_command $arg"
- finalize_command="$finalize_command $arg"
- fi
-
- # calculate the name of the file, without its directory
- outputname=`$echo "X$output" | $Xsed -e 's%^.*/%%'`
- libobjs_save="$libobjs"
-
- if test -n "$shlibpath_var"; then
- # get the directories listed in $shlibpath_var
- eval shlib_search_path=\`\$echo \"X\${$shlibpath_var}\" \| \$Xsed -e \'s/:/ /g\'\`
- else
- shlib_search_path=
- fi
- eval sys_lib_search_path=\"$sys_lib_search_path_spec\"
- eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\"
-
- output_objdir=`$echo "X$output" | $Xsed -e 's%/[^/]*$%%'`
- if test "X$output_objdir" = "X$output"; then
- output_objdir="$objdir"
- else
- output_objdir="$output_objdir/$objdir"
- fi
- # Create the object directory.
- if test ! -d $output_objdir; then
- $show "$mkdir $output_objdir"
- $run $mkdir $output_objdir
- status=$?
- if test $status -ne 0 && test ! -d $output_objdir; then
- exit $status
- fi
- fi
-
- # Determine the type of output
- case $output in
- "")
- $echo "$modename: you must specify an output file" 1>&2
- $echo "$help" 1>&2
- exit 1
- ;;
- *.$libext) linkmode=oldlib ;;
- *.lo | *.$objext) linkmode=obj ;;
- *.la) linkmode=lib ;;
- *) linkmode=prog ;; # Anything else should be a program.
- esac
-
- specialdeplibs=
- libs=
- # Find all interdependent deplibs by searching for libraries
- # that are linked more than once (e.g. -la -lb -la)
- for deplib in $deplibs; do
- if test "X$duplicate_deps" = "Xyes" ; then
- case "$libs " in
- *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
- esac
- fi
- libs="$libs $deplib"
- done
- deplibs=
- newdependency_libs=
- newlib_search_path=
- need_relink=no # whether we're linking any uninstalled libtool libraries
- notinst_deplibs= # not-installed libtool libraries
- notinst_path= # paths that contain not-installed libtool libraries
- case $linkmode in
- lib)
- passes="conv link"
- for file in $dlfiles $dlprefiles; do
- case $file in
- *.la) ;;
- *)
- $echo "$modename: libraries can \`-dlopen' only libtool libraries: $file" 1>&2
- exit 1
- ;;
- esac
- done
- ;;
- prog)
- compile_deplibs=
- finalize_deplibs=
- alldeplibs=no
- newdlfiles=
- newdlprefiles=
- passes="conv scan dlopen dlpreopen link"
- ;;
- *) passes="conv"
- ;;
- esac
- for pass in $passes; do
- if test $linkmode = prog; then
- # Determine which files to process
- case $pass in
- dlopen)
- libs="$dlfiles"
- save_deplibs="$deplibs" # Collect dlpreopened libraries
- deplibs=
- ;;
- dlpreopen) libs="$dlprefiles" ;;
- link) libs="$deplibs %DEPLIBS% $dependency_libs" ;;
- esac
- fi
- for deplib in $libs; do
- lib=
- found=no
- case $deplib in
- -l*)
- if test $linkmode = oldlib && test $linkmode = obj; then
- $echo "$modename: warning: \`-l' is ignored for archives/objects: $deplib" 1>&2
- continue
- fi
- if test $pass = conv; then
- deplibs="$deplib $deplibs"
- continue
- fi
- name=`$echo "X$deplib" | $Xsed -e 's/^-l//'`
- for searchdir in $newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path; do
- # Search the libtool library
- lib="$searchdir/lib${name}.la"
- if test -f "$lib"; then
- found=yes
- break
- fi
- done
- if test "$found" != yes; then
- # deplib doesn't seem to be a libtool library
- if test "$linkmode,$pass" = "prog,link"; then
- compile_deplibs="$deplib $compile_deplibs"
- finalize_deplibs="$deplib $finalize_deplibs"
- else
- deplibs="$deplib $deplibs"
- test $linkmode = lib && newdependency_libs="$deplib $newdependency_libs"
- fi
- continue
- fi
- ;; # -l
- -L*)
- case $linkmode in
- lib)
- deplibs="$deplib $deplibs"
- test $pass = conv && continue
- newdependency_libs="$deplib $newdependency_libs"
- newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'`
- ;;
- prog)
- if test $pass = conv; then
- deplibs="$deplib $deplibs"
- continue
- fi
- if test $pass = scan; then
- deplibs="$deplib $deplibs"
- newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'`
- else
- compile_deplibs="$deplib $compile_deplibs"
- finalize_deplibs="$deplib $finalize_deplibs"
- fi
- ;;
- *)
- $echo "$modename: warning: \`-L' is ignored for archives/objects: $deplib" 1>&2
- ;;
- esac # linkmode
- continue
- ;; # -L
- -R*)
- if test $pass = link; then
- dir=`$echo "X$deplib" | $Xsed -e 's/^-R//'`
- # Make sure the xrpath contains only unique directories.
- case "$xrpath " in
- *" $dir "*) ;;
- *) xrpath="$xrpath $dir" ;;
- esac
- fi
- deplibs="$deplib $deplibs"
- continue
- ;;
- *.la) lib="$deplib" ;;
- *.$libext)
- if test $pass = conv; then
- deplibs="$deplib $deplibs"
- continue
- fi
- case $linkmode in
- lib)
- if test "$deplibs_check_method" != pass_all; then
- echo
- echo "*** Warning: Trying to link with static lib archive $deplib."
- echo "*** I have the capability to make that library automatically link in when"
- echo "*** you link to this library. But I can only do this if you have a"
- echo "*** shared version of the library, which you do not appear to have"
- echo "*** because the file extensions .$libext of this argument makes me believe"
- echo "*** that it is just a static archive that I should not used here."
- else
- echo
- echo "*** Warning: Linking the shared library $output against the"
- echo "*** static library $deplib is not portable!"
- deplibs="$deplib $deplibs"
- fi
- continue
- ;;
- prog)
- if test $pass != link; then
- deplibs="$deplib $deplibs"
- else
- compile_deplibs="$deplib $compile_deplibs"
- finalize_deplibs="$deplib $finalize_deplibs"
- fi
- continue
- ;;
- esac # linkmode
- ;; # *.$libext
- *.lo | *.$objext)
- if test $pass = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then
- # If there is no dlopen support or we're linking statically,
- # we need to preload.
- newdlprefiles="$newdlprefiles $deplib"
- compile_deplibs="$deplib $compile_deplibs"
- finalize_deplibs="$deplib $finalize_deplibs"
- else
- newdlfiles="$newdlfiles $deplib"
- fi
- continue
- ;;
- %DEPLIBS%)
- alldeplibs=yes
- continue
- ;;
- esac # case $deplib
- if test $found = yes || test -f "$lib"; then :
- else
- $echo "$modename: cannot find the library \`$lib'" 1>&2
- exit 1
- fi
-
- # Check to see that this really is a libtool archive.
- if (${SED} -e '2q' $lib | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then :
- else
- $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2
- exit 1
- fi
-
- ladir=`$echo "X$lib" | $Xsed -e 's%/[^/]*$%%'`
- test "X$ladir" = "X$lib" && ladir="."
-
- dlname=
- dlopen=
- dlpreopen=
- libdir=
- library_names=
- old_library=
- # If the library was installed with an old release of libtool,
- # it will not redefine variable installed.
- installed=yes
-
- # Read the .la file
- case $lib in
- */* | *\\*) . $lib ;;
- *) . ./$lib ;;
- esac
-
- if test "$linkmode,$pass" = "lib,link" ||
- test "$linkmode,$pass" = "prog,scan" ||
- { test $linkmode = oldlib && test $linkmode = obj; }; then
- # Add dl[pre]opened files of deplib
- test -n "$dlopen" && dlfiles="$dlfiles $dlopen"
- test -n "$dlpreopen" && dlprefiles="$dlprefiles $dlpreopen"
- fi
-
- if test $pass = conv; then
- # Only check for convenience libraries
- deplibs="$lib $deplibs"
- if test -z "$libdir"; then
- if test -z "$old_library"; then
- $echo "$modename: cannot find name of link library for \`$lib'" 1>&2
- exit 1
- fi
- # It is a libtool convenience library, so add in its objects.
- convenience="$convenience $ladir/$objdir/$old_library"
- old_convenience="$old_convenience $ladir/$objdir/$old_library"
- tmp_libs=
- for deplib in $dependency_libs; do
- deplibs="$deplib $deplibs"
- if test "X$duplicate_deps" = "Xyes" ; then
- case "$tmp_libs " in
- *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
- esac
- fi
- tmp_libs="$tmp_libs $deplib"
- done
- elif test $linkmode != prog && test $linkmode != lib; then
- $echo "$modename: \`$lib' is not a convenience library" 1>&2
- exit 1
- fi
- continue
- fi # $pass = conv
-
- # Get the name of the library we link against.
- linklib=
- for l in $old_library $library_names; do
- linklib="$l"
- done
- if test -z "$linklib"; then
- $echo "$modename: cannot find name of link library for \`$lib'" 1>&2
- exit 1
- fi
-
- # This library was specified with -dlopen.
- if test $pass = dlopen; then
- if test -z "$libdir"; then
- $echo "$modename: cannot -dlopen a convenience library: \`$lib'" 1>&2
- exit 1
- fi
- if test -z "$dlname" || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then
- # If there is no dlname, no dlopen support or we're linking
- # statically, we need to preload.
- dlprefiles="$dlprefiles $lib"
- else
- newdlfiles="$newdlfiles $lib"
- fi
- continue
- fi # $pass = dlopen
-
- # We need an absolute path.
- case $ladir in
- [\\/]* | [A-Za-z]:[\\/]*) abs_ladir="$ladir" ;;
- *)
- abs_ladir=`cd "$ladir" && pwd`
- if test -z "$abs_ladir"; then
- $echo "$modename: warning: cannot determine absolute directory name of \`$ladir'" 1>&2
- $echo "$modename: passing it literally to the linker, although it might fail" 1>&2
- abs_ladir="$ladir"
- fi
- ;;
- esac
- laname=`$echo "X$lib" | $Xsed -e 's%^.*/%%'`
-
- # Find the relevant object directory and library name.
- if test "X$installed" = Xyes; then
- if test ! -f "$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then
- $echo "$modename: warning: library \`$lib' was moved." 1>&2
- dir="$ladir"
- absdir="$abs_ladir"
- libdir="$abs_ladir"
- else
- dir="$libdir"
- absdir="$libdir"
- fi
- else
- dir="$ladir/$objdir"
- absdir="$abs_ladir/$objdir"
- # Remove this search path later
- notinst_path="$notinst_path $abs_ladir"
- fi # $installed = yes
- name=`$echo "X$laname" | $Xsed -e 's/\.la$//' -e 's/^lib//'`
-
- # This library was specified with -dlpreopen.
- if test $pass = dlpreopen; then
- if test -z "$libdir"; then
- $echo "$modename: cannot -dlpreopen a convenience library: \`$lib'" 1>&2
- exit 1
- fi
- # Prefer using a static library (so that no silly _DYNAMIC symbols
- # are required to link).
- if test -n "$old_library"; then
- newdlprefiles="$newdlprefiles $dir/$old_library"
- # Otherwise, use the dlname, so that lt_dlopen finds it.
- elif test -n "$dlname"; then
- newdlprefiles="$newdlprefiles $dir/$dlname"
- else
- newdlprefiles="$newdlprefiles $dir/$linklib"
- fi
- fi # $pass = dlpreopen
-
- if test -z "$libdir"; then
- # Link the convenience library
- if test $linkmode = lib; then
- deplibs="$dir/$old_library $deplibs"
- elif test "$linkmode,$pass" = "prog,link"; then
- compile_deplibs="$dir/$old_library $compile_deplibs"
- finalize_deplibs="$dir/$old_library $finalize_deplibs"
- else
- deplibs="$lib $deplibs"
- fi
- continue
- fi
-
- if test $linkmode = prog && test $pass != link; then
- newlib_search_path="$newlib_search_path $ladir"
- deplibs="$lib $deplibs"
-
- linkalldeplibs=no
- if test "$link_all_deplibs" != no || test -z "$library_names" ||
- test "$build_libtool_libs" = no; then
- linkalldeplibs=yes
- fi
-
- tmp_libs=
- for deplib in $dependency_libs; do
- case $deplib in
- -L*) newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'`;; ### testsuite: skip nested quoting test
- esac
- # Need to link against all dependency_libs?
- if test $linkalldeplibs = yes; then
- deplibs="$deplib $deplibs"
- else
- # Need to hardcode shared library paths
- # or/and link against static libraries
- newdependency_libs="$deplib $newdependency_libs"
- fi
- if test "X$duplicate_deps" = "Xyes" ; then
- case "$tmp_libs " in
- *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
- esac
- fi
- tmp_libs="$tmp_libs $deplib"
- done # for deplib
- continue
- fi # $linkmode = prog...
-
- link_static=no # Whether the deplib will be linked statically
- if test -n "$library_names" &&
- { test "$prefer_static_libs" = no || test -z "$old_library"; }; then
- # Link against this shared library
-
- if test "$linkmode,$pass" = "prog,link" ||
- { test $linkmode = lib && test $hardcode_into_libs = yes; }; then
- # Hardcode the library path.
- # Skip directories that are in the system default run-time
- # search path.
- case " $sys_lib_dlsearch_path " in
- *" $absdir "*) ;;
- *)
- case "$compile_rpath " in
- *" $absdir "*) ;;
- *) compile_rpath="$compile_rpath $absdir"
- esac
- ;;
- esac
- case " $sys_lib_dlsearch_path " in
- *" $libdir "*) ;;
- *)
- case "$finalize_rpath " in
- *" $libdir "*) ;;
- *) finalize_rpath="$finalize_rpath $libdir"
- esac
- ;;
- esac
- if test $linkmode = prog; then
- # We need to hardcode the library path
- if test -n "$shlibpath_var"; then
- # Make sure the rpath contains only unique directories.
- case "$temp_rpath " in
- *" $dir "*) ;;
- *" $absdir "*) ;;
- *) temp_rpath="$temp_rpath $dir" ;;
- esac
- fi
- fi
- fi # $linkmode,$pass = prog,link...
-
- if test "$alldeplibs" = yes &&
- { test "$deplibs_check_method" = pass_all ||
- { test "$build_libtool_libs" = yes &&
- test -n "$library_names"; }; }; then
- # We only need to search for static libraries
- continue
- fi
-
- if test "$installed" = no; then
- notinst_deplibs="$notinst_deplibs $lib"
- need_relink=yes
- fi
-
- if test -n "$old_archive_from_expsyms_cmds"; then
- # figure out the soname
- set dummy $library_names
- realname="$2"
- shift; shift
- libname=`eval \\$echo \"$libname_spec\"`
- # use dlname if we got it. it's perfectly good, no?
- if test -n "$dlname"; then
- soname="$dlname"
- elif test -n "$soname_spec"; then
- # bleh windows
- case $host in
- *cygwin*)
- major=`expr $current - $age`
- versuffix="-$major"
- ;;
- esac
- eval soname=\"$soname_spec\"
- else
- soname="$realname"
- fi
-
- # Make a new name for the extract_expsyms_cmds to use
- soroot="$soname"
- soname=`echo $soroot | ${SED} -e 's/^.*\///'`
- newlib="libimp-`echo $soname | ${SED} 's/^lib//;s/\.dll$//'`.a"
-
- # If the library has no export list, then create one now
- if test -f "$output_objdir/$soname-def"; then :
- else
- $show "extracting exported symbol list from \`$soname'"
- save_ifs="$IFS"; IFS='~'
- eval cmds=\"$extract_expsyms_cmds\"
- for cmd in $cmds; do
- IFS="$save_ifs"
- $show "$cmd"
- $run eval "$cmd" || exit $?
- done
- IFS="$save_ifs"
- fi
-
- # Create $newlib
- if test -f "$output_objdir/$newlib"; then :; else
- $show "generating import library for \`$soname'"
- save_ifs="$IFS"; IFS='~'
- eval cmds=\"$old_archive_from_expsyms_cmds\"
- for cmd in $cmds; do
- IFS="$save_ifs"
- $show "$cmd"
- $run eval "$cmd" || exit $?
- done
- IFS="$save_ifs"
- fi
- # make sure the library variables are pointing to the new library
- dir=$output_objdir
- linklib=$newlib
- fi # test -n $old_archive_from_expsyms_cmds
-
- if test $linkmode = prog || test "$mode" != relink; then
- add_shlibpath=
- add_dir=
- add=
- lib_linked=yes
- case $hardcode_action in
- immediate | unsupported)
- if test "$hardcode_direct" = no; then
- add="$dir/$linklib"
- elif test "$hardcode_minus_L" = no; then
- case $host in
- *-*-sunos*) add_shlibpath="$dir" ;;
- esac
- add_dir="-L$dir"
- add="-l$name"
- elif test "$hardcode_shlibpath_var" = no; then
- add_shlibpath="$dir"
- add="-l$name"
- else
- lib_linked=no
- fi
- ;;
- relink)
- if test "$hardcode_direct" = yes; then
- add="$dir/$linklib"
- elif test "$hardcode_minus_L" = yes; then
- add_dir="-L$dir"
- add="-l$name"
- elif test "$hardcode_shlibpath_var" = yes; then
- add_shlibpath="$dir"
- add="-l$name"
- else
- lib_linked=no
- fi
- ;;
- *) lib_linked=no ;;
- esac
-
- if test "$lib_linked" != yes; then
- $echo "$modename: configuration error: unsupported hardcode properties"
- exit 1
- fi
-
- if test -n "$add_shlibpath"; then
- case :$compile_shlibpath: in
- *":$add_shlibpath:"*) ;;
- *) compile_shlibpath="$compile_shlibpath$add_shlibpath:" ;;
- esac
- fi
- if test $linkmode = prog; then
- test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs"
- test -n "$add" && compile_deplibs="$add $compile_deplibs"
- else
- test -n "$add_dir" && deplibs="$add_dir $deplibs"
- test -n "$add" && deplibs="$add $deplibs"
- if test "$hardcode_direct" != yes && \
- test "$hardcode_minus_L" != yes && \
- test "$hardcode_shlibpath_var" = yes; then
- case :$finalize_shlibpath: in
- *":$libdir:"*) ;;
- *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;;
- esac
- fi
- fi
- fi
-
- if test $linkmode = prog || test "$mode" = relink; then
- add_shlibpath=
- add_dir=
- add=
- # Finalize command for both is simple: just hardcode it.
- if test "$hardcode_direct" = yes; then
- add="$libdir/$linklib"
- elif test "$hardcode_minus_L" = yes; then
- add_dir="-L$libdir"
- add="-l$name"
- elif test "$hardcode_shlibpath_var" = yes; then
- case :$finalize_shlibpath: in
- *":$libdir:"*) ;;
- *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;;
- esac
- add="-l$name"
- else
- # We cannot seem to hardcode it, guess we'll fake it.
- add_dir="-L$libdir"
- add="-l$name"
- fi
-
- if test $linkmode = prog; then
- test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs"
- test -n "$add" && finalize_deplibs="$add $finalize_deplibs"
- else
- test -n "$add_dir" && deplibs="$add_dir $deplibs"
- test -n "$add" && deplibs="$add $deplibs"
- fi
- fi
- elif test $linkmode = prog; then
- if test "$alldeplibs" = yes &&
- { test "$deplibs_check_method" = pass_all ||
- { test "$build_libtool_libs" = yes &&
- test -n "$library_names"; }; }; then
- # We only need to search for static libraries
- continue
- fi
-
- # Try to link the static library
- # Here we assume that one of hardcode_direct or hardcode_minus_L
- # is not unsupported. This is valid on all known static and
- # shared platforms.
- if test "$hardcode_direct" != unsupported; then
- test -n "$old_library" && linklib="$old_library"
- compile_deplibs="$dir/$linklib $compile_deplibs"
- finalize_deplibs="$dir/$linklib $finalize_deplibs"
- else
- compile_deplibs="-l$name -L$dir $compile_deplibs"
- finalize_deplibs="-l$name -L$dir $finalize_deplibs"
- fi
- elif test "$build_libtool_libs" = yes; then
- # Not a shared library
- if test "$deplibs_check_method" != pass_all; then
- # We're trying link a shared library against a static one
- # but the system doesn't support it.
-
- # Just print a warning and add the library to dependency_libs so
- # that the program can be linked against the static library.
- echo
- echo "*** Warning: This system can not link to static lib archive $lib."
- echo "*** I have the capability to make that library automatically link in when"
- echo "*** you link to this library. But I can only do this if you have a"
- echo "*** shared version of the library, which you do not appear to have."
- if test "$module" = yes; then
- echo "*** But as you try to build a module library, libtool will still create "
- echo "*** a static module, that should work as long as the dlopening application"
- echo "*** is linked with the -dlopen flag to resolve symbols at runtime."
- if test -z "$global_symbol_pipe"; then
- echo
- echo "*** However, this would only work if libtool was able to extract symbol"
- echo "*** lists from a program, using \`nm' or equivalent, but libtool could"
- echo "*** not find such a program. So, this module is probably useless."
- echo "*** \`nm' from GNU binutils and a full rebuild may help."
- fi
- if test "$build_old_libs" = no; then
- build_libtool_libs=module
- build_old_libs=yes
- else
- build_libtool_libs=no
- fi
- fi
- else
- convenience="$convenience $dir/$old_library"
- old_convenience="$old_convenience $dir/$old_library"
- deplibs="$dir/$old_library $deplibs"
- link_static=yes
- fi
- fi # link shared/static library?
-
- if test $linkmode = lib; then
- if test -n "$dependency_libs" &&
- { test $hardcode_into_libs != yes || test $build_old_libs = yes ||
- test $link_static = yes; }; then
- # Extract -R from dependency_libs
- temp_deplibs=
- for libdir in $dependency_libs; do
- case $libdir in
- -R*) temp_xrpath=`$echo "X$libdir" | $Xsed -e 's/^-R//'`
- case " $xrpath " in
- *" $temp_xrpath "*) ;;
- *) xrpath="$xrpath $temp_xrpath";;
- esac;;
- *) temp_deplibs="$temp_deplibs $libdir";;
- esac
- done
- dependency_libs="$temp_deplibs"
- fi
-
- newlib_search_path="$newlib_search_path $absdir"
- # Link against this library
- test "$link_static" = no && newdependency_libs="$abs_ladir/$laname $newdependency_libs"
- # ... and its dependency_libs
- tmp_libs=
- for deplib in $dependency_libs; do
- newdependency_libs="$deplib $newdependency_libs"
- if test "X$duplicate_deps" = "Xyes" ; then
- case "$tmp_libs " in
- *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
- esac
- fi
- tmp_libs="$tmp_libs $deplib"
- done
-
- if test $link_all_deplibs != no; then
- # Add the search paths of all dependency libraries
- for deplib in $dependency_libs; do
- case $deplib in
- -L*) path="$deplib" ;;
- *.la)
- dir=`$echo "X$deplib" | $Xsed -e 's%/[^/]*$%%'`
- test "X$dir" = "X$deplib" && dir="."
- # We need an absolute path.
- case $dir in
- [\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;;
- *)
- absdir=`cd "$dir" && pwd`
- if test -z "$absdir"; then
- $echo "$modename: warning: cannot determine absolute directory name of \`$dir'" 1>&2
- absdir="$dir"
- fi
- ;;
- esac
- if grep "^installed=no" $deplib > /dev/null; then
- path="-L$absdir/$objdir"
- else
- eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib`
- if test -z "$libdir"; then
- $echo "$modename: \`$deplib' is not a valid libtool archive" 1>&2
- exit 1
- fi
- if test "$absdir" != "$libdir"; then
- $echo "$modename: warning: \`$deplib' seems to be moved" 1>&2
- fi
- path="-L$absdir"
- fi
- ;;
- *) continue ;;
- esac
- case " $deplibs " in
- *" $path "*) ;;
- *) deplibs="$deplibs $path" ;;
- esac
- done
- fi # link_all_deplibs != no
- fi # linkmode = lib
- done # for deplib in $libs
- if test $pass = dlpreopen; then
- # Link the dlpreopened libraries before other libraries
- for deplib in $save_deplibs; do
- deplibs="$deplib $deplibs"
- done
- fi
- if test $pass != dlopen; then
- test $pass != scan && dependency_libs="$newdependency_libs"
- if test $pass != conv; then
- # Make sure lib_search_path contains only unique directories.
- lib_search_path=
- for dir in $newlib_search_path; do
- case "$lib_search_path " in
- *" $dir "*) ;;
- *) lib_search_path="$lib_search_path $dir" ;;
- esac
- done
- newlib_search_path=
- fi
-
- if test "$linkmode,$pass" != "prog,link"; then
- vars="deplibs"
- else
- vars="compile_deplibs finalize_deplibs"
- fi
- for var in $vars dependency_libs; do
- # Add libraries to $var in reverse order
- eval tmp_libs=\"\$$var\"
- new_libs=
- for deplib in $tmp_libs; do
- case $deplib in
- -L*) new_libs="$deplib $new_libs" ;;
- *)
- case " $specialdeplibs " in
- *" $deplib "*) new_libs="$deplib $new_libs" ;;
- *)
- case " $new_libs " in
- *" $deplib "*) ;;
- *) new_libs="$deplib $new_libs" ;;
- esac
- ;;
- esac
- ;;
- esac
- done
- tmp_libs=
- for deplib in $new_libs; do
- case $deplib in
- -L*)
- case " $tmp_libs " in
- *" $deplib "*) ;;
- *) tmp_libs="$tmp_libs $deplib" ;;
- esac
- ;;
- *) tmp_libs="$tmp_libs $deplib" ;;
- esac
- done
- eval $var=\"$tmp_libs\"
- done # for var
- fi
- if test "$pass" = "conv" &&
- { test "$linkmode" = "lib" || test "$linkmode" = "prog"; }; then
- libs="$deplibs" # reset libs
- deplibs=
- fi
- done # for pass
- if test $linkmode = prog; then
- dlfiles="$newdlfiles"
- dlprefiles="$newdlprefiles"
- fi
-
- case $linkmode in
- oldlib)
- if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
- $echo "$modename: warning: \`-dlopen' is ignored for archives" 1>&2
- fi
-
- if test -n "$rpath"; then
- $echo "$modename: warning: \`-rpath' is ignored for archives" 1>&2
- fi
-
- if test -n "$xrpath"; then
- $echo "$modename: warning: \`-R' is ignored for archives" 1>&2
- fi
-
- if test -n "$vinfo"; then
- $echo "$modename: warning: \`-version-info' is ignored for archives" 1>&2
- fi
-
- if test -n "$release"; then
- $echo "$modename: warning: \`-release' is ignored for archives" 1>&2
- fi
-
- if test -n "$export_symbols" || test -n "$export_symbols_regex"; then
- $echo "$modename: warning: \`-export-symbols' is ignored for archives" 1>&2
- fi
-
- # Now set the variables for building old libraries.
- build_libtool_libs=no
- oldlibs="$output"
- objs="$objs$old_deplibs"
- ;;
-
- lib)
- # Make sure we only generate libraries of the form `libNAME.la'.
- case $outputname in
- lib*)
- name=`$echo "X$outputname" | $Xsed -e 's/\.la$//' -e 's/^lib//'`
- eval libname=\"$libname_spec\"
- ;;
- *)
- if test "$module" = no; then
- $echo "$modename: libtool library \`$output' must begin with \`lib'" 1>&2
- $echo "$help" 1>&2
- exit 1
- fi
- if test "$need_lib_prefix" != no; then
- # Add the "lib" prefix for modules if required
- name=`$echo "X$outputname" | $Xsed -e 's/\.la$//'`
- eval libname=\"$libname_spec\"
- else
- libname=`$echo "X$outputname" | $Xsed -e 's/\.la$//'`
- fi
- ;;
- esac
-
- if test -n "$objs"; then
- if test "$deplibs_check_method" != pass_all; then
- $echo "$modename: cannot build libtool library \`$output' from non-libtool objects on this host:$objs" 2>&1
- exit 1
- else
- echo
- echo "*** Warning: Linking the shared library $output against the non-libtool"
- echo "*** objects $objs is not portable!"
- libobjs="$libobjs $objs"
- fi
- fi
-
- if test "$dlself" != no; then
- $echo "$modename: warning: \`-dlopen self' is ignored for libtool libraries" 1>&2
- fi
-
- set dummy $rpath
- if test $# -gt 2; then
- $echo "$modename: warning: ignoring multiple \`-rpath's for a libtool library" 1>&2
- fi
- install_libdir="$2"
-
- oldlibs=
- if test -z "$rpath"; then
- if test "$build_libtool_libs" = yes; then
- # Building a libtool convenience library.
- libext=al
- oldlibs="$output_objdir/$libname.$libext $oldlibs"
- build_libtool_libs=convenience
- build_old_libs=yes
- fi
-
- if test -n "$vinfo"; then
- $echo "$modename: warning: \`-version-info' is ignored for convenience libraries" 1>&2
- fi
-
- if test -n "$release"; then
- $echo "$modename: warning: \`-release' is ignored for convenience libraries" 1>&2
- fi
- else
-
- # Parse the version information argument.
- save_ifs="$IFS"; IFS=':'
- set dummy $vinfo 0 0 0
- IFS="$save_ifs"
-
- if test -n "$8"; then
- $echo "$modename: too many parameters to \`-version-info'" 1>&2
- $echo "$help" 1>&2
- exit 1
- fi
-
- current="$2"
- revision="$3"
- age="$4"
-
- # Check that each of the things are valid numbers.
- case $current in
- 0 | [1-9] | [1-9][0-9] | [1-9][0-9][0-9]) ;;
- *)
- $echo "$modename: CURRENT \`$current' is not a nonnegative integer" 1>&2
- $echo "$modename: \`$vinfo' is not valid version information" 1>&2
- exit 1
- ;;
- esac
-
- case $revision in
- 0 | [1-9] | [1-9][0-9] | [1-9][0-9][0-9]) ;;
- *)
- $echo "$modename: REVISION \`$revision' is not a nonnegative integer" 1>&2
- $echo "$modename: \`$vinfo' is not valid version information" 1>&2
- exit 1
- ;;
- esac
-
- case $age in
- 0 | [1-9] | [1-9][0-9] | [1-9][0-9][0-9]) ;;
- *)
- $echo "$modename: AGE \`$age' is not a nonnegative integer" 1>&2
- $echo "$modename: \`$vinfo' is not valid version information" 1>&2
- exit 1
- ;;
- esac
-
- if test $age -gt $current; then
- $echo "$modename: AGE \`$age' is greater than the current interface number \`$current'" 1>&2
- $echo "$modename: \`$vinfo' is not valid version information" 1>&2
- exit 1
- fi
-
- # Calculate the version variables.
- major=
- versuffix=
- verstring=
- case $version_type in
- none) ;;
-
- darwin)
- # Like Linux, but with the current version available in
- # verstring for coding it into the library header
- major=.`expr $current - $age`
- versuffix="$major.$age.$revision"
- # Darwin ld doesn't like 0 for these options...
- minor_current=`expr $current + 1`
- verstring="-compatibility_version $minor_current -current_version $minor_current.$revision"
- ;;
-
- freebsd-aout)
- major=".$current"
- versuffix=".$current.$revision";
- ;;
-
- freebsd-elf)
- major=".$current"
- versuffix=".$current";
- ;;
-
- irix | nonstopux)
- major=`expr $current - $age + 1`
-
- case $version_type in
- nonstopux) verstring_prefix=nonstopux ;;
- *) verstring_prefix=sgi ;;
- esac
- verstring="$verstring_prefix$major.$revision"
-
- # Add in all the interfaces that we are compatible with.
- loop=$revision
- while test $loop != 0; do
- iface=`expr $revision - $loop`
- loop=`expr $loop - 1`
- verstring="$verstring_prefix$major.$iface:$verstring"
- done
-
- # Before this point, $major must not contain `.'.
- major=.$major
- versuffix="$major.$revision"
- ;;
-
- linux)
- major=.`expr $current - $age`
- versuffix="$major.$age.$revision"
- ;;
-
- osf)
- major=.`expr $current - $age`
- versuffix=".$current.$age.$revision"
- verstring="$current.$age.$revision"
-
- # Add in all the interfaces that we are compatible with.
- loop=$age
- while test $loop != 0; do
- iface=`expr $current - $loop`
- loop=`expr $loop - 1`
- verstring="$verstring:${iface}.0"
- done
-
- # Make executables depend on our current version.
- verstring="$verstring:${current}.0"
- ;;
-
- sunos)
- major=".$current"
- versuffix=".$current.$revision"
- ;;
-
- windows)
- # Use '-' rather than '.', since we only want one
- # extension on DOS 8.3 filesystems.
- major=`expr $current - $age`
- versuffix="-$major"
- ;;
-
- *)
- $echo "$modename: unknown library version type \`$version_type'" 1>&2
- echo "Fatal configuration error. See the $PACKAGE docs for more information." 1>&2
- exit 1
- ;;
- esac
-
- # Clear the version info if we defaulted, and they specified a release.
- if test -z "$vinfo" && test -n "$release"; then
- major=
- verstring="0.0"
- case $version_type in
- darwin)
- # we can't check for "0.0" in archive_cmds due to quoting
- # problems, so we reset it completely
- verstring=""
- ;;
- *)
- verstring="0.0"
- ;;
- esac
- if test "$need_version" = no; then
- versuffix=
- else
- versuffix=".0.0"
- fi
- fi
-
- # Remove version info from name if versioning should be avoided
- if test "$avoid_version" = yes && test "$need_version" = no; then
- major=
- versuffix=
- verstring=""
- fi
-
- # Check to see if the archive will have undefined symbols.
- if test "$allow_undefined" = yes; then
- if test "$allow_undefined_flag" = unsupported; then
- $echo "$modename: warning: undefined symbols not allowed in $host shared libraries" 1>&2
- build_libtool_libs=no
- build_old_libs=yes
- fi
- else
- # Don't allow undefined symbols.
- allow_undefined_flag="$no_undefined_flag"
- fi
- fi
-
- if test "$mode" != relink; then
- # Remove our outputs.
- $show "${rm}r $output_objdir/$outputname $output_objdir/$libname.* $output_objdir/${libname}${release}.*"
- $run ${rm}r $output_objdir/$outputname $output_objdir/$libname.* $output_objdir/${libname}${release}.*
- fi
-
- # Now set the variables for building old libraries.
- if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then
- oldlibs="$oldlibs $output_objdir/$libname.$libext"
-
- # Transform .lo files to .o files.
- oldobjs="$objs "`$echo "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}'$/d' -e "$lo2o" | $NL2SP`
- fi
-
- # Eliminate all temporary directories.
- for path in $notinst_path; do
- lib_search_path=`echo "$lib_search_path " | ${SED} -e 's% $path % %g'`
- deplibs=`echo "$deplibs " | ${SED} -e 's% -L$path % %g'`
- dependency_libs=`echo "$dependency_libs " | ${SED} -e 's% -L$path % %g'`
- done
-
- if test -n "$xrpath"; then
- # If the user specified any rpath flags, then add them.
- temp_xrpath=
- for libdir in $xrpath; do
- temp_xrpath="$temp_xrpath -R$libdir"
- case "$finalize_rpath " in
- *" $libdir "*) ;;
- *) finalize_rpath="$finalize_rpath $libdir" ;;
- esac
- done
- if test $hardcode_into_libs != yes || test $build_old_libs = yes; then
- dependency_libs="$temp_xrpath $dependency_libs"
- fi
- fi
-
- # Make sure dlfiles contains only unique files that won't be dlpreopened
- old_dlfiles="$dlfiles"
- dlfiles=
- for lib in $old_dlfiles; do
- case " $dlprefiles $dlfiles " in
- *" $lib "*) ;;
- *) dlfiles="$dlfiles $lib" ;;
- esac
- done
-
- # Make sure dlprefiles contains only unique files
- old_dlprefiles="$dlprefiles"
- dlprefiles=
- for lib in $old_dlprefiles; do
- case "$dlprefiles " in
- *" $lib "*) ;;
- *) dlprefiles="$dlprefiles $lib" ;;
- esac
- done
-
- if test "$build_libtool_libs" = yes; then
- if test -n "$rpath"; then
- case $host in
- *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos*)
- # these systems don't actually have a c library (as such)!
- ;;
- *-*-rhapsody* | *-*-darwin1.[012])
- # Rhapsody C library is in the System framework
- deplibs="$deplibs -framework System"
- ;;
- *-*-netbsd*)
- # Don't link with libc until the a.out ld.so is fixed.
- ;;
- *-*-openbsd* | *-*-freebsd*)
- # Do not include libc due to us having libc/libc_r.
- ;;
- *)
- # Add libc to deplibs on all other systems if necessary.
- if test $build_libtool_need_lc = "yes"; then
- deplibs="$deplibs -lc"
- fi
- ;;
- esac
- fi
-
- # Transform deplibs into only deplibs that can be linked in shared.
- name_save=$name
- libname_save=$libname
- release_save=$release
- versuffix_save=$versuffix
- major_save=$major
- # I'm not sure if I'm treating the release correctly. I think
- # release should show up in the -l (ie -lgmp5) so we don't want to
- # add it in twice. Is that correct?
- release=""
- versuffix=""
- major=""
- newdeplibs=
- droppeddeps=no
- case $deplibs_check_method in
- pass_all)
- # Don't check for shared/static. Everything works.
- # This might be a little naive. We might want to check
- # whether the library exists or not. But this is on
- # osf3 & osf4 and I'm not really sure... Just
- # implementing what was already the behaviour.
- newdeplibs=$deplibs
- ;;
- test_compile)
- # This code stresses the "libraries are programs" paradigm to its
- # limits. Maybe even breaks it. We compile a program, linking it
- # against the deplibs as a proxy for the library. Then we can check
- # whether they linked in statically or dynamically with ldd.
- $rm conftest.c
- cat > conftest.c <<EOF
- int main() { return 0; }
-EOF
- $rm conftest
- $CC -o conftest conftest.c $deplibs
- if test $? -eq 0 ; then
- ldd_output=`ldd conftest`
- for i in $deplibs; do
- name="`expr $i : '-l\(.*\)'`"
- # If $name is empty we are operating on a -L argument.
- if test -n "$name" && test "$name" != "0"; then
- libname=`eval \\$echo \"$libname_spec\"`
- deplib_matches=`eval \\$echo \"$library_names_spec\"`
- set dummy $deplib_matches
- deplib_match=$2
- if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then
- newdeplibs="$newdeplibs $i"
- else
- droppeddeps=yes
- echo
- echo "*** Warning: dynamic linker does not accept needed library $i."
- echo "*** I have the capability to make that library automatically link in when"
- echo "*** you link to this library. But I can only do this if you have a"
- echo "*** shared version of the library, which I believe you do not have"
- echo "*** because a test_compile did reveal that the linker did not use it for"
- echo "*** its dynamic dependency list that programs get resolved with at runtime."
- fi
- else
- newdeplibs="$newdeplibs $i"
- fi
- done
- else
- # Error occured in the first compile. Let's try to salvage
- # the situation: Compile a separate program for each library.
- for i in $deplibs; do
- name="`expr $i : '-l\(.*\)'`"
- # If $name is empty we are operating on a -L argument.
- if test -n "$name" && test "$name" != "0"; then
- $rm conftest
- $CC -o conftest conftest.c $i
- # Did it work?
- if test $? -eq 0 ; then
- ldd_output=`ldd conftest`
- libname=`eval \\$echo \"$libname_spec\"`
- deplib_matches=`eval \\$echo \"$library_names_spec\"`
- set dummy $deplib_matches
- deplib_match=$2
- if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then
- newdeplibs="$newdeplibs $i"
- else
- droppeddeps=yes
- echo
- echo "*** Warning: dynamic linker does not accept needed library $i."
- echo "*** I have the capability to make that library automatically link in when"
- echo "*** you link to this library. But I can only do this if you have a"
- echo "*** shared version of the library, which you do not appear to have"
- echo "*** because a test_compile did reveal that the linker did not use this one"
- echo "*** as a dynamic dependency that programs can get resolved with at runtime."
- fi
- else
- droppeddeps=yes
- echo
- echo "*** Warning! Library $i is needed by this library but I was not able to"
- echo "*** make it link in! You will probably need to install it or some"
- echo "*** library that it depends on before this library will be fully"
- echo "*** functional. Installing it before continuing would be even better."
- fi
- else
- newdeplibs="$newdeplibs $i"
- fi
- done
- fi
- ;;
- file_magic*)
- set dummy $deplibs_check_method
- file_magic_regex=`expr "$deplibs_check_method" : "$2 \(.*\)"`
- for a_deplib in $deplibs; do
- name="`expr $a_deplib : '-l\(.*\)'`"
- # If $name is empty we are operating on a -L argument.
- if test -n "$name" && test "$name" != "0"; then
- libname=`eval \\$echo \"$libname_spec\"`
- for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do
- potential_libs=`ls $i/$libname[.-]* 2>/dev/null`
- for potent_lib in $potential_libs; do
- # Follow soft links.
- if ls -lLd "$potent_lib" 2>/dev/null \
- | grep " -> " >/dev/null; then
- continue
- fi
- # The statement above tries to avoid entering an
- # endless loop below, in case of cyclic links.
- # We might still enter an endless loop, since a link
- # loop can be closed while we follow links,
- # but so what?
- potlib="$potent_lib"
- while test -h "$potlib" 2>/dev/null; do
- potliblink=`ls -ld $potlib | ${SED} 's/.* -> //'`
- case $potliblink in
- [\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";;
- *) potlib=`$echo "X$potlib" | $Xsed -e 's,[^/]*$,,'`"$potliblink";;
- esac
- done
- if eval $file_magic_cmd \"\$potlib\" 2>/dev/null \
- | ${SED} 10q \
- | egrep "$file_magic_regex" > /dev/null; then
- newdeplibs="$newdeplibs $a_deplib"
- a_deplib=""
- break 2
- fi
- done
- done
- if test -n "$a_deplib" ; then
- droppeddeps=yes
- echo
- echo "*** Warning: linker path does not have real file for library $a_deplib."
- echo "*** I have the capability to make that library automatically link in when"
- echo "*** you link to this library. But I can only do this if you have a"
- echo "*** shared version of the library, which you do not appear to have"
- echo "*** because I did check the linker path looking for a file starting"
- if test -z "$potlib" ; then
- echo "*** with $libname but no candidates were found. (...for file magic test)"
- else
- echo "*** with $libname and none of the candidates passed a file format test"
- echo "*** using a file magic. Last file checked: $potlib"
- fi
- fi
- else
- # Add a -L argument.
- newdeplibs="$newdeplibs $a_deplib"
- fi
- done # Gone through all deplibs.
- ;;
- match_pattern*)
- set dummy $deplibs_check_method
- match_pattern_regex=`expr "$deplibs_check_method" : "$2 \(.*\)"`
- for a_deplib in $deplibs; do
- name="`expr $a_deplib : '-l\(.*\)'`"
- # If $name is empty we are operating on a -L argument.
- if test -n "$name" && test "$name" != "0"; then
- libname=`eval \\$echo \"$libname_spec\"`
- for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do
- potential_libs=`ls $i/$libname[.-]* 2>/dev/null`
- for potent_lib in $potential_libs; do
- potlib="$potent_lib" # see symlink-check below in file_magic test
- if eval echo \"$potent_lib\" 2>/dev/null \
- | ${SED} 10q \
- | egrep "$match_pattern_regex" > /dev/null; then
- newdeplibs="$newdeplibs $a_deplib"
- a_deplib=""
- break 2
- fi
- done
- done
- if test -n "$a_deplib" ; then
- droppeddeps=yes
- echo
- echo "*** Warning: linker path does not have real file for library $a_deplib."
- echo "*** I have the capability to make that library automatically link in when"
- echo "*** you link to this library. But I can only do this if you have a"
- echo "*** shared version of the library, which you do not appear to have"
- echo "*** because I did check the linker path looking for a file starting"
- if test -z "$potlib" ; then
- echo "*** with $libname but no candidates were found. (...for regex pattern test)"
- else
- echo "*** with $libname and none of the candidates passed a file format test"
- echo "*** using a regex pattern. Last file checked: $potlib"
- fi
- fi
- else
- # Add a -L argument.
- newdeplibs="$newdeplibs $a_deplib"
- fi
- done # Gone through all deplibs.
- ;;
- none | unknown | *)
- newdeplibs=""
- if $echo "X $deplibs" | $Xsed -e 's/ -lc$//' \
- -e 's/ -[LR][^ ]*//g' -e 's/[ ]//g' |
- grep . >/dev/null; then
- echo
- if test "X$deplibs_check_method" = "Xnone"; then
- echo "*** Warning: inter-library dependencies are not supported in this platform."
- else
- echo "*** Warning: inter-library dependencies are not known to be supported."
- fi
- echo "*** All declared inter-library dependencies are being dropped."
- droppeddeps=yes
- fi
- ;;
- esac
- versuffix=$versuffix_save
- major=$major_save
- release=$release_save
- libname=$libname_save
- name=$name_save
-
- case $host in
- *-*-rhapsody* | *-*-darwin1.[012])
- # On Rhapsody replace the C library is the System framework
- newdeplibs=`$echo "X $newdeplibs" | $Xsed -e 's/ -lc / -framework System /'`
- ;;
- esac
-
- if test "$droppeddeps" = yes; then
- if test "$module" = yes; then
- echo
- echo "*** Warning: libtool could not satisfy all declared inter-library"
- echo "*** dependencies of module $libname. Therefore, libtool will create"
- echo "*** a static module, that should work as long as the dlopening"
- echo "*** application is linked with the -dlopen flag."
- if test -z "$global_symbol_pipe"; then
- echo
- echo "*** However, this would only work if libtool was able to extract symbol"
- echo "*** lists from a program, using \`nm' or equivalent, but libtool could"
- echo "*** not find such a program. So, this module is probably useless."
- echo "*** \`nm' from GNU binutils and a full rebuild may help."
- fi
- if test "$build_old_libs" = no; then
- oldlibs="$output_objdir/$libname.$libext"
- build_libtool_libs=module
- build_old_libs=yes
- else
- build_libtool_libs=no
- fi
- else
- echo "*** The inter-library dependencies that have been dropped here will be"
- echo "*** automatically added whenever a program is linked with this library"
- echo "*** or is declared to -dlopen it."
-
- if test $allow_undefined = no; then
- echo
- echo "*** Since this library must not contain undefined symbols,"
- echo "*** because either the platform does not support them or"
- echo "*** it was explicitly requested with -no-undefined,"
- echo "*** libtool will only create a static version of it."
- if test "$build_old_libs" = no; then
- oldlibs="$output_objdir/$libname.$libext"
- build_libtool_libs=module
- build_old_libs=yes
- else
- build_libtool_libs=no
- fi
- fi
- fi
- fi
- # Done checking deplibs!
- deplibs=$newdeplibs
- fi
-
- # All the library-specific variables (install_libdir is set above).
- library_names=
- old_library=
- dlname=
-
- # Test again, we may have decided not to build it any more
- if test "$build_libtool_libs" = yes; then
- if test $hardcode_into_libs = yes; then
- # Hardcode the library paths
- hardcode_libdirs=
- dep_rpath=
- rpath="$finalize_rpath"
- test "$mode" != relink && rpath="$compile_rpath$rpath"
- for libdir in $rpath; do
- if test -n "$hardcode_libdir_flag_spec"; then
- if test -n "$hardcode_libdir_separator"; then
- if test -z "$hardcode_libdirs"; then
- hardcode_libdirs="$libdir"
- else
- # Just accumulate the unique libdirs.
- case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
- *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
- ;;
- *)
- hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir"
- ;;
- esac
- fi
- else
- eval flag=\"$hardcode_libdir_flag_spec\"
- dep_rpath="$dep_rpath $flag"
- fi
- elif test -n "$runpath_var"; then
- case "$perm_rpath " in
- *" $libdir "*) ;;
- *) perm_rpath="$perm_rpath $libdir" ;;
- esac
- fi
- done
- # Substitute the hardcoded libdirs into the rpath.
- if test -n "$hardcode_libdir_separator" &&
- test -n "$hardcode_libdirs"; then
- libdir="$hardcode_libdirs"
- eval dep_rpath=\"$hardcode_libdir_flag_spec\"
- fi
- if test -n "$runpath_var" && test -n "$perm_rpath"; then
- # We should set the runpath_var.
- rpath=
- for dir in $perm_rpath; do
- rpath="$rpath$dir:"
- done
- eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var"
- fi
- test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs"
- fi
-
- shlibpath="$finalize_shlibpath"
- test "$mode" != relink && shlibpath="$compile_shlibpath$shlibpath"
- if test -n "$shlibpath"; then
- eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var"
- fi
-
- # Get the real and link names of the library.
- eval library_names=\"$library_names_spec\"
- set dummy $library_names
- realname="$2"
- shift; shift
-
- if test -n "$soname_spec"; then
- eval soname=\"$soname_spec\"
- else
- soname="$realname"
- fi
- test -z "$dlname" && dlname=$soname
-
- lib="$output_objdir/$realname"
- for link
- do
- linknames="$linknames $link"
- done
-
- # Ensure that we have .o objects for linkers which dislike .lo
- # (e.g. aix) in case we are running --disable-static
- for obj in $libobjs; do
- xdir=`$echo "X$obj" | $Xsed -e 's%/[^/]*$%%'`
- if test "X$xdir" = "X$obj"; then
- xdir="."
- else
- xdir="$xdir"
- fi
- baseobj=`$echo "X$obj" | $Xsed -e 's%^.*/%%'`
- oldobj=`$echo "X$baseobj" | $Xsed -e "$lo2o"`
- if test ! -f $xdir/$oldobj; then
- $show "(cd $xdir && ${LN_S} $baseobj $oldobj)"
- $run eval '(cd $xdir && ${LN_S} $baseobj $oldobj)' || exit $?
- fi
- done
-
- # Use standard objects if they are pic
- test -z "$pic_flag" && libobjs=`$echo "X$libobjs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
-
- # Prepare the list of exported symbols
- if test -z "$export_symbols"; then
- if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then
- $show "generating symbol list for \`$libname.la'"
- export_symbols="$output_objdir/$libname.exp"
- $run $rm $export_symbols
- eval cmds=\"$export_symbols_cmds\"
- save_ifs="$IFS"; IFS='~'
- for cmd in $cmds; do
- IFS="$save_ifs"
- $show "$cmd"
- $run eval "$cmd" || exit $?
- done
- IFS="$save_ifs"
- if test -n "$export_symbols_regex"; then
- $show "egrep -e \"$export_symbols_regex\" \"$export_symbols\" > \"${export_symbols}T\""
- $run eval 'egrep -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"'
- $show "$mv \"${export_symbols}T\" \"$export_symbols\""
- $run eval '$mv "${export_symbols}T" "$export_symbols"'
- fi
- fi
- fi
-
- if test -n "$export_symbols" && test -n "$include_expsyms"; then
- $run eval '$echo "X$include_expsyms" | $SP2NL >> "$export_symbols"'
- fi
-
- if test -n "$convenience"; then
- if test -n "$whole_archive_flag_spec"; then
- eval libobjs=\"\$libobjs $whole_archive_flag_spec\"
- else
- gentop="$output_objdir/${outputname}x"
- $show "${rm}r $gentop"
- $run ${rm}r "$gentop"
- $show "mkdir $gentop"
- $run mkdir "$gentop"
- status=$?
- if test $status -ne 0 && test ! -d "$gentop"; then
- exit $status
- fi
- generated="$generated $gentop"
-
- for xlib in $convenience; do
- # Extract the objects.
- case $xlib in
- [\\/]* | [A-Za-z]:[\\/]*) xabs="$xlib" ;;
- *) xabs=`pwd`"/$xlib" ;;
- esac
- xlib=`$echo "X$xlib" | $Xsed -e 's%^.*/%%'`
- xdir="$gentop/$xlib"
-
- $show "${rm}r $xdir"
- $run ${rm}r "$xdir"
- $show "mkdir $xdir"
- $run mkdir "$xdir"
- status=$?
- if test $status -ne 0 && test ! -d "$xdir"; then
- exit $status
- fi
- $show "(cd $xdir && $AR x $xabs)"
- $run eval "(cd \$xdir && $AR x \$xabs)" || exit $?
-
- libobjs="$libobjs "`find $xdir -name \*.o -print -o -name \*.lo -print | $NL2SP`
- done
- fi
- fi
-
- if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then
- eval flag=\"$thread_safe_flag_spec\"
- linker_flags="$linker_flags $flag"
- fi
-
- # Make a backup of the uninstalled library when relinking
- if test "$mode" = relink; then
- $run eval '(cd $output_objdir && $rm ${realname}U && $mv $realname ${realname}U)' || exit $?
- fi
-
- # Do each of the archive commands.
- if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then
- eval cmds=\"$archive_expsym_cmds\"
- else
- save_deplibs="$deplibs"
- for conv in $convenience; do
- tmp_deplibs=
- for test_deplib in $deplibs; do
- if test "$test_deplib" != "$conv"; then
- tmp_deplibs="$tmp_deplibs $test_deplib"
- fi
- done
- deplibs="$tmp_deplibs"
- done
- eval cmds=\"$archive_cmds\"
- deplibs="$save_deplibs"
- fi
- save_ifs="$IFS"; IFS='~'
- for cmd in $cmds; do
- IFS="$save_ifs"
- $show "$cmd"
- $run eval "$cmd" || exit $?
- done
- IFS="$save_ifs"
-
- # Restore the uninstalled library and exit
- if test "$mode" = relink; then
- $run eval '(cd $output_objdir && $rm ${realname}T && $mv $realname ${realname}T && $mv "$realname"U $realname)' || exit $?
- exit 0
- fi
-
- # Create links to the real library.
- for linkname in $linknames; do
- if test "$realname" != "$linkname"; then
- $show "(cd $output_objdir && $rm $linkname && $LN_S $realname $linkname)"
- $run eval '(cd $output_objdir && $rm $linkname && $LN_S $realname $linkname)' || exit $?
- fi
- done
-
- # If -module or -export-dynamic was specified, set the dlname.
- if test "$module" = yes || test "$export_dynamic" = yes; then
- # On all known operating systems, these are identical.
- dlname="$soname"
- fi
- fi
- ;;
-
- obj)
- if test -n "$deplibs"; then
- $echo "$modename: warning: \`-l' and \`-L' are ignored for objects" 1>&2
- fi
-
- if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
- $echo "$modename: warning: \`-dlopen' is ignored for objects" 1>&2
- fi
-
- if test -n "$rpath"; then
- $echo "$modename: warning: \`-rpath' is ignored for objects" 1>&2
- fi
-
- if test -n "$xrpath"; then
- $echo "$modename: warning: \`-R' is ignored for objects" 1>&2
- fi
-
- if test -n "$vinfo"; then
- $echo "$modename: warning: \`-version-info' is ignored for objects" 1>&2
- fi
-
- if test -n "$release"; then
- $echo "$modename: warning: \`-release' is ignored for objects" 1>&2
- fi
-
- case $output in
- *.lo)
- if test -n "$objs$old_deplibs"; then
- $echo "$modename: cannot build library object \`$output' from non-libtool objects" 1>&2
- exit 1
- fi
- libobj="$output"
- obj=`$echo "X$output" | $Xsed -e "$lo2o"`
- ;;
- *)
- libobj=
- obj="$output"
- ;;
- esac
-
- # Delete the old objects.
- $run $rm $obj $libobj
-
- # Objects from convenience libraries. This assumes
- # single-version convenience libraries. Whenever we create
- # different ones for PIC/non-PIC, this we'll have to duplicate
- # the extraction.
- reload_conv_objs=
- gentop=
- # reload_cmds runs $LD directly, so let us get rid of
- # -Wl from whole_archive_flag_spec
- wl=
-
- if test -n "$convenience"; then
- if test -n "$whole_archive_flag_spec"; then
- eval reload_conv_objs=\"\$reload_objs $whole_archive_flag_spec\"
- else
- gentop="$output_objdir/${obj}x"
- $show "${rm}r $gentop"
- $run ${rm}r "$gentop"
- $show "mkdir $gentop"
- $run mkdir "$gentop"
- status=$?
- if test $status -ne 0 && test ! -d "$gentop"; then
- exit $status
- fi
- generated="$generated $gentop"
-
- for xlib in $convenience; do
- # Extract the objects.
- case $xlib in
- [\\/]* | [A-Za-z]:[\\/]*) xabs="$xlib" ;;
- *) xabs=`pwd`"/$xlib" ;;
- esac
- xlib=`$echo "X$xlib" | $Xsed -e 's%^.*/%%'`
- xdir="$gentop/$xlib"
-
- $show "${rm}r $xdir"
- $run ${rm}r "$xdir"
- $show "mkdir $xdir"
- $run mkdir "$xdir"
- status=$?
- if test $status -ne 0 && test ! -d "$xdir"; then
- exit $status
- fi
- $show "(cd $xdir && $AR x $xabs)"
- $run eval "(cd \$xdir && $AR x \$xabs)" || exit $?
-
- reload_conv_objs="$reload_objs "`find $xdir -name \*.o -print -o -name \*.lo -print | $NL2SP`
- done
- fi
- fi
-
- # Create the old-style object.
- reload_objs="$objs$old_deplibs "`$echo "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}$'/d' -e '/\.lib$/d' -e "$lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test
-
- output="$obj"
- eval cmds=\"$reload_cmds\"
- save_ifs="$IFS"; IFS='~'
- for cmd in $cmds; do
- IFS="$save_ifs"
- $show "$cmd"
- $run eval "$cmd" || exit $?
- done
- IFS="$save_ifs"
-
- # Exit if we aren't doing a library object file.
- if test -z "$libobj"; then
- if test -n "$gentop"; then
- $show "${rm}r $gentop"
- $run ${rm}r $gentop
- fi
-
- exit 0
- fi
-
- if test "$build_libtool_libs" != yes; then
- if test -n "$gentop"; then
- $show "${rm}r $gentop"
- $run ${rm}r $gentop
- fi
-
- # Create an invalid libtool object if no PIC, so that we don't
- # accidentally link it into a program.
- $show "echo timestamp > $libobj"
- $run eval "echo timestamp > $libobj" || exit $?
- exit 0
- fi
-
- if test -n "$pic_flag" || test "$pic_mode" != default; then
- # Only do commands if we really have different PIC objects.
- reload_objs="$libobjs $reload_conv_objs"
- output="$libobj"
- eval cmds=\"$reload_cmds\"
- save_ifs="$IFS"; IFS='~'
- for cmd in $cmds; do
- IFS="$save_ifs"
- $show "$cmd"
- $run eval "$cmd" || exit $?
- done
- IFS="$save_ifs"
- else
- # Just create a symlink.
- $show $rm $libobj
- $run $rm $libobj
- xdir=`$echo "X$libobj" | $Xsed -e 's%/[^/]*$%%'`
- if test "X$xdir" = "X$libobj"; then
- xdir="."
- else
- xdir="$xdir"
- fi
- baseobj=`$echo "X$libobj" | $Xsed -e 's%^.*/%%'`
- oldobj=`$echo "X$baseobj" | $Xsed -e "$lo2o"`
- $show "(cd $xdir && $LN_S $oldobj $baseobj)"
- $run eval '(cd $xdir && $LN_S $oldobj $baseobj)' || exit $?
- fi
-
- if test -n "$gentop"; then
- $show "${rm}r $gentop"
- $run ${rm}r $gentop
- fi
-
- exit 0
- ;;
-
- prog)
- case $host in
- *cygwin*) output=`echo $output | ${SED} -e 's,.exe$,,;s,$,.exe,'` ;;
- esac
- if test -n "$vinfo"; then
- $echo "$modename: warning: \`-version-info' is ignored for programs" 1>&2
- fi
-
- if test -n "$release"; then
- $echo "$modename: warning: \`-release' is ignored for programs" 1>&2
- fi
-
- if test "$preload" = yes; then
- if test "$dlopen_support" = unknown && test "$dlopen_self" = unknown &&
- test "$dlopen_self_static" = unknown; then
- $echo "$modename: warning: \`AC_LIBTOOL_DLOPEN' not used. Assuming no dlopen support."
- fi
- fi
-
- case $host in
- *-*-rhapsody* | *-*-darwin1.[012])
- # On Rhapsody replace the C library is the System framework
- compile_deplibs=`$echo "X $compile_deplibs" | $Xsed -e 's/ -lc / -framework System /'`
- finalize_deplibs=`$echo "X $finalize_deplibs" | $Xsed -e 's/ -lc / -framework System /'`
- case $host in
- *darwin*)
- # Don't allow lazy linking, it breaks C++ global constructors
- compile_command="$compile_command ${wl}-bind_at_load"
- finalize_command="$finalize_command ${wl}-bind_at_load"
- ;;
- esac
- ;;
- esac
-
- compile_command="$compile_command $compile_deplibs"
- finalize_command="$finalize_command $finalize_deplibs"
-
- if test -n "$rpath$xrpath"; then
- # If the user specified any rpath flags, then add them.
- for libdir in $rpath $xrpath; do
- # This is the magic to use -rpath.
- case "$finalize_rpath " in
- *" $libdir "*) ;;
- *) finalize_rpath="$finalize_rpath $libdir" ;;
- esac
- done
- fi
-
- # Now hardcode the library paths
- rpath=
- hardcode_libdirs=
- for libdir in $compile_rpath $finalize_rpath; do
- if test -n "$hardcode_libdir_flag_spec"; then
- if test -n "$hardcode_libdir_separator"; then
- if test -z "$hardcode_libdirs"; then
- hardcode_libdirs="$libdir"
- else
- # Just accumulate the unique libdirs.
- case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
- *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
- ;;
- *)
- hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir"
- ;;
- esac
- fi
- else
- eval flag=\"$hardcode_libdir_flag_spec\"
- rpath="$rpath $flag"
- fi
- elif test -n "$runpath_var"; then
- case "$perm_rpath " in
- *" $libdir "*) ;;
- *) perm_rpath="$perm_rpath $libdir" ;;
- esac
- fi
- case $host in
- *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*)
- case :$dllsearchpath: in
- *":$libdir:"*) ;;
- *) dllsearchpath="$dllsearchpath:$libdir";;
- esac
- ;;
- esac
- done
- # Substitute the hardcoded libdirs into the rpath.
- if test -n "$hardcode_libdir_separator" &&
- test -n "$hardcode_libdirs"; then
- libdir="$hardcode_libdirs"
- eval rpath=\" $hardcode_libdir_flag_spec\"
- fi
- compile_rpath="$rpath"
-
- rpath=
- hardcode_libdirs=
- for libdir in $finalize_rpath; do
- if test -n "$hardcode_libdir_flag_spec"; then
- if test -n "$hardcode_libdir_separator"; then
- if test -z "$hardcode_libdirs"; then
- hardcode_libdirs="$libdir"
- else
- # Just accumulate the unique libdirs.
- case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
- *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
- ;;
- *)
- hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir"
- ;;
- esac
- fi
- else
- eval flag=\"$hardcode_libdir_flag_spec\"
- rpath="$rpath $flag"
- fi
- elif test -n "$runpath_var"; then
- case "$finalize_perm_rpath " in
- *" $libdir "*) ;;
- *) finalize_perm_rpath="$finalize_perm_rpath $libdir" ;;
- esac
- fi
- done
- # Substitute the hardcoded libdirs into the rpath.
- if test -n "$hardcode_libdir_separator" &&
- test -n "$hardcode_libdirs"; then
- libdir="$hardcode_libdirs"
- eval rpath=\" $hardcode_libdir_flag_spec\"
- fi
- finalize_rpath="$rpath"
-
- if test -n "$libobjs" && test "$build_old_libs" = yes; then
- # Transform all the library objects into standard objects.
- compile_command=`$echo "X$compile_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
- finalize_command=`$echo "X$finalize_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
- fi
-
- dlsyms=
- if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
- if test -n "$NM" && test -n "$global_symbol_pipe"; then
- dlsyms="${outputname}S.c"
- else
- $echo "$modename: not configured to extract global symbols from dlpreopened files" 1>&2
- fi
- fi
-
- if test -n "$dlsyms"; then
- case $dlsyms in
- "") ;;
- *.c)
- # Discover the nlist of each of the dlfiles.
- nlist="$output_objdir/${outputname}.nm"
-
- $show "$rm $nlist ${nlist}S ${nlist}T"
- $run $rm "$nlist" "${nlist}S" "${nlist}T"
-
- # Parse the name list into a source file.
- $show "creating $output_objdir/$dlsyms"
-
- test -z "$run" && $echo > "$output_objdir/$dlsyms" "\
-/* $dlsyms - symbol resolution table for \`$outputname' dlsym emulation. */
-/* Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP */
-
-#ifdef __cplusplus
-extern \"C\" {
-#endif
-
-/* Prevent the only kind of declaration conflicts we can make. */
-#define lt_preloaded_symbols some_other_symbol
-
-/* External symbol declarations for the compiler. */\
-"
-
- if test "$dlself" = yes; then
- $show "generating symbol list for \`$output'"
-
- test -z "$run" && $echo ': @PROGRAM@ ' > "$nlist"
-
- # Add our own program objects to the symbol list.
- progfiles=`$echo "X$objs$old_deplibs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
- for arg in $progfiles; do
- $show "extracting global C symbols from \`$arg'"
- $run eval "$NM $arg | $global_symbol_pipe >> '$nlist'"
- done
-
- if test -n "$exclude_expsyms"; then
- $run eval 'egrep -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T'
- $run eval '$mv "$nlist"T "$nlist"'
- fi
-
- if test -n "$export_symbols_regex"; then
- $run eval 'egrep -e "$export_symbols_regex" "$nlist" > "$nlist"T'
- $run eval '$mv "$nlist"T "$nlist"'
- fi
-
- # Prepare the list of exported symbols
- if test -z "$export_symbols"; then
- export_symbols="$output_objdir/$output.exp"
- $run $rm $export_symbols
- $run eval "${SED} -n -e '/^: @PROGRAM@$/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"'
- else
- $run eval "${SED} -e 's/\([][.*^$]\)/\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$output.exp"'
- $run eval 'grep -f "$output_objdir/$output.exp" < "$nlist" > "$nlist"T'
- $run eval 'mv "$nlist"T "$nlist"'
- fi
- fi
-
- for arg in $dlprefiles; do
- $show "extracting global C symbols from \`$arg'"
- name=`echo "$arg" | ${SED} -e 's%^.*/%%'`
- $run eval 'echo ": $name " >> "$nlist"'
- $run eval "$NM $arg | $global_symbol_pipe >> '$nlist'"
- done
-
- if test -z "$run"; then
- # Make sure we have at least an empty file.
- test -f "$nlist" || : > "$nlist"
-
- if test -n "$exclude_expsyms"; then
- egrep -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T
- $mv "$nlist"T "$nlist"
- fi
-
- # Try sorting and uniquifying the output.
- if grep -v "^: " < "$nlist" |
- if sort -k 3 </dev/null >/dev/null 2>&1; then
- sort -k 3
- else
- sort +2
- fi |
- uniq > "$nlist"S; then
- :
- else
- grep -v "^: " < "$nlist" > "$nlist"S
- fi
-
- if test -f "$nlist"S; then
- eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$dlsyms"'
- else
- echo '/* NONE */' >> "$output_objdir/$dlsyms"
- fi
-
- $echo >> "$output_objdir/$dlsyms" "\
-
-#undef lt_preloaded_symbols
-
-#if defined (__STDC__) && __STDC__
-# define lt_ptr void *
-#else
-# define lt_ptr char *
-# define const
-#endif
-
-/* The mapping between symbol names and symbols. */
-const struct {
- const char *name;
- lt_ptr address;
-}
-lt_preloaded_symbols[] =
-{\
-"
-
- eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$dlsyms"
-
- $echo >> "$output_objdir/$dlsyms" "\
- {0, (lt_ptr) 0}
-};
-
-/* This works around a problem in FreeBSD linker */
-#ifdef FREEBSD_WORKAROUND
-static const void *lt_preloaded_setup() {
- return lt_preloaded_symbols;
-}
-#endif
-
-#ifdef __cplusplus
-}
-#endif\
-"
- fi
-
- pic_flag_for_symtable=
- case $host in
- # compiling the symbol table file with pic_flag works around
- # a FreeBSD bug that causes programs to crash when -lm is
- # linked before any other PIC object. But we must not use
- # pic_flag when linking with -static. The problem exists in
- # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1.
- *-*-freebsd2*|*-*-freebsd3.0*|*-*-freebsdelf3.0*)
- case "$compile_command " in
- *" -static "*) ;;
- *) pic_flag_for_symtable=" $pic_flag -DPIC -DFREEBSD_WORKAROUND";;
- esac;;
- *-*-hpux*)
- case "$compile_command " in
- *" -static "*) ;;
- *) pic_flag_for_symtable=" $pic_flag -DPIC";;
- esac
- esac
-
- # Now compile the dynamic symbol file.
- $show "(cd $output_objdir && $CC -c$no_builtin_flag$pic_flag_for_symtable \"$dlsyms\")"
- $run eval '(cd $output_objdir && $CC -c$no_builtin_flag$pic_flag_for_symtable "$dlsyms")' || exit $?
-
- # Clean up the generated files.
- $show "$rm $output_objdir/$dlsyms $nlist ${nlist}S ${nlist}T"
- $run $rm "$output_objdir/$dlsyms" "$nlist" "${nlist}S" "${nlist}T"
-
- # Transform the symbol file into the correct name.
- compile_command=`$echo "X$compile_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%"`
- finalize_command=`$echo "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%"`
- ;;
- *)
- $echo "$modename: unknown suffix for \`$dlsyms'" 1>&2
- exit 1
- ;;
- esac
- else
- # We keep going just in case the user didn't refer to
- # lt_preloaded_symbols. The linker will fail if global_symbol_pipe
- # really was required.
-
- # Nullify the symbol file.
- compile_command=`$echo "X$compile_command" | $Xsed -e "s% @SYMFILE@%%"`
- finalize_command=`$echo "X$finalize_command" | $Xsed -e "s% @SYMFILE@%%"`
- fi
-
- if test $need_relink = no || test "$build_libtool_libs" != yes; then
- # Replace the output file specification.
- compile_command=`$echo "X$compile_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'`
- link_command="$compile_command$compile_rpath"
-
- # We have no uninstalled library dependencies, so finalize right now.
- $show "$link_command"
- $run eval "$link_command"
- status=$?
-
- # Delete the generated files.
- if test -n "$dlsyms"; then
- $show "$rm $output_objdir/${outputname}S.${objext}"
- $run $rm "$output_objdir/${outputname}S.${objext}"
- fi
-
- exit $status
- fi
-
- if test -n "$shlibpath_var"; then
- # We should set the shlibpath_var
- rpath=
- for dir in $temp_rpath; do
- case $dir in
- [\\/]* | [A-Za-z]:[\\/]*)
- # Absolute path.
- rpath="$rpath$dir:"
- ;;
- *)
- # Relative path: add a thisdir entry.
- rpath="$rpath\$thisdir/$dir:"
- ;;
- esac
- done
- temp_rpath="$rpath"
- fi
-
- if test -n "$compile_shlibpath$finalize_shlibpath"; then
- compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command"
- fi
- if test -n "$finalize_shlibpath"; then
- finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command"
- fi
-
- compile_var=
- finalize_var=
- if test -n "$runpath_var"; then
- if test -n "$perm_rpath"; then
- # We should set the runpath_var.
- rpath=
- for dir in $perm_rpath; do
- rpath="$rpath$dir:"
- done
- compile_var="$runpath_var=\"$rpath\$$runpath_var\" "
- fi
- if test -n "$finalize_perm_rpath"; then
- # We should set the runpath_var.
- rpath=
- for dir in $finalize_perm_rpath; do
- rpath="$rpath$dir:"
- done
- finalize_var="$runpath_var=\"$rpath\$$runpath_var\" "
- fi
- fi
-
- if test "$no_install" = yes; then
- # We don't need to create a wrapper script.
- link_command="$compile_var$compile_command$compile_rpath"
- # Replace the output file specification.
- link_command=`$echo "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'`
- # Delete the old output file.
- $run $rm $output
- # Link the executable and exit
- $show "$link_command"
- $run eval "$link_command" || exit $?
- exit 0
- fi
-
- if test "$hardcode_action" = relink; then
- # Fast installation is not supported
- link_command="$compile_var$compile_command$compile_rpath"
- relink_command="$finalize_var$finalize_command$finalize_rpath"
-
- $echo "$modename: warning: this platform does not like uninstalled shared libraries" 1>&2
- $echo "$modename: \`$output' will be relinked during installation" 1>&2
- else
- if test "$fast_install" != no; then
- link_command="$finalize_var$compile_command$finalize_rpath"
- if test "$fast_install" = yes; then
- relink_command=`$echo "X$compile_var$compile_command$compile_rpath" | $Xsed -e 's%@OUTPUT@%\$progdir/\$file%g'`
- else
- # fast_install is set to needless
- relink_command=
- fi
- else
- link_command="$compile_var$compile_command$compile_rpath"
- relink_command="$finalize_var$finalize_command$finalize_rpath"
- fi
- fi
-
- # Replace the output file specification.
- link_command=`$echo "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'`
-
- # Delete the old output files.
- $run $rm $output $output_objdir/$outputname $output_objdir/lt-$outputname
-
- $show "$link_command"
- $run eval "$link_command" || exit $?
-
- # Now create the wrapper script.
- $show "creating $output"
-
- # Quote the relink command for shipping.
- if test -n "$relink_command"; then
- # Preserve any variables that may affect compiler behavior
- for var in $variables_saved_for_relink; do
- if eval test -z \"\${$var+set}\"; then
- relink_command="{ test -z \"\${$var+set}\" || unset $var || { $var=; export $var; }; }; $relink_command"
- elif eval var_value=\$$var; test -z "$var_value"; then
- relink_command="$var=; export $var; $relink_command"
- else
- var_value=`$echo "X$var_value" | $Xsed -e "$sed_quote_subst"`
- relink_command="$var=\"$var_value\"; export $var; $relink_command"
- fi
- done
- relink_command="(cd `pwd`; $relink_command)"
- relink_command=`$echo "X$relink_command" | $Xsed -e "$sed_quote_subst"`
- fi
-
- # Quote $echo for shipping.
- if test "X$echo" = "X$SHELL $0 --fallback-echo"; then
- case $0 in
- [\\/]* | [A-Za-z]:[\\/]*) qecho="$SHELL $0 --fallback-echo";;
- *) qecho="$SHELL `pwd`/$0 --fallback-echo";;
- esac
- qecho=`$echo "X$qecho" | $Xsed -e "$sed_quote_subst"`
- else
- qecho=`$echo "X$echo" | $Xsed -e "$sed_quote_subst"`
- fi
-
- # Only actually do things if our run command is non-null.
- if test -z "$run"; then
- # win32 will think the script is a binary if it has
- # a .exe suffix, so we strip it off here.
- case $output in
- *.exe) output=`echo $output|${SED} 's,.exe$,,'` ;;
- esac
- # test for cygwin because mv fails w/o .exe extensions
- case $host in
- *cygwin*) exeext=.exe ;;
- *) exeext= ;;
- esac
- $rm $output
- trap "$rm $output; exit 1" 1 2 15
-
- $echo > $output "\
-#! $SHELL
-
-# $output - temporary wrapper script for $objdir/$outputname
-# Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP
-#
-# The $output program cannot be directly executed until all the libtool
-# libraries that it depends on are installed.
-#
-# This wrapper script should never be moved out of the build directory.
-# If it is, it will not operate correctly.
-
-# Sed substitution that helps us do robust quoting. It backslashifies
-# metacharacters that are still active within double-quoted strings.
-Xsed="${SED}"' -e 1s/^X//'
-sed_quote_subst='$sed_quote_subst'
-
-# The HP-UX ksh and POSIX shell print the target directory to stdout
-# if CDPATH is set.
-if test \"\${CDPATH+set}\" = set; then CDPATH=:; export CDPATH; fi
-
-relink_command=\"$relink_command\"
-
-# This environment variable determines our operation mode.
-if test \"\$libtool_install_magic\" = \"$magic\"; then
- # install mode needs the following variable:
- notinst_deplibs='$notinst_deplibs'
-else
- # When we are sourced in execute mode, \$file and \$echo are already set.
- if test \"\$libtool_execute_magic\" != \"$magic\"; then
- echo=\"$qecho\"
- file=\"\$0\"
- # Make sure echo works.
- if test \"X\$1\" = X--no-reexec; then
- # Discard the --no-reexec flag, and continue.
- shift
- elif test \"X\`(\$echo '\t') 2>/dev/null\`\" = 'X\t'; then
- # Yippee, \$echo works!
- :
- else
- # Restart under the correct shell, and then maybe \$echo will work.
- exec $SHELL \"\$0\" --no-reexec \${1+\"\$@\"}
- fi
- fi\
-"
- $echo >> $output "\
-
- # Find the directory that this script lives in.
- thisdir=\`\$echo \"X\$file\" | \$Xsed -e 's%/[^/]*$%%'\`
- test \"x\$thisdir\" = \"x\$file\" && thisdir=.
-
- # Follow symbolic links until we get to the real thisdir.
- file=\`ls -ld \"\$file\" | ${SED} -n 's/.*-> //p'\`
- while test -n \"\$file\"; do
- destdir=\`\$echo \"X\$file\" | \$Xsed -e 's%/[^/]*\$%%'\`
-
- # If there was a directory component, then change thisdir.
- if test \"x\$destdir\" != \"x\$file\"; then
- case \"\$destdir\" in
- [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;;
- *) thisdir=\"\$thisdir/\$destdir\" ;;
- esac
- fi
-
- file=\`\$echo \"X\$file\" | \$Xsed -e 's%^.*/%%'\`
- file=\`ls -ld \"\$thisdir/\$file\" | ${SED} -n 's/.*-> //p'\`
- done
-
- # Try to get the absolute directory name.
- absdir=\`cd \"\$thisdir\" && pwd\`
- test -n \"\$absdir\" && thisdir=\"\$absdir\"
-"
-
- if test "$fast_install" = yes; then
- echo >> $output "\
- program=lt-'$outputname'$exeext
- progdir=\"\$thisdir/$objdir\"
-
- if test ! -f \"\$progdir/\$program\" || \\
- { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | ${SED} 1q\`; \\
- test \"X\$file\" != \"X\$progdir/\$program\"; }; then
-
- file=\"\$\$-\$program\"
-
- if test ! -d \"\$progdir\"; then
- $mkdir \"\$progdir\"
- else
- $rm \"\$progdir/\$file\"
- fi"
-
- echo >> $output "\
-
- # relink executable if necessary
- if test -n \"\$relink_command\"; then
- if relink_command_output=\`eval \$relink_command 2>&1\`; then :
- else
- $echo \"\$relink_command_output\" >&2
- $rm \"\$progdir/\$file\"
- exit 1
- fi
- fi
-
- $mv \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null ||
- { $rm \"\$progdir/\$program\";
- $mv \"\$progdir/\$file\" \"\$progdir/\$program\"; }
- $rm \"\$progdir/\$file\"
- fi"
- else
- echo >> $output "\
- program='$outputname'
- progdir=\"\$thisdir/$objdir\"
-"
- fi
-
- echo >> $output "\
-
- if test -f \"\$progdir/\$program\"; then"
-
- # Export our shlibpath_var if we have one.
- if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then
- $echo >> $output "\
- # Add our own library path to $shlibpath_var
- $shlibpath_var=\"$temp_rpath\$$shlibpath_var\"
-
- # Some systems cannot cope with colon-terminated $shlibpath_var
- # The second colon is a workaround for a bug in BeOS R4 ${SED}
- $shlibpath_var=\`\$echo \"X\$$shlibpath_var\" | \$Xsed -e 's/::*\$//'\`
-
- export $shlibpath_var
-"
- fi
-
- # fixup the dll searchpath if we need to.
- if test -n "$dllsearchpath"; then
- $echo >> $output "\
- # Add the dll search path components to the executable PATH
- PATH=$dllsearchpath:\$PATH
-"
- fi
-
- $echo >> $output "\
- if test \"\$libtool_execute_magic\" != \"$magic\"; then
- # Run the actual program with our arguments.
-"
- case $host in
- # win32 systems need to use the prog path for dll
- # lookup to work
- *-*-cygwin* | *-*-pw32*)
- $echo >> $output "\
- exec \$progdir/\$program \${1+\"\$@\"}
-"
- ;;
-
- # Backslashes separate directories on plain windows
- *-*-mingw | *-*-os2*)
- $echo >> $output "\
- exec \$progdir\\\\\$program \${1+\"\$@\"}
-"
- ;;
-
- *)
- $echo >> $output "\
- # Export the path to the program.
- PATH=\"\$progdir:\$PATH\"
- export PATH
-
- exec \$program \${1+\"\$@\"}
-"
- ;;
- esac
- $echo >> $output "\
- \$echo \"\$0: cannot exec \$program \${1+\"\$@\"}\"
- exit 1
- fi
- else
- # The program doesn't exist.
- \$echo \"\$0: error: \$progdir/\$program does not exist\" 1>&2
- \$echo \"This script is just a wrapper for \$program.\" 1>&2
- echo \"See the $PACKAGE documentation for more information.\" 1>&2
- exit 1
- fi
-fi\
-"
- chmod +x $output
- fi
- exit 0
- ;;
- esac
-
- # See if we need to build an old-fashioned archive.
- for oldlib in $oldlibs; do
-
- if test "$build_libtool_libs" = convenience; then
- oldobjs="$libobjs_save"
- addlibs="$convenience"
- build_libtool_libs=no
- else
- if test "$build_libtool_libs" = module; then
- oldobjs="$libobjs_save"
- build_libtool_libs=no
- else
- oldobjs="$objs$old_deplibs "`$echo "X$libobjs_save" | $SP2NL | $Xsed -e '/\.'${libext}'$/d' -e '/\.lib$/d' -e "$lo2o" | $NL2SP`
- fi
- addlibs="$old_convenience"
- fi
-
- if test -n "$addlibs"; then
- gentop="$output_objdir/${outputname}x"
- $show "${rm}r $gentop"
- $run ${rm}r "$gentop"
- $show "mkdir $gentop"
- $run mkdir "$gentop"
- status=$?
- if test $status -ne 0 && test ! -d "$gentop"; then
- exit $status
- fi
- generated="$generated $gentop"
-
- # Add in members from convenience archives.
- for xlib in $addlibs; do
- # Extract the objects.
- case $xlib in
- [\\/]* | [A-Za-z]:[\\/]*) xabs="$xlib" ;;
- *) xabs=`pwd`"/$xlib" ;;
- esac
- xlib=`$echo "X$xlib" | $Xsed -e 's%^.*/%%'`
- xdir="$gentop/$xlib"
-
- $show "${rm}r $xdir"
- $run ${rm}r "$xdir"
- $show "mkdir $xdir"
- $run mkdir "$xdir"
- status=$?
- if test $status -ne 0 && test ! -d "$xdir"; then
- exit $status
- fi
- $show "(cd $xdir && $AR x $xabs)"
- $run eval "(cd \$xdir && $AR x \$xabs)" || exit $?
-
- oldobjs="$oldobjs "`find $xdir -name \*.${objext} -print -o -name \*.lo -print | $NL2SP`
- done
- fi
-
- # Do each command in the archive commands.
- if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then
- eval cmds=\"$old_archive_from_new_cmds\"
- else
- # Ensure that we have .o objects in place in case we decided
- # not to build a shared library, and have fallen back to building
- # static libs even though --disable-static was passed!
- for oldobj in $oldobjs; do
- if test ! -f $oldobj; then
- xdir=`$echo "X$oldobj" | $Xsed -e 's%/[^/]*$%%'`
- if test "X$xdir" = "X$oldobj"; then
- xdir="."
- else
- xdir="$xdir"
- fi
- baseobj=`$echo "X$oldobj" | $Xsed -e 's%^.*/%%'`
- obj=`$echo "X$baseobj" | $Xsed -e "$o2lo"`
- $show "(cd $xdir && ${LN_S} $obj $baseobj)"
- $run eval '(cd $xdir && ${LN_S} $obj $baseobj)' || exit $?
- fi
- done
-
- eval cmds=\"$old_archive_cmds\"
- fi
- save_ifs="$IFS"; IFS='~'
- for cmd in $cmds; do
- IFS="$save_ifs"
- $show "$cmd"
- $run eval "$cmd" || exit $?
- done
- IFS="$save_ifs"
- done
-
- if test -n "$generated"; then
- $show "${rm}r$generated"
- $run ${rm}r$generated
- fi
-
- # Now create the libtool archive.
- case $output in
- *.la)
- old_library=
- test "$build_old_libs" = yes && old_library="$libname.$libext"
- $show "creating $output"
-
- # Preserve any variables that may affect compiler behavior
- for var in $variables_saved_for_relink; do
- if eval test -z \"\${$var+set}\"; then
- relink_command="{ test -z \"\${$var+set}\" || unset $var || { $var=; export $var; }; }; $relink_command"
- elif eval var_value=\$$var; test -z "$var_value"; then
- relink_command="$var=; export $var; $relink_command"
- else
- var_value=`$echo "X$var_value" | $Xsed -e "$sed_quote_subst"`
- relink_command="$var=\"$var_value\"; export $var; $relink_command"
- fi
- done
- # Quote the link command for shipping.
- relink_command="(cd `pwd`; $SHELL $0 --mode=relink $libtool_args)"
- relink_command=`$echo "X$relink_command" | $Xsed -e "$sed_quote_subst"`
-
- # Only create the output if not a dry run.
- if test -z "$run"; then
- for installed in no yes; do
- if test "$installed" = yes; then
- if test -z "$install_libdir"; then
- break
- fi
- output="$output_objdir/$outputname"i
- # Replace all uninstalled libtool libraries with the installed ones
- newdependency_libs=
- for deplib in $dependency_libs; do
- case $deplib in
- *.la)
- name=`$echo "X$deplib" | $Xsed -e 's%^.*/%%'`
- eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib`
- if test -z "$libdir"; then
- $echo "$modename: \`$deplib' is not a valid libtool archive" 1>&2
- exit 1
- fi
- newdependency_libs="$newdependency_libs $libdir/$name"
- ;;
- *) newdependency_libs="$newdependency_libs $deplib" ;;
- esac
- done
- dependency_libs="$newdependency_libs"
- newdlfiles=
- for lib in $dlfiles; do
- name=`$echo "X$lib" | $Xsed -e 's%^.*/%%'`
- eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib`
- if test -z "$libdir"; then
- $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2
- exit 1
- fi
- newdlfiles="$newdlfiles $libdir/$name"
- done
- dlfiles="$newdlfiles"
- newdlprefiles=
- for lib in $dlprefiles; do
- name=`$echo "X$lib" | $Xsed -e 's%^.*/%%'`
- eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib`
- if test -z "$libdir"; then
- $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2
- exit 1
- fi
- newdlprefiles="$newdlprefiles $libdir/$name"
- done
- dlprefiles="$newdlprefiles"
- fi
- $rm $output
- # place dlname in correct position for cygwin
- tdlname=$dlname
- case $host,$output,$installed,$module,$dlname in
- *cygwin*,*lai,yes,no,*.dll) tdlname=../bin/$dlname ;;
- esac
- $echo > $output "\
-# $outputname - a libtool library file
-# Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP
-#
-# Please DO NOT delete this file!
-# It is necessary for linking the library.
-
-# The name that we can dlopen(3).
-dlname='$tdlname'
-
-# Names of this library.
-library_names='$library_names'
-
-# The name of the static archive.
-old_library='$old_library'
-
-# Libraries that this one depends upon.
-dependency_libs='$dependency_libs'
-
-# Version information for $libname.
-current=$current
-age=$age
-revision=$revision
-
-# Is this an already installed library?
-installed=$installed
-
-# Files to dlopen/dlpreopen
-dlopen='$dlfiles'
-dlpreopen='$dlprefiles'
-
-# Directory that this library needs to be installed in:
-libdir='$install_libdir'"
- if test "$installed" = no && test $need_relink = yes; then
- $echo >> $output "\
-relink_command=\"$relink_command\""
- fi
- done
- fi
-
- # Do a symbolic link so that the libtool archive can be found in
- # LD_LIBRARY_PATH before the program is installed.
- $show "(cd $output_objdir && $rm $outputname && $LN_S ../$outputname $outputname)"
- $run eval '(cd $output_objdir && $rm $outputname && $LN_S ../$outputname $outputname)' || exit $?
- ;;
- esac
- exit 0
- ;;
-
- # libtool install mode
- install)
- modename="$modename: install"
-
- # There may be an optional sh(1) argument at the beginning of
- # install_prog (especially on Windows NT).
- if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh ||
- # Allow the use of GNU shtool's install command.
- $echo "X$nonopt" | $Xsed | grep shtool > /dev/null; then
- # Aesthetically quote it.
- arg=`$echo "X$nonopt" | $Xsed -e "$sed_quote_subst"`
- case $arg in
- *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*)
- arg="\"$arg\""
- ;;
- esac
- install_prog="$arg "
- arg="$1"
- shift
- else
- install_prog=
- arg="$nonopt"
- fi
-
- # The real first argument should be the name of the installation program.
- # Aesthetically quote it.
- arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`
- case $arg in
- *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*)
- arg="\"$arg\""
- ;;
- esac
- install_prog="$install_prog$arg"
-
- # We need to accept at least all the BSD install flags.
- dest=
- files=
- opts=
- prev=
- install_type=
- isdir=no
- stripme=
- for arg
- do
- if test -n "$dest"; then
- files="$files $dest"
- dest="$arg"
- continue
- fi
-
- case $arg in
- -d) isdir=yes ;;
- -f) prev="-f" ;;
- -g) prev="-g" ;;
- -m) prev="-m" ;;
- -o) prev="-o" ;;
- -s)
- stripme=" -s"
- continue
- ;;
- -*) ;;
-
- *)
- # If the previous option needed an argument, then skip it.
- if test -n "$prev"; then
- prev=
- else
- dest="$arg"
- continue
- fi
- ;;
- esac
-
- # Aesthetically quote the argument.
- arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`
- case $arg in
- *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*)
- arg="\"$arg\""
- ;;
- esac
- install_prog="$install_prog $arg"
- done
-
- if test -z "$install_prog"; then
- $echo "$modename: you must specify an install program" 1>&2
- $echo "$help" 1>&2
- exit 1
- fi
-
- if test -n "$prev"; then
- $echo "$modename: the \`$prev' option requires an argument" 1>&2
- $echo "$help" 1>&2
- exit 1
- fi
-
- if test -z "$files"; then
- if test -z "$dest"; then
- $echo "$modename: no file or destination specified" 1>&2
- else
- $echo "$modename: you must specify a destination" 1>&2
- fi
- $echo "$help" 1>&2
- exit 1
- fi
-
- # Strip any trailing slash from the destination.
- dest=`$echo "X$dest" | $Xsed -e 's%/$%%'`
-
- # Check to see that the destination is a directory.
- test -d "$dest" && isdir=yes
- if test "$isdir" = yes; then
- destdir="$dest"
- destname=
- else
- destdir=`$echo "X$dest" | $Xsed -e 's%/[^/]*$%%'`
- test "X$destdir" = "X$dest" && destdir=.
- destname=`$echo "X$dest" | $Xsed -e 's%^.*/%%'`
-
- # Not a directory, so check to see that there is only one file specified.
- set dummy $files
- if test $# -gt 2; then
- $echo "$modename: \`$dest' is not a directory" 1>&2
- $echo "$help" 1>&2
- exit 1
- fi
- fi
- case $destdir in
- [\\/]* | [A-Za-z]:[\\/]*) ;;
- *)
- for file in $files; do
- case $file in
- *.lo) ;;
- *)
- $echo "$modename: \`$destdir' must be an absolute directory name" 1>&2
- $echo "$help" 1>&2
- exit 1
- ;;
- esac
- done
- ;;
- esac
-
- # This variable tells wrapper scripts just to set variables rather
- # than running their programs.
- libtool_install_magic="$magic"
-
- staticlibs=
- future_libdirs=
- current_libdirs=
- for file in $files; do
-
- # Do each installation.
- case $file in
- *.$libext)
- # Do the static libraries later.
- staticlibs="$staticlibs $file"
- ;;
-
- *.la)
- # Check to see that this really is a libtool archive.
- if (${SED} -e '2q' $file | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then :
- else
- $echo "$modename: \`$file' is not a valid libtool archive" 1>&2
- $echo "$help" 1>&2
- exit 1
- fi
-
- library_names=
- old_library=
- relink_command=
- # If there is no directory component, then add one.
- case $file in
- */* | *\\*) . $file ;;
- *) . ./$file ;;
- esac
-
- # Add the libdir to current_libdirs if it is the destination.
- if test "X$destdir" = "X$libdir"; then
- case "$current_libdirs " in
- *" $libdir "*) ;;
- *) current_libdirs="$current_libdirs $libdir" ;;
- esac
- else
- # Note the libdir as a future libdir.
- case "$future_libdirs " in
- *" $libdir "*) ;;
- *) future_libdirs="$future_libdirs $libdir" ;;
- esac
- fi
-
- dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'`/
- test "X$dir" = "X$file/" && dir=
- dir="$dir$objdir"
-
- if test -n "$relink_command"; then
- $echo "$modename: warning: relinking \`$file'" 1>&2
- $show "$relink_command"
- if $run eval "$relink_command"; then :
- else
- $echo "$modename: error: relink \`$file' with the above command before installing it" 1>&2
- continue
- fi
- fi
-
- # See the names of the shared library.
- set dummy $library_names
- if test -n "$2"; then
- realname="$2"
- shift
- shift
-
- srcname="$realname"
- test -n "$relink_command" && srcname="$realname"T
-
- # Install the shared library and build the symlinks.
- $show "$install_prog $dir/$srcname $destdir/$realname"
- $run eval "$install_prog $dir/$srcname $destdir/$realname" || exit $?
- if test -n "$stripme" && test -n "$striplib"; then
- $show "$striplib $destdir/$realname"
- $run eval "$striplib $destdir/$realname" || exit $?
- fi
-
- if test $# -gt 0; then
- # Delete the old symlinks, and create new ones.
- for linkname
- do
- if test "$linkname" != "$realname"; then
- $show "(cd $destdir && $rm $linkname && $LN_S $realname $linkname)"
- $run eval "(cd $destdir && $rm $linkname && $LN_S $realname $linkname)"
- fi
- done
- fi
-
- # Do each command in the postinstall commands.
- lib="$destdir/$realname"
- eval cmds=\"$postinstall_cmds\"
- save_ifs="$IFS"; IFS='~'
- for cmd in $cmds; do
- IFS="$save_ifs"
- $show "$cmd"
- $run eval "$cmd" || exit $?
- done
- IFS="$save_ifs"
- fi
-
- # Install the pseudo-library for information purposes.
- name=`$echo "X$file" | $Xsed -e 's%^.*/%%'`
- instname="$dir/$name"i
- $show "$install_prog $instname $destdir/$name"
- $run eval "$install_prog $instname $destdir/$name" || exit $?
-
- # Maybe install the static library, too.
- test -n "$old_library" && staticlibs="$staticlibs $dir/$old_library"
- ;;
-
- *.lo)
- # Install (i.e. copy) a libtool object.
-
- # Figure out destination file name, if it wasn't already specified.
- if test -n "$destname"; then
- destfile="$destdir/$destname"
- else
- destfile=`$echo "X$file" | $Xsed -e 's%^.*/%%'`
- destfile="$destdir/$destfile"
- fi
-
- # Deduce the name of the destination old-style object file.
- case $destfile in
- *.lo)
- staticdest=`$echo "X$destfile" | $Xsed -e "$lo2o"`
- ;;
- *.$objext)
- staticdest="$destfile"
- destfile=
- ;;
- *)
- $echo "$modename: cannot copy a libtool object to \`$destfile'" 1>&2
- $echo "$help" 1>&2
- exit 1
- ;;
- esac
-
- # Install the libtool object if requested.
- if test -n "$destfile"; then
- $show "$install_prog $file $destfile"
- $run eval "$install_prog $file $destfile" || exit $?
- fi
-
- # Install the old object if enabled.
- if test "$build_old_libs" = yes; then
- # Deduce the name of the old-style object file.
- staticobj=`$echo "X$file" | $Xsed -e "$lo2o"`
-
- $show "$install_prog $staticobj $staticdest"
- $run eval "$install_prog \$staticobj \$staticdest" || exit $?
- fi
- exit 0
- ;;
-
- *)
- # Figure out destination file name, if it wasn't already specified.
- if test -n "$destname"; then
- destfile="$destdir/$destname"
- else
- destfile=`$echo "X$file" | $Xsed -e 's%^.*/%%'`
- destfile="$destdir/$destfile"
- fi
-
- # Do a test to see if this is really a libtool program.
- case $host in
- *cygwin*|*mingw*)
- wrapper=`echo $file | ${SED} -e 's,.exe$,,'`
- ;;
- *)
- wrapper=$file
- ;;
- esac
- if (${SED} -e '4q' $wrapper | egrep "^# Generated by .*$PACKAGE")>/dev/null 2>&1; then
- notinst_deplibs=
- relink_command=
-
- # If there is no directory component, then add one.
- case $file in
- */* | *\\*) . $wrapper ;;
- *) . ./$wrapper ;;
- esac
-
- # Check the variables that should have been set.
- if test -z "$notinst_deplibs"; then
- $echo "$modename: invalid libtool wrapper script \`$wrapper'" 1>&2
- exit 1
- fi
-
- finalize=yes
- for lib in $notinst_deplibs; do
- # Check to see that each library is installed.
- libdir=
- if test -f "$lib"; then
- # If there is no directory component, then add one.
- case $lib in
- */* | *\\*) . $lib ;;
- *) . ./$lib ;;
- esac
- fi
- libfile="$libdir/"`$echo "X$lib" | $Xsed -e 's%^.*/%%g'` ### testsuite: skip nested quoting test
- if test -n "$libdir" && test ! -f "$libfile"; then
- $echo "$modename: warning: \`$lib' has not been installed in \`$libdir'" 1>&2
- finalize=no
- fi
- done
-
- relink_command=
- # If there is no directory component, then add one.
- case $file in
- */* | *\\*) . $wrapper ;;
- *) . ./$wrapper ;;
- esac
-
- outputname=
- if test "$fast_install" = no && test -n "$relink_command"; then
- if test "$finalize" = yes && test -z "$run"; then
- tmpdir="/tmp"
- test -n "$TMPDIR" && tmpdir="$TMPDIR"
- tmpdir="$tmpdir/libtool-$$"
- if $mkdir -p "$tmpdir" && chmod 700 "$tmpdir"; then :
- else
- $echo "$modename: error: cannot create temporary directory \`$tmpdir'" 1>&2
- continue
- fi
- file=`$echo "X$file" | $Xsed -e 's%^.*/%%'`
- outputname="$tmpdir/$file"
- # Replace the output file specification.
- relink_command=`$echo "X$relink_command" | $Xsed -e 's%@OUTPUT@%'"$outputname"'%g'`
-
- $show "$relink_command"
- if $run eval "$relink_command"; then :
- else
- $echo "$modename: error: relink \`$file' with the above command before installing it" 1>&2
- ${rm}r "$tmpdir"
- continue
- fi
- file="$outputname"
- else
- $echo "$modename: warning: cannot relink \`$file'" 1>&2
- fi
- else
- # Install the binary that we compiled earlier.
- file=`$echo "X$file" | $Xsed -e "s%\([^/]*\)$%$objdir/\1%"`
- fi
- fi
-
- # remove .exe since cygwin /usr/bin/install will append another
- # one anyways
- case $install_prog,$host in
- /usr/bin/install*,*cygwin*)
- case $file:$destfile in
- *.exe:*.exe)
- # this is ok
- ;;
- *.exe:*)
- destfile=$destfile.exe
- ;;
- *:*.exe)
- destfile=`echo $destfile | ${SED} -e 's,.exe$,,'`
- ;;
- esac
- ;;
- esac
- $show "$install_prog$stripme $file $destfile"
- $run eval "$install_prog\$stripme \$file \$destfile" || exit $?
- test -n "$outputname" && ${rm}r "$tmpdir"
- ;;
- esac
- done
-
- for file in $staticlibs; do
- name=`$echo "X$file" | $Xsed -e 's%^.*/%%'`
-
- # Set up the ranlib parameters.
- oldlib="$destdir/$name"
-
- $show "$install_prog $file $oldlib"
- $run eval "$install_prog \$file \$oldlib" || exit $?
-
- if test -n "$stripme" && test -n "$striplib"; then
- $show "$old_striplib $oldlib"
- $run eval "$old_striplib $oldlib" || exit $?
- fi
-
- # Do each command in the postinstall commands.
- eval cmds=\"$old_postinstall_cmds\"
- save_ifs="$IFS"; IFS='~'
- for cmd in $cmds; do
- IFS="$save_ifs"
- $show "$cmd"
- $run eval "$cmd" || exit $?
- done
- IFS="$save_ifs"
- done
-
- if test -n "$future_libdirs"; then
- $echo "$modename: warning: remember to run \`$progname --finish$future_libdirs'" 1>&2
- fi
-
- if test -n "$current_libdirs"; then
- # Maybe just do a dry run.
- test -n "$run" && current_libdirs=" -n$current_libdirs"
- exec_cmd='$SHELL $0 --finish$current_libdirs'
- else
- exit 0
- fi
- ;;
-
- # libtool finish mode
- finish)
- modename="$modename: finish"
- libdirs="$nonopt"
- admincmds=
-
- if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then
- for dir
- do
- libdirs="$libdirs $dir"
- done
-
- for libdir in $libdirs; do
- if test -n "$finish_cmds"; then
- # Do each command in the finish commands.
- eval cmds=\"$finish_cmds\"
- save_ifs="$IFS"; IFS='~'
- for cmd in $cmds; do
- IFS="$save_ifs"
- $show "$cmd"
- $run eval "$cmd" || admincmds="$admincmds
- $cmd"
- done
- IFS="$save_ifs"
- fi
- if test -n "$finish_eval"; then
- # Do the single finish_eval.
- eval cmds=\"$finish_eval\"
- $run eval "$cmds" || admincmds="$admincmds
- $cmds"
- fi
- done
- fi
-
- # Exit here if they wanted silent mode.
- test "$show" = ":" && exit 0
-
- echo "----------------------------------------------------------------------"
- echo "Libraries have been installed in:"
- for libdir in $libdirs; do
- echo " $libdir"
- done
- echo
- echo "If you ever happen to want to link against installed libraries"
- echo "in a given directory, LIBDIR, you must either use libtool, and"
- echo "specify the full pathname of the library, or use the \`-LLIBDIR'"
- echo "flag during linking and do at least one of the following:"
- if test -n "$shlibpath_var"; then
- echo " - add LIBDIR to the \`$shlibpath_var' environment variable"
- echo " during execution"
- fi
- if test -n "$runpath_var"; then
- echo " - add LIBDIR to the \`$runpath_var' environment variable"
- echo " during linking"
- fi
- if test -n "$hardcode_libdir_flag_spec"; then
- libdir=LIBDIR
- eval flag=\"$hardcode_libdir_flag_spec\"
-
- echo " - use the \`$flag' linker flag"
- fi
- if test -n "$admincmds"; then
- echo " - have your system administrator run these commands:$admincmds"
- fi
- if test -f /etc/ld.so.conf; then
- echo " - have your system administrator add LIBDIR to \`/etc/ld.so.conf'"
- fi
- echo
- echo "See any operating system documentation about shared libraries for"
- echo "more information, such as the ld(1) and ld.so(8) manual pages."
- echo "----------------------------------------------------------------------"
- exit 0
- ;;
-
- # libtool execute mode
- execute)
- modename="$modename: execute"
-
- # The first argument is the command name.
- cmd="$nonopt"
- if test -z "$cmd"; then
- $echo "$modename: you must specify a COMMAND" 1>&2
- $echo "$help"
- exit 1
- fi
-
- # Handle -dlopen flags immediately.
- for file in $execute_dlfiles; do
- if test ! -f "$file"; then
- $echo "$modename: \`$file' is not a file" 1>&2
- $echo "$help" 1>&2
- exit 1
- fi
-
- dir=
- case $file in
- *.la)
- # Check to see that this really is a libtool archive.
- if (${SED} -e '2q' $file | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then :
- else
- $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2
- $echo "$help" 1>&2
- exit 1
- fi
-
- # Read the libtool library.
- dlname=
- library_names=
-
- # If there is no directory component, then add one.
- case $file in
- */* | *\\*) . $file ;;
- *) . ./$file ;;
- esac
-
- # Skip this library if it cannot be dlopened.
- if test -z "$dlname"; then
- # Warn if it was a shared library.
- test -n "$library_names" && $echo "$modename: warning: \`$file' was not linked with \`-export-dynamic'"
- continue
- fi
-
- dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'`
- test "X$dir" = "X$file" && dir=.
-
- if test -f "$dir/$objdir/$dlname"; then
- dir="$dir/$objdir"
- else
- $echo "$modename: cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'" 1>&2
- exit 1
- fi
- ;;
-
- *.lo)
- # Just add the directory containing the .lo file.
- dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'`
- test "X$dir" = "X$file" && dir=.
- ;;
-
- *)
- $echo "$modename: warning \`-dlopen' is ignored for non-libtool libraries and objects" 1>&2
- continue
- ;;
- esac
-
- # Get the absolute pathname.
- absdir=`cd "$dir" && pwd`
- test -n "$absdir" && dir="$absdir"
-
- # Now add the directory to shlibpath_var.
- if eval "test -z \"\$$shlibpath_var\""; then
- eval "$shlibpath_var=\"\$dir\""
- else
- eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\""
- fi
- done
-
- # This variable tells wrapper scripts just to set shlibpath_var
- # rather than running their programs.
- libtool_execute_magic="$magic"
-
- # Check if any of the arguments is a wrapper script.
- args=
- for file
- do
- case $file in
- -*) ;;
- *)
- # Do a test to see if this is really a libtool program.
- if (${SED} -e '4q' $file | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then
- # If there is no directory component, then add one.
- case $file in
- */* | *\\*) . $file ;;
- *) . ./$file ;;
- esac
-
- # Transform arg to wrapped name.
- file="$progdir/$program"
- fi
- ;;
- esac
- # Quote arguments (to preserve shell metacharacters).
- file=`$echo "X$file" | $Xsed -e "$sed_quote_subst"`
- args="$args \"$file\""
- done
-
- if test -z "$run"; then
- if test -n "$shlibpath_var"; then
- # Export the shlibpath_var.
- eval "export $shlibpath_var"
- fi
-
- # Restore saved enviroment variables
- if test "${save_LC_ALL+set}" = set; then
- LC_ALL="$save_LC_ALL"; export LC_ALL
- fi
- if test "${save_LANG+set}" = set; then
- LANG="$save_LANG"; export LANG
- fi
-
- # Now prepare to actually exec the command.
- exec_cmd="\$cmd$args"
- else
- # Display what would be done.
- if test -n "$shlibpath_var"; then
- eval "\$echo \"\$shlibpath_var=\$$shlibpath_var\""
- $echo "export $shlibpath_var"
- fi
- $echo "$cmd$args"
- exit 0
- fi
- ;;
-
- # libtool clean and uninstall mode
- clean | uninstall)
- modename="$modename: $mode"
- rm="$nonopt"
- files=
- rmforce=
- exit_status=0
-
- # This variable tells wrapper scripts just to set variables rather
- # than running their programs.
- libtool_install_magic="$magic"
-
- for arg
- do
- case $arg in
- -f) rm="$rm $arg"; rmforce=yes ;;
- -*) rm="$rm $arg" ;;
- *) files="$files $arg" ;;
- esac
- done
-
- if test -z "$rm"; then
- $echo "$modename: you must specify an RM program" 1>&2
- $echo "$help" 1>&2
- exit 1
- fi
-
- rmdirs=
-
- for file in $files; do
- dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'`
- if test "X$dir" = "X$file"; then
- dir=.
- objdir="$objdir"
- else
- objdir="$dir/$objdir"
- fi
- name=`$echo "X$file" | $Xsed -e 's%^.*/%%'`
- test $mode = uninstall && objdir="$dir"
-
- # Remember objdir for removal later, being careful to avoid duplicates
- if test $mode = clean; then
- case " $rmdirs " in
- *" $objdir "*) ;;
- *) rmdirs="$rmdirs $objdir" ;;
- esac
- fi
-
- # Don't error if the file doesn't exist and rm -f was used.
- if (test -L "$file") >/dev/null 2>&1 \
- || (test -h "$file") >/dev/null 2>&1 \
- || test -f "$file"; then
- :
- elif test -d "$file"; then
- exit_status=1
- continue
- elif test "$rmforce" = yes; then
- continue
- fi
-
- rmfiles="$file"
-
- case $name in
- *.la)
- # Possibly a libtool archive, so verify it.
- if (${SED} -e '2q' $file | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then
- . $dir/$name
-
- # Delete the libtool libraries and symlinks.
- for n in $library_names; do
- rmfiles="$rmfiles $objdir/$n"
- done
- test -n "$old_library" && rmfiles="$rmfiles $objdir/$old_library"
- test $mode = clean && rmfiles="$rmfiles $objdir/$name $objdir/${name}i"
-
- if test $mode = uninstall; then
- if test -n "$library_names"; then
- # Do each command in the postuninstall commands.
- eval cmds=\"$postuninstall_cmds\"
- save_ifs="$IFS"; IFS='~'
- for cmd in $cmds; do
- IFS="$save_ifs"
- $show "$cmd"
- $run eval "$cmd"
- if test $? != 0 && test "$rmforce" != yes; then
- exit_status=1
- fi
- done
- IFS="$save_ifs"
- fi
-
- if test -n "$old_library"; then
- # Do each command in the old_postuninstall commands.
- eval cmds=\"$old_postuninstall_cmds\"
- save_ifs="$IFS"; IFS='~'
- for cmd in $cmds; do
- IFS="$save_ifs"
- $show "$cmd"
- $run eval "$cmd"
- if test $? != 0 && test "$rmforce" != yes; then
- exit_status=1
- fi
- done
- IFS="$save_ifs"
- fi
- # FIXME: should reinstall the best remaining shared library.
- fi
- fi
- ;;
-
- *.lo)
- if test "$build_old_libs" = yes; then
- oldobj=`$echo "X$name" | $Xsed -e "$lo2o"`
- rmfiles="$rmfiles $dir/$oldobj"
- fi
- ;;
-
- *)
- # Do a test to see if this is a libtool program.
- if test $mode = clean &&
- (${SED} -e '4q' $file | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then
- relink_command=
- . $dir/$file
-
- rmfiles="$rmfiles $objdir/$name $objdir/${name}S.${objext}"
- if test "$fast_install" = yes && test -n "$relink_command"; then
- rmfiles="$rmfiles $objdir/lt-$name"
- fi
- fi
- ;;
- esac
- $show "$rm $rmfiles"
- $run $rm $rmfiles || exit_status=1
- done
-
- # Try to remove the ${objdir}s in the directories where we deleted files
- for dir in $rmdirs; do
- if test -d "$dir"; then
- $show "rmdir $dir"
- $run rmdir $dir >/dev/null 2>&1
- fi
- done
-
- exit $exit_status
- ;;
-
- "")
- $echo "$modename: you must specify a MODE" 1>&2
- $echo "$generic_help" 1>&2
- exit 1
- ;;
- esac
-
- if test -z "$exec_cmd"; then
- $echo "$modename: invalid operation mode \`$mode'" 1>&2
- $echo "$generic_help" 1>&2
- exit 1
- fi
-fi # test -z "$show_help"
-
-if test -n "$exec_cmd"; then
- eval exec $exec_cmd
- exit 1
-fi
-
-# We need to display help for each of the modes.
-case $mode in
-"") $echo \
-"Usage: $modename [OPTION]... [MODE-ARG]...
-
-Provide generalized library-building support services.
-
- --config show all configuration variables
- --debug enable verbose shell tracing
--n, --dry-run display commands without modifying any files
- --features display basic configuration information and exit
- --finish same as \`--mode=finish'
- --help display this help message and exit
- --mode=MODE use operation mode MODE [default=inferred from MODE-ARGS]
- --quiet same as \`--silent'
- --silent don't print informational messages
- --version print version information
-
-MODE must be one of the following:
-
- clean remove files from the build directory
- compile compile a source file into a libtool object
- execute automatically set library path, then run a program
- finish complete the installation of libtool libraries
- install install libraries or executables
- link create a library or an executable
- uninstall remove libraries from an installed directory
-
-MODE-ARGS vary depending on the MODE. Try \`$modename --help --mode=MODE' for
-a more detailed description of MODE."
- exit 0
- ;;
-
-clean)
- $echo \
-"Usage: $modename [OPTION]... --mode=clean RM [RM-OPTION]... FILE...
-
-Remove files from the build directory.
-
-RM is the name of the program to use to delete files associated with each FILE
-(typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed
-to RM.
-
-If FILE is a libtool library, object or program, all the files associated
-with it are deleted. Otherwise, only FILE itself is deleted using RM."
- ;;
-
-compile)
- $echo \
-"Usage: $modename [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE
-
-Compile a source file into a libtool library object.
-
-This mode accepts the following additional options:
-
- -o OUTPUT-FILE set the output file name to OUTPUT-FILE
- -prefer-pic try to building PIC objects only
- -prefer-non-pic try to building non-PIC objects only
- -static always build a \`.o' file suitable for static linking
-
-COMPILE-COMMAND is a command to be used in creating a \`standard' object file
-from the given SOURCEFILE.
-
-The output file name is determined by removing the directory component from
-SOURCEFILE, then substituting the C source code suffix \`.c' with the
-library object suffix, \`.lo'."
- ;;
-
-execute)
- $echo \
-"Usage: $modename [OPTION]... --mode=execute COMMAND [ARGS]...
-
-Automatically set library path, then run a program.
-
-This mode accepts the following additional options:
-
- -dlopen FILE add the directory containing FILE to the library path
-
-This mode sets the library path environment variable according to \`-dlopen'
-flags.
-
-If any of the ARGS are libtool executable wrappers, then they are translated
-into their corresponding uninstalled binary, and any of their required library
-directories are added to the library path.
-
-Then, COMMAND is executed, with ARGS as arguments."
- ;;
-
-finish)
- $echo \
-"Usage: $modename [OPTION]... --mode=finish [LIBDIR]...
-
-Complete the installation of libtool libraries.
-
-Each LIBDIR is a directory that contains libtool libraries.
-
-The commands that this mode executes may require superuser privileges. Use
-the \`--dry-run' option if you just want to see what would be executed."
- ;;
-
-install)
- $echo \
-"Usage: $modename [OPTION]... --mode=install INSTALL-COMMAND...
-
-Install executables or libraries.
-
-INSTALL-COMMAND is the installation command. The first component should be
-either the \`install' or \`cp' program.
-
-The rest of the components are interpreted as arguments to that command (only
-BSD-compatible install options are recognized)."
- ;;
-
-link)
- $echo \
-"Usage: $modename [OPTION]... --mode=link LINK-COMMAND...
-
-Link object files or libraries together to form another library, or to
-create an executable program.
-
-LINK-COMMAND is a command using the C compiler that you would use to create
-a program from several object files.
-
-The following components of LINK-COMMAND are treated specially:
-
- -all-static do not do any dynamic linking at all
- -avoid-version do not add a version suffix if possible
- -dlopen FILE \`-dlpreopen' FILE if it cannot be dlopened at runtime
- -dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols
- -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3)
- -export-symbols SYMFILE
- try to export only the symbols listed in SYMFILE
- -export-symbols-regex REGEX
- try to export only the symbols matching REGEX
- -LLIBDIR search LIBDIR for required installed libraries
- -lNAME OUTPUT-FILE requires the installed library libNAME
- -module build a library that can dlopened
- -no-fast-install disable the fast-install mode
- -no-install link a not-installable executable
- -no-undefined declare that a library does not refer to external symbols
- -o OUTPUT-FILE create OUTPUT-FILE from the specified objects
- -release RELEASE specify package release information
- -rpath LIBDIR the created library will eventually be installed in LIBDIR
- -R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries
- -static do not do any dynamic linking of libtool libraries
- -version-info CURRENT[:REVISION[:AGE]]
- specify library version info [each variable defaults to 0]
-
-All other options (arguments beginning with \`-') are ignored.
-
-Every other argument is treated as a filename. Files ending in \`.la' are
-treated as uninstalled libtool libraries, other files are standard or library
-object files.
-
-If the OUTPUT-FILE ends in \`.la', then a libtool library is created,
-only library objects (\`.lo' files) may be specified, and \`-rpath' is
-required, except when creating a convenience library.
-
-If OUTPUT-FILE ends in \`.a' or \`.lib', then a standard library is created
-using \`ar' and \`ranlib', or on Windows using \`lib'.
-
-If OUTPUT-FILE ends in \`.lo' or \`.${objext}', then a reloadable object file
-is created, otherwise an executable program is created."
- ;;
-
-uninstall)
- $echo \
-"Usage: $modename [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE...
-
-Remove libraries from an installation directory.
-
-RM is the name of the program to use to delete files associated with each FILE
-(typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed
-to RM.
-
-If FILE is a libtool library, all the files associated with it are deleted.
-Otherwise, only FILE itself is deleted using RM."
- ;;
-
-*)
- $echo "$modename: invalid operation mode \`$mode'" 1>&2
- $echo "$help" 1>&2
- exit 1
- ;;
-esac
-
-echo
-$echo "Try \`$modename --help' for more information about other modes."
-
-exit 0
-
-# Local Variables:
-# mode:shell-script
-# sh-indentation:2
-# End:
diff --git a/main/SAPI.c b/main/SAPI.c
deleted file mode 100644
index 34e104cea6..0000000000
--- a/main/SAPI.c
+++ /dev/null
@@ -1,932 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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. |
- +----------------------------------------------------------------------+
- | Original design: Shane Caraveo <shane@caraveo.com> |
- | Authors: Andi Gutmans <andi@zend.com> |
- | Zeev Suraski <zeev@zend.com> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#include <ctype.h>
-#include <sys/stat.h>
-
-#include "php.h"
-#include "SAPI.h"
-#include "php_ini.h"
-#include "ext/standard/php_string.h"
-#include "ext/standard/pageinfo.h"
-#if (HAVE_PCRE || HAVE_BUNDLED_PCRE) && !defined(COMPILE_DL_PCRE)
-#include "ext/pcre/php_pcre.h"
-#endif
-#if HAVE_ZLIB
-#include "ext/zlib/php_zlib.h"
-#endif
-#ifdef ZTS
-#include "TSRM.h"
-#endif
-#ifdef HAVE_SYS_TIME_H
-#include <sys/time.h>
-#endif
-
-#include "rfc1867.h"
-
-#ifdef PHP_WIN32
-#define STRCASECMP stricmp
-#else
-#define STRCASECMP strcasecmp
-#endif
-
-#include "php_content_types.h"
-
-static HashTable known_post_content_types;
-
-#ifdef ZTS
-SAPI_API int sapi_globals_id;
-#else
-sapi_globals_struct sapi_globals;
-#endif
-
-static void sapi_globals_ctor(sapi_globals_struct *sapi_globals TSRMLS_DC)
-{
- memset(sapi_globals, 0, sizeof(*sapi_globals));
-}
-
-/* True globals (no need for thread safety) */
-SAPI_API sapi_module_struct sapi_module;
-
-
-SAPI_API void sapi_startup(sapi_module_struct *sf)
-{
- sapi_module = *sf;
- zend_hash_init_ex(&known_post_content_types, 5, NULL, NULL, 1, 0);
-
-#ifdef ZTS
- ts_allocate_id(&sapi_globals_id, sizeof(sapi_globals_struct), (ts_allocate_ctor) sapi_globals_ctor, NULL);
-#else
- sapi_globals_ctor(&sapi_globals TSRMLS_CC);
-#endif
-
-#ifdef VIRTUAL_DIR
- virtual_cwd_startup(); /* Could use shutdown to free the main cwd but it would just slow it down for CGI */
-#endif
-
-#ifdef PHP_WIN32
- tsrm_win32_startup();
-#endif
-
- reentrancy_startup();
-}
-
-SAPI_API void sapi_shutdown(void)
-{
- reentrancy_shutdown();
-#ifdef VIRTUAL_DIR
- virtual_cwd_shutdown();
-#endif
-
-#ifdef PHP_WIN32
- tsrm_win32_shutdown();
-#endif
-
- zend_hash_destroy(&known_post_content_types);
-}
-
-
-SAPI_API void sapi_free_header(sapi_header_struct *sapi_header)
-{
- efree(sapi_header->header);
-}
-
-
-SAPI_API void sapi_handle_post(void *arg TSRMLS_DC)
-{
- if (SG(request_info).post_entry && SG(request_info).content_type_dup) {
- SG(request_info).post_entry->post_handler(SG(request_info).content_type_dup, arg TSRMLS_CC);
- if (SG(request_info).post_data) {
- efree(SG(request_info).post_data);
- SG(request_info).post_data = NULL;
- }
- efree(SG(request_info).content_type_dup);
- SG(request_info).content_type_dup = NULL;
- }
-}
-
-static void sapi_read_post_data(TSRMLS_D)
-{
- sapi_post_entry *post_entry;
- uint content_type_length = strlen(SG(request_info).content_type);
- char *content_type = estrndup(SG(request_info).content_type, content_type_length);
- char *p;
- char oldchar=0;
- void (*post_reader_func)(TSRMLS_D) = NULL;
-
-
- /* dedicated implementation for increased performance:
- * - Make the content type lowercase
- * - Trim descriptive data, stay with the content-type only
- */
- for (p=content_type; p<content_type+content_type_length; p++) {
- switch (*p) {
- case ';':
- case ',':
- case ' ':
- content_type_length = p-content_type;
- oldchar = *p;
- *p = 0;
- break;
- default:
- *p = tolower(*p);
- break;
- }
- }
-
- /* now try to find an appropriate POST content handler */
- if (zend_hash_find(&known_post_content_types, content_type, content_type_length+1, (void **) &post_entry) == SUCCESS) {
- /* found one, register it for use */
- SG(request_info).post_entry = post_entry;
- post_reader_func = post_entry->post_reader;
- } else {
- /* fallback */
- SG(request_info).post_entry = NULL;
- if (!sapi_module.default_post_reader) {
- /* no default reader ? */
- SG(request_info).content_type_dup = NULL;
- sapi_module.sapi_error(E_WARNING, "Unsupported content type: '%s'", content_type);
- return;
- }
- }
- if (oldchar) {
- *(p-1) = oldchar;
- }
-
- SG(request_info).content_type_dup = content_type;
-
- if(post_reader_func) {
- post_reader_func(TSRMLS_C);
- }
-
- if(sapi_module.default_post_reader) {
- sapi_module.default_post_reader(TSRMLS_C);
- }
-}
-
-
-SAPI_API SAPI_POST_READER_FUNC(sapi_read_standard_form_data)
-{
- int read_bytes;
- int allocated_bytes=SAPI_POST_BLOCK_SIZE+1;
-
- if (SG(request_info).content_length > SG(post_max_size)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "POST Content-Length of %ld bytes exceeds the limit of %ld bytes",
- SG(request_info).content_length, SG(post_max_size));
- return;
- }
- SG(request_info).post_data = emalloc(allocated_bytes);
-
- for (;;) {
- read_bytes = sapi_module.read_post(SG(request_info).post_data+SG(read_post_bytes), SAPI_POST_BLOCK_SIZE TSRMLS_CC);
- if (read_bytes<=0) {
- break;
- }
- SG(read_post_bytes) += read_bytes;
- if (SG(read_post_bytes) > SG(post_max_size)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Actual POST length does not match Content-Length, and exceeds %ld bytes", SG(post_max_size));
- break;
- }
- if (read_bytes < SAPI_POST_BLOCK_SIZE) {
- break;
- }
- if (SG(read_post_bytes)+SAPI_POST_BLOCK_SIZE >= allocated_bytes) {
- allocated_bytes = SG(read_post_bytes)+SAPI_POST_BLOCK_SIZE+1;
- SG(request_info).post_data = erealloc(SG(request_info).post_data, allocated_bytes);
- }
- }
- SG(request_info).post_data[SG(read_post_bytes)] = 0; /* terminating NULL */
- SG(request_info).post_data_length = SG(read_post_bytes);
-}
-
-
-SAPI_API char *sapi_get_default_content_type(TSRMLS_D)
-{
- char *mimetype, *charset, *content_type;
-
- mimetype = SG(default_mimetype) ? SG(default_mimetype) : SAPI_DEFAULT_MIMETYPE;
- charset = SG(default_charset) ? SG(default_charset) : SAPI_DEFAULT_CHARSET;
-
- if (strncasecmp(mimetype, "text/", 5) == 0 && *charset) {
- int len = strlen(mimetype) + sizeof("; charset=") + strlen(charset); /* sizeof() includes \0 */
- content_type = emalloc(len);
- snprintf(content_type, len, "%s; charset=%s", mimetype, charset);
- } else {
- content_type = estrdup(mimetype);
- }
- return content_type;
-}
-
-
-SAPI_API void sapi_get_default_content_type_header(sapi_header_struct *default_header TSRMLS_DC)
-{
- char *default_content_type = sapi_get_default_content_type(TSRMLS_C);
- int default_content_type_len = strlen(default_content_type);
-
- default_header->header_len = (sizeof("Content-type: ")-1) + default_content_type_len;
- default_header->header = emalloc(default_header->header_len+1);
- memcpy(default_header->header, "Content-type: ", sizeof("Content-type: "));
- memcpy(default_header->header+sizeof("Content-type: ")-1, default_content_type, default_content_type_len);
- default_header->header[default_header->header_len] = 0;
- efree(default_content_type);
-}
-
-/*
- * Add charset on content-type header if the MIME type starts with
- * "text/", the default_charset directive is not empty and
- * there is not already a charset option in there.
- *
- * If "mimetype" is non-NULL, it should point to a pointer allocated
- * with emalloc(). If a charset is added, the string will be
- * re-allocated and the new length is returned. If mimetype is
- * unchanged, 0 is returned.
- *
- */
-SAPI_API size_t sapi_apply_default_charset(char **mimetype, size_t len TSRMLS_DC)
-{
- char *charset, *newtype;
- size_t newlen;
- charset = SG(default_charset) ? SG(default_charset) : SAPI_DEFAULT_CHARSET;
-
- if (*mimetype != NULL) {
- if (*charset && strncmp(*mimetype, "text/", 5) == 0 && strstr(*mimetype, "charset=") == NULL) {
- newlen = len + (sizeof(";charset=")-1) + strlen(charset);
- newtype = emalloc(newlen + 1);
- PHP_STRLCPY(newtype, *mimetype, newlen + 1, len);
- strlcat(newtype, ";charset=", newlen + 1);
- strlcat(newtype, charset, newlen + 1);
- efree(*mimetype);
- *mimetype = newtype;
- return newlen;
- }
- }
- return 0;
-}
-
-SAPI_API void sapi_activate_headers_only(TSRMLS_D)
-{
- if (SG(request_info).headers_read == 1)
- return;
- SG(request_info).headers_read = 1;
- zend_llist_init(&SG(sapi_headers).headers, sizeof(sapi_header_struct),
- (void (*)(void *)) sapi_free_header, 0);
- SG(sapi_headers).send_default_content_type = 1;
-
- /* SG(sapi_headers).http_response_code = 200; */
- SG(sapi_headers).http_status_line = NULL;
- SG(request_info).current_user = NULL;
- SG(request_info).current_user_length = 0;
- SG(request_info).no_headers = 0;
- SG(request_info).post_entry = NULL;
-
- /*
- * It's possible to override this general case in the activate() callback,
- * if necessary.
- */
- if (SG(request_info).request_method && !strcmp(SG(request_info).request_method, "HEAD")) {
- SG(request_info).headers_only = 1;
- } else {
- SG(request_info).headers_only = 0;
- }
- if (SG(server_context)) {
- SG(request_info).cookie_data = sapi_module.read_cookies(TSRMLS_C);
- if (sapi_module.activate) {
- sapi_module.activate(TSRMLS_C);
- }
- }
-}
-
-/*
- * Called from php_request_startup() for every request.
- */
-
-SAPI_API void sapi_activate(TSRMLS_D)
-{
- zend_llist_init(&SG(sapi_headers).headers, sizeof(sapi_header_struct), (void (*)(void *)) sapi_free_header, 0);
- SG(sapi_headers).send_default_content_type = 1;
-
- /*
- SG(sapi_headers).http_response_code = 200;
- */
- SG(sapi_headers).http_status_line = NULL;
- SG(headers_sent) = 0;
- SG(read_post_bytes) = 0;
- SG(request_info).post_data = NULL;
- SG(request_info).raw_post_data = NULL;
- SG(request_info).current_user = NULL;
- SG(request_info).current_user_length = 0;
- SG(request_info).no_headers = 0;
- SG(global_request_time) = 0;
-
- /* It's possible to override this general case in the activate() callback, if
- * necessary.
- */
- if (SG(request_info).request_method && !strcmp(SG(request_info).request_method, "HEAD")) {
- SG(request_info).headers_only = 1;
- } else {
- SG(request_info).headers_only = 0;
- }
- SG(rfc1867_uploaded_files) = NULL;
-
- /* handle request mehtod */
- if (SG(server_context)) {
- if ( SG(request_info).request_method) {
- if(!strcmp(SG(request_info).request_method, "POST")
- && (SG(request_info).content_type)) {
- /* HTTP POST -> may contain form data to be read into variables
- depending on content type given
- */
- sapi_read_post_data(TSRMLS_C);
- } else {
- /* any other method with content payload will fill
- $HTTP_RAW_POST_DATA if enabled by always_populate_raw_post_data
- it is up to the webserver to decide whether to allow a method or not
- */
- SG(request_info).content_type_dup = NULL;
- if(sapi_module.default_post_reader) {
- sapi_module.default_post_reader(TSRMLS_C);
- }
- }
- } else {
- SG(request_info).content_type_dup = NULL;
- }
-
- /* Cookies */
- SG(request_info).cookie_data = sapi_module.read_cookies(TSRMLS_C);
- if (sapi_module.activate) {
- sapi_module.activate(TSRMLS_C);
- }
- }
-}
-
-
-static void sapi_send_headers_free(TSRMLS_D)
-{
- if (SG(sapi_headers).http_status_line) {
- efree(SG(sapi_headers).http_status_line);
- SG(sapi_headers).http_status_line = NULL;
- }
-}
-
-SAPI_API void sapi_deactivate(TSRMLS_D)
-{
- zend_llist_destroy(&SG(sapi_headers).headers);
- if (SG(request_info).post_data) {
- efree(SG(request_info).post_data);
- } else if (SG(server_context)) {
- if(sapi_module.read_post) {
- /* make sure we've consumed all request input data */
- char dummy[SAPI_POST_BLOCK_SIZE];
- int read_bytes;
-
- while((read_bytes = sapi_module.read_post(dummy, sizeof(dummy)-1 TSRMLS_CC)) > 0) {
- SG(read_post_bytes) += read_bytes;
- }
- }
- }
- if (SG(request_info).raw_post_data) {
- efree(SG(request_info).raw_post_data);
- }
- if (SG(request_info).auth_user) {
- efree(SG(request_info).auth_user);
- }
- if (SG(request_info).auth_password) {
- efree(SG(request_info).auth_password);
- }
- if (SG(request_info).content_type_dup) {
- efree(SG(request_info).content_type_dup);
- }
- if (SG(request_info).current_user) {
- efree(SG(request_info).current_user);
- }
- if (sapi_module.deactivate) {
- sapi_module.deactivate(TSRMLS_C);
- }
- if (SG(rfc1867_uploaded_files)) {
- destroy_uploaded_files_hash(TSRMLS_C);
- }
- if (SG(sapi_headers).mimetype) {
- efree(SG(sapi_headers).mimetype);
- SG(sapi_headers).mimetype = NULL;
- }
- sapi_send_headers_free(TSRMLS_C);
- SG(sapi_started) = 0;
- SG(headers_sent) = 0;
- SG(request_info).headers_read = 0;
- SG(global_request_time) = 0;
-}
-
-
-SAPI_API void sapi_initialize_empty_request(TSRMLS_D)
-{
- SG(server_context) = NULL;
- SG(request_info).request_method = NULL;
- SG(request_info).auth_user = SG(request_info).auth_password = NULL;
- SG(request_info).content_type_dup = NULL;
-}
-
-
-static int sapi_extract_response_code(const char *header_line)
-{
- int code = 200;
- const char *ptr;
-
- for (ptr = header_line; *ptr; ptr++) {
- if (*ptr == ' ' && *(ptr + 1) != ' ') {
- code = atoi(ptr + 1);
- break;
- }
- }
-
- return code;
-}
-
-
-static void sapi_update_response_code(int ncode TSRMLS_DC)
-{
- /* if the status code did not change, we do not want
- to change the status line, and no need to change the code */
- if (SG(sapi_headers).http_response_code == ncode) {
- return;
- }
-
- if (SG(sapi_headers).http_status_line) {
- efree(SG(sapi_headers).http_status_line);
- SG(sapi_headers).http_status_line = NULL;
- }
- SG(sapi_headers).http_response_code = ncode;
-}
-
-static int sapi_find_matching_header(void *element1, void *element2)
-{
- return strncasecmp(((sapi_header_struct*)element1)->header, (char*)element2, strlen((char*)element2)) == 0;
-}
-
-SAPI_API int sapi_add_header_ex(char *header_line, uint header_line_len, zend_bool duplicate, zend_bool replace TSRMLS_DC)
-{
- sapi_header_line ctr = {0};
- int r;
-
- ctr.line = header_line;
- ctr.line_len = header_line_len;
-
- r = sapi_header_op(replace ? SAPI_HEADER_REPLACE : SAPI_HEADER_ADD,
- &ctr TSRMLS_CC);
-
- if (!duplicate)
- efree(header_line);
-
- return r;
-}
-
-SAPI_API int sapi_header_op(sapi_header_op_enum op, void *arg TSRMLS_DC)
-{
- int retval;
- sapi_header_struct sapi_header;
- char *colon_offset;
- long myuid = 0L;
- char *header_line;
- uint header_line_len;
- zend_bool replace;
- int http_response_code;
-
- if (SG(headers_sent) && !SG(request_info).no_headers) {
- char *output_start_filename = php_get_output_start_filename(TSRMLS_C);
- int output_start_lineno = php_get_output_start_lineno(TSRMLS_C);
-
- if (output_start_filename) {
- sapi_module.sapi_error(E_WARNING, "Cannot modify header information - headers already sent by (output started at %s:%d)",
- output_start_filename, output_start_lineno);
- } else {
- sapi_module.sapi_error(E_WARNING, "Cannot modify header information - headers already sent");
- }
- return FAILURE;
- }
-
- switch (op) {
- case SAPI_HEADER_SET_STATUS:
- sapi_update_response_code((long) arg TSRMLS_CC);
- return SUCCESS;
-
- case SAPI_HEADER_REPLACE:
- case SAPI_HEADER_ADD: {
- sapi_header_line *p = arg;
- header_line = p->line;
- header_line_len = p->line_len;
- http_response_code = p->response_code;
- replace = (op == SAPI_HEADER_REPLACE);
- break;
- }
-
- default:
- return FAILURE;
- }
-
- header_line = estrndup(header_line, header_line_len);
-
- /* cut of trailing spaces, linefeeds and carriage-returns */
- while(isspace(header_line[header_line_len-1]))
- header_line[--header_line_len]='\0';
-
-
- sapi_header.header = header_line;
- sapi_header.header_len = header_line_len;
- sapi_header.replace = replace;
-
- /* Check the header for a few cases that we have special support for in SAPI */
- if (header_line_len>=5
- && !strncasecmp(header_line, "HTTP/", 5)) {
- /* filter out the response code */
- sapi_update_response_code(sapi_extract_response_code(header_line) TSRMLS_CC);
- SG(sapi_headers).http_status_line = header_line;
- return SUCCESS;
- } else {
- colon_offset = strchr(header_line, ':');
- if (colon_offset) {
- *colon_offset = 0;
- if (!STRCASECMP(header_line, "Content-Type")) {
- char *ptr = colon_offset+1, *mimetype = NULL, *newheader;
- size_t len = header_line_len - (ptr - header_line), newlen;
- while (*ptr == ' ') {
- ptr++;
- len--;
- }
-#if HAVE_ZLIB
- if(!strncmp(ptr, "image/", sizeof("image/")-1)) {
- zend_alter_ini_entry("zlib.output_compression", sizeof("zlib.output_compression"), "0", sizeof("0") - 1, PHP_INI_USER, PHP_INI_STAGE_RUNTIME);
- }
-#endif
- mimetype = estrdup(ptr);
- newlen = sapi_apply_default_charset(&mimetype, len TSRMLS_CC);
- if (!SG(sapi_headers).mimetype){
- SG(sapi_headers).mimetype = estrdup(mimetype);
- }
-
- if (newlen != 0) {
- newlen += sizeof("Content-type: ");
- newheader = emalloc(newlen);
- PHP_STRLCPY(newheader, "Content-type: ", newlen, sizeof("Content-type: ")-1);
- strlcat(newheader, mimetype, newlen);
- sapi_header.header = newheader;
- sapi_header.header_len = newlen - 1;
- efree(header_line);
- }
- efree(mimetype);
- SG(sapi_headers).send_default_content_type = 0;
- } else if (!STRCASECMP(header_line, "Location")) {
- if ((SG(sapi_headers).http_response_code < 300 ||
- SG(sapi_headers).http_response_code > 307) &&
- SG(sapi_headers).http_response_code != 201) {
- /* Return a Found Redirect if one is not already specified */
- sapi_update_response_code(302 TSRMLS_CC);
- }
- } else if (!STRCASECMP(header_line, "WWW-Authenticate")) { /* HTTP Authentication */
- int newlen;
- char *result, *newheader;
-
- sapi_update_response_code(401 TSRMLS_CC); /* authentication-required */
-
- if(PG(safe_mode))
-#if (HAVE_PCRE || HAVE_BUNDLED_PCRE) && !defined(COMPILE_DL_PCRE)
- {
- zval *repl_temp;
- char *ptr = colon_offset+1;
- int ptr_len=0, result_len = 0;
-
- /* skip white space */
- while (isspace(*ptr)) {
- ptr++;
- }
-
- myuid = php_getuid();
-
- ptr_len = strlen(ptr);
- MAKE_STD_ZVAL(repl_temp);
- Z_TYPE_P(repl_temp) = IS_STRING;
- Z_STRVAL_P(repl_temp) = emalloc(32);
- Z_STRLEN_P(repl_temp) = sprintf(Z_STRVAL_P(repl_temp), "realm=\"\\1-%ld\"", myuid);
- /* Modify quoted realm value */
- result = php_pcre_replace("/realm=\"(.*?)\"/i", 16,
- ptr, ptr_len,
- repl_temp,
- 0, &result_len, -1 TSRMLS_CC);
- if(result_len==ptr_len) {
- efree(result);
- sprintf(Z_STRVAL_P(repl_temp), "realm=\\1-%ld\\2", myuid);
- /* modify unquoted realm value */
- result = php_pcre_replace("/realm=([^\\s]+)(.*)/i", 21,
- ptr, ptr_len,
- repl_temp,
- 0, &result_len, -1 TSRMLS_CC);
- if(result_len==ptr_len) {
- char *lower_temp = estrdup(ptr);
- char conv_temp[32];
- int conv_len;
-
- php_strtolower(lower_temp,strlen(lower_temp));
- /* If there is no realm string at all, append one */
- if(!strstr(lower_temp,"realm")) {
- efree(result);
- conv_len = sprintf(conv_temp, " realm=\"%ld\"",myuid);
- result = emalloc(ptr_len+conv_len+1);
- result_len = ptr_len+conv_len;
- memcpy(result, ptr, ptr_len);
- memcpy(result+ptr_len, conv_temp, conv_len);
- *(result+ptr_len+conv_len) = '\0';
- }
- efree(lower_temp);
- }
- }
- newlen = sizeof("WWW-Authenticate: ") - 1 + result_len;
- newheader = emalloc(newlen+1);
- sprintf(newheader,"WWW-Authenticate: %s", result);
- efree(header_line);
- sapi_header.header = newheader;
- sapi_header.header_len = newlen;
- efree(result);
- efree(Z_STRVAL_P(repl_temp));
- efree(repl_temp);
- }
-#else
- {
- myuid = php_getuid();
- efree(header_line);
- sapi_header.header_len = spprintf(&sapi_header.header, 0, "WWW-Authenticate: Basic realm=\"%ld\"", myuid);
- }
-#endif
- }
- if (sapi_header.header==header_line) {
- *colon_offset = ':';
- }
- }
- }
- if (http_response_code) {
- sapi_update_response_code(http_response_code TSRMLS_CC);
- }
- if (sapi_module.header_handler) {
- retval = sapi_module.header_handler(&sapi_header, &SG(sapi_headers) TSRMLS_CC);
- } else {
- retval = SAPI_HEADER_ADD;
- }
- if (retval & SAPI_HEADER_DELETE_ALL) {
- zend_llist_clean(&SG(sapi_headers).headers);
- }
- if (retval & SAPI_HEADER_ADD) {
- /* in replace mode first remove the header if it already exists in the headers llist */
- if (replace) {
- colon_offset = strchr(sapi_header.header, ':');
- if (colon_offset) {
- char sav;
- colon_offset++;
- sav = *colon_offset;
- *colon_offset = 0;
- zend_llist_del_element(&SG(sapi_headers).headers, sapi_header.header, (int(*)(void*, void*))sapi_find_matching_header);
- *colon_offset = sav;
- }
- }
-
- zend_llist_add_element(&SG(sapi_headers).headers, (void *) &sapi_header);
- }
- return SUCCESS;
-}
-
-
-SAPI_API int sapi_send_headers(TSRMLS_D)
-{
- int retval;
- int ret = FAILURE;
-
- if (SG(headers_sent) || SG(request_info).no_headers) {
- return SUCCESS;
- }
-
-#if HAVE_ZLIB
- /* Add output compression headers at this late stage in order to make
- it possible to switch it off inside the script. */
-
- if (zend_ini_long("zlib.output_compression", sizeof("zlib.output_compression"), 0)) {
- zval nm_zlib_get_coding_type;
- zval *uf_result = NULL;
-
- ZVAL_STRINGL(&nm_zlib_get_coding_type, "zlib_get_coding_type", sizeof("zlib_get_coding_type") - 1, 0);
-
- if (call_user_function_ex(CG(function_table), NULL, &nm_zlib_get_coding_type, &uf_result, 0, NULL, 1, NULL TSRMLS_CC) != FAILURE && uf_result != NULL && Z_TYPE_P(uf_result) == IS_STRING) {
- char buf[128];
- int len;
-
- assert(Z_STRVAL_P(uf_result) != NULL);
-
- len = snprintf(buf, sizeof(buf), "Content-Encoding: %s", Z_STRVAL_P(uf_result));
- if (len <= 0 || sapi_add_header(buf, len, 1) == FAILURE) {
- return FAILURE;
- }
- if (sapi_add_header_ex("Vary: Accept-Encoding", sizeof("Vary: Accept-Encoding") - 1, 1, 0 TSRMLS_CC) == FAILURE) {
- return FAILURE;
- }
- }
- if (uf_result != NULL) {
- zval_ptr_dtor(&uf_result);
- }
- }
-#endif
-
- /* Success-oriented. We set headers_sent to 1 here to avoid an infinite loop
- * in case of an error situation.
- */
- SG(headers_sent) = 1;
-
- if (sapi_module.send_headers) {
- retval = sapi_module.send_headers(&SG(sapi_headers) TSRMLS_CC);
- } else {
- retval = SAPI_HEADER_DO_SEND;
- }
-
- switch (retval) {
- case SAPI_HEADER_SENT_SUCCESSFULLY:
- ret = SUCCESS;
- break;
- case SAPI_HEADER_DO_SEND: {
- sapi_header_struct http_status_line;
- char buf[255];
-
- if (SG(sapi_headers).http_status_line) {
- http_status_line.header = SG(sapi_headers).http_status_line;
- http_status_line.header_len = strlen(SG(sapi_headers).http_status_line);
- } else {
- http_status_line.header = buf;
- http_status_line.header_len = sprintf(buf, "HTTP/1.0 %d X", SG(sapi_headers).http_response_code);
- }
- sapi_module.send_header(&http_status_line, SG(server_context) TSRMLS_CC);
- }
- zend_llist_apply_with_argument(&SG(sapi_headers).headers, (llist_apply_with_arg_func_t) sapi_module.send_header, SG(server_context) TSRMLS_CC);
- if(SG(sapi_headers).send_default_content_type) {
- sapi_header_struct default_header;
-
- sapi_get_default_content_type_header(&default_header TSRMLS_CC);
- sapi_module.send_header(&default_header, SG(server_context) TSRMLS_CC);
- sapi_free_header(&default_header);
- }
- sapi_module.send_header(NULL, SG(server_context) TSRMLS_CC);
- ret = SUCCESS;
- break;
- case SAPI_HEADER_SEND_FAILED:
- SG(headers_sent) = 0;
- ret = FAILURE;
- break;
- }
-
- sapi_send_headers_free(TSRMLS_C);
-
- return ret;
-}
-
-
-SAPI_API int sapi_register_post_entries(sapi_post_entry *post_entries)
-{
- sapi_post_entry *p=post_entries;
-
- while (p->content_type) {
- if (sapi_register_post_entry(p) == FAILURE) {
- return FAILURE;
- }
- p++;
- }
- return SUCCESS;
-}
-
-
-SAPI_API int sapi_register_post_entry(sapi_post_entry *post_entry)
-{
- return zend_hash_add(&known_post_content_types, post_entry->content_type, post_entry->content_type_len+1, (void *) post_entry, sizeof(sapi_post_entry), NULL);
-}
-
-SAPI_API void sapi_unregister_post_entry(sapi_post_entry *post_entry)
-{
- zend_hash_del(&known_post_content_types, post_entry->content_type, post_entry->content_type_len+1);
-}
-
-
-SAPI_API int sapi_register_default_post_reader(void (*default_post_reader)(TSRMLS_D))
-{
- sapi_module.default_post_reader = default_post_reader;
- return SUCCESS;
-}
-
-
-SAPI_API int sapi_register_treat_data(void (*treat_data)(int arg, char *str, zval *destArray TSRMLS_DC))
-{
- sapi_module.treat_data = treat_data;
- return SUCCESS;
-}
-
-SAPI_API int sapi_register_input_filter(unsigned int (*input_filter)(int arg, char *var, char **val, unsigned int val_len, unsigned int *new_val_len TSRMLS_DC))
-{
- sapi_module.input_filter = input_filter;
- return SUCCESS;
-}
-
-SAPI_API int sapi_flush(TSRMLS_D)
-{
- if (sapi_module.flush) {
- sapi_module.flush(SG(server_context));
- return SUCCESS;
- } else {
- return FAILURE;
- }
-}
-
-SAPI_API struct stat *sapi_get_stat(TSRMLS_D)
-{
- if (sapi_module.get_stat) {
- return sapi_module.get_stat(TSRMLS_C);
- } else {
- if (!SG(request_info).path_translated || (VCWD_STAT(SG(request_info).path_translated, &SG(global_stat)) == -1)) {
- return NULL;
- }
- return &SG(global_stat);
- }
-}
-
-SAPI_API char *sapi_getenv(char *name, size_t name_len TSRMLS_DC)
-{
- if (sapi_module.getenv) {
- return sapi_module.getenv(name, name_len TSRMLS_CC);
- } else {
- return NULL;
- }
-}
-
-SAPI_API int sapi_get_fd(int *fd TSRMLS_DC)
-{
- if (sapi_module.get_fd) {
- return sapi_module.get_fd(fd TSRMLS_CC);
- } else {
- return FAILURE;
- }
-}
-
-SAPI_API int sapi_force_http_10(TSRMLS_D)
-{
- if (sapi_module.force_http_10) {
- return sapi_module.force_http_10(TSRMLS_C);
- } else {
- return FAILURE;
- }
-}
-
-
-SAPI_API int sapi_get_target_uid(uid_t *obj TSRMLS_DC)
-{
- if (sapi_module.get_target_uid) {
- return sapi_module.get_target_uid(obj TSRMLS_CC);
- } else {
- return FAILURE;
- }
-}
-
-SAPI_API int sapi_get_target_gid(gid_t *obj TSRMLS_DC)
-{
- if (sapi_module.get_target_gid) {
- return sapi_module.get_target_gid(obj TSRMLS_CC);
- } else {
- return FAILURE;
- }
-}
-
-SAPI_API time_t sapi_get_request_time(TSRMLS_D)
-{
- if (sapi_module.get_request_time) {
- return sapi_module.get_request_time(TSRMLS_C);
- } else {
- if(!SG(global_request_time)) SG(global_request_time) = time(0);
- return SG(global_request_time);
- }
-}
-
-/*
- * 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/main/SAPI.h b/main/SAPI.h
deleted file mode 100644
index 11965fccf9..0000000000
--- a/main/SAPI.h
+++ /dev/null
@@ -1,303 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Zeev Suraski <zeev@zend.com> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifndef SAPI_H
-#define SAPI_H
-
-#include "zend.h"
-#include "zend_llist.h"
-#include "zend_operators.h"
-#ifdef PHP_WIN32
-#include "win95nt.h"
-#endif
-#include <sys/stat.h>
-
-#define SAPI_OPTION_NO_CHDIR 1
-
-#define SAPI_POST_BLOCK_SIZE 4000
-
-#ifdef PHP_WIN32
-# ifdef SAPI_EXPORTS
-# define SAPI_API __declspec(dllexport)
-# else
-# define SAPI_API __declspec(dllimport)
-# endif
-#else
-#define SAPI_API
-#endif
-
-#undef shutdown
-
-typedef struct {
- char *header;
- uint header_len;
- zend_bool replace;
-} sapi_header_struct;
-
-
-typedef struct {
- zend_llist headers;
- int http_response_code;
- unsigned char send_default_content_type;
- char *mimetype;
- char *http_status_line;
-} sapi_headers_struct;
-
-
-typedef struct _sapi_post_entry sapi_post_entry;
-typedef struct _sapi_module_struct sapi_module_struct;
-
-BEGIN_EXTERN_C()
-extern SAPI_API sapi_module_struct sapi_module; /* true global */
-END_EXTERN_C()
-
-/* Some values in this structure needs to be filled in before
- * calling sapi_activate(). We WILL change the `char *' entries,
- * so make sure that you allocate a separate buffer for them
- * and that you free them after sapi_deactivate().
- */
-
-typedef struct {
- const char *request_method;
- char *query_string;
- char *post_data, *raw_post_data;
- char *cookie_data;
- long content_length;
- uint post_data_length, raw_post_data_length;
-
- char *path_translated;
- char *request_uri;
-
- const char *content_type;
-
- zend_bool headers_only;
- zend_bool no_headers;
- zend_bool headers_read;
-
- sapi_post_entry *post_entry;
-
- char *content_type_dup;
-
- /* for HTTP authentication */
- char *auth_user;
- char *auth_password;
-
- /* this is necessary for the CGI SAPI module */
- char *argv0;
-
- /* this is necessary for Safe Mode */
- char *current_user;
- int current_user_length;
-
- /* this is necessary for CLI module */
- int argc;
- char **argv;
-} sapi_request_info;
-
-
-typedef struct _sapi_globals_struct {
- void *server_context;
- sapi_request_info request_info;
- sapi_headers_struct sapi_headers;
- int read_post_bytes;
- unsigned char headers_sent;
- struct stat global_stat;
- char *default_mimetype;
- char *default_charset;
- HashTable *rfc1867_uploaded_files;
- long post_max_size;
- int options;
- zend_bool sapi_started;
- time_t global_request_time;
-} sapi_globals_struct;
-
-
-BEGIN_EXTERN_C()
-#ifdef ZTS
-# define SG(v) TSRMG(sapi_globals_id, sapi_globals_struct *, v)
-SAPI_API extern int sapi_globals_id;
-#else
-# define SG(v) (sapi_globals.v)
-extern SAPI_API sapi_globals_struct sapi_globals;
-#endif
-
-SAPI_API void sapi_startup(sapi_module_struct *sf);
-SAPI_API void sapi_shutdown(void);
-SAPI_API void sapi_activate(TSRMLS_D);
-SAPI_API void sapi_deactivate(TSRMLS_D);
-SAPI_API void sapi_initialize_empty_request(TSRMLS_D);
-END_EXTERN_C()
-
-/*
- * This is the preferred and maintained API for
- * operating on HTTP headers.
- */
-
-/*
- * Always specify a sapi_header_line this way:
- *
- * sapi_header_line ctr = {0};
- */
-
-typedef struct {
- char *line; /* If you allocated this, you need to free it yourself */
- uint line_len;
- long response_code; /* long due to zend_parse_parameters compatibility */
-} sapi_header_line;
-
-typedef enum { /* Parameter: */
- SAPI_HEADER_REPLACE, /* sapi_header_line* */
- SAPI_HEADER_ADD, /* sapi_header_line* */
- SAPI_HEADER_SET_STATUS /* int */
-} sapi_header_op_enum;
-
-BEGIN_EXTERN_C()
-SAPI_API int sapi_header_op(sapi_header_op_enum op, void *arg TSRMLS_DC);
-
-/* Deprecated functions. Use sapi_header_op instead. */
-SAPI_API int sapi_add_header_ex(char *header_line, uint header_line_len, zend_bool duplicate, zend_bool replace TSRMLS_DC);
-#define sapi_add_header(a, b, c) sapi_add_header_ex((a),(b),(c),1 TSRMLS_CC)
-
-
-SAPI_API int sapi_send_headers(TSRMLS_D);
-SAPI_API void sapi_free_header(sapi_header_struct *sapi_header);
-SAPI_API void sapi_handle_post(void *arg TSRMLS_DC);
-
-SAPI_API int sapi_register_post_entries(sapi_post_entry *post_entry);
-SAPI_API int sapi_register_post_entry(sapi_post_entry *post_entry);
-SAPI_API void sapi_unregister_post_entry(sapi_post_entry *post_entry);
-SAPI_API int sapi_register_default_post_reader(void (*default_post_reader)(TSRMLS_D));
-SAPI_API int sapi_register_treat_data(void (*treat_data)(int arg, char *str, zval *destArray TSRMLS_DC));
-SAPI_API int sapi_register_input_filter(unsigned int (*input_filter)(int arg, char *var, char **val, unsigned int val_len, unsigned int *new_val_len TSRMLS_DC));
-
-SAPI_API int sapi_flush(TSRMLS_D);
-SAPI_API struct stat *sapi_get_stat(TSRMLS_D);
-SAPI_API char *sapi_getenv(char *name, size_t name_len TSRMLS_DC);
-
-SAPI_API char *sapi_get_default_content_type(TSRMLS_D);
-SAPI_API void sapi_get_default_content_type_header(sapi_header_struct *default_header TSRMLS_DC);
-SAPI_API size_t sapi_apply_default_charset(char **mimetype, size_t len TSRMLS_DC);
-SAPI_API void sapi_activate_headers_only(TSRMLS_D);
-
-SAPI_API int sapi_get_fd(int *fd TSRMLS_DC);
-SAPI_API int sapi_force_http_10(TSRMLS_D);
-
-SAPI_API int sapi_get_target_uid(uid_t * TSRMLS_DC);
-SAPI_API int sapi_get_target_gid(gid_t * TSRMLS_DC);
-SAPI_API time_t sapi_get_request_time(TSRMLS_D);
-END_EXTERN_C()
-
-struct _sapi_module_struct {
- char *name;
- char *pretty_name;
-
- int (*startup)(struct _sapi_module_struct *sapi_module);
- int (*shutdown)(struct _sapi_module_struct *sapi_module);
-
- int (*activate)(TSRMLS_D);
- int (*deactivate)(TSRMLS_D);
-
- int (*ub_write)(const char *str, unsigned int str_length TSRMLS_DC);
- void (*flush)(void *server_context);
- struct stat *(*get_stat)(TSRMLS_D);
- char *(*getenv)(char *name, size_t name_len TSRMLS_DC);
-
- void (*sapi_error)(int type, const char *error_msg, ...);
-
- int (*header_handler)(sapi_header_struct *sapi_header, sapi_headers_struct *sapi_headers TSRMLS_DC);
- int (*send_headers)(sapi_headers_struct *sapi_headers TSRMLS_DC);
- void (*send_header)(sapi_header_struct *sapi_header, void *server_context TSRMLS_DC);
-
- int (*read_post)(char *buffer, uint count_bytes TSRMLS_DC);
- char *(*read_cookies)(TSRMLS_D);
-
- void (*register_server_variables)(zval *track_vars_array TSRMLS_DC);
- void (*log_message)(char *message);
- time_t (*get_request_time)(TSRMLS_D);
-
- char *php_ini_path_override;
-
- void (*block_interruptions)(void);
- void (*unblock_interruptions)(void);
-
- void (*default_post_reader)(TSRMLS_D);
- void (*treat_data)(int arg, char *str, zval *destArray TSRMLS_DC);
- char *executable_location;
-
- int php_ini_ignore;
-
- int (*get_fd)(int *fd TSRMLS_DC);
-
- int (*force_http_10)(TSRMLS_D);
-
- int (*get_target_uid)(uid_t * TSRMLS_DC);
- int (*get_target_gid)(gid_t * TSRMLS_DC);
-
- unsigned int (*input_filter)(int arg, char *var, char **val, unsigned int val_len, unsigned int *new_val_len TSRMLS_DC);
-
- void (*ini_defaults)(HashTable *configuration_hash);
- int phpinfo_as_text;
-};
-
-
-struct _sapi_post_entry {
- char *content_type;
- uint content_type_len;
- void (*post_reader)(TSRMLS_D);
- void (*post_handler)(char *content_type_dup, void *arg TSRMLS_DC);
-};
-
-/* header_handler() constants */
-#define SAPI_HEADER_ADD (1<<0)
-#define SAPI_HEADER_DELETE_ALL (1<<1)
-#define SAPI_HEADER_SEND_NOW (1<<2)
-
-
-#define SAPI_HEADER_SENT_SUCCESSFULLY 1
-#define SAPI_HEADER_DO_SEND 2
-#define SAPI_HEADER_SEND_FAILED 3
-
-#define SAPI_DEFAULT_MIMETYPE "text/html"
-#define SAPI_DEFAULT_CHARSET ""
-#define SAPI_PHP_VERSION_HEADER "X-Powered-By: PHP/" PHP_VERSION
-
-#define SAPI_POST_READER_FUNC(post_reader) void post_reader(TSRMLS_D)
-#define SAPI_POST_HANDLER_FUNC(post_handler) void post_handler(char *content_type_dup, void *arg TSRMLS_DC)
-
-#define SAPI_TREAT_DATA_FUNC(treat_data) void treat_data(int arg, char *str, zval* destArray TSRMLS_DC)
-#define SAPI_INPUT_FILTER_FUNC(input_filter) unsigned int input_filter(int arg, char *var, char **val, unsigned int val_len, unsigned int *new_val_len TSRMLS_DC)
-
-BEGIN_EXTERN_C()
-SAPI_API SAPI_POST_READER_FUNC(sapi_read_standard_form_data);
-SAPI_API SAPI_POST_READER_FUNC(php_default_post_reader);
-SAPI_API SAPI_TREAT_DATA_FUNC(php_default_treat_data);
-SAPI_API SAPI_INPUT_FILTER_FUNC(php_default_input_filter);
-END_EXTERN_C()
-
-#define STANDARD_SAPI_MODULE_PROPERTIES
-
-#endif /* SAPI_H */
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- */
diff --git a/main/alloca.c b/main/alloca.c
deleted file mode 100644
index ae28159913..0000000000
--- a/main/alloca.c
+++ /dev/null
@@ -1,501 +0,0 @@
-/* alloca.c -- allocate automatically reclaimed memory
- (Mostly) portable public-domain implementation -- D A Gwyn
-
- This implementation of the PWB library alloca function,
- which is used to allocate space off the run-time stack so
- that it is automatically reclaimed upon procedure exit,
- was inspired by discussions with J. Q. Johnson of Cornell.
- J.Otto Tennant <jot@cray.com> contributed the Cray support.
-
- There are some preprocessor constants that can
- be defined when compiling for your specific system, for
- improved efficiency; however, the defaults should be okay.
-
- The general concept of this implementation is to keep
- track of all alloca-allocated blocks, and reclaim any
- that are found to be deeper in the stack than the current
- invocation. This heuristic does not reclaim storage as
- soon as it becomes invalid, but it will do so eventually.
-
- As a special case, alloca(0) reclaims storage without
- allocating any. It is a good idea to use alloca(0) in
- your main control loop, etc. to force garbage collection. */
-
-/* $Id$ */
-
-#include "php_config.h"
-
-#if !HAVE_ALLOCA
-
-#ifdef HAVE_STRING_H
-#include <string.h>
-#endif
-#ifdef HAVE_STDLIB_H
-#include <stdlib.h>
-#endif
-
-#ifdef emacs
-#include "blockinput.h"
-#endif
-
-/* If compiling with GCC 2, this file's not needed. */
-#if !defined (__GNUC__) || __GNUC__ < 2
-
-/* If someone has defined alloca as a macro,
- there must be some other way alloca is supposed to work. */
-#ifndef alloca
-
-#ifdef emacs
-#ifdef static
-/* actually, only want this if static is defined as ""
- -- this is for usg, in which emacs must undefine static
- in order to make unexec workable
- */
-#ifndef STACK_DIRECTION
-you
-lose
--- must know STACK_DIRECTION at compile-time
-#endif /* STACK_DIRECTION undefined */
-#endif /* static */
-#endif /* emacs */
-
-/* If your stack is a linked list of frames, you have to
- provide an "address metric" ADDRESS_FUNCTION macro. */
-
-#if defined (CRAY) && defined (CRAY_STACKSEG_END)
-long i00afunc ();
-#define ADDRESS_FUNCTION(arg) (char *) i00afunc (&(arg))
-#else
-#define ADDRESS_FUNCTION(arg) &(arg)
-#endif
-
-#if __STDC__
-typedef void *pointer;
-#else
-typedef char *pointer;
-#endif
-
-#ifndef NULL
-#define NULL 0
-#endif
-
-/* Define STACK_DIRECTION if you know the direction of stack
- growth for your system; otherwise it will be automatically
- deduced at run-time.
-
- STACK_DIRECTION > 0 => grows toward higher addresses
- STACK_DIRECTION < 0 => grows toward lower addresses
- STACK_DIRECTION = 0 => direction of growth unknown */
-
-#ifndef STACK_DIRECTION
-#define STACK_DIRECTION 0 /* Direction unknown. */
-#endif
-
-#if STACK_DIRECTION != 0
-
-#define STACK_DIR STACK_DIRECTION /* Known at compile-time. */
-
-#else /* STACK_DIRECTION == 0; need run-time code. */
-
-static int stack_dir; /* 1 or -1 once known. */
-#define STACK_DIR stack_dir
-
-static void
-find_stack_direction ()
-{
- static char *addr = NULL; /* Address of first `dummy', once known. */
- auto char dummy; /* To get stack address. */
-
- if (addr == NULL)
- { /* Initial entry. */
- addr = ADDRESS_FUNCTION (dummy);
-
- find_stack_direction (); /* Recurse once. */
- }
- else
- {
- /* Second entry. */
- if (ADDRESS_FUNCTION (dummy) > addr)
- stack_dir = 1; /* Stack grew upward. */
- else
- stack_dir = -1; /* Stack grew downward. */
- }
-}
-
-#endif /* STACK_DIRECTION == 0 */
-
-/* An "alloca header" is used to:
- (a) chain together all alloca'ed blocks;
- (b) keep track of stack depth.
-
- It is very important that sizeof(header) agree with malloc
- alignment chunk size. The following default should work okay. */
-
-#ifndef ALIGN_SIZE
-#define ALIGN_SIZE sizeof(double)
-#endif
-
-typedef union hdr
-{
- char align[ALIGN_SIZE]; /* To force sizeof(header). */
- struct
- {
- union hdr *next; /* For chaining headers. */
- char *deep; /* For stack depth measure. */
- } h;
-} header;
-
-static header *last_alloca_header = NULL; /* -> last alloca header. */
-
-/* Return a pointer to at least SIZE bytes of storage,
- which will be automatically reclaimed upon exit from
- the procedure that called alloca. Originally, this space
- was supposed to be taken from the current stack frame of the
- caller, but that method cannot be made to work for some
- implementations of C, for example under Gould's UTX/32. */
-
-pointer
-alloca (size)
- size_t size;
-{
- auto char probe; /* Probes stack depth: */
- register char *depth = ADDRESS_FUNCTION (probe);
-
-#if STACK_DIRECTION == 0
- if (STACK_DIR == 0) /* Unknown growth direction. */
- find_stack_direction ();
-#endif
-
- /* Reclaim garbage, defined as all alloca'd storage that
- was allocated from deeper in the stack than currently. */
-
- {
- register header *hp; /* Traverses linked list. */
-
-#ifdef emacs
- BLOCK_INPUT;
-#endif
-
- for (hp = last_alloca_header; hp != NULL;)
- if ((STACK_DIR > 0 && hp->h.deep > depth)
- || (STACK_DIR < 0 && hp->h.deep < depth))
- {
- register header *np = hp->h.next;
-
- free ((pointer) hp); /* Collect garbage. */
-
- hp = np; /* -> next header. */
- }
- else
- break; /* Rest are not deeper. */
-
- last_alloca_header = hp; /* -> last valid storage. */
-
-#ifdef emacs
- UNBLOCK_INPUT;
-#endif
- }
-
- if (size == 0)
- return NULL; /* No allocation required. */
-
- /* Allocate combined header + user data storage. */
-
- {
- register pointer new = malloc (sizeof (header) + size);
- /* Address of header. */
-
- if (new == 0)
- abort();
-
- ((header *) new)->h.next = last_alloca_header;
- ((header *) new)->h.deep = depth;
-
- last_alloca_header = (header *) new;
-
- /* User storage begins just after header. */
-
- return (pointer) ((char *) new + sizeof (header));
- }
-}
-
-#if defined (CRAY) && defined (CRAY_STACKSEG_END)
-
-#ifdef DEBUG_I00AFUNC
-#include <stdio.h>
-#endif
-
-#ifndef CRAY_STACK
-#define CRAY_STACK
-#ifndef CRAY2
-/* Stack structures for CRAY-1, CRAY X-MP, and CRAY Y-MP */
-struct stack_control_header
- {
- long shgrow:32; /* Number of times stack has grown. */
- long shaseg:32; /* Size of increments to stack. */
- long shhwm:32; /* High water mark of stack. */
- long shsize:32; /* Current size of stack (all segments). */
- };
-
-/* The stack segment linkage control information occurs at
- the high-address end of a stack segment. (The stack
- grows from low addresses to high addresses.) The initial
- part of the stack segment linkage control information is
- 0200 (octal) words. This provides for register storage
- for the routine which overflows the stack. */
-
-struct stack_segment_linkage
- {
- long ss[0200]; /* 0200 overflow words. */
- long sssize:32; /* Number of words in this segment. */
- long ssbase:32; /* Offset to stack base. */
- long:32;
- long sspseg:32; /* Offset to linkage control of previous
- segment of stack. */
- long:32;
- long sstcpt:32; /* Pointer to task common address block. */
- long sscsnm; /* Private control structure number for
- microtasking. */
- long ssusr1; /* Reserved for user. */
- long ssusr2; /* Reserved for user. */
- long sstpid; /* Process ID for pid based multi-tasking. */
- long ssgvup; /* Pointer to multitasking thread giveup. */
- long sscray[7]; /* Reserved for Cray Research. */
- long ssa0;
- long ssa1;
- long ssa2;
- long ssa3;
- long ssa4;
- long ssa5;
- long ssa6;
- long ssa7;
- long sss0;
- long sss1;
- long sss2;
- long sss3;
- long sss4;
- long sss5;
- long sss6;
- long sss7;
- };
-
-#else /* CRAY2 */
-/* The following structure defines the vector of words
- returned by the STKSTAT library routine. */
-struct stk_stat
- {
- long now; /* Current total stack size. */
- long maxc; /* Amount of contiguous space which would
- be required to satisfy the maximum
- stack demand to date. */
- long high_water; /* Stack high-water mark. */
- long overflows; /* Number of stack overflow ($STKOFEN) calls. */
- long hits; /* Number of internal buffer hits. */
- long extends; /* Number of block extensions. */
- long stko_mallocs; /* Block allocations by $STKOFEN. */
- long underflows; /* Number of stack underflow calls ($STKRETN). */
- long stko_free; /* Number of deallocations by $STKRETN. */
- long stkm_free; /* Number of deallocations by $STKMRET. */
- long segments; /* Current number of stack segments. */
- long maxs; /* Maximum number of stack segments so far. */
- long pad_size; /* Stack pad size. */
- long current_address; /* Current stack segment address. */
- long current_size; /* Current stack segment size. This
- number is actually corrupted by STKSTAT to
- include the fifteen word trailer area. */
- long initial_address; /* Address of initial segment. */
- long initial_size; /* Size of initial segment. */
- };
-
-/* The following structure describes the data structure which trails
- any stack segment. I think that the description in 'asdef' is
- out of date. I only describe the parts that I am sure about. */
-
-struct stk_trailer
- {
- long this_address; /* Address of this block. */
- long this_size; /* Size of this block (does not include
- this trailer). */
- long unknown2;
- long unknown3;
- long link; /* Address of trailer block of previous
- segment. */
- long unknown5;
- long unknown6;
- long unknown7;
- long unknown8;
- long unknown9;
- long unknown10;
- long unknown11;
- long unknown12;
- long unknown13;
- long unknown14;
- };
-
-#endif /* CRAY2 */
-#endif /* not CRAY_STACK */
-
-#ifdef CRAY2
-/* Determine a "stack measure" for an arbitrary ADDRESS.
- I doubt that "lint" will like this much. */
-
-static long
-i00afunc (long *address)
-{
- struct stk_stat status;
- struct stk_trailer *trailer;
- long *block, size;
- long result = 0;
-
- /* We want to iterate through all of the segments. The first
- step is to get the stack status structure. We could do this
- more quickly and more directly, perhaps, by referencing the
- $LM00 common block, but I know that this works. */
-
- STKSTAT (&status);
-
- /* Set up the iteration. */
-
- trailer = (struct stk_trailer *) (status.current_address
- + status.current_size
- - 15);
-
- /* There must be at least one stack segment. Therefore it is
- a fatal error if "trailer" is null. */
-
- if (trailer == 0)
- abort ();
-
- /* Discard segments that do not contain our argument address. */
-
- while (trailer != 0)
- {
- block = (long *) trailer->this_address;
- size = trailer->this_size;
- if (block == 0 || size == 0)
- abort ();
- trailer = (struct stk_trailer *) trailer->link;
- if ((block <= address) && (address < (block + size)))
- break;
- }
-
- /* Set the result to the offset in this segment and add the sizes
- of all predecessor segments. */
-
- result = address - block;
-
- if (trailer == 0)
- {
- return result;
- }
-
- do
- {
- if (trailer->this_size <= 0)
- abort ();
- result += trailer->this_size;
- trailer = (struct stk_trailer *) trailer->link;
- }
- while (trailer != 0);
-
- /* We are done. Note that if you present a bogus address (one
- not in any segment), you will get a different number back, formed
- from subtracting the address of the first block. This is probably
- not what you want. */
-
- return (result);
-}
-
-#else /* not CRAY2 */
-/* Stack address function for a CRAY-1, CRAY X-MP, or CRAY Y-MP.
- Determine the number of the cell within the stack,
- given the address of the cell. The purpose of this
- routine is to linearize, in some sense, stack addresses
- for alloca. */
-
-static long
-i00afunc (long address)
-{
- long stkl = 0;
-
- long size, pseg, this_segment, stack;
- long result = 0;
-
- struct stack_segment_linkage *ssptr;
-
- /* Register B67 contains the address of the end of the
- current stack segment. If you (as a subprogram) store
- your registers on the stack and find that you are past
- the contents of B67, you have overflowed the segment.
-
- B67 also points to the stack segment linkage control
- area, which is what we are really interested in. */
-
- stkl = CRAY_STACKSEG_END ();
- ssptr = (struct stack_segment_linkage *) stkl;
-
- /* If one subtracts 'size' from the end of the segment,
- one has the address of the first word of the segment.
-
- If this is not the first segment, 'pseg' will be
- nonzero. */
-
- pseg = ssptr->sspseg;
- size = ssptr->sssize;
-
- this_segment = stkl - size;
-
- /* It is possible that calling this routine itself caused
- a stack overflow. Discard stack segments which do not
- contain the target address. */
-
- while (!(this_segment <= address && address <= stkl))
- {
-#ifdef DEBUG_I00AFUNC
- fprintf (stderr, "%011o %011o %011o\n", this_segment, address, stkl);
-#endif
- if (pseg == 0)
- break;
- stkl = stkl - pseg;
- ssptr = (struct stack_segment_linkage *) stkl;
- size = ssptr->sssize;
- pseg = ssptr->sspseg;
- this_segment = stkl - size;
- }
-
- result = address - this_segment;
-
- /* If you subtract pseg from the current end of the stack,
- you get the address of the previous stack segment's end.
- This seems a little convoluted to me, but I'll bet you save
- a cycle somewhere. */
-
- while (pseg != 0)
- {
-#ifdef DEBUG_I00AFUNC
- fprintf (stderr, "%011o %011o\n", pseg, size);
-#endif
- stkl = stkl - pseg;
- ssptr = (struct stack_segment_linkage *) stkl;
- size = ssptr->sssize;
- pseg = ssptr->sspseg;
- result += size;
- }
- return (result);
-}
-
-#endif /* not CRAY2 */
-#endif /* CRAY */
-
-#endif /* no alloca */
-#endif /* not GCC version 2 */
-#endif /* HAVE_ALLOCA */
-
-/*
- * 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/main/build-defs.h.in b/main/build-defs.h.in
deleted file mode 100644
index ba1f8e4c8d..0000000000
--- a/main/build-defs.h.in
+++ /dev/null
@@ -1,91 +0,0 @@
-/* -*- C -*-
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Stig Sæther Bakken <ssb@php.net> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#define CONFIGURE_COMMAND "@CONFIGURE_COMMAND@"
-#define PHP_ADA_INCLUDE ""
-#define PHP_ADA_LFLAGS ""
-#define PHP_ADA_LIBS ""
-#define PHP_APACHE_INCLUDE ""
-#define PHP_APACHE_TARGET ""
-#define PHP_FHTTPD_INCLUDE ""
-#define PHP_FHTTPD_LIB ""
-#define PHP_FHTTPD_TARGET ""
-#define PHP_CFLAGS "@CFLAGS@"
-#define PHP_DBASE_LIB ""
-#define PHP_BUILD_DEBUG "@DEBUG_CFLAGS@"
-#define PHP_GDBM_INCLUDE ""
-#define PHP_HSREGEX ""
-#define PHP_IBASE_INCLUDE ""
-#define PHP_IBASE_LFLAGS ""
-#define PHP_IBASE_LIBS ""
-#define PHP_IFX_INCLUDE ""
-#define PHP_IFX_LFLAGS ""
-#define PHP_IFX_LIBS ""
-#define PHP_INSTALL_IT "@INSTALL_IT@"
-#define PHP_IODBC_INCLUDE ""
-#define PHP_IODBC_LFLAGS ""
-#define PHP_IODBC_LIBS ""
-#define PHP_MSQL_INCLUDE ""
-#define PHP_MSQL_LFLAGS ""
-#define PHP_MSQL_LIBS ""
-#define PHP_MYSQL_INCLUDE "@MYSQL_INCLUDE@"
-#define PHP_MYSQL_LIBS "@MYSQL_LIBS@"
-#define PHP_MYSQL_TYPE "@MYSQL_MODULE_TYPE@"
-#define PHP_ODBC_INCLUDE "@ODBC_INCLUDE@"
-#define PHP_ODBC_LFLAGS "@ODBC_LFLAGS@"
-#define PHP_ODBC_LIBS "@ODBC_LIBS@"
-#define PHP_ODBC_TYPE "@ODBC_TYPE@"
-#define PHP_OCI8_SHARED_LIBADD "@OCI8_SHARED_LIBADD@"
-#define PHP_OCI8_DIR "@OCI8_DIR@"
-#define PHP_OCI8_VERSION "@OCI8_VERSION@"
-#define PHP_ORACLE_SHARED_LIBADD "@ORACLE_SHARED_LIBADD@"
-#define PHP_ORACLE_DIR "@ORACLE_DIR@"
-#define PHP_ORACLE_VERSION "@ORACLE_VERSION@"
-#define PHP_PGSQL_INCLUDE ""
-#define PHP_PGSQL_LFLAGS ""
-#define PHP_PGSQL_LIBS ""
-#define PHP_PROG_SENDMAIL "@PROG_SENDMAIL@"
-#define PHP_REGEX_LIB ""
-#define PHP_SOLID_INCLUDE ""
-#define PHP_SOLID_LIBS ""
-#define PHP_EMPRESS_INCLUDE ""
-#define PHP_EMPRESS_LIBS ""
-#define PHP_SYBASE_INCLUDE ""
-#define PHP_SYBASE_LFLAGS ""
-#define PHP_SYBASE_LIBS ""
-#define PHP_DBM_TYPE ""
-#define PHP_DBM_LIB ""
-#define PHP_LDAP_LFLAGS ""
-#define PHP_LDAP_INCLUDE ""
-#define PHP_LDAP_LIBS ""
-#define PHP_BIRDSTEP_INCLUDE ""
-#define PHP_BIRDSTEP_LIBS ""
-#define PEAR_INSTALLDIR "@EXPANDED_PEAR_INSTALLDIR@"
-#define PHP_INCLUDE_PATH "@INCLUDE_PATH@"
-#define PHP_EXTENSION_DIR "@EXPANDED_EXTENSION_DIR@"
-#define PHP_PREFIX "@prefix@"
-#define PHP_BINDIR "@EXPANDED_BINDIR@"
-#define PHP_LIBDIR "@EXPANDED_LIBDIR@"
-#define PHP_DATADIR "@EXPANDED_DATADIR@"
-#define PHP_SYSCONFDIR "@EXPANDED_SYSCONFDIR@"
-#define PHP_LOCALSTATEDIR "@EXPANDED_LOCALSTATEDIR@"
-#define PHP_CONFIG_FILE_PATH "@EXPANDED_PHP_CONFIG_FILE_PATH@"
-#define PHP_CONFIG_FILE_SCAN_DIR "@EXPANDED_PHP_CONFIG_FILE_SCAN_DIR@"
-#define PHP_SHLIB_SUFFIX "@SHLIB_SUFFIX_NAME@"
diff --git a/main/config.nw.h b/main/config.nw.h
deleted file mode 100644
index 1329c4f244..0000000000
--- a/main/config.nw.h
+++ /dev/null
@@ -1,316 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-/* config.nw.h. Configure file for NetWare platform */
-
-
-/* Define if PHP to setup it's own SIGCHLD handler (not needed on NetWare) */
-#define PHP_SIGCHILD 0
-
-/* dns functions found in resolv.lib */
-#define HAVE_LIBBIND 1
-
-#define HAVE_GETSERVBYNAME 1
-#define HAVE_GETSERVBYPORT 1
-#define HAVE_GETPROTOBYNAME 1
-#define HAVE_GETPROTOBYNUMBER 1
-
-/* set to enable bcmath */
-#define HAVE_BCMATH 1
-
-/* set to enable mysql */
-#define HAVE_MYSQL 1
-
-/* set to enable FTP support */
-#define HAVE_FTP 1
-
-/* set to enable SNMP */
-/*#define HAVE_SNMP 1*/
-
-/* defines for PostgreSQL extension */
-#define HAVE_PGSQL 1
-#define PHP_PGSQL_PRIVATE 1
-#define HAVE_PGSQL_WITH_MULTIBYTE_SUPPORT 1
-#define HAVE_PQCLIENTENCODING 1
-#define HAVE_PQCMDTUPLES 1
-#define HAVE_PQOIDVALUE 1
-
-/* set to enable bundled PCRE library */
-#define HAVE_BUNDLED_PCRE 1
-
-/* set to enable bundled expat library */
-/* #define HAVE_LIBEXPAT 1 */ /* For now */
-#define HAVE_WDDX 0
-
-/* set to enable the crypt command */
-/* #define HAVE_CRYPT 1 */
-/* #define HAVE_CRYPT_H 1 */
-
-/* set to enable force cgi redirect */
-#define FORCE_CGI_REDIRECT 0
-
-/* should be added to runtime config*/
-#define PHP_URL_FOPEN 1
-
-#define STDIN_FILENO 0
-#define STDOUT_FILENO 1
-#define STDERR_FILENO 2
-
-/* ----------------------------------------------------------------
- The following are defaults for run-time configuration
- ---------------------------------------------------------------*/
-
-#define PHP_SAFE_MODE 0
-#define MAGIC_QUOTES 0
-
-
-/* Undefine if you want stricter XML/SGML compliance by default */
-/* this disables "<?expression?>" and "<?=expression?>" */
-#define DEFAULT_SHORT_OPEN_TAG "1"
-
-
-/* ----------------------------------------------------------------
- The following defines are for those modules which require
- external libraries to compile. These will be removed from
- here in a future beta, as these modules will be moved out to dll's
- ---------------------------------------------------------------*/
-#define HAVE_ERRMSG_H 0 /*needed for mysql 3.21.17 and up*/
-#undef HAVE_ADABAS
-#undef HAVE_SOLID
-
-
-/* ----------------------------------------------------------------
- The following may or may not be (or need to be) ported to the
- windows environment.
- ---------------------------------------------------------------*/
-
-/* Define if you have the link function. */
-#undef HAVE_LINK
-
-/* Define if you have the symlink function. */
-#undef HAVE_SYMLINK
-
-/* Define if you have the usleep function. */
-#undef HAVE_USLEEP
-
-#define HAVE_GETCWD 1
-/* #define HAVE_POSIX_READDIR_R 1 */ /* We will use readdir() from LibC */
-
-#define NEED_ISBLANK 1
-
-/* ----------------------------------------------------------------
- The following should never need to be played with
- Functions defined to 0 or remarked out are either already
- handled by the standard VC libraries, or are no longer needed, or
- simply will/can not be ported.
-
- DONT TOUCH!!!!! Unless you realy know what your messing with!
- ---------------------------------------------------------------*/
-
-#define DISCARD_PATH 0
-#undef HAVE_SETITIMER
-#undef HAVE_IODBC
-#define HAVE_UODBC 1
-#define HAVE_LIBDL 1
-#define HAVE_SENDMAIL 1
-
-/* Define if you have the gettimeofday function. */
-#define HAVE_GETTIMEOFDAY 1
-
-/* Define if you have the putenv function. */
-#define HAVE_PUTENV 1
-
-#define HAVE_LIMITS_H 1
-
-#define HAVE_TZSET 1
-#define HAVE_TZNAME 1
-
-/* Define if you have the flock function. */
-#undef HAVE_FLOCK
-
-/* Define if you have alloca, as a function or macro. */
-/* Though we have alloca(), this seems to be causing some problem with the stack pointer -- hence not using it */
-/* #define HAVE_ALLOCA 1 */
-
-/* Define if you have <sys/time.h> */
-#undef HAVE_SYS_TIME_H
-
-/* Define if you have <signal.h> */
-#define HAVE_SIGNAL_H 1
-
-/* Define if your struct stat has st_blksize. */
-#define HAVE_ST_BLKSIZE
-
-/* Define if your struct stat has st_blocks. */
-#define HAVE_ST_BLOCKS
-
-/* Define if your struct stat has st_rdev. */
-#define HAVE_ST_RDEV 1
-
-/* Define if utime(file, NULL) sets file's timestamp to the present. */
-#define HAVE_UTIME_NULL 1
-
-/* Define if you have the vprintf function. */
-#define HAVE_VPRINTF 1
-
-/* Define if you have the ANSI C header files. */
-#define STDC_HEADERS 1
-
-/* Define both of these if you want the bundled REGEX library */
-#define REGEX 1
-#define HSREGEX 1
-
-#define HAVE_PCRE 1
-
-#define HAVE_LDAP 1
-
-/* Define if you have the gcvt function. */
-/* #define HAVE_GCVT 1 */
-
-/* Define if you have the getlogin function. */
-/* #define HAVE_GETLOGIN 1 */
-
-/* Define if you have the memcpy function. */
-#define HAVE_MEMCPY 1
-
-/* Define if you have the memmove function. */
-#define HAVE_MEMMOVE 1
-
-/* Define if you have the regcomp function. */
-#define HAVE_REGCOMP 1
-
-/* Define if you have the setlocale function. */
-/* #define HAVE_SETLOCALE 1 */ /* LibC doesn't seem to be supporting fully -- hence commenting for now */
-
-#define HAVE_LOCALECONV 1
-
-#define HAVE_LOCALE_H 1
-
-/* Define if you have the setvbuf function. */
-#ifndef HAVE_LIBBIND
-#define HAVE_SETVBUF 1
-#endif
-
-/* Define if you have the snprintf function. */
-#define HAVE_SNPRINTF 1
-#define HAVE_VSNPRINTF 1
-/* Define if you have the strcasecmp function. */
-#define HAVE_STRCASECMP 1
-
-/* Define if you have the strdup function. */
-#define HAVE_STRDUP 1
-
-/* Define if you have the strerror function. */
-#define HAVE_STRERROR 1
-
-/* Define if you have the strstr function. */
-#define HAVE_STRSTR 1
-
-/* Define if you have the tempnam function. */
-#define HAVE_TEMPNAM 1
-
-/* Define if you have the utime function. */
-#define HAVE_UTIME 1
-
-/* Define if you have the <dirent.h> header file. */
-#define HAVE_DIRENT_H 1
-
-/* Define if you have the <fcntl.h> header file. */
-#define HAVE_FCNTL_H 1
-
-/* Define if you have the <grp.h> header file. */
-#define HAVE_GRP_H 0
-
-/* Define if you have the <pwd.h> header file. */
-#define HAVE_PWD_H 1
-
-/* Define if you have the <string.h> header file. */
-#define HAVE_STRING_H 1
-
-/* Define if you have the <sys/file.h> header file. */
-#undef HAVE_SYS_FILE_H
-
-/* Define if you have the <sys/socket.h> header file. */
-#ifdef USE_WINSOCK
-#undef HAVE_SYS_SOCKET_H
-#else
-#define HAVE_SYS_SOCKET_H 1 /* Added '1' for '#if' to work */
-#endif
-
-/* Define if you have the <sys/wait.h> header file. */
-#undef HAVE_SYS_WAIT_H
-
-/* Define if you have the <syslog.h> header file. */
-/* #define HAVE_SYSLOG_H 1 */
-
-/* Define if you have the <unistd.h> header file. */
-#define HAVE_UNISTD_H 1 /* Added '1' for '#if' to work */
-
-/* Define if you have the dl library (-ldl). */
-#define HAVE_LIBDL 1
-
-/* Define if you have the m library (-lm). */
-#define HAVE_LIBM 1
-
-/* Define if you have the cuserid function. */
-#define HAVE_CUSERID 0
-
-/* Define if you have the rint function. */
-#undef HAVE_RINT
-
-#define HAVE_STRFTIME 1
-
-/* Defined since unsetenv function is defined in LibC.
- * This is used to destroy env values in the function php_putenv_destructor.
- * If we do not use unsetenv, then the environment variables are directlt manipulated.
- * This will then result in LibC not being able to do the maintenance
- * that is required for NetWare.
- */
-#define HAVE_UNSETENV 1
-
-/* Default directory for loading extensions. */
-#define PHP_EXTENSION_DIR "sys:/php/ext"
-
-#define SIZEOF_INT 4
-
-/* Define directory constants for PHP and PEAR */
-
-/* This is the default configuration file to read */
-#define CONFIGURATION_FILE_PATH "php.ini"
-
-#define APACHE_MODULE_DIR "sys:/apache/modules"
-#define PHP_BINDIR "sys:/php"
-#define PHP_LIBDIR PHP_BINDIR
-#define PHP_DATADIR PHP_BINDIR
-#define PHP_SYSCONFDIR PHP_BINDIR
-#define PHP_LOCALSTATEDIR PHP_BINDIR
-#define PHP_CONFIG_FILE_PATH "sys:/php"
-#define PEAR_INSTALLDIR "sys:/php/pear"
-
-#define PHP_CONFIG_FILE_SCAN_DIR NULL
-#define PHP_EXTENSION_DIR "sys:/php/ext"
-
-#define PHP_INCLUDE_PATH NULL
-
-#define PHP_PREFIX "sys:/php"
-#define PHP_SHLIB_SUFFIX "nlm"
-
-#define USE_CONFIG_FILE 1
-
diff --git a/main/config.w32.h b/main/config.w32.h
deleted file mode 100644
index 6bfe3879a6..0000000000
--- a/main/config.w32.h
+++ /dev/null
@@ -1,205 +0,0 @@
-/*
- Build Configuration for Win32.
- This has only been tested with MS VisualC++ 6 (and later).
-
- $Id$
-*/
-
-/* Default PHP / PEAR directories */
-#define CONFIGURATION_FILE_PATH "php.ini"
-#define PEAR_INSTALLDIR "c:\\php5\\pear"
-#define PHP_BINDIR "c:\\php5"
-#define PHP_CONFIG_FILE_PATH (getenv("SystemRoot"))?getenv("SystemRoot"):""
-#define PHP_CONFIG_FILE_SCAN_DIR ""
-#define PHP_DATADIR "c:\\php5"
-#define PHP_EXTENSION_DIR "c:\\php5"
-#define PHP_INCLUDE_PATH ".;c:\\php5\\pear"
-#define PHP_LIBDIR "c:\\php5"
-#define PHP_LOCALSTATEDIR "c:\\php5"
-#define PHP_PREFIX "c:\\php5"
-#define PHP_SYSCONFDIR "c:\\php5"
-
-/* Enable / Disable BCMATH extension (default: enabled) */
-#define HAVE_BCMATH 1
-
-/* Enable / Disable crypt() function (default: enabled) */
-#define HAVE_CRYPT 1
-#define PHP_STD_DES_CRYPT 1
-#define PHP_EXT_DES_CRYPT 0
-#define PHP_MD5_CRYPT 1
-#define PHP_BLOWFISH_CRYPT 0
-
-/* Enable / Disable CALENDAR extension (default: enabled) */
-#define HAVE_CALENDAR 1
-
-/* Enable / Disable CTYPE extension (default: enabled) */
-#define HAVE_CTYPE 1
-
-/* Enable / Disable FTP extension (default: enabled) */
-#define HAVE_FTP 1
-
-/* Enable / Disable MBSTRING extension (default: disabled) */
-/* #define HAVE_MBSTRING 0 */
-/* #define HAVE_MBREGEX 0 */
-/* #define HAVE_MBSTR_CN 0 */
-/* #define HAVE_MBSTR_JA 0 */
-/* #define HAVE_MBSTR_KR 0 */
-/* #define HAVE_MBSTR_RU 0 */
-/* #define HAVE_MBSTR_TW 0 */
-
-/* If you have the .Net SDK in your include path, define this
- * to compile .Net support into your COM extension. */
-#define HAVE_MSCOREE_H 0
-
-/* Enable / Disable ODBC extension (default: enabled) */
-#define HAVE_UODBC 1
-
-/* Enable / Disable PCRE extension (default: enabled) */
-#define HAVE_BUNDLED_PCRE 1
-#define HAVE_PCRE 1
-
-/* Enable / Disable SESSION extension (default: enabled) */
-#define HAVE_PHP_SESSION 1
-
-/* Enable / Disable TOKENIZER extension (default: enabled) */
-#define HAVE_TOKENIZER 1
-
-/* Enable / Disable WDDX extension (default: enabled) */
-#define HAVE_WDDX 1
-
-/* Enable / Disable XML extensions (default: enabled) */
-#define HAVE_LIBXML 1
-#define HAVE_DOM 1
-#define HAVE_SIMPLEXML 1
-#define HAVE_XML 1
-
-/* Enable / Disable ZLIB extension (default: enabled) */
-#define HAVE_ZLIB 1
-
-/* Enable / Disable SQLite extension (default: enabled) */
-#define HAVE_SQLITE 1
-
-/* PHP Runtime Configuration */
-#define FORCE_CGI_REDIRECT 1
-#define PHP_URL_FOPEN 1
-#define PHP_SAFE_MODE 0
-#define MAGIC_QUOTES 0
-#define USE_CONFIG_FILE 1
-#define DEFAULT_SHORT_OPEN_TAG "1"
-#define ENABLE_PATHINFO_CHECK 1
-
-/* Platform-Specific Configuration. Should not be changed. */
-#define PHP_SIGCHILD 0
-#define HAVE_LIBBIND 1
-#define HAVE_GETSERVBYNAME 1
-#define HAVE_GETSERVBYPORT 1
-#define HAVE_GETPROTOBYNAME 1
-#define HAVE_GETPROTOBYNUMBER 1
-#define STDIN_FILENO 0
-#define STDOUT_FILENO 1
-#define STDERR_FILENO 2
-#define HAVE_ERRMSG_H 0
-#undef HAVE_ADABAS
-#undef HAVE_SOLID
-#undef HAVE_LINK
-#undef HAVE_SYMLINK
-
-/* its in win32/time.c */
-#define HAVE_USLEEP 1
-
-#define HAVE_GETCWD 1
-#define HAVE_POSIX_READDIR_R 1
-#define NEED_ISBLANK 1
-#define DISCARD_PATH 0
-#undef HAVE_SETITIMER
-#undef HAVE_IODBC
-#define HAVE_LIBDL 1
-#define HAVE_SENDMAIL 1
-#define HAVE_GETTIMEOFDAY 1
-#define HAVE_PUTENV 1
-#define HAVE_LIMITS_H 1
-#define HAVE_TZSET 1
-#define HAVE_TZNAME 1
-#undef HAVE_FLOCK
-#define HAVE_ALLOCA 1
-#undef HAVE_SYS_TIME_H
-#define HAVE_SIGNAL_H 1
-#undef HAVE_ST_BLKSIZE
-#undef HAVE_ST_BLOCKS
-#define HAVE_ST_RDEV 1
-#define HAVE_UTIME_NULL 1
-#define HAVE_VPRINTF 1
-#define STDC_HEADERS 1
-#define REGEX 1
-#define HSREGEX 1
-#define HAVE_GCVT 1
-#define HAVE_GETLOGIN 1
-#define HAVE_GETTIMEOFDAY 1
-#define HAVE_MEMCPY 1
-#define HAVE_MEMMOVE 1
-#define HAVE_PUTENV 1
-#define HAVE_REGCOMP 1
-#define HAVE_SETLOCALE 1
-#define HAVE_LOCALECONV 1
-#define HAVE_LOCALE_H 1
-#ifndef HAVE_LIBBIND
-#define HAVE_SETVBUF 1
-#endif
-#define HAVE_SHUTDOWN 1
-#define HAVE_SNPRINTF 1
-#define HAVE_VSNPRINTF 1
-#define HAVE_STRCASECMP 1
-#define HAVE_STRDUP 1
-#define HAVE_STRERROR 1
-#define HAVE_STRSTR 1
-#define HAVE_TEMPNAM 1
-#define HAVE_UTIME 1
-#undef HAVE_DIRENT_H
-#define HAVE_ASSERT_H 1
-#define HAVE_FCNTL_H 1
-#define HAVE_GRP_H 0
-#define HAVE_PWD_H 1
-#define HAVE_STRING_H 1
-#undef HAVE_SYS_FILE_H
-#undef HAVE_SYS_SOCKET_H
-#undef HAVE_SYS_WAIT_H
-#define HAVE_SYSLOG_H 1
-#undef HAVE_UNISTD_H
-#define HAVE_LIBDL 1
-#define HAVE_LIBM 1
-#define HAVE_CUSERID 0
-#undef HAVE_RINT
-#define HAVE_STRFTIME 1
-/* int and long are stll 32bit in 64bit compiles */
-#define SIZEOF_INT 4
-#define SIZEOF_LONG 4
-/* MSVC.6/NET don't allow 'long long' or know 'intmax_t' */
-#define SIZEOF_LONG_LONG_INT 0
-#define SIZEOF_LONG_LONG 0
-#define SIZEOF_INTMAX_T 0
-#define ssize_t SSIZE_T
-#ifdef _WIN64
-# define SIZEOF_SIZE_T 8
-# define SIZEOF_PTRDIFF_T 8
-#else
-# define SIZEOF_SIZE_T 4
-# define SIZEOF_PTRDIFF_T 4
-#endif
-#define HAVE_GLOB
-#define PHP_SHLIB_SUFFIX "dll"
-#define HAVE_SQLDATASOURCES
-#define POSIX_MALLOC_THRESHOLD 10
-
-
-/*
- * defining HAVE_SOCKLEN_T prevents PHP from building with the latest platform SDK...
- * #define HAVE_SOCKLEN_T
- */
-
-/* Win32 supports strcoll */
-#define HAVE_STRCOLL 1
-
-/* Win32 support proc_open */
-#define PHP_CAN_SUPPORT_PROC_OPEN 1
-
-#define HAVE_MBLEN
diff --git a/main/fopen_wrappers.c b/main/fopen_wrappers.c
deleted file mode 100644
index d29a33b5b7..0000000000
--- a/main/fopen_wrappers.c
+++ /dev/null
@@ -1,578 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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. |
- +----------------------------------------------------------------------+
- | Authors: Rasmus Lerdorf <rasmus@lerdorf.on.ca> |
- | Jim Winstead <jimw@php.net> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-/* {{{ includes
- */
-#include "php.h"
-#include "php_globals.h"
-#include "SAPI.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <errno.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <fcntl.h>
-
-#ifdef PHP_WIN32
-#define O_RDONLY _O_RDONLY
-#include "win32/param.h"
-#elif defined(NETWARE)
-/*#include <ws2nlm.h>*/
-/*#include <sys/socket.h>*/
-#ifdef NEW_LIBC
-#include <sys/param.h>
-#else
-#include "netware/param.h"
-#endif
-#else
-#include <sys/param.h>
-#endif
-
-#include "safe_mode.h"
-#include "ext/standard/head.h"
-#include "ext/standard/php_standard.h"
-#include "zend_compile.h"
-#include "php_network.h"
-
-#if HAVE_PWD_H
-#ifdef PHP_WIN32
-#include "win32/pwd.h"
-#elif defined(NETWARE)
-#include "netware/pwd.h"
-#else
-#include <pwd.h>
-#endif
-#endif
-
-#include <sys/types.h>
-#if HAVE_SYS_SOCKET_H
-#include <sys/socket.h>
-#endif
-
-#ifndef S_ISREG
-#define S_ISREG(mode) (((mode) & S_IFMT) == S_IFREG)
-#endif
-
-#ifdef PHP_WIN32
-#include <winsock2.h>
-#elif defined(NETWARE) && defined(USE_WINSOCK)
-/*#include <ws2nlm.h>*/
-#include <novsock2.h>
-#else
-#include <netinet/in.h>
-#include <netdb.h>
-#if HAVE_ARPA_INET_H
-#include <arpa/inet.h>
-#endif
-#endif
-
-#if defined(PHP_WIN32) || defined(__riscos__) || defined(NETWARE)
-#undef AF_UNIX
-#endif
-
-#if defined(AF_UNIX)
-#include <sys/un.h>
-#endif
-/* }}} */
-
-/* {{{ php_check_specific_open_basedir
- When open_basedir is not NULL, check if the given filename is located in
- open_basedir. Returns -1 if error or not in the open_basedir, else 0
-
- When open_basedir is NULL, always return 0
-*/
-PHPAPI int php_check_specific_open_basedir(const char *basedir, const char *path TSRMLS_DC)
-{
- char resolved_name[MAXPATHLEN];
- char resolved_basedir[MAXPATHLEN];
- char local_open_basedir[MAXPATHLEN];
- int local_open_basedir_pos;
- int resolved_basedir_len;
- int resolved_name_len;
-
- /* Special case basedir==".": Use script-directory */
- if ((strcmp(basedir, ".") == 0) &&
- SG(request_info).path_translated &&
- *SG(request_info).path_translated
- ) {
- strlcpy(local_open_basedir, SG(request_info).path_translated, sizeof(local_open_basedir));
- local_open_basedir_pos = strlen(local_open_basedir) - 1;
-
- /* Strip filename */
- while (!IS_SLASH(local_open_basedir[local_open_basedir_pos])
- && (local_open_basedir_pos >= 0)) {
- local_open_basedir[local_open_basedir_pos--] = 0;
- }
- } else {
- /* Else use the unmodified path */
- strlcpy(local_open_basedir, basedir, sizeof(local_open_basedir));
- }
-
- /* Resolve the real path into resolved_name */
- if ((expand_filepath(path, resolved_name TSRMLS_CC) != NULL) && (expand_filepath(local_open_basedir, resolved_basedir TSRMLS_CC) != NULL)) {
- /* Handler for basedirs that end with a / */
- resolved_basedir_len = strlen(resolved_basedir);
- if (basedir[strlen(basedir) - 1] == PHP_DIR_SEPARATOR) {
- if (resolved_basedir[resolved_basedir_len - 1] == '/') {
- resolved_basedir[resolved_basedir_len - 1] = PHP_DIR_SEPARATOR;
- resolved_basedir[++resolved_basedir_len] = '\0';
- }
- }
-
- if (path[strlen(path)-1] == PHP_DIR_SEPARATOR) {
- resolved_name_len = strlen(resolved_name);
- if (resolved_name[resolved_name_len - 1] != PHP_DIR_SEPARATOR) {
- resolved_name[resolved_name_len] = PHP_DIR_SEPARATOR;
- resolved_name[++resolved_name_len] = '\0';
- }
- }
-
- /* Check the path */
-#ifdef PHP_WIN32
- if (strncasecmp(resolved_basedir, resolved_name, resolved_basedir_len) == 0) {
-#else
- if (strncmp(resolved_basedir, resolved_name, resolved_basedir_len) == 0) {
-#endif
- /* File is in the right directory */
- return 0;
- } else {
- return -1;
- }
- } else {
- /* Unable to resolve the real path, return -1 */
- return -1;
- }
-}
-/* }}} */
-
-PHPAPI int php_check_open_basedir(const char *path TSRMLS_DC)
-{
- return php_check_open_basedir_ex(path, 1 TSRMLS_CC);
-}
-
-/* {{{ php_check_open_basedir
- */
-PHPAPI int php_check_open_basedir_ex(const char *path, int warn TSRMLS_DC)
-{
- /* Only check when open_basedir is available */
- if (PG(open_basedir) && *PG(open_basedir)) {
- char *pathbuf;
- char *ptr;
- char *end;
-
- pathbuf = estrdup(PG(open_basedir));
-
- ptr = pathbuf;
-
- while (ptr && *ptr) {
- end = strchr(ptr, DEFAULT_DIR_SEPARATOR);
- if (end != NULL) {
- *end = '\0';
- end++;
- }
-
- if (php_check_specific_open_basedir(ptr, path TSRMLS_CC) == 0) {
- efree(pathbuf);
- return 0;
- }
-
- ptr = end;
- }
- if (warn) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING,
- "open_basedir restriction in effect. File(%s) is not within the allowed path(s): (%s)", path, PG(open_basedir));
- }
- efree(pathbuf);
- errno = EPERM; /* we deny permission to open it */
- return -1;
- }
-
- /* Nothing to check... */
- return 0;
-}
-/* }}} */
-
-/* {{{ php_check_safe_mode_include_dir
- */
-PHPAPI int php_check_safe_mode_include_dir(char *path TSRMLS_DC)
-{
- if (PG(safe_mode)) {
- if (PG(safe_mode_include_dir) && *PG(safe_mode_include_dir)) {
- char *pathbuf;
- char *ptr;
- char *end;
- char resolved_name[MAXPATHLEN];
-
- /* Resolve the real path into resolved_name */
- if (expand_filepath(path, resolved_name TSRMLS_CC) == NULL)
- return -1;
-
- pathbuf = estrdup(PG(safe_mode_include_dir));
-
- ptr = pathbuf;
-
- while (ptr && *ptr) {
- end = strchr(ptr, DEFAULT_DIR_SEPARATOR);
- if (end != NULL) {
- *end = '\0';
- end++;
- }
-
- /* Check the path */
-#ifdef PHP_WIN32
- if (strncasecmp(ptr, resolved_name, strlen(ptr)) == 0)
-#else
- if (strncmp(ptr, resolved_name, strlen(ptr)) == 0)
-#endif
- {
- /* File is in the right directory */
- efree(pathbuf);
- return 0;
- }
-
- ptr = end;
- }
- efree(pathbuf);
- }
- return -1;
- }
-
- /* Nothing to check... */
- return 0;
-}
-/* }}} */
-
-/* {{{ php_fopen_and_set_opened_path
- */
-static FILE *php_fopen_and_set_opened_path(const char *path, char *mode, char **opened_path TSRMLS_DC)
-{
- FILE *fp;
-
- if (php_check_open_basedir((char *)path TSRMLS_CC)) {
- return NULL;
- }
- fp = VCWD_FOPEN(path, mode);
- if (fp && opened_path) {
- *opened_path = expand_filepath(path, NULL TSRMLS_CC);
- }
- return fp;
-}
-/* }}} */
-
-/* {{{ php_fopen_primary_script
- */
-PHPAPI int php_fopen_primary_script(zend_file_handle *file_handle TSRMLS_DC)
-{
- FILE *fp;
- struct stat st;
- char *path_info, *filename;
- int length;
-
- filename = SG(request_info).path_translated;
- path_info = SG(request_info).request_uri;
-#if HAVE_PWD_H
- if (PG(user_dir) && *PG(user_dir)
- && path_info && '/' == path_info[0] && '~' == path_info[1]) {
-
- char user[32];
- struct passwd *pw;
- char *s = strchr(path_info + 2, '/');
-
- filename = NULL; /* discard the original filename, it must not be used */
- if (s) { /* if there is no path name after the file, do not bother */
- /* to try open the directory */
- length = s - (path_info + 2);
- if (length > (int)sizeof(user) - 1)
- length = sizeof(user) - 1;
- memcpy(user, path_info + 2, length);
- user[length] = '\0';
-
- pw = getpwnam(user);
- if (pw && pw->pw_dir) {
- filename = emalloc(strlen(PG(user_dir)) + strlen(path_info) + strlen(pw->pw_dir) + 4);
- if (filename) {
- sprintf(filename, "%s%c%s%c%s", pw->pw_dir, PHP_DIR_SEPARATOR,
- PG(user_dir), PHP_DIR_SEPARATOR, s+1); /* Safe */
- STR_FREE(SG(request_info).path_translated);
- SG(request_info).path_translated = filename;
- }
- }
- }
- } else
-#endif
- if (PG(doc_root) && path_info) {
- length = strlen(PG(doc_root));
- if (IS_ABSOLUTE_PATH(PG(doc_root), length)) {
- filename = emalloc(length + strlen(path_info) + 2);
- if (filename) {
- memcpy(filename, PG(doc_root), length);
- if (!IS_SLASH(filename[length - 1])) { /* length is never 0 */
- filename[length++] = PHP_DIR_SEPARATOR;
- }
- if (IS_SLASH(path_info[0])) {
- length--;
- }
- strcpy(filename + length, path_info);
- STR_FREE(SG(request_info).path_translated);
- SG(request_info).path_translated = filename;
- }
- }
- } /* if doc_root && path_info */
-
- if (!filename) {
- /* we have to free SG(request_info).path_translated here because
- php_destroy_request_info assumes that it will get
- freed when the include_names hash is emptied, but
- we're not adding it in this case */
- STR_FREE(SG(request_info).path_translated);
- SG(request_info).path_translated = NULL;
- return FAILURE;
- }
- fp = VCWD_FOPEN(filename, "rb");
-
- /* refuse to open anything that is not a regular file */
- if (fp && (0 > fstat(fileno(fp), &st) || !S_ISREG(st.st_mode))) {
- fclose(fp);
- fp = NULL;
- }
- if (!fp) {
- STR_FREE(SG(request_info).path_translated); /* for same reason as above */
- SG(request_info).path_translated = NULL;
- return FAILURE;
- }
-
- file_handle->opened_path = expand_filepath(filename, NULL TSRMLS_CC);
-
- if (!(SG(options) & SAPI_OPTION_NO_CHDIR)) {
- VCWD_CHDIR_FILE(filename);
- }
- SG(request_info).path_translated = filename;
-
- file_handle->filename = SG(request_info).path_translated;
- file_handle->free_filename = 0;
- file_handle->handle.fp = fp;
- file_handle->type = ZEND_HANDLE_FP;
-
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ php_fopen_with_path
- * Tries to open a file with a PATH-style list of directories.
- * If the filename starts with "." or "/", the path is ignored.
- */
-PHPAPI FILE *php_fopen_with_path(char *filename, char *mode, char *path, char **opened_path TSRMLS_DC)
-{
- char *pathbuf, *ptr, *end;
- char *exec_fname;
- char trypath[MAXPATHLEN];
- struct stat sb;
- FILE *fp;
- int path_length;
- int filename_length;
- int exec_fname_length;
-
- if (opened_path) {
- *opened_path = NULL;
- }
-
- if(!filename) {
- return NULL;
- }
-
- filename_length = strlen(filename);
-
- /* Relative path open */
- if (*filename == '.') {
- if (PG(safe_mode) && (!php_checkuid(filename, mode, CHECKUID_CHECK_MODE_PARAM))) {
- return NULL;
- }
- return php_fopen_and_set_opened_path(filename, mode, opened_path TSRMLS_CC);
- }
-
- /*
- * files in safe_mode_include_dir (or subdir) are excluded from
- * safe mode GID/UID checks
- */
-
- /* Absolute path open */
- if (IS_ABSOLUTE_PATH(filename, filename_length)) {
- if ((php_check_safe_mode_include_dir(filename TSRMLS_CC)) == 0)
- /* filename is in safe_mode_include_dir (or subdir) */
- return php_fopen_and_set_opened_path(filename, mode, opened_path TSRMLS_CC);
-
- if (PG(safe_mode) && (!php_checkuid(filename, mode, CHECKUID_CHECK_MODE_PARAM)))
- return NULL;
-
- return php_fopen_and_set_opened_path(filename, mode, opened_path TSRMLS_CC);
- }
-
- if (!path || (path && !*path)) {
- if (PG(safe_mode) && (!php_checkuid(filename, mode, CHECKUID_CHECK_MODE_PARAM))) {
- return NULL;
- }
- return php_fopen_and_set_opened_path(filename, mode, opened_path TSRMLS_CC);
- }
-
- /* check in provided path */
- /* append the calling scripts' current working directory
- * as a fall back case
- */
- if (zend_is_executing(TSRMLS_C)) {
- exec_fname = zend_get_executed_filename(TSRMLS_C);
- exec_fname_length = strlen(exec_fname);
- path_length = strlen(path);
-
- while ((--exec_fname_length >= 0) && !IS_SLASH(exec_fname[exec_fname_length]));
- if ((exec_fname && exec_fname[0] == '[')
- || exec_fname_length<=0) {
- /* [no active file] or no path */
- pathbuf = estrdup(path);
- } else {
- pathbuf = (char *) emalloc(exec_fname_length + path_length +1 +1);
- memcpy(pathbuf, path, path_length);
- pathbuf[path_length] = DEFAULT_DIR_SEPARATOR;
- memcpy(pathbuf+path_length+1, exec_fname, exec_fname_length);
- pathbuf[path_length + exec_fname_length +1] = '\0';
- }
- } else {
- pathbuf = estrdup(path);
- }
-
- ptr = pathbuf;
-
- while (ptr && *ptr) {
- end = strchr(ptr, DEFAULT_DIR_SEPARATOR);
- if (end != NULL) {
- *end = '\0';
- end++;
- }
- snprintf(trypath, MAXPATHLEN, "%s/%s", ptr, filename);
- if (PG(safe_mode)) {
- if (VCWD_STAT(trypath, &sb) == 0) {
- /* file exists ... check permission */
- if ((php_check_safe_mode_include_dir(trypath TSRMLS_CC) == 0) ||
- php_checkuid(trypath, mode, CHECKUID_CHECK_MODE_PARAM))
- /* UID ok, or trypath is in safe_mode_include_dir */
- fp = php_fopen_and_set_opened_path(trypath, mode, opened_path TSRMLS_CC);
- else
- fp = NULL;
-
- efree(pathbuf);
- return fp;
- }
- }
- fp = php_fopen_and_set_opened_path(trypath, mode, opened_path TSRMLS_CC);
- if (fp) {
- efree(pathbuf);
- return fp;
- }
- ptr = end;
- } /* end provided path */
-
- efree(pathbuf);
- return NULL;
-}
-/* }}} */
-
-/* {{{ php_strip_url_passwd
- */
-PHPAPI char *php_strip_url_passwd(char *url)
-{
- register char *p, *url_start;
-
- if (url == NULL) {
- return "";
- }
-
- p = url;
-
- while (*p) {
- if (*p==':' && *(p+1)=='/' && *(p+2)=='/') {
- /* found protocol */
- url_start = p = p+3;
-
- while (*p) {
- if (*p=='@') {
- int i;
-
- for (i=0; i<3 && url_start<p; i++, url_start++) {
- *url_start = '.';
- }
- for (; *p; p++) {
- *url_start++ = *p;
- }
- *url_start=0;
- break;
- }
- p++;
- }
- return url;
- }
- p++;
- }
- return url;
-}
-/* }}} */
-
-/* {{{ expand_filepath
- */
-PHPAPI char *expand_filepath(const char *filepath, char *real_path TSRMLS_DC)
-{
- cwd_state new_state;
- char cwd[MAXPATHLEN];
- char *result;
-
- result = VCWD_GETCWD(cwd, MAXPATHLEN);
- if (!result) {
- cwd[0] = '\0';
- }
-
- new_state.cwd = strdup(cwd);
- new_state.cwd_length = strlen(cwd);
-
- if(virtual_file_ex(&new_state, filepath, NULL, 1)) {
- free(new_state.cwd);
- return NULL;
- }
-
- if(real_path) {
- int copy_len = new_state.cwd_length>MAXPATHLEN-1?MAXPATHLEN-1:new_state.cwd_length;
- memcpy(real_path, new_state.cwd, copy_len);
- real_path[copy_len]='\0';
- } else {
- real_path = estrndup(new_state.cwd, new_state.cwd_length);
- }
- free(new_state.cwd);
-
- return real_path;
-}
-/* }}} */
-
-/*
- * 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/main/fopen_wrappers.h b/main/fopen_wrappers.h
deleted file mode 100644
index d8ea946dae..0000000000
--- a/main/fopen_wrappers.h
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Jim Winstead <jimw@php.net> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-#ifndef FOPEN_WRAPPERS_H
-#define FOPEN_WRAPPERS_H
-
-BEGIN_EXTERN_C()
-#include "php_globals.h"
-
-PHPAPI int php_fopen_primary_script(zend_file_handle *file_handle TSRMLS_DC);
-PHPAPI char *expand_filepath(const char *filepath, char *real_path TSRMLS_DC);
-
-PHPAPI int php_check_open_basedir(const char *path TSRMLS_DC);
-PHPAPI int php_check_open_basedir_ex(const char *path, int warn TSRMLS_DC);
-PHPAPI int php_check_specific_open_basedir(const char *basedir, const char *path TSRMLS_DC);
-
-PHPAPI int php_check_safe_mode_include_dir(char *path TSRMLS_DC);
-
-PHPAPI FILE *php_fopen_with_path(char *filename, char *mode, char *path, char **opened_path TSRMLS_DC);
-
-PHPAPI int php_is_url(char *path);
-PHPAPI char *php_strip_url_passwd(char *path);
-END_EXTERN_C()
-
-#endif
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- */
diff --git a/main/internal_functions.c.in b/main/internal_functions.c.in
deleted file mode 100644
index cd9bd50644..0000000000
--- a/main/internal_functions.c.in
+++ /dev/null
@@ -1,50 +0,0 @@
-/* -*- C -*-
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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. |
- +----------------------------------------------------------------------+
- | Authors: Andi Gutmans <andi@zend.com> |
- | Zeev Suraski <zeev@zend.com> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-#include "php.h"
-#include "php_main.h"
-#include "zend_modules.h"
-#include "internal_functions_registry.h"
-#include "zend_compile.h"
-#include <stdarg.h>
-#include <stdlib.h>
-#include <stdio.h>
-
-@EXT_INCLUDE_CODE@
-
-zend_module_entry *php_builtin_extensions[] = {
-@EXT_MODULE_PTRS@
-};
-
-#define EXTCOUNT (sizeof(php_builtin_extensions)/sizeof(zend_module_entry *))
-
-
-int php_startup_internal_extensions(void)
-{
- return php_startup_extensions(php_builtin_extensions, EXTCOUNT);
-}
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- */
diff --git a/main/internal_functions_nw.c b/main/internal_functions_nw.c
deleted file mode 100644
index 3ca4854973..0000000000
--- a/main/internal_functions_nw.c
+++ /dev/null
@@ -1,102 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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. |
- +----------------------------------------------------------------------+
- | Authors: Andi Gutmans <andi@zend.com> |
- | Zeev Suraski <zeev@zend.com> |
- | Modified for NetWare: Novell, Inc. |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-/* {{{ includes
- */
-#include "php.h"
-#include "php_main.h"
-#include "zend_modules.h"
-#include "internal_functions_registry.h"
-#include "zend_compile.h"
-#include <stdarg.h>
-#include <stdlib.h>
-#include <stdio.h>
-
-#include "ext/bcmath/php_bcmath.h"
-#include "ext/gd/php_gd.h"
-#include "ext/standard/dl.h"
-#include "ext/standard/file.h"
-#include "ext/standard/fsock.h"
-#include "ext/standard/head.h"
-#include "ext/standard/pack.h"
-#include "ext/standard/php_browscap.h"
-/*#include "ext/standard/php_crypt.h"*/
-#include "ext/standard/php_dir.h"
-#include "ext/standard/php_filestat.h"
-#include "ext/standard/php_mail.h"
-/*#include "ext/standard/php_ext_syslog.h"*/
-#include "ext/standard/php_standard.h"
-#include "ext/standard/php_lcg.h"
-#include "ext/standard/php_array.h"
-#include "ext/standard/php_assert.h"
-#include "ext/calendar/php_calendar.h"
-/*#include "ext/com/php_COM.h"
-#include "ext/com/php_VARIANT.h"*/
-#include "ext/ftp/php_ftp.h"
-#include "ext/standard/reg.h"
-#include "ext/pcre/php_pcre.h"
-/*#include "ext/odbc/php_odbc.h"*/ /* Commented out for now */
-#include "ext/session/php_session.h"
-/*#include "ext/xml/php_xml.h"
-#include "ext/wddx/php_wddx.h"
-#include "ext/mysql/php_mysql.h"*/ /* Commented out for now */
-/* }}} */
-
-/* {{{ php_builtin_extensions[]
- */
-zend_module_entry *php_builtin_extensions[] = {
- phpext_standard_ptr,
-#if HAVE_BCMATH
- phpext_bcmath_ptr,
-#endif
- phpext_calendar_ptr,
-/* COM_module_ptr,*/
- phpext_ftp_ptr,
-#if defined(MBSTR_ENC_TRANS)
- phpext_mbstring_ptr,
-#endif
-/* phpext_mysql_ptr,*/ /* Commented out for now */
-/* phpext_odbc_ptr, */ /* Commented out for now */
- phpext_pcre_ptr,
- phpext_session_ptr,
-/* phpext_xml_ptr,
- phpext_wddx_ptr */ /* Commented out for now */
-};
-/* }}} */
-
-#define EXTCOUNT (sizeof(php_builtin_extensions)/sizeof(zend_module_entry *))
-
-
-int php_startup_internal_extensions(void)
-{
- return php_startup_extensions(php_builtin_extensions, EXTCOUNT);
-}
-
-
-/*
- * 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/main/internal_functions_registry.h b/main/internal_functions_registry.h
deleted file mode 100644
index 86980b4127..0000000000
--- a/main/internal_functions_registry.h
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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. |
- +----------------------------------------------------------------------+
- | Authors: Andi Gutmans <andi@zend.com> |
- | Zeev Suraski <zeev@zend.com> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-#ifndef INTERNAL_FUNCTIONS_REGISTRY_H
-#define INTERNAL_FUNCTIONS_REGISTRY_H
-
-extern int php_init_mime(INIT_FUNC_ARGS);
-
-/* environment functions */
-extern int php_init_environment(void);
-
-#endif
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- */
diff --git a/main/internal_functions_win32.c b/main/internal_functions_win32.c
deleted file mode 100644
index edcf82cccf..0000000000
--- a/main/internal_functions_win32.c
+++ /dev/null
@@ -1,174 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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. |
- +----------------------------------------------------------------------+
- | Authors: Andi Gutmans <andi@zend.com> |
- | Zeev Suraski <zeev@zend.com> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-/* {{{ includes
- */
-#include "php.h"
-#include "php_main.h"
-#include "zend_modules.h"
-#include "internal_functions_registry.h"
-#include "zend_compile.h"
-#include <stdarg.h>
-#include <stdlib.h>
-#include <stdio.h>
-
-#ifndef ZEND_ENGINE_2
-#error HEAD does not work with ZendEngine1 anymore
-#endif
-
-#include "ext/standard/dl.h"
-#include "ext/standard/file.h"
-#include "ext/standard/fsock.h"
-#include "ext/standard/head.h"
-#include "ext/standard/pack.h"
-#include "ext/standard/php_browscap.h"
-#include "ext/standard/php_crypt.h"
-#include "ext/standard/php_dir.h"
-#include "ext/standard/php_filestat.h"
-#include "ext/standard/php_mail.h"
-#include "ext/standard/php_ext_syslog.h"
-#include "ext/standard/php_standard.h"
-#include "ext/standard/php_lcg.h"
-#include "ext/standard/php_array.h"
-#include "ext/standard/php_assert.h"
-#if HAVE_BCMATH
-#include "ext/bcmath/php_bcmath.h"
-#endif
-#if HAVE_CALENDAR
-#include "ext/calendar/php_calendar.h"
-#endif
-#if HAVE_CTYPE
-#include "ext/ctype/php_ctype.h"
-#endif
-#if HAVE_FTP
-#include "ext/ftp/php_ftp.h"
-#endif
-#include "ext/standard/reg.h"
-#if HAVE_PCRE || HAVE_BUNDLED_PCRE
-#include "ext/pcre/php_pcre.h"
-#endif
-#if HAVE_UODBC
-#include "ext/odbc/php_odbc.h"
-#endif
-#if HAVE_PHP_SESSION
-#include "ext/session/php_session.h"
-#endif
-#if HAVE_MBSTRING
-#include "ext/mbstring/mbstring.h"
-#endif
-#if HAVE_TOKENIZER
-#include "ext/tokenizer/php_tokenizer.h"
-#endif
-#if HAVE_ZLIB
-#include "ext/zlib/php_zlib.h"
-#endif
-#if HAVE_LIBXML
-#include "ext/libxml/php_libxml.h"
-#if HAVE_DOM
-#include "ext/dom/php_dom.h"
-#endif
-#if HAVE_SIMPLEXML
-#include "ext/simplexml/php_simplexml.h"
-#endif
-#endif
-#if HAVE_XML
-#include "ext/xml/php_xml.h"
-#endif
-#if HAVE_XML && HAVE_WDDX
-#include "ext/wddx/php_wddx.h"
-#endif
-#ifdef HAVE_SQLITE
-#include "ext/sqlite/php_sqlite.h"
-#endif
-#include "ext/com_dotnet/php_com_dotnet.h"
-/* }}} */
-
-/* {{{ php_builtin_extensions[]
- */
-zend_module_entry *php_builtin_extensions[] = {
- phpext_standard_ptr
-#if HAVE_BCMATH
- ,phpext_bcmath_ptr
-#endif
-#if HAVE_CALENDAR
- ,phpext_calendar_ptr
-#endif
- ,phpext_com_dotnet_ptr
-#if HAVE_CTYPE
- ,phpext_ctype_ptr
-#endif
-#if HAVE_FTP
- ,phpext_ftp_ptr
-#endif
-#if HAVE_MBSTRING
- ,phpext_mbstring_ptr
-#endif
-#if HAVE_UODBC
- ,phpext_odbc_ptr
-#endif
-#if HAVE_PCRE || HAVE_BUNDLED_PCRE
- ,phpext_pcre_ptr
-#endif
-#if HAVE_PHP_SESSION
- ,phpext_session_ptr
-#endif
-#if HAVE_TOKENIZER
- ,phpext_tokenizer_ptr
-#endif
-#if HAVE_ZLIB
- ,phpext_zlib_ptr
-#endif
-#if HAVE_LIBXML
- ,phpext_libxml_ptr
-#if HAVE_DOM
- ,phpext_dom_ptr
-#endif
-#if HAVE_SIMPLEXML
- ,phpext_simplexml_ptr
-#endif
-#endif
-#if HAVE_XML
- ,phpext_xml_ptr
-#endif
-#if HAVE_XML && HAVE_WDDX
- ,phpext_wddx_ptr
-#endif
-#if HAVE_SQLITE
- ,phpext_sqlite_ptr
-#endif
-};
-/* }}} */
-
-#define EXTCOUNT (sizeof(php_builtin_extensions)/sizeof(zend_module_entry *))
-
-int php_startup_internal_extensions(void)
-{
- return php_startup_extensions(php_builtin_extensions, EXTCOUNT);
-}
-
-/*
- * 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/main/logos.h b/main/logos.h
deleted file mode 100644
index a67ee2d762..0000000000
--- a/main/logos.h
+++ /dev/null
@@ -1,1314 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#define CONTEXT_TYPE_IMAGE_GIF "Content-Type: image/gif"
-
-unsigned char zend_logo[] = {
- 71, 73, 70, 56, 57, 97, 113, 0, 72, 0,
- 213, 0, 0, 13, 13, 14, 1, 3, 6, 2,
- 5, 9, 46, 68, 94, 21, 29, 39, 5, 15,
- 26, 4, 10, 17, 29, 43, 58, 0, 1, 2,
- 9, 25, 42, 38, 105, 171, 24, 67, 109, 13,
- 36, 59, 10, 27, 45, 9, 25, 41, 35, 96,
- 157, 32, 87, 142, 29, 79, 130, 26, 70, 114,
- 20, 54, 87, 29, 77, 124, 10, 26, 42, 34,
- 88, 141, 10, 24, 38, 11, 26, 41, 1, 2,
- 3, 55, 80, 105, 45, 63, 81, 49, 53, 57,
- 5, 15, 24, 9, 26, 42, 30, 85, 138, 33,
- 92, 149, 26, 73, 117, 10, 28, 45, 32, 89,
- 142, 30, 84, 134, 26, 72, 115, 15, 42, 67,
- 23, 62, 99, 12, 32, 51, 7, 21, 33, 9,
- 26, 41, 8, 23, 35, 7, 25, 37, 51, 58,
- 63, 2, 4, 5, 25, 26, 26, 49, 50, 50,
- 255, 102, 0, 255, 255, 255, 204, 204, 204, 199,
- 199, 199, 191, 191, 191, 171, 171, 171, 146, 146,
- 146, 115, 115, 115, 85, 85, 85, 60, 60, 60,
- 55, 55, 55, 38, 38, 38, 7, 7, 7, 3,
- 3, 3, 0, 0, 0, 44, 0, 0, 0, 0,
- 113, 0, 72, 0, 0, 6, 255, 192, 153, 112,
- 72, 44, 26, 143, 200, 164, 114, 121, 252, 49,
- 159, 208, 168, 148, 248, 171, 58, 167, 210, 171,
- 208, 170, 197, 122, 191, 70, 109, 23, 140, 236,
- 138, 201, 232, 239, 121, 102, 221, 186, 217, 219,
- 171, 83, 46, 110, 15, 207, 235, 180, 190, 124,
- 135, 187, 229, 127, 127, 128, 112, 121, 108, 118,
- 132, 123, 137, 77, 118, 120, 136, 115, 109, 117,
- 85, 126, 147, 147, 128, 99, 138, 137, 99, 107,
- 146, 146, 148, 133, 159, 125, 136, 152, 163, 151,
- 135, 121, 144, 84, 157, 92, 169, 157, 111, 163,
- 175, 176, 83, 151, 177, 180, 181, 161, 182, 184,
- 185, 186, 187, 188, 189, 67, 54, 56, 58, 56,
- 53, 190, 197, 88, 55, 57, 60, 63, 2, 43,
- 2, 56, 198, 208, 74, 192, 58, 0, 63, 5,
- 12, 11, 35, 35, 12, 47, 209, 222, 67, 53,
- 201, 203, 34, 19, 20, 218, 231, 37, 63, 54,
- 223, 222, 60, 2, 216, 231, 241, 231, 206, 76,
- 193, 55, 236, 176, 63, 39, 242, 252, 35, 40,
- 58, 75, 114, 8, 40, 240, 227, 25, 62, 76,
- 60, 24, 244, 147, 55, 161, 202, 11, 24, 57,
- 134, 17, 201, 241, 99, 130, 191, 130, 7, 21,
- 225, 48, 176, 48, 30, 137, 5, 11, 38, 48,
- 88, 81, 5, 198, 51, 138, 22, 181, 53, 52,
- 152, 49, 141, 141, 31, 230, 58, 46, 60, 129,
- 194, 74, 202, 115, 43, 91, 234, 1, 112, 83,
- 102, 63, 255, 18, 38, 122, 226, 252, 145, 67,
- 39, 153, 26, 47, 68, 248, 92, 186, 176, 97,
- 81, 163, 88, 108, 188, 48, 80, 130, 169, 85,
- 134, 68, 161, 74, 177, 1, 160, 0, 137, 171,
- 96, 135, 62, 213, 186, 132, 171, 215, 176, 104,
- 71, 52, 188, 71, 54, 9, 210, 179, 105, 195,
- 166, 99, 219, 214, 198, 58, 34, 48, 12, 124,
- 213, 38, 163, 175, 223, 191, 50, 22, 132, 216,
- 139, 182, 132, 0, 30, 196, 250, 218, 37, 70,
- 198, 198, 141, 199, 144, 31, 223, 253, 114, 163,
- 10, 0, 97, 192, 126, 100, 59, 7, 24, 176,
- 10, 20, 229, 210, 146, 48, 128, 88, 72, 223,
- 28, 57, 38, 111, 197, 17, 163, 181, 235, 215,
- 58, 116, 68, 100, 60, 5, 134, 136, 18, 19,
- 80, 24, 168, 162, 48, 94, 95, 21, 6, 82,
- 168, 80, 209, 215, 128, 1, 20, 39, 8, 95,
- 37, 81, 160, 180, 105, 25, 177, 233, 62, 1,
- 246, 186, 186, 245, 24, 209, 177, 84, 140, 71,
- 97, 130, 114, 109, 33, 76, 48, 152, 176, 192,
- 111, 135, 20, 222, 211, 54, 167, 61, 163, 111,
- 246, 39, 55, 174, 203, 175, 254, 30, 74, 229,
- 152, 62, 73, 132, 24, 60, 162, 47, 131, 14,
- 12, 132, 224, 155, 95, 130, 145, 208, 89, 129,
- 40, 116, 211, 25, 12, 58, 72, 135, 68, 124,
- 214, 197, 38, 161, 14, 243, 73, 200, 222, 18,
- 27, 161, 213, 215, 4, 159, 37, 199, 255, 25,
- 96, 12, 116, 230, 223, 9, 11, 252, 32, 226,
- 11, 13, 74, 35, 223, 132, 19, 174, 24, 27,
- 75, 76, 192, 128, 66, 88, 126, 161, 160, 66,
- 122, 124, 201, 112, 2, 3, 195, 125, 54, 65,
- 95, 29, 4, 87, 227, 9, 126, 233, 192, 3,
- 12, 125, 161, 232, 160, 93, 207, 184, 200, 98,
- 139, 17, 74, 24, 197, 118, 96, 249, 7, 160,
- 128, 31, 242, 72, 30, 72, 33, 244, 149, 2,
- 122, 229, 201, 0, 224, 105, 60, 52, 216, 23,
- 131, 14, 226, 96, 194, 1, 78, 74, 152, 195,
- 13, 196, 208, 192, 90, 148, 177, 217, 7, 83,
- 149, 50, 112, 136, 220, 94, 34, 22, 216, 159,
- 12, 195, 101, 227, 37, 113, 50, 192, 0, 3,
- 156, 238, 165, 72, 196, 11, 21, 178, 184, 228,
- 117, 19, 66, 145, 225, 85, 53, 222, 72, 152,
- 136, 42, 152, 32, 224, 111, 42, 8, 10, 40,
- 161, 101, 222, 96, 67, 95, 61, 40, 58, 3,
- 13, 55, 24, 112, 221, 101, 19, 226, 64, 131,
- 17, 54, 64, 42, 229, 19, 50, 226, 249, 95,
- 128, 127, 238, 23, 166, 113, 194, 105, 250, 103,
- 160, 191, 18, 90, 232, 13, 59, 0, 249, 130,
- 168, 56, 160, 198, 195, 10, 214, 161, 144, 1,
- 131, 245, 21, 1, 33, 125, 177, 141, 181, 4,
- 149, 76, 137, 232, 23, 3, 38, 132, 9, 216,
- 9, 93, 126, 234, 105, 160, 34, 94, 208, 129,
- 14, 7, 152, 112, 255, 2, 4, 40, 84, 80,
- 157, 8, 30, 176, 154, 195, 133, 68, 200, 250,
- 34, 124, 119, 102, 171, 109, 113, 157, 142, 16,
- 238, 111, 160, 113, 58, 110, 167, 38, 252, 213,
- 192, 193, 12, 72, 32, 193, 3, 15, 128, 192,
- 128, 7, 175, 121, 32, 66, 7, 101, 230, 240,
- 42, 18, 53, 216, 171, 131, 106, 73, 224, 32,
- 0, 88, 221, 217, 216, 227, 200, 190, 234, 39,
- 210, 112, 12, 36, 23, 158, 175, 254, 154, 160,
- 105, 9, 5, 236, 88, 129, 7, 41, 83, 240,
- 65, 195, 32, 56, 236, 128, 107, 14, 36, 208,
- 64, 10, 24, 41, 161, 177, 181, 74, 84, 182,
- 194, 4, 85, 45, 181, 239, 134, 11, 236, 165,
- 31, 151, 95, 233, 199, 223, 8, 82, 27, 40,
- 3, 9, 39, 144, 56, 24, 4, 92, 119, 61,
- 129, 3, 96, 135, 221, 128, 8, 12, 0, 64,
- 239, 47, 26, 59, 88, 52, 53, 227, 132, 182,
- 208, 210, 128, 178, 76, 163, 12, 46, 135, 208,
- 245, 221, 92, 3, 21, 54, 216, 9, 152, 208,
- 48, 64, 72, 12, 237, 197, 52, 0, 152, 208,
- 209, 111, 193, 141, 204, 239, 102, 104, 45, 96,
- 128, 9, 20, 224, 45, 249, 215, 97, 51, 240,
- 1, 8, 10, 152, 80, 20, 14, 56, 208, 213,
- 38, 199, 181, 245, 214, 207, 111, 96, 130, 4,
- 146, 72, 114, 135, 69, 194, 10, 38, 64, 0,
- 130, 228, 120, 71, 240, 181, 8, 145, 67, 240,
- 255, 128, 2, 44, 164, 0, 26, 2, 66, 180,
- 9, 163, 23, 56, 20, 112, 184, 184, 242, 232,
- 119, 224, 212, 127, 18, 56, 152, 95, 14, 252,
- 8, 88, 129, 120, 255, 37, 216, 205, 17, 68,
- 160, 192, 3, 24, 212, 64, 131, 198, 58, 92,
- 12, 70, 101, 223, 125, 8, 172, 60, 218, 166,
- 252, 149, 136, 41, 251, 21, 64, 249, 201, 117,
- 221, 89, 202, 151, 131, 112, 251, 9, 211, 194,
- 54, 161, 218, 88, 212, 128, 237, 128, 207, 35,
- 15, 164, 144, 125, 65, 78, 141, 206, 3, 164,
- 0, 245, 69, 0, 34, 248, 95, 10, 134, 68,
- 2, 8, 244, 101, 71, 97, 3, 77, 237, 70,
- 240, 0, 18, 248, 110, 15, 58, 80, 10, 63,
- 48, 37, 55, 47, 129, 169, 128, 86, 10, 152,
- 12, 132, 19, 166, 2, 36, 112, 132, 31, 20,
- 83, 128, 28, 40, 3, 6, 52, 207, 116, 91,
- 227, 218, 3, 218, 68, 52, 50, 224, 32, 95,
- 228, 147, 1, 175, 134, 211, 65, 226, 13, 138,
- 116, 222, 249, 77, 1, 10, 38, 3, 7, 52,
- 160, 47, 96, 91, 0, 11, 83, 224, 128, 62,
- 197, 176, 107, 32, 224, 222, 217, 192, 240, 130,
- 25, 109, 16, 133, 91, 242, 159, 15, 63, 37,
- 176, 63, 25, 64, 0, 68, 108, 128, 7, 144,
- 232, 0, 37, 146, 81, 68, 14, 208, 20, 20,
- 163, 72, 167, 216, 128, 14, 85, 201, 66, 205,
- 155, 110, 224, 61, 37, 220, 255, 16, 63, 226,
- 235, 215, 135, 194, 5, 44, 78, 249, 5, 61,
- 86, 251, 65, 5, 36, 208, 23, 15, 52, 177,
- 136, 101, 100, 97, 18, 195, 197, 171, 52, 218,
- 205, 117, 51, 108, 163, 169, 132, 16, 171, 54,
- 118, 174, 142, 69, 48, 75, 248, 224, 22, 162,
- 45, 146, 171, 51, 8, 160, 221, 25, 17, 105,
- 70, 82, 90, 237, 91, 131, 137, 164, 37, 137,
- 80, 73, 238, 221, 11, 86, 93, 9, 95, 242,
- 180, 101, 128, 46, 10, 236, 148, 126, 177, 6,
- 5, 70, 153, 68, 69, 38, 18, 2, 255, 42,
- 34, 104, 34, 160, 74, 106, 9, 99, 8, 245,
- 51, 230, 147, 126, 55, 131, 26, 196, 178, 35,
- 225, 25, 153, 52, 131, 82, 55, 240, 84, 19,
- 107, 60, 234, 11, 0, 12, 16, 1, 16, 148,
- 160, 110, 43, 123, 100, 56, 243, 22, 2, 145,
- 128, 45, 101, 16, 152, 15, 118, 44, 54, 131,
- 100, 218, 239, 73, 111, 58, 66, 13, 120, 0,
- 151, 133, 60, 205, 116, 248, 20, 12, 5, 246,
- 227, 52, 126, 106, 195, 120, 50, 56, 146, 1,
- 46, 247, 1, 126, 86, 141, 156, 79, 132, 192,
- 61, 67, 240, 1, 117, 182, 6, 85, 141, 90,
- 38, 232, 134, 176, 17, 89, 198, 165, 35, 134,
- 17, 70, 14, 92, 32, 63, 134, 141, 224, 117,
- 176, 11, 105, 215, 44, 232, 208, 136, 178, 72,
- 34, 118, 212, 203, 69, 173, 226, 148, 26, 216,
- 133, 7, 255, 39, 80, 192, 4, 102, 42, 191,
- 17, 136, 52, 164, 37, 109, 211, 253, 48, 137,
- 49, 122, 90, 116, 165, 255, 100, 64, 86, 40,
- 74, 128, 22, 0, 224, 6, 48, 152, 128, 2,
- 64, 122, 211, 187, 229, 84, 153, 142, 226, 169,
- 18, 230, 41, 128, 164, 1, 149, 31, 37, 98,
- 166, 93, 134, 192, 129, 133, 49, 181, 169, 36,
- 125, 234, 147, 36, 68, 71, 47, 80, 213, 170,
- 252, 32, 79, 92, 232, 177, 4, 14, 80, 32,
- 103, 77, 229, 218, 83, 177, 51, 214, 6, 73,
- 53, 10, 103, 237, 71, 67, 126, 96, 0, 164,
- 133, 69, 4, 128, 147, 134, 15, 72, 240, 85,
- 174, 229, 236, 176, 175, 203, 105, 93, 223, 116,
- 215, 41, 228, 53, 30, 43, 177, 65, 14, 94,
- 80, 133, 21, 160, 64, 93, 75, 153, 0, 0,
- 158, 224, 130, 19, 60, 224, 110, 57, 99, 216,
- 237, 74, 0, 130, 8, 120, 192, 3, 99, 243,
- 192, 97, 234, 58, 161, 120, 42, 226, 177, 106,
- 9, 26, 37, 57, 167, 131, 23, 8, 207, 39,
- 20, 248, 1, 254, 136, 80, 3, 20, 44, 21,
- 180, 32, 32, 79, 4, 80, 16, 128, 11, 64,
- 64, 4, 34, 80, 65, 7, 94, 80, 38, 214,
- 202, 102, 183, 105, 168, 1, 12, 170, 26, 219,
- 26, 34, 19, 135, 29, 41, 128, 117, 137, 128,
- 3, 9, 252, 214, 176, 15, 24, 64, 15, 56,
- 247, 12, 24, 168, 75, 4, 6, 0, 135, 192,
- 14, 156, 139, 82, 90, 8, 164, 38, 219, 29,
- 2, 79, 150, 194, 0, 24, 44, 97, 7, 22,
- 184, 29, 195, 58, 106, 223, 58, 230, 160, 156,
- 68, 89, 108, 89, 115, 145, 3, 147, 48, 33,
- 131, 50, 89, 0, 3, 4, 16, 95, 33, 220,
- 224, 5, 26, 64, 193, 91, 111, 167, 57, 35,
- 132, 35, 53, 148, 116, 12, 100, 166, 248, 13,
- 143, 241, 163, 59, 34, 16, 192, 15, 120, 208,
- 222, 36, 208, 192, 49, 63, 216, 192, 9, 36,
- 192, 128, 137, 114, 152, 44, 47, 217, 140, 130,
- 9, 114, 25, 28, 76, 148, 9, 162, 2, 128,
- 141, 219, 50, 5, 122, 134, 120, 196, 174, 141,
- 46, 143, 167, 96, 131, 23, 221, 120, 200, 72,
- 214, 74, 16, 0, 0, 59 };
-
-unsigned char php_logo[] = {
- 71, 73, 70, 56, 57, 97, 120, 0, 67, 0,
- 247, 255, 0, 0, 0, 0, 73, 72, 73, 233,
- 231, 234, 228, 224, 232, 65, 64, 67, 228, 227,
- 230, 80, 78, 86, 61, 60, 64, 215, 213, 223,
- 201, 199, 213, 99, 97, 116, 84, 83, 92, 192,
- 190, 208, 105, 103, 127, 102, 100, 123, 183, 181,
- 203, 216, 215, 225, 143, 141, 174, 89, 88, 104,
- 160, 158, 186, 95, 94, 109, 106, 105, 133, 98,
- 97, 121, 165, 164, 189, 175, 174, 199, 151, 150,
- 196, 145, 144, 178, 161, 160, 194, 152, 151, 183,
- 7, 7, 10, 28, 28, 38, 14, 14, 19, 138,
- 138, 185, 129, 129, 173, 102, 102, 137, 151, 151,
- 202, 146, 146, 195, 145, 145, 194, 130, 130, 174,
- 116, 116, 155, 97, 97, 130, 152, 152, 202, 151,
- 151, 201, 149, 149, 198, 148, 148, 197, 147, 147,
- 196, 145, 145, 193, 142, 142, 189, 140, 140, 186,
- 137, 137, 182, 136, 136, 181, 133, 133, 177, 128,
- 128, 170, 113, 113, 150, 106, 106, 141, 101, 101,
- 134, 90, 90, 120, 3, 3, 4, 127, 127, 168,
- 99, 99, 131, 40, 40, 53, 146, 146, 192, 133,
- 133, 174, 120, 120, 157, 96, 96, 126, 48, 48,
- 63, 131, 131, 171, 101, 101, 130, 100, 100, 127,
- 135, 135, 170, 155, 155, 194, 138, 138, 172, 101,
- 101, 126, 113, 113, 140, 100, 100, 124, 170, 170,
- 199, 222, 222, 239, 217, 217, 234, 206, 206, 220,
- 58, 58, 61, 211, 211, 220, 231, 231, 238, 220,
- 220, 227, 215, 215, 220, 196, 196, 199, 209, 209,
- 211, 183, 183, 185, 253, 253, 254, 102, 103, 143,
- 138, 139, 188, 98, 99, 134, 124, 125, 168, 108,
- 109, 147, 133, 134, 180, 103, 104, 139, 99, 100,
- 134, 122, 123, 163, 144, 145, 188, 149, 150, 193,
- 127, 128, 165, 131, 132, 169, 157, 158, 199, 111,
- 115, 176, 113, 117, 178, 93, 96, 144, 116, 119,
- 178, 127, 131, 192, 118, 121, 178, 107, 110, 162,
- 120, 123, 180, 118, 121, 176, 115, 118, 171, 126,
- 129, 186, 120, 123, 177, 117, 120, 173, 106, 109,
- 155, 75, 77, 109, 113, 115, 163, 127, 130, 182,
- 110, 112, 157, 99, 101, 140, 98, 100, 137, 148,
- 151, 203, 119, 121, 163, 145, 148, 198, 139, 142,
- 189, 148, 151, 199, 55, 56, 74, 152, 155, 203,
- 153, 156, 203, 150, 153, 200, 154, 157, 204, 102,
- 104, 135, 76, 77, 100, 71, 72, 90, 194, 196,
- 227, 211, 212, 236, 207, 208, 231, 217, 218, 239,
- 223, 224, 242, 215, 216, 234, 212, 213, 229, 89,
- 93, 142, 112, 116, 176, 114, 118, 178, 113, 117,
- 177, 114, 118, 177, 116, 120, 179, 115, 120, 178,
- 115, 119, 178, 109, 113, 169, 117, 121, 180, 119,
- 123, 182, 118, 122, 180, 117, 122, 179, 124, 128,
- 188, 123, 127, 187, 122, 126, 185, 120, 124, 182,
- 119, 124, 181, 118, 122, 179, 102, 106, 155, 126,
- 130, 190, 124, 128, 187, 123, 127, 186, 121, 125,
- 183, 120, 124, 181, 119, 123, 180, 81, 84, 122,
- 118, 122, 177, 117, 121, 176, 125, 129, 185, 124,
- 128, 184, 123, 127, 183, 120, 124, 178, 123, 127,
- 181, 127, 131, 186, 96, 99, 141, 127, 131, 185,
- 102, 105, 149, 33, 34, 48, 132, 136, 190, 130,
- 134, 188, 63, 65, 91, 96, 99, 137, 136, 140,
- 192, 141, 145, 196, 146, 150, 200, 149, 153, 202,
- 146, 149, 193, 160, 163, 207, 167, 170, 212, 174,
- 177, 216, 186, 189, 224, 181, 184, 218, 200, 202,
- 231, 192, 194, 222, 203, 205, 233, 199, 201, 227,
- 203, 205, 228, 220, 221, 236, 231, 232, 247, 219,
- 220, 234, 220, 221, 234, 223, 224, 235, 97, 102,
- 150, 222, 223, 233, 226, 227, 237, 20, 21, 28,
- 216, 217, 224, 235, 236, 239, 217, 218, 219, 192,
- 192, 192, 4, 4, 2, 2, 2, 1, 3, 3,
- 2, 7, 7, 6, 21, 21, 19, 13, 13, 12,
- 28, 28, 26, 34, 34, 32, 16, 16, 15, 58,
- 58, 55, 93, 93, 89, 66, 66, 63, 23, 23,
- 22, 85, 85, 82, 88, 88, 85, 60, 60, 58,
- 58, 58, 56, 109, 109, 106, 104, 104, 101, 99,
- 99, 96, 80, 80, 78, 49, 49, 48, 46, 46,
- 45, 52, 52, 51, 152, 152, 150, 144, 144, 142,
- 169, 169, 168, 160, 160, 159, 122, 121, 119, 115,
- 114, 112, 137, 136, 134, 129, 128, 126, 55, 54,
- 53, 31, 30, 30, 62, 61, 61, 176, 176, 176,
- 39, 39, 39, 10, 10, 10, 8, 8, 8, 5,
- 5, 5, 1, 1, 1, 255, 255, 255, 0, 0,
- 0, 33, 249, 4, 1, 0, 0, 212, 0, 44,
- 0, 0, 0, 0, 120, 0, 67, 0, 64, 8,
- 255, 0, 169, 9, 28, 72, 176, 160, 193, 131,
- 8, 19, 42, 92, 200, 176, 161, 195, 135, 16,
- 9, 142, 88, 209, 194, 8, 134, 4, 80, 162,
- 33, 72, 240, 192, 8, 43, 72, 145, 42, 93,
- 202, 116, 170, 164, 201, 147, 39, 51, 93, 90,
- 201, 114, 36, 202, 151, 48, 79, 98, 50, 229,
- 201, 211, 169, 58, 92, 42, 40, 160, 192, 211,
- 193, 15, 24, 44, 84, 164, 136, 152, 48, 5,
- 11, 24, 71, 52, 112, 128, 97, 234, 82, 204,
- 83, 160, 162, 74, 157, 74, 245, 41, 168, 82,
- 78, 212, 1, 216, 186, 181, 27, 20, 88, 105,
- 166, 146, 124, 10, 149, 170, 89, 169, 100, 79,
- 117, 242, 132, 67, 29, 183, 117, 92, 90, 140,
- 64, 168, 226, 197, 157, 59, 117, 210, 158, 188,
- 100, 43, 10, 55, 174, 91, 243, 77, 153, 2,
- 165, 112, 2, 43, 237, 196, 237, 3, 220, 181,
- 10, 162, 119, 140, 1, 152, 171, 66, 165, 50,
- 21, 43, 240, 208, 233, 139, 156, 46, 81, 173,
- 4, 155, 1, 171, 155, 70, 216, 176, 21, 119,
- 1, 172, 69, 222, 54, 37, 215, 164, 152, 152,
- 68, 253, 1, 240, 97, 207, 10, 106, 38, 208,
- 56, 98, 83, 74, 175, 201, 71, 136, 230, 69,
- 182, 242, 43, 210, 75, 51, 193, 220, 69, 86,
- 39, 45, 31, 227, 122, 199, 60, 129, 58, 25,
- 9, 88, 187, 200, 237, 134, 17, 251, 198, 248,
- 154, 149, 93, 105, 142, 27, 255, 19, 206, 56,
- 0, 179, 82, 211, 201, 114, 66, 147, 163, 131,
- 137, 21, 49, 106, 228, 137, 197, 198, 38, 217,
- 74, 130, 160, 132, 142, 204, 31, 64, 191, 124,
- 243, 84, 81, 76, 45, 102, 152, 145, 136, 114,
- 140, 225, 3, 72, 37, 123, 193, 2, 69, 54,
- 140, 173, 195, 204, 47, 248, 244, 103, 225, 53,
- 234, 184, 35, 197, 48, 176, 24, 231, 219, 41,
- 106, 160, 178, 21, 29, 51, 176, 80, 144, 10,
- 46, 152, 80, 131, 22, 121, 224, 130, 197, 27,
- 165, 152, 2, 74, 38, 140, 140, 195, 152, 54,
- 211, 240, 193, 224, 135, 60, 146, 5, 74, 43,
- 77, 120, 195, 88, 54, 209, 212, 226, 84, 143,
- 40, 121, 162, 6, 27, 180, 108, 197, 131, 23,
- 52, 188, 112, 27, 81, 212, 164, 176, 130, 11,
- 49, 208, 112, 130, 13, 59, 160, 240, 133, 22,
- 90, 224, 49, 203, 29, 114, 96, 82, 147, 41,
- 72, 166, 201, 163, 39, 157, 108, 210, 73, 29,
- 56, 24, 194, 14, 55, 219, 108, 195, 195, 45,
- 64, 212, 176, 133, 12, 82, 206, 69, 229, 159,
- 12, 165, 160, 130, 10, 43, 176, 64, 130, 11,
- 47, 192, 0, 66, 12, 50, 204, 224, 168, 9,
- 144, 70, 42, 233, 164, 144, 58, 42, 131, 12,
- 32, 192, 240, 130, 11, 36, 176, 176, 194, 10,
- 42, 248, 9, 232, 168, 163, 166, 48, 2, 161,
- 44, 148, 177, 196, 3, 12, 64, 1, 1, 2,
- 176, 66, 255, 145, 64, 2, 12, 60, 128, 193,
- 18, 27, 24, 193, 65, 24, 97, 192, 192, 104,
- 23, 93, 204, 96, 66, 8, 91, 20, 187, 71,
- 29, 117, 204, 17, 74, 51, 186, 57, 226, 72,
- 44, 177, 228, 33, 2, 23, 39, 108, 49, 195,
- 11, 65, 141, 48, 20, 169, 68, 9, 74, 66,
- 24, 19, 96, 240, 192, 18, 98, 180, 2, 201,
- 145, 106, 162, 148, 70, 46, 2, 108, 195, 88,
- 58, 140, 200, 152, 174, 111, 152, 116, 114, 10,
- 23, 18, 4, 160, 111, 5, 82, 110, 219, 144,
- 81, 50, 128, 49, 6, 13, 109, 140, 245, 84,
- 26, 124, 88, 81, 141, 133, 253, 113, 227, 206,
- 51, 197, 101, 98, 198, 33, 241, 48, 220, 223,
- 58, 239, 32, 147, 75, 37, 146, 248, 98, 133,
- 197, 252, 229, 3, 207, 51, 190, 68, 98, 240,
- 73, 157, 128, 242, 71, 53, 252, 0, 33, 215,
- 64, 46, 212, 129, 70, 40, 233, 249, 150, 73,
- 38, 199, 128, 195, 216, 62, 9, 232, 18, 30,
- 74, 102, 12, 115, 29, 99, 227, 84, 177, 24,
- 96, 241, 32, 226, 161, 73, 102, 32, 130, 32,
- 96, 237, 252, 146, 72, 61, 140, 217, 35, 77,
- 45, 175, 1, 109, 140, 57, 145, 153, 51, 140,
- 25, 100, 153, 82, 74, 147, 127, 188, 32, 3,
- 22, 104, 52, 195, 227, 35, 192, 60, 205, 85,
- 58, 86, 224, 35, 55, 62, 240, 208, 35, 14,
- 132, 145, 137, 131, 12, 35, 1, 84, 255, 125,
- 245, 207, 37, 85, 226, 199, 20, 218, 188, 75,
- 140, 48, 228, 1, 38, 15, 21, 114, 199, 221,
- 78, 60, 233, 20, 222, 117, 50, 112, 100, 29,
- 118, 39, 65, 0, 192, 195, 12, 2, 173, 0,
- 3, 24, 55, 180, 88, 31, 76, 151, 56, 136,
- 55, 87, 219, 64, 49, 202, 36, 55, 183, 174,
- 87, 235, 176, 147, 5, 251, 205, 147, 216, 146,
- 64, 55, 140, 129, 243, 76, 43, 172, 199, 158,
- 174, 41, 33, 246, 163, 249, 15, 49, 176, 224,
- 239, 65, 35, 176, 240, 130, 9, 39, 220, 128,
- 66, 139, 120, 204, 161, 10, 38, 152, 160, 53,
- 239, 245, 37, 157, 149, 102, 41, 155, 168, 66,
- 135, 7, 91, 65, 99, 72, 13, 58, 128, 240,
- 50, 183, 7, 9, 186, 2, 9, 102, 135, 0,
- 198, 150, 206, 3, 129, 194, 16, 244, 15, 65,
- 4, 253, 132, 120, 97, 3, 23, 92, 220, 133,
- 236, 27, 114, 144, 131, 27, 82, 65, 64, 2,
- 186, 193, 13, 114, 120, 3, 178, 238, 192, 5,
- 27, 16, 130, 8, 22, 160, 128, 4, 22, 96,
- 128, 116, 232, 235, 130, 134, 144, 0, 14, 108,
- 80, 131, 61, 208, 160, 11, 48, 40, 1, 168,
- 142, 135, 190, 18, 166, 239, 84, 159, 42, 148,
- 24, 140, 192, 194, 13, 108, 96, 2, 48, 156,
- 0, 7, 102, 168, 129, 8, 28, 161, 8, 100,
- 208, 193, 22, 192, 176, 135, 30, 110, 33, 4,
- 93, 200, 130, 11, 255, 90, 224, 169, 65, 145,
- 208, 132, 72, 28, 136, 169, 40, 98, 145, 4,
- 72, 97, 0, 2, 16, 192, 0, 164, 64, 140,
- 37, 244, 66, 22, 166, 200, 68, 26, 206, 0,
- 137, 73, 204, 232, 102, 243, 50, 133, 216, 74,
- 17, 163, 76, 172, 65, 129, 92, 240, 194, 13,
- 144, 160, 4, 37, 56, 160, 1, 53, 240, 129,
- 8, 133, 146, 196, 133, 36, 175, 7, 27, 96,
- 21, 173, 48, 208, 135, 83, 72, 34, 13, 39,
- 67, 146, 36, 132, 33, 141, 66, 26, 82, 26,
- 141, 144, 23, 246, 76, 98, 166, 82, 120, 226,
- 13, 54, 160, 192, 2, 40, 168, 0, 33, 4,
- 165, 132, 42, 32, 129, 82, 38, 112, 1, 14,
- 188, 130, 117, 139, 60, 78, 48, 134, 6, 152,
- 119, 4, 3, 108, 161, 212, 139, 41, 236, 133,
- 2, 2, 212, 131, 29, 18, 120, 1, 29, 27,
- 50, 130, 22, 116, 129, 12, 71, 56, 194, 43,
- 2, 153, 146, 52, 8, 227, 25, 203, 8, 166,
- 48, 135, 25, 76, 100, 52, 33, 17, 198, 248,
- 133, 45, 206, 64, 9, 147, 84, 98, 16, 86,
- 16, 30, 96, 204, 113, 5, 101, 12, 115, 111,
- 137, 56, 132, 47, 86, 241, 136, 35, 101, 2,
- 20, 196, 96, 6, 49, 199, 185, 12, 99, 34,
- 243, 23, 29, 106, 38, 76, 56, 33, 135, 63,
- 100, 35, 27, 116, 32, 129, 10, 14, 130, 162,
- 61, 156, 96, 15, 113, 192, 132, 111, 30, 49,
- 255, 12, 174, 129, 172, 63, 249, 200, 81, 39,
- 30, 244, 207, 254, 224, 195, 23, 102, 32, 134,
- 141, 10, 26, 153, 117, 20, 192, 15, 146, 136,
- 9, 41, 222, 0, 13, 0, 120, 64, 6, 243,
- 164, 134, 10, 96, 16, 138, 89, 176, 65, 159,
- 31, 98, 27, 60, 176, 83, 12, 51, 180, 36,
- 13, 102, 192, 196, 34, 184, 195, 152, 115, 248,
- 99, 161, 92, 9, 7, 4, 224, 240, 199, 52,
- 216, 212, 12, 20, 138, 204, 55, 140, 113, 8,
- 82, 114, 5, 30, 192, 48, 41, 75, 80, 10,
- 139, 40, 220, 35, 50, 241, 248, 26, 89, 68,
- 113, 11, 218, 188, 71, 6, 186, 25, 221, 135,
- 42, 1, 8, 42, 240, 131, 49, 226, 48, 6,
- 36, 94, 2, 10, 76, 52, 65, 28, 145, 169,
- 27, 99, 172, 97, 5, 95, 68, 212, 36, 151,
- 88, 133, 50, 254, 2, 152, 117, 52, 194, 23,
- 35, 101, 140, 57, 142, 241, 136, 151, 164, 245,
- 25, 84, 99, 12, 80, 151, 22, 19, 81, 208,
- 129, 54, 93, 48, 65, 44, 118, 211, 27, 223,
- 92, 2, 14, 82, 176, 71, 132, 158, 193, 138,
- 154, 74, 194, 12, 144, 216, 69, 50, 228, 17,
- 153, 110, 20, 224, 99, 140, 105, 135, 48, 234,
- 106, 146, 174, 50, 34, 29, 59, 163, 130, 47,
- 10, 112, 186, 173, 4, 128, 17, 151, 168, 132,
- 77, 35, 97, 6, 170, 74, 3, 29, 171, 145,
- 130, 46, 118, 68, 150, 77, 255, 136, 72, 27,
- 38, 120, 1, 24, 160, 37, 85, 31, 97, 226,
- 179, 12, 141, 76, 0, 164, 225, 139, 92, 36,
- 224, 104, 92, 57, 71, 34, 182, 122, 146, 137,
- 209, 35, 50, 248, 0, 6, 49, 156, 19, 92,
- 192, 140, 131, 184, 168, 212, 139, 40, 68, 132,
- 13, 47, 192, 128, 26, 240, 57, 1, 46, 112,
- 49, 139, 83, 128, 20, 38, 19, 171, 24, 99,
- 222, 145, 140, 99, 36, 226, 189, 239, 61, 198,
- 33, 132, 193, 139, 85, 68, 130, 185, 167, 168,
- 68, 25, 224, 11, 223, 70, 0, 195, 37, 157,
- 53, 133, 48, 248, 11, 95, 93, 20, 131, 178,
- 128, 225, 7, 21, 22, 225, 94, 254, 202, 87,
- 24, 187, 96, 69, 72, 122, 228, 9, 81, 100,
- 142, 31, 56, 152, 65, 11, 252, 53, 2, 18,
- 204, 224, 4, 44, 194, 5, 27, 196, 120, 146,
- 71, 8, 163, 66, 140, 137, 199, 33, 178, 155,
- 74, 189, 152, 248, 185, 140, 153, 199, 138, 67,
- 89, 138, 237, 94, 21, 26, 55, 48, 129, 11,
- 50, 74, 151, 18, 116, 225, 7, 34, 8, 241,
- 44, 222, 128, 137, 112, 18, 243, 25, 194, 0,
- 100, 139, 125, 115, 21, 99, 136, 115, 152, 81,
- 0, 6, 109, 145, 84, 99, 75, 100, 14, 0,
- 250, 48, 196, 9, 174, 197, 99, 136, 36, 239,
- 5, 51, 248, 129, 13, 80, 192, 162, 60, 68,
- 175, 76, 158, 64, 211, 146, 215, 140, 18, 76,
- 112, 175, 255, 20, 108, 40, 68, 62, 186, 161,
- 13, 125, 240, 0, 8, 39, 8, 1, 12, 90,
- 208, 101, 19, 78, 132, 4, 48, 152, 193, 22,
- 182, 212, 165, 29, 124, 97, 7, 134, 158, 214,
- 29, 222, 144, 138, 83, 212, 164, 38, 212, 59,
- 239, 245, 168, 247, 9, 154, 116, 162, 19, 189,
- 113, 195, 29, 242, 144, 175, 3, 212, 67, 29,
- 160, 126, 66, 33, 110, 80, 3, 48, 152, 0,
- 6, 46, 0, 85, 29, 187, 133, 42, 68, 129,
- 96, 6, 52, 120, 95, 13, 210, 248, 5, 20,
- 0, 225, 214, 22, 200, 181, 174, 21, 192, 235,
- 94, 243, 228, 215, 18, 148, 128, 176, 135, 45,
- 108, 28, 0, 65, 4, 28, 188, 167, 14, 102,
- 16, 131, 77, 181, 96, 132, 171, 142, 182, 180,
- 167, 77, 237, 36, 166, 192, 84, 131, 74, 33,
- 11, 182, 189, 237, 22, 120, 155, 136, 220, 246,
- 212, 167, 6, 165, 173, 35, 86, 251, 220, 216,
- 46, 84, 6, 54, 176, 4, 113, 177, 138, 1,
- 240, 174, 149, 173, 110, 117, 129, 11, 200, 144,
- 3, 53, 188, 225, 24, 120, 120, 130, 59, 204,
- 97, 22, 205, 96, 86, 51, 102, 49, 135, 59,
- 236, 33, 183, 69, 212, 214, 185, 185, 181, 196,
- 21, 168, 170, 85, 79, 44, 64, 1, 164, 176,
- 17, 6, 96, 96, 3, 98, 200, 130, 29, 94,
- 97, 138, 130, 177, 100, 18, 147, 104, 73, 235,
- 34, 125, 94, 80, 172, 65, 18, 150, 255, 96,
- 67, 40, 58, 138, 135, 60, 104, 97, 7, 55,
- 24, 66, 5, 74, 61, 131, 84, 207, 114, 225,
- 69, 81, 1, 11, 50, 128, 1, 136, 15, 96,
- 0, 16, 16, 134, 47, 92, 96, 7, 77, 132,
- 68, 19, 51, 98, 115, 155, 103, 226, 72, 80,
- 200, 161, 14, 53, 168, 128, 3, 122, 237, 128,
- 36, 8, 225, 217, 162, 58, 119, 242, 196, 144,
- 199, 4, 56, 193, 9, 12, 88, 66, 31, 76,
- 1, 9, 73, 160, 139, 71, 55, 179, 69, 45,
- 214, 206, 246, 82, 240, 82, 77, 141, 196, 132,
- 28, 184, 48, 132, 96, 75, 160, 2, 150, 188,
- 57, 18, 173, 212, 3, 139, 176, 170, 35, 178,
- 152, 132, 146, 175, 167, 137, 86, 48, 35, 29,
- 217, 168, 211, 54, 194, 81, 15, 41, 192, 226,
- 236, 169, 108, 228, 220, 41, 80, 65, 3, 40,
- 160, 68, 89, 7, 84, 242, 194, 192, 129, 11,
- 44, 225, 2, 97, 48, 69, 200, 151, 220, 49,
- 42, 228, 128, 49, 244, 64, 4, 103, 149, 110,
- 146, 85, 154, 130, 11, 11, 32, 192, 61, 2,
- 80, 131, 243, 69, 196, 74, 47, 136, 0, 7,
- 100, 216, 5, 0, 179, 249, 17, 135, 128, 45,
- 96, 170, 65, 133, 65, 76, 153, 245, 39, 241,
- 4, 41, 234, 80, 136, 117, 172, 227, 0, 96,
- 48, 158, 67, 146, 23, 131, 35, 68, 64, 3,
- 118, 240, 61, 74, 84, 194, 138, 238, 123, 255,
- 251, 223, 47, 197, 255, 37, 204, 96, 118, 148,
- 92, 162, 22, 85, 144, 28, 87, 200, 145, 136,
- 81, 180, 194, 251, 173, 240, 68, 37, 200, 95,
- 179, 146, 104, 17, 252, 248, 247, 126, 41, 38,
- 65, 126, 200, 155, 196, 19, 155, 16, 10, 127,
- 176, 13, 246, 128, 3, 242, 164, 16, 70, 49,
- 3, 99, 64, 6, 62, 144, 69, 100, 113, 88,
- 82, 16, 0, 245, 80, 14, 20, 88, 129, 22,
- 88, 14, 228, 0, 14, 227, 32, 15, 240, 32,
- 5, 136, 144, 11, 156, 85, 29, 62, 181, 21,
- 219, 64, 14, 23, 8, 14, 1, 240, 13, 241,
- 128, 15, 204, 80, 12, 112, 96, 28, 235, 82,
- 0, 224, 48, 129, 23, 104, 129, 222, 48, 123,
- 227, 16, 15, 239, 240, 12, 137, 144, 11, 44,
- 134, 50, 167, 240, 7, 117, 22, 79, 153, 215,
- 57, 48, 176, 7, 96, 176, 5, 174, 32, 105,
- 49, 97, 98, 110, 19, 92, 235, 80, 5, 193,
- 208, 77, 57, 83, 93, 92, 17, 15, 76, 128,
- 9, 200, 145, 56, 213, 117, 15, 5, 0, 12,
- 171, 135, 18, 157, 160, 10, 60, 64, 27, 39,
- 32, 125, 2, 145, 2, 45, 64, 3, 119, 112,
- 2, 101, 194, 100, 165, 160, 12, 125, 3, 24,
- 253, 160, 15, 218, 112, 135, 117, 118, 13, 22,
- 242, 13, 77, 192, 11, 86, 53, 86, 252, 16,
- 136, 129, 168, 135, 253, 97, 14, 198, 112, 9,
- 78, 192, 86, 128, 129, 135, 119, 168, 15, 132,
- 255, 200, 31, 244, 160, 8, 131, 247, 18, 155,
- 224, 8, 167, 87, 8, 37, 48, 23, 41, 64,
- 2, 123, 64, 112, 111, 232, 27, 149, 16, 8,
- 70, 211, 82, 76, 160, 118, 108, 199, 7, 194,
- 176, 8, 240, 112, 122, 140, 225, 14, 254, 192,
- 133, 0, 64, 86, 191, 160, 11, 124, 80, 139,
- 187, 240, 11, 201, 0, 139, 0, 208, 25, 57,
- 197, 24, 242, 48, 12, 112, 192, 118, 181, 224,
- 7, 193, 176, 8, 79, 184, 21, 64, 21, 134,
- 40, 65, 10, 108, 80, 56, 127, 224, 2, 201,
- 19, 2, 1, 247, 6, 106, 230, 27, 19, 131,
- 96, 128, 17, 93, 202, 120, 10, 102, 80, 12,
- 199, 152, 14, 87, 160, 136, 166, 213, 4, 232,
- 209, 92, 194, 0, 25, 41, 22, 12, 199, 112,
- 14, 59, 83, 5, 129, 112, 86, 37, 54, 12,
- 236, 40, 87, 195, 176, 141, 40, 195, 6, 29,
- 0, 0, 6, 8, 3, 204, 18, 10, 61, 194,
- 23, 80, 128, 59, 128, 97, 15, 141, 192, 10,
- 245, 87, 18, 192, 1, 99, 72, 19, 87, 128,
- 1, 15, 196, 192, 98, 51, 210, 4, 48, 181,
- 21, 250, 64, 5, 122, 144, 0, 234, 103, 90,
- 202, 80, 142, 41, 49, 9, 137, 48, 145, 91,
- 65, 15, 51, 182, 84, 179, 225, 1, 175, 22,
- 85, 133, 101, 141, 193, 128, 142, 128, 49, 15,
- 15, 105, 87, 181, 0, 5, 225, 192, 24, 216,
- 80, 5, 96, 181, 136, 80, 255, 96, 36, 39,
- 145, 6, 186, 64, 5, 216, 192, 24, 232, 144,
- 8, 194, 160, 94, 128, 225, 14, 155, 245, 18,
- 146, 224, 7, 211, 32, 144, 92, 161, 15, 85,
- 224, 51, 105, 49, 10, 142, 0, 0, 29, 32,
- 44, 40, 249, 33, 93, 245, 85, 140, 209, 13,
- 82, 64, 2, 199, 247, 8, 186, 16, 5, 121,
- 165, 56, 2, 176, 31, 91, 113, 14, 135, 160,
- 140, 215, 8, 93, 194, 208, 8, 99, 185, 21,
- 50, 245, 120, 64, 3, 8, 83, 224, 46, 122,
- 85, 12, 246, 136, 18, 82, 217, 15, 238, 49,
- 3, 177, 48, 51, 213, 152, 22, 60, 249, 135,
- 128, 33, 14, 139, 176, 11, 136, 201, 11, 191,
- 64, 12, 136, 0, 5, 194, 215, 138, 254, 64,
- 148, 91, 161, 96, 102, 213, 32, 81, 64, 93,
- 168, 227, 4, 191, 96, 5, 170, 1, 24, 244,
- 176, 8, 186, 128, 152, 128, 240, 11, 135, 192,
- 8, 85, 0, 90, 145, 241, 14, 105, 233, 27,
- 106, 208, 84, 208, 48, 3, 32, 80, 3, 127,
- 41, 7, 129, 249, 20, 143, 96, 12, 216, 200,
- 21, 253, 176, 155, 188, 201, 48, 247, 32, 0,
- 190, 224, 4, 118, 201, 21, 224, 192, 12, 173,
- 80, 127, 213, 193, 146, 92, 65, 15, 193, 32,
- 12, 44, 69, 135, 254, 209, 155, 22, 34, 14,
- 81, 64, 2, 124, 245, 20, 165, 32, 7, 21,
- 117, 11, 50, 64, 2, 38, 128, 5, 208, 162,
- 10, 181, 255, 105, 87, 125, 129, 153, 193, 213,
- 13, 243, 192, 12, 190, 96, 9, 192, 128, 98,
- 45, 121, 74, 40, 49, 9, 198, 48, 135, 92,
- 129, 35, 190, 128, 145, 86, 8, 0, 217, 208,
- 14, 201, 32, 8, 63, 248, 20, 210, 1, 62,
- 30, 160, 3, 208, 232, 2, 58, 32, 2, 208,
- 242, 6, 246, 17, 19, 201, 185, 28, 223, 48,
- 14, 16, 26, 161, 231, 32, 15, 243, 96, 5,
- 206, 128, 8, 131, 240, 8, 225, 81, 9, 136,
- 0, 15, 233, 16, 161, 226, 128, 14, 209, 32,
- 151, 38, 177, 46, 82, 240, 13, 226, 16, 161,
- 233, 48, 15, 199, 48, 74, 145, 81, 15, 15,
- 26, 161, 16, 122, 14, 241, 224, 14, 84, 192,
- 12, 136, 224, 7, 143, 96, 57, 122, 209, 9,
- 150, 80, 81, 180, 0, 6, 178, 68, 13, 35,
- 144, 34, 54, 48, 94, 115, 96, 10, 76, 104,
- 127, 151, 48, 159, 52, 73, 5, 124, 176, 163,
- 32, 7, 114, 103, 96, 6, 143, 32, 18, 47,
- 81, 9, 149, 48, 165, 83, 10, 143, 41, 33,
- 9, 92, 10, 114, 146, 144, 9, 141, 64, 14,
- 140, 177, 13, 210, 144, 11, 145, 16, 166, 85,
- 170, 161, 7, 169, 23, 152, 176, 9, 127, 5,
- 0, 183, 176, 5, 67, 154, 134, 44, 32, 3,
- 63, 240, 5, 162, 179, 160, 206, 180, 11, 62,
- 89, 30, 198, 0, 74, 200, 247, 18, 148, 192,
- 11, 202, 121, 150, 136, 80, 9, 111, 255, 151,
- 38, 166, 176, 93, 249, 232, 1, 92, 48, 3,
- 36, 80, 132, 40, 162, 34, 33, 54, 7, 160,
- 176, 160, 6, 114, 140, 239, 0, 12, 215, 89,
- 168, 37, 17, 9, 198, 240, 152, 92, 113, 80,
- 94, 154, 46, 164, 80, 10, 183, 32, 60, 56,
- 22, 37, 125, 118, 34, 46, 240, 97, 124, 106,
- 102, 121, 145, 9, 172, 224, 12, 223, 192, 14,
- 21, 200, 14, 227, 16, 5, 36, 42, 170, 38,
- 49, 9, 181, 32, 13, 233, 64, 131, 229, 192,
- 14, 231, 176, 145, 111, 202, 35, 164, 208, 9,
- 168, 240, 1, 0, 144, 3, 65, 192, 5, 185,
- 181, 2, 230, 102, 16, 29, 22, 3, 96, 192,
- 5, 207, 131, 11, 209, 163, 10, 112, 0, 126,
- 173, 160, 125, 194, 154, 61, 151, 128, 127, 229,
- 170, 38, 220, 163, 10, 183, 32, 173, 0, 64,
- 11, 64, 240, 3, 50, 80, 2, 177, 26, 40,
- 40, 18, 48, 92, 176, 3, 101, 134, 5, 119,
- 160, 10, 53, 113, 174, 172, 87, 47, 155, 96,
- 9, 168, 64, 11, 216, 80, 135, 65, 112, 3,
- 123, 112, 45, 216, 74, 42, 222, 2, 3, 33,
- 112, 2, 94, 64, 102, 46, 39, 38, 117, 48,
- 61, 1, 43, 176, 105, 226, 102, 156, 80, 10,
- 111, 128, 3, 127, 144, 15, 225, 144, 13, 225,
- 16, 4, 56, 64, 62, 49, 144, 106, 217, 58,
- 42, 19, 225, 2, 32, 96, 2, 63, 192, 5,
- 181, 102, 104, 96, 255, 146, 7, 99, 242, 6,
- 170, 240, 9, 142, 180, 164, 133, 74, 61, 98,
- 243, 177, 111, 48, 7, 40, 80, 8, 79, 176,
- 14, 249, 144, 180, 65, 80, 8, 54, 240, 3,
- 52, 208, 108, 151, 132, 110, 42, 208, 2, 47,
- 16, 3, 38, 0, 6, 53, 224, 5, 93, 130,
- 2, 48, 135, 104, 55, 160, 63, 253, 83, 7,
- 140, 86, 18, 102, 242, 104, 143, 246, 9, 36,
- 151, 182, 143, 86, 10, 151, 182, 22, 213, 163,
- 10, 56, 113, 3, 22, 32, 1, 6, 16, 0,
- 4, 112, 0, 7, 240, 4, 7, 96, 8, 133,
- 0, 4, 92, 224, 180, 124, 66, 2, 43, 80,
- 132, 56, 151, 134, 132, 194, 62, 175, 166, 3,
- 246, 196, 5, 34, 96, 107, 183, 70, 4, 68,
- 128, 4, 146, 219, 70, 148, 91, 185, 14, 224,
- 0, 72, 112, 185, 83, 199, 107, 191, 54, 108,
- 147, 52, 73, 6, 16, 186, 161, 91, 8, 18,
- 0, 4, 28, 244, 3, 91, 96, 2, 205, 86,
- 2, 65, 209, 178, 133, 171, 16, 40, 196, 2,
- 37, 144, 40, 141, 98, 2, 58, 0, 6, 63,
- 112, 2, 179, 214, 64, 94, 224, 5, 34, 240,
- 187, 192, 27, 188, 193, 219, 187, 54, 176, 63,
- 53, 80, 3, 63, 176, 7, 58, 96, 2, 51,
- 128, 41, 155, 146, 112, 174, 251, 186, 16, 43,
- 40, 132, 242, 41, 225, 246, 109, 216, 155, 189,
- 222, 22, 110, 41, 68, 110, 209, 187, 106, 1,
- 1, 1, 0, 59 };
-
-unsigned char php_egg_logo[] = {
- 71, 73, 70, 56, 57, 97, 120, 0, 67, 0,
- 247, 255, 0, 0, 0, 0, 177, 156, 157, 205,
- 169, 172, 148, 134, 135, 134, 109, 112, 169, 155,
- 157, 182, 169, 171, 165, 153, 155, 119, 79, 87,
- 167, 152, 155, 167, 157, 159, 195, 159, 167, 170,
- 156, 161, 160, 150, 154, 153, 129, 143, 118, 109,
- 115, 3, 1, 3, 74, 60, 74, 6, 5, 6,
- 183, 173, 184, 101, 93, 102, 148, 142, 150, 5,
- 3, 6, 9, 7, 10, 83, 74, 88, 168, 159,
- 174, 156, 150, 166, 222, 219, 229, 172, 166, 187,
- 215, 212, 225, 206, 203, 220, 123, 120, 139, 134,
- 132, 155, 195, 193, 216, 182, 181, 209, 187, 186,
- 214, 174, 173, 208, 1, 1, 3, 3, 3, 5,
- 11, 11, 16, 14, 14, 20, 7, 7, 10, 34,
- 34, 48, 22, 22, 31, 28, 28, 39, 85, 85,
- 115, 153, 153, 205, 153, 153, 203, 9, 9, 12,
- 156, 156, 205, 160, 160, 206, 170, 170, 206, 177,
- 177, 208, 142, 144, 195, 149, 150, 202, 150, 151,
- 199, 157, 158, 202, 161, 162, 201, 165, 166, 204,
- 80, 82, 122, 75, 77, 112, 112, 115, 165, 97,
- 99, 143, 91, 93, 134, 69, 71, 102, 105, 107,
- 154, 41, 42, 60, 127, 130, 185, 86, 88, 125,
- 51, 52, 74, 136, 139, 192, 133, 135, 184, 146,
- 148, 197, 153, 155, 199, 155, 157, 200, 119, 123,
- 178, 61, 63, 90, 16, 17, 24, 192, 192, 192,
- 132, 89, 62, 139, 94, 66, 143, 105, 82, 222,
- 180, 157, 132, 77, 50, 113, 74, 54, 115, 87,
- 73, 125, 66, 39, 126, 83, 64, 122, 82, 63,
- 102, 71, 57, 113, 85, 72, 197, 160, 142, 204,
- 168, 152, 89, 54, 39, 93, 57, 42, 82, 50,
- 37, 121, 75, 56, 95, 60, 45, 105, 68, 53,
- 89, 58, 45, 97, 67, 55, 113, 79, 65, 104,
- 73, 60, 99, 70, 58, 111, 81, 69, 118, 88,
- 75, 115, 85, 73, 115, 87, 75, 116, 90, 79,
- 181, 143, 127, 207, 174, 160, 94, 51, 35, 78,
- 45, 33, 105, 62, 47, 98, 62, 48, 100, 65,
- 52, 107, 71, 58, 108, 74, 62, 216, 182, 170,
- 210, 177, 165, 227, 193, 180, 219, 188, 177, 118,
- 60, 40, 106, 56, 39, 111, 62, 45, 68, 39,
- 29, 55, 34, 27, 83, 53, 43, 71, 45, 37,
- 94, 64, 54, 10, 7, 6, 93, 67, 59, 116,
- 85, 75, 149, 110, 97, 12, 9, 8, 111, 84,
- 75, 102, 66, 56, 101, 69, 60, 103, 71, 62,
- 93, 65, 57, 95, 67, 59, 99, 70, 62, 91,
- 65, 58, 117, 88, 80, 118, 93, 86, 183, 150,
- 140, 188, 158, 149, 236, 203, 194, 198, 171, 163,
- 190, 164, 157, 41, 26, 22, 91, 61, 53, 98,
- 66, 58, 95, 65, 57, 84, 59, 53, 114, 82,
- 74, 109, 81, 74, 102, 79, 73, 158, 127, 119,
- 123, 100, 94, 163, 133, 126, 194, 167, 160, 204,
- 179, 173, 171, 159, 156, 95, 65, 59, 71, 49,
- 44, 97, 67, 61, 93, 65, 59, 76, 54, 49,
- 126, 91, 83, 19, 14, 13, 112, 86, 80, 87,
- 69, 65, 133, 107, 101, 144, 119, 114, 137, 114,
- 109, 177, 150, 144, 164, 139, 134, 181, 155, 149,
- 209, 183, 177, 200, 176, 171, 223, 197, 191, 211,
- 187, 182, 167, 157, 155, 165, 155, 153, 32, 20,
- 18, 82, 55, 50, 90, 63, 58, 119, 83, 77,
- 94, 66, 61, 60, 43, 40, 95, 74, 70, 171,
- 145, 140, 247, 212, 206, 235, 209, 204, 167, 155,
- 153, 255, 244, 242, 86, 61, 57, 247, 220, 216,
- 155, 142, 140, 170, 157, 155, 149, 124, 121, 187,
- 160, 157, 172, 149, 146, 216, 192, 189, 147, 131,
- 129, 147, 138, 137, 91, 65, 63, 46, 33, 32,
- 155, 132, 130, 157, 137, 135, 181, 159, 157, 224,
- 202, 200, 132, 121, 120, 248, 228, 226, 165, 152,
- 151, 140, 130, 129, 156, 145, 144, 162, 151, 150,
- 151, 141, 140, 186, 176, 175, 103, 85, 84, 174,
- 156, 155, 163, 147, 146, 176, 151, 150, 166, 143,
- 142, 188, 165, 164, 194, 171, 170, 198, 177, 176,
- 210, 189, 188, 229, 207, 206, 236, 215, 214, 22,
- 17, 17, 176, 153, 153, 203, 181, 181, 174, 159,
- 159, 168, 153, 153, 169, 155, 155, 171, 157, 157,
- 191, 177, 177, 176, 163, 163, 169, 157, 157, 167,
- 155, 155, 165, 153, 153, 171, 159, 159, 158, 148,
- 148, 169, 159, 159, 165, 155, 155, 163, 153, 153,
- 161, 153, 153, 3, 3, 3, 1, 1, 1, 255,
- 255, 255, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 33, 249, 4, 1, 0, 0, 78, 0, 44,
- 0, 0, 0, 0, 120, 0, 67, 0, 64, 8,
- 255, 0, 157, 8, 28, 72, 176, 160, 193, 131,
- 8, 19, 42, 92, 200, 176, 161, 195, 135, 16,
- 9, 186, 112, 177, 164, 133, 144, 20, 48, 78,
- 160, 64, 209, 100, 197, 10, 22, 44, 84, 64,
- 243, 229, 171, 20, 170, 82, 38, 53, 53, 130,
- 180, 173, 94, 182, 1, 216, 176, 57, 203, 182,
- 141, 102, 180, 100, 174, 114, 186, 218, 118, 108,
- 219, 54, 103, 206, 154, 37, 147, 38, 205, 83,
- 178, 106, 213, 30, 40, 85, 234, 35, 72, 143,
- 37, 80, 163, 70, 29, 98, 4, 201, 68, 23,
- 17, 19, 78, 252, 193, 2, 128, 87, 0, 130,
- 114, 149, 68, 117, 9, 211, 25, 50, 166, 26,
- 169, 29, 116, 234, 212, 32, 76, 138, 234, 208,
- 17, 51, 71, 140, 24, 58, 117, 204, 32, 42,
- 3, 233, 27, 55, 122, 217, 142, 101, 203, 118,
- 11, 215, 60, 109, 223, 200, 217, 42, 103, 142,
- 153, 55, 109, 218, 188, 81, 35, 102, 141, 90,
- 57, 101, 201, 142, 221, 26, 134, 172, 29, 50,
- 119, 237, 66, 15, 19, 141, 203, 240, 129, 210,
- 134, 33, 107, 171, 183, 13, 91, 181, 15, 75,
- 140, 200, 150, 109, 21, 235, 65, 23, 71, 84,
- 124, 69, 87, 82, 211, 174, 94, 167, 122, 177,
- 117, 107, 74, 145, 153, 185, 115, 146, 7, 202,
- 132, 41, 19, 25, 51, 104, 228, 120, 153, 62,
- 134, 250, 152, 49, 156, 164, 113, 91, 39, 205,
- 85, 44, 74, 121, 236, 216, 255, 185, 227, 166,
- 252, 150, 72, 231, 183, 216, 169, 197, 158, 82,
- 44, 88, 162, 68, 77, 187, 229, 142, 158, 253,
- 251, 244, 220, 233, 119, 135, 172, 127, 231, 97,
- 240, 192, 3, 26, 59, 184, 92, 115, 13, 62,
- 249, 36, 168, 32, 100, 245, 56, 3, 194, 13,
- 72, 68, 248, 2, 86, 46, 148, 240, 149, 47,
- 168, 236, 210, 72, 34, 136, 32, 50, 7, 25,
- 129, 44, 34, 98, 38, 153, 244, 178, 200, 37,
- 151, 236, 130, 162, 138, 127, 124, 1, 7, 32,
- 128, 244, 97, 73, 46, 52, 230, 98, 137, 31,
- 125, 0, 114, 73, 35, 191, 60, 82, 8, 40,
- 177, 172, 195, 205, 59, 234, 148, 67, 141, 57,
- 212, 28, 73, 13, 37, 161, 76, 70, 12, 51,
- 145, 180, 17, 73, 37, 148, 208, 66, 78, 37,
- 110, 228, 33, 201, 43, 159, 180, 66, 64, 53,
- 205, 28, 115, 205, 48, 244, 172, 99, 102, 126,
- 241, 32, 168, 224, 154, 108, 174, 169, 77, 54,
- 57, 228, 128, 3, 14, 87, 229, 246, 85, 46,
- 168, 20, 179, 203, 41, 142, 56, 178, 139, 138,
- 41, 234, 185, 75, 159, 142, 160, 168, 137, 46,
- 46, 194, 161, 168, 162, 95, 52, 242, 9, 27,
- 99, 244, 225, 7, 32, 186, 112, 146, 204, 50,
- 202, 136, 35, 78, 56, 201, 180, 210, 202, 43,
- 159, 70, 3, 76, 44, 192, 68, 19, 77, 56,
- 227, 216, 66, 11, 45, 204, 48, 99, 11, 53,
- 181, 168, 255, 51, 142, 56, 202, 216, 145, 199,
- 29, 177, 180, 162, 198, 38, 155, 160, 225, 171,
- 175, 106, 4, 171, 134, 22, 196, 22, 107, 108,
- 21, 105, 176, 193, 6, 36, 173, 184, 146, 1,
- 13, 52, 144, 48, 67, 12, 19, 21, 116, 149,
- 11, 92, 73, 144, 130, 70, 43, 248, 162, 73,
- 32, 152, 32, 114, 87, 28, 111, 132, 241, 72,
- 42, 96, 232, 161, 238, 186, 234, 242, 225, 110,
- 24, 127, 232, 162, 231, 42, 175, 184, 18, 77,
- 58, 182, 24, 99, 141, 40, 146, 84, 178, 76,
- 52, 177, 132, 179, 204, 52, 227, 88, 41, 142,
- 58, 204, 144, 163, 169, 56, 149, 204, 210, 42,
- 123, 179, 132, 71, 137, 39, 88, 80, 97, 49,
- 21, 117, 148, 161, 49, 26, 85, 84, 97, 172,
- 177, 205, 76, 224, 193, 200, 30, 132, 48, 195,
- 181, 89, 9, 116, 109, 157, 62, 0, 81, 196,
- 203, 76, 196, 204, 4, 16, 52, 99, 16, 193,
- 51, 113, 88, 49, 133, 206, 86, 232, 241, 134,
- 28, 127, 168, 98, 73, 41, 159, 128, 2, 75,
- 191, 253, 82, 162, 76, 40, 149, 244, 27, 138,
- 40, 118, 48, 89, 229, 44, 179, 208, 66, 235,
- 52, 203, 120, 18, 5, 20, 133, 120, 2, 140,
- 1, 35, 144, 236, 65, 7, 100, 111, 176, 129,
- 7, 35, 232, 176, 114, 181, 41, 183, 205, 208,
- 218, 112, 199, 45, 247, 220, 107, 187, 109, 247,
- 221, 78, 92, 107, 68, 16, 68, 184, 255, 172,
- 194, 223, 66, 4, 254, 242, 224, 50, 199, 76,
- 51, 205, 60, 36, 206, 195, 14, 59, 16, 225,
- 248, 15, 144, 255, 224, 195, 228, 148, 55, 229,
- 212, 18, 84, 217, 128, 50, 222, 17, 77, 116,
- 4, 16, 77, 120, 181, 143, 62, 22, 92, 128,
- 142, 37, 36, 153, 164, 139, 38, 197, 44, 114,
- 70, 94, 89, 40, 66, 71, 25, 117, 100, 113,
- 198, 28, 89, 96, 17, 133, 43, 246, 208, 211,
- 83, 54, 165, 93, 131, 152, 58, 230, 156, 51,
- 139, 44, 223, 8, 47, 252, 52, 204, 192, 90,
- 139, 40, 210, 124, 51, 204, 60, 243, 224, 194,
- 206, 245, 6, 30, 184, 26, 77, 206, 184, 246,
- 90, 15, 67, 132, 47, 254, 17, 53, 104, 110,
- 91, 67, 91, 161, 240, 149, 33, 168, 163, 194,
- 250, 158, 167, 48, 146, 8, 236, 89, 32, 98,
- 134, 34, 152, 144, 66, 74, 38, 243, 203, 17,
- 134, 28, 0, 12, 131, 23, 252, 39, 135, 58,
- 188, 130, 27, 127, 105, 70, 43, 32, 209, 137,
- 95, 116, 131, 0, 201, 136, 6, 40, 218, 192,
- 5, 41, 72, 193, 13, 118, 192, 131, 6, 241,
- 240, 42, 106, 144, 3, 28, 236, 216, 207, 125,
- 244, 227, 159, 208, 20, 102, 24, 195, 144, 71,
- 1, 218, 177, 153, 234, 29, 96, 30, 248, 192,
- 135, 54, 26, 224, 146, 1, 124, 128, 124, 53,
- 200, 161, 249, 6, 226, 2, 30, 124, 69, 21,
- 24, 218, 5, 41, 255, 24, 209, 139, 33, 50,
- 130, 20, 110, 89, 4, 255, 200, 240, 63, 57,
- 4, 226, 137, 39, 186, 206, 24, 200, 224, 5,
- 69, 245, 161, 15, 46, 186, 226, 23, 90, 241,
- 141, 111, 28, 163, 27, 225, 96, 134, 40, 142,
- 100, 11, 74, 72, 34, 18, 89, 194, 195, 36,
- 172, 193, 70, 125, 25, 35, 26, 24, 8, 71,
- 45, 66, 65, 9, 46, 68, 2, 24, 253, 241,
- 76, 104, 218, 193, 142, 121, 92, 99, 30, 163,
- 185, 94, 59, 214, 65, 143, 118, 76, 47, 134,
- 106, 106, 83, 130, 86, 179, 13, 13, 36, 33,
- 9, 55, 152, 80, 15, 119, 83, 138, 214, 93,
- 226, 137, 80, 60, 17, 138, 46, 33, 34, 66,
- 237, 66, 19, 39, 241, 3, 52, 44, 1, 141,
- 43, 94, 145, 81, 95, 248, 2, 235, 52, 129,
- 134, 84, 184, 226, 27, 177, 0, 85, 50, 194,
- 17, 142, 128, 197, 34, 26, 210, 8, 71, 0,
- 188, 1, 143, 105, 80, 98, 18, 198, 8, 198,
- 36, 134, 57, 76, 246, 144, 131, 18, 179, 168,
- 132, 39, 30, 181, 138, 67, 112, 130, 19, 135,
- 88, 5, 36, 32, 161, 172, 106, 118, 233, 83,
- 174, 104, 134, 52, 234, 145, 15, 68, 186, 169,
- 30, 25, 208, 129, 56, 233, 164, 178, 244, 121,
- 165, 4, 64, 244, 205, 160, 254, 4, 63, 253,
- 97, 2, 19, 115, 8, 195, 30, 248, 176, 135,
- 55, 4, 34, 13, 105, 160, 103, 28, 246, 25,
- 255, 7, 39, 106, 226, 18, 157, 72, 198, 56,
- 200, 65, 14, 90, 0, 195, 40, 177, 144, 5,
- 40, 94, 129, 75, 105, 12, 12, 107, 211, 80,
- 135, 58, 86, 85, 14, 87, 169, 67, 28, 1,
- 80, 198, 29, 194, 195, 5, 46, 84, 194, 21,
- 179, 43, 131, 175, 54, 65, 172, 52, 120, 236,
- 99, 40, 45, 86, 43, 50, 16, 130, 17, 140,
- 64, 4, 106, 187, 138, 66, 86, 118, 132, 22,
- 168, 224, 35, 33, 81, 129, 16, 124, 241, 135,
- 61, 176, 235, 167, 244, 244, 169, 207, 190, 80,
- 10, 64, 148, 68, 23, 207, 40, 198, 47, 46,
- 129, 138, 222, 116, 130, 89, 205, 114, 5, 1,
- 90, 1, 48, 89, 60, 205, 22, 182, 112, 85,
- 86, 153, 81, 11, 102, 172, 138, 18, 176, 40,
- 196, 21, 192, 0, 134, 43, 60, 225, 172, 80,
- 184, 2, 22, 202, 80, 5, 72, 36, 195, 0,
- 30, 48, 155, 92, 59, 48, 2, 25, 172, 140,
- 115, 183, 153, 91, 13, 134, 208, 131, 32, 248,
- 32, 114, 147, 11, 130, 96, 123, 64, 216, 169,
- 136, 111, 54, 57, 172, 1, 18, 110, 112, 131,
- 36, 40, 1, 7, 113, 18, 231, 12, 102, 64,
- 2, 18, 208, 64, 4, 34, 120, 105, 180, 116,
- 64, 173, 185, 225, 245, 179, 90, 89, 153, 17,
- 150, 208, 215, 191, 18, 161, 5, 60, 56, 156,
- 106, 19, 215, 56, 34, 72, 206, 41, 79, 57,
- 66, 85, 234, 6, 218, 218, 255, 90, 107, 34,
- 70, 104, 153, 16, 154, 208, 17, 156, 254, 77,
- 167, 129, 19, 2, 225, 48, 64, 92, 226, 118,
- 131, 2, 200, 77, 110, 55, 126, 225, 192, 228,
- 38, 183, 5, 174, 13, 172, 96, 167, 75, 216,
- 234, 86, 23, 115, 70, 48, 223, 249, 108, 155,
- 215, 32, 20, 225, 2, 16, 48, 129, 182, 50,
- 130, 130, 21, 144, 114, 44, 154, 208, 196, 24,
- 22, 65, 134, 58, 212, 46, 17, 115, 16, 23,
- 21, 90, 113, 0, 120, 208, 100, 27, 218, 40,
- 208, 60, 190, 33, 11, 101, 208, 18, 24, 217,
- 80, 13, 100, 194, 1, 139, 101, 0, 163, 18,
- 178, 144, 134, 106, 190, 225, 18, 154, 192, 196,
- 53, 74, 249, 192, 83, 196, 71, 225, 217, 110,
- 215, 110, 184, 97, 130, 4, 190, 2, 0, 11,
- 160, 99, 36, 170, 43, 134, 35, 22, 193, 167,
- 224, 20, 199, 12, 102, 200, 66, 22, 240, 50,
- 23, 15, 209, 1, 10, 187, 235, 29, 77, 128,
- 231, 199, 121, 28, 163, 18, 141, 153, 133, 56,
- 178, 87, 15, 120, 152, 195, 26, 231, 48, 71,
- 45, 100, 17, 141, 107, 176, 3, 133, 9, 64,
- 161, 146, 135, 129, 26, 234, 169, 198, 37, 221,
- 123, 205, 7, 168, 34, 27, 217, 150, 143, 109,
- 111, 115, 65, 11, 82, 240, 21, 9, 136, 37,
- 37, 187, 144, 159, 123, 109, 151, 8, 69, 40,
- 194, 20, 192, 33, 69, 34, 204, 32, 23, 49,
- 200, 161, 255, 159, 97, 136, 51, 34, 32, 225,
- 10, 120, 24, 0, 30, 245, 104, 70, 53, 64,
- 245, 9, 2, 96, 35, 26, 234, 96, 15, 51,
- 40, 1, 142, 79, 124, 98, 25, 204, 56, 135,
- 49, 144, 36, 142, 8, 126, 102, 63, 252, 233,
- 207, 10, 219, 113, 0, 20, 150, 38, 201, 46,
- 44, 205, 97, 182, 231, 140, 215, 144, 111, 54,
- 181, 185, 13, 18, 138, 240, 21, 65, 180, 207,
- 55, 109, 73, 53, 35, 226, 146, 226, 44, 176,
- 217, 12, 137, 216, 223, 115, 162, 211, 196, 56,
- 199, 121, 12, 114, 64, 195, 91, 233, 113, 141,
- 106, 124, 162, 27, 171, 104, 69, 44, 36, 113,
- 30, 244, 108, 129, 11, 110, 232, 40, 23, 204,
- 8, 11, 101, 136, 2, 171, 228, 128, 71, 59,
- 234, 115, 166, 252, 236, 167, 132, 74, 38, 36,
- 50, 10, 32, 15, 234, 193, 16, 31, 13, 104,
- 64, 62, 86, 211, 32, 16, 40, 22, 9, 138,
- 101, 155, 11, 110, 160, 27, 175, 136, 37, 79,
- 142, 56, 133, 254, 136, 216, 22, 37, 134, 11,
- 17, 115, 113, 226, 19, 81, 36, 135, 249, 133,
- 33, 149, 169, 244, 66, 42, 199, 16, 6, 78,
- 28, 3, 30, 195, 24, 128, 43, 68, 49, 9,
- 97, 8, 163, 22, 228, 73, 246, 29, 236, 144,
- 165, 96, 0, 185, 22, 230, 48, 71, 124, 200,
- 1, 139, 54, 180, 33, 22, 200, 40, 147, 153,
- 206, 100, 38, 253, 216, 199, 29, 220, 255, 14,
- 144, 126, 228, 97, 24, 111, 182, 137, 145, 21,
- 96, 44, 99, 175, 210, 21, 175, 64, 163, 20,
- 154, 144, 31, 38, 200, 240, 78, 83, 152, 130,
- 45, 74, 236, 69, 32, 80, 20, 8, 21, 45,
- 34, 16, 99, 72, 37, 28, 146, 110, 69, 63,
- 56, 221, 18, 80, 167, 17, 52, 88, 241, 12,
- 175, 85, 98, 162, 161, 144, 69, 179, 199, 40,
- 12, 99, 212, 98, 22, 212, 176, 6, 63, 4,
- 64, 0, 165, 72, 34, 235, 176, 176, 195, 36,
- 66, 177, 140, 145, 187, 157, 29, 94, 140, 9,
- 54, 182, 49, 140, 2, 204, 67, 145, 120, 31,
- 119, 61, 42, 128, 3, 37, 40, 33, 9, 19,
- 169, 57, 0, 160, 145, 161, 76, 4, 34, 57,
- 115, 200, 228, 37, 73, 172, 34, 118, 166, 87,
- 19, 95, 144, 20, 41, 161, 126, 35, 28, 153,
- 242, 15, 43, 49, 244, 43, 248, 248, 13, 3,
- 188, 99, 26, 233, 16, 199, 52, 100, 65, 139,
- 139, 18, 204, 26, 196, 8, 134, 48, 55, 136,
- 135, 86, 205, 34, 20, 119, 184, 3, 40, 216,
- 128, 6, 78, 160, 65, 11, 107, 88, 22, 36,
- 62, 241, 10, 109, 74, 35, 26, 3, 104, 73,
- 55, 19, 153, 247, 25, 234, 32, 78, 116, 90,
- 119, 187, 1, 128, 167, 98, 112, 178, 147, 187,
- 208, 228, 37, 244, 228, 201, 98, 232, 226, 36,
- 49, 2, 196, 23, 152, 190, 168, 62, 252, 161,
- 19, 214, 239, 69, 255, 29, 90, 33, 141, 100,
- 36, 131, 0, 246, 74, 198, 43, 112, 98, 175,
- 88, 132, 94, 83, 179, 146, 69, 37, 242, 144,
- 7, 53, 178, 39, 73, 234, 144, 133, 40, 106,
- 33, 9, 79, 164, 226, 16, 107, 112, 8, 209,
- 36, 128, 2, 152, 82, 90, 48, 44, 90, 80,
- 5, 202, 178, 126, 216, 16, 38, 217, 0, 78,
- 210, 50, 3, 49, 149, 55, 46, 48, 106, 165,
- 6, 13, 190, 65, 40, 126, 34, 40, 131, 66,
- 98, 164, 48, 116, 213, 225, 5, 111, 80, 79,
- 93, 64, 6, 108, 176, 10, 97, 240, 6, 113,
- 32, 6, 152, 144, 34, 189, 64, 0, 239, 87,
- 48, 178, 224, 9, 174, 224, 9, 92, 146, 12,
- 224, 144, 14, 211, 224, 13, 58, 8, 127, 171,
- 242, 108, 18, 37, 81, 227, 176, 52, 226, 225,
- 6, 146, 208, 10, 104, 16, 44, 248, 164, 6,
- 29, 131, 79, 6, 248, 132, 4, 192, 1, 152,
- 37, 2, 39, 35, 83, 229, 52, 17, 91, 86,
- 2, 226, 165, 10, 24, 168, 39, 245, 198, 8,
- 247, 22, 7, 244, 84, 46, 132, 128, 46, 236,
- 226, 46, 251, 4, 47, 48, 242, 11, 4, 128,
- 42, 3, 197, 12, 93, 39, 12, 202, 16, 11,
- 160, 0, 48, 164, 50, 13, 4, 101, 37, 138,
- 193, 12, 229, 80, 14, 234, 160, 48, 226, 32,
- 10, 26, 20, 30, 110, 64, 9, 192, 160, 49,
- 136, 184, 49, 183, 247, 132, 32, 35, 2, 33,
- 255, 240, 136, 35, 80, 133, 88, 150, 87, 158,
- 3, 58, 28, 225, 17, 44, 192, 83, 95, 224,
- 5, 106, 96, 134, 63, 197, 46, 123, 48, 79,
- 124, 240, 6, 128, 80, 10, 108, 129, 18, 157,
- 208, 37, 16, 20, 13, 203, 240, 14, 192, 144,
- 19, 67, 17, 65, 225, 0, 14, 224, 48, 122,
- 176, 208, 48, 88, 213, 42, 92, 85, 11, 182,
- 64, 127, 238, 81, 8, 103, 165, 86, 88, 48,
- 140, 136, 136, 44, 198, 210, 10, 242, 48, 54,
- 100, 211, 1, 30, 32, 2, 118, 101, 133, 157,
- 179, 50, 61, 0, 4, 128, 35, 56, 47, 19,
- 1, 197, 32, 79, 235, 18, 138, 62, 101, 5,
- 86, 192, 7, 47, 226, 7, 55, 226, 11, 78,
- 119, 9, 175, 96, 20, 157, 178, 64, 244, 2,
- 48, 192, 0, 11, 148, 32, 53, 161, 64, 11,
- 207, 214, 42, 170, 34, 14, 76, 2, 12, 133,
- 0, 5, 83, 176, 143, 251, 8, 6, 84, 16,
- 5, 209, 96, 0, 29, 32, 87, 4, 25, 2,
- 36, 64, 91, 181, 21, 55, 53, 208, 3, 62,
- 192, 3, 51, 3, 4, 172, 213, 56, 144, 67,
- 57, 126, 229, 3, 15, 64, 1, 76, 80, 4,
- 66, 128, 1, 4, 112, 42, 177, 64, 42, 145,
- 32, 11, 253, 162, 12, 153, 34, 14, 6, 96,
- 0, 25, 144, 1, 28, 176, 146, 58, 96, 89,
- 151, 149, 89, 35, 240, 136, 143, 72, 50, 45,
- 69, 2, 207, 136, 144, 220, 255, 229, 16, 116,
- 179, 50, 232, 86, 101, 20, 22, 62, 178, 133,
- 88, 138, 197, 88, 143, 244, 88, 115, 130, 3,
- 49, 208, 89, 59, 57, 137, 57, 217, 148, 78,
- 249, 148, 80, 217, 54, 75, 57, 149, 208, 24,
- 149, 86, 73, 129, 19, 241, 2, 71, 208, 3,
- 63, 208, 2, 46, 99, 141, 48, 83, 56, 171,
- 165, 56, 140, 211, 90, 174, 21, 57, 63, 48,
- 88, 67, 64, 62, 119, 117, 149, 110, 115, 21,
- 72, 208, 3, 45, 192, 4, 55, 5, 18, 191,
- 21, 92, 194, 69, 56, 98, 121, 56, 100, 201,
- 56, 142, 115, 150, 19, 89, 57, 211, 53, 152,
- 176, 181, 4, 228, 163, 93, 110, 25, 90, 72,
- 16, 4, 212, 168, 17, 188, 133, 137, 57, 5,
- 92, 36, 49, 22, 172, 240, 0, 72, 177, 20,
- 72, 129, 20, 174, 65, 0, 211, 180, 10, 159,
- 144, 153, 151, 169, 20, 4, 64, 0, 199, 117,
- 145, 129, 101, 93, 215, 37, 21, 228, 35, 73,
- 110, 57, 17, 65, 192, 4, 43, 160, 45, 23,
- 112, 2, 142, 233, 17, 208, 48, 18, 48, 130,
- 10, 186, 112, 9, 100, 112, 73, 188, 153, 5,
- 104, 224, 10, 247, 0, 24, 206, 208, 18, 135,
- 129, 15, 199, 64, 42, 18, 20, 11, 10, 214,
- 69, 245, 80, 15, 176, 244, 145, 71, 35, 13,
- 62, 177, 13, 3, 0, 19, 161, 249, 0, 151,
- 35, 21, 83, 97, 97, 23, 134, 87, 19, 209,
- 3, 76, 255, 112, 1, 0, 16, 94, 22, 128,
- 17, 232, 144, 11, 35, 129, 94, 129, 112, 6,
- 103, 113, 6, 89, 64, 59, 41, 70, 6, 89,
- 64, 5, 79, 224, 10, 246, 49, 99, 213, 99,
- 32, 223, 64, 11, 126, 168, 12, 0, 38, 67,
- 252, 57, 13, 171, 50, 14, 148, 176, 12, 217,
- 224, 71, 217, 35, 60, 136, 225, 18, 63, 1,
- 97, 15, 32, 97, 63, 25, 62, 22, 198, 57,
- 91, 177, 124, 0, 80, 2, 166, 179, 158, 165,
- 176, 58, 130, 18, 63, 172, 166, 98, 179, 83,
- 7, 116, 33, 46, 79, 16, 5, 175, 160, 0,
- 240, 240, 59, 193, 131, 24, 228, 80, 60, 162,
- 128, 60, 6, 162, 13, 215, 160, 14, 194, 144,
- 113, 194, 64, 9, 209, 160, 13, 236, 96, 100,
- 76, 134, 26, 168, 97, 32, 50, 212, 96, 81,
- 246, 1, 83, 118, 4, 72, 74, 161, 53, 192,
- 148, 58, 233, 2, 65, 32, 4, 28, 182, 15,
- 66, 211, 27, 68, 135, 9, 62, 7, 28, 38,
- 22, 23, 42, 150, 5, 25, 67, 59, 30, 130,
- 6, 108, 16, 13, 132, 244, 156, 131, 81, 24,
- 6, 146, 13, 227, 208, 85, 230, 160, 14, 217,
- 243, 13, 234, 192, 70, 141, 1, 61, 210, 192,
- 14, 134, 20, 26, 157, 97, 72, 40, 36, 15,
- 167, 241, 66, 48, 244, 100, 52, 225, 26, 31,
- 0, 2, 179, 1, 106, 76, 138, 16, 88, 168,
- 62, 162, 243, 97, 71, 21, 102, 102, 255, 134,
- 8, 103, 80, 102, 141, 192, 8, 108, 33, 63,
- 178, 99, 23, 136, 39, 7, 115, 96, 6, 101,
- 176, 9, 159, 192, 14, 127, 193, 26, 63, 241,
- 19, 197, 121, 12, 228, 128, 48, 204, 160, 99,
- 205, 208, 12, 211, 16, 118, 196, 112, 14, 229,
- 32, 11, 174, 32, 13, 121, 164, 31, 5, 144,
- 71, 158, 65, 32, 184, 112, 11, 7, 192, 167,
- 243, 192, 167, 218, 195, 26, 216, 16, 168, 131,
- 90, 161, 161, 181, 101, 165, 134, 58, 29, 234,
- 133, 98, 246, 94, 177, 163, 8, 140, 112, 68,
- 204, 145, 5, 117, 33, 6, 112, 246, 63, 113,
- 102, 41, 239, 112, 103, 199, 144, 20, 144, 192,
- 9, 157, 208, 10, 213, 16, 13, 88, 130, 108,
- 110, 176, 5, 82, 34, 9, 121, 224, 112, 73,
- 50, 14, 209, 112, 12, 252, 1, 105, 145, 38,
- 105, 120, 154, 167, 120, 154, 0, 168, 17, 67,
- 228, 214, 26, 55, 148, 88, 233, 246, 157, 121,
- 211, 3, 130, 103, 8, 35, 225, 62, 131, 162,
- 106, 141, 128, 98, 42, 102, 63, 137, 144, 63,
- 96, 24, 159, 4, 100, 107, 182, 54, 7, 193,
- 121, 146, 237, 224, 107, 221, 192, 10, 191, 64,
- 103, 19, 20, 37, 91, 96, 65, 228, 42, 5,
- 244, 231, 48, 150, 49, 14, 157, 81, 31, 1,
- 178, 14, 240, 106, 66, 184, 192, 100, 183, 144,
- 31, 161, 113, 26, 212, 163, 61, 13, 192, 105,
- 251, 154, 88, 59, 255, 84, 78, 68, 240, 21,
- 16, 240, 110, 168, 54, 8, 195, 49, 8, 98,
- 102, 6, 201, 129, 8, 89, 144, 8, 11, 235,
- 28, 208, 33, 29, 183, 54, 29, 94, 64, 112,
- 157, 208, 12, 127, 113, 12, 10, 244, 10, 183,
- 24, 123, 201, 198, 5, 91, 144, 181, 89, 203,
- 5, 118, 48, 11, 134, 8, 10, 149, 176, 113,
- 210, 134, 31, 249, 97, 109, 36, 100, 171, 0,
- 178, 14, 119, 106, 24, 7, 2, 110, 226, 166,
- 119, 229, 22, 33, 232, 182, 67, 88, 120, 129,
- 201, 26, 111, 189, 32, 28, 109, 65, 10, 166,
- 192, 102, 114, 129, 120, 251, 22, 8, 100, 160,
- 8, 209, 225, 5, 93, 112, 184, 134, 251, 7,
- 4, 103, 112, 6, 224, 14, 199, 224, 10, 202,
- 48, 76, 120, 64, 136, 87, 219, 81, 89, 50,
- 9, 65, 38, 12, 212, 224, 85, 161, 32, 14,
- 109, 0, 12, 131, 52, 114, 35, 68, 66, 212,
- 134, 178, 237, 160, 114, 160, 113, 72, 196, 183,
- 32, 46, 81, 1, 139, 21, 33, 55, 112, 21,
- 65, 208, 101, 55, 167, 9, 142, 144, 183, 241,
- 195, 8, 169, 38, 34, 240, 21, 6, 128, 187,
- 28, 129, 240, 63, 207, 33, 112, 139, 2, 112,
- 93, 224, 5, 144, 192, 14, 240, 96, 15, 15,
- 144, 12, 173, 66, 13, 231, 0, 113, 87, 107,
- 43, 233, 138, 122, 15, 103, 12, 202, 144, 10,
- 148, 192, 127, 230, 234, 9, 223, 112, 11, 237,
- 255, 48, 15, 117, 186, 14, 240, 64, 72, 244,
- 176, 109, 5, 160, 31, 229, 11, 26, 187, 234,
- 114, 138, 180, 26, 174, 11, 73, 145, 52, 17,
- 164, 230, 110, 56, 151, 187, 207, 122, 165, 245,
- 134, 22, 193, 171, 111, 33, 178, 8, 99, 240,
- 7, 2, 124, 9, 93, 208, 125, 112, 32, 142,
- 52, 226, 11, 197, 128, 177, 189, 0, 14, 76,
- 226, 42, 180, 112, 70, 145, 112, 7, 195, 164,
- 104, 194, 112, 14, 98, 119, 14, 14, 240, 3,
- 20, 240, 142, 178, 64, 9, 120, 96, 7, 178,
- 48, 10, 110, 103, 109, 143, 54, 10, 222, 112,
- 61, 246, 209, 14, 215, 144, 119, 47, 183, 119,
- 127, 247, 72, 19, 113, 2, 95, 65, 120, 97,
- 150, 8, 100, 144, 195, 152, 176, 8, 67, 52,
- 8, 74, 100, 10, 39, 130, 73, 68, 215, 34,
- 138, 66, 196, 226, 8, 117, 78, 55, 41, 165,
- 88, 10, 204, 226, 9, 177, 16, 0, 228, 48,
- 43, 3, 85, 14, 139, 65, 13, 194, 224, 181,
- 181, 64, 12, 252, 176, 0, 169, 128, 0, 174,
- 64, 71, 162, 87, 9, 33, 12, 11, 201, 227,
- 69, 122, 6, 154, 153, 137, 13, 199, 160, 13,
- 171, 235, 194, 9, 178, 119, 114, 210, 119, 51,
- 124, 33, 25, 130, 9, 70, 155, 28, 32, 34,
- 34, 79, 148, 9, 167, 32, 125, 42, 146, 94,
- 45, 34, 41, 71, 76, 121, 78, 167, 69, 142,
- 144, 177, 169, 64, 126, 215, 255, 224, 121, 125,
- 88, 170, 125, 216, 60, 204, 160, 12, 148, 128,
- 122, 193, 244, 112, 183, 210, 181, 170, 18, 10,
- 118, 192, 5, 133, 112, 8, 93, 18, 65, 210,
- 16, 48, 223, 192, 14, 200, 176, 14, 163, 48,
- 10, 225, 27, 67, 110, 252, 77, 113, 18, 39,
- 244, 251, 21, 150, 80, 120, 152, 148, 120, 33,
- 50, 116, 151, 212, 199, 41, 242, 39, 135, 210,
- 84, 148, 55, 74, 78, 7, 8, 112, 224, 34,
- 49, 162, 11, 187, 192, 9, 188, 208, 10, 205,
- 240, 13, 55, 161, 75, 233, 64, 75, 181, 212,
- 95, 59, 56, 13, 12, 167, 122, 171, 167, 70,
- 147, 192, 139, 227, 224, 6, 119, 16, 9, 173,
- 64, 128, 0, 184, 10, 202, 210, 76, 186, 215,
- 37, 189, 151, 13, 223, 192, 198, 238, 203, 38,
- 245, 160, 1, 226, 36, 39, 174, 217, 101, 222,
- 178, 11, 153, 20, 125, 210, 71, 125, 125, 114,
- 10, 214, 23, 74, 133, 28, 35, 166, 100, 74,
- 95, 240, 11, 154, 96, 10, 169, 208, 123, 191,
- 199, 37, 0, 99, 126, 166, 130, 75, 225, 0,
- 15, 11, 227, 108, 181, 160, 65, 196, 52, 9,
- 248, 39, 14, 182, 48, 11, 192, 208, 10, 185,
- 167, 44, 222, 236, 205, 196, 226, 43, 196, 178,
- 44, 93, 146, 77, 45, 129, 206, 50, 212, 0,
- 28, 48, 89, 156, 117, 21, 45, 176, 62, 241,
- 76, 98, 139, 64, 40, 155, 196, 78, 236, 84,
- 12, 187, 255, 188, 40, 193, 28, 204, 169, 212,
- 5, 207, 164, 11, 57, 210, 161, 173, 80, 75,
- 191, 39, 20, 173, 240, 9, 58, 225, 80, 203,
- 0, 14, 71, 29, 122, 6, 106, 11, 181, 64,
- 127, 176, 194, 135, 228, 48, 13, 110, 128, 7,
- 148, 0, 10, 221, 124, 8, 104, 176, 9, 206,
- 100, 123, 9, 216, 49, 8, 248, 49, 195, 178,
- 6, 187, 23, 210, 209, 80, 15, 28, 80, 89,
- 51, 112, 147, 19, 145, 179, 94, 1, 1, 208,
- 32, 47, 158, 212, 39, 187, 192, 129, 169, 102,
- 203, 4, 220, 5, 111, 144, 215, 112, 240, 125,
- 144, 80, 7, 111, 240, 5, 127, 224, 27, 189,
- 112, 104, 211, 32, 14, 228, 32, 10, 224, 16,
- 13, 245, 226, 10, 205, 178, 12, 71, 93, 75,
- 224, 32, 14, 5, 19, 10, 161, 224, 122, 125,
- 40, 43, 211, 80, 9, 226, 177, 205, 173, 64,
- 8, 75, 168, 5, 139, 232, 132, 140, 88, 44,
- 29, 179, 44, 3, 128, 89, 208, 114, 147, 88,
- 9, 176, 63, 20, 207, 114, 45, 211, 125, 44,
- 111, 134, 231, 63, 94, 16, 138, 111, 208, 5,
- 104, 208, 215, 111, 224, 5, 98, 24, 7, 153,
- 64, 211, 191, 144, 12, 146, 173, 48, 164, 226,
- 9, 70, 241, 10, 175, 16, 11, 203, 16, 14,
- 58, 152, 14, 224, 160, 12, 227, 80, 14, 94,
- 235, 159, 229, 64, 80, 179, 2, 123, 20, 183,
- 5, 71, 88, 7, 192, 114, 128, 7, 255, 104,
- 82, 163, 253, 49, 43, 229, 82, 34, 96, 147,
- 208, 120, 45, 198, 170, 133, 233, 228, 133, 241,
- 182, 183, 153, 224, 33, 98, 56, 138, 111, 80,
- 7, 169, 128, 5, 235, 194, 7, 189, 29, 6,
- 171, 115, 10, 166, 208, 10, 80, 172, 14, 241,
- 161, 52, 89, 229, 9, 173, 32, 139, 225, 16,
- 81, 82, 44, 217, 70, 194, 12, 127, 56, 13,
- 1, 48, 127, 147, 171, 108, 160, 128, 136, 104,
- 32, 82, 30, 125, 82, 225, 253, 10, 28, 0,
- 137, 105, 179, 57, 18, 161, 210, 40, 32, 94,
- 179, 121, 115, 122, 178, 8, 239, 212, 33, 98,
- 32, 223, 244, 125, 5, 159, 168, 7, 104, 232,
- 5, 49, 162, 9, 135, 224, 86, 233, 16, 122,
- 112, 24, 12, 2, 112, 96, 176, 192, 156, 31,
- 25, 122, 214, 109, 36, 213, 253, 135, 12, 195,
- 42, 15, 77, 127, 81, 3, 10, 254, 104, 49,
- 238, 149, 49, 30, 205, 136, 159, 208, 0, 35,
- 35, 147, 146, 232, 175, 60, 36, 187, 69, 64,
- 94, 29, 113, 115, 114, 96, 23, 134, 75, 7,
- 144, 192, 226, 45, 174, 7, 161, 248, 46, 127,
- 64, 41, 157, 192, 9, 191, 176, 10, 177, 26,
- 0, 197, 195, 12, 227, 0, 11, 160, 96, 224,
- 71, 13, 221, 146, 173, 12, 178, 0, 14, 31,
- 204, 212, 236, 209, 85, 189, 120, 7, 253, 55,
- 140, 254, 152, 136, 34, 133, 44, 24, 78, 44,
- 175, 0, 15, 100, 255, 67, 50, 29, 238, 225,
- 51, 117, 45, 62, 80, 4, 143, 105, 151, 190,
- 240, 11, 101, 16, 230, 103, 40, 84, 127, 221,
- 161, 165, 128, 33, 191, 112, 230, 13, 228, 64,
- 29, 9, 139, 191, 23, 65, 31, 9, 14, 149,
- 32, 143, 21, 149, 139, 187, 72, 53, 179, 160,
- 12, 254, 247, 4, 80, 0, 235, 87, 48, 235,
- 107, 197, 86, 105, 96, 232, 5, 16, 87, 27,
- 176, 140, 6, 217, 150, 16, 177, 54, 211, 168,
- 2, 57, 21, 92, 69, 128, 10, 181, 253, 137,
- 99, 174, 46, 123, 208, 5, 146, 66, 18, 128,
- 112, 18, 190, 0, 80, 233, 197, 10, 172, 208,
- 13, 157, 160, 9, 159, 48, 77, 201, 45, 146,
- 241, 40, 10, 179, 128, 85, 91, 165, 42, 239,
- 216, 127, 81, 208, 143, 83, 64, 86, 96, 0,
- 232, 173, 80, 163, 4, 105, 54, 29, 96, 50,
- 56, 153, 50, 112, 35, 151, 26, 153, 151, 69,
- 32, 51, 17, 16, 1, 151, 80, 79, 35, 168,
- 7, 222, 184, 51, 111, 32, 35, 183, 105, 35,
- 154, 224, 10, 237, 40, 11, 178, 0, 12, 7,
- 207, 36, 90, 23, 182, 110, 64, 217, 242, 40,
- 10, 167, 74, 11, 67, 104, 231, 90, 3, 5,
- 177, 62, 5, 92, 19, 14, 34, 179, 140, 4,
- 249, 238, 7, 25, 239, 22, 186, 54, 55, 192,
- 149, 64, 176, 151, 17, 121, 90, 20, 208, 13,
- 155, 0, 6, 59, 51, 5, 124, 128, 192, 190,
- 139, 208, 10, 70, 35, 11, 145, 16, 9, 146,
- 144, 243, 103, 247, 142, 180, 64, 30, 76, 19,
- 143, 180, 160, 12, 142, 157, 0, 9, 208, 0,
- 12, 48, 1, 49, 41, 147, 98, 147, 232, 6,
- 169, 148, 140, 238, 148, 114, 131, 4, 67, 16,
- 4, 63, 176, 3, 139, 35, 145, 129, 73, 93,
- 133, 5, 21, 21, 38, 27, 57, 36, 183, 141,
- 245, 88, 145, 165, 3, 147, 229, 146, 152, 229,
- 82, 73, 223, 82, 52, 48, 45, 114, 147, 152,
- 6, 177, 148, 53, 112, 4, 164, 213, 87, 131,
- 181, 245, 152, 115, 88, 66, 9, 187, 142, 165,
- 4, 173, 44, 89, 147, 37, 129, 50, 224, 244,
- 109, 239, 246, 191, 78, 149, 134, 127, 248, 34,
- 79, 248, 35, 143, 248, 134, 239, 246, 1, 1,
- 0, 59 };
diff --git a/main/main.c b/main/main.c
deleted file mode 100644
index f1080f62cf..0000000000
--- a/main/main.c
+++ /dev/null
@@ -1,1778 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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. |
- +----------------------------------------------------------------------+
- | Authors: Andi Gutmans <andi@zend.com> |
- | Rasmus Lerdorf <rasmus@lerdorf.on.ca> |
- | Zeev Suraski <zeev@zend.com> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-/* {{{ includes
- */
-
-#define ZEND_INCLUDE_FULL_WINDOWS_HEADERS
-
-#include "php.h"
-#include <stdio.h>
-#ifdef PHP_WIN32
-#include "win32/time.h"
-#include "win32/signal.h"
-#include <process.h>
-#elif defined(NETWARE)
-#ifdef NEW_LIBC
-#include <sys/timeval.h>
-#else
-#include "netware/time_nw.h"
-#endif
-/*#include "netware/signal_nw.h"*/
-/*#include "netware/env.h"*/ /* Temporary */
-/*#include <process.h>*/
-#ifdef USE_WINSOCK
-#include <novsock2.h>
-#endif
-#endif
-#if HAVE_SYS_TIME_H
-#include <sys/time.h>
-#endif
-#if HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-#if HAVE_SIGNAL_H
-#include <signal.h>
-#endif
-#if HAVE_SETLOCALE
-#include <locale.h>
-#endif
-#include "zend.h"
-#include "zend_extensions.h"
-#include "php_ini.h"
-#include "php_globals.h"
-#include "php_main.h"
-#include "fopen_wrappers.h"
-#include "ext/standard/php_standard.h"
-#include "php_variables.h"
-#include "ext/standard/credits.h"
-#ifdef PHP_WIN32
-#include <io.h>
-#include <fcntl.h>
-#include "win32/php_registry.h"
-#endif
-#include "php_syslog.h"
-#include "Zend/zend_exceptions.h"
-
-#if PHP_SIGCHILD
-#include <sys/types.h>
-#include <sys/wait.h>
-#endif
-
-#include "zend_compile.h"
-#include "zend_execute.h"
-#include "zend_highlight.h"
-#include "zend_indent.h"
-#include "zend_extensions.h"
-#include "zend_ini.h"
-
-#include "php_content_types.h"
-#include "php_ticks.h"
-#include "php_logos.h"
-#include "php_streams.h"
-
-#include "SAPI.h"
-#include "rfc1867.h"
-/* }}} */
-
-#ifndef ZTS
-php_core_globals core_globals;
-#else
-PHPAPI int core_globals_id;
-#endif
-
-#define SAFE_FILENAME(f) ((f)?(f):"-")
-
-/* {{{ PHP_INI_MH
- */
-static PHP_INI_MH(OnSetPrecision)
-{
- EG(precision) = atoi(new_value);
- return SUCCESS;
-}
-/* }}} */
-
-#if MEMORY_LIMIT
-/* {{{ PHP_INI_MH
- */
-static PHP_INI_MH(OnChangeMemoryLimit)
-{
- if (new_value) {
- PG(memory_limit) = zend_atoi(new_value, new_value_length);
- } else {
- PG(memory_limit) = 1<<30; /* effectively, no limit */
- }
- return zend_set_memory_limit(PG(memory_limit));
-}
-/* }}} */
-#endif
-
-
-/* {{{ php_disable_functions
- */
-static void php_disable_functions(TSRMLS_D)
-{
- char *s = NULL, *e;
-
- if (!*(INI_STR("disable_functions"))) {
- return;
- }
-
- e = PG(disable_functions) = strdup(INI_STR("disable_functions"));
-
- while (*e) {
- switch (*e) {
- case ' ':
- case ',':
- if (s) {
- *e = '\0';
- zend_disable_function(s, e-s TSRMLS_CC);
- s = NULL;
- }
- break;
- default:
- if (!s) {
- s = e;
- }
- break;
- }
- e++;
- }
- if (s) {
- zend_disable_function(s, e-s TSRMLS_CC);
- }
-}
-/* }}} */
-
-/* {{{ php_disable_classes
- */
-static void php_disable_classes(TSRMLS_D)
-{
- char *s = NULL, *e;
-
- if (!*(INI_STR("disable_classes"))) {
- return;
- }
-
- e = PG(disable_classes) = strdup(INI_STR("disable_classes"));
-
- while (*e) {
- switch (*e) {
- case ' ':
- case ',':
- if (s) {
- *e = '\0';
- zend_disable_class(s, e-s TSRMLS_CC);
- s = NULL;
- }
- break;
- default:
- if (!s) {
- s = e;
- }
- break;
- }
- e++;
- }
- if (s) {
- zend_disable_class(s, e-s TSRMLS_CC);
- }
-}
-/* }}} */
-
-/* {{{ PHP_INI_MH
- */
-static PHP_INI_MH(OnUpdateTimeout)
-{
- EG(timeout_seconds) = atoi(new_value);
- if (stage==PHP_INI_STAGE_STARTUP) {
- /* Don't set a timeout on startup, only per-request */
- return SUCCESS;
- }
- zend_unset_timeout(TSRMLS_C);
- zend_set_timeout(EG(timeout_seconds));
- return SUCCESS;
-}
-/* }}} */
-
-/* Need to convert to strings and make use of:
- * PHP_SAFE_MODE
- *
- * Need to be read from the environment (?):
- * PHP_AUTO_PREPEND_FILE
- * PHP_AUTO_APPEND_FILE
- * PHP_DOCUMENT_ROOT
- * PHP_USER_DIR
- * PHP_INCLUDE_PATH
- */
-
-#ifndef PHP_SAFE_MODE_EXEC_DIR
-# define PHP_SAFE_MODE_EXEC_DIR ""
-#endif
-
-#ifdef PHP_PROG_SENDMAIL
-# define DEFAULT_SENDMAIL_PATH PHP_PROG_SENDMAIL " -t -i "
-#else
-# define DEFAULT_SENDMAIL_PATH NULL
-#endif
-/* {{{ PHP_INI
- */
-PHP_INI_BEGIN()
- PHP_INI_ENTRY_EX("define_syslog_variables", "0", PHP_INI_ALL, NULL, php_ini_boolean_displayer_cb)
- PHP_INI_ENTRY_EX("highlight.bg", HL_BG_COLOR, PHP_INI_ALL, NULL, php_ini_color_displayer_cb)
- PHP_INI_ENTRY_EX("highlight.comment", HL_COMMENT_COLOR, PHP_INI_ALL, NULL, php_ini_color_displayer_cb)
- PHP_INI_ENTRY_EX("highlight.default", HL_DEFAULT_COLOR, PHP_INI_ALL, NULL, php_ini_color_displayer_cb)
- PHP_INI_ENTRY_EX("highlight.html", HL_HTML_COLOR, PHP_INI_ALL, NULL, php_ini_color_displayer_cb)
- PHP_INI_ENTRY_EX("highlight.keyword", HL_KEYWORD_COLOR, PHP_INI_ALL, NULL, php_ini_color_displayer_cb)
- PHP_INI_ENTRY_EX("highlight.string", HL_STRING_COLOR, PHP_INI_ALL, NULL, php_ini_color_displayer_cb)
-
- STD_PHP_INI_BOOLEAN("allow_call_time_pass_reference", "1", PHP_INI_SYSTEM|PHP_INI_PERDIR, OnUpdateBool, allow_call_time_pass_reference, zend_compiler_globals, compiler_globals)
- STD_PHP_INI_BOOLEAN("asp_tags", "0", PHP_INI_SYSTEM|PHP_INI_PERDIR, OnUpdateBool, asp_tags, zend_compiler_globals, compiler_globals)
- STD_PHP_INI_BOOLEAN("display_errors", "1", PHP_INI_ALL, OnUpdateBool, display_errors, php_core_globals, core_globals)
- STD_PHP_INI_BOOLEAN("display_startup_errors", "0", PHP_INI_ALL, OnUpdateBool, display_startup_errors, php_core_globals, core_globals)
- STD_PHP_INI_BOOLEAN("enable_dl", "1", PHP_INI_SYSTEM, OnUpdateBool, enable_dl, php_core_globals, core_globals)
- STD_PHP_INI_BOOLEAN("expose_php", "1", PHP_INI_SYSTEM, OnUpdateBool, expose_php, php_core_globals, core_globals)
- STD_PHP_INI_ENTRY("docref_root", "", PHP_INI_ALL, OnUpdateString, docref_root, php_core_globals, core_globals)
- STD_PHP_INI_ENTRY("docref_ext", "", PHP_INI_ALL, OnUpdateString, docref_ext, php_core_globals, core_globals)
- STD_PHP_INI_BOOLEAN("html_errors", "1", PHP_INI_ALL, OnUpdateBool, html_errors, php_core_globals, core_globals)
- STD_PHP_INI_BOOLEAN("xmlrpc_errors", "0", PHP_INI_SYSTEM, OnUpdateBool, xmlrpc_errors, php_core_globals, core_globals)
- STD_PHP_INI_ENTRY("xmlrpc_error_number", "0", PHP_INI_ALL, OnUpdateLong, xmlrpc_error_number, php_core_globals, core_globals)
- STD_PHP_INI_ENTRY("max_input_time", "-1", PHP_INI_SYSTEM|PHP_INI_PERDIR, OnUpdateLong, max_input_time, php_core_globals, core_globals)
- STD_PHP_INI_BOOLEAN("ignore_user_abort", "0", PHP_INI_ALL, OnUpdateBool, ignore_user_abort, php_core_globals, core_globals)
- STD_PHP_INI_BOOLEAN("implicit_flush", "0", PHP_INI_ALL, OnUpdateBool, implicit_flush, php_core_globals, core_globals)
- STD_PHP_INI_BOOLEAN("log_errors", "0", PHP_INI_ALL, OnUpdateBool, log_errors, php_core_globals, core_globals)
- STD_PHP_INI_ENTRY("log_errors_max_len", "1024", PHP_INI_ALL, OnUpdateLong, log_errors_max_len, php_core_globals, core_globals)
- STD_PHP_INI_BOOLEAN("ignore_repeated_errors", "0", PHP_INI_ALL, OnUpdateBool, ignore_repeated_errors, php_core_globals, core_globals)
- STD_PHP_INI_BOOLEAN("ignore_repeated_source", "0", PHP_INI_ALL, OnUpdateBool, ignore_repeated_source, php_core_globals, core_globals)
- STD_PHP_INI_BOOLEAN("report_memleaks", "1", PHP_INI_ALL, OnUpdateBool, report_memleaks, php_core_globals, core_globals)
- STD_PHP_INI_BOOLEAN("report_zend_debug", "1", PHP_INI_ALL, OnUpdateBool, report_zend_debug, php_core_globals, core_globals)
- STD_PHP_INI_BOOLEAN("magic_quotes_gpc", "1", PHP_INI_PERDIR|PHP_INI_SYSTEM, OnUpdateBool, magic_quotes_gpc, php_core_globals, core_globals)
- STD_PHP_INI_BOOLEAN("magic_quotes_runtime", "0", PHP_INI_ALL, OnUpdateBool, magic_quotes_runtime, php_core_globals, core_globals)
- STD_PHP_INI_BOOLEAN("magic_quotes_sybase", "0", PHP_INI_ALL, OnUpdateBool, magic_quotes_sybase, php_core_globals, core_globals)
- STD_PHP_INI_ENTRY("output_buffering", "0", PHP_INI_PERDIR|PHP_INI_SYSTEM, OnUpdateLong, output_buffering, php_core_globals, core_globals)
- STD_PHP_INI_ENTRY("output_handler", NULL, PHP_INI_PERDIR|PHP_INI_SYSTEM, OnUpdateString, output_handler, php_core_globals, core_globals)
- STD_PHP_INI_BOOLEAN("register_argc_argv", "1", PHP_INI_PERDIR|PHP_INI_SYSTEM, OnUpdateBool, register_argc_argv, php_core_globals, core_globals)
- STD_PHP_INI_BOOLEAN("register_globals", "0", PHP_INI_PERDIR|PHP_INI_SYSTEM, OnUpdateBool, register_globals, php_core_globals, core_globals)
- STD_PHP_INI_BOOLEAN("register_long_arrays", "1", PHP_INI_PERDIR|PHP_INI_SYSTEM, OnUpdateBool, register_long_arrays, php_core_globals, core_globals)
- STD_PHP_INI_BOOLEAN("auto_globals_jit", "1", PHP_INI_PERDIR|PHP_INI_SYSTEM, OnUpdateBool, auto_globals_jit, php_core_globals, core_globals)
-#if PHP_SAFE_MODE
- STD_PHP_INI_BOOLEAN("safe_mode", "1", PHP_INI_SYSTEM, OnUpdateBool, safe_mode, php_core_globals, core_globals)
-#else
- STD_PHP_INI_BOOLEAN("safe_mode", "0", PHP_INI_SYSTEM, OnUpdateBool, safe_mode, php_core_globals, core_globals)
-#endif
- STD_PHP_INI_ENTRY("safe_mode_include_dir", NULL, PHP_INI_SYSTEM, OnUpdateString, safe_mode_include_dir, php_core_globals, core_globals)
- STD_PHP_INI_BOOLEAN("safe_mode_gid", "0", PHP_INI_SYSTEM, OnUpdateBool, safe_mode_gid, php_core_globals, core_globals)
- STD_PHP_INI_BOOLEAN("short_open_tag", DEFAULT_SHORT_OPEN_TAG, PHP_INI_SYSTEM|PHP_INI_PERDIR, OnUpdateBool, short_tags, zend_compiler_globals, compiler_globals)
- STD_PHP_INI_BOOLEAN("sql.safe_mode", "0", PHP_INI_SYSTEM, OnUpdateBool, sql_safe_mode, php_core_globals, core_globals)
- STD_PHP_INI_BOOLEAN("track_errors", "0", PHP_INI_ALL, OnUpdateBool, track_errors, php_core_globals, core_globals)
- STD_PHP_INI_BOOLEAN("y2k_compliance", "1", PHP_INI_ALL, OnUpdateBool, y2k_compliance, php_core_globals, core_globals)
-
- STD_PHP_INI_ENTRY("unserialize_callback_func", NULL, PHP_INI_ALL, OnUpdateString, unserialize_callback_func, php_core_globals, core_globals)
- STD_PHP_INI_ENTRY("serialize_precision", "100", PHP_INI_ALL, OnUpdateLong, serialize_precision, php_core_globals, core_globals)
- STD_PHP_INI_ENTRY("arg_separator.output", "&", PHP_INI_ALL, OnUpdateStringUnempty, arg_separator.output, php_core_globals, core_globals)
- STD_PHP_INI_ENTRY("arg_separator.input", "&", PHP_INI_SYSTEM|PHP_INI_PERDIR, OnUpdateStringUnempty, arg_separator.input, php_core_globals, core_globals)
-
- STD_PHP_INI_ENTRY("auto_append_file", NULL, PHP_INI_SYSTEM|PHP_INI_PERDIR, OnUpdateString, auto_append_file, php_core_globals, core_globals)
- STD_PHP_INI_ENTRY("auto_prepend_file", NULL, PHP_INI_SYSTEM|PHP_INI_PERDIR, OnUpdateString, auto_prepend_file, php_core_globals, core_globals)
- STD_PHP_INI_ENTRY("doc_root", NULL, PHP_INI_SYSTEM, OnUpdateStringUnempty, doc_root, php_core_globals, core_globals)
- STD_PHP_INI_ENTRY("default_charset", SAPI_DEFAULT_CHARSET, PHP_INI_ALL, OnUpdateString, default_charset, sapi_globals_struct,sapi_globals)
- STD_PHP_INI_ENTRY("default_mimetype", SAPI_DEFAULT_MIMETYPE, PHP_INI_ALL, OnUpdateString, default_mimetype, sapi_globals_struct,sapi_globals)
- STD_PHP_INI_ENTRY("error_log", NULL, PHP_INI_ALL, OnUpdateString, error_log, php_core_globals, core_globals)
- STD_PHP_INI_ENTRY("extension_dir", PHP_EXTENSION_DIR, PHP_INI_SYSTEM, OnUpdateStringUnempty, extension_dir, php_core_globals, core_globals)
- STD_PHP_INI_ENTRY("include_path", PHP_INCLUDE_PATH, PHP_INI_ALL, OnUpdateStringUnempty, include_path, php_core_globals, core_globals)
- PHP_INI_ENTRY("max_execution_time", "30", PHP_INI_ALL, OnUpdateTimeout)
- STD_PHP_INI_ENTRY("open_basedir", NULL, PHP_INI_SYSTEM, OnUpdateString, open_basedir, php_core_globals, core_globals)
- STD_PHP_INI_ENTRY("safe_mode_exec_dir", PHP_SAFE_MODE_EXEC_DIR, PHP_INI_SYSTEM, OnUpdateString, safe_mode_exec_dir, php_core_globals, core_globals)
-
- STD_PHP_INI_BOOLEAN("file_uploads", "1", PHP_INI_SYSTEM, OnUpdateBool, file_uploads, php_core_globals, core_globals)
- STD_PHP_INI_ENTRY("upload_max_filesize", "2M", PHP_INI_SYSTEM|PHP_INI_PERDIR, OnUpdateLong, upload_max_filesize, php_core_globals, core_globals)
- STD_PHP_INI_ENTRY("post_max_size", "8M", PHP_INI_SYSTEM|PHP_INI_PERDIR, OnUpdateLong, post_max_size, sapi_globals_struct,sapi_globals)
- STD_PHP_INI_ENTRY("upload_tmp_dir", NULL, PHP_INI_SYSTEM, OnUpdateStringUnempty, upload_tmp_dir, php_core_globals, core_globals)
-
- STD_PHP_INI_ENTRY("user_dir", NULL, PHP_INI_SYSTEM, OnUpdateString, user_dir, php_core_globals, core_globals)
- STD_PHP_INI_ENTRY("variables_order", "EGPCS", PHP_INI_ALL, OnUpdateStringUnempty, variables_order, php_core_globals, core_globals)
-
- STD_PHP_INI_ENTRY("error_append_string", NULL, PHP_INI_ALL, OnUpdateString, error_append_string, php_core_globals, core_globals)
- STD_PHP_INI_ENTRY("error_prepend_string", NULL, PHP_INI_ALL, OnUpdateString, error_prepend_string, php_core_globals, core_globals)
-
- PHP_INI_ENTRY("SMTP", "localhost",PHP_INI_ALL, NULL)
- PHP_INI_ENTRY("smtp_port", "25", PHP_INI_ALL, NULL)
- PHP_INI_ENTRY("browscap", NULL, PHP_INI_SYSTEM, NULL)
-#if MEMORY_LIMIT
- PHP_INI_ENTRY("memory_limit", "8M", PHP_INI_ALL, OnChangeMemoryLimit)
-#endif
- PHP_INI_ENTRY("precision", "14", PHP_INI_ALL, OnSetPrecision)
- PHP_INI_ENTRY("sendmail_from", NULL, PHP_INI_ALL, NULL)
- PHP_INI_ENTRY("sendmail_path", DEFAULT_SENDMAIL_PATH, PHP_INI_SYSTEM, NULL)
- PHP_INI_ENTRY("mail.force_extra_parameters",NULL, PHP_INI_SYSTEM|PHP_INI_PERDIR, NULL)
- PHP_INI_ENTRY("disable_functions", "", PHP_INI_SYSTEM, NULL)
- PHP_INI_ENTRY("disable_classes", "", PHP_INI_SYSTEM, NULL)
-
- STD_PHP_INI_BOOLEAN("allow_url_fopen", "1", PHP_INI_SYSTEM, OnUpdateBool, allow_url_fopen, php_core_globals, core_globals)
- STD_PHP_INI_BOOLEAN("always_populate_raw_post_data", "0", PHP_INI_SYSTEM|PHP_INI_PERDIR, OnUpdateBool, always_populate_raw_post_data, php_core_globals, core_globals)
-
-PHP_INI_END()
-/* }}} */
-
-/* True globals (no need for thread safety */
-/* But don't make them a single int bitfield */
-static int module_initialized = 0;
-static int module_startup = 1;
-static int module_shutdown = 0;
-
-/* {{{ php_log_err
- */
-PHPAPI void php_log_err(char *log_message TSRMLS_DC)
-{
- FILE *log_file;
- char error_time_str[128];
- struct tm tmbuf;
- time_t error_time;
-
- /* Try to use the specified logging location. */
- if (PG(error_log) != NULL) {
-#ifdef HAVE_SYSLOG_H
- if (!strcmp(PG(error_log), "syslog")) {
- php_syslog(LOG_NOTICE, "%.500s", log_message);
- return;
- }
-#endif
- log_file = VCWD_FOPEN(PG(error_log), "a");
- if (log_file != NULL) {
- time(&error_time);
- strftime(error_time_str, sizeof(error_time_str), "%d-%b-%Y %H:%M:%S", php_localtime_r(&error_time, &tmbuf));
- fprintf(log_file, "[%s] ", error_time_str);
- fprintf(log_file, "%s", log_message);
- fprintf(log_file, "%s", PHP_EOL);
- fclose(log_file);
- return;
- }
- }
-
- /* Otherwise fall back to the default logging location, if we have one */
-
- if (sapi_module.log_message) {
- sapi_module.log_message(log_message);
- }
-}
-/* }}} */
-
-/* {{{ php_write
- wrapper for modules to use PHPWRITE */
-PHPAPI int php_write(void *buf, uint size TSRMLS_DC)
-{
- return PHPWRITE(buf, size);
-}
-/* }}} */
-
-/* {{{ php_printf
- */
-PHPAPI int php_printf(const char *format, ...)
-{
- va_list args;
- int ret;
- char *buffer;
- int size;
- TSRMLS_FETCH();
-
- va_start(args, format);
- size = vspprintf(&buffer, 0, format, args);
- ret = PHPWRITE(buffer, size);
- efree(buffer);
- va_end(args);
-
- return ret;
-}
-/* }}} */
-
-/* {{{ php_verror helpers */
-
-/* {{{ php_during_module_startup */
-static int php_during_module_startup()
-{
- return module_startup;
-}
-/* }}} */
-
-/* {{{ php_during_module_shutdown */
-static int php_during_module_shutdown()
-{
- return module_shutdown;
-}
-/* }}} */
-
-/* }}} */
-
-/* {{{ php_verror */
-/* php_verror is called from php_error_docref<n> functions.
- * Its purpose is to unify error messages and automatically generate clickable
- * html error messages if correcponding ini setting (html_errors) is activated.
- * See: CODING_STANDARDS for details.
- */
-PHPAPI void php_verror(const char *docref, const char *params, int type, const char *format, va_list args TSRMLS_DC)
-{
- char *buffer = NULL, *docref_buf = NULL, *target = NULL;
- char *docref_target = "", *docref_root = "";
- char *p;
- int buffer_len = 0;
- char *space;
- char *class_name = get_active_class_name(&space TSRMLS_CC);
- char *function;
- char *origin;
- char *message;
- int is_function = 0;
-
- /* get error text into buffer and escape for html if necessary */
- buffer_len = vspprintf(&buffer, 0, format, args);
- if (PG(html_errors)) {
- int len;
- char *replace = php_escape_html_entities(buffer, buffer_len, &len, 0, ENT_COMPAT, NULL TSRMLS_CC);
- efree(buffer);
- buffer = replace;
- buffer_len = len;
- }
-
- /* which function caused the problem if any at all */
- if (php_during_module_startup()) {
- function = "PHP Startup";
- } else if (php_during_module_shutdown()) {
- function = "PHP Shutdown";
- } else {
- function = get_active_function_name(TSRMLS_C);
- if (!function || !strlen(function)) {
- function = "Unknown";
- } else {
- is_function = 1;
- }
- }
-
- /* if we still have memory then format the origin */
- if (is_function) {
- spprintf(&origin, 0, "%s%s%s(%s)", class_name, space, function, params);
- } else {
- spprintf(&origin, 0, "%s", function);
- }
-
- /* origin and buffer available, so lets come up with the error message */
- if (docref && docref[0] == '#') {
- docref_target = strchr(docref, '#');
- docref = NULL;
- }
-
- /* no docref given but function is known (the default) */
- if (!docref && is_function) {
- spprintf(&docref_buf, 0, "function.%s", function);
- while((p = strchr(docref_buf, '_')) != NULL) {
- *p = '-';
- }
- docref = docref_buf;
- }
-
- /* we have a docref for a function AND
- * - we show erroes in html mode OR
- * - the user wants to see the links anyway
- */
- if (docref && is_function && (PG(html_errors) || strlen(PG(docref_root)))) {
- if (strncmp(docref, "http://", 7)) {
- /* We don't have 'http://' so we use docref_root */
-
- char *ref; /* temp copy for duplicated docref */
-
- docref_root = PG(docref_root);
-
- ref = estrdup(docref);
- if (docref_buf) {
- efree(docref_buf);
- }
- docref_buf = ref;
- /* strip of the target if any */
- p = strrchr(ref, '#');
- if (p) {
- target = estrdup(p);
- if (target) {
- docref_target = target;
- *p = '\0';
- }
- }
- /* add the extension if it is set in ini */
- if (PG(docref_ext) && strlen(PG(docref_ext))) {
- spprintf(&docref_buf, 0, "%s%s", ref, PG(docref_ext));
- efree(ref);
- }
- docref = docref_buf;
- }
- /* display html formatted or only show the additional links */
- if (PG(html_errors)) {
- spprintf(&message, 0, "%s [<a href='%s%s%s'>%s</a>]: %s", origin, docref_root, docref, docref_target, docref, buffer);
- } else {
- spprintf(&message, 0, "%s [%s%s%s]: %s", origin, docref_root, docref, docref_target, buffer);
- }
- if (target) {
- efree(target);
- }
- } else {
- spprintf(&message, 0, "%s: %s", origin, buffer);
- }
- efree(origin);
- if (docref_buf) {
- efree(docref_buf);
- }
- php_error(type, "%s", message);
- efree(message);
-
- if (PG(track_errors) && module_initialized && EG(active_symbol_table)) {
- zval *tmp;
- ALLOC_INIT_ZVAL(tmp);
- ZVAL_STRINGL(tmp, buffer, buffer_len, 1);
- zend_hash_update(EG(active_symbol_table), "php_errormsg", sizeof("php_errormsg"), (void **) &tmp, sizeof(pval *), NULL);
- }
- efree(buffer);
-}
-/* }}} */
-
-/* {{{ php_error_docref */
-/* See: CODING_STANDARDS for details. */
-PHPAPI void php_error_docref(const char *docref TSRMLS_DC, int type, const char *format, ...)
-{
- va_list args;
-
- va_start(args, format);
- php_verror(docref, "", type, format, args TSRMLS_CC);
- va_end(args);
-}
-/* }}} */
-
-/* {{{ php_error_docref1 */
-/* See: CODING_STANDARDS for details. */
-PHPAPI void php_error_docref1(const char *docref TSRMLS_DC, const char *param1, int type, const char *format, ...)
-{
- va_list args;
-
- va_start(args, format);
- php_verror(docref, param1, type, format, args TSRMLS_CC);
- va_end(args);
-}
-/* }}} */
-
-/* {{{ php_error_docref2 */
-/* See: CODING_STANDARDS for details. */
-PHPAPI void php_error_docref2(const char *docref TSRMLS_DC, const char *param1, const char *param2, int type, const char *format, ...)
-{
- char *params;
- va_list args;
-
- spprintf(&params, 0, "%s,%s", param1, param2);
- va_start(args, format);
- php_verror(docref, params ? params : "...", type, format, args TSRMLS_CC);
- va_end(args);
- if (params) {
- efree(params);
- }
-}
-/* }}} */
-
-/* {{{ php_html_puts */
-PHPAPI void php_html_puts(const char *str, uint size TSRMLS_DC)
-{
- zend_html_puts(str, size TSRMLS_CC);
-}
-/* }}} */
-
-/* {{{ php_suppress_errors */
-PHPAPI void php_set_error_handling(error_handling_t error_handling, zend_class_entry *exception_class TSRMLS_DC) {
- PG(error_handling) = error_handling;
- PG(exception_class) = exception_class;
- if (PG(last_error_message)) {
- free(PG(last_error_message));
- PG(last_error_message) = NULL;
- }
- if (PG(last_error_file)) {
- free(PG(last_error_file));
- PG(last_error_file) = NULL;
- }
- PG(last_error_lineno) = 0;
-}
-/* }}} */
-
-/* {{{ php_error_cb
- extended error handling function */
-static void php_error_cb(int type, const char *error_filename, const uint error_lineno, const char *format, va_list args)
-{
- char *buffer;
- int buffer_len, display;
- TSRMLS_FETCH();
-
- buffer_len = vspprintf(&buffer, PG(log_errors_max_len), format, args);
-
- /* check for repeated errors to be ignored */
- if (PG(ignore_repeated_errors) && PG(last_error_message)) {
- /* no check for PG(last_error_file) is needed since it cannot
- * be NULL if PG(last_error_message) is not NULL */
- if (strcmp(PG(last_error_message), buffer)
- || (!PG(ignore_repeated_source)
- && ((PG(last_error_lineno) != error_lineno)
- || strcmp(PG(last_error_file), error_filename)))) {
- display = 1;
- } else {
- display = 0;
- }
- } else {
- display = 1;
- }
-
- /* store the error if it has changed */
- if (display) {
- if (PG(last_error_message)) {
- free(PG(last_error_message));
- }
- if (PG(last_error_file)) {
- free(PG(last_error_file));
- }
- PG(last_error_message) = strdup(buffer);
- PG(last_error_file) = strdup(error_filename);
- PG(last_error_lineno) = error_lineno;
- }
-
- /* according to error handling mode, suppress error, throw exception or show it */
- if (PG(error_handling) != EH_NORMAL) {
- switch (type) {
- case E_ERROR:
- case E_CORE_ERROR:
- case E_COMPILE_ERROR:
- case E_USER_ERROR:
- case E_PARSE:
- /* fatal errors are real errors and cannot be made exceptions */
- break;
- default:
- /* throw an exception if we are in EH_THROW mode
- * but DO NOT overwrite a pending excepption
- */
- if (PG(error_handling) == EH_THROW && !EG(exception)) {
- zend_throw_error_exception(PG(exception_class), buffer, 0, type TSRMLS_CC);
- }
- efree(buffer);
- return;
- }
- }
-
- /* display/log the error if necessary */
- if (display && (EG(error_reporting) & type || (type & E_CORE))
- && (PG(log_errors) || PG(display_errors) || (!module_initialized))) {
- char *error_type_str;
-
- switch (type) {
- case E_ERROR:
- case E_CORE_ERROR:
- case E_COMPILE_ERROR:
- case E_USER_ERROR:
- error_type_str = "Fatal error";
- break;
- case E_WARNING:
- case E_CORE_WARNING:
- case E_COMPILE_WARNING:
- case E_USER_WARNING:
- error_type_str = "Warning";
- break;
- case E_PARSE:
- error_type_str = "Parse error";
- break;
- case E_NOTICE:
- case E_USER_NOTICE:
- error_type_str = "Notice";
- break;
- case E_STRICT:
- error_type_str = "Strict Standards";
- break;
- default:
- error_type_str = "Unknown error";
- break;
- }
-
- if (!module_initialized || PG(log_errors)) {
- char *log_buffer;
-
-#ifdef PHP_WIN32
- if (type==E_CORE_ERROR || type==E_CORE_WARNING) {
- MessageBox(NULL, buffer, error_type_str, MB_OK|ZEND_SERVICE_MB_STYLE);
- }
-#endif
- spprintf(&log_buffer, 0, "PHP %s: %s in %s on line %d", error_type_str, buffer, error_filename, error_lineno);
- php_log_err(log_buffer TSRMLS_CC);
- efree(log_buffer);
- }
- if (PG(display_errors)
- && ((module_initialized && !PG(during_request_startup))
- || (PG(display_startup_errors)
- && (OG(php_body_write)==php_default_output_func || OG(php_body_write)==php_ub_body_write_no_header || OG(php_body_write)==php_ub_body_write)
- )
- )
- ) {
-
- if (PG(xmlrpc_errors)) {
- php_printf("<?xml version=\"1.0\"?><methodResponse><fault><value><struct><member><name>faultCode</name><value><int>%ld</int></value></member><member><name>faultString</name><value><string>%s:%s in %s on line %d</string></value></member></struct></value></fault></methodResponse>", PG(xmlrpc_error_number), error_type_str, buffer, error_filename, error_lineno);
- } else {
- char *prepend_string = INI_STR("error_prepend_string");
- char *append_string = INI_STR("error_append_string");
- char *error_format = PG(html_errors) ?
- "%s<br />\n<b>%s</b>: %s in <b>%s</b> on line <b>%d</b><br />\n%s"
- : "%s\n%s: %s in %s on line %d\n%s";
- php_printf(error_format, STR_PRINT(prepend_string), error_type_str, buffer, error_filename, error_lineno, STR_PRINT(append_string));
- }
- }
-#if ZEND_DEBUG
- if (PG(report_zend_debug)) {
- zend_bool trigger_break;
-
- switch (type) {
- case E_ERROR:
- case E_CORE_ERROR:
- case E_COMPILE_ERROR:
- case E_USER_ERROR:
- trigger_break=1;
- break;
- default:
- trigger_break=0;
- break;
- }
- zend_output_debug_string(trigger_break, "%s(%d) : %s - %s", error_filename, error_lineno, error_type_str, buffer);
- }
-#endif
- }
-
- /* Bail out if we can't recover */
- switch (type) {
- case E_CORE_ERROR:
- if(!module_initialized) {
- /* bad error in module startup - no way we can live with this */
- exit(-2);
- }
- /* no break - intentionally */
- case E_ERROR:
- /* case E_PARSE: the parser would return 1 (failure), we can bail out nicely */
- case E_COMPILE_ERROR:
- case E_USER_ERROR:
- EG(exit_status) = 255;
- if (module_initialized) {
-#if MEMORY_LIMIT
- /* restore memory limit */
- AG(memory_limit) = PG(memory_limit);
-#endif
- zend_bailout();
- efree(buffer);
- return;
- }
- break;
- }
-
- /* Log if necessary */
- if (!display) {
- efree(buffer);
- return;
- }
- if (PG(track_errors) && module_initialized && EG(active_symbol_table)) {
- pval *tmp;
-
- ALLOC_ZVAL(tmp);
- INIT_PZVAL(tmp);
- Z_STRVAL_P(tmp) = (char *) estrndup(buffer, buffer_len);
- Z_STRLEN_P(tmp) = buffer_len;
- Z_TYPE_P(tmp) = IS_STRING;
- zend_hash_update(EG(active_symbol_table), "php_errormsg", sizeof("php_errormsg"), (void **) & tmp, sizeof(pval *), NULL);
- }
- efree(buffer);
-}
-/* }}} */
-
-/* {{{ proto bool set_time_limit(int seconds)
- Sets the maximum time a script can run */
-PHP_FUNCTION(set_time_limit)
-{
- zval **new_timeout;
-
- if (PG(safe_mode)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Cannot set time limit in safe mode");
- RETURN_FALSE;
- }
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &new_timeout) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_string_ex(new_timeout);
- if (zend_alter_ini_entry("max_execution_time", sizeof("max_execution_time"), Z_STRVAL_PP(new_timeout), Z_STRLEN_PP(new_timeout), PHP_INI_USER, PHP_INI_STAGE_RUNTIME) == SUCCESS) {
- RETURN_TRUE;
- } else {
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-/* {{{ php_fopen_wrapper_for_zend
- */
-static FILE *php_fopen_wrapper_for_zend(const char *filename, char **opened_path)
-{
- TSRMLS_FETCH();
-
- return php_stream_open_wrapper_as_file((char *)filename, "rb", ENFORCE_SAFE_MODE|USE_PATH|IGNORE_URL_WIN|REPORT_ERRORS|STREAM_OPEN_FOR_INCLUDE, opened_path);
-}
-/* }}} */
-
-static void stream_closer_for_zend(void *handle TSRMLS_DC)
-{
- php_stream_close((php_stream*)handle);
-}
-
-static int php_stream_open_for_zend(const char *filename, zend_file_handle *handle TSRMLS_DC)
-{
- php_stream *stream;
-
- stream = php_stream_open_wrapper((char *)filename, "rb", ENFORCE_SAFE_MODE|USE_PATH|REPORT_ERRORS|STREAM_OPEN_FOR_INCLUDE, &handle->opened_path);
-
- if (stream) {
- handle->type = ZEND_HANDLE_STREAM;
- handle->filename = (char*)filename;
- handle->free_filename = 0;
- handle->handle.stream.handle = stream;
- handle->handle.stream.reader = (zend_stream_reader_t)_php_stream_read;
- handle->handle.stream.closer = stream_closer_for_zend;
- handle->handle.stream.interactive = 0;
-
- return SUCCESS;
- }
- return FAILURE;
-}
-
-
-/* {{{ php_get_configuration_directive_for_zend
- */
-static int php_get_configuration_directive_for_zend(char *name, uint name_length, zval *contents)
-{
- zval *retval = cfg_get_entry(name, name_length);
-
- if (retval) {
- *contents = *retval;
- return SUCCESS;
- } else {
- return FAILURE;
- }
-}
-/* }}} */
-
-/* {{{ php_message_handler_for_zend
- */
-static void php_message_handler_for_zend(long message, void *data)
-{
- TSRMLS_FETCH();
-
- switch (message) {
- case ZMSG_FAILED_INCLUDE_FOPEN:
- php_error_docref("function.include" TSRMLS_CC, E_WARNING, "Failed opening '%s' for inclusion (include_path='%s')", php_strip_url_passwd((char *) data), STR_PRINT(PG(include_path)));
- break;
- case ZMSG_FAILED_REQUIRE_FOPEN:
- php_error_docref("function.require" TSRMLS_CC, E_COMPILE_ERROR, "Failed opening required '%s' (include_path='%s')", php_strip_url_passwd((char *) data), STR_PRINT(PG(include_path)));
- break;
- case ZMSG_FAILED_HIGHLIGHT_FOPEN:
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Failed opening '%s' for highlighting", php_strip_url_passwd((char *) data));
- break;
- case ZMSG_MEMORY_LEAK_DETECTED:
- case ZMSG_MEMORY_LEAK_REPEATED:
-#if ZEND_DEBUG
- if (EG(error_reporting) & E_WARNING) {
- char memory_leak_buf[512];
-
- if (message==ZMSG_MEMORY_LEAK_DETECTED) {
- zend_mem_header *t = (zend_mem_header *) data;
- void *ptr = (void *)((char *)t+sizeof(zend_mem_header)+MEM_HEADER_PADDING);
-
- snprintf(memory_leak_buf, 512, "%s(%d) : Freeing 0x%.8lX (%d bytes), script=%s\n", t->filename, t->lineno, (unsigned long)ptr, t->size, SAFE_FILENAME(SG(request_info).path_translated));
- if (t->orig_filename) {
- char relay_buf[512];
-
- snprintf(relay_buf, 512, "%s(%d) : Actual location (location was relayed)\n", t->orig_filename, t->orig_lineno);
- strcat(memory_leak_buf, relay_buf);
- }
- } else {
- unsigned long leak_count = (unsigned long) data;
-
- snprintf(memory_leak_buf, 512, "Last leak repeated %ld time%s\n", leak_count, (leak_count>1?"s":""));
- }
-# if defined(PHP_WIN32)
- OutputDebugString(memory_leak_buf);
-# else
- fprintf(stderr, "%s", memory_leak_buf);
-# endif
- }
-#endif
- break;
- case ZMSG_MEMORY_LEAKS_GRAND_TOTAL:
-#if ZEND_DEBUG
- if (EG(error_reporting) & E_WARNING) {
- char memory_leak_buf[512];
-
- snprintf(memory_leak_buf, 512, "=== Total %d memory leaks detected ===\n", *((zend_uint *) data));
-# if defined(PHP_WIN32)
- OutputDebugString(memory_leak_buf);
-# else
- fprintf(stderr, "%s", memory_leak_buf);
-# endif
- }
-#endif
- break;
- case ZMSG_LOG_SCRIPT_NAME: {
- struct tm *ta, tmbuf;
- time_t curtime;
- char *datetime_str, asctimebuf[52];
-
- time(&curtime);
- ta = php_localtime_r(&curtime, &tmbuf);
- datetime_str = php_asctime_r(ta, asctimebuf);
- datetime_str[strlen(datetime_str)-1]=0; /* get rid of the trailing newline */
- fprintf(stderr, "[%s] Script: '%s'\n", datetime_str, SAFE_FILENAME(SG(request_info).path_translated));
- }
- break;
- }
-}
-/* }}} */
-
-
-void php_on_timeout(int seconds TSRMLS_DC)
-{
- PG(connection_status) |= PHP_CONNECTION_TIMEOUT;
- zend_set_timeout(EG(timeout_seconds));
-}
-
-#if PHP_SIGCHILD
-/* {{{ sigchld_handler
- */
-static void sigchld_handler(int apar)
-{
- while (waitpid(-1, NULL, WNOHANG) > 0);
- signal(SIGCHLD, sigchld_handler);
-}
-/* }}} */
-#endif
-
-/* {{{ php_start_sapi()
- */
-static int php_start_sapi(TSRMLS_D)
-{
- int retval = SUCCESS;
-
- if(!SG(sapi_started)) {
- zend_try {
- PG(during_request_startup) = 1;
-
- /* initialize global variables */
- PG(modules_activated) = 0;
- PG(header_is_being_sent) = 0;
- PG(connection_status) = PHP_CONNECTION_NORMAL;
-
- zend_activate(TSRMLS_C);
- zend_set_timeout(EG(timeout_seconds));
- zend_activate_modules(TSRMLS_C);
- PG(modules_activated)=1;
- } zend_catch {
- retval = FAILURE;
- } zend_end_try();
-
- SG(sapi_started) = 1;
- }
- return retval;
-}
-
-/* }}} */
-
-/* {{{ php_request_startup
- */
- #ifndef APACHE_HOOKS
-int php_request_startup(TSRMLS_D)
-{
- int retval = SUCCESS;
-
-#ifdef PHP_WIN32
- CoInitialize(NULL);
-#endif
-
-#if PHP_SIGCHILD
- signal(SIGCHLD, sigchld_handler);
-#endif
-
- zend_try {
- PG(during_request_startup) = 1;
-
- php_output_activate(TSRMLS_C);
-
- /* initialize global variables */
- PG(modules_activated) = 0;
- PG(header_is_being_sent) = 0;
- PG(connection_status) = PHP_CONNECTION_NORMAL;
-
- zend_activate(TSRMLS_C);
- sapi_activate(TSRMLS_C);
-
- if (PG(max_input_time) == -1) {
- zend_set_timeout(EG(timeout_seconds));
- } else {
- zend_set_timeout(PG(max_input_time));
- }
-
- if (PG(expose_php)) {
- sapi_add_header(SAPI_PHP_VERSION_HEADER, sizeof(SAPI_PHP_VERSION_HEADER)-1, 1);
- }
-
- if (PG(output_handler) && PG(output_handler)[0]) {
- php_start_ob_buffer_named(PG(output_handler), 0, 1 TSRMLS_CC);
- } else if (PG(output_buffering)) {
- if (PG(output_buffering)>1) {
- php_start_ob_buffer(NULL, PG(output_buffering), 1 TSRMLS_CC);
- } else {
- php_start_ob_buffer(NULL, 0, 1 TSRMLS_CC);
- }
- } else if (PG(implicit_flush)) {
- php_start_implicit_flush(TSRMLS_C);
- }
-
- /* We turn this off in php_execute_script() */
- /* PG(during_request_startup) = 0; */
-
- php_hash_environment(TSRMLS_C);
- zend_activate_modules(TSRMLS_C);
- PG(modules_activated)=1;
- } zend_catch {
- retval = FAILURE;
- } zend_end_try();
-
- return retval;
-}
-# else
-int php_request_startup(TSRMLS_D)
-{
- int retval = SUCCESS;
-
-#if PHP_SIGCHILD
- signal(SIGCHLD, sigchld_handler);
-#endif
-
- if (php_start_sapi() == FAILURE) {
- return FAILURE;
- }
-
- php_output_activate(TSRMLS_C);
- sapi_activate(TSRMLS_C);
- php_hash_environment(TSRMLS_C);
-
- zend_try {
- PG(during_request_startup) = 1;
- php_output_activate(TSRMLS_C);
- if (PG(expose_php)) {
- sapi_add_header(SAPI_PHP_VERSION_HEADER, sizeof(SAPI_PHP_VERSION_HEADER)-1, 1);
- }
- } zend_catch {
- retval = FAILURE;
- } zend_end_try();
-
- return retval;
-}
-# endif
-/* }}} */
-
-/* {{{ php_request_startup_for_hook
- */
-int php_request_startup_for_hook(TSRMLS_D)
-{
- int retval = SUCCESS;
-
-#if PHP_SIGCHLD
- signal(SIGCHLD, sigchld_handler);
-#endif
-
- if (php_start_sapi(TSRMLS_C) == FAILURE) {
- return FAILURE;
- }
-
- php_output_activate(TSRMLS_C);
- sapi_activate_headers_only(TSRMLS_C);
- php_hash_environment(TSRMLS_C);
-
- return retval;
-}
-/* }}} */
-
-/* {{{ php_request_shutdown_for_exec
- */
-void php_request_shutdown_for_exec(void *dummy)
-{
- TSRMLS_FETCH();
-
- /* used to close fd's in the 3..255 range here, but it's problematic
- */
- shutdown_memory_manager(1, 1 TSRMLS_CC);
-}
-/* }}} */
-
-/* {{{ php_request_shutdown_for_hook
- */
-void php_request_shutdown_for_hook(void *dummy)
-{
- TSRMLS_FETCH();
- if (PG(modules_activated)) zend_try {
- php_call_shutdown_functions();
- } zend_end_try();
-
- if (PG(modules_activated)) {
- zend_deactivate_modules(TSRMLS_C);
- }
-
- zend_try {
- int i;
-
- for (i = 0; i < NUM_TRACK_VARS; i++) {
- if (PG(http_globals)[i]) {
- zval_ptr_dtor(&PG(http_globals)[i]);
- }
- }
- } zend_end_try();
-
- zend_deactivate(TSRMLS_C);
-
- zend_try {
- sapi_deactivate(TSRMLS_C);
- } zend_end_try();
-
- zend_try {
- shutdown_memory_manager(CG(unclean_shutdown), 0 TSRMLS_CC);
- } zend_end_try();
-
- zend_try {
- zend_unset_timeout(TSRMLS_C);
- } zend_end_try();
-}
-
-/* }}} */
-
-/* {{{ php_request_shutdown
- */
-void php_request_shutdown(void *dummy)
-{
- zend_bool report_memleaks;
- TSRMLS_FETCH();
-
- report_memleaks = PG(report_memleaks);
- /* EG(opline_ptr) points into nirvana and therefore cannot be safely accessed
- * inside zend_executor callback functions.
- */
- EG(opline_ptr) = NULL;
-
- zend_try {
- php_end_ob_buffers((zend_bool)(SG(request_info).headers_only?0:1) TSRMLS_CC);
- } zend_end_try();
-
- zend_try {
- sapi_send_headers(TSRMLS_C);
- } zend_end_try();
-
- zend_try {
- zend_call_destructors(TSRMLS_C);
- } zend_end_try();
-
- if (PG(modules_activated)) zend_try {
- php_call_shutdown_functions();
- } zend_end_try();
-
- if (PG(modules_activated)) {
- zend_deactivate_modules(TSRMLS_C);
- }
-
- zend_try {
- int i;
-
- for (i=0; i<NUM_TRACK_VARS; i++) {
- if (PG(http_globals)[i]) {
- zval_ptr_dtor(&PG(http_globals)[i]);
- }
- }
- } zend_end_try();
-
-
- zend_deactivate(TSRMLS_C);
-
- zend_try {
- zend_post_deactivate_modules(TSRMLS_C);
- } zend_end_try();
-
- zend_try {
- sapi_deactivate(TSRMLS_C);
- } zend_end_try();
-
- zend_try {
- shutdown_memory_manager(CG(unclean_shutdown) || !report_memleaks, 0 TSRMLS_CC);
- } zend_end_try();
-
- zend_try {
- zend_unset_timeout(TSRMLS_C);
- } zend_end_try();
-
-#ifdef PHP_WIN32
- CoUninitialize();
-#endif
-}
-/* }}} */
-
-
-/* {{{ php_body_write_wrapper
- */
-static int php_body_write_wrapper(const char *str, uint str_length)
-{
- TSRMLS_FETCH();
- return php_body_write(str, str_length TSRMLS_CC);
-}
-/* }}} */
-
-#ifdef ZTS
-/* {{{ core_globals_ctor
- */
-static void core_globals_ctor(php_core_globals *core_globals TSRMLS_DC)
-{
- memset(core_globals, 0, sizeof(*core_globals));
-}
-/* }}} */
-#endif
-
-/* {{{ php_startup_extensions
- */
-int php_startup_extensions(zend_module_entry **ptr, int count)
-{
- zend_module_entry **end = ptr+count;
-
- while (ptr < end) {
- if (*ptr) {
- if (zend_startup_module(*ptr)==FAILURE) {
- return FAILURE;
- }
- }
- ptr++;
- }
- return SUCCESS;
-}
-/* }}} */
-
-
-/* {{{ php_module_startup
- */
-int php_module_startup(sapi_module_struct *sf, zend_module_entry *additional_modules, uint num_additional_modules)
-{
- zend_utility_functions zuf;
- zend_utility_values zuv;
- int module_number=0; /* for REGISTER_INI_ENTRIES() */
- char *php_os;
-#ifdef ZTS
- zend_executor_globals *executor_globals;
- void ***tsrm_ls;
-
- php_core_globals *core_globals;
-#endif
-#if defined(PHP_WIN32) || (defined(NETWARE) && defined(USE_WINSOCK))
- WORD wVersionRequested = MAKEWORD(2, 0);
- WSADATA wsaData;
-#endif
-#ifdef PHP_WIN32
- {
- DWORD dwVersion = GetVersion();
-
- /* Get build numbers for Windows NT or Win95 */
- if (dwVersion < 0x80000000){
- php_os="WINNT";
- } else {
- php_os="WIN32";
- }
- }
-#else
- php_os=PHP_OS;
-#endif
-
-#ifdef ZTS
- tsrm_ls = ts_resource(0);
-#endif
-
- module_shutdown = 0;
- module_startup = 1;
- sapi_initialize_empty_request(TSRMLS_C);
- sapi_activate(TSRMLS_C);
-
- if (module_initialized) {
- return SUCCESS;
- }
-
- sapi_module = *sf;
-
- php_output_startup();
- php_output_activate(TSRMLS_C);
-
- zuf.error_function = php_error_cb;
- zuf.printf_function = php_printf;
- zuf.write_function = php_body_write_wrapper;
- zuf.fopen_function = php_fopen_wrapper_for_zend;
- zuf.message_handler = php_message_handler_for_zend;
- zuf.block_interruptions = sapi_module.block_interruptions;
- zuf.unblock_interruptions = sapi_module.unblock_interruptions;
- zuf.get_configuration_directive = php_get_configuration_directive_for_zend;
- zuf.ticks_function = php_run_ticks;
- zuf.on_timeout = php_on_timeout;
- zuf.stream_open_function = php_stream_open_for_zend;
- zuf.vspprintf_function = vspprintf;
- zuf.getenv_function = sapi_getenv;
- zend_startup(&zuf, NULL, 1);
-
-#ifdef ZTS
- executor_globals = ts_resource(executor_globals_id);
- ts_allocate_id(&core_globals_id, sizeof(php_core_globals), (ts_allocate_ctor) core_globals_ctor, NULL);
- core_globals = ts_resource(core_globals_id);
-#endif
- EG(bailout_set) = 0;
- EG(error_reporting) = E_ALL & ~E_NOTICE;
-
- PG(header_is_being_sent) = 0;
- SG(request_info).headers_only = 0;
- SG(request_info).argv0 = NULL;
- SG(request_info).argc=0;
- SG(request_info).argv=(char **)NULL;
- PG(connection_status) = PHP_CONNECTION_NORMAL;
- PG(during_request_startup) = 0;
- PG(last_error_message) = NULL;
- PG(last_error_file) = NULL;
- PG(last_error_lineno) = 0;
- PG(error_handling) = EH_NORMAL;
- PG(disable_functions) = NULL;
- PG(disable_classes) = NULL;
-
-#if HAVE_SETLOCALE
- setlocale(LC_CTYPE, "");
-#endif
-
-#if HAVE_TZSET
- tzset();
-#endif
-
-#if defined(PHP_WIN32) || (defined(NETWARE) && defined(USE_WINSOCK))
- /* start up winsock services */
- if (WSAStartup(wVersionRequested, &wsaData) != 0) {
- php_printf("\nwinsock.dll unusable. %d\n", WSAGetLastError());
- return FAILURE;
- }
-#endif
-
- le_index_ptr = zend_register_list_destructors_ex(NULL, NULL, "index pointer", 0);
-
-
- /* this will read in php.ini, set up the configuration parameters,
- load zend extensions and register php function extensions
- to be loaded later */
- if (php_init_config() == FAILURE) {
- return FAILURE;
- }
-
- REGISTER_INI_ENTRIES();
- zend_register_standard_ini_entries(TSRMLS_C);
-
- /* initialize stream wrappers registry
- * (this uses configuration parameters from php.ini)
- */
- if (php_init_stream_wrappers(module_number TSRMLS_CC) == FAILURE) {
- php_printf("PHP: Unable to initialize stream url wrappers.\n");
- return FAILURE;
- }
-
- /* initialize registry for images to be used in phpinfo()
- (this uses configuration parameters from php.ini)
- */
- if (php_init_info_logos() == FAILURE) {
- php_printf("PHP: Unable to initialize info phpinfo logos.\n");
- return FAILURE;
- }
-
- zuv.html_errors = 1;
- zuv.import_use_extension = ".php";
- php_startup_auto_globals(TSRMLS_C);
- zend_set_utility_values(&zuv);
- php_startup_sapi_content_types();
-
- REGISTER_MAIN_STRINGL_CONSTANT("PHP_VERSION", PHP_VERSION, sizeof(PHP_VERSION)-1, CONST_PERSISTENT | CONST_CS);
- REGISTER_MAIN_STRINGL_CONSTANT("PHP_OS", php_os, strlen(php_os), CONST_PERSISTENT | CONST_CS);
- REGISTER_MAIN_STRINGL_CONSTANT("PHP_SAPI", sapi_module.name, strlen(sapi_module.name), CONST_PERSISTENT | CONST_CS);
- REGISTER_MAIN_STRINGL_CONSTANT("DEFAULT_INCLUDE_PATH", PHP_INCLUDE_PATH, sizeof(PHP_INCLUDE_PATH)-1, CONST_PERSISTENT | CONST_CS);
- REGISTER_MAIN_STRINGL_CONSTANT("PEAR_INSTALL_DIR", PEAR_INSTALLDIR, sizeof(PEAR_INSTALLDIR)-1, CONST_PERSISTENT | CONST_CS);
- REGISTER_MAIN_STRINGL_CONSTANT("PEAR_EXTENSION_DIR", PHP_EXTENSION_DIR, sizeof(PHP_EXTENSION_DIR)-1, CONST_PERSISTENT | CONST_CS);
- REGISTER_MAIN_STRINGL_CONSTANT("PHP_EXTENSION_DIR", PHP_EXTENSION_DIR, sizeof(PHP_EXTENSION_DIR)-1, CONST_PERSISTENT | CONST_CS);
- REGISTER_MAIN_STRINGL_CONSTANT("PHP_PREFIX", PHP_PREFIX, sizeof(PHP_PREFIX)-1, CONST_PERSISTENT | CONST_CS);
- REGISTER_MAIN_STRINGL_CONSTANT("PHP_BINDIR", PHP_BINDIR, sizeof(PHP_BINDIR)-1, CONST_PERSISTENT | CONST_CS);
- REGISTER_MAIN_STRINGL_CONSTANT("PHP_LIBDIR", PHP_LIBDIR, sizeof(PHP_LIBDIR)-1, CONST_PERSISTENT | CONST_CS);
- REGISTER_MAIN_STRINGL_CONSTANT("PHP_DATADIR", PHP_DATADIR, sizeof(PHP_DATADIR)-1, CONST_PERSISTENT | CONST_CS);
- REGISTER_MAIN_STRINGL_CONSTANT("PHP_SYSCONFDIR", PHP_SYSCONFDIR, sizeof(PHP_SYSCONFDIR)-1, CONST_PERSISTENT | CONST_CS);
- REGISTER_MAIN_STRINGL_CONSTANT("PHP_LOCALSTATEDIR", PHP_LOCALSTATEDIR, sizeof(PHP_LOCALSTATEDIR)-1, CONST_PERSISTENT | CONST_CS);
- REGISTER_MAIN_STRINGL_CONSTANT("PHP_CONFIG_FILE_PATH", PHP_CONFIG_FILE_PATH, sizeof(PHP_CONFIG_FILE_PATH)-1, CONST_PERSISTENT | CONST_CS);
- REGISTER_MAIN_STRINGL_CONSTANT("PHP_CONFIG_FILE_SCAN_DIR", PHP_CONFIG_FILE_SCAN_DIR, sizeof(PHP_CONFIG_FILE_SCAN_DIR)-1, CONST_PERSISTENT | CONST_CS);
- REGISTER_MAIN_STRINGL_CONSTANT("PHP_SHLIB_SUFFIX", PHP_SHLIB_SUFFIX, sizeof(PHP_SHLIB_SUFFIX)-1, CONST_PERSISTENT | CONST_CS);
- REGISTER_MAIN_STRINGL_CONSTANT("PHP_EOL", PHP_EOL, sizeof(PHP_EOL)-1, CONST_PERSISTENT | CONST_CS);
- php_output_register_constants(TSRMLS_C);
- php_rfc1867_register_constants(TSRMLS_C);
-
- if (php_startup_ticks(TSRMLS_C) == FAILURE) {
- php_printf("Unable to start PHP ticks\n");
- return FAILURE;
- }
-
- /* Register internal Zend classes */
- zend_register_default_classes(TSRMLS_C);
-
- /* startup extensions staticly compiled in */
- if (php_startup_internal_extensions() == FAILURE) {
- php_printf("Unable to start builtin modules\n");
- return FAILURE;
- }
-
- /* start additional PHP extensions */
- php_startup_extensions(&additional_modules, num_additional_modules);
-
-
- /* load and startup extensions compiled as shared objects (aka DLLs)
- as requested by php.ini entries
- theese are loaded after initialization of internal extensions
- as extensions *might* rely on things from ext/standard
- which is always an internal extension and to be initialized
- ahead of all other internals
- */
- php_ini_delayed_modules_startup(TSRMLS_C);
-
- /* disable certain classes and functions as requested by php.ini */
- php_disable_functions(TSRMLS_C);
- php_disable_classes(TSRMLS_C);
-
- /* start Zend extensions */
- zend_startup_extensions();
-
-#ifdef ZTS
- zend_post_startup(TSRMLS_C);
-#endif
-
- module_initialized = 1;
- sapi_deactivate(TSRMLS_C);
- module_startup = 0;
-
- /* we're done */
- return SUCCESS;
-}
-/* }}} */
-
-void php_module_shutdown_for_exec()
-{
- /* used to close fd's in the range 3.255 here, but it's problematic */
-}
-
-/* {{{ php_module_shutdown_wrapper
- */
-int php_module_shutdown_wrapper(sapi_module_struct *sapi_globals)
-{
- TSRMLS_FETCH();
- php_module_shutdown(TSRMLS_C);
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ php_module_shutdown
- */
-void php_module_shutdown(TSRMLS_D)
-{
- int module_number=0; /* for UNREGISTER_INI_ENTRIES() */
-
- module_shutdown = 1;
-
- if (!module_initialized) {
- return;
- }
-
-#if defined(PHP_WIN32) || (defined(NETWARE) && defined(USE_WINSOCK))
- /*close winsock */
- WSACleanup();
-#endif
-
- php_shutdown_ticks(TSRMLS_C);
- sapi_flush(TSRMLS_C);
-
- zend_shutdown(TSRMLS_C);
-
- php_shutdown_stream_wrappers(module_number TSRMLS_CC);
-
- php_shutdown_info_logos();
- UNREGISTER_INI_ENTRIES();
-
- /* close down the ini config */
- php_shutdown_config();
-
-#ifndef ZTS
- zend_ini_shutdown(TSRMLS_C);
- shutdown_memory_manager(CG(unclean_shutdown), 1 TSRMLS_CC);
-#else
- zend_ini_global_shutdown(TSRMLS_C);
-#endif
-
- module_initialized = 0;
- if (PG(last_error_message)) {
- free(PG(last_error_message));
- }
- if (PG(last_error_file)) {
- free(PG(last_error_file));
- }
- if (PG(disable_functions)) {
- free(PG(disable_functions));
- }
- if (PG(disable_classes)) {
- free(PG(disable_classes));
- }
-}
-/* }}} */
-
-
-/* {{{ php_execute_script
- */
-PHPAPI int php_execute_script(zend_file_handle *primary_file TSRMLS_DC)
-{
- zend_file_handle *prepend_file_p, *append_file_p;
- zend_file_handle prepend_file = {0}, append_file = {0};
-#if HAVE_BROKEN_GETCWD
- int old_cwd_fd = -1;
-#else
- char *old_cwd;
-#endif
- char *old_primary_file_path = NULL;
- int retval = 0;
-
- EG(exit_status) = 0;
- if (php_handle_special_queries(TSRMLS_C)) {
- zend_file_handle_dtor(primary_file);
- return 0;
- }
-#ifndef HAVE_BROKEN_GETCWD
-# define OLD_CWD_SIZE 4096
- old_cwd = do_alloca(OLD_CWD_SIZE);
- old_cwd[0] = '\0';
-#endif
-
- zend_try {
-#ifdef PHP_WIN32
- UpdateIniFromRegistry(primary_file->filename TSRMLS_CC);
-#endif
-
- PG(during_request_startup) = 0;
-
- if (primary_file->type == ZEND_HANDLE_FILENAME
- && primary_file->filename) {
-#if HAVE_BROKEN_GETCWD
- /* this looks nasty to me */
- old_cwd_fd = open(".", 0);
-#else
- VCWD_GETCWD(old_cwd, OLD_CWD_SIZE-1);
-#endif
- VCWD_CHDIR_FILE(primary_file->filename);
- }
-
- if (primary_file->filename) {
- char realfile[MAXPATHLEN];
- int realfile_len;
- int dummy = 1;
- if (VCWD_REALPATH(primary_file->filename, realfile)) {
- realfile_len = strlen(realfile);
- zend_hash_add(&EG(included_files), realfile, realfile_len+1, (void *)&dummy, sizeof(int), NULL);
- if (strncmp(realfile, primary_file->filename, realfile_len)) {
- old_primary_file_path = primary_file->filename;
- primary_file->filename = realfile;
- }
- }
- }
-
- if (PG(auto_prepend_file) && PG(auto_prepend_file)[0]) {
- prepend_file.filename = PG(auto_prepend_file);
- prepend_file.opened_path = NULL;
- prepend_file.free_filename = 0;
- prepend_file.type = ZEND_HANDLE_FILENAME;
- prepend_file_p = &prepend_file;
- } else {
- prepend_file_p = NULL;
- }
-
- if (PG(auto_append_file) && PG(auto_append_file)[0]) {
- append_file.filename = PG(auto_append_file);
- append_file.opened_path = NULL;
- append_file.free_filename = 0;
- append_file.type = ZEND_HANDLE_FILENAME;
- append_file_p = &append_file;
- } else {
- append_file_p = NULL;
- }
-#ifdef PHP_WIN32
- zend_unset_timeout(TSRMLS_C);
-#endif
- zend_set_timeout(INI_INT("max_execution_time"));
- retval = (zend_execute_scripts(ZEND_REQUIRE TSRMLS_CC, NULL, 3, prepend_file_p, primary_file, append_file_p) == SUCCESS);
-
- if (old_primary_file_path) {
- primary_file->filename = old_primary_file_path;
- }
-
- } zend_end_try();
-
-#if HAVE_BROKEN_GETCWD
- if (old_cwd_fd != -1) {
- fchdir(old_cwd_fd);
- close(old_cwd_fd);
- }
-#else
- if (old_cwd[0] != '\0') {
- VCWD_CHDIR(old_cwd);
- }
- free_alloca(old_cwd);
-#endif
- return retval;
-}
-/* }}} */
-
-/* {{{ php_execute_simple_script
- */
-PHPAPI int php_execute_simple_script(zend_file_handle *primary_file, zval **ret TSRMLS_DC)
-{
- char *old_cwd;
-
- EG(exit_status) = 0;
-#define OLD_CWD_SIZE 4096
- old_cwd = do_alloca(OLD_CWD_SIZE);
- old_cwd[0] = '\0';
-
- zend_try {
-#ifdef PHP_WIN32
- UpdateIniFromRegistry(primary_file->filename TSRMLS_CC);
-#endif
-
- PG(during_request_startup) = 0;
-
- if (primary_file->type == ZEND_HANDLE_FILENAME && primary_file->filename) {
- VCWD_GETCWD(old_cwd, OLD_CWD_SIZE-1);
- VCWD_CHDIR_FILE(primary_file->filename);
- }
- zend_execute_scripts(ZEND_REQUIRE TSRMLS_CC, ret, 1, primary_file);
- } zend_end_try();
-
- if (old_cwd[0] != '\0') {
- VCWD_CHDIR(old_cwd);
- }
-
- free_alloca(old_cwd);
- return EG(exit_status);
-}
-/* }}} */
-
-/* {{{ php_handle_aborted_connection
- */
-PHPAPI void php_handle_aborted_connection(void)
-{
- TSRMLS_FETCH();
-
- PG(connection_status) = PHP_CONNECTION_ABORTED;
- php_output_set_status(0 TSRMLS_CC);
-
- if (!PG(ignore_user_abort)) {
- zend_bailout();
- }
-}
-/* }}} */
-
-/* {{{ php_handle_auth_data
- */
-PHPAPI int php_handle_auth_data(const char *auth TSRMLS_DC)
-{
- int ret = -1;
-
- if (auth && auth[0] != '\0' && strncmp(auth, "Basic ", 6) == 0) {
- char *pass;
- char *user;
-
- user = php_base64_decode(auth + 6, strlen(auth) - 6, NULL);
- if (user) {
- pass = strchr(user, ':');
- if (pass) {
- *pass++ = '\0';
- SG(request_info).auth_user = user;
- SG(request_info).auth_password = estrdup(pass);
- ret = 0;
- } else {
- efree(user);
- }
- }
- }
-
- if (ret == -1) {
- SG(request_info).auth_user = SG(request_info).auth_password = NULL;
- }
-
- return ret;
-}
-/* }}} */
-
-/* {{{ php_lint_script
- */
-PHPAPI int php_lint_script(zend_file_handle *file TSRMLS_DC)
-{
- zend_op_array *op_array;
-
- zend_try {
- op_array = zend_compile_file(file, ZEND_INCLUDE TSRMLS_CC);
- zend_destroy_file_handle(file TSRMLS_CC);
-
- if (op_array) {
- destroy_op_array(op_array TSRMLS_CC);
- efree(op_array);
- return SUCCESS;
- } else {
- return FAILURE;
- }
- } zend_end_try();
-
- return FAILURE;
-}
-/* }}} */
-
-#ifdef PHP_WIN32
-/* {{{ dummy_indent
- just so that this symbol gets exported... */
-PHPAPI void dummy_indent()
-{
- zend_indent();
-}
-/* }}} */
-#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/main/mergesort.c b/main/mergesort.c
deleted file mode 100644
index 117f859e94..0000000000
--- a/main/mergesort.c
+++ /dev/null
@@ -1,363 +0,0 @@
-/*-
- * Copyright (c) 1992, 1993
- * The Regents of the University of California. All rights reserved.
- *
- * This code is derived from software contributed to Berkeley by
- * Peter McIlroy.
- *
- * 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. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement:
- * This product includes software developed by the University of
- * California, Berkeley and its contributors.
- * 4. 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.
- */
-
-/* $Id$ */
-
-#if defined(LIBC_SCCS) && !defined(lint)
-static char sccsid[] = "@(#)merge.c 8.2 (Berkeley) 2/14/94";
-#endif /* LIBC_SCCS and not lint */
-
-/*
- * Hybrid exponential search/linear search merge sort with hybrid
- * natural/pairwise first pass. Requires about .3% more comparisons
- * for random data than LSMS with pairwise first pass alone.
- * It works for objects as small as two bytes.
- */
-
-#define NATURAL
-#define THRESHOLD 16 /* Best choice for natural merge cut-off. */
-
-/* #define NATURAL to get hybrid natural merge.
- * (The default is pairwise merging.)
- */
-
-#include <sys/types.h>
-
-#include <errno.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include "php.h"
-
-#ifdef PHP_WIN32
-#include <winsock2.h> /* Includes definition for u_char */
-#endif
-
-#if defined(NETWARE) && !defined(NEW_LIBC)
-/*#include <ws2nlm.h>*/
-#include <sys/socket.h>
-#endif
-
-static void setup(u_char *list1, u_char *list2, size_t n, size_t size, int (*cmp)(const void *, const void * TSRMLS_DC) TSRMLS_DC);
-static void insertionsort(u_char *a, size_t n, size_t size, int (*cmp)(const void *, const void * TSRMLS_DC) TSRMLS_DC);
-
-#define ISIZE sizeof(int)
-#define PSIZE sizeof(u_char *)
-#define ICOPY_LIST(src, dst, last) \
- do \
- *(int*)dst = *(int*)src, src += ISIZE, dst += ISIZE; \
- while(src < last)
-#define ICOPY_ELT(src, dst, i) \
- do \
- *(int*) dst = *(int*) src, src += ISIZE, dst += ISIZE; \
- while (i -= ISIZE)
-
-#define CCOPY_LIST(src, dst, last) \
- do \
- *dst++ = *src++; \
- while (src < last)
-#define CCOPY_ELT(src, dst, i) \
- do \
- *dst++ = *src++; \
- while (i -= 1)
-
-/*
- * Find the next possible pointer head. (Trickery for forcing an array
- * to do double duty as a linked list when objects do not align with word
- * boundaries.
- */
-/* Assumption: PSIZE is a power of 2. */
-#define EVAL(p) (u_char **) \
- ((u_char *)0 + \
- (((u_char *)p + PSIZE - 1 - (u_char *) 0) & ~(PSIZE - 1)))
-
-/* {{{ php_mergesort
- * Arguments are as for qsort.
- */
-int php_mergesort(void *base, size_t nmemb, size_t size, int (*cmp)(const void *, const void * TSRMLS_DC) TSRMLS_DC)
-{
- register unsigned int i;
- register int sense;
- int big, iflag;
- register u_char *f1, *f2, *t, *b, *tp2, *q, *l1, *l2;
- u_char *list2, *list1, *p2, *p, *last, **p1;
-
- if (size < PSIZE / 2) { /* Pointers must fit into 2 * size. */
- errno = EINVAL;
- return (-1);
- }
-
- if (nmemb == 0)
- return (0);
-
- /*
- * XXX
- * Stupid subtraction for the Cray.
- */
- iflag = 0;
- if (!(size % ISIZE) && !(((char *)base - (char *)0) % ISIZE))
- iflag = 1;
-
- if ((list2 = malloc(nmemb * size + PSIZE)) == NULL)
- return (-1);
-
- list1 = base;
- setup(list1, list2, nmemb, size, cmp TSRMLS_CC);
- last = list2 + nmemb * size;
- i = big = 0;
- while (*EVAL(list2) != last) {
- l2 = list1;
- p1 = EVAL(list1);
- for (tp2 = p2 = list2; p2 != last; p1 = EVAL(l2)) {
- p2 = *EVAL(p2);
- f1 = l2;
- f2 = l1 = list1 + (p2 - list2);
- if (p2 != last)
- p2 = *EVAL(p2);
- l2 = list1 + (p2 - list2);
- while (f1 < l1 && f2 < l2) {
- if ((*cmp)(f1, f2 TSRMLS_CC) <= 0) {
- q = f2;
- b = f1, t = l1;
- sense = -1;
- } else {
- q = f1;
- b = f2, t = l2;
- sense = 0;
- }
- if (!big) { /* here i = 0 */
- while ((b += size) < t && cmp(q, b TSRMLS_CC) >sense)
- if (++i == 6) {
- big = 1;
- goto EXPONENTIAL;
- }
- } else {
-EXPONENTIAL: for (i = size; ; i <<= 1)
- if ((p = (b + i)) >= t) {
- if ((p = t - size) > b &&
- (*cmp)(q, p TSRMLS_CC) <= sense)
- t = p;
- else
- b = p;
- break;
- } else if ((*cmp)(q, p TSRMLS_CC) <= sense) {
- t = p;
- if (i == size)
- big = 0;
- goto FASTCASE;
- } else
- b = p;
- while (t > b+size) {
- i = (((t - b) / size) >> 1) * size;
- if ((*cmp)(q, p = b + i TSRMLS_CC) <= sense)
- t = p;
- else
- b = p;
- }
- goto COPY;
-FASTCASE: while (i > size)
- if ((*cmp)(q,
- p = b + (i >>= 1) TSRMLS_CC) <= sense)
- t = p;
- else
- b = p;
-COPY: b = t;
- }
- i = size;
- if (q == f1) {
- if (iflag) {
- ICOPY_LIST(f2, tp2, b);
- ICOPY_ELT(f1, tp2, i);
- } else {
- CCOPY_LIST(f2, tp2, b);
- CCOPY_ELT(f1, tp2, i);
- }
- } else {
- if (iflag) {
- ICOPY_LIST(f1, tp2, b);
- ICOPY_ELT(f2, tp2, i);
- } else {
- CCOPY_LIST(f1, tp2, b);
- CCOPY_ELT(f2, tp2, i);
- }
- }
- }
- if (f2 < l2) {
- if (iflag)
- ICOPY_LIST(f2, tp2, l2);
- else
- CCOPY_LIST(f2, tp2, l2);
- } else if (f1 < l1) {
- if (iflag)
- ICOPY_LIST(f1, tp2, l1);
- else
- CCOPY_LIST(f1, tp2, l1);
- }
- *p1 = l2;
- }
- tp2 = list1; /* swap list1, list2 */
- list1 = list2;
- list2 = tp2;
- last = list2 + nmemb*size;
- }
- if (base == list2) {
- memmove(list2, list1, nmemb*size);
- list2 = list1;
- }
- free(list2);
- return (0);
-}
-/* }}} */
-
-#define swap(a, b) { \
- s = b; \
- i = size; \
- do { \
- tmp = *a; *a++ = *s; *s++ = tmp; \
- } while (--i); \
- a -= size; \
- }
-#define reverse(bot, top) { \
- s = top; \
- do { \
- i = size; \
- do { \
- tmp = *bot; *bot++ = *s; *s++ = tmp; \
- } while (--i); \
- s -= size2; \
- } while(bot < s); \
-}
-
-/* {{{ setup
- * Optional hybrid natural/pairwise first pass. Eats up list1 in runs of
- * increasing order, list2 in a corresponding linked list. Checks for runs
- * when THRESHOLD/2 pairs compare with same sense. (Only used when NATURAL
- * is defined. Otherwise simple pairwise merging is used.)
- */
-static void setup(u_char *list1, u_char *list2, size_t n, size_t size, int (*cmp)(const void *, const void * TSRMLS_DC) TSRMLS_DC)
-{
- int i, length, size2, tmp, sense;
- u_char *f1, *f2, *s, *l2, *last, *p2;
-
- size2 = size*2;
- if (n <= 5) {
- insertionsort(list1, n, size, cmp TSRMLS_CC);
- *EVAL(list2) = (u_char*) list2 + n*size;
- return;
- }
- /*
- * Avoid running pointers out of bounds; limit n to evens
- * for simplicity.
- */
- i = 4 + (n & 1);
- insertionsort(list1 + (n - i) * size, i, size, cmp TSRMLS_CC);
- last = list1 + size * (n - i);
- *EVAL(list2 + (last - list1)) = list2 + n * size;
-
-#ifdef NATURAL
- p2 = list2;
- f1 = list1;
- sense = (cmp(f1, f1 + size TSRMLS_CC) > 0);
- for (; f1 < last; sense = !sense) {
- length = 2;
- /* Find pairs with same sense. */
- for (f2 = f1 + size2; f2 < last; f2 += size2) {
- if ((cmp(f2, f2+ size TSRMLS_CC) > 0) != sense)
- break;
- length += 2;
- }
- if (length < THRESHOLD) { /* Pairwise merge */
- do {
- p2 = *EVAL(p2) = f1 + size2 - list1 + list2;
- if (sense > 0)
- swap (f1, f1 + size);
- } while ((f1 += size2) < f2);
- } else { /* Natural merge */
- l2 = f2;
- for (f2 = f1 + size2; f2 < l2; f2 += size2) {
- if ((cmp(f2-size, f2 TSRMLS_CC) > 0) != sense) {
- p2 = *EVAL(p2) = f2 - list1 + list2;
- if (sense > 0)
- reverse(f1, f2-size);
- f1 = f2;
- }
- }
- if (sense > 0)
- reverse (f1, f2-size);
- f1 = f2;
- if (f2 < last || cmp(f2 - size, f2 TSRMLS_CC) > 0)
- p2 = *EVAL(p2) = f2 - list1 + list2;
- else
- p2 = *EVAL(p2) = list2 + n*size;
- }
- }
-#else /* pairwise merge only. */
- for (f1 = list1, p2 = list2; f1 < last; f1 += size2) {
- p2 = *EVAL(p2) = p2 + size2;
- if (cmp (f1, f1 + size TSRMLS_CC) > 0)
- swap(f1, f1 + size);
- }
-#endif /* NATURAL */
-}
-/* }}} */
-
-/* {{{ insertionsort
- * This is to avoid out-of-bounds addresses in sorting the
- * last 4 elements.
- */
-static void insertionsort(u_char *a, size_t n, size_t size, int (*cmp)(const void *, const void * TSRMLS_DC) TSRMLS_DC)
-{
- u_char *ai, *s, *t, *u, tmp;
- int i;
-
- for (ai = a+size; --n >= 1; ai += size)
- for (t = ai; t > a; t -= size) {
- u = t - size;
- if (cmp(u, t TSRMLS_CC) <= 0)
- break;
- swap(u, t);
- }
-}
-/* }}} */
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- * vim600: fdm=marker
- * vim: noet sw=4 ts=4
- */
diff --git a/main/network.c b/main/network.c
deleted file mode 100644
index 1de7ff98c4..0000000000
--- a/main/network.c
+++ /dev/null
@@ -1,1037 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Stig Venaas <venaas@uninett.no> |
- | Streams work by Wez Furlong <wez@thebrainroom.com> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-/*#define DEBUG_MAIN_NETWORK 1*/
-
-#include "php.h"
-
-#include <stddef.h>
-
-#ifdef PHP_WIN32
-#define O_RDONLY _O_RDONLY
-#include "win32/param.h"
-#elif defined(NETWARE)
-#ifdef NEW_LIBC
-#include <sys/timeval.h>
-#include <sys/param.h>
-#else
-#include "netware/time_nw.h"
-#endif
-#else
-#include <sys/param.h>
-#endif
-
-#include <sys/types.h>
-#if HAVE_SYS_SOCKET_H
-#include <sys/socket.h>
-#endif
-
-#ifndef _FCNTL_H
-#include <fcntl.h>
-#endif
-
-#ifdef HAVE_SYS_SELECT_H
-#include <sys/select.h>
-#endif
-#if HAVE_SYS_POLL_H
-#include <sys/poll.h>
-#endif
-
-#if defined(NETWARE)
-#ifdef USE_WINSOCK
-/*#include <ws2nlm.h>*/
-#include <novsock2.h>
-#else
-/* New headers for socket stuff */
-#ifdef NEW_LIBC
-#include <netinet/in.h>
-#include <netdb.h>
-#include <sys/select.h>
-#endif
-#include <sys/socket.h>
-#endif
-#elif !defined(PHP_WIN32)
-#include <netinet/in.h>
-#include <netdb.h>
-#if HAVE_ARPA_INET_H
-#include <arpa/inet.h>
-#endif
-#endif
-
-#ifndef HAVE_INET_ATON
-int inet_aton(const char *, struct in_addr *);
-#endif
-
-#include "php_network.h"
-
-#if defined(PHP_WIN32) || defined(__riscos__) || defined(NETWARE)
-#undef AF_UNIX
-#endif
-
-#if defined(AF_UNIX)
-#include <sys/un.h>
-#endif
-
-#include "ext/standard/file.h"
-
-#ifdef PHP_WIN32
-# include "win32/time.h"
-# define SOCK_ERR INVALID_SOCKET
-# define SOCK_CONN_ERR SOCKET_ERROR
-# define PHP_TIMEOUT_ERROR_VALUE WSAETIMEDOUT
-#else
-# define SOCK_ERR -1
-# define SOCK_CONN_ERR -1
-# define PHP_TIMEOUT_ERROR_VALUE ETIMEDOUT
-#endif
-
-#if HAVE_GETADDRINFO
-#ifdef HAVE_GAI_STRERROR
-# define PHP_GAI_STRERROR(x) (gai_strerror(x))
-#else
-# define PHP_GAI_STRERROR(x) (php_gai_strerror(x))
-/* {{{ php_gai_strerror
- */
-static char *php_gai_strerror(int code)
-{
- static struct {
- int code;
- const char *msg;
- } values[] = {
-# ifdef EAI_ADDRFAMILY
- {EAI_ADDRFAMILY, "Address family for hostname not supported"},
-# endif
- {EAI_AGAIN, "Temporary failure in name resolution"},
- {EAI_BADFLAGS, "Bad value for ai_flags"},
- {EAI_FAIL, "Non-recoverable failure in name resolution"},
- {EAI_FAMILY, "ai_family not supported"},
- {EAI_MEMORY, "Memory allocation failure"},
-# ifdef EAI_NODATA
- {EAI_NODATA, "No address associated with hostname"},
-# endif
- {EAI_NONAME, "Name or service not known"},
- {EAI_SERVICE, "Servname not supported for ai_socktype"},
- {EAI_SOCKTYPE, "ai_socktype not supported"},
- {EAI_SYSTEM, "System error"},
- {0, NULL}
- };
- int i;
-
- for (i = 0; values[i].msg != NULL; i++) {
- if (values[i].code == code) {
- return (char *)values[i].msg;
- }
- }
-
- return "Unknown error";
-}
-/* }}} */
-#endif
-#endif
-
-/* {{{ php_network_freeaddresses
- */
-static void php_network_freeaddresses(struct sockaddr **sal)
-{
- struct sockaddr **sap;
-
- if (sal == NULL)
- return;
- for (sap = sal; *sap != NULL; sap++)
- efree(*sap);
- efree(sal);
-}
-/* }}} */
-
-/* {{{ php_network_getaddresses
- * Returns number of addresses, 0 for none/error
- */
-static int php_network_getaddresses(const char *host, int socktype, struct sockaddr ***sal, char **error_string TSRMLS_DC)
-{
- struct sockaddr **sap;
- int n;
-#if HAVE_GETADDRINFO
- static int ipv6_borked = -1; /* the way this is used *is* thread safe */
- struct addrinfo hints, *res, *sai;
-#else
- struct hostent *host_info;
- struct in_addr in;
-#endif
-
- if (host == NULL) {
- return 0;
- }
-#if HAVE_GETADDRINFO
- memset(&hints, '\0', sizeof(hints));
-
- hints.ai_family = AF_INET; /* default to regular inet (see below) */
- hints.ai_socktype = socktype;
-
-# if HAVE_IPV6
- /* probe for a working IPv6 stack; even if detected as having v6 at compile
- * time, at runtime some stacks are slow to resolve or have other issues
- * if they are not correctly configured.
- * static variable use is safe here since simple store or fetch operations
- * are atomic and because the actual probe process is not in danger of
- * collisions or race conditions. */
- if (ipv6_borked == -1) {
- int s;
-
- s = socket(PF_INET6, SOCK_DGRAM, 0);
- if (s == SOCK_ERR) {
- ipv6_borked = 1;
- } else {
- ipv6_borked = 0;
- closesocket(s);
- }
- }
- hints.ai_family = ipv6_borked ? AF_INET : AF_UNSPEC;
-# endif
-
- if ((n = getaddrinfo(host, NULL, &hints, &res))) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "php_network_getaddresses: getaddrinfo failed: %s", PHP_GAI_STRERROR(n));
- return 0;
- } else if (res == NULL) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "php_network_getaddresses: getaddrinfo failed (null result pointer)");
- return 0;
- }
-
- sai = res;
- for (n = 1; (sai = sai->ai_next) != NULL; n++)
- ;
-
- *sal = safe_emalloc((n + 1), sizeof(*sal), 0);
- sai = res;
- sap = *sal;
-
- do {
- *sap = emalloc(sai->ai_addrlen);
- memcpy(*sap, sai->ai_addr, sai->ai_addrlen);
- sap++;
- } while ((sai = sai->ai_next) != NULL);
-
- freeaddrinfo(res);
-#else
- if (!inet_aton(host, &in)) {
- /* XXX NOT THREAD SAFE (is safe under win32) */
- host_info = gethostbyname(host);
- if (host_info == NULL) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "php_network_getaddresses: gethostbyname failed");
- return 0;
- }
- in = *((struct in_addr *) host_info->h_addr);
- }
-
- *sal = safe_emalloc(2, sizeof(*sal), 0);
- sap = *sal;
- *sap = emalloc(sizeof(struct sockaddr_in));
- (*sap)->sa_family = AF_INET;
- ((struct sockaddr_in *)*sap)->sin_addr = in;
- sap++;
- n = 1;
-#endif
-
- *sap = NULL;
- return n;
-}
-/* }}} */
-
-#ifndef O_NONBLOCK
-#define O_NONBLOCK O_NDELAY
-#endif
-
-#if !defined(__BEOS__)
-# define HAVE_NON_BLOCKING_CONNECT 1
-# ifdef PHP_WIN32
-typedef u_long php_non_blocking_flags_t;
-# define SET_SOCKET_BLOCKING_MODE(sock, save) \
- save = TRUE; ioctlsocket(sock, FIONBIO, &save)
-# define RESTORE_SOCKET_BLOCKING_MODE(sock, save) \
- ioctlsocket(sock, FIONBIO, &save)
-# else
-typedef int php_non_blocking_flags_t;
-# define SET_SOCKET_BLOCKING_MODE(sock, save) \
- save = fcntl(sock, F_GETFL, 0); \
- fcntl(sock, F_SETFL, save | O_NONBLOCK)
-# define RESTORE_SOCKET_BLOCKING_MODE(sock, save) \
- fcntl(sock, F_SETFL, save)
-# endif
-#endif
-
-/* Connect to a socket using an interruptible connect with optional timeout.
- * Optionally, the connect can be made asynchronously, which will implicitly
- * enable non-blocking mode on the socket.
- * */
-/* {{{ php_network_connect_socket */
-PHPAPI int php_network_connect_socket(php_socket_t sockfd,
- const struct sockaddr *addr,
- socklen_t addrlen,
- int asynchronous,
- struct timeval *timeout,
- char **error_string,
- int *error_code)
-{
-#if HAVE_NON_BLOCKING_CONNECT
- php_non_blocking_flags_t orig_flags;
- int n;
- int error = 0;
- socklen_t len;
- int ret = 0;
- fd_set rset;
- fd_set wset;
- fd_set eset;
-
- SET_SOCKET_BLOCKING_MODE(sockfd, orig_flags);
-
- if ((n = connect(sockfd, addr, addrlen)) < 0) {
- error = php_socket_errno();
-
- if (error_code) {
- *error_code = error;
- }
-
- if (error != EINPROGRESS) {
- if (error_string) {
- *error_string = php_socket_strerror(error, NULL, 0);
- }
-
- return -1;
- }
- if (asynchronous && error == EINPROGRESS) {
- /* this is fine by us */
- return 0;
- }
- }
-
- if (n == 0) {
- goto ok;
- }
-
- FD_ZERO(&rset);
- FD_ZERO(&eset);
- FD_SET(sockfd, &rset);
- FD_SET(sockfd, &eset);
-
- wset = rset;
-
- if ((n = select(sockfd + 1, &rset, &wset, &eset, timeout)) == 0) {
- error = PHP_TIMEOUT_ERROR_VALUE;
- }
-
- if(FD_ISSET(sockfd, &rset) || FD_ISSET(sockfd, &wset)) {
- len = sizeof(error);
- /*
- BSD-derived systems set errno correctly
- Solaris returns -1 from getsockopt in case of error
- */
- if (getsockopt(sockfd, SOL_SOCKET, SO_ERROR, (char*)&error, &len) < 0) {
- ret = -1;
- }
- } else {
- /* whoops: sockfd has disappeared */
- ret = -1;
- }
-
-ok:
- if (!asynchronous) {
- /* back to blocking mode */
- RESTORE_SOCKET_BLOCKING_MODE(sockfd, orig_flags);
- }
-
- if (error_code) {
- *error_code = error;
- }
-
- if (error && error_string) {
- *error_string = php_socket_strerror(error, NULL, 0);
- ret = -1;
- }
- return ret;
-#else
- if (asynchronous) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Asynchronous connect() not supported on this platform");
- }
- return connect(sockfd, addr, addrlen);
-#endif
-}
-/* }}} */
-
-/* {{{ sub_times */
-static inline void sub_times(struct timeval a, struct timeval b, struct timeval *result)
-{
- result->tv_usec = a.tv_usec - b.tv_usec;
- if (result->tv_usec < 0L) {
- a.tv_sec--;
- result->tv_usec += 1000000L;
- }
- result->tv_sec = a.tv_sec - b.tv_sec;
- if (result->tv_sec < 0L) {
- result->tv_sec++;
- result->tv_usec -= 1000000L;
- }
-}
-/* }}} */
-
-/* Bind to a local IP address.
- * Returns the bound socket, or -1 on failure.
- * */
-/* {{{ php_network_bind_socket_to_local_addr */
-php_socket_t php_network_bind_socket_to_local_addr(const char *host, unsigned port,
- int socktype, char **error_string, int *error_code
- TSRMLS_DC)
-{
- int num_addrs, n, err = 0;
- php_socket_t sock;
- struct sockaddr **sal, **psal, *sa;
- socklen_t socklen;
-
- num_addrs = php_network_getaddresses(host, socktype, &psal, error_string TSRMLS_CC);
-
- if (num_addrs == 0) {
- /* could not resolve address(es) */
- return -1;
- }
-
- for (sal = psal; *sal != NULL; sal++) {
- sa = *sal;
-
- /* create a socket for this address */
- sock = socket(sa->sa_family, socktype, 0);
-
- if (sock == SOCK_ERR) {
- continue;
- }
-
- switch (sa->sa_family) {
-#if HAVE_GETADDRINFO && HAVE_IPV6
- case AF_INET6:
- ((struct sockaddr_in6 *)sa)->sin6_family = sa->sa_family;
- ((struct sockaddr_in6 *)sa)->sin6_port = htons(port);
- socklen = sizeof(struct sockaddr_in6);
- break;
-#endif
- case AF_INET:
- ((struct sockaddr_in *)sa)->sin_family = sa->sa_family;
- ((struct sockaddr_in *)sa)->sin_port = htons(port);
- socklen = sizeof(struct sockaddr_in);
- break;
- default:
- /* Unknown family */
- socklen = 0;
- sa = NULL;
- }
-
- if (sa) {
- /* attempt to bind */
-
-#ifdef SO_REUSEADDR
- {
- int val = 1;
- setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, (char*)&val, sizeof(val));
- }
-#endif
-
- n = bind(sock, sa, socklen);
-
- if (n != SOCK_CONN_ERR) {
- goto bound;
- }
-
- err = php_socket_errno();
- }
-
- close(sock);
- }
- sock = -1;
-
- if (error_code) {
- *error_code = err;
- }
- if (error_string) {
- *error_string = php_socket_strerror(err, NULL, 0);
- }
-
-bound:
-
- php_network_freeaddresses(psal);
-
- return sock;
-
-}
-/* }}} */
-
-PHPAPI int php_network_parse_network_address_with_port(const char *addr, long addrlen, struct sockaddr *sa, socklen_t *sl TSRMLS_DC)
-{
- char *colon;
- char *tmp;
- int ret = FAILURE;
- short port;
- struct sockaddr_in *in4 = (struct sockaddr_in*)sa;
- struct sockaddr **psal;
- int n;
- char *errstr = NULL;
-#if HAVE_IPV6
- struct sockaddr_in6 *in6 = (struct sockaddr_in6*)sa;
-#endif
-
- if (*addr == '[') {
- colon = memchr(addr + 1, ']', addrlen-1);
- if (!colon || colon[1] != ':') {
- return FAILURE;
- }
- port = atoi(colon + 2);
- addr++;
- } else {
- colon = memchr(addr, ':', addrlen);
- if (!colon) {
- return FAILURE;
- }
- port = atoi(colon + 1);
- }
-
- tmp = estrndup(addr, colon - addr);
-
- /* first, try interpreting the address as a numeric address */
-
-#if HAVE_IPV6 && HAVE_INET_PTON
- if (inet_pton(AF_INET6, tmp, &in6->sin6_addr) > 0) {
- in6->sin6_port = htons(port);
- in6->sin6_family = AF_INET6;
- *sl = sizeof(struct sockaddr_in6);
- ret = SUCCESS;
- goto out;
- }
-#endif
- if (inet_aton(tmp, &in4->sin_addr) > 0) {
- in4->sin_port = htons(port);
- in4->sin_family = AF_INET;
- *sl = sizeof(struct sockaddr_in);
- ret = SUCCESS;
- goto out;
- }
-
- /* looks like we'll need to resolve it */
- n = php_network_getaddresses(tmp, SOCK_DGRAM, &psal, &errstr TSRMLS_CC);
-
- if (n == 0) {
- if (errstr) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Failed to resolve `%s': %s", tmp, errstr);
- STR_FREE(errstr);
- }
- goto out;
- }
-
- /* copy the details from the first item */
- switch ((*psal)->sa_family) {
-#if HAVE_GETADDRINFO && HAVE_IPV6
- case AF_INET6:
- *in6 = **(struct sockaddr_in6**)psal;
- in6->sin6_port = htons(port);
- *sl = sizeof(struct sockaddr_in6);
- ret = SUCCESS;
- break;
-#endif
- case AF_INET:
- *in4 = **(struct sockaddr_in**)psal;
- in4->sin_port = htons(port);
- *sl = sizeof(struct sockaddr_in);
- ret = SUCCESS;
- break;
- }
-
- php_network_freeaddresses(psal);
-
-out:
- STR_FREE(tmp);
- return ret;
-}
-
-
-PHPAPI void php_network_populate_name_from_sockaddr(
- /* input address */
- struct sockaddr *sa, socklen_t sl,
- /* output readable address */
- char **textaddr, long *textaddrlen,
- /* output address */
- struct sockaddr **addr,
- socklen_t *addrlen
- TSRMLS_DC)
-{
- if (addr) {
- *addr = emalloc(sl);
- memcpy(*addr, sa, sl);
- *addrlen = sl;
- }
-
- if (textaddr) {
-#if HAVE_IPV6 && HAVE_INET_NTOP
- char abuf[256];
-#endif
- char *buf = NULL;
-
- switch (sa->sa_family) {
- case AF_INET:
- /* generally not thread safe, but it *is* thread safe under win32 */
- buf = inet_ntoa(((struct sockaddr_in*)sa)->sin_addr);
- if (buf) {
- *textaddrlen = spprintf(textaddr, 0, "%s:%d",
- buf, ntohs(((struct sockaddr_in*)sa)->sin_port));
- }
-
- break;
-
-#if HAVE_IPV6 && HAVE_INET_NTOP
- case AF_INET6:
- buf = (char*)inet_ntop(sa->sa_family, &((struct sockaddr_in6*)sa)->sin6_addr, (char *)&abuf, sizeof(abuf));
- if (buf) {
- *textaddrlen = spprintf(textaddr, 0, "%s:%d",
- buf, ntohs(((struct sockaddr_in6*)sa)->sin6_port));
- }
-
- break;
-#endif
-#ifdef AF_UNIX
- case AF_UNIX:
- {
- struct sockaddr_un *ua = (struct sockaddr_un*)sa;
-
- if (ua->sun_path[0] == '\0') {
- /* abstract name */
- int len = strlen(ua->sun_path + 1) + 1;
- *textaddrlen = len;
- *textaddr = emalloc(len + 1);
- memcpy(*textaddr, ua->sun_path, len);
- (*textaddr)[len] = '\0';
- } else {
- *textaddrlen = strlen(ua->sun_path);
- *textaddr = estrndup(ua->sun_path, *textaddrlen);
- }
- }
- break;
-#endif
-
- }
-
- }
-}
-
-PHPAPI int php_network_get_peer_name(php_socket_t sock,
- char **textaddr, long *textaddrlen,
- struct sockaddr **addr,
- socklen_t *addrlen
- TSRMLS_DC)
-{
- php_sockaddr_storage sa;
- socklen_t sl = sizeof(sa);
-
- if (getpeername(sock, (struct sockaddr*)&sa, &sl) == 0) {
- php_network_populate_name_from_sockaddr((struct sockaddr*)&sa, sl,
- textaddr, textaddrlen,
- addr, addrlen
- TSRMLS_CC);
- return 0;
- }
- return -1;
-}
-
-PHPAPI int php_network_get_sock_name(php_socket_t sock,
- char **textaddr, long *textaddrlen,
- struct sockaddr **addr,
- socklen_t *addrlen
- TSRMLS_DC)
-{
- php_sockaddr_storage sa;
- socklen_t sl = sizeof(sa);
-
- if (getsockname(sock, (struct sockaddr*)&sa, &sl) == 0) {
- php_network_populate_name_from_sockaddr((struct sockaddr*)&sa, sl,
- textaddr, textaddrlen,
- addr, addrlen
- TSRMLS_CC);
- return 0;
- }
- return -1;
-
-}
-
-
-/* Accept a client connection from a server socket,
- * using an optional timeout.
- * Returns the peer address in addr/addrlen (it will emalloc
- * these, so be sure to efree the result).
- * If you specify textaddr/textaddrlen, a text-printable
- * version of the address will be emalloc'd and returned.
- * */
-
-/* {{{ php_network_accept_incoming */
-PHPAPI php_socket_t php_network_accept_incoming(php_socket_t srvsock,
- char **textaddr, long *textaddrlen,
- struct sockaddr **addr,
- socklen_t *addrlen,
- struct timeval *timeout,
- char **error_string,
- int *error_code
- TSRMLS_DC)
-{
- php_socket_t clisock = -1;
- fd_set rset;
- int error = 0, n;
- php_sockaddr_storage sa;
- socklen_t sl;
-
- FD_ZERO(&rset);
- FD_SET(srvsock, &rset);
-
- n = select(srvsock + 1, &rset, NULL, NULL, timeout);
-
- if (n == 0) {
- error = PHP_TIMEOUT_ERROR_VALUE;
- } else if (n == -1) {
- error = php_socket_errno();
- } else if (FD_ISSET(srvsock, &rset)) {
- sl = sizeof(sa);
-
- clisock = accept(srvsock, (struct sockaddr*)&sa, &sl);
-
- if (clisock >= 0) {
- php_network_populate_name_from_sockaddr((struct sockaddr*)&sa, sl,
- textaddr, textaddrlen,
- addr, addrlen
- TSRMLS_CC);
- } else {
- error = php_socket_errno();
- }
- }
-
- if (error_code) {
- *error_code = error;
- }
- if (error_string) {
- *error_string = php_socket_strerror(error, NULL, 0);
- }
-
- return clisock;
-}
-/* }}} */
-
-
-
-/* Connect to a remote host using an interruptible connect with optional timeout.
- * Optionally, the connect can be made asynchronously, which will implicitly
- * enable non-blocking mode on the socket.
- * Returns the connected (or connecting) socket, or -1 on failure.
- * */
-
-/* {{{ php_network_connect_socket_to_host */
-php_socket_t php_network_connect_socket_to_host(const char *host, unsigned short port,
- int socktype, int asynchronous, struct timeval *timeout, char **error_string,
- int *error_code
- TSRMLS_DC)
-{
- int num_addrs, n, fatal = 0;
- php_socket_t sock;
- struct sockaddr **sal, **psal, *sa;
- struct timeval working_timeout;
- socklen_t socklen;
-#if HAVE_GETTIMEOFDAY
- struct timeval limit_time, time_now;
-#endif
-
- num_addrs = php_network_getaddresses(host, socktype, &psal, error_string TSRMLS_CC);
-
- if (num_addrs == 0) {
- /* could not resolve address(es) */
- return -1;
- }
-
- if (timeout) {
- memcpy(&working_timeout, timeout, sizeof(working_timeout));
-#if HAVE_GETTIMEOFDAY
- gettimeofday(&limit_time, NULL);
- limit_time.tv_sec += working_timeout.tv_sec;
- limit_time.tv_usec += working_timeout.tv_usec;
- if (limit_time.tv_usec >= 1000000) {
- limit_time.tv_usec -= 1000000;
- limit_time.tv_sec++;
- }
-#endif
- }
-
- for (sal = psal; !fatal && *sal != NULL; sal++) {
- sa = *sal;
-
- /* create a socket for this address */
- sock = socket(sa->sa_family, socktype, 0);
-
- if (sock == SOCK_ERR) {
- continue;
- }
-
- switch (sa->sa_family) {
-#if HAVE_GETADDRINFO && HAVE_IPV6
- case AF_INET6:
- ((struct sockaddr_in6 *)sa)->sin6_family = sa->sa_family;
- ((struct sockaddr_in6 *)sa)->sin6_port = htons(port);
- socklen = sizeof(struct sockaddr_in6);
- break;
-#endif
- case AF_INET:
- ((struct sockaddr_in *)sa)->sin_family = sa->sa_family;
- ((struct sockaddr_in *)sa)->sin_port = htons(port);
- socklen = sizeof(struct sockaddr_in);
- break;
- default:
- /* Unknown family */
- socklen = 0;
- sa = NULL;
- }
-
- if (sa) {
- /* make a connection attempt */
-
- n = php_network_connect_socket(sock, sa, socklen, asynchronous,
- timeout ? &working_timeout : NULL,
- error_string, error_code);
-
- if (n != SOCK_CONN_ERR) {
- goto connected;
- }
-
- /* adjust timeout for next attempt */
-#if HAVE_GETTIMEOFDAY
- if (timeout) {
- gettimeofday(&time_now, NULL);
-
- if (timercmp(&time_now, &limit_time, >=)) {
- /* time limit expired; don't attempt any further connections */
- fatal = 1;
- } else {
- /* work out remaining time */
- sub_times(limit_time, time_now, &working_timeout);
- }
- }
-#else
- if (error_code && *error_code == PHP_TIMEOUT_ERROR_VALUE) {
- /* Don't even bother trying to connect to the next alternative;
- * we have no way to determine how long we have already taken
- * and it is quite likely that the next attempt will fail too. */
- fatal = 1;
- } else {
- /* re-use the same initial timeout.
- * Not the best thing, but in practice it should be good-enough */
- if (timeout) {
- memcpy(&working_timeout, timeout, sizeof(working_timeout));
- }
- }
-#endif
- }
-
- close(sock);
- }
- sock = -1;
-
-connected:
-
- php_network_freeaddresses(psal);
-
- return sock;
-}
-/* }}} */
-
-/* {{{ php_any_addr
- * Fills the any (wildcard) address into php_sockaddr_storage
- */
-PHPAPI void php_any_addr(int family, php_sockaddr_storage *addr, unsigned short port)
-{
- memset(addr, 0, sizeof(php_sockaddr_storage));
- switch (family) {
-#if HAVE_IPV6
- case AF_INET6: {
- struct sockaddr_in6 *sin6 = (struct sockaddr_in6 *) addr;
- sin6->sin6_family = AF_INET6;
- sin6->sin6_port = htons(port);
- sin6->sin6_addr = in6addr_any;
- break;
- }
-#endif
- case AF_INET: {
- struct sockaddr_in *sin = (struct sockaddr_in *) addr;
- sin->sin_family = AF_INET;
- sin->sin_port = htons(port);
- sin->sin_addr.s_addr = htonl(INADDR_ANY);
- break;
- }
- }
-}
-/* }}} */
-
-/* {{{ php_sockaddr_size
- * Returns the size of struct sockaddr_xx for the family
- */
-PHPAPI int php_sockaddr_size(php_sockaddr_storage *addr)
-{
- switch (((struct sockaddr *)addr)->sa_family) {
- case AF_INET:
- return sizeof(struct sockaddr_in);
-#if HAVE_IPV6
- case AF_INET6:
- return sizeof(struct sockaddr_in6);
-#endif
-#ifdef AF_UNIX
- case AF_UNIX:
- return sizeof(struct sockaddr_un);
-#endif
- default:
- return 0;
- }
-}
-/* }}} */
-
-/* Given a socket error code, if buf == NULL:
- * emallocs storage for the error message and returns
- * else
- * sprintf message into provided buffer and returns buf
- */
-/* {{{ php_socket_strerror */
-PHPAPI char *php_socket_strerror(long err, char *buf, size_t bufsize)
-{
-#ifndef PHP_WIN32
- char *errstr;
-
- errstr = strerror(err);
- if (buf == NULL) {
- buf = estrdup(errstr);
- } else {
- strncpy(buf, errstr, bufsize);
- }
- return buf;
-#else
- char *sysbuf;
- int free_it = 1;
-
- if (!FormatMessage(
- FORMAT_MESSAGE_ALLOCATE_BUFFER |
- FORMAT_MESSAGE_FROM_SYSTEM |
- FORMAT_MESSAGE_IGNORE_INSERTS,
- NULL,
- err,
- MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
- (LPTSTR)&sysbuf,
- 0,
- NULL)) {
- free_it = 0;
- sysbuf = "Unknown Error";
- }
-
- if (buf == NULL) {
- buf = estrdup(sysbuf);
- } else {
- strncpy(buf, sysbuf, bufsize);
- }
-
- if (free_it) {
- LocalFree(sysbuf);
- }
-
- return buf;
-#endif
-}
-/* }}} */
-
-/* deprecated */
-PHPAPI php_stream *_php_stream_sock_open_from_socket(php_socket_t socket, const char *persistent_id STREAMS_DC TSRMLS_DC)
-{
- php_stream *stream;
- php_netstream_data_t *sock;
-
- sock = pemalloc(sizeof(php_netstream_data_t), persistent_id ? 1 : 0);
- memset(sock, 0, sizeof(php_netstream_data_t));
-
- sock->is_blocked = 1;
- sock->timeout.tv_sec = FG(default_socket_timeout);
- sock->timeout.tv_usec = 0;
- sock->socket = socket;
-
- stream = php_stream_alloc_rel(&php_stream_generic_socket_ops, sock, persistent_id, "r+");
- stream->flags |= PHP_STREAM_FLAG_AVOID_BLOCKING;
-
- if (stream == NULL)
- pefree(sock, persistent_id ? 1 : 0);
-
- return stream;
-}
-
-PHPAPI php_stream *_php_stream_sock_open_host(const char *host, unsigned short port,
- int socktype, struct timeval *timeout, const char *persistent_id STREAMS_DC TSRMLS_DC)
-{
- char *res;
- long reslen;
- php_stream *stream;
-
- reslen = spprintf(&res, 0, "tcp://%s:%d", host, port);
-
- stream = php_stream_xport_create(res, reslen, ENFORCE_SAFE_MODE | REPORT_ERRORS,
- STREAM_XPORT_CLIENT | STREAM_XPORT_CONNECT, persistent_id, timeout, NULL, NULL, NULL);
-
- efree(res);
-
- return stream;
-}
-
-PHPAPI int php_set_sock_blocking(int socketd, int block TSRMLS_DC)
-{
- int ret = SUCCESS;
- int flags;
- int myflag = 0;
-
-#ifdef PHP_WIN32
- /* with ioctlsocket, a non-zero sets nonblocking, a zero sets blocking */
- flags = !block;
- if (ioctlsocket(socketd, FIONBIO, &flags)==SOCKET_ERROR){
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", WSAGetLastError());
- ret = FALSE;
- }
-#else
- flags = fcntl(socketd, F_GETFL);
-#ifdef O_NONBLOCK
- myflag = O_NONBLOCK; /* POSIX version */
-#elif defined(O_NDELAY)
- myflag = O_NDELAY; /* old non-POSIX version */
-#endif
- if (!block) {
- flags |= myflag;
- } else {
- flags &= ~myflag;
- }
- fcntl(socketd, F_SETFL, flags);
-#endif
- return ret;
-}
-
-
-/*
- * Local variables:
- * tab-width: 8
- * c-basic-offset: 8
- * End:
- * vim600: sw=4 ts=4 fdm=marker
- * vim<600: sw=4 ts=4
- */
diff --git a/main/output.c b/main/output.c
deleted file mode 100644
index 7505066196..0000000000
--- a/main/output.c
+++ /dev/null
@@ -1,1077 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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. |
- +----------------------------------------------------------------------+
- | Authors: Zeev Suraski <zeev@zend.com> |
- | Thies C. Arntzen <thies@thieso.net> |
- | Marcus Boerger <helly@php.net> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#include "php.h"
-#include "ext/standard/head.h"
-#include "ext/standard/basic_functions.h"
-#include "ext/standard/url_scanner_ex.h"
-#if HAVE_ZLIB && !defined(COMPILE_DL_ZLIB)
-#include "ext/zlib/php_zlib.h"
-#endif
-#include "SAPI.h"
-
-#define OB_DEFAULT_HANDLER_NAME "default output handler"
-
-/* output functions */
-static int php_b_body_write(const char *str, uint str_length TSRMLS_DC);
-
-static int php_ob_init(uint initial_size, uint block_size, zval *output_handler, uint chunk_size, zend_bool erase TSRMLS_DC);
-static void php_ob_append(const char *text, uint text_length TSRMLS_DC);
-#if 0
-static void php_ob_prepend(const char *text, uint text_length);
-#endif
-
-#ifdef ZTS
-int output_globals_id;
-#else
-php_output_globals output_globals;
-#endif
-
-/* {{{ php_default_output_func */
-PHPAPI int php_default_output_func(const char *str, uint str_len TSRMLS_DC)
-{
- fwrite(str, 1, str_len, stderr);
- return str_len;
-}
-/* }}} */
-
-/* {{{ php_output_init_globals */
-static void php_output_init_globals(php_output_globals *output_globals_p TSRMLS_DC)
-{
- OG(php_body_write) = php_default_output_func;
- OG(php_header_write) = php_default_output_func;
- OG(implicit_flush) = 0;
- OG(output_start_filename) = NULL;
- OG(output_start_lineno) = 0;
-}
-/* }}} */
-
-
-/* {{{ php_output_startup
- Start output layer */
-PHPAPI void php_output_startup(void)
-{
-#ifdef ZTS
- ts_allocate_id(&output_globals_id, sizeof(php_output_globals), (ts_allocate_ctor) php_output_init_globals, NULL);
-#else
- php_output_init_globals(&output_globals TSRMLS_CC);
-#endif
-}
-/* }}} */
-
-
-/* {{{ php_output_activate
- Initilize output global for activation */
-PHPAPI void php_output_activate(TSRMLS_D)
-{
- OG(php_body_write) = php_ub_body_write;
- OG(php_header_write) = sapi_module.ub_write;
- OG(ob_nesting_level) = 0;
- OG(ob_lock) = 0;
- OG(disable_output) = 0;
- OG(output_start_filename) = NULL;
- OG(output_start_lineno) = 0;
-}
-/* }}} */
-
-
-/* {{{ php_output_set_status
- Toggle output status. Do NOT use in application code, only in SAPIs where appropriate. */
-PHPAPI void php_output_set_status(zend_bool status TSRMLS_DC)
-{
- OG(disable_output) = !status;
-}
-/* }}} */
-
-/* {{{ php_output_register_constants */
-void php_output_register_constants(TSRMLS_D)
-{
- REGISTER_MAIN_LONG_CONSTANT("PHP_OUTPUT_HANDLER_START", PHP_OUTPUT_HANDLER_START, CONST_CS | CONST_PERSISTENT);
- REGISTER_MAIN_LONG_CONSTANT("PHP_OUTPUT_HANDLER_CONT", PHP_OUTPUT_HANDLER_CONT, CONST_CS | CONST_PERSISTENT);
- REGISTER_MAIN_LONG_CONSTANT("PHP_OUTPUT_HANDLER_END", PHP_OUTPUT_HANDLER_END, CONST_CS | CONST_PERSISTENT);
-}
-/* }}} */
-
-
-/* {{{ php_body_wirte
- * Write body part */
-PHPAPI int php_body_write(const char *str, uint str_length TSRMLS_DC)
-{
- return OG(php_body_write)(str, str_length TSRMLS_CC);
-}
-/* }}} */
-
-/* {{{ php_header_wirte
- * Write HTTP header */
-PHPAPI int php_header_write(const char *str, uint str_length TSRMLS_DC)
-{
- if (OG(disable_output)) {
- return 0;
- } else {
- return OG(php_header_write)(str, str_length TSRMLS_CC);
- }
-}
-/* }}} */
-
-/* {{{ php_start_ob_buffer
- * Start output buffering */
-PHPAPI int php_start_ob_buffer(zval *output_handler, uint chunk_size, zend_bool erase TSRMLS_DC)
-{
- uint initial_size, block_size;
-
- if (OG(ob_lock)) {
- if (SG(headers_sent) && !SG(request_info).headers_only) {
- OG(php_body_write) = php_ub_body_write_no_header;
- } else {
- OG(php_body_write) = php_ub_body_write;
- }
- OG(ob_nesting_level) = 0;
- php_error_docref("ref.outcontrol" TSRMLS_CC, E_ERROR, "Cannot use output buffering in output buffering display handlers");
- return FAILURE;
- }
- if (chunk_size > 0) {
- if (chunk_size==1) {
- chunk_size = 4096;
- }
- initial_size = (chunk_size*3/2);
- block_size = chunk_size/2;
- } else {
- initial_size = 40*1024;
- block_size = 10*1024;
- }
- return php_ob_init(initial_size, block_size, output_handler, chunk_size, erase TSRMLS_CC);
-}
-/* }}} */
-
-/* {{{ php_start_ob_buffer_named
- * Start output buffering */
-PHPAPI int php_start_ob_buffer_named(const char *output_handler_name, uint chunk_size, zend_bool erase TSRMLS_DC)
-{
- zval *output_handler;
- int result;
-
- ALLOC_INIT_ZVAL(output_handler);
- Z_STRLEN_P(output_handler) = strlen(output_handler_name); /* this can be optimized */
- Z_STRVAL_P(output_handler) = estrndup(output_handler_name, Z_STRLEN_P(output_handler));
- Z_TYPE_P(output_handler) = IS_STRING;
- result = php_start_ob_buffer(output_handler, chunk_size, erase TSRMLS_CC);
- zval_dtor(output_handler);
- FREE_ZVAL(output_handler);
- return result;
-}
-/* }}} */
-
-/* {{{ php_end_ob_buffer
- * End output buffering (one level) */
-PHPAPI void php_end_ob_buffer(zend_bool send_buffer, zend_bool just_flush TSRMLS_DC)
-{
- char *final_buffer=NULL;
- unsigned int final_buffer_length=0;
- zval *alternate_buffer=NULL;
- char *to_be_destroyed_buffer, *to_be_destroyed_handler_name;
- char *to_be_destroyed_handled_output[2] = { 0, 0 };
- int status;
- php_ob_buffer *prev_ob_buffer_p=NULL;
- php_ob_buffer orig_ob_buffer;
-
- if (OG(ob_nesting_level)==0) {
- return;
- }
- status = 0;
- if (!OG(active_ob_buffer).status & PHP_OUTPUT_HANDLER_START) {
- /* our first call */
- status |= PHP_OUTPUT_HANDLER_START;
- }
- if (just_flush) {
- status |= PHP_OUTPUT_HANDLER_CONT;
- } else {
- status |= PHP_OUTPUT_HANDLER_END;
- }
-
-#if 0
- {
- FILE *fp;
- fp = fopen("/tmp/ob_log", "a");
- fprintf(fp, "NestLevel: %d ObStatus: %d HandlerName: %s\n", OG(ob_nesting_level), status, OG(active_ob_buffer).handler_name);
- fclose(fp);
- }
-#endif
-
- if (OG(active_ob_buffer).internal_output_handler) {
- final_buffer = OG(active_ob_buffer).internal_output_handler_buffer;
- final_buffer_length = OG(active_ob_buffer).internal_output_handler_buffer_size;
- OG(active_ob_buffer).internal_output_handler(OG(active_ob_buffer).buffer, OG(active_ob_buffer).text_length, &final_buffer, &final_buffer_length, status TSRMLS_CC);
- } else if (OG(active_ob_buffer).output_handler) {
- zval **params[2];
- zval *orig_buffer;
- zval *z_status;
-
- ALLOC_INIT_ZVAL(orig_buffer);
- ZVAL_STRINGL(orig_buffer, OG(active_ob_buffer).buffer, OG(active_ob_buffer).text_length, 1);
- orig_buffer->refcount=2; /* don't let call_user_function() destroy our buffer */
- orig_buffer->is_ref=1;
-
- ALLOC_INIT_ZVAL(z_status);
- ZVAL_LONG(z_status, status);
-
- params[0] = &orig_buffer;
- params[1] = &z_status;
- OG(ob_lock) = 1;
-
- if (call_user_function_ex(CG(function_table), NULL, OG(active_ob_buffer).output_handler, &alternate_buffer, 2, params, 1, NULL TSRMLS_CC)==SUCCESS) {
- if (!(Z_TYPE_P(alternate_buffer)==IS_BOOL && Z_BVAL_P(alternate_buffer)==0)) {
- convert_to_string_ex(&alternate_buffer);
- final_buffer = Z_STRVAL_P(alternate_buffer);
- final_buffer_length = Z_STRLEN_P(alternate_buffer);
- }
- }
- OG(ob_lock) = 0;
- if (!just_flush) {
- zval_ptr_dtor(&OG(active_ob_buffer).output_handler);
- }
- orig_buffer->refcount -=2;
- if (orig_buffer->refcount <= 0) { /* free the zval */
- zval_dtor(orig_buffer);
- FREE_ZVAL(orig_buffer);
- }
- zval_ptr_dtor(&z_status);
- }
-
- if (!final_buffer) {
- final_buffer = OG(active_ob_buffer).buffer;
- final_buffer_length = OG(active_ob_buffer).text_length;
- }
-
- if (OG(ob_nesting_level)==1) { /* end buffering */
- if (SG(headers_sent) && !SG(request_info).headers_only) {
- OG(php_body_write) = php_ub_body_write_no_header;
- } else {
- OG(php_body_write) = php_ub_body_write;
- }
- }
-
- to_be_destroyed_buffer = OG(active_ob_buffer).buffer;
- to_be_destroyed_handler_name = OG(active_ob_buffer).handler_name;
- if (OG(active_ob_buffer).internal_output_handler
- && (final_buffer != OG(active_ob_buffer).internal_output_handler_buffer)
- && (final_buffer != OG(active_ob_buffer).buffer)) {
- to_be_destroyed_handled_output[0] = final_buffer;
- }
-
- if (!just_flush) {
- if (OG(active_ob_buffer).internal_output_handler) {
- to_be_destroyed_handled_output[1] = OG(active_ob_buffer).internal_output_handler_buffer;
- }
- }
- if (OG(ob_nesting_level)>1) { /* restore previous buffer */
- zend_stack_top(&OG(ob_buffers), (void **) &prev_ob_buffer_p);
- orig_ob_buffer = OG(active_ob_buffer);
- OG(active_ob_buffer) = *prev_ob_buffer_p;
- zend_stack_del_top(&OG(ob_buffers));
- if (!just_flush && OG(ob_nesting_level)==2) { /* destroy the stack */
- zend_stack_destroy(&OG(ob_buffers));
- }
- }
- OG(ob_nesting_level)--;
-
- if (send_buffer) {
- OG(php_body_write)(final_buffer, final_buffer_length TSRMLS_CC);
- }
-
- if (just_flush) { /* we restored the previous ob, return to the current */
- if (prev_ob_buffer_p) {
- zend_stack_push(&OG(ob_buffers), &OG(active_ob_buffer), sizeof(php_ob_buffer));
- OG(active_ob_buffer) = orig_ob_buffer;
- }
- OG(ob_nesting_level)++;
- }
-
- if (alternate_buffer) {
- zval_ptr_dtor(&alternate_buffer);
- }
-
- if (status & PHP_OUTPUT_HANDLER_END) {
- efree(to_be_destroyed_handler_name);
- }
- if (!just_flush) {
- efree(to_be_destroyed_buffer);
- } else {
- OG(active_ob_buffer).text_length = 0;
- OG(active_ob_buffer).status |= PHP_OUTPUT_HANDLER_START;
- OG(php_body_write) = php_b_body_write;
- }
- if (to_be_destroyed_handled_output[0]) {
- efree(to_be_destroyed_handled_output[0]);
- }
- if (to_be_destroyed_handled_output[1]) {
- efree(to_be_destroyed_handled_output[1]);
- }
-}
-/* }}} */
-
-/* {{{ php_end_ob_buffers
- * End output buffering (all buffers) */
-PHPAPI void php_end_ob_buffers(zend_bool send_buffer TSRMLS_DC)
-{
- while (OG(ob_nesting_level)!=0) {
- php_end_ob_buffer(send_buffer, 0 TSRMLS_CC);
- }
-}
-/* }}} */
-
-/* {{{ php_start_implicit_flush
- */
-PHPAPI void php_start_implicit_flush(TSRMLS_D)
-{
- OG(implicit_flush)=1;
-}
-/* }}} */
-
-/* {{{ php_end_implicit_flush
- */
-PHPAPI void php_end_implicit_flush(TSRMLS_D)
-{
- OG(implicit_flush)=0;
-}
-/* }}} */
-
-/* {{{ php_ob_set_internal_handler
- */
-PHPAPI void php_ob_set_internal_handler(php_output_handler_func_t internal_output_handler, uint buffer_size, char *handler_name, zend_bool erase TSRMLS_DC)
-{
- if (OG(ob_nesting_level)==0 || OG(active_ob_buffer).internal_output_handler || strcmp(OG(active_ob_buffer).handler_name, OB_DEFAULT_HANDLER_NAME)) {
- php_start_ob_buffer(NULL, buffer_size, erase TSRMLS_CC);
- }
-
- OG(active_ob_buffer).internal_output_handler = internal_output_handler;
- OG(active_ob_buffer).internal_output_handler_buffer = (char *) emalloc(buffer_size);
- OG(active_ob_buffer).internal_output_handler_buffer_size = buffer_size;
- if (OG(active_ob_buffer).handler_name) {
- efree(OG(active_ob_buffer).handler_name);
- }
- OG(active_ob_buffer).handler_name = estrdup(handler_name);
- OG(active_ob_buffer).erase = erase;
-}
-/* }}} */
-
-/*
- * Output buffering - implementation
- */
-
-/* {{{ php_ob_allocate
- */
-static inline void php_ob_allocate(uint text_length TSRMLS_DC)
-{
- uint new_len = OG(active_ob_buffer).text_length + text_length;
-
- if (OG(active_ob_buffer).size < new_len) {
- uint buf_size = OG(active_ob_buffer).size;
- while (buf_size <= new_len) {
- buf_size += OG(active_ob_buffer).block_size;
- }
-
- OG(active_ob_buffer).buffer = (char *) erealloc(OG(active_ob_buffer).buffer, buf_size+1);
- OG(active_ob_buffer).size = buf_size;
- }
- OG(active_ob_buffer).text_length = new_len;
-}
-/* }}} */
-
-/* {{{ php_ob_init_conflict
- * Returns 1 if handler_set is already used and generates error message
- */
-PHPAPI int php_ob_init_conflict(char *handler_new, char *handler_set TSRMLS_DC)
-{
- if (php_ob_handler_used(handler_set TSRMLS_CC)) {
- php_error_docref("ref.outcontrol" TSRMLS_CC, E_WARNING, "output handler '%s' conflicts with '%s'", handler_new, handler_set);
- return 1;
- }
- return 0;
-}
-/* }}} */
-
-/* {{{ php_ob_init_named
- */
-static int php_ob_init_named(uint initial_size, uint block_size, char *handler_name, zval *output_handler, uint chunk_size, zend_bool erase TSRMLS_DC)
-{
- if (output_handler && !zend_is_callable(output_handler, 0, NULL)) {
- return FAILURE;
- }
- if (OG(ob_nesting_level)>0) {
-#if HAVE_ZLIB && !defined(COMPILE_DL_ZLIB)
- if (!strncmp(handler_name, "ob_gzhandler", sizeof("ob_gzhandler")) && php_ob_gzhandler_check(TSRMLS_C)) {
- return FAILURE;
- }
-#endif
- if (OG(ob_nesting_level)==1) { /* initialize stack */
- zend_stack_init(&OG(ob_buffers));
- }
- zend_stack_push(&OG(ob_buffers), &OG(active_ob_buffer), sizeof(php_ob_buffer));
- }
- OG(ob_nesting_level)++;
- OG(active_ob_buffer).block_size = block_size;
- OG(active_ob_buffer).size = initial_size;
- OG(active_ob_buffer).buffer = (char *) emalloc(initial_size+1);
- OG(active_ob_buffer).text_length = 0;
- OG(active_ob_buffer).output_handler = output_handler;
- OG(active_ob_buffer).chunk_size = chunk_size;
- OG(active_ob_buffer).status = 0;
- OG(active_ob_buffer).internal_output_handler = NULL;
- OG(active_ob_buffer).handler_name = estrdup(handler_name&&handler_name[0]?handler_name:OB_DEFAULT_HANDLER_NAME);
- OG(active_ob_buffer).erase = erase;
- OG(php_body_write) = php_b_body_write;
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ php_ob_handler_from_string
- * Create zval output handler from string
- */
-static zval* php_ob_handler_from_string(const char *handler_name, int len TSRMLS_DC)
-{
- zval *output_handler;
-
- ALLOC_INIT_ZVAL(output_handler);
- Z_STRLEN_P(output_handler) = len;
- Z_STRVAL_P(output_handler) = estrndup(handler_name, len);
- Z_TYPE_P(output_handler) = IS_STRING;
- return output_handler;
-}
-/* }}} */
-
-/* {{{ php_ob_init
- */
-static int php_ob_init(uint initial_size, uint block_size, zval *output_handler, uint chunk_size, zend_bool erase TSRMLS_DC)
-{
- int result = FAILURE, handler_len, len;
- char *handler_name, *next_handler_name;
- HashPosition pos;
- zval **tmp;
- zval *handler_zval;
-
- if (output_handler && output_handler->type == IS_STRING) {
- handler_name = Z_STRVAL_P(output_handler);
- handler_len = Z_STRLEN_P(output_handler);
-
- result = SUCCESS;
- if (handler_len && handler_name[0] != '\0') {
- while ((next_handler_name=strchr(handler_name, ',')) != NULL) {
- len = next_handler_name-handler_name;
- next_handler_name = estrndup(handler_name, len);
- handler_zval = php_ob_handler_from_string(next_handler_name, len TSRMLS_CC);
- result = php_ob_init_named(initial_size, block_size, next_handler_name, handler_zval, chunk_size, erase TSRMLS_CC);
- if (result != SUCCESS) {
- zval_dtor(handler_zval);
- FREE_ZVAL(handler_zval);
- }
- handler_name += len+1;
- handler_len -= len+1;
- efree(next_handler_name);
- }
- }
- if (result == SUCCESS) {
- handler_zval = php_ob_handler_from_string(handler_name, handler_len TSRMLS_CC);
- result = php_ob_init_named(initial_size, block_size, handler_name, handler_zval, chunk_size, erase TSRMLS_CC);
- if (result != SUCCESS) {
- zval_dtor(handler_zval);
- FREE_ZVAL(handler_zval);
- }
- }
- } else if (output_handler && output_handler->type == IS_ARRAY) {
- /* do we have array(object,method) */
- if (zend_is_callable(output_handler, 0, &handler_name)) {
- SEPARATE_ZVAL(&output_handler);
- output_handler->refcount++;
- result = php_ob_init_named(initial_size, block_size, handler_name, output_handler, chunk_size, erase TSRMLS_CC);
- efree(handler_name);
- } else {
- efree(handler_name);
- /* init all array elements recursively */
- zend_hash_internal_pointer_reset_ex(Z_ARRVAL_P(output_handler), &pos);
- while (zend_hash_get_current_data_ex(Z_ARRVAL_P(output_handler), (void **)&tmp, &pos) == SUCCESS) {
- result = php_ob_init(initial_size, block_size, *tmp, chunk_size, erase TSRMLS_CC);
- if (result == FAILURE) {
- break;
- }
- zend_hash_move_forward_ex(Z_ARRVAL_P(output_handler), &pos);
- }
- }
- } else if (output_handler && output_handler->type == IS_OBJECT) {
- php_error_docref(NULL TSRMLS_CC, E_ERROR, "No method name given: use ob_start(array($object,'method')) to specify instance $object and the name of a method of class %s to use as output handler", Z_OBJCE_P(output_handler)->name);
- result = FAILURE;
- } else {
- result = php_ob_init_named(initial_size, block_size, OB_DEFAULT_HANDLER_NAME, NULL, chunk_size, erase TSRMLS_CC);
- }
- return result;
-}
-/* }}} */
-
-/* {{{ php_ob_list_each
- */
-static int php_ob_list_each(php_ob_buffer *ob_buffer, zval *ob_handler_array)
-{
- add_next_index_string(ob_handler_array, ob_buffer->handler_name, 1);
- return 0;
-}
-/* }}} */
-
-/* {{{ proto false|array ob_list_handlers()
- * List all output_buffers in an array
- */
-PHP_FUNCTION(ob_list_handlers)
-{
- if (ZEND_NUM_ARGS()!=0) {
- ZEND_WRONG_PARAM_COUNT();
- RETURN_FALSE;
- }
-
- array_init(return_value);
- if (OG(ob_nesting_level)) {
- if (OG(ob_nesting_level)>1) {
- zend_stack_apply_with_argument(&OG(ob_buffers), ZEND_STACK_APPLY_BOTTOMUP, (int (*)(void *element, void *)) php_ob_list_each, return_value);
- }
- php_ob_list_each(&OG(active_ob_buffer), return_value);
- }
-}
-/* }}} */
-
-/* {{{ php_ob_used_each
- * Sets handler_name to NULL is found
- */
-static int php_ob_handler_used_each(php_ob_buffer *ob_buffer, char **handler_name)
-{
- if (!strcmp(ob_buffer->handler_name, *handler_name)) {
- *handler_name = NULL;
- return 1;
- }
- return 0;
-}
-/* }}} */
-
-/* {{{ php_ob_used
- * returns 1 if given handler_name is used as output_handler
- */
-PHPAPI int php_ob_handler_used(char *handler_name TSRMLS_DC)
-{
- char *tmp = handler_name;
-
- if (OG(ob_nesting_level)) {
- if (!strcmp(OG(active_ob_buffer).handler_name, handler_name)) {
- return 1;
- }
- if (OG(ob_nesting_level)>1) {
- zend_stack_apply_with_argument(&OG(ob_buffers), ZEND_STACK_APPLY_BOTTOMUP, (int (*)(void *element, void *)) php_ob_handler_used_each, &tmp);
- }
- }
- return tmp ? 0 : 1;
-}
-/* }}} */
-
-/* {{{ php_ob_append
- */
-static inline void php_ob_append(const char *text, uint text_length TSRMLS_DC)
-{
- char *target;
- int original_ob_text_length;
-
- original_ob_text_length=OG(active_ob_buffer).text_length;
-
- php_ob_allocate(text_length TSRMLS_CC);
- target = OG(active_ob_buffer).buffer+original_ob_text_length;
- memcpy(target, text, text_length);
- target[text_length]=0;
-
- /* If implicit_flush is On or chunked buffering, send contents to next buffer and return. */
- if (OG(active_ob_buffer).chunk_size
- && OG(active_ob_buffer).text_length >= OG(active_ob_buffer).chunk_size) {
- zval *output_handler = OG(active_ob_buffer).output_handler;
-
- if (output_handler) {
- output_handler->refcount++;
- }
- php_end_ob_buffer(1, 1 TSRMLS_CC);
- return;
- }
-}
-/* }}} */
-
-#if 0
-static inline void php_ob_prepend(const char *text, uint text_length)
-{
- char *p, *start;
- TSRMLS_FETCH();
-
- php_ob_allocate(text_length TSRMLS_CC);
-
- /* php_ob_allocate() may change OG(ob_buffer), so we can't initialize p&start earlier */
- p = OG(ob_buffer)+OG(ob_text_length);
- start = OG(ob_buffer);
-
- while (--p>=start) {
- p[text_length] = *p;
- }
- memcpy(OG(ob_buffer), text, text_length);
- OG(ob_buffer)[OG(active_ob_buffer).text_length]=0;
-}
-#endif
-
-
-/* {{{ php_ob_get_buffer
- * Return the current output buffer */
-PHPAPI int php_ob_get_buffer(zval *p TSRMLS_DC)
-{
- if (OG(ob_nesting_level)==0) {
- return FAILURE;
- }
- ZVAL_STRINGL(p, OG(active_ob_buffer).buffer, OG(active_ob_buffer).text_length, 1);
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ php_ob_get_length
- * Return the size of the current output buffer */
-PHPAPI int php_ob_get_length(zval *p TSRMLS_DC)
-{
- if (OG(ob_nesting_level) == 0) {
- return FAILURE;
- }
- ZVAL_LONG(p, OG(active_ob_buffer).text_length);
- return SUCCESS;
-}
-/* }}} */
-
-/*
- * Wrapper functions - implementation
- */
-
-
-/* buffered output function */
-static int php_b_body_write(const char *str, uint str_length TSRMLS_DC)
-{
- php_ob_append(str, str_length TSRMLS_CC);
- return str_length;
-}
-
-/* {{{ php_ub_body_write_no_header
- */
-PHPAPI int php_ub_body_write_no_header(const char *str, uint str_length TSRMLS_DC)
-{
- int result;
-
- if (OG(disable_output)) {
- return 0;
- }
-
- result = OG(php_header_write)(str, str_length TSRMLS_CC);
-
- if (OG(implicit_flush)) {
- sapi_flush(TSRMLS_C);
- }
-
- return result;
-}
-/* }}} */
-
-/* {{{ php_ub_body_write
- */
-PHPAPI int php_ub_body_write(const char *str, uint str_length TSRMLS_DC)
-{
- int result = 0;
-
- if (SG(request_info).headers_only) {
- php_header(TSRMLS_C);
- zend_bailout();
- }
- if (php_header(TSRMLS_C)) {
- if (zend_is_compiling(TSRMLS_C)) {
- OG(output_start_filename) = zend_get_compiled_filename(TSRMLS_C);
- OG(output_start_lineno) = zend_get_compiled_lineno(TSRMLS_C);
- } else if (zend_is_executing(TSRMLS_C)) {
- OG(output_start_filename) = zend_get_executed_filename(TSRMLS_C);
- OG(output_start_lineno) = zend_get_executed_lineno(TSRMLS_C);
- }
-
- OG(php_body_write) = php_ub_body_write_no_header;
- result = php_ub_body_write_no_header(str, str_length TSRMLS_CC);
- }
-
- return result;
-}
-/* }}} */
-
-/*
- * HEAD support
- */
-
-/* {{{ proto bool ob_start([ string|array user_function [, int chunk_size [, bool erase]]])
- Turn on Output Buffering (specifying an optional output handler). */
-PHP_FUNCTION(ob_start)
-{
- zval *output_handler=NULL;
- long chunk_size=0;
- zend_bool erase=1;
- int argc = ZEND_NUM_ARGS();
-
- if (zend_parse_parameters(argc TSRMLS_CC, "|zlb", &output_handler, &chunk_size, &erase) == FAILURE) {
- RETURN_FALSE;
- }
-
- if (chunk_size < 0)
- chunk_size = 0;
-
- if (php_start_ob_buffer(output_handler, chunk_size, erase TSRMLS_CC)==FAILURE) {
- RETURN_FALSE;
- }
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto bool ob_flush(void)
- Flush (send) contents of the output buffer. The last buffer content is sent to next buffer */
-PHP_FUNCTION(ob_flush)
-{
- if (ZEND_NUM_ARGS() != 0) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- if (!OG(ob_nesting_level)) {
- php_error_docref("ref.outcontrol" TSRMLS_CC, E_NOTICE, "failed to flush buffer. No buffer to flush.");
- RETURN_FALSE;
- }
-
- php_end_ob_buffer(1, 1 TSRMLS_CC);
- RETURN_TRUE;
-}
-/* }}} */
-
-
-/* {{{ proto bool ob_clean(void)
- Clean (delete) the current output buffer */
-PHP_FUNCTION(ob_clean)
-{
- if (ZEND_NUM_ARGS() != 0) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- if (!OG(ob_nesting_level)) {
- php_error_docref("ref.outcontrol" TSRMLS_CC, E_NOTICE, "failed to delete buffer. No buffer to delete.");
- RETURN_FALSE;
- }
-
- if (!OG(active_ob_buffer).status && !OG(active_ob_buffer).erase) {
- php_error_docref("ref.outcontrol" TSRMLS_CC, E_NOTICE, "failed to delete buffer %s.", OG(active_ob_buffer).handler_name);
- RETURN_FALSE;
- }
-
- php_end_ob_buffer(0, 1 TSRMLS_CC);
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto bool ob_end_flush(void)
- Flush (send) the output buffer, and delete current output buffer */
-PHP_FUNCTION(ob_end_flush)
-{
- if (ZEND_NUM_ARGS() != 0) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- if (!OG(ob_nesting_level)) {
- php_error_docref("ref.outcontrol" TSRMLS_CC, E_NOTICE, "failed to delete and flush buffer. No buffer to delete or flush.");
- RETURN_FALSE;
- }
- if (OG(ob_nesting_level) && !OG(active_ob_buffer).status && !OG(active_ob_buffer).erase) {
- php_error_docref("ref.outcontrol" TSRMLS_CC, E_NOTICE, "failed to delete buffer %s.", OG(active_ob_buffer).handler_name);
- RETURN_FALSE;
- }
-
- php_end_ob_buffer(1, 0 TSRMLS_CC);
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto bool ob_end_clean(void)
- Clean the output buffer, and delete current output buffer */
-PHP_FUNCTION(ob_end_clean)
-{
- if (ZEND_NUM_ARGS() != 0) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- if (!OG(ob_nesting_level)) {
- php_error_docref("ref.outcontrol" TSRMLS_CC, E_NOTICE, "failed to delete buffer. No buffer to delete.");
- RETURN_FALSE;
- }
- if (OG(ob_nesting_level) && !OG(active_ob_buffer).status && !OG(active_ob_buffer).erase) {
- php_error_docref("ref.outcontrol" TSRMLS_CC, E_NOTICE, "failed to delete buffer %s.", OG(active_ob_buffer).handler_name);
- RETURN_FALSE;
- }
-
- php_end_ob_buffer(0, 0 TSRMLS_CC);
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto bool ob_get_flush(void)
- Get current buffer contents, flush (send) the output buffer, and delete current output buffer */
-PHP_FUNCTION(ob_get_flush)
-{
- if (ZEND_NUM_ARGS() != 0) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- /* get contents */
- if (php_ob_get_buffer(return_value TSRMLS_CC)==FAILURE) {
- RETURN_FALSE;
- }
- /* error checks */
- if (!OG(ob_nesting_level)) {
- php_error_docref("ref.outcontrol" TSRMLS_CC, E_NOTICE, "failed to delete and flush buffer. No buffer to delete or flush.");
- RETURN_FALSE;
- }
- if (OG(ob_nesting_level) && !OG(active_ob_buffer).status && !OG(active_ob_buffer).erase) {
- php_error_docref("ref.outcontrol" TSRMLS_CC, E_NOTICE, "failed to delete buffer %s.", OG(active_ob_buffer).handler_name);
- RETURN_FALSE;
- }
- /* flush */
- php_end_ob_buffer(1, 0 TSRMLS_CC);
-}
-/* }}} */
-
-/* {{{ proto bool ob_get_clean(void)
- Get current buffer contents and delete current output buffer */
-PHP_FUNCTION(ob_get_clean)
-{
- if (ZEND_NUM_ARGS() != 0)
- ZEND_WRONG_PARAM_COUNT();
-
- /* get contents */
- if (php_ob_get_buffer(return_value TSRMLS_CC)==FAILURE) {
- RETURN_FALSE;
- }
- /* error checks */
- if (!OG(ob_nesting_level)) {
- php_error_docref("ref.outcontrol" TSRMLS_CC, E_NOTICE, "failed to delete buffer. No buffer to delete.");
- RETURN_FALSE;
- }
- if (OG(ob_nesting_level) && !OG(active_ob_buffer).status && !OG(active_ob_buffer).erase) {
- php_error_docref("ref.outcontrol" TSRMLS_CC, E_NOTICE, "failed to delete buffer %s.", OG(active_ob_buffer).handler_name);
- RETURN_FALSE;
- }
- /* delete buffer */
- php_end_ob_buffer(0, 0 TSRMLS_CC);
-}
-/* }}} */
-
-/* {{{ proto string ob_get_contents(void)
- Return the contents of the output buffer */
-PHP_FUNCTION(ob_get_contents)
-{
- if (ZEND_NUM_ARGS() != 0) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- if (php_ob_get_buffer(return_value TSRMLS_CC)==FAILURE) {
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-/* {{{ proto int ob_get_level(void)
- Return the nesting level of the output buffer */
-PHP_FUNCTION(ob_get_level)
-{
- if (ZEND_NUM_ARGS() != 0) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- RETURN_LONG (OG(ob_nesting_level));
-}
-/* }}} */
-
-/* {{{ proto int ob_get_length(void)
- Return the length of the output buffer */
-PHP_FUNCTION(ob_get_length)
-{
- if (ZEND_NUM_ARGS() != 0) {
- ZEND_WRONG_PARAM_COUNT();
- }
-
- if (php_ob_get_length(return_value TSRMLS_CC)==FAILURE) {
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-/* {{{ int php_ob_buffer_status(php_ob_buffer *ob_buffer, zval *result) */
-static int php_ob_buffer_status(php_ob_buffer *ob_buffer, zval *result)
-{
- zval *elem;
-
- MAKE_STD_ZVAL(elem);
- array_init(elem);
-
- add_assoc_long(elem, "chunk_size", ob_buffer->chunk_size);
- if (!ob_buffer->chunk_size) {
- add_assoc_long(elem, "size", ob_buffer->size);
- add_assoc_long(elem, "block_size", ob_buffer->block_size);
- }
- if (ob_buffer->internal_output_handler) {
- add_assoc_long(elem, "type", PHP_OUTPUT_HANDLER_INTERNAL);
- add_assoc_long(elem, "buffer_size", ob_buffer->internal_output_handler_buffer_size);
- }
- else {
- add_assoc_long(elem, "type", PHP_OUTPUT_HANDLER_USER);
- }
- add_assoc_long(elem, "status", ob_buffer->status);
- add_assoc_string(elem, "name", ob_buffer->handler_name, 1);
- add_assoc_bool(elem, "del", ob_buffer->erase);
- add_next_index_zval(result, elem);
-
- return SUCCESS;
-}
-/* }}} */
-
-
-/* {{{ proto false|array ob_get_status([bool full_status])
- Return the status of the active or all output buffers */
-PHP_FUNCTION(ob_get_status)
-{
- int argc = ZEND_NUM_ARGS();
- zend_bool full_status = 0;
-
- if (zend_parse_parameters(argc TSRMLS_CC, "|b", &full_status) == FAILURE )
- RETURN_FALSE;
-
- array_init(return_value);
-
- if (full_status) {
- if (OG(ob_nesting_level)>1) {
- zend_stack_apply_with_argument(&OG(ob_buffers), ZEND_STACK_APPLY_BOTTOMUP, (int (*)(void *elem, void *))php_ob_buffer_status, return_value);
- }
- if (OG(ob_nesting_level)>0 && php_ob_buffer_status(&OG(active_ob_buffer), return_value)==FAILURE) {
- RETURN_FALSE;
- }
- } else if (OG(ob_nesting_level)>0) {
- add_assoc_long(return_value, "level", OG(ob_nesting_level));
- if (OG(active_ob_buffer).internal_output_handler) {
- add_assoc_long(return_value, "type", PHP_OUTPUT_HANDLER_INTERNAL);
- } else {
- add_assoc_long(return_value, "type", PHP_OUTPUT_HANDLER_USER);
- }
- add_assoc_long(return_value, "status", OG(active_ob_buffer).status);
- add_assoc_string(return_value, "name", OG(active_ob_buffer).handler_name, 1);
- add_assoc_bool(return_value, "del", OG(active_ob_buffer).erase);
- }
-}
-/* }}} */
-
-
-/* {{{ proto void ob_implicit_flush([int flag])
- Turn implicit flush on/off and is equivalent to calling flush() after every output call */
-PHP_FUNCTION(ob_implicit_flush)
-{
- zval **zv_flag;
- int flag;
-
- switch(ZEND_NUM_ARGS()) {
- case 0:
- flag = 1;
- break;
- case 1:
- if (zend_get_parameters_ex(1, &zv_flag)==FAILURE) {
- RETURN_FALSE;
- }
- convert_to_long_ex(zv_flag);
- flag = Z_LVAL_PP(zv_flag);
- break;
- default:
- ZEND_WRONG_PARAM_COUNT();
- break;
- }
- if (flag) {
- php_start_implicit_flush(TSRMLS_C);
- } else {
- php_end_implicit_flush(TSRMLS_C);
- }
-}
-/* }}} */
-
-
-/* {{{ char *php_get_output_start_filename(TSRMLS_D)
- Return filename start output something */
-PHPAPI char *php_get_output_start_filename(TSRMLS_D)
-{
- return OG(output_start_filename);
-}
-/* }}} */
-
-
-/* {{{ char *php_get_output_start_lineno(TSRMLS_D)
- Return line number start output something */
-PHPAPI int php_get_output_start_lineno(TSRMLS_D)
-{
- return OG(output_start_lineno);
-}
-/* }}} */
-
-
-/* {{{ proto bool output_reset_rewrite_vars(void)
- Reset(clear) URL rewriter values */
-PHP_FUNCTION(output_reset_rewrite_vars)
-{
- if (php_url_scanner_reset_vars(TSRMLS_C) == SUCCESS) {
- RETURN_TRUE;
- } else {
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-
-/* {{{ proto bool output_add_rewrite_var(string name, string value)
- Add URL rewriter values */
-PHP_FUNCTION(output_add_rewrite_var)
-{
- char *name, *value;
- int name_len, value_len;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ss", &name, &name_len, &value, &value_len) == FAILURE) {
- RETURN_FALSE;
- }
-
- if (php_url_scanner_add_var(name, name_len, value, value_len, 1 TSRMLS_CC) == SUCCESS) {
- RETURN_TRUE;
- } else {
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-/*
- * 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/main/php.h b/main/php.h
deleted file mode 100644
index f19affd178..0000000000
--- a/main/php.h
+++ /dev/null
@@ -1,468 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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. |
- +----------------------------------------------------------------------+
- | Authors: Andi Gutmans <andi@zend.com> |
- | Zeev Suraski <zeev@zend.com> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-#ifndef PHP_H
-#define PHP_H
-
-#ifdef HAVE_DMALLOC
-#include <dmalloc.h>
-#endif
-
-#define PHP_API_VERSION 20031224
-#define PHP_HAVE_STREAMS
-#define YYDEBUG 0
-
-#include "php_version.h"
-#include "zend.h"
-#include "zend_qsort.h"
-#include "php_compat.h"
-
-#include "zend_API.h"
-
-#if PHP_BROKEN_SPRINTF
-#undef sprintf
-#define sprintf php_sprintf
-#endif
-
-/* PHP's DEBUG value must match Zend's ZEND_DEBUG value */
-#undef PHP_DEBUG
-#define PHP_DEBUG ZEND_DEBUG
-
-#ifdef PHP_WIN32
-#include "tsrm_win32.h"
-#include "win95nt.h"
-# ifdef PHP_EXPORTS
-# define PHPAPI __declspec(dllexport)
-# else
-# define PHPAPI __declspec(dllimport)
-# endif
-#define PHP_DIR_SEPARATOR '\\'
-#define PHP_EOL "\r\n"
-#else
-#define PHPAPI
-#define THREAD_LS
-#define PHP_DIR_SEPARATOR '/'
-#if defined(__MacOSX__)
-#define PHP_EOL "\r"
-#else
-#define PHP_EOL "\n"
-#endif
-#endif
-
-#ifdef NETWARE
-/* For php_get_uname() function */
-#define PHP_UNAME "NetWare"
-/*
- * This is obtained using uname(2) on Unix and assigned in the case of Windows;
- * we'll do it this way at least for now.
- */
-#define PHP_OS PHP_UNAME
-#endif
-
-#include "php_regex.h"
-
-#if HAVE_ASSERT_H
-#if PHP_DEBUG
-#undef NDEBUG
-#else
-#ifndef NDEBUG
-#define NDEBUG
-#endif
-#endif
-#include <assert.h>
-#else /* HAVE_ASSERT_H */
-#define assert(expr) ((void) (0))
-#endif /* HAVE_ASSERT_H */
-
-#define APACHE 0
-
-#if HAVE_UNIX_H
-#include <unix.h>
-#endif
-
-#if HAVE_ALLOCA_H
-#include <alloca.h>
-#endif
-
-#if HAVE_BUILD_DEFS_H
-#include "build-defs.h"
-#endif
-
-/*
- * This is a fast version of strlcpy which should be used, if you
- * know the size of the destination buffer and if you know
- * the length of the source string.
- *
- * size is the allocated number of bytes of dst
- * src_size is the number of bytes excluding the NUL of src
- */
-
-#define PHP_STRLCPY(dst, src, size, src_size) \
- { \
- size_t php_str_len; \
- \
- if (src_size >= size) \
- php_str_len = size - 1; \
- else \
- php_str_len = src_size; \
- memcpy(dst, src, php_str_len); \
- dst[php_str_len] = '\0'; \
- }
-
-#ifndef HAVE_STRLCPY
-BEGIN_EXTERN_C()
-PHPAPI size_t php_strlcpy(char *dst, const char *src, size_t siz);
-END_EXTERN_C()
-#undef strlcpy
-#define strlcpy php_strlcpy
-#endif
-
-#ifndef HAVE_STRLCAT
-BEGIN_EXTERN_C()
-PHPAPI size_t php_strlcat(char *dst, const char *src, size_t siz);
-END_EXTERN_C()
-#undef strlcat
-#define strlcat php_strlcat
-#endif
-
-#ifndef HAVE_STRTOK_R
-BEGIN_EXTERN_C()
-char *strtok_r(char *s, const char *delim, char **last);
-END_EXTERN_C()
-#endif
-
-#ifndef HAVE_SOCKLEN_T
-typedef unsigned int socklen_t;
-#endif
-
-#define CREATE_MUTEX(a, b)
-#define SET_MUTEX(a)
-#define FREE_MUTEX(a)
-
-/*
- * Then the ODBC support can use both iodbc and Solid,
- * uncomment this.
- * #define HAVE_ODBC (HAVE_IODBC|HAVE_SOLID)
- */
-
-#include <stdlib.h>
-#include <ctype.h>
-#if HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-#if HAVE_STDARG_H
-#include <stdarg.h>
-#else
-# if HAVE_SYS_VARARGS_H
-# include <sys/varargs.h>
-# endif
-#endif
-
-
-#include "zend_hash.h"
-#include "php3_compat.h"
-#include "zend_alloc.h"
-#include "zend_stack.h"
-
-#if STDC_HEADERS
-# include <string.h>
-#else
-# ifndef HAVE_MEMCPY
-# define memcpy(d, s, n) bcopy((s), (d), (n))
-# endif
-# ifndef HAVE_MEMMOVE
-# define memmove(d, s, n) bcopy ((s), (d), (n))
-# endif
-#endif
-
-#include "safe_mode.h"
-
-#ifndef HAVE_STRERROR
-char *strerror(int);
-#endif
-
-#if (REGEX == 1 || REGEX == 0) && !defined(NO_REGEX_EXTRA_H)
-#include "regex/regex_extra.h"
-#endif
-
-#if HAVE_PWD_H
-# ifdef PHP_WIN32
-#include "win32/pwd.h"
-#include "win32/param.h"
-#elif defined(NETWARE)
-#ifdef NEW_LIBC
-#include <sys/param.h>
-#else
-#include "NetWare/param.h"
-#endif
-#include "NetWare/pwd.h"
-# else
-#include <pwd.h>
-#include <sys/param.h>
-# endif
-#endif
-
-#if HAVE_LIMITS_H
-#include <limits.h>
-#endif
-
-#ifndef LONG_MAX
-#define LONG_MAX 2147483647L
-#endif
-
-#ifndef LONG_MIN
-#define LONG_MIN (- LONG_MAX - 1)
-#endif
-
-#define PHP_GCC_VERSION ZEND_GCC_VERSION
-#define PHP_ATTRIBUTE_MALLOC ZEND_ATTRIBUTE_MALLOC
-#define PHP_ATTRIBUTE_FORMAT ZEND_ATTRIBUTE_FORMAT
-
-#if !defined(HAVE_SNPRINTF) || !defined(HAVE_VSNPRINTF) || PHP_BROKEN_SPRINTF || PHP_BROKEN_SNPRINTF || PHP_BROKEN_VSNPRINTF
-#include "snprintf.h"
-#endif
-#include "spprintf.h"
-
-#define EXEC_INPUT_BUF 4096
-
-#define PHP_MIME_TYPE "application/x-httpd-php"
-
-/* macros */
-#define STR_PRINT(str) ((str)?(str):"")
-
-#ifndef MAXPATHLEN
-# ifdef PATH_MAX
-# define MAXPATHLEN PATH_MAX
-# else
-# define MAXPATHLEN 256 /* Should be safe for any weird systems that do not define it */
-# endif
-#endif
-
-
-/* global variables */
-extern pval *data;
-#if !defined(PHP_WIN32)
-#ifdef NETWARE
-#ifdef NEW_LIBC
-#define php_sleep sleep
-#else /* NEW_LIBC */
-#define php_sleep delay /* sleep() and usleep() are not available */
-#define usleep delay
-#endif /* NEW_LIBC */
-extern char **environ;
-#else /* NETWARE */
-extern char **environ;
-#define php_sleep sleep
-#endif /* NETWARE */
-#endif /* !defined(PHP_WIN32) */
-
-#ifdef PHP_PWRITE_64
-ssize_t pwrite(int, void *, size_t, off64_t);
-#endif
-
-#ifdef PHP_PREAD_64
-ssize_t pread(int, void *, size_t, off64_t);
-#endif
-
-BEGIN_EXTERN_C()
-void phperror(char *error);
-PHPAPI int php_write(void *buf, uint size TSRMLS_DC);
-PHPAPI int php_printf(const char *format, ...) PHP_ATTRIBUTE_FORMAT(printf, 1,
- 2);
-PHPAPI void php_log_err(char *log_message TSRMLS_DC);
-int Debug(char *format, ...) PHP_ATTRIBUTE_FORMAT(printf, 1, 2);
-int cfgparse(void);
-END_EXTERN_C()
-
-#define php_error zend_error
-
-typedef enum {
- EH_NORMAL = 0,
- EH_SUPPRESS,
- EH_THROW
-} error_handling_t;
-
-BEGIN_EXTERN_C()
-PHPAPI void php_set_error_handling(error_handling_t error_handling, zend_class_entry *exception_class TSRMLS_DC);
-#define php_std_error_handling() php_set_error_handling(EH_NORMAL, NULL TSRMLS_CC)
-
-PHPAPI void php_verror(const char *docref, const char *params, int type, const char *format, va_list args TSRMLS_DC) PHP_ATTRIBUTE_FORMAT(printf, 4, 0);
-
-#ifdef ZTS
-#define PHP_ATTR_FMT_OFFSET 1
-#else
-#define PHP_ATTR_FMT_OFFSET 0
-#endif
-
-/* PHPAPI void php_error(int type, const char *format, ...); */
-PHPAPI void php_error_docref0(const char *docref TSRMLS_DC, int type, const char *format, ...)
- PHP_ATTRIBUTE_FORMAT(printf, PHP_ATTR_FMT_OFFSET + 3, PHP_ATTR_FMT_OFFSET + 4);
-PHPAPI void php_error_docref1(const char *docref TSRMLS_DC, const char *param1, int type, const char *format, ...)
- PHP_ATTRIBUTE_FORMAT(printf, PHP_ATTR_FMT_OFFSET + 4, PHP_ATTR_FMT_OFFSET + 5);
-PHPAPI void php_error_docref2(const char *docref TSRMLS_DC, const char *param1, const char *param2, int type, const char *format, ...)
- PHP_ATTRIBUTE_FORMAT(printf, PHP_ATTR_FMT_OFFSET + 5, PHP_ATTR_FMT_OFFSET + 6);
-END_EXTERN_C()
-
-#define php_error_docref php_error_docref0
-
-#define zenderror phperror
-#define zendlex phplex
-
-#define phpparse zendparse
-#define phprestart zendrestart
-#define phpin zendin
-
-#define php_memnstr zend_memnstr
-
-/* functions */
-BEGIN_EXTERN_C()
-int php_startup_internal_extensions(void);
-
-int php_mergesort(void *base, size_t nmemb, register size_t size, int (*cmp)(const void *, const void * TSRMLS_DC) TSRMLS_DC);
-
-PHPAPI void php_register_pre_request_shutdown(void (*func)(void *), void *userdata);
-
-PHPAPI int cfg_get_long(char *varname, long *result);
-PHPAPI int cfg_get_double(char *varname, double *result);
-PHPAPI int cfg_get_string(char *varname, char **result);
-END_EXTERN_C()
-
-/* PHP-named Zend macro wrappers */
-#define PHP_FN ZEND_FN
-#define PHP_NAMED_FUNCTION ZEND_NAMED_FUNCTION
-#define PHP_FUNCTION ZEND_FUNCTION
-#define PHP_METHOD ZEND_METHOD
-
-#define PHP_NAMED_FE ZEND_NAMED_FE
-#define PHP_FE ZEND_FE
-#define PHP_FALIAS ZEND_FALIAS
-#define PHP_ME ZEND_ME
-#define PHP_ME_MAPPING ZEND_ME_MAPPING
-
-#define PHP_MODULE_STARTUP_N ZEND_MODULE_STARTUP_N
-#define PHP_MODULE_SHUTDOWN_N ZEND_MODULE_SHUTDOWN_N
-#define PHP_MODULE_ACTIVATE_N ZEND_MODULE_ACTIVATE_N
-#define PHP_MODULE_DEACTIVATE_N ZEND_MODULE_DEACTIVATE_N
-#define PHP_MODULE_INFO_N ZEND_MODULE_INFO_N
-
-#define PHP_MODULE_STARTUP_D ZEND_MODULE_STARTUP_D
-#define PHP_MODULE_SHUTDOWN_D ZEND_MODULE_SHUTDOWN_D
-#define PHP_MODULE_ACTIVATE_D ZEND_MODULE_ACTIVATE_D
-#define PHP_MODULE_DEACTIVATE_D ZEND_MODULE_DEACTIVATE_D
-#define PHP_MODULE_INFO_D ZEND_MODULE_INFO_D
-
-/* Compatibility macros */
-#define PHP_MINIT ZEND_MODULE_STARTUP_N
-#define PHP_MSHUTDOWN ZEND_MODULE_SHUTDOWN_N
-#define PHP_RINIT ZEND_MODULE_ACTIVATE_N
-#define PHP_RSHUTDOWN ZEND_MODULE_DEACTIVATE_N
-#define PHP_MINFO ZEND_MODULE_INFO_N
-
-#define PHP_MINIT_FUNCTION ZEND_MODULE_STARTUP_D
-#define PHP_MSHUTDOWN_FUNCTION ZEND_MODULE_SHUTDOWN_D
-#define PHP_RINIT_FUNCTION ZEND_MODULE_ACTIVATE_D
-#define PHP_RSHUTDOWN_FUNCTION ZEND_MODULE_DEACTIVATE_D
-#define PHP_MINFO_FUNCTION ZEND_MODULE_INFO_D
-
-
-/* Output support */
-#include "main/php_output.h"
-#define PHPWRITE(str, str_len) php_body_write((str), (str_len) TSRMLS_CC)
-#define PUTS(str) do { \
- const char *__str = (str); \
- php_body_write(__str, strlen(__str) TSRMLS_CC); \
-} while (0)
-
-#define PUTC(c) (php_body_write(&(c), 1 TSRMLS_CC), (c))
-#define PHPWRITE_H(str, str_len) php_header_write((str), (str_len) TSRMLS_CC)
-#define PUTS_H(str) do { \
- const char *__str = (str); \
- php_header_write(__str, strlen(__str) TSRMLS_CC); \
-} while (0)
-
-#define PUTC_H(c) (php_header_write(&(c), 1 TSRMLS_CC), (c))
-
-#ifdef ZTS
-#define VIRTUAL_DIR
-#endif
-
-#include "php_streams.h"
-#include "php_memory_streams.h"
-#include "fopen_wrappers.h"
-
-
-/* Virtual current working directory support */
-#include "tsrm_virtual_cwd.h"
-
-#include "zend_constants.h"
-
-/* connection status states */
-#define PHP_CONNECTION_NORMAL 0
-#define PHP_CONNECTION_ABORTED 1
-#define PHP_CONNECTION_TIMEOUT 2
-
-#include "php_reentrancy.h"
-
-/* Finding offsets of elements within structures.
- * Taken from the Apache code, which in turn, was taken from X code...
- */
-
-#ifndef XtOffset
-#if defined(CRAY) || (defined(__arm) && !defined(LINUX))
-#ifdef __STDC__
-#define XtOffset(p_type, field) _Offsetof(p_type, field)
-#else
-#ifdef CRAY2
-#define XtOffset(p_type, field) \
- (sizeof(int)*((unsigned int)&(((p_type)NULL)->field)))
-
-#else /* !CRAY2 */
-
-#define XtOffset(p_type, field) ((unsigned int)&(((p_type)NULL)->field))
-
-#endif /* !CRAY2 */
-#endif /* __STDC__ */
-#else /* ! (CRAY || __arm) */
-
-#define XtOffset(p_type, field) \
- ((long) (((char *) (&(((p_type)NULL)->field))) - ((char *) NULL)))
-
-#endif /* !CRAY */
-#endif /* ! XtOffset */
-
-#ifndef XtOffsetOf
-#ifdef offsetof
-#define XtOffsetOf(s_type, field) offsetof(s_type, field)
-#else
-#define XtOffsetOf(s_type, field) XtOffset(s_type*, field)
-#endif
-#endif /* !XtOffsetOf */
-
-#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/main/php3_compat.h b/main/php3_compat.h
deleted file mode 100644
index f9248e704d..0000000000
--- a/main/php3_compat.h
+++ /dev/null
@@ -1,122 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifndef PHP3_COMPAT_H
-#define PHP3_COMPAT_H
-
-typedef zval pval;
-
-#define pval_copy_constructor zval_copy_ctor
-#define pval_destructor zval_dtor
-
-#define _php3_hash_init zend_hash_init
-#define _php3_hash_destroy zend_hash_destroy
-
-#define _php3_hash_clean zend_hash_clean
-
-#define _php3_hash_add_or_update zend_hash_add_or_update
-#define _php3_hash_add zend_hash_add
-#define _php3_hash_update zend_hash_update
-
-#define _php3_hash_quick_add_or_update zend_hash_quick_add_or_update
-#define _php3_hash_quick_add zend_hash_quick_add
-#define _php3_hash_quick_update zend_hash_quick_update
-
-#define _php3_hash_index_update_or_next_insert zend_hash_index_update_or_next_insert
-#define _php3_hash_index_update zend_hash_index_update
-#define _php3_hash_next_index_insert zend_hash_next_index_insert
-
-#define _php3_hash_pointer_update zend_hash_pointer_update
-
-#define _php3_hash_pointer_index_update_or_next_insert zend_hash_pointer_index_update_or_next_insert
-#define _php3_hash_pointer_index_update zend_hash_pointer_index_update
-#define _php3_hash_next_index_pointer_update zend_hash_next_index_pointer_update
-#define _php3_hash_next_index_pointer_insert zend_hash_next_index_pointer_insert
-
-#define _php3_hash_del_key_or_index zend_hash_del_key_or_index
-#define _php3_hash_del zend_hash_del
-#define _php3_hash_index_del zend_hash_index_del
-
-#define _php3_hash_find zend_hash_find
-#define _php3_hash_quick_find zend_hash_quick_find
-#define _php3_hash_index_find zend_hash_index_find
-
-#define _php3_hash_exists zend_hash_exists
-#define _php3_hash_index_exists zend_hash_index_exists
-#define _php3_hash_is_pointer zend_hash_is_pointer
-#define _php3_hash_index_is_pointer zend_hash_index_is_pointer
-#define _php3_hash_next_free_element zend_hash_next_free_element
-
-#define _php3_hash_move_forward zend_hash_move_forward
-#define _php3_hash_move_backwards zend_hash_move_backwards
-#define _php3_hash_get_current_key zend_hash_get_current_key
-#define _php3_hash_get_current_data zend_hash_get_current_data
-#define _php3_hash_internal_pointer_reset zend_hash_internal_pointer_reset
-#define _php3_hash_internal_pointer_end zend_hash_internal_pointer_end
-
-#define _php3_hash_copy zend_hash_copy
-#define _php3_hash_merge zend_hash_merge
-#define _php3_hash_sort zend_hash_sort
-#define _php3_hash_minmax zend_hash_minmax
-
-#define _php3_hash_num_elements zend_hash_num_elements
-
-#define _php3_hash_apply zend_hash_apply
-#define _php3_hash_apply_with_argument zend_hash_apply_with_argument
-
-
-#define php3_error php_error
-
-#define php3_printf php_printf
-#define _php3_sprintf php_sprintf
-
-
-
-#define php3_module_entry zend_module_entry
-
-#define php3_strndup zend_strndup
-#define php3_str_tolower zend_str_tolower
-#define php3_binary_strcmp zend_binary_strcmp
-
-
-#define php3_list_insert zend_list_insert
-#define php3_list_find zend_list_find
-#define php3_list_delete zend_list_delete
-
-#define php3_plist_insert zend_plist_insert
-#define php3_plist_find zend_plist_find
-#define php3_plist_delete zend_plist_delete
-
-#define zend_print_pval zend_print_zval
-#define zend_print_pval_r zend_print_zval_r
-
-
-#define function_entry zend_function_entry
-
-#define _php3_addslashes php_addslashes
-#define _php3_stripslashes php_stripslashes
-#define php3_dl php_dl
-
-#define getParameters zend_get_parameters
-#define getParametersArray zend_get_parameters_array
-
-#define list_entry zend_rsrc_list_entry
-
-#endif /* PHP3_COMPAT_H */
diff --git a/main/php_compat.h b/main/php_compat.h
deleted file mode 100644
index 5f11e0635b..0000000000
--- a/main/php_compat.h
+++ /dev/null
@@ -1,341 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifndef PHP_COMPAT_H
-#define PHP_COMPAT_H
-
-#ifdef PHP_WIN32
-#include "config.w32.h"
-#elif defined(NETWARE)
-#include "config.nw.h"
-#else
-#include "php_config.h"
-#endif
-
-#if defined(HAVE_BUNDLED_PCRE) || !defined(PHP_VERSION)
-#define pcre_compile php_pcre_compile
-#define pcre_copy_substring php_pcre_copy_substring
-#define pcre_exec php_pcre_exec
-#define pcre_get_substring php_pcre_substring
-#define pcre_get_substring_list php_pcre_get_substring_list
-#define pcre_info php_pcre_info
-#define pcre_maketables php_pcre_maketables
-#define pcre_study php_pcre_study
-#define pcre_version php_pcre_version
-#define pcre_fullinfo php_pcre_fullinfo
-#endif
-
-#define lookup php_lookup
-#define hashTableInit php_hashTableInit
-#define hashTableDestroy php_hashTableDestroy
-#define hashTableIterInit php_hashTableIterInit
-#define hashTableIterNext php_hashTableIterNext
-
-#if defined(HAVE_LIBXML) && defined(HAVE_XML) && !defined(HAVE_LIBEXPAT)
-#define XML_DefaultCurrent php_XML_DefaultCurrent
-#define XML_ErrorString php_XML_ErrorString
-#define XML_ExpatVersion php_XML_ExpatVersion
-#define XML_ExpatVersionInfo php_XML_ExpatVersionInfo
-#define XML_ExternalEntityParserCreate php_XML_ExternalEntityParserCreate
-#define XML_GetBase php_XML_GetBase
-#define XML_GetBuffer php_XML_GetBuffer
-#define XML_GetCurrentByteCount php_XML_GetCurrentByteCount
-#define XML_GetCurrentByteIndex php_XML_GetCurrentByteIndex
-#define XML_GetCurrentColumnNumber php_XML_GetCurrentColumnNumber
-#define XML_GetCurrentLineNumber php_XML_GetCurrentLineNumber
-#define XML_GetErrorCode php_XML_GetErrorCode
-#define XML_GetIdAttributeIndex php_XML_GetIdAttributeIndex
-#define XML_GetInputContext php_XML_GetInputContext
-#define XML_GetSpecifiedAttributeCount php_XML_GetSpecifiedAttributeCount
-#define XmlGetUtf16InternalEncodingNS php_XmlGetUtf16InternalEncodingNS
-#define XmlGetUtf16InternalEncoding php_XmlGetUtf16InternalEncoding
-#define XmlGetUtf8InternalEncodingNS php_XmlGetUtf8InternalEncodingNS
-#define XmlGetUtf8InternalEncoding php_XmlGetUtf8InternalEncoding
-#define XmlInitEncoding php_XmlInitEncoding
-#define XmlInitEncodingNS php_XmlInitEncodingNS
-#define XmlInitUnknownEncoding php_XmlInitUnknownEncoding
-#define XmlInitUnknownEncodingNS php_XmlInitUnknownEncodingNS
-#define XML_ParseBuffer php_XML_ParseBuffer
-#define XML_Parse php_XML_Parse
-#define XML_ParserCreate_MM php_XML_ParserCreate_MM
-#define XML_ParserCreateNS php_XML_ParserCreateNS
-#define XML_ParserCreate php_XML_ParserCreate
-#define XML_ParserFree php_XML_ParserFree
-#define XmlParseXmlDecl php_XmlParseXmlDecl
-#define XmlParseXmlDeclNS php_XmlParseXmlDeclNS
-#define XmlPrologStateInitExternalEntity php_XmlPrologStateInitExternalEntity
-#define XmlPrologStateInit php_XmlPrologStateInit
-#define XML_SetAttlistDeclHandler php_XML_SetAttlistDeclHandler
-#define XML_SetBase php_XML_SetBase
-#define XML_SetCdataSectionHandler php_XML_SetCdataSectionHandler
-#define XML_SetCharacterDataHandler php_XML_SetCharacterDataHandler
-#define XML_SetCommentHandler php_XML_SetCommentHandler
-#define XML_SetDefaultHandlerExpand php_XML_SetDefaultHandlerExpand
-#define XML_SetDefaultHandler php_XML_SetDefaultHandler
-#define XML_SetDoctypeDeclHandler php_XML_SetDoctypeDeclHandler
-#define XML_SetElementDeclHandler php_XML_SetElementDeclHandler
-#define XML_SetElementHandler php_XML_SetElementHandler
-#define XML_SetEncoding php_XML_SetEncoding
-#define XML_SetEndCdataSectionHandler php_XML_SetEndCdataSectionHandler
-#define XML_SetEndDoctypeDeclHandler php_XML_SetEndDoctypeDeclHandler
-#define XML_SetEndElementHandler php_XML_SetEndElementHandler
-#define XML_SetEndNamespaceDeclHandler php_XML_SetEndNamespaceDeclHandler
-#define XML_SetEntityDeclHandler php_XML_SetEntityDeclHandler
-#define XML_SetExternalEntityRefHandlerArg php_XML_SetExternalEntityRefHandlerArg
-#define XML_SetExternalEntityRefHandler php_XML_SetExternalEntityRefHandler
-#define XML_SetNamespaceDeclHandler php_XML_SetNamespaceDeclHandler
-#define XML_SetNotationDeclHandler php_XML_SetNotationDeclHandler
-#define XML_SetNotStandaloneHandler php_XML_SetNotStandaloneHandler
-#define XML_SetParamEntityParsing php_XML_SetParamEntityParsing
-#define XML_SetProcessingInstructionHandler php_XML_SetProcessingInstructionHandler
-#define XML_SetReturnNSTriplet php_XML_SetReturnNSTriplet
-#define XML_SetStartCdataSectionHandler php_XML_SetStartCdataSectionHandler
-#define XML_SetStartDoctypeDeclHandler php_XML_SetStartDoctypeDeclHandler
-#define XML_SetStartElementHandler php_XML_SetStartElementHandler
-#define XML_SetStartNamespaceDeclHandler php_XML_SetStartNamespaceDeclHandler
-#define XML_SetUnknownEncodingHandler php_XML_SetUnknownEncodingHandler
-#define XML_SetUnparsedEntityDeclHandler php_XML_SetUnparsedEntityDeclHandler
-#define XML_SetUserData php_XML_SetUserData
-#define XML_SetXmlDeclHandler php_XML_SetXmlDeclHandler
-#define XmlSizeOfUnknownEncoding php_XmlSizeOfUnknownEncoding
-#define XML_UseParserAsHandlerArg php_XML_UseParserAsHandlerArg
-#define XmlUtf16Encode php_XmlUtf16Encode
-#define XmlUtf8Encode php_XmlUtf8Encode
-#define XML_FreeContentModel php_XML_FreeContentModel
-#define XML_MemMalloc php_XML_MemMalloc
-#define XML_MemRealloc php_XML_MemRealloc
-#define XML_MemFree php_XML_MemFree
-#define XML_UseForeignDTD php_XML_UseForeignDTD
-#define XML_GetFeatureList php_XML_GetFeatureList
-#define XML_ParserReset php_XML_ParserReset
-
-#ifdef HAVE_GD_BUNDLED
-#define any2eucjp php_gd_any2eucjp
-#define createwbmp php_gd_createwbmp
-#define empty_output_buffer php_gd_empty_output_buffer
-#define fill_input_buffer php_gd_fill_input_buffer
-#define freewbmp php_gd_freewbmp
-#define gdAlphaBlend php_gd_gdAlphaBlend
-#define gdCompareInt php_gd_gdCompareInt
-#define gdCosT php_gd_gdCosT
-#define gdCtxPrintf php_gd_gdCtxPrintf
-#define gdDPExtractData php_gd_gdDPExtractData
-#define gdFontGetGiant php_gd_gdFontGetGiant
-#define gdFontGetLarge php_gd_gdFontGetLarge
-#define gdFontGetMediumBold php_gd_gdFontGetMediumBold
-#define gdFontGetSmall php_gd_gdFontGetSmall
-#define gdFontGetTiny php_gd_gdFontGetTiny
-#define gdFontGiant php_gd_gdFontGiant
-#define gdFontGiantData php_gd_gdFontGiantData
-#define gdFontGiantRep php_gd_gdFontGiantRep
-#define gdFontLarge php_gd_gdFontLarge
-#define gdFontLargeData php_gd_gdFontLargeData
-#define gdFontLargeRep php_gd_gdFontLargeRep
-#define gdFontMediumBold php_gd_gdFontMediumBold
-#define gdFontMediumBoldData php_gd_gdFontMediumBoldData
-#define gdFontMediumBoldRep php_gd_gdFontMediumBoldRep
-#define gdFontSmall php_gd_gdFontSmall
-#define gdFontSmallData php_gd_gdFontSmallData
-#define gdFontSmallRep php_gd_gdFontSmallRep
-#define gdFontTiny php_gd_gdFontTiny
-#define gdFontTinyData php_gd_gdFontTinyData
-#define gdFontTinyRep php_gd_gdFontTinyRep
-#define gdGetBuf php_gd_gdGetBuf
-#define gdGetByte php_gd_gdGetByte
-#define gdGetC php_gd_gdGetC
-#define _gdGetColors php_gd__gdGetColors
-#define gd_getin php_gd_gd_getin
-#define gdGetInt php_gd_gdGetInt
-#define gdGetWord php_gd_gdGetWord
-#define gdImageAABlend php_gd_gdImageAABlend
-#define gdImageAALine php_gd_gdImageAALine
-#define gdImageAlphaBlending php_gd_gdImageAlphaBlending
-#define gdImageAntialias php_gd_gdImageAntialias
-#define gdImageArc php_gd_gdImageArc
-#define gdImageBrightness php_gd_gdImageBrightness
-#define gdImageChar php_gd_gdImageChar
-#define gdImageCharUp php_gd_gdImageCharUp
-#define gdImageColor php_gd_gdImageColor
-#define gdImageColorAllocate php_gd_gdImageColorAllocate
-#define gdImageColorAllocateAlpha php_gd_gdImageColorAllocateAlpha
-#define gdImageColorClosest php_gd_gdImageColorClosest
-#define gdImageColorClosestAlpha php_gd_gdImageColorClosestAlpha
-#define gdImageColorClosestHWB php_gd_gdImageColorClosestHWB
-#define gdImageColorDeallocate php_gd_gdImageColorDeallocate
-#define gdImageColorExact php_gd_gdImageColorExact
-#define gdImageColorExactAlpha php_gd_gdImageColorExactAlpha
-#define gdImageColorMatch php_gd_gdImageColorMatch
-#define gdImageColorResolve php_gd_gdImageColorResolve
-#define gdImageColorResolveAlpha php_gd_gdImageColorResolveAlpha
-#define gdImageColorTransparent php_gd_gdImageColorTransparent
-#define gdImageCompare php_gd_gdImageCompare
-#define gdImageContrast php_gd_gdImageContrast
-#define gdImageConvolution php_gd_gdImageConvolution
-#define gdImageCopy php_gd_gdImageCopy
-#define gdImageCopyMerge php_gd_gdImageCopyMerge
-#define gdImageCopyMergeGray php_gd_gdImageCopyMergeGray
-#define gdImageCopyResampled php_gd_gdImageCopyResampled
-#define gdImageCopyResized php_gd_gdImageCopyResized
-#define gdImageCreate php_gd_gdImageCreate
-#define gdImageCreateFromGd php_gd_gdImageCreateFromGd
-#define gdImageCreateFromGd2 php_gd_gdImageCreateFromGd2
-#define gdImageCreateFromGd2Ctx php_gd_gdImageCreateFromGd2Ctx
-#define gdImageCreateFromGd2Part php_gd_gdImageCreateFromGd2Part
-#define gdImageCreateFromGd2PartCtx php_gd_gdImageCreateFromGd2PartCtx
-#define gdImageCreateFromGd2PartPtr php_gd_gdImageCreateFromGd2PartPtr
-#define gdImageCreateFromGd2Ptr php_gd_gdImageCreateFromGd2Ptr
-#define gdImageCreateFromGdCtx php_gd_gdImageCreateFromGdCtx
-#define gdImageCreateFromGdPtr php_gd_gdImageCreateFromGdPtr
-#define gdImageCreateFromGif php_gd_gdImageCreateFromGif
-#define gdImageCreateFromGifCtx php_gd_gdImageCreateFromGifCtx
-#define gdImageCreateFromGifSource php_gd_gdImageCreateFromGifSource
-#define gdImageCreateFromJpeg php_gd_gdImageCreateFromJpeg
-#define gdImageCreateFromJpegCtx php_gd_gdImageCreateFromJpegCtx
-#define gdImageCreateFromJpegPtr php_gd_gdImageCreateFromJpegPtr
-#define gdImageCreateFromPng php_gd_gdImageCreateFromPng
-#define gdImageCreateFromPngCtx php_gd_gdImageCreateFromPngCtx
-#define gdImageCreateFromPngPtr php_gd_gdImageCreateFromPngPtr
-#define gdImageCreateFromPngSource php_gd_gdImageCreateFromPngSource
-#define gdImageCreateFromWBMP php_gd_gdImageCreateFromWBMP
-#define gdImageCreateFromWBMPCtx php_gd_gdImageCreateFromWBMPCtx
-#define gdImageCreateFromWBMPPtr php_gd_gdImageCreateFromWBMPPtr
-#define gdImageCreateFromXbm php_gd_gdImageCreateFromXbm
-#define gdImageCreatePaletteFromTrueColor php_gd_gdImageCreatePaletteFromTrueColor
-#define gdImageCreateTrueColor php_gd_gdImageCreateTrueColor
-#define gdImageDashedLine php_gd_gdImageDashedLine
-#define gdImageDestroy php_gd_gdImageDestroy
-#define gdImageEdgeDetectQuick php_gd_gdImageEdgeDetectQuick
-#define gdImageEllipse php_gd_gdImageEllipse
-#define gdImageEmboss php_gd_gdImageEmboss
-#define gdImageFill php_gd_gdImageFill
-#define gdImageFilledArc php_gd_gdImageFilledArc
-#define gdImageFilledEllipse php_gd_gdImageFilledEllipse
-#define gdImageFilledPolygon php_gd_gdImageFilledPolygon
-#define gdImageFilledRectangle php_gd_gdImageFilledRectangle
-#define _gdImageFillTiled php_gd__gdImageFillTiled
-#define gdImageFillToBorder php_gd_gdImageFillToBorder
-#define gdImageGaussianBlur php_gd_gdImageGaussianBlur
-#define gdImageGd php_gd_gdImageGd
-#define gdImageGd2 php_gd_gdImageGd2
-#define gdImageGd2Ptr php_gd_gdImageGd2Ptr
-#define gdImageGdPtr php_gd_gdImageGdPtr
-#define gdImageGetClip php_gd_gdImageGetClip
-#define gdImageGetPixel php_gd_gdImageGetPixel
-#define gdImageGetTrueColorPixel php_gd_gdImageGetTrueColorPixel
-#define gdImageGif php_gd_gdImageGif
-#define gdImageGifCtx php_gd_gdImageGifCtx
-#define gdImageGifPtr php_gd_gdImageGifPtr
-#define gdImageGrayScale php_gd_gdImageGrayScale
-#define gdImageInterlace php_gd_gdImageInterlace
-#define gdImageJpeg php_gd_gdImageJpeg
-#define gdImageJpegCtx php_gd_gdImageJpegCtx
-#define gdImageJpegPtr php_gd_gdImageJpegPtr
-#define gdImageLine php_gd_gdImageLine
-#define gdImageMeanRemoval php_gd_gdImageMeanRemoval
-#define gdImageNegate php_gd_gdImageNegate
-#define gdImagePaletteCopy php_gd_gdImagePaletteCopy
-#define gdImagePng php_gd_gdImagePng
-#define gdImagePngCtx php_gd_gdImagePngCtx
-#define gdImagePngCtxEx php_gd_gdImagePngCtxEx
-#define gdImagePngEx php_gd_gdImagePngEx
-#define gdImagePngPtr php_gd_gdImagePngPtr
-#define gdImagePngPtrEx php_gd_gdImagePngPtrEx
-#define gdImagePngToSink php_gd_gdImagePngToSink
-#define gdImagePolygon php_gd_gdImagePolygon
-#define gdImageRectangle php_gd_gdImageRectangle
-#define gdImageRotate php_gd_gdImageRotate
-#define gdImageRotate180 php_gd_gdImageRotate180
-#define gdImageRotate270 php_gd_gdImageRotate270
-#define gdImageRotate45 php_gd_gdImageRotate45
-#define gdImageRotate90 php_gd_gdImageRotate90
-#define gdImageSaveAlpha php_gd_gdImageSaveAlpha
-#define gdImageSelectiveBlur php_gd_gdImageSelectiveBlur
-#define gdImageSetAntiAliased php_gd_gdImageSetAntiAliased
-#define gdImageSetAntiAliasedDontBlend php_gd_gdImageSetAntiAliasedDontBlend
-#define gdImageSetBrush php_gd_gdImageSetBrush
-#define gdImageSetClip php_gd_gdImageSetClip
-#define gdImageSetPixel php_gd_gdImageSetPixel
-#define gdImageSetStyle php_gd_gdImageSetStyle
-#define gdImageSetThickness php_gd_gdImageSetThickness
-#define gdImageSetTile php_gd_gdImageSetTile
-#define gdImageSkewX php_gd_gdImageSkewX
-#define gdImageSkewY php_gd_gdImageSkewY
-#define gdImageSmooth php_gd_gdImageSmooth
-#define gdImageString php_gd_gdImageString
-#define gdImageString16 php_gd_gdImageString16
-#define gdImageStringFT php_gd_gdImageStringFT
-#define gdImageStringFTEx php_gd_gdImageStringFTEx
-#define gdImageStringTTF php_gd_gdImageStringTTF
-#define gdImageStringUp php_gd_gdImageStringUp
-#define gdImageStringUp16 php_gd_gdImageStringUp16
-#define gdImageTrueColorToPalette php_gd_gdImageTrueColorToPalette
-#define gdImageWBMP php_gd_gdImageWBMP
-#define gdImageWBMPCtx php_gd_gdImageWBMPCtx
-#define gdImageWBMPPtr php_gd_gdImageWBMPPtr
-#define gdImageXbmCtx php_gd_gdImageXbmCtx
-#define gdNewDynamicCtx php_gd_gdNewDynamicCtx
-#define gdNewDynamicCtxEx php_gd_gdNewDynamicCtxEx
-#define gdNewFileCtx php_gd_gdNewFileCtx
-#define gdNewSSCtx php_gd_gdNewSSCtx
-#define gdPutBuf php_gd_gdPutBuf
-#define gdPutC php_gd_gdPutC
-#define _gdPutColors php_gd__gdPutColors
-#define gdPutInt php_gd_gdPutInt
-#define gd_putout php_gd_gd_putout
-#define gdPutWord php_gd_gdPutWord
-#define gdSeek php_gd_gdSeek
-#define gdSinT php_gd_gdSinT
-#define gd_strtok_r php_gd_gd_strtok_r
-#define gdTell php_gd_gdTell
-#define getmbi php_gd_getmbi
-#define init_destination php_gd_init_destination
-#define init_source php_gd_init_source
-#define jpeg_gdIOCtx_dest php_gd_jpeg_gdIOCtx_dest
-#define jpeg_gdIOCtx_src php_gd_jpeg_gdIOCtx_src
-#define lsqrt php_gd_lsqrt
-#define printwbmp php_gd_printwbmp
-#define Putchar php_gd_Putchar
-#define putmbi php_gd_putmbi
-#define Putword php_gd_Putword
-#define readwbmp php_gd_readwbmp
-#define skipheader php_gd_skipheader
-#define skip_input_data php_gd_skip_input_data
-#define term_destination php_gd_term_destination
-#define term_source php_gd_term_source
-#define writewbmp php_gd_writewbmp
-#define ZeroDataBlock php_gd_ZeroDataBlock
-#endif /* HAVE_GD_BUNDLED */
-
-/* Define to specify how much context to retain around the current parse
- point. */
-#define XML_CONTEXT_BYTES 1024
-
-/* Define to make parameter entity parsing functionality available. */
-#define XML_DTD 1
-
-/* Define to make XML Namespaces functionality available. */
-#define XML_NS 1
-#endif
-
-#ifdef PHP_EXPORTS
-#define PCRE_STATIC
-#endif
-
-#endif
diff --git a/main/php_content_types.c b/main/php_content_types.c
deleted file mode 100644
index 3dfabf840a..0000000000
--- a/main/php_content_types.c
+++ /dev/null
@@ -1,92 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#include "php.h"
-#include "SAPI.h"
-#include "rfc1867.h"
-
-#include "php_content_types.h"
-
-/* {{{ php_post_entries[]
- */
-static sapi_post_entry php_post_entries[] = {
- { DEFAULT_POST_CONTENT_TYPE, sizeof(DEFAULT_POST_CONTENT_TYPE)-1, sapi_read_standard_form_data, php_std_post_handler },
- { MULTIPART_CONTENT_TYPE, sizeof(MULTIPART_CONTENT_TYPE)-1, NULL, rfc1867_post_handler },
- { NULL, 0, NULL, NULL }
-};
-/* }}} */
-
-/* {{{ SAPI_POST_READER_FUNC
- */
-SAPI_API SAPI_POST_READER_FUNC(php_default_post_reader)
-{
- char *data = NULL;
- int length = 0;
-
- /* $HTTP_RAW_POST_DATA registration */
- if(!strcmp(SG(request_info).request_method, "POST")) {
- if(NULL == SG(request_info).post_entry) {
- /* no post handler registered, so we just swallow the data */
- sapi_read_standard_form_data(TSRMLS_C);
- length = SG(request_info).post_data_length;
- data = estrndup(SG(request_info).post_data, length);
- } else if(PG(always_populate_raw_post_data) && SG(request_info).post_data) {
- length = SG(request_info).post_data_length;
- data = estrndup(SG(request_info).post_data, length);
- }
- if(data) {
- SET_VAR_STRINGL("HTTP_RAW_POST_DATA", data, length);
- }
- }
-
- /* for php://input stream:
- some post handlers modify the content of request_info.post_data
- so for now we need a copy for the php://input stream
- in the long run post handlers should be changed to not touch
- request_info.post_data for memory preservation reasons
- */
- if(SG(request_info).post_data) {
- SG(request_info).raw_post_data = estrndup(SG(request_info).post_data, SG(request_info).post_data_length);
- SG(request_info).raw_post_data_length = SG(request_info).post_data_length;
- }
-
-}
-/* }}} */
-
-/* {{{ php_startup_sapi_content_types
- */
-int php_startup_sapi_content_types(void)
-{
- sapi_register_post_entries(php_post_entries);
- sapi_register_default_post_reader(php_default_post_reader);
- sapi_register_treat_data(php_default_treat_data);
- sapi_register_input_filter(php_default_input_filter);
- return SUCCESS;
-}
-/* }}} */
-
-/*
- * 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/main/php_content_types.h b/main/php_content_types.h
deleted file mode 100644
index deab9271b1..0000000000
--- a/main/php_content_types.h
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifndef PHP_CONTENT_TYPES_H
-#define PHP_CONTENT_TYPES_H
-
-#define DEFAULT_POST_CONTENT_TYPE "application/x-www-form-urlencoded"
-
-SAPI_API SAPI_POST_READER_FUNC(php_default_post_reader);
-SAPI_API SAPI_POST_HANDLER_FUNC(php_std_post_handler);
-int php_startup_sapi_content_types(void);
-
-#endif /* PHP_CONTENT_TYPES_H */
diff --git a/main/php_globals.h b/main/php_globals.h
deleted file mode 100644
index 5d8530850f..0000000000
--- a/main/php_globals.h
+++ /dev/null
@@ -1,163 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Zeev Suraski <zeev@zend.com> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifndef PHP_GLOBALS_H
-#define PHP_GLOBALS_H
-
-#include "zend_globals.h"
-
-typedef struct _php_core_globals php_core_globals;
-
-#ifdef ZTS
-# define PG(v) TSRMG(core_globals_id, php_core_globals *, v)
-extern PHPAPI int core_globals_id;
-#else
-# define PG(v) (core_globals.v)
-extern ZEND_API struct _php_core_globals core_globals;
-#endif
-
-
-#define TRACK_VARS_POST 0
-#define TRACK_VARS_GET 1
-#define TRACK_VARS_COOKIE 2
-#define TRACK_VARS_SERVER 3
-#define TRACK_VARS_ENV 4
-#define TRACK_VARS_FILES 5
-#define TRACK_VARS_REQUEST 6
-
-struct _php_tick_function_entry;
-
-typedef struct _arg_separators {
- char *output;
- char *input;
-} arg_separators;
-
-struct _php_core_globals {
- zend_bool magic_quotes_gpc;
- zend_bool magic_quotes_runtime;
- zend_bool magic_quotes_sybase;
-
- zend_bool safe_mode;
-
- zend_bool allow_call_time_pass_reference;
- zend_bool implicit_flush;
-
- long output_buffering;
-
- char *safe_mode_include_dir;
- zend_bool safe_mode_gid;
- zend_bool sql_safe_mode;
- zend_bool enable_dl;
-
- char *output_handler;
-
- char *unserialize_callback_func;
- long serialize_precision;
-
- char *safe_mode_exec_dir;
-
- long memory_limit;
- long max_input_time;
-
- zend_bool track_errors;
- zend_bool display_errors;
- zend_bool display_startup_errors;
- zend_bool log_errors;
- long log_errors_max_len;
- zend_bool ignore_repeated_errors;
- zend_bool ignore_repeated_source;
- zend_bool report_memleaks;
- char *error_log;
-
- char *doc_root;
- char *user_dir;
- char *include_path;
- char *open_basedir;
- char *extension_dir;
-
- char *upload_tmp_dir;
- long upload_max_filesize;
-
- char *error_append_string;
- char *error_prepend_string;
-
- char *auto_prepend_file;
- char *auto_append_file;
-
- arg_separators arg_separator;
-
- char *variables_order;
-
- HashTable rfc1867_protected_variables;
-
- short connection_status;
- short ignore_user_abort;
-
- unsigned char header_is_being_sent;
-
- zend_llist tick_functions;
-
- zval *http_globals[6];
-
- zend_bool expose_php;
-
- zend_bool register_globals;
- zend_bool register_long_arrays;
- zend_bool register_argc_argv;
- zend_bool auto_globals_jit;
-
- zend_bool y2k_compliance;
-
- char *docref_root;
- char *docref_ext;
-
- zend_bool html_errors;
- zend_bool xmlrpc_errors;
-
- long xmlrpc_error_number;
-
- zend_bool activated_auto_globals[8];
-
- zend_bool modules_activated;
- zend_bool file_uploads;
- zend_bool during_request_startup;
- zend_bool allow_url_fopen;
- zend_bool always_populate_raw_post_data;
- zend_bool report_zend_debug;
-
- char *last_error_message;
- char *last_error_file;
- int last_error_lineno;
- error_handling_t error_handling;
- zend_class_entry *exception_class;
-
- char *disable_functions;
- char *disable_classes;
-};
-
-
-#endif /* PHP_GLOBALS_H */
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- */
diff --git a/main/php_ini.c b/main/php_ini.c
deleted file mode 100644
index 35542ef63d..0000000000
--- a/main/php_ini.c
+++ /dev/null
@@ -1,630 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Zeev Suraski <zeev@zend.com> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-/* Check CWD for php.ini */
-#define INI_CHECK_CWD
-
-#include "php.h"
-#include "ext/standard/info.h"
-#include "zend_ini.h"
-#include "php_ini.h"
-#include "ext/standard/dl.h"
-#include "zend_extensions.h"
-#include "zend_highlight.h"
-#include "SAPI.h"
-#include "php_main.h"
-#include "php_scandir.h"
-#ifdef PHP_WIN32
-#include "win32/php_registry.h"
-#endif
-
-#if HAVE_SCANDIR && HAVE_ALPHASORT && HAVE_DIRENT_H
-#include <dirent.h>
-#endif
-
-#ifndef S_ISREG
-#define S_ISREG(mode) (((mode) & S_IFMT) == S_IFREG)
-#endif
-
-typedef struct _php_extension_lists {
- zend_llist engine;
- zend_llist functions;
-} php_extension_lists;
-
-
-/* True globals */
-static HashTable configuration_hash;
-PHPAPI char *php_ini_opened_path=NULL;
-static php_extension_lists extension_lists;
-PHPAPI char *php_ini_scanned_files=NULL;
-
-/* {{{ php_ini_displayer_cb
- */
-static void php_ini_displayer_cb(zend_ini_entry *ini_entry, int type)
-{
- if (ini_entry->displayer) {
- ini_entry->displayer(ini_entry, type);
- } else {
- char *display_string;
- uint display_string_length, esc_html=0;
- TSRMLS_FETCH();
-
- if (type == ZEND_INI_DISPLAY_ORIG && ini_entry->modified) {
- if (ini_entry->orig_value && ini_entry->orig_value[0]) {
- display_string = ini_entry->orig_value;
- display_string_length = ini_entry->orig_value_length;
- esc_html = !sapi_module.phpinfo_as_text;
- } else {
- if (!sapi_module.phpinfo_as_text) {
- display_string = "<i>no value</i>";
- display_string_length = sizeof("<i>no value</i>") - 1;
- } else {
- display_string = "no value";
- display_string_length = sizeof("no value") - 1;
- }
- }
- } else if (ini_entry->value && ini_entry->value[0]) {
- display_string = ini_entry->value;
- display_string_length = ini_entry->value_length;
- esc_html = !sapi_module.phpinfo_as_text;
- } else {
- if (!sapi_module.phpinfo_as_text) {
- display_string = "<i>no value</i>";
- display_string_length = sizeof("<i>no value</i>") - 1;
- } else {
- display_string = "no value";
- display_string_length = sizeof("no value") - 1;
- }
- }
-
- if (esc_html) {
- php_html_puts(display_string, display_string_length TSRMLS_CC);
- } else {
- PHPWRITE(display_string, display_string_length);
- }
- }
-}
-/* }}} */
-
-/* {{{ php_ini_displayer
- */
-static int php_ini_displayer(zend_ini_entry *ini_entry, int module_number TSRMLS_DC)
-{
- if (ini_entry->module_number != module_number) {
- return 0;
- }
- if (!sapi_module.phpinfo_as_text) {
- PUTS("<tr>");
- PUTS("<td class=\"e\">");
- PHPWRITE(ini_entry->name, ini_entry->name_length - 1);
- PUTS("</td><td class=\"v\">");
- php_ini_displayer_cb(ini_entry, ZEND_INI_DISPLAY_ACTIVE);
- PUTS("</td><td class=\"v\">");
- php_ini_displayer_cb(ini_entry, ZEND_INI_DISPLAY_ORIG);
- PUTS("</td></tr>\n");
- } else {
- PHPWRITE(ini_entry->name, ini_entry->name_length - 1);
- PUTS(" => ");
- php_ini_displayer_cb(ini_entry, ZEND_INI_DISPLAY_ACTIVE);
- PUTS(" => ");
- php_ini_displayer_cb(ini_entry, ZEND_INI_DISPLAY_ORIG);
- PUTS("\n");
- }
- return 0;
-}
-/* }}} */
-
-/* {{{ display_ini_entries
- */
-PHPAPI void display_ini_entries(zend_module_entry *module)
-{
- int module_number;
- TSRMLS_FETCH();
-
- if (module) {
- module_number = module->module_number;
- } else {
- module_number = 0;
- }
- php_info_print_table_start();
- php_info_print_table_header(3, "Directive", "Local Value", "Master Value");
- zend_hash_apply_with_argument(EG(ini_directives), (apply_func_arg_t) php_ini_displayer, (void *) (long) module_number TSRMLS_CC);
- php_info_print_table_end();
-}
-/* }}} */
-
-/* php.ini support */
-
-#ifdef ZTS
-# if (ZEND_DEBUG)
-# define ZEND_EXTENSION_TOKEN "zend_extension_debug_ts"
-# else
-# define ZEND_EXTENSION_TOKEN "zend_extension_ts"
-# endif
-#else
-# if (ZEND_DEBUG)
-# define ZEND_EXTENSION_TOKEN "zend_extension_debug"
-# else
-# define ZEND_EXTENSION_TOKEN "zend_extension"
-# endif
-#endif
-
-/* {{{ pvalue_config_destructor
- */
-static void pvalue_config_destructor(zval *pvalue)
-{
- if (Z_TYPE_P(pvalue) == IS_STRING) {
- free(Z_STRVAL_P(pvalue));
- }
-}
-/* }}} */
-
-/* {{{ php_config_ini_parser_cb
- */
-static void php_config_ini_parser_cb(zval *arg1, zval *arg2, int callback_type, void *arg)
-{
- switch (callback_type) {
- case ZEND_INI_PARSER_ENTRY: {
- zval *entry;
-
- if (!arg2) {
- break;
- }
- if (!strcasecmp(Z_STRVAL_P(arg1), "extension")) { /* load function module */
- zval copy;
-
- copy = *arg2;
- zval_copy_ctor(&copy);
- copy.refcount = 0;
- zend_llist_add_element(&extension_lists.functions, &copy);
- } else if (!strcasecmp(Z_STRVAL_P(arg1), ZEND_EXTENSION_TOKEN)) { /* load Zend extension */
- char *extension_name = estrndup(Z_STRVAL_P(arg2), Z_STRLEN_P(arg2));
-
- zend_llist_add_element(&extension_lists.engine, &extension_name);
- } else {
- zend_hash_update(&configuration_hash, Z_STRVAL_P(arg1), Z_STRLEN_P(arg1) + 1, arg2, sizeof(zval), (void **) &entry);
- Z_STRVAL_P(entry) = zend_strndup(Z_STRVAL_P(entry), Z_STRLEN_P(entry));
- }
- }
- break;
-
- case ZEND_INI_PARSER_POP_ENTRY: {
- zval *hash;
- zval **find_hash;
- zval *element;
-
- if (!arg2) {
- /* bare string - nothing to do */
- break;
- }
-
- if (zend_hash_find(&configuration_hash, Z_STRVAL_P(arg1), Z_STRLEN_P(arg1) + 1, (void **) &find_hash) == FAILURE) {
- ALLOC_ZVAL(hash);
- array_init(hash);
-
- zend_hash_update(&configuration_hash, Z_STRVAL_P(arg1), Z_STRLEN_P(arg1) + 1, &hash, sizeof(zval *), NULL);
- } else {
- hash = *find_hash;
- }
-
- ALLOC_ZVAL(element);
- *element = *arg2;
- zval_copy_ctor(element);
- INIT_PZVAL(element);
- add_next_index_zval(hash, element);
- }
- break;
-
- case ZEND_INI_PARSER_SECTION:
- break;
- }
-}
-/* }}} */
-
-/* {{{ php_load_function_extension_cb
- */
-static void php_load_function_extension_cb(void *arg TSRMLS_DC)
-{
- zval *extension = (zval *) arg;
- zval zval;
-
- php_dl(extension, MODULE_PERSISTENT, &zval TSRMLS_CC);
-}
-/* }}} */
-
-/* {{{ php_load_zend_extension_cb
- */
-static void php_load_zend_extension_cb(void *arg TSRMLS_DC)
-{
- zend_load_extension(*((char **) arg));
-}
-/* }}} */
-
-/* {{{ php_init_config
- */
-int php_init_config()
-{
- char *env_location, *php_ini_search_path;
- char *binary_location;
- int safe_mode_state;
- char *open_basedir;
- int free_ini_search_path=0;
- zend_file_handle fh;
- struct stat sb;
- char ini_file[MAXPATHLEN];
- char *p;
- zend_llist scanned_ini_list;
- int l, total_l=0;
- zend_llist_element *element;
- TSRMLS_FETCH();
-
- if (zend_hash_init(&configuration_hash, 0, NULL, (dtor_func_t) pvalue_config_destructor, 1) == FAILURE) {
- return FAILURE;
- }
-
- if (sapi_module.ini_defaults) {
- sapi_module.ini_defaults(&configuration_hash);
- }
-
- zend_llist_init(&extension_lists.engine, sizeof(char *), (llist_dtor_func_t) free_estring, 1);
- zend_llist_init(&extension_lists.functions, sizeof(zval), (llist_dtor_func_t) ZVAL_DESTRUCTOR, 1);
- zend_llist_init(&scanned_ini_list, sizeof(char *), (llist_dtor_func_t) free_estring, 1);
-
- safe_mode_state = PG(safe_mode);
- open_basedir = PG(open_basedir);
-
- env_location = getenv("PHPRC");
- if (!env_location) {
- env_location = "";
- }
- if (sapi_module.php_ini_path_override) {
- php_ini_search_path = sapi_module.php_ini_path_override;
- free_ini_search_path = 0;
- } else {
- char *default_location;
- static const char paths_separator[] = { ZEND_PATHS_SEPARATOR, 0 };
-#ifdef PHP_WIN32
- char *reg_location;
-#endif
-
- php_ini_search_path = (char *) emalloc(MAXPATHLEN * 4 + strlen(env_location) + 3 + 1);
- free_ini_search_path = 1;
- php_ini_search_path[0] = 0;
-
-#ifdef PHP_WIN32
- /* Add registry location */
- reg_location = GetIniPathFromRegistry();
- if(reg_location != NULL) {
- if (*php_ini_search_path) {
- strcat(php_ini_search_path, paths_separator);
- }
- strcat(php_ini_search_path, reg_location);
- efree(reg_location);
- }
-#endif
- /*
- * Prepare search path
- */
-
- /* Add environment location */
- if (env_location[0]) {
- if (*php_ini_search_path) {
- strcat(php_ini_search_path, paths_separator);
- }
- strcat(php_ini_search_path, env_location);
- }
-
- /* Add cwd */
-#ifdef INI_CHECK_CWD
- if (strcmp(sapi_module.name, "cli") != 0) {
- if (*php_ini_search_path) {
- strcat(php_ini_search_path, paths_separator);
- }
- strcat(php_ini_search_path, ".");
- }
-#endif
-
- /* Add binary directory */
-#ifdef PHP_WIN32
- binary_location = (char *) emalloc(MAXPATHLEN);
- if (GetModuleFileName(0, binary_location, MAXPATHLEN) == 0) {
- efree(binary_location);
- binary_location = NULL;
- }
-#else
- if (sapi_module.executable_location) {
- binary_location = estrdup(sapi_module.executable_location);
- } else {
- binary_location = NULL;
- }
-#endif
- if (binary_location) {
- char *separator_location = strrchr(binary_location, DEFAULT_SLASH);
-
- if (separator_location) {
- *(separator_location+1) = 0;
- }
- if (*php_ini_search_path) {
- strcat(php_ini_search_path, paths_separator);
- }
- strcat(php_ini_search_path, binary_location);
- efree(binary_location);
- }
-
- /* Add default location */
-#ifdef PHP_WIN32
- default_location = (char *) emalloc(MAXPATHLEN + 1);
-
- if (0 < GetWindowsDirectory(default_location, MAXPATHLEN)) {
- if (*php_ini_search_path) {
- strcat(php_ini_search_path, paths_separator);
- }
- strcat(php_ini_search_path, default_location);
- }
- efree(default_location);
-
- {
- /* For people running under terminal services, GetWindowsDirectory will
- * return their personal Windows directory, so lets add the system
- * windows directory too */
- typedef UINT (WINAPI *get_system_windows_directory_func)(char *buffer, UINT size);
- static get_system_windows_directory_func get_system_windows_directory = NULL;
- HMODULE kern;
-
- if (get_system_windows_directory == NULL) {
- kern = LoadLibrary("kernel32.dll");
- if (kern) {
- get_system_windows_directory = (get_system_windows_directory_func)GetProcAddress(kern, "GetSystemWindowsDirectoryA");
- }
- }
- if (get_system_windows_directory != NULL) {
- default_location = (char *) emalloc(MAXPATHLEN + 1);
- if (0 < get_system_windows_directory(default_location, MAXPATHLEN)) {
- if (*php_ini_search_path) {
- strcat(php_ini_search_path, paths_separator);
- }
- strcat(php_ini_search_path, default_location);
- }
- efree(default_location);
- }
- }
-#else
- default_location = PHP_CONFIG_FILE_PATH;
- if (*php_ini_search_path) {
- strcat(php_ini_search_path, paths_separator);
- }
- strcat(php_ini_search_path, default_location);
-#endif
- }
-
- PG(safe_mode) = 0;
- PG(open_basedir) = NULL;
-
- memset(&fh, 0, sizeof(fh));
- /* Check if php_ini_path_override is a file */
- if (!sapi_module.php_ini_ignore) {
- if (sapi_module.php_ini_path_override && sapi_module.php_ini_path_override[0]) {
- struct stat statbuf;
-
- if (!VCWD_STAT(sapi_module.php_ini_path_override, &statbuf)) {
- if (!((statbuf.st_mode & S_IFMT) == S_IFDIR)) {
- fh.handle.fp = VCWD_FOPEN(sapi_module.php_ini_path_override, "r");
- fh.filename = sapi_module.php_ini_path_override;
- }
- }
- }
- /* Search php-%sapi-module-name%.ini file in search path */
- if (!fh.handle.fp) {
- const char *fmt = "php-%s.ini";
- char *ini_fname = emalloc(strlen(fmt) + strlen(sapi_module.name));
- sprintf(ini_fname, fmt, sapi_module.name);
- fh.handle.fp = php_fopen_with_path(ini_fname, "r", php_ini_search_path, &php_ini_opened_path TSRMLS_CC);
- efree(ini_fname);
- if (fh.handle.fp) {
- fh.filename = php_ini_opened_path;
- }
- }
- /* Search php.ini file in search path */
- if (!fh.handle.fp) {
- fh.handle.fp = php_fopen_with_path("php.ini", "r", php_ini_search_path, &php_ini_opened_path TSRMLS_CC);
- if (fh.handle.fp) {
- fh.filename = php_ini_opened_path;
- }
- }
- }
-
- if (free_ini_search_path) {
- efree(php_ini_search_path);
- }
-
- PG(safe_mode) = safe_mode_state;
- PG(open_basedir) = open_basedir;
-
- if (fh.handle.fp) {
- fh.type = ZEND_HANDLE_FP;
-
- zend_parse_ini_file(&fh, 1, php_config_ini_parser_cb, &extension_lists);
-
- {
- zval tmp;
-
- Z_STRLEN(tmp) = strlen(fh.filename);
- Z_STRVAL(tmp) = zend_strndup(fh.filename, Z_STRLEN(tmp));
- Z_TYPE(tmp) = IS_STRING;
- zend_hash_update(&configuration_hash, "cfg_file_path", sizeof("cfg_file_path"), (void *) &tmp, sizeof(zval), NULL);
- if (php_ini_opened_path) {
- efree(php_ini_opened_path);
- }
- php_ini_opened_path = zend_strndup(Z_STRVAL(tmp), Z_STRLEN(tmp));
- }
- }
-
- /* If the config_file_scan_dir is set at compile-time, go and scan this directory and
- * parse any .ini files found in this directory. */
- if (!sapi_module.php_ini_ignore && strlen(PHP_CONFIG_FILE_SCAN_DIR)) {
- struct dirent **namelist;
- int ndir, i;
-
- if ((ndir = php_scandir(PHP_CONFIG_FILE_SCAN_DIR, &namelist, 0, php_alphasort)) > 0) {
- for (i = 0; i < ndir; i++) {
- /* check for a .ini extension */
- if (!(p = strrchr(namelist[i]->d_name, '.')) || (p && strcmp(p, ".ini"))) {
- free(namelist[i]);
- continue;
- }
- snprintf(ini_file, MAXPATHLEN, "%s%c%s", PHP_CONFIG_FILE_SCAN_DIR, DEFAULT_SLASH, namelist[i]->d_name);
- if (VCWD_STAT(ini_file, &sb) == 0) {
- if (S_ISREG(sb.st_mode)) {
- if ((fh.handle.fp = VCWD_FOPEN(ini_file, "r"))) {
- fh.filename = ini_file;
- fh.type = ZEND_HANDLE_FP;
- zend_parse_ini_file(&fh, 1, php_config_ini_parser_cb, &extension_lists);
- /* Here, add it to the list of ini files read */
- l = strlen(ini_file);
- total_l += l + 2;
- p = estrndup(ini_file, l);
- zend_llist_add_element(&scanned_ini_list, &p);
- }
- }
- }
- free(namelist[i]);
- }
- free(namelist);
-
- /*
- * Don't need an extra byte for the \0 in this malloc as the last
- * element will not get a trailing , which gives us the byte for the \0
- */
- if (total_l) {
- php_ini_scanned_files = (char *) malloc(total_l);
- *php_ini_scanned_files = '\0';
- for (element = scanned_ini_list.head; element; element = element->next) {
- strcat(php_ini_scanned_files, *(char **)element->data);
- strcat(php_ini_scanned_files, element->next ? ",\n" : "\n");
- }
- }
- zend_llist_destroy(&scanned_ini_list);
- }
- }
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ php_shutdown_config
- */
-int php_shutdown_config(void)
-{
- zend_hash_destroy(&configuration_hash);
- if (php_ini_opened_path) {
- free(php_ini_opened_path);
- }
- if (php_ini_scanned_files) {
- free(php_ini_scanned_files);
- }
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ php_ini_delayed_modules_startup
- */
-void php_ini_delayed_modules_startup(TSRMLS_D)
-{
- zend_llist_apply(&extension_lists.engine, php_load_zend_extension_cb TSRMLS_CC);
- zend_llist_apply(&extension_lists.functions, php_load_function_extension_cb TSRMLS_CC);
-
- zend_llist_destroy(&extension_lists.engine);
- zend_llist_destroy(&extension_lists.functions);
-}
-/* }}} */
-
-/* {{{ cfg_get_entry
- */
-zval *cfg_get_entry(char *name, uint name_length)
-{
- zval *tmp;
-
- if (zend_hash_find(&configuration_hash, name, name_length, (void **) &tmp) == SUCCESS) {
- return tmp;
- } else {
- return NULL;
- }
-}
-/* }}} */
-
-/* {{{ cfg_get_long
- */
-PHPAPI int cfg_get_long(char *varname, long *result)
-{
- zval *tmp, var;
-
- if (zend_hash_find(&configuration_hash, varname, strlen(varname) + 1, (void **) &tmp) == FAILURE) {
- *result = (long) NULL;
- return FAILURE;
- }
- var = *tmp;
- zval_copy_ctor(&var);
- convert_to_long(&var);
- *result = Z_LVAL(var);
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ cfg_get_double
- */
-PHPAPI int cfg_get_double(char *varname, double *result)
-{
- zval *tmp, var;
-
- if (zend_hash_find(&configuration_hash, varname, strlen(varname) + 1, (void **) &tmp) == FAILURE) {
- *result = (double) 0;
- return FAILURE;
- }
- var = *tmp;
- zval_copy_ctor(&var);
- convert_to_double(&var);
- *result = Z_DVAL(var);
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ cfg_get_string
- */
-PHPAPI int cfg_get_string(char *varname, char **result)
-{
- zval *tmp;
-
- if (zend_hash_find(&configuration_hash, varname, strlen(varname)+1, (void **) &tmp) == FAILURE) {
- *result = NULL;
- return FAILURE;
- }
- *result = Z_STRVAL_P(tmp);
- return SUCCESS;
-}
-/* }}} */
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * indent-tabs-mode: t
- * End:
- * vim600: sw=4 ts=4 fdm=marker
- * vim<600: sw=4 ts=4
- */
diff --git a/main/php_ini.h b/main/php_ini.h
deleted file mode 100644
index 94b5d3271f..0000000000
--- a/main/php_ini.h
+++ /dev/null
@@ -1,78 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Zeev Suraski <zeev@zend.com> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifndef PHP_INI_H
-#define PHP_INI_H
-
-#include "zend_ini.h"
-
-BEGIN_EXTERN_C()
-int php_init_config();
-int php_shutdown_config(void);
-void php_ini_delayed_modules_startup(TSRMLS_D);
-zval *cfg_get_entry(char *name, uint name_length);
-END_EXTERN_C()
-
-#define PHP_INI_USER ZEND_INI_USER
-#define PHP_INI_PERDIR ZEND_INI_PERDIR
-#define PHP_INI_SYSTEM ZEND_INI_SYSTEM
-
-#define PHP_INI_ALL ZEND_INI_ALL
-
-#define php_ini_entry zend_ini_entry
-
-#define PHP_INI_MH ZEND_INI_MH
-#define PHP_INI_DISP ZEND_INI_DISP
-
-#define PHP_INI_BEGIN ZEND_INI_BEGIN
-#define PHP_INI_END ZEND_INI_END
-
-#define PHP_INI_ENTRY3_EX ZEND_INI_ENTRY3_EX
-#define PHP_INI_ENTRY3 ZEND_INI_ENTRY3
-#define PHP_INI_ENTRY2_EX ZEND_INI_ENTRY2_EX
-#define PHP_INI_ENTRY2 ZEND_INI_ENTRY2
-#define PHP_INI_ENTRY1_EX ZEND_INI_ENTRY1_EX
-#define PHP_INI_ENTRY1 ZEND_INI_ENTRY1
-#define PHP_INI_ENTRY_EX ZEND_INI_ENTRY_EX
-#define PHP_INI_ENTRY ZEND_INI_ENTRY
-
-#define STD_PHP_INI_ENTRY STD_ZEND_INI_ENTRY
-#define STD_PHP_INI_ENTRY_EX STD_ZEND_INI_ENTRY_EX
-#define STD_PHP_INI_BOOLEAN STD_ZEND_INI_BOOLEAN
-
-#define PHP_INI_DISPLAY_ORIG ZEND_INI_DISPLAY_ORIG
-#define PHP_INI_DISPLAY_ACTIVE ZEND_INI_DISPLAY_ACTIVE
-
-#define PHP_INI_STAGE_STARTUP ZEND_INI_STAGE_STARTUP
-#define PHP_INI_STAGE_SHUTDOWN ZEND_INI_STAGE_SHUTDOWN
-#define PHP_INI_STAGE_ACTIVATE ZEND_INI_STAGE_ACTIVATE
-#define PHP_INI_STAGE_DEACTIVATE ZEND_INI_STAGE_DEACTIVATE
-#define PHP_INI_STAGE_RUNTIME ZEND_INI_STAGE_RUNTIME
-
-#define php_ini_boolean_displayer_cb zend_ini_boolean_displayer_cb
-#define php_ini_color_displayer_cb zend_ini_color_displayer_cb
-
-#define php_alter_ini_entry zend_alter_ini_entry
-
-#define php_ini_long zend_ini_long
-#define php_ini_double zend_ini_double
-#define php_ini_string zend_ini_string
-
-#endif /* PHP_INI_H */
diff --git a/main/php_logos.c b/main/php_logos.c
deleted file mode 100644
index e69a0f9310..0000000000
--- a/main/php_logos.c
+++ /dev/null
@@ -1,100 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Hartmut Holzgraefe <hholzgra@php.net> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#include "php.h"
-#include "logos.h"
-#include "php_logos.h"
-#include "ext/standard/info.h"
-#include "SAPI.h"
-
-typedef struct _php_info_logo {
- char *mimetype;
- int mimelen;
- unsigned char *data;
- int size;
-} php_info_logo;
-
-HashTable phpinfo_logo_hash;
-
-PHPAPI int php_register_info_logo(char *logo_string, char *mimetype, unsigned char *data, int size)
-{
- php_info_logo info_logo;
-
- info_logo.mimetype = mimetype;
- info_logo.mimelen = strlen(mimetype);
- info_logo.data = data;
- info_logo.size = size;
-
- return zend_hash_add(&phpinfo_logo_hash, logo_string, strlen(logo_string), &info_logo, sizeof(php_info_logo), NULL);
-}
-
-PHPAPI int php_unregister_info_logo(char *logo_string)
-{
- return zend_hash_del(&phpinfo_logo_hash, logo_string, strlen(logo_string));
-}
-
-int php_init_info_logos(void)
-{
- if(zend_hash_init(&phpinfo_logo_hash, 0, NULL, NULL, 1)==FAILURE)
- return FAILURE;
-
- php_register_info_logo(PHP_LOGO_GUID , "image/gif", php_logo , sizeof(php_logo));
- php_register_info_logo(PHP_EGG_LOGO_GUID, "image/gif", php_egg_logo, sizeof(php_egg_logo));
- php_register_info_logo(ZEND_LOGO_GUID , "image/gif", zend_logo , sizeof(zend_logo));
-
- return SUCCESS;
-}
-
-int php_shutdown_info_logos(void)
-{
- zend_hash_destroy(&phpinfo_logo_hash);
- return SUCCESS;
-}
-
-#define CONTENT_TYPE_HEADER "Content-Type: "
-int php_info_logos(const char *logo_string TSRMLS_DC)
-{
- php_info_logo *logo_image;
- char *content_header;
- int len;
-
- if(FAILURE==zend_hash_find(&phpinfo_logo_hash, (char *) logo_string, strlen(logo_string), (void **)&logo_image))
- return 0;
-
- len=strlen(CONTENT_TYPE_HEADER)+logo_image->mimelen;
- content_header=malloc(len+1);
- if(!content_header) return 0;
- strcpy(content_header, CONTENT_TYPE_HEADER);
- strcat(content_header, logo_image->mimetype);
- sapi_add_header(content_header, len, 1);
- free(content_header);
-
- PHPWRITE(logo_image->data, logo_image->size);
- return 1;
-}
-
-/*
- * 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/main/php_logos.h b/main/php_logos.h
deleted file mode 100644
index c99b130d0b..0000000000
--- a/main/php_logos.h
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-
-#ifndef _PHP_LOGOS_H
-#define _PHP_LOGOS_H
-
-BEGIN_EXTERN_C()
-PHPAPI int php_register_info_logo(char *logo_string, char *mimetype, unsigned char *data, int size);
-PHPAPI int php_unregister_info_logo(char *logo_string);
-END_EXTERN_C()
-
-int php_init_info_logos(void);
-int php_shutdown_info_logos(void);
-int php_info_logos(const char *logo_string TSRMLS_DC);
-
-#endif /* _PHP_LOGOS_H */
diff --git a/main/php_main.h b/main/php_main.h
deleted file mode 100644
index 01656e5d24..0000000000
--- a/main/php_main.h
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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. |
- +----------------------------------------------------------------------+
- | Authors: Andi Gutmans <andi@zend.com> |
- | Zeev Suraski <zeev@zend.com> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-#ifndef PHP_MAIN_H
-#define PHP_MAIN_H
-
-#include "zend_globals.h"
-#include "php_globals.h"
-#include "SAPI.h"
-
-BEGIN_EXTERN_C()
-PHPAPI int php_request_startup(TSRMLS_D);
-PHPAPI void php_request_shutdown(void *dummy);
-PHPAPI void php_request_shutdown_for_exec(void *dummy);
-PHPAPI int php_module_startup(sapi_module_struct *sf, zend_module_entry *additional_modules, uint num_additional_modules);
-PHPAPI void php_module_shutdown(TSRMLS_D);
-PHPAPI void php_module_shutdown_for_exec(void);
-PHPAPI int php_module_shutdown_wrapper(sapi_module_struct *sapi_globals);
-PHPAPI int php_request_startup_for_hook(TSRMLS_D);
-
-PHPAPI int php_startup_extensions(zend_module_entry **ptr, int count);
-
-PHPAPI int php_execute_script(zend_file_handle *primary_file TSRMLS_DC);
-PHPAPI int php_execute_simple_script(zend_file_handle *primary_file, zval **ret TSRMLS_DC);
-PHPAPI int php_handle_special_queries(TSRMLS_D);
-PHPAPI int php_lint_script(zend_file_handle *file TSRMLS_DC);
-
-PHPAPI void php_handle_aborted_connection(void);
-PHPAPI int php_handle_auth_data(const char *auth TSRMLS_DC);
-
-PHPAPI void php_html_puts(const char *str, uint siz TSRMLS_DC);
-
-extern void php_call_shutdown_functions(void);
-
-/* environment module */
-extern int php_init_environ(void);
-extern int php_shutdown_environ(void);
-END_EXTERN_C()
-
-#endif
diff --git a/main/php_memory_streams.h b/main/php_memory_streams.h
deleted file mode 100644
index 4af7745efe..0000000000
--- a/main/php_memory_streams.h
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Marcus Boerger <helly@php.net> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-#ifndef PHP_MEMORY_STREAM_H
-#define PHP_MEMORY_STREAM_H
-
-#include "php_streams.h"
-
-#define PHP_STREAM_MAX_MEM 2 * 1024 * 1024
-
-#define TEMP_STREAM_DEFAULT 0
-#define TEMP_STREAM_READONLY 1
-
-#define php_stream_memory_create(mode) _php_stream_memory_create((mode) STREAMS_CC TSRMLS_CC)
-#define php_stream_memory_create_rel(mode) _php_stream_memory_create((mode) STREAMS_REL_CC TSRMLS_CC)
-#define php_stream_memory_open(mode, buf, length) _php_stream_memory_open((mode), (buf), (length) STREAMS_CC TSRMLS_CC)
-#define php_stream_memory_get_buffer(stream, length) _php_stream_memory_get_buffer((stream), (length) STREAMS_CC TSRMLS_CC)
-
-#define php_stream_temp_new() php_stream_temp_create(TEMP_STREAM_DEFAULT, PHP_STREAM_MAX_MEM)
-#define php_stream_temp_create(mode, max_memory_usage) _php_stream_temp_create((mode), (max_memory_usage) STREAMS_CC TSRMLS_CC)
-#define php_stream_temp_create_rel(mode, max_memory_usage) _php_stream_temp_create((mode), (max_memory_usage) STREAMS_REL_CC TSRMLS_CC)
-#define php_stream_temp_open(mode, max_memory_usage, buf, length) _php_stream_temp_open((mode), (max_memory_usage), (buf), (length) STREAMS_CC TSRMLS_CC)
-
-BEGIN_EXTERN_C()
-PHPAPI php_stream *_php_stream_memory_create(int mode STREAMS_DC TSRMLS_DC);
-PHPAPI php_stream *_php_stream_memory_open(int mode, char *buf, size_t length STREAMS_DC TSRMLS_DC);
-PHPAPI char *_php_stream_memory_get_buffer(php_stream *stream, size_t *length STREAMS_DC TSRMLS_DC);
-
-PHPAPI php_stream *_php_stream_temp_create(int mode, size_t max_memory_usage STREAMS_DC TSRMLS_DC);
-PHPAPI php_stream *_php_stream_temp_open(int mode, size_t max_memory_usage, char *buf, size_t length STREAMS_DC TSRMLS_DC);
-END_EXTERN_C()
-
-extern php_stream_ops php_stream_memory_ops;
-extern php_stream_ops php_stream_temp_ops;
-
-#define PHP_STREAM_IS_MEMORY &php_stream_memory_ops
-#define PHP_STREAM_IS_TEMP &php_stream_temp_ops
-
-#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/main/php_network.h b/main/php_network.h
deleted file mode 100644
index 3d791e8fa7..0000000000
--- a/main/php_network.h
+++ /dev/null
@@ -1,219 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Stig Venaas <venaas@uninett.no> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-#ifndef _PHP_NETWORK_H
-#define _PHP_NETWORK_H
-
-#ifdef PHP_WIN32
-# ifndef WINNT
-# define WINNT 1
-# endif
-# undef FD_SETSIZE
-# include "arpa/inet.h"
- /* Apache folks decided that strtoul was evil and redefined
- * it to something that breaks the windows headers */
-# undef strtoul
-/* defines socklen_t and some IPV6 stuff */
-# include <ws2tcpip.h>
-# if HAVE_WSPIAPI_H
- /* getaddrinfo */
-# include <wspiapi.h>
-# endif
-#else
-# undef closesocket
-# define closesocket close
-#endif
-
-#ifndef HAVE_SHUTDOWN
-#undef shutdown
-#define shutdown(s,n) /* nothing */
-#endif
-
-#ifdef PHP_WIN32
-#define EWOULDBLOCK WSAEWOULDBLOCK
-#define EINPROGRESS WSAEWOULDBLOCK
-# define fsync _commit
-# define ftruncate(a, b) chsize(a, b)
-#endif /* defined(PHP_WIN32) */
-
-#ifdef PHP_WIN32
-#define php_socket_errno() WSAGetLastError()
-#else
-#define php_socket_errno() errno
-#endif
-
-/* like strerror, but caller must efree the returned string,
- * unless buf is not NULL.
- * Also works sensibly for win32 */
-BEGIN_EXTERN_C()
-PHPAPI char *php_socket_strerror(long err, char *buf, size_t bufsize);
-END_EXTERN_C()
-
-#ifdef HAVE_NETINET_IN_H
-# include <netinet/in.h>
-#endif
-
-#ifdef HAVE_SYS_SOCKET_H
-#include <sys/socket.h>
-#endif
-
-/* These are here, rather than with the win32 counterparts above,
- * since <sys/socket.h> defines them. */
-#ifndef SHUT_RD
-# define SHUT_RD 0
-# define SHUT_WR 1
-# define SHUT_RDWR 2
-#endif
-
-#ifdef HAVE_SYS_TIME_H
-#include <sys/time.h>
-#endif
-
-#ifdef HAVE_STDDEF_H
-#include <stddef.h>
-#endif
-
-#ifdef PHP_WIN32
-typedef SOCKET php_socket_t;
-#else
-typedef int php_socket_t;
-#endif
-
-#ifdef PHP_WIN32
-# define SOCK_ERR INVALID_SOCKET
-# define SOCK_CONN_ERR SOCKET_ERROR
-# define SOCK_RECV_ERR SOCKET_ERROR
-#else
-# define SOCK_ERR -1
-# define SOCK_CONN_ERR -1
-# define SOCK_RECV_ERR -1
-#endif
-
-#define PHP_SOCK_CHUNK_SIZE 8192
-
-#ifdef HAVE_SOCKADDR_STORAGE
-typedef struct sockaddr_storage php_sockaddr_storage;
-#else
-typedef struct {
-#ifdef HAVE_SOCKADDR_LEN
- unsigned char ss_len;
- unsigned char ss_family;
-#else
- unsigned short ss_family;
-#endif
- char info[126];
-} php_sockaddr_storage;
-#endif
-
-BEGIN_EXTERN_C()
-PHPAPI php_socket_t php_network_connect_socket_to_host(const char *host, unsigned short port,
- int socktype, int asynchronous, struct timeval *timeout, char **error_string,
- int *error_code
- TSRMLS_DC);
-
-PHPAPI int php_network_connect_socket(php_socket_t sockfd,
- const struct sockaddr *addr,
- socklen_t addrlen,
- int asynchronous,
- struct timeval *timeout,
- char **error_string,
- int *error_code);
-
-#define php_connect_nonb(sock, addr, addrlen, timeout) \
- php_network_connect_socket((sock), (addr), (addrlen), 0, (timeout), NULL, NULL)
-
-PHPAPI php_socket_t php_network_bind_socket_to_local_addr(const char *host, unsigned port,
- int socktype, char **error_string, int *error_code
- TSRMLS_DC);
-
-PHPAPI php_socket_t php_network_accept_incoming(php_socket_t srvsock,
- char **textaddr, long *textaddrlen,
- struct sockaddr **addr,
- socklen_t *addrlen,
- struct timeval *timeout,
- char **error_string,
- int *error_code
- TSRMLS_DC);
-
-PHPAPI int php_network_get_sock_name(php_socket_t sock,
- char **textaddr, long *textaddrlen,
- struct sockaddr **addr,
- socklen_t *addrlen
- TSRMLS_DC);
-
-PHPAPI int php_network_get_peer_name(php_socket_t sock,
- char **textaddr, long *textaddrlen,
- struct sockaddr **addr,
- socklen_t *addrlen
- TSRMLS_DC);
-
-PHPAPI void php_any_addr(int family, php_sockaddr_storage *addr, unsigned short port);
-PHPAPI int php_sockaddr_size(php_sockaddr_storage *addr);
-END_EXTERN_C()
-
-struct _php_netstream_data_t {
- php_socket_t socket;
- char is_blocked;
- struct timeval timeout;
- char timeout_event;
- size_t ownsize;
-};
-typedef struct _php_netstream_data_t php_netstream_data_t;
-PHPAPI extern php_stream_ops php_stream_socket_ops;
-extern php_stream_ops php_stream_generic_socket_ops;
-#define PHP_STREAM_IS_SOCKET (&php_stream_socket_ops)
-
-BEGIN_EXTERN_C()
-PHPAPI php_stream *_php_stream_sock_open_from_socket(php_socket_t socket, const char *persistent_id STREAMS_DC TSRMLS_DC );
-/* open a connection to a host using php_hostconnect and return a stream */
-PHPAPI php_stream *_php_stream_sock_open_host(const char *host, unsigned short port,
- int socktype, struct timeval *timeout, const char *persistent_id STREAMS_DC TSRMLS_DC);
-PHPAPI void php_network_populate_name_from_sockaddr(
- /* input address */
- struct sockaddr *sa, socklen_t sl,
- /* output readable address */
- char **textaddr, long *textaddrlen,
- /* output address */
- struct sockaddr **addr,
- socklen_t *addrlen
- TSRMLS_DC);
-
-PHPAPI int php_network_parse_network_address_with_port(const char *addr,
- long addrlen, struct sockaddr *sa, socklen_t *sl TSRMLS_DC);
-END_EXTERN_C()
-
-#define php_stream_sock_open_from_socket(socket, persistent) _php_stream_sock_open_from_socket((socket), (persistent) STREAMS_CC TSRMLS_CC)
-#define php_stream_sock_open_host(host, port, socktype, timeout, persistent) _php_stream_sock_open_host((host), (port), (socktype), (timeout), (persistent) STREAMS_CC TSRMLS_CC)
-
-/* {{{ memory debug */
-#define php_stream_sock_open_from_socket_rel(socket, persistent) _php_stream_sock_open_from_socket((socket), (persistent) STREAMS_REL_CC TSRMLS_CC)
-#define php_stream_sock_open_host_rel(host, port, socktype, timeout, persistent) _php_stream_sock_open_host((host), (port), (socktype), (timeout), (persistent) STREAMS_REL_CC TSRMLS_CC)
-#define php_stream_sock_open_unix_rel(path, pathlen, persistent, timeval) _php_stream_sock_open_unix((path), (pathlen), (persistent), (timeval) STREAMS_REL_CC TSRMLS_CC)
-
-/* }}} */
-
-#endif /* _PHP_NETWORK_H */
-
-/*
- * Local variables:
- * tab-width: 8
- * c-basic-offset: 8
- * End:
- */
diff --git a/main/php_open_temporary_file.c b/main/php_open_temporary_file.c
deleted file mode 100644
index b8c94528cd..0000000000
--- a/main/php_open_temporary_file.c
+++ /dev/null
@@ -1,264 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Zeev Suraski <zeev@zend.com> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-#include "php.h"
-
-#include <errno.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <fcntl.h>
-
-#ifdef PHP_WIN32
-#define O_RDONLY _O_RDONLY
-#include "win32/param.h"
-#include "win32/winutil.h"
-#elif defined(NETWARE)
-#ifdef USE_WINSOCK
-/*#include <ws2nlm.h>*/
-#include <novsock2.h>
-#else
-#include <sys/socket.h>
-#endif
-#ifdef NEW_LIBC
-#include <sys/param.h>
-#else
-#include "netware/param.h"
-#endif
-#include "netware/mktemp.h"
-#else
-#include <sys/param.h>
-#include <sys/socket.h>
-#include <netinet/in.h>
-#include <netdb.h>
-#if HAVE_ARPA_INET_H
-#include <arpa/inet.h>
-#endif
-#endif
-#ifdef HAVE_SYS_TIME_H
-#include <sys/time.h>
-#endif
-
-#ifdef HAVE_SYS_FILE_H
-#include <sys/file.h>
-#endif
-
-#if !defined(P_tmpdir)
-#define P_tmpdir ""
-#endif
-
-/* {{{ php_do_open_temporary_file */
-
-/* Loosely based on a tempnam() implementation by UCLA */
-
-/*
- * Copyright (c) 1988, 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. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement:
- * This product includes software developed by the University of
- * California, Berkeley and its contributors.
- * 4. 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.
- */
-
-static int php_do_open_temporary_file(const char *path, const char *pfx, char **opened_path_p TSRMLS_DC)
-{
- char *trailing_slash;
- char *opened_path;
- int fd = -1;
-#ifndef HAVE_MKSTEMP
- int open_flags = O_CREAT | O_TRUNC | O_RDWR
-#ifdef PHP_WIN32
- | _O_BINARY
-#endif
- ;
-#endif
-#ifdef NETWARE
- char *file_path = NULL;
-#endif
-
- if (!path) {
- return -1;
- }
-
- if (!(opened_path = emalloc(MAXPATHLEN))) {
- return -1;
- }
-
- if (IS_SLASH(path[strlen(path)-1])) {
- trailing_slash = "";
- } else {
- trailing_slash = "/";
- }
-
- (void)snprintf(opened_path, MAXPATHLEN, "%s%s%sXXXXXX", path, trailing_slash, pfx);
-
-#ifdef PHP_WIN32
- if (GetTempFileName(path, pfx, 0, opened_path)) {
- /* Some versions of windows set the temp file to be read-only,
- * which means that opening it will fail... */
- VCWD_CHMOD(opened_path, 0600);
- fd = VCWD_OPEN_MODE(opened_path, open_flags, 0600);
- }
-#elif defined(NETWARE)
- /* Using standard mktemp() implementation for NetWare */
- file_path = mktemp(opened_path);
- if (file_path) {
- fd = VCWD_OPEN(file_path, open_flags);
- }
-#elif defined(HAVE_MKSTEMP)
- fd = mkstemp(opened_path);
-#else
- if (mktemp(opened_path)) {
- fd = VCWD_OPEN(opened_path, open_flags);
- }
-#endif
- if (fd == -1 || !opened_path_p) {
- efree(opened_path);
- } else {
- *opened_path_p = opened_path;
- }
- return fd;
-}
-/* }}} */
-
-/*
- * Determine where to place temporary files.
- */
-PHPAPI const char* php_get_temporary_directory(void)
-{
- /* Cache the chosen temporary directory. */
- static char* temporary_directory;
-
- /* Did we determine the temporary directory already? */
- if (temporary_directory) {
- return temporary_directory;
- }
-
-#ifdef PHP_WIN32
- /* We can't count on the environment variables TEMP or TMP,
- * and so must make the Win32 API call to get the default
- * directory for temporary files. Note this call checks
- * the environment values TMP and TEMP (in order) first.
- */
- {
- char sTemp[MAX_PATH];
- DWORD n = GetTempPath(sizeof(sTemp),sTemp);
- assert(0 < n); /* should *never* fail! */
- temporary_directory = strdup(sTemp);
- return temporary_directory;
- }
-#else
- /* On Unix use the (usual) TMPDIR environment variable. */
- {
- char* s = getenv("TMPDIR");
- if (s) {
- temporary_directory = strdup(s);
- return temporary_directory;
- }
- }
-#ifdef P_tmpdir
- /* Use the standard default temporary directory. */
- if (P_tmpdir) {
- temporary_directory = P_tmpdir;
- return temporary_directory;
- }
-#endif
- /* Shouldn't ever(!) end up here ... last ditch default. */
- temporary_directory = "/tmp";
- return temporary_directory;
-#endif
-}
-
-/* {{{ php_open_temporary_file
- *
- * Unlike tempnam(), the supplied dir argument takes precedence
- * over the TMPDIR environment variable
- * This function should do its best to return a file pointer to a newly created
- * unique file, on every platform.
- */
-PHPAPI int php_open_temporary_fd(const char *dir, const char *pfx, char **opened_path_p TSRMLS_DC)
-{
- int fd;
-
- if (!pfx) {
- pfx = "tmp.";
- }
- if (opened_path_p) {
- *opened_path_p = NULL;
- }
-
- /* Try the directory given as parameter. */
- fd = php_do_open_temporary_file(dir, pfx, opened_path_p TSRMLS_CC);
- if (fd == -1) {
- /* Use default temporary directory. */
- fd = php_do_open_temporary_file(php_get_temporary_directory(), pfx, opened_path_p TSRMLS_CC);
- }
- return fd;
-}
-
-PHPAPI FILE *php_open_temporary_file(const char *dir, const char *pfx, char **opened_path_p TSRMLS_DC)
-{
- FILE *fp;
- int fd = php_open_temporary_fd(dir, pfx, opened_path_p TSRMLS_CC);
-
- if (fd == -1) {
- return NULL;
- }
-
- fp = fdopen(fd, "r+b");
- if (fp == NULL) {
- close(fd);
- }
-
- return fp;
-}
-/* }}} */
-
-/*
- * 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/main/php_open_temporary_file.h b/main/php_open_temporary_file.h
deleted file mode 100644
index 500d2429c3..0000000000
--- a/main/php_open_temporary_file.h
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Zeev Suraski <zeev@zend.com> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifndef PHP_OPEN_TEMPORARY_FILE_H
-#define PHP_OPEN_TEMPORARY_FILE_H
-
-BEGIN_EXTERN_C()
-PHPAPI FILE *php_open_temporary_file(const char *dir, const char *pfx, char **opened_path_p TSRMLS_DC);
-PHPAPI int php_open_temporary_fd(const char *dir, const char *pfx, char **opened_path_p TSRMLS_DC);
-PHPAPI const char *php_get_temporary_directory(void);
-END_EXTERN_C()
-
-#endif /* PHP_OPEN_TEMPORARY_FILE_H */
diff --git a/main/php_output.h b/main/php_output.h
deleted file mode 100644
index 591b386779..0000000000
--- a/main/php_output.h
+++ /dev/null
@@ -1,114 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Zeev Suraski <zeev@zend.com> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifndef PHP_OUTPUT_H
-#define PHP_OUTPUT_H
-
-typedef void (*php_output_handler_func_t)(char *output, uint output_len, char **handled_output, uint *handled_output_len, int mode TSRMLS_DC);
-
-BEGIN_EXTERN_C()
-PHPAPI void php_output_startup(void);
-PHPAPI void php_output_activate(TSRMLS_D);
-PHPAPI void php_output_set_status(zend_bool status TSRMLS_DC);
-PHPAPI void php_output_register_constants(TSRMLS_D);
-PHPAPI int php_default_output_func(const char *str, uint str_len TSRMLS_DC);
-PHPAPI int php_ub_body_write(const char *str, uint str_length TSRMLS_DC);
-PHPAPI int php_ub_body_write_no_header(const char *str, uint str_length TSRMLS_DC);
-PHPAPI int php_body_write(const char *str, uint str_length TSRMLS_DC);
-PHPAPI int php_header_write(const char *str, uint str_length TSRMLS_DC);
-PHPAPI int php_start_ob_buffer(zval *output_handler, uint chunk_size, zend_bool erase TSRMLS_DC);
-PHPAPI int php_start_ob_buffer_named(const char *output_handler_name, uint chunk_size, zend_bool erase TSRMLS_DC);
-PHPAPI void php_end_ob_buffer(zend_bool send_buffer, zend_bool just_flush TSRMLS_DC);
-PHPAPI void php_end_ob_buffers(zend_bool send_buffer TSRMLS_DC);
-PHPAPI int php_ob_get_buffer(zval *p TSRMLS_DC);
-PHPAPI int php_ob_get_length(zval *p TSRMLS_DC);
-PHPAPI void php_start_implicit_flush(TSRMLS_D);
-PHPAPI void php_end_implicit_flush(TSRMLS_D);
-PHPAPI char *php_get_output_start_filename(TSRMLS_D);
-PHPAPI int php_get_output_start_lineno(TSRMLS_D);
-PHPAPI void php_ob_set_internal_handler(php_output_handler_func_t internal_output_handler, uint buffer_size, char *handler_name, zend_bool erase TSRMLS_DC);
-PHPAPI int php_ob_handler_used(char *handler_name TSRMLS_DC);
-PHPAPI int php_ob_init_conflict(char *handler_new, char *handler_set TSRMLS_DC);
-PHPAPI int php_ob_get_buffer(zval *p TSRMLS_DC);
-PHPAPI int php_ob_get_length(zval *p TSRMLS_DC);
-END_EXTERN_C()
-
-PHP_FUNCTION(ob_start);
-PHP_FUNCTION(ob_flush);
-PHP_FUNCTION(ob_clean);
-PHP_FUNCTION(ob_end_flush);
-PHP_FUNCTION(ob_end_clean);
-PHP_FUNCTION(ob_get_flush);
-PHP_FUNCTION(ob_get_clean);
-PHP_FUNCTION(ob_get_contents);
-PHP_FUNCTION(ob_get_length);
-PHP_FUNCTION(ob_get_level);
-PHP_FUNCTION(ob_get_status);
-PHP_FUNCTION(ob_implicit_flush);
-PHP_FUNCTION(ob_list_handlers);
-
-typedef struct _php_ob_buffer {
- char *buffer;
- uint size;
- uint text_length;
- int block_size;
- uint chunk_size;
- int status;
- zval *output_handler;
- php_output_handler_func_t internal_output_handler;
- char *internal_output_handler_buffer;
- uint internal_output_handler_buffer_size;
- char *handler_name;
- zend_bool erase;
-} php_ob_buffer;
-
-typedef struct _php_output_globals {
- int (*php_body_write)(const char *str, uint str_length TSRMLS_DC); /* string output */
- int (*php_header_write)(const char *str, uint str_length TSRMLS_DC); /* unbuffer string output */
- php_ob_buffer active_ob_buffer;
- unsigned char implicit_flush;
- char *output_start_filename;
- int output_start_lineno;
- zend_stack ob_buffers;
- int ob_nesting_level;
- zend_bool ob_lock;
- zend_bool disable_output;
-} php_output_globals;
-
-#ifdef ZTS
-#define OG(v) TSRMG(output_globals_id, php_output_globals *, v)
-ZEND_API extern int output_globals_id;
-#else
-#define OG(v) (output_globals.v)
-ZEND_API extern php_output_globals output_globals;
-#endif
-
-#define PHP_OUTPUT_HANDLER_START (1<<0)
-#define PHP_OUTPUT_HANDLER_CONT (1<<1)
-#define PHP_OUTPUT_HANDLER_END (1<<2)
-
-#define PHP_OUTPUT_HANDLER_INTERNAL 0
-#define PHP_OUTPUT_HANDLER_USER 1
-
-PHP_FUNCTION(output_add_rewrite_var);
-PHP_FUNCTION(output_reset_rewrite_vars);
-
-
-#endif /* PHP_OUTPUT_H */
diff --git a/main/php_realpath.c b/main/php_realpath.c
deleted file mode 100644
index 0607e91cc4..0000000000
--- a/main/php_realpath.c
+++ /dev/null
@@ -1,285 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Sander Steffann (sander@steffann.nl) |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#include "php.h"
-
-#if HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-#include <sys/stat.h>
-
-#ifndef MAXSYMLINKS
-#define MAXSYMLINKS 32
-#endif
-
-#ifndef S_ISDIR
-#define S_ISDIR(mode) (((mode)&S_IFMT) == S_IFDIR)
-#endif
-
-char *php_realpath(char *path, char resolved_path[]);
-
-#ifdef PHP_WIN32
-#define IS_SLASH(p) ((p) == '/' || (p) == '\\')
-#else
-#define IS_SLASH(p) ((p) == '/')
-#endif
-
-char *php_realpath(char *path, char resolved_path []) {
- char path_construction[MAXPATHLEN]; /* We build the result in here */
- char *writepos; /* Position to write next char */
-
- char path_copy[MAXPATHLEN]; /* A work-copy of the path */
- char *workpos; /* working position in *path */
-
-#if !defined(PHP_WIN32)
- char buf[MAXPATHLEN]; /* Buffer for readlink */
- int linklength; /* The result from readlink */
-#endif
- int linkcount = 0; /* Count symlinks to avoid loops */
-
- struct stat filestat; /* result from stat */
-
-#ifdef PHP_WIN32
- char *temppos; /* position while counting '.' */
- int dotcount; /* number of '.' */
- int t; /* counter */
-#endif
-
- /* Set the work-position to the beginning of the given path */
- strcpy(path_copy, path);
- workpos = path_copy;
-
-#ifdef PHP_WIN32
- /* Find out where we start - Windows version */
- if (IS_SLASH(*workpos)) {
- /* We start at the root of the current drive */
- /* Get the current directory */
- if (V_GETCWD(path_construction, MAXPATHLEN-1) == NULL) {
- /* Unable to get cwd */
- resolved_path[0] = 0;
- return NULL;
- }
- /* We only need the first three chars (for example "C:\") */
- path_construction[3] = 0;
- workpos++;
- } else if (workpos[1] == ':') {
- /* A drive-letter is specified, copy it */
- strncpy(path_construction, path, 2);
- strcat(path_construction, "\\");
- workpos++;
- workpos++;
- } else {
- /* Use the current directory */
- if (V_GETCWD(path_construction, MAXPATHLEN-1) == NULL) {
- /* Unable to get cwd */
- resolved_path[0] = 0;
- return NULL;
- }
- strcat(path_construction, "\\");
- }
-#else
- /* Find out where we start - Unix version */
- if (*workpos == '/') {
- /* We start at the root */
- strcpy(path_construction, "/");
- workpos++;
- } else {
- /* Use the current directory */
- if (V_GETCWD(path_construction, MAXPATHLEN-1) == NULL) {
- /* Unable to get cwd */
- resolved_path[0] = 0;
- return NULL;
- }
- strcat(path_construction, "/");
- }
-#endif
-
- /* Set the next-char-position */
- writepos = &path_construction[strlen(path_construction)];
-
- /* Go to the end, then stop */
- while(*workpos != 0) {
- /* Strip (back)slashes */
- while(IS_SLASH(*workpos)) workpos++;
-
-#ifdef PHP_WIN32
- /* reset dotcount */
- dotcount = 0;
-
- /* Look for .. */
- if ((workpos[0] == '.') && (workpos[1] != 0)) {
- /* Windows accepts \...\ as \..\..\, \....\ as \..\..\..\, etc */
- /* At least Win98 does */
-
- temppos = workpos;
- while(*temppos++ == '.') {
- dotcount++;
- if (!IS_SLASH(*temppos) && (*temppos != 0) && (*temppos != '.')) {
- /* This is not a /../ component, but a filename that starts with '.' */
- dotcount = 0;
- }
- }
-
- /* Go back dotcount-1 times */
- for (t=0 ; t<(dotcount-1) ; t++) {
- workpos++; /* move to next '.' */
-
- /* Can we still go back? */
- if ((writepos-3) <= path_construction) return NULL;
-
- /* Go back */
- writepos--; /* move to '\' */
- writepos--;
- while(!IS_SLASH(*writepos)) writepos--; /* skip until previous '\\' */
- }
- workpos++;
- }
-
- /* No special case */
- if (dotcount == 0) {
- /* Append */
- while(!IS_SLASH(*workpos) && (*workpos != 0)) {
- *writepos++ = *workpos++;
- }
- }
-
- /* Just one '.', go to next element */
- if (dotcount == 1) {
- while(!IS_SLASH(*workpos) && (*workpos != 0)) {
- *workpos++;
- }
-
- /* Avoid double \ in the result */
- writepos--;
- }
-
- /* If it was a directory, append a slash */
- if (IS_SLASH(*workpos)) {
- *writepos++ = *workpos++;
- }
- *writepos = 0;
-#else /* defined(PHP_WIN32) */
- /* Look for .. */
- if ((workpos[0] == '.') && (workpos[1] != 0)) {
- if ((workpos[1] == '.') && ((workpos[2] == '/') || (workpos[2] == 0))) {
- /* One directory back */
- /* Set pointers to right position */
- workpos++; /* move to second '.' */
- workpos++; /* move to '/' */
-
- /* Only apply .. if not in root */
- if ((writepos-1) > path_construction) {
- writepos--; /* move to '/' */
- while(*--writepos != '/') ; /* skip until previous '/' */
- }
- } else {
- if (workpos[1] == '/') {
- /* Found a /./ skip it */
- workpos++; /* move to '/' */
-
- /* Avoid double / in the result */
- writepos--;
- } else {
- /* No special case, the name just started with a . */
- /* Append */
- while((*workpos != '/') && (*workpos != 0)) {
- *writepos++ = *workpos++;
- }
- }
- }
- } else {
- /* No special case */
- /* Append */
- while((*workpos != '/') && (*workpos != 0)) {
- *writepos++ = *workpos++;
- }
- }
-
-#if HAVE_SYMLINK
- /* We are going to use path_construction, so close it */
- *writepos = 0;
-
- /* Check the current location to see if it is a symlink */
- if((linklength = readlink(path_construction, buf, MAXPATHLEN)) != -1) {
- /* Check linkcount */
- if (linkcount > MAXSYMLINKS) return NULL;
-
- /* Count this symlink */
- linkcount++;
-
- /* Set end of buf */
- buf[linklength] = 0;
-
- /* Check for overflow */
- if ((strlen(workpos) + strlen(buf) + 1) >= MAXPATHLEN) return NULL;
-
- /* Remove the symlink-component wrom path_construction */
- writepos--; /* move to '/' */
- while(*--writepos != '/') ; /* skip until previous '/' */
- *++writepos = 0; /* end of string after '/' */
-
- /* If the symlink starts with a '/', empty path_construction */
- if (*buf == '/') {
- *path_construction = 0;
- writepos = path_construction;
- }
-
- /* Insert symlink into path_copy */
- strcat(buf, workpos);
- strcpy(path_copy, buf);
- workpos = path_copy;
- }
-#endif /* HAVE_SYMLINK */
-
- /* If it was a directory, append a slash */
- if (*workpos == '/') {
- *writepos++ = *workpos++;
- }
- *writepos = 0;
-#endif /* defined(PHP_WIN32) */
- }
-
- /* Check if the resolved path is a directory */
- if (V_STAT(path_construction, &filestat) != 0) {
- if (errno != ENOENT) return NULL;
- } else {
- if (S_ISDIR(filestat.st_mode)) {
- /* It's a directory, append a / if needed */
- if (*(writepos-1) != '/') {
- /* Check for overflow */
- if ((strlen(workpos) + 2) >= MAXPATHLEN) {
- return NULL;
- }
- *writepos++ = '/';
- *writepos = 0;
- }
- }
- }
-
- strcpy(resolved_path, path_construction);
- return resolved_path;
-}
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- */
diff --git a/main/php_reentrancy.h b/main/php_reentrancy.h
deleted file mode 100644
index 8a329f14f5..0000000000
--- a/main/php_reentrancy.h
+++ /dev/null
@@ -1,133 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Sascha Schumann <sascha@schumann.cx> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-#ifndef PHP_REENTRANCY_H
-#define PHP_REENTRANCY_H
-
-#include "php.h"
-
-#include <sys/types.h>
-#ifdef HAVE_DIRENT_H
-#include <dirent.h>
-#endif
-#include <time.h>
-
-/* currently, PHP does not check for these functions, but assumes
- that they are available on all systems. */
-
-#define HAVE_LOCALTIME 1
-#define HAVE_GMTIME 1
-#define HAVE_ASCTIME 1
-#define HAVE_CTIME 1
-
-#if defined(PHP_IRIX_TIME_R)
-#undef HAVE_ASCTIME_R
-#undef HAVE_CTIME_R
-#endif
-
-#if defined(PHP_HPUX_TIME_R)
-#undef HAVE_LOCALTIME_R
-#undef HAVE_ASCTIME_R
-#undef HAVE_CTIME_R
-#undef HAVE_GMTIME_R
-#endif
-
-BEGIN_EXTERN_C()
-
-#if defined(HAVE_POSIX_READDIR_R)
-#define php_readdir_r readdir_r
-#else
-PHPAPI int php_readdir_r(DIR *dirp, struct dirent *entry,
- struct dirent **result);
-#endif
-
-#if !defined(HAVE_LOCALTIME_R) && defined(HAVE_LOCALTIME)
-#define PHP_NEED_REENTRANCY 1
-PHPAPI struct tm *php_localtime_r(const time_t *const timep, struct tm *p_tm);
-#else
-#define php_localtime_r localtime_r
-#ifdef MISSING_LOCALTIME_R_DECL
-struct tm *localtime_r(const time_t *const timep, struct tm *p_tm);
-#endif
-#endif
-
-
-#if !defined(HAVE_CTIME_R) && defined(HAVE_CTIME)
-#define PHP_NEED_REENTRANCY 1
-PHPAPI char *php_ctime_r(const time_t *clock, char *buf);
-#else
-#define php_ctime_r ctime_r
-#ifdef MISSING_CTIME_R_DECL
-char *ctime_r(const time_t *clock, char *buf);
-#endif
-#endif
-
-
-#if !defined(HAVE_ASCTIME_R) && defined(HAVE_ASCTIME)
-#define PHP_NEED_REENTRANCY 1
-PHPAPI char *php_asctime_r(const struct tm *tm, char *buf);
-#else
-#define php_asctime_r asctime_r
-#ifdef MISSING_ASCTIME_R_DECL
-char *asctime_r(const struct tm *tm, char *buf);
-#endif
-#endif
-
-
-#if !defined(HAVE_GMTIME_R) && defined(HAVE_GMTIME) || defined(__BEOS__)
-#define PHP_NEED_REENTRANCY 1
-PHPAPI struct tm *php_gmtime_r(const time_t *const timep, struct tm *p_tm);
-#else
-#define php_gmtime_r gmtime_r
-#ifdef MISSING_GMTIME_R_DECL
-struct tm *php_gmtime_r(const time_t *const timep, struct tm *p_tm);
-#endif
-#endif
-
-#if !defined(HAVE_STRTOK_R)
-PHPAPI char *php_strtok_r(char *s, const char *delim, char **last);
-#else
-#define php_strtok_r strtok_r
-#ifdef MISSING_STRTOK_R_DECL
-char *strtok_r(char *s, const char *delim, char **last);
-#endif
-#endif
-
-#if !defined(HAVE_RAND_R)
-PHPAPI int php_rand_r(unsigned int *seed);
-#else
-#define php_rand_r rand_r
-#endif
-
-END_EXTERN_C()
-
-#if !defined(ZTS)
-#undef PHP_NEED_REENTRANCY
-#endif
-
-#if defined(PHP_NEED_REENTRANCY)
-void reentrancy_startup(void);
-void reentrancy_shutdown(void);
-#else
-#define reentrancy_startup()
-#define reentrancy_shutdown()
-#endif
-
-#endif
diff --git a/main/php_regex.h b/main/php_regex.h
deleted file mode 100644
index 56fdcfd4bf..0000000000
--- a/main/php_regex.h
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifndef PHP_REGEX_H
-#define PHP_REGEX_H
-
-/*
- * REGEX means:
- * 0.. system regex
- * 1.. bundled regex
- */
-
-#if REGEX
-/* get aliases */
-#include "regex/regex_extra.h"
-#include "regex/regex.h"
-
-/* get rid of aliases */
-#define PHP_NO_ALIASES
-#include "regex/regex_extra.h"
-#undef PHP_NO_ALIASES
-
-#undef _PCREPOSIX_H
-#define _PCREPOSIX_H 1
-
-#ifndef _REGEX_H
-#define _REGEX_H 1 /* this should stop Apache from loading the system version of regex.h */
-#endif
-#ifndef _REGEX_H_
-#define _REGEX_H_ 1
-#endif
-#ifndef _RX_H
-#define _RX_H 1 /* Try defining these for Linux to */
-#endif
-#ifndef __REGEXP_LIBRARY_H__
-#define __REGEXP_LIBRARY_H__ 1 /* avoid Apache including regex.h */
-#endif
-#ifndef _H_REGEX
-#define _H_REGEX 1 /* This one is for AIX */
-#endif
-#elif REGEX == 0
-#include <regex.h>
-#ifndef _REGEX_H_
-#define _REGEX_H_ 1
-#endif
-#endif
-
-#endif /* PHP_REGEX_H */
diff --git a/main/php_scandir.c b/main/php_scandir.c
deleted file mode 100644
index e24b4137f5..0000000000
--- a/main/php_scandir.c
+++ /dev/null
@@ -1,137 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Shane Caraveo <shane@caraveo.com> |
- | Ilia Alshanetsky <ilia@prohost.org> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-#ifdef PHP_WIN32
-#include "config.w32.h"
-#else
-#include "php_config.h"
-#endif
-
-#include "php_scandir.h"
-
-#ifdef HAVE_SYS_TYPES_H
-#include <sys/types.h>
-#endif
-
-#ifdef HAVE_DIRENT_H
-#include <dirent.h>
-#endif
-
-#ifndef HAVE_SCANDIR
-
-#ifdef PHP_WIN32
-#include "win32/readdir.h"
-#endif
-
-#include <stdlib.h>
-#include <search.h>
-
-#endif /* HAVE_SCANDIR */
-
-#ifndef HAVE_ALPHASORT
-
-#ifdef HAVE_STRING_H
-#include <string.h>
-#endif
-
-int php_alphasort(const struct dirent **a, const struct dirent **b)
-{
- return strcoll((*a)->d_name,(*b)->d_name);
-}
-#endif /* HAVE_ALPHASORT */
-
-#ifndef HAVE_SCANDIR
-int php_scandir(const char *dirname, struct dirent **namelist[], int (*selector) (const struct dirent *entry), int (*compare) (const struct dirent **a, const struct dirent **b))
-{
- DIR *dirp = NULL;
- struct dirent **vector = NULL;
- struct dirent *dp = NULL;
- int vector_size = 0;
- int nfiles = 0;
-
- if (namelist == NULL) {
- return -1;
- }
-
- if (!(dirp = opendir(dirname))) {
- return -1;
- }
-
- while ((dp = readdir(dirp)) != NULL) {
- int dsize = 0;
- struct dirent *newdp = NULL;
-
- if (selector && (*selector)(dp) == 0) {
- continue;
- }
-
- if (nfiles == vector_size) {
- struct dirent **newv;
- if (vector_size == 0) {
- vector_size = 10;
- } else {
- vector_size *= 2;
- }
-
- newv = (struct dirent **) realloc (vector, vector_size * sizeof (struct dirent *));
- if (!newv) {
- return -1;
- }
- vector = newv;
- }
-
- dsize = sizeof (struct dirent) + ((strlen(dp->d_name) + 1) * sizeof(char));
- newdp = (struct dirent *) malloc(dsize);
-
- if (newdp == NULL) {
- goto fail;
- }
-
- vector[nfiles++] = (struct dirent *) memcpy(newdp, dp, dsize);
- }
-
- closedir(dirp);
-
- *namelist = vector;
-
- if (compare) {
- qsort (*namelist, nfiles, sizeof(struct dirent *), compare);
- }
-
- return nfiles;
-
-fail:
- while (nfiles-- > 0) {
- free(vector[nfiles]);
- }
- free(vector);
- return -1;
-}
-#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/main/php_scandir.h b/main/php_scandir.h
deleted file mode 100644
index 0ff56ebbc2..0000000000
--- a/main/php_scandir.h
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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. |
- +----------------------------------------------------------------------+
- | Authors: Shane Caraveo <shane@caraveo.com> |
- | Ilia Alshanetsky <ilia@prohost.org> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifndef PHP_SCANDIR_H
-#define PHP_SCANDIR_H
-
-#include <sys/types.h>
-
-#ifdef HAVE_SYS_DIR_H
-#include <sys/dir.h>
-#endif
-
-#ifdef PHP_WIN32
-#include "config.w32.h"
-#include "win32/readdir.h"
-#else
-#include "php_config.h"
-#endif
-
-#ifdef HAVE_DIRENT_H
-#include <dirent.h>
-#endif
-
-#ifdef HAVE_SCANDIR
-#define php_scandir scandir
-#else
-int php_scandir(const char *dirname, struct dirent **namelist[], int (*selector) (const struct dirent *entry), int (*compare) (const struct dirent **a, const struct dirent **b));
-#endif
-
-#ifdef HAVE_ALPHASORT
-#define php_alphasort alphasort
-#else
-int php_alphasort(const struct dirent **a, const struct dirent **b);
-#endif
-
-#endif /* PHP_SCANDIR_H */
diff --git a/main/php_sprintf.c b/main/php_sprintf.c
deleted file mode 100644
index f7daab2952..0000000000
--- a/main/php_sprintf.c
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Jaakko Hyvätti <jaakko.hyvatti@iki.fi> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-#include <stdio.h>
-#include <stdarg.h>
-#ifdef NETWARE
-#include "config.nw.h"
-#else
-#include "php_config.h"
-#endif
-
-#if PHP_BROKEN_SPRINTF
-
-int
-php_sprintf (char*s, const char* format, ...)
-{
- va_list args;
- char *ret;
-
- va_start (args, format);
- s[0] = '\0';
- ret = vsprintf (s, format, args);
- va_end (args);
- if (!ret)
- return -1;
- return strlen (s);
-}
-
-#endif /* PHP_BROKEN_SPRINTF */
-
-/*
- * 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/main/php_streams.h b/main/php_streams.h
deleted file mode 100755
index 000b4291c3..0000000000
--- a/main/php_streams.h
+++ /dev/null
@@ -1,557 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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@thebrainroom.com) |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-#ifndef PHP_STREAMS_H
-#define PHP_STREAMS_H
-
-#ifdef HAVE_SYS_TIME_H
-#include <sys/time.h>
-#endif
-#include <sys/types.h>
-#include <sys/stat.h>
-
-BEGIN_EXTERN_C()
-PHPAPI int php_file_le_stream(void);
-PHPAPI int php_file_le_pstream(void);
-END_EXTERN_C()
-
-/* {{{ Streams memory debugging stuff */
-
-#if ZEND_DEBUG
-/* these have more of a dependency on the definitions of the zend macros than
- * I would prefer, but doing it this way saves loads of idefs :-/ */
-# define STREAMS_D int __php_stream_call_depth ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC
-# define STREAMS_C 0 ZEND_FILE_LINE_CC ZEND_FILE_LINE_EMPTY_CC
-# define STREAMS_REL_C __php_stream_call_depth + 1 ZEND_FILE_LINE_CC, \
- __php_stream_call_depth ? __zend_orig_filename : __zend_filename, \
- __php_stream_call_depth ? __zend_orig_lineno : __zend_lineno
-
-# define STREAMS_DC , STREAMS_D
-# define STREAMS_CC , STREAMS_C
-# define STREAMS_REL_CC , STREAMS_REL_C
-
-#else
-# define STREAMS_D
-# define STREAMS_C
-# define STREAMS_REL_C
-# define STREAMS_DC
-# define STREAMS_CC
-# define STREAMS_REL_CC
-#endif
-
-/* these functions relay the file/line number information. They are depth aware, so they will pass
- * the ultimate ancestor, which is useful, because there can be several layers of calls */
-#define php_stream_alloc_rel(ops, thisptr, persistent, mode) _php_stream_alloc((ops), (thisptr), (persistent), (mode) STREAMS_REL_CC TSRMLS_CC)
-
-#define php_stream_copy_to_mem_rel(src, buf, maxlen, persistent) _php_stream_copy_to_mem((src), (buf), (maxlen), (persistent) STREAMS_REL_CC TSRMLS_CC)
-
-#define php_stream_fopen_rel(filename, mode, opened, options) _php_stream_fopen((filename), (mode), (opened), (options) STREAMS_REL_CC TSRMLS_CC)
-
-#define php_stream_fopen_with_path_rel(filename, mode, path, opened, options) _php_stream_fopen_with_path((filename), (mode), (path), (opened), (options) STREAMS_REL_CC TSRMLS_CC)
-
-#define php_stream_fopen_from_fd_rel(fd, mode, persistent_id) _php_stream_fopen_from_fd((fd), (mode), (persistent_id) STREAMS_REL_CC TSRMLS_CC)
-#define php_stream_fopen_from_file_rel(file, mode) _php_stream_fopen_from_file((file), (mode) STREAMS_REL_CC TSRMLS_CC)
-
-#define php_stream_fopen_from_pipe_rel(file, mode) _php_stream_fopen_from_pipe((file), (mode) STREAMS_REL_CC TSRMLS_CC)
-
-#define php_stream_fopen_tmpfile_rel() _php_stream_fopen_tmpfile(0 STREAMS_REL_CC TSRMLS_CC)
-
-#define php_stream_fopen_temporary_file_rel(dir, pfx, opened_path) _php_stream_fopen_temporary_file((dir), (pfx), (opened_path) STREAMS_REL_CC TSRMLS_CC)
-
-#define php_stream_open_wrapper_rel(path, mode, options, opened) _php_stream_open_wrapper_ex((path), (mode), (options), (opened), NULL STREAMS_REL_CC TSRMLS_CC)
-#define php_stream_open_wrapper_ex_rel(path, mode, options, opened, context) _php_stream_open_wrapper_ex((path), (mode), (options), (opened), (context) STREAMS_REL_CC TSRMLS_CC)
-
-#define php_stream_make_seekable_rel(origstream, newstream, flags) _php_stream_make_seekable((origstream), (newstream), (flags) STREAMS_REL_CC TSRMLS_CC)
-
-/* }}} */
-
-/* The contents of the php_stream_ops and php_stream should only be accessed
- * using the functions/macros in this header.
- * If you need to get at something that doesn't have an API,
- * drop me a line <wez@thebrainroom.com> and we can sort out a way to do
- * it properly.
- *
- * The only exceptions to this rule are that stream implementations can use
- * the php_stream->abstract pointer to hold their context, and streams
- * opened via stream_open_wrappers can use the zval ptr in
- * php_stream->wrapperdata to hold meta data for php scripts to
- * retrieve using file_get_wrapper_data(). */
-
-typedef struct _php_stream php_stream;
-typedef struct _php_stream_wrapper php_stream_wrapper;
-typedef struct _php_stream_context php_stream_context;
-typedef struct _php_stream_filter php_stream_filter;
-
-#include "streams/php_stream_context.h"
-#include "streams/php_stream_filter_api.h"
-
-typedef struct _php_stream_statbuf {
-#if defined(NETWARE) && defined(CLIB_STAT_PATCH)
- struct stat_libc sb; /* regular info */
-#else
- struct stat sb; /* regular info */
-#endif
- /* extended info to go here some day: content-type etc. etc. */
-} php_stream_statbuf;
-
-typedef struct _php_stream_dirent {
- char d_name[MAXPATHLEN];
-} php_stream_dirent;
-
-/* operations on streams that are file-handles */
-typedef struct _php_stream_ops {
- /* stdio like functions - these are mandatory! */
- size_t (*write)(php_stream *stream, const char *buf, size_t count TSRMLS_DC);
- size_t (*read)(php_stream *stream, char *buf, size_t count TSRMLS_DC);
- int (*close)(php_stream *stream, int close_handle TSRMLS_DC);
- int (*flush)(php_stream *stream TSRMLS_DC);
-
- const char *label; /* label for this ops structure */
-
- /* these are optional */
- int (*seek)(php_stream *stream, off_t offset, int whence, off_t *newoffset TSRMLS_DC);
- int (*cast)(php_stream *stream, int castas, void **ret TSRMLS_DC);
- int (*stat)(php_stream *stream, php_stream_statbuf *ssb TSRMLS_DC);
- int (*set_option)(php_stream *stream, int option, int value, void *ptrparam TSRMLS_DC);
-} php_stream_ops;
-
-typedef struct _php_stream_wrapper_ops {
- /* open/create a wrapped stream */
- php_stream *(*stream_opener)(php_stream_wrapper *wrapper, char *filename, char *mode,
- int options, char **opened_path, php_stream_context *context STREAMS_DC TSRMLS_DC);
- /* close/destroy a wrapped stream */
- int (*stream_closer)(php_stream_wrapper *wrapper, php_stream *stream TSRMLS_DC);
- /* stat a wrapped stream */
- int (*stream_stat)(php_stream_wrapper *wrapper, php_stream *stream, php_stream_statbuf *ssb TSRMLS_DC);
- /* stat a URL */
- int (*url_stat)(php_stream_wrapper *wrapper, char *url, int flags, php_stream_statbuf *ssb, php_stream_context *context TSRMLS_DC);
- /* open a "directory" stream */
- php_stream *(*dir_opener)(php_stream_wrapper *wrapper, char *filename, char *mode,
- int options, char **opened_path, php_stream_context *context STREAMS_DC TSRMLS_DC);
-
- const char *label;
-
- /* delete a file */
- int (*unlink)(php_stream_wrapper *wrapper, char *url, int options, php_stream_context *context TSRMLS_DC);
-
- /* rename a file */
- int (*rename)(php_stream_wrapper *wrapper, char *url_from, char *url_to, int options, php_stream_context *context TSRMLS_DC);
-
- /* Create/Remove directory */
- int (*stream_mkdir)(php_stream_wrapper *wrapper, char *url, int mode, int options, php_stream_context *context TSRMLS_DC);
- int (*stream_rmdir)(php_stream_wrapper *wrapper, char *url, int options, php_stream_context *context TSRMLS_DC);
-} php_stream_wrapper_ops;
-
-struct _php_stream_wrapper {
- php_stream_wrapper_ops *wops; /* operations the wrapper can perform */
- void *abstract; /* context for the wrapper */
- int is_url; /* so that PG(allow_url_fopen) can be respected */
-
- /* support for wrappers to return (multiple) error messages to the stream opener */
- int err_count;
- char **err_stack;
-};
-
-#define PHP_STREAM_FLAG_NO_SEEK 1
-#define PHP_STREAM_FLAG_NO_BUFFER 2
-
-#define PHP_STREAM_FLAG_EOL_UNIX 0 /* also includes DOS */
-#define PHP_STREAM_FLAG_DETECT_EOL 4
-#define PHP_STREAM_FLAG_EOL_MAC 8
-
-/* set this when the stream might represent "interactive" data.
- * When set, the read buffer will avoid certain operations that
- * might otherwise cause the read to block for much longer than
- * is strictly required. */
-#define PHP_STREAM_FLAG_AVOID_BLOCKING 16
-
-struct _php_stream {
- php_stream_ops *ops;
- void *abstract; /* convenience pointer for abstraction */
-
- php_stream_filter_chain readfilters, writefilters;
-
- php_stream_wrapper *wrapper; /* which wrapper was used to open the stream */
- void *wrapperthis; /* convenience pointer for a instance of a wrapper */
- zval *wrapperdata; /* fgetwrapperdata retrieves this */
-
- int fgetss_state; /* for fgetss to handle multiline tags */
- int is_persistent;
- char mode[16]; /* "rwb" etc. ala stdio */
- int rsrc_id; /* used for auto-cleanup */
- int in_free; /* to prevent recursion during free */
- /* so we know how to clean it up correctly. This should be set to
- * PHP_STREAM_FCLOSE_XXX as appropriate */
- int fclose_stdiocast;
- FILE *stdiocast; /* cache this, otherwise we might leak! */
-#if ZEND_DEBUG
- int __exposed; /* non-zero if exposed as a zval somewhere */
-#endif
- char *orig_path;
-
- php_stream_context *context;
- int flags; /* PHP_STREAM_FLAG_XXX */
-
- /* buffer */
- off_t position; /* of underlying stream */
- unsigned char *readbuf;
- size_t readbuflen;
- off_t readpos;
- off_t writepos;
-
- /* how much data to read when filling buffer */
- size_t chunk_size;
-
- int eof;
-
-}; /* php_stream */
-/* state definitions when closing down; these are private to streams.c */
-#define PHP_STREAM_FCLOSE_NONE 0
-#define PHP_STREAM_FCLOSE_FDOPEN 1
-#define PHP_STREAM_FCLOSE_FOPENCOOKIE 2
-
-/* allocate a new stream for a particular ops */
-BEGIN_EXTERN_C()
-PHPAPI php_stream *_php_stream_alloc(php_stream_ops *ops, void *abstract,
- const char *persistent_id, const char *mode STREAMS_DC TSRMLS_DC);
-END_EXTERN_C()
-#define php_stream_alloc(ops, thisptr, persistent_id, mode) _php_stream_alloc((ops), (thisptr), (persistent_id), (mode) STREAMS_CC TSRMLS_CC)
-
-
-#define php_stream_get_resource_id(stream) (stream)->rsrc_id
-#if ZEND_DEBUG
-/* use this to tell the stream that it is OK if we don't explicitly close it */
-# define php_stream_auto_cleanup(stream) { (stream)->__exposed++; }
-/* use this to assign the stream to a zval and tell the stream that is
- * has been exported to the engine; it will expect to be closed automatically
- * when the resources are auto-destructed */
-# define php_stream_to_zval(stream, zval) { ZVAL_RESOURCE(zval, (stream)->rsrc_id); (stream)->__exposed++; }
-#else
-# define php_stream_auto_cleanup(stream) /* nothing */
-# define php_stream_to_zval(stream, zval) { ZVAL_RESOURCE(zval, (stream)->rsrc_id); }
-#endif
-
-#define php_stream_from_zval(xstr, ppzval) ZEND_FETCH_RESOURCE2((xstr), php_stream *, (ppzval), -1, "stream", php_file_le_stream(), php_file_le_pstream())
-#define php_stream_from_zval_no_verify(xstr, ppzval) (xstr) = (php_stream*)zend_fetch_resource((ppzval) TSRMLS_CC, -1, "stream", NULL, 2, php_file_le_stream(), php_file_le_pstream())
-
-BEGIN_EXTERN_C()
-PHPAPI int php_stream_from_persistent_id(const char *persistent_id, php_stream **stream TSRMLS_DC);
-#define PHP_STREAM_PERSISTENT_SUCCESS 0 /* id exists */
-#define PHP_STREAM_PERSISTENT_FAILURE 1 /* id exists but is not a stream! */
-#define PHP_STREAM_PERSISTENT_NOT_EXIST 2 /* id does not exist */
-
-#define PHP_STREAM_FREE_CALL_DTOR 1 /* call ops->close */
-#define PHP_STREAM_FREE_RELEASE_STREAM 2 /* pefree(stream) */
-#define PHP_STREAM_FREE_PRESERVE_HANDLE 4 /* tell ops->close to not close it's underlying handle */
-#define PHP_STREAM_FREE_RSRC_DTOR 8 /* called from the resource list dtor */
-#define PHP_STREAM_FREE_PERSISTENT 16 /* manually freeing a persistent connection */
-#define PHP_STREAM_FREE_CLOSE (PHP_STREAM_FREE_CALL_DTOR | PHP_STREAM_FREE_RELEASE_STREAM)
-#define PHP_STREAM_FREE_CLOSE_CASTED (PHP_STREAM_FREE_CLOSE | PHP_STREAM_FREE_PRESERVE_HANDLE)
-#define PHP_STREAM_FREE_CLOSE_PERSISTENT (PHP_STREAM_FREE_CLOSE | PHP_STREAM_FREE_PERSISTENT)
-
-PHPAPI int _php_stream_free(php_stream *stream, int close_options TSRMLS_DC);
-#define php_stream_free(stream, close_options) _php_stream_free((stream), (close_options) TSRMLS_CC)
-#define php_stream_close(stream) _php_stream_free((stream), PHP_STREAM_FREE_CLOSE TSRMLS_CC)
-#define php_stream_pclose(stream) _php_stream_free((stream), PHP_STREAM_FREE_CLOSE_PERSISTENT TSRMLS_CC)
-
-PHPAPI int _php_stream_seek(php_stream *stream, off_t offset, int whence TSRMLS_DC);
-#define php_stream_rewind(stream) _php_stream_seek((stream), 0L, SEEK_SET TSRMLS_CC)
-#define php_stream_seek(stream, offset, whence) _php_stream_seek((stream), (offset), (whence) TSRMLS_CC)
-
-PHPAPI off_t _php_stream_tell(php_stream *stream TSRMLS_DC);
-#define php_stream_tell(stream) _php_stream_tell((stream) TSRMLS_CC)
-
-PHPAPI size_t _php_stream_read(php_stream *stream, char *buf, size_t count TSRMLS_DC);
-#define php_stream_read(stream, buf, count) _php_stream_read((stream), (buf), (count) TSRMLS_CC)
-
-PHPAPI size_t _php_stream_write(php_stream *stream, const char *buf, size_t count TSRMLS_DC);
-#define php_stream_write_string(stream, str) _php_stream_write(stream, str, strlen(str) TSRMLS_CC)
-#define php_stream_write(stream, buf, count) _php_stream_write(stream, (buf), (count) TSRMLS_CC)
-
-PHPAPI size_t _php_stream_printf(php_stream *stream TSRMLS_DC, const char *fmt, ...);
-/* php_stream_printf macro & function require TSRMLS_CC */
-#define php_stream_printf _php_stream_printf
-
-PHPAPI int _php_stream_eof(php_stream *stream TSRMLS_DC);
-#define php_stream_eof(stream) _php_stream_eof((stream) TSRMLS_CC)
-
-PHPAPI int _php_stream_getc(php_stream *stream TSRMLS_DC);
-#define php_stream_getc(stream) _php_stream_getc((stream) TSRMLS_CC)
-
-PHPAPI int _php_stream_putc(php_stream *stream, int c TSRMLS_DC);
-#define php_stream_putc(stream, c) _php_stream_putc((stream), (c) TSRMLS_CC)
-
-PHPAPI int _php_stream_flush(php_stream *stream, int closing TSRMLS_DC);
-#define php_stream_flush(stream) _php_stream_flush((stream), 0 TSRMLS_CC)
-
-PHPAPI char *_php_stream_get_line(php_stream *stream, char *buf, size_t maxlen, size_t *returned_len TSRMLS_DC);
-#define php_stream_gets(stream, buf, maxlen) _php_stream_get_line((stream), (buf), (maxlen), NULL TSRMLS_CC)
-
-#define php_stream_get_line(stream, buf, maxlen, retlen) _php_stream_get_line((stream), (buf), (maxlen), (retlen) TSRMLS_CC)
-PHPAPI char *php_stream_get_record(php_stream *stream, size_t maxlen, size_t *returned_len, char *delim, size_t delim_len TSRMLS_DC);
-
-/* CAREFUL! this is equivalent to puts NOT fputs! */
-PHPAPI int _php_stream_puts(php_stream *stream, char *buf TSRMLS_DC);
-#define php_stream_puts(stream, buf) _php_stream_puts((stream), (buf) TSRMLS_CC)
-
-PHPAPI int _php_stream_stat(php_stream *stream, php_stream_statbuf *ssb TSRMLS_DC);
-#define php_stream_stat(stream, ssb) _php_stream_stat((stream), (ssb) TSRMLS_CC)
-
-PHPAPI int _php_stream_stat_path(char *path, int flags, php_stream_statbuf *ssb, php_stream_context *context TSRMLS_DC);
-#define php_stream_stat_path(path, ssb) _php_stream_stat_path((path), 0, (ssb), NULL TSRMLS_CC)
-#define php_stream_stat_path_ex(path, flags, ssb, context) _php_stream_stat_path((path), (flags), (ssb), (context) TSRMLS_CC)
-
-PHPAPI int _php_stream_mkdir(char *path, int mode, int options, php_stream_context *context TSRMLS_DC);
-#define php_stream_mkdir(path, mode, options, context) _php_stream_mkdir(path, mode, options, context TSRMLS_CC)
-
-PHPAPI int _php_stream_rmdir(char *path, int options, php_stream_context *context TSRMLS_DC);
-#define php_stream_rmdir(path, options, context) _php_stream_rmdir(path, options, context TSRMLS_CC)
-
-PHPAPI php_stream *_php_stream_opendir(char *path, int options, php_stream_context *context STREAMS_DC TSRMLS_DC);
-#define php_stream_opendir(path, options, context) _php_stream_opendir((path), (options), (context) STREAMS_CC TSRMLS_CC)
-PHPAPI php_stream_dirent *_php_stream_readdir(php_stream *dirstream, php_stream_dirent *ent TSRMLS_DC);
-#define php_stream_readdir(dirstream, dirent) _php_stream_readdir((dirstream), (dirent) TSRMLS_CC)
-#define php_stream_closedir(dirstream) php_stream_close((dirstream))
-#define php_stream_rewinddir(dirstream) php_stream_rewind((dirstream))
-
-PHPAPI int php_stream_dirent_alphasort(const php_stream_dirent **a, const php_stream_dirent **b);
-PHPAPI int php_stream_dirent_alphasortr(const php_stream_dirent **a, const php_stream_dirent **b);
-
-PHPAPI int _php_stream_scandir(char *dirname, php_stream_dirent **namelist[], int flags, php_stream_context *context,
- int (*compare) (const php_stream_dirent **a, const php_stream_dirent **b) TSRMLS_DC);
-#define php_stream_scandir(dirname, namelist, context, compare) _php_stream_scandir((dirname), (namelist), 0, (context), (compare) TSRMLS_CC)
-
-PHPAPI int _php_stream_set_option(php_stream *stream, int option, int value, void *ptrparam TSRMLS_DC);
-#define php_stream_set_option(stream, option, value, ptrvalue) _php_stream_set_option((stream), (option), (value), (ptrvalue) TSRMLS_CC)
-
-#define php_stream_set_chunk_size(stream, size) _php_stream_set_option((stream), PHP_STREAM_OPTION_SET_CHUNK_SIZE, (size), NULL TSRMLS_CC)
-
-END_EXTERN_C()
-
-
-/* Flags for mkdir method in wrapper ops */
-#define PHP_STREAM_MKDIR_RECURSIVE 1
-/* define REPORT ERRORS 8 (below) */
-
-/* Flags for rmdir method in wrapper ops */
-/* define REPORT_ERRORS 8 (below) */
-
-/* Flags for url_stat method in wrapper ops */
-#define PHP_STREAM_URL_STAT_LINK 1
-#define PHP_STREAM_URL_STAT_QUIET 2
-
-/* change the blocking mode of stream: value == 1 => blocking, value == 0 => non-blocking. */
-#define PHP_STREAM_OPTION_BLOCKING 1
-
-/* change the buffering mode of stream. value is a PHP_STREAM_BUFFER_XXXX value, ptrparam is a ptr to a size_t holding
- * the required buffer size */
-#define PHP_STREAM_OPTION_READ_BUFFER 2
-#define PHP_STREAM_OPTION_WRITE_BUFFER 3
-
-#define PHP_STREAM_BUFFER_NONE 0 /* unbuffered */
-#define PHP_STREAM_BUFFER_LINE 1 /* line buffered */
-#define PHP_STREAM_BUFFER_FULL 2 /* fully buffered */
-
-/* set the timeout duration for reads on the stream. ptrparam is a pointer to a struct timeval * */
-#define PHP_STREAM_OPTION_READ_TIMEOUT 4
-#define PHP_STREAM_OPTION_SET_CHUNK_SIZE 5
-
-/* set or release lock on a stream */
-#define PHP_STREAM_OPTION_LOCKING 6
-
-/* whether or not locking is supported */
-#define PHP_STREAM_LOCK_SUPPORTED 1
-
-#define php_stream_supports_lock(stream) _php_stream_set_option((stream), PHP_STREAM_OPTION_LOCKING, 0, (void *) PHP_STREAM_LOCK_SUPPORTED TSRMLS_CC) == 0 ? 1 : 0
-#define php_stream_lock(stream, mode) _php_stream_set_option((stream), PHP_STREAM_OPTION_LOCKING, (mode), (void *) NULL TSRMLS_CC)
-
-/* option code used by the php_stream_xport_XXX api */
-#define PHP_STREAM_OPTION_XPORT_API 7 /* see php_stream_transport.h */
-#define PHP_STREAM_OPTION_CRYPTO_API 8 /* see php_stream_transport.h */
-#define PHP_STREAM_OPTION_MMAP_API 9 /* see php_stream_mmap.h */
-#define PHP_STREAM_OPTION_TRUNCATE_API 10
-
-#define PHP_STREAM_TRUNCATE_SUPPORTED 0
-#define PHP_STREAM_TRUNCATE_SET_SIZE 1 /* ptrparam is a pointer to a size_t */
-
-#define php_stream_truncate_supported(stream) (_php_stream_set_option((stream), PHP_STREAM_OPTION_TRUNCATE_API, PHP_STREAM_TRUNCATE_SUPPORTED, NULL TSRMLS_CC) == PHP_STREAM_OPTION_RETURN_OK ? 1 : 0)
-
-BEGIN_EXTERN_C()
-PHPAPI int _php_stream_truncate_set_size(php_stream *stream, size_t newsize TSRMLS_DC);
-#define php_stream_truncate_set_size(stream, size) _php_stream_truncate_set_size((stream), (size) TSRMLS_CC)
-END_EXTERN_C()
-
-#define PHP_STREAM_OPTION_META_DATA_API 11 /* ptrparam is a zval* to which to add meta data information */
-#define php_stream_populate_meta_data(stream, zv) (_php_stream_set_option((stream), PHP_STREAM_OPTION_META_DATA_API, 0, zv TSRMLS_CC) == PHP_STREAM_OPTION_RETURN_OK ? 1 : 0)
-
-/* Check if the stream is still "live"; for sockets/pipes this means the socket
- * is still connected; for files, this does not really have meaning */
-#define PHP_STREAM_OPTION_CHECK_LIVENESS 12 /* no parameters */
-
-#define PHP_STREAM_OPTION_RETURN_OK 0 /* option set OK */
-#define PHP_STREAM_OPTION_RETURN_ERR -1 /* problem setting option */
-#define PHP_STREAM_OPTION_RETURN_NOTIMPL -2 /* underlying stream does not implement; streams can handle it instead */
-
-/* copy up to maxlen bytes from src to dest. If maxlen is PHP_STREAM_COPY_ALL, copy until eof(src).
- * Uses mmap if the src is a plain file and at offset 0 */
-#define PHP_STREAM_COPY_ALL -1
-BEGIN_EXTERN_C()
-PHPAPI size_t _php_stream_copy_to_stream(php_stream *src, php_stream *dest, size_t maxlen STREAMS_DC TSRMLS_DC);
-#define php_stream_copy_to_stream(src, dest, maxlen) _php_stream_copy_to_stream((src), (dest), (maxlen) STREAMS_CC TSRMLS_CC)
-
-
-/* read all data from stream and put into a buffer. Caller must free buffer when done.
- * The copy will use mmap if available. */
-PHPAPI size_t _php_stream_copy_to_mem(php_stream *src, char **buf, size_t maxlen,
- int persistent STREAMS_DC TSRMLS_DC);
-#define php_stream_copy_to_mem(src, buf, maxlen, persistent) _php_stream_copy_to_mem((src), (buf), (maxlen), (persistent) STREAMS_CC TSRMLS_CC)
-
-/* output all data from a stream */
-PHPAPI size_t _php_stream_passthru(php_stream * src STREAMS_DC TSRMLS_DC);
-#define php_stream_passthru(stream) _php_stream_passthru((stream) STREAMS_CC TSRMLS_CC)
-END_EXTERN_C()
-
-#include "streams/php_stream_transport.h"
-#include "streams/php_stream_plain_wrapper.h"
-#include "streams/php_stream_userspace.h"
-#include "streams/php_stream_mmap.h"
-
-/* coerce the stream into some other form */
-/* cast as a stdio FILE * */
-#define PHP_STREAM_AS_STDIO 0
-/* cast as a POSIX fd or socketd */
-#define PHP_STREAM_AS_FD 1
-/* cast as a socketd */
-#define PHP_STREAM_AS_SOCKETD 2
-/* cast as fd/socket for select purposes */
-#define PHP_STREAM_AS_FD_FOR_SELECT 3
-
-/* try really, really hard to make sure the cast happens (avoid using this flag if possible) */
-#define PHP_STREAM_CAST_TRY_HARD 0x80000000
-#define PHP_STREAM_CAST_RELEASE 0x40000000 /* stream becomes invalid on success */
-#define PHP_STREAM_CAST_INTERNAL 0x20000000 /* stream cast for internal use */
-#define PHP_STREAM_CAST_MASK (PHP_STREAM_CAST_TRY_HARD | PHP_STREAM_CAST_RELEASE | PHP_STREAM_CAST_INTERNAL)
-BEGIN_EXTERN_C()
-PHPAPI int _php_stream_cast(php_stream *stream, int castas, void **ret, int show_err TSRMLS_DC);
-END_EXTERN_C()
-/* use this to check if a stream can be cast into another form */
-#define php_stream_can_cast(stream, as) _php_stream_cast((stream), (as), NULL, 0 TSRMLS_CC)
-#define php_stream_cast(stream, as, ret, show_err) _php_stream_cast((stream), (as), (ret), (show_err) TSRMLS_CC)
-
-/* use this to check if a stream is of a particular type:
- * PHPAPI int php_stream_is(php_stream *stream, php_stream_ops *ops); */
-#define php_stream_is(stream, anops) ((stream)->ops == anops)
-#define PHP_STREAM_IS_STDIO &php_stream_stdio_ops
-
-#define php_stream_is_persistent(stream) (stream)->is_persistent
-
-/* Wrappers support */
-
-#define IGNORE_PATH 0
-#define USE_PATH 1
-#define IGNORE_URL 2
-#define ENFORCE_SAFE_MODE 4
-#define REPORT_ERRORS 8
-/* If you don't need to write to the stream, but really need to
- * be able to seek, use this flag in your options. */
-#define STREAM_MUST_SEEK 16
-/* If you are going to end up casting the stream into a FILE* or
- * a socket, pass this flag and the streams/wrappers will not use
- * buffering mechanisms while reading the headers, so that HTTP
- * wrapped streams will work consistently.
- * If you omit this flag, streams will use buffering and should end
- * up working more optimally.
- * */
-#define STREAM_WILL_CAST 32
-
-/* this flag applies to php_stream_locate_url_wrapper */
-#define STREAM_LOCATE_WRAPPERS_ONLY 64
-
-/* this flag is only used by include/require functions */
-#define STREAM_OPEN_FOR_INCLUDE 128
-
-/* this flag tells streams to ONLY open urls */
-#define STREAM_USE_URL 256
-
-/* this flag is used when only the headers from HTTP request are to be fetched */
-#define STREAM_ONLY_GET_HEADERS 512
-
-/* don't apply open_basedir checks */
-#define STREAM_DISABLE_OPEN_BASEDIR 1024
-
-/* get (or create) a persistent version of the stream */
-#define STREAM_OPEN_PERSISTENT 2048
-
-/* Antique - no longer has meaning */
-#define IGNORE_URL_WIN 0
-
-int php_init_stream_wrappers(int module_number TSRMLS_DC);
-int php_shutdown_stream_wrappers(int module_number TSRMLS_DC);
-PHP_RSHUTDOWN_FUNCTION(streams);
-
-BEGIN_EXTERN_C()
-PHPAPI int php_register_url_stream_wrapper(char *protocol, php_stream_wrapper *wrapper TSRMLS_DC);
-PHPAPI int php_unregister_url_stream_wrapper(char *protocol TSRMLS_DC);
-PHPAPI int php_register_url_stream_wrapper_volatile(char *protocol, php_stream_wrapper *wrapper TSRMLS_DC);
-PHPAPI php_stream *_php_stream_open_wrapper_ex(char *path, char *mode, int options, char **opened_path, php_stream_context *context STREAMS_DC TSRMLS_DC);
-PHPAPI php_stream_wrapper *php_stream_locate_url_wrapper(const char *path, char **path_for_open, int options TSRMLS_DC);
-PHPAPI char *php_stream_locate_eol(php_stream *stream, char *buf, size_t buf_len TSRMLS_DC);
-
-#define php_stream_open_wrapper(path, mode, options, opened) _php_stream_open_wrapper_ex((path), (mode), (options), (opened), NULL STREAMS_CC TSRMLS_CC)
-#define php_stream_open_wrapper_ex(path, mode, options, opened, context) _php_stream_open_wrapper_ex((path), (mode), (options), (opened), (context) STREAMS_CC TSRMLS_CC)
-
-#define php_stream_get_from_zval(stream, zstream, mode, options, opened, context) \
- if (Z_TYPE_PP((zstream)) == IS_RESOURCE) { \
- php_stream_from_zval((stream), (zstream)); \
- } else (stream) = Z_TYPE_PP((zstream)) == IS_STRING ? \
- php_stream_open_wrapper_ex(Z_STRVAL_PP((zstream)), (mode), (options), (opened), (context)) : NULL
-
-/* pushes an error message onto the stack for a wrapper instance */
-PHPAPI void php_stream_wrapper_log_error(php_stream_wrapper *wrapper, int options TSRMLS_DC, const char *fmt, ...);
-
-
-#define PHP_STREAM_UNCHANGED 0 /* orig stream was seekable anyway */
-#define PHP_STREAM_RELEASED 1 /* newstream should be used; origstream is no longer valid */
-#define PHP_STREAM_FAILED 2 /* an error occurred while attempting conversion */
-#define PHP_STREAM_CRITICAL 3 /* an error occurred; origstream is in an unknown state; you should close origstream */
-#define PHP_STREAM_NO_PREFERENCE 0
-#define PHP_STREAM_PREFER_STDIO 1
-#define PHP_STREAM_FORCE_CONVERSION 2
-/* DO NOT call this on streams that are referenced by resources! */
-PHPAPI int _php_stream_make_seekable(php_stream *origstream, php_stream **newstream, int flags STREAMS_DC TSRMLS_DC);
-#define php_stream_make_seekable(origstream, newstream, flags) _php_stream_make_seekable((origstream), (newstream), (flags) STREAMS_CC TSRMLS_CC)
-
-/* Give other modules access to the url_stream_wrappers_hash and stream_filters_hash */
-PHPAPI HashTable *_php_stream_get_url_stream_wrappers_hash(TSRMLS_D);
-#define php_stream_get_url_stream_wrappers_hash() _php_stream_get_url_stream_wrappers_hash(TSRMLS_C)
-PHPAPI HashTable *_php_get_stream_filters_hash(TSRMLS_D);
-#define php_get_stream_filters_hash() _php_get_stream_filters_hash(TSRMLS_C)
-PHPAPI HashTable *php_get_stream_filters_hash_global();
-END_EXTERN_C()
-#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/main/php_syslog.h b/main/php_syslog.h
deleted file mode 100644
index 3f93f28ee1..0000000000
--- a/main/php_syslog.h
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifndef PHP_SYSLOG_H
-#define PHP_SYSLOG_H
-
-#ifdef PHP_WIN32
-#include "win32/syslog.h"
-#elif defined(NETWARE)
-# include "config.nw.h"
-#ifdef HAVE_SYSLOG_H
-#include <syslog.h>
-#endif
-#else
-#include "php_config.h"
-#ifdef HAVE_SYSLOG_H
-#include <syslog.h>
-#endif
-#endif
-
-/*
- * The SCO OpenServer 5 Development System (not the UDK)
- * defines syslog to std_syslog.
- */
-
-#ifdef syslog
-
-#ifdef HAVE_STD_SYSLOG
-#define php_syslog std_syslog
-#endif
-
-#undef syslog
-
-#endif
-
-#ifndef php_syslog
-#define php_syslog syslog
-#endif
-
-#endif
diff --git a/main/php_ticks.c b/main/php_ticks.c
deleted file mode 100644
index 945a5549d9..0000000000
--- a/main/php_ticks.c
+++ /dev/null
@@ -1,81 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Stig Bakken <ssb@php.net> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#include "php.h"
-#include "php_ticks.h"
-
-int php_startup_ticks(TSRMLS_D)
-{
- zend_llist_init(&PG(tick_functions), sizeof(void(*)(int)), NULL, 1);
- return SUCCESS;
-}
-
-void php_shutdown_ticks(TSRMLS_D)
-{
- zend_llist_destroy(&PG(tick_functions));
-}
-
-static int php_compare_tick_functions(void *elem1, void *elem2)
-{
- void(*func1)(int);
- void(*func2)(int);
- memcpy(&func1, elem1, sizeof(void(*)(int)));
- memcpy(&func2, elem2, sizeof(void(*)(int)));
- return (func1 == func2);
-}
-
-PHPAPI void php_add_tick_function(void (*func)(int))
-{
- TSRMLS_FETCH();
-
- zend_llist_add_element(&PG(tick_functions), (void *)&func);
-}
-
-PHPAPI void php_remove_tick_function(void (*func)(int))
-{
- TSRMLS_FETCH();
-
- zend_llist_del_element(&PG(tick_functions), (void *)func,
- (int(*)(void*, void*))php_compare_tick_functions);
-}
-
-static void php_tick_iterator(void *data, void *arg TSRMLS_DC)
-{
- void (*func)(int);
-
- memcpy(&func, data, sizeof(void(*)(int)));
- func(*((int *)arg));
-}
-
-void php_run_ticks(int count)
-{
- TSRMLS_FETCH();
-
- zend_llist_apply_with_argument(&PG(tick_functions), (llist_apply_with_arg_func_t) php_tick_iterator, &count TSRMLS_CC);
-}
-
-/*
- * 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/main/php_ticks.h b/main/php_ticks.h
deleted file mode 100644
index 600f11b0f9..0000000000
--- a/main/php_ticks.h
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Stig Bakken <ssb@php.net> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifndef PHP_TICKS_H
-#define PHP_TICKS_H
-
-int php_startup_ticks(TSRMLS_D);
-void php_shutdown_ticks(TSRMLS_D);
-void php_run_ticks(int count);
-
-BEGIN_EXTERN_C()
-PHPAPI void php_add_tick_function(void (*func)(int));
-PHPAPI void php_remove_tick_function(void (*func)(int));
-END_EXTERN_C()
-
-#endif
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- */
diff --git a/main/php_variables.c b/main/php_variables.c
deleted file mode 100644
index 498d4b173d..0000000000
--- a/main/php_variables.c
+++ /dev/null
@@ -1,784 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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. |
- +----------------------------------------------------------------------+
- | Authors: Rasmus Lerdorf <rasmus@lerdorf.on.ca> |
- | Zeev Suraski <zeev@zend.com> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-#include <stdio.h>
-#include "php.h"
-#include "ext/standard/php_standard.h"
-#include "ext/standard/credits.h"
-#include "php_variables.h"
-#include "php_globals.h"
-#include "php_content_types.h"
-#include "SAPI.h"
-#include "php_logos.h"
-
-#include "zend_globals.h"
-
-
-/* for systems that need to override reading of environment variables */
-void _php_import_environment_variables(zval *array_ptr TSRMLS_DC);
-PHPAPI void (*php_import_environment_variables)(zval *array_ptr TSRMLS_DC) = _php_import_environment_variables;
-
-PHPAPI void php_register_variable(char *var, char *strval, zval *track_vars_array TSRMLS_DC)
-{
- php_register_variable_safe(var, strval, strlen(strval), track_vars_array TSRMLS_CC);
-}
-
-
-/* binary-safe version */
-PHPAPI void php_register_variable_safe(char *var, char *strval, int str_len, zval *track_vars_array TSRMLS_DC)
-{
- zval new_entry;
- assert(strval != NULL);
-
- /* Prepare value */
- Z_STRLEN(new_entry) = str_len;
- if (PG(magic_quotes_gpc)) {
- Z_STRVAL(new_entry) = php_addslashes(strval, Z_STRLEN(new_entry), &Z_STRLEN(new_entry), 0 TSRMLS_CC);
- } else {
- Z_STRVAL(new_entry) = estrndup(strval, Z_STRLEN(new_entry));
- }
- Z_TYPE(new_entry) = IS_STRING;
-
- php_register_variable_ex(var, &new_entry, track_vars_array TSRMLS_CC);
-}
-
-
-PHPAPI void php_register_variable_ex(char *var, zval *val, pval *track_vars_array TSRMLS_DC)
-{
- char *p = NULL;
- char *ip; /* index pointer */
- char *index;
- int var_len, index_len;
- zval *gpc_element, **gpc_element_p;
- zend_bool is_array;
- HashTable *symtable1=NULL;
-
- assert(var != NULL);
-
- if (track_vars_array) {
- symtable1 = Z_ARRVAL_P(track_vars_array);
- } else if (PG(register_globals)) {
- symtable1 = EG(active_symbol_table);
- }
- if (!symtable1) {
- /* Nothing to do */
- zval_dtor(val);
- return;
- }
-
- /*
- * Prepare variable name
- */
- ip = strchr(var, '[');
- if (ip) {
- is_array = 1;
- *ip = 0;
- } else {
- is_array = 0;
- }
- /* ignore leading spaces in the variable name */
- while (*var && *var==' ') {
- var++;
- }
- var_len = strlen(var);
- if (var_len==0) { /* empty variable name, or variable name with a space in it */
- zval_dtor(val);
- return;
- }
- /* ensure that we don't have spaces or dots in the variable name (not binary safe) */
- for (p=var; *p; p++) {
- switch(*p) {
- case ' ':
- case '.':
- *p='_';
- break;
- }
- }
-
- index = var;
- index_len = var_len;
-
- while (1) {
- if (is_array) {
- char *escaped_index = NULL, *index_s;
- int new_idx_len = 0;
-
- ip++;
- index_s = ip;
- if (isspace(*ip)) {
- ip++;
- }
- if (*ip==']') {
- index_s = NULL;
- } else {
- ip = strchr(ip, ']');
- if (!ip) {
- /* PHP variables cannot contain '[' in their names, so we replace the character with a '_' */
- *(index_s - 1) = '_';
- index_len = var_len = strlen(var);
- goto plain_var;
- return;
- }
- *ip = 0;
- new_idx_len = strlen(index_s);
- }
-
- if (!index) {
- MAKE_STD_ZVAL(gpc_element);
- array_init(gpc_element);
- zend_hash_next_index_insert(symtable1, &gpc_element, sizeof(zval *), (void **) &gpc_element_p);
- } else {
- if (PG(magic_quotes_gpc) && (index!=var)) {
- /* no need to addslashes() the index if it's the main variable name */
- escaped_index = php_addslashes(index, index_len, &index_len, 0 TSRMLS_CC);
- } else {
- escaped_index = index;
- }
- if (zend_symtable_find(symtable1, escaped_index, index_len+1, (void **) &gpc_element_p)==FAILURE
- || Z_TYPE_PP(gpc_element_p) != IS_ARRAY) {
- MAKE_STD_ZVAL(gpc_element);
- array_init(gpc_element);
- zend_symtable_update(symtable1, escaped_index, index_len+1, &gpc_element, sizeof(zval *), (void **) &gpc_element_p);
- }
- if (index!=escaped_index) {
- efree(escaped_index);
- }
- }
- symtable1 = Z_ARRVAL_PP(gpc_element_p);
- /* ip pointed to the '[' character, now obtain the key */
- index = index_s;
- index_len = new_idx_len;
-
- ip++;
- if (*ip=='[') {
- is_array = 1;
- *ip = 0;
- } else {
- is_array = 0;
- }
- } else {
-plain_var:
- MAKE_STD_ZVAL(gpc_element);
- gpc_element->value = val->value;
- Z_TYPE_P(gpc_element) = Z_TYPE_P(val);
- if (!index) {
- zend_hash_next_index_insert(symtable1, &gpc_element, sizeof(zval *), (void **) &gpc_element_p);
- } else {
- char *escaped_index = php_addslashes(index, index_len, &index_len, 0 TSRMLS_CC);
- zend_symtable_update(symtable1, escaped_index, index_len+1, &gpc_element, sizeof(zval *), (void **) &gpc_element_p);
- efree(escaped_index);
- }
- break;
- }
- }
-}
-
-
-SAPI_API SAPI_POST_HANDLER_FUNC(php_std_post_handler)
-{
- char *var, *val;
- char *strtok_buf = NULL;
- zval *array_ptr = (zval *) arg;
-
- if (SG(request_info).post_data==NULL) {
- return;
- }
-
- var = php_strtok_r(SG(request_info).post_data, "&", &strtok_buf);
-
- while (var) {
- val = strchr(var, '=');
- if (val) { /* have a value */
- unsigned int val_len, new_val_len;
-
- *val++ = '\0';
- php_url_decode(var, strlen(var));
- val_len = php_url_decode(val, strlen(val));
- val = estrndup(val, val_len);
- if (sapi_module.input_filter(PARSE_POST, var, &val, val_len, &new_val_len TSRMLS_CC)) {
- php_register_variable_safe(var, val, new_val_len, array_ptr TSRMLS_CC);
- }
- efree(val);
- }
- var = php_strtok_r(NULL, "&", &strtok_buf);
- }
-}
-
-SAPI_API SAPI_INPUT_FILTER_FUNC(php_default_input_filter)
-{
- /* TODO: check .ini setting here and apply user-defined input filter */
- *new_val_len = val_len;
- return 1;
-}
-
-SAPI_API SAPI_TREAT_DATA_FUNC(php_default_treat_data)
-{
- char *res = NULL, *var, *val, *separator=NULL;
- const char *c_var;
- pval *array_ptr;
- int free_buffer=0;
- char *strtok_buf = NULL;
-
- switch (arg) {
- case PARSE_POST:
- case PARSE_GET:
- case PARSE_COOKIE:
- ALLOC_ZVAL(array_ptr);
- array_init(array_ptr);
- INIT_PZVAL(array_ptr);
- switch (arg) {
- case PARSE_POST:
- PG(http_globals)[TRACK_VARS_POST] = array_ptr;
- break;
- case PARSE_GET:
- PG(http_globals)[TRACK_VARS_GET] = array_ptr;
- break;
- case PARSE_COOKIE:
- PG(http_globals)[TRACK_VARS_COOKIE] = array_ptr;
- break;
- }
- break;
- default:
- array_ptr=destArray;
- break;
- }
-
- if (arg==PARSE_POST) {
- sapi_handle_post(array_ptr TSRMLS_CC);
- return;
- }
-
- if (arg == PARSE_GET) { /* GET data */
- c_var = SG(request_info).query_string;
- if (c_var && *c_var) {
- res = (char *) estrdup(c_var);
- free_buffer = 1;
- } else {
- free_buffer = 0;
- }
- } else if (arg == PARSE_COOKIE) { /* Cookie data */
- c_var = SG(request_info).cookie_data;
- if (c_var && *c_var) {
- res = (char *) estrdup(c_var);
- free_buffer = 1;
- } else {
- free_buffer = 0;
- }
- } else if (arg == PARSE_STRING) { /* String data */
- res = str;
- free_buffer = 1;
- }
-
- if (!res) {
- return;
- }
-
- switch (arg) {
- case PARSE_GET:
- case PARSE_STRING:
- separator = (char *) estrdup(PG(arg_separator).input);
- break;
- case PARSE_COOKIE:
- separator = ";\0";
- break;
- }
-
- var = php_strtok_r(res, separator, &strtok_buf);
-
- while (var) {
- val = strchr(var, '=');
- if (val) { /* have a value */
- int val_len;
- unsigned int new_val_len;
-
- *val++ = '\0';
- php_url_decode(var, strlen(var));
- val_len = php_url_decode(val, strlen(val));
- val = estrndup(val, val_len);
- if (sapi_module.input_filter(arg, var, &val, val_len, &new_val_len TSRMLS_CC)) {
- php_register_variable_safe(var, val, new_val_len, array_ptr TSRMLS_CC);
- }
- efree(val);
- } else {
- int val_len;
- unsigned int new_val_len;
-
- php_url_decode(var, strlen(var));
- val_len = 0;
- val = estrndup("", val_len);
- if (sapi_module.input_filter(arg, var, &val, val_len, &new_val_len TSRMLS_CC)) {
- php_register_variable_safe(var, val, new_val_len, array_ptr TSRMLS_CC);
- }
- efree(val);
- }
- var = php_strtok_r(NULL, separator, &strtok_buf);
- }
-
- if(arg != PARSE_COOKIE) {
- efree(separator);
- }
-
- if (free_buffer) {
- efree(res);
- }
-}
-
-void _php_import_environment_variables(zval *array_ptr TSRMLS_DC)
-{
- char buf[128];
- char **env, *p, *t = buf;
- size_t alloc_size = sizeof(buf);
- unsigned long nlen; /* ptrdiff_t is not portable */
-
- /* turn off magic_quotes while importing environment variables */
- int magic_quotes_gpc = PG(magic_quotes_gpc);
- PG(magic_quotes_gpc) = 0;
-
- for (env = environ; env != NULL && *env != NULL; env++) {
- p = strchr(*env, '=');
- if (!p) { /* malformed entry? */
- continue;
- }
- nlen = p - *env;
- if (nlen >= alloc_size) {
- alloc_size = nlen + 64;
- t = (t == buf ? emalloc(alloc_size): erealloc(t, alloc_size));
- }
- memcpy(t, *env, nlen);
- t[nlen] = '\0';
- php_register_variable(t, p+1, array_ptr TSRMLS_CC);
- }
- if (t != buf && t != NULL) {
- efree(t);
- }
- PG(magic_quotes_gpc) = magic_quotes_gpc;
-}
-
-
-zend_bool php_std_auto_global_callback(char *name, uint name_len TSRMLS_DC)
-{
- zend_printf("%s\n", name);
- return 0; /* don't rearm */
-}
-
-/* {{{ php_build_argv
- */
-static void php_build_argv(char *s, zval *track_vars_array TSRMLS_DC)
-{
- pval *arr, *argc, *tmp;
- int count = 0;
- char *ss, *space;
-
- if (! (PG(register_globals) || SG(request_info).argc ||
- PG(http_globals)[TRACK_VARS_SERVER]) ) {
- return;
- }
-
- ALLOC_ZVAL(arr);
- array_init(arr);
- arr->is_ref = 0;
- arr->refcount = 0;
-
- /* Prepare argv */
- if (SG(request_info).argc) { /* are we in cli sapi? */
- int i;
- for (i=0; i<SG(request_info).argc; i++) {
- ALLOC_ZVAL(tmp);
- Z_TYPE_P(tmp) = IS_STRING;
- Z_STRLEN_P(tmp) = strlen(SG(request_info).argv[i]);
- Z_STRVAL_P(tmp) = estrndup(SG(request_info).argv[i], Z_STRLEN_P(tmp));
- INIT_PZVAL(tmp);
- if (zend_hash_next_index_insert(Z_ARRVAL_P(arr), &tmp, sizeof(pval *), NULL)==FAILURE) {
- if (Z_TYPE_P(tmp) == IS_STRING) {
- efree(Z_STRVAL_P(tmp));
- }
- }
- }
- } else if (s && *s) {
- ss = s;
- while (ss) {
- space = strchr(ss, '+');
- if (space) {
- *space = '\0';
- }
- /* auto-type */
- ALLOC_ZVAL(tmp);
- Z_TYPE_P(tmp) = IS_STRING;
- Z_STRLEN_P(tmp) = strlen(ss);
- Z_STRVAL_P(tmp) = estrndup(ss, Z_STRLEN_P(tmp));
- INIT_PZVAL(tmp);
- count++;
- if (zend_hash_next_index_insert(Z_ARRVAL_P(arr), &tmp, sizeof(pval *), NULL)==FAILURE) {
- if (Z_TYPE_P(tmp) == IS_STRING) {
- efree(Z_STRVAL_P(tmp));
- }
- }
- if (space) {
- *space = '+';
- ss = space + 1;
- } else {
- ss = space;
- }
- }
- }
-
- /* prepare argc */
- ALLOC_ZVAL(argc);
- if (SG(request_info).argc) {
- Z_LVAL_P(argc) = SG(request_info).argc;
- } else {
- Z_LVAL_P(argc) = count;
- }
- Z_TYPE_P(argc) = IS_LONG;
- argc->is_ref = 0;
- argc->refcount = 0;
-
- if (PG(register_globals) || SG(request_info).argc) {
- arr->refcount++;
- argc->refcount++;
- zend_hash_update(&EG(symbol_table), "argv", sizeof("argv"), &arr, sizeof(zval *), NULL);
- zend_hash_add(&EG(symbol_table), "argc", sizeof("argc"), &argc, sizeof(zval *), NULL);
- }
- if (track_vars_array) {
- arr->refcount++;
- argc->refcount++;
- zend_hash_update(Z_ARRVAL_P(track_vars_array), "argv", sizeof("argv"), &arr, sizeof(pval *), NULL);
- zend_hash_update(Z_ARRVAL_P(track_vars_array), "argc", sizeof("argc"), &argc, sizeof(pval *), NULL);
- }
-}
-/* }}} */
-
-/* {{{ php_handle_special_queries
- */
-PHPAPI int php_handle_special_queries(TSRMLS_D)
-{
- if (SG(request_info).query_string && SG(request_info).query_string[0]=='='
- && PG(expose_php)) {
- if (php_info_logos(SG(request_info).query_string+1 TSRMLS_CC)) {
- return 1;
- } else if (!strcmp(SG(request_info).query_string+1, PHP_CREDITS_GUID)) {
- php_print_credits(PHP_CREDITS_ALL TSRMLS_CC);
- return 1;
- }
- }
- return 0;
-}
-/* }}} */
-
-
-
-/* {{{ php_register_server_variables
- */
-static inline void php_register_server_variables(TSRMLS_D)
-{
- zval *array_ptr=NULL;
- /* turn off magic_quotes while importing server variables */
- int magic_quotes_gpc = PG(magic_quotes_gpc);
-
- ALLOC_ZVAL(array_ptr);
- array_init(array_ptr);
- INIT_PZVAL(array_ptr);
- PG(http_globals)[TRACK_VARS_SERVER] = array_ptr;
- PG(magic_quotes_gpc) = 0;
-
- /* Server variables */
- if (sapi_module.register_server_variables) {
- sapi_module.register_server_variables(array_ptr TSRMLS_CC);
- }
-
- /* PHP Authentication support */
- if (SG(request_info).auth_user) {
- php_register_variable("PHP_AUTH_USER", SG(request_info).auth_user, array_ptr TSRMLS_CC);
- }
- if (SG(request_info).auth_password) {
- php_register_variable("PHP_AUTH_PW", SG(request_info).auth_password, array_ptr TSRMLS_CC);
- }
- PG(magic_quotes_gpc) = magic_quotes_gpc;
-}
-/* }}} */
-
-
-
-/* {{{ php_autoglobal_merge
- */
-static void php_autoglobal_merge(HashTable *dest, HashTable *src TSRMLS_DC)
-{
- zval **src_entry, **dest_entry;
- char *string_key;
- uint string_key_len;
- ulong num_key;
- HashPosition pos;
- int key_type;
-
- zend_hash_internal_pointer_reset_ex(src, &pos);
- while (zend_hash_get_current_data_ex(src, (void **)&src_entry, &pos) == SUCCESS) {
- key_type = zend_hash_get_current_key_ex(src, &string_key, &string_key_len, &num_key, 0, &pos);
- if (Z_TYPE_PP(src_entry) != IS_ARRAY
- || (key_type==HASH_KEY_IS_STRING && zend_hash_find(dest, string_key, string_key_len, (void **) &dest_entry) != SUCCESS)
- || (key_type==HASH_KEY_IS_LONG && zend_hash_index_find(dest, num_key, (void **)&dest_entry) != SUCCESS)
- || Z_TYPE_PP(dest_entry) != IS_ARRAY) {
- (*src_entry)->refcount++;
- if (key_type == HASH_KEY_IS_STRING) {
- zend_hash_update(dest, string_key, strlen(string_key)+1, src_entry, sizeof(zval *), NULL);
- } else {
- zend_hash_index_update(dest, num_key, src_entry, sizeof(zval *), NULL);
- }
- } else {
- SEPARATE_ZVAL(dest_entry);
- php_autoglobal_merge(Z_ARRVAL_PP(dest_entry), Z_ARRVAL_PP(src_entry) TSRMLS_CC);
- }
- zend_hash_move_forward_ex(src, &pos);
- }
-}
-/* }}} */
-
-
-static zend_bool php_auto_globals_create_server(char *name, uint name_len TSRMLS_DC);
-static zend_bool php_auto_globals_create_env(char *name, uint name_len TSRMLS_DC);
-static zend_bool php_auto_globals_create_request(char *name, uint name_len TSRMLS_DC);
-
-
-/* {{{ php_hash_environment
- */
-int php_hash_environment(TSRMLS_D)
-{
- char *p;
- unsigned char _gpc_flags[5] = {0, 0, 0, 0, 0};
- zval *dummy_track_vars_array = NULL;
- zend_bool initialized_dummy_track_vars_array=0;
- zend_bool jit_initialization = (PG(auto_globals_jit) && !PG(register_globals) && !PG(register_long_arrays) && !PG(register_argc_argv));
- struct auto_global_record {
- char *name;
- uint name_len;
- char *long_name;
- uint long_name_len;
- zend_bool jit_initialization;
- } auto_global_records[] = {
- { "_POST", sizeof("_POST"), "HTTP_POST_VARS", sizeof("HTTP_POST_VARS"), 0 },
- { "_GET", sizeof("_GET"), "HTTP_GET_VARS", sizeof("HTTP_GET_VARS"), 0 },
- { "_COOKIE", sizeof("_COOKIE"), "HTTP_COOKIE_VARS", sizeof("HTTP_COOKIE_VARS"), 0 },
- { "_SERVER", sizeof("_SERVER"), "HTTP_SERVER_VARS", sizeof("HTTP_SERVER_VARS"), 1 },
- { "_ENV", sizeof("_ENV"), "HTTP_ENV_VARS", sizeof("HTTP_ENV_VARS"), 1 },
- { "_FILES", sizeof("_FILES"), "HTTP_POST_FILES", sizeof("HTTP_POST_FILES"), 0 },
- };
- size_t num_track_vars = sizeof(auto_global_records)/sizeof(struct auto_global_record);
- size_t i;
-
- /* jit_initialization = 0; */
- for (i=0; i<num_track_vars; i++) {
- PG(http_globals)[i] = NULL;
- }
-
- for (p=PG(variables_order); p && *p; p++) {
- switch(*p) {
- case 'p':
- case 'P':
- if (!_gpc_flags[0] && !SG(headers_sent) && SG(request_info).request_method && !strcasecmp(SG(request_info).request_method, "POST")) {
- sapi_module.treat_data(PARSE_POST, NULL, NULL TSRMLS_CC); /* POST Data */
- _gpc_flags[0]=1;
- if (PG(register_globals)) {
- php_autoglobal_merge(&EG(symbol_table), Z_ARRVAL_P(PG(http_globals)[TRACK_VARS_POST]) TSRMLS_CC);
- }
- }
- break;
- case 'c':
- case 'C':
- if (!_gpc_flags[1]) {
- sapi_module.treat_data(PARSE_COOKIE, NULL, NULL TSRMLS_CC); /* Cookie Data */
- _gpc_flags[1]=1;
- if (PG(register_globals)) {
- php_autoglobal_merge(&EG(symbol_table), Z_ARRVAL_P(PG(http_globals)[TRACK_VARS_COOKIE]) TSRMLS_CC);
- }
- }
- break;
- case 'g':
- case 'G':
- if (!_gpc_flags[2]) {
- sapi_module.treat_data(PARSE_GET, NULL, NULL TSRMLS_CC); /* GET Data */
- _gpc_flags[2]=1;
- if (PG(register_globals)) {
- php_autoglobal_merge(&EG(symbol_table), Z_ARRVAL_P(PG(http_globals)[TRACK_VARS_GET]) TSRMLS_CC);
- }
- }
- break;
- case 'e':
- case 'E':
- if (!jit_initialization && !_gpc_flags[3]) {
- zend_auto_global_disable_jit("_ENV", sizeof("_ENV")-1 TSRMLS_CC);
- php_auto_globals_create_env("_ENV", sizeof("_ENV")-1 TSRMLS_CC);
- _gpc_flags[3]=1;
- if (PG(register_globals)) {
- php_autoglobal_merge(&EG(symbol_table), Z_ARRVAL_P(PG(http_globals)[TRACK_VARS_ENV]) TSRMLS_CC);
- }
- }
- break;
- case 's':
- case 'S':
- if (!jit_initialization && !_gpc_flags[4]) {
- zend_auto_global_disable_jit("_SERVER", sizeof("_SERVER")-1 TSRMLS_CC);
- php_register_server_variables(TSRMLS_C);
- _gpc_flags[4]=1;
- if (PG(register_globals)) {
- php_autoglobal_merge(&EG(symbol_table), Z_ARRVAL_P(PG(http_globals)[TRACK_VARS_SERVER]) TSRMLS_CC);
- }
- }
- break;
- }
- }
-
- /* argv/argc support */
- if (PG(register_argc_argv)) {
- php_build_argv(SG(request_info).query_string, PG(http_globals)[TRACK_VARS_SERVER] TSRMLS_CC);
- }
-
- for (i=0; i<num_track_vars; i++) {
- if (jit_initialization && auto_global_records[i].jit_initialization) {
- continue;
- }
- if (!PG(http_globals)[i]) {
- if (!initialized_dummy_track_vars_array) {
- ALLOC_ZVAL(dummy_track_vars_array);
- array_init(dummy_track_vars_array);
- INIT_PZVAL(dummy_track_vars_array);
- initialized_dummy_track_vars_array = 1;
- } else {
- dummy_track_vars_array->refcount++;
- }
- PG(http_globals)[i] = dummy_track_vars_array;
- }
-
- zend_hash_update(&EG(symbol_table), auto_global_records[i].name, auto_global_records[i].name_len, &PG(http_globals)[i], sizeof(zval *), NULL);
- PG(http_globals)[i]->refcount++;
- if (PG(register_long_arrays)) {
- zend_hash_update(&EG(symbol_table), auto_global_records[i].long_name, auto_global_records[i].long_name_len, &PG(http_globals)[i], sizeof(zval *), NULL);
- PG(http_globals)[i]->refcount++;
- }
- }
-
- /* Create _REQUEST */
- if (!jit_initialization) {
- zend_auto_global_disable_jit("_REQUEST", sizeof("_REQUEST")-1 TSRMLS_CC);
- php_auto_globals_create_request("_REQUEST", sizeof("_REQUEST")-1 TSRMLS_CC);
- }
-
- return SUCCESS;
-}
-/* }}} */
-
-
-static zend_bool php_auto_globals_create_server(char *name, uint name_len TSRMLS_DC)
-{
- php_register_server_variables(TSRMLS_C);
-
- zend_hash_update(&EG(symbol_table), name, name_len+1, &PG(http_globals)[TRACK_VARS_SERVER], sizeof(zval *), NULL);
- PG(http_globals)[TRACK_VARS_SERVER]->refcount++;
-
- if (PG(register_long_arrays)) {
- zend_hash_update(&EG(symbol_table), "HTTP_SERVER_VARS", sizeof("HTTP_SERVER_VARS"), &PG(http_globals)[TRACK_VARS_SERVER], sizeof(zval *), NULL);
- PG(http_globals)[TRACK_VARS_SERVER]->refcount++;
- }
-
- return 0; /* don't rearm */
-}
-
-
-static zend_bool php_auto_globals_create_env(char *name, uint name_len TSRMLS_DC)
-{
- zval *env_vars=NULL;
- ALLOC_ZVAL(env_vars);
- array_init(env_vars);
- INIT_PZVAL(env_vars);
- PG(http_globals)[TRACK_VARS_ENV] = env_vars;
-
- php_import_environment_variables(PG(http_globals)[TRACK_VARS_ENV] TSRMLS_CC);
-
- zend_hash_update(&EG(symbol_table), name, name_len+1, &PG(http_globals)[TRACK_VARS_ENV], sizeof(zval *), NULL);
- PG(http_globals)[TRACK_VARS_ENV]->refcount++;
-
- if (PG(register_long_arrays)) {
- zend_hash_update(&EG(symbol_table), "HTTP_ENV_VARS", sizeof("HTTP_ENV_VARS"), &PG(http_globals)[TRACK_VARS_ENV], sizeof(zval *), NULL);
- PG(http_globals)[TRACK_VARS_ENV]->refcount++;
- }
-
- return 0; /* don't rearm */
-}
-
-
-static zend_bool php_auto_globals_create_request(char *name, uint name_len TSRMLS_DC)
-{
- zval *form_variables;
- unsigned char _gpc_flags[3] = {0, 0, 0};
- char *p;
-
- ALLOC_ZVAL(form_variables);
- array_init(form_variables);
- INIT_PZVAL(form_variables);
-
- for (p=PG(variables_order); p && *p; p++) {
- switch (*p) {
- case 'g':
- case 'G':
- if (!_gpc_flags[0]) {
- php_autoglobal_merge(Z_ARRVAL_P(form_variables), Z_ARRVAL_P(PG(http_globals)[TRACK_VARS_GET]) TSRMLS_CC);
- _gpc_flags[0] = 1;
- }
- break;
- case 'p':
- case 'P':
- if (!_gpc_flags[1]) {
- php_autoglobal_merge(Z_ARRVAL_P(form_variables), Z_ARRVAL_P(PG(http_globals)[TRACK_VARS_POST]) TSRMLS_CC);
- _gpc_flags[1] = 1;
- }
- break;
- case 'c':
- case 'C':
- if (!_gpc_flags[2]) {
- php_autoglobal_merge(Z_ARRVAL_P(form_variables), Z_ARRVAL_P(PG(http_globals)[TRACK_VARS_COOKIE]) TSRMLS_CC);
- _gpc_flags[2] = 1;
- }
- break;
- }
- }
-
- zend_hash_update(&EG(symbol_table), "_REQUEST", sizeof("_REQUEST"), &form_variables, sizeof(zval *), NULL);
- return 0;
-}
-
-
-void php_startup_auto_globals(TSRMLS_D)
-{
- zend_register_auto_global("_GET", sizeof("_GET")-1, NULL TSRMLS_CC);
- zend_register_auto_global("_POST", sizeof("_POST")-1, NULL TSRMLS_CC);
- zend_register_auto_global("_COOKIE", sizeof("_COOKIE")-1, NULL TSRMLS_CC);
- zend_register_auto_global("_SERVER", sizeof("_SERVER")-1, php_auto_globals_create_server TSRMLS_CC);
- zend_register_auto_global("_ENV", sizeof("_ENV")-1, php_auto_globals_create_env TSRMLS_CC);
- zend_register_auto_global("_REQUEST", sizeof("_REQUEST")-1, php_auto_globals_create_request TSRMLS_CC);
- zend_register_auto_global("_FILES", sizeof("_FILES")-1, NULL TSRMLS_CC);
-}
-
-/*
- * 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/main/php_variables.h b/main/php_variables.h
deleted file mode 100644
index 15ed91ff20..0000000000
--- a/main/php_variables.h
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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. |
- +----------------------------------------------------------------------+
- | Authors: Rasmus Lerdorf <rasmus@lerdorf.on.ca> |
- | Zeev Suraski <zeev@zend.com> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifndef PHP_VARIABLES_H
-#define PHP_VARIABLES_H
-
-#include "php.h"
-#include "SAPI.h"
-
-#define PARSE_POST 0
-#define PARSE_GET 1
-#define PARSE_COOKIE 2
-#define PARSE_STRING 3
-
-BEGIN_EXTERN_C()
-void php_treat_data(int arg, char *str, zval* destArray TSRMLS_DC);
-void php_startup_auto_globals(TSRMLS_D);
-extern PHPAPI void (*php_import_environment_variables)(zval *array_ptr TSRMLS_DC);
-PHPAPI void php_register_variable(char *var, char *val, pval *track_vars_array TSRMLS_DC);
-/* binary-safe version */
-PHPAPI void php_register_variable_safe(char *var, char *val, int val_len, pval *track_vars_array TSRMLS_DC);
-PHPAPI void php_register_variable_ex(char *var, zval *val, pval *track_vars_array TSRMLS_DC);
-
-int php_hash_environment(TSRMLS_D);
-END_EXTERN_C()
-
-#define NUM_TRACK_VARS 6
-
-#endif /* PHP_VARIABLES_H */
diff --git a/main/php_version.h b/main/php_version.h
deleted file mode 100644
index eefa06de77..0000000000
--- a/main/php_version.h
+++ /dev/null
@@ -1,7 +0,0 @@
-/* automatically generated by configure */
-/* edit configure.in to change version number */
-#define PHP_MAJOR_VERSION 5
-#define PHP_MINOR_VERSION 1
-#define PHP_RELEASE_VERSION 0
-#define PHP_EXTRA_VERSION "-dev"
-#define PHP_VERSION "5.1.0-dev"
diff --git a/main/reentrancy.c b/main/reentrancy.c
deleted file mode 100644
index 8d7a7ff2bb..0000000000
--- a/main/reentrancy.c
+++ /dev/null
@@ -1,504 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Sascha Schumann <sascha@schumann.cx> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-#include <sys/types.h>
-#include <string.h>
-#include <errno.h>
-#ifdef HAVE_DIRENT_H
-#include <dirent.h>
-#endif
-
-#ifdef PHP_WIN32
-#include "win32/readdir.h"
-#endif
-
-#if defined(NETWARE) && !(NEW_LIBC)
-/*#include <ws2nlm.h>*/
-#include <sys/socket.h>
-#endif
-
-#include "php_reentrancy.h"
-#include "ext/standard/php_rand.h" /* for PHP_RAND_MAX */
-
-enum {
- LOCALTIME_R,
- CTIME_R,
- ASCTIME_R,
- GMTIME_R,
- READDIR_R,
- NUMBER_OF_LOCKS
-};
-
-#if defined(PHP_NEED_REENTRANCY)
-
-#include <TSRM.h>
-
-static MUTEX_T reentrant_locks[NUMBER_OF_LOCKS];
-
-#define local_lock(x) tsrm_mutex_lock(reentrant_locks[x])
-#define local_unlock(x) tsrm_mutex_unlock(reentrant_locks[x])
-
-#else
-
-#define local_lock(x)
-#define local_unlock(x)
-
-#endif
-
-#if defined(PHP_IRIX_TIME_R)
-
-#define HAVE_CTIME_R 1
-#define HAVE_ASCTIME_R 1
-
-PHPAPI char *php_ctime_r(const time_t *clock, char *buf)
-{
- if (ctime_r(clock, buf, 26) == buf)
- return (buf);
- return (NULL);
-}
-
-PHPAPI char *php_asctime_r(const struct tm *tm, char *buf)
-{
- if (asctime_r(tm, buf, 26) == buf)
- return (buf);
- return (NULL);
-}
-
-#endif
-
-#if defined(PHP_HPUX_TIME_R)
-
-#define HAVE_LOCALTIME_R 1
-#define HAVE_CTIME_R 1
-#define HAVE_ASCTIME_R 1
-#define HAVE_GMTIME_R 1
-
-PHPAPI struct tm *php_localtime_r(const time_t *const timep, struct tm *p_tm)
-{
- if (localtime_r(timep, p_tm) == 0)
- return (p_tm);
- return (NULL);
-}
-
-PHPAPI char *php_ctime_r(const time_t *clock, char *buf)
-{
- if (ctime_r(clock, buf, 26) != -1)
- return (buf);
- return (NULL);
-}
-
-PHPAPI char *php_asctime_r(const struct tm *tm, char *buf)
-{
- if (asctime_r(tm, buf, 26) != -1)
- return (buf);
- return (NULL);
-}
-
-PHPAPI struct tm *php_gmtime_r(const time_t *const timep, struct tm *p_tm)
-{
- if (gmtime_r(timep, p_tm) == 0)
- return (p_tm);
- return (NULL);
-}
-
-#endif
-
-#if defined(NETWARE)
-/*
- Re-entrant versions of functions seem to be better for loading NLMs in different address space.
- Since we have them now in LibC, we might as well make use of them.
-*/
-
-#define HAVE_LOCALTIME_R 1
-#define HAVE_CTIME_R 1
-#define HAVE_ASCTIME_R 1
-#define HAVE_GMTIME_R 1
-
-PHPAPI struct tm *php_localtime_r(const time_t *const timep, struct tm *p_tm)
-{
- /* Modified according to LibC definition */
- if (localtime_r(timep, p_tm) != NULL)
- return (p_tm);
- return (NULL);
-}
-
-PHPAPI char *php_ctime_r(const time_t *clock, char *buf)
-{
- /* Modified according to LibC definition */
- if (ctime_r(clock, buf) != NULL)
- return (buf);
- return (NULL);
-}
-
-PHPAPI char *php_asctime_r(const struct tm *tm, char *buf)
-{
- /* Modified according to LibC definition */
- if (asctime_r(tm, buf) != NULL)
- return (buf);
- return (NULL);
-}
-
-PHPAPI struct tm *php_gmtime_r(const time_t *const timep, struct tm *p_tm)
-{
- /* Modified according to LibC definition */
- if (gmtime_r(timep, p_tm) != NULL)
- return (p_tm);
- return (NULL);
-}
-
-#endif /* NETWARE */
-
-#if defined(__BEOS__)
-
-PHPAPI struct tm *php_gmtime_r(const time_t *const timep, struct tm *p_tm)
-{
- /* Modified according to LibC definition */
- if (((struct tm*)gmtime_r(timep, p_tm)) == p_tm)
- return (p_tm);
- return (NULL);
-}
-
-#endif /* BEOS */
-
-#if !defined(HAVE_POSIX_READDIR_R)
-
-PHPAPI int php_readdir_r(DIR *dirp, struct dirent *entry,
- struct dirent **result)
-{
-#if defined(HAVE_OLD_READDIR_R)
- int ret = 0;
-
- /* We cannot rely on the return value of readdir_r
- as it differs between various platforms
- (HPUX returns 0 on success whereas Solaris returns non-zero)
- */
- entry->d_name[0] = '\0';
- readdir_r(dirp, entry);
-
- if (entry->d_name[0] == '\0') {
- *result = NULL;
- ret = errno;
- } else {
- *result = entry;
- }
- return ret;
-#else
- struct dirent *ptr;
- int ret = 0;
-
- local_lock(READDIR_R);
-
- errno = 0;
-
- ptr = readdir(dirp);
-
- if (!ptr && errno != 0)
- ret = errno;
-
- if (ptr)
- memcpy(entry, ptr, sizeof(*ptr));
-
- *result = ptr;
-
- local_unlock(READDIR_R);
-
- return ret;
-#endif
-}
-
-#endif
-
-#if !defined(HAVE_LOCALTIME_R) && defined(HAVE_LOCALTIME)
-
-PHPAPI struct tm *php_localtime_r(const time_t *const timep, struct tm *p_tm)
-{
- struct tm *tmp;
-
- local_lock(LOCALTIME_R);
-
- tmp = localtime(timep);
- if (tmp) {
- memcpy(p_tm, tmp, sizeof(struct tm));
- tmp = p_tm;
- }
-
- local_unlock(LOCALTIME_R);
-
- return tmp;
-}
-
-#endif
-
-#if !defined(HAVE_CTIME_R) && defined(HAVE_CTIME)
-
-PHPAPI char *php_ctime_r(const time_t *clock, char *buf)
-{
- char *tmp;
-
- local_lock(CTIME_R);
-
- tmp = ctime(clock);
- strcpy(buf, tmp);
-
- local_unlock(CTIME_R);
-
- return buf;
-}
-
-#endif
-
-#if !defined(HAVE_ASCTIME_R) && defined(HAVE_ASCTIME)
-
-PHPAPI char *php_asctime_r(const struct tm *tm, char *buf)
-{
- char *tmp;
-
- local_lock(ASCTIME_R);
-
- tmp = asctime(tm);
- strcpy(buf, tmp);
-
- local_unlock(ASCTIME_R);
-
- return buf;
-}
-
-#endif
-
-#if !defined(HAVE_GMTIME_R) && defined(HAVE_GMTIME)
-
-PHPAPI struct tm *php_gmtime_r(const time_t *const timep, struct tm *p_tm)
-{
- struct tm *tmp;
-
- local_lock(GMTIME_R);
-
- tmp = gmtime(timep);
- if (tmp) {
- memcpy(p_tm, tmp, sizeof(struct tm));
- tmp = p_tm;
- }
-
- local_unlock(GMTIME_R);
-
- return tmp;
-}
-
-#endif
-
-#if defined(PHP_NEED_REENTRANCY)
-
-void reentrancy_startup(void)
-{
- int i;
-
- for (i = 0; i < NUMBER_OF_LOCKS; i++) {
- reentrant_locks[i] = tsrm_mutex_alloc();
- }
-}
-
-void reentrancy_shutdown(void)
-{
- int i;
-
- for (i = 0; i < NUMBER_OF_LOCKS; i++) {
- tsrm_mutex_free(reentrant_locks[i]);
- }
-}
-
-#endif
-
-#ifndef HAVE_RAND_R
-
-/*-
- * Copyright (c) 1990, 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. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement:
- * This product includes software developed by the University of
- * California, Berkeley and its contributors.
- * 4. 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.
- *
- * Posix rand_r function added May 1999 by Wes Peters <wes@softweyr.com>.
- */
-
-#include <sys/types.h>
-#include <stdlib.h>
-
-static int
-do_rand(unsigned long *ctx)
-{
- return ((*ctx = *ctx * 1103515245 + 12345) % ((u_long)PHP_RAND_MAX + 1));
-}
-
-
-PHPAPI int
-php_rand_r(unsigned int *ctx)
-{
- u_long val = (u_long) *ctx;
- *ctx = do_rand(&val);
- return (int) *ctx;
-}
-
-#endif
-
-
-#ifndef HAVE_STRTOK_R
-
-/*
- * Copyright (c) 1998 Softweyr LLC. All rights reserved.
- *
- * strtok_r, from Berkeley strtok
- * Oct 13, 1998 by Wes Peters <wes@softweyr.com>
- *
- * Copyright (c) 1988, 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
- * notices, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- * notices, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement:
- *
- * This product includes software developed by Softweyr LLC, the
- * University of California, Berkeley, and its contributors.
- *
- * 4. 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 SOFTWEYR LLC, 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 SOFTWEYR LLC, 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 <stddef.h>
-
-PHPAPI char *
-php_strtok_r(char *s, const char *delim, char **last)
-{
- char *spanp;
- int c, sc;
- char *tok;
-
- if (s == NULL && (s = *last) == NULL)
- {
- return NULL;
- }
-
- /*
- * Skip (span) leading delimiters (s += strspn(s, delim), sort of).
- */
-cont:
- c = *s++;
- for (spanp = (char *)delim; (sc = *spanp++) != 0; )
- {
- if (c == sc)
- {
- goto cont;
- }
- }
-
- if (c == 0) /* no non-delimiter characters */
- {
- *last = NULL;
- return NULL;
- }
- tok = s - 1;
-
- /*
- * Scan token (scan for delimiters: s += strcspn(s, delim), sort of).
- * Note that delim must have one NUL; we stop if we see that, too.
- */
- for (;;)
- {
- c = *s++;
- spanp = (char *)delim;
- do
- {
- if ((sc = *spanp++) == c)
- {
- if (c == 0)
- {
- s = NULL;
- }
- else
- {
- char *w = s - 1;
- *w = '\0';
- }
- *last = s;
- return tok;
- }
- }
- while (sc != 0);
- }
- /* NOTREACHED */
-}
-
-#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/main/rfc1867.c b/main/rfc1867.c
deleted file mode 100644
index 3843ff4710..0000000000
--- a/main/rfc1867.c
+++ /dev/null
@@ -1,1205 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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. |
- +----------------------------------------------------------------------+
- | Authors: Rasmus Lerdorf <rasmus@php.net> |
- | Jani Taskinen <sniper@php.net> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-/*
- * This product includes software developed by the Apache Group
- * for use in the Apache HTTP server project (http://www.apache.org/).
- *
- */
-
-#include <stdio.h>
-#include "php.h"
-#include "php_open_temporary_file.h"
-#include "zend_globals.h"
-#include "php_globals.h"
-#include "php_variables.h"
-#include "rfc1867.h"
-
-#define DEBUG_FILE_UPLOAD ZEND_DEBUG
-
-#if HAVE_MBSTRING && !defined(COMPILE_DL_MBSTRING)
-#include "ext/mbstring/mbstring.h"
-
-static void safe_php_register_variable(char *var, char *strval, zval *track_vars_array, zend_bool override_protection TSRMLS_DC);
-
-#define SAFE_RETURN { \
- php_mb_flush_gpc_variables(num_vars, val_list, len_list, array_ptr TSRMLS_CC); \
- if (lbuf) efree(lbuf); \
- if (abuf) efree(abuf); \
- if (array_index) efree(array_index); \
- zend_hash_destroy(&PG(rfc1867_protected_variables)); \
- zend_llist_destroy(&header); \
- if (mbuff->boundary_next) efree(mbuff->boundary_next); \
- if (mbuff->boundary) efree(mbuff->boundary); \
- if (mbuff->buffer) efree(mbuff->buffer); \
- if (mbuff) efree(mbuff); \
- return; }
-
-void php_mb_flush_gpc_variables(int num_vars, char **val_list, int *len_list, zval *array_ptr TSRMLS_DC)
-{
- int i;
- if (php_mb_encoding_translation(TSRMLS_C)) {
- if (num_vars > 0 &&
- php_mb_gpc_encoding_detector(val_list, len_list, num_vars, NULL TSRMLS_CC) == SUCCESS) {
- php_mb_gpc_encoding_converter(val_list, len_list, num_vars, NULL, NULL TSRMLS_CC);
- }
- for (i=0; i<num_vars; i+=2){
- safe_php_register_variable(val_list[i], val_list[i+1], array_ptr, 0 TSRMLS_CC);
- efree(val_list[i]);
- efree(val_list[i+1]);
- }
- efree(val_list);
- efree(len_list);
- }
-}
-
-void php_mb_gpc_realloc_buffer(char ***pval_list, int **plen_list, int *num_vars_max, int inc TSRMLS_DC)
-{
- /* allow only even increments */
- if (inc & 1) {
- inc++;
- }
- (*num_vars_max) += inc;
- *pval_list = (char **)erealloc(*pval_list, (*num_vars_max+2)*sizeof(char *));
- *plen_list = (int *)erealloc(*plen_list, (*num_vars_max+2)*sizeof(int));
-}
-
-void php_mb_gpc_stack_variable(char *param, char *value, char ***pval_list, int **plen_list, int *num_vars, int *num_vars_max TSRMLS_DC)
-{
- char **val_list=*pval_list;
- int *len_list=*plen_list;
-
- if (*num_vars>=*num_vars_max){
- php_mb_gpc_realloc_buffer(pval_list, plen_list, num_vars_max,
- 16 TSRMLS_CC);
- /* in case realloc relocated the buffer */
- val_list = *pval_list;
- len_list = *plen_list;
- }
-
- val_list[*num_vars] = (char *)estrdup(param);
- len_list[*num_vars] = strlen(param);
- (*num_vars)++;
- val_list[*num_vars] = (char *)estrdup(value);
- len_list[*num_vars] = strlen(value);
- (*num_vars)++;
-}
-
-#else
-
-#define SAFE_RETURN { \
- if (lbuf) efree(lbuf); \
- if (abuf) efree(abuf); \
- if (array_index) efree(array_index); \
- zend_hash_destroy(&PG(rfc1867_protected_variables)); \
- zend_llist_destroy(&header); \
- if (mbuff->boundary_next) efree(mbuff->boundary_next); \
- if (mbuff->boundary) efree(mbuff->boundary); \
- if (mbuff->buffer) efree(mbuff->buffer); \
- if (mbuff) efree(mbuff); \
- return; }
-#endif
-
-/* The longest property name we use in an uploaded file array */
-#define MAX_SIZE_OF_INDEX sizeof("[tmp_name]")
-
-/* The longest anonymous name */
-#define MAX_SIZE_ANONNAME 33
-
-/* Errors */
-#define UPLOAD_ERROR_OK 0 /* File upload succesful */
-#define UPLOAD_ERROR_A 1 /* Uploaded file exceeded upload_max_filesize */
-#define UPLOAD_ERROR_B 2 /* Uploaded file exceeded MAX_FILE_SIZE */
-#define UPLOAD_ERROR_C 3 /* Partially uploaded */
-#define UPLOAD_ERROR_D 4 /* No file uploaded */
-
-void php_rfc1867_register_constants(TSRMLS_D)
-{
- REGISTER_MAIN_LONG_CONSTANT("UPLOAD_ERR_OK", UPLOAD_ERROR_OK, CONST_CS | CONST_PERSISTENT);
- REGISTER_MAIN_LONG_CONSTANT("UPLOAD_ERR_INI_SIZE", UPLOAD_ERROR_A, CONST_CS | CONST_PERSISTENT);
- REGISTER_MAIN_LONG_CONSTANT("UPLOAD_ERR_FORM_SIZE", UPLOAD_ERROR_B, CONST_CS | CONST_PERSISTENT);
- REGISTER_MAIN_LONG_CONSTANT("UPLOAD_ERR_PARTIAL", UPLOAD_ERROR_C, CONST_CS | CONST_PERSISTENT);
- REGISTER_MAIN_LONG_CONSTANT("UPLOAD_ERR_NO_FILE", UPLOAD_ERROR_D, CONST_CS | CONST_PERSISTENT);
-}
-
-static void normalize_protected_variable(char *varname TSRMLS_DC)
-{
- char *s=varname, *index=NULL, *indexend=NULL, *p;
-
- /* overjump leading space */
- while (*s == ' ') {
- s++;
- }
-
- /* and remove it */
- if (s != varname) {
- memmove(varname, s, strlen(s)+1);
- }
-
- for (p=varname; *p && *p != '['; p++) {
- switch(*p) {
- case ' ':
- case '.':
- *p='_';
- break;
- }
- }
-
- /* find index */
- index = strchr(varname, '[');
- if (index) {
- index++;
- s=index;
- } else {
- return;
- }
-
- /* done? */
- while (index) {
-
- while (*index == ' ' || *index == '\r' || *index == '\n' || *index=='\t') {
- index++;
- }
- indexend = strchr(index, ']');
- indexend = indexend ? indexend + 1 : index + strlen(index);
-
- if (s != index) {
- memmove(s, index, strlen(index)+1);
- s += indexend-index;
- } else {
- s = indexend;
- }
-
- if (*s == '[') {
- s++;
- index = s;
- } else {
- index = NULL;
- }
- }
- *s++='\0';
-}
-
-
-static void add_protected_variable(char *varname TSRMLS_DC)
-{
- int dummy=1;
-
- normalize_protected_variable(varname TSRMLS_CC);
- zend_hash_add(&PG(rfc1867_protected_variables), varname, strlen(varname)+1, &dummy, sizeof(int), NULL);
-}
-
-
-static zend_bool is_protected_variable(char *varname TSRMLS_DC)
-{
- normalize_protected_variable(varname TSRMLS_CC);
- return zend_hash_exists(&PG(rfc1867_protected_variables), varname, strlen(varname)+1);
-}
-
-
-static void safe_php_register_variable(char *var, char *strval, zval *track_vars_array, zend_bool override_protection TSRMLS_DC)
-{
- if (override_protection || !is_protected_variable(var TSRMLS_CC)) {
- php_register_variable(var, strval, track_vars_array TSRMLS_CC);
- }
-}
-
-
-static void safe_php_register_variable_ex(char *var, zval *val, zval *track_vars_array, zend_bool override_protection TSRMLS_DC)
-{
- if (override_protection || !is_protected_variable(var TSRMLS_CC)) {
- php_register_variable_ex(var, val, track_vars_array TSRMLS_CC);
- }
-}
-
-
-static void register_http_post_files_variable(char *strvar, char *val, zval *http_post_files, zend_bool override_protection TSRMLS_DC)
-{
- int register_globals = PG(register_globals);
-
- PG(register_globals) = 0;
- safe_php_register_variable(strvar, val, http_post_files, override_protection TSRMLS_CC);
- PG(register_globals) = register_globals;
-}
-
-
-static void register_http_post_files_variable_ex(char *var, zval *val, zval *http_post_files, zend_bool override_protection TSRMLS_DC)
-{
- int register_globals = PG(register_globals);
-
- PG(register_globals) = 0;
- safe_php_register_variable_ex(var, val, http_post_files, override_protection TSRMLS_CC);
- PG(register_globals) = register_globals;
-}
-
-
-static int unlink_filename(char **filename TSRMLS_DC)
-{
- VCWD_UNLINK(*filename);
- return 0;
-}
-
-
-void destroy_uploaded_files_hash(TSRMLS_D)
-{
- zend_hash_apply(SG(rfc1867_uploaded_files), (apply_func_t) unlink_filename TSRMLS_CC);
- zend_hash_destroy(SG(rfc1867_uploaded_files));
- FREE_HASHTABLE(SG(rfc1867_uploaded_files));
-}
-
-
-/*
- * Following code is based on apache_multipart_buffer.c from libapreq-0.33 package.
- *
- */
-
-#define FILLUNIT (1024 * 5)
-
-typedef struct {
-
- /* read buffer */
- char *buffer;
- char *buf_begin;
- int bufsize;
- int bytes_in_buffer;
-
- /* boundary info */
- char *boundary;
- char *boundary_next;
- int boundary_next_len;
-
-} multipart_buffer;
-
-
-typedef struct {
- char *key;
- char *value;
-} mime_header_entry;
-
-
-/*
- fill up the buffer with client data.
- returns number of bytes added to buffer.
-*/
-static int fill_buffer(multipart_buffer *self TSRMLS_DC)
-{
- int bytes_to_read, total_read = 0, actual_read = 0;
-
- /* shift the existing data if necessary */
- if (self->bytes_in_buffer > 0 && self->buf_begin != self->buffer) {
- memmove(self->buffer, self->buf_begin, self->bytes_in_buffer);
- }
-
- self->buf_begin = self->buffer;
-
- /* calculate the free space in the buffer */
- bytes_to_read = self->bufsize - self->bytes_in_buffer;
-
- /* read the required number of bytes */
- while (bytes_to_read > 0) {
-
- char *buf = self->buffer + self->bytes_in_buffer;
-
- actual_read = sapi_module.read_post(buf, bytes_to_read TSRMLS_CC);
-
- /* update the buffer length */
- if (actual_read > 0) {
- self->bytes_in_buffer += actual_read;
- SG(read_post_bytes) += actual_read;
- total_read += actual_read;
- bytes_to_read -= actual_read;
- } else {
- break;
- }
- }
-
- return total_read;
-}
-
-
-/* eof if we are out of bytes, or if we hit the final boundary */
-static int multipart_buffer_eof(multipart_buffer *self TSRMLS_DC)
-{
- if ( (self->bytes_in_buffer == 0 && fill_buffer(self TSRMLS_CC) < 1) ) {
- return 1;
- } else {
- return 0;
- }
-}
-
-
-/* create new multipart_buffer structure */
-static multipart_buffer *multipart_buffer_new(char *boundary, int boundary_len)
-{
- multipart_buffer *self = (multipart_buffer *) ecalloc(1, sizeof(multipart_buffer));
-
- int minsize = boundary_len + 6;
- if (minsize < FILLUNIT) minsize = FILLUNIT;
-
- self->buffer = (char *) ecalloc(1, minsize + 1);
- self->bufsize = minsize;
-
- self->boundary = (char *) ecalloc(1, boundary_len + 3);
- sprintf(self->boundary, "--%s", boundary);
-
- self->boundary_next = (char *) ecalloc(1, boundary_len + 4);
- sprintf(self->boundary_next, "\n--%s", boundary);
- self->boundary_next_len = boundary_len + 3;
-
- self->buf_begin = self->buffer;
- self->bytes_in_buffer = 0;
-
- return self;
-}
-
-
-/*
- gets the next CRLF terminated line from the input buffer.
- if it doesn't find a CRLF, and the buffer isn't completely full, returns
- NULL; otherwise, returns the beginning of the null-terminated line,
- minus the CRLF.
-
- note that we really just look for LF terminated lines. this works
- around a bug in internet explorer for the macintosh which sends mime
- boundaries that are only LF terminated when you use an image submit
- button in a multipart/form-data form.
- */
-static char *next_line(multipart_buffer *self)
-{
- /* look for LF in the data */
- char* line = self->buf_begin;
- char* ptr = memchr(self->buf_begin, '\n', self->bytes_in_buffer);
-
- if (ptr) { /* LF found */
-
- /* terminate the string, remove CRLF */
- if ((ptr - line) > 0 && *(ptr-1) == '\r') {
- *(ptr-1) = 0;
- } else {
- *ptr = 0;
- }
-
- /* bump the pointer */
- self->buf_begin = ptr + 1;
- self->bytes_in_buffer -= (self->buf_begin - line);
-
- } else { /* no LF found */
-
- /* buffer isn't completely full, fail */
- if (self->bytes_in_buffer < self->bufsize) {
- return NULL;
- }
- /* return entire buffer as a partial line */
- line[self->bufsize] = 0;
- self->buf_begin = ptr;
- self->bytes_in_buffer = 0;
- }
-
- return line;
-}
-
-
-/* returns the next CRLF terminated line from the client */
-static char *get_line(multipart_buffer *self TSRMLS_DC)
-{
- char* ptr = next_line(self);
-
- if (!ptr) {
- fill_buffer(self TSRMLS_CC);
- ptr = next_line(self);
- }
-
- return ptr;
-}
-
-
-/* Free header entry */
-static void php_free_hdr_entry(mime_header_entry *h)
-{
- if (h->key) {
- efree(h->key);
- }
- if (h->value) {
- efree(h->value);
- }
-}
-
-
-/* finds a boundary */
-static int find_boundary(multipart_buffer *self, char *boundary TSRMLS_DC)
-{
- char *line;
-
- /* loop thru lines */
- while( (line = get_line(self TSRMLS_CC)) )
- {
- /* finished if we found the boundary */
- if (!strcmp(line, boundary)) {
- return 1;
- }
- }
-
- /* didn't find the boundary */
- return 0;
-}
-
-
-/* parse headers */
-static int multipart_buffer_headers(multipart_buffer *self, zend_llist *header TSRMLS_DC)
-{
- char *line;
- mime_header_entry prev_entry, entry;
- int prev_len, cur_len;
-
- /* didn't find boundary, abort */
- if (!find_boundary(self, self->boundary TSRMLS_CC)) {
- return 0;
- }
-
- /* get lines of text, or CRLF_CRLF */
-
- while( (line = get_line(self TSRMLS_CC)) && strlen(line) > 0 )
- {
- /* add header to table */
-
- char *key = line;
- char *value = NULL;
-
- /* space in the beginning means same header */
- if (!isspace(line[0])) {
- value = strchr(line, ':');
- }
-
- if (value) {
- *value = 0;
- do { value++; } while(isspace(*value));
-
- entry.value = estrdup(value);
- entry.key = estrdup(key);
-
- } else if (zend_llist_count(header)) { /* If no ':' on the line, add to previous line */
-
- prev_len = strlen(prev_entry.value);
- cur_len = strlen(line);
-
- entry.value = emalloc(prev_len + cur_len + 1);
- memcpy(entry.value, prev_entry.value, prev_len);
- memcpy(entry.value + prev_len, line, cur_len);
- entry.value[cur_len + prev_len] = '\0';
-
- entry.key = estrdup(prev_entry.key);
-
- zend_llist_remove_tail(header);
- } else {
- continue;
- }
-
- zend_llist_add_element(header, &entry);
- prev_entry = entry;
- }
-
- return 1;
-}
-
-
-static char *php_mime_get_hdr_value(zend_llist header, char *key)
-{
- mime_header_entry *entry;
-
- if (key == NULL) {
- return NULL;
- }
-
- entry = zend_llist_get_first(&header);
- while (entry) {
- if (!strcasecmp(entry->key, key)) {
- return entry->value;
- }
- entry = zend_llist_get_next(&header);
- }
-
- return NULL;
-}
-
-
-static char *php_ap_getword(char **line, char stop)
-{
- char *pos = *line, quote;
- char *res;
-
- while (*pos && *pos != stop) {
-
- if ((quote = *pos) == '"' || quote == '\'') {
- ++pos;
- while (*pos && *pos != quote) {
- if (*pos == '\\' && pos[1] && pos[1] == quote) {
- pos += 2;
- } else {
- ++pos;
- }
- }
- if (*pos) {
- ++pos;
- }
- } else ++pos;
-
- }
- if (*pos == '\0') {
- res = estrdup(*line);
- *line += strlen(*line);
- return res;
- }
-
- res = estrndup(*line, pos - *line);
-
- while (*pos == stop) {
- ++pos;
- }
-
- *line = pos;
- return res;
-}
-
-
-static char *substring_conf(char *start, int len, char quote TSRMLS_DC)
-{
- char *result = emalloc(len + 2);
- char *resp = result;
- int i;
-
- for (i = 0; i < len; ++i) {
- if (start[i] == '\\' && (start[i + 1] == '\\' || (quote && start[i + 1] == quote))) {
- *resp++ = start[++i];
- } else {
-#if HAVE_MBSTRING && !defined(COMPILE_DL_MBSTRING)
- if (php_mb_encoding_translation(TSRMLS_C)) {
- size_t j = php_mb_gpc_mbchar_bytes(start+i TSRMLS_CC);
- while (j-- > 0 && i < len) {
- *resp++ = start[i++];
- }
- --i;
- } else {
- *resp++ = start[i];
- }
-#else
- *resp++ = start[i];
-#endif
- }
- }
-
- *resp++ = '\0';
- return result;
-}
-
-
-static char *php_ap_getword_conf(char **line TSRMLS_DC)
-{
- char *str = *line, *strend, *res, quote;
-
-#if HAVE_MBSTRING && !defined(COMPILE_DL_MBSTRING)
- if (php_mb_encoding_translation(TSRMLS_C)) {
- int len=strlen(str);
- php_mb_gpc_encoding_detector(&str, &len, 1, NULL TSRMLS_CC);
- }
-#endif
-
- while (*str && isspace(*str)) {
- ++str;
- }
-
- if (!*str) {
- *line = str;
- return estrdup("");
- }
-
- if ((quote = *str) == '"' || quote == '\'') {
- strend = str + 1;
-look_for_quote:
- while (*strend && *strend != quote) {
- if (*strend == '\\' && strend[1] && strend[1] == quote) {
- strend += 2;
- } else {
- ++strend;
- }
- }
- if (*strend && *strend == quote) {
- char p = *(strend + 1);
- if (p != '\r' && p != '\n' && p != '\0') {
- strend++;
- goto look_for_quote;
- }
- }
-
- res = substring_conf(str + 1, strend - str - 1, quote TSRMLS_CC);
-
- if (*strend == quote) {
- ++strend;
- }
-
- } else {
-
- strend = str;
- while (*strend && !isspace(*strend)) {
- ++strend;
- }
- res = substring_conf(str, strend - str, 0 TSRMLS_CC);
- }
-
- while (*strend && isspace(*strend)) {
- ++strend;
- }
-
- *line = strend;
- return res;
-}
-
-
-/*
- search for a string in a fixed-length byte string.
- if partial is true, partial matches are allowed at the end of the buffer.
- returns NULL if not found, or a pointer to the start of the first match.
-*/
-static void *php_ap_memstr(char *haystack, int haystacklen, char *needle, int needlen, int partial)
-{
- int len = haystacklen;
- char *ptr = haystack;
-
- /* iterate through first character matches */
- while( (ptr = memchr(ptr, needle[0], len)) ) {
-
- /* calculate length after match */
- len = haystacklen - (ptr - (char *)haystack);
-
- /* done if matches up to capacity of buffer */
- if (memcmp(needle, ptr, needlen < len ? needlen : len) == 0 && (partial || len >= needlen)) {
- break;
- }
-
- /* next character */
- ptr++; len--;
- }
-
- return ptr;
-}
-
-
-/* read until a boundary condition */
-static int multipart_buffer_read(multipart_buffer *self, char *buf, int bytes TSRMLS_DC)
-{
- int len, max;
- char *bound;
-
- /* fill buffer if needed */
- if (bytes > self->bytes_in_buffer) {
- fill_buffer(self TSRMLS_CC);
- }
-
- /* look for a potential boundary match, only read data up to that point */
- if ((bound = php_ap_memstr(self->buf_begin, self->bytes_in_buffer, self->boundary_next, self->boundary_next_len, 1))) {
- max = bound - self->buf_begin;
- } else {
- max = self->bytes_in_buffer;
- }
-
- /* maximum number of bytes we are reading */
- len = max < bytes-1 ? max : bytes-1;
-
- /* if we read any data... */
- if (len > 0) {
-
- /* copy the data */
- memcpy(buf, self->buf_begin, len);
- buf[len] = 0;
-
- if (bound && len > 0 && buf[len-1] == '\r') {
- buf[--len] = 0;
- }
-
- /* update the buffer */
- self->bytes_in_buffer -= len;
- self->buf_begin += len;
- }
-
- return len;
-}
-
-
-/*
- XXX: this is horrible memory-usage-wise, but we only expect
- to do this on small pieces of form data.
-*/
-static char *multipart_buffer_read_body(multipart_buffer *self TSRMLS_DC)
-{
- char buf[FILLUNIT], *out=NULL;
- int total_bytes=0, read_bytes=0;
-
- while((read_bytes = multipart_buffer_read(self, buf, sizeof(buf) TSRMLS_CC))) {
- out = erealloc(out, total_bytes + read_bytes + 1);
- memcpy(out + total_bytes, buf, read_bytes);
- total_bytes += read_bytes;
- }
-
- if (out) out[total_bytes] = '\0';
-
- return out;
-}
-
-
-/*
- * The combined READER/HANDLER
- *
- */
-
-SAPI_API SAPI_POST_HANDLER_FUNC(rfc1867_post_handler)
-{
- char *boundary, *s=NULL, *boundary_end = NULL, *start_arr=NULL, *array_index=NULL;
- char *temp_filename=NULL, *lbuf=NULL, *abuf=NULL;
- int boundary_len=0, total_bytes=0, cancel_upload=0, is_arr_upload=0, array_len=0;
- int max_file_size=0, skip_upload=0, anonindex=0, is_anonymous;
- zval *http_post_files=NULL; HashTable *uploaded_files=NULL;
-#if HAVE_MBSTRING && !defined(COMPILE_DL_MBSTRING)
- int str_len = 0, num_vars = 0, num_vars_max = 2*10, *len_list = NULL;
- char **val_list = NULL;
-#endif
- zend_bool magic_quotes_gpc;
- multipart_buffer *mbuff;
- zval *array_ptr = (zval *) arg;
- FILE *fp;
- zend_llist header;
-
- if (SG(request_info).content_length > SG(post_max_size)) {
- sapi_module.sapi_error(E_WARNING, "POST Content-Length of %ld bytes exceeds the limit of %ld bytes", SG(request_info).content_length, SG(post_max_size));
- return;
- }
-
- /* Get the boundary */
- boundary = strstr(content_type_dup, "boundary");
- if (!boundary || !(boundary=strchr(boundary, '='))) {
- sapi_module.sapi_error(E_WARNING, "Missing boundary in multipart/form-data POST data");
- return;
- }
-
- boundary++;
- boundary_len = strlen(boundary);
-
- if (boundary[0] == '"') {
- boundary++;
- boundary_end = strchr(boundary, '"');
- if (!boundary_end) {
- sapi_module.sapi_error(E_WARNING, "Invalid boundary in multipart/form-data POST data");
- return;
- }
- } else {
- /* search for the end of the boundary */
- boundary_end = strchr(boundary, ',');
- }
- if (boundary_end) {
- boundary_end[0] = '\0';
- boundary_len = boundary_end-boundary;
- }
-
- /* Initialize the buffer */
- if (!(mbuff = multipart_buffer_new(boundary, boundary_len))) {
- sapi_module.sapi_error(E_WARNING, "Unable to initialize the input buffer");
- return;
- }
-
- /* Initialize $_FILES[] */
- zend_hash_init(&PG(rfc1867_protected_variables), 5, NULL, NULL, 0);
-
- ALLOC_HASHTABLE(uploaded_files);
- zend_hash_init(uploaded_files, 5, NULL, (dtor_func_t) free_estring, 0);
- SG(rfc1867_uploaded_files) = uploaded_files;
-
- ALLOC_ZVAL(http_post_files);
- array_init(http_post_files);
- INIT_PZVAL(http_post_files);
- PG(http_globals)[TRACK_VARS_FILES] = http_post_files;
-
-#if HAVE_MBSTRING && !defined(COMPILE_DL_MBSTRING)
- if (php_mb_encoding_translation(TSRMLS_C)) {
- val_list = (char **)ecalloc(num_vars_max+2, sizeof(char *));
- len_list = (int *)ecalloc(num_vars_max+2, sizeof(int));
- }
-#endif
- zend_llist_init(&header, sizeof(mime_header_entry), (llist_dtor_func_t) php_free_hdr_entry, 0);
-
- while (!multipart_buffer_eof(mbuff TSRMLS_CC))
- {
- char buff[FILLUNIT];
- char *cd=NULL,*param=NULL,*filename=NULL, *tmp=NULL;
- int blen=0, wlen=0;
-
- zend_llist_clean(&header);
-
- if (!multipart_buffer_headers(mbuff, &header TSRMLS_CC)) {
- SAFE_RETURN;
- }
-
- if ((cd = php_mime_get_hdr_value(header, "Content-Disposition"))) {
- char *pair=NULL;
-
- while (isspace(*cd)) {
- ++cd;
- }
-
- while (*cd && (pair = php_ap_getword(&cd, ';')))
- {
- char *key=NULL, *word = pair;
-
- while (isspace(*cd)) {
- ++cd;
- }
-
- if (strchr(pair, '=')) {
- key = php_ap_getword(&pair, '=');
-
- if (!strcasecmp(key, "name")) {
- if (param) {
- efree(param);
- }
- param = php_ap_getword_conf(&pair TSRMLS_CC);
- } else if (!strcasecmp(key, "filename")) {
- if (filename) {
- efree(filename);
- }
- filename = php_ap_getword_conf(&pair TSRMLS_CC);
- }
- }
- if (key) {
- efree(key);
- }
- efree(word);
- }
-
- /* Normal form variable, safe to read all data into memory */
- if (!filename && param) {
-
- char *value = multipart_buffer_read_body(mbuff TSRMLS_CC);
- unsigned int new_val_len; /* Dummy variable */
-
- if (!value) {
- value = estrdup("");
- }
-
- if (sapi_module.input_filter(PARSE_POST, param, &value, strlen(value), &new_val_len TSRMLS_CC)) {
-#if HAVE_MBSTRING && !defined(COMPILE_DL_MBSTRING)
- if (php_mb_encoding_translation(TSRMLS_C)) {
- php_mb_gpc_stack_variable(param, value, &val_list, &len_list,
- &num_vars, &num_vars_max TSRMLS_CC);
- } else {
- safe_php_register_variable(param, value, array_ptr, 0 TSRMLS_CC);
- }
-#else
- safe_php_register_variable(param, value, array_ptr, 0 TSRMLS_CC);
-#endif
- }
- if (!strcasecmp(param, "MAX_FILE_SIZE")) {
- max_file_size = atol(value);
- }
-
- efree(param);
- efree(value);
- continue;
- }
-
- /* If file_uploads=off, skip the file part */
- if (!PG(file_uploads)) {
- skip_upload = 1;
- }
-
- /* Return with an error if the posted data is garbled */
- if (!param && !filename) {
- sapi_module.sapi_error(E_WARNING, "File Upload Mime headers garbled");
- SAFE_RETURN;
- }
-
- if (!param) {
- is_anonymous = 1;
- param = emalloc(MAX_SIZE_ANONNAME);
- snprintf(param, MAX_SIZE_ANONNAME, "%u", anonindex++);
- } else {
- is_anonymous = 0;
- }
-
- if (!skip_upload) {
- /* Handle file */
- fp = php_open_temporary_file(PG(upload_tmp_dir), "php", &temp_filename TSRMLS_CC);
- if (!fp) {
- sapi_module.sapi_error(E_WARNING, "File upload error - unable to create a temporary file");
- skip_upload = 1;
- }
- }
- if (skip_upload) {
- efree(param);
- efree(filename);
- continue;
- }
-
- total_bytes = 0;
- cancel_upload = 0;
-
- if(strlen(filename) == 0) {
-#if DEBUG_FILE_UPLOAD
- sapi_module.sapi_error(E_NOTICE, "No file uploaded");
-#endif
- cancel_upload = UPLOAD_ERROR_D;
- }
-
- while (!cancel_upload && (blen = multipart_buffer_read(mbuff, buff, sizeof(buff) TSRMLS_CC)))
- {
- if (PG(upload_max_filesize) > 0 && total_bytes > PG(upload_max_filesize)) {
-#if DEBUG_FILE_UPLOAD
- sapi_module.sapi_error(E_NOTICE, "upload_max_filesize of %ld bytes exceeded - file [%s=%s] not saved", PG(upload_max_filesize), param, filename);
-#endif
- cancel_upload = UPLOAD_ERROR_A;
- } else if (max_file_size && (total_bytes > max_file_size)) {
-#if DEBUG_FILE_UPLOAD
- sapi_module.sapi_error(E_NOTICE, "MAX_FILE_SIZE of %ld bytes exceeded - file [%s=%s] not saved", max_file_size, param, filename);
-#endif
- cancel_upload = UPLOAD_ERROR_B;
- } else if (blen > 0) {
- wlen = fwrite(buff, 1, blen, fp);
-
- if (wlen < blen) {
-#if DEBUG_FILE_UPLOAD
- sapi_module.sapi_error(E_NOTICE, "Only %d bytes were written, expected to write %d", wlen, blen);
-#endif
- cancel_upload = UPLOAD_ERROR_C;
- } else {
- total_bytes += wlen;
- }
- }
- }
- fclose(fp);
-
-#if DEBUG_FILE_UPLOAD
- if(strlen(filename) > 0 && total_bytes == 0) {
- sapi_module.sapi_error(E_WARNING, "Uploaded file size 0 - file [%s=%s] not saved", param, filename);
- cancel_upload = 5;
- }
-#endif
-
- if (cancel_upload) {
- if (temp_filename) {
- unlink(temp_filename);
- efree(temp_filename);
- }
- temp_filename="";
- } else {
- zend_hash_add(SG(rfc1867_uploaded_files), temp_filename, strlen(temp_filename) + 1, &temp_filename, sizeof(char *), NULL);
- }
-
- /* is_arr_upload is true when name of file upload field
- * ends in [.*]
- * start_arr is set to point to 1st [
- */
- is_arr_upload = (start_arr = strchr(param,'[')) && (param[strlen(param)-1] == ']');
- /* handle unterminated [ */
- if (!is_arr_upload && start_arr) {
- *start_arr = '_';
- }
-
- if (is_arr_upload) {
- array_len = strlen(start_arr);
- if (array_index) {
- efree(array_index);
- }
- array_index = estrndup(start_arr+1, array_len-2);
- }
-
- /* Add $foo_name */
- if (lbuf) {
- efree(lbuf);
- }
- lbuf = (char *) emalloc(strlen(param) + MAX_SIZE_OF_INDEX + 1);
-
- if (is_arr_upload) {
- if (abuf) efree(abuf);
- abuf = estrndup(param, strlen(param)-array_len);
- sprintf(lbuf, "%s_name[%s]", abuf, array_index);
- } else {
- sprintf(lbuf, "%s_name", param);
- }
-
-#if HAVE_MBSTRING && !defined(COMPILE_DL_MBSTRING)
- if (php_mb_encoding_translation(TSRMLS_C)) {
- if (num_vars>=num_vars_max){
- php_mb_gpc_realloc_buffer(&val_list, &len_list, &num_vars_max,
- 1 TSRMLS_CC);
- }
- val_list[num_vars] = filename;
- len_list[num_vars] = strlen(filename);
- num_vars++;
- if(php_mb_gpc_encoding_detector(val_list, len_list, num_vars, NULL TSRMLS_CC) == SUCCESS) {
- str_len = strlen(filename);
- php_mb_gpc_encoding_converter(&filename, &str_len, 1, NULL, NULL TSRMLS_CC);
- }
- s = php_mb_strrchr(filename, '\\' TSRMLS_CC);
- if ((tmp = php_mb_strrchr(filename, '/' TSRMLS_CC)) > s) {
- s = tmp;
- }
- num_vars--;
- } else {
- s = strrchr(filename, '\\');
- if ((tmp = strrchr(filename, '/')) > s) {
- s = tmp;
- }
- }
-#else
- s = strrchr(filename, '\\');
- if ((tmp = strrchr(filename, '/')) > s) {
- s = tmp;
- }
-#endif
- if (!is_anonymous) {
- if (s && s > filename) {
- safe_php_register_variable(lbuf, s+1, NULL, 0 TSRMLS_CC);
- } else {
- safe_php_register_variable(lbuf, filename, NULL, 0 TSRMLS_CC);
- }
- }
-
- /* Add $foo[name] */
- if (is_arr_upload) {
- sprintf(lbuf, "%s[name][%s]", abuf, array_index);
- } else {
- sprintf(lbuf, "%s[name]", param);
- }
- if (s && s > filename) {
- register_http_post_files_variable(lbuf, s+1, http_post_files, 0 TSRMLS_CC);
- } else {
- register_http_post_files_variable(lbuf, filename, http_post_files, 0 TSRMLS_CC);
- }
- efree(filename);
- s = NULL;
-
- /* Possible Content-Type: */
- if (cancel_upload || !(cd = php_mime_get_hdr_value(header, "Content-Type"))) {
- cd = "";
- } else {
- /* fix for Opera 6.01 */
- s = strchr(cd, ';');
- if (s != NULL) {
- *s = '\0';
- }
- }
-
- /* Add $foo_type */
- if (is_arr_upload) {
- sprintf(lbuf, "%s_type[%s]", abuf, array_index);
- } else {
- sprintf(lbuf, "%s_type", param);
- }
- if (!is_anonymous) {
- safe_php_register_variable(lbuf, cd, NULL, 0 TSRMLS_CC);
- }
-
- /* Add $foo[type] */
- if (is_arr_upload) {
- sprintf(lbuf, "%s[type][%s]", abuf, array_index);
- } else {
- sprintf(lbuf, "%s[type]", param);
- }
- register_http_post_files_variable(lbuf, cd, http_post_files, 0 TSRMLS_CC);
-
- /* Restore Content-Type Header */
- if (s != NULL) {
- *s = ';';
- }
- s = "";
-
- /* Initialize variables */
- add_protected_variable(param TSRMLS_CC);
-
- magic_quotes_gpc = PG(magic_quotes_gpc);
- PG(magic_quotes_gpc) = 0;
- /* if param is of form xxx[.*] this will cut it to xxx */
- if (!is_anonymous) {
- safe_php_register_variable(param, temp_filename, NULL, 1 TSRMLS_CC);
- }
-
- /* Add $foo[tmp_name] */
- if (is_arr_upload) {
- sprintf(lbuf, "%s[tmp_name][%s]", abuf, array_index);
- } else {
- sprintf(lbuf, "%s[tmp_name]", param);
- }
- add_protected_variable(lbuf TSRMLS_CC);
- register_http_post_files_variable(lbuf, temp_filename, http_post_files, 1 TSRMLS_CC);
-
- PG(magic_quotes_gpc) = magic_quotes_gpc;
-
- {
- zval file_size, error_type;
-
- error_type.value.lval = cancel_upload;
- error_type.type = IS_LONG;
-
- /* Add $foo[error] */
- if (cancel_upload) {
- file_size.value.lval = 0;
- file_size.type = IS_LONG;
- } else {
- file_size.value.lval = total_bytes;
- file_size.type = IS_LONG;
- }
-
- if (is_arr_upload) {
- sprintf(lbuf, "%s[error][%s]", abuf, array_index);
- } else {
- sprintf(lbuf, "%s[error]", param);
- }
- register_http_post_files_variable_ex(lbuf, &error_type, http_post_files, 0 TSRMLS_CC);
-
- /* Add $foo_size */
- if (is_arr_upload) {
- sprintf(lbuf, "%s_size[%s]", abuf, array_index);
- } else {
- sprintf(lbuf, "%s_size", param);
- }
- if (!is_anonymous) {
- safe_php_register_variable_ex(lbuf, &file_size, NULL, 0 TSRMLS_CC);
- }
-
- /* Add $foo[size] */
- if (is_arr_upload) {
- sprintf(lbuf, "%s[size][%s]", abuf, array_index);
- } else {
- sprintf(lbuf, "%s[size]", param);
- }
- register_http_post_files_variable_ex(lbuf, &file_size, http_post_files, 0 TSRMLS_CC);
- }
- efree(param);
- }
- }
-
- SAFE_RETURN;
-}
-
-/*
- * 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/main/rfc1867.h b/main/rfc1867.h
deleted file mode 100644
index d8162914dd..0000000000
--- a/main/rfc1867.h
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifndef RFC1867_H
-#define RFC1867_H
-
-#include "SAPI.h"
-
-#define MULTIPART_CONTENT_TYPE "multipart/form-data"
-
-SAPI_API SAPI_POST_HANDLER_FUNC(rfc1867_post_handler);
-
-void destroy_uploaded_files_hash(TSRMLS_D);
-void php_rfc1867_register_constants(TSRMLS_D);
-
-#endif /* RFC1867_H */
diff --git a/main/safe_mode.c b/main/safe_mode.c
deleted file mode 100644
index 0412433b22..0000000000
--- a/main/safe_mode.c
+++ /dev/null
@@ -1,229 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Rasmus Lerdorf <rasmus@lerdorf.on.ca> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-#include "php.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-
-#if HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-#include <sys/stat.h>
-#include "ext/standard/pageinfo.h"
-#include "safe_mode.h"
-#include "SAPI.h"
-#include "php_globals.h"
-
-/*
- * php_checkuid
- *
- * This function has six modes:
- *
- * 0 - return invalid (0) if file does not exist
- * 1 - return valid (1) if file does not exist
- * 2 - if file does not exist, check directory
- * 3 - only check directory (needed for mkdir)
- * 4 - check mode and param
- * 5 - only check file
- */
-
-PHPAPI int php_checkuid_ex(const char *filename, char *fopen_mode, int mode, int flags)
-{
- struct stat sb;
- int ret, nofile=0;
- long uid=0L, gid=0L, duid=0L, dgid=0L;
- char path[MAXPATHLEN];
- char *s, filenamecopy[MAXPATHLEN];
- php_stream_wrapper *wrapper = NULL;
- TSRMLS_FETCH();
-
- strlcpy(filenamecopy, filename, MAXPATHLEN);
- filename=(char *)&filenamecopy;
-
- if (!filename) {
- return 0; /* path must be provided */
- }
-
- if (fopen_mode) {
- if (fopen_mode[0] == 'r') {
- mode = CHECKUID_DISALLOW_FILE_NOT_EXISTS;
- } else {
- mode = CHECKUID_CHECK_FILE_AND_DIR;
- }
- }
-
- /*
- * If given filepath is a URL, allow - safe mode stuff
- * related to URL's is checked in individual functions
- */
- wrapper = php_stream_locate_url_wrapper(filename, NULL, STREAM_LOCATE_WRAPPERS_ONLY TSRMLS_CC);
- if (wrapper != NULL)
- return 1;
-
- /* First we see if the file is owned by the same user...
- * If that fails, passthrough and check directory...
- */
- if (mode != CHECKUID_ALLOW_ONLY_DIR) {
- VCWD_REALPATH(filename, path);
- ret = VCWD_STAT(path, &sb);
- if (ret < 0) {
- if (mode == CHECKUID_DISALLOW_FILE_NOT_EXISTS) {
- if ((flags & CHECKUID_NO_ERRORS) == 0) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to access %s", filename);
- }
- return 0;
- } else if (mode == CHECKUID_ALLOW_FILE_NOT_EXISTS) {
- if ((flags & CHECKUID_NO_ERRORS) == 0) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to access %s", filename);
- }
- return 1;
- }
- nofile = 1;
- } else {
- uid = sb.st_uid;
- gid = sb.st_gid;
- if (uid == php_getuid()) {
- return 1;
- } else if (PG(safe_mode_gid) && gid == php_getgid()) {
- return 1;
- }
- }
-
- /* Trim off filename */
- if ((s = strrchr(path, DEFAULT_SLASH))) {
- if (s == path)
- path[1] = '\0';
- else
- *s = '\0';
- }
- } else { /* CHECKUID_ALLOW_ONLY_DIR */
- s = strrchr(filename, DEFAULT_SLASH);
-
- if (s == filename) {
- /* root dir */
- path[0] = DEFAULT_SLASH;
- path[1] = '\0';
- } else if (s) {
- *s = '\0';
- VCWD_REALPATH(filename, path);
- *s = DEFAULT_SLASH;
- } else {
- /* Under Solaris, getcwd() can fail if there are no
- * read permissions on a component of the path, even
- * though it has the required x permissions */
- path[0] = '.';
- path[1] = '\0';
- VCWD_GETCWD(path, sizeof(path));
- }
- } /* end CHECKUID_ALLOW_ONLY_DIR */
-
- if (mode != CHECKUID_ALLOW_ONLY_FILE) {
- /* check directory */
- ret = VCWD_STAT(path, &sb);
- if (ret < 0) {
- if ((flags & CHECKUID_NO_ERRORS) == 0) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to access %s", filename);
- }
- return 0;
- }
- duid = sb.st_uid;
- dgid = sb.st_gid;
- if (duid == php_getuid()) {
- return 1;
- } else if (PG(safe_mode_gid) && dgid == php_getgid()) {
- return 1;
- } else {
- TSRMLS_FETCH();
-
- if (SG(rfc1867_uploaded_files)) {
- if (zend_hash_exists(SG(rfc1867_uploaded_files), (char *) filename, strlen(filename)+1)) {
- return 1;
- }
- }
- }
- }
-
- if (mode == CHECKUID_ALLOW_ONLY_DIR) {
- uid = duid;
- gid = dgid;
- if (s) {
- *s = 0;
- }
- }
-
- if (nofile) {
- uid = duid;
- gid = dgid;
- filename = path;
- }
-
- if ((flags & CHECKUID_NO_ERRORS) == 0) {
- if (PG(safe_mode_gid)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "SAFE MODE Restriction in effect. The script whose uid/gid is %ld/%ld is not allowed to access %s owned by uid/gid %ld/%ld", php_getuid(), php_getgid(), filename, uid, gid);
- } else {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "SAFE MODE Restriction in effect. The script whose uid is %ld is not allowed to access %s owned by uid %ld", php_getuid(), filename, uid);
- }
- }
-
- return 0;
-}
-
-PHPAPI int php_checkuid(const char *filename, char *fopen_mode, int mode) {
- return php_checkuid_ex(filename, fopen_mode, mode, 0);
-}
-
-PHPAPI char *php_get_current_user()
-{
- struct passwd *pwd;
- struct stat *pstat;
- TSRMLS_FETCH();
-
- if (SG(request_info).current_user) {
- return SG(request_info).current_user;
- }
-
- /* FIXME: I need to have this somehow handled if
- USE_SAPI is defined, because cgi will also be
- interfaced in USE_SAPI */
-
- pstat = sapi_get_stat(TSRMLS_C);
-
- if (!pstat) {
- return "";
- }
-
- if ((pwd=getpwuid(pstat->st_uid))==NULL) {
- return "";
- }
- SG(request_info).current_user_length = strlen(pwd->pw_name);
- SG(request_info).current_user = estrndup(pwd->pw_name, SG(request_info).current_user_length);
-
- return SG(request_info).current_user;
-}
-
-/*
- * 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/main/safe_mode.h b/main/safe_mode.h
deleted file mode 100644
index 40f69cf93c..0000000000
--- a/main/safe_mode.h
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifndef SAFE_MODE_H
-#define SAFE_MODE_H
-
-/* mode's for php_checkuid() */
-#define CHECKUID_DISALLOW_FILE_NOT_EXISTS 0
-#define CHECKUID_ALLOW_FILE_NOT_EXISTS 1
-#define CHECKUID_CHECK_FILE_AND_DIR 2
-#define CHECKUID_ALLOW_ONLY_DIR 3
-#define CHECKUID_CHECK_MODE_PARAM 4
-#define CHECKUID_ALLOW_ONLY_FILE 5
-
-/* flags for php_checkuid_ex() */
-#define CHECKUID_NO_ERRORS 0x01
-
-BEGIN_EXTERN_C()
-PHPAPI int php_checkuid(const char *filename, char *fopen_mode, int mode);
-PHPAPI int php_checkuid_ex(const char *filename, char *fopen_mode, int mode, int flags);
-PHPAPI char *php_get_current_user(void);
-END_EXTERN_C()
-
-#endif
diff --git a/main/snprintf.c b/main/snprintf.c
deleted file mode 100644
index fa0e7f1e88..0000000000
--- a/main/snprintf.c
+++ /dev/null
@@ -1,1169 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-/* ====================================================================
- * Copyright (c) 1995-1998 The Apache Group. 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. All advertising materials mentioning features or use of this
- * software must display the following acknowledgment:
- * "This product includes software developed by the Apache Group
- * for use in the Apache HTTP server project (http://www.apache.org/)."
- *
- * 4. The names "Apache Server" and "Apache Group" must not be used to
- * endorse or promote products derived from this software without
- * prior written permission.
- *
- * 5. Redistributions of any form whatsoever must retain the following
- * acknowledgment:
- * "This product includes software developed by the Apache Group
- * for use in the Apache HTTP server project (http://www.apache.org/)."
- *
- * THIS SOFTWARE IS PROVIDED BY THE APACHE GROUP ``AS IS'' AND ANY
- * EXPRESSED 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 APACHE GROUP OR
- * ITS 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 software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Group and was originally based
- * on public domain software written at the National Center for
- * Supercomputing Applications, University of Illinois, Urbana-Champaign.
- * For more information on the Apache Group and the Apache HTTP server
- * project, please see <http://www.apache.org/>.
- *
- * This code is based on, and used with the permission of, the
- * SIO stdio-replacement strx_* functions by Panos Tsirigotis
- * <panos@alumni.cs.colorado.edu> for xinetd.
- */
-
-#include "php.h"
-
-#include <stddef.h>
-#include <stdio.h>
-#include <ctype.h>
-#include <sys/types.h>
-#include <stdarg.h>
-#include <string.h>
-#include <stdlib.h>
-#include <math.h>
-#ifdef HAVE_INTTYPES_H
-#include <inttypes.h>
-#endif
-
-#define FALSE 0
-#define TRUE 1
-#define NUL '\0'
-#define INT_NULL ((int *)0)
-
-#define S_NULL "(null)"
-#define S_NULL_LEN 6
-
-#define FLOAT_DIGITS 6
-#define EXPONENT_LENGTH 10
-
-
-/*
- * Convert num to its decimal format.
- * Return value:
- * - a pointer to a string containing the number (no sign)
- * - len contains the length of the string
- * - is_negative is set to TRUE or FALSE depending on the sign
- * of the number (always set to FALSE if is_unsigned is TRUE)
- *
- * The caller provides a buffer for the string: that is the buf_end argument
- * which is a pointer to the END of the buffer + 1 (i.e. if the buffer
- * is declared as buf[ 100 ], buf_end should be &buf[ 100 ])
- */
-char *
-ap_php_conv_10(register wide_int num, register bool_int is_unsigned,
- register bool_int * is_negative, char *buf_end, register int *len)
-{
- register char *p = buf_end;
- register u_wide_int magnitude;
-
- if (is_unsigned) {
- magnitude = (u_wide_int) num;
- *is_negative = FALSE;
- } else {
- *is_negative = (num < 0);
-
- /*
- * On a 2's complement machine, negating the most negative integer
- * results in a number that cannot be represented as a signed integer.
- * Here is what we do to obtain the number's magnitude:
- * a. add 1 to the number
- * b. negate it (becomes positive)
- * c. convert it to unsigned
- * d. add 1
- */
- if (*is_negative) {
- wide_int t = num + 1;
-
- magnitude = ((u_wide_int) - t) + 1;
- } else
- magnitude = (u_wide_int) num;
- }
-
- /*
- * We use a do-while loop so that we write at least 1 digit
- */
- do {
- register u_wide_int new_magnitude = magnitude / 10;
-
- *--p = (char)(magnitude - new_magnitude * 10 + '0');
- magnitude = new_magnitude;
- }
- while (magnitude);
-
- *len = buf_end - p;
- return (p);
-}
-
-/* If you change this value then also change bug24640.phpt.
- */
-#define NDIG 80
-
-
-/*
- * Convert a floating point number to a string formats 'f', 'e' or 'E'.
- * The result is placed in buf, and len denotes the length of the string
- * The sign is returned in the is_negative argument (and is not placed
- * in buf).
- */
-char *
- ap_php_conv_fp(register char format, register double num,
- boolean_e add_dp, int precision, bool_int * is_negative, char *buf, int *len)
-{
- register char *s = buf;
- register char *p;
- int decimal_point;
- char buf1[NDIG];
-
- if (format == 'f')
- p = ap_php_fcvt(num, precision, &decimal_point, is_negative, buf1);
- else /* either e or E format */
- p = ap_php_ecvt(num, precision + 1, &decimal_point, is_negative, buf1);
-
- /*
- * Check for Infinity and NaN
- */
- if (isalpha((int)*p)) {
- *len = strlen(p);
- memcpy(buf, p, *len + 1);
- *is_negative = FALSE;
- return (buf);
- }
- if (format == 'f') {
- if (decimal_point <= 0) {
- *s++ = '0';
- if (precision > 0) {
- *s++ = '.';
- while (decimal_point++ < 0)
- *s++ = '0';
- } else if (add_dp) {
- *s++ = '.';
- }
- } else {
- while (decimal_point-- > 0) {
- *s++ = *p++;
- }
- if (precision > 0 || add_dp) {
- *s++ = '.';
- }
- }
- } else {
- *s++ = *p++;
- if (precision > 0 || add_dp)
- *s++ = '.';
- }
-
- /*
- * copy the rest of p, the NUL is NOT copied
- */
- while (*p)
- *s++ = *p++;
-
- if (format != 'f') {
- char temp[EXPONENT_LENGTH]; /* for exponent conversion */
- int t_len;
- bool_int exponent_is_negative;
-
- *s++ = format; /* either e or E */
- decimal_point--;
- if (decimal_point != 0) {
- p = ap_php_conv_10((wide_int) decimal_point, FALSE, &exponent_is_negative,
- &temp[EXPONENT_LENGTH], &t_len);
- *s++ = exponent_is_negative ? '-' : '+';
-
- /*
- * Make sure the exponent has at least 2 digits
- */
- if (t_len == 1)
- *s++ = '0';
- while (t_len--)
- *s++ = *p++;
- } else {
- *s++ = '+';
- *s++ = '0';
- *s++ = '0';
- }
- }
- *len = s - buf;
- return (buf);
-}
-
-
-/*
- * Convert num to a base X number where X is a power of 2. nbits determines X.
- * For example, if nbits is 3, we do base 8 conversion
- * Return value:
- * a pointer to a string containing the number
- *
- * The caller provides a buffer for the string: that is the buf_end argument
- * which is a pointer to the END of the buffer + 1 (i.e. if the buffer
- * is declared as buf[ 100 ], buf_end should be &buf[ 100 ])
- */
-char *
- ap_php_conv_p2(register u_wide_int num, register int nbits,
- char format, char *buf_end, register int *len)
-{
- register int mask = (1 << nbits) - 1;
- register char *p = buf_end;
- static char low_digits[] = "0123456789abcdef";
- static char upper_digits[] = "0123456789ABCDEF";
- register char *digits = (format == 'X') ? upper_digits : low_digits;
-
- do {
- *--p = digits[num & mask];
- num >>= nbits;
- }
- while (num);
-
- *len = buf_end - p;
- return (p);
-}
-
-/*
- * cvt.c - IEEE floating point formatting routines for FreeBSD
- * from GNU libc-4.6.27
- */
-
-/*
- * ap_php_ecvt converts to decimal
- * the number of digits is specified by ndigit
- * decpt is set to the position of the decimal point
- * sign is set to 0 for positive, 1 for negative
- */
-
-
-char *
-ap_php_cvt(double arg, int ndigits, int *decpt, int *sign, int eflag, char *buf)
-{
- register int r2;
- int mvl;
- double fi, fj;
- register char *p, *p1;
-
- if (ndigits >= NDIG - 1)
- ndigits = NDIG - 2;
- r2 = 0;
- *sign = 0;
- p = &buf[0];
- if (arg < 0) {
- *sign = 1;
- arg = -arg;
- }
- arg = modf(arg, &fi);
- p1 = &buf[NDIG];
- /*
- * Do integer part
- */
- if (fi != 0) {
- p1 = &buf[NDIG];
- while (fi != 0) {
- fj = modf(fi / 10, &fi);
- if (p1 <= &buf[0]) {
- mvl = NDIG - ndigits;
- memmove(&buf[mvl], &buf[0], NDIG-mvl-1);
- p1 += mvl;
- }
- *--p1 = (int) ((fj + .03) * 10) + '0';
- r2++;
- }
- while (p1 < &buf[NDIG])
- *p++ = *p1++;
- } else if (arg > 0) {
- while ((fj = arg * 10) < 1) {
- if (!eflag && (r2 * -1) < ndigits) {
- break;
- }
- arg = fj;
- r2--;
- }
- }
- p1 = &buf[ndigits];
- if (eflag == 0)
- p1 += r2;
- *decpt = r2;
- if (p1 < &buf[0]) {
- buf[0] = '\0';
- return (buf);
- }
- if (p <= p1 && p < &buf[NDIG]) {
- arg = modf(arg * 10, &fj);
- if ((int)fj==10) {
- *p++ = '1';
- fj = 0;
- *decpt = ++r2;
- }
- while (p <= p1 && p < &buf[NDIG]) {
- *p++ = (int) fj + '0';
- arg = modf(arg * 10, &fj);
- }
- }
- if (p1 >= &buf[NDIG]) {
- buf[NDIG - 1] = '\0';
- return (buf);
- }
- p = p1;
- *p1 += 5;
- while (*p1 > '9') {
- *p1 = '0';
- if (p1 > buf)
- ++ * --p1;
- else {
- *p1 = '1';
- (*decpt)++;
- if (eflag == 0) {
- if (p > buf)
- *p = '0';
- p++;
- }
- }
- }
- *p = '\0';
- return (buf);
-}
-
-char *
-ap_php_ecvt(double arg, int ndigits, int *decpt, int *sign, char *buf)
-{
- return (ap_php_cvt(arg, ndigits, decpt, sign, 1, buf));
-}
-
-char *
-ap_php_fcvt(double arg, int ndigits, int *decpt, int *sign, char *buf)
-{
- return (ap_php_cvt(arg, ndigits, decpt, sign, 0, buf));
-}
-
-/*
- * ap_php_gcvt - Floating output conversion to
- * minimal length string
- */
-
-char *
-ap_php_gcvt(double number, int ndigit, char *buf, boolean_e altform)
-{
- int sign, decpt;
- register char *p1, *p2;
- register int i;
- char buf1[NDIG];
-
- if (ndigit >= NDIG - 1) {
- ndigit = NDIG - 2;
- }
-
- p1 = ap_php_ecvt(number, ndigit, &decpt, &sign, buf1);
- p2 = buf;
- if (sign)
- *p2++ = '-';
- for (i = ndigit - 1; i > 0 && p1[i] == '0'; i--)
- ndigit--;
- if ((decpt >= 0 && decpt - ndigit > 4)
- || (decpt < 0 && decpt < -3)) { /* use E-style */
- decpt--;
- *p2++ = *p1++;
- *p2++ = '.';
- for (i = 1; i < ndigit; i++)
- *p2++ = *p1++;
- if (*(p2 - 1) == '.') {
- *p2++ = '0';
- }
- *p2++ = 'e';
- if (decpt < 0) {
- decpt = -decpt;
- *p2++ = '-';
- } else
- *p2++ = '+';
- if (decpt / 100 > 0)
- *p2++ = decpt / 100 + '0';
- if (decpt / 10 > 0)
- *p2++ = (decpt % 100) / 10 + '0';
- *p2++ = decpt % 10 + '0';
- } else {
- if (decpt <= 0) {
- if (*p1 != '0') {
- *p2++ = '0';
- *p2++ = '.';
- }
- while (decpt < 0) {
- decpt++;
- *p2++ = '0';
- }
- }
- for (i = 1; i <= ndigit; i++) {
- *p2++ = *p1++;
- if (i == decpt)
- *p2++ = '.';
- }
- if (ndigit < decpt) {
- while (ndigit++ < decpt)
- *p2++ = '0';
- *p2++ = '.';
- }
- }
- if (p2[-1] == '.' && !altform)
- p2--;
- *p2 = '\0';
- return (buf);
-}
-
-#if !defined(HAVE_SNPRINTF) || !defined(HAVE_VSNPRINTF) || PHP_BROKEN_SNPRINTF || PHP_BROKEN_VSNPRINTF
-
-/*
- * NUM_BUF_SIZE is the size of the buffer used for arithmetic conversions
- *
- * XXX: this is a magic number; do not decrease it
- */
-#define NUM_BUF_SIZE 512
-
-
-/*
- * Descriptor for buffer area
- */
-struct buf_area {
- char *buf_end;
- char *nextb; /* pointer to next byte to read/write */
-};
-
-typedef struct buf_area buffy;
-
-/*
- * The INS_CHAR macro inserts a character in the buffer and writes
- * the buffer back to disk if necessary
- * It uses the char pointers sp and bep:
- * sp points to the next available character in the buffer
- * bep points to the end-of-buffer+1
- * While using this macro, note that the nextb pointer is NOT updated.
- *
- * NOTE: Evaluation of the c argument should not have any side-effects
- */
-#define INS_CHAR(c, sp, bep, cc) \
- { \
- if (sp < bep) \
- { \
- *sp++ = c; \
- } \
- cc++; \
- }
-
-#define NUM( c ) ( c - '0' )
-
-#define STR_TO_DEC( str, num ) \
- num = NUM( *str++ ) ; \
- while ( isdigit((int)*str ) ) \
- { \
- num *= 10 ; \
- num += NUM( *str++ ) ; \
- }
-
-/*
- * This macro does zero padding so that the precision
- * requirement is satisfied. The padding is done by
- * adding '0's to the left of the string that is going
- * to be printed.
- */
-#define FIX_PRECISION( adjust, precision, s, s_len ) \
- if ( adjust ) \
- while ( s_len < precision ) \
- { \
- *--s = '0' ; \
- s_len++ ; \
- }
-
-/*
- * Macro that does padding. The padding is done by printing
- * the character ch.
- */
-#define PAD( width, len, ch ) do \
- { \
- INS_CHAR( ch, sp, bep, cc ) ; \
- width-- ; \
- } \
- while ( width > len )
-
-/*
- * Prefix the character ch to the string str
- * Increase length
- * Set the has_prefix flag
- */
-#define PREFIX( str, length, ch ) *--str = ch ; length++ ; has_prefix = YES
-
-
-/*
- * Do format conversion placing the output in buffer
- */
-static int format_converter(register buffy * odp, const char *fmt,
- va_list ap)
-{
- register char *sp;
- register char *bep;
- register int cc = 0;
- register int i;
-
- register char *s = NULL;
- char *q;
- int s_len;
-
- register int min_width = 0;
- int precision = 0;
- enum {
- LEFT, RIGHT
- } adjust;
- char pad_char;
- char prefix_char;
-
- double fp_num;
- wide_int i_num = (wide_int) 0;
- u_wide_int ui_num;
-
- char num_buf[NUM_BUF_SIZE];
- char char_buf[2]; /* for printing %% and %<unknown> */
-
- /*
- * Flag variables
- */
- length_modifier_e modifier;
- boolean_e alternate_form;
- boolean_e print_sign;
- boolean_e print_blank;
- boolean_e adjust_precision;
- boolean_e adjust_width;
- bool_int is_negative;
-
- sp = odp->nextb;
- bep = odp->buf_end;
-
- while (*fmt) {
- if (*fmt != '%') {
- INS_CHAR(*fmt, sp, bep, cc);
- } else {
- /*
- * Default variable settings
- */
- adjust = RIGHT;
- alternate_form = print_sign = print_blank = NO;
- pad_char = ' ';
- prefix_char = NUL;
-
- fmt++;
-
- /*
- * Try to avoid checking for flags, width or precision
- */
- if (isascii((int)*fmt) && !islower((int)*fmt)) {
- /*
- * Recognize flags: -, #, BLANK, +
- */
- for (;; fmt++) {
- if (*fmt == '-')
- adjust = LEFT;
- else if (*fmt == '+')
- print_sign = YES;
- else if (*fmt == '#')
- alternate_form = YES;
- else if (*fmt == ' ')
- print_blank = YES;
- else if (*fmt == '0')
- pad_char = '0';
- else
- break;
- }
-
- /*
- * Check if a width was specified
- */
- if (isdigit((int)*fmt)) {
- STR_TO_DEC(fmt, min_width);
- adjust_width = YES;
- } else if (*fmt == '*') {
- min_width = va_arg(ap, int);
- fmt++;
- adjust_width = YES;
- if (min_width < 0) {
- adjust = LEFT;
- min_width = -min_width;
- }
- } else
- adjust_width = NO;
-
- /*
- * Check if a precision was specified
- *
- * XXX: an unreasonable amount of precision may be specified
- * resulting in overflow of num_buf. Currently we
- * ignore this possibility.
- */
- if (*fmt == '.') {
- adjust_precision = YES;
- fmt++;
- if (isdigit((int)*fmt)) {
- STR_TO_DEC(fmt, precision);
- } else if (*fmt == '*') {
- precision = va_arg(ap, int);
- fmt++;
- if (precision < 0)
- precision = 0;
- } else
- precision = 0;
- } else
- adjust_precision = NO;
- } else
- adjust_precision = adjust_width = NO;
-
- /*
- * Modifier check
- */
- switch (*fmt) {
- case 'L':
- fmt++;
- modifier = LM_LONG_DOUBLE;
- break;
- case 'l':
- fmt++;
-#if SIZEOF_LONG_LONG
- if (*fmt == 'l') {
- fmt++;
- modifier = LM_LONG_LONG;
- } else
-#endif
- modifier = LM_LONG;
- break;
- case 'z':
- fmt++;
- modifier = LM_SIZE_T;
- break;
- case 'j':
- fmt++;
-#if SIZEOF_INTMAX_T
- modifier = LM_INTMAX_T;
-#else
- modifier = LM_SIZE_T;
-#endif
- break;
- case 't':
- fmt++;
-#if SIZEOF_PTRDIFF_T
- modifier = LM_PTRDIFF_T;
-#else
- modifier = LM_SIZE_T;
-#endif
- break;
- case 'h':
- fmt++;
- if (*fmt == 'h') {
- fmt++;
- }
- /* these are promoted to int, so no break */
- default:
- modifier = LM_STD;
- break;
- }
-
- /*
- * Argument extraction and printing.
- * First we determine the argument type.
- * Then, we convert the argument to a string.
- * On exit from the switch, s points to the string that
- * must be printed, s_len has the length of the string
- * The precision requirements, if any, are reflected in s_len.
- *
- * NOTE: pad_char may be set to '0' because of the 0 flag.
- * It is reset to ' ' by non-numeric formats
- */
- switch (*fmt) {
- case 'u':
- switch(modifier) {
- default:
- i_num = (wide_int) va_arg(ap, unsigned int);
- break;
- case LM_LONG_DOUBLE:
- goto fmt_error;
- case LM_LONG:
- i_num = (wide_int) va_arg(ap, unsigned long int);
- break;
- case LM_SIZE_T:
- i_num = (wide_int) va_arg(ap, size_t);
- break;
-#if SIZEOF_LONG_LONG
- case LM_LONG_LONG:
- i_num = (wide_int) va_arg(ap, u_wide_int);
- break;
-#endif
-#if SIZEOF_INTMAX_T
- case LM_INTMAX_T:
- i_num = (wide_int) va_arg(ap, uintmax_t);
- break;
-#endif
-#if SIZEOF_PTRDIFF_T
- case LM_PTRDIFF_T:
- i_num = (wide_int) va_arg(ap, ptrdiff_t);
- break;
-#endif
- }
- /*
- * The rest also applies to other integer formats, so fall
- * into that case.
- */
- case 'd':
- case 'i':
- /*
- * Get the arg if we haven't already.
- */
- if ((*fmt) != 'u') {
- switch(modifier) {
- default:
- i_num = (wide_int) va_arg(ap, int);
- break;
- case LM_LONG_DOUBLE:
- goto fmt_error;
- case LM_LONG:
- i_num = (wide_int) va_arg(ap, long int);
- break;
- case LM_SIZE_T:
-#if SIZEOF_SSIZE_T
- i_num = (wide_int) va_arg(ap, ssize_t);
-#else
- i_num = (wide_int) va_arg(ap, size_t);
-#endif
- break;
-#if SIZEOF_LONG_LONG
- case LM_LONG_LONG:
- i_num = (wide_int) va_arg(ap, wide_int);
- break;
-#endif
-#if SIZEOF_INTMAX_T
- case LM_INTMAX_T:
- i_num = (wide_int) va_arg(ap, intmax_t);
- break;
-#endif
-#if SIZEOF_PTRDIFF_T
- case LM_PTRDIFF_T:
- i_num = (wide_int) va_arg(ap, ptrdiff_t);
- break;
-#endif
- }
- }
- s = ap_php_conv_10(i_num, (*fmt) == 'u', &is_negative,
- &num_buf[NUM_BUF_SIZE], &s_len);
- FIX_PRECISION(adjust_precision, precision, s, s_len);
-
- if (*fmt != 'u') {
- if (is_negative)
- prefix_char = '-';
- else if (print_sign)
- prefix_char = '+';
- else if (print_blank)
- prefix_char = ' ';
- }
- break;
-
-
- case 'o':
- switch(modifier) {
- default:
- ui_num = (u_wide_int) va_arg(ap, unsigned int);
- break;
- case LM_LONG_DOUBLE:
- goto fmt_error;
- case LM_LONG:
- ui_num = (u_wide_int) va_arg(ap, unsigned long int);
- break;
- case LM_SIZE_T:
- ui_num = (u_wide_int) va_arg(ap, size_t);
- break;
-#if SIZEOF_LONG_LONG
- case LM_LONG_LONG:
- ui_num = (u_wide_int) va_arg(ap, u_wide_int);
- break;
-#endif
-#if SIZEOF_INTMAX_T
- case LM_INTMAX_T:
- ui_num = (u_wide_int) va_arg(ap, uintmax_t);
- break;
-#endif
-#if SIZEOF_PTRDIFF_T
- case LM_PTRDIFF_T:
- ui_num = (u_wide_int) va_arg(ap, ptrdiff_t);
- break;
-#endif
- }
- s = ap_php_conv_p2(ui_num, 3, *fmt,
- &num_buf[NUM_BUF_SIZE], &s_len);
- FIX_PRECISION(adjust_precision, precision, s, s_len);
- if (alternate_form && *s != '0') {
- *--s = '0';
- s_len++;
- }
- break;
-
-
- case 'x':
- case 'X':
- switch(modifier) {
- default:
- ui_num = (u_wide_int) va_arg(ap, unsigned int);
- break;
- case LM_LONG_DOUBLE:
- goto fmt_error;
- case LM_LONG:
- ui_num = (u_wide_int) va_arg(ap, unsigned long int);
- break;
- case LM_SIZE_T:
- ui_num = (u_wide_int) va_arg(ap, size_t);
- break;
-#if SIZEOF_LONG_LONG
- case LM_LONG_LONG:
- ui_num = (u_wide_int) va_arg(ap, u_wide_int);
- break;
-#endif
-#if SIZEOF_INTMAX_T
- case LM_INTMAX_T:
- ui_num = (u_wide_int) va_arg(ap, uintmax_t);
- break;
-#endif
-#if SIZEOF_PTRDIFF_T
- case LM_PTRDIFF_T:
- ui_num = (u_wide_int) va_arg(ap, ptrdiff_t);
- break;
-#endif
- }
- s = ap_php_conv_p2(ui_num, 4, *fmt,
- &num_buf[NUM_BUF_SIZE], &s_len);
- FIX_PRECISION(adjust_precision, precision, s, s_len);
- if (alternate_form && i_num != 0) {
- *--s = *fmt; /* 'x' or 'X' */
- *--s = '0';
- s_len += 2;
- }
- break;
-
-
- case 's':
- s = va_arg(ap, char *);
- if (s != NULL) {
- s_len = strlen(s);
- if (adjust_precision && precision < s_len)
- s_len = precision;
- } else {
- s = S_NULL;
- s_len = S_NULL_LEN;
- }
- pad_char = ' ';
- break;
-
-
- case 'f':
- case 'e':
- case 'E':
- switch(modifier) {
- case LM_LONG_DOUBLE:
- fp_num = (double) va_arg(ap, long double);
- break;
- case LM_STD:
- fp_num = va_arg(ap, double);
- break;
- default:
- goto fmt_error;
- }
-
- if (zend_isnan(fp_num)) {
- s = "nan";
- s_len = 3;
- } else if (zend_isinf(fp_num)) {
- s = "inf";
- s_len = 3;
- } else {
- s = ap_php_conv_fp(*fmt, fp_num, alternate_form,
- (adjust_precision == NO) ? FLOAT_DIGITS : precision,
- &is_negative, &num_buf[1], &s_len);
- if (is_negative)
- prefix_char = '-';
- else if (print_sign)
- prefix_char = '+';
- else if (print_blank)
- prefix_char = ' ';
- }
- break;
-
-
- case 'g':
- case 'G':
- switch(modifier) {
- case LM_LONG_DOUBLE:
- fp_num = (double) va_arg(ap, long double);
- break;
- case LM_STD:
- fp_num = va_arg(ap, double);
- break;
- default:
- goto fmt_error;
- }
-
- if (zend_isnan(fp_num)) {
- s = "NAN";
- s_len = 3;
- break;
- } else if (zend_isinf(fp_num)) {
- if (fp_num > 0) {
- s = "INF";
- s_len = 3;
- } else {
- s = "-INF";
- s_len = 4;
- }
- break;
- }
-
- if (adjust_precision == NO)
- precision = FLOAT_DIGITS;
- else if (precision == 0)
- precision = 1;
- /*
- * * We use &num_buf[ 1 ], so that we have room for the sign
- */
- s = ap_php_gcvt(fp_num, precision, &num_buf[1],
- alternate_form);
- if (*s == '-')
- prefix_char = *s++;
- else if (print_sign)
- prefix_char = '+';
- else if (print_blank)
- prefix_char = ' ';
-
- s_len = strlen(s);
-
- if (alternate_form && (q = strchr(s, '.')) == NULL)
- s[s_len++] = '.';
- if (*fmt == 'G' && (q = strchr(s, 'e')) != NULL)
- *q = 'E';
- break;
-
-
- case 'c':
- char_buf[0] = (char) (va_arg(ap, int));
- s = &char_buf[0];
- s_len = 1;
- pad_char = ' ';
- break;
-
-
- case '%':
- char_buf[0] = '%';
- s = &char_buf[0];
- s_len = 1;
- pad_char = ' ';
- break;
-
-
- case 'n':
- *(va_arg(ap, int *)) = cc;
- break;
-
- /*
- * Always extract the argument as a "char *" pointer. We
- * should be using "void *" but there are still machines
- * that don't understand it.
- * If the pointer size is equal to the size of an unsigned
- * integer we convert the pointer to a hex number, otherwise
- * we print "%p" to indicate that we don't handle "%p".
- */
- case 'p':
- if (sizeof(char *) <= sizeof(u_wide_int)) {
- ui_num = (u_wide_int)((size_t) va_arg(ap, char *));
- s = ap_php_conv_p2(ui_num, 4, 'x',
- &num_buf[NUM_BUF_SIZE], &s_len);
- if (ui_num != 0) {
- *--s = 'x';
- *--s = '0';
- s_len += 2;
- }
- } else {
- s = "%p";
- s_len = 2;
- }
- pad_char = ' ';
- break;
-
-
- case NUL:
- /*
- * The last character of the format string was %.
- * We ignore it.
- */
- continue;
-
-
-fmt_error:
- php_error(E_ERROR, "Illegal length modifier specified '%c' in s[np]printf call", *fmt);
- /*
- * The default case is for unrecognized %'s.
- * We print %<char> to help the user identify what
- * option is not understood.
- * This is also useful in case the user wants to pass
- * the output of format_converter to another function
- * that understands some other %<char> (like syslog).
- * Note that we can't point s inside fmt because the
- * unknown <char> could be preceded by width etc.
- */
- default:
- char_buf[0] = '%';
- char_buf[1] = *fmt;
- s = char_buf;
- s_len = 2;
- pad_char = ' ';
- break;
- }
-
- if (prefix_char != NUL) {
- *--s = prefix_char;
- s_len++;
- }
- if (adjust_width && adjust == RIGHT && min_width > s_len) {
- if (pad_char == '0' && prefix_char != NUL) {
- INS_CHAR(*s, sp, bep, cc)
- s++;
- s_len--;
- min_width--;
- }
- PAD(min_width, s_len, pad_char);
- }
- /*
- * Print the string s.
- */
- for (i = s_len; i != 0; i--) {
- INS_CHAR(*s, sp, bep, cc);
- s++;
- }
-
- if (adjust_width && adjust == LEFT && min_width > s_len)
- PAD(min_width, s_len, pad_char);
- }
- fmt++;
- }
- odp->nextb = sp;
- return (cc);
-}
-
-
-/*
- * This is the general purpose conversion function.
- */
-static void strx_printv(int *ccp, char *buf, size_t len, const char *format,
- va_list ap)
-{
- buffy od;
- int cc;
-
- /*
- * First initialize the descriptor
- * Notice that if no length is given, we initialize buf_end to the
- * highest possible address.
- */
- if (len == 0) {
- od.buf_end = (char *) ~0;
- od.nextb = (char *) ~0;
- } else {
- od.buf_end = &buf[len-1];
- od.nextb = buf;
- }
-
- /*
- * Do the conversion
- */
- cc = format_converter(&od, format, ap);
- if (len != 0 && od.nextb <= od.buf_end)
- *(od.nextb) = '\0';
- if (ccp)
- *ccp = cc;
-}
-
-
-int ap_php_snprintf(char *buf, size_t len, const char *format,...)
-{
- int cc;
- va_list ap;
-
- va_start(ap, format);
- strx_printv(&cc, buf, len, format, ap);
- va_end(ap);
- return (cc);
-}
-
-
-int ap_php_vsnprintf(char *buf, size_t len, const char *format, va_list ap)
-{
- int cc;
-
- strx_printv(&cc, buf, len, format, ap);
- return (cc);
-}
-
-#endif /* HAVE_SNPRINTF */
-
-/*
- * 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/main/snprintf.h b/main/snprintf.h
deleted file mode 100644
index 76b7b6a6ca..0000000000
--- a/main/snprintf.h
+++ /dev/null
@@ -1,138 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Stig Sæther Bakken <ssb@php.net> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-/*
-
-Comparing: sprintf, snprintf, spprintf
-
-sprintf offers the ability to make a lot of failures since it does not know
- the size of the buffer it uses. Therefore usage of sprintf often
- results in possible entries for buffer overrun attacks. So please
- use this version only if you are sure the call is safe. sprintf
- allways terminstes the buffer it writes to.
-
-snprintf knows the buffers size and will not write behind it. But you will
- have to use either a static buffer or allocate a dynamic buffer
- before beeing able to call the function. In other words you must
- be sure that you really know the maximum size of the buffer required.
- A bad thing is having a big maximum while in most cases you would
- only need a small buffer. If the size of the resulting string is
- longer or equal to the buffer size than the buffer is not terminated.
-
-spprintf is the dynamical version of snprintf. It allocates the buffer in size
- as needed and allows a maximum setting as snprintf (turn this feature
- off by setting max_len to 0). spprintf is a little bit slower than
- snprintf and offers possible memory leakes if you miss freeing the
- buffer allocated by the function. Therfore this function should be
- used where either no maximum is known or the maximum is much bigger
- than normal size required. spprintf allways terminates the buffer.
-
-Example:
-
- #define MAX 1024 | #define MAX 1024 | #define MAX 1024
- char buffer[MAX] | char buffer[MAX] | char *buffer;
- | |
- | | // No need to initialize buffer:
- | | // spprintf ignores value of buffer
- sprintf(buffer, "test"); | snprintf(buffer, MAX, "test"); | spprintf(&buffer, MAX, "text");
- | | if (!buffer)
- | | return OUT_OF_MEMORY
- // sprintf allways terminates | // manual termination of | // spprintf allays terminates buffer
- // buffer | // buffer *IS* required |
- | buffer[MAX-1] = 0; |
- action_with_buffer(buffer); | action_with_buffer(buffer); | action_with_buffer(buffer);
- | | efree(buffer);
-*/
-
-#ifndef SNPRINTF_H
-#define SNPRINTF_H
-
-#if !defined(HAVE_SNPRINTF) || PHP_BROKEN_SNPRINTF
-int ap_php_snprintf(char *, size_t, const char *, ...) PHP_ATTRIBUTE_FORMAT(printf, 3, 4);
-#define snprintf ap_php_snprintf
-#endif
-
-#if !defined(HAVE_VSNPRINTF) || PHP_BROKEN_VSNPRINTF
-int ap_php_vsnprintf(char *, size_t, const char *, va_list ap) PHP_ATTRIBUTE_FORMAT(printf, 3, 0);
-#define vsnprintf ap_php_vsnprintf
-#endif
-
-#if PHP_BROKEN_SPRINTF
-int php_sprintf (char* s, const char* format, ...) PHP_ATTRIBUTE_FORMAT(printf, 2, 3);
-#define sprintf php_sprintf
-#endif
-
-typedef enum {
- NO = 0, YES = 1
-} boolean_e;
-
-typedef enum {
- LM_STD = 0,
-#if SIZEOF_INTMAX_T
- LM_INTMAX_T,
-#endif
-#if SIZEOF_PTRDIFF_T
- LM_PTRDIFF_T,
-#endif
-#if SIZEOF_LONG_LONG
- LM_LONG_LONG,
-#endif
- LM_SIZE_T,
- LM_LONG,
- LM_LONG_DOUBLE
-} length_modifier_e;
-
-extern char * ap_php_cvt(double arg, int ndigits, int *decpt, int *sign, int eflag, char *buf);
-extern char * ap_php_ecvt(double arg, int ndigits, int *decpt, int *sign, char *buf);
-extern char * ap_php_fcvt(double arg, int ndigits, int *decpt, int *sign, char *buf);
-extern char * ap_php_gcvt(double number, int ndigit, char *buf, boolean_e altform);
-
-#if SIZEOF_LONG_LONG_INT
-# define WIDE_INT long long int
-#elif SIZEOF_LONG_LONG
-# define WIDE_INT long long
-#elif _WIN64
-# define WIDE_INT __int64
-#else
-# define WIDE_INT long
-#endif
-typedef WIDE_INT wide_int;
-typedef unsigned WIDE_INT u_wide_int;
-
-typedef int bool_int;
-
-extern char * ap_php_conv_10(register wide_int num, register bool_int is_unsigned,
- register bool_int * is_negative, char *buf_end, register int *len);
-
-extern char * ap_php_conv_fp(register char format, register double num,
- boolean_e add_dp, int precision, bool_int * is_negative, char *buf, int *len);
-
-extern char * ap_php_conv_p2(register u_wide_int num, register int nbits,
- char format, char *buf_end, register int *len);
-
-
-#endif /* SNPRINTF_H */
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- */
diff --git a/main/spprintf.c b/main/spprintf.c
deleted file mode 100644
index cd286b6ad3..0000000000
--- a/main/spprintf.c
+++ /dev/null
@@ -1,756 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Marcus Boerger <helly@php.net> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-/* This is the spprintf implementation.
- * It has emerged from apache snprintf. See original header:
- */
-
-/* ====================================================================
- * Copyright (c) 1995-1998 The Apache Group. 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. All advertising materials mentioning features or use of this
- * software must display the following acknowledgment:
- * "This product includes software developed by the Apache Group
- * for use in the Apache HTTP server project (http://www.apache.org/)."
- *
- * 4. The names "Apache Server" and "Apache Group" must not be used to
- * endorse or promote products derived from this software without
- * prior written permission.
- *
- * 5. Redistributions of any form whatsoever must retain the following
- * acknowledgment:
- * "This product includes software developed by the Apache Group
- * for use in the Apache HTTP server project (http://www.apache.org/)."
- *
- * THIS SOFTWARE IS PROVIDED BY THE APACHE GROUP ``AS IS'' AND ANY
- * EXPRESSED 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 APACHE GROUP OR
- * ITS 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 software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Group and was originally based
- * on public domain software written at the National Center for
- * Supercomputing Applications, University of Illinois, Urbana-Champaign.
- * For more information on the Apache Group and the Apache HTTP server
- * project, please see <http://www.apache.org/>.
- *
- * This code is based on, and used with the permission of, the
- * SIO stdio-replacement strx_* functions by Panos Tsirigotis
- * <panos@alumni.cs.colorado.edu> for xinetd.
- */
-
-#include "php.h"
-
-#include <stddef.h>
-#include <stdio.h>
-#include <ctype.h>
-#include <sys/types.h>
-#include <stdarg.h>
-#include <string.h>
-#include <stdlib.h>
-#include <math.h>
-#ifdef HAVE_INTTYPES_H
-#include <inttypes.h>
-#endif
-
-#include "snprintf.h"
-
-#define FALSE 0
-#define TRUE 1
-#define NUL '\0'
-#define INT_NULL ((int *)0)
-
-#define S_NULL "(null)"
-#define S_NULL_LEN 6
-
-#define FLOAT_DIGITS 6
-#define EXPONENT_LENGTH 10
-
-#include "ext/standard/php_smart_str.h"
-
-/*
- * NUM_BUF_SIZE is the size of the buffer used for arithmetic conversions
- *
- * XXX: this is a magic number; do not decrease it
- */
-#define NUM_BUF_SIZE 512
-
-/*
- * The INS_CHAR macro inserts a character in the buffer.
- *
- * NOTE: Evaluation of the ch argument should not have any side-effects
- */
-#define INS_CHAR_NR(xbuf, ch) do { \
- smart_str_appendc(xbuf, ch); \
-} while (0)
-
-#define INS_STRING(xbuf, s, slen) do { \
- smart_str_appendl(xbuf, s, slen); \
-} while (0)
-
-#define INS_CHAR(xbuf, ch) \
- INS_CHAR_NR(xbuf, ch)
-
-/*
- * Macro that does padding. The padding is done by printing
- * the character ch.
- */
-#define PAD(xbuf, count, ch) do { \
- if ((count) > 0) { \
- size_t newlen; \
- smart_str_alloc(xbuf, (count), 0); \
- memset(xbuf->c + xbuf->len, ch, (count)); \
- xbuf->len += (count); \
- } \
-} while (0)
-
-#define NUM(c) (c - '0')
-
-#define STR_TO_DEC(str, num) do { \
- num = NUM(*str++); \
- while (isdigit((int)*str)) { \
- num *= 10; \
- num += NUM(*str++); \
- if (num >= INT_MAX / 10) { \
- while (isdigit((int)*str++)); \
- break; \
- } \
- } \
-} while (0)
-
-/*
- * This macro does zero padding so that the precision
- * requirement is satisfied. The padding is done by
- * adding '0's to the left of the string that is going
- * to be printed.
- */
-#define FIX_PRECISION(adjust, precision, s, s_len) do { \
- if (adjust) \
- while (s_len < precision) { \
- *--s = '0'; \
- s_len++; \
- } \
-} while (0)
-
-
-
-/*
- * Do format conversion placing the output in buffer
- */
-static void xbuf_format_converter(smart_str *xbuf, const char *fmt, va_list ap)
-{
- register char *s = NULL;
- char *q;
- int s_len;
-
- register int min_width = 0;
- int precision = 0;
- enum {
- LEFT, RIGHT
- } adjust;
- char pad_char;
- char prefix_char;
-
- double fp_num;
- wide_int i_num = (wide_int) 0;
- u_wide_int ui_num;
-
- char num_buf[NUM_BUF_SIZE];
- char char_buf[2]; /* for printing %% and %<unknown> */
-
- /*
- * Flag variables
- */
- length_modifier_e modifier;
- boolean_e alternate_form;
- boolean_e print_sign;
- boolean_e print_blank;
- boolean_e adjust_precision;
- boolean_e adjust_width;
- bool_int is_negative;
-
- while (*fmt) {
- if (*fmt != '%') {
- INS_CHAR(xbuf, *fmt);
- } else {
- /*
- * Default variable settings
- */
- adjust = RIGHT;
- alternate_form = print_sign = print_blank = NO;
- pad_char = ' ';
- prefix_char = NUL;
-
- fmt++;
-
- /*
- * Try to avoid checking for flags, width or precision
- */
- if (isascii((int)*fmt) && !islower((int)*fmt)) {
- /*
- * Recognize flags: -, #, BLANK, +
- */
- for (;; fmt++) {
- if (*fmt == '-')
- adjust = LEFT;
- else if (*fmt == '+')
- print_sign = YES;
- else if (*fmt == '#')
- alternate_form = YES;
- else if (*fmt == ' ')
- print_blank = YES;
- else if (*fmt == '0')
- pad_char = '0';
- else
- break;
- }
-
- /*
- * Check if a width was specified
- */
- if (isdigit((int)*fmt)) {
- STR_TO_DEC(fmt, min_width);
- adjust_width = YES;
- } else if (*fmt == '*') {
- min_width = va_arg(ap, int);
- fmt++;
- adjust_width = YES;
- if (min_width < 0) {
- adjust = LEFT;
- min_width = -min_width;
- }
- } else
- adjust_width = NO;
-
- /*
- * Check if a precision was specified
- *
- * XXX: an unreasonable amount of precision may be specified
- * resulting in overflow of num_buf. Currently we
- * ignore this possibility.
- */
- if (*fmt == '.') {
- adjust_precision = YES;
- fmt++;
- if (isdigit((int)*fmt)) {
- STR_TO_DEC(fmt, precision);
- } else if (*fmt == '*') {
- precision = va_arg(ap, int);
- fmt++;
- if (precision < 0)
- precision = 0;
- } else
- precision = 0;
- } else
- adjust_precision = NO;
- } else
- adjust_precision = adjust_width = NO;
-
- /*
- * Modifier check
- */
- switch (*fmt) {
- case 'L':
- fmt++;
- modifier = LM_LONG_DOUBLE;
- break;
- case 'l':
- fmt++;
-#if SIZEOF_LONG_LONG
- if (*fmt == 'l') {
- fmt++;
- modifier = LM_LONG_LONG;
- } else
-#endif
- modifier = LM_LONG;
- break;
- case 'z':
- fmt++;
- modifier = LM_SIZE_T;
- break;
- case 'j':
- fmt++;
-#if SIZEOF_INTMAX_T
- modifier = LM_INTMAX_T;
-#else
- modifier = LM_SIZE_T;
-#endif
- break;
- case 't':
- fmt++;
-#if SIZEOF_PTRDIFF_T
- modifier = LM_PTRDIFF_T;
-#else
- modifier = LM_SIZE_T;
-#endif
- break;
- case 'h':
- fmt++;
- if (*fmt == 'h') {
- fmt++;
- }
- /* these are promoted to int, so no break */
- default:
- modifier = LM_STD;
- break;
- }
-
- /*
- * Argument extraction and printing.
- * First we determine the argument type.
- * Then, we convert the argument to a string.
- * On exit from the switch, s points to the string that
- * must be printed, s_len has the length of the string
- * The precision requirements, if any, are reflected in s_len.
- *
- * NOTE: pad_char may be set to '0' because of the 0 flag.
- * It is reset to ' ' by non-numeric formats
- */
- switch (*fmt) {
- case 'u':
- switch(modifier) {
- default:
- i_num = (wide_int) va_arg(ap, unsigned int);
- break;
- case LM_LONG_DOUBLE:
- goto fmt_error;
- case LM_LONG:
- i_num = (wide_int) va_arg(ap, unsigned long int);
- break;
- case LM_SIZE_T:
- i_num = (wide_int) va_arg(ap, size_t);
- break;
-#if SIZEOF_LONG_LONG
- case LM_LONG_LONG:
- i_num = (wide_int) va_arg(ap, u_wide_int);
- break;
-#endif
-#if SIZEOF_INTMAX_T
- case LM_INTMAX_T:
- i_num = (wide_int) va_arg(ap, uintmax_t);
- break;
-#endif
-#if SIZEOF_PTRDIFF_T
- case LM_PTRDIFF_T:
- i_num = (wide_int) va_arg(ap, ptrdiff_t);
- break;
-#endif
- }
- /*
- * The rest also applies to other integer formats, so fall
- * into that case.
- */
- case 'd':
- case 'i':
- /*
- * Get the arg if we haven't already.
- */
- if ((*fmt) != 'u') {
- switch(modifier) {
- default:
- i_num = (wide_int) va_arg(ap, int);
- break;
- case LM_LONG_DOUBLE:
- goto fmt_error;
- case LM_LONG:
- i_num = (wide_int) va_arg(ap, long int);
- break;
- case LM_SIZE_T:
-#if SIZEOF_SSIZE_T
- i_num = (wide_int) va_arg(ap, ssize_t);
-#else
- i_num = (wide_int) va_arg(ap, size_t);
-#endif
- break;
-#if SIZEOF_LONG_LONG
- case LM_LONG_LONG:
- i_num = (wide_int) va_arg(ap, wide_int);
- break;
-#endif
-#if SIZEOF_INTMAX_T
- case LM_INTMAX_T:
- i_num = (wide_int) va_arg(ap, intmax_t);
- break;
-#endif
-#if SIZEOF_PTRDIFF_T
- case LM_PTRDIFF_T:
- i_num = (wide_int) va_arg(ap, ptrdiff_t);
- break;
-#endif
- }
- }
- s = ap_php_conv_10(i_num, (*fmt) == 'u', &is_negative,
- &num_buf[NUM_BUF_SIZE], &s_len);
- FIX_PRECISION(adjust_precision, precision, s, s_len);
-
- if (*fmt != 'u') {
- if (is_negative)
- prefix_char = '-';
- else if (print_sign)
- prefix_char = '+';
- else if (print_blank)
- prefix_char = ' ';
- }
- break;
-
-
- case 'o':
- switch(modifier) {
- default:
- ui_num = (u_wide_int) va_arg(ap, unsigned int);
- break;
- case LM_LONG_DOUBLE:
- goto fmt_error;
- case LM_LONG:
- ui_num = (u_wide_int) va_arg(ap, unsigned long int);
- break;
- case LM_SIZE_T:
- ui_num = (u_wide_int) va_arg(ap, size_t);
- break;
-#if SIZEOF_LONG_LONG
- case LM_LONG_LONG:
- ui_num = (u_wide_int) va_arg(ap, u_wide_int);
- break;
-#endif
-#if SIZEOF_INTMAX_T
- case LM_INTMAX_T:
- ui_num = (u_wide_int) va_arg(ap, uintmax_t);
- break;
-#endif
-#if SIZEOF_PTRDIFF_T
- case LM_PTRDIFF_T:
- ui_num = (u_wide_int) va_arg(ap, ptrdiff_t);
- break;
-#endif
- }
- s = ap_php_conv_p2(ui_num, 3, *fmt,
- &num_buf[NUM_BUF_SIZE], &s_len);
- FIX_PRECISION(adjust_precision, precision, s, s_len);
- if (alternate_form && *s != '0') {
- *--s = '0';
- s_len++;
- }
- break;
-
-
- case 'x':
- case 'X':
- switch(modifier) {
- default:
- ui_num = (u_wide_int) va_arg(ap, unsigned int);
- break;
- case LM_LONG_DOUBLE:
- goto fmt_error;
- case LM_LONG:
- ui_num = (u_wide_int) va_arg(ap, unsigned long int);
- break;
- case LM_SIZE_T:
- ui_num = (u_wide_int) va_arg(ap, size_t);
- break;
-#if SIZEOF_LONG_LONG
- case LM_LONG_LONG:
- ui_num = (u_wide_int) va_arg(ap, u_wide_int);
- break;
-#endif
-#if SIZEOF_INTMAX_T
- case LM_INTMAX_T:
- ui_num = (u_wide_int) va_arg(ap, uintmax_t);
- break;
-#endif
-#if SIZEOF_PTRDIFF_T
- case LM_PTRDIFF_T:
- ui_num = (u_wide_int) va_arg(ap, ptrdiff_t);
- break;
-#endif
- }
- s = ap_php_conv_p2(ui_num, 4, *fmt,
- &num_buf[NUM_BUF_SIZE], &s_len);
- FIX_PRECISION(adjust_precision, precision, s, s_len);
- if (alternate_form && i_num != 0) {
- *--s = *fmt; /* 'x' or 'X' */
- *--s = '0';
- s_len += 2;
- }
- break;
-
-
- case 's':
- s = va_arg(ap, char *);
- if (s != NULL) {
- s_len = strlen(s);
- if (adjust_precision && precision < s_len)
- s_len = precision;
- } else {
- s = S_NULL;
- s_len = S_NULL_LEN;
- }
- pad_char = ' ';
- break;
-
-
- case 'f':
- case 'e':
- case 'E':
- switch(modifier) {
- case LM_LONG_DOUBLE:
- fp_num = (double) va_arg(ap, long double);
- break;
- case LM_STD:
- fp_num = va_arg(ap, double);
- break;
- default:
- goto fmt_error;
- }
-
- if (zend_isnan(fp_num)) {
- s = "nan";
- s_len = 3;
- } else if (zend_isinf(fp_num)) {
- s = "inf";
- s_len = 3;
- } else {
- s = ap_php_conv_fp(*fmt, fp_num, alternate_form,
- (adjust_precision == NO) ? FLOAT_DIGITS : precision,
- &is_negative, &num_buf[1], &s_len);
- if (is_negative)
- prefix_char = '-';
- else if (print_sign)
- prefix_char = '+';
- else if (print_blank)
- prefix_char = ' ';
- }
- break;
-
-
- case 'g':
- case 'G':
- switch(modifier) {
- case LM_LONG_DOUBLE:
- fp_num = (double) va_arg(ap, long double);
- break;
- case LM_STD:
- fp_num = va_arg(ap, double);
- break;
- default:
- goto fmt_error;
- }
-
- if (zend_isnan(fp_num)) {
- s = "NAN";
- s_len = 3;
- break;
- } else if (zend_isinf(fp_num)) {
- if (fp_num > 0) {
- s = "INF";
- s_len = 3;
- } else {
- s = "-INF";
- s_len = 4;
- }
- break;
- }
-
- if (adjust_precision == NO)
- precision = FLOAT_DIGITS;
- else if (precision == 0)
- precision = 1;
- /*
- * * We use &num_buf[ 1 ], so that we have room for the sign
- */
- s = ap_php_gcvt(fp_num, precision, &num_buf[1],
- alternate_form);
- if (*s == '-')
- prefix_char = *s++;
- else if (print_sign)
- prefix_char = '+';
- else if (print_blank)
- prefix_char = ' ';
-
- s_len = strlen(s);
-
- if (alternate_form && (q = strchr(s, '.')) == NULL)
- s[s_len++] = '.';
- if (*fmt == 'G' && (q = strchr(s, 'e')) != NULL)
- *q = 'E';
- break;
-
-
- case 'c':
- char_buf[0] = (char) (va_arg(ap, int));
- s = &char_buf[0];
- s_len = 1;
- pad_char = ' ';
- break;
-
-
- case '%':
- char_buf[0] = '%';
- s = &char_buf[0];
- s_len = 1;
- pad_char = ' ';
- break;
-
-
- case 'n':
- *(va_arg(ap, int *)) = xbuf->len;
- break;
-
- /*
- * Always extract the argument as a "char *" pointer. We
- * should be using "void *" but there are still machines
- * that don't understand it.
- * If the pointer size is equal to the size of an unsigned
- * integer we convert the pointer to a hex number, otherwise
- * we print "%p" to indicate that we don't handle "%p".
- */
- case 'p':
- if (sizeof(char *) <= sizeof(u_wide_int)) {
- ui_num = (u_wide_int)((size_t) va_arg(ap, char *));
- s = ap_php_conv_p2(ui_num, 4, 'x',
- &num_buf[NUM_BUF_SIZE], &s_len);
- if (ui_num != 0) {
- *--s = 'x';
- *--s = '0';
- s_len += 2;
- }
- } else {
- s = "%p";
- s_len = 2;
- }
- pad_char = ' ';
- break;
-
-
- case NUL:
- /*
- * The last character of the format string was %.
- * We ignore it.
- */
- continue;
-
-
-fmt_error:
- php_error(E_ERROR, "Illegal length modifier specified '%c' in s[np]printf call", *fmt);
- /*
- * The default case is for unrecognized %'s.
- * We print %<char> to help the user identify what
- * option is not understood.
- * This is also useful in case the user wants to pass
- * the output of format_converter to another function
- * that understands some other %<char> (like syslog).
- * Note that we can't point s inside fmt because the
- * unknown <char> could be preceded by width etc.
- */
- default:
- char_buf[0] = '%';
- char_buf[1] = *fmt;
- s = char_buf;
- s_len = 2;
- pad_char = ' ';
- break;
- }
-
- if (prefix_char != NUL) {
- *--s = prefix_char;
- s_len++;
- }
- if (adjust_width && adjust == RIGHT && min_width > s_len) {
- if (pad_char == '0' && prefix_char != NUL) {
- INS_CHAR(xbuf, *s);
- s++;
- s_len--;
- min_width--;
- }
- PAD(xbuf, min_width - s_len, pad_char);
- }
- /*
- * Print the string s.
- */
- INS_STRING(xbuf, s, s_len);
-
- if (adjust_width && adjust == LEFT && min_width > s_len)
- PAD(xbuf, min_width - s_len, pad_char);
- }
- fmt++;
- }
- return;
-}
-
-
-/*
- * This is the general purpose conversion function.
- */
-PHPAPI int vspprintf(char **pbuf, size_t max_len, const char *format, va_list ap)
-{
- smart_str xbuf = {0};
-
- xbuf_format_converter(&xbuf, format, ap);
-
- if (max_len && xbuf.len > max_len) {
- xbuf.len = max_len;
- }
- smart_str_0(&xbuf);
-
- *pbuf = xbuf.c;
-
- return xbuf.len;
-}
-
-
-PHPAPI int spprintf(char **pbuf, size_t max_len, const char *format, ...)
-{
- int cc;
- va_list ap;
-
- va_start(ap, format);
- cc = vspprintf(pbuf, max_len, format, ap);
- va_end(ap);
- return (cc);
-}
-
-/*
- * 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/main/spprintf.h b/main/spprintf.h
deleted file mode 100644
index 467294c216..0000000000
--- a/main/spprintf.h
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Marcus Boerger <helly@php.net> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-/*
-
-The pbuf parameter of all spprintf version receives a pointer to the allocated
-buffer. This buffer must be freed manually after usage using efree() function.
-The buffer will allways be terminated by a zero character. When pbuf is NULL
-the function can be used to calculate the required size of the buffer but for
-that purpose snprintf is faster. When both pbuf and the return value are 0
-than you are out of memory.
-
-There is also snprintf: See difference explained in snprintf.h
-
-*/
-
-#ifndef SPPRINTF_H
-#define SPPRINTF_H
-
-#include "snprintf.h"
-
-BEGIN_EXTERN_C()
-PHPAPI int spprintf( char **pbuf, size_t max_len, const char *format, ...) PHP_ATTRIBUTE_FORMAT(printf, 3, 4);
-
-PHPAPI int vspprintf(char **pbuf, size_t max_len, const char *format, va_list ap) PHP_ATTRIBUTE_FORMAT(printf, 3, 0);
-END_EXTERN_C()
-
-#endif /* SNPRINTF_H */
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- */
diff --git a/main/streams/cast.c b/main/streams/cast.c
deleted file mode 100644
index 1a1d99101c..0000000000
--- a/main/streams/cast.c
+++ /dev/null
@@ -1,350 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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. |
- +----------------------------------------------------------------------+
- | Authors: Wez Furlong <wez@thebrainroom.com> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-#define _GNU_SOURCE
-#include "php.h"
-#include "php_globals.h"
-#include "php_network.h"
-#include "php_open_temporary_file.h"
-#include "ext/standard/file.h"
-#include <stddef.h>
-#include <fcntl.h>
-
-#include "php_streams_int.h"
-
-/* Under BSD, emulate fopencookie using funopen */
-#if HAVE_FUNOPEN
-typedef struct {
- int (*reader)(void *, char *, int);
- int (*writer)(void *, const char *, int);
- fpos_t (*seeker)(void *, fpos_t, int);
- int (*closer)(void *);
-} COOKIE_IO_FUNCTIONS_T;
-
-FILE *fopencookie(void *cookie, const char *mode, COOKIE_IO_FUNCTIONS_T *funcs)
-{
- return funopen(cookie, funcs->reader, funcs->writer, funcs->seeker, funcs->closer);
-}
-# define HAVE_FOPENCOOKIE 1
-# define PHP_STREAM_COOKIE_FUNCTIONS &stream_cookie_functions
-#elif HAVE_FOPENCOOKIE
-# define PHP_STREAM_COOKIE_FUNCTIONS stream_cookie_functions
-#endif
-
-/* {{{ STDIO with fopencookie */
-#if HAVE_FUNOPEN
-/* use our fopencookie emulation */
-static int stream_cookie_reader(void *cookie, char *buffer, int size)
-{
- int ret;
- TSRMLS_FETCH();
- ret = php_stream_read((php_stream*)cookie, buffer, size);
- return ret;
-}
-
-static int stream_cookie_writer(void *cookie, const char *buffer, int size)
-{
- TSRMLS_FETCH();
- return php_stream_write((php_stream *)cookie, (char *)buffer, size);
-}
-
-static fpos_t stream_cookie_seeker(void *cookie, off_t position, int whence)
-{
- TSRMLS_FETCH();
- return (fpos_t)php_stream_seek((php_stream *)cookie, position, whence);
-}
-
-static int stream_cookie_closer(void *cookie)
-{
- php_stream *stream = (php_stream*)cookie;
- TSRMLS_FETCH();
-
- /* prevent recursion */
- stream->fclose_stdiocast = PHP_STREAM_FCLOSE_NONE;
- return php_stream_close(stream);
-}
-
-#elif HAVE_FOPENCOOKIE
-static ssize_t stream_cookie_reader(void *cookie, char *buffer, size_t size)
-{
- ssize_t ret;
- TSRMLS_FETCH();
- ret = php_stream_read(((php_stream *)cookie), buffer, size);
- return ret;
-}
-
-static ssize_t stream_cookie_writer(void *cookie, const char *buffer, size_t size)
-{
- TSRMLS_FETCH();
- return php_stream_write(((php_stream *)cookie), (char *)buffer, size);
-}
-
-#ifdef COOKIE_SEEKER_USES_OFF64_T
-static int stream_cookie_seeker(void *cookie, __off64_t *position, int whence)
-{
- TSRMLS_FETCH();
-
- *position = php_stream_seek((php_stream *)cookie, (off_t)*position, whence);
-
- if (*position == -1)
- return -1;
- return 0;
-}
-#else
-static int stream_cookie_seeker(void *cookie, off_t position, int whence)
-{
- TSRMLS_FETCH();
- return php_stream_seek((php_stream *)cookie, position, whence);
-}
-#endif
-
-static int stream_cookie_closer(void *cookie)
-{
- php_stream *stream = (php_stream*)cookie;
- TSRMLS_FETCH();
-
- /* prevent recursion */
- stream->fclose_stdiocast = PHP_STREAM_FCLOSE_NONE;
- return php_stream_close(stream);
-}
-#endif /* elif HAVE_FOPENCOOKIE */
-
-#if HAVE_FOPENCOOKIE
-static COOKIE_IO_FUNCTIONS_T stream_cookie_functions =
-{
- stream_cookie_reader, stream_cookie_writer,
- stream_cookie_seeker, stream_cookie_closer
-};
-#else
-/* TODO: use socketpair() to emulate fopencookie, as suggested by Hartmut ? */
-#endif
-/* }}} */
-
-/* {{{ php_stream_cast */
-PHPAPI int _php_stream_cast(php_stream *stream, int castas, void **ret, int show_err TSRMLS_DC)
-{
- int flags = castas & PHP_STREAM_CAST_MASK;
- castas &= ~PHP_STREAM_CAST_MASK;
-
- /* synchronize our buffer (if possible) */
- if (ret && castas != PHP_STREAM_AS_FD_FOR_SELECT) {
- php_stream_flush(stream);
- if (stream->ops->seek && (stream->flags & PHP_STREAM_FLAG_NO_SEEK) == 0) {
- off_t dummy;
-
- stream->ops->seek(stream, stream->position, SEEK_SET, &dummy TSRMLS_CC);
- stream->readpos = stream->writepos = 0;
- }
- }
-
- /* filtered streams can only be cast as stdio, and only when fopencookie is present */
-
- if (castas == PHP_STREAM_AS_STDIO) {
- if (stream->stdiocast) {
- if (ret) {
- *(FILE**)ret = stream->stdiocast;
- }
- goto exit_success;
- }
-
- /* if the stream is a stdio stream let's give it a chance to respond
- * first, to avoid doubling up the layers of stdio with an fopencookie */
- if (php_stream_is(stream, PHP_STREAM_IS_STDIO) &&
- stream->ops->cast &&
- !php_stream_is_filtered(stream) &&
- stream->ops->cast(stream, castas, ret TSRMLS_CC) == SUCCESS)
- {
- goto exit_success;
- }
-
-#if HAVE_FOPENCOOKIE
- /* if just checking, say yes we can be a FILE*, but don't actually create it yet */
- if (ret == NULL)
- goto exit_success;
-
- *(FILE**)ret = fopencookie(stream, stream->mode, PHP_STREAM_COOKIE_FUNCTIONS);
-
- if (*ret != NULL) {
- off_t pos;
-
- stream->fclose_stdiocast = PHP_STREAM_FCLOSE_FOPENCOOKIE;
-
- /* If the stream position is not at the start, we need to force
- * the stdio layer to believe it's real location. */
- pos = php_stream_tell(stream);
- if (pos > 0)
- fseek(*ret, pos, SEEK_SET);
-
- goto exit_success;
- }
-
- /* must be either:
- a) programmer error
- b) no memory
- -> lets bail
- */
- php_error_docref(NULL TSRMLS_CC, E_ERROR, "fopencookie failed");
- return FAILURE;
-#endif
-
- if (!php_stream_is_filtered(stream) && stream->ops->cast && stream->ops->cast(stream, castas, NULL TSRMLS_CC) == SUCCESS) {
- if (FAILURE == stream->ops->cast(stream, castas, ret TSRMLS_CC)) {
- return FAILURE;
- }
- goto exit_success;
- } else if (flags & PHP_STREAM_CAST_TRY_HARD) {
- php_stream *newstream;
-
- newstream = php_stream_fopen_tmpfile();
- if (newstream) {
- size_t copied = php_stream_copy_to_stream(stream, newstream, PHP_STREAM_COPY_ALL);
-
- if (copied == 0) {
- php_stream_close(newstream);
- } else {
- int retcode = php_stream_cast(newstream, castas | flags, ret, show_err);
-
- if (retcode == SUCCESS)
- rewind(*(FILE**)ret);
-
- /* do some specialized cleanup */
- if ((flags & PHP_STREAM_CAST_RELEASE)) {
- php_stream_free(stream, PHP_STREAM_FREE_CLOSE_CASTED);
- }
-
- return retcode;
- }
- }
- }
- }
-
- if (php_stream_is_filtered(stream)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "cannot cast a filtered stream on this system");
- return FAILURE;
- } else if (stream->ops->cast && stream->ops->cast(stream, castas, ret TSRMLS_CC) == SUCCESS) {
- goto exit_success;
- }
-
- if (show_err) {
- /* these names depend on the values of the PHP_STREAM_AS_XXX defines in php_streams.h */
- static const char *cast_names[4] = {
- "STDIO FILE*", "File Descriptor", "Socket Descriptor", "select()able descriptor"
- };
-
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "cannot represent a stream of type %s as a %s",
- stream->ops->label,
- cast_names[castas]
- );
- }
-
- return FAILURE;
-
-exit_success:
-
- if ((stream->writepos - stream->readpos) > 0 &&
- stream->fclose_stdiocast != PHP_STREAM_FCLOSE_FOPENCOOKIE &&
- (flags & PHP_STREAM_CAST_INTERNAL) == 0) {
- /* the data we have buffered will be lost to the third party library that
- * will be accessing the stream. Emit a warning so that the end-user will
- * know that they should try something else */
-
- php_error_docref(NULL TSRMLS_CC, E_WARNING,
- "%ld bytes of buffered data lost during stream conversion!",
- stream->writepos - stream->readpos);
- }
-
- if (castas == PHP_STREAM_AS_STDIO && ret)
- stream->stdiocast = *(FILE**)ret;
-
- if (flags & PHP_STREAM_CAST_RELEASE) {
- php_stream_free(stream, PHP_STREAM_FREE_CLOSE_CASTED);
- }
-
- return SUCCESS;
-
-}
-/* }}} */
-
-/* {{{ php_stream_open_wrapper_as_file */
-PHPAPI FILE * _php_stream_open_wrapper_as_file(char *path, char *mode, int options, char **opened_path STREAMS_DC TSRMLS_DC)
-{
- FILE *fp = NULL;
- php_stream *stream = NULL;
-
- stream = php_stream_open_wrapper_rel(path, mode, options|STREAM_WILL_CAST, opened_path);
-
- if (stream == NULL)
- return NULL;
-
- if (php_stream_cast(stream, PHP_STREAM_AS_STDIO|PHP_STREAM_CAST_TRY_HARD|PHP_STREAM_CAST_RELEASE,
- (void**)&fp, REPORT_ERRORS) == FAILURE)
- {
- php_stream_close(stream);
- if (opened_path && *opened_path)
- efree(*opened_path);
- return NULL;
- }
- return fp;
-}
-/* }}} */
-
-/* {{{ php_stream_make_seekable */
-PHPAPI int _php_stream_make_seekable(php_stream *origstream, php_stream **newstream, int flags STREAMS_DC TSRMLS_DC)
-{
- assert(newstream != NULL);
-
- *newstream = NULL;
-
- if (((flags & PHP_STREAM_FORCE_CONVERSION) == 0) && origstream->ops->seek != NULL) {
- *newstream = origstream;
- return PHP_STREAM_UNCHANGED;
- }
-
- /* Use a tmpfile and copy the old streams contents into it */
-
- if (flags & PHP_STREAM_PREFER_STDIO)
- *newstream = php_stream_fopen_tmpfile();
- else
- *newstream = php_stream_temp_new();
-
- if (*newstream == NULL)
- return PHP_STREAM_FAILED;
-
- if (php_stream_copy_to_stream(origstream, *newstream, PHP_STREAM_COPY_ALL) == 0) {
- php_stream_close(*newstream);
- *newstream = NULL;
- return PHP_STREAM_CRITICAL;
- }
-
- php_stream_close(origstream);
- php_stream_seek(*newstream, 0, SEEK_SET);
-
- return PHP_STREAM_RELEASED;
-}
-/* }}} */
-
-/*
- * 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/main/streams/filter.c b/main/streams/filter.c
deleted file mode 100644
index cc6e62292f..0000000000
--- a/main/streams/filter.c
+++ /dev/null
@@ -1,434 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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. |
- +----------------------------------------------------------------------+
- | Authors: Wez Furlong <wez@thebrainroom.com> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-#include "php.h"
-#include "php_globals.h"
-#include "php_network.h"
-#include "php_open_temporary_file.h"
-#include "ext/standard/file.h"
-#include <stddef.h>
-#include <fcntl.h>
-
-#include "php_streams_int.h"
-
-/* Global filter hash, copied to FG(stream_filters) on registration of volatile filter */
-static HashTable stream_filters_hash;
-
-/* Should only be used during core initialization */
-PHPAPI HashTable *php_get_stream_filters_hash_global()
-{
- return &stream_filters_hash;
-}
-
-/* Normal hash selection/retrieval call */
-PHPAPI HashTable *_php_get_stream_filters_hash(TSRMLS_D)
-{
- return (FG(stream_filters) ? FG(stream_filters) : &stream_filters_hash);
-}
-
-/* API for registering GLOBAL filters */
-PHPAPI int php_stream_filter_register_factory(const char *filterpattern, php_stream_filter_factory *factory TSRMLS_DC)
-{
- return zend_hash_add(&stream_filters_hash, (char*)filterpattern, strlen(filterpattern), factory, sizeof(*factory), NULL);
-}
-
-PHPAPI int php_stream_filter_unregister_factory(const char *filterpattern TSRMLS_DC)
-{
- return zend_hash_del(&stream_filters_hash, (char*)filterpattern, strlen(filterpattern));
-}
-
-/* API for registering VOLATILE wrappers */
-PHPAPI int php_stream_filter_register_factory_volatile(const char *filterpattern, php_stream_filter_factory *factory TSRMLS_DC)
-{
- if (!FG(stream_filters)) {
- php_stream_filter_factory tmpfactory;
-
- FG(stream_filters) = emalloc(sizeof(HashTable));
- zend_hash_init(FG(stream_filters), 0, NULL, NULL, 1);
- zend_hash_copy(FG(stream_filters), &stream_filters_hash, NULL, &tmpfactory, sizeof(php_stream_filter_factory));
- }
-
- return zend_hash_add(FG(stream_filters), (char*)filterpattern, strlen(filterpattern), factory, sizeof(*factory), NULL);
-}
-
-/* Buckets */
-
-PHPAPI php_stream_bucket *php_stream_bucket_new(php_stream *stream, char *buf, size_t buflen, int own_buf, int buf_persistent TSRMLS_DC)
-{
- int is_persistent = php_stream_is_persistent(stream);
- php_stream_bucket *bucket;
-
- bucket = (php_stream_bucket*)pemalloc(sizeof(php_stream_bucket), is_persistent);
-
- if (bucket == NULL) {
- return NULL;
- }
-
- bucket->next = bucket->prev = NULL;
-
- if (is_persistent && !buf_persistent) {
- /* all data in a persistent bucket must also be persistent */
- bucket->buf = pemalloc(buflen, 1);
-
- if (bucket->buf == NULL) {
- pefree(bucket, 1);
- return NULL;
- }
-
- memcpy(bucket->buf, buf, buflen);
- bucket->buflen = buflen;
- bucket->own_buf = 1;
- } else {
- bucket->buf = buf;
- bucket->buflen = buflen;
- bucket->own_buf = own_buf;
- }
- bucket->is_persistent = is_persistent;
- bucket->refcount = 1;
-
- return bucket;
-}
-
-/* Given a bucket, returns a version of that bucket with a writeable buffer.
- * If the original bucket has a refcount of 1 and owns its buffer, then it
- * is returned unchanged.
- * Otherwise, a copy of the buffer is made.
- * In both cases, the original bucket is unlinked from its brigade.
- * If a copy is made, the original bucket is delref'd.
- * */
-PHPAPI php_stream_bucket *php_stream_bucket_make_writeable(php_stream_bucket *bucket TSRMLS_DC)
-{
- php_stream_bucket *retval;
-
- php_stream_bucket_unlink(bucket TSRMLS_CC);
-
- if (bucket->refcount == 1 && bucket->own_buf) {
- return bucket;
- }
-
- retval = (php_stream_bucket*)pemalloc(sizeof(php_stream_bucket), bucket->is_persistent);
- memcpy(retval, bucket, sizeof(*retval));
-
- retval->buf = pemalloc(retval->buflen, retval->is_persistent);
- memcpy(retval->buf, bucket->buf, retval->buflen);
-
- retval->refcount = 1;
- retval->own_buf = 1;
-
- php_stream_bucket_delref(bucket TSRMLS_CC);
-
- return retval;
-}
-
-PHPAPI int php_stream_bucket_split(php_stream_bucket *in, php_stream_bucket **left, php_stream_bucket **right, size_t length TSRMLS_DC)
-{
- *left = (php_stream_bucket*)pecalloc(1, sizeof(php_stream_bucket), in->is_persistent);
- *right = (php_stream_bucket*)pecalloc(1, sizeof(php_stream_bucket), in->is_persistent);
-
- if (*left == NULL || *right == NULL) {
- goto exit_fail;
- }
-
- (*left)->buf = pemalloc(length, in->is_persistent);
- (*left)->buflen = length;
- memcpy((*left)->buf, in->buf, length);
- (*left)->refcount = 1;
- (*left)->own_buf = 1;
- (*left)->is_persistent = in->is_persistent;
-
- (*right)->buflen = in->buflen - length;
- (*right)->buf = pemalloc((*right)->buflen, in->is_persistent);
- memcpy((*right)->buf, in->buf + length, (*right)->buflen);
- (*right)->refcount = 1;
- (*right)->own_buf = 1;
- (*right)->is_persistent = in->is_persistent;
-
- return SUCCESS;
-
-exit_fail:
- if (*right) {
- if ((*right)->buf) {
- pefree((*right)->buf, in->is_persistent);
- }
- pefree(*right, in->is_persistent);
- }
- if (*left) {
- if ((*left)->buf) {
- pefree((*left)->buf, in->is_persistent);
- }
- pefree(*left, in->is_persistent);
- }
- return FAILURE;
-}
-
-PHPAPI void php_stream_bucket_delref(php_stream_bucket *bucket TSRMLS_DC)
-{
- if (--bucket->refcount == 0) {
- if (bucket->own_buf) {
- pefree(bucket->buf, bucket->is_persistent);
- }
- pefree(bucket, bucket->is_persistent);
- }
-}
-
-PHPAPI void php_stream_bucket_prepend(php_stream_bucket_brigade *brigade, php_stream_bucket *bucket TSRMLS_DC)
-{
- bucket->next = brigade->head;
- bucket->prev = NULL;
-
- if (brigade->head) {
- brigade->head->prev = bucket;
- } else {
- brigade->tail = bucket;
- }
- brigade->head = bucket;
- bucket->brigade = brigade;
-}
-
-PHPAPI void php_stream_bucket_append(php_stream_bucket_brigade *brigade, php_stream_bucket *bucket TSRMLS_DC)
-{
- bucket->prev = brigade->tail;
- bucket->next = NULL;
-
- if (brigade->tail) {
- brigade->tail->next = bucket;
- } else {
- brigade->head = bucket;
- }
- brigade->tail = bucket;
- bucket->brigade = brigade;
-}
-
-PHPAPI void php_stream_bucket_unlink(php_stream_bucket *bucket TSRMLS_DC)
-{
- if (bucket->prev) {
- bucket->prev->next = bucket->next;
- } else {
- bucket->brigade->head = bucket->next;
- }
- if (bucket->next) {
- bucket->next->prev = bucket->prev;
- } else {
- bucket->brigade->tail = bucket->prev;
- }
- bucket->brigade = NULL;
- bucket->next = bucket->prev = NULL;
-}
-
-
-
-
-
-
-
-
-/* We allow very simple pattern matching for filter factories:
- * if "convert.charset.utf-8/sjis" is requested, we search first for an exact
- * match. If that fails, we try "convert.charset.*", then "convert.*"
- * This means that we don't need to clog up the hashtable with a zillion
- * charsets (for example) but still be able to provide them all as filters */
-PHPAPI php_stream_filter *php_stream_filter_create(const char *filtername, zval *filterparams, int persistent TSRMLS_DC)
-{
- HashTable *filter_hash = (FG(stream_filters) ? FG(stream_filters) : &stream_filters_hash);
- php_stream_filter_factory *factory;
- php_stream_filter *filter = NULL;
- int n;
- char *period;
-
- n = strlen(filtername);
-
- if (SUCCESS == zend_hash_find(filter_hash, (char*)filtername, n, (void**)&factory)) {
- filter = factory->create_filter(filtername, filterparams, persistent TSRMLS_CC);
- } else if ((period = strrchr(filtername, '.'))) {
- /* try a wildcard */
- char *wildname;
-
- wildname = estrdup(filtername);
- period = wildname + (period - filtername);
- while (period && !filter) {
- *period = '\0';
- strcat(wildname, ".*");
- if (SUCCESS == zend_hash_find(filter_hash, wildname, strlen(wildname), (void**)&factory)) {
- filter = factory->create_filter(filtername, filterparams, persistent TSRMLS_CC);
- }
-
- *period = '\0';
- period = strrchr(wildname, '.');
- }
- efree(wildname);
- }
-
- if (filter == NULL) {
- /* TODO: these need correct docrefs */
- if (factory == NULL)
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "unable to locate filter \"%s\"", filtername);
- else
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "unable to create or locate filter \"%s\"", filtername);
- }
-
- return filter;
-}
-
-PHPAPI php_stream_filter *_php_stream_filter_alloc(php_stream_filter_ops *fops, void *abstract, int persistent STREAMS_DC TSRMLS_DC)
-{
- php_stream_filter *filter;
-
- filter = (php_stream_filter*) pemalloc_rel_orig(sizeof(php_stream_filter), persistent);
- memset(filter, 0, sizeof(php_stream_filter));
-
- filter->fops = fops;
- filter->abstract = abstract;
- filter->is_persistent = persistent;
-
- return filter;
-}
-
-PHPAPI void php_stream_filter_free(php_stream_filter *filter TSRMLS_DC)
-{
- if (filter->fops->dtor)
- filter->fops->dtor(filter TSRMLS_CC);
- pefree(filter, filter->is_persistent);
-}
-
-PHPAPI void _php_stream_filter_prepend(php_stream_filter_chain *chain, php_stream_filter *filter TSRMLS_DC)
-{
- filter->next = chain->head;
- filter->prev = NULL;
-
- if (chain->head) {
- chain->head->prev = filter;
- } else {
- chain->tail = filter;
- }
- chain->head = filter;
- filter->chain = chain;
-}
-
-PHPAPI void _php_stream_filter_append(php_stream_filter_chain *chain, php_stream_filter *filter TSRMLS_DC)
-{
- php_stream *stream = chain->stream;
-
- filter->prev = chain->tail;
- filter->next = NULL;
- if (chain->tail) {
- chain->tail->next = filter;
- } else {
- chain->head = filter;
- }
- chain->tail = filter;
- filter->chain = chain;
-
- if (&(stream->readfilters) == chain && (stream->writepos - stream->readpos) > 0) {
- /* Let's going ahead and wind anything in the buffer through this filter */
- php_stream_bucket_brigade brig_in = { NULL, NULL }, brig_out = { NULL, NULL };
- php_stream_bucket_brigade *brig_inp = &brig_in, *brig_outp = &brig_out;
- php_stream_filter_status_t status;
- php_stream_bucket *bucket;
- size_t consumed = 0;
-
- bucket = php_stream_bucket_new(stream, stream->readbuf + stream->readpos, stream->writepos - stream->readpos, 0, 0 TSRMLS_CC);
- php_stream_bucket_append(brig_inp, bucket TSRMLS_CC);
- status = filter->fops->filter(stream, filter, brig_inp, brig_outp, &consumed, PSFS_FLAG_NORMAL TSRMLS_CC);
-
- if (stream->readpos + consumed > stream->writepos || consumed < 0) {
- /* No behaving filter should cause this. */
- status = PSFS_ERR_FATAL;
- }
-
- switch (status) {
- case PSFS_ERR_FATAL:
- /* If this first cycle simply fails then there's something wrong with the filter.
- Pull the filter off the chain and leave the read buffer alone. */
- if (chain->head == filter) {
- chain->head = NULL;
- chain->tail = NULL;
- } else {
- filter->prev->next = NULL;
- chain->tail = filter->prev;
- }
- php_stream_bucket_unlink(bucket TSRMLS_CC);
- php_stream_bucket_delref(bucket TSRMLS_CC);
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Filter failed to process pre-buffered data. Not adding to filterchain.");
- break;
- case PSFS_FEED_ME:
- /* We don't actually need data yet,
- leave this filter in a feed me state until data is needed.
- Reset stream's internal read buffer since the filter is "holding" it. */
- stream->readpos = 0;
- stream->writepos = 0;
- break;
- case PSFS_PASS_ON:
- /* Put any filtered data onto the readbuffer stack.
- Previously read data has been at least partially consumed. */
- stream->readpos += consumed;
-
- if (stream->writepos == stream->readpos) {
- /* Entirely consumed */
- stream->writepos = 0;
- stream->readpos = 0;
- }
-
- while (brig_outp->head) {
- bucket = brig_outp->head;
- /* Grow buffer to hold this bucket if need be.
- TODO: See warning in main/stream/streams.c::php_stream_fill_read_buffer */
- if (stream->readbuflen - stream->writepos < bucket->buflen) {
- stream->readbuflen += bucket->buflen;
- stream->readbuf = perealloc(stream->readbuf, stream->readbuflen, stream->is_persistent);
- }
- memcpy(stream->readbuf + stream->writepos, bucket->buf, bucket->buflen);
- stream->writepos += bucket->buflen;
-
- php_stream_bucket_unlink(bucket TSRMLS_CC);
- php_stream_bucket_delref(bucket TSRMLS_CC);
- }
- break;
- }
- }
-
-}
-
-PHPAPI php_stream_filter *php_stream_filter_remove(php_stream_filter *filter, int call_dtor TSRMLS_DC)
-{
- if (filter->prev) {
- filter->prev->next = filter->next;
- } else {
- filter->chain->head = filter->next;
- }
- if (filter->next) {
- filter->next->prev = filter->prev;
- } else {
- filter->chain->tail = filter->prev;
- }
- if (call_dtor) {
- php_stream_filter_free(filter TSRMLS_CC);
- return NULL;
- }
- return filter;
-}
-
-/*
- * 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/main/streams/memory.c b/main/streams/memory.c
deleted file mode 100644
index a61bd6619e..0000000000
--- a/main/streams/memory.c
+++ /dev/null
@@ -1,473 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Marcus Boerger <helly@php.net> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-#define _GNU_SOURCE
-#include "php.h"
-
-/* Memory streams use a dynamic memory buffer to emulate a stream.
- * You can use php_stream_memory_open to create a readonly stream
- * from an existing memory buffer.
- */
-
-/* Temp streams are streams that uses memory streams as long their
- * size is less than a given memory amount. When a write operation
- * exceeds that limit the content is written to a temporary file.
- */
-
-/* {{{ ------- MEMORY stream implementation -------*/
-
-typedef struct {
- char *data;
- size_t fpos;
- size_t fsize;
- size_t smax;
- int mode;
-} php_stream_memory_data;
-
-
-/* {{{ */
-static size_t php_stream_memory_write(php_stream *stream, const char *buf, size_t count TSRMLS_DC)
-{
- php_stream_memory_data *ms;
-
- assert(stream != NULL);
- ms = stream->abstract;
- assert(ms != NULL);
-
- if (ms->mode & TEMP_STREAM_READONLY) {
- return 0;
- }
- if (ms->fpos + count > ms->fsize) {
- char *tmp;
-
- if (!ms->data) {
- tmp = emalloc(ms->fpos + count);
- } else {
- tmp = erealloc(ms->data, ms->fpos + count);
- }
- if (!tmp) {
- count = ms->fsize - ms->fpos + 1;
- } else {
- ms->data = tmp;
- ms->fsize = ms->fpos + count;
- }
- }
- if (!ms->data)
- count = 0;
- if (count) {
- assert(buf!= NULL);
- memcpy(ms->data+ms->fpos, (char*)buf, count);
- ms->fpos += count;
- }
- return count;
-}
-/* }}} */
-
-
-/* {{{ */
-static size_t php_stream_memory_read(php_stream *stream, char *buf, size_t count TSRMLS_DC)
-{
- php_stream_memory_data *ms;
-
- assert(stream != NULL);
- ms = stream->abstract;
- assert(ms != NULL);
-
- if (ms->fpos + count > ms->fsize) {
- count = ms->fsize - ms->fpos;
- }
- if (count) {
- assert(ms->data!= NULL);
- assert(buf!= NULL);
- memcpy(buf, ms->data+ms->fpos, count);
- ms->fpos += count;
- } else {
- stream->eof = 1;
- }
- return count;
-}
-/* }}} */
-
-
-/* {{{ */
-static int php_stream_memory_close(php_stream *stream, int close_handle TSRMLS_DC)
-{
- php_stream_memory_data *ms;
-
- assert(stream != NULL);
- ms = stream->abstract;
- assert(ms != NULL);
-
- if (ms->data && close_handle && ms->mode != TEMP_STREAM_READONLY) {
- efree(ms->data);
- }
- efree(ms);
- return 0;
-}
-/* }}} */
-
-
-/* {{{ */
-static int php_stream_memory_flush(php_stream *stream TSRMLS_DC)
-{
- /* nothing to do here */
- return 0;
-}
-/* }}} */
-
-
-/* {{{ */
-static int php_stream_memory_seek(php_stream *stream, off_t offset, int whence, off_t *newoffs TSRMLS_DC)
-{
- php_stream_memory_data *ms;
-
- assert(stream != NULL);
- ms = stream->abstract;
- assert(ms != NULL);
-
- switch(whence) {
- case SEEK_CUR:
- if (offset < 0) {
- if (ms->fpos < (size_t)(-offset)) {
- ms->fpos = 0;
- /*return EINVAL;*/
- } else {
- ms->fpos = ms->fpos + offset;
- }
- } else {
- if (ms->fpos < (size_t)(offset)) {
- ms->fpos = ms->fsize;
- /*return EINVAL;*/
- } else {
- ms->fpos = ms->fpos + offset;
- }
- }
- *newoffs = ms->fpos;
- return 0;
- case SEEK_SET:
- if (ms->fsize < (size_t)(offset)) {
- ms->fpos = ms->fsize;
- /*return EINVAL;*/
- } else {
- ms->fpos = offset;
- }
- *newoffs = ms->fpos;
- return 0;
- case SEEK_END:
- if (offset > 0) {
- ms->fpos = ms->fsize;
- /*return EINVAL;*/
- } else if (ms->fpos < (size_t)(-offset)) {
- ms->fpos = 0;
- /*return EINVAL;*/
- } else {
- ms->fpos = ms->fsize + offset;
- }
- *newoffs = ms->fpos;
- return 0;
- default:
- return 0;
- /*return EINVAL;*/
- }
-}
-/* }}} */
-
-/* {{{ */
-static int php_stream_memory_cast(php_stream *stream, int castas, void **ret TSRMLS_DC)
-{
- return FAILURE;
-}
-/* }}} */
-
-
-php_stream_ops php_stream_memory_ops = {
- php_stream_memory_write, php_stream_memory_read,
- php_stream_memory_close, php_stream_memory_flush,
- "MEMORY",
- php_stream_memory_seek,
- php_stream_memory_cast,
- NULL, /* stat */
- NULL /* set_option */
-};
-
-
-/* {{{ */
-PHPAPI php_stream *_php_stream_memory_create(int mode STREAMS_DC TSRMLS_DC)
-{
- php_stream_memory_data *self;
- php_stream *stream;
-
- self = emalloc(sizeof(*self));
- self->data = NULL;
- self->fpos = 0;
- self->fsize = 0;
- self->smax = -1;
- self->mode = mode;
-
- stream = php_stream_alloc(&php_stream_memory_ops, self, 0, "r+b");
- stream->flags |= PHP_STREAM_FLAG_NO_BUFFER;
- return stream;
-}
-/* }}} */
-
-
-/* {{{ */
-PHPAPI php_stream *_php_stream_memory_open(int mode, char *buf, size_t length STREAMS_DC TSRMLS_DC)
-{
- php_stream *stream;
- php_stream_memory_data *ms;
-
- if ((stream = php_stream_memory_create_rel(mode)) != NULL) {
- ms = stream->abstract;
-
- if (mode == TEMP_STREAM_READONLY) {
- /* use the buffer directly */
- ms->data = buf;
- ms->fsize = length;
- } else {
- if (length) {
- assert(buf != NULL);
- php_stream_write(stream, buf, length);
- }
- }
- }
- return stream;
-}
-/* }}} */
-
-
-/* {{{ */
-PHPAPI char *_php_stream_memory_get_buffer(php_stream *stream, size_t *length STREAMS_DC TSRMLS_DC)
-{
- php_stream_memory_data *ms;
-
- assert(stream != NULL);
- ms = stream->abstract;
- assert(ms != NULL);
- assert(length != 0);
-
- *length = ms->fsize;
- return ms->data;
-}
-/* }}} */
-
-/* }}} */
-
-/* {{{ ------- TEMP stream implementation -------*/
-
-typedef struct {
- php_stream *innerstream;
- size_t smax;
- int mode;
-} php_stream_temp_data;
-
-
-/* {{{ */
-static size_t php_stream_temp_write(php_stream *stream, const char *buf, size_t count TSRMLS_DC)
-{
- php_stream_temp_data *ts;
-
- assert(stream != NULL);
- ts = stream->abstract;
- assert(ts != NULL);
-
- if (php_stream_is(ts->innerstream, PHP_STREAM_IS_MEMORY)) {
- size_t memsize;
- char *membuf = php_stream_memory_get_buffer(ts->innerstream, &memsize);
-
- if (memsize + count >= ts->smax) {
- php_stream *file = php_stream_fopen_tmpfile();
- php_stream_write(file, membuf, memsize);
- php_stream_close(ts->innerstream);
- ts->innerstream = file;
- }
- }
- return php_stream_write(ts->innerstream, buf, count);
-}
-/* }}} */
-
-
-/* {{{ */
-static size_t php_stream_temp_read(php_stream *stream, char *buf, size_t count TSRMLS_DC)
-{
- php_stream_temp_data *ts;
-
- assert(stream != NULL);
- ts = stream->abstract;
- assert(ts != NULL);
-
- return php_stream_read(ts->innerstream, buf, count);
-}
-/* }}} */
-
-
-/* {{{ */
-static int php_stream_temp_close(php_stream *stream, int close_handle TSRMLS_DC)
-{
- php_stream_temp_data *ts;
- int ret;
-
- assert(stream != NULL);
- ts = stream->abstract;
- assert(ts != NULL);
-
- ret = php_stream_free(ts->innerstream, PHP_STREAM_FREE_CLOSE | (close_handle ? 0 : PHP_STREAM_FREE_PRESERVE_HANDLE));
-
- efree(ts);
-
- return ret;
-}
-/* }}} */
-
-
-/* {{{ */
-static int php_stream_temp_flush(php_stream *stream TSRMLS_DC)
-{
- php_stream_temp_data *ts;
-
- assert(stream != NULL);
- ts = stream->abstract;
- assert(ts != NULL);
-
- return php_stream_flush(ts->innerstream);
-}
-/* }}} */
-
-
-/* {{{ */
-static int php_stream_temp_seek(php_stream *stream, off_t offset, int whence, off_t *newoffs TSRMLS_DC)
-{
- php_stream_temp_data *ts;
- int ret;
-
- assert(stream != NULL);
- ts = stream->abstract;
- assert(ts != NULL);
-
- ret = php_stream_seek(ts->innerstream, offset, whence);
- *newoffs = php_stream_tell(ts->innerstream);
-
- return ret;
-}
-/* }}} */
-
-/* {{{ */
-static int php_stream_temp_cast(php_stream *stream, int castas, void **ret TSRMLS_DC)
-{
- php_stream_temp_data *ts;
- php_stream *file;
- size_t memsize;
- char *membuf;
- off_t pos;
-
- assert(stream != NULL);
- ts = stream->abstract;
- assert(ts != NULL);
-
- if (php_stream_is(ts->innerstream, PHP_STREAM_IS_STDIO)) {
- return php_stream_cast(ts->innerstream, castas, ret, 0);
- }
-
- /* we are still using a memory based backing. If they are if we can be
- * a FILE*, say yes because we can perform the conversion.
- * If they actually want to perform the conversion, we need to switch
- * the memory stream to a tmpfile stream */
-
- if (ret == NULL && castas == PHP_STREAM_AS_STDIO) {
- return SUCCESS;
- }
-
- /* say "no" to other stream forms */
- if (ret == NULL) {
- return FAILURE;
- }
-
- /* perform the conversion and then pass the request on to the innerstream */
- membuf = php_stream_memory_get_buffer(ts->innerstream, &memsize);
- file = php_stream_fopen_tmpfile();
- php_stream_write(file, membuf, memsize);
- pos = php_stream_tell(ts->innerstream);
-
- php_stream_close(ts->innerstream);
- ts->innerstream = file;
- php_stream_seek(ts->innerstream, pos, SEEK_SET);
-
- return php_stream_cast(ts->innerstream, castas, ret, 1);
-}
-/* }}} */
-
-php_stream_ops php_stream_temp_ops = {
- php_stream_temp_write, php_stream_temp_read,
- php_stream_temp_close, php_stream_temp_flush,
- "TEMP",
- php_stream_temp_seek,
- php_stream_temp_cast,
- NULL, /* stat */
- NULL /* set_option */
-};
-
-/* }}} */
-
-/* {{{ _php_stream_temp_create */
-PHPAPI php_stream *_php_stream_temp_create(int mode, size_t max_memory_usage STREAMS_DC TSRMLS_DC)
-{
- php_stream_temp_data *self;
- php_stream *stream;
-
- self = ecalloc(1, sizeof(*self));
- self->smax = max_memory_usage;
- self->mode = mode;
- stream = php_stream_alloc(&php_stream_temp_ops, self, 0, "r+b");
- stream->flags |= PHP_STREAM_FLAG_NO_BUFFER;
- self->innerstream = php_stream_memory_create(mode);
-
- return stream;
-}
-/* }}} */
-
-
-/* {{{ _php_stream_temp_open */
-PHPAPI php_stream *_php_stream_temp_open(int mode, size_t max_memory_usage, char *buf, size_t length STREAMS_DC TSRMLS_DC)
-{
- php_stream *stream;
- php_stream_temp_data *ms;
-
- if ((stream = php_stream_temp_create_rel(mode & ~TEMP_STREAM_READONLY, max_memory_usage)) != NULL) {
- if (length) {
- assert(buf != NULL);
- php_stream_temp_write(stream, buf, length TSRMLS_CC);
- }
- ms = stream->abstract;
- assert(ms != NULL);
- ms->mode = mode;
- }
- return stream;
-}
-/* }}} */
-
-
-/*
- * 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/main/streams/mmap.c b/main/streams/mmap.c
deleted file mode 100644
index 82bfa623f1..0000000000
--- a/main/streams/mmap.c
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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@thebrainroom.com> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-/* Memory Mapping interface for streams */
-#include "php.h"
-#include "php_streams_int.h"
-
-PHPAPI char *_php_stream_mmap_range(php_stream *stream, size_t offset, size_t length, php_stream_mmap_operation_t mode, size_t *mapped_len TSRMLS_DC)
-{
- php_stream_mmap_range range;
-
- range.offset = offset;
- range.length = length;
- range.mode = mode;
- range.mapped = NULL;
-
- /* For now, we impose an arbitrary 1MB limit to avoid
- * runaway swapping when large files are passed thru. */
- if (length > 1 * 1024 * 1024) {
- return NULL;
- }
-
- if (PHP_STREAM_OPTION_RETURN_OK == php_stream_set_option(stream, PHP_STREAM_OPTION_MMAP_API, PHP_STREAM_MMAP_MAP_RANGE, &range)) {
- if (mapped_len) {
- *mapped_len = range.length;
- }
- return range.mapped;
- }
- return NULL;
-}
-
-PHPAPI int _php_stream_mmap_unmap(php_stream *stream TSRMLS_DC)
-{
- return php_stream_set_option(stream, PHP_STREAM_OPTION_MMAP_API, PHP_STREAM_MMAP_UNMAP, NULL) == PHP_STREAM_OPTION_RETURN_OK ? 1 : 0;
-}
-
-/*
- * 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/main/streams/php_stream_context.h b/main/streams/php_stream_context.h
deleted file mode 100644
index fadb388204..0000000000
--- a/main/streams/php_stream_context.h
+++ /dev/null
@@ -1,136 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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@thebrainroom.com> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-/* Stream context and status notification related definitions */
-
-/* callback for status notifications */
-typedef void (*php_stream_notification_func)(php_stream_context *context,
- int notifycode, int severity,
- char *xmsg, int xcode,
- size_t bytes_sofar, size_t bytes_max,
- void * ptr TSRMLS_DC);
-
-#define PHP_STREAM_NOTIFIER_PROGRESS 1
-
-/* Attempt to fetch context from the zval passed,
- If no context was passed, use the default context
- The the default context has not yet been created, do it now. */
-#define php_stream_context_from_zval(zcontext, nocontext) ( \
- (zcontext) ? zend_fetch_resource(&(zcontext) TSRMLS_CC, -1, "Stream-Context", NULL, 1, php_le_stream_context()) : \
- (nocontext) ? NULL : \
- FG(default_context) ? FG(default_context) : \
- (FG(default_context) = php_stream_context_alloc()) )
-
-#define php_stream_context_to_zval(context, zval) { ZVAL_RESOURCE(zval, (context)->rsrc_id); zend_list_addref((context)->rsrc_id); }
-
-typedef struct _php_stream_notifier php_stream_notifier;
-
-struct _php_stream_notifier {
- php_stream_notification_func func;
- void (*dtor)(php_stream_notifier *notifier);
- void *ptr;
- int mask;
- size_t progress, progress_max; /* position for progress notification */
-};
-
-struct _php_stream_context {
- php_stream_notifier *notifier;
- zval *options; /* hash keyed by wrapper family or specific wrapper */
- zval *links; /* hash keyed by hostent for connection pooling */
- int rsrc_id; /* used for auto-cleanup */
-};
-
-BEGIN_EXTERN_C()
-PHPAPI void php_stream_context_free(php_stream_context *context);
-PHPAPI php_stream_context *php_stream_context_alloc(void);
-PHPAPI int php_stream_context_get_option(php_stream_context *context,
- const char *wrappername, const char *optionname, zval ***optionvalue);
-PHPAPI int php_stream_context_set_option(php_stream_context *context,
- const char *wrappername, const char *optionname, zval *optionvalue);
-
-PHPAPI int php_stream_context_get_link(php_stream_context *context,
- const char *hostent, php_stream **stream);
-PHPAPI int php_stream_context_set_link(php_stream_context *context,
- const char *hostent, php_stream *stream);
-PHPAPI int php_stream_context_del_link(php_stream_context *context,
- php_stream *stream);
-
-PHPAPI php_stream_notifier *php_stream_notification_alloc(void);
-PHPAPI void php_stream_notification_free(php_stream_notifier *notifier);
-END_EXTERN_C()
-
-/* not all notification codes are implemented */
-#define PHP_STREAM_NOTIFY_RESOLVE 1
-#define PHP_STREAM_NOTIFY_CONNECT 2
-#define PHP_STREAM_NOTIFY_AUTH_REQUIRED 3
-#define PHP_STREAM_NOTIFY_MIME_TYPE_IS 4
-#define PHP_STREAM_NOTIFY_FILE_SIZE_IS 5
-#define PHP_STREAM_NOTIFY_REDIRECTED 6
-#define PHP_STREAM_NOTIFY_PROGRESS 7
-#define PHP_STREAM_NOTIFY_COMPLETED 8
-#define PHP_STREAM_NOTIFY_FAILURE 9
-#define PHP_STREAM_NOTIFY_AUTH_RESULT 10
-
-#define PHP_STREAM_NOTIFY_SEVERITY_INFO 0
-#define PHP_STREAM_NOTIFY_SEVERITY_WARN 1
-#define PHP_STREAM_NOTIFY_SEVERITY_ERR 2
-
-BEGIN_EXTERN_C()
-PHPAPI void php_stream_notification_notify(php_stream_context *context, int notifycode, int severity,
- char *xmsg, int xcode, size_t bytes_sofar, size_t bytes_max, void * ptr TSRMLS_DC);
-PHPAPI php_stream_context *php_stream_context_set(php_stream *stream, php_stream_context *context);
-END_EXTERN_C()
-
-#define php_stream_notify_info(context, code, xmsg, xcode) do { if ((context) && (context)->notifier) { \
- php_stream_notification_notify((context), (code), PHP_STREAM_NOTIFY_SEVERITY_INFO, \
- (xmsg), (xcode), 0, 0, NULL TSRMLS_CC); } } while (0)
-
-#define php_stream_notify_progress(context, bsofar, bmax) do { if ((context) && (context)->notifier) { \
- php_stream_notification_notify((context), PHP_STREAM_NOTIFY_PROGRESS, PHP_STREAM_NOTIFY_SEVERITY_INFO, \
- NULL, 0, (bsofar), (bmax), NULL TSRMLS_CC); } } while(0)
-
-#define php_stream_notify_progress_init(context, sofar, bmax) do { if ((context) && (context)->notifier) { \
- (context)->notifier->progress = (sofar); \
- (context)->notifier->progress_max = (bmax); \
- (context)->notifier->mask |= PHP_STREAM_NOTIFIER_PROGRESS; \
- php_stream_notify_progress((context), (sofar), (bmax)); } } while (0)
-
-#define php_stream_notify_progress_increment(context, dsofar, dmax) do { if ((context) && (context)->notifier && (context)->notifier->mask & PHP_STREAM_NOTIFIER_PROGRESS) { \
- (context)->notifier->progress += (dsofar); \
- (context)->notifier->progress_max += (dmax); \
- php_stream_notify_progress((context), (context)->notifier->progress, (context)->notifier->progress_max); } } while (0)
-
-#define php_stream_notify_file_size(context, file_size, xmsg, xcode) do { if ((context) && (context)->notifier) { \
- php_stream_notification_notify((context), PHP_STREAM_NOTIFY_FILE_SIZE_IS, PHP_STREAM_NOTIFY_SEVERITY_INFO, \
- (xmsg), (xcode), 0, (file_size), NULL TSRMLS_CC); } } while(0)
-
-#define php_stream_notify_error(context, code, xmsg, xcode) do { if ((context) && (context)->notifier) {\
- php_stream_notification_notify((context), (code), PHP_STREAM_NOTIFY_SEVERITY_ERR, \
- (xmsg), (xcode), 0, 0, NULL TSRMLS_CC); } } while(0)
-
-
-/*
- * 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/main/streams/php_stream_filter_api.h b/main/streams/php_stream_filter_api.h
deleted file mode 100644
index 733d1c5221..0000000000
--- a/main/streams/php_stream_filter_api.h
+++ /dev/null
@@ -1,155 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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@thebrainroom.com> |
- | With suggestions from: |
- | Moriyoshi Koizumi <moriyoshi@at.wakwak.com> |
- | Sara Golemon <pollita@php.net> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-/* The filter API works on the principle of "Bucket-Brigades". This is
- * partially inspired by the Apache 2 method of doing things, although
- * it is intentially a light-weight implementation.
- *
- * Each stream can have a chain of filters for reading and another for writing.
- *
- * When data is written to the stream, is is placed into a bucket and placed at
- * the start of the input brigade.
- *
- * The first filter in the chain is invoked on the brigade and (depending on
- * it's return value), the next filter is invoked and so on.
- * */
-
-#define PHP_STREAM_FILTER_READ 0x0001
-#define PHP_STREAM_FILTER_WRITE 0x0002
-#define PHP_STREAM_FILTER_ALL (PHP_STREAM_FILTER_READ | PHP_STREAM_FILTER_WRITE)
-
-typedef struct _php_stream_bucket php_stream_bucket;
-typedef struct _php_stream_bucket_brigade php_stream_bucket_brigade;
-
-struct _php_stream_bucket {
- php_stream_bucket *next, *prev;
- php_stream_bucket_brigade *brigade;
-
- char *buf;
- size_t buflen;
- /* if non-zero, buf should be pefreed when the bucket is destroyed */
- int own_buf;
- int is_persistent;
-
- /* destroy this struct when refcount falls to zero */
- int refcount;
-};
-
-struct _php_stream_bucket_brigade {
- php_stream_bucket *head, *tail;
-};
-
-typedef enum {
- PSFS_ERR_FATAL, /* error in data stream */
- PSFS_FEED_ME, /* filter needs more data; stop processing chain until more is available */
- PSFS_PASS_ON, /* filter generated output buckets; pass them on to next in chain */
-} php_stream_filter_status_t;
-
-/* Buckets API. */
-BEGIN_EXTERN_C()
-PHPAPI php_stream_bucket *php_stream_bucket_new(php_stream *stream, char *buf, size_t buflen, int own_buf, int buf_persistent TSRMLS_DC);
-PHPAPI int php_stream_bucket_split(php_stream_bucket *in, php_stream_bucket **left, php_stream_bucket **right, size_t length TSRMLS_DC);
-PHPAPI void php_stream_bucket_delref(php_stream_bucket *bucket TSRMLS_DC);
-#define php_stream_bucket_addref(bucket) (bucket)->refcount++
-PHPAPI void php_stream_bucket_prepend(php_stream_bucket_brigade *brigade, php_stream_bucket *bucket TSRMLS_DC);
-PHPAPI void php_stream_bucket_append(php_stream_bucket_brigade *brigade, php_stream_bucket *bucket TSRMLS_DC);
-PHPAPI void php_stream_bucket_unlink(php_stream_bucket *bucket TSRMLS_DC);
-PHPAPI php_stream_bucket *php_stream_bucket_make_writeable(php_stream_bucket *bucket TSRMLS_DC);
-END_EXTERN_C()
-
-#define PSFS_FLAG_NORMAL 0 /* regular read/write */
-#define PSFS_FLAG_FLUSH_INC 1 /* an incremental flush */
-#define PSFS_FLAG_FLUSH_CLOSE 2 /* final flush prior to closing */
-
-typedef struct _php_stream_filter_ops {
-
- php_stream_filter_status_t (*filter)(
- php_stream *stream,
- php_stream_filter *thisfilter,
- php_stream_bucket_brigade *buckets_in,
- php_stream_bucket_brigade *buckets_out,
- size_t *bytes_consumed,
- int flags
- TSRMLS_DC);
-
- void (*dtor)(php_stream_filter *thisfilter TSRMLS_DC);
-
- const char *label;
-
-} php_stream_filter_ops;
-
-typedef struct _php_stream_filter_chain {
- php_stream_filter *head, *tail;
-
- /* Owning stream */
- php_stream *stream;
-} php_stream_filter_chain;
-
-struct _php_stream_filter {
- php_stream_filter_ops *fops;
- void *abstract; /* for use by filter implementation */
- php_stream_filter *next;
- php_stream_filter *prev;
- int is_persistent;
-
- /* link into stream and chain */
- php_stream_filter_chain *chain;
-
- /* buffered buckets */
- php_stream_bucket_brigade buffer;
-};
-
-/* stack filter onto a stream */
-BEGIN_EXTERN_C()
-PHPAPI void _php_stream_filter_prepend(php_stream_filter_chain *chain, php_stream_filter *filter TSRMLS_DC);
-PHPAPI void _php_stream_filter_append(php_stream_filter_chain *chain, php_stream_filter *filter TSRMLS_DC);
-PHPAPI php_stream_filter *php_stream_filter_remove(php_stream_filter *filter, int call_dtor TSRMLS_DC);
-PHPAPI void php_stream_filter_free(php_stream_filter *filter TSRMLS_DC);
-PHPAPI php_stream_filter *_php_stream_filter_alloc(php_stream_filter_ops *fops, void *abstract, int persistent STREAMS_DC TSRMLS_DC);
-END_EXTERN_C()
-#define php_stream_filter_alloc(fops, thisptr, persistent) _php_stream_filter_alloc((fops), (thisptr), (persistent) STREAMS_CC TSRMLS_CC)
-#define php_stream_filter_alloc_rel(fops, thisptr, persistent) _php_stream_filter_alloc((fops), (thisptr), (persistent) STREAMS_REL_CC TSRMLS_CC)
-#define php_stream_filter_prepend(chain, filter) _php_stream_filter_prepend((chain), (filter) TSRMLS_CC)
-#define php_stream_filter_append(chain, filter) _php_stream_filter_append((chain), (filter) TSRMLS_CC)
-
-#define php_stream_is_filtered(stream) ((stream)->readfilters.head || (stream)->writefilters.head)
-
-typedef struct _php_stream_filter_factory {
- php_stream_filter *(*create_filter)(const char *filtername, zval *filterparams, int persistent TSRMLS_DC);
-} php_stream_filter_factory;
-
-BEGIN_EXTERN_C()
-PHPAPI int php_stream_filter_register_factory(const char *filterpattern, php_stream_filter_factory *factory TSRMLS_DC);
-PHPAPI int php_stream_filter_unregister_factory(const char *filterpattern TSRMLS_DC);
-PHPAPI int php_stream_filter_register_factory_volatile(const char *filterpattern, php_stream_filter_factory *factory TSRMLS_DC);
-PHPAPI php_stream_filter *php_stream_filter_create(const char *filtername, zval *filterparams, int persistent TSRMLS_DC);
-END_EXTERN_C()
-
-/*
- * 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/main/streams/php_stream_mmap.h b/main/streams/php_stream_mmap.h
deleted file mode 100644
index 65f294dea9..0000000000
--- a/main/streams/php_stream_mmap.h
+++ /dev/null
@@ -1,83 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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@thebrainroom.com> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-/* Memory Mapping interface for streams.
- * The intention is to provide a uniform interface over the most common
- * operations that are used within PHP itself, rather than a complete
- * API for all memory mapping needs.
- *
- * ATM, we support only mmap(), but win32 memory mapping support will
- * follow soon.
- * */
-
-typedef enum {
- /* Does the stream support mmap ? */
- PHP_STREAM_MMAP_SUPPORTED,
- /* Request a range and offset to be mapped;
- * while mapped, you MUST NOT use any read/write functions
- * on the stream (win9x compatibility) */
- PHP_STREAM_MMAP_MAP_RANGE,
- /* Unmap the last range that was mapped for the stream */
- PHP_STREAM_MMAP_UNMAP
-} php_stream_mmap_operation_t;
-
-typedef enum {
- PHP_STREAM_MAP_MODE_READONLY,
- PHP_STREAM_MAP_MODE_READWRITE,
- PHP_STREAM_MAP_MODE_SHARED_READONLY,
- PHP_STREAM_MAP_MODE_SHARED_READWRITE
-} php_stream_mmap_access_t;
-
-typedef struct {
- /* requested offset and length.
- * If length is 0, the whole file is mapped */
- size_t offset;
- size_t length;
-
- php_stream_mmap_access_t mode;
-
- /* returned mapped address */
- char *mapped;
-
-} php_stream_mmap_range;
-
-#define php_stream_mmap_supported(stream) (_php_stream_set_option((stream), PHP_STREAM_OPTION_MMAP_API, PHP_STREAM_MMAP_SUPPORTED, NULL TSRMLS_CC) == 0 ? 1 : 0)
-
-/* Returns 1 if the stream in its current state can be memory mapped,
- * 0 otherwise */
-#define php_stream_mmap_possible(stream) (!php_stream_is_filtered((stream)) && php_stream_mmap_supported((stream)))
-
-BEGIN_EXTERN_C()
-PHPAPI char *_php_stream_mmap_range(php_stream *stream, size_t offset, size_t length, php_stream_mmap_operation_t mode, size_t *mapped_len TSRMLS_DC);
-#define php_stream_mmap_range(stream, offset, length, mode, mapped_len) _php_stream_mmap_range((stream), (offset), (length), (mode), (mapped_len) TSRMLS_CC)
-
-/* un-maps the last mapped range */
-PHPAPI int _php_stream_mmap_unmap(php_stream *stream TSRMLS_DC);
-#define php_stream_mmap_unmap(stream) _php_stream_mmap_unmap((stream) TSRMLS_CC)
-END_EXTERN_C()
-
-/*
- * 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/main/streams/php_stream_plain_wrapper.h b/main/streams/php_stream_plain_wrapper.h
deleted file mode 100644
index 94fc87de3d..0000000000
--- a/main/streams/php_stream_plain_wrapper.h
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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@thebrainroom.com> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-/* definitions for the plain files wrapper */
-
-/* operations for a plain file; use the php_stream_fopen_XXX funcs below */
-PHPAPI extern php_stream_ops php_stream_stdio_ops;
-
-BEGIN_EXTERN_C()
-
-/* like fopen, but returns a stream */
-PHPAPI php_stream *_php_stream_fopen(const char *filename, const char *mode, char **opened_path, int options STREAMS_DC TSRMLS_DC);
-#define php_stream_fopen(filename, mode, opened) _php_stream_fopen((filename), (mode), (opened), 0 STREAMS_CC TSRMLS_CC)
-
-PHPAPI php_stream *_php_stream_fopen_with_path(char *filename, char *mode, char *path, char **opened_path, int options STREAMS_DC TSRMLS_DC);
-#define php_stream_fopen_with_path(filename, mode, path, opened) _php_stream_fopen_with_path((filename), (mode), (path), (opened) STREAMS_CC TSRMLS_CC)
-
-PHPAPI php_stream *_php_stream_fopen_from_file(FILE *file, const char *mode STREAMS_DC TSRMLS_DC);
-#define php_stream_fopen_from_file(file, mode) _php_stream_fopen_from_file((file), (mode) STREAMS_CC TSRMLS_CC)
-
-PHPAPI php_stream *_php_stream_fopen_from_fd(int fd, const char *mode, const char *persistent_id STREAMS_DC TSRMLS_DC);
-#define php_stream_fopen_from_fd(fd, mode, persistent_id) _php_stream_fopen_from_fd((fd), (mode), (persistent_id) STREAMS_CC TSRMLS_CC)
-
-PHPAPI php_stream *_php_stream_fopen_from_pipe(FILE *file, const char *mode STREAMS_DC TSRMLS_DC);
-#define php_stream_fopen_from_pipe(file, mode) _php_stream_fopen_from_pipe((file), (mode) STREAMS_CC TSRMLS_CC)
-
-PHPAPI php_stream *_php_stream_fopen_tmpfile(int dummy STREAMS_DC TSRMLS_DC);
-#define php_stream_fopen_tmpfile() _php_stream_fopen_tmpfile(0 STREAMS_CC TSRMLS_CC)
-
-PHPAPI php_stream *_php_stream_fopen_temporary_file(const char *dir, const char *pfx, char **opened_path STREAMS_DC TSRMLS_DC);
-#define php_stream_fopen_temporary_file(dir, pfx, opened_path) _php_stream_fopen_temporary_file((dir), (pfx), (opened_path) STREAMS_CC TSRMLS_CC)
-
-/* This is a utility API for extensions that are opening a stream, converting it
- * to a FILE* and then closing it again. Be warned that fileno() on the result
- * will most likely fail on systems with fopencookie. */
-PHPAPI FILE * _php_stream_open_wrapper_as_file(char * path, char * mode, int options, char **opened_path STREAMS_DC TSRMLS_DC);
-#define php_stream_open_wrapper_as_file(path, mode, options, opened_path) _php_stream_open_wrapper_as_file((path), (mode), (options), (opened_path) STREAMS_CC TSRMLS_CC)
-
-END_EXTERN_C()
-
-/*
- * 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/main/streams/php_stream_transport.h b/main/streams/php_stream_transport.h
deleted file mode 100644
index f63c1e8f6a..0000000000
--- a/main/streams/php_stream_transport.h
+++ /dev/null
@@ -1,194 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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@thebrainroom.com> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#if HAVE_SYS_SOCKET_H
-# include <sys/socket.h>
-#endif
-
-typedef php_stream *(php_stream_transport_factory_func)(const char *proto, long protolen,
- char *resourcename, long resourcenamelen,
- const char *persistent_id, int options, int flags,
- struct timeval *timeout,
- php_stream_context *context STREAMS_DC TSRMLS_DC);
-typedef php_stream_transport_factory_func *php_stream_transport_factory;
-
-BEGIN_EXTERN_C()
-PHPAPI int php_stream_xport_register(char *protocol, php_stream_transport_factory factory TSRMLS_DC);
-PHPAPI int php_stream_xport_unregister(char *protocol TSRMLS_DC);
-
-#define STREAM_XPORT_CLIENT 0
-#define STREAM_XPORT_SERVER 1
-
-#define STREAM_XPORT_CONNECT 2
-#define STREAM_XPORT_BIND 4
-#define STREAM_XPORT_LISTEN 8
-#define STREAM_XPORT_CONNECT_ASYNC 16
-
-/* Open a client or server socket connection */
-PHPAPI php_stream *_php_stream_xport_create(const char *name, long namelen, int options,
- int flags, const char *persistent_id,
- struct timeval *timeout,
- php_stream_context *context,
- char **error_string,
- int *error_code
- STREAMS_DC TSRMLS_DC);
-
-#define php_stream_xport_create(name, namelen, options, flags, persistent_id, timeout, context, estr, ecode) \
- _php_stream_xport_create(name, namelen, options, flags, persistent_id, timeout, context, estr, ecode STREAMS_CC TSRMLS_CC)
-
-/* Bind the stream to a local address */
-PHPAPI int php_stream_xport_bind(php_stream *stream,
- const char *name, long namelen,
- char **error_text
- TSRMLS_DC);
-
-/* Connect to a remote address */
-PHPAPI int php_stream_xport_connect(php_stream *stream,
- const char *name, long namelen,
- int asynchronous,
- struct timeval *timeout,
- char **error_text,
- int *error_code
- TSRMLS_DC);
-
-/* Prepare to listen */
-PHPAPI int php_stream_xport_listen(php_stream *stream,
- int backlog,
- char **error_text
- TSRMLS_DC);
-
-/* Get the next client and their address as a string, or the underlying address
- * structure. You must efree either of these if you request them */
-PHPAPI int php_stream_xport_accept(php_stream *stream, php_stream **client,
- char **textaddr, int *textaddrlen,
- void **addr, socklen_t *addrlen,
- struct timeval *timeout,
- char **error_text
- TSRMLS_DC);
-
-/* Get the name of either the socket or it's peer */
-PHPAPI int php_stream_xport_get_name(php_stream *stream, int want_peer,
- char **textaddr, int *textaddrlen,
- void **addr, socklen_t *addrlen
- TSRMLS_DC);
-
-enum php_stream_xport_send_recv_flags {
- STREAM_OOB = 1,
- STREAM_PEEK = 2
-};
-
-/* Similar to recv() system call; read data from the stream, optionally
- * peeking, optionally retrieving OOB data */
-PHPAPI int php_stream_xport_recvfrom(php_stream *stream, char *buf, size_t buflen,
- long flags, void **addr, socklen_t *addrlen,
- char **textaddr, int *textaddrlen TSRMLS_DC);
-
-/* Similar to send() system call; send data to the stream, optionally
- * sending it as OOB data */
-PHPAPI int php_stream_xport_sendto(php_stream *stream, const char *buf, size_t buflen,
- long flags, void *addr, socklen_t addrlen TSRMLS_DC);
-END_EXTERN_C()
-
-/* Structure definition for the set_option interface that the above functions wrap */
-
-typedef struct _php_stream_xport_param {
- enum {
- STREAM_XPORT_OP_BIND, STREAM_XPORT_OP_CONNECT,
- STREAM_XPORT_OP_LISTEN, STREAM_XPORT_OP_ACCEPT,
- STREAM_XPORT_OP_CONNECT_ASYNC,
- STREAM_XPORT_OP_GET_NAME,
- STREAM_XPORT_OP_GET_PEER_NAME,
- STREAM_XPORT_OP_RECV,
- STREAM_XPORT_OP_SEND
- } op;
- unsigned int want_addr:1;
- unsigned int want_textaddr:1;
- unsigned int want_errortext:1;
-
- struct {
- char *name;
- long namelen;
- int backlog;
- struct timeval *timeout;
- struct sockaddr *addr;
- socklen_t addrlen;
- char *buf;
- size_t buflen;
- long flags;
- } inputs;
- struct {
- php_stream *client;
- int returncode;
- struct sockaddr *addr;
- socklen_t addrlen;
- char *textaddr;
- long textaddrlen;
-
- char *error_text;
- int error_code;
- } outputs;
-} php_stream_xport_param;
-
-
-/* These functions provide crypto support on the underlying transport */
-typedef enum {
- STREAM_CRYPTO_METHOD_SSLv2_CLIENT,
- STREAM_CRYPTO_METHOD_SSLv3_CLIENT,
- STREAM_CRYPTO_METHOD_SSLv23_CLIENT,
- STREAM_CRYPTO_METHOD_TLS_CLIENT,
- STREAM_CRYPTO_METHOD_SSLv2_SERVER,
- STREAM_CRYPTO_METHOD_SSLv3_SERVER,
- STREAM_CRYPTO_METHOD_SSLv23_SERVER,
- STREAM_CRYPTO_METHOD_TLS_SERVER
-} php_stream_xport_crypt_method_t;
-
-BEGIN_EXTERN_C()
-PHPAPI int php_stream_xport_crypto_setup(php_stream *stream, php_stream_xport_crypt_method_t crypto_method, php_stream *session_stream TSRMLS_DC);
-PHPAPI int php_stream_xport_crypto_enable(php_stream *stream, int activate TSRMLS_DC);
-END_EXTERN_C()
-
-typedef struct _php_stream_xport_crypto_param {
- enum {
- STREAM_XPORT_CRYPTO_OP_SETUP,
- STREAM_XPORT_CRYPTO_OP_ENABLE
- } op;
- struct {
- int activate;
- php_stream_xport_crypt_method_t method;
- php_stream *session;
- } inputs;
- struct {
- int returncode;
- } outputs;
-} php_stream_xport_crypto_param;
-
-BEGIN_EXTERN_C()
-PHPAPI HashTable *php_stream_xport_get_hash(void);
-PHPAPI php_stream_transport_factory_func php_stream_generic_socket_factory;
-END_EXTERN_C()
-
-/*
- * 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/main/streams/php_stream_userspace.h b/main/streams/php_stream_userspace.h
deleted file mode 100644
index a5b59ffb74..0000000000
--- a/main/streams/php_stream_userspace.h
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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@thebrainroom.com> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-
-/* for user-space streams */
-PHPAPI extern php_stream_ops php_stream_userspace_ops;
-PHPAPI extern php_stream_ops php_stream_userspace_dir_ops;
-#define PHP_STREAM_IS_USERSPACE &php_stream_userspace_ops
-#define PHP_STREAM_IS_USERSPACE_DIR &php_stream_userspace_dir_ops
-
-/*
- * 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/main/streams/php_streams_int.h b/main/streams/php_streams_int.h
deleted file mode 100644
index a753343463..0000000000
--- a/main/streams/php_streams_int.h
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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@thebrainroom.com> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#if ZEND_DEBUG
-#define emalloc_rel_orig(size) \
- ( __php_stream_call_depth == 0 \
- ? _emalloc((size) ZEND_FILE_LINE_CC ZEND_FILE_LINE_RELAY_CC) \
- : _emalloc((size) ZEND_FILE_LINE_CC ZEND_FILE_LINE_ORIG_RELAY_CC) )
-
-#define erealloc_rel_orig(ptr, size) \
- ( __php_stream_call_depth == 0 \
- ? _erealloc((ptr), (size), 0 ZEND_FILE_LINE_CC ZEND_FILE_LINE_RELAY_CC) \
- : _erealloc((ptr), (size), 0 ZEND_FILE_LINE_CC ZEND_FILE_LINE_ORIG_RELAY_CC) )
-
-
-#define pemalloc_rel_orig(size, persistent) ((persistent) ? malloc((size)) : emalloc_rel_orig((size)))
-#define perealloc_rel_orig(ptr, size, persistent) ((persistent) ? realloc((ptr), (size)) : erealloc_rel_orig((ptr), (size)))
-#else
-# define pemalloc_rel_orig(size, persistent) pemalloc((size), (persistent))
-# define perealloc_rel_orig(ptr, size, persistent) perealloc((ptr), (size), (persistent))
-# define emalloc_rel_orig(size) emalloc((size))
-#endif
-
-#define STREAM_DEBUG 0
-#define STREAM_WRAPPER_PLAIN_FILES ((php_stream_wrapper*)-1)
-extern php_stream_wrapper php_plain_files_wrapper;
-
-#ifndef MAP_FAILED
-#define MAP_FAILED ((void *) -1)
-#endif
-
-#define CHUNK_SIZE 8192
-
-#ifdef PHP_WIN32
-#define EWOULDBLOCK WSAEWOULDBLOCK
-#endif
-
-#ifndef S_ISREG
-#define S_ISREG(mode) (((mode)&S_IFMT) == S_IFREG)
-#endif
-
-void php_stream_tidy_wrapper_error_log(php_stream_wrapper *wrapper TSRMLS_DC);
-void php_stream_display_wrapper_errors(php_stream_wrapper *wrapper, const char *path, const char *caption TSRMLS_DC);
-
diff --git a/main/streams/plain_wrapper.c b/main/streams/plain_wrapper.c
deleted file mode 100644
index 1f48ea4469..0000000000
--- a/main/streams/plain_wrapper.c
+++ /dev/null
@@ -1,1315 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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. |
- +----------------------------------------------------------------------+
- | Authors: Wez Furlong <wez@thebrainroom.com> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-#include "php.h"
-#include "php_globals.h"
-#include "php_network.h"
-#include "php_open_temporary_file.h"
-#include "ext/standard/file.h"
-#include "ext/standard/flock_compat.h"
-#include <stddef.h>
-#include <fcntl.h>
-#if HAVE_SYS_WAIT_H
-#include <sys/wait.h>
-#endif
-#if HAVE_SYS_FILE_H
-#include <sys/file.h>
-#endif
-#ifdef HAVE_SYS_MMAN_H
-#include <sys/mman.h>
-#endif
-#include "SAPI.h"
-
-#include "php_streams_int.h"
-
-/* parse standard "fopen" modes into open() flags */
-PHPAPI int php_stream_parse_fopen_modes(const char *mode, int *open_flags)
-{
- int flags;
-
- switch (mode[0]) {
- case 'r':
- flags = 0;
- break;
- case 'w':
- flags = O_TRUNC|O_CREAT;
- break;
- case 'a':
- flags = O_CREAT|O_APPEND;
- break;
- case 'x':
- flags = O_CREAT|O_EXCL;
- break;
- default:
- /* unknown mode */
- return FAILURE;
- }
-
- if (strchr(mode, '+')) {
- flags |= O_RDWR;
- } else if (flags) {
- flags |= O_WRONLY;
- } else {
- flags |= O_RDONLY;
- }
-
-#if defined(_O_TEXT) && defined(O_BINARY)
- if (strchr(mode, 't')) {
- flags |= _O_TEXT;
- } else {
- flags |= O_BINARY;
- }
-#endif
-
- *open_flags = flags;
- return SUCCESS;
-}
-
-
-/* {{{ ------- STDIO stream implementation -------*/
-
-typedef struct {
- FILE *file;
- int fd; /* underlying file descriptor */
- unsigned is_process_pipe:1; /* use pclose instead of fclose */
- unsigned is_pipe:1; /* don't try and seek */
- unsigned cached_fstat:1; /* sb is valid */
- unsigned _reserved:29;
-
- int lock_flag; /* stores the lock state */
- char *temp_file_name; /* if non-null, this is the path to a temporary file that
- * is to be deleted when the stream is closed */
-#if HAVE_FLUSHIO
- char last_op;
-#endif
-
-#if HAVE_MMAP
- char *last_mapped_addr;
- size_t last_mapped_len;
-#endif
-#ifdef PHP_WIN32
- char *last_mapped_addr;
- HANDLE file_mapping;
-#endif
-
- struct stat sb;
-} php_stdio_stream_data;
-#define PHP_STDIOP_GET_FD(anfd, data) anfd = (data)->file ? fileno((data)->file) : (data)->fd
-
-static int do_fstat(php_stdio_stream_data *d, int force)
-{
- if (!d->cached_fstat || force) {
- int fd;
- int r;
-
- PHP_STDIOP_GET_FD(fd, d);
- r = fstat(fd, &d->sb);
- d->cached_fstat = r == 0;
-
- return r;
- }
- return 0;
-}
-
-PHPAPI php_stream *_php_stream_fopen_temporary_file(const char *dir, const char *pfx, char **opened_path STREAMS_DC TSRMLS_DC)
-{
- int fd = php_open_temporary_fd(dir, pfx, opened_path TSRMLS_CC);
-
- if (fd != -1) {
- php_stream *stream = php_stream_fopen_from_fd_rel(fd, "r+b", NULL);
- if (stream) {
- return stream;
- }
- close(fd);
-
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "unable to allocate stream");
-
- return NULL;
- }
- return NULL;
-}
-
-PHPAPI php_stream *_php_stream_fopen_tmpfile(int dummy STREAMS_DC TSRMLS_DC)
-{
- char *opened_path = NULL;
- int fd = php_open_temporary_fd(NULL, "php", &opened_path TSRMLS_CC);
-
- if (fd != -1) {
- php_stream *stream = php_stream_fopen_from_fd_rel(fd, "r+b", NULL);
- if (stream) {
- php_stdio_stream_data *self = (php_stdio_stream_data*)stream->abstract;
-
- self->temp_file_name = opened_path;
- self->lock_flag = LOCK_UN;
-
- return stream;
- }
- close(fd);
-
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "unable to allocate stream");
-
- return NULL;
- }
- return NULL;
-}
-
-PHPAPI php_stream *_php_stream_fopen_from_fd(int fd, const char *mode, const char *persistent_id STREAMS_DC TSRMLS_DC)
-{
- php_stdio_stream_data *self;
- php_stream *stream;
-
- self = pemalloc_rel_orig(sizeof(*self), persistent_id);
- memset(self, 0, sizeof(*self));
- self->file = NULL;
- self->is_pipe = 0;
- self->lock_flag = LOCK_UN;
- self->is_process_pipe = 0;
- self->temp_file_name = NULL;
- self->fd = fd;
-
-#ifdef S_ISFIFO
- /* detect if this is a pipe */
- if (self->fd >= 0) {
- self->is_pipe = (do_fstat(self, 0) == 0 && S_ISFIFO(self->sb.st_mode)) ? 1 : 0;
- }
-#elif defined(PHP_WIN32)
- {
- long handle = _get_osfhandle(self->fd);
- DWORD in_buf_size, out_buf_size;
-
- if (handle != 0xFFFFFFFF) {
- self->is_pipe = GetNamedPipeInfo((HANDLE)handle, NULL, &out_buf_size, &in_buf_size, NULL);
- }
- }
-#endif
-
- stream = php_stream_alloc_rel(&php_stream_stdio_ops, self, persistent_id, mode);
-
- if (stream) {
- if (self->is_pipe) {
- stream->flags |= PHP_STREAM_FLAG_NO_SEEK;
- } else {
- stream->position = lseek(self->fd, 0, SEEK_CUR);
- }
- }
-
- return stream;
-}
-
-PHPAPI php_stream *_php_stream_fopen_from_file(FILE *file, const char *mode STREAMS_DC TSRMLS_DC)
-{
- php_stdio_stream_data *self;
- php_stream *stream;
-
- self = emalloc_rel_orig(sizeof(*self));
- memset(self, 0, sizeof(*self));
- self->file = file;
- self->is_pipe = 0;
- self->lock_flag = LOCK_UN;
- self->is_process_pipe = 0;
- self->temp_file_name = NULL;
- self->fd = fileno(file);
-
-#ifdef S_ISFIFO
- /* detect if this is a pipe */
- if (self->fd >= 0) {
- self->is_pipe = (do_fstat(self, 0) == 0 && S_ISFIFO(self->sb.st_mode)) ? 1 : 0;
- }
-#elif defined(PHP_WIN32)
- {
- long handle = _get_osfhandle(self->fd);
- DWORD in_buf_size, out_buf_size;
-
- if (handle != 0xFFFFFFFF) {
- self->is_pipe = GetNamedPipeInfo((HANDLE)handle, NULL, &out_buf_size, &in_buf_size, NULL);
- }
- }
-#endif
-
- stream = php_stream_alloc_rel(&php_stream_stdio_ops, self, 0, mode);
-
- if (stream) {
- if (self->is_pipe) {
- stream->flags |= PHP_STREAM_FLAG_NO_SEEK;
- } else {
- stream->position = ftell(file);
- }
- }
-
- return stream;
-}
-
-PHPAPI php_stream *_php_stream_fopen_from_pipe(FILE *file, const char *mode STREAMS_DC TSRMLS_DC)
-{
- php_stdio_stream_data *self;
- php_stream *stream;
-
- self = emalloc_rel_orig(sizeof(*self));
- memset(self, 0, sizeof(*self));
- self->file = file;
- self->is_pipe = 1;
- self->lock_flag = LOCK_UN;
- self->is_process_pipe = 1;
- self->fd = fileno(file);
- self->temp_file_name = NULL;
-
- stream = php_stream_alloc_rel(&php_stream_stdio_ops, self, 0, mode);
- stream->flags |= PHP_STREAM_FLAG_NO_SEEK;
- return stream;
-}
-
-static size_t php_stdiop_write(php_stream *stream, const char *buf, size_t count TSRMLS_DC)
-{
- php_stdio_stream_data *data = (php_stdio_stream_data*)stream->abstract;
-
- assert(data != NULL);
-
- if (data->fd >= 0) {
- int bytes_written = write(data->fd, buf, count);
- if (bytes_written < 0) return 0;
- return (size_t) bytes_written;
- } else {
-
-#if HAVE_FLUSHIO
- if (!data->is_pipe && data->last_op == 'r') {
- fseek(data->file, 0, SEEK_CUR);
- }
- data->last_op = 'w';
-#endif
-
- return fwrite(buf, 1, count, data->file);
- }
-}
-
-static size_t php_stdiop_read(php_stream *stream, char *buf, size_t count TSRMLS_DC)
-{
- php_stdio_stream_data *data = (php_stdio_stream_data*)stream->abstract;
- size_t ret;
-
- assert(data != NULL);
-
- if (data->fd >= 0) {
- ret = read(data->fd, buf, count);
-
- stream->eof = (ret == 0 || (ret == -1 && errno != EWOULDBLOCK));
-
- } else {
-#if HAVE_FLUSHIO
- if (!data->is_pipe && data->last_op == 'w')
- fseek(data->file, 0, SEEK_CUR);
- data->last_op = 'r';
-#endif
-
- ret = fread(buf, 1, count, data->file);
-
- stream->eof = feof(data->file);
- }
- return ret;
-}
-
-static int php_stdiop_close(php_stream *stream, int close_handle TSRMLS_DC)
-{
- int ret;
- php_stdio_stream_data *data = (php_stdio_stream_data*)stream->abstract;
-
- assert(data != NULL);
-
-#if HAVE_MMAP
- if (data->last_mapped_addr) {
- munmap(data->last_mapped_addr, data->last_mapped_len);
- data->last_mapped_addr = NULL;
- }
-#elif defined(PHP_WIN32)
- if (data->last_mapped_addr) {
- UnmapViewOfFile(data->last_mapped_addr);
- data->last_mapped_addr = NULL;
- }
- if (data->file_mapping) {
- CloseHandle(data->file_mapping);
- data->file_mapping = NULL;
- }
-#endif
-
- if (close_handle) {
- if (data->lock_flag != LOCK_UN) {
- php_stream_lock(stream, LOCK_UN);
- }
- if (data->file) {
- if (data->is_process_pipe) {
- errno = 0;
- ret = pclose(data->file);
-
-#if HAVE_SYS_WAIT_H
- if (WIFEXITED(ret)) {
- ret = WEXITSTATUS(ret);
- }
-#endif
- } else {
- ret = fclose(data->file);
- data->file = NULL;
- }
- } else if (data->fd != -1) {
-#ifdef PHP_DEBUG
- if (data->fd == 2 && 0 == strcmp(sapi_module.name, "cli")) {
- /* don't close stderr in CLI in DEBUG mode, as we want to see any leaks */
- ret = 0;
- } else {
- ret = close(data->fd);
- }
-#else
- ret = close(data->fd);
-#endif
- data->fd = -1;
- } else {
- return 0; /* everything should be closed already -> success */
- }
- if (data->temp_file_name) {
- unlink(data->temp_file_name);
- /* temporary streams are never persistent */
- efree(data->temp_file_name);
- data->temp_file_name = NULL;
- }
- } else {
- ret = 0;
- data->file = NULL;
- data->fd = -1;
- }
-
- pefree(data, stream->is_persistent);
-
- return ret;
-}
-
-static int php_stdiop_flush(php_stream *stream TSRMLS_DC)
-{
- php_stdio_stream_data *data = (php_stdio_stream_data*)stream->abstract;
-
- assert(data != NULL);
-
- /*
- * stdio buffers data in user land. By calling fflush(3), this
- * data is send to the kernel using write(2). fsync'ing is
- * something completely different.
- */
- if (data->file) {
- return fflush(data->file);
- }
- return 0;
-}
-
-static int php_stdiop_seek(php_stream *stream, off_t offset, int whence, off_t *newoffset TSRMLS_DC)
-{
- php_stdio_stream_data *data = (php_stdio_stream_data*)stream->abstract;
- int ret;
-
- assert(data != NULL);
-
- if (data->is_pipe) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "cannot seek on a pipe");
- return -1;
- }
-
- if (data->fd >= 0) {
- off_t result;
-
- result = lseek(data->fd, offset, whence);
- if (result == (off_t)-1)
- return -1;
-
- *newoffset = result;
- return 0;
-
- } else {
- ret = fseek(data->file, offset, whence);
- *newoffset = ftell(data->file);
- return ret;
- }
-}
-
-static int php_stdiop_cast(php_stream *stream, int castas, void **ret TSRMLS_DC)
-{
- int fd;
- php_stdio_stream_data *data = (php_stdio_stream_data*) stream->abstract;
-
- assert(data != NULL);
-
- /* as soon as someone touches the stdio layer, buffering may ensue,
- * so we need to stop using the fd directly in that case */
-
- switch (castas) {
- case PHP_STREAM_AS_STDIO:
- if (ret) {
-
- if (data->file == NULL) {
- /* we were opened as a plain file descriptor, so we
- * need fdopen now */
- data->file = fdopen(data->fd, stream->mode);
- }
-
- *(FILE**)ret = data->file;
- data->fd = -1;
- }
- return SUCCESS;
-
- case PHP_STREAM_AS_FD_FOR_SELECT:
- PHP_STDIOP_GET_FD(fd, data);
- if (fd < 0) {
- return FAILURE;
- }
- if (ret) {
- *(int*)ret = fd;
- }
- return SUCCESS;
-
- case PHP_STREAM_AS_FD:
- PHP_STDIOP_GET_FD(fd, data);
-
- if (fd < 0) {
- return FAILURE;
- }
- if (data->file) {
- fflush(data->file);
- }
- if (ret) {
- *(int*)ret = fd;
- }
- return SUCCESS;
- default:
- return FAILURE;
- }
-}
-
-static int php_stdiop_stat(php_stream *stream, php_stream_statbuf *ssb TSRMLS_DC)
-{
- int ret;
- php_stdio_stream_data *data = (php_stdio_stream_data*) stream->abstract;
-
- assert(data != NULL);
-
- ret = do_fstat(data, 1);
- memcpy(&ssb->sb, &data->sb, sizeof(ssb->sb));
- return ret;
-}
-
-static int php_stdiop_set_option(php_stream *stream, int option, int value, void *ptrparam TSRMLS_DC)
-{
- php_stdio_stream_data *data = (php_stdio_stream_data*) stream->abstract;
- size_t size;
- int fd;
-#ifdef O_NONBLOCK
- /* FIXME: make this work for win32 */
- int flags;
- int oldval;
-#endif
-
- PHP_STDIOP_GET_FD(fd, data);
-
- switch(option) {
- case PHP_STREAM_OPTION_BLOCKING:
- if (fd == -1)
- return -1;
-#ifdef O_NONBLOCK
- flags = fcntl(fd, F_GETFL, 0);
- oldval = (flags & O_NONBLOCK) ? 0 : 1;
- if (value)
- flags ^= O_NONBLOCK;
- else
- flags |= O_NONBLOCK;
-
- if (-1 == fcntl(fd, F_SETFL, flags))
- return -1;
- return oldval;
-#else
- return -1; /* not yet implemented */
-#endif
-
- case PHP_STREAM_OPTION_WRITE_BUFFER:
-
- if (data->file == NULL) {
- return -1;
- }
-
- if (ptrparam)
- size = *(size_t *)ptrparam;
- else
- size = BUFSIZ;
-
- switch(value) {
- case PHP_STREAM_BUFFER_NONE:
- stream->flags |= PHP_STREAM_FLAG_NO_BUFFER;
- return setvbuf(data->file, NULL, _IONBF, 0);
-
- case PHP_STREAM_BUFFER_LINE:
- stream->flags ^= PHP_STREAM_FLAG_NO_BUFFER;
- return setvbuf(data->file, NULL, _IOLBF, size);
-
- case PHP_STREAM_BUFFER_FULL:
- stream->flags ^= PHP_STREAM_FLAG_NO_BUFFER;
- return setvbuf(data->file, NULL, _IOFBF, size);
-
- default:
- return -1;
- }
- break;
-
- case PHP_STREAM_OPTION_LOCKING:
- if (fd == -1) {
- return -1;
- }
-
- if ((long) ptrparam == PHP_STREAM_LOCK_SUPPORTED) {
- return 0;
- }
-
- if (!flock(fd, value) || (errno == EWOULDBLOCK && value & LOCK_NB)) {
- data->lock_flag = value;
- return 0;
- } else {
- return -1;
- }
- break;
-
- case PHP_STREAM_OPTION_MMAP_API:
-#if HAVE_MMAP
- {
- php_stream_mmap_range *range = (php_stream_mmap_range*)ptrparam;
- int prot, flags;
-
- switch (value) {
- case PHP_STREAM_MMAP_SUPPORTED:
- return fd == -1 ? PHP_STREAM_OPTION_RETURN_ERR : PHP_STREAM_OPTION_RETURN_OK;
-
- case PHP_STREAM_MMAP_MAP_RANGE:
- do_fstat(data, 1);
- if (range->length == 0 || range->length > data->sb.st_size) {
- range->length = data->sb.st_size;
- }
- switch (range->mode) {
- case PHP_STREAM_MAP_MODE_READONLY:
- prot = PROT_READ;
- flags = MAP_PRIVATE;
- break;
- case PHP_STREAM_MAP_MODE_READWRITE:
- prot = PROT_READ | PROT_WRITE;
- flags = MAP_PRIVATE;
- break;
- case PHP_STREAM_MAP_MODE_SHARED_READONLY:
- prot = PROT_READ;
- flags = MAP_SHARED;
- break;
- case PHP_STREAM_MAP_MODE_SHARED_READWRITE:
- prot = PROT_READ | PROT_WRITE;
- flags = MAP_SHARED;
- break;
- default:
- return PHP_STREAM_OPTION_RETURN_ERR;
- }
- range->mapped = (char*)mmap(NULL, range->length, prot, flags, fd, range->offset);
- if (range->mapped == (char*)MAP_FAILED) {
- range->mapped = NULL;
- return PHP_STREAM_OPTION_RETURN_ERR;
- }
- /* remember the mapping */
- data->last_mapped_addr = range->mapped;
- data->last_mapped_len = range->length;
- return PHP_STREAM_OPTION_RETURN_OK;
-
- case PHP_STREAM_MMAP_UNMAP:
- if (data->last_mapped_addr) {
- munmap(data->last_mapped_addr, data->last_mapped_len);
- data->last_mapped_addr = NULL;
-
- return PHP_STREAM_OPTION_RETURN_OK;
- }
- return PHP_STREAM_OPTION_RETURN_ERR;
- }
- }
-#elif defined(PHP_WIN32)
- {
- php_stream_mmap_range *range = (php_stream_mmap_range*)ptrparam;
- HANDLE hfile = (HANDLE)_get_osfhandle(fd);
- DWORD prot, acc, loffs = 0, delta = 0;
-
- switch (value) {
- case PHP_STREAM_MMAP_SUPPORTED:
- return hfile == INVALID_HANDLE_VALUE ? PHP_STREAM_OPTION_RETURN_ERR : PHP_STREAM_OPTION_RETURN_OK;
-
- case PHP_STREAM_MMAP_MAP_RANGE:
- switch (range->mode) {
- case PHP_STREAM_MAP_MODE_READONLY:
- prot = PAGE_READONLY;
- acc = FILE_MAP_READ;
- break;
- case PHP_STREAM_MAP_MODE_READWRITE:
- prot = PAGE_READWRITE;
- acc = FILE_MAP_READ | FILE_MAP_WRITE;
- break;
- case PHP_STREAM_MAP_MODE_SHARED_READONLY:
- prot = PAGE_READONLY;
- acc = FILE_MAP_READ;
- /* TODO: we should assign a name for the mapping */
- break;
- case PHP_STREAM_MAP_MODE_SHARED_READWRITE:
- prot = PAGE_READWRITE;
- acc = FILE_MAP_READ | FILE_MAP_WRITE;
- /* TODO: we should assign a name for the mapping */
- break;
- }
-
- /* create a mapping capable of viewing the whole file (this costs no real resources) */
- data->file_mapping = CreateFileMapping(hfile, NULL, prot, 0, 0, NULL);
-
- if (data->file_mapping == NULL) {
- return PHP_STREAM_OPTION_RETURN_ERR;
- }
-
- if (range->length == 0) {
- range->length = GetFileSize(hfile, NULL) - range->offset;
- }
-
- /* figure out how big a chunk to map to be able to view the part that we need */
- if (range->offset != 0) {
- SYSTEM_INFO info;
- DWORD gran;
-
- GetSystemInfo(&info);
- gran = info.dwAllocationGranularity;
- loffs = (range->offset / gran) * gran;
- delta = range->offset - loffs;
- }
-
- data->last_mapped_addr = MapViewOfFile(data->file_mapping, acc, 0, loffs, range->length);
-
- if (data->last_mapped_addr) {
- /* give them back the address of the start offset they requested */
- range->mapped = data->last_mapped_addr + delta;
- return PHP_STREAM_OPTION_RETURN_OK;
- }
-
- CloseHandle(data->file_mapping);
- data->file_mapping = NULL;
-
- return PHP_STREAM_OPTION_RETURN_ERR;
-
- case PHP_STREAM_MMAP_UNMAP:
- if (data->last_mapped_addr) {
- UnmapViewOfFile(data->last_mapped_addr);
- data->last_mapped_addr = NULL;
- CloseHandle(data->file_mapping);
- data->file_mapping = NULL;
- return PHP_STREAM_OPTION_RETURN_OK;
- }
- return PHP_STREAM_OPTION_RETURN_ERR;
-
- default:
- return PHP_STREAM_OPTION_RETURN_ERR;
- }
- }
-
-#endif
- return PHP_STREAM_OPTION_RETURN_NOTIMPL;
-
- case PHP_STREAM_OPTION_TRUNCATE_API:
- switch (value) {
- case PHP_STREAM_TRUNCATE_SUPPORTED:
- return fd == -1 ? PHP_STREAM_OPTION_RETURN_ERR : PHP_STREAM_OPTION_RETURN_OK;
-
- case PHP_STREAM_TRUNCATE_SET_SIZE:
- return ftruncate(fd, *(size_t*)ptrparam) == 0 ? PHP_STREAM_OPTION_RETURN_OK : PHP_STREAM_OPTION_RETURN_ERR;
- }
-
- default:
- return PHP_STREAM_OPTION_RETURN_NOTIMPL;
- }
-}
-
-PHPAPI php_stream_ops php_stream_stdio_ops = {
- php_stdiop_write, php_stdiop_read,
- php_stdiop_close, php_stdiop_flush,
- "STDIO",
- php_stdiop_seek,
- php_stdiop_cast,
- php_stdiop_stat,
- php_stdiop_set_option
-};
-/* }}} */
-
-/* {{{ plain files opendir/readdir implementation */
-static size_t php_plain_files_dirstream_read(php_stream *stream, char *buf, size_t count TSRMLS_DC)
-{
- DIR *dir = (DIR*)stream->abstract;
- /* avoid libc5 readdir problems */
- char entry[sizeof(struct dirent)+MAXPATHLEN];
- struct dirent *result = (struct dirent *)&entry;
- php_stream_dirent *ent = (php_stream_dirent*)buf;
-
- /* avoid problems if someone mis-uses the stream */
- if (count != sizeof(php_stream_dirent))
- return 0;
-
- if (php_readdir_r(dir, (struct dirent *)entry, &result) == 0 && result) {
- PHP_STRLCPY(ent->d_name, result->d_name, sizeof(ent->d_name), strlen(result->d_name));
- return sizeof(php_stream_dirent);
- }
- return 0;
-}
-
-static int php_plain_files_dirstream_close(php_stream *stream, int close_handle TSRMLS_DC)
-{
- return closedir((DIR *)stream->abstract);
-}
-
-static int php_plain_files_dirstream_rewind(php_stream *stream, off_t offset, int whence, off_t *newoffs TSRMLS_DC)
-{
- rewinddir((DIR *)stream->abstract);
- return 0;
-}
-
-static php_stream_ops php_plain_files_dirstream_ops = {
- NULL, php_plain_files_dirstream_read,
- php_plain_files_dirstream_close, NULL,
- "dir",
- php_plain_files_dirstream_rewind,
- NULL, /* cast */
- NULL, /* stat */
- NULL /* set_option */
-};
-
-static php_stream *php_plain_files_dir_opener(php_stream_wrapper *wrapper, char *path, char *mode,
- int options, char **opened_path, php_stream_context *context STREAMS_DC TSRMLS_DC)
-{
- DIR *dir = NULL;
- php_stream *stream = NULL;
-
- if (((options & STREAM_DISABLE_OPEN_BASEDIR) == 0) && php_check_open_basedir(path TSRMLS_CC)) {
- return NULL;
- }
-
- if (PG(safe_mode) &&(!php_checkuid(path, NULL, CHECKUID_CHECK_FILE_AND_DIR))) {
- return NULL;
- }
-
- dir = VCWD_OPENDIR(path);
-
-#ifdef PHP_WIN32
- if (dir && dir->finished) {
- closedir(dir);
- dir = NULL;
- }
-#endif
- if (dir) {
- stream = php_stream_alloc(&php_plain_files_dirstream_ops, dir, 0, mode);
- if (stream == NULL)
- closedir(dir);
- }
-
- return stream;
-}
-/* }}} */
-
-/* {{{ php_stream_fopen */
-PHPAPI php_stream *_php_stream_fopen(const char *filename, const char *mode, char **opened_path, int options STREAMS_DC TSRMLS_DC)
-{
- char *realpath = NULL;
- int open_flags;
- int fd;
- php_stream *ret;
- int persistent = options & STREAM_OPEN_PERSISTENT;
- char *persistent_id = NULL;
-
- if (FAILURE == php_stream_parse_fopen_modes(mode, &open_flags)) {
- if (options & REPORT_ERRORS) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "`%s' is not a valid mode for fopen", mode);
- }
- return NULL;
- }
-
- if ((realpath = expand_filepath(filename, NULL TSRMLS_CC)) == NULL) {
- return NULL;
- }
-
- if (persistent) {
- spprintf(&persistent_id, 0, "streams_stdio_%d_%s", open_flags, realpath);
- switch (php_stream_from_persistent_id(persistent_id, &ret TSRMLS_CC)) {
- case PHP_STREAM_PERSISTENT_SUCCESS:
- if (opened_path) {
- *opened_path = realpath;
- realpath = NULL;
- }
- if (realpath) {
- efree(realpath);
- }
- /* fall through */
-
- case PHP_STREAM_PERSISTENT_FAILURE:
- efree(persistent_id);;
- return ret;
- }
- }
-
- fd = open(realpath, open_flags, 0666);
-
- if (fd != -1) {
-
- ret = php_stream_fopen_from_fd_rel(fd, mode, persistent_id);
-
- if (ret) {
- if (opened_path) {
- *opened_path = realpath;
- realpath = NULL;
- }
- if (realpath) {
- efree(realpath);
- }
- if (persistent_id) {
- efree(persistent_id);
- }
-
- /* sanity checks for include/require.
- * We check these after opening the stream, so that we save
- * on fstat() syscalls */
- if (options & STREAM_OPEN_FOR_INCLUDE) {
- php_stdio_stream_data *self = (php_stdio_stream_data*)ret->abstract;
- int r;
-
- r = do_fstat(self, 0);
- if (
-#ifndef PHP_WIN32
- (r != 0) || /* it is OK for fstat to fail under win32 */
-#endif
- (r == 0 && !S_ISREG(self->sb.st_mode))) {
- php_stream_close(ret);
- return NULL;
- }
- }
-
- return ret;
- }
- close(fd);
- }
- efree(realpath);
- if (persistent_id) {
- efree(persistent_id);
- }
- return NULL;
-}
-/* }}} */
-
-
-static php_stream *php_plain_files_stream_opener(php_stream_wrapper *wrapper, char *path, char *mode,
- int options, char **opened_path, php_stream_context *context STREAMS_DC TSRMLS_DC)
-{
- if ((options & USE_PATH) && PG(include_path) != NULL) {
- return php_stream_fopen_with_path_rel(path, mode, PG(include_path), opened_path, options);
- }
-
- if (((options & STREAM_DISABLE_OPEN_BASEDIR) == 0) && php_check_open_basedir(path TSRMLS_CC)) {
- return NULL;
- }
-
- if ((options & ENFORCE_SAFE_MODE) && PG(safe_mode) && (!php_checkuid(path, mode, CHECKUID_CHECK_MODE_PARAM)))
- return NULL;
-
- return php_stream_fopen_rel(path, mode, opened_path, options);
-}
-
-static int php_plain_files_url_stater(php_stream_wrapper *wrapper, char *url, int flags, php_stream_statbuf *ssb, php_stream_context *context TSRMLS_DC)
-{
-
- if (strncmp(url, "file://", sizeof("file://") - 1) == 0) {
- url += sizeof("file://") - 1;
- }
-
- if (PG(safe_mode) &&(!php_checkuid_ex(url, NULL, CHECKUID_CHECK_FILE_AND_DIR, (flags & PHP_STREAM_URL_STAT_QUIET) ? CHECKUID_NO_ERRORS : 0))) {
- return -1;
- }
-
- if (php_check_open_basedir_ex(url, (flags & PHP_STREAM_URL_STAT_QUIET) ? 0 : 1 TSRMLS_CC)) {
- return -1;
- }
-
-#ifdef HAVE_SYMLINK
- if (flags & PHP_STREAM_URL_STAT_LINK) {
- return VCWD_LSTAT(url, &ssb->sb);
- } else
-#endif
- return VCWD_STAT(url, &ssb->sb);
-}
-
-static int php_plain_files_unlink(php_stream_wrapper *wrapper, char *url, int options, php_stream_context *context TSRMLS_DC)
-{
- char *p;
- int ret;
- zval funcname;
- zval *retval = NULL;
-
- if ((p = strstr(url, "://")) != NULL) {
- url = p + 3;
- }
-
- if (options & ENFORCE_SAFE_MODE) {
- if (PG(safe_mode) && !php_checkuid(url, NULL, CHECKUID_CHECK_FILE_AND_DIR)) {
- return 0;
- }
-
- if (php_check_open_basedir(url TSRMLS_CC)) {
- return 0;
- }
- }
-
- ret = VCWD_UNLINK(url);
- if (ret == -1) {
- if (options & REPORT_ERRORS) {
- php_error_docref1(NULL TSRMLS_CC, url, E_WARNING, "%s", strerror(errno));
- }
- return 0;
- }
- /* Clear stat cache */
- ZVAL_STRINGL(&funcname, "clearstatcache", sizeof("clearstatcache")-1, 0);
- call_user_function_ex(CG(function_table), NULL, &funcname, &retval, 0, NULL, 0, NULL TSRMLS_CC);
- if (retval) {
- zval_ptr_dtor(&retval);
- }
- return 1;
-}
-
-static int php_plain_files_rename(php_stream_wrapper *wrapper, char *url_from, char *url_to, int options, php_stream_context *context TSRMLS_DC)
-{
- char *p;
- int ret;
-
- if (!url_from || !url_to) {
- return 0;
- }
-
- if ((p = strstr(url_from, "://")) != NULL) {
- url_from = p + 3;
- }
-
- if ((p = strstr(url_to, "://")) != NULL) {
- url_to = p + 3;
- }
-
- if (PG(safe_mode) && (!php_checkuid(url_from, NULL, CHECKUID_CHECK_FILE_AND_DIR) ||
- !php_checkuid(url_to, NULL, CHECKUID_CHECK_FILE_AND_DIR))) {
- return 0;
- }
-
- if (php_check_open_basedir(url_from TSRMLS_CC) || php_check_open_basedir(url_to TSRMLS_CC)) {
- return 0;
- }
-
- ret = VCWD_RENAME(url_from, url_to);
-
- if (ret == -1) {
-#ifdef EXDEV
- if (errno == EXDEV) {
- if (php_copy_file(url_from, url_to TSRMLS_CC) == SUCCESS) {
- VCWD_UNLINK(url_from);
- return 1;
- }
- }
-#endif
- php_error_docref2(NULL TSRMLS_CC, url_from, url_to, E_WARNING, "%s", strerror(errno));
- return 0;
- }
-
- return 1;
-}
-
-static int php_plain_files_mkdir(php_stream_wrapper *wrapper, char *dir, int mode, int options, php_stream_context *context TSRMLS_DC)
-{
- int ret, recursive = options & PHP_STREAM_MKDIR_RECURSIVE;
- char *p;
-
- if ((p = strstr(dir, "://")) != NULL) {
- dir = p + 3;
- }
-
- if (!recursive) {
- ret = php_mkdir(dir, mode TSRMLS_CC);
- } else {
- /* we look for directory separator from the end of string, thus hopefuly reducing our work load */
- char *e, *buf;
- struct stat sb;
- int dir_len = strlen(dir);
-
- buf = estrndup(dir, dir_len);
- e = buf + dir_len;
-
- /* find a top level directory we need to create */
- while ((p = strrchr(buf, DEFAULT_SLASH))) {
- *p = '\0';
- if (VCWD_STAT(buf, &sb) == 0) {
- *p = DEFAULT_SLASH;
- break;
- }
- }
- if (p == buf) {
- ret = php_mkdir(dir, mode TSRMLS_CC);
- } else if (!(ret = php_mkdir(buf, mode TSRMLS_CC))) {
- if (!p) {
- p = buf;
- }
- /* create any needed directories if the creation of the 1st directory worked */
- while (++p != e) {
- if (*p == '\0' && *(p + 1) != '\0') {
- *p = DEFAULT_SLASH;
- if ((ret = VCWD_MKDIR(buf, (mode_t)mode)) < 0) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", strerror(errno));
- break;
- }
- }
- }
- }
- efree(buf);
- }
- if (ret < 0) {
- /* Failure */
- return 0;
- } else {
- /* Success */
- return 1;
- }
-}
-
-static int php_plain_files_rmdir(php_stream_wrapper *wrapper, char *url, int options, php_stream_context *context TSRMLS_DC)
-{
- if (PG(safe_mode) &&(!php_checkuid(url, NULL, CHECKUID_CHECK_FILE_AND_DIR))) {
- return 0;
- }
-
- if (php_check_open_basedir(url TSRMLS_CC)) {
- return 0;
- }
-
- if (VCWD_RMDIR(url) < 0) {
- php_error_docref1(NULL TSRMLS_CC, url, E_WARNING, "%s", strerror(errno));
- return 0;
- }
-
- return 1;
-}
-
-static php_stream_wrapper_ops php_plain_files_wrapper_ops = {
- php_plain_files_stream_opener,
- NULL,
- NULL,
- php_plain_files_url_stater,
- php_plain_files_dir_opener,
- "plainfile",
- php_plain_files_unlink,
- php_plain_files_rename,
- php_plain_files_mkdir,
- php_plain_files_rmdir
-};
-
-php_stream_wrapper php_plain_files_wrapper = {
- &php_plain_files_wrapper_ops,
- NULL,
- 0
-};
-
-/* {{{ php_stream_fopen_with_path */
-PHPAPI php_stream *_php_stream_fopen_with_path(char *filename, char *mode, char *path, char **opened_path, int options STREAMS_DC TSRMLS_DC)
-{
- /* code ripped off from fopen_wrappers.c */
- char *pathbuf, *ptr, *end;
- char *exec_fname;
- char trypath[MAXPATHLEN];
- struct stat sb;
- php_stream *stream;
- int path_length;
- int filename_length;
- int exec_fname_length;
-
- if (opened_path) {
- *opened_path = NULL;
- }
-
- if(!filename) {
- return NULL;
- }
-
- filename_length = strlen(filename);
-
- /* Relative path open */
- if (*filename == '.' && (IS_SLASH(filename[1]) || filename[1] == '.')) {
- /* further checks, we could have ....... filenames */
- ptr = filename + 1;
- if (*ptr == '.') {
- while (*(++ptr) == '.');
- if (!IS_SLASH(*ptr)) { /* not a relative path after all */
- goto not_relative_path;
- }
- }
-
-
- if (((options & STREAM_DISABLE_OPEN_BASEDIR) == 0) && php_check_open_basedir(filename TSRMLS_CC)) {
- return NULL;
- }
-
- if (PG(safe_mode) && (!php_checkuid(filename, mode, CHECKUID_CHECK_MODE_PARAM))) {
- return NULL;
- }
- return php_stream_fopen_rel(filename, mode, opened_path, options);
- }
-
- /*
- * files in safe_mode_include_dir (or subdir) are excluded from
- * safe mode GID/UID checks
- */
-
-not_relative_path:
-
- /* Absolute path open */
- if (IS_ABSOLUTE_PATH(filename, filename_length)) {
-
- if (((options & STREAM_DISABLE_OPEN_BASEDIR) == 0) && php_check_open_basedir(filename TSRMLS_CC)) {
- return NULL;
- }
-
- if ((php_check_safe_mode_include_dir(filename TSRMLS_CC)) == 0)
- /* filename is in safe_mode_include_dir (or subdir) */
- return php_stream_fopen_rel(filename, mode, opened_path, options);
-
- if (PG(safe_mode) && (!php_checkuid(filename, mode, CHECKUID_CHECK_MODE_PARAM)))
- return NULL;
-
- return php_stream_fopen_rel(filename, mode, opened_path, options);
- }
-
-#ifdef PHP_WIN32
- if (IS_SLASH(filename[0])) {
- int cwd_len;
- char *cwd;
- cwd = virtual_getcwd_ex(&cwd_len TSRMLS_CC);
- /* getcwd() will return always return [DRIVE_LETTER]:/) on windows. */
- *(cwd+3) = '\0';
-
- snprintf(trypath, MAXPATHLEN, "%s%s", cwd, filename);
-
- free(cwd);
-
- if (((options & STREAM_DISABLE_OPEN_BASEDIR) == 0) && php_check_open_basedir(trypath TSRMLS_CC)) {
- return NULL;
- }
- if ((php_check_safe_mode_include_dir(trypath TSRMLS_CC)) == 0) {
- return php_stream_fopen_rel(trypath, mode, opened_path, options);
- }
- if (PG(safe_mode) && (!php_checkuid(trypath, mode, CHECKUID_CHECK_MODE_PARAM))) {
- return NULL;
- }
-
- return php_stream_fopen_rel(trypath, mode, opened_path, options);
- }
-#endif
-
- if (!path || (path && !*path)) {
-
- if (((options & STREAM_DISABLE_OPEN_BASEDIR) == 0) && php_check_open_basedir(path TSRMLS_CC)) {
- return NULL;
- }
-
- if (PG(safe_mode) && (!php_checkuid(filename, mode, CHECKUID_CHECK_MODE_PARAM))) {
- return NULL;
- }
- return php_stream_fopen_rel(filename, mode, opened_path, options);
- }
-
- /* check in provided path */
- /* append the calling scripts' current working directory
- * as a fall back case
- */
- if (zend_is_executing(TSRMLS_C)) {
- exec_fname = zend_get_executed_filename(TSRMLS_C);
- exec_fname_length = strlen(exec_fname);
- path_length = strlen(path);
-
- while ((--exec_fname_length >= 0) && !IS_SLASH(exec_fname[exec_fname_length]));
- if ((exec_fname && exec_fname[0] == '[')
- || exec_fname_length<=0) {
- /* [no active file] or no path */
- pathbuf = estrdup(path);
- } else {
- pathbuf = (char *) emalloc(exec_fname_length + path_length +1 +1);
- memcpy(pathbuf, path, path_length);
- pathbuf[path_length] = DEFAULT_DIR_SEPARATOR;
- memcpy(pathbuf+path_length+1, exec_fname, exec_fname_length);
- pathbuf[path_length + exec_fname_length +1] = '\0';
- }
- } else {
- pathbuf = estrdup(path);
- }
-
- ptr = pathbuf;
-
- while (ptr && *ptr) {
- end = strchr(ptr, DEFAULT_DIR_SEPARATOR);
- if (end != NULL) {
- *end = '\0';
- end++;
- }
- snprintf(trypath, MAXPATHLEN, "%s/%s", ptr, filename);
-
- if (((options & STREAM_DISABLE_OPEN_BASEDIR) == 0) && php_check_open_basedir(trypath TSRMLS_CC)) {
- stream = NULL;
- goto stream_done;
- }
-
- if (PG(safe_mode)) {
- if (VCWD_STAT(trypath, &sb) == 0) {
- /* file exists ... check permission */
- if ((php_check_safe_mode_include_dir(trypath TSRMLS_CC) == 0) ||
- php_checkuid(trypath, mode, CHECKUID_CHECK_MODE_PARAM)) {
- /* UID ok, or trypath is in safe_mode_include_dir */
- stream = php_stream_fopen_rel(trypath, mode, opened_path, options);
- } else {
- stream = NULL;
- }
- goto stream_done;
- }
- }
- stream = php_stream_fopen_rel(trypath, mode, opened_path, options);
- if (stream) {
-stream_done:
- efree(pathbuf);
- return stream;
- }
- ptr = end;
- } /* end provided path */
-
- efree(pathbuf);
- return NULL;
-
-}
-/* }}} */
-
-
-
-
-/*
- * 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/main/streams/streams.c b/main/streams/streams.c
deleted file mode 100755
index a7c65dde57..0000000000
--- a/main/streams/streams.c
+++ /dev/null
@@ -1,1941 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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. |
- +----------------------------------------------------------------------+
- | Authors: Wez Furlong <wez@thebrainroom.com> |
- | Borrowed code from: |
- | Rasmus Lerdorf <rasmus@lerdorf.on.ca> |
- | Jim Winstead <jimw@php.net> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-#define _GNU_SOURCE
-#include "php.h"
-#include "php_globals.h"
-#include "php_network.h"
-#include "php_open_temporary_file.h"
-#include "ext/standard/file.h"
-#include "ext/standard/basic_functions.h" /* for BG(mmap_file) (not strictly required) */
-#include "ext/standard/php_string.h" /* for php_memnstr, used by php_stream_get_record() */
-#include <stddef.h>
-#include <fcntl.h>
-#include "php_streams_int.h"
-
-/* {{{ resource and registration code */
-/* Global wrapper hash, copied to FG(stream_wrappers) on registration of volatile wrapper */
-static HashTable url_stream_wrappers_hash;
-static int le_stream = FAILURE; /* true global */
-static int le_pstream = FAILURE; /* true global */
-
-PHPAPI int php_file_le_stream(void)
-{
- return le_stream;
-}
-
-PHPAPI int php_file_le_pstream(void)
-{
- return le_pstream;
-}
-
-PHPAPI HashTable *_php_stream_get_url_stream_wrappers_hash(TSRMLS_D)
-{
- return (FG(stream_wrappers) ? FG(stream_wrappers) : &url_stream_wrappers_hash);
-}
-
-static int _php_stream_release_context(list_entry *le, void *pContext TSRMLS_DC)
-{
- if (le->ptr == pContext) {
- return --le->refcount == 0;
- }
- return 0;
-}
-
-static int forget_persistent_resource_id_numbers(zend_rsrc_list_entry *rsrc TSRMLS_DC)
-{
- php_stream *stream;
-
- if (Z_TYPE_P(rsrc) != le_pstream) {
- return 0;
- }
-
- stream = (php_stream*)rsrc->ptr;
-
-#if STREAM_DEBUG
-fprintf(stderr, "forget_persistent: %s:%p\n", stream->ops->label, stream);
-#endif
-
- stream->rsrc_id = FAILURE;
-
- if (stream->context) {
- zend_hash_apply_with_argument(&EG(regular_list),
- (apply_func_arg_t) _php_stream_release_context,
- stream->context TSRMLS_CC);
- stream->context = NULL;
- }
-
- return 0;
-}
-
-PHP_RSHUTDOWN_FUNCTION(streams)
-{
- zend_hash_apply(&EG(persistent_list), (apply_func_t)forget_persistent_resource_id_numbers TSRMLS_CC);
- return SUCCESS;
-}
-
-PHPAPI int php_stream_from_persistent_id(const char *persistent_id, php_stream **stream TSRMLS_DC)
-{
- zend_rsrc_list_entry *le;
-
- if (zend_hash_find(&EG(persistent_list), (char*)persistent_id, strlen(persistent_id)+1, (void*) &le) == SUCCESS) {
- if (Z_TYPE_P(le) == le_pstream) {
- if (stream) {
- *stream = (php_stream*)le->ptr;
- le->refcount++;
- (*stream)->rsrc_id = ZEND_REGISTER_RESOURCE(NULL, *stream, le_pstream);
- }
- return PHP_STREAM_PERSISTENT_SUCCESS;
- }
- return PHP_STREAM_PERSISTENT_FAILURE;
- }
- return PHP_STREAM_PERSISTENT_NOT_EXIST;
-}
-
-/* }}} */
-
-/* {{{ wrapper error reporting */
-void php_stream_display_wrapper_errors(php_stream_wrapper *wrapper, const char *path, const char *caption TSRMLS_DC)
-{
- char *tmp = estrdup(path);
- char *msg;
- int free_msg = 0;
-
- if (wrapper) {
- if (wrapper->err_count > 0) {
- int i;
- size_t l;
- int brlen;
- char *br;
-
- if (PG(html_errors)) {
- brlen = 7;
- br = "<br />\n";
- } else {
- brlen = 1;
- br = "\n";
- }
-
- for (i = 0, l = 0; i < wrapper->err_count; i++) {
- l += strlen(wrapper->err_stack[i]);
- if (i < wrapper->err_count - 1) {
- l += brlen;
- }
- }
- msg = emalloc(l + 1);
- msg[0] = '\0';
- for (i = 0; i < wrapper->err_count; i++) {
- strcat(msg, wrapper->err_stack[i]);
- if (i < wrapper->err_count - 1) {
- strcat(msg, br);
- }
- }
-
- free_msg = 1;
- } else {
- msg = strerror(errno);
- }
- } else {
- msg = "no suitable wrapper could be found";
- }
-
- php_strip_url_passwd(tmp);
- php_error_docref1(NULL TSRMLS_CC, tmp, E_WARNING, "%s: %s", caption, msg);
- efree(tmp);
- if (free_msg) {
- efree(msg);
- }
-}
-
-void php_stream_tidy_wrapper_error_log(php_stream_wrapper *wrapper TSRMLS_DC)
-{
- if (wrapper) {
- /* tidy up the error stack */
- int i;
-
- for (i = 0; i < wrapper->err_count; i++) {
- efree(wrapper->err_stack[i]);
- }
- if (wrapper->err_stack) {
- efree(wrapper->err_stack);
- }
- wrapper->err_stack = NULL;
- wrapper->err_count = 0;
- }
-}
-
-PHPAPI void php_stream_wrapper_log_error(php_stream_wrapper *wrapper, int options TSRMLS_DC, const char *fmt, ...)
-{
- va_list args;
- char *buffer = NULL;
-
- va_start(args, fmt);
- vspprintf(&buffer, 0, fmt, args);
- va_end(args);
-
- if (options & REPORT_ERRORS || wrapper == NULL) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", buffer);
- efree(buffer);
- } else {
- /* append to stack */
- wrapper->err_stack = erealloc(wrapper->err_stack, (wrapper->err_count + 1) * sizeof(char *));
- if (wrapper->err_stack) {
- wrapper->err_stack[wrapper->err_count++] = buffer;
- }
- }
-}
-
-
-/* }}} */
-
-/* allocate a new stream for a particular ops */
-PHPAPI php_stream *_php_stream_alloc(php_stream_ops *ops, void *abstract, const char *persistent_id, const char *mode STREAMS_DC TSRMLS_DC) /* {{{ */
-{
- php_stream *ret;
-
- ret = (php_stream*) pemalloc_rel_orig(sizeof(php_stream), persistent_id ? 1 : 0);
-
- memset(ret, 0, sizeof(php_stream));
-
- ret->readfilters.stream = ret;
- ret->writefilters.stream = ret;
-
-#if STREAM_DEBUG
-fprintf(stderr, "stream_alloc: %s:%p persistent=%s\n", ops->label, ret, persistent_id);
-#endif
-
- ret->ops = ops;
- ret->abstract = abstract;
- ret->is_persistent = persistent_id ? 1 : 0;
- ret->chunk_size = FG(def_chunk_size);
-
- if (FG(auto_detect_line_endings)) {
- ret->flags |= PHP_STREAM_FLAG_DETECT_EOL;
- }
-
- if (persistent_id) {
- zend_rsrc_list_entry le;
-
- Z_TYPE(le) = le_pstream;
- le.ptr = ret;
- le.refcount = 0;
-
- if (FAILURE == zend_hash_update(&EG(persistent_list), (char *)persistent_id,
- strlen(persistent_id) + 1,
- (void *)&le, sizeof(le), NULL)) {
-
- pefree(ret, 1);
- return NULL;
- }
- }
-
- ret->rsrc_id = ZEND_REGISTER_RESOURCE(NULL, ret, persistent_id ? le_pstream : le_stream);
- strlcpy(ret->mode, mode, sizeof(ret->mode));
-
- return ret;
-}
-/* }}} */
-
-static int _php_stream_free_persistent(list_entry *le, void *pStream TSRMLS_DC)
-{
- return le->ptr == pStream;
-}
-
-PHPAPI int _php_stream_free(php_stream *stream, int close_options TSRMLS_DC) /* {{{ */
-{
- int ret = 1;
- int remove_rsrc = 1;
- int preserve_handle = close_options & PHP_STREAM_FREE_PRESERVE_HANDLE ? 1 : 0;
- int release_cast = 1;
-
-#if STREAM_DEBUG
-fprintf(stderr, "stream_free: %s:%p[%s] in_free=%d opts=%08x\n", stream->ops->label, stream, stream->orig_path, stream->in_free, close_options);
-#endif
-
- /* recursion protection */
- if (stream->in_free) {
- return 1;
- }
-
- stream->in_free++;
-
- /* if we are releasing the stream only (and preserving the underlying handle),
- * we need to do things a little differently.
- * We are only ever called like this when the stream is cast to a FILE*
- * for include (or other similar) purposes.
- * */
- if (preserve_handle) {
- if (stream->fclose_stdiocast == PHP_STREAM_FCLOSE_FOPENCOOKIE) {
- /* If the stream was fopencookied, we must NOT touch anything
- * here, as the cookied stream relies on it all.
- * Instead, mark the stream as OK to auto-clean */
- php_stream_auto_cleanup(stream);
- stream->in_free--;
- return 0;
- }
- /* otherwise, make sure that we don't close the FILE* from a cast */
- release_cast = 0;
- }
-
-#if STREAM_DEBUG
-fprintf(stderr, "stream_free: %s:%p[%s] preserve_handle=%d release_cast=%d remove_rsrc=%d\n",
- stream->ops->label, stream, stream->orig_path, preserve_handle, release_cast, remove_rsrc);
-#endif
-
- /* make sure everything is saved */
- _php_stream_flush(stream, 1 TSRMLS_CC);
-
- /* If not called from the resource dtor, remove the stream from the resource list. */
- if ((close_options & PHP_STREAM_FREE_RSRC_DTOR) == 0 && remove_rsrc) {
- zend_list_delete(stream->rsrc_id);
- }
-
- /* Remove stream from any context link list */
- if (stream->context && stream->context->links) {
- php_stream_context_del_link(stream->context, stream);
- }
-
- if (close_options & PHP_STREAM_FREE_CALL_DTOR) {
- if (release_cast && stream->fclose_stdiocast == PHP_STREAM_FCLOSE_FOPENCOOKIE) {
- /* calling fclose on an fopencookied stream will ultimately
- call this very same function. If we were called via fclose,
- the cookie_closer unsets the fclose_stdiocast flags, so
- we can be sure that we only reach here when PHP code calls
- php_stream_free.
- Lets let the cookie code clean it all up.
- */
- stream->in_free = 0;
- return fclose(stream->stdiocast);
- }
-
- ret = stream->ops->close(stream, preserve_handle ? 0 : 1 TSRMLS_CC);
- stream->abstract = NULL;
-
- /* tidy up any FILE* that might have been fdopened */
- if (release_cast && stream->fclose_stdiocast == PHP_STREAM_FCLOSE_FDOPEN && stream->stdiocast) {
- fclose(stream->stdiocast);
- stream->stdiocast = NULL;
- stream->fclose_stdiocast = PHP_STREAM_FCLOSE_NONE;
- }
- }
-
- if (close_options & PHP_STREAM_FREE_RELEASE_STREAM) {
- while (stream->readfilters.head) {
- php_stream_filter_remove(stream->readfilters.head, 1 TSRMLS_CC);
- }
- while (stream->writefilters.head) {
- php_stream_filter_remove(stream->writefilters.head, 1 TSRMLS_CC);
- }
-
- if (stream->wrapper && stream->wrapper->wops && stream->wrapper->wops->stream_closer) {
- stream->wrapper->wops->stream_closer(stream->wrapper, stream TSRMLS_CC);
- stream->wrapper = NULL;
- }
-
- if (stream->wrapperdata) {
- zval_ptr_dtor(&stream->wrapperdata);
- stream->wrapperdata = NULL;
- }
-
- if (stream->readbuf) {
- pefree(stream->readbuf, stream->is_persistent);
- stream->readbuf = NULL;
- }
-
- if (stream->is_persistent && (close_options & PHP_STREAM_FREE_PERSISTENT)) {
- /* we don't work with *stream but need its value for comparison */
- zend_hash_apply_with_argument(&EG(persistent_list), (apply_func_arg_t) _php_stream_free_persistent, stream TSRMLS_CC);
- }
-#if ZEND_DEBUG
- if ((close_options & PHP_STREAM_FREE_RSRC_DTOR) && (stream->__exposed == 0) && (EG(error_reporting) & E_WARNING)) {
- /* it leaked: Lets deliberately NOT pefree it so that the memory manager shows it
- * as leaked; it will log a warning, but lets help it out and display what kind
- * of stream it was. */
- char *leakinfo;
- spprintf(&leakinfo, 0, __FILE__ "(%d) : Stream of type '%s' %p (path:%s) was not closed\n", __LINE__, stream->ops->label, stream, stream->orig_path);
-
- if (stream->orig_path) {
- pefree(stream->orig_path, stream->is_persistent);
- stream->orig_path = NULL;
- }
-
-# if defined(PHP_WIN32)
- OutputDebugString(leakinfo);
-# else
- fprintf(stderr, "%s", leakinfo);
-# endif
- efree(leakinfo);
- } else {
- if (stream->orig_path) {
- pefree(stream->orig_path, stream->is_persistent);
- stream->orig_path = NULL;
- }
-
- pefree(stream, stream->is_persistent);
- }
-#else
- if (stream->orig_path) {
- pefree(stream->orig_path, stream->is_persistent);
- stream->orig_path = NULL;
- }
-
- pefree(stream, stream->is_persistent);
-#endif
- }
-
- return ret;
-}
-/* }}} */
-
-/* {{{ generic stream operations */
-
-static void php_stream_fill_read_buffer(php_stream *stream, size_t size TSRMLS_DC)
-{
- /* allocate/fill the buffer */
-
- if (stream->readfilters.head) {
- char *chunk_buf;
- int err_flag = 0;
- php_stream_bucket_brigade brig_in = { NULL, NULL }, brig_out = { NULL, NULL };
- php_stream_bucket_brigade *brig_inp = &brig_in, *brig_outp = &brig_out, *brig_swap;
-
- /* allocate a buffer for reading chunks */
- chunk_buf = emalloc(stream->chunk_size);
-
- while (!err_flag && (stream->writepos - stream->readpos < (off_t)size)) {
- size_t justread = 0;
- int flags;
- php_stream_bucket *bucket;
- php_stream_filter_status_t status = PSFS_ERR_FATAL;
- php_stream_filter *filter;
-
- /* read a chunk into a bucket */
- justread = stream->ops->read(stream, chunk_buf, stream->chunk_size TSRMLS_CC);
- if (justread > 0) {
- bucket = php_stream_bucket_new(stream, chunk_buf, justread, 0, 0 TSRMLS_CC);
-
- /* after this call, bucket is owned by the brigade */
- php_stream_bucket_append(brig_inp, bucket TSRMLS_CC);
-
- flags = PSFS_FLAG_NORMAL;
- } else {
- flags = stream->eof ? PSFS_FLAG_FLUSH_CLOSE : PSFS_FLAG_FLUSH_INC;
- }
-
- /* wind the handle... */
- for (filter = stream->readfilters.head; filter; filter = filter->next) {
- status = filter->fops->filter(stream, filter, brig_inp, brig_outp, NULL, flags TSRMLS_CC);
-
- if (status != PSFS_PASS_ON) {
- break;
- }
-
- /* brig_out becomes brig_in.
- * brig_in will always be empty here, as the filter MUST attach any un-consumed buckets
- * to its own brigade */
- brig_swap = brig_inp;
- brig_inp = brig_outp;
- brig_outp = brig_swap;
- memset(brig_outp, 0, sizeof(*brig_outp));
- }
-
- switch (status) {
- case PSFS_PASS_ON:
- /* we get here when the last filter in the chain has data to pass on.
- * in this situation, we are passing the brig_in brigade into the
- * stream read buffer */
- while (brig_inp->head) {
- bucket = brig_inp->head;
- /* grow buffer to hold this bucket
- * TODO: this can fail for persistent streams */
- if (stream->readbuflen - stream->writepos < bucket->buflen) {
- stream->readbuflen += bucket->buflen;
- stream->readbuf = perealloc(stream->readbuf, stream->readbuflen,
- stream->is_persistent);
- }
- memcpy(stream->readbuf + stream->writepos, bucket->buf, bucket->buflen);
- stream->writepos += bucket->buflen;
-
- php_stream_bucket_unlink(bucket TSRMLS_CC);
- php_stream_bucket_delref(bucket TSRMLS_CC);
- }
-
- break;
-
- case PSFS_FEED_ME:
- /* when a filter needs feeding, there is no brig_out to deal with.
- * we simply continue the loop; if the caller needs more data,
- * we will read again, otherwise out job is done here */
- if (justread == 0) {
- /* there is no data */
- err_flag = 1;
- break;
- }
- continue;
-
- case PSFS_ERR_FATAL:
- /* some fatal error. Theoretically, the stream is borked, so all
- * further reads should fail. */
- err_flag = 1;
- break;
- }
-
- if (justread == 0) {
- break;
- }
- }
-
- efree(chunk_buf);
-
- } else {
- /* is there enough data in the buffer ? */
- if (stream->writepos - stream->readpos < (off_t)size) {
- size_t justread = 0;
-
- /* reduce buffer memory consumption if possible, to avoid a realloc */
- if (stream->readbuf && stream->readbuflen - stream->writepos < stream->chunk_size) {
- memmove(stream->readbuf, stream->readbuf + stream->readpos, stream->readbuflen - stream->readpos);
- stream->writepos -= stream->readpos;
- stream->readpos = 0;
- }
-
- /* grow the buffer if required
- * TODO: this can fail for persistent streams */
- if (stream->readbuflen - stream->writepos < stream->chunk_size) {
- stream->readbuflen += stream->chunk_size;
- stream->readbuf = perealloc(stream->readbuf, stream->readbuflen,
- stream->is_persistent);
- }
-
- justread = stream->ops->read(stream, stream->readbuf + stream->writepos,
- stream->readbuflen - stream->writepos
- TSRMLS_CC);
-
- if (justread != (size_t)-1) {
- stream->writepos += justread;
- }
- }
- }
-}
-
-PHPAPI size_t _php_stream_read(php_stream *stream, char *buf, size_t size TSRMLS_DC)
-{
- size_t toread = 0, didread = 0;
-
- while (size > 0) {
-
- /* take from the read buffer first.
- * It is possible that a buffered stream was switched to non-buffered, so we
- * drain the remainder of the buffer before using the "raw" read mode for
- * the excess */
- if (stream->writepos > stream->readpos) {
-
- toread = stream->writepos - stream->readpos;
- if (toread > size) {
- toread = size;
- }
-
- memcpy(buf, stream->readbuf + stream->readpos, toread);
- stream->readpos += toread;
- size -= toread;
- buf += toread;
- didread += toread;
- }
-
- /* ignore eof here; the underlying state might have changed */
- if (size == 0) {
- break;
- }
-
- if (!stream->readfilters.head && (stream->flags & PHP_STREAM_FLAG_NO_BUFFER || stream->chunk_size == 1)) {
- toread = stream->ops->read(stream, buf, size TSRMLS_CC);
- } else {
- php_stream_fill_read_buffer(stream, size TSRMLS_CC);
-
- toread = stream->writepos - stream->readpos;
- if (toread > size) {
- toread = size;
- }
-
- if (toread > 0) {
- memcpy(buf, stream->readbuf + stream->readpos, toread);
- stream->readpos += toread;
- }
- }
- if (toread > 0) {
- didread += toread;
- buf += toread;
- size -= toread;
- } else {
- /* EOF, or temporary end of data (for non-blocking mode). */
- break;
- }
-
- /* just break anyway, to avoid greedy read */
- if (stream->wrapper != &php_plain_files_wrapper)
- break;
- }
-
- if (didread > 0) {
- stream->position += didread;
- }
-
- return didread;
-}
-
-PHPAPI int _php_stream_eof(php_stream *stream TSRMLS_DC)
-{
- /* if there is data in the buffer, it's not EOF */
- if (stream->writepos - stream->readpos > 0) {
- return 0;
- }
-
- /* use the configured timeout when checking eof */
- if (!stream->eof && PHP_STREAM_OPTION_RETURN_ERR ==
- php_stream_set_option(stream, PHP_STREAM_OPTION_CHECK_LIVENESS,
- 0, NULL)) {
- stream->eof = 1;
- }
-
- return stream->eof;
-}
-
-PHPAPI int _php_stream_putc(php_stream *stream, int c TSRMLS_DC)
-{
- unsigned char buf = c;
-
- if (php_stream_write(stream, &buf, 1) > 0) {
- return 1;
- }
- return EOF;
-}
-
-PHPAPI int _php_stream_getc(php_stream *stream TSRMLS_DC)
-{
- char buf;
-
- if (php_stream_read(stream, &buf, 1) > 0) {
- return buf & 0xff;
- }
- return EOF;
-}
-
-PHPAPI int _php_stream_puts(php_stream *stream, char *buf TSRMLS_DC)
-{
- int len;
- char newline[2] = "\n"; /* is this OK for Win? */
- len = strlen(buf);
-
- if (len > 0 && php_stream_write(stream, buf, len) && php_stream_write(stream, newline, 1)) {
- return 1;
- }
- return 0;
-}
-
-PHPAPI int _php_stream_stat(php_stream *stream, php_stream_statbuf *ssb TSRMLS_DC)
-{
- memset(ssb, 0, sizeof(*ssb));
-
- /* if the stream was wrapped, allow the wrapper to stat it */
- if (stream->wrapper && stream->wrapper->wops->stream_stat != NULL) {
- return stream->wrapper->wops->stream_stat(stream->wrapper, stream, ssb TSRMLS_CC);
- }
-
- /* if the stream doesn't directly support stat-ing, return with failure.
- * We could try and emulate this by casting to a FD and fstat-ing it,
- * but since the fd might not represent the actual underlying content
- * this would give bogus results. */
- if (stream->ops->stat == NULL) {
- return -1;
- }
-
- return (stream->ops->stat)(stream, ssb TSRMLS_CC);
-}
-
-PHPAPI char *php_stream_locate_eol(php_stream *stream, char *buf, size_t buf_len TSRMLS_DC)
-{
- size_t avail;
- char *cr, *lf, *eol = NULL;
- char *readptr;
-
- if (!buf) {
- readptr = stream->readbuf + stream->readpos;
- avail = stream->writepos - stream->readpos;
- } else {
- readptr = buf;
- avail = buf_len;
- }
-
- /* Look for EOL */
- if (stream->flags & PHP_STREAM_FLAG_DETECT_EOL) {
- cr = memchr(readptr, '\r', avail);
- lf = memchr(readptr, '\n', avail);
-
- if (cr && lf != cr + 1 && !(lf && lf < cr)) {
- /* mac */
- stream->flags ^= PHP_STREAM_FLAG_DETECT_EOL;
- stream->flags |= PHP_STREAM_FLAG_EOL_MAC;
- eol = cr;
- } else if ((cr && lf && cr == lf - 1) || (lf)) {
- /* dos or unix endings */
- stream->flags ^= PHP_STREAM_FLAG_DETECT_EOL;
- eol = lf;
- }
- } else if (stream->flags & PHP_STREAM_FLAG_EOL_MAC) {
- eol = memchr(readptr, '\r', avail);
- } else {
- /* unix (and dos) line endings */
- eol = memchr(readptr, '\n', avail);
- }
-
- return eol;
-}
-
-/* If buf == NULL, the buffer will be allocated automatically and will be of an
- * appropriate length to hold the line, regardless of the line length, memory
- * permitting */
-PHPAPI char *_php_stream_get_line(php_stream *stream, char *buf, size_t maxlen,
- size_t *returned_len TSRMLS_DC)
-{
- size_t avail = 0;
- size_t current_buf_size = 0;
- size_t total_copied = 0;
- int grow_mode = 0;
- char *bufstart = buf;
-
- if (buf == NULL) {
- grow_mode = 1;
- } else if (maxlen == 0) {
- return NULL;
- }
-
- /*
- * If the underlying stream operations block when no new data is readable,
- * we need to take extra precautions.
- *
- * If there is buffered data available, we check for a EOL. If it exists,
- * we pass the data immediately back to the caller. This saves a call
- * to the read implementation and will not block where blocking
- * is not necessary at all.
- *
- * If the stream buffer contains more data than the caller requested,
- * we can also avoid that costly step and simply return that data.
- */
-
- for (;;) {
- avail = stream->writepos - stream->readpos;
-
- if (avail > 0) {
- size_t cpysz = 0;
- char *readptr;
- char *eol;
- int done = 0;
-
- readptr = stream->readbuf + stream->readpos;
- eol = php_stream_locate_eol(stream, NULL, 0 TSRMLS_CC);
-
- if (eol) {
- cpysz = eol - readptr + 1;
- done = 1;
- } else {
- cpysz = avail;
- }
-
- if (grow_mode) {
- /* allow room for a NUL. If this realloc is really a realloc
- * (ie: second time around), we get an extra byte. In most
- * cases, with the default chunk size of 8K, we will only
- * incur that overhead once. When people have lines longer
- * than 8K, we waste 1 byte per additional 8K or so.
- * That seems acceptable to me, to avoid making this code
- * hard to follow */
- bufstart = erealloc(bufstart, current_buf_size + cpysz + 1);
- current_buf_size += cpysz + 1;
- buf = bufstart + total_copied;
- } else {
- if (cpysz >= maxlen - 1) {
- cpysz = maxlen - 1;
- done = 1;
- }
- }
-
- memcpy(buf, readptr, cpysz);
-
- stream->position += cpysz;
- stream->readpos += cpysz;
- buf += cpysz;
- maxlen -= cpysz;
- total_copied += cpysz;
-
- if (done) {
- break;
- }
- } else if (stream->eof) {
- break;
- } else {
- /* XXX: Should be fine to always read chunk_size */
- size_t toread;
-
- if (grow_mode) {
- toread = stream->chunk_size;
- } else {
- toread = maxlen - 1;
- if (toread > stream->chunk_size) {
- toread = stream->chunk_size;
- }
- }
-
- php_stream_fill_read_buffer(stream, toread TSRMLS_CC);
-
- if (stream->writepos - stream->readpos == 0) {
- break;
- }
- }
- }
-
- if (total_copied == 0) {
- if (grow_mode) {
- assert(bufstart == NULL);
- }
- return NULL;
- }
-
- buf[0] = '\0';
- if (returned_len) {
- *returned_len = total_copied;
- }
-
- return bufstart;
-}
-
-PHPAPI char *php_stream_get_record(php_stream *stream, size_t maxlen, size_t *returned_len, char *delim, size_t delim_len TSRMLS_DC)
-{
- char *e, *buf;
- size_t toread;
-
- php_stream_fill_read_buffer(stream, maxlen TSRMLS_CC);
-
- if (delim_len == 0) {
- toread = maxlen;
- } else {
- if (delim_len == 1) {
- e = memchr(stream->readbuf, *delim, stream->readbuflen);
- } else {
- e = php_memnstr(stream->readbuf, delim, delim_len, (stream->readbuf + stream->readbuflen));
- }
-
- if (!e) {
- toread = maxlen;
- } else {
- toread = e - (char *) stream->readbuf;
- }
- }
-
- if (toread > maxlen && maxlen > 0) {
- toread = maxlen;
- }
-
- buf = emalloc(toread + 1);
- *returned_len = php_stream_read(stream, buf, toread);
-
- if (*returned_len >= 0) {
- return buf;
- } else {
- efree(buf);
- return NULL;
- }
-}
-
-/* Writes a buffer directly to a stream, using multiple of the chunk size */
-static size_t _php_stream_write_buffer(php_stream *stream, const char *buf, size_t count TSRMLS_DC)
-{
- size_t didwrite = 0, towrite, justwrote;
-
- /* if we have a seekable stream we need to ensure that data is written at the
- * current stream->position. This means invalidating the read buffer and then
- * performing a low-level seek */
- if (stream->ops->seek && (stream->flags & PHP_STREAM_FLAG_NO_SEEK) == 0) {
- stream->readpos = stream->writepos = 0;
-
- stream->ops->seek(stream, stream->position, SEEK_SET, &stream->position TSRMLS_CC);
- }
-
-
- while (count > 0) {
- towrite = count;
- if (towrite > stream->chunk_size)
- towrite = stream->chunk_size;
-
- justwrote = stream->ops->write(stream, buf, towrite TSRMLS_CC);
-
- /* convert justwrote to an integer, since normally it is unsigned */
- if ((int)justwrote > 0) {
- buf += justwrote;
- count -= justwrote;
- didwrite += justwrote;
-
- /* Only screw with the buffer if we can seek, otherwise we lose data
- * buffered from fifos and sockets */
- if (stream->ops->seek && (stream->flags & PHP_STREAM_FLAG_NO_SEEK) == 0) {
- stream->position += justwrote;
- }
- } else {
- break;
- }
- }
- return didwrite;
-
-}
-
-/* push some data through the write filter chain.
- * buf may be NULL, if flags are set to indicate a flush.
- * This may trigger a real write to the stream.
- * Returns the number of bytes consumed from buf by the first filter in the chain.
- * */
-static size_t _php_stream_write_filtered(php_stream *stream, const char *buf, size_t count, int flags TSRMLS_DC)
-{
- size_t consumed = 0;
- php_stream_bucket *bucket;
- php_stream_bucket_brigade brig_in = { NULL, NULL }, brig_out = { NULL, NULL };
- php_stream_bucket_brigade *brig_inp = &brig_in, *brig_outp = &brig_out, *brig_swap;
- php_stream_filter_status_t status = PSFS_ERR_FATAL;
- php_stream_filter *filter;
-
- if (buf) {
- bucket = php_stream_bucket_new(stream, (char *)buf, count, 0, 0 TSRMLS_CC);
- php_stream_bucket_append(&brig_in, bucket TSRMLS_CC);
- }
-
- for (filter = stream->writefilters.head; filter; filter = filter->next) {
- /* for our return value, we are interested in the number of bytes consumed from
- * the first filter in the chain */
- status = filter->fops->filter(stream, filter, brig_inp, brig_outp,
- filter == stream->writefilters.head ? &consumed : NULL, flags TSRMLS_CC);
-
- if (status != PSFS_PASS_ON) {
- break;
- }
- /* brig_out becomes brig_in.
- * brig_in will always be empty here, as the filter MUST attach any un-consumed buckets
- * to its own brigade */
- brig_swap = brig_inp;
- brig_inp = brig_outp;
- brig_outp = brig_swap;
- memset(brig_outp, 0, sizeof(*brig_outp));
- }
-
- switch (status) {
- case PSFS_PASS_ON:
- /* filter chain generated some output; push it through to the
- * underlying stream */
- while (brig_inp->head) {
- bucket = brig_inp->head;
- _php_stream_write_buffer(stream, bucket->buf, bucket->buflen TSRMLS_CC);
- /* Potential error situation - eg: no space on device. Perhaps we should keep this brigade
- * hanging around and try to write it later.
- * At the moment, we just drop it on the floor
- * */
-
- php_stream_bucket_unlink(bucket TSRMLS_CC);
- php_stream_bucket_delref(bucket TSRMLS_CC);
- }
- break;
- case PSFS_FEED_ME:
- /* need more data before we can push data through to the stream */
- break;
-
- case PSFS_ERR_FATAL:
- /* some fatal error. Theoretically, the stream is borked, so all
- * further writes should fail. */
- break;
- }
-
- return consumed;
-}
-
-PHPAPI int _php_stream_flush(php_stream *stream, int closing TSRMLS_DC)
-{
- int ret = 0;
-
- if (stream->writefilters.head) {
- _php_stream_write_filtered(stream, NULL, 0, closing ? PSFS_FLAG_FLUSH_CLOSE : PSFS_FLAG_FLUSH_INC TSRMLS_CC);
- }
-
- if (stream->ops->flush) {
- ret = stream->ops->flush(stream TSRMLS_CC);
- }
-
- return ret;
-}
-
-PHPAPI size_t _php_stream_write(php_stream *stream, const char *buf, size_t count TSRMLS_DC)
-{
- if (buf == NULL || count == 0 || stream->ops->write == NULL) {
- return 0;
- }
-
- if (stream->writefilters.head) {
- return _php_stream_write_filtered(stream, buf, count, PSFS_FLAG_NORMAL TSRMLS_CC);
- } else {
- return _php_stream_write_buffer(stream, buf, count TSRMLS_CC);
- }
-}
-
-PHPAPI size_t _php_stream_printf(php_stream *stream TSRMLS_DC, const char *fmt, ...)
-{
- size_t count;
- char *buf;
- va_list ap;
-
- va_start(ap, fmt);
- count = vspprintf(&buf, 0, fmt, ap);
- va_end(ap);
-
- if (!buf) {
- return 0; /* error condition */
- }
-
- count = php_stream_write(stream, buf, count);
- efree(buf);
-
- return count;
-}
-
-PHPAPI off_t _php_stream_tell(php_stream *stream TSRMLS_DC)
-{
- return stream->position;
-}
-
-PHPAPI int _php_stream_seek(php_stream *stream, off_t offset, int whence TSRMLS_DC)
-{
- /* handle the case where we are in the buffer */
- if ((stream->flags & PHP_STREAM_FLAG_NO_BUFFER) == 0) {
- switch(whence) {
- case SEEK_CUR:
- if (offset > 0 && offset < stream->writepos - stream->readpos) {
- stream->readpos += offset;
- stream->position += offset;
- stream->eof = 0;
- return 0;
- }
- break;
- case SEEK_SET:
- if (offset > stream->position &&
- offset < stream->position + stream->writepos - stream->readpos) {
- stream->readpos += offset - stream->position;
- stream->position = offset;
- stream->eof = 0;
- return 0;
- }
- break;
- }
- }
-
-
- if (stream->ops->seek && (stream->flags & PHP_STREAM_FLAG_NO_SEEK) == 0) {
- int ret;
-
- if (stream->writefilters.head) {
- _php_stream_flush(stream, 0 TSRMLS_CC);
- }
-
- switch(whence) {
- case SEEK_CUR:
- offset = stream->position + offset;
- whence = SEEK_SET;
- break;
- }
- ret = stream->ops->seek(stream, offset, whence, &stream->position TSRMLS_CC);
-
- if (((stream->flags & PHP_STREAM_FLAG_NO_SEEK) == 0) || ret == 0) {
- if (ret == 0) {
- stream->eof = 0;
- }
-
- /* invalidate the buffer contents */
- stream->readpos = stream->writepos = 0;
-
- return ret;
- }
- /* else the stream has decided that it can't support seeking after all;
- * fall through to attempt emulation */
- }
-
- /* emulate forward moving seeks with reads */
- if (whence == SEEK_CUR && offset > 0) {
- char tmp[1024];
- while(offset >= sizeof(tmp)) {
- if (php_stream_read(stream, tmp, sizeof(tmp)) == 0) {
- return -1;
- }
- offset -= sizeof(tmp);
- }
- if (offset && (php_stream_read(stream, tmp, offset) == 0)) {
- return -1;
- }
- stream->eof = 0;
- return 0;
- }
-
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "stream does not support seeking");
-
- return -1;
-}
-
-PHPAPI int _php_stream_set_option(php_stream *stream, int option, int value, void *ptrparam TSRMLS_DC)
-{
- int ret = PHP_STREAM_OPTION_RETURN_NOTIMPL;
-
- if (stream->ops->set_option) {
- ret = stream->ops->set_option(stream, option, value, ptrparam TSRMLS_CC);
- }
-
- if (ret == PHP_STREAM_OPTION_RETURN_NOTIMPL) {
- switch(option) {
- case PHP_STREAM_OPTION_SET_CHUNK_SIZE:
- ret = stream->chunk_size;
- stream->chunk_size = value;
- return ret;
-
- case PHP_STREAM_OPTION_READ_BUFFER:
- /* try to match the buffer mode as best we can */
- if (value == PHP_STREAM_BUFFER_NONE) {
- stream->flags |= PHP_STREAM_FLAG_NO_BUFFER;
- } else {
- stream->flags ^= PHP_STREAM_FLAG_NO_BUFFER;
- }
- ret = PHP_STREAM_OPTION_RETURN_OK;
- break;
-
- default:
- ;
- }
- }
-
- return ret;
-}
-
-PHPAPI int _php_stream_truncate_set_size(php_stream *stream, size_t newsize TSRMLS_DC)
-{
- return php_stream_set_option(stream, PHP_STREAM_OPTION_TRUNCATE_API, PHP_STREAM_TRUNCATE_SET_SIZE, &newsize);
-}
-
-PHPAPI size_t _php_stream_passthru(php_stream * stream STREAMS_DC TSRMLS_DC)
-{
- size_t bcount = 0;
- char buf[8192];
- int b;
-
- if (php_stream_mmap_possible(stream)) {
- char *p;
- size_t mapped;
-
- p = php_stream_mmap_range(stream, php_stream_tell(stream), 0, PHP_STREAM_MAP_MODE_SHARED_READONLY, &mapped);
-
- if (p) {
- PHPWRITE(p, mapped);
-
- php_stream_mmap_unmap(stream);
-
- return mapped;
- }
- }
-
- while ((b = php_stream_read(stream, buf, sizeof(buf))) > 0) {
- PHPWRITE(buf, b);
- bcount += b;
- }
-
- return bcount;
-}
-
-
-PHPAPI size_t _php_stream_copy_to_mem(php_stream *src, char **buf, size_t maxlen, int persistent STREAMS_DC TSRMLS_DC)
-{
- size_t ret = 0;
- char *ptr;
- size_t len = 0, max_len;
- int step = CHUNK_SIZE;
- int min_room = CHUNK_SIZE / 4;
- php_stream_statbuf ssbuf;
-
- if (buf) {
- *buf = NULL;
- }
-
- if (maxlen == 0) {
- return 0;
- }
-
- if (maxlen == PHP_STREAM_COPY_ALL) {
- maxlen = 0;
- }
-
- if (php_stream_mmap_possible(src)) {
- char *p;
- size_t mapped;
-
- p = php_stream_mmap_range(src, php_stream_tell(src), maxlen, PHP_STREAM_MAP_MODE_SHARED_READONLY, &mapped);
-
- if (p) {
- *buf = pemalloc_rel_orig(mapped + 1, persistent);
-
- if (*buf) {
- memcpy(*buf, p, mapped);
- (*buf)[mapped] = '\0';
- }
-
- php_stream_mmap_unmap(src);
-
- return mapped;
- }
- }
-
- /* avoid many reallocs by allocating a good sized chunk to begin with, if
- * we can. Note that the stream may be filtered, in which case the stat
- * result may be inaccurate, as the filter may inflate or deflate the
- * number of bytes that we can read. In order to avoid an upsize followed
- * by a downsize of the buffer, overestimate by the step size (which is
- * 2K). */
- if (php_stream_stat(src, &ssbuf) == 0 && ssbuf.sb.st_size > 0) {
- max_len = ssbuf.sb.st_size + step;
- } else {
- max_len = step;
- }
-
- ptr = *buf = pemalloc_rel_orig(max_len, persistent);
-
- while((ret = php_stream_read(src, ptr, max_len - len))) {
- len += ret;
- if (len + min_room >= max_len) {
- *buf = perealloc_rel_orig(*buf, max_len + step, persistent);
- max_len += step;
- ptr = *buf + len;
- } else {
- ptr += ret;
- }
- }
- if (len) {
- *buf = perealloc_rel_orig(*buf, len + 1, persistent);
- (*buf)[len] = '\0';
- } else {
- pefree(*buf, persistent);
- *buf = NULL;
- }
- return len;
-}
-
-PHPAPI size_t _php_stream_copy_to_stream(php_stream *src, php_stream *dest, size_t maxlen STREAMS_DC TSRMLS_DC)
-{
- char buf[CHUNK_SIZE];
- size_t readchunk;
- size_t haveread = 0;
- size_t didread;
- php_stream_statbuf ssbuf;
-
- if (maxlen == 0) {
- return 0;
- }
-
- if (maxlen == PHP_STREAM_COPY_ALL) {
- maxlen = 0;
- }
-
- if (php_stream_stat(src, &ssbuf) == 0) {
- /* in the event that the source file is 0 bytes, return 1 to indicate success
- * because opening the file to write had already created a copy */
- if (ssbuf.sb.st_size == 0
-#ifdef S_ISFIFO
- && !S_ISFIFO(ssbuf.sb.st_mode)
-#endif
-#ifdef S_ISCHR
- && !S_ISCHR(ssbuf.sb.st_mode)
-#endif
- ) {
- return 1;
- }
- }
-
- if (php_stream_mmap_possible(src)) {
- char *p;
- size_t mapped;
-
- p = php_stream_mmap_range(src, php_stream_tell(src), maxlen, PHP_STREAM_MAP_MODE_SHARED_READONLY, &mapped);
-
- if (p) {
- haveread = php_stream_write(dest, p, mapped);
-
- php_stream_mmap_unmap(src);
-
- return mapped;
- }
- }
-
- while(1) {
- readchunk = sizeof(buf);
-
- if (maxlen && (maxlen - haveread) < readchunk)
- readchunk = maxlen - haveread;
-
- didread = php_stream_read(src, buf, readchunk);
-
- if (didread) {
- /* extra paranoid */
- size_t didwrite, towrite;
- char *writeptr;
-
- towrite = didread;
- writeptr = buf;
- haveread += didread;
-
- while(towrite) {
- didwrite = php_stream_write(dest, writeptr, towrite);
- if (didwrite == 0) {
- return 0; /* error */
- }
-
- towrite -= didwrite;
- writeptr += didwrite;
- }
- } else {
- if (maxlen == 0) {
- return haveread;
- } else {
- return 0; /* error */
- }
- }
-
- if (maxlen - haveread == 0) {
- break;
- }
- }
- return haveread;
-
-}
-/* }}} */
-
-/* {{{ wrapper init and registration */
-
-static void stream_resource_regular_dtor(zend_rsrc_list_entry *rsrc TSRMLS_DC)
-{
- php_stream *stream = (php_stream*)rsrc->ptr;
- /* set the return value for pclose */
- FG(pclose_ret) = php_stream_free(stream, PHP_STREAM_FREE_CLOSE | PHP_STREAM_FREE_RSRC_DTOR);
-}
-
-static void stream_resource_persistent_dtor(zend_rsrc_list_entry *rsrc TSRMLS_DC)
-{
- php_stream *stream = (php_stream*)rsrc->ptr;
- FG(pclose_ret) = php_stream_free(stream, PHP_STREAM_FREE_CLOSE | PHP_STREAM_FREE_RSRC_DTOR);
-}
-
-int php_init_stream_wrappers(int module_number TSRMLS_DC)
-{
- le_stream = zend_register_list_destructors_ex(stream_resource_regular_dtor, NULL, "stream", module_number);
- le_pstream = zend_register_list_destructors_ex(NULL, stream_resource_persistent_dtor, "persistent stream", module_number);
-
- return (
- zend_hash_init(&url_stream_wrappers_hash, 0, NULL, NULL, 1) == SUCCESS
- &&
- zend_hash_init(php_get_stream_filters_hash_global(), 0, NULL, NULL, 1) == SUCCESS
- &&
- zend_hash_init(php_stream_xport_get_hash(), 0, NULL, NULL, 1) == SUCCESS
- &&
- php_stream_xport_register("tcp", php_stream_generic_socket_factory TSRMLS_CC) == SUCCESS
- &&
- php_stream_xport_register("udp", php_stream_generic_socket_factory TSRMLS_CC) == SUCCESS
-#if defined(AF_UNIX) && !(defined(PHP_WIN32) || defined(__riscos__) || defined(NETWARE))
- &&
- php_stream_xport_register("unix", php_stream_generic_socket_factory TSRMLS_CC) == SUCCESS
- &&
- php_stream_xport_register("udg", php_stream_generic_socket_factory TSRMLS_CC) == SUCCESS
-#endif
- ) ? SUCCESS : FAILURE;
-}
-
-int php_shutdown_stream_wrappers(int module_number TSRMLS_DC)
-{
- zend_hash_destroy(&url_stream_wrappers_hash);
- zend_hash_destroy(php_get_stream_filters_hash_global());
- zend_hash_destroy(php_stream_xport_get_hash());
- return SUCCESS;
-}
-
-/* API for registering GLOBAL wrappers */
-PHPAPI int php_register_url_stream_wrapper(char *protocol, php_stream_wrapper *wrapper TSRMLS_DC)
-{
- return zend_hash_add(&url_stream_wrappers_hash, protocol, strlen(protocol), wrapper, sizeof(*wrapper), NULL);
-}
-
-PHPAPI int php_unregister_url_stream_wrapper(char *protocol TSRMLS_DC)
-{
- return zend_hash_del(&url_stream_wrappers_hash, protocol, strlen(protocol));
-}
-
-/* API for registering VOLATILE wrappers */
-PHPAPI int php_register_url_stream_wrapper_volatile(char *protocol, php_stream_wrapper *wrapper TSRMLS_DC)
-{
- if (!FG(stream_wrappers)) {
- php_stream_wrapper tmpwrapper;
-
- FG(stream_wrappers) = emalloc(sizeof(HashTable));
- zend_hash_init(FG(stream_wrappers), 0, NULL, NULL, 1);
- zend_hash_copy(FG(stream_wrappers), &url_stream_wrappers_hash, NULL, &tmpwrapper, sizeof(php_stream_wrapper));
- }
-
- return zend_hash_add(FG(stream_wrappers), protocol, strlen(protocol), wrapper, sizeof(*wrapper), NULL);
-}
-
-/* }}} */
-
-/* {{{ php_stream_locate_url_wrapper */
-PHPAPI php_stream_wrapper *php_stream_locate_url_wrapper(const char *path, char **path_for_open, int options TSRMLS_DC)
-{
- HashTable *wrapper_hash = (FG(stream_wrappers) ? FG(stream_wrappers) : &url_stream_wrappers_hash);
- php_stream_wrapper *wrapper = NULL;
- const char *p, *protocol = NULL;
- int n = 0;
-
- if (path_for_open) {
- *path_for_open = (char*)path;
- }
-
- if (options & IGNORE_URL) {
- return (options & STREAM_LOCATE_WRAPPERS_ONLY) ? NULL : &php_plain_files_wrapper;
- }
-
- for (p = path; isalnum((int)*p) || *p == '+' || *p == '-' || *p == '.'; p++) {
- n++;
- }
-
- if ((*p == ':') && (n > 1) && !strncmp("://", p, 3)) {
- protocol = path;
- } else if (strncasecmp(path, "zlib:", 5) == 0) {
- /* BC with older php scripts and zlib wrapper */
- protocol = "compress.zlib";
- n = 13;
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Use of \"zlib:\" wrapper is deprecated; please use \"compress.zlib://\" instead.");
- }
-
- if (protocol) {
- if (FAILURE == zend_hash_find(wrapper_hash, (char*)protocol, n, (void**)&wrapper)) {
- char wrapper_name[32];
-
- if (n >= sizeof(wrapper_name))
- n = sizeof(wrapper_name) - 1;
- PHP_STRLCPY(wrapper_name, protocol, sizeof(wrapper_name), n);
-
- php_error_docref(NULL TSRMLS_CC, E_NOTICE, "Unable to find the wrapper \"%s\" - did you forget to enable it when you configured PHP?",
- wrapper_name);
-
- wrapper = NULL;
- protocol = NULL;
- }
- }
- /* TODO: curl based streams probably support file:// properly */
- if (!protocol || !strncasecmp(protocol, "file", n)) {
-#ifdef PHP_WIN32
- if (protocol && path[n+1] == '/' && path[n+2] == '/' && path[n+4] != ':') {
-#else
- if (protocol && path[n+1] == '/' && path[n+2] == '/' && path[n+3] != '/') {
-#endif
- if (options & REPORT_ERRORS) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "remote host file access not supported, %s", path);
- }
- return NULL;
- }
- if (protocol && path_for_open) {
- /* skip past protocol and :/, but handle windows correctly */
- *path_for_open = (char*)path + n + 1;
- while (*(++*path_for_open)=='/');
-#ifdef PHP_WIN32
- if (*(*path_for_open + 1) != ':')
-#endif
- (*path_for_open)--;
- }
-
- /* fall back on regular file access */
- return (options & STREAM_LOCATE_WRAPPERS_ONLY) ? NULL : &php_plain_files_wrapper;
- }
-
- if (wrapper && wrapper->is_url && !PG(allow_url_fopen)) {
- if (options & REPORT_ERRORS) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "URL file-access is disabled in the server configuration");
- }
- return NULL;
- }
-
- return wrapper;
-}
-/* }}} */
-
-/* {{{ _php_stream_mkdir
- */
-PHPAPI int _php_stream_mkdir(char *path, int mode, int options, php_stream_context *context TSRMLS_DC)
-{
- php_stream_wrapper *wrapper = NULL;
-
- wrapper = php_stream_locate_url_wrapper(path, NULL, ENFORCE_SAFE_MODE TSRMLS_CC);
- if (!wrapper || !wrapper->wops || !wrapper->wops->stream_mkdir) {
- return 0;
- }
-
- return wrapper->wops->stream_mkdir(wrapper, path, mode, options, context TSRMLS_CC);
-}
-/* }}} */
-
-/* {{{ _php_stream_rmdir
- */
-PHPAPI int _php_stream_rmdir(char *path, int options, php_stream_context *context TSRMLS_DC)
-{
- php_stream_wrapper *wrapper = NULL;
-
- wrapper = php_stream_locate_url_wrapper(path, NULL, ENFORCE_SAFE_MODE TSRMLS_CC);
- if (!wrapper || !wrapper->wops || !wrapper->wops->stream_rmdir) {
- return 0;
- }
-
- return wrapper->wops->stream_rmdir(wrapper, path, options, context TSRMLS_CC);
-}
-/* }}} */
-
-/* {{{ _php_stream_stat_path */
-PHPAPI int _php_stream_stat_path(char *path, int flags, php_stream_statbuf *ssb, php_stream_context *context TSRMLS_DC)
-{
- php_stream_wrapper *wrapper = NULL;
- char *path_to_open = path;
- int ret;
-
- /* Try to hit the cache first */
- if (flags & PHP_STREAM_URL_STAT_LINK) {
- if (BG(CurrentLStatFile) && strcmp(path, BG(CurrentLStatFile)) == 0) {
- memcpy(ssb, &BG(lssb), sizeof(php_stream_statbuf));
- return 0;
- }
- } else {
- if (BG(CurrentStatFile) && strcmp(path, BG(CurrentStatFile)) == 0) {
- memcpy(ssb, &BG(ssb), sizeof(php_stream_statbuf));
- return 0;
- }
- }
-
- wrapper = php_stream_locate_url_wrapper(path, &path_to_open, ENFORCE_SAFE_MODE TSRMLS_CC);
- if (wrapper && wrapper->wops->url_stat) {
- ret = wrapper->wops->url_stat(wrapper, path_to_open, flags, ssb, context TSRMLS_CC);
- if (ret == 0) {
- /* Drop into cache */
- if (flags & PHP_STREAM_URL_STAT_LINK) {
- if (BG(CurrentLStatFile)) {
- efree(BG(CurrentLStatFile));
- }
- BG(CurrentLStatFile) = estrdup(path);
- memcpy(&BG(lssb), ssb, sizeof(php_stream_statbuf));
- } else {
- if (BG(CurrentStatFile)) {
- efree(BG(CurrentStatFile));
- }
- BG(CurrentStatFile) = estrdup(path);
- memcpy(&BG(ssb), ssb, sizeof(php_stream_statbuf));
- }
- }
- return ret;
- }
- return -1;
-}
-/* }}} */
-
-/* {{{ php_stream_opendir */
-PHPAPI php_stream *_php_stream_opendir(char *path, int options,
- php_stream_context *context STREAMS_DC TSRMLS_DC)
-{
- php_stream *stream = NULL;
- php_stream_wrapper *wrapper = NULL;
- char *path_to_open;
-
- if (!path || !*path) {
- return NULL;
- }
-
- path_to_open = path;
-
- wrapper = php_stream_locate_url_wrapper(path, &path_to_open, options TSRMLS_CC);
-
- if (wrapper && wrapper->wops->dir_opener) {
- stream = wrapper->wops->dir_opener(wrapper,
- path_to_open, "r", options ^ REPORT_ERRORS, NULL,
- context STREAMS_REL_CC TSRMLS_CC);
-
- if (stream) {
- stream->wrapper = wrapper;
- stream->flags |= PHP_STREAM_FLAG_NO_BUFFER;
- }
- } else if (wrapper) {
- php_stream_wrapper_log_error(wrapper, options ^ REPORT_ERRORS TSRMLS_CC, "not implemented");
- }
- if (stream == NULL && (options & REPORT_ERRORS)) {
- php_stream_display_wrapper_errors(wrapper, path, "failed to open dir" TSRMLS_CC);
- }
- php_stream_tidy_wrapper_error_log(wrapper TSRMLS_CC);
-
- return stream;
-}
-/* }}} */
-
-/* {{{ _php_stream_readdir */
-PHPAPI php_stream_dirent *_php_stream_readdir(php_stream *dirstream, php_stream_dirent *ent TSRMLS_DC)
-{
-
- if (sizeof(php_stream_dirent) == php_stream_read(dirstream, (char*)ent, sizeof(php_stream_dirent))) {
- return ent;
- }
-
- return NULL;
-}
-/* }}} */
-
-/* {{{ php_stream_open_wrapper_ex */
-PHPAPI php_stream *_php_stream_open_wrapper_ex(char *path, char *mode, int options,
- char **opened_path, php_stream_context *context STREAMS_DC TSRMLS_DC)
-{
- php_stream *stream = NULL;
- php_stream_wrapper *wrapper = NULL;
- char *path_to_open;
- int persistent = options & STREAM_OPEN_PERSISTENT;
- char *copy_of_path = NULL;
-
-
- if (opened_path) {
- *opened_path = NULL;
- }
-
- if (!path || !*path) {
- return NULL;
- }
-
- path_to_open = path;
-
- wrapper = php_stream_locate_url_wrapper(path, &path_to_open, options TSRMLS_CC);
- if (options & STREAM_USE_URL && (!wrapper || !wrapper->is_url)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "This function may only be used against URLs.");
- return NULL;
- }
-
- if (wrapper) {
-
- stream = wrapper->wops->stream_opener(wrapper,
- path_to_open, mode, options ^ REPORT_ERRORS,
- opened_path, context STREAMS_REL_CC TSRMLS_CC);
-
- /* if the caller asked for a persistent stream but the wrapper did not
- * return one, force an error here */
- if (stream && (options & STREAM_OPEN_PERSISTENT) && !stream->is_persistent) {
- php_stream_wrapper_log_error(wrapper, options ^ REPORT_ERRORS TSRMLS_CC,
- "wrapper does not support persistent streams");
- php_stream_close(stream);
- stream = NULL;
- }
-
- if (stream) {
- stream->wrapper = wrapper;
- }
- }
-
- if (stream) {
- if (stream->orig_path) {
- pefree(stream->orig_path, persistent);
- }
- copy_of_path = pestrdup(path, persistent);
- stream->orig_path = copy_of_path;
- }
-
- if (stream != NULL && (options & STREAM_MUST_SEEK)) {
- php_stream *newstream;
-
- switch(php_stream_make_seekable_rel(stream, &newstream,
- (options & STREAM_WILL_CAST)
- ? PHP_STREAM_PREFER_STDIO : PHP_STREAM_NO_PREFERENCE)) {
- case PHP_STREAM_UNCHANGED:
- return stream;
- case PHP_STREAM_RELEASED:
- newstream->orig_path = pestrdup(path, persistent);
- return newstream;
- default:
- php_stream_close(stream);
- stream = NULL;
- if (options & REPORT_ERRORS) {
- char *tmp = estrdup(path);
- php_strip_url_passwd(tmp);
- php_error_docref1(NULL TSRMLS_CC, tmp, E_WARNING, "could not make seekable - %s",
- tmp);
- efree(tmp);
-
- options ^= REPORT_ERRORS;
- }
- }
- }
-
- if (stream && stream->ops->seek && (stream->flags & PHP_STREAM_FLAG_NO_SEEK) == 0 && strchr(mode, 'a') && stream->position == 0) {
- off_t newpos = 0;
-
- /* if opened for append, we need to revise our idea of the initial file position */
- if (0 == stream->ops->seek(stream, 0, SEEK_CUR, &newpos TSRMLS_CC)) {
- stream->position = newpos;
- }
- }
-
- if (stream == NULL && (options & REPORT_ERRORS)) {
- php_stream_display_wrapper_errors(wrapper, path, "failed to open stream" TSRMLS_CC);
- }
- php_stream_tidy_wrapper_error_log(wrapper TSRMLS_CC);
-#if ZEND_DEBUG
- if (stream == NULL && copy_of_path != NULL) {
- pefree(copy_of_path, persistent);
- }
-#endif
- return stream;
-}
-/* }}} */
-
-/* {{{ context API */
-PHPAPI php_stream_context *php_stream_context_set(php_stream *stream, php_stream_context *context)
-{
- php_stream_context *oldcontext = stream->context;
- stream->context = context;
- return oldcontext;
-}
-
-PHPAPI void php_stream_notification_notify(php_stream_context *context, int notifycode, int severity,
- char *xmsg, int xcode, size_t bytes_sofar, size_t bytes_max, void * ptr TSRMLS_DC)
-{
- if (context && context->notifier)
- context->notifier->func(context, notifycode, severity, xmsg, xcode, bytes_sofar, bytes_max, ptr TSRMLS_CC);
-}
-
-PHPAPI void php_stream_context_free(php_stream_context *context)
-{
- if (context->options) {
- zval_ptr_dtor(&context->options);
- context->options = NULL;
- }
- if (context->notifier) {
- php_stream_notification_free(context->notifier);
- context->notifier = NULL;
- }
- if (context->links) {
- zval_ptr_dtor(&context->links);
- context->links = NULL;
- }
- efree(context);
-}
-
-PHPAPI php_stream_context *php_stream_context_alloc(void)
-{
- php_stream_context *context;
-
- context = ecalloc(1, sizeof(php_stream_context));
- context->notifier = NULL;
- MAKE_STD_ZVAL(context->options);
- array_init(context->options);
-
- context->rsrc_id = ZEND_REGISTER_RESOURCE(NULL, context, php_le_stream_context());
- return context;
-}
-
-PHPAPI php_stream_notifier *php_stream_notification_alloc(void)
-{
- return ecalloc(1, sizeof(php_stream_notifier));
-}
-
-PHPAPI void php_stream_notification_free(php_stream_notifier *notifier)
-{
- if (notifier->dtor) {
- notifier->dtor(notifier);
- }
- efree(notifier);
-}
-
-PHPAPI int php_stream_context_get_option(php_stream_context *context,
- const char *wrappername, const char *optionname, zval ***optionvalue)
-{
- zval **wrapperhash;
-
- if (FAILURE == zend_hash_find(Z_ARRVAL_P(context->options), (char*)wrappername, strlen(wrappername)+1, (void**)&wrapperhash)) {
- return FAILURE;
- }
- return zend_hash_find(Z_ARRVAL_PP(wrapperhash), (char*)optionname, strlen(optionname)+1, (void**)optionvalue);
-}
-
-PHPAPI int php_stream_context_set_option(php_stream_context *context,
- const char *wrappername, const char *optionname, zval *optionvalue)
-{
- zval **wrapperhash;
- zval *category, *copied_val;
-
- ALLOC_INIT_ZVAL(copied_val);
- *copied_val = *optionvalue;
- zval_copy_ctor(copied_val);
- INIT_PZVAL(copied_val);
-
- if (FAILURE == zend_hash_find(Z_ARRVAL_P(context->options), (char*)wrappername, strlen(wrappername)+1, (void**)&wrapperhash)) {
- MAKE_STD_ZVAL(category);
- array_init(category);
- if (FAILURE == zend_hash_update(Z_ARRVAL_P(context->options), (char*)wrappername, strlen(wrappername)+1, (void**)&category, sizeof(zval *), NULL)) {
- return FAILURE;
- }
-
- wrapperhash = &category;
- }
- return zend_hash_update(Z_ARRVAL_PP(wrapperhash), (char*)optionname, strlen(optionname)+1, (void**)&copied_val, sizeof(zval *), NULL);
-}
-
-PHPAPI int php_stream_context_get_link(php_stream_context *context,
- const char *hostent, php_stream **stream)
-{
- php_stream **pstream;
-
- if (!stream || !hostent || !context || !(context->links)) {
- return FAILURE;
- }
- if (SUCCESS == zend_hash_find(Z_ARRVAL_P(context->links), (char*)hostent, strlen(hostent)+1, (void**)&pstream)) {
- *stream = *pstream;
- return SUCCESS;
- }
- return FAILURE;
-}
-
-PHPAPI int php_stream_context_set_link(php_stream_context *context,
- const char *hostent, php_stream *stream)
-{
- if (!context) {
- return FAILURE;
- }
- if (!context->links) {
- ALLOC_INIT_ZVAL(context->links);
- array_init(context->links);
- }
- if (!stream) {
- /* Delete any entry for <hostent> */
- return zend_hash_del(Z_ARRVAL_P(context->links), (char*)hostent, strlen(hostent)+1);
- }
- return zend_hash_update(Z_ARRVAL_P(context->links), (char*)hostent, strlen(hostent)+1, (void**)&stream, sizeof(php_stream *), NULL);
-}
-
-PHPAPI int php_stream_context_del_link(php_stream_context *context,
- php_stream *stream)
-{
- php_stream **pstream;
- char *hostent;
- int ret = SUCCESS;
-
- if (!context || !context->links || !stream) {
- return FAILURE;
- }
-
- for(zend_hash_internal_pointer_reset(Z_ARRVAL_P(context->links));
- SUCCESS == zend_hash_get_current_data(Z_ARRVAL_P(context->links), (void**)&pstream);
- zend_hash_move_forward(Z_ARRVAL_P(context->links))) {
- if (*pstream == stream) {
- if (SUCCESS == zend_hash_get_current_key(Z_ARRVAL_P(context->links), &hostent, NULL, 0)) {
- if (FAILURE == zend_hash_del(Z_ARRVAL_P(context->links), (char*)hostent, strlen(hostent)+1)) {
- ret = FAILURE;
- }
- } else {
- ret = FAILURE;
- }
- }
- }
-
- return ret;
-}
-/* }}} */
-
-/* {{{ php_stream_dirent_alphasort
- */
-PHPAPI int php_stream_dirent_alphasort(const php_stream_dirent **a, const php_stream_dirent **b)
-{
- return strcoll((*a)->d_name,(*b)->d_name);
-}
-/* }}} */
-
-/* {{{ php_stream_dirent_alphasortr
- */
-PHPAPI int php_stream_dirent_alphasortr(const php_stream_dirent **a, const php_stream_dirent **b)
-{
- return strcoll((*b)->d_name,(*a)->d_name);
-}
-/* }}} */
-
-/* {{{ php_stream_scandir
- */
-PHPAPI int _php_stream_scandir(char *dirname, php_stream_dirent **namelist[], int flags, php_stream_context *context,
- int (*compare) (const php_stream_dirent **a, const php_stream_dirent **b) TSRMLS_DC)
-{
- php_stream *stream;
- php_stream_dirent sdp;
- php_stream_dirent **vector = NULL;
- int vector_size = 0;
- int nfiles = 0;
-
- if (!namelist) {
- return FAILURE;
- }
-
- stream = php_stream_opendir(dirname, ENFORCE_SAFE_MODE | REPORT_ERRORS, context);
- if (!stream) {
- return FAILURE;
- }
-
- while (php_stream_readdir(stream, &sdp)) {
- if (nfiles == vector_size) {
- if (vector_size == 0) {
- vector_size = 10;
- } else {
- vector_size *= 2;
- }
- vector = (php_stream_dirent **) erealloc(vector, vector_size * sizeof(php_stream_dirent *));
- }
-
- vector[nfiles] = emalloc(sizeof(php_stream_dirent));
- memcpy(vector[nfiles], &sdp, sizeof(sdp));
-
- nfiles++;
- }
- php_stream_closedir(stream);
-
- *namelist = vector;
-
- if (compare) {
- qsort(*namelist, nfiles, sizeof(php_stream_dirent *), (int(*)(const void *, const void *))compare);
- }
- return nfiles;
-}
-/* }}} */
-
-/*
- * 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/main/streams/transports.c b/main/streams/transports.c
deleted file mode 100644
index 37e0757a5e..0000000000
--- a/main/streams/transports.c
+++ /dev/null
@@ -1,497 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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@thebrainroom.com> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#include "php.h"
-#include "php_streams_int.h"
-#include "ext/standard/file.h"
-
-static HashTable xport_hash;
-
-PHPAPI HashTable *php_stream_xport_get_hash(void)
-{
- return &xport_hash;
-}
-
-PHPAPI int php_stream_xport_register(char *protocol, php_stream_transport_factory factory TSRMLS_DC)
-{
- return zend_hash_update(&xport_hash, protocol, strlen(protocol), &factory, sizeof(factory), NULL);
-}
-
-PHPAPI int php_stream_xport_unregister(char *protocol TSRMLS_DC)
-{
- return zend_hash_del(&xport_hash, protocol, strlen(protocol));
-}
-
-#define ERR_REPORT(out_err, fmt, arg) \
- if (out_err) { spprintf(out_err, 0, fmt, arg); } \
- else { php_error_docref(NULL TSRMLS_CC, E_WARNING, fmt, arg); }
-
-#define ERR_RETURN(out_err, local_err, fmt) \
- if (out_err) { *out_err = local_err; } \
- else { php_error_docref(NULL TSRMLS_CC, E_WARNING, fmt, local_err ? local_err : "Unspecified error"); \
- if (local_err) { efree(local_err); local_err = NULL; } \
- }
-
-PHPAPI php_stream *_php_stream_xport_create(const char *name, long namelen, int options,
- int flags, const char *persistent_id,
- struct timeval *timeout,
- php_stream_context *context,
- char **error_string,
- int *error_code
- STREAMS_DC TSRMLS_DC)
-{
- php_stream *stream = NULL;
- php_stream_transport_factory *factory = NULL;
- const char *p, *protocol = NULL;
- int n = 0, failed = 0;
- char *error_text = NULL;
- struct timeval default_timeout = { 0, 0 };
-
- default_timeout.tv_sec = FG(default_socket_timeout);
-
- if (timeout == NULL) {
- timeout = &default_timeout;
- }
-
- /* check for a cached persistent socket */
- if (persistent_id) {
- switch(php_stream_from_persistent_id(persistent_id, &stream TSRMLS_CC)) {
- case PHP_STREAM_PERSISTENT_SUCCESS:
- /* use a 0 second timeout when checking if the socket
- * has already died */
- if (PHP_STREAM_OPTION_RETURN_OK == php_stream_set_option(stream, PHP_STREAM_OPTION_CHECK_LIVENESS, 0, NULL)) {
- return stream;
- }
- /* dead - kill it */
- php_stream_pclose(stream);
- stream = NULL;
-
- /* fall through */
-
- case PHP_STREAM_PERSISTENT_FAILURE:
- default:
- /* failed; get a new one */
- ;
- }
- }
-
- for (p = name; isalnum((int)*p) || *p == '+' || *p == '-' || *p == '.'; p++) {
- n++;
- }
-
- if ((*p == ':') && (n > 1) && !strncmp("://", p, 3)) {
- protocol = name;
- name = p + 3;
- namelen -= n + 3;
- } else {
- protocol = "tcp";
- n = 3;
- }
-
- if (protocol) {
- if (FAILURE == zend_hash_find(&xport_hash, (char*)protocol, n, (void**)&factory)) {
- char wrapper_name[32];
-
- if (n >= sizeof(wrapper_name))
- n = sizeof(wrapper_name) - 1;
- PHP_STRLCPY(wrapper_name, protocol, sizeof(wrapper_name), n);
-
- ERR_REPORT(error_string, "Unable to find the socket transport \"%s\" - did you forget to enable it when you configured PHP?",
- wrapper_name);
-
- return NULL;
- }
- }
-
- if (factory == NULL) {
- /* should never happen */
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Could not find a factory !?");
- return NULL;
- }
-
- stream = (*factory)(protocol, n,
- (char*)name, namelen, persistent_id, options, flags, timeout,
- context STREAMS_REL_CC TSRMLS_CC);
-
- if (stream) {
- stream->context = context;
-
- if ((flags & STREAM_XPORT_SERVER) == 0) {
- /* client */
-
- if (flags & STREAM_XPORT_CONNECT) {
- if (0 != php_stream_xport_connect(stream, name, namelen,
- flags & STREAM_XPORT_OP_CONNECT_ASYNC ? 1 : 0,
- timeout, &error_text, error_code TSRMLS_CC)) {
-
- ERR_RETURN(error_string, error_text, "connect() failed: %s");
-
- failed = 1;
- }
- }
-
- } else {
- /* server */
- if (flags & STREAM_XPORT_BIND) {
- if (0 != php_stream_xport_bind(stream, name, namelen, &error_text TSRMLS_CC)) {
- ERR_RETURN(error_string, error_text, "bind() failed: %s");
- failed = 1;
- } else if (flags & STREAM_XPORT_LISTEN) {
- if (0 != php_stream_xport_listen(stream, 5, &error_text TSRMLS_CC)) {
- ERR_RETURN(error_string, error_text, "listen() failed: %s");
- failed = 1;
- }
- }
- }
- }
- }
-
- if (failed) {
- /* failure means that they don't get a stream to play with */
- if (persistent_id) {
- php_stream_pclose(stream);
- } else {
- php_stream_close(stream);
- }
- stream = NULL;
- }
-
- return stream;
-}
-
-/* Bind the stream to a local address */
-PHPAPI int php_stream_xport_bind(php_stream *stream,
- const char *name, long namelen,
- char **error_text
- TSRMLS_DC)
-{
- php_stream_xport_param param;
- int ret;
-
- memset(&param, 0, sizeof(param));
- param.op = STREAM_XPORT_OP_BIND;
- param.inputs.name = (char*)name;
- param.inputs.namelen = namelen;
- param.want_errortext = error_text ? 1 : 0;
-
- ret = php_stream_set_option(stream, PHP_STREAM_OPTION_XPORT_API, 0, &param);
-
- if (ret == PHP_STREAM_OPTION_RETURN_OK) {
- if (error_text) {
- *error_text = param.outputs.error_text;
- }
-
- return param.outputs.returncode;
- }
-
- return ret;
-}
-
-/* Connect to a remote address */
-PHPAPI int php_stream_xport_connect(php_stream *stream,
- const char *name, long namelen,
- int asynchronous,
- struct timeval *timeout,
- char **error_text,
- int *error_code
- TSRMLS_DC)
-{
- php_stream_xport_param param;
- int ret;
-
- memset(&param, 0, sizeof(param));
- param.op = asynchronous ? STREAM_XPORT_OP_CONNECT_ASYNC: STREAM_XPORT_OP_CONNECT;
- param.inputs.name = (char*)name;
- param.inputs.namelen = namelen;
- param.inputs.timeout = timeout;
-
- param.want_errortext = error_text ? 1 : 0;
-
- ret = php_stream_set_option(stream, PHP_STREAM_OPTION_XPORT_API, 0, &param);
-
- if (ret == PHP_STREAM_OPTION_RETURN_OK) {
- if (error_text) {
- *error_text = param.outputs.error_text;
- }
- if (error_code) {
- *error_code = param.outputs.error_code;
- }
- return param.outputs.returncode;
- }
-
- return ret;
-
-}
-
-/* Prepare to listen */
-PHPAPI int php_stream_xport_listen(php_stream *stream, int backlog, char **error_text TSRMLS_DC)
-{
- php_stream_xport_param param;
- int ret;
-
- memset(&param, 0, sizeof(param));
- param.op = STREAM_XPORT_OP_LISTEN;
- param.inputs.backlog = backlog;
- param.want_errortext = error_text ? 1 : 0;
-
- ret = php_stream_set_option(stream, PHP_STREAM_OPTION_XPORT_API, 0, &param);
-
- if (ret == PHP_STREAM_OPTION_RETURN_OK) {
- if (error_text) {
- *error_text = param.outputs.error_text;
- }
-
- return param.outputs.returncode;
- }
-
- return ret;
-}
-
-/* Get the next client and their address (as a string) */
-PHPAPI int php_stream_xport_accept(php_stream *stream, php_stream **client,
- char **textaddr, int *textaddrlen,
- void **addr, socklen_t *addrlen,
- struct timeval *timeout,
- char **error_text
- TSRMLS_DC)
-{
- php_stream_xport_param param;
- int ret;
-
- memset(&param, 0, sizeof(param));
-
- param.op = STREAM_XPORT_OP_ACCEPT;
- param.inputs.timeout = timeout;
- param.want_addr = addr ? 1 : 0;
- param.want_textaddr = textaddr ? 1 : 0;
- param.want_errortext = error_text ? 1 : 0;
-
- ret = php_stream_set_option(stream, PHP_STREAM_OPTION_XPORT_API, 0, &param);
-
- if (ret == PHP_STREAM_OPTION_RETURN_OK) {
- *client = param.outputs.client;
- if (addr) {
- *addr = param.outputs.addr;
- *addrlen = param.outputs.addrlen;
- }
- if (textaddr) {
- *textaddr = param.outputs.textaddr;
- *textaddrlen = param.outputs.textaddrlen;
- }
- if (error_text) {
- *error_text = param.outputs.error_text;
- }
-
- return param.outputs.returncode;
- }
- return ret;
-}
-
-PHPAPI int php_stream_xport_get_name(php_stream *stream, int want_peer,
- char **textaddr, int *textaddrlen,
- void **addr, socklen_t *addrlen
- TSRMLS_DC)
-{
- php_stream_xport_param param;
- int ret;
-
- memset(&param, 0, sizeof(param));
-
- param.op = want_peer ? STREAM_XPORT_OP_GET_PEER_NAME : STREAM_XPORT_OP_GET_NAME;
- param.want_addr = addr ? 1 : 0;
- param.want_textaddr = textaddr ? 1 : 0;
-
- ret = php_stream_set_option(stream, PHP_STREAM_OPTION_XPORT_API, 0, &param);
-
- if (ret == PHP_STREAM_OPTION_RETURN_OK) {
- if (addr) {
- *addr = param.outputs.addr;
- *addrlen = param.outputs.addrlen;
- }
- if (textaddr) {
- *textaddr = param.outputs.textaddr;
- *textaddrlen = param.outputs.textaddrlen;
- }
-
- return param.outputs.returncode;
- }
- return ret;
-}
-
-PHPAPI int php_stream_xport_crypto_setup(php_stream *stream, php_stream_xport_crypt_method_t crypto_method, php_stream *session_stream TSRMLS_DC)
-{
- php_stream_xport_crypto_param param;
- int ret;
-
- memset(&param, 0, sizeof(param));
- param.op = STREAM_XPORT_CRYPTO_OP_SETUP;
- param.inputs.method = crypto_method;
- param.inputs.session = session_stream;
-
- ret = php_stream_set_option(stream, PHP_STREAM_OPTION_CRYPTO_API, 0, &param);
-
- if (ret == PHP_STREAM_OPTION_RETURN_OK) {
- return param.outputs.returncode;
- }
-
- php_error_docref("streams.crypto" TSRMLS_CC, E_WARNING, "this stream does not support SSL/crypto");
-
- return ret;
-}
-
-PHPAPI int php_stream_xport_crypto_enable(php_stream *stream, int activate TSRMLS_DC)
-{
- php_stream_xport_crypto_param param;
- int ret;
-
- memset(&param, 0, sizeof(param));
- param.op = STREAM_XPORT_CRYPTO_OP_ENABLE;
- param.inputs.activate = activate;
-
- ret = php_stream_set_option(stream, PHP_STREAM_OPTION_CRYPTO_API, 0, &param);
-
- if (ret == PHP_STREAM_OPTION_RETURN_OK) {
- return param.outputs.returncode;
- }
-
- php_error_docref("streams.crypto" TSRMLS_CC, E_WARNING, "this stream does not support SSL/crypto");
-
- return ret;
-}
-
-/* Similar to recv() system call; read data from the stream, optionally
- * peeking, optionally retrieving OOB data */
-PHPAPI int php_stream_xport_recvfrom(php_stream *stream, char *buf, size_t buflen,
- long flags, void **addr, socklen_t *addrlen, char **textaddr, int *textaddrlen
- TSRMLS_DC)
-{
- php_stream_xport_param param;
- int ret = 0;
- int recvd_len = 0;
-#if 0
- int oob;
-
- if (flags == 0 && addr == NULL) {
- return php_stream_read(stream, buf, buflen);
- }
-
- if (stream->readfilters.head) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "cannot peek or fetch OOB data from a filtered stream");
- return -1;
- }
-
- oob = (flags & STREAM_OOB) == STREAM_OOB;
-
- if (!oob && addr == NULL) {
- /* must be peeking at regular data; copy content from the buffer
- * first, then adjust the pointer/len before handing off to the
- * stream */
- recvd_len = stream->writepos - stream->readpos;
- if (recvd_len > buflen) {
- recvd_len = buflen;
- }
- if (recvd_len) {
- memcpy(buf, stream->readbuf, recvd_len);
- buf += recvd_len;
- buflen -= recvd_len;
- }
- /* if we filled their buffer, return */
- if (buflen == 0) {
- return recvd_len;
- }
- }
-#endif
-
- /* otherwise, we are going to bypass the buffer */
-
- memset(&param, 0, sizeof(param));
-
- param.op = STREAM_XPORT_OP_RECV;
- param.want_addr = addr ? 1 : 0;
- param.want_textaddr = textaddr ? 1 : 0;
- param.inputs.buf = buf;
- param.inputs.buflen = buflen;
- param.inputs.flags = flags;
-
- ret = php_stream_set_option(stream, PHP_STREAM_OPTION_XPORT_API, 0, &param);
-
- if (ret == PHP_STREAM_OPTION_RETURN_OK) {
- if (addr) {
- *addr = param.outputs.addr;
- *addrlen = param.outputs.addrlen;
- }
- if (textaddr) {
- *textaddr = param.outputs.textaddr;
- *textaddrlen = param.outputs.textaddrlen;
- }
- return recvd_len + param.outputs.returncode;
- }
- return recvd_len ? recvd_len : -1;
-}
-
-/* Similar to send() system call; send data to the stream, optionally
- * sending it as OOB data */
-PHPAPI int php_stream_xport_sendto(php_stream *stream, const char *buf, size_t buflen,
- long flags, void *addr, socklen_t addrlen TSRMLS_DC)
-{
- php_stream_xport_param param;
- int ret = 0;
- int oob;
-
-#if 0
- if (flags == 0 && addr == NULL) {
- return php_stream_write(stream, buf, buflen);
- }
-#endif
-
- oob = (flags & STREAM_OOB) == STREAM_OOB;
-
- if ((oob || addr) && stream->writefilters.head) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "cannot write OOB data, or data to a targeted address on a filtered stream");
- return -1;
- }
-
- memset(&param, 0, sizeof(param));
-
- param.op = STREAM_XPORT_OP_SEND;
- param.want_addr = addr ? 1 : 0;
- param.inputs.buf = (char*)buf;
- param.inputs.buflen = buflen;
- param.inputs.flags = flags;
- param.inputs.addr = addr;
- param.inputs.addrlen = addrlen;
-
- ret = php_stream_set_option(stream, PHP_STREAM_OPTION_XPORT_API, 0, &param);
-
- if (ret == PHP_STREAM_OPTION_RETURN_OK) {
- return param.outputs.returncode;
- }
- return -1;
-}
-
-
-/*
- * 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/main/streams/userspace.c b/main/streams/userspace.c
deleted file mode 100644
index 7bf7801d2f..0000000000
--- a/main/streams/userspace.c
+++ /dev/null
@@ -1,1265 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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. |
- +----------------------------------------------------------------------+
- | Authors: Wez Furlong <wez@thebrainroom.com> |
- | Sara Golemon <pollita@php.net> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#include "php.h"
-#include "php_globals.h"
-#include "ext/standard/file.h"
-
-static int le_protocols;
-
-struct php_user_stream_wrapper {
- char * protoname;
- char * classname;
- zend_class_entry *ce;
- php_stream_wrapper wrapper;
-};
-
-static php_stream *user_wrapper_opener(php_stream_wrapper *wrapper, char *filename, char *mode, int options, char **opened_path, php_stream_context *context STREAMS_DC TSRMLS_DC);
-static int user_wrapper_stat_url(php_stream_wrapper *wrapper, char *url, int flags, php_stream_statbuf *ssb, php_stream_context *context TSRMLS_DC);
-static int user_wrapper_unlink(php_stream_wrapper *wrapper, char *url, int options, php_stream_context *context TSRMLS_DC);
-static int user_wrapper_rename(php_stream_wrapper *wrapper, char *url_from, char *url_to, int options, php_stream_context *context TSRMLS_DC);
-static int user_wrapper_mkdir(php_stream_wrapper *wrapper, char *url, int mode, int options, php_stream_context *context TSRMLS_DC);
-static int user_wrapper_rmdir(php_stream_wrapper *wrapper, char *url, int options, php_stream_context *context TSRMLS_DC);
-static php_stream *user_wrapper_opendir(php_stream_wrapper *wrapper, char *filename, char *mode,
- int options, char **opened_path, php_stream_context *context STREAMS_DC TSRMLS_DC);
-
-static php_stream_wrapper_ops user_stream_wops = {
- user_wrapper_opener,
- NULL, /* close - the streams themselves know how */
- NULL, /* stat - the streams themselves know how */
- user_wrapper_stat_url,
- user_wrapper_opendir,
- "user-space",
- user_wrapper_unlink,
- user_wrapper_rename,
- user_wrapper_mkdir,
- user_wrapper_rmdir
-};
-
-
-static void stream_wrapper_dtor(zend_rsrc_list_entry *rsrc TSRMLS_DC)
-{
- struct php_user_stream_wrapper * uwrap = (struct php_user_stream_wrapper*)rsrc->ptr;
-
- efree(uwrap->protoname);
- efree(uwrap->classname);
- efree(uwrap);
-}
-
-
-PHP_MINIT_FUNCTION(user_streams)
-{
- le_protocols = zend_register_list_destructors_ex(stream_wrapper_dtor, NULL, "stream factory", 0);
- if (le_protocols == FAILURE)
- return FAILURE;
-
- REGISTER_LONG_CONSTANT("STREAM_USE_PATH", USE_PATH, CONST_CS|CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("STREAM_IGNORE_URL", IGNORE_URL, CONST_CS|CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("STREAM_ENFORCE_SAFE_MODE", ENFORCE_SAFE_MODE, CONST_CS|CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("STREAM_REPORT_ERRORS", REPORT_ERRORS, CONST_CS|CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("STREAM_MUST_SEEK", STREAM_MUST_SEEK, CONST_CS|CONST_PERSISTENT);
-
- REGISTER_LONG_CONSTANT("STREAM_URL_STAT_LINK", PHP_STREAM_URL_STAT_LINK, CONST_CS|CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("STREAM_URL_STAT_QUIET", PHP_STREAM_URL_STAT_QUIET, CONST_CS|CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("STREAM_MKDIR_RECURSIVE", PHP_STREAM_MKDIR_RECURSIVE, CONST_CS|CONST_PERSISTENT);
-
- return SUCCESS;
-}
-
-struct _php_userstream_data {
- struct php_user_stream_wrapper * wrapper;
- zval * object;
-};
-typedef struct _php_userstream_data php_userstream_data_t;
-
-/* names of methods */
-#define USERSTREAM_OPEN "stream_open"
-#define USERSTREAM_CLOSE "stream_close"
-#define USERSTREAM_READ "stream_read"
-#define USERSTREAM_WRITE "stream_write"
-#define USERSTREAM_FLUSH "stream_flush"
-#define USERSTREAM_SEEK "stream_seek"
-#define USERSTREAM_TELL "stream_tell"
-#define USERSTREAM_EOF "stream_eof"
-#define USERSTREAM_STAT "stream_stat"
-#define USERSTREAM_STATURL "url_stat"
-#define USERSTREAM_UNLINK "unlink"
-#define USERSTREAM_RENAME "rename"
-#define USERSTREAM_MKDIR "mkdir"
-#define USERSTREAM_RMDIR "rmdir"
-#define USERSTREAM_DIR_OPEN "dir_opendir"
-#define USERSTREAM_DIR_READ "dir_readdir"
-#define USERSTREAM_DIR_REWIND "dir_rewinddir"
-#define USERSTREAM_DIR_CLOSE "dir_closedir"
-#define USERSTREAM_LOCK "stream_lock"
-
-/* {{{ class should have methods like these:
-
- function stream_open($path, $mode, $options, &$opened_path)
- {
- return true/false;
- }
-
- function stream_read($count)
- {
- return false on error;
- else return string;
- }
-
- function stream_write($data)
- {
- return false on error;
- else return count written;
- }
-
- function stream_close()
- {
- }
-
- function stream_flush()
- {
- return true/false;
- }
-
- function stream_seek($offset, $whence)
- {
- return true/false;
- }
-
- function stream_tell()
- {
- return (int)$position;
- }
-
- function stream_eof()
- {
- return true/false;
- }
-
- function stream_stat()
- {
- return array( just like that returned by fstat() );
- }
-
- function url_stat(string $url, int $flags)
- {
- return array( just like that returned by stat() );
- }
-
- function unlink(string $url)
- {
- return true / false;
- }
-
- function rename(string $from, string $to)
- {
- return true / false;
- }
-
- function mkdir($dir, $mode, $options)
- {
- return true / false;
- }
-
- function rmdir($dir, $options)
- {
- return true / false;
- }
-
- function dir_opendir(string $url, int $options)
- {
- return true / false;
- }
-
- function dir_readdir()
- {
- return string next filename in dir ;
- }
-
- function dir_closedir()
- {
- release dir related resources;
- }
-
- function dir_rewinddir()
- {
- reset to start of dir list;
- }
-
- }}} **/
-
-static php_stream *user_wrapper_opener(php_stream_wrapper *wrapper, char *filename, char *mode, int options, char **opened_path, php_stream_context *context STREAMS_DC TSRMLS_DC)
-{
- struct php_user_stream_wrapper *uwrap = (struct php_user_stream_wrapper*)wrapper->abstract;
- php_userstream_data_t *us;
- zval *zfilename, *zmode, *zopened, *zoptions, *zretval = NULL, *zfuncname;
- zval **args[4];
- int call_result;
- php_stream *stream = NULL;
- zval *zcontext = NULL;
-
- /* Try to catch bad usage without preventing flexibility */
- if (FG(user_stream_current_filename) != NULL && strcmp(filename, FG(user_stream_current_filename)) == 0) {
- php_stream_wrapper_log_error(wrapper, options TSRMLS_CC, "infinite recursion prevented");
- return NULL;
- }
- FG(user_stream_current_filename) = filename;
-
- us = emalloc(sizeof(*us));
- us->wrapper = uwrap;
-
- /* create an instance of our class */
- ALLOC_ZVAL(us->object);
- object_init_ex(us->object, uwrap->ce);
- ZVAL_REFCOUNT(us->object) = 1;
- PZVAL_IS_REF(us->object) = 1;
-
- if (context) {
- MAKE_STD_ZVAL(zcontext);
- php_stream_context_to_zval(context, zcontext);
- add_property_zval(us->object, "context", zcontext);
- /* The object property should be the only reference,
- 'get rid' of our local reference. */
- zval_ptr_dtor(&zcontext);
- } else {
- add_property_null(us->object, "context");
- }
-
- /* call it's stream_open method - set up params first */
- MAKE_STD_ZVAL(zfilename);
- ZVAL_STRING(zfilename, filename, 1);
- args[0] = &zfilename;
-
- MAKE_STD_ZVAL(zmode);
- ZVAL_STRING(zmode, mode, 1);
- args[1] = &zmode;
-
- MAKE_STD_ZVAL(zoptions);
- ZVAL_LONG(zoptions, options);
- args[2] = &zoptions;
-
- MAKE_STD_ZVAL(zopened);
- ZVAL_REFCOUNT(zopened) = 1;
- PZVAL_IS_REF(zopened) = 1;
- ZVAL_NULL(zopened);
- args[3] = &zopened;
-
- MAKE_STD_ZVAL(zfuncname);
- ZVAL_STRING(zfuncname, USERSTREAM_OPEN, 1);
-
- call_result = call_user_function_ex(NULL,
- &us->object,
- zfuncname,
- &zretval,
- 4, args,
- 0, NULL TSRMLS_CC);
-
- if (call_result == SUCCESS && zretval != NULL && zval_is_true(zretval)) {
- /* the stream is now open! */
- stream = php_stream_alloc_rel(&php_stream_userspace_ops, us, 0, mode);
-
- /* if the opened path is set, copy it out */
- if (Z_TYPE_P(zopened) == IS_STRING && opened_path) {
- *opened_path = estrndup(Z_STRVAL_P(zopened), Z_STRLEN_P(zopened));
- }
-
- /* set wrapper data to be a reference to our object */
- stream->wrapperdata = us->object;
- zval_add_ref(&stream->wrapperdata);
- } else {
- php_stream_wrapper_log_error(wrapper, options TSRMLS_CC, "\"%s::" USERSTREAM_OPEN "\" call failed",
- us->wrapper->classname);
- }
-
- /* destroy everything else */
- if (stream == NULL) {
- zval_ptr_dtor(&us->object);
- efree(us);
- }
- if (zretval)
- zval_ptr_dtor(&zretval);
-
- zval_ptr_dtor(&zfuncname);
- zval_ptr_dtor(&zopened);
- zval_ptr_dtor(&zoptions);
- zval_ptr_dtor(&zmode);
- zval_ptr_dtor(&zfilename);
-
- FG(user_stream_current_filename) = NULL;
-
- return stream;
-}
-
-static php_stream *user_wrapper_opendir(php_stream_wrapper *wrapper, char *filename, char *mode,
- int options, char **opened_path, php_stream_context *context STREAMS_DC TSRMLS_DC)
-{
- struct php_user_stream_wrapper *uwrap = (struct php_user_stream_wrapper*)wrapper->abstract;
- php_userstream_data_t *us;
- zval *zfilename, *zoptions, *zretval = NULL, *zfuncname, *zcontext;
- zval **args[2];
- int call_result;
- php_stream *stream = NULL;
-
- /* Try to catch bad usage without preventing flexibility */
- if (FG(user_stream_current_filename) != NULL && strcmp(filename, FG(user_stream_current_filename)) == 0) {
- php_stream_wrapper_log_error(wrapper, options TSRMLS_CC, "infinite recursion prevented");
- return NULL;
- }
- FG(user_stream_current_filename) = filename;
-
- us = emalloc(sizeof(*us));
- us->wrapper = uwrap;
-
- /* create an instance of our class */
- ALLOC_ZVAL(us->object);
- object_init_ex(us->object, uwrap->ce);
- ZVAL_REFCOUNT(us->object) = 1;
- PZVAL_IS_REF(us->object) = 1;
-
- if (context) {
- MAKE_STD_ZVAL(zcontext);
- php_stream_context_to_zval(context, zcontext);
- add_property_zval(us->object, "context", zcontext);
- /* The object property should be the only reference,
- 'get rid' of our local reference. */
- zval_ptr_dtor(&zcontext);
- } else {
- add_property_null(us->object, "context");
- }
-
- /* call it's dir_open method - set up params first */
- MAKE_STD_ZVAL(zfilename);
- ZVAL_STRING(zfilename, filename, 1);
- args[0] = &zfilename;
-
- MAKE_STD_ZVAL(zoptions);
- ZVAL_LONG(zoptions, options);
- args[1] = &zoptions;
-
- MAKE_STD_ZVAL(zfuncname);
- ZVAL_STRING(zfuncname, USERSTREAM_DIR_OPEN, 1);
-
- call_result = call_user_function_ex(NULL,
- &us->object,
- zfuncname,
- &zretval,
- 2, args,
- 0, NULL TSRMLS_CC);
-
- if (call_result == SUCCESS && zretval != NULL && zval_is_true(zretval)) {
- /* the stream is now open! */
- stream = php_stream_alloc_rel(&php_stream_userspace_dir_ops, us, 0, mode);
-
- /* set wrapper data to be a reference to our object */
- stream->wrapperdata = us->object;
- zval_add_ref(&stream->wrapperdata);
- } else {
- php_stream_wrapper_log_error(wrapper, options TSRMLS_CC, "\"%s::" USERSTREAM_DIR_OPEN "\" call failed",
- us->wrapper->classname);
- }
-
- /* destroy everything else */
- if (stream == NULL) {
- zval_ptr_dtor(&us->object);
- efree(us);
- }
- if (zretval)
- zval_ptr_dtor(&zretval);
-
- zval_ptr_dtor(&zfuncname);
- zval_ptr_dtor(&zoptions);
- zval_ptr_dtor(&zfilename);
-
- FG(user_stream_current_filename) = NULL;
-
- return stream;
-}
-
-
-/* {{{ proto bool stream_wrapper_register(string protocol, string classname)
- Registers a custom URL protocol handler class */
-PHP_FUNCTION(stream_wrapper_register)
-{
- char *protocol, *classname;
- int protocol_len, classname_len;
- struct php_user_stream_wrapper * uwrap;
- int rsrc_id;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ss", &protocol, &protocol_len, &classname, &classname_len) == FAILURE) {
- RETURN_FALSE;
- }
-
- uwrap = (struct php_user_stream_wrapper *)ecalloc(1, sizeof(*uwrap));
- uwrap->protoname = estrndup(protocol, protocol_len);
- uwrap->classname = estrndup(classname, classname_len);
- uwrap->wrapper.wops = &user_stream_wops;
- uwrap->wrapper.abstract = uwrap;
-
- rsrc_id = ZEND_REGISTER_RESOURCE(NULL, uwrap, le_protocols);
-
- if (zend_lookup_class(uwrap->classname, classname_len, (zend_class_entry***)&uwrap->ce TSRMLS_CC) == SUCCESS) {
- uwrap->ce = *(zend_class_entry**)uwrap->ce;
- if (php_register_url_stream_wrapper_volatile(protocol, &uwrap->wrapper TSRMLS_CC) == SUCCESS) {
- RETURN_TRUE;
- } else {
- /* We failed. But why? */
- if (zend_hash_exists(php_stream_get_url_stream_wrappers_hash(), protocol, protocol_len)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Protocol %s:// is already defined.", protocol);
- } else {
- /* Should never happen */
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to register wrapper class %s to %s://", classname, protocol);
- }
- }
- } else {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "class '%s' is undefined", classname);
- }
-
- zend_list_delete(rsrc_id);
- RETURN_FALSE;
-}
-/* }}} */
-
-
-static size_t php_userstreamop_write(php_stream *stream, const char *buf, size_t count TSRMLS_DC)
-{
- zval func_name;
- zval *retval = NULL;
- int call_result;
- php_userstream_data_t *us = (php_userstream_data_t *)stream->abstract;
- zval **args[1];
- zval zbuff, *zbufptr;
- size_t didwrite = 0;
-
- assert(us != NULL);
-
- ZVAL_STRINGL(&func_name, USERSTREAM_WRITE, sizeof(USERSTREAM_WRITE)-1, 0);
-
- ZVAL_STRINGL(&zbuff, (char*)buf, count, 0);
- zbufptr = &zbuff;
- args[0] = &zbufptr;
-
- call_result = call_user_function_ex(NULL,
- &us->object,
- &func_name,
- &retval,
- 1, args,
- 0, NULL TSRMLS_CC);
-
- didwrite = 0;
- if (call_result == SUCCESS && retval != NULL) {
- convert_to_long(retval);
- didwrite = Z_LVAL_P(retval);
- } else if (call_result == FAILURE) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s::" USERSTREAM_WRITE " is not implemented!",
- us->wrapper->classname);
- }
-
- /* don't allow strange buffer overruns due to bogus return */
- if (didwrite > count) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s::" USERSTREAM_WRITE " wrote %ld bytes more data than requested (%ld written, %ld max)",
- us->wrapper->classname,
- (long)(didwrite - count), (long)didwrite, (long)count);
- didwrite = count;
- }
-
- if (retval)
- zval_ptr_dtor(&retval);
-
- return didwrite;
-}
-
-static size_t php_userstreamop_read(php_stream *stream, char *buf, size_t count TSRMLS_DC)
-{
- zval func_name;
- zval *retval = NULL;
- zval **args[1];
- int call_result;
- size_t didread = 0;
- php_userstream_data_t *us = (php_userstream_data_t *)stream->abstract;
- zval *zcount;
-
- assert(us != NULL);
-
- ZVAL_STRINGL(&func_name, USERSTREAM_READ, sizeof(USERSTREAM_READ)-1, 0);
-
- MAKE_STD_ZVAL(zcount);
- ZVAL_LONG(zcount, count);
- args[0] = &zcount;
-
- call_result = call_user_function_ex(NULL,
- &us->object,
- &func_name,
- &retval,
- 1, args,
- 0, NULL TSRMLS_CC);
-
- if (call_result == SUCCESS && retval != NULL) {
- convert_to_string(retval);
- didread = Z_STRLEN_P(retval);
- if (didread > count) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s::" USERSTREAM_READ " - read %ld bytes more data than requested (%ld read, %ld max) - excess data will be lost",
- us->wrapper->classname, (long)(didread - count), (long)didread, (long)count);
- didread = count;
- }
- if (didread > 0)
- memcpy(buf, Z_STRVAL_P(retval), didread);
- } else if (call_result == FAILURE) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s::" USERSTREAM_READ " is not implemented!",
- us->wrapper->classname);
- }
- zval_ptr_dtor(&zcount);
-
- if (retval) {
- zval_ptr_dtor(&retval);
- retval = NULL;
- }
-
- /* since the user stream has no way of setting the eof flag directly, we need to ask it if we hit eof */
-
- ZVAL_STRINGL(&func_name, USERSTREAM_EOF, sizeof(USERSTREAM_EOF)-1, 0);
-
- call_result = call_user_function_ex(NULL,
- &us->object,
- &func_name,
- &retval,
- 0, NULL, 0, NULL TSRMLS_CC);
-
- if (call_result == SUCCESS && retval != NULL && zval_is_true(retval)) {
- stream->eof = 1;
- } else if (call_result == FAILURE) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING,
- "%s::" USERSTREAM_EOF " is not implemented! Assuming EOF",
- us->wrapper->classname);
-
- stream->eof = 1;
- }
-
- if (retval) {
- zval_ptr_dtor(&retval);
- retval = NULL;
- }
-
- return didread;
-}
-
-static int php_userstreamop_close(php_stream *stream, int close_handle TSRMLS_DC)
-{
- zval func_name;
- zval *retval = NULL;
- php_userstream_data_t *us = (php_userstream_data_t *)stream->abstract;
-
- assert(us != NULL);
-
- ZVAL_STRINGL(&func_name, USERSTREAM_CLOSE, sizeof(USERSTREAM_CLOSE)-1, 0);
-
- call_user_function_ex(NULL,
- &us->object,
- &func_name,
- &retval,
- 0, NULL, 0, NULL TSRMLS_CC);
-
- if (retval)
- zval_ptr_dtor(&retval);
-
- zval_ptr_dtor(&us->object);
-
- efree(us);
-
- return 0;
-}
-
-static int php_userstreamop_flush(php_stream *stream TSRMLS_DC)
-{
- zval func_name;
- zval *retval = NULL;
- int call_result;
- php_userstream_data_t *us = (php_userstream_data_t *)stream->abstract;
-
- assert(us != NULL);
-
- ZVAL_STRINGL(&func_name, USERSTREAM_FLUSH, sizeof(USERSTREAM_FLUSH)-1, 0);
-
- call_result = call_user_function_ex(NULL,
- &us->object,
- &func_name,
- &retval,
- 0, NULL, 0, NULL TSRMLS_CC);
-
- if (call_result == SUCCESS && retval != NULL && zval_is_true(retval))
- call_result = 0;
- else
- call_result = -1;
-
- if (retval)
- zval_ptr_dtor(&retval);
-
- return call_result;
-}
-
-static int php_userstreamop_seek(php_stream *stream, off_t offset, int whence, off_t *newoffs TSRMLS_DC)
-{
- zval func_name;
- zval *retval = NULL;
- int call_result, ret;
- php_userstream_data_t *us = (php_userstream_data_t *)stream->abstract;
- zval **args[2];
- zval *zoffs, *zwhence;
-
- assert(us != NULL);
-
- ZVAL_STRINGL(&func_name, USERSTREAM_SEEK, sizeof(USERSTREAM_SEEK)-1, 0);
-
- MAKE_STD_ZVAL(zoffs);
- ZVAL_LONG(zoffs, offset);
- args[0] = &zoffs;
-
- MAKE_STD_ZVAL(zwhence);
- ZVAL_LONG(zwhence, whence);
- args[1] = &zwhence;
-
- call_result = call_user_function_ex(NULL,
- &us->object,
- &func_name,
- &retval,
- 2, args,
- 0, NULL TSRMLS_CC);
-
- zval_ptr_dtor(&zoffs);
- zval_ptr_dtor(&zwhence);
-
- if (call_result == FAILURE) {
- /* stream_seek is not implemented, so disable seeks for this stream */
- stream->flags |= PHP_STREAM_FLAG_NO_SEEK;
- /* there should be no retval to clean up */
-
- if (retval)
- zval_ptr_dtor(&retval);
-
- return -1;
- } else if (call_result == SUCCESS && retval != NULL && zval_is_true(retval)) {
- ret = 0;
- } else {
- ret = -1;
- }
-
- if (retval) {
- zval_ptr_dtor(&retval);
- retval = NULL;
- }
-
- /* now determine where we are */
- ZVAL_STRINGL(&func_name, USERSTREAM_TELL, sizeof(USERSTREAM_TELL)-1, 0);
-
- call_result = call_user_function_ex(NULL,
- &us->object,
- &func_name,
- &retval,
- 0, NULL, 0, NULL TSRMLS_CC);
-
- if (call_result == SUCCESS && retval != NULL && Z_TYPE_P(retval) == IS_LONG)
- *newoffs = Z_LVAL_P(retval);
- else
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s::" USERSTREAM_TELL " is not implemented!",
- us->wrapper->classname);
-
- if (retval)
- zval_ptr_dtor(&retval);
-
- return 0;
-}
-
-/* parse the return value from one of the stat functions and store the
- * relevant fields into the statbuf provided */
-static int statbuf_from_array(zval *array, php_stream_statbuf *ssb TSRMLS_DC)
-{
- zval **elem;
-
-#define STAT_PROP_ENTRY_EX(name, name2) \
- if (SUCCESS == zend_hash_find(Z_ARRVAL_P(array), #name, sizeof(#name), (void**)&elem)) { \
- convert_to_long(*elem); \
- ssb->sb.st_##name2 = Z_LVAL_PP(elem); \
- }
-
-#define STAT_PROP_ENTRY(name) STAT_PROP_ENTRY_EX(name,name)
-
- STAT_PROP_ENTRY(dev);
- STAT_PROP_ENTRY(ino);
- STAT_PROP_ENTRY(mode);
- STAT_PROP_ENTRY(nlink);
- STAT_PROP_ENTRY(uid);
- STAT_PROP_ENTRY(gid);
-#if HAVE_ST_RDEV
- STAT_PROP_ENTRY(rdev);
-#endif
- STAT_PROP_ENTRY(size);
-#if defined(NETWARE) && defined(CLIB_STAT_PATCH)
- STAT_PROP_ENTRY_EX(atime, atime.tv_sec);
- STAT_PROP_ENTRY_EX(mtime, mtime.tv_sec);
- STAT_PROP_ENTRY_EX(ctime, ctime.tv_sec);
-#else
- STAT_PROP_ENTRY(atime);
- STAT_PROP_ENTRY(mtime);
- STAT_PROP_ENTRY(ctime);
-#endif
-#ifdef HAVE_ST_BLKSIZE
- STAT_PROP_ENTRY(blksize);
-#endif
-#ifdef HAVE_ST_BLOCKS
- STAT_PROP_ENTRY(blocks);
-#endif
-
-#undef STAT_PROP_ENTRY
-#undef STAT_PROP_ENTRY_EX
- return SUCCESS;
-}
-
-static int php_userstreamop_stat(php_stream *stream, php_stream_statbuf *ssb TSRMLS_DC)
-{
- zval func_name;
- zval *retval = NULL;
- int call_result;
- php_userstream_data_t *us = (php_userstream_data_t *)stream->abstract;
- int ret = -1;
-
- ZVAL_STRINGL(&func_name, USERSTREAM_STAT, sizeof(USERSTREAM_STAT)-1, 0);
-
- call_result = call_user_function_ex(NULL,
- &us->object,
- &func_name,
- &retval,
- 0, NULL, 0, NULL TSRMLS_CC);
-
- if (call_result == SUCCESS && retval != NULL && Z_TYPE_P(retval) == IS_ARRAY) {
- if (SUCCESS == statbuf_from_array(retval, ssb TSRMLS_CC))
- ret = 0;
- } else {
- if (call_result == FAILURE) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s::" USERSTREAM_STAT " is not implemented!",
- us->wrapper->classname);
- }
- }
-
- if (retval)
- zval_ptr_dtor(&retval);
-
- return ret;
-}
-
-
-static int php_userstreamop_set_option(php_stream *stream, int option, int value, void *ptrparam TSRMLS_DC) {
- zval func_name;
- zval *retval = NULL;
- int call_result;
- php_userstream_data_t *us = (php_userstream_data_t *)stream->abstract;
- int ret = -1;
- zval *zvalue = NULL;
- zval **args[1];
-
- switch (option) {
- case PHP_STREAM_OPTION_CHECK_LIVENESS:
- ZVAL_STRINGL(&func_name, USERSTREAM_EOF, sizeof(USERSTREAM_EOF)-1, 0);
- call_result = call_user_function_ex(NULL, &us->object, &func_name, &retval, 0, NULL, 0, NULL TSRMLS_CC);
- if (call_result == SUCCESS && retval != NULL && Z_TYPE_P(retval) == IS_BOOL) {
- ret = Z_LVAL_P(retval) ? PHP_STREAM_OPTION_RETURN_OK : PHP_STREAM_OPTION_RETURN_ERR;
- } else {
- ret = PHP_STREAM_OPTION_RETURN_ERR;
- php_error_docref(NULL TSRMLS_CC, E_WARNING,
- "%s::" USERSTREAM_EOF " is not implemented! Assuming EOF",
- us->wrapper->classname);
- }
- break;
-
- case PHP_STREAM_OPTION_LOCKING:
- MAKE_STD_ZVAL(zvalue);
- ZVAL_LONG(zvalue, value);
- args[0] = &zvalue;
-
- /* TODO wouldblock */
- ZVAL_STRINGL(&func_name, USERSTREAM_LOCK, sizeof(USERSTREAM_LOCK)-1, 0);
-
- call_result = call_user_function_ex(NULL,
- &us->object,
- &func_name,
- &retval,
- 1, args, 0, NULL TSRMLS_CC);
-
- if (call_result == SUCCESS && retval != NULL && Z_TYPE_P(retval) == IS_BOOL) {
- ret = !Z_LVAL_P(retval);
- } else if (call_result == FAILURE) {
- if (value == 0) {
- /* lock support test (TODO: more check) */
- ret = 0;
- } else {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s::" USERSTREAM_LOCK " is not implemented!",
- us->wrapper->classname);
- }
- }
-
- break;
- }
-
- /* clean up */
- if (retval) {
- zval_ptr_dtor(&retval);
- }
-
-
- if (zvalue) {
- zval_ptr_dtor(&zvalue);
- }
-
- return ret;
-}
-
-
-static int user_wrapper_unlink(php_stream_wrapper *wrapper, char *url, int options, php_stream_context *context TSRMLS_DC)
-{
- struct php_user_stream_wrapper *uwrap = (struct php_user_stream_wrapper*)wrapper->abstract;
- zval *zfilename, *zfuncname, *zretval, *zcontext;
- zval **args[1];
- int call_result;
- zval *object;
- int ret = 0;
-
- /* create an instance of our class */
- ALLOC_ZVAL(object);
- object_init_ex(object, uwrap->ce);
- ZVAL_REFCOUNT(object) = 1;
- PZVAL_IS_REF(object) = 1;
-
- if (context) {
- MAKE_STD_ZVAL(zcontext);
- php_stream_context_to_zval(context, zcontext);
- add_property_zval(object, "context", zcontext);
- /* The object property should be the only reference,
- 'get rid' of our local reference. */
- zval_ptr_dtor(&zcontext);
- } else {
- add_property_null(object, "context");
- }
-
- /* call the unlink method */
- MAKE_STD_ZVAL(zfilename);
- ZVAL_STRING(zfilename, url, 1);
- args[0] = &zfilename;
-
- MAKE_STD_ZVAL(zfuncname);
- ZVAL_STRING(zfuncname, USERSTREAM_UNLINK, 1);
-
- call_result = call_user_function_ex(NULL,
- &object,
- zfuncname,
- &zretval,
- 1, args,
- 0, NULL TSRMLS_CC);
-
- if (call_result == SUCCESS && zretval && Z_TYPE_P(zretval) == IS_BOOL) {
- ret = Z_LVAL_P(zretval);
- } else if (call_result == FAILURE) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s::" USERSTREAM_UNLINK " is not implemented!", uwrap->classname);
- }
-
- /* clean up */
- zval_ptr_dtor(&object);
- if (zretval)
- zval_ptr_dtor(&zretval);
-
- zval_ptr_dtor(&zfuncname);
- zval_ptr_dtor(&zfilename);
-
- return ret;
-}
-
-static int user_wrapper_rename(php_stream_wrapper *wrapper, char *url_from, char *url_to, int options, php_stream_context *context TSRMLS_DC)
-{
- struct php_user_stream_wrapper *uwrap = (struct php_user_stream_wrapper*)wrapper->abstract;
- zval *zold_name, *znew_name, *zfuncname, *zretval, *zcontext;
- zval **args[2];
- int call_result;
- zval *object;
- int ret = 0;
-
- /* create an instance of our class */
- ALLOC_ZVAL(object);
- object_init_ex(object, uwrap->ce);
- ZVAL_REFCOUNT(object) = 1;
- PZVAL_IS_REF(object) = 1;
-
- if (context) {
- MAKE_STD_ZVAL(zcontext);
- php_stream_context_to_zval(context, zcontext);
- add_property_zval(object, "context", zcontext);
- /* The object property should be the only reference,
- 'get rid' of our local reference. */
- zval_ptr_dtor(&zcontext);
- } else {
- add_property_null(object, "context");
- }
-
- /* call the rename method */
- MAKE_STD_ZVAL(zold_name);
- ZVAL_STRING(zold_name, url_from, 1);
- args[0] = &zold_name;
-
- MAKE_STD_ZVAL(znew_name);
- ZVAL_STRING(znew_name, url_to, 1);
- args[1] = &znew_name;
-
- MAKE_STD_ZVAL(zfuncname);
- ZVAL_STRING(zfuncname, USERSTREAM_RENAME, 1);
-
- call_result = call_user_function_ex(NULL,
- &object,
- zfuncname,
- &zretval,
- 2, args,
- 0, NULL TSRMLS_CC);
-
- if (call_result == SUCCESS && zretval && Z_TYPE_P(zretval) == IS_BOOL) {
- ret = Z_LVAL_P(zretval);
- } else if (call_result == FAILURE) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s::" USERSTREAM_RENAME " is not implemented!", uwrap->classname);
- }
-
- /* clean up */
- zval_ptr_dtor(&object);
- if (zretval)
- zval_ptr_dtor(&zretval);
-
- zval_ptr_dtor(&zfuncname);
- zval_ptr_dtor(&zold_name);
- zval_ptr_dtor(&znew_name);
-
- return ret;
-}
-
-static int user_wrapper_mkdir(php_stream_wrapper *wrapper, char *url, int mode, int options, php_stream_context *context TSRMLS_DC)
-{
- struct php_user_stream_wrapper *uwrap = (struct php_user_stream_wrapper*)wrapper->abstract;
- zval *zfilename, *zmode, *zoptions, *zfuncname, *zretval, *zcontext;
- zval **args[3];
- int call_result;
- zval *object;
- int ret = 0;
-
- /* create an instance of our class */
- ALLOC_ZVAL(object);
- object_init_ex(object, uwrap->ce);
- ZVAL_REFCOUNT(object) = 1;
- PZVAL_IS_REF(object) = 1;
-
- if (context) {
- MAKE_STD_ZVAL(zcontext);
- php_stream_context_to_zval(context, zcontext);
- add_property_zval(object, "context", zcontext);
- /* The object property should be the only reference,
- 'get rid' of our local reference. */
- zval_ptr_dtor(&zcontext);
- } else {
- add_property_null(object, "context");
- }
-
- /* call the unlink method */
- MAKE_STD_ZVAL(zfilename);
- ZVAL_STRING(zfilename, url, 1);
- args[0] = &zfilename;
-
- MAKE_STD_ZVAL(zmode);
- ZVAL_LONG(zmode, mode);
- args[1] = &zmode;
-
- MAKE_STD_ZVAL(zoptions);
- ZVAL_LONG(zoptions, options);
- args[2] = &zoptions;
-
- MAKE_STD_ZVAL(zfuncname);
- ZVAL_STRING(zfuncname, USERSTREAM_MKDIR, 1);
-
- call_result = call_user_function_ex(NULL,
- &object,
- zfuncname,
- &zretval,
- 3, args,
- 0, NULL TSRMLS_CC);
-
- if (call_result == SUCCESS && zretval && Z_TYPE_P(zretval) == IS_BOOL) {
- ret = Z_LVAL_P(zretval);
- } else if (call_result == FAILURE) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s::" USERSTREAM_MKDIR " is not implemented!", uwrap->classname);
- }
-
- /* clean up */
- zval_ptr_dtor(&object);
- if (zretval) {
- zval_ptr_dtor(&zretval);
- }
-
- zval_ptr_dtor(&zfuncname);
- zval_ptr_dtor(&zfilename);
- zval_ptr_dtor(&zmode);
- zval_ptr_dtor(&zoptions);
-
- return ret;
-}
-
-static int user_wrapper_rmdir(php_stream_wrapper *wrapper, char *url, int options, php_stream_context *context TSRMLS_DC)
-{
- struct php_user_stream_wrapper *uwrap = (struct php_user_stream_wrapper*)wrapper->abstract;
- zval *zfilename, *zoptions, *zfuncname, *zretval, *zcontext;
- zval **args[3];
- int call_result;
- zval *object;
- int ret = 0;
-
- /* create an instance of our class */
- ALLOC_ZVAL(object);
- object_init_ex(object, uwrap->ce);
- ZVAL_REFCOUNT(object) = 1;
- PZVAL_IS_REF(object) = 1;
-
- if (context) {
- MAKE_STD_ZVAL(zcontext);
- php_stream_context_to_zval(context, zcontext);
- add_property_zval(object, "context", zcontext);
- /* The object property should be the only reference,
- 'get rid' of our local reference. */
- zval_ptr_dtor(&zcontext);
- } else {
- add_property_null(object, "context");
- }
-
- /* call the unlink method */
- MAKE_STD_ZVAL(zfilename);
- ZVAL_STRING(zfilename, url, 1);
- args[0] = &zfilename;
-
- MAKE_STD_ZVAL(zoptions);
- ZVAL_LONG(zoptions, options);
- args[1] = &zoptions;
-
- MAKE_STD_ZVAL(zfuncname);
- ZVAL_STRING(zfuncname, USERSTREAM_RMDIR, 1);
-
- call_result = call_user_function_ex(NULL,
- &object,
- zfuncname,
- &zretval,
- 2, args,
- 0, NULL TSRMLS_CC);
-
- if (call_result == SUCCESS && zretval && Z_TYPE_P(zretval) == IS_BOOL) {
- ret = Z_LVAL_P(zretval);
- } else if (call_result == FAILURE) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s::" USERSTREAM_RMDIR " is not implemented!", uwrap->classname);
- }
-
- /* clean up */
- zval_ptr_dtor(&object);
- if (zretval) {
- zval_ptr_dtor(&zretval);
- }
-
- zval_ptr_dtor(&zfuncname);
- zval_ptr_dtor(&zfilename);
- zval_ptr_dtor(&zoptions);
-
- return ret;
-}
-
-static int user_wrapper_stat_url(php_stream_wrapper *wrapper, char *url, int flags, php_stream_statbuf *ssb, php_stream_context *context TSRMLS_DC)
-{
- struct php_user_stream_wrapper *uwrap = (struct php_user_stream_wrapper*)wrapper->abstract;
- zval *zfilename, *zfuncname, *zretval, *zflags, *zcontext;
- zval **args[2];
- int call_result;
- zval *object;
- int ret = -1;
-
- /* create an instance of our class */
- ALLOC_ZVAL(object);
- object_init_ex(object, uwrap->ce);
- ZVAL_REFCOUNT(object) = 1;
- PZVAL_IS_REF(object) = 1;
-
- if (context) {
- MAKE_STD_ZVAL(zcontext);
- php_stream_context_to_zval(context, zcontext);
- add_property_zval(object, "context", zcontext);
- /* The object property should be the only reference,
- 'get rid' of our local reference. */
- zval_ptr_dtor(&zcontext);
- } else {
- add_property_null(object, "context");
- }
-
- /* call the stat_url method */
-
- /* call it's stream_open method - set up params first */
- MAKE_STD_ZVAL(zfilename);
- ZVAL_STRING(zfilename, url, 1);
- args[0] = &zfilename;
-
- MAKE_STD_ZVAL(zflags);
- ZVAL_LONG(zflags, flags);
- args[1] = &zflags;
-
- MAKE_STD_ZVAL(zfuncname);
- ZVAL_STRING(zfuncname, USERSTREAM_STATURL, 1);
-
- call_result = call_user_function_ex(NULL,
- &object,
- zfuncname,
- &zretval,
- 2, args,
- 0, NULL TSRMLS_CC);
-
- if (call_result == SUCCESS && zretval != NULL && Z_TYPE_P(zretval) == IS_ARRAY) {
- /* We got the info we needed */
- if (SUCCESS == statbuf_from_array(zretval, ssb TSRMLS_CC))
- ret = 0;
- } else {
- if (call_result == FAILURE) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s::" USERSTREAM_STATURL " is not implemented!",
- uwrap->classname);
- }
- }
-
- /* clean up */
- zval_ptr_dtor(&object);
- if (zretval)
- zval_ptr_dtor(&zretval);
-
- zval_ptr_dtor(&zfuncname);
- zval_ptr_dtor(&zfilename);
- zval_ptr_dtor(&zflags);
-
- return ret;
-
-}
-
-static size_t php_userstreamop_readdir(php_stream *stream, char *buf, size_t count TSRMLS_DC)
-{
- zval func_name;
- zval *retval = NULL;
- int call_result;
- size_t didread = 0;
- php_userstream_data_t *us = (php_userstream_data_t *)stream->abstract;
- php_stream_dirent *ent = (php_stream_dirent*)buf;
-
- /* avoid problems if someone mis-uses the stream */
- if (count != sizeof(php_stream_dirent))
- return 0;
-
- ZVAL_STRINGL(&func_name, USERSTREAM_DIR_READ, sizeof(USERSTREAM_DIR_READ)-1, 0);
-
- call_result = call_user_function_ex(NULL,
- &us->object,
- &func_name,
- &retval,
- 0, NULL,
- 0, NULL TSRMLS_CC);
-
- if (call_result == SUCCESS && retval != NULL && Z_TYPE_P(retval) != IS_BOOL) {
- convert_to_string(retval);
- PHP_STRLCPY(ent->d_name, Z_STRVAL_P(retval), sizeof(ent->d_name), Z_STRLEN_P(retval));
-
- didread = sizeof(php_stream_dirent);
- } else if (call_result == FAILURE) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s::" USERSTREAM_DIR_READ " is not implemented!",
- us->wrapper->classname);
- }
-
- if (retval)
- zval_ptr_dtor(&retval);
-
- return didread;
-}
-
-static int php_userstreamop_closedir(php_stream *stream, int close_handle TSRMLS_DC)
-{
- zval func_name;
- zval *retval = NULL;
- php_userstream_data_t *us = (php_userstream_data_t *)stream->abstract;
-
- assert(us != NULL);
-
- ZVAL_STRINGL(&func_name, USERSTREAM_DIR_CLOSE, sizeof(USERSTREAM_DIR_CLOSE)-1, 0);
-
- call_user_function_ex(NULL,
- &us->object,
- &func_name,
- &retval,
- 0, NULL, 0, NULL TSRMLS_CC);
-
- if (retval)
- zval_ptr_dtor(&retval);
-
- zval_ptr_dtor(&us->object);
-
- efree(us);
-
- return 0;
-}
-
-static int php_userstreamop_rewinddir(php_stream *stream, off_t offset, int whence, off_t *newoffs TSRMLS_DC)
-{
- zval func_name;
- zval *retval = NULL;
- php_userstream_data_t *us = (php_userstream_data_t *)stream->abstract;
-
- ZVAL_STRINGL(&func_name, USERSTREAM_DIR_REWIND, sizeof(USERSTREAM_DIR_REWIND)-1, 0);
-
- call_user_function_ex(NULL,
- &us->object,
- &func_name,
- &retval,
- 0, NULL, 0, NULL TSRMLS_CC);
-
- if (retval)
- zval_ptr_dtor(&retval);
-
- return 0;
-
-}
-
-php_stream_ops php_stream_userspace_ops = {
- php_userstreamop_write, php_userstreamop_read,
- php_userstreamop_close, php_userstreamop_flush,
- "user-space",
- php_userstreamop_seek,
- NULL, /* cast */
- php_userstreamop_stat,
- php_userstreamop_set_option,
-};
-
-php_stream_ops php_stream_userspace_dir_ops = {
- NULL, /* write */
- php_userstreamop_readdir,
- php_userstreamop_closedir,
- NULL, /* flush */
- "user-space-dir",
- php_userstreamop_rewinddir,
- NULL, /* cast */
- NULL, /* stat */
- NULL /* set_option */
-};
-
-
diff --git a/main/streams/xp_socket.c b/main/streams/xp_socket.c
deleted file mode 100644
index aa143f4ab2..0000000000
--- a/main/streams/xp_socket.c
+++ /dev/null
@@ -1,806 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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@thebrainroom.com> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#include "php.h"
-#include "ext/standard/file.h"
-#include "streams/php_streams_int.h"
-#include "php_network.h"
-
-#if defined(PHP_WIN32) || defined(__riscos__) || defined(NETWARE)
-# undef AF_UNIX
-#endif
-
-#if defined(AF_UNIX)
-#include <sys/un.h>
-#endif
-
-php_stream_ops php_stream_generic_socket_ops;
-PHPAPI php_stream_ops php_stream_socket_ops;
-php_stream_ops php_stream_udp_socket_ops;
-#ifdef AF_UNIX
-php_stream_ops php_stream_unix_socket_ops;
-php_stream_ops php_stream_unixdg_socket_ops;
-#endif
-
-
-static int php_tcp_sockop_set_option(php_stream *stream, int option, int value, void *ptrparam TSRMLS_DC);
-
-/* {{{ Generic socket stream operations */
-static size_t php_sockop_write(php_stream *stream, const char *buf, size_t count TSRMLS_DC)
-{
- php_netstream_data_t *sock = (php_netstream_data_t*)stream->abstract;
- int didwrite;
-
- if (sock->socket == -1) {
- return 0;
- }
-
-retry:
- didwrite = send(sock->socket, buf, count, 0);
-
- if (didwrite <= 0) {
- long err = php_socket_errno();
- char *estr;
-
- if (sock->is_blocked && err == EWOULDBLOCK) {
- fd_set fdw, tfdw;
- int retval;
- struct timeval timeout, *ptimeout;
-
- FD_ZERO(&fdw);
- FD_SET(sock->socket, &fdw);
- sock->timeout_event = 0;
-
- if (sock->timeout.tv_sec == -1)
- ptimeout = NULL;
- else
- ptimeout = &timeout;
-
- do {
- tfdw = fdw;
- timeout = sock->timeout;
-
- retval = select(sock->socket + 1, NULL, &tfdw, NULL, ptimeout);
-
- if (retval == 0) {
- sock->timeout_event = 1;
- break;
- }
-
- if (retval > 0) {
- /* writable now; retry */
- goto retry;
- }
-
- err = php_socket_errno();
- } while (err == EINTR);
- }
- estr = php_socket_strerror(err, NULL, 0);
- php_error_docref(NULL TSRMLS_CC, E_NOTICE, "send of %ld bytes failed with errno=%ld %s",
- (long)count, err, estr);
- efree(estr);
- }
-
- if (didwrite > 0) {
- php_stream_notify_progress_increment(stream->context, didwrite, 0);
- }
-
- if (didwrite < 0) {
- didwrite = 0;
- }
-
- return didwrite;
-}
-
-static void php_sock_stream_wait_for_data(php_stream *stream, php_netstream_data_t *sock TSRMLS_DC)
-{
- fd_set fdr, tfdr;
- int retval;
- struct timeval timeout, *ptimeout;
-
- if (sock->socket == -1) {
- return;
- }
-
- FD_ZERO(&fdr);
- FD_SET(sock->socket, &fdr);
- sock->timeout_event = 0;
-
- if (sock->timeout.tv_sec == -1)
- ptimeout = NULL;
- else
- ptimeout = &timeout;
-
-
- while(1) {
- tfdr = fdr;
- timeout = sock->timeout;
-
- retval = select(sock->socket + 1, &tfdr, NULL, NULL, ptimeout);
-
- if (retval == 0)
- sock->timeout_event = 1;
-
- if (retval >= 0)
- break;
- }
-}
-
-static size_t php_sockop_read(php_stream *stream, char *buf, size_t count TSRMLS_DC)
-{
- php_netstream_data_t *sock = (php_netstream_data_t*)stream->abstract;
- int nr_bytes = 0;
-
- if (sock->socket == -1) {
- return 0;
- }
-
- if (sock->is_blocked) {
- php_sock_stream_wait_for_data(stream, sock TSRMLS_CC);
- if (sock->timeout_event)
- return 0;
- }
-
- nr_bytes = recv(sock->socket, buf, count, 0);
-
- stream->eof = (nr_bytes == 0 || (nr_bytes == -1 && php_socket_errno() != EWOULDBLOCK));
-
- if (nr_bytes > 0) {
- php_stream_notify_progress_increment(stream->context, nr_bytes, 0);
- }
-
- if (nr_bytes < 0) {
- nr_bytes = 0;
- }
-
- return nr_bytes;
-}
-
-
-static int php_sockop_close(php_stream *stream, int close_handle TSRMLS_DC)
-{
- php_netstream_data_t *sock = (php_netstream_data_t*)stream->abstract;
-#ifdef PHP_WIN32
- fd_set wrfds, efds;
- int n;
- struct timeval timeout;
-#endif
-
- if (close_handle) {
-
- if (sock->socket != -1) {
-#ifdef PHP_WIN32
- /* prevent more data from coming in */
- shutdown(sock->socket, SHUT_RD);
-
- /* try to make sure that the OS sends all data before we close the connection.
- * Essentially, we are waiting for the socket to become writeable, which means
- * that all pending data has been sent.
- * We use a small timeout which should encourage the OS to send the data,
- * but at the same time avoid hanging indefintely.
- * */
- do {
- FD_ZERO(&wrfds);
- FD_SET(sock->socket, &wrfds);
- efds = wrfds;
-
- timeout.tv_sec = 0;
- timeout.tv_usec = 5000; /* arbitrary */
-
- n = select(sock->socket + 1, NULL, &wrfds, &efds, &timeout);
- } while (n == -1 && php_socket_errno() == EINTR);
-#endif
-
- closesocket(sock->socket);
- sock->socket = -1;
- }
-
- }
-
- pefree(sock, php_stream_is_persistent(stream));
-
- return 0;
-}
-
-static int php_sockop_flush(php_stream *stream TSRMLS_DC)
-{
-#if 0
- php_netstream_data_t *sock = (php_netstream_data_t*)stream->abstract;
- return fsync(sock->socket);
-#endif
- return 0;
-}
-
-static int php_sockop_stat(php_stream *stream, php_stream_statbuf *ssb TSRMLS_DC)
-{
- php_netstream_data_t *sock = (php_netstream_data_t*)stream->abstract;
- return fstat(sock->socket, &ssb->sb);
-}
-
-static inline int sock_sendto(php_netstream_data_t *sock, char *buf, size_t buflen, int flags,
- struct sockaddr *addr, socklen_t addrlen
- TSRMLS_DC)
-{
- if (addr) {
- return sendto(sock->socket, buf, buflen, flags, addr, addrlen);
- }
- return send(sock->socket, buf, buflen, flags);
-}
-
-static inline int sock_recvfrom(php_netstream_data_t *sock, char *buf, size_t buflen, int flags,
- char **textaddr, long *textaddrlen,
- struct sockaddr **addr, socklen_t *addrlen
- TSRMLS_DC)
-{
- php_sockaddr_storage sa;
- socklen_t sl = sizeof(sa);
- int ret;
- int want_addr = textaddr || addr;
-
- if (want_addr) {
- ret = recvfrom(sock->socket, buf, buflen, flags, (struct sockaddr*)&sa, &sl);
- php_network_populate_name_from_sockaddr((struct sockaddr*)&sa, sl,
- textaddr, textaddrlen, addr, addrlen TSRMLS_CC);
- } else {
- ret = recv(sock->socket, buf, buflen, flags);
- }
-
- return ret;
-}
-
-static int php_sockop_set_option(php_stream *stream, int option, int value, void *ptrparam TSRMLS_DC)
-{
- int oldmode, flags;
- php_netstream_data_t *sock = (php_netstream_data_t*)stream->abstract;
- php_stream_xport_param *xparam;
-
- switch(option) {
- case PHP_STREAM_OPTION_CHECK_LIVENESS:
- {
- fd_set rfds;
- struct timeval tv;
- char buf;
- int alive = 1;
-
- if (value == -1) {
- if (sock->timeout.tv_sec == -1) {
- tv.tv_sec = FG(default_socket_timeout);
- tv.tv_usec = 0;
- } else {
- tv = sock->timeout;
- }
- } else {
- tv.tv_sec = value;
- tv.tv_usec = 0;
- }
-
- if (sock->socket == -1) {
- alive = 0;
- } else {
- FD_ZERO(&rfds);
- FD_SET(sock->socket, &rfds);
-
- if (select(sock->socket + 1, &rfds, NULL, NULL, &tv) > 0 && FD_ISSET(sock->socket, &rfds)) {
- if (0 == recv(sock->socket, &buf, sizeof(buf), MSG_PEEK) && php_socket_errno() != EAGAIN) {
- alive = 0;
- }
- }
- }
- return alive ? PHP_STREAM_OPTION_RETURN_OK : PHP_STREAM_OPTION_RETURN_ERR;
- }
-
- case PHP_STREAM_OPTION_BLOCKING:
-
- oldmode = sock->is_blocked;
-
- /* no need to change anything */
- if (value == oldmode)
- return oldmode;
-
- if (SUCCESS == php_set_sock_blocking(sock->socket, value TSRMLS_CC)) {
- sock->is_blocked = value;
- return oldmode;
- }
-
- return PHP_STREAM_OPTION_RETURN_ERR;
-
- case PHP_STREAM_OPTION_READ_TIMEOUT:
- sock->timeout = *(struct timeval*)ptrparam;
- sock->timeout_event = 0;
- return PHP_STREAM_OPTION_RETURN_OK;
-
- case PHP_STREAM_OPTION_META_DATA_API:
- add_assoc_bool((zval *)ptrparam, "timed_out", sock->timeout_event);
- add_assoc_bool((zval *)ptrparam, "blocked", sock->is_blocked);
- add_assoc_bool((zval *)ptrparam, "eof", stream->eof);
- return PHP_STREAM_OPTION_RETURN_OK;
-
- case PHP_STREAM_OPTION_XPORT_API:
- xparam = (php_stream_xport_param *)ptrparam;
-
- switch (xparam->op) {
- case STREAM_XPORT_OP_LISTEN:
- xparam->outputs.returncode = listen(sock->socket, 5);
- return PHP_STREAM_OPTION_RETURN_OK;
-
- case STREAM_XPORT_OP_GET_NAME:
- xparam->outputs.returncode = php_network_get_sock_name(sock->socket,
- xparam->want_textaddr ? &xparam->outputs.textaddr : NULL,
- xparam->want_textaddr ? &xparam->outputs.textaddrlen : NULL,
- xparam->want_addr ? &xparam->outputs.addr : NULL,
- xparam->want_addr ? &xparam->outputs.addrlen : NULL
- TSRMLS_CC);
- return PHP_STREAM_OPTION_RETURN_OK;
-
- case STREAM_XPORT_OP_GET_PEER_NAME:
- xparam->outputs.returncode = php_network_get_peer_name(sock->socket,
- xparam->want_textaddr ? &xparam->outputs.textaddr : NULL,
- xparam->want_textaddr ? &xparam->outputs.textaddrlen : NULL,
- xparam->want_addr ? &xparam->outputs.addr : NULL,
- xparam->want_addr ? &xparam->outputs.addrlen : NULL
- TSRMLS_CC);
- return PHP_STREAM_OPTION_RETURN_OK;
-
- case STREAM_XPORT_OP_SEND:
- flags = 0;
- if ((xparam->inputs.flags & STREAM_OOB) == STREAM_OOB) {
- flags |= MSG_OOB;
- }
- xparam->outputs.returncode = sock_sendto(sock,
- xparam->inputs.buf, xparam->inputs.buflen,
- flags,
- xparam->inputs.addr,
- xparam->inputs.addrlen TSRMLS_CC);
- if (xparam->outputs.returncode == -1) {
- char *err = php_socket_strerror(php_socket_errno(), NULL, 0);
- php_error_docref(NULL TSRMLS_CC, E_WARNING,
- "%s\n", err);
- efree(err);
- }
- return PHP_STREAM_OPTION_RETURN_OK;
-
- case STREAM_XPORT_OP_RECV:
- flags = 0;
- if ((xparam->inputs.flags & STREAM_OOB) == STREAM_OOB) {
- flags |= MSG_OOB;
- }
- if ((xparam->inputs.flags & STREAM_PEEK) == STREAM_PEEK) {
- flags |= MSG_PEEK;
- }
- xparam->outputs.returncode = sock_recvfrom(sock,
- xparam->inputs.buf, xparam->inputs.buflen,
- flags,
- xparam->want_textaddr ? &xparam->outputs.textaddr : NULL,
- xparam->want_textaddr ? &xparam->outputs.textaddrlen : NULL,
- xparam->want_addr ? &xparam->outputs.addr : NULL,
- xparam->want_addr ? &xparam->outputs.addrlen : NULL
- TSRMLS_CC);
- return PHP_STREAM_OPTION_RETURN_OK;
-
-
- default:
- return PHP_STREAM_OPTION_RETURN_NOTIMPL;
- }
-
- default:
- return PHP_STREAM_OPTION_RETURN_NOTIMPL;
- }
-}
-
-static int php_sockop_cast(php_stream *stream, int castas, void **ret TSRMLS_DC)
-{
- php_netstream_data_t *sock = (php_netstream_data_t*)stream->abstract;
-
- switch(castas) {
- case PHP_STREAM_AS_STDIO:
- if (ret) {
- *(FILE**)ret = fdopen(sock->socket, stream->mode);
- if (*ret)
- return SUCCESS;
- return FAILURE;
- }
- return SUCCESS;
- case PHP_STREAM_AS_FD_FOR_SELECT:
- case PHP_STREAM_AS_FD:
- case PHP_STREAM_AS_SOCKETD:
- if (ret)
- *(int*)ret = sock->socket;
- return SUCCESS;
- default:
- return FAILURE;
- }
-}
-/* }}} */
-
-/* These may look identical, but we need them this way so that
- * we can determine which type of socket we are dealing with
- * by inspecting stream->ops.
- * A "useful" side-effect is that the user's scripts can then
- * make similar decisions using stream_get_meta_data.
- * */
-php_stream_ops php_stream_generic_socket_ops = {
- php_sockop_write, php_sockop_read,
- php_sockop_close, php_sockop_flush,
- "generic_socket",
- NULL, /* seek */
- php_sockop_cast,
- php_sockop_stat,
- php_sockop_set_option,
-};
-
-
-php_stream_ops php_stream_socket_ops = {
- php_sockop_write, php_sockop_read,
- php_sockop_close, php_sockop_flush,
- "tcp_socket",
- NULL, /* seek */
- php_sockop_cast,
- php_sockop_stat,
- php_tcp_sockop_set_option,
-};
-
-php_stream_ops php_stream_udp_socket_ops = {
- php_sockop_write, php_sockop_read,
- php_sockop_close, php_sockop_flush,
- "udp_socket",
- NULL, /* seek */
- php_sockop_cast,
- php_sockop_stat,
- php_tcp_sockop_set_option,
-};
-
-#ifdef AF_UNIX
-php_stream_ops php_stream_unix_socket_ops = {
- php_sockop_write, php_sockop_read,
- php_sockop_close, php_sockop_flush,
- "unix_socket",
- NULL, /* seek */
- php_sockop_cast,
- php_sockop_stat,
- php_tcp_sockop_set_option,
-};
-php_stream_ops php_stream_unixdg_socket_ops = {
- php_sockop_write, php_sockop_read,
- php_sockop_close, php_sockop_flush,
- "udg_socket",
- NULL, /* seek */
- php_sockop_cast,
- php_sockop_stat,
- php_tcp_sockop_set_option,
-};
-#endif
-
-
-/* network socket operations */
-
-#ifdef AF_UNIX
-static inline int parse_unix_address(php_stream_xport_param *xparam, struct sockaddr_un *unix_addr TSRMLS_DC)
-{
- memset(unix_addr, 0, sizeof(*unix_addr));
- unix_addr->sun_family = AF_UNIX;
-
- /* we need to be binary safe on systems that support an abstract
- * namespace */
- if (xparam->inputs.namelen >= sizeof(unix_addr->sun_path)) {
- /* On linux, when the path begins with a NUL byte we are
- * referring to an abstract namespace. In theory we should
- * allow an extra byte below, since we don't need the NULL.
- * BUT, to get into this branch of code, the name is too long,
- * so we don't care. */
- xparam->inputs.namelen = sizeof(unix_addr->sun_path) - 1;
- }
-
- memcpy(unix_addr->sun_path, xparam->inputs.name, xparam->inputs.namelen);
-
- return 1;
-}
-#endif
-
-static inline char *parse_ip_address(php_stream_xport_param *xparam, int *portno TSRMLS_DC)
-{
- char *colon;
- char *host = NULL;
-
-#ifdef HAVE_IPV6
- char *p;
-
- if (*(xparam->inputs.name) == '[') {
- /* IPV6 notation to specify raw address with port (i.e. [fe80::1]:80) */
- p = memchr(xparam->inputs.name + 1, ']', xparam->inputs.namelen - 2);
- if (!p || *(p + 1) != ':') {
- if (xparam->want_errortext) {
- spprintf(&xparam->outputs.error_text, 0, "Failed to parse IPv6 address \"%s\"", xparam->inputs.name);
- }
- return NULL;
- }
- *portno = atoi(p + 2);
- return estrndup(xparam->inputs.name + 1, p - xparam->inputs.name - 1);
- }
-#endif
-
- colon = memchr(xparam->inputs.name, ':', xparam->inputs.namelen - 1);
- if (colon) {
- *portno = atoi(colon + 1);
- host = estrndup(xparam->inputs.name, colon - xparam->inputs.name);
- } else {
- if (xparam->want_errortext) {
- spprintf(&xparam->outputs.error_text, 0, "Failed to parse address \"%s\"", xparam->inputs.name);
- }
- return NULL;
- }
-
- return host;
-}
-
-static inline int php_tcp_sockop_bind(php_stream *stream, php_netstream_data_t *sock,
- php_stream_xport_param *xparam TSRMLS_DC)
-{
- char *host = NULL;
- int portno, err;
-
-#ifdef AF_UNIX
- if (stream->ops == &php_stream_unix_socket_ops || stream->ops == &php_stream_unixdg_socket_ops) {
- struct sockaddr_un unix_addr;
-
- sock->socket = socket(PF_UNIX, stream->ops == &php_stream_unix_socket_ops ? SOCK_STREAM : SOCK_DGRAM, 0);
-
- if (sock->socket == SOCK_ERR) {
- if (xparam->want_errortext) {
- spprintf(&xparam->outputs.error_text, 0, "Failed to create unix%s socket %s",
- stream->ops == &php_stream_unix_socket_ops ? "" : "datagram",
- strerror(errno));
- }
- return -1;
- }
-
- parse_unix_address(xparam, &unix_addr TSRMLS_CC);
-
- return bind(sock->socket, (struct sockaddr *)&unix_addr, sizeof(unix_addr));
- }
-#endif
-
- host = parse_ip_address(xparam, &portno TSRMLS_CC);
-
- if (host == NULL) {
- return -1;
- }
-
- sock->socket = php_network_bind_socket_to_local_addr(host, portno,
- stream->ops == &php_stream_udp_socket_ops ? SOCK_DGRAM : SOCK_STREAM,
- xparam->want_errortext ? &xparam->outputs.error_text : NULL,
- &err
- TSRMLS_CC);
-
- if (host) {
- efree(host);
- }
-
- return sock->socket == -1 ? -1 : 0;
-}
-
-static inline int php_tcp_sockop_connect(php_stream *stream, php_netstream_data_t *sock,
- php_stream_xport_param *xparam TSRMLS_DC)
-{
- char *host = NULL;
- int portno;
- int err;
- int ret;
-
-#ifdef AF_UNIX
- if (stream->ops == &php_stream_unix_socket_ops || stream->ops == &php_stream_unixdg_socket_ops) {
- struct sockaddr_un unix_addr;
-
- sock->socket = socket(PF_UNIX, stream->ops == &php_stream_unix_socket_ops ? SOCK_STREAM : SOCK_DGRAM, 0);
-
- if (sock->socket == SOCK_ERR) {
- if (xparam->want_errortext) {
- spprintf(&xparam->outputs.error_text, 0, "Failed to create unix socket");
- }
- return -1;
- }
-
- parse_unix_address(xparam, &unix_addr TSRMLS_CC);
-
- ret = php_network_connect_socket(sock->socket,
- (const struct sockaddr *)&unix_addr, (socklen_t)sizeof(unix_addr),
- xparam->op == STREAM_XPORT_OP_CONNECT_ASYNC, xparam->inputs.timeout,
- xparam->want_errortext ? &xparam->outputs.error_text : NULL,
- &err);
-
- xparam->outputs.error_code = err;
-
- goto out;
- }
-#endif
-
- host = parse_ip_address(xparam, &portno TSRMLS_CC);
-
- if (host == NULL) {
- return -1;
- }
-
- /* Note: the test here for php_stream_udp_socket_ops is important, because we
- * want the default to be TCP sockets so that the openssl extension can
- * re-use this code. */
-
- sock->socket = php_network_connect_socket_to_host(host, portno,
- stream->ops == &php_stream_udp_socket_ops ? SOCK_DGRAM : SOCK_STREAM,
- xparam->op == STREAM_XPORT_OP_CONNECT_ASYNC,
- xparam->inputs.timeout,
- xparam->want_errortext ? &xparam->outputs.error_text : NULL,
- &err
- TSRMLS_CC);
-
- ret = sock->socket == -1 ? -1 : 0;
- xparam->outputs.error_code = err;
-
- if (host) {
- efree(host);
- }
-
-#ifdef AF_UNIX
-out:
-#endif
-
- if (ret >= 0 && xparam->op == STREAM_XPORT_OP_CONNECT_ASYNC && err == EINPROGRESS) {
- /* indicates pending connection */
- return 1;
- }
-
- return ret;
-}
-
-static inline int php_tcp_sockop_accept(php_stream *stream, php_netstream_data_t *sock,
- php_stream_xport_param *xparam STREAMS_DC TSRMLS_DC)
-{
- int clisock;
-
- xparam->outputs.client = NULL;
-
- clisock = php_network_accept_incoming(sock->socket,
- xparam->want_textaddr ? &xparam->outputs.textaddr : NULL,
- xparam->want_textaddr ? &xparam->outputs.textaddrlen : NULL,
- xparam->want_addr ? &xparam->outputs.addr : NULL,
- xparam->want_addr ? &xparam->outputs.addrlen : NULL,
- xparam->inputs.timeout,
- xparam->want_errortext ? &xparam->outputs.error_text : NULL,
- &xparam->outputs.error_code
- TSRMLS_CC);
-
- if (clisock >= 0) {
- php_netstream_data_t *clisockdata;
-
- clisockdata = emalloc(sizeof(*clisockdata));
-
- if (clisockdata == NULL) {
- close(clisock);
- /* technically a fatal error */
- } else {
- memcpy(clisockdata, sock, sizeof(*clisockdata));
- clisockdata->socket = clisock;
-
- xparam->outputs.client = php_stream_alloc_rel(stream->ops, clisockdata, NULL, "r+");
- if (xparam->outputs.client) {
- /* TODO: addref ? */
- xparam->outputs.client->context = stream->context;
- }
- }
- }
-
- return xparam->outputs.client == NULL ? -1 : 0;
-}
-
-static int php_tcp_sockop_set_option(php_stream *stream, int option, int value, void *ptrparam TSRMLS_DC)
-{
- php_netstream_data_t *sock = (php_netstream_data_t*)stream->abstract;
- php_stream_xport_param *xparam;
-
- switch(option) {
- case PHP_STREAM_OPTION_XPORT_API:
- xparam = (php_stream_xport_param *)ptrparam;
-
- switch(xparam->op) {
- case STREAM_XPORT_OP_CONNECT:
- case STREAM_XPORT_OP_CONNECT_ASYNC:
- xparam->outputs.returncode = php_tcp_sockop_connect(stream, sock, xparam TSRMLS_CC);
- return PHP_STREAM_OPTION_RETURN_OK;
-
- case STREAM_XPORT_OP_BIND:
- xparam->outputs.returncode = php_tcp_sockop_bind(stream, sock, xparam TSRMLS_CC);
- return PHP_STREAM_OPTION_RETURN_OK;
-
-
- case STREAM_XPORT_OP_ACCEPT:
- xparam->outputs.returncode = php_tcp_sockop_accept(stream, sock, xparam STREAMS_CC TSRMLS_CC);
- return PHP_STREAM_OPTION_RETURN_OK;
- default:
- /* fall through */
- ;
- }
-
- /* fall through */
- default:
- return php_sockop_set_option(stream, option, value, ptrparam TSRMLS_CC);
- }
-}
-
-
-PHPAPI php_stream *php_stream_generic_socket_factory(const char *proto, long protolen,
- char *resourcename, long resourcenamelen,
- const char *persistent_id, int options, int flags,
- struct timeval *timeout,
- php_stream_context *context STREAMS_DC TSRMLS_DC)
-{
- php_stream *stream = NULL;
- php_netstream_data_t *sock;
- php_stream_ops *ops;
-
- /* which type of socket ? */
- if (strncmp(proto, "tcp", protolen) == 0) {
- ops = &php_stream_socket_ops;
- } else if (strncmp(proto, "udp", protolen) == 0) {
- ops = &php_stream_udp_socket_ops;
- }
-#ifdef AF_UNIX
- else if (strncmp(proto, "unix", protolen) == 0) {
- ops = &php_stream_unix_socket_ops;
- } else if (strncmp(proto, "udg", protolen) == 0) {
- ops = &php_stream_unixdg_socket_ops;
- }
-#endif
- else {
- /* should never happen */
- return NULL;
- }
-
- sock = pemalloc(sizeof(php_netstream_data_t), persistent_id ? 1 : 0);
- memset(sock, 0, sizeof(php_netstream_data_t));
-
- sock->is_blocked = 1;
- sock->timeout.tv_sec = FG(default_socket_timeout);
- sock->timeout.tv_usec = 0;
-
- /* we don't know the socket until we have determined if we are binding or
- * connecting */
- sock->socket = -1;
-
- stream = php_stream_alloc_rel(ops, sock, persistent_id, "r+");
-
- if (stream == NULL) {
- pefree(sock, persistent_id ? 1 : 0);
- return NULL;
- }
-
- if (flags == 0) {
- return stream;
- }
-
- return stream;
-}
-
-
-/*
- * 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/main/strlcat.c b/main/strlcat.c
deleted file mode 100644
index a60d8f330b..0000000000
--- a/main/strlcat.c
+++ /dev/null
@@ -1,106 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#include "php.h"
-
-#ifndef HAVE_STRLCAT
-
-/* $OpenBSD: strlcat.c,v 1.2 1999/06/17 16:28:58 millert Exp $ */
-
-/*
- * Copyright (c) 1998 Todd C. Miller <Todd.Miller@courtesan.com>
- * 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. The name of the author may not be used to endorse or promote products
- * derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED ``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.
- */
-
-#if defined(LIBC_SCCS) && !defined(lint)
-static char *rcsid = "$OpenBSD: strlcat.c,v 1.2 1999/06/17 16:28:58 millert Exp $";
-#endif /* LIBC_SCCS and not lint */
-
-#include <sys/types.h>
-#include <string.h>
-
-/*
- * Appends src to string dst of size siz (unlike strncat, siz is the
- * full size of dst, not space left). At most siz-1 characters
- * will be copied. Always NUL terminates (unless siz == 0).
- * Returns strlen(src); if retval >= siz, truncation occurred.
- */
-PHPAPI size_t php_strlcat(dst, src, siz)
- char *dst;
- const char *src;
- size_t siz;
-{
- register char *d = dst;
- register const char *s = src;
- register size_t n = siz;
- size_t dlen;
-
- /* Find the end of dst and adjust bytes left but don't go past end */
- while (*d != '\0' && n-- != 0)
- d++;
- dlen = d - dst;
- n = siz - dlen;
-
- if (n == 0)
- return(dlen + strlen(s));
- while (*s != '\0') {
- if (n != 1) {
- *d++ = *s;
- n--;
- }
- s++;
- }
- *d = '\0';
-
- return(dlen + (s - src)); /* count does not include NUL */
-}
-
-#endif /* !HAVE_STRLCAT */
-
-/*
- * 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/main/strlcpy.c b/main/strlcpy.c
deleted file mode 100644
index 11faa550f1..0000000000
--- a/main/strlcpy.c
+++ /dev/null
@@ -1,103 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#include "php.h"
-
-#ifndef HAVE_STRLCPY
-
-/* $OpenBSD: strlcpy.c,v 1.4 1999/05/01 18:56:41 millert Exp $ */
-
-/*
- * Copyright (c) 1998 Todd C. Miller <Todd.Miller@courtesan.com>
- * 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. The name of the author may not be used to endorse or promote products
- * derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED ``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.
- */
-
-#if defined(LIBC_SCCS) && !defined(lint)
-static char *rcsid = "$OpenBSD: strlcpy.c,v 1.4 1999/05/01 18:56:41 millert Exp $";
-#endif /* LIBC_SCCS and not lint */
-
-#include <sys/types.h>
-#include <string.h>
-
-/*
- * Copy src to string dst of size siz. At most siz-1 characters
- * will be copied. Always NUL terminates (unless siz == 0).
- * Returns strlen(src); if retval >= siz, truncation occurred.
- */
-PHPAPI size_t php_strlcpy(dst, src, siz)
- char *dst;
- const char *src;
- size_t siz;
-{
- register char *d = dst;
- register const char *s = src;
- register size_t n = siz;
-
- /* Copy as many bytes as will fit */
- if (n != 0 && --n != 0) {
- do {
- if ((*d++ = *s++) == 0)
- break;
- } while (--n != 0);
- }
-
- /* Not enough room in dst, add NUL and traverse rest of src */
- if (n == 0) {
- if (siz != 0)
- *d = '\0'; /* NUL-terminate dst */
- while (*s++)
- ;
- }
-
- return(s - src - 1); /* count does not include NUL */
-}
-
-#endif /* !HAVE_STRLCPY */
-
-/*
- * 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/main/win95nt.h b/main/win95nt.h
deleted file mode 100644
index 5750e4173f..0000000000
--- a/main/win95nt.h
+++ /dev/null
@@ -1,82 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-/* Defines and types for Windows 95/NT */
-#define HAVE_DECLARED_TIMEZONE
-#define WIN32_LEAN_AND_MEAN
-#include <io.h>
-#include <malloc.h>
-#include <direct.h>
-#include <stdlib.h>
-#include <stdio.h>
-#include <stdarg.h>
-#include <sys/types.h>
-typedef int uid_t;
-typedef int gid_t;
-typedef char * caddr_t;
-#define lstat(x, y) stat(x, y)
-#define _IFIFO 0010000 /* fifo */
-#define _IFBLK 0060000 /* block special */
-#define _IFLNK 0120000 /* symbolic link */
-#define S_IFIFO _IFIFO
-#define S_IFBLK _IFBLK
-#define S_IFLNK _IFLNK
-#ifndef S_ISREG
-#define S_ISREG(m) (((m) & S_IFMT) == S_IFREG)
-#endif
-#define chdir(path) SetCurrentDirectory(path)
-#define mkdir(a, b) _mkdir(a)
-#define rmdir(a) _rmdir(a)
-#define getpid _getpid
-#define php_sleep(t) Sleep(t*1000)
-#define getcwd(a, b) _getcwd(a, b)
-#define off_t _off_t
-typedef unsigned int uint;
-typedef unsigned long ulong;
-#if !NSAPI
-typedef long pid_t;
-#endif
-
-/* missing in vc5 math.h */
-#define M_PI 3.14159265358979323846
-#define M_TWOPI (M_PI * 2.0)
-#define M_PI_2 1.57079632679489661923
-#ifndef M_PI_4
-#define M_PI_4 0.78539816339744830962
-#endif
-
-#if !defined(PHP_DEBUG)
-#ifdef inline
-#undef inline
-#endif
-#define inline __inline
-#endif
-
-/* General Windows stuff */
-#define WINDOWS 1
-
-/* Prevent use of VC5 OpenFile function */
-#define NOOPENFILE
-
-/* sendmail is built-in */
-#ifdef PHP_PROG_SENDMAIL
-#undef PHP_PROG_SENDMAIL
-#define PHP_PROG_SENDMAIL "Built in mailer"
-#endif
diff --git a/makedist b/makedist
deleted file mode 100755
index 77634b2527..0000000000
--- a/makedist
+++ /dev/null
@@ -1,142 +0,0 @@
-#!/bin/sh
-#
-# Distribution generator for CVS based packages.
-# To work, this script needs a consistent tagging of all releases.
-# Each release of a package should have a tag of the form
-#
-# <package>_<version>
-#
-# where <package> is the package name and the CVS module
-# and <version> s the version number with underscores instead of dots.
-#
-# For example: cvs tag php_5_0_1
-#
-# The distribution ends up in a .tar.gz file that contains the distribution
-# in a directory called <package>-<version>. The distribution contains all
-# directories from the CVS module except the one called "nodist", but only
-# the files INSTALL, README and config* are included.
-#
-# Since you can no longer set the CVS password via an env variable, you
-# need to have previously done a cvs login for the server and user id
-# this script uses so it will have an entry in your ~/.cvspasswd file.
-#
-# Usage: makedist <package> <version>
-#
-# Written by Stig Bakken <ssb@guardian.no> 1997-05-28.
-#
-# $Id$
-#
-
-if test "$#" != "2"; then
- echo "Usage: makedist <package> <version>" >&2
- exit 1
-fi
-
-PKG=$1 ; shift
-VER=$1 ; shift
-
-old_IFS="$IFS"
-IFS=.
-eval set `bison --version| grep 'GNU Bison' | cut -d ' ' -f 4 | sed -e 's/\./ /'`
-if test "${1}" = "1" -a "${2}" -lt "28"; then
- echo "You will need bison 1.28 if you want to regenerate the Zend parser (found ${1}.${2}).)"
- exit 10
-fi
-IFS="$old_IFS"
-
-PHPROOT=:pserver:cvsread@cvs.php.net:/repository
-PHPMOD=php-src
-LT_TARGETS='ltconfig ltmain.sh config.guess config.sub'
-
-if echo '\c' | grep -s c >/dev/null 2>&1
-then
- ECHO_N="echo -n"
- ECHO_C=""
-else
- ECHO_N="echo"
- ECHO_C='\c'
-fi
-
-MY_OLDPWD=`pwd`
-
-# the destination .tar.gz file
-ARCHIVE=$MY_OLDPWD/$PKG-$VER.tar
-
-# temporary directory used to check out files from CVS
-DIR=$PKG-$VER
-DIRPATH=$MY_OLDPWD/$DIR
-
-if test -d "$DIRPATH"; then
- echo "The directory $DIR"
- echo "already exists, rename or remove it and run makedist again."
- exit 1
-fi
-
-# version part of the CVS release tag
-CVSVER=`echo $VER | sed -e 's/[\.\-]/_/g'`
-
-# CVS release tag
-if test "$VER" != "HEAD"; then
- CVSTAG=${PKG}_$CVSVER
-else
- CVSTAG=HEAD
-fi
-
-if test ! -d $DIRPATH; then
- mkdir -p $DIRPATH || exit 2
-fi
-
-# Export PHP
-$ECHO_N "makedist: exporting tag '$CVSTAG' from '$PHPMOD'...$ECHO_C"
-cvs -z 9 -d $PHPROOT export -d $DIR -r $CVSTAG $PHPMOD || exit 4
-echo ""
-
-# remove CVS stuff...
-cd $DIR || exit 5
-find . \( \( -name CVS -type d \) -o -name .cvsignore \) -exec rm -rf {} \;
-
-# The full ChangeLog is available separately from lxr.php.net
-rm -f ChangeLog*
-
-# hide away our own versions of libtool-generated files
-for i in $LT_TARGETS; do
- if test -f "$i"; then
- mv $i $i.bak
- cp $i.bak $i
- fi
-done
-
-# generate some files so people don't need bison, flex and autoconf
-# to install
-set -x
-./buildconf --copy --force
-
-# remove buildmk.stamp. Otherwise, buildcheck.sh might not be run,
-# when a user runs buildconf in the distribution.
-rm -f buildmk.stamp
-
-./genfiles
-
-# now restore our versions of libtool-generated files
-for i in $LT_TARGETS; do
- test -f "$i" && mv $i.bak $i
-done
-
-cd $MY_OLDPWD
-$ECHO_N "makedist: making gzipped tar archive...$ECHO_C"
-rm -f $ARCHIVE.gz
-tar cf $ARCHIVE $PKG-$VER || exit 8
-gzip -9 $ARCHIVE || exit 9
-echo ""
-
-$ECHO_N "makedist: making bz2zipped tar archive...$ECHO_C"
-rm -f $ARCHIVE.bz2
-tar cf $ARCHIVE $PKG-$VER || exit 10
-bzip2 -9 $ARCHIVE || exit 11
-echo ""
-
-$ECHO_N "makedist: cleaning up...$ECHO_C"
-rm -rf $DIRPATH || exit 12
-echo ""
-
-exit 0
diff --git a/makerpm b/makerpm
deleted file mode 100644
index 07bd372df4..0000000000
--- a/makerpm
+++ /dev/null
@@ -1,203 +0,0 @@
-#! /bin/sh
-
-# Based slightly on an original by John H Terpstra but not much left of his.
-# S Liddicott 1999 sam@campbellsci.co.uk
-
-PREFIX="php"
-TARDIR="`basename \`pwd\``"
-RELEASE=${1:-1}
-VERSION=${2:-`echo $TARDIR | sed "s/$PREFIX-//g"`}
-
-if [ "$VERSION" = "" ]
-then cat <<"EOH"
-$PREFIX source needs to be installed in a folder that contains the version
-number, e.g. ${PREFIX}5 or ${PREFIX}5b2
-EOH
-fi
-
-echo "Usage:"
-echo "$0 <release> <version>"
-echo
-echo "e.g.:"
-echo "$0 2"
-echo -n "Building RPM version $VERSION, release: $RELEASE "
-sleep 1 ; echo -n . ; sleep 1 ; echo -n . ; sleep 1 ; echo -n .
-echo
-
-TAR=php-$VERSION.tar.gz
-SPEC=php-$VERSION.spec
-PREQUIRES=`rpm -q --provides apache|grep "\(webserver\|httpd\)"`
-if [ "$PREQUIRES" = "" ]
-then PREQUIRES="webserver"
-fi
-
-# write out the .spec file
-sed -e "s/PVERSION/$VERSION/g" \
- -e "s/PRELEASE/$RELEASE/g" \
- -e "s/TARDIR/$TARDIR/g" \
- -e "s/PREQUIRES/$PREQUIRES/g" \
- > $SPEC <<'EOF'
-Summary: PHP 5 - A powerful scripting language
-Name: php5
-Version: PVERSION
-Release: PRELEASE
-Group: Networking/Daemons
-Source0: http://www.php.net/distributions/php-%{PACKAGE_VERSION}.tar.gz
-Copyright: PHP License
-BuildRoot: %{_tmppath}/%{name}-%{version}-buildroot
-Requires: PREQUIRES
-
-%description
-PHP 5 is a powerful apache module that adds scripting and database connection
-capabilities to the apache server. This version includes the "php_cgi" binary
-for suExec and stand alone php scripts too.
-
-%prep
-%setup -q -n TARDIR
-#mkdir manual; cd manual && tar xzf $RPM_SOURCE_DIR/php3-manual.tar.gz
-./buildconf
-
-%build
-# first the standalone (why can't you build both at once?)
-# need to run this under sh or it breaks
-
-sh ./configure --prefix=/usr \
- --with-config-file-path=%{_sysconfdir} \
- --disable-cli \
- --without-pear \
- --enable-force-cgi-redirect \
- --enable-safe-mode \
- --with-exec-dir=/usr/bin \
- --with-mysql \
- --with-zlib \
- --enable-xml \
- --enable-wddx \
- --with-gd \
- --enable-shared \
-
-make
-mv sapi/cgi/php php.keepme
-
-# then the apache module
-test -f config.cache && rm -f config.cache
-sh ./configure --prefix=/usr \
- --with-apxs=/usr/sbin/apxs \
- --enable-cli \
- --with-config-file-path=%{_sysconfdir} \
- --enable-safe-mode \
- --with-exec-dir=/usr/bin \
- --with-mysql \
- --with-zlib \
- --enable-xml \
- --enable-wddx \
- --with-gd \
- --enable-shared \
-
-# --with-pgsql=shared \
-
-make clean
-make
-# restore cgi version
-mv php.keepme sapi/cgi/php
-
-%install
-rm -rf $RPM_BUILD_ROOT
-mkdir -p $RPM_BUILD_ROOT%{_libdir}/apache
-install -m 0755 .libs/libphp5.so $RPM_BUILD_ROOT%{_libdir}/apache
-mkdir -p $RPM_BUILD_ROOT%{_bindir}
-install -m 0755 sapi/cli/php $RPM_BUILD_ROOT%{_bindir}
-install -m 0755 sapi/cgi/php $RPM_BUILD_ROOT%{_bindir}/php_cgi
-mkdir -p $RPM_BUILD_ROOT%{_mandir}/man1
-install -m 0755 sapi/cli/php.1 $RPM_BUILD_ROOT%{_mandir}/man1
-mkdir -p $RPM_BUILD_ROOT%{_sysconfdir}
-install -m 0755 php.ini-recommended $RPM_BUILD_ROOT%{_sysconfdir}/php.ini
-mkdir -p $RPM_BUILD_ROOT%{_libdir}/php/extensions
-install -m 0755 modules/*.so $RPM_BUILD_ROOT%{_libdir}/php/extensions
-
-%clean
-rm -rf $RPM_BUILD_ROOT
-
-%changelog
-* Thu Nov 27 2003 Marcus Boerger <helly@php.net>
-- Fix requirements for older systems.
-- Fix rpm build directory for the major distributions.
-- Fix config dir.
-- Rename package to php.
-- Add gd extension.
-- Support building of shared extensions.
-- Build CLI only once.
-
-* Thu Oct 31 2003 Marcus Boerger <helly@php.net>
-- Update version to 5.
-- Remove unsure external requirements.
-- Remove non existing directories
-- Fix targets.
-- Install both CLI and CGI.
-- Install manpage.
-- Install ini.
-
-* Mon Mar 04 2002 Arjen Lentz <agl@bitbike.com>
-- Fix path and remove --with-imap due to conflicts with kerberos.
-
-* Fri Jun 29 2001 Jani Taskinen <sniper@iki.fi>
-- Removed some useless configure options. Made the tar names correct.
-
-* Sun Apr 30 2000 Joey Smith <joey@samaritan.com>
-- Small fix: Description still referred to package as PHP3.
-
-* Wed Jul 21 1999 Sam Liddicott <sam@campbellsci.co.uk>
-- added php4b1 and modified cgi building rules so it doesn't break module
-
-* Wed Mar 17 1999 Sam Liddicott <sam@campbellsci.co.uk>
-- Stuffed in 3.0.7 source tar and added "php" as a build destination
-
-* Mon Oct 12 1998 Cristian Gafton <gafton@redhat.com>
-- rebuild for apache 1.3.3
-
-* Thu Oct 08 1998 Preston Brown <pbrown@redhat.com>
-- updated to 3.0.5, fixes nasty bugs in 3.0.4.
-
-* Sun Sep 27 1998 Cristian Gafton <gafton@redhat.com>
-- updated to 3.0.4 and recompiled for apache 1.3.2
-
-* Thu Sep 03 1998 Preston Brown <pbrown@redhat.com>
-- improvements; builds with apache-devel package installed.
-
-* Tue Sep 01 1998 Preston Brown <pbrown@redhat.com>
-- Made initial cut for PHP3.
-
-%files
-%defattr(-,root,root)
-%{_libdir}/apache/libphp5.so
-%{_bindir}/php
-%{_bindir}/php_cgi
-%{_mandir}/man1/php.1*
-%{_sysconfdir}/php.ini
-%{_libdir}/php/extensions/*.so
-
-%doc TODO CODING_STANDARDS CREDITS ChangeLog LICENSE NEWS
-EOF
-
-RPMBASE=/usr/src/redhat
-for i in /usr/src/redhat /usr/src/packages /usr/src/RPM; do
- if test -d $i; then
- RPMBASE=$i
- break
- fi
-done
-
-RPMDIR=${RPMBASE}/RPMS
-SPECDIR=${RPMBASE}/SPECS
-SRCDIR=${RPMBASE}/SOURCES
-
-(
-make clean
-find . -name config.cache -exec rm -f '{}' \;
-cd ..
-tar czvf ${SRCDIR}/${TAR} $TARDIR )
-
-cp -a $SPEC $SPECDIR/${SPEC}
-#cp -a *.patch $SRCDIR
-cd $SRCDIR
-cd $SPECDIR
-rpm -ba -v ${SPEC}
diff --git a/netware/ApacheCore.imp b/netware/ApacheCore.imp
deleted file mode 100644
index 3f77837970..0000000000
--- a/netware/ApacheCore.imp
+++ /dev/null
@@ -1,365 +0,0 @@
- ap_MD5Final,
- ap_MD5Init,
- ap_MD5Update,
- ap_acquire_mutex,
- ap_add_cgi_vars,
- ap_add_common_vars,
- ap_add_loaded_module,
- ap_add_module,
- ap_add_named_module,
- ap_add_per_dir_conf,
- ap_add_per_url_conf,
- ap_add_version_component,
- ap_allow_options,
- ap_allow_overrides,
- ap_append_arrays,
- ap_array_cat,
- ap_auth_name,
- ap_auth_type,
- ap_basic_http_header,
- ap_bclose,
- ap_bcreate,
- ap_bfilbuf,
- ap_bfileno,
- ap_bflsbuf,
- ap_bflush,
- ap_bgetopt,
- ap_bgets,
- ap_bhalfduplex,
- ap_block_alarms,
- ap_blookc,
- ap_bnonblock,
- ap_bonerror,
- ap_bpushfd,
- ap_bputs,
- ap_bread,
- ap_bsetflag,
- ap_bsetopt,
- ap_bskiplf,
- ap_bspawn_child,
- ap_bwrite,
- ap_bytes_in_free_blocks,
- ap_bytes_in_pool,
- ap_call_exec,
- ap_can_exec,
- ap_cfg_closefile,
- ap_cfg_getc,
- ap_cfg_getline,
- ap_chdir_file,
- ap_check_alarm,
- ap_check_cmd_context,
- ap_checkmask,
- ap_cleanup_for_exec,
- ap_clear_module_list,
- ap_clear_pool,
- ap_clear_table,
- ap_close_piped_log,
- ap_construct_server,
- ap_construct_url,
- ap_content_type_tolower,
- ap_copy_array,
- ap_copy_array_hdr,
- ap_copy_table,
- ap_count_dirs,
- ap_cpystrn,
- ap_create_environment,
- ap_create_mutex,
- ap_create_per_dir_config,
- ap_custom_response,
- ap_default_port_for_request,
- ap_default_port_for_scheme,
- ap_default_type,
- ap_destroy_mutex,
- ap_destroy_pool,
- ap_destroy_sub_req,
- ap_die,
- ap_discard_request_body,
- ap_document_root,
- ap_each_byterange,
- ap_error_log2stderr,
- ap_escape_html,
- ap_escape_path_segment,
- ap_escape_quotes,
- ap_escape_shell_cmd,
- ap_exists_scoreboard_image,
- ap_finalize_request_protocol,
- ap_find_command,
- ap_find_command_in_modules,
- ap_find_last_token,
- ap_find_linked_module,
- ap_find_module_name,
- ap_find_path_info,
- ap_find_token,
- ap_get_basic_auth_pw,
- ap_get_client_block,
- ap_get_gmtoff,
- ap_get_limit_req_body,
- ap_get_remote_host,
- ap_get_remote_logname,
- ap_get_server_built,
- ap_get_server_name,
- ap_get_server_port,
- ap_get_server_version,
- ap_get_time,
- ap_get_token,
- ap_getparents,
- ap_getword,
- ap_getword_conf,
- ap_getword_conf_nc,
- ap_getword_nc,
- ap_getword_nulls,
- ap_getword_nulls_nc,
- ap_getword_white,
- ap_getword_white_nc,
- ap_gm_timestr_822,
- ap_gname2id,
- ap_handle_command,
- ap_hard_timeout,
- ap_ht_time,
- ap_ind,
- ap_index_of_response,
- ap_init_virtual_host,
- ap_internal_redirect,
- ap_internal_redirect_handler,
- ap_is_directory,
- ap_is_fnmatch,
- ap_is_initial_req,
- ap_is_matchexp,
- ap_is_url,
- ap_kill_cleanup,
- ap_kill_cleanups_for_fd,
- ap_kill_cleanups_for_socket,
- ap_kill_timeout,
- ap_log_assert,
- ap_log_error_old,
- ap_log_reason,
- ap_log_unixerr,
- ap_make_array,
- ap_make_dirstr,
- ap_make_dirstr_parent,
- ap_make_dirstr_prefix,
- ap_make_full_path,
- ap_make_sub_pool,
- ap_make_table,
- ap_matches_request_vhost,
- ap_md5,
- ap_md5_binary,
- ap_md5contextTo64,
- ap_md5digest,
- ap_meets_conditions,
- ap_no2slash,
- ap_note_auth_failure,
- ap_note_basic_auth_failure,
- ap_note_cleanups_for_fd,
- ap_note_cleanups_for_file,
- ap_note_cleanups_for_socket,
- ap_note_digest_auth_failure,
- ap_note_subprocess,
- ap_open_mutex,
- ap_open_piped_log,
- ap_os_escape_path,
- ap_overlap_tables,
- ap_overlay_tables,
- ap_palloc,
- ap_parseHTTPdate,
- ap_parse_hostinfo_components,
- ap_parse_uri,
- ap_parse_uri_components,
- ap_pcalloc,
- ap_pcfg_open_custom,
- ap_pcfg_openfile,
- ap_pclosedir,
- ap_pclosef,
- ap_pclosesocket,
- ap_pduphostent,
- ap_pfclose,
- ap_pfdopen,
- ap_pfopen,
- ap_pgethostbyname,
- ap_popendir,
- ap_popenf,
- ap_pregcomp,
- ap_pregfree,
- ap_pregsub,
- ap_psignature,
- ap_psocket,
- ap_pstrdup,
- ap_pstrndup,
- ap_push_array,
- ap_pvsprintf,
- ap_rationalize_mtime,
- ap_register_cleanup,
- ap_release_mutex,
- ap_remove_loaded_module,
- ap_remove_module,
- ap_requires,
- ap_reset_timeout,
- ap_rflush,
- ap_rind,
- ap_rputc,
- ap_rputs,
- ap_run_cleanup,
- ap_run_sub_req,
- ap_rwrite,
- ap_satisfies,
- ap_scan_script_header_err,
- ap_scan_script_header_err_buff,
- ap_scan_script_header_err_core,
- ap_send_fb,
- ap_send_fb_length,
- ap_send_fd,
- ap_send_fd_length,
- ap_send_http_header,
- ap_send_http_trace,
- ap_send_mmap,
- ap_send_size,
- ap_server_root_relative,
- ap_set_byterange,
- ap_set_content_length,
- ap_set_etag,
- ap_set_keepalive,
- ap_set_last_modified,
- ap_setup_client_block,
- ap_should_client_block,
- ap_soft_timeout,
- ap_some_auth_required,
- ap_spawn_child,
- ap_srm_command_loop,
- ap_str_tolower,
- ap_strcasecmp_match,
- ap_strcmp_match,
- ap_sub_req_lookup_file,
- ap_sub_req_lookup_uri,
- ap_sync_scoreboard_image,
- ap_table_add,
- ap_table_addn,
- ap_table_get,
- ap_table_merge,
- ap_table_mergen,
- ap_table_set,
- ap_table_setn,
- ap_table_unset,
- ap_tm2sec,
- ap_uname2id,
- ap_unblock_alarms,
- ap_unescape_url,
- ap_unparse_uri_components,
- ap_update_mtime,
- ap_uudecode,
- ap_uuencode,
- ap_vbprintf,
- ap_vformatter,
- ap_vsnprintf,
- regcomp,
- regexec,
- regfree,
- access_module,
- alias_module,
- ap_bprintf,
- ap_bvputs,
- ap_day_snames,
- ap_extended_status,
- ap_limit_section,
- ap_loaded_modules,
- ap_log_error,
- ap_log_printf,
- ap_log_rerror,
- ap_month_snames,
- ap_null_cleanup,
- ap_psprintf,
- ap_pstrcat,
- ap_restart_time,
- ap_rprintf,
- ap_rvputs,
- ap_scoreboard_image,
- ap_send_header_field,
- ap_server_argv0,
- ap_server_root,
- ap_set_file_slot,
- ap_set_flag_slot,
- ap_set_string_slot,
- ap_set_string_slot_lower,
- ap_snprintf,
- ap_suexec_enabled,
- ap_table_do,
- apache_main,
- asis_module,
- auth_module,
- autoindex_module,
- config_log_module,
- core_module,
- dir_module,
- env_module,
- imap_module,
- includes_module,
- mime_module,
- negotiation_module,
- setenvif_module,
- so_module,
- top_module,
- ap_fnmatch,
- ap_method_number_of,
- ap_exists_config_define,
- ap_single_module_configure,
- ap_make_etag,
- ap_array_pstrcat,
- ap_find_list_item,
- ap_MD5Encode,
- ap_validate_password,
- ap_size_list_item,
- ap_get_list_item,
- ap_scoreboard_fname,
- ap_pid_fname,
- ap_excess_requests_per_child,
- ap_threads_per_child,
- ap_max_requests_per_child,
- ap_daemons_to_start,
- ap_daemons_min_free,
- ap_daemons_max_free,
- ap_daemons_limit,
- ap_user_name,
- ap_user_id,
- ap_group_id,
- ap_standalone,
- ap_server_confname,
- ap_sub_req_method_uri,
- ap_regerror,
- ap_regexec,
- ap_field_noparam,
- ap_pbase64decode,
- ap_pbase64encode,
- ap_base64encode,
- ap_base64encode_binary,
- ap_base64encode_len,
- ap_base64decode,
- ap_base64decode_binary,
- ap_base64decode_len,
- ap_SHA1Init,
- ap_SHA1Update_binary,
- ap_SHA1Update,
- ap_SHA1Final,
- ap_sha1_base64,
- ap_my_generation,
- ap_get_virthost_addr,
- ap_listeners,
- ap_listenbacklog,
- clean_parent_exit,
- init_tsd,
- ap_set_config_vectors,
- ap_strcasestr,
- ap_to64,
- ap_vrprintf,
- regerror,
- ap_add_file_conf,
- ap_configtestonly,
- ap_is_rdirectory,
- ap_remove_spaces,
- ap_scan_script_header_err_strs,
- ap_start_shutdown,
- ap_start_restart,
- ap_stripprefix,
- ap_send_error_response,
- ap_os_canonical_filename,
- ap_os_http_method,
- os_readdir,
- os_opendir
diff --git a/netware/BisonExtStandard.bat b/netware/BisonExtStandard.bat
deleted file mode 100755
index 1a2e06950a..0000000000
--- a/netware/BisonExtStandard.bat
+++ /dev/null
@@ -1,3 +0,0 @@
-@echo off
-
-bison --output=ext\standard\parsedate.c -v -d -p phplib ext\standard\parsedate.y
diff --git a/netware/BisonFlexZend.bat b/netware/BisonFlexZend.bat
deleted file mode 100755
index 5ed6aa3a18..0000000000
--- a/netware/BisonFlexZend.bat
+++ /dev/null
@@ -1,8 +0,0 @@
-@echo off
-
-bison --output=zend_ini_parser.c -v -d -p ini_ zend_ini_parser.y
-flex -B -i -Sflex.skl -Pini_ -ozend_ini_scanner.c zend_ini_scanner.l
-REM flex -i -Pini_ -ozend_ini_scanner.c zend_ini_scanner.l
-bison --output=zend_language_parser.c -v -d -p zend zend_language_parser.y
-flex -B -i -Sflex.skl -Pzend -ozend_language_scanner.c zend_language_scanner.l
-REM flex -i -Pzend -ozend_language_scanner.c zend_language_scanner.l
diff --git a/netware/ZendEngine2.mak b/netware/ZendEngine2.mak
deleted file mode 100644
index effd309835..0000000000
--- a/netware/ZendEngine2.mak
+++ /dev/null
@@ -1,160 +0,0 @@
-# Temporarily here -- later may go into some batch file
-# which will set this as an environment variable
-PROJECT_ROOT = ..
-
-# Module details
-MODULE_NAME = ZEND
-
-#include the common settings
-include $(PROJECT_ROOT)/netware/common.mif
-
-# Extensions of all input and output files
-.SUFFIXES:
-.SUFFIXES: .nlm .lib .obj .cpp .c .msg .mlc .mdb .xdc .d
-
-C_SRC = zend.c \
- zend_alloc.c \
- zend_API.c \
- zend_builtin_functions.c \
- zend_compile.c \
- zend_constants.c \
- zend_dynamic_array.c \
- zend_execute.c \
- zend_execute_API.c \
- zend_extensions.c \
- zend_hash.c \
- zend_highlight.c \
- zend_indent.c \
- zend_ini.c \
- zend_ini_parser.c \
- zend_ini_scanner.c \
- zend_language_parser.c \
- zend_language_scanner.c \
- zend_list.c \
- zend_llist.c \
- zend_multibyte.c \
- zend_object_handlers.c \
- zend_objects.c \
- zend_opcode.c \
- zend_operators.c \
- zend_ptr_stack.c \
- zend_qsort.c \
- zend_sprintf.c \
- zend_stack.c \
- zend_static_allocator.c \
- zend_ts_hash.c \
- zend_variables.c
-
-
-# Destination directories and files
-OBJ_DIR = $(BUILD)
-FINAL_DIR = $(BUILD)
-OBJECTS = $(addprefix $(OBJ_DIR)/,$(CPP_SRC:.cpp=.obj) $(C_SRC:.c=.obj))
-DEPDS = $(addprefix $(OBJ_DIR)/,$(CPP_SRC:.cpp=.d) $(C_SRC:.c=.d))
-
-# Binary file
-ifndef BINARY
- BINARY=$(FINAL_DIR)\$(MODULE_NAME).lib
-endif
-
-
-# Compile flags
-C_FLAGS = -c -maxerrors 25 -msgstyle std
-C_FLAGS += -wchar_t on -bool on
-C_FLAGS += -processor Pentium
-C_FLAGS += -nostdinc
-C_FLAGS += -relax_pointers # To remove type-casting errors
-C_FLAGS += -D__C9X_CMATH_INLINES_DEFINED
-C_FLAGS += -DNETWARE -DZTS
-C_FLAGS += -DNEW_LIBC
-C_FLAGS += -DCLIB_STAT_PATCH
-C_FLAGS += -DTHREAD_SWITCH
-
-# These are required to use dlclose so that the PHP extensions are automatically unloaded
-# when apache is unloaded
-C_FLAGS += -DHAVE_DLFCN_H -DHAVE_LIBDL
-
-C_FLAGS += -I. -I- -I../netware -I$(SDK_DIR)/include # ../netware added for special SYS/STAT.H
-C_FLAGS += -I$(MWCIncludes)
-
-
-# Link flags
-LD_FLAGS = -type library
-LD_FLAGS += -o $(BINARY)
-
-
-# Extra stuff based on debug / release builds
-ifeq '$(BUILD)' 'debug'
- C_FLAGS += -DZEND_DEBUG=1
- C_FLAGS += -inline smart -sym on -sym codeview4 -sym internal -opt off -opt intrinsics
- LD_FLAGS += -sym codeview4 -sym internal
- export MWLibraryFiles=$(SDK_DIR)/imports/libcpre.o;mwcrtld.lib
-else
- C_FLAGS += -opt speed -inline on -inline auto -sym off
- C_FLAGS += -DZEND_DEBUG=0
- LD_FLAGS += -sym off
- export MWLibraryFiles=$(SDK_DIR)/imports/libcpre.o;mwcrtl.lib
-endif
-
-
-# Virtual paths
-vpath %.cpp .
-vpath %.c .
-vpath %.obj $(OBJ_DIR)
-
-
-all: prebuild project
-
-.PHONY: all
-
-prebuild:
- @if not exist $(OBJ_DIR) md $(OBJ_DIR)
-
-project: $(BINARY) $(MESSAGE)
- @echo Build complete.
-
-
-$(OBJ_DIR)/%.d: %.c
- @echo Building Dependencies for $(<F)
- @$(CC) -M $< $(C_FLAGS) -o $@
-
-$(OBJ_DIR)/%.obj: %.c
- @echo Compiling $?...
- @$(CC) $< $(C_FLAGS) -o $@
-
-
-$(BINARY): $(OBJECTS)
- @echo Linking $@...
- @$(LINK) $(LD_FLAGS) $(OBJECTS)
-
-
-.PHONY: clean
-clean: cleansrc cleanobj cleanbin
-
-.PHONY: cleansrc
-cleansrc:
- @echo Deleting all generated source files...
- -@del "zend_ini_parser.c"
- -@del "zend_ini_parser.h"
- -@del "zend_ini_scanner.c"
- -@del "zend_language_parser.c"
- -@del "zend_language_parser.h"
- -@del "zend_language_scanner.c"
- -@del "zend_ini_parser.output"
- -@del "zend_language_parser.output"
-
-
-.PHONY: cleand
-cleand:
- @echo Deleting all dependency files...
- -@del "$(OBJ_DIR)\*.d"
-
-.PHONY: cleanobj
-cleanobj:
- @echo Deleting all object files...
- -@del "$(OBJ_DIR)\*.obj"
-
-.PHONY: cleanbin
-cleanbin:
- @echo Deleting binary files...
- -@del "$(FINAL_DIR)\$(MODULE_NAME).lib"
diff --git a/netware/build.bat b/netware/build.bat
deleted file mode 100755
index 5c8e310a53..0000000000
--- a/netware/build.bat
+++ /dev/null
@@ -1,21 +0,0 @@
-@echo off
-
-cd ..\%1
-
-if "%2" == "clean" make -f ..\netware\%1.mak clean
-if "%2" == "/?" goto USAGE
-
-if "%1" == "zend" call ..\netware\BisonFlexZend
-if "%1" == "ZendEngine2" call ..\netware\BisonFlexZend
-
-REM Build command
-make -f ..\netware\%1.mak
-goto EXIT
-
-:USAGE
- @echo on
- @echo Usage: build moduleName [clean]
- @echo clean - delete all object files and binaries before building
-
-:EXIT
-cd ..\netware \ No newline at end of file
diff --git a/netware/buildext.bat b/netware/buildext.bat
deleted file mode 100755
index 6cea5530cc..0000000000
--- a/netware/buildext.bat
+++ /dev/null
@@ -1,18 +0,0 @@
-@echo off
-
-cd ..\ext\%1
-
-if "%2" == "clean" make -f %1.mak clean
-if "%2" == "/?" goto USAGE
-
-REM Build command
-make -f %1.mak
-goto EXIT
-
-:USAGE
- @echo on
- @echo Usage: buildext extension_name [clean]
- @echo clean - delete all object files and binaries before building
-
-:EXIT
-cd ..\..\netware
diff --git a/netware/buildlib.bat b/netware/buildlib.bat
deleted file mode 100755
index 5abd71229d..0000000000
--- a/netware/buildlib.bat
+++ /dev/null
@@ -1,20 +0,0 @@
-@echo off
-
-cd ..
-
-if "%1" == "clean" make -f netware\phplib.mak clean
-if "%1" == "/?" goto USAGE
-
-call netware\BisonExtStandard
-
-REM Build command
-make -f netware\phplib.mak
-goto EXIT
-
-:USAGE
- @echo on
- @echo Usage: buildlib [clean]
- @echo clean - delete all object files and binaries before building
-
-:EXIT
-cd netware \ No newline at end of file
diff --git a/netware/buildsapi.bat b/netware/buildsapi.bat
deleted file mode 100755
index ddf299af23..0000000000
--- a/netware/buildsapi.bat
+++ /dev/null
@@ -1,18 +0,0 @@
-@echo off
-
-cd ..\sapi\%1
-
-if "%2" == "clean" make -f ..\..\netware\php5%1.mak clean
-if "%2" == "/?" goto USAGE
-
-REM Build command
-make -f ..\..\netware\php5%1.mak
-goto EXIT
-
-:USAGE
- @echo on
- @echo Usage: buildsapi SAPI_Module_Name [clean]
- @echo clean - delete all object files and binaries before building
-
-:EXIT
-cd ..\..\netware
diff --git a/netware/common.mif b/netware/common.mif
deleted file mode 100644
index a2250e3b8c..0000000000
--- a/netware/common.mif
+++ /dev/null
@@ -1,90 +0,0 @@
-#
-# Common include file for PHP build.
-# Include this in every make file.
-#
-
-
-# Set following directories based on your setting
-
-# Path to CodeWarrior installation
-CW_PATH = P:/APPS/SCRIPT/SW/CW71-4
-
-# LibC directory
-ifndef SDK_DIR
-SDK_DIR = P:/APPS/script/sw/libc
-endif
-
-# MPK related directory
-ifndef MPK_DIR
-MPK_DIR = p:/apps/script/mpk
-XDCTOOL = mpkxdc
-MPKTOOL = $(MPK_DIR)/$(XDCTOOL)
-XDCFLAGS = -n
-endif
-
-# Winsock stuff
-WINSOCK_DIR = P:/APPS/script/sw/Winsock2
-
-# LDAP stuff
-LDAP_DIR = P:/APPS/script/sw/cldapsdk
-
-# XML-EXPAT stuff
-EXPAT_DIR = P:/APPS/script/sw/expat
-
-
-# Web Server defaults to Apache 1.3.x
-ifndef APACHE_VER
-APACHE_VER = 1.3
-endif
-
-# Apache directory
-ifeq '$(APACHE_VER)' '1.3'
-APACHE_DIR = P:/APPS/script/sw/Apache1.3.xSource
-else
-APACHE_DIR = P:/APPS/script/sw/Apache2Source
-endif
-
-
-# CW includes, libraries and tools
-export MWCIncludes=$(CW_PATH)/include
-export MWLibraries=$(CW_PATH)/lib
-
-# Compiler and linker tools
-CC = mwccnlm
-LINK = mwldnlm
-
-# Build type defaults to 'release'
-ifndef BUILD
-BUILD = release
-endif
-
-OBJ_DIR = $(BUILD)
-FINAL_DIR = $(BUILD)
-MAP_FILE = $(FINAL_DIR)\$(MODULE_NAME).map
-
-ifndef STACK_SIZE
-STACK_SIZE=65536
-endif
-
-ifndef COPYRIGHT
-COPYRIGHT = "Copyright (C) 2002-2003 Novell\, Inc. All Rights Reserved."
-endif
-
-
-# Compile flags
-ifeq '$(APACHE_VER)' '1.3'
-C_FLAGS = -align 1
-C_FLAGS += -DCLIB_STAT_PATCH
-else
-C_FLAGS = -align 4
-endif
-
-# Link flags
-LD_FLAGS = -stacksize $(STACK_SIZE) -type generic -zerobss
-LD_FLAGS += -o $(BINARY) -map $(MAP_FILE) -nlmversion $(VMAJ),$(VMIN),$(VREV)
-
-# Module details
-LD_FLAGS += -desc $(MODULE_DESC)
-LD_FLAGS += -copy $(COPYRIGHT)
-LD_FLAGS += -screenname Default
-LD_FLAGS += -threadname $(MODULE_NAME)__p
diff --git a/netware/geterrnoptr.c b/netware/geterrnoptr.c
deleted file mode 100644
index 065d33e84d..0000000000
--- a/netware/geterrnoptr.c
+++ /dev/null
@@ -1,9 +0,0 @@
-/* Moved into a separate source file -- can be eliminated later */
-
-#include <errno.h>
-
-int *__get_errno_ptr(void)
-{
- return ___errno();
-}
-
diff --git a/netware/grp.h b/netware/grp.h
deleted file mode 100644
index e7a99327e2..0000000000
--- a/netware/grp.h
+++ /dev/null
@@ -1,31 +0,0 @@
-/* pwd.h - Try to approximate UN*X's getuser...() functions under MS-DOS.
- Copyright (C) 1990 by Thorsten Ohl, td12@ddagsi3.bitnet
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 1, or (at your option)
- any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-
- $Header$
- */
-
-/* This 'implementation' is conjectured from the use of this functions in
- the RCS and BASH distributions. Of course these functions don't do too
- much useful things under MS-DOS, but using them avoids many "#ifdef
- MSDOS" in ported UN*X code ... */
-
-struct group {
- char *gr_name; /* group name */
- char *gr_passwd; /* group password */
- int gr_gid; /* group id */
- char **gr_mem; /* group members */
-};
diff --git a/netware/libpq-fe.h b/netware/libpq-fe.h
deleted file mode 100644
index 879a447091..0000000000
--- a/netware/libpq-fe.h
+++ /dev/null
@@ -1,378 +0,0 @@
-/*-------------------------------------------------------------------------
- *
- * libpq-fe.h
- * This file contains definitions for structures and
- * externs for functions used by frontend postgres applications.
- *
- * Portions Copyright (c) 1996-2001, PostgreSQL Global Development Group
- * Portions Copyright (c) 1994, Regents of the University of California
- *
- * $Id$
- *
- *-------------------------------------------------------------------------
- */
-
-#ifndef LIBPQ_FE_H
-#define LIBPQ_FE_H
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
-#include <stdio.h>
-
-/*
- * postgres_ext.h defines the backend's externally visible types,
- * such as Oid.
- */
-#include "postgres_ext.h"
-
-/* SSL type is needed here only to declare PQgetssl() */
-#ifdef USE_SSL
-#include <openssl/ssl.h>
-#endif
-
-/* Application-visible enum types */
-
-typedef enum
-{
- /*
- * Although you may decide to change this list in some way, values
- * which become unused should never be removed, nor should constants
- * be redefined - that would break compatibility with existing code.
- */
- CONNECTION_OK,
- CONNECTION_BAD,
- /* Non-blocking mode only below here */
-
- /*
- * The existence of these should never be relied upon - they should
- * only be used for user feedback or similar purposes.
- */
- CONNECTION_STARTED, /* Waiting for connection to be made. */
- CONNECTION_MADE, /* Connection OK; waiting to send. */
- CONNECTION_AWAITING_RESPONSE, /* Waiting for a response from the
- * postmaster. */
- CONNECTION_AUTH_OK, /* Received authentication; waiting for
- * backend startup. */
- CONNECTION_SETENV /* Negotiating environment. */
-} ConnStatusType;
-
-typedef enum
-{
- PGRES_POLLING_FAILED = 0,
- PGRES_POLLING_READING, /* These two indicate that one may */
- PGRES_POLLING_WRITING, /* use select before polling again. */
- PGRES_POLLING_OK,
- PGRES_POLLING_ACTIVE /* Can call poll function immediately. */
-} PostgresPollingStatusType;
-
-typedef enum
-{
- PGRES_EMPTY_QUERY = 0,
- PGRES_COMMAND_OK, /* a query command that doesn't return
- * anything was executed properly by the
- * backend */
- PGRES_TUPLES_OK, /* a query command that returns tuples was
- * executed properly by the backend,
- * PGresult contains the result tuples */
- PGRES_COPY_OUT, /* Copy Out data transfer in progress */
- PGRES_COPY_IN, /* Copy In data transfer in progress */
- PGRES_BAD_RESPONSE, /* an unexpected response was recv'd from
- * the backend */
- PGRES_NONFATAL_ERROR,
- PGRES_FATAL_ERROR
-} ExecStatusType;
-
-/* PGconn encapsulates a connection to the backend.
- * The contents of this struct are not supposed to be known to applications.
- */
-typedef struct pg_conn PGconn;
-
-/* PGresult encapsulates the result of a query (or more precisely, of a single
- * SQL command --- a query string given to PQsendQuery can contain multiple
- * commands and thus return multiple PGresult objects).
- * The contents of this struct are not supposed to be known to applications.
- */
-typedef struct pg_result PGresult;
-
-/* PGnotify represents the occurrence of a NOTIFY message.
- * Ideally this would be an opaque typedef, but it's so simple that it's
- * unlikely to change.
- * NOTE: in Postgres 6.4 and later, the be_pid is the notifying backend's,
- * whereas in earlier versions it was always your own backend's PID.
- */
-typedef struct pgNotify
-{
- char relname[NAMEDATALEN]; /* name of relation containing
- * data */
- int be_pid; /* process id of backend */
-} PGnotify;
-
-/* PQnoticeProcessor is the function type for the notice-message callback.
- */
-typedef void (*PQnoticeProcessor) (void *arg, const char *message);
-
-/* Print options for PQprint() */
-typedef char pqbool;
-
-typedef struct _PQprintOpt
-{
- pqbool header; /* print output field headings and row
- * count */
- pqbool align; /* fill align the fields */
- pqbool standard; /* old brain dead format */
- pqbool html3; /* output html tables */
- pqbool expanded; /* expand tables */
- pqbool pager; /* use pager for output if needed */
- char *fieldSep; /* field separator */
- char *tableOpt; /* insert to HTML <table ...> */
- char *caption; /* HTML <caption> */
- char **fieldName; /* null terminated array of repalcement
- * field names */
-} PQprintOpt;
-
-/* ----------------
- * Structure for the conninfo parameter definitions returned by PQconndefaults
- *
- * All fields except "val" point at static strings which must not be altered.
- * "val" is either NULL or a malloc'd current-value string. PQconninfoFree()
- * will release both the val strings and the PQconninfoOption array itself.
- * ----------------
- */
-typedef struct _PQconninfoOption
-{
- char *keyword; /* The keyword of the option */
- char *envvar; /* Fallback environment variable name */
- char *compiled; /* Fallback compiled in default value */
- char *val; /* Option's current value, or NULL */
- char *label; /* Label for field in connect dialog */
- char *dispchar; /* Character to display for this field in
- * a connect dialog. Values are: ""
- * Display entered value as is "*"
- * Password field - hide value "D" Debug
- * option - don't show by default */
- int dispsize; /* Field size in characters for dialog */
-} PQconninfoOption;
-
-/* ----------------
- * PQArgBlock -- structure for PQfn() arguments
- * ----------------
- */
-typedef struct
-{
- int len;
- int isint;
- union
- {
- int *ptr; /* can't use void (dec compiler barfs) */
- int integer;
- } u;
-} PQArgBlock;
-
-/* ----------------
- * Exported functions of libpq
- * ----------------
- */
-
-/* === in fe-connect.c === */
-
-/* make a new client connection to the backend */
-/* Asynchronous (non-blocking) */
-extern PGconn *PQconnectStart(const char *conninfo);
-extern PostgresPollingStatusType PQconnectPoll(PGconn *conn);
-
-/* Synchronous (blocking) */
-extern PGconn *PQconnectdb(const char *conninfo);
-extern PGconn *PQsetdbLogin(const char *pghost, const char *pgport,
- const char *pgoptions, const char *pgtty,
- const char *dbName,
- const char *login, const char *pwd);
-
-#define PQsetdb(M_PGHOST,M_PGPORT,M_PGOPT,M_PGTTY,M_DBNAME) \
- PQsetdbLogin(M_PGHOST, M_PGPORT, M_PGOPT, M_PGTTY, M_DBNAME, NULL, NULL)
-
-/* close the current connection and free the PGconn data structure */
-extern void PQfinish(PGconn *conn);
-
-/* get info about connection options known to PQconnectdb */
-extern PQconninfoOption *PQconndefaults(void);
-
-/* free the data structure returned by PQconndefaults() */
-extern void PQconninfoFree(PQconninfoOption *connOptions);
-
-/*
- * close the current connection and restablish a new one with the same
- * parameters
- */
-/* Asynchronous (non-blocking) */
-extern int PQresetStart(PGconn *conn);
-extern PostgresPollingStatusType PQresetPoll(PGconn *conn);
-
-/* Synchronous (blocking) */
-extern void PQreset(PGconn *conn);
-
-/* issue a cancel request */
-extern int PQrequestCancel(PGconn *conn);
-
-/* Accessor functions for PGconn objects */
-extern char *PQdb(const PGconn *conn);
-extern char *PQuser(const PGconn *conn);
-extern char *PQpass(const PGconn *conn);
-extern char *PQhost(const PGconn *conn);
-extern char *PQport(const PGconn *conn);
-extern char *PQtty(const PGconn *conn);
-extern char *PQoptions(const PGconn *conn);
-extern ConnStatusType PQstatus(const PGconn *conn);
-extern char *PQerrorMessage(const PGconn *conn);
-extern int PQsocket(const PGconn *conn);
-extern int PQbackendPID(const PGconn *conn);
-extern int PQclientEncoding(const PGconn *conn);
-extern int PQsetClientEncoding(PGconn *conn, const char *encoding);
-
-#ifdef USE_SSL
-/* Get the SSL structure associated with a connection */
-extern SSL *PQgetssl(PGconn *conn);
-#endif
-
-
-/* Enable/disable tracing */
-extern void PQtrace(PGconn *conn, FILE *debug_port);
-extern void PQuntrace(PGconn *conn);
-
-/* Override default notice processor */
-extern PQnoticeProcessor PQsetNoticeProcessor(PGconn *conn,
- PQnoticeProcessor proc,
- void *arg);
-
-/* === in fe-exec.c === */
-
-/* Quoting strings before inclusion in queries. */
-extern size_t PQescapeString(char *to, const char *from, size_t length);
-extern unsigned char *PQescapeBytea(unsigned char *bintext, size_t binlen,
- size_t *bytealen);
-
-/* Simple synchronous query */
-extern PGresult *PQexec(PGconn *conn, const char *query);
-extern PGnotify *PQnotifies(PGconn *conn);
-extern void PQfreeNotify(PGnotify *notify);
-
-/* Interface for multiple-result or asynchronous queries */
-extern int PQsendQuery(PGconn *conn, const char *query);
-extern PGresult *PQgetResult(PGconn *conn);
-
-/* Routines for managing an asychronous query */
-extern int PQisBusy(PGconn *conn);
-extern int PQconsumeInput(PGconn *conn);
-
-/* Routines for copy in/out */
-extern int PQgetline(PGconn *conn, char *string, int length);
-extern int PQputline(PGconn *conn, const char *string);
-extern int PQgetlineAsync(PGconn *conn, char *buffer, int bufsize);
-extern int PQputnbytes(PGconn *conn, const char *buffer, int nbytes);
-extern int PQendcopy(PGconn *conn);
-
-/* Set blocking/nonblocking connection to the backend */
-extern int PQsetnonblocking(PGconn *conn, int arg);
-extern int PQisnonblocking(const PGconn *conn);
-
-/* Force the write buffer to be written (or at least try) */
-extern int PQflush(PGconn *conn);
-
-/*
- * "Fast path" interface --- not really recommended for application
- * use
- */
-extern PGresult *PQfn(PGconn *conn,
- int fnid,
- int *result_buf,
- int *result_len,
- int result_is_int,
- const PQArgBlock *args,
- int nargs);
-
-/* Accessor functions for PGresult objects */
-extern ExecStatusType PQresultStatus(const PGresult *res);
-extern char *PQresStatus(ExecStatusType status);
-extern char *PQresultErrorMessage(const PGresult *res);
-extern int PQntuples(const PGresult *res);
-extern int PQnfields(const PGresult *res);
-extern int PQbinaryTuples(const PGresult *res);
-extern char *PQfname(const PGresult *res, int field_num);
-extern int PQfnumber(const PGresult *res, const char *field_name);
-extern Oid PQftype(const PGresult *res, int field_num);
-extern int PQfsize(const PGresult *res, int field_num);
-extern int PQfmod(const PGresult *res, int field_num);
-extern char *PQcmdStatus(PGresult *res);
-extern char *PQoidStatus(const PGresult *res); /* old and ugly */
-extern Oid PQoidValue(const PGresult *res); /* new and improved */
-extern char *PQcmdTuples(PGresult *res);
-extern char *PQgetvalue(const PGresult *res, int tup_num, int field_num);
-extern int PQgetlength(const PGresult *res, int tup_num, int field_num);
-extern int PQgetisnull(const PGresult *res, int tup_num, int field_num);
-
-/* Delete a PGresult */
-extern void PQclear(PGresult *res);
-
-/*
- * Make an empty PGresult with given status (some apps find this
- * useful). If conn is not NULL and status indicates an error, the
- * conn's errorMessage is copied.
- */
-extern PGresult *PQmakeEmptyPGresult(PGconn *conn, ExecStatusType status);
-
-/* === in fe-print.c === */
-
-extern void
-PQprint(FILE *fout, /* output stream */
- const PGresult *res,
- const PQprintOpt *ps); /* option structure */
-
-/*
- * really old printing routines
- */
-extern void
-PQdisplayTuples(const PGresult *res,
- FILE *fp, /* where to send the output */
- int fillAlign, /* pad the fields with spaces */
- const char *fieldSep, /* field separator */
- int printHeader, /* display headers? */
- int quiet);
-
-extern void
-PQprintTuples(const PGresult *res,
- FILE *fout, /* output stream */
- int printAttName, /* print attribute names */
- int terseOutput, /* delimiter bars */
- int width); /* width of column, if 0, use variable
- * width */
-
-
-/* === in fe-lobj.c === */
-
-/* Large-object access routines */
-extern int lo_open(PGconn *conn, Oid lobjId, int mode);
-extern int lo_close(PGconn *conn, int fd);
-extern int lo_read(PGconn *conn, int fd, char *buf, size_t len);
-extern int lo_write(PGconn *conn, int fd, char *buf, size_t len);
-extern int lo_lseek(PGconn *conn, int fd, int offset, int whence);
-extern Oid lo_creat(PGconn *conn, int mode);
-extern int lo_tell(PGconn *conn, int fd);
-extern int lo_unlink(PGconn *conn, Oid lobjId);
-extern Oid lo_import(PGconn *conn, const char *filename);
-extern int lo_export(PGconn *conn, Oid lobjId, const char *filename);
-
-/* === in fe-misc.c === */
-
-/* Determine length of multibyte encoded char at *s */
-extern int PQmblen(const unsigned char *s, int encoding);
-
-/* Get encoding id from environment variable PGCLIENTENCODING */
-extern int PQenv2encoding(void);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* LIBPQ_FE_H */
diff --git a/netware/libpq.imp b/netware/libpq.imp
deleted file mode 100644
index 922679f07e..0000000000
--- a/netware/libpq.imp
+++ /dev/null
@@ -1,93 +0,0 @@
- lo_open,
- lo_close,
- lo_read,
- lo_write,
- lo_lseek,
- lo_creat,
- lo_tell,
- lo_unlink,
- lo_import,
- lo_export,
- PQconnectdb,
- PQconnectStart,
- PQconndefaults,
- PQsetdbLogin,
- PQconnectPoll,
- PQfinish,
- PQreset,
- PQresetStart,
- PQresetPoll,
- PQrequestCancel,
- PQconninfoFree,
- PQdb,
- PQuser,
- PQpass,
- PQhost,
- PQport,
- PQtty,
- PQoptions,
- PQstatus,
- PQerrorMessage,
- PQsocket,
- PQbackendPID,
- PQclientEncoding,
- PQsetClientEncoding,
- PQtrace,
- PQuntrace,
- PQsetNoticeProcessor,
- PQmakeEmptyPGresult,
- PQclear,
- PQsendQuery,
- PQconsumeInput,
- PQisBusy,
- PQgetResult,
- PQexec,
- PQnotifies,
- PQgetline,
- PQgetlineAsync,
- PQputline,
- PQputnbytes,
- PQendcopy,
- PQfn,
- PQresultStatus,
- PQresStatus,
- PQresultErrorMessage,
- PQntuples,
- PQnfields,
- PQbinaryTuples,
- PQfname,
- PQfnumber,
- PQftype,
- PQfsize,
- PQfmod,
- PQcmdStatus,
- PQoidStatus,
- PQoidValue,
- PQcmdTuples,
- PQgetvalue,
- PQgetlength,
- PQgetisnull,
- PQsetnonblocking,
- PQisnonblocking,
- PQflush,
- PQmblen,
- PQenv2encoding,
- PQprint,
- PQdisplayTuples,
- PQprintTuples,
- pg_valid_client_encoding,
- pg_valid_server_encoding,
- pg_char_to_encname_struct,
- pg_char_to_encoding,
- pg_encoding_to_char,
- createPQExpBuffer,
- initPQExpBuffer,
- destroyPQExpBuffer,
- termPQExpBuffer,
- resetPQExpBuffer,
- enlargePQExpBuffer,
- printfPQExpBuffer,
- appendPQExpBuffer,
- appendPQExpBufferStr,
- appendPQExpBufferChar,
- appendBinaryPQExpBuffer
diff --git a/netware/libpq/libpq-fs.h b/netware/libpq/libpq-fs.h
deleted file mode 100644
index d743618895..0000000000
--- a/netware/libpq/libpq-fs.h
+++ /dev/null
@@ -1,24 +0,0 @@
-/*-------------------------------------------------------------------------
- *
- * libpq-fs.h
- * definitions for using Inversion file system routines (ie, large objects)
- *
- *
- * Portions Copyright (c) 1996-2001, PostgreSQL Global Development Group
- * Portions Copyright (c) 1994, Regents of the University of California
- *
- * $Id$
- *
- *-------------------------------------------------------------------------
- */
-#ifndef LIBPQ_FS_H
-#define LIBPQ_FS_H
-
-/*
- * Read/write mode flags for inversion (large object) calls
- */
-
-#define INV_WRITE 0x00020000
-#define INV_READ 0x00040000
-
-#endif /* LIBPQ_FS_H */
diff --git a/netware/mktemp.c b/netware/mktemp.c
deleted file mode 100644
index b6d8e92593..0000000000
--- a/netware/mktemp.c
+++ /dev/null
@@ -1,87 +0,0 @@
-
-#include <string.h>
-#include <errno.h>
-#include <unistd.h>
-
-
-/* Based on standard ANSI C mktemp() for NetWare */
-char* mktemp(char* templateStr)
-{
- char* pXs = NULL;
- char numBuf[50] = {'\0'};
- int count = 0;
- char* pPid = NULL;
-
- char termChar = '\0';
- char letter = 'a';
- char letter1 = 'a';
-
- if (templateStr && (pXs = strstr(templateStr, "XXXXXX")))
- {
- /* Generate temp name */
- termChar = pXs[6];
- ltoa(NXThreadGetId(), numBuf, 16);
- numBuf[strlen(numBuf)-1] = '\0';
-
- /*
- Beware! thread IDs are 8 hex digits on NW 4.11 and only the
- lower digits seem to change, whereas on NW 5 they are in the
- range of < 1000 hex or 3 hex digits in length. So the following
- logic ensures we use the least significant portion of the number.\
- */
- if (strlen(numBuf) > 5)
- pPid = &numBuf[strlen(numBuf)-5];
- else
- pPid = numBuf;
-
- /*
- Temporary files, as the name suggests, are temporarily used and then
- cleaned up after usage. In the case of complex scripts, new temp files
- may be created before the old ones are deleted. So, we need to have
- a provision to create many temp files. It is found that provision for
- 26 files may not be enough in such cases. Hence the logic below.
-
- The logic below allows 26 files (like, pla00015.tmp through plz00015.tmp)
- plus 6x26=676 (like, plaa0015.tmp through plzz0015.tmp)
- */
- letter = 'a';
- do
- {
- sprintf(pXs, (char *)"%c%05.5s", letter, pPid);
- pXs[6] = termChar;
-
- if (access(templateStr, 0) != 0)
- return templateStr; /* File does not exist */
-
- letter++;
- } while (letter <= 'z');
-
- letter1 = 'a';
- do
- {
- letter = 'a';
-
- do
- {
- sprintf(pXs, (char *)"%c%c%04.5s", letter1, letter, pPid);
- pXs[6] = termChar;
-
- if (access(templateStr, 0) != 0)
- return templateStr; /* File does not exist */
-
- letter++;
- } while (letter <= 'z');
-
- letter1++;
- } while (letter1 <= 'z');
-
- errno = ENOENT;
- return NULL;
- }
- else
- {
- errno = EINVAL;
- return NULL;
- }
-}
-
diff --git a/netware/mktemp.h b/netware/mktemp.h
deleted file mode 100644
index b370438246..0000000000
--- a/netware/mktemp.h
+++ /dev/null
@@ -1 +0,0 @@
-char* mktemp(char* templateStr);
diff --git a/netware/param.h b/netware/param.h
deleted file mode 100644
index aa879d035f..0000000000
--- a/netware/param.h
+++ /dev/null
@@ -1,20 +0,0 @@
-
-/*****************************************************************************
- * *
- * sys/param.c *
- * *
- * Freely redistributable and modifiable. Use at your own risk. *
- * *
- * Copyright 1994 The Downhill Project *
- * *
- *****************************************************************************/
-#ifndef MAXPATHLEN
-/*#define MAXPATHLEN _MAX_PATH*/
-#define MAXPATHLEN 260 /* _MAX_PATH defined in STDLIB.H for Windows; picked up the value from there */
-#define _MAX_PATH 260 /* Defined since it is used in os.c while compiling apache */
-#endif
-#define MAXHOSTNAMELEN 64
-#define howmany(x,y) (((x)+((y)-1))/(y))
-#define roundup(x,y) ((((x)+((y)-1))/(y))*(y))
-
-#define _MAX_VOLUME 31 /* Defined since it is used in os.c while compiling apache. The value picked up from LibC */
diff --git a/netware/php-nw.bat b/netware/php-nw.bat
deleted file mode 100755
index 3d2b59d8a8..0000000000
--- a/netware/php-nw.bat
+++ /dev/null
@@ -1,10 +0,0 @@
-@echo off
-
-REM CodeWarrior stuff
-set path=%path%;P:\APPS\SCRIPT\SW\CW71-4\BIN
-
-REM Tools for building Zend
-set path=%path%;P:\APPS\SCRIPT\SW\GNUWIN32\BIN
-
-REM Build options
-setbuild r 1
diff --git a/netware/php5apache.mak b/netware/php5apache.mak
deleted file mode 100644
index d7d9342b13..0000000000
--- a/netware/php5apache.mak
+++ /dev/null
@@ -1,165 +0,0 @@
-# Temporarily here -- later may go into some batch file
-# which will set this as an environment variable
-PROJECT_ROOT = ../..
-
-# Module details
-MODULE_NAME = mod_php
-MODULE_DESC = "PHP 5 - Apache 1.3 Module"
-VMAJ = 3
-VMIN = 0
-VREV = 0
-
-#include the common settings
-include $(PROJECT_ROOT)/netware/common.mif
-
-# Extensions of all input and output files
-.SUFFIXES:
-.SUFFIXES: .nlm .lib .obj .cpp .c .msg .mlc .mdb .xdc .d
-
-# Source files
-C_SRC = mod_php5.c \
- php_apache.c \
- sapi_apache.c \
- libpre.c
-
-# Destination directories and files
-OBJ_DIR = $(BUILD)
-FINAL_DIR = $(BUILD)
-MAP_FILE = $(FINAL_DIR)\$(MODULE_NAME).map
-OBJECTS = $(addprefix $(OBJ_DIR)/,$(CPP_SRC:.cpp=.obj) $(C_SRC:.c=.obj))
-DEPDS = $(addprefix $(OBJ_DIR)/,$(CPP_SRC:.cpp=.d) $(C_SRC:.c=.d))
-
-# Binary file
-ifndef BINARY
-BINARY=$(FINAL_DIR)\$(MODULE_NAME).nlm
-endif
-
-
-# Compile flags
-C_FLAGS = -c -maxerrors 25 -msgstyle gcc
-C_FLAGS += -wchar_t on -bool on
-C_FLAGS += -processor Pentium
-C_FLAGS += -w nounusedarg -msext on
-C_FLAGS += -nostdinc
-C_FLAGS += -relax_pointers # To remove type-casting errors
-C_FLAGS += -DNETWARE
-C_FLAGS += -DZTS
-C_FLAGS += -DNLM_PLATFORM
-C_FLAGS += -DN_PLAT_NLM -DNLM=1 -D__NO_MATH_OPS
-C_FLAGS += -D__C9X_CMATH_INLINES_DEFINED -DAPACHE_OS_H -DNO_USE_SIGACTION -DMULTITHREAD
-C_FLAGS += -DCLIB_STAT_PATCH
-C_FLAGS += -DNEW_LIBC
-C_FLAGS += -I. -I- -I. -I../../netware -I$(SDK_DIR)/include # ../../netware added for special SYS/STAT.H
-C_FLAGS += -I$(MWCIncludes)
-C_FLAGS += -I$(APACHE_DIR)/include -I$(APACHE_DIR)/os/netware
-C_FLAGS += -I- -I../../main -I../../Zend -I../../TSRM -I../../ext/standard
-C_FLAGS += -I../../ -I../../netware -I$(PROJECT_ROOT)/regex
-C_FLAGS += -I$(WINSOCK_DIR)/include/nlm -I$(WINSOCK_DIR)/include
-
-
-# Extra stuff based on debug / release builds
-ifeq '$(BUILD)' 'debug'
- SYM_FILE = $(FINAL_DIR)\$(MODULE_NAME).sym
- C_FLAGS += -inline smart -sym on -sym codeview4 -opt off -opt intrinsics -sym internal -DDEBUGGING -DDKFBPON
- C_FLAGS += -r -DZEND_DEBUG=1
- C_FLAGS += -exc cw
- LD_FLAGS += -sym on -sym codeview4 -sym internal -osym $(SYM_FILE)
- LD_FLAGS += -msgstyle std
- export MWLibraryFiles=$(SDK_DIR)/imports/libcpre.o;mwcrtld.lib
-else
- C_FLAGS += -opt speed -inline on -inline smart -inline auto -sym off -DZEND_DEBUG=0
- C_FLAGS += -opt intrinsics
- C_FLAGS += -opt level=4
- LD_FLAGS += -sym off
- export MWLibraryFiles=$(SDK_DIR)/imports/libcpre.o;mwcrtl.lib
-endif
-
-# Dependencies
-MODULE = LibC \
- phplib
-IMPORT = @$(SDK_DIR)/imports/libc.imp \
- @$(PROJECT_ROOT)/netware/apachecore.imp \
- @$(PROJECT_ROOT)/netware/phplib.imp
-EXPORT = php5_module
-
-
-# Virtual paths
-vpath %.cpp .
-vpath %.c .
-vpath %.obj $(OBJ_DIR)
-
-
-all: prebuild project
-
-.PHONY: all
-
-prebuild:
- @if not exist $(OBJ_DIR) md $(OBJ_DIR)
-
-project: $(BINARY) $(MESSAGE)
- @echo Build complete.
-
-
-$(OBJ_DIR)/%.d: %.c
- @echo Building Dependencies for $(<F)
- @$(CC) -M $< $(C_FLAGS) -o $@
-
-$(OBJ_DIR)/%.obj: %.c
- @echo Compiling $?...
- @$(CC) $< $(C_FLAGS) -o $@
-
-
-$(BINARY): $(OBJECTS)
- @echo Import $(IMPORT) > $(basename $@).def
-ifdef API
- @echo Import $(API) >> $(basename $@).def
-endif
- @echo Module $(MODULE) >> $(basename $@).def
-ifdef EXPORT
- @echo Export $(EXPORT) >> $(basename $@).def
-endif
- @echo AutoUnload >> $(basename $@).def
-ifeq '$(BUILD)' 'debug'
- @echo Debug >> $(basename $@).def
-endif
- @echo Flag_On 0x00000008 >> $(basename $@).def
- @echo Start _lib_start >> $(basename $@).def
- @echo Exit _lib_stop >> $(basename $@).def
-
- $(MPKTOOL) $(XDCFLAGS) $(basename $@).xdc
- @echo xdcdata $(basename $@).xdc >> $(basename $@).def
-
- @echo Linking $@...
- @echo $(LD_FLAGS) -commandfile $(basename $@).def > $(basename $@).link
-ifdef LIBRARY
- @echo $(LIBRARY) >> $(basename $@).link
-endif
- @echo $(OBJECTS) >> $(basename $@).link
-
- @$(LINK) @$(basename $@).link
-
-
-.PHONY: clean
-clean: cleanobj cleanbin
-
-.PHONY: cleand
-cleand:
- @echo Deleting all dependency files...
- -@del "$(OBJ_DIR)\*.d"
-
-.PHONY: cleanobj
-cleanobj:
- @echo Deleting all object files...
- -@del "$(OBJ_DIR)\*.obj"
-
-.PHONY: cleanbin
-cleanbin:
- @echo Deleting binary files...
- -@del "$(FINAL_DIR)\$(MODULE_NAME).nlm"
- @echo Deleting MAP, DEF files, etc....
- -@del "$(FINAL_DIR)\$(MODULE_NAME).map"
- -@del "$(FINAL_DIR)\$(MODULE_NAME).def"
- -@del "$(FINAL_DIR)\$(MODULE_NAME).link"
-ifeq '$(BUILD)' 'debug'
- -@del $(FINAL_DIR)\$(MODULE_NAME).sym
-endif
diff --git a/netware/php5apache2filter.mak b/netware/php5apache2filter.mak
deleted file mode 100644
index 7cc1a29192..0000000000
--- a/netware/php5apache2filter.mak
+++ /dev/null
@@ -1,166 +0,0 @@
-# Temporarily here -- later may go into some batch file
-# which will set this as an environment variable
-PROJECT_ROOT = ../..
-
-# Module details
-MODULE_NAME = mod_php
-MODULE_DESC = "PHP 5 - Apache 2.0 Module"
-VMAJ = 3
-VMIN = 0
-VREV = 0
-
-#include the common settings
-include $(PROJECT_ROOT)/netware/common.mif
-
-# Extensions of all input and output files
-.SUFFIXES:
-.SUFFIXES: .nlm .lib .obj .cpp .c .msg .mlc .mdb .xdc .d
-
-# Source files
-C_SRC = apache_config.c \
- php_functions.c \
- sapi_apache2.c
-
-# Destination directories and files
-OBJ_DIR = $(BUILD)
-FINAL_DIR = $(BUILD)
-MAP_FILE = $(FINAL_DIR)\$(MODULE_NAME).map
-OBJECTS = $(addprefix $(OBJ_DIR)/,$(CPP_SRC:.cpp=.obj) $(C_SRC:.c=.obj))
-DEPDS = $(addprefix $(OBJ_DIR)/,$(CPP_SRC:.cpp=.d) $(C_SRC:.c=.d))
-
-# Binary file
-ifndef BINARY
-BINARY=$(FINAL_DIR)\$(MODULE_NAME).nlm
-endif
-
-
-# Compile flags
-C_FLAGS += -c -maxerrors 25 -msgstyle gcc
-C_FLAGS += -wchar_t on -bool on
-C_FLAGS += -processor Pentium
-C_FLAGS += -w nounusedarg -msext on
-C_FLAGS += -nostdinc
-C_FLAGS += -relax_pointers # To remove type-casting errors
-C_FLAGS += -DNETWARE
-C_FLAGS += -DZTS
-C_FLAGS += -DNLM_PLATFORM
-C_FLAGS += -DN_PLAT_NLM -DNLM=1 -D__NO_MATH_OPS
-C_FLAGS += -D__C9X_CMATH_INLINES_DEFINED -DAPACHE_OS_H -DNO_USE_SIGACTION -DMULTITHREAD
-C_FLAGS += -DCLIB_STAT_PATCH
-C_FLAGS += -DNEW_LIBC
-C_FLAGS += -I. -I- -I. -I../../netware -I$(SDK_DIR)/include # ../../netware added for special SYS/STAT.H
-C_FLAGS += -I$(SDK_DIR)/include/winsock # For Apache 2.0 headers
-C_FLAGS += -I$(MWCIncludes)
-C_FLAGS += -I$(APACHE_DIR)/include
-C_FLAGS += -I- -I../../main -I../../Zend -I../../TSRM -I../../ext/standard
-C_FLAGS += -I../../ -I../../netware -I$(PROJECT_ROOT)/regex
-C_FLAGS += -I$(WINSOCK_DIR)/include/nlm -I$(WINSOCK_DIR)/include
-
-
-# Extra stuff based on debug / release builds
-ifeq '$(BUILD)' 'debug'
- SYM_FILE = $(FINAL_DIR)\$(MODULE_NAME).sym
- C_FLAGS += -inline smart -sym on -sym codeview4 -opt off -opt intrinsics -sym internal -DDEBUGGING -DDKFBPON
- C_FLAGS += -r -DZEND_DEBUG=1
- C_FLAGS += -exc cw
- LD_FLAGS += -sym on -sym codeview4 -sym internal -osym $(SYM_FILE)
- LD_FLAGS += -msgstyle std
- export MWLibraryFiles=$(SDK_DIR)/imports/libcpre.o;mwcrtld.lib
-else
- C_FLAGS += -opt speed -inline on -inline smart -inline auto -sym off -DZEND_DEBUG=0
- C_FLAGS += -opt intrinsics
- C_FLAGS += -opt level=4
- LD_FLAGS += -sym off
- export MWLibraryFiles=$(SDK_DIR)/imports/libcpre.o;mwcrtl.lib
-endif
-
-# Dependencies
-MODULE = LibC \
- phplib
-IMPORT = @$(SDK_DIR)/imports/libc.imp \
- @$(APACHE_DIR)/lib/httpd.imp \
- @$(APACHE_DIR)/lib/aprlib.imp \
- @$(PROJECT_ROOT)/netware/phplib.imp
-EXPORT = php5_module
-
-
-# Virtual paths
-vpath %.cpp .
-vpath %.c .
-vpath %.obj $(OBJ_DIR)
-
-
-all: prebuild project
-
-.PHONY: all
-
-prebuild:
- @if not exist $(OBJ_DIR) md $(OBJ_DIR)
-
-project: $(BINARY) $(MESSAGE)
- @echo Build complete.
-
-
-$(OBJ_DIR)/%.d: %.c
- @echo Building Dependencies for $(<F)
- @$(CC) -M $< $(C_FLAGS) -o $@
-
-$(OBJ_DIR)/%.obj: %.c
- @echo Compiling $?...
- @$(CC) $< $(C_FLAGS) -o $@
-
-
-$(BINARY): $(OBJECTS)
- @echo Import $(IMPORT) > $(basename $@).def
-ifdef API
- @echo Import $(API) >> $(basename $@).def
-endif
- @echo Module $(MODULE) >> $(basename $@).def
-ifdef EXPORT
- @echo Export $(EXPORT) >> $(basename $@).def
-endif
- @echo AutoUnload >> $(basename $@).def
-ifeq '$(BUILD)' 'debug'
- @echo Debug >> $(basename $@).def
-endif
- @echo Flag_On 0x00000008 >> $(basename $@).def
- @echo Start _lib_start >> $(basename $@).def
- @echo Exit _lib_stop >> $(basename $@).def
-
- $(MPKTOOL) $(XDCFLAGS) $(basename $@).xdc
- @echo xdcdata $(basename $@).xdc >> $(basename $@).def
-
- @echo Linking $@...
- @echo $(LD_FLAGS) -commandfile $(basename $@).def > $(basename $@).link
-ifdef LIBRARY
- @echo $(LIBRARY) >> $(basename $@).link
-endif
- @echo $(OBJECTS) $(APACHE_DIR)/lib/libpre.obj >> $(basename $@).link
-
- @$(LINK) @$(basename $@).link
-
-
-.PHONY: clean
-clean: cleanobj cleanbin
-
-.PHONY: cleand
-cleand:
- @echo Deleting all dependency files...
- -@del "$(OBJ_DIR)\*.d"
-
-.PHONY: cleanobj
-cleanobj:
- @echo Deleting all object files...
- -@del "$(OBJ_DIR)\*.obj"
-
-.PHONY: cleanbin
-cleanbin:
- @echo Deleting binary files...
- -@del "$(FINAL_DIR)\$(MODULE_NAME).nlm"
- @echo Deleting MAP, DEF files, etc....
- -@del "$(FINAL_DIR)\$(MODULE_NAME).map"
- -@del "$(FINAL_DIR)\$(MODULE_NAME).def"
- -@del "$(FINAL_DIR)\$(MODULE_NAME).link"
-ifeq '$(BUILD)' 'debug'
- -@del $(FINAL_DIR)\$(MODULE_NAME).sym
-endif
diff --git a/netware/php5cli.mak b/netware/php5cli.mak
deleted file mode 100644
index 30a1896f20..0000000000
--- a/netware/php5cli.mak
+++ /dev/null
@@ -1,163 +0,0 @@
-# Temporarily here -- later may go into some batch file
-# which will set this as an environment variable
-PROJECT_ROOT = ../..
-
-# Module details
-MODULE_NAME = php
-MODULE_DESC = "PHP 5 - Command Line Interface"
-VMAJ = 2
-VMIN = 0
-VREV = 0
-
-#include the common settings
-include $(PROJECT_ROOT)/netware/common.mif
-
-# Extensions of all input and output files
-.SUFFIXES:
-.SUFFIXES: .nlm .lib .obj .cpp .c .msg .mlc .mdb .xdc .d
-
-# Source files
-C_SRC = getopt.c \
- php_cli.c
-
-# Library files
-LIBRARY =
-
-# Destination directories and files
-OBJ_DIR = $(BUILD)
-FINAL_DIR = $(BUILD)
-MAP_FILE = $(FINAL_DIR)\$(MODULE_NAME).map
-OBJECTS = $(addprefix $(OBJ_DIR)/,$(CPP_SRC:.cpp=.obj) $(C_SRC:.c=.obj))
-DEPDS = $(addprefix $(OBJ_DIR)/,$(CPP_SRC:.cpp=.d) $(C_SRC:.c=.d))
-
-# Binary file
-ifndef BINARY
- BINARY=$(FINAL_DIR)\$(MODULE_NAME).nlm
-endif
-
-
-# Compile flags
-C_FLAGS += -c -maxerrors 25 -msgstyle gcc
-C_FLAGS += -wchar_t on -bool on
-C_FLAGS += -processor Pentium
-C_FLAGS += -w nounusedarg -msext on
-C_FLAGS += -nostdinc
-C_FLAGS += -relax_pointers # To remove type-casting errors
-C_FLAGS += -DNETWARE -DTHREAD_SWITCH
-C_FLAGS += -DZTS
-C_FLAGS += -DNLM_PLATFORM
-C_FLAGS += -DN_PLAT_NLM -DNLM=1 -D__NO_MATH_OPS
-C_FLAGS += -D__C9X_CMATH_INLINES_DEFINED -DAPACHE_OS_H -DNO_USE_SIGACTION -DMULTITHREAD
-C_FLAGS += -DNEW_LIBC
-C_FLAGS += -I. -I- -I. -I../../netware -I$(SDK_DIR)/include # ../../netware added for special SYS/STAT.H
-C_FLAGS += -I$(MWCIncludes)
-C_FLAGS += -I- -I../../main -I../../Zend -I../../TSRM -I../../ext/standard
-C_FLAGS += -I../../ -I../../netware -I$(PROJECT_ROOT)/regex
-C_FLAGS += -I$(WINSOCK_DIR)/include/nlm -I$(WINSOCK_DIR)/include
-
-# Extra stuff based on debug / release builds
-ifeq '$(BUILD)' 'debug'
- SYM_FILE = $(FINAL_DIR)\$(MODULE_NAME).sym
- C_FLAGS += -inline smart -sym on -sym codeview4 -opt off -opt intrinsics -sym internal -DDEBUGGING -DDKFBPON
- C_FLAGS += -r -DZEND_DEBUG=1
- C_FLAGS += -exc cw
- LD_FLAGS += -sym on -sym codeview4 -sym internal -osym $(SYM_FILE)
- export MWLibraryFiles=$(SDK_DIR)/imports/libcpre.o;mwcrtld.lib
-else
- C_FLAGS += -opt speed -inline on -inline smart -inline auto -sym off -DZEND_DEBUG=0
- C_FLAGS += -opt intrinsics
- C_FLAGS += -opt level=4
- LD_FLAGS += -sym off
- export MWLibraryFiles=$(SDK_DIR)/imports/libcpre.o;mwcrtl.lib
-endif
-
-
-# Dependencies
-MODULE = LibC \
- phplib
-IMPORT = @$(SDK_DIR)/imports/libc.imp \
- @$(PROJECT_ROOT)/netware/phplib.imp
-EXPORT =
-API =
-
-
-# Virtual paths
-vpath %.cpp .
-vpath %.c .
-vpath %.obj $(OBJ_DIR)
-
-
-all: prebuild project
-
-.PHONY: all
-
-prebuild:
- @if not exist $(OBJ_DIR) md $(OBJ_DIR)
-
-project: $(BINARY) $(MESSAGE)
- @echo Build complete.
-
-
-$(OBJ_DIR)/%.d: %.c
- @echo Building Dependencies for $(<F)
- @$(CC) -M $< $(C_FLAGS) -o $@
-
-$(OBJ_DIR)/%.obj: %.c
- @echo Compiling $?...
- @$(CC) $< $(C_FLAGS) -o $@
-
-
-$(BINARY): $(OBJECTS)
- @echo Import $(IMPORT) > $(basename $@).def
-ifdef API
- @echo Import $(API) >> $(basename $@).def
-endif
- @echo Module $(MODULE) >> $(basename $@).def
-ifdef EXPORT
- @echo Export $(EXPORT) >> $(basename $@).def
-endif
- @echo AutoUnload >> $(basename $@).def
-ifeq '$(BUILD)' 'debug'
- @echo Debug >> $(basename $@).def
-endif
- @echo Flag_On 0x00000008 >> $(basename $@).def
- @echo Start _LibCPrelude >> $(basename $@).def
- @echo Exit _LibCPostlude >> $(basename $@).def
-
- $(MPKTOOL) $(XDCFLAGS) $(basename $@).xdc
- @echo xdcdata $(basename $@).xdc >> $(basename $@).def
-
- @echo Linking $@...
- @echo $(LD_FLAGS) -commandfile $(basename $@).def > $(basename $@).link
-ifdef LIBRARY
- @echo $(LIBRARY) >> $(basename $@).link
-endif
- @echo $(OBJECTS) >> $(basename $@).link
-
- @$(LINK) @$(basename $@).link
-
-
-.PHONY: clean
-clean: cleanobj cleanbin
-
-.PHONY: cleand
-cleand:
- @echo Deleting all dependency files...
- -@del "$(OBJ_DIR)\*.d"
-
-.PHONY: cleanobj
-cleanobj:
- @echo Deleting all object files...
- -@del "$(OBJ_DIR)\*.obj"
-
-.PHONY: cleanbin
-cleanbin:
- @echo Deleting binary files...
- -@del "$(FINAL_DIR)\$(MODULE_NAME).nlm"
- @echo Deleting MAP, DEF files, etc....
- -@del "$(FINAL_DIR)\$(MODULE_NAME).map"
- -@del "$(FINAL_DIR)\$(MODULE_NAME).def"
- -@del "$(FINAL_DIR)\$(MODULE_NAME).link"
-ifeq '$(BUILD)' 'debug'
- -@del $(FINAL_DIR)\$(MODULE_NAME).sym
-endif
diff --git a/netware/phplib.imp b/netware/phplib.imp
deleted file mode 100644
index d1ecedc982..0000000000
--- a/netware/phplib.imp
+++ /dev/null
@@ -1,177 +0,0 @@
-_array_init,
-_convert_to_string,
-_ecalloc,
-_efree,
-_emalloc,
-_erealloc,
-_estrdup,
-_estrndup,
-_object_and_properties_init,
-_object_init,
-_object_init_ex,
-_php_stream_cast,
-_php_stream_free,
-_php_stream_open_wrapper_ex,
-_zend_get_parameters_array,
-_zend_get_parameters_array_ex,
-_zend_list_addref,
-_zend_list_delete,
-_zend_list_find,
-_zval_copy_ctor,
-_zval_dtor,
-_zval_ptr_dtor,
-add_assoc_bool_ex,
-add_assoc_long_ex,
-add_assoc_zval_ex,
-add_index_null,
-add_index_long,
-add_index_zval,
-add_assoc_string_ex,
-add_assoc_stringl_ex,
-add_assoc_null_ex,
-add_index_string,
-add_index_stringl,
-add_next_index_bool,
-add_next_index_long,
-add_next_index_string,
-add_next_index_stringl,
-add_next_index_zval,
-add_property_long_ex,
-add_property_string_ex,
-call_user_function,
-compiler_globals_id,
-convert_to_boolean,
-convert_to_array,
-convert_to_double,
-convert_to_long,
-core_globals_id,
-display_ini_entries,
-display_link_numbers,
-empty_string,
-executor_globals_id,
-expand_filepath,
-get_zend_version,
-get_active_function_name,
-highlight_file,
-le_index_ptr,
-module_registry,
-multi_convert_to_long_ex,
-open_file_for_scanning,
-php_addslashes,
-php_check_open_basedir,
-php_checkuid,
-php_execute_script,
-php_fopen_primary_script,
-php_handle_aborted_connection,
-php_handle_special_queries,
-php_body_write,
-php_end_ob_buffers,
-php_error_docref0,
-php_get_current_user,
-php_get_highlight_struct,
-php_handle_auth_data,
-php_header,
-php_header_write,
-php_import_environment_variables,
-php_info_print_table_end,
-php_info_print_table_colspan_header,
-php_info_print_table_header,
-php_info_print_table_row,
-php_info_print_table_start,
-php_lint_script,
-php_log_err,
-php_module_shutdown,
-php_module_shutdown_for_exec,
-php_module_shutdown_wrapper,
-php_module_startup,
-php_ob_set_internal_handler,
-php_output_activate,
-php_output_set_status,
-php_output_startup,
-php_print_info,
-php_printf,
-php_regcomp,
-php_regexec,
-php_regfree,
-php_register_variable,
-php_request_shutdown,
-php_request_shutdown_for_exec,
-php_request_startup,
-php_sig_gif,
-php_sig_jpg,
-php_sig_png,
-php_start_ob_buffer,
-php_strip_tags,
-php_strip_url_passwd,
-php_stripslashes,
-php_strlcpy,
-php_strtolower,
-php_strtoupper,
-php_write,
-sapi_add_header_ex,
-sapi_free_header,
-sapi_get_default_content_type,
-sapi_globals_id,
-sapi_shutdown,
-sapi_startup,
-second_arg_force_ref,
-ts_allocate_id,
-ts_resource_ex,
-tsrm_shutdown,
-tsrm_startup,
-virtual_filepath,
-virtual_fopen,
-zend_alter_ini_entry,
-zend_error,
-zend_eval_string,
-zend_execute_scripts,
-zend_extensions,
-zend_fetch_resource,
-zend_get_parameters_ex,
-zend_hash_add_or_update,
-zend_hash_apply,
-zend_hash_apply_with_argument,
-zend_hash_clean,
-zend_hash_del_key_or_index,
-zend_hash_destroy,
-zend_hash_exists,
-zend_hash_find,
-zend_hash_get_current_key_ex,
-zend_hash_get_current_data_ex,
-zend_hash_index_find,
-zend_hash_index_update_or_next_insert,
-zend_hash_init,
-zend_hash_init_ex,
-zend_hash_internal_pointer_reset_ex
-zend_hash_merge_ex,
-zend_hash_move_forward_ex,
-zend_hash_num_elements,
-zend_highlight,
-zend_ini_deactivate,
-zend_ini_boolean_displayer_cb,
-zend_ini_string,
-zend_list_insert,
-zend_llist_add_element,
-zend_llist_apply,
-zend_llist_apply_with_argument,
-zend_llist_destroy,
-zend_llist_init,
-zend_load_extension,
-zend_parse_parameters,
-zend_parse_parameters_ex,
-zend_printf,
-zend_register_ini_entries,
-zend_register_internal_class,
-zend_register_list_destructors_ex,
-zend_register_long_constant,
-zend_register_resource,
-zend_startup_module,
-zend_standard_class_def,
-zend_strip,
-zend_unregister_ini_entries,
-zend_wrong_param_count,
-zval_add_ref,
-OnUpdateBool,
-OnUpdateLong,
-OnUpdateString,
-OnUpdateStringUnempty
diff --git a/netware/phplib.mak b/netware/phplib.mak
deleted file mode 100644
index 90b6e67427..0000000000
--- a/netware/phplib.mak
+++ /dev/null
@@ -1,404 +0,0 @@
-# Temporarily here -- later may go into some batch file
-# which will set this as an environment variable
-PROJECT_ROOT = .
-
-# Module details
-MODULE_NAME = phplib
-MODULE_DESC = "PHP 5 - Script Interpreter and Library"
-VMAJ = 3
-VMIN = 0
-VREV = 0
-
-#include the common settings
-include $(PROJECT_ROOT)/netware/common.mif
-
-
-# Extensions of all input and output files
-.SUFFIXES:
-.SUFFIXES: .nlm .lib .obj .cpp .c .msg .mlc .mdb .xdc .d
-
-# Source files
-C_SRC = ext/bcmath/bcmath.c \
- ext/bcmath/libbcmath/src/add.c \
- ext/bcmath/libbcmath/src/compare.c \
- ext/bcmath/libbcmath/src/debug.c \
- ext/bcmath/libbcmath/src/div.c \
- ext/bcmath/libbcmath/src/divmod.c \
- ext/bcmath/libbcmath/src/doaddsub.c \
- ext/bcmath/libbcmath/src/init.c \
- ext/bcmath/libbcmath/src/int2num.c \
- ext/bcmath/libbcmath/src/nearzero.c \
- ext/bcmath/libbcmath/src/neg.c \
- ext/bcmath/libbcmath/src/num2long.c \
- ext/bcmath/libbcmath/src/num2str.c \
- ext/bcmath/libbcmath/src/outofmem.c \
- ext/bcmath/libbcmath/src/output.c \
- ext/bcmath/libbcmath/src/raise.c \
- ext/bcmath/libbcmath/src/raisemod.c \
- ext/bcmath/libbcmath/src/recmul.c \
- ext/bcmath/libbcmath/src/rmzero.c \
- ext/bcmath/libbcmath/src/rt.c \
- ext/bcmath/libbcmath/src/sqrt.c \
- ext/bcmath/libbcmath/src/str2num.c \
- ext/bcmath/libbcmath/src/sub.c \
- ext/bcmath/libbcmath/src/zero.c \
- ext/calendar/cal_unix.c \
- ext/calendar/calendar.c \
- ext/calendar/dow.c \
- ext/calendar/easter.c \
- ext/calendar/french.c \
- ext/calendar/gregor.c \
- ext/calendar/jewish.c \
- ext/calendar/julian.c \
- ext/ftp/ftp.c \
- ext/ftp/php_ftp.c \
- ext/mcal/php_mcal.c \
- ext/pcre/php_pcre.c \
- ext/pcre/pcrelib/chartables.c \
- ext/pcre/pcrelib/get.c \
- ext/pcre/pcrelib/maketables.c \
- ext/pcre/pcrelib/pcre.c \
- ext/pcre/pcrelib/pcreposix.c \
- ext/pcre/pcrelib/study.c \
- ext/session/mod_files.c \
- ext/session/mod_mm.c \
- ext/session/mod_user.c \
- ext/session/session.c \
- ext/snmp/snmp.c \
- ext/standard/aggregation.c \
- ext/standard/array.c \
- ext/standard/assert.c \
- ext/standard/base64.c \
- ext/standard/basic_functions.c \
- ext/standard/browscap.c \
- ext/standard/crc32.c \
- ext/standard/credits.c \
- ext/standard/css.c \
- ext/standard/cyr_convert.c \
- ext/standard/datetime.c \
- ext/standard/dir.c \
- ext/standard/dl.c \
- ext/standard/dns.c \
- ext/standard/exec.c \
- ext/standard/file.c \
- ext/standard/filestat.c \
- ext/standard/filters.c \
- ext/standard/flock_compat.c \
- ext/standard/formatted_print.c \
- ext/standard/fsock.c \
- ext/standard/ftok.c \
- ext/standard/ftp_fopen_wrapper.c \
- ext/standard/head.c \
- ext/standard/html.c \
- ext/standard/http_fopen_wrapper.c \
- ext/standard/image.c \
- ext/standard/incomplete_class.c \
- ext/standard/info.c \
- ext/standard/iptc.c \
- ext/standard/lcg.c \
- ext/standard/levenshtein.c \
- ext/standard/link.c \
- ext/standard/mail.c \
- ext/standard/math.c \
- ext/standard/md5.c \
- ext/standard/metaphone.c \
- ext/standard/microtime.c \
- ext/standard/pack.c \
- ext/standard/pageinfo.c \
- ext/standard/parsedate.c \
- ext/standard/php_fopen_wrapper.c \
- ext/standard/quot_print.c \
- ext/standard/rand.c \
- ext/standard/reg.c \
- ext/standard/scanf.c \
- ext/standard/sha1.c \
- ext/standard/soundex.c \
- ext/standard/string.c \
- ext/standard/strnatcmp.c \
- ext/standard/type.c \
- ext/standard/uniqid.c \
- ext/standard/url.c \
- ext/standard/url_scanner.c \
- ext/standard/url_scanner_ex.c \
- ext/standard/user_filters.c \
- ext/standard/var.c \
- ext/standard/var_unserializer.c \
- ext/standard/versioning.c \
- main/fopen_wrappers.c \
- main/internal_functions_nw.c \
- main/main.c \
- main/memory_streams.c \
- main/mergesort.c \
- main/network.c \
- main/output.c \
- main/php_content_types.c \
- main/php_ini.c \
- main/php_logos.c \
- main/php_open_temporary_file.c \
- main/php_sprintf.c \
- main/php_ticks.c \
- main/php_variables.c \
- main/reentrancy.c \
- main/rfc1867.c \
- main/safe_mode.c \
- main/SAPI.c \
- main/snprintf.c \
- main/spprintf.c \
- main/streams.c \
- main/strlcat.c \
- main/strlcpy.c \
- main/user_streams.c \
- netware/geterrnoptr.c \
- netware/mktemp.c \
- netware/pipe.c \
- netware/pwd.c \
- netware/start.c \
- netware/time_nw.c \
- netware/wfile.c \
- regex/regcomp.c \
- regex/regerror.c \
- regex/regexec.c \
- regex/regfree.c \
-# ext/standard/crypt.c \
-# ext/com/COM.c \
-# ext/com/conversion.c \
-# ext/odbc/php_odbc.c \
-# ext/snmp/winsnmp.c \
-# netware/winutil.c \
-# netware/registry.c \
-# main/alloca.c \
-# ext/wddx/wddx.c \
-# netware/readdir.c \
-
-WIN32_C_SRC = sendmail.c \
-
-
-CPP_SRC_NODIR = $(notdir $(CPP_SRC))
-C_SRC_NODIR = $(notdir $(C_SRC))
-SRC_DIR = $(dir $(CPP_SRC) $(C_SRC))
-
-# Library files
-LIBRARY = $(PROJECT_ROOT)/Zend/$(BUILD)/Zend.lib $(PROJECT_ROOT)/TSRM/$(BUILD)/TSRM.lib
-
-# Destination directories and files
-OBJ_DIR = $(BUILD)
-FINAL_DIR = $(BUILD)
-MAP_FILE = $(FINAL_DIR)\$(MODULE_NAME).map
-OBJECTS = $(join $(SRC_DIR), $(addprefix $(OBJ_DIR)/,$(CPP_SRC_NODIR:.c=.obj) $(C_SRC_NODIR:.c=.obj)))
-WIN32_OBJECTS = $(addprefix $(OBJ_DIR)/,$(WIN32_C_SRC:.c=.obj))
-DEPDS = $(join $(SRC_DIR), $(addprefix $(OBJ_DIR)/,$(CPP_SRC_NODIR:.c=.d) $(C_SRC_NODIR:.c=.d)))
-
-# Binary file
-ifndef BINARY
- BINARY=$(FINAL_DIR)\$(MODULE_NAME).nlm
-endif
-
-# Compile flags
-C_FLAGS += -c -maxerrors 25 -msgstyle gcc
-C_FLAGS += -wchar_t on -bool on
-C_FLAGS += -relax_pointers # To remove type-casting errors
-C_FLAGS += -processor Pentium
-C_FLAGS += -nostdinc -nosyspath
-C_FLAGS += -DNETWARE -D__BIT_TYPES_DEFINED__ -DZTS
-C_FLAGS += -DPHP5DLLTS_EXPORTS -DPHP_EXPORTS -DLIBZEND_EXPORTS -DTSRM_EXPORTS -DSAPI_EXPORTS
-C_FLAGS += -DHAVE_SYS_TIME_H -DHAVE_STRUCT_FLOCK -DVIRTUAL_DIR -DHAVE_TZNAME
-C_FLAGS += -DHAVE_DLFCN_H -DHAVE_LIBDL
-C_FLAGS += -DCLIB_STAT_PATCH # stat patch
-C_FLAGS += -DNEW_LIBC -DHAVE_ARPA_INET_H=1 -DHAVE_NETINET_IN_H=1 -DHAVE_INET_ATON=1
-
-C_FLAGS += -DLINK_SIZE=2 # Added for the new definition in ext\pcre\pcrelib\internal.h
-# Below added for the file ext\pcre\pcrelib\pcreposix.c and
-# the default value is what is defined in the changelog file
-C_FLAGS += -DPOSIX_MALLOC_THRESHOLD=5
-
-C_FLAGS += -I. -Imain -Inetware -Iregex -IZend -ITSRM
-C_FLAGS += -Iext/standard -Iext/mcal -Iext/pcre -Iext/pcre/pcrelib
-C_FLAGS += -Iext/bcmath -Iext/bcmath/libbcmath/src
-C_FLAGS += -Iext/odbc -Iext/session -Iext/ftp -Iext/wddx -Iext/calendar -Iext/snmp
-C_FLAGS += -I- -Inetware -I$(SDK_DIR)/include -I$(MWCIncludes) # netware added for special SYS/STAT.H : Venkat(6/2/02)
-C_FLAGS += -Iwin32
-C_FLAGS += -I$(SDK_DIR)/include/winsock # Added for socket calls
-
-
-# Extra stuff based on debug / release builds
-ifeq '$(BUILD)' 'debug'
- SYM_FILE = $(FINAL_DIR)\$(MODULE_NAME).sym
- C_FLAGS += -inline smart -sym on -sym codeview4 -sym internal -opt off -opt intrinsics
- C_FLAGS += -D_DEBUG -DZEND_DEBUG=1
- LD_FLAGS += -sym codeview4 -sym internal -osym $(SYM_FILE)
- export MWLibraryFiles=$(SDK_DIR)/imports/libcpre.o;mwcrtl.lib
-else
- C_FLAGS += -opt speed -inline on -inline auto -sym off -DZEND_DEBUG=0
- LD_FLAGS += -sym off
- export MWLibraryFiles=$(SDK_DIR)/imports/libcpre.o;mwcrtl.lib
-endif
-
-# Dependencies
-MODULE = LibC
-IMPORT = @$(SDK_DIR)/imports/libc.imp \
- @$(SDK_DIR)/imports/ws2nlm.imp \
- @$(MPK_DIR)/import/mpkOrg.imp
-EXPORT = @$(PROJECT_ROOT)/netware/phplib.imp
-API = NXGetEnvCount \
- NXCopyEnv \
- OutputToScreen \
- bsd_fd_set
-
-
-# Virtual paths
-vpath %.cpp .
-vpath %.c . win32
-vpath %.obj $(OBJ_DIR)
-
-
-all: prebuild project
-
-.PHONY: all
-
-prebuild:
- @if not exist main\$(OBJ_DIR) md main\$(OBJ_DIR)
- @if not exist regex\$(OBJ_DIR) md regex\$(OBJ_DIR)
- @if not exist netware\$(OBJ_DIR) md netware\$(OBJ_DIR)
- @if not exist ext\standard\$(OBJ_DIR) md ext\standard\$(OBJ_DIR)
- @if not exist ext\bcmath\$(OBJ_DIR) md ext\bcmath\$(OBJ_DIR)
- @if not exist ext\bcmath\libbcmath\src\$(OBJ_DIR) md ext\bcmath\libbcmath\src\$(OBJ_DIR)
- @if not exist ext\mcal\$(OBJ_DIR) md ext\mcal\$(OBJ_DIR)
- @if not exist ext\pcre\$(OBJ_DIR) md ext\pcre\$(OBJ_DIR)
- @if not exist ext\pcre\pcrelib\$(OBJ_DIR) md ext\pcre\pcrelib\$(OBJ_DIR)
- @if not exist ext\odbc\$(OBJ_DIR) md ext\odbc\$(OBJ_DIR)
- @if not exist ext\session\$(OBJ_DIR) md ext\session\$(OBJ_DIR)
- @if not exist ext\ftp\$(OBJ_DIR) md ext\ftp\$(OBJ_DIR)
- @if not exist ext\wddx\$(OBJ_DIR) md ext\wddx\$(OBJ_DIR)
- @if not exist ext\calendar\$(OBJ_DIR) md ext\calendar\$(OBJ_DIR)
- @if not exist ext\snmp\$(OBJ_DIR) md ext\snmp\$(OBJ_DIR)
- @if not exist $(FINAL_DIR) md $(FINAL_DIR)
-
-project: $(BINARY) $(MESSAGE)
- @echo Build complete.
-
-%.d: ../%.c
- @echo Building Dependencies for $(<F)
- @$(CC) -M $< $(C_FLAGS) -o $@
-
-%.obj: ../%.c
- @echo Compiling $?...
-# writing the flags to a file. Otherwise fails on win95 due too many characters in command line.
- @echo $(wordlist 1, 20, $(C_FLAGS)) > $(basename $(OBJ_DIR)\$(notdir $@)).cfg
- @echo $(wordlist 21, 40, $(C_FLAGS)) >> $(basename $(OBJ_DIR)\$(notdir $@)).cfg
- @echo $(wordlist 41, 60, $(C_FLAGS)) >> $(basename $(OBJ_DIR)\$(notdir $@)).cfg
- @echo $(wordlist 61, 80, $(C_FLAGS)) >> $(basename $(OBJ_DIR)\$(notdir $@)).cfg
- @$(CC) $< @$(basename $(OBJ_DIR)\$(notdir $@)).cfg -o $@
- @del $(basename $(OBJ_DIR)\$(notdir $@)).cfg
-
-
-$(BINARY): $(OBJECTS) $(WIN32_OBJECTS) $(LIBRARY)
- @echo Import $(IMPORT) > $(basename $@).def
-ifdef API
- @echo Import $(API) >> $(basename $@).def
-endif
- @echo Module $(MODULE) >> $(basename $@).def
-ifdef EXPORT
- @echo Export $(EXPORT) >> $(basename $@).def
-endif
- @echo AutoUnload >> $(basename $@).def
-ifeq '$(BUILD)' 'debug'
- @echo Debug >> $(basename $@).def
-endif
- @echo Flag_On 0x00000008 >> $(basename $@).def
- @echo Start _LibCPrelude >> $(basename $@).def
- @echo Exit _LibCPostlude >> $(basename $@).def
-
- $(MPKTOOL) $(XDCFLAGS) $(basename $@).xdc
- @echo xdcdata $(basename $@).xdc >> $(basename $@).def
-
- @echo Linking $@...
- @echo $(LD_FLAGS) -commandfile $(basename $@).def > $(basename $@).link
-ifdef LIBRARY
- @echo $(LIBRARY) >> $(basename $@).link
-endif
- @echo $(wordlist 1, 10, $(OBJECTS)) >> $(basename $@).link
- @echo $(wordlist 11, 20, $(OBJECTS)) >> $(basename $@).link
- @echo $(wordlist 21, 30, $(OBJECTS)) >> $(basename $@).link
- @echo $(wordlist 31, 40, $(OBJECTS)) >> $(basename $@).link
- @echo $(wordlist 41, 50, $(OBJECTS)) >> $(basename $@).link
- @echo $(wordlist 51, 60, $(OBJECTS)) >> $(basename $@).link
- @echo $(wordlist 61, 70, $(OBJECTS)) >> $(basename $@).link
- @echo $(wordlist 71, 80, $(OBJECTS)) >> $(basename $@).link
- @echo $(wordlist 81, 85, $(OBJECTS)) >> $(basename $@).link
- @echo $(wordlist 86, 90, $(OBJECTS)) >> $(basename $@).link
- @echo $(wordlist 91, 95, $(OBJECTS)) >> $(basename $@).link
- @echo $(wordlist 96, 100, $(OBJECTS)) >> $(basename $@).link
- @echo $(wordlist 101, 105, $(OBJECTS)) >> $(basename $@).link
- @echo $(wordlist 106, 110, $(OBJECTS)) >> $(basename $@).link
- @echo $(wordlist 111, 115, $(OBJECTS)) >> $(basename $@).link
- @echo $(wordlist 116, 120, $(OBJECTS)) >> $(basename $@).link
- @echo $(wordlist 121, 125, $(OBJECTS)) >> $(basename $@).link
- @echo $(wordlist 126, 130, $(OBJECTS)) >> $(basename $@).link
- @echo $(wordlist 131, 135, $(OBJECTS)) >> $(basename $@).link
- @echo $(wordlist 136, 140, $(OBJECTS)) >> $(basename $@).link
- @echo $(wordlist 141, 141, $(OBJECTS)) >> $(basename $@).link
-
- @echo $(wordlist 1, 2, $(WIN32_OBJECTS)) >> $(basename $@).link
-
- @$(LINK) @$(basename $@).link
-
-
-.PHONY: clean
-clean: cleansrc cleanobj cleanbin
-
-.PHONY: cleand
-cleand:
- @echo Deleting all dependency files...
- -@del "main\$(OBJ_DIR)\*.d"
- -@del "regex\$(OBJ_DIR)\*.d"
- -@del "netware\$(OBJ_DIR)\*.d"
- -@del "ext\standard\$(OBJ_DIR)\*.d"
- -@del "ext\bcmath\$(OBJ_DIR)\*.d"
- -@del "ext\bcmath\libbcmath\src\$(OBJ_DIR)\*.d"
- -@del "ext\mcal\$(OBJ_DIR)\*.d"
- -@del "ext\pcre\$(OBJ_DIR)\*.d"
- -@del "ext\pcre\pcrelib\$(OBJ_DIR)\*.d"
- -@del "ext\odbc\$(OBJ_DIR)\*.d"
- -@del "ext\session\$(OBJ_DIR)\*.d"
- -@del "ext\ftp\$(OBJ_DIR)\*.d"
- -@del "ext\wddx\$(OBJ_DIR)\*.d"
- -@del "ext\calendar\$(OBJ_DIR)\*.d"
- -@del "ext\snmp\$(OBJ_DIR)\*.d"
-
-.PHONY: cleansrc
-cleansrc:
- @echo Deleting all generated source files...
- -@del "ext\standard\parsedate.c"
- -@del "ext\standard\parsedate.h"
- -@del "ext\standard\parsedate.output"
-
-.PHONY: cleanobj
-cleanobj:
- @echo Deleting all object files...
- -@del "main\$(OBJ_DIR)\*.obj"
- -@del "regex\$(OBJ_DIR)\*.obj"
- -@del "netware\$(OBJ_DIR)\*.obj"
- -@del "ext\standard\$(OBJ_DIR)\*.obj"
- -@del "ext\bcmath\$(OBJ_DIR)\*.obj"
- -@del "ext\bcmath\libbcmath\src\$(OBJ_DIR)\*.obj"
- -@del "ext\mcal\$(OBJ_DIR)\*.obj"
- -@del "ext\pcre\$(OBJ_DIR)\*.obj"
- -@del "ext\pcre\pcrelib\$(OBJ_DIR)\*.obj"
- -@del "ext\odbc\$(OBJ_DIR)\*.obj"
- -@del "ext\session\$(OBJ_DIR)\*.obj"
- -@del "ext\ftp\$(OBJ_DIR)\*.obj"
- -@del "ext\wddx\$(OBJ_DIR)\*.obj"
- -@del "ext\calendar\$(OBJ_DIR)\*.obj"
- -@del "ext\snmp\$(OBJ_DIR)\*.obj"
-
-.PHONY: cleanbin
-cleanbin:
- @echo Deleting binary files...
- -@del "$(FINAL_DIR)\$(MODULE_NAME).nlm"
- @echo Deleting MAP, DEF files, etc....
- -@del "$(FINAL_DIR)\$(MODULE_NAME).map"
- -@del "$(FINAL_DIR)\$(MODULE_NAME).def"
- -@del "$(FINAL_DIR)\$(MODULE_NAME).link"
-ifeq '$(BUILD)' 'debug'
- -@del $(FINAL_DIR)\$(MODULE_NAME).sym
-endif
diff --git a/netware/phptest.ncf b/netware/phptest.ncf
deleted file mode 100644
index 9cb599e194..0000000000
--- a/netware/phptest.ncf
+++ /dev/null
@@ -1 +0,0 @@
-php -q run-tests.php > results.txt \ No newline at end of file
diff --git a/netware/pipe.c b/netware/pipe.c
deleted file mode 100644
index c302fdf3e0..0000000000
--- a/netware/pipe.c
+++ /dev/null
@@ -1,329 +0,0 @@
-/*
- * FILENAME : pipe.c
- * DESCRIPTION : Functions to implement pipes on NetWare.
- * Author : Anantha Kesari H Y, Venkat Raghavan S, Srivathsa M
- *
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include "netware/pipe.h"
-#include "netware/mktemp.h"
-
-
-/* Following definitions unavailable in LibC, hence borrowed from CLib */
-#define P_WAIT 0
-#define P_NOWAIT 1
-
-#define WHITESPACE " \t"
-#define MAX_ARGS 10
-
-
-FILE* popen(const char* commandline, const char* mode)
-{
- int err, count;
- char pszPipestr[32] = {'\0'};
- char *command = NULL, *argv[MAX_ARGS] = {'\0'};
- int fd = -1;
- fd_set myfds;
- wiring_t wiring;
- pid_t pid=0;
- FILE *fp=NULL;
- char *ptr = NULL;
- int ptrLen = 0, argc = 0, i = 0;
-
-
- /* Get a temporary name */
- (void) tmpnam(strecpy(pszPipestr, "PHP/php$pipe/"));
-
- wiring.infd=FD_UNUSED;
- wiring.outfd=FD_UNUSED;
- wiring.errfd=FD_UNUSED;
-
- /* Open a pipe */
- if ( *mode=='r') {
- fd = pipe_open (pszPipestr, O_RDONLY);
- if (fd == -1)
- return NULL;
-
- wiring.outfd=fd;
- } else if (*mode=='w') {
- fd = pipe_open (pszPipestr, O_WRONLY);
- if (fd == -1)
- return NULL;
-
- wiring.infd=fd;
- } else {
- consoleprintf ("Unsupported pipe open mode \n");
- return NULL;
- }
-
- /* Get the file pointer */
- fp = fdopen(fd, mode);
- if (fp == NULL) {
- consoleprintf ("Failure in fdopen \n");
- close (fd);
- return NULL;
- }
-
- /* Separate commandline string into words */
- ptr = strtok((char*)commandline, WHITESPACE);
- ptrLen = strlen(ptr);
-
- /* Get the command */
- command = (char*)malloc(ptrLen + 1);
- if(command == NULL) {
- consoleprintf ("Failure in memory allocation \n");
- close (fd);
- fclose (fp);
- return NULL;
- }
- strcpy (command, ptr);
-
- /* Command as the first argument into prcessve */
- argv[argc] = (char*)malloc(ptrLen + 1);
- if(argv[argc] == NULL) {
- consoleprintf ("Failure in memory allocation \n");
- close (fd);
- fclose (fp);
- if(command) {
- free(command);
- command = NULL;
- }
- return NULL;
- }
- strcpy (argv[argc], ptr);
- argc++;
-
- /* Get more arguments if any to be passed to prcessve */
- ptr = strtok(NULL, WHITESPACE);
- while (ptr && (argc < MAX_ARGS))
- {
- ptrLen = strlen(ptr);
-
- argv[argc] = (char*)malloc(ptrLen + 1);
- if(argv[argc] == NULL) {
- consoleprintf ("Failure in memory allocation \n");
- close (fd);
- fclose (fp);
- if(command) {
- free(command);
- command = NULL;
- }
- return NULL;
- }
- strcpy (argv[argc], ptr);
- argc++;
-
- ptr = strtok(NULL, WHITESPACE);
- }
- argv[argc] = NULL;
-
- FD_ZERO(&myfds);
- FD_SET(fd, &myfds);
-
- pid = processve(command, PROC_CURRENT_SPACE, NULL, &wiring,
- &myfds, NULL, (const char **)argv );
- if (pid == -1) {
- consoleprintf ("Failure in processve call \n");
- close (fd);
- fclose(fp);
- if(command) {
- free(command);
- command = NULL;
- }
- for(i=0; i<argc; i++) {
- if(argv[i]) {
- free(argv[i]);
- argv[i] = NULL;
- }
- }
- return NULL;
- }
-
- close (fd);
- if(command) {
- free(command);
- command = NULL;
- }
- for(i=0; i<argc; i++) {
- if(argv[i]) {
- free(argv[i]);
- argv[i] = NULL;
- }
- }
-
- return fp;
-}
-
-
-int pclose(FILE* stream)
-{
- fclose(stream);
- return 0;
-}
-
-
-
-#if 0
-
-FILE* popen2(const char* commandline, const char* mode)
-{
- int err, count, var, replaced;
- char **env, pszPipestr[32];
- NXVmId_t newVM;
- NXExecEnvSpec_t envSpec;
- char *command = NULL, *argv[MAX_ARGS] = {"\0"};
- NXHandle_t fd;
-
- fd = (NXHandle_t) -1;
-
- count = NXGetEnvCount() + 1; // (add one for NULL)
- env = (char **) NXMemAlloc(sizeof(char *) * count, 0);
-
- if (!env)
- return 0;
-
- err = NXCopyEnv(env, count); // ensure NULL added at end
- if ( *mode='r'){
- (void) tmpnam(strecpy(pszPipestr, "PHPPIPE/stdin/"));
- err = NXFifoOpen(0, pszPipestr, NX_O_RDONLY, 0, &fd);
- if (err)
- return 0;
-
- envSpec.esStdin.ssType = NX_OBJ_CONSOLE;
- envSpec.esStdout.ssType = NX_OBJ_FIFO;
- envSpec.esStdout.ssPath = pszPipestr;
- }
- else if (*mode='w') then{
- (void) tmpnam(strecpy(pszPipestr, "PHPPIPE/stdout/"));
- err = NXFifoOpen(0, instr, NX_O_WRONLY, 0, &fd);
- if (err)
- return 0;
- envSpec.esStdin.ssType = NX_OBJ_FIFO;
- envSpec.esStdout.ssType = NX_OBJ_CONSOLE;
- envSpec.esStdin.ssPath = pszPipestr;
- }
- else
- consoleprintf ("Unsupported pipe open mode \n");
-
-
- /* Separate commandline string into words */
-
- ptr = strtok((char*)commandline, WHITESPACE);
- ptrLen = strlen(ptr);
-
- command = (char*)malloc(ptrLen + 1);
- strcpy (command, ptr);
-
- ptr = strtok(NULL, WHITESPACE);
- while (ptr && (argc < MAX_ARGS))
- {
- ptrLen = strlen(ptr);
-
- argv[argc] = (char*)malloc(ptrLen + 1);
- strcpy (argv[argc], ptr);
-
- argc++;
-
- ptr = strtok(NULL, WHITESPACE);
- }
-/* consoleprintf ("PHP | popen: command = %s\n", command); */
-
- //
-
- envSpec.esArgc = argc;
- envSpec.esArgv = argv;
- envSpec.esEnv = env;
-
- envSpec.esStderr.ssType = NX_OBJ_CONSOLE;
-
- envSpec.esStdin.ssHandle =
- envSpec.esStdout.ssHandle =
- envSpec.esStderr.ssHandle = -1;
-
- envSpec.esStdin.ssPathCtx =
- envSpec.esStdout.ssPathCtx =
- envSpec.esStderr.ssPathCtx = NULL;
-
- envSpec.esStderr.ssPath = NULL;
-
- err = NXVmSpawn(NULL, command, &envSpec, NX_VM_CREATE_DETACHED, &newVM);
- return fd;
-
-}
-
-int pclose2(FILE* stream)
-{
- NXClose(*(NXHandle_t *)stream);
- return 0;
-}
-
-FILE* popen1(const char* commandline, const char* mode)
-{
- char *command = NULL, *argv[MAX_ARGS] = {"\0"};
- char *tempName = "phpXXXXXX.tmp";
- char *filePath = NULL;
- FILE *fp = NULL;
- char *ptr = NULL;
- int ptrLen = 0, argc = 0, i = 0;
-
- /* Check for validity of input parameters */
- if (!commandline || !mode)
- return NULL;
-
- /* Get temporary file name */
- filePath = mktemp(tempName);
- if (!filePath)
- return NULL;
-
- /* Separate commandline string into words */
-
- ptr = strtok((char*)commandline, WHITESPACE);
- ptrLen = strlen(ptr);
-
- command = (char*)malloc(ptrLen + 1);
- strcpy (command, ptr);
-
- ptr = strtok(NULL, WHITESPACE);
- while (ptr && (argc < MAX_ARGS))
- {
- ptrLen = strlen(ptr);
-
- argv[argc] = (char*)malloc(ptrLen + 1);
- strcpy (argv[argc], ptr);
-
- argc++;
-
- ptr = strtok(NULL, WHITESPACE);
- }
-/*consoleprintf ("PHP | popen: command = %s\n", command);*/
- if(strchr(mode,'r') != 0)
- {
- /*spawnvp(P_WAIT, command, argv);*/
-
- fp = fopen(filePath, "r"); /* Get the file handle of the pipe */
- }
- else if(strchr(mode,'w') != 0)
- fp = fopen(filePath, "w"); /* Get the file handle of the pipe */
-
- /* Free resources */
- free (command);
- for (i = 0; i < argc; i++)
- {
-/*consoleprintf ("%s\t", argv[i]);*/
- free (argv[i]);
- }
-/*consoleprintf ("\n");*/
-
- return fp; /* Return the file handle.*/
-}
-
-int pclose1(FILE* stream)
-{
- return (fclose(stream));
-}
-
-# endif
diff --git a/netware/pipe.h b/netware/pipe.h
deleted file mode 100644
index a54c8bf915..0000000000
--- a/netware/pipe.h
+++ /dev/null
@@ -1,11 +0,0 @@
-
-/* pipe related function declarations */
-
-/*#include <unistd.h>*/
-#include <proc.h>
-#include <fcntl.h>
-#include <sys/select.h>
-
-
-FILE* popen(const char* command, const char* mode);
-int pclose(FILE* stream);
diff --git a/netware/postgres_ext.h b/netware/postgres_ext.h
deleted file mode 100644
index 9b79a23f15..0000000000
--- a/netware/postgres_ext.h
+++ /dev/null
@@ -1,45 +0,0 @@
-/*-------------------------------------------------------------------------
- *
- * postgres_ext.h
- *
- * This file contains declarations of things that are visible everywhere
- * in PostgreSQL *and* are visible to clients of frontend interface libraries.
- * For example, the Oid type is part of the API of libpq and other libraries.
- *
- * Declarations which are specific to a particular interface should
- * go in the header file for that interface (such as libpq-fe.h). This
- * file is only for fundamental Postgres declarations.
- *
- * User-written C functions don't count as "external to Postgres."
- * Those function much as local modifications to the backend itself, and
- * use header files that are otherwise internal to Postgres to interface
- * with the backend.
- *
- * $Id$
- *
- *-------------------------------------------------------------------------
- */
-
-#ifndef POSTGRES_EXT_H
-#define POSTGRES_EXT_H
-
-/*
- * Object ID is a fundamental type in Postgres.
- */
-typedef unsigned int Oid;
-
-#define InvalidOid ((Oid) 0)
-
-#define OID_MAX UINT_MAX
-/* you will need to include <limits.h> to use the above #define */
-
-
-/*
- * NAMEDATALEN is the max length for system identifiers (e.g. table names,
- * attribute names, function names, etc.)
- *
- * NOTE that databases with different NAMEDATALEN's cannot interoperate!
- */
-#define NAMEDATALEN 32
-
-#endif
diff --git a/netware/pwd.c b/netware/pwd.c
deleted file mode 100644
index 41861a054f..0000000000
--- a/netware/pwd.c
+++ /dev/null
@@ -1,86 +0,0 @@
-/* pwd.c - Try to approximate UN*X's getuser...() functions under MS-DOS.
- Copyright (C) 1990 by Thorsten Ohl, td12@ddagsi3.bitnet
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 1, or (at your option)
- any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-
- $Header$
- */
-
-/* This 'implementation' is conjectured from the use of this functions in
- the RCS and BASH distributions. Of course these functions don't do too
- much useful things under MS-DOS, but using them avoids many "#ifdef
- MSDOS" in ported UN*X code ... */
-
-#include "php.h" /*php specific */
-/* Need to take care of all the commented stuff later for NetWare */
-/*
-#define WIN32_LEAN_AND_MEAN
-#include <windows.h>
-#include <lmaccess.h>
-*/
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-/*#include <lmapibuf.h>*/
-#include "pwd.h"
-#include "grp.h"
-
-#ifndef THREAD_SAFE
-static struct passwd pw; /* should we return a malloc()'d structure */
-#endif
-static char *home_dir = "."; /* we feel (no|every)where at home */
-static char *login_shell = "not command.com!";
-
-struct passwd *getpwnam(char *name)
-{
- return (struct passwd *) 0;
-}
-
-
-char *getlogin()
-{
-/*
- static char name[256];
- DWORD dw = 256;
- GetUserName(name, &dw);
- return name;
-*/
- return NULL; /* For now */
-}
-
-struct passwd *
- getpwuid(int uid)
-{
- pw.pw_name = getlogin();
- pw.pw_dir = home_dir;
- pw.pw_shell = login_shell;
- pw.pw_uid = 0;
-
- return &pw;
-}
-
-/* Implementation for now */
-int getpid()
-{
- return -1;
-}
-
-/*
- * Local Variables:
- * mode:C
- * ChangeLog:ChangeLog
- * compile-command:make
- * End:
- */
diff --git a/netware/pwd.h b/netware/pwd.h
deleted file mode 100644
index 646d5f33ac..0000000000
--- a/netware/pwd.h
+++ /dev/null
@@ -1,54 +0,0 @@
-/* pwd.h - Try to approximate UN*X's getuser...() functions under MS-DOS.
- Copyright (C) 1990 by Thorsten Ohl, td12@ddagsi3.bitnet
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 1, or (at your option)
- any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-
- */
-
-/* This 'implementation' is conjectured from the use of this functions in
- the RCS and BASH distributions. Of course these functions don't do too
- much useful things under MS-DOS, but using them avoids many "#ifdef
- MSDOS" in ported UN*X code ...
- */
-
-
-#ifndef PWD_H
-#define PWD_H
-
-/* Not available in LibC / SDK header or CodeWarrior header files.
- * So taking from Winsock definitions, which should be OK
- */
-typedef unsigned int DWORD;
-
-struct passwd {
- char *pw_name; /* user name */
- char *pw_passwd; /* encrypted password */
- int pw_uid; /* user uid */
- int pw_gid; /* user gid */
- char *pw_comment; /* comment */
- char *pw_gecos; /* Honeywell login info */
- char *pw_dir; /* home directory */
- char *pw_shell; /* default shell */
-};
-
-extern struct passwd *getpwuid(int);
-extern struct passwd *getpwnam(char *name);
-extern char *getlogin(void);
-
-#ifndef NEW_LIBC
-int getpid();
-#endif
-
-#endif
diff --git a/netware/sendmail_nw.h b/netware/sendmail_nw.h
deleted file mode 100644
index 9d0b7fb73c..0000000000
--- a/netware/sendmail_nw.h
+++ /dev/null
@@ -1,17 +0,0 @@
-
-#ifdef USE_WINSOCK
-/*#include <ws2nlm.h>*/
-#include <novsock2.h>
-#else
-#include <sys/socket.h> /* For struct sockaddr, 'PF_INET' and 'AF_INET' */
-#include <netinet\in.h> /* For struct sockaddr_in */
-#include <netdb.h> /* For struct hostent */
-/*#include <ws2name.h>*/
-#endif /* USE_WINSOCK */
-
-typedef int SOCKET; /* Borrowed from winsock\novsock2.h */
-typedef struct sockaddr_in SOCKADDR_IN;
-typedef struct sockaddr * LPSOCKADDR;
-typedef struct hostent * LPHOSTENT;
-
-#define INVALID_SOCKET (SOCKET)(~0) /* Borrowed from winsock\novsock2.h */
diff --git a/netware/setbuild.bat b/netware/setbuild.bat
deleted file mode 100755
index a1685624ed..0000000000
--- a/netware/setbuild.bat
+++ /dev/null
@@ -1,19 +0,0 @@
-@echo off
-
-if "%1" == "/?" goto USAGE
-
-if "%1" == "d" set BUILD=debug
-if "%1" == "r" set BUILD=release
-
-if "%2" == "1" set APACHE_VER=1.3
-if "%2" == "2" set APACHE_VER=2
-
-goto EXIT
-
-:USAGE
- @echo on
- @echo Usage: setbuild d|r 1|2
- @echo set build type as 'debug' or 'release'
- @echo set Web Server as Apache 1.3.x or Apache 2.0.x
-
-:EXIT \ No newline at end of file
diff --git a/netware/start.c b/netware/start.c
deleted file mode 100644
index 3ce7c51c58..0000000000
--- a/netware/start.c
+++ /dev/null
@@ -1,119 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Novell, Inc. |
- +----------------------------------------------------------------------+
- */
-
-
-#include <library.h>
-#include <netware.h>
-#include <nks/synch.h>
-
-void *gLibHandle = (void *) NULL;
-rtag_t gAllocTag = (rtag_t) NULL;
-NXMutex_t *gLibLock = (NXMutex_t *) NULL;
-int gLibId = 0;
-
-
-int DisposeLibraryData( void *data)
-{
- return 0;
-}
-
-
-int _NonAppStart
-(
- void *NLMHandle,
- void *errorScreen,
- const char *cmdLine,
- const char *loadDirPath,
- size_t uninitializedDataLength,
- void *NLMFileHandle,
- int (*readRoutineP)( int conn, void *fileHandle, size_t offset,
- size_t nbytes, size_t *bytesRead, void *buffer ),
- size_t customDataOffset,
- size_t customDataSize,
- int messageCount,
- const char **messages
-)
-{
- NX_LOCK_INFO_ALLOC(liblock, "Per-Application Data Lock", 0);
-
-#pragma unused(cmdLine)
-#pragma unused(loadDirPath)
-#pragma unused(uninitializedDataLength)
-#pragma unused(NLMFileHandle)
-#pragma unused(readRoutineP)
-#pragma unused(customDataOffset)
-#pragma unused(customDataSize)
-#pragma unused(messageCount)
-#pragma unused(messages)
-
-/* Here we process our command line, post errors (to the error screen),
- * perform initializations and anything else we need to do before being able
- * to accept calls into us. If we succeed, we return non-zero and the NetWare
- * Loader will leave us up, otherwise we fail to load and get dumped.
- */
-/**
- gAllocTag = AllocateResourceTag(NLMHandle,
- "<library-name> memory allocations", AllocSignature);
- if (!gAllocTag) {
- OutputToScreen(errorScreen, "Unable to allocate resource tag for "
- "library memory allocations.\n");
- return -1;
- }
-**/
- gLibId = register_library(DisposeLibraryData);
- if (gLibId == -1) {
- OutputToScreen(errorScreen, "Unable to register library with kernel.\n");
- return -1;
- }
-
- gLibHandle = NLMHandle;
-
- gLibLock = NXMutexAlloc(0, 0, &liblock);
- if (!gLibLock) {
- OutputToScreen(errorScreen, "Unable to allocate library data lock.\n");
- return -1;
- }
-
- return 0;
-}
-
-
-void _NonAppStop( void )
-{
-/* Here we clean up any resources we allocated. Resource tags is a big part
- * of what we created, but NetWare doesn't ask us to free those.
- */
- (void) unregister_library(gLibId);
- NXMutexFree(gLibLock);
-}
-
-
-int _NonAppCheckUnload( void )
-{
-/* This function cannot be the first in the file for if the file is linked
- * first, then the check-unload function's offset will be nlmname.nlm+0
- * which is how to tell that there isn't one. When the check function is
- * first in the linked objects, it is ambiguous. For this reason, we will
- * put it inside this file after the stop function.
- *
- * Here we check to see if it's alright to ourselves to be unloaded. If not,
- * we return a non-zero value. Right now, there isn't any reason not to allow
- * it.
- */
- return 0;
-}
diff --git a/netware/sys/stat.h b/netware/sys/stat.h
deleted file mode 100644
index e6f741cc5e..0000000000
--- a/netware/sys/stat.h
+++ /dev/null
@@ -1,147 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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. |
- +----------------------------------------------------------------------+
- | Authors: Novell, Inc. |
- +----------------------------------------------------------------------+
-*/
-
-
-#ifndef __sys_stat_h__
-#define __sys_stat_h__
-
-
-#include <time.h>
-#include <stddef.h>
-#include <sys/mode.h>
-#include <sys/time.h>
-
-#include <pshpack1.h>
-
-
-#ifdef CLIB_STAT_PATCH
-
-/***************** stat structure taken from CLib and modified ***************/
-struct stat
-{
- long st_dev; /* volume number */ /* dev_t replaced by long */
- MACHINE_WORD st_ino; /* directory entry number of the st_name */ /* ino_t replaced by MACHINE_WORD */
- unsigned short st_mode; /* emulated file mode */
- unsigned short st_pad1; /* reserved for alignment */
- unsigned long st_nlink; /* count of hard links (always 1) */
- unsigned long st_uid; /* object id of owner */
- unsigned long st_gid; /* group-id (always 0) */
- long st_rdev; /* device type (always 0) */ /* dev_t replaced by long */
- off_t st_size; /* total file size--files only */
- time_t st_atime; /* last access date--files only */
- time_t st_mtime; /* last modify date and time */
- time_t st_ctime; /* POSIX: last status change time... */
- /* ...NetWare: creation date/time */
- time_t st_btime; /* last archived date and time */
- unsigned long st_attr; /* file attributes */
- unsigned long st_archivedID; /* user/object ID of last archive */
- unsigned long st_updatedID; /* user/object ID of last update */
- unsigned short st_inheritedRightsMask; /* inherited rights mask */
- unsigned short st_pad2; /* reserved for alignment */
- unsigned int st_originatingNameSpace; /* namespace of creation */
- size_t st_blksize; /* block size for allocation--files only */
- size_t st_blocks; /* count of blocks allocated to file */
- unsigned int st_flags; /* user-defined flags */
- unsigned long st_spare[4]; /* for future use */
- unsigned char st_name[255+1];/* TARGET_NAMESPACE name */
-};
-/***************** stat structure taken from CLib and modified ***************/
-
-struct stat_libc
-{
- uint32_t st_userspec; /* untouched by stat() */
- uint32_t st_flags; /* flags for this entry */
- mode_t st_mode; /* emulated file mode */
- uint32_t st_spare1;
- uint64_t st_gen; /* generation number of inode */
- ino_t st_ino; /* directory entry number */
- dev_t st_dev; /* volume number */
- dev_t st_rdev; /* device type (always 0) */
- off64_t st_size; /* total file size */
- uint64_t st_spare2;
- blkcnt_t st_blocks; /* count of blocks allocated to file */
- blksize_t st_blksize; /* block size for allocation--files only */
- nlink_t st_nlink; /* count of hard links (always 1) */
- uint32_t st_spare3[3];
- uid_t st_uid; /* owner (object) identity */
- gid_t st_gid; /* group-id (always 0) */
- uid_t st_bid; /* identity of last archiver */
- uid_t st_mid; /* identity of last updator */
- timespec_t st_atime; /* last access date--files only */
- timespec_t st_mtime; /* last modify date and time */
- timespec_t st_ctime; /* last file attributes modification */
- timespec_t st_btime; /* last archived date and time */
- uint64_t st_spare4[44];
-}; /* sizeof(struct dirent) == 0x200 (512.) */
-
-#else /* CLIB_STAT_PATCH */
-
-struct stat
-{
- uint32_t st_userspec; /* untouched by stat() */
- uint32_t st_flags; /* flags for this entry */
- mode_t st_mode; /* emulated file mode */
- uint32_t st_spare1;
- uint64_t st_gen; /* generation number of inode */
- ino_t st_ino; /* directory entry number */
- dev_t st_dev; /* volume number */
- dev_t st_rdev; /* device type (always 0) */
- off64_t st_size; /* total file size */
- uint64_t st_spare2;
- blkcnt_t st_blocks; /* count of blocks allocated to file */
- blksize_t st_blksize; /* block size for allocation--files only */
- nlink_t st_nlink; /* count of hard links (always 1) */
- uint32_t st_spare3[3];
- uid_t st_uid; /* owner (object) identity */
- gid_t st_gid; /* group-id (always 0) */
- uid_t st_bid; /* identity of last archiver */
- uid_t st_mid; /* identity of last updator */
- timespec_t st_atime; /* last access date--files only */
- timespec_t st_mtime; /* last modify date and time */
- timespec_t st_ctime; /* last file attributes modification */
- timespec_t st_btime; /* last archived date and time */
- uint64_t st_spare4[44];
-}; /* sizeof(struct dirent) == 0x200 (512.) */
-
-#endif /* CLIB_STAT_PATCH */
-
-
-#include <poppack.h>
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
-int chmod ( const char *path, mode_t mode );
-int fchmod( int fildes, mode_t mode );
-int fstat ( int fildes, struct stat *buf );
-int mkdir ( const char *pathname, mode_t mode );
-int mkfifo( const char *pathname, mode_t mode );
-int stat ( const char *path, struct stat *buf );
-mode_t umask ( mode_t cmask );
-
-#ifdef __cplusplus
-}
-#endif
-
-#define stat64 stat /* same structure and function do both */
-#define fstat64 fstat /* same function does both */
-
-
-#endif /* __sys_stat_h__ */
diff --git a/netware/sysexits.h b/netware/sysexits.h
deleted file mode 100644
index 37246b6e75..0000000000
--- a/netware/sysexits.h
+++ /dev/null
@@ -1,114 +0,0 @@
-/*
- * 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.
- * 4. 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.
- *
- * @(#)sysexits.h 8.1 (Berkeley) 6/2/93
- */
-
-#ifndef _SYSEXITS_H
-#define _SYSEXITS_H 1
-
-/*
- * SYSEXITS.H -- Exit status codes for system programs.
- *
- * This include file attempts to categorize possible error
- * exit statuses for system programs, notably delivermail
- * and the Berkeley network.
- *
- * Error numbers begin at EX__BASE to reduce the possibility of
- * clashing with other exit statuses that random programs may
- * already return. The meaning of the codes is approximately
- * as follows:
- *
- * EX_USAGE -- The command was used incorrectly, e.g., with
- * the wrong number of arguments, a bad flag, a bad
- * syntax in a parameter, or whatever.
- * EX_DATAERR -- The input data was incorrect in some way.
- * This should only be used for user's data & not
- * system files.
- * EX_NOINPUT -- An input file (not a system file) did not
- * exist or was not readable. This could also include
- * errors like "No message" to a mailer (if it cared
- * to catch it).
- * EX_NOUSER -- The user specified did not exist. This might
- * be used for mail addresses or remote logins.
- * EX_NOHOST -- The host specified did not exist. This is used
- * in mail addresses or network requests.
- * EX_UNAVAILABLE -- A service is unavailable. This can occur
- * if a support program or file does not exist. This
- * can also be used as a catchall message when something
- * you wanted to do doesn't work, but you don't know
- * why.
- * EX_SOFTWARE -- An internal software error has been detected.
- * This should be limited to non-operating system related
- * errors as possible.
- * EX_OSERR -- An operating system error has been detected.
- * This is intended to be used for such things as "cannot
- * fork", "cannot create pipe", or the like. It includes
- * things like getuid returning a user that does not
- * exist in the passwd file.
- * EX_OSFILE -- Some system file (e.g., /etc/passwd, /etc/utmp,
- * etc.) does not exist, cannot be opened, or has some
- * sort of error (e.g., syntax error).
- * EX_CANTCREAT -- A (user specified) output file cannot be
- * created.
- * EX_IOERR -- An error occurred while doing I/O on some file.
- * EX_TEMPFAIL -- temporary failure, indicating something that
- * is not really an error. In sendmail, this means
- * that a mailer (e.g.) could not create a connection,
- * and the request should be reattempted later.
- * EX_PROTOCOL -- the remote system returned something that
- * was "not possible" during a protocol exchange.
- * EX_NOPERM -- You did not have sufficient permission to
- * perform the operation. This is not intended for
- * file system problems, which should use NOINPUT or
- * CANTCREAT, but rather for higher level permissions.
- */
-
-#define EX_OK 0 /* successful termination */
-
-#define EX__BASE 64 /* base value for error messages */
-
-#define EX_USAGE 64 /* command line usage error */
-#define EX_DATAERR 65 /* data format error */
-#define EX_NOINPUT 66 /* cannot open input */
-#define EX_NOUSER 67 /* addressee unknown */
-#define EX_NOHOST 68 /* host name unknown */
-#define EX_UNAVAILABLE 69 /* service unavailable */
-#define EX_SOFTWARE 70 /* internal software error */
-#define EX_OSERR 71 /* system error (e.g., can't fork) */
-#define EX_OSFILE 72 /* critical OS file missing */
-#define EX_CANTCREAT 73 /* can't create (user) output file */
-#define EX_IOERR 74 /* input/output error */
-#define EX_TEMPFAIL 75 /* temp failure; user is invited to retry */
-#define EX_PROTOCOL 76 /* remote error in protocol */
-#define EX_NOPERM 77 /* permission denied */
-#define EX_CONFIG 78 /* configuration error */
-
-#define EX__MAX 78 /* maximum listed value */
-
-#endif /* sysexits.h */
diff --git a/netware/time_nw.c b/netware/time_nw.c
deleted file mode 100644
index 195f18cdd9..0000000000
--- a/netware/time_nw.c
+++ /dev/null
@@ -1,246 +0,0 @@
-
-/*****************************************************************************
- * *
- * DH_TIME.C *
- * *
- * Freely redistributable and modifiable. Use at your own risk. *
- * *
- * Copyright 1994 The Downhill Project *
- *
- * Modified by Shane Caraveo for use with PHP
- *
- *****************************************************************************/
-
-/* $Id$ */
-
- /**
- *
- * 04-Feb-2001
- * - Added patch by "Vanhanen, Reijo" <Reijo.Vanhanen@helsoft.fi>
- * Improves accuracy of msec
- */
-
-/* Include stuff ************************************************************ */
-
-#include "time_nw.h"
-#include "unistd.h"
-#include "signal.h"
-/*#include <winbase.h>
-#include <mmsystem.h>*/
-#include <errno.h>
-/*
-int getfilesystemtime(struct timeval *time_Info)
-{
-FILETIME ft;
-__int64 ff;
-
- GetSystemTimeAsFileTime(&ft); *//* 100 ns blocks since 01-Jan-1641 *//*
- *//* resolution seems to be 0.01 sec *//*
- ff = *(__int64*)(&ft);
- time_Info->tv_sec = (int)(ff/(__int64)10000000-(__int64)11644473600);
- time_Info->tv_usec = (int)(ff % 10000000)/10;
- return 0;
-}
-*/
-
-
-int gettimeofday(struct timeval *time_Info, struct timezone *timezone_Info)
-{
-#ifdef NETWARE
- return 0;
-#else
- static struct timeval starttime = {0, 0};
- static __int64 lasttime = 0;
- static __int64 freq = 0;
- __int64 timer;
- LARGE_INTEGER li;
- BOOL b;
- double dt;
-
- /* Get the time, if they want it */
- if (time_Info != NULL) {
- if (starttime.tv_sec == 0) {
- b = QueryPerformanceFrequency(&li);
- if (!b) {
- starttime.tv_sec = -1;
- }
- else {
- freq = li.QuadPart;
- b = QueryPerformanceCounter(&li);
- if (!b) {
- starttime.tv_sec = -1;
- }
- else {
- getfilesystemtime(&starttime);
- timer = li.QuadPart;
- dt = (double)timer/freq;
- starttime.tv_usec -= (int)((dt-(int)dt)*1000000);
- if (starttime.tv_usec < 0) {
- starttime.tv_usec += 1000000;
- --starttime.tv_sec;
- }
- starttime.tv_sec -= (int)dt;
- }
- }
- }
- if (starttime.tv_sec > 0) {
- b = QueryPerformanceCounter(&li);
- if (!b) {
- starttime.tv_sec = -1;
- }
- else {
- timer = li.QuadPart;
- if (timer < lasttime) {
- getfilesystemtime(time_Info);
- dt = (double)timer/freq;
- starttime = *time_Info;
- starttime.tv_usec -= (int)((dt-(int)dt)*1000000);
- if (starttime.tv_usec < 0) {
- starttime.tv_usec += 1000000;
- --starttime.tv_sec;
- }
- starttime.tv_sec -= (int)dt;
- }
- else {
- lasttime = timer;
- dt = (double)timer/freq;
- time_Info->tv_sec = starttime.tv_sec + (int)dt;
- time_Info->tv_usec = starttime.tv_usec + (int)((dt-(int)dt)*1000000);
- if (time_Info->tv_usec > 1000000) {
- time_Info->tv_usec -= 1000000;
- ++time_Info->tv_sec;
- }
- }
- }
- }
- if (starttime.tv_sec < 0) {
- getfilesystemtime(time_Info);
- }
-
- }
- /* Get the timezone, if they want it */
- if (timezone_Info != NULL) {
- _tzset();
- timezone_Info->tz_minuteswest = _timezone;
- timezone_Info->tz_dsttime = _daylight;
- }
- /* And return */
- return 0;
-#endif
-}
-
-
-/* this usleep isnt exactly accurate but should do ok */
-/*
-void usleep(unsigned int useconds)
-{
-struct timeval tnow, tthen, t0;
-
- gettimeofday(&tthen, NULL);
- t0 = tthen;
- tthen.tv_usec += useconds;
- while (tthen.tv_usec > 1000000) {
- tthen.tv_usec -= 1000000;
- tthen.tv_sec++;
- }
-
- if (useconds > 10000) {
- useconds -= 10000;
- Sleep(useconds/1000);
- }
-
- while (1) {
- gettimeofday(&tnow, NULL);
- if (tnow.tv_sec > tthen.tv_sec) {
- break;
- }
- if (tnow.tv_sec == tthen.tv_sec) {
- if (tnow.tv_usec > tthen.tv_usec) {
- break;
- }
- }
- }
-}
-*/
-
-#ifdef HAVE_SETITIMER
-
-/*
-#ifndef THREAD_SAFE
-unsigned int proftimer, virttimer, realtimer;
-extern LPMSG phpmsg;
-#endif
-
-struct timer_msg {
- int signal;
- unsigned int threadid;
-};
-
-
-LPTIMECALLBACK setitimer_timeout(UINT uTimerID, UINT info, DWORD dwUser, DWORD dw1, DWORD dw2)
-{
- struct timer_msg *msg = (struct timer_msg *) info;
-
- if (msg) {
- raise((int) msg->signal);
- PostThreadMessage(msg->threadid,
- WM_NOTIFY, msg->signal, 0);
- free(msg);
- }
- return 0;
-}
-
-int setitimer(int which, const struct itimerval *value, struct itimerval *ovalue)
-{
- int timeout = value->it_value.tv_sec * 1000 + value->it_value.tv_usec;
- int repeat = TIME_ONESHOT;
-*/
- /*make sure the message queue is initialized *//*
- PeekMessage(phpmsg, NULL, WM_USER, WM_USER, PM_NOREMOVE);
- if (timeout > 0) {
- struct timer_msg *msg = malloc(sizeof(struct timer_msg));
- msg->threadid = GetCurrentThreadId();
- if (!ovalue) {
- repeat = TIME_PERIODIC;
- }
- switch (which) {
- case ITIMER_REAL:
- msg->signal = SIGALRM;
- realtimer = timeSetEvent(timeout, 100, (LPTIMECALLBACK) setitimer_timeout, (UINT) msg, repeat);
- break;
- case ITIMER_VIRT:
- msg->signal = SIGVTALRM;
- virttimer = timeSetEvent(timeout, 100, (LPTIMECALLBACK) setitimer_timeout, (UINT) msg, repeat);
- break;
- case ITIMER_PROF:
- msg->signal = SIGPROF;
- proftimer = timeSetEvent(timeout, 100, (LPTIMECALLBACK) setitimer_timeout, (UINT) msg, repeat);
- break;
- default:
- errno = EINVAL;
- return -1;
- break;
- }
- } else {
- switch (which) {
- case ITIMER_REAL:
- timeKillEvent(realtimer);
- break;
- case ITIMER_VIRT:
- timeKillEvent(virttimer);
- break;
- case ITIMER_PROF:
- timeKillEvent(proftimer);
- break;
- default:
- errno = EINVAL;
- return -1;
- break;
- }
- }
-
-
- return 0;
-}
-*/
-#endif
diff --git a/netware/time_nw.h b/netware/time_nw.h
deleted file mode 100644
index c67065fdf2..0000000000
--- a/netware/time_nw.h
+++ /dev/null
@@ -1,57 +0,0 @@
-/*****************************************************************************
- * *
- * sys/time.h *
- * *
- * Freely redistributable and modifiable. Use at your own risk. *
- * *
- * Copyright 1994 The Downhill Project *
- *
- * Modified by Shane Caraveo for PHP
- *
- *****************************************************************************/
-#ifndef TIME_H
-#define TIME_H
-
-/* Include stuff ************************************************************ */
-#ifdef USE_WINSOCK
-/*#include <ws2nlm.h>*/
-#include <novsock2.h>
-#else
-#include <sys/socket.h>
-#endif
-#include <time.h>
-
-/*
-Commented out most of the stuff for now, since we dunno the utility right now
-*/
-
-/* Struct stuff ************************************************************* */
-/*
-struct {
- int tz_minuteswest;
- int tz_dsttime;
-} timezone;
-*/
-/*
-struct {
- struct timeval it_interval; *//* next value *//*
- struct timeval it_value; *//* current value *//*
-} itimerval;
-*/
-#define ITIMER_REAL 0 /*generates sigalrm */
-#define ITIMER_VIRTUAL 1 /*generates sigvtalrm */
-#define ITIMER_VIRT 1 /*generates sigvtalrm */
-#define ITIMER_PROF 2 /*generates sigprof */
-
-/* Prototype stuff ********************************************************** */
-/*
-extern int gettimeofday(struct timeval *time_Info, struct timezone *timezone_Info);
-*/
-
-/* setitimer operates at 100 millisecond resolution */
-/*
-extern int setitimer(int which, const struct itimerval *value,
- struct itimerval *ovalue);
-*/
-
-#endif
diff --git a/netware/tsrm.mak b/netware/tsrm.mak
deleted file mode 100644
index d0088ecb4a..0000000000
--- a/netware/tsrm.mak
+++ /dev/null
@@ -1,109 +0,0 @@
-# Temporarily here -- later may go into some batch file
-# which will set this as an environment variable
-PROJECT_ROOT = ..
-
-# Module details
-MODULE_NAME = TSRM
-
-#include the common settings
-include $(PROJECT_ROOT)/netware/common.mif
-
-# Extensions of all input and output files
-.SUFFIXES:
-.SUFFIXES: .nlm .lib .obj .cpp .c .msg .mlc .mdb .xdc .d
-
-# Source files
-CPP_SRC =
-C_SRC = TSRM.c \
- tsrm_nw.c \
- tsrm_strtok_r.c \
- tsrm_virtual_cwd.c
-
-# Destination directories and files
-OBJ_DIR = $(BUILD)
-FINAL_DIR = $(BUILD)
-OBJECTS = $(addprefix $(OBJ_DIR)/,$(CPP_SRC:.cpp=.obj) $(C_SRC:.c=.obj))
-DEPDS = $(addprefix $(OBJ_DIR)/,$(CPP_SRC:.cpp=.d) $(C_SRC:.c=.d))
-
-# Binary file
-ifndef BINARY
- BINARY=$(FINAL_DIR)\$(MODULE_NAME).lib
-endif
-
-# Compile flags
-C_FLAGS = -c -maxerrors 25 -msgstyle gcc
-C_FLAGS += -wchar_t on -bool on
-C_FLAGS += -processor Pentium
-C_FLAGS += -nostdinc
-C_FLAGS += -relax_pointers # To remove type-casting errors
-C_FLAGS += -DZTS -DNETWARE -DHAVE_DIRENT_H=1
-C_FLAGS += -DNEW_LIBC
-C_FLAGS += -DUSE_MKFIFO
-C_FLAGS += -DCLIB_STAT_PATCH
-#C_FLAGS += -DUSE_MPK # To use the LibC recursive mutex locking
-C_FLAGS += -I. -I- -I../netware -I$(SDK_DIR)/include # ../netware added for special SYS/STAT.H
-C_FLAGS += -I$(MPK_DIR)/include1
-C_FLAGS += -I$(MWCIncludes)
-
-
-# Link flags
-LD_FLAGS = -type library
-LD_FLAGS += -o $(BINARY)
-
-# Extra stuff based on debug / release builds
-ifeq '$(BUILD)' 'debug'
- C_FLAGS += -inline smart -sym on -sym codeview4 -sym internal -opt off -opt intrinsics -DTSRM_DEBUG=1
- LD_FLAGS += -sym codeview4 -sym internal
- export MWLibraryFiles=$(SDK_DIR)/imports/libcpre.o;mwcrtld.lib
-else
- C_FLAGS += -opt speed -inline smart -inline auto -sym off -DTSRM_DEBUG=0
- LD_FLAGS += -sym off
- export MWLibraryFiles=$(SDK_DIR)/imports/libcpre.o;mwcrtl.lib
-endif
-
-# Virtual paths
-vpath %.cpp .
-vpath %.c .
-vpath %.obj $(OBJ_DIR)
-
-
-all: prebuild project
-
-.PHONY: all
-
-prebuild:
- @if not exist $(OBJ_DIR) md $(OBJ_DIR)
-
-project: $(BINARY) $(MESSAGE)
- @echo Build complete.
-
-$(OBJ_DIR)/%.d: %.c
- @echo Building Dependencies for $(<F)
- @$(CC) -M $< $(C_FLAGS) -o $@
-
-$(OBJ_DIR)/%.obj: %.c
- @echo Compiling $?...
- @$(CC) $< $(C_FLAGS) -o $@
-
-$(BINARY): $(OBJECTS)
- @echo Linking $@...
- @$(LINK) $(LD_FLAGS) $(OBJECTS)
-
-
-.PHONY: clean
-clean: cleanobj cleanbin
-
-.PHONY: cleand
-cleand:
- @echo Deleting all dependency files...
- -@del "$(OBJ_DIR)\*.d"
-
-.PHONY: cleanobj
-cleanobj:
- @echo Deleting all object files...
- -@del "$(OBJ_DIR)\*.obj"
-
-.PHONY: cleanbin
-cleanbin:
- @echo Deleting binary files...
- -@del "$(FINAL_DIR)\$(MODULE_NAME).lib"
diff --git a/netware/wfile.c b/netware/wfile.c
deleted file mode 100644
index a887ee93df..0000000000
--- a/netware/wfile.c
+++ /dev/null
@@ -1,17 +0,0 @@
-
-/* Function borrowed from the Downhill Project */
-#include "wfile.h"
-/*#include "direct.h"*/ /* Can't find this file */
-
-int readlink(char *file_Name, char *buf_Mem, int buf_Size)
-{
- /* See if the file exists */
- if (access(file_Name, X_OK) == -1) {
- errno = ENOENT;
- } else {
- errno = EINVAL;
- }
-
- /* Either way, it's not a link */
- return -1;
-}
diff --git a/netware/wfile.h b/netware/wfile.h
deleted file mode 100644
index 7a9614c2cf..0000000000
--- a/netware/wfile.h
+++ /dev/null
@@ -1,16 +0,0 @@
-/*#include <io.h> */
-#include <stdio.h>
-#include <stdlib.h>
-#include <errno.h>
-
-#define access _access
-#define X_OK 0
-#ifndef ENOENT
-#define ENOENT 136
-#endif
-#ifndef EINVAL
-#define EINVAL 131
-#endif
-
-int readlink(char *, char *, int);
-int checkroot(char *path);
diff --git a/netware/zend.mak b/netware/zend.mak
deleted file mode 100644
index 77b1074808..0000000000
--- a/netware/zend.mak
+++ /dev/null
@@ -1,158 +0,0 @@
-# Temporarily here -- later may go into some batch file
-# which will set this as an environment variable
-PROJECT_ROOT = ..
-
-# Module details
-MODULE_NAME = ZEND
-
-#include the common settings
-include $(PROJECT_ROOT)/netware/common.mif
-
-# Extensions of all input and output files
-.SUFFIXES:
-.SUFFIXES: .nlm .lib .obj .cpp .c .msg .mlc .mdb .xdc .d
-
-C_SRC = zend.c \
- zend_alloc.c \
- zend_API.c \
- zend_builtin_functions.c \
- zend_compile.c \
- zend_constants.c \
- zend_dynamic_array.c \
- zend_execute.c \
- zend_execute_API.c \
- zend_extensions.c \
- zend_hash.c \
- zend_highlight.c \
- zend_indent.c \
- zend_ini.c \
- zend_ini_parser.c \
- zend_ini_scanner.c \
- zend_language_parser.c \
- zend_language_scanner.c \
- zend_list.c \
- zend_llist.c \
- zend_multibyte.c \
- zend_opcode.c \
- zend_operators.c \
- zend_ptr_stack.c \
- zend_qsort.c \
- zend_sprintf.c \
- zend_stack.c \
- zend_static_allocator.c \
- zend_variables.c
-
-
-# Destination directories and files
-OBJ_DIR = $(BUILD)
-FINAL_DIR = $(BUILD)
-OBJECTS = $(addprefix $(OBJ_DIR)/,$(CPP_SRC:.cpp=.obj) $(C_SRC:.c=.obj))
-DEPDS = $(addprefix $(OBJ_DIR)/,$(CPP_SRC:.cpp=.d) $(C_SRC:.c=.d))
-
-# Binary file
-ifndef BINARY
- BINARY=$(FINAL_DIR)\$(MODULE_NAME).lib
-endif
-
-
-# Compile flags
-C_FLAGS = -c -maxerrors 25 -msgstyle std
-C_FLAGS += -wchar_t on -bool on
-C_FLAGS += -processor Pentium
-C_FLAGS += -nostdinc
-C_FLAGS += -relax_pointers # To remove type-casting errors
-C_FLAGS += -D__C9X_CMATH_INLINES_DEFINED
-C_FLAGS += -DNETWARE -DZTS
-C_FLAGS += -DNEW_LIBC
-C_FLAGS += -DCLIB_STAT_PATCH
-C_FLAGS += -DTHREAD_SWITCH
-
-# These are required to use dlclose so that the PHP extensions are automatically unloaded
-# when apache is unloaded
-C_FLAGS += -DHAVE_DLFCN_H -DHAVE_LIBDL
-
-C_FLAGS += -I. -I- -I../netware -I$(SDK_DIR)/include # ../netware added for special SYS/STAT.H
-C_FLAGS += -I$(MWCIncludes)
-
-
-# Link flags
-LD_FLAGS = -type library
-LD_FLAGS += -o $(BINARY)
-
-
-# Extra stuff based on debug / release builds
-ifeq '$(BUILD)' 'debug'
- C_FLAGS += -DZEND_DEBUG=1
- C_FLAGS += -inline smart -sym on -sym codeview4 -sym internal -opt off -opt intrinsics
- LD_FLAGS += -sym codeview4 -sym internal
- export MWLibraryFiles=$(SDK_DIR)/imports/libcpre.o;mwcrtld.lib
-else
- C_FLAGS += -opt speed -inline on -inline auto -sym off
- C_FLAGS += -DZEND_DEBUG=0
- LD_FLAGS += -sym off
- export MWLibraryFiles=$(SDK_DIR)/imports/libcpre.o;mwcrtl.lib
-endif
-
-
-# Virtual paths
-vpath %.cpp .
-vpath %.c .
-vpath %.obj $(OBJ_DIR)
-
-
-all: prebuild project
-
-.PHONY: all
-
-prebuild:
- @if not exist $(OBJ_DIR) md $(OBJ_DIR)
-
-project: $(BINARY) $(MESSAGE)
- @echo Build complete.
-
-
-$(OBJ_DIR)/%.d: %.c
- @echo Building Dependencies for $(<F)
- @$(CC) -M $< $(C_FLAGS) -o $@
-
-$(OBJ_DIR)/%.obj: %.c
- @echo Compiling $?...
- @$(CC) $< $(C_FLAGS) -o $@
-
-
-$(BINARY): $(OBJECTS)
- @echo Linking $@...
- @$(LINK) $(LD_FLAGS) $(OBJECTS)
-
-
-.PHONY: clean
-clean: cleansrc cleanobj cleanbin
-
-.PHONY: cleansrc
-cleansrc:
- @echo Deleting all generated source files...
- -@del "zend_ini_parser.c"
- -@del "zend_ini_parser.h"
- -@del "zend_ini_scanner.c"
- -@del "zend_language_parser.c"
- -@del "zend_language_parser.h"
- -@del "zend_language_scanner.c"
- -@del "zend_ini_parser.output"
- -@del "zend_language_parser.output"
-
-
-.PHONY: cleand
-cleand:
- @echo Deleting all dependency files...
- -@del "$(OBJ_DIR)\*.d"
-
-.PHONY: cleanobj
-cleanobj:
- @echo Deleting all object files...
- -@del "$(OBJ_DIR)\*.obj"
-
-.PHONY: cleanbin
-cleanbin:
- @echo Deleting binary files...
- -@del "$(FINAL_DIR)\$(MODULE_NAME).lib"
-
diff --git a/pear/Archive/Tar.php b/pear/Archive/Tar.php
deleted file mode 100644
index 0be4c53364..0000000000
--- a/pear/Archive/Tar.php
+++ /dev/null
@@ -1,1601 +0,0 @@
-<?php
-/* vim: set ts=4 sw=4: */
-// +----------------------------------------------------------------------+
-// | PHP Version 5 |
-// +----------------------------------------------------------------------+
-// | Copyright (c) 1997-2004 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: Vincent Blavet <vincent@blavet.net> |
-// +----------------------------------------------------------------------+
-//
-// $Id$
-
-require_once 'PEAR.php';
-
-/**
-* Creates a (compressed) Tar archive
-*
-* @author Vincent Blavet <vincent@blavet.net>
-* @version $Revision$
-* @package Archive
-*/
-class Archive_Tar extends PEAR
-{
- /**
- * @var string Name of the Tar
- */
- var $_tarname='';
-
- /**
- * @var boolean if true, the Tar file will be gzipped
- */
- var $_compress=false;
-
- /**
- * @var string Type of compression : 'none', 'gz' or 'bz2'
- */
- var $_compress_type='none';
-
- /**
- * @var file descriptor
- */
- var $_file=0;
-
- /**
- * @var string Local Tar name of a remote Tar (http:// or ftp://)
- */
- var $_temp_tarname='';
-
- // {{{ constructor
- /**
- * Archive_Tar Class constructor. This flavour of the constructor only
- * declare a new Archive_Tar object, identifying it by the name of the
- * tar file.
- * If the compress argument is set the tar will be read or created as a
- * gzip or bz2 compressed TAR file.
- *
- * @param string $p_tarname The name of the tar archive to create
- * @param string $p_compress can be null, 'gz' or 'bz2'. This
- * parameter indicates if gzip or bz2 compression
- * is required. For compatibility reason the
- * boolean value 'true' means 'gz'.
- * @access public
- */
- function Archive_Tar($p_tarname, $p_compress = null)
- {
- $this->PEAR();
- $this->_compress = false;
- $this->_compress_type = 'none';
- if ($p_compress === null) {
- if (@file_exists($p_tarname)) {
- if ($fp = @fopen($p_tarname, "rb")) {
- // look for gzip magic cookie
- $data = fread($fp, 2);
- fclose($fp);
- if ($data == "\37\213") {
- $this->_compress = true;
- $this->_compress_type = 'gz';
- // No sure it's enought for a magic code ....
- } elseif ($data == "BZ") {
- $this->_compress = true;
- $this->_compress_type = 'bz2';
- }
- }
- } else {
- // probably a remote file or some file accessible
- // through a stream interface
- if (substr($p_tarname, -2) == 'gz') {
- $this->_compress = true;
- $this->_compress_type = 'gz';
- } elseif ((substr($p_tarname, -3) == 'bz2') ||
- (substr($p_tarname, -2) == 'bz')) {
- $this->_compress = true;
- $this->_compress_type = 'bz2';
- }
- }
- } else {
- if (($p_compress == true) || ($p_compress == 'gz')) {
- $this->_compress = true;
- $this->_compress_type = 'gz';
- } else if ($p_compress == 'bz2') {
- $this->_compress = true;
- $this->_compress_type = 'bz2';
- }
- }
- $this->_tarname = $p_tarname;
- if ($this->_compress) { // assert zlib or bz2 extension support
- if ($this->_compress_type == 'gz')
- $extname = 'zlib';
- else if ($this->_compress_type == 'bz2')
- $extname = 'bz2';
-
- if (!extension_loaded($extname)) {
- PEAR::loadExtension($extname);
- }
- if (!extension_loaded($extname)) {
- die("The extension '$extname' couldn't be found.\n".
- "Please make sure your version of PHP was built ".
- "with '$extname' support.\n");
- return false;
- }
- }
- }
- // }}}
-
- // {{{ destructor
- function _Archive_Tar()
- {
- $this->_close();
- // ----- Look for a local copy to delete
- if ($this->_temp_tarname != '')
- @unlink($this->_temp_tarname);
- $this->_PEAR();
- }
- // }}}
-
- // {{{ create()
- /**
- * This method creates the archive file and add the files / directories
- * that are listed in $p_filelist.
- * If a file with the same name exist and is writable, it is replaced
- * by the new tar.
- * The method return false and a PEAR error text.
- * The $p_filelist parameter can be an array of string, each string
- * representing a filename or a directory name with their path if
- * needed. It can also be a single string with names separated by a
- * single blank.
- * For each directory added in the archive, the files and
- * sub-directories are also added.
- * See also createModify() method for more details.
- *
- * @param array $p_filelist An array of filenames and directory names, or a single
- * string with names separated by a single blank space.
- * @return true on success, false on error.
- * @see createModify()
- * @access public
- */
- function create($p_filelist)
- {
- return $this->createModify($p_filelist, '', '');
- }
- // }}}
-
- // {{{ add()
- /**
- * This method add the files / directories that are listed in $p_filelist in
- * the archive. If the archive does not exist it is created.
- * The method return false and a PEAR error text.
- * The files and directories listed are only added at the end of the archive,
- * even if a file with the same name is already archived.
- * See also createModify() method for more details.
- *
- * @param array $p_filelist An array of filenames and directory names, or a single
- * string with names separated by a single blank space.
- * @return true on success, false on error.
- * @see createModify()
- * @access public
- */
- function add($p_filelist)
- {
- return $this->addModify($p_filelist, '', '');
- }
- // }}}
-
- // {{{ extract()
- function extract($p_path='')
- {
- return $this->extractModify($p_path, '');
- }
- // }}}
-
- // {{{ listContent()
- function listContent()
- {
- $v_list_detail = array();
-
- if ($this->_openRead()) {
- if (!$this->_extractList('', $v_list_detail, "list", '', '')) {
- unset($v_list_detail);
- $v_list_detail = 0;
- }
- $this->_close();
- }
-
- return $v_list_detail;
- }
- // }}}
-
- // {{{ createModify()
- /**
- * This method creates the archive file and add the files / directories
- * that are listed in $p_filelist.
- * If the file already exists and is writable, it is replaced by the
- * new tar. It is a create and not an add. If the file exists and is
- * read-only or is a directory it is not replaced. The method return
- * false and a PEAR error text.
- * The $p_filelist parameter can be an array of string, each string
- * representing a filename or a directory name with their path if
- * needed. It can also be a single string with names separated by a
- * single blank.
- * The path indicated in $p_remove_dir will be removed from the
- * memorized path of each file / directory listed when this path
- * exists. By default nothing is removed (empty path '')
- * The path indicated in $p_add_dir will be added at the beginning of
- * the memorized path of each file / directory listed. However it can
- * be set to empty ''. The adding of a path is done after the removing
- * of path.
- * The path add/remove ability enables the user to prepare an archive
- * for extraction in a different path than the origin files are.
- * See also addModify() method for file adding properties.
- *
- * @param array $p_filelist An array of filenames and directory names, or a single
- * string with names separated by a single blank space.
- * @param string $p_add_dir A string which contains a path to be added to the
- * memorized path of each element in the list.
- * @param string $p_remove_dir A string which contains a path to be removed from
- * the memorized path of each element in the list, when
- * relevant.
- * @return boolean true on success, false on error.
- * @access public
- * @see addModify()
- */
- function createModify($p_filelist, $p_add_dir, $p_remove_dir='')
- {
- $v_result = true;
-
- if (!$this->_openWrite())
- return false;
-
- if ($p_filelist != '') {
- if (is_array($p_filelist))
- $v_list = $p_filelist;
- elseif (is_string($p_filelist))
- $v_list = explode(" ", $p_filelist);
- else {
- $this->_cleanFile();
- $this->_error('Invalid file list');
- return false;
- }
-
- $v_result = $this->_addList($v_list, $p_add_dir, $p_remove_dir);
- }
-
- if ($v_result) {
- $this->_writeFooter();
- $this->_close();
- } else
- $this->_cleanFile();
-
- return $v_result;
- }
- // }}}
-
- // {{{ addModify()
- /**
- * This method add the files / directories listed in $p_filelist at the
- * end of the existing archive. If the archive does not yet exists it
- * is created.
- * The $p_filelist parameter can be an array of string, each string
- * representing a filename or a directory name with their path if
- * needed. It can also be a single string with names separated by a
- * single blank.
- * The path indicated in $p_remove_dir will be removed from the
- * memorized path of each file / directory listed when this path
- * exists. By default nothing is removed (empty path '')
- * The path indicated in $p_add_dir will be added at the beginning of
- * the memorized path of each file / directory listed. However it can
- * be set to empty ''. The adding of a path is done after the removing
- * of path.
- * The path add/remove ability enables the user to prepare an archive
- * for extraction in a different path than the origin files are.
- * If a file/dir is already in the archive it will only be added at the
- * end of the archive. There is no update of the existing archived
- * file/dir. However while extracting the archive, the last file will
- * replace the first one. This results in a none optimization of the
- * archive size.
- * If a file/dir does not exist the file/dir is ignored. However an
- * error text is send to PEAR error.
- * If a file/dir is not readable the file/dir is ignored. However an
- * error text is send to PEAR error.
- *
- * @param array $p_filelist An array of filenames and directory names, or a single
- * string with names separated by a single blank space.
- * @param string $p_add_dir A string which contains a path to be added to the
- * memorized path of each element in the list.
- * @param string $p_remove_dir A string which contains a path to be removed from
- * the memorized path of each element in the list, when
- * relevant.
- * @return true on success, false on error.
- * @access public
- */
- function addModify($p_filelist, $p_add_dir, $p_remove_dir='')
- {
- $v_result = true;
-
- if (!@is_file($this->_tarname))
- $v_result = $this->createModify($p_filelist, $p_add_dir, $p_remove_dir);
- else {
- if (is_array($p_filelist))
- $v_list = $p_filelist;
- elseif (is_string($p_filelist))
- $v_list = explode(" ", $p_filelist);
- else {
- $this->_error('Invalid file list');
- return false;
- }
-
- $v_result = $this->_append($v_list, $p_add_dir, $p_remove_dir);
- }
-
- return $v_result;
- }
- // }}}
-
- // {{{ addString()
- /**
- * This method add a single string as a file at the
- * end of the existing archive. If the archive does not yet exists it
- * is created.
- *
- * @param string $p_filename A string which contains the full filename path
- * that will be associated with the string.
- * @param string $p_string The content of the file added in the archive.
- * @return true on success, false on error.
- * @access public
- */
- function addString($p_filename, $p_string)
- {
- $v_result = true;
-
- if (!@is_file($this->_tarname)) {
- if (!$this->_openWrite()) {
- return false;
- }
- $this->_close();
- }
-
- if (!$this->_openAppend())
- return false;
-
- // Need to check the get back to the temporary file ? ....
- $v_result = $this->_addString($p_filename, $p_string);
-
- $this->_writeFooter();
-
- $this->_close();
-
- return $v_result;
- }
- // }}}
-
- // {{{ extractModify()
- /**
- * This method extract all the content of the archive in the directory
- * indicated by $p_path. When relevant the memorized path of the
- * files/dir can be modified by removing the $p_remove_path path at the
- * beginning of the file/dir path.
- * While extracting a file, if the directory path does not exists it is
- * created.
- * While extracting a file, if the file already exists it is replaced
- * without looking for last modification date.
- * While extracting a file, if the file already exists and is write
- * protected, the extraction is aborted.
- * While extracting a file, if a directory with the same name already
- * exists, the extraction is aborted.
- * While extracting a directory, if a file with the same name already
- * exists, the extraction is aborted.
- * While extracting a file/directory if the destination directory exist
- * and is write protected, or does not exist but can not be created,
- * the extraction is aborted.
- * If after extraction an extracted file does not show the correct
- * stored file size, the extraction is aborted.
- * When the extraction is aborted, a PEAR error text is set and false
- * is returned. However the result can be a partial extraction that may
- * need to be manually cleaned.
- *
- * @param string $p_path The path of the directory where the files/dir need to by
- * extracted.
- * @param string $p_remove_path Part of the memorized path that can be removed if
- * present at the beginning of the file/dir path.
- * @return boolean true on success, false on error.
- * @access public
- * @see extractList()
- */
- function extractModify($p_path, $p_remove_path)
- {
- $v_result = true;
- $v_list_detail = array();
-
- if ($v_result = $this->_openRead()) {
- $v_result = $this->_extractList($p_path, $v_list_detail, "complete", 0, $p_remove_path);
- $this->_close();
- }
-
- return $v_result;
- }
- // }}}
-
- // {{{ extractInString()
- /**
- * This method extract from the archive one file identified by $p_filename.
- * The return value is a string with the file content, or NULL on error.
- * @param string $p_filename The path of the file to extract in a string.
- * @return a string with the file content or NULL.
- * @access public
- */
- function extractInString($p_filename)
- {
- if ($this->_openRead()) {
- $v_result = $this->_extractInString($p_filename);
- $this->_close();
- } else {
- $v_result = NULL;
- }
-
- return $v_result;
- }
- // }}}
-
- // {{{ extractList()
- /**
- * This method extract from the archive only the files indicated in the
- * $p_filelist. These files are extracted in the current directory or
- * in the directory indicated by the optional $p_path parameter.
- * If indicated the $p_remove_path can be used in the same way as it is
- * used in extractModify() method.
- * @param array $p_filelist An array of filenames and directory names, or a single
- * string with names separated by a single blank space.
- * @param string $p_path The path of the directory where the files/dir need to by
- * extracted.
- * @param string $p_remove_path Part of the memorized path that can be removed if
- * present at the beginning of the file/dir path.
- * @return true on success, false on error.
- * @access public
- * @see extractModify()
- */
- function extractList($p_filelist, $p_path='', $p_remove_path='')
- {
- $v_result = true;
- $v_list_detail = array();
-
- if (is_array($p_filelist))
- $v_list = $p_filelist;
- elseif (is_string($p_filelist))
- $v_list = explode(" ", $p_filelist);
- else {
- $this->_error('Invalid string list');
- return false;
- }
-
- if ($v_result = $this->_openRead()) {
- $v_result = $this->_extractList($p_path, $v_list_detail, "partial", $v_list, $p_remove_path);
- $this->_close();
- }
-
- return $v_result;
- }
- // }}}
-
- // {{{ _error()
- function _error($p_message)
- {
- // ----- To be completed
- $this->raiseError($p_message);
- }
- // }}}
-
- // {{{ _warning()
- function _warning($p_message)
- {
- // ----- To be completed
- $this->raiseError($p_message);
- }
- // }}}
-
- // {{{ _openWrite()
- function _openWrite()
- {
- if ($this->_compress_type == 'gz')
- $this->_file = @gzopen($this->_tarname, "wb");
- else if ($this->_compress_type == 'bz2')
- $this->_file = @bzopen($this->_tarname, "wb");
- else if ($this->_compress_type == 'none')
- $this->_file = @fopen($this->_tarname, "wb");
- else
- $this->_error('Unknown or missing compression type ('.$this->_compress_type.')');
-
- if ($this->_file == 0) {
- $this->_error('Unable to open in write mode \''.$this->_tarname.'\'');
- return false;
- }
-
- return true;
- }
- // }}}
-
- // {{{ _openRead()
- function _openRead()
- {
- if (strtolower(substr($this->_tarname, 0, 7)) == 'http://') {
-
- // ----- Look if a local copy need to be done
- if ($this->_temp_tarname == '') {
- $this->_temp_tarname = uniqid('tar').'.tmp';
- if (!$v_file_from = @fopen($this->_tarname, 'rb')) {
- $this->_error('Unable to open in read mode \''.$this->_tarname.'\'');
- $this->_temp_tarname = '';
- return false;
- }
- if (!$v_file_to = @fopen($this->_temp_tarname, 'wb')) {
- $this->_error('Unable to open in write mode \''.$this->_temp_tarname.'\'');
- $this->_temp_tarname = '';
- return false;
- }
- while ($v_data = @fread($v_file_from, 1024))
- @fwrite($v_file_to, $v_data);
- @fclose($v_file_from);
- @fclose($v_file_to);
- }
-
- // ----- File to open if the local copy
- $v_filename = $this->_temp_tarname;
-
- } else
- // ----- File to open if the normal Tar file
- $v_filename = $this->_tarname;
-
- if ($this->_compress_type == 'gz')
- $this->_file = @gzopen($v_filename, "rb");
- else if ($this->_compress_type == 'bz2')
- $this->_file = @bzopen($v_filename, "rb");
- else if ($this->_compress_type == 'none')
- $this->_file = @fopen($v_filename, "rb");
- else
- $this->_error('Unknown or missing compression type ('.$this->_compress_type.')');
-
- if ($this->_file == 0) {
- $this->_error('Unable to open in read mode \''.$v_filename.'\'');
- return false;
- }
-
- return true;
- }
- // }}}
-
- // {{{ _openReadWrite()
- function _openReadWrite()
- {
- if ($this->_compress_type == 'gz')
- $this->_file = @gzopen($this->_tarname, "r+b");
- else if ($this->_compress_type == 'bz2')
- $this->_file = @bzopen($this->_tarname, "r+b");
- else if ($this->_compress_type == 'none')
- $this->_file = @fopen($this->_tarname, "r+b");
- else
- $this->_error('Unknown or missing compression type ('.$this->_compress_type.')');
-
- if ($this->_file == 0) {
- $this->_error('Unable to open in read/write mode \''.$this->_tarname.'\'');
- return false;
- }
-
- return true;
- }
- // }}}
-
- // {{{ _close()
- function _close()
- {
- if (isset($this->_file)) {
- if ($this->_compress_type == 'gz')
- @gzclose($this->_file);
- else if ($this->_compress_type == 'bz2')
- @bzclose($this->_file);
- else if ($this->_compress_type == 'none')
- @fclose($this->_file);
- else
- $this->_error('Unknown or missing compression type ('.$this->_compress_type.')');
-
- $this->_file = 0;
- }
-
- // ----- Look if a local copy need to be erase
- // Note that it might be interesting to keep the url for a time : ToDo
- if ($this->_temp_tarname != '') {
- @unlink($this->_temp_tarname);
- $this->_temp_tarname = '';
- }
-
- return true;
- }
- // }}}
-
- // {{{ _cleanFile()
- function _cleanFile()
- {
- $this->_close();
-
- // ----- Look for a local copy
- if ($this->_temp_tarname != '') {
- // ----- Remove the local copy but not the remote tarname
- @unlink($this->_temp_tarname);
- $this->_temp_tarname = '';
- } else {
- // ----- Remove the local tarname file
- @unlink($this->_tarname);
- }
- $this->_tarname = '';
-
- return true;
- }
- // }}}
-
- // {{{ _writeBlock()
- function _writeBlock($p_binary_data, $p_len=null)
- {
- if ($this->_file) {
- if ($p_len === null) {
- if ($this->_compress_type == 'gz')
- @gzputs($this->_file, $p_binary_data);
- else if ($this->_compress_type == 'bz2')
- @bzwrite($this->_file, $p_binary_data);
- else if ($this->_compress_type == 'none')
- @fputs($this->_file, $p_binary_data);
- else
- $this->_error('Unknown or missing compression type ('.$this->_compress_type.')');
- } else {
- if ($this->_compress_type == 'gz')
- @gzputs($this->_file, $p_binary_data, $p_len);
- else if ($this->_compress_type == 'bz2')
- @bzwrite($this->_file, $p_binary_data, $p_len);
- else if ($this->_compress_type == 'none')
- @fputs($this->_file, $p_binary_data, $p_len);
- else
- $this->_error('Unknown or missing compression type ('.$this->_compress_type.')');
-
- }
- }
- return true;
- }
- // }}}
-
- // {{{ _readBlock()
- function _readBlock($p_len=null)
- {
- $v_block = null;
- if ($this->_file) {
- if ($p_len === null)
- $p_len = 512;
-
- if ($this->_compress_type == 'gz')
- $v_block = @gzread($this->_file, 512);
- else if ($this->_compress_type == 'bz2')
- $v_block = @bzread($this->_file, 512);
- else if ($this->_compress_type == 'none')
- $v_block = @fread($this->_file, 512);
- else
- $this->_error('Unknown or missing compression type ('.$this->_compress_type.')');
-
- }
- return $v_block;
- }
- // }}}
-
- // {{{ _jumpBlock()
- function _jumpBlock($p_len=null)
- {
- if ($this->_file) {
- if ($p_len === null)
- $p_len = 1;
-
- if ($this->_compress_type == 'gz')
- @gzseek($this->_file, @gztell($this->_file)+($p_len*512));
- else if ($this->_compress_type == 'bz2') {
- // ----- Replace missing bztell() and bzseek()
- for ($i=0; $i<$p_len; $i++)
- $this->_readBlock();
- } else if ($this->_compress_type == 'none')
- @fseek($this->_file, @ftell($this->_file)+($p_len*512));
- else
- $this->_error('Unknown or missing compression type ('.$this->_compress_type.')');
-
- }
- return true;
- }
- // }}}
-
- // {{{ _writeFooter()
- function _writeFooter()
- {
- if ($this->_file) {
- // ----- Write the last 0 filled block for end of archive
- $v_binary_data = pack("a512", '');
- $this->_writeBlock($v_binary_data);
- }
- return true;
- }
- // }}}
-
- // {{{ _addList()
- function _addList($p_list, $p_add_dir, $p_remove_dir)
- {
- $v_result=true;
- $v_header = array();
-
- // ----- Remove potential windows directory separator
- $p_add_dir = $this->_translateWinPath($p_add_dir);
- $p_remove_dir = $this->_translateWinPath($p_remove_dir, false);
-
- if (!$this->_file) {
- $this->_error('Invalid file descriptor');
- return false;
- }
-
- if (sizeof($p_list) == 0)
- return true;
-
- for ($j=0; ($j<count($p_list)) && ($v_result); $j++) {
- $v_filename = $p_list[$j];
-
- // ----- Skip the current tar name
- if ($v_filename == $this->_tarname)
- continue;
-
- if ($v_filename == '')
- continue;
-
- if (!file_exists($v_filename)) {
- $this->_warning("File '$v_filename' does not exist");
- continue;
- }
-
- // ----- Add the file or directory header
- if (!$this->_addFile($v_filename, $v_header, $p_add_dir, $p_remove_dir))
- return false;
-
- if (@is_dir($v_filename)) {
- if (!($p_hdir = opendir($v_filename))) {
- $this->_warning("Directory '$v_filename' can not be read");
- continue;
- }
- $p_hitem = readdir($p_hdir); // '.' directory
- $p_hitem = readdir($p_hdir); // '..' directory
- while (false !== ($p_hitem = readdir($p_hdir))) {
- if ($v_filename != ".")
- $p_temp_list[0] = $v_filename.'/'.$p_hitem;
- else
- $p_temp_list[0] = $p_hitem;
-
- $v_result = $this->_addList($p_temp_list, $p_add_dir, $p_remove_dir);
- }
-
- unset($p_temp_list);
- unset($p_hdir);
- unset($p_hitem);
- }
- }
-
- return $v_result;
- }
- // }}}
-
- // {{{ _addFile()
- function _addFile($p_filename, &$p_header, $p_add_dir, $p_remove_dir)
- {
- if (!$this->_file) {
- $this->_error('Invalid file descriptor');
- return false;
- }
-
- if ($p_filename == '') {
- $this->_error('Invalid file name');
- return false;
- }
-
- // ----- Calculate the stored filename
- $p_filename = $this->_translateWinPath($p_filename, false);;
- $v_stored_filename = $p_filename;
- if (strcmp($p_filename, $p_remove_dir) == 0) {
- return true;
- }
- if ($p_remove_dir != '') {
- if (substr($p_remove_dir, -1) != '/')
- $p_remove_dir .= '/';
-
- if (substr($p_filename, 0, strlen($p_remove_dir)) == $p_remove_dir)
- $v_stored_filename = substr($p_filename, strlen($p_remove_dir));
- }
- $v_stored_filename = $this->_translateWinPath($v_stored_filename);
- if ($p_add_dir != '') {
- if (substr($p_add_dir, -1) == '/')
- $v_stored_filename = $p_add_dir.$v_stored_filename;
- else
- $v_stored_filename = $p_add_dir.'/'.$v_stored_filename;
- }
-
- $v_stored_filename = $this->_pathReduction($v_stored_filename);
-
- if (is_file($p_filename)) {
- if (($v_file = @fopen($p_filename, "rb")) == 0) {
- $this->_warning("Unable to open file '$p_filename' in binary read mode");
- return true;
- }
-
- if (!$this->_writeHeader($p_filename, $v_stored_filename))
- return false;
-
- while (($v_buffer = fread($v_file, 512)) != '') {
- $v_binary_data = pack("a512", "$v_buffer");
- $this->_writeBlock($v_binary_data);
- }
-
- fclose($v_file);
-
- } else {
- // ----- Only header for dir
- if (!$this->_writeHeader($p_filename, $v_stored_filename))
- return false;
- }
-
- return true;
- }
- // }}}
-
- // {{{ _addString()
- function _addString($p_filename, $p_string)
- {
- if (!$this->_file) {
- $this->_error('Invalid file descriptor');
- return false;
- }
-
- if ($p_filename == '') {
- $this->_error('Invalid file name');
- return false;
- }
-
- // ----- Calculate the stored filename
- $p_filename = $this->_translateWinPath($p_filename, false);;
-
- if (!$this->_writeHeaderBlock($p_filename, strlen($p_string), 0, 0, "", 0, 0))
- return false;
-
- $i=0;
- while (($v_buffer = substr($p_string, (($i++)*512), 512)) != '') {
- $v_binary_data = pack("a512", $v_buffer);
- $this->_writeBlock($v_binary_data);
- }
-
- return true;
- }
- // }}}
-
- // {{{ _writeHeader()
- function _writeHeader($p_filename, $p_stored_filename)
- {
- if ($p_stored_filename == '')
- $p_stored_filename = $p_filename;
- $v_reduce_filename = $this->_pathReduction($p_stored_filename);
-
- if (strlen($v_reduce_filename) > 99) {
- if (!$this->_writeLongHeader($v_reduce_filename))
- return false;
- }
-
- $v_info = stat($p_filename);
- $v_uid = sprintf("%6s ", DecOct($v_info[4]));
- $v_gid = sprintf("%6s ", DecOct($v_info[5]));
- $v_perms = sprintf("%6s ", DecOct(fileperms($p_filename)));
-
- $v_mtime = sprintf("%11s", DecOct(filemtime($p_filename)));
-
- if (@is_dir($p_filename)) {
- $v_typeflag = "5";
- $v_size = sprintf("%11s ", DecOct(0));
- } else {
- $v_typeflag = '';
- clearstatcache();
- $v_size = sprintf("%11s ", DecOct(filesize($p_filename)));
- }
-
- $v_linkname = '';
-
- $v_magic = '';
-
- $v_version = '';
-
- $v_uname = '';
-
- $v_gname = '';
-
- $v_devmajor = '';
-
- $v_devminor = '';
-
- $v_prefix = '';
-
- $v_binary_data_first = pack("a100a8a8a8a12A12", $v_reduce_filename, $v_perms, $v_uid, $v_gid, $v_size, $v_mtime);
- $v_binary_data_last = pack("a1a100a6a2a32a32a8a8a155a12", $v_typeflag, $v_linkname, $v_magic, $v_version, $v_uname, $v_gname, $v_devmajor, $v_devminor, $v_prefix, '');
-
- // ----- Calculate the checksum
- $v_checksum = 0;
- // ..... First part of the header
- for ($i=0; $i<148; $i++)
- $v_checksum += ord(substr($v_binary_data_first,$i,1));
- // ..... Ignore the checksum value and replace it by ' ' (space)
- for ($i=148; $i<156; $i++)
- $v_checksum += ord(' ');
- // ..... Last part of the header
- for ($i=156, $j=0; $i<512; $i++, $j++)
- $v_checksum += ord(substr($v_binary_data_last,$j,1));
-
- // ----- Write the first 148 bytes of the header in the archive
- $this->_writeBlock($v_binary_data_first, 148);
-
- // ----- Write the calculated checksum
- $v_checksum = sprintf("%6s ", DecOct($v_checksum));
- $v_binary_data = pack("a8", $v_checksum);
- $this->_writeBlock($v_binary_data, 8);
-
- // ----- Write the last 356 bytes of the header in the archive
- $this->_writeBlock($v_binary_data_last, 356);
-
- return true;
- }
- // }}}
-
- // {{{ _writeHeaderBlock()
- function _writeHeaderBlock($p_filename, $p_size, $p_mtime=0, $p_perms=0, $p_type='', $p_uid=0, $p_gid=0)
- {
- $p_filename = $this->_pathReduction($p_filename);
-
- if (strlen($p_filename) > 99) {
- if (!$this->_writeLongHeader($p_filename))
- return false;
- }
-
- if ($p_type == "5") {
- $v_size = sprintf("%11s ", DecOct(0));
- } else {
- $v_size = sprintf("%11s ", DecOct($p_size));
- }
-
- $v_uid = sprintf("%6s ", DecOct($p_uid));
- $v_gid = sprintf("%6s ", DecOct($p_gid));
- $v_perms = sprintf("%6s ", DecOct($p_perms));
-
- $v_mtime = sprintf("%11s", DecOct($p_mtime));
-
- $v_linkname = '';
-
- $v_magic = '';
-
- $v_version = '';
-
- $v_uname = '';
-
- $v_gname = '';
-
- $v_devmajor = '';
-
- $v_devminor = '';
-
- $v_prefix = '';
-
- $v_binary_data_first = pack("a100a8a8a8a12A12", $p_filename, $v_perms, $v_uid, $v_gid, $v_size, $v_mtime);
- $v_binary_data_last = pack("a1a100a6a2a32a32a8a8a155a12", $p_type, $v_linkname, $v_magic, $v_version, $v_uname, $v_gname, $v_devmajor, $v_devminor, $v_prefix, '');
-
- // ----- Calculate the checksum
- $v_checksum = 0;
- // ..... First part of the header
- for ($i=0; $i<148; $i++)
- $v_checksum += ord(substr($v_binary_data_first,$i,1));
- // ..... Ignore the checksum value and replace it by ' ' (space)
- for ($i=148; $i<156; $i++)
- $v_checksum += ord(' ');
- // ..... Last part of the header
- for ($i=156, $j=0; $i<512; $i++, $j++)
- $v_checksum += ord(substr($v_binary_data_last,$j,1));
-
- // ----- Write the first 148 bytes of the header in the archive
- $this->_writeBlock($v_binary_data_first, 148);
-
- // ----- Write the calculated checksum
- $v_checksum = sprintf("%6s ", DecOct($v_checksum));
- $v_binary_data = pack("a8", $v_checksum);
- $this->_writeBlock($v_binary_data, 8);
-
- // ----- Write the last 356 bytes of the header in the archive
- $this->_writeBlock($v_binary_data_last, 356);
-
- return true;
- }
- // }}}
-
- // {{{ _writeLongHeader()
- function _writeLongHeader($p_filename)
- {
- $v_size = sprintf("%11s ", DecOct(strlen($p_filename)));
-
- $v_typeflag = 'L';
-
- $v_linkname = '';
-
- $v_magic = '';
-
- $v_version = '';
-
- $v_uname = '';
-
- $v_gname = '';
-
- $v_devmajor = '';
-
- $v_devminor = '';
-
- $v_prefix = '';
-
- $v_binary_data_first = pack("a100a8a8a8a12A12", '././@LongLink', 0, 0, 0, $v_size, 0);
- $v_binary_data_last = pack("a1a100a6a2a32a32a8a8a155a12", $v_typeflag, $v_linkname, $v_magic, $v_version, $v_uname, $v_gname, $v_devmajor, $v_devminor, $v_prefix, '');
-
- // ----- Calculate the checksum
- $v_checksum = 0;
- // ..... First part of the header
- for ($i=0; $i<148; $i++)
- $v_checksum += ord(substr($v_binary_data_first,$i,1));
- // ..... Ignore the checksum value and replace it by ' ' (space)
- for ($i=148; $i<156; $i++)
- $v_checksum += ord(' ');
- // ..... Last part of the header
- for ($i=156, $j=0; $i<512; $i++, $j++)
- $v_checksum += ord(substr($v_binary_data_last,$j,1));
-
- // ----- Write the first 148 bytes of the header in the archive
- $this->_writeBlock($v_binary_data_first, 148);
-
- // ----- Write the calculated checksum
- $v_checksum = sprintf("%6s ", DecOct($v_checksum));
- $v_binary_data = pack("a8", $v_checksum);
- $this->_writeBlock($v_binary_data, 8);
-
- // ----- Write the last 356 bytes of the header in the archive
- $this->_writeBlock($v_binary_data_last, 356);
-
- // ----- Write the filename as content of the block
- $i=0;
- while (($v_buffer = substr($p_filename, (($i++)*512), 512)) != '') {
- $v_binary_data = pack("a512", "$v_buffer");
- $this->_writeBlock($v_binary_data);
- }
-
- return true;
- }
- // }}}
-
- // {{{ _readHeader()
- function _readHeader($v_binary_data, &$v_header)
- {
- if (strlen($v_binary_data)==0) {
- $v_header['filename'] = '';
- return true;
- }
-
- if (strlen($v_binary_data) != 512) {
- $v_header['filename'] = '';
- $this->_error('Invalid block size : '.strlen($v_binary_data));
- return false;
- }
-
- // ----- Calculate the checksum
- $v_checksum = 0;
- // ..... First part of the header
- for ($i=0; $i<148; $i++)
- $v_checksum+=ord(substr($v_binary_data,$i,1));
- // ..... Ignore the checksum value and replace it by ' ' (space)
- for ($i=148; $i<156; $i++)
- $v_checksum += ord(' ');
- // ..... Last part of the header
- for ($i=156; $i<512; $i++)
- $v_checksum+=ord(substr($v_binary_data,$i,1));
-
- $v_data = unpack("a100filename/a8mode/a8uid/a8gid/a12size/a12mtime/a8checksum/a1typeflag/a100link/a6magic/a2version/a32uname/a32gname/a8devmajor/a8devminor", $v_binary_data);
-
- // ----- Extract the checksum
- $v_header['checksum'] = OctDec(trim($v_data['checksum']));
- if ($v_header['checksum'] != $v_checksum) {
- $v_header['filename'] = '';
-
- // ----- Look for last block (empty block)
- if (($v_checksum == 256) && ($v_header['checksum'] == 0))
- return true;
-
- $this->_error('Invalid checksum for file "'.$v_data['filename'].'" : '.$v_checksum.' calculated, '.$v_header['checksum'].' expected');
- return false;
- }
-
- // ----- Extract the properties
- $v_header['filename'] = trim($v_data['filename']);
- $v_header['mode'] = OctDec(trim($v_data['mode']));
- $v_header['uid'] = OctDec(trim($v_data['uid']));
- $v_header['gid'] = OctDec(trim($v_data['gid']));
- $v_header['size'] = OctDec(trim($v_data['size']));
- $v_header['mtime'] = OctDec(trim($v_data['mtime']));
- if (($v_header['typeflag'] = $v_data['typeflag']) == "5") {
- $v_header['size'] = 0;
- }
- /* ----- All these fields are removed form the header because they do not carry interesting info
- $v_header[link] = trim($v_data[link]);
- $v_header[magic] = trim($v_data[magic]);
- $v_header[version] = trim($v_data[version]);
- $v_header[uname] = trim($v_data[uname]);
- $v_header[gname] = trim($v_data[gname]);
- $v_header[devmajor] = trim($v_data[devmajor]);
- $v_header[devminor] = trim($v_data[devminor]);
- */
-
- return true;
- }
- // }}}
-
- // {{{ _readLongHeader()
- function _readLongHeader(&$v_header)
- {
- $v_filename = '';
- $n = floor($v_header['size']/512);
- for ($i=0; $i<$n; $i++) {
- $v_content = $this->_readBlock();
- $v_filename .= $v_content;
- }
- if (($v_header['size'] % 512) != 0) {
- $v_content = $this->_readBlock();
- $v_filename .= $v_content;
- }
-
- // ----- Read the next header
- $v_binary_data = $this->_readBlock();
-
- if (!$this->_readHeader($v_binary_data, $v_header))
- return false;
-
- $v_header['filename'] = $v_filename;
-
- return true;
- }
- // }}}
-
- // {{{ _extractInString()
- /**
- * This method extract from the archive one file identified by $p_filename.
- * The return value is a string with the file content, or NULL on error.
- * @param string $p_filename The path of the file to extract in a string.
- * @return a string with the file content or NULL.
- * @access private
- */
- function _extractInString($p_filename)
- {
- $v_result_str = "";
-
- While (strlen($v_binary_data = $this->_readBlock()) != 0)
- {
- if (!$this->_readHeader($v_binary_data, $v_header))
- return NULL;
-
- if ($v_header['filename'] == '')
- continue;
-
- // ----- Look for long filename
- if ($v_header['typeflag'] == 'L') {
- if (!$this->_readLongHeader($v_header))
- return NULL;
- }
-
- if ($v_header['filename'] == $p_filename) {
- if ($v_header['typeflag'] == "5") {
- $this->_error('Unable to extract in string a directory entry {'.$v_header['filename'].'}');
- return NULL;
- } else {
- $n = floor($v_header['size']/512);
- for ($i=0; $i<$n; $i++) {
- $v_result_str .= $this->_readBlock();
- }
- if (($v_header['size'] % 512) != 0) {
- $v_content = $this->_readBlock();
- $v_result_str .= substr($v_content, 0, ($v_header['size'] % 512));
- }
- return $v_result_str;
- }
- } else {
- $this->_jumpBlock(ceil(($v_header['size']/512)));
- }
- }
-
- return NULL;
- }
- // }}}
-
- // {{{ _extractList()
- function _extractList($p_path, &$p_list_detail, $p_mode, $p_file_list, $p_remove_path)
- {
- $v_result=true;
- $v_nb = 0;
- $v_extract_all = true;
- $v_listing = false;
-
- $p_path = $this->_translateWinPath($p_path, false);
- if ($p_path == '' || (substr($p_path, 0, 1) != '/' && substr($p_path, 0, 3) != "../" && !strpos($p_path, ':'))) {
- $p_path = "./".$p_path;
- }
- $p_remove_path = $this->_translateWinPath($p_remove_path);
-
- // ----- Look for path to remove format (should end by /)
- if (($p_remove_path != '') && (substr($p_remove_path, -1) != '/'))
- $p_remove_path .= '/';
- $p_remove_path_size = strlen($p_remove_path);
-
- switch ($p_mode) {
- case "complete" :
- $v_extract_all = TRUE;
- $v_listing = FALSE;
- break;
- case "partial" :
- $v_extract_all = FALSE;
- $v_listing = FALSE;
- break;
- case "list" :
- $v_extract_all = FALSE;
- $v_listing = TRUE;
- break;
- default :
- $this->_error('Invalid extract mode ('.$p_mode.')');
- return false;
- }
-
- clearstatcache();
-
- While (strlen($v_binary_data = $this->_readBlock()) != 0)
- {
- $v_extract_file = FALSE;
- $v_extraction_stopped = 0;
-
- if (!$this->_readHeader($v_binary_data, $v_header))
- return false;
-
- if ($v_header['filename'] == '')
- continue;
-
- // ----- Look for long filename
- if ($v_header['typeflag'] == 'L') {
- if (!$this->_readLongHeader($v_header))
- return false;
- }
-
- if ((!$v_extract_all) && (is_array($p_file_list))) {
- // ----- By default no unzip if the file is not found
- $v_extract_file = false;
-
- for ($i=0; $i<sizeof($p_file_list); $i++) {
- // ----- Look if it is a directory
- if (substr($p_file_list[$i], -1) == '/') {
- // ----- Look if the directory is in the filename path
- if ((strlen($v_header['filename']) > strlen($p_file_list[$i])) && (substr($v_header['filename'], 0, strlen($p_file_list[$i])) == $p_file_list[$i])) {
- $v_extract_file = TRUE;
- break;
- }
- }
-
- // ----- It is a file, so compare the file names
- elseif ($p_file_list[$i] == $v_header['filename']) {
- $v_extract_file = TRUE;
- break;
- }
- }
- } else {
- $v_extract_file = TRUE;
- }
-
- // ----- Look if this file need to be extracted
- if (($v_extract_file) && (!$v_listing))
- {
- if (($p_remove_path != '')
- && (substr($v_header['filename'], 0, $p_remove_path_size) == $p_remove_path))
- $v_header['filename'] = substr($v_header['filename'], $p_remove_path_size);
- if (($p_path != './') && ($p_path != '/')) {
- while (substr($p_path, -1) == '/')
- $p_path = substr($p_path, 0, strlen($p_path)-1);
-
- if (substr($v_header['filename'], 0, 1) == '/')
- $v_header['filename'] = $p_path.$v_header['filename'];
- else
- $v_header['filename'] = $p_path.'/'.$v_header['filename'];
- }
- if (file_exists($v_header['filename'])) {
- if ((@is_dir($v_header['filename'])) && ($v_header['typeflag'] == '')) {
- $this->_error('File '.$v_header['filename'].' already exists as a directory');
- return false;
- }
- if ((is_file($v_header['filename'])) && ($v_header['typeflag'] == "5")) {
- $this->_error('Directory '.$v_header['filename'].' already exists as a file');
- return false;
- }
- if (!is_writeable($v_header['filename'])) {
- $this->_error('File '.$v_header['filename'].' already exists and is write protected');
- return false;
- }
- if (filemtime($v_header['filename']) > $v_header['mtime']) {
- // To be completed : An error or silent no replace ?
- }
- }
-
- // ----- Check the directory availability and create it if necessary
- elseif (($v_result = $this->_dirCheck(($v_header['typeflag'] == "5"?$v_header['filename']:dirname($v_header['filename'])))) != 1) {
- $this->_error('Unable to create path for '.$v_header['filename']);
- return false;
- }
-
- if ($v_extract_file) {
- if ($v_header['typeflag'] == "5") {
- if (!@file_exists($v_header['filename'])) {
- if (!@mkdir($v_header['filename'], 0777)) {
- $this->_error('Unable to create directory {'.$v_header['filename'].'}');
- return false;
- }
- }
- } else {
- if (($v_dest_file = @fopen($v_header['filename'], "wb")) == 0) {
- $this->_error('Error while opening {'.$v_header['filename'].'} in write binary mode');
- return false;
- } else {
- $n = floor($v_header['size']/512);
- for ($i=0; $i<$n; $i++) {
- $v_content = $this->_readBlock();
- fwrite($v_dest_file, $v_content, 512);
- }
- if (($v_header['size'] % 512) != 0) {
- $v_content = $this->_readBlock();
- fwrite($v_dest_file, $v_content, ($v_header['size'] % 512));
- }
-
- @fclose($v_dest_file);
-
- // ----- Change the file mode, mtime
- @touch($v_header['filename'], $v_header['mtime']);
- if ($v_header['mode'] & 0111) {
- // make file executable, obey umask
- $mode = fileperms($v_header['filename']) | (~umask() & 0111);
- @chmod($v_header['filename'], $mode);
- }
- }
-
- // ----- Check the file size
- clearstatcache();
- if (filesize($v_header['filename']) != $v_header['size']) {
- $this->_error('Extracted file '.$v_header['filename'].' does not have the correct file size \''.filesize($v_filename).'\' ('.$v_header['size'].' expected). Archive may be corrupted.');
- return false;
- }
- }
- } else {
- $this->_jumpBlock(ceil(($v_header['size']/512)));
- }
- } else {
- $this->_jumpBlock(ceil(($v_header['size']/512)));
- }
-
- /* TBC : Seems to be unused ...
- if ($this->_compress)
- $v_end_of_file = @gzeof($this->_file);
- else
- $v_end_of_file = @feof($this->_file);
- */
-
- if ($v_listing || $v_extract_file || $v_extraction_stopped) {
- // ----- Log extracted files
- if (($v_file_dir = dirname($v_header['filename'])) == $v_header['filename'])
- $v_file_dir = '';
- if ((substr($v_header['filename'], 0, 1) == '/') && ($v_file_dir == ''))
- $v_file_dir = '/';
-
- $p_list_detail[$v_nb++] = $v_header;
- }
- }
-
- return true;
- }
- // }}}
-
- // {{{ _openAppend()
- function _openAppend()
- {
- if (filesize($this->_tarname) == 0)
- return $this->_openWrite();
-
- if ($this->_compress) {
- $this->_close();
-
- if (!@rename($this->_tarname, $this->_tarname.".tmp")) {
- $this->_error('Error while renaming \''.$this->_tarname.'\' to temporary file \''.$this->_tarname.'.tmp\'');
- return false;
- }
-
- if ($this->_compress_type == 'gz')
- $v_temp_tar = @gzopen($this->_tarname.".tmp", "rb");
- elseif ($this->_compress_type == 'bz2')
- $v_temp_tar = @bzopen($this->_tarname.".tmp", "rb");
-
- if ($v_temp_tar == 0) {
- $this->_error('Unable to open file \''.$this->_tarname.'.tmp\' in binary read mode');
- @rename($this->_tarname.".tmp", $this->_tarname);
- return false;
- }
-
- if (!$this->_openWrite()) {
- @rename($this->_tarname.".tmp", $this->_tarname);
- return false;
- }
-
- if ($this->_compress_type == 'gz') {
- $v_buffer = @gzread($v_temp_tar, 512);
-
- // ----- Read the following blocks but not the last one
- if (!@gzeof($v_temp_tar)) {
- do{
- $v_binary_data = pack("a512", $v_buffer);
- $this->_writeBlock($v_binary_data);
- $v_buffer = @gzread($v_temp_tar, 512);
-
- } while (!@gzeof($v_temp_tar));
- }
-
- @gzclose($v_temp_tar);
- }
- elseif ($this->_compress_type == 'bz2') {
- $v_buffered_lines = array();
- $v_buffered_lines[] = @bzread($v_temp_tar, 512);
-
- // ----- Read the following blocks but not the last one
- while (strlen($v_buffered_lines[] = @bzread($v_temp_tar, 512)) > 0) {
- $v_binary_data = pack("a512", array_shift($v_buffered_lines));
- $this->_writeBlock($v_binary_data);
- }
-
- @bzclose($v_temp_tar);
- }
-
- if (!@unlink($this->_tarname.".tmp")) {
- $this->_error('Error while deleting temporary file \''.$this->_tarname.'.tmp\'');
- }
-
- } else {
- // ----- For not compressed tar, just add files before the last 512 bytes block
- if (!$this->_openReadWrite())
- return false;
-
- clearstatcache();
- $v_size = filesize($this->_tarname);
- fseek($this->_file, $v_size-512);
- }
-
- return true;
- }
- // }}}
-
- // {{{ _append()
- function _append($p_filelist, $p_add_dir='', $p_remove_dir='')
- {
- if (!$this->_openAppend())
- return false;
-
- if ($this->_addList($p_filelist, $p_add_dir, $p_remove_dir))
- $this->_writeFooter();
-
- $this->_close();
-
- return true;
- }
- // }}}
-
- // {{{ _dirCheck()
-
- /**
- * Check if a directory exists and create it (including parent
- * dirs) if not.
- *
- * @param string $p_dir directory to check
- *
- * @return bool TRUE if the directory exists or was created
- */
- function _dirCheck($p_dir)
- {
- if ((@is_dir($p_dir)) || ($p_dir == ''))
- return true;
-
- $p_parent_dir = dirname($p_dir);
-
- if (($p_parent_dir != $p_dir) &&
- ($p_parent_dir != '') &&
- (!$this->_dirCheck($p_parent_dir)))
- return false;
-
- if (!@mkdir($p_dir, 0777)) {
- $this->_error("Unable to create directory '$p_dir'");
- return false;
- }
-
- return true;
- }
-
- // }}}
-
- // {{{ _pathReduction()
-
- /**
- * Compress path by changing for example "/dir/foo/../bar" to "/dir/bar", and
- * remove double slashes.
- *
- * @param string $p_dir path to reduce
- *
- * @return string reduced path
- *
- * @access private
- *
- */
- function _pathReduction($p_dir)
- {
- $v_result = '';
-
- // ----- Look for not empty path
- if ($p_dir != '') {
- // ----- Explode path by directory names
- $v_list = explode('/', $p_dir);
-
- // ----- Study directories from last to first
- for ($i=sizeof($v_list)-1; $i>=0; $i--) {
- // ----- Look for current path
- if ($v_list[$i] == ".") {
- // ----- Ignore this directory
- // Should be the first $i=0, but no check is done
- }
- else if ($v_list[$i] == "..") {
- // ----- Ignore it and ignore the $i-1
- $i--;
- }
- else if (($v_list[$i] == '') && ($i!=(sizeof($v_list)-1)) && ($i!=0)) {
- // ----- Ignore only the double '//' in path,
- // but not the first and last /
- } else {
- $v_result = $v_list[$i].($i!=(sizeof($v_list)-1)?'/'.$v_result:'');
- }
- }
- }
- $v_result = strtr($v_result, '\\', '/');
- return $v_result;
- }
-
- // }}}
-
- // {{{ _translateWinPath()
- function _translateWinPath($p_path, $p_remove_disk_letter=true)
- {
- if (OS_WINDOWS) {
- // ----- Look for potential disk letter
- if (($p_remove_disk_letter) && (($v_position = strpos($p_path, ':')) != false)) {
- $p_path = substr($p_path, $v_position+1);
- }
- // ----- Change potential windows directory separator
- if ((strpos($p_path, '\\') > 0) || (substr($p_path, 0,1) == '\\')) {
- $p_path = strtr($p_path, '\\', '/');
- }
- }
- return $p_path;
- }
- // }}}
-
-}
-?>
diff --git a/pear/Archive/docs/Tar.txt b/pear/Archive/docs/Tar.txt
deleted file mode 100644
index 73bee0d786..0000000000
--- a/pear/Archive/docs/Tar.txt
+++ /dev/null
@@ -1,424 +0,0 @@
-Documentation for class Archive_Tar
-===================================
-Last update : 2001-08-15
-
-
-
-Overview :
-----------
-
- The Archive_Tar class helps in creating and managing GNU TAR format
- files compressed by GNU ZIP or not.
- The class offers basic functions like creating an archive, adding
- files in the archive, extracting files from the archive and listing
- the archive content.
- It also provide advanced functions that allow the adding and
- extraction of files with path manipulation.
-
-
-Sample :
---------
-
- // ----- Creating the object (uncompressed archive)
- $tar_object = new Archive_Tar("tarname.tar");
- $tar_object->setErrorHandling(PEAR_ERROR_PRINT);
-
- // ----- Creating the archive
- $v_list[0]="file.txt";
- $v_list[1]="data/";
- $v_list[2]="file.log";
- $tar_object->create($v_list);
-
- // ----- Adding files
- $v_list[0]="dev/file.txt";
- $v_list[1]="dev/data/";
- $v_list[2]="log/file.log";
- $tar_object->add($v_list);
-
- // ----- Adding more files
- $tar_object->add("release/newfile.log release/readme.txt");
-
- // ----- Listing the content
- if (($v_list = $tar_object->listContent()) != 0)
- for ($i=0; $i<sizeof($v_list); $i++)
- {
- echo "Filename :'".$v_list[$i][filename]."'<br>";
- echo " .size :'".$v_list[$i][size]."'<br>";
- echo " .mtime :'".$v_list[$i][mtime]."' (".date("l dS of F Y h:i:s A", $v_list[$i][mtime]).")<br>";
- echo " .mode :'".$v_list[$i][mode]."'<br>";
- echo " .uid :'".$v_list[$i][uid]."'<br>";
- echo " .gid :'".$v_list[$i][gid]."'<br>";
- echo " .typeflag :'".$v_list[$i][typeflag]."'<br>";
- }
-
- // ----- Extracting the archive in directory "install"
- $tar_object->extract("install");
-
-
-Public arguments :
-------------------
-
-None
-
-
-Public Methods :
-----------------
-
-Method : Archive_Tar($p_tarname, $compress = false)
-Description :
- Archive_Tar Class constructor. This flavour of the constructor only
- declare a new Archive_Tar object, identifying it by the name of the
- tar file.
- If the compress argument is set the tar will be read or created as a
- gzip compressed TAR file.
-Arguments :
- $p_tarname : A valid filename for the tar archive file.
- $p_compress : true/false. Indicate if the archive need to be
- compressed or not.
-Return value :
- The Archive_Tar object.
-Sample :
- $tar_object = new Archive_Tar("tarname.tar");
- $tar_object_compressed = new Archive_Tar("tarname.tgz", true);
-How it works :
- Initialize the object.
-
-Method : create($p_filelist)
-Description :
- This method creates the archive file and add the files / directories
- that are listed in $p_filelist.
- If the file already exists and is writable, it is replaced by the
- new tar. It is a create and not an add. If the file exists and is
- read-only or is a directory it is not replaced. The method return
- false and a PEAR error text.
- The $p_filelist parameter can be an array of string, each string
- representing a filename or a directory name with their path if
- needed. It can also be a single string with names separated by a
- single blank.
- See also createModify() method for more details.
-Arguments :
- $p_filelist : An array of filenames and directory names, or a single
- string with names separated by a single blank space.
-Return value :
- true on success, false on error.
-Sample 1 :
- $tar_object = new Archive_Tar("tarname.tar");
- $tar_object->setErrorHandling(PEAR_ERROR_PRINT); // Optional error handling
- $v_list[0]="file.txt";
- $v_list[1]="data/"; (Optional '/' at the end)
- $v_list[2]="file.log";
- $tar_object->create($v_list);
-Sample 2 :
- $tar_object = new Archive_Tar("tarname.tar");
- $tar_object->setErrorHandling(PEAR_ERROR_PRINT); // Optional error handling
- $tar_object->create("file.txt data/ file.log");
-How it works :
- Just calling the createModify() method with the right parameters.
-
-Method : createModify($p_filelist, $p_add_dir, $p_remove_dir = "")
-Description :
- This method creates the archive file and add the files / directories
- that are listed in $p_filelist.
- If the file already exists and is writable, it is replaced by the
- new tar. It is a create and not an add. If the file exists and is
- read-only or is a directory it is not replaced. The method return
- false and a PEAR error text.
- The $p_filelist parameter can be an array of string, each string
- representing a filename or a directory name with their path if
- needed. It can also be a single string with names separated by a
- single blank.
- The path indicated in $p_remove_dir will be removed from the
- memorized path of each file / directory listed when this path
- exists. By default nothing is removed (empty path "")
- The path indicated in $p_add_dir will be added at the beginning of
- the memorized path of each file / directory listed. However it can
- be set to empty "". The adding of a path is done after the removing
- of path.
- The path add/remove ability enables the user to prepare an archive
- for extraction in a different path than the origin files are.
- See also addModify() method for file adding properties.
-Arguments :
- $p_filelist : An array of filenames and directory names, or a single
- string with names separated by a single blank space.
- $p_add_dir : A string which contains a path to be added to the
- memorized path of each element in the list.
- $p_remove_dir : A string which contains a path to be removed from
- the memorized path of each element in the list, when
- relevant.
-Return value :
- true on success, false on error.
-Sample 1 :
- $tar_object = new Archive_Tar("tarname.tar");
- $tar_object->setErrorHandling(PEAR_ERROR_PRINT); // Optional error handling
- $v_list[0]="file.txt";
- $v_list[1]="data/"; (Optional '/' at the end)
- $v_list[2]="file.log";
- $tar_object->createModify($v_list, "install");
- // files are stored in the archive as :
- // install/file.txt
- // install/data
- // install/data/file1.txt
- // install/data/... all the files and sub-dirs of data/
- // install/file.log
-Sample 2 :
- $tar_object = new Archive_Tar("tarname.tar");
- $tar_object->setErrorHandling(PEAR_ERROR_PRINT); // Optional error handling
- $v_list[0]="dev/file.txt";
- $v_list[1]="dev/data/"; (Optional '/' at the end)
- $v_list[2]="log/file.log";
- $tar_object->createModify($v_list, "install", "dev");
- // files are stored in the archive as :
- // install/file.txt
- // install/data
- // install/data/file1.txt
- // install/data/... all the files and sub-dirs of data/
- // install/log/file.log
-How it works :
- Open the file in write mode (erasing the existing one if one),
- call the _addList() method for adding the files in an empty archive,
- add the tar footer (512 bytes block), close the tar file.
-
-
-Method : addModify($p_filelist, $p_add_dir, $p_remove_dir="")
-Description :
- This method add the files / directories listed in $p_filelist at the
- end of the existing archive. If the archive does not yet exists it
- is created.
- The $p_filelist parameter can be an array of string, each string
- representing a filename or a directory name with their path if
- needed. It can also be a single string with names separated by a
- single blank.
- The path indicated in $p_remove_dir will be removed from the
- memorized path of each file / directory listed when this path
- exists. By default nothing is removed (empty path "")
- The path indicated in $p_add_dir will be added at the beginning of
- the memorized path of each file / directory listed. However it can
- be set to empty "". The adding of a path is done after the removing
- of path.
- The path add/remove ability enables the user to prepare an archive
- for extraction in a different path than the origin files are.
- If a file/dir is already in the archive it will only be added at the
- end of the archive. There is no update of the existing archived
- file/dir. However while extracting the archive, the last file will
- replace the first one. This results in a none optimization of the
- archive size.
- If a file/dir does not exist the file/dir is ignored. However an
- error text is send to PEAR error.
- If a file/dir is not readable the file/dir is ignored. However an
- error text is send to PEAR error.
- If the resulting filename/dirname (after the add/remove option or
- not) string is greater than 99 char, the file/dir is
- ignored. However an error text is send to PEAR error.
-Arguments :
- $p_filelist : An array of filenames and directory names, or a single
- string with names separated by a single blank space.
- $p_add_dir : A string which contains a path to be added to the
- memorized path of each element in the list.
- $p_remove_dir : A string which contains a path to be removed from
- the memorized path of each element in the list, when
- relevant.
-Return value :
- true on success, false on error.
-Sample 1 :
- $tar_object = new Archive_Tar("tarname.tar");
- [...]
- $v_list[0]="dev/file.txt";
- $v_list[1]="dev/data/"; (Optional '/' at the end)
- $v_list[2]="log/file.log";
- $tar_object->addModify($v_list, "install");
- // files are stored in the archive as :
- // install/file.txt
- // install/data
- // install/data/file1.txt
- // install/data/... all the files and sub-dirs of data/
- // install/file.log
-Sample 2 :
- $tar_object = new Archive_Tar("tarname.tar");
- [...]
- $v_list[0]="dev/file.txt";
- $v_list[1]="dev/data/"; (Optional '/' at the end)
- $v_list[2]="log/file.log";
- $tar_object->addModify($v_list, "install", "dev");
- // files are stored in the archive as :
- // install/file.txt
- // install/data
- // install/data/file1.txt
- // install/data/... all the files and sub-dirs of data/
- // install/log/file.log
-How it works :
- If the archive does not exists it create it and add the files.
- If the archive does exists and is not compressed, it open it, jump
- before the last empty 512 bytes block (tar footer) and add the files
- at this point.
- If the archive does exists and is compressed, a temporary copy file
- is created. This temporary file is then 'gzip' read block by block
- until the last empty block. The new files are then added in the
- compressed file.
- The adding of files is done by going through the file/dir list,
- adding files per files, in a recursive way through the
- directory. Each time a path need to be added/removed it is done
- before writing the file header in the archive.
-
-Method : add($p_filelist)
-Description :
- This method add the files / directories listed in $p_filelist at the
- end of the existing archive. If the archive does not yet exists it
- is created.
- The $p_filelist parameter can be an array of string, each string
- representing a filename or a directory name with their path if
- needed. It can also be a single string with names separated by a
- single blank.
- See addModify() method for details and limitations.
-Arguments :
- $p_filelist : An array of filenames and directory names, or a single
- string with names separated by a single blank space.
-Return value :
- true on success, false on error.
-Sample 1 :
- $tar_object = new Archive_Tar("tarname.tar");
- [...]
- $v_list[0]="dev/file.txt";
- $v_list[1]="dev/data/"; (Optional '/' at the end)
- $v_list[2]="log/file.log";
- $tar_object->add($v_list);
-Sample 2 :
- $tar_object = new Archive_Tar("tarname.tgz", true);
- [...]
- $v_list[0]="dev/file.txt";
- $v_list[1]="dev/data/"; (Optional '/' at the end)
- $v_list[2]="log/file.log";
- $tar_object->add($v_list);
-How it works :
- Simply call the addModify() method with the right parameters.
-
-Method : extract($p_path = "")
-Description :
- This method extract all the content of the archive in the directory
- indicated by $p_path.If $p_path is optional, if not set the archive
- is extracted in the current directory.
- While extracting a file, if the directory path does not exists it is
- created.
- See extractModify() for details and limitations.
-Arguments :
- $p_path : Optional path where the files/dir need to by extracted.
-Return value :
- true on success, false on error.
-Sample :
- $tar_object = new Archive_Tar("tarname.tar");
- $tar_object->extract();
-How it works :
- Simply call the extractModify() method with appropriate parameters.
-
-Method : extractModify($p_path, $p_remove_path)
-Description :
- This method extract all the content of the archive in the directory
- indicated by $p_path. When relevant the memorized path of the
- files/dir can be modified by removing the $p_remove_path path at the
- beginning of the file/dir path.
- While extracting a file, if the directory path does not exists it is
- created.
- While extracting a file, if the file already exists it is replaced
- without looking for last modification date.
- While extracting a file, if the file already exists and is write
- protected, the extraction is aborted.
- While extracting a file, if a directory with the same name already
- exists, the extraction is aborted.
- While extracting a directory, if a file with the same name already
- exists, the extraction is aborted.
- While extracting a file/directory if the destination directory exist
- and is write protected, or does not exist but can not be created,
- the extraction is aborted.
- If after extraction an extracted file does not show the correct
- stored file size, the extraction is aborted.
- When the extraction is aborted, a PEAR error text is set and false
- is returned. However the result can be a partial extraction that may
- need to be manually cleaned.
-Arguments :
- $p_path : The path of the directory where the files/dir need to by
- extracted.
- $p_remove_path : Part of the memorized path that can be removed if
- present at the beginning of the file/dir path.
-Return value :
- true on success, false on error.
-Sample :
- // Imagine tarname.tar with files :
- // dev/data/file.txt
- // dev/data/log.txt
- // readme.txt
- $tar_object = new Archive_Tar("tarname.tar");
- $tar_object->extractModify("install", "dev");
- // Files will be extracted there :
- // install/data/file.txt
- // install/data/log.txt
- // install/readme.txt
-How it works :
- Open the archive and call a more generic function that can extract
- only a part of the archive or all the archive.
- See extractList() method for more details.
-
-Method : listContent()
-Description :
- This method returns an array of arrays that describe each
- file/directory present in the archive.
- The array is not sorted, so it show the position of the file in the
- archive.
- The file informations are :
- $file[filename] : Name and path of the file/dir.
- $file[mode] : File permissions (result of fileperms())
- $file[uid] : user id
- $file[gid] : group id
- $file[size] : filesize
- $file[mtime] : Last modification time (result of filemtime())
- $file[typeflag] : "" for file, "5" for directory
-Arguments :
-Return value :
- An array of arrays or 0 on error.
-Sample :
- $tar_object = new Archive_Tar("tarname.tar");
- if (($v_list = $tar_object->listContent()) != 0)
- for ($i=0; $i<sizeof($v_list); $i++)
- {
- echo "Filename :'".$v_list[$i][filename]."'<br>";
- echo " .size :'".$v_list[$i][size]."'<br>";
- echo " .mtime :'".$v_list[$i][mtime]."' (".
- date("l dS of F Y h:i:s A", $v_list[$i][mtime]).")<br>";
- echo " .mode :'".$v_list[$i][mode]."'<br>";
- echo " .uid :'".$v_list[$i][uid]."'<br>";
- echo " .gid :'".$v_list[$i][gid]."'<br>";
- echo " .typeflag :'".$v_list[$i][typeflag]."'<br>";
- }
-How it works :
- Call the same function as an extract however with a flag to only go
- through the archive without extracting the files.
-
-Method : extractList($p_filelist, $p_path = "", $p_remove_path = "")
-Description :
- This method extract from the archive only the files indicated in the
- $p_filelist. These files are extracted in the current directory or
- in the directory indicated by the optional $p_path parameter.
- If indicated the $p_remove_path can be used in the same way as it is
- used in extractModify() method.
-Arguments :
- $p_filelist : An array of filenames and directory names, or a single
- string with names separated by a single blank space.
- $p_path : The path of the directory where the files/dir need to by
- extracted.
- $p_remove_path : Part of the memorized path that can be removed if
- present at the beginning of the file/dir path.
-Return value :
- true on success, false on error.
-Sample :
- // Imagine tarname.tar with files :
- // dev/data/file.txt
- // dev/data/log.txt
- // readme.txt
- $tar_object = new Archive_Tar("tarname.tar");
- $tar_object->extractList("dev/data/file.txt readme.txt", "install",
- "dev");
- // Files will be extracted there :
- // install/data/file.txt
- // install/readme.txt
-How it works :
- Go through the archive and extract only the files present in the
- list.
-
diff --git a/pear/CODING_STANDARDS b/pear/CODING_STANDARDS
deleted file mode 100644
index 7f6e89d4cf..0000000000
--- a/pear/CODING_STANDARDS
+++ /dev/null
@@ -1,8 +0,0 @@
-===========================================================================
-| PEAR Coding Standards |
-===========================================================================
-
-$Id$
-
-This document is no longer maintained, see
-http://pear.php.net/manual/en/standards.php instead.
diff --git a/pear/Console/Getopt.php b/pear/Console/Getopt.php
deleted file mode 100644
index ed40475189..0000000000
--- a/pear/Console/Getopt.php
+++ /dev/null
@@ -1,251 +0,0 @@
-<?php
-/* vim: set expandtab tabstop=4 shiftwidth=4: */
-// +----------------------------------------------------------------------+
-// | PHP Version 5 |
-// +----------------------------------------------------------------------+
-// | Copyright (c) 1997-2004 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: Andrei Zmievski <andrei@php.net> |
-// +----------------------------------------------------------------------+
-//
-// $Id$
-
-require_once 'PEAR.php';
-
-/**
- * Command-line options parsing class.
- *
- * @author Andrei Zmievski <andrei@php.net>
- *
- */
-class Console_Getopt {
- /**
- * Parses the command-line options.
- *
- * The first parameter to this function should be the list of command-line
- * arguments without the leading reference to the running program.
- *
- * The second parameter is a string of allowed short options. Each of the
- * option letters can be followed by a colon ':' to specify that the option
- * requires an argument, or a double colon '::' to specify that the option
- * takes an optional argument.
- *
- * The third argument is an optional array of allowed long options. The
- * leading '--' should not be included in the option name. Options that
- * require an argument should be followed by '=', and options that take an
- * option argument should be followed by '=='.
- *
- * The return value is an array of two elements: the list of parsed
- * options and the list of non-option command-line arguments. Each entry in
- * the list of parsed options is a pair of elements - the first one
- * specifies the option, and the second one specifies the option argument,
- * if there was one.
- *
- * Long and short options can be mixed.
- *
- * Most of the semantics of this function are based on GNU getopt_long().
- *
- * @param array $args an array of command-line arguments
- * @param string $short_options specifies the list of allowed short options
- * @param array $long_options specifies the list of allowed long options
- *
- * @return array two-element array containing the list of parsed options and
- * the non-option arguments
- *
- * @access public
- *
- */
- function getopt2($args, $short_options, $long_options = null)
- {
- return Console_Getopt::doGetopt(2, $args, $short_options, $long_options);
- }
-
- /**
- * This function expects $args to start with the script name (POSIX-style).
- * Preserved for backwards compatibility.
- * @see getopt2()
- */
- function getopt($args, $short_options, $long_options = null)
- {
- return Console_Getopt::doGetopt(1, $args, $short_options, $long_options);
- }
-
- /**
- * The actual implementation of the argument parsing code.
- */
- function doGetopt($version, $args, $short_options, $long_options = null)
- {
- // in case you pass directly readPHPArgv() as the first arg
- if (PEAR::isError($args)) {
- return $args;
- }
- if (empty($args)) {
- return array(array(), array());
- }
- $opts = array();
- $non_opts = array();
-
- settype($args, 'array');
-
- if ($long_options) {
- sort($long_options);
- }
-
- /*
- * Preserve backwards compatibility with callers that relied on
- * erroneous POSIX fix.
- */
- if ($version < 2) {
- if (isset($args[0]{0}) && $args[0]{0} != '-') {
- array_shift($args);
- }
- }
-
- reset($args);
- while (list($i, $arg) = each($args)) {
-
- /* The special element '--' means explicit end of
- options. Treat the rest of the arguments as non-options
- and end the loop. */
- if ($arg == '--') {
- $non_opts = array_merge($non_opts, array_slice($args, $i + 1));
- break;
- }
-
- if ($arg{0} != '-' || (strlen($arg) > 1 && $arg{1} == '-' && !$long_options)) {
- $non_opts = array_merge($non_opts, array_slice($args, $i));
- break;
- } elseif (strlen($arg) > 1 && $arg{1} == '-') {
- $error = Console_Getopt::_parseLongOption(substr($arg, 2), $long_options, $opts, $args);
- if (PEAR::isError($error))
- return $error;
- } else {
- $error = Console_Getopt::_parseShortOption(substr($arg, 1), $short_options, $opts, $args);
- if (PEAR::isError($error))
- return $error;
- }
- }
-
- return array($opts, $non_opts);
- }
-
- /**
- * @access private
- *
- */
- function _parseShortOption($arg, $short_options, &$opts, &$args)
- {
- for ($i = 0; $i < strlen($arg); $i++) {
- $opt = $arg{$i};
- $opt_arg = null;
-
- /* Try to find the short option in the specifier string. */
- if (($spec = strstr($short_options, $opt)) === false || $arg{$i} == ':')
- {
- return PEAR::raiseError("Console_Getopt: unrecognized option -- $opt");
- }
-
- if (strlen($spec) > 1 && $spec{1} == ':') {
- if (strlen($spec) > 2 && $spec{2} == ':') {
- if ($i + 1 < strlen($arg)) {
- /* Option takes an optional argument. Use the remainder of
- the arg string if there is anything left. */
- $opts[] = array($opt, substr($arg, $i + 1));
- break;
- }
- } else {
- /* Option requires an argument. Use the remainder of the arg
- string if there is anything left. */
- if ($i + 1 < strlen($arg)) {
- $opts[] = array($opt, substr($arg, $i + 1));
- break;
- } else if (list(, $opt_arg) = each($args))
- /* Else use the next argument. */;
- else
- return PEAR::raiseError("Console_Getopt: option requires an argument -- $opt");
- }
- }
-
- $opts[] = array($opt, $opt_arg);
- }
- }
-
- /**
- * @access private
- *
- */
- function _parseLongOption($arg, $long_options, &$opts, &$args)
- {
- @list($opt, $opt_arg) = explode('=', $arg);
- $opt_len = strlen($opt);
-
- for ($i = 0; $i < count($long_options); $i++) {
- $long_opt = $long_options[$i];
- $opt_start = substr($long_opt, 0, $opt_len);
-
- /* Option doesn't match. Go on to the next one. */
- if ($opt_start != $opt)
- continue;
-
- $opt_rest = substr($long_opt, $opt_len);
-
- /* Check that the options uniquely matches one of the allowed
- options. */
- if ($opt_rest != '' && $opt{0} != '=' &&
- $i + 1 < count($long_options) &&
- $opt == substr($long_options[$i+1], 0, $opt_len)) {
- return PEAR::raiseError("Console_Getopt: option --$opt is ambiguous");
- }
-
- if (substr($long_opt, -1) == '=') {
- if (substr($long_opt, -2) != '==') {
- /* Long option requires an argument.
- Take the next argument if one wasn't specified. */;
- if (!strlen($opt_arg) && !(list(, $opt_arg) = each($args))) {
- return PEAR::raiseError("Console_Getopt: option --$opt requires an argument");
- }
- }
- } else if ($opt_arg) {
- return PEAR::raiseError("Console_Getopt: option --$opt doesn't allow an argument");
- }
-
- $opts[] = array('--' . $opt, $opt_arg);
- return;
- }
-
- return PEAR::raiseError("Console_Getopt: unrecognized option --$opt");
- }
-
- /**
- * Safely read the $argv PHP array across different PHP configurations.
- * Will take care on register_globals and register_argc_argv ini directives
- *
- * @access public
- * @return mixed the $argv PHP array or PEAR error if not registered
- */
- function readPHPArgv()
- {
- global $argv;
- if (!is_array($argv)) {
- if (!@is_array($_SERVER['argv'])) {
- if (!@is_array($GLOBALS['HTTP_SERVER_VARS']['argv'])) {
- return PEAR::raiseError("Console_Getopt: Could not read cmd args (register_argc_argv=Off?)");
- }
- return $GLOBALS['HTTP_SERVER_VARS']['argv'];
- }
- return $_SERVER['argv'];
- }
- return $argv;
- }
-
-}
-
-?>
diff --git a/pear/Console/tests/001-getopt.phpt b/pear/Console/tests/001-getopt.phpt
deleted file mode 100644
index 3985dc9beb..0000000000
--- a/pear/Console/tests/001-getopt.phpt
+++ /dev/null
@@ -1,68 +0,0 @@
---TEST--
-Console_Getopt
---SKIPIF--
-skip
---FILE--
-<?php
-
-error_reporting(E_ALL);
-chdir(dirname(__FILE__));
-include "../Getopt.php";
-PEAR::setErrorHandling(PEAR_ERROR_PRINT, "%s\n\n");
-
-function test($argstr, $optstr) {
- $argv = split('[[:space:]]+', $argstr);
- if (PEAR::isError($options = Console_Getopt::getopt($argv, $optstr))) {
- return;
- }
- $opts = $options[0];
- $non_opts = $options[1];
- $i = 0;
- print "options: ";
- foreach ($opts as $o => $d) {
- if ($i++ > 0) {
- print ", ";
- }
- print $d[0] . '=' . $d[1];
- }
- print "\n";
- print "params: " . implode(", ", $non_opts) . "\n";
- print "\n";
-}
-
-test("-abc", "abc");
-test("-abc foo", "abc");
-test("-abc foo", "abc:");
-test("-abc foo bar gazonk", "abc");
-test("-abc foo bar gazonk", "abc:");
-test("-a -b -c", "abc");
-test("-a -b -c", "abc:");
-test("-abc", "ab:c");
-test("-abc foo -bar gazonk", "abc");
-?>
---EXPECT--
-options: a=, b=, c=
-params:
-
-options: a=, b=, c=
-params: foo
-
-options: a=, b=, c=foo
-params:
-
-options: a=, b=, c=
-params: foo, bar, gazonk
-
-options: a=, b=, c=foo
-params: bar, gazonk
-
-options: a=, b=, c=
-params:
-
-Console_Getopt: option requires an argument -- c
-
-options: a=, b=c
-params:
-
-options: a=, b=, c=
-params: foo, -bar, gazonk
diff --git a/pear/Makefile.frag b/pear/Makefile.frag
deleted file mode 100644
index 743fa9dae8..0000000000
--- a/pear/Makefile.frag
+++ /dev/null
@@ -1,22 +0,0 @@
-# -*- makefile -*-
-
-peardir=$(PEAR_INSTALLDIR)
-
-# Skip all php.ini files altogether
-PEAR_INSTALL_FLAGS = -n -dshort_open_tag=0 -dsafe_mode=0
-
-install-pear-installer: $(top_builddir)/sapi/cli/php
- @$(top_builddir)/sapi/cli/php $(PEAR_INSTALL_FLAGS) $(srcdir)/install-pear.php -d "$(peardir)" -b "$(bindir)" $(srcdir)/package-*.xml
-
-install-pear-packages: $(top_builddir)/sapi/cli/php
- @$(top_builddir)/sapi/cli/php $(PEAR_INSTALL_FLAGS) $(srcdir)/install-pear.php -d "$(peardir)" -b "$(bindir)" $(srcdir)/packages/*.tar
-
-install-pear:
- @echo "Installing PEAR environment: $(INSTALL_ROOT)$(peardir)/"
- @if $(mkinstalldirs) $(INSTALL_ROOT)$(peardir); then \
- $(MAKE) -s install-pear-installer install-pear-packages; \
- else \
- cat $(srcdir)/install-pear.txt; \
- exit 5; \
- fi
-
diff --git a/pear/OS/Guess.php b/pear/OS/Guess.php
deleted file mode 100644
index 4b366d8c2a..0000000000
--- a/pear/OS/Guess.php
+++ /dev/null
@@ -1,265 +0,0 @@
-<?php
-//
-// +----------------------------------------------------------------------+
-// | PHP Version 5 |
-// +----------------------------------------------------------------------+
-// | Copyright (c) 1997-2004 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. |
-// +----------------------------------------------------------------------+
-// | Authors: Stig Bakken <ssb@php.net> |
-// | |
-// +----------------------------------------------------------------------+
-//
-// $Id$
-
-// {{{ uname examples
-
-// php_uname() without args returns the same as 'uname -a', or a PHP-custom
-// string for Windows.
-// PHP versions prior to 4.3 return the uname of the host where PHP was built,
-// as of 4.3 it returns the uname of the host running the PHP code.
-//
-// PC RedHat Linux 7.1:
-// Linux host.example.com 2.4.2-2 #1 Sun Apr 8 20:41:30 EDT 2001 i686 unknown
-//
-// PC Debian Potato:
-// Linux host 2.4.17 #2 SMP Tue Feb 12 15:10:04 CET 2002 i686 unknown
-//
-// PC FreeBSD 3.3:
-// FreeBSD host.example.com 3.3-STABLE FreeBSD 3.3-STABLE #0: Mon Feb 21 00:42:31 CET 2000 root@example.com:/usr/src/sys/compile/CONFIG i386
-//
-// PC FreeBSD 4.3:
-// FreeBSD host.example.com 4.3-RELEASE FreeBSD 4.3-RELEASE #1: Mon Jun 25 11:19:43 EDT 2001 root@example.com:/usr/src/sys/compile/CONFIG i386
-//
-// PC FreeBSD 4.5:
-// FreeBSD host.example.com 4.5-STABLE FreeBSD 4.5-STABLE #0: Wed Feb 6 23:59:23 CET 2002 root@example.com:/usr/src/sys/compile/CONFIG i386
-//
-// PC FreeBSD 4.5 w/uname from GNU shellutils:
-// FreeBSD host.example.com 4.5-STABLE FreeBSD 4.5-STABLE #0: Wed Feb i386 unknown
-//
-// HP 9000/712 HP-UX 10:
-// HP-UX iq B.10.10 A 9000/712 2008429113 two-user license
-//
-// HP 9000/712 HP-UX 10 w/uname from GNU shellutils:
-// HP-UX host B.10.10 A 9000/712 unknown
-//
-// IBM RS6000/550 AIX 4.3:
-// AIX host 3 4 000003531C00
-//
-// AIX 4.3 w/uname from GNU shellutils:
-// AIX host 3 4 000003531C00 unknown
-//
-// SGI Onyx IRIX 6.5 w/uname from GNU shellutils:
-// IRIX64 host 6.5 01091820 IP19 mips
-//
-// SGI Onyx IRIX 6.5:
-// IRIX64 host 6.5 01091820 IP19
-//
-// SparcStation 20 Solaris 8 w/uname from GNU shellutils:
-// SunOS host.example.com 5.8 Generic_108528-12 sun4m sparc
-//
-// SparcStation 20 Solaris 8:
-// SunOS host.example.com 5.8 Generic_108528-12 sun4m sparc SUNW,SPARCstation-20
-//
-
-// }}}
-
-/* TODO:
- * - define endianness, to allow matchSignature("bigend") etc.
- */
-
-class OS_Guess
-{
- var $sysname;
- var $nodename;
- var $cpu;
- var $release;
- var $extra;
-
- function OS_Guess($uname = null)
- {
- list($this->sysname,
- $this->release,
- $this->cpu,
- $this->extra,
- $this->nodename) = $this->parseSignature($uname);
- }
-
- function parseSignature($uname = null)
- {
- static $sysmap = array(
- 'HP-UX' => 'hpux',
- 'IRIX64' => 'irix',
- // Darwin?
- );
- static $cpumap = array(
- 'i586' => 'i386',
- 'i686' => 'i386',
- );
- if ($uname === null) {
- $uname = php_uname();
- }
- $parts = split('[[:space:]]+', trim($uname));
- $n = count($parts);
-
- $release = $machine = $cpu = '';
- $sysname = $parts[0];
- $nodename = $parts[1];
- $cpu = $parts[$n-1];
- $extra = '';
- if ($cpu == 'unknown') {
- $cpu = $parts[$n-2];
- }
-
- switch ($sysname) {
- case 'AIX':
- $release = "$parts[3].$parts[2]";
- break;
- case 'Windows':
- switch ($parts[1]) {
- case '95/98':
- $release = '9x';
- break;
- default:
- $release = $parts[1];
- break;
- }
- $cpu = 'i386';
- break;
- case 'Linux':
- $extra = $this->_detectGlibcVersion();
- // use only the first two digits from the kernel version
- $release = ereg_replace('^([[:digit:]]+\.[[:digit:]]+).*', '\1', $parts[2]);
- break;
- default:
- $release = ereg_replace('-.*', '', $parts[2]);
- break;
- }
-
-
- if (isset($sysmap[$sysname])) {
- $sysname = $sysmap[$sysname];
- } else {
- $sysname = strtolower($sysname);
- }
- if (isset($cpumap[$cpu])) {
- $cpu = $cpumap[$cpu];
- }
- return array($sysname, $release, $cpu, $extra, $nodename);
- }
-
- function _detectGlibcVersion()
- {
- // Use glibc's <features.h> header file to
- // get major and minor version number:
- include_once "System.php";
- $tmpfile = System::mktemp("glibctest");
- $fp = fopen($tmpfile, "w");
- fwrite($fp, "#include <features.h>\n__GLIBC__ __GLIBC_MINOR__\n");
- fclose($fp);
- $cpp = popen("/usr/bin/cpp $tmpfile", "r");
- $major = $minor = 0;
- while ($line = fgets($cpp, 1024)) {
- if ($line{0} == '#' || trim($line) == '') {
- continue;
- }
- if (list($major, $minor) = explode(' ', trim($line))) {
- break;
- }
- }
- pclose($cpp);
- unlink($tmpfile);
- if (!($major && $minor) && is_link('/lib/libc.so.6')) {
- // Let's try reading the libc.so.6 symlink
- if (ereg('^libc-([.*])\.so$', basename(readlink('/lib/libc.so.6')), $matches)) {
- list($major, $minor) = explode('.', $matches);
- }
- }
- if (!($major && $minor)) {
- return '';
- }
- return "glibc{$major}.{$minor}";
- }
-
- function getSignature()
- {
- if (empty($this->extra)) {
- return "{$this->sysname}-{$this->release}-{$this->cpu}";
- }
- return "{$this->sysname}-{$this->release}-{$this->cpu}-{$this->extra}";
- }
-
- function getSysname()
- {
- return $this->sysname;
- }
-
- function getNodename()
- {
- return $this->nodename;
- }
-
- function getCpu()
- {
- return $this->cpu;
- }
-
- function getRelease()
- {
- return $this->release;
- }
-
- function getExtra()
- {
- return $this->extra;
- }
-
- function matchSignature($match)
- {
- if (is_array($match)) {
- $fragments = $match;
- } else {
- $fragments = explode('-', $match);
- }
- $n = count($fragments);
- $matches = 0;
- if ($n > 0) {
- $matches += $this->_matchFragment($fragments[0], $this->sysname);
- }
- if ($n > 1) {
- $matches += $this->_matchFragment($fragments[1], $this->release);
- }
- if ($n > 2) {
- $matches += $this->_matchFragment($fragments[2], $this->cpu);
- }
- if ($n > 3) {
- $matches += $this->_matchFragment($fragments[3], $this->extra);
- }
- return ($matches == $n);
- }
-
- function _matchFragment($fragment, $value)
- {
- if (strcspn($fragment, '*?') < strlen($fragment)) {
- $reg = '^' . str_replace(array('*', '?', '/'), array('.*', '.', '\\/'), $fragment) . '$';
- return eregi($reg, $value);
- }
- return ($fragment == '*' || !strcasecmp($fragment, $value));
- }
-
-}
-
-/*
- * Local Variables:
- * indent-tabs-mode: nil
- * c-basic-offset: 4
- * End:
- */
-?>
diff --git a/pear/PEAR.php b/pear/PEAR.php
deleted file mode 100644
index a42b825f6a..0000000000
--- a/pear/PEAR.php
+++ /dev/null
@@ -1,975 +0,0 @@
-<?php
-//
-// +--------------------------------------------------------------------+
-// | PEAR, the PHP Extension and Application Repository |
-// +--------------------------------------------------------------------+
-// | Copyright (c) 1997-2004 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. |
-// +--------------------------------------------------------------------+
-// | Authors: Sterling Hughes <sterling@php.net> |
-// | Stig Bakken <ssb@php.net> |
-// | Tomas V.V.Cox <cox@idecnet.com> |
-// +--------------------------------------------------------------------+
-//
-// $Id$
-//
-
-define('PEAR_ERROR_RETURN', 1);
-define('PEAR_ERROR_PRINT', 2);
-define('PEAR_ERROR_TRIGGER', 4);
-define('PEAR_ERROR_DIE', 8);
-define('PEAR_ERROR_CALLBACK', 16);
-/**
- * WARNING: obsolete
- * @deprecated
- */
-define('PEAR_ERROR_EXCEPTION', 32);
-define('PEAR_ZE2', (function_exists('version_compare') &&
- version_compare(zend_version(), "2-dev", "ge")));
-
-if (substr(PHP_OS, 0, 3) == 'WIN') {
- define('OS_WINDOWS', true);
- define('OS_UNIX', false);
- define('PEAR_OS', 'Windows');
-} else {
- define('OS_WINDOWS', false);
- define('OS_UNIX', true);
- define('PEAR_OS', 'Unix'); // blatant assumption
-}
-
-// instant backwards compatibility
-if (!defined('PATH_SEPARATOR')) {
- if (OS_WINDOWS) {
- define('PATH_SEPARATOR', ';');
- } else {
- define('PATH_SEPARATOR', ':');
- }
-}
-
-$GLOBALS['_PEAR_default_error_mode'] = PEAR_ERROR_RETURN;
-$GLOBALS['_PEAR_default_error_options'] = E_USER_NOTICE;
-$GLOBALS['_PEAR_destructor_object_list'] = array();
-$GLOBALS['_PEAR_shutdown_funcs'] = array();
-$GLOBALS['_PEAR_error_handler_stack'] = array();
-
-ini_set('track_errors', true);
-
-/**
- * Base class for other PEAR classes. Provides rudimentary
- * emulation of destructors.
- *
- * If you want a destructor in your class, inherit PEAR and make a
- * destructor method called _yourclassname (same name as the
- * constructor, but with a "_" prefix). Also, in your constructor you
- * have to call the PEAR constructor: $this->PEAR();.
- * The destructor method will be called without parameters. Note that
- * at in some SAPI implementations (such as Apache), any output during
- * the request shutdown (in which destructors are called) seems to be
- * discarded. If you need to get any debug information from your
- * destructor, use error_log(), syslog() or something similar.
- *
- * IMPORTANT! To use the emulated destructors you need to create the
- * objects by reference: $obj =& new PEAR_child;
- *
- * @since PHP 4.0.2
- * @author Stig Bakken <ssb@php.net>
- * @see http://pear.php.net/manual/
- */
-class PEAR
-{
- // {{{ properties
-
- /**
- * Whether to enable internal debug messages.
- *
- * @var bool
- * @access private
- */
- var $_debug = false;
-
- /**
- * Default error mode for this object.
- *
- * @var int
- * @access private
- */
- var $_default_error_mode = null;
-
- /**
- * Default error options used for this object when error mode
- * is PEAR_ERROR_TRIGGER.
- *
- * @var int
- * @access private
- */
- var $_default_error_options = null;
-
- /**
- * Default error handler (callback) for this object, if error mode is
- * PEAR_ERROR_CALLBACK.
- *
- * @var string
- * @access private
- */
- var $_default_error_handler = '';
-
- /**
- * Which class to use for error objects.
- *
- * @var string
- * @access private
- */
- var $_error_class = 'PEAR_Error';
-
- /**
- * An array of expected errors.
- *
- * @var array
- * @access private
- */
- var $_expected_errors = array();
-
- // }}}
-
- // {{{ constructor
-
- /**
- * Constructor. Registers this object in
- * $_PEAR_destructor_object_list for destructor emulation if a
- * destructor object exists.
- *
- * @param string $error_class (optional) which class to use for
- * error objects, defaults to PEAR_Error.
- * @access public
- * @return void
- */
- function PEAR($error_class = null)
- {
- $classname = get_class($this);
- if ($this->_debug) {
- print "PEAR constructor called, class=$classname\n";
- }
- if ($error_class !== null) {
- $this->_error_class = $error_class;
- }
- while ($classname && strcasecmp($classname, "pear")) {
- $destructor = "_$classname";
- if (method_exists($this, $destructor)) {
- global $_PEAR_destructor_object_list;
- $_PEAR_destructor_object_list[] = &$this;
- break;
- } else {
- $classname = get_parent_class($classname);
- }
- }
- }
-
- // }}}
- // {{{ destructor
-
- /**
- * Destructor (the emulated type of...). Does nothing right now,
- * but is included for forward compatibility, so subclass
- * destructors should always call it.
- *
- * See the note in the class desciption about output from
- * destructors.
- *
- * @access public
- * @return void
- */
- function _PEAR() {
- if ($this->_debug) {
- printf("PEAR destructor called, class=%s\n", get_class($this));
- }
- }
-
- // }}}
- // {{{ getStaticProperty()
-
- /**
- * If you have a class that's mostly/entirely static, and you need static
- * properties, you can use this method to simulate them. Eg. in your method(s)
- * do this: $myVar = &PEAR::getStaticProperty('myclass', 'myVar');
- * You MUST use a reference, or they will not persist!
- *
- * @access public
- * @param string $class The calling classname, to prevent clashes
- * @param string $var The variable to retrieve.
- * @return mixed A reference to the variable. If not set it will be
- * auto initialised to NULL.
- */
- function &getStaticProperty($class, $var)
- {
- static $properties;
- return $properties[$class][$var];
- }
-
- // }}}
- // {{{ registerShutdownFunc()
-
- /**
- * Use this function to register a shutdown method for static
- * classes.
- *
- * @access public
- * @param mixed $func The function name (or array of class/method) to call
- * @param mixed $args The arguments to pass to the function
- * @return void
- */
- function registerShutdownFunc($func, $args = array())
- {
- $GLOBALS['_PEAR_shutdown_funcs'][] = array($func, $args);
- }
-
- // }}}
- // {{{ isError()
-
- /**
- * Tell whether a value is a PEAR error.
- *
- * @param mixed $data the value to test
- * @param int $code if $data is an error object, return true
- * only if $code is a string and
- * $obj->getMessage() == $code or
- * $code is an integer and $obj->getCode() == $code
- * @access public
- * @return bool true if parameter is an error
- */
- function isError($data, $code = null)
- {
- if (is_a($data, 'PEAR_Error')) {
- if (is_null($code)) {
- return true;
- } elseif (is_string($code)) {
- return $data->getMessage() == $code;
- } else {
- return $data->getCode() == $code;
- }
- }
- return false;
- }
-
- // }}}
- // {{{ setErrorHandling()
-
- /**
- * Sets how errors generated by this object should be handled.
- * Can be invoked both in objects and statically. If called
- * statically, setErrorHandling sets the default behaviour for all
- * PEAR objects. If called in an object, setErrorHandling sets
- * the default behaviour for that object.
- *
- * @param int $mode
- * One of PEAR_ERROR_RETURN, PEAR_ERROR_PRINT,
- * PEAR_ERROR_TRIGGER, PEAR_ERROR_DIE,
- * PEAR_ERROR_CALLBACK or PEAR_ERROR_EXCEPTION.
- *
- * @param mixed $options
- * When $mode is PEAR_ERROR_TRIGGER, this is the error level (one
- * of E_USER_NOTICE, E_USER_WARNING or E_USER_ERROR).
- *
- * When $mode is PEAR_ERROR_CALLBACK, this parameter is expected
- * to be the callback function or method. A callback
- * function is a string with the name of the function, a
- * callback method is an array of two elements: the element
- * at index 0 is the object, and the element at index 1 is
- * the name of the method to call in the object.
- *
- * When $mode is PEAR_ERROR_PRINT or PEAR_ERROR_DIE, this is
- * a printf format string used when printing the error
- * message.
- *
- * @access public
- * @return void
- * @see PEAR_ERROR_RETURN
- * @see PEAR_ERROR_PRINT
- * @see PEAR_ERROR_TRIGGER
- * @see PEAR_ERROR_DIE
- * @see PEAR_ERROR_CALLBACK
- * @see PEAR_ERROR_EXCEPTION
- *
- * @since PHP 4.0.5
- */
-
- function setErrorHandling($mode = null, $options = null)
- {
- if (isset($this) && is_a($this, 'PEAR')) {
- $setmode = &$this->_default_error_mode;
- $setoptions = &$this->_default_error_options;
- } else {
- $setmode = &$GLOBALS['_PEAR_default_error_mode'];
- $setoptions = &$GLOBALS['_PEAR_default_error_options'];
- }
-
- switch ($mode) {
- case PEAR_ERROR_EXCEPTION:
- case PEAR_ERROR_RETURN:
- case PEAR_ERROR_PRINT:
- case PEAR_ERROR_TRIGGER:
- case PEAR_ERROR_DIE:
- case null:
- $setmode = $mode;
- $setoptions = $options;
- break;
-
- case PEAR_ERROR_CALLBACK:
- $setmode = $mode;
- // class/object method callback
- if (is_callable($options)) {
- $setoptions = $options;
- } else {
- trigger_error("invalid error callback", E_USER_WARNING);
- }
- break;
-
- default:
- trigger_error("invalid error mode", E_USER_WARNING);
- break;
- }
- }
-
- // }}}
- // {{{ expectError()
-
- /**
- * This method is used to tell which errors you expect to get.
- * Expected errors are always returned with error mode
- * PEAR_ERROR_RETURN. Expected error codes are stored in a stack,
- * and this method pushes a new element onto it. The list of
- * expected errors are in effect until they are popped off the
- * stack with the popExpect() method.
- *
- * Note that this method can not be called statically
- *
- * @param mixed $code a single error code or an array of error codes to expect
- *
- * @return int the new depth of the "expected errors" stack
- * @access public
- */
- function expectError($code = '*')
- {
- if (is_array($code)) {
- array_push($this->_expected_errors, $code);
- } else {
- array_push($this->_expected_errors, array($code));
- }
- return sizeof($this->_expected_errors);
- }
-
- // }}}
- // {{{ popExpect()
-
- /**
- * This method pops one element off the expected error codes
- * stack.
- *
- * @return array the list of error codes that were popped
- */
- function popExpect()
- {
- return array_pop($this->_expected_errors);
- }
-
- // }}}
- // {{{ _checkDelExpect()
-
- /**
- * This method checks unsets an error code if available
- *
- * @param mixed error code
- * @return bool true if the error code was unset, false otherwise
- * @access private
- * @since PHP 4.3.0
- */
- function _checkDelExpect($error_code)
- {
- $deleted = false;
-
- foreach ($this->_expected_errors AS $key => $error_array) {
- if (in_array($error_code, $error_array)) {
- unset($this->_expected_errors[$key][array_search($error_code, $error_array)]);
- $deleted = true;
- }
-
- // clean up empty arrays
- if (0 == count($this->_expected_errors[$key])) {
- unset($this->_expected_errors[$key]);
- }
- }
- return $deleted;
- }
-
- // }}}
- // {{{ delExpect()
-
- /**
- * This method deletes all occurences of the specified element from
- * the expected error codes stack.
- *
- * @param mixed $error_code error code that should be deleted
- * @return mixed list of error codes that were deleted or error
- * @access public
- * @since PHP 4.3.0
- */
- function delExpect($error_code)
- {
- $deleted = false;
-
- if ((is_array($error_code) && (0 != count($error_code)))) {
- // $error_code is a non-empty array here;
- // we walk through it trying to unset all
- // values
- foreach($error_code as $key => $error) {
- if ($this->_checkDelExpect($error)) {
- $deleted = true;
- } else {
- $deleted = false;
- }
- }
- return $deleted ? true : PEAR::raiseError("The expected error you submitted does not exist"); // IMPROVE ME
- } elseif (!empty($error_code)) {
- // $error_code comes alone, trying to unset it
- if ($this->_checkDelExpect($error_code)) {
- return true;
- } else {
- return PEAR::raiseError("The expected error you submitted does not exist"); // IMPROVE ME
- }
- } else {
- // $error_code is empty
- return PEAR::raiseError("The expected error you submitted is empty"); // IMPROVE ME
- }
- }
-
- // }}}
- // {{{ raiseError()
-
- /**
- * This method is a wrapper that returns an instance of the
- * configured error class with this object's default error
- * handling applied. If the $mode and $options parameters are not
- * specified, the object's defaults are used.
- *
- * @param mixed $message a text error message or a PEAR error object
- *
- * @param int $code a numeric error code (it is up to your class
- * to define these if you want to use codes)
- *
- * @param int $mode One of PEAR_ERROR_RETURN, PEAR_ERROR_PRINT,
- * PEAR_ERROR_TRIGGER, PEAR_ERROR_DIE,
- * PEAR_ERROR_CALLBACK, PEAR_ERROR_EXCEPTION.
- *
- * @param mixed $options If $mode is PEAR_ERROR_TRIGGER, this parameter
- * specifies the PHP-internal error level (one of
- * E_USER_NOTICE, E_USER_WARNING or E_USER_ERROR).
- * If $mode is PEAR_ERROR_CALLBACK, this
- * parameter specifies the callback function or
- * method. In other error modes this parameter
- * is ignored.
- *
- * @param string $userinfo If you need to pass along for example debug
- * information, this parameter is meant for that.
- *
- * @param string $error_class The returned error object will be
- * instantiated from this class, if specified.
- *
- * @param bool $skipmsg If true, raiseError will only pass error codes,
- * the error message parameter will be dropped.
- *
- * @access public
- * @return object a PEAR error object
- * @see PEAR::setErrorHandling
- * @since PHP 4.0.5
- */
- function raiseError($message = null,
- $code = null,
- $mode = null,
- $options = null,
- $userinfo = null,
- $error_class = null,
- $skipmsg = false)
- {
- // The error is yet a PEAR error object
- if (is_object($message)) {
- $code = $message->getCode();
- $userinfo = $message->getUserInfo();
- $error_class = $message->getType();
- $message->error_message_prefix = '';
- $message = $message->getMessage();
- }
-
- if (isset($this) && isset($this->_expected_errors) && sizeof($this->_expected_errors) > 0 && sizeof($exp = end($this->_expected_errors))) {
- if ($exp[0] == "*" ||
- (is_int(reset($exp)) && in_array($code, $exp)) ||
- (is_string(reset($exp)) && in_array($message, $exp))) {
- $mode = PEAR_ERROR_RETURN;
- }
- }
- // No mode given, try global ones
- if ($mode === null) {
- // Class error handler
- if (isset($this) && isset($this->_default_error_mode)) {
- $mode = $this->_default_error_mode;
- $options = $this->_default_error_options;
- // Global error handler
- } elseif (isset($GLOBALS['_PEAR_default_error_mode'])) {
- $mode = $GLOBALS['_PEAR_default_error_mode'];
- $options = $GLOBALS['_PEAR_default_error_options'];
- }
- }
-
- if ($error_class !== null) {
- $ec = $error_class;
- } elseif (isset($this) && isset($this->_error_class)) {
- $ec = $this->_error_class;
- } else {
- $ec = 'PEAR_Error';
- }
- if ($skipmsg) {
- return new $ec($code, $mode, $options, $userinfo);
- } else {
- return new $ec($message, $code, $mode, $options, $userinfo);
- }
- }
-
- // }}}
- // {{{ throwError()
-
- /**
- * Simpler form of raiseError with fewer options. In most cases
- * message, code and userinfo are enough.
- *
- * @param string $message
- *
- */
- function throwError($message = null,
- $code = null,
- $userinfo = null)
- {
- if (isset($this) && is_a($this, 'PEAR')) {
- return $this->raiseError($message, $code, null, null, $userinfo);
- } else {
- return PEAR::raiseError($message, $code, null, null, $userinfo);
- }
- }
-
- // }}}
- // {{{ pushErrorHandling()
-
- /**
- * Push a new error handler on top of the error handler options stack. With this
- * you can easily override the actual error handler for some code and restore
- * it later with popErrorHandling.
- *
- * @param mixed $mode (same as setErrorHandling)
- * @param mixed $options (same as setErrorHandling)
- *
- * @return bool Always true
- *
- * @see PEAR::setErrorHandling
- */
- function pushErrorHandling($mode, $options = null)
- {
- $stack = &$GLOBALS['_PEAR_error_handler_stack'];
- if (isset($this) && is_a($this, 'PEAR')) {
- $def_mode = &$this->_default_error_mode;
- $def_options = &$this->_default_error_options;
- } else {
- $def_mode = &$GLOBALS['_PEAR_default_error_mode'];
- $def_options = &$GLOBALS['_PEAR_default_error_options'];
- }
- $stack[] = array($def_mode, $def_options);
-
- if (isset($this) && is_a($this, 'PEAR')) {
- $this->setErrorHandling($mode, $options);
- } else {
- PEAR::setErrorHandling($mode, $options);
- }
- $stack[] = array($mode, $options);
- return true;
- }
-
- // }}}
- // {{{ popErrorHandling()
-
- /**
- * Pop the last error handler used
- *
- * @return bool Always true
- *
- * @see PEAR::pushErrorHandling
- */
- function popErrorHandling()
- {
- $stack = &$GLOBALS['_PEAR_error_handler_stack'];
- array_pop($stack);
- list($mode, $options) = $stack[sizeof($stack) - 1];
- array_pop($stack);
- if (isset($this) && is_a($this, 'PEAR')) {
- $this->setErrorHandling($mode, $options);
- } else {
- PEAR::setErrorHandling($mode, $options);
- }
- return true;
- }
-
- // }}}
- // {{{ loadExtension()
-
- /**
- * OS independant PHP extension load. Remember to take care
- * on the correct extension name for case sensitive OSes.
- *
- * @param string $ext The extension name
- * @return bool Success or not on the dl() call
- */
- function loadExtension($ext)
- {
- if (!extension_loaded($ext)) {
- // if either returns true dl() will produce a FATAL error, stop that
- if ((ini_get('enable_dl') != 1) || (ini_get('safe_mode') == 1)) {
- return false;
- }
- if (OS_WINDOWS) {
- $suffix = '.dll';
- } elseif (PHP_OS == 'HP-UX') {
- $suffix = '.sl';
- } elseif (PHP_OS == 'AIX') {
- $suffix = '.a';
- } elseif (PHP_OS == 'OSX') {
- $suffix = '.bundle';
- } else {
- $suffix = '.so';
- }
- return @dl('php_'.$ext.$suffix) || @dl($ext.$suffix);
- }
- return true;
- }
-
- // }}}
-}
-
-// {{{ _PEAR_call_destructors()
-
-function _PEAR_call_destructors()
-{
- global $_PEAR_destructor_object_list;
- if (is_array($_PEAR_destructor_object_list) &&
- sizeof($_PEAR_destructor_object_list))
- {
- reset($_PEAR_destructor_object_list);
- while (list($k, $objref) = each($_PEAR_destructor_object_list)) {
- $classname = get_class($objref);
- while ($classname) {
- $destructor = "_$classname";
- if (method_exists($objref, $destructor)) {
- $objref->$destructor();
- break;
- } else {
- $classname = get_parent_class($classname);
- }
- }
- }
- // Empty the object list to ensure that destructors are
- // not called more than once.
- $_PEAR_destructor_object_list = array();
- }
-
- // Now call the shutdown functions
- if (is_array($GLOBALS['_PEAR_shutdown_funcs']) AND !empty($GLOBALS['_PEAR_shutdown_funcs'])) {
- foreach ($GLOBALS['_PEAR_shutdown_funcs'] as $value) {
- call_user_func_array($value[0], $value[1]);
- }
- }
-}
-
-// }}}
-
-class PEAR_Error
-{
- // {{{ properties
-
- var $error_message_prefix = '';
- var $mode = PEAR_ERROR_RETURN;
- var $level = E_USER_NOTICE;
- var $code = -1;
- var $message = '';
- var $userinfo = '';
- var $backtrace = null;
-
- // }}}
- // {{{ constructor
-
- /**
- * PEAR_Error constructor
- *
- * @param string $message message
- *
- * @param int $code (optional) error code
- *
- * @param int $mode (optional) error mode, one of: PEAR_ERROR_RETURN,
- * PEAR_ERROR_PRINT, PEAR_ERROR_DIE, PEAR_ERROR_TRIGGER,
- * PEAR_ERROR_CALLBACK or PEAR_ERROR_EXCEPTION
- *
- * @param mixed $options (optional) error level, _OR_ in the case of
- * PEAR_ERROR_CALLBACK, the callback function or object/method
- * tuple.
- *
- * @param string $userinfo (optional) additional user/debug info
- *
- * @access public
- *
- */
- function PEAR_Error($message = 'unknown error', $code = null,
- $mode = null, $options = null, $userinfo = null)
- {
- if ($mode === null) {
- $mode = PEAR_ERROR_RETURN;
- }
- $this->message = $message;
- $this->code = $code;
- $this->mode = $mode;
- $this->userinfo = $userinfo;
- if (function_exists("debug_backtrace")) {
- $this->backtrace = debug_backtrace();
- }
- if ($mode & PEAR_ERROR_CALLBACK) {
- $this->level = E_USER_NOTICE;
- $this->callback = $options;
- } else {
- if ($options === null) {
- $options = E_USER_NOTICE;
- }
- $this->level = $options;
- $this->callback = null;
- }
- if ($this->mode & PEAR_ERROR_PRINT) {
- if (is_null($options) || is_int($options)) {
- $format = "%s";
- } else {
- $format = $options;
- }
- printf($format, $this->getMessage());
- }
- if ($this->mode & PEAR_ERROR_TRIGGER) {
- trigger_error($this->getMessage(), $this->level);
- }
- if ($this->mode & PEAR_ERROR_DIE) {
- $msg = $this->getMessage();
- if (is_null($options) || is_int($options)) {
- $format = "%s";
- if (substr($msg, -1) != "\n") {
- $msg .= "\n";
- }
- } else {
- $format = $options;
- }
- die(sprintf($format, $msg));
- }
- if ($this->mode & PEAR_ERROR_CALLBACK) {
- if (is_callable($this->callback)) {
- call_user_func($this->callback, $this);
- }
- }
- if ($this->mode & PEAR_ERROR_EXCEPTION) {
- trigger_error("PEAR_ERROR_EXCEPTION is obsolete, use class PEAR_ErrorStack for exceptions", E_USER_WARNING);
- eval('$e = new Exception($this->message, $this->code);$e->PEAR_Error = $this;throw($e);');
- }
- }
-
- // }}}
- // {{{ getMode()
-
- /**
- * Get the error mode from an error object.
- *
- * @return int error mode
- * @access public
- */
- function getMode() {
- return $this->mode;
- }
-
- // }}}
- // {{{ getCallback()
-
- /**
- * Get the callback function/method from an error object.
- *
- * @return mixed callback function or object/method array
- * @access public
- */
- function getCallback() {
- return $this->callback;
- }
-
- // }}}
- // {{{ getMessage()
-
-
- /**
- * Get the error message from an error object.
- *
- * @return string full error message
- * @access public
- */
- function getMessage()
- {
- return ($this->error_message_prefix . $this->message);
- }
-
-
- // }}}
- // {{{ getCode()
-
- /**
- * Get error code from an error object
- *
- * @return int error code
- * @access public
- */
- function getCode()
- {
- return $this->code;
- }
-
- // }}}
- // {{{ getType()
-
- /**
- * Get the name of this error/exception.
- *
- * @return string error/exception name (type)
- * @access public
- */
- function getType()
- {
- return get_class($this);
- }
-
- // }}}
- // {{{ getUserInfo()
-
- /**
- * Get additional user-supplied information.
- *
- * @return string user-supplied information
- * @access public
- */
- function getUserInfo()
- {
- return $this->userinfo;
- }
-
- // }}}
- // {{{ getDebugInfo()
-
- /**
- * Get additional debug information supplied by the application.
- *
- * @return string debug information
- * @access public
- */
- function getDebugInfo()
- {
- return $this->getUserInfo();
- }
-
- // }}}
- // {{{ getBacktrace()
-
- /**
- * Get the call backtrace from where the error was generated.
- * Supported with PHP 4.3.0 or newer.
- *
- * @param int $frame (optional) what frame to fetch
- * @return array Backtrace, or NULL if not available.
- * @access public
- */
- function getBacktrace($frame = null)
- {
- if ($frame === null) {
- return $this->backtrace;
- }
- return $this->backtrace[$frame];
- }
-
- // }}}
- // {{{ addUserInfo()
-
- function addUserInfo($info)
- {
- if (empty($this->userinfo)) {
- $this->userinfo = $info;
- } else {
- $this->userinfo .= " ** $info";
- }
- }
-
- // }}}
- // {{{ toString()
-
- /**
- * Make a string representation of this object.
- *
- * @return string a string with an object summary
- * @access public
- */
- function toString() {
- $modes = array();
- $levels = array(E_USER_NOTICE => 'notice',
- E_USER_WARNING => 'warning',
- E_USER_ERROR => 'error');
- if ($this->mode & PEAR_ERROR_CALLBACK) {
- if (is_array($this->callback)) {
- $callback = get_class($this->callback[0]) . '::' .
- $this->callback[1];
- } else {
- $callback = $this->callback;
- }
- return sprintf('[%s: message="%s" code=%d mode=callback '.
- 'callback=%s prefix="%s" info="%s"]',
- get_class($this), $this->message, $this->code,
- $callback, $this->error_message_prefix,
- $this->userinfo);
- }
- if ($this->mode & PEAR_ERROR_PRINT) {
- $modes[] = 'print';
- }
- if ($this->mode & PEAR_ERROR_TRIGGER) {
- $modes[] = 'trigger';
- }
- if ($this->mode & PEAR_ERROR_DIE) {
- $modes[] = 'die';
- }
- if ($this->mode & PEAR_ERROR_RETURN) {
- $modes[] = 'return';
- }
- return sprintf('[%s: message="%s" code=%d mode=%s level=%s '.
- 'prefix="%s" info="%s"]',
- get_class($this), $this->message, $this->code,
- implode("|", $modes), $levels[$this->level],
- $this->error_message_prefix,
- $this->userinfo);
- }
-
- // }}}
-}
-
-register_shutdown_function("_PEAR_call_destructors");
-
-/*
- * Local Variables:
- * mode: php
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- */
-?>
diff --git a/pear/PEAR/Autoloader.php b/pear/PEAR/Autoloader.php
deleted file mode 100644
index 09e8736d84..0000000000
--- a/pear/PEAR/Autoloader.php
+++ /dev/null
@@ -1,208 +0,0 @@
-<?php
-// /* vim: set expandtab tabstop=4 shiftwidth=4: */
-// +----------------------------------------------------------------------+
-// | PHP Version 5 |
-// +----------------------------------------------------------------------+
-// | Copyright (c) 1997-2004 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: Stig Bakken <ssb@php.net> |
-// | |
-// +----------------------------------------------------------------------+
-//
-// $Id$
-
-if (!extension_loaded("overload")) {
- // die hard without ext/overload
- die("Rebuild PHP with the `overload' extension to use PEAR_Autoloader");
-}
-
-require_once "PEAR.php";
-
-/**
- * This class is for objects where you want to separate the code for
- * some methods into separate classes. This is useful if you have a
- * class with not-frequently-used methods that contain lots of code
- * that you would like to avoid always parsing.
- *
- * The PEAR_Autoloader class provides autoloading and aggregation.
- * The autoloading lets you set up in which classes the separated
- * methods are found. Aggregation is the technique used to import new
- * methods, an instance of each class providing separated methods is
- * stored and called every time the aggregated method is called.
- *
- * @author Stig Sæther Bakken <ssb@php.net>
- */
-class PEAR_Autoloader extends PEAR
-{
- // {{{ properties
-
- /**
- * Map of methods and classes where they are defined
- *
- * @var array
- *
- * @access private
- */
- var $_autoload_map = array();
-
- /**
- * Map of methods and aggregate objects
- *
- * @var array
- *
- * @access private
- */
- var $_method_map = array();
-
- // }}}
- // {{{ addAutoload()
-
- /**
- * Add one or more autoload entries.
- *
- * @param string $method which method to autoload
- *
- * @param string $classname (optional) which class to find the method in.
- * If the $method parameter is an array, this
- * parameter may be omitted (and will be ignored
- * if not), and the $method parameter will be
- * treated as an associative array with method
- * names as keys and class names as values.
- *
- * @return void
- *
- * @access public
- */
- function addAutoload($method, $classname = null)
- {
- if (is_array($method)) {
- array_walk($method, create_function('$a,&$b', '$b = strtolower($b);'));
- $this->_autoload_map = array_merge($this->_autoload_map, $method);
- } else {
- $this->_autoload_map[strtolower($method)] = $classname;
- }
- }
-
- // }}}
- // {{{ removeAutoload()
-
- /**
- * Remove an autoload entry.
- *
- * @param string $method which method to remove the autoload entry for
- *
- * @return bool TRUE if an entry was removed, FALSE if not
- *
- * @access public
- */
- function removeAutoload($method)
- {
- $method = strtolower($method);
- $ok = isset($this->_autoload_map[$method]);
- unset($this->_autoload_map[$method]);
- return $ok;
- }
-
- // }}}
- // {{{ addAggregateObject()
-
- /**
- * Add an aggregate object to this object. If the specified class
- * is not defined, loading it will be attempted following PEAR's
- * file naming scheme. All the methods in the class will be
- * aggregated, except private ones (name starting with an
- * underscore) and constructors.
- *
- * @param string $classname what class to instantiate for the object.
- *
- * @return void
- *
- * @access public
- */
- function addAggregateObject($classname)
- {
- $classname = strtolower($classname);
- if (!class_exists($classname)) {
- $include_file = preg_replace('/[^a-z0-9]/i', '_', $classname);
- include_once $include_file;
- }
- $obj =& new $classname;
- $methods = get_class_methods($classname);
- foreach ($methods as $method) {
- // don't import priviate methods and constructors
- if ($method{0} != '_' && $method != $classname) {
- $this->_method_map[$method] = $obj;
- }
- }
- }
-
- // }}}
- // {{{ removeAggregateObject()
-
- /**
- * Remove an aggregate object.
- *
- * @param string $classname the class of the object to remove
- *
- * @return bool TRUE if an object was removed, FALSE if not
- *
- * @access public
- */
- function removeAggregateObject($classname)
- {
- $ok = false;
- $classname = strtolower($classname);
- reset($this->_method_map);
- while (list($method, $obj) = each($this->_method_map)) {
- if (is_a($obj, $classname)) {
- unset($this->_method_map[$method]);
- $ok = true;
- }
- }
- return $ok;
- }
-
- // }}}
- // {{{ __call()
-
- /**
- * Overloaded object call handler, called each time an
- * undefined/aggregated method is invoked. This method repeats
- * the call in the right aggregate object and passes on the return
- * value.
- *
- * @param string $method which method that was called
- *
- * @param string $args An array of the parameters passed in the
- * original call
- *
- * @return mixed The return value from the aggregated method, or a PEAR
- * error if the called method was unknown.
- */
- function __call($method, $args, &$retval)
- {
- $method = strtolower($method);
- if (empty($this->_method_map[$method]) && isset($this->_autoload_map[$method])) {
- $this->addAggregateObject($this->_autoload_map[$method]);
- }
- if (isset($this->_method_map[$method])) {
- $retval = call_user_func_array(array($this->_method_map[$method], $method), $args);
- return true;
- }
- return false;
- }
-
- // }}}
-}
-
-overload("PEAR_Autoloader");
-
-?>
diff --git a/pear/PEAR/Builder.php b/pear/PEAR/Builder.php
deleted file mode 100644
index 4806155ef5..0000000000
--- a/pear/PEAR/Builder.php
+++ /dev/null
@@ -1,392 +0,0 @@
-<?php
-//
-// +----------------------------------------------------------------------+
-// | PHP Version 5 |
-// +----------------------------------------------------------------------+
-// | Copyright (c) 1997-2004 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. |
-// +----------------------------------------------------------------------+
-// | Authors: Stig Sæther Bakken <ssb@php.net> |
-// +----------------------------------------------------------------------+
-//
-// $Id$
-
-require_once 'PEAR/Common.php';
-
-/**
- * Class to handle building (compiling) extensions.
- *
- * @author Stig Sæther Bakken <ssb@php.net>
- */
-class PEAR_Builder extends PEAR_Common
-{
- // {{{ properties
-
- var $php_api_version = 0;
- var $zend_module_api_no = 0;
- var $zend_extension_api_no = 0;
-
- var $extensions_built = array();
-
- var $current_callback = null;
-
- // used for msdev builds
- var $_lastline = null;
- var $_firstline = null;
- // }}}
- // {{{ constructor
-
- /**
- * PEAR_Builder constructor.
- *
- * @param object $ui user interface object (instance of PEAR_Frontend_*)
- *
- * @access public
- */
- function PEAR_Builder(&$ui)
- {
- parent::PEAR_Common();
- $this->setFrontendObject($ui);
- }
-
- // }}}
-
- // {{{ _build_win32()
-
- /**
- * Build an extension from source on windows.
- * requires msdev
- */
- function _build_win32($descfile, $callback = null)
- {
- if (PEAR::isError($info = $this->infoFromDescriptionFile($descfile))) {
- return $info;
- }
- $dir = dirname($descfile);
- $old_cwd = getcwd();
-
- if (!@chdir($dir)) {
- return $this->raiseError("could not chdir to $dir");
- }
- $this->log(2, "building in $dir");
-
- $dsp = $info['package'].'.dsp';
- if (!@is_file("$dir/$dsp")) {
- return $this->raiseError("The DSP $dsp does not exist.");
- }
- // XXX TODO: make release build type configurable
- $command = 'msdev '.$dsp.' /MAKE "'.$info['package']. ' - Release"';
-
- $this->current_callback = $callback;
- $err = $this->_runCommand($command, array(&$this, 'msdevCallback'));
- if (PEAR::isError($err)) {
- return $err;
- }
-
- // figure out the build platform and type
- $platform = 'Win32';
- $buildtype = 'Release';
- if (preg_match('/.*?'.$info['package'].'\s-\s(\w+)\s(.*?)-+/i',$this->_firstline,$matches)) {
- $platform = $matches[1];
- $buildtype = $matches[2];
- }
-
- if (preg_match('/(.*)?\s-\s(\d+).*?(\d+)/',$this->_lastline,$matches)) {
- if ($matches[2]) {
- // there were errors in the build
- return $this->raiseError("There were errors during compilation.");
- }
- $out = $matches[1];
- } else {
- return $this->raiseError("Did not understand the completion status returned from msdev.exe.");
- }
-
- // msdev doesn't tell us the output directory :/
- // open the dsp, find /out and use that directory
- $dsptext = join(file($dsp),'');
-
- // this regex depends on the build platform and type having been
- // correctly identified above.
- $regex ='/.*?!IF\s+"\$\(CFG\)"\s+==\s+("'.
- $info['package'].'\s-\s'.
- $platform.'\s'.
- $buildtype.'").*?'.
- '\/out:"(.*?)"/is';
-
- if ($dsptext && preg_match($regex,$dsptext,$matches)) {
- // what we get back is a relative path to the output file itself.
- $outfile = realpath($matches[2]);
- } else {
- return $this->raiseError("Could not retrieve output information from $dsp.");
- }
- if (@copy($outfile, "$dir/$out")) {
- $outfile = "$dir/$out";
- }
-
- $built_files[] = array(
- 'file' => "$outfile",
- 'php_api' => $this->php_api_version,
- 'zend_mod_api' => $this->zend_module_api_no,
- 'zend_ext_api' => $this->zend_extension_api_no,
- );
-
- return $built_files;
- }
- // }}}
-
- // {{{ msdevCallback()
- function msdevCallback($what, $data)
- {
- if (!$this->_firstline)
- $this->_firstline = $data;
- $this->_lastline = $data;
- }
- // }}}
-
- // {{{ build()
-
- /**
- * Build an extension from source. Runs "phpize" in the source
- * directory, but compiles in a temporary directory
- * (/var/tmp/pear-build-USER/PACKAGE-VERSION).
- *
- * @param string $descfile path to XML package description file
- *
- * @param mixed $callback callback function used to report output,
- * see PEAR_Builder::_runCommand for details
- *
- * @return array an array of associative arrays with built files,
- * format:
- * array( array( 'file' => '/path/to/ext.so',
- * 'php_api' => YYYYMMDD,
- * 'zend_mod_api' => YYYYMMDD,
- * 'zend_ext_api' => YYYYMMDD ),
- * ... )
- *
- * @access public
- *
- * @see PEAR_Builder::_runCommand
- * @see PEAR_Common::infoFromDescriptionFile
- */
- function build($descfile, $callback = null)
- {
- if (PEAR_OS == "Windows") {
- return $this->_build_win32($descfile,$callback);
- }
- if (PEAR_OS != 'Unix') {
- return $this->raiseError("building extensions not supported on this platform");
- }
- if (PEAR::isError($info = $this->infoFromDescriptionFile($descfile))) {
- return $info;
- }
- $dir = dirname($descfile);
- $old_cwd = getcwd();
- if (!@chdir($dir)) {
- return $this->raiseError("could not chdir to $dir");
- }
- $vdir = "$info[package]-$info[version]";
- if (is_dir($vdir)) {
- chdir($vdir);
- }
- $dir = getcwd();
- $this->log(2, "building in $dir");
- $this->current_callback = $callback;
- putenv('PATH=' . getenv('PATH') . ':' . $this->config->get('bin_dir'));
- $err = $this->_runCommand("phpize", array(&$this, 'phpizeCallback'));
- if (PEAR::isError($err)) {
- return $err;
- }
- if (!$err) {
- return $this->raiseError("`phpize' failed");
- }
-
- // {{{ start of interactive part
- $configure_command = "$dir/configure";
- if (isset($info['configure_options'])) {
- foreach ($info['configure_options'] as $o) {
- list($r) = $this->ui->userDialog('build',
- array($o['prompt']),
- array('text'),
- array(@$o['default']));
- if (substr($o['name'], 0, 5) == 'with-' &&
- ($r == 'yes' || $r == 'autodetect')) {
- $configure_command .= " --$o[name]";
- } else {
- $configure_command .= " --$o[name]=".trim($r);
- }
- }
- }
- // }}} end of interactive part
-
- // FIXME make configurable
- if(!$user=getenv('USER')){
- $user='defaultuser';
- }
- $build_basedir = "/var/tmp/pear-build-$user";
- $build_dir = "$build_basedir/$info[package]-$info[version]";
- $this->log(1, "building in $build_dir");
- if (is_dir($build_dir)) {
- System::rm("-rf $build_dir");
- }
- if (!System::mkDir("-p $build_dir")) {
- return $this->raiseError("could not create build dir: $build_dir");
- }
- $this->addTempFile($build_dir);
- if (getenv('MAKE')) {
- $make_command = getenv('MAKE');
- } else {
- $make_command = 'make';
- }
- $to_run = array(
- $configure_command,
- $make_command,
- );
- if (!@chdir($build_dir)) {
- return $this->raiseError("could not chdir to $build_dir");
- }
- foreach ($to_run as $cmd) {
- $err = $this->_runCommand($cmd, $callback);
- if (PEAR::isError($err)) {
- chdir($old_cwd);
- return $err;
- }
- if (!$err) {
- chdir($old_cwd);
- return $this->raiseError("`$cmd' failed");
- }
- }
- if (!($dp = opendir("modules"))) {
- chdir($old_cwd);
- return $this->raiseError("no `modules' directory found");
- }
- $built_files = array();
- while ($ent = readdir($dp)) {
- if ($ent{0} == '.' || substr($ent, -3) == '.la') {
- continue;
- }
- // harvest!
- if (@copy("modules/$ent", "$dir/$ent")) {
- $built_files[] = array(
- 'file' => "$dir/$ent",
- 'php_api' => $this->php_api_version,
- 'zend_mod_api' => $this->zend_module_api_no,
- 'zend_ext_api' => $this->zend_extension_api_no,
- );
-
- $this->log(1, "$ent copied to $dir/$ent");
- } else {
- chdir($old_cwd);
- return $this->raiseError("failed copying $ent to $dir");
- }
- }
- closedir($dp);
- chdir($old_cwd);
- return $built_files;
- }
-
- // }}}
- // {{{ phpizeCallback()
-
- /**
- * Message callback function used when running the "phpize"
- * program. Extracts the API numbers used. Ignores other message
- * types than "cmdoutput".
- *
- * @param string $what the type of message
- * @param mixed $data the message
- *
- * @return void
- *
- * @access public
- */
- function phpizeCallback($what, $data)
- {
- if ($what != 'cmdoutput') {
- return;
- }
- $this->log(1, rtrim($data));
- if (preg_match('/You should update your .aclocal.m4/', $data)) {
- return;
- }
- $matches = array();
- if (preg_match('/^\s+(\S[^:]+):\s+(\d{8})/', $data, $matches)) {
- $member = preg_replace('/[^a-z]/', '_', strtolower($matches[1]));
- $apino = (int)$matches[2];
- if (isset($this->$member)) {
- $this->$member = $apino;
- //$msg = sprintf("%-22s : %d", $matches[1], $apino);
- //$this->log(1, $msg);
- }
- }
- }
-
- // }}}
- // {{{ _runCommand()
-
- /**
- * Run an external command, using a message callback to report
- * output. The command will be run through popen and output is
- * reported for every line with a "cmdoutput" message with the
- * line string, including newlines, as payload.
- *
- * @param string $command the command to run
- *
- * @param mixed $callback (optional) function to use as message
- * callback
- *
- * @return bool whether the command was successful (exit code 0
- * means success, any other means failure)
- *
- * @access private
- */
- function _runCommand($command, $callback = null)
- {
- $this->log(1, "running: $command");
- $pp = @popen("$command 2>&1", "r");
- if (!$pp) {
- return $this->raiseError("failed to run `$command'");
- }
- if ($callback && $callback[0]->debug == 1) {
- $olddbg = $callback[0]->debug;
- $callback[0]->debug = 2;
- }
-
- while ($line = fgets($pp, 1024)) {
- if ($callback) {
- call_user_func($callback, 'cmdoutput', $line);
- } else {
- $this->log(2, rtrim($line));
- }
- }
- if ($callback && isset($olddbg)) {
- $callback[0]->debug = $olddbg;
- }
- $exitcode = @pclose($pp);
- return ($exitcode == 0);
- }
-
- // }}}
- // {{{ log()
-
- function log($level, $msg)
- {
- if ($this->current_callback) {
- if ($this->debug >= $level) {
- call_user_func($this->current_callback, 'output', $msg);
- }
- return;
- }
- return PEAR_Common::log($level, $msg);
- }
-
- // }}}
-}
-
-?>
diff --git a/pear/PEAR/Command.php b/pear/PEAR/Command.php
deleted file mode 100644
index 49bb72b24c..0000000000
--- a/pear/PEAR/Command.php
+++ /dev/null
@@ -1,398 +0,0 @@
-<?php
-//
-// +----------------------------------------------------------------------+
-// | PHP Version 5 |
-// +----------------------------------------------------------------------+
-// | Copyright (c) 1997-2004 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: Stig Bakken <ssb@php.net> |
-// +----------------------------------------------------------------------+
-//
-// $Id$
-
-
-require_once "PEAR.php";
-
-/**
- * List of commands and what classes they are implemented in.
- * @var array command => implementing class
- */
-$GLOBALS['_PEAR_Command_commandlist'] = array();
-
-/**
- * List of shortcuts to common commands.
- * @var array shortcut => command
- */
-$GLOBALS['_PEAR_Command_shortcuts'] = array();
-
-/**
- * Array of command objects
- * @var array class => object
- */
-$GLOBALS['_PEAR_Command_objects'] = array();
-
-/**
- * Which user interface class is being used.
- * @var string class name
- */
-$GLOBALS['_PEAR_Command_uiclass'] = 'PEAR_Frontend_CLI';
-
-/**
- * Instance of $_PEAR_Command_uiclass.
- * @var object
- */
-$GLOBALS['_PEAR_Command_uiobject'] = null;
-
-/**
- * PEAR command class, a simple factory class for administrative
- * commands.
- *
- * How to implement command classes:
- *
- * - The class must be called PEAR_Command_Nnn, installed in the
- * "PEAR/Common" subdir, with a method called getCommands() that
- * returns an array of the commands implemented by the class (see
- * PEAR/Command/Install.php for an example).
- *
- * - The class must implement a run() function that is called with three
- * params:
- *
- * (string) command name
- * (array) assoc array with options, freely defined by each
- * command, for example:
- * array('force' => true)
- * (array) list of the other parameters
- *
- * The run() function returns a PEAR_CommandResponse object. Use
- * these methods to get information:
- *
- * int getStatus() Returns PEAR_COMMAND_(SUCCESS|FAILURE|PARTIAL)
- * *_PARTIAL means that you need to issue at least
- * one more command to complete the operation
- * (used for example for validation steps).
- *
- * string getMessage() Returns a message for the user. Remember,
- * no HTML or other interface-specific markup.
- *
- * If something unexpected happens, run() returns a PEAR error.
- *
- * - DON'T OUTPUT ANYTHING! Return text for output instead.
- *
- * - DON'T USE HTML! The text you return will be used from both Gtk,
- * web and command-line interfaces, so for now, keep everything to
- * plain text.
- *
- * - DON'T USE EXIT OR DIE! Always use pear errors. From static
- * classes do PEAR::raiseError(), from other classes do
- * $this->raiseError().
- */
-class PEAR_Command
-{
- // {{{ factory()
-
- /**
- * Get the right object for executing a command.
- *
- * @param string $command The name of the command
- * @param object $config Instance of PEAR_Config object
- *
- * @return object the command object or a PEAR error
- *
- * @access public
- * @static
- */
- function factory($command, &$config)
- {
- if (empty($GLOBALS['_PEAR_Command_commandlist'])) {
- PEAR_Command::registerCommands();
- }
- if (isset($GLOBALS['_PEAR_Command_shortcuts'][$command])) {
- $command = $GLOBALS['_PEAR_Command_shortcuts'][$command];
- }
- if (!isset($GLOBALS['_PEAR_Command_commandlist'][$command])) {
- return PEAR::raiseError("unknown command `$command'");
- }
- $class = $GLOBALS['_PEAR_Command_commandlist'][$command];
- if (!class_exists($class)) {
- return PEAR::raiseError("unknown command `$command'");
- }
- $ui =& PEAR_Command::getFrontendObject();
- $obj = &new $class($ui, $config);
- return $obj;
- }
-
- // }}}
- // {{{ & getFrontendObject()
-
- /**
- * Get instance of frontend object.
- *
- * @return object
- * @static
- */
- function &getFrontendObject()
- {
- if (empty($GLOBALS['_PEAR_Command_uiobject'])) {
- $GLOBALS['_PEAR_Command_uiobject'] = &new $GLOBALS['_PEAR_Command_uiclass'];
- }
- return $GLOBALS['_PEAR_Command_uiobject'];
- }
-
- // }}}
- // {{{ & setFrontendClass()
-
- /**
- * Load current frontend class.
- *
- * @param string $uiclass Name of class implementing the frontend
- *
- * @return object the frontend object, or a PEAR error
- * @static
- */
- function &setFrontendClass($uiclass)
- {
- if (is_object($GLOBALS['_PEAR_Command_uiobject']) &&
- is_a($GLOBALS['_PEAR_Command_uiobject'], $uiclass)) {
- return $GLOBALS['_PEAR_Command_uiobject'];
- }
- if (!class_exists($uiclass)) {
- $file = str_replace('_', '/', $uiclass) . '.php';
- if (PEAR_Command::isIncludeable($file)) {
- include_once $file;
- }
- }
- if (class_exists($uiclass)) {
- $obj = &new $uiclass;
- // quick test to see if this class implements a few of the most
- // important frontend methods
- if (method_exists($obj, 'userConfirm')) {
- $GLOBALS['_PEAR_Command_uiobject'] = &$obj;
- $GLOBALS['_PEAR_Command_uiclass'] = $uiclass;
- return $obj;
- } else {
- $err = PEAR::raiseError("not a frontend class: $uiclass");
- return $err;
- }
- }
- $err = PEAR::raiseError("no such class: $uiclass");
- return $err;
- }
-
- // }}}
- // {{{ setFrontendType()
-
- // }}}
- // {{{ isIncludeable()
-
- /**
- * @param string $path relative or absolute include path
- * @return boolean
- * @static
- */
- function isIncludeable($path)
- {
- if (file_exists($path) && is_readable($path)) {
- return true;
- }
- $ipath = explode(PATH_SEPARATOR, ini_get('include_path'));
- foreach ($ipath as $include) {
- $test = realpath($include . DIRECTORY_SEPARATOR . $path);
- if (file_exists($test) && is_readable($test)) {
- return true;
- }
- }
- return false;
- }
-
- /**
- * Set current frontend.
- *
- * @param string $uitype Name of the frontend type (for example "CLI")
- *
- * @return object the frontend object, or a PEAR error
- * @static
- */
- function setFrontendType($uitype)
- {
- $uiclass = 'PEAR_Frontend_' . $uitype;
- return PEAR_Command::setFrontendClass($uiclass);
- }
-
- // }}}
- // {{{ registerCommands()
-
- /**
- * Scan through the Command directory looking for classes
- * and see what commands they implement.
- *
- * @param bool (optional) if FALSE (default), the new list of
- * commands should replace the current one. If TRUE,
- * new entries will be merged with old.
- *
- * @param string (optional) where (what directory) to look for
- * classes, defaults to the Command subdirectory of
- * the directory from where this file (__FILE__) is
- * included.
- *
- * @return bool TRUE on success, a PEAR error on failure
- *
- * @access public
- * @static
- */
- function registerCommands($merge = false, $dir = null)
- {
- if ($dir === null) {
- $dir = dirname(__FILE__) . '/Command';
- }
- $dp = @opendir($dir);
- if (empty($dp)) {
- return PEAR::raiseError("registerCommands: opendir($dir) failed");
- }
- if (!$merge) {
- $GLOBALS['_PEAR_Command_commandlist'] = array();
- }
- while ($entry = readdir($dp)) {
- if ($entry{0} == '.' || substr($entry, -4) != '.php' || $entry == 'Common.php') {
- continue;
- }
- $class = "PEAR_Command_".substr($entry, 0, -4);
- $file = "$dir/$entry";
- include_once $file;
- // List of commands
- if (empty($GLOBALS['_PEAR_Command_objects'][$class])) {
- $GLOBALS['_PEAR_Command_objects'][$class] = &new $class($ui, $config);
- }
- $implements = $GLOBALS['_PEAR_Command_objects'][$class]->getCommands();
- foreach ($implements as $command => $desc) {
- $GLOBALS['_PEAR_Command_commandlist'][$command] = $class;
- $GLOBALS['_PEAR_Command_commanddesc'][$command] = $desc;
- }
- $shortcuts = $GLOBALS['_PEAR_Command_objects'][$class]->getShortcuts();
- foreach ($shortcuts as $shortcut => $command) {
- $GLOBALS['_PEAR_Command_shortcuts'][$shortcut] = $command;
- }
- }
- @closedir($dp);
- return true;
- }
-
- // }}}
- // {{{ getCommands()
-
- /**
- * Get the list of currently supported commands, and what
- * classes implement them.
- *
- * @return array command => implementing class
- *
- * @access public
- * @static
- */
- function getCommands()
- {
- if (empty($GLOBALS['_PEAR_Command_commandlist'])) {
- PEAR_Command::registerCommands();
- }
- return $GLOBALS['_PEAR_Command_commandlist'];
- }
-
- // }}}
- // {{{ getShortcuts()
-
- /**
- * Get the list of command shortcuts.
- *
- * @return array shortcut => command
- *
- * @access public
- * @static
- */
- function getShortcuts()
- {
- if (empty($GLOBALS['_PEAR_Command_shortcuts'])) {
- PEAR_Command::registerCommands();
- }
- return $GLOBALS['_PEAR_Command_shortcuts'];
- }
-
- // }}}
- // {{{ getGetoptArgs()
-
- /**
- * Compiles arguments for getopt.
- *
- * @param string $command command to get optstring for
- * @param string $short_args (reference) short getopt format
- * @param array $long_args (reference) long getopt format
- *
- * @return void
- *
- * @access public
- * @static
- */
- function getGetoptArgs($command, &$short_args, &$long_args)
- {
- if (empty($GLOBALS['_PEAR_Command_commandlist'])) {
- PEAR_Command::registerCommands();
- }
- if (!isset($GLOBALS['_PEAR_Command_commandlist'][$command])) {
- return null;
- }
- $class = $GLOBALS['_PEAR_Command_commandlist'][$command];
- $obj = &$GLOBALS['_PEAR_Command_objects'][$class];
- return $obj->getGetoptArgs($command, $short_args, $long_args);
- }
-
- // }}}
- // {{{ getDescription()
-
- /**
- * Get description for a command.
- *
- * @param string $command Name of the command
- *
- * @return string command description
- *
- * @access public
- * @static
- */
- function getDescription($command)
- {
- if (!isset($GLOBALS['_PEAR_Command_commanddesc'][$command])) {
- return null;
- }
- return $GLOBALS['_PEAR_Command_commanddesc'][$command];
- }
-
- // }}}
- // {{{ getHelp()
-
- /**
- * Get help for command.
- *
- * @param string $command Name of the command to return help for
- *
- * @access public
- * @static
- */
- function getHelp($command)
- {
- $cmds = PEAR_Command::getCommands();
- if (isset($cmds[$command])) {
- $class = $cmds[$command];
- return $GLOBALS['_PEAR_Command_objects'][$class]->getHelp($command);
- }
- return false;
- }
- // }}}
-}
-
-?>
diff --git a/pear/PEAR/Command/Auth.php b/pear/PEAR/Command/Auth.php
deleted file mode 100644
index 6578ee4399..0000000000
--- a/pear/PEAR/Command/Auth.php
+++ /dev/null
@@ -1,155 +0,0 @@
-<?php
-//
-// +----------------------------------------------------------------------+
-// | PHP Version 5 |
-// +----------------------------------------------------------------------+
-// | Copyright (c) 1997-2004 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: Stig Bakken <ssb@php.net> |
-// +----------------------------------------------------------------------+
-//
-// $Id$
-
-require_once "PEAR/Command/Common.php";
-require_once "PEAR/Remote.php";
-require_once "PEAR/Config.php";
-
-/**
- * PEAR commands for managing configuration data.
- *
- */
-class PEAR_Command_Auth extends PEAR_Command_Common
-{
- // {{{ properties
-
- var $commands = array(
- 'login' => array(
- 'summary' => 'Connects and authenticates to remote server',
- 'shortcut' => 'li',
- 'function' => 'doLogin',
- 'options' => array(),
- 'doc' => '
-Log in to the remote server. To use remote functions in the installer
-that require any kind of privileges, you need to log in first. The
-username and password you enter here will be stored in your per-user
-PEAR configuration (~/.pearrc on Unix-like systems). After logging
-in, your username and password will be sent along in subsequent
-operations on the remote server.',
- ),
- 'logout' => array(
- 'summary' => 'Logs out from the remote server',
- 'shortcut' => 'lo',
- 'function' => 'doLogout',
- 'options' => array(),
- 'doc' => '
-Logs out from the remote server. This command does not actually
-connect to the remote server, it only deletes the stored username and
-password from your user configuration.',
- )
-
- );
-
- // }}}
-
- // {{{ constructor
-
- /**
- * PEAR_Command_Auth constructor.
- *
- * @access public
- */
- function PEAR_Command_Auth(&$ui, &$config)
- {
- parent::PEAR_Command_Common($ui, $config);
- }
-
- // }}}
-
- // {{{ doLogin()
-
- /**
- * Execute the 'login' command.
- *
- * @param string $command command name
- *
- * @param array $options option_name => value
- *
- * @param array $params list of additional parameters
- *
- * @return bool TRUE on success, FALSE for unknown commands, or
- * a PEAR error on failure
- *
- * @access public
- */
- function doLogin($command, $options, $params)
- {
- $server = $this->config->get('master_server');
- $remote = new PEAR_Remote($this->config);
- $username = $this->config->get('username');
- if (empty($username)) {
- $username = @$_ENV['USER'];
- }
- $this->ui->outputData("Logging in to $server.", $command);
-
- list($username, $password) = $this->ui->userDialog(
- $command,
- array('Username', 'Password'),
- array('text', 'password'),
- array($username, '')
- );
- $username = trim($username);
- $password = trim($password);
-
- $this->config->set('username', $username);
- $this->config->set('password', $password);
-
- $remote->expectError(401);
- $ok = $remote->call('logintest');
- $remote->popExpect();
- if ($ok === true) {
- $this->ui->outputData("Logged in.", $command);
- $this->config->store();
- } else {
- return $this->raiseError("Login failed!");
- }
-
- }
-
- // }}}
- // {{{ doLogout()
-
- /**
- * Execute the 'logout' command.
- *
- * @param string $command command name
- *
- * @param array $options option_name => value
- *
- * @param array $params list of additional parameters
- *
- * @return bool TRUE on success, FALSE for unknown commands, or
- * a PEAR error on failure
- *
- * @access public
- */
- function doLogout($command, $options, $params)
- {
- $server = $this->config->get('master_server');
- $this->ui->outputData("Logging out from $server.", $command);
- $this->config->remove('username');
- $this->config->remove('password');
- $this->config->store();
- }
-
- // }}}
-}
-
-?> \ No newline at end of file
diff --git a/pear/PEAR/Command/Build.php b/pear/PEAR/Command/Build.php
deleted file mode 100644
index e07dc29064..0000000000
--- a/pear/PEAR/Command/Build.php
+++ /dev/null
@@ -1,89 +0,0 @@
-<?php
-//
-// +----------------------------------------------------------------------+
-// | PHP Version 5 |
-// +----------------------------------------------------------------------+
-// | Copyright (c) 1997-2004 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: Stig Bakken <ssb@php.net> |
-// | Tomas V.V.Cox <cox@idecnet.com> |
-// | |
-// +----------------------------------------------------------------------+
-//
-// $Id$
-
-require_once "PEAR/Command/Common.php";
-require_once "PEAR/Builder.php";
-
-/**
- * PEAR commands for building extensions.
- *
- */
-class PEAR_Command_Build extends PEAR_Command_Common
-{
- // {{{ properties
-
- var $commands = array(
- 'build' => array(
- 'summary' => 'Build an Extension From C Source',
- 'function' => 'doBuild',
- 'shortcut' => 'b',
- 'options' => array(),
- 'doc' => '[package.xml]
-Builds one or more extensions contained in a package.'
- ),
- );
-
- // }}}
-
- // {{{ constructor
-
- /**
- * PEAR_Command_Build constructor.
- *
- * @access public
- */
- function PEAR_Command_Build(&$ui, &$config)
- {
- parent::PEAR_Command_Common($ui, $config);
- }
-
- // }}}
-
- // {{{ doBuild()
-
- function doBuild($command, $options, $params)
- {
- if (sizeof($params) < 1) {
- $params[0] = 'package.xml';
- }
- $builder = &new PEAR_Builder($this->ui);
- $this->debug = $this->config->get('verbose');
- $err = $builder->build($params[0], array(&$this, 'buildCallback'));
- if (PEAR::isError($err)) {
- return $err;
- }
- return true;
- }
-
- // }}}
- // {{{ buildCallback()
-
- function buildCallback($what, $data)
- {
- if (($what == 'cmdoutput' && $this->debug > 1) ||
- ($what == 'output' && $this->debug > 0)) {
- $this->ui->outputData(rtrim($data), 'build');
- }
- }
-
- // }}}
-}
diff --git a/pear/PEAR/Command/Common.php b/pear/PEAR/Command/Common.php
deleted file mode 100644
index 50d09a2657..0000000000
--- a/pear/PEAR/Command/Common.php
+++ /dev/null
@@ -1,249 +0,0 @@
-<?php
-//
-// +----------------------------------------------------------------------+
-// | PHP Version 5 |
-// +----------------------------------------------------------------------+
-// | Copyright (c) 1997-2004 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: Stig Sæther Bakken <ssb@php.net> |
-// +----------------------------------------------------------------------+
-//
-// $Id$
-
-require_once "PEAR.php";
-
-class PEAR_Command_Common extends PEAR
-{
- // {{{ properties
-
- /**
- * PEAR_Config object used to pass user system and configuration
- * on when executing commands
- *
- * @var object
- */
- var $config;
-
- /**
- * User Interface object, for all interaction with the user.
- * @var object
- */
- var $ui;
-
- var $_deps_rel_trans = array(
- 'lt' => '<',
- 'le' => '<=',
- 'eq' => '=',
- 'ne' => '!=',
- 'gt' => '>',
- 'ge' => '>=',
- 'has' => '=='
- );
-
- var $_deps_type_trans = array(
- 'pkg' => 'package',
- 'extension' => 'extension',
- 'php' => 'PHP',
- 'prog' => 'external program',
- 'ldlib' => 'external library for linking',
- 'rtlib' => 'external runtime library',
- 'os' => 'operating system',
- 'websrv' => 'web server',
- 'sapi' => 'SAPI backend'
- );
-
- // }}}
- // {{{ constructor
-
- /**
- * PEAR_Command_Common constructor.
- *
- * @access public
- */
- function PEAR_Command_Common(&$ui, &$config)
- {
- parent::PEAR();
- $this->config = &$config;
- $this->ui = &$ui;
- }
-
- // }}}
-
- // {{{ getCommands()
-
- /**
- * Return a list of all the commands defined by this class.
- * @return array list of commands
- * @access public
- */
- function getCommands()
- {
- $ret = array();
- foreach (array_keys($this->commands) as $command) {
- $ret[$command] = $this->commands[$command]['summary'];
- }
- return $ret;
- }
-
- // }}}
- // {{{ getShortcuts()
-
- /**
- * Return a list of all the command shortcuts defined by this class.
- * @return array shortcut => command
- * @access public
- */
- function getShortcuts()
- {
- $ret = array();
- foreach (array_keys($this->commands) as $command) {
- if (isset($this->commands[$command]['shortcut'])) {
- $ret[$this->commands[$command]['shortcut']] = $command;
- }
- }
- return $ret;
- }
-
- // }}}
- // {{{ getOptions()
-
- function getOptions($command)
- {
- return @$this->commands[$command]['options'];
- }
-
- // }}}
- // {{{ getGetoptArgs()
-
- function getGetoptArgs($command, &$short_args, &$long_args)
- {
- $short_args = "";
- $long_args = array();
- if (empty($this->commands[$command])) {
- return;
- }
- reset($this->commands[$command]);
- while (list($option, $info) = each($this->commands[$command]['options'])) {
- $larg = $sarg = '';
- if (isset($info['arg'])) {
- if ($info['arg']{0} == '(') {
- $larg = '==';
- $sarg = '::';
- $arg = substr($info['arg'], 1, -1);
- } else {
- $larg = '=';
- $sarg = ':';
- $arg = $info['arg'];
- }
- }
- if (isset($info['shortopt'])) {
- $short_args .= $info['shortopt'] . $sarg;
- }
- $long_args[] = $option . $larg;
- }
- }
-
- // }}}
- // {{{ getHelp()
- /**
- * Returns the help message for the given command
- *
- * @param string $command The command
- * @return mixed A fail string if the command does not have help or
- * a two elements array containing [0]=>help string,
- * [1]=> help string for the accepted cmd args
- */
- function getHelp($command)
- {
- $config = &PEAR_Config::singleton();
- $help = @$this->commands[$command]['doc'];
- if (empty($help)) {
- // XXX (cox) Fallback to summary if there is no doc (show both?)
- if (!$help = @$this->commands[$command]['summary']) {
- return "No help for command \"$command\"";
- }
- }
- if (preg_match_all('/{config\s+([^\}]+)}/e', $help, $matches)) {
- foreach($matches[0] as $k => $v) {
- $help = preg_replace("/$v/", $config->get($matches[1][$k]), $help);
- }
- }
- return array($help, $this->getHelpArgs($command));
- }
-
- // }}}
- // {{{ getHelpArgs()
- /**
- * Returns the help for the accepted arguments of a command
- *
- * @param string $command
- * @return string The help string
- */
- function getHelpArgs($command)
- {
- if (isset($this->commands[$command]['options']) &&
- count($this->commands[$command]['options']))
- {
- $help = "Options:\n";
- foreach ($this->commands[$command]['options'] as $k => $v) {
- if (isset($v['arg'])) {
- if ($v['arg']{0} == '(') {
- $arg = substr($v['arg'], 1, -1);
- $sapp = " [$arg]";
- $lapp = "[=$arg]";
- } else {
- $sapp = " $v[arg]";
- $lapp = "=$v[arg]";
- }
- } else {
- $sapp = $lapp = "";
- }
- if (isset($v['shortopt'])) {
- $s = $v['shortopt'];
- @$help .= " -$s$sapp, --$k$lapp\n";
- } else {
- @$help .= " --$k$lapp\n";
- }
- $p = " ";
- $doc = rtrim(str_replace("\n", "\n$p", $v['doc']));
- $help .= " $doc\n";
- }
- return $help;
- }
- return null;
- }
-
- // }}}
- // {{{ run()
-
- function run($command, $options, $params)
- {
- $func = @$this->commands[$command]['function'];
- if (empty($func)) {
- // look for shortcuts
- foreach (array_keys($this->commands) as $cmd) {
- if (@$this->commands[$cmd]['shortcut'] == $command) {
- $command = $cmd;
- $func = @$this->commands[$command]['function'];
- if (empty($func)) {
- return $this->raiseError("unknown command `$command'");
- }
- break;
- }
- }
- }
- return $this->$func($command, $options, $params);
- }
-
- // }}}
-}
-
-?> \ No newline at end of file
diff --git a/pear/PEAR/Command/Config.php b/pear/PEAR/Command/Config.php
deleted file mode 100644
index edf518fe98..0000000000
--- a/pear/PEAR/Command/Config.php
+++ /dev/null
@@ -1,225 +0,0 @@
-<?php
-//
-// +----------------------------------------------------------------------+
-// | PHP Version 5 |
-// +----------------------------------------------------------------------+
-// | Copyright (c) 1997-2004 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: Stig Bakken <ssb@php.net> |
-// | Tomas V.V.Cox <cox@idecnet.com> |
-// | |
-// +----------------------------------------------------------------------+
-//
-// $Id$
-
-require_once "PEAR/Command/Common.php";
-require_once "PEAR/Config.php";
-
-/**
- * PEAR commands for managing configuration data.
- *
- */
-class PEAR_Command_Config extends PEAR_Command_Common
-{
- // {{{ properties
-
- var $commands = array(
- 'config-show' => array(
- 'summary' => 'Show All Settings',
- 'function' => 'doConfigShow',
- 'shortcut' => 'csh',
- 'options' => array(),
- 'doc' => '
-Displays all configuration values. An optional argument
-may be used to tell which configuration layer to display. Valid
-configuration layers are "user", "system" and "default".
-',
- ),
- 'config-get' => array(
- 'summary' => 'Show One Setting',
- 'function' => 'doConfigGet',
- 'shortcut' => 'cg',
- 'options' => array(),
- 'doc' => '<parameter> [layer]
-Displays the value of one configuration parameter. The
-first argument is the name of the parameter, an optional second argument
-may be used to tell which configuration layer to look in. Valid configuration
-layers are "user", "system" and "default". If no layer is specified, a value
-will be picked from the first layer that defines the parameter, in the order
-just specified.
-',
- ),
- 'config-set' => array(
- 'summary' => 'Change Setting',
- 'function' => 'doConfigSet',
- 'shortcut' => 'cs',
- 'options' => array(),
- 'doc' => '<parameter> <value> [layer]
-Sets the value of one configuration parameter. The first argument is
-the name of the parameter, the second argument is the new value. Some
-parameters are subject to validation, and the command will fail with
-an error message if the new value does not make sense. An optional
-third argument may be used to specify in which layer to set the
-configuration parameter. The default layer is "user".
-',
- ),
- 'config-help' => array(
- 'summary' => 'Show Information About Setting',
- 'function' => 'doConfigHelp',
- 'shortcut' => 'ch',
- 'options' => array(),
- 'doc' => '[parameter]
-Displays help for a configuration parameter. Without arguments it
-displays help for all configuration parameters.
-',
- ),
- );
-
- // }}}
- // {{{ constructor
-
- /**
- * PEAR_Command_Config constructor.
- *
- * @access public
- */
- function PEAR_Command_Config(&$ui, &$config)
- {
- parent::PEAR_Command_Common($ui, $config);
- }
-
- // }}}
-
- // {{{ doConfigShow()
-
- function doConfigShow($command, $options, $params)
- {
- // $params[0] -> the layer
- if ($error = $this->_checkLayer(@$params[0])) {
- return $this->raiseError($error);
- }
- $keys = $this->config->getKeys();
- sort($keys);
- $data = array('caption' => 'Configuration:');
- foreach ($keys as $key) {
- $type = $this->config->getType($key);
- $value = $this->config->get($key, @$params[0]);
- if ($type == 'password' && $value) {
- $value = '********';
- }
- if ($value === false) {
- $value = 'false';
- } elseif ($value === true) {
- $value = 'true';
- }
- $data['data'][$this->config->getGroup($key)][] = array($this->config->getPrompt($key) , $key, $value);
- }
- $this->ui->outputData($data, $command);
- return true;
- }
-
- // }}}
- // {{{ doConfigGet()
-
- function doConfigGet($command, $options, $params)
- {
- // $params[0] -> the parameter
- // $params[1] -> the layer
- if ($error = $this->_checkLayer(@$params[1])) {
- return $this->raiseError($error);
- }
- if (sizeof($params) < 1 || sizeof($params) > 2) {
- return $this->raiseError("config-get expects 1 or 2 parameters");
- } elseif (sizeof($params) == 1) {
- $this->ui->outputData($this->config->get($params[0]), $command);
- } else {
- $data = $this->config->get($params[0], $params[1]);
- $this->ui->outputData($data, $command);
- }
- return true;
- }
-
- // }}}
- // {{{ doConfigSet()
-
- function doConfigSet($command, $options, $params)
- {
- // $param[0] -> a parameter to set
- // $param[1] -> the value for the parameter
- // $param[2] -> the layer
- $failmsg = '';
- if (sizeof($params) < 2 || sizeof($params) > 3) {
- $failmsg .= "config-set expects 2 or 3 parameters";
- return PEAR::raiseError($failmsg);
- }
- if ($error = $this->_checkLayer(@$params[2])) {
- $failmsg .= $error;
- return PEAR::raiseError($failmsg);
- }
- if (!call_user_func_array(array(&$this->config, 'set'), $params))
- {
- $failmsg = "config-set (" . implode(", ", $params) . ") failed";
- } else {
- $this->config->store();
- }
- if ($failmsg) {
- return $this->raiseError($failmsg);
- }
- return true;
- }
-
- // }}}
- // {{{ doConfigHelp()
-
- function doConfigHelp($command, $options, $params)
- {
- if (empty($params)) {
- $params = $this->config->getKeys();
- }
- $data['caption'] = "Config help" . ((count($params) == 1) ? " for $params[0]" : '');
- $data['headline'] = array('Name', 'Type', 'Description');
- $data['border'] = true;
- foreach ($params as $name) {
- $type = $this->config->getType($name);
- $docs = $this->config->getDocs($name);
- if ($type == 'set') {
- $docs = rtrim($docs) . "\nValid set: " .
- implode(' ', $this->config->getSetValues($name));
- }
- $data['data'][] = array($name, $type, $docs);
- }
- $this->ui->outputData($data, $command);
- }
-
- // }}}
- // {{{ _checkLayer()
-
- /**
- * Checks if a layer is defined or not
- *
- * @param string $layer The layer to search for
- * @return mixed False on no error or the error message
- */
- function _checkLayer($layer = null)
- {
- if (!empty($layer) && $layer != 'default') {
- $layers = $this->config->getLayers();
- if (!in_array($layer, $layers)) {
- return " only the layers: \"" . implode('" or "', $layers) . "\" are supported";
- }
- }
- return false;
- }
-
- // }}}
-}
-
-?>
diff --git a/pear/PEAR/Command/Install.php b/pear/PEAR/Command/Install.php
deleted file mode 100644
index f804a838e3..0000000000
--- a/pear/PEAR/Command/Install.php
+++ /dev/null
@@ -1,464 +0,0 @@
-<?php
-//
-// +----------------------------------------------------------------------+
-// | PHP Version 5 |
-// +----------------------------------------------------------------------+
-// | Copyright (c) 1997-2004 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: Stig Sæther Bakken <ssb@php.net> |
-// +----------------------------------------------------------------------+
-//
-// $Id$
-
-require_once "PEAR/Command/Common.php";
-require_once "PEAR/Installer.php";
-
-/**
- * PEAR commands for installation or deinstallation/upgrading of
- * packages.
- *
- */
-class PEAR_Command_Install extends PEAR_Command_Common
-{
- // {{{ properties
-
- var $commands = array(
- 'install' => array(
- 'summary' => 'Install Package',
- 'function' => 'doInstall',
- 'shortcut' => 'i',
- 'options' => array(
- 'force' => array(
- 'shortopt' => 'f',
- 'doc' => 'will overwrite newer installed packages',
- ),
- 'nodeps' => array(
- 'shortopt' => 'n',
- 'doc' => 'ignore dependencies, install anyway',
- ),
- 'register-only' => array(
- 'shortopt' => 'r',
- 'doc' => 'do not install files, only register the package as installed',
- ),
- 'soft' => array(
- 'shortopt' => 's',
- 'doc' => 'soft install, fail silently, or upgrade if already installed',
- ),
- 'nobuild' => array(
- 'shortopt' => 'B',
- 'doc' => 'don\'t build C extensions',
- ),
- 'nocompress' => array(
- 'shortopt' => 'Z',
- 'doc' => 'request uncompressed files when downloading',
- ),
- 'installroot' => array(
- 'shortopt' => 'R',
- 'arg' => 'DIR',
- 'doc' => 'root directory used when installing files (ala PHP\'s INSTALL_ROOT)',
- ),
- 'ignore-errors' => array(
- 'doc' => 'force install even if there were errors',
- ),
- 'alldeps' => array(
- 'shortopt' => 'a',
- 'doc' => 'install all required and optional dependencies',
- ),
- 'onlyreqdeps' => array(
- 'shortopt' => 'o',
- 'doc' => 'install all required dependencies',
- ),
- ),
- 'doc' => '<package> ...
-Installs one or more PEAR packages. You can specify a package to
-install in four ways:
-
-"Package-1.0.tgz" : installs from a local file
-
-"http://example.com/Package-1.0.tgz" : installs from
-anywhere on the net.
-
-"package.xml" : installs the package described in
-package.xml. Useful for testing, or for wrapping a PEAR package in
-another package manager such as RPM.
-
-"Package" : queries your configured server
-({config master_server}) and downloads the newest package with
-the preferred quality/state ({config preferred_state}).
-
-More than one package may be specified at once. It is ok to mix these
-four ways of specifying packages.
-'),
- 'upgrade' => array(
- 'summary' => 'Upgrade Package',
- 'function' => 'doInstall',
- 'shortcut' => 'up',
- 'options' => array(
- 'force' => array(
- 'shortopt' => 'f',
- 'doc' => 'overwrite newer installed packages',
- ),
- 'nodeps' => array(
- 'shortopt' => 'n',
- 'doc' => 'ignore dependencies, upgrade anyway',
- ),
- 'register-only' => array(
- 'shortopt' => 'r',
- 'doc' => 'do not install files, only register the package as upgraded',
- ),
- 'nobuild' => array(
- 'shortopt' => 'B',
- 'doc' => 'don\'t build C extensions',
- ),
- 'nocompress' => array(
- 'shortopt' => 'Z',
- 'doc' => 'request uncompressed files when downloading',
- ),
- 'installroot' => array(
- 'shortopt' => 'R',
- 'arg' => 'DIR',
- 'doc' => 'root directory used when installing files (ala PHP\'s INSTALL_ROOT)',
- ),
- 'ignore-errors' => array(
- 'doc' => 'force install even if there were errors',
- ),
- 'alldeps' => array(
- 'shortopt' => 'a',
- 'doc' => 'install all required and optional dependencies',
- ),
- 'onlyreqdeps' => array(
- 'shortopt' => 'o',
- 'doc' => 'install all required dependencies',
- ),
- ),
- 'doc' => '<package> ...
-Upgrades one or more PEAR packages. See documentation for the
-"install" command for ways to specify a package.
-
-When upgrading, your package will be updated if the provided new
-package has a higher version number (use the -f option if you need to
-upgrade anyway).
-
-More than one package may be specified at once.
-'),
- 'upgrade-all' => array(
- 'summary' => 'Upgrade All Packages',
- 'function' => 'doInstall',
- 'shortcut' => 'ua',
- 'options' => array(
- 'nodeps' => array(
- 'shortopt' => 'n',
- 'doc' => 'ignore dependencies, upgrade anyway',
- ),
- 'register-only' => array(
- 'shortopt' => 'r',
- 'doc' => 'do not install files, only register the package as upgraded',
- ),
- 'nobuild' => array(
- 'shortopt' => 'B',
- 'doc' => 'don\'t build C extensions',
- ),
- 'nocompress' => array(
- 'shortopt' => 'Z',
- 'doc' => 'request uncompressed files when downloading',
- ),
- 'installroot' => array(
- 'shortopt' => 'R',
- 'arg' => 'DIR',
- 'doc' => 'root directory used when installing files (ala PHP\'s INSTALL_ROOT)',
- ),
- 'ignore-errors' => array(
- 'doc' => 'force install even if there were errors',
- ),
- ),
- 'doc' => '
-Upgrades all packages that have a newer release available. Upgrades are
-done only if there is a release available of the state specified in
-"preferred_state" (currently {config preferred_state}), or a state considered
-more stable.
-'),
- 'uninstall' => array(
- 'summary' => 'Un-install Package',
- 'function' => 'doUninstall',
- 'shortcut' => 'un',
- 'options' => array(
- 'nodeps' => array(
- 'shortopt' => 'n',
- 'doc' => 'ignore dependencies, uninstall anyway',
- ),
- 'register-only' => array(
- 'shortopt' => 'r',
- 'doc' => 'do not remove files, only register the packages as not installed',
- ),
- 'installroot' => array(
- 'shortopt' => 'R',
- 'arg' => 'DIR',
- 'doc' => 'root directory used when installing files (ala PHP\'s INSTALL_ROOT)',
- ),
- 'ignore-errors' => array(
- 'doc' => 'force install even if there were errors',
- ),
- ),
- 'doc' => '<package> ...
-Uninstalls one or more PEAR packages. More than one package may be
-specified at once.
-'),
- 'bundle' => array(
- 'summary' => 'Unpacks a Pecl Package',
- 'function' => 'doBundle',
- 'shortcut' => 'bun',
- 'options' => array(
- 'destination' => array(
- 'shortopt' => 'd',
- 'arg' => 'DIR',
- 'doc' => 'Optional destination directory for unpacking (defaults to current path or "ext" if exists)',
- ),
- 'force' => array(
- 'shortopt' => 'f',
- 'doc' => 'Force the unpacking even if there were errors in the package',
- ),
- ),
- 'doc' => '<package>
-Unpacks a Pecl Package into the selected location. It will download the
-package if needed.
-'),
- );
-
- // }}}
- // {{{ constructor
-
- /**
- * PEAR_Command_Install constructor.
- *
- * @access public
- */
- function PEAR_Command_Install(&$ui, &$config)
- {
- parent::PEAR_Command_Common($ui, $config);
- }
-
- // }}}
-
- // {{{ doInstall()
-
- function doInstall($command, $options, $params)
- {
- require_once 'PEAR/Downloader.php';
- if (empty($this->installer)) {
- $this->installer = &new PEAR_Installer($this->ui);
- }
- if ($command == 'upgrade') {
- $options['upgrade'] = true;
- }
- if ($command == 'upgrade-all') {
- include_once "PEAR/Remote.php";
- $options['upgrade'] = true;
- $remote = &new PEAR_Remote($this->config);
- $state = $this->config->get('preferred_state');
- if (empty($state) || $state == 'any') {
- $latest = $remote->call("package.listLatestReleases");
- } else {
- $latest = $remote->call("package.listLatestReleases", $state);
- }
- if (PEAR::isError($latest)) {
- return $latest;
- }
- $reg = new PEAR_Registry($this->config->get('php_dir'));
- $installed = array_flip($reg->listPackages());
- $params = array();
- foreach ($latest as $package => $info) {
- $package = strtolower($package);
- if (!isset($installed[$package])) {
- // skip packages we don't have installed
- continue;
- }
- $inst_version = $reg->packageInfo($package, 'version');
- if (version_compare("$info[version]", "$inst_version", "le")) {
- // installed version is up-to-date
- continue;
- }
- $params[] = $package;
- $this->ui->outputData(array('data' => "Will upgrade $package"), $command);
- }
- }
- $this->downloader = &new PEAR_Downloader($this->ui, $options, $this->config);
- $errors = array();
- $downloaded = array();
- $this->downloader->download($params);
- $errors = $this->downloader->getErrorMsgs();
- if (count($errors)) {
- $err['data'] = array($errors);
- $err['headline'] = 'Install Errors';
- $this->ui->outputData($err);
- return $this->raiseError("$command failed");
- }
- $downloaded = $this->downloader->getDownloadedPackages();
- $this->installer->sortPkgDeps($downloaded);
- foreach ($downloaded as $pkg) {
- $info = $this->installer->install($pkg['file'], $options, $this->config);
- if (is_array($info)) {
- if ($this->config->get('verbose') > 0) {
- $label = "$info[package] $info[version]";
- $out = array('data' => "$command ok: $label");
- if (isset($info['release_warnings'])) {
- $out['release_warnings'] = $info['release_warnings'];
- }
- $this->ui->outputData($out, $command);
- }
- } else {
- return $this->raiseError("$command failed");
- }
- }
- return true;
- }
-
- // }}}
- // {{{ doUninstall()
-
- function doUninstall($command, $options, $params)
- {
- if (empty($this->installer)) {
- $this->installer = &new PEAR_Installer($this->ui);
- }
- if (sizeof($params) < 1) {
- return $this->raiseError("Please supply the package(s) you want to uninstall");
- }
- include_once 'PEAR/Registry.php';
- $reg = new PEAR_Registry($this->config->get('php_dir'));
- $newparams = array();
- $badparams = array();
- foreach ($params as $pkg) {
- $info = $reg->packageInfo($pkg);
- if ($info === null) {
- $badparams[] = $pkg;
- } else {
- $newparams[] = $info;
- }
- }
- $this->installer->sortPkgDeps($newparams, true);
- $params = array();
- foreach($newparams as $info) {
- $params[] = $info['info']['package'];
- }
- $params = array_merge($params, $badparams);
- foreach ($params as $pkg) {
- if ($this->installer->uninstall($pkg, $options)) {
- if ($this->config->get('verbose') > 0) {
- $this->ui->outputData("uninstall ok: $pkg", $command);
- }
- } else {
- return $this->raiseError("uninstall failed: $pkg");
- }
- }
- return true;
- }
-
- // }}}
-
-
- // }}}
- // {{{ doBundle()
- /*
- (cox) It just downloads and untars the package, does not do
- any check that the PEAR_Installer::_installFile() does.
- */
-
- function doBundle($command, $options, $params)
- {
- if (empty($this->installer)) {
- $this->installer = &new PEAR_Downloader($this->ui);
- }
- $installer = &$this->installer;
- if (sizeof($params) < 1) {
- return $this->raiseError("Please supply the package you want to bundle");
- }
- $pkgfile = $params[0];
- $need_download = false;
- if (preg_match('#^(http|ftp)://#', $pkgfile)) {
- $need_download = true;
- } elseif (!@is_file($pkgfile)) {
- if ($installer->validPackageName($pkgfile)) {
- $pkgfile = $installer->getPackageDownloadUrl($pkgfile);
- $need_download = true;
- } else {
- if (strlen($pkgfile)) {
- return $this->raiseError("Could not open the package file: $pkgfile");
- } else {
- return $this->raiseError("No package file given");
- }
- }
- }
-
- // Download package -----------------------------------------------
- if ($need_download) {
- $downloaddir = $installer->config->get('download_dir');
- if (empty($downloaddir)) {
- if (PEAR::isError($downloaddir = System::mktemp('-d'))) {
- return $downloaddir;
- }
- $installer->log(2, '+ tmp dir created at ' . $downloaddir);
- }
- $callback = $this->ui ? array(&$installer, '_downloadCallback') : null;
- $file = $installer->downloadHttp($pkgfile, $this->ui, $downloaddir, $callback);
- if (PEAR::isError($file)) {
- return $this->raiseError($file);
- }
- $pkgfile = $file;
- }
-
- // Parse xml file -----------------------------------------------
- $pkginfo = $installer->infoFromTgzFile($pkgfile);
- if (PEAR::isError($pkginfo)) {
- return $this->raiseError($pkginfo);
- }
- $installer->validatePackageInfo($pkginfo, $errors, $warnings);
- // XXX We allow warnings, do we have to do it?
- if (count($errors)) {
- if (empty($options['force'])) {
- return $this->raiseError("The following errors where found:\n".
- implode("\n", $errors));
- } else {
- $this->log(0, "warning : the following errors were found:\n".
- implode("\n", $errors));
- }
- }
- $pkgname = $pkginfo['package'];
-
- // Unpacking -------------------------------------------------
-
- if (isset($options['destination'])) {
- if (!is_dir($options['destination'])) {
- System::mkdir('-p ' . $options['destination']);
- }
- $dest = realpath($options['destination']);
- } else {
- $pwd = getcwd();
- if (is_dir($pwd . DIRECTORY_SEPARATOR . 'ext')) {
- $dest = $pwd . DIRECTORY_SEPARATOR . 'ext';
- } else {
- $dest = $pwd;
- }
- }
- $dest .= DIRECTORY_SEPARATOR . $pkgname;
- $orig = $pkgname . '-' . $pkginfo['version'];
-
- $tar = new Archive_Tar($pkgfile);
- if (!@$tar->extractModify($dest, $orig)) {
- return $this->raiseError("unable to unpack $pkgfile");
- }
- $this->ui->outputData("Package ready at '$dest'");
- // }}}
- }
-
- // }}}
-
-}
-?>
diff --git a/pear/PEAR/Command/Mirror.php b/pear/PEAR/Command/Mirror.php
deleted file mode 100644
index 267c1e8328..0000000000
--- a/pear/PEAR/Command/Mirror.php
+++ /dev/null
@@ -1,101 +0,0 @@
-<?php
-//
-// +----------------------------------------------------------------------+
-// | PHP Version 5 |
-// +----------------------------------------------------------------------+
-// | Copyright (c) 1997-2004 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: Alexander Merz <alexmerz@php.net> |
-// | |
-// +----------------------------------------------------------------------+
-//
-// $Id$
-
-require_once "PEAR/Command/Common.php";
-require_once "PEAR/Command.php";
-require_once "PEAR/Remote.php";
-require_once "PEAR.php";
-
-/**
- * PEAR commands for providing file mirrors
- *
- */
-class PEAR_Command_Mirror extends PEAR_Command_Common
-{
- // {{{ properties
-
- var $commands = array(
- 'download-all' => array(
- 'summary' => 'Downloads each available package from master_server',
- 'function' => 'doDownloadAll',
- 'shortcut' => 'da',
- 'options' => array(),
- 'doc' => '
- Requests a list of available packages from the package server
- (master_server) and downloads them to current working directory'
- ),
- );
-
- // }}}
-
- // {{{ constructor
-
- /**
- * PEAR_Command_Mirror constructor.
- *
- * @access public
- * @param object PEAR_Frontend a reference to an frontend
- * @param object PEAR_Config a reference to the configuration data
- */
- function PEAR_Command_Mirror(&$ui, &$config)
- {
- parent::PEAR_Command_Common($ui, $config);
- }
-
- // }}}
-
- // {{{ doDownloadAll()
- /**
- * retrieves a list of avaible Packages from master server
- * and downloads them
- *
- * @access public
- * @param string $command the command
- * @param array $options the command options before the command
- * @param array $params the stuff after the command name
- * @return bool true if succesful
- * @throw PEAR_Error
- */
- function doDownloadAll($command, $options, $params)
- {
- $this->config->set("php_dir", ".");
- $remote = &new PEAR_Remote($this->config);
- $remoteInfo = $remote->call("package.listAll");
- if (PEAR::isError($remoteInfo)) {
- return $remoteInfo;
- }
- $cmd = &PEAR_Command::factory("download", $this->config);
- if (PEAR::isError($cmd)) {
- return $cmd;
- }
- foreach ($remoteInfo as $pkgn => $pkg) {
- /**
- * Error handling not neccesary, because already done by
- * the download command
- */
- $cmd->run("download", array(), array($pkgn));
- }
-
- return true;
- }
-
- // }}}
-}
diff --git a/pear/PEAR/Command/Package.php b/pear/PEAR/Command/Package.php
deleted file mode 100644
index dcdc86bd1a..0000000000
--- a/pear/PEAR/Command/Package.php
+++ /dev/null
@@ -1,722 +0,0 @@
-<?php
-//
-// +----------------------------------------------------------------------+
-// | PHP Version 5 |
-// +----------------------------------------------------------------------+
-// | Copyright (c) 1997-2004 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. |
-// +----------------------------------------------------------------------+
-// | Authors: Stig Bakken <ssb@php.net> |
-// | Martin Jansen <mj@php.net> |
-// +----------------------------------------------------------------------+
-//
-// $Id$
-
-require_once 'PEAR/Common.php';
-require_once 'PEAR/Command/Common.php';
-
-class PEAR_Command_Package extends PEAR_Command_Common
-{
- // {{{ properties
-
- var $commands = array(
- 'package' => array(
- 'summary' => 'Build Package',
- 'function' => 'doPackage',
- 'shortcut' => 'p',
- 'options' => array(
- 'nocompress' => array(
- 'shortopt' => 'Z',
- 'doc' => 'Do not gzip the package file'
- ),
- 'showname' => array(
- 'shortopt' => 'n',
- 'doc' => 'Print the name of the packaged file.',
- ),
- ),
- 'doc' => '[descfile]
-Creates a PEAR package from its description file (usually called
-package.xml).
-'
- ),
- 'package-validate' => array(
- 'summary' => 'Validate Package Consistency',
- 'function' => 'doPackageValidate',
- 'shortcut' => 'pv',
- 'options' => array(),
- 'doc' => '
-',
- ),
- 'cvsdiff' => array(
- 'summary' => 'Run a "cvs diff" for all files in a package',
- 'function' => 'doCvsDiff',
- 'shortcut' => 'cd',
- 'options' => array(
- 'quiet' => array(
- 'shortopt' => 'q',
- 'doc' => 'Be quiet',
- ),
- 'reallyquiet' => array(
- 'shortopt' => 'Q',
- 'doc' => 'Be really quiet',
- ),
- 'date' => array(
- 'shortopt' => 'D',
- 'doc' => 'Diff against revision of DATE',
- 'arg' => 'DATE',
- ),
- 'release' => array(
- 'shortopt' => 'R',
- 'doc' => 'Diff against tag for package release REL',
- 'arg' => 'REL',
- ),
- 'revision' => array(
- 'shortopt' => 'r',
- 'doc' => 'Diff against revision REV',
- 'arg' => 'REV',
- ),
- 'context' => array(
- 'shortopt' => 'c',
- 'doc' => 'Generate context diff',
- ),
- 'unified' => array(
- 'shortopt' => 'u',
- 'doc' => 'Generate unified diff',
- ),
- 'ignore-case' => array(
- 'shortopt' => 'i',
- 'doc' => 'Ignore case, consider upper- and lower-case letters equivalent',
- ),
- 'ignore-whitespace' => array(
- 'shortopt' => 'b',
- 'doc' => 'Ignore changes in amount of white space',
- ),
- 'ignore-blank-lines' => array(
- 'shortopt' => 'B',
- 'doc' => 'Ignore changes that insert or delete blank lines',
- ),
- 'brief' => array(
- 'doc' => 'Report only whether the files differ, no details',
- ),
- 'dry-run' => array(
- 'shortopt' => 'n',
- 'doc' => 'Don\'t do anything, just pretend',
- ),
- ),
- 'doc' => '<package.xml>
-Compares all the files in a package. Without any options, this
-command will compare the current code with the last checked-in code.
-Using the -r or -R option you may compare the current code with that
-of a specific release.
-',
- ),
- 'cvstag' => array(
- 'summary' => 'Set CVS Release Tag',
- 'function' => 'doCvsTag',
- 'shortcut' => 'ct',
- 'options' => array(
- 'quiet' => array(
- 'shortopt' => 'q',
- 'doc' => 'Be quiet',
- ),
- 'reallyquiet' => array(
- 'shortopt' => 'Q',
- 'doc' => 'Be really quiet',
- ),
- 'slide' => array(
- 'shortopt' => 'F',
- 'doc' => 'Move (slide) tag if it exists',
- ),
- 'delete' => array(
- 'shortopt' => 'd',
- 'doc' => 'Remove tag',
- ),
- 'dry-run' => array(
- 'shortopt' => 'n',
- 'doc' => 'Don\'t do anything, just pretend',
- ),
- ),
- 'doc' => '<package.xml>
-Sets a CVS tag on all files in a package. Use this command after you have
-packaged a distribution tarball with the "package" command to tag what
-revisions of what files were in that release. If need to fix something
-after running cvstag once, but before the tarball is released to the public,
-use the "slide" option to move the release tag.
-',
- ),
- 'run-tests' => array(
- 'summary' => 'Run Regression Tests',
- 'function' => 'doRunTests',
- 'shortcut' => 'rt',
- 'options' => array(),
- 'doc' => '[testfile|dir ...]
-Run regression tests with PHP\'s regression testing script (run-tests.php).',
- ),
- 'package-dependencies' => array(
- 'summary' => 'Show package dependencies',
- 'function' => 'doPackageDependencies',
- 'shortcut' => 'pd',
- 'options' => array(),
- 'doc' => '
-List all depencies the package has.'
- ),
- 'sign' => array(
- 'summary' => 'Sign a package distribution file',
- 'function' => 'doSign',
- 'shortcut' => 'si',
- 'options' => array(),
- 'doc' => '<package-file>
-Signs a package distribution (.tar or .tgz) file with GnuPG.',
- ),
- 'makerpm' => array(
- 'summary' => 'Builds an RPM spec file from a PEAR package',
- 'function' => 'doMakeRPM',
- 'shortcut' => 'rpm',
- 'options' => array(
- 'spec-template' => array(
- 'shortopt' => 't',
- 'arg' => 'FILE',
- 'doc' => 'Use FILE as RPM spec file template'
- ),
- 'rpm-pkgname' => array(
- 'shortopt' => 'p',
- 'arg' => 'FORMAT',
- 'doc' => 'Use FORMAT as format string for RPM package name, %s is replaced
-by the PEAR package name, defaults to "PEAR::%s".',
- ),
- ),
- 'doc' => '<package-file>
-
-Creates an RPM .spec file for wrapping a PEAR package inside an RPM
-package. Intended to be used from the SPECS directory, with the PEAR
-package tarball in the SOURCES directory:
-
-$ pear makerpm ../SOURCES/Net_Socket-1.0.tgz
-Wrote RPM spec file PEAR::Net_Geo-1.0.spec
-$ rpm -bb PEAR::Net_Socket-1.0.spec
-...
-Wrote: /usr/src/redhat/RPMS/i386/PEAR::Net_Socket-1.0-1.i386.rpm
-',
- ),
- );
-
- var $output;
-
- // }}}
- // {{{ constructor
-
- /**
- * PEAR_Command_Package constructor.
- *
- * @access public
- */
- function PEAR_Command_Package(&$ui, &$config)
- {
- parent::PEAR_Command_Common($ui, $config);
- }
-
- // }}}
-
- // {{{ _displayValidationResults()
-
- function _displayValidationResults($err, $warn, $strict = false)
- {
- foreach ($err as $e) {
- $this->output .= "Error: $e\n";
- }
- foreach ($warn as $w) {
- $this->output .= "Warning: $w\n";
- }
- $this->output .= sprintf('Validation: %d error(s), %d warning(s)'."\n",
- sizeof($err), sizeof($warn));
- if ($strict && sizeof($err) > 0) {
- $this->output .= "Fix these errors and try again.";
- return false;
- }
- return true;
- }
-
- // }}}
- // {{{ doPackage()
-
- function doPackage($command, $options, $params)
- {
- $this->output = '';
- include_once 'PEAR/Packager.php';
- $pkginfofile = isset($params[0]) ? $params[0] : 'package.xml';
- $packager =& new PEAR_Packager();
- $err = $warn = array();
- $dir = dirname($pkginfofile);
- $compress = empty($options['nocompress']) ? true : false;
- $result = $packager->package($pkginfofile, $compress);
- if (PEAR::isError($result)) {
- $this->ui->outputData($this->output, $command);
- return $this->raiseError($result);
- }
- // Don't want output, only the package file name just created
- if (isset($options['showname'])) {
- $this->output = $result;
- }
- /* (cox) What is supposed to do that code?
- $lines = explode("\n", $this->output);
- foreach ($lines as $line) {
- $this->output .= $line."n";
- }
- */
- if (PEAR::isError($result)) {
- $this->output .= "Package failed: ".$result->getMessage();
- }
- $this->ui->outputData($this->output, $command);
- return true;
- }
-
- // }}}
- // {{{ doPackageValidate()
-
- function doPackageValidate($command, $options, $params)
- {
- $this->output = '';
- if (sizeof($params) < 1) {
- $params[0] = "package.xml";
- }
- $obj = new PEAR_Common;
- $info = null;
- if ($fp = @fopen($params[0], "r")) {
- $test = fread($fp, 5);
- fclose($fp);
- if ($test == "<?xml") {
- $info = $obj->infoFromDescriptionFile($params[0]);
- }
- }
- if (empty($info)) {
- $info = $obj->infoFromTgzFile($params[0]);
- }
- if (PEAR::isError($info)) {
- return $this->raiseError($info);
- }
- $obj->validatePackageInfo($info, $err, $warn);
- $this->_displayValidationResults($err, $warn);
- $this->ui->outputData($this->output, $command);
- return true;
- }
-
- // }}}
- // {{{ doCvsTag()
-
- function doCvsTag($command, $options, $params)
- {
- $this->output = '';
- $_cmd = $command;
- if (sizeof($params) < 1) {
- $help = $this->getHelp($command);
- return $this->raiseError("$command: missing parameter: $help[0]");
- }
- $obj = new PEAR_Common;
- $info = $obj->infoFromDescriptionFile($params[0]);
- if (PEAR::isError($info)) {
- return $this->raiseError($info);
- }
- $err = $warn = array();
- $obj->validatePackageInfo($info, $err, $warn);
- if (!$this->_displayValidationResults($err, $warn, true)) {
- $this->ui->outputData($this->output, $command);
- break;
- }
- $version = $info['version'];
- $cvsversion = preg_replace('/[^a-z0-9]/i', '_', $version);
- $cvstag = "RELEASE_$cvsversion";
- $files = array_keys($info['filelist']);
- $command = "cvs";
- if (isset($options['quiet'])) {
- $command .= ' -q';
- }
- if (isset($options['reallyquiet'])) {
- $command .= ' -Q';
- }
- $command .= ' tag';
- if (isset($options['slide'])) {
- $command .= ' -F';
- }
- if (isset($options['delete'])) {
- $command .= ' -d';
- }
- $command .= ' ' . $cvstag . ' ' . escapeshellarg($params[0]);
- foreach ($files as $file) {
- $command .= ' ' . escapeshellarg($file);
- }
- if ($this->config->get('verbose') > 1) {
- $this->output .= "+ $command\n";
- }
- $this->output .= "+ $command\n";
- if (empty($options['dry-run'])) {
- $fp = popen($command, "r");
- while ($line = fgets($fp, 1024)) {
- $this->output .= rtrim($line)."\n";
- }
- pclose($fp);
- }
- $this->ui->outputData($this->output, $_cmd);
- return true;
- }
-
- // }}}
- // {{{ doCvsDiff()
-
- function doCvsDiff($command, $options, $params)
- {
- $this->output = '';
- if (sizeof($params) < 1) {
- $help = $this->getHelp($command);
- return $this->raiseError("$command: missing parameter: $help[0]");
- }
- $obj = new PEAR_Common;
- $info = $obj->infoFromDescriptionFile($params[0]);
- if (PEAR::isError($info)) {
- return $this->raiseError($info);
- }
- $files = array_keys($info['filelist']);
- $cmd = "cvs";
- if (isset($options['quiet'])) {
- $cmd .= ' -q';
- unset($options['quiet']);
- }
- if (isset($options['reallyquiet'])) {
- $cmd .= ' -Q';
- unset($options['reallyquiet']);
- }
- if (isset($options['release'])) {
- $cvsversion = preg_replace('/[^a-z0-9]/i', '_', $options['release']);
- $cvstag = "RELEASE_$cvsversion";
- $options['revision'] = $cvstag;
- unset($options['release']);
- }
- $execute = true;
- if (isset($options['dry-run'])) {
- $execute = false;
- unset($options['dry-run']);
- }
- $cmd .= ' diff';
- // the rest of the options are passed right on to "cvs diff"
- foreach ($options as $option => $optarg) {
- $arg = @$this->commands[$command]['options'][$option]['arg'];
- $short = @$this->commands[$command]['options'][$option]['shortopt'];
- $cmd .= $short ? " -$short" : " --$option";
- if ($arg && $optarg) {
- $cmd .= ($short ? '' : '=') . escapeshellarg($optarg);
- }
- }
- foreach ($files as $file) {
- $cmd .= ' ' . escapeshellarg($file);
- }
- if ($this->config->get('verbose') > 1) {
- $this->output .= "+ $cmd\n";
- }
- if ($execute) {
- $fp = popen($cmd, "r");
- while ($line = fgets($fp, 1024)) {
- $this->output .= rtrim($line)."\n";
- }
- pclose($fp);
- }
- $this->ui->outputData($this->output, $command);
- return true;
- }
-
- // }}}
- // {{{ doRunTests()
-
- function doRunTests($command, $options, $params)
- {
- $cwd = getcwd();
- $php = $this->config->get('php_bin');
- putenv("TEST_PHP_EXECUTABLE=$php");
- // all core PEAR tests use this constant to determine whether they should be run or not
- putenv("PHP_PEAR_RUNTESTS=1");
- $ip = ini_get("include_path");
- $ps = OS_WINDOWS ? ';' : ':';
- $run_tests = $rtsts = $this->config->get('php_dir') . DIRECTORY_SEPARATOR . 'run-tests.php';
- if (!file_exists($run_tests)) {
- $run_tests = PEAR_INSTALL_DIR . DIRECTORY_SEPARATOR . 'run-tests.php';
- if (!file_exists($run_tests)) {
- return $this->raiseError("No run-tests.php file found. Please copy this ".
- "file from the sources of your PHP distribution to $rtsts");
- }
- }
- if (OS_WINDOWS) {
- // note, this requires a slightly modified version of run-tests.php
- // for some setups
- // unofficial download location is in the pear-dev archives
- $argv = $params;
- array_unshift($argv, $run_tests);
- $argc = count($argv);
- include $run_tests;
- } else {
- $plist = implode(' ', $params);
- $cmd = "$php -d include_path=$cwd$ps$ip -f $run_tests -- $plist";
- system($cmd);
- }
- return true;
- }
-
- // }}}
- // {{{ doPackageDependencies()
-
- function doPackageDependencies($command, $options, $params)
- {
- // $params[0] -> the PEAR package to list its information
- if (sizeof($params) != 1) {
- return $this->raiseError("bad parameter(s), try \"help $command\"");
- }
-
- $obj = new PEAR_Common();
- if (PEAR::isError($info = $obj->infoFromAny($params[0]))) {
- return $this->raiseError($info);
- }
-
- if (is_array($info['release_deps'])) {
- $data = array(
- 'caption' => 'Dependencies for ' . $info['package'],
- 'border' => true,
- 'headline' => array("Type", "Name", "Relation", "Version"),
- );
-
- foreach ($info['release_deps'] as $d) {
-
- if (isset($this->_deps_rel_trans[$d['rel']])) {
- $rel = $this->_deps_rel_trans[$d['rel']];
- } else {
- $rel = $d['rel'];
- }
-
- if (isset($this->_deps_type_trans[$d['type']])) {
- $type = ucfirst($this->_deps_type_trans[$d['type']]);
- } else {
- $type = $d['type'];
- }
-
- if (isset($d['name'])) {
- $name = $d['name'];
- } else {
- $name = '';
- }
-
- if (isset($d['version'])) {
- $version = $d['version'];
- } else {
- $version = '';
- }
-
- $data['data'][] = array($type, $name, $rel, $version);
- }
-
- $this->ui->outputData($data, $command);
- return true;
- }
-
- // Fallback
- $this->ui->outputData("This package does not have any dependencies.", $command);
- }
-
- // }}}
- // {{{ doSign()
-
- function doSign($command, $options, $params)
- {
- // should move most of this code into PEAR_Packager
- // so it'll be easy to implement "pear package --sign"
- if (sizeof($params) != 1) {
- return $this->raiseError("bad parameter(s), try \"help $command\"");
- }
- if (!file_exists($params[0])) {
- return $this->raiseError("file does not exist: $params[0]");
- }
- $obj = new PEAR_Common;
- $info = $obj->infoFromTgzFile($params[0]);
- if (PEAR::isError($info)) {
- return $this->raiseError($info);
- }
- include_once "Archive/Tar.php";
- include_once "System.php";
- $tar = new Archive_Tar($params[0]);
- $tmpdir = System::mktemp('-d pearsign');
- if (!$tar->extractList('package.xml package.sig', $tmpdir)) {
- return $this->raiseError("failed to extract tar file");
- }
- if (file_exists("$tmpdir/package.sig")) {
- return $this->raiseError("package already signed");
- }
- @unlink("$tmpdir/package.sig");
- $input = $this->ui->userDialog($command,
- array('GnuPG Passphrase'),
- array('password'));
- $gpg = popen("gpg --batch --passphrase-fd 0 --armor --detach-sign --output $tmpdir/package.sig $tmpdir/package.xml 2>/dev/null", "w");
- if (!$gpg) {
- return $this->raiseError("gpg command failed");
- }
- fwrite($gpg, "$input[0]\r");
- if (pclose($gpg) || !file_exists("$tmpdir/package.sig")) {
- return $this->raiseError("gpg sign failed");
- }
- $tar->addModify("$tmpdir/package.sig", '', $tmpdir);
- return true;
- }
-
- // }}}
- // {{{ doMakeRPM()
-
- /*
-
- (cox)
-
- TODO:
-
- - Fill the rpm dependencies in the template file.
-
- IDEAS:
-
- - Instead of mapping the role to rpm vars, perhaps it's better
-
- to use directly the pear cmd to install the files by itself
-
- in %postrun so:
-
- pear -d php_dir=%{_libdir}/php/pear -d test_dir=.. <package>
-
- */
-
- function doMakeRPM($command, $options, $params)
- {
- if (sizeof($params) != 1) {
- return $this->raiseError("bad parameter(s), try \"help $command\"");
- }
- if (!file_exists($params[0])) {
- return $this->raiseError("file does not exist: $params[0]");
- }
- include_once "Archive/Tar.php";
- include_once "PEAR/Installer.php";
- include_once "System.php";
- $tar = new Archive_Tar($params[0]);
- $tmpdir = System::mktemp('-d pear2rpm');
- $instroot = System::mktemp('-d pear2rpm');
- $tmp = $this->config->get('verbose');
- $this->config->set('verbose', 0);
- $installer = new PEAR_Installer($this->ui);
- $info = $installer->install($params[0],
- array('installroot' => $instroot,
- 'nodeps' => true));
- $pkgdir = "$info[package]-$info[version]";
- $info['rpm_xml_dir'] = '/var/lib/pear';
- $this->config->set('verbose', $tmp);
- if (!$tar->extractList("package.xml", $tmpdir, $pkgdir)) {
- return $this->raiseError("failed to extract $params[0]");
- }
- if (!file_exists("$tmpdir/package.xml")) {
- return $this->raiseError("no package.xml found in $params[0]");
- }
- if (isset($options['spec-template'])) {
- $spec_template = $options['spec-template'];
- } else {
- $spec_template = $this->config->get('data_dir') .
- '/PEAR/template.spec';
- }
- if (isset($options['rpm-pkgname'])) {
- $rpm_pkgname_format = $options['rpm-pkgname'];
- } else {
- $rpm_pkgname_format = "PEAR::%s";
- }
-
- $info['extra_headers'] = '';
- $info['doc_files'] = '';
- $info['files'] = '';
- $info['rpm_package'] = sprintf($rpm_pkgname_format, $info['package']);
- $srcfiles = 0;
- foreach ($info['filelist'] as $name => $attr) {
-
- if (!isset($attr['role'])) {
- continue;
- }
- if ($attr['role'] == 'doc') {
- $info['doc_files'] .= " $name";
-
- // Map role to the rpm vars
- } else {
-
- $c_prefix = '%{_libdir}/php/pear';
-
- switch ($attr['role']) {
-
- case 'php':
-
- $prefix = $c_prefix; break;
-
- case 'ext':
-
- $prefix = '%{_libdir}/php'; break; // XXX good place?
-
- case 'src':
-
- $srcfiles++;
-
- $prefix = '%{_includedir}/php'; break; // XXX good place?
-
- case 'test':
-
- $prefix = "$c_prefix/tests/" . $info['package']; break;
-
- case 'data':
-
- $prefix = "$c_prefix/data/" . $info['package']; break;
-
- case 'script':
-
- $prefix = '%{_bindir}'; break;
-
- }
-
- $name = str_replace('\\', '/', $name);
- $info['files'] .= "$prefix/$name\n";
-
- }
- }
- if ($srcfiles > 0) {
- include_once "OS/Guess.php";
- $os = new OS_Guess;
- $arch = $os->getCpu();
- } else {
- $arch = 'noarch';
- }
- $cfg = array('master_server', 'php_dir', 'ext_dir', 'doc_dir',
- 'bin_dir', 'data_dir', 'test_dir');
- foreach ($cfg as $k) {
- $info[$k] = $this->config->get($k);
- }
- $info['arch'] = $arch;
- $fp = @fopen($spec_template, "r");
- if (!$fp) {
- return $this->raiseError("could not open RPM spec file template $spec_template: $php_errormsg");
- }
- $spec_contents = preg_replace('/@([a-z0-9_-]+)@/e', '$info["\1"]', fread($fp, filesize($spec_template)));
- fclose($fp);
- $spec_file = "$info[rpm_package]-$info[version].spec";
- $wp = fopen($spec_file, "wb");
- if (!$wp) {
- return $this->raiseError("could not write RPM spec file $spec_file: $php_errormsg");
- }
- fwrite($wp, $spec_contents);
- fclose($wp);
- $this->ui->outputData("Wrote RPM spec file $spec_file", $command);
-
- return true;
- }
-
- // }}}
-}
-
-?>
diff --git a/pear/PEAR/Command/Registry.php b/pear/PEAR/Command/Registry.php
deleted file mode 100644
index e1f6f74a9c..0000000000
--- a/pear/PEAR/Command/Registry.php
+++ /dev/null
@@ -1,351 +0,0 @@
-<?php
-// /* vim: set expandtab tabstop=4 shiftwidth=4: */
-// +----------------------------------------------------------------------+
-// | PHP Version 5 |
-// +----------------------------------------------------------------------+
-// | Copyright (c) 1997-2004 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: Stig Bakken <ssb@php.net> |
-// | |
-// +----------------------------------------------------------------------+
-//
-// $Id$
-
-require_once 'PEAR/Command/Common.php';
-require_once 'PEAR/Registry.php';
-require_once 'PEAR/Config.php';
-
-class PEAR_Command_Registry extends PEAR_Command_Common
-{
- // {{{ properties
-
- var $commands = array(
- 'list' => array(
- 'summary' => 'List Installed Packages',
- 'function' => 'doList',
- 'shortcut' => 'l',
- 'options' => array(),
- 'doc' => '[package]
-If invoked without parameters, this command lists the PEAR packages
-installed in your php_dir ({config php_dir)). With a parameter, it
-lists the files in that package.
-',
- ),
- 'shell-test' => array(
- 'summary' => 'Shell Script Test',
- 'function' => 'doShellTest',
- 'shortcut' => 'st',
- 'options' => array(),
- 'doc' => '<package> [[relation] version]
-Tests if a package is installed in the system. Will exit(1) if it is not.
- <relation> The version comparison operator. One of:
- <, lt, <=, le, >, gt, >=, ge, ==, =, eq, !=, <>, ne
- <version> The version to compare with
-'),
- 'info' => array(
- 'summary' => 'Display information about a package',
- 'function' => 'doInfo',
- 'shortcut' => 'in',
- 'options' => array(),
- 'doc' => '<package>
-Displays information about a package. The package argument may be a
-local package file, an URL to a package file, or the name of an
-installed package.'
- )
- );
-
- // }}}
- // {{{ constructor
-
- /**
- * PEAR_Command_Registry constructor.
- *
- * @access public
- */
- function PEAR_Command_Registry(&$ui, &$config)
- {
- parent::PEAR_Command_Common($ui, $config);
- }
-
- // }}}
-
- // {{{ doList()
-
- function _sortinfo($a, $b)
- {
- return strcmp($a['package'], $b['package']);
- }
-
- function doList($command, $options, $params)
- {
- $reg = new PEAR_Registry($this->config->get('php_dir'));
- if (sizeof($params) == 0) {
- $installed = $reg->packageInfo();
- usort($installed, array(&$this, '_sortinfo'));
- $i = $j = 0;
- $data = array(
- 'caption' => 'Installed packages:',
- 'border' => true,
- 'headline' => array('Package', 'Version', 'State')
- );
- foreach ($installed as $package) {
- $data['data'][] = array($package['package'],
- $package['version'],
- @$package['release_state']);
- }
- if (count($installed)==0) {
- $data = '(no packages installed)';
- }
- $this->ui->outputData($data, $command);
- } else {
- if (file_exists($params[0]) && !is_dir($params[0])) {
- include_once "PEAR/Common.php";
- $obj = &new PEAR_Common;
- $info = $obj->infoFromAny($params[0]);
- $headings = array('Package File', 'Install Path');
- $installed = false;
- } else {
- $info = $reg->packageInfo($params[0]);
- $headings = array('Type', 'Install Path');
- $installed = true;
- }
- if (PEAR::isError($info)) {
- return $this->raiseError($info);
- }
- if ($info === null) {
- return $this->raiseError("`$params[0]' not installed");
- }
- $list = $info['filelist'];
- if ($installed) {
- $caption = 'Installed Files For ' . $params[0];
- } else {
- $caption = 'Contents of ' . basename($params[0]);
- }
- $data = array(
- 'caption' => $caption,
- 'border' => true,
- 'headline' => $headings);
- foreach ($list as $file => $att) {
- if ($installed) {
- if (empty($att['installed_as'])) {
- continue;
- }
- $data['data'][] = array($att['role'], $att['installed_as']);
- } else {
- if (isset($att['baseinstalldir'])) {
- $dest = $att['baseinstalldir'] . DIRECTORY_SEPARATOR .
- $file;
- } else {
- $dest = $file;
- }
- switch ($att['role']) {
- case 'test':
- case 'data':
- if ($installed) {
- break 2;
- }
- $dest = '-- will not be installed --';
- break;
- case 'doc':
- $dest = $this->config->get('doc_dir') . DIRECTORY_SEPARATOR .
- $dest;
- break;
- case 'php':
- default:
- $dest = $this->config->get('php_dir') . DIRECTORY_SEPARATOR .
- $dest;
- }
- $dest = preg_replace('!/+!', '/', $dest);
- $file = preg_replace('!/+!', '/', $file);
- $data['data'][] = array($file, $dest);
- }
- }
- $this->ui->outputData($data, $command);
-
-
- }
- return true;
- }
-
- // }}}
- // {{{ doShellTest()
-
- function doShellTest($command, $options, $params)
- {
- $this->pushErrorHandling(PEAR_ERROR_RETURN);
- $reg = &new PEAR_Registry($this->config->get('php_dir'));
- // "pear shell-test Foo"
- if (sizeof($params) == 1) {
- if (!$reg->packageExists($params[0])) {
- exit(1);
- }
- // "pear shell-test Foo 1.0"
- } elseif (sizeof($params) == 2) {
- $v = $reg->packageInfo($params[0], 'version');
- if (!$v || !version_compare("$v", "{$params[1]}", "ge")) {
- exit(1);
- }
- // "pear shell-test Foo ge 1.0"
- } elseif (sizeof($params) == 3) {
- $v = $reg->packageInfo($params[0], 'version');
- if (!$v || !version_compare("$v", "{$params[2]}", $params[1])) {
- exit(1);
- }
- } else {
- $this->popErrorHandling();
- $this->raiseError("$command: expects 1 to 3 parameters");
- exit(1);
- }
- }
-
- // }}}
- // {{{ doInfo
-
- function doInfo($command, $options, $params)
- {
- // $params[0] The package for showing info
- if (sizeof($params) != 1) {
- return $this->raiseError("This command only accepts one param: ".
- "the package you want information");
- }
- if (@is_file($params[0])) {
- $obj = &new PEAR_Common();
- $info = $obj->infoFromAny($params[0]);
- } else {
- $reg = &new PEAR_Registry($this->config->get('php_dir'));
- $info = $reg->packageInfo($params[0]);
- }
- if (PEAR::isError($info)) {
- return $info;
- }
- if (empty($info)) {
- $this->raiseError("Nothing found for `$params[0]'");
- return;
- }
- unset($info['filelist']);
- unset($info['changelog']);
- $keys = array_keys($info);
- $longtext = array('description', 'summary');
- foreach ($keys as $key) {
- if (is_array($info[$key])) {
- switch ($key) {
- case 'maintainers': {
- $i = 0;
- $mstr = '';
- foreach ($info[$key] as $m) {
- if ($i++ > 0) {
- $mstr .= "\n";
- }
- $mstr .= $m['name'] . " <";
- if (isset($m['email'])) {
- $mstr .= $m['email'];
- } else {
- $mstr .= $m['handle'] . '@php.net';
- }
- $mstr .= "> ($m[role])";
- }
- $info[$key] = $mstr;
- break;
- }
- case 'release_deps': {
- $i = 0;
- $dstr = '';
- foreach ($info[$key] as $d) {
- if (isset($this->_deps_rel_trans[$d['rel']])) {
- $rel = $this->_deps_rel_trans[$d['rel']];
- } else {
- $rel = $d['rel'];
- }
- if (isset($this->_deps_type_trans[$d['type']])) {
- $type = ucfirst($this->_deps_type_trans[$d['type']]);
- } else {
- $type = $d['type'];
- }
- if (isset($d['name'])) {
- $name = $d['name'] . ' ';
- } else {
- $name = '';
- }
- if (isset($d['version'])) {
- $version = $d['version'] . ' ';
- } else {
- $version = '';
- }
- $dstr .= "$type $name$rel $version\n";
- }
- $info[$key] = $dstr;
- break;
- }
- case 'provides' : {
- $debug = $this->config->get('verbose');
- if ($debug < 2) {
- $pstr = 'Classes: ';
- } else {
- $pstr = '';
- }
- $i = 0;
- foreach ($info[$key] as $p) {
- if ($debug < 2 && $p['type'] != "class") {
- continue;
- }
- // Only print classes when verbosity mode is < 2
- if ($debug < 2) {
- if ($i++ > 0) {
- $pstr .= ", ";
- }
- $pstr .= $p['name'];
- } else {
- if ($i++ > 0) {
- $pstr .= "\n";
- }
- $pstr .= ucfirst($p['type']) . " " . $p['name'];
- if (isset($p['explicit']) && $p['explicit'] == 1) {
- $pstr .= " (explicit)";
- }
- }
- }
- $info[$key] = $pstr;
- break;
- }
- default: {
- $info[$key] = implode(", ", $info[$key]);
- break;
- }
- }
- }
- if ($key == '_lastmodified') {
- $hdate = date('Y-m-d', $info[$key]);
- unset($info[$key]);
- $info['Last Modified'] = $hdate;
- } else {
- $info[$key] = trim($info[$key]);
- if (in_array($key, $longtext)) {
- $info[$key] = preg_replace('/ +/', ' ', $info[$key]);
- }
- }
- }
- $caption = 'About ' . $info['package'] . '-' . $info['version'];
- $data = array(
- 'caption' => $caption,
- 'border' => true);
- foreach ($info as $key => $value) {
- $key = ucwords(trim(str_replace('_', ' ', $key)));
- $data['data'][] = array($key, $value);
- }
- $data['raw'] = $info;
-
- $this->ui->outputData($data, 'package-info');
- }
-
- // }}}
-}
-
-?>
diff --git a/pear/PEAR/Command/Remote.php b/pear/PEAR/Command/Remote.php
deleted file mode 100644
index 5ff2dc3ae1..0000000000
--- a/pear/PEAR/Command/Remote.php
+++ /dev/null
@@ -1,435 +0,0 @@
-<?php
-// /* vim: set expandtab tabstop=4 shiftwidth=4: */
-// +----------------------------------------------------------------------+
-// | PHP Version 5 |
-// +----------------------------------------------------------------------+
-// | Copyright (c) 1997-2004 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: Stig Bakken <ssb@php.net> |
-// | |
-// +----------------------------------------------------------------------+
-//
-// $Id$
-
-require_once 'PEAR/Command/Common.php';
-require_once 'PEAR/Common.php';
-require_once 'PEAR/Remote.php';
-require_once 'PEAR/Registry.php';
-
-class PEAR_Command_Remote extends PEAR_Command_Common
-{
- // {{{ command definitions
-
- var $commands = array(
- 'remote-info' => array(
- 'summary' => 'Information About Remote Packages',
- 'function' => 'doRemoteInfo',
- 'shortcut' => 'ri',
- 'options' => array(),
- 'doc' => '<package>
-Get details on a package from the server.',
- ),
- 'list-upgrades' => array(
- 'summary' => 'List Available Upgrades',
- 'function' => 'doListUpgrades',
- 'shortcut' => 'lu',
- 'options' => array(),
- 'doc' => '
-List releases on the server of packages you have installed where
-a newer version is available with the same release state (stable etc.).'
- ),
- 'remote-list' => array(
- 'summary' => 'List Remote Packages',
- 'function' => 'doRemoteList',
- 'shortcut' => 'rl',
- 'options' => array(),
- 'doc' => '
-Lists the packages available on the configured server along with the
-latest stable release of each package.',
- ),
- 'search' => array(
- 'summary' => 'Search remote package database',
- 'function' => 'doSearch',
- 'shortcut' => 'sp',
- 'options' => array(),
- 'doc' => '
-Lists all packages which match the search parameters (first param
-is package name, second package info)',
- ),
- 'list-all' => array(
- 'summary' => 'List All Packages',
- 'function' => 'doListAll',
- 'shortcut' => 'la',
- 'options' => array(),
- 'doc' => '
-Lists the packages available on the configured server along with the
-latest stable release of each package.',
- ),
- 'download' => array(
- 'summary' => 'Download Package',
- 'function' => 'doDownload',
- 'shortcut' => 'd',
- 'options' => array(
- 'nocompress' => array(
- 'shortopt' => 'Z',
- 'doc' => 'download an uncompressed (.tar) file',
- ),
- ),
- 'doc' => '{package|package-version}
-Download a package tarball. The file will be named as suggested by the
-server, for example if you download the DB package and the latest stable
-version of DB is 1.2, the downloaded file will be DB-1.2.tgz.',
- ),
- 'clear-cache' => array(
- 'summary' => 'Clear XML-RPC Cache',
- 'function' => 'doClearCache',
- 'shortcut' => 'cc',
- 'options' => array(),
- 'doc' => '
-Clear the XML-RPC cache. See also the cache_ttl configuration
-parameter.
-',
- ),
- );
-
- // }}}
- // {{{ constructor
-
- /**
- * PEAR_Command_Remote constructor.
- *
- * @access public
- */
- function PEAR_Command_Remote(&$ui, &$config)
- {
- parent::PEAR_Command_Common($ui, $config);
- }
-
- // }}}
-
- // {{{ doRemoteInfo()
-
- function doRemoteInfo($command, $options, $params)
- {
- if (sizeof($params) != 1) {
- return $this->raiseError("$command expects one param: the remote package name");
- }
- $r = new PEAR_Remote($this->config);
- $info = $r->call('package.info', $params[0]);
- if (PEAR::isError($info)) {
- return $this->raiseError($info);
- }
-
- $reg = new PEAR_Registry($this->config->get('php_dir'));
- $installed = $reg->packageInfo($info['name']);
- $info['installed'] = $installed['version'] ? $installed['version'] : '- no -';
-
- $this->ui->outputData($info, $command);
-
- return true;
- }
-
- // }}}
- // {{{ doRemoteList()
-
- function doRemoteList($command, $options, $params)
- {
- $r = new PEAR_Remote($this->config);
- $list_options = false;
- if ($this->config->get('preferred_state') == 'stable')
- $list_options = true;
- $available = $r->call('package.listAll', $list_options);
- if (PEAR::isError($available)) {
- return $this->raiseError($available);
- }
- $i = $j = 0;
- $data = array(
- 'caption' => 'Available packages:',
- 'border' => true,
- 'headline' => array('Package', 'Version'),
- );
- foreach ($available as $name => $info) {
- $data['data'][] = array($name, isset($info['stable']) ? $info['stable'] : '-n/a-');
- }
- if (count($available)==0) {
- $data = '(no packages installed yet)';
- }
- $this->ui->outputData($data, $command);
- return true;
- }
-
- // }}}
- // {{{ doListAll()
-
- function doListAll($command, $options, $params)
- {
- $r = new PEAR_Remote($this->config);
- $reg = new PEAR_Registry($this->config->get('php_dir'));
- $list_options = false;
- if ($this->config->get('preferred_state') == 'stable')
- $list_options = true;
- $available = $r->call('package.listAll', $list_options);
- if (PEAR::isError($available)) {
- return $this->raiseError($available);
- }
- if (!is_array($available)) {
- return $this->raiseError('The package list could not be fetched from the remote server. Please try again. (Debug info: "'.$available.'")');
- }
- $data = array(
- 'caption' => 'All packages:',
- 'border' => true,
- 'headline' => array('Package', 'Latest', 'Local'),
- );
- $local_pkgs = $reg->listPackages();
-
- foreach ($available as $name => $info) {
- $installed = $reg->packageInfo($name);
- $desc = $info['summary'];
- if (isset($params[$name]))
- $desc .= "\n\n".$info['description'];
-
- if (isset($options['mode']))
- {
- if ($options['mode'] == 'installed' && !isset($installed['version']))
- continue;
- if ($options['mode'] == 'notinstalled' && isset($installed['version']))
- continue;
- if ($options['mode'] == 'upgrades'
- && (!isset($installed['version']) || $installed['version'] == $info['stable']))
- {
- continue;
- }
- }
- $pos = array_search(strtolower($name), $local_pkgs);
- if ($pos !== false) {
- unset($local_pkgs[$pos]);
- }
-
- $data['data'][$info['category']][] = array(
- $name,
- @$info['stable'],
- @$installed['version'],
- @$desc,
- @$info['deps'],
- );
- }
-
- foreach ($local_pkgs as $name) {
- $info = $reg->packageInfo($name);
- $data['data']['Local'][] = array(
- $info['package'],
- '',
- $info['version'],
- $info['summary'],
- @$info['release_deps']
- );
- }
-
- $this->ui->outputData($data, $command);
- return true;
- }
-
- // }}}
- // {{{ doSearch()
-
- function doSearch($command, $options, $params)
- {
- if ((!isset($params[0]) || empty($params[0]))
- && (!isset($params[1]) || empty($params[1])))
- {
- return $this->raiseError('no valid search string supplied');
- };
-
- $r = new PEAR_Remote($this->config);
- $reg = new PEAR_Registry($this->config->get('php_dir'));
- $available = $r->call('package.listAll', true, false);
- if (PEAR::isError($available)) {
- return $this->raiseError($available);
- }
- $data = array(
- 'caption' => 'Matched packages:',
- 'border' => true,
- 'headline' => array('Package', 'Stable/(Latest)', 'Local'),
- );
-
- foreach ($available as $name => $info) {
- $found = (!empty($params[0]) && stristr($name, $params[0]) !== false);
- if (!$found && !(isset($params[1]) && !empty($params[1])
- && (stristr($info['summary'], $params[1]) !== false
- || stristr($info['description'], $params[1]) !== false)))
- {
- continue;
- };
-
- $installed = $reg->packageInfo($name);
- $desc = $info['summary'];
- if (isset($params[$name]))
- $desc .= "\n\n".$info['description'];
-
- $unstable = '';
- if ($info['unstable']) {
- $unstable = '/(' . $info['unstable'] . $info['state'] . ')';
- }
- if (!isset($info['stable']) || !$info['stable']) {
- $info['stable'] = 'none';
- }
- $data['data'][$info['category']][] = array(
- $name,
- $info['stable'] . $unstable,
- $installed['version'],
- $desc,
- );
- }
- if (!isset($data['data'])) {
- return $this->raiseError('no packages found');
- }
- $this->ui->outputData($data, $command);
- return true;
- }
-
- // }}}
- // {{{ doDownload()
-
- function doDownload($command, $options, $params)
- {
- //$params[0] -> The package to download
- if (count($params) != 1) {
- return PEAR::raiseError("download expects one argument: the package to download");
- }
- $server = $this->config->get('master_server');
- if (!ereg('^http://', $params[0])) {
- $getoption = isset($options['nocompress'])&&$options['nocompress']==1?'?uncompress=on':'';
- $pkgfile = "http://$server/get/$params[0]".$getoption;
- } else {
- $pkgfile = $params[0];
- }
- $this->bytes_downloaded = 0;
- $saved = PEAR_Common::downloadHttp($pkgfile, $this->ui, '.',
- array(&$this, 'downloadCallback'));
- if (PEAR::isError($saved)) {
- return $this->raiseError($saved);
- }
- $fname = basename($saved);
- $this->ui->outputData("File $fname downloaded ($this->bytes_downloaded bytes)", $command);
- return true;
- }
-
- function downloadCallback($msg, $params = null)
- {
- if ($msg == 'done') {
- $this->bytes_downloaded = $params;
- }
- }
-
- // }}}
- // {{{ doListUpgrades()
-
- function doListUpgrades($command, $options, $params)
- {
- include_once "PEAR/Registry.php";
- $remote = new PEAR_Remote($this->config);
- if (empty($params[0])) {
- $state = $this->config->get('preferred_state');
- } else {
- $state = $params[0];
- }
- $caption = 'Available Upgrades';
- if (empty($state) || $state == 'any') {
- $latest = $remote->call("package.listLatestReleases");
- } else {
- $latest = $remote->call("package.listLatestReleases", $state);
- $caption .= ' (' . implode(', ', PEAR_Common::betterStates($state, true)) . ')';
- }
- $caption .= ':';
- if (PEAR::isError($latest)) {
- return $latest;
- }
- $reg = new PEAR_Registry($this->config->get('php_dir'));
- $inst = array_flip($reg->listPackages());
- $data = array(
- 'caption' => $caption,
- 'border' => 1,
- 'headline' => array('Package', 'Local', 'Remote', 'Size'),
- );
- foreach ((array)$latest as $pkg => $info) {
- $package = strtolower($pkg);
- if (!isset($inst[$package])) {
- // skip packages we don't have installed
- continue;
- }
- extract($info);
- $pkginfo = $reg->packageInfo($package);
- $inst_version = $pkginfo['version'];
- $inst_state = $pkginfo['release_state'];
- if (version_compare("$version", "$inst_version", "le")) {
- // installed version is up-to-date
- continue;
- }
- if ($filesize >= 20480) {
- $filesize += 1024 - ($filesize % 1024);
- $fs = sprintf("%dkB", $filesize / 1024);
- } elseif ($filesize > 0) {
- $filesize += 103 - ($filesize % 103);
- $fs = sprintf("%.1fkB", $filesize / 1024.0);
- } else {
- $fs = " -"; // XXX center instead
- }
- $data['data'][] = array($pkg, "$inst_version ($inst_state)", "$version ($state)", $fs);
- }
- if (empty($data['data'])) {
- $this->ui->outputData('No upgrades available');
- } else {
- $this->ui->outputData($data, $command);
- }
- return true;
- }
-
- // }}}
- // {{{ doClearCache()
-
- function doClearCache($command, $options, $params)
- {
- $cache_dir = $this->config->get('cache_dir');
- $verbose = $this->config->get('verbose');
- $output = '';
- if (!($dp = @opendir($cache_dir))) {
- return $this->raiseError("opendir($cache_dir) failed: $php_errormsg");
- }
- if ($verbose >= 1) {
- $output .= "reading directory $cache_dir\n";
- }
- $num = 0;
- while ($ent = readdir($dp)) {
- if (preg_match('/^xmlrpc_cache_[a-z0-9]{32}$/', $ent)) {
- $path = $cache_dir . DIRECTORY_SEPARATOR . $ent;
- $ok = @unlink($path);
- if ($ok) {
- if ($verbose >= 2) {
- $output .= "deleted $path\n";
- }
- $num++;
- } elseif ($verbose >= 1) {
- $output .= "failed to delete $path\n";
- }
- }
- }
- closedir($dp);
- if ($verbose >= 1) {
- $output .= "$num cache entries cleared\n";
- }
- $this->ui->outputData(rtrim($output), $command);
- return $num;
- }
-
- // }}}
-}
-
-?>
diff --git a/pear/PEAR/Common.php b/pear/PEAR/Common.php
deleted file mode 100644
index 2f9c611823..0000000000
--- a/pear/PEAR/Common.php
+++ /dev/null
@@ -1,2040 +0,0 @@
-<?php
-//
-// +----------------------------------------------------------------------+
-// | PHP Version 4 |
-// +----------------------------------------------------------------------+
-// | Copyright (c) 1997-2003 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. |
-// +----------------------------------------------------------------------+
-// | Authors: Stig Bakken <ssb@php.net> |
-// | Tomas V.V.Cox <cox@idecnet.com> |
-// +----------------------------------------------------------------------+
-//
-// $Id$
-
-require_once 'PEAR.php';
-require_once 'Archive/Tar.php';
-require_once 'System.php';
-require_once 'PEAR/Config.php';
-
-// {{{ constants and globals
-
-/**
- * PEAR_Common error when an invalid PHP file is passed to PEAR_Common::analyzeSourceCode()
- */
-define('PEAR_COMMON_ERROR_INVALIDPHP', 1);
-define('_PEAR_COMMON_PACKAGE_NAME_PREG', '[A-Za-z][a-zA-Z0-9_]+');
-define('PEAR_COMMON_PACKAGE_NAME_PREG', '/^' . _PEAR_COMMON_PACKAGE_NAME_PREG . '$/');
-
-// this should allow: 1, 1.0, 1.0RC1, 1.0dev, 1.0dev123234234234, 1.0a1, 1.0b1, 1.0pl1
-define('_PEAR_COMMON_PACKAGE_VERSION_PREG', '\d+(?:\.\d+)*(?:[a-z]+\d*)?');
-define('PEAR_COMMON_PACKAGE_VERSION_PREG', '/^' . _PEAR_COMMON_PACKAGE_VERSION_PREG . '$/i');
-
-// XXX far from perfect :-)
-define('PEAR_COMMON_PACKAGE_DOWNLOAD_PREG', '/^(' . _PEAR_COMMON_PACKAGE_NAME_PREG . ')(-([.0-9a-zA-Z]+))?$/');
-
-/**
- * List of temporary files and directories registered by
- * PEAR_Common::addTempFile().
- * @var array
- */
-$GLOBALS['_PEAR_Common_tempfiles'] = array();
-
-/**
- * Valid maintainer roles
- * @var array
- */
-$GLOBALS['_PEAR_Common_maintainer_roles'] = array('lead','developer','contributor','helper');
-
-/**
- * Valid release states
- * @var array
- */
-$GLOBALS['_PEAR_Common_release_states'] = array('alpha','beta','stable','snapshot','devel');
-
-/**
- * Valid dependency types
- * @var array
- */
-$GLOBALS['_PEAR_Common_dependency_types'] = array('pkg','ext','php','prog','ldlib','rtlib','os','websrv','sapi');
-
-/**
- * Valid dependency relations
- * @var array
- */
-$GLOBALS['_PEAR_Common_dependency_relations'] = array('has','eq','lt','le','gt','ge','not');
-
-/**
- * Valid file roles
- * @var array
- */
-$GLOBALS['_PEAR_Common_file_roles'] = array('php','ext','test','doc','data','src','script');
-
-/**
- * Valid replacement types
- * @var array
- */
-$GLOBALS['_PEAR_Common_replacement_types'] = array('php-const', 'pear-config', 'package-info');
-
-/**
- * Valid "provide" types
- * @var array
- */
-$GLOBALS['_PEAR_Common_provide_types'] = array('ext', 'prog', 'class', 'function', 'feature', 'api');
-
-/**
- * Valid "provide" types
- * @var array
- */
-$GLOBALS['_PEAR_Common_script_phases'] = array('pre-install', 'post-install', 'pre-uninstall', 'post-uninstall', 'pre-build', 'post-build', 'pre-configure', 'post-configure', 'pre-setup', 'post-setup');
-
-// }}}
-
-/**
- * Class providing common functionality for PEAR adminsitration classes.
- */
-class PEAR_Common extends PEAR
-{
- // {{{ properties
-
- /** stack of elements, gives some sort of XML context */
- var $element_stack = array();
-
- /** name of currently parsed XML element */
- var $current_element;
-
- /** array of attributes of the currently parsed XML element */
- var $current_attributes = array();
-
- /** assoc with information about a package */
- var $pkginfo = array();
-
- /**
- * User Interface object (PEAR_Frontend_* class). If null,
- * the log() method uses print.
- * @var object
- */
- var $ui = null;
-
- /**
- * Configuration object (PEAR_Config).
- * @var object
- */
- var $config = null;
-
- var $current_path = null;
-
- /**
- * PEAR_SourceAnalyzer instance
- * @var object
- */
- var $source_analyzer = null;
- /**
- * Flag variable used to mark a valid package file
- * @var boolean
- * @access private
- */
- var $_validPackageFile;
- /**
- * Temporary variable used in sorting packages by dependency in {@link sortPkgDeps()}
- * @var array
- * @access private
- */
- var $_packageSortTree;
-
- // }}}
-
- // {{{ constructor
-
- /**
- * PEAR_Common constructor
- *
- * @access public
- */
- function PEAR_Common()
- {
- parent::PEAR();
- $this->config = &PEAR_Config::singleton();
- $this->debug = $this->config->get('verbose');
- }
-
- // }}}
- // {{{ destructor
-
- /**
- * PEAR_Common destructor
- *
- * @access private
- */
- function _PEAR_Common()
- {
- // doesn't work due to bug #14744
- //$tempfiles = $this->_tempfiles;
- $tempfiles =& $GLOBALS['_PEAR_Common_tempfiles'];
- while ($file = array_shift($tempfiles)) {
- if (@is_dir($file)) {
- System::rm(array('-rf', $file));
- } elseif (file_exists($file)) {
- unlink($file);
- }
- }
- }
-
- // }}}
- // {{{ addTempFile()
-
- /**
- * Register a temporary file or directory. When the destructor is
- * executed, all registered temporary files and directories are
- * removed.
- *
- * @param string $file name of file or directory
- *
- * @return void
- *
- * @access public
- */
- function addTempFile($file)
- {
- $GLOBALS['_PEAR_Common_tempfiles'][] = $file;
- }
-
- // }}}
- // {{{ mkDirHier()
-
- /**
- * Wrapper to System::mkDir(), creates a directory as well as
- * any necessary parent directories.
- *
- * @param string $dir directory name
- *
- * @return bool TRUE on success, or a PEAR error
- *
- * @access public
- */
- function mkDirHier($dir)
- {
- $this->log(2, "+ create dir $dir");
- return System::mkDir(array('-p', $dir));
- }
-
- // }}}
- // {{{ log()
-
- /**
- * Logging method.
- *
- * @param int $level log level (0 is quiet, higher is noisier)
- * @param string $msg message to write to the log
- *
- * @return void
- *
- * @access public
- */
- function log($level, $msg, $append_crlf = true)
- {
- if ($this->debug >= $level) {
- if (is_object($this->ui)) {
- $this->ui->log($msg, $append_crlf);
- } else {
- print "$msg\n";
- }
- }
- }
-
- // }}}
- // {{{ mkTempDir()
-
- /**
- * Create and register a temporary directory.
- *
- * @param string $tmpdir (optional) Directory to use as tmpdir.
- * Will use system defaults (for example
- * /tmp or c:\windows\temp) if not specified
- *
- * @return string name of created directory
- *
- * @access public
- */
- function mkTempDir($tmpdir = '')
- {
- if ($tmpdir) {
- $topt = array('-t', $tmpdir);
- } else {
- $topt = array();
- }
- $topt = array_merge($topt, array('-d', 'pear'));
- if (!$tmpdir = System::mktemp($topt)) {
- return false;
- }
- $this->addTempFile($tmpdir);
- return $tmpdir;
- }
-
- // }}}
- // {{{ setFrontendObject()
-
- /**
- * Set object that represents the frontend to be used.
- *
- * @param object Reference of the frontend object
- * @return void
- * @access public
- */
- function setFrontendObject(&$ui)
- {
- $this->ui = &$ui;
- }
-
- // }}}
-
- // {{{ _unIndent()
-
- /**
- * Unindent given string (?)
- *
- * @param string $str The string that has to be unindented.
- * @return string
- * @access private
- */
- function _unIndent($str)
- {
- // remove leading newlines
- $str = preg_replace('/^[\r\n]+/', '', $str);
- // find whitespace at the beginning of the first line
- $indent_len = strspn($str, " \t");
- $indent = substr($str, 0, $indent_len);
- $data = '';
- // remove the same amount of whitespace from following lines
- foreach (explode("\n", $str) as $line) {
- if (substr($line, 0, $indent_len) == $indent) {
- $data .= substr($line, $indent_len) . "\n";
- }
- }
- return $data;
- }
-
- // }}}
- // {{{ _element_start()
-
- /**
- * XML parser callback for starting elements. Used while package
- * format version is not yet known.
- *
- * @param resource $xp XML parser resource
- * @param string $name name of starting element
- * @param array $attribs element attributes, name => value
- *
- * @return void
- *
- * @access private
- */
- function _element_start($xp, $name, $attribs)
- {
- array_push($this->element_stack, $name);
- $this->current_element = $name;
- $spos = sizeof($this->element_stack) - 2;
- $this->prev_element = ($spos >= 0) ? $this->element_stack[$spos] : '';
- $this->current_attributes = $attribs;
- switch ($name) {
- case 'package': {
- $this->_validPackageFile = true;
- if (isset($attribs['version'])) {
- $vs = preg_replace('/[^0-9a-z]/', '_', $attribs['version']);
- } else {
- $vs = '1_0';
- }
- $elem_start = '_element_start_'. $vs;
- $elem_end = '_element_end_'. $vs;
- $cdata = '_pkginfo_cdata_'. $vs;
- if (!method_exists($this, $elem_start) ||
- !method_exists($this, $elem_end) ||
- !method_exists($this, $cdata)) {
- $this->raiseError("No handlers for package.xml version $attribs[version]");
- return;
- }
- xml_set_element_handler($xp, $elem_start, $elem_end);
- xml_set_character_data_handler($xp, $cdata);
- break;
- }
- }
- }
-
- // }}}
- // {{{ _element_end()
-
- /**
- * XML parser callback for ending elements. Used while package
- * format version is not yet known.
- *
- * @param resource $xp XML parser resource
- * @param string $name name of ending element
- *
- * @return void
- *
- * @access private
- */
- function _element_end($xp, $name)
- {
- }
-
- // }}}
-
- // Support for package DTD v1.0:
- // {{{ _element_start_1_0()
-
- /**
- * XML parser callback for ending elements. Used for version 1.0
- * packages.
- *
- * @param resource $xp XML parser resource
- * @param string $name name of ending element
- *
- * @return void
- *
- * @access private
- */
- function _element_start_1_0($xp, $name, $attribs)
- {
- array_push($this->element_stack, $name);
- $this->current_element = $name;
- $spos = sizeof($this->element_stack) - 2;
- $this->prev_element = ($spos >= 0) ? $this->element_stack[$spos] : '';
- $this->current_attributes = $attribs;
- $this->cdata = '';
- switch ($name) {
- case 'dir':
- if ($this->in_changelog) {
- break;
- }
- if ($attribs['name'] != '/') {
- $this->dir_names[] = $attribs['name'];
- }
- if (isset($attribs['baseinstalldir'])) {
- $this->dir_install = $attribs['baseinstalldir'];
- }
- if (isset($attribs['role'])) {
- $this->dir_role = $attribs['role'];
- }
- break;
- case 'file':
- if ($this->in_changelog) {
- break;
- }
- if (isset($attribs['name'])) {
- $path = '';
- if (count($this->dir_names)) {
- foreach ($this->dir_names as $dir) {
- $path .= $dir . DIRECTORY_SEPARATOR;
- }
- }
- $path .= $attribs['name'];
- unset($attribs['name']);
- $this->current_path = $path;
- $this->filelist[$path] = $attribs;
- // Set the baseinstalldir only if the file don't have this attrib
- if (!isset($this->filelist[$path]['baseinstalldir']) &&
- isset($this->dir_install))
- {
- $this->filelist[$path]['baseinstalldir'] = $this->dir_install;
- }
- // Set the Role
- if (!isset($this->filelist[$path]['role']) && isset($this->dir_role)) {
- $this->filelist[$path]['role'] = $this->dir_role;
- }
- }
- break;
- case 'replace':
- if (!$this->in_changelog) {
- $this->filelist[$this->current_path]['replacements'][] = $attribs;
- }
- break;
- case 'maintainers':
- $this->pkginfo['maintainers'] = array();
- $this->m_i = 0; // maintainers array index
- break;
- case 'maintainer':
- // compatibility check
- if (!isset($this->pkginfo['maintainers'])) {
- $this->pkginfo['maintainers'] = array();
- $this->m_i = 0;
- }
- $this->pkginfo['maintainers'][$this->m_i] = array();
- $this->current_maintainer =& $this->pkginfo['maintainers'][$this->m_i];
- break;
- case 'changelog':
- $this->pkginfo['changelog'] = array();
- $this->c_i = 0; // changelog array index
- $this->in_changelog = true;
- break;
- case 'release':
- if ($this->in_changelog) {
- $this->pkginfo['changelog'][$this->c_i] = array();
- $this->current_release = &$this->pkginfo['changelog'][$this->c_i];
- } else {
- $this->current_release = &$this->pkginfo;
- }
- break;
- case 'deps':
- if (!$this->in_changelog) {
- $this->pkginfo['release_deps'] = array();
- }
- break;
- case 'dep':
- // dependencies array index
- if (!$this->in_changelog) {
- $this->d_i++;
- $this->pkginfo['release_deps'][$this->d_i] = $attribs;
- }
- break;
- case 'configureoptions':
- if (!$this->in_changelog) {
- $this->pkginfo['configure_options'] = array();
- }
- break;
- case 'configureoption':
- if (!$this->in_changelog) {
- $this->pkginfo['configure_options'][] = $attribs;
- }
- break;
- case 'provides':
- if (empty($attribs['type']) || empty($attribs['name'])) {
- break;
- }
- $attribs['explicit'] = true;
- $this->pkginfo['provides']["$attribs[type];$attribs[name]"] = $attribs;
- break;
- }
- }
-
- // }}}
- // {{{ _element_end_1_0()
-
- /**
- * XML parser callback for ending elements. Used for version 1.0
- * packages.
- *
- * @param resource $xp XML parser resource
- * @param string $name name of ending element
- *
- * @return void
- *
- * @access private
- */
- function _element_end_1_0($xp, $name)
- {
- $data = trim($this->cdata);
- switch ($name) {
- case 'name':
- switch ($this->prev_element) {
- case 'package':
- // XXX should we check the package name here?
- $this->pkginfo['package'] = ereg_replace('[^a-zA-Z0-9._]', '_', $data);
- break;
- case 'maintainer':
- $this->current_maintainer['name'] = $data;
- break;
- }
- break;
- case 'summary':
- $this->pkginfo['summary'] = $data;
- break;
- case 'description':
- $data = $this->_unIndent($this->cdata);
- $this->pkginfo['description'] = $data;
- break;
- case 'user':
- $this->current_maintainer['handle'] = $data;
- break;
- case 'email':
- $this->current_maintainer['email'] = $data;
- break;
- case 'role':
- $this->current_maintainer['role'] = $data;
- break;
- case 'version':
- $data = ereg_replace ('[^a-zA-Z0-9._\-]', '_', $data);
- if ($this->in_changelog) {
- $this->current_release['version'] = $data;
- } else {
- $this->pkginfo['version'] = $data;
- }
- break;
- case 'date':
- if ($this->in_changelog) {
- $this->current_release['release_date'] = $data;
- } else {
- $this->pkginfo['release_date'] = $data;
- }
- break;
- case 'notes':
- // try to "de-indent" release notes in case someone
- // has been over-indenting their xml ;-)
- $data = $this->_unIndent($this->cdata);
- if ($this->in_changelog) {
- $this->current_release['release_notes'] = $data;
- } else {
- $this->pkginfo['release_notes'] = $data;
- }
- break;
- case 'warnings':
- if ($this->in_changelog) {
- $this->current_release['release_warnings'] = $data;
- } else {
- $this->pkginfo['release_warnings'] = $data;
- }
- break;
- case 'state':
- if ($this->in_changelog) {
- $this->current_release['release_state'] = $data;
- } else {
- $this->pkginfo['release_state'] = $data;
- }
- break;
- case 'license':
- if ($this->in_changelog) {
- $this->current_release['release_license'] = $data;
- } else {
- $this->pkginfo['release_license'] = $data;
- }
- break;
- case 'dep':
- if ($data && !$this->in_changelog) {
- $this->pkginfo['release_deps'][$this->d_i]['name'] = $data;
- }
- break;
- case 'dir':
- if ($this->in_changelog) {
- break;
- }
- array_pop($this->dir_names);
- break;
- case 'file':
- if ($this->in_changelog) {
- break;
- }
- if ($data) {
- $path = '';
- if (count($this->dir_names)) {
- foreach ($this->dir_names as $dir) {
- $path .= $dir . DIRECTORY_SEPARATOR;
- }
- }
- $path .= $data;
- $this->filelist[$path] = $this->current_attributes;
- // Set the baseinstalldir only if the file don't have this attrib
- if (!isset($this->filelist[$path]['baseinstalldir']) &&
- isset($this->dir_install))
- {
- $this->filelist[$path]['baseinstalldir'] = $this->dir_install;
- }
- // Set the Role
- if (!isset($this->filelist[$path]['role']) && isset($this->dir_role)) {
- $this->filelist[$path]['role'] = $this->dir_role;
- }
- }
- break;
- case 'maintainer':
- if (empty($this->pkginfo['maintainers'][$this->m_i]['role'])) {
- $this->pkginfo['maintainers'][$this->m_i]['role'] = 'lead';
- }
- $this->m_i++;
- break;
- case 'release':
- if ($this->in_changelog) {
- $this->c_i++;
- }
- break;
- case 'changelog':
- $this->in_changelog = false;
- break;
- }
- array_pop($this->element_stack);
- $spos = sizeof($this->element_stack) - 1;
- $this->current_element = ($spos > 0) ? $this->element_stack[$spos] : '';
- $this->cdata = '';
- }
-
- // }}}
- // {{{ _pkginfo_cdata_1_0()
-
- /**
- * XML parser callback for character data. Used for version 1.0
- * packages.
- *
- * @param resource $xp XML parser resource
- * @param string $name character data
- *
- * @return void
- *
- * @access private
- */
- function _pkginfo_cdata_1_0($xp, $data)
- {
- if (isset($this->cdata)) {
- $this->cdata .= $data;
- }
- }
-
- // }}}
-
- // {{{ infoFromTgzFile()
-
- /**
- * Returns information about a package file. Expects the name of
- * a gzipped tar file as input.
- *
- * @param string $file name of .tgz file
- *
- * @return array array with package information
- *
- * @access public
- *
- */
- function infoFromTgzFile($file)
- {
- if (!@is_file($file)) {
- return $this->raiseError("could not open file \"$file\"");
- }
- $tar = new Archive_Tar($file);
- if ($this->debug <= 1) {
- $tar->pushErrorHandling(PEAR_ERROR_RETURN);
- }
- $content = $tar->listContent();
- if ($this->debug <= 1) {
- $tar->popErrorHandling();
- }
- if (!is_array($content)) {
- $file = realpath($file);
- return $this->raiseError("Could not get contents of package \"$file\"".
- '. Invalid tgz file.');
- }
- $xml = null;
- foreach ($content as $file) {
- $name = $file['filename'];
- if ($name == 'package.xml') {
- $xml = $name;
- break;
- } elseif (ereg('package.xml$', $name, $match)) {
- $xml = $match[0];
- break;
- }
- }
- $tmpdir = System::mkTemp(array('-d', 'pear'));
- $this->addTempFile($tmpdir);
- if (!$xml || !$tar->extractList(array($xml), $tmpdir)) {
- return $this->raiseError('could not extract the package.xml file');
- }
- return $this->infoFromDescriptionFile("$tmpdir/$xml");
- }
-
- // }}}
- // {{{ infoFromDescriptionFile()
-
- /**
- * Returns information about a package file. Expects the name of
- * a package xml file as input.
- *
- * @param string $descfile name of package xml file
- *
- * @return array array with package information
- *
- * @access public
- *
- */
- function infoFromDescriptionFile($descfile)
- {
- if (!@is_file($descfile) || !is_readable($descfile) ||
- (!$fp = @fopen($descfile, 'r'))) {
- return $this->raiseError("Unable to open $descfile");
- }
-
- // read the whole thing so we only get one cdata callback
- // for each block of cdata
- $data = fread($fp, filesize($descfile));
- return $this->infoFromString($data);
- }
-
- // }}}
- // {{{ infoFromString()
-
- /**
- * Returns information about a package file. Expects the contents
- * of a package xml file as input.
- *
- * @param string $data name of package xml file
- *
- * @return array array with package information
- *
- * @access public
- *
- */
- function infoFromString($data)
- {
- require_once('PEAR/Dependency.php');
- if (PEAR_Dependency::checkExtension($error, 'xml')) {
- return $this->raiseError($error);
- }
- $xp = @xml_parser_create();
- if (!$xp) {
- return $this->raiseError('Unable to create XML parser');
- }
- xml_set_object($xp, $this);
- xml_set_element_handler($xp, '_element_start', '_element_end');
- xml_set_character_data_handler($xp, '_pkginfo_cdata');
- xml_parser_set_option($xp, XML_OPTION_CASE_FOLDING, false);
-
- $this->element_stack = array();
- $this->pkginfo = array('provides' => array());
- $this->current_element = false;
- unset($this->dir_install);
- $this->pkginfo['filelist'] = array();
- $this->filelist =& $this->pkginfo['filelist'];
- $this->dir_names = array();
- $this->in_changelog = false;
- $this->d_i = 0;
- $this->cdata = '';
- $this->_validPackageFile = false;
-
- if (!xml_parse($xp, $data, 1)) {
- $code = xml_get_error_code($xp);
- $msg = sprintf("XML error: %s at line %d",
- xml_error_string($code),
- xml_get_current_line_number($xp));
- xml_parser_free($xp);
- return $this->raiseError($msg, $code);
- }
-
- xml_parser_free($xp);
-
- if (!$this->_validPackageFile) {
- return $this->raiseError('Invalid Package File, no <package> tag');
- }
- foreach ($this->pkginfo as $k => $v) {
- if (!is_array($v)) {
- $this->pkginfo[$k] = trim($v);
- }
- }
- return $this->pkginfo;
- }
- // }}}
- // {{{ infoFromAny()
-
- /**
- * Returns package information from different sources
- *
- * This method is able to extract information about a package
- * from a .tgz archive or from a XML package definition file.
- *
- * @access public
- * @param string Filename of the source ('package.xml', '<package>.tgz')
- * @return string
- */
- function infoFromAny($info)
- {
- if (is_string($info) && file_exists($info)) {
- $tmp = substr($info, -4);
- if ($tmp == '.xml') {
- $info = $this->infoFromDescriptionFile($info);
- } elseif ($tmp == '.tar' || $tmp == '.tgz') {
- $info = $this->infoFromTgzFile($info);
- } else {
- $fp = fopen($info, "r");
- $test = fread($fp, 5);
- fclose($fp);
- if ($test == "<?xml") {
- $info = $this->infoFromDescriptionFile($info);
- } else {
- $info = $this->infoFromTgzFile($info);
- }
- }
- if (PEAR::isError($info)) {
- return $this->raiseError($info);
- }
- }
- return $info;
- }
-
- // }}}
- // {{{ xmlFromInfo()
-
- /**
- * Return an XML document based on the package info (as returned
- * by the PEAR_Common::infoFrom* methods).
- *
- * @param array $pkginfo package info
- *
- * @return string XML data
- *
- * @access public
- */
- function xmlFromInfo($pkginfo)
- {
- static $maint_map = array(
- "handle" => "user",
- "name" => "name",
- "email" => "email",
- "role" => "role",
- );
- $ret = "<?xml version=\"1.0\" encoding=\"ISO-8859-1\" ?>\n";
- $ret .= "<!DOCTYPE package SYSTEM \"http://pear.php.net/dtd/package-1.0\">\n";
- $ret .= "<package version=\"1.0\">
- <name>$pkginfo[package]</name>
- <summary>".htmlspecialchars($pkginfo['summary'])."</summary>
- <description>".htmlspecialchars($pkginfo['description'])."</description>
- <maintainers>
-";
- foreach ($pkginfo['maintainers'] as $maint) {
- $ret .= " <maintainer>\n";
- foreach ($maint_map as $idx => $elm) {
- $ret .= " <$elm>";
- $ret .= htmlspecialchars($maint[$idx]);
- $ret .= "</$elm>\n";
- }
- $ret .= " </maintainer>\n";
- }
- $ret .= " </maintainers>\n";
- $ret .= $this->_makeReleaseXml($pkginfo);
- if (@sizeof($pkginfo['changelog']) > 0) {
- $ret .= " <changelog>\n";
- foreach ($pkginfo['changelog'] as $oldrelease) {
- $ret .= $this->_makeReleaseXml($oldrelease, true);
- }
- $ret .= " </changelog>\n";
- }
- $ret .= "</package>\n";
- return $ret;
- }
-
- // }}}
- // {{{ _makeReleaseXml()
-
- /**
- * Generate part of an XML description with release information.
- *
- * @param array $pkginfo array with release information
- * @param bool $changelog whether the result will be in a changelog element
- *
- * @return string XML data
- *
- * @access private
- */
- function _makeReleaseXml($pkginfo, $changelog = false)
- {
- // XXX QUOTE ENTITIES IN PCDATA, OR EMBED IN CDATA BLOCKS!!
- $indent = $changelog ? " " : "";
- $ret = "$indent <release>\n";
- if (!empty($pkginfo['version'])) {
- $ret .= "$indent <version>$pkginfo[version]</version>\n";
- }
- if (!empty($pkginfo['release_date'])) {
- $ret .= "$indent <date>$pkginfo[release_date]</date>\n";
- }
- if (!empty($pkginfo['release_license'])) {
- $ret .= "$indent <license>$pkginfo[release_license]</license>\n";
- }
- if (!empty($pkginfo['release_state'])) {
- $ret .= "$indent <state>$pkginfo[release_state]</state>\n";
- }
- if (!empty($pkginfo['release_notes'])) {
- $ret .= "$indent <notes>".htmlspecialchars($pkginfo['release_notes'])."</notes>\n";
- }
- if (!empty($pkginfo['release_warnings'])) {
- $ret .= "$indent <warnings>".htmlspecialchars($pkginfo['release_warnings'])."</warnings>\n";
- }
- if (isset($pkginfo['release_deps']) && sizeof($pkginfo['release_deps']) > 0) {
- $ret .= "$indent <deps>\n";
- foreach ($pkginfo['release_deps'] as $dep) {
- $ret .= "$indent <dep type=\"$dep[type]\" rel=\"$dep[rel]\"";
- if (isset($dep['version'])) {
- $ret .= " version=\"$dep[version]\"";
- }
- if (isset($dep['optional'])) {
- $ret .= " optional=\"$dep[optional]\"";
- }
- if (isset($dep['name'])) {
- $ret .= ">$dep[name]</dep>\n";
- } else {
- $ret .= "/>\n";
- }
- }
- $ret .= "$indent </deps>\n";
- }
- if (isset($pkginfo['configure_options'])) {
- $ret .= "$indent <configureoptions>\n";
- foreach ($pkginfo['configure_options'] as $c) {
- $ret .= "$indent <configureoption name=\"".
- htmlspecialchars($c['name']) . "\"";
- if (isset($c['default'])) {
- $ret .= " default=\"" . htmlspecialchars($c['default']) . "\"";
- }
- $ret .= " prompt=\"" . htmlspecialchars($c['prompt']) . "\"";
- $ret .= "/>\n";
- }
- $ret .= "$indent </configureoptions>\n";
- }
- if (isset($pkginfo['provides'])) {
- foreach ($pkginfo['provides'] as $key => $what) {
- $ret .= "$indent <provides type=\"$what[type]\" ";
- $ret .= "name=\"$what[name]\" ";
- if (isset($what['extends'])) {
- $ret .= "extends=\"$what[extends]\" ";
- }
- $ret .= "/>\n";
- }
- }
- if (isset($pkginfo['filelist'])) {
- $ret .= "$indent <filelist>\n";
- foreach ($pkginfo['filelist'] as $file => $fa) {
- @$ret .= "$indent <file role=\"$fa[role]\"";
- if (isset($fa['baseinstalldir'])) {
- $ret .= ' baseinstalldir="' .
- htmlspecialchars($fa['baseinstalldir']) . '"';
- }
- if (isset($fa['md5sum'])) {
- $ret .= " md5sum=\"$fa[md5sum]\"";
- }
- if (isset($fa['platform'])) {
- $ret .= " platform=\"$fa[platform]\"";
- }
- if (!empty($fa['install-as'])) {
- $ret .= ' install-as="' .
- htmlspecialchars($fa['install-as']) . '"';
- }
- $ret .= ' name="' . htmlspecialchars($file) . '"';
- if (empty($fa['replacements'])) {
- $ret .= "/>\n";
- } else {
- $ret .= ">\n";
- foreach ($fa['replacements'] as $r) {
- $ret .= "$indent <replace";
- foreach ($r as $k => $v) {
- $ret .= " $k=\"" . htmlspecialchars($v) .'"';
- }
- $ret .= "/>\n";
- }
- @$ret .= "$indent </file>\n";
- }
- }
- $ret .= "$indent </filelist>\n";
- }
- $ret .= "$indent </release>\n";
- return $ret;
- }
-
- // }}}
- // {{{ validatePackageInfo()
-
- /**
- * Validate XML package definition file.
- *
- * @param string $info Filename of the package archive or of the
- * package definition file
- * @param array $errors Array that will contain the errors
- * @param array $warnings Array that will contain the warnings
- * @param string $dir_prefix (optional) directory where source files
- * may be found, or empty if they are not available
- * @access public
- * @return boolean
- */
- function validatePackageInfo($info, &$errors, &$warnings, $dir_prefix = '')
- {
- if (PEAR::isError($info = $this->infoFromAny($info))) {
- return $this->raiseError($info);
- }
- if (!is_array($info)) {
- return false;
- }
-
- $errors = array();
- $warnings = array();
- if (!isset($info['package'])) {
- $errors[] = 'missing package name';
- } elseif (!$this->validPackageName($info['package'])) {
- $errors[] = 'invalid package name';
- }
- $this->_packageName = $pn = $info['package'];
-
- if (empty($info['summary'])) {
- $errors[] = 'missing summary';
- } elseif (strpos(trim($info['summary']), "\n") !== false) {
- $warnings[] = 'summary should be on a single line';
- }
- if (empty($info['description'])) {
- $errors[] = 'missing description';
- }
- if (empty($info['release_license'])) {
- $errors[] = 'missing license';
- }
- if (!isset($info['version'])) {
- $errors[] = 'missing version';
- } elseif (!$this->validPackageVersion($info['version'])) {
- $errors[] = 'invalid package release version';
- }
- if (empty($info['release_state'])) {
- $errors[] = 'missing release state';
- } elseif (!in_array($info['release_state'], PEAR_Common::getReleaseStates())) {
- $errors[] = "invalid release state `$info[release_state]', should be one of: "
- . implode(' ', PEAR_Common::getReleaseStates());
- }
- if (empty($info['release_date'])) {
- $errors[] = 'missing release date';
- } elseif (!preg_match('/^\d{4}-\d\d-\d\d$/', $info['release_date'])) {
- $errors[] = "invalid release date `$info[release_date]', format is YYYY-MM-DD";
- }
- if (empty($info['release_notes'])) {
- $errors[] = "missing release notes";
- }
- if (empty($info['maintainers'])) {
- $errors[] = 'no maintainer(s)';
- } else {
- $i = 1;
- foreach ($info['maintainers'] as $m) {
- if (empty($m['handle'])) {
- $errors[] = "maintainer $i: missing handle";
- }
- if (empty($m['role'])) {
- $errors[] = "maintainer $i: missing role";
- } elseif (!in_array($m['role'], PEAR_Common::getUserRoles())) {
- $errors[] = "maintainer $i: invalid role `$m[role]', should be one of: "
- . implode(' ', PEAR_Common::getUserRoles());
- }
- if (empty($m['name'])) {
- $errors[] = "maintainer $i: missing name";
- }
- if (empty($m['email'])) {
- $errors[] = "maintainer $i: missing email";
- }
- $i++;
- }
- }
- if (!empty($info['release_deps'])) {
- $i = 1;
- foreach ($info['release_deps'] as $d) {
- if (empty($d['type'])) {
- $errors[] = "dependency $i: missing type";
- } elseif (!in_array($d['type'], PEAR_Common::getDependencyTypes())) {
- $errors[] = "dependency $i: invalid type '$d[type]', should be one of: " .
- implode(' ', PEAR_Common::getDependencyTypes());
- }
- if (empty($d['rel'])) {
- $errors[] = "dependency $i: missing relation";
- } elseif (!in_array($d['rel'], PEAR_Common::getDependencyRelations())) {
- $errors[] = "dependency $i: invalid relation '$d[rel]', should be one of: "
- . implode(' ', PEAR_Common::getDependencyRelations());
- }
- if (!empty($d['optional'])) {
- if (!in_array($d['optional'], array('yes', 'no'))) {
- $errors[] = "dependency $i: invalid relation optional attribute '$d[optional]', should be one of: yes no";
- }
- }
- if ($d['rel'] != 'has' && empty($d['version'])) {
- $warnings[] = "dependency $i: missing version";
- } elseif ($d['rel'] == 'has' && !empty($d['version'])) {
- $warnings[] = "dependency $i: version ignored for `has' dependencies";
- }
- if ($d['type'] == 'php' && !empty($d['name'])) {
- $warnings[] = "dependency $i: name ignored for php type dependencies";
- } elseif ($d['type'] != 'php' && empty($d['name'])) {
- $errors[] = "dependency $i: missing name";
- }
- $i++;
- }
- }
- if (!empty($info['configure_options'])) {
- $i = 1;
- foreach ($info['configure_options'] as $c) {
- if (empty($c['name'])) {
- $errors[] = "configure option $i: missing name";
- }
- if (empty($c['prompt'])) {
- $errors[] = "configure option $i: missing prompt";
- }
- $i++;
- }
- }
- if (empty($info['filelist'])) {
- $errors[] = 'no files';
- } else {
- foreach ($info['filelist'] as $file => $fa) {
- if (empty($fa['role'])) {
- $errors[] = "file $file: missing role";
- continue;
- } elseif (!in_array($fa['role'], PEAR_Common::getFileRoles())) {
- $errors[] = "file $file: invalid role, should be one of: "
- . implode(' ', PEAR_Common::getFileRoles());
- }
- if ($fa['role'] == 'php' && $dir_prefix) {
- $this->log(1, "Analyzing $file");
- $srcinfo = $this->analyzeSourceCode($dir_prefix . DIRECTORY_SEPARATOR . $file);
- if ($srcinfo) {
- $this->buildProvidesArray($srcinfo);
- }
- }
-
- // (ssb) Any checks we can do for baseinstalldir?
- // (cox) Perhaps checks that either the target dir and
- // baseInstall doesn't cointain "../../"
- }
- }
- $this->_packageName = $pn = $info['package'];
- $pnl = strlen($pn);
- foreach ((array)$this->pkginfo['provides'] as $key => $what) {
- if (isset($what['explicit'])) {
- // skip conformance checks if the provides entry is
- // specified in the package.xml file
- continue;
- }
- extract($what);
- if ($type == 'class') {
- if (!strncasecmp($name, $pn, $pnl)) {
- continue;
- }
- $warnings[] = "in $file: class \"$name\" not prefixed with package name \"$pn\"";
- } elseif ($type == 'function') {
- if (strstr($name, '::') || !strncasecmp($name, $pn, $pnl)) {
- continue;
- }
- $warnings[] = "in $file: function \"$name\" not prefixed with package name \"$pn\"";
- }
- }
-
-
- return true;
- }
-
- // }}}
- // {{{ buildProvidesArray()
-
- /**
- * Build a "provides" array from data returned by
- * analyzeSourceCode(). The format of the built array is like
- * this:
- *
- * array(
- * 'class;MyClass' => 'array('type' => 'class', 'name' => 'MyClass'),
- * ...
- * )
- *
- *
- * @param array $srcinfo array with information about a source file
- * as returned by the analyzeSourceCode() method.
- *
- * @return void
- *
- * @access public
- *
- */
- function buildProvidesArray($srcinfo)
- {
- $file = basename($srcinfo['source_file']);
- $pn = '';
- if (isset($this->_packageName)) {
- $pn = $this->_packageName;
- }
- $pnl = strlen($pn);
- foreach ($srcinfo['declared_classes'] as $class) {
- $key = "class;$class";
- if (isset($this->pkginfo['provides'][$key])) {
- continue;
- }
- $this->pkginfo['provides'][$key] =
- array('file'=> $file, 'type' => 'class', 'name' => $class);
- if (isset($srcinfo['inheritance'][$class])) {
- $this->pkginfo['provides'][$key]['extends'] =
- $srcinfo['inheritance'][$class];
- }
- }
- foreach ($srcinfo['declared_methods'] as $class => $methods) {
- foreach ($methods as $method) {
- $function = "$class::$method";
- $key = "function;$function";
- if ($method{0} == '_' || !strcasecmp($method, $class) ||
- isset($this->pkginfo['provides'][$key])) {
- continue;
- }
- $this->pkginfo['provides'][$key] =
- array('file'=> $file, 'type' => 'function', 'name' => $function);
- }
- }
-
- foreach ($srcinfo['declared_functions'] as $function) {
- $key = "function;$function";
- if ($function{0} == '_' || isset($this->pkginfo['provides'][$key])) {
- continue;
- }
- if (!strstr($function, '::') && strncasecmp($function, $pn, $pnl)) {
- $warnings[] = "in1 " . $file . ": function \"$function\" not prefixed with package name \"$pn\"";
- }
- $this->pkginfo['provides'][$key] =
- array('file'=> $file, 'type' => 'function', 'name' => $function);
- }
- }
-
- // }}}
- // {{{ analyzeSourceCode()
-
- /**
- * Analyze the source code of the given PHP file
- *
- * @param string Filename of the PHP file
- * @return mixed
- * @access public
- */
- function analyzeSourceCode($file)
- {
- if (!function_exists("token_get_all")) {
- return false;
- }
- if (!$fp = @fopen($file, "r")) {
- return false;
- }
- $contents = fread($fp, filesize($file));
- $tokens = token_get_all($contents);
-/*
- for ($i = 0; $i < sizeof($tokens); $i++) {
- @list($token, $data) = $tokens[$i];
- if (is_string($token)) {
- var_dump($token);
- } else {
- print token_name($token) . ' ';
- var_dump(rtrim($data));
- }
- }
-*/
- $look_for = 0;
- $paren_level = 0;
- $bracket_level = 0;
- $brace_level = 0;
- $lastphpdoc = '';
- $current_class = '';
- $current_class_level = -1;
- $current_function = '';
- $current_function_level = -1;
- $declared_classes = array();
- $declared_functions = array();
- $declared_methods = array();
- $used_classes = array();
- $used_functions = array();
- $extends = array();
- $nodeps = array();
- $inquote = false;
- for ($i = 0; $i < sizeof($tokens); $i++) {
- if (is_array($tokens[$i])) {
- list($token, $data) = $tokens[$i];
- } else {
- $token = $tokens[$i];
- $data = '';
- }
- if ($inquote) {
- if ($token != '"') {
- continue;
- } else {
- $inquote = false;
- }
- }
- switch ($token) {
- case '"':
- $inquote = true;
- break;
- case T_CURLY_OPEN:
- case T_DOLLAR_OPEN_CURLY_BRACES:
- case '{': $brace_level++; continue 2;
- case '}':
- $brace_level--;
- if ($current_class_level == $brace_level) {
- $current_class = '';
- $current_class_level = -1;
- }
- if ($current_function_level == $brace_level) {
- $current_function = '';
- $current_function_level = -1;
- }
- continue 2;
- case '[': $bracket_level++; continue 2;
- case ']': $bracket_level--; continue 2;
- case '(': $paren_level++; continue 2;
- case ')': $paren_level--; continue 2;
- case T_CLASS:
- if (($current_class_level != -1) || ($current_function_level != -1)) {
- PEAR::raiseError("Parser error: Invalid PHP file $file",
- PEAR_COMMON_ERROR_INVALIDPHP);
- return false;
- }
- case T_FUNCTION:
- case T_NEW:
- case T_EXTENDS:
- $look_for = $token;
- continue 2;
- case T_STRING:
- if ($look_for == T_CLASS) {
- $current_class = $data;
- $current_class_level = $brace_level;
- $declared_classes[] = $current_class;
- } elseif ($look_for == T_EXTENDS) {
- $extends[$current_class] = $data;
- } elseif ($look_for == T_FUNCTION) {
- if ($current_class) {
- $current_function = "$current_class::$data";
- $declared_methods[$current_class][] = $data;
- } else {
- $current_function = $data;
- $declared_functions[] = $current_function;
- }
- $current_function_level = $brace_level;
- $m = array();
- } elseif ($look_for == T_NEW) {
- $used_classes[$data] = true;
- }
- $look_for = 0;
- continue 2;
- case T_VARIABLE:
- $look_for = 0;
- continue 2;
- case T_COMMENT:
- if (preg_match('!^/\*\*\s!', $data)) {
- $lastphpdoc = $data;
- if (preg_match_all('/@nodep\s+(\S+)/', $lastphpdoc, $m)) {
- $nodeps = array_merge($nodeps, $m[1]);
- }
- }
- continue 2;
- case T_DOUBLE_COLON:
- if (!($tokens[$i - 1][0] == T_WHITESPACE || $tokens[$i - 1][0] == T_STRING)) {
- PEAR::raiseError("Parser error: Invalid PHP file $file",
- PEAR_COMMON_ERROR_INVALIDPHP);
- return false;
- }
- $class = $tokens[$i - 1][1];
- if (strtolower($class) != 'parent') {
- $used_classes[$class] = true;
- }
- continue 2;
- }
- }
- return array(
- "source_file" => $file,
- "declared_classes" => $declared_classes,
- "declared_methods" => $declared_methods,
- "declared_functions" => $declared_functions,
- "used_classes" => array_diff(array_keys($used_classes), $nodeps),
- "inheritance" => $extends,
- );
- }
-
- // }}}
- // {{{ betterStates()
-
- /**
- * Return an array containing all of the states that are more stable than
- * or equal to the passed in state
- *
- * @param string Release state
- * @param boolean Determines whether to include $state in the list
- * @return false|array False if $state is not a valid release state
- */
- function betterStates($state, $include = false)
- {
- static $states = array('snapshot', 'devel', 'alpha', 'beta', 'stable');
- $i = array_search($state, $states);
- if ($i === false) {
- return false;
- }
- if ($include) {
- $i--;
- }
- return array_slice($states, $i + 1);
- }
-
- // }}}
- // {{{ detectDependencies()
-
- function detectDependencies($any, $status_callback = null)
- {
- if (!function_exists("token_get_all")) {
- return false;
- }
- if (PEAR::isError($info = $this->infoFromAny($any))) {
- return $this->raiseError($info);
- }
- if (!is_array($info)) {
- return false;
- }
- $deps = array();
- $used_c = $decl_c = $decl_f = $decl_m = array();
- foreach ($info['filelist'] as $file => $fa) {
- $tmp = $this->analyzeSourceCode($file);
- $used_c = @array_merge($used_c, $tmp['used_classes']);
- $decl_c = @array_merge($decl_c, $tmp['declared_classes']);
- $decl_f = @array_merge($decl_f, $tmp['declared_functions']);
- $decl_m = @array_merge($decl_m, $tmp['declared_methods']);
- $inheri = @array_merge($inheri, $tmp['inheritance']);
- }
- $used_c = array_unique($used_c);
- $decl_c = array_unique($decl_c);
- $undecl_c = array_diff($used_c, $decl_c);
- return array('used_classes' => $used_c,
- 'declared_classes' => $decl_c,
- 'declared_methods' => $decl_m,
- 'declared_functions' => $decl_f,
- 'undeclared_classes' => $undecl_c,
- 'inheritance' => $inheri,
- );
- }
-
- // }}}
- // {{{ getUserRoles()
-
- /**
- * Get the valid roles for a PEAR package maintainer
- *
- * @return array
- * @static
- */
- function getUserRoles()
- {
- return $GLOBALS['_PEAR_Common_maintainer_roles'];
- }
-
- // }}}
- // {{{ getReleaseStates()
-
- /**
- * Get the valid package release states of packages
- *
- * @return array
- * @static
- */
- function getReleaseStates()
- {
- return $GLOBALS['_PEAR_Common_release_states'];
- }
-
- // }}}
- // {{{ getDependencyTypes()
-
- /**
- * Get the implemented dependency types (php, ext, pkg etc.)
- *
- * @return array
- * @static
- */
- function getDependencyTypes()
- {
- return $GLOBALS['_PEAR_Common_dependency_types'];
- }
-
- // }}}
- // {{{ getDependencyRelations()
-
- /**
- * Get the implemented dependency relations (has, lt, ge etc.)
- *
- * @return array
- * @static
- */
- function getDependencyRelations()
- {
- return $GLOBALS['_PEAR_Common_dependency_relations'];
- }
-
- // }}}
- // {{{ getFileRoles()
-
- /**
- * Get the implemented file roles
- *
- * @return array
- * @static
- */
- function getFileRoles()
- {
- return $GLOBALS['_PEAR_Common_file_roles'];
- }
-
- // }}}
- // {{{ getReplacementTypes()
-
- /**
- * Get the implemented file replacement types in
- *
- * @return array
- * @static
- */
- function getReplacementTypes()
- {
- return $GLOBALS['_PEAR_Common_replacement_types'];
- }
-
- // }}}
- // {{{ getProvideTypes()
-
- /**
- * Get the implemented file replacement types in
- *
- * @return array
- * @static
- */
- function getProvideTypes()
- {
- return $GLOBALS['_PEAR_Common_provide_types'];
- }
-
- // }}}
- // {{{ getScriptPhases()
-
- /**
- * Get the implemented file replacement types in
- *
- * @return array
- * @static
- */
- function getScriptPhases()
- {
- return $GLOBALS['_PEAR_Common_script_phases'];
- }
-
- // }}}
- // {{{ validPackageName()
-
- /**
- * Test whether a string contains a valid package name.
- *
- * @param string $name the package name to test
- *
- * @return bool
- *
- * @access public
- */
- function validPackageName($name)
- {
- return (bool)preg_match(PEAR_COMMON_PACKAGE_NAME_PREG, $name);
- }
-
-
- // }}}
- // {{{ validPackageVersion()
-
- /**
- * Test whether a string contains a valid package version.
- *
- * @param string $ver the package version to test
- *
- * @return bool
- *
- * @access public
- */
- function validPackageVersion($ver)
- {
- return (bool)preg_match(PEAR_COMMON_PACKAGE_VERSION_PREG, $ver);
- }
-
-
- // }}}
-
- // {{{ downloadHttp()
-
- /**
- * Download a file through HTTP. Considers suggested file name in
- * Content-disposition: header and can run a callback function for
- * different events. The callback will be called with two
- * parameters: the callback type, and parameters. The implemented
- * callback types are:
- *
- * 'setup' called at the very beginning, parameter is a UI object
- * that should be used for all output
- * 'message' the parameter is a string with an informational message
- * 'saveas' may be used to save with a different file name, the
- * parameter is the filename that is about to be used.
- * If a 'saveas' callback returns a non-empty string,
- * that file name will be used as the filename instead.
- * Note that $save_dir will not be affected by this, only
- * the basename of the file.
- * 'start' download is starting, parameter is number of bytes
- * that are expected, or -1 if unknown
- * 'bytesread' parameter is the number of bytes read so far
- * 'done' download is complete, parameter is the total number
- * of bytes read
- * 'connfailed' if the TCP connection fails, this callback is called
- * with array(host,port,errno,errmsg)
- * 'writefailed' if writing to disk fails, this callback is called
- * with array(destfile,errmsg)
- *
- * If an HTTP proxy has been configured (http_proxy PEAR_Config
- * setting), the proxy will be used.
- *
- * @param string $url the URL to download
- * @param object $ui PEAR_Frontend_* instance
- * @param object $config PEAR_Config instance
- * @param string $save_dir (optional) directory to save file in
- * @param mixed $callback (optional) function/method to call for status
- * updates
- *
- * @return string Returns the full path of the downloaded file or a PEAR
- * error on failure. If the error is caused by
- * socket-related errors, the error object will
- * have the fsockopen error code available through
- * getCode().
- *
- * @access public
- */
- function downloadHttp($url, &$ui, $save_dir = '.', $callback = null)
- {
- if ($callback) {
- call_user_func($callback, 'setup', array(&$ui));
- }
- if (preg_match('!^http://([^/:?#]*)(:(\d+))?(/.*)!', $url, $matches)) {
- list(,$host,,$port,$path) = $matches;
- }
- if (isset($this)) {
- $config = &$this->config;
- } else {
- $config = &PEAR_Config::singleton();
- }
- $proxy_host = $proxy_port = $proxy_user = $proxy_pass = '';
- if ($proxy = parse_url($config->get('http_proxy'))) {
- $proxy_host = @$proxy['host'];
- $proxy_port = @$proxy['port'];
- $proxy_user = @$proxy['user'];
- $proxy_pass = @$proxy['pass'];
-
- if ($proxy_port == '') {
- $proxy_port = 8080;
- }
- if ($callback) {
- call_user_func($callback, 'message', "Using HTTP proxy $host:$port");
- }
- }
- if (empty($port)) {
- $port = 80;
- }
- if ($proxy_host != '') {
- $fp = @fsockopen($proxy_host, $proxy_port, $errno, $errstr);
- if (!$fp) {
- if ($callback) {
- call_user_func($callback, 'connfailed', array($proxy_host, $proxy_port,
- $errno, $errstr));
- }
- return PEAR::raiseError("Connection to `$proxy_host:$proxy_port' failed: $errstr", $errno);
- }
- $request = "GET $url HTTP/1.0\r\n";
- } else {
- $fp = @fsockopen($host, $port, $errno, $errstr);
- if (!$fp) {
- if ($callback) {
- call_user_func($callback, 'connfailed', array($host, $port,
- $errno, $errstr));
- }
- return PEAR::raiseError("Connection to `$host:$port' failed: $errstr", $errno);
- }
- $request = "GET $path HTTP/1.0\r\n";
- }
- $request .= "Host: $host:$port\r\n".
- "User-Agent: PHP/".PHP_VERSION."\r\n";
- if ($proxy_host != '' && $proxy_user != '') {
- $request .= 'Proxy-Authorization: Basic ' .
- base64_encode($proxy_user . ':' . $proxy_pass) . "\r\n";
- }
- $request .= "\r\n";
- fwrite($fp, $request);
- $headers = array();
- while (trim($line = fgets($fp, 1024))) {
- if (preg_match('/^([^:]+):\s+(.*)\s*$/', $line, $matches)) {
- $headers[strtolower($matches[1])] = trim($matches[2]);
- } elseif (preg_match('|^HTTP/1.[01] ([0-9]{3}) |', $line, $matches)) {
- if ($matches[1] != 200) {
- return PEAR::raiseError("File http://$host:$port$path not valid (received: $line)");
- }
- }
- }
- if (isset($headers['content-disposition']) &&
- preg_match('/\sfilename=\"([^;]*\S)\"\s*(;|$)/', $headers['content-disposition'], $matches)) {
- $save_as = basename($matches[1]);
- } else {
- $save_as = basename($url);
- }
- if ($callback) {
- $tmp = call_user_func($callback, 'saveas', $save_as);
- if ($tmp) {
- $save_as = $tmp;
- }
- }
- $dest_file = $save_dir . DIRECTORY_SEPARATOR . $save_as;
- if (!$wp = @fopen($dest_file, 'wb')) {
- fclose($fp);
- if ($callback) {
- call_user_func($callback, 'writefailed', array($dest_file, $php_errormsg));
- }
- return PEAR::raiseError("could not open $dest_file for writing");
- }
- if (isset($headers['content-length'])) {
- $length = $headers['content-length'];
- } else {
- $length = -1;
- }
- $bytes = 0;
- if ($callback) {
- call_user_func($callback, 'start', array(basename($dest_file), $length));
- }
- while ($data = @fread($fp, 1024)) {
- $bytes += strlen($data);
- if ($callback) {
- call_user_func($callback, 'bytesread', $bytes);
- }
- if (!@fwrite($wp, $data)) {
- fclose($fp);
- if ($callback) {
- call_user_func($callback, 'writefailed', array($dest_file, $php_errormsg));
- }
- return PEAR::raiseError("$dest_file: write failed ($php_errormsg)");
- }
- }
- fclose($fp);
- fclose($wp);
- if ($callback) {
- call_user_func($callback, 'done', $bytes);
- }
- return $dest_file;
- }
-
- // }}}
- // {{{ sortPkgDeps()
-
- /**
- * Sort a list of arrays of array(downloaded packagefilename) by dependency.
- *
- * It also removes duplicate dependencies
- * @param array
- * @param boolean Sort packages in reverse order if true
- * @return array array of array(packagefilename, package.xml contents)
- */
- function sortPkgDeps(&$packages, $uninstall = false)
- {
- $ret = array();
- if ($uninstall) {
- foreach($packages as $packageinfo) {
- $ret[] = array('info' => $packageinfo);
- }
- } else {
- foreach($packages as $packagefile) {
- if (!is_array($packagefile)) {
- $ret[] = array('file' => $packagefile,
- 'info' => $a = $this->infoFromAny($packagefile),
- 'pkg' => $a['package']);
- } else {
- $ret[] = $packagefile;
- }
- }
- }
- $checkdupes = array();
- $newret = array();
- foreach($ret as $i => $p) {
- if (!isset($checkdupes[$p['info']['package']])) {
- $checkdupes[$p['info']['package']][] = $i;
- $newret[] = $p;
- }
- }
- $this->_packageSortTree = $this->_getPkgDepTree($newret);
-
- $func = $uninstall ? '_sortPkgDepsRev' : '_sortPkgDeps';
- usort($newret, array(&$this, $func));
- $this->_packageSortTree = null;
- $packages = $newret;
- }
-
- // }}}
- // {{{ _sortPkgDeps()
-
- /**
- * Compare two package's package.xml, and sort
- * so that dependencies are installed first
- *
- * This is a crude compare, real dependency checking is done on install.
- * The only purpose this serves is to make the command-line
- * order-independent (you can list a dependent package first, and
- * installation occurs in the order required)
- * @access private
- */
- function _sortPkgDeps($p1, $p2)
- {
- $p1name = $p1['info']['package'];
- $p2name = $p2['info']['package'];
- $p1deps = $this->_getPkgDeps($p1);
- $p2deps = $this->_getPkgDeps($p2);
- if (!count($p1deps) && !count($p2deps)) {
- return 0; // order makes no difference
- }
- if (!count($p1deps)) {
- return -1; // package 2 has dependencies, package 1 doesn't
- }
- if (!count($p2deps)) {
- return 1; // package 1 has dependencies, package 2 doesn't
- }
- // both have dependencies
- if (in_array($p1name, $p2deps)) {
- return -1; // put package 1 first: package 2 depends on package 1
- }
- if (in_array($p2name, $p1deps)) {
- return 1; // put package 2 first: package 1 depends on package 2
- }
- if ($this->_removedDependency($p1name, $p2name)) {
- return -1; // put package 1 first: package 2 depends on packages that depend on package 1
- }
- if ($this->_removedDependency($p2name, $p1name)) {
- return 1; // put package 2 first: package 1 depends on packages that depend on package 2
- }
- // doesn't really matter if neither depends on the other
- return 0;
- }
-
- // }}}
- // {{{ _sortPkgDepsRev()
-
- /**
- * Compare two package's package.xml, and sort
- * so that dependencies are uninstalled last
- *
- * This is a crude compare, real dependency checking is done on uninstall.
- * The only purpose this serves is to make the command-line
- * order-independent (you can list a dependency first, and
- * uninstallation occurs in the order required)
- * @access private
- */
- function _sortPkgDepsRev($p1, $p2)
- {
- $p1name = $p1['info']['package'];
- $p2name = $p2['info']['package'];
- $p1deps = $this->_getRevPkgDeps($p1);
- $p2deps = $this->_getRevPkgDeps($p2);
- if (!count($p1deps) && !count($p2deps)) {
- return 0; // order makes no difference
- }
- if (!count($p1deps)) {
- return 1; // package 2 has dependencies, package 1 doesn't
- }
- if (!count($p2deps)) {
- return -1; // package 2 has dependencies, package 1 doesn't
- }
- // both have dependencies
- if (in_array($p1name, $p2deps)) {
- return 1; // put package 1 last
- }
- if (in_array($p2name, $p1deps)) {
- return -1; // put package 2 last
- }
- if ($this->_removedDependency($p1name, $p2name)) {
- return 1; // put package 1 last: package 2 depends on packages that depend on package 1
- }
- if ($this->_removedDependency($p2name, $p1name)) {
- return -1; // put package 2 last: package 1 depends on packages that depend on package 2
- }
- // doesn't really matter if neither depends on the other
- return 0;
- }
-
- // }}}
- // {{{ _getPkgDeps()
-
- /**
- * get an array of package dependency names
- * @param array
- * @return array
- * @access private
- */
- function _getPkgDeps($p)
- {
- if (!isset($p['info']['releases'])) {
- return $this->_getRevPkgDeps($p);
- }
- $rel = array_shift($p['info']['releases']);
- if (!isset($rel['deps'])) {
- return array();
- }
- $ret = array();
- foreach($rel['deps'] as $dep) {
- if ($dep['type'] == 'pkg') {
- $ret[] = $dep['name'];
- }
- }
- return $ret;
- }
-
- // }}}
- // {{{ _getPkgDeps()
-
- /**
- * get an array representation of the package dependency tree
- * @return array
- * @access private
- */
- function _getPkgDepTree($packages)
- {
- $tree = array();
- foreach ($packages as $p) {
- $package = $p['info']['package'];
- $deps = $this->_getPkgDeps($p);
- $tree[$package] = $deps;
- }
- return $tree;
- }
-
- // }}}
- // {{{ _removedDependency($p1, $p2)
-
- /**
- * get an array of package dependency names for uninstall
- * @param string package 1 name
- * @param string package 2 name
- * @return bool
- * @access private
- */
- function _removedDependency($p1, $p2)
- {
- if (empty($this->_packageSortTree[$p2])) {
- return false;
- }
- if (!in_array($p1, $this->_packageSortTree[$p2])) {
- foreach ($this->_packageSortTree[$p2] as $potential) {
- if ($this->_removedDependency($p1, $potential)) {
- return true;
- }
- }
- return false;
- }
- return true;
- }
-
- // }}}
- // {{{ _getRevPkgDeps()
-
- /**
- * get an array of package dependency names for uninstall
- * @param array
- * @return array
- * @access private
- */
- function _getRevPkgDeps($p)
- {
- if (!isset($p['info']['release_deps'])) {
- return array();
- }
- $ret = array();
- foreach($p['info']['release_deps'] as $dep) {
- if ($dep['type'] == 'pkg') {
- $ret[] = $dep['name'];
- }
- }
- return $ret;
- }
-
- // }}}
-}
-
-?>
diff --git a/pear/PEAR/Config.php b/pear/PEAR/Config.php
deleted file mode 100644
index a8c073b9df..0000000000
--- a/pear/PEAR/Config.php
+++ /dev/null
@@ -1,1169 +0,0 @@
-<?php
-//
-// +----------------------------------------------------------------------+
-// | PHP Version 5 |
-// +----------------------------------------------------------------------+
-// | Copyright (c) 1997-2004 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: Stig Bakken <ssb@php.net> |
-// +----------------------------------------------------------------------+
-//
-// $Id$
-
-require_once 'PEAR.php';
-require_once 'System.php';
-
-/**
- * Last created PEAR_Config instance.
- * @var object
- */
-$GLOBALS['_PEAR_Config_instance'] = null;
-if (!defined('PEAR_INSTALL_DIR') || !PEAR_INSTALL_DIR) {
- $PEAR_INSTALL_DIR = PHP_LIBDIR . DIRECTORY_SEPARATOR . 'pear';
-} else {
- $PEAR_INSTALL_DIR = PEAR_INSTALL_DIR;
-}
-
-// Below we define constants with default values for all configuration
-// parameters except username/password. All of them can have their
-// defaults set through environment variables. The reason we use the
-// PHP_ prefix is for some security, PHP protects environment
-// variables starting with PHP_*.
-
-if (getenv('PHP_PEAR_SYSCONF_DIR')) {
- define('PEAR_CONFIG_SYSCONFDIR', getenv('PHP_PEAR_SYSCONF_DIR'));
-} elseif (getenv('SystemRoot')) {
- define('PEAR_CONFIG_SYSCONFDIR', getenv('SystemRoot'));
-} else {
- define('PEAR_CONFIG_SYSCONFDIR', PHP_SYSCONFDIR);
-}
-
-// Default for master_server
-if (getenv('PHP_PEAR_MASTER_SERVER')) {
- define('PEAR_CONFIG_DEFAULT_MASTER_SERVER', getenv('PHP_PEAR_MASTER_SERVER'));
-} else {
- define('PEAR_CONFIG_DEFAULT_MASTER_SERVER', 'pear.php.net');
-}
-
-// Default for http_proxy
-if (getenv('PHP_PEAR_HTTP_PROXY')) {
- define('PEAR_CONFIG_DEFAULT_HTTP_PROXY', getenv('PHP_PEAR_HTTP_PROXY'));
-} elseif (getenv('http_proxy')) {
- define('PEAR_CONFIG_DEFAULT_HTTP_PROXY', getenv('http_proxy'));
-} else {
- define('PEAR_CONFIG_DEFAULT_HTTP_PROXY', '');
-}
-
-// Default for php_dir
-if (getenv('PHP_PEAR_INSTALL_DIR')) {
- define('PEAR_CONFIG_DEFAULT_PHP_DIR', getenv('PHP_PEAR_INSTALL_DIR'));
-} else {
- if (@is_dir($PEAR_INSTALL_DIR)) {
- define('PEAR_CONFIG_DEFAULT_PHP_DIR',
- $PEAR_INSTALL_DIR);
- } else {
- define('PEAR_CONFIG_DEFAULT_PHP_DIR', $PEAR_INSTALL_DIR);
- }
-}
-
-// Default for ext_dir
-if (getenv('PHP_PEAR_EXTENSION_DIR')) {
- define('PEAR_CONFIG_DEFAULT_EXT_DIR', getenv('PHP_PEAR_EXTENSION_DIR'));
-} else {
- if (ini_get('extension_dir')) {
- define('PEAR_CONFIG_DEFAULT_EXT_DIR', ini_get('extension_dir'));
- } elseif (defined('PEAR_EXTENSION_DIR') && @is_dir(PEAR_EXTENSION_DIR)) {
- define('PEAR_CONFIG_DEFAULT_EXT_DIR', PEAR_EXTENSION_DIR);
- } elseif (defined('PHP_EXTENSION_DIR')) {
- define('PEAR_CONFIG_DEFAULT_EXT_DIR', PHP_EXTENSION_DIR);
- } else {
- define('PEAR_CONFIG_DEFAULT_EXT_DIR', '.');
- }
-}
-
-// Default for doc_dir
-if (getenv('PHP_PEAR_DOC_DIR')) {
- define('PEAR_CONFIG_DEFAULT_DOC_DIR', getenv('PHP_PEAR_DOC_DIR'));
-} else {
- define('PEAR_CONFIG_DEFAULT_DOC_DIR',
- $PEAR_INSTALL_DIR.DIRECTORY_SEPARATOR.'docs');
-}
-
-// Default for bin_dir
-if (getenv('PHP_PEAR_BIN_DIR')) {
- define('PEAR_CONFIG_DEFAULT_BIN_DIR', getenv('PHP_PEAR_BIN_DIR'));
-} else {
- define('PEAR_CONFIG_DEFAULT_BIN_DIR', PHP_BINDIR);
-}
-
-// Default for data_dir
-if (getenv('PHP_PEAR_DATA_DIR')) {
- define('PEAR_CONFIG_DEFAULT_DATA_DIR', getenv('PHP_PEAR_DATA_DIR'));
-} else {
- define('PEAR_CONFIG_DEFAULT_DATA_DIR',
- $PEAR_INSTALL_DIR.DIRECTORY_SEPARATOR.'data');
-}
-
-// Default for test_dir
-if (getenv('PHP_PEAR_TEST_DIR')) {
- define('PEAR_CONFIG_DEFAULT_TEST_DIR', getenv('PHP_PEAR_TEST_DIR'));
-} else {
- define('PEAR_CONFIG_DEFAULT_TEST_DIR',
- $PEAR_INSTALL_DIR.DIRECTORY_SEPARATOR.'tests');
-}
-
-// Default for cache_dir
-if (getenv('PHP_PEAR_CACHE_DIR')) {
- define('PEAR_CONFIG_DEFAULT_CACHE_DIR', getenv('PHP_PEAR_CACHE_DIR'));
-} else {
- define('PEAR_CONFIG_DEFAULT_CACHE_DIR',
- System::tmpdir() . DIRECTORY_SEPARATOR . 'pear' .
- DIRECTORY_SEPARATOR . 'cache');
-}
-
-// Default for php_bin
-if (getenv('PHP_PEAR_PHP_BIN')) {
- define('PEAR_CONFIG_DEFAULT_PHP_BIN', getenv('PHP_PEAR_PHP_BIN'));
-} else {
- define('PEAR_CONFIG_DEFAULT_PHP_BIN', PEAR_CONFIG_DEFAULT_BIN_DIR.
- DIRECTORY_SEPARATOR.'php'.(OS_WINDOWS ? '.exe' : ''));
-}
-
-// Default for verbose
-if (getenv('PHP_PEAR_VERBOSE')) {
- define('PEAR_CONFIG_DEFAULT_VERBOSE', getenv('PHP_PEAR_VERBOSE'));
-} else {
- define('PEAR_CONFIG_DEFAULT_VERBOSE', 1);
-}
-
-// Default for preferred_state
-if (getenv('PHP_PEAR_PREFERRED_STATE')) {
- define('PEAR_CONFIG_DEFAULT_PREFERRED_STATE', getenv('PHP_PEAR_PREFERRED_STATE'));
-} else {
- define('PEAR_CONFIG_DEFAULT_PREFERRED_STATE', 'stable');
-}
-
-// Default for umask
-if (getenv('PHP_PEAR_UMASK')) {
- define('PEAR_CONFIG_DEFAULT_UMASK', getenv('PHP_PEAR_UMASK'));
-} else {
- define('PEAR_CONFIG_DEFAULT_UMASK', decoct(umask()));
-}
-
-// Default for cache_ttl
-if (getenv('PHP_PEAR_CACHE_TTL')) {
- define('PEAR_CONFIG_DEFAULT_CACHE_TTL', getenv('PHP_PEAR_CACHE_TTL'));
-} else {
- define('PEAR_CONFIG_DEFAULT_CACHE_TTL', 3600);
-}
-
-// Default for sig_type
-if (getenv('PHP_PEAR_SIG_TYPE')) {
- define('PEAR_CONFIG_DEFAULT_SIG_TYPE', getenv('PHP_PEAR_SIG_TYPE'));
-} else {
- define('PEAR_CONFIG_DEFAULT_SIG_TYPE', 'gpg');
-}
-
-// Default for sig_bin
-if (getenv('PHP_PEAR_SIG_BIN')) {
- define('PEAR_CONFIG_DEFAULT_SIG_BIN', getenv('PHP_PEAR_SIG_BIN'));
-} else {
- define('PEAR_CONFIG_DEFAULT_SIG_BIN',
- System::which(
- 'gpg', OS_WINDOWS ? 'c:\gnupg\gpg.exe' : '/usr/local/bin/gpg'));
-}
-
-// Default for sig_keydir
-if (getenv('PHP_PEAR_SIG_KEYDIR')) {
- define('PEAR_CONFIG_DEFAULT_SIG_KEYDIR', getenv('PHP_PEAR_SIG_KEYDIR'));
-} else {
- define('PEAR_CONFIG_DEFAULT_SIG_KEYDIR',
- PEAR_CONFIG_SYSCONFDIR . DIRECTORY_SEPARATOR . 'pearkeys');
-}
-
-/**
- * This is a class for storing configuration data, keeping track of
- * which are system-defined, user-defined or defaulted.
- */
-class PEAR_Config extends PEAR
-{
- // {{{ properties
-
- /**
- * Array of config files used.
- *
- * @var array layer => config file
- */
- var $files = array(
- 'system' => '',
- 'user' => '',
- );
-
- var $layers = array();
-
- /**
- * Configuration data, two-dimensional array where the first
- * dimension is the config layer ('user', 'system' and 'default'),
- * and the second dimension is keyname => value.
- *
- * The order in the first dimension is important! Earlier
- * layers will shadow later ones when a config value is
- * requested (if a 'user' value exists, it will be returned first,
- * then 'system' and finally 'default').
- *
- * @var array layer => array(keyname => value, ...)
- */
- var $configuration = array(
- 'user' => array(),
- 'system' => array(),
- 'default' => array(),
- );
-
- /**
- * Information about the configuration data. Stores the type,
- * default value and a documentation string for each configuration
- * value.
- *
- * @var array layer => array(infotype => value, ...)
- */
- var $configuration_info = array(
- // Internet Access
- 'master_server' => array(
- 'type' => 'string',
- 'default' => 'pear.php.net',
- 'doc' => 'name of the main PEAR server',
- 'prompt' => 'PEAR server',
- 'group' => 'Internet Access',
- ),
- 'http_proxy' => array(
- 'type' => 'string',
- 'default' => PEAR_CONFIG_DEFAULT_HTTP_PROXY,
- 'doc' => 'HTTP proxy (host:port) to use when downloading packages',
- 'prompt' => 'HTTP Proxy Server Address',
- 'group' => 'Internet Access',
- ),
- // File Locations
- 'php_dir' => array(
- 'type' => 'directory',
- 'default' => PEAR_CONFIG_DEFAULT_PHP_DIR,
- 'doc' => 'directory where .php files are installed',
- 'prompt' => 'PEAR directory',
- 'group' => 'File Locations',
- ),
- 'ext_dir' => array(
- 'type' => 'directory',
- 'default' => PEAR_CONFIG_DEFAULT_EXT_DIR,
- 'doc' => 'directory where loadable extensions are installed',
- 'prompt' => 'PHP extension directory',
- 'group' => 'File Locations',
- ),
- 'doc_dir' => array(
- 'type' => 'directory',
- 'default' => PEAR_CONFIG_DEFAULT_DOC_DIR,
- 'doc' => 'directory where documentation is installed',
- 'prompt' => 'PEAR documentation directory',
- 'group' => 'File Locations',
- ),
- 'bin_dir' => array(
- 'type' => 'directory',
- 'default' => PEAR_CONFIG_DEFAULT_BIN_DIR,
- 'doc' => 'directory where executables are installed',
- 'prompt' => 'PEAR executables directory',
- 'group' => 'File Locations',
- ),
- 'data_dir' => array(
- 'type' => 'directory',
- 'default' => PEAR_CONFIG_DEFAULT_DATA_DIR,
- 'doc' => 'directory where data files are installed',
- 'prompt' => 'PEAR data directory',
- 'group' => 'File Locations (Advanced)',
- ),
- 'test_dir' => array(
- 'type' => 'directory',
- 'default' => PEAR_CONFIG_DEFAULT_TEST_DIR,
- 'doc' => 'directory where regression tests are installed',
- 'prompt' => 'PEAR test directory',
- 'group' => 'File Locations (Advanced)',
- ),
- 'cache_dir' => array(
- 'type' => 'directory',
- 'default' => PEAR_CONFIG_DEFAULT_CACHE_DIR,
- 'doc' => 'directory which is used for XMLRPC cache',
- 'prompt' => 'PEAR Installer cache directory',
- 'group' => 'File Locations (Advanced)',
- ),
- 'php_bin' => array(
- 'type' => 'file',
- 'default' => PEAR_CONFIG_DEFAULT_PHP_BIN,
- 'doc' => 'PHP CLI/CGI binary for executing scripts',
- 'prompt' => 'PHP CLI/CGI binary',
- 'group' => 'File Locations (Advanced)',
- ),
- // Maintainers
- 'username' => array(
- 'type' => 'string',
- 'default' => '',
- 'doc' => '(maintainers) your PEAR account name',
- 'prompt' => 'PEAR username (for maintainers)',
- 'group' => 'Maintainers',
- ),
- 'password' => array(
- 'type' => 'password',
- 'default' => '',
- 'doc' => '(maintainers) your PEAR account password',
- 'prompt' => 'PEAR password (for maintainers)',
- 'group' => 'Maintainers',
- ),
- // Advanced
- 'verbose' => array(
- 'type' => 'integer',
- 'default' => PEAR_CONFIG_DEFAULT_VERBOSE,
- 'doc' => 'verbosity level
-0: really quiet
-1: somewhat quiet
-2: verbose
-3: debug',
- 'prompt' => 'Debug Log Level',
- 'group' => 'Advanced',
- ),
- 'preferred_state' => array(
- 'type' => 'set',
- 'default' => PEAR_CONFIG_DEFAULT_PREFERRED_STATE,
- 'doc' => 'the installer will prefer releases with this state when installing packages without a version or state specified',
- 'valid_set' => array(
- 'stable', 'beta', 'alpha', 'devel', 'snapshot'),
- 'prompt' => 'Preferred Package State',
- 'group' => 'Advanced',
- ),
- 'umask' => array(
- 'type' => 'mask',
- 'default' => PEAR_CONFIG_DEFAULT_UMASK,
- 'doc' => 'umask used when creating files (Unix-like systems only)',
- 'prompt' => 'Unix file mask',
- 'group' => 'Advanced',
- ),
- 'cache_ttl' => array(
- 'type' => 'integer',
- 'default' => PEAR_CONFIG_DEFAULT_CACHE_TTL,
- 'doc' => 'amount of secs where the local cache is used and not updated',
- 'prompt' => 'Cache TimeToLive',
- 'group' => 'Advanced',
- ),
- 'sig_type' => array(
- 'type' => 'set',
- 'default' => PEAR_CONFIG_DEFAULT_SIG_TYPE,
- 'doc' => 'which package signature mechanism to use',
- 'valid_set' => array('gpg'),
- 'prompt' => 'Package Signature Type',
- 'group' => 'Maintainers',
- ),
- 'sig_bin' => array(
- 'type' => 'string',
- 'default' => PEAR_CONFIG_DEFAULT_SIG_BIN,
- 'doc' => 'which package signature mechanism to use',
- 'prompt' => 'Signature Handling Program',
- 'group' => 'Maintainers',
- ),
- 'sig_keyid' => array(
- 'type' => 'string',
- 'default' => '',
- 'doc' => 'which key to use for signing with',
- 'prompt' => 'Signature Key Id',
- 'group' => 'Maintainers',
- ),
- 'sig_keydir' => array(
- 'type' => 'string',
- 'default' => PEAR_CONFIG_DEFAULT_SIG_KEYDIR,
- 'doc' => 'which package signature mechanism to use',
- 'prompt' => 'Signature Key Directory',
- 'group' => 'Maintainers',
- ),
- );
-
- // }}}
-
- // {{{ PEAR_Config([file], [defaults_file])
-
- /**
- * Constructor.
- *
- * @param string (optional) file to read user-defined options from
- * @param string (optional) file to read system-wide defaults from
- *
- * @access public
- *
- * @see PEAR_Config::singleton
- */
- function PEAR_Config($user_file = '', $system_file = '')
- {
- $this->PEAR();
- $sl = DIRECTORY_SEPARATOR;
- if (empty($user_file)) {
- if (OS_WINDOWS) {
- $user_file = PEAR_CONFIG_SYSCONFDIR . $sl . 'pear.ini';
- } else {
- $user_file = getenv('HOME') . $sl . '.pearrc';
- }
- }
- if (empty($system_file)) {
- if (OS_WINDOWS) {
- $system_file = PEAR_CONFIG_SYSCONFDIR . $sl . 'pearsys.ini';
- } else {
- $system_file = PEAR_CONFIG_SYSCONFDIR . $sl . 'pear.conf';
- }
- }
- $this->layers = array_keys($this->configuration);
- $this->files['user'] = $user_file;
- $this->files['system'] = $system_file;
- if ($user_file && file_exists($user_file)) {
- $this->readConfigFile($user_file);
- }
- if ($system_file && file_exists($system_file)) {
- $this->mergeConfigFile($system_file, false, 'system');
- }
- foreach ($this->configuration_info as $key => $info) {
- $this->configuration['default'][$key] = $info['default'];
- }
- //$GLOBALS['_PEAR_Config_instance'] = &$this;
- }
-
- // }}}
- // {{{ singleton([file], [defaults_file])
-
- /**
- * Static singleton method. If you want to keep only one instance
- * of this class in use, this method will give you a reference to
- * the last created PEAR_Config object if one exists, or create a
- * new object.
- *
- * @param string (optional) file to read user-defined options from
- * @param string (optional) file to read system-wide defaults from
- *
- * @return object an existing or new PEAR_Config instance
- *
- * @access public
- *
- * @see PEAR_Config::PEAR_Config
- */
- function &singleton($user_file = '', $system_file = '')
- {
- if (is_object($GLOBALS['_PEAR_Config_instance'])) {
- return $GLOBALS['_PEAR_Config_instance'];
- }
- $GLOBALS['_PEAR_Config_instance'] =
- &new PEAR_Config($user_file, $system_file);
- return $GLOBALS['_PEAR_Config_instance'];
- }
-
- // }}}
- // {{{ readConfigFile([file], [layer])
-
- /**
- * Reads configuration data from a file. All existing values in
- * the config layer are discarded and replaced with data from the
- * file.
- *
- * @param string (optional) file to read from, if NULL or not
- * specified, the last-used file for the same layer (second param)
- * is used
- *
- * @param string (optional) config layer to insert data into
- * ('user' or 'system')
- *
- * @return bool TRUE on success or a PEAR error on failure
- *
- * @access public
- */
- function readConfigFile($file = null, $layer = 'user')
- {
- if (empty($this->files[$layer])) {
- return $this->raiseError("unknown config file type `$layer'");
- }
- if ($file === null) {
- $file = $this->files[$layer];
- }
- $data = $this->_readConfigDataFrom($file);
- if (PEAR::isError($data)) {
- return $data;
- }
- $this->_decodeInput($data);
- $this->configuration[$layer] = $data;
- return true;
- }
-
- // }}}
- // {{{ mergeConfigFile(file, [override], [layer])
-
- /**
- * Merges data into a config layer from a file. Does the same
- * thing as readConfigFile, except it does not replace all
- * existing values in the config layer.
- *
- * @param string file to read from
- *
- * @param bool (optional) whether to overwrite existing data
- * (default TRUE)
- *
- * @param string config layer to insert data into ('user' or
- * 'system')
- *
- * @return bool TRUE on success or a PEAR error on failure
- *
- * @access public.
- */
- function mergeConfigFile($file, $override = true, $layer = 'user')
- {
- if (empty($this->files[$layer])) {
- return $this->raiseError("unknown config file type `$layer'");
- }
- if ($file === null) {
- $file = $this->files[$layer];
- }
- $data = $this->_readConfigDataFrom($file);
- if (PEAR::isError($data)) {
- return $data;
- }
- $this->_decodeInput($data);
- if ($override) {
- $this->configuration[$layer] = array_merge($this->configuration[$layer], $data);
- } else {
- $this->configuration[$layer] = array_merge($data, $this->configuration[$layer]);
- }
- return true;
- }
-
- // }}}
- // {{{ writeConfigFile([file], [layer])
-
- /**
- * Writes data into a config layer from a file.
- *
- * @param string file to read from
- *
- * @param bool (optional) whether to overwrite existing data
- * (default TRUE)
- *
- * @param string config layer to insert data into ('user' or
- * 'system')
- *
- * @return bool TRUE on success or a PEAR error on failure
- *
- * @access public.
- */
- function writeConfigFile($file = null, $layer = 'user', $data = null)
- {
- if ($layer == 'both' || $layer == 'all') {
- foreach ($this->files as $type => $file) {
- $err = $this->writeConfigFile($file, $type, $data);
- if (PEAR::isError($err)) {
- return $err;
- }
- }
- return true;
- }
- if (empty($this->files[$layer])) {
- return $this->raiseError("unknown config file type `$layer'");
- }
- if ($file === null) {
- $file = $this->files[$layer];
- }
- $data = ($data === null) ? $this->configuration[$layer] : $data;
- $this->_encodeOutput($data);
- $opt = array('-p', dirname($file));
- if (!@System::mkDir($opt)) {
- return $this->raiseError("could not create directory: " . dirname($file));
- }
- if (@is_file($file) && !@is_writeable($file)) {
- return $this->raiseError("no write access to $file!");
- }
- $fp = @fopen($file, "w");
- if (!$fp) {
- return $this->raiseError("PEAR_Config::writeConfigFile fopen('$file','w') failed");
- }
- $contents = "#PEAR_Config 0.9\n" . serialize($data);
- if (!@fwrite($fp, $contents)) {
- return $this->raiseError("PEAR_Config::writeConfigFile: fwrite failed");
- }
- return true;
- }
-
- // }}}
- // {{{ _readConfigDataFrom(file)
-
- /**
- * Reads configuration data from a file and returns the parsed data
- * in an array.
- *
- * @param string file to read from
- *
- * @return array configuration data or a PEAR error on failure
- *
- * @access private
- */
- function _readConfigDataFrom($file)
- {
- $fp = @fopen($file, "r");
- if (!$fp) {
- return $this->raiseError("PEAR_Config::readConfigFile fopen('$file','r') failed");
- }
- $size = filesize($file);
- $rt = get_magic_quotes_runtime();
- set_magic_quotes_runtime(0);
- $contents = fread($fp, $size);
- set_magic_quotes_runtime($rt);
- fclose($fp);
- $version = '0.1';
- if (preg_match('/^#PEAR_Config\s+(\S+)\s+/si', $contents, $matches)) {
- $version = $matches[1];
- $contents = substr($contents, strlen($matches[0]));
- }
- if (version_compare("$version", '1', '<')) {
- $data = unserialize($contents);
- if (!is_array($data)) {
- if (strlen(trim($contents)) > 0) {
- $error = "PEAR_Config: bad data in $file";
-// if (isset($this)) {
- return $this->raiseError($error);
-// } else {
-// return PEAR::raiseError($error);
- } else {
- $data = array();
- }
- }
- // add parsing of newer formats here...
- } else {
- return $this->raiseError("$file: unknown version `$version'");
- }
- return $data;
- }
-
- // }}}
- // {{{ getConfFile(layer)
- /**
- * Gets the file used for storing the config for a layer
- *
- * @param string $layer 'user' or 'system'
- */
-
- function getConfFile($layer)
- {
- return $this->files[$layer];
- }
-
- // }}}
- // {{{ _encodeOutput(&data)
-
- /**
- * Encodes/scrambles configuration data before writing to files.
- * Currently, 'password' values will be base64-encoded as to avoid
- * that people spot cleartext passwords by accident.
- *
- * @param array (reference) array to encode values in
- *
- * @return bool TRUE on success
- *
- * @access private
- */
- function _encodeOutput(&$data)
- {
- foreach ($data as $key => $value) {
- if (!isset($this->configuration_info[$key])) {
- continue;
- }
- $type = $this->configuration_info[$key]['type'];
- switch ($type) {
- // we base64-encode passwords so they are at least
- // not shown in plain by accident
- case 'password': {
- $data[$key] = base64_encode($data[$key]);
- break;
- }
- case 'mask': {
- $data[$key] = octdec($data[$key]);
- break;
- }
- }
- }
- return true;
- }
-
- // }}}
- // {{{ _decodeInput(&data)
-
- /**
- * Decodes/unscrambles configuration data after reading from files.
- *
- * @param array (reference) array to encode values in
- *
- * @return bool TRUE on success
- *
- * @access private
- *
- * @see PEAR_Config::_encodeOutput
- */
- function _decodeInput(&$data)
- {
- if (!is_array($data)) {
- return true;
- }
- foreach ($data as $key => $value) {
- if (!isset($this->configuration_info[$key])) {
- continue;
- }
- $type = $this->configuration_info[$key]['type'];
- switch ($type) {
- case 'password': {
- $data[$key] = base64_decode($data[$key]);
- break;
- }
- case 'mask': {
- $data[$key] = decoct($data[$key]);
- break;
- }
- }
- }
- return true;
- }
-
- // }}}
- // {{{ get(key, [layer])
-
- /**
- * Returns a configuration value, prioritizing layers as per the
- * layers property.
- *
- * @param string config key
- *
- * @return mixed the config value, or NULL if not found
- *
- * @access public
- */
- function get($key, $layer = null)
- {
- if ($layer === null) {
- foreach ($this->layers as $layer) {
- if (isset($this->configuration[$layer][$key])) {
- return $this->configuration[$layer][$key];
- }
- }
- } elseif (isset($this->configuration[$layer][$key])) {
- return $this->configuration[$layer][$key];
- }
- return null;
- }
-
- // }}}
- // {{{ set(key, value, [layer])
-
- /**
- * Set a config value in a specific layer (defaults to 'user').
- * Enforces the types defined in the configuration_info array. An
- * integer config variable will be cast to int, and a set config
- * variable will be validated against its legal values.
- *
- * @param string config key
- *
- * @param string config value
- *
- * @param string (optional) config layer
- *
- * @return bool TRUE on success, FALSE on failure
- *
- * @access public
- */
- function set($key, $value, $layer = 'user')
- {
- if (empty($this->configuration_info[$key])) {
- return false;
- }
- extract($this->configuration_info[$key]);
- switch ($type) {
- case 'integer':
- $value = (int)$value;
- break;
- case 'set': {
- // If a valid_set is specified, require the value to
- // be in the set. If there is no valid_set, accept
- // any value.
- if ($valid_set) {
- reset($valid_set);
- if ((key($valid_set) === 0 && !in_array($value, $valid_set)) ||
- (key($valid_set) !== 0 && empty($valid_set[$value])))
- {
- return false;
- }
- }
- break;
- }
- }
- $this->configuration[$layer][$key] = $value;
- return true;
- }
-
- // }}}
- // {{{ getType(key)
-
- /**
- * Get the type of a config value.
- *
- * @param string config key
- *
- * @return string type, one of "string", "integer", "file",
- * "directory", "set" or "password".
- *
- * @access public
- *
- */
- function getType($key)
- {
- if (isset($this->configuration_info[$key])) {
- return $this->configuration_info[$key]['type'];
- }
- return false;
- }
-
- // }}}
- // {{{ getDocs(key)
-
- /**
- * Get the documentation for a config value.
- *
- * @param string config key
- *
- * @return string documentation string
- *
- * @access public
- *
- */
- function getDocs($key)
- {
- if (isset($this->configuration_info[$key])) {
- return $this->configuration_info[$key]['doc'];
- }
- return false;
- }
- // }}}
- // {{{ getPrompt(key)
-
- /**
- * Get the short documentation for a config value.
- *
- * @param string config key
- *
- * @return string short documentation string
- *
- * @access public
- *
- */
- function getPrompt($key)
- {
- if (isset($this->configuration_info[$key])) {
- return $this->configuration_info[$key]['prompt'];
- }
- return false;
- }
- // }}}
- // {{{ getGroup(key)
-
- /**
- * Get the parameter group for a config key.
- *
- * @param string config key
- *
- * @return string parameter group
- *
- * @access public
- *
- */
- function getGroup($key)
- {
- if (isset($this->configuration_info[$key])) {
- return $this->configuration_info[$key]['group'];
- }
- return false;
- }
-
- // }}}
- // {{{ getGroups()
-
- /**
- * Get the list of parameter groups.
- *
- * @return array list of parameter groups
- *
- * @access public
- *
- */
- function getGroups()
- {
- $tmp = array();
- foreach ($this->configuration_info as $key => $info) {
- $tmp[$info['group']] = 1;
- }
- return array_keys($tmp);
- }
-
- // }}}
- // {{{ getGroupKeys()
-
- /**
- * Get the list of the parameters in a group.
- *
- * @param string $group parameter group
- *
- * @return array list of parameters in $group
- *
- * @access public
- *
- */
- function getGroupKeys($group)
- {
- $keys = array();
- foreach ($this->configuration_info as $key => $info) {
- if ($info['group'] == $group) {
- $keys[] = $key;
- }
- }
- return $keys;
- }
-
- // }}}
- // {{{ getSetValues(key)
-
- /**
- * Get the list of allowed set values for a config value. Returns
- * NULL for config values that are not sets.
- *
- * @param string config key
- *
- * @return array enumerated array of set values, or NULL if the
- * config key is unknown or not a set
- *
- * @access public
- *
- */
- function getSetValues($key)
- {
- if (isset($this->configuration_info[$key]) &&
- isset($this->configuration_info[$key]['type']) &&
- $this->configuration_info[$key]['type'] == 'set')
- {
- $valid_set = $this->configuration_info[$key]['valid_set'];
- reset($valid_set);
- if (key($valid_set) === 0) {
- return $valid_set;
- }
- return array_keys($valid_set);
- }
- return false;
- }
-
- // }}}
- // {{{ getKeys()
-
- /**
- * Get all the current config keys.
- *
- * @return array simple array of config keys
- *
- * @access public
- */
- function getKeys()
- {
- $keys = array();
- foreach ($this->layers as $layer) {
- $keys = array_merge($keys, $this->configuration[$layer]);
- }
- return array_keys($keys);
- }
-
- // }}}
- // {{{ remove(key, [layer])
-
- /**
- * Remove the a config key from a specific config layer.
- *
- * @param string config key
- *
- * @param string (optional) config layer
- *
- * @return bool TRUE on success, FALSE on failure
- *
- * @access public
- */
- function remove($key, $layer = 'user')
- {
- if (isset($this->configuration[$layer][$key])) {
- unset($this->configuration[$layer][$key]);
- return true;
- }
- return false;
- }
-
- // }}}
- // {{{ removeLayer(layer)
-
- /**
- * Temporarily remove an entire config layer. USE WITH CARE!
- *
- * @param string config key
- *
- * @param string (optional) config layer
- *
- * @return bool TRUE on success, FALSE on failure
- *
- * @access public
- */
- function removeLayer($layer)
- {
- if (isset($this->configuration[$layer])) {
- $this->configuration[$layer] = array();
- return true;
- }
- return false;
- }
-
- // }}}
- // {{{ store([layer])
-
- /**
- * Stores configuration data in a layer.
- *
- * @param string config layer to store
- *
- * @return bool TRUE on success, or PEAR error on failure
- *
- * @access public
- */
- function store($layer = 'user', $data = null)
- {
- return $this->writeConfigFile(null, $layer, $data);
- }
-
- // }}}
- // {{{ toDefault(key)
-
- /**
- * Unset the user-defined value of a config key, reverting the
- * value to the system-defined one.
- *
- * @param string config key
- *
- * @return bool TRUE on success, FALSE on failure
- *
- * @access public
- */
- function toDefault($key)
- {
- trigger_error("PEAR_Config::toDefault() deprecated, use PEAR_Config::remove() instead", E_USER_NOTICE);
- return $this->remove($key, 'user');
- }
-
- // }}}
- // {{{ definedBy(key)
-
- /**
- * Tells what config layer that gets to define a key.
- *
- * @param string config key
- *
- * @return string the config layer, or an empty string if not found
- *
- * @access public
- */
- function definedBy($key)
- {
- foreach ($this->layers as $layer) {
- if (isset($this->configuration[$layer][$key])) {
- return $layer;
- }
- }
- return '';
- }
-
- // }}}
- // {{{ isDefaulted(key)
-
- /**
- * Tells whether a config value has a system-defined value.
- *
- * @param string config key
- *
- * @return bool
- *
- * @access public
- *
- * @deprecated
- */
- function isDefaulted($key)
- {
- trigger_error("PEAR_Config::isDefaulted() deprecated, use PEAR_Config::definedBy() instead", E_USER_NOTICE);
- return $this->definedBy($key) == 'system';
- }
-
- // }}}
- // {{{ isDefined(key)
-
- /**
- * Tells whether a given key exists as a config value.
- *
- * @param string config key
- *
- * @return bool whether <config key> exists in this object
- *
- * @access public
- */
- function isDefined($key)
- {
- foreach ($this->layers as $layer) {
- if (isset($this->configuration[$layer][$key])) {
- return true;
- }
- }
- return false;
- }
-
- // }}}
- // {{{ isDefinedLayer(key)
-
- /**
- * Tells whether a given config layer exists.
- *
- * @param string config layer
- *
- * @return bool whether <config layer> exists in this object
- *
- * @access public
- */
- function isDefinedLayer($layer)
- {
- return isset($this->configuration[$layer]);
- }
-
- // }}}
- // {{{ getLayers()
-
- /**
- * Returns the layers defined (except the 'default' one)
- *
- * @return array of the defined layers
- */
- function getLayers()
- {
- $cf = $this->configuration;
- unset($cf['default']);
- return array_keys($cf);
- }
-
- // }}}
-}
-
-?>
diff --git a/pear/PEAR/Dependency.php b/pear/PEAR/Dependency.php
deleted file mode 100644
index 3239fc98ee..0000000000
--- a/pear/PEAR/Dependency.php
+++ /dev/null
@@ -1,486 +0,0 @@
-<?php
-//
-// +----------------------------------------------------------------------+
-// | PHP Version 5 |
-// +----------------------------------------------------------------------+
-// | Copyright (c) 1997-2004 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. |
-// +----------------------------------------------------------------------+
-// | Authors: Tomas V.V.Cox <cox@idecnet.com> |
-// | Stig Bakken <ssb@php.net> |
-// +----------------------------------------------------------------------+
-//
-// $Id$
-
-require_once "PEAR.php";
-
-define('PEAR_DEPENDENCY_MISSING', -1);
-define('PEAR_DEPENDENCY_CONFLICT', -2);
-define('PEAR_DEPENDENCY_UPGRADE_MINOR', -3);
-define('PEAR_DEPENDENCY_UPGRADE_MAJOR', -4);
-define('PEAR_DEPENDENCY_BAD_DEPENDENCY', -5);
-define('PEAR_DEPENDENCY_MISSING_OPTIONAL', -6);
-define('PEAR_DEPENDENCY_CONFLICT_OPTIONAL', -7);
-define('PEAR_DEPENDENCY_UPGRADE_MINOR_OPTIONAL', -8);
-define('PEAR_DEPENDENCY_UPGRADE_MAJOR_OPTIONAL', -9);
-
-/**
- * Dependency check for PEAR packages
- *
- * The class is based on the dependency RFC that can be found at
- * http://cvs.php.net/cvs.php/pearweb/rfc. It requires PHP >= 4.1
- *
- * @author Tomas V.V.Vox <cox@idecnet.com>
- * @author Stig Bakken <ssb@php.net>
- */
-class PEAR_Dependency
-{
- // {{{ constructor
- /**
- * Constructor
- *
- * @access public
- * @param object Registry object
- * @return void
- */
- function PEAR_Dependency(&$registry)
- {
- $this->registry = &$registry;
- }
-
- // }}}
- // {{{ callCheckMethod()
-
- /**
- * This method maps the XML dependency definition to the
- * corresponding one from PEAR_Dependency
- *
- * <pre>
- * $opts => Array
- * (
- * [type] => pkg
- * [rel] => ge
- * [version] => 3.4
- * [name] => HTML_Common
- * [optional] => false
- * )
- * </pre>
- *
- * @param string Error message
- * @param array Options
- * @return boolean
- */
- function callCheckMethod(&$errmsg, $opts)
- {
- $rel = isset($opts['rel']) ? $opts['rel'] : 'has';
- $req = isset($opts['version']) ? $opts['version'] : null;
- $name = isset($opts['name']) ? $opts['name'] : null;
- $opt = (isset($opts['optional']) && $opts['optional'] == 'yes') ?
- $opts['optional'] : null;
- $errmsg = '';
- switch ($opts['type']) {
- case 'pkg':
- return $this->checkPackage($errmsg, $name, $req, $rel, $opt);
- break;
- case 'ext':
- return $this->checkExtension($errmsg, $name, $req, $rel, $opt);
- break;
- case 'php':
- return $this->checkPHP($errmsg, $req, $rel);
- break;
- case 'prog':
- return $this->checkProgram($errmsg, $name);
- break;
- case 'os':
- return $this->checkOS($errmsg, $name);
- break;
- case 'sapi':
- return $this->checkSAPI($errmsg, $name);
- break;
- case 'zend':
- return $this->checkZend($errmsg, $name);
- break;
- default:
- return "'{$opts['type']}' dependency type not supported";
- }
- }
-
- // }}}
- // {{{ checkPackage()
-
- /**
- * Package dependencies check method
- *
- * @param string $errmsg Empty string, it will be populated with an error message, if any
- * @param string $name Name of the package to test
- * @param string $req The package version required
- * @param string $relation How to compare versions with each other
- * @param bool $opt Whether the relationship is optional
- *
- * @return mixed bool false if no error or the error string
- */
- function checkPackage(&$errmsg, $name, $req = null, $relation = 'has',
- $opt = false)
- {
- if (is_string($req) && substr($req, 0, 2) == 'v.') {
- $req = substr($req, 2);
- }
- switch ($relation) {
- case 'has':
- if (!$this->registry->packageExists($name)) {
- if ($opt) {
- $errmsg = "package `$name' is recommended to utilize some features.";
- return PEAR_DEPENDENCY_MISSING_OPTIONAL;
- }
- $errmsg = "requires package `$name'";
- return PEAR_DEPENDENCY_MISSING;
- }
- return false;
- case 'not':
- if ($this->registry->packageExists($name)) {
- $errmsg = "conflicts with package `$name'";
- return PEAR_DEPENDENCY_CONFLICT;
- }
- return false;
- case 'lt':
- case 'le':
- case 'eq':
- case 'ne':
- case 'ge':
- case 'gt':
- $version = $this->registry->packageInfo($name, 'version');
- if (!$this->registry->packageExists($name)
- || !version_compare("$version", "$req", $relation))
- {
- $code = $this->codeFromRelation($relation, $version, $req, $opt);
- if ($opt) {
- $errmsg = "package `$name' version " . $this->signOperator($relation) .
- " $req is recommended to utilize some features.";
- if ($version) {
- $errmsg .= " Installed version is $version";
- }
- return $code;
- }
- $errmsg = "requires package `$name' " .
- $this->signOperator($relation) . " $req";
- return $code;
- }
- return false;
- }
- $errmsg = "relation '$relation' with requirement '$req' is not supported (name=$name)";
- return PEAR_DEPENDENCY_BAD_DEPENDENCY;
- }
-
- // }}}
- // {{{ checkPackageUninstall()
-
- /**
- * Check package dependencies on uninstall
- *
- * @param string $error The resultant error string
- * @param string $warning The resultant warning string
- * @param string $name Name of the package to test
- *
- * @return bool true if there were errors
- */
- function checkPackageUninstall(&$error, &$warning, $package)
- {
- $error = null;
- $packages = $this->registry->listPackages();
- foreach ($packages as $pkg) {
- if ($pkg == $package) {
- continue;
- }
- $deps = $this->registry->packageInfo($pkg, 'release_deps');
- if (empty($deps)) {
- continue;
- }
- foreach ($deps as $dep) {
- if ($dep['type'] == 'pkg' && strcasecmp($dep['name'], $package) == 0) {
- if ($dep['rel'] == 'ne') {
- continue;
- }
- if (isset($dep['optional']) && $dep['optional'] == 'yes') {
- $warning .= "\nWarning: Package '$pkg' optionally depends on '$package'";
- } else {
- $error .= "Package '$pkg' depends on '$package'\n";
- }
- }
- }
- }
- return ($error) ? true : false;
- }
-
- // }}}
- // {{{ checkExtension()
-
- /**
- * Extension dependencies check method
- *
- * @param string $name Name of the extension to test
- * @param string $req_ext_ver Required extension version to compare with
- * @param string $relation How to compare versions with eachother
- * @param bool $opt Whether the relationship is optional
- *
- * @return mixed bool false if no error or the error string
- */
- function checkExtension(&$errmsg, $name, $req = null, $relation = 'has',
- $opt = false)
- {
- if ($relation == 'not') {
- if (extension_loaded($name)) {
- $errmsg = "conflicts with PHP extension '$name'";
- return PEAR_DEPENDENCY_CONFLICT;
- } else {
- return false;
- }
- }
-
- if (!extension_loaded($name)) {
- if ($relation == 'ne') {
- return false;
- }
- if ($opt) {
- $errmsg = "'$name' PHP extension is recommended to utilize some features";
- return PEAR_DEPENDENCY_MISSING_OPTIONAL;
- }
- $errmsg = "'$name' PHP extension is not installed";
- return PEAR_DEPENDENCY_MISSING;
- }
- if ($relation == 'has') {
- return false;
- }
- $code = false;
- if (is_string($req) && substr($req, 0, 2) == 'v.') {
- $req = substr($req, 2);
- }
- $ext_ver = phpversion($name);
- $operator = $relation;
- // Force params to be strings, otherwise the comparation will fail (ex. 0.9==0.90)
- if (!version_compare("$ext_ver", "$req", $operator)) {
- $errmsg = "'$name' PHP extension version " .
- $this->signOperator($operator) . " $req is required";
- $code = $this->codeFromRelation($relation, $ext_ver, $req, $opt);
- if ($opt) {
- $errmsg = "'$name' PHP extension version " . $this->signOperator($operator) .
- " $req is recommended to utilize some features";
- return $code;
- }
- }
- return $code;
- }
-
- // }}}
- // {{{ checkOS()
-
- /**
- * Operating system dependencies check method
- *
- * @param string $os Name of the operating system
- *
- * @return mixed bool false if no error or the error string
- */
- function checkOS(&$errmsg, $os)
- {
- // XXX Fixme: Implement a more flexible way, like
- // comma separated values or something similar to PEAR_OS
- static $myos;
- if (empty($myos)) {
- include_once "OS/Guess.php";
- $myos = new OS_Guess();
- }
- // only 'has' relation is currently supported
- if ($myos->matchSignature($os)) {
- return false;
- }
- $errmsg = "'$os' operating system not supported";
- return PEAR_DEPENDENCY_CONFLICT;
- }
-
- // }}}
- // {{{ checkPHP()
-
- /**
- * PHP version check method
- *
- * @param string $req which version to compare
- * @param string $relation how to compare the version
- *
- * @return mixed bool false if no error or the error string
- */
- function checkPHP(&$errmsg, $req, $relation = 'ge')
- {
- // this would be a bit stupid, but oh well :)
- if ($relation == 'has') {
- return false;
- }
- if ($relation == 'not') {
- $errmsg = "Invalid dependency - 'not' is allowed when specifying PHP, you must run PHP in PHP";
- return PEAR_DEPENDENCY_BAD_DEPENDENCY;
- }
- if (substr($req, 0, 2) == 'v.') {
- $req = substr($req,2, strlen($req) - 2);
- }
- $php_ver = phpversion();
- $operator = $relation;
- if (!version_compare("$php_ver", "$req", $operator)) {
- $errmsg = "PHP version " . $this->signOperator($operator) .
- " $req is required";
- return PEAR_DEPENDENCY_CONFLICT;
- }
- return false;
- }
-
- // }}}
- // {{{ checkProgram()
-
- /**
- * External program check method. Looks for executable files in
- * directories listed in the PATH environment variable.
- *
- * @param string $program which program to look for
- *
- * @return mixed bool false if no error or the error string
- */
- function checkProgram(&$errmsg, $program)
- {
- // XXX FIXME honor safe mode
- $exe_suffix = OS_WINDOWS ? '.exe' : '';
- $path_elements = explode(PATH_SEPARATOR, getenv('PATH'));
- foreach ($path_elements as $dir) {
- $file = $dir . DIRECTORY_SEPARATOR . $program . $exe_suffix;
- if (@file_exists($file) && @is_executable($file)) {
- return false;
- }
- }
- $errmsg = "'$program' program is not present in the PATH";
- return PEAR_DEPENDENCY_MISSING;
- }
-
- // }}}
- // {{{ checkSAPI()
-
- /**
- * SAPI backend check method. Version comparison is not yet
- * available here.
- *
- * @param string $name name of SAPI backend
- * @param string $req which version to compare
- * @param string $relation how to compare versions (currently
- * hardcoded to 'has')
- * @return mixed bool false if no error or the error string
- */
- function checkSAPI(&$errmsg, $name, $req = null, $relation = 'has')
- {
- // XXX Fixme: There is no way to know if the user has or
- // not other SAPI backends installed than the installer one
-
- $sapi_backend = php_sapi_name();
- // Version comparisons not supported, sapi backends don't have
- // version information yet.
- if ($sapi_backend == $name) {
- return false;
- }
- $errmsg = "'$sapi_backend' SAPI backend not supported";
- return PEAR_DEPENDENCY_CONFLICT;
- }
-
- // }}}
- // {{{ checkZend()
-
- /**
- * Zend version check method
- *
- * @param string $req which version to compare
- * @param string $relation how to compare the version
- *
- * @return mixed bool false if no error or the error string
- */
- function checkZend(&$errmsg, $req, $relation = 'ge')
- {
- if (substr($req, 0, 2) == 'v.') {
- $req = substr($req,2, strlen($req) - 2);
- }
- $zend_ver = zend_version();
- $operator = substr($relation,0,2);
- if (!version_compare("$zend_ver", "$req", $operator)) {
- $errmsg = "Zend version " . $this->signOperator($operator) .
- " $req is required";
- return PEAR_DEPENDENCY_CONFLICT;
- }
- return false;
- }
-
- // }}}
- // {{{ signOperator()
-
- /**
- * Converts text comparing operators to them sign equivalents
- *
- * Example: 'ge' to '>='
- *
- * @access public
- * @param string Operator
- * @return string Sign equivalent
- */
- function signOperator($operator)
- {
- switch($operator) {
- case 'lt': return '<';
- case 'le': return '<=';
- case 'gt': return '>';
- case 'ge': return '>=';
- case 'eq': return '==';
- case 'ne': return '!=';
- default:
- return $operator;
- }
- }
-
- // }}}
- // {{{ codeFromRelation()
-
- /**
- * Convert relation into corresponding code
- *
- * @access public
- * @param string Relation
- * @param string Version
- * @param string Requirement
- * @param bool Optional dependency indicator
- * @return integer
- */
- function codeFromRelation($relation, $version, $req, $opt = false)
- {
- $code = PEAR_DEPENDENCY_BAD_DEPENDENCY;
- switch ($relation) {
- case 'gt': case 'ge': case 'eq':
- // upgrade
- $have_major = preg_replace('/\D.*/', '', $version);
- $need_major = preg_replace('/\D.*/', '', $req);
- if ($need_major > $have_major) {
- $code = $opt ? PEAR_DEPENDENCY_UPGRADE_MAJOR_OPTIONAL :
- PEAR_DEPENDENCY_UPGRADE_MAJOR;
- } else {
- $code = $opt ? PEAR_DEPENDENCY_UPGRADE_MINOR_OPTIONAL :
- PEAR_DEPENDENCY_UPGRADE_MINOR;
- }
- break;
- case 'lt': case 'le': case 'ne':
- $code = $opt ? PEAR_DEPENDENCY_CONFLICT_OPTIONAL :
- PEAR_DEPENDENCY_CONFLICT;
- break;
- }
- return $code;
- }
-
- // }}}
-}
-?>
diff --git a/pear/PEAR/DependencyDB.php b/pear/PEAR/DependencyDB.php
deleted file mode 100644
index ce76350a71..0000000000
--- a/pear/PEAR/DependencyDB.php
+++ /dev/null
@@ -1,348 +0,0 @@
-<?php
-//
-// +----------------------------------------------------------------------+
-// | PHP Version 5 |
-// +----------------------------------------------------------------------+
-// | Copyright (c) 1997-2004 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. |
-// +----------------------------------------------------------------------+
-// | Authors: Tomas V.V.Cox <cox@idecnet.com> |
-// | |
-// +----------------------------------------------------------------------+
-//
-// $Id$
-
-/**
-Experimental dependencies database handling functions (not yet in production)
-
-<?php
-include './DependencyDB.php';
-PEAR::setErrorHandling(PEAR_ERROR_DIE);
-$dep = PEAR_DependencyDB::singleton('./test.deps', '/home/cox/www/include/pear');
-//$dep->rebuildDB();
-$a = $dep->checkAction('uninstall', 'net_socket');
-print_r($a);
-?>
-
-**/
-
-require_once 'PEAR.php';
-require_once 'PEAR/Registry.php';
-require_once 'PEAR/Dependency.php';
-
-class PEAR_DependencyDB extends PEAR
-{
- // {{{ properties
-
- var $pear_reg = false;
- var $pear_dep = false;
- var $depdb_file = false;
- var $lockfile = false;
- var $lock_fp = false;
- var $depdb_version = '1.0';
-
- // }}}
- // {{{ & singleton()
-
- function &singleton($depdb_file, $reg_file)
- {
- $obj = new PEAR_DependencyDB;
- $reg = &new PEAR_Registry($reg_file);
- $obj->pear_reg = $reg;
- $obj->lockfile = $reg->lockfile;
- $obj->pear_dep = new PEAR_Dependency($reg);
- $obj->depdb_file = $depdb_file;
- $obj->assertDepsDB();
- return $obj;
- }
-
- // }}}
- // {{{ assertDepsDB()
-
- function assertDepsDB()
- {
- if (!is_file($this->depdb_file)) {
- $this->rebuildDB();
- } else {
- $depdb = $this->_getDepDB();
- // Datatype format has been changed, rebuild the Deps DB
- if ($depdb['depdb_version'] != $this->depdb_version) {
- $this->rebuildDB();
- }
- }
- }
-
- // }}}
- // {{{ _lock()
-
- function _lock($mode = LOCK_EX)
- {
- if (!eregi('Windows 9', php_uname())) {
- if ($mode != LOCK_UN && is_resource($this->lock_fp)) {
- // XXX does not check type of lock (LOCK_SH/LOCK_EX)
- return true;
- }
- $open_mode = 'w';
- // XXX People reported problems with LOCK_SH and 'w'
- if ($mode === LOCK_SH) {
- if (@!is_file($this->lockfile)) {
- touch($this->lockfile);
- }
- $open_mode = 'r';
- }
-
- $this->lock_fp = @fopen($this->lockfile, $open_mode);
-
- if (!is_resource($this->lock_fp)) {
- return $this->raiseError("could not create lock file" .
- (isset($php_errormsg) ? ": " . $php_errormsg : ""));
- }
- if (!(int)flock($this->lock_fp, $mode)) {
- switch ($mode) {
- case LOCK_SH: $str = 'shared'; break;
- case LOCK_EX: $str = 'exclusive'; break;
- case LOCK_UN: $str = 'unlock'; break;
- default: $str = 'unknown'; break;
- }
- return $this->raiseError("could not acquire $str lock ($this->lockfile)");
- }
- }
- return true;
- }
-
- // }}}
- // {{{ _unlock()
-
- function _unlock()
- {
- $ret = $this->_lock(LOCK_UN);
- $this->lock_fp = null;
- return $ret;
- }
-
- // }}}
- // {{{ rebuildDepsFile()
-
- function rebuildDB()
- {
- $depdb = array('depdb_version' => $this->depdb_version);
- $packages = $this->pear_reg->listPackages();
- foreach ($packages as $package) {
- $deps = $this->pear_reg->packageInfo($package, 'release_deps');
- $this->setPackageDep($depdb, $package, $deps);
- }
- print_r($depdb);
- $error = $this->_writeDepDB($depdb);
- if (PEAR::isError($error)) {
- return $error;
- }
- return true;
- }
-
- // }}}
- // {{{ & _getDepDB()
-
- function &_getDepDB()
- {
- if (!$fp = fopen($this->depdb_file, 'r')) {
- $err = $this->raiseError("Could not open dependencies file `".$this->depdb_file."'");
- return $err;
- }
- $data = unserialize(fread($fp, filesize($this->depdb_file)));
- fclose($fp);
- return $data;
- }
-
- // }}}
- // {{{ _writeDepDB()
-
- function _writeDepDB(&$deps)
- {
- if (PEAR::isError($e = $this->_lock(LOCK_EX))) {
- return $e;
- }
- if (!$fp = fopen($this->depdb_file, 'wb')) {
- $this->_unlock();
- return $this->raiseError("Could not open dependencies file `".$this->depfile."' for writting");
- }
- fwrite($fp, serialize($deps));
- fclose($fp);
- $this->_unlock();
- return true;
- }
-
- // }}}
- /*
- // {{{ removePackageDep()
- function removePackageDep($package)
- {
- $data = &$this->_depGetDepDB();
- if (PEAR::isError($data)) {
- return $data;
- }
- // Other packages depends on this package, can't be removed
- if (isset($data['deps'][$package])) {
- return $data['deps'][$package];
- }
- // The package depends on others, remove those dependencies
- if (isset($data['pkgs'][$package])) {
- foreach ($data['pkgs'][$package] as $pkg => $key) {
- // remove the dependency
- unset($data['deps'][$pkg][$key]);
- // if no more dependencies, remove the subject too
- if (!count($data['deps'][$pkg])) {
- unset($data['deps'][$pkg]);
- }
- }
- // remove the package from the index list
- unset($data['pkgs'][$package]);
- }
- return $this->_depWriteDepDB();
- }
- // }}}
- */
-
- // {{{ checkAction()
-
- function checkAction($action, $package, $new_version = null)
- {
- $depdb = &$this->_getDepDB();
- if (PEAR::isError($depdb)) {
- return $depdb;
- }
- $fails = '';
- switch($action) {
- case 'uninstall':
- // Other packages depends on this package, can't be removed
- if (isset($depdb['deps'][$package])) {
- foreach ($depdb['deps'][$package] as $dep) {
- if (!$dep['optional']) {
- $fails .= "Package '" . $dep['depend'] . "' depends on '$package'\n";
- }
- }
- return $fails;
- }
- return true;
- case 'install':
- case 'upgrade':
- // Other packages depend on this package, check deps. Ex:
- // <dep type='pkg' rel='lt' version='1.0'>Foo</dep> and we are trying to
- // update Foo to version 2.0
- if (isset($depdb['deps'][$package])) {
- foreach ($depdb['deps'][$package] as $dep) {
- $relation = $dep['rel'];
- if ($relation == 'not') {
- $fails .= "Package '" . $dep['depend'] . "' conflicts with '$package'\n";
- } elseif ($relation != 'has' && $new_version !== null) {
- if (!version_compare("$new_version", "{$dep['version']}", $relation) &&
- !$dep['optional']) {
- $fails .= "Package '" . $dep['depend'] . "' requires ".
- "$package " . $this->pear_dep->signOperator($relation) .
- " " . $dep['version'];
- }
- }
- }
- if (isset($fails)) {
- return $fails;
- }
- }
- return true;
- }
- }
-
- // }}}
- // {{{ commitAction()
-
- function commitAction($action, $package)
- {
-
- }
-
- // }}}
- // {{{ setPackageDep()
-
- /**
- * Update or insert a the dependencies of a package, prechecking
- * that the package won't break any dependency in the process
-
- The data structure is as follows:
- $dep_db = array(
- // Other packages depends on this packages
- 'deps' => array(
- 'Package Name' => array(
- 0 => array(
- // This package depends on 'Package Name'
- 'depend' => 'Package',
- // Which version 'Package' needs of 'Package Name'
- 'version' => '1.0',
- // The requirement (version_compare() operator)
- 'rel' => 'ge',
- // whether the dependency is optional
- 'optional' => true/false
- ),
- ),
- )
- // This packages are dependant on other packages
- 'pkgs' => array(
- 'Package Dependant' => array(
- // This is a index list with paths over the 'deps' array for quick
- // searching things like "what dependecies has this package?"
- // $dep_db['deps']['Package Name'][3]
- 'Package Name' => 3 // key in array ['deps']['Package Name']
- ),
- )
- )
-
- Note: It only supports package dependencies no other type
- */
-
- function setPackageDep(&$data, $package, $rel_deps = array())
- {
- // This package has no dependencies
- if (!is_array($rel_deps) || !count($rel_deps)) {
- return true;
- }
-
- // The package depends on others, register that
- foreach ($rel_deps as $dep) {
- // We only support deps of type 'pkg's
- if ($dep && $dep['type'] == 'pkg' && isset($dep['name'])) {
- $dep_name = strtolower($dep['name']);
- $write = array('depend' => $package,
- 'rel' => $dep['rel']);
- if ($dep['rel'] != 'has') {
- $write['version'] = $dep['version'];
- }
- if (isset($dep['optional']) && $dep['optional'] == 'yes') {
- $write['optional'] = true;
- } else {
- $write['optional'] = false;
- }
- settype($data['deps'][$dep_name], 'array');
-
- // The dependency already exists, update it
- if (isset($data['pkgs'][$package][$dep_name])) {
- $key = $data['pkgs'][$package][$dep_name];
- $data['deps'][$dep_name][$key] = $write;
-
- // New dependency, insert it
- } else {
- $key = count($data['deps'][$dep_name]);
- $data['deps'][$dep_name][$key] = $write;
- settype($data['pkgs'][$package], 'array');
- $data['pkgs'][$package][$dep_name] = $key;
- }
- }
- }
- return true;
- }
- // }}}
-}
-?>
diff --git a/pear/PEAR/Downloader.php b/pear/PEAR/Downloader.php
deleted file mode 100644
index 17ad4566a1..0000000000
--- a/pear/PEAR/Downloader.php
+++ /dev/null
@@ -1,672 +0,0 @@
-<?php
-//
-// +----------------------------------------------------------------------+
-// | PHP Version 5 |
-// +----------------------------------------------------------------------+
-// | Copyright (c) 1997-2004 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. |
-// +----------------------------------------------------------------------+
-// | Authors: Stig Bakken <ssb@php.net> |
-// | Tomas V.V.Cox <cox@idecnet.com> |
-// | Martin Jansen <mj@php.net> |
-// +----------------------------------------------------------------------+
-//
-// $Id$
-
-require_once 'PEAR/Common.php';
-require_once 'PEAR/Registry.php';
-require_once 'PEAR/Dependency.php';
-require_once 'PEAR/Remote.php';
-require_once 'System.php';
-
-
-define('PEAR_INSTALLER_OK', 1);
-define('PEAR_INSTALLER_FAILED', 0);
-define('PEAR_INSTALLER_SKIPPED', -1);
-define('PEAR_INSTALLER_ERROR_NO_PREF_STATE', 2);
-
-/**
- * Administration class used to download PEAR packages and maintain the
- * installed package database.
- *
- * @since PEAR 1.4
- * @author Greg Beaver <cellog@php.net>
- */
-class PEAR_Downloader extends PEAR_Common
-{
- /**
- * @var PEAR_Config
- * @access private
- */
- var $_config;
-
- /**
- * @var PEAR_Registry
- * @access private
- */
- var $_registry;
-
- /**
- * @var PEAR_Remote
- * @access private
- */
- var $_remote;
-
- /**
- * Preferred Installation State (snapshot, devel, alpha, beta, stable)
- * @var string|null
- * @access private
- */
- var $_preferredState;
-
- /**
- * Options from command-line passed to Install.
- *
- * Recognized options:<br />
- * - onlyreqdeps : install all required dependencies as well
- * - alldeps : install all dependencies, including optional
- * - installroot : base relative path to install files in
- * - force : force a download even if warnings would prevent it
- * @see PEAR_Command_Install
- * @access private
- * @var array
- */
- var $_options;
-
- /**
- * Downloaded Packages after a call to download().
- *
- * Format of each entry:
- *
- * <code>
- * array('pkg' => 'package_name', 'file' => '/path/to/local/file',
- * 'info' => array() // parsed package.xml
- * );
- * </code>
- * @access private
- * @var array
- */
- var $_downloadedPackages = array();
-
- /**
- * Packages slated for download.
- *
- * This is used to prevent downloading a package more than once should it be a dependency
- * for two packages to be installed.
- * Format of each entry:
- *
- * <pre>
- * array('package_name1' => parsed package.xml, 'package_name2' => parsed package.xml,
- * );
- * </pre>
- * @access private
- * @var array
- */
- var $_toDownload = array();
-
- /**
- * Array of every package installed, with names lower-cased.
- *
- * Format:
- * <code>
- * array('package1' => 0, 'package2' => 1, );
- * </code>
- * @var array
- */
- var $_installed = array();
-
- /**
- * @var array
- * @access private
- */
- var $_errorStack = array();
-
- // {{{ PEAR_Downloader()
-
- function PEAR_Downloader(&$ui, $options, &$config)
- {
- $this->_options = $options;
- $this->_config = &$config;
- $this->_preferredState = $this->_config->get('preferred_state');
- $this->ui = &$ui;
- if (!$this->_preferredState) {
- // don't inadvertantly use a non-set preferred_state
- $this->_preferredState = null;
- }
-
- $php_dir = $this->_config->get('php_dir');
- if (isset($this->_options['installroot'])) {
- if (substr($this->_options['installroot'], -1) == DIRECTORY_SEPARATOR) {
- $this->_options['installroot'] = substr($this->_options['installroot'], 0, -1);
- }
- $php_dir = $this->_prependPath($php_dir, $this->_options['installroot']);
- }
- $this->_registry = &new PEAR_Registry($php_dir);
- $this->_remote = &new PEAR_Remote($config);
-
- if (isset($this->_options['alldeps']) || isset($this->_options['onlyreqdeps'])) {
- $this->_installed = $this->_registry->listPackages();
- array_walk($this->_installed, create_function('&$v,$k','$v = strtolower($v);'));
- $this->_installed = array_flip($this->_installed);
- }
- parent::PEAR_Common();
- }
-
- // }}}
- // {{{ configSet()
- function configSet($key, $value, $layer = 'user')
- {
- $this->_config->set($key, $value, $layer);
- $this->_preferredState = $this->_config->get('preferred_state');
- if (!$this->_preferredState) {
- // don't inadvertantly use a non-set preferred_state
- $this->_preferredState = null;
- }
- }
-
- // }}}
- // {{{ setOptions()
- function setOptions($options)
- {
- $this->_options = $options;
- }
-
- // }}}
- // {{{ _downloadFile()
- /**
- * @param string filename to download
- * @param string version/state
- * @param string original value passed to command-line
- * @param string|null preferred state (snapshot/devel/alpha/beta/stable)
- * Defaults to configuration preferred state
- * @return null|PEAR_Error|string
- * @access private
- */
- function _downloadFile($pkgfile, $version, $origpkgfile, $state = null)
- {
- if (is_null($state)) {
- $state = $this->_preferredState;
- }
- // {{{ check the package filename, and whether it's already installed
- $need_download = false;
- if (preg_match('#^(http|ftp)://#', $pkgfile)) {
- $need_download = true;
- } elseif (!@is_file($pkgfile)) {
- if ($this->validPackageName($pkgfile)) {
- if ($this->_registry->packageExists($pkgfile)) {
- if (empty($this->_options['upgrade']) && empty($this->_options['force'])) {
- $errors[] = "$pkgfile already installed";
- return;
- }
- }
- $pkgfile = $this->getPackageDownloadUrl($pkgfile, $version);
- $need_download = true;
- } else {
- if (strlen($pkgfile)) {
- $errors[] = "Could not open the package file: $pkgfile";
- } else {
- $errors[] = "No package file given";
- }
- return;
- }
- }
- // }}}
-
- // {{{ Download package -----------------------------------------------
- if ($need_download) {
- $downloaddir = $this->_config->get('download_dir');
- if (empty($downloaddir)) {
- if (PEAR::isError($downloaddir = System::mktemp('-d'))) {
- return $downloaddir;
- }
- $this->log(3, '+ tmp dir created at ' . $downloaddir);
- }
- $callback = $this->ui ? array(&$this, '_downloadCallback') : null;
- $this->pushErrorHandling(PEAR_ERROR_RETURN);
- $file = $this->downloadHttp($pkgfile, $this->ui, $downloaddir, $callback);
- $this->popErrorHandling();
- if (PEAR::isError($file)) {
- if ($this->validPackageName($origpkgfile)) {
- if (!PEAR::isError($info = $this->_remote->call('package.info',
- $origpkgfile))) {
- if (!count($info['releases'])) {
- return $this->raiseError('Package ' . $origpkgfile .
- ' has no releases');
- } else {
- return $this->raiseError('No releases of preferred state "'
- . $state . '" exist for package ' . $origpkgfile .
- '. Use ' . $origpkgfile . '-state to install another' .
- ' state (like ' . $origpkgfile .'-beta)',
- PEAR_INSTALLER_ERROR_NO_PREF_STATE);
- }
- } else {
- return $pkgfile;
- }
- } else {
- return $this->raiseError($file);
- }
- }
- $pkgfile = $file;
- }
- // }}}
- return $pkgfile;
- }
- // }}}
- // {{{ getPackageDownloadUrl()
-
- function getPackageDownloadUrl($package, $version = null)
- {
- if ($version) {
- $package .= "-$version";
- }
- if ($this === null || $this->_config === null) {
- $package = "http://pear.php.net/get/$package";
- } else {
- $package = "http://" . $this->_config->get('master_server') .
- "/get/$package";
- }
- if (!extension_loaded("zlib")) {
- $package .= '?uncompress=yes';
- }
- return $package;
- }
-
- // }}}
- // {{{ extractDownloadFileName($pkgfile, &$version)
-
- function extractDownloadFileName($pkgfile, &$version)
- {
- if (@is_file($pkgfile)) {
- return $pkgfile;
- }
- // regex defined in Common.php
- if (preg_match(PEAR_COMMON_PACKAGE_DOWNLOAD_PREG, $pkgfile, $m)) {
- $version = (isset($m[3])) ? $m[3] : null;
- return $m[1];
- }
- $version = null;
- return $pkgfile;
- }
-
- // }}}
-
- // }}}
- // {{{ getDownloadedPackages()
-
- /**
- * Retrieve a list of downloaded packages after a call to {@link download()}.
- *
- * Also resets the list of downloaded packages.
- * @return array
- */
- function getDownloadedPackages()
- {
- $ret = $this->_downloadedPackages;
- $this->_downloadedPackages = array();
- $this->_toDownload = array();
- return $ret;
- }
-
- // }}}
- // {{{ download()
-
- /**
- * Download any files and their dependencies, if necessary
- *
- * BC-compatible method name
- * @param array a mixed list of package names, local files, or package.xml
- */
- function download($packages)
- {
- return $this->doDownload($packages);
- }
-
- // }}}
- // {{{ doDownload()
-
- /**
- * Download any files and their dependencies, if necessary
- *
- * @param array a mixed list of package names, local files, or package.xml
- */
- function doDownload($packages)
- {
- $mywillinstall = array();
- $state = $this->_preferredState;
-
- // {{{ download files in this list if necessary
- foreach($packages as $pkgfile) {
- $need_download = false;
- if (!is_file($pkgfile)) {
- if (preg_match('#^(http|ftp)://#', $pkgfile)) {
- $need_download = true;
- }
- $pkgfile = $this->_downloadNonFile($pkgfile);
- if (PEAR::isError($pkgfile)) {
- return $pkgfile;
- }
- if ($pkgfile === false) {
- continue;
- }
- } // end is_file()
-
- $tempinfo = $this->infoFromAny($pkgfile);
- if ($need_download) {
- $this->_toDownload[] = $tempinfo['package'];
- }
- if (isset($this->_options['alldeps']) || isset($this->_options['onlyreqdeps'])) {
- // ignore dependencies if there are any errors
- if (!PEAR::isError($tempinfo)) {
- $mywillinstall[strtolower($tempinfo['package'])] = @$tempinfo['release_deps'];
- }
- }
- $this->_downloadedPackages[] = array('pkg' => $tempinfo['package'],
- 'file' => $pkgfile, 'info' => $tempinfo);
- } // end foreach($packages)
- // }}}
-
- // {{{ extract dependencies from downloaded files and then download
- // them if necessary
- if (isset($this->_options['alldeps']) || isset($this->_options['onlyreqdeps'])) {
- $deppackages = array();
- foreach ($mywillinstall as $package => $alldeps) {
- if (!is_array($alldeps)) {
- // there are no dependencies
- continue;
- }
- foreach($alldeps as $info) {
- if ($info['type'] != 'pkg') {
- continue;
- }
- $ret = $this->_processDependency($package, $info, $mywillinstall);
- if ($ret === false) {
- continue;
- }
- if (PEAR::isError($ret)) {
- return $ret;
- }
- $deppackages[] = $ret;
- } // foreach($alldeps
- }
-
- if (count($deppackages)) {
- $this->doDownload($deppackages);
- }
- } // }}} if --alldeps or --onlyreqdeps
- }
-
- // }}}
- // {{{ _downloadNonFile($pkgfile)
-
- /**
- * @return false|PEAR_Error|string false if loop should be broken out of,
- * string if the file was downloaded,
- * PEAR_Error on exception
- * @access private
- */
- function _downloadNonFile($pkgfile)
- {
- $origpkgfile = $pkgfile;
- $state = null;
- $pkgfile = $this->extractDownloadFileName($pkgfile, $version);
- if (preg_match('#^(http|ftp)://#', $pkgfile)) {
- return $this->_downloadFile($pkgfile, $version, $origpkgfile);
- }
- if (!$this->validPackageName($pkgfile)) {
- return $this->raiseError("Package name '$pkgfile' not valid");
- }
- // ignore packages that are installed unless we are upgrading
- $curinfo = $this->_registry->packageInfo($pkgfile);
- if ($this->_registry->packageExists($pkgfile)
- && empty($this->_options['upgrade']) && empty($this->_options['force'])) {
- $this->log(0, "Package '{$curinfo['package']}' already installed, skipping");
- return false;
- }
- if (in_array($pkgfile, $this->_toDownload)) {
- return false;
- }
- $releases = $this->_remote->call('package.info', $pkgfile, 'releases', true);
- if (!count($releases)) {
- return $this->raiseError("No releases found for package '$pkgfile'");
- }
- // Want a specific version/state
- if ($version !== null) {
- // Passed Foo-1.2
- if ($this->validPackageVersion($version)) {
- if (!isset($releases[$version])) {
- return $this->raiseError("No release with version '$version' found for '$pkgfile'");
- }
- // Passed Foo-alpha
- } elseif (in_array($version, $this->getReleaseStates())) {
- $state = $version;
- $version = 0;
- foreach ($releases as $ver => $inf) {
- if ($inf['state'] == $state && version_compare("$version", "$ver") < 0) {
- $version = $ver;
- break;
- }
- }
- if ($version == 0) {
- return $this->raiseError("No release with state '$state' found for '$pkgfile'");
- }
- // invalid suffix passed
- } else {
- return $this->raiseError("Invalid suffix '-$version', be sure to pass a valid PEAR ".
- "version number or release state");
- }
- // Guess what to download
- } else {
- $states = $this->betterStates($this->_preferredState, true);
- $possible = false;
- $version = 0;
- $higher_version = 0;
- $prev_hi_ver = 0;
- foreach ($releases as $ver => $inf) {
- if (in_array($inf['state'], $states) && version_compare("$version", "$ver") < 0) {
- $version = $ver;
- break;
- } else {
- $ver = (string)$ver;
- if (version_compare($prev_hi_ver, $ver) < 0) {
- $prev_hi_ver = $higher_version = $ver;
- }
- }
- }
- if ($version === 0 && !isset($this->_options['force'])) {
- return $this->raiseError('No release with state equal to: \'' . implode(', ', $states) .
- "' found for '$pkgfile'");
- } elseif ($version === 0) {
- $this->log(0, "Warning: $pkgfile is state '" . $releases[$higher_version]['state'] . "' which is less stable " .
- "than state '$this->_preferredState'");
- }
- }
- // Check if we haven't already the version
- if (empty($this->_options['force']) && !is_null($curinfo)) {
- if ($curinfo['version'] == $version) {
- $this->log(0, "Package '{$curinfo['package']}-{$curinfo['version']}' already installed, skipping");
- return false;
- } elseif (version_compare("$version", "{$curinfo['version']}") < 0) {
- $this->log(0, "Package '{$curinfo['package']}' version '{$curinfo['version']}' " .
- " is installed and {$curinfo['version']} is > requested '$version', skipping");
- return false;
- }
- }
- $this->_toDownload[] = $pkgfile;
- return $this->_downloadFile($pkgfile, $version, $origpkgfile, $state);
- }
-
- // }}}
- // {{{ _processDependency($package, $info, $mywillinstall)
-
- /**
- * Process a dependency, download if necessary
- * @param array dependency information from PEAR_Remote call
- * @param array packages that will be installed in this iteration
- * @return false|string|PEAR_Error
- * @access private
- * @todo Add test for relation 'lt'/'le' -> make sure that the dependency requested is
- * in fact lower than the required value. This will be very important for BC dependencies
- */
- function _processDependency($package, $info, $mywillinstall)
- {
- $state = $this->_preferredState;
- if (!isset($this->_options['alldeps']) && isset($info['optional']) &&
- $info['optional'] == 'yes') {
- // skip optional deps
- $this->log(0, "skipping Package '$package' optional dependency '$info[name]'");
- return false;
- }
- // {{{ get releases
- $releases = $this->_remote->call('package.info', $info['name'], 'releases', true);
- if (PEAR::isError($releases)) {
- return $releases;
- }
- if (!count($releases)) {
- if (!isset($this->_installed[strtolower($info['name'])])) {
- $this->pushError("Package '$package' dependency '$info[name]' ".
- "has no releases");
- }
- return false;
- }
- $found = false;
- $save = $releases;
- while(count($releases) && !$found) {
- if (!empty($state) && $state != 'any') {
- list($release_version, $release) = each($releases);
- if ($state != $release['state'] &&
- !in_array($release['state'], $this->betterStates($state)))
- {
- // drop this release - it ain't stable enough
- array_shift($releases);
- } else {
- $found = true;
- }
- } else {
- $found = true;
- }
- }
- if (!count($releases) && !$found) {
- $get = array();
- foreach($save as $release) {
- $get = array_merge($get,
- $this->betterStates($release['state'], true));
- }
- $savestate = array_shift($get);
- $this->pushError( "Release for '$package' dependency '$info[name]' " .
- "has state '$savestate', requires '$state'");
- return false;
- }
- if (in_array(strtolower($info['name']), $this->_toDownload) ||
- isset($mywillinstall[strtolower($info['name'])])) {
- // skip upgrade check for packages we will install
- return false;
- }
- if (!isset($this->_installed[strtolower($info['name'])])) {
- // check to see if we can install the specific version required
- if ($info['rel'] == 'eq') {
- return $info['name'] . '-' . $info['version'];
- }
- // skip upgrade check for packages we don't have installed
- return $info['name'];
- }
- // }}}
-
- // {{{ see if a dependency must be upgraded
- $inst_version = $this->_registry->packageInfo($info['name'], 'version');
- if (!isset($info['version'])) {
- // this is a rel='has' dependency, check against latest
- if (version_compare($release_version, $inst_version, 'le')) {
- return false;
- } else {
- return $info['name'];
- }
- }
- if (version_compare($info['version'], $inst_version, 'le')) {
- // installed version is up-to-date
- return false;
- }
- return $info['name'];
- }
-
- // }}}
- // {{{ _downloadCallback()
-
- function _downloadCallback($msg, $params = null)
- {
- switch ($msg) {
- case 'saveas':
- $this->log(1, "downloading $params ...");
- break;
- case 'done':
- $this->log(1, '...done: ' . number_format($params, 0, '', ',') . ' bytes');
- break;
- case 'bytesread':
- static $bytes;
- if (empty($bytes)) {
- $bytes = 0;
- }
- if (!($bytes % 10240)) {
- $this->log(1, '.', false);
- }
- $bytes += $params;
- break;
- case 'start':
- $this->log(1, "Starting to download {$params[0]} (".number_format($params[1], 0, '', ',')." bytes)");
- break;
- }
- if (method_exists($this->ui, '_downloadCallback'))
- $this->ui->_downloadCallback($msg, $params);
- }
-
- // }}}
- // {{{ _prependPath($path, $prepend)
-
- function _prependPath($path, $prepend)
- {
- if (strlen($prepend) > 0) {
- if (OS_WINDOWS && preg_match('/^[a-z]:/i', $path)) {
- $path = $prepend . substr($path, 2);
- } else {
- $path = $prepend . $path;
- }
- }
- return $path;
- }
- // }}}
- // {{{ pushError($errmsg, $code)
-
- /**
- * @param string
- * @param integer
- */
- function pushError($errmsg, $code = -1)
- {
- array_push($this->_errorStack, array($errmsg, $code));
- }
-
- // }}}
- // {{{ getErrorMsgs()
-
- function getErrorMsgs()
- {
- $msgs = array();
- $errs = $this->_errorStack;
- foreach ($errs as $err) {
- $msgs[] = $err[0];
- }
- $this->_errorStack = array();
- return $msgs;
- }
-
- // }}}
-}
-// }}}
-
-?>
diff --git a/pear/PEAR/ErrorStack.php b/pear/PEAR/ErrorStack.php
deleted file mode 100644
index 6f44f4d686..0000000000
--- a/pear/PEAR/ErrorStack.php
+++ /dev/null
@@ -1,970 +0,0 @@
-<?php
-//
-// +----------------------------------------------------------------------+
-// | PHP Version 5 |
-// +----------------------------------------------------------------------+
-// | Copyright (c) 1997-2004 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: Gregory Beaver <cellog@php.net> |
-// | |
-// +----------------------------------------------------------------------+
-//
-// $Id$
-
-/**
- * Error Stack Implementation
- *
- * This is an incredibly simple implementation of a very complex error handling
- * facility. It contains the ability
- * to track multiple errors from multiple packages simultaneously. In addition,
- * it can track errors of many levels, save data along with the error, context
- * information such as the exact file, line number, class and function that
- * generated the error, and if necessary, it can raise a traditional PEAR_Error.
- * It has built-in support for PEAR::Log, to log errors as they occur
- *
- * Since version 0.2alpha, it is also possible to selectively ignore errors,
- * through the use of an error callback, see {@link pushCallback()}
- *
- * Since version 0.3alpha, it is possible to specify the exception class
- * returned from {@link push()}
- * @author Greg Beaver <cellog@php.net>
- * @version 0.6alpha
- * @package PEAR_ErrorStack
- * @category Debugging
- * @license http://www.php.net/license/3_0.txt PHP License v3.0
- */
-
-/**
- * Singleton storage
- *
- * Format:
- * <pre>
- * array(
- * 'package1' => PEAR_ErrorStack object,
- * 'package2' => PEAR_ErrorStack object,
- * ...
- * )
- * </pre>
- * @access private
- * @global array $GLOBALS['_PEAR_ERRORSTACK_SINGLETON']
- */
-$GLOBALS['_PEAR_ERRORSTACK_SINGLETON'] = array();
-
-/**
- * Global error callback (default)
- *
- * This is only used if set to non-false. * is the default callback for
- * all packages, whereas specific packages may set a default callback
- * for all instances, regardless of whether they are a singleton or not.
- *
- * To exclude non-singletons, only set the local callback for the singleton
- * @see PEAR_ErrorStack::setDefaultCallback()
- * @access private
- * @global array $GLOBALS['_PEAR_ERRORSTACK_DEFAULT_CALLBACK']
- */
-$GLOBALS['_PEAR_ERRORSTACK_DEFAULT_CALLBACK'] = array(
- '*' => false,
-);
-
-/**
- * Global Log object (default)
- *
- * This is only used if set to non-false. Use to set a default log object for
- * all stacks, regardless of instantiation order or location
- * @see PEAR_ErrorStack::setDefaultLogger()
- * @access private
- * @global array $GLOBALS['_PEAR_ERRORSTACK_DEFAULT_LOGGER']
- */
-$GLOBALS['_PEAR_ERRORSTACK_DEFAULT_LOGGER'] = false;
-
-/**
- * Global Overriding Callback
- *
- * This callback will override any error callbacks that specific loggers have set.
- * Use with EXTREME caution
- * @see PEAR_ErrorStack::staticPushCallback()
- * @access private
- * @global array $GLOBALS['_PEAR_ERRORSTACK_DEFAULT_LOGGER']
- */
-$GLOBALS['_PEAR_ERRORSTACK_OVERRIDE_CALLBACK'] = array();
-
-/**#@+
- * One of four possible return values from the error Callback
- * @see PEAR_ErrorStack::_errorCallback()
- */
-/**
- * If this is returned, then the error will be both pushed onto the stack
- * and logged.
- */
-define('PEAR_ERRORSTACK_PUSHANDLOG', 1);
-/**
- * If this is returned, then the error will only be pushed onto the stack,
- * and not logged.
- */
-define('PEAR_ERRORSTACK_PUSH', 2);
-/**
- * If this is returned, then the error will only be logged, but not pushed
- * onto the error stack.
- */
-define('PEAR_ERRORSTACK_LOG', 3);
-/**
- * If this is returned, then the error is completely ignored.
- */
-define('PEAR_ERRORSTACK_IGNORE', 4);
-/**#@-*/
-
-/**
- * Error code for an attempt to instantiate a non-class as a PEAR_ErrorStack in
- * the singleton method.
- */
-define('PEAR_ERRORSTACK_ERR_NONCLASS', 1);
-
-/**
- * Error code for an attempt to pass an object into {@link PEAR_ErrorStack::getMessage()}
- * that has no __toString() method
- */
-define('PEAR_ERRORSTACK_ERR_OBJTOSTRING', 2);
-/**
- * Error Stack Implementation
- *
- * Usage:
- * <code>
- * // global error stack
- * $global_stack = &PEAR_ErrorStack::singleton('MyPackage');
- * // local error stack
- * $local_stack = new PEAR_ErrorStack('MyPackage');
- * </code>
- * @copyright 2004 Gregory Beaver
- * @package PEAR_ErrorStack
- * @license http://www.php.net/license/3_0.txt PHP License
- */
-class PEAR_ErrorStack {
- /**
- * Errors are stored in the order that they are pushed on the stack.
- * @since 0.4alpha Errors are no longer organized by error level.
- * This renders pop() nearly unusable, and levels could be more easily
- * handled in a callback anyway
- * @var array
- * @access private
- */
- var $_errors = array();
-
- /**
- * Storage of errors by level.
- *
- * Allows easy retrieval and deletion of only errors from a particular level
- * @since PEAR 1.4.0dev
- * @var array
- * @access private
- */
- var $_errorsByLevel = array();
-
- /**
- * Package name this error stack represents
- * @var string
- * @access protected
- */
- var $_package;
-
- /**
- * Determines whether a PEAR_Error is thrown upon every error addition
- * @var boolean
- * @access private
- */
- var $_compat = false;
-
- /**
- * If set to a valid callback, this will be used to generate the error
- * message from the error code, otherwise the message passed in will be
- * used
- * @var false|string|array
- * @access private
- */
- var $_msgCallback = false;
-
- /**
- * If set to a valid callback, this will be used to generate the error
- * context for an error. For PHP-related errors, this will be a file
- * and line number as retrieved from debug_backtrace(), but can be
- * customized for other purposes. The error might actually be in a separate
- * configuration file, or in a database query.
- * @var false|string|array
- * @access protected
- */
- var $_contextCallback = false;
-
- /**
- * If set to a valid callback, this will be called every time an error
- * is pushed onto the stack. The return value will be used to determine
- * whether to allow an error to be pushed or logged.
- *
- * The return value must be one an PEAR_ERRORSTACK_* constant
- * @see PEAR_ERRORSTACK_PUSHANDLOG, PEAR_ERRORSTACK_PUSH, PEAR_ERRORSTACK_LOG
- * @var false|string|array
- * @access protected
- */
- var $_errorCallback = array();
-
- /**
- * PEAR::Log object for logging errors
- * @var false|Log
- * @access protected
- */
- var $_logger = false;
-
- /**
- * Class name to use for a PHP 5 exception that will be returned
- * @var string
- * @access protected
- */
- var $_exceptionClass = 'Exception';
-
- /**
- * Error messages - designed to be overridden
- * @var array
- * @abstract
- */
- var $_errorMsgs = array();
-
- /**
- * Set up a new error stack
- *
- * @param string $package name of the package this error stack represents
- * @param callback $msgCallback callback used for error message generation
- * @param callback $contextCallback callback used for context generation,
- * defaults to {@link getFileLine()}
- * @param boolean $throwPEAR_Error
- * @param string $exceptionClass exception class to instantiate if
- * in PHP 5
- */
- function PEAR_ErrorStack($package, $msgCallback = false, $contextCallback = false,
- $throwPEAR_Error = false, $exceptionClass = null)
- {
- $this->_package = $package;
- $this->setMessageCallback($msgCallback);
- $this->setContextCallback($contextCallback);
- $this->_compat = $throwPEAR_Error;
- // this allows child classes to simply redefine $this->_exceptionClass
- if (!is_null($exceptionClass)) {
- $this->_exceptionClass = $exceptionClass;
- }
- }
-
- /**
- * Return a single error stack for this package.
- *
- * Note that all parameters are ignored if the stack for package $package
- * has already been instantiated
- * @param string $package name of the package this error stack represents
- * @param callback $msgCallback callback used for error message generation
- * @param callback $contextCallback callback used for context generation,
- * defaults to {@link getFileLine()}
- * @param boolean $throwPEAR_Error
- * @param string $exceptionClass exception class to instantiate if
- * in PHP 5
- * @param string $stackClass class to instantiate
- * @static
- * @return PEAR_ErrorStack
- */
- function &singleton($package, $msgCallback = false, $contextCallback = false,
- $throwPEAR_Error = false, $exceptionClass = null,
- $stackClass = 'PEAR_ErrorStack')
- {
- if (isset($GLOBALS['_PEAR_ERRORSTACK_SINGLETON'][$package])) {
- return $GLOBALS['_PEAR_ERRORSTACK_SINGLETON'][$package];
- }
- if (!class_exists($stackClass)) {
- $trace = debug_backtrace();
- PEAR_ErrorStack::staticPush('PEAR_ErrorStack', PEAR_ERRORSTACK_ERR_NONCLASS,
- 'exception', array('stackclass' => $stackClass),
- 'stack class "%stackclass%" is not a valid class name (should be like PEAR_ErrorStack)',
- false, $trace);
- }
- return $GLOBALS['_PEAR_ERRORSTACK_SINGLETON'][$package] =
- &new $stackClass($package, $msgCallback, $contextCallback, $throwPEAR_Error,
- $exceptionClass);
- }
-
- /**
- * Internal error handler for PEAR_ErrorStack class
- *
- * Dies if the error is an exception (and would have died anyway)
- * @access private
- */
- function _handleError($err)
- {
- if ($err['level'] == 'exception') {
- $message = $err['message'];
- if (isset($_SERVER['REQUEST_URI'])) {
- echo '<br />';
- } else {
- echo "\n";
- }
- var_dump($err['context']);
- die($message);
- }
- }
-
- /**
- * Set up a PEAR::Log object for all error stacks that don't have one
- * @param Log $log
- * @static
- */
- function setDefaultLogger(&$log)
- {
- $GLOBALS['_PEAR_ERRORSTACK_DEFAULT_LOGGER'] = &$log;
- }
-
- /**
- * Set up a PEAR::Log object for this error stack
- * @param Log $log
- */
- function setLogger(&$log)
- {
- $this->_logger = &$log;
- }
-
- /**
- * Set an error code => error message mapping callback
- *
- * This method sets the callback that can be used to generate error
- * messages for any instance
- * @param array|string Callback function/method
- */
- function setMessageCallback($msgCallback)
- {
- if (!$msgCallback) {
- $this->_msgCallback = array(&$this, 'getErrorMessage');
- } else {
- if (is_callable($msgCallback)) {
- $this->_msgCallback = $msgCallback;
- }
- }
- }
-
- /**
- * Get an error code => error message mapping callback
- *
- * This method returns the current callback that can be used to generate error
- * messages
- * @return array|string|false Callback function/method or false if none
- */
- function getMessageCallback()
- {
- return $this->_msgCallback;
- }
-
- /**
- * Sets a default callback to be used by all error stacks
- *
- * This method sets the callback that can be used to generate error
- * messages for a singleton
- * @param array|string Callback function/method
- * @param string Package name, or false for all packages
- * @static
- */
- function setDefaultCallback($callback = false, $package = false)
- {
- if (!is_callable($callback)) {
- $callback = false;
- }
- $package = $package ? $package : '*';
- $GLOBALS['_PEAR_ERRORSTACK_DEFAULT_CALLBACK'][$package] = $callback;
- }
-
- /**
- * Set an error code => error message mapping callback
- *
- * This method sets the callback that can be used to generate error
- * messages for any PEAR_ErrorStack instance
- * @param array|string Callback function/method
- */
- function setContextCallback($contextCallback)
- {
- if (!$contextCallback) {
- $this->_contextCallback = array(&$this, 'getFileLine');
- } else {
- if (is_callable($contextCallback)) {
- $this->_contextCallback = $contextCallback;
- }
- }
- }
-
- /**
- * Set an error Callback
- * If set to a valid callback, this will be called every time an error
- * is pushed onto the stack. The return value will be used to determine
- * whether to allow an error to be pushed or logged.
- *
- * The return value must be one of the ERRORSTACK_* constants.
- *
- * This functionality can be used to emulate PEAR's pushErrorHandling, and
- * the PEAR_ERROR_CALLBACK mode, without affecting the integrity of
- * the error stack or logging
- * @see PEAR_ERRORSTACK_PUSHANDLOG, PEAR_ERRORSTACK_PUSH, PEAR_ERRORSTACK_LOG
- * @see popCallback()
- * @param string|array $cb
- */
- function pushCallback($cb)
- {
- array_push($this->_errorCallback, $cb);
- }
-
- /**
- * Remove a callback from the error callback stack
- * @see pushCallback()
- * @return array|string|false
- */
- function popCallback()
- {
- if (!count($this->_errorCallback)) {
- return false;
- }
- return array_pop($this->_errorCallback);
- }
-
- /**
- * Set a temporary overriding error callback for every package error stack
- *
- * Use this to temporarily disable all existing callbacks (can be used
- * to emulate the @ operator, for instance)
- * @see PEAR_ERRORSTACK_PUSHANDLOG, PEAR_ERRORSTACK_PUSH, PEAR_ERRORSTACK_LOG
- * @see staticPopCallback(), pushCallback()
- * @param string|array $cb
- * @static
- */
- function staticPushCallback($cb)
- {
- array_push($GLOBALS['_PEAR_ERRORSTACK_OVERRIDE_CALLBACK'], $cb);
- }
-
- /**
- * Remove a temporary overriding error callback
- * @see staticPushCallback()
- * @return array|string|false
- * @static
- */
- function staticPopCallback()
- {
- array_pop($GLOBALS['_PEAR_ERRORSTACK_OVERRIDE_CALLBACK']);
- if (!is_array($GLOBALS['_PEAR_ERRORSTACK_OVERRIDE_CALLBACK'])) {
- $GLOBALS['_PEAR_ERRORSTACK_OVERRIDE_CALLBACK'] = array();
- }
- }
-
- /**
- * Add an error to the stack
- *
- * If the message generator exists, it is called with 2 parameters.
- * - the current Error Stack object
- * - an array that is in the same format as an error. Available indices
- * are 'code', 'package', 'time', 'params', 'level', and 'context'
- *
- * Next, if the error should contain context information, this is
- * handled by the context grabbing method.
- * Finally, the error is pushed onto the proper error stack
- * @param int $code Package-specific error code
- * @param string $level Error level. This is NOT spell-checked
- * @param array $params associative array of error parameters
- * @param string $msg Error message, or a portion of it if the message
- * is to be generated
- * @param array $repackage If this error re-packages an error pushed by
- * another package, place the array returned from
- * {@link pop()} in this parameter
- * @param array $backtrace Protected parameter: use this to pass in the
- * {@link debug_backtrace()} that should be used
- * to find error context
- * @return PEAR_Error|array|Exception
- * if compatibility mode is on, a PEAR_Error is also
- * thrown. If the class Exception exists, then one
- * is returned to allow code like:
- * <code>
- * throw ($stack->push(MY_ERROR_CODE, 'error', array('username' => 'grob')));
- * </code>
- *
- * The errorData property of the exception class will be set to the array
- * that would normally be returned. If a PEAR_Error is returned, the userinfo
- * property is set to the array
- *
- * Otherwise, an array is returned in this format:
- * <code>
- * array(
- * 'code' => $code,
- * 'params' => $params,
- * 'package' => $this->_package,
- * 'level' => $level,
- * 'time' => time(),
- * 'context' => $context,
- * 'message' => $msg,
- * //['repackage' => $err] repackaged error array
- * );
- * </code>
- */
- function push($code, $level = 'error', $params = array(), $msg = false,
- $repackage = false, $backtrace = false)
- {
- $context = false;
- // grab error context
- if ($this->_contextCallback) {
- if (!$backtrace) {
- $backtrace = debug_backtrace();
- }
- $context = call_user_func($this->_contextCallback, $code, $params, $backtrace);
- }
-
- // save error
- $time = explode(' ', microtime());
- $time = $time[1] + $time[0];
- $err = array(
- 'code' => $code,
- 'params' => $params,
- 'package' => $this->_package,
- 'level' => $level,
- 'time' => $time,
- 'context' => $context,
- 'message' => $msg,
- );
-
- // set up the error message, if necessary
- if ($this->_msgCallback) {
- $msg = call_user_func_array($this->_msgCallback,
- array(&$this, $err));
- $err['message'] = $msg;
- }
-
-
- if ($repackage) {
- $err['repackage'] = $repackage;
- }
- $push = $log = true;
- // try the overriding callback first
- $callback = $this->staticPopCallback();
- if ($callback) {
- $this->staticPushCallback($callback);
- }
- if (!is_callable($callback)) {
- // try the local callback next
- $callback = $this->popCallback();
- if (is_callable($callback)) {
- $this->pushCallback($callback);
- } else {
- // try the default callback
- $callback = isset($GLOBALS['_PEAR_ERRORSTACK_DEFAULT_CALLBACK'][$this->_package]) ?
- $GLOBALS['_PEAR_ERRORSTACK_DEFAULT_CALLBACK'][$this->_package] :
- $GLOBALS['_PEAR_ERRORSTACK_DEFAULT_CALLBACK']['*'];
- }
- }
- if (is_callable($callback)) {
- switch(call_user_func($callback, $err)){
- case PEAR_ERRORSTACK_IGNORE:
- return $err;
- break;
- case PEAR_ERRORSTACK_PUSH:
- $log = false;
- break;
- case PEAR_ERRORSTACK_LOG:
- $push = false;
- break;
- // anything else returned has the same effect as pushandlog
- }
- }
- if ($push) {
- array_unshift($this->_errors, $err);
- $this->_errorsByLevel[$err['level']][] = &$this->_errors[0];
- }
- if ($log) {
- if ($this->_logger || $GLOBALS['_PEAR_ERRORSTACK_DEFAULT_LOGGER']) {
- $this->_log($err);
- }
- }
- if ($this->_compat && $push) {
- return $this->raiseError($msg, $code, null, null, $err);
- }
- if (class_exists($this->_exceptionClass)) {
- $exception = $this->_exceptionClass;
- if (is_string($msg) && is_numeric($code)) {
- $code = $code + 0;
- }
- $ret = new $exception($msg, $code);
- $ret->errorData = $err;
- return $ret;
- }
- return $err;
- }
-
- /**
- * Static version of {@link push()}
- *
- * @param string $package Package name this error belongs to
- * @param int $code Package-specific error code
- * @param string $level Error level. This is NOT spell-checked
- * @param array $params associative array of error parameters
- * @param string $msg Error message, or a portion of it if the message
- * is to be generated
- * @param array $repackage If this error re-packages an error pushed by
- * another package, place the array returned from
- * {@link pop()} in this parameter
- * @param array $backtrace Protected parameter: use this to pass in the
- * {@link debug_backtrace()} that should be used
- * to find error context
- * @return PEAR_Error|null|Exception
- * if compatibility mode is on, a PEAR_Error is also
- * thrown. If the class Exception exists, then one
- * is returned to allow code like:
- * <code>
- * throw ($stack->push(MY_ERROR_CODE, 'error', array('username' => 'grob')));
- * </code>
- * @static
- */
- function staticPush($package, $code, $level = 'error', $params = array(),
- $msg = false, $repackage = false, $backtrace = false)
- {
- $s = &PEAR_ErrorStack::singleton($package);
- if ($s->_contextCallback) {
- if (!$backtrace) {
- $backtrace = debug_backtrace();
- }
- }
- return $s->push($code, $level, $params, $msg, $repackage, $backtrace);
- }
-
- /**
- * Log an error using PEAR::Log
- * @param array $err Error array
- * @param array $levels Error level => Log constant map
- * @access protected
- */
- function _log($err, $levels = array(
- 'exception' => PEAR_LOG_CRIT,
- 'alert' => PEAR_LOG_ALERT,
- 'critical' => PEAR_LOG_CRIT,
- 'error' => PEAR_LOG_ERR,
- 'warning' => PEAR_LOG_WARNING,
- 'notice' => PEAR_LOG_NOTICE,
- 'info' => PEAR_LOG_INFO,
- 'debug' => PEAR_LOG_DEBUG))
- {
- if (isset($levels[$err['level']])) {
- $level = $levels[$err['level']];
- } else {
- $level = PEAR_LOG_INFO;
- }
- if ($this->_logger) {
- $this->_logger->log($err['message'], $level, $err);
- } else {
- $GLOBALS['_PEAR_ERRORSTACK_DEFAULT_LOGGER']->log($err['message'], $level, $err);
- }
- }
-
-
- /**
- * Pop an error off of the error stack
- *
- * @return false|array
- * @since 0.4alpha it is no longer possible to specify a specific error
- * level to return - the last error pushed will be returned, instead
- */
- function pop()
- {
- return @array_shift($this->_errors);
- }
-
- /**
- * Determine whether there are any errors on the stack
- * @param string|array Level name. Use to determine if any errors
- * of level (string), or levels (array) have been pushed
- * @return boolean
- */
- function hasErrors($level = false)
- {
- if ($level) {
- return isset($this->_errorsByLevel[$level]);
- }
- return count($this->_errors);
- }
-
- /**
- * Retrieve all errors since last purge
- *
- * @param boolean set in order to empty the error stack
- * @param string level name, to return only errors of a particular severity
- * @return array
- */
- function getErrors($purge = false, $level = false)
- {
- if (!$purge) {
- if ($level) {
- if (!isset($this->_errorsByLevel[$level])) {
- return array();
- } else {
- return $this->_errorsByLevel[$level];
- }
- } else {
- return $this->_errors;
- }
- }
- if ($level) {
- $ret = $this->_errorsByLevel[$level];
- foreach ($this->_errorsByLevel[$level] as $i => $unused) {
- // entries are references to the $_errors array
- $this->_errorsByLevel[$level][$i] = false;
- }
- // array_filter removes all entries === false
- $this->_errors = array_filter($this->_errors);
- unset($this->_errorsByLevel[$level]);
- return $ret;
- }
- $ret = $this->_errors;
- $this->_errors = array();
- $this->_errorsByLevel = array();
- return $ret;
- }
-
- /**
- * Determine whether there are any errors on a single error stack, or on any error stack
- *
- * The optional parameter can be used to test the existence of any errors without the need of
- * singleton instantiation
- * @param string|false Package name to check for errors
- * @param string Level name to check for a particular severity
- * @return boolean
- * @static
- */
- function staticHasErrors($package = false, $level = false)
- {
- if ($package) {
- if (!isset($GLOBALS['_PEAR_ERRORSTACK_SINGLETON'][$package])) {
- return false;
- }
- return $GLOBALS['_PEAR_ERRORSTACK_SINGLETON'][$package]->hasErrors($level);
- }
- foreach ($GLOBALS['_PEAR_ERRORSTACK_SINGLETON'] as $package => $obj) {
- if ($obj->hasErrors($level)) {
- return true;
- }
- }
- return false;
- }
-
- /**
- * Get a list of all errors since last purge, organized by package
- * @since PEAR 1.4.0dev BC break! $level is now in the place $merge used to be
- * @param boolean $clearStack Set to purge the error stack of existing errors
- * @param string $level Set to a level name in order to retrieve only errors of a particular level
- * @param boolean $merge Set to return a flat array, not organized by package
- * @param array $sortfunc Function used to sort a merged array - default
- * sorts by time, and should be good for most cases
- * @static
- * @return array
- */
- function staticGetErrors($purge = false, $level = false, $merge = false, $sortfunc = array('PEAR_ErrorStack', '_sortErrors'))
- {
- $ret = array();
- if (!is_callable($sortfunc)) {
- $sortfunc = array('PEAR_ErrorStack', '_sortErrors');
- }
- foreach ($GLOBALS['_PEAR_ERRORSTACK_SINGLETON'] as $package => $obj) {
- $test = $GLOBALS['_PEAR_ERRORSTACK_SINGLETON'][$package]->getErrors($purge, $level);
- if ($test) {
- if ($merge) {
- $ret = array_merge($ret, $test);
- } else {
- $ret[$package] = $test;
- }
- }
- }
- if ($merge) {
- usort($ret, $sortfunc);
- }
- return $ret;
- }
-
- /**
- * Error sorting function, sorts by time
- * @access private
- */
- function _sortErrors($a, $b)
- {
- if ($a['time'] == $b['time']) {
- return 0;
- }
- if ($a['time'] < $b['time']) {
- return 1;
- }
- return -1;
- }
-
- /**
- * Standard file/line number/function/class context callback
- *
- * This function uses a backtrace generated from {@link debug_backtrace()}
- * and so will not work at all in PHP < 4.3.0. The frame should
- * reference the frame that contains the source of the error.
- * @return array|false either array('file' => file, 'line' => line,
- * 'function' => function name, 'class' => class name) or
- * if this doesn't work, then false
- * @param unused
- * @param integer backtrace frame.
- * @param array Results of debug_backtrace()
- * @static
- */
- function getFileLine($code, $params, $backtrace = null)
- {
- if ($backtrace === null) {
- return false;
- }
- $frame = 0;
- $functionframe = 1;
- if (!isset($backtrace[1])) {
- $functionframe = 0;
- } else {
- while (isset($backtrace[$functionframe]['function']) &&
- $backtrace[$functionframe]['function'] == 'eval' &&
- isset($backtrace[$functionframe + 1])) {
- $functionframe++;
- }
- }
- if (isset($backtrace[$frame])) {
- if (!isset($backtrace[$frame]['file'])) {
- $frame++;
- }
- $funcbacktrace = $backtrace[$functionframe];
- $filebacktrace = $backtrace[$frame];
- $ret = array('file' => $filebacktrace['file'],
- 'line' => $filebacktrace['line']);
- // rearrange for eval'd code or create function errors
- if (strpos($filebacktrace['file'], '(') &&
- preg_match(';^(.*?)\((\d+)\) : (.*?)$;', $filebacktrace['file'],
- $matches)) {
- $ret['file'] = $matches[1];
- $ret['line'] = $matches[2] + 0;
- }
- if (isset($funcbacktrace['function']) && isset($backtrace[1])) {
- if ($funcbacktrace['function'] != 'eval') {
- if ($funcbacktrace['function'] == '__lambda_func') {
- $ret['function'] = 'create_function() code';
- } else {
- $ret['function'] = $funcbacktrace['function'];
- }
- }
- }
- if (isset($funcbacktrace['class']) && isset($backtrace[1])) {
- $ret['class'] = $funcbacktrace['class'];
- }
- return $ret;
- }
- return false;
- }
-
- /**
- * Standard error message generation callback
- *
- * This method may also be called by a custom error message generator
- * to fill in template values from the params array, simply
- * set the third parameter to the error message template string to use
- *
- * The special variable %__msg% is reserved: use it only to specify
- * where a message passed in by the user should be placed in the template,
- * like so:
- *
- * Error message: %msg% - internal error
- *
- * If the message passed like so:
- *
- * <code>
- * $stack->push(ERROR_CODE, 'error', array(), 'server error 500');
- * </code>
- *
- * The returned error message will be "Error message: server error 500 -
- * internal error"
- * @param PEAR_ErrorStack
- * @param array
- * @param string|false Pre-generated error message template
- * @static
- * @return string
- */
- function getErrorMessage(&$stack, $err, $template = false)
- {
- if ($template) {
- $mainmsg = $template;
- } else {
- $mainmsg = $stack->getErrorMessageTemplate($err['code']);
- }
- $mainmsg = str_replace('%__msg%', $err['message'], $mainmsg);
- if (count($err['params'])) {
- foreach ($err['params'] as $name => $val) {
- if (is_array($val)) {
- // @ is needed in case $val is a multi-dimensional array
- $val = @implode(', ', $val);
- }
- if (is_object($val)) {
- if (method_exists($val, '__toString')) {
- $val = $val->__toString();
- } else {
- PEAR_ErrorStack::staticPush('PEAR_ErrorStack', PEAR_ERRORSTACK_ERR_OBJTOSTRING,
- 'warning', array('obj' => get_class($val)),
- 'object %obj% passed into getErrorMessage, but has no __toString() method');
- $val = 'Object';
- }
- }
- $mainmsg = str_replace('%' . $name . '%', $val, $mainmsg);
- }
- }
- return $mainmsg;
- }
-
- /**
- * Standard Error Message Template generator from code
- * @return string
- */
- function getErrorMessageTemplate($code)
- {
- if (!isset($this->_errorMsgs[$code])) {
- return '%__msg%';
- }
- return $this->_errorMsgs[$code];
- }
-
- /**
- * Set the Error Message Template array
- *
- * The array format must be:
- * <pre>
- * array(error code => 'message template',...)
- * </pre>
- *
- * Error message parameters passed into {@link push()} will be used as input
- * for the error message. If the template is 'message %foo% was %bar%', and the
- * parameters are array('foo' => 'one', 'bar' => 'six'), the error message returned will
- * be 'message one was six'
- * @return string
- */
- function setErrorMessageTemplate($template)
- {
- $this->_errorMsgs = $template;
- }
-
-
- /**
- * emulate PEAR::raiseError()
- *
- * @return PEAR_Error
- */
- function raiseError()
- {
- require_once 'PEAR.php';
- $args = func_get_args();
- return call_user_func_array(array('PEAR', 'raiseError'), $args);
- }
-}
-$stack = &PEAR_ErrorStack::singleton('PEAR_ErrorStack');
-$stack->pushCallback(array('PEAR_ErrorStack', '_handleError'));
-?> \ No newline at end of file
diff --git a/pear/PEAR/Exception.php b/pear/PEAR/Exception.php
deleted file mode 100644
index 8322fd034a..0000000000
--- a/pear/PEAR/Exception.php
+++ /dev/null
@@ -1,222 +0,0 @@
-<?php
-/* vim: set expandtab tabstop=4 shiftwidth=4 foldmethod=marker: */
-// +----------------------------------------------------------------------+
-// | PEAR_Exception |
-// +----------------------------------------------------------------------+
-// | Copyright (c) 2004 The PEAR 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 at through the world-wide-web at |
-// | 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. |
-// +----------------------------------------------------------------------+
-// | Authors: Tomas V.V.Cox <cox@idecnet.com> |
-// | Hans Lellelid <hans@velum.net> |
-// | |
-// +----------------------------------------------------------------------+
-//
-// $Id$
-
-define('PEAR_OBSERVER_PRINT', -2);
-define('PEAR_OBSERVER_TRIGGER', -4);
-define('PEAR_OBSERVER_DIE', -8);
-
-/**
- * Base PEAR_Exception Class
- *
- * 1) Features:
- *
- * - Nestable exceptions (throw new PEAR_Exception($msg, $prev_exception))
- * - Definable triggers, shot when exceptions occur
- * - Pretty and informative error messages
- * - Added more context info avaible (like class, method or cause)
- *
- * 2) Ideas:
- *
- * - Maybe a way to define a 'template' for the output
- *
- * 3) Inherited properties from PHP Exception Class:
- *
- * protected $message
- * protected $code
- * protected $line
- * protected $file
- * private $trace
- *
- * 4) Inherited methods from PHP Exception Class:
- *
- * __clone
- * __construct
- * getMessage
- * getCode
- * getFile
- * getLine
- * getTrace
- * getTraceAsString
- * __toString
- *
- * 5) Usage example
- *
- * <code>
- * require_once 'PEAR/Exception.php';
- *
- * class Test {
- * function foo() {
- * throw new PEAR_Exception('Error Message', ERROR_CODE);
- * }
- * }
- *
- * function myLogger($pear_exception) {
- * echo $pear_exception->getMessage();
- * }
- * // each time a exception is thrown the 'myLogger' will be called
- * // (its use is completely optional)
- * PEAR_Exception::addObserver('myLogger');
- * $test = new Test;
- * try {
- * $test->foo();
- * } catch (PEAR_Exception $e) {
- * print $e;
- * }
- * </code>
- *
- * @since PHP 5
- * @package PEAR
- * @version $Revision$
- * @author Tomas V.V.Cox <cox@idecnet.com>
- * @author Hans Lellelid <hans@velum.net>
- *
- */
-class PEAR_Exception extends Exception
-{
- protected $cause;
- protected $error_class;
- protected $error_method;
-
- private $_method;
- private static $_observers = array();
-
- /**
- * Supported signatures:
- * PEAR_Exception(string $message);
- * PEAR_Exception(string $message, int $code);
- * PEAR_Exception(string $message, Exception $cause);
- * PEAR_Exception(string $message, Exception $cause, int $code);
- */
- public function __construct($message, $p2 = null, $p3 = null)
- {
- $code = null;
- $cause = null;
- if (is_int($p3) && $p2 instanceof Exception) {
- $code = $p3;
- $cause = $p2;
- } elseif (is_int($p2)) {
- $code = $p2;
- } elseif ($p2 instanceof Exception) {
- $cause = $p2;
- }
- $this->cause = $cause;
- $trace = parent::getTrace();
- $this->error_class = $trace[0]['class'];
- $this->error_method = $trace[0]['function'];
- $this->_method = $this->error_class . '::' . $this->error_method . '()';
- parent::__construct($message, $code);
-
- $this->_signal();
- }
-
- /**
- * @param mixed $callback - A valid php callback, see php func is_callable()
- * - A PEAR_OBSERVER_* constant
- * - An array(const PEAR_OBSERVER_*, mixed $options)
- *
- * @param string $label - The name of the observer. Use this if you want
- * to remove it later with delObserver()
- */
-
- public static function addObserver($callback, $label = 'default')
- {
- self::$_observers[$label] = $callback;
- }
-
- public static function delObserver($label = 'default')
- {
- unset(self::$_observers[$label]);
- }
-
- private function _signal()
- {
- foreach (self::$_observers as $func) {
- if (is_callable($func)) {
- call_user_func($func, $this);
- continue;
- }
- settype($func, 'array');
- switch ($func[0]) {
- case PEAR_OBSERVER_PRINT:
- $f = (isset($func[1])) ? $func[1] : '%s';
- printf($f, $this->getMessage());
- break;
- case PEAR_OBSERVER_TRIGGER:
- $f = (isset($func[1])) ? $func[1] : E_USER_NOTICE;
- trigger_error($this->getMessage(), $f);
- break;
- case PEAR_OBSERVER_DIE:
- $f = (isset($func[1])) ? $func[1] : '%s';
- die(printf($f, $this->getMessage()));
- break;
- default:
- trigger_error('invalid observer type', E_USER_WARNING);
- }
- }
- }
-
- private function _getCauseMessage()
- {
- $msg = " #{$this->_method} at {$this->file} ({$this->line})\n" .
- " {$this->message}\n";
- if ($this->cause instanceof Exception) {
- return $this->cause->_getCauseMessage() . $msg;
- }
- return $msg;
- }
-
- /**
- * @return Exception_object The context of the exception
- */
- public function getCause()
- {
- return $this->cause;
- }
-
- public function getErrorClass()
- {
- return $this->error_class;
- }
-
- public function getErrorMethod()
- {
- return $this->error_method;
- }
-
- public function __toString()
- {
- $str = get_class($this) . " occurred: \n" .
- " Error message: {$this->message}\n" .
- " Error code : {$this->code}\n" .
- " File (Line) : {$this->file} ({$this->line})\n" .
- " Method : {$this->_method}\n";
- if ($this->cause instanceof Exception) {
- $str .= " Nested Error :\n" . $this->_getCauseMessage();
- }
- if (isset($_SERVER['REQUEST_URI'])) {
- return nl2br('<pre>'.htmlentities($str).'</pre>');
- }
- return $str;
- }
-}
-
-?> \ No newline at end of file
diff --git a/pear/PEAR/Frontend/CLI.php b/pear/PEAR/Frontend/CLI.php
deleted file mode 100644
index 95067b024f..0000000000
--- a/pear/PEAR/Frontend/CLI.php
+++ /dev/null
@@ -1,509 +0,0 @@
-<?php
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Stig Sæther Bakken <ssb@php.net> |
- +----------------------------------------------------------------------+
-
- $Id$
-*/
-
-require_once "PEAR.php";
-
-class PEAR_Frontend_CLI extends PEAR
-{
- // {{{ properties
-
- /**
- * What type of user interface this frontend is for.
- * @var string
- * @access public
- */
- var $type = 'CLI';
- var $lp = ''; // line prefix
-
- var $params = array();
- var $term = array(
- 'bold' => '',
- 'normal' => '',
- );
-
- // }}}
-
- // {{{ constructor
-
- function PEAR_Frontend_CLI()
- {
- parent::PEAR();
- $term = getenv('TERM'); //(cox) $_ENV is empty for me in 4.1.1
- if (function_exists('posix_isatty') && !posix_isatty(1)) {
- // output is being redirected to a file or through a pipe
- } elseif ($term) {
- // XXX can use ncurses extension here, if available
- if (preg_match('/^(xterm|vt220|linux)/', $term)) {
- $this->term['bold'] = sprintf("%c%c%c%c", 27, 91, 49, 109);
- $this->term['normal']=sprintf("%c%c%c", 27, 91, 109);
- } elseif (preg_match('/^vt100/', $term)) {
- $this->term['bold'] = sprintf("%c%c%c%c%c%c", 27, 91, 49, 109, 0, 0);
- $this->term['normal']=sprintf("%c%c%c%c%c", 27, 91, 109, 0, 0);
- }
- } elseif (OS_WINDOWS) {
- // XXX add ANSI codes here
- }
- }
-
- // }}}
-
- // {{{ displayLine(text)
-
- function displayLine($text)
- {
- trigger_error("PEAR_Frontend_CLI::displayLine deprecated", E_USER_ERROR);
- }
-
- function _displayLine($text)
- {
- print "$this->lp$text\n";
- }
-
- // }}}
- // {{{ display(text)
-
- function display($text)
- {
- trigger_error("PEAR_Frontend_CLI::display deprecated", E_USER_ERROR);
- }
-
- function _display($text)
- {
- print $text;
- }
-
- // }}}
- // {{{ displayError(eobj)
-
- /**
- * @param object PEAR_Error object
- */
- function displayError($eobj)
- {
- return $this->_displayLine($eobj->getMessage());
- }
-
- // }}}
- // {{{ displayFatalError(eobj)
-
- /**
- * @param object PEAR_Error object
- */
- function displayFatalError($eobj)
- {
- $this->displayError($eobj);
- exit(1);
- }
-
- // }}}
- // {{{ displayHeading(title)
-
- function displayHeading($title)
- {
- trigger_error("PEAR_Frontend_CLI::displayHeading deprecated", E_USER_ERROR);
- }
-
- function _displayHeading($title)
- {
- print $this->lp.$this->bold($title)."\n";
- print $this->lp.str_repeat("=", strlen($title))."\n";
- }
-
- // }}}
- // {{{ userDialog(prompt, [type], [default])
-
- function userDialog($command, $prompts, $types = array(), $defaults = array())
- {
- $result = array();
- if (is_array($prompts)) {
- $fp = fopen("php://stdin", "r");
- foreach ($prompts as $key => $prompt) {
- $type = $types[$key];
- $default = @$defaults[$key];
- if ($type == 'password') {
- system('stty -echo');
- }
- print "$this->lp$prompt ";
- if ($default) {
- print "[$default] ";
- }
- print ": ";
- $line = fgets($fp, 2048);
- if ($type == 'password') {
- system('stty echo');
- print "\n";
- }
- if ($default && trim($line) == "") {
- $result[$key] = $default;
- } else {
- $result[$key] = $line;
- }
- }
- fclose($fp);
- }
- return $result;
- }
-
- // }}}
- // {{{ userConfirm(prompt, [default])
-
- function userConfirm($prompt, $default = 'yes')
- {
- trigger_error("PEAR_Frontend_CLI::userConfirm not yet converted", E_USER_ERROR);
- static $positives = array('y', 'yes', 'on', '1');
- static $negatives = array('n', 'no', 'off', '0');
- print "$this->lp$prompt [$default] : ";
- $fp = fopen("php://stdin", "r");
- $line = fgets($fp, 2048);
- fclose($fp);
- $answer = strtolower(trim($line));
- if (empty($answer)) {
- $answer = $default;
- }
- if (in_array($answer, $positives)) {
- return true;
- }
- if (in_array($answer, $negatives)) {
- return false;
- }
- if (in_array($default, $positives)) {
- return true;
- }
- return false;
- }
-
- // }}}
- // {{{ startTable([params])
-
- function startTable($params = array())
- {
- trigger_error("PEAR_Frontend_CLI::startTable deprecated", E_USER_ERROR);
- }
-
- function _startTable($params = array())
- {
- $params['table_data'] = array();
- $params['widest'] = array(); // indexed by column
- $params['highest'] = array(); // indexed by row
- $params['ncols'] = 0;
- $this->params = $params;
- }
-
- // }}}
- // {{{ tableRow(columns, [rowparams], [colparams])
-
- function tableRow($columns, $rowparams = array(), $colparams = array())
- {
- trigger_error("PEAR_Frontend_CLI::tableRow deprecated", E_USER_ERROR);
- }
-
- function _tableRow($columns, $rowparams = array(), $colparams = array())
- {
- $highest = 1;
- for ($i = 0; $i < sizeof($columns); $i++) {
- $col = &$columns[$i];
- if (isset($colparams[$i]) && !empty($colparams[$i]['wrap'])) {
- $col = wordwrap($col, $colparams[$i]['wrap'], "\n", 0);
- }
- if (strpos($col, "\n") !== false) {
- $multiline = explode("\n", $col);
- $w = 0;
- foreach ($multiline as $n => $line) {
- if (strlen($line) > $w) {
- $w = strlen($line);
- }
- }
- $lines = sizeof($multiline);
- } else {
- $w = strlen($col);
- }
- if ($w > @$this->params['widest'][$i]) {
- $this->params['widest'][$i] = $w;
- }
- $tmp = count_chars($columns[$i], 1);
- // handle unix, mac and windows formats
- $lines = (isset($tmp[10]) ? $tmp[10] : @$tmp[13]) + 1;
- if ($lines > $highest) {
- $highest = $lines;
- }
- }
- if (sizeof($columns) > $this->params['ncols']) {
- $this->params['ncols'] = sizeof($columns);
- }
- $new_row = array(
- 'data' => $columns,
- 'height' => $highest,
- 'rowparams' => $rowparams,
- 'colparams' => $colparams,
- );
- $this->params['table_data'][] = $new_row;
- }
-
- // }}}
- // {{{ endTable()
-
- function endTable()
- {
- trigger_error("PEAR_Frontend_CLI::endTable deprecated", E_USER_ERROR);
- }
-
- function _endTable()
- {
- extract($this->params);
- if (!empty($caption)) {
- $this->_displayHeading($caption);
- }
- if (count($table_data) == 0) {
- return;
- }
- if (!isset($width)) {
- $width = $widest;
- } else {
- for ($i = 0; $i < $ncols; $i++) {
- if (!isset($width[$i])) {
- $width[$i] = $widest[$i];
- }
- }
- }
- $border = false;
- if (empty($border)) {
- $cellstart = '';
- $cellend = ' ';
- $rowend = '';
- $padrowend = false;
- $borderline = '';
- } else {
- $cellstart = '| ';
- $cellend = ' ';
- $rowend = '|';
- $padrowend = true;
- $borderline = '+';
- foreach ($width as $w) {
- $borderline .= str_repeat('-', $w + strlen($cellstart) + strlen($cellend) - 1);
- $borderline .= '+';
- }
- }
- if ($borderline) {
- $this->_displayLine($borderline);
- }
- for ($i = 0; $i < sizeof($table_data); $i++) {
- extract($table_data[$i]);
- if (!is_array($rowparams)) {
- $rowparams = array();
- }
- if (!is_array($colparams)) {
- $colparams = array();
- }
- $rowlines = array();
- if ($height > 1) {
- for ($c = 0; $c < sizeof($data); $c++) {
- $rowlines[$c] = preg_split('/(\r?\n|\r)/', $data[$c]);
- if (sizeof($rowlines[$c]) < $height) {
- $rowlines[$c] = array_pad($rowlines[$c], $height, '');
- }
- }
- } else {
- for ($c = 0; $c < sizeof($data); $c++) {
- $rowlines[$c] = array($data[$c]);
- }
- }
- for ($r = 0; $r < $height; $r++) {
- $rowtext = '';
- for ($c = 0; $c < sizeof($data); $c++) {
- if (isset($colparams[$c])) {
- $attribs = array_merge($rowparams, $colparams);
- } else {
- $attribs = $rowparams;
- }
- $w = isset($width[$c]) ? $width[$c] : 0;
- //$cell = $data[$c];
- $cell = $rowlines[$c][$r];
- $l = strlen($cell);
- if ($l > $w) {
- $cell = substr($cell, 0, $w);
- }
- if (isset($attribs['bold'])) {
- $cell = $this->bold($cell);
- }
- if ($l < $w) {
- // not using str_pad here because we may
- // add bold escape characters to $cell
- $cell .= str_repeat(' ', $w - $l);
- }
-
- $rowtext .= $cellstart . $cell . $cellend;
- }
- if (!$border) {
- $rowtext = rtrim($rowtext);
- }
- $rowtext .= $rowend;
- $this->_displayLine($rowtext);
- }
- }
- if ($borderline) {
- $this->_displayLine($borderline);
- }
- }
-
- // }}}
- // {{{ outputData()
-
- function outputData($data, $command = '_default')
- {
- switch ($command) {
- case 'install':
- case 'upgrade':
- case 'upgrade-all':
- if (isset($data['release_warnings'])) {
- $this->_displayLine('');
- $this->_startTable(array(
- 'border' => false,
- 'caption' => 'Release Warnings'
- ));
- $this->_tableRow(array($data['release_warnings']), null, array(1 => array('wrap' => 55)));
- $this->_endTable();
- $this->_displayLine('');
- }
- $this->_displayLine($data['data']);
- break;
- case 'search':
- $this->_startTable($data);
- if (isset($data['headline']) && is_array($data['headline'])) {
- $this->_tableRow($data['headline'], array('bold' => true), array(1 => array('wrap' => 55)));
- }
-
- foreach($data['data'] as $category) {
- foreach($category as $pkg) {
- $this->_tableRow($pkg, null, array(1 => array('wrap' => 55)));
- }
- };
- $this->_endTable();
- break;
- case 'list-all':
- $this->_startTable($data);
- if (isset($data['headline']) && is_array($data['headline'])) {
- $this->_tableRow($data['headline'], array('bold' => true), array(1 => array('wrap' => 55)));
- }
-
- foreach($data['data'] as $category) {
- foreach($category as $pkg) {
- unset($pkg[3]);
- unset($pkg[4]);
- $this->_tableRow($pkg, null, array(1 => array('wrap' => 55)));
- }
- };
- $this->_endTable();
- break;
- case 'config-show':
- $data['border'] = false;
- $opts = array(0 => array('wrap' => 30),
- 1 => array('wrap' => 20),
- 2 => array('wrap' => 35));
- $this->_startTable($data);
- if (isset($data['headline']) && is_array($data['headline'])) {
- $this->_tableRow($data['headline'],
- array('bold' => true),
- $opts);
- }
- foreach($data['data'] as $group) {
- foreach($group as $value) {
- if ($value[2] == '') {
- $value[2] = "<not set>";
- }
- $this->_tableRow($value, null, $opts);
- }
- }
- $this->_endTable();
- break;
- case 'remote-info':
- $data = array(
- 'caption' => 'Package details:',
- 'border' => false,
- 'data' => array(
- array("Latest", $data['stable']),
- array("Installed", $data['installed']),
- array("Package", $data['name']),
- array("License", $data['license']),
- array("Category", $data['category']),
- array("Summary", $data['summary']),
- array("Description", $data['description']),
- ),
- );
- default: {
- if (is_array($data)) {
- $this->_startTable($data);
- $count = count($data['data'][0]);
- if ($count == 2) {
- $opts = array(0 => array('wrap' => 25),
- 1 => array('wrap' => 48)
- );
- } elseif ($count == 3) {
- $opts = array(0 => array('wrap' => 30),
- 1 => array('wrap' => 20),
- 2 => array('wrap' => 35)
- );
- } else {
- $opts = null;
- }
- if (isset($data['headline']) && is_array($data['headline'])) {
- $this->_tableRow($data['headline'],
- array('bold' => true),
- $opts);
- }
- foreach($data['data'] as $row) {
- $this->_tableRow($row, null, $opts);
- }
- $this->_endTable();
- } else {
- $this->_displayLine($data);
- }
- }
- }
- }
-
- // }}}
- // {{{ log(text)
-
-
- function log($text, $append_crlf = true)
- {
- if ($append_crlf) {
- return $this->_displayLine($text);
- }
- return $this->_display($text);
- }
-
-
- // }}}
- // {{{ bold($text)
-
- function bold($text)
- {
- if (empty($this->term['bold'])) {
- return strtoupper($text);
- }
- return $this->term['bold'] . $text . $this->term['normal'];
- }
-
- // }}}
-}
-
-?>
diff --git a/pear/PEAR/Installer.php b/pear/PEAR/Installer.php
deleted file mode 100644
index 5b17826781..0000000000
--- a/pear/PEAR/Installer.php
+++ /dev/null
@@ -1,1046 +0,0 @@
-<?php
-//
-// +----------------------------------------------------------------------+
-// | PHP Version 5 |
-// +----------------------------------------------------------------------+
-// | Copyright (c) 1997-2004 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. |
-// +----------------------------------------------------------------------+
-// | Authors: Stig Bakken <ssb@php.net> |
-// | Tomas V.V.Cox <cox@idecnet.com> |
-// | Martin Jansen <mj@php.net> |
-// +----------------------------------------------------------------------+
-//
-// $Id$
-
-require_once 'PEAR/Downloader.php';
-
-/**
- * Administration class used to install PEAR packages and maintain the
- * installed package database.
- *
- * TODO:
- * - Check dependencies break on package uninstall (when no force given)
- * - add a guessInstallDest() method with the code from _installFile() and
- * use that method in Registry::_rebuildFileMap() & Command_Registry::doList(),
- * others..
- *
- * @since PHP 4.0.2
- * @author Stig Bakken <ssb@php.net>
- * @author Martin Jansen <mj@php.net>
- * @author Greg Beaver <cellog@php.net>
- */
-class PEAR_Installer extends PEAR_Downloader
-{
- // {{{ properties
-
- /** name of the package directory, for example Foo-1.0
- * @var string
- */
- var $pkgdir;
-
- /** directory where PHP code files go
- * @var string
- */
- var $phpdir;
-
- /** directory where PHP extension files go
- * @var string
- */
- var $extdir;
-
- /** directory where documentation goes
- * @var string
- */
- var $docdir;
-
- /** installation root directory (ala PHP's INSTALL_ROOT or
- * automake's DESTDIR
- * @var string
- */
- var $installroot = '';
-
- /** debug level
- * @var int
- */
- var $debug = 1;
-
- /** temporary directory
- * @var string
- */
- var $tmpdir;
-
- /** PEAR_Registry object used by the installer
- * @var object
- */
- var $registry;
-
- /** List of file transactions queued for an install/upgrade/uninstall.
- *
- * Format:
- * array(
- * 0 => array("rename => array("from-file", "to-file")),
- * 1 => array("delete" => array("file-to-delete")),
- * ...
- * )
- *
- * @var array
- */
- var $file_operations = array();
-
- // }}}
-
- // {{{ constructor
-
- /**
- * PEAR_Installer constructor.
- *
- * @param object $ui user interface object (instance of PEAR_Frontend_*)
- *
- * @access public
- */
- function PEAR_Installer(&$ui)
- {
- parent::PEAR_Common();
- $this->setFrontendObject($ui);
- $this->debug = $this->config->get('verbose');
- //$this->registry = &new PEAR_Registry($this->config->get('php_dir'));
- }
-
- // }}}
-
- // {{{ _deletePackageFiles()
-
- /**
- * Delete a package's installed files, does not remove empty directories.
- *
- * @param string $package package name
- *
- * @return bool TRUE on success, or a PEAR error on failure
- *
- * @access private
- */
- function _deletePackageFiles($package)
- {
- if (!strlen($package)) {
- return $this->raiseError("No package to uninstall given");
- }
- $filelist = $this->registry->packageInfo($package, 'filelist');
- if ($filelist == null) {
- return $this->raiseError("$package not installed");
- }
- foreach ($filelist as $file => $props) {
- if (empty($props['installed_as'])) {
- continue;
- }
- $path = $this->_prependPath($props['installed_as'], $this->installroot);
- $this->addFileOperation('delete', array($path));
- }
- return true;
- }
-
- // }}}
- // {{{ _installFile()
-
- /**
- * @param string filename
- * @param array attributes from <file> tag in package.xml
- * @param string path to install the file in
- * @param array options from command-line
- * @access private
- */
- function _installFile($file, $atts, $tmp_path, $options)
- {
- // {{{ return if this file is meant for another platform
- static $os;
- if (isset($atts['platform'])) {
- if (empty($os)) {
- include_once "OS/Guess.php";
- $os = new OS_Guess();
- }
- if (!$os->matchSignature($atts['platform'])) {
- $this->log(3, "skipped $file (meant for $atts[platform], we are ".$os->getSignature().")");
- return PEAR_INSTALLER_SKIPPED;
- }
- }
- // }}}
-
- // {{{ assemble the destination paths
- switch ($atts['role']) {
- case 'doc':
- case 'data':
- case 'test':
- $dest_dir = $this->config->get($atts['role'] . '_dir') .
- DIRECTORY_SEPARATOR . $this->pkginfo['package'];
- unset($atts['baseinstalldir']);
- break;
- case 'ext':
- case 'php':
- $dest_dir = $this->config->get($atts['role'] . '_dir');
- break;
- case 'script':
- $dest_dir = $this->config->get('bin_dir');
- break;
- case 'src':
- case 'extsrc':
- $this->source_files++;
- return;
- default:
- return $this->raiseError("Invalid role `$atts[role]' for file $file");
- }
- $save_destdir = $dest_dir;
- if (!empty($atts['baseinstalldir'])) {
- $dest_dir .= DIRECTORY_SEPARATOR . $atts['baseinstalldir'];
- }
- if (dirname($file) != '.' && empty($atts['install-as'])) {
- $dest_dir .= DIRECTORY_SEPARATOR . dirname($file);
- }
- if (empty($atts['install-as'])) {
- $dest_file = $dest_dir . DIRECTORY_SEPARATOR . basename($file);
- } else {
- $dest_file = $dest_dir . DIRECTORY_SEPARATOR . $atts['install-as'];
- }
- $orig_file = $tmp_path . DIRECTORY_SEPARATOR . $file;
-
- // Clean up the DIRECTORY_SEPARATOR mess
- $ds2 = DIRECTORY_SEPARATOR . DIRECTORY_SEPARATOR;
- list($dest_file, $orig_file) = preg_replace(array('!\\\\+!', '!/!', "!$ds2+!"),
- DIRECTORY_SEPARATOR,
- array($dest_file, $orig_file));
- $installed_as = $dest_file;
- $final_dest_file = $this->_prependPath($dest_file, $this->installroot);
- $dest_dir = dirname($final_dest_file);
- $dest_file = $dest_dir . DIRECTORY_SEPARATOR . '.tmp' . basename($final_dest_file);
- // }}}
-
- if (!@is_dir($dest_dir)) {
- if (!$this->mkDirHier($dest_dir)) {
- return $this->raiseError("failed to mkdir $dest_dir",
- PEAR_INSTALLER_FAILED);
- }
- $this->log(3, "+ mkdir $dest_dir");
- }
- if (empty($atts['replacements'])) {
- if (!file_exists($orig_file)) {
- return $this->raiseError("file does not exist",
- PEAR_INSTALLER_FAILED);
- }
- if (!@copy($orig_file, $dest_file)) {
- return $this->raiseError("failed to write $dest_file",
- PEAR_INSTALLER_FAILED);
- }
- $this->log(3, "+ cp $orig_file $dest_file");
- if (isset($atts['md5sum'])) {
- $md5sum = md5_file($dest_file);
- }
- } else {
- // {{{ file with replacements
- if (!file_exists($orig_file)) {
- return $this->raiseError("file does not exist",
- PEAR_INSTALLER_FAILED);
- }
- $fp = fopen($orig_file, "r");
- $contents = fread($fp, filesize($orig_file));
- fclose($fp);
- if (isset($atts['md5sum'])) {
- $md5sum = md5($contents);
- }
- $subst_from = $subst_to = array();
- foreach ($atts['replacements'] as $a) {
- $to = '';
- if ($a['type'] == 'php-const') {
- if (preg_match('/^[a-z0-9_]+$/i', $a['to'])) {
- eval("\$to = $a[to];");
- } else {
- $this->log(0, "invalid php-const replacement: $a[to]");
- continue;
- }
- } elseif ($a['type'] == 'pear-config') {
- $to = $this->config->get($a['to']);
- if (is_null($to)) {
- $this->log(0, "invalid pear-config replacement: $a[to]");
- continue;
- }
- } elseif ($a['type'] == 'package-info') {
- if (isset($this->pkginfo[$a['to']]) && is_string($this->pkginfo[$a['to']])) {
- $to = $this->pkginfo[$a['to']];
- } else {
- $this->log(0, "invalid package-info replacement: $a[to]");
- continue;
- }
- }
- if (!is_null($to)) {
- $subst_from[] = $a['from'];
- $subst_to[] = $to;
- }
- }
- $this->log(3, "doing ".sizeof($subst_from)." substitution(s) for $final_dest_file");
- if (sizeof($subst_from)) {
- $contents = str_replace($subst_from, $subst_to, $contents);
- }
- $wp = @fopen($dest_file, "wb");
- if (!is_resource($wp)) {
- return $this->raiseError("failed to create $dest_file: $php_errormsg",
- PEAR_INSTALLER_FAILED);
- }
- if (!fwrite($wp, $contents)) {
- return $this->raiseError("failed writing to $dest_file: $php_errormsg",
- PEAR_INSTALLER_FAILED);
- }
- fclose($wp);
- // }}}
- }
- // {{{ check the md5
- if (isset($md5sum)) {
- if (strtolower($md5sum) == strtolower($atts['md5sum'])) {
- $this->log(2, "md5sum ok: $final_dest_file");
- } else {
- if (empty($options['force'])) {
- // delete the file
- @unlink($dest_file);
- return $this->raiseError("bad md5sum for file $final_dest_file",
- PEAR_INSTALLER_FAILED);
- } else {
- $this->log(0, "warning : bad md5sum for file $final_dest_file");
- }
- }
- }
- // }}}
- // {{{ set file permissions
- if (!OS_WINDOWS) {
- if ($atts['role'] == 'script') {
- $mode = 0777 & ~(int)octdec($this->config->get('umask'));
- $this->log(3, "+ chmod +x $dest_file");
- } else {
- $mode = 0666 & ~(int)octdec($this->config->get('umask'));
- }
- $this->addFileOperation("chmod", array($mode, $dest_file));
- if (!@chmod($dest_file, $mode)) {
- $this->log(0, "failed to change mode of $dest_file");
- }
- }
- // }}}
- $this->addFileOperation("rename", array($dest_file, $final_dest_file));
- // Store the full path where the file was installed for easy unistall
- $this->addFileOperation("installed_as", array($file, $installed_as,
- $save_destdir, dirname(substr($dest_file, strlen($save_destdir)))));
-
- //$this->log(2, "installed: $dest_file");
- return PEAR_INSTALLER_OK;
- }
-
- // }}}
- // {{{ addFileOperation()
-
- /**
- * Add a file operation to the current file transaction.
- *
- * @see startFileTransaction()
- * @var string $type This can be one of:
- * - rename: rename a file ($data has 2 values)
- * - chmod: change permissions on a file ($data has 2 values)
- * - delete: delete a file ($data has 1 value)
- * - rmdir: delete a directory if empty ($data has 1 value)
- * - installed_as: mark a file as installed ($data has 4 values).
- * @var array $data For all file operations, this array must contain the
- * full path to the file or directory that is being operated on. For
- * the rename command, the first parameter must be the file to rename,
- * the second its new name.
- *
- * The installed_as operation contains 4 elements in this order:
- * 1. Filename as listed in the filelist element from package.xml
- * 2. Full path to the installed file
- * 3. Full path from the php_dir configuration variable used in this
- * installation
- * 4. Relative path from the php_dir that this file is installed in
- */
- function addFileOperation($type, $data)
- {
- if (!is_array($data)) {
- return $this->raiseError('Internal Error: $data in addFileOperation'
- . ' must be an array, was ' . gettype($data));
- }
- if ($type == 'chmod') {
- $octmode = decoct($data[0]);
- $this->log(3, "adding to transaction: $type $octmode $data[1]");
- } else {
- $this->log(3, "adding to transaction: $type " . implode(" ", $data));
- }
- $this->file_operations[] = array($type, $data);
- }
-
- // }}}
- // {{{ startFileTransaction()
-
- function startFileTransaction($rollback_in_case = false)
- {
- if (count($this->file_operations) && $rollback_in_case) {
- $this->rollbackFileTransaction();
- }
- $this->file_operations = array();
- }
-
- // }}}
- // {{{ commitFileTransaction()
-
- function commitFileTransaction()
- {
- $n = count($this->file_operations);
- $this->log(2, "about to commit $n file operations");
- // {{{ first, check permissions and such manually
- $errors = array();
- foreach ($this->file_operations as $tr) {
- list($type, $data) = $tr;
- switch ($type) {
- case 'rename':
- if (!file_exists($data[0])) {
- $errors[] = "cannot rename file $data[0], doesn't exist";
- }
- // check that dest dir. is writable
- if (!is_writable(dirname($data[1]))) {
- $errors[] = "permission denied ($type): $data[1]";
- }
- break;
- case 'chmod':
- // check that file is writable
- if (!is_writable($data[1])) {
- $errors[] = "permission denied ($type): $data[1] " . decoct($data[0]);
- }
- break;
- case 'delete':
- if (!file_exists($data[0])) {
- $this->log(2, "warning: file $data[0] doesn't exist, can't be deleted");
- }
- // check that directory is writable
- if (file_exists($data[0]) && !is_writable(dirname($data[0]))) {
- $errors[] = "permission denied ($type): $data[0]";
- }
- break;
- }
-
- }
- // }}}
- $m = sizeof($errors);
- if ($m > 0) {
- foreach ($errors as $error) {
- $this->log(1, $error);
- }
- return false;
- }
- // {{{ really commit the transaction
- foreach ($this->file_operations as $tr) {
- list($type, $data) = $tr;
- switch ($type) {
- case 'rename':
- @unlink($data[1]);
- @rename($data[0], $data[1]);
- $this->log(3, "+ mv $data[0] $data[1]");
- break;
- case 'chmod':
- @chmod($data[1], $data[0]);
- $octmode = decoct($data[0]);
- $this->log(3, "+ chmod $octmode $data[1]");
- break;
- case 'delete':
- @unlink($data[0]);
- $this->log(3, "+ rm $data[0]");
- break;
- case 'rmdir':
- @rmdir($data[0]);
- $this->log(3, "+ rmdir $data[0]");
- break;
- case 'installed_as':
- $this->pkginfo['filelist'][$data[0]]['installed_as'] = $data[1];
- if (!isset($this->pkginfo['filelist']['dirtree'][dirname($data[1])])) {
- $this->pkginfo['filelist']['dirtree'][dirname($data[1])] = true;
- while(!empty($data[3]) && $data[3] != '/' && $data[3] != '\\'
- && $data[3] != '.') {
- $this->pkginfo['filelist']['dirtree']
- [$this->_prependPath($data[3], $data[2])] = true;
- $data[3] = dirname($data[3]);
- }
- }
- break;
- }
- }
- // }}}
- $this->log(2, "successfully committed $n file operations");
- $this->file_operations = array();
- return true;
- }
-
- // }}}
- // {{{ rollbackFileTransaction()
-
- function rollbackFileTransaction()
- {
- $n = count($this->file_operations);
- $this->log(2, "rolling back $n file operations");
- foreach ($this->file_operations as $tr) {
- list($type, $data) = $tr;
- switch ($type) {
- case 'rename':
- @unlink($data[0]);
- $this->log(3, "+ rm $data[0]");
- break;
- case 'mkdir':
- @rmdir($data[0]);
- $this->log(3, "+ rmdir $data[0]");
- break;
- case 'chmod':
- break;
- case 'delete':
- break;
- case 'installed_as':
- if (isset($this->pkginfo['filelist'])) {
- unset($this->pkginfo['filelist'][$data[0]]['installed_as']);
- }
- if (isset($this->pkginfo['filelist']['dirtree'][dirname($data[1])])) {
- unset($this->pkginfo['filelist']['dirtree'][dirname($data[1])]);
- while(!empty($data[3]) && $data[3] != '/' && $data[3] != '\\'
- && $data[3] != '.') {
- unset($this->pkginfo['filelist']['dirtree']
- [$this->_prependPath($data[3], $data[2])]);
- $data[3] = dirname($data[3]);
- }
- }
- if (isset($this->pkginfo['filelist']['dirtree'])
- && !count($this->pkginfo['filelist']['dirtree'])) {
- unset($this->pkginfo['filelist']['dirtree']);
- }
- break;
- }
- }
- $this->file_operations = array();
- }
-
- // }}}
- // {{{ mkDirHier($dir)
-
- function mkDirHier($dir)
- {
- $this->addFileOperation('mkdir', array($dir));
- return parent::mkDirHier($dir);
- }
-
- // }}}
- // {{{ download()
-
- /**
- * Download any files and their dependencies, if necessary
- *
- * @param array a mixed list of package names, local files, or package.xml
- * @param PEAR_Config
- * @param array options from the command line
- * @param array this is the array that will be populated with packages to
- * install. Format of each entry:
- *
- * <code>
- * array('pkg' => 'package_name', 'file' => '/path/to/local/file',
- * 'info' => array() // parsed package.xml
- * );
- * </code>
- * @param array this will be populated with any error messages
- * @param false private recursion variable
- * @param false private recursion variable
- * @param false private recursion variable
- * @deprecated in favor of PEAR_Downloader
- */
- function download($packages, $options, &$config, &$installpackages,
- &$errors, $installed = false, $willinstall = false, $state = false)
- {
- // trickiness: initialize here
- parent::PEAR_Downloader($this->ui, $options, $config);
- $ret = parent::download($packages);
- $errors = $this->getErrorMsgs();
- $installpackages = $this->getDownloadedPackages();
- trigger_error("PEAR Warning: PEAR_Installer::download() is deprecated " .
- "in favor of PEAR_Downloader class", E_USER_WARNING);
- return $ret;
- }
-
- // }}}
- // {{{ install()
-
- /**
- * Installs the files within the package file specified.
- *
- * @param string $pkgfile path to the package file
- * @param array $options
- * recognized options:
- * - installroot : optional prefix directory for installation
- * - force : force installation
- * - register-only : update registry but don't install files
- * - upgrade : upgrade existing install
- * - soft : fail silently
- * - nodeps : ignore dependency conflicts/missing dependencies
- * - alldeps : install all dependencies
- * - onlyreqdeps : install only required dependencies
- *
- * @return array|PEAR_Error package info if successful
- */
-
- function install($pkgfile, $options = array())
- {
- $php_dir = $this->config->get('php_dir');
- if (isset($options['installroot'])) {
- if (substr($options['installroot'], -1) == DIRECTORY_SEPARATOR) {
- $options['installroot'] = substr($options['installroot'], 0, -1);
- }
- $php_dir = $this->_prependPath($php_dir, $options['installroot']);
- $this->installroot = $options['installroot'];
- } else {
- $this->installroot = '';
- }
- $this->registry = &new PEAR_Registry($php_dir);
- // ==> XXX should be removed later on
- $flag_old_format = false;
-
- if (substr($pkgfile, -4) == '.xml') {
- $descfile = $pkgfile;
- } else {
- // {{{ Decompress pack in tmp dir -------------------------------------
-
- // To allow relative package file names
- $pkgfile = realpath($pkgfile);
-
- if (PEAR::isError($tmpdir = System::mktemp('-d'))) {
- return $tmpdir;
- }
- $this->log(3, '+ tmp dir created at ' . $tmpdir);
-
- $tar = new Archive_Tar($pkgfile);
- if (!@$tar->extract($tmpdir)) {
- return $this->raiseError("unable to unpack $pkgfile");
- }
-
- // {{{ Look for existing package file
- $descfile = $tmpdir . DIRECTORY_SEPARATOR . 'package.xml';
-
- if (!is_file($descfile)) {
- // ----- Look for old package archive format
- // In this format the package.xml file was inside the
- // Package-n.n directory
- $dp = opendir($tmpdir);
- do {
- $pkgdir = readdir($dp);
- } while ($pkgdir{0} == '.');
-
- $descfile = $tmpdir . DIRECTORY_SEPARATOR . $pkgdir . DIRECTORY_SEPARATOR . 'package.xml';
- $flag_old_format = true;
- $this->log(0, "warning : you are using an archive with an old format");
- }
- // }}}
- // <== XXX This part should be removed later on
- // }}}
- }
-
- if (!is_file($descfile)) {
- return $this->raiseError("no package.xml file after extracting the archive");
- }
-
- // Parse xml file -----------------------------------------------
- $pkginfo = $this->infoFromDescriptionFile($descfile);
- if (PEAR::isError($pkginfo)) {
- return $pkginfo;
- }
- $this->validatePackageInfo($pkginfo, $errors, $warnings);
- // XXX We allow warnings, do we have to do it?
- if (count($errors)) {
- if (empty($options['force'])) {
- return $this->raiseError("The following errors where found (use force option to install anyway):\n".
- implode("\n", $errors));
- } else {
- $this->log(0, "warning : the following errors were found:\n".
- implode("\n", $errors));
- }
- }
-
- $pkgname = $pkginfo['package'];
-
- // {{{ Check dependencies -------------------------------------------
- if (isset($pkginfo['release_deps']) && empty($options['nodeps'])) {
- $dep_errors = '';
- $error = $this->checkDeps($pkginfo, $dep_errors);
- if ($error == true) {
- if (empty($options['soft'])) {
- $this->log(0, substr($dep_errors, 1));
- }
- return $this->raiseError("$pkgname: Dependencies failed");
- } else if (!empty($dep_errors)) {
- // Print optional dependencies
- if (empty($options['soft'])) {
- $this->log(0, $dep_errors);
- }
- }
- }
- // }}}
-
- // {{{ checks to do when not in "force" mode
- if (empty($options['force'])) {
- $test = $this->registry->checkFileMap($pkginfo);
- if (sizeof($test)) {
- $tmp = $test;
- foreach ($tmp as $file => $pkg) {
- if ($pkg == $pkgname) {
- unset($test[$file]);
- }
- }
- if (sizeof($test)) {
- $msg = "$pkgname: conflicting files found:\n";
- $longest = max(array_map("strlen", array_keys($test)));
- $fmt = "%${longest}s (%s)\n";
- foreach ($test as $file => $pkg) {
- $msg .= sprintf($fmt, $file, $pkg);
- }
- return $this->raiseError($msg);
- }
- }
- }
- // }}}
-
- $this->startFileTransaction();
-
- if (empty($options['upgrade'])) {
- // checks to do only when installing new packages
- if (empty($options['force']) && $this->registry->packageExists($pkgname)) {
- return $this->raiseError("$pkgname already installed");
- }
- } else {
- if ($this->registry->packageExists($pkgname)) {
- $v1 = $this->registry->packageInfo($pkgname, 'version');
- $v2 = $pkginfo['version'];
- $cmp = version_compare("$v1", "$v2", 'gt');
- if (empty($options['force']) && !version_compare("$v2", "$v1", 'gt')) {
- return $this->raiseError("upgrade to a newer version ($v2 is not newer than $v1)");
- }
- if (empty($options['register-only'])) {
- // when upgrading, remove old release's files first:
- if (PEAR::isError($err = $this->_deletePackageFiles($pkgname))) {
- return $this->raiseError($err);
- }
- }
- }
- }
-
- // {{{ Copy files to dest dir ---------------------------------------
-
- // info from the package it self we want to access from _installFile
- $this->pkginfo = &$pkginfo;
- // used to determine whether we should build any C code
- $this->source_files = 0;
-
- if (empty($options['register-only'])) {
- if (!is_dir($php_dir)) {
- return $this->raiseError("no script destination directory\n",
- null, PEAR_ERROR_DIE);
- }
-
- $tmp_path = dirname($descfile);
- if (substr($pkgfile, -4) != '.xml') {
- $tmp_path .= DIRECTORY_SEPARATOR . $pkgname . '-' . $pkginfo['version'];
- }
-
- // ==> XXX This part should be removed later on
- if ($flag_old_format) {
- $tmp_path = dirname($descfile);
- }
- // <== XXX This part should be removed later on
-
- // {{{ install files
- foreach ($pkginfo['filelist'] as $file => $atts) {
- $this->expectError(PEAR_INSTALLER_FAILED);
- $res = $this->_installFile($file, $atts, $tmp_path, $options);
- $this->popExpect();
- if (PEAR::isError($res)) {
- if (empty($options['ignore-errors'])) {
- $this->rollbackFileTransaction();
- if ($res->getMessage() == "file does not exist") {
- $this->raiseError("file $file in package.xml does not exist");
- }
- return $this->raiseError($res);
- } else {
- $this->log(0, "Warning: " . $res->getMessage());
- }
- }
- if ($res != PEAR_INSTALLER_OK) {
- // Do not register files that were not installed
- unset($pkginfo['filelist'][$file]);
- }
- }
- // }}}
-
- // {{{ compile and install source files
- if ($this->source_files > 0 && empty($options['nobuild'])) {
- $this->log(1, "$this->source_files source files, building");
- $bob = &new PEAR_Builder($this->ui);
- $bob->debug = $this->debug;
- $built = $bob->build($descfile, array(&$this, '_buildCallback'));
- if (PEAR::isError($built)) {
- $this->rollbackFileTransaction();
- return $built;
- }
- $this->log(1, "\nBuild process completed successfully");
- foreach ($built as $ext) {
- $bn = basename($ext['file']);
- list($_ext_name, ) = explode('.', $bn);
- if (extension_loaded($_ext_name)) {
- $this->raiseError("Extension '$_ext_name' already loaded. Please unload it ".
- "in your php.ini file prior to install or upgrade it.");
- }
- // extension dir must be created if it doesn't exist
- // patch by Tomas Cox (modified by Greg Beaver)
- $ext_dir = $this->config->get('ext_dir');
- if (!@is_dir($ext_dir) && !System::mkdir(array('-p', $ext_dir))) {
- $this->log(3, "+ mkdir -p $ext_dir");
- return $this->raiseError("failed to create extension dir '$ext_dir'");
- }
- $dest = $ext_dir . DIRECTORY_SEPARATOR . $bn;
- $this->log(1, "Installing '$bn' at ext_dir ($dest)");
- $this->log(3, "+ cp $ext[file] ext_dir ($dest)");
- $copyto = $this->_prependPath($dest, $this->installroot);
- if (!@copy($ext['file'], $copyto)) {
- $this->rollbackFileTransaction();
- return $this->raiseError("failed to copy $bn to $copyto");
- }
- $pkginfo['filelist'][$bn] = array(
- 'role' => 'ext',
- 'installed_as' => $dest,
- 'php_api' => $ext['php_api'],
- 'zend_mod_api' => $ext['zend_mod_api'],
- 'zend_ext_api' => $ext['zend_ext_api'],
- );
- }
- }
- // }}}
- }
-
- if (!$this->commitFileTransaction()) {
- $this->rollbackFileTransaction();
- return $this->raiseError("commit failed", PEAR_INSTALLER_FAILED);
- }
- // }}}
-
- $ret = false;
- // {{{ Register that the package is installed -----------------------
- if (empty($options['upgrade'])) {
- // if 'force' is used, replace the info in registry
- if (!empty($options['force']) && $this->registry->packageExists($pkgname)) {
- $this->registry->deletePackage($pkgname);
- }
- $ret = $this->registry->addPackage($pkgname, $pkginfo);
- } else {
- // new: upgrade installs a package if it isn't installed
- if (!$this->registry->packageExists($pkgname)) {
- $ret = $this->registry->addPackage($pkgname, $pkginfo);
- } else {
- $ret = $this->registry->updatePackage($pkgname, $pkginfo, false);
- }
- }
- if (!$ret) {
- return $this->raiseError("Adding package $pkgname to registry failed");
- }
- // }}}
- return $pkginfo;
- }
-
- // }}}
- // {{{ uninstall()
-
- /**
- * Uninstall a package
- *
- * This method removes all files installed by the application, and then
- * removes any empty directories.
- * @param string package name
- * @param array Command-line options. Possibilities include:
- *
- * - installroot: base installation dir, if not the default
- * - nodeps: do not process dependencies of other packages to ensure
- * uninstallation does not break things
- */
- function uninstall($package, $options = array())
- {
- $php_dir = $this->config->get('php_dir');
- if (isset($options['installroot'])) {
- if (substr($options['installroot'], -1) == DIRECTORY_SEPARATOR) {
- $options['installroot'] = substr($options['installroot'], 0, -1);
- }
- $this->installroot = $options['installroot'];
- $php_dir = $this->_prependPath($php_dir, $this->installroot);
- } else {
- $this->installroot = '';
- }
- $this->registry = &new PEAR_Registry($php_dir);
- $filelist = $this->registry->packageInfo($package, 'filelist');
- if ($filelist == null) {
- return $this->raiseError("$package not installed");
- }
- if (empty($options['nodeps'])) {
- $depchecker = &new PEAR_Dependency($this->registry);
- $error = $depchecker->checkPackageUninstall($errors, $warning, $package);
- if ($error) {
- return $this->raiseError($errors . 'uninstall failed');
- }
- if ($warning) {
- $this->log(0, $warning);
- }
- }
- // {{{ Delete the files
- $this->startFileTransaction();
- if (PEAR::isError($err = $this->_deletePackageFiles($package))) {
- $this->rollbackFileTransaction();
- return $this->raiseError($err);
- }
- if (!$this->commitFileTransaction()) {
- $this->rollbackFileTransaction();
- return $this->raiseError("uninstall failed");
- } else {
- $this->startFileTransaction();
- if (!isset($filelist['dirtree']) || !count($filelist['dirtree'])) {
- return $this->registry->deletePackage($package);
- }
- // attempt to delete empty directories
- uksort($filelist['dirtree'], array($this, '_sortDirs'));
- foreach($filelist['dirtree'] as $dir => $notused) {
- $this->addFileOperation('rmdir', array($dir));
- }
- if (!$this->commitFileTransaction()) {
- $this->rollbackFileTransaction();
- }
- }
- // }}}
-
- // Register that the package is no longer installed
- return $this->registry->deletePackage($package);
- }
-
- // }}}
- // {{{ _sortDirs()
- function _sortDirs($a, $b)
- {
- if (strnatcmp($a, $b) == -1) return 1;
- if (strnatcmp($a, $b) == 1) return -1;
- return 0;
- }
-
- // }}}
- // {{{ checkDeps()
-
- /**
- * Check if the package meets all dependencies
- *
- * @param array Package information (passed by reference)
- * @param string Error message (passed by reference)
- * @return boolean False when no error occured, otherwise true
- */
- function checkDeps(&$pkginfo, &$errors)
- {
- if (empty($this->registry)) {
- $this->registry = &new PEAR_Registry($this->config->get('php_dir'));
- }
- $depchecker = &new PEAR_Dependency($this->registry);
- $error = $errors = '';
- $failed_deps = $optional_deps = array();
- if (is_array($pkginfo['release_deps'])) {
- foreach($pkginfo['release_deps'] as $dep) {
- $code = $depchecker->callCheckMethod($error, $dep);
- if ($code) {
- if (isset($dep['optional']) && $dep['optional'] == 'yes') {
- $optional_deps[] = array($dep, $code, $error);
- } else {
- $failed_deps[] = array($dep, $code, $error);
- }
- }
- }
- // {{{ failed dependencies
- $n = count($failed_deps);
- if ($n > 0) {
- for ($i = 0; $i < $n; $i++) {
- if (isset($failed_deps[$i]['type'])) {
- $type = $failed_deps[$i]['type'];
- } else {
- $type = 'pkg';
- }
- switch ($failed_deps[$i][1]) {
- case PEAR_DEPENDENCY_MISSING:
- if ($type == 'pkg') {
- // install
- }
- $errors .= "\n" . $failed_deps[$i][2];
- break;
- case PEAR_DEPENDENCY_UPGRADE_MINOR:
- if ($type == 'pkg') {
- // upgrade
- }
- $errors .= "\n" . $failed_deps[$i][2];
- break;
- default:
- $errors .= "\n" . $failed_deps[$i][2];
- break;
- }
- }
- return true;
- }
- // }}}
-
- // {{{ optional dependencies
- $count_optional = count($optional_deps);
- if ($count_optional > 0) {
- $errors = "Optional dependencies:";
-
- for ($i = 0; $i < $count_optional; $i++) {
- if (isset($optional_deps[$i]['type'])) {
- $type = $optional_deps[$i]['type'];
- } else {
- $type = 'pkg';
- }
- switch ($optional_deps[$i][1]) {
- case PEAR_DEPENDENCY_MISSING:
- case PEAR_DEPENDENCY_UPGRADE_MINOR:
- default:
- $errors .= "\n" . $optional_deps[$i][2];
- break;
- }
- }
- return false;
- }
- // }}}
- }
- return false;
- }
-
- // }}}
- // {{{ _buildCallback()
-
- function _buildCallback($what, $data)
- {
- if (($what == 'cmdoutput' && $this->debug > 1) ||
- ($what == 'output' && $this->debug > 0)) {
- $this->ui->outputData(rtrim($data), 'build');
- }
- }
-
- // }}}
-}
-
-// {{{ md5_file() utility function
-if (!function_exists("md5_file")) {
- function md5_file($filename) {
- $fp = fopen($filename, "r");
- if (!$fp) return null;
- $contents = fread($fp, filesize($filename));
- fclose($fp);
- return md5($contents);
- }
-}
-// }}}
-
-?>
diff --git a/pear/PEAR/Packager.php b/pear/PEAR/Packager.php
deleted file mode 100644
index 3e729fb5fe..0000000000
--- a/pear/PEAR/Packager.php
+++ /dev/null
@@ -1,165 +0,0 @@
-<?php
-//
-// +----------------------------------------------------------------------+
-// | PHP Version 5 |
-// +----------------------------------------------------------------------+
-// | Copyright (c) 1997-2004 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. |
-// +----------------------------------------------------------------------+
-// | Authors: Stig Bakken <ssb@php.net> |
-// | Tomas V.V.Cox <cox@idecnet.com> |
-// +----------------------------------------------------------------------+
-//
-// $Id$
-
-require_once 'PEAR/Common.php';
-require_once 'System.php';
-
-/**
- * Administration class used to make a PEAR release tarball.
- *
- * TODO:
- * - add an extra param the dir where to place the created package
- *
- * @since PHP 4.0.2
- * @author Stig Bakken <ssb@php.net>
- */
-class PEAR_Packager extends PEAR_Common
-{
- // {{{ constructor
-
- function PEAR_Packager()
- {
- parent::PEAR_Common();
- }
-
- // }}}
- // {{{ destructor
-
- function _PEAR_Packager()
- {
- parent::_PEAR_Common();
- }
-
- // }}}
-
- // {{{ package()
-
- function package($pkgfile = null, $compress = true)
- {
- // {{{ validate supplied package.xml file
- if (empty($pkgfile)) {
- $pkgfile = 'package.xml';
- }
- // $this->pkginfo gets populated inside
- $pkginfo = $this->infoFromDescriptionFile($pkgfile);
- if (PEAR::isError($pkginfo)) {
- return $this->raiseError($pkginfo);
- }
-
- $pkgdir = dirname(realpath($pkgfile));
- $pkgfile = basename($pkgfile);
-
- $errors = $warnings = array();
- $this->validatePackageInfo($pkginfo, $errors, $warnings, $pkgdir);
- foreach ($warnings as $w) {
- $this->log(1, "Warning: $w");
- }
- foreach ($errors as $e) {
- $this->log(0, "Error: $e");
- }
- if (sizeof($errors) > 0) {
- return $this->raiseError('Errors in package');
- }
- // }}}
-
- $pkgver = $pkginfo['package'] . '-' . $pkginfo['version'];
-
- // {{{ Create the package file list
- $filelist = array();
- $i = 0;
-
- foreach ($pkginfo['filelist'] as $fname => $atts) {
- $file = $pkgdir . DIRECTORY_SEPARATOR . $fname;
- if (!file_exists($file)) {
- return $this->raiseError("File does not exist: $fname");
- } else {
- $filelist[$i++] = $file;
- if (empty($pkginfo['filelist'][$fname]['md5sum'])) {
- $md5sum = md5_file($file);
- $pkginfo['filelist'][$fname]['md5sum'] = $md5sum;
- }
- $this->log(2, "Adding file $fname");
- }
- }
- // }}}
-
- // {{{ regenerate package.xml
- $new_xml = $this->xmlFromInfo($pkginfo);
- if (PEAR::isError($new_xml)) {
- return $this->raiseError($new_xml);
- }
- if (!($tmpdir = System::mktemp(array('-d')))) {
- return $this->raiseError("PEAR_Packager: mktemp failed");
- }
- $newpkgfile = $tmpdir . DIRECTORY_SEPARATOR . 'package.xml';
- $np = @fopen($newpkgfile, 'wb');
- if (!$np) {
- return $this->raiseError("PEAR_Packager: unable to rewrite $pkgfile as $newpkgfile");
- }
- fwrite($np, $new_xml);
- fclose($np);
- // }}}
-
- // {{{ TAR the Package -------------------------------------------
- $ext = $compress ? '.tgz' : '.tar';
- $dest_package = getcwd() . DIRECTORY_SEPARATOR . $pkgver . $ext;
- $tar =& new Archive_Tar($dest_package, $compress);
- $tar->setErrorHandling(PEAR_ERROR_RETURN); // XXX Don't print errors
- // ----- Creates with the package.xml file
- $ok = $tar->createModify(array($newpkgfile), '', $tmpdir);
- if (PEAR::isError($ok)) {
- return $this->raiseError($ok);
- } elseif (!$ok) {
- return $this->raiseError('PEAR_Packager: tarball creation failed');
- }
- // ----- Add the content of the package
- if (!$tar->addModify($filelist, $pkgver, $pkgdir)) {
- return $this->raiseError('PEAR_Packager: tarball creation failed');
- }
- $this->log(1, "Package $dest_package done");
- if (file_exists("$pkgdir/CVS/Root")) {
- $cvsversion = preg_replace('/[^a-z0-9]/i', '_', $pkginfo['version']);
- $cvstag = "RELEASE_$cvsversion";
- $this->log(1, "Tag the released code with `pear cvstag $pkgfile'");
- $this->log(1, "(or set the CVS tag $cvstag by hand)");
- }
- // }}}
-
- return $dest_package;
- }
-
- // }}}
-}
-
-// {{{ md5_file() utility function
-if (!function_exists('md5_file')) {
- function md5_file($file) {
- if (!$fd = @fopen($file, 'r')) {
- return false;
- }
- $md5 = md5(fread($fd, filesize($file)));
- fclose($fd);
- return $md5;
- }
-}
-// }}}
-
-?>
diff --git a/pear/PEAR/Registry.php b/pear/PEAR/Registry.php
deleted file mode 100644
index f85bbfdd56..0000000000
--- a/pear/PEAR/Registry.php
+++ /dev/null
@@ -1,533 +0,0 @@
-<?php
-//
-// +----------------------------------------------------------------------+
-// | PHP Version 5 |
-// +----------------------------------------------------------------------+
-// | Copyright (c) 1997-2004 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: Stig Bakken <ssb@php.net> |
-// | Tomas V.V.Cox <cox@idecnet.com> |
-// | |
-// +----------------------------------------------------------------------+
-//
-// $Id$
-
-/*
-TODO:
- - Transform into singleton()
- - Add application level lock (avoid change the registry from the cmdline
- while using the GTK interface, for ex.)
-*/
-require_once "System.php";
-require_once "PEAR.php";
-
-define('PEAR_REGISTRY_ERROR_LOCK', -2);
-define('PEAR_REGISTRY_ERROR_FORMAT', -3);
-define('PEAR_REGISTRY_ERROR_FILE', -4);
-
-/**
- * Administration class used to maintain the installed package database.
- */
-class PEAR_Registry extends PEAR
-{
- // {{{ properties
-
- /** Directory where registry files are stored.
- * @var string
- */
- var $statedir = '';
-
- /** File where the file map is stored
- * @var string
- */
- var $filemap = '';
-
- /** Name of file used for locking the registry
- * @var string
- */
- var $lockfile = '';
-
- /** File descriptor used during locking
- * @var resource
- */
- var $lock_fp = null;
-
- /** Mode used during locking
- * @var int
- */
- var $lock_mode = 0; // XXX UNUSED
-
- /** Cache of package information. Structure:
- * array(
- * 'package' => array('id' => ... ),
- * ... )
- * @var array
- */
- var $pkginfo_cache = array();
-
- /** Cache of file map. Structure:
- * array( '/path/to/file' => 'package', ... )
- * @var array
- */
- var $filemap_cache = array();
-
- // }}}
-
- // {{{ constructor
-
- /**
- * PEAR_Registry constructor.
- *
- * @param string (optional) PEAR install directory (for .php files)
- *
- * @access public
- */
- function PEAR_Registry($pear_install_dir = PEAR_INSTALL_DIR)
- {
- parent::PEAR();
- $ds = DIRECTORY_SEPARATOR;
- $this->install_dir = $pear_install_dir;
- $this->statedir = $pear_install_dir.$ds.'.registry';
- $this->filemap = $pear_install_dir.$ds.'.filemap';
- $this->lockfile = $pear_install_dir.$ds.'.lock';
-
- // XXX Compatibility code should be removed in the future
- // rename all registry files if any to lowercase
- if (!OS_WINDOWS && $handle = @opendir($this->statedir)) {
- $dest = $this->statedir . DIRECTORY_SEPARATOR;
- while (false !== ($file = readdir($handle))) {
- if (preg_match('/^.*[A-Z].*\.reg$/', $file)) {
- rename($dest . $file, $dest . strtolower($file));
- }
- }
- closedir($handle);
- }
- if (!file_exists($this->filemap)) {
- $this->rebuildFileMap();
- }
- }
-
- // }}}
- // {{{ destructor
-
- /**
- * PEAR_Registry destructor. Makes sure no locks are forgotten.
- *
- * @access private
- */
- function _PEAR_Registry()
- {
- parent::_PEAR();
- if (is_resource($this->lock_fp)) {
- $this->_unlock();
- }
- }
-
- // }}}
-
- // {{{ _assertStateDir()
-
- /**
- * Make sure the directory where we keep registry files exists.
- *
- * @return bool TRUE if directory exists, FALSE if it could not be
- * created
- *
- * @access private
- */
- function _assertStateDir()
- {
- if (!@is_dir($this->statedir)) {
- if (!System::mkdir(array('-p', $this->statedir))) {
- return $this->raiseError("could not create directory '{$this->statedir}'");
- }
- }
- return true;
- }
-
- // }}}
- // {{{ _packageFileName()
-
- /**
- * Get the name of the file where data for a given package is stored.
- *
- * @param string package name
- *
- * @return string registry file name
- *
- * @access public
- */
- function _packageFileName($package)
- {
- return $this->statedir . DIRECTORY_SEPARATOR . strtolower($package) . '.reg';
- }
-
- // }}}
- // {{{ _openPackageFile()
-
- function _openPackageFile($package, $mode)
- {
- $this->_assertStateDir();
- $file = $this->_packageFileName($package);
- $fp = @fopen($file, $mode);
- if (!$fp) {
- return null;
- }
- return $fp;
- }
-
- // }}}
- // {{{ _closePackageFile()
-
- function _closePackageFile($fp)
- {
- fclose($fp);
- }
-
- // }}}
- // {{{ rebuildFileMap()
-
- function rebuildFileMap()
- {
- $packages = $this->listPackages();
- $files = array();
- foreach ($packages as $package) {
- $version = $this->packageInfo($package, 'version');
- $filelist = $this->packageInfo($package, 'filelist');
- if (!is_array($filelist)) {
- continue;
- }
- foreach ($filelist as $name => $attrs) {
- if (isset($attrs['role']) && $attrs['role'] != 'php') {
- continue;
- }
- if (isset($attrs['baseinstalldir'])) {
- $file = $attrs['baseinstalldir'].DIRECTORY_SEPARATOR.$name;
- } else {
- $file = $name;
- }
- $file = preg_replace(',^/+,', '', $file);
- $files[$file] = $package;
- }
- }
- $this->_assertStateDir();
- $fp = @fopen($this->filemap, 'wb');
- if (!$fp) {
- return false;
- }
- $this->filemap_cache = $files;
- fwrite($fp, serialize($files));
- fclose($fp);
- return true;
- }
-
- // }}}
- // {{{ readFileMap()
-
- function readFileMap()
- {
- $fp = @fopen($this->filemap, 'r');
- if (!$fp) {
- return $this->raiseError('PEAR_Registry: could not open filemap', PEAR_REGISTRY_ERROR_FILE, null, null, $php_errormsg);
- }
- $fsize = filesize($this->filemap);
- $rt = get_magic_quotes_runtime();
- set_magic_quotes_runtime(0);
- $data = fread($fp, $fsize);
- set_magic_quotes_runtime($rt);
- fclose($fp);
- $tmp = unserialize($data);
- if (!$tmp && $fsize > 7) {
- return $this->raiseError('PEAR_Registry: invalid filemap data', PEAR_REGISTRY_ERROR_FORMAT, null, null, $data);
- }
- $this->filemap_cache = $tmp;
- return true;
- }
-
- // }}}
- // {{{ _lock()
-
- /**
- * Lock the registry.
- *
- * @param integer lock mode, one of LOCK_EX, LOCK_SH or LOCK_UN.
- * See flock manual for more information.
- *
- * @return bool TRUE on success, FALSE if locking failed, or a
- * PEAR error if some other error occurs (such as the
- * lock file not being writable).
- *
- * @access private
- */
- function _lock($mode = LOCK_EX)
- {
- if (!eregi('Windows 9', php_uname())) {
- if ($mode != LOCK_UN && is_resource($this->lock_fp)) {
- // XXX does not check type of lock (LOCK_SH/LOCK_EX)
- return true;
- }
- if (PEAR::isError($err = $this->_assertStateDir())) {
- return $err;
- }
- $open_mode = 'w';
- // XXX People reported problems with LOCK_SH and 'w'
- if ($mode === LOCK_SH || $mode === LOCK_UN) {
- if (@!is_file($this->lockfile)) {
- touch($this->lockfile);
- }
- $open_mode = 'r';
- }
-
- $this->lock_fp = @fopen($this->lockfile, $open_mode);
-
- if (!is_resource($this->lock_fp)) {
- return $this->raiseError("could not create lock file" .
- (isset($php_errormsg) ? ": " . $php_errormsg : ""));
- }
- if (!(int)flock($this->lock_fp, $mode)) {
- switch ($mode) {
- case LOCK_SH: $str = 'shared'; break;
- case LOCK_EX: $str = 'exclusive'; break;
- case LOCK_UN: $str = 'unlock'; break;
- default: $str = 'unknown'; break;
- }
- return $this->raiseError("could not acquire $str lock ($this->lockfile)",
- PEAR_REGISTRY_ERROR_LOCK);
- }
- }
- return true;
- }
-
- // }}}
- // {{{ _unlock()
-
- function _unlock()
- {
- $ret = $this->_lock(LOCK_UN);
- $this->lock_fp = null;
- return $ret;
- }
-
- // }}}
- // {{{ _packageExists()
-
- function _packageExists($package)
- {
- return file_exists($this->_packageFileName($package));
- }
-
- // }}}
- // {{{ _packageInfo()
-
- function _packageInfo($package = null, $key = null)
- {
- if ($package === null) {
- return array_map(array($this, '_packageInfo'),
- $this->_listPackages());
- }
- $fp = $this->_openPackageFile($package, 'r');
- if ($fp === null) {
- return null;
- }
- $rt = get_magic_quotes_runtime();
- set_magic_quotes_runtime(0);
- $data = fread($fp, filesize($this->_packageFileName($package)));
- set_magic_quotes_runtime($rt);
- $this->_closePackageFile($fp);
- $data = unserialize($data);
- if ($key === null) {
- return $data;
- }
- if (isset($data[$key])) {
- return $data[$key];
- }
- return null;
- }
-
- // }}}
- // {{{ _listPackages()
-
- function _listPackages()
- {
- $pkglist = array();
- $dp = @opendir($this->statedir);
- if (!$dp) {
- return $pkglist;
- }
- while ($ent = readdir($dp)) {
- if ($ent{0} == '.' || substr($ent, -4) != '.reg') {
- continue;
- }
- $pkglist[] = substr($ent, 0, -4);
- }
- return $pkglist;
- }
-
- // }}}
-
- // {{{ packageExists()
-
- function packageExists($package)
- {
- if (PEAR::isError($e = $this->_lock(LOCK_SH))) {
- return $e;
- }
- $ret = $this->_packageExists($package);
- $this->_unlock();
- return $ret;
- }
-
- // }}}
- // {{{ packageInfo()
-
- function packageInfo($package = null, $key = null)
- {
- if (PEAR::isError($e = $this->_lock(LOCK_SH))) {
- return $e;
- }
- $ret = $this->_packageInfo($package, $key);
- $this->_unlock();
- return $ret;
- }
-
- // }}}
- // {{{ listPackages()
-
- function listPackages()
- {
- if (PEAR::isError($e = $this->_lock(LOCK_SH))) {
- return $e;
- }
- $ret = $this->_listPackages();
- $this->_unlock();
- return $ret;
- }
-
- // }}}
- // {{{ addPackage()
-
- function addPackage($package, $info)
- {
- if ($this->packageExists($package)) {
- return false;
- }
- if (PEAR::isError($e = $this->_lock(LOCK_EX))) {
- return $e;
- }
- $fp = $this->_openPackageFile($package, 'wb');
- if ($fp === null) {
- $this->_unlock();
- return false;
- }
- $info['_lastmodified'] = time();
- fwrite($fp, serialize($info));
- $this->_closePackageFile($fp);
- $this->_unlock();
- return true;
- }
-
- // }}}
- // {{{ deletePackage()
-
- function deletePackage($package)
- {
- if (PEAR::isError($e = $this->_lock(LOCK_EX))) {
- return $e;
- }
- $file = $this->_packageFileName($package);
- $ret = @unlink($file);
- $this->rebuildFileMap();
- $this->_unlock();
- return $ret;
- }
-
- // }}}
- // {{{ updatePackage()
-
- function updatePackage($package, $info, $merge = true)
- {
- $oldinfo = $this->packageInfo($package);
- if (empty($oldinfo)) {
- return false;
- }
- if (PEAR::isError($e = $this->_lock(LOCK_EX))) {
- return $e;
- }
- $fp = $this->_openPackageFile($package, 'w');
- if ($fp === null) {
- $this->_unlock();
- return false;
- }
- $info['_lastmodified'] = time();
- if ($merge) {
- fwrite($fp, serialize(array_merge($oldinfo, $info)));
- } else {
- fwrite($fp, serialize($info));
- }
- $this->_closePackageFile($fp);
- if (isset($info['filelist'])) {
- $this->rebuildFileMap();
- }
- $this->_unlock();
- return true;
- }
-
- // }}}
- // {{{ checkFileMap()
-
- /**
- * Test whether a file belongs to a package.
- *
- * @param string $path file path, absolute or relative to the pear
- * install dir
- *
- * @return string which package the file belongs to, or an empty
- * string if the file does not belong to an installed package
- *
- * @access public
- */
- function checkFileMap($path)
- {
- if (is_array($path)) {
- static $notempty;
- if (empty($notempty)) {
- $notempty = create_function('$a','return !empty($a);');
- }
- $pkgs = array();
- foreach ($path as $name => $attrs) {
- if (is_array($attrs) && isset($attrs['baseinstalldir'])) {
- $name = $attrs['baseinstalldir'].DIRECTORY_SEPARATOR.$name;
- }
- $pkgs[$name] = $this->checkFileMap($name);
- }
- return array_filter($pkgs, $notempty);
- }
- if (empty($this->filemap_cache) && PEAR::isError($this->readFileMap())) {
- return $err;
- }
- if (isset($this->filemap_cache[$path])) {
- return $this->filemap_cache[$path];
- }
- $l = strlen($this->install_dir);
- if (substr($path, 0, $l) == $this->install_dir) {
- $path = preg_replace('!^'.DIRECTORY_SEPARATOR.'+!', '', substr($path, $l));
- }
- if (isset($this->filemap_cache[$path])) {
- return $this->filemap_cache[$path];
- }
- return '';
- }
-
- // }}}
-
-}
-
-?>
diff --git a/pear/PEAR/Remote.php b/pear/PEAR/Remote.php
deleted file mode 100644
index c75b11b5c1..0000000000
--- a/pear/PEAR/Remote.php
+++ /dev/null
@@ -1,394 +0,0 @@
-<?php
-//
-// +----------------------------------------------------------------------+
-// | PHP Version 5 |
-// +----------------------------------------------------------------------+
-// | Copyright (c) 1997-2004 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: Stig Bakken <ssb@php.net> |
-// +----------------------------------------------------------------------+
-//
-// $Id$
-
-require_once 'PEAR.php';
-require_once 'PEAR/Config.php';
-
-/**
- * This is a class for doing remote operations against the central
- * PEAR database.
- *
- * @nodep XML_RPC_Value
- * @nodep XML_RPC_Message
- * @nodep XML_RPC_Client
- */
-class PEAR_Remote extends PEAR
-{
- // {{{ properties
-
- var $config = null;
- var $cache = null;
-
- // }}}
-
- // {{{ PEAR_Remote(config_object)
-
- function PEAR_Remote(&$config)
- {
- $this->PEAR();
- $this->config = &$config;
- }
-
- // }}}
-
- // {{{ getCache()
-
-
- function getCache($args)
- {
- $id = md5(serialize($args));
- $cachedir = $this->config->get('cache_dir');
- $filename = $cachedir . DIRECTORY_SEPARATOR . 'xmlrpc_cache_' . $id;
- if (!file_exists($filename)) {
- return null;
- };
-
- $fp = fopen($filename, 'rb');
- if (!$fp) {
- return null;
- }
- $content = fread($fp, filesize($filename));
- fclose($fp);
- $result = array(
- 'age' => time() - filemtime($filename),
- 'lastChange' => filemtime($filename),
- 'content' => unserialize($content),
- );
- return $result;
- }
-
- // }}}
-
- // {{{ saveCache()
-
- function saveCache($args, $data)
- {
- $id = md5(serialize($args));
- $cachedir = $this->config->get('cache_dir');
- if (!file_exists($cachedir)) {
- System::mkdir(array('-p', $cachedir));
- }
- $filename = $cachedir.'/xmlrpc_cache_'.$id;
-
- $fp = @fopen($filename, "wb");
- if ($fp) {
- fwrite($fp, serialize($data));
- fclose($fp);
- };
- }
-
- // }}}
-
- // {{{ call(method, [args...])
-
- function call($method)
- {
- $_args = $args = func_get_args();
-
- $this->cache = $this->getCache($args);
- $cachettl = $this->config->get('cache_ttl');
- // If cache is newer than $cachettl seconds, we use the cache!
- if ($this->cache !== null && $this->cache['age'] < $cachettl) {
- return $this->cache['content'];
- };
-
- if (extension_loaded("xmlrpc")) {
- $result = call_user_func_array(array(&$this, 'call_epi'), $args);
- if (!PEAR::isError($result)) {
- $this->saveCache($_args, $result);
- };
- return $result;
- }
- if (!@include_once("XML/RPC.php")) {
- return $this->raiseError("For this remote PEAR operation you need to install the XML_RPC package");
- }
- array_shift($args);
- $server_host = $this->config->get('master_server');
- $username = $this->config->get('username');
- $password = $this->config->get('password');
- $eargs = array();
- foreach($args as $arg) $eargs[] = $this->_encode($arg);
- $f = new XML_RPC_Message($method, $eargs);
- if ($this->cache !== null) {
- $maxAge = '?maxAge='.$this->cache['lastChange'];
- } else {
- $maxAge = '';
- };
- $proxy_host = $proxy_port = $proxy_user = $proxy_pass = '';
- if ($proxy = parse_url($this->config->get('http_proxy'))) {
- $proxy_host = @$proxy['host'];
- $proxy_port = @$proxy['port'];
- $proxy_user = @urldecode(@$proxy['user']);
- $proxy_pass = @urldecode(@$proxy['pass']);
- }
- $c = new XML_RPC_Client('/xmlrpc.php'.$maxAge, $server_host, 80, $proxy_host, $proxy_port, $proxy_user, $proxy_pass);
- if ($username && $password) {
- $c->setCredentials($username, $password);
- }
- if ($this->config->get('verbose') >= 3) {
- $c->setDebug(1);
- }
- $r = $c->send($f);
- if (!$r) {
- return $this->raiseError("XML_RPC send failed");
- }
- $v = $r->value();
- if ($e = $r->faultCode()) {
- if ($e == $GLOBALS['XML_RPC_err']['http_error'] && strstr($r->faultString(), '304 Not Modified') !== false) {
- return $this->cache['content'];
- }
- return $this->raiseError($r->faultString(), $e);
- }
-
- $result = XML_RPC_decode($v);
- $this->saveCache($_args, $result);
- return $result;
- }
-
- // }}}
-
- // {{{ call_epi(method, [args...])
-
- function call_epi($method)
- {
- do {
- if (extension_loaded("xmlrpc")) {
- break;
- }
- if (OS_WINDOWS) {
- $ext = 'dll';
- } elseif (PHP_OS == 'HP-UX') {
- $ext = 'sl';
- } elseif (PHP_OS == 'AIX') {
- $ext = 'a';
- } else {
- $ext = 'so';
- }
- $ext = OS_WINDOWS ? 'dll' : 'so';
- @dl("xmlrpc-epi.$ext");
- if (extension_loaded("xmlrpc")) {
- break;
- }
- @dl("xmlrpc.$ext");
- if (extension_loaded("xmlrpc")) {
- break;
- }
- return $this->raiseError("unable to load xmlrpc extension");
- } while (false);
- $params = func_get_args();
- array_shift($params);
- $method = str_replace("_", ".", $method);
- $request = xmlrpc_encode_request($method, $params);
- $server_host = $this->config->get("master_server");
- if (empty($server_host)) {
- return $this->raiseError("PEAR_Remote::call: no master_server configured");
- }
- $server_port = 80;
- if ($http_proxy = $this->config->get('http_proxy')) {
- $proxy = parse_url($http_proxy);
- $proxy_host = $proxy_port = $proxy_user = $proxy_pass = '';
- $proxy_host = @$proxy['host'];
- $proxy_port = @$proxy['port'];
- $proxy_user = @urldecode(@$proxy['user']);
- $proxy_pass = @urldecode(@$proxy['pass']);
- $fp = @fsockopen($proxy_host, $proxy_port);
- $use_proxy = true;
- } else {
- $use_proxy = false;
- $fp = @fsockopen($server_host, $server_port);
- }
- if (!$fp && $http_proxy) {
- return $this->raiseError("PEAR_Remote::call: fsockopen(`$proxy_host', $proxy_port) failed");
- } elseif (!$fp) {
- return $this->raiseError("PEAR_Remote::call: fsockopen(`$server_host', $server_port) failed");
- }
- $len = strlen($request);
- $req_headers = "Host: $server_host:$server_port\r\n" .
- "Content-type: text/xml\r\n" .
- "Content-length: $len\r\n";
- $username = $this->config->get('username');
- $password = $this->config->get('password');
- if ($username && $password) {
- $req_headers .= "Cookie: PEAR_USER=$username; PEAR_PW=$password\r\n";
- $tmp = base64_encode("$username:$password");
- $req_headers .= "Authorization: Basic $tmp\r\n";
- }
- if ($this->cache !== null) {
- $maxAge = '?maxAge='.$this->cache['lastChange'];
- } else {
- $maxAge = '';
- };
-
- if ($use_proxy && $proxy_host != '' && $proxy_user != '') {
- $req_headers .= 'Proxy-Authorization: Basic '
- .base64_encode($proxy_user.':'.$proxy_pass)
- ."\r\n";
- }
-
- if ($this->config->get('verbose') > 3) {
- print "XMLRPC REQUEST HEADERS:\n";
- var_dump($req_headers);
- print "XMLRPC REQUEST BODY:\n";
- var_dump($request);
- }
-
- if ($use_proxy && $proxy_host != '') {
- $post_string = "POST http://".$server_host;
- if ($proxy_port > '') {
- $post_string .= ':'.$server_port;
- }
- } else {
- $post_string = "POST ";
- }
-
- fwrite($fp, ($post_string."/xmlrpc.php$maxAge HTTP/1.0\r\n$req_headers\r\n$request"));
- $response = '';
- $line1 = fgets($fp, 2048);
- if (!preg_match('!^HTTP/[0-9\.]+ (\d+) (.*)!', $line1, $matches)) {
- return $this->raiseError("PEAR_Remote: invalid HTTP response from XML-RPC server");
- }
- switch ($matches[1]) {
- case "200": // OK
- break;
- case "304": // Not Modified
- return $this->cache['content'];
- case "401": // Unauthorized
- if ($username && $password) {
- return $this->raiseError("PEAR_Remote: authorization failed", 401);
- } else {
- return $this->raiseError("PEAR_Remote: authorization required, please log in first", 401);
- }
- default:
- return $this->raiseError("PEAR_Remote: unexpected HTTP response", (int)$matches[1], null, null, "$matches[1] $matches[2]");
- }
- while (trim(fgets($fp, 2048)) != ''); // skip rest of headers
- while ($chunk = fread($fp, 10240)) {
- $response .= $chunk;
- }
- fclose($fp);
- if ($this->config->get('verbose') > 3) {
- print "XMLRPC RESPONSE:\n";
- var_dump($response);
- }
- $ret = xmlrpc_decode($response);
- if (is_array($ret) && isset($ret['__PEAR_TYPE__'])) {
- if ($ret['__PEAR_TYPE__'] == 'error') {
- if (isset($ret['__PEAR_CLASS__'])) {
- $class = $ret['__PEAR_CLASS__'];
- } else {
- $class = "PEAR_Error";
- }
- if ($ret['code'] === '') $ret['code'] = null;
- if ($ret['message'] === '') $ret['message'] = null;
- if ($ret['userinfo'] === '') $ret['userinfo'] = null;
- if (strtolower($class) == 'db_error') {
- $ret = $this->raiseError(PEAR::errorMessage($ret['code']),
- $ret['code'], null, null,
- $ret['userinfo']);
- } else {
- $ret = $this->raiseError($ret['message'], $ret['code'],
- null, null, $ret['userinfo']);
- }
- }
- } elseif (is_array($ret) && sizeof($ret) == 1 && isset($ret[0])
- && is_array($ret[0]) &&
- !empty($ret[0]['faultString']) &&
- !empty($ret[0]['faultCode'])) {
- extract($ret[0]);
- $faultString = "XML-RPC Server Fault: " .
- str_replace("\n", " ", $faultString);
- return $this->raiseError($faultString, $faultCode);
- }
- return $ret;
- }
-
- // }}}
-
- // {{{ _encode
-
- // a slightly extended version of XML_RPC_encode
- function _encode($php_val)
- {
- global $XML_RPC_Boolean, $XML_RPC_Int, $XML_RPC_Double;
- global $XML_RPC_String, $XML_RPC_Array, $XML_RPC_Struct;
-
- $type = gettype($php_val);
- $xmlrpcval = new XML_RPC_Value;
-
- switch($type) {
- case "array":
- reset($php_val);
- $firstkey = key($php_val);
- end($php_val);
- $lastkey = key($php_val);
- if ($firstkey === 0 && is_int($lastkey) &&
- ($lastkey + 1) == count($php_val)) {
- $is_continuous = true;
- reset($php_val);
- $size = count($php_val);
- for ($expect = 0; $expect < $size; $expect++, next($php_val)) {
- if (key($php_val) !== $expect) {
- $is_continuous = false;
- break;
- }
- }
- if ($is_continuous) {
- reset($php_val);
- $arr = array();
- while (list($k, $v) = each($php_val)) {
- $arr[$k] = $this->_encode($v);
- }
- $xmlrpcval->addArray($arr);
- break;
- }
- }
- // fall though if not numerical and continuous
- case "object":
- $arr = array();
- while (list($k, $v) = each($php_val)) {
- $arr[$k] = $this->_encode($v);
- }
- $xmlrpcval->addStruct($arr);
- break;
- case "integer":
- $xmlrpcval->addScalar($php_val, $XML_RPC_Int);
- break;
- case "double":
- $xmlrpcval->addScalar($php_val, $XML_RPC_Double);
- break;
- case "string":
- case "NULL":
- $xmlrpcval->addScalar($php_val, $XML_RPC_String);
- break;
- case "boolean":
- $xmlrpcval->addScalar($php_val, $XML_RPC_Boolean);
- break;
- case "unknown type":
- default:
- return null;
- }
- return $xmlrpcval;
- }
-
- // }}}
-
-}
-
-?>
diff --git a/pear/README b/pear/README
deleted file mode 100644
index c953c26b13..0000000000
--- a/pear/README
+++ /dev/null
@@ -1,18 +0,0 @@
- PEAR - PHP Extension and Application Repository
- ===============================================
- Dedicated to Malin Bakken, born 1999-11-21
-
-WHAT IS PEAR?
-
-PEAR is a code repository for PHP extensions and PHP library code
-similar to TeX's CTAN and Perl's CPAN.
-
-The intention behind PEAR is to provide a means for library code
-authors to organize their code in a defined way shared by other
-developers, and to give the PHP community a single source for such
-code.
-
-
-DOCUMENTATION
-
-Documentation for PEAR can be found at http://pear.php.net/manual/.
diff --git a/pear/System.php b/pear/System.php
deleted file mode 100644
index 7289016da5..0000000000
--- a/pear/System.php
+++ /dev/null
@@ -1,540 +0,0 @@
-<?php
-//
-// +----------------------------------------------------------------------+
-// | PHP Version 5 |
-// +----------------------------------------------------------------------+
-// | Copyright (c) 1997-2004 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. |
-// +----------------------------------------------------------------------+
-// | Authors: Tomas V.V.Cox <cox@idecnet.com> |
-// +----------------------------------------------------------------------+
-//
-// $Id$
-//
-
-require_once 'PEAR.php';
-require_once 'Console/Getopt.php';
-
-$GLOBALS['_System_temp_files'] = array();
-
-/**
-* System offers cross plattform compatible system functions
-*
-* Static functions for different operations. Should work under
-* Unix and Windows. The names and usage has been taken from its respectively
-* GNU commands. The functions will return (bool) false on error and will
-* trigger the error with the PHP trigger_error() function (you can silence
-* the error by prefixing a '@' sign after the function call).
-*
-* Documentation on this class you can find in:
-* http://pear.php.net/manual/
-*
-* Example usage:
-* if (!@System::rm('-r file1 dir1')) {
-* print "could not delete file1 or dir1";
-* }
-*
-* In case you need to to pass file names with spaces,
-* pass the params as an array:
-*
-* System::rm(array('-r', $file1, $dir1));
-*
-* @package System
-* @author Tomas V.V.Cox <cox@idecnet.com>
-* @version $Revision$
-* @access public
-* @see http://pear.php.net/manual/
-*/
-class System
-{
- /**
- * returns the commandline arguments of a function
- *
- * @param string $argv the commandline
- * @param string $short_options the allowed option short-tags
- * @param string $long_options the allowed option long-tags
- * @return array the given options and there values
- * @access private
- */
- function _parseArgs($argv, $short_options, $long_options = null)
- {
- if (!is_array($argv) && $argv !== null) {
- $argv = preg_split('/\s+/', $argv);
- }
- return Console_Getopt::getopt2($argv, $short_options);
- }
-
- /**
- * Output errors with PHP trigger_error(). You can silence the errors
- * with prefixing a "@" sign to the function call: @System::mkdir(..);
- *
- * @param mixed $error a PEAR error or a string with the error message
- * @return bool false
- * @access private
- */
- function raiseError($error)
- {
- if (PEAR::isError($error)) {
- $error = $error->getMessage();
- }
- trigger_error($error, E_USER_WARNING);
- return false;
- }
-
- /**
- * Creates a nested array representing the structure of a directory
- *
- * System::_dirToStruct('dir1', 0) =>
- * Array
- * (
- * [dirs] => Array
- * (
- * [0] => dir1
- * )
- *
- * [files] => Array
- * (
- * [0] => dir1/file2
- * [1] => dir1/file3
- * )
- * )
- * @param string $sPath Name of the directory
- * @param integer $maxinst max. deep of the lookup
- * @param integer $aktinst starting deep of the lookup
- * @return array the structure of the dir
- * @access private
- */
-
- function _dirToStruct($sPath, $maxinst, $aktinst = 0)
- {
- $struct = array('dirs' => array(), 'files' => array());
- if (($dir = @opendir($sPath)) === false) {
- System::raiseError("Could not open dir $sPath");
- return $struct; // XXX could not open error
- }
- $struct['dirs'][] = $sPath; // XXX don't add if '.' or '..' ?
- $list = array();
- while ($file = readdir($dir)) {
- if ($file != '.' && $file != '..') {
- $list[] = $file;
- }
- }
- closedir($dir);
- sort($list);
- if ($aktinst < $maxinst || $maxinst == 0) {
- foreach($list as $val) {
- $path = $sPath . DIRECTORY_SEPARATOR . $val;
- if (is_dir($path)) {
- $tmp = System::_dirToStruct($path, $maxinst, $aktinst+1);
- $struct = array_merge_recursive($tmp, $struct);
- } else {
- $struct['files'][] = $path;
- }
- }
- }
- return $struct;
- }
-
- /**
- * Creates a nested array representing the structure of a directory and files
- *
- * @param array $files Array listing files and dirs
- * @return array
- * @see System::_dirToStruct()
- */
- function _multipleToStruct($files)
- {
- $struct = array('dirs' => array(), 'files' => array());
- settype($files, 'array');
- foreach ($files as $file) {
- if (is_dir($file)) {
- $tmp = System::_dirToStruct($file, 0);
- $struct = array_merge_recursive($tmp, $struct);
- } else {
- $struct['files'][] = $file;
- }
- }
- return $struct;
- }
-
- /**
- * The rm command for removing files.
- * Supports multiple files and dirs and also recursive deletes
- *
- * @param string $args the arguments for rm
- * @return mixed PEAR_Error or true for success
- * @access public
- */
- function rm($args)
- {
- $opts = System::_parseArgs($args, 'rf'); // "f" do nothing but like it :-)
- if (PEAR::isError($opts)) {
- return System::raiseError($opts);
- }
- foreach($opts[0] as $opt) {
- if ($opt[0] == 'r') {
- $do_recursive = true;
- }
- }
- $ret = true;
- if (isset($do_recursive)) {
- $struct = System::_multipleToStruct($opts[1]);
- foreach($struct['files'] as $file) {
- if (!@unlink($file)) {
- $ret = false;
- }
- }
- foreach($struct['dirs'] as $dir) {
- if (!@rmdir($dir)) {
- $ret = false;
- }
- }
- } else {
- foreach ($opts[1] as $file) {
- $delete = (is_dir($file)) ? 'rmdir' : 'unlink';
- if (!@$delete($file)) {
- $ret = false;
- }
- }
- }
- return $ret;
- }
-
- /**
- * Make directories. Note that we use call_user_func('mkdir') to avoid
- * a problem with ZE2 calling System::mkDir instead of the native PHP func.
- *
- * @param string $args the name of the director(y|ies) to create
- * @return bool True for success
- * @access public
- */
- function mkDir($args)
- {
- $opts = System::_parseArgs($args, 'pm:');
- if (PEAR::isError($opts)) {
- return System::raiseError($opts);
- }
- $mode = 0777; // default mode
- foreach($opts[0] as $opt) {
- if ($opt[0] == 'p') {
- $create_parents = true;
- } elseif($opt[0] == 'm') {
- // if the mode is clearly an octal number (starts with 0)
- // convert it to decimal
- if (strlen($opt[1]) && $opt[1]{0} == '0') {
- $opt[1] = octdec($opt[1]);
- } else {
- // convert to int
- $opt[1] += 0;
- }
- $mode = $opt[1];
- }
- }
- $ret = true;
- if (isset($create_parents)) {
- foreach($opts[1] as $dir) {
- $dirstack = array();
- while (!@is_dir($dir) && $dir != DIRECTORY_SEPARATOR) {
- array_unshift($dirstack, $dir);
- $dir = dirname($dir);
- }
- while ($newdir = array_shift($dirstack)) {
- if (!call_user_func('mkdir', $newdir, $mode)) {
- $ret = false;
- }
- }
- }
- } else {
- foreach($opts[1] as $dir) {
- if (!@is_dir($dir) && !call_user_func('mkdir', $dir, $mode)) {
- $ret = false;
- }
- }
- }
- return $ret;
- }
-
- /**
- * Concatenate files
- *
- * Usage:
- * 1) $var = System::cat('sample.txt test.txt');
- * 2) System::cat('sample.txt test.txt > final.txt');
- * 3) System::cat('sample.txt test.txt >> final.txt');
- *
- * Note: as the class use fopen, urls should work also (test that)
- *
- * @param string $args the arguments
- * @return boolean true on success
- * @access public
- */
- function &cat($args)
- {
- $ret = null;
- $files = array();
- if (!is_array($args)) {
- $args = preg_split('/\s+/', $args);
- }
- for($i=0; $i < count($args); $i++) {
- if ($args[$i] == '>') {
- $mode = 'wb';
- $outputfile = $args[$i+1];
- break;
- } elseif ($args[$i] == '>>') {
- $mode = 'ab+';
- $outputfile = $args[$i+1];
- break;
- } else {
- $files[] = $args[$i];
- }
- }
- if (isset($mode)) {
- if (!$outputfd = fopen($outputfile, $mode)) {
- $err = System::raiseError("Could not open $outputfile");
- return $err;
- }
- $ret = true;
- }
- foreach ($files as $file) {
- if (!$fd = fopen($file, 'r')) {
- System::raiseError("Could not open $file");
- continue;
- }
- while ($cont = fread($fd, 2048)) {
- if (isset($outputfd)) {
- fwrite($outputfd, $cont);
- } else {
- $ret .= $cont;
- }
- }
- fclose($fd);
- }
- if (@is_resource($outputfd)) {
- fclose($outputfd);
- }
- return $ret;
- }
-
- /**
- * Creates temporary files or directories. This function will remove
- * the created files when the scripts finish its execution.
- *
- * Usage:
- * 1) $tempfile = System::mktemp("prefix");
- * 2) $tempdir = System::mktemp("-d prefix");
- * 3) $tempfile = System::mktemp();
- * 4) $tempfile = System::mktemp("-t /var/tmp prefix");
- *
- * prefix -> The string that will be prepended to the temp name
- * (defaults to "tmp").
- * -d -> A temporary dir will be created instead of a file.
- * -t -> The target dir where the temporary (file|dir) will be created. If
- * this param is missing by default the env vars TMP on Windows or
- * TMPDIR in Unix will be used. If these vars are also missing
- * c:\windows\temp or /tmp will be used.
- *
- * @param string $args The arguments
- * @return mixed the full path of the created (file|dir) or false
- * @see System::tmpdir()
- * @access public
- */
- function mktemp($args = null)
- {
- static $first_time = true;
- $opts = System::_parseArgs($args, 't:d');
- if (PEAR::isError($opts)) {
- return System::raiseError($opts);
- }
- foreach($opts[0] as $opt) {
- if($opt[0] == 'd') {
- $tmp_is_dir = true;
- } elseif($opt[0] == 't') {
- $tmpdir = $opt[1];
- }
- }
- $prefix = (isset($opts[1][0])) ? $opts[1][0] : 'tmp';
- if (!isset($tmpdir)) {
- $tmpdir = System::tmpdir();
- }
- if (!System::mkDir("-p $tmpdir")) {
- return false;
- }
- $tmp = tempnam($tmpdir, $prefix);
- if (isset($tmp_is_dir)) {
- unlink($tmp); // be careful possible race condition here
- if (!call_user_func('mkdir', $tmp, 0700)) {
- return System::raiseError("Unable to create temporary directory $tmpdir");
- }
- }
- $GLOBALS['_System_temp_files'][] = $tmp;
- if ($first_time) {
- PEAR::registerShutdownFunc(array('System', '_removeTmpFiles'));
- $first_time = false;
- }
- return $tmp;
- }
-
- /**
- * Remove temporary files created my mkTemp. This function is executed
- * at script shutdown time
- *
- * @access private
- */
- function _removeTmpFiles()
- {
- if (count($GLOBALS['_System_temp_files'])) {
- $delete = $GLOBALS['_System_temp_files'];
- array_unshift($delete, '-r');
- System::rm($delete);
- }
- }
-
- /**
- * Get the path of the temporal directory set in the system
- * by looking in its environments variables.
- * Note: php.ini-recommended removes the "E" from the variables_order setting,
- * making unavaible the $_ENV array, that s why we do tests with _ENV
- *
- * @return string The temporal directory on the system
- */
- function tmpdir()
- {
- if (OS_WINDOWS) {
- if ($var = isset($_ENV['TEMP']) ? $_ENV['TEMP'] : getenv('TEMP')) {
- return $var;
- }
- if ($var = isset($_ENV['TMP']) ? $_ENV['TMP'] : getenv('TMP')) {
- return $var;
- }
- if ($var = isset($_ENV['windir']) ? $_ENV['windir'] : getenv('windir')) {
- return $var;
- }
- return getenv('SystemRoot') . '\temp';
- }
- if ($var = isset($_ENV['TMPDIR']) ? $_ENV['TMPDIR'] : getenv('TMPDIR')) {
- return $var;
- }
- return '/tmp';
- }
-
- /**
- * The "which" command (show the full path of a command)
- *
- * @param string $program The command to search for
- * @return mixed A string with the full path or false if not found
- * @author Stig Bakken <ssb@php.net>
- */
- function which($program, $fallback = false)
- {
- // is_executable() is not available on windows
- if (OS_WINDOWS) {
- $pear_is_executable = 'is_file';
- } else {
- $pear_is_executable = 'is_executable';
- }
-
- // full path given
- if (basename($program) != $program) {
- return (@$pear_is_executable($program)) ? $program : $fallback;
- }
-
- // XXX FIXME honor safe mode
- $path_delim = OS_WINDOWS ? ';' : ':';
- $exe_suffixes = OS_WINDOWS ? array('.exe','.bat','.cmd','.com') : array('');
- $path_elements = explode($path_delim, getenv('PATH'));
- foreach ($exe_suffixes as $suff) {
- foreach ($path_elements as $dir) {
- $file = $dir . DIRECTORY_SEPARATOR . $program . $suff;
- if (@is_file($file) && @$pear_is_executable($file)) {
- return $file;
- }
- }
- }
- return $fallback;
- }
-
- /**
- * The "find" command
- *
- * Usage:
- *
- * System::find($dir);
- * System::find("$dir -type d");
- * System::find("$dir -type f");
- * System::find("$dir -name *.php");
- * System::find("$dir -name *.php -name *.htm*");
- * System::find("$dir -maxdepth 1");
- *
- * Params implmented:
- * $dir -> Start the search at this directory
- * -type d -> return only directories
- * -type f -> return only files
- * -maxdepth <n> -> max depth of recursion
- * -name <pattern> -> search pattern (bash style). Multiple -name param allowed
- *
- * @param mixed Either array or string with the command line
- * @return array Array of found files
- *
- */
- function find($args)
- {
- if (!is_array($args)) {
- $args = preg_split('/\s+/', $args, -1, PREG_SPLIT_NO_EMPTY);
- }
- $dir = array_shift($args);
- $patterns = array();
- $depth = 0;
- $do_files = $do_dirs = true;
- for ($i = 0; $i < count($args); $i++) {
- switch ($args[$i]) {
- case '-type':
- if (in_array($args[$i+1], array('d', 'f'))) {
- if ($args[$i+1] == 'd') {
- $do_files = false;
- } else {
- $do_dirs = false;
- }
- }
- $i++;
- break;
- case '-name':
- $patterns[] = "(" . preg_replace(array('/\./', '/\*/'),
- array('\.', '.*'),
- $args[$i+1])
- . ")";
- $i++;
- break;
- case '-maxdepth':
- $depth = $args[$i+1];
- break;
- }
- }
- $path = System::_dirToStruct($dir, $depth);
- if ($do_files && $do_dirs) {
- $files = array_merge($path['files'], $path['dirs']);
- } elseif ($do_dirs) {
- $files = $path['dirs'];
- } else {
- $files = $path['files'];
- }
- if (count($patterns)) {
- $patterns = implode('|', $patterns);
- $ret = array();
- for ($i = 0; $i < count($files); $i++) {
- if (preg_match("#^$patterns\$#", $files[$i])) {
- $ret[] = $files[$i];
- }
- }
- return $ret;
- }
- return $files;
- }
-}
-?>
diff --git a/pear/catalog b/pear/catalog
deleted file mode 100644
index 6e0c69d40b..0000000000
--- a/pear/catalog
+++ /dev/null
@@ -1 +0,0 @@
-PUBLIC "-//PHP Group//DTD PEAR Package 1.0//EN//XML" "package.dtd"
diff --git a/pear/docs/Archive_Tar.txt b/pear/docs/Archive_Tar.txt
deleted file mode 100644
index 73bee0d786..0000000000
--- a/pear/docs/Archive_Tar.txt
+++ /dev/null
@@ -1,424 +0,0 @@
-Documentation for class Archive_Tar
-===================================
-Last update : 2001-08-15
-
-
-
-Overview :
-----------
-
- The Archive_Tar class helps in creating and managing GNU TAR format
- files compressed by GNU ZIP or not.
- The class offers basic functions like creating an archive, adding
- files in the archive, extracting files from the archive and listing
- the archive content.
- It also provide advanced functions that allow the adding and
- extraction of files with path manipulation.
-
-
-Sample :
---------
-
- // ----- Creating the object (uncompressed archive)
- $tar_object = new Archive_Tar("tarname.tar");
- $tar_object->setErrorHandling(PEAR_ERROR_PRINT);
-
- // ----- Creating the archive
- $v_list[0]="file.txt";
- $v_list[1]="data/";
- $v_list[2]="file.log";
- $tar_object->create($v_list);
-
- // ----- Adding files
- $v_list[0]="dev/file.txt";
- $v_list[1]="dev/data/";
- $v_list[2]="log/file.log";
- $tar_object->add($v_list);
-
- // ----- Adding more files
- $tar_object->add("release/newfile.log release/readme.txt");
-
- // ----- Listing the content
- if (($v_list = $tar_object->listContent()) != 0)
- for ($i=0; $i<sizeof($v_list); $i++)
- {
- echo "Filename :'".$v_list[$i][filename]."'<br>";
- echo " .size :'".$v_list[$i][size]."'<br>";
- echo " .mtime :'".$v_list[$i][mtime]."' (".date("l dS of F Y h:i:s A", $v_list[$i][mtime]).")<br>";
- echo " .mode :'".$v_list[$i][mode]."'<br>";
- echo " .uid :'".$v_list[$i][uid]."'<br>";
- echo " .gid :'".$v_list[$i][gid]."'<br>";
- echo " .typeflag :'".$v_list[$i][typeflag]."'<br>";
- }
-
- // ----- Extracting the archive in directory "install"
- $tar_object->extract("install");
-
-
-Public arguments :
-------------------
-
-None
-
-
-Public Methods :
-----------------
-
-Method : Archive_Tar($p_tarname, $compress = false)
-Description :
- Archive_Tar Class constructor. This flavour of the constructor only
- declare a new Archive_Tar object, identifying it by the name of the
- tar file.
- If the compress argument is set the tar will be read or created as a
- gzip compressed TAR file.
-Arguments :
- $p_tarname : A valid filename for the tar archive file.
- $p_compress : true/false. Indicate if the archive need to be
- compressed or not.
-Return value :
- The Archive_Tar object.
-Sample :
- $tar_object = new Archive_Tar("tarname.tar");
- $tar_object_compressed = new Archive_Tar("tarname.tgz", true);
-How it works :
- Initialize the object.
-
-Method : create($p_filelist)
-Description :
- This method creates the archive file and add the files / directories
- that are listed in $p_filelist.
- If the file already exists and is writable, it is replaced by the
- new tar. It is a create and not an add. If the file exists and is
- read-only or is a directory it is not replaced. The method return
- false and a PEAR error text.
- The $p_filelist parameter can be an array of string, each string
- representing a filename or a directory name with their path if
- needed. It can also be a single string with names separated by a
- single blank.
- See also createModify() method for more details.
-Arguments :
- $p_filelist : An array of filenames and directory names, or a single
- string with names separated by a single blank space.
-Return value :
- true on success, false on error.
-Sample 1 :
- $tar_object = new Archive_Tar("tarname.tar");
- $tar_object->setErrorHandling(PEAR_ERROR_PRINT); // Optional error handling
- $v_list[0]="file.txt";
- $v_list[1]="data/"; (Optional '/' at the end)
- $v_list[2]="file.log";
- $tar_object->create($v_list);
-Sample 2 :
- $tar_object = new Archive_Tar("tarname.tar");
- $tar_object->setErrorHandling(PEAR_ERROR_PRINT); // Optional error handling
- $tar_object->create("file.txt data/ file.log");
-How it works :
- Just calling the createModify() method with the right parameters.
-
-Method : createModify($p_filelist, $p_add_dir, $p_remove_dir = "")
-Description :
- This method creates the archive file and add the files / directories
- that are listed in $p_filelist.
- If the file already exists and is writable, it is replaced by the
- new tar. It is a create and not an add. If the file exists and is
- read-only or is a directory it is not replaced. The method return
- false and a PEAR error text.
- The $p_filelist parameter can be an array of string, each string
- representing a filename or a directory name with their path if
- needed. It can also be a single string with names separated by a
- single blank.
- The path indicated in $p_remove_dir will be removed from the
- memorized path of each file / directory listed when this path
- exists. By default nothing is removed (empty path "")
- The path indicated in $p_add_dir will be added at the beginning of
- the memorized path of each file / directory listed. However it can
- be set to empty "". The adding of a path is done after the removing
- of path.
- The path add/remove ability enables the user to prepare an archive
- for extraction in a different path than the origin files are.
- See also addModify() method for file adding properties.
-Arguments :
- $p_filelist : An array of filenames and directory names, or a single
- string with names separated by a single blank space.
- $p_add_dir : A string which contains a path to be added to the
- memorized path of each element in the list.
- $p_remove_dir : A string which contains a path to be removed from
- the memorized path of each element in the list, when
- relevant.
-Return value :
- true on success, false on error.
-Sample 1 :
- $tar_object = new Archive_Tar("tarname.tar");
- $tar_object->setErrorHandling(PEAR_ERROR_PRINT); // Optional error handling
- $v_list[0]="file.txt";
- $v_list[1]="data/"; (Optional '/' at the end)
- $v_list[2]="file.log";
- $tar_object->createModify($v_list, "install");
- // files are stored in the archive as :
- // install/file.txt
- // install/data
- // install/data/file1.txt
- // install/data/... all the files and sub-dirs of data/
- // install/file.log
-Sample 2 :
- $tar_object = new Archive_Tar("tarname.tar");
- $tar_object->setErrorHandling(PEAR_ERROR_PRINT); // Optional error handling
- $v_list[0]="dev/file.txt";
- $v_list[1]="dev/data/"; (Optional '/' at the end)
- $v_list[2]="log/file.log";
- $tar_object->createModify($v_list, "install", "dev");
- // files are stored in the archive as :
- // install/file.txt
- // install/data
- // install/data/file1.txt
- // install/data/... all the files and sub-dirs of data/
- // install/log/file.log
-How it works :
- Open the file in write mode (erasing the existing one if one),
- call the _addList() method for adding the files in an empty archive,
- add the tar footer (512 bytes block), close the tar file.
-
-
-Method : addModify($p_filelist, $p_add_dir, $p_remove_dir="")
-Description :
- This method add the files / directories listed in $p_filelist at the
- end of the existing archive. If the archive does not yet exists it
- is created.
- The $p_filelist parameter can be an array of string, each string
- representing a filename or a directory name with their path if
- needed. It can also be a single string with names separated by a
- single blank.
- The path indicated in $p_remove_dir will be removed from the
- memorized path of each file / directory listed when this path
- exists. By default nothing is removed (empty path "")
- The path indicated in $p_add_dir will be added at the beginning of
- the memorized path of each file / directory listed. However it can
- be set to empty "". The adding of a path is done after the removing
- of path.
- The path add/remove ability enables the user to prepare an archive
- for extraction in a different path than the origin files are.
- If a file/dir is already in the archive it will only be added at the
- end of the archive. There is no update of the existing archived
- file/dir. However while extracting the archive, the last file will
- replace the first one. This results in a none optimization of the
- archive size.
- If a file/dir does not exist the file/dir is ignored. However an
- error text is send to PEAR error.
- If a file/dir is not readable the file/dir is ignored. However an
- error text is send to PEAR error.
- If the resulting filename/dirname (after the add/remove option or
- not) string is greater than 99 char, the file/dir is
- ignored. However an error text is send to PEAR error.
-Arguments :
- $p_filelist : An array of filenames and directory names, or a single
- string with names separated by a single blank space.
- $p_add_dir : A string which contains a path to be added to the
- memorized path of each element in the list.
- $p_remove_dir : A string which contains a path to be removed from
- the memorized path of each element in the list, when
- relevant.
-Return value :
- true on success, false on error.
-Sample 1 :
- $tar_object = new Archive_Tar("tarname.tar");
- [...]
- $v_list[0]="dev/file.txt";
- $v_list[1]="dev/data/"; (Optional '/' at the end)
- $v_list[2]="log/file.log";
- $tar_object->addModify($v_list, "install");
- // files are stored in the archive as :
- // install/file.txt
- // install/data
- // install/data/file1.txt
- // install/data/... all the files and sub-dirs of data/
- // install/file.log
-Sample 2 :
- $tar_object = new Archive_Tar("tarname.tar");
- [...]
- $v_list[0]="dev/file.txt";
- $v_list[1]="dev/data/"; (Optional '/' at the end)
- $v_list[2]="log/file.log";
- $tar_object->addModify($v_list, "install", "dev");
- // files are stored in the archive as :
- // install/file.txt
- // install/data
- // install/data/file1.txt
- // install/data/... all the files and sub-dirs of data/
- // install/log/file.log
-How it works :
- If the archive does not exists it create it and add the files.
- If the archive does exists and is not compressed, it open it, jump
- before the last empty 512 bytes block (tar footer) and add the files
- at this point.
- If the archive does exists and is compressed, a temporary copy file
- is created. This temporary file is then 'gzip' read block by block
- until the last empty block. The new files are then added in the
- compressed file.
- The adding of files is done by going through the file/dir list,
- adding files per files, in a recursive way through the
- directory. Each time a path need to be added/removed it is done
- before writing the file header in the archive.
-
-Method : add($p_filelist)
-Description :
- This method add the files / directories listed in $p_filelist at the
- end of the existing archive. If the archive does not yet exists it
- is created.
- The $p_filelist parameter can be an array of string, each string
- representing a filename or a directory name with their path if
- needed. It can also be a single string with names separated by a
- single blank.
- See addModify() method for details and limitations.
-Arguments :
- $p_filelist : An array of filenames and directory names, or a single
- string with names separated by a single blank space.
-Return value :
- true on success, false on error.
-Sample 1 :
- $tar_object = new Archive_Tar("tarname.tar");
- [...]
- $v_list[0]="dev/file.txt";
- $v_list[1]="dev/data/"; (Optional '/' at the end)
- $v_list[2]="log/file.log";
- $tar_object->add($v_list);
-Sample 2 :
- $tar_object = new Archive_Tar("tarname.tgz", true);
- [...]
- $v_list[0]="dev/file.txt";
- $v_list[1]="dev/data/"; (Optional '/' at the end)
- $v_list[2]="log/file.log";
- $tar_object->add($v_list);
-How it works :
- Simply call the addModify() method with the right parameters.
-
-Method : extract($p_path = "")
-Description :
- This method extract all the content of the archive in the directory
- indicated by $p_path.If $p_path is optional, if not set the archive
- is extracted in the current directory.
- While extracting a file, if the directory path does not exists it is
- created.
- See extractModify() for details and limitations.
-Arguments :
- $p_path : Optional path where the files/dir need to by extracted.
-Return value :
- true on success, false on error.
-Sample :
- $tar_object = new Archive_Tar("tarname.tar");
- $tar_object->extract();
-How it works :
- Simply call the extractModify() method with appropriate parameters.
-
-Method : extractModify($p_path, $p_remove_path)
-Description :
- This method extract all the content of the archive in the directory
- indicated by $p_path. When relevant the memorized path of the
- files/dir can be modified by removing the $p_remove_path path at the
- beginning of the file/dir path.
- While extracting a file, if the directory path does not exists it is
- created.
- While extracting a file, if the file already exists it is replaced
- without looking for last modification date.
- While extracting a file, if the file already exists and is write
- protected, the extraction is aborted.
- While extracting a file, if a directory with the same name already
- exists, the extraction is aborted.
- While extracting a directory, if a file with the same name already
- exists, the extraction is aborted.
- While extracting a file/directory if the destination directory exist
- and is write protected, or does not exist but can not be created,
- the extraction is aborted.
- If after extraction an extracted file does not show the correct
- stored file size, the extraction is aborted.
- When the extraction is aborted, a PEAR error text is set and false
- is returned. However the result can be a partial extraction that may
- need to be manually cleaned.
-Arguments :
- $p_path : The path of the directory where the files/dir need to by
- extracted.
- $p_remove_path : Part of the memorized path that can be removed if
- present at the beginning of the file/dir path.
-Return value :
- true on success, false on error.
-Sample :
- // Imagine tarname.tar with files :
- // dev/data/file.txt
- // dev/data/log.txt
- // readme.txt
- $tar_object = new Archive_Tar("tarname.tar");
- $tar_object->extractModify("install", "dev");
- // Files will be extracted there :
- // install/data/file.txt
- // install/data/log.txt
- // install/readme.txt
-How it works :
- Open the archive and call a more generic function that can extract
- only a part of the archive or all the archive.
- See extractList() method for more details.
-
-Method : listContent()
-Description :
- This method returns an array of arrays that describe each
- file/directory present in the archive.
- The array is not sorted, so it show the position of the file in the
- archive.
- The file informations are :
- $file[filename] : Name and path of the file/dir.
- $file[mode] : File permissions (result of fileperms())
- $file[uid] : user id
- $file[gid] : group id
- $file[size] : filesize
- $file[mtime] : Last modification time (result of filemtime())
- $file[typeflag] : "" for file, "5" for directory
-Arguments :
-Return value :
- An array of arrays or 0 on error.
-Sample :
- $tar_object = new Archive_Tar("tarname.tar");
- if (($v_list = $tar_object->listContent()) != 0)
- for ($i=0; $i<sizeof($v_list); $i++)
- {
- echo "Filename :'".$v_list[$i][filename]."'<br>";
- echo " .size :'".$v_list[$i][size]."'<br>";
- echo " .mtime :'".$v_list[$i][mtime]."' (".
- date("l dS of F Y h:i:s A", $v_list[$i][mtime]).")<br>";
- echo " .mode :'".$v_list[$i][mode]."'<br>";
- echo " .uid :'".$v_list[$i][uid]."'<br>";
- echo " .gid :'".$v_list[$i][gid]."'<br>";
- echo " .typeflag :'".$v_list[$i][typeflag]."'<br>";
- }
-How it works :
- Call the same function as an extract however with a flag to only go
- through the archive without extracting the files.
-
-Method : extractList($p_filelist, $p_path = "", $p_remove_path = "")
-Description :
- This method extract from the archive only the files indicated in the
- $p_filelist. These files are extracted in the current directory or
- in the directory indicated by the optional $p_path parameter.
- If indicated the $p_remove_path can be used in the same way as it is
- used in extractModify() method.
-Arguments :
- $p_filelist : An array of filenames and directory names, or a single
- string with names separated by a single blank space.
- $p_path : The path of the directory where the files/dir need to by
- extracted.
- $p_remove_path : Part of the memorized path that can be removed if
- present at the beginning of the file/dir path.
-Return value :
- true on success, false on error.
-Sample :
- // Imagine tarname.tar with files :
- // dev/data/file.txt
- // dev/data/log.txt
- // readme.txt
- $tar_object = new Archive_Tar("tarname.tar");
- $tar_object->extractList("dev/data/file.txt readme.txt", "install",
- "dev");
- // Files will be extracted there :
- // install/data/file.txt
- // install/readme.txt
-How it works :
- Go through the archive and extract only the files present in the
- list.
-
diff --git a/pear/docs/rfc01_PEAR_pecl-binaries.txt b/pear/docs/rfc01_PEAR_pecl-binaries.txt
deleted file mode 100644
index 767a486503..0000000000
--- a/pear/docs/rfc01_PEAR_pecl-binaries.txt
+++ /dev/null
@@ -1,88 +0,0 @@
-Author: Tomas V.V.Cox <cox@idecnet.com>
-Revision: $Id$
-Abstract: Open discussion on how to handle PECL binary packages
-
-
-pecl package name
------------------
-
-The name of the extension would be:
-
-peclfoo-bin-<OS>-<ARCH>-3.1.2.tgz
-
-The os (Operating system) and arch (CPU type), would be the value
-returned by the OS_Guess class.
-
-package creation
-----------------
-
-pear package [-t <type>] <package>
-
--t <type> The type of package you want to generate (pear, rpm,
-msi, src, etc)
-
-Without args it will package the extension as it does nowadays (the
-same as "-t src").
-
-We have now native pear packages, rpm, msi is planned and others
-will surely come. Additionally of generating the native package description
-file, we could perhaps also call the tools for generating the whole package.
-
-An idea would be to create in addition a BUILDINFO.txt file with some data about
-the env where the extension was compiled at, like the
-php version, the php_uname(), the extra libs versions, os vendor
-version, pear version, etc.
-
-package.xml
------------
-
-As a binary release shares the same release data with the source
-distrib, the same package.xml file could be used for all kind of
-distribs. Let's say something like:
-
-<release>
- <version>...
- <date>
- <notes>
- <filelist>..
- <file role="ext" platform="">
- </filelist>
-</release>
-
-A package may contain many compiled extensions for different platforms,
-one single extension or the sources.
-
-
-Installation
-------------
-
-pear install -t bin peclfoo (download and install the binary distrib of
-peclfoo for your current OS-ARCH)
-
-pear install peclfoo (download, build and install peclfoo)
-
-All the files with role="ext" would be installed
-in "ext_dir" (pear cmd setting). The user can config it with "pear config-set ext_dir=XXX".
-If this var is not explicitly set, the following will be used for
-finding a default location:
-
-if (getenv('PHP_PEAR_EXTENSION_DIR')) {
- define('PEAR_CONFIG_DEFAULT_EXT_DIR', getenv('PHP_PEAR_EXTENSION_DIR'));
- } else {
- if (ini_get('extension_dir')) {
- define('PEAR_CONFIG_DEFAULT_EXT_DIR', ini_get('extension_dir'));
- } elseif (defined('PEAR_EXTENSION_DIR') && @is_dir(PEAR_EXTENSION_DIR)) {
- define('PEAR_CONFIG_DEFAULT_EXT_DIR', PEAR_EXTENSION_DIR);
- } elseif (defined('PHP_EXTENSION_DIR')) {
- define('PEAR_CONFIG_DEFAULT_EXT_DIR', PHP_EXTENSION_DIR);
- } else {
- define('PEAR_CONFIG_DEFAULT_EXT_DIR', '.');
- }
-}
-
-Listing in the web
-------------------
-
-A new column "Type" should be added to the release listing under the
-package home page at pear.php.net, saying that the package is a binary
-distrib compiled for OS X and ARCH Y or sources.
diff --git a/pear/docs/rfc01_PEAR_subpackages.txt b/pear/docs/rfc01_PEAR_subpackages.txt
deleted file mode 100644
index af068892e0..0000000000
--- a/pear/docs/rfc01_PEAR_subpackages.txt
+++ /dev/null
@@ -1,65 +0,0 @@
-RFC: subpackages
-Sept. 17, 2003
-Greg Beaver
-
-The Problem:
-------------
-Many PEAR packages consist of a core and several ancillary self-contained program elements. Examples are:
-
-MDB/DB and database drivers
-Log and log classes
-Cache and Cache drivers
-phpDocumentor and Converters
-HTML_QuickForm and HTML_QuickForm_Controller
-
-In most cases, not all packages need be installed. The most common example of this is DB: how many people need to use every single database driver? Most of them just eat up disk space, except on multi-user installations.
-
-In addition, each ancillary program element may have a different stability level (sqlite driver may be beta quality, while the mysql driver is stable). Currently, this results in a contradiction: the core is stable, but one driver is not. What is the stability of the package? stable or beta? People who want to only install and use stable packages may be deceived by a package that is marked stable and contains an alpha-quality driver, for example.
-
-Plus, many PEAR packages are criticized for their bloat.
-
-The Solution:
--------------
-Subpackages will allow the solving of all of these problems. Note that subpackaging does not address other problems, such as bundling together related packages (PFC packages, for example, or packages needed for a framework that need not have any dependencies). Subpackages are a dependency relation. In other words, if Package Foo depends on Bar, Foo is not necessarily a subpackage of Bar, but might be. However, if Foo does not depend on Bar, Foo is definitively NOT a subpackage of Bar.
-
-In other words, subpackages by definition cannot function without the presence of the core package (DB drivers are pretty pointless without DB).
-
-Note that with the presence of subpackages, a subpackages can be released with a new version number without need to release a new version of the core, allowing rapid development on unstable subpackages, and slower development on stable components.
-
-How to differentiate a subpackage from a normal dependency:
------------------------------------------------------------
-An addition should be made to the package.dtd file for package.xml files. A new dependency type, "spkg" should be used to define a subpackage dependency. This dependency type should be used by subpackages to definitively link to a parent package as a subpackage.
-
-example package Foo_Bar's package.xml dependency:
-
-<dep type="spkg" rel="has">Foo</dep> <!-- this subpackage works with all Foo -->
--or-
-<dep type="spkg" rel="ge" version="1.5">Foo</dep> <!-- works with v1.5 or newer -->
-
-All rel values would be available including "not" if a particular version of the parent package must not be installed due to a bug affecting this particular subpackage (rare case).
-
-package Foo's package.xml dependencies may contain an optional dependency on the subpackage:
-
-<dep type="pkg" rel="has" optional="yes">Foo_Bar</dep>
-
-standard subpackages must be listed as optional dependencies in package.xml to allow easy installation with the --alldeps switch, but third party subpackages need not be listed as optional dependencies (if someone releases a custom DB driver or specialized phpDocumentor converter, for example, on their own website)
-
-Note that a required subpackage must be bundled as part of the core, and is not a subpackage - a subpackage MUST be an optional dependency.
-
-Naming/Path Conventions:
-------------------------
-Subpackages must reside in a subdirectory of the parent package, just as they would under normal circumstances as part of the package. Foo's subpackage Bar must be named Foo_Bar, and reside in Foo/Bar.php as per PEAR conventions.
-
-pear.php.net changes:
----------------------
-Subpackages would not be listed globally, but instead on the package page as optional components.
-
-Documentation for subpackages will reside as part of the main package's documentation.
-
-PEAR Installer changes:
------------------------
-pear info/remote-info would list available subpackages (remote-info only) and installed subpackages (info only)
-
-pear list would list top-level packages, with some indication of packages that have subpackages (an asterisk or something). pear list PackageWithSubpackages would list subpackages as well
-
-pear uninstall PackageWithSubpackages would automatically uninstall any subpackages without requiring --force or other switches, as if they were simply a part of the main application. This is due to the fact that they would be simply a part of the package if PEAR didn't support subpackages.
diff --git a/pear/go-pear-list.php b/pear/go-pear-list.php
deleted file mode 100755
index e41e1c08c3..0000000000
--- a/pear/go-pear-list.php
+++ /dev/null
@@ -1,21 +0,0 @@
-<?php
-/* This is a list of packages and versions
- * that will be used to create the PEAR folder
- * in the windows snapshot.
- * See win32/build/mkdist.php for more details
- * $Id$
- */
-$packages = array(
-// required packages for the installer
-"PEAR" => "1.3.1",
-"XML_RPC" => "1.1.0",
-"Console_Getopt" => "1.2",
-"Archive_Tar" => "1.2",
-
-// required packages for the web frontend
-"PEAR_Frontend_Web" => "0.4",
-"HTML_Template_IT" => "1.1",
-"Net_UserAgent_Detect" => "1.0",
-);
-
-?>
diff --git a/pear/go-pear.bat b/pear/go-pear.bat
deleted file mode 100644
index 7f369d9f68..0000000000
--- a/pear/go-pear.bat
+++ /dev/null
@@ -1,4 +0,0 @@
-@ECHO OFF
-set PHP_BIN=php.exe
-%PHP_BIN% -n -d output_buffering=0 PEAR\go-pear.php
-pause
diff --git a/pear/install-pear.php b/pear/install-pear.php
deleted file mode 100644
index d2d1b804f9..0000000000
--- a/pear/install-pear.php
+++ /dev/null
@@ -1,137 +0,0 @@
-<?php
-
-/* $Id$ */
-
-$pear_dir = dirname(__FILE__);
-ini_set('include_path', $pear_dir);
-include_once 'PEAR.php';
-include_once 'PEAR/Installer.php';
-include_once 'PEAR/Registry.php';
-include_once 'PEAR/Frontend/CLI.php';
-
-$force = false;
-$install_files = array();
-array_shift($argv);
-for ($i = 0; $i < sizeof($argv); $i++) {
- $arg = $argv[$i];
- $bn = basename($arg);
- if (ereg('package-(.*)\.xml$', $bn, $matches) ||
- ereg('([A-Za-z0-9_:]+)-.*\.(tar|tgz)$', $bn, $matches)) {
- $install_files[$matches[1]] = $arg;
- } elseif ($arg == '--force') {
- $force = true;
- } elseif ($arg == '-d') {
- $with_dir = $argv[$i+1];
- $i++;
- } elseif ($arg == '-b') {
- $bin_dir = $argv[$i+1];
- $i++;
- }
-}
-
-$config = &PEAR_Config::singleton();
-
-// make sure we use only default values
-$config_layers = $config->getLayers();
-foreach ($config_layers as $layer) {
- if ($layer == 'default') continue;
- $config->removeLayer($layer);
-}
-$keys = $config->getKeys();
-$config->set('verbose', 0, 'default');
-// PEAR executables
-if (!empty($bin_dir)) {
- $config->set('bin_dir', $bin_dir, 'default');
-}
-// User supplied a dir prefix
-if (!empty($with_dir)) {
- $ds = DIRECTORY_SEPARATOR;
- $config->set('php_dir', $with_dir, 'default');
- $config->set('doc_dir', $with_dir . $ds . 'doc', 'default');
- $config->set('data_dir', $with_dir . $ds . 'data', 'default');
- $config->set('test_dir', $with_dir . $ds . 'test', 'default');
-}
-/* Print PEAR Conf (useful for debuging do NOT REMOVE)
-sort($keys);
-foreach ($keys as $key) {
- echo $config->getPrompt($key) . ": " . $config->get($key) . "\n";
-}
-exit;
-// end print
-//*/
-
-$php_dir = $config->get('php_dir');
-$options = array();
-$install_root = getenv('INSTALL_ROOT');
-if (!empty($install_root)) {
- $options['installroot'] = $install_root;
- $reg_dir = $install_root . $php_dir;
-} else {
- $reg_dir = $php_dir;
-}
-
-$reg = &new PEAR_Registry($reg_dir);
-$ui = &new PEAR_Frontend_CLI();
-$installer = &new PEAR_Installer($ui);
-//$installer->registry = &$reg; // This should be changed in Installer/Registry
-
-foreach ($install_files as $package => $instfile) {
- if ($reg->packageExists($package)) {
- $info = $installer->infoFromAny($instfile);
- if (PEAR::isError($info)) {
- $ui->outputData(sprintf("[PEAR] %s: %s", $package, $info->getMessage()));
- continue;
- }
- $new_ver = $info['version'];
- $old_ver = $reg->packageInfo($package, 'version');
- if (version_compare($new_ver, $old_ver, 'gt')) {
- $options['upgrade'] = true;
- $err = $installer->install($instfile, $options);
- if (PEAR::isError($err)) {
- $ui->outputData(sprintf("[PEAR] %s: %s", $package, $err->getMessage()));
- continue;
- }
- $ui->outputData(sprintf("[PEAR] %-15s- upgraded: %s", $package, $new_ver));
- } else {
- if ($force) {
- $options['force'] = true;
- $err = $installer->install($instfile, $options);
- if (PEAR::isError($err)) {
- $ui->outputData(sprintf("[PEAR] %s: %s", $package, $err->getMessage()));
- continue;
- }
- $ui->outputData(sprintf("[PEAR] %-15s- installed: %s", $package, $new_ver));
- } else {
- $ui->outputData(sprintf("[PEAR] %-15s- already installed: %s", $package, $old_ver));
- }
- }
- } else {
- $options['nodeps'] = true;
- $err = $installer->install($instfile, $options);
- if (PEAR::isError($err)) {
- $ui->outputData(sprintf("[PEAR] %s: %s", $package, $err->getMessage()));
- continue;
- }
- $new_ver = $reg->packageInfo($package, 'version');
- $ui->outputData(sprintf("[PEAR] %-15s- installed: %s", $package, $new_ver));
- }
- if ($package == 'PEAR') {
- if (is_file($ufile = $config->getConfFile('user'))) {
- $ui->outputData('Warning! a PEAR user config file already exists from ' .
- 'a previous PEAR installation at ' .
- "'$ufile'. You may probably want to remove it.");
- }
- $config->set('verbose', 1, 'default');
- foreach ($config->getKeys() as $key) {
- $data[$key] = $config->get($key);
- }
- $cnf_file = $config->getConfFile('system');
- if (!empty($install_root)) {
- $cnf_file = $install_root . DIRECTORY_SEPARATOR . $cnf_file;
- }
- $config->writeConfigFile($cnf_file, 'system', $data);
- $ui->outputData('Wrote PEAR system config file at: ' . $cnf_file);
- $ui->outputData('You may want to add: ' . $config->get('php_dir') . ' to your php.ini include_path');
- }
-}
-?>
diff --git a/pear/install-pear.txt b/pear/install-pear.txt
deleted file mode 100644
index ec632e8ade..0000000000
--- a/pear/install-pear.txt
+++ /dev/null
@@ -1,11 +0,0 @@
-+----------------------------------------------------------------------+
-| The installation process is incomplete. The following resources were |
-| not installed: |
-| |
-| Self-contained Extension Support |
-| PEAR: PHP Extension and Application Repository |
-| |
-| To install these components, become the superuser and execute: |
-| |
-| # make install-su |
-+----------------------------------------------------------------------+
diff --git a/pear/package-Archive_Tar.xml b/pear/package-Archive_Tar.xml
deleted file mode 100644
index 7d54a01739..0000000000
--- a/pear/package-Archive_Tar.xml
+++ /dev/null
@@ -1,85 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1" ?>
-<!DOCTYPE package SYSTEM "package.dtd">
-<package version="1.0">
- <name>Archive_Tar</name>
- <summary>Tar file management class</summary>
- <description>This class provides handling of tar files in PHP.
-It supports creating, listing, extracting and adding to tar files.
-Gzip support is available if PHP has the zlib extension built-in or
-loaded. Bz2 compression is also supported with the bz2 extension loaded.
-</description>
- <license>PHP License</license>
- <maintainers>
- <maintainer>
- <user>vblavet</user>
- <role>lead</role>
- <name>Vincent Blavet</name>
- <email>vincent@blavet.net</email>
- </maintainer>
- <maintainer>
- <user>ssb</user>
- <role>helper</role>
- <name>Stig Sæther Bakken</name>
- <email>stig@php.net</email>
- </maintainer>
- </maintainers>
- <release>
- <version>1.1</version>
- <date>2003-05-28</date>
- <notes>* Add support for BZ2 compression
-* Add support for add and extract without using temporary files : methods addString() and extractInString()
-
-</notes>
- <state>stable</state>
- <filelist>
- <dir name="Archive">
- <file role="php" name="Tar.php"/>
- </dir>
- <file role="doc" name="docs/Archive_Tar.txt" baseinstalldir="/"/>
- </filelist>
- </release>
- <changelog>
- <release>
- <version>1.0</version>
- <date>2003-01-24</date>
- <notes>Change status to stable</notes>
- <state>stable</state>
- <filelist>
- <dir name="Archive">
- <file role="php" name="Tar.php"/>
- </dir>
- <file role="doc" name="docs/Archive_Tar.txt" baseinstalldir="/"/>
- </filelist>
- </release>
- <release>
- <version>0.10-b1</version>
- <date>2003-01-08</date>
- <notes>Add support for long filenames (greater than 99 characters)</notes>
- <state>beta</state>
- </release>
- <release>
- <version>0.9</version>
- <date>2002-05-27</date>
- <notes>Auto-detect gzip'ed files</notes>
- <state>stable</state>
- </release>
- <release>
- <version>0.4</version>
- <date>2002-05-20</date>
- <notes>Windows bugfix: use forward slashes inside archives</notes>
- <state>stable</state>
- </release>
- <release>
- <version>0.2</version>
- <date>2002-02-18</date>
- <notes>From initial commit to stable</notes>
- <state>stable</state>
- </release>
- <release>
- <version>0.3</version>
- <date>2002-04-13</date>
- <notes>Windows bugfix: used wrong directory separators</notes>
- <state>stable</state>
- </release>
- </changelog>
-</package>
diff --git a/pear/package-Console_Getopt.xml b/pear/package-Console_Getopt.xml
deleted file mode 100644
index 57769e6b92..0000000000
--- a/pear/package-Console_Getopt.xml
+++ /dev/null
@@ -1,80 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1" ?>
-<!DOCTYPE package SYSTEM "package.dtd">
-<!-- do not use the "Type" attribute here, that one is only for
- generated package.xml files -->
-<package version="1.0">
- <name>Console_Getopt</name>
- <summary>Command-line option parser</summary>
- <description>This is a PHP implementation of "getopt" supporting both
-short and long options.</description>
- <license>PHP License</license>
- <maintainers>
- <maintainer>
- <user>andrei</user>
- <role>lead</role>
- <name>Andrei Zmievski</name>
- <email>andrei@php.net</email>
- </maintainer>
- <maintainer>
- <user>ssb</user>
- <role>developer</role>
- <name>Stig Bakken</name>
- <email>stig@php.net</email>
- </maintainer>
- <maintainer>
- <user>cellog</user>
- <role>helper</role>
- <name>Greg Beaver</name>
- <email>cellog@php.net</email>
- </maintainer>
- </maintainers>
- <release>
- <version>1.2</version>
- <date>2003-12-11</date>
- <notes>Fix to preserve BC with 1.0 and allow correct behaviour for new users</notes>
- <state>stable</state>
- <filelist>
- <dir name="Console">
- <file role="php" name="Getopt.php"/>
- </dir>
- </filelist>
- </release>
- <changelog>
- <release>
- <version>1.0</version>
- <date>2002-09-13</date>
- <notes>Stable release</notes>
- <state>stable</state>
- <filelist>
- <dir name="Console">
- <file role="php" name="Getopt.php"/>
- </dir>
- </filelist>
- </release>
- <release>
- <version>0.11</version>
- <date>2002-05-26</date>
- <notes>POSIX getopt compatibility fix: treat first element of args
- array as command name
- </notes>
- <state>beta</state>
- <filelist>
- <dir name="Console">
- <file role="php" name="Getopt.php"/>
- </dir>
- </filelist>
- </release>
- <release>
- <version>0.10</version>
- <date>2002-05-12</date>
- <notes>Packaging fix</notes>
- <state>beta</state>
- </release>
- <release>
- <version>0.9</version>
- <date>2002-05-12</date>
- <notes>Initial release</notes>
- <state>beta</state>
- </release>
- </changelog>
-</package>
diff --git a/pear/package-PEAR.xml b/pear/package-PEAR.xml
deleted file mode 100644
index 4811c9dfbc..0000000000
--- a/pear/package-PEAR.xml
+++ /dev/null
@@ -1,169 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1" ?>
-<!DOCTYPE package SYSTEM "package.dtd">
-<package version="1.0">
- <name>PEAR</name>
- <summary>PEAR Base System</summary>
- <description>The PEAR package contains:
- * the PEAR base class
- * the PEAR_Error error handling mechanism
- * the alpha-quality PEAR_ErrorStack advanced error handling mechanism
- * the PEAR installer, for creating, distributing
- and installing packages
- * the OS_Guess class for retrieving info about the OS
- where PHP is running on
- * the System class for quick handling common operations
- with files and directories
-</description>
- <license>PHP License</license>
- <maintainers>
- <maintainer>
- <user>ssb</user>
- <role>lead</role>
- <name>Stig Sæther Bakken</name>
- <email>stig@php.net</email>
- </maintainer>
- <maintainer>
- <user>cox</user>
- <role>lead</role>
- <name>Tomas V.V.Cox</name>
- <email>cox@idecnet.com</email>
- </maintainer>
- <maintainer>
- <user>mj</user>
- <role>developer</role>
- <name>Martin Jansen</name>
- <email>mj@php.net</email>
- </maintainer>
- <maintainer>
- <user>pajoye</user>
- <role>lead</role>
- <name>Pierre-Alain Joye</name>
- <email>pajoye@pearfr.org</email>
- </maintainer>
- <maintainer>
- <user>cellog</user>
- <role>lead</role>
- <name>Greg Beaver</name>
- <email>cellog@php.net</email>
- </maintainer>
- </maintainers>
- <release>
- <version>1.3.2</version>
- <date>2004-04-06</date>
- <state>stable</state>
- <notes>
-Installer:
- * fix Bug #1186 raise a notice error on PEAR::Common $_packageName
- * fix Bug #1249 display the right state when using --force option
- </notes>
- <provides type="class" name="OS_Guess" />
- <provides type="class" name="System" />
- <provides type="function" name="md5_file" />
- <filelist>
- <file role="data" name="package.dtd"/>
- <file role="data" name="template.spec"/>
- <file role="php" name="PEAR.php"/>
- <file role="php" name="System.php"/>
- <dir name="PEAR">
- <file role="php" name="Autoloader.php"/>
- <file role="php" name="Command.php"/>
- <dir name="Command">
- <file role="php" name="Auth.php"/>
- <file role="php" name="Build.php"/>
- <file role="php" name="Common.php"/>
- <file role="php" name="Config.php"/>
- <file role="php" name="Install.php"/>
- <file role="php" name="Package.php"/>
- <file role="php" name="Registry.php"/>
- <file role="php" name="Remote.php"/>
- <file role="php" name="Mirror.php"/>
- </dir>
- <file role="php" name="Common.php"/>
- <file role="php" name="Config.php"/>
- <file role="php" name="Dependency.php"/>
- <file role="php" name="Downloader.php"/>
- <file role="php" name="ErrorStack.php"/>
- <dir name="Frontend">
- <file role="php" name="CLI.php"/>
- </dir>
- <file role="php" name="Builder.php"/>
- <file role="php" name="Installer.php"/>
- <file role="php" name="Packager.php"/>
- <file role="php" name="Registry.php"/>
- <file role="php" name="Remote.php"/>
- </dir>
- <dir name="OS">
- <file role="php" name="Guess.php"/>
- </dir>
- <dir name="scripts" baseinstalldir="/">
- <file role="script" install-as="pear" name="pear.sh">
- <replace from="@php_bin@" to="php_bin" type="pear-config"/>
- <replace from="@php_dir@" to="php_dir" type="pear-config"/>
- <replace from="@pear_version@" to="version" type="package-info"/>
- <replace from="@include_path@" to="php_dir" type="pear-config"/>
- </file>
- <file role="script" platform="windows" install-as="pear.bat" name="pear.bat">
- <replace from="@bin_dir@" to="bin_dir" type="pear-config"/>
- <replace from="@php_bin@" to="php_bin" type="pear-config"/>
- <replace from="@include_path@" to="php_dir" type="pear-config"/>
- </file>
- <file role="php" install-as="pearcmd.php" name="pearcmd.php">
- <replace from="@php_bin@" to="php_bin" type="pear-config"/>
- <replace from="@php_dir@" to="php_dir" type="pear-config"/>
- <replace from="@pear_version@" to="version" type="package-info"/>
- <replace from="@include_path@" to="php_dir" type="pear-config"/>
- </file>
- </dir>
- </filelist>
- <deps>
- <dep type="php" rel="ge" version="4.2"/>
- <dep type="pkg" rel="ge" version="1.1">Archive_Tar</dep>
- <dep type="pkg" rel="ge" version="1.2">Console_Getopt</dep>
- <dep type="pkg" rel="ge" version="1.0.4">XML_RPC</dep>
- <dep type="ext" rel="has">xml</dep>
- <dep type="ext" rel="has">pcre</dep>
- </deps>
- </release>
- <changelog>
- <release>
- <version>1.3.1</version>
- <date>2004-04-06</date>
- <state>stable</state>
- <notes>
-PEAR Installer:
-
- * Bug #534 pear search doesn't list unstable releases
- * Bug #933 CMD Usability Patch
- * Bug #937 throwError() treats every call as static
- * Bug #964 PEAR_ERROR_EXCEPTION causes fatal error
- * Bug #1008 safe mode raises warning
-
-PEAR_ErrorStack:
-
- * Added experimental error handling, designed to eventually replace
- PEAR_Error. It should be considered experimental until explicitly marked
- stable. require_once 'PEAR/ErrorStack.php' to use.
-
- </notes>
- </release>
- <release>
- <version>1.3</version>
- <date>2004-02-20</date>
- <state>stable</state>
- <notes>
-PEAR Installer:
-
-* Bug #171 --alldeps with a rel=&quot;eq&quot; should install the required version, if possible
-* Bug #249 installing from an url doesnt work
-* Bug #248 --force command does not work as expected
-* Bug #293 [Patch] PEAR_Error not calling static method callbacks for error-handler
-* Bug #324 pear -G gives Fatal Error (PHP-GTK not installed, but error is at engine level)
-* Bug #594 PEAR_Common::analyzeSourceCode fails on string with $var and {
-* Bug #521 Incorrect filename in naming warnings
-* Moved download code into its own class
-* Fully unit tested the installer, packager, downloader, and PEAR_Common
-
- </notes>
- </release>
- </changelog>
-</package>
diff --git a/pear/package.dtd b/pear/package.dtd
deleted file mode 100644
index 45beb7ba84..0000000000
--- a/pear/package.dtd
+++ /dev/null
@@ -1,110 +0,0 @@
-<!--
- $Id: package.dtd,v 1.35 2004-01-25 23:36:28 pajoye Exp $
-
- This is the PEAR package description, version 1.0.
- It should be used with the informal public identifier:
-
- "-//PHP Group//DTD PEAR Package 1.0//EN//XML"
-
- Copyright (c) 1997-2004 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 at through the world-wide-web at
- 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.
-
- Authors:
- Stig S. Bakken <ssb@php.net>
-
- -->
-
-<!ELEMENT package (name|summary|description|license|maintainers|release|changelog)+>
-<!ATTLIST package type (source|binary|empty) "empty"
- version CDATA #REQUIRED>
-
-<!ELEMENT name (#PCDATA)>
-
-<!ELEMENT summary (#PCDATA)>
-
-<!ELEMENT description (#PCDATA)>
-
-<!ELEMENT license (#PCDATA)>
-
-<!ELEMENT maintainers (maintainer)+>
-
-<!ELEMENT maintainer (user|role|name|email)+>
-
-<!ELEMENT user (#PCDATA)>
-
-<!ELEMENT role (#PCDATA)>
-
-<!ELEMENT email (#PCDATA)>
-
-<!ELEMENT changelog (release)+>
-
-<!ELEMENT release (version|license|state|date|notes|filelist|deps|provides|script|configureoptions)+>
-
-<!ELEMENT version (#PCDATA)>
-
-<!ELEMENT state (#PCDATA)>
-
-<!ELEMENT date (#PCDATA)>
-
-<!ELEMENT notes (#PCDATA)>
-
-<!ELEMENT filelist (dir|file)+>
-
-<!ELEMENT dir (dir|file)+>
-<!ATTLIST dir name CDATA #REQUIRED
- baseinstalldir CDATA #IMPLIED>
-
-<!ELEMENT file (replace*)>
-<!ATTLIST file role (php|ext|src|test|doc|data|script) 'php'
- debug (na|on|off) 'na'
- zts (na|on|off) 'na'
- phpapi NUMBER #IMPLIED
- zendapi NUMBER #IMPLIED
- format CDATA #IMPLIED
- baseinstalldir CDATA #IMPLIED
- platform CDATA #IMPLIED
- md5sum CDATA #IMPLIED
- name CDATA #REQUIRED
- install-as CDATA #IMPLIED>
-
-<!ELEMENT replace EMPTY>
-<!ATTLIST replace from CDATA #REQUIRED
- to CDATA #REQUIRED
- type CDATA #REQUIRED>
-
-<!ELEMENT deps (dep)+>
-
-<!ELEMENT dep (#PCDATA)>
-<!ATTLIST dep
- optional (yes|no) 'no'
- type (pkg|ext|php|prog|ldlib|rtlib|os|websrv|sapi|zend) #REQUIRED
- rel (has|eq|lt|le|gt|ge) 'has'
- version CDATA #IMPLIED>
-
-<!ELEMENT provides (#PCDATA)>
-<!ATTLIST provides
- type (ext|prog|class|function|feature|api) #REQUIRED
- name CDATA #REQUIRED
- extends CDATA #IMPLIED>
-
-<!ELEMENT script (#PCDATA)>
-<!ATTLIST script
- phase (pre-install |post-install |
- pre-uninstall|post-uninstall|
- pre-build |post-build |
- pre-setup |post-setup ) #REQUIRED>
-
-<!ELEMENT configureoptions (configureoption*)>
-
-<!ELEMENT configureoption EMPTY>
-<!ATTLIST configureoption
- name CDATA #REQUIRED
- default CDATA #IMPLIED
- prompt CDATA #REQUIRED>
diff --git a/pear/packages/XML_RPC-1.1.0.tar b/pear/packages/XML_RPC-1.1.0.tar
deleted file mode 100644
index ec2466d772..0000000000
--- a/pear/packages/XML_RPC-1.1.0.tar
+++ /dev/null
Binary files differ
diff --git a/pear/scripts/pear.bat b/pear/scripts/pear.bat
deleted file mode 100755
index 2b30f8162a..0000000000
--- a/pear/scripts/pear.bat
+++ /dev/null
@@ -1,69 +0,0 @@
-@ECHO OFF
-
-REM ----------------------------------------------------------------------
-REM PHP version 5
-REM ----------------------------------------------------------------------
-REM Copyright (c) 1997-2004 The PHP Group
-REM ----------------------------------------------------------------------
-REM This source file is subject to version 3.0 of the PHP license,
-REM that is bundled with this package in the file LICENSE, and is
-REM available at through the world-wide-web at
-REM http://www.php.net/license/3_0.txt.
-REM If you did not receive a copy of the PHP license and are unable to
-REM obtain it through the world-wide-web, please send a note to
-REM license@php.net so we can mail you a copy immediately.
-REM ----------------------------------------------------------------------
-REM Authors: Alexander Merz (alexmerz@php.net)
-REM ----------------------------------------------------------------------
-REM
-REM Last updated 3/13/2004 ($Id$ is not replaced if the file is binary)
-
-REM change this lines to match the paths of your system
-REM -------------------
-
-@ECHO OFF
-:: Check PEAR global ENV, set them if they do not exist
-IF "%PHP_PEAR_INSTALL_DIR%"=="" SET "PHP_PEAR_INSTALL_DIR=@include_path@"
-IF "%PHP_PEAR_BIN_DIR%"=="" SET "PHP_PEAR_BIN_DIR=@bin_dir@"
-IF "%PHP_PEAR_PHP_BIN%"=="" SET "PHP_PEAR_PHP_BIN=@php_bin@"
-
-:: Check Folders and files
-IF NOT EXIST "%PHP_PEAR_INSTALL_DIR%" GOTO PEAR_INSTALL_ERROR
-IF NOT EXIST "%PHP_PEAR_INSTALL_DIR%\pearcmd.php" GOTO PEAR_INSTALL_ERROR2
-IF NOT EXIST "%PHP_PEAR_BIN_DIR%" GOTO PEAR_BIN_ERROR
-IF NOT EXIST "%PHP_PEAR_PHP_BIN%" GOTO PEAR_PHPBIN_ERROR
-:: launch pearcmd
-GOTO RUN
-:PEAR_INSTALL_ERROR
-ECHO PHP_PEAR_INSTALL_DIR is not set correctly.
-ECHO Please fix it using your environment variable or modify
-ECHO the default value in pear.bat
-ECHO The current value is:
-ECHO %PHP_PEAR_INSTALL_DIR%
-GOTO END
-:PEAR_INSTALL_ERROR2
-ECHO PHP_PEAR_INSTALL_DIR is not set correctly.
-ECHO pearcmd.php could not be found there.
-ECHO Please fix it using your environment variable or modify
-ECHO the default value in pear.bat
-ECHO The current value is:
-ECHO %PHP_PEAR_INSTALL_DIR%
-GOTO END
-:PEAR_BIN_ERROR
-ECHO PHP_PEAR_BIN_DIR is not set correctly.
-ECHO Please fix it using your environment variable or modify
-ECHO the default value in pear.bat
-ECHO The current value is:
-ECHO %PHP_PEAR_BIN_DIR%
-GOTO END
-:PEAR_PHPBIN_ERROR
-ECHO PHP_PEAR_PHP_BIN is not set correctly.
-ECHO Please fix it using your environment variable or modify
-ECHO the default value in pear.bat
-ECHO The current value is:
-ECHO %PHP_PEAR_PHP_BIN%
-GOTO END
-:RUN
-"%PHP_PEAR_PHP_BIN%" -C -d output_buffering=1 -d include_path="%PHP_PEAR_INSTALL_DIR%" -f "%PHP_PEAR_INSTALL_DIR%\pearcmd.php" -- %1 %2 %3 %4 %5 %6 %7 %8 %9
-:END
-@ECHO ON
diff --git a/pear/scripts/pear.sh b/pear/scripts/pear.sh
deleted file mode 100644
index 6253b9014c..0000000000
--- a/pear/scripts/pear.sh
+++ /dev/null
@@ -1,28 +0,0 @@
-#!/bin/sh
-
-# first find which PHP binary to use
-if test "x$PHP_PEAR_PHP_BIN" != "x"; then
- PHP="$PHP_PEAR_PHP_BIN"
-else
- if test "@php_bin@" = '@'php_bin'@'; then
- PHP=php
- else
- PHP="@php_bin@"
- fi
-fi
-
-# then look for the right pear include dir
-if test "x$PHP_PEAR_INSTALL_DIR" != "x"; then
- INCDIR=$PHP_PEAR_INSTALL_DIR
- INCARG="-d include_path=$PHP_PEAR_INSTALL_DIR"
-else
- if test "@php_dir@" = '@'php_dir'@'; then
- INCDIR=`dirname $0`
- INCARG=""
- else
- INCDIR="@php_dir@"
- INCARG="-d include_path=@php_dir@"
- fi
-fi
-
-exec $PHP -C -q $INCARG -d output_buffering=1 $INCDIR/pearcmd.php "$@"
diff --git a/pear/scripts/pearcmd.php b/pear/scripts/pearcmd.php
deleted file mode 100644
index b7d10e5e12..0000000000
--- a/pear/scripts/pearcmd.php
+++ /dev/null
@@ -1,311 +0,0 @@
-<?php
-//
-// +----------------------------------------------------------------------+
-// | PHP Version 5 |
-// +----------------------------------------------------------------------+
-// | Copyright (c) 1997-2004 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. |
-// +----------------------------------------------------------------------+
-// | Authors: Stig Bakken <ssb@php.net> |
-// | Tomas V.V.Cox <cox@idecnet.com> |
-// | |
-// +----------------------------------------------------------------------+
-//
-// $Id$
-
-ob_end_clean();
-/**
- * @nodep Gtk
- */
-if ('@include_path@' != '@'.'include_path'.'@') {
- ini_set('include_path', '@include_path@');
-}
-ini_set('allow_url_fopen', true);
-if (!ini_get('safe_mode')) {
- set_time_limit(0);
-}
-ob_implicit_flush(true);
-ini_set('track_errors', true);
-ini_set('html_errors', false);
-ini_set('magic_quotes_runtime', false);
-set_error_handler('error_handler');
-
-$pear_package_version = "@pear_version@";
-
-require_once 'PEAR.php';
-require_once 'PEAR/Config.php';
-require_once 'PEAR/Command.php';
-require_once 'Console/Getopt.php';
-
-PEAR_Command::setFrontendType('CLI');
-$all_commands = PEAR_Command::getCommands();
-
-$argv = Console_Getopt::readPHPArgv();
-/* $progname = basename($argv[0]); */
-$progname = 'pear';
-if (in_array('getopt2', get_class_methods('Console_Getopt'))) {
- array_shift($argv);
- $options = Console_Getopt::getopt2($argv, "c:C:d:D:Gh?sSqu:vV");
-} else {
- $options = Console_Getopt::getopt($argv, "c:C:d:D:Gh?sSqu:vV");
-}
-if (PEAR::isError($options)) {
- usage($options);
-}
-
-$opts = $options[0];
-
-$fetype = 'CLI';
-if ($progname == 'gpear' || $progname == 'pear-gtk') {
- $fetype = 'Gtk';
-} else {
- foreach ($opts as $opt) {
- if ($opt[0] == 'G') {
- $fetype = 'Gtk';
- }
- }
-}
-PEAR_Command::setFrontendType($fetype);
-$ui = &PEAR_Command::getFrontendObject();
-PEAR::setErrorHandling(PEAR_ERROR_CALLBACK, array($ui, "displayFatalError"));
-
-$pear_user_config = '';
-$pear_system_config = '';
-$store_user_config = false;
-$store_system_config = false;
-$verbose = 1;
-
-foreach ($opts as $opt) {
- switch ($opt[0]) {
- case 'c':
- $pear_user_config = $opt[1];
- break;
- case 'C':
- $pear_system_config = $opt[1];
- break;
- }
-}
-
-$config = &PEAR_Config::singleton($pear_user_config, $pear_system_config);
-$verbose = $config->get("verbose");
-$cmdopts = array();
-
-foreach ($opts as $opt) {
- $param = !empty($opt[1]) ? $opt[1] : true;
- switch ($opt[0]) {
- case 'd':
- list($key, $value) = explode('=', $param);
- $config->set($key, $value, 'user');
- break;
- case 'D':
- list($key, $value) = explode('=', $param);
- $config->set($key, $value, 'system');
- break;
- case 's':
- $store_user_config = true;
- break;
- case 'S':
- $store_system_config = true;
- break;
- case 'u':
- $config->remove($param, 'user');
- break;
- case 'v':
- $config->set('verbose', $config->get('verbose') + 1);
- break;
- case 'q':
- $config->set('verbose', $config->get('verbose') - 1);
- break;
- case 'V':
- usage(null, 'version');
- default:
- // all non pear params goes to the command
- $cmdopts[$opt[0]] = $param;
- break;
- }
-}
-
-if ($store_system_config) {
- $config->store('system');
-}
-
-if ($store_user_config) {
- $config->store('user');
-}
-
-$command = (isset($options[1][0])) ? $options[1][0] : null;
-
-if (empty($command) && ($store_user_config || $store_system_config)) {
- exit;
-}
-
-if ($fetype == 'Gtk') {
- Gtk::main();
-} else do {
- if ($command == 'help') {
- usage(null, @$options[1][1]);
- }
-
- PEAR::pushErrorHandling(PEAR_ERROR_RETURN);
- $cmd = PEAR_Command::factory($command, $config);
- PEAR::popErrorHandling();
- if (PEAR::isError($cmd)) {
- usage(null, @$options[1][1]);
- }
-
- $short_args = $long_args = null;
- PEAR_Command::getGetoptArgs($command, $short_args, $long_args);
- if (in_array('getopt2', get_class_methods('Console_Getopt'))) {
- array_shift($options[1]);
- $tmp = Console_Getopt::getopt2($options[1], $short_args, $long_args);
- } else {
- $tmp = Console_Getopt::getopt($options[1], $short_args, $long_args);
- }
- if (PEAR::isError($tmp)) {
- break;
- }
- list($tmpopt, $params) = $tmp;
- $opts = array();
- foreach ($tmpopt as $foo => $tmp2) {
- list($opt, $value) = $tmp2;
- if ($value === null) {
- $value = true; // options without args
- }
- if (strlen($opt) == 1) {
- $cmdoptions = $cmd->getOptions($command);
- foreach ($cmdoptions as $o => $d) {
- if (@$d['shortopt'] == $opt) {
- $opts[$o] = $value;
- }
- }
- } else {
- if (substr($opt, 0, 2) == '--') {
- $opts[substr($opt, 2)] = $value;
- }
- }
- }
- $ok = $cmd->run($command, $opts, $params);
- if ($ok === false) {
- PEAR::raiseError("unknown command `$command'");
- }
-} while (false);
-
-// {{{ usage()
-
-function usage($error = null, $helpsubject = null)
-{
- global $progname, $all_commands;
- $stderr = fopen('php://stderr', 'w');
- if (PEAR::isError($error)) {
- fputs($stderr, $error->getMessage() . "\n");
- } elseif ($error !== null) {
- fputs($stderr, "$error\n");
- }
- if ($helpsubject != null) {
- $put = cmdHelp($helpsubject);
- } else {
- $put =
- "Usage: $progname [options] command [command-options] <parameters>\n".
- "Type \"$progname help options\" to list all options.\n".
- "Type \"$progname help <command>\" to get the help for the specified command.\n".
- "Commands:\n";
- $maxlen = max(array_map("strlen", $all_commands));
- $formatstr = "%-{$maxlen}s %s\n";
- ksort($all_commands);
- foreach ($all_commands as $cmd => $class) {
- $put .= sprintf($formatstr, $cmd, PEAR_Command::getDescription($cmd));
- }
- }
- fputs($stderr, "$put\n");
- fclose($stderr);
- exit;
-}
-
-function cmdHelp($command)
-{
- global $progname, $all_commands, $config;
- if ($command == "options") {
- return
- "Options:\n".
- " -v increase verbosity level (default 1)\n".
- " -q be quiet, decrease verbosity level\n".
- " -c file find user configuration in `file'\n".
- " -C file find system configuration in `file'\n".
- " -d foo=bar set user config variable `foo' to `bar'\n".
- " -D foo=bar set system config variable `foo' to `bar'\n".
- " -G start in graphical (Gtk) mode\n".
- " -s store user configuration\n".
- " -S store system configuration\n".
- " -u foo unset `foo' in the user configuration\n".
- " -h, -? display help/usage (this message)\n".
- " -V version information\n";
- } elseif ($command == "shortcuts") {
- $sc = PEAR_Command::getShortcuts();
- $ret = "Shortcuts:\n";
- foreach ($sc as $s => $c) {
- $ret .= sprintf(" %-8s %s\n", $s, $c);
- }
- return $ret;
-
- } elseif ($command == "version") {
- return "PEAR Version: ".$GLOBALS['pear_package_version'].
- "\nPHP Version: ".phpversion().
- "\nZend Engine Version: ".zend_version().
- "\nRunning on: ".php_uname();
-
- } elseif ($help = PEAR_Command::getHelp($command)) {
- if (is_string($help)) {
- return "$progname $command [options] $help\n";
- }
- if ($help[1] === null) {
- return "$progname $command $help[0]";
- } else {
- return "$progname $command [options] $help[0]\n$help[1]";
- }
- }
- return "Command '$command' is not valid, try 'pear help'";
-}
-
-// }}}
-
-function error_handler($errno, $errmsg, $file, $line, $vars) {
- if ((defined('E_STRICT') && $errno & E_STRICT) || !error_reporting()) {
- return; // @silenced error
- }
- $errortype = array (
- E_ERROR => "Error",
- E_WARNING => "Warning",
- E_PARSE => "Parsing Error",
- E_NOTICE => "Notice",
- E_CORE_ERROR => "Core Error",
- E_CORE_WARNING => "Core Warning",
- E_COMPILE_ERROR => "Compile Error",
- E_COMPILE_WARNING => "Compile Warning",
- E_USER_ERROR => "User Error",
- E_USER_WARNING => "User Warning",
- E_USER_NOTICE => "User Notice"
- );
- $prefix = $errortype[$errno];
- $file = basename($file);
- print "\n$prefix: $errmsg in $file on line $line\n";
-}
-
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * indent-tabs-mode: nil
- * mode: php
- * End:
- */
-// vim600:syn=php
-
-?>
diff --git a/pear/scripts/pearwin.php b/pear/scripts/pearwin.php
deleted file mode 100644
index 7bbfe4c7a9..0000000000
--- a/pear/scripts/pearwin.php
+++ /dev/null
@@ -1,233 +0,0 @@
-<?php
-//
-// +----------------------------------------------------------------------+
-// | PHP Version 5 |
-// +----------------------------------------------------------------------+
-// | Copyright (c) 1997-2004 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. |
-// +----------------------------------------------------------------------+
-// | Authors: Stig Bakken <ssb@php.net> |
-// | Tomas V.V.Cox <cox@idecnet.com> |
-// +----------------------------------------------------------------------+
-//
-// $Id$
-
-require_once 'PEAR.php';
-require_once 'PEAR/Common.php';
-require_once 'PEAR/Config.php';
-require_once 'PEAR/Remote.php';
-require_once 'PEAR/Registry.php';
-require_once 'Console/Getopt.php';
-
-error_reporting(E_ALL ^ E_NOTICE);
-
-$progname = basename($argv[0]);
-
-PEAR::setErrorHandling(PEAR_ERROR_PRINT, "$progname: %s\n");
-
-$argv = Console_Getopt::readPHPArgv();
-if (PEAR::isError($argv)) {
- die($argv->getMessage());
-}
-$options = Console_Getopt::getopt($argv, "c:C:d:D:h?sSqu:v");
-if (PEAR::isError($options)) {
- usage($options);
-}
-
-
-$php_sysconfdir = getenv('PHP_SYSCONFDIR');
-if (!empty($php_sysconfdir)) {
- $pear_default_config = $php_sysconfdir.DIRECTORY_SEPARATOR.'pearsys.ini';
- $pear_user_config = $php_sysconfdir.DIRECTORY_SEPARATOR.'pear.ini';
-} else {
- $pear_default_config = PHP_SYSCONFDIR.DIRECTORY_SEPARATOR.'pearsys.ini';
- $pear_user_config = PHP_SYSCONFDIR.DIRECTORY_SEPARATOR.'pear.ini';
-}
-
-$opts = $options[0];
-
-//echo "ini_get : ".ini_get("pear_install_dir")."\n";
-//echo "get_cfg_var : ".get_cfg_var("pear_install_dir")."\n";
-
-foreach ($opts as $opt) {
- switch ($opt[0]) {
- case 'c':
- $pear_user_config = $opt[1];
- break;
- case 'C':
- $pear_default_config = $opt[1];
- break;
- }
-}
-
-$config = new PEAR_Config($pear_user_config, $pear_default_config);
-$store_user_config = false;
-$store_default_config = false;
-$verbose = 1;
-
-foreach ($opts as $opt) {
- $param = $opt[1];
- switch ($opt[0]) {
- case 'd':
- list($key, $value) = explode('=', $param);
- $config->set($key, $value);
- break;
- case 'D':
- list($key, $value) = explode('=', $param);
- $config->set($key, $value, true);
- break;
- case 's':
- $store_user_config = true;
- break;
- case 'S':
- $store_default_config = true;
- break;
- case 'u':
- $config->toDefault($param);
- break;
- case 'v':
- $verbose++;
- break;
- case 'q':
- $verbose--;
- break;
- }
-}
-
-if ($store_default_config) {
- if (@is_writeable($pear_default_config)) {
- $config->writeConfigFile($pear_default_config, 'default');
- } else {
- die("You don't have write access to $pear_default_config, exiting!\n");
- }
-}
-
-if ($store_user_config) {
- $config->writeConfigFile($pear_user_config, 'userdefined');
-}
-
-$fallback_config = array(
- 'master_server' => 'pear.php.net',
- 'php_dir' => getenv('PEAR_INSTALL_DIR'),
- 'ext_dir' => getenv('PEAR_EXTENSION_DIR'),
- 'doc_dir' => getenv('PHP_DATADIR') . DIRECTORY_SEPARATOR . 'pear' .
- DIRECTORY_SEPARATOR . 'doc',
- 'verbose' => true,
-);
-$fallback_done = array();
-
-foreach ($fallback_config as $key => $value) {
- if (!$config->isDefined($key)) {
- $config->set($key, $value);
- $fallback_done[$key] = true;
- }
-}
-
-//$verbose = $config->get("verbose");
-$script_dir = $config->get("php_dir");
-$ext_dir = $config->get("ext_dir");
-$doc_dir = $config->get("doc_dir");
-
-PEAR::setErrorHandling(PEAR_ERROR_PRINT);
-
-$command = (isset($options[1][1])) ? $options[1][1] : null;
-$rest = array_slice($options[1], 2);
-
-if (isset($command_options[$command])) {
- $tmp = Console_Getopt::getopt($rest, $command_options[$command]);
- if (PEAR::isError($tmp)) {
- usage($tmp);
- }
- $cmdopts = $tmp[0];
- $cmdargs = $tmp[1];
-} else {
- $cmdopts = array();
- $cmdargs = $rest;
-}
-
-
-/* Extracted from pearcmd-common.php */
-function heading($text)
-{
- $l = strlen(trim($text));
- print rtrim($text) . "\n" . str_repeat("=", $l) . "\n";
-}
-
-switch ($command) {
- case 'install':
- include 'pearcmd-install.php';
- break;
- case 'uninstall':
- include 'pearcmd-uninstall.php';
- break;
- case 'list':
- include 'pearcmd-list.php';
- break;
- case 'package':
- include 'pearcmd-package.php';
- break;
- case 'remote-list':
- include 'pearcmd-remote-list.php';
- break;
- case 'show-config':
- $keys = $config->getKeys();
- foreach ($keys as $key) {
- $value = $config->get($key);
- $xi = "";
- if ($config->isDefaulted($key)) {
- $xi .= " (default)";
- }
- if (isset($fallback_done[$key])) {
- $xi .= " (built-in)";
- }
- printf("%s = %s%s\n", $key, $value, $xi);
- }
- break;
- default: {
- if (!$store_default_config && !$store_user_config) {
- usage();
- }
- break;
- }
-}
-
-function usage($obj = null)
-{
- $stderr = fopen('php://stderr', 'w');
- if ($obj !== null) {
- fputs($stderr, $obj->getMessage());
- }
- fputs($stderr,
- "Usage: pear [options] command [command-options] <parameters>\n".
- "Options:\n".
- " -v increase verbosity level (default 1)\n".
- " -q be quiet, decrease verbosity level\n".
- " -c file find user configuration in `file'\n".
- " -C file find system configuration in `file'\n".
- " -d \"foo=bar\" set user config variable `foo' to `bar'\n".
- " -D \"foo=bar\" set system config variable `foo' to `bar'\n".
- " -s store user configuration\n".
- " -S store system configuration\n".
- " -u foo unset `foo' in the user configuration\n".
- " -h, -? display help/usage (this message)\n".
- "Commands:\n".
- " help [command]\n".
- " install [-r] <package file>\n".
- " uninstall [-r] <package name>\n".
- " package [package info file]\n".
- " list\n".
- " remote-list\n".
- " show-config\n".
- "\n");
- fclose($stderr);
- exit;
-}
-
-?> \ No newline at end of file
diff --git a/pear/template.spec b/pear/template.spec
deleted file mode 100644
index 9bf356c7f5..0000000000
--- a/pear/template.spec
+++ /dev/null
@@ -1,64 +0,0 @@
-Summary: PEAR: @summary@
-Name: @rpm_package@
-Version: @version@
-Release: 1
-License: @release_license@
-Group: Development/Libraries
-Source: http://@master_server@/get/@package@-%{version}.tgz
-BuildRoot: %{_tmppath}/%{name}-root
-URL: http://@master_server@/
-Prefix: %{_prefix}
-#Docdir: @doc_dir@/@package@
-BuildArchitectures: @arch@
-@extra_headers@
-
-%description
-@description@
-
-%prep
-rm -rf %{buildroot}/*
-# XXX Source files location is missing here in pear cmd
-pear -v -c %{buildroot}/pearrc \
- -d php_dir=%{_libdir}/php/pear \
- -d doc_dir=/docs \
- -d bin_dir=%{_bindir} \
- -d data_dir=%{_libdir}/php/pear/data \
- -d test_dir=%{_libdir}/php/pear/tests \
- -d ext_dir=%{_libdir} \
- -s
-
-%build
-echo BuildRoot=%{buildroot}
-
-%postun
-pear uninstall --nodeps -r @package@
-rm @rpm_xml_dir@/@package@.xml
-
-%post
-pear install --nodeps -r @rpm_xml_dir@/@package@.xml
-
-%install
-pear -c %{buildroot}/pearrc install --nodeps -R %{buildroot} \
- $RPM_SOURCE_DIR/@package@-%{version}.tgz
-rm %{buildroot}/pearrc
-rm %{buildroot}/%{_libdir}/php/pear/.filemap
-rm %{buildroot}/%{_libdir}/php/pear/.lock
-rm -rf %{buildroot}/%{_libdir}/php/pear/.registry
-if [ -d "%{buildroot}/docs/@package@/doc" ]; then
- rm -rf $RPM_BUILD_DIR/doc
- mv %{buildroot}/docs/@package@/doc $RPM_BUILD_DIR
- rm -rf %{buildroot}/docs
-fi
-mkdir -p %{buildroot}@rpm_xml_dir@
-tar -xzf $RPM_SOURCE_DIR/@package@-%{version}.tgz package.xml
-cp -p package.xml %{buildroot}@rpm_xml_dir@/@package@.xml
-
-#rm -rf %{buildroot}/*
-#pear -q install -R %{buildroot} -n package.xml
-#mkdir -p %{buildroot}@rpm_xml_dir@
-#cp -p package.xml %{buildroot}@rpm_xml_dir@/@package@.xml
-
-%files
- %defattr(-,root,root)
- %doc @doc_files@
- /
diff --git a/pear/tests/PEAR_ErrorStack/Error_Stack_TestCase_getErrorMessage.php b/pear/tests/PEAR_ErrorStack/Error_Stack_TestCase_getErrorMessage.php
deleted file mode 100644
index e636886e3d..0000000000
--- a/pear/tests/PEAR_ErrorStack/Error_Stack_TestCase_getErrorMessage.php
+++ /dev/null
@@ -1,142 +0,0 @@
-<?php
-
-/**
- * API Unit tests for PEAR_ErrorStack package.
- *
- * @version $Id$
- * @author Laurent Laville <pear@laurent-laville.org> portions from HTML_CSS
- * @author Greg Beaver
- * @package PEAR_ErrorStack
- */
-
-class testgemessage
-{
- function __toString()
- {
- return '__toString() called';
- }
-}
-class testgemessage1 {}
-/**
- * @package PEAR_ErrorStack
- */
-
-class Error_Stack_TestCase_getErrorMessage extends PHPUnit_TestCase
-{
-
- function Error_Stack_TestCase_getErrorMessage($name)
- {
- $this->PHPUnit_TestCase($name);
- }
-
- function setUp()
- {
- error_reporting(E_ALL);
- $this->errorOccured = false;
- set_error_handler(array(&$this, 'errorHandler'));
- $this->stack = new PEAR_ErrorStack('test');
- $s = &PEAR_ErrorStack::singleton('PEAR_ErrorStack');
- $s->pushCallback(array('PEAR_ErrorStack', '_handleError'));
- }
-
- function tearDown()
- {
- unset($this->stack);
- unset($GLOBALS['_PEAR_ERRORSTACK_SINGLETON']);
- }
-
-
- function _stripWhitespace($str)
- {
- return preg_replace('/\\s+/', '', $str);
- }
-
- function _methodExists($name)
- {
- if (in_array(strtolower($name), get_class_methods($this->stack))) {
- return true;
- }
- $this->assertTrue(false, 'method '. $name . ' not implemented in ' . get_class($this->stack));
- return false;
- }
-
- function errorHandler($errno, $errstr, $errfile, $errline) {
- //die("$errstr in $errfile at line $errline: $errstr");
- $this->errorOccured = true;
- $this->assertTrue(false, "$errstr at line $errline, $errfile");
- }
-
- function returnsignore($err)
- {
- $this->wasCalled = true;
- return PEAR_ERRORSTACK_IGNORE;
- }
-
- function test_basic()
- {
- if (!$this->_methodExists('getErrorMessage')) {
- return;
- }
- $msg = PEAR_ErrorStack::getErrorMessage($this->stack,
- array('message' => 'boo', 'params' => array(), 'code' => 6));
- $this->assertEquals('boo', $msg);
- }
-
- function test_basic_template()
- {
- if (!$this->_methodExists('getErrorMessage')) {
- return;
- }
- $msg = PEAR_ErrorStack::getErrorMessage($this->stack,
- array('message' => 'boo', 'params' => array()), 'far%__msg%');
- $this->assertEquals('farboo', $msg);
- }
-
- function test_basic_params()
- {
- if (!$this->_methodExists('getErrorMessage')) {
- return;
- }
- $msg = PEAR_ErrorStack::getErrorMessage($this->stack, array('message' => '',
- 'params' => array('bar' => 'hello')), '%bar% foo');
- $this->assertEquals('hello foo', $msg, 'string');
- $msg = PEAR_ErrorStack::getErrorMessage($this->stack, array('message' => '',
- 'params' => array('bar' => array('hello', 'there'))), '%bar% foo');
- $this->assertEquals('hello, there foo', $msg, 'array');
- $msg = PEAR_ErrorStack::getErrorMessage($this->stack, array('message' => '',
- 'params' => array('bar' => new testgemessage)), '%bar% foo');
- $this->assertEquals('__toString() called foo', $msg, 'first object, __toString()');
- $msg = PEAR_ErrorStack::getErrorMessage($this->stack, array('message' => '',
- 'params' => array('bar' => new testgemessage1)), '%bar% foo');
- $this->assertEquals('Object foo', $msg, 'second object, no __toString()');
- $errs = PEAR_ErrorStack::staticGetErrors();
- unset($errs['PEAR_ErrorStack'][0]['context']);
- unset($errs['PEAR_ErrorStack'][0]['time']);
- $this->assertEquals(
- array('PEAR_ErrorStack' =>
- array(
- array(
- 'code' => PEAR_ERRORSTACK_ERR_OBJTOSTRING,
- 'params' => array('obj' => 'testgemessage1'),
- 'package' => 'PEAR_ErrorStack',
- 'level' => 'warning',
- 'message' => 'object testgemessage1 passed into getErrorMessage, but has no __toString() method',
- ))), $errs, 'warning not raised');
- }
-
- function test_basic_params_with_template()
- {
- if (!$this->_methodExists('getErrorMessage')) {
- return;
- }
- $this->stack->setErrorMessageTemplate(array(6 => '%bar% foo'));
- $msg = PEAR_ErrorStack::getErrorMessage($this->stack, array('message' => '',
- 'params' => array('bar' => 'hello'), 'code' => 6));
- $this->assertEquals('hello foo', $msg, 'string');
- $msg = PEAR_ErrorStack::getErrorMessage($this->stack, array('message' => '',
- 'params' => array('bar' => 'hello'), 'code' => 7));
- $this->assertEquals('', $msg, 'string');
- }
-}
-
-?>
diff --git a/pear/tests/PEAR_ErrorStack/Error_Stack_TestCase_getErrorMessageTemplate.php b/pear/tests/PEAR_ErrorStack/Error_Stack_TestCase_getErrorMessageTemplate.php
deleted file mode 100644
index a1a39e4757..0000000000
--- a/pear/tests/PEAR_ErrorStack/Error_Stack_TestCase_getErrorMessageTemplate.php
+++ /dev/null
@@ -1,88 +0,0 @@
-<?php
-
-/**
- * API Unit tests for PEAR_ErrorStack package.
- *
- * @version $Id$
- * @author Laurent Laville <pear@laurent-laville.org> portions from HTML_CSS
- * @author Greg Beaver
- * @package PEAR_ErrorStack
- */
-
-/**
- * @package PEAR_ErrorStack
- */
-
-class Error_Stack_TestCase_getErrorMessageTemplate extends PHPUnit_TestCase
-{
-
- function Error_Stack_TestCase_getErrorMessageTemplate($name)
- {
- $this->PHPUnit_TestCase($name);
- }
-
- function setUp()
- {
- error_reporting(E_ALL);
- $this->errorOccured = false;
- set_error_handler(array(&$this, 'errorHandler'));
- $this->stack = new PEAR_ErrorStack('test');
- $s = &PEAR_ErrorStack::singleton('PEAR_ErrorStack');
- $s->pushCallback(array('PEAR_ErrorStack', '_handleError'));
- }
-
- function tearDown()
- {
- unset($this->stack);
- unset($GLOBALS['_PEAR_ERRORSTACK_SINGLETON']);
- }
-
-
- function _stripWhitespace($str)
- {
- return preg_replace('/\\s+/', '', $str);
- }
-
- function _methodExists($name)
- {
- if (in_array(strtolower($name), get_class_methods($this->stack))) {
- return true;
- }
- $this->assertTrue(false, 'method '. $name . ' not implemented in ' . get_class($this->stack));
- return false;
- }
-
- function errorHandler($errno, $errstr, $errfile, $errline) {
- //die("$errstr in $errfile at line $errline: $errstr");
- $this->errorOccured = true;
- $this->assertTrue(false, "$errstr at line $errline, $errfile");
- }
-
- function returnsignore($err)
- {
- $this->wasCalled = true;
- return PEAR_ERRORSTACK_IGNORE;
- }
-
- function test_normal()
- {
- if (!$this->_methodExists('getErrorMessageTemplate')) {
- return;
- }
- $this->assertEquals('%__msg%', $this->stack->getErrorMessageTemplate(23));
- }
-
- function test_normal_hascode()
- {
- if (!$this->_methodExists('getErrorMessageTemplate')) {
- return;
- }
- if (!$this->_methodExists('setErrorMessageTemplate')) {
- return;
- }
- $this->stack->setErrorMessageTemplate(array(23 => '%foo% has %__msg%'));
- $this->assertEquals('%foo% has %__msg%', $this->stack->getErrorMessageTemplate(23));
- }
-}
-
-?>
diff --git a/pear/tests/PEAR_ErrorStack/Error_Stack_TestCase_getErrors.php b/pear/tests/PEAR_ErrorStack/Error_Stack_TestCase_getErrors.php
deleted file mode 100644
index 4207efa5f8..0000000000
--- a/pear/tests/PEAR_ErrorStack/Error_Stack_TestCase_getErrors.php
+++ /dev/null
@@ -1,135 +0,0 @@
-<?php
-
-/**
- * API Unit tests for PEAR_ErrorStack package.
- *
- * @version $Id$
- * @author Laurent Laville <pear@laurent-laville.org> portions from HTML_CSS
- * @author Greg Beaver
- * @package PEAR_ErrorStack
- */
-
-/**
- * @package PEAR_ErrorStack
- */
-
-class Error_Stack_TestCase_getErrors extends PHPUnit_TestCase
-{
-
- function Error_Stack_TestCase_getErrors($name)
- {
- $this->PHPUnit_TestCase($name);
- }
-
- function setUp()
- {
- error_reporting(E_ALL);
- $this->errorOccured = false;
- set_error_handler(array(&$this, 'errorHandler'));
- $this->stack = new PEAR_ErrorStack('test');
- $s = &PEAR_ErrorStack::singleton('PEAR_ErrorStack');
- $s->pushCallback(array('PEAR_ErrorStack', '_handleError'));
- }
-
- function tearDown()
- {
- unset($this->stack);
- unset($GLOBALS['_PEAR_ERRORSTACK_SINGLETON']);
- }
-
-
- function _stripWhitespace($str)
- {
- return preg_replace('/\\s+/', '', $str);
- }
-
- function _methodExists($name)
- {
- if (in_array(strtolower($name), get_class_methods($this->stack))) {
- return true;
- }
- $this->assertTrue(false, 'method '. $name . ' not implemented in ' . get_class($this->stack));
- return false;
- }
-
- function errorHandler($errno, $errstr, $errfile, $errline) {
- //die("$errstr in $errfile at line $errline: $errstr");
- $this->errorOccured = true;
- $this->assertTrue(false, "$errstr at line $errline, $errfile");
- }
-
- function returnsignore($err)
- {
- $this->wasCalled = true;
- return PEAR_ERRORSTACK_IGNORE;
- }
-
- function test_none()
- {
- if (!$this->_methodExists('getErrors')) {
- return;
- }
- $this->assertEquals(array(), $this->stack->getErrors());
- $this->assertEquals(array(), $this->stack->getErrors(true));
- }
-
- function test_normal()
- {
- if (!$this->_methodExists('getErrors')) {
- return;
- }
- $this->assertEquals(array(), $this->stack->getErrors());
- $this->stack->push(1);
- $this->stack->push(2, 'warning');
- $this->stack->push(3, 'foo');
- $ret = $this->stack->getErrors();
- for ($i= 0; $i < 3; $i++) {
- unset($ret[$i]['time']);
- unset($ret[$i]['context']);
- }
- $this->assertEquals(
- array(
- array('code' => 3,
- 'params' => array(),
- 'package' => 'test',
- 'level' => 'foo',
- 'message' => ''),
- array('code' => 2,
- 'params' => array(),
- 'package' => 'test',
- 'level' => 'warning',
- 'message' => ''),
- array('code' => 1,
- 'params' => array(),
- 'package' => 'test',
- 'level' => 'error',
- 'message' => ''),
- ), $ret, 'incorrect errors, non-purge');
- $ret = $this->stack->getErrors(true);
- for ($i= 0; $i < 3; $i++) {
- unset($ret[$i]['time']);
- unset($ret[$i]['context']);
- }
- $this->assertEquals(
- array(
- array('code' => 3,
- 'params' => array(),
- 'package' => 'test',
- 'level' => 'foo',
- 'message' => ''),
- array('code' => 2,
- 'params' => array(),
- 'package' => 'test',
- 'level' => 'warning',
- 'message' => ''),
- array('code' => 1,
- 'params' => array(),
- 'package' => 'test',
- 'level' => 'error',
- 'message' => ''),
- ), $ret, 'incorrect errors, purge');
- $this->assertEquals(array(), $this->stack->getErrors());
- }
-}
-
-?>
diff --git a/pear/tests/PEAR_ErrorStack/Error_Stack_TestCase_pushpop.php b/pear/tests/PEAR_ErrorStack/Error_Stack_TestCase_pushpop.php
deleted file mode 100644
index 2e029629a0..0000000000
--- a/pear/tests/PEAR_ErrorStack/Error_Stack_TestCase_pushpop.php
+++ /dev/null
@@ -1,367 +0,0 @@
-<?php
-
-/**
- * API Unit tests for PEAR_ErrorStack package.
- *
- * @version $Id$
- * @author Laurent Laville <pear@laurent-laville.org> portions from HTML_CSS
- * @author Greg Beaver
- * @package PEAR_ErrorStack
- */
-
-/**
- * @package PEAR_ErrorStack
- */
-
-class Error_Stack_TestCase_pushpop extends PHPUnit_TestCase
-{
- /**
- * A PEAR_PackageFileManager object
- * @var object
- */
- var $packagexml;
-
- function Error_Stack_TestCase_pushpop($name)
- {
- $this->PHPUnit_TestCase($name);
- }
-
- function setUp()
- {
- error_reporting(E_ALL);
- $this->errorOccured = false;
- set_error_handler(array(&$this, 'errorHandler'));
- $this->stack = new PEAR_ErrorStack('test');
- $s = &PEAR_ErrorStack::singleton('PEAR_ErrorStack');
- $s->pushCallback(array('PEAR_ErrorStack', '_handleError'));
- }
-
- function tearDown()
- {
- unset($this->stack);
- unset($GLOBALS['_PEAR_ERRORSTACK_SINGLETON']);
- }
-
-
- function _stripWhitespace($str)
- {
- return preg_replace('/\\s+/', '', $str);
- }
-
- function _methodExists($name)
- {
- if (in_array(strtolower($name), get_class_methods($this->stack))) {
- return true;
- }
- $this->assertTrue(false, 'method '. $name . ' not implemented in ' . get_class($this->stack));
- return false;
- }
-
- function errorHandler($errno, $errstr, $errfile, $errline) {
- //die("$errstr in $errfile at line $errline: $errstr");
- $this->errorOccured = true;
- $this->assertTrue(false, "$errstr at line $errline, $errfile");
- }
-
- function test_valid_basic()
- {
- if (!$this->_methodExists('push')) {
- return;
- }
- if (!$this->_methodExists('pop')) {
- return;
- }
- $this->stack->push(1);
- $err = $this->stack->pop();
- unset($err['context']);
- unset($err['time']);
- $this->assertEquals(
- array(
- 'code' => 1,
- 'params' => array(),
- 'package' => 'test',
- 'message' => '',
- 'level' => 'error',
- ),
- $err, 'popped something else'
- );
- $err = $this->stack->pop();
- $this->assertFalse($err, 'stack not empty!');
- }
-
- function test_valid_params()
- {
- if (!$this->_methodExists('push')) {
- return;
- }
- if (!$this->_methodExists('pop')) {
- return;
- }
- $z = $this->stack->push(2, 'exception', array('my' => 'param'), 'hello',
- array('test'), array(array('file' => 'boof', 'line' => 34)));
- $err = $this->stack->pop('exception');
- $this->assertEquals($z, $err, 'popped different error');
- unset($err['time']);
- $this->assertEquals(
- array(
- 'code' => 2,
- 'params' => array('my' => 'param'),
- 'package' => 'test',
- 'message' => 'hello',
- 'level' => 'exception',
- 'context' =>
- array(
- 'file' => 'boof',
- 'line' => 34,
- ),
- 'repackage' => array('test'),
- ),
- $err, 'popped something else'
- );
- $err = $this->stack->pop();
- $this->assertFalse($err, 'stack not empty!');
- }
-
- function test_valid_paramscompat()
- {
- if (!$this->_methodExists('push')) {
- return;
- }
- if (!$this->_methodExists('pop')) {
- return;
- }
- $this->stack = new PEAR_ErrorStack('test', false, null, true);
- $z = $this->stack->push(2, 'exception', array('my' => 'param'), 'hello',
- array('test'), array(array('file' => 'boof', 'line' => 34)));
- $this->assertEquals('pear_error', strtolower(get_class($z)), 'not pear_error');
- $err = $this->stack->pop('exception');
- if (is_a($z, 'PEAR_Error')) {
- $this->assertEquals($err, $z->getUserInfo(), 'userinfo wrong');
- }
- unset($err['time']);
- $this->assertEquals(
- array(
- 'code' => 2,
- 'params' => array('my' => 'param'),
- 'package' => 'test',
- 'message' => 'hello',
- 'level' => 'exception',
- 'context' =>
- array(
- 'file' => 'boof',
- 'line' => 34,
- ),
- 'repackage' => array('test'),
- ),
- $err, 'popped something else'
- );
- $err = $this->stack->pop();
- $this->assertFalse($err, 'stack not empty!');
- }
-
- function contextcallback($code, $params, $trace)
- {
- $this->assertEquals(4, $code, 'wrong context code');
- $this->assertEquals(array('hello' => 6), $params, 'wrong context params');
- $this->wasCalled = true;
- return array('hi' => 'there', 'you' => 'fool');
- }
-
- function test_valid_contextconstructor()
- {
- if (!$this->_methodExists('push')) {
- return;
- }
- if (!$this->_methodExists('pop')) {
- return;
- }
- $this->stack = new PEAR_ErrorStack('test', false, array(&$this, 'contextcallback'));
- $this->wasCalled = false;
- $this->stack->push(4, 'error', array('hello' => 6));
- $this->assertTrue($this->wasCalled, 'context callback was not called!');
- $err = $this->stack->pop();
- unset($err['time']);
- $this->assertEquals(
- array(
- 'code' => 4,
- 'params' => array('hello' => 6),
- 'package' => 'test',
- 'message' => '',
- 'level' => 'error',
- 'context' => array('hi' => 'there', 'you' => 'fool'),
- ),
- $err, 'popped something else'
- );
- $err = $this->stack->pop();
- $this->assertFalse($err, 'stack not empty!');
- }
-
- function test_valid_contextsingleton()
- {
- if (!$this->_methodExists('push')) {
- return;
- }
- if (!$this->_methodExists('pop')) {
- return;
- }
- if (!$this->_methodExists('singleton')) {
- return;
- }
- $this->stack = &PEAR_ErrorStack::singleton('test', false, array(&$this, 'contextcallback'));
- $this->wasCalled = false;
- $this->stack->push(4, 'error', array('hello' => 6));
- $this->assertTrue($this->wasCalled, 'context callback was not called!');
- $err = $this->stack->pop();
- unset($err['time']);
- $this->assertEquals(
- array(
- 'code' => 4,
- 'params' => array('hello' => 6),
- 'package' => 'test',
- 'message' => '',
- 'level' => 'error',
- 'context' => array('hi' => 'there', 'you' => 'fool'),
- ),
- $err, 'popped something else'
- );
- $err = $this->stack->pop();
- $this->assertFalse($err, 'stack not empty!');
- }
-
- function test_valid_context_setcontext()
- {
- if (!$this->_methodExists('push')) {
- return;
- }
- if (!$this->_methodExists('pop')) {
- return;
- }
- if (!$this->_methodExists('setContextCallback')) {
- return;
- }
- $this->stack->setContextCallback(array(&$this, 'contextcallback'));
- $this->wasCalled = false;
- $this->stack->push(4, 'error', array('hello' => 6));
- $this->assertTrue($this->wasCalled, 'context callback was not called!');
- $err = $this->stack->pop();
- unset($err['time']);
- $this->assertEquals(
- array(
- 'code' => 4,
- 'params' => array('hello' => 6),
- 'package' => 'test',
- 'message' => '',
- 'level' => 'error',
- 'context' => array('hi' => 'there', 'you' => 'fool'),
- ),
- $err, 'popped something else'
- );
- $err = $this->stack->pop();
- $this->assertFalse($err, 'stack not empty!');
- }
-
- function messagecallback(&$stack, $err)
- {
- $this->assertEquals(4, $err['code'], 'wrong message code');
- $this->assertEquals(array('hello' => 6), $err['params'], 'wrong message params');
- $this->assertEquals('test1', $err['package'], 'wrong error stack');
- $this->wasCalled = true;
- return 'my silly message';
- }
-
- function test_valid_msgcallbackconstructor()
- {
- if (!$this->_methodExists('push')) {
- return;
- }
- if (!$this->_methodExists('pop')) {
- return;
- }
- $this->stack = new PEAR_ErrorStack('test1', array(&$this, 'messagecallback'));
- $this->wasCalled = false;
- $this->stack->push(4, 'error', array('hello' => 6));
- $this->assertTrue($this->wasCalled, 'message callback was not called!');
- $err = $this->stack->pop();
- unset($err['time']);
- unset($err['context']);
- $this->assertEquals(
- array(
- 'code' => 4,
- 'params' => array('hello' => 6),
- 'package' => 'test1',
- 'message' => 'my silly message',
- 'level' => 'error',
- ),
- $err, 'popped something else'
- );
- $err = $this->stack->pop();
- $this->assertFalse($err, 'stack not empty!');
- }
-
- function test_valid_msgcallbacksingleton()
- {
- if (!$this->_methodExists('push')) {
- return;
- }
- if (!$this->_methodExists('pop')) {
- return;
- }
- if (!$this->_methodExists('singleton')) {
- return;
- }
- $this->stack = &PEAR_ErrorStack::singleton('test1', array(&$this, 'messagecallback'));
- $this->wasCalled = false;
- $this->stack->push(4, 'error', array('hello' => 6));
- $this->assertTrue($this->wasCalled, 'message callback was not called!');
- $err = $this->stack->pop();
- unset($err['time']);
- unset($err['context']);
- $this->assertEquals(
- array(
- 'code' => 4,
- 'params' => array('hello' => 6),
- 'package' => 'test1',
- 'message' => 'my silly message',
- 'level' => 'error',
- ),
- $err, 'popped something else'
- );
- $err = $this->stack->pop();
- $this->assertFalse($err, 'stack not empty!');
- }
-
- function test_valid_msgcallback_setmsgcallback()
- {
- if (!$this->_methodExists('push')) {
- return;
- }
- if (!$this->_methodExists('pop')) {
- return;
- }
- if (!$this->_methodExists('setContextCallback')) {
- return;
- }
- $this->stack = new PEAR_ErrorStack('test1');
- $this->stack->setMessageCallback(array(&$this, 'messagecallback'));
- $this->wasCalled = false;
- $this->stack->push(4, 'error', array('hello' => 6));
- $this->assertTrue($this->wasCalled, 'message callback was not called!');
- $err = $this->stack->pop();
- unset($err['time']);
- unset($err['context']);
- $this->assertEquals(
- array(
- 'code' => 4,
- 'params' => array('hello' => 6),
- 'package' => 'test1',
- 'message' => 'my silly message',
- 'level' => 'error',
- ),
- $err, 'popped something else'
- );
- $err = $this->stack->pop();
- $this->assertFalse($err, 'stack not empty!');
- }
-}
-
-?>
diff --git a/pear/tests/PEAR_ErrorStack/Error_Stack_TestCase_pushpopcallback.php b/pear/tests/PEAR_ErrorStack/Error_Stack_TestCase_pushpopcallback.php
deleted file mode 100644
index 02b33b9057..0000000000
--- a/pear/tests/PEAR_ErrorStack/Error_Stack_TestCase_pushpopcallback.php
+++ /dev/null
@@ -1,320 +0,0 @@
-<?php
-
-/**
- * API Unit tests for PEAR_ErrorStack package.
- *
- * @version $Id$
- * @author Laurent Laville <pear@laurent-laville.org> portions from HTML_CSS
- * @author Greg Beaver
- * @package PEAR_ErrorStack
- */
-
-/**
- * @package PEAR_ErrorStack
- */
-
-class Error_Stack_TestCase_pushpopcallback extends PHPUnit_TestCase
-{
- /**
- * A PEAR_PackageFileManager object
- * @var object
- */
- var $packagexml;
-
- function Error_Stack_TestCase_pushpopcallback($name)
- {
- $this->PHPUnit_TestCase($name);
- }
-
- function setUp()
- {
- error_reporting(E_ALL);
- $this->errorOccured = false;
- set_error_handler(array(&$this, 'errorHandler'));
- $this->stack = new PEAR_ErrorStack('test');
- }
-
- function tearDown()
- {
- unset($this->stack);
- unset($GLOBALS['_PEAR_ERRORSTACK_SINGLETON']);
- }
-
-
- function _stripWhitespace($str)
- {
- return preg_replace('/\\s+/', '', $str);
- }
-
- function _methodExists($name)
- {
- if (in_array(strtolower($name), get_class_methods($this->stack))) {
- return true;
- }
- $this->assertTrue(false, 'method '. $name . ' not implemented in ' . get_class($this->stack));
- return false;
- }
-
- function errorHandler($errno, $errstr, $errfile, $errline) {
- //die("$errstr in $errfile at line $errline: $errstr");
- $this->errorOccured = true;
- $this->assertTrue(false, "$errstr at line $errline, $errfile");
- }
-
- function returnsignore($err)
- {
- $this->wasCalled = true;
- return PEAR_ERRORSTACK_IGNORE;
- }
-
- function test_return_ignore()
- {
- if (!$this->_methodExists('push')) {
- return;
- }
- if (!$this->_methodExists('pop')) {
- return;
- }
- if (!$this->_methodExists('pushCallback')) {
- return;
- }
- if (!$this->_methodExists('popCallback')) {
- return;
- }
- $this->stack->pushCallback(array(&$this, 'returnsignore'));
- $this->wasCalled = false;
- $this->stack->push(1);
- $this->assertTrue($this->wasCalled, 'returnsignore not called');
- $err = $this->stack->pop();
- $this->assertFalse($err, 'error was not ignored!');
- $this->stack->popCallback();
- $this->wasCalled = false;
- $this->stack->push(1);
- $this->assertFalse($this->wasCalled, 'returnsignore called');
- $err = $this->stack->pop();
- unset($err['context']);
- unset($err['time']);
- $this->assertEquals(
- array(
- 'code' => 1,
- 'params' => array(),
- 'package' => 'test',
- 'message' => '',
- 'level' => 'error',
- ),
- $err, 'popped something else'
- );
-
- $err = $this->stack->pop();
- $this->assertFalse($err, 'stack not empty!');
- }
-
- function returnsnothing($err)
- {
- $this->wasCalled = true;
- }
-
- function test_return_nothing()
- {
- if (!$this->_methodExists('push')) {
- return;
- }
- if (!$this->_methodExists('pop')) {
- return;
- }
- if (!$this->_methodExists('pushCallback')) {
- return;
- }
- if (!$this->_methodExists('popCallback')) {
- return;
- }
- $this->stack->pushCallback(array(&$this, 'returnsnothing'));
- $this->wasCalled = false;
- $this->stack->push(1);
- $this->assertTrue($this->wasCalled, 'returnsnothing not called');
- $err = $this->stack->pop();
- unset($err['context']);
- unset($err['time']);
- $this->assertEquals(
- array(
- 'code' => 1,
- 'params' => array(),
- 'package' => 'test',
- 'message' => '',
- 'level' => 'error',
- ),
- $err, 'popped something else'
- );
- $this->stack->popCallback();
- $this->wasCalled = false;
- $this->stack->push(1);
- $this->assertFalse($this->wasCalled, 'returnsnothing called');
- $err = $this->stack->pop();
- unset($err['context']);
- unset($err['time']);
- $this->assertEquals(
- array(
- 'code' => 1,
- 'params' => array(),
- 'package' => 'test',
- 'message' => '',
- 'level' => 'error',
- ),
- $err, 'popped something else'
- );
-
- $err = $this->stack->pop();
- $this->assertFalse($err, 'stack not empty!');
- }
-
- function returnspush($err)
- {
- $this->wasCalled = true;
- return PEAR_ERRORSTACK_PUSH;
- }
-
- function test_return_push()
- {
- if (!$this->_methodExists('push')) {
- return;
- }
- if (!$this->_methodExists('pop')) {
- return;
- }
- if (!$this->_methodExists('pushCallback')) {
- return;
- }
- if (!$this->_methodExists('popCallback')) {
- return;
- }
- if (!$this->_methodExists('setLogger')) {
- return;
- }
- $this->stack->pushCallback(array(&$this, 'returnspush'));
- $log = new BurfLog;
- $log->setTestCase($this);
- $log->curMethod(__FUNCTION__);
- $this->stack->setLogger($log);
- $this->wasCalled = false;
- $this->stack->push(1);
- $this->assertTrue($this->wasCalled, 'returnspush not called');
- $err = $this->stack->pop();
- unset($err['context']);
- unset($err['time']);
- $this->assertEquals(
- array(
- 'code' => 1,
- 'params' => array(),
- 'package' => 'test',
- 'message' => '',
- 'level' => 'error',
- ),
- $err, 'popped something else 1'
- );
- $this->stack->popCallback();
- $log->pushExpect('', PEAR_LOG_ERR, array(
- 'code' => 1,
- 'params' => array(),
- 'package' => 'test',
- 'message' => '',
- 'level' => 'error',
- ));
- $this->wasCalled = false;
- $this->wasLogged = false;
- $this->stack->push(1);
- $this->assertFalse($this->wasCalled, 'returnspush called');
- $this->assertTrue($this->wasLogged, 'was not logged!');
- $err = $this->stack->pop();
- unset($err['context']);
- unset($err['time']);
- $this->assertEquals(
- array(
- 'code' => 1,
- 'params' => array(),
- 'package' => 'test',
- 'message' => '',
- 'level' => 'error',
- ),
- $err, 'popped something else 2'
- );
-
- $err = $this->stack->pop();
- $this->assertFalse($err, 'stack not empty!');
- }
-
- function returnslog($err)
- {
- $this->wasCalled = true;
- return PEAR_ERRORSTACK_LOG;
- }
-
- function test_return_log()
- {
- if (!$this->_methodExists('push')) {
- return;
- }
- if (!$this->_methodExists('pop')) {
- return;
- }
- if (!$this->_methodExists('pushCallback')) {
- return;
- }
- if (!$this->_methodExists('popCallback')) {
- return;
- }
- if (!$this->_methodExists('setLogger')) {
- return;
- }
- $this->stack->pushCallback(array(&$this, 'returnslog'));
- $log = new BurfLog;
- $log->setTestCase($this);
- $log->curMethod(__FUNCTION__);
- $this->stack->setLogger($log);
- $this->wasCalled = false;
- $this->wasLogged = false;
- $log->pushExpect('', PEAR_LOG_ERR, array(
- 'code' => 1,
- 'params' => array(),
- 'package' => 'test',
- 'message' => '',
- 'level' => 'error',
- ));
- $this->stack->push(1);
- $this->assertTrue($this->wasCalled, 'returnslog not called');
- $this->assertTrue($this->wasLogged, 'was not logged!');
- $err = $this->stack->pop();
- $this->assertFalse($err, 'an error was pushed!');
- $this->stack->popCallback();
- $log->clearExpect();
- $log->pushExpect('', PEAR_LOG_ERR, array(
- 'code' => 1,
- 'params' => array(),
- 'package' => 'test',
- 'message' => '',
- 'level' => 'error',
- ));
- $this->wasCalled = false;
- $this->wasLogged = false;
- $this->stack->push(1);
- $this->assertFalse($this->wasCalled, 'returnspush called');
- $this->assertTrue($this->wasLogged, 'was not logged!');
- $err = $this->stack->pop();
- unset($err['context']);
- unset($err['time']);
- $this->assertEquals(
- array(
- 'code' => 1,
- 'params' => array(),
- 'package' => 'test',
- 'message' => '',
- 'level' => 'error',
- ),
- $err, 'popped something else 2'
- );
-
- $err = $this->stack->pop();
- $this->assertFalse($err, 'stack not empty!');
- }
-}
-
-?>
diff --git a/pear/tests/PEAR_ErrorStack/Error_Stack_TestCase_pushpopstatic.php b/pear/tests/PEAR_ErrorStack/Error_Stack_TestCase_pushpopstatic.php
deleted file mode 100644
index e2b17bb8d8..0000000000
--- a/pear/tests/PEAR_ErrorStack/Error_Stack_TestCase_pushpopstatic.php
+++ /dev/null
@@ -1,327 +0,0 @@
-<?php
-
-/**
- * API Unit tests for PEAR_ErrorStack package.
- *
- * @version $Id$
- * @author Laurent Laville <pear@laurent-laville.org> portions from HTML_CSS
- * @author Greg Beaver
- * @package PEAR_ErrorStack
- */
-
-/**
- * @package PEAR_ErrorStack
- */
-
-class Error_Stack_TestCase_pushpopstatic extends PHPUnit_TestCase
-{
- /**
- * A PEAR_PackageFileManager object
- * @var object
- */
- var $packagexml;
-
- function Error_Stack_TestCase_pushpopstatic($name)
- {
- $this->PHPUnit_TestCase($name);
- }
-
- function setUp()
- {
- error_reporting(E_ALL);
- $this->errorOccured = false;
- set_error_handler(array(&$this, 'errorHandler'));
- $this->stack = new PEAR_ErrorStack('');
- $s = &PEAR_ErrorStack::singleton('PEAR_ErrorStack');
- $s->pushCallback(array('PEAR_ErrorStack', '_handleError'));
- }
-
- function tearDown()
- {
- unset($this->stack);
- unset($GLOBALS['_PEAR_ERRORSTACK_SINGLETON']);
- }
-
-
- function _stripWhitespace($str)
- {
- return preg_replace('/\\s+/', '', $str);
- }
-
- function _methodExists($name)
- {
- if (in_array(strtolower($name), get_class_methods($this->stack))) {
- return true;
- }
- $this->assertTrue(false, 'method '. $name . ' not implemented in ' . get_class($this->stack));
- return false;
- }
-
- function errorHandler($errno, $errstr, $errfile, $errline) {
- //die("$errstr in $errfile at line $errline: $errstr");
- $this->errorOccured = true;
- $this->assertTrue(false, "$errstr at line $errline, $errfile");
- }
-
- function test_valid_basic()
- {
- if (!$this->_methodExists('staticPush')) {
- return;
- }
- if (!$this->_methodExists('singleton')) {
- return;
- }
- if (!$this->_methodExists('pop')) {
- return;
- }
- $this->stack = &PEAR_ErrorStack::singleton('test');
- PEAR_ErrorStack::staticPush('test', 1);
- $err = $this->stack->pop();
- unset($err['context']);
- unset($err['time']);
- $this->assertEquals(
- array(
- 'code' => 1,
- 'params' => array(),
- 'package' => 'test',
- 'message' => '',
- 'level' => 'error',
- ),
- $err, 'popped something else'
- );
- $err = $this->stack->pop();
- $this->assertFalse($err, 'stack not empty!');
- }
-
- function test_valid_params()
- {
- if (!$this->_methodExists('staticPush')) {
- return;
- }
- if (!$this->_methodExists('singleton')) {
- return;
- }
- if (!$this->_methodExists('pop')) {
- return;
- }
- $this->stack = &PEAR_ErrorStack::singleton('test');
- $z = PEAR_ErrorStack::staticPush('test', 2, 'exception', array('my' => 'param'), 'hello',
- array('test'), array(array('file' => 'boof', 'line' => 34)));
- $err = $this->stack->pop('exception');
- $this->assertEquals($z, $err, 'popped different error');
- unset($err['time']);
- $this->assertEquals(
- array(
- 'code' => 2,
- 'params' => array('my' => 'param'),
- 'package' => 'test',
- 'message' => 'hello',
- 'level' => 'exception',
- 'context' =>
- array(
- 'file' => 'boof',
- 'line' => 34,
- ),
- 'repackage' => array('test'),
- ),
- $err, 'popped something else'
- );
- $err = $this->stack->pop();
- $this->assertFalse($err, 'stack not empty!');
- }
-
- function test_valid_paramscompat()
- {
- if (!$this->_methodExists('staticPush')) {
- return;
- }
- if (!$this->_methodExists('singleton')) {
- return;
- }
- if (!$this->_methodExists('pop')) {
- return;
- }
- $this->stack = &PEAR_ErrorStack::singleton('test', false, null, 'PEAR_ErrorStack', true);
- $z = PEAR_ErrorStack::staticPush('test', 2, 'exception', array('my' => 'param'), 'hello',
- array('test'), array(array('file' => 'boof', 'line' => 34)));
- $this->assertEquals('pear_error', strtolower(get_class($z)), 'not pear_error');
- $err = $this->stack->pop('exception');
- if (is_a($z, 'PEAR_Error')) {
- $this->assertEquals($err, $z->getUserInfo(), 'userinfo wrong');
- }
- unset($err['time']);
- $this->assertEquals(
- array(
- 'code' => 2,
- 'params' => array('my' => 'param'),
- 'package' => 'test',
- 'message' => 'hello',
- 'level' => 'exception',
- 'context' =>
- array(
- 'file' => 'boof',
- 'line' => 34,
- ),
- 'repackage' => array('test'),
- ),
- $err, 'popped something else'
- );
- $err = $this->stack->pop();
- $this->assertFalse($err, 'stack not empty!');
- }
-
- function contextcallback($code, $params, $trace)
- {
- $this->assertEquals(4, $code, 'wrong context code');
- $this->assertEquals(array('hello' => 6), $params, 'wrong context params');
- $this->wasCalled = true;
- return array('hi' => 'there', 'you' => 'fool');
- }
-
- function test_valid_contextsingleton()
- {
- if (!$this->_methodExists('staticPush')) {
- return;
- }
- if (!$this->_methodExists('singleton')) {
- return;
- }
- if (!$this->_methodExists('pop')) {
- return;
- }
- $this->stack = &PEAR_ErrorStack::singleton('test', false, array(&$this, 'contextcallback'));
- $this->wasCalled = false;
- PEAR_ErrorStack::staticPush('test', 4, 'error', array('hello' => 6));
- $this->assertTrue($this->wasCalled, 'context callback was not called!');
- $err = $this->stack->pop();
- unset($err['time']);
- $this->assertEquals(
- array(
- 'code' => 4,
- 'params' => array('hello' => 6),
- 'package' => 'test',
- 'message' => '',
- 'level' => 'error',
- 'context' => array('hi' => 'there', 'you' => 'fool'),
- ),
- $err, 'popped something else'
- );
- $err = $this->stack->pop();
- $this->assertFalse($err, 'stack not empty!');
- }
-
- function test_valid_context_setcontext()
- {
- if (!$this->_methodExists('staticPush')) {
- return;
- }
- if (!$this->_methodExists('singleton')) {
- return;
- }
- if (!$this->_methodExists('pop')) {
- return;
- }
- if (!$this->_methodExists('setContextCallback')) {
- return;
- }
- $this->stack = &PEAR_ErrorStack::singleton('test');
- $this->stack->setContextCallback(array(&$this, 'contextcallback'));
- $this->wasCalled = false;
- PEAR_ErrorStack::staticPush('test', 4, 'error', array('hello' => 6));
- $this->assertTrue($this->wasCalled, 'context callback was not called!');
- $err = $this->stack->pop();
- unset($err['time']);
- $this->assertEquals(
- array(
- 'code' => 4,
- 'params' => array('hello' => 6),
- 'package' => 'test',
- 'message' => '',
- 'level' => 'error',
- 'context' => array('hi' => 'there', 'you' => 'fool'),
- ),
- $err, 'popped something else'
- );
- $err = $this->stack->pop();
- $this->assertFalse($err, 'stack not empty!');
- }
-
- function messagecallback(&$stack, $err)
- {
- $this->assertEquals(4, $err['code'], 'wrong message code');
- $this->assertEquals(array('hello' => 6), $err['params'], 'wrong message params');
- $this->assertEquals('test1', $err['package'], 'wrong error stack');
- $this->wasCalled = true;
- return 'my silly message';
- }
-
- function test_valid_msgcallbacksingleton()
- {
- if (!$this->_methodExists('staticPush')) {
- return;
- }
- if (!$this->_methodExists('singleton')) {
- return;
- }
- if (!$this->_methodExists('pop')) {
- return;
- }
- $this->stack = &PEAR_ErrorStack::singleton('test1', array(&$this, 'messagecallback'));
- $this->wasCalled = false;
- PEAR_ErrorStack::staticPush('test1', 4, 'error', array('hello' => 6));
- $this->assertTrue($this->wasCalled, 'message callback was not called!');
- $err = $this->stack->pop();
- unset($err['time']);
- unset($err['context']);
- $this->assertEquals(
- array(
- 'code' => 4,
- 'params' => array('hello' => 6),
- 'package' => 'test1',
- 'message' => 'my silly message',
- 'level' => 'error',
- ),
- $err, 'popped something else'
- );
- $err = $this->stack->pop();
- $this->assertFalse($err, 'stack not empty!');
- }
-
- function test_valid_msgcallback_setmsgcallback()
- {
- if (!$this->_methodExists('staticPush')) {
- return;
- }
- if (!$this->_methodExists('singleton')) {
- return;
- }
- if (!$this->_methodExists('pop')) {
- return;
- }
- if (!$this->_methodExists('setContextCallback')) {
- return;
- }
- $this->stack = &PEAR_ErrorStack::singleton('test1');
- $this->stack->setMessageCallback(array(&$this, 'messagecallback'));
- $this->wasCalled = false;
- PEAR_ErrorStack::staticPush('test1', 4, 'error', array('hello' => 6));
- $this->assertTrue($this->wasCalled, 'message callback was not called!');
- $err = $this->stack->pop();
- unset($err['time']);
- unset($err['context']);
- $this->assertEquals(
- array(
- 'code' => 4,
- 'params' => array('hello' => 6),
- 'package' => 'test1',
- 'message' => 'my silly message',
- 'level' => 'error',
- ),
- $err, 'popped something else'
- );
- $err = $this->stack->pop();
- $this->assertFalse($err, 'stack not empty!');
- }
-}
-
-?>
diff --git a/pear/tests/PEAR_ErrorStack/Error_Stack_TestCase_singleton.php b/pear/tests/PEAR_ErrorStack/Error_Stack_TestCase_singleton.php
deleted file mode 100644
index f2d8ec0a84..0000000000
--- a/pear/tests/PEAR_ErrorStack/Error_Stack_TestCase_singleton.php
+++ /dev/null
@@ -1,93 +0,0 @@
-<?php
-
-/**
- * API Unit tests for PEAR_ErrorStack package.
- *
- * @version $Id$
- * @author Laurent Laville <pear@laurent-laville.org> portions from HTML_CSS
- * @author Greg Beaver
- * @package PEAR_ErrorStack
- */
-
-/**
- * @package PEAR_ErrorStack
- */
-
-class Error_Stack_TestCase_singleton extends PHPUnit_TestCase
-{
- /**
- * A PEAR_PackageFileManager object
- * @var object
- */
- var $packagexml;
-
- function Error_Stack_TestCase_singleton($name)
- {
- $this->PHPUnit_TestCase($name);
- }
-
- function setUp()
- {
- error_reporting(E_ALL);
- $this->errorOccured = false;
- set_error_handler(array(&$this, 'errorHandler'));
- $this->stack = new PEAR_ErrorStack('');
- $s = &PEAR_ErrorStack::singleton('PEAR_ErrorStack');
- $s->pushCallback(array('PEAR_ErrorStack', '_handleError'));
- }
-
- function tearDown()
- {
- }
-
-
- function _stripWhitespace($str)
- {
- return preg_replace('/\\s+/', '', $str);
- }
-
- function _methodExists($name)
- {
- if (in_array(strtolower($name), get_class_methods($this->stack))) {
- return true;
- }
- $this->assertTrue(false, 'method '. $name . ' not implemented in ' . get_class($this->stack));
- return false;
- }
-
- function errorHandler($errno, $errstr, $errfile, $errline) {
- //die("$errstr in $errfile at line $errline: $errstr");
- $this->errorOccured = true;
- $this->assertTrue(false, "$errstr at line $errline, $errfile");
- }
-
- function test_valid_singleton()
- {
- if (!$this->_methodExists('singleton')) {
- return;
- }
- $one = &PEAR_ErrorStack::singleton('first');
- $two = &PEAR_ErrorStack::singleton('first');
- $two->testme = 2;
- $this->assertEquals(2, $two->testme, 'duh test');
- $one->testme = 4;
- $this->assertEquals(4, $one->testme, 'duh test 2');
- $this->assertEquals(4, $two->testme, 'same object test');
- }
-
- function test_invalid_singleton()
- {
- if (!$this->_methodExists('singleton')) {
- return;
- }
- $one = &PEAR_ErrorStack::singleton('first');
- $two = &PEAR_ErrorStack::singleton('second');
- $two->testme = 2;
- $this->assertEquals(2, $two->testme, 'duh test');
- $one->testme = 4;
- $this->assertEquals(4, $one->testme, 'duh test 2');
- $this->assertEquals(2, $two->testme, 'not same object test');
- }
-}
-
-?>
diff --git a/pear/tests/PEAR_ErrorStack/Error_Stack_TestCase_staticGetErrors.php b/pear/tests/PEAR_ErrorStack/Error_Stack_TestCase_staticGetErrors.php
deleted file mode 100644
index a7a3e0b84b..0000000000
--- a/pear/tests/PEAR_ErrorStack/Error_Stack_TestCase_staticGetErrors.php
+++ /dev/null
@@ -1,225 +0,0 @@
-<?php
-
-/**
- * API Unit tests for PEAR_ErrorStack package.
- *
- * @version $Id$
- * @author Laurent Laville <pear@laurent-laville.org> portions from HTML_CSS
- * @author Greg Beaver
- * @package PEAR_ErrorStack
- */
-
-/**
- * @package PEAR_ErrorStack
- */
-
-class Error_Stack_TestCase_staticGetErrors extends PHPUnit_TestCase
-{
-
- function Error_Stack_TestCase_staticGetErrors($name)
- {
- $this->PHPUnit_TestCase($name);
- }
-
- function setUp()
- {
- error_reporting(E_ALL);
- $this->errorOccured = false;
- set_error_handler(array(&$this, 'errorHandler'));
- $this->stack = &PEAR_ErrorStack::singleton('test');
- $s = &PEAR_ErrorStack::singleton('PEAR_ErrorStack');
- $s->pushCallback(array('PEAR_ErrorStack', '_handleError'));
- }
-
- function tearDown()
- {
- unset($this->stack);
- unset($GLOBALS['_PEAR_ERRORSTACK_SINGLETON']);
- }
-
-
- function _stripWhitespace($str)
- {
- return preg_replace('/\\s+/', '', $str);
- }
-
- function _methodExists($name)
- {
- if (in_array(strtolower($name), get_class_methods($this->stack))) {
- return true;
- }
- $this->assertTrue(false, 'method '. $name . ' not implemented in ' . get_class($this->stack));
- return false;
- }
-
- function errorHandler($errno, $errstr, $errfile, $errline) {
- //die("$errstr in $errfile at line $errline: $errstr");
- $this->errorOccured = true;
- $this->assertTrue(false, "$errstr at line $errline, $errfile");
- }
-
- function returnsignore($err)
- {
- $this->wasCalled = true;
- return PEAR_ERRORSTACK_IGNORE;
- }
-
- function test_none()
- {
- if (!$this->_methodExists('staticGetErrors')) {
- return;
- }
- $this->assertEquals(array(), PEAR_ErrorStack::staticGetErrors());
- $this->assertEquals(array(), PEAR_ErrorStack::staticGetErrors(true));
- }
-
- function test_normal()
- {
- if (!$this->_methodExists('staticGetErrors')) {
- return;
- }
- $this->assertEquals(array(), PEAR_ErrorStack::staticGetErrors());
- $this->stack->push(1);
- $this->stack->push(2, 'warning');
- $this->stack->push(3, 'foo');
- $ret = PEAR_ErrorStack::staticGetErrors();
- for ($i= 0; $i < 3; $i++) {
- unset($ret['test'][$i]['time']);
- unset($ret['test'][$i]['context']);
- }
- $this->assertEquals(
- array( 'test' => array(
- array('code' => 3,
- 'params' => array(),
- 'package' => 'test',
- 'level' => 'foo',
- 'message' => ''),
- array('code' => 2,
- 'params' => array(),
- 'package' => 'test',
- 'level' => 'warning',
- 'message' => ''),
- array('code' => 1,
- 'params' => array(),
- 'package' => 'test',
- 'level' => 'error',
- 'message' => ''),
- )), $ret, 'incorrect errors, non-purge');
- $ret = PEAR_ErrorStack::staticGetErrors(true);
- for ($i= 0; $i < 3; $i++) {
- unset($ret['test'][$i]['time']);
- unset($ret['test'][$i]['context']);
- }
- $this->assertEquals(
- array( 'test' => array(
- array('code' => 3,
- 'params' => array(),
- 'package' => 'test',
- 'level' => 'foo',
- 'message' => ''),
- array('code' => 2,
- 'params' => array(),
- 'package' => 'test',
- 'level' => 'warning',
- 'message' => ''),
- array('code' => 1,
- 'params' => array(),
- 'package' => 'test',
- 'level' => 'error',
- 'message' => ''),
- )), $ret, 'incorrect errors, purge');
- $this->assertEquals(array(), PEAR_ErrorStack::staticGetErrors());
- }
-
- function test_merge()
- {
- if (!$this->_methodExists('staticGetErrors')) {
- return;
- }
- $this->assertEquals(array(), PEAR_ErrorStack::staticGetErrors());
- $this->stack->push(1);
- for($i=0;$i<10000;$i++);
- $this->stack->push(2, 'warning');
- for($i=0;$i<10000;$i++);
- PEAR_ErrorStack::staticPush('fronk', 3, 'foo');
- $ret = PEAR_ErrorStack::staticGetErrors(true, false, true);
- for ($i= 0; $i < 3; $i++) {
- unset($ret[$i]['time']);
- unset($ret[$i]['context']);
- }
- $this->assertEquals(
- array(
- array('code' => 3,
- 'params' => array(),
- 'package' => 'fronk',
- 'level' => 'foo',
- 'message' => ''),
- array('code' => 2,
- 'params' => array(),
- 'package' => 'test',
- 'level' => 'warning',
- 'message' => ''),
- array('code' => 1,
- 'params' => array(),
- 'package' => 'test',
- 'level' => 'error',
- 'message' => ''),
- ), $ret, 'incorrect errors, non-purge');
- $test = PEAR_ErrorStack::staticGetErrors();
- $this->assertEquals(array(), $test, 'normal array');
- }
-
- function _sortErrorsRev($a, $b)
- {
- $this->wasCalled = true;
- if ($a['time'] == $b['time']) {
- return 0;
- }
- if ($a['time'] < $b['time']) {
- return -1;
- }
- return 1;
- }
-
- function test_merge_sortfunc()
- {
- if (!$this->_methodExists('staticGetErrors')) {
- return;
- }
- $this->assertEquals(array(), PEAR_ErrorStack::staticGetErrors());
- $this->stack->push(1);
- for($i=0;$i<10000;$i++);
- $this->stack->push(2, 'warning');
- for($i=0;$i<10000;$i++);
- PEAR_ErrorStack::staticPush('fronk', 3, 'foo');
- $this->wasCalled = false;
- $ret = PEAR_ErrorStack::staticGetErrors(true, false, true, array(&$this, '_sortErrorsRev'));
- $this->assertTrue($this->wasCalled, '_sortErrorsRev not called!');
- for ($i= 0; $i < 3; $i++) {
- unset($ret[$i]['time']);
- unset($ret[$i]['context']);
- }
- $this->assertEquals(
- array(
- array('code' => 1,
- 'params' => array(),
- 'package' => 'test',
- 'level' => 'error',
- 'message' => ''),
- array('code' => 2,
- 'params' => array(),
- 'package' => 'test',
- 'level' => 'warning',
- 'message' => ''),
- array('code' => 3,
- 'params' => array(),
- 'package' => 'fronk',
- 'level' => 'foo',
- 'message' => ''),
- ), $ret, 'incorrect errors, non-purge');
- $test = PEAR_ErrorStack::staticGetErrors();
- $this->assertEquals(array(), $test, 'normal array');
- }
-}
-
-?>
diff --git a/pear/tests/PEAR_ErrorStack/HTML_TestListener.php b/pear/tests/PEAR_ErrorStack/HTML_TestListener.php
deleted file mode 100644
index a6b3ca6588..0000000000
--- a/pear/tests/PEAR_ErrorStack/HTML_TestListener.php
+++ /dev/null
@@ -1,64 +0,0 @@
-<?php
-
-/**
- * Provides a nice HTML output for PHPUnit suite tests.
- *
- * @version $Id$
- * @author Laurent Laville <pear@laurent-laville.org>
- * @package HTML_CSS
- */
-
-class HTML_TestListener extends PHPUnit_TestListener {
-
- function HTML_TestListener() {
-
-$report = <<<EOS
-<table cellspacing="1" cellpadding="1" border="0" width="90%" align="center" class="details">
-<tr><th>Class</th><th>Function</th><th>Success</th><th>Meta-result</th></tr>
-EOS;
- echo $report;
- }
-
- function addError(&$test, &$t) {
- $this->_errors += 1;
- }
-
- function addFailure(&$test, &$t) {
- $this->_fails += 1;
- }
-
- function endTest(&$test) {
- /* Report both the test result and, for this special situation
- where some tests are expected to fail, a "meta" test result
- which indicates whether the test result matches the
- expected result.
- */
- $expect_failure = preg_match('/fail/i', $test->getName());
- $test_passed = ($this->_fails == 0 && $this->_errors == 0);
-
- if ($this->_errors > 0) {
- $outcome = "<span class=\"Error\">ERROR</span>";
- } else if ($this->_fails > 0) {
- $outcome = "<span class=\"Failure\">FAIL</span>";
- } else {
- $outcome = "<span class=\"Pass\">OK</span>";
- }
- if ($this->_errors > 0) {
- $meta_outcome = '<span class="Unknown">unknown</span>';
- } else {
- $meta_outcome = ($expect_failure xor $test_passed)
- ? '<span class="Expected">as expected</span>'
- : '<span class="Unexpected">UNEXPECTED</span>';
- }
- printf("<td>$outcome</td><td>$meta_outcome</td></tr>");
- }
-
- function startTest(&$test) {
- $this->_fails = 0;
- $this->_errors = 0;
- printf("<tr><td>%s </td><td>%s </td>", get_class($test), $test->getName());
- }
-
-
-}
-?> \ No newline at end of file
diff --git a/pear/tests/PEAR_ErrorStack/TestUnit.php b/pear/tests/PEAR_ErrorStack/TestUnit.php
deleted file mode 100644
index 1fe703f664..0000000000
--- a/pear/tests/PEAR_ErrorStack/TestUnit.php
+++ /dev/null
@@ -1,55 +0,0 @@
-<?php
-
-/**
- * TestUnit runs a TestSuite and returns a TestResult object.
- * And more than PHPUnit attach a listener to TestResult.
- *
- * @version $Id$
- * @author Laurent Laville <pear@laurent-laville.org>
- * @package HTML_CSS
- */
-
-require_once 'PHPUnit.php';
-
-class TestUnit extends PHPUnit {
-
- function &run(&$suite, $listener) {
- $result = new TestResult();
- $result->addListener($listener);
- $suite->run($result);
-
- return $result;
- }
-}
-
-class TestResult extends PHPUnit_TestResult {
-
- /* report result of test run */
- function report() {
- echo "</TABLE>";
-
- $nRun = $this->runCount();
- $nErrors = $this->errorCount();
- $nFailures = $this->failureCount();
- echo "<h2>Summary</h2>";
-
- printf("<p>%s test%s run.<br>", $nRun, ($nRun > 1) ? 's' : '');
- printf("%s error%s.<br>\n", $nErrors, ($nErrors > 1) ? 's' : '');
- printf("%s failure%s.<br>\n", $nFailures, ($nFailures > 1) ? 's' : '');
- if ($nFailures > 0) {
- echo "<h2>Failure Details</h2>";
- print("<ol>\n");
- $failures = $this->failures();
- while (list($i, $failure) = each($failures)) {
- $failedTest = $failure->failedTest();
- printf("<li>%s\n", $failedTest->getName() );
- print("<ul>");
- printf("<li>%s\n", $failure->thrownException() );
- print("</ul>");
- }
- print("</ol>\n");
- }
- }
-
-}
-?>
diff --git a/pear/tests/PEAR_ErrorStack/base_regression.php b/pear/tests/PEAR_ErrorStack/base_regression.php
deleted file mode 100644
index 16e9eeb302..0000000000
--- a/pear/tests/PEAR_ErrorStack/base_regression.php
+++ /dev/null
@@ -1,550 +0,0 @@
-<?php
-// $Revision$
-/**
- * Basic regression test for PEAR_ErrorStack::getFileLine()
- *
- * phpUnit can't test global code properly because of its design, so I designed
- * this instead
- * @package PEAR_ErrorStack
- * @subpackage tests
- * @author Greg Beaver <cellog@php.net>
- */
-require_once 'PEAR/ErrorStack.php';
-$result = array(
-'passed' => array(),
-'failed' => array()
-);
-$stack = &PEAR_ErrorStack::singleton('test');
-$testNumber = 1;
-// test basic global file/line
-$stack->push(3);
-$testline = __LINE__ - 1;
-
-$ret = $stack->pop();
-$diff = array_diff_assoc($ret['context'],
-array('file' => __FILE__,
- 'function' => 'include_once',
- 'line' => $testline));
-
-if ($diff !== array()) {
- $result['failed'][$testNumber] = $diff;
-} else {
- $result['passed'][$testNumber] = true;
-}
-
-$testNumber++;
-// test basic in-function file/line #2
-function testfunc() { global $stack, $testline;
-$stack->push(3);
-$testline = __LINE__ - 1;
-}
-testfunc();
-
-$ret = $stack->pop();
-$diff = array_diff_assoc($ret['context'],
-array('file' => __FILE__,
- 'line' => $testline,
- 'function' => 'testfunc'));
-
-if ($diff !== array()) {
- $result['failed'][$testNumber] = $diff;
-} else {
- $result['passed'][$testNumber] = true;
-}
-
-$testNumber++;
-// test basic in-static method file/line #3
-class stclass {
-function stfunc() { global $stack, $testline;
-$stack->push(3);
-$testline = __LINE__ - 1;
-}
-}
-stclass::stfunc();
-
-$ret = $stack->pop();
-$diff = array_diff_assoc($ret['context'],
-array('file' => __FILE__,
- 'line' => $testline,
- 'function' => 'stfunc',
- 'class' => 'stclass'));
-
-if ($diff !== array()) {
- $result['failed'][$testNumber] = $diff;
-} else {
- $result['passed'][$testNumber] = true;
-}
-
-$testNumber++;
-// test basic in-method file/line #4
-class normalclass {
-function normalfunc() { global $stack, $testline;
-$stack->push(3);
-$testline = __LINE__ - 1;
-}
-}
-$z = new normalclass;
-$z->normalfunc();
-
-$ret = $stack->pop();
-$diff = array_diff_assoc($ret['context'],
-array('file' => __FILE__,
- 'line' => $testline,
- 'function' => 'normalfunc',
- 'class' => 'normalclass'));
-
-if ($diff !== array()) {
- $result['failed'][$testNumber] = $diff;
-} else {
- $result['passed'][$testNumber] = true;
-}
-
-$testNumber++;
-// test global eval file/line #5
-eval('$stack->push(3);');
-$testline = __LINE__ - 1;
-
-$ret = $stack->pop();
-$diff = array_diff_assoc($ret['context'],
-array('file' => __FILE__,
- 'function' => 'include_once',
- 'line' => $testline));
-
-if ($diff !== array()) {
- $result['failed'][$testNumber] = $diff;
-} else {
- $result['passed'][$testNumber] = true;
-}
-
-$testNumber++;
-// test in-function eval file/line #6
-function test2() {
- global $testline, $stack;
-eval('$stack->push(3);');
-$testline = __LINE__ - 1;
-}
-test2();
-
-$ret = $stack->pop();
-$diff = array_diff_assoc($ret['context'],
-array('file' => __FILE__,
- 'line' => $testline,
- 'function' => 'test2'));
-
-if ($diff !== array()) {
- $result['failed'][$testNumber] = $diff;
-} else {
- $result['passed'][$testNumber] = true;
-}
-
-$testNumber++;
-// test in-static method eval file/line #7
-class test3 {
-function test3() {
- global $testline, $stack;
-eval('$stack->push(3);');
-$testline = __LINE__ - 1;
-}
-}
-test3::test3();
-
-$ret = $stack->pop();
-$diff = array_diff_assoc($ret['context'],
-array('file' => __FILE__,
- 'line' => $testline,
- 'function' => 'test3',
- 'class' => 'test3'));
-
-if ($diff !== array()) {
- $result['failed'][$testNumber] = $diff;
-} else {
- $result['passed'][$testNumber] = true;
-}
-
-$testNumber++;
-// test in-method eval file/line #8
-class test4 {
-function test4() {
- global $testline, $stack;
-eval('$stack->push(3);');
-$testline = __LINE__ - 1;
-}
-}
-$z = new test4;
-$z->test4();
-
-$ret = $stack->pop();
-$diff = array_diff_assoc($ret['context'],
-array('file' => __FILE__,
- 'line' => $testline,
- 'function' => 'test4',
- 'class' => 'test4'));
-
-if ($diff !== array()) {
- $result['failed'][$testNumber] = $diff;
-} else {
- $result['passed'][$testNumber] = true;
-}
-
-$testNumber++;
-// test global create_function file/line #9
-$a = create_function('', '$GLOBALS["stack"]->push(3);');
-$testline = __LINE__ - 1;
-$a();
-
-$ret = $stack->pop();
-$diff = array_diff_assoc($ret['context'],
-array('file' => __FILE__,
- 'line' => $testline,
- 'function' => 'create_function() code'));
-
-if ($diff !== array()) {
- $result['failed'][$testNumber] = $diff;
-} else {
- $result['passed'][$testNumber] = true;
-}
-
-$testNumber++;
-// test in-function create_function file/line #10
-function test7() { global $a;
-$a();
-}
-test7();
-
-$ret = $stack->pop();
-$diff = array_diff_assoc($ret['context'],
-array('file' => __FILE__,
- 'line' => $testline,
- 'function' => 'create_function() code'));
-
-if ($diff !== array()) {
- $result['failed'][$testNumber] = $diff;
-} else {
- $result['passed'][$testNumber] = true;
-}
-
-$testNumber++;
-// test in-static method create_function file/line #11
-class test8 {
-function test8() { global $a;
-$a();
-}
-}
-test8::test8();
-
-$ret = $stack->pop();
-$diff = array_diff_assoc($ret['context'],
-array('file' => __FILE__,
- 'line' => $testline,
- 'function' => 'create_function() code'));
-
-if ($diff !== array()) {
- $result['failed'][$testNumber] = $diff;
-} else {
- $result['passed'][$testNumber] = true;
-}
-
-$testNumber++;
-// test in-method create_function file/line #12
-class test9 {
-function test9() { global $a;
-$a();
-}
-}
-$z = new test9;
-$z->test9();
-
-$ret = $stack->pop();
-$diff = array_diff_assoc($ret['context'],
-array('file' => __FILE__,
- 'line' => $testline,
- 'function' => 'create_function() code'));
-
-if ($diff !== array()) {
- $result['failed'][$testNumber] = $diff;
-} else {
- $result['passed'][$testNumber] = true;
-}
-
-$result['number'] = $testNumber;
-
-$testNumber++;
-// test static basic global file/line #13
-PEAR_ErrorStack::staticPush('test', 3);
-$testline = __LINE__ - 1;
-
-$ret = $stack->pop();
-$diff = array_diff_assoc($ret['context'],
-array('file' => __FILE__,
- 'function' => 'include_once',
- 'line' => $testline));
-
-if ($diff !== array()) {
- $result['failed'][$testNumber] = $diff;
-} else {
- $result['passed'][$testNumber] = true;
-}
-
-$testNumber++;
-// test static basic in-function file/line #14
-function testfunc2() { global $stack, $testline;
-PEAR_ErrorStack::staticPush('test', 3);
-$testline = __LINE__ - 1;
-}
-testfunc2();
-
-$ret = $stack->pop();
-$diff = array_diff_assoc($ret['context'],
-array('file' => __FILE__,
- 'line' => $testline,
- 'function' => 'testfunc2'));
-
-if ($diff !== array()) {
- $result['failed'][$testNumber] = $diff;
-} else {
- $result['passed'][$testNumber] = true;
-}
-
-$testNumber++;
-// test static basic in-static method file/line #15
-class stclass2 {
-function stfunc() { global $stack, $testline;
-PEAR_ErrorStack::staticPush('test', 3);
-$testline = __LINE__ - 1;
-}
-}
-stclass2::stfunc();
-
-$ret = $stack->pop();
-$diff = array_diff_assoc($ret['context'],
-array('file' => __FILE__,
- 'line' => $testline,
- 'function' => 'stfunc',
- 'class' => 'stclass2'));
-
-if ($diff !== array()) {
- $result['failed'][$testNumber] = $diff;
-} else {
- $result['passed'][$testNumber] = true;
-}
-
-$testNumber++;
-// test static basic in-method file/line #16
-class normalclass2 {
-function normalfunc() { global $stack, $testline;
-PEAR_ErrorStack::staticPush('test', 3);
-$testline = __LINE__ - 1;
-}
-}
-$z = new normalclass2;
-$z->normalfunc();
-
-$ret = $stack->pop();
-$diff = array_diff_assoc($ret['context'],
-array('file' => __FILE__,
- 'line' => $testline,
- 'function' => 'normalfunc',
- 'class' => 'normalclass2'));
-
-if ($diff !== array()) {
- $result['failed'][$testNumber] = $diff;
-} else {
- $result['passed'][$testNumber] = true;
-}
-
-$testNumber++;
-// test static global eval file/line #17
-eval('PEAR_ErrorStack::staticPush(\'test\', 3);');
-$testline = __LINE__ - 1;
-
-$ret = $stack->pop();
-$diff = array_diff_assoc($ret['context'],
-array('file' => __FILE__,
- 'function' => 'include_once',
- 'line' => $testline));
-
-if ($diff !== array()) {
- $result['failed'][$testNumber] = $diff;
-} else {
- $result['passed'][$testNumber] = true;
-}
-
-$testNumber++;
-// test static in-function eval file/line #18
-function test22() {
- global $testline, $stack;
-eval('PEAR_ErrorStack::staticPush("test", 3);');
-$testline = __LINE__ - 1;
-}
-test22();
-
-$ret = $stack->pop();
-$diff = array_diff_assoc($ret['context'],
-array('file' => __FILE__,
- 'line' => $testline,
- 'function' => 'test22'));
-
-if ($diff !== array()) {
- $result['failed'][$testNumber] = $diff;
-} else {
- $result['passed'][$testNumber] = true;
-}
-
-$testNumber++;
-// test static in-static method eval file/line #19
-class test32 {
-function test3() {
- global $testline, $stack;
-eval('PEAR_ErrorStack::staticPush(\'test\',3);');
-$testline = __LINE__ - 1;
-}
-}
-test32::test3();
-
-$ret = $stack->pop();
-$diff = array_diff_assoc($ret['context'],
-array('file' => __FILE__,
- 'line' => $testline,
- 'function' => 'test3',
- 'class' => 'test32'));
-
-if ($diff !== array()) {
- $result['failed'][$testNumber] = $diff;
-} else {
- $result['passed'][$testNumber] = true;
-}
-
-$testNumber++;
-// test static in-method eval file/line #20
-class test42 {
-function test4() {
- global $testline, $stack;
-eval('PEAR_ErrorStack::staticPush(\'test\',3);');
-$testline = __LINE__ - 1;
-}
-}
-$z = new test42;
-$z->test4();
-
-$ret = $stack->pop();
-$diff = array_diff_assoc($ret['context'],
-array('file' => __FILE__,
- 'line' => $testline,
- 'function' => 'test4',
- 'class' => 'test42'));
-
-if ($diff !== array()) {
- $result['failed'][$testNumber] = $diff;
-} else {
- $result['passed'][$testNumber] = true;
-}
-
-$testNumber++;
-// test static global create_function file/line #21
-$a = create_function('', 'PEAR_ErrorStack::staticPush("test",3);');
-$testline = __LINE__ - 1;
-$a();
-
-$ret = $stack->pop();
-$diff = array_diff_assoc($ret['context'],
-array('file' => __FILE__,
- 'line' => $testline,
- 'function' => 'create_function() code'));
-
-if ($diff !== array()) {
- $result['failed'][$testNumber] = $diff;
-} else {
- $result['passed'][$testNumber] = true;
-}
-
-$testNumber++;
-// test static in-function create_function file/line #22
-function test72() { global $a;
-$a();
-}
-test72();
-
-$ret = $stack->pop();
-$diff = array_diff_assoc($ret['context'],
-array('file' => __FILE__,
- 'line' => $testline,
- 'function' => 'create_function() code'));
-
-if ($diff !== array()) {
- $result['failed'][$testNumber] = $diff;
-} else {
- $result['passed'][$testNumber] = true;
-}
-
-$testNumber++;
-// test static in-static method create_function file/line #23
-class test82 {
-function test8() { global $a;
-$a();
-}
-}
-test82::test8();
-
-$ret = $stack->pop();
-$diff = array_diff_assoc($ret['context'],
-array('file' => __FILE__,
- 'line' => $testline,
- 'function' => 'create_function() code'));
-
-if ($diff !== array()) {
- $result['failed'][$testNumber] = $diff;
-} else {
- $result['passed'][$testNumber] = true;
-}
-
-$testNumber++;
-// test static in-method create_function file/line #24
-class test92 {
-function test9() { global $a;
-$a();
-}
-}
-$z = new test92;
-$z->test9();
-
-$ret = $stack->pop();
-$diff = array_diff_assoc($ret['context'],
-array('file' => __FILE__,
- 'line' => $testline,
- 'function' => 'create_function() code'));
-
-if ($diff !== array()) {
- $result['failed'][$testNumber] = $diff;
-} else {
- $result['passed'][$testNumber] = true;
-}
-
-$result['number'] = $testNumber;
-
-return $result;
-/**
- * Utility function
- */
-function isIncludeable($path)
-{
- if (file_exists(realpath($path)) && is_readable(realpath($path))) {
- return true;
- }
- foreach (explode(PATH_SEPARATOR, get_include_path()) as $prepend) {
- $test = realpath($prepend . DIRECTORY_SEPARATOR . $path);
- if (file_exists($test) && is_readable($test)) {
- return true;
- }
- }
-}
-/**
- * Mock PHPUnit object
- */
-class Mock_PHPUnit {
- var $name;
- function getName()
- {
- return 'base regression test ' . $this->name;
- }
-}
-?> \ No newline at end of file
diff --git a/pear/tests/PEAR_ErrorStack/stylesheet.css b/pear/tests/PEAR_ErrorStack/stylesheet.css
deleted file mode 100644
index 47b9f92b2a..0000000000
--- a/pear/tests/PEAR_ErrorStack/stylesheet.css
+++ /dev/null
@@ -1,65 +0,0 @@
-/* $Id$ */
-
-body {
- font:normal 68% verdana,arial,helvetica;
- color:#000000;
-}
-table tr td, table tr th {
- font-size: 68%;
-}
-table.details tr th{
- font-weight: bold;
- text-align:left;
- background:#a6caf0;
-}
-table.details tr{
- background:#eeeee0;
-}
-
-p {
- line-height:1.5em;
- margin-top:0.5em; margin-bottom:1.0em;
-}
-h1 {
- margin: 0px 0px 5px; font: 165% verdana,arial,helvetica
-}
-h2 {
- margin-top: 1em; margin-bottom: 0.5em; font: bold 125% verdana,arial,helvetica
-}
-h3 {
- margin-bottom: 0.5em; font: bold 115% verdana,arial,helvetica
-}
-h4 {
- margin-bottom: 0.5em; font: bold 100% verdana,arial,helvetica
-}
-h5 {
- margin-bottom: 0.5em; font: bold 100% verdana,arial,helvetica
-}
-h6 {
- margin-bottom: 0.5em; font: bold 100% verdana,arial,helvetica
-}
-.Error {
- font-weight:bold; color:red;
-}
-.Failure, .Unexpected {
- background:#ff0000; font-weight:bold; color:black;
-}
-.Unknown {
- background:#ffff00; font-weight:bold; color:black;
-}
-.Pass, .Expected {
- background:#00ff00; font-weight:bold; color:black;
-}
-.Properties {
- text-align:right;
-}
-
-CODE.expected {
- color: green; background: none; font-weight: normal;
-}
-CODE.actual {
- color: red; background: none; font-weight: normal;
-}
-.typeinfo {
- color: gray;
-}
diff --git a/pear/tests/PEAR_ErrorStack/testsuite.php b/pear/tests/PEAR_ErrorStack/testsuite.php
deleted file mode 100644
index 0dcb149ff1..0000000000
--- a/pear/tests/PEAR_ErrorStack/testsuite.php
+++ /dev/null
@@ -1,152 +0,0 @@
-<?php
-
-/**
- * HTML output for PHPUnit suite tests.
- *
- * Copied for PEAR_PackageFileManager from HTML_CSS
- * @version $Id$
- * @author Laurent Laville <pear@laurent-laville.org>
- * @package HTML_CSS
- */
-
-require_once 'TestUnit.php';
-require_once 'HTML_TestListener.php';
-require_once 'PEAR/ErrorStack.php';
-
-$title = 'PhpUnit test run, PEAR_ErrorStack package';
-?>
-<html>
-<head>
-<title><?php echo $title; ?></title>
-<link rel="stylesheet" href="stylesheet.css" type="text/css" />
-</head>
-<body>
-<h1><?php echo $title; ?></h1>
- <p>
- This page runs all the phpUnit self-tests, and produces nice HTML output.
- </p>
- <p>
- Unlike typical test run, <strong>expect many test cases to
- fail</strong>. Exactly those with <code>pass</code> in their name
- should succeed.
- </p>
- <p>
- For each test we display both the test result -- <span
- class="Pass">ok</span>, <span class="Failure">FAIL</span>, or
- <span class="Error">ERROR</span> -- and also a meta-result --
- <span class="Expected">as expected</span>, <span
- class="Unexpected">UNEXPECTED</span>, or <span
- class="Unknown">unknown</span> -- that indicates whether the
- expected test result occurred. Although many test results will
- be 'FAIL' here, all meta-results should be 'as expected', except
- for a few 'unknown' meta-results (because of errors) when running
- in PHP3.
- </p>
-
-<h2>Tests</h2>
- <?php
- $testcases = array(
- 'Error_Stack_TestCase_singleton',
- 'Error_Stack_TestCase_pushpop',
- 'Error_Stack_TestCase_pushpopstatic',
- 'Error_Stack_TestCase_pushpopcallback',
- 'Error_Stack_TestCase_getErrorMessage',
- 'Error_Stack_TestCase_getErrorMessageTemplate',
- 'Error_Stack_TestCase_getErrors',
- 'Error_Stack_TestCase_staticGetErrors',
- );
-define('PEAR_LOG_EMERG', 0); /** System is unusable */
-define('PEAR_LOG_ALERT', 1); /** Immediate action required */
-define('PEAR_LOG_CRIT', 2); /** Critical conditions */
-define('PEAR_LOG_ERR', 3); /** Error conditions */
-define('PEAR_LOG_WARNING', 4); /** Warning conditions */
-define('PEAR_LOG_NOTICE', 5); /** Normal but significant */
-define('PEAR_LOG_INFO', 6); /** Informational */
-define('PEAR_LOG_DEBUG', 7); /** Debug-level messages */
-/**
-* Mock Log object
-*/
-class BurfLog {
- var $testcase;
- var $method;
- var $expect = array();
- function setTestCase(&$testcase)
- {
- $this->testcase = &$testcase;
- }
-
- function curMethod($method)
- {
- $this->method = $method;
- }
-
- function pushExpect($message, $priority, $errarray)
- {
- unset($errarray['time']);
- unset($errarray['context']);
- array_push($this->expect, array($message, $priority, $errarray));
- }
-
- function clearExpect()
- {
- $this->expect = array();
- }
-
- function log($message, $priority, $errarray)
- {
- $this->testcase->wasLogged = true;
- if (!is_a($this->testcase, 'PHPUnit_TestCase')) {
- trigger_error('ERROR: burflog never set up', E_USER_ERROR);
- return;
- }
- if (!isset($this->method)) {
- $this->testcase->assertFalse(true, 'ERROR: burflog never set up');
- return;
- }
- if (!count($this->expect)) {
- $this->testcase->assertFalse(true, "method $this->method: logged, but no log expected");
- $this->testcase->assertFalse(true, "method $this->method: log message = $message");
- $this->testcase->assertFalse(true, "method $this->method: log priority = $priority");
- return;
- }
- unset($errarray['time']);
- unset($errarray['context']);
- $expect = array_pop($this->expect);
- $this->testcase->assertEquals($expect[0], $message, "method $this->method: wrong message");
- $this->testcase->assertEquals($expect[1], $priority, "method $this->method: wrong priority");
- $this->testcase->assertEquals($expect[2], $errarray, "method $this->method: wrong errarray");
- }
-}
-
- $suite = new PHPUnit_TestSuite();
-
- foreach ($testcases as $testcase) {
- include_once $testcase . '.php';
- $suite->addTestSuite($testcase);
- }
-
- $listener = new HTML_TestListener();
- $finalresult = TestUnit::run($suite, $listener);
- $results = include_once dirname(__FILE__) . '/base_regression.php';
- $num = $results['number'];
- $failed = $results['failed'];
- $passed = $results['passed'];
- for ($i = 1; $i <= $num; $i++) {
- $bla = new Mock_PHPUnit;
- $bla->name = $i;
- $listener->startTest($bla);
- if (isset($failed[$i])) {
- $listener->addFailure($bla, $failed[$i]);
- $finalresult->addFailure($bla, $a = 'context had additional ' . serialize($failed[$i]));
- }
- $listener->endTest($bla);
- }
-
- $finalresult->removeListener($listener);
- // hack in the base regression test count
- $finalresult->_runTests += count($results['failed']) + count($results['passed']);
- $finalresult->report();
-
- ?>
-</body>
-</html>
diff --git a/pear/tests/PEAR_test_mock_pearweb.php.inc b/pear/tests/PEAR_test_mock_pearweb.php.inc
deleted file mode 100644
index f1f7edc9c1..0000000000
--- a/pear/tests/PEAR_test_mock_pearweb.php.inc
+++ /dev/null
@@ -1,234 +0,0 @@
-<?php
-require_once 'XML/RPC/Server.php';
-
-class PEAR_test_mock_pearweb {
- var $_config;
- var $_remote;
-
- function setRemote(&$r)
- {
- $this->_remote = &$r;
- }
-
- function addHtmlConfig($address, $filename)
- {
- $this->_config['html'][$address] = array(basename($filename), file_get_contents($filename));
- }
-
- function addXmlrpcConfig($method, $params, $return)
- {
- $this->_config['xmlrpc'][$method][serialize($params)] = $return;
- }
-
- function _encode($val)
- {
- $val = XML_RPC_encode($val);
- $ser = new XML_RPC_Response($val);
- return $ser->serialize();
- }
-
- function receiveHttp($address)
- {
- if (!isset($this->_config) || !is_array($this->_config)) {
- return $this->do404($address);
- }
- if (!isset($this->_config['html'][$address])) {
- return $this->do404($address);
- } else {
- return $this->do200() .
- 'content-length: ' . strlen($this->_config['html'][$address][1]) . "\n\n" .
- $this->_config['html'][$address][1];
- }
- }
-
- function receiveXmlrpc($postpayload)
- {
- $info = $this->parseRequest($postpayload);
- if (!isset($this->_config['xmlrpc'][$info['method']])) {
- return $this->doXmlrpcFault($info);
- }
- if (!isset($this->_config['xmlrpc'][serialize($info['params'])])) {
- var_dump($info['param']);
- die("Error - parameters not configured properly for $info[method]");
- }
- return $this->do200() .
- $this->_encode($this->_config['xmlrpc'][$info['method']][serialize($info['params'])]);
- }
-
- function call($method, $params)
- {
- if (!isset($this->_config['xmlrpc'][$method])) {
- include_once dirname(__FILE__) . DIRECTORY_SEPARATOR . 'php_dump.php.inc';
- $args = $params;
- switch (count($args)) {
- case 0:
- $result = $this->_remote->parentcall($method);
- break;
- case 1:
- $result = $this->_remote->parentcall($method, $args[0]);
- break;
- case 2:
- $result = $this->_remote->parentcall($method, $args[0], $args[1]);
- break;
- case 3:
- $result = $this->_remote->parentcall($method, $args[0], $args[1], $args[2]);
- break;
- case 4:
- $result = $this->_remote->parentcall($method, $args[0], $args[1], $args[2], $args[3]);
- break;
- case 5:
- $result = $this->_remote->parentcall($method, $args[0], $args[1], $args[2], $args[3], $args[4]);
- break;
- case 6:
- $result = $this->_remote->parentcall($method, $args[0], $args[1], $args[2], $args[3], $args[4], $args[5]);
- break;
- }
- $dump = new PHP_Dump($result);
- $args = new PHP_Dump($args);
- if (!isset($this->_pearweb->_config['xmlrpc'][$method][serialize($args)]))
- $GLOBALS['totalPHP'][$method . serialize($args)] = '$pearweb->addXmlrpcConfig("' .
- $method . '", ' .
- $args->toPHP() . ', ' .
- $dump->toPHP() .");";
- foreach($GLOBALS['totalPHP'] as $php) {
- echo $php . "\n";
- }
- var_dump(array_keys($this->_config['xmlrpc'][$method]), $params);
- die("Error - parameters not configured properly for $method");
- return false;
- }
- if (!isset($this->_config['xmlrpc'][$method][serialize($params)])) {
- include_once dirname(__FILE__) . DIRECTORY_SEPARATOR . 'php_dump.php.inc';
- $args = $params;
- switch (count($args)) {
- case 0:
- $result = $this->_remote->parentcall($method);
- break;
- case 1:
- $result = $this->_remote->parentcall($method, $args[0]);
- break;
- case 2:
- $result = $this->_remote->parentcall($method, $args[0], $args[1]);
- break;
- case 3:
- $result = $this->_remote->parentcall($method, $args[0], $args[1], $args[2]);
- break;
- case 4:
- $result = $this->_remote->parentcall($method, $args[0], $args[1], $args[2], $args[3]);
- break;
- case 5:
- $result = $this->_remote->parentcall($method, $args[0], $args[1], $args[2], $args[3], $args[4]);
- break;
- case 6:
- $result = $this->_remote->parentcall($method, $args[0], $args[1], $args[2], $args[3], $args[4], $args[5]);
- break;
- }
- $dump = new PHP_Dump($result);
- $args = new PHP_Dump($args);
- if (!isset($this->_pearweb->_config['xmlrpc'][$method][serialize($args)]))
- $GLOBALS['totalPHP'][$method . serialize($args)] = '$pearweb->addXmlrpcConfig("' .
- $method . '", ' .
- $args->toPHP() . ', ' .
- $dump->toPHP() .");";
- foreach($GLOBALS['totalPHP'] as $php) {
- echo $php . "\n";
- }
- var_dump(array_keys($this->_config['xmlrpc'][$method]), $params);
- die("Error - parameters not configured properly for $method");
- }
- return $this->_config['xmlrpc'][$method][serialize($params)];
- }
-
- function doXmlrpcFault($info)
- {
- $r = new XML_RPC_Response(0, 1, 'Unknown method');
- return $this->do200() . $r->serialize();
- }
-
- function do200()
- {
- return "HTTP/1.1 200 \n";
- }
-
- function do404($address)
- {
- return 'HTTP/1.1 404 ' . $address . ' Is not valid';
- }
-
- /**
- * Parse an xmlrpc request
- * @param string fake HTTP_RAW_POST_DATA
- * @return string|array serialized fault string, or array containing method name and parameters
- */
- function parseRequest($data)
- {
- // copied from XML_RPC_Server
- global $XML_RPC_xh;
- global $XML_RPC_err, $XML_RPC_str, $XML_RPC_errxml,
- $XML_RPC_defencoding, $XML_RPC_Server_dmap;
-
- $parser = xml_parser_create($XML_RPC_defencoding);
-
- $XML_RPC_xh[$parser] = array();
- $XML_RPC_xh[$parser]['st'] = "";
- $XML_RPC_xh[$parser]['cm'] = 0;
- $XML_RPC_xh[$parser]['isf'] = 0;
- $XML_RPC_xh[$parser]['params'] = array();
- $XML_RPC_xh[$parser]['method'] = "";
-
- $plist = '';
-
- // decompose incoming XML into request structure
-
- xml_parser_set_option($parser, XML_OPTION_CASE_FOLDING, true);
- xml_set_element_handler($parser, "XML_RPC_se", "XML_RPC_ee");
- xml_set_character_data_handler($parser, "XML_RPC_cd");
- xml_set_default_handler($parser, "XML_RPC_dh");
- if (!xml_parse($parser, $data, 1)) {
- // return XML error as a faultCode
- $r = new XML_RPC_Response(0,
- $XML_RPC_errxml+xml_get_error_code($parser),
- sprintf("XML error: %s at line %d",
- xml_error_string(xml_get_error_code($parser)),
- xml_get_current_line_number($parser)));
- xml_parser_free($parser);
- return $r->serialize();
- } else {
- xml_parser_free($parser);
- $params = array();
- // now add parameters in
- for ($i = 0; $i < sizeof($XML_RPC_xh[$parser]['params']); $i++) {
- // print "<!-- " . $XML_RPC_xh[$parser]['params'][$i]. "-->\n";
- $plist .= "$i - " . $XML_RPC_xh[$parser]['params'][$i] . " \n";
- eval('$val = ' . $XML_RPC_xh[$parser]['params'][$i] . ";");
- $param = $val->scalarval();
- $param = PEAR_test_mock_pearweb::_convertScalar($param);
- $params[] = $param;
- }
- return array('method' => $XML_RPC_xh[$parser]['method'], 'params' => $params);
- }
- }
-
- /**
- * Converts the mishmash returned from XML_RPC parsing into a regular PHP value,
- * handling nested arrays gracefully.
- * @param mixed
- * @return mixed
- */
- function _convertScalar($val)
- {
- if (is_a($val, 'XML_RPC_Value')) {
- $val = $val->scalarval();
- }
- if (!is_array($val)) {
- return $val;
- }
- $newval = array();
- foreach ($val as $i => $contents)
- {
- $newval[$i] = PEAR_test_mock_pearweb::_convertScalar($contents);
- }
- return $newval;
- }
-}
-?> \ No newline at end of file
diff --git a/pear/tests/common_sortPkgDeps1_package.xml b/pear/tests/common_sortPkgDeps1_package.xml
deleted file mode 100644
index a103b10c66..0000000000
--- a/pear/tests/common_sortPkgDeps1_package.xml
+++ /dev/null
@@ -1,38 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1" ?>
- <!DOCTYPE package SYSTEM "http://pear.php.net/dtd/package-1.0">
- <package version="1.0">
- <name>pkg1</name>
- <summary>required test for PEAR_Installer</summary>
- <description>
- fake package
- </description>
- <license>PHP License</license>
- <maintainers>
- <maintainer>
- <user>fakeuser</user>
- <name>Joe Shmoe</name>
- <email>nobody@example.com</email>
- <role>lead</role>
- </maintainer>
- </maintainers>
- <release>
- <version>1.1</version>
- <date>2003-09-09</date>
- <state>stable</state>
- <notes>
- required dependency test
- </notes>
- <deps>
- <dep type="pkg" version="1.0" rel="ge">pkg2</dep>
- </deps>
- <filelist>
- <dir name="/" baseinstalldir="grob" role="php">
- <file>zoorb.php</file>
- <dir name="goompness" role="php">
- <file>oggbrzitzkee.php</file>
- <file>Mopreeb.php</file>
- </dir>
- </dir>
- </filelist>
- </release>
- </package>
diff --git a/pear/tests/common_sortPkgDeps2_package.xml b/pear/tests/common_sortPkgDeps2_package.xml
deleted file mode 100644
index 3e7c03852d..0000000000
--- a/pear/tests/common_sortPkgDeps2_package.xml
+++ /dev/null
@@ -1,39 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1" ?>
- <!DOCTYPE package SYSTEM "http://pear.php.net/dtd/package-1.0">
- <package version="1.0">
- <name>pkg2</name>
- <summary>required test for PEAR_Installer</summary>
- <description>
- fake package
- </description>
- <license>PHP License</license>
- <maintainers>
- <maintainer>
- <user>fakeuser</user>
- <name>Joe Shmoe</name>
- <email>nobody@example.com</email>
- <role>lead</role>
- </maintainer>
- </maintainers>
- <release>
- <version>1.1</version>
- <date>2003-09-09</date>
- <state>stable</state>
- <notes>
- required dependency test
- </notes>
- <deps>
- <dep type="pkg" version="1.0" rel="ge">pkg3</dep>
- <dep type="php" version="1.0" rel="ge" />
- </deps>
- <filelist>
- <dir name="/" baseinstalldir="grob" role="php">
- <file>zoorb.php</file>
- <dir name="goompness" role="php">
- <file>oggbrzitzkee.php</file>
- <file>Mopreeb.php</file>
- </dir>
- </dir>
- </filelist>
- </release>
- </package>
diff --git a/pear/tests/common_sortPkgDeps3_package.xml b/pear/tests/common_sortPkgDeps3_package.xml
deleted file mode 100644
index 830a94c70a..0000000000
--- a/pear/tests/common_sortPkgDeps3_package.xml
+++ /dev/null
@@ -1,39 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1" ?>
- <!DOCTYPE package SYSTEM "http://pear.php.net/dtd/package-1.0">
- <package version="1.0">
- <name>pkg3</name>
- <summary>required test for PEAR_Installer</summary>
- <description>
- fake package
- </description>
- <license>PHP License</license>
- <maintainers>
- <maintainer>
- <user>fakeuser</user>
- <name>Joe Shmoe</name>
- <email>nobody@example.com</email>
- <role>lead</role>
- </maintainer>
- </maintainers>
- <release>
- <version>1.1</version>
- <date>2003-09-09</date>
- <state>stable</state>
- <notes>
- required dependency test
- </notes>
- <deps>
- <dep type="pkg" version="1.0" rel="ge">pkg4</dep>
- <dep type="pkg" version="1.0" rel="ge">pkg5</dep>
- </deps>
- <filelist>
- <dir name="/" baseinstalldir="grob" role="php">
- <file>zoorb.php</file>
- <dir name="goompness" role="php">
- <file>oggbrzitzkee.php</file>
- <file>Mopreeb.php</file>
- </dir>
- </dir>
- </filelist>
- </release>
- </package>
diff --git a/pear/tests/common_sortPkgDeps4_package.xml b/pear/tests/common_sortPkgDeps4_package.xml
deleted file mode 100644
index ff3394ee56..0000000000
--- a/pear/tests/common_sortPkgDeps4_package.xml
+++ /dev/null
@@ -1,38 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1" ?>
- <!DOCTYPE package SYSTEM "http://pear.php.net/dtd/package-1.0">
- <package version="1.0">
- <name>pkg4</name>
- <summary>required test for PEAR_Installer</summary>
- <description>
- fake package
- </description>
- <license>PHP License</license>
- <maintainers>
- <maintainer>
- <user>fakeuser</user>
- <name>Joe Shmoe</name>
- <email>nobody@example.com</email>
- <role>lead</role>
- </maintainer>
- </maintainers>
- <release>
- <version>1.1</version>
- <date>2003-09-09</date>
- <state>stable</state>
- <notes>
- required dependency test
- </notes>
- <deps>
- <dep type="pkg" version="1.0" rel="ge">pkg6</dep>
- </deps>
- <filelist>
- <dir name="/" baseinstalldir="grob" role="php">
- <file>zoorb.php</file>
- <dir name="goompness" role="php">
- <file>oggbrzitzkee.php</file>
- <file>Mopreeb.php</file>
- </dir>
- </dir>
- </filelist>
- </release>
- </package>
diff --git a/pear/tests/common_sortPkgDeps5_package.xml b/pear/tests/common_sortPkgDeps5_package.xml
deleted file mode 100644
index 6dea22f403..0000000000
--- a/pear/tests/common_sortPkgDeps5_package.xml
+++ /dev/null
@@ -1,38 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1" ?>
- <!DOCTYPE package SYSTEM "http://pear.php.net/dtd/package-1.0">
- <package version="1.0">
- <name>pkg5</name>
- <summary>required test for PEAR_Installer</summary>
- <description>
- fake package
- </description>
- <license>PHP License</license>
- <maintainers>
- <maintainer>
- <user>fakeuser</user>
- <name>Joe Shmoe</name>
- <email>nobody@example.com</email>
- <role>lead</role>
- </maintainer>
- </maintainers>
- <release>
- <version>1.1</version>
- <date>2003-09-09</date>
- <state>stable</state>
- <notes>
- required dependency test
- </notes>
- <deps>
- <dep type="pkg" version="1.0" rel="ge">pkg6</dep>
- </deps>
- <filelist>
- <dir name="/" baseinstalldir="grob" role="php">
- <file>zoorb.php</file>
- <dir name="goompness" role="php">
- <file>oggbrzitzkee.php</file>
- <file>Mopreeb.php</file>
- </dir>
- </dir>
- </filelist>
- </release>
- </package>
diff --git a/pear/tests/common_sortPkgDeps6_package.xml b/pear/tests/common_sortPkgDeps6_package.xml
deleted file mode 100644
index a196e7003b..0000000000
--- a/pear/tests/common_sortPkgDeps6_package.xml
+++ /dev/null
@@ -1,35 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1" ?>
- <!DOCTYPE package SYSTEM "http://pear.php.net/dtd/package-1.0">
- <package version="1.0">
- <name>pkg6</name>
- <summary>required test for PEAR_Installer</summary>
- <description>
- fake package
- </description>
- <license>PHP License</license>
- <maintainers>
- <maintainer>
- <user>fakeuser</user>
- <name>Joe Shmoe</name>
- <email>nobody@example.com</email>
- <role>lead</role>
- </maintainer>
- </maintainers>
- <release>
- <version>1.1</version>
- <date>2003-09-09</date>
- <state>stable</state>
- <notes>
- required dependency test
- </notes>
- <filelist>
- <dir name="/" baseinstalldir="grob" role="php">
- <file>zoorb.php</file>
- <dir name="goompness" role="php">
- <file>oggbrzitzkee.php</file>
- <file>Mopreeb.php</file>
- </dir>
- </dir>
- </filelist>
- </release>
- </package>
diff --git a/pear/tests/depnoreleases-1.0.tgz b/pear/tests/depnoreleases-1.0.tgz
deleted file mode 100644
index bc1c471320..0000000000
--- a/pear/tests/depnoreleases-1.0.tgz
+++ /dev/null
Binary files differ
diff --git a/pear/tests/depunstable-1.0.tgz b/pear/tests/depunstable-1.0.tgz
deleted file mode 100644
index a5e8d262c3..0000000000
--- a/pear/tests/depunstable-1.0.tgz
+++ /dev/null
Binary files differ
diff --git a/pear/tests/dirtree/multiplepackages/pkg1file.php b/pear/tests/dirtree/multiplepackages/pkg1file.php
deleted file mode 100644
index e69de29bb2..0000000000
--- a/pear/tests/dirtree/multiplepackages/pkg1file.php
+++ /dev/null
diff --git a/pear/tests/dirtree/multiplepackages/pkg2file.php b/pear/tests/dirtree/multiplepackages/pkg2file.php
deleted file mode 100644
index e69de29bb2..0000000000
--- a/pear/tests/dirtree/multiplepackages/pkg2file.php
+++ /dev/null
diff --git a/pear/tests/dirtree/nestedroot/emptydir/fakefile1.php b/pear/tests/dirtree/nestedroot/emptydir/fakefile1.php
deleted file mode 100644
index e69de29bb2..0000000000
--- a/pear/tests/dirtree/nestedroot/emptydir/fakefile1.php
+++ /dev/null
diff --git a/pear/tests/dirtree/nestedroot/emptydir/nesteddir/nestedfile.php b/pear/tests/dirtree/nestedroot/emptydir/nesteddir/nestedfile.php
deleted file mode 100644
index e69de29bb2..0000000000
--- a/pear/tests/dirtree/nestedroot/emptydir/nesteddir/nestedfile.php
+++ /dev/null
diff --git a/pear/tests/dirtree/nestedroot/rootfile.php b/pear/tests/dirtree/nestedroot/rootfile.php
deleted file mode 100644
index e69de29bb2..0000000000
--- a/pear/tests/dirtree/nestedroot/rootfile.php
+++ /dev/null
diff --git a/pear/tests/dirtree/package-fail.xml b/pear/tests/dirtree/package-fail.xml
deleted file mode 100644
index f2bf6f15d9..0000000000
--- a/pear/tests/dirtree/package-fail.xml
+++ /dev/null
@@ -1,42 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1" ?>
- <!DOCTYPE package SYSTEM "http://pear.php.net/dtd/package-1.0">
- <package version="1.0">
- <name>pkg2</name>
- <summary>required test for PEAR_Installer</summary>
- <description>
- fake package
- </description>
- <license>PHP License</license>
- <maintainers>
- <maintainer>
- <user>fakeuser</user>
- <name>Joe Shmoe</name>
- <email>nobody@example.com</email>
- <role>lead</role>
- </maintainer>
- </maintainers>
- <release>
- <version>1.0</version>
- <date>2003-12-11</date>
- <state>stable</state>
- <notes>
- second package
- </notes>
- <filelist>
- <dir name="/" baseinstalldir="test" role="php">
- <dir name="multiplepackages" role="php">
- <file>pkg2file.php</file>
- </dir>
- <dir name="nestedroot" role="php">
- <file>rootfile.php</file>
- <dir name="emptydir" role="php">
- <dir name="nesteddir" role="php">
- <file>nestedfile.php</file>
- <file>doesntexist.php</file>
- </dir>
- </dir>
- </dir>
- </dir>
- </filelist>
- </release>
- </package>
diff --git a/pear/tests/dirtree/package.xml b/pear/tests/dirtree/package.xml
deleted file mode 100644
index 8ba556e5d0..0000000000
--- a/pear/tests/dirtree/package.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1" ?>
- <!DOCTYPE package SYSTEM "http://pear.php.net/dtd/package-1.0">
- <package version="1.0">
- <name>pkg1</name>
- <summary>required test for PEAR_Installer</summary>
- <description>
- fake package
- </description>
- <license>PHP License</license>
- <maintainers>
- <maintainer>
- <user>fakeuser</user>
- <name>Joe Shmoe</name>
- <email>nobody@example.com</email>
- <role>lead</role>
- </maintainer>
- </maintainers>
- <release>
- <version>1.0</version>
- <date>2003-12-11</date>
- <state>stable</state>
- <notes>
- first package
- </notes>
- <filelist>
- <dir name="/" baseinstalldir="test" role="php">
- <dir name="multiplepackages" role="php">
- <file>pkg1file.php</file>
- </dir>
- <dir name="pkg1" role="php">
- <file>randomfile.php</file>
- </dir>
- </dir>
- </filelist>
- </release>
- </package>
diff --git a/pear/tests/dirtree/package2.xml b/pear/tests/dirtree/package2.xml
deleted file mode 100644
index c0bde59e4a..0000000000
--- a/pear/tests/dirtree/package2.xml
+++ /dev/null
@@ -1,41 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1" ?>
- <!DOCTYPE package SYSTEM "http://pear.php.net/dtd/package-1.0">
- <package version="1.0">
- <name>pkg2</name>
- <summary>required test for PEAR_Installer</summary>
- <description>
- fake package
- </description>
- <license>PHP License</license>
- <maintainers>
- <maintainer>
- <user>fakeuser</user>
- <name>Joe Shmoe</name>
- <email>nobody@example.com</email>
- <role>lead</role>
- </maintainer>
- </maintainers>
- <release>
- <version>1.0</version>
- <date>2003-12-11</date>
- <state>stable</state>
- <notes>
- second package
- </notes>
- <filelist>
- <dir name="/" baseinstalldir="test" role="php">
- <dir name="multiplepackages" role="php">
- <file>pkg2file.php</file>
- </dir>
- <dir name="nestedroot" role="php">
- <file>rootfile.php</file>
- <dir name="emptydir" role="php">
- <dir name="nesteddir" role="php">
- <file>nestedfile.php</file>
- </dir>
- </dir>
- </dir>
- </dir>
- </filelist>
- </release>
- </package>
diff --git a/pear/tests/dirtree/pkg1-1.0.tgz b/pear/tests/dirtree/pkg1-1.0.tgz
deleted file mode 100644
index ab305f74a8..0000000000
--- a/pear/tests/dirtree/pkg1-1.0.tgz
+++ /dev/null
Binary files differ
diff --git a/pear/tests/dirtree/pkg1/randomfile.php b/pear/tests/dirtree/pkg1/randomfile.php
deleted file mode 100644
index e69de29bb2..0000000000
--- a/pear/tests/dirtree/pkg1/randomfile.php
+++ /dev/null
diff --git a/pear/tests/dirtree/pkg2-1.0.tgz b/pear/tests/dirtree/pkg2-1.0.tgz
deleted file mode 100644
index 18bc9d2f48..0000000000
--- a/pear/tests/dirtree/pkg2-1.0.tgz
+++ /dev/null
Binary files differ
diff --git a/pear/tests/download_test.config.inc b/pear/tests/download_test.config.inc
deleted file mode 100644
index 71dd32133d..0000000000
--- a/pear/tests/download_test.config.inc
+++ /dev/null
@@ -1,2159 +0,0 @@
-<?php
-$pearweb->addXmlrpcConfig("package.info", unserialize("a:3:{i:0;s:4:\"pkg6\";i:1;s:8:\"releases\";i:2;b:1;}"), array(
- '2.0b1' =>
- array(
- 'id' =>
- "9",
- 'doneby' =>
- "cellog",
- 'license' =>
- "",
- 'summary' =>
- "",
- 'description' =>
- "",
- 'releasedate' =>
- "2003-12-03 18:34:03",
- 'releasenotes' =>
- "required dependency test",
- 'state' =>
- "beta",
- ),
- '1.1' =>
- array(
- 'id' =>
- "7",
- 'doneby' =>
- "cellog",
- 'license' =>
- "",
- 'summary' =>
- "",
- 'description' =>
- "",
- 'releasedate' =>
- "2003-12-03 17:03:37",
- 'releasenotes' =>
- "required dependency test",
- 'state' =>
- "stable",
- ),
- ));
-$pearweb->addXmlrpcConfig("package.info", unserialize("a:3:{i:0;s:4:\"pkg2\";i:1;s:8:\"releases\";i:2;b:1;}"), array(
- '1.1' =>
- array(
- 'id' =>
- "3",
- 'doneby' =>
- "cellog",
- 'license' =>
- "",
- 'summary' =>
- "",
- 'description' =>
- "",
- 'releasedate' =>
- "2003-12-03 17:02:56",
- 'releasenotes' =>
- "required dependency test",
- 'state' =>
- "stable",
- ),
- ));
-$pearweb->addXmlrpcConfig("package.info", unserialize("a:3:{i:0;s:4:\"pkg3\";i:1;s:8:\"releases\";i:2;b:1;}"), array(
- '1.4' =>
- array(
- 'id' =>
- "11",
- 'doneby' =>
- "cellog",
- 'license' =>
- "",
- 'summary' =>
- "",
- 'description' =>
- "",
- 'releasedate' =>
- "2003-12-03 18:51:31",
- 'releasenotes' =>
- "required dependency test",
- 'state' =>
- "alpha",
- ),
- '1.1' =>
- array(
- 'id' =>
- "4",
- 'doneby' =>
- "cellog",
- 'license' =>
- "",
- 'summary' =>
- "",
- 'description' =>
- "",
- 'releasedate' =>
- "2003-12-03 17:03:06",
- 'releasenotes' =>
- "required dependency test",
- 'state' =>
- "stable",
- ),
- ));
-$pearweb->addXmlrpcConfig("package.info", unserialize("a:3:{i:0;s:4:\"pkg4\";i:1;s:8:\"releases\";i:2;b:1;}"), array(
- '1.1' =>
- array(
- 'id' =>
- "5",
- 'doneby' =>
- "cellog",
- 'license' =>
- "",
- 'summary' =>
- "",
- 'description' =>
- "",
- 'releasedate' =>
- "2003-12-03 17:03:17",
- 'releasenotes' =>
- "required dependency test",
- 'state' =>
- "stable",
- ),
- ));
-$pearweb->addXmlrpcConfig("package.info", unserialize("a:3:{i:0;s:4:\"pkg5\";i:1;s:8:\"releases\";i:2;b:1;}"), array(
- '1.1' =>
- array(
- 'id' =>
- "6",
- 'doneby' =>
- "cellog",
- 'license' =>
- "",
- 'summary' =>
- "",
- 'description' =>
- "",
- 'releasedate' =>
- "2003-12-03 17:03:25",
- 'releasenotes' =>
- "required dependency test",
- 'state' =>
- "stable",
- ),
- ));
-$pearweb->addXmlrpcConfig("package.info", unserialize("a:3:{i:0;s:4:\"pkg1\";i:1;s:8:\"releases\";i:2;b:1;}"), array(
- '2.0b1' =>
- array(
- 'id' =>
- "8",
- 'doneby' =>
- "cellog",
- 'license' =>
- "",
- 'summary' =>
- "",
- 'description' =>
- "",
- 'releasedate' =>
- "2003-12-03 18:29:15",
- 'releasenotes' =>
- "required dependency test",
- 'state' =>
- "beta",
- ),
- '1.1' =>
- array(
- 'id' =>
- "2",
- 'doneby' =>
- "cellog",
- 'license' =>
- "",
- 'summary' =>
- "",
- 'description' =>
- "",
- 'releasedate' =>
- "2003-12-03 17:02:43",
- 'releasenotes' =>
- "required dependency test",
- 'state' =>
- "stable",
- ),
- ));
-$pearweb->addXmlrpcConfig("package.info", unserialize("a:3:{i:0;s:12:\"pkg4AndAHalf\";i:1;s:8:\"releases\";i:2;b:1;}"), array(
- '1.3' =>
- array(
- 'id' =>
- "10",
- 'doneby' =>
- "cellog",
- 'license' =>
- "",
- 'summary' =>
- "",
- 'description' =>
- "",
- 'releasedate' =>
- "2003-12-03 18:50:05",
- 'releasenotes' =>
- "required dependency test",
- 'state' =>
- "stable",
- ),
- ));
-$pearweb->addXmlrpcConfig("package.info", array(
- 0 =>
- "noreleases",
- 1 =>
- "releases",
- 2 =>
- true,
- ), array(
- ));
-$pearweb->addXmlrpcConfig("package.info", array(
- 0 =>
- "pkg1",
- 1 =>
- "releases",
- 2 =>
- true,
- ), array(
- '2.0b1' =>
- array(
- 'id' =>
- "8",
- 'doneby' =>
- "cellog",
- 'license' =>
- "",
- 'summary' =>
- "",
- 'description' =>
- "",
- 'releasedate' =>
- "2003-12-03 18:29:15",
- 'releasenotes' =>
- "required dependency test",
- 'state' =>
- "beta",
- ),
- '1.1' =>
- array(
- 'id' =>
- "2",
- 'doneby' =>
- "cellog",
- 'license' =>
- "",
- 'summary' =>
- "",
- 'description' =>
- "",
- 'releasedate' =>
- "2003-12-03 17:02:43",
- 'releasenotes' =>
- "required dependency test",
- 'state' =>
- "stable",
- ),
- ));
-$pearweb->addXmlrpcConfig("package.info", array(
- 0 =>
- "stabilitytoolow",
- 1 =>
- "releases",
- 2 =>
- true,
- ), array(
- '3.0dev' =>
- array(
- 'id' =>
- "23",
- 'doneby' =>
- "cellog",
- 'license' =>
- "",
- 'summary' =>
- "",
- 'description' =>
- "",
- 'releasedate' =>
- "2003-12-06 00:27:38",
- 'releasenotes' =>
- "required dependency test",
- 'state' =>
- "devel",
- ),
- '2.0a1' =>
- array(
- 'id' =>
- "22",
- 'doneby' =>
- "cellog",
- 'license' =>
- "",
- 'summary' =>
- "",
- 'description' =>
- "",
- 'releasedate' =>
- "2003-12-06 00:27:19",
- 'releasenotes' =>
- "required dependency test",
- 'state' =>
- "alpha",
- ),
- '1.0b1' =>
- array(
- 'id' =>
- "21",
- 'doneby' =>
- "cellog",
- 'license' =>
- "",
- 'summary' =>
- "",
- 'description' =>
- "",
- 'releasedate' =>
- "2003-12-06 00:26:42",
- 'releasenotes' =>
- "required dependency test",
- 'state' =>
- "beta",
- ),
- '0.6beta' =>
- array(
- 'id' =>
- "20",
- 'doneby' =>
- "cellog",
- 'license' =>
- "",
- 'summary' =>
- "",
- 'description' =>
- "",
- 'releasedate' =>
- "2003-12-06 00:26:36",
- 'releasenotes' =>
- "required dependency test",
- 'state' =>
- "beta",
- ),
- '0.5' =>
- array(
- 'id' =>
- "19",
- 'doneby' =>
- "cellog",
- 'license' =>
- "",
- 'summary' =>
- "",
- 'description' =>
- "",
- 'releasedate' =>
- "2003-12-06 00:26:28",
- 'releasenotes' =>
- "required dependency test",
- 'state' =>
- "alpha",
- ),
- '0.3' =>
- array(
- 'id' =>
- "18",
- 'doneby' =>
- "cellog",
- 'license' =>
- "",
- 'summary' =>
- "",
- 'description' =>
- "",
- 'releasedate' =>
- "2003-12-06 00:26:21",
- 'releasenotes' =>
- "required dependency test",
- 'state' =>
- "devel",
- ),
- ));
-$pearweb->addXmlrpcConfig("package.info", array(
- 0 =>
- "pkg6",
- 1 =>
- "releases",
- 2 =>
- true,
- ), array(
- '2.0b1' =>
- array(
- 'id' =>
- "9",
- 'doneby' =>
- "cellog",
- 'license' =>
- "",
- 'summary' =>
- "",
- 'description' =>
- "",
- 'releasedate' =>
- "2003-12-03 18:34:03",
- 'releasenotes' =>
- "required dependency test",
- 'state' =>
- "beta",
- ),
- '1.1' =>
- array(
- 'id' =>
- "7",
- 'doneby' =>
- "cellog",
- 'license' =>
- "",
- 'summary' =>
- "",
- 'description' =>
- "",
- 'releasedate' =>
- "2003-12-03 17:03:37",
- 'releasenotes' =>
- "required dependency test",
- 'state' =>
- "stable",
- ),
- ));
-$pearweb->addXmlrpcConfig("package.info", array(
- 0 =>
- "depnoreleases",
- 1 =>
- "releases",
- 2 =>
- true,
- ), array(
- '1.0' =>
- array(
- 'id' =>
- "24",
- 'doneby' =>
- "cellog",
- 'license' =>
- "",
- 'summary' =>
- "",
- 'description' =>
- "",
- 'releasedate' =>
- "2003-12-06 17:10:42",
- 'releasenotes' =>
- "dependency has no releases test",
- 'state' =>
- "beta",
- ),
- ));
-$pearweb->addXmlrpcConfig("package.info", array(
- 0 =>
- "depunstable",
- 1 =>
- "releases",
- 2 =>
- true,
- ), array(
- '1.0' =>
- array(
- 'id' =>
- "26",
- 'doneby' =>
- "cellog",
- 'license' =>
- "",
- 'summary' =>
- "",
- 'description' =>
- "",
- 'releasedate' =>
- "2003-12-06 17:32:38",
- 'releasenotes' =>
- "dependency stability is too low",
- 'state' =>
- "stable",
- ),
- ));
-$pearweb->addXmlrpcConfig("package.info", array(
- 0 =>
- "stabilitytoolow",
- ), array(
- 'packageid' =>
- "9",
- 'name' =>
- "stabilitytoolow",
- 'type' =>
- "pear",
- 'categoryid' =>
- "1",
- 'category' =>
- "Test",
- 'stable' =>
- "3.0dev",
- 'license' =>
- "PHP License",
- 'summary' =>
- "required test for PEAR_Installer",
- 'homepage' =>
- "",
- 'description' =>
- "fake package",
- 'cvs_link' =>
- "",
- 'doc_link' =>
- "",
- 'releases' =>
- array(
- '3.0dev' =>
- array(
- 'id' =>
- "23",
- 'doneby' =>
- "cellog",
- 'license' =>
- "",
- 'summary' =>
- "",
- 'description' =>
- "",
- 'releasedate' =>
- "2003-12-06 00:27:38",
- 'releasenotes' =>
- "required dependency test",
- 'state' =>
- "devel",
- 'deps' =>
- array(
- 0 =>
- array(
- 'type' =>
- "pkg",
- 'relation' =>
- "ge",
- 'version' =>
- "1.0",
- 'name' =>
- "pkg6",
- 'optional' =>
- "0",
- ),
- ),
- ),
- '2.0a1' =>
- array(
- 'id' =>
- "22",
- 'doneby' =>
- "cellog",
- 'license' =>
- "",
- 'summary' =>
- "",
- 'description' =>
- "",
- 'releasedate' =>
- "2003-12-06 00:27:19",
- 'releasenotes' =>
- "required dependency test",
- 'state' =>
- "alpha",
- 'deps' =>
- array(
- 0 =>
- array(
- 'type' =>
- "pkg",
- 'relation' =>
- "ge",
- 'version' =>
- "1.0",
- 'name' =>
- "pkg6",
- 'optional' =>
- "0",
- ),
- ),
- ),
- '1.0b1' =>
- array(
- 'id' =>
- "21",
- 'doneby' =>
- "cellog",
- 'license' =>
- "",
- 'summary' =>
- "",
- 'description' =>
- "",
- 'releasedate' =>
- "2003-12-06 00:26:42",
- 'releasenotes' =>
- "required dependency test",
- 'state' =>
- "beta",
- 'deps' =>
- array(
- 0 =>
- array(
- 'type' =>
- "pkg",
- 'relation' =>
- "ge",
- 'version' =>
- "1.0",
- 'name' =>
- "pkg6",
- 'optional' =>
- "0",
- ),
- ),
- ),
- '0.6beta' =>
- array(
- 'id' =>
- "20",
- 'doneby' =>
- "cellog",
- 'license' =>
- "",
- 'summary' =>
- "",
- 'description' =>
- "",
- 'releasedate' =>
- "2003-12-06 00:26:36",
- 'releasenotes' =>
- "required dependency test",
- 'state' =>
- "beta",
- 'deps' =>
- array(
- 0 =>
- array(
- 'type' =>
- "pkg",
- 'relation' =>
- "ge",
- 'version' =>
- "1.0",
- 'name' =>
- "pkg6",
- 'optional' =>
- "0",
- ),
- ),
- ),
- '0.5' =>
- array(
- 'id' =>
- "19",
- 'doneby' =>
- "cellog",
- 'license' =>
- "",
- 'summary' =>
- "",
- 'description' =>
- "",
- 'releasedate' =>
- "2003-12-06 00:26:28",
- 'releasenotes' =>
- "required dependency test",
- 'state' =>
- "alpha",
- 'deps' =>
- array(
- 0 =>
- array(
- 'type' =>
- "pkg",
- 'relation' =>
- "ge",
- 'version' =>
- "1.0",
- 'name' =>
- "pkg6",
- 'optional' =>
- "0",
- ),
- ),
- ),
- '0.3' =>
- array(
- 'id' =>
- "18",
- 'doneby' =>
- "cellog",
- 'license' =>
- "",
- 'summary' =>
- "",
- 'description' =>
- "",
- 'releasedate' =>
- "2003-12-06 00:26:21",
- 'releasenotes' =>
- "required dependency test",
- 'state' =>
- "devel",
- 'deps' =>
- array(
- 0 =>
- array(
- 'type' =>
- "pkg",
- 'relation' =>
- "ge",
- 'version' =>
- "1.0",
- 'name' =>
- "pkg6",
- 'optional' =>
- "0",
- ),
- ),
- ),
- ),
- 'notes' =>
- array(
- ),
- ));
-$pearweb->addXmlrpcConfig("package.info", array(
- 0 =>
- "depnoreleases",
- ), array(
- 'packageid' =>
- "10",
- 'name' =>
- "depnoreleases",
- 'type' =>
- "pear",
- 'categoryid' =>
- "1",
- 'category' =>
- "Test",
- 'stable' =>
- "1.0",
- 'license' =>
- "PHP License",
- 'summary' =>
- "required test for PEAR_Installer",
- 'homepage' =>
- "",
- 'description' =>
- "fake package",
- 'cvs_link' =>
- "",
- 'doc_link' =>
- "",
- 'releases' =>
- array(
- '1.0' =>
- array(
- 'id' =>
- "24",
- 'doneby' =>
- "cellog",
- 'license' =>
- "",
- 'summary' =>
- "",
- 'description' =>
- "",
- 'releasedate' =>
- "2003-12-06 17:10:42",
- 'releasenotes' =>
- "dependency has no releases test",
- 'state' =>
- "beta",
- 'deps' =>
- array(
- 0 =>
- array(
- 'type' =>
- "pkg",
- 'relation' =>
- "ge",
- 'version' =>
- "1.0",
- 'name' =>
- "noreleases",
- 'optional' =>
- "0",
- ),
- ),
- ),
- ),
- 'notes' =>
- array(
- ),
- ));
-$pearweb->addXmlrpcConfig("package.info", array(
- 0 =>
- "depunstable",
- ), array(
- 'packageid' =>
- "11",
- 'name' =>
- "depunstable",
- 'type' =>
- "pear",
- 'categoryid' =>
- "1",
- 'category' =>
- "Test",
- 'stable' =>
- "1.0",
- 'license' =>
- "PHP License",
- 'summary' =>
- "required test for PEAR_Installer",
- 'homepage' =>
- "",
- 'description' =>
- "fake package",
- 'cvs_link' =>
- "",
- 'doc_link' =>
- "",
- 'releases' =>
- array(
- '1.0' =>
- array(
- 'id' =>
- "26",
- 'doneby' =>
- "cellog",
- 'license' =>
- "",
- 'summary' =>
- "",
- 'description' =>
- "",
- 'releasedate' =>
- "2003-12-06 17:32:38",
- 'releasenotes' =>
- "dependency stability is too low",
- 'state' =>
- "stable",
- 'deps' =>
- array(
- 0 =>
- array(
- 'type' =>
- "pkg",
- 'relation' =>
- "ge",
- 'version' =>
- "1.0b1",
- 'name' =>
- "stabilitytoolow",
- 'optional' =>
- "0",
- ),
- ),
- ),
- ),
- 'notes' =>
- array(
- ),
- ));
-$pearweb->addXmlrpcConfig("package.getDownloadURL", array(
- 0 =>
- "pear",
- 1 =>
- "noreleases",
- 2 =>
- array(
- 0 =>
- "stable",
- ),
- ), false);
-$pearweb->addXmlrpcConfig("package.getDownloadURL", array(
- 0 =>
- "pear",
- 1 =>
- "pkg1",
- 2 =>
- "1976.9.2",
- ), array(
- 0 =>
- "2.0b1",
- 1 =>
- array(
- 'id' =>
- "8",
- 'doneby' =>
- "cellog",
- 'license' =>
- "",
- 'summary' =>
- "",
- 'description' =>
- "",
- 'releasedate' =>
- "2003-12-03 18:29:15",
- 'releasenotes' =>
- "required dependency test",
- 'state' =>
- "beta",
- ),
- ));
-$pearweb->addXmlrpcConfig("package.getDownloadURL", array(
- 0 =>
- "pear",
- 1 =>
- "pkg1",
- 2 =>
- "snapshot",
- ), array(
- 0 =>
- "2.0b1",
- 1 =>
- array(
- 'id' =>
- "8",
- 'doneby' =>
- "cellog",
- 'license' =>
- "",
- 'summary' =>
- "",
- 'description' =>
- "",
- 'releasedate' =>
- "2003-12-03 18:29:15",
- 'releasenotes' =>
- "required dependency test",
- 'state' =>
- "beta",
- ),
- ));
-$pearweb->addXmlrpcConfig("package.getDownloadURL", array(
- 0 =>
- "pear",
- 1 =>
- "pkg1",
- 2 =>
- "burgerking",
- ), array(
- 0 =>
- "2.0b1",
- 1 =>
- array(
- 'id' =>
- "8",
- 'doneby' =>
- "cellog",
- 'license' =>
- "",
- 'summary' =>
- "",
- 'description' =>
- "",
- 'releasedate' =>
- "2003-12-03 18:29:15",
- 'releasenotes' =>
- "required dependency test",
- 'state' =>
- "beta",
- ),
- ));
-$pearweb->addXmlrpcConfig("package.getDownloadURL", array(
- 0 =>
- "pear",
- 1 =>
- "stabilitytoolow",
- 2 =>
- array(
- 0 =>
- "stable",
- ),
- ), array(
- 0 =>
- "3.0dev",
- 1 =>
- array(
- 'id' =>
- "23",
- 'doneby' =>
- "cellog",
- 'license' =>
- "",
- 'summary' =>
- "",
- 'description' =>
- "",
- 'releasedate' =>
- "2003-12-06 00:27:38",
- 'releasenotes' =>
- "required dependency test",
- 'state' =>
- "devel",
- ),
- ));
-$pearweb->addXmlrpcConfig("package.getDownloadURL", array(
- 0 =>
- "pear",
- 1 =>
- "stabilitytoolow",
- 2 =>
- "3.0dev",
- ), array(
- 0 =>
- "3.0dev",
- 1 =>
- array(
- 'id' =>
- "23",
- 'doneby' =>
- "cellog",
- 'license' =>
- "",
- 'summary' =>
- "",
- 'description' =>
- "",
- 'releasedate' =>
- "2003-12-06 00:27:38",
- 'releasenotes' =>
- "required dependency test",
- 'state' =>
- "devel",
- ),
- 2 =>
- "http://pear.Chiara/get/stabilitytoolow-3.0dev",
- ));
-$pearweb->addXmlrpcConfig("package.getDownloadURL", array(
- 0 =>
- "pear",
- 1 =>
- "stabilitytoolow",
- 2 =>
- array(
- 0 =>
- "beta",
- 1 =>
- "stable",
- ),
- ), array(
- 0 =>
- "1.0b1",
- 1 =>
- array(
- 'id' =>
- "21",
- 'doneby' =>
- "cellog",
- 'license' =>
- "",
- 'summary' =>
- "",
- 'description' =>
- "",
- 'releasedate' =>
- "2003-12-06 00:26:42",
- 'releasenotes' =>
- "required dependency test",
- 'state' =>
- "beta",
- ),
- 2 =>
- "http://pear.Chiara/get/stabilitytoolow-1.0b1",
- ));
-$pearweb->addXmlrpcConfig("package.getDownloadURL", array(
- 0 =>
- "pear",
- 1 =>
- "stabilitytoolow",
- 2 =>
- array(
- 0 =>
- "alpha",
- 1 =>
- "beta",
- 2 =>
- "stable",
- ),
- ), array(
- 0 =>
- "2.0a1",
- 1 =>
- array(
- 'id' =>
- "22",
- 'doneby' =>
- "cellog",
- 'license' =>
- "",
- 'summary' =>
- "",
- 'description' =>
- "",
- 'releasedate' =>
- "2003-12-06 00:27:19",
- 'releasenotes' =>
- "required dependency test",
- 'state' =>
- "alpha",
- ),
- 2 =>
- "http://pear.Chiara/get/stabilitytoolow-2.0a1",
- ));
-$pearweb->addXmlrpcConfig("package.getDownloadURL", array(
- 0 =>
- "pear",
- 1 =>
- "stabilitytoolow",
- 2 =>
- array(
- 0 =>
- "devel",
- 1 =>
- "alpha",
- 2 =>
- "beta",
- 3 =>
- "stable",
- ),
- ), array(
- 0 =>
- "3.0dev",
- 1 =>
- array(
- 'id' =>
- "23",
- 'doneby' =>
- "cellog",
- 'license' =>
- "",
- 'summary' =>
- "",
- 'description' =>
- "",
- 'releasedate' =>
- "2003-12-06 00:27:38",
- 'releasenotes' =>
- "required dependency test",
- 'state' =>
- "devel",
- ),
- 2 =>
- "http://pear.Chiara/get/stabilitytoolow-3.0dev",
- ));
-$pearweb->addXmlrpcConfig("package.getDownloadURL", array(
- 0 =>
- "pear",
- 1 =>
- "pkg6",
- 2 =>
- array(
- 0 =>
- "devel",
- 1 =>
- "alpha",
- 2 =>
- "beta",
- 3 =>
- "stable",
- ),
- ), array(
- 0 =>
- "2.0b1",
- 1 =>
- array(
- 'id' =>
- "9",
- 'doneby' =>
- "cellog",
- 'license' =>
- "",
- 'summary' =>
- "",
- 'description' =>
- "",
- 'releasedate' =>
- "2003-12-03 18:34:03",
- 'releasenotes' =>
- "required dependency test",
- 'state' =>
- "beta",
- ),
- 2 =>
- "http://pear.Chiara/get/pkg6-2.0b1",
- ));
-$pearweb->addXmlrpcConfig("package.getDownloadURL", array(
- 0 =>
- "pear",
- 1 =>
- "pkg6",
- 2 =>
- "1.1",
- ), array(
- 0 =>
- "1.1",
- 1 =>
- array(
- 'id' =>
- "7",
- 'doneby' =>
- "cellog",
- 'license' =>
- "",
- 'summary' =>
- "",
- 'description' =>
- "",
- 'releasedate' =>
- "2003-12-03 17:03:37",
- 'releasenotes' =>
- "required dependency test",
- 'state' =>
- "stable",
- ),
- 2 =>
- "http://pear.Chiara/get/pkg6-1.1",
- ));
-$pearweb->addXmlrpcConfig("package.getDownloadURL", array(
- 0 =>
- "pear",
- 1 =>
- "depnoreleases",
- 2 =>
- array(
- 0 =>
- "devel",
- 1 =>
- "alpha",
- 2 =>
- "beta",
- 3 =>
- "stable",
- ),
- ), array(
- 0 =>
- "1.0",
- 1 =>
- array(
- 'id' =>
- "24",
- 'doneby' =>
- "cellog",
- 'license' =>
- "",
- 'summary' =>
- "",
- 'description' =>
- "",
- 'releasedate' =>
- "2003-12-06 17:10:42",
- 'releasenotes' =>
- "dependency has no releases test",
- 'state' =>
- "beta",
- ),
- 2 =>
- "http://pear.Chiara/get/depnoreleases-1.0",
- ));
-$pearweb->addXmlrpcConfig("package.getDownloadURL", array(
- 0 =>
- "pear",
- 1 =>
- "depunstable",
- 2 =>
- array(
- 0 =>
- "stable",
- ),
- ), array(
- 0 =>
- "1.0",
- 1 =>
- array(
- 'id' =>
- "26",
- 'doneby' =>
- "cellog",
- 'license' =>
- "",
- 'summary' =>
- "",
- 'description' =>
- "",
- 'releasedate' =>
- "2003-12-06 17:32:38",
- 'releasenotes' =>
- "dependency stability is too low",
- 'state' =>
- "stable",
- ),
- 2 =>
- "http://pear.Chiara/get/depunstable-1.0",
- ));
-$pearweb->addXmlrpcConfig("package.getDownloadURL", array(
- 0 =>
- "pear",
- 1 =>
- "pkg6",
- 2 =>
- array(
- 0 =>
- "stable",
- ),
- ), array(
- 0 =>
- "1.1",
- 1 =>
- array(
- 'id' =>
- "7",
- 'doneby' =>
- "cellog",
- 'license' =>
- "",
- 'summary' =>
- "",
- 'description' =>
- "",
- 'releasedate' =>
- "2003-12-03 17:03:37",
- 'releasenotes' =>
- "required dependency test",
- 'state' =>
- "stable",
- ),
- 2 =>
- "http://pear.Chiara/get/pkg6-1.1",
- ));
-$pearweb->addXmlrpcConfig("package.getDownloadURL", array(
- 0 =>
- "pear",
- 1 =>
- "pkg6",
- 2 =>
- "stable",
- ), array(
- 0 =>
- "1.1",
- 1 =>
- array(
- 'id' =>
- "7",
- 'doneby' =>
- "cellog",
- 'license' =>
- "",
- 'summary' =>
- "",
- 'description' =>
- "",
- 'releasedate' =>
- "2003-12-03 17:03:37",
- 'releasenotes' =>
- "required dependency test",
- 'state' =>
- "stable",
- ),
- 2 =>
- "http://pear.Chiara/get/pkg6-1.1",
- ));
-$pearweb->addXmlrpcConfig("package.getDownloadURL", array(
- 0 =>
- "pear",
- 1 =>
- "pkg6",
- 2 =>
- "beta",
- ), array(
- 0 =>
- "2.0b1",
- 1 =>
- array(
- 'id' =>
- "9",
- 'doneby' =>
- "cellog",
- 'license' =>
- "",
- 'summary' =>
- "",
- 'description' =>
- "",
- 'releasedate' =>
- "2003-12-03 18:34:03",
- 'releasenotes' =>
- "required dependency test",
- 'state' =>
- "beta",
- ),
- 2 =>
- "http://pear.Chiara/get/pkg6-2.0b1",
- ));
-$pearweb->addXmlrpcConfig("package.getDownloadURL", array(
- 0 =>
- "pear",
- 1 =>
- "pkg6",
- 2 =>
- array(
- 0 =>
- "beta",
- 1 =>
- "stable",
- ),
- ), array(
- 0 =>
- "2.0b1",
- 1 =>
- array(
- 'id' =>
- "9",
- 'doneby' =>
- "cellog",
- 'license' =>
- "",
- 'summary' =>
- "",
- 'description' =>
- "",
- 'releasedate' =>
- "2003-12-03 18:34:03",
- 'releasenotes' =>
- "required dependency test",
- 'state' =>
- "beta",
- ),
- 2 =>
- "http://pear.Chiara/get/pkg6-2.0b1",
- ));
-$pearweb->addXmlrpcConfig("package.getDownloadURL", array(
- 0 =>
- "pear",
- 1 =>
- "pkg2",
- 2 =>
- array(
- 0 =>
- "stable",
- ),
- ), array(
- 0 =>
- "1.1",
- 1 =>
- array(
- 'id' =>
- "3",
- 'doneby' =>
- "cellog",
- 'license' =>
- "",
- 'summary' =>
- "",
- 'description' =>
- "",
- 'releasedate' =>
- "2003-12-03 17:02:56",
- 'releasenotes' =>
- "required dependency test",
- 'state' =>
- "stable",
- ),
- 2 =>
- "http://pear.Chiara/get/pkg2-1.1",
- ));
-$pearweb->addXmlrpcConfig("package.getDownloadURL", array(
- 0 =>
- "pear",
- 1 =>
- "pkg3",
- 2 =>
- array(
- 0 =>
- "stable",
- ),
- ), array(
- 0 =>
- "1.1",
- 1 =>
- array(
- 'id' =>
- "4",
- 'doneby' =>
- "cellog",
- 'license' =>
- "",
- 'summary' =>
- "",
- 'description' =>
- "",
- 'releasedate' =>
- "2003-12-03 17:03:06",
- 'releasenotes' =>
- "required dependency test",
- 'state' =>
- "stable",
- ),
- 2 =>
- "http://pear.Chiara/get/pkg3-1.1",
- ));
-$pearweb->addXmlrpcConfig("package.getDownloadURL", array(
- 0 =>
- "pear",
- 1 =>
- "pkg4",
- 2 =>
- array(
- 0 =>
- "stable",
- ),
- ), array(
- 0 =>
- "1.1",
- 1 =>
- array(
- 'id' =>
- "5",
- 'doneby' =>
- "cellog",
- 'license' =>
- "",
- 'summary' =>
- "",
- 'description' =>
- "",
- 'releasedate' =>
- "2003-12-03 17:03:17",
- 'releasenotes' =>
- "required dependency test",
- 'state' =>
- "stable",
- ),
- 2 =>
- "http://pear.Chiara/get/pkg4-1.1",
- ));
-$pearweb->addXmlrpcConfig("package.getDownloadURL", array(
- 0 =>
- "pear",
- 1 =>
- "pkg5",
- 2 =>
- array(
- 0 =>
- "stable",
- ),
- ), array(
- 0 =>
- "1.1",
- 1 =>
- array(
- 'id' =>
- "6",
- 'doneby' =>
- "cellog",
- 'license' =>
- "",
- 'summary' =>
- "",
- 'description' =>
- "",
- 'releasedate' =>
- "2003-12-03 17:03:25",
- 'releasenotes' =>
- "required dependency test",
- 'state' =>
- "stable",
- ),
- 2 =>
- "http://pear.Chiara/get/pkg5-1.1",
- ));
-$pearweb->addXmlrpcConfig("package.getDownloadURL", array(
- 0 =>
- "pear",
- 1 =>
- "pkg1",
- 2 =>
- array(
- 0 =>
- "stable",
- ),
- ), array(
- 0 =>
- "1.1",
- 1 =>
- array(
- 'id' =>
- "2",
- 'doneby' =>
- "cellog",
- 'license' =>
- "",
- 'summary' =>
- "",
- 'description' =>
- "",
- 'releasedate' =>
- "2003-12-03 17:02:43",
- 'releasenotes' =>
- "required dependency test",
- 'state' =>
- "stable",
- ),
- 2 =>
- "http://pear.Chiara/get/pkg1-1.1",
- ));
-$pearweb->addXmlrpcConfig("package.getDownloadURL", array(
- 0 =>
- "pear",
- 1 =>
- "pkg1",
- 2 =>
- array(
- 0 =>
- "beta",
- 1 =>
- "stable",
- ),
- ), array(
- 0 =>
- "2.0b1",
- 1 =>
- array(
- 'id' =>
- "8",
- 'doneby' =>
- "cellog",
- 'license' =>
- "",
- 'summary' =>
- "",
- 'description' =>
- "",
- 'releasedate' =>
- "2003-12-03 18:29:15",
- 'releasenotes' =>
- "required dependency test",
- 'state' =>
- "beta",
- ),
- 2 =>
- "http://pear.Chiara/get/pkg1-2.0b1",
- ));
-$pearweb->addXmlrpcConfig("package.getDownloadURL", array(
- 0 =>
- "pear",
- 1 =>
- "pkg2",
- 2 =>
- array(
- 0 =>
- "beta",
- 1 =>
- "stable",
- ),
- ), array(
- 0 =>
- "1.1",
- 1 =>
- array(
- 'id' =>
- "3",
- 'doneby' =>
- "cellog",
- 'license' =>
- "",
- 'summary' =>
- "",
- 'description' =>
- "",
- 'releasedate' =>
- "2003-12-03 17:02:56",
- 'releasenotes' =>
- "required dependency test",
- 'state' =>
- "stable",
- ),
- 2 =>
- "http://pear.Chiara/get/pkg2-1.1",
- ));
-$pearweb->addXmlrpcConfig("package.getDownloadURL", array(
- 0 =>
- "pear",
- 1 =>
- "pkg3",
- 2 =>
- array(
- 0 =>
- "beta",
- 1 =>
- "stable",
- ),
- ), array(
- 0 =>
- "1.1",
- 1 =>
- array(
- 'id' =>
- "4",
- 'doneby' =>
- "cellog",
- 'license' =>
- "",
- 'summary' =>
- "",
- 'description' =>
- "",
- 'releasedate' =>
- "2003-12-03 17:03:06",
- 'releasenotes' =>
- "required dependency test",
- 'state' =>
- "stable",
- ),
- 2 =>
- "http://pear.Chiara/get/pkg3-1.1",
- ));
-$pearweb->addXmlrpcConfig("package.getDownloadURL", array(
- 0 =>
- "pear",
- 1 =>
- "pkg4",
- 2 =>
- array(
- 0 =>
- "beta",
- 1 =>
- "stable",
- ),
- ), array(
- 0 =>
- "1.1",
- 1 =>
- array(
- 'id' =>
- "5",
- 'doneby' =>
- "cellog",
- 'license' =>
- "",
- 'summary' =>
- "",
- 'description' =>
- "",
- 'releasedate' =>
- "2003-12-03 17:03:17",
- 'releasenotes' =>
- "required dependency test",
- 'state' =>
- "stable",
- ),
- 2 =>
- "http://pear.Chiara/get/pkg4-1.1",
- ));
-$pearweb->addXmlrpcConfig("package.getDownloadURL", array(
- 0 =>
- "pear",
- 1 =>
- "pkg5",
- 2 =>
- array(
- 0 =>
- "beta",
- 1 =>
- "stable",
- ),
- ), array(
- 0 =>
- "1.1",
- 1 =>
- array(
- 'id' =>
- "6",
- 'doneby' =>
- "cellog",
- 'license' =>
- "",
- 'summary' =>
- "",
- 'description' =>
- "",
- 'releasedate' =>
- "2003-12-03 17:03:25",
- 'releasenotes' =>
- "required dependency test",
- 'state' =>
- "stable",
- ),
- 2 =>
- "http://pear.Chiara/get/pkg5-1.1",
- ));
-$pearweb->addXmlrpcConfig("package.getDownloadURL", array(
- 0 =>
- "pear",
- 1 =>
- "pkg1",
- 2 =>
- array(
- 0 =>
- "alpha",
- 1 =>
- "beta",
- 2 =>
- "stable",
- ),
- ), array(
- 0 =>
- "2.0b1",
- 1 =>
- array(
- 'id' =>
- "8",
- 'doneby' =>
- "cellog",
- 'license' =>
- "",
- 'summary' =>
- "",
- 'description' =>
- "",
- 'releasedate' =>
- "2003-12-03 18:29:15",
- 'releasenotes' =>
- "required dependency test",
- 'state' =>
- "beta",
- ),
- 2 =>
- "http://pear.Chiara/get/pkg1-2.0b1",
- ));
-$pearweb->addXmlrpcConfig("package.getDownloadURL", array(
- 0 =>
- "pear",
- 1 =>
- "pkg2",
- 2 =>
- array(
- 0 =>
- "alpha",
- 1 =>
- "beta",
- 2 =>
- "stable",
- ),
- ), array(
- 0 =>
- "1.1",
- 1 =>
- array(
- 'id' =>
- "3",
- 'doneby' =>
- "cellog",
- 'license' =>
- "",
- 'summary' =>
- "",
- 'description' =>
- "",
- 'releasedate' =>
- "2003-12-03 17:02:56",
- 'releasenotes' =>
- "required dependency test",
- 'state' =>
- "stable",
- ),
- 2 =>
- "http://pear.Chiara/get/pkg2-1.1",
- ));
-$pearweb->addXmlrpcConfig("package.getDownloadURL", array(
- 0 =>
- "pear",
- 1 =>
- "pkg3",
- 2 =>
- array(
- 0 =>
- "alpha",
- 1 =>
- "beta",
- 2 =>
- "stable",
- ),
- ), array(
- 0 =>
- "1.4",
- 1 =>
- array(
- 'id' =>
- "11",
- 'doneby' =>
- "cellog",
- 'license' =>
- "",
- 'summary' =>
- "",
- 'description' =>
- "",
- 'releasedate' =>
- "2003-12-03 18:51:31",
- 'releasenotes' =>
- "required dependency test",
- 'state' =>
- "alpha",
- ),
- 2 =>
- "http://pear.Chiara/get/pkg3-1.4",
- ));
-$pearweb->addXmlrpcConfig("package.getDownloadURL", array(
- 0 =>
- "pear",
- 1 =>
- "pkg4AndAHalf",
- 2 =>
- array(
- 0 =>
- "alpha",
- 1 =>
- "beta",
- 2 =>
- "stable",
- ),
- ), array(
- 0 =>
- "1.3",
- 1 =>
- array(
- 'id' =>
- "10",
- 'doneby' =>
- "cellog",
- 'license' =>
- "",
- 'summary' =>
- "",
- 'description' =>
- "",
- 'releasedate' =>
- "2003-12-03 18:50:05",
- 'releasenotes' =>
- "required dependency test",
- 'state' =>
- "stable",
- ),
- 2 =>
- "http://pear.Chiara/get/pkg4AndAHalf-1.3",
- ));
-$pearweb->addXmlrpcConfig("package.getDownloadURL", array(
- 0 =>
- "pear",
- 1 =>
- "pkg4",
- 2 =>
- array(
- 0 =>
- "alpha",
- 1 =>
- "beta",
- 2 =>
- "stable",
- ),
- ), array(
- 0 =>
- "1.1",
- 1 =>
- array(
- 'id' =>
- "5",
- 'doneby' =>
- "cellog",
- 'license' =>
- "",
- 'summary' =>
- "",
- 'description' =>
- "",
- 'releasedate' =>
- "2003-12-03 17:03:17",
- 'releasenotes' =>
- "required dependency test",
- 'state' =>
- "stable",
- ),
- 2 =>
- "http://pear.Chiara/get/pkg4-1.1",
- ));
-$pearweb->addXmlrpcConfig("package.getDownloadURL", array(
- 0 =>
- "pear",
- 1 =>
- "pkg5",
- 2 =>
- array(
- 0 =>
- "alpha",
- 1 =>
- "beta",
- 2 =>
- "stable",
- ),
- ), array(
- 0 =>
- "1.1",
- 1 =>
- array(
- 'id' =>
- "6",
- 'doneby' =>
- "cellog",
- 'license' =>
- "",
- 'summary' =>
- "",
- 'description' =>
- "",
- 'releasedate' =>
- "2003-12-03 17:03:25",
- 'releasenotes' =>
- "required dependency test",
- 'state' =>
- "stable",
- ),
- 2 =>
- "http://pear.Chiara/get/pkg5-1.1",
- ));
-$pearweb->addXmlrpcConfig("package.getDownloadURL", array(
- 0 =>
- "pear",
- 1 =>
- "pkg6",
- 2 =>
- array(
- 0 =>
- "alpha",
- 1 =>
- "beta",
- 2 =>
- "stable",
- ),
- ), array(
- 0 =>
- "2.0b1",
- 1 =>
- array(
- 'id' =>
- "9",
- 'doneby' =>
- "cellog",
- 'license' =>
- "",
- 'summary' =>
- "",
- 'description' =>
- "",
- 'releasedate' =>
- "2003-12-03 18:34:03",
- 'releasenotes' =>
- "required dependency test",
- 'state' =>
- "beta",
- ),
- 2 =>
- "http://pear.Chiara/get/pkg6-2.0b1",
- ));
-
-$pearweb->addHtmlConfig("http://pear.Chiara/get/pkg6-1.1.tgz",
- dirname(__FILE__) . DIRECTORY_SEPARATOR . 'test-pkg6' . DIRECTORY_SEPARATOR . 'pkg6-1.1.tgz');
-$pearweb->addHtmlConfig("http://pear.Chiara/get/pkg6-1.1",
- dirname(__FILE__) . DIRECTORY_SEPARATOR . 'test-pkg6' . DIRECTORY_SEPARATOR . 'pkg6-1.1.tgz');
-$pearweb->addHtmlConfig("http://pear.Chiara/get/pkg6-2.0b1",
- dirname(__FILE__) . DIRECTORY_SEPARATOR . 'test-pkg6' . DIRECTORY_SEPARATOR . 'pkg6-2.0b1.tgz');
-$pearweb->addHtmlConfig("http://pear.Chiara/get/pkg6-2.0b1.tgz",
- dirname(__FILE__) . DIRECTORY_SEPARATOR . 'test-pkg6' . DIRECTORY_SEPARATOR . 'pkg6-2.0b1.tgz');
-$pearweb->addHtmlConfig("http://pear.Chiara/get/pkg2-1.1",
- dirname(__FILE__) . DIRECTORY_SEPARATOR . 'pkg2-1.1.tgz');
-$pearweb->addHtmlConfig("http://pear.Chiara/get/pkg2-1.1.tgz",
- dirname(__FILE__) . DIRECTORY_SEPARATOR . 'pkg2-1.1.tgz');
-$pearweb->addHtmlConfig("http://pear.Chiara/get/pkg3-1.1",
- dirname(__FILE__) . DIRECTORY_SEPARATOR . 'pkg3-1.1.tgz');
-$pearweb->addHtmlConfig("http://pear.Chiara/get/pkg3-1.1.tgz",
- dirname(__FILE__) . DIRECTORY_SEPARATOR . 'pkg3-1.1.tgz');
-$pearweb->addHtmlConfig("http://pear.Chiara/get/pkg4-1.1",
- dirname(__FILE__) . DIRECTORY_SEPARATOR . 'pkg4-1.1.tgz');
-$pearweb->addHtmlConfig("http://pear.Chiara/get/pkg4-1.1.tgz",
- dirname(__FILE__) . DIRECTORY_SEPARATOR . 'pkg4-1.1.tgz');
-$pearweb->addHtmlConfig("http://pear.Chiara/get/pkg5-1.1",
- dirname(__FILE__) . DIRECTORY_SEPARATOR . 'pkg5-1.1.tgz');
-$pearweb->addHtmlConfig("http://pear.Chiara/get/pkg5-1.1.tgz",
- dirname(__FILE__) . DIRECTORY_SEPARATOR . 'pkg5-1.1.tgz');
-$pearweb->addHtmlConfig("http://pear.Chiara/get/pkg1-1.1",
- dirname(__FILE__) . DIRECTORY_SEPARATOR . 'pkg1-1.1.tgz');
-$pearweb->addHtmlConfig("http://pear.Chiara/get/pkg1-1.1.tgz",
- dirname(__FILE__) . DIRECTORY_SEPARATOR . 'pkg1-1.1.tgz');
-$pearweb->addHtmlConfig("http://pear.Chiara/get/pkg1-2.0b1",
- dirname(__FILE__) . DIRECTORY_SEPARATOR . 'pkg1-2.0b1.tgz');
-$pearweb->addHtmlConfig("http://pear.Chiara/get/pkg1-2.0b1.tgz",
- dirname(__FILE__) . DIRECTORY_SEPARATOR . 'pkg1-2.0b1.tgz');
-$pearweb->addHtmlConfig("http://pear.Chiara/get/pkg3-1.4",
- dirname(__FILE__) . DIRECTORY_SEPARATOR . 'pkg3-1.4.tgz');
-$pearweb->addHtmlConfig("http://pear.Chiara/get/pkg3-1.4.tgz",
- dirname(__FILE__) . DIRECTORY_SEPARATOR . 'pkg3-1.4.tgz');
-$pearweb->addHtmlConfig("http://pear.Chiara/get/pkg4AndAHalf-1.3",
- dirname(__FILE__) . DIRECTORY_SEPARATOR . 'pkg4AndAHalf-1.3.tgz');
-$pearweb->addHtmlConfig("http://pear.Chiara/get/pkg4AndAHalf-1.3.tgz",
- dirname(__FILE__) . DIRECTORY_SEPARATOR . 'pkg4AndAHalf-1.3.tgz');
-$pearweb->addHtmlConfig("http://pear.Chiara/get/stabilitytoolow-0.3",
- dirname(__FILE__) . DIRECTORY_SEPARATOR . 'stabilitytoolow-0.3.tgz');
-$pearweb->addHtmlConfig("http://pear.Chiara/get/stabilitytoolow-0.3.tgz",
- dirname(__FILE__) . DIRECTORY_SEPARATOR . 'stabilitytoolow-0.3.tgz');
-$pearweb->addHtmlConfig("http://pear.Chiara/get/stabilitytoolow-0.5",
- dirname(__FILE__) . DIRECTORY_SEPARATOR . 'stabilitytoolow-0.5.tgz');
-$pearweb->addHtmlConfig("http://pear.Chiara/get/stabilitytoolow-0.5.tgz",
- dirname(__FILE__) . DIRECTORY_SEPARATOR . 'stabilitytoolow-0.5.tgz');
-$pearweb->addHtmlConfig("http://pear.Chiara/get/stabilitytoolow-0.6beta",
- dirname(__FILE__) . DIRECTORY_SEPARATOR . 'stabilitytoolow-0.6beta.tgz');
-$pearweb->addHtmlConfig("http://pear.Chiara/get/stabilitytoolow-0.6beta.tgz",
- dirname(__FILE__) . DIRECTORY_SEPARATOR . 'stabilitytoolow-0.6beta.tgz');
-$pearweb->addHtmlConfig("http://pear.Chiara/get/stabilitytoolow-1.0b1",
- dirname(__FILE__) . DIRECTORY_SEPARATOR . 'stabilitytoolow-1.0b1.tgz');
-$pearweb->addHtmlConfig("http://pear.Chiara/get/stabilitytoolow-1.0b1.tgz",
- dirname(__FILE__) . DIRECTORY_SEPARATOR . 'stabilitytoolow-1.0b1.tgz');
-$pearweb->addHtmlConfig("http://pear.Chiara/get/stabilitytoolow-2.0a1",
- dirname(__FILE__) . DIRECTORY_SEPARATOR . 'stabilitytoolow-2.0a1.tgz');
-$pearweb->addHtmlConfig("http://pear.Chiara/get/stabilitytoolow-2.0a1.tgz",
- dirname(__FILE__) . DIRECTORY_SEPARATOR . 'stabilitytoolow-2.0a1.tgz');
-$pearweb->addHtmlConfig("http://pear.Chiara/get/stabilitytoolow-2.0b1",
- dirname(__FILE__) . DIRECTORY_SEPARATOR . 'stabilitytoolow-2.0b1.tgz');
-$pearweb->addHtmlConfig("http://pear.Chiara/get/stabilitytoolow-2.0b1.tgz",
- dirname(__FILE__) . DIRECTORY_SEPARATOR . 'stabilitytoolow-2.0b1.tgz');
-$pearweb->addHtmlConfig("http://pear.Chiara/get/stabilitytoolow-2.0dev",
- dirname(__FILE__) . DIRECTORY_SEPARATOR . 'stabilitytoolow-2.0dev.tgz');
-$pearweb->addHtmlConfig("http://pear.Chiara/get/stabilitytoolow-2.0dev.tgz",
- dirname(__FILE__) . DIRECTORY_SEPARATOR . 'stabilitytoolow-2.0dev.tgz');
-$pearweb->addHtmlConfig("http://pear.Chiara/get/stabilitytoolow-3.0dev",
- dirname(__FILE__) . DIRECTORY_SEPARATOR . 'stabilitytoolow-3.0dev.tgz');
-$pearweb->addHtmlConfig("http://pear.Chiara/get/stabilitytoolow-3.0dev.tgz",
- dirname(__FILE__) . DIRECTORY_SEPARATOR . 'stabilitytoolow-3.0dev.tgz');
-$pearweb->addHtmlConfig("http://pear.Chiara/get/depnoreleases-1.0",
- dirname(__FILE__) . DIRECTORY_SEPARATOR . 'depnoreleases-1.0.tgz');
-$pearweb->addHtmlConfig("http://pear.Chiara/get/depnoreleases-1.0.tgz",
- dirname(__FILE__) . DIRECTORY_SEPARATOR . 'depnoreleases-1.0.tgz');
-$pearweb->addHtmlConfig("http://pear.Chiara/get/depunstable-1.0",
- dirname(__FILE__) . DIRECTORY_SEPARATOR . 'depunstable-1.0.tgz');
-$pearweb->addHtmlConfig("http://pear.Chiara/get/depunstable-1.0.tgz",
- dirname(__FILE__) . DIRECTORY_SEPARATOR . 'depunstable-1.0.tgz');
-$pearweb->addHtmlConfig("http://pear.Chiara/get/stabilitytoolow",
- dirname(__FILE__) . DIRECTORY_SEPARATOR . 'stabilitytoolow-3.0dev.tgz');
-$pearweb->addHtmlConfig("http://pear.Chiara/get/stabilitytoolow-3.0dev.tgz",
- dirname(__FILE__) . DIRECTORY_SEPARATOR . 'stabilitytoolow-3.0dev.tgz');
-?> \ No newline at end of file
diff --git a/pear/tests/download_test_classes.php.inc b/pear/tests/download_test_classes.php.inc
deleted file mode 100644
index c27696d48c..0000000000
--- a/pear/tests/download_test_classes.php.inc
+++ /dev/null
@@ -1,404 +0,0 @@
-<?php
-require_once 'XML/RPC.php';
-require_once dirname(__FILE__) . DIRECTORY_SEPARATOR . 'PEAR_test_mock_pearweb.php.inc';
-$GLOBALS['pearweb'] = new PEAR_test_mock_pearweb;
-class test_XML_RPC_Client extends XML_RPC_Client {
- function test_XML_RPC_Client()
- {
- $this->_fakepearweb = &$GLOBALS['pearweb'];
- }
-
- function sendPayloadHTTP10($msg, $server, $port, $timeout=0,
- $username="", $password="")
- {
- // Only create the payload if it was not created previously
- if(empty($msg->payload)) $msg->createPayload();
-
- $resp = $this->_fakepearweb->receiveXmlrpc($msg->payload);
-
- $resp=$msg->parseResponse($resp);
- return $resp;
- }
-}
-require_once 'PEAR/Remote.php';
-
-class test_PEAR_Remote extends PEAR_Remote {
- var $_pearweb;
- var $_fakepearweb = true;
- var $_simulateEpi = true;
- function test_PEAR_Remote($config)
- {
- $pearweb = &$GLOBALS['pearweb'];
- include dirname(__FILE__) . DIRECTORY_SEPARATOR . 'download_test.config.inc';
- $this->_pearweb = $pearweb;
- parent::PEAR_Remote($config);
- $this->_pearweb->setRemote($this);
- }
-
- function parentcall()
- {
- $args = func_get_args();
- $method = array_shift($args);
- switch (count($args)) {
- case 0:
- $result = PEAR_Remote::call_epi($method);
- break;
- case 1:
- $result = PEAR_Remote::call_epi($method, $args[0]);
- break;
- case 2:
- $result = PEAR_Remote::call_epi($method, $args[0], $args[1]);
- break;
- case 3:
- $result = PEAR_Remote::call_epi($method, $args[0], $args[1], $args[2]);
- break;
- case 4:
- $result = PEAR_Remote::call_epi($method, $args[0], $args[1], $args[2], $args[3]);
- break;
- case 5:
- $result = PEAR_Remote::call_epi($method, $args[0], $args[1], $args[2], $args[3], $args[4]);
- break;
- case 6:
- $result = PEAR_Remote::call_epi($method, $args[0], $args[1], $args[2], $args[3], $args[4], $args[5]);
- break;
- }
- return $result;
- }
-
- function call($method)
- {
- $_args = $args = func_get_args();
-
- $server_channel = $this->config->get('default_channel');
- $channel = $this->_registry->getChannel($server_channel);
- if ($channel) {
- if (!$channel->supports('xml-rpc', $method)) {
- // check for channel.list, which is implicitly supported for the PEAR channel
- if (!(strtolower($server_channel) == 'pear' && $method == 'channel.list')) {
- return $this->raiseError("Channel $server_channel does not support xml-rpc method $method");
- }
- }
- }
-
- array_unshift($_args, $channel); // cache by channel
- $this->cache = $this->getCache($_args);
- $cachettl = $this->config->get('cache_ttl');
- // If cache is newer than $cachettl seconds, we use the cache!
- if ($this->cache !== null && $this->cache['age'] < $cachettl) {
- return $this->cache['content'];
- };
- if ($this->_simulateEpi) {
- $result = call_user_func_array(array(&$this, 'call_epi'), $args);
- if (!PEAR::isError($result)) {
- $this->saveCache($_args, $result);
- };
- return $result;
- }
- if (!@include_once("XML/RPC.php")) {
- return $this->raiseError("For this remote PEAR operation you need to install the XML_RPC package");
- }
- array_shift($args);
- $server_host = $this->_registry->channelInfo($server_channel, 'server');
- $username = $this->config->get('username');
- $password = $this->config->get('password');
- $eargs = array();
- foreach($args as $arg) $eargs[] = $this->_encode($arg);
- $f = new XML_RPC_Message($method, $eargs);
- if ($this->cache !== null) {
- $maxAge = '?maxAge='.$this->cache['lastChange'];
- } else {
- $maxAge = '';
- };
- $proxy_host = $proxy_port = $proxy_user = $proxy_pass = '';
- if ($proxy = parse_url($this->config->get('http_proxy'))) {
- $proxy_host = @$proxy['host'];
- $proxy_port = @$proxy['port'];
- $proxy_user = @$proxy['user'];
- $proxy_pass = @$proxy['pass'];
- }
- $c = new test_XML_RPC_Client('/xmlrpc.php'.$maxAge, $server_host, 80, $proxy_host, $proxy_port, $proxy_user, $proxy_pass);
- if ($username && $password) {
- $c->setCredentials($username, $password);
- }
- if ($this->config->get('verbose') >= 3) {
- $c->setDebug(1);
- }
- $r = $c->send($f);
- if (!$r) {
- return $this->raiseError("XML_RPC send failed");
- }
- $v = $r->value();
- if ($e = $r->faultCode()) {
- if ($e == $GLOBALS['XML_RPC_err']['http_error'] && strstr($r->faultString(), '304 Not Modified') !== false) {
- return $this->cache['content'];
- }
- return $this->raiseError($r->faultString(), $e);
- }
-
- $result = XML_RPC_decode($v);
- $this->saveCache($_args, $result);
- return $result;
- }
-
- function call_epi($method)
- {
- $args = func_get_args();
- array_shift($args);
- if ($this->_fakepearweb) {
- if (count($args)) {
- $result = $this->_pearweb->call($method, $args);
- } else {
- $result = $this->_pearweb->call($method);
- }
- }/* else {
- switch (count($args)) {
- case 0:
- $result = parent::call($method);
- break;
- case 1:
- $result = parent::call($method, $args[0]);
- break;
- case 2:
- $result = parent::call($method, $args[0], $args[1]);
- break;
- case 3:
- $result = parent::call($method, $args[0], $args[1], $args[2]);
- break;
- case 4:
- $result = parent::call($method, $args[0], $args[1], $args[2], $args[3]);
- break;
- case 5:
- $result = parent::call($method, $args[0], $args[1], $args[2], $args[3], $args[4]);
- break;
- case 6:
- $result = parent::call($method, $args[0], $args[1], $args[2], $args[3], $args[4], $args[5]);
- break;
- }
- }*/
- if (PEAR::isError($result)) {
- return $result;
- }
- return $result;
- }
-}
-
-require_once 'PEAR/Installer.php';
-class test_PEAR_Installer extends PEAR_Installer {
- function download($packages, $options, &$config, &$installpackages,
- &$errors, $installed = false, $willinstall = false, $state = false)
- {
- // trickiness: initialize here
- $this->PEAR_Downloader($this->ui, $options, $config);
- $this->_remote = &new test_PEAR_Remote($config);
- $ret = PEAR_Downloader::download($packages);
- $errors = $this->getErrorMsgs();
- $installpackages = $this->getDownloadedPackages();
- trigger_error("PEAR Warning: PEAR_Installer::download() is deprecated " .
- "in favor of PEAR_Downloader class", E_USER_WARNING);
- return $ret;
- }
-
- function downloadHttp($url, &$ui, $save_dir = '.', $callback = null)
- {
-// return parent::downloadHttp($url, $ui, $save_dir, $callback);
- if ($callback) {
- call_user_func($callback, 'setup', array(&$ui));
- }
- if (preg_match('!^http://([^/:?#]*)(:(\d+))?(/.*)!', $url, $matches)) {
- list(,$host,,$port,$path) = $matches;
- }
- if (isset($this)) {
- $config = &$this->config;
- } else {
- $config = &PEAR_Config::singleton();
- }
- $proxy_host = $proxy_port = $proxy_user = $proxy_pass = '';
- if ($proxy = parse_url($config->get('http_proxy'))) {
- $proxy_host = @$proxy['host'];
- $proxy_port = @$proxy['port'];
- $proxy_user = @$proxy['user'];
- $proxy_pass = @$proxy['pass'];
-
- if ($proxy_port == '') {
- $proxy_port = 8080;
- }
- if ($callback) {
- call_user_func($callback, 'message', "Using HTTP proxy $host:$port");
- }
- }
- if (empty($port)) {
- $port = 80;
- }
- // use _pearweb to get file
- $retrieved = explode("\n", $this->_remote->_pearweb->receiveHttp($url));
- $headers = array();
- $line = array_shift($retrieved);
- while (strlen(trim($line))) {
- if (preg_match('/^([^:]+):\s+(.*)\s*$/', $line, $matches)) {
- $headers[strtolower($matches[1])] = trim($matches[2]);
- } elseif (preg_match('|^HTTP/1.[01] ([0-9]{3}) |', $line, $matches)) {
- if ($matches[1] != 200) {
- return PEAR::raiseError("File http://$host:$port$path not valid (received: $line)");
- }
- }
- $line = array_shift($retrieved);
- }
- $retrieved = join("\n", $retrieved);
- if (isset($headers['content-disposition']) &&
- preg_match('/\sfilename=\"([^;]*\S)\"\s*(;|$)/', $headers['content-disposition'], $matches)) {
- $save_as = basename($matches[1]);
- } else {
- $save_as = basename($url);
- }
- if ($callback) {
- $tmp = call_user_func($callback, 'saveas', $save_as);
- if ($tmp) {
- $save_as = $tmp;
- }
- }
- $dest_file = $save_dir . DIRECTORY_SEPARATOR . $save_as;
- if (!$wp = @fopen($dest_file, 'wb')) {
- fclose($fp);
- if ($callback) {
- call_user_func($callback, 'writefailed', array($dest_file, $php_errormsg));
- }
- return PEAR::raiseError("could not open $dest_file for writing");
- }
- if (isset($headers['content-length'])) {
- $length = $headers['content-length'];
- } else {
- $length = -1;
- }
- $bytes = 0;
- if ($callback) {
- call_user_func($callback, 'start', array(basename($dest_file), $length));
- }
- $start = 0;
- while ($start < strlen($retrieved) - 1) {
- $data = substr($retrieved, $start, 1024);
- $start += 1024;
- $bytes += strlen($data);
- if ($callback) {
- call_user_func($callback, 'bytesread', $bytes);
- }
- if (!@fwrite($wp, $data)) {
- if ($callback) {
- call_user_func($callback, 'writefailed', array($dest_file, $php_errormsg));
- }
- return PEAR::raiseError("$dest_file: write failed ($php_errormsg)");
- }
- }
- fclose($wp);
- if ($callback) {
- call_user_func($callback, 'done', $bytes);
- }
- return $dest_file;
- }
-}
-
-require_once 'PEAR/Downloader.php';
-class test_PEAR_Downloader extends PEAR_Downloader {
- function test_PEAR_Downloader(&$ui, $options, &$config)
- {
- parent::PEAR_Downloader($ui, $options, $config);
- $this->_remote = new test_PEAR_Remote($config);
- }
-
- function downloadHttp($url, &$ui, $save_dir = '.', $callback = null)
- {
-// return parent::downloadHttp($url, $ui, $save_dir, $callback);
- if ($callback) {
- call_user_func($callback, 'setup', array(&$ui));
- }
- if (preg_match('!^http://([^/:?#]*)(:(\d+))?(/.*)!', $url, $matches)) {
- list(,$host,,$port,$path) = $matches;
- }
- if (isset($this)) {
- $config = &$this->config;
- } else {
- $config = &PEAR_Config::singleton();
- }
- $proxy_host = $proxy_port = $proxy_user = $proxy_pass = '';
- if ($proxy = parse_url($config->get('http_proxy'))) {
- $proxy_host = @$proxy['host'];
- $proxy_port = @$proxy['port'];
- $proxy_user = @$proxy['user'];
- $proxy_pass = @$proxy['pass'];
-
- if ($proxy_port == '') {
- $proxy_port = 8080;
- }
- if ($callback) {
- call_user_func($callback, 'message', "Using HTTP proxy $host:$port");
- }
- }
- if (empty($port)) {
- $port = 80;
- }
- // use _pearweb to get file
- $retrieved = explode("\n", $this->_remote->_pearweb->receiveHttp($url));
- $headers = array();
- $line = array_shift($retrieved);
- while (strlen(trim($line))) {
- if (preg_match('/^([^:]+):\s+(.*)\s*$/', $line, $matches)) {
- $headers[strtolower($matches[1])] = trim($matches[2]);
- } elseif (preg_match('|^HTTP/1.[01] ([0-9]{3}) |', $line, $matches)) {
- if ($matches[1] != 200) {
- return PEAR::raiseError("File http://$host:$port$path not valid (received: $line)");
- }
- }
- $line = array_shift($retrieved);
- }
- $retrieved = join("\n", $retrieved);
- if (isset($headers['content-disposition']) &&
- preg_match('/\sfilename=\"([^;]*\S)\"\s*(;|$)/', $headers['content-disposition'], $matches)) {
- $save_as = basename($matches[1]);
- } else {
- $save_as = basename($url);
- }
- if ($callback) {
- $tmp = call_user_func($callback, 'saveas', $save_as);
- if ($tmp) {
- $save_as = $tmp;
- }
- }
- $dest_file = $save_dir . DIRECTORY_SEPARATOR . $save_as;
- if (!$wp = @fopen($dest_file, 'wb')) {
- fclose($fp);
- if ($callback) {
- call_user_func($callback, 'writefailed', array($dest_file, $php_errormsg));
- }
- return PEAR::raiseError("could not open $dest_file for writing");
- }
- if (isset($headers['content-length'])) {
- $length = $headers['content-length'];
- } else {
- $length = -1;
- }
- $bytes = 0;
- if ($callback) {
- call_user_func($callback, 'start', array(basename($dest_file), $length));
- }
- $start = 0;
- while ($start < strlen($retrieved) - 1) {
- $data = substr($retrieved, $start, 1024);
- $start += 1024;
- $bytes += strlen($data);
- if ($callback) {
- call_user_func($callback, 'bytesread', $bytes);
- }
- if (!@fwrite($wp, $data)) {
- if ($callback) {
- call_user_func($callback, 'writefailed', array($dest_file, $php_errormsg));
- }
- return PEAR::raiseError("$dest_file: write failed ($php_errormsg)");
- }
- }
- fclose($wp);
- if ($callback) {
- call_user_func($callback, 'done', $bytes);
- }
- return $dest_file;
- }
-}
-?> \ No newline at end of file
diff --git a/pear/tests/merge.input b/pear/tests/merge.input
deleted file mode 100644
index 440106ea45..0000000000
--- a/pear/tests/merge.input
+++ /dev/null
@@ -1 +0,0 @@
-a:1:{s:7:"verbose";i:100;} \ No newline at end of file
diff --git a/pear/tests/merge2.input b/pear/tests/merge2.input
deleted file mode 100644
index 853a6d10bb..0000000000
--- a/pear/tests/merge2.input
+++ /dev/null
@@ -1 +0,0 @@
-a:2:{s:7:"verbose";i:35;s:10:"__channels";a:2:{s:5:"test1";a:1:{s:7:"verbose";i:898;}s:5:"test2";a:1:{s:7:"verbose";i:899;}}} \ No newline at end of file
diff --git a/pear/tests/package-PEARtests.xml b/pear/tests/package-PEARtests.xml
deleted file mode 100644
index daceee967b..0000000000
--- a/pear/tests/package-PEARtests.xml
+++ /dev/null
@@ -1,176 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1" ?>
-<!DOCTYPE package SYSTEM "http://pear.php.net/dtd/package-1.0">
-<package version="1.0">
- <name>PEARtests</name>
- <summary>PEAR Base System tests</summary>
- <description>This package contains all tests for the PEAR base system</description>
- <maintainers>
- <maintainer>
- <user>cellog</user>
- <name>Greg Beaver</name>
- <email>cellog@php.net</email>
- <role>developer</role>
- </maintainer>
- </maintainers>
- <release>
- <version>2.1</version>
- <date>2004-06-04</date>
- <license>PHP License</license>
- <state>stable</state>
- <notes>Installation package.xml for PEAR package tests</notes>
- <deps>
- <dep type="pkg" rel="ge" version="1.4.0dev6">PEAR</dep>
- <dep type="pkg" rel="ge" version="1.1">Archive_Tar</dep>
- <dep type="pkg" rel="ge" version="1.2">Console_Getopt</dep>
- <dep type="pkg" rel="ge" version="1.1.0">XML_RPC</dep>
- <dep type="ext" rel="has">xml</dep>
- <dep type="ext" rel="has">pcre</dep>
- </deps>
- <filelist>
- <dir baseinstalldir="PEAR" name="/">
- <dir name="dirtree">
- <file role="test" name="package-fail.xml"/>
- <file role="test" name="package.xml"/>
- <file role="test" name="package2.xml"/>
- <file role="test" name="pkg1-1.0.tgz"/>
- <file role="test" name="pkg2-1.0.tgz"/>
- <dir name="multiplepackages">
- <file role="test" name="pkg1file.php"/>
- <file role="test" name="pkg2file.php"/>
- </dir> <!-- dirtree/multiplepackages -->
- <dir name="nestedroot">
- <file role="test" name="rootfile.php"/>
- <dir name="emptydir">
- <file role="test" name="fakefile1.php"/>
- <dir name="nesteddir">
- <file role="test" name="nestedfile.php"/>
- </dir> <!-- dirtree/nestedroot/emptydir/nesteddir -->
- </dir> <!-- dirtree/nestedroot/emptydir -->
- </dir> <!-- dirtree/nestedroot -->
- <dir name="pkg1">
- <file role="test" name="randomfile.php"/>
- </dir> <!-- dirtree/pkg1 -->
- </dir> <!-- dirtree -->
- <dir name="PEAR_ErrorStack">
- <file role="test" name="base_regression.php"/>
- <file role="test" name="Error_Stack_TestCase_getErrorMessage.php"/>
- <file role="test" name="Error_Stack_TestCase_getErrorMessageTemplate.php"/>
- <file role="test" name="Error_Stack_TestCase_getErrors.php"/>
- <file role="test" name="Error_Stack_TestCase_pushpop.php"/>
- <file role="test" name="Error_Stack_TestCase_pushpopcallback.php"/>
- <file role="test" name="Error_Stack_TestCase_pushpopstatic.php"/>
- <file role="test" name="Error_Stack_TestCase_singleton.php"/>
- <file role="test" name="Error_Stack_TestCase_staticGetErrors.php"/>
- <file role="test" name="HTML_TestListener.php"/>
- <file role="test" name="stylesheet.css"/>
- <file role="test" name="testsuite.php"/>
- <file role="test" name="TestUnit.php"/>
- </dir> <!-- PEAR_ErrorStack -->
- <dir name="test-pkg6">
- <file role="test" name="conflictpackage2.xml"/>
- <file role="test" name="conflictpackage.xml"/>
- <file role="test" name="invalidtgz.tgz"/>
- <file role="test" name="nopackagexml.tgz"/>
- <file role="test" name="package2.xml"/>
- <file role="test" name="package2_invalid.xml"/>
- <file role="test" name="package.xml"/>
- <file role="test" name="pkg6-1.1.tgz"/>
- <file role="test" name="pkg6-2.0b1.tgz"/>
- <file role="test" name="zoorb.php"/>
- <dir name="goompness">
- <file role="test" name="Mopreeb.php"/>
- <file role="test" name="oggbrzitzkee.php"/>
- <file role="test" name="test.dat"/>
- </dir> <!-- test-pkg6/goompness -->
- </dir> <!-- test-pkg6 -->
- <file role="test" name="common_sortPkgDeps1_package.xml"/>
- <file role="test" name="common_sortPkgDeps2_package.xml"/>
- <file role="test" name="common_sortPkgDeps3_package.xml"/>
- <file role="test" name="common_sortPkgDeps4_package.xml"/>
- <file role="test" name="common_sortPkgDeps5_package.xml"/>
- <file role="test" name="common_sortPkgDeps6_package.xml"/>
- <file role="test" name="depnoreleases-1.0.tgz"/>
- <file role="test" name="depunstable-1.0.tgz"/>
- <file role="test" name="download_test.config.inc"/>
- <file role="test" name="download_test_classes.php.inc"/>
- <file role="test" name="merge.input"/>
- <file role="test" name="merge2.input"/>
- <file role="test" name="pear1.phpt"/>
- <file role="test" name="pear2.phpt"/>
- <file role="test" name="pear_autoloader.phpt"/>
- <file role="test" name="pear_channelfile.phpt"/>
- <file role="test" name="pear_common_analyzeSC.phpt"/>
- <file role="test" name="pear_common_buildProvidesArray.phpt"/>
- <file role="test" name="pear_common_downloadHttp.phpt"/>
- <file role="test" name="pear_common_infoFromString.phpt"/>
- <file role="test" name="pear_common_sortPkgDeps.phpt"/>
- <file role="test" name="pear_common_validPackageVersion.phpt"/>
- <file role="test" name="pear_config.phpt"/>
- <file role="test" name="pear_config_1.1.phpt"/>
- <file role="test" name="pear_dependency_checkExtension.phpt"/>
- <file role="test" name="pear_dependency_checkPackage.phpt"/>
- <file role="test" name="pear_dependency_checkPackageUninstall.phpt"/>
- <file role="test" name="pear_downloader_invalid.phpt"/>
- <file role="test" name="pear_downloader_new.phpt"/>
- <file role="test" name="pear_downloader_old.phpt"/>
- <file role="test" name="pear_error.phpt"/>
- <file role="test" name="pear_error2.phpt"/>
- <file role="test" name="pear_error3.phpt"/>
- <file role="test" name="pear_error4.phpt"/>
- <file role="test" name="pear_installer1.phpt"/>
- <file role="test" name="pear_installer2.phpt"/>
- <file role="test" name="pear_installer3.phpt"/>
- <file role="test" name="pear_installer4.phpt"/>
- <file role="test" name="pear_installer5.phpt"/>
- <file role="test" name="pear_installer_installFile_channels.phpt"/>
- <file role="test" name="pear_installer_install_channels.phpt"/>
- <file role="test" name="pear_packager.phpt"/>
- <file role="test" name="pear_registry_inc.php.inc"/>
- <file role="test" name="pear_registry.phpt"/>
- <file role="test" name="pear_registry_1.1.phpt"/>
- <file role="test" name="pear_system.phpt"/>
- <file role="test" name="PEAR_test_mock_pearweb.php.inc"/>
- <file role="test" name="php.ini"/>
- <file role="test" name="php_dump.php.inc"/>
- <file role="test" name="pkg1-1.1.tgz"/>
- <file role="test" name="pkg1-2.0b1.tgz"/>
- <file role="test" name="pkg2-1.1.tgz"/>
- <file role="test" name="pkg3-1.1.tgz"/>
- <file role="test" name="pkg3-1.4.tgz"/>
- <file role="test" name="pkg4-1.1.tgz"/>
- <file role="test" name="pkg4AndAHalf-1.3.tgz"/>
- <file role="test" name="pkg5-1.1.tgz"/>
- <file role="test" name="stabilitytoolow-0.3.tgz"/>
- <file role="test" name="stabilitytoolow-0.5.tgz"/>
- <file role="test" name="stabilitytoolow-0.6beta.tgz"/>
- <file role="test" name="stabilitytoolow-1.0b1.tgz"/>
- <file role="test" name="stabilitytoolow-2.0a1.tgz"/>
- <file role="test" name="stabilitytoolow-2.0b1.tgz"/>
- <file role="test" name="stabilitytoolow-2.0dev.tgz"/>
- <file role="test" name="stabilitytoolow-3.0dev.tgz"/>
- <file role="test" name="system.input"/>
- <file role="test" name="testdownload.tgz"/>
- <file role="test" name="toonew.conf"/>
- <file role="test" name="user.input"/>
- <file role="test" name="user2.input"/>
- <file role="test" name="user3.input"/>
- </dir> <!-- / -->
- </filelist>
- </release>
- <changelog>
- <release>
- <version>1.0</version>
- <date>2004-03-21</date>
- <license>PHP License</license>
- <state>stable</state>
- <notes>Installation package.xml for PEAR package tests</notes>
- </release>
- <release>
- <version>2.0</version>
- <date>2004-06-01</date>
- <license>PHP License</license>
- <state>stable</state>
- <notes>Installation package.xml for PEAR package tests</notes>
- </release>
- </changelog>
-</package>
diff --git a/pear/tests/pear1.phpt b/pear/tests/pear1.phpt
deleted file mode 100644
index f65d6a4f19..0000000000
--- a/pear/tests/pear1.phpt
+++ /dev/null
@@ -1,90 +0,0 @@
---TEST--
-PEAR constructor/destructor test
---SKIPIF--
-<?php
-if (!getenv('PHP_PEAR_RUNTESTS')) {
- echo 'skip';
-}
-?>
---FILE--
-<?php
-
-require_once "PEAR.php";
-
-class TestPEAR extends PEAR {
- function TestPEAR($name) {
- $this->_debug = true;
- $this->name = $name;
- $this->PEAR();
- }
- function _TestPEAR() {
- print "This is the TestPEAR($this->name) destructor\n";
- $this->_PEAR();
- }
-}
-
-class Test2 extends PEAR {
- function _Test2() {
- print "This is the Test2 destructor\n";
- $this->_PEAR();
- }
-}
-
-class Test3 extends Test2 {
-}
-
-// test for bug http://bugs.php.net/bug.php?id=14744
-class Other extends Pear {
-
- var $a = 'default value';
-
- function Other() {
- $this->PEAR();
- }
-
- function _Other() {
- // $a was modified but here misteriously returns to be
- // the original value. That makes the destructor useless
- // The correct value for $a in the destructor shoud be "new value"
- echo "#bug 14744# Other class destructor: other->a == '" . $this->a ."'\n";
- }
-}
-
-print "testing plain destructors\n";
-$o = new TestPEAR("test1");
-$p = new TestPEAR("test2");
-print "..\n";
-print "testing inherited destructors\n";
-$q = new Test3;
-
-echo "...\ntesting bug #14744\n";
-$other =& new Other;
-echo "#bug 14744# Other class constructor: other->a == '" . $other->a ."'\n";
-// Modify $a
-$other->a = 'new value';
-echo "#bug 14744# Other class modified: other->a == '" . $other->a ."'\n";
-
-print "..\n";
-print "script exiting...\n";
-print "..\n";
-
-?>
---EXPECT--
-testing plain destructors
-PEAR constructor called, class=testpear
-PEAR constructor called, class=testpear
-..
-testing inherited destructors
-...
-testing bug #14744
-#bug 14744# Other class constructor: other->a == 'default value'
-#bug 14744# Other class modified: other->a == 'new value'
-..
-script exiting...
-..
-This is the TestPEAR(test1) destructor
-PEAR destructor called, class=testpear
-This is the TestPEAR(test2) destructor
-PEAR destructor called, class=testpear
-This is the Test2 destructor
-#bug 14744# Other class destructor: other->a == 'new value'
diff --git a/pear/tests/pear2.phpt b/pear/tests/pear2.phpt
deleted file mode 100644
index ccf8864ef2..0000000000
--- a/pear/tests/pear2.phpt
+++ /dev/null
@@ -1,850 +0,0 @@
---TEST--
-PEAR complete set/push/pop error-handling test (run from pear/tests dir)
---SKIPIF--
-<?php
-if (!getenv('PHP_PEAR_RUNTESTS')) {
- echo 'skip';
-}
-?>
---FILE--
-<?php
-
-require_once "PEAR.php";
-
-class testErrorHandlingStatic {
- function doSetErrorHandlingFunction()
- {
- print "testing in class setErrorHandling\n";
- PEAR::setErrorHandling(PEAR_ERROR_CALLBACK, 'get_error_mode');
- echoPEARVars('_PEAR_default_error_mode', $GLOBALS['_PEAR_default_error_mode'],
- '_PEAR_default_error_options', $GLOBALS['_PEAR_default_error_options']);
- }
-
- function doSetErrorHandlingStatic()
- {
- print "testing in class setErrorHandling array(obj, method)\n";
- $obj = new testErrorHandlingPEAR;
- PEAR::setErrorHandling(PEAR_ERROR_CALLBACK, array(&$obj, 'fakeHandleError'));
- echoPEARVars('_PEAR_default_error_mode', $GLOBALS['_PEAR_default_error_mode'],
- '_PEAR_default_error_options', $GLOBALS['_PEAR_default_error_options']);
- }
-
- function doSetErrorHandlingObject()
- {
- print "testing in class setErrorHandling array(class, method)\n";
- PEAR::setErrorHandling(PEAR_ERROR_CALLBACK, array('testErrorHandlingStatic', 'fakeHandleError'));
- echoPEARVars('_PEAR_default_error_mode', $GLOBALS['_PEAR_default_error_mode'],
- '_PEAR_default_error_options', $GLOBALS['_PEAR_default_error_options']);
- }
-
- function doPushErrorHandlingFunction()
- {
- print "testing in class pushErrorHandling\n";
- PEAR::pushErrorHandling(PEAR_ERROR_CALLBACK, 'get_error_mode');
- echoPEARStack('_PEAR_error_handler_stack', $GLOBALS['_PEAR_error_handler_stack']);
- }
-
- function doPushErrorHandlingObject()
- {
- print "testing in class pushErrorHandling array(obj, method)\n";
- $obj = new testErrorHandlingPEAR;
- PEAR::pushErrorHandling(PEAR_ERROR_CALLBACK, array(&$obj, 'fakeHandleError'));
- echoPEARStack('_PEAR_error_handler_stack', $GLOBALS['_PEAR_error_handler_stack']);
- }
-
- function doPushErrorHandlingStatic()
- {
- print "testing in class pushErrorHandling array(class, method)\n";
- PEAR::pushErrorHandling(PEAR_ERROR_CALLBACK, array('testErrorHandlingStatic', 'fakeHandleError'));
- echoPEARStack('_PEAR_error_handler_stack', $GLOBALS['_PEAR_error_handler_stack']);
- }
-
- function doPopErrorHandling()
- {
- print "testing in class popErrorHandling\n";
- PEAR::popErrorHandling();
- echoPEARStack('_PEAR_error_handler_stack', $GLOBALS['_PEAR_error_handler_stack']);
- }
-
- function fakeHandleError($err)
- {
- }
-}
-
-class testErrorHandlingPEAR extends PEAR {
-
- function fakeHandleError($err)
- {
- }
-
- function doSetErrorHandlingFunction()
- {
- print "testing in PEAR setErrorHandling\n";
- PEAR::setErrorHandling(PEAR_ERROR_CALLBACK, 'get_error_mode');
- echoPEARVars('_PEAR_default_error_mode', $GLOBALS['_PEAR_default_error_mode'],
- '_PEAR_default_error_options', $GLOBALS['_PEAR_default_error_options']);
- echoPEARVars('$this->_default_error_mode', $this->_default_error_mode,
- '$this->_default_error_options', $this->_default_error_options);
- }
-
- function doSetErrorHandlingStatic()
- {
- print "testing in PEAR setErrorHandling array(obj, method)\n";
- $obj = new testErrorHandlingPEAR;
- PEAR::setErrorHandling(PEAR_ERROR_CALLBACK, array(&$obj, 'fakeHandleError'));
- echoPEARVars('_PEAR_default_error_mode', $GLOBALS['_PEAR_default_error_mode'],
- '_PEAR_default_error_options', $GLOBALS['_PEAR_default_error_options']);
- echoPEARVars('$this->_default_error_mode', $this->_default_error_mode,
- '$this->_default_error_options', $this->_default_error_options);
- }
-
- function doSetErrorHandlingObject()
- {
- print "testing in PEAR setErrorHandling array(class, method)\n";
- PEAR::setErrorHandling(PEAR_ERROR_CALLBACK, array('testErrorHandlingStatic', 'fakeHandleError'));
- echoPEARVars('_PEAR_default_error_mode', $GLOBALS['_PEAR_default_error_mode'],
- '_PEAR_default_error_options', $GLOBALS['_PEAR_default_error_options']);
- echoPEARVars('$this->_default_error_mode', $this->_default_error_mode,
- '$this->_default_error_options', $this->_default_error_options);
- }
-
- function doPushErrorHandlingFunction()
- {
- print "testing in PEAR pushErrorHandling\n";
- PEAR::pushErrorHandling(PEAR_ERROR_CALLBACK, 'get_error_mode');
- echoPEARStack('_PEAR_error_handler_stack', $GLOBALS['_PEAR_error_handler_stack']);
- }
-
- function doPushErrorHandlingObject()
- {
- print "testing in PEAR pushErrorHandling array(obj, method)\n";
- $obj = new testErrorHandlingPEAR;
- PEAR::pushErrorHandling(PEAR_ERROR_CALLBACK, array(&$obj, 'fakeHandleError'));
- echoPEARStack('_PEAR_error_handler_stack', $GLOBALS['_PEAR_error_handler_stack']);
- }
-
- function doPushErrorHandlingStatic()
- {
- print "testing in PEAR pushErrorHandling array(class, method)\n";
- PEAR::pushErrorHandling(PEAR_ERROR_CALLBACK, array('testErrorHandlingStatic', 'fakeHandleError'));
- echoPEARStack('_PEAR_error_handler_stack', $GLOBALS['_PEAR_error_handler_stack']);
- }
-
- function doPopErrorHandling()
- {
- print "testing in PEAR popErrorHandling\n";
- PEAR::popErrorHandling();
- echoPEARStack('_PEAR_error_handler_stack', $GLOBALS['_PEAR_error_handler_stack']);
- }
-}
-
-function echoPEARVars($name1, $mode, $name2, $options, $indent = '')
-{
- $levelMap =
- array(
- E_USER_NOTICE => 'E_USER_NOTICE',
- E_USER_WARNING => 'E_USER_WARNING',
- E_USER_ERROR => 'E_USER_ERROR',
- );
- $pearLevelMap =
- array(
- PEAR_ERROR_RETURN =>'PEAR_ERROR_RETURN',
- PEAR_ERROR_PRINT =>'PEAR_ERROR_PRINT',
- PEAR_ERROR_TRIGGER =>'PEAR_ERROR_TRIGGER',
- PEAR_ERROR_DIE =>'PEAR_ERROR_DIE',
- PEAR_ERROR_CALLBACK =>'PEAR_ERROR_CALLBACK',
- PEAR_ERROR_EXCEPTION =>'PEAR_ERROR_EXCEPTION',
- );
- print $indent . "echoing PEAR error-handling Variables:\n";
- print "$indent--------------------------------------\n";
- print $indent . "$name1:\n";
- $levels = get_error_mode($mode);
- print $indent;
- foreach($levels as $level) {
- print $pearLevelMap[$level] . ',';
- }
- print "\n";
- print $indent . "$name2:\n";
- if (is_string($options)) {
- print $indent . 'Callback: ' . $options. "()\n";
- } elseif (is_array($options)) {
- print $indent . 'Callback: ';
- if (is_string($options[0])) {
- print '(static) ' . $options[0] . '::';
- } else {
- print get_class($options[0]) . '->';
- }
- print $options[1] . "()\n";
- } else {
- print $indent . $levelMap[$options] . "\n";
- }
- print "$indent--------------------------------------\n";
-}
-
-function echoPEARStack($name, $stack)
-{
- print "stack $name:\n";
- foreach ($stack as $i => $item) {
- print "Index $i:\n";
- echoPEARVars('mode', $item[0], 'options', $item[1], ' ');
- }
-}
-
-function get_error_mode($err)
-{
- $ret = array();
- $level = 0;
- while($level < 7) {
- $a = ($err >> $level++) & 1;
- if ($a) {
- $ret[] = 1 << ($level - 1);
- }
- }
- return $ret;
-}
-print "testing static error-handling global code\n";
-echoPEARVars('_PEAR_default_error_mode', $GLOBALS['_PEAR_default_error_mode'],
- '_PEAR_default_error_options', $GLOBALS['_PEAR_default_error_options']);
-print "testing setErrorHandling\n";
-PEAR::setErrorHandling(PEAR_ERROR_CALLBACK, 'get_error_mode');
-echoPEARVars('_PEAR_default_error_mode', $GLOBALS['_PEAR_default_error_mode'],
- '_PEAR_default_error_options', $GLOBALS['_PEAR_default_error_options']);
-print "testing setErrorHandling array(obj, method)\n";
-$obj = new testErrorHandlingPEAR;
-PEAR::setErrorHandling(PEAR_ERROR_CALLBACK, array(&$obj, 'fakeHandleError'));
-echoPEARVars('_PEAR_default_error_mode', $GLOBALS['_PEAR_default_error_mode'],
- '_PEAR_default_error_options', $GLOBALS['_PEAR_default_error_options']);
-print "testing setErrorHandling array(class, method)\n";
-PEAR::setErrorHandling(PEAR_ERROR_CALLBACK, array('testErrorHandlingStatic', 'fakeHandleError'));
-echoPEARVars('_PEAR_default_error_mode', $GLOBALS['_PEAR_default_error_mode'],
- '_PEAR_default_error_options', $GLOBALS['_PEAR_default_error_options']);
-
-
-print "testing pushErrorHandling\n";
-PEAR::pushErrorHandling(PEAR_ERROR_CALLBACK, 'get_error_mode');
-echoPEARStack('_PEAR_error_handler_stack', $GLOBALS['_PEAR_error_handler_stack']);
-print "testing pushErrorHandling array(obj, method)\n";
-$obj = new testErrorHandlingPEAR;
-PEAR::pushErrorHandling(PEAR_ERROR_CALLBACK, array(&$obj, 'fakeHandleError'));
-echoPEARStack('_PEAR_error_handler_stack', $GLOBALS['_PEAR_error_handler_stack']);
-print "testing pushErrorHandling array(class, method)\n";
-PEAR::pushErrorHandling(PEAR_ERROR_CALLBACK, array('testErrorHandlingStatic', 'fakeHandleError'));
-echoPEARStack('_PEAR_error_handler_stack', $GLOBALS['_PEAR_error_handler_stack']);
-
-
-print "testing popErrorHandling\n";
-PEAR::popErrorHandling();
-echoPEARStack('_PEAR_error_handler_stack', $GLOBALS['_PEAR_error_handler_stack']);
-print "testing popErrorHandling\n";
-$obj = new testErrorHandlingPEAR;
-PEAR::popErrorHandling();
-echoPEARStack('_PEAR_error_handler_stack', $GLOBALS['_PEAR_error_handler_stack']);
-print "testing popErrorHandling\n";
-PEAR::popErrorHandling();
-echoPEARStack('_PEAR_error_handler_stack', $GLOBALS['_PEAR_error_handler_stack']);
-print "*******************************************\n";
-print "testing static error-handling in-class code\n";
-print "*******************************************\n";
-PEAR::setErrorHandling(PEAR_ERROR_RETURN, E_USER_NOTICE);
-$obj = new testErrorHandlingStatic;
-$obj->doSetErrorHandlingFunction();
-$obj->doSetErrorHandlingStatic();
-$obj->doSetErrorHandlingObject();
-$obj->doPushErrorHandlingFunction();
-$obj->doPushErrorHandlingStatic();
-$obj->doPushErrorHandlingObject();
-$obj->doPopErrorHandling();
-$obj->doPopErrorHandling();
-$obj->doPopErrorHandling();
-print "*******************************************\n";
-print "testing non-static error-handling in-class code\n";
-print "*******************************************\n";
-PEAR::setErrorHandling(PEAR_ERROR_RETURN, E_USER_NOTICE);
-$obj = new testErrorHandlingPEAR;
-$obj->doSetErrorHandlingFunction();
-$obj->doSetErrorHandlingStatic();
-$obj->doSetErrorHandlingObject();
-$obj->doPushErrorHandlingFunction();
-$obj->doPushErrorHandlingStatic();
-$obj->doPushErrorHandlingObject();
-$obj->doPopErrorHandling();
-$obj->doPopErrorHandling();
-$obj->doPopErrorHandling();
-
-?>
---EXPECT--
-testing static error-handling global code
-echoing PEAR error-handling Variables:
---------------------------------------
-_PEAR_default_error_mode:
-PEAR_ERROR_RETURN,
-_PEAR_default_error_options:
-E_USER_NOTICE
---------------------------------------
-testing setErrorHandling
-echoing PEAR error-handling Variables:
---------------------------------------
-_PEAR_default_error_mode:
-PEAR_ERROR_CALLBACK,
-_PEAR_default_error_options:
-Callback: get_error_mode()
---------------------------------------
-testing setErrorHandling array(obj, method)
-echoing PEAR error-handling Variables:
---------------------------------------
-_PEAR_default_error_mode:
-PEAR_ERROR_CALLBACK,
-_PEAR_default_error_options:
-Callback: testerrorhandlingpear->fakeHandleError()
---------------------------------------
-testing setErrorHandling array(class, method)
-echoing PEAR error-handling Variables:
---------------------------------------
-_PEAR_default_error_mode:
-PEAR_ERROR_CALLBACK,
-_PEAR_default_error_options:
-Callback: (static) testErrorHandlingStatic::fakeHandleError()
---------------------------------------
-testing pushErrorHandling
-stack _PEAR_error_handler_stack:
-Index 0:
- echoing PEAR error-handling Variables:
- --------------------------------------
- mode:
- PEAR_ERROR_CALLBACK,
- options:
- Callback: (static) testErrorHandlingStatic::fakeHandleError()
- --------------------------------------
-Index 1:
- echoing PEAR error-handling Variables:
- --------------------------------------
- mode:
- PEAR_ERROR_CALLBACK,
- options:
- Callback: get_error_mode()
- --------------------------------------
-testing pushErrorHandling array(obj, method)
-stack _PEAR_error_handler_stack:
-Index 0:
- echoing PEAR error-handling Variables:
- --------------------------------------
- mode:
- PEAR_ERROR_CALLBACK,
- options:
- Callback: (static) testErrorHandlingStatic::fakeHandleError()
- --------------------------------------
-Index 1:
- echoing PEAR error-handling Variables:
- --------------------------------------
- mode:
- PEAR_ERROR_CALLBACK,
- options:
- Callback: get_error_mode()
- --------------------------------------
-Index 2:
- echoing PEAR error-handling Variables:
- --------------------------------------
- mode:
- PEAR_ERROR_CALLBACK,
- options:
- Callback: get_error_mode()
- --------------------------------------
-Index 3:
- echoing PEAR error-handling Variables:
- --------------------------------------
- mode:
- PEAR_ERROR_CALLBACK,
- options:
- Callback: testerrorhandlingpear->fakeHandleError()
- --------------------------------------
-testing pushErrorHandling array(class, method)
-stack _PEAR_error_handler_stack:
-Index 0:
- echoing PEAR error-handling Variables:
- --------------------------------------
- mode:
- PEAR_ERROR_CALLBACK,
- options:
- Callback: (static) testErrorHandlingStatic::fakeHandleError()
- --------------------------------------
-Index 1:
- echoing PEAR error-handling Variables:
- --------------------------------------
- mode:
- PEAR_ERROR_CALLBACK,
- options:
- Callback: get_error_mode()
- --------------------------------------
-Index 2:
- echoing PEAR error-handling Variables:
- --------------------------------------
- mode:
- PEAR_ERROR_CALLBACK,
- options:
- Callback: get_error_mode()
- --------------------------------------
-Index 3:
- echoing PEAR error-handling Variables:
- --------------------------------------
- mode:
- PEAR_ERROR_CALLBACK,
- options:
- Callback: testerrorhandlingpear->fakeHandleError()
- --------------------------------------
-Index 4:
- echoing PEAR error-handling Variables:
- --------------------------------------
- mode:
- PEAR_ERROR_CALLBACK,
- options:
- Callback: testerrorhandlingpear->fakeHandleError()
- --------------------------------------
-Index 5:
- echoing PEAR error-handling Variables:
- --------------------------------------
- mode:
- PEAR_ERROR_CALLBACK,
- options:
- Callback: (static) testErrorHandlingStatic::fakeHandleError()
- --------------------------------------
-testing popErrorHandling
-stack _PEAR_error_handler_stack:
-Index 0:
- echoing PEAR error-handling Variables:
- --------------------------------------
- mode:
- PEAR_ERROR_CALLBACK,
- options:
- Callback: (static) testErrorHandlingStatic::fakeHandleError()
- --------------------------------------
-Index 1:
- echoing PEAR error-handling Variables:
- --------------------------------------
- mode:
- PEAR_ERROR_CALLBACK,
- options:
- Callback: get_error_mode()
- --------------------------------------
-Index 2:
- echoing PEAR error-handling Variables:
- --------------------------------------
- mode:
- PEAR_ERROR_CALLBACK,
- options:
- Callback: get_error_mode()
- --------------------------------------
-Index 3:
- echoing PEAR error-handling Variables:
- --------------------------------------
- mode:
- PEAR_ERROR_CALLBACK,
- options:
- Callback: testerrorhandlingpear->fakeHandleError()
- --------------------------------------
-testing popErrorHandling
-stack _PEAR_error_handler_stack:
-Index 0:
- echoing PEAR error-handling Variables:
- --------------------------------------
- mode:
- PEAR_ERROR_CALLBACK,
- options:
- Callback: (static) testErrorHandlingStatic::fakeHandleError()
- --------------------------------------
-Index 1:
- echoing PEAR error-handling Variables:
- --------------------------------------
- mode:
- PEAR_ERROR_CALLBACK,
- options:
- Callback: get_error_mode()
- --------------------------------------
-testing popErrorHandling
-stack _PEAR_error_handler_stack:
-*******************************************
-testing static error-handling in-class code
-*******************************************
-testing in class setErrorHandling
-echoing PEAR error-handling Variables:
---------------------------------------
-_PEAR_default_error_mode:
-PEAR_ERROR_CALLBACK,
-_PEAR_default_error_options:
-Callback: get_error_mode()
---------------------------------------
-testing in class setErrorHandling array(obj, method)
-echoing PEAR error-handling Variables:
---------------------------------------
-_PEAR_default_error_mode:
-PEAR_ERROR_CALLBACK,
-_PEAR_default_error_options:
-Callback: testerrorhandlingpear->fakeHandleError()
---------------------------------------
-testing in class setErrorHandling array(class, method)
-echoing PEAR error-handling Variables:
---------------------------------------
-_PEAR_default_error_mode:
-PEAR_ERROR_CALLBACK,
-_PEAR_default_error_options:
-Callback: (static) testErrorHandlingStatic::fakeHandleError()
---------------------------------------
-testing in class pushErrorHandling
-stack _PEAR_error_handler_stack:
-Index 0:
- echoing PEAR error-handling Variables:
- --------------------------------------
- mode:
- PEAR_ERROR_CALLBACK,
- options:
- Callback: (static) testErrorHandlingStatic::fakeHandleError()
- --------------------------------------
-Index 1:
- echoing PEAR error-handling Variables:
- --------------------------------------
- mode:
- PEAR_ERROR_CALLBACK,
- options:
- Callback: get_error_mode()
- --------------------------------------
-testing in class pushErrorHandling array(class, method)
-stack _PEAR_error_handler_stack:
-Index 0:
- echoing PEAR error-handling Variables:
- --------------------------------------
- mode:
- PEAR_ERROR_CALLBACK,
- options:
- Callback: (static) testErrorHandlingStatic::fakeHandleError()
- --------------------------------------
-Index 1:
- echoing PEAR error-handling Variables:
- --------------------------------------
- mode:
- PEAR_ERROR_CALLBACK,
- options:
- Callback: get_error_mode()
- --------------------------------------
-Index 2:
- echoing PEAR error-handling Variables:
- --------------------------------------
- mode:
- PEAR_ERROR_CALLBACK,
- options:
- Callback: get_error_mode()
- --------------------------------------
-Index 3:
- echoing PEAR error-handling Variables:
- --------------------------------------
- mode:
- PEAR_ERROR_CALLBACK,
- options:
- Callback: (static) testErrorHandlingStatic::fakeHandleError()
- --------------------------------------
-testing in class pushErrorHandling array(obj, method)
-stack _PEAR_error_handler_stack:
-Index 0:
- echoing PEAR error-handling Variables:
- --------------------------------------
- mode:
- PEAR_ERROR_CALLBACK,
- options:
- Callback: (static) testErrorHandlingStatic::fakeHandleError()
- --------------------------------------
-Index 1:
- echoing PEAR error-handling Variables:
- --------------------------------------
- mode:
- PEAR_ERROR_CALLBACK,
- options:
- Callback: get_error_mode()
- --------------------------------------
-Index 2:
- echoing PEAR error-handling Variables:
- --------------------------------------
- mode:
- PEAR_ERROR_CALLBACK,
- options:
- Callback: get_error_mode()
- --------------------------------------
-Index 3:
- echoing PEAR error-handling Variables:
- --------------------------------------
- mode:
- PEAR_ERROR_CALLBACK,
- options:
- Callback: (static) testErrorHandlingStatic::fakeHandleError()
- --------------------------------------
-Index 4:
- echoing PEAR error-handling Variables:
- --------------------------------------
- mode:
- PEAR_ERROR_CALLBACK,
- options:
- Callback: (static) testErrorHandlingStatic::fakeHandleError()
- --------------------------------------
-Index 5:
- echoing PEAR error-handling Variables:
- --------------------------------------
- mode:
- PEAR_ERROR_CALLBACK,
- options:
- Callback: testerrorhandlingpear->fakeHandleError()
- --------------------------------------
-testing in class popErrorHandling
-stack _PEAR_error_handler_stack:
-Index 0:
- echoing PEAR error-handling Variables:
- --------------------------------------
- mode:
- PEAR_ERROR_CALLBACK,
- options:
- Callback: (static) testErrorHandlingStatic::fakeHandleError()
- --------------------------------------
-Index 1:
- echoing PEAR error-handling Variables:
- --------------------------------------
- mode:
- PEAR_ERROR_CALLBACK,
- options:
- Callback: get_error_mode()
- --------------------------------------
-Index 2:
- echoing PEAR error-handling Variables:
- --------------------------------------
- mode:
- PEAR_ERROR_CALLBACK,
- options:
- Callback: get_error_mode()
- --------------------------------------
-Index 3:
- echoing PEAR error-handling Variables:
- --------------------------------------
- mode:
- PEAR_ERROR_CALLBACK,
- options:
- Callback: (static) testErrorHandlingStatic::fakeHandleError()
- --------------------------------------
-testing in class popErrorHandling
-stack _PEAR_error_handler_stack:
-Index 0:
- echoing PEAR error-handling Variables:
- --------------------------------------
- mode:
- PEAR_ERROR_CALLBACK,
- options:
- Callback: (static) testErrorHandlingStatic::fakeHandleError()
- --------------------------------------
-Index 1:
- echoing PEAR error-handling Variables:
- --------------------------------------
- mode:
- PEAR_ERROR_CALLBACK,
- options:
- Callback: get_error_mode()
- --------------------------------------
-testing in class popErrorHandling
-stack _PEAR_error_handler_stack:
-*******************************************
-testing non-static error-handling in-class code
-*******************************************
-testing in PEAR setErrorHandling
-echoing PEAR error-handling Variables:
---------------------------------------
-_PEAR_default_error_mode:
-PEAR_ERROR_RETURN,
-_PEAR_default_error_options:
-E_USER_NOTICE
---------------------------------------
-echoing PEAR error-handling Variables:
---------------------------------------
-$this->_default_error_mode:
-PEAR_ERROR_CALLBACK,
-$this->_default_error_options:
-Callback: get_error_mode()
---------------------------------------
-testing in PEAR setErrorHandling array(obj, method)
-echoing PEAR error-handling Variables:
---------------------------------------
-_PEAR_default_error_mode:
-PEAR_ERROR_RETURN,
-_PEAR_default_error_options:
-E_USER_NOTICE
---------------------------------------
-echoing PEAR error-handling Variables:
---------------------------------------
-$this->_default_error_mode:
-PEAR_ERROR_CALLBACK,
-$this->_default_error_options:
-Callback: testerrorhandlingpear->fakeHandleError()
---------------------------------------
-testing in PEAR setErrorHandling array(class, method)
-echoing PEAR error-handling Variables:
---------------------------------------
-_PEAR_default_error_mode:
-PEAR_ERROR_RETURN,
-_PEAR_default_error_options:
-E_USER_NOTICE
---------------------------------------
-echoing PEAR error-handling Variables:
---------------------------------------
-$this->_default_error_mode:
-PEAR_ERROR_CALLBACK,
-$this->_default_error_options:
-Callback: (static) testErrorHandlingStatic::fakeHandleError()
---------------------------------------
-testing in PEAR pushErrorHandling
-stack _PEAR_error_handler_stack:
-Index 0:
- echoing PEAR error-handling Variables:
- --------------------------------------
- mode:
- PEAR_ERROR_CALLBACK,
- options:
- Callback: (static) testErrorHandlingStatic::fakeHandleError()
- --------------------------------------
-Index 1:
- echoing PEAR error-handling Variables:
- --------------------------------------
- mode:
- PEAR_ERROR_CALLBACK,
- options:
- Callback: get_error_mode()
- --------------------------------------
-testing in PEAR pushErrorHandling array(class, method)
-stack _PEAR_error_handler_stack:
-Index 0:
- echoing PEAR error-handling Variables:
- --------------------------------------
- mode:
- PEAR_ERROR_CALLBACK,
- options:
- Callback: (static) testErrorHandlingStatic::fakeHandleError()
- --------------------------------------
-Index 1:
- echoing PEAR error-handling Variables:
- --------------------------------------
- mode:
- PEAR_ERROR_CALLBACK,
- options:
- Callback: get_error_mode()
- --------------------------------------
-Index 2:
- echoing PEAR error-handling Variables:
- --------------------------------------
- mode:
- PEAR_ERROR_CALLBACK,
- options:
- Callback: get_error_mode()
- --------------------------------------
-Index 3:
- echoing PEAR error-handling Variables:
- --------------------------------------
- mode:
- PEAR_ERROR_CALLBACK,
- options:
- Callback: (static) testErrorHandlingStatic::fakeHandleError()
- --------------------------------------
-testing in PEAR pushErrorHandling array(obj, method)
-stack _PEAR_error_handler_stack:
-Index 0:
- echoing PEAR error-handling Variables:
- --------------------------------------
- mode:
- PEAR_ERROR_CALLBACK,
- options:
- Callback: (static) testErrorHandlingStatic::fakeHandleError()
- --------------------------------------
-Index 1:
- echoing PEAR error-handling Variables:
- --------------------------------------
- mode:
- PEAR_ERROR_CALLBACK,
- options:
- Callback: get_error_mode()
- --------------------------------------
-Index 2:
- echoing PEAR error-handling Variables:
- --------------------------------------
- mode:
- PEAR_ERROR_CALLBACK,
- options:
- Callback: get_error_mode()
- --------------------------------------
-Index 3:
- echoing PEAR error-handling Variables:
- --------------------------------------
- mode:
- PEAR_ERROR_CALLBACK,
- options:
- Callback: (static) testErrorHandlingStatic::fakeHandleError()
- --------------------------------------
-Index 4:
- echoing PEAR error-handling Variables:
- --------------------------------------
- mode:
- PEAR_ERROR_CALLBACK,
- options:
- Callback: (static) testErrorHandlingStatic::fakeHandleError()
- --------------------------------------
-Index 5:
- echoing PEAR error-handling Variables:
- --------------------------------------
- mode:
- PEAR_ERROR_CALLBACK,
- options:
- Callback: testerrorhandlingpear->fakeHandleError()
- --------------------------------------
-testing in PEAR popErrorHandling
-stack _PEAR_error_handler_stack:
-Index 0:
- echoing PEAR error-handling Variables:
- --------------------------------------
- mode:
- PEAR_ERROR_CALLBACK,
- options:
- Callback: (static) testErrorHandlingStatic::fakeHandleError()
- --------------------------------------
-Index 1:
- echoing PEAR error-handling Variables:
- --------------------------------------
- mode:
- PEAR_ERROR_CALLBACK,
- options:
- Callback: get_error_mode()
- --------------------------------------
-Index 2:
- echoing PEAR error-handling Variables:
- --------------------------------------
- mode:
- PEAR_ERROR_CALLBACK,
- options:
- Callback: get_error_mode()
- --------------------------------------
-Index 3:
- echoing PEAR error-handling Variables:
- --------------------------------------
- mode:
- PEAR_ERROR_CALLBACK,
- options:
- Callback: (static) testErrorHandlingStatic::fakeHandleError()
- --------------------------------------
-testing in PEAR popErrorHandling
-stack _PEAR_error_handler_stack:
-Index 0:
- echoing PEAR error-handling Variables:
- --------------------------------------
- mode:
- PEAR_ERROR_CALLBACK,
- options:
- Callback: (static) testErrorHandlingStatic::fakeHandleError()
- --------------------------------------
-Index 1:
- echoing PEAR error-handling Variables:
- --------------------------------------
- mode:
- PEAR_ERROR_CALLBACK,
- options:
- Callback: get_error_mode()
- --------------------------------------
-testing in PEAR popErrorHandling
-stack _PEAR_error_handler_stack:
diff --git a/pear/tests/pear_autoloader.phpt b/pear/tests/pear_autoloader.phpt
deleted file mode 100644
index f25f4a4116..0000000000
--- a/pear/tests/pear_autoloader.phpt
+++ /dev/null
@@ -1,81 +0,0 @@
---TEST--
-PEAR_Autoloader
---SKIPIF--
-skip
-<?php /*if (!extension_loaded("overload")) die("skip\n"); */ ?>
---FILE--
-<?php
-
-include dirname(__FILE__)."/../PEAR/Autoloader.php";
-
-class test1 extends PEAR_Autoloader {
- function test1() {
- $this->addAutoload(array(
- 'testfunc1' => 'testclass1',
- 'testfunca' => 'testclass1',
- 'testfunc2' => 'testclass2',
- 'testfuncb' => 'testclass2',
- ));
- }
-}
-
-class testclass1 {
- function testfunc1($a) {
- print "testfunc1 arg=";var_dump($a);
- return 1;
- }
- function testfunca($a) {
- print "testfunca arg=";var_dump($a);
- return 2;
- }
-}
-
-class testclass2 {
- function testfunc2($b) {
- print "testfunc2 arg=";var_dump($b);
- return 3;
- }
- function testfuncb($b) {
- print "testfuncb arg=";var_dump($b);
- return 4;
- }
-}
-
-function dump($obj) {
- print "mapped methods:";
- foreach ($obj->_method_map as $method => $object) {
- print " $method";
- }
- print "\n";
-}
-
-function call($msg, $retval) {
- print "calling $msg returned $retval\n";
-}
-
-$obj = new test1;
-dump($obj);
-call("testfunc1", $obj->testfunc1(2));
-dump($obj);
-call("testfunca", $obj->testfunca(2));
-dump($obj);
-call("testfunc2", $obj->testfunc2(2));
-dump($obj);
-call("testfuncb", $obj->testfuncb(2));
-dump($obj);
-
-?>
---EXPECT--
-mapped methods:
-testfunc1 arg=int(2)
-calling testfunc1 returned 1
-mapped methods: testfunc1 testfunca
-testfunca arg=int(2)
-calling testfunca returned 2
-mapped methods: testfunc1 testfunca
-testfunc2 arg=int(2)
-calling testfunc2 returned 3
-mapped methods: testfunc1 testfunca testfunc2 testfuncb
-testfuncb arg=int(2)
-calling testfuncb returned 4
-mapped methods: testfunc1 testfunca testfunc2 testfuncb
diff --git a/pear/tests/pear_channelfile.phpt b/pear/tests/pear_channelfile.phpt
deleted file mode 100644
index 838c57fbcb..0000000000
--- a/pear/tests/pear_channelfile.phpt
+++ /dev/null
@@ -1,1545 +0,0 @@
---TEST--
-PEAR_Channelfile
---SKIPIF--
-<?php
-if (!getenv('PHP_PEAR_RUNTESTS')) {
- echo 'skip';
-}
-?>
---FILE--
-<?php
-
-error_reporting(E_ALL);
-chdir(dirname(__FILE__));
-include "PEAR/Channelfile.php";
-require_once 'PEAR/ErrorStack.php';
-
-function logStack($err)
-{
- echo "caught Error Stack error:\n";
- echo $err['message'] . "\n";
- echo 'code : ' . $err['code'] . "\n";
-}
-PEAR_ErrorStack::setDefaultCallback('logStack');
-echo "test default\n";
-$chf = new PEAR_ChannelFile;
-$chf->fromXmlString('<?xml version="1.0" encoding="ISO-8859-1" ?>
-<channel version="1.0">
- <name>PEAR5</name>
-<summary>PEAR packages for PHP 5</summary>
-<server>pear.php.net</server>
-<subchannels>
-<subchannel name="PEAR5.qa">
-<server>qa.pear.php.net</server>
-<summary>Quality Assurance releases of unmaintained packages</summary>
-<deps><dep type="pkg" rel="ge" version="1.4">PEAR</dep>
-<dep type="php" rel="ge" version="5.0.0"/></deps>
-</subchannel>
-<subchannel name="pear.boo">
-<server>boo.pear.php.net</server>
-<summary>booya</summary>
-<deps><dep type="pkg" rel="ge" version="1.5">PEAR</dep>
-<dep type="php" rel="ge" version="5.1.0"/></deps>
-</subchannel>
-</subchannels>
-<deps>
- <dep type="php" rel="ge" version="5.0.0"/>
-</deps>
-</channel>');
-
-echo "after parsing\n";
-var_dump($chf->validate());
-var_dump($chf->toArray());
-var_dump($chf->toXml());
-$chf->fromXmlString($chf->toXml());
-
-echo "after re-parsing\n";
-var_dump($chf->validate());
-var_dump($chf->toArray());
-var_dump($chf->toXml());
-
-echo "test compatibility\n";
-$chf = new PEAR_ChannelFile(true);
-$chf->fromXmlString('<?xml version="1.0" encoding="ISO-8859-1" ?>
-<channel version="1.0">
- <name>PEAR5</name>
-<summary>PEAR packages for PHP 5</summary>
-<server>pear.php.net</server>
-<subchannels>
-<subchannel name="PEAR5.qa">
-<server>qa.pear.php.net</server>
-<summary>Quality Assurance releases of unmaintained packages</summary>
-<deps><dep type="pkg" rel="ge" version="1.4">PEAR</dep>
-<dep type="php" rel="ge" version="5.0.0"/></deps>
-</subchannel>
-<subchannel name="pear.boo">
-<server>boo.pear.php.net</server>
-<summary>booya</summary>
-<deps><dep type="pkg" rel="ge" version="1.5">PEAR</dep>
-<dep type="php" rel="ge" version="5.1.0"/></deps>
-</subchannel>
-</subchannels>
-<deps>
- <dep type="php" rel="ge" version="5.0.0"/>
-</deps>
-</channel>');
-
-echo "after parsing\n";
-var_dump($chf->validate());
-var_dump($chf->toArray());
-var_dump($chf->toXml());
-$chf->fromXmlString($chf->toXml());
-
-echo "after re-parsing\n";
-var_dump($chf->validate());
-var_dump($chf->toArray());
-var_dump($chf->toXml());
-
-echo "\ntest add packagenameregex\n";
-$chf->setPackageNameRegex('[A-Z]+');
-var_dump($chf->toArray());
-var_dump($chf->toXml());
-$chf->fromXmlString($chf->toXml());
-
-echo "after re-parsing\n";
-var_dump($chf->validate());
-var_dump($chf->toArray());
-var_dump($chf->toXml());
-
-echo "\ntest add protocols\n";
-$chf->addProtocol('xml-rpc', '1.0', 'package.listall');
-$chf->addProtocol('xml-rpc', '1.0', 'release.list');
-$chf->addProtocol('get', '1.0');
-var_dump($chf->toArray());
-var_dump($chf->toXml());
-$chf->fromXmlString($chf->toXml());
-
-echo "after re-parsing\n";
-var_dump($chf->validate());
-var_dump($chf->toArray());
-var_dump($chf->toXml());
-
-echo "\ntest add mirror\n";
-$chf->addMirror('server', 'mirror.php.net');
-$chf->addMirrorProtocol('mirror.php.net', 'xml-rpc', '1.0', 'package.listall');
-$chf->addMirrorProtocol('mirror.php.net', 'xml-rpc', '1.0', 'release.list');
-var_dump($chf->toArray());
-var_dump($chf->toXml());
-$chf->fromXmlString($chf->toXml());
-
-echo "after re-parsing\n";
-var_dump($chf->validate());
-var_dump($chf->toArray());
-var_dump($chf->toXml());
-?>
---EXPECT--
-test default
-after parsing
-bool(true)
-array(6) {
- ["version"]=>
- string(3) "1.0"
- ["name"]=>
- string(5) "pear5"
- ["summary"]=>
- string(23) "PEAR packages for PHP 5"
- ["server"]=>
- string(12) "pear.php.net"
- ["subchannels"]=>
- array(2) {
- [1]=>
- array(4) {
- ["name"]=>
- string(8) "pear5.qa"
- ["server"]=>
- string(15) "qa.pear.php.net"
- ["summary"]=>
- string(51) "Quality Assurance releases of unmaintained packages"
- ["deps"]=>
- array(2) {
- [1]=>
- array(4) {
- ["type"]=>
- string(3) "pkg"
- ["rel"]=>
- string(2) "ge"
- ["version"]=>
- string(3) "1.4"
- ["name"]=>
- string(4) "PEAR"
- }
- [2]=>
- array(3) {
- ["type"]=>
- string(3) "php"
- ["rel"]=>
- string(2) "ge"
- ["version"]=>
- string(5) "5.0.0"
- }
- }
- }
- [2]=>
- array(4) {
- ["name"]=>
- string(8) "pear.boo"
- ["server"]=>
- string(16) "boo.pear.php.net"
- ["summary"]=>
- string(5) "booya"
- ["deps"]=>
- array(2) {
- [1]=>
- array(4) {
- ["type"]=>
- string(3) "pkg"
- ["rel"]=>
- string(2) "ge"
- ["version"]=>
- string(3) "1.5"
- ["name"]=>
- string(4) "PEAR"
- }
- [2]=>
- array(3) {
- ["type"]=>
- string(3) "php"
- ["rel"]=>
- string(2) "ge"
- ["version"]=>
- string(5) "5.1.0"
- }
- }
- }
- }
- ["deps"]=>
- array(1) {
- [1]=>
- array(3) {
- ["type"]=>
- string(3) "php"
- ["rel"]=>
- string(2) "ge"
- ["version"]=>
- string(5) "5.0.0"
- }
- }
-}
-string(823) "<?xml version="1.0" encoding="ISO-8859-1" ?>
-<!DOCTYPE package SYSTEM "http://pear.php.net/dtd/channel-1.0">
-<channel version="1.0">
- <name>pear5</name>
- <summary>PEAR packages for PHP 5</summary>
- <server>pear.php.net</server>
- <subchannels>
- <subchannel name="pear5.qa" server="qa.pear.php.net">
- <summary>Quality Assurance releases of unmaintained packages</summary>
- <deps>
- <dep type="pkg" rel="ge" version="1.4">PEAR</dep>
- <dep type="php" rel="ge" version="5.0.0"/>
- </deps>
- </subchannel>
- <subchannel name="pear.boo" server="boo.pear.php.net">
- <summary>booya</summary>
- <deps>
- <dep type="pkg" rel="ge" version="1.5">PEAR</dep>
- <dep type="php" rel="ge" version="5.1.0"/>
- </deps>
- </subchannel>
- </subchannels>
- <deps>
- <dep type="php" rel="ge" version="5.0.0"/>
- </deps>
-</channel>
-"
-after re-parsing
-bool(true)
-array(6) {
- ["version"]=>
- string(3) "1.0"
- ["name"]=>
- string(5) "pear5"
- ["summary"]=>
- string(23) "PEAR packages for PHP 5"
- ["server"]=>
- string(12) "pear.php.net"
- ["subchannels"]=>
- array(2) {
- [1]=>
- array(4) {
- ["name"]=>
- string(8) "pear5.qa"
- ["server"]=>
- string(15) "qa.pear.php.net"
- ["summary"]=>
- string(51) "Quality Assurance releases of unmaintained packages"
- ["deps"]=>
- array(2) {
- [1]=>
- array(4) {
- ["type"]=>
- string(3) "pkg"
- ["rel"]=>
- string(2) "ge"
- ["version"]=>
- string(3) "1.4"
- ["name"]=>
- string(4) "PEAR"
- }
- [2]=>
- array(3) {
- ["type"]=>
- string(3) "php"
- ["rel"]=>
- string(2) "ge"
- ["version"]=>
- string(5) "5.0.0"
- }
- }
- }
- [2]=>
- array(4) {
- ["name"]=>
- string(8) "pear.boo"
- ["server"]=>
- string(16) "boo.pear.php.net"
- ["summary"]=>
- string(5) "booya"
- ["deps"]=>
- array(2) {
- [1]=>
- array(4) {
- ["type"]=>
- string(3) "pkg"
- ["rel"]=>
- string(2) "ge"
- ["version"]=>
- string(3) "1.5"
- ["name"]=>
- string(4) "PEAR"
- }
- [2]=>
- array(3) {
- ["type"]=>
- string(3) "php"
- ["rel"]=>
- string(2) "ge"
- ["version"]=>
- string(5) "5.1.0"
- }
- }
- }
- }
- ["deps"]=>
- array(1) {
- [1]=>
- array(3) {
- ["type"]=>
- string(3) "php"
- ["rel"]=>
- string(2) "ge"
- ["version"]=>
- string(5) "5.0.0"
- }
- }
-}
-string(823) "<?xml version="1.0" encoding="ISO-8859-1" ?>
-<!DOCTYPE package SYSTEM "http://pear.php.net/dtd/channel-1.0">
-<channel version="1.0">
- <name>pear5</name>
- <summary>PEAR packages for PHP 5</summary>
- <server>pear.php.net</server>
- <subchannels>
- <subchannel name="pear5.qa" server="qa.pear.php.net">
- <summary>Quality Assurance releases of unmaintained packages</summary>
- <deps>
- <dep type="pkg" rel="ge" version="1.4">PEAR</dep>
- <dep type="php" rel="ge" version="5.0.0"/>
- </deps>
- </subchannel>
- <subchannel name="pear.boo" server="boo.pear.php.net">
- <summary>booya</summary>
- <deps>
- <dep type="pkg" rel="ge" version="1.5">PEAR</dep>
- <dep type="php" rel="ge" version="5.1.0"/>
- </deps>
- </subchannel>
- </subchannels>
- <deps>
- <dep type="php" rel="ge" version="5.0.0"/>
- </deps>
-</channel>
-"
-test compatibility
-after parsing
-bool(true)
-array(6) {
- ["version"]=>
- string(3) "1.0"
- ["name"]=>
- string(5) "pear5"
- ["summary"]=>
- string(23) "PEAR packages for PHP 5"
- ["server"]=>
- string(12) "pear.php.net"
- ["subchannels"]=>
- array(2) {
- [1]=>
- array(4) {
- ["name"]=>
- string(8) "pear5.qa"
- ["server"]=>
- string(15) "qa.pear.php.net"
- ["summary"]=>
- string(51) "Quality Assurance releases of unmaintained packages"
- ["deps"]=>
- array(2) {
- [1]=>
- array(4) {
- ["type"]=>
- string(3) "pkg"
- ["rel"]=>
- string(2) "ge"
- ["version"]=>
- string(3) "1.4"
- ["name"]=>
- string(4) "PEAR"
- }
- [2]=>
- array(3) {
- ["type"]=>
- string(3) "php"
- ["rel"]=>
- string(2) "ge"
- ["version"]=>
- string(5) "5.0.0"
- }
- }
- }
- [2]=>
- array(4) {
- ["name"]=>
- string(8) "pear.boo"
- ["server"]=>
- string(16) "boo.pear.php.net"
- ["summary"]=>
- string(5) "booya"
- ["deps"]=>
- array(2) {
- [1]=>
- array(4) {
- ["type"]=>
- string(3) "pkg"
- ["rel"]=>
- string(2) "ge"
- ["version"]=>
- string(3) "1.5"
- ["name"]=>
- string(4) "PEAR"
- }
- [2]=>
- array(3) {
- ["type"]=>
- string(3) "php"
- ["rel"]=>
- string(2) "ge"
- ["version"]=>
- string(5) "5.1.0"
- }
- }
- }
- }
- ["deps"]=>
- array(1) {
- [1]=>
- array(3) {
- ["type"]=>
- string(3) "php"
- ["rel"]=>
- string(2) "ge"
- ["version"]=>
- string(5) "5.0.0"
- }
- }
-}
-string(823) "<?xml version="1.0" encoding="ISO-8859-1" ?>
-<!DOCTYPE package SYSTEM "http://pear.php.net/dtd/channel-1.0">
-<channel version="1.0">
- <name>pear5</name>
- <summary>PEAR packages for PHP 5</summary>
- <server>pear.php.net</server>
- <subchannels>
- <subchannel name="pear5.qa" server="qa.pear.php.net">
- <summary>Quality Assurance releases of unmaintained packages</summary>
- <deps>
- <dep type="pkg" rel="ge" version="1.4">PEAR</dep>
- <dep type="php" rel="ge" version="5.0.0"/>
- </deps>
- </subchannel>
- <subchannel name="pear.boo" server="boo.pear.php.net">
- <summary>booya</summary>
- <deps>
- <dep type="pkg" rel="ge" version="1.5">PEAR</dep>
- <dep type="php" rel="ge" version="5.1.0"/>
- </deps>
- </subchannel>
- </subchannels>
- <deps>
- <dep type="php" rel="ge" version="5.0.0"/>
- </deps>
-</channel>
-"
-after re-parsing
-bool(true)
-array(6) {
- ["version"]=>
- string(3) "1.0"
- ["name"]=>
- string(5) "pear5"
- ["summary"]=>
- string(23) "PEAR packages for PHP 5"
- ["server"]=>
- string(12) "pear.php.net"
- ["subchannels"]=>
- array(2) {
- [1]=>
- array(4) {
- ["name"]=>
- string(8) "pear5.qa"
- ["server"]=>
- string(15) "qa.pear.php.net"
- ["summary"]=>
- string(51) "Quality Assurance releases of unmaintained packages"
- ["deps"]=>
- array(2) {
- [1]=>
- array(4) {
- ["type"]=>
- string(3) "pkg"
- ["rel"]=>
- string(2) "ge"
- ["version"]=>
- string(3) "1.4"
- ["name"]=>
- string(4) "PEAR"
- }
- [2]=>
- array(3) {
- ["type"]=>
- string(3) "php"
- ["rel"]=>
- string(2) "ge"
- ["version"]=>
- string(5) "5.0.0"
- }
- }
- }
- [2]=>
- array(4) {
- ["name"]=>
- string(8) "pear.boo"
- ["server"]=>
- string(16) "boo.pear.php.net"
- ["summary"]=>
- string(5) "booya"
- ["deps"]=>
- array(2) {
- [1]=>
- array(4) {
- ["type"]=>
- string(3) "pkg"
- ["rel"]=>
- string(2) "ge"
- ["version"]=>
- string(3) "1.5"
- ["name"]=>
- string(4) "PEAR"
- }
- [2]=>
- array(3) {
- ["type"]=>
- string(3) "php"
- ["rel"]=>
- string(2) "ge"
- ["version"]=>
- string(5) "5.1.0"
- }
- }
- }
- }
- ["deps"]=>
- array(1) {
- [1]=>
- array(3) {
- ["type"]=>
- string(3) "php"
- ["rel"]=>
- string(2) "ge"
- ["version"]=>
- string(5) "5.0.0"
- }
- }
-}
-string(823) "<?xml version="1.0" encoding="ISO-8859-1" ?>
-<!DOCTYPE package SYSTEM "http://pear.php.net/dtd/channel-1.0">
-<channel version="1.0">
- <name>pear5</name>
- <summary>PEAR packages for PHP 5</summary>
- <server>pear.php.net</server>
- <subchannels>
- <subchannel name="pear5.qa" server="qa.pear.php.net">
- <summary>Quality Assurance releases of unmaintained packages</summary>
- <deps>
- <dep type="pkg" rel="ge" version="1.4">PEAR</dep>
- <dep type="php" rel="ge" version="5.0.0"/>
- </deps>
- </subchannel>
- <subchannel name="pear.boo" server="boo.pear.php.net">
- <summary>booya</summary>
- <deps>
- <dep type="pkg" rel="ge" version="1.5">PEAR</dep>
- <dep type="php" rel="ge" version="5.1.0"/>
- </deps>
- </subchannel>
- </subchannels>
- <deps>
- <dep type="php" rel="ge" version="5.0.0"/>
- </deps>
-</channel>
-"
-
-test add packagenameregex
-array(7) {
- ["version"]=>
- string(3) "1.0"
- ["name"]=>
- string(5) "pear5"
- ["summary"]=>
- string(23) "PEAR packages for PHP 5"
- ["server"]=>
- string(12) "pear.php.net"
- ["subchannels"]=>
- array(2) {
- [1]=>
- array(4) {
- ["name"]=>
- string(8) "pear5.qa"
- ["server"]=>
- string(15) "qa.pear.php.net"
- ["summary"]=>
- string(51) "Quality Assurance releases of unmaintained packages"
- ["deps"]=>
- array(2) {
- [1]=>
- array(4) {
- ["type"]=>
- string(3) "pkg"
- ["rel"]=>
- string(2) "ge"
- ["version"]=>
- string(3) "1.4"
- ["name"]=>
- string(4) "PEAR"
- }
- [2]=>
- array(3) {
- ["type"]=>
- string(3) "php"
- ["rel"]=>
- string(2) "ge"
- ["version"]=>
- string(5) "5.0.0"
- }
- }
- }
- [2]=>
- array(4) {
- ["name"]=>
- string(8) "pear.boo"
- ["server"]=>
- string(16) "boo.pear.php.net"
- ["summary"]=>
- string(5) "booya"
- ["deps"]=>
- array(2) {
- [1]=>
- array(4) {
- ["type"]=>
- string(3) "pkg"
- ["rel"]=>
- string(2) "ge"
- ["version"]=>
- string(3) "1.5"
- ["name"]=>
- string(4) "PEAR"
- }
- [2]=>
- array(3) {
- ["type"]=>
- string(3) "php"
- ["rel"]=>
- string(2) "ge"
- ["version"]=>
- string(5) "5.1.0"
- }
- }
- }
- }
- ["deps"]=>
- array(1) {
- [1]=>
- array(3) {
- ["type"]=>
- string(3) "php"
- ["rel"]=>
- string(2) "ge"
- ["version"]=>
- string(5) "5.0.0"
- }
- }
- ["packagenameregex"]=>
- string(6) "[A-Z]+"
-}
-string(868) "<?xml version="1.0" encoding="ISO-8859-1" ?>
-<!DOCTYPE package SYSTEM "http://pear.php.net/dtd/channel-1.0">
-<channel version="1.0">
- <name>pear5</name>
- <summary>PEAR packages for PHP 5</summary>
- <server>pear.php.net</server>
- <packagenameregex>[A-Z]+</packagenameregex>
- <subchannels>
- <subchannel name="pear5.qa" server="qa.pear.php.net">
- <summary>Quality Assurance releases of unmaintained packages</summary>
- <deps>
- <dep type="pkg" rel="ge" version="1.4">PEAR</dep>
- <dep type="php" rel="ge" version="5.0.0"/>
- </deps>
- </subchannel>
- <subchannel name="pear.boo" server="boo.pear.php.net">
- <summary>booya</summary>
- <deps>
- <dep type="pkg" rel="ge" version="1.5">PEAR</dep>
- <dep type="php" rel="ge" version="5.1.0"/>
- </deps>
- </subchannel>
- </subchannels>
- <deps>
- <dep type="php" rel="ge" version="5.0.0"/>
- </deps>
-</channel>
-"
-after re-parsing
-bool(true)
-array(7) {
- ["version"]=>
- string(3) "1.0"
- ["name"]=>
- string(5) "pear5"
- ["summary"]=>
- string(23) "PEAR packages for PHP 5"
- ["server"]=>
- string(12) "pear.php.net"
- ["packagenameregex"]=>
- string(6) "[A-Z]+"
- ["subchannels"]=>
- array(2) {
- [1]=>
- array(4) {
- ["name"]=>
- string(8) "pear5.qa"
- ["server"]=>
- string(15) "qa.pear.php.net"
- ["summary"]=>
- string(51) "Quality Assurance releases of unmaintained packages"
- ["deps"]=>
- array(2) {
- [1]=>
- array(4) {
- ["type"]=>
- string(3) "pkg"
- ["rel"]=>
- string(2) "ge"
- ["version"]=>
- string(3) "1.4"
- ["name"]=>
- string(4) "PEAR"
- }
- [2]=>
- array(3) {
- ["type"]=>
- string(3) "php"
- ["rel"]=>
- string(2) "ge"
- ["version"]=>
- string(5) "5.0.0"
- }
- }
- }
- [2]=>
- array(4) {
- ["name"]=>
- string(8) "pear.boo"
- ["server"]=>
- string(16) "boo.pear.php.net"
- ["summary"]=>
- string(5) "booya"
- ["deps"]=>
- array(2) {
- [1]=>
- array(4) {
- ["type"]=>
- string(3) "pkg"
- ["rel"]=>
- string(2) "ge"
- ["version"]=>
- string(3) "1.5"
- ["name"]=>
- string(4) "PEAR"
- }
- [2]=>
- array(3) {
- ["type"]=>
- string(3) "php"
- ["rel"]=>
- string(2) "ge"
- ["version"]=>
- string(5) "5.1.0"
- }
- }
- }
- }
- ["deps"]=>
- array(1) {
- [1]=>
- array(3) {
- ["type"]=>
- string(3) "php"
- ["rel"]=>
- string(2) "ge"
- ["version"]=>
- string(5) "5.0.0"
- }
- }
-}
-string(868) "<?xml version="1.0" encoding="ISO-8859-1" ?>
-<!DOCTYPE package SYSTEM "http://pear.php.net/dtd/channel-1.0">
-<channel version="1.0">
- <name>pear5</name>
- <summary>PEAR packages for PHP 5</summary>
- <server>pear.php.net</server>
- <packagenameregex>[A-Z]+</packagenameregex>
- <subchannels>
- <subchannel name="pear5.qa" server="qa.pear.php.net">
- <summary>Quality Assurance releases of unmaintained packages</summary>
- <deps>
- <dep type="pkg" rel="ge" version="1.4">PEAR</dep>
- <dep type="php" rel="ge" version="5.0.0"/>
- </deps>
- </subchannel>
- <subchannel name="pear.boo" server="boo.pear.php.net">
- <summary>booya</summary>
- <deps>
- <dep type="pkg" rel="ge" version="1.5">PEAR</dep>
- <dep type="php" rel="ge" version="5.1.0"/>
- </deps>
- </subchannel>
- </subchannels>
- <deps>
- <dep type="php" rel="ge" version="5.0.0"/>
- </deps>
-</channel>
-"
-
-test add protocols
-array(8) {
- ["version"]=>
- string(3) "1.0"
- ["name"]=>
- string(5) "pear5"
- ["summary"]=>
- string(23) "PEAR packages for PHP 5"
- ["server"]=>
- string(12) "pear.php.net"
- ["packagenameregex"]=>
- string(6) "[A-Z]+"
- ["subchannels"]=>
- array(2) {
- [1]=>
- array(4) {
- ["name"]=>
- string(8) "pear5.qa"
- ["server"]=>
- string(15) "qa.pear.php.net"
- ["summary"]=>
- string(51) "Quality Assurance releases of unmaintained packages"
- ["deps"]=>
- array(2) {
- [1]=>
- array(4) {
- ["type"]=>
- string(3) "pkg"
- ["rel"]=>
- string(2) "ge"
- ["version"]=>
- string(3) "1.4"
- ["name"]=>
- string(4) "PEAR"
- }
- [2]=>
- array(3) {
- ["type"]=>
- string(3) "php"
- ["rel"]=>
- string(2) "ge"
- ["version"]=>
- string(5) "5.0.0"
- }
- }
- }
- [2]=>
- array(4) {
- ["name"]=>
- string(8) "pear.boo"
- ["server"]=>
- string(16) "boo.pear.php.net"
- ["summary"]=>
- string(5) "booya"
- ["deps"]=>
- array(2) {
- [1]=>
- array(4) {
- ["type"]=>
- string(3) "pkg"
- ["rel"]=>
- string(2) "ge"
- ["version"]=>
- string(3) "1.5"
- ["name"]=>
- string(4) "PEAR"
- }
- [2]=>
- array(3) {
- ["type"]=>
- string(3) "php"
- ["rel"]=>
- string(2) "ge"
- ["version"]=>
- string(5) "5.1.0"
- }
- }
- }
- }
- ["deps"]=>
- array(1) {
- [1]=>
- array(3) {
- ["type"]=>
- string(3) "php"
- ["rel"]=>
- string(2) "ge"
- ["version"]=>
- string(5) "5.0.0"
- }
- }
- ["provides"]=>
- array(3) {
- [1]=>
- array(3) {
- ["type"]=>
- string(7) "xml-rpc"
- ["version"]=>
- string(3) "1.0"
- ["name"]=>
- string(15) "package.listall"
- }
- [2]=>
- array(3) {
- ["type"]=>
- string(7) "xml-rpc"
- ["version"]=>
- string(3) "1.0"
- ["name"]=>
- string(12) "release.list"
- }
- [3]=>
- array(2) {
- ["type"]=>
- string(3) "get"
- ["version"]=>
- string(3) "1.0"
- }
- }
-}
-string(1065) "<?xml version="1.0" encoding="ISO-8859-1" ?>
-<!DOCTYPE package SYSTEM "http://pear.php.net/dtd/channel-1.0">
-<channel version="1.0">
- <name>pear5</name>
- <summary>PEAR packages for PHP 5</summary>
- <server>pear.php.net</server>
- <provides>
- <protocol type="xml-rpc" version="1.0">package.listall</protocol>
- <protocol type="xml-rpc" version="1.0">release.list</protocol>
- <protocol type="get" version="1.0"/>
- </provides>
- <packagenameregex>[A-Z]+</packagenameregex>
- <subchannels>
- <subchannel name="pear5.qa" server="qa.pear.php.net">
- <summary>Quality Assurance releases of unmaintained packages</summary>
- <deps>
- <dep type="pkg" rel="ge" version="1.4">PEAR</dep>
- <dep type="php" rel="ge" version="5.0.0"/>
- </deps>
- </subchannel>
- <subchannel name="pear.boo" server="boo.pear.php.net">
- <summary>booya</summary>
- <deps>
- <dep type="pkg" rel="ge" version="1.5">PEAR</dep>
- <dep type="php" rel="ge" version="5.1.0"/>
- </deps>
- </subchannel>
- </subchannels>
- <deps>
- <dep type="php" rel="ge" version="5.0.0"/>
- </deps>
-</channel>
-"
-after re-parsing
-bool(true)
-array(8) {
- ["version"]=>
- string(3) "1.0"
- ["name"]=>
- string(5) "pear5"
- ["summary"]=>
- string(23) "PEAR packages for PHP 5"
- ["server"]=>
- string(12) "pear.php.net"
- ["provides"]=>
- array(3) {
- [1]=>
- array(3) {
- ["type"]=>
- string(7) "xml-rpc"
- ["version"]=>
- string(3) "1.0"
- ["name"]=>
- string(15) "package.listall"
- }
- [2]=>
- array(3) {
- ["type"]=>
- string(7) "xml-rpc"
- ["version"]=>
- string(3) "1.0"
- ["name"]=>
- string(12) "release.list"
- }
- [3]=>
- array(2) {
- ["type"]=>
- string(3) "get"
- ["version"]=>
- string(3) "1.0"
- }
- }
- ["packagenameregex"]=>
- string(6) "[A-Z]+"
- ["subchannels"]=>
- array(2) {
- [1]=>
- array(4) {
- ["name"]=>
- string(8) "pear5.qa"
- ["server"]=>
- string(15) "qa.pear.php.net"
- ["summary"]=>
- string(51) "Quality Assurance releases of unmaintained packages"
- ["deps"]=>
- array(2) {
- [1]=>
- array(4) {
- ["type"]=>
- string(3) "pkg"
- ["rel"]=>
- string(2) "ge"
- ["version"]=>
- string(3) "1.4"
- ["name"]=>
- string(4) "PEAR"
- }
- [2]=>
- array(3) {
- ["type"]=>
- string(3) "php"
- ["rel"]=>
- string(2) "ge"
- ["version"]=>
- string(5) "5.0.0"
- }
- }
- }
- [2]=>
- array(4) {
- ["name"]=>
- string(8) "pear.boo"
- ["server"]=>
- string(16) "boo.pear.php.net"
- ["summary"]=>
- string(5) "booya"
- ["deps"]=>
- array(2) {
- [1]=>
- array(4) {
- ["type"]=>
- string(3) "pkg"
- ["rel"]=>
- string(2) "ge"
- ["version"]=>
- string(3) "1.5"
- ["name"]=>
- string(4) "PEAR"
- }
- [2]=>
- array(3) {
- ["type"]=>
- string(3) "php"
- ["rel"]=>
- string(2) "ge"
- ["version"]=>
- string(5) "5.1.0"
- }
- }
- }
- }
- ["deps"]=>
- array(1) {
- [1]=>
- array(3) {
- ["type"]=>
- string(3) "php"
- ["rel"]=>
- string(2) "ge"
- ["version"]=>
- string(5) "5.0.0"
- }
- }
-}
-string(1065) "<?xml version="1.0" encoding="ISO-8859-1" ?>
-<!DOCTYPE package SYSTEM "http://pear.php.net/dtd/channel-1.0">
-<channel version="1.0">
- <name>pear5</name>
- <summary>PEAR packages for PHP 5</summary>
- <server>pear.php.net</server>
- <provides>
- <protocol type="xml-rpc" version="1.0">package.listall</protocol>
- <protocol type="xml-rpc" version="1.0">release.list</protocol>
- <protocol type="get" version="1.0"/>
- </provides>
- <packagenameregex>[A-Z]+</packagenameregex>
- <subchannels>
- <subchannel name="pear5.qa" server="qa.pear.php.net">
- <summary>Quality Assurance releases of unmaintained packages</summary>
- <deps>
- <dep type="pkg" rel="ge" version="1.4">PEAR</dep>
- <dep type="php" rel="ge" version="5.0.0"/>
- </deps>
- </subchannel>
- <subchannel name="pear.boo" server="boo.pear.php.net">
- <summary>booya</summary>
- <deps>
- <dep type="pkg" rel="ge" version="1.5">PEAR</dep>
- <dep type="php" rel="ge" version="5.1.0"/>
- </deps>
- </subchannel>
- </subchannels>
- <deps>
- <dep type="php" rel="ge" version="5.0.0"/>
- </deps>
-</channel>
-"
-
-test add mirror
-array(9) {
- ["version"]=>
- string(3) "1.0"
- ["name"]=>
- string(5) "pear5"
- ["summary"]=>
- string(23) "PEAR packages for PHP 5"
- ["server"]=>
- string(12) "pear.php.net"
- ["provides"]=>
- array(3) {
- [1]=>
- array(3) {
- ["type"]=>
- string(7) "xml-rpc"
- ["version"]=>
- string(3) "1.0"
- ["name"]=>
- string(15) "package.listall"
- }
- [2]=>
- array(3) {
- ["type"]=>
- string(7) "xml-rpc"
- ["version"]=>
- string(3) "1.0"
- ["name"]=>
- string(12) "release.list"
- }
- [3]=>
- array(2) {
- ["type"]=>
- string(3) "get"
- ["version"]=>
- string(3) "1.0"
- }
- }
- ["packagenameregex"]=>
- string(6) "[A-Z]+"
- ["subchannels"]=>
- array(2) {
- [1]=>
- array(4) {
- ["name"]=>
- string(8) "pear5.qa"
- ["server"]=>
- string(15) "qa.pear.php.net"
- ["summary"]=>
- string(51) "Quality Assurance releases of unmaintained packages"
- ["deps"]=>
- array(2) {
- [1]=>
- array(4) {
- ["type"]=>
- string(3) "pkg"
- ["rel"]=>
- string(2) "ge"
- ["version"]=>
- string(3) "1.4"
- ["name"]=>
- string(4) "PEAR"
- }
- [2]=>
- array(3) {
- ["type"]=>
- string(3) "php"
- ["rel"]=>
- string(2) "ge"
- ["version"]=>
- string(5) "5.0.0"
- }
- }
- }
- [2]=>
- array(4) {
- ["name"]=>
- string(8) "pear.boo"
- ["server"]=>
- string(16) "boo.pear.php.net"
- ["summary"]=>
- string(5) "booya"
- ["deps"]=>
- array(2) {
- [1]=>
- array(4) {
- ["type"]=>
- string(3) "pkg"
- ["rel"]=>
- string(2) "ge"
- ["version"]=>
- string(3) "1.5"
- ["name"]=>
- string(4) "PEAR"
- }
- [2]=>
- array(3) {
- ["type"]=>
- string(3) "php"
- ["rel"]=>
- string(2) "ge"
- ["version"]=>
- string(5) "5.1.0"
- }
- }
- }
- }
- ["deps"]=>
- array(1) {
- [1]=>
- array(3) {
- ["type"]=>
- string(3) "php"
- ["rel"]=>
- string(2) "ge"
- ["version"]=>
- string(5) "5.0.0"
- }
- }
- ["mirrors"]=>
- array(1) {
- [1]=>
- array(3) {
- ["type"]=>
- string(6) "server"
- ["name"]=>
- string(14) "mirror.php.net"
- ["provides"]=>
- array(2) {
- [1]=>
- array(3) {
- ["type"]=>
- string(7) "xml-rpc"
- ["version"]=>
- string(3) "1.0"
- ["name"]=>
- string(15) "package.listall"
- }
- [2]=>
- array(3) {
- ["type"]=>
- string(7) "xml-rpc"
- ["version"]=>
- string(3) "1.0"
- ["name"]=>
- string(12) "release.list"
- }
- }
- }
- }
-}
-string(1313) "<?xml version="1.0" encoding="ISO-8859-1" ?>
-<!DOCTYPE package SYSTEM "http://pear.php.net/dtd/channel-1.0">
-<channel version="1.0">
- <name>pear5</name>
- <summary>PEAR packages for PHP 5</summary>
- <server>pear.php.net</server>
- <provides>
- <protocol type="xml-rpc" version="1.0">package.listall</protocol>
- <protocol type="xml-rpc" version="1.0">release.list</protocol>
- <protocol type="get" version="1.0"/>
- </provides>
- <packagenameregex>[A-Z]+</packagenameregex>
- <mirrors>
- <mirror type="server" name="mirror.php.net">
- <provides>
- <protocol type="xml-rpc" version="1.0">package.listall</protocol>
- <protocol type="xml-rpc" version="1.0">release.list</protocol>
- </provides>
- </mirror>
- </mirrors>
- <subchannels>
- <subchannel name="pear5.qa" server="qa.pear.php.net">
- <summary>Quality Assurance releases of unmaintained packages</summary>
- <deps>
- <dep type="pkg" rel="ge" version="1.4">PEAR</dep>
- <dep type="php" rel="ge" version="5.0.0"/>
- </deps>
- </subchannel>
- <subchannel name="pear.boo" server="boo.pear.php.net">
- <summary>booya</summary>
- <deps>
- <dep type="pkg" rel="ge" version="1.5">PEAR</dep>
- <dep type="php" rel="ge" version="5.1.0"/>
- </deps>
- </subchannel>
- </subchannels>
- <deps>
- <dep type="php" rel="ge" version="5.0.0"/>
- </deps>
-</channel>
-"
-after re-parsing
-bool(true)
-array(9) {
- ["version"]=>
- string(3) "1.0"
- ["name"]=>
- string(5) "pear5"
- ["summary"]=>
- string(23) "PEAR packages for PHP 5"
- ["server"]=>
- string(12) "pear.php.net"
- ["provides"]=>
- array(3) {
- [1]=>
- array(3) {
- ["type"]=>
- string(7) "xml-rpc"
- ["version"]=>
- string(3) "1.0"
- ["name"]=>
- string(15) "package.listall"
- }
- [2]=>
- array(3) {
- ["type"]=>
- string(7) "xml-rpc"
- ["version"]=>
- string(3) "1.0"
- ["name"]=>
- string(12) "release.list"
- }
- [3]=>
- array(2) {
- ["type"]=>
- string(3) "get"
- ["version"]=>
- string(3) "1.0"
- }
- }
- ["packagenameregex"]=>
- string(6) "[A-Z]+"
- ["mirrors"]=>
- array(1) {
- [1]=>
- array(3) {
- ["type"]=>
- string(6) "server"
- ["name"]=>
- string(14) "mirror.php.net"
- ["provides"]=>
- array(2) {
- [1]=>
- array(3) {
- ["type"]=>
- string(7) "xml-rpc"
- ["version"]=>
- string(3) "1.0"
- ["name"]=>
- string(15) "package.listall"
- }
- [2]=>
- array(3) {
- ["type"]=>
- string(7) "xml-rpc"
- ["version"]=>
- string(3) "1.0"
- ["name"]=>
- string(12) "release.list"
- }
- }
- }
- }
- ["subchannels"]=>
- array(2) {
- [1]=>
- array(4) {
- ["name"]=>
- string(8) "pear5.qa"
- ["server"]=>
- string(15) "qa.pear.php.net"
- ["summary"]=>
- string(51) "Quality Assurance releases of unmaintained packages"
- ["deps"]=>
- array(2) {
- [1]=>
- array(4) {
- ["type"]=>
- string(3) "pkg"
- ["rel"]=>
- string(2) "ge"
- ["version"]=>
- string(3) "1.4"
- ["name"]=>
- string(4) "PEAR"
- }
- [2]=>
- array(3) {
- ["type"]=>
- string(3) "php"
- ["rel"]=>
- string(2) "ge"
- ["version"]=>
- string(5) "5.0.0"
- }
- }
- }
- [2]=>
- array(4) {
- ["name"]=>
- string(8) "pear.boo"
- ["server"]=>
- string(16) "boo.pear.php.net"
- ["summary"]=>
- string(5) "booya"
- ["deps"]=>
- array(2) {
- [1]=>
- array(4) {
- ["type"]=>
- string(3) "pkg"
- ["rel"]=>
- string(2) "ge"
- ["version"]=>
- string(3) "1.5"
- ["name"]=>
- string(4) "PEAR"
- }
- [2]=>
- array(3) {
- ["type"]=>
- string(3) "php"
- ["rel"]=>
- string(2) "ge"
- ["version"]=>
- string(5) "5.1.0"
- }
- }
- }
- }
- ["deps"]=>
- array(1) {
- [1]=>
- array(3) {
- ["type"]=>
- string(3) "php"
- ["rel"]=>
- string(2) "ge"
- ["version"]=>
- string(5) "5.0.0"
- }
- }
-}
-string(1313) "<?xml version="1.0" encoding="ISO-8859-1" ?>
-<!DOCTYPE package SYSTEM "http://pear.php.net/dtd/channel-1.0">
-<channel version="1.0">
- <name>pear5</name>
- <summary>PEAR packages for PHP 5</summary>
- <server>pear.php.net</server>
- <provides>
- <protocol type="xml-rpc" version="1.0">package.listall</protocol>
- <protocol type="xml-rpc" version="1.0">release.list</protocol>
- <protocol type="get" version="1.0"/>
- </provides>
- <packagenameregex>[A-Z]+</packagenameregex>
- <mirrors>
- <mirror type="server" name="mirror.php.net">
- <provides>
- <protocol type="xml-rpc" version="1.0">package.listall</protocol>
- <protocol type="xml-rpc" version="1.0">release.list</protocol>
- </provides>
- </mirror>
- </mirrors>
- <subchannels>
- <subchannel name="pear5.qa" server="qa.pear.php.net">
- <summary>Quality Assurance releases of unmaintained packages</summary>
- <deps>
- <dep type="pkg" rel="ge" version="1.4">PEAR</dep>
- <dep type="php" rel="ge" version="5.0.0"/>
- </deps>
- </subchannel>
- <subchannel name="pear.boo" server="boo.pear.php.net">
- <summary>booya</summary>
- <deps>
- <dep type="pkg" rel="ge" version="1.5">PEAR</dep>
- <dep type="php" rel="ge" version="5.1.0"/>
- </deps>
- </subchannel>
- </subchannels>
- <deps>
- <dep type="php" rel="ge" version="5.0.0"/>
- </deps>
-</channel>
-" \ No newline at end of file
diff --git a/pear/tests/pear_common_analyzeSC.phpt b/pear/tests/pear_common_analyzeSC.phpt
deleted file mode 100644
index 0c15a66c8d..0000000000
--- a/pear/tests/pear_common_analyzeSC.phpt
+++ /dev/null
@@ -1,165 +0,0 @@
---TEST--
-PEAR_Common::analyzeSourceCode test
---SKIPIF--
-<?php
-if (!getenv('PHP_PEAR_RUNTESTS')) {
- echo 'skip';
-}
-if (!function_exists('token_get_all')) {
- echo 'skip';
-}
-?>
---FILE--
-<?php
-
-require_once "PEAR/Common.php";
-
-$x = PEAR_Common::analyzeSourceCode('=+"\\//452');
-echo "first test: returns false with non-existing filename? ";
-echo $x ? "no\n" : "yes\n";
-
-$testdir = dirname(__FILE__) . DIRECTORY_SEPARATOR . 'pear_common_analyzeSCtest';
-mkdir($testdir);
-
-$test1 = '
-<?php
-::error();
-?>
-';
-$fp = fopen($testdir . DIRECTORY_SEPARATOR . 'test1.php', 'w');
-fwrite($fp, $test1);
-fclose($fp);
-
-$ret = PEAR_Common::analyzeSourceCode($testdir . DIRECTORY_SEPARATOR . 'test1.php');
-echo "second test: returns false with invalid PHP? ";
-echo $ret ? "no\n" : "yes\n";
-unlink($testdir . DIRECTORY_SEPARATOR . 'test1.php');
-
-$test3 = '
-<?php
-class test
-{
- class test2 {
- }
-}
-?>
-';
-$fp = fopen($testdir . DIRECTORY_SEPARATOR . 'test3.php', 'w');
-fwrite($fp, $test3);
-fclose($fp);
-
-$ret = PEAR_Common::analyzeSourceCode($testdir . DIRECTORY_SEPARATOR . 'test3.php');
-echo "fourth test: returns false with invalid PHP? ";
-echo $ret ? "no\n" : "yes\n";
-unlink($testdir . DIRECTORY_SEPARATOR . 'test3.php');
-
-$test4 = '
-<?php
-function test()
-{
- class test2 {
- }
-}
-?>
-';
-$fp = fopen($testdir . DIRECTORY_SEPARATOR . 'test4.php', 'w');
-fwrite($fp, $test4);
-fclose($fp);
-
-$ret = PEAR_Common::analyzeSourceCode($testdir . DIRECTORY_SEPARATOR . 'test4.php');
-echo "fifth test: returns false with invalid PHP? ";
-echo $ret ? "no\n" : "yes\n";
-unlink($testdir . DIRECTORY_SEPARATOR . 'test4.php');
-
-$test5 = '
-<?php
-function test()
-{
-}
-
-if (trytofool) {
- function fool()
- {
- }
-}
-class test2 {
- function test2() {
- parent::unused();
- Greg::classes();
- $a = new Pierre;
- }
-}
-
-class blah extends test2 {
- /**
- * @nodep Stig
- */
- function blah()
- {
- Stig::rules();
- }
-}
-?>
-';
-$fp = fopen($testdir . DIRECTORY_SEPARATOR . 'test5.php', 'w');
-fwrite($fp, $test5);
-fclose($fp);
-
-$ret = PEAR_Common::analyzeSourceCode($testdir . DIRECTORY_SEPARATOR . 'test5.php');
-echo "sixth test: returns false with valid PHP? ";
-echo $ret ? "no\n" : "yes\n";
-$ret['source_file'] = str_replace(array(dirname(__FILE__),DIRECTORY_SEPARATOR), array('', '/'), $ret['source_file']);
-var_dump($ret);
-unlink($testdir . DIRECTORY_SEPARATOR . 'test5.php');
-
-rmdir($testdir);
-?>
---EXPECT--
-first test: returns false with non-existing filename? yes
-second test: returns false with invalid PHP? yes
-fourth test: returns false with invalid PHP? yes
-fifth test: returns false with invalid PHP? yes
-sixth test: returns false with valid PHP? no
-array(6) {
- ["source_file"]=>
- string(36) "/pear_common_analyzeSCtest/test5.php"
- ["declared_classes"]=>
- array(2) {
- [0]=>
- string(5) "test2"
- [1]=>
- string(4) "blah"
- }
- ["declared_methods"]=>
- array(2) {
- ["test2"]=>
- array(1) {
- [0]=>
- string(5) "test2"
- }
- ["blah"]=>
- array(1) {
- [0]=>
- string(4) "blah"
- }
- }
- ["declared_functions"]=>
- array(2) {
- [0]=>
- string(4) "test"
- [1]=>
- string(4) "fool"
- }
- ["used_classes"]=>
- array(2) {
- [0]=>
- string(4) "Greg"
- [1]=>
- string(6) "Pierre"
- }
- ["inheritance"]=>
- array(1) {
- ["blah"]=>
- string(5) "test2"
- }
-} \ No newline at end of file
diff --git a/pear/tests/pear_common_buildProvidesArray.phpt b/pear/tests/pear_common_buildProvidesArray.phpt
deleted file mode 100644
index 574ed4465c..0000000000
--- a/pear/tests/pear_common_buildProvidesArray.phpt
+++ /dev/null
@@ -1,152 +0,0 @@
---TEST--
-PEAR_Common::buildProvidesArray test
---SKIPIF--
-<?php
-if (!getenv('PHP_PEAR_RUNTESTS')) {
- echo 'skip';
-}
-if (!function_exists('token_get_all')) {
- echo 'skip';
-}
-?>
---FILE--
-<?php
-
-require_once "PEAR/Common.php";
-
-$testdir = dirname(__FILE__) . DIRECTORY_SEPARATOR . 'pear_common_buildProvidesArraytest';
-mkdir($testdir);
-
-$test5 = '
-<?php
-function test()
-{
-}
-
-if (trytofool) {
- function fool()
- {
- }
-}
-class test2 {
- function test2() {
- parent::unused();
- Greg::classes();
- $a = new Pierre;
- }
-}
-
-class blah extends test2 {
- /**
- * @nodep Stig
- */
- function blah()
- {
- Stig::rules();
- }
-}
-?>
-';
-$fp = fopen($testdir . DIRECTORY_SEPARATOR . 'test5.php', 'w');
-fwrite($fp, $test5);
-fclose($fp);
-
-$ret = PEAR_Common::analyzeSourceCode($testdir . DIRECTORY_SEPARATOR . 'test5.php');
-echo "pre-test: returns false with valid PHP? ";
-echo $ret ? "no\n" : "yes\n";
-$ret['source_file'] = str_replace(array(dirname(__FILE__),DIRECTORY_SEPARATOR), array('', '/'), $ret['source_file']);
-var_dump($ret);
-unlink($testdir . DIRECTORY_SEPARATOR . 'test5.php');
-$common = new PEAR_Common;
-$common->buildProvidesArray($ret);
-var_dump($common->pkginfo);
-rmdir($testdir);
-?>
---EXPECT--
-pre-test: returns false with valid PHP? no
-array(6) {
- ["source_file"]=>
- string(45) "/pear_common_buildProvidesArraytest/test5.php"
- ["declared_classes"]=>
- array(2) {
- [0]=>
- string(5) "test2"
- [1]=>
- string(4) "blah"
- }
- ["declared_methods"]=>
- array(2) {
- ["test2"]=>
- array(1) {
- [0]=>
- string(5) "test2"
- }
- ["blah"]=>
- array(1) {
- [0]=>
- string(4) "blah"
- }
- }
- ["declared_functions"]=>
- array(2) {
- [0]=>
- string(4) "test"
- [1]=>
- string(4) "fool"
- }
- ["used_classes"]=>
- array(2) {
- [0]=>
- string(4) "Greg"
- [1]=>
- string(6) "Pierre"
- }
- ["inheritance"]=>
- array(1) {
- ["blah"]=>
- string(5) "test2"
- }
-}
-array(1) {
- ["provides"]=>
- array(4) {
- ["class;test2"]=>
- array(3) {
- ["file"]=>
- string(9) "test5.php"
- ["type"]=>
- string(5) "class"
- ["name"]=>
- string(5) "test2"
- }
- ["class;blah"]=>
- array(4) {
- ["file"]=>
- string(9) "test5.php"
- ["type"]=>
- string(5) "class"
- ["name"]=>
- string(4) "blah"
- ["extends"]=>
- string(5) "test2"
- }
- ["function;test"]=>
- array(3) {
- ["file"]=>
- string(9) "test5.php"
- ["type"]=>
- string(8) "function"
- ["name"]=>
- string(4) "test"
- }
- ["function;fool"]=>
- array(3) {
- ["file"]=>
- string(9) "test5.php"
- ["type"]=>
- string(8) "function"
- ["name"]=>
- string(4) "fool"
- }
- }
-} \ No newline at end of file
diff --git a/pear/tests/pear_common_downloadHttp.phpt b/pear/tests/pear_common_downloadHttp.phpt
deleted file mode 100644
index 86f7cc2bf9..0000000000
--- a/pear/tests/pear_common_downloadHttp.phpt
+++ /dev/null
@@ -1,214 +0,0 @@
---TEST--
-PEAR_Common::downloadHttp test
---SKIPIF--
-<?php
-if (!getenv('PHP_PEAR_RUNTESTS')) {
- echo 'skip';
-}
-$fp = @fsockopen('pear.php.net', 80);
-if (!$fp) {
- echo 'skip';
-} else {
- fclose($fp);
-}
-?>
---FILE--
-<?php
-mkdir($temp_path = dirname(__FILE__) . DIRECTORY_SEPARATOR . 'testDownloadHttp');
-// make the fake configuration - we'll use one of these and it should work
-$config = serialize(array('master_server' => 'pear.php.net',
- 'php_dir' => $temp_path . DIRECTORY_SEPARATOR . 'php',
- 'ext_dir' => $temp_path . DIRECTORY_SEPARATOR . 'ext',
- 'data_dir' => $temp_path . DIRECTORY_SEPARATOR . 'data',
- 'doc_dir' => $temp_path . DIRECTORY_SEPARATOR . 'doc',
- 'test_dir' => $temp_path . DIRECTORY_SEPARATOR . 'test',
- 'bin_dir' => $temp_path . DIRECTORY_SEPARATOR . 'bin',));
-touch($temp_path . DIRECTORY_SEPARATOR . 'pear.conf');
-$fp = fopen($temp_path . DIRECTORY_SEPARATOR . 'pear.conf', 'w');
-fwrite($fp, $config);
-fclose($fp);
-touch($temp_path . DIRECTORY_SEPARATOR . 'pear.ini');
-$fp = fopen($temp_path . DIRECTORY_SEPARATOR . 'pear.ini', 'w');
-fwrite($fp, $config);
-fclose($fp);
-
-putenv('PHP_PEAR_SYSCONF_DIR=' . $temp_path);
-$home = getenv('HOME');
-if (!empty($home)) {
- // for PEAR_Config initialization
- putenv('HOME="'.$temp_path);
-}
-
-require_once "PEAR/Common.php";
-
-$common = &new PEAR_Common;
-
-PEAR::setErrorHandling(PEAR_ERROR_CALLBACK, 'catchit');
-
-function catchit($err)
-{
- echo "Caught error: " . $err->getMessage() . "\n";
-}
-
-echo "Test static:\n";
-
-echo "Simple: ";
-PEAR_Common::downloadHttp('http://test.pear.php.net/testdownload.tgz', $ui, $temp_path);
-$firstone = implode('', file(dirname(__FILE__) . DIRECTORY_SEPARATOR . 'testdownload.tgz'));
-$secondone = implode('', file($temp_path . DIRECTORY_SEPARATOR . 'testdownload.tgz'));
-echo ($firstone == $secondone) ? "passed\n" : "failed\n";
-
-echo "Simple fail:\n";
-PEAR_Common::downloadHttp('http://test.poop.php.net/stuff.tgz', $ui, $temp_path);
-
-echo "Test callback:\n";
-
-$ui = 'My UI';
-
-PEAR_Common::downloadHttp('http://test.pear.php.net/testdownload.tgz', $ui, $temp_path, 'myCallback');
-$firstone = implode('', file(dirname(__FILE__) . DIRECTORY_SEPARATOR . 'testdownload.tgz'));
-$secondone = implode('', file($temp_path . DIRECTORY_SEPARATOR . 'testdownload.tgz'));
-echo "Working Callback: ";
-echo ($firstone == $secondone) ? "passed\n" : "failed\n";
-
-
-function myCallback($message, $payload)
-{
- $stuff = serialize($payload);
- echo "Callback Message: $message\n";
- echo "Callback Payload: $stuff\n";
-}
-
-echo "Callback fail:\n";
-PEAR_Common::downloadHttp('http://test.poop.php.net/stuff.tgz', $ui, $temp_path, 'myCallback');
-
-cleanall($temp_path);
-
-// ------------------------------------------------------------------------- //
-
-function cleanall($dir)
-{
- $dp = opendir($dir);
- while ($ent = readdir($dp)) {
- if ($ent == '.' || $ent == '..') {
- continue;
- }
- if (is_dir($dir . DIRECTORY_SEPARATOR . $ent)) {
- cleanall($dir . DIRECTORY_SEPARATOR . $ent);
- } else {
- unlink($dir . DIRECTORY_SEPARATOR . $ent);
- }
- }
- closedir($dp);
- rmdir($dir);
-}
-?>
---EXPECT--
-Test static:
-Simple: passed
-Simple fail:
-Caught error: Connection to `test.poop.php.net:80' failed: The operation completed successfully.
-
-Test callback:
-Callback Message: setup
-Callback Payload: a:1:{i:0;s:5:"My UI";}
-Callback Message: message
-Callback Payload: s:35:"Using HTTP proxy test.pear.php.net:";
-Callback Message: saveas
-Callback Payload: s:16:"testdownload.tgz";
-Callback Message: start
-Callback Payload: a:2:{i:0;s:16:"testdownload.tgz";i:1;s:5:"41655";}
-Callback Message: bytesread
-Callback Payload: i:1024;
-Callback Message: bytesread
-Callback Payload: i:2048;
-Callback Message: bytesread
-Callback Payload: i:3072;
-Callback Message: bytesread
-Callback Payload: i:4096;
-Callback Message: bytesread
-Callback Payload: i:5120;
-Callback Message: bytesread
-Callback Payload: i:6144;
-Callback Message: bytesread
-Callback Payload: i:7168;
-Callback Message: bytesread
-Callback Payload: i:8192;
-Callback Message: bytesread
-Callback Payload: i:9216;
-Callback Message: bytesread
-Callback Payload: i:10240;
-Callback Message: bytesread
-Callback Payload: i:11264;
-Callback Message: bytesread
-Callback Payload: i:12288;
-Callback Message: bytesread
-Callback Payload: i:13312;
-Callback Message: bytesread
-Callback Payload: i:14336;
-Callback Message: bytesread
-Callback Payload: i:15360;
-Callback Message: bytesread
-Callback Payload: i:16384;
-Callback Message: bytesread
-Callback Payload: i:17408;
-Callback Message: bytesread
-Callback Payload: i:18432;
-Callback Message: bytesread
-Callback Payload: i:19456;
-Callback Message: bytesread
-Callback Payload: i:20480;
-Callback Message: bytesread
-Callback Payload: i:21504;
-Callback Message: bytesread
-Callback Payload: i:22528;
-Callback Message: bytesread
-Callback Payload: i:23552;
-Callback Message: bytesread
-Callback Payload: i:24576;
-Callback Message: bytesread
-Callback Payload: i:25600;
-Callback Message: bytesread
-Callback Payload: i:26624;
-Callback Message: bytesread
-Callback Payload: i:27648;
-Callback Message: bytesread
-Callback Payload: i:28672;
-Callback Message: bytesread
-Callback Payload: i:29696;
-Callback Message: bytesread
-Callback Payload: i:30720;
-Callback Message: bytesread
-Callback Payload: i:31744;
-Callback Message: bytesread
-Callback Payload: i:32768;
-Callback Message: bytesread
-Callback Payload: i:33792;
-Callback Message: bytesread
-Callback Payload: i:34816;
-Callback Message: bytesread
-Callback Payload: i:35840;
-Callback Message: bytesread
-Callback Payload: i:36864;
-Callback Message: bytesread
-Callback Payload: i:37888;
-Callback Message: bytesread
-Callback Payload: i:38912;
-Callback Message: bytesread
-Callback Payload: i:39936;
-Callback Message: bytesread
-Callback Payload: i:40960;
-Callback Message: bytesread
-Callback Payload: i:41655;
-Callback Message: done
-Callback Payload: i:41655;
-Working Callback: passed
-Callback fail:
-Callback Message: setup
-Callback Payload: a:1:{i:0;s:5:"My UI";}
-Callback Message: message
-Callback Payload: s:35:"Using HTTP proxy test.poop.php.net:";
-Callback Message: connfailed
-Callback Payload: a:4:{i:0;s:17:"test.poop.php.net";i:1;i:80;i:2;i:0;i:3;s:39:"The operation completed successfully.
-";}
-Caught error: Connection to `test.poop.php.net:80' failed: The operation completed successfully. \ No newline at end of file
diff --git a/pear/tests/pear_common_infoFromString.phpt b/pear/tests/pear_common_infoFromString.phpt
deleted file mode 100644
index f3d40464c6..0000000000
--- a/pear/tests/pear_common_infoFromString.phpt
+++ /dev/null
@@ -1,1752 +0,0 @@
---TEST--
-PEAR_Common::infoFromString test
---SKIPIF--
-<?php
-if (!getenv('PHP_PEAR_RUNTESTS')) {
- echo 'skip';
-}
-if (!function_exists('token_get_all')) {
- echo 'skip';
-}
-?>
---FILE--
-<?php
-putenv('PHP_PEAR_SYSCONF_DIR=' . dirname(__FILE__));
-
-require_once "PEAR/Common.php";
-
-$common = &new PEAR_Common;
-
-PEAR::setErrorHandling(PEAR_ERROR_CALLBACK, 'catchit');
-
-function catchit($err)
-{
- echo "Caught error: " . $err->getMessage() . "\n";
-}
-
-echo "Test invalid XML\n";
-
-$common->infoFromString('\\goober');
-
-echo "Test valid XML, not a package.xml\n";
-
-$common->infoFromString('<?xml version="1.0" encoding="ISO-8859-1" ?>' .
- "\n<grobbage></grobbage>");
-
-echo "Test valid package.xml, invalid version number\n";
-
-$common->infoFromString('<?xml version="1.0" encoding="ISO-8859-1" ?>' .
- '<package version="10000000"></package>');
-
-echo "Test empty package.xml\n";
-
-$ret = $common->infoFromString('<?xml version="1.0" encoding="ISO-8859-1" ?>' .
- '<package version="1.0"></package>');
-
-var_dump($ret);
-
-echo "Test 1\n";
-
-$ret = $common->infoFromString('<?xml version="1.0" encoding="ISO-8859-1" ?>' .
- '<package version="1.0"><name>test</name></package>');
-
-var_dump($ret);
-
-echo "Test 2\n";
-
-$ret = $common->infoFromString('<?xml version="1.0" encoding="ISO-8859-1" ?>' .
- '<package version="1.0"><name>test</name><summary>PEAR test</summary>' .
- '</package>');
-
-var_dump($ret);
-
-echo "Test 3\n";
-
-$ret = $common->infoFromString('<?xml version="1.0" encoding="ISO-8859-1" ?>' .
- '<package version="1.0"><name>test</name><summary>PEAR test</summary>' .
- '<description>The test</description></package>');
-
-var_dump($ret);
-
-echo "Test 4\n";
-
-$ret = $common->infoFromString('<?xml version="1.0" encoding="ISO-8859-1" ?>' .
- '<package version="1.0"><name>test</name><summary>PEAR test</summary>' .
- '<description>The test</description><license>PHP License</license></package>');
-
-var_dump($ret);
-
-echo "Test 5\n";
-
-$ret = $common->infoFromString('<?xml version="1.0" encoding="ISO-8859-1" ?>' .
- '<package version="1.0"><name>test</name><summary>PEAR test</summary>' .
- '<description>The test</description><license>PHP License</license> <maintainers>
- <maintainer>
- <user>test</user>
- <role>lead</role>
- <name>test tester</name>
- <email>test@php.net</email>
- </maintainer></maintainers>
-</package>');
-
-var_dump($ret);
-
-echo "Test 6\n";
-
-$ret = $common->infoFromString('<?xml version="1.0" encoding="ISO-8859-1" ?>' .
- '<package version="1.0"><name>test</name><summary>PEAR test</summary>' .
- '<description>The test</description><license>PHP License</license> <maintainers>
- <maintainer>
- <user>test</user>
- <role>lead</role>
- <name>test tester</name>
- <email>test@php.net</email>
- </maintainer></maintainers><release>
- <version>1.3b4</version></release>
-</package>');
-
-var_dump($ret);
-
-echo "Test 7\n";
-
-$ret = $common->infoFromString('<?xml version="1.0" encoding="ISO-8859-1" ?>' .
- '<package version="1.0"><name>test</name><summary>PEAR test</summary>' .
- '<description>The test</description><license>PHP License</license> <maintainers>
- <maintainer>
- <user>test</user>
- <role>lead</role>
- <name>test tester</name>
- <email>test@php.net</email>
- </maintainer></maintainers><release>
- <version>1.3b4</version>
- <date>2003-11-17</date>
- <state>beta</state>
- <notes>test</notes></release>
-</package>');
-
-var_dump($ret);
-
-echo "Test 8\n";
-
-$ret = $common->infoFromString('<?xml version="1.0" encoding="ISO-8859-1" ?>' .
- '<package version="1.0"><name>test</name><summary>PEAR test</summary>' .
- '<description>The test</description><license>PHP License</license> <maintainers>
- <maintainer>
- <user>test</user>
- <role>lead</role>
- <name>test tester</name>
- <email>test@php.net</email>
- </maintainer></maintainers><release>
- <version>1.3b4</version>
- <date>2003-11-17</date>
- <state>beta</state>
- <notes>test</notes>
- <provides type="class" name="furngy" /></release>
-</package>');
-
-var_dump($ret);
-
-echo "Test 9\n";
-
-$ret = $common->infoFromString('<?xml version="1.0" encoding="ISO-8859-1" ?>' .
- '<package version="1.0"><name>test</name><summary>PEAR test</summary>' .
- '<description>The test</description><license>PHP License</license> <maintainers>
- <maintainer>
- <user>test</user>
- <role>lead</role>
- <name>test tester</name>
- <email>test@php.net</email>
- </maintainer></maintainers><release>
- <version>1.3b4</version>
- <date>2003-11-17</date>
- <state>beta</state>
- <notes>test</notes>
- <provides type="class" name="furngy" />
- <deps>
- <dep type="ext" rel="has" optional="yes">xmlrpc</dep>
- </deps>
-</release>
-</package>');
-
-var_dump($ret);
-
-echo "Test 10\n";
-
-$ret = $common->infoFromString('<?xml version="1.0" encoding="ISO-8859-1" ?>' .
- '<package version="1.0"><name>test</name><summary>PEAR test</summary>' .
- '<description>The test</description><license>PHP License</license> <maintainers>
- <maintainer>
- <user>test</user>
- <role>lead</role>
- <name>test tester</name>
- <email>test@php.net</email>
- </maintainer></maintainers><release>
- <version>1.3b4</version>
- <date>2003-11-17</date>
- <state>beta</state>
- <notes>test</notes>
- <provides type="class" name="furngy" />
- <deps>
- <dep type="ext" rel="has" optional="yes">xmlrpc</dep>
- </deps>
- <filelist>
- <file role="data" name="package.dtd"/>
- <file role="data" name="template.spec"/>
- <file role="php" name="PEAR.php"/>
- <file role="php" name="System.php"/>
- <dir name="PEAR">
- <file role="php" name="Autoloader.php"/>
- <file role="php" name="Command.php"/>
- <dir name="Command">
- <file role="php" name="Auth.php"/>
- <file role="php" name="Build.php"/>
- <file role="php" name="Common.php"/>
- <file role="php" name="Config.php"/>
- <file role="php" name="Install.php"/>
- <file role="php" name="Package.php"/>
- <file role="php" name="Registry.php"/>
- <file role="php" name="Remote.php"/>
- <file role="php" name="Mirror.php"/>
- </dir>
- <file role="php" name="Common.php"/>
- <file role="php" name="Config.php"/>
- <file role="php" name="Dependency.php"/>
- <dir name="Frontend">
- <file role="php" name="CLI.php"/>
- </dir>
- <file role="php" name="Builder.php"/>
- <file role="php" name="Installer.php"/>
- <file role="php" name="Packager.php"/>
- <file role="php" name="Registry.php"/>
- <file role="php" name="Remote.php"/>
- </dir>
- <dir name="OS">
- <file role="php" name="Guess.php"/>
- </dir>
- <dir name="scripts" baseinstalldir="/">
- <file role="script" install-as="pear" name="pear.sh">
- <replace from="@php_bin@" to="php_bin" type="pear-config"/>
- <replace from="@php_dir@" to="php_dir" type="pear-config"/>
- <replace from="@pear_version@" to="version" type="package-info"/>
- <replace from="@include_path@" to="php_dir" type="pear-config"/>
- </file>
- <file role="script" platform="windows" install-as="pear.bat" name="pear.bat">
- <replace from="@bin_dir@" to="bin_dir" type="pear-config"/>
- <replace from="@php_bin@" to="php_bin" type="pear-config"/>
- <replace from="@include_path@" to="php_dir" type="pear-config"/>
- </file>
- <file role="php" install-as="pearcmd.php" name="pearcmd.php">
- <replace from="@php_bin@" to="php_bin" type="pear-config"/>
- <replace from="@php_dir@" to="php_dir" type="pear-config"/>
- <replace from="@pear_version@" to="version" type="package-info"/>
- <replace from="@include_path@" to="php_dir" type="pear-config"/>
- </file>
- </dir>
- </filelist>
-
-</release>
-</package>');
-
-var_dump($ret);
-
-echo "Test 11\n";
-
-$ret = $common->infoFromString('<?xml version="1.0" encoding="ISO-8859-1" ?>' .
- '<package version="1.0"><name>test</name><summary>PEAR test</summary>' .
- '<description>The test</description><license>PHP License</license> <maintainers>
- <maintainer>
- <user>test</user>
- <role>lead</role>
- <name>test tester</name>
- <email>test@php.net</email>
- </maintainer></maintainers><release>
- <version>1.3b4</version>
- <date>2003-11-17</date>
- <state>beta</state>
- <notes>test</notes>
- <provides type="class" name="furngy" />
- <deps>
- <dep type="ext" rel="has" optional="yes">xmlrpc</dep>
- </deps>
- <filelist>
- <file role="data" name="package.dtd"/>
- <file role="data" name="template.spec"/>
- <file role="php" name="PEAR.php"/>
- <file role="php" name="System.php"/>
- <dir name="PEAR">
- <file role="php" name="Autoloader.php"/>
- <file role="php" name="Command.php"/>
- <dir name="Command">
- <file role="php" name="Auth.php"/>
- <file role="php" name="Build.php"/>
- <file role="php" name="Common.php"/>
- <file role="php" name="Config.php"/>
- <file role="php" name="Install.php"/>
- <file role="php" name="Package.php"/>
- <file role="php" name="Registry.php"/>
- <file role="php" name="Remote.php"/>
- <file role="php" name="Mirror.php"/>
- </dir>
- <file role="php" name="Common.php"/>
- <file role="php" name="Config.php"/>
- <file role="php" name="Dependency.php"/>
- <dir name="Frontend">
- <file role="php" name="CLI.php"/>
- </dir>
- <file role="php" name="Builder.php"/>
- <file role="php" name="Installer.php"/>
- <file role="php" name="Packager.php"/>
- <file role="php" name="Registry.php"/>
- <file role="php" name="Remote.php"/>
- </dir>
- <dir name="OS">
- <file role="php" name="Guess.php"/>
- </dir>
- <dir name="scripts" baseinstalldir="/">
- <file role="script" install-as="pear" name="pear.sh">
- <replace from="@php_bin@" to="php_bin" type="pear-config"/>
- <replace from="@php_dir@" to="php_dir" type="pear-config"/>
- <replace from="@pear_version@" to="version" type="package-info"/>
- <replace from="@include_path@" to="php_dir" type="pear-config"/>
- </file>
- <file role="script" platform="windows" install-as="pear.bat" name="pear.bat">
- <replace from="@bin_dir@" to="bin_dir" type="pear-config"/>
- <replace from="@php_bin@" to="php_bin" type="pear-config"/>
- <replace from="@include_path@" to="php_dir" type="pear-config"/>
- </file>
- <file role="php" install-as="pearcmd.php" name="pearcmd.php">
- <replace from="@php_bin@" to="php_bin" type="pear-config"/>
- <replace from="@php_dir@" to="php_dir" type="pear-config"/>
- <replace from="@pear_version@" to="version" type="package-info"/>
- <replace from="@include_path@" to="php_dir" type="pear-config"/>
- </file>
- </dir>
- </filelist>
- <configureoptions>
- <configureoption name="test" prompt="The prompt test" default="foo" />
- </configureoptions>
-</release>
-</package>');
-
-var_dump($ret);
-
-echo "Test 12\n";
-
-$ret = $common->infoFromString('<?xml version="1.0" encoding="ISO-8859-1" ?>' .
- '<package version="1.0"><name>test</name><summary>PEAR test</summary>' .
- '<description>The test</description><license>PHP License</license> <maintainers>
- <maintainer>
- <user>test</user>
- <role>lead</role>
- <name>test tester</name>
- <email>test@php.net</email>
- </maintainer></maintainers><release>
- <version>1.3b4</version>
- <date>2003-11-17</date>
- <state>beta</state>
- <notes>test</notes>
- <provides type="class" name="furngy" />
- <deps>
- <dep type="ext" rel="has" optional="yes">xmlrpc</dep>
- </deps>
- <filelist>
- <file role="data" name="package.dtd"/>
- <file role="data" name="template.spec"/>
- <file role="php" name="PEAR.php"/>
- <file role="php" name="System.php"/>
- <dir name="PEAR">
- <file role="php" name="Autoloader.php"/>
- <file role="php" name="Command.php"/>
- <dir name="Command">
- <file role="php" name="Auth.php"/>
- <file role="php" name="Build.php"/>
- <file role="php" name="Common.php"/>
- <file role="php" name="Config.php"/>
- <file role="php" name="Install.php"/>
- <file role="php" name="Package.php"/>
- <file role="php" name="Registry.php"/>
- <file role="php" name="Remote.php"/>
- <file role="php" name="Mirror.php"/>
- </dir>
- <file role="php" name="Common.php"/>
- <file role="php" name="Config.php"/>
- <file role="php" name="Dependency.php"/>
- <dir name="Frontend">
- <file role="php" name="CLI.php"/>
- </dir>
- <file role="php" name="Builder.php"/>
- <file role="php" name="Installer.php"/>
- <file role="php" name="Packager.php"/>
- <file role="php" name="Registry.php"/>
- <file role="php" name="Remote.php"/>
- </dir>
- <dir name="OS">
- <file role="php" name="Guess.php"/>
- </dir>
- <dir name="scripts" baseinstalldir="/">
- <file role="script" install-as="pear" name="pear.sh">
- <replace from="@php_bin@" to="php_bin" type="pear-config"/>
- <replace from="@php_dir@" to="php_dir" type="pear-config"/>
- <replace from="@pear_version@" to="version" type="package-info"/>
- <replace from="@include_path@" to="php_dir" type="pear-config"/>
- </file>
- <file role="script" platform="windows" install-as="pear.bat" name="pear.bat">
- <replace from="@bin_dir@" to="bin_dir" type="pear-config"/>
- <replace from="@php_bin@" to="php_bin" type="pear-config"/>
- <replace from="@include_path@" to="php_dir" type="pear-config"/>
- </file>
- <file role="php" install-as="pearcmd.php" name="pearcmd.php">
- <replace from="@php_bin@" to="php_bin" type="pear-config"/>
- <replace from="@php_dir@" to="php_dir" type="pear-config"/>
- <replace from="@pear_version@" to="version" type="package-info"/>
- <replace from="@include_path@" to="php_dir" type="pear-config"/>
- </file>
- </dir>
- </filelist>
- <configureoptions>
- <configureoption name="test" prompt="The prompt test" default="foo" />
- </configureoptions>
-</release>
- <changelog>
- <release>
- <version>0.1</version>
- <date>2003-07-21</date>
- <license>PHP License</license>
- <state>alpha</state>
- <notes>First release of test</notes>
- </release>
- <release>
- <version>0.2</version>
- <date>2003-07-21</date>
- <license>PHP License</license>
- <state>alpha</state>
- <notes>Generation of package.xml from scratch is now supported. In addition,
-generation of &lt;provides&gt; is supported and so is addition of
-maintainers and configure options
-
-- Fixed a bug in &lt;release&gt; generation
-- Added _addProvides() to generate a &lt;provides&gt; section</notes>
- </release>
- </changelog>
-</package>');
-
-var_dump($ret);
-
-?>
---EXPECT--
-Test invalid XML
-Caught error: XML error: not well-formed (invalid token) at line 1
-Test valid XML, not a package.xml
-Caught error: Invalid Package File, no <package> tag
-Test valid package.xml, invalid version number
-Caught error: No handlers for package.xml version 10000000
-Test empty package.xml
-array(2) {
- ["provides"]=>
- array(0) {
- }
- ["filelist"]=>
- &array(0) {
- }
-}
-Test 1
-array(3) {
- ["provides"]=>
- array(0) {
- }
- ["filelist"]=>
- &array(0) {
- }
- ["package"]=>
- string(4) "test"
-}
-Test 2
-array(4) {
- ["provides"]=>
- array(0) {
- }
- ["filelist"]=>
- &array(0) {
- }
- ["package"]=>
- string(4) "test"
- ["summary"]=>
- string(9) "PEAR test"
-}
-Test 3
-array(5) {
- ["provides"]=>
- array(0) {
- }
- ["filelist"]=>
- &array(0) {
- }
- ["package"]=>
- string(4) "test"
- ["summary"]=>
- string(9) "PEAR test"
- ["description"]=>
- string(8) "The test"
-}
-Test 4
-array(6) {
- ["provides"]=>
- array(0) {
- }
- ["filelist"]=>
- &array(0) {
- }
- ["package"]=>
- string(4) "test"
- ["summary"]=>
- string(9) "PEAR test"
- ["description"]=>
- string(8) "The test"
- ["release_license"]=>
- string(11) "PHP License"
-}
-Test 5
-array(7) {
- ["provides"]=>
- array(0) {
- }
- ["filelist"]=>
- &array(0) {
- }
- ["package"]=>
- string(4) "test"
- ["summary"]=>
- string(9) "PEAR test"
- ["description"]=>
- string(8) "The test"
- ["release_license"]=>
- string(11) "PHP License"
- ["maintainers"]=>
- array(1) {
- [0]=>
- &array(4) {
- ["handle"]=>
- string(4) "test"
- ["role"]=>
- string(4) "lead"
- ["name"]=>
- string(11) "test tester"
- ["email"]=>
- string(12) "test@php.net"
- }
- }
-}
-Test 6
-array(8) {
- ["provides"]=>
- array(0) {
- }
- ["filelist"]=>
- &array(0) {
- }
- ["package"]=>
- string(4) "test"
- ["summary"]=>
- string(9) "PEAR test"
- ["description"]=>
- string(8) "The test"
- ["release_license"]=>
- string(11) "PHP License"
- ["maintainers"]=>
- array(1) {
- [0]=>
- &array(4) {
- ["handle"]=>
- string(4) "test"
- ["role"]=>
- string(4) "lead"
- ["name"]=>
- string(11) "test tester"
- ["email"]=>
- string(12) "test@php.net"
- }
- }
- ["version"]=>
- string(5) "1.3b4"
-}
-Test 7
-array(11) {
- ["provides"]=>
- array(0) {
- }
- ["filelist"]=>
- &array(0) {
- }
- ["package"]=>
- string(4) "test"
- ["summary"]=>
- string(9) "PEAR test"
- ["description"]=>
- string(8) "The test"
- ["release_license"]=>
- string(11) "PHP License"
- ["maintainers"]=>
- array(1) {
- [0]=>
- &array(4) {
- ["handle"]=>
- string(4) "test"
- ["role"]=>
- string(4) "lead"
- ["name"]=>
- string(11) "test tester"
- ["email"]=>
- string(12) "test@php.net"
- }
- }
- ["version"]=>
- string(5) "1.3b4"
- ["release_date"]=>
- string(10) "2003-11-17"
- ["release_state"]=>
- string(4) "beta"
- ["release_notes"]=>
- string(4) "test"
-}
-Test 8
-array(11) {
- ["provides"]=>
- array(1) {
- ["class;furngy"]=>
- array(3) {
- ["type"]=>
- string(5) "class"
- ["name"]=>
- string(6) "furngy"
- ["explicit"]=>
- bool(true)
- }
- }
- ["filelist"]=>
- &array(0) {
- }
- ["package"]=>
- string(4) "test"
- ["summary"]=>
- string(9) "PEAR test"
- ["description"]=>
- string(8) "The test"
- ["release_license"]=>
- string(11) "PHP License"
- ["maintainers"]=>
- array(1) {
- [0]=>
- &array(4) {
- ["handle"]=>
- string(4) "test"
- ["role"]=>
- string(4) "lead"
- ["name"]=>
- string(11) "test tester"
- ["email"]=>
- string(12) "test@php.net"
- }
- }
- ["version"]=>
- string(5) "1.3b4"
- ["release_date"]=>
- string(10) "2003-11-17"
- ["release_state"]=>
- string(4) "beta"
- ["release_notes"]=>
- string(4) "test"
-}
-Test 9
-array(12) {
- ["provides"]=>
- array(1) {
- ["class;furngy"]=>
- array(3) {
- ["type"]=>
- string(5) "class"
- ["name"]=>
- string(6) "furngy"
- ["explicit"]=>
- bool(true)
- }
- }
- ["filelist"]=>
- &array(0) {
- }
- ["package"]=>
- string(4) "test"
- ["summary"]=>
- string(9) "PEAR test"
- ["description"]=>
- string(8) "The test"
- ["release_license"]=>
- string(11) "PHP License"
- ["maintainers"]=>
- array(1) {
- [0]=>
- &array(4) {
- ["handle"]=>
- string(4) "test"
- ["role"]=>
- string(4) "lead"
- ["name"]=>
- string(11) "test tester"
- ["email"]=>
- string(12) "test@php.net"
- }
- }
- ["version"]=>
- string(5) "1.3b4"
- ["release_date"]=>
- string(10) "2003-11-17"
- ["release_state"]=>
- string(4) "beta"
- ["release_notes"]=>
- string(4) "test"
- ["release_deps"]=>
- array(1) {
- [1]=>
- array(4) {
- ["type"]=>
- string(3) "ext"
- ["rel"]=>
- string(3) "has"
- ["optional"]=>
- string(3) "yes"
- ["name"]=>
- string(6) "xmlrpc"
- }
- }
-}
-Test 10
-array(12) {
- ["provides"]=>
- array(1) {
- ["class;furngy"]=>
- array(3) {
- ["type"]=>
- string(5) "class"
- ["name"]=>
- string(6) "furngy"
- ["explicit"]=>
- bool(true)
- }
- }
- ["filelist"]=>
- &array(28) {
- ["package.dtd"]=>
- array(1) {
- ["role"]=>
- string(4) "data"
- }
- ["template.spec"]=>
- array(1) {
- ["role"]=>
- string(4) "data"
- }
- ["PEAR.php"]=>
- array(1) {
- ["role"]=>
- string(3) "php"
- }
- ["System.php"]=>
- array(1) {
- ["role"]=>
- string(3) "php"
- }
- ["PEAR\Autoloader.php"]=>
- array(1) {
- ["role"]=>
- string(3) "php"
- }
- ["PEAR\Command.php"]=>
- array(1) {
- ["role"]=>
- string(3) "php"
- }
- ["PEAR\Command\Auth.php"]=>
- array(1) {
- ["role"]=>
- string(3) "php"
- }
- ["PEAR\Command\Build.php"]=>
- array(1) {
- ["role"]=>
- string(3) "php"
- }
- ["PEAR\Command\Common.php"]=>
- array(1) {
- ["role"]=>
- string(3) "php"
- }
- ["PEAR\Command\Config.php"]=>
- array(1) {
- ["role"]=>
- string(3) "php"
- }
- ["PEAR\Command\Install.php"]=>
- array(1) {
- ["role"]=>
- string(3) "php"
- }
- ["PEAR\Command\Package.php"]=>
- array(1) {
- ["role"]=>
- string(3) "php"
- }
- ["PEAR\Command\Registry.php"]=>
- array(1) {
- ["role"]=>
- string(3) "php"
- }
- ["PEAR\Command\Remote.php"]=>
- array(1) {
- ["role"]=>
- string(3) "php"
- }
- ["PEAR\Command\Mirror.php"]=>
- array(1) {
- ["role"]=>
- string(3) "php"
- }
- ["PEAR\Common.php"]=>
- array(1) {
- ["role"]=>
- string(3) "php"
- }
- ["PEAR\Config.php"]=>
- array(1) {
- ["role"]=>
- string(3) "php"
- }
- ["PEAR\Dependency.php"]=>
- array(1) {
- ["role"]=>
- string(3) "php"
- }
- ["PEAR\Frontend\CLI.php"]=>
- array(1) {
- ["role"]=>
- string(3) "php"
- }
- ["PEAR\Builder.php"]=>
- array(1) {
- ["role"]=>
- string(3) "php"
- }
- ["PEAR\Installer.php"]=>
- array(1) {
- ["role"]=>
- string(3) "php"
- }
- ["PEAR\Packager.php"]=>
- array(1) {
- ["role"]=>
- string(3) "php"
- }
- ["PEAR\Registry.php"]=>
- array(1) {
- ["role"]=>
- string(3) "php"
- }
- ["PEAR\Remote.php"]=>
- array(1) {
- ["role"]=>
- string(3) "php"
- }
- ["OS\Guess.php"]=>
- array(1) {
- ["role"]=>
- string(3) "php"
- }
- ["scripts\pear.sh"]=>
- array(4) {
- ["role"]=>
- string(6) "script"
- ["install-as"]=>
- string(4) "pear"
- ["baseinstalldir"]=>
- string(1) "/"
- ["replacements"]=>
- array(4) {
- [0]=>
- array(3) {
- ["from"]=>
- string(9) "@php_bin@"
- ["to"]=>
- string(7) "php_bin"
- ["type"]=>
- string(11) "pear-config"
- }
- [1]=>
- array(3) {
- ["from"]=>
- string(9) "@php_dir@"
- ["to"]=>
- string(7) "php_dir"
- ["type"]=>
- string(11) "pear-config"
- }
- [2]=>
- array(3) {
- ["from"]=>
- string(14) "@pear_version@"
- ["to"]=>
- string(7) "version"
- ["type"]=>
- string(12) "package-info"
- }
- [3]=>
- array(3) {
- ["from"]=>
- string(14) "@include_path@"
- ["to"]=>
- string(7) "php_dir"
- ["type"]=>
- string(11) "pear-config"
- }
- }
- }
- ["scripts\pear.bat"]=>
- array(5) {
- ["role"]=>
- string(6) "script"
- ["platform"]=>
- string(7) "windows"
- ["install-as"]=>
- string(8) "pear.bat"
- ["baseinstalldir"]=>
- string(1) "/"
- ["replacements"]=>
- array(3) {
- [0]=>
- array(3) {
- ["from"]=>
- string(9) "@bin_dir@"
- ["to"]=>
- string(7) "bin_dir"
- ["type"]=>
- string(11) "pear-config"
- }
- [1]=>
- array(3) {
- ["from"]=>
- string(9) "@php_bin@"
- ["to"]=>
- string(7) "php_bin"
- ["type"]=>
- string(11) "pear-config"
- }
- [2]=>
- array(3) {
- ["from"]=>
- string(14) "@include_path@"
- ["to"]=>
- string(7) "php_dir"
- ["type"]=>
- string(11) "pear-config"
- }
- }
- }
- ["scripts\pearcmd.php"]=>
- array(4) {
- ["role"]=>
- string(3) "php"
- ["install-as"]=>
- string(11) "pearcmd.php"
- ["baseinstalldir"]=>
- string(1) "/"
- ["replacements"]=>
- array(4) {
- [0]=>
- array(3) {
- ["from"]=>
- string(9) "@php_bin@"
- ["to"]=>
- string(7) "php_bin"
- ["type"]=>
- string(11) "pear-config"
- }
- [1]=>
- array(3) {
- ["from"]=>
- string(9) "@php_dir@"
- ["to"]=>
- string(7) "php_dir"
- ["type"]=>
- string(11) "pear-config"
- }
- [2]=>
- array(3) {
- ["from"]=>
- string(14) "@pear_version@"
- ["to"]=>
- string(7) "version"
- ["type"]=>
- string(12) "package-info"
- }
- [3]=>
- array(3) {
- ["from"]=>
- string(14) "@include_path@"
- ["to"]=>
- string(7) "php_dir"
- ["type"]=>
- string(11) "pear-config"
- }
- }
- }
- }
- ["package"]=>
- string(4) "test"
- ["summary"]=>
- string(9) "PEAR test"
- ["description"]=>
- string(8) "The test"
- ["release_license"]=>
- string(11) "PHP License"
- ["maintainers"]=>
- array(1) {
- [0]=>
- &array(4) {
- ["handle"]=>
- string(4) "test"
- ["role"]=>
- string(4) "lead"
- ["name"]=>
- string(11) "test tester"
- ["email"]=>
- string(12) "test@php.net"
- }
- }
- ["version"]=>
- string(5) "1.3b4"
- ["release_date"]=>
- string(10) "2003-11-17"
- ["release_state"]=>
- string(4) "beta"
- ["release_notes"]=>
- string(4) "test"
- ["release_deps"]=>
- array(1) {
- [1]=>
- array(4) {
- ["type"]=>
- string(3) "ext"
- ["rel"]=>
- string(3) "has"
- ["optional"]=>
- string(3) "yes"
- ["name"]=>
- string(6) "xmlrpc"
- }
- }
-}
-Test 11
-array(13) {
- ["provides"]=>
- array(1) {
- ["class;furngy"]=>
- array(3) {
- ["type"]=>
- string(5) "class"
- ["name"]=>
- string(6) "furngy"
- ["explicit"]=>
- bool(true)
- }
- }
- ["filelist"]=>
- &array(28) {
- ["package.dtd"]=>
- array(1) {
- ["role"]=>
- string(4) "data"
- }
- ["template.spec"]=>
- array(1) {
- ["role"]=>
- string(4) "data"
- }
- ["PEAR.php"]=>
- array(1) {
- ["role"]=>
- string(3) "php"
- }
- ["System.php"]=>
- array(1) {
- ["role"]=>
- string(3) "php"
- }
- ["PEAR\Autoloader.php"]=>
- array(1) {
- ["role"]=>
- string(3) "php"
- }
- ["PEAR\Command.php"]=>
- array(1) {
- ["role"]=>
- string(3) "php"
- }
- ["PEAR\Command\Auth.php"]=>
- array(1) {
- ["role"]=>
- string(3) "php"
- }
- ["PEAR\Command\Build.php"]=>
- array(1) {
- ["role"]=>
- string(3) "php"
- }
- ["PEAR\Command\Common.php"]=>
- array(1) {
- ["role"]=>
- string(3) "php"
- }
- ["PEAR\Command\Config.php"]=>
- array(1) {
- ["role"]=>
- string(3) "php"
- }
- ["PEAR\Command\Install.php"]=>
- array(1) {
- ["role"]=>
- string(3) "php"
- }
- ["PEAR\Command\Package.php"]=>
- array(1) {
- ["role"]=>
- string(3) "php"
- }
- ["PEAR\Command\Registry.php"]=>
- array(1) {
- ["role"]=>
- string(3) "php"
- }
- ["PEAR\Command\Remote.php"]=>
- array(1) {
- ["role"]=>
- string(3) "php"
- }
- ["PEAR\Command\Mirror.php"]=>
- array(1) {
- ["role"]=>
- string(3) "php"
- }
- ["PEAR\Common.php"]=>
- array(1) {
- ["role"]=>
- string(3) "php"
- }
- ["PEAR\Config.php"]=>
- array(1) {
- ["role"]=>
- string(3) "php"
- }
- ["PEAR\Dependency.php"]=>
- array(1) {
- ["role"]=>
- string(3) "php"
- }
- ["PEAR\Frontend\CLI.php"]=>
- array(1) {
- ["role"]=>
- string(3) "php"
- }
- ["PEAR\Builder.php"]=>
- array(1) {
- ["role"]=>
- string(3) "php"
- }
- ["PEAR\Installer.php"]=>
- array(1) {
- ["role"]=>
- string(3) "php"
- }
- ["PEAR\Packager.php"]=>
- array(1) {
- ["role"]=>
- string(3) "php"
- }
- ["PEAR\Registry.php"]=>
- array(1) {
- ["role"]=>
- string(3) "php"
- }
- ["PEAR\Remote.php"]=>
- array(1) {
- ["role"]=>
- string(3) "php"
- }
- ["OS\Guess.php"]=>
- array(1) {
- ["role"]=>
- string(3) "php"
- }
- ["scripts\pear.sh"]=>
- array(4) {
- ["role"]=>
- string(6) "script"
- ["install-as"]=>
- string(4) "pear"
- ["baseinstalldir"]=>
- string(1) "/"
- ["replacements"]=>
- array(4) {
- [0]=>
- array(3) {
- ["from"]=>
- string(9) "@php_bin@"
- ["to"]=>
- string(7) "php_bin"
- ["type"]=>
- string(11) "pear-config"
- }
- [1]=>
- array(3) {
- ["from"]=>
- string(9) "@php_dir@"
- ["to"]=>
- string(7) "php_dir"
- ["type"]=>
- string(11) "pear-config"
- }
- [2]=>
- array(3) {
- ["from"]=>
- string(14) "@pear_version@"
- ["to"]=>
- string(7) "version"
- ["type"]=>
- string(12) "package-info"
- }
- [3]=>
- array(3) {
- ["from"]=>
- string(14) "@include_path@"
- ["to"]=>
- string(7) "php_dir"
- ["type"]=>
- string(11) "pear-config"
- }
- }
- }
- ["scripts\pear.bat"]=>
- array(5) {
- ["role"]=>
- string(6) "script"
- ["platform"]=>
- string(7) "windows"
- ["install-as"]=>
- string(8) "pear.bat"
- ["baseinstalldir"]=>
- string(1) "/"
- ["replacements"]=>
- array(3) {
- [0]=>
- array(3) {
- ["from"]=>
- string(9) "@bin_dir@"
- ["to"]=>
- string(7) "bin_dir"
- ["type"]=>
- string(11) "pear-config"
- }
- [1]=>
- array(3) {
- ["from"]=>
- string(9) "@php_bin@"
- ["to"]=>
- string(7) "php_bin"
- ["type"]=>
- string(11) "pear-config"
- }
- [2]=>
- array(3) {
- ["from"]=>
- string(14) "@include_path@"
- ["to"]=>
- string(7) "php_dir"
- ["type"]=>
- string(11) "pear-config"
- }
- }
- }
- ["scripts\pearcmd.php"]=>
- array(4) {
- ["role"]=>
- string(3) "php"
- ["install-as"]=>
- string(11) "pearcmd.php"
- ["baseinstalldir"]=>
- string(1) "/"
- ["replacements"]=>
- array(4) {
- [0]=>
- array(3) {
- ["from"]=>
- string(9) "@php_bin@"
- ["to"]=>
- string(7) "php_bin"
- ["type"]=>
- string(11) "pear-config"
- }
- [1]=>
- array(3) {
- ["from"]=>
- string(9) "@php_dir@"
- ["to"]=>
- string(7) "php_dir"
- ["type"]=>
- string(11) "pear-config"
- }
- [2]=>
- array(3) {
- ["from"]=>
- string(14) "@pear_version@"
- ["to"]=>
- string(7) "version"
- ["type"]=>
- string(12) "package-info"
- }
- [3]=>
- array(3) {
- ["from"]=>
- string(14) "@include_path@"
- ["to"]=>
- string(7) "php_dir"
- ["type"]=>
- string(11) "pear-config"
- }
- }
- }
- }
- ["package"]=>
- string(4) "test"
- ["summary"]=>
- string(9) "PEAR test"
- ["description"]=>
- string(8) "The test"
- ["release_license"]=>
- string(11) "PHP License"
- ["maintainers"]=>
- array(1) {
- [0]=>
- &array(4) {
- ["handle"]=>
- string(4) "test"
- ["role"]=>
- string(4) "lead"
- ["name"]=>
- string(11) "test tester"
- ["email"]=>
- string(12) "test@php.net"
- }
- }
- ["version"]=>
- string(5) "1.3b4"
- ["release_date"]=>
- string(10) "2003-11-17"
- ["release_state"]=>
- string(4) "beta"
- ["release_notes"]=>
- string(4) "test"
- ["release_deps"]=>
- array(1) {
- [1]=>
- array(4) {
- ["type"]=>
- string(3) "ext"
- ["rel"]=>
- string(3) "has"
- ["optional"]=>
- string(3) "yes"
- ["name"]=>
- string(6) "xmlrpc"
- }
- }
- ["configure_options"]=>
- array(1) {
- [0]=>
- array(3) {
- ["name"]=>
- string(4) "test"
- ["prompt"]=>
- string(15) "The prompt test"
- ["default"]=>
- string(3) "foo"
- }
- }
-}
-Test 12
-array(14) {
- ["provides"]=>
- array(1) {
- ["class;furngy"]=>
- array(3) {
- ["type"]=>
- string(5) "class"
- ["name"]=>
- string(6) "furngy"
- ["explicit"]=>
- bool(true)
- }
- }
- ["filelist"]=>
- &array(28) {
- ["package.dtd"]=>
- array(1) {
- ["role"]=>
- string(4) "data"
- }
- ["template.spec"]=>
- array(1) {
- ["role"]=>
- string(4) "data"
- }
- ["PEAR.php"]=>
- array(1) {
- ["role"]=>
- string(3) "php"
- }
- ["System.php"]=>
- array(1) {
- ["role"]=>
- string(3) "php"
- }
- ["PEAR\Autoloader.php"]=>
- array(1) {
- ["role"]=>
- string(3) "php"
- }
- ["PEAR\Command.php"]=>
- array(1) {
- ["role"]=>
- string(3) "php"
- }
- ["PEAR\Command\Auth.php"]=>
- array(1) {
- ["role"]=>
- string(3) "php"
- }
- ["PEAR\Command\Build.php"]=>
- array(1) {
- ["role"]=>
- string(3) "php"
- }
- ["PEAR\Command\Common.php"]=>
- array(1) {
- ["role"]=>
- string(3) "php"
- }
- ["PEAR\Command\Config.php"]=>
- array(1) {
- ["role"]=>
- string(3) "php"
- }
- ["PEAR\Command\Install.php"]=>
- array(1) {
- ["role"]=>
- string(3) "php"
- }
- ["PEAR\Command\Package.php"]=>
- array(1) {
- ["role"]=>
- string(3) "php"
- }
- ["PEAR\Command\Registry.php"]=>
- array(1) {
- ["role"]=>
- string(3) "php"
- }
- ["PEAR\Command\Remote.php"]=>
- array(1) {
- ["role"]=>
- string(3) "php"
- }
- ["PEAR\Command\Mirror.php"]=>
- array(1) {
- ["role"]=>
- string(3) "php"
- }
- ["PEAR\Common.php"]=>
- array(1) {
- ["role"]=>
- string(3) "php"
- }
- ["PEAR\Config.php"]=>
- array(1) {
- ["role"]=>
- string(3) "php"
- }
- ["PEAR\Dependency.php"]=>
- array(1) {
- ["role"]=>
- string(3) "php"
- }
- ["PEAR\Frontend\CLI.php"]=>
- array(1) {
- ["role"]=>
- string(3) "php"
- }
- ["PEAR\Builder.php"]=>
- array(1) {
- ["role"]=>
- string(3) "php"
- }
- ["PEAR\Installer.php"]=>
- array(1) {
- ["role"]=>
- string(3) "php"
- }
- ["PEAR\Packager.php"]=>
- array(1) {
- ["role"]=>
- string(3) "php"
- }
- ["PEAR\Registry.php"]=>
- array(1) {
- ["role"]=>
- string(3) "php"
- }
- ["PEAR\Remote.php"]=>
- array(1) {
- ["role"]=>
- string(3) "php"
- }
- ["OS\Guess.php"]=>
- array(1) {
- ["role"]=>
- string(3) "php"
- }
- ["scripts\pear.sh"]=>
- array(4) {
- ["role"]=>
- string(6) "script"
- ["install-as"]=>
- string(4) "pear"
- ["baseinstalldir"]=>
- string(1) "/"
- ["replacements"]=>
- array(4) {
- [0]=>
- array(3) {
- ["from"]=>
- string(9) "@php_bin@"
- ["to"]=>
- string(7) "php_bin"
- ["type"]=>
- string(11) "pear-config"
- }
- [1]=>
- array(3) {
- ["from"]=>
- string(9) "@php_dir@"
- ["to"]=>
- string(7) "php_dir"
- ["type"]=>
- string(11) "pear-config"
- }
- [2]=>
- array(3) {
- ["from"]=>
- string(14) "@pear_version@"
- ["to"]=>
- string(7) "version"
- ["type"]=>
- string(12) "package-info"
- }
- [3]=>
- array(3) {
- ["from"]=>
- string(14) "@include_path@"
- ["to"]=>
- string(7) "php_dir"
- ["type"]=>
- string(11) "pear-config"
- }
- }
- }
- ["scripts\pear.bat"]=>
- array(5) {
- ["role"]=>
- string(6) "script"
- ["platform"]=>
- string(7) "windows"
- ["install-as"]=>
- string(8) "pear.bat"
- ["baseinstalldir"]=>
- string(1) "/"
- ["replacements"]=>
- array(3) {
- [0]=>
- array(3) {
- ["from"]=>
- string(9) "@bin_dir@"
- ["to"]=>
- string(7) "bin_dir"
- ["type"]=>
- string(11) "pear-config"
- }
- [1]=>
- array(3) {
- ["from"]=>
- string(9) "@php_bin@"
- ["to"]=>
- string(7) "php_bin"
- ["type"]=>
- string(11) "pear-config"
- }
- [2]=>
- array(3) {
- ["from"]=>
- string(14) "@include_path@"
- ["to"]=>
- string(7) "php_dir"
- ["type"]=>
- string(11) "pear-config"
- }
- }
- }
- ["scripts\pearcmd.php"]=>
- array(4) {
- ["role"]=>
- string(3) "php"
- ["install-as"]=>
- string(11) "pearcmd.php"
- ["baseinstalldir"]=>
- string(1) "/"
- ["replacements"]=>
- array(4) {
- [0]=>
- array(3) {
- ["from"]=>
- string(9) "@php_bin@"
- ["to"]=>
- string(7) "php_bin"
- ["type"]=>
- string(11) "pear-config"
- }
- [1]=>
- array(3) {
- ["from"]=>
- string(9) "@php_dir@"
- ["to"]=>
- string(7) "php_dir"
- ["type"]=>
- string(11) "pear-config"
- }
- [2]=>
- array(3) {
- ["from"]=>
- string(14) "@pear_version@"
- ["to"]=>
- string(7) "version"
- ["type"]=>
- string(12) "package-info"
- }
- [3]=>
- array(3) {
- ["from"]=>
- string(14) "@include_path@"
- ["to"]=>
- string(7) "php_dir"
- ["type"]=>
- string(11) "pear-config"
- }
- }
- }
- }
- ["package"]=>
- string(4) "test"
- ["summary"]=>
- string(9) "PEAR test"
- ["description"]=>
- string(8) "The test"
- ["release_license"]=>
- string(11) "PHP License"
- ["maintainers"]=>
- array(1) {
- [0]=>
- &array(4) {
- ["handle"]=>
- string(4) "test"
- ["role"]=>
- string(4) "lead"
- ["name"]=>
- string(11) "test tester"
- ["email"]=>
- string(12) "test@php.net"
- }
- }
- ["version"]=>
- string(5) "1.3b4"
- ["release_date"]=>
- string(10) "2003-11-17"
- ["release_state"]=>
- string(4) "beta"
- ["release_notes"]=>
- string(4) "test"
- ["release_deps"]=>
- array(1) {
- [1]=>
- array(4) {
- ["type"]=>
- string(3) "ext"
- ["rel"]=>
- string(3) "has"
- ["optional"]=>
- string(3) "yes"
- ["name"]=>
- string(6) "xmlrpc"
- }
- }
- ["configure_options"]=>
- array(1) {
- [0]=>
- array(3) {
- ["name"]=>
- string(4) "test"
- ["prompt"]=>
- string(15) "The prompt test"
- ["default"]=>
- string(3) "foo"
- }
- }
- ["changelog"]=>
- array(2) {
- [0]=>
- &array(5) {
- ["version"]=>
- string(3) "0.1"
- ["release_date"]=>
- string(10) "2003-07-21"
- ["release_license"]=>
- string(11) "PHP License"
- ["release_state"]=>
- string(5) "alpha"
- ["release_notes"]=>
- string(22) "First release of test
-"
- }
- [1]=>
- &array(5) {
- ["version"]=>
- string(3) "0.2"
- ["release_date"]=>
- string(10) "2003-07-21"
- ["release_license"]=>
- string(11) "PHP License"
- ["release_state"]=>
- string(5) "alpha"
- ["release_notes"]=>
- string(260) "Generation of package.xml from scratch is now supported. In addition,
-generation of <provides> is supported and so is addition of
-maintainers and configure options
-
-- Fixed a bug in <release> generation
-- Added _addProvides() to generate a <provides> section
-"
- }
- }
-} \ No newline at end of file
diff --git a/pear/tests/pear_common_sortPkgDeps.phpt b/pear/tests/pear_common_sortPkgDeps.phpt
deleted file mode 100644
index 5097888ee4..0000000000
--- a/pear/tests/pear_common_sortPkgDeps.phpt
+++ /dev/null
@@ -1,73 +0,0 @@
---TEST--
-PEAR_Common::sortPkgDeps test
---SKIPIF--
-<?php
-if (!getenv('PHP_PEAR_RUNTESTS')) {
- echo 'skip';
-}
-?>
---FILE--
-<?php
-$dir = getcwd();
-chdir(dirname(__FILE__));
-
-require_once 'PEAR/Common.php';
-
-$c = new PEAR_Common();
-
-$packages = array(
-'common_sortPkgDeps6_package.xml',
-'common_sortPkgDeps2_package.xml',
-'common_sortPkgDeps1_package.xml',
-'common_sortPkgDeps4_package.xml',
-'common_sortPkgDeps5_package.xml',
-'common_sortPkgDeps3_package.xml',
-);
-
-$uninstallpackages = array(
-$c->infoFromAny('common_sortPkgDeps6_package.xml'),
-$c->infoFromAny('common_sortPkgDeps2_package.xml'),
-$c->infoFromAny('common_sortPkgDeps1_package.xml'),
-$c->infoFromAny('common_sortPkgDeps4_package.xml'),
-$c->infoFromAny('common_sortPkgDeps5_package.xml'),
-$c->infoFromAny('common_sortPkgDeps3_package.xml'),
-);
-
-echo "Test Install Sort:\n";
-$c->sortPkgDeps($packages);
-dumpPacks($packages);
-
-echo "Test Uninstall Sort:\n";
-$c->sortPkgDeps($uninstallpackages, true);
-dumpPacks($uninstallpackages);
-
-chdir($dir);
-
-function dumpPacks($p)
-{
- echo "Packages(\n";
- foreach ($p as $inf) {
- echo $inf['info']['package'] . ",\n";
- }
- echo ")\n";
-}
-?>
---EXPECT--
-Test Install Sort:
-Packages(
-pkg6,
-pkg5,
-pkg4,
-pkg3,
-pkg2,
-pkg1,
-)
-Test Uninstall Sort:
-Packages(
-pkg1,
-pkg2,
-pkg3,
-pkg5,
-pkg4,
-pkg6,
-) \ No newline at end of file
diff --git a/pear/tests/pear_common_validPackageVersion.phpt b/pear/tests/pear_common_validPackageVersion.phpt
deleted file mode 100644
index c177bb202a..0000000000
--- a/pear/tests/pear_common_validPackageVersion.phpt
+++ /dev/null
@@ -1,81 +0,0 @@
---TEST--
-PEAR_Common::validPackageVersion test
---SKIPIF--
-<?php
-if (!getenv('PHP_PEAR_RUNTESTS')) {
- echo 'skip';
-}
-?>
---FILE--
-<?php
-
-require_once 'PEAR/Common.php';
-
-// '\d+(?:\.\d+)*(?:[a-z]+\d*)?'
-
-echo "==Valid Tests==\n";
-$a = '1';
-echo "$a ";
-echo (PEAR_Common::validPackageVersion($a)) ? "valid\n" : "invalid\n";
-
-$a = '1.1';
-echo "$a ";
-echo (PEAR_Common::validPackageVersion($a)) ? "valid\n" : "invalid\n";
-
-$a = '1.1.1';
-echo "$a ";
-echo (PEAR_Common::validPackageVersion($a)) ? "valid\n" : "invalid\n";
-
-$a = '1.1.1.1';
-echo "$a ";
-echo (PEAR_Common::validPackageVersion($a)) ? "valid\n" : "invalid\n";
-
-$a = '1.1.1abc3';
-echo "$a ";
-echo (PEAR_Common::validPackageVersion($a)) ? "valid\n" : "invalid\n";
-
-$a = '1.234beta4';
-echo "$a ";
-echo (PEAR_Common::validPackageVersion($a)) ? "valid\n" : "invalid\n";
-
-$a = '1alpha3';
-echo "$a ";
-echo (PEAR_Common::validPackageVersion($a)) ? "valid\n" : "invalid\n";
-
-$a = '1alpha';
-echo "$a ";
-echo (PEAR_Common::validPackageVersion($a)) ? "valid\n" : "invalid\n";
-
-$a = '1.1a';
-echo "$a ";
-echo (PEAR_Common::validPackageVersion($a)) ? "valid\n" : "invalid\n";
-
-echo "==Invalid Tests==\n";
-
-$a = '1.0.0-alpha2';
-echo "$a ";
-echo (PEAR_Common::validPackageVersion($a)) ? "valid\n" : "invalid\n";
-
-$a = '1alpha.4';
-echo "$a ";
-echo (PEAR_Common::validPackageVersion($a)) ? "valid\n" : "invalid\n";
-
-$a = '1.1alpha.4';
-echo "$a ";
-echo (PEAR_Common::validPackageVersion($a)) ? "valid\n" : "invalid\n";
-?>
---EXPECT--
-==Valid Tests==
-1 valid
-1.1 valid
-1.1.1 valid
-1.1.1.1 valid
-1.1.1abc3 valid
-1.234beta4 valid
-1alpha3 valid
-1alpha valid
-1.1a valid
-==Invalid Tests==
-1.0.0-alpha2 invalid
-1alpha.4 invalid
-1.1alpha.4 invalid
diff --git a/pear/tests/pear_config.phpt b/pear/tests/pear_config.phpt
deleted file mode 100644
index f98af7eade..0000000000
--- a/pear/tests/pear_config.phpt
+++ /dev/null
@@ -1,304 +0,0 @@
---TEST--
-PEAR_Config
---SKIPIF--
-<?php
-if (!getenv('PHP_PEAR_RUNTESTS')) {
- echo 'skip';
- return;
-}
-include 'PEAR/Config.php';
-$pv = phpversion() . '';
-$av = $pv{0} == '4' ? 'apiversion' : 'apiVersion';
-if (in_array($av, get_class_methods('PEAR_Config'))) {
- echo 'skip';
-}
-?>
---FILE--
-<?php
-
-error_reporting(E_ALL);
-chdir(dirname(__FILE__));
-include "PEAR/Config.php";
-copy("system.input", "system.conf");
-copy("user.input", "user.conf");
-copy("user2.input", "user2.conf");
-copy("merge.input", "merge.conf");
-PEAR::setErrorHandling(PEAR_ERROR_PRINT, "%s\n");
-
-print "\n#0 starting up\n";
-dump_files();
-
-print "\n#1 testing: constructor\n";
-$config = new PEAR_Config("user.conf", "system.conf");
-dump_array("files", $config->files);
-
-print "\n#2 testing: singleton\n";
-$o1 = &PEAR_Config::singleton();
-$o1->blah = 'blah';
-$o2 = &PEAR_Config::singleton();
-var_dump($o1->blah);
-@var_dump($o2->blah);
-
-print "\n#3 testing: readConfigFile\n";
-$config->readConfigFile("user2.conf", "user");
-dump_config($config);
-$config->readConfigFile("user.conf");
-dump_config($config);
-
-print "\n#4 testing: mergeConfigFile\n";
-$config->readConfigFile("user2.conf");
-dump_config($config, "user");
-$config->mergeConfigFile("merge.conf", true);
-dump_config($config, "user");
-$config->readConfigFile("user2.conf");
-$config->mergeConfigFile("merge.conf", false);
-dump_config($config, "user");
-$config->readConfigFile("user.conf");
-dump_config($config, "user");
-$config->mergeConfigFile("merge.conf", true, "xyzzy");
-
-print "\n#5 testing: config file version detection\n";
-$config->readConfigFile("user.conf", "user");
-$config->readConfigFile("toonew.conf", "user");
-
-print "\n#6 testing: get/set/remove\n";
-var_dump($config->get("verbose"));
-$config->set("verbose", 100, "system");
-var_dump($config->get("verbose"));
-$config->set("verbose", 2, "user");
-var_dump($config->get("verbose"));
-$config->set("verbose", 2, "system");
-$config->set("verbose", 50, "user");
-var_dump($config->get("verbose"));
-$config->remove("verbose", "user");
-var_dump($config->get("verbose"));
-$config->remove("verbose", "system");
-var_dump($config->get("verbose"));
-
-print "\n#7 testing: getType\n";
-var_dump($config->getType("__unknown__"));
-var_dump($config->getType("verbose"));
-var_dump($config->getType("master_server"));
-var_dump($config->getType("ext_dir"));
-
-print "\n#8 testing: getDocs\n";
-print "master_server: " . $config->getDocs("master_server") . "\n";
-
-print "\n#9 testing: getKeys\n";
-$keys = $config->getKeys();
-sort($keys);
-print implode(" ", $keys) . "\n";
-
-print "\n#10 testing: definedBy\n";
-var_dump($config->definedBy("verbose"));
-$config->set("verbose", 6, "system");
-$config->set("verbose", 3, "user");
-var_dump($config->definedBy("verbose"));
-$config->remove("verbose", "system");
-var_dump($config->definedBy("verbose"));
-$config->set("verbose", 6, "system");
-$config->remove("verbose", "user");
-var_dump($config->definedBy("verbose"));
-$config->remove("verbose", "system");
-var_dump($config->definedBy("verbose"));
-
-print "\n#11 testing: isDefined\n";
-var_dump($config->isDefined("php_dir"));
-var_dump($config->isDefined("verbose"));
-var_dump($config->isDefined("HTTP_GET_VARS"));
-var_dump($config->isDefined("query"));
-
-print "\n#12 testing: getGroup\n";
-foreach ($keys as $key) {
- print "$key: ".$config->getGroup($key)."\n";
-}
-
-print "\n#13 testing: getGroups\n";
-$groups = $config->getGroups();
-sort($groups);
-print implode(", ", $groups) . "\n";
-
-print "\n#14 testing: getGroupKeys\n";
-foreach ($groups as $group) {
- $gk = $config->getGroupKeys($group);
- sort($gk);
- print "$group: " . implode(", ", $gk) . "\n";
-}
-
-print "\n#15 testing: getPrompt\n";
-foreach ($keys as $key) {
- print "$key: ".$config->getPrompt($key)."\n";
-}
-
-
-//
-
-print "done\n";
-
-unlink("user.conf");
-unlink("user2.conf");
-unlink("system.conf");
-unlink("merge.conf");
-
-// ------------------------------------------------------------------------- //
-
-function dump_file($file)
-{
- print "..$file:";
- $data = PEAR_Config::_readConfigDataFrom($file);
- if (empty($data)) {
- print " <empty>\n";
- return;
- }
- foreach ($data as $k => $v) {
- print " $k=\"$v\"";
- }
- print "\n";
-}
-
-function dump_files() {
- dump_file("system.conf");
- dump_file("user.conf");
-}
-
-function dump_array($name, $arr) {
- print "$name:";
- if (empty($arr)) {
- print " <empty>";
- } else {
- foreach ($arr as $k => $v) {
- print " $k=\"$v\"";
- }
- }
- print "\n";
-}
-
-function dump_config(&$obj, $layer = null) {
- if ($layer !== null) {
- dump_array($layer, $obj->configuration[$layer]);
- return;
- }
- foreach ($obj->configuration as $layer => $data) {
- if ($layer == "default") {
- continue;
- }
- dump_array($layer, $data);
- }
-}
-
-?>
---EXPECT--
-#0 starting up
-..system.conf: master_server="pear.php.net"
-..user.conf: <empty>
-
-#1 testing: constructor
-files: system="system.conf" user="user.conf"
-
-#2 testing: singleton
-string(4) "blah"
-string(4) "blah"
-
-#3 testing: readConfigFile
-user: verbose="2"
-system: master_server="pear.php.net"
-user: <empty>
-system: master_server="pear.php.net"
-
-#4 testing: mergeConfigFile
-user: verbose="2"
-user: verbose="100"
-user: verbose="2"
-user: <empty>
-unknown config file type `xyzzy'
-
-#5 testing: config file version detection
-toonew.conf: unknown version `2.0'
-
-#6 testing: get/set/remove
-int(1)
-int(100)
-int(2)
-int(50)
-int(2)
-int(1)
-
-#7 testing: getType
-bool(false)
-string(7) "integer"
-string(6) "string"
-string(9) "directory"
-
-#8 testing: getDocs
-master_server: name of the main PEAR server
-
-#9 testing: getKeys
-bin_dir cache_dir cache_ttl data_dir doc_dir ext_dir http_proxy master_server password php_bin php_dir preferred_state sig_bin sig_keydir sig_keyid sig_type test_dir umask username verbose
-
-#10 testing: definedBy
-string(7) "default"
-string(4) "user"
-string(4) "user"
-string(6) "system"
-string(7) "default"
-
-#11 testing: isDefined
-bool(true)
-bool(true)
-bool(false)
-bool(false)
-
-#12 testing: getGroup
-bin_dir: File Locations
-cache_dir: File Locations (Advanced)
-cache_ttl: Advanced
-data_dir: File Locations (Advanced)
-doc_dir: File Locations
-ext_dir: File Locations
-http_proxy: Internet Access
-master_server: Internet Access
-password: Maintainers
-php_bin: File Locations (Advanced)
-php_dir: File Locations
-preferred_state: Advanced
-sig_bin: Maintainers
-sig_keydir: Maintainers
-sig_keyid: Maintainers
-sig_type: Maintainers
-test_dir: File Locations (Advanced)
-umask: Advanced
-username: Maintainers
-verbose: Advanced
-
-#13 testing: getGroups
-Advanced, File Locations, File Locations (Advanced), Internet Access, Maintainers
-
-#14 testing: getGroupKeys
-Advanced: cache_ttl, preferred_state, umask, verbose
-File Locations: bin_dir, doc_dir, ext_dir, php_dir
-File Locations (Advanced): cache_dir, data_dir, php_bin, test_dir
-Internet Access: http_proxy, master_server
-Maintainers: password, sig_bin, sig_keydir, sig_keyid, sig_type, username
-
-#15 testing: getPrompt
-bin_dir: PEAR executables directory
-cache_dir: PEAR Installer cache directory
-cache_ttl: Cache TimeToLive
-data_dir: PEAR data directory
-doc_dir: PEAR documentation directory
-ext_dir: PHP extension directory
-http_proxy: HTTP Proxy Server Address
-master_server: PEAR server
-password: PEAR password (for maintainers)
-php_bin: PHP CLI/CGI binary
-php_dir: PEAR directory
-preferred_state: Preferred Package State
-sig_bin: Signature Handling Program
-sig_keydir: Signature Key Directory
-sig_keyid: Signature Key Id
-sig_type: Package Signature Type
-test_dir: PEAR test directory
-umask: Unix file mask
-username: PEAR username (for maintainers)
-verbose: Debug Log Level
-done \ No newline at end of file
diff --git a/pear/tests/pear_config_1.1.phpt b/pear/tests/pear_config_1.1.phpt
deleted file mode 100644
index 50d5815ed3..0000000000
--- a/pear/tests/pear_config_1.1.phpt
+++ /dev/null
@@ -1,395 +0,0 @@
---TEST--
-PEAR_Config v1.1
---SKIPIF--
-<?php
-if (!getenv('PHP_PEAR_RUNTESTS')) {
- echo 'skip';
- return;
-}
-include_once 'PEAR/Config.php';
-$pv = phpversion() . '';
-$av = $pv{0} == '4' ? 'apiversion' : 'apiVersion';
-if (!in_array($av, get_class_methods('PEAR_Config'))) {
- echo 'skip';
- return;
-}
-if (PEAR_Config::apiVersion() != '1.1') {
- echo 'skip';
-}
-?>
---FILE--
-<?php
-
-error_reporting(E_ALL);
-chdir(dirname(__FILE__));
-include_once "PEAR/Config.php";
-copy("system.input", "system.conf");
-copy("user.input", "user.conf");
-copy("user2.input", "user2.conf");
-copy("merge.input", "merge.conf");
-copy("user3.input", "user3.conf");
-copy("merge2.input", "merge2.conf");
-PEAR::setErrorHandling(PEAR_ERROR_PRINT, "%s\n");
-
-print "\n#0 starting up\n";
-dump_files();
-
-print "\n#1 testing: constructor\n";
-$config = new PEAR_Config("user.conf", "system.conf");
-dump_array("files", $config->files);
-
-print "\n#2 testing: singleton\n";
-$o1 = &PEAR_Config::singleton();
-$o1->blah = 'blah';
-$o2 = &PEAR_Config::singleton();
-var_dump($o1->blah);
-@var_dump($o2->blah);
-
-print "\n#3 testing: readConfigFile\n";
-$config->readConfigFile("user2.conf", "user");
-dump_config($config);
-$config->readConfigFile("user.conf");
-dump_config($config);
-
-print "\n#4 testing: mergeConfigFile\n";
-$config->readConfigFile("user2.conf");
-dump_config($config, "user");
-$config->mergeConfigFile("merge.conf", true);
-dump_config($config, "user");
-$config->readConfigFile("user2.conf");
-$config->mergeConfigFile("merge.conf", false);
-dump_config($config, "user");
-$config->readConfigFile("user.conf");
-dump_config($config, "user");
-$config->mergeConfigFile("merge.conf", true, "xyzzy");
-$config->readConfigFile("user3.conf");
-dump_config($config, "user");
-$config->mergeConfigFile("merge2.conf", true);
-dump_config($config, "user");
-$config->readConfigFile("user3.conf");
-$config->mergeConfigFile("merge2.conf", false);
-dump_config($config, "user");
-
-print "\n#5 testing: config file version detection\n";
-$config->readConfigFile("user.conf", "user");
-$config->readConfigFile("toonew.conf", "user");
-
-print "\n#6 testing: get/set/remove\n";
-var_dump($config->get("verbose"));
-$config->set("verbose", 100, "system");
-var_dump($config->get("verbose"));
-$config->set("verbose", 2, "user");
-var_dump($config->get("verbose"));
-$config->set("verbose", 2, "system");
-$config->set("verbose", 50, "user");
-var_dump($config->get("verbose"));
-$config->remove("verbose", "user");
-var_dump($config->get("verbose"));
-$config->remove("verbose", "system");
-var_dump($config->get("verbose"));
-
-print "\n#6.5 testing: get/set/remove w/channels\n";
-$config->readConfigFile('user3.conf');
-$config->setChannels(array('pear', 'test1', 'test2'));
-var_dump($config->get('default_channel'));
-
-print "\n#7 testing: getType\n";
-var_dump($config->getType("__unknown__"));
-var_dump($config->getType("verbose"));
-var_dump($config->getType("master_server"));
-var_dump($config->getType("ext_dir"));
-
-print "\n#8 testing: getDocs\n";
-print "master_server: " . $config->getDocs("master_server") . "\n";
-
-print "\n#9 testing: getKeys\n";
-$keys = $config->getKeys();
-sort($keys);
-print implode(" ", $keys) . "\n";
-
-print "\n#10 testing: definedBy\n";
-$config->readConfigFile('user.conf');
-var_dump($config->definedBy("verbose"));
-$config->set("verbose", 6, "system");
-$config->set("verbose", 3, "user");
-var_dump($config->definedBy("verbose"));
-$config->remove("verbose", "system");
-var_dump($config->definedBy("verbose"));
-$config->set("verbose", 6, "system");
-$config->remove("verbose", "user");
-var_dump($config->definedBy("verbose"));
-$config->remove("verbose", "system");
-var_dump($config->definedBy("verbose"));
-
-print "\n#10.5 testing: definedBy with channel\n";
-$config->readConfigFile('user3.conf');
-var_dump($config->definedBy('verbose'));
-$config->set('default_channel', 'test1');
-var_dump($config->definedBy('verbose'));
-var_dump($config->definedBy('php_dir'));
-var_dump($config->definedBy('gronk'));
-$config->set('default_channel', 'pear');
-var_dump($config->definedBy('verbose', true));
-$config->set('default_channel', 'test1');
-var_dump($config->definedBy('verbose', true));
-var_dump($config->definedBy('php_dir', true));
-var_dump($config->definedBy('gronk', true));
-
-print "\n#11 testing: isDefined\n";
-var_dump($config->isDefined("php_dir"));
-var_dump($config->isDefined("verbose"));
-var_dump($config->isDefined("HTTP_GET_VARS"));
-var_dump($config->isDefined("query"));
-
-print "\n#12 testing: getGroup\n";
-foreach ($keys as $key) {
- print "$key: ".$config->getGroup($key)."\n";
-}
-
-print "\n#13 testing: getGroups\n";
-$groups = $config->getGroups();
-sort($groups);
-print implode(", ", $groups) . "\n";
-
-print "\n#14 testing: getGroupKeys\n";
-foreach ($groups as $group) {
- $gk = $config->getGroupKeys($group);
- sort($gk);
- print "$group: " . implode(", ", $gk) . "\n";
-}
-
-print "\n#15 testing: getPrompt\n";
-foreach ($keys as $key) {
- print "$key: ".$config->getPrompt($key)."\n";
-}
-
-
-//
-
-print "done\n";
-
-unlink("user.conf");
-unlink("user2.conf");
-unlink("user3.conf");
-unlink("system.conf");
-unlink("merge.conf");
-unlink("merge2.conf");
-
-// ------------------------------------------------------------------------- //
-
-function dump_file($file)
-{
- print "..$file:";
- $data = PEAR_Config::_readConfigDataFrom($file);
- if (empty($data)) {
- print " <empty>\n";
- return;
- }
- foreach ($data as $k => $v) {
- print " $k=\"$v\"";
- }
- print "\n";
-}
-
-function dump_files() {
- dump_file("system.conf");
- dump_file("user.conf");
-}
-
-function dump_array($name, $arr) {
- print "$name:";
- if (empty($arr)) {
- print " <empty>";
- } else {
- foreach ($arr as $k => $v) {
- if (is_array($v)) {
- print "\n ";
- dump_array("${name}[$k]", $v);
- continue;
- }
- print " $k=\"$v\"";
- }
- }
- print "\n";
-}
-
-function dump_config(&$obj, $layer = null) {
- if ($layer !== null) {
- dump_array($layer, $obj->configuration[$layer]);
- return;
- }
- foreach ($obj->configuration as $layer => $data) {
- if ($layer == "default") {
- continue;
- }
- dump_array($layer, $data);
- }
-}
-
-?>
---EXPECT--
-#0 starting up
-..system.conf: master_server="pear.php.net"
-..user.conf: <empty>
-
-#1 testing: constructor
-files: system="system.conf" user="user.conf"
-
-#2 testing: singleton
-string(4) "blah"
-string(4) "blah"
-
-#3 testing: readConfigFile
-user: verbose="2"
-system: master_server="pear.php.net"
-user: <empty>
-system: master_server="pear.php.net"
-
-#4 testing: mergeConfigFile
-user: verbose="2"
-user: verbose="100"
-user: verbose="2"
-user: <empty>
-unknown config file type `xyzzy'
-user: verbose="60"
- user[__channels]:
- user[__channels][test1]: verbose="70"
-
- user[__channels][test2]: verbose="71"
-
-
-user:
- user[__channels]:
- user[__channels][test1]: verbose="898"
-
- user[__channels][test2]: verbose="899"
-
- verbose="35"
-user:
- user[__channels]:
- user[__channels][test1]: verbose="70"
-
- user[__channels][test2]: verbose="71"
-
- verbose="60"
-
-#5 testing: config file version detection
-toonew.conf: unknown version `2.0'
-
-#6 testing: get/set/remove
-int(1)
-int(100)
-int(2)
-int(50)
-int(2)
-int(1)
-
-#6.5 testing: get/set/remove w/channels
-string(4) "pear"
-
-#7 testing: getType
-bool(false)
-string(7) "integer"
-string(6) "string"
-string(9) "directory"
-
-#8 testing: getDocs
-master_server: name of the main PEAR server
-
-#9 testing: getKeys
-bin_dir cache_dir cache_ttl data_dir default_channel doc_dir ext_dir http_proxy master_server password php_bin php_dir preferred_state sig_bin sig_keydir sig_keyid sig_type test_dir umask username verbose
-
-#10 testing: definedBy
-string(7) "default"
-string(4) "user"
-string(4) "user"
-string(6) "system"
-string(7) "default"
-
-#10.5 testing: definedBy with channel
-string(4) "user"
-string(4) "user"
-string(7) "default"
-string(0) ""
-array(2) {
- ["layer"]=>
- string(4) "user"
- ["channel"]=>
- string(4) "pear"
-}
-array(2) {
- ["layer"]=>
- string(4) "user"
- ["channel"]=>
- string(5) "test1"
-}
-array(2) {
- ["layer"]=>
- string(7) "default"
- ["channel"]=>
- string(4) "pear"
-}
-string(0) ""
-
-#11 testing: isDefined
-bool(true)
-bool(true)
-bool(false)
-bool(false)
-
-#12 testing: getGroup
-bin_dir: File Locations
-cache_dir: File Locations (Advanced)
-cache_ttl: Advanced
-data_dir: File Locations (Advanced)
-default_channel: Internet Access
-doc_dir: File Locations
-ext_dir: File Locations
-http_proxy: Internet Access
-master_server: Internet Access
-password: Maintainers
-php_bin: File Locations (Advanced)
-php_dir: File Locations
-preferred_state: Advanced
-sig_bin: Maintainers
-sig_keydir: Maintainers
-sig_keyid: Maintainers
-sig_type: Maintainers
-test_dir: File Locations (Advanced)
-umask: Advanced
-username: Maintainers
-verbose: Advanced
-
-#13 testing: getGroups
-Advanced, File Locations, File Locations (Advanced), Internet Access, Maintainers
-
-#14 testing: getGroupKeys
-Advanced: cache_ttl, preferred_state, umask, verbose
-File Locations: bin_dir, doc_dir, ext_dir, php_dir
-File Locations (Advanced): cache_dir, data_dir, php_bin, test_dir
-Internet Access: default_channel, http_proxy, master_server
-Maintainers: password, sig_bin, sig_keydir, sig_keyid, sig_type, username
-
-#15 testing: getPrompt
-bin_dir: PEAR executables directory
-cache_dir: PEAR Installer cache directory
-cache_ttl: Cache TimeToLive
-data_dir: PEAR data directory
-default_channel: Default Channel
-doc_dir: PEAR documentation directory
-ext_dir: PHP extension directory
-http_proxy: HTTP Proxy Server Address
-master_server: PEAR server
-password: PEAR password (for maintainers)
-php_bin: PHP CLI/CGI binary
-php_dir: PEAR directory
-preferred_state: Preferred Package State
-sig_bin: Signature Handling Program
-sig_keydir: Signature Key Directory
-sig_keyid: Signature Key Id
-sig_type: Package Signature Type
-test_dir: PEAR test directory
-umask: Unix file mask
-username: PEAR username (for maintainers)
-verbose: Debug Log Level
-done \ No newline at end of file
diff --git a/pear/tests/pear_dependency_checkExtension.phpt b/pear/tests/pear_dependency_checkExtension.phpt
deleted file mode 100644
index 89666a8337..0000000000
--- a/pear/tests/pear_dependency_checkExtension.phpt
+++ /dev/null
@@ -1,260 +0,0 @@
---TEST--
-PEAR_Dependency::checkExtension() test
---SKIPIF--
-<?php
-if (!getenv('PHP_PEAR_RUNTESTS')) {
- echo 'skip';
-}
-if (!ini_get('enable_dl') || ini_get('safe_mode')) {
- echo 'skip';
-}
-
-$dir = ini_get('extension_dir');
-if (OS_WINDOWS) {
- $suffix = '.dll';
-} elseif (PHP_OS == 'HP-UX') {
- $suffix = '.sl';
-} elseif (PHP_OS == 'AIX') {
- $suffix = '.a';
-} elseif (PHP_OS == 'OSX') {
- $suffix = '.bundle';
-} else {
- $suffix = '.so';
-}
-
-// get a list of possible extensions
-$extensions = array();
-if ($handle = opendir($dir)) {
- while (false !== ($file = readdir($handle))) {
- if (strpos($file, $suffix) && substr($file, 0, 4) == 'php_') {
- $extensions[] = $file;
- }
- }
- closedir($handle);
-}
-
-$loaded = false;
-$notloaded = false;
-// choose an extension for this test
-foreach ($extensions as $ext) {
- $ext = substr(substr($ext, 0, strlen($ext) - strlen($suffix)), 4);
- if (!$loaded && extension_loaded($ext)) {
- $loaded = $ext;
- }
- if (!$notloaded && !extension_loaded($ext)) {
- // safe list for testing
- if (in_array($ext, array('zip', 'bz2', 'sqlite', 'dbx'))) {
- $notloaded = $ext;
- }
- }
-}
-if (!$notloaded || !$loaded) {
- echo 'skip';
-}
-?>
---FILE--
-<?php
-
-@mkdir(dirname(__FILE__) . DIRECTORY_SEPARATOR . 'checkPackagetmp');
-require_once "PEAR/Registry.php";
-require_once "PEAR/Dependency.php";
-
-$dir = ini_get('extension_dir');
-if (OS_WINDOWS) {
- $suffix = '.dll';
-} elseif (PHP_OS == 'HP-UX') {
- $suffix = '.sl';
-} elseif (PHP_OS == 'AIX') {
- $suffix = '.a';
-} elseif (PHP_OS == 'OSX') {
- $suffix = '.bundle';
-} else {
- $suffix = '.so';
-}
-
-// get a list of possible extensions
-$extensions = array();
-if ($handle = opendir($dir)) {
- while (false !== ($file = readdir($handle))) {
- if (strpos($file, $suffix) && substr($file, 0, 4) == 'php_') {
- $extensions[] = $file;
- }
- }
- closedir($handle);
-}
-
-$loaded = false;
-$notloaded = false;
-// choose an extension for this test
-foreach ($extensions as $ext) {
- $ext = substr(substr($ext, 0, strlen($ext) - strlen($suffix)), 4);
- if (!$loaded && extension_loaded($ext)) {
- $loaded = $ext;
- }
- if (!$notloaded && !extension_loaded($ext)) {
- // safe list for testing
- if (in_array($ext, array('zip', 'bz2', 'sqlite', 'dbx'))) {
- $notloaded = $ext;
- }
- }
-}
-
-$reg = new PEAR_Registry;
-$reg->statedir = dirname(__FILE__) . DIRECTORY_SEPARATOR . 'checkPackagetmp';
-$dep = new PEAR_Dependency($reg);
-
-$msg = 'no error';
-$ret = $dep->checkExtension($msg, $loaded, null, 'has');
-echo 'extension 1 ok? ';
-echo $ret ? "no\n" : "yes\n";
-echo $msg . "\n";
-
-$msg = 'no error';
-$ret = $dep->checkExtension($msg, $notloaded, null, 'not');
-echo 'extension 2 ok? ';
-echo $ret ? "no\n" : "yes\n";
-echo $msg . "\n";
-
-$loadedver = phpversion($loaded);
-
-$msg = 'no error';
-$ret = $dep->checkExtension($msg, $loaded, $loadedver + 1, 'ge');
-echo 'extension 3 ok? ';
-echo $ret ? "no\n" : "yes\n";
-echo 'message : ' . ($msg == "'$loaded' PHP extension version >= " . ($loadedver + 1) .
- " is required" ? "match\n" : "$msg\n" );
-
-$msg = 'no error';
-$ret = $dep->checkExtension($msg, $loaded, $loadedver + 1, 'ge', true);
-echo 'extension 3 optional ok? ';
-echo $ret ? "no\n" : "yes\n";
-echo 'message : ' . ($msg == "'$loaded' PHP extension version >= " . ($loadedver + 1) .
- " is recommended to utilize some features" ? "match\n" : "$msg\n" );
-
-$msg = 'no error';
-$ret = $dep->checkExtension($msg, $loaded, $loadedver, 'ne');
-echo 'extension 4 ok? ';
-echo $ret ? "no\n" : "yes\n";
-echo 'message : ' . ($msg == "'$loaded' PHP extension version != " . $loadedver .
- " is required" ? "match\n" : "$msg\n" );
-
-$msg = 'no error';
-$ret = $dep->checkExtension($msg, $loaded, $loadedver, 'gt');
-echo 'extension 5 ok? ';
-echo $ret ? "no\n" : "yes\n";
-echo 'message : ' . ($msg == "'$loaded' PHP extension version > " . $loadedver .
- " is required" ? "match\n" : "$msg\n" );
-
-$msg = 'no error';
-$ret = $dep->checkExtension($msg, $loaded, $loadedver, 'gt', true);
-echo 'extension 5 optional ok? ';
-echo $ret ? "no\n" : "yes\n";
-echo 'message : ' . ($msg == "'$loaded' PHP extension version > " . $loadedver .
- " is recommended to utilize some features" ? "match\n" : "$msg\n" );
-
-$msg = 'no error';
-$ret = $dep->checkExtension($msg, $loaded, $loadedver, 'lt');
-echo 'extension 6 ok? ';
-echo $ret ? "no\n" : "yes\n";
-echo 'message : ' . ($msg == "'$loaded' PHP extension version < " . $loadedver .
- " is required" ? "match\n" : "$msg\n" );
-
-$msg = 'no error';
-$ret = $dep->checkExtension($msg, $loaded, $loadedver, 'lt', true);
-echo 'extension 6 optional ok? ';
-echo $ret ? "no\n" : "yes\n";
-echo 'message : ' . ($msg == "'$loaded' PHP extension version < " . $loadedver .
- " is recommended to utilize some features" ? "match\n" : "$msg\n" );
-
-if ($loadedver == 0) {
- echo "extension 7 ok? no\nmessage : match\n";
- echo "extension 7 optional ok? no\nmessage : match\n";
-} else {
- $msg = 'no error';
- $ret = $dep->checkExtension($msg, $loaded, $loadedver - 1, 'le');
- echo 'extension 7 ok? ';
- echo $ret ? "no\n" : "yes\n";
- echo 'message : ' . ($msg == "'$loaded' PHP extension version <= " . ($loadedver - 1).
- " is required" ? "match\n" : "$msg\n");
-
- $msg = 'no error';
- $ret = $dep->checkExtension($msg, $loaded, $loadedver - 1, 'le', true);
- echo 'extension 7 ok? ';
- echo $ret ? "no\n" : "yes\n";
- echo 'message : ' . ($msg == "'$loaded' PHP extension version <= " . ($loadedver - 1).
- " is recommended to utilize some features" ? "match\n" : "$msg\n");
-}
-
-$msg = 'no error';
-$ret = $dep->checkExtension($msg, $loaded, $loadedver, 'eq');
-echo 'extension 8 ok? ';
-echo $ret ? "no\n" : "yes\n";
-echo $msg . "\n";
-
-$msg = 'no error';
-$ret = $dep->checkExtension($msg, $notloaded, $loadedver, 'ne');
-echo 'extension 9 ok? ';
-echo $ret ? "no\n" : "yes\n";
-echo $msg . "\n";
-
-$msg = 'no error';
-$ret = $dep->checkExtension($msg, $loaded, $loadedver + 1, 'eq');
-echo 'extension 10 ok? ';
-echo $ret ? "no\n" : "yes\n";
-echo 'message : ' . ($msg == "'$loaded' PHP extension version == " . ($loadedver + 1).
- " is required" ? "match\n" : "$msg\n");
-
-$msg = 'no error';
-$ret = $dep->checkExtension($msg, $loaded, $loadedver + 1, 'eq', true);
-echo 'extension 10 optional ok? ';
-echo $ret ? "no\n" : "yes\n";
-echo 'message : ' . ($msg == "'$loaded' PHP extension version == " . ($loadedver + 1).
- " is recommended to utilize some features" ? "match\n" : "$msg\n");
-
-cleanall();
-// ------------------------------------------------------------------------- //
-
-function cleanall()
-{
- $dp = opendir(dirname(__FILE__) . DIRECTORY_SEPARATOR . 'checkPackagetmp');
- while ($ent = readdir($dp)) {
- if (substr($ent, -4) == ".reg") {
- unlink(dirname(__FILE__) . DIRECTORY_SEPARATOR . 'checkPackagetmp' . DIRECTORY_SEPARATOR . $ent);
- }
- }
- closedir($dp);
- rmdir(dirname(__FILE__) . DIRECTORY_SEPARATOR . 'checkPackagetmp');
-}
-
-?>
---EXPECT--
-extension 1 ok? yes
-no error
-extension 2 ok? yes
-no error
-extension 3 ok? no
-message : match
-extension 3 optional ok? no
-message : match
-extension 4 ok? no
-message : match
-extension 5 ok? no
-message : match
-extension 5 optional ok? no
-message : match
-extension 6 ok? no
-message : match
-extension 6 optional ok? no
-message : match
-extension 7 ok? no
-message : match
-extension 7 optional ok? no
-message : match
-extension 8 ok? yes
-no error
-extension 9 ok? yes
-no error
-extension 10 ok? no
-message : match
-extension 10 optional ok? no
-message : match
diff --git a/pear/tests/pear_dependency_checkPackage.phpt b/pear/tests/pear_dependency_checkPackage.phpt
deleted file mode 100644
index 90dfb556f6..0000000000
--- a/pear/tests/pear_dependency_checkPackage.phpt
+++ /dev/null
@@ -1,267 +0,0 @@
---TEST--
-PEAR_Dependency::checkPackage() test
---SKIPIF--
-<?php
-if (!getenv('PHP_PEAR_RUNTESTS')) {
- echo 'skip';
-}
-?>
---FILE--
-<?php
-require_once "PEAR/Registry.php";
-require_once "PEAR/Dependency.php";
-
-mkdir(dirname(__FILE__) . DIRECTORY_SEPARATOR . 'checkPackagetmp');
-// snarfed from pear_registry.phpt
-$reg = new PEAR_Registry;
-$reg->statedir = dirname(__FILE__) . DIRECTORY_SEPARATOR . 'checkPackagetmp';
-
-$files1 = array(
- "pkg1-1.php" => array(
- "role" => "php",
- ),
- "pkg1-2.php" => array(
- "role" => "php",
- "baseinstalldir" => "pkg1",
- ),
- );
-$reg->addPackage("pkg1", array("name" => "pkg1", "version" => "1.0", "filelist" => $files1));
-
-$dep = new PEAR_Dependency($reg);
-$msg = 'no error';
-$ret = $dep->checkPackage($msg, 'pkg1');
-echo 'has works? ';
-echo $ret ? "no\n" : "yes\n";
-echo $msg . "\n";
-
-$msg = 'no error';
-$ret = $dep->checkPackage($msg, 'pkg1', '1.0', 'eq');
-echo 'eq 1.0 works? ';
-echo $ret ? "no\n" : "yes\n";
-echo $msg . "\n";
-
-$msg = 'no error';
-$ret = $dep->checkPackage($msg, 'pkg1', '1.0', 'le');
-echo 'le 1.0 works? ';
-echo $ret ? "no\n" : "yes\n";
-echo $msg . "\n";
-
-$msg = 'no error';
-$ret = $dep->checkPackage($msg, 'pkg1', '1.1', 'lt');
-echo 'lt 1.1 works? ';
-echo $ret ? "no\n" : "yes\n";
-echo $msg . "\n";
-
-$msg = 'no error';
-$ret = $dep->checkPackage($msg, 'pkg1', '1.1', 'ne');
-echo 'ne 1.1 works? ';
-echo $ret ? "no\n" : "yes\n";
-echo $msg . "\n";
-
-$msg = 'no error';
-$ret = $dep->checkPackage($msg, 'pkg1', '1.0', 'ge');
-echo 'ge 1.0 works? ';
-echo $ret ? "no\n" : "yes\n";
-echo $msg . "\n";
-
-$msg = 'no error';
-$ret = $dep->checkPackage($msg, 'pkg1', '0.9', 'gt');
-echo 'ge 0.9 works? ';
-echo $ret ? "no\n" : "yes\n";
-echo $msg . "\n";
-
-$msg = 'no error';
-$ret = $dep->checkPackage($msg, 'pkg2', null, 'not');
-echo 'not pkg2 works? ';
-echo $ret ? "no\n" : "yes\n";
-echo $msg . "\n";
-
-// error conditions
-
-$msg = 'no error';
-$ret = $dep->checkPackage($msg, 'pkg2', null, 'has');
-echo 'has pkg2 works? ';
-echo $ret ? "no\n" : "yes\n";
-echo '$ret is PEAR_DEPENDENCY_MISSING? ';
-echo ($ret == PEAR_DEPENDENCY_MISSING) ? "yes\n" : "no\n";
-echo $msg . "\n";
-
-$msg = 'no error';
-$ret = $dep->checkPackage($msg, 'pkg2', null, 'has', true);
-echo 'has optional pkg2 works? ';
-echo $ret ? "no\n" : "yes\n";
-echo '$ret is PEAR_DEPENDENCY_MISSING_OPTIONAL? ';
-echo ($ret == PEAR_DEPENDENCY_MISSING_OPTIONAL) ? "yes\n" : "no\n";
-echo $msg . "\n";
-
-$msg = 'no error';
-$ret = $dep->checkPackage($msg, 'pkg1', '0.9', 'le');
-echo 'le 0.9 works? ';
-echo $ret ? "no\n" : "yes\n";
-echo '$ret is PEAR_DEPENDENCY_CONFLICT? ';
-echo ($ret == PEAR_DEPENDENCY_CONFLICT) ? "yes\n" : "no\n";
-echo $msg . "\n";
-
-$msg = 'no error';
-$ret = $dep->checkPackage($msg, 'pkg1', '0.9', 'le', true);
-echo 'optional le 0.9 works? ';
-echo $ret ? "no\n" : "yes\n";
-echo '$ret is PEAR_DEPENDENCY_CONFLICT_OPTIONAL? ';
-echo ($ret == PEAR_DEPENDENCY_CONFLICT_OPTIONAL) ? "yes\n" : "no\n";
-echo $msg . "\n";
-
-$msg = 'no error';
-$ret = $dep->checkPackage($msg, 'pkg1', '1.0', 'ne');
-echo 'ne 1.0 works? ';
-echo $ret ? "no\n" : "yes\n";
-echo '$ret is PEAR_DEPENDENCY_CONFLICT? ';
-echo ($ret == PEAR_DEPENDENCY_CONFLICT) ? "yes\n" : "no\n";
-echo $msg . "\n";
-
-$msg = 'no error';
-$ret = $dep->checkPackage($msg, 'pkg1', '1.0', 'ne', true);
-echo 'optional ne 1.0 works? ';
-echo $ret ? "no\n" : "yes\n";
-echo '$ret is PEAR_DEPENDENCY_CONFLICT_OPTIONAL? ';
-echo ($ret == PEAR_DEPENDENCY_CONFLICT_OPTIONAL) ? "yes\n" : "no\n";
-echo $msg . "\n";
-
-$msg = 'no error';
-$ret = $dep->checkPackage($msg, 'pkg1', '1.1', 'ge');
-echo 'ge 1.1 works? ';
-echo $ret ? "no\n" : "yes\n";
-echo '$ret is PEAR_DEPENDENCY_UPGRADE_MINOR? ';
-echo ($ret == PEAR_DEPENDENCY_UPGRADE_MINOR) ? "yes\n" : "no\n";
-echo $msg . "\n";
-
-$msg = 'no error';
-$ret = $dep->checkPackage($msg, 'pkg1', '1.1', 'ge', true);
-echo 'optional ge 1.1 works? ';
-echo $ret ? "no\n" : "yes\n";
-echo '$ret is PEAR_DEPENDENCY_UPGRADE_MINOR_OPTIONAL? ';
-echo ($ret == PEAR_DEPENDENCY_UPGRADE_MINOR_OPTIONAL) ? "yes\n" : "no\n";
-echo $msg . "\n";
-
-$msg = 'no error';
-$ret = $dep->checkPackage($msg, 'pkg1', '2.0', 'ge');
-echo 'ge 2.0 works? ';
-echo $ret ? "no\n" : "yes\n";
-echo '$ret is PEAR_DEPENDENCY_UPGRADE_MAJOR? ';
-echo ($ret == PEAR_DEPENDENCY_UPGRADE_MAJOR) ? "yes\n" : "no\n";
-echo $msg . "\n";
-
-$msg = 'no error';
-$ret = $dep->checkPackage($msg, 'pkg1', '2.0', 'ge', true);
-echo 'optional ge 2.0 works? ';
-echo $ret ? "no\n" : "yes\n";
-echo '$ret is PEAR_DEPENDENCY_UPGRADE_MAJOR_OPTIONAL? ';
-echo ($ret == PEAR_DEPENDENCY_UPGRADE_MAJOR_OPTIONAL) ? "yes\n" : "no\n";
-echo $msg . "\n";
-
-$msg = 'no error';
-$ret = $dep->checkPackage($msg, 'pkg1', '1.0', 'gt');
-echo 'gt 1.0 works? ';
-echo $ret ? "no\n" : "yes\n";
-echo '$ret is PEAR_DEPENDENCY_UPGRADE_MINOR? ';
-echo ($ret == PEAR_DEPENDENCY_UPGRADE_MINOR) ? "yes\n" : "no\n";
-echo $msg . "\n";
-
-$msg = 'no error';
-$ret = $dep->checkPackage($msg, 'pkg1', '1.0', 'gt', true);
-echo 'optional gt 1.0 works? ';
-echo $ret ? "no\n" : "yes\n";
-echo '$ret is PEAR_DEPENDENCY_UPGRADE_MINOR_OPTIONAL? ';
-echo ($ret == PEAR_DEPENDENCY_UPGRADE_MINOR_OPTIONAL) ? "yes\n" : "no\n";
-echo $msg . "\n";
-
-$msg = 'no error';
-$ret = $dep->checkPackage($msg, 'pkg1', null, 'not');
-echo 'not pkg1 works? ';
-echo $ret ? "no\n" : "yes\n";
-echo '$ret is PEAR_DEPENDENCY_CONFLICT? ';
-echo ($ret == PEAR_DEPENDENCY_CONFLICT) ? "yes\n" : "no\n";
-echo $msg . "\n";
-
-$msg = 'no error';
-$ret = $dep->checkPackage($msg, 'pkg1', null, 'foobar');
-echo 'foobar pkg1 works? ';
-echo $ret ? "no\n" : "yes\n";
-echo '$ret is PEAR_DEPENDENCY_BAD_DEPENDENCY? ';
-echo ($ret == PEAR_DEPENDENCY_BAD_DEPENDENCY) ? "yes\n" : "no\n";
-echo $msg . "\n";
-cleanall();
-
-// ------------------------------------------------------------------------- //
-
-function cleanall()
-{
- $dp = opendir(dirname(__FILE__) . DIRECTORY_SEPARATOR . 'checkPackagetmp');
- while ($ent = readdir($dp)) {
- if (substr($ent, -4) == ".reg") {
- unlink(dirname(__FILE__) . DIRECTORY_SEPARATOR . 'checkPackagetmp' . DIRECTORY_SEPARATOR . $ent);
- }
- }
- closedir($dp);
- rmdir(dirname(__FILE__) . DIRECTORY_SEPARATOR . 'checkPackagetmp');
-}
-
-?>
---EXPECT--
-has works? yes
-no error
-eq 1.0 works? yes
-no error
-le 1.0 works? yes
-no error
-lt 1.1 works? yes
-no error
-ne 1.1 works? yes
-no error
-ge 1.0 works? yes
-no error
-ge 0.9 works? yes
-no error
-not pkg2 works? yes
-no error
-has pkg2 works? no
-$ret is PEAR_DEPENDENCY_MISSING? yes
-requires package `pear::pkg2'
-has optional pkg2 works? no
-$ret is PEAR_DEPENDENCY_MISSING_OPTIONAL? yes
-package `pear::pkg2' is recommended to utilize some features.
-le 0.9 works? no
-$ret is PEAR_DEPENDENCY_CONFLICT? yes
-requires package `pear::pkg1' <= 0.9
-optional le 0.9 works? no
-$ret is PEAR_DEPENDENCY_CONFLICT_OPTIONAL? yes
-package `pear::pkg1' version <= 0.9 is recommended to utilize some features. Installed version is 1.0
-ne 1.0 works? no
-$ret is PEAR_DEPENDENCY_CONFLICT? yes
-requires package `pear::pkg1' != 1.0
-optional ne 1.0 works? no
-$ret is PEAR_DEPENDENCY_CONFLICT_OPTIONAL? yes
-package `pear::pkg1' version != 1.0 is recommended to utilize some features. Installed version is 1.0
-ge 1.1 works? no
-$ret is PEAR_DEPENDENCY_UPGRADE_MINOR? yes
-requires package `pear::pkg1' >= 1.1
-optional ge 1.1 works? no
-$ret is PEAR_DEPENDENCY_UPGRADE_MINOR_OPTIONAL? yes
-package `pear::pkg1' version >= 1.1 is recommended to utilize some features. Installed version is 1.0
-ge 2.0 works? no
-$ret is PEAR_DEPENDENCY_UPGRADE_MAJOR? yes
-requires package `pear::pkg1' >= 2.0
-optional ge 2.0 works? no
-$ret is PEAR_DEPENDENCY_UPGRADE_MAJOR_OPTIONAL? yes
-package `pear::pkg1' version >= 2.0 is recommended to utilize some features. Installed version is 1.0
-gt 1.0 works? no
-$ret is PEAR_DEPENDENCY_UPGRADE_MINOR? yes
-requires package `pear::pkg1' > 1.0
-optional gt 1.0 works? no
-$ret is PEAR_DEPENDENCY_UPGRADE_MINOR_OPTIONAL? yes
-package `pear::pkg1' version > 1.0 is recommended to utilize some features. Installed version is 1.0
-not pkg1 works? no
-$ret is PEAR_DEPENDENCY_CONFLICT? yes
-conflicts with package `pear::pkg1'
-foobar pkg1 works? no
-$ret is PEAR_DEPENDENCY_BAD_DEPENDENCY? yes
-relation 'foobar' with requirement '' is not supported (name=pear::pkg1)
diff --git a/pear/tests/pear_dependency_checkPackageUninstall.phpt b/pear/tests/pear_dependency_checkPackageUninstall.phpt
deleted file mode 100644
index b93a2ea1db..0000000000
--- a/pear/tests/pear_dependency_checkPackageUninstall.phpt
+++ /dev/null
@@ -1,176 +0,0 @@
---TEST--
-PEAR_Dependency::checkPackageUninstall() test
---SKIPIF--
-<?php
-if (!getenv('PHP_PEAR_RUNTESTS')) {
- echo 'skip';
-}
-?>
---FILE--
-<?php
-
-require_once "PEAR/Registry.php";
-require_once "PEAR/Dependency.php";
-
-// snarfed from pear_registry.phpt
-$reg = new PEAR_Registry;
-@mkdir(dirname(__FILE__) . DIRECTORY_SEPARATOR . 'checkPackagetmp');
-$reg->statedir = dirname(__FILE__) . DIRECTORY_SEPARATOR . 'checkPackagetmp';
-
-$files1 = array(
- "pkg1-1.php" => array(
- "role" => "php",
- ),
- "pkg1-2.php" => array(
- "role" => "php",
- "baseinstalldir" => "pkg1",
- ),
- );
-$files2 = array(
- "pkg2-1.php" => array(
- "role" => "php",
- ),
- "pkg2-2.php" => array(
- "role" => "php",
- "baseinstalldir" => "pkg2",
- ),
- );
-$files3 = array(
- "pkg3-1.php" => array(
- "role" => "php",
- ),
- "pkg3-2.php" => array(
- "role" => "php",
- "baseinstalldir" => "pkg3",
- ),
- );
-
-$reg->addPackage("pkg2", array("name" => "pkg2", "version" => "2.0", "filelist" => $files2));
-$reg->addPackage("pkg3", array("name" => "pkg3", "version" => "3.0", "filelist" => $files3));
-
-$reg->addPackage("pkg1", array("name" => "pkg1", "version" => "1.0", "filelist" => $files1,
- 'release_deps' => array(
- array('type' => 'pkg', 'name' => 'pkg3', 'rel' => 'not')
- )));
-
-$dep = new PEAR_Dependency($reg);
-$msg = '';
-$warn = '';
-$ret = $dep->checkPackageUninstall($msg, $warn, 'pkg1');
-echo 'uninstall ok? ';
-echo $ret ? "no\n" : "yes\n";
-echo $msg . "\n";
-echo $warn . "\n";
-
-cleanall();
-
-$reg->addPackage("pkg2", array("name" => "pkg2", "version" => "2.0", "filelist" => $files2));
-$reg->addPackage("pkg3", array("name" => "pkg3", "version" => "3.0", "filelist" => $files3));
-
-$reg->addPackage("pkg1", array("name" => "pkg1", "version" => "1.0", "filelist" => $files1,
- 'release_deps' => array(
- array('type' => 'pkg', 'name' => 'pkg2', 'rel' => 'ne', 'version' => '6.0')
- )));
-
-$dep = new PEAR_Dependency($reg);
-$msg = '';
-$warn = '';
-$ret = $dep->checkPackageUninstall($msg, $warn, 'pkg2');
-echo 'uninstall ok? ';
-echo $ret ? "no\n" : "yes\n";
-echo $msg . "\n";
-echo $warn . "\n";
-
-cleanall();
-
-$reg->addPackage("pkg2", array("name" => "pkg2", "version" => "2.0", "filelist" => $files2));
-$reg->addPackage("pkg3", array("name" => "pkg3", "version" => "3.0", "filelist" => $files3));
-
-$reg->addPackage("pkg1", array("name" => "pkg1", "version" => "1.0", "filelist" => $files1,
- 'release_deps' => array(
- array('type' => 'pkg', 'name' => 'pkg2', 'rel' => 'has')
- )));
-
-$dep = new PEAR_Dependency($reg);
-$msg = '';
-$warn = '';
-$ret = $dep->checkPackageUninstall($msg, $warn, 'pkg2');
-echo 'uninstall ok? ';
-echo $ret ? "no\n" : "yes\n";
-echo $msg . "\n";
-echo $warn . "\n";
-
-cleanall();
-
-$reg->addPackage("pkg2", array("name" => "pkg2", "version" => "2.0", "filelist" => $files2));
-$reg->addPackage("pkg3", array("name" => "pkg3", "version" => "3.0", "filelist" => $files3));
-
-$reg->addPackage("pkg1", array("name" => "pkg1", "version" => "1.0", "filelist" => $files1,
- 'release_deps' => array(
- array('type' => 'pkg', 'name' => 'pkg2', 'rel' => 'has', 'optional' => 'no')
- )));
-
-$dep = new PEAR_Dependency($reg);
-$msg = '';
-$warn = '';
-$ret = $dep->checkPackageUninstall($msg, $warn, 'pkg2');
-echo 'uninstall ok? ';
-echo $ret ? "no\n" : "yes\n";
-echo $msg . "\n";
-echo $warn . "\n";
-
-cleanall();
-
-$reg->addPackage("pkg2", array("name" => "pkg2", "version" => "2.0", "filelist" => $files2));
-$reg->addPackage("pkg3", array("name" => "pkg3", "version" => "3.0", "filelist" => $files3));
-
-$reg->addPackage("pkg1", array("name" => "pkg1", "version" => "1.0", "filelist" => $files1,
- 'release_deps' => array(
- array('type' => 'pkg', 'name' => 'pkg2', 'rel' => 'has', 'optional' => 'yes')
- )));
-
-$dep = new PEAR_Dependency($reg);
-$msg = '';
-$warn = '';
-$ret = $dep->checkPackageUninstall($msg, $warn, 'pkg2');
-echo 'uninstall ok? ';
-echo $ret ? "no\n" : "yes\n";
-echo $msg . "\n";
-echo $warn . "\n";
-
-cleanall();
-
-// ------------------------------------------------------------------------- //
-
-function cleanall()
-{
- $dp = opendir(dirname(__FILE__) . DIRECTORY_SEPARATOR . 'checkPackagetmp');
- while ($ent = readdir($dp)) {
- if (substr($ent, -4) == ".reg") {
- unlink(dirname(__FILE__) . DIRECTORY_SEPARATOR . 'checkPackagetmp' . DIRECTORY_SEPARATOR . $ent);
- }
- }
- closedir($dp);
- rmdir(dirname(__FILE__) . DIRECTORY_SEPARATOR . 'checkPackagetmp');
-}
-
-?>
---EXPECT--
-uninstall ok? yes
-
-
-uninstall ok? yes
-
-
-uninstall ok? no
-Package 'pear::pkg1' depends on 'pear::pkg2'
-
-
-uninstall ok? no
-Package 'pear::pkg1' depends on 'pear::pkg2'
-
-
-uninstall ok? yes
-
-
-Warning: Package 'pear::pkg1' optionally depends on 'pear::pkg2' \ No newline at end of file
diff --git a/pear/tests/pear_downloader_invalid.phpt b/pear/tests/pear_downloader_invalid.phpt
deleted file mode 100644
index 7c10dcd80b..0000000000
--- a/pear/tests/pear_downloader_invalid.phpt
+++ /dev/null
@@ -1,379 +0,0 @@
---TEST--
-PEAR_Downloader::download() invalid values test
---SKIPIF--
-<?php
-if (!getenv('PHP_PEAR_RUNTESTS')) {
- echo 'skip';
-}
-?>
---FILE--
-<?php
-
-$server = 'pear.Chiara';
-//$server = 'test.pear.php.net';
-$temp_path = dirname(__FILE__) . DIRECTORY_SEPARATOR . 'testinstallertemp';
-if (!is_dir($temp_path)) {
- mkdir($temp_path);
-}
-if (!is_dir($temp_path . DIRECTORY_SEPARATOR . 'php')) {
- mkdir($temp_path . DIRECTORY_SEPARATOR . 'php');
-}
-if (!is_dir($temp_path . DIRECTORY_SEPARATOR . 'data')) {
- mkdir($temp_path . DIRECTORY_SEPARATOR . 'data');
-}
-if (!is_dir($temp_path . DIRECTORY_SEPARATOR . 'doc')) {
- mkdir($temp_path . DIRECTORY_SEPARATOR . 'doc');
-}
-if (!is_dir($temp_path . DIRECTORY_SEPARATOR . 'test')) {
- mkdir($temp_path . DIRECTORY_SEPARATOR . 'test');
-}
-if (!is_dir($temp_path . DIRECTORY_SEPARATOR . 'ext')) {
- mkdir($temp_path . DIRECTORY_SEPARATOR . 'ext');
-}
-if (!is_dir($temp_path . DIRECTORY_SEPARATOR . 'script')) {
- mkdir($temp_path . DIRECTORY_SEPARATOR . 'script');
-}
-if (!is_dir($temp_path . DIRECTORY_SEPARATOR . 'tmp')) {
- mkdir($temp_path . DIRECTORY_SEPARATOR . 'tmp');
-}
-if (!is_dir($temp_path . DIRECTORY_SEPARATOR . 'bin')) {
- mkdir($temp_path . DIRECTORY_SEPARATOR . 'bin');
-}
-if (!is_dir($temp_path . DIRECTORY_SEPARATOR . 'cache')) {
- mkdir($temp_path . DIRECTORY_SEPARATOR . 'cache');
-}
-// make the fake configuration - we'll use one of these and it should work
-$config = serialize(array('master_server' => $server,
- 'preferred_state' => 'stable',
- 'cache_dir' => $temp_path . DIRECTORY_SEPARATOR . 'cache',
- 'php_dir' => $temp_path . DIRECTORY_SEPARATOR . 'php',
- 'ext_dir' => $temp_path . DIRECTORY_SEPARATOR . 'ext',
- 'data_dir' => $temp_path . DIRECTORY_SEPARATOR . 'data',
- 'doc_dir' => $temp_path . DIRECTORY_SEPARATOR . 'doc',
- 'test_dir' => $temp_path . DIRECTORY_SEPARATOR . 'test',
- 'bin_dir' => $temp_path . DIRECTORY_SEPARATOR . 'bin',));
-touch($temp_path . DIRECTORY_SEPARATOR . 'pear.conf');
-$fp = fopen($temp_path . DIRECTORY_SEPARATOR . 'pear.conf', 'w');
-fwrite($fp, $config);
-fclose($fp);
-touch($temp_path . DIRECTORY_SEPARATOR . 'pear.ini');
-$fp = fopen($temp_path . DIRECTORY_SEPARATOR . 'pear.ini', 'w');
-fwrite($fp, $config);
-fclose($fp);
-
-putenv('PHP_PEAR_SYSCONF_DIR='.$temp_path);
-$home = getenv('HOME');
-if (!empty($home)) {
- // for PEAR_Config initialization
- putenv('HOME="'.$temp_path);
-}
-require_once "PEAR/Downloader.php";
-require_once 'PEAR/Installer.php';
-require_once dirname(__FILE__) . DIRECTORY_SEPARATOR . 'download_test_classes.php.inc';
-
-// no UI is needed for these tests
-$ui = false;
-$curdir = getcwd();
-chdir(dirname(__FILE__));
-
-PEAR::setErrorHandling(PEAR_ERROR_CALLBACK, 'catchit');
-$error_to_catch = false;
-function catchit($err)
-{
- global $error_to_catch;
- if ($error_to_catch) {
- if ($err->getMessage() == $error_to_catch) {
- $error_to_catch = false;
- echo "Caught expected error\n";
- return;
- }
- }
- echo "Caught error: " . $err->getMessage() . "\n";
-}
-
-$config = &PEAR_Config::singleton();
-// initialize fake pear channel
-require_once 'PEAR/ChannelFile.php';
-$chan = new PEAR_ChannelFile;
-$chan->setName('pear');
-$chan->setSummary('PEAR');
-$chan->setServer($server);
-$chan->setDefaultPEARProtocols();
-$reg = new PEAR_Registry($config->get('php_dir'), $chan);
-$options = array();
-$installer = &new test_PEAR_Downloader($ui, $options, $config);
-
-echo "-=-=-=-=-=-=-=-=- Failure Tests -=-=-=-=-=-=-=-=-=-=-\n";
-
-echo "Test invalid package name:\n";
-$packages = array("/invalid+packagename");
-$a = $installer->doDownload($packages);
-$installpackages = $installer->getDownloadedPackages();
-var_dump(get_class($a), $installer->getErrorMsgs(), $installpackages);
-
-echo "Test download of a package with no releases:\n";
-$packages = array("noreleases");
-$a = $installer->doDownload($packages);
-$installpackages = $installer->getDownloadedPackages();
-var_dump(get_class($a), $installer->getErrorMsgs(), $installpackages);
-
-echo "Test download of a non-existing package version:\n";
-$packages = array("pkg1-1976.9.2");
-$a = $installer->doDownload($packages);
-$installpackages = $installer->getDownloadedPackages();
-var_dump(get_class($a), $installer->getErrorMsgs(), $installpackages);
-
-echo "Test download of a non-existing package release state:\n";
-$packages = array("pkg1-snapshot");
-$a = $installer->doDownload($packages);
-$installpackages = $installer->getDownloadedPackages();
-var_dump(get_class($a), $installer->getErrorMsgs(), $installpackages);
-
-echo "Test download of invalid release state:\n";
-$packages = array("pkg1-burgerking");
-$a = $installer->doDownload($packages);
-$installpackages = $installer->getDownloadedPackages();
-var_dump(get_class($a), $installer->getErrorMsgs(), $installpackages);
-
-$installer->configSet('preferred_state', 'stable');
-
-echo "Test automatic version resolution (stable):\n";
-$packages = array("stabilitytoolow");
-$a = $installer->doDownload($packages);
-$installpackages = $installer->getDownloadedPackages();
-var_dump(get_class($a), $installer->getErrorMsgs(), $installpackages);
-
-echo "Test automatic version resolution (stable) with --force:\n";
-$packages = array("stabilitytoolow");
-$installer->setOptions(array('force' => true));
-$a = $installer->doDownload($packages);
-$installpackages = $installer->getDownloadedPackages();
-var_dump(get_class($a), $installer->getErrorMsgs(), $installpackages[0]['info']['version']);
-
-$installer->configSet('preferred_state', 'beta');
-$installer->setOptions(array());
-
-echo "Test automatic version resolution (beta):\n";
-$packages = array("stabilitytoolow");
-$a = $installer->doDownload($packages);
-$installpackages = $installer->getDownloadedPackages();
-var_dump(get_class($a), $installer->getErrorMsgs(), $installpackages[0]['info']['version']);
-
-$installer->configSet('preferred_state', 'alpha');
-
-echo "Test automatic version resolution (alpha):\n";
-$packages = array("stabilitytoolow");
-$a = $installer->doDownload($packages);
-$installpackages = $installer->getDownloadedPackages();
-var_dump(get_class($a), $installer->getErrorMsgs(), $installpackages[0]['info']['version']);
-
-$installer->configSet('preferred_state', 'devel');
-
-echo "Test automatic version resolution (devel):\n";
-$packages = array("stabilitytoolow");
-$a = $installer->doDownload($packages);
-$installpackages = $installer->getDownloadedPackages();
-var_dump(get_class($a), $installer->getErrorMsgs(), $installpackages[0]['info']['version']);
-
-echo "Test download attempt if a version is already installed:\n";
-
-$forinstall = &new PEAR_Installer($ui);
-$forinstall->setOptions(array());
-$installer->setOptions(array());
-
-$installer->doDownload(array('pkg6'));
-$pkgs = $installer->getDownloadedPackages();
-$forinstall->install($pkgs[0]['file']);
-$installer->doDownload(array('pkg6'));
-var_dump(get_class($a), $installer->getErrorMsgs());
-
-echo "Test download attempt if a version is already installed with --force:\n";
-
-$installer->setOptions(array('force' => true));
-
-$installer->doDownload(array('pkg6'));
-$pkgs = $installer->getDownloadedPackages();
-var_dump(get_class($a), $installer->getErrorMsgs(), $pkgs[0]['info']['version']);
-
-echo "Test download attempt if a version is already installed with upgrade, same version:\n";
-
-$installer->setOptions(array('upgrade' => true));
-
-$installer->doDownload(array('pkg6'));
-$pkgs = $installer->getDownloadedPackages();
-var_dump(get_class($a), $installer->getErrorMsgs());
-
-echo "Test download attempt if a version is already installed with upgrade, lesser version:\n";
-
-$installer->setOptions(array('upgrade' => true));
-
-$installer->doDownload(array('pkg6-1.1'));
-$pkgs = $installer->getDownloadedPackages();
-var_dump(get_class($a), $installer->getErrorMsgs());
-
-echo "Test download attempt with --alldeps, but dependency has no releases:\n";
-
-$installer->setOptions(array('alldeps' => true));
-
-$installer->doDownload(array('depnoreleases'));
-$pkgs = $installer->getDownloadedPackages();
-var_dump(get_class($a), $installer->getErrorMsgs());
-
-echo "Test download attempt with --onlyreqdeps, but dependency has no releases:\n";
-
-$installer->setOptions(array('onlyreqdeps' => true));
-
-$installer->doDownload(array('depnoreleases'));
-$pkgs = $installer->getDownloadedPackages();
-var_dump(get_class($a), $installer->getErrorMsgs());
-
-$installer->configSet('preferred_state', 'stable');
-echo "Test download attempt with --alldeps, but dependency is too unstable:\n";
-$installer->setOptions(array('alldeps' => true));
-
-$installer->doDownload(array('depunstable'));
-$pkgs = $installer->getDownloadedPackages();
-var_dump(get_class($a), $installer->getErrorMsgs());
-
-echo "Test download attempt with --onlyreqdeps, but dependency is too unstable:\n";
-
-$installer->setOptions(array('onlyreqdeps' => true));
-
-$installer->doDownload(array('depunstable'));
-$pkgs = $installer->getDownloadedPackages();
-var_dump(get_class($a), $installer->getErrorMsgs());
-
-chdir($curdir);
-cleanall($temp_path);
-
-//echo implode("\n", array_values($GLOBALS['totalPHP']));
-
-
-// ------------------------------------------------------------------------- //
-
-function cleanall($dir)
-{
- $dp = opendir($dir);
- while ($ent = readdir($dp)) {
- if ($ent == '.' || $ent == '..') {
- continue;
- }
- if (is_dir($dir . DIRECTORY_SEPARATOR . $ent)) {
- cleanall($dir . DIRECTORY_SEPARATOR . $ent);
- } else {
- unlink($dir . DIRECTORY_SEPARATOR . $ent);
- }
- }
- closedir($dp);
- rmdir($dir);
-}
-?>
---EXPECT--
--=-=-=-=-=-=-=-=- Failure Tests -=-=-=-=-=-=-=-=-=-=-
-Test invalid package name:
-Caught error: Package name '/invalid+packagename' not valid for channel 'pear'
-string(10) "pear_error"
-array(0) {
-}
-array(0) {
-}
-Test download of a package with no releases:
-Caught error: No releases found for package 'pear::noreleases'
-string(10) "pear_error"
-array(0) {
-}
-array(0) {
-}
-Test download of a non-existing package version:
-Caught error: No release of 'pear::pkg1' with version '1976.9.2' found, latest release is version '2.0b1', stability 'beta', use --force to install
-string(10) "pear_error"
-array(0) {
-}
-array(0) {
-}
-Test download of a non-existing package release state:
-Caught error: No release of 'pear::pkg1' with state 'snapshot' found, latest release is version '2.0b1', stability 'beta', use --force to install
-string(10) "pear_error"
-array(0) {
-}
-array(0) {
-}
-Test download of invalid release state:
-Caught error: Invalid suffix '-burgerking', be sure to pass a valid PEAR version number or release state
-string(10) "pear_error"
-array(0) {
-}
-array(0) {
-}
-Test automatic version resolution (stable):
-Caught error: No release of 'pear::stabilitytoolow' within preferred_state of 'stable' found, latest release is version '3.0dev', stability 'devel', use --force to install
-string(10) "pear_error"
-array(0) {
-}
-array(0) {
-}
-Test automatic version resolution (stable) with --force:
-Warning: No release of 'pear::stabilitytoolow' within preferred_state of 'stable' found, latest release, version '3.0dev', stability 'devel' will be downloaded
-bool(false)
-array(0) {
-}
-string(6) "3.0dev"
-Test automatic version resolution (beta):
-bool(false)
-array(0) {
-}
-string(5) "1.0b1"
-Test automatic version resolution (alpha):
-bool(false)
-array(0) {
-}
-string(5) "2.0a1"
-Test automatic version resolution (devel):
-bool(false)
-array(0) {
-}
-string(6) "3.0dev"
-Test download attempt if a version is already installed:
-Package 'pear::pkg6' already installed, skipping
-bool(false)
-array(0) {
-}
-Test download attempt if a version is already installed with --force:
-bool(false)
-array(0) {
-}
-string(5) "2.0b1"
-Test download attempt if a version is already installed with upgrade, same version:
-Package 'pear::pkg6', version '2.0b1' already installed, skipping
-bool(false)
-array(0) {
-}
-Test download attempt if a version is already installed with upgrade, lesser version:
-Package 'pear::pkg6' version '2.0b1' is installed and 2.0b1 is > requested '1.1', skipping
-bool(false)
-array(0) {
-}
-Test download attempt with --alldeps, but dependency has no releases:
-bool(false)
-array(1) {
- [0]=>
- string(75) "Package 'pear::depnoreleases' dependency 'pear::noreleases' has no releases"
-}
-Test download attempt with --onlyreqdeps, but dependency has no releases:
-bool(false)
-array(1) {
- [0]=>
- string(75) "Package 'pear::depnoreleases' dependency 'pear::noreleases' has no releases"
-}
-Test download attempt with --alldeps, but dependency is too unstable:
-bool(false)
-array(1) {
- [0]=>
- string(103) "Release for 'pear::depunstable' dependency 'pear::stabilitytoolow' has state 'devel', requires 'stable'"
-}
-Test download attempt with --onlyreqdeps, but dependency is too unstable:
-bool(false)
-array(1) {
- [0]=>
- string(103) "Release for 'pear::depunstable' dependency 'pear::stabilitytoolow' has state 'devel', requires 'stable'"
-} \ No newline at end of file
diff --git a/pear/tests/pear_downloader_new.phpt b/pear/tests/pear_downloader_new.phpt
deleted file mode 100644
index bcbbf026a5..0000000000
--- a/pear/tests/pear_downloader_new.phpt
+++ /dev/null
@@ -1,578 +0,0 @@
---TEST--
-PEAR_Downloader::download() test
---SKIPIF--
-<?php
-if (!getenv('PHP_PEAR_RUNTESTS')) {
- echo 'skip';
-}
-?>
---FILE--
-<?php
-
-$server = 'pear.Chiara';
-//$server = 'test.pear.php.net';
-$temp_path = dirname(__FILE__) . DIRECTORY_SEPARATOR . 'testinstallertemp';
-if (!is_dir($temp_path)) {
- mkdir($temp_path);
-}
-if (!is_dir($temp_path . DIRECTORY_SEPARATOR . 'php')) {
- mkdir($temp_path . DIRECTORY_SEPARATOR . 'php');
-}
-if (!is_dir($temp_path . DIRECTORY_SEPARATOR . 'data')) {
- mkdir($temp_path . DIRECTORY_SEPARATOR . 'data');
-}
-if (!is_dir($temp_path . DIRECTORY_SEPARATOR . 'doc')) {
- mkdir($temp_path . DIRECTORY_SEPARATOR . 'doc');
-}
-if (!is_dir($temp_path . DIRECTORY_SEPARATOR . 'test')) {
- mkdir($temp_path . DIRECTORY_SEPARATOR . 'test');
-}
-if (!is_dir($temp_path . DIRECTORY_SEPARATOR . 'ext')) {
- mkdir($temp_path . DIRECTORY_SEPARATOR . 'ext');
-}
-if (!is_dir($temp_path . DIRECTORY_SEPARATOR . 'script')) {
- mkdir($temp_path . DIRECTORY_SEPARATOR . 'script');
-}
-if (!is_dir($temp_path . DIRECTORY_SEPARATOR . 'tmp')) {
- mkdir($temp_path . DIRECTORY_SEPARATOR . 'tmp');
-}
-if (!is_dir($temp_path . DIRECTORY_SEPARATOR . 'bin')) {
- mkdir($temp_path . DIRECTORY_SEPARATOR . 'bin');
-}
-if (!is_dir($temp_path . DIRECTORY_SEPARATOR . 'cache')) {
- mkdir($temp_path . DIRECTORY_SEPARATOR . 'cache');
-}
-// make the fake configuration - we'll use one of these and it should work
-$config = serialize(array('master_server' => $server,
- 'preferred_state' => 'stable',
- 'cache_dir' => $temp_path . DIRECTORY_SEPARATOR . 'cache',
- 'php_dir' => $temp_path . DIRECTORY_SEPARATOR . 'php',
- 'ext_dir' => $temp_path . DIRECTORY_SEPARATOR . 'ext',
- 'data_dir' => $temp_path . DIRECTORY_SEPARATOR . 'data',
- 'doc_dir' => $temp_path . DIRECTORY_SEPARATOR . 'doc',
- 'test_dir' => $temp_path . DIRECTORY_SEPARATOR . 'test',
- 'bin_dir' => $temp_path . DIRECTORY_SEPARATOR . 'bin',));
-touch($temp_path . DIRECTORY_SEPARATOR . 'pear.conf');
-$fp = fopen($temp_path . DIRECTORY_SEPARATOR . 'pear.conf', 'w');
-fwrite($fp, $config);
-fclose($fp);
-touch($temp_path . DIRECTORY_SEPARATOR . 'pear.ini');
-$fp = fopen($temp_path . DIRECTORY_SEPARATOR . 'pear.ini', 'w');
-fwrite($fp, $config);
-fclose($fp);
-
-putenv('PHP_PEAR_SYSCONF_DIR='.$temp_path);
-$home = getenv('HOME');
-if (!empty($home)) {
- // for PEAR_Config initialization
- putenv('HOME="'.$temp_path);
-}
-require_once "PEAR/Downloader.php";
-require_once dirname(__FILE__) . DIRECTORY_SEPARATOR . 'download_test_classes.php.inc';
-
-// no UI is needed for these tests
-$ui = false;
-$curdir = getcwd();
-chdir(dirname(__FILE__));
-
-PEAR::setErrorHandling(PEAR_ERROR_CALLBACK, 'catchit');
-$error_to_catch = false;
-function catchit($err)
-{
- global $error_to_catch;
- if ($error_to_catch) {
- if ($err->getMessage() == $error_to_catch) {
- $error_to_catch = false;
- echo "Caught expected error\n";
- return;
- }
- }
- echo "Caught error: " . $err->getMessage() . "\n";
-}
-
-echo "Test simple direct url download:\n";
-
-$config = &PEAR_Config::singleton();
-// initialize fake pear channel
-require_once 'PEAR/ChannelFile.php';
-$chan = new PEAR_ChannelFile;
-$chan->setName('pear');
-$chan->setSummary('PEAR');
-$chan->setServer($server);
-$chan->setDefaultPEARProtocols();
-
-$reg = new PEAR_Registry($config->get('php_dir'), $chan);
-$packages = array("http://$server/get/pkg6-1.1.tgz");
-$options = array();
-$installer = &new test_PEAR_Downloader($ui, $options, $config);
-$a = $installer->download($packages);
-$installpackages = $installer->getDownloadedPackages();
-var_dump($a, $installer->getErrorMsgs());
-
-echo "File exists? ";
-echo (is_file($installpackages[0]['file'])) ? "yes\n" : "no\n";
-echo "File is the same? ";
-$good = implode('', file(dirname(__FILE__) . DIRECTORY_SEPARATOR . 'test-pkg6' . DIRECTORY_SEPARATOR . 'pkg6-1.1.tgz'));
-$dled = implode('', file($installpackages[0]['file']));
-echo ($good == $dled) ? "yes\n" : "no\n";
-unlink($installpackages[0]['file']);
-unset($installpackages[0]['file']);
-var_dump($installpackages);
-
-echo "Test simple package name download:\n";
-$installpackages = $errors = array();
-$packages = array('pkg6');
-$a = $installer->download($packages);
-$installpackages = $installer->getDownloadedPackages();
-var_dump($a, $installer->getErrorMsgs());
-
-echo "File exists? ";
-echo (is_file($installpackages[0]['file'])) ? "yes\n" : "no\n";
-echo "File is the same? ";
-$good = implode('', file(dirname(__FILE__) . DIRECTORY_SEPARATOR . 'test-pkg6' . DIRECTORY_SEPARATOR . 'pkg6-1.1.tgz'));
-$dled = implode('', file($installpackages[0]['file']));
-echo ($good == $dled) ? "yes\n" : "no\n";
-unlink($installpackages[0]['file']);
-unset($installpackages[0]['file']);
-var_dump($installpackages);
-
-echo "Test package name with version download:\n";
-$installpackages = $errors = array();
-$packages = array('pkg6-1.1');
-$a = $installer->download($packages);
-$installpackages = $installer->getDownloadedPackages();
-var_dump($a, $installer->getErrorMsgs());
-
-echo "File exists? ";
-echo (is_file($installpackages[0]['file'])) ? "yes\n" : "no\n";
-echo "File is the same? ";
-$good = implode('', file(dirname(__FILE__) . DIRECTORY_SEPARATOR . 'test-pkg6' . DIRECTORY_SEPARATOR . 'pkg6-1.1.tgz'));
-$dled = implode('', file($installpackages[0]['file']));
-echo ($good == $dled) ? "yes\n" : "no\n";
-unlink($installpackages[0]['file']);
-
-echo "Test package name with state stable download:\n";
-$installpackages = $errors = array();
-$packages = array('pkg6-stable');
-$a = $installer->download($packages);
-$installpackages = $installer->getDownloadedPackages();
-var_dump($a, $installer->getErrorMsgs());
-
-echo "File exists? ";
-echo (is_file($installpackages[0]['file'])) ? "yes\n" : "no\n";
-echo "File is the same? ";
-$good = implode('', file(dirname(__FILE__) . DIRECTORY_SEPARATOR . 'test-pkg6' . DIRECTORY_SEPARATOR . 'pkg6-1.1.tgz'));
-$dled = implode('', file($installpackages[0]['file']));
-echo ($good == $dled) ? "yes\n" : "no\n";
-unlink($installpackages[0]['file']);
-
-echo "Test package name with state beta download:\n";
-$installpackages = $errors = array();
-$packages = array('pkg6-beta');
-$a = $installer->download($packages);
-$installpackages = $installer->getDownloadedPackages();
-var_dump($a, $installer->getErrorMsgs());
-
-echo "File exists? ";
-echo (is_file($installpackages[0]['file'])) ? "yes\n" : "no\n";
-echo "File is the same? ";
-$good = implode('', file(dirname(__FILE__) . DIRECTORY_SEPARATOR . 'test-pkg6' . DIRECTORY_SEPARATOR . 'pkg6-2.0b1.tgz'));
-$dled = implode('', file($installpackages[0]['file']));
-echo ($good == $dled) ? "yes\n" : "no\n";
-unlink($installpackages[0]['file']);
-
-echo "================\nTest preferred_state = beta\n";
-$installer->configSet('preferred_state', 'beta');
-
-echo "Test simple package name download:\n";
-$installpackages = $errors = array();
-$packages = array('pkg6');
-$a = $installer->download($packages);
-$installpackages = $installer->getDownloadedPackages();
-var_dump($a, $installer->getErrorMsgs());
-
-echo "File exists? ";
-echo (is_file($installpackages[0]['file'])) ? "yes\n" : "no\n";
-echo "File is the same? ";
-$good = implode('', file(dirname(__FILE__) . DIRECTORY_SEPARATOR . 'test-pkg6' . DIRECTORY_SEPARATOR . 'pkg6-2.0b1.tgz'));
-$dled = implode('', file($installpackages[0]['file']));
-echo ($good == $dled) ? "yes\n" : "no\n";
-unlink($installpackages[0]['file']);
-unset($installpackages[0]['file']);
-
-echo "\n================Test --alldeps\nTest preferred_state = stable\n";
-$installer->configSet('preferred_state', 'stable');
-
-$installer = &new test_PEAR_Downloader($ui, array('alldeps' => true), $config);
-$packages = array("http://$server/get/pkg1-1.1.tgz");
-$a = $installer->download($packages);
-$installpackages = $installer->getDownloadedPackages();
-var_dump($a, $installer->getErrorMsgs());
-echo "Packages downloaded and version:\n";
-foreach ($installpackages as $package) {
- echo $package['pkg'] . '-' . $package['info']['version'] . "\n";
-}
-$packages = array("pkg1");
-$a = $installer->download($packages);
-$installpackages = $installer->getDownloadedPackages();
-var_dump($a, $installer->getErrorMsgs());
-echo "Packages downloaded and version:\n";
-foreach ($installpackages as $package) {
- echo $package['pkg'] . '-' . $package['info']['version'] . "\n";
-}
-
-echo "Test preferred_state = beta:\n";
-$installer->configSet('preferred_state', 'beta');
-
-$packages = array("pkg1");
-$a = $installer->download($packages);
-$installpackages = $installer->getDownloadedPackages();
-var_dump($a, $installer->getErrorMsgs());
-echo "Packages downloaded and version:\n";
-foreach ($installpackages as $package) {
- echo $package['pkg'] . '-' . $package['info']['version'] . "\n";
-}
-
-echo "Test preferred_state = alpha:\n";
-$installer->configSet('preferred_state', 'alpha');
-
-$packages = array("pkg1");
-$a = $installer->download($packages);
-$installpackages = $installer->getDownloadedPackages();
-var_dump($a, $installer->getErrorMsgs());
-echo "Packages downloaded and version:\n";
-foreach ($installpackages as $package) {
- echo $package['pkg'] . '-' . $package['info']['version'] . "\n";
-}
-echo "\n================Test --onlyreqdeps\nTest preferred_state = stable\n";
-$config->set('preferred_state', 'stable');
-
-$installer = &new test_PEAR_Downloader($ui, array('onlyreqdeps' => true), $config);
-$packages = array("http://$server/get/pkg1-1.1.tgz");
-$a = $installer->download($packages);
-$installpackages = $installer->getDownloadedPackages();
-var_dump($a, $installer->getErrorMsgs());
-echo "Packages downloaded and version:\n";
-foreach ($installpackages as $package) {
- echo $package['pkg'] . '-' . $package['info']['version'] . "\n";
-}
-$packages = array("pkg1");
-$a = $installer->download($packages);
-$installpackages = $installer->getDownloadedPackages();
-var_dump($a, $installer->getErrorMsgs());
-echo "Packages downloaded and version:\n";
-foreach ($installpackages as $package) {
- echo $package['pkg'] . '-' . $package['info']['version'] . "\n";
-}
-
-echo "Test preferred_state = beta:\n";
-$installer->configSet('preferred_state', 'beta');
-
-$packages = array("pkg1");
-$a = $installer->download($packages);
-$installpackages = $installer->getDownloadedPackages();
-var_dump($a, $installer->getErrorMsgs());
-echo "Packages downloaded and version:\n";
-foreach ($installpackages as $package) {
- echo $package['pkg'] . '-' . $package['info']['version'] . "\n";
-}
-
-echo "Test preferred_state = alpha:\n";
-$installer->configSet('preferred_state', 'alpha');
-
-$packages = array("pkg1");
-$a = $installer->download($packages);
-$installpackages = $installer->getDownloadedPackages();
-var_dump($a, $installer->getErrorMsgs());
-echo "Packages downloaded and version:\n";
-foreach ($installpackages as $package) {
- echo $package['pkg'] . '-' . $package['info']['version'] . "\n";
-}
-
-
-chdir($curdir);
-cleanall($temp_path);
-// ------------------------------------------------------------------------- //
-
-function cleanall($dir)
-{
- $dp = opendir($dir);
- while ($ent = readdir($dp)) {
- if ($ent == '.' || $ent == '..') {
- continue;
- }
- if (is_dir($dir . DIRECTORY_SEPARATOR . $ent)) {
- cleanall($dir . DIRECTORY_SEPARATOR . $ent);
- } else {
- unlink($dir . DIRECTORY_SEPARATOR . $ent);
- }
- }
- closedir($dp);
- rmdir($dir);
-}
-?>
---EXPECT--
-Test simple direct url download:
-NULL
-array(0) {
-}
-File exists? yes
-File is the same? yes
-array(1) {
- [0]=>
- array(2) {
- ["pkg"]=>
- string(4) "pkg6"
- ["info"]=>
- array(11) {
- ["provides"]=>
- array(0) {
- }
- ["filelist"]=>
- array(3) {
- ["zoorb.php"]=>
- array(2) {
- ["role"]=>
- string(3) "php"
- ["baseinstalldir"]=>
- string(5) "groob"
- }
- ["goompness\oggbrzitzkee.php"]=>
- array(2) {
- ["role"]=>
- string(3) "php"
- ["baseinstalldir"]=>
- string(5) "groob"
- }
- ["goompness\Mopreeb.php"]=>
- array(2) {
- ["role"]=>
- string(3) "php"
- ["baseinstalldir"]=>
- string(5) "groob"
- }
- }
- ["package"]=>
- string(4) "pkg6"
- ["summary"]=>
- string(32) "required test for PEAR_Installer"
- ["description"]=>
- string(12) "fake package"
- ["maintainers"]=>
- array(1) {
- [0]=>
- array(4) {
- ["handle"]=>
- string(8) "fakeuser"
- ["name"]=>
- string(9) "Joe Shmoe"
- ["email"]=>
- string(18) "nobody@example.com"
- ["role"]=>
- string(4) "lead"
- }
- }
- ["version"]=>
- string(3) "1.1"
- ["release_date"]=>
- string(10) "2003-09-09"
- ["release_license"]=>
- string(11) "PHP License"
- ["release_state"]=>
- string(6) "stable"
- ["release_notes"]=>
- string(24) "required dependency test"
- }
- }
-}
-Test simple package name download:
-NULL
-array(0) {
-}
-File exists? yes
-File is the same? yes
-array(1) {
- [0]=>
- array(2) {
- ["pkg"]=>
- string(4) "pkg6"
- ["info"]=>
- array(11) {
- ["provides"]=>
- array(0) {
- }
- ["filelist"]=>
- array(3) {
- ["zoorb.php"]=>
- array(2) {
- ["role"]=>
- string(3) "php"
- ["baseinstalldir"]=>
- string(5) "groob"
- }
- ["goompness\oggbrzitzkee.php"]=>
- array(2) {
- ["role"]=>
- string(3) "php"
- ["baseinstalldir"]=>
- string(5) "groob"
- }
- ["goompness\Mopreeb.php"]=>
- array(2) {
- ["role"]=>
- string(3) "php"
- ["baseinstalldir"]=>
- string(5) "groob"
- }
- }
- ["package"]=>
- string(4) "pkg6"
- ["summary"]=>
- string(32) "required test for PEAR_Installer"
- ["description"]=>
- string(12) "fake package"
- ["maintainers"]=>
- array(1) {
- [0]=>
- array(4) {
- ["handle"]=>
- string(8) "fakeuser"
- ["name"]=>
- string(9) "Joe Shmoe"
- ["email"]=>
- string(18) "nobody@example.com"
- ["role"]=>
- string(4) "lead"
- }
- }
- ["version"]=>
- string(3) "1.1"
- ["release_date"]=>
- string(10) "2003-09-09"
- ["release_license"]=>
- string(11) "PHP License"
- ["release_state"]=>
- string(6) "stable"
- ["release_notes"]=>
- string(24) "required dependency test"
- }
- }
-}
-Test package name with version download:
-NULL
-array(0) {
-}
-File exists? yes
-File is the same? yes
-Test package name with state stable download:
-NULL
-array(0) {
-}
-File exists? yes
-File is the same? yes
-Test package name with state beta download:
-NULL
-array(0) {
-}
-File exists? yes
-File is the same? yes
-================
-Test preferred_state = beta
-Test simple package name download:
-NULL
-array(0) {
-}
-File exists? yes
-File is the same? yes
-
-================Test --alldeps
-Test preferred_state = stable
-NULL
-array(0) {
-}
-Packages downloaded and version:
-pkg1-1.1
-pkg2-1.1
-pkg3-1.1
-pkg4-1.1
-pkg5-1.1
-pkg6-1.1
-NULL
-array(0) {
-}
-Packages downloaded and version:
-pkg1-1.1
-pkg2-1.1
-pkg3-1.1
-pkg4-1.1
-pkg5-1.1
-pkg6-1.1
-Test preferred_state = beta:
-NULL
-array(0) {
-}
-Packages downloaded and version:
-pkg1-2.0b1
-pkg2-1.1
-pkg3-1.1
-pkg4-1.1
-pkg5-1.1
-pkg6-2.0b1
-Test preferred_state = alpha:
-NULL
-array(0) {
-}
-Packages downloaded and version:
-pkg1-2.0b1
-pkg2-1.1
-pkg3-1.4
-pkg4AndAHalf-1.3
-pkg4-1.1
-pkg5-1.1
-pkg6-2.0b1
-
-================Test --onlyreqdeps
-Test preferred_state = stable
-NULL
-array(0) {
-}
-Packages downloaded and version:
-pkg1-1.1
-pkg2-1.1
-pkg3-1.1
-pkg4-1.1
-pkg5-1.1
-pkg6-1.1
-NULL
-array(0) {
-}
-Packages downloaded and version:
-pkg1-1.1
-pkg2-1.1
-pkg3-1.1
-pkg4-1.1
-pkg5-1.1
-pkg6-1.1
-Test preferred_state = beta:
-NULL
-array(0) {
-}
-Packages downloaded and version:
-pkg1-2.0b1
-pkg2-1.1
-pkg3-1.1
-pkg4-1.1
-pkg5-1.1
-pkg6-2.0b1
-Test preferred_state = alpha:
-skipping Package 'pear::pkg3' optional dependency 'pear::pkg4AndAHalf'
-NULL
-array(0) {
-}
-Packages downloaded and version:
-pkg1-2.0b1
-pkg2-1.1
-pkg3-1.4
-pkg4-1.1
-pkg5-1.1
-pkg6-2.0b1 \ No newline at end of file
diff --git a/pear/tests/pear_downloader_old.phpt b/pear/tests/pear_downloader_old.phpt
deleted file mode 100644
index 6e7225f44b..0000000000
--- a/pear/tests/pear_downloader_old.phpt
+++ /dev/null
@@ -1,609 +0,0 @@
---TEST--
-PEAR_Installer test: PEAR_Installer::download() (deprecated)
---SKIPIF--
-<?php
-if (!getenv('PHP_PEAR_RUNTESTS')) {
- echo 'skip';
-}
-?>
---FILE--
-<?php
-if (!defined('PATH_SEPARATOR')) {
- define('PATH_SEPARATOR', (DIRECTORY_SEPARATOR == '/') ? ':' : ';');
-}
-ini_set('include_path', dirname(__FILE__) . PATH_SEPARATOR . ini_get('include_path'));
-$server = 'pear.Chiara';
-//$server = 'test.pear.php.net';
-$temp_path = dirname(__FILE__) . DIRECTORY_SEPARATOR . 'testinstallertemp';
-if (!is_dir($temp_path)) {
- mkdir($temp_path);
-}
-if (!is_dir($temp_path . DIRECTORY_SEPARATOR . 'php')) {
- mkdir($temp_path . DIRECTORY_SEPARATOR . 'php');
-}
-if (!is_dir($temp_path . DIRECTORY_SEPARATOR . 'data')) {
- mkdir($temp_path . DIRECTORY_SEPARATOR . 'data');
-}
-if (!is_dir($temp_path . DIRECTORY_SEPARATOR . 'doc')) {
- mkdir($temp_path . DIRECTORY_SEPARATOR . 'doc');
-}
-if (!is_dir($temp_path . DIRECTORY_SEPARATOR . 'test')) {
- mkdir($temp_path . DIRECTORY_SEPARATOR . 'test');
-}
-if (!is_dir($temp_path . DIRECTORY_SEPARATOR . 'ext')) {
- mkdir($temp_path . DIRECTORY_SEPARATOR . 'ext');
-}
-if (!is_dir($temp_path . DIRECTORY_SEPARATOR . 'script')) {
- mkdir($temp_path . DIRECTORY_SEPARATOR . 'script');
-}
-if (!is_dir($temp_path . DIRECTORY_SEPARATOR . 'tmp')) {
- mkdir($temp_path . DIRECTORY_SEPARATOR . 'tmp');
-}
-if (!is_dir($temp_path . DIRECTORY_SEPARATOR . 'bin')) {
- mkdir($temp_path . DIRECTORY_SEPARATOR . 'bin');
-}
-if (!is_dir($temp_path . DIRECTORY_SEPARATOR . 'cache')) {
- mkdir($temp_path . DIRECTORY_SEPARATOR . 'cache');
-}
-// make the fake configuration - we'll use one of these and it should work
-$config = serialize(array('master_server' => $server,
- 'preferred_state' => 'stable',
- 'cache_dir' => $temp_path . DIRECTORY_SEPARATOR . 'cache',
- 'php_dir' => $temp_path . DIRECTORY_SEPARATOR . 'php',
- 'ext_dir' => $temp_path . DIRECTORY_SEPARATOR . 'ext',
- 'data_dir' => $temp_path . DIRECTORY_SEPARATOR . 'data',
- 'doc_dir' => $temp_path . DIRECTORY_SEPARATOR . 'doc',
- 'test_dir' => $temp_path . DIRECTORY_SEPARATOR . 'test',
- 'bin_dir' => $temp_path . DIRECTORY_SEPARATOR . 'bin',));
-touch($temp_path . DIRECTORY_SEPARATOR . 'pear.conf');
-$fp = fopen($temp_path . DIRECTORY_SEPARATOR . 'pear.conf', 'w');
-fwrite($fp, $config);
-fclose($fp);
-touch($temp_path . DIRECTORY_SEPARATOR . 'pear.ini');
-$fp = fopen($temp_path . DIRECTORY_SEPARATOR . 'pear.ini', 'w');
-fwrite($fp, $config);
-fclose($fp);
-
-putenv('PHP_PEAR_SYSCONF_DIR='.$temp_path);
-$home = getenv('HOME');
-if (!empty($home)) {
- // for PEAR_Config initialization
- putenv('HOME="'.$temp_path);
-}
-require_once "PEAR/Installer.php";
-require_once dirname(__FILE__) . DIRECTORY_SEPARATOR . 'download_test_classes.php.inc';
-//echo 1;
-// no UI is needed for these tests
-$ui = false;
-$installer = new test_PEAR_Installer($ui);
-$curdir = getcwd();
-chdir(dirname(__FILE__));
-
-PEAR::setErrorHandling(PEAR_ERROR_CALLBACK, 'catchit');
-set_error_handler('catchphp');
-
-function catchphp($errno, $errmsg)
-{
- if (error_reporting() == 0) {
- return;
- }
- $errlevel = array(
- E_USER_NOTICE => 'Notice',
- E_USER_WARNING => 'Warning',
- E_USER_ERROR => 'Error',
- E_WARNING => 'Warning',
- E_NOTICE => 'Notice'
- );
- echo $errlevel[$errno] . ': ' . $errmsg . "\n";
-}
-$error_to_catch = false;
-function catchit($err)
-{
- global $error_to_catch;
- if ($error_to_catch) {
- if ($err->getMessage() == $error_to_catch) {
- $error_to_catch = false;
- echo "Caught expected error\n";
- return;
- }
- }
- echo "Caught error: " . $err->getMessage() . "\n";
-}
-
-echo "Test simple direct url download:\n";
-
-$config = &PEAR_Config::singleton();
-// initialize fake pear channel
-require_once 'PEAR/ChannelFile.php';
-$chan = new PEAR_ChannelFile;
-$chan->setName('pear');
-$chan->setSummary('PEAR');
-$chan->setServer($server);
-$chan->setDefaultPEARProtocols();
-$reg = new PEAR_Registry($config->get('php_dir'), $chan);
-$packages = array("http://$server/get/pkg6-1.1.tgz");
-$a = $installer->download($packages, array(), &$config, &$installpackages, &$errors);
-var_dump($a, $errors);
-
-echo "File exists? ";
-echo (is_file($installpackages[0]['file'])) ? "yes\n" : "no\n";
-echo "File is the same? ";
-$good = implode('', file(dirname(__FILE__) . DIRECTORY_SEPARATOR . 'test-pkg6' . DIRECTORY_SEPARATOR . 'pkg6-1.1.tgz'));
-$dled = implode('', file($installpackages[0]['file']));
-echo ($good == $dled) ? "yes\n" : "no\n";
-unlink($installpackages[0]['file']);
-unset($installpackages[0]['file']);
-var_dump($installpackages);
-
-echo "Test simple package name download:\n";
-$installpackages = $errors = array();
-$packages = array('pkg6');
-$a = $installer->download($packages, array(), &$config, &$installpackages, &$errors);
-var_dump($a, $errors);
-
-echo "File exists? ";
-echo (is_file($installpackages[0]['file'])) ? "yes\n" : "no\n";
-echo "File is the same? ";
-$good = implode('', file(dirname(__FILE__) . DIRECTORY_SEPARATOR . 'test-pkg6' . DIRECTORY_SEPARATOR . 'pkg6-1.1.tgz'));
-$dled = implode('', file($installpackages[0]['file']));
-echo ($good == $dled) ? "yes\n" : "no\n";
-unlink($installpackages[0]['file']);
-unset($installpackages[0]['file']);
-var_dump($installpackages);
-
-echo "Test package name with version download:\n";
-$installpackages = $errors = array();
-$packages = array('pkg6-1.1');
-$a = $installer->download($packages, array(), &$config, &$installpackages, &$errors);
-var_dump($a, $errors);
-
-echo "File exists? ";
-echo (is_file($installpackages[0]['file'])) ? "yes\n" : "no\n";
-echo "File is the same? ";
-$good = implode('', file(dirname(__FILE__) . DIRECTORY_SEPARATOR . 'test-pkg6' . DIRECTORY_SEPARATOR . 'pkg6-1.1.tgz'));
-$dled = implode('', file($installpackages[0]['file']));
-echo ($good == $dled) ? "yes\n" : "no\n";
-unlink($installpackages[0]['file']);
-
-echo "Test package name with state stable download:\n";
-$installpackages = $errors = array();
-$packages = array('pkg6-stable');
-$a = $installer->download($packages, array(), &$config, &$installpackages, &$errors);
-var_dump($a, $errors);
-
-echo "File exists? ";
-echo (is_file($installpackages[0]['file'])) ? "yes\n" : "no\n";
-echo "File is the same? ";
-$good = implode('', file(dirname(__FILE__) . DIRECTORY_SEPARATOR . 'test-pkg6' . DIRECTORY_SEPARATOR . 'pkg6-1.1.tgz'));
-$dled = implode('', file($installpackages[0]['file']));
-echo ($good == $dled) ? "yes\n" : "no\n";
-unlink($installpackages[0]['file']);
-
-echo "Test package name with state beta download:\n";
-$installpackages = $errors = array();
-$packages = array('pkg6-beta');
-$a = $installer->download($packages, array(), &$config, &$installpackages, &$errors);
-var_dump($a, $errors);
-
-echo "File exists? ";
-echo (is_file($installpackages[0]['file'])) ? "yes\n" : "no\n";
-echo "File is the same? ";
-$good = implode('', file(dirname(__FILE__) . DIRECTORY_SEPARATOR . 'test-pkg6' . DIRECTORY_SEPARATOR . 'pkg6-2.0b1.tgz'));
-$dled = implode('', file($installpackages[0]['file']));
-echo ($good == $dled) ? "yes\n" : "no\n";
-unlink($installpackages[0]['file']);
-
-echo "================\nTest preferred_state = beta\n";
-$config->set('preferred_state', 'beta');
-
-echo "Test simple package name download:\n";
-$installpackages = $errors = array();
-$packages = array('pkg6');
-$a = $installer->download($packages, array(), &$config, &$installpackages, &$errors);
-var_dump($a, $errors);
-
-echo "File exists? ";
-echo (is_file($installpackages[0]['file'])) ? "yes\n" : "no\n";
-echo "File is the same? ";
-$good = implode('', file(dirname(__FILE__) . DIRECTORY_SEPARATOR . 'test-pkg6' . DIRECTORY_SEPARATOR . 'pkg6-2.0b1.tgz'));
-$dled = implode('', file($installpackages[0]['file']));
-echo ($good == $dled) ? "yes\n" : "no\n";
-unlink($installpackages[0]['file']);
-unset($installpackages[0]['file']);
-
-echo "\n================Test --alldeps\nTest preferred_state = stable\n";
-$config->set('preferred_state', 'stable');
-
-$config = &PEAR_Config::singleton();
-$packages = array("http://$server/get/pkg1-1.1.tgz");
-$a = $installer->download($packages, array('alldeps' => true), &$config, &$installpackages, &$errors);
-var_dump($a, $errors);
-echo "Packages downloaded and version:\n";
-foreach ($installpackages as $package) {
- echo $package['pkg'] . '-' . $package['info']['version'] . "\n";
-}
-$packages = array("pkg1");
-$a = $installer->download($packages, array('alldeps' => true), &$config, &$installpackages, &$errors);
-var_dump($a, $errors);
-echo "Packages downloaded and version:\n";
-foreach ($installpackages as $package) {
- echo $package['pkg'] . '-' . $package['info']['version'] . "\n";
-}
-
-echo "Test preferred_state = beta:\n";
-$config->set('preferred_state', 'beta');
-
-$config = &PEAR_Config::singleton();
-$packages = array("pkg1");
-$a = $installer->download($packages, array('alldeps' => true), &$config, &$installpackages, &$errors);
-var_dump($a, $errors);
-echo "Packages downloaded and version:\n";
-foreach ($installpackages as $package) {
- echo $package['pkg'] . '-' . $package['info']['version'] . "\n";
-}
-
-echo "Test preferred_state = alpha:\n";
-$config->set('preferred_state', 'alpha');
-
-$config = &PEAR_Config::singleton();
-$packages = array("pkg1");
-$a = $installer->download($packages, array('alldeps' => true), &$config, &$installpackages, &$errors);
-var_dump($a, $errors);
-echo "Packages downloaded and version:\n";
-foreach ($installpackages as $package) {
- echo $package['pkg'] . '-' . $package['info']['version'] . "\n";
-}
-echo "\n================Test --onlyreqdeps\nTest preferred_state = stable\n";
-$config->set('preferred_state', 'stable');
-
-$config = &PEAR_Config::singleton();
-$packages = array("http://$server/get/pkg1-1.1.tgz");
-$a = $installer->download($packages, array('onlyreqdeps' => true), &$config, &$installpackages, &$errors);
-var_dump($a, $errors);
-echo "Packages downloaded and version:\n";
-foreach ($installpackages as $package) {
- echo $package['pkg'] . '-' . $package['info']['version'] . "\n";
-}
-$packages = array("pkg1");
-$a = $installer->download($packages, array('onlyreqdeps' => true), &$config, &$installpackages, &$errors);
-var_dump($a, $errors);
-echo "Packages downloaded and version:\n";
-foreach ($installpackages as $package) {
- echo $package['pkg'] . '-' . $package['info']['version'] . "\n";
-}
-
-echo "Test preferred_state = beta:\n";
-$config->set('preferred_state', 'beta');
-
-$config = &PEAR_Config::singleton();
-$packages = array("pkg1");
-$a = $installer->download($packages, array('onlyreqdeps' => true), &$config, &$installpackages, &$errors);
-var_dump($a, $errors);
-echo "Packages downloaded and version:\n";
-foreach ($installpackages as $package) {
- echo $package['pkg'] . '-' . $package['info']['version'] . "\n";
-}
-
-echo "Test preferred_state = alpha:\n";
-$config->set('preferred_state', 'alpha');
-
-$config = &PEAR_Config::singleton();
-$packages = array("pkg1");
-$a = $installer->download($packages, array('onlyreqdeps' => true), &$config, &$installpackages, &$errors);
-var_dump($a, $errors);
-echo "Packages downloaded and version:\n";
-foreach ($installpackages as $package) {
- echo $package['pkg'] . '-' . $package['info']['version'] . "\n";
-}
-
-
-chdir($curdir);
-cleanall($temp_path);
-
-/*
-echo "File exists? ";
-echo (is_file($installpackages[0]['file'])) ? "yes\n" : "no\n";
-echo "File is the same? ";
-$good = implode('', file(dirname(__FILE__) . DIRECTORY_SEPARATOR . 'test-pkg6' . DIRECTORY_SEPARATOR . 'pkg6-1.1.tgz'));
-$dled = implode('', file($installpackages[0]['file']));
-echo ($good == $dled) ? "yes\n" : "no\n";
-unlink($installpackages[0]['file']);
-unset($installpackages[0]['file']);*/
-// ------------------------------------------------------------------------- //
-
-function cleanall($dir)
-{
- $dp = opendir($dir);
- while ($ent = readdir($dp)) {
- if ($ent == '.' || $ent == '..') {
- continue;
- }
- if (is_dir($dir . DIRECTORY_SEPARATOR . $ent)) {
- cleanall($dir . DIRECTORY_SEPARATOR . $ent);
- } else {
- unlink($dir . DIRECTORY_SEPARATOR . $ent);
- }
- }
- closedir($dp);
- rmdir($dir);
-}
-?>
---EXPECT--
-Test simple direct url download:
-Warning: PEAR Warning: PEAR_Installer::download() is deprecated in favor of PEAR_Downloader class
-NULL
-array(0) {
-}
-File exists? yes
-File is the same? yes
-array(1) {
- [0]=>
- array(2) {
- ["pkg"]=>
- string(4) "pkg6"
- ["info"]=>
- array(11) {
- ["provides"]=>
- array(0) {
- }
- ["filelist"]=>
- array(3) {
- ["zoorb.php"]=>
- array(2) {
- ["role"]=>
- string(3) "php"
- ["baseinstalldir"]=>
- string(5) "groob"
- }
- ["goompness\oggbrzitzkee.php"]=>
- array(2) {
- ["role"]=>
- string(3) "php"
- ["baseinstalldir"]=>
- string(5) "groob"
- }
- ["goompness\Mopreeb.php"]=>
- array(2) {
- ["role"]=>
- string(3) "php"
- ["baseinstalldir"]=>
- string(5) "groob"
- }
- }
- ["package"]=>
- string(4) "pkg6"
- ["summary"]=>
- string(32) "required test for PEAR_Installer"
- ["description"]=>
- string(12) "fake package"
- ["maintainers"]=>
- array(1) {
- [0]=>
- array(4) {
- ["handle"]=>
- string(8) "fakeuser"
- ["name"]=>
- string(9) "Joe Shmoe"
- ["email"]=>
- string(18) "nobody@example.com"
- ["role"]=>
- string(4) "lead"
- }
- }
- ["version"]=>
- string(3) "1.1"
- ["release_date"]=>
- string(10) "2003-09-09"
- ["release_license"]=>
- string(11) "PHP License"
- ["release_state"]=>
- string(6) "stable"
- ["release_notes"]=>
- string(24) "required dependency test"
- }
- }
-}
-Test simple package name download:
-Warning: PEAR Warning: PEAR_Installer::download() is deprecated in favor of PEAR_Downloader class
-NULL
-array(0) {
-}
-File exists? yes
-File is the same? yes
-array(1) {
- [0]=>
- array(2) {
- ["pkg"]=>
- string(4) "pkg6"
- ["info"]=>
- array(11) {
- ["provides"]=>
- array(0) {
- }
- ["filelist"]=>
- array(3) {
- ["zoorb.php"]=>
- array(2) {
- ["role"]=>
- string(3) "php"
- ["baseinstalldir"]=>
- string(5) "groob"
- }
- ["goompness\oggbrzitzkee.php"]=>
- array(2) {
- ["role"]=>
- string(3) "php"
- ["baseinstalldir"]=>
- string(5) "groob"
- }
- ["goompness\Mopreeb.php"]=>
- array(2) {
- ["role"]=>
- string(3) "php"
- ["baseinstalldir"]=>
- string(5) "groob"
- }
- }
- ["package"]=>
- string(4) "pkg6"
- ["summary"]=>
- string(32) "required test for PEAR_Installer"
- ["description"]=>
- string(12) "fake package"
- ["maintainers"]=>
- array(1) {
- [0]=>
- array(4) {
- ["handle"]=>
- string(8) "fakeuser"
- ["name"]=>
- string(9) "Joe Shmoe"
- ["email"]=>
- string(18) "nobody@example.com"
- ["role"]=>
- string(4) "lead"
- }
- }
- ["version"]=>
- string(3) "1.1"
- ["release_date"]=>
- string(10) "2003-09-09"
- ["release_license"]=>
- string(11) "PHP License"
- ["release_state"]=>
- string(6) "stable"
- ["release_notes"]=>
- string(24) "required dependency test"
- }
- }
-}
-Test package name with version download:
-Warning: PEAR Warning: PEAR_Installer::download() is deprecated in favor of PEAR_Downloader class
-NULL
-array(0) {
-}
-File exists? yes
-File is the same? yes
-Test package name with state stable download:
-Warning: PEAR Warning: PEAR_Installer::download() is deprecated in favor of PEAR_Downloader class
-NULL
-array(0) {
-}
-File exists? yes
-File is the same? yes
-Test package name with state beta download:
-Warning: PEAR Warning: PEAR_Installer::download() is deprecated in favor of PEAR_Downloader class
-NULL
-array(0) {
-}
-File exists? yes
-File is the same? yes
-================
-Test preferred_state = beta
-Test simple package name download:
-Warning: PEAR Warning: PEAR_Installer::download() is deprecated in favor of PEAR_Downloader class
-NULL
-array(0) {
-}
-File exists? yes
-File is the same? yes
-
-================Test --alldeps
-Test preferred_state = stable
-Warning: PEAR Warning: PEAR_Installer::download() is deprecated in favor of PEAR_Downloader class
-NULL
-array(0) {
-}
-Packages downloaded and version:
-pkg1-1.1
-pkg2-1.1
-pkg3-1.1
-pkg4-1.1
-pkg5-1.1
-pkg6-1.1
-Warning: PEAR Warning: PEAR_Installer::download() is deprecated in favor of PEAR_Downloader class
-NULL
-array(0) {
-}
-Packages downloaded and version:
-pkg1-1.1
-pkg2-1.1
-pkg3-1.1
-pkg4-1.1
-pkg5-1.1
-pkg6-1.1
-Test preferred_state = beta:
-Warning: PEAR Warning: PEAR_Installer::download() is deprecated in favor of PEAR_Downloader class
-NULL
-array(0) {
-}
-Packages downloaded and version:
-pkg1-2.0b1
-pkg2-1.1
-pkg3-1.1
-pkg4-1.1
-pkg5-1.1
-pkg6-2.0b1
-Test preferred_state = alpha:
-Warning: PEAR Warning: PEAR_Installer::download() is deprecated in favor of PEAR_Downloader class
-NULL
-array(0) {
-}
-Packages downloaded and version:
-pkg1-2.0b1
-pkg2-1.1
-pkg3-1.4
-pkg4AndAHalf-1.3
-pkg4-1.1
-pkg5-1.1
-pkg6-2.0b1
-
-================Test --onlyreqdeps
-Test preferred_state = stable
-Warning: PEAR Warning: PEAR_Installer::download() is deprecated in favor of PEAR_Downloader class
-NULL
-array(0) {
-}
-Packages downloaded and version:
-pkg1-1.1
-pkg2-1.1
-pkg3-1.1
-pkg4-1.1
-pkg5-1.1
-pkg6-1.1
-Warning: PEAR Warning: PEAR_Installer::download() is deprecated in favor of PEAR_Downloader class
-NULL
-array(0) {
-}
-Packages downloaded and version:
-pkg1-1.1
-pkg2-1.1
-pkg3-1.1
-pkg4-1.1
-pkg5-1.1
-pkg6-1.1
-Test preferred_state = beta:
-Warning: PEAR Warning: PEAR_Installer::download() is deprecated in favor of PEAR_Downloader class
-NULL
-array(0) {
-}
-Packages downloaded and version:
-pkg1-2.0b1
-pkg2-1.1
-pkg3-1.1
-pkg4-1.1
-pkg5-1.1
-pkg6-2.0b1
-Test preferred_state = alpha:
-skipping Package 'pear::pkg3' optional dependency 'pear::pkg4AndAHalf'
-Warning: PEAR Warning: PEAR_Installer::download() is deprecated in favor of PEAR_Downloader class
-NULL
-array(0) {
-}
-Packages downloaded and version:
-pkg1-2.0b1
-pkg2-1.1
-pkg3-1.4
-pkg4-1.1
-pkg5-1.1
-pkg6-2.0b1 \ No newline at end of file
diff --git a/pear/tests/pear_error.phpt b/pear/tests/pear_error.phpt
deleted file mode 100644
index 2a77cf497d..0000000000
--- a/pear/tests/pear_error.phpt
+++ /dev/null
@@ -1,156 +0,0 @@
---TEST--
-PEAR_Error: basic test
---SKIPIF--
-<?php
-if (!getenv('PHP_PEAR_RUNTESTS')) {
- echo 'skip';
-}
-?>
---FILE--
-<?php // -*- PHP -*-
-
-// Test for: PEAR.php
-// Parts tested: - PEAR_Error class
-// - PEAR::isError static method
-
-include_once "PEAR.php";
-
-function test_error_handler($errno, $errmsg, $file, $line, $vars) {
- $errortype = array (
- 1 => "Error",
- 2 => "Warning",
- 4 => "Parsing Error",
- 8 => "Notice",
- 16 => "Core Error",
- 32 => "Core Warning",
- 64 => "Compile Error",
- 128 => "Compile Warning",
- 256 => "User Error",
- 512 => "User Warning",
- 1024=> "User Notice"
- );
- if (preg_match('/^The call_user_method.. function is deprecated/',
- $errmsg)) {
- return;
- }
- $prefix = $errortype[$errno];
- $file = basename($file);
- print "\n$prefix: $errmsg in $file on line XXX\n";
-}
-
-error_reporting(E_ALL);
-set_error_handler("test_error_handler");
-
-class Foo_Error extends PEAR_Error
-{
- function Foo_Error($message = "unknown error", $code = null,
- $mode = null, $options = null, $userinfo = null)
- {
- $this->PEAR_Error($message, $code, $mode, $options, $userinfo);
- $this->error_message_prefix = 'Foo_Error prefix';
- }
-}
-
-class Test1 extends PEAR {
- function Test1() {
- $this->PEAR("Foo_Error");
- }
- function runtest() {
- return $this->raiseError("test error");
- }
-}
-
-function errorhandler(&$obj) {
- print "errorhandler function called, obj=".$obj->toString()."\n";
-}
-
-class errorclass {
- function errorhandler(&$obj) {
- print "errorhandler method called, obj=".$obj->toString()."\n";
- }
-}
-
-print "specify error class: ";
-$obj = new Test1;
-$err = $obj->runtest();
-print $err->toString() . "\n";
-
-$eo = new errorclass;
-
-print "default PEAR_Error: ";
-$err = new PEAR_Error;
-print $err->toString() . "\n";
-print "Testing it: ";
-var_dump(PEAR::isError($err));
-print "This is not an error: ";
-$str = "not an error";
-var_dump(PEAR::isError($str));
-
-print "Now trying a bunch of variations...\n";
-
-print "different message: ";
-$err = new PEAR_Error("test error");
-print $err->toString() . "\n";
-
-print "different message,code: ";
-$err = new PEAR_Error("test error", -42);
-print $err->toString() . "\n";
-
-print "mode=print: ";
-$err = new PEAR_Error("test error", -42, PEAR_ERROR_PRINT);
-print $err->toString() . "\n";
-
-print "mode=callback(function): ";
-$err = new PEAR_Error("test error", -42, PEAR_ERROR_CALLBACK, "errorhandler");
-
-print "mode=callback(method): ";
-$err = new PEAR_Error("test error", -42, PEAR_ERROR_CALLBACK,
- array(&$eo, "errorhandler"));
-
-print "mode=print&trigger: ";
-$err = new PEAR_Error("test error", -42, PEAR_ERROR_PRINT|PEAR_ERROR_TRIGGER);
-print $err->toString() . "\n";
-
-print "mode=trigger:";
-$err = new PEAR_Error("test error", -42, PEAR_ERROR_TRIGGER);
-print $err->toString() . "\n";
-
-print "mode=trigger,level=notice:";
-$err = new PEAR_Error("test error", -42, PEAR_ERROR_TRIGGER, E_USER_NOTICE);
-print $err->toString() . "\n";
-
-print "mode=trigger,level=warning:";
-$err = new PEAR_Error("test error", -42, PEAR_ERROR_TRIGGER, E_USER_WARNING);
-print $err->toString() . "\n";
-
-print "mode=trigger,level=error:";
-$err = new PEAR_Error("test error", -42, PEAR_ERROR_TRIGGER, E_USER_ERROR);
-print $err->toString() . "\n";
-
-?>
---EXPECT--
-specify error class: [foo_error: message="test error" code=0 mode=return level=notice prefix="Foo_Error prefix" info=""]
-default PEAR_Error: [pear_error: message="unknown error" code=0 mode=return level=notice prefix="" info=""]
-Testing it: bool(true)
-This is not an error: bool(false)
-Now trying a bunch of variations...
-different message: [pear_error: message="test error" code=0 mode=return level=notice prefix="" info=""]
-different message,code: [pear_error: message="test error" code=-42 mode=return level=notice prefix="" info=""]
-mode=print: test error[pear_error: message="test error" code=-42 mode=print level=notice prefix="" info=""]
-mode=callback(function): errorhandler function called, obj=[pear_error: message="test error" code=-42 mode=callback callback=errorhandler prefix="" info=""]
-mode=callback(method): errorhandler method called, obj=[pear_error: message="test error" code=-42 mode=callback callback=errorclass::errorhandler prefix="" info=""]
-mode=print&trigger: test error
-User Notice: test error in PEAR.php on line XXX
-[pear_error: message="test error" code=-42 mode=print|trigger level=notice prefix="" info=""]
-mode=trigger:
-User Notice: test error in PEAR.php on line XXX
-[pear_error: message="test error" code=-42 mode=trigger level=notice prefix="" info=""]
-mode=trigger,level=notice:
-User Notice: test error in PEAR.php on line XXX
-[pear_error: message="test error" code=-42 mode=trigger level=notice prefix="" info=""]
-mode=trigger,level=warning:
-User Warning: test error in PEAR.php on line XXX
-[pear_error: message="test error" code=-42 mode=trigger level=warning prefix="" info=""]
-mode=trigger,level=error:
-User Error: test error in PEAR.php on line XXX
-[pear_error: message="test error" code=-42 mode=trigger level=error prefix="" info=""]
diff --git a/pear/tests/pear_error2.phpt b/pear/tests/pear_error2.phpt
deleted file mode 100644
index 9dbfa3b22c..0000000000
--- a/pear/tests/pear_error2.phpt
+++ /dev/null
@@ -1,27 +0,0 @@
---TEST--
-PEAR_Error: die mode
---SKIPIF--
-<?php
-if (!getenv('PHP_PEAR_RUNTESTS')) {
- echo 'skip';
-}
-?>
---FILE--
-<?php // -*- C++ -*-
-
-// Test for: PEAR.php
-// Parts tested: - PEAR_Error class
-// - PEAR::isError static method
-// testing PEAR_Error
-
-include_once "PEAR.php";
-
-error_reporting(E_ALL);
-
-print "mode=die: ";
-$err = new PEAR_Error("test error!!\n", -42, PEAR_ERROR_DIE);
-print $err->toString() . "\n";
-
-?>
---EXPECT--
-mode=die: test error!!
diff --git a/pear/tests/pear_error3.phpt b/pear/tests/pear_error3.phpt
deleted file mode 100644
index 2e5ce8d2a2..0000000000
--- a/pear/tests/pear_error3.phpt
+++ /dev/null
@@ -1,58 +0,0 @@
---TEST--
-PEAR_Error: default error handling
---SKIPIF--
-<?php
-if (!getenv('PHP_PEAR_RUNTESTS')) {
- echo 'skip';
-}
-?>
---FILE--
-<?php // -*- PHP -*-
-
-// Test for: PEAR.php
-// Parts tested: - PEAR_Error class
-// - PEAR::setErrorHandling
-// - PEAR::raiseError method
-
-include_once "PEAR.php";
-
-error_reporting(E_ALL);
-
-function errorhandler($eobj)
-{
- if (PEAR::isError($eobj)) {
- print "errorhandler called with an error object.\n";
- print "error message: ".$eobj->getMessage()."\n";
- } else {
- print "errorhandler called, but without an error object.\n";
- }
-}
-
-// Test 1
-PEAR::setErrorHandling(PEAR_ERROR_PRINT, "OOPS: %s\n");
-$tmp = new PEAR;
-$tmp->raiseError("error happens");
-
-// Return PEAR to its original state
-$GLOBALS['_PEAR_default_error_mode'] = PEAR_ERROR_RETURN;
-$GLOBALS['_PEAR_default_error_options'] = E_USER_NOTICE;
-$GLOBALS['_PEAR_default_error_callback'] = '';
-
-// Test 2
-$obj = new PEAR;
-$obj->setErrorHandling(PEAR_ERROR_PRINT);
-$obj->raiseError("error 1\n");
-$obj->setErrorHandling(null);
-$obj->raiseError("error 2\n");
-PEAR::setErrorHandling(PEAR_ERROR_CALLBACK, "errorhandler");
-$obj->raiseError("error 3");
-$obj->setErrorHandling(PEAR_ERROR_PRINT);
-$obj->raiseError("error 4\n");
-
-?>
---EXPECT--
-OOPS: error happens
-error 1
-errorhandler called with an error object.
-error message: error 3
-error 4 \ No newline at end of file
diff --git a/pear/tests/pear_error4.phpt b/pear/tests/pear_error4.phpt
deleted file mode 100644
index 0d6754c88b..0000000000
--- a/pear/tests/pear_error4.phpt
+++ /dev/null
@@ -1,108 +0,0 @@
---TEST--
-PEAR_Error: expected errors
---SKIPIF--
-<?php
-if (!getenv('PHP_PEAR_RUNTESTS')) {
- echo 'skip';
-}
-?>
---FILE--
-<?php // -*- PHP -*-
-
-// Test for: PEAR.php
-// Parts tested: - PEAR_Error class
-// - PEAR::expectError
-// - PEAR::popExpect
-
-include_once "PEAR.php";
-
-error_reporting(E_ALL);
-
-function errorhandler($eobj)
-{
- if (PEAR::isError($eobj)) {
- print "error: ".$eobj->getMessage()."\n";
- } else {
- print "errorhandler called without error object\n";
- }
-}
-
-$obj = new PEAR;
-$obj->setErrorHandling(PEAR_ERROR_CALLBACK, "errorhandler");
-
-print "subtest 1\n";
-$obj->expectError(1);
-$obj->raiseError("1", 1);
-$obj->popExpect();
-$obj->raiseError("2", 2);
-
-print "subtest 2\n";
-$obj->expectError(3);
-$obj->expectError(2);
-$obj->raiseError("3", 3);
-
-print "subtest 3\n";
-$obj->popExpect();
-$obj->raiseError("3", 3);
-$obj->popExpect();
-
-print "subtest 4\n";
-$obj->expectError(array(1,2,3,4,5));
-$obj->raiseError("0", 0);
-$obj->raiseError("1", 1);
-$obj->raiseError("2", 2);
-$obj->raiseError("3", 3);
-$obj->raiseError("4", 4);
-$obj->raiseError("5", 5);
-$obj->raiseError("6", 6);
-$obj->raiseError("error");
-$obj->popExpect();
-
-print "subtest 5\n";
-$obj->expectError("*");
-$obj->raiseError("42", 42);
-$obj->raiseError("75", 75);
-$obj->raiseError("13", 13);
-$obj->popExpect();
-
-print "subtest 6\n";
-$obj->expectError();
-$obj->raiseError("123", 123);
-$obj->raiseError("456", 456);
-$obj->raiseError("789", 789);
-$obj->popExpect();
-
-print "subtest 7\n";
-$obj->expectError("syntax error");
-$obj->raiseError("type mismatch");
-$obj->raiseError("syntax error");
-$obj->popExpect();
-
-print "subtest 8\n";
-$obj->expectError(array(1, 2, 3));
-$obj->expectError(array(3, 4, 5));
-$obj->raiseError(4);
-$obj->delExpect(2);
-$obj->raiseError(3);
-$obj->delExpect(1, 3, 4, 5);
-$err = $obj->delExpect(2);
-
-?>
---EXPECT--
-subtest 1
-error: 2
-subtest 2
-error: 3
-subtest 3
-subtest 4
-error: 0
-error: 6
-error: error
-subtest 5
-subtest 6
-subtest 7
-error: type mismatch
-subtest 8
-error: 4
-error: 3
-error: The expected error you submitted does not exist
diff --git a/pear/tests/pear_installer1.phpt b/pear/tests/pear_installer1.phpt
deleted file mode 100644
index 9daf2ecf07..0000000000
--- a/pear/tests/pear_installer1.phpt
+++ /dev/null
@@ -1,213 +0,0 @@
---TEST--
-PEAR_Installer test extractDownloadFileName, checkDeps
---SKIPIF--
-<?php
-if (!getenv('PHP_PEAR_RUNTESTS')) {
- echo 'skip';
-}
-?>
---FILE--
-<?php
-
-require_once "PEAR/Installer.php";
-require_once 'PEAR/ChannelFile.php';
-
-$temp_path = dirname(__FILE__) . DIRECTORY_SEPARATOR . 'testinstallertemp';
-if (!is_dir($temp_path)) {
- mkdir($temp_path);
-}
-touch($temp_path . DIRECTORY_SEPARATOR . 'user.conf');
-// no UI is needed for these tests
-$ui = false;
-$config = new PEAR_Config($temp_path . DIRECTORY_SEPARATOR . 'user.conf');
-$config->set('php_dir', dirname(__FILE__) . DIRECTORY_SEPARATOR . 'testinstallertemp');
-$reg = &new PEAR_Registry($config->get('php_dir'));
-$chan = new PEAR_ChannelFile;
-$chan->setName('oddball');
-$chan->setServer('example.com');
-$chan->setSummary('oddball');
-$chan->setPackageNameRegex('[a-z][a-z0-9]*(?:\.[a-z0-9]+)*');
-$reg->addChannel($chan);
-$installer = new PEAR_Installer($ui);
-$installer->config = &$config;
-echo "test extractDownloadFileName:\n";
-echo 'existing file: ';
-echo ($temp_path . DIRECTORY_SEPARATOR . 'user.conf' ==
- $installer->extractDownloadFileName($temp_path . DIRECTORY_SEPARATOR . 'user.conf',
- $ui)) ? "yes\n" : "no\n";
-var_dump($ui);
-echo 'invalid match: ';
-echo $installer->extractDownloadFileName('27',
- $ui);
-echo "\n";
-var_dump($ui);
-echo 'valid match, no version: ';
-echo $installer->extractDownloadFileName('Testpackage', $ui);
-echo "\n";
-var_dump($ui);
-echo 'invalid match, has invalid version: ';
-echo $installer->extractDownloadFileName('Testpackage-##', $ui);
-echo "\n";
-var_dump($ui);
-echo 'valid match, has version: ';
-echo $installer->extractDownloadFileName('Testpackage-1.2', $ui);
-echo "\n";
-var_dump($ui);
-echo "valid match, has unknown channel:\n";
-var_dump($installer->extractDownloadFileName('Unknown::Testpackage', $ui));
-var_dump($ui);
-echo "invalid match, has known channel, invalid package name:\n";
-var_dump($installer->extractDownloadFileName('Oddball::Testpackage', $ui));
-var_dump($ui);
-echo "valid match, has known channel, valid package name:\n";
-var_dump($installer->extractDownloadFileName('Oddball::testpackage.third3', $ui));
-var_dump($ui);
-echo "valid match, has known channel, valid package name, version:\n";
-var_dump($installer->extractDownloadFileName('Oddball::testpackage.third3-54.7354', $ui));
-var_dump($ui);
-
-echo "\ntest checkDeps 1:\n";
-$fakerel = array('release_deps' =>
-array(
- array(
- 'type' => 'pkg',
- 'rel '=> 'has',
- 'name' => 'foo',
- 'optional' => 'yes'
- ),
- array(
- 'type' => 'pkg',
- 'rel '=> 'ge',
- 'version' => '1.6',
- 'name' => 'bar',
- ),
-));
-$res = '';
-var_dump($installer->checkDeps($fakerel, $res));
-var_dump($res);
-
-echo "\ntest checkDeps 1.1:\n";
-$fakerel = array('release_deps' =>
-array(
- array(
- 'type' => 'pkg',
- 'rel '=> 'has',
- 'name' => 'foo',
- 'optional' => 'yes',
- 'channel' => 'grob',
- ),
- array(
- 'type' => 'pkg',
- 'rel '=> 'ge',
- 'version' => '1.6',
- 'name' => 'bar',
- 'channel' => 'prego',
- ),
-));
-$res = '';
-var_dump($installer->checkDeps($fakerel, $res));
-var_dump($res);
-$fakerel = array('release_deps' =>
-array(
- array(
- 'type' => 'pkg',
- 'rel '=> 'has',
- 'name' => 'foo',
- 'optional' => 'yes'
- ),
-));
-echo "\ntest checkDeps 2:\n";
-$res = '';
-var_dump($installer->checkDeps($fakerel, $res));
-var_dump($res);
-$fakerel = array('release_deps' =>
-array(
- array(
- 'type' => 'pkg',
- 'rel '=> 'has',
- 'name' => 'foo',
- 'optional' => 'yes',
- 'channel' => 'purple',
- ),
-));
-echo "\ntest checkDeps 2.1:\n";
-$res = '';
-var_dump($installer->checkDeps($fakerel, $res));
-var_dump($res);
-cleanall($temp_path);
-function cleanall($dir)
-{
- $dp = opendir($dir);
- while ($ent = readdir($dp)) {
- if ($ent == '.' || $ent == '..') {
- continue;
- }
- if (is_dir($dir . DIRECTORY_SEPARATOR . $ent)) {
- cleanall($dir . DIRECTORY_SEPARATOR . $ent);
- } else {
- unlink($dir . DIRECTORY_SEPARATOR . $ent);
- }
- }
- closedir($dp);
- rmdir($dir);
-}
-?>
---EXPECT--
-test extractDownloadFileName:
-existing file: yes
-bool(false)
-invalid match: 27
-NULL
-valid match, no version: Testpackage
-NULL
-invalid match, has invalid version: Testpackage-##
-NULL
-valid match, has version: Testpackage
-string(3) "1.2"
-valid match, has unknown channel:
-array(2) {
- ["channel"]=>
- string(7) "Unknown"
- ["package"]=>
- string(11) "Testpackage"
-}
-NULL
-invalid match, has known channel, invalid package name:
-string(20) "Oddball::Testpackage"
-NULL
-valid match, has known channel, valid package name:
-array(2) {
- ["channel"]=>
- string(7) "Oddball"
- ["package"]=>
- string(18) "testpackage.third3"
-}
-NULL
-valid match, has known channel, valid package name, version:
-array(2) {
- ["channel"]=>
- string(7) "Oddball"
- ["package"]=>
- string(18) "testpackage.third3"
-}
-string(7) "54.7354"
-
-test checkDeps 1:
-bool(true)
-string(29) "
-requires package `pear::bar'"
-
-test checkDeps 1.1:
-bool(true)
-string(30) "
-requires package `prego::bar'"
-
-test checkDeps 2:
-bool(false)
-string(83) "Optional dependencies:
-package `pear::foo' is recommended to utilize some features."
-
-test checkDeps 2.1:
-bool(false)
-string(85) "Optional dependencies:
-package `purple::foo' is recommended to utilize some features." \ No newline at end of file
diff --git a/pear/tests/pear_installer2.phpt b/pear/tests/pear_installer2.phpt
deleted file mode 100644
index 541ad71b76..0000000000
--- a/pear/tests/pear_installer2.phpt
+++ /dev/null
@@ -1,398 +0,0 @@
---TEST--
-PEAR_Installer test _installFile()
---SKIPIF--
-<?php
-if (!getenv('PHP_PEAR_RUNTESTS')) {
- echo 'skip';
-}
-?>
---FILE--
-<?php
-$temp_path = dirname(__FILE__) . DIRECTORY_SEPARATOR . 'testinstallertemp';
-if (!is_dir($temp_path)) {
- mkdir($temp_path);
-}
-if (!is_dir($temp_path . DIRECTORY_SEPARATOR . 'php')) {
- mkdir($temp_path . DIRECTORY_SEPARATOR . 'php');
-}
-if (!is_dir($temp_path . DIRECTORY_SEPARATOR . 'data')) {
- mkdir($temp_path . DIRECTORY_SEPARATOR . 'data');
-}
-if (!is_dir($temp_path . DIRECTORY_SEPARATOR . 'doc')) {
- mkdir($temp_path . DIRECTORY_SEPARATOR . 'doc');
-}
-if (!is_dir($temp_path . DIRECTORY_SEPARATOR . 'test')) {
- mkdir($temp_path . DIRECTORY_SEPARATOR . 'test');
-}
-if (!is_dir($temp_path . DIRECTORY_SEPARATOR . 'ext')) {
- mkdir($temp_path . DIRECTORY_SEPARATOR . 'ext');
-}
-if (!is_dir($temp_path . DIRECTORY_SEPARATOR . 'script')) {
- mkdir($temp_path . DIRECTORY_SEPARATOR . 'script');
-}
-if (!is_dir($temp_path . DIRECTORY_SEPARATOR . 'tmp')) {
- mkdir($temp_path . DIRECTORY_SEPARATOR . 'tmp');
-}
-if (!is_dir($temp_path . DIRECTORY_SEPARATOR . 'bin')) {
- mkdir($temp_path . DIRECTORY_SEPARATOR . 'bin');
-}
-// make the fake configuration - we'll use one of these and it should work
-$config = serialize(array('master_server' => 'pear.php.net',
- 'php_dir' => $temp_path . DIRECTORY_SEPARATOR . 'php',
- 'ext_dir' => $temp_path . DIRECTORY_SEPARATOR . 'ext',
- 'data_dir' => $temp_path . DIRECTORY_SEPARATOR . 'data',
- 'doc_dir' => $temp_path . DIRECTORY_SEPARATOR . 'doc',
- 'test_dir' => $temp_path . DIRECTORY_SEPARATOR . 'test',
- 'bin_dir' => $temp_path . DIRECTORY_SEPARATOR . 'bin',));
-touch($temp_path . DIRECTORY_SEPARATOR . 'pear.conf');
-$fp = fopen($temp_path . DIRECTORY_SEPARATOR . 'pear.conf', 'w');
-fwrite($fp, $config);
-fclose($fp);
-touch($temp_path . DIRECTORY_SEPARATOR . 'pear.ini');
-$fp = fopen($temp_path . DIRECTORY_SEPARATOR . 'pear.ini', 'w');
-fwrite($fp, $config);
-fclose($fp);
-
-putenv('PHP_PEAR_SYSCONF_DIR='.$temp_path);
-$home = getenv('HOME');
-if (!empty($home)) {
- // for PEAR_Config initialization
- putenv('HOME="'.$temp_path);
-}
-require_once "PEAR/Installer.php";
-
-// no UI is needed for these tests
-$ui = false;
-$installer = new PEAR_Installer($ui);
-$curdir = getcwd();
-chdir(dirname(__FILE__));
-
-echo "test _installFile():\n";
-$fp = fopen($temp_path . DIRECTORY_SEPARATOR . 'tmp' . DIRECTORY_SEPARATOR . 'installer2.phpt.testfile.php', 'w');
-fwrite($fp, 'a');
-fclose($fp);
-// pretend we just parsed a package.xml
-$installer->pkginfo = array('package' => 'Foo');
-
-echo "install as role=\"php\":\n";
-var_dump($installer->_installFile('installer2.phpt.testfile.php', array('role' => 'php'),
- $temp_path . DIRECTORY_SEPARATOR . 'tmp', array()));
-echo 'file ext/.tmpinstaller2.phpt.testfile.php exists? => ';
-echo (file_exists($temp_path . DIRECTORY_SEPARATOR . 'php' . DIRECTORY_SEPARATOR .
- '.tmpinstaller2.phpt.testfile.php') ? "yes\n" : "no\n");
-
-echo "install as role=\"ext\":\n";
-var_dump($installer->_installFile('installer2.phpt.testfile.php', array('role' => 'ext'),
- $temp_path . DIRECTORY_SEPARATOR . 'tmp', array()));
-echo 'file php/.tmpinstaller2.phpt.testfile.php exists? => ';
-echo (file_exists($temp_path . DIRECTORY_SEPARATOR . 'ext' . DIRECTORY_SEPARATOR .
- '.tmpinstaller2.phpt.testfile.php') ? "yes\n" : "no\n");
-
-echo "install as role=\"data\":\n";
-var_dump($installer->_installFile('installer2.phpt.testfile.php', array('role' => 'data'),
- $temp_path . DIRECTORY_SEPARATOR . 'tmp', array()));
-echo 'file data/.tmpinstaller2.phpt.testfile.php exists? => ';
-echo (file_exists($temp_path . DIRECTORY_SEPARATOR . 'data' . DIRECTORY_SEPARATOR .
- 'Foo' . DIRECTORY_SEPARATOR . '.tmpinstaller2.phpt.testfile.php') ? "yes\n" : "no\n");
-
-echo "install as role=\"doc\":\n";
-var_dump($installer->_installFile('installer2.phpt.testfile.php', array('role' => 'doc'),
- $temp_path . DIRECTORY_SEPARATOR . 'tmp', array()));
-echo 'file doc/.tmpinstaller2.phpt.testfile.php exists? => ';
-echo (file_exists($temp_path . DIRECTORY_SEPARATOR . 'doc' . DIRECTORY_SEPARATOR .
- 'Foo' . DIRECTORY_SEPARATOR . '.tmpinstaller2.phpt.testfile.php') ? "yes\n" : "no\n");
-
-echo "install as role=\"test\":\n";
-var_dump($installer->_installFile('installer2.phpt.testfile.php', array('role' => 'test'),
- $temp_path . DIRECTORY_SEPARATOR . 'tmp', array()));
-echo 'file test/.tmpinstaller2.phpt.testfile.php exists? => ';
-echo (file_exists($temp_path . DIRECTORY_SEPARATOR . 'test' . DIRECTORY_SEPARATOR .
- 'Foo' . DIRECTORY_SEPARATOR . '.tmpinstaller2.phpt.testfile.php') ? "yes\n" : "no\n");
-
-echo "install as role=\"script\":\n";
-var_dump($installer->_installFile('installer2.phpt.testfile.php', array('role' => 'script'),
- $temp_path . DIRECTORY_SEPARATOR . 'tmp', array()));
-echo 'file bin/.tmpinstaller2.phpt.testfile.php exists? => ';
-echo (file_exists($temp_path . DIRECTORY_SEPARATOR . 'bin' . DIRECTORY_SEPARATOR .
- '.tmpinstaller2.phpt.testfile.php') ? "yes\n" : "no\n");
-
-$installer->rollbackFileTransaction();
-
-echo "install as invalid role=\"klingon\":\n";
-$err = $installer->_installFile('installer2.phpt.testfile.php', array('role' => 'klingon'),
- $temp_path . DIRECTORY_SEPARATOR . 'tmp', array());
-echo 'returned PEAR_Error: ' . (get_class($err) == 'pear_error' ? "yes\n" : "no\n");
-if (is_object($err)) {
- echo 'message: ' . $err->getMessage() . "\n\n";
-}
-echo 'file bin/.tmpinstaller2.phpt.testfile.php exists? => ';
-echo (file_exists($temp_path . DIRECTORY_SEPARATOR . 'bin' . DIRECTORY_SEPARATOR .
- '.tmpinstaller2.phpt.testfile.php') ? "yes\n" : "no\n");
-
-echo "install non-existent file:\n";
-$err = $installer->_installFile('....php', array('role' => 'php'),
- $temp_path . DIRECTORY_SEPARATOR . 'tmp', array());
-echo 'returned PEAR_Error: ' . (get_class($err) == 'pear_error' ? "yes\n" : "no\n");
-if (is_object($err)) {
- echo 'message: ' . $err->getMessage() . "\n";
-}
-echo 'file bin/.tmp....php exists? => ';
-echo (file_exists($temp_path . DIRECTORY_SEPARATOR . 'bin' . DIRECTORY_SEPARATOR .
- '.tmp....php') ? "yes\n" : "no\n");
-
-$fp = fopen($temp_path . DIRECTORY_SEPARATOR . 'tmp' . DIRECTORY_SEPARATOR . 'installer2.phpt.testfile.php', 'w');
-fwrite($fp, '@TEST@ stuff');
-fclose($fp);
-
-echo "\ntest valid md5sum:\n";
-var_dump($installer->_installFile('installer2.phpt.testfile.php', array('role' => 'script', 'md5sum' => md5('@TEST@ stuff')),
- $temp_path . DIRECTORY_SEPARATOR . 'tmp', array()));
-echo 'file bin/.tmpinstaller2.phpt.testfile.php exists? => ';
-echo (file_exists($temp_path . DIRECTORY_SEPARATOR . 'bin' . DIRECTORY_SEPARATOR .
- '.tmpinstaller2.phpt.testfile.php') ? "yes\n" : "no\n");
-
-$installer->rollbackFileTransaction();
-
-echo "test invalid md5sum:\n";
-$err = $installer->_installFile('installer2.phpt.testfile.php', array('role' => 'script', 'md5sum' => md5('oops stuff')),
- $temp_path . DIRECTORY_SEPARATOR . 'tmp', array());
-echo 'returned PEAR_Error: ' . (get_class($err) == 'pear_error' ? "yes\n" : "no\n");
-if (is_object($err)) {
- echo 'message: ' . ($err->getMessage() == 'bad md5sum for file ' . $temp_path . DIRECTORY_SEPARATOR . 'bin' .
- DIRECTORY_SEPARATOR . 'installer2.phpt.testfile.php' ? 'match' : 'no match') . "\n";
-}
-echo 'file bin/.tmpinstaller2.phpt.testfile.php exists? => ';
-echo (file_exists($temp_path . DIRECTORY_SEPARATOR . 'bin' . DIRECTORY_SEPARATOR .
- '.tmpinstaller2.phpt.testfile.php') ? "yes\n" : "no\n");
-
-echo "test invalid md5sum with --force:\n";
-ob_start();
-$err = $installer->_installFile('installer2.phpt.testfile.php', array('role' => 'script', 'md5sum' => md5('oops stuff')),
- $temp_path . DIRECTORY_SEPARATOR . 'tmp', array('force' => true));
-$warning = ob_get_contents();
-ob_end_clean();
-echo 'warning : ';
-echo ($warning == 'warning : bad md5sum for file ' . $temp_path . DIRECTORY_SEPARATOR . 'bin' .
- DIRECTORY_SEPARATOR . "installer2.phpt.testfile.php\n" ? "match\n" : "no match\n");
-echo 'returned PEAR_Error: ' . (get_class($err) == 'pear_error' ? "yes\n" : "no\n");
-if (is_object($err)) {
- echo 'message: ' . ($err->getMessage() == 'bad md5sum for file ' . $temp_path . DIRECTORY_SEPARATOR . 'bin' .
- DIRECTORY_SEPARATOR . 'installer2.phpt.testfile.php' ? 'match' : 'no match') . "\n";
-}
-echo 'file bin/.tmpinstaller2.phpt.testfile.php exists? => ';
-echo (file_exists($temp_path . DIRECTORY_SEPARATOR . 'bin' . DIRECTORY_SEPARATOR .
- '.tmpinstaller2.phpt.testfile.php') ? "yes\n" : "no\n");
-
-define('PEARINSTALLERTEST2_FAKE_FOO_CONST', 'good');
-echo "\ntest replacements:\n";
-var_dump($installer->_installFile('installer2.phpt.testfile.php', array('role' => 'script',
- 'replacements' => array(array('type' => 'php-const', 'from' => '@TEST@', 'to' => 'PEARINSTALLERTEST2_FAKE_FOO_CONST'))),
- $temp_path . DIRECTORY_SEPARATOR . 'tmp', array()));
-echo "==>test php-const replacement: equals 'good stuff'? => ";
-if (file_exists($temp_path . DIRECTORY_SEPARATOR . 'bin' . DIRECTORY_SEPARATOR .
- '.tmpinstaller2.phpt.testfile.php'))
-{
- $a = implode(file($temp_path . DIRECTORY_SEPARATOR . 'bin' . DIRECTORY_SEPARATOR .
- '.tmpinstaller2.phpt.testfile.php'), '');
- echo "$a\n";
-} else {
- echo "no! file installation failed\n";
-}
-$installer->rollbackFileTransaction();
-
-echo "==>test invalid php-const replacement:\n";
-$err = $installer->_installFile('installer2.phpt.testfile.php', array('role' => 'script',
- 'replacements' => array(array('type' => 'php-const', 'from' => '@TEST@', 'to' => '%PEARINSTALLERTEST2_FAKE_FOO_CONST'))),
- $temp_path . DIRECTORY_SEPARATOR . 'tmp', array());
-if (file_exists($temp_path . DIRECTORY_SEPARATOR . 'bin' . DIRECTORY_SEPARATOR .
- '.tmpinstaller2.phpt.testfile.php'))
-{
- $a = implode(file($temp_path . DIRECTORY_SEPARATOR . 'bin' . DIRECTORY_SEPARATOR .
- '.tmpinstaller2.phpt.testfile.php'), '');
- echo "$a\n";
-} else {
- echo "no! file installation failed\n";
-}
-
-$installer->rollbackFileTransaction();
-
-var_dump($installer->_installFile('installer2.phpt.testfile.php', array('role' => 'script',
- 'replacements' => array(array('type' => 'pear-config', 'from' => '@TEST@', 'to' => 'master_server'))),
- $temp_path . DIRECTORY_SEPARATOR . 'tmp', array()));
-echo "==>test pear-config replacement: equals 'pear.php.net stuff'? => ";
-if (file_exists($temp_path . DIRECTORY_SEPARATOR . 'bin' . DIRECTORY_SEPARATOR .
- '.tmpinstaller2.phpt.testfile.php'))
-{
- $a = implode(file($temp_path . DIRECTORY_SEPARATOR . 'bin' . DIRECTORY_SEPARATOR .
- '.tmpinstaller2.phpt.testfile.php'), '');
- echo "$a\n";
-} else {
- echo "no! file installation failed\n";
-}
-$installer->rollbackFileTransaction();
-
-echo "==>test invalid pear-config replacement\n";
-var_dump($installer->_installFile('installer2.phpt.testfile.php', array('role' => 'script',
- 'replacements' => array(array('type' => 'pear-config', 'from' => '@TEST@', 'to' => 'blahblahblah'))),
- $temp_path . DIRECTORY_SEPARATOR . 'tmp', array()));
-if (file_exists($temp_path . DIRECTORY_SEPARATOR . 'bin' . DIRECTORY_SEPARATOR .
- '.tmpinstaller2.phpt.testfile.php'))
-{
- $a = implode(file($temp_path . DIRECTORY_SEPARATOR . 'bin' . DIRECTORY_SEPARATOR .
- '.tmpinstaller2.phpt.testfile.php'), '');
- echo "$a\n";
-} else {
- echo "no! file installation failed\n";
-}
-$installer->rollbackFileTransaction();
-
-var_dump($installer->_installFile('installer2.phpt.testfile.php', array('role' => 'script',
- 'replacements' => array(array('type' => 'package-info', 'from' => '@TEST@', 'to' => 'package'))),
- $temp_path . DIRECTORY_SEPARATOR . 'tmp', array()));
-echo "==>test package-info replacement: equals 'Foo stuff'? => ";
-if (file_exists($temp_path . DIRECTORY_SEPARATOR . 'bin' . DIRECTORY_SEPARATOR .
- '.tmpinstaller2.phpt.testfile.php'))
-{
- $a = implode(file($temp_path . DIRECTORY_SEPARATOR . 'bin' . DIRECTORY_SEPARATOR .
- '.tmpinstaller2.phpt.testfile.php'), '');
- echo "$a\n";
-} else {
- echo "no! file installation failed\n";
-}
-$installer->rollbackFileTransaction();
-
-echo "==>test invalid package-info replacement:\n";
-var_dump($installer->_installFile('installer2.phpt.testfile.php', array('role' => 'script',
- 'replacements' => array(array('type' => 'package-info', 'from' => '@TEST@', 'to' => 'gronk'))),
- $temp_path . DIRECTORY_SEPARATOR . 'tmp', array()));
-if (file_exists($temp_path . DIRECTORY_SEPARATOR . 'bin' . DIRECTORY_SEPARATOR .
- '.tmpinstaller2.phpt.testfile.php'))
-{
- $a = implode(file($temp_path . DIRECTORY_SEPARATOR . 'bin' . DIRECTORY_SEPARATOR .
- '.tmpinstaller2.phpt.testfile.php'), '');
- echo "$a\n";
-} else {
- echo "no! file installation failed\n";
-}
-$installer->rollbackFileTransaction();
-
-echo "\ntest install-as:\n";
-var_dump($installer->_installFile('installer2.phpt.testfile.php', array('role' => 'script',
- 'install-as' => 'foobar.php'),
- $temp_path . DIRECTORY_SEPARATOR . 'tmp', array()));
-echo "==>test install as 'foobar.php'. file exists? ";
-if (file_exists($temp_path . DIRECTORY_SEPARATOR . 'bin' . DIRECTORY_SEPARATOR .
- '.tmpfoobar.php'))
-{
- echo "yes\n";
-} else {
- echo "no\n";
-}
-$installer->rollbackFileTransaction();
-
-echo "\ntest baseinstalldir:\n";
-var_dump($installer->_installFile('installer2.phpt.testfile.php', array('role' => 'script',
- 'baseinstalldir' => 'Foo/Mine'),
- $temp_path . DIRECTORY_SEPARATOR . 'tmp', array()));
-echo "==>test baseinstalldir = 'Foo/Mine'. file exists? ";
-if (file_exists($temp_path . DIRECTORY_SEPARATOR . 'bin' . DIRECTORY_SEPARATOR .
- 'Foo' . DIRECTORY_SEPARATOR . 'Mine' . DIRECTORY_SEPARATOR . '.tmpinstaller2.phpt.testfile.php'))
-{
- echo "yes\n";
-} else {
- echo "no\n";
-}
-$installer->rollbackFileTransaction();
-
-//cleanup
-chdir($curdir);
-cleanall($temp_path);
-
-// ------------------------------------------------------------------------- //
-
-function cleanall($dir)
-{
- $dp = opendir($dir);
- while ($ent = readdir($dp)) {
- if ($ent == '.' || $ent == '..') {
- continue;
- }
- if (is_dir($dir . DIRECTORY_SEPARATOR . $ent)) {
- cleanall($dir . DIRECTORY_SEPARATOR . $ent);
- } else {
- unlink($dir . DIRECTORY_SEPARATOR . $ent);
- }
- }
- closedir($dp);
- rmdir($dir);
-}
-?>
---EXPECT--
-test _installFile():
-install as role="php":
-int(1)
-file ext/.tmpinstaller2.phpt.testfile.php exists? => yes
-install as role="ext":
-int(1)
-file php/.tmpinstaller2.phpt.testfile.php exists? => yes
-install as role="data":
-int(1)
-file data/.tmpinstaller2.phpt.testfile.php exists? => yes
-install as role="doc":
-int(1)
-file doc/.tmpinstaller2.phpt.testfile.php exists? => yes
-install as role="test":
-int(1)
-file test/.tmpinstaller2.phpt.testfile.php exists? => yes
-install as role="script":
-int(1)
-file bin/.tmpinstaller2.phpt.testfile.php exists? => yes
-install as invalid role="klingon":
-returned PEAR_Error: yes
-message: Invalid role `klingon' for file installer2.phpt.testfile.php
-
-file bin/.tmpinstaller2.phpt.testfile.php exists? => no
-install non-existent file:
-returned PEAR_Error: yes
-message: file does not exist
-file bin/.tmp....php exists? => no
-
-test valid md5sum:
-int(1)
-file bin/.tmpinstaller2.phpt.testfile.php exists? => yes
-test invalid md5sum:
-returned PEAR_Error: yes
-message: match
-file bin/.tmpinstaller2.phpt.testfile.php exists? => no
-test invalid md5sum with --force:
-warning : match
-returned PEAR_Error: no
-file bin/.tmpinstaller2.phpt.testfile.php exists? => yes
-
-test replacements:
-int(1)
-==>test php-const replacement: equals 'good stuff'? => good stuff
-==>test invalid php-const replacement:
-invalid php-const replacement: %PEARINSTALLERTEST2_FAKE_FOO_CONST
-@TEST@ stuff
-int(1)
-==>test pear-config replacement: equals 'pear.php.net stuff'? => pear.php.net stuff
-==>test invalid pear-config replacement
-invalid pear-config replacement: blahblahblah
-int(1)
-@TEST@ stuff
-int(1)
-==>test package-info replacement: equals 'Foo stuff'? => Foo stuff
-==>test invalid package-info replacement:
-invalid package-info replacement: gronk
-int(1)
-@TEST@ stuff
-
-test install-as:
-int(1)
-==>test install as 'foobar.php'. file exists? yes
-
-test baseinstalldir:
-int(1)
-==>test baseinstalldir = 'Foo/Mine'. file exists? yes
-
diff --git a/pear/tests/pear_installer3.phpt b/pear/tests/pear_installer3.phpt
deleted file mode 100644
index f997ab7e4d..0000000000
--- a/pear/tests/pear_installer3.phpt
+++ /dev/null
@@ -1,415 +0,0 @@
---TEST--
-PEAR_Installer test #3 File Transactions
---SKIPIF--
-<?php
-if (!getenv('PHP_PEAR_RUNTESTS')) {
- echo 'skip';
-}
-?>
---FILE--
-<?php
-$temp_path = dirname(__FILE__) . DIRECTORY_SEPARATOR . 'testinstallertemp';
-if (!is_dir($temp_path)) {
- mkdir($temp_path);
-}
-if (!is_dir($temp_path . DIRECTORY_SEPARATOR . 'php')) {
- mkdir($temp_path . DIRECTORY_SEPARATOR . 'php');
-}
-if (!is_dir($temp_path . DIRECTORY_SEPARATOR . 'data')) {
- mkdir($temp_path . DIRECTORY_SEPARATOR . 'data');
-}
-if (!is_dir($temp_path . DIRECTORY_SEPARATOR . 'doc')) {
- mkdir($temp_path . DIRECTORY_SEPARATOR . 'doc');
-}
-if (!is_dir($temp_path . DIRECTORY_SEPARATOR . 'test')) {
- mkdir($temp_path . DIRECTORY_SEPARATOR . 'test');
-}
-if (!is_dir($temp_path . DIRECTORY_SEPARATOR . 'ext')) {
- mkdir($temp_path . DIRECTORY_SEPARATOR . 'ext');
-}
-if (!is_dir($temp_path . DIRECTORY_SEPARATOR . 'script')) {
- mkdir($temp_path . DIRECTORY_SEPARATOR . 'script');
-}
-if (!is_dir($temp_path . DIRECTORY_SEPARATOR . 'tmp')) {
- mkdir($temp_path . DIRECTORY_SEPARATOR . 'tmp');
-}
-if (!is_dir($temp_path . DIRECTORY_SEPARATOR . 'bin')) {
- mkdir($temp_path . DIRECTORY_SEPARATOR . 'bin');
-}
-// make the fake configuration - we'll use one of these and it should work
-$config = serialize(array('master_server' => 'pear.php.net',
- 'php_dir' => $temp_path . DIRECTORY_SEPARATOR . 'php',
- 'ext_dir' => $temp_path . DIRECTORY_SEPARATOR . 'ext',
- 'data_dir' => $temp_path . DIRECTORY_SEPARATOR . 'data',
- 'doc_dir' => $temp_path . DIRECTORY_SEPARATOR . 'doc',
- 'test_dir' => $temp_path . DIRECTORY_SEPARATOR . 'test',
- 'bin_dir' => $temp_path . DIRECTORY_SEPARATOR . 'bin',));
-touch($temp_path . DIRECTORY_SEPARATOR . 'pear.conf');
-$fp = fopen($temp_path . DIRECTORY_SEPARATOR . 'pear.conf', 'w');
-fwrite($fp, $config);
-fclose($fp);
-touch($temp_path . DIRECTORY_SEPARATOR . 'pear.ini');
-$fp = fopen($temp_path . DIRECTORY_SEPARATOR . 'pear.ini', 'w');
-fwrite($fp, $config);
-fclose($fp);
-
-putenv('PHP_PEAR_SYSCONF_DIR='.$temp_path);
-$home = getenv('HOME');
-if (!empty($home)) {
- // for PEAR_Config initialization
- putenv('HOME="'.$temp_path);
-}
-require_once "PEAR/Installer.php";
-
-// no UI is needed for these tests
-$ui = false;
-$installer = new PEAR_Installer($ui);
-$installer->debug = 2; // hack debugging in
-$curdir = getcwd();
-chdir(dirname(__FILE__));
-
-echo "test addFileOperation():\n";
-echo "invalid input to addFileOperation():\n";
-$err = $installer->addFileOperation('rename', 2);
-echo 'Returned PEAR_Error?';
-echo (get_class($err) == 'pear_error' ? " yes\n" : " no\n");
-if (get_class($err) == 'pear_error') {
- echo $err->getMessage() . "\n";
-}
-echo 'count($installer->file_operations) = ';
-var_dump(count($installer->file_operations));
-echo "Do valid addFileOperation() delete\n";
-touch($temp_path . DIRECTORY_SEPARATOR . 'tmp' . DIRECTORY_SEPARATOR . 'installertestfooblah.phpt');
-$installer->addFileOperation('delete', array($temp_path . DIRECTORY_SEPARATOR .
- 'tmp' . DIRECTORY_SEPARATOR . 'installertestfooblah.phpt'));
-echo 'count($installer->file_operations) = ';
-var_dump(count($installer->file_operations));
-
-echo "test valid commitFileTransaction():\n";
-if ($installer->commitFileTransaction()) {
- echo "worked\n";
-} else {
- echo "didn't work!\n";
-}
-
-echo "Do valid addFileOperation() rename\n";
-touch($temp_path . DIRECTORY_SEPARATOR . 'tmp' . DIRECTORY_SEPARATOR . 'installertestfooblah.phpt');
-$installer->addFileOperation('rename', array($temp_path . DIRECTORY_SEPARATOR .
- 'tmp' . DIRECTORY_SEPARATOR . 'installertestfooblah.phpt', $temp_path .
- DIRECTORY_SEPARATOR . 'tmp' . DIRECTORY_SEPARATOR . 'renamed.phpt'));
-
-echo 'file renamed.phpt exists?';
-clearstatcache();
-echo (file_exists($temp_path . DIRECTORY_SEPARATOR . 'tmp' . DIRECTORY_SEPARATOR
- . 'renamed.phpt') ? " yes\n" : " no\n");
-echo "test valid commitFileTransaction():\n";
-if ($installer->commitFileTransaction()) {
- echo "worked\n";
-} else {
- echo "didn't work!\n";
-}
-echo 'file renamed.phpt exists?';
-clearstatcache();
-echo (file_exists($temp_path . DIRECTORY_SEPARATOR . 'tmp' . DIRECTORY_SEPARATOR
- . 'renamed.phpt') ? " yes\n" : " no\n");
-unlink($temp_path . DIRECTORY_SEPARATOR . 'tmp' . DIRECTORY_SEPARATOR
- . 'renamed.phpt');
-
-echo "Do valid addFileOperation() chmod\n";
-touch($temp_path . DIRECTORY_SEPARATOR . 'tmp' . DIRECTORY_SEPARATOR . 'installertestfooblah.phpt');
-clearstatcache();
-$perms = fileperms($temp_path . DIRECTORY_SEPARATOR . 'tmp' . DIRECTORY_SEPARATOR . 'installertestfooblah.phpt');
-// check to see if chmod works on this OS
-chmod($temp_path . DIRECTORY_SEPARATOR . 'tmp' . DIRECTORY_SEPARATOR . 'installertestfooblah.phpt', 0776);
-clearstatcache();
-if (fileperms($temp_path . DIRECTORY_SEPARATOR . 'tmp' . DIRECTORY_SEPARATOR . 'installertestfooblah.phpt')
- == $perms && substr(PHP_OS, 0, 3) == 'WIN') {
- // we are on windows, so skip this test, but simulate success
-echo <<<EOF
-file permissions are: 776
-test valid commitFileTransaction():
-about to commit 1 file operations
-successfully committed 1 file operations
-worked
-file permissions are: 640
-
-EOF;
-} else {
- $installer->addFileOperation('chmod', array(0640, $temp_path . DIRECTORY_SEPARATOR .
- 'tmp' . DIRECTORY_SEPARATOR . 'installertestfooblah.phpt'));
-
- echo 'file permissions are: ' . decoct(fileperms($temp_path . DIRECTORY_SEPARATOR .
- 'tmp' . DIRECTORY_SEPARATOR . 'installertestfooblah.phpt')) . "\n";
- echo "test valid commitFileTransaction():\n";
- if ($installer->commitFileTransaction()) {
- echo "worked\n";
- } else {
- echo "didn't work!\n";
- }
- echo 'file permissions are: ' . decoct(fileperms($temp_path . DIRECTORY_SEPARATOR .
- 'tmp' . DIRECTORY_SEPARATOR . 'installertestfooblah.phpt')) . "\n";
-}
-unlink($temp_path . DIRECTORY_SEPARATOR . 'tmp' . DIRECTORY_SEPARATOR
- . 'installertestfooblah.phpt');
-
-mkdir($temp_path . DIRECTORY_SEPARATOR . 'tmp' . DIRECTORY_SEPARATOR
- . 'installertestfooblah');
-echo "Do valid addFileOperation() rmdir\n";
-echo 'directory exists?';
-clearstatcache();
-echo (is_dir($temp_path . DIRECTORY_SEPARATOR .
- 'tmp' . DIRECTORY_SEPARATOR . 'installertestfooblah') ? " yes\n" : " no\n");
-$installer->addFileOperation('rmdir', array($temp_path . DIRECTORY_SEPARATOR .
- 'tmp' . DIRECTORY_SEPARATOR . 'installertestfooblah'));
-
-echo "test valid commitFileTransaction():\n";
-if ($installer->commitFileTransaction()) {
- echo "worked\n";
-} else {
- echo "didn't work!\n";
-}
-echo 'directory exists?';
-
-clearstatcache();
-echo (is_dir($temp_path . DIRECTORY_SEPARATOR .
- 'tmp' . DIRECTORY_SEPARATOR . 'installertestfooblah') ? " yes\n" : " no\n");
-
-echo "Do valid addFileOperation() installed_as\n";
-$installer->addFileOperation('installed_as', array('test.php',
- $temp_path . DIRECTORY_SEPARATOR . 'tmp' . DIRECTORY_SEPARATOR .
- 'glomp' . DIRECTORY_SEPARATOR . 'fromp' . DIRECTORY_SEPARATOR
- . 'installertestfooblah.phpt',
- $temp_path . DIRECTORY_SEPARATOR . 'tmp' . DIRECTORY_SEPARATOR,
- 'glomp' . DIRECTORY_SEPARATOR . 'fromp'));
-echo "test valid commitFileTransaction():\n";
-if ($installer->commitFileTransaction()) {
- echo "worked\n";
-} else {
- echo "didn't work!\n";
-}
-if (isset($installer->pkginfo['filelist'])) {
- echo "filelist created\n";
-} else {
- echo "filelist not created!\n";
-}
-if (isset($installer->pkginfo['filelist']['test.php'])) {
- echo "filelist test.php created\n";
-} else {
- echo "filelist test.php not created!\n";
-}
-if (isset($installer->pkginfo['filelist']['test.php']['installed_as'])) {
- echo "filelist test.php installed_as created\n";
-} else {
- echo "filelist test.php installed_as not created!\n";
-}
-$p = $temp_path . DIRECTORY_SEPARATOR . 'tmp' . DIRECTORY_SEPARATOR .
- 'glomp' . DIRECTORY_SEPARATOR . 'fromp' . DIRECTORY_SEPARATOR
- . 'installertestfooblah.phpt';
-if (@$installer->pkginfo['filelist']['test.php']['installed_as'] == $p) {
- echo "filelist test.php installed_as is correct\n";
-} else {
- echo "filelist test.php installed_as is not correct!\n";
-}
-if (isset($installer->pkginfo['filelist']['dirtree'])) {
- echo "filelist dirtree created\n";
-} else {
- echo "filelist dirtree not created!\n";
-}
-$p = $temp_path . DIRECTORY_SEPARATOR . 'tmp' . DIRECTORY_SEPARATOR .
- 'glomp';
-if (isset($installer->pkginfo['filelist']['dirtree'][$p])) {
- echo "filelist dirtree glomp created\n";
-} else {
- echo "filelist dirtree glomp not created!\n";
-}
-$p .= DIRECTORY_SEPARATOR . 'fromp';
-if (isset($installer->pkginfo['filelist']['dirtree'][$p])) {
- echo "filelist dirtree fromp created\n";
-} else {
- echo "filelist dirtree fromp not created!\n";
-}
-
-echo "Do valid addFileOperation() installed_as\n";
-$installer->addFileOperation('installed_as', array('test.php',
- $temp_path . DIRECTORY_SEPARATOR . 'tmp' . DIRECTORY_SEPARATOR .
- 'glomp' . DIRECTORY_SEPARATOR . 'fromp' . DIRECTORY_SEPARATOR
- . 'installertestfooblah.phpt',
- $temp_path . DIRECTORY_SEPARATOR . 'tmp' . DIRECTORY_SEPARATOR,
- 'glomp' . DIRECTORY_SEPARATOR . 'fromp'));
-echo "test valid rollbackFileTransaction():\n";
-$installer->rollbackFileTransaction();
-if (isset($installer->pkginfo['filelist'])) {
- echo "filelist created\n";
-} else {
- echo "filelist not created!\n";
-}
-if (isset($installer->pkginfo['filelist']['test.php'])) {
- echo "filelist test.php created\n";
-} else {
- echo "filelist test.php not created!\n";
-}
-if (isset($installer->pkginfo['filelist']['test.php']['installed_as'])) {
- echo "filelist test.php installed_as created\n";
-} else {
- echo "filelist test.php installed_as not created!\n";
-}
-$p = $temp_path . DIRECTORY_SEPARATOR . 'tmp' . DIRECTORY_SEPARATOR .
- 'glomp' . DIRECTORY_SEPARATOR . 'fromp' . DIRECTORY_SEPARATOR
- . 'installertestfooblah.phpt';
-if (@$installer->pkginfo['filelist']['test.php']['installed_as'] == $p) {
- echo "filelist test.php installed_as is correct\n";
-} else {
- echo "filelist test.php installed_as is not correct!\n";
-}
-if (isset($installer->pkginfo['filelist']['dirtree'])) {
- echo "filelist dirtree created\n";
-} else {
- echo "filelist dirtree not created!\n";
-}
-$p = $temp_path . DIRECTORY_SEPARATOR . 'tmp' . DIRECTORY_SEPARATOR .
- 'glomp';
-if (isset($installer->pkginfo['filelist']['dirtree'][$p])) {
- echo "filelist dirtree glomp created\n";
-} else {
- echo "filelist dirtree glomp not created!\n";
-}
-$p .= DIRECTORY_SEPARATOR . 'fromp';
-if (isset($installer->pkginfo['filelist']['dirtree'][$p])) {
- echo "filelist dirtree fromp created\n";
-} else {
- echo "filelist dirtree fromp not created!\n";
-}
-
-// invalid tests
-echo "\n==>Invalid tests\n";
-echo "Do valid addFileOperation() delete with non-existing file\n";
-$installer->addFileOperation('delete', array('gloober62456.phpt'));
-echo 'count($installer->file_operations) = ';
-var_dump(count($installer->file_operations));
-
-echo "test invalid commitFileTransaction():\n";
-if ($installer->commitFileTransaction()) {
- echo "worked\n";
-} else {
- echo "didn't work!\n";
- $installer->rollbackFileTransaction();
-}
-
-echo "Do valid addFileOperation() rename with non-existing file\n";
-$installer->addFileOperation('rename', array('gloober62456.phpt', 'faber.com'));
-echo 'count($installer->file_operations) = ';
-var_dump(count($installer->file_operations));
-
-echo "test invalid commitFileTransaction():\n";
-if ($installer->commitFileTransaction()) {
- echo "worked\n";
-} else {
- echo "didn't work!\n";
- $installer->rollbackFileTransaction();
-}
-
-echo "Do valid addFileOperation() chmod with non-existing file\n";
-$installer->addFileOperation('chmod', array(0640, 'faber.com'));
-echo 'count($installer->file_operations) = ';
-var_dump(count($installer->file_operations));
-
-echo "test invalid commitFileTransaction():\n";
-if ($installer->commitFileTransaction()) {
- echo "worked\n";
-} else {
- echo "didn't work!\n";
- $installer->rollbackFileTransaction();
-}
-
-//cleanup
-chdir($curdir);
-unlink ($temp_path . DIRECTORY_SEPARATOR . 'pear.conf');
-unlink ($temp_path . DIRECTORY_SEPARATOR . 'pear.ini');
-rmdir($temp_path . DIRECTORY_SEPARATOR . 'php');
-rmdir($temp_path . DIRECTORY_SEPARATOR . 'data');
-rmdir($temp_path . DIRECTORY_SEPARATOR . 'doc');
-rmdir($temp_path . DIRECTORY_SEPARATOR . 'test');
-rmdir($temp_path . DIRECTORY_SEPARATOR . 'script');
-rmdir($temp_path . DIRECTORY_SEPARATOR . 'ext');
-rmdir($temp_path . DIRECTORY_SEPARATOR . 'tmp');
-rmdir($temp_path . DIRECTORY_SEPARATOR . 'bin');
-rmdir($temp_path);
-?>
---EXPECT--
-test addFileOperation():
-invalid input to addFileOperation():
-Returned PEAR_Error? yes
-Internal Error: $data in addFileOperation must be an array, was integer
-count($installer->file_operations) = int(0)
-Do valid addFileOperation() delete
-count($installer->file_operations) = int(1)
-test valid commitFileTransaction():
-about to commit 1 file operations
-successfully committed 1 file operations
-worked
-Do valid addFileOperation() rename
-file renamed.phpt exists? no
-test valid commitFileTransaction():
-about to commit 1 file operations
-successfully committed 1 file operations
-worked
-file renamed.phpt exists? yes
-Do valid addFileOperation() chmod
-file permissions are: 776
-test valid commitFileTransaction():
-about to commit 1 file operations
-successfully committed 1 file operations
-worked
-file permissions are: 640
-Do valid addFileOperation() rmdir
-directory exists? yes
-test valid commitFileTransaction():
-about to commit 1 file operations
-successfully committed 1 file operations
-worked
-directory exists? no
-Do valid addFileOperation() installed_as
-test valid commitFileTransaction():
-about to commit 1 file operations
-successfully committed 1 file operations
-worked
-filelist created
-filelist test.php created
-filelist test.php installed_as created
-filelist test.php installed_as is correct
-filelist dirtree created
-filelist dirtree glomp created
-filelist dirtree fromp created
-Do valid addFileOperation() installed_as
-test valid rollbackFileTransaction():
-rolling back 1 file operations
-filelist created
-filelist test.php created
-filelist test.php installed_as not created!
-filelist test.php installed_as is not correct!
-filelist dirtree not created!
-filelist dirtree glomp not created!
-filelist dirtree fromp not created!
-
-==>Invalid tests
-Do valid addFileOperation() delete with non-existing file
-count($installer->file_operations) = int(1)
-test invalid commitFileTransaction():
-about to commit 1 file operations
-warning: file gloober62456.phpt doesn't exist, can't be deleted
-successfully committed 1 file operations
-worked
-Do valid addFileOperation() rename with non-existing file
-count($installer->file_operations) = int(1)
-test invalid commitFileTransaction():
-about to commit 1 file operations
-cannot rename file gloober62456.phpt, doesn't exist
-didn't work!
-rolling back 1 file operations
-Do valid addFileOperation() chmod with non-existing file
-count($installer->file_operations) = int(1)
-test invalid commitFileTransaction():
-about to commit 1 file operations
-permission denied (chmod): faber.com 640
-didn't work!
-rolling back 1 file operations
diff --git a/pear/tests/pear_installer4.phpt b/pear/tests/pear_installer4.phpt
deleted file mode 100644
index 593d38ad45..0000000000
--- a/pear/tests/pear_installer4.phpt
+++ /dev/null
@@ -1,266 +0,0 @@
---TEST--
-PEAR_Installer test #4: PEAR_Installer::install()
---SKIPIF--
-<?php
-if (!getenv('PHP_PEAR_RUNTESTS')) {
- echo 'skip';
-}
-?>
---FILE--
-<?php
-$temp_path = dirname(__FILE__) . DIRECTORY_SEPARATOR . 'testinstallertemp';
-if (!is_dir($temp_path)) {
- mkdir($temp_path);
-}
-if (!is_dir($temp_path . DIRECTORY_SEPARATOR . 'php')) {
- mkdir($temp_path . DIRECTORY_SEPARATOR . 'php');
-}
-if (!is_dir($temp_path . DIRECTORY_SEPARATOR . 'data')) {
- mkdir($temp_path . DIRECTORY_SEPARATOR . 'data');
-}
-if (!is_dir($temp_path . DIRECTORY_SEPARATOR . 'doc')) {
- mkdir($temp_path . DIRECTORY_SEPARATOR . 'doc');
-}
-if (!is_dir($temp_path . DIRECTORY_SEPARATOR . 'test')) {
- mkdir($temp_path . DIRECTORY_SEPARATOR . 'test');
-}
-if (!is_dir($temp_path . DIRECTORY_SEPARATOR . 'ext')) {
- mkdir($temp_path . DIRECTORY_SEPARATOR . 'ext');
-}
-if (!is_dir($temp_path . DIRECTORY_SEPARATOR . 'script')) {
- mkdir($temp_path . DIRECTORY_SEPARATOR . 'script');
-}
-if (!is_dir($temp_path . DIRECTORY_SEPARATOR . 'tmp')) {
- mkdir($temp_path . DIRECTORY_SEPARATOR . 'tmp');
-}
-if (!is_dir($temp_path . DIRECTORY_SEPARATOR . 'bin')) {
- mkdir($temp_path . DIRECTORY_SEPARATOR . 'bin');
-}
-// make the fake configuration - we'll use one of these and it should work
-$config = serialize(array('master_server' => 'pear.php.net',
- 'php_dir' => $temp_path . DIRECTORY_SEPARATOR . 'php',
- 'ext_dir' => $temp_path . DIRECTORY_SEPARATOR . 'ext',
- 'data_dir' => $temp_path . DIRECTORY_SEPARATOR . 'data',
- 'doc_dir' => $temp_path . DIRECTORY_SEPARATOR . 'doc',
- 'test_dir' => $temp_path . DIRECTORY_SEPARATOR . 'test',
- 'bin_dir' => $temp_path . DIRECTORY_SEPARATOR . 'bin',));
-touch($temp_path . DIRECTORY_SEPARATOR . 'pear.conf');
-$fp = fopen($temp_path . DIRECTORY_SEPARATOR . 'pear.conf', 'w');
-fwrite($fp, $config);
-fclose($fp);
-touch($temp_path . DIRECTORY_SEPARATOR . 'pear.ini');
-$fp = fopen($temp_path . DIRECTORY_SEPARATOR . 'pear.ini', 'w');
-fwrite($fp, $config);
-fclose($fp);
-
-putenv('PHP_PEAR_SYSCONF_DIR='.$temp_path);
-$home = getenv('HOME');
-if (!empty($home)) {
- // for PEAR_Config initialization
- putenv('HOME="'.$temp_path);
-}
-require_once "PEAR/Installer.php";
-
-// no UI is needed for these tests
-$ui = false;
-$installer = new PEAR_Installer($ui);
-$curdir = getcwd();
-chdir(dirname(__FILE__));
-
-PEAR::setErrorHandling(PEAR_ERROR_CALLBACK, 'catchit');
-
-$error_to_catch = false;
-function catchit($err)
-{
- global $error_to_catch;
- if ($error_to_catch) {
- if ($err->getMessage() == $error_to_catch) {
- $error_to_catch = false;
- echo "Caught expected error\n";
- return;
- }
- }
- echo "Caught error: " . $err->getMessage() . "\n";
-}
-
-echo "Test package.xml direct install:\n";
-$installer->install(dirname(__FILE__) . DIRECTORY_SEPARATOR . 'test-pkg6' . DIRECTORY_SEPARATOR . 'package.xml');
-$reg = &new PEAR_Registry($temp_path . DIRECTORY_SEPARATOR . 'php');
-var_dump($reg->listPackages());
-echo "zoorb.php exists? ";
-echo (file_exists($temp_path . DIRECTORY_SEPARATOR . 'php'
- . DIRECTORY_SEPARATOR . 'groob' . DIRECTORY_SEPARATOR . 'zoorb.php')) ? "yes\n" : "no\n";
-echo "goompness/Mopreeb.php exists? ";
-echo (file_exists($temp_path . DIRECTORY_SEPARATOR . 'php'
- . DIRECTORY_SEPARATOR . 'groob' . DIRECTORY_SEPARATOR . 'goompness'
- . DIRECTORY_SEPARATOR . 'Mopreeb.php')) ? "yes\n" : "no\n";
-echo "goompness/oggbrzitzkee.php exists? ";
-echo (file_exists($temp_path . DIRECTORY_SEPARATOR . 'php'
- . DIRECTORY_SEPARATOR . 'groob' . DIRECTORY_SEPARATOR . 'goompness'
- . DIRECTORY_SEPARATOR . 'oggbrzitzkee.php')) ? "yes\n" : "no\n";
-
-echo "Test conflicting files:\n";
-$installer->install(dirname(__FILE__) . DIRECTORY_SEPARATOR . 'test-pkg6' . DIRECTORY_SEPARATOR . 'conflictpackage.xml');
-
-echo "After uninstall:\n";
-$installer->uninstall('pkg6');
-var_dump($reg->listPackages());
-echo "zoorb.php exists? ";
-echo (file_exists($temp_path . DIRECTORY_SEPARATOR . 'php'
- . DIRECTORY_SEPARATOR . 'groob' . DIRECTORY_SEPARATOR . 'zoorb.php')) ? "yes\n" : "no\n";
-echo "goompness/Mopreeb.php exists? ";
-echo (file_exists($temp_path . DIRECTORY_SEPARATOR . 'php'
- . DIRECTORY_SEPARATOR . 'groob' . DIRECTORY_SEPARATOR . 'goompness'
- . DIRECTORY_SEPARATOR . 'Mopreeb.php')) ? "yes\n" : "no\n";
-echo "goompness/oggbrzitzkee.php exists? ";
-echo (file_exists($temp_path . DIRECTORY_SEPARATOR . 'php'
- . DIRECTORY_SEPARATOR . 'groob' . DIRECTORY_SEPARATOR . 'goompness'
- . DIRECTORY_SEPARATOR . 'oggbrzitzkee.php')) ? "yes\n" : "no\n";
-echo "goompness exists? ";
-echo (is_dir($temp_path . DIRECTORY_SEPARATOR . 'php'
- . DIRECTORY_SEPARATOR . 'groob' . DIRECTORY_SEPARATOR . 'goompness'))
- ? "yes\n" : "no\n";
-
-echo "Test .tgz install:\n";
-$installer->install(dirname(__FILE__) . DIRECTORY_SEPARATOR . 'test-pkg6' . DIRECTORY_SEPARATOR . 'pkg6-1.1.tgz');
-$reg = &new PEAR_Registry($temp_path . DIRECTORY_SEPARATOR . 'php');
-var_dump($reg->listPackages());
-echo "zoorb.php exists? ";
-echo (file_exists($temp_path . DIRECTORY_SEPARATOR . 'php'
- . DIRECTORY_SEPARATOR . 'groob' . DIRECTORY_SEPARATOR . 'zoorb.php')) ? "yes\n" : "no\n";
-echo "goompness/Mopreeb.php exists? ";
-echo (file_exists($temp_path . DIRECTORY_SEPARATOR . 'php'
- . DIRECTORY_SEPARATOR . 'groob' . DIRECTORY_SEPARATOR . 'goompness'
- . DIRECTORY_SEPARATOR . 'Mopreeb.php')) ? "yes\n" : "no\n";
-echo "goompness/oggbrzitzkee.php exists? ";
-echo (file_exists($temp_path . DIRECTORY_SEPARATOR . 'php'
- . DIRECTORY_SEPARATOR . 'groob' . DIRECTORY_SEPARATOR . 'goompness'
- . DIRECTORY_SEPARATOR . 'oggbrzitzkee.php')) ? "yes\n" : "no\n";
-echo "After uninstall:\n";
-$installer->uninstall('pkg6');
-var_dump($reg->listPackages());
-echo "zoorb.php exists? ";
-echo (file_exists($temp_path . DIRECTORY_SEPARATOR . 'php'
- . DIRECTORY_SEPARATOR . 'groob' . DIRECTORY_SEPARATOR . 'zoorb.php')) ? "yes\n" : "no\n";
-echo "goompness/Mopreeb.php exists? ";
-echo (file_exists($temp_path . DIRECTORY_SEPARATOR . 'php'
- . DIRECTORY_SEPARATOR . 'groob' . DIRECTORY_SEPARATOR . 'goompness'
- . DIRECTORY_SEPARATOR . 'Mopreeb.php')) ? "yes\n" : "no\n";
-echo "goompness/oggbrzitzkee.php exists? ";
-echo (file_exists($temp_path . DIRECTORY_SEPARATOR . 'php'
- . DIRECTORY_SEPARATOR . 'groob' . DIRECTORY_SEPARATOR . 'goompness'
- . DIRECTORY_SEPARATOR . 'oggbrzitzkee.php')) ? "yes\n" : "no\n";
-echo "goompness exists? ";
-echo (is_dir($temp_path . DIRECTORY_SEPARATOR . 'php'
- . DIRECTORY_SEPARATOR . 'groob' . DIRECTORY_SEPARATOR . 'goompness'))
- ? "yes\n" : "no\n";
-
-echo "Test invalid .tgz install:\n";
-$error_to_catch = 'unable to unpack ' . dirname(__FILE__) . DIRECTORY_SEPARATOR .
- 'test-pkg6' . DIRECTORY_SEPARATOR . 'invalidtgz.tgz';
-$installer->install(dirname(__FILE__) . DIRECTORY_SEPARATOR . 'test-pkg6' . DIRECTORY_SEPARATOR . 'invalidtgz.tgz');
-$reg = &new PEAR_Registry($temp_path . DIRECTORY_SEPARATOR . 'php');
-var_dump($reg->listPackages());
-echo "zoorb.php exists? ";
-echo (file_exists($temp_path . DIRECTORY_SEPARATOR . 'php'
- . DIRECTORY_SEPARATOR . 'groob' . DIRECTORY_SEPARATOR . 'zoorb.php')) ? "yes\n" : "no\n";
-echo "goompness/Mopreeb.php exists? ";
-echo (file_exists($temp_path . DIRECTORY_SEPARATOR . 'php'
- . DIRECTORY_SEPARATOR . 'groob' . DIRECTORY_SEPARATOR . 'goompness'
- . DIRECTORY_SEPARATOR . 'Mopreeb.php')) ? "yes\n" : "no\n";
-echo "goompness/oggbrzitzkee.php exists? ";
-echo (file_exists($temp_path . DIRECTORY_SEPARATOR . 'php'
- . DIRECTORY_SEPARATOR . 'groob' . DIRECTORY_SEPARATOR . 'goompness'
- . DIRECTORY_SEPARATOR . 'oggbrzitzkee.php')) ? "yes\n" : "no\n";
-
-echo "Test missing package.xml in .tgz install:\n";
-$installer->install(dirname(__FILE__) . DIRECTORY_SEPARATOR . 'test-pkg6' . DIRECTORY_SEPARATOR . 'nopackagexml.tgz');
-$reg = &new PEAR_Registry($temp_path . DIRECTORY_SEPARATOR . 'php');
-var_dump($reg->listPackages());
-echo "zoorb.php exists? ";
-echo (file_exists($temp_path . DIRECTORY_SEPARATOR . 'php'
- . DIRECTORY_SEPARATOR . 'groob' . DIRECTORY_SEPARATOR . 'zoorb.php')) ? "yes\n" : "no\n";
-echo "goompness/Mopreeb.php exists? ";
-echo (file_exists($temp_path . DIRECTORY_SEPARATOR . 'php'
- . DIRECTORY_SEPARATOR . 'groob' . DIRECTORY_SEPARATOR . 'goompness'
- . DIRECTORY_SEPARATOR . 'Mopreeb.php')) ? "yes\n" : "no\n";
-echo "goompness/oggbrzitzkee.php exists? ";
-echo (file_exists($temp_path . DIRECTORY_SEPARATOR . 'php'
- . DIRECTORY_SEPARATOR . 'groob' . DIRECTORY_SEPARATOR . 'goompness'
- . DIRECTORY_SEPARATOR . 'oggbrzitzkee.php')) ? "yes\n" : "no\n";
-
-chdir($curdir);
-cleanall($temp_path);
-
-// ------------------------------------------------------------------------- //
-
-function cleanall($dir)
-{
- $dp = opendir($dir);
- while ($ent = readdir($dp)) {
- if ($ent == '.' || $ent == '..') {
- continue;
- }
- if (is_dir($dir . DIRECTORY_SEPARATOR . $ent)) {
- cleanall($dir . DIRECTORY_SEPARATOR . $ent);
- } else {
- unlink($dir . DIRECTORY_SEPARATOR . $ent);
- }
- }
- closedir($dp);
- rmdir($dir);
-}
-?>
---EXPECT--
-Test package.xml direct install:
-array(1) {
- [0]=>
- string(4) "pkg6"
-}
-zoorb.php exists? yes
-goompness/Mopreeb.php exists? yes
-goompness/oggbrzitzkee.php exists? yes
-Test conflicting files:
-Caught error: pear::pkg6conflict: conflicting files found:
-groob\goompness\oggbrzitzkee.php (pkg6)
- groob\goompness\Mopreeb.php (pkg6)
-
-After uninstall:
-array(0) {
-}
-zoorb.php exists? no
-goompness/Mopreeb.php exists? no
-goompness/oggbrzitzkee.php exists? no
-goompness exists? no
-Test .tgz install:
-array(1) {
- [0]=>
- string(4) "pkg6"
-}
-zoorb.php exists? yes
-goompness/Mopreeb.php exists? yes
-goompness/oggbrzitzkee.php exists? yes
-After uninstall:
-array(0) {
-}
-zoorb.php exists? no
-goompness/Mopreeb.php exists? no
-goompness/oggbrzitzkee.php exists? no
-goompness exists? no
-Test invalid .tgz install:
-Caught error: Invalid checksum for file "<?xml version="1.0" encoding="ISO-8859-1" ?>
- <!DOCTYPE package SYSTEM "http://pear.php.net/dtd/" : 37649 calculated, 0 expected
-Caught expected error
-array(0) {
-}
-zoorb.php exists? no
-goompness/Mopreeb.php exists? no
-goompness/oggbrzitzkee.php exists? no
-Test missing package.xml in .tgz install:
-warning : you are using an archive with an old format
-Caught error: no package.xml file after extracting the archive
-array(0) {
-}
-zoorb.php exists? no
-goompness/Mopreeb.php exists? no
-goompness/oggbrzitzkee.php exists? no
diff --git a/pear/tests/pear_installer5.phpt b/pear/tests/pear_installer5.phpt
deleted file mode 100644
index 2996e2e6bf..0000000000
--- a/pear/tests/pear_installer5.phpt
+++ /dev/null
@@ -1,224 +0,0 @@
---TEST--
-PEAR_Installer test #5: test directory tracking/deletion of installation
---SKIPIF--
-<?php
-if (!getenv('PHP_PEAR_RUNTESTS')) {
- echo 'skip';
-}
-?>
---FILE--
-<?php
-$temp_path = dirname(__FILE__) . DIRECTORY_SEPARATOR . 'testinstallertemp';
-if (!is_dir($temp_path)) {
- mkdir($temp_path);
-}
-if (!is_dir($temp_path . DIRECTORY_SEPARATOR . 'php')) {
- mkdir($temp_path . DIRECTORY_SEPARATOR . 'php');
-}
-if (!is_dir($temp_path . DIRECTORY_SEPARATOR . 'data')) {
- mkdir($temp_path . DIRECTORY_SEPARATOR . 'data');
-}
-if (!is_dir($temp_path . DIRECTORY_SEPARATOR . 'doc')) {
- mkdir($temp_path . DIRECTORY_SEPARATOR . 'doc');
-}
-if (!is_dir($temp_path . DIRECTORY_SEPARATOR . 'test')) {
- mkdir($temp_path . DIRECTORY_SEPARATOR . 'test');
-}
-if (!is_dir($temp_path . DIRECTORY_SEPARATOR . 'ext')) {
- mkdir($temp_path . DIRECTORY_SEPARATOR . 'ext');
-}
-if (!is_dir($temp_path . DIRECTORY_SEPARATOR . 'script')) {
- mkdir($temp_path . DIRECTORY_SEPARATOR . 'script');
-}
-if (!is_dir($temp_path . DIRECTORY_SEPARATOR . 'tmp')) {
- mkdir($temp_path . DIRECTORY_SEPARATOR . 'tmp');
-}
-if (!is_dir($temp_path . DIRECTORY_SEPARATOR . 'bin')) {
- mkdir($temp_path . DIRECTORY_SEPARATOR . 'bin');
-}
-// make the fake configuration - we'll use one of these and it should work
-$config = serialize(array('master_server' => 'pear.php.net',
- 'php_dir' => $temp_path . DIRECTORY_SEPARATOR . 'php',
- 'ext_dir' => $temp_path . DIRECTORY_SEPARATOR . 'ext',
- 'data_dir' => $temp_path . DIRECTORY_SEPARATOR . 'data',
- 'doc_dir' => $temp_path . DIRECTORY_SEPARATOR . 'doc',
- 'test_dir' => $temp_path . DIRECTORY_SEPARATOR . 'test',
- 'bin_dir' => $temp_path . DIRECTORY_SEPARATOR . 'bin',));
-touch($temp_path . DIRECTORY_SEPARATOR . 'pear.conf');
-$fp = fopen($temp_path . DIRECTORY_SEPARATOR . 'pear.conf', 'w');
-fwrite($fp, $config);
-fclose($fp);
-touch($temp_path . DIRECTORY_SEPARATOR . 'pear.ini');
-$fp = fopen($temp_path . DIRECTORY_SEPARATOR . 'pear.ini', 'w');
-fwrite($fp, $config);
-fclose($fp);
-
-putenv('PHP_PEAR_SYSCONF_DIR='.$temp_path);
-$home = getenv('HOME');
-if (!empty($home)) {
- // for PEAR_Config initialization
- putenv('HOME="'.$temp_path);
-}
-require_once "PEAR/Installer.php";
-
-// no UI is needed for these tests
-$ui = false;
-$installer = new PEAR_Installer($ui);
-$curdir = getcwd();
-chdir(dirname(__FILE__));
-
-PEAR::setErrorHandling(PEAR_ERROR_CALLBACK, 'catchit');
-
-$error_to_catch = false;
-function catchit($err)
-{
- global $error_to_catch;
- if ($error_to_catch) {
- if ($err->getMessage() == $error_to_catch) {
- $error_to_catch = false;
- echo "Caught expected error\n";
- return;
- }
- }
- echo "Caught error: " . $err->getMessage() . "\n";
-}
-
-$installer->install(dirname(__FILE__) . DIRECTORY_SEPARATOR . 'dirtree' . DIRECTORY_SEPARATOR . 'package.xml');
-$installer->install(dirname(__FILE__) . DIRECTORY_SEPARATOR . 'dirtree' . DIRECTORY_SEPARATOR . 'package2.xml');
-$reg = &new PEAR_Registry($temp_path . DIRECTORY_SEPARATOR . 'php');
-var_dump($reg->listPackages());
-$info = $reg->packageInfo('pkg1');
-echo "pkg1 dir tree contains test/? ";
-echo (isset($info['filelist']['dirtree'][$temp_path . DIRECTORY_SEPARATOR . 'php'
- . DIRECTORY_SEPARATOR . 'test'])) ? "yes\n" : "no\n";
-echo "pkg1 dir tree contains test/multiplepackages? ";
-echo (isset($info['filelist']['dirtree'][$temp_path . DIRECTORY_SEPARATOR . 'php'
- . DIRECTORY_SEPARATOR . 'test' . DIRECTORY_SEPARATOR . 'multiplepackages'])) ? "yes\n" : "no\n";
-echo "pkg1 dir tree contains test/pkg1? ";
-echo (isset($info['filelist']['dirtree'][$temp_path . DIRECTORY_SEPARATOR . 'php'
- . DIRECTORY_SEPARATOR . 'test' . DIRECTORY_SEPARATOR . 'pkg1'])) ? "yes\n" : "no\n";
-
-$info = $reg->packageInfo('pkg2');
-echo "pkg2 dir tree contains test/? ";
-echo (isset($info['filelist']['dirtree'][$temp_path . DIRECTORY_SEPARATOR . 'php'
- . DIRECTORY_SEPARATOR . 'test'])) ? "yes\n" : "no\n";
-echo "pkg2 dir tree contains test/multiplepackages? ";
-echo (isset($info['filelist']['dirtree'][$temp_path . DIRECTORY_SEPARATOR . 'php'
- . DIRECTORY_SEPARATOR . 'test' . DIRECTORY_SEPARATOR . 'multiplepackages'])) ? "yes\n" : "no\n";
-echo "pkg2 dir tree contains test/nestedroot? ";
-echo (isset($info['filelist']['dirtree'][$temp_path . DIRECTORY_SEPARATOR . 'php'
- . DIRECTORY_SEPARATOR . 'test' . DIRECTORY_SEPARATOR . 'nestedroot'])) ? "yes\n" : "no\n";
-echo "pkg2 dir tree contains test/nestedroot/emptydir? ";
-echo (isset($info['filelist']['dirtree'][$temp_path . DIRECTORY_SEPARATOR . 'php'
- . DIRECTORY_SEPARATOR . 'test' . DIRECTORY_SEPARATOR . 'nestedroot'
- . DIRECTORY_SEPARATOR . 'emptydir'])) ? "yes\n" : "no\n";
-echo "pkg2 dir tree contains test/nestedroot/emptydir/nesteddir? ";
-echo (isset($info['filelist']['dirtree'][$temp_path . DIRECTORY_SEPARATOR . 'php'
- . DIRECTORY_SEPARATOR . 'test' . DIRECTORY_SEPARATOR . 'nestedroot'
- . DIRECTORY_SEPARATOR . 'emptydir' . DIRECTORY_SEPARATOR . 'nesteddir'])) ? "yes\n" : "no\n";
-
-echo "After uninstall of pkg1:\n";
-$installer->uninstall('pkg1');
-echo "test/ exists? ";
-echo (is_dir($temp_path . DIRECTORY_SEPARATOR . 'php'
- . DIRECTORY_SEPARATOR . 'test')) ? "yes\n" : "no\n";
-echo "test/multiplepackages exists? ";
-echo (is_dir($temp_path . DIRECTORY_SEPARATOR . 'php'
- . DIRECTORY_SEPARATOR . 'test' . DIRECTORY_SEPARATOR . 'multiplepackages')) ? "yes\n" : "no\n";
-echo "test/pkg1 exists? ";
-echo (is_dir($temp_path . DIRECTORY_SEPARATOR . 'php'
- . DIRECTORY_SEPARATOR . 'test' . DIRECTORY_SEPARATOR . 'pkg1')) ? "yes\n" : "no\n";
-echo "test/nestedroot exists? ";
-echo (is_dir($temp_path . DIRECTORY_SEPARATOR . 'php'
- . DIRECTORY_SEPARATOR . 'test' . DIRECTORY_SEPARATOR . 'nestedroot')) ? "yes\n" : "no\n";
-echo "test/nestedroot/emptydir exists? ";
-echo (is_dir($temp_path . DIRECTORY_SEPARATOR . 'php'
- . DIRECTORY_SEPARATOR . 'test' . DIRECTORY_SEPARATOR . 'nestedroot'
- . DIRECTORY_SEPARATOR . 'emptydir')) ? "yes\n" : "no\n";
-echo "test/nestedroot/emptydir/nesteddir exists? ";
-echo (is_dir($temp_path . DIRECTORY_SEPARATOR . 'php'
- . DIRECTORY_SEPARATOR . 'test' . DIRECTORY_SEPARATOR . 'nestedroot'
- . DIRECTORY_SEPARATOR . 'emptydir'. DIRECTORY_SEPARATOR . 'nesteddir')) ? "yes\n" : "no\n";
-var_dump($reg->listPackages());
-
-echo "After uninstall of pkg2:\n";
-$installer->uninstall('pkg2');
-echo "test/ exists? ";
-echo (is_dir($temp_path . DIRECTORY_SEPARATOR . 'php'
- . DIRECTORY_SEPARATOR . 'test')) ? "yes\n" : "no\n";
-echo "test/multiplepackages exists? ";
-echo (is_dir($temp_path . DIRECTORY_SEPARATOR . 'php'
- . DIRECTORY_SEPARATOR . 'test' . DIRECTORY_SEPARATOR . 'multiplepackages')) ? "yes\n" : "no\n";
-echo "test/pkg1 exists? ";
-echo (is_dir($temp_path . DIRECTORY_SEPARATOR . 'php'
- . DIRECTORY_SEPARATOR . 'test' . DIRECTORY_SEPARATOR . 'pkg1')) ? "yes\n" : "no\n";
-echo "test/nestedroot exists? ";
-echo (is_dir($temp_path . DIRECTORY_SEPARATOR . 'php'
- . DIRECTORY_SEPARATOR . 'test' . DIRECTORY_SEPARATOR . 'nestedroot')) ? "yes\n" : "no\n";
-echo "test/nestedroot/emptydir exists? ";
-echo (is_dir($temp_path . DIRECTORY_SEPARATOR . 'php'
- . DIRECTORY_SEPARATOR . 'test' . DIRECTORY_SEPARATOR . 'nestedroot'
- . DIRECTORY_SEPARATOR . 'emptydir')) ? "yes\n" : "no\n";
-echo "test/nestedroot/emptydir/nesteddir exists? ";
-echo (is_dir($temp_path . DIRECTORY_SEPARATOR . 'php'
- . DIRECTORY_SEPARATOR . 'test' . DIRECTORY_SEPARATOR . 'nestedroot'
- . DIRECTORY_SEPARATOR . 'emptydir'. DIRECTORY_SEPARATOR . 'nesteddir')) ? "yes\n" : "no\n";
-var_dump($reg->listPackages());
-
-chdir($curdir);
-cleanall($temp_path);
-
-// ------------------------------------------------------------------------- //
-
-function cleanall($dir)
-{
- $dp = opendir($dir);
- while ($ent = readdir($dp)) {
- if ($ent == '.' || $ent == '..') {
- continue;
- }
- if (is_dir($dir . DIRECTORY_SEPARATOR . $ent)) {
- cleanall($dir . DIRECTORY_SEPARATOR . $ent);
- } else {
- unlink($dir . DIRECTORY_SEPARATOR . $ent);
- }
- }
- closedir($dp);
- rmdir($dir);
-}
-?>
---EXPECT--
-array(2) {
- [0]=>
- string(4) "pkg1"
- [1]=>
- string(4) "pkg2"
-}
-pkg1 dir tree contains test/? yes
-pkg1 dir tree contains test/multiplepackages? yes
-pkg1 dir tree contains test/pkg1? yes
-pkg2 dir tree contains test/? yes
-pkg2 dir tree contains test/multiplepackages? yes
-pkg2 dir tree contains test/nestedroot? yes
-pkg2 dir tree contains test/nestedroot/emptydir? yes
-pkg2 dir tree contains test/nestedroot/emptydir/nesteddir? yes
-After uninstall of pkg1:
-test/ exists? yes
-test/multiplepackages exists? yes
-test/pkg1 exists? no
-test/nestedroot exists? yes
-test/nestedroot/emptydir exists? yes
-test/nestedroot/emptydir/nesteddir exists? yes
-array(1) {
- [0]=>
- string(4) "pkg2"
-}
-After uninstall of pkg2:
-test/ exists? no
-test/multiplepackages exists? no
-test/pkg1 exists? no
-test/nestedroot exists? no
-test/nestedroot/emptydir exists? no
-test/nestedroot/emptydir/nesteddir exists? no
-array(0) {
-} \ No newline at end of file
diff --git a/pear/tests/pear_installer_installFile_channels.phpt b/pear/tests/pear_installer_installFile_channels.phpt
deleted file mode 100644
index 376b3c5306..0000000000
--- a/pear/tests/pear_installer_installFile_channels.phpt
+++ /dev/null
@@ -1,447 +0,0 @@
---TEST--
-PEAR_Installer test _installFile() with channels
---SKIPIF--
-<?php
-if (!getenv('PHP_PEAR_RUNTESTS')) {
- echo 'skip';
-}
-?>
---FILE--
-<?php
-$temp_path = dirname(__FILE__) . DIRECTORY_SEPARATOR . 'testinstallertemp';
-if (!is_dir($temp_path)) {
- mkdir($temp_path);
-}
-if (!is_dir($temp_path . DIRECTORY_SEPARATOR . 'php')) {
- mkdir($temp_path . DIRECTORY_SEPARATOR . 'php');
-}
-if (!is_dir($temp_path . DIRECTORY_SEPARATOR . 'data')) {
- mkdir($temp_path . DIRECTORY_SEPARATOR . 'data');
-}
-if (!is_dir($temp_path . DIRECTORY_SEPARATOR . 'doc')) {
- mkdir($temp_path . DIRECTORY_SEPARATOR . 'doc');
-}
-if (!is_dir($temp_path . DIRECTORY_SEPARATOR . 'test')) {
- mkdir($temp_path . DIRECTORY_SEPARATOR . 'test');
-}
-if (!is_dir($temp_path . DIRECTORY_SEPARATOR . 'ext')) {
- mkdir($temp_path . DIRECTORY_SEPARATOR . 'ext');
-}
-if (!is_dir($temp_path . DIRECTORY_SEPARATOR . 'script')) {
- mkdir($temp_path . DIRECTORY_SEPARATOR . 'script');
-}
-if (!is_dir($temp_path . DIRECTORY_SEPARATOR . 'tmp')) {
- mkdir($temp_path . DIRECTORY_SEPARATOR . 'tmp');
-}
-if (!is_dir($temp_path . DIRECTORY_SEPARATOR . 'bin')) {
- mkdir($temp_path . DIRECTORY_SEPARATOR . 'bin');
-}
-// make the fake configuration - we'll use one of these and it should work
-$config = serialize(array('master_server' => 'pear.php.net',
- 'default_channel' => 'pear',
- 'php_dir' => $temp_path . DIRECTORY_SEPARATOR . 'php',
- 'ext_dir' => $temp_path . DIRECTORY_SEPARATOR . 'ext',
- 'data_dir' => $temp_path . DIRECTORY_SEPARATOR . 'data',
- 'doc_dir' => $temp_path . DIRECTORY_SEPARATOR . 'doc',
- 'test_dir' => $temp_path . DIRECTORY_SEPARATOR . 'tests',
- 'bin_dir' => $temp_path . DIRECTORY_SEPARATOR . 'bin',
- '__channels' =>
- array(
- 'test' => array(
- 'php_dir' => $temp_path . DIRECTORY_SEPARATOR . 'php' . DIRECTORY_SEPARATOR . 'test',
- 'ext_dir' => $temp_path . DIRECTORY_SEPARATOR . 'ext' . DIRECTORY_SEPARATOR . 'test',
- 'data_dir' => $temp_path . DIRECTORY_SEPARATOR . 'data' . DIRECTORY_SEPARATOR . 'test',
- 'doc_dir' => $temp_path . DIRECTORY_SEPARATOR . 'doc' . DIRECTORY_SEPARATOR . 'test',
- 'test_dir' => $temp_path . DIRECTORY_SEPARATOR . 'test' . DIRECTORY_SEPARATOR . 'tests',
- 'bin_dir' => $temp_path . DIRECTORY_SEPARATOR . 'bin' . DIRECTORY_SEPARATOR . 'test',
- ),
- )));
-touch($temp_path . DIRECTORY_SEPARATOR . 'pear.conf');
-$fp = fopen($temp_path . DIRECTORY_SEPARATOR . 'pear.conf', 'w');
-fwrite($fp, $config);
-fclose($fp);
-touch($temp_path . DIRECTORY_SEPARATOR . 'pear.ini');
-$fp = fopen($temp_path . DIRECTORY_SEPARATOR . 'pear.ini', 'w');
-fwrite($fp, $config);
-fclose($fp);
-
-putenv('PHP_PEAR_SYSCONF_DIR='.$temp_path);
-$home = getenv('HOME');
-if (!empty($home)) {
- // for PEAR_Config initialization
- putenv('HOME="'.$temp_path);
-}
-require_once 'PEAR/Config.php';
-$config = &PEAR_Config::singleton($temp_path . DIRECTORY_SEPARATOR . 'pear.ini');
-require_once 'PEAR/Registry.php';
-$reg = &new PEAR_Registry($config->get('php_dir', null, 'pear'));
-require_once 'PEAR/ChannelFile.php';
-$chan = new PEAR_ChannelFile;
-$chan->setName('test');
-$chan->setServer('test');
-$chan->setSummary('test');
-$reg->addChannel($chan);
-require_once "PEAR/Installer.php";
-
-// no UI is needed for these tests
-$ui = false;
-$installer = new PEAR_Installer($ui);
-$curdir = getcwd();
-chdir(dirname(__FILE__));
-
-echo "test _installFile():\n";
-$fp = fopen($temp_path . DIRECTORY_SEPARATOR . 'tmp' . DIRECTORY_SEPARATOR . 'installer2.phpt.testfile.php', 'w');
-fwrite($fp, 'a');
-fclose($fp);
-// pretend we just parsed a package.xml
-$installer->pkginfo = array('package' => 'Foo', 'channel' => 'test');
-
-echo "install as role=\"php\":\n";
-var_dump($installer->_installFile('installer2.phpt.testfile.php', array('role' => 'php'),
- $temp_path . DIRECTORY_SEPARATOR . 'tmp', array()));
-echo 'file php/test/.tmpinstaller2.phpt.testfile.php exists? => ';
-echo (file_exists($temp_path . DIRECTORY_SEPARATOR . 'php' . DIRECTORY_SEPARATOR . 'test' .
- DIRECTORY_SEPARATOR .
- '.tmpinstaller2.phpt.testfile.php') ? "yes\n" : "no\n");
-
-echo "install as role=\"ext\":\n";
-var_dump($installer->_installFile('installer2.phpt.testfile.php', array('role' => 'ext'),
- $temp_path . DIRECTORY_SEPARATOR . 'tmp', array()));
-echo 'file ext/test/.tmpinstaller2.phpt.testfile.php exists? => ';
-echo (file_exists($temp_path . DIRECTORY_SEPARATOR . 'ext' . DIRECTORY_SEPARATOR . 'test'
- . DIRECTORY_SEPARATOR .
- '.tmpinstaller2.phpt.testfile.php') ? "yes\n" : "no\n");
-
-echo "install as role=\"data\":\n";
-var_dump($installer->_installFile('installer2.phpt.testfile.php', array('role' => 'data'),
- $temp_path . DIRECTORY_SEPARATOR . 'tmp', array()));
-echo 'file data/test/.tmpinstaller2.phpt.testfile.php exists? => ';
-echo (file_exists($temp_path . DIRECTORY_SEPARATOR . 'data' . DIRECTORY_SEPARATOR . 'test'
- . DIRECTORY_SEPARATOR .
- 'Foo' . DIRECTORY_SEPARATOR . '.tmpinstaller2.phpt.testfile.php') ? "yes\n" : "no\n");
-
-echo "install as role=\"doc\":\n";
-var_dump($installer->_installFile('installer2.phpt.testfile.php', array('role' => 'doc'),
- $temp_path . DIRECTORY_SEPARATOR . 'tmp', array()));
-echo 'file doc/test/.tmpinstaller2.phpt.testfile.php exists? => ';
-echo (file_exists($temp_path . DIRECTORY_SEPARATOR . 'doc' . DIRECTORY_SEPARATOR . 'test'
- . DIRECTORY_SEPARATOR .
- 'Foo' . DIRECTORY_SEPARATOR . '.tmpinstaller2.phpt.testfile.php') ? "yes\n" : "no\n");
-
-echo "install as role=\"test\":\n";
-var_dump($installer->_installFile('installer2.phpt.testfile.php', array('role' => 'test'),
- $temp_path . DIRECTORY_SEPARATOR . 'tmp', array()));
-echo 'file test/tests/.tmpinstaller2.phpt.testfile.php exists? => ';
-echo (file_exists($temp_path . DIRECTORY_SEPARATOR . 'test' . DIRECTORY_SEPARATOR . 'tests'
- . DIRECTORY_SEPARATOR .
- 'Foo' . DIRECTORY_SEPARATOR . '.tmpinstaller2.phpt.testfile.php') ? "yes\n" : "no\n");
-
-echo "install as role=\"script\":\n";
-var_dump($installer->_installFile('installer2.phpt.testfile.php', array('role' => 'script'),
- $temp_path . DIRECTORY_SEPARATOR . 'tmp', array()));
-echo 'file bin/test/.tmpinstaller2.phpt.testfile.php exists? => ';
-echo (file_exists($temp_path . DIRECTORY_SEPARATOR . 'bin' . DIRECTORY_SEPARATOR . 'test'
- . DIRECTORY_SEPARATOR .
- '.tmpinstaller2.phpt.testfile.php') ? "yes\n" : "no\n");
-
-$installer->rollbackFileTransaction();
-
-echo "install as invalid role=\"klingon\":\n";
-$err = $installer->_installFile('installer2.phpt.testfile.php', array('role' => 'klingon'),
- $temp_path . DIRECTORY_SEPARATOR . 'tmp', array());
-echo 'returned PEAR_Error: ' . (get_class($err) == 'pear_error' ? "yes\n" : "no\n");
-if (is_object($err)) {
- echo 'message: ' . $err->getMessage() . "\n\n";
-}
-echo 'file bin/test/.tmpinstaller2.phpt.testfile.php exists? => ';
-echo (file_exists($temp_path . DIRECTORY_SEPARATOR . 'bin' . DIRECTORY_SEPARATOR . 'test'
- . DIRECTORY_SEPARATOR .
- '.tmpinstaller2.phpt.testfile.php') ? "yes\n" : "no\n");
-
-echo "install non-existent file:\n";
-$err = $installer->_installFile('....php', array('role' => 'php'),
- $temp_path . DIRECTORY_SEPARATOR . 'tmp', array());
-echo 'returned PEAR_Error: ' . (get_class($err) == 'pear_error' ? "yes\n" : "no\n");
-if (is_object($err)) {
- echo 'message: ' . $err->getMessage() . "\n";
-}
-echo 'file php/test/.tmp....php exists? => ';
-echo (file_exists($temp_path . DIRECTORY_SEPARATOR . 'php' . DIRECTORY_SEPARATOR . 'test'
- . DIRECTORY_SEPARATOR .
- '.tmp....php') ? "yes\n" : "no\n");
-
-$fp = fopen($temp_path . DIRECTORY_SEPARATOR . 'tmp' . DIRECTORY_SEPARATOR . 'installer2.phpt.testfile.php', 'w');
-fwrite($fp, '@TEST@ stuff');
-fclose($fp);
-
-echo "\ntest valid md5sum:\n";
-var_dump($installer->_installFile('installer2.phpt.testfile.php', array('role' => 'script', 'md5sum' => md5('@TEST@ stuff')),
- $temp_path . DIRECTORY_SEPARATOR . 'tmp', array()));
-echo 'file bin/test/.tmpinstaller2.phpt.testfile.php exists? => ';
-echo (file_exists($temp_path . DIRECTORY_SEPARATOR . 'bin' . DIRECTORY_SEPARATOR . 'test'
- . DIRECTORY_SEPARATOR .
- '.tmpinstaller2.phpt.testfile.php') ? "yes\n" : "no\n");
-
-$installer->rollbackFileTransaction();
-
-echo "test invalid md5sum:\n";
-$err = $installer->_installFile('installer2.phpt.testfile.php', array('role' => 'script', 'md5sum' => md5('oops stuff')),
- $temp_path . DIRECTORY_SEPARATOR . 'tmp', array());
-echo 'returned PEAR_Error: ' . (get_class($err) == 'pear_error' ? "yes\n" : "no\n");
-if (is_object($err)) {
- echo 'message: ' . ($err->getMessage() == 'bad md5sum for file ' . $temp_path . DIRECTORY_SEPARATOR . 'bin' .
- DIRECTORY_SEPARATOR . 'test'
- . DIRECTORY_SEPARATOR . 'installer2.phpt.testfile.php' ? 'match' : 'no match') . "\n";
-}
-echo 'file bin/test/.tmpinstaller2.phpt.testfile.php exists? => ';
-echo (file_exists($temp_path . DIRECTORY_SEPARATOR . 'bin' . DIRECTORY_SEPARATOR . 'test'
- . DIRECTORY_SEPARATOR .
- '.tmpinstaller2.phpt.testfile.php') ? "yes\n" : "no\n");
-
-echo "test invalid md5sum with --force:\n";
-ob_start();
-$err = $installer->_installFile('installer2.phpt.testfile.php', array('role' => 'script', 'md5sum' => md5('oops stuff')),
- $temp_path . DIRECTORY_SEPARATOR . 'tmp', array('force' => true));
-$warning = ob_get_contents();
-ob_end_clean();
-echo 'warning : ';
-echo ($warning == 'warning : bad md5sum for file ' . $temp_path . DIRECTORY_SEPARATOR . 'bin' .
- DIRECTORY_SEPARATOR . 'test'
- . DIRECTORY_SEPARATOR . "installer2.phpt.testfile.php\n" ? "match\n" : "no match\n");
-echo 'returned PEAR_Error: ' . (get_class($err) == 'pear_error' ? "yes\n" : "no\n");
-if (is_object($err)) {
- echo 'message: ' . ($err->getMessage() == 'bad md5sum for file ' . $temp_path . DIRECTORY_SEPARATOR . 'bin' .
- DIRECTORY_SEPARATOR . 'test'
- . DIRECTORY_SEPARATOR . 'installer2.phpt.testfile.php' ? 'match' : 'no match') . "\n";
-}
-echo 'file bin/test/.tmpinstaller2.phpt.testfile.php exists? => ';
-echo (file_exists($temp_path . DIRECTORY_SEPARATOR . 'bin' . DIRECTORY_SEPARATOR . 'test'
- . DIRECTORY_SEPARATOR .
- '.tmpinstaller2.phpt.testfile.php') ? "yes\n" : "no\n");
-
-define('PEARINSTALLERTEST2_FAKE_FOO_CONST', 'good');
-echo "\ntest replacements:\n";
-var_dump($installer->_installFile('installer2.phpt.testfile.php', array('role' => 'script',
- 'replacements' => array(array('type' => 'php-const', 'from' => '@TEST@', 'to' => 'PEARINSTALLERTEST2_FAKE_FOO_CONST'))),
- $temp_path . DIRECTORY_SEPARATOR . 'tmp', array()));
-echo "==>test php-const replacement: equals 'good stuff'? => ";
-if (file_exists($temp_path . DIRECTORY_SEPARATOR . 'bin' . DIRECTORY_SEPARATOR . 'test'
- . DIRECTORY_SEPARATOR .
- '.tmpinstaller2.phpt.testfile.php'))
-{
- $a = implode(file($temp_path . DIRECTORY_SEPARATOR . 'bin' . DIRECTORY_SEPARATOR . 'test'
- . DIRECTORY_SEPARATOR .
- '.tmpinstaller2.phpt.testfile.php'), '');
- echo "$a\n";
-} else {
- echo "no! file installation failed\n";
-}
-$installer->rollbackFileTransaction();
-
-echo "==>test invalid php-const replacement:\n";
-$err = $installer->_installFile('installer2.phpt.testfile.php', array('role' => 'script',
- 'replacements' => array(array('type' => 'php-const', 'from' => '@TEST@', 'to' => '%PEARINSTALLERTEST2_FAKE_FOO_CONST'))),
- $temp_path . DIRECTORY_SEPARATOR . 'tmp', array());
-if (file_exists($temp_path . DIRECTORY_SEPARATOR . 'bin' . DIRECTORY_SEPARATOR . 'test'
- . DIRECTORY_SEPARATOR .
- '.tmpinstaller2.phpt.testfile.php'))
-{
- $a = implode(file($temp_path . DIRECTORY_SEPARATOR . 'bin' . DIRECTORY_SEPARATOR . 'test'
- . DIRECTORY_SEPARATOR .
- '.tmpinstaller2.phpt.testfile.php'), '');
- echo "$a\n";
-} else {
- echo "no! file installation failed\n";
-}
-
-$installer->rollbackFileTransaction();
-
-var_dump($installer->_installFile('installer2.phpt.testfile.php', array('role' => 'script',
- 'replacements' => array(array('type' => 'pear-config', 'from' => '@TEST@', 'to' => 'master_server'))),
- $temp_path . DIRECTORY_SEPARATOR . 'tmp', array()));
-echo "==>test pear-config replacement: equals 'test stuff'? => ";
-if (file_exists($temp_path . DIRECTORY_SEPARATOR . 'bin' . DIRECTORY_SEPARATOR . 'test'
- . DIRECTORY_SEPARATOR .
- '.tmpinstaller2.phpt.testfile.php'))
-{
- $a = implode(file($temp_path . DIRECTORY_SEPARATOR . 'bin' . DIRECTORY_SEPARATOR . 'test'
- . DIRECTORY_SEPARATOR .
- '.tmpinstaller2.phpt.testfile.php'), '');
- echo "$a\n";
-} else {
- echo "no! file installation failed\n";
-}
-$installer->rollbackFileTransaction();
-
-echo "==>test invalid pear-config replacement\n";
-var_dump($installer->_installFile('installer2.phpt.testfile.php', array('role' => 'script',
- 'replacements' => array(array('type' => 'pear-config', 'from' => '@TEST@', 'to' => 'blahblahblah'))),
- $temp_path . DIRECTORY_SEPARATOR . 'tmp', array()));
-if (file_exists($temp_path . DIRECTORY_SEPARATOR . 'bin' . DIRECTORY_SEPARATOR . 'test'
- . DIRECTORY_SEPARATOR .
- '.tmpinstaller2.phpt.testfile.php'))
-{
- $a = implode(file($temp_path . DIRECTORY_SEPARATOR . 'bin' . DIRECTORY_SEPARATOR . 'test'
- . DIRECTORY_SEPARATOR .
- '.tmpinstaller2.phpt.testfile.php'), '');
- echo "$a\n";
-} else {
- echo "no! file installation failed\n";
-}
-$installer->rollbackFileTransaction();
-
-var_dump($installer->_installFile('installer2.phpt.testfile.php', array('role' => 'script',
- 'replacements' => array(array('type' => 'package-info', 'from' => '@TEST@', 'to' => 'package'))),
- $temp_path . DIRECTORY_SEPARATOR . 'tmp', array()));
-echo "==>test package-info replacement: equals 'Foo stuff'? => ";
-if (file_exists($temp_path . DIRECTORY_SEPARATOR . 'bin' . DIRECTORY_SEPARATOR . 'test'
- . DIRECTORY_SEPARATOR .
- '.tmpinstaller2.phpt.testfile.php'))
-{
- $a = implode(file($temp_path . DIRECTORY_SEPARATOR . 'bin' . DIRECTORY_SEPARATOR . 'test'
- . DIRECTORY_SEPARATOR .
- '.tmpinstaller2.phpt.testfile.php'), '');
- echo "$a\n";
-} else {
- echo "no! file installation failed\n";
-}
-$installer->rollbackFileTransaction();
-
-echo "==>test invalid package-info replacement:\n";
-var_dump($installer->_installFile('installer2.phpt.testfile.php', array('role' => 'script',
- 'replacements' => array(array('type' => 'package-info', 'from' => '@TEST@', 'to' => 'gronk'))),
- $temp_path . DIRECTORY_SEPARATOR . 'tmp', array()));
-if (file_exists($temp_path . DIRECTORY_SEPARATOR . 'bin' . DIRECTORY_SEPARATOR . 'test'
- . DIRECTORY_SEPARATOR .
- '.tmpinstaller2.phpt.testfile.php'))
-{
- $a = implode(file($temp_path . DIRECTORY_SEPARATOR . 'bin' . DIRECTORY_SEPARATOR . 'test'
- . DIRECTORY_SEPARATOR .
- '.tmpinstaller2.phpt.testfile.php'), '');
- echo "$a\n";
-} else {
- echo "no! file installation failed\n";
-}
-$installer->rollbackFileTransaction();
-
-echo "\ntest install-as:\n";
-var_dump($installer->_installFile('installer2.phpt.testfile.php', array('role' => 'script',
- 'install-as' => 'foobar.php'),
- $temp_path . DIRECTORY_SEPARATOR . 'tmp', array()));
-echo "==>test install as 'foobar.php'. file exists? ";
-if (file_exists($temp_path . DIRECTORY_SEPARATOR . 'bin' . DIRECTORY_SEPARATOR . 'test'
- . DIRECTORY_SEPARATOR .
- '.tmpfoobar.php'))
-{
- echo "yes\n";
-} else {
- echo "no\n";
-}
-$installer->rollbackFileTransaction();
-
-echo "\ntest baseinstalldir:\n";
-var_dump($installer->_installFile('installer2.phpt.testfile.php', array('role' => 'script',
- 'baseinstalldir' => 'Foo/Mine'),
- $temp_path . DIRECTORY_SEPARATOR . 'tmp', array()));
-echo "==>test baseinstalldir = 'Foo/Mine'. file exists? ";
-if (file_exists($temp_path . DIRECTORY_SEPARATOR . 'bin' . DIRECTORY_SEPARATOR . 'test'
- . DIRECTORY_SEPARATOR .
- 'Foo' . DIRECTORY_SEPARATOR . 'Mine' . DIRECTORY_SEPARATOR . '.tmpinstaller2.phpt.testfile.php'))
-{
- echo "yes\n";
-} else {
- echo "no\n";
-}
-$installer->rollbackFileTransaction();
-
-//cleanup
-chdir($curdir);
-cleanall($temp_path);
-function cleanall($dir)
-{
- $dp = opendir($dir);
- while ($ent = readdir($dp)) {
- if ($ent == '.' || $ent == '..') {
- continue;
- }
- if (is_dir($dir . DIRECTORY_SEPARATOR . $ent)) {
- cleanall($dir . DIRECTORY_SEPARATOR . $ent);
- } else {
- unlink($dir . DIRECTORY_SEPARATOR . $ent);
- }
- }
- closedir($dp);
- rmdir($dir);
-}
-?>
---GET--
---POST--
---EXPECT--
-test _installFile():
-install as role="php":
-int(1)
-file php/test/.tmpinstaller2.phpt.testfile.php exists? => yes
-install as role="ext":
-int(1)
-file ext/test/.tmpinstaller2.phpt.testfile.php exists? => yes
-install as role="data":
-int(1)
-file data/test/.tmpinstaller2.phpt.testfile.php exists? => yes
-install as role="doc":
-int(1)
-file doc/test/.tmpinstaller2.phpt.testfile.php exists? => yes
-install as role="test":
-int(1)
-file test/tests/.tmpinstaller2.phpt.testfile.php exists? => yes
-install as role="script":
-int(1)
-file bin/test/.tmpinstaller2.phpt.testfile.php exists? => yes
-install as invalid role="klingon":
-returned PEAR_Error: yes
-message: Invalid role `klingon' for file installer2.phpt.testfile.php
-
-file bin/test/.tmpinstaller2.phpt.testfile.php exists? => no
-install non-existent file:
-returned PEAR_Error: yes
-message: file does not exist
-file php/test/.tmp....php exists? => no
-
-test valid md5sum:
-int(1)
-file bin/test/.tmpinstaller2.phpt.testfile.php exists? => yes
-test invalid md5sum:
-returned PEAR_Error: yes
-message: match
-file bin/test/.tmpinstaller2.phpt.testfile.php exists? => no
-test invalid md5sum with --force:
-warning : match
-returned PEAR_Error: no
-file bin/test/.tmpinstaller2.phpt.testfile.php exists? => yes
-
-test replacements:
-int(1)
-==>test php-const replacement: equals 'good stuff'? => good stuff
-==>test invalid php-const replacement:
-invalid php-const replacement: %PEARINSTALLERTEST2_FAKE_FOO_CONST
-@TEST@ stuff
-int(1)
-==>test pear-config replacement: equals 'test stuff'? => test stuff
-==>test invalid pear-config replacement
-invalid pear-config replacement: blahblahblah
-int(1)
-@TEST@ stuff
-int(1)
-==>test package-info replacement: equals 'Foo stuff'? => Foo stuff
-==>test invalid package-info replacement:
-invalid package-info replacement: gronk
-int(1)
-@TEST@ stuff
-
-test install-as:
-int(1)
-==>test install as 'foobar.php'. file exists? yes
-
-test baseinstalldir:
-int(1)
-==>test baseinstalldir = 'Foo/Mine'. file exists? yes
-
diff --git a/pear/tests/pear_installer_install_channels.phpt b/pear/tests/pear_installer_install_channels.phpt
deleted file mode 100644
index d4c3418d0d..0000000000
--- a/pear/tests/pear_installer_install_channels.phpt
+++ /dev/null
@@ -1,214 +0,0 @@
---TEST--
-PEAR_Installer test #4: PEAR_Installer::install() with channels
---SKIPIF--
-<?php
-if (!getenv('PHP_PEAR_RUNTESTS')) {
- echo 'skip';
-}
-?>
---FILE--
-<?php
-$temp_path = dirname(__FILE__) . DIRECTORY_SEPARATOR . 'testinstallertemp';
-if (!is_dir($temp_path)) {
- mkdir($temp_path);
-}
-if (!is_dir($temp_path . DIRECTORY_SEPARATOR . 'php')) {
- mkdir($temp_path . DIRECTORY_SEPARATOR . 'php');
- mkdir($temp_path . DIRECTORY_SEPARATOR . 'php' . DIRECTORY_SEPARATOR . 'frob');
-}
-if (!is_dir($temp_path . DIRECTORY_SEPARATOR . 'data')) {
- mkdir($temp_path . DIRECTORY_SEPARATOR . 'data');
-}
-if (!is_dir($temp_path . DIRECTORY_SEPARATOR . 'doc')) {
- mkdir($temp_path . DIRECTORY_SEPARATOR . 'doc');
-}
-if (!is_dir($temp_path . DIRECTORY_SEPARATOR . 'test')) {
- mkdir($temp_path . DIRECTORY_SEPARATOR . 'test');
-}
-if (!is_dir($temp_path . DIRECTORY_SEPARATOR . 'ext')) {
- mkdir($temp_path . DIRECTORY_SEPARATOR . 'ext');
-}
-if (!is_dir($temp_path . DIRECTORY_SEPARATOR . 'script')) {
- mkdir($temp_path . DIRECTORY_SEPARATOR . 'script');
-}
-if (!is_dir($temp_path . DIRECTORY_SEPARATOR . 'tmp')) {
- mkdir($temp_path . DIRECTORY_SEPARATOR . 'tmp');
-}
-if (!is_dir($temp_path . DIRECTORY_SEPARATOR . 'bin')) {
- mkdir($temp_path . DIRECTORY_SEPARATOR . 'bin');
-}
-// make the fake configuration - we'll use one of these and it should work
-$config = serialize(array('master_server' => 'pear.php.net',
- 'default_channel' => 'pear',
- 'php_dir' => $temp_path . DIRECTORY_SEPARATOR . 'php',
- 'ext_dir' => $temp_path . DIRECTORY_SEPARATOR . 'ext',
- 'data_dir' => $temp_path . DIRECTORY_SEPARATOR . 'data',
- 'doc_dir' => $temp_path . DIRECTORY_SEPARATOR . 'doc',
- 'test_dir' => $temp_path . DIRECTORY_SEPARATOR . 'test',
- 'bin_dir' => $temp_path . DIRECTORY_SEPARATOR . 'bin',
- '__channels' => array(
- 'frob' => array(
- 'php_dir' => $temp_path . DIRECTORY_SEPARATOR . 'php' . DIRECTORY_SEPARATOR . 'frob',
- ))));
-touch($temp_path . DIRECTORY_SEPARATOR . 'pear.conf');
-$fp = fopen($temp_path . DIRECTORY_SEPARATOR . 'pear.conf', 'w');
-fwrite($fp, $config);
-fclose($fp);
-touch($temp_path . DIRECTORY_SEPARATOR . 'pear.ini');
-$fp = fopen($temp_path . DIRECTORY_SEPARATOR . 'pear.ini', 'w');
-fwrite($fp, $config);
-fclose($fp);
-
-putenv('PHP_PEAR_SYSCONF_DIR='.$temp_path);
-$home = getenv('HOME');
-if (!empty($home)) {
- // for PEAR_Config initialization
- putenv('HOME="'.$temp_path);
-}
-require_once 'PEAR/ChannelFile.php';
-require_once 'PEAR/Registry.php';
-$reg = &new PEAR_Registry($temp_path . DIRECTORY_SEPARATOR . 'php');
-$chan = new PEAR_ChannelFile;
-$chan->setName('frob');
-$chan->setSummary('test');
-$chan->setServer('test');
-$reg->addChannel($chan);
-$chan->setName('groob');
-$reg->addChannel($chan);
-require_once "PEAR/Installer.php";
-
-// no UI is needed for these tests
-$ui = false;
-$installer = new PEAR_Installer($ui);
-$curdir = getcwd();
-chdir(dirname(__FILE__));
-
-PEAR::setErrorHandling(PEAR_ERROR_CALLBACK, 'catchit');
-
-$error_to_catch = false;
-function catchit($err)
-{
- global $error_to_catch;
- if ($error_to_catch) {
- if ($err->getMessage() == $error_to_catch) {
- $error_to_catch = false;
- echo "Caught expected error\n";
- return;
- }
- }
- echo "Caught error: " . $err->getMessage() . "\n";
-}
-
-echo "Test package.xml direct install:\n";
-$installer->install(dirname(__FILE__) . DIRECTORY_SEPARATOR . 'test-pkg6' . DIRECTORY_SEPARATOR . 'package2.xml');
-$reg = &new PEAR_Registry($temp_path . DIRECTORY_SEPARATOR . 'php');
-var_dump($reg->listAllPackages());
-echo "zoorb.php exists? ";
-echo (file_exists($temp_path . DIRECTORY_SEPARATOR . 'php' . DIRECTORY_SEPARATOR . 'frob'
- . DIRECTORY_SEPARATOR . 'groob' . DIRECTORY_SEPARATOR . 'zoorb.php')) ? "yes\n" : "no\n";
-echo "goompness/Mopreeb.php exists? ";
-echo (file_exists($temp_path . DIRECTORY_SEPARATOR . 'php' . DIRECTORY_SEPARATOR . 'frob'
- . DIRECTORY_SEPARATOR . 'groob' . DIRECTORY_SEPARATOR . 'goompness'
- . DIRECTORY_SEPARATOR . 'Mopreeb.php')) ? "yes\n" : "no\n";
-echo "goompness/oggbrzitzkee.php exists? ";
-echo (file_exists($temp_path . DIRECTORY_SEPARATOR . 'php' . DIRECTORY_SEPARATOR . 'frob'
- . DIRECTORY_SEPARATOR . 'groob' . DIRECTORY_SEPARATOR . 'goompness'
- . DIRECTORY_SEPARATOR . 'oggbrzitzkee.php')) ? "yes\n" : "no\n";
-echo "goompness/test.dat exists? ";
-echo (file_exists($temp_path . DIRECTORY_SEPARATOR . 'data' . DIRECTORY_SEPARATOR . 'pkg6'
- . DIRECTORY_SEPARATOR . 'goompness'
- . DIRECTORY_SEPARATOR . 'test.dat')) ? "yes\n" : "no\n";
-
-echo "Test conflicting files:\n";
-$installer->install(dirname(__FILE__) . DIRECTORY_SEPARATOR . 'test-pkg6' . DIRECTORY_SEPARATOR . 'conflictpackage2.xml');
-
-echo "Test unknown channel:\n";
-$installer->install(dirname(__FILE__) . DIRECTORY_SEPARATOR . 'test-pkg6' . DIRECTORY_SEPARATOR . 'package2_invalid.xml');
-
-echo "After uninstall:\n";
-$installer->uninstall('frob::pkg6');
-var_dump($reg->listAllPackages());
-echo "zoorb.php exists? ";
-echo (file_exists($temp_path . DIRECTORY_SEPARATOR . 'php' . DIRECTORY_SEPARATOR . 'frob'
- . DIRECTORY_SEPARATOR . 'groob' . DIRECTORY_SEPARATOR . 'zoorb.php')) ? "yes\n" : "no\n";
-echo "goompness/Mopreeb.php exists? ";
-echo (file_exists($temp_path . DIRECTORY_SEPARATOR . 'php' . DIRECTORY_SEPARATOR . 'frob'
- . DIRECTORY_SEPARATOR . 'groob' . DIRECTORY_SEPARATOR . 'goompness'
- . DIRECTORY_SEPARATOR . 'Mopreeb.php')) ? "yes\n" : "no\n";
-echo "goompness/oggbrzitzkee.php exists? ";
-echo (file_exists($temp_path . DIRECTORY_SEPARATOR . 'php' . DIRECTORY_SEPARATOR . 'frob'
- . DIRECTORY_SEPARATOR . 'groob' . DIRECTORY_SEPARATOR . 'goompness'
- . DIRECTORY_SEPARATOR . 'oggbrzitzkee.php')) ? "yes\n" : "no\n";
-echo "goompness/test.dat exists? ";
-echo (file_exists($temp_path . DIRECTORY_SEPARATOR . 'data' . DIRECTORY_SEPARATOR . 'pkg6'
- . DIRECTORY_SEPARATOR . 'goompness'
- . DIRECTORY_SEPARATOR . 'test.dat')) ? "yes\n" : "no\n";
-
-chdir($curdir);
-cleanall($temp_path);
-
-// ------------------------------------------------------------------------- //
-
-function cleanall($dir)
-{
- $dp = opendir($dir);
- while ($ent = readdir($dp)) {
- if ($ent == '.' || $ent == '..') {
- continue;
- }
- if (is_dir($dir . DIRECTORY_SEPARATOR . $ent)) {
- cleanall($dir . DIRECTORY_SEPARATOR . $ent);
- } else {
- unlink($dir . DIRECTORY_SEPARATOR . $ent);
- }
- }
- closedir($dp);
- rmdir($dir);
-}
-?>
---GET--
---POST--
---EXPECT--
-Test package.xml direct install:
-array(3) {
- ["frob"]=>
- array(1) {
- [0]=>
- string(4) "pkg6"
- }
- ["groob"]=>
- array(0) {
- }
- ["pear"]=>
- array(0) {
- }
-}
-zoorb.php exists? yes
-goompness/Mopreeb.php exists? yes
-goompness/oggbrzitzkee.php exists? yes
-goompness/test.dat exists? yes
-Test conflicting files:
-Caught error: groob::pkg6conflict: conflicting files found:
-groob\goompness\oggbrzitzkee.php (frob::pkg6)
- groob\goompness\Mopreeb.php (frob::pkg6)
- groob\goompness\test.dat (frob::pkg6)
-
-Test unknown channel:
-Error: Unknown channel, "gorp"
-Caught error: Installation failed: invalid package file, use option force to install anyway
-After uninstall:
-array(3) {
- ["frob"]=>
- array(0) {
- }
- ["groob"]=>
- array(0) {
- }
- ["pear"]=>
- array(0) {
- }
-}
-zoorb.php exists? no
-goompness/Mopreeb.php exists? no
-goompness/oggbrzitzkee.php exists? no
-goompness/test.dat exists? no
diff --git a/pear/tests/pear_packager.phpt b/pear/tests/pear_packager.phpt
deleted file mode 100644
index 141fae06d4..0000000000
--- a/pear/tests/pear_packager.phpt
+++ /dev/null
@@ -1,396 +0,0 @@
---TEST--
-PEAR_Packager test
---SKIPIF--
-<?php
-if (!getenv('PHP_PEAR_RUNTESTS')) {
- echo 'skip';
-}
-?>
---FILE--
-<?php
-$temp_path = dirname(__FILE__) . DIRECTORY_SEPARATOR . 'testinstallertemp';
-if (!is_dir($temp_path)) {
- mkdir($temp_path);
-}
-if (!is_dir($temp_path . DIRECTORY_SEPARATOR . 'php')) {
- mkdir($temp_path . DIRECTORY_SEPARATOR . 'php');
-}
-if (!is_dir($temp_path . DIRECTORY_SEPARATOR . 'data')) {
- mkdir($temp_path . DIRECTORY_SEPARATOR . 'data');
-}
-if (!is_dir($temp_path . DIRECTORY_SEPARATOR . 'doc')) {
- mkdir($temp_path . DIRECTORY_SEPARATOR . 'doc');
-}
-if (!is_dir($temp_path . DIRECTORY_SEPARATOR . 'test')) {
- mkdir($temp_path . DIRECTORY_SEPARATOR . 'test');
-}
-if (!is_dir($temp_path . DIRECTORY_SEPARATOR . 'ext')) {
- mkdir($temp_path . DIRECTORY_SEPARATOR . 'ext');
-}
-if (!is_dir($temp_path . DIRECTORY_SEPARATOR . 'script')) {
- mkdir($temp_path . DIRECTORY_SEPARATOR . 'script');
-}
-if (!is_dir($temp_path . DIRECTORY_SEPARATOR . 'tmp')) {
- mkdir($temp_path . DIRECTORY_SEPARATOR . 'tmp');
-}
-if (!is_dir($temp_path . DIRECTORY_SEPARATOR . 'bin')) {
- mkdir($temp_path . DIRECTORY_SEPARATOR . 'bin');
-}
-// make the fake configuration - we'll use one of these and it should work
-$config = serialize(array('master_server' => 'pear.php.net',
- 'php_dir' => $temp_path . DIRECTORY_SEPARATOR . 'php',
- 'ext_dir' => $temp_path . DIRECTORY_SEPARATOR . 'ext',
- 'data_dir' => $temp_path . DIRECTORY_SEPARATOR . 'data',
- 'doc_dir' => $temp_path . DIRECTORY_SEPARATOR . 'doc',
- 'test_dir' => $temp_path . DIRECTORY_SEPARATOR . 'test',
- 'bin_dir' => $temp_path . DIRECTORY_SEPARATOR . 'bin',));
-touch($temp_path . DIRECTORY_SEPARATOR . 'pear.conf');
-$fp = fopen($temp_path . DIRECTORY_SEPARATOR . 'pear.conf', 'w');
-fwrite($fp, $config);
-fclose($fp);
-touch($temp_path . DIRECTORY_SEPARATOR . 'pear.ini');
-$fp = fopen($temp_path . DIRECTORY_SEPARATOR . 'pear.ini', 'w');
-fwrite($fp, $config);
-fclose($fp);
-
-putenv('PHP_PEAR_SYSCONF_DIR='.$temp_path);
-$home = getenv('HOME');
-if (!empty($home)) {
- // for PEAR_Config initialization
- putenv('HOME="'.$temp_path);
-}
-require_once "PEAR/Packager.php";
-require_once 'PEAR/Registry.php';
-$reg = &new PEAR_Registry($temp_path . DIRECTORY_SEPARATOR . 'php');
-$packager = new PEAR_Packager();
-$packager->setRegistry($reg);
-$curdir = getcwd();
-chdir(dirname(__FILE__));
-
-PEAR::setErrorHandling(PEAR_ERROR_CALLBACK, 'catchit');
-
-$error_to_catch = false;
-function catchit($err)
-{
- global $error_to_catch;
- if ($error_to_catch) {
- if ($err->getMessage() == $error_to_catch) {
- $error_to_catch = false;
- echo "Caught expected error\n";
- return;
- }
- }
- echo "Caught error: " . $err->getMessage() . "\n";
-}
-ob_start();
-if (!file_exists(dirname(__FILE__) . DIRECTORY_SEPARATOR . 'dirtree' . DIRECTORY_SEPARATOR . 'CVS')) {
- mkdir(dirname(__FILE__) . DIRECTORY_SEPARATOR . 'dirtree' . DIRECTORY_SEPARATOR . 'CVS');
- touch(dirname(__FILE__) . DIRECTORY_SEPARATOR . 'dirtree' . DIRECTORY_SEPARATOR . 'CVS' . DIRECTORY_SEPARATOR . 'Root');
-}
-$packager->package(dirname(__FILE__) . DIRECTORY_SEPARATOR . 'dirtree' . DIRECTORY_SEPARATOR . 'package.xml');
-$packager->package(dirname(__FILE__) . DIRECTORY_SEPARATOR . 'dirtree' . DIRECTORY_SEPARATOR . 'package2.xml');
-$stuff = str_replace(array(dirname(__FILE__) . DIRECTORY_SEPARATOR, DIRECTORY_SEPARATOR), array('', '/'),
- ob_get_contents());
-ob_end_clean();
-echo $stuff;
-
-$archive1 = &new Archive_Tar(dirname(__FILE__) . DIRECTORY_SEPARATOR . 'pkg1-1.0.tgz');
-$archive1c = &new Archive_Tar(dirname(__FILE__) . DIRECTORY_SEPARATOR . 'dirtree' .
- DIRECTORY_SEPARATOR . 'pkg1-1.0.tgz');
-$x1 = $archive1->listContent();
-$x2 = $archive1c->listContent();
-for($i=0;$i<count($x1); $i++) {
-// if ($x1[$i]['filename'] == 'package.xml') {
- unset($x1[$i]['mtime']);
- unset($x1[$i]['checksum']);
-// }
-}
-for($i=0;$i<count($x2); $i++) {
-// if ($x2[$i]['filename'] == 'package.xml') {
- unset($x2[$i]['mtime']);
- unset($x2[$i]['checksum']);
-// }
-}
-var_dump($x1, $x2);
-$archive1 = &new Archive_Tar(dirname(__FILE__) . DIRECTORY_SEPARATOR . 'pkg2-1.0.tgz');
-$archive1c = &new Archive_Tar(dirname(__FILE__) . DIRECTORY_SEPARATOR . 'dirtree' .
- DIRECTORY_SEPARATOR . 'pkg2-1.0.tgz');
-$x1 = $archive1->listContent();
-$x2 = $archive1c->listContent();
-for($i=0;$i<count($x1); $i++) {
-// if ($x1[$i]['filename'] == 'package.xml') {
- unset($x1[$i]['mtime']);
- unset($x1[$i]['checksum']);
-// }
-}
-for($i=0;$i<count($x2); $i++) {
-// if ($x2[$i]['filename'] == 'package.xml') {
- unset($x2[$i]['mtime']);
- unset($x2[$i]['checksum']);
-// }
-}
-var_dump($x1, $x2);
-
-echo "test failure:\n";
-$packager->package(dirname(__FILE__) . DIRECTORY_SEPARATOR . 'dirtree' . DIRECTORY_SEPARATOR . 'package-fail.xml');
-
-unlink(dirname(__FILE__) . DIRECTORY_SEPARATOR . 'pkg1-1.0.tgz');
-unlink(dirname(__FILE__) . DIRECTORY_SEPARATOR . 'pkg2-1.0.tgz');
-chdir($curdir);
-cleanall($temp_path);
-
-// ------------------------------------------------------------------------- //
-
-function cleanall($dir)
-{
- $dp = opendir($dir);
- while ($ent = readdir($dp)) {
- if ($ent == '.' || $ent == '..') {
- continue;
- }
- if (is_dir($dir . DIRECTORY_SEPARATOR . $ent)) {
- cleanall($dir . DIRECTORY_SEPARATOR . $ent);
- } else {
- unlink($dir . DIRECTORY_SEPARATOR . $ent);
- }
- }
- closedir($dp);
- rmdir($dir);
-}
-?>
---EXPECT--
-Analyzing multiplepackages/pkg1file.php
-Analyzing pkg1/randomfile.php
-Package pkg1-1.0.tgz done
-Tag the released code with `pear cvstag package.xml'
-(or set the CVS tag RELEASE_1_0 by hand)
-Analyzing multiplepackages/pkg2file.php
-Analyzing nestedroot/rootfile.php
-Analyzing nestedroot/emptydir/nesteddir/nestedfile.php
-Package pkg2-1.0.tgz done
-Tag the released code with `pear cvstag package2.xml'
-(or set the CVS tag RELEASE_1_0 by hand)
-array(3) {
- [0]=>
- array(6) {
- ["filename"]=>
- string(11) "package.xml"
- ["mode"]=>
- int(33206)
- ["uid"]=>
- int(0)
- ["gid"]=>
- int(0)
- ["size"]=>
- int(817)
- ["typeflag"]=>
- string(0) ""
- }
- [1]=>
- array(6) {
- ["filename"]=>
- string(38) "pkg1-1.0/multiplepackages/pkg1file.php"
- ["mode"]=>
- int(33206)
- ["uid"]=>
- int(0)
- ["gid"]=>
- int(0)
- ["size"]=>
- int(0)
- ["typeflag"]=>
- string(0) ""
- }
- [2]=>
- array(6) {
- ["filename"]=>
- string(28) "pkg1-1.0/pkg1/randomfile.php"
- ["mode"]=>
- int(33206)
- ["uid"]=>
- int(0)
- ["gid"]=>
- int(0)
- ["size"]=>
- int(0)
- ["typeflag"]=>
- string(0) ""
- }
-}
-array(3) {
- [0]=>
- array(6) {
- ["filename"]=>
- string(11) "package.xml"
- ["mode"]=>
- int(33206)
- ["uid"]=>
- int(0)
- ["gid"]=>
- int(0)
- ["size"]=>
- int(817)
- ["typeflag"]=>
- string(0) ""
- }
- [1]=>
- array(6) {
- ["filename"]=>
- string(38) "pkg1-1.0/multiplepackages/pkg1file.php"
- ["mode"]=>
- int(33206)
- ["uid"]=>
- int(0)
- ["gid"]=>
- int(0)
- ["size"]=>
- int(0)
- ["typeflag"]=>
- string(0) ""
- }
- [2]=>
- array(6) {
- ["filename"]=>
- string(28) "pkg1-1.0/pkg1/randomfile.php"
- ["mode"]=>
- int(33206)
- ["uid"]=>
- int(0)
- ["gid"]=>
- int(0)
- ["size"]=>
- int(0)
- ["typeflag"]=>
- string(0) ""
- }
-}
-array(4) {
- [0]=>
- array(6) {
- ["filename"]=>
- string(11) "package.xml"
- ["mode"]=>
- int(33206)
- ["uid"]=>
- int(0)
- ["gid"]=>
- int(0)
- ["size"]=>
- int(921)
- ["typeflag"]=>
- string(0) ""
- }
- [1]=>
- array(6) {
- ["filename"]=>
- string(38) "pkg2-1.0/multiplepackages/pkg2file.php"
- ["mode"]=>
- int(33206)
- ["uid"]=>
- int(0)
- ["gid"]=>
- int(0)
- ["size"]=>
- int(0)
- ["typeflag"]=>
- string(0) ""
- }
- [2]=>
- array(6) {
- ["filename"]=>
- string(32) "pkg2-1.0/nestedroot/rootfile.php"
- ["mode"]=>
- int(33206)
- ["uid"]=>
- int(0)
- ["gid"]=>
- int(0)
- ["size"]=>
- int(0)
- ["typeflag"]=>
- string(0) ""
- }
- [3]=>
- array(6) {
- ["filename"]=>
- string(53) "pkg2-1.0/nestedroot/emptydir/nesteddir/nestedfile.php"
- ["mode"]=>
- int(33206)
- ["uid"]=>
- int(0)
- ["gid"]=>
- int(0)
- ["size"]=>
- int(0)
- ["typeflag"]=>
- string(0) ""
- }
-}
-array(4) {
- [0]=>
- array(6) {
- ["filename"]=>
- string(11) "package.xml"
- ["mode"]=>
- int(33206)
- ["uid"]=>
- int(0)
- ["gid"]=>
- int(0)
- ["size"]=>
- int(921)
- ["typeflag"]=>
- string(0) ""
- }
- [1]=>
- array(6) {
- ["filename"]=>
- string(38) "pkg2-1.0/multiplepackages/pkg2file.php"
- ["mode"]=>
- int(33206)
- ["uid"]=>
- int(0)
- ["gid"]=>
- int(0)
- ["size"]=>
- int(0)
- ["typeflag"]=>
- string(0) ""
- }
- [2]=>
- array(6) {
- ["filename"]=>
- string(32) "pkg2-1.0/nestedroot/rootfile.php"
- ["mode"]=>
- int(33206)
- ["uid"]=>
- int(0)
- ["gid"]=>
- int(0)
- ["size"]=>
- int(0)
- ["typeflag"]=>
- string(0) ""
- }
- [3]=>
- array(6) {
- ["filename"]=>
- string(53) "pkg2-1.0/nestedroot/emptydir/nesteddir/nestedfile.php"
- ["mode"]=>
- int(33206)
- ["uid"]=>
- int(0)
- ["gid"]=>
- int(0)
- ["size"]=>
- int(0)
- ["typeflag"]=>
- string(0) ""
- }
-}
-test failure:
-Analyzing multiplepackages\pkg2file.php
-Analyzing nestedroot\rootfile.php
-Analyzing nestedroot\emptydir\nesteddir\nestedfile.php
-Analyzing nestedroot\emptydir\nesteddir\doesntexist.php
-Caught error: File does not exist: nestedroot\emptydir\nesteddir\doesntexist.php \ No newline at end of file
diff --git a/pear/tests/pear_registry.phpt b/pear/tests/pear_registry.phpt
deleted file mode 100644
index 26cafa3035..0000000000
--- a/pear/tests/pear_registry.phpt
+++ /dev/null
@@ -1,140 +0,0 @@
---TEST--
-PEAR_Registry
---SKIPIF--
-<?php
-if (!getenv('PHP_PEAR_RUNTESTS')) {
- echo 'skip';
-}
-$statedir = dirname(__FILE__) . DIRECTORY_SEPARATOR . 'registry_tester';
-if (file_exists($statedir)) {
- // don't delete existing directories!
- echo 'skip';
-}
-?>
---FILE--
-<?php
-
-error_reporting(E_ALL);
-include_once dirname(__FILE__) . DIRECTORY_SEPARATOR . 'pear_registry_inc.php.inc';
-include_once "PEAR/Registry.php";
-PEAR::setErrorHandling(PEAR_ERROR_DIE, "%s\n");
-$statedir = dirname(__FILE__) . DIRECTORY_SEPARATOR . 'registry_tester';
-cleanall();
-
-$files1 = array(
- "pkg1-1.php" => array(
- "role" => "php",
- ),
- "pkg1-2.php" => array(
- "role" => "php",
- "baseinstalldir" => "pkg1",
- ),
- );
-$files2 = array(
- "pkg2-1.php" => array(
- "role" => "php",
- ),
- "pkg2-2.php" => array(
- "role" => "php",
- "baseinstalldir" => "pkg2",
- ),
- );
-$files3 = array(
- "pkg3-1.php" => array(
- "role" => "php",
- ),
- "pkg3-2.php" => array(
- "role" => "php",
- "baseinstalldir" => "pkg3",
- ),
- );
-$files3_new = array(
- "pkg3-3.php" => array(
- "role" => "php",
- "baseinstalldir" => "pkg3",
- ),
- "pkg3-4.php" => array(
- "role" => "php",
- ),
- );
-
-print "creating registry object\n";
-$reg = new PEAR_Registry($statedir);
-dumpall($reg);
-
-$reg->addPackage("pkg1", array("name" => "pkg1", "version" => "1.0", "filelist" => $files1));
-dumpall($reg);
-
-$reg->addPackage("pkg2", array("name" => "pkg2", "version" => "2.0", "filelist" => $files2));
-$reg->addPackage("pkg3", array("name" => "pkg3", "version" => "3.0", "filelist" => $files3));
-dumpall($reg);
-
-$reg->updatePackage("pkg2", array("version" => "2.1"));
-dumpall($reg);
-
-var_dump($reg->deletePackage("pkg2"));
-dumpall($reg);
-
-var_dump($reg->deletePackage("pkg2"));
-dumpall($reg);
-
-$reg->updatePackage("pkg3", array("version" => "3.1b1", "status" => "beta"));
-dumpall($reg);
-
-$testing = $reg->checkFilemap(array_merge($files3, $files2));
-$ok = ($testing == array('pkg3-1.php' => 'pkg3', 'pkg3' . DIRECTORY_SEPARATOR . 'pkg3-2.php' => 'pkg3'));
-echo 'filemap OK? ' . ($ok ? "yes\n" : "no\n");
-if (!$ok) {
- var_dump($testing);
-}
-
-$reg->updatePackage("pkg3", array("filelist" => $files3_new));
-dumpall($reg);
-
-print "tests done\n";
-?>
---EXPECT--
-creating registry object
-dumping registry...
-channel pear:
-dump done
-dumping registry...
-channel pear:
-pkg1: version="1.0" filelist=array(pkg1-1.php[role=php],pkg1-2.php[role=php,baseinstalldir=pkg1])
-dump done
-dumping registry...
-channel pear:
-pkg1: version="1.0" filelist=array(pkg1-1.php[role=php],pkg1-2.php[role=php,baseinstalldir=pkg1])
-pkg2: version="2.0" filelist=array(pkg2-1.php[role=php],pkg2-2.php[role=php,baseinstalldir=pkg2])
-pkg3: version="3.0" filelist=array(pkg3-1.php[role=php],pkg3-2.php[role=php,baseinstalldir=pkg3])
-dump done
-dumping registry...
-channel pear:
-pkg1: version="1.0" filelist=array(pkg1-1.php[role=php],pkg1-2.php[role=php,baseinstalldir=pkg1])
-pkg2: version="2.1" filelist=array(pkg2-1.php[role=php],pkg2-2.php[role=php,baseinstalldir=pkg2])
-pkg3: version="3.0" filelist=array(pkg3-1.php[role=php],pkg3-2.php[role=php,baseinstalldir=pkg3])
-dump done
-bool(true)
-dumping registry...
-channel pear:
-pkg1: version="1.0" filelist=array(pkg1-1.php[role=php],pkg1-2.php[role=php,baseinstalldir=pkg1])
-pkg3: version="3.0" filelist=array(pkg3-1.php[role=php],pkg3-2.php[role=php,baseinstalldir=pkg3])
-dump done
-bool(false)
-dumping registry...
-channel pear:
-pkg1: version="1.0" filelist=array(pkg1-1.php[role=php],pkg1-2.php[role=php,baseinstalldir=pkg1])
-pkg3: version="3.0" filelist=array(pkg3-1.php[role=php],pkg3-2.php[role=php,baseinstalldir=pkg3])
-dump done
-dumping registry...
-channel pear:
-pkg1: version="1.0" filelist=array(pkg1-1.php[role=php],pkg1-2.php[role=php,baseinstalldir=pkg1])
-pkg3: version="3.1b1" filelist=array(pkg3-1.php[role=php],pkg3-2.php[role=php,baseinstalldir=pkg3]) status="beta"
-dump done
-filemap OK? yes
-dumping registry...
-channel pear:
-pkg1: version="1.0" filelist=array(pkg1-1.php[role=php],pkg1-2.php[role=php,baseinstalldir=pkg1])
-pkg3: version="3.1b1" filelist=array(pkg3-3.php[role=php,baseinstalldir=pkg3],pkg3-4.php[role=php]) status="beta"
-dump done
-tests done
diff --git a/pear/tests/pear_registry_1.1.phpt b/pear/tests/pear_registry_1.1.phpt
deleted file mode 100644
index 48bd27456a..0000000000
--- a/pear/tests/pear_registry_1.1.phpt
+++ /dev/null
@@ -1,294 +0,0 @@
---TEST--
-PEAR_Registry v1.1
---SKIPIF--
-<?php
-if (!getenv('PHP_PEAR_RUNTESTS')) {
- echo 'skip';
- return;
-}
-$statedir = dirname(__FILE__) . DIRECTORY_SEPARATOR . 'registry_tester';
-if (file_exists($statedir)) {
- // don't delete existing directories!
- echo 'skip';
- return;
-}
-include_once 'PEAR/Registry.php';
-$pv = phpversion() . '';
-$av = $pv{0} == '4' ? 'apiversion' : 'apiVersion';
-if (!in_array($av, get_class_methods('PEAR_Registry'))) {
- echo 'skip';
- return;
-}
-if (PEAR_Registry::apiVersion() != '1.1') {
- echo 'skip';
- return;
-}
-?>
---FILE--
-<?php
-error_reporting(E_ALL);
-include_once dirname(__FILE__) . DIRECTORY_SEPARATOR . 'pear_registry_inc.php.inc';
-include_once "PEAR/Registry.php";
-PEAR::setErrorHandling(PEAR_ERROR_DIE, "%s\n");
-$statedir = dirname(__FILE__) . DIRECTORY_SEPARATOR . 'registry_tester';
-cleanall();
-
-$files1 = array(
- "pkg1-1.php" => array(
- "role" => "php",
- ),
- "pkg1-2.php" => array(
- "role" => "php",
- "baseinstalldir" => "pkg1",
- ),
- );
-$files1_test = array(
- "pkg12-1.php" => array(
- "role" => "php",
- ),
- "pkg12-2.php" => array(
- "role" => "php",
- "baseinstalldir" => "pkg1",
- ),
- );
-$files1_grnok = array(
- "pkg32-1.php" => array(
- "role" => "php",
- ),
- "pkg32-2.php" => array(
- "role" => "php",
- "baseinstalldir" => "pkg1",
- ),
- );
-$files2 = array(
- "pkg2-1.php" => array(
- "role" => "php",
- ),
- "pkg2-2.php" => array(
- "role" => "php",
- "baseinstalldir" => "pkg2",
- ),
- );
-$files3 = array(
- "pkg3-1.php" => array(
- "role" => "php",
- ),
- "pkg3-2.php" => array(
- "role" => "php",
- "baseinstalldir" => "pkg3",
- ),
- );
-$files3_new = array(
- "pkg3-3.php" => array(
- "role" => "php",
- "baseinstalldir" => "pkg3",
- ),
- "pkg3-4.php" => array(
- "role" => "php",
- ),
- );
-
-print "creating registry object\n";
-$reg = new PEAR_Registry($statedir);
-dumpall($reg);
-
-$reg->addPackage("pkg1", array("name" => "pkg1", "version" => "1.0", "filelist" => $files1));
-dumpall($reg);
-
-$reg->addPackage("pkg2", array("name" => "pkg2", "version" => "2.0", "filelist" => $files2));
-$reg->addPackage("pkg3", array("name" => "pkg3", "version" => "3.0", "filelist" => $files3));
-dumpall($reg);
-
-$reg->updatePackage("pkg2", array("version" => "2.1"));
-dumpall($reg);
-
-var_dump($reg->deletePackage("pkg2"));
-dumpall($reg);
-
-var_dump($reg->deletePackage("pkg2"));
-dumpall($reg);
-
-$reg->updatePackage("pkg3", array("version" => "3.1b1", "status" => "beta"));
-dumpall($reg);
-
-$testing = $reg->checkFilemap(array_merge($files3, $files2));
-$ok = ($testing == array('pkg3-1.php' => 'pkg3', 'pkg3' . DIRECTORY_SEPARATOR . 'pkg3-2.php' => 'pkg3'));
-echo 'filemap OK? ' . ($ok ? "yes\n" : "no\n");
-if (!$ok) {
- var_dump($testing);
-}
-
-$reg->updatePackage("pkg3", array("filelist" => $files3_new));
-dumpall($reg);
-
-echo "testing channel registry\n\n";
-
-print "test add channel\n";
-
-require_once 'PEAR/ChannelFile.php';
-$chan = new PEAR_ChannelFile;
-
-$chan->setName('test');
-$chan->setServer('pear.php.net');
-$chan->setSummary('hello');
-$reg->addChannel($chan);
-
-dumpall($reg);
-
-echo "test add bad channel\n";
-$chan = new PEAR_ChannelFile;
-
-$chan->setServer('pear.php.net');
-$chan->setSummary('hello');
-$reg->addChannel($chan);
-
-dumpall($reg);
-
-print "test add good package\n";
-$reg->addPackage('pkg1', array('name' => 'pkg1', 'version' => '1.0', 'filelist' => $files1_test), 'test');
-
-dumpall($reg);
-
-echo "test add package with unknown channel\n";
-
-var_dump($reg->addPackage('pkg2', array('name'=> 'pkg2', 'version' => '1.0', 'filelist' => $files1_grnok), 'grnok'));
-
-dumpall($reg);
-
-echo "test channel exists\n";
-
-var_dump($reg->channelExists('test'));
-var_dump($reg->channelExists('pear'));
-var_dump($reg->channelExists('grnok'));
-
-echo "testing restart with new object\n";
-
-unset($reg);
-
-$reg = &new PEAR_Registry($statedir);
-
-dumpall($reg);
-
-echo "test delete channel with packages\n";
-var_dump($reg->deleteChannel('test'));
-
-dumpall($reg);
-
-echo "test delete channel with no packages\n";
-$reg->deletePackage('pkg1', 'test');
-
-var_dump($reg->deleteChannel('test'));
-
-dumpall($reg);
-
-print "tests done\n";
-?>
---EXPECT--
-creating registry object
-dumping registry...
-channel pear:
-dump done
-dumping registry...
-channel pear:
-pkg1: version="1.0" filelist=array(pkg1-1.php[role=php],pkg1-2.php[role=php,baseinstalldir=pkg1])
-dump done
-dumping registry...
-channel pear:
-pkg1: version="1.0" filelist=array(pkg1-1.php[role=php],pkg1-2.php[role=php,baseinstalldir=pkg1])
-pkg2: version="2.0" filelist=array(pkg2-1.php[role=php],pkg2-2.php[role=php,baseinstalldir=pkg2])
-pkg3: version="3.0" filelist=array(pkg3-1.php[role=php],pkg3-2.php[role=php,baseinstalldir=pkg3])
-dump done
-dumping registry...
-channel pear:
-pkg1: version="1.0" filelist=array(pkg1-1.php[role=php],pkg1-2.php[role=php,baseinstalldir=pkg1])
-pkg2: version="2.1" filelist=array(pkg2-1.php[role=php],pkg2-2.php[role=php,baseinstalldir=pkg2])
-pkg3: version="3.0" filelist=array(pkg3-1.php[role=php],pkg3-2.php[role=php,baseinstalldir=pkg3])
-dump done
-bool(true)
-dumping registry...
-channel pear:
-pkg1: version="1.0" filelist=array(pkg1-1.php[role=php],pkg1-2.php[role=php,baseinstalldir=pkg1])
-pkg3: version="3.0" filelist=array(pkg3-1.php[role=php],pkg3-2.php[role=php,baseinstalldir=pkg3])
-dump done
-bool(false)
-dumping registry...
-channel pear:
-pkg1: version="1.0" filelist=array(pkg1-1.php[role=php],pkg1-2.php[role=php,baseinstalldir=pkg1])
-pkg3: version="3.0" filelist=array(pkg3-1.php[role=php],pkg3-2.php[role=php,baseinstalldir=pkg3])
-dump done
-dumping registry...
-channel pear:
-pkg1: version="1.0" filelist=array(pkg1-1.php[role=php],pkg1-2.php[role=php,baseinstalldir=pkg1])
-pkg3: version="3.1b1" filelist=array(pkg3-1.php[role=php],pkg3-2.php[role=php,baseinstalldir=pkg3]) status="beta"
-dump done
-filemap OK? yes
-dumping registry...
-channel pear:
-pkg1: version="1.0" filelist=array(pkg1-1.php[role=php],pkg1-2.php[role=php,baseinstalldir=pkg1])
-pkg3: version="3.1b1" filelist=array(pkg3-3.php[role=php,baseinstalldir=pkg3],pkg3-4.php[role=php]) status="beta"
-dump done
-testing channel registry
-
-test add channel
-dumping registry...
-channel pear:
-pkg1: version="1.0" filelist=array(pkg1-1.php[role=php],pkg1-2.php[role=php,baseinstalldir=pkg1])
-pkg3: version="3.1b1" filelist=array(pkg3-3.php[role=php,baseinstalldir=pkg3],pkg3-4.php[role=php]) status="beta"
-channel test:
-dump done
-test add bad channel
-caught ErrorStack error:
-message: Missing channel name
-code: 6
-dumping registry...
-channel pear:
-pkg1: version="1.0" filelist=array(pkg1-1.php[role=php],pkg1-2.php[role=php,baseinstalldir=pkg1])
-pkg3: version="3.1b1" filelist=array(pkg3-3.php[role=php,baseinstalldir=pkg3],pkg3-4.php[role=php]) status="beta"
-channel test:
-dump done
-test add good package
-dumping registry...
-channel pear:
-pkg1: version="1.0" filelist=array(pkg1-1.php[role=php],pkg1-2.php[role=php,baseinstalldir=pkg1])
-pkg3: version="3.1b1" filelist=array(pkg3-3.php[role=php,baseinstalldir=pkg3],pkg3-4.php[role=php]) status="beta"
-channel test:
-pkg1: version="1.0" filelist=array(pkg12-1.php[role=php],pkg12-2.php[role=php,baseinstalldir=pkg1])
-dump done
-test add package with unknown channel
-bool(false)
-dumping registry...
-channel pear:
-pkg1: version="1.0" filelist=array(pkg1-1.php[role=php],pkg1-2.php[role=php,baseinstalldir=pkg1])
-pkg3: version="3.1b1" filelist=array(pkg3-3.php[role=php,baseinstalldir=pkg3],pkg3-4.php[role=php]) status="beta"
-channel test:
-pkg1: version="1.0" filelist=array(pkg12-1.php[role=php],pkg12-2.php[role=php,baseinstalldir=pkg1])
-dump done
-test channel exists
-bool(true)
-bool(true)
-bool(false)
-testing restart with new object
-dumping registry...
-channel pear:
-pkg1: version="1.0" filelist=array(pkg1-1.php[role=php],pkg1-2.php[role=php,baseinstalldir=pkg1])
-pkg3: version="3.1b1" filelist=array(pkg3-3.php[role=php,baseinstalldir=pkg3],pkg3-4.php[role=php]) status="beta"
-channel test:
-pkg1: version="1.0" filelist=array(pkg12-1.php[role=php],pkg12-2.php[role=php,baseinstalldir=pkg1])
-dump done
-test delete channel with packages
-bool(false)
-dumping registry...
-channel pear:
-pkg1: version="1.0" filelist=array(pkg1-1.php[role=php],pkg1-2.php[role=php,baseinstalldir=pkg1])
-pkg3: version="3.1b1" filelist=array(pkg3-3.php[role=php,baseinstalldir=pkg3],pkg3-4.php[role=php]) status="beta"
-channel test:
-pkg1: version="1.0" filelist=array(pkg12-1.php[role=php],pkg12-2.php[role=php,baseinstalldir=pkg1])
-dump done
-test delete channel with no packages
-bool(true)
-dumping registry...
-channel pear:
-pkg1: version="1.0" filelist=array(pkg1-1.php[role=php],pkg1-2.php[role=php,baseinstalldir=pkg1])
-pkg3: version="3.1b1" filelist=array(pkg3-3.php[role=php,baseinstalldir=pkg3],pkg3-4.php[role=php]) status="beta"
-dump done
-tests done
diff --git a/pear/tests/pear_registry_inc.php.inc b/pear/tests/pear_registry_inc.php.inc
deleted file mode 100644
index 7cc395f081..0000000000
--- a/pear/tests/pear_registry_inc.php.inc
+++ /dev/null
@@ -1,74 +0,0 @@
-<?php
-
-// ------------------------------------------------------------------------- //
-
-function cleanall($dir = null)
-{
- if ($dir !== null) {
- $statedir = $dir;
- } else {
- $statedir = $GLOBALS['statedir'];
- }
- if (file_exists($statedir)) {
- $dp = opendir($statedir);
- while ($ent = readdir($dp)) {
- if (in_array($ent, array('.', '..'))) {
- continue;
- }
- if (is_dir($statedir . DIRECTORY_SEPARATOR . $ent)) {
- cleanall($statedir . DIRECTORY_SEPARATOR . $ent);
- continue;
- }
- unlink($statedir . DIRECTORY_SEPARATOR . $ent);
- }
- closedir($dp);
- rmdir($statedir);
- }
-}
-
-
-function dumpall(&$reg)
-{
- print "dumping registry...\n";
- $infos = $reg->allPackageInfo();
- foreach ($infos as $channel => $info) {
- echo "channel $channel:\n";
- foreach ($info as $pkg) {
- print $pkg["name"] . ":";
- unset($pkg["name"]);
- foreach ($pkg as $k => $v) {
- if ($k == '_lastmodified') continue;
- if (is_array($v) && $k == 'filelist') {
- print " $k=array(";
- $i = 0;
- foreach ($v as $k2 => $v2) {
- if ($i++ > 0) print ",";
- print "{$k2}[";
- $j = 0;
- foreach ($v2 as $k3 => $v3) {
- if ($j++ > 0) print ",";
- print "$k3=$v3";
- }
- print "]";
- }
- print ")";
- } else {
- print " $k=\"$v\"";
- }
- }
- print "\n";
- }
- }
- print "dump done\n";
-}
-
-require_once 'PEAR/ErrorStack.php';
-function dump_error($err)
-{
- echo "caught ErrorStack error:\n";
- echo "message: ". $err['message'] . "\n";
- echo "code: ". $err['code'] . "\n";
-}
-PEAR_ErrorStack::setDefaultCallback('dump_error');
-register_shutdown_function('cleanall');
-?> \ No newline at end of file
diff --git a/pear/tests/pear_system.phpt b/pear/tests/pear_system.phpt
deleted file mode 100644
index 591b3b6484..0000000000
--- a/pear/tests/pear_system.phpt
+++ /dev/null
@@ -1,110 +0,0 @@
---TEST--
-System commands tests
---SKIPIF--
-<?php
-if (!getenv('PHP_PEAR_RUNTESTS')) {
- echo 'skip';
-}
-?>
---FILE--
-<?php
-error_reporting(E_ALL);
-require_once 'System.php';
-
-$sep = DIRECTORY_SEPARATOR;
-$ereg_sep = $sep;
-if (OS_WINDOWS) {
- $ereg_sep .= $sep;
-}
-/*******************
- mkDir
-********************/
-// Single directory creation
-System::mkDir('singledir');
-if( !is_dir('singledir') ){
- print "System::mkDir('singledir'); failed\n";
-}
-System::rm('singledir');
-
-// Multiple directory creation
-System::mkDir('dir1 dir2 dir3');
-if (!@is_dir('dir1') || !@is_dir('dir2') || !@is_dir('dir3')) {
- print "System::mkDir('dir1 dir2 dir3'); failed\n";
-}
-
-// Parent creation without "-p" fail
-if (@System::mkDir("dir4{$sep}dir3")) {
- print "System::mkDir(\"dir4{$sep}dir3\") did not failed\n";
-}
-
-// Create a directory which is a file already fail
-touch('file4');
-$res = @System::mkDir('file4 dir5');
-if ($res) {
- print "System::mkDir('file4 dir5') did not failed\n";
-}
-if (!@is_dir('dir5')) {
- print "System::mkDir('file4 dir5') failed\n";
-}
-
-// Parent directory creation
-System::mkDir("-p dir2{$sep}dir21 dir6{$sep}dir61{$sep}dir611");
-if (!@is_dir("dir2{$sep}dir21") || !@is_dir("dir6{$sep}dir61{$sep}dir611")) {
- print "System::mkDir(\"-p dir2{$sep}dir21 dir6{$sep}dir61{$sep}dir611\")); failed\n";
-}
-
-/*******************
- mkTemp
-********************/
-
-// Create a temporal file with "tst" as filename prefix
-$tmpfile = System::mkTemp('tst');
-$tmpenv = str_replace($sep, $ereg_sep, System::tmpDir());
-if (!@is_file($tmpfile) || !ereg("^$tmpenv{$ereg_sep}tst", $tmpfile)) {
- print "System::mkTemp('tst') failed\n";
- var_dump(is_file($tmpfile), $tmpfile, "^$tmpenv{$ereg_sep}tst", !ereg("^$tmpenv{$ereg_sep}tst", $tmpfile));
-}
-
-// Create a temporal dir in "dir1" with default prefix "tmp"
-$tmpdir = System::mkTemp('-d -t dir1');
-if (!@is_dir($tmpdir) || !ereg("^dir1{$ereg_sep}tmp", $tmpdir)) {
- print "System::mkTemp('-d -t dir1') failed\n";
-}
-
-/*******************
- rm
-********************/
-
-// Try to delete a dir without "-r" option
-if (@System::rm('dir1')) {
- print "System::rm('dir1') did not fail\n";
-}
-
-// Multiple and recursive delete
-$del = "dir1 dir2 dir3 file4 dir5 dir6";
-if (!@System::rm("-r $del")) {
- print "System::rm(\"-r $del\") failed\n";
-}
-
-/*******************
- which
-********************/
-
-if (OS_UNIX) {
- if (System::which('ls') != '/bin/ls') {
- print "System::which('ls') failed\n";
- }
- if (System::which('i_am_not_a_command')) {
- print "System::which('i_am_not_a_command') did not failed\n";
- }
-} // XXX Windows test
-
-/*******************
- cat
-********************/
-// Missing tests yet
-
-print "end\n";
-?>
---EXPECT--
-end
diff --git a/pear/tests/php.ini b/pear/tests/php.ini
deleted file mode 100644
index c75c9b4f11..0000000000
--- a/pear/tests/php.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-; php.ini for PEAR tests
-include_path=..
diff --git a/pear/tests/php_dump.php.inc b/pear/tests/php_dump.php.inc
deleted file mode 100644
index 4f7a666295..0000000000
--- a/pear/tests/php_dump.php.inc
+++ /dev/null
@@ -1,57 +0,0 @@
-<?php
-class PHP_Dump {
- var $_var;
- function PHP_Dump($var)
- {
- $this->_var = $var;
- }
-
- function toPHP()
- {
- return $this->_toUnknown($this->_var);
- }
-
- function _toUnknown($var, $indent = ' ')
- {
- switch (gettype($var)) {
- case 'array' :
- return $this->_toArray($var, $indent);
- case 'boolean' :
- return $this->_toBool($var, $indent);
- case 'double' :
- case 'integer' :
- return $this->_toNumber($var, $indent);
- case 'NULL' :
- return "{$indent}null";
- case 'string' :
- return $this->_toString($var, $indent);
- }
- }
-
- function _toString($var, $indent)
- {
- return $indent . '"' . addslashes($var) . '"';
- }
-
- function _toBool($var, $indent)
- {
- return $indent . ($var ? 'true' : 'false');
- }
-
- function _toNumber($var, $indent)
- {
- return $indent . $var;
- }
-
- function _toArray($var, $indent = ' ')
- {
- $ret = $indent . "array(\n";
- foreach ($var as $key => $value) {
- $ret .= $indent . ((is_int($key) || is_double($key)) ? $key : "'$key'") . " =>\n";
- $ret .= $this->_toUnknown($value, "$indent ") . ",\n";
- }
- $ret .= $indent . ')';
- return $ret;
- }
-}
-?> \ No newline at end of file
diff --git a/pear/tests/pkg1-1.1.tgz b/pear/tests/pkg1-1.1.tgz
deleted file mode 100644
index fb1b65ffe3..0000000000
--- a/pear/tests/pkg1-1.1.tgz
+++ /dev/null
Binary files differ
diff --git a/pear/tests/pkg1-2.0b1.tgz b/pear/tests/pkg1-2.0b1.tgz
deleted file mode 100644
index bc16f70e0a..0000000000
--- a/pear/tests/pkg1-2.0b1.tgz
+++ /dev/null
Binary files differ
diff --git a/pear/tests/pkg2-1.1.tgz b/pear/tests/pkg2-1.1.tgz
deleted file mode 100644
index 86b5d16c4c..0000000000
--- a/pear/tests/pkg2-1.1.tgz
+++ /dev/null
Binary files differ
diff --git a/pear/tests/pkg3-1.1.tgz b/pear/tests/pkg3-1.1.tgz
deleted file mode 100644
index f3746443d8..0000000000
--- a/pear/tests/pkg3-1.1.tgz
+++ /dev/null
Binary files differ
diff --git a/pear/tests/pkg3-1.4.tgz b/pear/tests/pkg3-1.4.tgz
deleted file mode 100644
index 31c9825ef2..0000000000
--- a/pear/tests/pkg3-1.4.tgz
+++ /dev/null
Binary files differ
diff --git a/pear/tests/pkg4-1.1.tgz b/pear/tests/pkg4-1.1.tgz
deleted file mode 100644
index 08423ae28b..0000000000
--- a/pear/tests/pkg4-1.1.tgz
+++ /dev/null
Binary files differ
diff --git a/pear/tests/pkg4AndAHalf-1.3.tgz b/pear/tests/pkg4AndAHalf-1.3.tgz
deleted file mode 100644
index 57792b1bd5..0000000000
--- a/pear/tests/pkg4AndAHalf-1.3.tgz
+++ /dev/null
Binary files differ
diff --git a/pear/tests/pkg5-1.1.tgz b/pear/tests/pkg5-1.1.tgz
deleted file mode 100644
index 37d1b50a93..0000000000
--- a/pear/tests/pkg5-1.1.tgz
+++ /dev/null
Binary files differ
diff --git a/pear/tests/stabilitytoolow-0.3.tgz b/pear/tests/stabilitytoolow-0.3.tgz
deleted file mode 100644
index a7d6a86760..0000000000
--- a/pear/tests/stabilitytoolow-0.3.tgz
+++ /dev/null
Binary files differ
diff --git a/pear/tests/stabilitytoolow-0.5.tgz b/pear/tests/stabilitytoolow-0.5.tgz
deleted file mode 100644
index 28f88baec8..0000000000
--- a/pear/tests/stabilitytoolow-0.5.tgz
+++ /dev/null
Binary files differ
diff --git a/pear/tests/stabilitytoolow-0.6beta.tgz b/pear/tests/stabilitytoolow-0.6beta.tgz
deleted file mode 100644
index 05dc8f9a9e..0000000000
--- a/pear/tests/stabilitytoolow-0.6beta.tgz
+++ /dev/null
Binary files differ
diff --git a/pear/tests/stabilitytoolow-1.0b1.tgz b/pear/tests/stabilitytoolow-1.0b1.tgz
deleted file mode 100644
index 1aefb6b587..0000000000
--- a/pear/tests/stabilitytoolow-1.0b1.tgz
+++ /dev/null
Binary files differ
diff --git a/pear/tests/stabilitytoolow-2.0a1.tgz b/pear/tests/stabilitytoolow-2.0a1.tgz
deleted file mode 100644
index d0f89060ad..0000000000
--- a/pear/tests/stabilitytoolow-2.0a1.tgz
+++ /dev/null
Binary files differ
diff --git a/pear/tests/stabilitytoolow-2.0b1.tgz b/pear/tests/stabilitytoolow-2.0b1.tgz
deleted file mode 100644
index 890d2378dd..0000000000
--- a/pear/tests/stabilitytoolow-2.0b1.tgz
+++ /dev/null
Binary files differ
diff --git a/pear/tests/stabilitytoolow-2.0dev.tgz b/pear/tests/stabilitytoolow-2.0dev.tgz
deleted file mode 100644
index f5564ad8fa..0000000000
--- a/pear/tests/stabilitytoolow-2.0dev.tgz
+++ /dev/null
Binary files differ
diff --git a/pear/tests/stabilitytoolow-3.0dev.tgz b/pear/tests/stabilitytoolow-3.0dev.tgz
deleted file mode 100644
index 061164e340..0000000000
--- a/pear/tests/stabilitytoolow-3.0dev.tgz
+++ /dev/null
Binary files differ
diff --git a/pear/tests/system.input b/pear/tests/system.input
deleted file mode 100644
index 9c6bece157..0000000000
--- a/pear/tests/system.input
+++ /dev/null
@@ -1 +0,0 @@
-a:1:{s:13:"master_server";s:12:"pear.php.net";} \ No newline at end of file
diff --git a/pear/tests/test-pkg6/conflictpackage.xml b/pear/tests/test-pkg6/conflictpackage.xml
deleted file mode 100644
index ee99a03886..0000000000
--- a/pear/tests/test-pkg6/conflictpackage.xml
+++ /dev/null
@@ -1,35 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1" ?>
- <!DOCTYPE package SYSTEM "http://pear.php.net/dtd/package-1.0">
- <package version="1.0">
- <name>pkg6conflict</name>
- <summary>required test for PEAR_Installer</summary>
- <description>
- fake package
- </description>
- <license>PHP License</license>
- <maintainers>
- <maintainer>
- <user>fakeuser</user>
- <name>Joe Shmoe</name>
- <email>nobody@example.com</email>
- <role>lead</role>
- </maintainer>
- </maintainers>
- <release>
- <version>1.1</version>
- <date>2003-09-09</date>
- <state>stable</state>
- <notes>
- required dependency test
- </notes>
- <filelist>
- <dir name="/" baseinstalldir="groob" role="php">
- <file>zoorb1.php</file>
- <dir name="goompness" role="php">
- <file>oggbrzitzkee.php</file>
- <file>Mopreeb.php</file>
- </dir>
- </dir>
- </filelist>
- </release>
- </package>
diff --git a/pear/tests/test-pkg6/conflictpackage2.xml b/pear/tests/test-pkg6/conflictpackage2.xml
deleted file mode 100644
index aed89651b5..0000000000
--- a/pear/tests/test-pkg6/conflictpackage2.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1" ?>
- <!DOCTYPE package SYSTEM "http://pear.php.net/dtd/package-1.1">
- <package version="1.1">
- <name channel="groob">pkg6conflict</name>
- <summary>required test for PEAR_Installer</summary>
- <description>
- fake package
- </description>
- <license>PHP License</license>
- <maintainers>
- <maintainer>
- <user>fakeuser</user>
- <name>Joe Shmoe</name>
- <email>nobody@example.com</email>
- <role>lead</role>
- </maintainer>
- </maintainers>
- <release>
- <version>1.1</version>
- <date>2003-09-09</date>
- <state>stable</state>
- <notes>
- required dependency test
- </notes>
- <filelist>
- <dir name="/" baseinstalldir="groob" role="php">
- <file>zoorb1.php</file>
- <dir name="goompness" role="php">
- <file>oggbrzitzkee.php</file>
- <file>Mopreeb.php</file>
- <file role="data">test.dat</file>
- </dir>
- </dir>
- </filelist>
- </release>
- </package>
diff --git a/pear/tests/test-pkg6/goompness/Mopreeb.php b/pear/tests/test-pkg6/goompness/Mopreeb.php
deleted file mode 100644
index 5422435ff8..0000000000
--- a/pear/tests/test-pkg6/goompness/Mopreeb.php
+++ /dev/null
@@ -1,11 +0,0 @@
-<?php
-
-/**
- *
- *
- * @version $Id$
- * @copyright 2003
- **/
-class test1{}
-
-?> \ No newline at end of file
diff --git a/pear/tests/test-pkg6/goompness/oggbrzitzkee.php b/pear/tests/test-pkg6/goompness/oggbrzitzkee.php
deleted file mode 100644
index 5422435ff8..0000000000
--- a/pear/tests/test-pkg6/goompness/oggbrzitzkee.php
+++ /dev/null
@@ -1,11 +0,0 @@
-<?php
-
-/**
- *
- *
- * @version $Id$
- * @copyright 2003
- **/
-class test1{}
-
-?> \ No newline at end of file
diff --git a/pear/tests/test-pkg6/goompness/test.dat b/pear/tests/test-pkg6/goompness/test.dat
deleted file mode 100644
index e69de29bb2..0000000000
--- a/pear/tests/test-pkg6/goompness/test.dat
+++ /dev/null
diff --git a/pear/tests/test-pkg6/invalidtgz.tgz b/pear/tests/test-pkg6/invalidtgz.tgz
deleted file mode 100644
index 909d507ca6..0000000000
--- a/pear/tests/test-pkg6/invalidtgz.tgz
+++ /dev/null
@@ -1,35 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1" ?>
- <!DOCTYPE package SYSTEM "http://pear.php.net/dtd/package-1.0">
- <package version="1.0">
- <name>pkg6</name>
- <summary>required test for PEAR_Installer</summary>
- <description>
- fake package
- </description>
- <license>PHP License</license>
- <maintainers>
- <maintainer>
- <user>fakeuser</user>
- <name>Joe Shmoe</name>
- <email>nobody@example.com</email>
- <role>lead</role>
- </maintainer>
- </maintainers>
- <release>
- <version>1.1</version>
- <date>2003-09-09</date>
- <state>stable</state>
- <notes>
- required dependency test
- </notes>
- <filelist>
- <dir name="/" baseinstalldir="groob" role="php">
- <file>zoorb.php</file>
- <dir name="goompness" role="php">
- <file>oggbrzitzkee.php</file>
- <file>Mopreeb.php</file>
- </dir>
- </dir>
- </filelist>
- </release>
- </package>
diff --git a/pear/tests/test-pkg6/nopackagexml.tgz b/pear/tests/test-pkg6/nopackagexml.tgz
deleted file mode 100644
index 8b9d9aad02..0000000000
--- a/pear/tests/test-pkg6/nopackagexml.tgz
+++ /dev/null
Binary files differ
diff --git a/pear/tests/test-pkg6/package.xml b/pear/tests/test-pkg6/package.xml
deleted file mode 100644
index 102f972766..0000000000
--- a/pear/tests/test-pkg6/package.xml
+++ /dev/null
@@ -1,35 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1" ?>
- <!DOCTYPE package SYSTEM "http://pear.php.net/dtd/package-1.0">
- <package version="1.0">
- <name>pkg6</name>
- <summary>required test for PEAR_Installer</summary>
- <description>
- fake package
- </description>
- <license>PHP License</license>
- <maintainers>
- <maintainer>
- <user>fakeuser</user>
- <name>Joe Shmoe</name>
- <email>nobody@example.com</email>
- <role>lead</role>
- </maintainer>
- </maintainers>
- <release>
- <version>1.1</version>
- <date>2003-09-09</date>
- <state>stable</state>
- <notes>
- required dependency test
- </notes>
- <filelist>
- <dir name="/" baseinstalldir="groob" role="php">
- <file>zoorb.php</file>
- <dir name="goompness" role="php">
- <file>oggbrzitzkee.php</file>
- <file>Mopreeb.php</file>
- </dir>
- </dir>
- </filelist>
- </release>
- </package>
diff --git a/pear/tests/test-pkg6/package2.xml b/pear/tests/test-pkg6/package2.xml
deleted file mode 100644
index ea015b018d..0000000000
--- a/pear/tests/test-pkg6/package2.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1" ?>
- <!DOCTYPE package SYSTEM "http://pear.php.net/dtd/package-1.1">
- <package version="1.1">
- <name channel="frob">pkg6</name>
- <summary>required test for PEAR_Installer</summary>
- <description>
- fake package
- </description>
- <license>PHP License</license>
- <maintainers>
- <maintainer>
- <user>fakeuser</user>
- <name>Joe Shmoe</name>
- <email>nobody@example.com</email>
- <role>lead</role>
- </maintainer>
- </maintainers>
- <release>
- <version>1.1</version>
- <date>2003-09-09</date>
- <state>stable</state>
- <notes>
- required dependency test
- </notes>
- <filelist>
- <dir name="/" baseinstalldir="groob" role="php">
- <file>zoorb.php</file>
- <dir name="goompness" role="php">
- <file>oggbrzitzkee.php</file>
- <file>Mopreeb.php</file>
- <file role="data">test.dat</file>
- </dir>
- </dir>
- </filelist>
- </release>
- </package>
diff --git a/pear/tests/test-pkg6/package2_invalid.xml b/pear/tests/test-pkg6/package2_invalid.xml
deleted file mode 100644
index 1dfc1ebfc1..0000000000
--- a/pear/tests/test-pkg6/package2_invalid.xml
+++ /dev/null
@@ -1,35 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1" ?>
- <!DOCTYPE package SYSTEM "http://pear.php.net/dtd/package-1.1">
- <package version="1.1">
- <name channel="gorp">pkg6</name>
- <summary>required test for PEAR_Installer</summary>
- <description>
- fake package
- </description>
- <license>PHP License</license>
- <maintainers>
- <maintainer>
- <user>fakeuser</user>
- <name>Joe Shmoe</name>
- <email>nobody@example.com</email>
- <role>lead</role>
- </maintainer>
- </maintainers>
- <release>
- <version>1.1</version>
- <date>2003-09-09</date>
- <state>stable</state>
- <notes>
- required dependency test
- </notes>
- <filelist>
- <dir name="/" baseinstalldir="groob" role="php">
- <file>zoorb.php</file>
- <dir name="goompness" role="php">
- <file>oggbrzitzkee.php</file>
- <file>Mopreeb.php</file>
- </dir>
- </dir>
- </filelist>
- </release>
- </package>
diff --git a/pear/tests/test-pkg6/pkg6-1.1.tgz b/pear/tests/test-pkg6/pkg6-1.1.tgz
deleted file mode 100644
index 09868cab44..0000000000
--- a/pear/tests/test-pkg6/pkg6-1.1.tgz
+++ /dev/null
Binary files differ
diff --git a/pear/tests/test-pkg6/pkg6-2.0b1.tgz b/pear/tests/test-pkg6/pkg6-2.0b1.tgz
deleted file mode 100644
index 45e8877d61..0000000000
--- a/pear/tests/test-pkg6/pkg6-2.0b1.tgz
+++ /dev/null
Binary files differ
diff --git a/pear/tests/test-pkg6/zoorb.php b/pear/tests/test-pkg6/zoorb.php
deleted file mode 100644
index 5422435ff8..0000000000
--- a/pear/tests/test-pkg6/zoorb.php
+++ /dev/null
@@ -1,11 +0,0 @@
-<?php
-
-/**
- *
- *
- * @version $Id$
- * @copyright 2003
- **/
-class test1{}
-
-?> \ No newline at end of file
diff --git a/pear/tests/testdownload.tgz b/pear/tests/testdownload.tgz
deleted file mode 100644
index 0ddc3df361..0000000000
--- a/pear/tests/testdownload.tgz
+++ /dev/null
Binary files differ
diff --git a/pear/tests/toonew.conf b/pear/tests/toonew.conf
deleted file mode 100644
index 6f0c72fe4b..0000000000
--- a/pear/tests/toonew.conf
+++ /dev/null
@@ -1,2 +0,0 @@
-#PEAR_Config 2.0
-master_server = pear.php.net
diff --git a/pear/tests/user.input b/pear/tests/user.input
deleted file mode 100644
index c856afcf97..0000000000
--- a/pear/tests/user.input
+++ /dev/null
@@ -1 +0,0 @@
-a:0:{} \ No newline at end of file
diff --git a/pear/tests/user2.input b/pear/tests/user2.input
deleted file mode 100644
index ac9a8afc0d..0000000000
--- a/pear/tests/user2.input
+++ /dev/null
@@ -1 +0,0 @@
-a:1:{s:7:"verbose";i:2;} \ No newline at end of file
diff --git a/pear/tests/user3.input b/pear/tests/user3.input
deleted file mode 100644
index e4ff5f4661..0000000000
--- a/pear/tests/user3.input
+++ /dev/null
@@ -1 +0,0 @@
-a:2:{s:7:"verbose";i:60;s:10:"__channels";a:2:{s:5:"test1";a:1:{s:7:"verbose";i:70;}s:5:"test2";a:1:{s:7:"verbose";i:71;}}} \ No newline at end of file
diff --git a/php.gif b/php.gif
deleted file mode 100644
index 7beda43fd4..0000000000
--- a/php.gif
+++ /dev/null
Binary files differ
diff --git a/php.ini-dist b/php.ini-dist
deleted file mode 100644
index 99a71e8078..0000000000
--- a/php.ini-dist
+++ /dev/null
@@ -1,1197 +0,0 @@
-[PHP]
-
-;;;;;;;;;;;
-; WARNING ;
-;;;;;;;;;;;
-; This is the default settings file for new PHP installations.
-; By default, PHP installs itself with a configuration suitable for
-; development purposes, and *NOT* for production purposes.
-; For several security-oriented considerations that should be taken
-; before going online with your site, please consult php.ini-recommended
-; and http://php.net/manual/en/security.php.
-
-
-;;;;;;;;;;;;;;;;;;;
-; About php.ini ;
-;;;;;;;;;;;;;;;;;;;
-; This file controls many aspects of PHP's behavior. In order for PHP to
-; read it, it must be named 'php.ini'. PHP looks for it in the current
-; working directory, in the path designated by the environment variable
-; PHPRC, and in the path that was defined in compile time (in that order).
-; Under Windows, the compile-time path is the Windows directory. The
-; path in which the php.ini file is looked for can be overridden using
-; the -c argument in command line mode.
-;
-; The syntax of the file is extremely simple. Whitespace and Lines
-; beginning with a semicolon are silently ignored (as you probably guessed).
-; Section headers (e.g. [Foo]) are also silently ignored, even though
-; they might mean something in the future.
-;
-; Directives are specified using the following syntax:
-; directive = value
-; Directive names are *case sensitive* - foo=bar is different from FOO=bar.
-;
-; The value can be a string, a number, a PHP constant (e.g. E_ALL or M_PI), one
-; of the INI constants (On, Off, True, False, Yes, No and None) or an expression
-; (e.g. E_ALL & ~E_NOTICE), or a quoted string ("foo").
-;
-; Expressions in the INI file are limited to bitwise operators and parentheses:
-; | bitwise OR
-; & bitwise AND
-; ~ bitwise NOT
-; ! boolean NOT
-;
-; Boolean flags can be turned on using the values 1, On, True or Yes.
-; They can be turned off using the values 0, Off, False or No.
-;
-; An empty string can be denoted by simply not writing anything after the equal
-; sign, or by using the None keyword:
-;
-; foo = ; sets foo to an empty string
-; foo = none ; sets foo to an empty string
-; foo = "none" ; sets foo to the string 'none'
-;
-; If you use constants in your value, and these constants belong to a
-; dynamically loaded extension (either a PHP extension or a Zend extension),
-; you may only use these constants *after* the line that loads the extension.
-;
-;
-;;;;;;;;;;;;;;;;;;;
-; About this file ;
-;;;;;;;;;;;;;;;;;;;
-; All the values in the php.ini-dist file correspond to the builtin
-; defaults (that is, if no php.ini is used, or if you delete these lines,
-; the builtin defaults will be identical).
-
-
-;;;;;;;;;;;;;;;;;;;;
-; Language Options ;
-;;;;;;;;;;;;;;;;;;;;
-
-; Enable the PHP scripting language engine under Apache.
-engine = On
-
-; Enable compatibility mode with Zend Engine 1 (PHP 4.x)
-zend.ze1_compatibility_mode = Off
-
-; Allow the <? tag. Otherwise, only <?php and <script> tags are recognized.
-; NOTE: Using short tags should be avoided when developing applications or
-; libraries that are meant for redistribution, or deployment on PHP
-; servers which are not under your control, because short tags may not
-; be supported on the target server. For portable, redistributable code,
-; be sure not to use short tags.
-short_open_tag = On
-
-; Allow ASP-style <% %> tags.
-asp_tags = Off
-
-; The number of significant digits displayed in floating point numbers.
-precision = 12
-
-; Enforce year 2000 compliance (will cause problems with non-compliant browsers)
-y2k_compliance = On
-
-; Output buffering allows you to send header lines (including cookies) even
-; after you send body content, at the price of slowing PHP's output layer a
-; bit. You can enable output buffering during runtime by calling the output
-; buffering functions. You can also enable output buffering for all files by
-; setting this directive to On. If you wish to limit the size of the buffer
-; to a certain size - you can use a maximum number of bytes instead of 'On', as
-; a value for this directive (e.g., output_buffering=4096).
-output_buffering = Off
-
-; You can redirect all of the output of your scripts to a function. For
-; example, if you set output_handler to "mb_output_handler", character
-; encoding will be transparently converted to the specified encoding.
-; Setting any output handler automatically turns on output buffering.
-; Note: People who wrote portable scripts should not depend on this ini
-; directive. Instead, explicitly set the output handler using ob_start().
-; Using this ini directive may cause problems unless you know what script
-; is doing.
-; Note: You cannot use both "mb_output_handler" with "ob_iconv_handler"
-; and you cannot use both "ob_gzhandler" and "zlib.output_compression".
-; Note: output_handler must be empty if this is set 'On' !!!!
-; Instead you must use zlib.output_handler.
-;output_handler =
-
-; Transparent output compression using the zlib library
-; Valid values for this option are 'off', 'on', or a specific buffer size
-; to be used for compression (default is 4KB)
-; Note: Resulting chunk size may vary due to nature of compression. PHP
-; outputs chunks that are few hundreds bytes each as a result of
-; compression. If you prefer a larger chunk size for better
-; performance, enable output_buffering in addition.
-; Note: You need to use zlib.output_handler instead of the standard
-; output_handler, or otherwise the output will be corrupted.
-zlib.output_compression = Off
-
-; You cannot specify additional output handlers if zlib.output_compression
-; is activated here. This setting does the same as output_handler but in
-; a different order.
-;zlib.output_handler =
-
-; Implicit flush tells PHP to tell the output layer to flush itself
-; automatically after every output block. This is equivalent to calling the
-; PHP function flush() after each and every call to print() or echo() and each
-; and every HTML block. Turning this option on has serious performance
-; implications and is generally recommended for debugging purposes only.
-implicit_flush = Off
-
-; The unserialize callback function will be called (with the undefined class'
-; name as parameter), if the unserializer finds an undefined class
-; which should be instanciated.
-; A warning appears if the specified function is not defined, or if the
-; function doesn't include/implement the missing class.
-; So only set this entry, if you really want to implement such a
-; callback-function.
-unserialize_callback_func=
-
-; When floats & doubles are serialized store serialize_precision significant
-; digits after the floating point. The default value ensures that when floats
-; are decoded with unserialize, the data will remain the same.
-serialize_precision = 100
-
-; Whether to enable the ability to force arguments to be passed by reference
-; at function call time. This method is deprecated and is likely to be
-; unsupported in future versions of PHP/Zend. The encouraged method of
-; specifying which arguments should be passed by reference is in the function
-; declaration. You're encouraged to try and turn this option Off and make
-; sure your scripts work properly with it in order to ensure they will work
-; with future versions of the language (you will receive a warning each time
-; you use this feature, and the argument will be passed by value instead of by
-; reference).
-allow_call_time_pass_reference = On
-
-;
-; Safe Mode
-;
-safe_mode = Off
-
-; By default, Safe Mode does a UID compare check when
-; opening files. If you want to relax this to a GID compare,
-; then turn on safe_mode_gid.
-safe_mode_gid = Off
-
-; When safe_mode is on, UID/GID checks are bypassed when
-; including files from this directory and its subdirectories.
-; (directory must also be in include_path or full path must
-; be used when including)
-safe_mode_include_dir =
-
-; When safe_mode is on, only executables located in the safe_mode_exec_dir
-; will be allowed to be executed via the exec family of functions.
-safe_mode_exec_dir =
-
-; Setting certain environment variables may be a potential security breach.
-; This directive contains a comma-delimited list of prefixes. In Safe Mode,
-; the user may only alter environment variables whose names begin with the
-; prefixes supplied here. By default, users will only be able to set
-; environment variables that begin with PHP_ (e.g. PHP_FOO=BAR).
-;
-; Note: If this directive is empty, PHP will let the user modify ANY
-; environment variable!
-safe_mode_allowed_env_vars = PHP_
-
-; This directive contains a comma-delimited list of environment variables that
-; the end user won't be able to change using putenv(). These variables will be
-; protected even if safe_mode_allowed_env_vars is set to allow to change them.
-safe_mode_protected_env_vars = LD_LIBRARY_PATH
-
-; open_basedir, if set, limits all file operations to the defined directory
-; and below. This directive makes most sense if used in a per-directory
-; or per-virtualhost web server configuration file. This directive is
-; *NOT* affected by whether Safe Mode is turned On or Off.
-;open_basedir =
-
-; This directive allows you to disable certain functions for security reasons.
-; It receives a comma-delimited list of function names. This directive is
-; *NOT* affected by whether Safe Mode is turned On or Off.
-disable_functions =
-
-; This directive allows you to disable certain classes for security reasons.
-; It receives a comma-delimited list of class names. This directive is
-; *NOT* affected by whether Safe Mode is turned On or Off.
-disable_classes =
-
-; Colors for Syntax Highlighting mode. Anything that's acceptable in
-; <font color="??????"> would work.
-;highlight.string = #DD0000
-;highlight.comment = #FF9900
-;highlight.keyword = #007700
-;highlight.bg = #FFFFFF
-;highlight.default = #0000BB
-;highlight.html = #000000
-
-
-;
-; Misc
-;
-; Decides whether PHP may expose the fact that it is installed on the server
-; (e.g. by adding its signature to the Web server header). It is no security
-; threat in any way, but it makes it possible to determine whether you use PHP
-; on your server or not.
-expose_php = On
-
-
-;;;;;;;;;;;;;;;;;;;
-; Resource Limits ;
-;;;;;;;;;;;;;;;;;;;
-
-max_execution_time = 30 ; Maximum execution time of each script, in seconds
-max_input_time = 60 ; Maximum amount of time each script may spend parsing request data
-memory_limit = 8M ; Maximum amount of memory a script may consume (8MB)
-
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-; Error handling and logging ;
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-
-; error_reporting is a bit-field. Or each number up to get desired error
-; reporting level
-; E_ALL - All errors and warnings
-; E_ERROR - fatal run-time errors
-; E_WARNING - run-time warnings (non-fatal errors)
-; E_PARSE - compile-time parse errors
-; E_NOTICE - run-time notices (these are warnings which often result
-; from a bug in your code, but it's possible that it was
-; intentional (e.g., using an uninitialized variable and
-; relying on the fact it's automatically initialized to an
-; empty string)
-; E_STRICT - run-time notices, enable to have PHP suggest changes
-; to your code which will ensure the best interoperability
-; and forward compatibility of your code
-; E_CORE_ERROR - fatal errors that occur during PHP's initial startup
-; E_CORE_WARNING - warnings (non-fatal errors) that occur during PHP's
-; initial startup
-; E_COMPILE_ERROR - fatal compile-time errors
-; E_COMPILE_WARNING - compile-time warnings (non-fatal errors)
-; E_USER_ERROR - user-generated error message
-; E_USER_WARNING - user-generated warning message
-; E_USER_NOTICE - user-generated notice message
-;
-; Examples:
-;
-; - Show all errors, except for notices and coding standards warnings
-;
-;error_reporting = E_ALL & ~E_NOTICE & ~E_STRICT
-;
-; - Show all errors, except for notices
-;
-;error_reporting = E_ALL & ~E_NOTICE
-;
-; - Show only errors
-;
-;error_reporting = E_COMPILE_ERROR|E_ERROR|E_CORE_ERROR
-;
-; - Show all errors except for notices and coding standards warnings
-;
-error_reporting = E_ALL & ~E_NOTICE & ~E_STRICT
-
-; Print out errors (as a part of the output). For production web sites,
-; you're strongly encouraged to turn this feature off, and use error logging
-; instead (see below). Keeping display_errors enabled on a production web site
-; may reveal security information to end users, such as file paths on your Web
-; server, your database schema or other information.
-display_errors = On
-
-; Even when display_errors is on, errors that occur during PHP's startup
-; sequence are not displayed. It's strongly recommended to keep
-; display_startup_errors off, except for when debugging.
-display_startup_errors = Off
-
-; Log errors into a log file (server-specific log, stderr, or error_log (below))
-; As stated above, you're strongly advised to use error logging in place of
-; error displaying on production web sites.
-log_errors = Off
-
-; Set maximum length of log_errors. In error_log information about the source is
-; added. The default is 1024 and 0 allows to not apply any maximum length at all.
-log_errors_max_len = 1024
-
-; Do not log repeated messages. Repeated errors must occur in same file on same
-; line until ignore_repeated_source is set true.
-ignore_repeated_errors = Off
-
-; Ignore source of message when ignoring repeated messages. When this setting
-; is On you will not log errors with repeated messages from different files or
-; sourcelines.
-ignore_repeated_source = Off
-
-; If this parameter is set to Off, then memory leaks will not be shown (on
-; stdout or in the log). This has only effect in a debug compile, and if
-; error reporting includes E_WARNING in the allowed list
-report_memleaks = On
-
-; Store the last error/warning message in $php_errormsg (boolean).
-track_errors = Off
-
-; Disable the inclusion of HTML tags in error messages.
-; Note: Never use this feature for production boxes.
-;html_errors = Off
-
-; If html_errors is set On PHP produces clickable error messages that direct
-; to a page describing the error or function causing the error in detail.
-; You can download a copy of the PHP manual from http://www.php.net/docs.php
-; and change docref_root to the base URL of your local copy including the
-; leading '/'. You must also specify the file extension being used including
-; the dot.
-; Note: Never use this feature for production boxes.
-;docref_root = "/phpmanual/"
-;docref_ext = .html
-
-; String to output before an error message.
-;error_prepend_string = "<font color=ff0000>"
-
-; String to output after an error message.
-;error_append_string = "</font>"
-
-; Log errors to specified file.
-;error_log = filename
-
-; Log errors to syslog (Event Log on NT, not valid in Windows 95).
-;error_log = syslog
-
-
-;;;;;;;;;;;;;;;;;
-; Data Handling ;
-;;;;;;;;;;;;;;;;;
-;
-; Note - track_vars is ALWAYS enabled as of PHP 4.0.3
-
-; The separator used in PHP generated URLs to separate arguments.
-; Default is "&".
-;arg_separator.output = "&amp;"
-
-; List of separator(s) used by PHP to parse input URLs into variables.
-; Default is "&".
-; NOTE: Every character in this directive is considered as separator!
-;arg_separator.input = ";&"
-
-; This directive describes the order in which PHP registers GET, POST, Cookie,
-; Environment and Built-in variables (G, P, C, E & S respectively, often
-; referred to as EGPCS or GPC). Registration is done from left to right, newer
-; values override older values.
-variables_order = "EGPCS"
-
-; Whether or not to register the EGPCS variables as global variables. You may
-; want to turn this off if you don't want to clutter your scripts' global scope
-; with user data. This makes most sense when coupled with track_vars - in which
-; case you can access all of the GPC variables through the $HTTP_*_VARS[],
-; variables.
-;
-; You should do your best to write your scripts so that they do not require
-; register_globals to be on; Using form variables as globals can easily lead
-; to possible security problems, if the code is not very well thought of.
-register_globals = Off
-
-; Whether or not to register the old-style input arrays, HTTP_GET_VARS
-; and friends. If you're not using them, it's recommended to turn them off,
-; for performance reasons.
-register_long_arrays = On
-
-; This directive tells PHP whether to declare the argv&argc variables (that
-; would contain the GET information). If you don't use these variables, you
-; should turn it off for increased performance.
-register_argc_argv = On
-
-; Maximum size of POST data that PHP will accept.
-post_max_size = 8M
-
-; Magic quotes
-;
-
-; Magic quotes for incoming GET/POST/Cookie data.
-magic_quotes_gpc = On
-
-; Magic quotes for runtime-generated data, e.g. data from SQL, from exec(), etc.
-magic_quotes_runtime = Off
-
-; Use Sybase-style magic quotes (escape ' with '' instead of \').
-magic_quotes_sybase = Off
-
-; Automatically add files before or after any PHP document.
-auto_prepend_file =
-auto_append_file =
-
-; As of 4.0b4, PHP always outputs a character encoding by default in
-; the Content-type: header. To disable sending of the charset, simply
-; set it to be empty.
-;
-; PHP's built-in default is text/html
-default_mimetype = "text/html"
-;default_charset = "iso-8859-1"
-
-; Always populate the $HTTP_RAW_POST_DATA variable.
-;always_populate_raw_post_data = On
-
-
-;;;;;;;;;;;;;;;;;;;;;;;;;
-; Paths and Directories ;
-;;;;;;;;;;;;;;;;;;;;;;;;;
-
-; UNIX: "/path1:/path2"
-;include_path = ".:/php/includes"
-;
-; Windows: "\path1;\path2"
-;include_path = ".;c:\php\includes"
-
-; The root of the PHP pages, used only if nonempty.
-; if PHP was not compiled with FORCE_REDIRECT, you SHOULD set doc_root
-; if you are running php as a CGI under any web server (other than IIS)
-; see documentation for security issues. The alternate is to use the
-; cgi.force_redirect configuration below
-doc_root =
-
-; The directory under which PHP opens the script using /~username used only
-; if nonempty.
-user_dir =
-
-; Directory in which the loadable extensions (modules) reside.
-extension_dir = "./"
-
-; Whether or not to enable the dl() function. The dl() function does NOT work
-; properly in multithreaded servers, such as IIS or Zeus, and is automatically
-; disabled on them.
-enable_dl = On
-
-; cgi.force_redirect is necessary to provide security running PHP as a CGI under
-; most web servers. Left undefined, PHP turns this on by default. You can
-; turn it off here AT YOUR OWN RISK
-; **You CAN safely turn this off for IIS, in fact, you MUST.**
-; cgi.force_redirect = 1
-
-; if cgi.nph is enabled it will force cgi to always sent Status: 200 with
-; every request.
-; cgi.nph = 1
-
-; if cgi.force_redirect is turned on, and you are not running under Apache or Netscape
-; (iPlanet) web servers, you MAY need to set an environment variable name that PHP
-; will look for to know it is OK to continue execution. Setting this variable MAY
-; cause security issues, KNOW WHAT YOU ARE DOING FIRST.
-; cgi.redirect_status_env = ;
-
-; FastCGI under IIS (on WINNT based OS) supports the ability to impersonate
-; security tokens of the calling client. This allows IIS to define the
-; security context that the request runs under. mod_fastcgi under Apache
-; does not currently support this feature (03/17/2002)
-; Set to 1 if running under IIS. Default is zero.
-; fastcgi.impersonate = 1;
-
-; cgi.rfc2616_headers configuration option tells PHP what type of headers to
-; use when sending HTTP response code. If it's set 0 PHP sends Status: header that
-; is supported by Apache. When this option is set to 1 PHP will send
-; RFC2616 compliant header.
-; Default is zero.
-;cgi.rfc2616_headers = 0
-
-
-;;;;;;;;;;;;;;;;
-; File Uploads ;
-;;;;;;;;;;;;;;;;
-
-; Whether to allow HTTP file uploads.
-file_uploads = On
-
-; Temporary directory for HTTP uploaded files (will use system default if not
-; specified).
-;upload_tmp_dir =
-
-; Maximum allowed size for uploaded files.
-upload_max_filesize = 2M
-
-
-;;;;;;;;;;;;;;;;;;
-; Fopen wrappers ;
-;;;;;;;;;;;;;;;;;;
-
-; Whether to allow the treatment of URLs (like http:// or ftp://) as files.
-allow_url_fopen = On
-
-; Define the anonymous ftp password (your email address)
-;from="john@doe.com"
-
-; Define the User-Agent string
-; user_agent="PHP"
-
-; Default timeout for socket based streams (seconds)
-default_socket_timeout = 60
-
-; If your scripts have to deal with files from Macintosh systems,
-; or you are running on a Mac and need to deal with files from
-; unix or win32 systems, setting this flag will cause PHP to
-; automatically detect the EOL character in those files so that
-; fgets() and file() will work regardless of the source of the file.
-; auto_detect_line_endings = Off
-
-
-;;;;;;;;;;;;;;;;;;;;;;
-; Dynamic Extensions ;
-;;;;;;;;;;;;;;;;;;;;;;
-;
-; If you wish to have an extension loaded automatically, use the following
-; syntax:
-;
-; extension=modulename.extension
-;
-; For example, on Windows:
-;
-; extension=msql.dll
-;
-; ... or under UNIX:
-;
-; extension=msql.so
-;
-; Note that it should be the name of the module only; no directory information
-; needs to go here. Specify the location of the extension with the
-; extension_dir directive above.
-
-
-;Windows Extensions
-;Note that ODBC support is built in, so no dll is needed for it.
-;
-
-;extension=php_bz2.dll
-;extension=php_cpdf.dll
-;extension=php_curl.dll
-;extension=php_dba.dll
-;extension=php_dbase.dll
-;extension=php_dbx.dll
-;extension=php_exif.dll
-;extension=php_fdf.dll
-;extension=php_filepro.dll
-;extension=php_gd2.dll
-;extension=php_gettext.dll
-;extension=php_iconv.dll
-;extension=php_ifx.dll
-;extension=php_iisfunc.dll
-;extension=php_imap.dll
-;extension=php_interbase.dll
-;extension=php_java.dll
-;extension=php_ldap.dll
-;extension=php_mbstring.dll
-;extension=php_mcrypt.dll
-;extension=php_mhash.dll
-;extension=php_mime_magic.dll
-;extension=php_ming.dll
-;extension=php_mssql.dll
-;extension=php_msql.dll
-;extension=php_mysql.dll
-;extension=php_oci8.dll
-;extension=php_openssl.dll
-;extension=php_oracle.dll
-;extension=php_pdf.dll
-;extension=php_pgsql.dll
-;extension=php_shmop.dll
-;extension=php_snmp.dll
-;extension=php_sockets.dll
-;extension=php_sybase_ct.dll
-;extension=php_tidy.dll
-;extension=php_w32api.dll
-;extension=php_xmlrpc.dll
-;extension=php_xsl.dll
-;extension=php_yaz.dll
-;extension=php_zip.dll
-
-
-;;;;;;;;;;;;;;;;;;;
-; Module Settings ;
-;;;;;;;;;;;;;;;;;;;
-
-[Syslog]
-; Whether or not to define the various syslog variables (e.g. $LOG_PID,
-; $LOG_CRON, etc.). Turning it off is a good idea performance-wise. In
-; runtime, you can define these variables by calling define_syslog_variables().
-define_syslog_variables = Off
-
-[mail function]
-; For Win32 only.
-SMTP = localhost
-smtp_port = 25
-
-; For Win32 only.
-;sendmail_from = me@example.com
-
-; For Unix only. You may supply arguments as well (default: "sendmail -t -i").
-;sendmail_path =
-
-; Force the addition of the specified parameters to be passed as extra parameters
-; to the sendmail binary. These parameters will always replace the value of
-; the 5th parameter to mail(), even in safe mode.
-;mail.force_extra_parameters =
-
-[SQL]
-sql.safe_mode = Off
-
-[ODBC]
-;odbc.default_db = Not yet implemented
-;odbc.default_user = Not yet implemented
-;odbc.default_pw = Not yet implemented
-
-; Allow or prevent persistent links.
-odbc.allow_persistent = On
-
-; Check that a connection is still valid before reuse.
-odbc.check_persistent = On
-
-; Maximum number of persistent links. -1 means no limit.
-odbc.max_persistent = -1
-
-; Maximum number of links (persistent + non-persistent). -1 means no limit.
-odbc.max_links = -1
-
-; Handling of LONG fields. Returns number of bytes to variables. 0 means
-; passthru.
-odbc.defaultlrl = 4096
-
-; Handling of binary data. 0 means passthru, 1 return as is, 2 convert to char.
-; See the documentation on odbc_binmode and odbc_longreadlen for an explanation
-; of uodbc.defaultlrl and uodbc.defaultbinmode
-odbc.defaultbinmode = 1
-
-[MySQL]
-; Allow or prevent persistent links.
-mysql.allow_persistent = On
-
-; Maximum number of persistent links. -1 means no limit.
-mysql.max_persistent = -1
-
-; Maximum number of links (persistent + non-persistent). -1 means no limit.
-mysql.max_links = -1
-
-; Default port number for mysql_connect(). If unset, mysql_connect() will use
-; the $MYSQL_TCP_PORT or the mysql-tcp entry in /etc/services or the
-; compile-time value defined MYSQL_PORT (in that order). Win32 will only look
-; at MYSQL_PORT.
-mysql.default_port =
-
-; Default socket name for local MySQL connects. If empty, uses the built-in
-; MySQL defaults.
-mysql.default_socket =
-
-; Default host for mysql_connect() (doesn't apply in safe mode).
-mysql.default_host =
-
-; Default user for mysql_connect() (doesn't apply in safe mode).
-mysql.default_user =
-
-; Default password for mysql_connect() (doesn't apply in safe mode).
-; Note that this is generally a *bad* idea to store passwords in this file.
-; *Any* user with PHP access can run 'echo get_cfg_var("mysql.default_password")
-; and reveal this password! And of course, any users with read access to this
-; file will be able to reveal the password as well.
-mysql.default_password =
-
-; Maximum time (in secondes) for connect timeout. -1 means no limit
-mysql.connect_timeout = 60
-
-; Trace mode. When trace_mode is active (=On), warnings for table/index scans and
-; SQL-Errors will be displayed.
-mysql.trace_mode = Off
-
-[MySQLI]
-
-; Maximum number of links. -1 means no limit.
-mysqli.max_links = -1
-
-; Default port number for mysqli_connect(). If unset, mysqli_connect() will use
-; the $MYSQL_TCP_PORT or the mysql-tcp entry in /etc/services or the
-; compile-time value defined MYSQL_PORT (in that order). Win32 will only look
-; at MYSQL_PORT.
-mysqli.default_port = 3306
-
-; Default socket name for local MySQL connects. If empty, uses the built-in
-; MySQL defaults.
-mysqli.default_socket =
-
-; Default host for mysql_connect() (doesn't apply in safe mode).
-mysqli.default_host =
-
-; Default user for mysql_connect() (doesn't apply in safe mode).
-mysqli.default_user =
-
-; Default password for mysqli_connect() (doesn't apply in safe mode).
-; Note that this is generally a *bad* idea to store passwords in this file.
-; *Any* user with PHP access can run 'echo get_cfg_var("mysqli.default_password")
-; and reveal this password! And of course, any users with read access to this
-; file will be able to reveal the password as well.
-mysqli.default_password =
-
-; Allow or prevent reconnect
-mysqli.reconnect = Off
-
-[mSQL]
-; Allow or prevent persistent links.
-msql.allow_persistent = On
-
-; Maximum number of persistent links. -1 means no limit.
-msql.max_persistent = -1
-
-; Maximum number of links (persistent+non persistent). -1 means no limit.
-msql.max_links = -1
-
-[PostgresSQL]
-; Allow or prevent persistent links.
-pgsql.allow_persistent = On
-
-; Detect broken persistent links always with pg_pconnect().
-; Auto reset feature requires a little overheads.
-pgsql.auto_reset_persistent = Off
-
-; Maximum number of persistent links. -1 means no limit.
-pgsql.max_persistent = -1
-
-; Maximum number of links (persistent+non persistent). -1 means no limit.
-pgsql.max_links = -1
-
-; Ignore PostgreSQL backends Notice message or not.
-; Notice message logging require a little overheads.
-pgsql.ignore_notice = 0
-
-; Log PostgreSQL backends Noitce message or not.
-; Unless pgsql.ignore_notice=0, module cannot log notice message.
-pgsql.log_notice = 0
-
-[Sybase]
-; Allow or prevent persistent links.
-sybase.allow_persistent = On
-
-; Maximum number of persistent links. -1 means no limit.
-sybase.max_persistent = -1
-
-; Maximum number of links (persistent + non-persistent). -1 means no limit.
-sybase.max_links = -1
-
-;sybase.interface_file = "/usr/sybase/interfaces"
-
-; Minimum error severity to display.
-sybase.min_error_severity = 10
-
-; Minimum message severity to display.
-sybase.min_message_severity = 10
-
-; Compatability mode with old versions of PHP 3.0.
-; If on, this will cause PHP to automatically assign types to results according
-; to their Sybase type, instead of treating them all as strings. This
-; compatability mode will probably not stay around forever, so try applying
-; whatever necessary changes to your code, and turn it off.
-sybase.compatability_mode = Off
-
-[Sybase-CT]
-; Allow or prevent persistent links.
-sybct.allow_persistent = On
-
-; Maximum number of persistent links. -1 means no limit.
-sybct.max_persistent = -1
-
-; Maximum number of links (persistent + non-persistent). -1 means no limit.
-sybct.max_links = -1
-
-; Minimum server message severity to display.
-sybct.min_server_severity = 10
-
-; Minimum client message severity to display.
-sybct.min_client_severity = 10
-
-[dbx]
-; returned column names can be converted for compatibility reasons
-; possible values for dbx.colnames_case are
-; "unchanged" (default, if not set)
-; "lowercase"
-; "uppercase"
-; the recommended default is either upper- or lowercase, but
-; unchanged is currently set for backwards compatibility
-dbx.colnames_case = "unchanged"
-
-[bcmath]
-; Number of decimal digits for all bcmath functions.
-bcmath.scale = 0
-
-[browscap]
-;browscap = extra/browscap.ini
-
-[Informix]
-; Default host for ifx_connect() (doesn't apply in safe mode).
-ifx.default_host =
-
-; Default user for ifx_connect() (doesn't apply in safe mode).
-ifx.default_user =
-
-; Default password for ifx_connect() (doesn't apply in safe mode).
-ifx.default_password =
-
-; Allow or prevent persistent links.
-ifx.allow_persistent = On
-
-; Maximum number of persistent links. -1 means no limit.
-ifx.max_persistent = -1
-
-; Maximum number of links (persistent + non-persistent). -1 means no limit.
-ifx.max_links = -1
-
-; If on, select statements return the contents of a text blob instead of its id.
-ifx.textasvarchar = 0
-
-; If on, select statements return the contents of a byte blob instead of its id.
-ifx.byteasvarchar = 0
-
-; Trailing blanks are stripped from fixed-length char columns. May help the
-; life of Informix SE users.
-ifx.charasvarchar = 0
-
-; If on, the contents of text and byte blobs are dumped to a file instead of
-; keeping them in memory.
-ifx.blobinfile = 0
-
-; NULL's are returned as empty strings, unless this is set to 1. In that case,
-; NULL's are returned as string 'NULL'.
-ifx.nullformat = 0
-
-[Session]
-; Handler used to store/retrieve data.
-session.save_handler = files
-
-; Argument passed to save_handler. In the case of files, this is the path
-; where data files are stored. Note: Windows users have to change this
-; variable in order to use PHP's session functions.
-;
-; As of PHP 4.0.1, you can define the path as:
-;
-; session.save_path = "N;/path"
-;
-; where N is an integer. Instead of storing all the session files in
-; /path, what this will do is use subdirectories N-levels deep, and
-; store the session data in those directories. This is useful if you
-; or your OS have problems with lots of files in one directory, and is
-; a more efficient layout for servers that handle lots of sessions.
-;
-; NOTE 1: PHP will not create this directory structure automatically.
-; You can use the script in the ext/session dir for that purpose.
-; NOTE 2: See the section on garbage collection below if you choose to
-; use subdirectories for session storage
-;
-; The file storage module creates files using mode 600 by default.
-; You can change that by using
-;
-; session.save_path = "N;MODE;/path"
-;
-; where MODE is the octal representation of the mode. Note that this
-; does not overwrite the process's umask.
-;session.save_path = "/tmp"
-
-; Whether to use cookies.
-session.use_cookies = 1
-
-; This option enables administrators to make their users invulnerable to
-; attacks which involve passing session ids in URLs; defaults to 0.
-; session.use_only_cookies = 1
-
-; Name of the session (used as cookie name).
-session.name = PHPSESSID
-
-; Initialize session on request startup.
-session.auto_start = 0
-
-; Lifetime in seconds of cookie or, if 0, until browser is restarted.
-session.cookie_lifetime = 0
-
-; The path for which the cookie is valid.
-session.cookie_path = /
-
-; The domain for which the cookie is valid.
-session.cookie_domain =
-
-; Handler used to serialize data. php is the standard serializer of PHP.
-session.serialize_handler = php
-
-; Define the probability that the 'garbage collection' process is started
-; on every session initialization.
-; The probability is calculated by using gc_probability/gc_divisor,
-; e.g. 1/100 means there is a 1% chance that the GC process starts
-; on each request.
-
-session.gc_probability = 1
-session.gc_divisor = 100
-
-; After this number of seconds, stored data will be seen as 'garbage' and
-; cleaned up by the garbage collection process.
-session.gc_maxlifetime = 1440
-
-; NOTE: If you are using the subdirectory option for storing session files
-; (see session.save_path above), then garbage collection does *not*
-; happen automatically. You will need to do your own garbage
-; collection through a shell script, cron entry, or some other method.
-; For example, the following script would is the equivalent of
-; setting session.gc_maxlifetime to 1440 (1440 seconds = 24 minutes):
-; cd /path/to/sessions; find -cmin +24 | xargs rm
-
-; PHP 4.2 and less have an undocumented feature/bug that allows you to
-; to initialize a session variable in the global scope, albeit register_globals
-; is disabled. PHP 4.3 and later will warn you, if this feature is used.
-; You can disable the feature and the warning separately. At this time,
-; the warning is only displayed, if bug_compat_42 is enabled.
-
-session.bug_compat_42 = 1
-session.bug_compat_warn = 1
-
-; Check HTTP Referer to invalidate externally stored URLs containing ids.
-; HTTP_REFERER has to contain this substring for the session to be
-; considered as valid.
-session.referer_check =
-
-; How many bytes to read from the file.
-session.entropy_length = 0
-
-; Specified here to create the session id.
-session.entropy_file =
-
-;session.entropy_length = 16
-
-;session.entropy_file = /dev/urandom
-
-; Set to {nocache,private,public,} to determine HTTP caching aspects
-; or leave this empty to avoid sending anti-caching headers.
-session.cache_limiter = nocache
-
-; Document expires after n minutes.
-session.cache_expire = 180
-
-; trans sid support is disabled by default.
-; Use of trans sid may risk your users security.
-; Use this option with caution.
-; - User may send URL contains active session ID
-; to other person via. email/irc/etc.
-; - URL that contains active session ID may be stored
-; in publically accessible computer.
-; - User may access your site with the same session ID
-; always using URL stored in browser's history or bookmarks.
-session.use_trans_sid = 0
-
-; Select a hash function
-; 0: MD5 (128 bits)
-; 1: SHA-1 (160 bits)
-session.hash_function = 0
-
-; Define how many bits are stored in each character when converting
-; the binary hash data to something readable.
-;
-; 4 bits: 0-9, a-f
-; 5 bits: 0-9, a-v
-; 6 bits: 0-9, a-z, A-Z, "-", ","
-session.hash_bits_per_character = 4
-
-; The URL rewriter will look for URLs in a defined set of HTML tags.
-; form/fieldset are special; if you include them here, the rewriter will
-; add a hidden <input> field with the info which is otherwise appended
-; to URLs. If you want XHTML conformity, remove the form entry.
-; Note that all valid entries require a "=", even if no value follows.
-url_rewriter.tags = "a=href,area=href,frame=src,input=src,form=,fieldset="
-
-[MSSQL]
-; Allow or prevent persistent links.
-mssql.allow_persistent = On
-
-; Maximum number of persistent links. -1 means no limit.
-mssql.max_persistent = -1
-
-; Maximum number of links (persistent+non persistent). -1 means no limit.
-mssql.max_links = -1
-
-; Minimum error severity to display.
-mssql.min_error_severity = 10
-
-; Minimum message severity to display.
-mssql.min_message_severity = 10
-
-; Compatability mode with old versions of PHP 3.0.
-mssql.compatability_mode = Off
-
-; Connect timeout
-;mssql.connect_timeout = 5
-
-; Query timeout
-;mssql.timeout = 60
-
-; Valid range 0 - 2147483647. Default = 4096.
-;mssql.textlimit = 4096
-
-; Valid range 0 - 2147483647. Default = 4096.
-;mssql.textsize = 4096
-
-; Limits the number of records in each batch. 0 = all records in one batch.
-;mssql.batchsize = 0
-
-; Specify how datetime and datetim4 columns are returned
-; On => Returns data converted to SQL server settings
-; Off => Returns values as YYYY-MM-DD hh:mm:ss
-;mssql.datetimeconvert = On
-
-; Use NT authentication when connecting to the server
-mssql.secure_connection = Off
-
-; Specify max number of processes. Default = 25
-;mssql.max_procs = 25
-
-[Assertion]
-; Assert(expr); active by default.
-;assert.active = On
-
-; Issue a PHP warning for each failed assertion.
-;assert.warning = On
-
-; Don't bail out by default.
-;assert.bail = Off
-
-; User-function to be called if an assertion fails.
-;assert.callback = 0
-
-; Eval the expression with current error_reporting(). Set to true if you want
-; error_reporting(0) around the eval().
-;assert.quiet_eval = 0
-
-[Ingres II]
-; Allow or prevent persistent links.
-ingres.allow_persistent = On
-
-; Maximum number of persistent links. -1 means no limit.
-ingres.max_persistent = -1
-
-; Maximum number of links, including persistents. -1 means no limit.
-ingres.max_links = -1
-
-; Default database (format: [node_id::]dbname[/srv_class]).
-ingres.default_database =
-
-; Default user.
-ingres.default_user =
-
-; Default password.
-ingres.default_password =
-
-[Verisign Payflow Pro]
-; Default Payflow Pro server.
-pfpro.defaulthost = "test-payflow.verisign.com"
-
-; Default port to connect to.
-pfpro.defaultport = 443
-
-; Default timeout in seconds.
-pfpro.defaulttimeout = 30
-
-; Default proxy IP address (if required).
-;pfpro.proxyaddress =
-
-; Default proxy port.
-;pfpro.proxyport =
-
-; Default proxy logon.
-;pfpro.proxylogon =
-
-; Default proxy password.
-;pfpro.proxypassword =
-
-[Sockets]
-; Use the system read() function instead of the php_read() wrapper.
-sockets.use_system_read = On
-
-[com]
-; path to a file containing GUIDs, IIDs or filenames of files with TypeLibs
-;com.typelib_file =
-; allow Distributed-COM calls
-;com.allow_dcom = true
-; autoregister constants of a components typlib on com_load()
-;com.autoregister_typelib = true
-; register constants casesensitive
-;com.autoregister_casesensitive = false
-; show warnings on duplicate constat registrations
-;com.autoregister_verbose = true
-
-[mbstring]
-; language for internal character representation.
-;mbstring.language = Japanese
-
-; internal/script encoding.
-; Some encoding cannot work as internal encoding.
-; (e.g. SJIS, BIG5, ISO-2022-*)
-;mbstring.internal_encoding = EUC-JP
-
-; http input encoding.
-;mbstring.http_input = auto
-
-; http output encoding. mb_output_handler must be
-; registered as output buffer to function
-;mbstring.http_output = SJIS
-
-; enable automatic encoding translation accoding to
-; mbstring.internal_encoding setting. Input chars are
-; converted to internal encoding by setting this to On.
-; Note: Do _not_ use automatic encoding translation for
-; portable libs/applications.
-;mbstring.encoding_translation = Off
-
-; automatic encoding detection order.
-; auto means
-;mbstring.detect_order = auto
-
-; substitute_character used when character cannot be converted
-; one from another
-;mbstring.substitute_character = none;
-
-; overload(replace) single byte functions by mbstring functions.
-; mail(), ereg(), etc are overloaded by mb_send_mail(), mb_ereg(),
-; etc. Possible values are 0,1,2,4 or combination of them.
-; For example, 7 for overload everything.
-; 0: No overload
-; 1: Overload mail() function
-; 2: Overload str*() functions
-; 4: Overload ereg*() functions
-;mbstring.func_overload = 0
-
-[FrontBase]
-;fbsql.allow_persistent = On
-;fbsql.autocommit = On
-;fbsql.default_database =
-;fbsql.default_database_password =
-;fbsql.default_host =
-;fbsql.default_password =
-;fbsql.default_user = "_SYSTEM"
-;fbsql.generate_warnings = Off
-;fbsql.max_connections = 128
-;fbsql.max_links = 128
-;fbsql.max_persistent = -1
-;fbsql.max_results = 128
-;fbsql.batchSize = 1000
-
-[exif]
-; Exif UNICODE user comments are handled as UCS-2BE/UCS-2LE and JIS as JIS.
-; With mbstring support this will automatically be converted into the encoding
-; given by corresponding encode setting. When empty mbstring.internal_encoding
-; is used. For the decode settings you can distinguish between motorola and
-; intel byte order. A decode setting cannot be empty.
-;exif.encode_unicode = ISO-8859-15
-;exif.decode_unicode_motorola = UCS-2BE
-;exif.decode_unicode_intel = UCS-2LE
-;exif.encode_jis =
-;exif.decode_jis_motorola = JIS
-;exif.decode_jis_intel = JIS
-
-[Tidy]
-; The path to a default tidy configuration file to use when using tidy
-;tidy.default_config = /usr/local/lib/php/default.tcfg
-
-; Should tidy clean and repair output automatically?
-; WARNING: Do not use this option if you are generating non-html content
-; such as dynamic images
-tidy.clean_output = Off
-
-[soap]
-; Enables or disables WSDL caching feature.
-soap.wsdl_cache_enabled=1
-; Sets the directory name where SOAP extension will put cache files.
-soap.wsdl_cache_dir="/tmp"
-; (time to live) Sets the number of second while cached file will be used
-; instead of original one.
-soap.wsdl_cache_ttl=86400
-
-; Local Variables:
-; tab-width: 4
-; End:
diff --git a/php.ini-recommended b/php.ini-recommended
deleted file mode 100644
index 190cdc7cdd..0000000000
--- a/php.ini-recommended
+++ /dev/null
@@ -1,1255 +0,0 @@
-[PHP]
-
-;;;;;;;;;;;;;;;;;;;
-; About php.ini ;
-;;;;;;;;;;;;;;;;;;;
-; This file controls many aspects of PHP's behavior. In order for PHP to
-; read it, it must be named 'php.ini'. PHP looks for it in the current
-; working directory, in the path designated by the environment variable
-; PHPRC, and in the path that was defined in compile time (in that order).
-; Under Windows, the compile-time path is the Windows directory. The
-; path in which the php.ini file is looked for can be overridden using
-; the -c argument in command line mode.
-;
-; The syntax of the file is extremely simple. Whitespace and Lines
-; beginning with a semicolon are silently ignored (as you probably guessed).
-; Section headers (e.g. [Foo]) are also silently ignored, even though
-; they might mean something in the future.
-;
-; Directives are specified using the following syntax:
-; directive = value
-; Directive names are *case sensitive* - foo=bar is different from FOO=bar.
-;
-; The value can be a string, a number, a PHP constant (e.g. E_ALL or M_PI), one
-; of the INI constants (On, Off, True, False, Yes, No and None) or an expression
-; (e.g. E_ALL & ~E_NOTICE), or a quoted string ("foo").
-;
-; Expressions in the INI file are limited to bitwise operators and parentheses:
-; | bitwise OR
-; & bitwise AND
-; ~ bitwise NOT
-; ! boolean NOT
-;
-; Boolean flags can be turned on using the values 1, On, True or Yes.
-; They can be turned off using the values 0, Off, False or No.
-;
-; An empty string can be denoted by simply not writing anything after the equal
-; sign, or by using the None keyword:
-;
-; foo = ; sets foo to an empty string
-; foo = none ; sets foo to an empty string
-; foo = "none" ; sets foo to the string 'none'
-;
-; If you use constants in your value, and these constants belong to a
-; dynamically loaded extension (either a PHP extension or a Zend extension),
-; you may only use these constants *after* the line that loads the extension.
-;
-;
-;;;;;;;;;;;;;;;;;;;
-; About this file ;
-;;;;;;;;;;;;;;;;;;;
-; This is the recommended, PHP 5-style version of the php.ini-dist file. It
-; sets some non standard settings, that make PHP more efficient, more secure,
-; and encourage cleaner coding.
-;
-; The price is that with these settings, PHP may be incompatible with some
-; applications, and sometimes, more difficult to develop with. Using this
-; file is warmly recommended for production sites. As all of the changes from
-; the standard settings are thoroughly documented, you can go over each one,
-; and decide whether you want to use it or not.
-;
-; For general information about the php.ini file, please consult the php.ini-dist
-; file, included in your PHP distribution.
-;
-; This file is different from the php.ini-dist file in the fact that it features
-; different values for several directives, in order to improve performance, while
-; possibly breaking compatibility with the standard out-of-the-box behavior of
-; PHP. Please make sure you read what's different, and modify your scripts
-; accordingly, if you decide to use this file instead.
-;
-; - register_globals = Off [Security, Performance]
-; Global variables are no longer registered for input data (POST, GET, cookies,
-; environment and other server variables). Instead of using $foo, you must use
-; you can use $_REQUEST["foo"] (includes any variable that arrives through the
-; request, namely, POST, GET and cookie variables), or use one of the specific
-; $_GET["foo"], $_POST["foo"], $_COOKIE["foo"] or $_FILES["foo"], depending
-; on where the input originates. Also, you can look at the
-; import_request_variables() function.
-; Note that register_globals is going to be depracated (i.e., turned off by
-; default) in the next version of PHP, because it often leads to security bugs.
-; Read http://php.net/manual/en/security.registerglobals.php for further
-; information.
-; - register_long_arrays = Off [Performance]
-; Disables registration of the older (and deprecated) long predefined array
-; variables ($HTTP_*_VARS). Instead, use the superglobals that were
-; introduced in PHP 4.1.0
-; - display_errors = Off [Security]
-; With this directive set to off, errors that occur during the execution of
-; scripts will no longer be displayed as a part of the script output, and thus,
-; will no longer be exposed to remote users. With some errors, the error message
-; content may expose information about your script, web server, or database
-; server that may be exploitable for hacking. Production sites should have this
-; directive set to off.
-; - log_errors = On [Security]
-; This directive complements the above one. Any errors that occur during the
-; execution of your script will be logged (typically, to your server's error log,
-; but can be configured in several ways). Along with setting display_errors to off,
-; this setup gives you the ability to fully understand what may have gone wrong,
-; without exposing any sensitive information to remote users.
-; - output_buffering = 4096 [Performance]
-; Set a 4KB output buffer. Enabling output buffering typically results in less
-; writes, and sometimes less packets sent on the wire, which can often lead to
-; better performance. The gain this directive actually yields greatly depends
-; on which Web server you're working with, and what kind of scripts you're using.
-; - register_argc_argv = Off [Performance]
-; Disables registration of the somewhat redundant $argv and $argc global
-; variables.
-; - magic_quotes_gpc = Off [Performance]
-; Input data is no longer escaped with slashes so that it can be sent into
-; SQL databases without further manipulation. Instead, you should use the
-; function addslashes() on each input element you wish to send to a database.
-; - variables_order = "GPCS" [Performance]
-; The environment variables are not hashed into the $_ENV. To access
-; environment variables, you can use getenv() instead.
-; - error_reporting = E_ALL [Code Cleanliness, Security(?)]
-; By default, PHP surpresses errors of type E_NOTICE. These error messages
-; are emitted for non-critical errors, but that could be a symptom of a bigger
-; problem. Most notably, this will cause error messages about the use
-; of uninitialized variables to be displayed.
-; - allow_call_time_pass_reference = Off [Code cleanliness]
-; It's not possible to decide to force a variable to be passed by reference
-; when calling a function. The PHP 4 style to do this is by making the
-; function require the relevant argument by reference.
-
-
-;;;;;;;;;;;;;;;;;;;;
-; Language Options ;
-;;;;;;;;;;;;;;;;;;;;
-
-; Enable the PHP scripting language engine under Apache.
-engine = On
-
-; Enable compatibility mode with Zend Engine 1 (PHP 4.x)
-zend.ze1_compatibility_mode = Off
-
-; Allow the <? tag. Otherwise, only <?php and <script> tags are recognized.
-; NOTE: Using short tags should be avoided when developing applications or
-; libraries that are meant for redistribution, or deployment on PHP
-; servers which are not under your control, because short tags may not
-; be supported on the target server. For portable, redistributable code,
-; be sure not to use short tags.
-short_open_tag = On
-
-; Allow ASP-style <% %> tags.
-asp_tags = Off
-
-; The number of significant digits displayed in floating point numbers.
-precision = 14
-
-; Enforce year 2000 compliance (will cause problems with non-compliant browsers)
-y2k_compliance = On
-
-; Output buffering allows you to send header lines (including cookies) even
-; after you send body content, at the price of slowing PHP's output layer a
-; bit. You can enable output buffering during runtime by calling the output
-; buffering functions. You can also enable output buffering for all files by
-; setting this directive to On. If you wish to limit the size of the buffer
-; to a certain size - you can use a maximum number of bytes instead of 'On', as
-; a value for this directive (e.g., output_buffering=4096).
-output_buffering = 4096
-
-; You can redirect all of the output of your scripts to a function. For
-; example, if you set output_handler to "mb_output_handler", character
-; encoding will be transparently converted to the specified encoding.
-; Setting any output handler automatically turns on output buffering.
-; Note: People who wrote portable scripts should not depend on this ini
-; directive. Instead, explicitly set the output handler using ob_start().
-; Using this ini directive may cause problems unless you know what script
-; is doing.
-; Note: You cannot use both "mb_output_handler" with "ob_iconv_handler"
-; and you cannot use both "ob_gzhandler" and "zlib.output_compression".
-; Note: output_handler must be empty if this is set 'On' !!!!
-; Instead you must use zlib.output_handler.
-;output_handler =
-
-; Transparent output compression using the zlib library
-; Valid values for this option are 'off', 'on', or a specific buffer size
-; to be used for compression (default is 4KB)
-; Note: Resulting chunk size may vary due to nature of compression. PHP
-; outputs chunks that are few hundreds bytes each as a result of
-; compression. If you prefer a larger chunk size for better
-; performance, enable output_buffering in addition.
-; Note: You need to use zlib.output_handler instead of the standard
-; output_handler, or otherwise the output will be corrupted.
-zlib.output_compression = Off
-
-; You cannot specify additional output handlers if zlib.output_compression
-; is activated here. This setting does the same as output_handler but in
-; a different order.
-;zlib.output_handler =
-
-; Implicit flush tells PHP to tell the output layer to flush itself
-; automatically after every output block. This is equivalent to calling the
-; PHP function flush() after each and every call to print() or echo() and each
-; and every HTML block. Turning this option on has serious performance
-; implications and is generally recommended for debugging purposes only.
-implicit_flush = Off
-
-; The unserialize callback function will be called (with the undefined class'
-; name as parameter), if the unserializer finds an undefined class
-; which should be instanciated.
-; A warning appears if the specified function is not defined, or if the
-; function doesn't include/implement the missing class.
-; So only set this entry, if you really want to implement such a
-; callback-function.
-unserialize_callback_func=
-
-; When floats & doubles are serialized store serialize_precision significant
-; digits after the floating point. The default value ensures that when floats
-; are decoded with unserialize, the data will remain the same.
-serialize_precision = 100
-
-; Whether to enable the ability to force arguments to be passed by reference
-; at function call time. This method is deprecated and is likely to be
-; unsupported in future versions of PHP/Zend. The encouraged method of
-; specifying which arguments should be passed by reference is in the function
-; declaration. You're encouraged to try and turn this option Off and make
-; sure your scripts work properly with it in order to ensure they will work
-; with future versions of the language (you will receive a warning each time
-; you use this feature, and the argument will be passed by value instead of by
-; reference).
-allow_call_time_pass_reference = Off
-
-;
-; Safe Mode
-;
-safe_mode = Off
-
-; By default, Safe Mode does a UID compare check when
-; opening files. If you want to relax this to a GID compare,
-; then turn on safe_mode_gid.
-safe_mode_gid = Off
-
-; When safe_mode is on, UID/GID checks are bypassed when
-; including files from this directory and its subdirectories.
-; (directory must also be in include_path or full path must
-; be used when including)
-safe_mode_include_dir =
-
-; When safe_mode is on, only executables located in the safe_mode_exec_dir
-; will be allowed to be executed via the exec family of functions.
-safe_mode_exec_dir =
-
-; Setting certain environment variables may be a potential security breach.
-; This directive contains a comma-delimited list of prefixes. In Safe Mode,
-; the user may only alter environment variables whose names begin with the
-; prefixes supplied here. By default, users will only be able to set
-; environment variables that begin with PHP_ (e.g. PHP_FOO=BAR).
-;
-; Note: If this directive is empty, PHP will let the user modify ANY
-; environment variable!
-safe_mode_allowed_env_vars = PHP_
-
-; This directive contains a comma-delimited list of environment variables that
-; the end user won't be able to change using putenv(). These variables will be
-; protected even if safe_mode_allowed_env_vars is set to allow to change them.
-safe_mode_protected_env_vars = LD_LIBRARY_PATH
-
-; open_basedir, if set, limits all file operations to the defined directory
-; and below. This directive makes most sense if used in a per-directory
-; or per-virtualhost web server configuration file. This directive is
-; *NOT* affected by whether Safe Mode is turned On or Off.
-;open_basedir =
-
-; This directive allows you to disable certain functions for security reasons.
-; It receives a comma-delimited list of function names. This directive is
-; *NOT* affected by whether Safe Mode is turned On or Off.
-disable_functions =
-
-; This directive allows you to disable certain classes for security reasons.
-; It receives a comma-delimited list of class names. This directive is
-; *NOT* affected by whether Safe Mode is turned On or Off.
-disable_classes =
-
-; Colors for Syntax Highlighting mode. Anything that's acceptable in
-; <font color="??????"> would work.
-;highlight.string = #DD0000
-;highlight.comment = #FF9900
-;highlight.keyword = #007700
-;highlight.bg = #FFFFFF
-;highlight.default = #0000BB
-;highlight.html = #000000
-
-
-;
-; Misc
-;
-; Decides whether PHP may expose the fact that it is installed on the server
-; (e.g. by adding its signature to the Web server header). It is no security
-; threat in any way, but it makes it possible to determine whether you use PHP
-; on your server or not.
-expose_php = On
-
-
-;;;;;;;;;;;;;;;;;;;
-; Resource Limits ;
-;;;;;;;;;;;;;;;;;;;
-
-max_execution_time = 30 ; Maximum execution time of each script, in seconds
-max_input_time = 60 ; Maximum amount of time each script may spend parsing request data
-memory_limit = 8M ; Maximum amount of memory a script may consume (8MB)
-
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-; Error handling and logging ;
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-
-; error_reporting is a bit-field. Or each number up to get desired error
-; reporting level
-; E_ALL - All errors and warnings
-; E_ERROR - fatal run-time errors
-; E_WARNING - run-time warnings (non-fatal errors)
-; E_PARSE - compile-time parse errors
-; E_NOTICE - run-time notices (these are warnings which often result
-; from a bug in your code, but it's possible that it was
-; intentional (e.g., using an uninitialized variable and
-; relying on the fact it's automatically initialized to an
-; empty string)
-; E_STRICT - run-time notices, enable to have PHP suggest changes
-; to your code which will ensure the best interoperability
-; and forward compatibility of your code
-; E_CORE_ERROR - fatal errors that occur during PHP's initial startup
-; E_CORE_WARNING - warnings (non-fatal errors) that occur during PHP's
-; initial startup
-; E_COMPILE_ERROR - fatal compile-time errors
-; E_COMPILE_WARNING - compile-time warnings (non-fatal errors)
-; E_USER_ERROR - user-generated error message
-; E_USER_WARNING - user-generated warning message
-; E_USER_NOTICE - user-generated notice message
-;
-; Examples:
-;
-; - Show all errors, except for notices and coding standards warnings
-;
-;error_reporting = E_ALL & ~E_NOTICE & ~E_STRICT
-;
-; - Show all errors, except for notices
-;
-;error_reporting = E_ALL & ~E_NOTICE
-;
-; - Show only errors
-;
-;error_reporting = E_COMPILE_ERROR|E_ERROR|E_CORE_ERROR
-;
-; - Show all errors
-;
-error_reporting = E_ALL
-
-; Print out errors (as a part of the output). For production web sites,
-; you're strongly encouraged to turn this feature off, and use error logging
-; instead (see below). Keeping display_errors enabled on a production web site
-; may reveal security information to end users, such as file paths on your Web
-; server, your database schema or other information.
-display_errors = Off
-
-; Even when display_errors is on, errors that occur during PHP's startup
-; sequence are not displayed. It's strongly recommended to keep
-; display_startup_errors off, except for when debugging.
-display_startup_errors = Off
-
-; Log errors into a log file (server-specific log, stderr, or error_log (below))
-; As stated above, you're strongly advised to use error logging in place of
-; error displaying on production web sites.
-log_errors = On
-
-; Set maximum length of log_errors. In error_log information about the source is
-; added. The default is 1024 and 0 allows to not apply any maximum length at all.
-log_errors_max_len = 1024
-
-; Do not log repeated messages. Repeated errors must occur in same file on same
-; line until ignore_repeated_source is set true.
-ignore_repeated_errors = Off
-
-; Ignore source of message when ignoring repeated messages. When this setting
-; is On you will not log errors with repeated messages from different files or
-; sourcelines.
-ignore_repeated_source = Off
-
-; If this parameter is set to Off, then memory leaks will not be shown (on
-; stdout or in the log). This has only effect in a debug compile, and if
-; error reporting includes E_WARNING in the allowed list
-report_memleaks = On
-
-; Store the last error/warning message in $php_errormsg (boolean).
-track_errors = Off
-
-; Disable the inclusion of HTML tags in error messages.
-; Note: Never use this feature for production boxes.
-;html_errors = Off
-
-; If html_errors is set On PHP produces clickable error messages that direct
-; to a page describing the error or function causing the error in detail.
-; You can download a copy of the PHP manual from http://www.php.net/docs.php
-; and change docref_root to the base URL of your local copy including the
-; leading '/'. You must also specify the file extension being used including
-; the dot.
-; Note: Never use this feature for production boxes.
-;docref_root = "/phpmanual/"
-;docref_ext = .html
-
-; String to output before an error message.
-;error_prepend_string = "<font color=ff0000>"
-
-; String to output after an error message.
-;error_append_string = "</font>"
-
-; Log errors to specified file.
-;error_log = filename
-
-; Log errors to syslog (Event Log on NT, not valid in Windows 95).
-;error_log = syslog
-
-
-;;;;;;;;;;;;;;;;;
-; Data Handling ;
-;;;;;;;;;;;;;;;;;
-;
-; Note - track_vars is ALWAYS enabled as of PHP 4.0.3
-
-; The separator used in PHP generated URLs to separate arguments.
-; Default is "&".
-;arg_separator.output = "&amp;"
-
-; List of separator(s) used by PHP to parse input URLs into variables.
-; Default is "&".
-; NOTE: Every character in this directive is considered as separator!
-;arg_separator.input = ";&"
-
-; This directive describes the order in which PHP registers GET, POST, Cookie,
-; Environment and Built-in variables (G, P, C, E & S respectively, often
-; referred to as EGPCS or GPC). Registration is done from left to right, newer
-; values override older values.
-variables_order = "GPCS"
-
-; Whether or not to register the EGPCS variables as global variables. You may
-; want to turn this off if you don't want to clutter your scripts' global scope
-; with user data. This makes most sense when coupled with track_vars - in which
-; case you can access all of the GPC variables through the $HTTP_*_VARS[],
-; variables.
-;
-; You should do your best to write your scripts so that they do not require
-; register_globals to be on; Using form variables as globals can easily lead
-; to possible security problems, if the code is not very well thought of.
-register_globals = Off
-
-; Whether or not to register the old-style input arrays, HTTP_GET_VARS
-; and friends. If you're not using them, it's recommended to turn them off,
-; for performance reasons.
-register_long_arrays = Off
-
-; This directive tells PHP whether to declare the argv&argc variables (that
-; would contain the GET information). If you don't use these variables, you
-; should turn it off for increased performance.
-register_argc_argv = Off
-
-; Maximum size of POST data that PHP will accept.
-post_max_size = 8M
-
-; Magic quotes
-;
-
-; Magic quotes for incoming GET/POST/Cookie data.
-magic_quotes_gpc = Off
-
-; Magic quotes for runtime-generated data, e.g. data from SQL, from exec(), etc.
-magic_quotes_runtime = Off
-
-; Use Sybase-style magic quotes (escape ' with '' instead of \').
-magic_quotes_sybase = Off
-
-; Automatically add files before or after any PHP document.
-auto_prepend_file =
-auto_append_file =
-
-; As of 4.0b4, PHP always outputs a character encoding by default in
-; the Content-type: header. To disable sending of the charset, simply
-; set it to be empty.
-;
-; PHP's built-in default is text/html
-default_mimetype = "text/html"
-;default_charset = "iso-8859-1"
-
-; Always populate the $HTTP_RAW_POST_DATA variable.
-;always_populate_raw_post_data = On
-
-
-;;;;;;;;;;;;;;;;;;;;;;;;;
-; Paths and Directories ;
-;;;;;;;;;;;;;;;;;;;;;;;;;
-
-; UNIX: "/path1:/path2"
-;include_path = ".:/php/includes"
-;
-; Windows: "\path1;\path2"
-;include_path = ".;c:\php\includes"
-
-; The root of the PHP pages, used only if nonempty.
-; if PHP was not compiled with FORCE_REDIRECT, you SHOULD set doc_root
-; if you are running php as a CGI under any web server (other than IIS)
-; see documentation for security issues. The alternate is to use the
-; cgi.force_redirect configuration below
-doc_root =
-
-; The directory under which PHP opens the script using /~username used only
-; if nonempty.
-user_dir =
-
-; Directory in which the loadable extensions (modules) reside.
-extension_dir = "./"
-
-; Whether or not to enable the dl() function. The dl() function does NOT work
-; properly in multithreaded servers, such as IIS or Zeus, and is automatically
-; disabled on them.
-enable_dl = On
-
-; cgi.force_redirect is necessary to provide security running PHP as a CGI under
-; most web servers. Left undefined, PHP turns this on by default. You can
-; turn it off here AT YOUR OWN RISK
-; **You CAN safely turn this off for IIS, in fact, you MUST.**
-; cgi.force_redirect = 1
-
-; if cgi.nph is enabled it will force cgi to always sent Status: 200 with
-; every request.
-; cgi.nph = 1
-
-; if cgi.force_redirect is turned on, and you are not running under Apache or Netscape
-; (iPlanet) web servers, you MAY need to set an environment variable name that PHP
-; will look for to know it is OK to continue execution. Setting this variable MAY
-; cause security issues, KNOW WHAT YOU ARE DOING FIRST.
-; cgi.redirect_status_env = ;
-
-; FastCGI under IIS (on WINNT based OS) supports the ability to impersonate
-; security tokens of the calling client. This allows IIS to define the
-; security context that the request runs under. mod_fastcgi under Apache
-; does not currently support this feature (03/17/2002)
-; Set to 1 if running under IIS. Default is zero.
-; fastcgi.impersonate = 1;
-
-; cgi.rfc2616_headers configuration option tells PHP what type of headers to
-; use when sending HTTP response code. If it's set 0 PHP sends Status: header that
-; is supported by Apache. When this option is set to 1 PHP will send
-; RFC2616 compliant header.
-; Default is zero.
-;cgi.rfc2616_headers = 0
-
-
-;;;;;;;;;;;;;;;;
-; File Uploads ;
-;;;;;;;;;;;;;;;;
-
-; Whether to allow HTTP file uploads.
-file_uploads = On
-
-; Temporary directory for HTTP uploaded files (will use system default if not
-; specified).
-;upload_tmp_dir =
-
-; Maximum allowed size for uploaded files.
-upload_max_filesize = 2M
-
-
-;;;;;;;;;;;;;;;;;;
-; Fopen wrappers ;
-;;;;;;;;;;;;;;;;;;
-
-; Whether to allow the treatment of URLs (like http:// or ftp://) as files.
-allow_url_fopen = On
-
-; Define the anonymous ftp password (your email address)
-;from="john@doe.com"
-
-; Define the User-Agent string
-; user_agent="PHP"
-
-; Default timeout for socket based streams (seconds)
-default_socket_timeout = 60
-
-; If your scripts have to deal with files from Macintosh systems,
-; or you are running on a Mac and need to deal with files from
-; unix or win32 systems, setting this flag will cause PHP to
-; automatically detect the EOL character in those files so that
-; fgets() and file() will work regardless of the source of the file.
-; auto_detect_line_endings = Off
-
-
-;;;;;;;;;;;;;;;;;;;;;;
-; Dynamic Extensions ;
-;;;;;;;;;;;;;;;;;;;;;;
-;
-; If you wish to have an extension loaded automatically, use the following
-; syntax:
-;
-; extension=modulename.extension
-;
-; For example, on Windows:
-;
-; extension=msql.dll
-;
-; ... or under UNIX:
-;
-; extension=msql.so
-;
-; Note that it should be the name of the module only; no directory information
-; needs to go here. Specify the location of the extension with the
-; extension_dir directive above.
-
-
-;Windows Extensions
-;Note that ODBC support is built in, so no dll is needed for it.
-;
-
-;extension=php_bz2.dll
-;extension=php_cpdf.dll
-;extension=php_curl.dll
-;extension=php_dba.dll
-;extension=php_dbase.dll
-;extension=php_dbx.dll
-;extension=php_exif.dll
-;extension=php_fdf.dll
-;extension=php_filepro.dll
-;extension=php_gd2.dll
-;extension=php_gettext.dll
-;extension=php_iconv.dll
-;extension=php_ifx.dll
-;extension=php_iisfunc.dll
-;extension=php_imap.dll
-;extension=php_interbase.dll
-;extension=php_java.dll
-;extension=php_ldap.dll
-;extension=php_mbstring.dll
-;extension=php_mcrypt.dll
-;extension=php_mhash.dll
-;extension=php_mime_magic.dll
-;extension=php_ming.dll
-;extension=php_mssql.dll
-;extension=php_msql.dll
-;extension=php_mysql.dll
-;extension=php_oci8.dll
-;extension=php_openssl.dll
-;extension=php_oracle.dll
-;extension=php_pdf.dll
-;extension=php_pgsql.dll
-;extension=php_shmop.dll
-;extension=php_snmp.dll
-;extension=php_sockets.dll
-;extension=php_sybase_ct.dll
-;extension=php_tidy.dll
-;extension=php_w32api.dll
-;extension=php_xmlrpc.dll
-;extension=php_xsl.dll
-;extension=php_yaz.dll
-;extension=php_zip.dll
-
-
-;;;;;;;;;;;;;;;;;;;
-; Module Settings ;
-;;;;;;;;;;;;;;;;;;;
-
-[Syslog]
-; Whether or not to define the various syslog variables (e.g. $LOG_PID,
-; $LOG_CRON, etc.). Turning it off is a good idea performance-wise. In
-; runtime, you can define these variables by calling define_syslog_variables().
-define_syslog_variables = Off
-
-[mail function]
-; For Win32 only.
-SMTP = localhost
-smtp_port = 25
-
-; For Win32 only.
-;sendmail_from = me@example.com
-
-; For Unix only. You may supply arguments as well (default: "sendmail -t -i").
-;sendmail_path =
-
-; Force the addition of the specified parameters to be passed as extra parameters
-; to the sendmail binary. These parameters will always replace the value of
-; the 5th parameter to mail(), even in safe mode.
-;mail.force_extra_parameters =
-
-[SQL]
-sql.safe_mode = Off
-
-[ODBC]
-;odbc.default_db = Not yet implemented
-;odbc.default_user = Not yet implemented
-;odbc.default_pw = Not yet implemented
-
-; Allow or prevent persistent links.
-odbc.allow_persistent = On
-
-; Check that a connection is still valid before reuse.
-odbc.check_persistent = On
-
-; Maximum number of persistent links. -1 means no limit.
-odbc.max_persistent = -1
-
-; Maximum number of links (persistent + non-persistent). -1 means no limit.
-odbc.max_links = -1
-
-; Handling of LONG fields. Returns number of bytes to variables. 0 means
-; passthru.
-odbc.defaultlrl = 4096
-
-; Handling of binary data. 0 means passthru, 1 return as is, 2 convert to char.
-; See the documentation on odbc_binmode and odbc_longreadlen for an explanation
-; of uodbc.defaultlrl and uodbc.defaultbinmode
-odbc.defaultbinmode = 1
-
-[MySQL]
-; Allow or prevent persistent links.
-mysql.allow_persistent = On
-
-; Maximum number of persistent links. -1 means no limit.
-mysql.max_persistent = -1
-
-; Maximum number of links (persistent + non-persistent). -1 means no limit.
-mysql.max_links = -1
-
-; Default port number for mysql_connect(). If unset, mysql_connect() will use
-; the $MYSQL_TCP_PORT or the mysql-tcp entry in /etc/services or the
-; compile-time value defined MYSQL_PORT (in that order). Win32 will only look
-; at MYSQL_PORT.
-mysql.default_port =
-
-; Default socket name for local MySQL connects. If empty, uses the built-in
-; MySQL defaults.
-mysql.default_socket =
-
-; Default host for mysql_connect() (doesn't apply in safe mode).
-mysql.default_host =
-
-; Default user for mysql_connect() (doesn't apply in safe mode).
-mysql.default_user =
-
-; Default password for mysql_connect() (doesn't apply in safe mode).
-; Note that this is generally a *bad* idea to store passwords in this file.
-; *Any* user with PHP access can run 'echo get_cfg_var("mysql.default_password")
-; and reveal this password! And of course, any users with read access to this
-; file will be able to reveal the password as well.
-mysql.default_password =
-
-; Maximum time (in secondes) for connect timeout. -1 means no limit
-mysql.connect_timeout = 60
-
-; Trace mode. When trace_mode is active (=On), warnings for table/index scans and
-; SQL-Errors will be displayed.
-mysql.trace_mode = Off
-
-[MySQLI]
-
-; Maximum number of links. -1 means no limit.
-mysqli.max_links = -1
-
-; Default port number for mysqli_connect(). If unset, mysqli_connect() will use
-; the $MYSQL_TCP_PORT or the mysql-tcp entry in /etc/services or the
-; compile-time value defined MYSQL_PORT (in that order). Win32 will only look
-; at MYSQL_PORT.
-mysqli.default_port = 3306
-
-; Default socket name for local MySQL connects. If empty, uses the built-in
-; MySQL defaults.
-mysqli.default_socket =
-
-; Default host for mysql_connect() (doesn't apply in safe mode).
-mysqli.default_host =
-
-; Default user for mysql_connect() (doesn't apply in safe mode).
-mysqli.default_user =
-
-; Default password for mysqli_connect() (doesn't apply in safe mode).
-; Note that this is generally a *bad* idea to store passwords in this file.
-; *Any* user with PHP access can run 'echo get_cfg_var("mysqli.default_password")
-; and reveal this password! And of course, any users with read access to this
-; file will be able to reveal the password as well.
-mysqli.default_password =
-
-; Allow or prevent reconnect
-mysqli.reconnect = Off
-
-[mSQL]
-; Allow or prevent persistent links.
-msql.allow_persistent = On
-
-; Maximum number of persistent links. -1 means no limit.
-msql.max_persistent = -1
-
-; Maximum number of links (persistent+non persistent). -1 means no limit.
-msql.max_links = -1
-
-[PostgresSQL]
-; Allow or prevent persistent links.
-pgsql.allow_persistent = On
-
-; Detect broken persistent links always with pg_pconnect().
-; Auto reset feature requires a little overheads.
-pgsql.auto_reset_persistent = Off
-
-; Maximum number of persistent links. -1 means no limit.
-pgsql.max_persistent = -1
-
-; Maximum number of links (persistent+non persistent). -1 means no limit.
-pgsql.max_links = -1
-
-; Ignore PostgreSQL backends Notice message or not.
-; Notice message logging require a little overheads.
-pgsql.ignore_notice = 0
-
-; Log PostgreSQL backends Noitce message or not.
-; Unless pgsql.ignore_notice=0, module cannot log notice message.
-pgsql.log_notice = 0
-
-[Sybase]
-; Allow or prevent persistent links.
-sybase.allow_persistent = On
-
-; Maximum number of persistent links. -1 means no limit.
-sybase.max_persistent = -1
-
-; Maximum number of links (persistent + non-persistent). -1 means no limit.
-sybase.max_links = -1
-
-;sybase.interface_file = "/usr/sybase/interfaces"
-
-; Minimum error severity to display.
-sybase.min_error_severity = 10
-
-; Minimum message severity to display.
-sybase.min_message_severity = 10
-
-; Compatability mode with old versions of PHP 3.0.
-; If on, this will cause PHP to automatically assign types to results according
-; to their Sybase type, instead of treating them all as strings. This
-; compatability mode will probably not stay around forever, so try applying
-; whatever necessary changes to your code, and turn it off.
-sybase.compatability_mode = Off
-
-[Sybase-CT]
-; Allow or prevent persistent links.
-sybct.allow_persistent = On
-
-; Maximum number of persistent links. -1 means no limit.
-sybct.max_persistent = -1
-
-; Maximum number of links (persistent + non-persistent). -1 means no limit.
-sybct.max_links = -1
-
-; Minimum server message severity to display.
-sybct.min_server_severity = 10
-
-; Minimum client message severity to display.
-sybct.min_client_severity = 10
-
-[dbx]
-; returned column names can be converted for compatibility reasons
-; possible values for dbx.colnames_case are
-; "unchanged" (default, if not set)
-; "lowercase"
-; "uppercase"
-; the recommended default is either upper- or lowercase, but
-; unchanged is currently set for backwards compatibility
-dbx.colnames_case = "lowercase"
-
-[bcmath]
-; Number of decimal digits for all bcmath functions.
-bcmath.scale = 0
-
-[browscap]
-;browscap = extra/browscap.ini
-
-[Informix]
-; Default host for ifx_connect() (doesn't apply in safe mode).
-ifx.default_host =
-
-; Default user for ifx_connect() (doesn't apply in safe mode).
-ifx.default_user =
-
-; Default password for ifx_connect() (doesn't apply in safe mode).
-ifx.default_password =
-
-; Allow or prevent persistent links.
-ifx.allow_persistent = On
-
-; Maximum number of persistent links. -1 means no limit.
-ifx.max_persistent = -1
-
-; Maximum number of links (persistent + non-persistent). -1 means no limit.
-ifx.max_links = -1
-
-; If on, select statements return the contents of a text blob instead of its id.
-ifx.textasvarchar = 0
-
-; If on, select statements return the contents of a byte blob instead of its id.
-ifx.byteasvarchar = 0
-
-; Trailing blanks are stripped from fixed-length char columns. May help the
-; life of Informix SE users.
-ifx.charasvarchar = 0
-
-; If on, the contents of text and byte blobs are dumped to a file instead of
-; keeping them in memory.
-ifx.blobinfile = 0
-
-; NULL's are returned as empty strings, unless this is set to 1. In that case,
-; NULL's are returned as string 'NULL'.
-ifx.nullformat = 0
-
-[Session]
-; Handler used to store/retrieve data.
-session.save_handler = files
-
-; Argument passed to save_handler. In the case of files, this is the path
-; where data files are stored. Note: Windows users have to change this
-; variable in order to use PHP's session functions.
-;
-; As of PHP 4.0.1, you can define the path as:
-;
-; session.save_path = "N;/path"
-;
-; where N is an integer. Instead of storing all the session files in
-; /path, what this will do is use subdirectories N-levels deep, and
-; store the session data in those directories. This is useful if you
-; or your OS have problems with lots of files in one directory, and is
-; a more efficient layout for servers that handle lots of sessions.
-;
-; NOTE 1: PHP will not create this directory structure automatically.
-; You can use the script in the ext/session dir for that purpose.
-; NOTE 2: See the section on garbage collection below if you choose to
-; use subdirectories for session storage
-;
-; The file storage module creates files using mode 600 by default.
-; You can change that by using
-;
-; session.save_path = "N;MODE;/path"
-;
-; where MODE is the octal representation of the mode. Note that this
-; does not overwrite the process's umask.
-;session.save_path = "/tmp"
-
-; Whether to use cookies.
-session.use_cookies = 1
-
-; This option enables administrators to make their users invulnerable to
-; attacks which involve passing session ids in URLs; defaults to 0.
-; session.use_only_cookies = 1
-
-; Name of the session (used as cookie name).
-session.name = PHPSESSID
-
-; Initialize session on request startup.
-session.auto_start = 0
-
-; Lifetime in seconds of cookie or, if 0, until browser is restarted.
-session.cookie_lifetime = 0
-
-; The path for which the cookie is valid.
-session.cookie_path = /
-
-; The domain for which the cookie is valid.
-session.cookie_domain =
-
-; Handler used to serialize data. php is the standard serializer of PHP.
-session.serialize_handler = php
-
-; Define the probability that the 'garbage collection' process is started
-; on every session initialization.
-; The probability is calculated by using gc_probability/gc_divisor,
-; e.g. 1/100 means there is a 1% chance that the GC process starts
-; on each request.
-
-session.gc_probability = 1
-session.gc_divisor = 1000
-
-; After this number of seconds, stored data will be seen as 'garbage' and
-; cleaned up by the garbage collection process.
-session.gc_maxlifetime = 1440
-
-; NOTE: If you are using the subdirectory option for storing session files
-; (see session.save_path above), then garbage collection does *not*
-; happen automatically. You will need to do your own garbage
-; collection through a shell script, cron entry, or some other method.
-; For example, the following script would is the equivalent of
-; setting session.gc_maxlifetime to 1440 (1440 seconds = 24 minutes):
-; cd /path/to/sessions; find -cmin +24 | xargs rm
-
-; PHP 4.2 and less have an undocumented feature/bug that allows you to
-; to initialize a session variable in the global scope, albeit register_globals
-; is disabled. PHP 4.3 and later will warn you, if this feature is used.
-; You can disable the feature and the warning separately. At this time,
-; the warning is only displayed, if bug_compat_42 is enabled.
-
-session.bug_compat_42 = 0
-session.bug_compat_warn = 1
-
-; Check HTTP Referer to invalidate externally stored URLs containing ids.
-; HTTP_REFERER has to contain this substring for the session to be
-; considered as valid.
-session.referer_check =
-
-; How many bytes to read from the file.
-session.entropy_length = 0
-
-; Specified here to create the session id.
-session.entropy_file =
-
-;session.entropy_length = 16
-
-;session.entropy_file = /dev/urandom
-
-; Set to {nocache,private,public,} to determine HTTP caching aspects
-; or leave this empty to avoid sending anti-caching headers.
-session.cache_limiter = nocache
-
-; Document expires after n minutes.
-session.cache_expire = 180
-
-; trans sid support is disabled by default.
-; Use of trans sid may risk your users security.
-; Use this option with caution.
-; - User may send URL contains active session ID
-; to other person via. email/irc/etc.
-; - URL that contains active session ID may be stored
-; in publically accessible computer.
-; - User may access your site with the same session ID
-; always using URL stored in browser's history or bookmarks.
-session.use_trans_sid = 0
-
-; Select a hash function
-; 0: MD5 (128 bits)
-; 1: SHA-1 (160 bits)
-session.hash_function = 0
-
-; Define how many bits are stored in each character when converting
-; the binary hash data to something readable.
-;
-; 4 bits: 0-9, a-f
-; 5 bits: 0-9, a-v
-; 6 bits: 0-9, a-z, A-Z, "-", ","
-session.hash_bits_per_character = 5
-
-; The URL rewriter will look for URLs in a defined set of HTML tags.
-; form/fieldset are special; if you include them here, the rewriter will
-; add a hidden <input> field with the info which is otherwise appended
-; to URLs. If you want XHTML conformity, remove the form entry.
-; Note that all valid entries require a "=", even if no value follows.
-url_rewriter.tags = "a=href,area=href,frame=src,input=src,form=fakeentry"
-
-[MSSQL]
-; Allow or prevent persistent links.
-mssql.allow_persistent = On
-
-; Maximum number of persistent links. -1 means no limit.
-mssql.max_persistent = -1
-
-; Maximum number of links (persistent+non persistent). -1 means no limit.
-mssql.max_links = -1
-
-; Minimum error severity to display.
-mssql.min_error_severity = 10
-
-; Minimum message severity to display.
-mssql.min_message_severity = 10
-
-; Compatability mode with old versions of PHP 3.0.
-mssql.compatability_mode = Off
-
-; Connect timeout
-;mssql.connect_timeout = 5
-
-; Query timeout
-;mssql.timeout = 60
-
-; Valid range 0 - 2147483647. Default = 4096.
-;mssql.textlimit = 4096
-
-; Valid range 0 - 2147483647. Default = 4096.
-;mssql.textsize = 4096
-
-; Limits the number of records in each batch. 0 = all records in one batch.
-;mssql.batchsize = 0
-
-; Specify how datetime and datetim4 columns are returned
-; On => Returns data converted to SQL server settings
-; Off => Returns values as YYYY-MM-DD hh:mm:ss
-;mssql.datetimeconvert = On
-
-; Use NT authentication when connecting to the server
-mssql.secure_connection = Off
-
-; Specify max number of processes. Default = 25
-;mssql.max_procs = 25
-
-[Assertion]
-; Assert(expr); active by default.
-;assert.active = On
-
-; Issue a PHP warning for each failed assertion.
-;assert.warning = On
-
-; Don't bail out by default.
-;assert.bail = Off
-
-; User-function to be called if an assertion fails.
-;assert.callback = 0
-
-; Eval the expression with current error_reporting(). Set to true if you want
-; error_reporting(0) around the eval().
-;assert.quiet_eval = 0
-
-[Ingres II]
-; Allow or prevent persistent links.
-ingres.allow_persistent = On
-
-; Maximum number of persistent links. -1 means no limit.
-ingres.max_persistent = -1
-
-; Maximum number of links, including persistents. -1 means no limit.
-ingres.max_links = -1
-
-; Default database (format: [node_id::]dbname[/srv_class]).
-ingres.default_database =
-
-; Default user.
-ingres.default_user =
-
-; Default password.
-ingres.default_password =
-
-[Verisign Payflow Pro]
-; Default Payflow Pro server.
-pfpro.defaulthost = "test-payflow.verisign.com"
-
-; Default port to connect to.
-pfpro.defaultport = 443
-
-; Default timeout in seconds.
-pfpro.defaulttimeout = 30
-
-; Default proxy IP address (if required).
-;pfpro.proxyaddress =
-
-; Default proxy port.
-;pfpro.proxyport =
-
-; Default proxy logon.
-;pfpro.proxylogon =
-
-; Default proxy password.
-;pfpro.proxypassword =
-
-[Sockets]
-; Use the system read() function instead of the php_read() wrapper.
-sockets.use_system_read = On
-
-[com]
-; path to a file containing GUIDs, IIDs or filenames of files with TypeLibs
-;com.typelib_file =
-; allow Distributed-COM calls
-;com.allow_dcom = true
-; autoregister constants of a components typlib on com_load()
-;com.autoregister_typelib = true
-; register constants casesensitive
-;com.autoregister_casesensitive = false
-; show warnings on duplicate constat registrations
-;com.autoregister_verbose = true
-
-[mbstring]
-; language for internal character representation.
-;mbstring.language = Japanese
-
-; internal/script encoding.
-; Some encoding cannot work as internal encoding.
-; (e.g. SJIS, BIG5, ISO-2022-*)
-;mbstring.internal_encoding = EUC-JP
-
-; http input encoding.
-;mbstring.http_input = auto
-
-; http output encoding. mb_output_handler must be
-; registered as output buffer to function
-;mbstring.http_output = SJIS
-
-; enable automatic encoding translation accoding to
-; mbstring.internal_encoding setting. Input chars are
-; converted to internal encoding by setting this to On.
-; Note: Do _not_ use automatic encoding translation for
-; portable libs/applications.
-;mbstring.encoding_translation = Off
-
-; automatic encoding detection order.
-; auto means
-;mbstring.detect_order = auto
-
-; substitute_character used when character cannot be converted
-; one from another
-;mbstring.substitute_character = none;
-
-; overload(replace) single byte functions by mbstring functions.
-; mail(), ereg(), etc are overloaded by mb_send_mail(), mb_ereg(),
-; etc. Possible values are 0,1,2,4 or combination of them.
-; For example, 7 for overload everything.
-; 0: No overload
-; 1: Overload mail() function
-; 2: Overload str*() functions
-; 4: Overload ereg*() functions
-;mbstring.func_overload = 0
-
-[FrontBase]
-;fbsql.allow_persistent = On
-;fbsql.autocommit = On
-;fbsql.default_database =
-;fbsql.default_database_password =
-;fbsql.default_host =
-;fbsql.default_password =
-;fbsql.default_user = "_SYSTEM"
-;fbsql.generate_warnings = Off
-;fbsql.max_connections = 128
-;fbsql.max_links = 128
-;fbsql.max_persistent = -1
-;fbsql.max_results = 128
-;fbsql.batchSize = 1000
-
-[exif]
-; Exif UNICODE user comments are handled as UCS-2BE/UCS-2LE and JIS as JIS.
-; With mbstring support this will automatically be converted into the encoding
-; given by corresponding encode setting. When empty mbstring.internal_encoding
-; is used. For the decode settings you can distinguish between motorola and
-; intel byte order. A decode setting cannot be empty.
-;exif.encode_unicode = ISO-8859-15
-;exif.decode_unicode_motorola = UCS-2BE
-;exif.decode_unicode_intel = UCS-2LE
-;exif.encode_jis =
-;exif.decode_jis_motorola = JIS
-;exif.decode_jis_intel = JIS
-
-[Tidy]
-; The path to a default tidy configuration file to use when using tidy
-;tidy.default_config = /usr/local/lib/php/default.tcfg
-
-; Should tidy clean and repair output automatically?
-; WARNING: Do not use this option if you are generating non-html content
-; such as dynamic images
-tidy.clean_output = Off
-
-[soap]
-; Enables or disables WSDL caching feature.
-soap.wsdl_cache_enabled=1
-; Sets the directory name where SOAP extension will put cache files.
-soap.wsdl_cache_dir="/tmp"
-; (time to live) Sets the number of second while cached file will be used
-; instead of original one.
-soap.wsdl_cache_ttl=86400
-
-; Local Variables:
-; tab-width: 4
-; End:
diff --git a/php5.spec.in b/php5.spec.in
deleted file mode 100644
index 97a84b5fb2..0000000000
--- a/php5.spec.in
+++ /dev/null
@@ -1,48 +0,0 @@
-%define version @VERSION@
-%define so_version 5
-%define release 0
-
-Name: php
-Summary: PHP: Hypertext Preprocessor
-Group: Development/Languages
-Version: %{version}
-Release: %{release}
-Copyright: The PHP license (see "LICENSE" file included in distribution)
-Source: http://www.php.net/get/php-%{version}.tar.gz/from/a/mirror
-Icon: php.gif
-URL: http://www.php.net/
-Packager: PHP Group <group@php.net>
-
-BuildRoot: /var/tmp/php-%{version}
-
-%description
-PHP is an HTML-embedded scripting language. Much of its syntax is
-borrowed from C, Java and Perl with a couple of unique PHP-specific
-features thrown in. The goal of the language is to allow web
-developers to write dynamically generated pages quickly.
-
-%prep
-
-%setup
-
-%build
-set -x
-./buildconf
-./configure --prefix=/usr --with-apxs \
- --disable-debug \
- --with-xml=shared \
-
-# figure out configure options options based on what packages are installed
-# to override, use the OVERRIDE_OPTIONS environment variable. To add
-# extra options, use the OPTIONS environment variable.
-
-#test rpm -q MySQL-devel >&/dev/null && OPTIONS="$OPTIONS --with-mysql=shared"
-#test rpm -q solid-devel >&/dev/null && OPTIONS="$OPTIONS --with-solid=shared,/home/solid"
-#test rpm -q postgresql-devel >&/dev/null && OPTIONS="$OPTIONS --with-pgsql=shared"
-test rpm -q expat >&/dev/null && OPTIONS="$OPTIONS --with-xml=shared"
-
-if test "x$OVERRIDE_OPTIONS" = "x"; then
- ./configure --prefix=/usr --with-apxs=$APXS $OPTIONS
-else
- ./configure $OVERRIDE_OPTIONS
-fi
diff --git a/regex/COPYRIGHT b/regex/COPYRIGHT
deleted file mode 100644
index d43362fbfc..0000000000
--- a/regex/COPYRIGHT
+++ /dev/null
@@ -1,20 +0,0 @@
-Copyright 1992, 1993, 1994 Henry Spencer. All rights reserved.
-This software is not subject to any license of the American Telephone
-and Telegraph Company or of the Regents of the University of California.
-
-Permission is granted to anyone to use this software for any purpose on
-any computer system, and to alter it and redistribute it, subject
-to the following restrictions:
-
-1. The author is not responsible for the consequences of use of this
- software, no matter how awful, even if they arise from flaws in it.
-
-2. The origin of this software must not be misrepresented, either by
- explicit claim or by omission. Since few users ever read sources,
- credits must appear in the documentation.
-
-3. Altered versions must be plainly marked as such, and must not be
- misrepresented as being the original software. Since few users
- ever read sources, credits must appear in the documentation.
-
-4. This notice may not be removed or altered.
diff --git a/regex/README b/regex/README
deleted file mode 100644
index cea9b67b66..0000000000
--- a/regex/README
+++ /dev/null
@@ -1,32 +0,0 @@
-alpha3.4 release.
-Thu Mar 17 23:17:18 EST 1994
-henry@zoo.toronto.edu
-
-See WHATSNEW for change listing.
-
-installation notes:
---------
-Read the comments at the beginning of Makefile before running.
-
-Utils.h contains some things that just might have to be modified on
-some systems, as well as a nested include (ugh) of <assert.h>.
-
-The "fake" directory contains quick-and-dirty fakes for some header
-files and routines that old systems may not have. Note also that
--DUSEBCOPY will make utils.h substitute bcopy() for memmove().
-
-After that, "make r" will build regcomp.o, regexec.o, regfree.o,
-and regerror.o (the actual routines), bundle them together into a test
-program, and run regression tests on them. No output is good output.
-
-"make lib" builds just the .o files for the actual routines (when
-you're happy with testing and have adjusted CFLAGS for production),
-and puts them together into libregex.a. You can pick up either the
-library or *.o ("make lib" makes sure there are no other .o files left
-around to confuse things).
-
-Main.c, debug.c, split.c are used for regression testing but are not part
-of the RE routines themselves.
-
-Regex.h goes in /usr/include. All other .h files are internal only.
---------
diff --git a/regex/WHATSNEW b/regex/WHATSNEW
deleted file mode 100644
index 6e82e1dae0..0000000000
--- a/regex/WHATSNEW
+++ /dev/null
@@ -1,92 +0,0 @@
-New in alpha3.4: The complex bug alluded to below has been fixed (in a
-slightly kludgey temporary way that may hurt efficiency a bit; this is
-another "get it out the door for 4.4" release). The tests at the end of
-the tests file have accordingly been uncommented. The primary sign of
-the bug was that something like a?b matching ab matched b rather than ab.
-(The bug was essentially specific to this exact situation, else it would
-have shown up earlier.)
-
-New in alpha3.3: The definition of word boundaries has been altered
-slightly, to more closely match the usual programming notion that "_"
-is an alphabetic. Stuff used for pre-ANSI systems is now in a subdir,
-and the makefile no longer alludes to it in mysterious ways. The
-makefile has generally been cleaned up some. Fixes have been made
-(again!) so that the regression test will run without -DREDEBUG, at
-the cost of weaker checking. A workaround for a bug in some folks'
-<assert.h> has been added. And some more things have been added to
-tests, including a couple right at the end which are commented out
-because the code currently flunks them (complex bug; fix coming).
-Plus the usual minor cleanup.
-
-New in alpha3.2: Assorted bits of cleanup and portability improvement
-(the development base is now a BSDI system using GCC instead of an ancient
-Sun system, and the newer compiler exposed some glitches). Fix for a
-serious bug that affected REs using many [] (including REG_ICASE REs
-because of the way they are implemented), *sometimes*, depending on
-memory-allocation patterns. The header-file prototypes no longer name
-the parameters, avoiding possible name conflicts. The possibility that
-some clot has defined CHAR_MIN as (say) `-128' instead of `(-128)' is
-now handled gracefully. "uchar" is no longer used as an internal type
-name (too many people have the same idea). Still the same old lousy
-performance, alas.
-
-New in alpha3.1: Basically nothing, this release is just a bookkeeping
-convenience. Stay tuned.
-
-New in alpha3.0: Performance is no better, alas, but some fixes have been
-made and some functionality has been added. (This is basically the "get
-it out the door in time for 4.4" release.) One bug fix: regfree() didn't
-free the main internal structure (how embarrassing). It is now possible
-to put NULs in either the RE or the target string, using (resp.) a new
-REG_PEND flag and the old REG_STARTEND flag. The REG_NOSPEC flag to
-regcomp() makes all characters ordinary, so you can match a literal
-string easily (this will become more useful when performance improves!).
-There are now primitives to match beginnings and ends of words, although
-the syntax is disgusting and so is the implementation. The REG_ATOI
-debugging interface has changed a bit. And there has been considerable
-internal cleanup of various kinds.
-
-New in alpha2.3: Split change list out of README, and moved flags notes
-into Makefile. Macro-ized the name of regex(7) in regex(3), since it has
-to change for 4.4BSD. Cleanup work in engine.c, and some new regression
-tests to catch tricky cases thereof.
-
-New in alpha2.2: Out-of-date manpages updated. Regerror() acquires two
-small extensions -- REG_ITOA and REG_ATOI -- which avoid debugging kludges
-in my own test program and might be useful to others for similar purposes.
-The regression test will now compile (and run) without REDEBUG. The
-BRE \$ bug is fixed. Most uses of "uchar" are gone; it's all chars now.
-Char/uchar parameters are now written int/unsigned, to avoid possible
-portability problems with unpromoted parameters. Some unsigned casts have
-been introduced to minimize portability problems with shifting into sign
-bits.
-
-New in alpha2.1: Lots of little stuff, cleanup and fixes. The one big
-thing is that regex.h is now generated, using mkh, rather than being
-supplied in the distribution; due to circularities in dependencies,
-you have to build regex.h explicitly by "make h". The two known bugs
-have been fixed (and the regression test now checks for them), as has a
-problem with assertions not being suppressed in the absence of REDEBUG.
-No performance work yet.
-
-New in alpha2: Backslash-anything is an ordinary character, not an
-error (except, of course, for the handful of backslashed metacharacters
-in BREs), which should reduce script breakage. The regression test
-checks *where* null strings are supposed to match, and has generally
-been tightened up somewhat. Small bug fixes in parameter passing (not
-harmful, but technically errors) and some other areas. Debugging
-invoked by defining REDEBUG rather than not defining NDEBUG.
-
-New in alpha+3: full prototyping for internal routines, using a little
-helper program, mkh, which extracts prototypes given in stylized comments.
-More minor cleanup. Buglet fix: it's CHAR_BIT, not CHAR_BITS. Simple
-pre-screening of input when a literal string is known to be part of the
-RE; this does wonders for performance.
-
-New in alpha+2: minor bits of cleanup. Notably, the number "32" for the
-word width isn't hardwired into regexec.c any more, the public header
-file prototypes the functions if __STDC__ is defined, and some small typos
-in the manpages have been fixed.
-
-New in alpha+1: improvements to the manual pages, and an important
-extension, the REG_STARTEND option to regexec().
diff --git a/regex/cclass.h b/regex/cclass.h
deleted file mode 100644
index df41694b04..0000000000
--- a/regex/cclass.h
+++ /dev/null
@@ -1,30 +0,0 @@
-/* character-class table */
-static struct cclass {
- unsigned char *name;
- unsigned char *chars;
- unsigned char *multis;
-} cclasses[] = {
- {"alnum", "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789", ""},
- {"alpha", "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz",
- ""},
- {"blank", " \t", ""},
- {"cntrl", "\007\b\t\n\v\f\r\1\2\3\4\5\6\16\17\20\21\22\23\24\
-\25\26\27\30\31\32\33\34\35\36\37\177", ""},
- {"digit", "0123456789", ""},
- {"graph", "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz\
-0123456789!\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~",
- ""},
- {"lower", "abcdefghijklmnopqrstuvwxyz",
- ""},
- {"print", "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz\
-0123456789!\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~ ",
- ""},
- {"punct", "!\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~",
- ""},
- {"space", "\t\n\v\f\r ", ""},
- {"upper", "ABCDEFGHIJKLMNOPQRSTUVWXYZ",
- ""},
- {"xdigit", "0123456789ABCDEFabcdef",
- ""},
- {NULL, 0, ""}
-};
diff --git a/regex/cname.h b/regex/cname.h
deleted file mode 100644
index 670b273882..0000000000
--- a/regex/cname.h
+++ /dev/null
@@ -1,102 +0,0 @@
-/* character-name table */
-static struct cname {
- char *name;
- char code;
-} cnames[] = {
- {"NUL", '\0'},
- {"SOH", '\001'},
- {"STX", '\002'},
- {"ETX", '\003'},
- {"EOT", '\004'},
- {"ENQ", '\005'},
- {"ACK", '\006'},
- {"BEL", '\007'},
- {"alert", '\007'},
- {"BS", '\010'},
- {"backspace", '\b'},
- {"HT", '\011'},
- {"tab", '\t'},
- {"LF", '\012'},
- {"newline", '\n'},
- {"VT", '\013'},
- {"vertical-tab", '\v'},
- {"FF", '\014'},
- {"form-feed", '\f'},
- {"CR", '\015'},
- {"carriage-return", '\r'},
- {"SO", '\016'},
- {"SI", '\017'},
- {"DLE", '\020'},
- {"DC1", '\021'},
- {"DC2", '\022'},
- {"DC3", '\023'},
- {"DC4", '\024'},
- {"NAK", '\025'},
- {"SYN", '\026'},
- {"ETB", '\027'},
- {"CAN", '\030'},
- {"EM", '\031'},
- {"SUB", '\032'},
- {"ESC", '\033'},
- {"IS4", '\034'},
- {"FS", '\034'},
- {"IS3", '\035'},
- {"GS", '\035'},
- {"IS2", '\036'},
- {"RS", '\036'},
- {"IS1", '\037'},
- {"US", '\037'},
- {"space", ' '},
- {"exclamation-mark", '!'},
- {"quotation-mark", '"'},
- {"number-sign", '#'},
- {"dollar-sign", '$'},
- {"percent-sign", '%'},
- {"ampersand", '&'},
- {"apostrophe", '\''},
- {"left-parenthesis", '('},
- {"right-parenthesis", ')'},
- {"asterisk", '*'},
- {"plus-sign", '+'},
- {"comma", ','},
- {"hyphen", '-'},
- {"hyphen-minus", '-'},
- {"period", '.'},
- {"full-stop", '.'},
- {"slash", '/'},
- {"solidus", '/'},
- {"zero", '0'},
- {"one", '1'},
- {"two", '2'},
- {"three", '3'},
- {"four", '4'},
- {"five", '5'},
- {"six", '6'},
- {"seven", '7'},
- {"eight", '8'},
- {"nine", '9'},
- {"colon", ':'},
- {"semicolon", ';'},
- {"less-than-sign", '<'},
- {"equals-sign", '='},
- {"greater-than-sign", '>'},
- {"question-mark", '?'},
- {"commercial-at", '@'},
- {"left-square-bracket", '['},
- {"backslash", '\\'},
- {"reverse-solidus", '\\'},
- {"right-square-bracket", ']'},
- {"circumflex", '^'},
- {"circumflex-accent", '^'},
- {"underscore", '_'},
- {"low-line", '_'},
- {"grave-accent", '`'},
- {"left-brace", '{'},
- {"left-curly-bracket", '{'},
- {"vertical-line", '|'},
- {"right-brace", '}'},
- {"right-curly-bracket", '}'},
- {"tilde", '~'},
- {"DEL", '\177'},
- {NULL, 0},
-};
diff --git a/regex/debug.c b/regex/debug.c
deleted file mode 100644
index 3db93ef293..0000000000
--- a/regex/debug.c
+++ /dev/null
@@ -1,242 +0,0 @@
-#include <stdio.h>
-#include <string.h>
-#include <ctype.h>
-#include <limits.h>
-#include <stdlib.h>
-#include <sys/types.h>
-#include <regex.h>
-
-#include "utils.h"
-#include "regex2.h"
-#include "debug.ih"
-
-/*
- - regprint - print a regexp for debugging
- == void regprint(regex_t *r, FILE *d);
- */
-void
-regprint(r, d)
-regex_t *r;
-FILE *d;
-{
- register struct re_guts *g = r->re_g;
- register int i;
- register int c;
- register int last;
- int nincat[NC];
-
- fprintf(d, "%ld states, %d categories", (long)g->nstates,
- g->ncategories);
- fprintf(d, ", first %ld last %ld", (long)g->firststate,
- (long)g->laststate);
- if (g->iflags&USEBOL)
- fprintf(d, ", USEBOL");
- if (g->iflags&USEEOL)
- fprintf(d, ", USEEOL");
- if (g->iflags&BAD)
- fprintf(d, ", BAD");
- if (g->nsub > 0)
- fprintf(d, ", nsub=%ld", (long)g->nsub);
- if (g->must != NULL)
- fprintf(d, ", must(%ld) `%*s'", (long)g->mlen, (int)g->mlen,
- g->must);
- if (g->backrefs)
- fprintf(d, ", backrefs");
- if (g->nplus > 0)
- fprintf(d, ", nplus %ld", (long)g->nplus);
- fprintf(d, "\n");
- s_print(g, d);
- for (i = 0; i < g->ncategories; i++) {
- nincat[i] = 0;
- for (c = CHAR_MIN; c <= CHAR_MAX; c++)
- if (g->categories[c] == i)
- nincat[i]++;
- }
- fprintf(d, "cc0#%d", nincat[0]);
- for (i = 1; i < g->ncategories; i++)
- if (nincat[i] == 1) {
- for (c = CHAR_MIN; c <= CHAR_MAX; c++)
- if (g->categories[c] == i)
- break;
- fprintf(d, ", %d=%s", i, regchar(c));
- }
- fprintf(d, "\n");
- for (i = 1; i < g->ncategories; i++)
- if (nincat[i] != 1) {
- fprintf(d, "cc%d\t", i);
- last = -1;
- for (c = CHAR_MIN; c <= CHAR_MAX+1; c++) /* +1 does flush */
- if (c <= CHAR_MAX && g->categories[c] == i) {
- if (last < 0) {
- fprintf(d, "%s", regchar(c));
- last = c;
- }
- } else {
- if (last >= 0) {
- if (last != c-1)
- fprintf(d, "-%s",
- regchar(c-1));
- last = -1;
- }
- }
- fprintf(d, "\n");
- }
-}
-
-/*
- - s_print - print the strip for debugging
- == static void s_print(register struct re_guts *g, FILE *d);
- */
-static void
-s_print(g, d)
-register struct re_guts *g;
-FILE *d;
-{
- register sop *s;
- register cset *cs;
- register int i;
- register int done = 0;
- register sop opnd;
- register int col = 0;
- register int last;
- register sopno offset = 2;
-# define GAP() { if (offset % 5 == 0) { \
- if (col > 40) { \
- fprintf(d, "\n\t"); \
- col = 0; \
- } else { \
- fprintf(d, " "); \
- col++; \
- } \
- } else \
- col++; \
- offset++; \
- }
-
- if (OP(g->strip[0]) != OEND)
- fprintf(d, "missing initial OEND!\n");
- for (s = &g->strip[1]; !done; s++) {
- opnd = OPND(*s);
- switch (OP(*s)) {
- case OEND:
- fprintf(d, "\n");
- done = 1;
- break;
- case OCHAR:
- if (strchr("\\|()^$.[+*?{}!<> ", (char)opnd) != NULL)
- fprintf(d, "\\%c", (unsigned char)opnd);
- else
- fprintf(d, "%s", regchar((unsigned char)opnd));
- break;
- case OBOL:
- fprintf(d, "^");
- break;
- case OEOL:
- fprintf(d, "$");
- break;
- case OBOW:
- fprintf(d, "\\{");
- break;
- case OEOW:
- fprintf(d, "\\}");
- break;
- case OANY:
- fprintf(d, ".");
- break;
- case OANYOF:
- fprintf(d, "[(%ld)", (long)opnd);
- cs = &g->sets[opnd];
- last = -1;
- for (i = 0; i < g->csetsize+1; i++) /* +1 flushes */
- if (CHIN(cs, i) && i < g->csetsize) {
- if (last < 0) {
- fprintf(d, "%s", regchar(i));
- last = i;
- }
- } else {
- if (last >= 0) {
- if (last != i-1)
- fprintf(d, "-%s",
- regchar(i-1));
- last = -1;
- }
- }
- fprintf(d, "]");
- break;
- case OBACK_:
- fprintf(d, "(\\<%ld>", (long)opnd);
- break;
- case O_BACK:
- fprintf(d, "<%ld>\\)", (long)opnd);
- break;
- case OPLUS_:
- fprintf(d, "(+");
- if (OP(*(s+opnd)) != O_PLUS)
- fprintf(d, "<%ld>", (long)opnd);
- break;
- case O_PLUS:
- if (OP(*(s-opnd)) != OPLUS_)
- fprintf(d, "<%ld>", (long)opnd);
- fprintf(d, "+)");
- break;
- case OQUEST_:
- fprintf(d, "(?");
- if (OP(*(s+opnd)) != O_QUEST)
- fprintf(d, "<%ld>", (long)opnd);
- break;
- case O_QUEST:
- if (OP(*(s-opnd)) != OQUEST_)
- fprintf(d, "<%ld>", (long)opnd);
- fprintf(d, "?)");
- break;
- case OLPAREN:
- fprintf(d, "((<%ld>", (long)opnd);
- break;
- case ORPAREN:
- fprintf(d, "<%ld>))", (long)opnd);
- break;
- case OCH_:
- fprintf(d, "<");
- if (OP(*(s+opnd)) != OOR2)
- fprintf(d, "<%ld>", (long)opnd);
- break;
- case OOR1:
- if (OP(*(s-opnd)) != OOR1 && OP(*(s-opnd)) != OCH_)
- fprintf(d, "<%ld>", (long)opnd);
- fprintf(d, "|");
- break;
- case OOR2:
- fprintf(d, "|");
- if (OP(*(s+opnd)) != OOR2 && OP(*(s+opnd)) != O_CH)
- fprintf(d, "<%ld>", (long)opnd);
- break;
- case O_CH:
- if (OP(*(s-opnd)) != OOR1)
- fprintf(d, "<%ld>", (long)opnd);
- fprintf(d, ">");
- break;
- default:
- fprintf(d, "!%ld(%ld)!", OP(*s), opnd);
- break;
- }
- if (!done)
- GAP();
- }
-}
-
-/*
- - regchar - make a character printable
- == static char *regchar(int ch);
- */
-static unsigned char * /* -> representation */
-regchar(ch)
-int ch;
-{
- static unsigned char buf[10];
-
- if (isprint(ch) || ch == ' ')
- sprintf(buf, "%c", ch);
- else
- sprintf(buf, "\\%o", ch);
- return(buf);
-}
diff --git a/regex/debug.ih b/regex/debug.ih
deleted file mode 100644
index 5f40ff7917..0000000000
--- a/regex/debug.ih
+++ /dev/null
@@ -1,14 +0,0 @@
-/* ========= begin header generated by ./mkh ========= */
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/* === debug.c === */
-void regprint(regex_t *r, FILE *d);
-static void s_print(register struct re_guts *g, FILE *d);
-static char *regchar(int ch);
-
-#ifdef __cplusplus
-}
-#endif
-/* ========= end header generated by ./mkh ========= */
diff --git a/regex/engine.c b/regex/engine.c
deleted file mode 100644
index 0682267f61..0000000000
--- a/regex/engine.c
+++ /dev/null
@@ -1,1019 +0,0 @@
-/*
- * The matching engine and friends. This file is #included by regexec.c
- * after suitable #defines of a variety of macros used herein, so that
- * different state representations can be used without duplicating masses
- * of code.
- */
-
-#ifdef SNAMES
-#define matcher smatcher
-#define fast sfast
-#define slow sslow
-#define dissect sdissect
-#define backref sbackref
-#define step sstep
-#define print sprint
-#define at sat
-#define match smat
-#endif
-#ifdef LNAMES
-#define matcher lmatcher
-#define fast lfast
-#define slow lslow
-#define dissect ldissect
-#define backref lbackref
-#define step lstep
-#define print lprint
-#define at lat
-#define match lmat
-#endif
-
-/* another structure passed up and down to avoid zillions of parameters */
-struct match {
- struct re_guts *g;
- int eflags;
- regmatch_t *pmatch; /* [nsub+1] (0 element unused) */
- unsigned char *offp; /* offsets work from here */
- unsigned char *beginp; /* start of string -- virtual NUL precedes */
- unsigned char *endp; /* end of string -- virtual NUL here */
- unsigned char *coldp; /* can be no match starting before here */
- unsigned char **lastpos; /* [nplus+1] */
- STATEVARS;
- states st; /* current states */
- states fresh; /* states for a fresh start */
- states tmp; /* temporary */
- states empty; /* empty set of states */
-};
-
-#include "engine.ih"
-
-#ifdef REDEBUG
-#define SP(t, s, c) print(m, t, s, c, stdout)
-#define AT(t, p1, p2, s1, s2) at(m, t, p1, p2, s1, s2)
-#define NOTE(str) { if (m->eflags&REG_TRACE) printf("=%s\n", (str)); }
-#else
-#define SP(t, s, c) /* nothing */
-#define AT(t, p1, p2, s1, s2) /* nothing */
-#define NOTE(s) /* nothing */
-#endif
-
-/*
- - matcher - the actual matching engine
- == static int matcher(register struct re_guts *g, char *string, \
- == size_t nmatch, regmatch_t pmatch[], int eflags);
- */
-static int /* 0 success, REG_NOMATCH failure */
-matcher(g, string, nmatch, pmatch, eflags)
-register struct re_guts *g;
-unsigned char *string;
-size_t nmatch;
-regmatch_t pmatch[];
-int eflags;
-{
- register unsigned char *endp;
- register size_t i;
- struct match mv;
- register struct match *m = &mv;
- register unsigned char *dp;
- const register sopno gf = g->firststate+1; /* +1 for OEND */
- const register sopno gl = g->laststate;
- unsigned char *start;
- unsigned char *stop;
-
- /* simplify the situation where possible */
- if (g->cflags&REG_NOSUB)
- nmatch = 0;
- if (eflags&REG_STARTEND) {
- start = string + pmatch[0].rm_so;
- stop = string + pmatch[0].rm_eo;
- } else {
- start = string;
- stop = start + strlen(start);
- }
- if (stop < start)
- return(REG_INVARG);
-
- /* prescreening; this does wonders for this rather slow code */
- if (g->must != NULL) {
- for (dp = start; dp < stop; dp++)
- if (*dp == g->must[0] && stop - dp >= g->mlen &&
- memcmp(dp, g->must, (size_t)g->mlen) == 0)
- break;
- if (dp == stop) /* we didn't find g->must */
- return(REG_NOMATCH);
- }
-
- /* match struct setup */
- m->g = g;
- m->eflags = eflags;
- m->pmatch = NULL;
- m->lastpos = NULL;
- m->offp = string;
- m->beginp = start;
- m->endp = stop;
- STATESETUP(m, 4);
- SETUP(m->st);
- SETUP(m->fresh);
- SETUP(m->tmp);
- SETUP(m->empty);
- CLEAR(m->empty);
-
- /* this loop does only one repetition except for backrefs */
- for (;;) {
- endp = fast(m, start, stop, gf, gl);
- if (endp == NULL) { /* a miss */
- STATETEARDOWN(m);
- return(REG_NOMATCH);
- }
- if (nmatch == 0 && !g->backrefs)
- break; /* no further info needed */
-
- /* where? */
- assert(m->coldp != NULL);
- for (;;) {
- NOTE("finding start");
- endp = slow(m, m->coldp, stop, gf, gl);
- if (endp != NULL)
- break;
- assert(m->coldp < m->endp);
- m->coldp++;
- }
- if (nmatch == 1 && !g->backrefs)
- break; /* no further info needed */
-
- /* oh my, he wants the subexpressions... */
- if (m->pmatch == NULL)
- m->pmatch = (regmatch_t *)malloc((m->g->nsub + 1) *
- sizeof(regmatch_t));
- if (m->pmatch == NULL) {
- STATETEARDOWN(m);
- return(REG_ESPACE);
- }
- for (i = 1; i <= m->g->nsub; i++)
- m->pmatch[i].rm_so = m->pmatch[i].rm_eo = -1;
- if (!g->backrefs && !(m->eflags&REG_BACKR)) {
- NOTE("dissecting");
- dp = dissect(m, m->coldp, endp, gf, gl);
- } else {
- if (g->nplus > 0 && m->lastpos == NULL)
- m->lastpos = (unsigned char **)malloc((g->nplus+1) *
- sizeof(unsigned char *));
- if (g->nplus > 0 && m->lastpos == NULL) {
- free((char *)m->pmatch);
- STATETEARDOWN(m);
- return(REG_ESPACE);
- }
- NOTE("backref dissect");
- dp = backref(m, m->coldp, endp, gf, gl, (sopno)0);
- }
- if (dp != NULL)
- break;
-
- /* uh-oh... we couldn't find a subexpression-level match */
- assert(g->backrefs); /* must be back references doing it */
- assert(g->nplus == 0 || m->lastpos != NULL);
- for (;;) {
- if (dp != NULL || endp <= m->coldp)
- break; /* defeat */
- NOTE("backoff");
- endp = slow(m, m->coldp, endp-1, gf, gl);
- if (endp == NULL)
- break; /* defeat */
- /* try it on a shorter possibility */
-#ifndef NDEBUG
- for (i = 1; i <= m->g->nsub; i++) {
- assert(m->pmatch[i].rm_so == -1);
- assert(m->pmatch[i].rm_eo == -1);
- }
-#endif
- NOTE("backoff dissect");
- dp = backref(m, m->coldp, endp, gf, gl, (sopno)0);
- }
- assert(dp == NULL || dp == endp);
- if (dp != NULL) /* found a shorter one */
- break;
-
- /* despite initial appearances, there is no match here */
- NOTE("false alarm");
- start = m->coldp + 1; /* recycle starting later */
- assert(start <= stop);
- }
-
- /* fill in the details if requested */
- if (nmatch > 0) {
- pmatch[0].rm_so = m->coldp - m->offp;
- pmatch[0].rm_eo = endp - m->offp;
- }
- if (nmatch > 1) {
- assert(m->pmatch != NULL);
- for (i = 1; i < nmatch; i++)
- if (i <= m->g->nsub)
- pmatch[i] = m->pmatch[i];
- else {
- pmatch[i].rm_so = -1;
- pmatch[i].rm_eo = -1;
- }
- }
-
- if (m->pmatch != NULL)
- free((char *)m->pmatch);
- if (m->lastpos != NULL)
- free((char *)m->lastpos);
- STATETEARDOWN(m);
- return(0);
-}
-
-/*
- - dissect - figure out what matched what, no back references
- == static unsigned char *dissect(register struct match *m, unsigned char *start, \
- == unsigned char *stop, sopno startst, sopno stopst);
- */
-static unsigned char * /* == stop (success) always */
-dissect(m, start, stop, startst, stopst)
-register struct match *m;
-unsigned char *start;
-unsigned char *stop;
-sopno startst;
-sopno stopst;
-{
- register int i;
- register sopno ss; /* start sop of current subRE */
- register sopno es; /* end sop of current subRE */
- register unsigned char *sp; /* start of string matched by it */
- register unsigned char *stp; /* string matched by it cannot pass here */
- register unsigned char *rest; /* start of rest of string */
- register unsigned char *tail; /* string unmatched by rest of RE */
- register sopno ssub; /* start sop of subsubRE */
- register sopno esub; /* end sop of subsubRE */
- register unsigned char *ssp; /* start of string matched by subsubRE */
- register unsigned char *sep; /* end of string matched by subsubRE */
- register unsigned char *oldssp; /* previous ssp */
- register unsigned char *dp;
-
- AT("diss", start, stop, startst, stopst);
- sp = start;
- for (ss = startst; ss < stopst; ss = es) {
- /* identify end of subRE */
- es = ss;
- switch (OP(m->g->strip[es])) {
- case OPLUS_:
- case OQUEST_:
- es += OPND(m->g->strip[es]);
- break;
- case OCH_:
- while (OP(m->g->strip[es]) != O_CH)
- es += OPND(m->g->strip[es]);
- break;
- }
- es++;
-
- /* figure out what it matched */
- switch (OP(m->g->strip[ss])) {
- case OEND:
- assert(PHP_REGEX_NOPE);
- break;
- case OCHAR:
- sp++;
- break;
- case OBOL:
- case OEOL:
- case OBOW:
- case OEOW:
- break;
- case OANY:
- case OANYOF:
- sp++;
- break;
- case OBACK_:
- case O_BACK:
- assert(PHP_REGEX_NOPE);
- break;
- /* cases where length of match is hard to find */
- case OQUEST_:
- stp = stop;
- for (;;) {
- /* how long could this one be? */
- rest = slow(m, sp, stp, ss, es);
- assert(rest != NULL); /* it did match */
- /* could the rest match the rest? */
- tail = slow(m, rest, stop, es, stopst);
- if (tail == stop)
- break; /* yes! */
- /* no -- try a shorter match for this one */
- stp = rest - 1;
- assert(stp >= sp); /* it did work */
- }
- ssub = ss + 1;
- esub = es - 1;
- /* did innards match? */
- if (slow(m, sp, rest, ssub, esub) != NULL) {
- dp = dissect(m, sp, rest, ssub, esub);
- assert(dp == rest);
- } else /* no */
- assert(sp == rest);
- sp = rest;
- break;
- case OPLUS_:
- stp = stop;
- for (;;) {
- /* how long could this one be? */
- rest = slow(m, sp, stp, ss, es);
- assert(rest != NULL); /* it did match */
- /* could the rest match the rest? */
- tail = slow(m, rest, stop, es, stopst);
- if (tail == stop)
- break; /* yes! */
- /* no -- try a shorter match for this one */
- stp = rest - 1;
- assert(stp >= sp); /* it did work */
- }
- ssub = ss + 1;
- esub = es - 1;
- ssp = sp;
- oldssp = ssp;
- for (;;) { /* find last match of innards */
- sep = slow(m, ssp, rest, ssub, esub);
- if (sep == NULL || sep == ssp)
- break; /* failed or matched null */
- oldssp = ssp; /* on to next try */
- ssp = sep;
- }
- if (sep == NULL) {
- /* last successful match */
- sep = ssp;
- ssp = oldssp;
- }
- assert(sep == rest); /* must exhaust substring */
- assert(slow(m, ssp, sep, ssub, esub) == rest);
- dp = dissect(m, ssp, sep, ssub, esub);
- assert(dp == sep);
- sp = rest;
- break;
- case OCH_:
- stp = stop;
- for (;;) {
- /* how long could this one be? */
- rest = slow(m, sp, stp, ss, es);
- assert(rest != NULL); /* it did match */
- /* could the rest match the rest? */
- tail = slow(m, rest, stop, es, stopst);
- if (tail == stop)
- break; /* yes! */
- /* no -- try a shorter match for this one */
- stp = rest - 1;
- assert(stp >= sp); /* it did work */
- }
- ssub = ss + 1;
- esub = ss + OPND(m->g->strip[ss]) - 1;
- assert(OP(m->g->strip[esub]) == OOR1);
- for (;;) { /* find first matching branch */
- if (slow(m, sp, rest, ssub, esub) == rest)
- break; /* it matched all of it */
- /* that one missed, try next one */
- assert(OP(m->g->strip[esub]) == OOR1);
- esub++;
- assert(OP(m->g->strip[esub]) == OOR2);
- ssub = esub + 1;
- esub += OPND(m->g->strip[esub]);
- if (OP(m->g->strip[esub]) == OOR2)
- esub--;
- else
- assert(OP(m->g->strip[esub]) == O_CH);
- }
- dp = dissect(m, sp, rest, ssub, esub);
- assert(dp == rest);
- sp = rest;
- break;
- case O_PLUS:
- case O_QUEST:
- case OOR1:
- case OOR2:
- case O_CH:
- assert(PHP_REGEX_NOPE);
- break;
- case OLPAREN:
- i = OPND(m->g->strip[ss]);
- assert(0 < i && i <= m->g->nsub);
- m->pmatch[i].rm_so = sp - m->offp;
- break;
- case ORPAREN:
- i = OPND(m->g->strip[ss]);
- assert(0 < i && i <= m->g->nsub);
- m->pmatch[i].rm_eo = sp - m->offp;
- break;
- default: /* uh oh */
- assert(PHP_REGEX_NOPE);
- break;
- }
- }
-
- assert(sp == stop);
- return(sp);
-}
-
-/*
- - backref - figure out what matched what, figuring in back references
- == static unsigned char *backref(register struct match *m, unsigned char *start, \
- == unsigned char *stop, sopno startst, sopno stopst, sopno lev);
- */
-static unsigned char * /* == stop (success) or NULL (failure) */
-backref(m, start, stop, startst, stopst, lev)
-register struct match *m;
-unsigned char *start;
-unsigned char *stop;
-sopno startst;
-sopno stopst;
-sopno lev; /* PLUS nesting level */
-{
- register int i;
- register sopno ss; /* start sop of current subRE */
- register unsigned char *sp; /* start of string matched by it */
- register sopno ssub; /* start sop of subsubRE */
- register sopno esub; /* end sop of subsubRE */
- register unsigned char *ssp; /* start of string matched by subsubRE */
- register unsigned char *dp;
- register size_t len;
- register int hard;
- register sop s;
- register regoff_t offsave;
- register cset *cs;
-
- AT("back", start, stop, startst, stopst);
- sp = start;
-
- /* get as far as we can with easy stuff */
- hard = 0;
- for (ss = startst; !hard && ss < stopst; ss++)
- switch (OP(s = m->g->strip[ss])) {
- case OCHAR:
- if (sp == stop || *sp++ != (unsigned char)OPND(s))
- return(NULL);
- break;
- case OANY:
- if (sp == stop)
- return(NULL);
- sp++;
- break;
- case OANYOF:
- cs = &m->g->sets[OPND(s)];
- if (sp == stop || !CHIN(cs, *sp++))
- return(NULL);
- break;
- case OBOL:
- if ( (sp == m->beginp && !(m->eflags&REG_NOTBOL)) ||
- (sp < m->endp && *(sp-1) == '\n' &&
- (m->g->cflags&REG_NEWLINE)) )
- { /* yes */ }
- else
- return(NULL);
- break;
- case OEOL:
- if ( (sp == m->endp && !(m->eflags&REG_NOTEOL)) ||
- (sp < m->endp && *sp == '\n' &&
- (m->g->cflags&REG_NEWLINE)) )
- { /* yes */ }
- else
- return(NULL);
- break;
- case OBOW:
- if (( (sp == m->beginp && !(m->eflags&REG_NOTBOL)) ||
- (sp < m->endp && *(sp-1) == '\n' &&
- (m->g->cflags&REG_NEWLINE)) ||
- (sp > m->beginp &&
- !ISWORD(*(sp-1))) ) &&
- (sp < m->endp && ISWORD(*sp)) )
- { /* yes */ }
- else
- return(NULL);
- break;
- case OEOW:
- if (( (sp == m->endp && !(m->eflags&REG_NOTEOL)) ||
- (sp < m->endp && *sp == '\n' &&
- (m->g->cflags&REG_NEWLINE)) ||
- (sp < m->endp && !ISWORD(*sp)) ) &&
- (sp > m->beginp && ISWORD(*(sp-1))) )
- { /* yes */ }
- else
- return(NULL);
- break;
- case O_QUEST:
- break;
- case OOR1: /* matches null but needs to skip */
- ss++;
- s = m->g->strip[ss];
- do {
- assert(OP(s) == OOR2);
- ss += OPND(s);
- } while (OP(s = m->g->strip[ss]) != O_CH);
- /* note that the ss++ gets us past the O_CH */
- break;
- default: /* have to make a choice */
- hard = 1;
- break;
- }
- if (!hard) { /* that was it! */
- if (sp != stop)
- return(NULL);
- return(sp);
- }
- ss--; /* adjust for the for's final increment */
-
- /* the hard stuff */
- AT("hard", sp, stop, ss, stopst);
- s = m->g->strip[ss];
- switch (OP(s)) {
- case OBACK_: /* the vilest depths */
- i = OPND(s);
- assert(0 < i && i <= m->g->nsub);
- if (m->pmatch[i].rm_eo == -1)
- return(NULL);
- assert(m->pmatch[i].rm_so != -1);
- len = m->pmatch[i].rm_eo - m->pmatch[i].rm_so;
- assert(stop - m->beginp >= len);
- if (sp > stop - len)
- return(NULL); /* not enough left to match */
- ssp = m->offp + m->pmatch[i].rm_so;
- if (memcmp(sp, ssp, len) != 0)
- return(NULL);
- while (m->g->strip[ss] != SOP(O_BACK, i))
- ss++;
- return(backref(m, sp+len, stop, ss+1, stopst, lev));
- break;
- case OQUEST_: /* to null or not */
- dp = backref(m, sp, stop, ss+1, stopst, lev);
- if (dp != NULL)
- return(dp); /* not */
- return(backref(m, sp, stop, ss+OPND(s)+1, stopst, lev));
- break;
- case OPLUS_:
- assert(m->lastpos != NULL);
- assert(lev+1 <= m->g->nplus);
- m->lastpos[lev+1] = sp;
- return(backref(m, sp, stop, ss+1, stopst, lev+1));
- break;
- case O_PLUS:
- if (sp == m->lastpos[lev]) /* last pass matched null */
- return(backref(m, sp, stop, ss+1, stopst, lev-1));
- /* try another pass */
- m->lastpos[lev] = sp;
- dp = backref(m, sp, stop, ss-OPND(s)+1, stopst, lev);
- if (dp == NULL)
- return(backref(m, sp, stop, ss+1, stopst, lev-1));
- else
- return(dp);
- break;
- case OCH_: /* find the right one, if any */
- ssub = ss + 1;
- esub = ss + OPND(s) - 1;
- assert(OP(m->g->strip[esub]) == OOR1);
- for (;;) { /* find first matching branch */
- dp = backref(m, sp, stop, ssub, esub, lev);
- if (dp != NULL)
- return(dp);
- /* that one missed, try next one */
- if (OP(m->g->strip[esub]) == O_CH)
- return(NULL); /* there is none */
- esub++;
- assert(OP(m->g->strip[esub]) == OOR2);
- ssub = esub + 1;
- esub += OPND(m->g->strip[esub]);
- if (OP(m->g->strip[esub]) == OOR2)
- esub--;
- else
- assert(OP(m->g->strip[esub]) == O_CH);
- }
- break;
- case OLPAREN: /* must undo assignment if rest fails */
- i = OPND(s);
- assert(0 < i && i <= m->g->nsub);
- offsave = m->pmatch[i].rm_so;
- m->pmatch[i].rm_so = sp - m->offp;
- dp = backref(m, sp, stop, ss+1, stopst, lev);
- if (dp != NULL)
- return(dp);
- m->pmatch[i].rm_so = offsave;
- return(NULL);
- break;
- case ORPAREN: /* must undo assignment if rest fails */
- i = OPND(s);
- assert(0 < i && i <= m->g->nsub);
- offsave = m->pmatch[i].rm_eo;
- m->pmatch[i].rm_eo = sp - m->offp;
- dp = backref(m, sp, stop, ss+1, stopst, lev);
- if (dp != NULL)
- return(dp);
- m->pmatch[i].rm_eo = offsave;
- return(NULL);
- break;
- default: /* uh oh */
- assert(PHP_REGEX_NOPE);
- break;
- }
-
- /* "can't happen" */
- assert(PHP_REGEX_NOPE);
- /* NOTREACHED */
- return((unsigned char *)NULL); /* dummy */
-}
-
-/*
- - fast - step through the string at top speed
- == static unsigned char *fast(register struct match *m, unsigned char *start, \
- == unsigned char *stop, sopno startst, sopno stopst);
- */
-static unsigned char * /* where tentative match ended, or NULL */
-fast(m, start, stop, startst, stopst)
-register struct match *m;
-unsigned char *start;
-unsigned char *stop;
-sopno startst;
-sopno stopst;
-{
- register states st = m->st;
- register states fresh = m->fresh;
- register states tmp = m->tmp;
- register unsigned char *p = start;
- register int c = (start == m->beginp) ? OUT : *(start-1);
- register int lastc; /* previous c */
- register int flagch;
- register int i;
- register unsigned char *coldp; /* last p after which no match was underway */
-
- CLEAR(st);
- SET1(st, startst);
- st = step(m->g, startst, stopst, st, NOTHING, st);
- ASSIGN(fresh, st);
- SP("start", st, *p);
- coldp = NULL;
- for (;;) {
- /* next character */
- lastc = c;
- c = (p == m->endp) ? OUT : *p;
- if (EQ(st, fresh))
- coldp = p;
-
- /* is there an EOL and/or BOL between lastc and c? */
- flagch = '\0';
- i = 0;
- if ( (lastc == '\n' && m->g->cflags&REG_NEWLINE) ||
- (lastc == OUT && !(m->eflags&REG_NOTBOL)) ) {
- flagch = BOL;
- i = m->g->nbol;
- }
- if ( (c == '\n' && m->g->cflags&REG_NEWLINE) ||
- (c == OUT && !(m->eflags&REG_NOTEOL)) ) {
- flagch = (flagch == BOL) ? BOLEOL : EOL;
- i += m->g->neol;
- }
- if (i != 0) {
- for (; i > 0; i--)
- st = step(m->g, startst, stopst, st, flagch, st);
- SP("boleol", st, c);
- }
-
- /* how about a word boundary? */
- if ( (flagch == BOL || (lastc != OUT && !ISWORD(lastc))) &&
- (c != OUT && ISWORD(c)) ) {
- flagch = BOW;
- }
- if ( (lastc != OUT && ISWORD(lastc)) &&
- (flagch == EOL || (c != OUT && !ISWORD(c))) ) {
- flagch = EOW;
- }
- if (flagch == BOW || flagch == EOW) {
- st = step(m->g, startst, stopst, st, flagch, st);
- SP("boweow", st, c);
- }
-
- /* are we done? */
- if (ISSET(st, stopst) || p == stop)
- break; /* NOTE BREAK OUT */
-
- /* no, we must deal with this character */
- ASSIGN(tmp, st);
- ASSIGN(st, fresh);
- assert(c != OUT);
- st = step(m->g, startst, stopst, tmp, c, st);
- SP("aft", st, c);
- assert(EQ(step(m->g, startst, stopst, st, NOTHING, st), st));
- p++;
- }
-
- assert(coldp != NULL);
- m->coldp = coldp;
- if (ISSET(st, stopst))
- return(p+1);
- else
- return(NULL);
-}
-
-/*
- - slow - step through the string more deliberately
- == static unsigned char *slow(register struct match *m, unsigned char *start, \
- == unsigned char *stop, sopno startst, sopno stopst);
- */
-static unsigned char * /* where it ended */
-slow(m, start, stop, startst, stopst)
-register struct match *m;
-unsigned char *start;
-unsigned char *stop;
-sopno startst;
-sopno stopst;
-{
- register states st = m->st;
- register states empty = m->empty;
- register states tmp = m->tmp;
- register unsigned char *p = start;
- register int c = (start == m->beginp) ? OUT : *(start-1);
- register int lastc; /* previous c */
- register int flagch;
- register int i;
- register unsigned char *matchp; /* last p at which a match ended */
-
- AT("slow", start, stop, startst, stopst);
- CLEAR(st);
- SET1(st, startst);
- SP("sstart", st, *p);
- st = step(m->g, startst, stopst, st, NOTHING, st);
- matchp = NULL;
- for (;;) {
- /* next character */
- lastc = c;
- c = (p == m->endp) ? OUT : *p;
-
- /* is there an EOL and/or BOL between lastc and c? */
- flagch = '\0';
- i = 0;
- if ( (lastc == '\n' && m->g->cflags&REG_NEWLINE) ||
- (lastc == OUT && !(m->eflags&REG_NOTBOL)) ) {
- flagch = BOL;
- i = m->g->nbol;
- }
- if ( (c == '\n' && m->g->cflags&REG_NEWLINE) ||
- (c == OUT && !(m->eflags&REG_NOTEOL)) ) {
- flagch = (flagch == BOL) ? BOLEOL : EOL;
- i += m->g->neol;
- }
- if (i != 0) {
- for (; i > 0; i--)
- st = step(m->g, startst, stopst, st, flagch, st);
- SP("sboleol", st, c);
- }
-
- /* how about a word boundary? */
- if ( (flagch == BOL || (lastc != OUT && !ISWORD(lastc))) &&
- (c != OUT && ISWORD(c)) ) {
- flagch = BOW;
- }
- if ( (lastc != OUT && ISWORD(lastc)) &&
- (flagch == EOL || (c != OUT && !ISWORD(c))) ) {
- flagch = EOW;
- }
- if (flagch == BOW || flagch == EOW) {
- st = step(m->g, startst, stopst, st, flagch, st);
- SP("sboweow", st, c);
- }
-
- /* are we done? */
- if (ISSET(st, stopst))
- matchp = p;
- if (EQ(st, empty) || p == stop)
- break; /* NOTE BREAK OUT */
-
- /* no, we must deal with this character */
- ASSIGN(tmp, st);
- ASSIGN(st, empty);
- assert(c != OUT);
- st = step(m->g, startst, stopst, tmp, c, st);
- SP("saft", st, c);
- assert(EQ(step(m->g, startst, stopst, st, NOTHING, st), st));
- p++;
- }
-
- return(matchp);
-}
-
-
-/*
- - step - map set of states reachable before char to set reachable after
- == static states step(register struct re_guts *g, sopno start, sopno stop, \
- == register states bef, int ch, register states aft);
- == #define BOL (OUT+1)
- == #define EOL (BOL+1)
- == #define BOLEOL (BOL+2)
- == #define NOTHING (BOL+3)
- == #define BOW (BOL+4)
- == #define EOW (BOL+5)
- == #define CODEMAX (BOL+5) // highest code used
- == #define NONCHAR(c) ((c) > UCHAR_MAX)
- == #define NNONCHAR (CODEMAX-UCHAR_MAX)
- */
-static states
-step(g, start, stop, bef, ch, aft)
-register struct re_guts *g;
-sopno start; /* start state within strip */
-sopno stop; /* state after stop state within strip */
-register states bef; /* states reachable before */
-int ch; /* character or NONCHAR code */
-register states aft; /* states already known reachable after */
-{
- register cset *cs;
- register sop s;
- register sopno pc;
- register onestate here; /* note, macros know this name */
- register sopno look;
- register long i;
-
- for (pc = start, INIT(here, pc); pc != stop; pc++, INC(here)) {
- s = g->strip[pc];
- switch (OP(s)) {
- case OEND:
- assert(pc == stop-1);
- break;
- case OCHAR:
- /* only characters can match */
- assert(!NONCHAR(ch) || ch != (unsigned char)OPND(s));
- if (ch == (unsigned char)OPND(s))
- FWD(aft, bef, 1);
- break;
- case OBOL:
- if (ch == BOL || ch == BOLEOL)
- FWD(aft, bef, 1);
- break;
- case OEOL:
- if (ch == EOL || ch == BOLEOL)
- FWD(aft, bef, 1);
- break;
- case OBOW:
- if (ch == BOW)
- FWD(aft, bef, 1);
- break;
- case OEOW:
- if (ch == EOW)
- FWD(aft, bef, 1);
- break;
- case OANY:
- if (!NONCHAR(ch))
- FWD(aft, bef, 1);
- break;
- case OANYOF:
- cs = &g->sets[OPND(s)];
- if (!NONCHAR(ch) && CHIN(cs, ch))
- FWD(aft, bef, 1);
- break;
- case OBACK_: /* ignored here */
- case O_BACK:
- FWD(aft, aft, 1);
- break;
- case OPLUS_: /* forward, this is just an empty */
- FWD(aft, aft, 1);
- break;
- case O_PLUS: /* both forward and back */
- FWD(aft, aft, 1);
- i = ISSETBACK(aft, OPND(s));
- BACK(aft, aft, OPND(s));
- if (!i && ISSETBACK(aft, OPND(s))) {
- /* oho, must reconsider loop body */
- pc -= OPND(s) + 1;
- INIT(here, pc);
- }
- break;
- case OQUEST_: /* two branches, both forward */
- FWD(aft, aft, 1);
- FWD(aft, aft, OPND(s));
- break;
- case O_QUEST: /* just an empty */
- FWD(aft, aft, 1);
- break;
- case OLPAREN: /* not significant here */
- case ORPAREN:
- FWD(aft, aft, 1);
- break;
- case OCH_: /* mark the first two branches */
- FWD(aft, aft, 1);
- assert(OP(g->strip[pc+OPND(s)]) == OOR2);
- FWD(aft, aft, OPND(s));
- break;
- case OOR1: /* done a branch, find the O_CH */
- if (ISSTATEIN(aft, here)) {
- for (look = 1;
- OP(s = g->strip[pc+look]) != O_CH;
- look += OPND(s))
- assert(OP(s) == OOR2);
- FWD(aft, aft, look);
- }
- break;
- case OOR2: /* propagate OCH_'s marking */
- FWD(aft, aft, 1);
- if (OP(g->strip[pc+OPND(s)]) != O_CH) {
- assert(OP(g->strip[pc+OPND(s)]) == OOR2);
- FWD(aft, aft, OPND(s));
- }
- break;
- case O_CH: /* just empty */
- FWD(aft, aft, 1);
- break;
- default: /* ooooops... */
- assert(PHP_REGEX_NOPE);
- break;
- }
- }
-
- return(aft);
-}
-
-#ifdef REDEBUG
-/*
- - print - print a set of states
- == #ifdef REDEBUG
- == static void print(struct match *m, unsigned char *caption, states st, \
- == int ch, FILE *d);
- == #endif
- */
-static void
-print(m, caption, st, ch, d)
-struct match *m;
-unsigned char *caption;
-states st;
-int ch;
-FILE *d;
-{
- register struct re_guts *g = m->g;
- register int i;
- register int first = 1;
-
- if (!(m->eflags&REG_TRACE))
- return;
-
- fprintf(d, "%s", caption);
- if (ch != '\0')
- fprintf(d, " %s", pchar(ch));
- for (i = 0; i < g->nstates; i++)
- if (ISSET(st, i)) {
- fprintf(d, "%s%d", (first) ? "\t" : ", ", i);
- first = 0;
- }
- fprintf(d, "\n");
-}
-
-/*
- - at - print current situation
- == #ifdef REDEBUG
- == static void at(struct match *m, unsigned char *title, unsigned char *start, unsigned char *stop, \
- == sopno startst, sopno stopst);
- == #endif
- */
-static void
-at(m, title, start, stop, startst, stopst)
-struct match *m;
-unsigned char *title;
-unsigned char *start;
-unsigned char *stop;
-sopno startst;
-sopno stopst;
-{
- if (!(m->eflags&REG_TRACE))
- return;
-
- printf("%s %s-", title, pchar(*start));
- printf("%s ", pchar(*stop));
- printf("%ld-%ld\n", (long)startst, (long)stopst);
-}
-
-#ifndef PCHARDONE
-#define PCHARDONE /* never again */
-/*
- - pchar - make a character printable
- == #ifdef REDEBUG
- == static unsigned char *pchar(int ch);
- == #endif
- *
- * Is this identical to regchar() over in debug.c? Well, yes. But a
- * duplicate here avoids having a debugging-capable regexec.o tied to
- * a matching debug.o, and this is convenient. It all disappears in
- * the non-debug compilation anyway, so it doesn't matter much.
- */
-static unsigned char * /* -> representation */
-pchar(ch)
-int ch;
-{
- static unsigned char pbuf[10];
-
- if (isprint(ch) || ch == ' ')
- sprintf(pbuf, "%c", ch);
- else
- sprintf(pbuf, "\\%o", ch);
- return(pbuf);
-}
-#endif
-#endif
-
-#undef matcher
-#undef fast
-#undef slow
-#undef dissect
-#undef backref
-#undef step
-#undef print
-#undef at
-#undef match
diff --git a/regex/engine.ih b/regex/engine.ih
deleted file mode 100644
index 9a301838bc..0000000000
--- a/regex/engine.ih
+++ /dev/null
@@ -1,35 +0,0 @@
-/* ========= begin header generated by ./mkh ========= */
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/* === engine.c === */
-static int matcher(register struct re_guts *g, unsigned char *string, size_t nmatch, regmatch_t pmatch[], int eflags);
-static unsigned char *dissect(register struct match *m, unsigned char *start, unsigned char *stop, sopno startst, sopno stopst);
-static unsigned char *backref(register struct match *m, unsigned char *start, unsigned char *stop, sopno startst, sopno stopst, sopno lev);
-static unsigned char *fast(register struct match *m, unsigned char *start, unsigned char *stop, sopno startst, sopno stopst);
-static unsigned char *slow(register struct match *m, unsigned char *start, unsigned char *stop, sopno startst, sopno stopst);
-static states step(register struct re_guts *g, sopno start, sopno stop, register states bef, int ch, register states aft);
-#define BOL (OUT+1)
-#define EOL (BOL+1)
-#define BOLEOL (BOL+2)
-#define NOTHING (BOL+3)
-#define BOW (BOL+4)
-#define EOW (BOL+5)
-#define CODEMAX (BOL+5) /* highest code used */
-#define NONCHAR(c) ((c) > UCHAR_MAX)
-#define NNONCHAR (CODEMAX-UCHAR_MAX)
-#ifdef REDEBUG
-static void print(struct match *m, unsigned char *caption, states st, int ch, FILE *d);
-#endif
-#ifdef REDEBUG
-static void at(struct match *m, unsigned char *title, unsigned char *start, unsigned char *stop, sopno startst, sopno stopst);
-#endif
-#ifdef REDEBUG
-static unsigned char *pchar(int ch);
-#endif
-
-#ifdef __cplusplus
-}
-#endif
-/* ========= end header generated by ./mkh ========= */
diff --git a/regex/main.c b/regex/main.c
deleted file mode 100644
index 657338a2c1..0000000000
--- a/regex/main.c
+++ /dev/null
@@ -1,510 +0,0 @@
-#include <stdio.h>
-#include <string.h>
-#include <sys/types.h>
-#include <regex.h>
-#include <assert.h>
-#include <stdlib.h>
-
-#include "main.ih"
-
-char *progname;
-int debug = 0;
-int line = 0;
-int status = 0;
-
-int copts = REG_EXTENDED;
-int eopts = 0;
-regoff_t startoff = 0;
-regoff_t endoff = 0;
-
-
-extern int split();
-extern void regprint();
-
-/*
- - main - do the simple case, hand off to regress() for regression
- */
-int main(argc, argv)
-int argc;
-char *argv[];
-{
- regex_t re;
-# define NS 10
- regmatch_t subs[NS];
- char erbuf[100];
- int err;
- size_t len;
- int c;
- int errflg = 0;
- register int i;
- extern int optind;
- extern char *optarg;
-
- progname = argv[0];
-
- while ((c = getopt(argc, argv, "c:e:S:E:x")) != EOF)
- switch (c) {
- case 'c': /* compile options */
- copts = options('c', optarg);
- break;
- case 'e': /* execute options */
- eopts = options('e', optarg);
- break;
- case 'S': /* start offset */
- startoff = (regoff_t)atoi(optarg);
- break;
- case 'E': /* end offset */
- endoff = (regoff_t)atoi(optarg);
- break;
- case 'x': /* Debugging. */
- debug++;
- break;
- case '?':
- default:
- errflg++;
- break;
- }
- if (errflg) {
- fprintf(stderr, "usage: %s ", progname);
- fprintf(stderr, "[-c copt][-C][-d] [re]\n");
- exit(2);
- }
-
- if (optind >= argc) {
- regress(stdin);
- exit(status);
- }
-
- err = regcomp(&re, argv[optind++], copts);
- if (err) {
- len = regerror(err, &re, erbuf, sizeof(erbuf));
- fprintf(stderr, "error %s, %d/%d `%s'\n",
- eprint(err), len, sizeof(erbuf), erbuf);
- exit(status);
- }
- regprint(&re, stdout);
-
- if (optind >= argc) {
- regfree(&re);
- exit(status);
- }
-
- if (eopts&REG_STARTEND) {
- subs[0].rm_so = startoff;
- subs[0].rm_eo = strlen(argv[optind]) - endoff;
- }
- err = regexec(&re, argv[optind], (size_t)NS, subs, eopts);
- if (err) {
- len = regerror(err, &re, erbuf, sizeof(erbuf));
- fprintf(stderr, "error %s, %d/%d `%s'\n",
- eprint(err), len, sizeof(erbuf), erbuf);
- exit(status);
- }
- if (!(copts&REG_NOSUB)) {
- len = (int)(subs[0].rm_eo - subs[0].rm_so);
- if (subs[0].rm_so != -1) {
- if (len != 0)
- printf("match `%.*s'\n", (int)len,
- argv[optind] + subs[0].rm_so);
- else
- printf("match `'@%.1s\n",
- argv[optind] + subs[0].rm_so);
- }
- for (i = 1; i < NS; i++)
- if (subs[i].rm_so != -1)
- printf("(%d) `%.*s'\n", i,
- (int)(subs[i].rm_eo - subs[i].rm_so),
- argv[optind] + subs[i].rm_so);
- }
- exit(status);
-}
-
-/*
- - regress - main loop of regression test
- == void regress(FILE *in);
- */
-void
-regress(in)
-FILE *in;
-{
- char inbuf[1000];
-# define MAXF 10
- char *f[MAXF];
- int nf;
- int i;
- char erbuf[100];
- size_t ne;
- char *badpat = "invalid regular expression";
-# define SHORT 10
- char *bpname = "REG_BADPAT";
- regex_t re;
-
- while (fgets(inbuf, sizeof(inbuf), in) != NULL) {
- line++;
- if (inbuf[0] == '#' || inbuf[0] == '\n')
- continue; /* NOTE CONTINUE */
- inbuf[strlen(inbuf)-1] = '\0'; /* get rid of stupid \n */
- if (debug)
- fprintf(stdout, "%d:\n", line);
- nf = split(inbuf, f, MAXF, "\t\t");
- if (nf < 3) {
- fprintf(stderr, "bad input, line %d\n", line);
- exit(1);
- }
- for (i = 0; i < nf; i++)
- if (strcmp(f[i], "\"\"") == 0)
- f[i] = "";
- if (nf <= 3)
- f[3] = NULL;
- if (nf <= 4)
- f[4] = NULL;
- try(f[0], f[1], f[2], f[3], f[4], options('c', f[1]));
- if (opt('&', f[1])) /* try with either type of RE */
- try(f[0], f[1], f[2], f[3], f[4],
- options('c', f[1]) &~ REG_EXTENDED);
- }
-
- ne = regerror(REG_BADPAT, (regex_t *)NULL, erbuf, sizeof(erbuf));
- if (strcmp(erbuf, badpat) != 0 || ne != strlen(badpat)+1) {
- fprintf(stderr, "end: regerror() test gave `%s' not `%s'\n",
- erbuf, badpat);
- status = 1;
- }
- ne = regerror(REG_BADPAT, (regex_t *)NULL, erbuf, (size_t)SHORT);
- if (strncmp(erbuf, badpat, SHORT-1) != 0 || erbuf[SHORT-1] != '\0' ||
- ne != strlen(badpat)+1) {
- fprintf(stderr, "end: regerror() short test gave `%s' not `%.*s'\n",
- erbuf, SHORT-1, badpat);
- status = 1;
- }
- ne = regerror(REG_ITOA|REG_BADPAT, (regex_t *)NULL, erbuf, sizeof(erbuf));
- if (strcmp(erbuf, bpname) != 0 || ne != strlen(bpname)+1) {
- fprintf(stderr, "end: regerror() ITOA test gave `%s' not `%s'\n",
- erbuf, bpname);
- status = 1;
- }
- re.re_endp = bpname;
- ne = regerror(REG_ATOI, &re, erbuf, sizeof(erbuf));
- if (atoi(erbuf) != (int)REG_BADPAT) {
- fprintf(stderr, "end: regerror() ATOI test gave `%s' not `%ld'\n",
- erbuf, (long)REG_BADPAT);
- status = 1;
- } else if (ne != strlen(erbuf)+1) {
- fprintf(stderr, "end: regerror() ATOI test len(`%s') = %ld\n",
- erbuf, (long)REG_BADPAT);
- status = 1;
- }
-}
-
-/*
- - try - try it, and report on problems
- == void try(char *f0, char *f1, char *f2, char *f3, char *f4, int opts);
- */
-void
-try(f0, f1, f2, f3, f4, opts)
-char *f0;
-char *f1;
-char *f2;
-char *f3;
-char *f4;
-int opts; /* may not match f1 */
-{
- regex_t re;
-# define NSUBS 10
- regmatch_t subs[NSUBS];
-# define NSHOULD 15
- char *should[NSHOULD];
- int nshould;
- char erbuf[100];
- int err;
- int len;
- char *type = (opts & REG_EXTENDED) ? "ERE" : "BRE";
- register int i;
- char *grump;
- char f0copy[1000];
- char f2copy[1000];
-
- strcpy(f0copy, f0);
- re.re_endp = (opts&REG_PEND) ? f0copy + strlen(f0copy) : NULL;
- fixstr(f0copy);
- err = regcomp(&re, f0copy, opts);
- if (err != 0 && (!opt('C', f1) || err != efind(f2))) {
- /* unexpected error or wrong error */
- len = regerror(err, &re, erbuf, sizeof(erbuf));
- fprintf(stderr, "%d: %s error %s, %d/%d `%s'\n",
- line, type, eprint(err), len,
- sizeof(erbuf), erbuf);
- status = 1;
- } else if (err == 0 && opt('C', f1)) {
- /* unexpected success */
- fprintf(stderr, "%d: %s should have given REG_%s\n",
- line, type, f2);
- status = 1;
- err = 1; /* so we won't try regexec */
- }
-
- if (err != 0) {
- regfree(&re);
- return;
- }
-
- strcpy(f2copy, f2);
- fixstr(f2copy);
-
- if (options('e', f1)&REG_STARTEND) {
- if (strchr(f2, '(') == NULL || strchr(f2, ')') == NULL)
- fprintf(stderr, "%d: bad STARTEND syntax\n", line);
- subs[0].rm_so = strchr(f2, '(') - f2 + 1;
- subs[0].rm_eo = strchr(f2, ')') - f2;
- }
- err = regexec(&re, f2copy, NSUBS, subs, options('e', f1));
-
- if (err != 0 && (f3 != NULL || err != REG_NOMATCH)) {
- /* unexpected error or wrong error */
- len = regerror(err, &re, erbuf, sizeof(erbuf));
- fprintf(stderr, "%d: %s exec error %s, %d/%d `%s'\n",
- line, type, eprint(err), len,
- sizeof(erbuf), erbuf);
- status = 1;
- } else if (err != 0) {
- /* nothing more to check */
- } else if (f3 == NULL) {
- /* unexpected success */
- fprintf(stderr, "%d: %s exec should have failed\n",
- line, type);
- status = 1;
- err = 1; /* just on principle */
- } else if (opts&REG_NOSUB) {
- /* nothing more to check */
- } else if ((grump = check(f2, subs[0], f3)) != NULL) {
- fprintf(stderr, "%d: %s %s\n", line, type, grump);
- status = 1;
- err = 1;
- }
-
- if (err != 0 || f4 == NULL) {
- regfree(&re);
- return;
- }
-
- for (i = 1; i < NSHOULD; i++)
- should[i] = NULL;
- nshould = split(f4, should+1, NSHOULD-1, ",");
- if (nshould == 0) {
- nshould = 1;
- should[1] = "";
- }
- for (i = 1; i < NSUBS; i++) {
- grump = check(f2, subs[i], should[i]);
- if (grump != NULL) {
- fprintf(stderr, "%d: %s $%d %s\n", line,
- type, i, grump);
- status = 1;
- err = 1;
- }
- }
-
- regfree(&re);
-}
-
-/*
- - options - pick options out of a regression-test string
- == int options(int type, char *s);
- */
-int
-options(type, s)
-int type; /* 'c' compile, 'e' exec */
-char *s;
-{
- register char *p;
- register int o = (type == 'c') ? copts : eopts;
- register char *legal = (type == 'c') ? "bisnmp" : "^$#tl";
-
- for (p = s; *p != '\0'; p++)
- if (strchr(legal, *p) != NULL)
- switch (*p) {
- case 'b':
- o &= ~REG_EXTENDED;
- break;
- case 'i':
- o |= REG_ICASE;
- break;
- case 's':
- o |= REG_NOSUB;
- break;
- case 'n':
- o |= REG_NEWLINE;
- break;
- case 'm':
- o &= ~REG_EXTENDED;
- o |= REG_NOSPEC;
- break;
- case 'p':
- o |= REG_PEND;
- break;
- case '^':
- o |= REG_NOTBOL;
- break;
- case '$':
- o |= REG_NOTEOL;
- break;
- case '#':
- o |= REG_STARTEND;
- break;
- case 't': /* trace */
- o |= REG_TRACE;
- break;
- case 'l': /* force long representation */
- o |= REG_LARGE;
- break;
- case 'r': /* force backref use */
- o |= REG_BACKR;
- break;
- }
- return(o);
-}
-
-/*
- - opt - is a particular option in a regression string?
- == int opt(int c, char *s);
- */
-int /* predicate */
-opt(c, s)
-int c;
-char *s;
-{
- return(strchr(s, c) != NULL);
-}
-
-/*
- - fixstr - transform magic characters in strings
- == void fixstr(register char *p);
- */
-void
-fixstr(p)
-register char *p;
-{
- if (p == NULL)
- return;
-
- for (; *p != '\0'; p++)
- if (*p == 'N')
- *p = '\n';
- else if (*p == 'T')
- *p = '\t';
- else if (*p == 'S')
- *p = ' ';
- else if (*p == 'Z')
- *p = '\0';
-}
-
-/*
- - check - check a substring match
- == char *check(char *str, regmatch_t sub, char *should);
- */
-char * /* NULL or complaint */
-check(str, sub, should)
-char *str;
-regmatch_t sub;
-char *should;
-{
- register int len;
- register int shlen;
- register char *p;
- static char grump[500];
- register char *at = NULL;
-
- if (should != NULL && strcmp(should, "-") == 0)
- should = NULL;
- if (should != NULL && should[0] == '@') {
- at = should + 1;
- should = "";
- }
-
- /* check rm_so and rm_eo for consistency */
- if (sub.rm_so > sub.rm_eo || (sub.rm_so == -1 && sub.rm_eo != -1) ||
- (sub.rm_so != -1 && sub.rm_eo == -1) ||
- (sub.rm_so != -1 && sub.rm_so < 0) ||
- (sub.rm_eo != -1 && sub.rm_eo < 0) ) {
- sprintf(grump, "start %ld end %ld", (long)sub.rm_so,
- (long)sub.rm_eo);
- return(grump);
- }
-
- /* check for no match */
- if (sub.rm_so == -1 && should == NULL)
- return(NULL);
- if (sub.rm_so == -1)
- return("did not match");
-
- /* check for in range */
- if (sub.rm_eo > strlen(str)) {
- sprintf(grump, "start %ld end %ld, past end of string",
- (long)sub.rm_so, (long)sub.rm_eo);
- return(grump);
- }
-
- len = (int)(sub.rm_eo - sub.rm_so);
- shlen = (int)strlen(should);
- p = str + sub.rm_so;
-
- /* check for not supposed to match */
- if (should == NULL) {
- sprintf(grump, "matched `%.*s'", len, p);
- return(grump);
- }
-
- /* check for wrong match */
- if (len != shlen || strncmp(p, should, (size_t)shlen) != 0) {
- sprintf(grump, "matched `%.*s' instead", len, p);
- return(grump);
- }
- if (shlen > 0)
- return(NULL);
-
- /* check null match in right place */
- if (at == NULL)
- return(NULL);
- shlen = strlen(at);
- if (shlen == 0)
- shlen = 1; /* force check for end-of-string */
- if (strncmp(p, at, shlen) != 0) {
- sprintf(grump, "matched null at `%.20s'", p);
- return(grump);
- }
- return(NULL);
-}
-
-/*
- - eprint - convert error number to name
- == static char *eprint(int err);
- */
-static char *
-eprint(err)
-int err;
-{
- static char epbuf[100];
- size_t len;
-
- len = regerror(REG_ITOA|err, (regex_t *)NULL, epbuf, sizeof(epbuf));
- assert(len <= sizeof(epbuf));
- return(epbuf);
-}
-
-/*
- - efind - convert error name to number
- == static int efind(char *name);
- */
-static int
-efind(name)
-char *name;
-{
- static char efbuf[100];
- regex_t re;
-
- sprintf(efbuf, "REG_%s", name);
- assert(strlen(efbuf) < sizeof(efbuf));
- re.re_endp = efbuf;
- (void) regerror(REG_ATOI, &re, efbuf, sizeof(efbuf));
- return(atoi(efbuf));
-}
diff --git a/regex/main.ih b/regex/main.ih
deleted file mode 100644
index 5a0118ac44..0000000000
--- a/regex/main.ih
+++ /dev/null
@@ -1,19 +0,0 @@
-/* ========= begin header generated by ./mkh ========= */
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/* === main.c === */
-void regress(FILE *in);
-void try(char *f0, char *f1, char *f2, char *f3, char *f4, int opts);
-int options(int type, char *s);
-int opt(int c, char *s);
-void fixstr(register char *p);
-char *check(char *str, regmatch_t sub, char *should);
-static char *eprint(int err);
-static int efind(char *name);
-
-#ifdef __cplusplus
-}
-#endif
-/* ========= end header generated by ./mkh ========= */
diff --git a/regex/mkh b/regex/mkh
deleted file mode 100644
index 252b246c7b..0000000000
--- a/regex/mkh
+++ /dev/null
@@ -1,76 +0,0 @@
-#! /bin/sh
-# mkh - pull headers out of C source
-PATH=/bin:/usr/bin ; export PATH
-
-# egrep pattern to pick out marked lines
-egrep='^ =([ ]|$)'
-
-# Sed program to process marked lines into lines for the header file.
-# The markers have already been removed. Two things are done here: removal
-# of backslashed newlines, and some fudging of comments. The first is done
-# because -o needs to have prototypes on one line to strip them down.
-# Getting comments into the output is tricky; we turn C++-style // comments
-# into /* */ comments, after altering any existing */'s to avoid trouble.
-peel=' /\\$/N
- /\\\n[ ]*/s///g
- /\/\//s;\*/;* /;g
- /\/\//s;//\(.*\);/*\1 */;'
-
-for a
-do
- case "$a" in
- -o) # old (pre-function-prototype) compiler
- # add code to comment out argument lists
- peel="$peel
- "'/^\([^#\/][^\/]*[a-zA-Z0-9_)]\)(\(.*\))/s;;\1(/*\2*/);'
- shift
- ;;
- -b) # funny Berkeley __P macro
- peel="$peel
- "'/^\([^#\/][^\/]*[a-zA-Z0-9_)]\)(\(.*\))/s;;\1 __P((\2));'
- shift
- ;;
- -s) # compiler doesn't like `static foo();'
- # add code to get rid of the `static'
- peel="$peel
- "'/^static[ ][^\/]*[a-zA-Z0-9_)](.*)/s;static.;;'
- shift
- ;;
- -p) # private declarations
- egrep='^ ==([ ]|$)'
- shift
- ;;
- -i) # wrap in #ifndef, argument is name
- ifndef="$2"
- shift ; shift
- ;;
- *) break
- ;;
- esac
-done
-
-if test " $ifndef" != " "
-then
- echo "#ifndef $ifndef"
- echo "#define $ifndef /* never again */"
-fi
-echo "/* ========= begin header generated by $0 ========= */"
-echo '#ifdef __cplusplus'
-echo 'extern "C" {'
-echo '#endif'
-for f
-do
- echo
- echo "/* === $f === */"
- egrep "$egrep" $f | sed 's/^ ==*[ ]//;s/^ ==*$//' | sed "$peel"
- echo
-done
-echo '#ifdef __cplusplus'
-echo '}'
-echo '#endif'
-echo "/* ========= end header generated by $0 ========= */"
-if test " $ifndef" != " "
-then
- echo "#endif"
-fi
-exit 0
diff --git a/regex/regcomp.c b/regex/regcomp.c
deleted file mode 100644
index ec034d4c4c..0000000000
--- a/regex/regcomp.c
+++ /dev/null
@@ -1,1608 +0,0 @@
-#include <sys/types.h>
-#include <stdio.h>
-#include <string.h>
-#include <ctype.h>
-#include <limits.h>
-#include <stdlib.h>
-
-#define POSIX_MISTAKE
-
-#include "utils.h"
-#include "regex.h"
-#include "regex2.h"
-
-#include "cclass.h"
-#include "cname.h"
-
-/*
- * parse structure, passed up and down to avoid global variables and
- * other clumsinesses
- */
-struct parse {
- unsigned char *next; /* next character in RE */
- unsigned char *end; /* end of string (-> NUL normally) */
- int error; /* has an error been seen? */
- sop *strip; /* malloced strip */
- sopno ssize; /* malloced strip size (allocated) */
- sopno slen; /* malloced strip length (used) */
- int ncsalloc; /* number of csets allocated */
- struct re_guts *g;
-# define NPAREN 10 /* we need to remember () 1-9 for back refs */
- sopno pbegin[NPAREN]; /* -> ( ([0] unused) */
- sopno pend[NPAREN]; /* -> ) ([0] unused) */
-};
-
-#include "regcomp.ih"
-
-static unsigned char nuls[10]; /* place to point scanner in event of error */
-
-/*
- * macros for use with parse structure
- * BEWARE: these know that the parse structure is named `p' !!!
- */
-#define PEEK() (*p->next)
-#define PEEK2() (*(p->next+1))
-#define MORE() (p->next < p->end)
-#define MORE2() (p->next+1 < p->end)
-#define SEE(c) (MORE() && PEEK() == (c))
-#define SEETWO(a, b) (MORE() && MORE2() && PEEK() == (a) && PEEK2() == (b))
-#define EAT(c) ((SEE(c)) ? (NEXT(), 1) : 0)
-#define EATTWO(a, b) ((SEETWO(a, b)) ? (NEXT2(), 1) : 0)
-#define NEXT() (p->next++)
-#define NEXT2() (p->next += 2)
-#define NEXTn(n) (p->next += (n))
-#define GETNEXT() (*p->next++)
-#define SETERROR(e) seterr(p, (e))
-#define REQUIRE(co, e) (void) ((co) || SETERROR(e))
-#define MUSTSEE(c, e) (REQUIRE(MORE() && PEEK() == (c), e))
-#define MUSTEAT(c, e) (REQUIRE(MORE() && GETNEXT() == (c), e))
-#define MUSTNOTSEE(c, e) (REQUIRE(!MORE() || PEEK() != (c), e))
-#define EMIT(op, sopnd) doemit(p, (sop)(op), (size_t)(sopnd))
-#define INSERT(op, pos) doinsert(p, (sop)(op), HERE()-(pos)+1, pos)
-#define AHEAD(pos) dofwd(p, pos, HERE()-(pos))
-#define ASTERN(sop, pos) EMIT(sop, HERE()-pos)
-#define HERE() (p->slen)
-#define THERE() (p->slen - 1)
-#define THERETHERE() (p->slen - 2)
-#define DROP(n) (p->slen -= (n))
-
-#ifndef NDEBUG
-static int never = 0; /* for use in asserts; shuts lint up */
-#else
-#define never 0 /* some <assert.h>s have bugs too */
-#endif
-
-/*
- - regcomp - interface for parser and compilation
- = API_EXPORT(int) regcomp(regex_t *, const char *, int);
- = #define REG_BASIC 0000
- = #define REG_EXTENDED 0001
- = #define REG_ICASE 0002
- = #define REG_NOSUB 0004
- = #define REG_NEWLINE 0010
- = #define REG_NOSPEC 0020
- = #define REG_PEND 0040
- = #define REG_DUMP 0200
- */
-API_EXPORT(int) /* 0 success, otherwise REG_something */
-regcomp(preg, pattern, cflags)
-regex_t *preg;
-const char *pattern;
-int cflags;
-{
- struct parse pa;
- register struct re_guts *g;
- register struct parse *p = &pa;
- register int i;
- register size_t len;
-#ifdef REDEBUG
-# define GOODFLAGS(f) (f)
-#else
-# define GOODFLAGS(f) ((f)&~REG_DUMP)
-#endif
-
- cflags = GOODFLAGS(cflags);
- if ((cflags&REG_EXTENDED) && (cflags&REG_NOSPEC))
- return(REG_INVARG);
-
- if (cflags&REG_PEND) {
- if (preg->re_endp < pattern)
- return(REG_INVARG);
- len = preg->re_endp - pattern;
- } else
- len = strlen((char *)pattern);
-
- /* do the mallocs early so failure handling is easy */
- g = (struct re_guts *)malloc(sizeof(struct re_guts) +
- (NC-1)*sizeof(cat_t));
- if (g == NULL)
- return(REG_ESPACE);
- p->ssize = len/(size_t)2*(size_t)3 + (size_t)1; /* ugh */
- p->strip = (sop *)malloc(p->ssize * sizeof(sop));
- p->slen = 0;
- if (p->strip == NULL) {
- free((char *)g);
- return(REG_ESPACE);
- }
-
- /* set things up */
- p->g = g;
- p->next = (unsigned char *)pattern; /* convenience; we do not modify it */
- p->end = p->next + len;
- p->error = 0;
- p->ncsalloc = 0;
- for (i = 0; i < NPAREN; i++) {
- p->pbegin[i] = 0;
- p->pend[i] = 0;
- }
- g->csetsize = NC;
- g->sets = NULL;
- g->setbits = NULL;
- g->ncsets = 0;
- g->cflags = cflags;
- g->iflags = 0;
- g->nbol = 0;
- g->neol = 0;
- g->must = NULL;
- g->mlen = 0;
- g->nsub = 0;
- g->ncategories = 1; /* category 0 is "everything else" */
- g->categories = &g->catspace[0];
- (void) memset((char *)g->catspace, 0, NC*sizeof(cat_t));
- g->backrefs = 0;
-
- /* do it */
- EMIT(OEND, 0);
- g->firststate = THERE();
- if (cflags&REG_EXTENDED)
- p_ere(p, OUT);
- else if (cflags&REG_NOSPEC)
- p_str(p);
- else
- p_bre(p, OUT, OUT);
- EMIT(OEND, 0);
- g->laststate = THERE();
-
- /* tidy up loose ends and fill things in */
- categorize(p, g);
- stripsnug(p, g);
- findmust(p, g);
- g->nplus = pluscount(p, g);
- g->magic = MAGIC2;
- preg->re_nsub = g->nsub;
- preg->re_g = g;
- preg->re_magic = MAGIC1;
-#ifndef REDEBUG
- /* not debugging, so can't rely on the assert() in regexec() */
- if (g->iflags&BAD)
- SETERROR(REG_ASSERT);
-#endif
-
- /* win or lose, we're done */
- if (p->error != 0) /* lose */
- regfree(preg);
- return(p->error);
-}
-
-/*
- - p_ere - ERE parser top level, concatenation and alternation
- == static void p_ere(register struct parse *p, int stop);
- */
-static void
-p_ere(p, stop)
-register struct parse *p;
-int stop; /* character this ERE should end at */
-{
- register unsigned char c;
- register sopno prevback = 0;
- register sopno prevfwd = 0;
- register sopno conc;
- register int first = 1; /* is this the first alternative? */
-
- for (;;) {
- /* do a bunch of concatenated expressions */
- conc = HERE();
- while (MORE() && (c = PEEK()) != '|' && c != stop)
- p_ere_exp(p);
- (void) REQUIRE(HERE() != conc, REG_EMPTY); /* require nonempty */
-
- if (!EAT('|'))
- break; /* NOTE BREAK OUT */
-
- if (first) {
- INSERT(OCH_, conc); /* offset is wrong */
- prevfwd = conc;
- prevback = conc;
- first = 0;
- }
- ASTERN(OOR1, prevback);
- prevback = THERE();
- AHEAD(prevfwd); /* fix previous offset */
- prevfwd = HERE();
- EMIT(OOR2, 0); /* offset is very wrong */
- }
-
- if (!first) { /* tail-end fixups */
- AHEAD(prevfwd);
- ASTERN(O_CH, prevback);
- }
-
- assert(!MORE() || SEE(stop));
-}
-
-/*
- - p_ere_exp - parse one subERE, an atom possibly followed by a repetition op
- == static void p_ere_exp(register struct parse *p);
- */
-static void
-p_ere_exp(p)
-register struct parse *p;
-{
- register unsigned char c;
- register sopno pos;
- register int count;
- register int count2;
- register sopno subno;
- int wascaret = 0;
-
- assert(MORE()); /* caller should have ensured this */
- c = GETNEXT();
-
- pos = HERE();
- switch (c) {
- case '(':
- REQUIRE(MORE(), REG_EPAREN);
- p->g->nsub++;
- subno = p->g->nsub;
- if (subno < NPAREN)
- p->pbegin[subno] = HERE();
- EMIT(OLPAREN, subno);
- if (!SEE(')'))
- p_ere(p, ')');
- if (subno < NPAREN) {
- p->pend[subno] = HERE();
- assert(p->pend[subno] != 0);
- }
- EMIT(ORPAREN, subno);
- MUSTEAT(')', REG_EPAREN);
- break;
-#ifndef POSIX_MISTAKE
- case ')': /* happens only if no current unmatched ( */
- /*
- * You may ask, why the ifndef? Because I didn't notice
- * this until slightly too late for 1003.2, and none of the
- * other 1003.2 regular-expression reviewers noticed it at
- * all. So an unmatched ) is legal POSIX, at least until
- * we can get it fixed.
- */
- SETERROR(REG_EPAREN);
- break;
-#endif
- case '^':
- EMIT(OBOL, 0);
- p->g->iflags |= USEBOL;
- p->g->nbol++;
- wascaret = 1;
- break;
- case '$':
- EMIT(OEOL, 0);
- p->g->iflags |= USEEOL;
- p->g->neol++;
- break;
- case '|':
- SETERROR(REG_EMPTY);
- break;
- case '*':
- case '+':
- case '?':
- SETERROR(REG_BADRPT);
- break;
- case '.':
- if (p->g->cflags&REG_NEWLINE)
- nonnewline(p);
- else
- EMIT(OANY, 0);
- break;
- case '[':
- p_bracket(p);
- break;
- case '\\':
- REQUIRE(MORE(), REG_EESCAPE);
- c = GETNEXT();
- ordinary(p, c);
- break;
- case '{': /* okay as ordinary except if digit follows */
- REQUIRE(!MORE() || !isdigit(PEEK()), REG_BADRPT);
- /* FALLTHROUGH */
- default:
- ordinary(p, c);
- break;
- }
-
- if (!MORE())
- return;
- c = PEEK();
- /* we call { a repetition if followed by a digit */
- if (!( c == '*' || c == '+' || c == '?' ||
- (c == '{' && MORE2() && isdigit(PEEK2())) ))
- return; /* no repetition, we're done */
- NEXT();
-
- REQUIRE(!wascaret, REG_BADRPT);
- switch (c) {
- case '*': /* implemented as +? */
- /* this case does not require the (y|) trick, noKLUDGE */
- INSERT(OPLUS_, pos);
- ASTERN(O_PLUS, pos);
- INSERT(OQUEST_, pos);
- ASTERN(O_QUEST, pos);
- break;
- case '+':
- INSERT(OPLUS_, pos);
- ASTERN(O_PLUS, pos);
- break;
- case '?':
- /* KLUDGE: emit y? as (y|) until subtle bug gets fixed */
- INSERT(OCH_, pos); /* offset slightly wrong */
- ASTERN(OOR1, pos); /* this one's right */
- AHEAD(pos); /* fix the OCH_ */
- EMIT(OOR2, 0); /* offset very wrong... */
- AHEAD(THERE()); /* ...so fix it */
- ASTERN(O_CH, THERETHERE());
- break;
- case '{':
- count = p_count(p);
- if (EAT(',')) {
- if (isdigit(PEEK())) {
- count2 = p_count(p);
- REQUIRE(count <= count2, REG_BADBR);
- } else /* single number with comma */
- count2 = INFINITY;
- } else /* just a single number */
- count2 = count;
- repeat(p, pos, count, count2);
- if (!EAT('}')) { /* error heuristics */
- while (MORE() && PEEK() != '}')
- NEXT();
- REQUIRE(MORE(), REG_EBRACE);
- SETERROR(REG_BADBR);
- }
- break;
- }
-
- if (!MORE())
- return;
- c = PEEK();
- if (!( c == '*' || c == '+' || c == '?' ||
- (c == '{' && MORE2() && isdigit(PEEK2())) ) )
- return;
- SETERROR(REG_BADRPT);
-}
-
-/*
- - p_str - string (no metacharacters) "parser"
- == static void p_str(register struct parse *p);
- */
-static void
-p_str(p)
-register struct parse *p;
-{
- REQUIRE(MORE(), REG_EMPTY);
- while (MORE())
- ordinary(p, GETNEXT());
-}
-
-/*
- - p_bre - BRE parser top level, anchoring and concatenation
- == static void p_bre(register struct parse *p, register int end1, \
- == register int end2);
- * Giving end1 as OUT essentially eliminates the end1/end2 check.
- *
- * This implementation is a bit of a kludge, in that a trailing $ is first
- * taken as an ordinary character and then revised to be an anchor. The
- * only undesirable side effect is that '$' gets included as a character
- * category in such cases. This is fairly harmless; not worth fixing.
- * The amount of lookahead needed to avoid this kludge is excessive.
- */
-static void
-p_bre(p, end1, end2)
-register struct parse *p;
-register int end1; /* first terminating character */
-register int end2; /* second terminating character */
-{
- register sopno start = HERE();
- register int first = 1; /* first subexpression? */
- register int wasdollar = 0;
-
- if (EAT('^')) {
- EMIT(OBOL, 0);
- p->g->iflags |= USEBOL;
- p->g->nbol++;
- }
- while (MORE() && !SEETWO(end1, end2)) {
- wasdollar = p_simp_re(p, first);
- first = 0;
- }
- if (wasdollar) { /* oops, that was a trailing anchor */
- DROP(1);
- EMIT(OEOL, 0);
- p->g->iflags |= USEEOL;
- p->g->neol++;
- }
-
- REQUIRE(HERE() != start, REG_EMPTY); /* require nonempty */
-}
-
-/*
- - p_simp_re - parse a simple RE, an atom possibly followed by a repetition
- == static int p_simp_re(register struct parse *p, int starordinary);
- */
-static int /* was the simple RE an unbackslashed $? */
-p_simp_re(p, starordinary)
-register struct parse *p;
-int starordinary; /* is a leading * an ordinary character? */
-{
- register int c;
- register int count;
- register int count2;
- register sopno pos;
- register int i;
- register sopno subno;
-# define BACKSL (1<<CHAR_BIT)
-
- pos = HERE(); /* repetion op, if any, covers from here */
-
- assert(MORE()); /* caller should have ensured this */
- c = GETNEXT();
- if (c == '\\') {
- REQUIRE(MORE(), REG_EESCAPE);
- c = BACKSL | (unsigned char)GETNEXT();
- }
- switch (c) {
- case '.':
- if (p->g->cflags&REG_NEWLINE)
- nonnewline(p);
- else
- EMIT(OANY, 0);
- break;
- case '[':
- p_bracket(p);
- break;
- case BACKSL|'{':
- SETERROR(REG_BADRPT);
- break;
- case BACKSL|'(':
- p->g->nsub++;
- subno = p->g->nsub;
- if (subno < NPAREN)
- p->pbegin[subno] = HERE();
- EMIT(OLPAREN, subno);
- /* the MORE here is an error heuristic */
- if (MORE() && !SEETWO('\\', ')'))
- p_bre(p, '\\', ')');
- if (subno < NPAREN) {
- p->pend[subno] = HERE();
- assert(p->pend[subno] != 0);
- }
- EMIT(ORPAREN, subno);
- REQUIRE(EATTWO('\\', ')'), REG_EPAREN);
- break;
- case BACKSL|')': /* should not get here -- must be user */
- case BACKSL|'}':
- SETERROR(REG_EPAREN);
- break;
- case BACKSL|'1':
- case BACKSL|'2':
- case BACKSL|'3':
- case BACKSL|'4':
- case BACKSL|'5':
- case BACKSL|'6':
- case BACKSL|'7':
- case BACKSL|'8':
- case BACKSL|'9':
- i = (c&~BACKSL) - '0';
- assert(i < NPAREN);
- if (p->pend[i] != 0) {
- assert(i <= p->g->nsub);
- EMIT(OBACK_, i);
- assert(p->pbegin[i] != 0);
- assert(OP(p->strip[p->pbegin[i]]) == OLPAREN);
- assert(OP(p->strip[p->pend[i]]) == ORPAREN);
- (void) dupl(p, p->pbegin[i]+1, p->pend[i]);
- EMIT(O_BACK, i);
- } else
- SETERROR(REG_ESUBREG);
- p->g->backrefs = 1;
- break;
- case '*':
- REQUIRE(starordinary, REG_BADRPT);
- /* FALLTHROUGH */
- default:
- ordinary(p, (unsigned char)c); /* takes off BACKSL, if any */
- break;
- }
-
- if (EAT('*')) { /* implemented as +? */
- /* this case does not require the (y|) trick, noKLUDGE */
- INSERT(OPLUS_, pos);
- ASTERN(O_PLUS, pos);
- INSERT(OQUEST_, pos);
- ASTERN(O_QUEST, pos);
- } else if (EATTWO('\\', '{')) {
- count = p_count(p);
- if (EAT(',')) {
- if (MORE() && isdigit(PEEK())) {
- count2 = p_count(p);
- REQUIRE(count <= count2, REG_BADBR);
- } else /* single number with comma */
- count2 = INFINITY;
- } else /* just a single number */
- count2 = count;
- repeat(p, pos, count, count2);
- if (!EATTWO('\\', '}')) { /* error heuristics */
- while (MORE() && !SEETWO('\\', '}'))
- NEXT();
- REQUIRE(MORE(), REG_EBRACE);
- SETERROR(REG_BADBR);
- }
- } else if (c == (unsigned char)'$') /* $ (but not \$) ends it */
- return(1);
-
- return(0);
-}
-
-/*
- - p_count - parse a repetition count
- == static int p_count(register struct parse *p);
- */
-static int /* the value */
-p_count(p)
-register struct parse *p;
-{
- register int count = 0;
- register int ndigits = 0;
-
- while (MORE() && isdigit(PEEK()) && count <= DUPMAX) {
- count = count*10 + (GETNEXT() - '0');
- ndigits++;
- }
-
- REQUIRE(ndigits > 0 && count <= DUPMAX, REG_BADBR);
- return(count);
-}
-
-/*
- - p_bracket - parse a bracketed character list
- == static void p_bracket(register struct parse *p);
- *
- * Note a significant property of this code: if the allocset() did SETERROR,
- * no set operations are done.
- */
-static void
-p_bracket(p)
-register struct parse *p;
-{
- register cset *cs = allocset(p);
- register int invert = 0;
-
- /* Dept of Truly Sickening Special-Case Kludges */
- if (p->next + 5 < p->end && strncmp(p->next, "[:<:]]", 6) == 0) {
- EMIT(OBOW, 0);
- NEXTn(6);
- return;
- }
- if (p->next + 5 < p->end && strncmp(p->next, "[:>:]]", 6) == 0) {
- EMIT(OEOW, 0);
- NEXTn(6);
- return;
- }
-
- if (EAT('^'))
- invert++; /* make note to invert set at end */
- if (EAT(']'))
- CHadd(cs, ']');
- else if (EAT('-'))
- CHadd(cs, '-');
- while (MORE() && PEEK() != ']' && !SEETWO('-', ']'))
- p_b_term(p, cs);
- if (EAT('-'))
- CHadd(cs, '-');
- MUSTEAT(']', REG_EBRACK);
-
- if (p->error != 0) /* don't mess things up further */
- return;
-
- if (p->g->cflags&REG_ICASE) {
- register int i;
- register int ci;
-
- for (i = p->g->csetsize - 1; i >= 0; i--)
- if (CHIN(cs, i) && isalpha(i)) {
- ci = othercase(i);
- if (ci != i)
- CHadd(cs, ci);
- }
- if (cs->multis != NULL)
- mccase(p, cs);
- }
- if (invert) {
- register int i;
-
- for (i = p->g->csetsize - 1; i >= 0; i--)
- if (CHIN(cs, i))
- CHsub(cs, i);
- else
- CHadd(cs, i);
- if (p->g->cflags&REG_NEWLINE)
- CHsub(cs, '\n');
- if (cs->multis != NULL)
- mcinvert(p, cs);
- }
-
- assert(cs->multis == NULL); /* xxx */
-
- if (nch(p, cs) == 1) { /* optimize singleton sets */
- ordinary(p, firstch(p, cs));
- freeset(p, cs);
- } else
- EMIT(OANYOF, freezeset(p, cs));
-}
-
-/*
- - p_b_term - parse one term of a bracketed character list
- == static void p_b_term(register struct parse *p, register cset *cs);
- */
-static void
-p_b_term(p, cs)
-register struct parse *p;
-register cset *cs;
-{
- register unsigned char c;
- register unsigned char start, finish;
- register int i;
-
- /* classify what we've got */
- switch ((MORE()) ? PEEK() : '\0') {
- case '[':
- c = (MORE2()) ? PEEK2() : '\0';
- break;
- case '-':
- SETERROR(REG_ERANGE);
- return; /* NOTE RETURN */
- break;
- default:
- c = '\0';
- break;
- }
-
- switch (c) {
- case ':': /* character class */
- NEXT2();
- REQUIRE(MORE(), REG_EBRACK);
- c = PEEK();
- REQUIRE(c != '-' && c != ']', REG_ECTYPE);
- p_b_cclass(p, cs);
- REQUIRE(MORE(), REG_EBRACK);
- REQUIRE(EATTWO(':', ']'), REG_ECTYPE);
- break;
- case '=': /* equivalence class */
- NEXT2();
- REQUIRE(MORE(), REG_EBRACK);
- c = PEEK();
- REQUIRE(c != '-' && c != ']', REG_ECOLLATE);
- p_b_eclass(p, cs);
- REQUIRE(MORE(), REG_EBRACK);
- REQUIRE(EATTWO('=', ']'), REG_ECOLLATE);
- break;
- default: /* symbol, ordinary character, or range */
-/* xxx revision needed for multichar stuff */
- start = p_b_symbol(p);
- if (SEE('-') && MORE2() && PEEK2() != ']') {
- /* range */
- NEXT();
- if (EAT('-'))
- finish = '-';
- else
- finish = p_b_symbol(p);
- } else
- finish = start;
-/* xxx what about signed chars here... */
- REQUIRE(start <= finish, REG_ERANGE);
- for (i = start; i <= finish; i++)
- CHadd(cs, i);
- break;
- }
-}
-
-/*
- - p_b_cclass - parse a character-class name and deal with it
- == static void p_b_cclass(register struct parse *p, register cset *cs);
- */
-static void
-p_b_cclass(p, cs)
-register struct parse *p;
-register cset *cs;
-{
- register unsigned char *sp = p->next;
- register struct cclass *cp;
- register size_t len;
- register unsigned char *u;
- register unsigned char c;
-
- while (MORE() && isalpha(PEEK()))
- NEXT();
- len = p->next - sp;
- for (cp = cclasses; cp->name != NULL; cp++)
- if (strncmp(cp->name, sp, len) == 0 && cp->name[len] == '\0')
- break;
- if (cp->name == NULL) {
- /* oops, didn't find it */
- SETERROR(REG_ECTYPE);
- return;
- }
-
- u = cp->chars;
- while ((c = *u++) != '\0')
- CHadd(cs, c);
- for (u = cp->multis; *u != '\0'; u += strlen(u) + 1)
- MCadd(p, cs, u);
-}
-
-/*
- - p_b_eclass - parse an equivalence-class name and deal with it
- == static void p_b_eclass(register struct parse *p, register cset *cs);
- *
- * This implementation is incomplete. xxx
- */
-static void
-p_b_eclass(p, cs)
-register struct parse *p;
-register cset *cs;
-{
- register unsigned char c;
-
- c = p_b_coll_elem(p, '=');
- CHadd(cs, c);
-}
-
-/*
- - p_b_symbol - parse a character or [..]ed multicharacter collating symbol
- == static char p_b_symbol(register struct parse *p);
- */
-static unsigned char /* value of symbol */
-p_b_symbol(p)
-register struct parse *p;
-{
- register unsigned char value;
-
- REQUIRE(MORE(), REG_EBRACK);
- if (!EATTWO('[', '.'))
- return(GETNEXT());
-
- /* collating symbol */
- value = p_b_coll_elem(p, '.');
- REQUIRE(EATTWO('.', ']'), REG_ECOLLATE);
- return(value);
-}
-
-/*
- - p_b_coll_elem - parse a collating-element name and look it up
- == static char p_b_coll_elem(register struct parse *p, int endc);
- */
-static unsigned char /* value of collating element */
-p_b_coll_elem(p, endc)
-register struct parse *p;
-int endc; /* name ended by endc,']' */
-{
- register unsigned char *sp = p->next;
- register struct cname *cp;
- register int len;
-
- while (MORE() && !SEETWO(endc, ']'))
- NEXT();
- if (!MORE()) {
- SETERROR(REG_EBRACK);
- return(0);
- }
- len = p->next - sp;
- for (cp = cnames; cp->name != NULL; cp++)
- if (strncmp(cp->name, sp, len) == 0 && cp->name[len] == '\0')
- return(cp->code); /* known name */
- if (len == 1)
- return(*sp); /* single character */
- SETERROR(REG_ECOLLATE); /* neither */
- return(0);
-}
-
-/*
- - othercase - return the case counterpart of an alphabetic
- == static char othercase(int ch);
- */
-static unsigned char /* if no counterpart, return ch */
-othercase(ch)
-int ch;
-{
- assert(isalpha(ch));
- if (isupper(ch))
- return(tolower(ch));
- else if (islower(ch))
- return(toupper(ch));
- else /* peculiar, but could happen */
- return(ch);
-}
-
-/*
- - bothcases - emit a dualcase version of a two-case character
- == static void bothcases(register struct parse *p, int ch);
- *
- * Boy, is this implementation ever a kludge...
- */
-static void
-bothcases(p, ch)
-register struct parse *p;
-int ch;
-{
- register unsigned char *oldnext = p->next;
- register unsigned char *oldend = p->end;
- unsigned char bracket[3];
-
- assert(othercase(ch) != ch); /* p_bracket() would recurse */
- p->next = bracket;
- p->end = bracket+2;
- bracket[0] = ch;
- bracket[1] = ']';
- bracket[2] = '\0';
- p_bracket(p);
- assert(p->next == bracket+2);
- p->next = oldnext;
- p->end = oldend;
-}
-
-/*
- - ordinary - emit an ordinary character
- == static void ordinary(register struct parse *p, register int ch);
- */
-static void
-ordinary(p, ch)
-register struct parse *p;
-register int ch;
-{
- register cat_t *cap = p->g->categories;
-
- if ((p->g->cflags&REG_ICASE) && isalpha(ch) && othercase(ch) != ch)
- bothcases(p, ch);
- else {
- EMIT(OCHAR, (unsigned char)ch);
- if (cap[ch] == 0)
- cap[ch] = p->g->ncategories++;
- }
-}
-
-/*
- - nonnewline - emit REG_NEWLINE version of OANY
- == static void nonnewline(register struct parse *p);
- *
- * Boy, is this implementation ever a kludge...
- */
-static void
-nonnewline(p)
-register struct parse *p;
-{
- register unsigned char *oldnext = p->next;
- register unsigned char *oldend = p->end;
- unsigned char bracket[4];
-
- p->next = bracket;
- p->end = bracket+3;
- bracket[0] = '^';
- bracket[1] = '\n';
- bracket[2] = ']';
- bracket[3] = '\0';
- p_bracket(p);
- assert(p->next == bracket+3);
- p->next = oldnext;
- p->end = oldend;
-}
-
-/*
- - repeat - generate code for a bounded repetition, recursively if needed
- == static void repeat(register struct parse *p, sopno start, int from, int to);
- */
-static void
-repeat(p, start, from, to)
-register struct parse *p;
-sopno start; /* operand from here to end of strip */
-int from; /* repeated from this number */
-int to; /* to this number of times (maybe INFINITY) */
-{
- register sopno finish = HERE();
-# define N 2
-# define INF 3
-# define REP(f, t) ((f)*8 + (t))
-# define MAP(n) (((n) <= 1) ? (n) : ((n) == INFINITY) ? INF : N)
- register sopno copy;
-
- if (p->error != 0) /* head off possible runaway recursion */
- return;
-
- assert(from <= to);
-
- switch (REP(MAP(from), MAP(to))) {
- case REP(0, 0): /* must be user doing this */
- DROP(finish-start); /* drop the operand */
- break;
- case REP(0, 1): /* as x{1,1}? */
- case REP(0, N): /* as x{1,n}? */
- case REP(0, INF): /* as x{1,}? */
- /* KLUDGE: emit y? as (y|) until subtle bug gets fixed */
- INSERT(OCH_, start); /* offset is wrong... */
- repeat(p, start+1, 1, to);
- ASTERN(OOR1, start);
- AHEAD(start); /* ... fix it */
- EMIT(OOR2, 0);
- AHEAD(THERE());
- ASTERN(O_CH, THERETHERE());
- break;
- case REP(1, 1): /* trivial case */
- /* done */
- break;
- case REP(1, N): /* as x?x{1,n-1} */
- /* KLUDGE: emit y? as (y|) until subtle bug gets fixed */
- INSERT(OCH_, start);
- ASTERN(OOR1, start);
- AHEAD(start);
- EMIT(OOR2, 0); /* offset very wrong... */
- AHEAD(THERE()); /* ...so fix it */
- ASTERN(O_CH, THERETHERE());
- copy = dupl(p, start+1, finish+1);
- assert(copy == finish+4);
- repeat(p, copy, 1, to-1);
- break;
- case REP(1, INF): /* as x+ */
- INSERT(OPLUS_, start);
- ASTERN(O_PLUS, start);
- break;
- case REP(N, N): /* as xx{m-1,n-1} */
- copy = dupl(p, start, finish);
- repeat(p, copy, from-1, to-1);
- break;
- case REP(N, INF): /* as xx{n-1,INF} */
- copy = dupl(p, start, finish);
- repeat(p, copy, from-1, to);
- break;
- default: /* "can't happen" */
- SETERROR(REG_ASSERT); /* just in case */
- break;
- }
-}
-
-/*
- - seterr - set an error condition
- == static int seterr(register struct parse *p, int e);
- */
-static int /* useless but makes type checking happy */
-seterr(p, e)
-register struct parse *p;
-int e;
-{
- if (p->error == 0) /* keep earliest error condition */
- p->error = e;
- p->next = nuls; /* try to bring things to a halt */
- p->end = nuls;
- return(0); /* make the return value well-defined */
-}
-
-/*
- - allocset - allocate a set of characters for []
- == static cset *allocset(register struct parse *p);
- */
-static cset *
-allocset(p)
-register struct parse *p;
-{
- register int no = p->g->ncsets++;
- register size_t nc;
- register size_t nbytes;
- register cset *cs;
- register size_t css = (size_t)p->g->csetsize;
- register int i;
-
- if (no >= p->ncsalloc) { /* need another column of space */
- p->ncsalloc += CHAR_BIT;
- nc = p->ncsalloc;
- assert(nc % CHAR_BIT == 0);
- nbytes = nc / CHAR_BIT * css;
- if (p->g->sets == NULL)
- p->g->sets = (cset *)malloc(nc * sizeof(cset));
- else
- p->g->sets = (cset *)realloc((unsigned char *)p->g->sets,
- nc * sizeof(cset));
- if (p->g->setbits == NULL)
- p->g->setbits = (uch *)malloc(nbytes);
- else {
- p->g->setbits = (uch *)realloc((unsigned char *)p->g->setbits,
- nbytes);
- /* xxx this isn't right if setbits is now NULL */
- for (i = 0; i < no; i++)
- p->g->sets[i].ptr = p->g->setbits + css*(i/CHAR_BIT);
- }
- if (p->g->sets != NULL && p->g->setbits != NULL)
- (void) memset((unsigned char *)p->g->setbits + (nbytes - css),
- 0, css);
- else {
- no = 0;
- SETERROR(REG_ESPACE);
- /* caller's responsibility not to do set ops */
- }
- }
-
- assert(p->g->sets != NULL); /* xxx */
- cs = &p->g->sets[no];
- cs->ptr = p->g->setbits + css*((no)/CHAR_BIT);
- cs->mask = 1 << ((no) % CHAR_BIT);
- cs->hash = 0;
- cs->smultis = 0;
- cs->multis = NULL;
-
- return(cs);
-}
-
-/*
- - freeset - free a now-unused set
- == static void freeset(register struct parse *p, register cset *cs);
- */
-static void
-freeset(p, cs)
-register struct parse *p;
-register cset *cs;
-{
- register size_t i;
- register cset *top = &p->g->sets[p->g->ncsets];
- register size_t css = (size_t)p->g->csetsize;
-
- for (i = 0; i < css; i++)
- CHsub(cs, i);
- if (cs == top-1) /* recover only the easy case */
- p->g->ncsets--;
-}
-
-/*
- - freezeset - final processing on a set of characters
- == static int freezeset(register struct parse *p, register cset *cs);
- *
- * The main task here is merging identical sets. This is usually a waste
- * of time (although the hash code minimizes the overhead), but can win
- * big if REG_ICASE is being used. REG_ICASE, by the way, is why the hash
- * is done using addition rather than xor -- all ASCII [aA] sets xor to
- * the same value!
- */
-static int /* set number */
-freezeset(p, cs)
-register struct parse *p;
-register cset *cs;
-{
- register uch h = cs->hash;
- register size_t i;
- register cset *top = &p->g->sets[p->g->ncsets];
- register cset *cs2;
- register size_t css = (size_t)p->g->csetsize;
-
- /* look for an earlier one which is the same */
- for (cs2 = &p->g->sets[0]; cs2 < top; cs2++)
- if (cs2->hash == h && cs2 != cs) {
- /* maybe */
- for (i = 0; i < css; i++)
- if (!!CHIN(cs2, i) != !!CHIN(cs, i))
- break; /* no */
- if (i == css)
- break; /* yes */
- }
-
- if (cs2 < top) { /* found one */
- freeset(p, cs);
- cs = cs2;
- }
-
- return((int)(cs - p->g->sets));
-}
-
-/*
- - firstch - return first character in a set (which must have at least one)
- == static int firstch(register struct parse *p, register cset *cs);
- */
-static int /* character; there is no "none" value */
-firstch(p, cs)
-register struct parse *p;
-register cset *cs;
-{
- register size_t i;
- register size_t css = (size_t)p->g->csetsize;
-
- for (i = 0; i < css; i++)
- if (CHIN(cs, i))
- return((unsigned char)i);
- assert(never);
- return(0); /* arbitrary */
-}
-
-/*
- - nch - number of characters in a set
- == static int nch(register struct parse *p, register cset *cs);
- */
-static int
-nch(p, cs)
-register struct parse *p;
-register cset *cs;
-{
- register size_t i;
- register size_t css = (size_t)p->g->csetsize;
- register int n = 0;
-
- for (i = 0; i < css; i++)
- if (CHIN(cs, i))
- n++;
- return(n);
-}
-
-/*
- - mcadd - add a collating element to a cset
- == static void mcadd(register struct parse *p, register cset *cs, \
- == register char *cp);
- */
-static void
-mcadd(p, cs, cp)
-register struct parse *p;
-register cset *cs;
-register unsigned char *cp;
-{
- register size_t oldend = cs->smultis;
-
- cs->smultis += strlen(cp) + 1;
- if (cs->multis == NULL)
- cs->multis = malloc(cs->smultis);
- else
- cs->multis = realloc(cs->multis, cs->smultis);
- if (cs->multis == NULL) {
- SETERROR(REG_ESPACE);
- return;
- }
-
- (void) strcpy(cs->multis + oldend - 1, cp);
- cs->multis[cs->smultis - 1] = '\0';
-}
-
-#if 0
-/*
- - mcsub - subtract a collating element from a cset
- == static void mcsub(register cset *cs, register unsigned char *cp);
- */
-static void
-mcsub(cs, cp)
-register unsigned cset *cs;
-register unsigned char *cp;
-{
- register unsigned char *fp = mcfind(cs, cp);
- register size_t len = strlen(fp);
-
- assert(fp != NULL);
- (void) memmove(fp, fp + len + 1,
- cs->smultis - (fp + len + 1 - cs->multis));
- cs->smultis -= len;
-
- if (cs->smultis == 0) {
- free(cs->multis);
- cs->multis = NULL;
- return;
- }
-
- cs->multis = realloc(cs->multis, cs->smultis);
- assert(cs->multis != NULL);
-}
-
-/*
- - mcin - is a collating element in a cset?
- == static int mcin(register cset *cs, register unsigned char *cp);
- */
-static int
-mcin(cs, cp)
-register cset *cs;
-register unsigned char *cp;
-{
- return(mcfind(cs, cp) != NULL);
-}
-
-
-/*
- - mcfind - find a collating element in a cset
- == static unsigned char *mcfind(register cset *cs, register unsigned char *cp);
- */
-static unsigned char *
-mcfind(cs, cp)
-register cset *cs;
-register unsigned char *cp;
-{
- register unsigned char *p;
-
- if (cs->multis == NULL)
- return(NULL);
- for (p = cs->multis; *p != '\0'; p += strlen(p) + 1)
- if (strcmp(cp, p) == 0)
- return(p);
- return(NULL);
-}
-#endif
-
-/*
- - mcinvert - invert the list of collating elements in a cset
- == static void mcinvert(register struct parse *p, register cset *cs);
- *
- * This would have to know the set of possibilities. Implementation
- * is deferred.
- */
-static void
-mcinvert(p, cs)
-register struct parse *p;
-register cset *cs;
-{
- assert(cs->multis == NULL); /* xxx */
-}
-
-/*
- - mccase - add case counterparts of the list of collating elements in a cset
- == static void mccase(register struct parse *p, register cset *cs);
- *
- * This would have to know the set of possibilities. Implementation
- * is deferred.
- */
-static void
-mccase(p, cs)
-register struct parse *p;
-register cset *cs;
-{
- assert(cs->multis == NULL); /* xxx */
-}
-
-/*
- - isinsets - is this character in any sets?
- == static int isinsets(register struct re_guts *g, int c);
- */
-static int /* predicate */
-isinsets(g, c)
-register struct re_guts *g;
-int c;
-{
- register uch *col;
- register int i;
- register int ncols = (g->ncsets+(CHAR_BIT-1)) / CHAR_BIT;
- register unsigned uc = (unsigned char)c;
-
- for (i = 0, col = g->setbits; i < ncols; i++, col += g->csetsize)
- if (col[uc] != 0)
- return(1);
- return(0);
-}
-
-/*
- - samesets - are these two characters in exactly the same sets?
- == static int samesets(register struct re_guts *g, int c1, int c2);
- */
-static int /* predicate */
-samesets(g, c1, c2)
-register struct re_guts *g;
-int c1;
-int c2;
-{
- register uch *col;
- register int i;
- register int ncols = (g->ncsets+(CHAR_BIT-1)) / CHAR_BIT;
- register unsigned uc1 = (unsigned char)c1;
- register unsigned uc2 = (unsigned char)c2;
-
- for (i = 0, col = g->setbits; i < ncols; i++, col += g->csetsize)
- if (col[uc1] != col[uc2])
- return(0);
- return(1);
-}
-
-/*
- - categorize - sort out character categories
- == static void categorize(struct parse *p, register struct re_guts *g);
- */
-static void
-categorize(p, g)
-struct parse *p;
-register struct re_guts *g;
-{
- register cat_t *cats = g->categories;
- register int c;
- register int c2;
- register cat_t cat;
-
- /* avoid making error situations worse */
- if (p->error != 0)
- return;
-
- for (c = 0; c <= UCHAR_MAX; c++)
- if (cats[c] == 0 && isinsets(g, c)) {
- cat = g->ncategories++;
- cats[c] = cat;
- for (c2 = c+1; c2 <= UCHAR_MAX; c2++)
- if (cats[c2] == 0 && samesets(g, c, c2))
- cats[c2] = cat;
- }
-}
-
-/*
- - dupl - emit a duplicate of a bunch of sops
- == static sopno dupl(register struct parse *p, sopno start, sopno finish);
- */
-static sopno /* start of duplicate */
-dupl(p, start, finish)
-register struct parse *p;
-sopno start; /* from here */
-sopno finish; /* to this less one */
-{
- register sopno ret = HERE();
- register sopno len = finish - start;
-
- assert(finish >= start);
- if (len == 0)
- return(ret);
- enlarge(p, p->ssize + len); /* this many unexpected additions */
- assert(p->ssize >= p->slen + len);
- (void) memcpy((char *)(p->strip + p->slen),
- (char *)(p->strip + start), (size_t)len*sizeof(sop));
- p->slen += len;
- return(ret);
-}
-
-/*
- - doemit - emit a strip operator
- == static void doemit(register struct parse *p, sop op, size_t opnd);
- *
- * It might seem better to implement this as a macro with a function as
- * hard-case backup, but it's just too big and messy unless there are
- * some changes to the data structures. Maybe later.
- */
-static void
-doemit(p, op, opnd)
-register struct parse *p;
-sop op;
-size_t opnd;
-{
- /* avoid making error situations worse */
- if (p->error != 0)
- return;
-
- /* deal with oversize operands ("can't happen", more or less) */
- assert(opnd < 1<<OPSHIFT);
-
- /* deal with undersized strip */
- if (p->slen >= p->ssize)
- enlarge(p, (p->ssize+1) / 2 * 3); /* +50% */
- assert(p->slen < p->ssize);
-
- /* finally, it's all reduced to the easy case */
- p->strip[p->slen++] = SOP(op, opnd);
-}
-
-/*
- - doinsert - insert a sop into the strip
- == static void doinsert(register struct parse *p, sop op, size_t opnd, sopno pos);
- */
-static void
-doinsert(p, op, opnd, pos)
-register struct parse *p;
-sop op;
-size_t opnd;
-sopno pos;
-{
- register sopno sn;
- register sop s;
- register int i;
-
- /* avoid making error situations worse */
- if (p->error != 0)
- return;
-
- sn = HERE();
- EMIT(op, opnd); /* do checks, ensure space */
- assert(HERE() == sn+1);
- s = p->strip[sn];
-
- /* adjust paren pointers */
- assert(pos > 0);
- for (i = 1; i < NPAREN; i++) {
- if (p->pbegin[i] >= pos) {
- p->pbegin[i]++;
- }
- if (p->pend[i] >= pos) {
- p->pend[i]++;
- }
- }
-
- memmove((char *)&p->strip[pos+1], (char *)&p->strip[pos],
- (HERE()-pos-1)*sizeof(sop));
- p->strip[pos] = s;
-}
-
-/*
- - dofwd - complete a forward reference
- == static void dofwd(register struct parse *p, sopno pos, sop value);
- */
-static void
-dofwd(p, pos, value)
-register struct parse *p;
-register sopno pos;
-sop value;
-{
- /* avoid making error situations worse */
- if (p->error != 0)
- return;
-
- assert(value < 1<<OPSHIFT);
- p->strip[pos] = OP(p->strip[pos]) | value;
-}
-
-/*
- - enlarge - enlarge the strip
- == static void enlarge(register struct parse *p, sopno size);
- */
-static void
-enlarge(p, size)
-register struct parse *p;
-register sopno size;
-{
- register sop *sp;
-
- if (p->ssize >= size)
- return;
-
- sp = (sop *)realloc(p->strip, size*sizeof(sop));
- if (sp == NULL) {
- SETERROR(REG_ESPACE);
- return;
- }
- p->strip = sp;
- p->ssize = size;
-}
-
-/*
- - stripsnug - compact the strip
- == static void stripsnug(register struct parse *p, register struct re_guts *g);
- */
-static void
-stripsnug(p, g)
-register struct parse *p;
-register struct re_guts *g;
-{
- g->nstates = p->slen;
- g->strip = (sop *)realloc((unsigned char *)p->strip, p->slen * sizeof(sop));
- if (g->strip == NULL) {
- SETERROR(REG_ESPACE);
- g->strip = p->strip;
- }
-}
-
-/*
- - findmust - fill in must and mlen with longest mandatory literal string
- == static void findmust(register struct parse *p, register struct re_guts *g);
- *
- * This algorithm could do fancy things like analyzing the operands of |
- * for common subsequences. Someday. This code is simple and finds most
- * of the interesting cases.
- *
- * Note that must and mlen got initialized during setup.
- */
-static void
-findmust(p, g)
-struct parse *p;
-register struct re_guts *g;
-{
- register sop *scan;
- sop *start = NULL;
- register sop *newstart = NULL;
- register sopno newlen;
- register sop s;
- register unsigned char *cp;
- register sopno i;
-
- /* avoid making error situations worse */
- if (p->error != 0)
- return;
-
- /* find the longest OCHAR sequence in strip */
- newlen = 0;
- scan = g->strip + 1;
- do {
- s = *scan++;
- switch (OP(s)) {
- case OCHAR: /* sequence member */
- if (newlen == 0) /* new sequence */
- newstart = scan - 1;
- newlen++;
- break;
- case OPLUS_: /* things that don't break one */
- case OLPAREN:
- case ORPAREN:
- break;
- case OQUEST_: /* things that must be skipped */
- case OCH_:
- scan--;
- do {
- scan += OPND(s);
- s = *scan;
- /* assert() interferes w debug printouts */
- if (OP(s) != O_QUEST && OP(s) != O_CH &&
- OP(s) != OOR2) {
- g->iflags |= BAD;
- return;
- }
- } while (OP(s) != O_QUEST && OP(s) != O_CH);
- /* fallthrough */
- default: /* things that break a sequence */
- if (newlen > g->mlen) { /* ends one */
- start = newstart;
- g->mlen = newlen;
- }
- newlen = 0;
- break;
- }
- } while (OP(s) != OEND);
-
- if (g->mlen == 0) /* there isn't one */
- return;
-
- /* turn it into a character string */
- g->must = malloc((size_t)g->mlen + 1);
- if (g->must == NULL) { /* argh; just forget it */
- g->mlen = 0;
- return;
- }
- cp = g->must;
- scan = start;
- for (i = g->mlen; i > 0; i--) {
- while (OP(s = *scan++) != OCHAR)
- continue;
- assert(cp < g->must + g->mlen);
- *cp++ = (unsigned char)OPND(s);
- }
- assert(cp == g->must + g->mlen);
- *cp++ = '\0'; /* just on general principles */
-}
-
-/*
- - pluscount - count + nesting
- == static sopno pluscount(register struct parse *p, register struct re_guts *g);
- */
-static sopno /* nesting depth */
-pluscount(p, g)
-struct parse *p;
-register struct re_guts *g;
-{
- register sop *scan;
- register sop s;
- register sopno plusnest = 0;
- register sopno maxnest = 0;
-
- if (p->error != 0)
- return(0); /* there may not be an OEND */
-
- scan = g->strip + 1;
- do {
- s = *scan++;
- switch (OP(s)) {
- case OPLUS_:
- plusnest++;
- break;
- case O_PLUS:
- if (plusnest > maxnest)
- maxnest = plusnest;
- plusnest--;
- break;
- }
- } while (OP(s) != OEND);
- if (plusnest != 0)
- g->iflags |= BAD;
- return(maxnest);
-}
diff --git a/regex/regcomp.ih b/regex/regcomp.ih
deleted file mode 100644
index c93d32e51d..0000000000
--- a/regex/regcomp.ih
+++ /dev/null
@@ -1,53 +0,0 @@
-/* ========= begin header generated by ./mkh ========= */
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/* === regcomp.c === */
-static void p_ere(register struct parse *p, int stop);
-static void p_ere_exp(register struct parse *p);
-static void p_str(register struct parse *p);
-static void p_bre(register struct parse *p, register int end1, register int end2);
-static int p_simp_re(register struct parse *p, int starordinary);
-static int p_count(register struct parse *p);
-static void p_bracket(register struct parse *p);
-static void p_b_term(register struct parse *p, register cset *cs);
-static void p_b_cclass(register struct parse *p, register cset *cs);
-static void p_b_eclass(register struct parse *p, register cset *cs);
-static unsigned char p_b_symbol(register struct parse *p);
-static unsigned char p_b_coll_elem(register struct parse *p, int endc);
-static unsigned char othercase(int ch);
-static void bothcases(register struct parse *p, int ch);
-static void ordinary(register struct parse *p, register int ch);
-static void nonnewline(register struct parse *p);
-static void repeat(register struct parse *p, sopno start, int from, int to);
-static int seterr(register struct parse *p, int e);
-static cset *allocset(register struct parse *p);
-static void freeset(register struct parse *p, register cset *cs);
-static int freezeset(register struct parse *p, register cset *cs);
-static int firstch(register struct parse *p, register cset *cs);
-static int nch(register struct parse *p, register cset *cs);
-static void mcadd(register struct parse *p, register cset *cs, register unsigned char *cp);
-#if 0
-static void mcsub(register cset *cs, register unsigned char *cp);
-static int mcin(register cset *cs, register unsigned char *cp);
-static unsigned char *mcfind(register cset *cs, register unsigned char *cp);
-#endif
-static void mcinvert(register struct parse *p, register cset *cs);
-static void mccase(register struct parse *p, register cset *cs);
-static int isinsets(register struct re_guts *g, int c);
-static int samesets(register struct re_guts *g, int c1, int c2);
-static void categorize(struct parse *p, register struct re_guts *g);
-static sopno dupl(register struct parse *p, sopno start, sopno finish);
-static void doemit(register struct parse *p, sop op, size_t opnd);
-static void doinsert(register struct parse *p, sop op, size_t opnd, sopno pos);
-static void dofwd(register struct parse *p, sopno pos, sop value);
-static void enlarge(register struct parse *p, sopno size);
-static void stripsnug(register struct parse *p, register struct re_guts *g);
-static void findmust(register struct parse *p, register struct re_guts *g);
-static sopno pluscount(register struct parse *p, register struct re_guts *g);
-
-#ifdef __cplusplus
-}
-#endif
-/* ========= end header generated by ./mkh ========= */
diff --git a/regex/regerror.c b/regex/regerror.c
deleted file mode 100644
index bf71e3a814..0000000000
--- a/regex/regerror.c
+++ /dev/null
@@ -1,126 +0,0 @@
-#include <sys/types.h>
-#include <stdio.h>
-#include <string.h>
-#include <ctype.h>
-#include <limits.h>
-#include <stdlib.h>
-#include <regex.h>
-
-#include "utils.h"
-#include "regerror.ih"
-
-/*
- = #define REG_OKAY 0
- = #define REG_NOMATCH 1
- = #define REG_BADPAT 2
- = #define REG_ECOLLATE 3
- = #define REG_ECTYPE 4
- = #define REG_EESCAPE 5
- = #define REG_ESUBREG 6
- = #define REG_EBRACK 7
- = #define REG_EPAREN 8
- = #define REG_EBRACE 9
- = #define REG_BADBR 10
- = #define REG_ERANGE 11
- = #define REG_ESPACE 12
- = #define REG_BADRPT 13
- = #define REG_EMPTY 14
- = #define REG_ASSERT 15
- = #define REG_INVARG 16
- = #define REG_ATOI 255 // convert name to number (!)
- = #define REG_ITOA 0400 // convert number to name (!)
- */
-static struct rerr {
- int code;
- char *name;
- char *explain;
-} rerrs[] = {
- {REG_OKAY, "REG_OKAY", "no errors detected"},
- {REG_NOMATCH, "REG_NOMATCH", "regexec() failed to match"},
- {REG_BADPAT, "REG_BADPAT", "invalid regular expression"},
- {REG_ECOLLATE, "REG_ECOLLATE", "invalid collating element"},
- {REG_ECTYPE, "REG_ECTYPE", "invalid character class"},
- {REG_EESCAPE, "REG_EESCAPE", "trailing backslash (\\)"},
- {REG_ESUBREG, "REG_ESUBREG", "invalid backreference number"},
- {REG_EBRACK, "REG_EBRACK", "brackets ([ ]) not balanced"},
- {REG_EPAREN, "REG_EPAREN", "parentheses not balanced"},
- {REG_EBRACE, "REG_EBRACE", "braces not balanced"},
- {REG_BADBR, "REG_BADBR", "invalid repetition count(s)"},
- {REG_ERANGE, "REG_ERANGE", "invalid character range"},
- {REG_ESPACE, "REG_ESPACE", "out of memory"},
- {REG_BADRPT, "REG_BADRPT", "repetition-operator operand invalid"},
- {REG_EMPTY, "REG_EMPTY", "empty (sub)expression"},
- {REG_ASSERT, "REG_ASSERT", "\"can't happen\" -- you found a bug"},
- {REG_INVARG, "REG_INVARG", "invalid argument to regex routine"},
- {-1, "", "*** unknown regexp error code ***"},
-};
-
-/*
- - regerror - the interface to error numbers
- = API_EXPORT(size_t) regerror(int, const regex_t *, char *, size_t);
- */
-/* ARGSUSED */
-API_EXPORT(size_t)
-regerror(errcode, preg, errbuf, errbuf_size)
-int errcode;
-const regex_t *preg;
-char *errbuf;
-size_t errbuf_size;
-{
- register struct rerr *r;
- register size_t len;
- register int target = errcode &~ REG_ITOA;
- register char *s;
- char convbuf[50];
-
- if (errcode == REG_ATOI)
- s = regatoi(preg, convbuf);
- else {
- for (r = rerrs; r->code >= 0; r++)
- if (r->code == target)
- break;
-
- if (errcode&REG_ITOA) {
- if (r->code >= 0)
- (void) strcpy(convbuf, r->name);
- else
- sprintf(convbuf, "REG_0x%x", target);
- assert(strlen(convbuf) < sizeof(convbuf));
- s = convbuf;
- } else
- s = r->explain;
- }
-
- len = strlen(s) + 1;
- if (errbuf_size > 0) {
- if (errbuf_size > len)
- (void) strcpy(errbuf, s);
- else {
- (void) strncpy(errbuf, s, errbuf_size-1);
- errbuf[errbuf_size-1] = '\0';
- }
- }
-
- return(len);
-}
-
-/*
- - regatoi - internal routine to implement REG_ATOI
- == static char *regatoi(const regex_t *preg, char *localbuf);
- */
-static char *
-regatoi(preg, localbuf)
-const regex_t *preg;
-char *localbuf;
-{
- register struct rerr *r;
-
- for (r = rerrs; r->code >= 0; r++)
- if (strcmp(r->name, preg->re_endp) == 0)
- break;
- if (r->code < 0)
- return("0");
-
- sprintf(localbuf, "%d", r->code);
- return(localbuf);
-}
diff --git a/regex/regerror.ih b/regex/regerror.ih
deleted file mode 100644
index 2cb668c24f..0000000000
--- a/regex/regerror.ih
+++ /dev/null
@@ -1,12 +0,0 @@
-/* ========= begin header generated by ./mkh ========= */
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/* === regerror.c === */
-static char *regatoi(const regex_t *preg, char *localbuf);
-
-#ifdef __cplusplus
-}
-#endif
-/* ========= end header generated by ./mkh ========= */
diff --git a/regex/regex.3 b/regex/regex.3
deleted file mode 100644
index 100c8a7f71..0000000000
--- a/regex/regex.3
+++ /dev/null
@@ -1,502 +0,0 @@
-.TH REGEX 3 "17 May 1993"
-.BY "Henry Spencer"
-.de ZR
-.\" one other place knows this name: the SEE ALSO section
-.IR regex (7) \\$1
-..
-.SH NAME
-regcomp, regexec, regerror, regfree \- regular-expression library
-.SH SYNOPSIS
-.ft B
-.\".na
-#include <sys/types.h>
-.br
-#include <regex.h>
-.HP 10
-int regcomp(regex_t\ *preg, const\ char\ *pattern, int\ cflags);
-.HP
-int\ regexec(const\ regex_t\ *preg, const\ char\ *string,
-size_t\ nmatch, regmatch_t\ pmatch[], int\ eflags);
-.HP
-size_t\ regerror(int\ errcode, const\ regex_t\ *preg,
-char\ *errbuf, size_t\ errbuf_size);
-.HP
-void\ regfree(regex_t\ *preg);
-.\".ad
-.ft
-.SH DESCRIPTION
-These routines implement POSIX 1003.2 regular expressions (``RE''s);
-see
-.ZR .
-.I Regcomp
-compiles an RE written as a string into an internal form,
-.I regexec
-matches that internal form against a string and reports results,
-.I regerror
-transforms error codes from either into human-readable messages,
-and
-.I regfree
-frees any dynamically-allocated storage used by the internal form
-of an RE.
-.PP
-The header
-.I <regex.h>
-declares two structure types,
-.I regex_t
-and
-.IR regmatch_t ,
-the former for compiled internal forms and the latter for match reporting.
-It also declares the four functions,
-a type
-.IR regoff_t ,
-and a number of constants with names starting with ``REG_''.
-.PP
-.I Regcomp
-compiles the regular expression contained in the
-.I pattern
-string,
-subject to the flags in
-.IR cflags ,
-and places the results in the
-.I regex_t
-structure pointed to by
-.IR preg .
-.I Cflags
-is the bitwise OR of zero or more of the following flags:
-.IP REG_EXTENDED \w'REG_EXTENDED'u+2n
-Compile modern (``extended'') REs,
-rather than the obsolete (``basic'') REs that
-are the default.
-.IP REG_BASIC
-This is a synonym for 0,
-provided as a counterpart to REG_EXTENDED to improve readability.
-.IP REG_NOSPEC
-Compile with recognition of all special characters turned off.
-All characters are thus considered ordinary,
-so the ``RE'' is a literal string.
-This is an extension,
-compatible with but not specified by POSIX 1003.2,
-and should be used with
-caution in software intended to be portable to other systems.
-REG_EXTENDED and REG_NOSPEC may not be used
-in the same call to
-.IR regcomp .
-.IP REG_ICASE
-Compile for matching that ignores upper/lower case distinctions.
-See
-.ZR .
-.IP REG_NOSUB
-Compile for matching that need only report success or failure,
-not what was matched.
-.IP REG_NEWLINE
-Compile for newline-sensitive matching.
-By default, newline is a completely ordinary character with no special
-meaning in either REs or strings.
-With this flag,
-`[^' bracket expressions and `.' never match newline,
-a `^' anchor matches the null string after any newline in the string
-in addition to its normal function,
-and the `$' anchor matches the null string before any newline in the
-string in addition to its normal function.
-.IP REG_PEND
-The regular expression ends,
-not at the first NUL,
-but just before the character pointed to by the
-.I re_endp
-member of the structure pointed to by
-.IR preg .
-The
-.I re_endp
-member is of type
-.IR const\ char\ * .
-This flag permits inclusion of NULs in the RE;
-they are considered ordinary characters.
-This is an extension,
-compatible with but not specified by POSIX 1003.2,
-and should be used with
-caution in software intended to be portable to other systems.
-.PP
-When successful,
-.I regcomp
-returns 0 and fills in the structure pointed to by
-.IR preg .
-One member of that structure
-(other than
-.IR re_endp )
-is publicized:
-.IR re_nsub ,
-of type
-.IR size_t ,
-contains the number of parenthesized subexpressions within the RE
-(except that the value of this member is undefined if the
-REG_NOSUB flag was used).
-If
-.I regcomp
-fails, it returns a non-zero error code;
-see DIAGNOSTICS.
-.PP
-.I Regexec
-matches the compiled RE pointed to by
-.I preg
-against the
-.IR string ,
-subject to the flags in
-.IR eflags ,
-and reports results using
-.IR nmatch ,
-.IR pmatch ,
-and the returned value.
-The RE must have been compiled by a previous invocation of
-.IR regcomp .
-The compiled form is not altered during execution of
-.IR regexec ,
-so a single compiled RE can be used simultaneously by multiple threads.
-.PP
-By default,
-the NUL-terminated string pointed to by
-.I string
-is considered to be the text of an entire line, minus any terminating
-newline.
-The
-.I eflags
-argument is the bitwise OR of zero or more of the following flags:
-.IP REG_NOTBOL \w'REG_STARTEND'u+2n
-The first character of
-the string
-is not the beginning of a line, so the `^' anchor should not match before it.
-This does not affect the behavior of newlines under REG_NEWLINE.
-.IP REG_NOTEOL
-The NUL terminating
-the string
-does not end a line, so the `$' anchor should not match before it.
-This does not affect the behavior of newlines under REG_NEWLINE.
-.IP REG_STARTEND
-The string is considered to start at
-\fIstring\fR\ + \fIpmatch\fR[0].\fIrm_so\fR
-and to have a terminating NUL located at
-\fIstring\fR\ + \fIpmatch\fR[0].\fIrm_eo\fR
-(there need not actually be a NUL at that location),
-regardless of the value of
-.IR nmatch .
-See below for the definition of
-.IR pmatch
-and
-.IR nmatch .
-This is an extension,
-compatible with but not specified by POSIX 1003.2,
-and should be used with
-caution in software intended to be portable to other systems.
-Note that a non-zero \fIrm_so\fR does not imply REG_NOTBOL;
-REG_STARTEND affects only the location of the string,
-not how it is matched.
-.PP
-See
-.ZR
-for a discussion of what is matched in situations where an RE or a
-portion thereof could match any of several substrings of
-.IR string .
-.PP
-Normally,
-.I regexec
-returns 0 for success and the non-zero code REG_NOMATCH for failure.
-Other non-zero error codes may be returned in exceptional situations;
-see DIAGNOSTICS.
-.PP
-If REG_NOSUB was specified in the compilation of the RE,
-or if
-.I nmatch
-is 0,
-.I regexec
-ignores the
-.I pmatch
-argument (but see below for the case where REG_STARTEND is specified).
-Otherwise,
-.I pmatch
-points to an array of
-.I nmatch
-structures of type
-.IR regmatch_t .
-Such a structure has at least the members
-.I rm_so
-and
-.IR rm_eo ,
-both of type
-.I regoff_t
-(a signed arithmetic type at least as large as an
-.I off_t
-and a
-.IR ssize_t ),
-containing respectively the offset of the first character of a substring
-and the offset of the first character after the end of the substring.
-Offsets are measured from the beginning of the
-.I string
-argument given to
-.IR regexec .
-An empty substring is denoted by equal offsets,
-both indicating the character following the empty substring.
-.PP
-The 0th member of the
-.I pmatch
-array is filled in to indicate what substring of
-.I string
-was matched by the entire RE.
-Remaining members report what substring was matched by parenthesized
-subexpressions within the RE;
-member
-.I i
-reports subexpression
-.IR i ,
-with subexpressions counted (starting at 1) by the order of their opening
-parentheses in the RE, left to right.
-Unused entries in the array\(emcorresponding either to subexpressions that
-did not participate in the match at all, or to subexpressions that do not
-exist in the RE (that is, \fIi\fR\ > \fIpreg\fR\->\fIre_nsub\fR)\(emhave both
-.I rm_so
-and
-.I rm_eo
-set to \-1.
-If a subexpression participated in the match several times,
-the reported substring is the last one it matched.
-(Note, as an example in particular, that when the RE `(b*)+' matches `bbb',
-the parenthesized subexpression matches each of the three `b's and then
-an infinite number of empty strings following the last `b',
-so the reported substring is one of the empties.)
-.PP
-If REG_STARTEND is specified,
-.I pmatch
-must point to at least one
-.I regmatch_t
-(even if
-.I nmatch
-is 0 or REG_NOSUB was specified),
-to hold the input offsets for REG_STARTEND.
-Use for output is still entirely controlled by
-.IR nmatch ;
-if
-.I nmatch
-is 0 or REG_NOSUB was specified,
-the value of
-.IR pmatch [0]
-will not be changed by a successful
-.IR regexec .
-.PP
-.I Regerror
-maps a non-zero
-.I errcode
-from either
-.I regcomp
-or
-.I regexec
-to a human-readable, printable message.
-If
-.I preg
-is non-NULL,
-the error code should have arisen from use of
-the
-.I regex_t
-pointed to by
-.IR preg ,
-and if the error code came from
-.IR regcomp ,
-it should have been the result from the most recent
-.I regcomp
-using that
-.IR regex_t .
-.RI ( Regerror
-may be able to supply a more detailed message using information
-from the
-.IR regex_t .)
-.I Regerror
-places the NUL-terminated message into the buffer pointed to by
-.IR errbuf ,
-limiting the length (including the NUL) to at most
-.I errbuf_size
-bytes.
-If the whole message won't fit,
-as much of it as will fit before the terminating NUL is supplied.
-In any case,
-the returned value is the size of buffer needed to hold the whole
-message (including terminating NUL).
-If
-.I errbuf_size
-is 0,
-.I errbuf
-is ignored but the return value is still correct.
-.PP
-If the
-.I errcode
-given to
-.I regerror
-is first ORed with REG_ITOA,
-the ``message'' that results is the printable name of the error code,
-e.g. ``REG_NOMATCH'',
-rather than an explanation thereof.
-If
-.I errcode
-is REG_ATOI,
-then
-.I preg
-shall be non-NULL and the
-.I re_endp
-member of the structure it points to
-must point to the printable name of an error code;
-in this case, the result in
-.I errbuf
-is the decimal digits of
-the numeric value of the error code
-(0 if the name is not recognized).
-REG_ITOA and REG_ATOI are intended primarily as debugging facilities;
-they are extensions,
-compatible with but not specified by POSIX 1003.2,
-and should be used with
-caution in software intended to be portable to other systems.
-Be warned also that they are considered experimental and changes are possible.
-.PP
-.I Regfree
-frees any dynamically-allocated storage associated with the compiled RE
-pointed to by
-.IR preg .
-The remaining
-.I regex_t
-is no longer a valid compiled RE
-and the effect of supplying it to
-.I regexec
-or
-.I regerror
-is undefined.
-.PP
-None of these functions references global variables except for tables
-of constants;
-all are safe for use from multiple threads if the arguments are safe.
-.SH IMPLEMENTATION CHOICES
-There are a number of decisions that 1003.2 leaves up to the implementor,
-either by explicitly saying ``undefined'' or by virtue of them being
-forbidden by the RE grammar.
-This implementation treats them as follows.
-.PP
-See
-.ZR
-for a discussion of the definition of case-independent matching.
-.PP
-There is no particular limit on the length of REs,
-except insofar as memory is limited.
-Memory usage is approximately linear in RE size, and largely insensitive
-to RE complexity, except for bounded repetitions.
-See BUGS for one short RE using them
-that will run almost any system out of memory.
-.PP
-A backslashed character other than one specifically given a magic meaning
-by 1003.2 (such magic meanings occur only in obsolete [``basic''] REs)
-is taken as an ordinary character.
-.PP
-Any unmatched [ is a REG_EBRACK error.
-.PP
-Equivalence classes cannot begin or end bracket-expression ranges.
-The endpoint of one range cannot begin another.
-.PP
-RE_DUP_MAX, the limit on repetition counts in bounded repetitions, is 255.
-.PP
-A repetition operator (?, *, +, or bounds) cannot follow another
-repetition operator.
-A repetition operator cannot begin an expression or subexpression
-or follow `^' or `|'.
-.PP
-`|' cannot appear first or last in a (sub)expression or after another `|',
-i.e. an operand of `|' cannot be an empty subexpression.
-An empty parenthesized subexpression, `()', is legal and matches an
-empty (sub)string.
-An empty string is not a legal RE.
-.PP
-A `{' followed by a digit is considered the beginning of bounds for a
-bounded repetition, which must then follow the syntax for bounds.
-A `{' \fInot\fR followed by a digit is considered an ordinary character.
-.PP
-`^' and `$' beginning and ending subexpressions in obsolete (``basic'')
-REs are anchors, not ordinary characters.
-.SH SEE ALSO
-grep(1), regex(7)
-.PP
-POSIX 1003.2, sections 2.8 (Regular Expression Notation)
-and
-B.5 (C Binding for Regular Expression Matching).
-.SH DIAGNOSTICS
-Non-zero error codes from
-.I regcomp
-and
-.I regexec
-include the following:
-.PP
-.nf
-.ta \w'REG_ECOLLATE'u+3n
-REG_NOMATCH regexec() failed to match
-REG_BADPAT invalid regular expression
-REG_ECOLLATE invalid collating element
-REG_ECTYPE invalid character class
-REG_EESCAPE \e applied to unescapable character
-REG_ESUBREG invalid backreference number
-REG_EBRACK brackets [ ] not balanced
-REG_EPAREN parentheses ( ) not balanced
-REG_EBRACE braces { } not balanced
-REG_BADBR invalid repetition count(s) in { }
-REG_ERANGE invalid character range in [ ]
-REG_ESPACE ran out of memory
-REG_BADRPT ?, *, or + operand invalid
-REG_EMPTY empty (sub)expression
-REG_ASSERT ``can't happen''\(emyou found a bug
-REG_INVARG invalid argument, e.g. negative-length string
-.fi
-.SH HISTORY
-Written by Henry Spencer at University of Toronto,
-henry@zoo.toronto.edu.
-.SH BUGS
-This is an alpha release with known defects.
-Please report problems.
-.PP
-There is one known functionality bug.
-The implementation of internationalization is incomplete:
-the locale is always assumed to be the default one of 1003.2,
-and only the collating elements etc. of that locale are available.
-.PP
-The back-reference code is subtle and doubts linger about its correctness
-in complex cases.
-.PP
-.I Regexec
-performance is poor.
-This will improve with later releases.
-.I Nmatch
-exceeding 0 is expensive;
-.I nmatch
-exceeding 1 is worse.
-.I Regexec
-is largely insensitive to RE complexity \fIexcept\fR that back
-references are massively expensive.
-RE length does matter; in particular, there is a strong speed bonus
-for keeping RE length under about 30 characters,
-with most special characters counting roughly double.
-.PP
-.I Regcomp
-implements bounded repetitions by macro expansion,
-which is costly in time and space if counts are large
-or bounded repetitions are nested.
-An RE like, say,
-`((((a{1,100}){1,100}){1,100}){1,100}){1,100}'
-will (eventually) run almost any existing machine out of swap space.
-.PP
-There are suspected problems with response to obscure error conditions.
-Notably,
-certain kinds of internal overflow,
-produced only by truly enormous REs or by multiply nested bounded repetitions,
-are probably not handled well.
-.PP
-Due to a mistake in 1003.2, things like `a)b' are legal REs because `)' is
-a special character only in the presence of a previous unmatched `('.
-This can't be fixed until the spec is fixed.
-.PP
-The standard's definition of back references is vague.
-For example, does
-`a\e(\e(b\e)*\e2\e)*d' match `abbbd'?
-Until the standard is clarified,
-behavior in such cases should not be relied on.
-.PP
-The implementation of word-boundary matching is a bit of a kludge,
-and bugs may lurk in combinations of word-boundary matching and anchoring.
diff --git a/regex/regex.7 b/regex/regex.7
deleted file mode 100644
index d89012bda1..0000000000
--- a/regex/regex.7
+++ /dev/null
@@ -1,233 +0,0 @@
-.TH REGEX 7 "7 Feb 1994"
-.BY "Henry Spencer"
-.SH NAME
-regex \- POSIX 1003.2 regular expressions
-.SH DESCRIPTION
-Regular expressions (``RE''s),
-as defined in POSIX 1003.2, come in two forms:
-modern REs (roughly those of
-.IR egrep ;
-1003.2 calls these ``extended'' REs)
-and obsolete REs (roughly those of
-.IR ed ;
-1003.2 ``basic'' REs).
-Obsolete REs mostly exist for backward compatibility in some old programs;
-they will be discussed at the end.
-1003.2 leaves some aspects of RE syntax and semantics open;
-`\(dg' marks decisions on these aspects that
-may not be fully portable to other 1003.2 implementations.
-.PP
-A (modern) RE is one\(dg or more non-empty\(dg \fIbranches\fR,
-separated by `|'.
-It matches anything that matches one of the branches.
-.PP
-A branch is one\(dg or more \fIpieces\fR, concatenated.
-It matches a match for the first, followed by a match for the second, etc.
-.PP
-A piece is an \fIatom\fR possibly followed
-by a single\(dg `*', `+', `?', or \fIbound\fR.
-An atom followed by `*' matches a sequence of 0 or more matches of the atom.
-An atom followed by `+' matches a sequence of 1 or more matches of the atom.
-An atom followed by `?' matches a sequence of 0 or 1 matches of the atom.
-.PP
-A \fIbound\fR is `{' followed by an unsigned decimal integer,
-possibly followed by `,'
-possibly followed by another unsigned decimal integer,
-always followed by `}'.
-The integers must lie between 0 and RE_DUP_MAX (255\(dg) inclusive,
-and if there are two of them, the first may not exceed the second.
-An atom followed by a bound containing one integer \fIi\fR
-and no comma matches
-a sequence of exactly \fIi\fR matches of the atom.
-An atom followed by a bound
-containing one integer \fIi\fR and a comma matches
-a sequence of \fIi\fR or more matches of the atom.
-An atom followed by a bound
-containing two integers \fIi\fR and \fIj\fR matches
-a sequence of \fIi\fR through \fIj\fR (inclusive) matches of the atom.
-.PP
-An atom is a regular expression enclosed in `()' (matching a match for the
-regular expression),
-an empty set of `()' (matching the null string)\(dg,
-a \fIbracket expression\fR (see below), `.'
-(matching any single character), `^' (matching the null string at the
-beginning of a line), `$' (matching the null string at the
-end of a line), a `\e' followed by one of the characters
-`^.[$()|*+?{\e'
-(matching that character taken as an ordinary character),
-a `\e' followed by any other character\(dg
-(matching that character taken as an ordinary character,
-as if the `\e' had not been present\(dg),
-or a single character with no other significance (matching that character).
-A `{' followed by a character other than a digit is an ordinary
-character, not the beginning of a bound\(dg.
-It is illegal to end an RE with `\e'.
-.PP
-A \fIbracket expression\fR is a list of characters enclosed in `[]'.
-It normally matches any single character from the list (but see below).
-If the list begins with `^',
-it matches any single character
-(but see below) \fInot\fR from the rest of the list.
-If two characters in the list are separated by `\-', this is shorthand
-for the full \fIrange\fR of characters between those two (inclusive) in the
-collating sequence,
-e.g. `[0-9]' in ASCII matches any decimal digit.
-It is illegal\(dg for two ranges to share an
-endpoint, e.g. `a-c-e'.
-Ranges are very collating-sequence-dependent,
-and portable programs should avoid relying on them.
-.PP
-To include a literal `]' in the list, make it the first character
-(following a possible `^').
-To include a literal `\-', make it the first or last character,
-or the second endpoint of a range.
-To use a literal `\-' as the first endpoint of a range,
-enclose it in `[.' and `.]' to make it a collating element (see below).
-With the exception of these and some combinations using `[' (see next
-paragraphs), all other special characters, including `\e', lose their
-special significance within a bracket expression.
-.PP
-Within a bracket expression, a collating element (a character,
-a multi-character sequence that collates as if it were a single character,
-or a collating-sequence name for either)
-enclosed in `[.' and `.]' stands for the
-sequence of characters of that collating element.
-The sequence is a single element of the bracket expression's list.
-A bracket expression containing a multi-character collating element
-can thus match more than one character,
-e.g. if the collating sequence includes a `ch' collating element,
-then the RE `[[.ch.]]*c' matches the first five characters
-of `chchcc'.
-.PP
-Within a bracket expression, a collating element enclosed in `[=' and
-`=]' is an equivalence class, standing for the sequences of characters
-of all collating elements equivalent to that one, including itself.
-(If there are no other equivalent collating elements,
-the treatment is as if the enclosing delimiters were `[.' and `.]'.)
-For example, if o and \o'o^' are the members of an equivalence class,
-then `[[=o=]]', `[[=\o'o^'=]]', and `[o\o'o^']' are all synonymous.
-An equivalence class may not\(dg be an endpoint
-of a range.
-.PP
-Within a bracket expression, the name of a \fIcharacter class\fR enclosed
-in `[:' and `:]' stands for the list of all characters belonging to that
-class.
-Standard character class names are:
-.PP
-.RS
-.nf
-.ta 3c 6c 9c
-alnum digit punct
-alpha graph space
-blank lower upper
-cntrl print xdigit
-.fi
-.RE
-.PP
-These stand for the character classes defined in
-.IR ctype (3).
-A locale may provide others.
-A character class may not be used as an endpoint of a range.
-.PP
-There are two special cases\(dg of bracket expressions:
-the bracket expressions `[[:<:]]' and `[[:>:]]' match the null string at
-the beginning and end of a word respectively.
-A word is defined as a sequence of
-word characters
-which is neither preceded nor followed by
-word characters.
-A word character is an
-.I alnum
-character (as defined by
-.IR ctype (3))
-or an underscore.
-This is an extension,
-compatible with but not specified by POSIX 1003.2,
-and should be used with
-caution in software intended to be portable to other systems.
-.PP
-In the event that an RE could match more than one substring of a given
-string,
-the RE matches the one starting earliest in the string.
-If the RE could match more than one substring starting at that point,
-it matches the longest.
-Subexpressions also match the longest possible substrings, subject to
-the constraint that the whole match be as long as possible,
-with subexpressions starting earlier in the RE taking priority over
-ones starting later.
-Note that higher-level subexpressions thus take priority over
-their lower-level component subexpressions.
-.PP
-Match lengths are measured in characters, not collating elements.
-A null string is considered longer than no match at all.
-For example,
-`bb*' matches the three middle characters of `abbbc',
-`(wee|week)(knights|nights)' matches all ten characters of `weeknights',
-when `(.*).*' is matched against `abc' the parenthesized subexpression
-matches all three characters, and
-when `(a*)*' is matched against `bc' both the whole RE and the parenthesized
-subexpression match the null string.
-.PP
-If case-independent matching is specified,
-the effect is much as if all case distinctions had vanished from the
-alphabet.
-When an alphabetic that exists in multiple cases appears as an
-ordinary character outside a bracket expression, it is effectively
-transformed into a bracket expression containing both cases,
-e.g. `x' becomes `[xX]'.
-When it appears inside a bracket expression, all case counterparts
-of it are added to the bracket expression, so that (e.g.) `[x]'
-becomes `[xX]' and `[^x]' becomes `[^xX]'.
-.PP
-No particular limit is imposed on the length of REs\(dg.
-Programs intended to be portable should not employ REs longer
-than 256 bytes,
-as an implementation can refuse to accept such REs and remain
-POSIX-compliant.
-.PP
-Obsolete (``basic'') regular expressions differ in several respects.
-`|', `+', and `?' are ordinary characters and there is no equivalent
-for their functionality.
-The delimiters for bounds are `\e{' and `\e}',
-with `{' and `}' by themselves ordinary characters.
-The parentheses for nested subexpressions are `\e(' and `\e)',
-with `(' and `)' by themselves ordinary characters.
-`^' is an ordinary character except at the beginning of the
-RE or\(dg the beginning of a parenthesized subexpression,
-`$' is an ordinary character except at the end of the
-RE or\(dg the end of a parenthesized subexpression,
-and `*' is an ordinary character if it appears at the beginning of the
-RE or the beginning of a parenthesized subexpression
-(after a possible leading `^').
-Finally, there is one new type of atom, a \fIback reference\fR:
-`\e' followed by a non-zero decimal digit \fId\fR
-matches the same sequence of characters
-matched by the \fId\fRth parenthesized subexpression
-(numbering subexpressions by the positions of their opening parentheses,
-left to right),
-so that (e.g.) `\e([bc]\e)\e1' matches `bb' or `cc' but not `bc'.
-.SH SEE ALSO
-regex(3)
-.PP
-POSIX 1003.2, section 2.8 (Regular Expression Notation).
-.SH BUGS
-Having two kinds of REs is a botch.
-.PP
-The current 1003.2 spec says that `)' is an ordinary character in
-the absence of an unmatched `(';
-this was an unintentional result of a wording error,
-and change is likely.
-Avoid relying on it.
-.PP
-Back references are a dreadful botch,
-posing major problems for efficient implementations.
-They are also somewhat vaguely defined
-(does
-`a\e(\e(b\e)*\e2\e)*d' match `abbbd'?).
-Avoid using them.
-.PP
-1003.2's specification of case-independent matching is vague.
-The ``one case implies all cases'' definition given above
-is current consensus among implementors as to the right interpretation.
-.PP
-The syntax for word boundaries is incredibly ugly.
diff --git a/regex/regex.dsp b/regex/regex.dsp
deleted file mode 100644
index e8f1ad4299..0000000000
--- a/regex/regex.dsp
+++ /dev/null
@@ -1,106 +0,0 @@
-# Microsoft Developer Studio Project File - Name="regex" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 5.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=regex - Win32 Debug
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "regex.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "regex.mak" CFG="regex - Win32 Debug"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "regex - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "regex - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE
-
-# Begin Project
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "regex - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release"
-# PROP Intermediate_Dir "Release"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c
-# ADD CPP /nologo /MT /W3 /GX /O2 /I "." /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o NUL /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o NUL /win32
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /machine:I386
-# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /machine:I386
-
-!ELSEIF "$(CFG)" == "regex - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug"
-# PROP Intermediate_Dir "Debug"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c
-# ADD CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /I "." /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c
-# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o NUL /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o NUL /win32
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /debug /machine:I386 /pdbtype:sept
-
-!ENDIF
-
-# Begin Target
-
-# Name "regex - Win32 Release"
-# Name "regex - Win32 Debug"
-# Begin Source File
-
-SOURCE=.\regcomp.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\regerror.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\regexec.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\regfree.c
-# End Source File
-# End Target
-# End Project
diff --git a/regex/regex.dsw b/regex/regex.dsw
deleted file mode 100644
index 7b7df8126c..0000000000
--- a/regex/regex.dsw
+++ /dev/null
@@ -1,29 +0,0 @@
-Microsoft Developer Studio Workspace File, Format Version 5.00
-# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE!
-
-###############################################################################
-
-Project: "regex"=.\regex.dsp - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-}}}
-
-###############################################################################
-
-Global:
-
-Package=<5>
-{{{
-}}}
-
-Package=<3>
-{{{
-}}}
-
-###############################################################################
-
diff --git a/regex/regex.h b/regex/regex.h
deleted file mode 100644
index b39c5e178c..0000000000
--- a/regex/regex.h
+++ /dev/null
@@ -1,83 +0,0 @@
-#ifndef _HSREGEX_H_
-#define _HSREGEX_H_
-#ifndef _HSREGEX_H
-#define _HSREGEX_H /* never again */
-/* ========= begin header generated by ././mkh ========= */
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/* === regex2.h === */
-#ifdef WIN32
-#define API_EXPORT(type) __declspec(dllexport) type __stdcall
-#else
-#define API_EXPORT(type) type
-#endif
-
-typedef off_t regoff_t;
-typedef struct {
- int re_magic;
- size_t re_nsub; /* number of parenthesized subexpressions */
- const char *re_endp; /* end pointer for REG_PEND */
- struct re_guts *re_g; /* none of your business :-) */
-} regex_t;
-typedef struct {
- regoff_t rm_so; /* start of match */
- regoff_t rm_eo; /* end of match */
-} regmatch_t;
-
-
-/* === regcomp.c === */
-API_EXPORT(int) regcomp(regex_t *, const char *, int);
-#define REG_BASIC 0000
-#define REG_EXTENDED 0001
-#define REG_ICASE 0002
-#define REG_NOSUB 0004
-#define REG_NEWLINE 0010
-#define REG_NOSPEC 0020
-#define REG_PEND 0040
-#define REG_DUMP 0200
-
-
-/* === regerror.c === */
-#define REG_OKAY 0
-#define REG_NOMATCH 1
-#define REG_BADPAT 2
-#define REG_ECOLLATE 3
-#define REG_ECTYPE 4
-#define REG_EESCAPE 5
-#define REG_ESUBREG 6
-#define REG_EBRACK 7
-#define REG_EPAREN 8
-#define REG_EBRACE 9
-#define REG_BADBR 10
-#define REG_ERANGE 11
-#define REG_ESPACE 12
-#define REG_BADRPT 13
-#define REG_EMPTY 14
-#define REG_ASSERT 15
-#define REG_INVARG 16
-#define REG_ATOI 255 /* convert name to number (!) */
-#define REG_ITOA 0400 /* convert number to name (!) */
-API_EXPORT(size_t) regerror(int, const regex_t *, char *, size_t);
-
-
-/* === regexec.c === */
-API_EXPORT(int) regexec(const regex_t *, const char *, size_t, regmatch_t [], int);
-#define REG_NOTBOL 00001
-#define REG_NOTEOL 00002
-#define REG_STARTEND 00004
-#define REG_TRACE 00400 /* tracing of execution */
-#define REG_LARGE 01000 /* force large representation */
-#define REG_BACKR 02000 /* force use of backref code */
-
-
-/* === regfree.c === */
-API_EXPORT(void) regfree(regex_t *);
-
-#ifdef __cplusplus
-}
-#endif
-/* ========= end header generated by ././mkh ========= */
-#endif
-#endif
diff --git a/regex/regex.mak b/regex/regex.mak
deleted file mode 100644
index b87ded340b..0000000000
--- a/regex/regex.mak
+++ /dev/null
@@ -1,304 +0,0 @@
-# Microsoft Developer Studio Generated NMAKE File, Based on regex.dsp
-!IF "$(CFG)" == ""
-CFG=regex - Win32 Release
-!MESSAGE No configuration specified. Defaulting to regex - Win32 Release.
-!ENDIF
-
-!IF "$(CFG)" != "regex - Win32 Release" && "$(CFG)" != "regex - Win32 Debug"
-!MESSAGE Invalid configuration "$(CFG)" specified.
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "regex.mak" CFG="regex - Win32 Release"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "regex - Win32 Release" (based on "Win32 (x86) Static Library")
-!MESSAGE "regex - Win32 Debug" (based on "Win32 (x86) Static Library")
-!MESSAGE
-!ERROR An invalid configuration is specified.
-!ENDIF
-
-!IF "$(OS)" == "Windows_NT"
-NULL=
-!ELSE
-NULL=nul
-!ENDIF
-
-CPP=cl.exe
-
-!IF "$(CFG)" == "regex - Win32 Release"
-
-OUTDIR=.\Release
-INTDIR=.\Release
-# Begin Custom Macros
-OutDir=.\.\Release
-# End Custom Macros
-
-!IF "$(RECURSE)" == "0"
-
-ALL : "$(OUTDIR)\regex.lib"
-
-!ELSE
-
-ALL : "$(OUTDIR)\regex.lib"
-
-!ENDIF
-
-CLEAN :
- -@erase "$(INTDIR)\regcomp.obj"
- -@erase "$(INTDIR)\regerror.obj"
- -@erase "$(INTDIR)\regexec.obj"
- -@erase "$(INTDIR)\regfree.obj"
- -@erase "$(INTDIR)\vc50.idb"
- -@erase "$(OUTDIR)\regex.lib"
-
-"$(OUTDIR)" :
- if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
-
-CPP_PROJ=/nologo /MD /W3 /GX /O2 /I "." /D "WIN32" /D "NDEBUG" /D "_WINDOWS"\
- /Fp"$(INTDIR)\regex.pch" /YX /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /c
-CPP_OBJS=.\Release/
-CPP_SBRS=.
-BSC32=bscmake.exe
-BSC32_FLAGS=/nologo /o"$(OUTDIR)\regex.bsc"
-BSC32_SBRS= \
-
-LIB32=link.exe -lib
-LIB32_FLAGS=/nologo /out:"$(OUTDIR)\regex.lib"
-LIB32_OBJS= \
- "$(INTDIR)\regcomp.obj" \
- "$(INTDIR)\regerror.obj" \
- "$(INTDIR)\regexec.obj" \
- "$(INTDIR)\regfree.obj"
-
-"$(OUTDIR)\regex.lib" : "$(OUTDIR)" $(DEF_FILE) $(LIB32_OBJS)
- $(LIB32) @<<
- $(LIB32_FLAGS) $(DEF_FLAGS) $(LIB32_OBJS)
-<<
-
-!ELSEIF "$(CFG)" == "regex - Win32 Debug"
-
-OUTDIR=.\Debug
-INTDIR=.\Debug
-# Begin Custom Macros
-OutDir=.\.\Debug
-# End Custom Macros
-
-!IF "$(RECURSE)" == "0"
-
-ALL : "$(OUTDIR)\regex.lib" "$(OUTDIR)\regex.bsc"
-
-!ELSE
-
-ALL : "$(OUTDIR)\regex.lib" "$(OUTDIR)\regex.bsc"
-
-!ENDIF
-
-CLEAN :
- -@erase "$(INTDIR)\regcomp.obj"
- -@erase "$(INTDIR)\regcomp.sbr"
- -@erase "$(INTDIR)\regerror.obj"
- -@erase "$(INTDIR)\regerror.sbr"
- -@erase "$(INTDIR)\regexec.obj"
- -@erase "$(INTDIR)\regexec.sbr"
- -@erase "$(INTDIR)\regfree.obj"
- -@erase "$(INTDIR)\regfree.sbr"
- -@erase "$(INTDIR)\vc50.idb"
- -@erase "$(OUTDIR)\regex.bsc"
- -@erase "$(OUTDIR)\regex.lib"
-
-"$(OUTDIR)" :
- if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
-
-CPP_PROJ=/nologo /MDd /W3 /GX /Z7 /Od /I "." /D "WIN32" /D "_DEBUG" /D\
- "_WINDOWS" /FR"$(INTDIR)\\" /Fp"$(INTDIR)\regex.pch" /YX /Fo"$(INTDIR)\\"\
- /Fd"$(INTDIR)\\" /FD /c
-CPP_OBJS=.\Debug/
-CPP_SBRS=.\Debug/
-BSC32=bscmake.exe
-BSC32_FLAGS=/nologo /o"$(OUTDIR)\regex.bsc"
-BSC32_SBRS= \
- "$(INTDIR)\regcomp.sbr" \
- "$(INTDIR)\regerror.sbr" \
- "$(INTDIR)\regexec.sbr" \
- "$(INTDIR)\regfree.sbr"
-
-"$(OUTDIR)\regex.bsc" : "$(OUTDIR)" $(BSC32_SBRS)
- $(BSC32) @<<
- $(BSC32_FLAGS) $(BSC32_SBRS)
-<<
-
-LIB32=link.exe -lib
-LIB32_FLAGS=/nologo /out:"$(OUTDIR)\regex.lib"
-LIB32_OBJS= \
- "$(INTDIR)\regcomp.obj" \
- "$(INTDIR)\regerror.obj" \
- "$(INTDIR)\regexec.obj" \
- "$(INTDIR)\regfree.obj"
-
-"$(OUTDIR)\regex.lib" : "$(OUTDIR)" $(DEF_FILE) $(LIB32_OBJS)
- $(LIB32) @<<
- $(LIB32_FLAGS) $(DEF_FLAGS) $(LIB32_OBJS)
-<<
-
-!ENDIF
-
-.c{$(CPP_OBJS)}.obj::
- $(CPP) @<<
- $(CPP_PROJ) $<
-<<
-
-.cpp{$(CPP_OBJS)}.obj::
- $(CPP) @<<
- $(CPP_PROJ) $<
-<<
-
-.cxx{$(CPP_OBJS)}.obj::
- $(CPP) @<<
- $(CPP_PROJ) $<
-<<
-
-.c{$(CPP_SBRS)}.sbr::
- $(CPP) @<<
- $(CPP_PROJ) $<
-<<
-
-.cpp{$(CPP_SBRS)}.sbr::
- $(CPP) @<<
- $(CPP_PROJ) $<
-<<
-
-.cxx{$(CPP_SBRS)}.sbr::
- $(CPP) @<<
- $(CPP_PROJ) $<
-<<
-
-
-!IF "$(CFG)" == "regex - Win32 Release" || "$(CFG)" == "regex - Win32 Debug"
-SOURCE=.\regcomp.c
-
-!IF "$(CFG)" == "regex - Win32 Release"
-
-DEP_CPP_REGCO=\
- ".\cclass.h"\
- ".\cname.h"\
- ".\regcomp.ih"\
- ".\regex.h"\
- ".\regex2.h"\
- ".\utils.h"\
-
-
-"$(INTDIR)\regcomp.obj" : $(SOURCE) $(DEP_CPP_REGCO) "$(INTDIR)"
-
-
-!ELSEIF "$(CFG)" == "regex - Win32 Debug"
-
-DEP_CPP_REGCO=\
- ".\cclass.h"\
- ".\cname.h"\
- ".\regcomp.ih"\
- ".\regex.h"\
- ".\regex2.h"\
- ".\utils.h"\
- {$(INCLUDE)}"sys\types.h"\
-
-
-"$(INTDIR)\regcomp.obj" "$(INTDIR)\regcomp.sbr" : $(SOURCE) $(DEP_CPP_REGCO)\
- "$(INTDIR)"
-
-
-!ENDIF
-
-SOURCE=.\regerror.c
-
-!IF "$(CFG)" == "regex - Win32 Release"
-
-DEP_CPP_REGER=\
- ".\regerror.ih"\
- ".\regex.h"\
- ".\utils.h"\
-
-
-"$(INTDIR)\regerror.obj" : $(SOURCE) $(DEP_CPP_REGER) "$(INTDIR)"
-
-
-!ELSEIF "$(CFG)" == "regex - Win32 Debug"
-
-DEP_CPP_REGER=\
- ".\regerror.ih"\
- ".\regex.h"\
- ".\utils.h"\
- {$(INCLUDE)}"sys\types.h"\
-
-
-"$(INTDIR)\regerror.obj" "$(INTDIR)\regerror.sbr" : $(SOURCE) $(DEP_CPP_REGER)\
- "$(INTDIR)"
-
-
-!ENDIF
-
-SOURCE=.\regexec.c
-
-!IF "$(CFG)" == "regex - Win32 Release"
-
-DEP_CPP_REGEX=\
- ".\engine.c"\
- ".\engine.ih"\
- ".\regex.h"\
- ".\regex2.h"\
- ".\utils.h"\
-
-
-"$(INTDIR)\regexec.obj" : $(SOURCE) $(DEP_CPP_REGEX) "$(INTDIR)"
-
-
-!ELSEIF "$(CFG)" == "regex - Win32 Debug"
-
-DEP_CPP_REGEX=\
- ".\engine.c"\
- ".\engine.ih"\
- ".\regex.h"\
- ".\regex2.h"\
- ".\utils.h"\
- {$(INCLUDE)}"sys\types.h"\
-
-
-"$(INTDIR)\regexec.obj" "$(INTDIR)\regexec.sbr" : $(SOURCE) $(DEP_CPP_REGEX)\
- "$(INTDIR)"
-
-
-!ENDIF
-
-SOURCE=.\regfree.c
-
-!IF "$(CFG)" == "regex - Win32 Release"
-
-DEP_CPP_REGFR=\
- ".\regex.h"\
- ".\regex2.h"\
- ".\utils.h"\
-
-
-"$(INTDIR)\regfree.obj" : $(SOURCE) $(DEP_CPP_REGFR) "$(INTDIR)"
-
-
-!ELSEIF "$(CFG)" == "regex - Win32 Debug"
-
-DEP_CPP_REGFR=\
- ".\regex.h"\
- ".\regex2.h"\
- ".\utils.h"\
- {$(INCLUDE)}"sys\types.h"\
-
-
-"$(INTDIR)\regfree.obj" "$(INTDIR)\regfree.sbr" : $(SOURCE) $(DEP_CPP_REGFR)\
- "$(INTDIR)"
-
-
-!ENDIF
-
-SOURCE=.\engine.c
-
-!ENDIF
-
diff --git a/regex/regex2.h b/regex/regex2.h
deleted file mode 100644
index 4996f96ecd..0000000000
--- a/regex/regex2.h
+++ /dev/null
@@ -1,140 +0,0 @@
-/*
- * First, the stuff that ends up in the outside-world include file
- = #ifdef WIN32
- = #define API_EXPORT(type) __declspec(dllexport) type __stdcall
- = #else
- = #define API_EXPORT(type) type
- = #endif
- =
- = typedef off_t regoff_t;
- = typedef struct {
- = int re_magic;
- = size_t re_nsub; // number of parenthesized subexpressions
- = const unsigned char *re_endp; // end pointer for REG_PEND
- = struct re_guts *re_g; // none of your business :-)
- = } regex_t;
- = typedef struct {
- = regoff_t rm_so; // start of match
- = regoff_t rm_eo; // end of match
- = } regmatch_t;
- */
-/*
- * internals of regex_t
- */
-#define MAGIC1 ((('r'^0200)<<8) | 'e')
-
-/*
- * The internal representation is a *strip*, a sequence of
- * operators ending with an endmarker. (Some terminology etc. is a
- * historical relic of earlier versions which used multiple strips.)
- * Certain oddities in the representation are there to permit running
- * the machinery backwards; in particular, any deviation from sequential
- * flow must be marked at both its source and its destination. Some
- * fine points:
- *
- * - OPLUS_ and O_PLUS are *inside* the loop they create.
- * - OQUEST_ and O_QUEST are *outside* the bypass they create.
- * - OCH_ and O_CH are *outside* the multi-way branch they create, while
- * OOR1 and OOR2 are respectively the end and the beginning of one of
- * the branches. Note that there is an implicit OOR2 following OCH_
- * and an implicit OOR1 preceding O_CH.
- *
- * In state representations, an operator's bit is on to signify a state
- * immediately *preceding* "execution" of that operator.
- */
-typedef long sop; /* strip operator */
-typedef long sopno;
-#define OPRMASK 0x7c000000
-#define OPDMASK 0x03ffffff
-#define OPSHIFT (26)
-#define OP(n) ((n)&OPRMASK)
-#define OPND(n) ((n)&OPDMASK)
-#define SOP(op, opnd) ((op)|(opnd))
-/* operators meaning operand */
-/* (back, fwd are offsets) */
-#define OEND (1<<OPSHIFT) /* endmarker - */
-#define OCHAR (2<<OPSHIFT) /* character unsigned char */
-#define OBOL (3<<OPSHIFT) /* left anchor - */
-#define OEOL (4<<OPSHIFT) /* right anchor - */
-#define OANY (5<<OPSHIFT) /* . - */
-#define OANYOF (6<<OPSHIFT) /* [...] set number */
-#define OBACK_ (7<<OPSHIFT) /* begin \d paren number */
-#define O_BACK (8<<OPSHIFT) /* end \d paren number */
-#define OPLUS_ (9<<OPSHIFT) /* + prefix fwd to suffix */
-#define O_PLUS (10<<OPSHIFT) /* + suffix back to prefix */
-#define OQUEST_ (11<<OPSHIFT) /* ? prefix fwd to suffix */
-#define O_QUEST (12<<OPSHIFT) /* ? suffix back to prefix */
-#define OLPAREN (13<<OPSHIFT) /* ( fwd to ) */
-#define ORPAREN (14<<OPSHIFT) /* ) back to ( */
-#define OCH_ (15<<OPSHIFT) /* begin choice fwd to OOR2 */
-#define OOR1 (16<<OPSHIFT) /* | pt. 1 back to OOR1 or OCH_ */
-#define OOR2 (17<<OPSHIFT) /* | pt. 2 fwd to OOR2 or O_CH */
-#define O_CH (18<<OPSHIFT) /* end choice back to OOR1 */
-#define OBOW (19<<OPSHIFT) /* begin word - */
-#define OEOW (20<<OPSHIFT) /* end word - */
-
-/*
- * Structure for [] character-set representation. Character sets are
- * done as bit vectors, grouped 8 to a byte vector for compactness.
- * The individual set therefore has both a pointer to the byte vector
- * and a mask to pick out the relevant bit of each byte. A hash code
- * simplifies testing whether two sets could be identical.
- *
- * This will get trickier for multicharacter collating elements. As
- * preliminary hooks for dealing with such things, we also carry along
- * a string of multi-character elements, and decide the size of the
- * vectors at run time.
- */
-typedef struct {
- uch *ptr; /* -> uch [csetsize] */
- uch mask; /* bit within array */
- uch hash; /* hash code */
- size_t smultis;
- unsigned char *multis; /* -> char[smulti] ab\0cd\0ef\0\0 */
-} cset;
-/* note that CHadd and CHsub are unsafe, and CHIN doesn't yield 0/1 */
-#define CHadd(cs, c) ((cs)->ptr[(uch)(c)] |= (cs)->mask, (cs)->hash += (c))
-#define CHsub(cs, c) ((cs)->ptr[(uch)(c)] &= ~(cs)->mask, (cs)->hash -= (c))
-#define CHIN(cs, c) ((cs)->ptr[(uch)(c)] & (cs)->mask)
-#define MCadd(p, cs, cp) mcadd(p, cs, cp) /* regcomp() internal fns */
-#define MCsub(p, cs, cp) mcsub(p, cs, cp)
-#define MCin(p, cs, cp) mcin(p, cs, cp)
-
-/* stuff for character categories */
-typedef unsigned char cat_t;
-
-/*
- * main compiled-expression structure
- */
-struct re_guts {
- int magic;
-# define MAGIC2 ((('R'^0200)<<8)|'E')
- sop *strip; /* malloced area for strip */
- int csetsize; /* number of bits in a cset vector */
- int ncsets; /* number of csets in use */
- cset *sets; /* -> cset [ncsets] */
- uch *setbits; /* -> uch[csetsize][ncsets/CHAR_BIT] */
- int cflags; /* copy of regcomp() cflags argument */
- sopno nstates; /* = number of sops */
- sopno firststate; /* the initial OEND (normally 0) */
- sopno laststate; /* the final OEND */
- int iflags; /* internal flags */
-# define USEBOL 01 /* used ^ */
-# define USEEOL 02 /* used $ */
-# define BAD 04 /* something wrong */
- int nbol; /* number of ^ used */
- int neol; /* number of $ used */
- int ncategories; /* how many character categories */
- cat_t *categories; /* ->catspace[-UCHAR_MIN] */
- unsigned char *must; /* match must contain this string */
- int mlen; /* length of must */
- size_t nsub; /* copy of re_nsub */
- int backrefs; /* does it use back references? */
- sopno nplus; /* how deep does it nest +s? */
- /* catspace must be last */
- cat_t catspace[1]; /* actually [NC] */
-};
-
-/* misc utilities */
-#define OUT (UCHAR_MAX+1) /* a non-character value */
-#define ISWORD(c) (isalnum(c) || (c) == '_')
diff --git a/regex/regex_extra.h b/regex/regex_extra.h
deleted file mode 100644
index d668f7613f..0000000000
--- a/regex/regex_extra.h
+++ /dev/null
@@ -1,23 +0,0 @@
-/* do not frame this - we must be able to include this file multiple times */
-
-#undef regexec
-#undef regerror
-#undef regfree
-#undef regcomp
-
-#if (defined(REGEX) && REGEX == 1) || (!defined(REGEX))
-
-#ifndef PHP_WIN32
-
-#ifndef PHP_NO_ALIASES
-
-#define regexec php_regexec
-#define regerror php_regerror
-#define regfree php_regfree
-#define regcomp php_regcomp
-
-#endif
-
-#endif
-
-#endif
diff --git a/regex/regexec.c b/regex/regexec.c
deleted file mode 100644
index bbfe094c96..0000000000
--- a/regex/regexec.c
+++ /dev/null
@@ -1,138 +0,0 @@
-/*
- * the outer shell of regexec()
- *
- * This file includes engine.c *twice*, after muchos fiddling with the
- * macros that code uses. This lets the same code operate on two different
- * representations for state sets.
- */
-#include <sys/types.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <limits.h>
-#include <ctype.h>
-#include <regex.h>
-
-#include "utils.h"
-#include "regex2.h"
-
-#define PHP_REGEX_NOPE 0; /* for use in asserts; shuts lint up */
-
-/* macros for manipulating states, small version */
-#define states unsigned
-#define states1 unsigned /* for later use in regexec() decision */
-#define CLEAR(v) ((v) = 0)
-#define SET0(v, n) ((v) &= ~((unsigned)1 << (n)))
-#define SET1(v, n) ((v) |= (unsigned)1 << (n))
-#define ISSET(v, n) ((v) & ((unsigned)1 << (n)))
-#define ASSIGN(d, s) ((d) = (s))
-#define EQ(a, b) ((a) == (b))
-#define STATEVARS int dummy /* dummy version */
-#define STATESETUP(m, n) /* nothing */
-#define STATETEARDOWN(m) /* nothing */
-#define SETUP(v) ((v) = 0)
-#define onestate unsigned
-#define INIT(o, n) ((o) = (unsigned)1 << (n))
-#define INC(o) ((o) <<= 1)
-#define ISSTATEIN(v, o) ((v) & (o))
-/* some abbreviations; note that some of these know variable names! */
-/* do "if I'm here, I can also be there" etc without branches */
-#define FWD(dst, src, n) ((dst) |= ((unsigned)(src)&(here)) << (n))
-#define BACK(dst, src, n) ((dst) |= ((unsigned)(src)&(here)) >> (n))
-#define ISSETBACK(v, n) ((v) & ((unsigned)here >> (n)))
-/* function names */
-#define SNAMES /* engine.c looks after details */
-
-#include "engine.c"
-
-/* now undo things */
-#undef states
-#undef CLEAR
-#undef SET0
-#undef SET1
-#undef ISSET
-#undef ASSIGN
-#undef EQ
-#undef STATEVARS
-#undef STATESETUP
-#undef STATETEARDOWN
-#undef SETUP
-#undef onestate
-#undef INIT
-#undef INC
-#undef ISSTATEIN
-#undef FWD
-#undef BACK
-#undef ISSETBACK
-#undef SNAMES
-
-/* macros for manipulating states, large version */
-#define states unsigned char *
-#define CLEAR(v) memset(v, 0, m->g->nstates)
-#define SET0(v, n) ((v)[n] = 0)
-#define SET1(v, n) ((v)[n] = 1)
-#define ISSET(v, n) ((v)[n])
-#define ASSIGN(d, s) memcpy(d, s, m->g->nstates)
-#define EQ(a, b) (memcmp(a, b, m->g->nstates) == 0)
-#define STATEVARS int vn; unsigned char *space
-#define STATESETUP(m, nv) { (m)->space = malloc((nv)*(m)->g->nstates); \
- if ((m)->space == NULL) return(REG_ESPACE); \
- (m)->vn = 0; }
-#define STATETEARDOWN(m) { free((m)->space); }
-#define SETUP(v) ((v) = &m->space[m->vn++ * m->g->nstates])
-#define onestate int
-#define INIT(o, n) ((o) = (n))
-#define INC(o) ((o)++)
-#define ISSTATEIN(v, o) ((v)[o])
-/* some abbreviations; note that some of these know variable names! */
-/* do "if I'm here, I can also be there" etc without branches */
-#define FWD(dst, src, n) ((dst)[here+(n)] |= (src)[here])
-#define BACK(dst, src, n) ((dst)[here-(n)] |= (src)[here])
-#define ISSETBACK(v, n) ((v)[here - (n)])
-/* function names */
-#define LNAMES /* flag */
-
-#include "engine.c"
-
-/*
- - regexec - interface for matching
- = API_EXPORT(int) regexec(const regex_t *, const char *, size_t, \
- = regmatch_t [], int);
- = #define REG_NOTBOL 00001
- = #define REG_NOTEOL 00002
- = #define REG_STARTEND 00004
- = #define REG_TRACE 00400 // tracing of execution
- = #define REG_LARGE 01000 // force large representation
- = #define REG_BACKR 02000 // force use of backref code
- *
- * We put this here so we can exploit knowledge of the state representation
- * when choosing which matcher to call. Also, by this point the matchers
- * have been prototyped.
- */
-API_EXPORT(int) /* 0 success, REG_NOMATCH failure */
-regexec(preg, string, nmatch, pmatch, eflags)
-const regex_t *preg;
-const char *string;
-size_t nmatch;
-regmatch_t pmatch[];
-int eflags;
-{
- register struct re_guts *g = preg->re_g;
-#ifdef REDEBUG
-# define GOODFLAGS(f) (f)
-#else
-# define GOODFLAGS(f) ((f)&(REG_NOTBOL|REG_NOTEOL|REG_STARTEND))
-#endif
-
- if (preg->re_magic != MAGIC1 || g->magic != MAGIC2)
- return(REG_BADPAT);
- assert(!(g->iflags&BAD));
- if (g->iflags&BAD) /* backstop for no-debug case */
- return(REG_BADPAT);
- eflags = GOODFLAGS(eflags);
-
- if (g->nstates <= CHAR_BIT*sizeof(states1) && !(eflags&REG_LARGE))
- return(smatcher(g, (unsigned char *)string, nmatch, pmatch, eflags));
- else
- return(lmatcher(g, (unsigned char *)string, nmatch, pmatch, eflags));
-}
diff --git a/regex/regfree.c b/regex/regfree.c
deleted file mode 100644
index 9fd618a13b..0000000000
--- a/regex/regfree.c
+++ /dev/null
@@ -1,37 +0,0 @@
-#include <sys/types.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <regex.h>
-
-#include "utils.h"
-#include "regex2.h"
-
-/*
- - regfree - free everything
- = API_EXPORT(void) regfree(regex_t *);
- */
-API_EXPORT(void)
-regfree(preg)
-regex_t *preg;
-{
- register struct re_guts *g;
-
- if (preg->re_magic != MAGIC1) /* oops */
- return; /* nice to complain, but hard */
-
- g = preg->re_g;
- if (g == NULL || g->magic != MAGIC2) /* oops again */
- return;
- preg->re_magic = 0; /* mark it invalid */
- g->magic = 0; /* mark it invalid */
-
- if (g->strip != NULL)
- free((char *)g->strip);
- if (g->sets != NULL)
- free((char *)g->sets);
- if (g->setbits != NULL)
- free((char *)g->setbits);
- if (g->must != NULL)
- free(g->must);
- free((char *)g);
-}
diff --git a/regex/split.c b/regex/split.c
deleted file mode 100644
index 188bdb775b..0000000000
--- a/regex/split.c
+++ /dev/null
@@ -1,316 +0,0 @@
-#include <stdio.h>
-#include <string.h>
-
-/*
- - split - divide a string into fields, like awk split()
- = int split(char *string, char *fields[], int nfields, char *sep);
- */
-int /* number of fields, including overflow */
-split(string, fields, nfields, sep)
-char *string;
-char *fields[]; /* list is not NULL-terminated */
-int nfields; /* number of entries available in fields[] */
-char *sep; /* "" white, "c" single char, "ab" [ab]+ */
-{
- register char *p = string;
- register char c; /* latest character */
- register char sepc = sep[0];
- register char sepc2;
- register int fn;
- register char **fp = fields;
- register char *sepp;
- register int trimtrail;
-
- /* white space */
- if (sepc == '\0') {
- while ((c = *p++) == ' ' || c == '\t')
- continue;
- p--;
- trimtrail = 1;
- sep = " \t"; /* note, code below knows this is 2 long */
- sepc = ' ';
- } else
- trimtrail = 0;
- sepc2 = sep[1]; /* now we can safely pick this up */
-
- /* catch empties */
- if (*p == '\0')
- return(0);
-
- /* single separator */
- if (sepc2 == '\0') {
- fn = nfields;
- for (;;) {
- *fp++ = p;
- fn--;
- if (fn == 0)
- break;
- while ((c = *p++) != sepc)
- if (c == '\0')
- return(nfields - fn);
- *(p-1) = '\0';
- }
- /* we have overflowed the fields vector -- just count them */
- fn = nfields;
- for (;;) {
- while ((c = *p++) != sepc)
- if (c == '\0')
- return(fn);
- fn++;
- }
- /* not reached */
- }
-
- /* two separators */
- if (sep[2] == '\0') {
- fn = nfields;
- for (;;) {
- *fp++ = p;
- fn--;
- while ((c = *p++) != sepc && c != sepc2)
- if (c == '\0') {
- if (trimtrail && **(fp-1) == '\0')
- fn++;
- return(nfields - fn);
- }
- if (fn == 0)
- break;
- *(p-1) = '\0';
- while ((c = *p++) == sepc || c == sepc2)
- continue;
- p--;
- }
- /* we have overflowed the fields vector -- just count them */
- fn = nfields;
- while (c != '\0') {
- while ((c = *p++) == sepc || c == sepc2)
- continue;
- p--;
- fn++;
- while ((c = *p++) != '\0' && c != sepc && c != sepc2)
- continue;
- }
- /* might have to trim trailing white space */
- if (trimtrail) {
- p--;
- while ((c = *--p) == sepc || c == sepc2)
- continue;
- p++;
- if (*p != '\0') {
- if (fn == nfields+1)
- *p = '\0';
- fn--;
- }
- }
- return(fn);
- }
-
- /* n separators */
- fn = 0;
- for (;;) {
- if (fn < nfields)
- *fp++ = p;
- fn++;
- for (;;) {
- c = *p++;
- if (c == '\0')
- return(fn);
- sepp = sep;
- while ((sepc = *sepp++) != '\0' && sepc != c)
- continue;
- if (sepc != '\0') /* it was a separator */
- break;
- }
- if (fn < nfields)
- *(p-1) = '\0';
- for (;;) {
- c = *p++;
- sepp = sep;
- while ((sepc = *sepp++) != '\0' && sepc != c)
- continue;
- if (sepc == '\0') /* it wasn't a separator */
- break;
- }
- p--;
- }
-
- /* not reached */
-}
-
-#ifdef TEST_SPLIT
-
-
-/*
- * test program
- * pgm runs regression
- * pgm sep splits stdin lines by sep
- * pgm str sep splits str by sep
- * pgm str sep n splits str by sep n times
- */
-int
-main(argc, argv)
-int argc;
-char *argv[];
-{
- char buf[512];
- register int n;
-# define MNF 10
- char *fields[MNF];
-
- if (argc > 4)
- for (n = atoi(argv[3]); n > 0; n--) {
- (void) strcpy(buf, argv[1]);
- }
- else if (argc > 3)
- for (n = atoi(argv[3]); n > 0; n--) {
- (void) strcpy(buf, argv[1]);
- (void) split(buf, fields, MNF, argv[2]);
- }
- else if (argc > 2)
- dosplit(argv[1], argv[2]);
- else if (argc > 1)
- while (fgets(buf, sizeof(buf), stdin) != NULL) {
- buf[strlen(buf)-1] = '\0'; /* stomp newline */
- dosplit(buf, argv[1]);
- }
- else
- regress();
-
- exit(0);
-}
-
-dosplit(string, seps)
-char *string;
-char *seps;
-{
-# define NF 5
- char *fields[NF];
- register int nf;
-
- nf = split(string, fields, NF, seps);
- print(nf, NF, fields);
-}
-
-print(nf, nfp, fields)
-int nf;
-int nfp;
-char *fields[];
-{
- register int fn;
- register int bound;
-
- bound = (nf > nfp) ? nfp : nf;
- printf("%d:\t", nf);
- for (fn = 0; fn < bound; fn++)
- printf("\"%s\"%s", fields[fn], (fn+1 < nf) ? ", " : "\n");
-}
-
-#define RNF 5 /* some table entries know this */
-struct {
- char *str;
- char *seps;
- int nf;
- char *fi[RNF];
-} tests[] = {
- "", " ", 0, { "" },
- " ", " ", 2, { "", "" },
- "x", " ", 1, { "x" },
- "xy", " ", 1, { "xy" },
- "x y", " ", 2, { "x", "y" },
- "abc def g ", " ", 5, { "abc", "def", "", "g", "" },
- " a bcd", " ", 4, { "", "", "a", "bcd" },
- "a b c d e f", " ", 6, { "a", "b", "c", "d", "e f" },
- " a b c d ", " ", 6, { "", "a", "b", "c", "d " },
-
- "", " _", 0, { "" },
- " ", " _", 2, { "", "" },
- "x", " _", 1, { "x" },
- "x y", " _", 2, { "x", "y" },
- "ab _ cd", " _", 2, { "ab", "cd" },
- " a_b c ", " _", 5, { "", "a", "b", "c", "" },
- "a b c_d e f", " _", 6, { "a", "b", "c", "d", "e f" },
- " a b c d ", " _", 6, { "", "a", "b", "c", "d " },
-
- "", " _~", 0, { "" },
- " ", " _~", 2, { "", "" },
- "x", " _~", 1, { "x" },
- "x y", " _~", 2, { "x", "y" },
- "ab _~ cd", " _~", 2, { "ab", "cd" },
- " a_b c~", " _~", 5, { "", "a", "b", "c", "" },
- "a b_c d~e f", " _~", 6, { "a", "b", "c", "d", "e f" },
- "~a b c d ", " _~", 6, { "", "a", "b", "c", "d " },
-
- "", " _~-", 0, { "" },
- " ", " _~-", 2, { "", "" },
- "x", " _~-", 1, { "x" },
- "x y", " _~-", 2, { "x", "y" },
- "ab _~- cd", " _~-", 2, { "ab", "cd" },
- " a_b c~", " _~-", 5, { "", "a", "b", "c", "" },
- "a b_c-d~e f", " _~-", 6, { "a", "b", "c", "d", "e f" },
- "~a-b c d ", " _~-", 6, { "", "a", "b", "c", "d " },
-
- "", " ", 0, { "" },
- " ", " ", 2, { "", "" },
- "x", " ", 1, { "x" },
- "xy", " ", 1, { "xy" },
- "x y", " ", 2, { "x", "y" },
- "abc def g ", " ", 4, { "abc", "def", "g", "" },
- " a bcd", " ", 3, { "", "a", "bcd" },
- "a b c d e f", " ", 6, { "a", "b", "c", "d", "e f" },
- " a b c d ", " ", 6, { "", "a", "b", "c", "d " },
-
- "", "", 0, { "" },
- " ", "", 0, { "" },
- "x", "", 1, { "x" },
- "xy", "", 1, { "xy" },
- "x y", "", 2, { "x", "y" },
- "abc def g ", "", 3, { "abc", "def", "g" },
- "\t a bcd", "", 2, { "a", "bcd" },
- " a \tb\t c ", "", 3, { "a", "b", "c" },
- "a b c d e ", "", 5, { "a", "b", "c", "d", "e" },
- "a b\tc d e f", "", 6, { "a", "b", "c", "d", "e f" },
- " a b c d e f ", "", 6, { "a", "b", "c", "d", "e f " },
-
- NULL, NULL, 0, { NULL },
-};
-
-regress()
-{
- char buf[512];
- register int n;
- char *fields[RNF+1];
- register int nf;
- register int i;
- register int printit;
- register char *f;
-
- for (n = 0; tests[n].str != NULL; n++) {
- (void) strcpy(buf, tests[n].str);
- fields[RNF] = NULL;
- nf = split(buf, fields, RNF, tests[n].seps);
- printit = 0;
- if (nf != tests[n].nf) {
- printf("split `%s' by `%s' gave %d fields, not %d\n",
- tests[n].str, tests[n].seps, nf, tests[n].nf);
- printit = 1;
- } else if (fields[RNF] != NULL) {
- printf("split() went beyond array end\n");
- printit = 1;
- } else {
- for (i = 0; i < nf && i < RNF; i++) {
- f = fields[i];
- if (f == NULL)
- f = "(NULL)";
- if (strcmp(f, tests[n].fi[i]) != 0) {
- printf("split `%s' by `%s', field %d is `%s', not `%s'\n",
- tests[n].str, tests[n].seps,
- i, fields[i], tests[n].fi[i]);
- printit = 1;
- }
- }
- }
- if (printit)
- print(nf, RNF, fields);
- }
-}
-#endif
diff --git a/regex/tests b/regex/tests
deleted file mode 100644
index c05846177f..0000000000
--- a/regex/tests
+++ /dev/null
@@ -1,475 +0,0 @@
-# regular expression test set
-# Lines are at least three fields, separated by one or more tabs. "" stands
-# for an empty field. First field is an RE. Second field is flags. If
-# C flag given, regcomp() is expected to fail, and the third field is the
-# error name (minus the leading REG_).
-#
-# Otherwise it is expected to succeed, and the third field is the string to
-# try matching it against. If there is no fourth field, the match is
-# expected to fail. If there is a fourth field, it is the substring that
-# the RE is expected to match. If there is a fifth field, it is a comma-
-# separated list of what the subexpressions should match, with - indicating
-# no match for that one. In both the fourth and fifth fields, a (sub)field
-# starting with @ indicates that the (sub)expression is expected to match
-# a null string followed by the stuff after the @; this provides a way to
-# test where null strings match. The character `N' in REs and strings
-# is newline, `S' is space, `T' is tab, `Z' is NUL.
-#
-# The full list of flags:
-# - placeholder, does nothing
-# b RE is a BRE, not an ERE
-# & try it as both an ERE and a BRE
-# C regcomp() error expected, third field is error name
-# i REG_ICASE
-# m ("mundane") REG_NOSPEC
-# s REG_NOSUB (not really testable)
-# n REG_NEWLINE
-# ^ REG_NOTBOL
-# $ REG_NOTEOL
-# # REG_STARTEND (see below)
-# p REG_PEND
-#
-# For REG_STARTEND, the start/end offsets are those of the substring
-# enclosed in ().
-
-# basics
-a & a a
-abc & abc abc
-abc|de - abc abc
-a|b|c - abc a
-
-# parentheses and perversions thereof
-a(b)c - abc abc
-a\(b\)c b abc abc
-a( C EPAREN
-a( b a( a(
-a\( - a( a(
-a\( bC EPAREN
-a\(b bC EPAREN
-a(b C EPAREN
-a(b b a(b a(b
-# gag me with a right parenthesis -- 1003.2 goofed here (my fault, partly)
-a) - a) a)
-) - ) )
-# end gagging (in a just world, those *should* give EPAREN)
-a) b a) a)
-a\) bC EPAREN
-\) bC EPAREN
-a()b - ab ab
-a\(\)b b ab ab
-
-# anchoring and REG_NEWLINE
-^abc$ & abc abc
-a^b - a^b
-a^b b a^b a^b
-a$b - a$b
-a$b b a$b a$b
-^ & abc @abc
-$ & abc @
-^$ & "" @
-$^ - "" @
-\($\)\(^\) b "" @
-# stop retching, those are legitimate (although disgusting)
-^^ - "" @
-$$ - "" @
-b$ & abNc
-b$ &n abNc b
-^b$ & aNbNc
-^b$ &n aNbNc b
-^$ &n aNNb @Nb
-^$ n abc
-^$ n abcN @
-$^ n aNNb @Nb
-\($\)\(^\) bn aNNb @Nb
-^^ n^ aNNb @Nb
-$$ n aNNb @NN
-^a ^ a
-a$ $ a
-^a ^n aNb
-^b ^n aNb b
-a$ $n bNa
-b$ $n bNa b
-a*(^b$)c* - b b
-a*\(^b$\)c* b b b
-
-# certain syntax errors and non-errors
-| C EMPTY
-| b | |
-* C BADRPT
-* b * *
-+ C BADRPT
-? C BADRPT
-"" &C EMPTY
-() - abc @abc
-\(\) b abc @abc
-a||b C EMPTY
-|ab C EMPTY
-ab| C EMPTY
-(|a)b C EMPTY
-(a|)b C EMPTY
-(*a) C BADRPT
-(+a) C BADRPT
-(?a) C BADRPT
-({1}a) C BADRPT
-\(\{1\}a\) bC BADRPT
-(a|*b) C BADRPT
-(a|+b) C BADRPT
-(a|?b) C BADRPT
-(a|{1}b) C BADRPT
-^* C BADRPT
-^* b * *
-^+ C BADRPT
-^? C BADRPT
-^{1} C BADRPT
-^\{1\} bC BADRPT
-
-# metacharacters, backslashes
-a.c & abc abc
-a[bc]d & abd abd
-a\*c & a*c a*c
-a\\b & a\b a\b
-a\\\*b & a\*b a\*b
-a\bc & abc abc
-a\ &C EESCAPE
-a\\bc & a\bc a\bc
-\{ bC BADRPT
-a\[b & a[b a[b
-a[b &C EBRACK
-# trailing $ is a peculiar special case for the BRE code
-a$ & a a
-a$ & a$
-a\$ & a
-a\$ & a$ a$
-a\\$ & a
-a\\$ & a$
-a\\$ & a\$
-a\\$ & a\ a\
-
-# back references, ugh
-a\(b\)\2c bC ESUBREG
-a\(b\1\)c bC ESUBREG
-a\(b*\)c\1d b abbcbbd abbcbbd bb
-a\(b*\)c\1d b abbcbd
-a\(b*\)c\1d b abbcbbbd
-^\(.\)\1 b abc
-a\([bc]\)\1d b abcdabbd abbd b
-a\(\([bc]\)\2\)*d b abbccd abbccd
-a\(\([bc]\)\2\)*d b abbcbd
-# actually, this next one probably ought to fail, but the spec is unclear
-a\(\(b\)*\2\)*d b abbbd abbbd
-# here is a case that no NFA implementation does right
-\(ab*\)[ab]*\1 b ababaaa ababaaa a
-# check out normal matching in the presence of back refs
-\(a\)\1bcd b aabcd aabcd
-\(a\)\1bc*d b aabcd aabcd
-\(a\)\1bc*d b aabd aabd
-\(a\)\1bc*d b aabcccd aabcccd
-\(a\)\1bc*[ce]d b aabcccd aabcccd
-^\(a\)\1b\(c\)*cd$ b aabcccd aabcccd
-
-# ordinary repetitions
-ab*c & abc abc
-ab+c - abc abc
-ab?c - abc abc
-a\(*\)b b a*b a*b
-a\(**\)b b ab ab
-a\(***\)b bC BADRPT
-*a b *a *a
-**a b a a
-***a bC BADRPT
-
-# the dreaded bounded repetitions
-{ & { {
-{abc & {abc {abc
-{1 C BADRPT
-{1} C BADRPT
-a{b & a{b a{b
-a{1}b - ab ab
-a\{1\}b b ab ab
-a{1,}b - ab ab
-a\{1,\}b b ab ab
-a{1,2}b - aab aab
-a\{1,2\}b b aab aab
-a{1 C EBRACE
-a\{1 bC EBRACE
-a{1a C EBRACE
-a\{1a bC EBRACE
-a{1a} C BADBR
-a\{1a\} bC BADBR
-a{,2} - a{,2} a{,2}
-a\{,2\} bC BADBR
-a{,} - a{,} a{,}
-a\{,\} bC BADBR
-a{1,x} C BADBR
-a\{1,x\} bC BADBR
-a{1,x C EBRACE
-a\{1,x bC EBRACE
-a{300} C BADBR
-a\{300\} bC BADBR
-a{1,0} C BADBR
-a\{1,0\} bC BADBR
-ab{0,0}c - abcac ac
-ab\{0,0\}c b abcac ac
-ab{0,1}c - abcac abc
-ab\{0,1\}c b abcac abc
-ab{0,3}c - abbcac abbc
-ab\{0,3\}c b abbcac abbc
-ab{1,1}c - acabc abc
-ab\{1,1\}c b acabc abc
-ab{1,3}c - acabc abc
-ab\{1,3\}c b acabc abc
-ab{2,2}c - abcabbc abbc
-ab\{2,2\}c b abcabbc abbc
-ab{2,4}c - abcabbc abbc
-ab\{2,4\}c b abcabbc abbc
-((a{1,10}){1,10}){1,10} - a a a,a
-
-# multiple repetitions
-a** &C BADRPT
-a++ C BADRPT
-a?? C BADRPT
-a*+ C BADRPT
-a*? C BADRPT
-a+* C BADRPT
-a+? C BADRPT
-a?* C BADRPT
-a?+ C BADRPT
-a{1}{1} C BADRPT
-a*{1} C BADRPT
-a+{1} C BADRPT
-a?{1} C BADRPT
-a{1}* C BADRPT
-a{1}+ C BADRPT
-a{1}? C BADRPT
-a*{b} - a{b} a{b}
-a\{1\}\{1\} bC BADRPT
-a*\{1\} bC BADRPT
-a\{1\}* bC BADRPT
-
-# brackets, and numerous perversions thereof
-a[b]c & abc abc
-a[ab]c & abc abc
-a[^ab]c & adc adc
-a[]b]c & a]c a]c
-a[[b]c & a[c a[c
-a[-b]c & a-c a-c
-a[^]b]c & adc adc
-a[^-b]c & adc adc
-a[b-]c & a-c a-c
-a[b &C EBRACK
-a[] &C EBRACK
-a[1-3]c & a2c a2c
-a[3-1]c &C ERANGE
-a[1-3-5]c &C ERANGE
-a[[.-.]--]c & a-c a-c
-a[1- &C ERANGE
-a[[. &C EBRACK
-a[[.x &C EBRACK
-a[[.x. &C EBRACK
-a[[.x.] &C EBRACK
-a[[.x.]] & ax ax
-a[[.x,.]] &C ECOLLATE
-a[[.one.]]b & a1b a1b
-a[[.notdef.]]b &C ECOLLATE
-a[[.].]]b & a]b a]b
-a[[:alpha:]]c & abc abc
-a[[:notdef:]]c &C ECTYPE
-a[[: &C EBRACK
-a[[:alpha &C EBRACK
-a[[:alpha:] &C EBRACK
-a[[:alpha,:] &C ECTYPE
-a[[:]:]]b &C ECTYPE
-a[[:-:]]b &C ECTYPE
-a[[:alph:]] &C ECTYPE
-a[[:alphabet:]] &C ECTYPE
-[[:alnum:]]+ - -%@a0X- a0X
-[[:alpha:]]+ - -%@aX0- aX
-[[:blank:]]+ - aSSTb SST
-[[:cntrl:]]+ - aNTb NT
-[[:digit:]]+ - a019b 019
-[[:graph:]]+ - Sa%bS a%b
-[[:lower:]]+ - AabC ab
-[[:print:]]+ - NaSbN aSb
-[[:punct:]]+ - S%-&T %-&
-[[:space:]]+ - aSNTb SNT
-[[:upper:]]+ - aBCd BC
-[[:xdigit:]]+ - p0f3Cq 0f3C
-a[[=b=]]c & abc abc
-a[[= &C EBRACK
-a[[=b &C EBRACK
-a[[=b= &C EBRACK
-a[[=b=] &C EBRACK
-a[[=b,=]] &C ECOLLATE
-a[[=one=]]b & a1b a1b
-
-# complexities
-a(((b)))c - abc abc
-a(b|(c))d - abd abd
-a(b*|c)d - abbd abbd
-# just gotta have one DFA-buster, of course
-a[ab]{20} - aaaaabaaaabaaaabaaaab aaaaabaaaabaaaabaaaab
-# and an inline expansion in case somebody gets tricky
-a[ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab] - aaaaabaaaabaaaabaaaab aaaaabaaaabaaaabaaaab
-# and in case somebody just slips in an NFA...
-a[ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab](wee|week)(knights|night) - aaaaabaaaabaaaabaaaabweeknights aaaaabaaaabaaaabaaaabweeknights
-# fish for anomalies as the number of states passes 32
-12345678901234567890123456789 - a12345678901234567890123456789b 12345678901234567890123456789
-123456789012345678901234567890 - a123456789012345678901234567890b 123456789012345678901234567890
-1234567890123456789012345678901 - a1234567890123456789012345678901b 1234567890123456789012345678901
-12345678901234567890123456789012 - a12345678901234567890123456789012b 12345678901234567890123456789012
-123456789012345678901234567890123 - a123456789012345678901234567890123b 123456789012345678901234567890123
-# and one really big one, beyond any plausible word width
-1234567890123456789012345678901234567890123456789012345678901234567890 - a1234567890123456789012345678901234567890123456789012345678901234567890b 1234567890123456789012345678901234567890123456789012345678901234567890
-# fish for problems as brackets go past 8
-[ab][cd][ef][gh][ij][kl][mn] - xacegikmoq acegikm
-[ab][cd][ef][gh][ij][kl][mn][op] - xacegikmoq acegikmo
-[ab][cd][ef][gh][ij][kl][mn][op][qr] - xacegikmoqy acegikmoq
-[ab][cd][ef][gh][ij][kl][mn][op][q] - xacegikmoqy acegikmoq
-
-# subtleties of matching
-abc & xabcy abc
-a\(b\)?c\1d b acd
-aBc i Abc Abc
-a[Bc]*d i abBCcd abBCcd
-0[[:upper:]]1 &i 0a1 0a1
-0[[:lower:]]1 &i 0A1 0A1
-a[^b]c &i abc
-a[^b]c &i aBc
-a[^b]c &i adc adc
-[a]b[c] - abc abc
-[a]b[a] - aba aba
-[abc]b[abc] - abc abc
-[abc]b[abd] - abd abd
-a(b?c)+d - accd accd
-(wee|week)(knights|night) - weeknights weeknights
-(we|wee|week|frob)(knights|night|day) - weeknights weeknights
-a[bc]d - xyzaaabcaababdacd abd
-a[ab]c - aaabc abc
-abc s abc abc
-a* & b @b
-
-# Let's have some fun -- try to match a C comment.
-# first the obvious, which looks okay at first glance...
-/\*.*\*/ - /*x*/ /*x*/
-# but...
-/\*.*\*/ - /*x*/y/*z*/ /*x*/y/*z*/
-# okay, we must not match */ inside; try to do that...
-/\*([^*]|\*[^/])*\*/ - /*x*/ /*x*/
-/\*([^*]|\*[^/])*\*/ - /*x*/y/*z*/ /*x*/
-# but...
-/\*([^*]|\*[^/])*\*/ - /*x**/y/*z*/ /*x**/y/*z*/
-# and a still fancier version, which does it right (I think)...
-/\*([^*]|\*+[^*/])*\*+/ - /*x*/ /*x*/
-/\*([^*]|\*+[^*/])*\*+/ - /*x*/y/*z*/ /*x*/
-/\*([^*]|\*+[^*/])*\*+/ - /*x**/y/*z*/ /*x**/
-/\*([^*]|\*+[^*/])*\*+/ - /*x****/y/*z*/ /*x****/
-/\*([^*]|\*+[^*/])*\*+/ - /*x**x*/y/*z*/ /*x**x*/
-/\*([^*]|\*+[^*/])*\*+/ - /*x***x/y/*z*/ /*x***x/y/*z*/
-
-# subexpressions
-a(b)(c)d - abcd abcd b,c
-a(((b)))c - abc abc b,b,b
-a(b|(c))d - abd abd b,-
-a(b*|c|e)d - abbd abbd bb
-a(b*|c|e)d - acd acd c
-a(b*|c|e)d - ad ad @d
-a(b?)c - abc abc b
-a(b?)c - ac ac @c
-a(b+)c - abc abc b
-a(b+)c - abbbc abbbc bbb
-a(b*)c - ac ac @c
-(a|ab)(bc([de]+)f|cde) - abcdef abcdef a,bcdef,de
-# the regression tester only asks for 9 subexpressions
-a(b)(c)(d)(e)(f)(g)(h)(i)(j)k - abcdefghijk abcdefghijk b,c,d,e,f,g,h,i,j
-a(b)(c)(d)(e)(f)(g)(h)(i)(j)(k)l - abcdefghijkl abcdefghijkl b,c,d,e,f,g,h,i,j,k
-a([bc]?)c - abc abc b
-a([bc]?)c - ac ac @c
-a([bc]+)c - abc abc b
-a([bc]+)c - abcc abcc bc
-a([bc]+)bc - abcbc abcbc bc
-a(bb+|b)b - abb abb b
-a(bbb+|bb+|b)b - abb abb b
-a(bbb+|bb+|b)b - abbb abbb bb
-a(bbb+|bb+|b)bb - abbb abbb b
-(.*).* - abcdef abcdef abcdef
-(a*)* - bc @b @b
-
-# do we get the right subexpression when it is used more than once?
-a(b|c)*d - ad ad -
-a(b|c)*d - abcd abcd c
-a(b|c)+d - abd abd b
-a(b|c)+d - abcd abcd c
-a(b|c?)+d - ad ad @d
-a(b|c?)+d - abcd abcd @d
-a(b|c){0,0}d - ad ad -
-a(b|c){0,1}d - ad ad -
-a(b|c){0,1}d - abd abd b
-a(b|c){0,2}d - ad ad -
-a(b|c){0,2}d - abcd abcd c
-a(b|c){0,}d - ad ad -
-a(b|c){0,}d - abcd abcd c
-a(b|c){1,1}d - abd abd b
-a(b|c){1,1}d - acd acd c
-a(b|c){1,2}d - abd abd b
-a(b|c){1,2}d - abcd abcd c
-a(b|c){1,}d - abd abd b
-a(b|c){1,}d - abcd abcd c
-a(b|c){2,2}d - acbd acbd b
-a(b|c){2,2}d - abcd abcd c
-a(b|c){2,4}d - abcd abcd c
-a(b|c){2,4}d - abcbd abcbd b
-a(b|c){2,4}d - abcbcd abcbcd c
-a(b|c){2,}d - abcd abcd c
-a(b|c){2,}d - abcbd abcbd b
-a(b+|((c)*))+d - abd abd @d,@d,-
-a(b+|((c)*))+d - abcd abcd @d,@d,-
-
-# check out the STARTEND option
-[abc] &# a(b)c b
-[abc] &# a(d)c
-[abc] &# a(bc)d b
-[abc] &# a(dc)d c
-. &# a()c
-b.*c &# b(bc)c bc
-b.* &# b(bc)c bc
-.*c &# b(bc)c bc
-
-# plain strings, with the NOSPEC flag
-abc m abc abc
-abc m xabcy abc
-abc m xyz
-a*b m aba*b a*b
-a*b m ab
-"" mC EMPTY
-
-# cases involving NULs
-aZb & a a
-aZb &p a
-aZb &p# (aZb) aZb
-aZ*b &p# (ab) ab
-a.b &# (aZb) aZb
-a.* &# (aZb)c aZb
-
-# word boundaries (ick)
-[[:<:]]a & a a
-[[:<:]]a & ba
-[[:<:]]a & -a a
-a[[:>:]] & a a
-a[[:>:]] & ab
-a[[:>:]] & a- a
-[[:<:]]a.c[[:>:]] & axcd-dayc-dazce-abc abc
-[[:<:]]a.c[[:>:]] & axcd-dayc-dazce-abc-q abc
-[[:<:]]a.c[[:>:]] & axc-dayc-dazce-abc axc
-[[:<:]]b.c[[:>:]] & a_bxc-byc_d-bzc-q bzc
-[[:<:]].x..[[:>:]] & y_xa_-_xb_y-_xc_-axdc _xc_
-[[:<:]]a_b[[:>:]] & x_a_b
-
-# past problems, and suspected problems
-(A[1])|(A[2])|(A[3])|(A[4])|(A[5])|(A[6])|(A[7])|(A[8])|(A[9])|(A[A]) - A1 A1
-abcdefghijklmnop i abcdefghijklmnop abcdefghijklmnop
-abcdefghijklmnopqrstuv i abcdefghijklmnopqrstuv abcdefghijklmnopqrstuv
-(ALAK)|(ALT[AB])|(CC[123]1)|(CM[123]1)|(GAMC)|(LC[23][EO ])|(SEM[1234])|(SL[ES][12])|(SLWW)|(SLF )|(SLDT)|(VWH[12])|(WH[34][EW])|(WP1[ESN]) - CC11 CC11
-CC[13]1|a{21}[23][EO][123][Es][12]a{15}aa[34][EW]aaaaaaa[X]a - CC11 CC11
-Char \([a-z0-9_]*\)\[.* b Char xyz[k Char xyz[k xyz
-a?b - ab ab
--\{0,1\}[0-9]*$ b -5 -5
diff --git a/regex/utils.h b/regex/utils.h
deleted file mode 100644
index cd4a96025f..0000000000
--- a/regex/utils.h
+++ /dev/null
@@ -1,25 +0,0 @@
-/* utility definitions */
-
-#include "regex_extra.h"
-
-#ifdef _POSIX2_RE_DUP_MAX
-#define DUPMAX _POSIX2_RE_DUP_MAX
-#else
-#define DUPMAX 255
-#endif
-#define INFINITY (DUPMAX + 1)
-#define NC (CHAR_MAX - CHAR_MIN + 1)
-typedef unsigned char uch;
-
-/* switch off assertions (if not already off) if no REDEBUG */
-#ifndef REDEBUG
-#ifndef NDEBUG
-#define NDEBUG /* no assertions please */
-#endif
-#endif
-#include <assert.h>
-
-/* for old systems with bcopy() but no memmove() */
-#ifdef USEBCOPY
-#define memmove(d, s, c) bcopy(s, d, c)
-#endif
diff --git a/run-tests-config.php b/run-tests-config.php
deleted file mode 100644
index 4ac21d7d4c..0000000000
--- a/run-tests-config.php
+++ /dev/null
@@ -1,74 +0,0 @@
-<?php
-/* this file may be duplicated to provide testing for
- multiple php binaries or configurations. It is used
- with the -c option on run_tests2.php. All these
- settings will also go into the environment for tests
- that are directly executed, so you can also set things
- like PHPRC here to force an executable to use a
- specific php.ini file. */
-
-$conf = array(
-/* path to the php source tree */
-'TEST_PHP_SRCDIR' => NULL,
-
-/* executable that will be tested. Not used for
- web based tests */
-'TEST_PHP_EXECUTABLE' => NULL,
-
-/* php.ini to use when executing php */
-'PHPRC' => NULL,
-
-/* log format */
-'TEST_PHP_LOG_FORMAT' => 'LEODC',
-
-/* debugging detail in output. */
-'TEST_PHP_DETAILED' => 0,
-
-/* error style for editors or IDE's */
-'TEST_PHP_ERROR_STYLE' => 'EMACS',
-
-'REPORT_EXIT_STATUS' => 0,
-'NO_PHPTEST_SUMMARY' => 0,
-
-/* don't ask, and don't send results to QA if true */
-'NO_INTERACTION' => true,
-
-/* base url prefixed to any requests */
-'TEST_WEB_BASE_URL' => NULL,
-
-/* if set, copy phpt files into this directory,
- which should be accessable via an http server. The
- TEST_WEB_BASE_URL setting should be the base url
- to access this path. If this is not used,
- TEST_WEB_BASE_URL should be the base url pointing
- to TEST_PHP_SRCDIR, which should then be accessable via
- an http server.
-
- An example would be:
- TEST_WEB_BASE_URL=http://localhost/test
- TEST_BASE_PATH=/path/to/htdocs/test
-*/
-'TEST_BASE_PATH' => NULL,
-
-/* file extension of pages requested via http
- this allows for php to be configured to parse
- extensions other than php, usefull for multiple
- configurations under a single webserver */
-'TEST_WEB_EXT' => 'php',
-
-/* if true doesn't run tests, just outputs executable info */
-'TEST_CONTEXT_INFO' => false,
-
-/* : or ; seperated list of paths */
-'TEST_PATHS' => NULL
-/* additional configuration items that may be set
- to provide proxy support for testes:
- timeout
- proxy_host
- proxy_port
- proxy_user
- proxy_pass
-*/
-);
-
-?> \ No newline at end of file
diff --git a/run-tests.php b/run-tests.php
deleted file mode 100755
index e2073876c3..0000000000
--- a/run-tests.php
+++ /dev/null
@@ -1,1187 +0,0 @@
-<?php
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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. |
- +----------------------------------------------------------------------+
- | Authors: Ilia Alshanetsky <iliaa@php.net> |
- | Preston L. Bannister <pbannister@php.net> |
- | Marcus Boerger <helly@php.net> |
- | Derick Rethans <derick@php.net> |
- | Sander Roobol <sander@php.net> |
- | (based on version by: Stig Bakken <ssb@php.net>) |
- | (based on the PHP 3 test framework by Rasmus Lerdorf) |
- +----------------------------------------------------------------------+
- */
-
-/*
- Require exact specification of PHP executable to test (no guessing!).
- Die if any internal errors encountered in test script.
- Regularized output for simpler post-processing of output.
- Optionally output error lines indicating the failing test source and log
- for direct jump with MSVC or Emacs.
-*/
-
-/*
- * TODO:
- * - do not test PEAR components if base class and/or component class cannot be instanciated
- */
-
-
-/* Sanity check to ensure that pcre extension needed by this script is avaliable.
- * In the event it is not, print a nice error message indicating that this script will
- * not run without it.
- */
-
-if (!extension_loaded("pcre")) {
- echo <<<NO_PCRE_ERROR
-
-+-----------------------------------------------------------+
-| ! ERROR ! |
-| The test-suite requires that you have pcre extension |
-| enabled. To enable this extension either compile your PHP |
-| with --with-pcre-regex or if you've compiled pcre as a |
-| shared module load it via php.ini. |
-+-----------------------------------------------------------+
-
-NO_PCRE_ERROR;
-exit;
-}
-
-if (!function_exists("proc_open")) {
- echo <<<NO_PROC_OPEN_ERROR
-
-+-----------------------------------------------------------+
-| ! ERROR ! |
-| The test-suite requires that proc_open() is available. |
-| Please check if you disabled it in php.ini. |
-+-----------------------------------------------------------+
-
-NO_PROC_OPEN_ERROR;
-exit;
-}
-
-// change into the PHP source directory.
-
-if (getenv('TEST_PHP_SRCDIR')) {
- @chdir(getenv('TEST_PHP_SRCDIR'));
-}
-
-// Delete some security related environment variables
-putenv('SSH_CLIENT=deleted');
-putenv('SSH_AUTH_SOCK=deleted');
-putenv('SSH_TTY=deleted');
-
-$cwd = getcwd();
-set_time_limit(0);
-
-// delete as much output buffers as possible
-while(@ob_end_clean());
-if (ob_get_level()) echo "Not all buffers were deleted.\n";
-
-error_reporting(E_ALL);
-ini_set('magic_quotes_runtime',0); // this would break tests by modifying EXPECT sections
-
-if (ini_get('safe_mode')) {
- echo <<< SAFE_MODE_WARNING
-
-+-----------------------------------------------------------+
-| ! WARNING ! |
-| You are running the test-suite with "safe_mode" ENABLED ! |
-| |
-| Chances are high that no test will work at all, |
-| depending on how you configured "safe_mode" ! |
-+-----------------------------------------------------------+
-
-
-SAFE_MODE_WARNING;
-}
-
-// Don't ever guess at the PHP executable location.
-// Require the explicit specification.
-// Otherwise we could end up testing the wrong file!
-
-if (getenv('TEST_PHP_EXECUTABLE')) {
- $php = getenv('TEST_PHP_EXECUTABLE');
- if ($php=='auto') {
- $php = $cwd.'/sapi/cli/php';
- putenv("TEST_PHP_EXECUTABLE=$php");
- }
-}
-
-if (empty($php) || !file_exists($php)) {
- error("environment variable TEST_PHP_EXECUTABLE must be set to specify PHP executable!");
-}
-
-if (getenv('TEST_PHP_LOG_FORMAT')) {
- $log_format = strtoupper(getenv('TEST_PHP_LOG_FORMAT'));
-} else {
- $log_format = 'LEOD';
-}
-
-if (function_exists('is_executable') && !@is_executable($php)) {
- error("invalid PHP executable specified by TEST_PHP_EXECUTABLE = " . $php);
-}
-
-// Check whether a detailed log is wanted.
-if (getenv('TEST_PHP_DETAILED')) {
- define('DETAILED', getenv('TEST_PHP_DETAILED'));
-} else {
- define('DETAILED', 0);
-}
-
-// Check whether user test dirs are requested.
-if (getenv('TEST_PHP_USER')) {
- $user_tests = explode (',', getenv('TEST_PHP_USER'));
-} else {
- $user_tests = array();
-}
-
-// Get info from php
-$info_file = realpath(dirname(__FILE__)) . '/run-test-info.php';
-@unlink($info_file);
-$php_info = '<?php echo "
-PHP_SAPI : " . PHP_SAPI . "
-PHP_VERSION : " . phpversion() . "
-ZEND_VERSION: " . zend_version() . "
-PHP_OS : " . PHP_OS . " - " . php_uname() . "
-INI actual : " . realpath(get_cfg_var("cfg_file_path")) . "
-More .INIs : " . (function_exists(\'php_ini_scanned_files\') ? str_replace("\n","", php_ini_scanned_files()) : "** not determined **"); ?>';
-save_text($info_file, $php_info);
-$ini_overwrites = array(
- 'output_handler=',
- 'zlib.output_compression=Off',
- 'open_basedir=',
- 'safe_mode=0',
- 'disable_functions=',
- 'output_buffering=Off',
- 'error_reporting=4095',
- 'display_errors=1',
- 'log_errors=0',
- 'html_errors=0',
- 'track_errors=1',
- 'report_memleaks=1',
- 'report_zend_debug=0',
- 'docref_root=',
- 'docref_ext=.html',
- 'error_prepend_string=',
- 'error_append_string=',
- 'auto_prepend_file=',
- 'auto_append_file=',
- 'magic_quotes_runtime=0',
- 'xdebug.default_enable=0',
- 'session.auto_start=0'
- );
-$info_params = array();
-settings2array($ini_overwrites,$info_params);
-settings2params($info_params);
-$php_info = `$php $info_params $info_file`;
-@unlink($info_file);
-define('TESTED_PHP_VERSION', `$php -r 'echo PHP_VERSION;'`);
-
-// Write test context information.
-function write_information()
-{
- global $cwd, $php, $php_info, $user_tests;
-
-echo "
-=====================================================================
-CWD : $cwd
-PHP : $php $php_info
-Extra dirs : ";
-foreach ($user_tests as $test_dir) {
- echo "{$test_dir}\n ";
-}
-echo "
-=====================================================================
-";
-}
-
-// Determine the tests to be run.
-
-$test_files = array();
-$test_results = array();
-$PHP_FAILED_TESTS = array();
-
-// If parameters given assume they represent selected tests to run.
-$failed_tests_file= false;
-$pass_option_n = false;
-$pass_options = '';
-if (isset($argc) && $argc > 1) {
- for ($i=1; $i<$argc; $i++) {
- if (substr($argv[$i],0,1) == '-') {
- $switch = strtolower(substr($argv[$i],1,1));
- switch($switch) {
- case 'r':
- case 'l':
- $test_list = @file($argv[++$i]);
- if (is_array($test_list) && count($test_list)) {
- $test_files = array_merge($test_files, $test_list);
- }
- if ($switch != 'l') {
- break;
- }
- $i--;
- case 'w':
- $failed_tests_file = fopen($argv[++$i], 'w+t');
- break;
- case 'a':
- $failed_tests_file = fopen($argv[++$i], 'a+t');
- break;
- case 'n':
- if (!$pass_option_n) {
- $pass_options .= ' -n';
- }
- $pass_option_n = true;
- break;
- default:
- echo "Illegal switch specified!\n";
- case "h":
- case "help":
- case "-help":
- echo <<<HELP
-Synopsis:
- php run-tests.php [options] [files] [directories]
-
-Options:
- -l <file> Read the testfiles to be executed from <file>. After the test
- has finished all failed tests are written to the same <file>.
- If the list is empty and no further test is specified then
- all tests are executed.
-
- -r <file> Read the testfiles to be executed from <file>.
-
- -w <file> Write a list of all failed tests to <file>.
-
- -a <file> Same as -w but append rather then truncating <file>.
-
- -n Pass -n option to the php binary (Do not use a php.ini).
-
- -h <file> This Help.
-
-HELP;
- exit(1);
- }
- } else {
- $testfile = realpath($argv[$i]);
- if (is_dir($testfile)) {
- find_files($testfile);
- } else if (preg_match("/\.phpt$/", $testfile)) {
- $test_files[] = $testfile;
- }
- }
- }
- $test_files = array_unique($test_files);
- for($i = 0; $i < count($test_files); $i++) {
- $test_files[$i] = trim($test_files[$i]);
- }
-
- // Run selected tests.
- $test_cnt = count($test_files);
- if ($test_cnt) {
- write_information();
- usort($test_files, "test_sort");
- echo "Running selected tests.\n";
- $start_time = time();
- $test_idx = 0;
- foreach($test_files AS $name) {
- $test_results[$name] = run_test($php,$name,$test_cnt,++$test_idx);
- if ($failed_tests_file && ($test_results[$name] == 'FAILED' || $test_results[$name] == 'WARNED')) {
- fwrite($failed_tests_file, "$name\n");
- }
- }
- if ($failed_tests_file) {
- fclose($failed_tests_file);
- }
- $end_time = time();
- if (count($test_files) > 1) {
- echo "
-=====================================================================";
- compute_summary();
- echo get_summary(false);
- }
- if (getenv('REPORT_EXIT_STATUS') == 1 and ereg('FAILED( |$)', implode(' ', $test_results))) {
- exit(1);
- }
- exit(0);
- }
-}
-
-write_information();
-
-// Compile a list of all test files (*.phpt).
-$test_files = array();
-$exts_to_test = get_loaded_extensions();
-$exts_tested = count($exts_to_test);
-$exts_skipped = 0;
-$ignored_by_ext = 0;
-sort($exts_to_test);
-$test_dirs = array('tests', 'ext');
-$optionals = array('pear', 'Zend', 'ZendEngine2');
-foreach($optionals as $dir) {
- if (@filetype($dir) == 'dir') {
- $test_dirs[] = $dir;
- }
-}
-
-foreach ($test_dirs as $dir) {
- find_files("{$cwd}/{$dir}", ($dir == 'ext'));
-}
-
-foreach ($user_tests as $dir) {
- find_files($dir, ($dir == 'ext'));
-}
-
-function find_files($dir,$is_ext_dir=FALSE,$ignore=FALSE)
-{
- global $test_files, $exts_to_test, $ignored_by_ext, $exts_skipped, $exts_tested;
-
- $o = opendir($dir) or error("cannot open directory: $dir");
- while (($name = readdir($o)) !== FALSE) {
- if (is_dir("{$dir}/{$name}") && !in_array($name, array('.', '..', 'CVS'))) {
- $skip_ext = ($is_ext_dir && !in_array($name, $exts_to_test));
- if ($skip_ext) {
- $exts_skipped++;
- }
- find_files("{$dir}/{$name}", FALSE, $ignore || $skip_ext);
- }
-
- // Cleanup any left-over tmp files from last run.
- if (substr($name, -4) == '.tmp') {
- @unlink("$dir/$name");
- continue;
- }
-
- // Otherwise we're only interested in *.phpt files.
- if (substr($name, -5) == '.phpt') {
- if ($ignore) {
- $ignored_by_ext++;
- } else {
- $testfile = realpath("{$dir}/{$name}");
- $test_files[] = $testfile;
- }
- }
- }
- closedir($o);
-}
-
-function test_sort($a, $b)
-{
- global $cwd;
-
- $ta = strpos($a, "{$cwd}/tests")===0 ? 1 + (strpos($a, "{$cwd}/tests/run-test")===0 ? 1 : 0) : 0;
- $tb = strpos($b, "{$cwd}/tests")===0 ? 1 + (strpos($b, "{$cwd}/tests/run-test")===0 ? 1 : 0) : 0;
- if ($ta == $tb) {
- return strcmp($a, $b);
- } else {
- return $tb - $ta;
- }
-}
-
-$test_files = array_unique($test_files);
-usort($test_files, "test_sort");
-
-$start_time = time();
-
-echo "TIME START " . date('Y-m-d H:i:s', $start_time) . "
-=====================================================================
-";
-
-$test_cnt = count($test_files);
-$test_idx = 0;
-foreach ($test_files as $name) {
- $test_results[$name] = run_test($php,$name,$test_cnt,++$test_idx);
-}
-
-$end_time = time();
-
-// Summarize results
-
-if (0 == count($test_results)) {
- echo "No tests were run.\n";
- return;
-}
-
-compute_summary();
-
-echo "
-=====================================================================
-TIME END " . date('Y-m-d H:i:s', $end_time);
-
-$summary = get_summary(true);
-echo $summary;
-
-define('PHP_QA_EMAIL', 'qa-reports@lists.php.net');
-define('QA_SUBMISSION_PAGE', 'http://qa.php.net/buildtest-process.php');
-
-/* We got failed Tests, offer the user to send and e-mail to QA team, unless NO_INTERACTION is set */
-if (!getenv('NO_INTERACTION')) {
- $fp = fopen("php://stdin", "r+");
- echo "\nPlease allow this report to be send to the PHP QA\nteam. This will give us a better understanding in how\n";
- echo "PHP's test cases are doing.\n";
- echo "(choose \"s\" to just save the results to a file)? [Yns]: ";
- flush();
- $user_input = fgets($fp, 10);
- $just_save_results = (strtolower($user_input[0]) == 's');
-
- if ($just_save_results || strlen(trim($user_input)) == 0 || strtolower($user_input[0]) == 'y') {
- /*
- * Collect information about the host system for our report
- * Fetch phpinfo() output so that we can see the PHP enviroment
- * Make an archive of all the failed tests
- * Send an email
- */
-
- /* Ask the user to provide an email address, so that QA team can contact the user */
- if (!strncasecmp($user_input, 'y', 1) || strlen(trim($user_input)) == 0) {
- echo "\nPlease enter your email address.\n(Your address will be mangled so that it will not go out on any\nmailinglist in plain text): ";
- flush();
- $user_email = trim(fgets($fp, 1024));
- $user_email = str_replace("@", " at ", str_replace(".", " dot ", $user_email));
- }
-
- $failed_tests_data = '';
- $sep = "\n" . str_repeat('=', 80) . "\n";
-
- $failed_tests_data .= $failed_test_summary . "\n";
- $failed_tests_data .= $summary . "\n";
-
- if ($sum_results['FAILED']) {
- foreach ($PHP_FAILED_TESTS as $test_info) {
- $failed_tests_data .= $sep . $test_info['name'] . $test_info['info'];
- $failed_tests_data .= $sep . file_get_contents(realpath($test_info['output']));
- $failed_tests_data .= $sep . file_get_contents(realpath($test_info['diff']));
- $failed_tests_data .= $sep . "\n\n";
- }
- $status = "failed";
- } else {
- $status = "success";
- }
-
- $failed_tests_data .= "\n" . $sep . 'BUILD ENVIRONMENT' . $sep;
- $failed_tests_data .= "OS:\n" . PHP_OS . " - " . php_uname() . "\n\n";
- $ldd = $automake = $autoconf = $sys_libtool = $libtool = $compiler = 'N/A';
-
- if (substr(PHP_OS, 0, 3) != "WIN") {
- $automake = shell_exec('automake --version');
- $autoconf = shell_exec('autoconf --version');
- /* Always use the generated libtool - Mac OSX uses 'glibtool' */
- $libtool = shell_exec($_SERVER['PWD'] . '/libtool --version');
- $sys_libtool = shell_exec('libtool --version');
- /* Try the most common flags for 'version' */
- $flags = array('-v', '-V', '--version');
- $cc_status=0;
- foreach($flags AS $flag) {
- system(getenv('CC')." $flag >/dev/null 2>&1", $cc_status);
- if ($cc_status == 0) {
- $compiler = shell_exec(getenv('CC')." $flag 2>&1");
- break;
- }
- }
- $ldd = shell_exec("ldd $php");
- }
- $failed_tests_data .= "Automake:\n$automake\n";
- $failed_tests_data .= "Autoconf:\n$autoconf\n";
- $failed_tests_data .= "Bundled Libtool:\n$libtool\n";
- $failed_tests_data .= "System Libtool:\n$sys_libtool\n";
- $failed_tests_data .= "Compiler:\n$compiler\n";
- $failed_tests_data .= "Bison:\n". @shell_exec('bison --version'). "\n";
- $failed_tests_data .= "Libraries:\n$ldd\n";
- $failed_tests_data .= "\n";
-
- if (isset($user_email)) {
- $failed_tests_data .= "User's E-mail: ".$user_email."\n\n";
- }
-
- $failed_tests_data .= $sep . "PHPINFO" . $sep;
- $failed_tests_data .= shell_exec($php.' -dhtml_errors=0 -i');
-
- $compression = 0;
-
- if ($just_save_results || !mail_qa_team($failed_tests_data, $compression, $status)) {
- $output_file = 'php_test_results_' . date('Ymd_Hi') . ( $compression ? '.txt.gz' : '.txt' );
- $fp = fopen($output_file, "w");
- fwrite($fp, $failed_tests_data);
- fclose($fp);
-
- if (!$just_save_results) {
- echo "\nThe test script was unable to automatically send the report to PHP's QA Team\n";
- }
-
- echo "Please send ".$output_file." to ".PHP_QA_EMAIL." manually, thank you.\n";
- } else {
- fwrite($fp, "\nThank you for helping to make PHP better.\n");
- fclose($fp);
- }
- }
-}
-
-if (getenv('REPORT_EXIT_STATUS') == 1 and $sum_results['FAILED']) {
- exit(1);
-}
-
-//
-// Send Email to QA Team
-//
-
-function mail_qa_team($data, $compression, $status = FALSE)
-{
- $url_bits = parse_url(QA_SUBMISSION_PAGE);
- if (empty($url_bits['port'])) $url_bits['port'] = 80;
-
- $data = "php_test_data=" . urlencode(base64_encode(preg_replace("/[\\x00]/", "[0x0]", $data)));
- $data_length = strlen($data);
-
- $fs = fsockopen($url_bits['host'], $url_bits['port'], $errno, $errstr, 10);
- if (!$fs) {
- return FALSE;
- }
-
- $php_version = urlencode(TESTED_PHP_VERSION);
-
- echo "\nPosting to {$url_bits['host']} {$url_bits['path']}\n";
- fwrite($fs, "POST ".$url_bits['path']."?status=$status&version=$php_version HTTP/1.1\r\n");
- fwrite($fs, "Host: ".$url_bits['host']."\r\n");
- fwrite($fs, "User-Agent: QA Browser 0.1\r\n");
- fwrite($fs, "Content-Type: application/x-www-form-urlencoded\r\n");
- fwrite($fs, "Content-Length: ".$data_length."\r\n\r\n");
- fwrite($fs, $data);
- fwrite($fs, "\r\n\r\n");
- fclose($fs);
-
- return 1;
-}
-
-
-//
-// Write the given text to a temporary file, and return the filename.
-//
-
-function save_text($filename,$text)
-{
- $fp = @fopen($filename,'w') or error("Cannot open file '" . $filename . "' (save_text)");
- fwrite($fp,$text);
- fclose($fp);
- if (1 < DETAILED) echo "
-FILE $filename {{{
-$text
-}}}
-";
-}
-
-//
-// Write an error in a format recognizable to Emacs or MSVC.
-//
-
-function error_report($testname,$logname,$tested)
-{
- $testname = realpath($testname);
- $logname = realpath($logname);
- switch (strtoupper(getenv('TEST_PHP_ERROR_STYLE'))) {
- case 'MSVC':
- echo $testname . "(1) : $tested\n";
- echo $logname . "(1) : $tested\n";
- break;
- case 'EMACS':
- echo $testname . ":1: $tested\n";
- echo $logname . ":1: $tested\n";
- break;
- }
-}
-
-function system_with_timeout($commandline)
-{
- $data = "";
-
- $proc = proc_open($commandline, array(
- 0 => array('pipe', 'r'),
- 1 => array('pipe', 'w'),
- 2 => array('pipe', 'w')
- ), $pipes, null, null, array("suppress_errors" => true));
-
- if (!$proc)
- return false;
-
- fclose($pipes[0]);
-
- while (true) {
- /* hide errors from interrupted syscalls */
- $r = $pipes;
- $w = null;
- $e = null;
- $n = @stream_select($r, $w, $e, 60);
-
- if ($n == 0) {
- /* timed out */
- $data .= "\n ** ERROR: process timed out **\n";
- proc_terminate($proc);
- return $data;
- } else if ($n > 0) {
- $line = fread($pipes[1], 8192);
- if (strlen($line) == 0) {
- /* EOF */
- break;
- }
- $data .= $line;
- }
- }
- $stat = proc_get_status($proc);
- if ($stat['signaled']) {
- $data .= "\nTermsig=".$stat['stopsig'];
- }
- $code = proc_close($proc);
- return $data;
-}
-
-//
-// Run an individual test case.
-//
-
-function run_test($php, $file, $test_cnt, $test_idx)
-{
- global $log_format, $info_params, $ini_overwrites, $cwd, $PHP_FAILED_TESTS, $pass_options;
-
- if (DETAILED) echo "
-=================
-TEST $file
-";
-
- // Load the sections of the test file.
- $section_text = array(
- 'TEST' => '',
- 'SKIPIF' => '',
- 'GET' => '',
- 'ARGS' => '',
- );
-
- $fp = @fopen($file, "r") or error("Cannot open test file: $file");
-
- if (!feof($fp)) {
- $line = fgets($fp);
- } else {
- echo "BORK empty test [$file]\n";
- return 'BORKED';
- }
- if (!ereg('^--TEST--',$line,$r)) {
- echo "BORK tests must start with --TEST-- [$file]\n";
- return 'BORKED';
- }
- $section = 'TEST';
- while (!feof($fp)) {
- $line = fgets($fp);
-
- // Match the beginning of a section.
- if (ereg('^--([A-Z]+)--',$line,$r)) {
- $section = $r[1];
- $section_text[$section] = '';
- continue;
- }
-
- // Add to the section text.
- $section_text[$section] .= $line;
- }
- if (@count($section_text['FILE']) != 1) {
- echo "BORK missing section --FILE-- [$file]\n";
- return 'BORKED';
- }
- if ((@count($section_text['EXPECT']) + @count($section_text['EXPECTF']) + @count($section_text['EXPECTREGEX'])) != 1) {
- echo "BORK missing section --EXPECT--, --EXPECTF-- or --EXPECTREGEX-- [$file]\n";
- return 'BORKED';
- }
- fclose($fp);
-
- /* For GET/POST tests, check if cgi sapi is avaliable and if it is, use it. */
- if ((!empty($section_text['GET']) || !empty($section_text['POST']))) {
- if (file_exists("./sapi/cgi/php")) {
- $old_php = $php;
- $php = realpath("./sapi/cgi/php") . ' -C ';
- }
- }
-
- $shortname = str_replace($cwd.'/', '', $file);
- $tested = trim($section_text['TEST'])." [$shortname]";
-
- echo "TEST $test_idx/$test_cnt [$shortname]\r";
- flush();
-
- $tmp = realpath(dirname($file));
- $tmp_skipif = $tmp . uniqid('/phpt.');
- $tmp_file = ereg_replace('\.phpt$','.php',$file);
- $tmp_post = $tmp . uniqid('/phpt.');
-
- @unlink($tmp_skipif);
- @unlink($tmp_file);
- @unlink($tmp_post);
-
- // unlink old test results
- @unlink(ereg_replace('\.phpt$','.diff',$file));
- @unlink(ereg_replace('\.phpt$','.log',$file));
- @unlink(ereg_replace('\.phpt$','.exp',$file));
- @unlink(ereg_replace('\.phpt$','.out',$file));
-
- // Reset environment from any previous test.
- putenv("REDIRECT_STATUS=");
- putenv("QUERY_STRING=");
- putenv("PATH_TRANSLATED=");
- putenv("SCRIPT_FILENAME=");
- putenv("REQUEST_METHOD=");
- putenv("CONTENT_TYPE=");
- putenv("CONTENT_LENGTH=");
-
- // Check if test should be skipped.
- $info = '';
- $warn = false;
- if (array_key_exists('SKIPIF', $section_text)) {
- if (trim($section_text['SKIPIF'])) {
- save_text($tmp_skipif, $section_text['SKIPIF']);
- $extra = substr(PHP_OS, 0, 3) !== "WIN" ?
- "unset REQUEST_METHOD; unset QUERY_STRING; unset PATH_TRANSLATED; unset SCRIPT_FILENAME; unset REQUEST_METHOD;": "";
- $output = system_with_timeout("$extra $php -q $info_params $tmp_skipif");
- @unlink($tmp_skipif);
- if (eregi("^skip", trim($output))) {
- echo "SKIP $tested";
- $reason = (eregi("^skip[[:space:]]*(.+)\$", trim($output))) ? eregi_replace("^skip[[:space:]]*(.+)\$", "\\1", trim($output)) : FALSE;
- if ($reason) {
- echo " (reason: $reason)\n";
- } else {
- echo "\n";
- }
- if (isset($old_php)) {
- $php = $old_php;
- }
- return 'SKIPPED';
- }
- if (eregi("^info", trim($output))) {
- $reason = (ereg("^info[[:space:]]*(.+)\$", trim($output))) ? ereg_replace("^info[[:space:]]*(.+)\$", "\\1", trim($output)) : FALSE;
- if ($reason) {
- $info = " (info: $reason)";
- }
- }
- if (eregi("^warn", trim($output))) {
- $reason = (ereg("^warn[[:space:]]*(.+)\$", trim($output))) ? ereg_replace("^warn[[:space:]]*(.+)\$", "\\1", trim($output)) : FALSE;
- if ($reason) {
- $warn = true; /* only if there is a reason */
- $info = " (warn: $reason)";
- }
- }
- }
- }
-
- // Default ini settings
- $ini_settings = array();
- // additional ini overwrites
- //$ini_overwrites[] = 'setting=value';
- settings2array($ini_overwrites, $ini_settings);
-
- // Any special ini settings
- // these may overwrite the test defaults...
- if (array_key_exists('INI', $section_text)) {
- settings2array(preg_split( "/[\n\r]+/", $section_text['INI']), $ini_settings);
- }
- settings2params($ini_settings);
-
- // We've satisfied the preconditions - run the test!
- save_text($tmp_file,$section_text['FILE']);
- if (array_key_exists('GET', $section_text)) {
- $query_string = trim($section_text['GET']);
- } else {
- $query_string = '';
- }
-
- putenv("REDIRECT_STATUS=1");
- putenv("QUERY_STRING=$query_string");
- putenv("PATH_TRANSLATED=$tmp_file");
- putenv("SCRIPT_FILENAME=$tmp_file");
-
- $args = $section_text['ARGS'] ? ' -- '.$section_text['ARGS'] : '';
-
- if (array_key_exists('POST', $section_text) && !empty($section_text['POST'])) {
-
- $post = trim($section_text['POST']);
- save_text($tmp_post,$post);
- $content_length = strlen($post);
-
- putenv("REQUEST_METHOD=POST");
- putenv("CONTENT_TYPE=application/x-www-form-urlencoded");
- putenv("CONTENT_LENGTH=$content_length");
-
- $cmd = "$php$pass_options$ini_settings -f \"$tmp_file\" 2>&1 < $tmp_post";
-
- } else {
-
- putenv("REQUEST_METHOD=GET");
- putenv("CONTENT_TYPE=");
- putenv("CONTENT_LENGTH=");
-
- $cmd = "$php$pass_options$ini_settings -f \"$tmp_file\" $args 2>&1";
- }
-
- if (DETAILED) echo "
-CONTENT_LENGTH = " . getenv("CONTENT_LENGTH") . "
-CONTENT_TYPE = " . getenv("CONTENT_TYPE") . "
-PATH_TRANSLATED = " . getenv("PATH_TRANSLATED") . "
-QUERY_STRING = " . getenv("QUERY_STRING") . "
-REDIRECT_STATUS = " . getenv("REDIRECT_STATUS") . "
-REQUEST_METHOD = " . getenv("REQUEST_METHOD") . "
-SCRIPT_FILENAME = " . getenv("SCRIPT_FILENAME") . "
-COMMAND $cmd
-";
-
-// $out = `$cmd`;
- $out = system_with_timeout($cmd);
-
- @unlink($tmp_post);
-
- // Does the output match what is expected?
- $output = trim($out);
- $output = preg_replace('/\r\n/',"\n",$output);
-
- /* when using CGI, strip the headers from the output */
- if (isset($old_php) && ($pos = strpos($output, "\n\n")) !== FALSE) {
- $output = substr($output, ($pos + 2));
- }
-
- if (isset($section_text['EXPECTF']) || isset($section_text['EXPECTREGEX'])) {
- if (isset($section_text['EXPECTF'])) {
- $wanted = trim($section_text['EXPECTF']);
- } else {
- $wanted = trim($section_text['EXPECTREGEX']);
- }
- $wanted_re = preg_replace('/\r\n/',"\n",$wanted);
- if (isset($section_text['EXPECTF'])) {
- $wanted_re = preg_quote($wanted_re, '/');
- // Stick to basics
- $wanted_re = str_replace("%e", '\\' . DIRECTORY_SEPARATOR, $wanted_re);
- $wanted_re = str_replace("%s", ".+?", $wanted_re); //not greedy
- $wanted_re = str_replace("%i", "[+\-]?[0-9]+", $wanted_re);
- $wanted_re = str_replace("%d", "[0-9]+", $wanted_re);
- $wanted_re = str_replace("%x", "[0-9a-fA-F]+", $wanted_re);
- $wanted_re = str_replace("%f", "[+\-]?\.?[0-9]+\.?[0-9]*(E-?[0-9]+)?", $wanted_re);
- $wanted_re = str_replace("%c", ".", $wanted_re);
- // %f allows two points "-.0.0" but that is the best *simple* expression
- }
-/* DEBUG YOUR REGEX HERE
- var_dump($wanted_re);
- print(str_repeat('=', 80) . "\n");
- var_dump($output);
-*/
- if (preg_match("/^$wanted_re\$/s", $output)) {
- @unlink($tmp_file);
- echo "PASS $tested\n";
- if (isset($old_php)) {
- $php = $old_php;
- }
- return 'PASSED';
- }
-
- } else {
- $wanted = trim($section_text['EXPECT']);
- $wanted = preg_replace('/\r\n/',"\n",$wanted);
- // compare and leave on success
- $ok = (0 == strcmp($output,$wanted));
- if ($ok) {
- @unlink($tmp_file);
- echo "PASS $tested\n";
- if (isset($old_php)) {
- $php = $old_php;
- }
- return 'PASSED';
- }
- $wanted_re = NULL;
- }
-
- // Test failed so we need to report details.
- if ($warn) {
- echo "WARN $tested$info\n";
- } else {
- echo "FAIL $tested$info\n";
- }
-
- $PHP_FAILED_TESTS[] = array(
- 'name' => $file,
- 'test_name' => $tested,
- 'output' => ereg_replace('\.phpt$','.log', $file),
- 'diff' => ereg_replace('\.phpt$','.diff', $file),
- 'info' => $info
- );
-
- // write .exp
- if (strpos($log_format,'E') !== FALSE) {
- $logname = ereg_replace('\.phpt$','.exp',$file);
- $log = fopen($logname,'w') or error("Cannot create test log - $logname");
- fwrite($log,$wanted);
- fclose($log);
- }
-
- // write .out
- if (strpos($log_format,'O') !== FALSE) {
- $logname = ereg_replace('\.phpt$','.out',$file);
- $log = fopen($logname,'w') or error("Cannot create test log - $logname");
- fwrite($log,$output);
- fclose($log);
- }
-
- // write .diff
- if (strpos($log_format,'D') !== FALSE) {
- $logname = ereg_replace('\.phpt$','.diff',$file);
- $log = fopen($logname,'w') or error("Cannot create test log - $logname");
- fwrite($log,generate_diff($wanted,$wanted_re,$output));
- fclose($log);
- }
-
- // write .log
- if (strpos($log_format,'L') !== FALSE) {
- $logname = ereg_replace('\.phpt$','.log',$file);
- $log = fopen($logname,'w') or error("Cannot create test log - $logname");
- fwrite($log,"
----- EXPECTED OUTPUT
-$wanted
----- ACTUAL OUTPUT
-$output
----- FAILED
-");
- fclose($log);
- error_report($file,$logname,$tested);
- }
-
- if (isset($old_php)) {
- $php = $old_php;
- }
-
- return $warn ? 'WARNED' : 'FAILED';
-}
-
-function comp_line($l1,$l2,$is_reg)
-{
- if ($is_reg) {
- return preg_match('/^'.$l1.'$/s', $l2);
- } else {
- return !strcmp($l1, $l2);
- }
-}
-
-function count_array_diff($ar1,$ar2,$is_reg,$w,$idx1,$idx2,$cnt1,$cnt2,$steps)
-{
- $equal = 0;
- while ($idx1 < $cnt1 && $idx2 < $cnt2 && comp_line($ar1[$idx1], $ar2[$idx2], $is_reg)) {
- $idx1++;
- $idx2++;
- $equal++;
- $steps--;
- }
- if (--$steps > 0) {
- $eq1 = 0;
- $st = $steps / 2;
- for ($ofs1 = $idx1+1; $ofs1 < $cnt1 && $st-- > 0; $ofs1++) {
- $eq = count_array_diff($ar1,$ar2,$is_reg,$w,$ofs1,$idx2,$cnt1,$cnt2,$st);
- if ($eq > $eq1) {
- $eq1 = $eq;
- }
- }
- $eq2 = 0;
- $st = $steps;
- for ($ofs2 = $idx2+1; $ofs2 < $cnt2 && $st-- > 0; $ofs2++) {
- $eq = count_array_diff($ar1,$ar2,$is_reg,$w,$idx1,$ofs2,$cnt1,$cnt2,$st);
- if ($eq > $eq2) {
- $eq2 = $eq;
- }
- }
- if ($eq1 > $eq2) {
- $equal += $eq1;
- } else if ($eq2 > 0) {
- $equal += $eq2;
- }
- }
- return $equal;
-}
-
-function generate_array_diff($ar1,$ar2,$is_reg,$w)
-{
- $idx1 = 0; $ofs1 = 0; $cnt1 = count($ar1);
- $idx2 = 0; $ofs2 = 0; $cnt2 = count($ar2);
- $diff = array();
- $old1 = array();
- $old2 = array();
-
- while ($idx1 < $cnt1 && $idx2 < $cnt2) {
- if (comp_line($ar1[$idx1], $ar2[$idx2], $is_reg)) {
- $idx1++;
- $idx2++;
- continue;
- } else {
- $c1 = count_array_diff($ar1,$ar2,$is_reg,$w,$idx1+1,$idx2,$cnt1,$cnt2,10);
- $c2 = count_array_diff($ar1,$ar2,$is_reg,$w,$idx1,$idx2+1,$cnt1,$cnt2,10);
- if ($c1 > $c2) {
- $old1[$idx1] = sprintf("%03d- ", $idx1+1).$w[$idx1++];
- $last = 1;
- } else if ($c2 > 0) {
- $old2[$idx2] = sprintf("%03d+ ", $idx2+1).$ar2[$idx2++];
- $last = 2;
- } else {
- $old1[$idx1] = sprintf("%03d- ", $idx1+1).$w[$idx1++];
- $old2[$idx2] = sprintf("%03d+ ", $idx2+1).$ar2[$idx2++];
- }
- }
- }
-
- reset($old1); $k1 = key($old1); $l1 = -2;
- reset($old2); $k2 = key($old2); $l2 = -2;
- while ($k1 !== NULL || $k2 !== NULL) {
- if ($k1 == $l1+1 || $k2 === NULL) {
- $l1 = $k1;
- $diff[] = current($old1);
- $k1 = next($old1) ? key($old1) : NULL;
- } else if ($k2 == $l2+1 || $k1 === NULL) {
- $l2 = $k2;
- $diff[] = current($old2);
- $k2 = next($old2) ? key($old2) : NULL;
- } else if ($k1 < $k2) {
- $l1 = $k1;
- $diff[] = current($old1);
- $k1 = next($old1) ? key($old1) : NULL;
- } else {
- $l2 = $k2;
- $diff[] = current($old2);
- $k2 = next($old2) ? key($old2) : NULL;
- }
- }
- while ($idx1 < $cnt1) {
- $diff[] = sprintf("%03d- ", $idx1+1).$w[$idx1++];
- }
- while ($idx2 < $cnt2) {
- $diff[] = sprintf("%03d+ ", $idx2+1).$ar2[$idx2++];
- }
- return $diff;
-}
-
-function generate_diff($wanted,$wanted_re,$output)
-{
- $w = explode("\n", $wanted);
- $o = explode("\n", $output);
- $r = is_null($wanted_re) ? $w : explode("\n", $wanted_re);
- $diff = generate_array_diff($r,$o,!is_null($wanted_re),$w);
- return implode("\r\n", $diff);
-}
-
-function error($message)
-{
- echo "ERROR: {$message}\n";
- exit(1);
-}
-
-function settings2array($settings, &$ini_settings)
-{
- foreach($settings as $setting) {
- if (strpos($setting, '=')!==false) {
- $setting = explode("=", $setting, 2);
- $name = trim(strtolower($setting[0]));
- $value = trim($setting[1]);
- $ini_settings[$name] = $value;
- }
- }
-}
-
-function settings2params(&$ini_settings)
-{
- $settings = '';
- foreach($ini_settings as $name => $value) {
- $value = addslashes($value);
- $settings .= " -d \"$name=$value\"";
- }
- $ini_settings = $settings;
-}
-
-function compute_summary()
-{
- global $n_total, $test_results, $ignored_by_ext, $sum_results, $percent_results;
-
- $n_total = count($test_results);
- $n_total += $ignored_by_ext;
-
- $sum_results = array('PASSED'=>0, 'WARNED'=>0, 'SKIPPED'=>0, 'FAILED'=>0, 'BORKED'=>0);
- foreach ($test_results as $v) {
- $sum_results[$v]++;
- }
- $sum_results['SKIPPED'] += $ignored_by_ext;
- $percent_results = array();
- while (list($v,$n) = each($sum_results)) {
- $percent_results[$v] = (100.0 * $n) / $n_total;
- }
-}
-
-function get_summary($show_ext_summary)
-{
- global $exts_skipped, $exts_tested, $n_total, $sum_results, $percent_results, $end_time, $start_time, $failed_test_summary, $PHP_FAILED_TESTS;
-
- $x_total = $n_total - $sum_results['SKIPPED'] - $sum_results['BORKED'];
- if ($x_total) {
- $x_warned = (100.0 * $sum_results['WARNED']) / $x_total;
- $x_failed = (100.0 * $sum_results['FAILED']) / $x_total;
- $x_passed = (100.0 * $sum_results['PASSED']) / $x_total;
- } else {
- $x_warned = $x_failed = $x_passed = 0;
- }
-
- $summary = "";
- if ($show_ext_summary) {
- $summary .= "
-=====================================================================
-TEST RESULT SUMMARY
----------------------------------------------------------------------
-Exts skipped : " . sprintf("%4d",$exts_skipped) . "
-Exts tested : " . sprintf("%4d",$exts_tested) . "
----------------------------------------------------------------------
-";
- }
- $summary .= "
-Number of tests : " . sprintf("%4d",$n_total). " " . sprintf("%8d",$x_total);
- if ($sum_results['BORKED']) {
- $summary .= "
-Tests borked : " . sprintf("%4d (%3.1f%%)",$sum_results['BORKED'],$percent_results['BORKED']) . " --------";
- }
- $summary .= "
-Tests skipped : " . sprintf("%4d (%3.1f%%)",$sum_results['SKIPPED'],$percent_results['SKIPPED']) . " --------
-Tests warned : " . sprintf("%4d (%3.1f%%)",$sum_results['WARNED'],$percent_results['WARNED']) . " " . sprintf("(%3.1f%%)",$x_warned) . "
-Tests failed : " . sprintf("%4d (%3.1f%%)",$sum_results['FAILED'],$percent_results['FAILED']) . " " . sprintf("(%3.1f%%)",$x_failed) . "
-Tests passed : " . sprintf("%4d (%3.1f%%)",$sum_results['PASSED'],$percent_results['PASSED']) . " " . sprintf("(%3.1f%%)",$x_passed) . "
----------------------------------------------------------------------
-Time taken : " . sprintf("%4d seconds", $end_time - $start_time) . "
-=====================================================================
-";
- $failed_test_summary = '';
- if (count($PHP_FAILED_TESTS)) {
- $failed_test_summary .= "
-=====================================================================
-FAILED TEST SUMMARY
----------------------------------------------------------------------
-";
- foreach ($PHP_FAILED_TESTS as $failed_test_data) {
- $failed_test_summary .= $failed_test_data['test_name'] . $failed_test_data['info'] . "\n";
- }
- $failed_test_summary .= "=====================================================================\n";
- }
-
- if ($failed_test_summary && !getenv('NO_PHPTEST_SUMMARY')) {
- $summary .= $failed_test_summary;
- }
-
- return $summary;
-}
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- * vim: noet sw=4 ts=4
- */
-?>
diff --git a/run-tests2.php b/run-tests2.php
deleted file mode 100644
index 871aaf679f..0000000000
--- a/run-tests2.php
+++ /dev/null
@@ -1,1573 +0,0 @@
-<?php
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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. |
- +----------------------------------------------------------------------+
- | Authors: Ilia Alshanetsky <ilia@php.net> |
- | Preston L. Bannister <pbannister@php.net> |
- | Marcus Boerger <helly@php.net> |
- | Shane Caraveo <shane@php.net> |
- | Derick Rethans <derick@php.net> |
- | Sander Roobol <sander@php.net> |
- | (based on version by: Stig Bakken <ssb@php.net>) |
- | (based on the PHP 3 test framework by Rasmus Lerdorf) |
- +----------------------------------------------------------------------+
- */
-
-set_time_limit(0);
-while(@ob_end_clean());
-if (ob_get_level()) echo "Not all buffers were deleted.\n";
-error_reporting(E_ALL);
-
-/**********************************************************************
- * QA configuration
- */
-
-define('PHP_QA_EMAIL', 'qa-reports@lists.php.net');
-define('QA_SUBMISSION_PAGE', 'http://qa.php.net/buildtest-process.php');
-
-/**********************************************************************
- * error messages
- */
-
-define('PCRE_MISSING_ERROR',
-'+-----------------------------------------------------------+
-| ! ERROR ! |
-| The test-suite requires that you have pcre extension |
-| enabled. To enable this extension either compile your PHP |
-| with --with-pcre-regex or if you have compiled pcre as a |
-| shared module load it via php.ini. |
-+-----------------------------------------------------------+');
-define('SAFE_MODE_WARNING',
-'+-----------------------------------------------------------+
-| ! WARNING ! |
-| You are running the test-suite with "safe_mode" ENABLED ! |
-| |
-| Chances are high that no test will work at all, |
-| depending on how you configured "safe_mode" ! |
-+-----------------------------------------------------------+');
-define('TMP_MISSING',
-'+-----------------------------------------------------------+
-| ! ERROR ! |
-| You must create /tmp for session tests to work! |
-| |
-+-----------------------------------------------------------+');
-define('PROC_OPEN_MISSING',
-'+-----------------------------------------------------------+
-| ! ERROR ! |
-| The test-suite requires that proc_open() is available. |
-| Please check if you disabled it in php.ini. |
-+-----------------------------------------------------------+');
-define('REQ_PHP_VERSION',
-'+-----------------------------------------------------------+
-| ! ERROR ! |
-| The test-suite must be run with PHP 5 or later. |
-| You can still test older extecutables by setting |
-| TEST_PHP_EXECUTABLE and running this script with PHP 5. |
-+-----------------------------------------------------------+');
-/**********************************************************************
- * information scripts
- */
-define('PHP_INFO_SCRIPT','<?php echo "
-PHP_SAPI=" . PHP_SAPI . "
-PHP_VERSION=" . phpversion() . "
-ZEND_VERSION=" . zend_version() . "
-PHP_OS=" . PHP_OS . "
-INCLUDE_PATH=" . get_cfg_var("include_path") . "
-INI=" . realpath(get_cfg_var("cfg_file_path")) . "
-SCANNED_INI=" . (function_exists(\'php_ini_scanned_files\') ?
- str_replace("\n","", php_ini_scanned_files()) :
- "** not determined **") . "
-SERVER_SOFTWARE=" . $_ENV[\'SERVER_SOFTWARE\'];
-?>');
-
-define('PHP_EXTENSIONS_SCRIPT','<?php print join(get_loaded_extensions(),":"); ?>');
-define('PHP_INI_SETTINGS_SCRIPT','<?php echo serialize(ini_get_all()); ?>');
-
-/**********************************************************************
- * various utility functions
- */
-
-function save_to_file($filename,$text)
-{
- $fp = @fopen($filename,'w')
- or die("Cannot open file '" . $filename . "' (save_to_file)");
- fwrite($fp,$text);
- fclose($fp);
-}
-
-function settings2array($settings, &$ini_settings)
-{
- foreach($settings as $setting) {
- if (strpos($setting, '=')!==false) {
- $setting = explode("=", $setting, 2);
- $name = trim($setting[0]);
- $value = trim($setting[1]);
- $ini_settings[$name] = $value;
- }
- }
-}
-
-function settings2params(&$ini_settings)
-{
- $settings = '';
- if (count($ini_settings)) {
- foreach($ini_settings as $name => $value) {
- $value = addslashes($value);
- $settings .= " -d \"".strtolower($name)."=$value\"";
- }
- }
- return $settings;
-}
-
-function generate_diff($wanted,$output)
-{
- $w = explode("\n", $wanted);
- $o = explode("\n", $output);
- $w1 = array_diff_assoc($w,$o);
- $o1 = array_diff_assoc($o,$w);
- $w2 = array();
- $o2 = array();
- foreach($w1 as $idx => $val) $w2[sprintf("%03d<",$idx)] = sprintf("%03d- ", $idx+1).$val;
- foreach($o1 as $idx => $val) $o2[sprintf("%03d>",$idx)] = sprintf("%03d+ ", $idx+1).$val;
- $diff = array_merge($w2, $o2);
- ksort($diff);
- return implode("\r\n", $diff);
-}
-
-function mkpath($path,$mode = 0700) {
- $dirs = split('[\\|/]',realpath($path));
- $path = $dirs[0];
- for($i = 1;$i < count($dirs);$i++) {
- $path .= '/'.$dirs[$i];
- @mkdir($path,$mode);
- }
-}
-
-function copyfiles($src,$new) {
- $d = dir($src);
- while (($entry = $d->read())) {
- if (is_file("$src/$entry"))
- copy("$src/$entry","$new/$entry");
- }
- $d->close();
-}
-
-function post_result_data($query,$data)
-{
- $url = QA_SUBMISSION_PAGE.'?'.$query;
- $post = "php_test_data=" . urlencode(base64_encode(preg_replace("/[\\x00]/", "[0x0]", $data)));
- $r = new HTTPRequest($url,NULL,NULL,$post);
- return $this->response_headers['Status']=='200';
-}
-
-
-function execute($command, $args=NULL, $input=NULL, $cwd=NULL, $env=NULL)
-{
- $data = "";
-
- if (gettype($args)=='array') {
- $args = join($args,' ');
- }
- $commandline = "$command $args";
- $proc = proc_open($commandline, array(
- 0 => array('pipe', 'r'),
- 1 => array('pipe', 'w')),
- $pipes, $cwd, $env);
-
- if (!$proc)
- return false;
-
- if ($input) {
- $out = fwrite($pipes[0],$input);
- if ($out != strlen($input)) {
- return NULL;
- }
- }
-
- fclose($pipes[0]);
-
- while (true) {
- /* hide errors from interrupted syscalls */
- $r = $pipes;
- $w = null;
- $e = null;
- $n = @stream_select($r, $w, $e, 60);
-
- if ($n == 0) {
- /* timed out */
- $data .= "\n ** ERROR: process timed out **\n";
- proc_terminate($proc);
- return $data;
- } else if ($n) {
- $line = fread($pipes[1], 8192);
- if (strlen($line) == 0) {
- /* EOF */
- break;
- }
- $data .= $line;
- }
- }
- $code = proc_close($proc);
- return $data;
-}
-
-function executeCode($php, $ini_overwrites, $code, $remove_headers=true, $cwd=NULL, $env=NULL)
-{
- $params = NULL;
- if ($ini_overwrites) {
- $info_params = array();
- settings2array($ini_overwrites,$info_params);
- $params = settings2params($info_params);
- }
- $out = execute($php, $params, $code, $cwd, $env);
- // kill the headers
- if ($remove_headers && preg_match("/^(.*?)\r?\n\r?\n(.*)/s", $out, $match)) {
- $out = $match[2];
- }
- return $out;
-}
-
-
-/**********************************************************************
- * a simple request class that lets us handle http based tests
- */
-
-class HTTPRequest
-{
- var $headers = array();
- var $timeout = 4;
- var $urlparts = NULL;
- var $url = '';
- var $userAgent = 'PHP-Test-Harness';
- var $options = array();
- var $postdata = NULL;
- var $errmsg = '';
- var $errno = 0;
- var $response;
- var $response_headers;
- var $outgoing_payload;
- var $incoming_payload = '';
-
- /*
- URL is the full url
- headers is assoc array of outgoing http headers
-
- options may include
- timeout
- proxy_host
- proxy_port
- proxy_user
- proxy_pass
- method (GET|POST)
-
- post data is, well, post data. It is not processed so
- multipart stuff must be prepared before calling this
- (or add it to class)
- */
- function HTTPRequest($URL, $headers=array(), $options=array(), $postdata=NULL)
- {
- $this->urlparts = @parse_url($URL);
- $this->url = $URL;
- $this->options = $options;
- $this->headers = $headers;
- $this->postdata = &$postdata;
- $this->doRequest();
- }
-
- function doRequest()
- {
- if (!$this->_validateUrl()) return;
-
- if (isset($this->options['timeout']))
- $this->timeout = (int)$this->options['timeout'];
-
- $this->_sendHTTP();
- }
-
- function _validateUrl()
- {
- if ( ! is_array($this->urlparts) ) {
- return FALSE;
- }
- if (!isset($this->urlparts['host'])) {
- $this->urlparts['host']='127.0.0.1';
- }
- if (!isset($this->urlparts['port'])) {
- $this->urlparts['port'] = 80;
- }
- if (!isset($this->urlparts['path']) || !$this->urlparts['path'])
- $this->urlparts['path'] = '/';
- return TRUE;
- }
-
- function _parseResponse()
- {
- if (preg_match("/^(.*?)\r?\n\r?\n(.*)/s", $this->incoming_payload, $match)) {
- $this->response = $match[2];
- if (preg_match("/^HTTP\/1\.. (\d+).*/s",$match[1],$status) && !$status[1]) {
- $this->errmsg = "HTTP Response $status[1] Not Found";
- return FALSE;
- }
- $rh = preg_split("/[\n\r]+/",$match[1]);
- $this->response_headers = array();
- foreach ($rh as $line) {
- if (strpos($line, ':')!==false) {
- $line = explode(":", $line, 2);
- $this->response_headers[trim($line[0])] = trim($line[1]);
- }
- }
- $this->response_headers['Status']=$status[1];
- // if no content, return false
- if(strlen($this->response) > 0) return TRUE;
- }
- $this->errmsg = 'Invalid HTTP Response';
- return FALSE;
- }
-
- function &_getRequest()
- {
- $fullpath = $this->urlparts['path'].
- (isset($this->urlparts['query'])?'?'.$this->urlparts['query']:'').
- (isset($this->urlparts['fragment'])?'#'.$this->urlparts['fragment']:'');
- if (isset($this->options['proxy_host'])) {
- $fullpath = 'http://'.$this->urlparts['host'].':'.$this->urlparts['port'].$fullpath;
- }
- if (isset($this->options['proxy_user'])) {
- $headers['Proxy-Authorization'] = 'Basic ' . base64_encode($this->options['proxy_user'].":".$this->options['proxy_pass']);
- }
- $headers['User-Agent'] = $this->userAgent;
- $headers['Host'] = $this->urlparts['host'];
- $headers['Content-Length'] = strlen($this->postdata);
- $headers['Content-Type'] = 'application/x-www-form-urlencoded';
- if (isset($this->headers)) {
- $headers = array_merge($headers, $this->headers);
- }
- $headertext = '';
- foreach ($headers as $k => $v) {
- $headertext .= "$k: $v\r\n";
- }
- $method = trim($this->options['method'])?strtoupper(trim($this->options['method'])):'GET';
- $this->outgoing_payload =
- "$method $fullpath HTTP/1.0\r\n".
- $headertext."\r\n".
- $this->postdata;
- return $this->outgoing_payload;
- }
-
- function &_sendHTTP()
- {
- $this->_getRequest();
- $host = $this->urlparts['host'];
- $port = $this->urlparts['port'];
- if (isset($this->options['proxy_host'])) {
- $host = $this->options['proxy_host'];
- $port = isset($this->options['proxy_port'])?$this->options['proxy_port']:8080;
- }
- // send
- if ($this->timeout > 0) {
- $fp = fsockopen($host, $port, $this->errno, $this->errmsg, $this->timeout);
- } else {
- $fp = fsockopen($host, $port, $this->errno, $this->errmsg);
- }
- if (!$fp) {
- $this->errmsg = "Connect Error to $host:$port";
- return NULL;
- }
- if ($this->timeout > 0) {
- // some builds of php do not support this, silence
- // the warning
- @socket_set_timeout($fp, $this->timeout);
- }
- if (!fputs($fp, $this->outgoing_payload, strlen($this->outgoing_payload))) {
- $this->errmsg = "Error Sending Request Data to $host";
- return NULL;
- }
-
- while ($data = fread($fp, 32768)) {
- $this->incoming_payload .= $data;
- }
-
- fclose($fp);
-
- $this->_parseResponse();
- }
-
-# a simple test case
-#$r = new HTTPRequest('http://localhost:81/info.php/path/info');
-#print_r($r->response_headers);
-#print $r->response;
-
-} // end HTTPRequest
-
-
-/**********************************************************************
- * main test harness
- */
-
-class testHarness {
- var $cwd;
- var $xargs = array(
- #arg env var value default description
- 'c' => array('' ,'file' ,NULL ,'configuration file, see run-tests-config.php for example'),
- 'd' => array('TEST_PATHS' ,'paths' ,NULL ,'colon seperate path list'),
- 'e' => array('TEST_PHP_ERROR_STYLE','EMACS|MSVC' ,'EMACS' ,'editor error style'),
- 'h' => array('' ,'' ,NULL ,'this help'),
- 'i' => array('PHPRC' ,'path|file' ,NULL ,'ini file to use for tests (sets PHPRC)'),
- 'l' => array('TEST_PHP_LOG_FORMAT' ,'string' ,'LEODC' ,'any combination of CDELO'),
- 'm' => array('TEST_BASE_PATH' ,'path' ,NULL ,'copy tests to this path before testing'),
- 'n' => array('NO_PHPTEST_SUMMARY' ,'' ,0 ,'do not print test summary'),
- 'p' => array('TEST_PHP_EXECUTABLE' ,'path' ,NULL ,'php executable to be tested'),
- 'q' => array('NO_INTERACTION' ,'' ,0 ,'no console interaction (ie dont contact QA)'),
- 'r' => array('REPORT_EXIT_STATUS' ,'' ,0 ,'exit with status at end of execution'),
- 's' => array('TEST_PHP_SRCDIR' ,'path' ,NULL ,'path to php source code'),
- 't' => array('TEST_PHP_DETAILED' ,'number' ,0 ,'level of detail output to dump'),
- 'u' => array('TEST_WEB_BASE_URL' ,'url' ,'' ,'base url for http testing'),
- 'v' => array('TEST_CONTEXT_INFO' ,'' ,0 ,'view text executable context info'),
- 'w' => array('TEST_WEB' ,'' ,0 ,'run tests via http'),
- 'x' => array('TEST_WEB_EXT' ,'file ext' ,'php' ,'http file extension to use')
- );
-
- var $conf = array();
- var $test_to_run = array();
- var $test_files = array();
- var $test_results = array();
- var $failed_tests = array();
- var $exts_to_test;
- var $exts_tested = 0;
- var $exts_skipped = 0;
- var $ignored_by_ext = 0;
- var $test_dirs = array('tests', 'pear', 'ext', 'sapi');
- var $start_time;
- var $end_time;
- var $exec_info;
- var $test_executable_iscgi = false;
- var $inisettings; // the test executables settings, used for web tests
- var $iswin32 = false;
-
- var $ddash = "=====================================================================";
- var $sdash = "---------------------------------------------------------------------";
-
- // Default ini settings
- var $ini_overwrites = array(
- 'output_handler'=>'',
- 'zlib.output_compression'=>'Off',
- 'open_basedir'=>'',
- 'safe_mode'=>'0',
- 'disable_functions'=>'',
- 'output_buffering'=>'Off',
- 'error_reporting'=>'2047',
- 'display_errors'=>'1',
- 'log_errors'=>'0',
- 'html_errors'=>'0',
- 'track_errors'=>'1',
- 'report_memleaks'=>'1',
- 'report_zend_debug'=>'0',
- 'docref_root'=>'/phpmanual/',
- 'docref_ext'=>'.html',
- 'error_prepend_string'=>'',
- 'error_append_string'=>'',
- 'auto_prepend_file'=>'',
- 'auto_append_file'=>'',
- 'magic_quotes_runtime'=>'0',
- );
- var $env = array();
- var $info_params = array();
-
- function testHarness() {
- $this->iswin32 = substr(PHP_OS, 0, 3) == "WIN";
- $this->checkRequirements();
- $this->env = $_ENV;
- $this->removeSensitiveEnvVars();
-
- $this->initializeConfiguration();
- $this->parseArgs();
- $this->setTestPaths();
- # change to working directory
- if ($this->conf['TEST_PHP_SRCDIR']) {
- @chdir($this->conf['TEST_PHP_SRCDIR']);
- }
- $this->cwd = getcwd();
-
- if (!$this->conf['TEST_PHP_SRCDIR'])
- $this->conf['TEST_PHP_SRCDIR'] = $this->cwd;
- if (!$this->conf['TEST_BASE_PATH'] && $this->conf['TEST_PHP_SRCDIR'])
- $this->conf['TEST_BASE_PATH'] = $this->conf['TEST_PHP_SRCDIR'];
- if ($this->iswin32) {
- $this->conf['TEST_PHP_SRCDIR'] = str_replace('/','\\',$this->conf['TEST_PHP_SRCDIR']);
- $this->conf['TEST_BASE_PATH'] = str_replace('/','\\',$this->conf['TEST_BASE_PATH']);
- }
-
- if (!$this->conf['TEST_WEB'] && !is_executable($this->conf['TEST_PHP_EXECUTABLE'])) {
- $this->error("invalid PHP executable specified by TEST_PHP_EXECUTABLE = " .
- $this->conf['TEST_PHP_EXECUTABLE']);
- return false;
- }
-
- $this->getInstalledExtensions();
- $this->getExecutableInfo();
- $this->getExecutableIniSettings();
- $this->test_executable_iscgi = strncmp($this->exec_info['PHP_SAPI'],'cgi',3)==0;
- $this->calculateDocumentRoot();
-
- // add TEST_PHP_SRCDIR to the include path, this facilitates
- // tests including files from src/tests
- //$this->ini_overwrites['include_path'] = $this->cwd.($this->iswin32?';.;':':.:').$this->exec_info['INCLUDE_PATH'];
-
- $params = array();
- settings2array($this->ini_overwrites,$params);
- $this->info_params = settings2params($params);
-
- $this->contextHeader();
- if ($this->conf['TEST_CONTEXT_INFO']) return;
- $this->loadFileList();
- $this->moveTestFiles();
- $this->run();
- $this->summarizeResults();
- }
-
- function getExecutableIniSettings()
- {
- $out = $this->runscript(PHP_INI_SETTINGS_SCRIPT,true);
- $this->inisettings = unserialize($out);
- }
-
- function getExecutableInfo()
- {
- $out = $this->runscript(PHP_INFO_SCRIPT,true);
- $out = preg_split("/[\n\r]+/",$out);
- $info = array();
- foreach ($out as $line) {
- if (strpos($line, '=')!==false) {
- $line = explode("=", $line, 2);
- $name = trim($line[0]);
- $value = trim($line[1]);
- $info[$name] = $value;
- }
- }
- $this->exec_info = $info;
- }
-
- function getInstalledExtensions()
- {
- // get the list of installed extensions
- $out = $this->runscript(PHP_EXTENSIONS_SCRIPT,true);
- $this->exts_to_test = split(":",$out);
- sort($this->exts_to_test);
- $this->exts_tested = count($this->exts_to_test);
- }
-
- // if running local, calls executeCode,
- // otherwise does an http request
- function runscript($script,$removeheaders=false,$cwd=NULL)
- {
- if ($this->conf['TEST_WEB']) {
- $pi = "/testscript.{$this->conf['TEST_WEB_EXT']}";
- if (!$cwd) $cwd = $this->conf['TEST_BASE_PATH'];
- $tmp_file = "$cwd$pi";
- $pi = substr($cwd,strlen($this->conf['TEST_BASE_PATH'])).$pi;
- $url = "{$this->conf['TEST_WEB_BASE_URL']}$pi";
- save_to_file($tmp_file,$script);
- $fd = fopen($url, "rb");
- $out = '';
- if ($fd) {
- while (!feof($fd))
- $out .= fread($fd, 8192);
- fclose($fd);
- }
- unlink($tmp_file);
- if ($removeheaders &&
- preg_match("/^(.*?)\r?\n\r?\n(.*)/s", $this->incoming_payload, $match)) {
- return $match[2];
- }
- return $out;
- } else {
- return executeCode($this->conf['TEST_PHP_EXECUTABLE'],$this->ini_overwrites, $script,$removeheaders,$cwd,$this->env);
- }
- }
-
-
- // Use this function to do any displaying of text, so that
- // things can be over-written as necessary.
-
- function writemsg($msg) {
-
- echo $msg;
-
- }
-
- // Another wrapper function, this one should be used any time
- // a particular test passes or fails
-
- function showstatus($item, $status, $reason = '') {
-
- switch($status) {
- case 'PASSED':
- $this->writemsg("PASSED: $item ($reason)\n");
- break;
- case 'FAILED':
- $this->writemsg("FAILED: $item ($reason)\n");
- break;
- case 'SKIPPED':
- $this->writemsg("SKIPPED: $item ($reason)\n");
- break;
- }
- }
-
-
- function help()
- {
- $usage = "usage: php run-tests.php [options]\n";
- foreach ($this->xargs as $arg=>$arg_info) {
- $usage .= sprintf(" -%s %-12s %s\n",$arg,$arg_info[1],$arg_info[3]);
- }
- return $usage;
- }
-
- function parseArgs() {
- global $argc;
- global $argv;
- global $_SERVER;
-
- if (!isset($argv)) {
- $argv = $_SERVER['argv'];
- $argc = $_SERVER['argc'];
- }
-
- $conf = NULL;
- for ($i=1; $i<$argc;) {
- if ($argv[$i][0] != '-') continue;
- $opt = $argv[$i++][1];
- if (isset($value)) unset($value);
- if (@$argv[$i][0] != '-') {
- @$value = $argv[$i++];
- }
- switch($opt) {
- case 'c':
- /* TODO: Implement configuraiton file */
- include($value);
- if (!isset($conf)) {
- $this->writemsg("Invalid configuration file\n");
- exit(1);
- }
- $this->conf = array_merge($this->conf,$conf);
- break;
- case 'e':
- $this->conf['TEST_PHP_ERROR_STYLE'] = strtoupper($value);
- break;
- case 'h':
- print $this->help();
- exit(0);
- default:
- if ($this->xargs[$opt][1] && isset($value))
- $this->conf[$this->xargs[$opt][0]] = $value;
- else if (!$this->xargs[$opt][1])
- $this->conf[$this->xargs[$opt][0]] = isset($value)?$value:1;
- else
- $this->error("Invalid argument setting for argument $opt, should be [{$this->xargs[$opt][1]}]\n");
- break;
- }
- }
-
- // set config into environment, this allows
- // executed tests to find out about the test
- // configurations. config file or args overwrite
- // env var config settings
- $this->env = array_merge($this->env,$this->conf);
- if (!$this->conf['TEST_WEB'] && !$this->conf['TEST_PHP_EXECUTABLE']) {
- $this->writemsg($this->help());
- exit(0);
- }
- }
-
- function removeSensitiveEnvVars()
- {
- # delete sensitive env vars
- $this->env['SSH_CLIENT']='deleted';
- $this->env['SSH_AUTH_SOCK']='deleted';
- $this->env['SSH_TTY']='deleted';
- }
-
- function setEnvConfigVar($name)
- {
- if (isset($this->env[$name])) {
- $this->conf[$name] = $this->env[$name];
- }
- }
-
- function initializeConfiguration()
- {
- foreach ($this->xargs as $arg=>$arg_info) {
- if ($arg_info[0]) {
- # initialize the default setting
- $this->conf[$arg_info[0]]=$arg_info[2];
- # get config from environment
- $this->setEnvConfigVar($arg_info[0]);
- }
- }
- }
-
- function setTestPaths()
- {
- // configure test paths from config file or command line
- if (@$this->conf['TEST_PATHS']) {
- $this->test_dirs = array();
- if ($this->iswin32) {
- $paths = split(';',$this->conf['TEST_PATHS']);
- } else {
- $paths = split(':|;',$this->conf['TEST_PATHS']);
- }
- foreach($paths as $path) {
- $this->test_dirs[] = realpath($path);
- }
- }
- }
-
- function test_sort($a, $b) {
- $ta = strpos($a, "{$this->cwd}/tests")===0 ? 1 + (strpos($a, "{$this->cwd}/tests/run-test")===0 ? 1 : 0) : 0;
- $tb = strpos($b, "{$this->cwd}/tests")===0 ? 1 + (strpos($b, "{$this->cwd}/tests/run-test")===0 ? 1 : 0) : 0;
- if ($ta == $tb) {
- return strcmp($a, $b);
- } else {
- return $tb - $ta;
- }
- }
-
- function checkRequirements() {
- if (version_compare(phpversion(), "5.0") < 0) {
- $this->writemsg(REQ_PHP_VERSION);
- exit;
- }
- if (!file_exists("/tmp")) {
- $this->writemsg(TMP_MISSING);
- exit;
- }
- if (!function_exists("proc_open")) {
- $this->writemsg(PROC_OPEN_MISSING);
- exit;
- }
- if (!extension_loaded("pcre")) {
- $this->writemsg(PCRE_MISSING_ERROR);
- exit;
- }
- if (ini_get('safe_mode')) {
- $this->writemsg(SAFE_MODE_WARNING);
- }
- }
-
- //
- // Write test context information.
- //
- function contextHeader()
- {
- $info = '';
- foreach ($this->exec_info as $k=>$v) {
- $info .= sprintf("%-20.s: %s\n",$k,$v);
- }
- $exts = '';
- foreach ($this->exts_to_test as $ext) {
- $exts .="$ext\n ";
- }
- $dirs = '';
- foreach ($this->test_dirs as $test_dir) {
- $dirs .= "$test_dir\n ";
- }
- $conf = '';
- foreach ($this->conf as $k=>$v) {
- $conf .= sprintf("%-20.s: %s\n",$k,$v);
- }
-
- $exeinfo = '';
- if (!$this->conf['TEST_WEB'])
- $exeinfo = "CWD : {$this->cwd}\n".
- "PHP : {$this->conf['TEST_PHP_EXECUTABLE']}\n";
-
- $this->writemsg("\n$this->ddash\n".
- "$exeinfo$info\n".
- "Test Harness Configuration:\n$conf\n".
- "Extensions : $exts\n".
- "Test Dirs : $dirs\n".
- "$this->ddash\n");
- }
-
- function loadFileList()
- {
- foreach ($this->test_dirs as $dir) {
- if (is_dir($dir)) {
- $this->findFilesInDir($dir, ($dir == 'ext'));
- } else {
- $this->test_files[] = $dir;
- }
- }
- usort($this->test_files,array($this,"test_sort"));
- $this->writemsg("found ".count($this->test_files)." files\n");
- }
-
- function moveTestFiles()
- {
- if (!$this->conf['TEST_BASE_PATH'] ||
- $this->conf['TEST_BASE_PATH'] == $this->conf['TEST_PHP_SRCDIR']) return;
- $this->writemsg("moving files from {$this->conf['TEST_PHP_SRCDIR']} to {$this->conf['TEST_BASE_PATH']}\n");
- $l = strlen($this->conf['TEST_PHP_SRCDIR']);
- $files = array();
- $dirs = array();
- foreach ($this->test_files as $file) {
- if (strpos($file,$this->conf['TEST_PHP_SRCDIR'])==0) {
- $newlocation = $this->conf['TEST_BASE_PATH'].substr($file,$l);
- $files[] = $newlocation;
- $dirs[dirname($file)] = dirname($newlocation);
- } else {
- // XXX what to do with test files outside the
- // php source directory? Need to map them into
- // the new directory somehow.
- }
- }
- foreach ($dirs as $src=>$new) {
- mkpath($new);
- copyfiles($src,$new);
- }
- $this->test_files = $files;
- }
-
- function findFilesInDir($dir,$is_ext_dir=FALSE,$ignore=FALSE)
- {
- $skip = array('.', '..', 'CVS');
- $o = opendir($dir) or $this->error("cannot open directory: $dir");
- while (($name = readdir($o)) !== FALSE) {
- if (in_array($name, $skip)) continue;
- if (is_dir("$dir/$name")) {
- $skip_ext = ($is_ext_dir && !in_array($name, $this->exts_to_test));
- if ($skip_ext) {
- $this->exts_skipped++;
- }
- $this->findFilesInDir("$dir/$name", FALSE, $ignore || $skip_ext);
- }
-
- // Cleanup any left-over tmp files from last run.
- if (substr($name, -4) == '.tmp') {
- @unlink("$dir/$name");
- continue;
- }
-
- // Otherwise we're only interested in *.phpt files.
- if (substr($name, -5) == '.phpt') {
- if ($ignore) {
- $this->ignored_by_ext++;
- } else {
- $testfile = realpath("$dir/$name");
- $this->test_files[] = $testfile;
- }
- }
- }
- closedir($o);
- }
-
- function runHeader()
- {
- $this->writemsg("TIME START " . date('Y-m-d H:i:s', $this->start_time) . "\n".$this->ddash."\n");
- if (count($this->test_to_run)) {
- $this->writemsg("Running selected tests.\n");
- } else {
- $this->writemsg("Running all test files.\n");
- }
- }
-
- function run()
- {
- $this->start_time = time();
- $this->runHeader();
- // Run selected tests.
- if (count($this->test_to_run)) {
-
- foreach($this->test_to_run as $name=>$runnable) {
- if(!preg_match("/\.phpt$/", $name))
- continue;
- if ($runnable) {
- $this->test_results[$name] = $this->run_test($name);
- }
- }
- } else {
- foreach ($this->test_files as $name) {
- $this->test_results[$name] = $this->run_test($name);
- }
- }
- $this->end_time = time();
- }
-
- function summarizeResults()
- {
- if (count($this->test_results) == 0) {
- $this->writemsg("No tests were run.\n");
- return;
- }
-
- $n_total = count($this->test_results);
- $n_total += $this->ignored_by_ext;
-
- $sum_results = array('PASSED'=>0, 'SKIPPED'=>0, 'FAILED'=>0);
- foreach ($this->test_results as $v) {
- $sum_results[$v]++;
- }
- $sum_results['SKIPPED'] += $this->ignored_by_ext;
- $percent_results = array();
- while (list($v,$n) = each($sum_results)) {
- $percent_results[$v] = (100.0 * $n) / $n_total;
- }
-
- $this->writemsg("\n".$this->ddash."\n".
- "TIME END " . date('Y-m-d H:i:s', $this->end_time) . "\n".
- $this->ddash."\n".
- "TEST RESULT SUMMARY\n".
- $this->sdash."\n".
- "Exts skipped : " . sprintf("%4d",$this->exts_skipped) . "\n".
- "Exts tested : " . sprintf("%4d",$this->exts_tested) . "\n".
- $this->sdash."\n".
- "Number of tests : " . sprintf("%4d",$n_total) . "\n".
- "Tests skipped : " . sprintf("%4d (%2.1f%%)",$sum_results['SKIPPED'],$percent_results['SKIPPED']) . "\n".
- "Tests failed : " . sprintf("%4d (%2.1f%%)",$sum_results['FAILED'],$percent_results['FAILED']) . "\n".
- "Tests passed : " . sprintf("%4d (%2.1f%%)",$sum_results['PASSED'],$percent_results['PASSED']) . "\n".
- $this->sdash."\n".
- "Time taken : " . sprintf("%4d seconds", $this->end_time - $this->start_time) . "\n".
- $this->ddash."\n");
-
- $failed_test_summary = '';
- if ($this->failed_tests) {
- $failed_test_summary .= "\n".$this->ddash."\n".
- "FAILED TEST SUMMARY\n".$this->sdash."\n";
- foreach ($this->failed_tests as $failed_test_data) {
- $failed_test_summary .= $failed_test_data['test_name'] . "\n";
- }
- $failed_test_summary .= $this->ddash."\n";
- }
-
- if ($failed_test_summary && !$this->conf['NO_PHPTEST_SUMMARY']) {
- $this->writemsg($failed_test_summary);
- }
-
- /* We got failed Tests, offer the user to send and e-mail to QA team, unless NO_INTERACTION is set */
- if ($sum_results['FAILED'] && !$this->conf['NO_INTERACTION']) {
- $fp = fopen("php://stdin", "r+");
- $this->writemsg("\nPlease allow this report to be send to the PHP QA\nteam. This will give us a better understanding in how\n");
- $this->writemsg("PHP's test cases are doing.\n");
- $this->writemsg("(choose \"s\" to just save the results to a file)? [Yns]: ");
- flush();
- $user_input = fgets($fp, 10);
- $just_save_results = (strtolower($user_input[0]) == 's');
-
- if ($just_save_results || strlen(trim($user_input)) == 0 || strtolower($user_input[0]) == 'y') {
- /*
- * Collect information about the host system for our report
- * Fetch phpinfo() output so that we can see the PHP enviroment
- * Make an archive of all the failed tests
- * Send an email
- */
-
- /* Ask the user to provide an email address, so that QA team can contact the user */
- if (!strncasecmp($user_input, 'y', 1) || strlen(trim($user_input)) == 0) {
- echo "\nPlease enter your email address.\n(Your address will be mangled so that it will not go out on any\nmailinglist in plain text): ";
- flush();
- $fp = fopen("php://stdin", "r+");
- $user_email = trim(fgets($fp, 1024));
- $user_email = str_replace("@", " at ", str_replace(".", " dot ", $user_email));
- }
-
- $failed_tests_data = '';
- $sep = "\n" . str_repeat('=', 80) . "\n";
-
- $failed_tests_data .= $failed_test_summary . "\n";
-
- if (array_sum($this->failed_tests)) {
- foreach ($this->failed_tests as $test_info) {
- $failed_tests_data .= $sep . $test_info['name'];
- $failed_tests_data .= $sep . file_get_contents(realpath($test_info['output']));
- $failed_tests_data .= $sep . file_get_contents(realpath($test_info['diff']));
- $failed_tests_data .= $sep . "\n\n";
- }
- $status = "failed";
- } else {
- $status = "success";
- }
-
- $failed_tests_data .= "\n" . $sep . 'BUILD ENVIRONMENT' . $sep;
- $failed_tests_data .= "OS:\n". PHP_OS. "\n\n";
- $automake = $autoconf = $libtool = $compiler = 'N/A';
-
- if (!$this->iswin32) {
- $automake = shell_exec('automake --version');
- $autoconf = shell_exec('autoconf --version');
- /* Always use the generated libtool - Mac OSX uses 'glibtool' */
- $libtool = shell_exec('./libtool --version');
- /* Try the most common flags for 'version' */
- $flags = array('-v', '-V', '--version');
- $cc_status=0;
- foreach($flags AS $flag) {
- system($this->env['CC']." $flag >/dev/null 2>&1", $cc_status);
- if($cc_status == 0) {
- $compiler = shell_exec($this->env['CC']." $flag 2>&1");
- break;
- }
- }
- }
-
- $failed_tests_data .= "Automake:\n$automake\n";
- $failed_tests_data .= "Autoconf:\n$autoconf\n";
- $failed_tests_data .= "Libtool:\n$libtool\n";
- $failed_tests_data .= "Compiler:\n$compiler\n";
- $failed_tests_data .= "Bison:\n". @shell_exec('bison --version'). "\n";
- $failed_tests_data .= "\n\n";
-
- if (isset($user_email)) {
- $failed_tests_data .= "User's E-mail: ".$user_email."\n\n";
- }
-
- $failed_tests_data .= $sep . "PHPINFO" . $sep;
- $failed_tests_data .= shell_exec($this->conf['TEST_PHP_EXECUTABLE'].' -dhtml_errors=0 -i');
-
- $compression = 0;
-
- if ($just_save_results ||
- !post_result_data("status=$status&version=".urlencode(TESTED_PHP_VERSION),$failed_tests_data)) {
- $output_file = 'php_test_results_' . date('Ymd_Hi') . ( $compression ? '.txt.gz' : '.txt' );
- $fp = fopen($output_file, "w");
- fwrite($fp, $failed_tests_data);
- fclose($fp);
-
- if (!$just_save_results)
- echo "\nThe test script was unable to automatically send the report to PHP's QA Team\n";
- echo "Please send ".$output_file." to ".PHP_QA_EMAIL." manually, thank you.\n";
- } else {
- fwrite($fp, "\nThank you for helping to make PHP better.\n");
- fclose($fp);
- }
- }
- }
-
- if($this->conf['REPORT_EXIT_STATUS'] and $sum_results['FAILED']) {
- exit(1);
- }
- }
-
- function getINISettings(&$section_text)
- {
- $ini_settings = $this->ini_overwrites;
- // Any special ini settings
- // these may overwrite the test defaults...
- if (array_key_exists('INI', $section_text)) {
- settings2array(preg_split( "/[\n\r]+/", $section_text['INI']), $ini_settings);
- }
- return $ini_settings;
- }
-
- function getINIParams(&$section_text)
- {
- if (!$section_text) return '';
- // XXX php5 current has a problem doing this in one line
- // it fails with Only variables can be passed by reference
- // on test ext\calendar\tests\jdtojewish.phpt
- // return settings2params($this->getINISettings($section_text));
- $ini = $this->getINISettings($section_text);
- return settings2params($ini);
- }
-
- function calculateDocumentRoot()
- {
- if ($this->conf['TEST_WEB'] || $this->test_executable_iscgi) {
- // configure DOCUMENT_ROOT for web tests
- // this assumes that directories from the base url
- // matches directory depth from the base path
- $parts = parse_url($this->conf['TEST_WEB_BASE_URL']);
- $depth = substr_count($parts['path'],'/');
- $docroot = $this->conf['TEST_BASE_PATH'];
- for ($i=0 ; $i < $depth; $i++) $docroot = dirname($docroot);
- $this->conf['TEST_DOCUMENT_ROOT']=$docroot;
- $this->conf['TEST_BASE_SCRIPT_NAME']=$parts['path'];
- $this->conf['TEST_SERVER_URL']=substr($this->conf['TEST_WEB_BASE_URL'],0,strlen($this->conf['TEST_WEB_BASE_URL'])-strlen($parts['path']));
- } else {
- $this->conf['TEST_DOCUMENT_ROOT']='';
- $this->conf['TEST_BASE_SCRIPT_NAME']='';
- $this->conf['TEST_SERVER_URL']='';
- }
- }
-
- function evalSettings($filename,$data) {
- // we eval the section so we can allow dynamic env vars
- // for cgi testing
- $filename = str_replace('\\','/',$filename);
- $cwd = str_replace('\\','/',$this->cwd);
- $filepath = dirname($filename);
- $scriptname = substr($filename,strlen($this->conf['TEST_DOCUMENT_ROOT']));
- // eval fails if no newline
- return eval("$data\n");
- }
-
- function getENVSettings(&$section_text,$testfile)
- {
- $env = $this->env;
- // Any special environment settings
- // these may overwrite the test defaults...
- if (array_key_exists('ENV', $section_text)) {
- $sect = $this->evalSettings($testfile,$section_text['ENV']);
- //print "data evaled:\n$sect\n";
- settings2array(preg_split( "/[\n\r]+/", $sect), $env);
- }
- return $env;
- }
-
- function getEvalTestSettings($section_text,$testfile)
- {
- $rq = array();
- // Any special environment settings
- // these may overwrite the test defaults...
- if ($section_text) {
- $sect = $this->evalSettings($testfile,$section_text);
- //print "data evaled:\n$sect\n";
- settings2array(preg_split( "/[\n\r]+/", $sect), $rq);
- }
- return $rq;
- }
-
- //
- // Load the sections of the test file.
- //
- function getSectionText($file)
- {
- // Load the sections of the test file.
- $section_text = array(
- 'TEST' => '(unnamed test)',
- 'SKIPIF' => '',
- 'GET' => '',
- 'ARGS' => '',
- '_FILE' => $file,
- '_DIR' => realpath(dirname($file)),
- );
-
- $fp = @fopen($file, "r")
- or $this->error("Cannot open test file: $file");
-
- $section = '';
- while (!feof($fp)) {
- $line = fgets($fp);
- // Match the beginning of a section.
- if (ereg('^--([A-Z]+)--',$line,$r)) {
- $section = $r[1];
- $section_text[$section] = '';
- continue;
- }
-
- // Add to the section text.
- $section_text[$section] .= $line;
- }
- fclose($fp);
- foreach ($section_text as $k=>$v) {
- // for POST data ,we only want to trim the last new line!
- if ($k == 'POST' && preg_match('/^(.*?)\r?\n$/Ds',$v,$matches)) {
- $section_text[$k]=$matches[1];
- } else {
- $section_text[$k]=trim($v);
- }
- }
- return $section_text;
- }
-
- //
- // Check if test should be skipped.
- //
- function getSkipReason($file,&$section_text,$docgi=false)
- {
- // if the test uses POST or GET, and it's not the cgi
- // executable, skip
- if ($docgi && !$this->conf['TEST_WEB'] && !$this->test_executable_iscgi) {
- $this->showstatus($section_text['TEST'], 'SKIPPED', 'CGI Test needs CGI Binary');
- return "SKIPPED";
- }
- // if we're doing web testing, then we wont be able to set
- // ini setting on the command line. be sure the executables
- // ini settings are compatible with the test, or skip
- if (($docgi || $this->conf['TEST_WEB']) &&
- isset($section_text['INI']) && $section_text['INI']) {
- $settings = $this->getINISettings($section_text);
- foreach ($settings as $k=>$v) {
- if (strcasecmp($v,'off')==0 || !$v) $v='';
- $haveval = isset($this->inisettings[$k]['local_value']);
- if ($k == 'include_path') {
- // we only want to know that src directory
- // is in the include path
- if (strpos($this->inisettings[$k]['local_value'],$this->cwd))
- continue;
- }
- if (($haveval && $this->inisettings[$k]['local_value'] != $v) || (!$haveval && $v)) {
- $this->showstatus($section_text['TEST'], 'SKIPPED', "Test requires ini setting $k=[$v], not [".($haveval?$this->inisettings[$k]['local_value']:'')."]");
- return "SKIPPED";
- }
- }
- }
- // now handle a SKIPIF section
- if ($section_text['SKIPIF']) {
- $output = trim($this->runscript($section_text['SKIPIF'],$this->test_executable_iscgi,realpath(dirname($file))),true);
- if (!$output) return NULL;
- if ($this->conf['TEST_PHP_DETAILED'] > 2)
- print "SKIPIF: [$output]\n";
- if (eregi("^skip", $output)){
-
- $reason = (ereg("^skip[[:space:]]*(.+)\$", $output)) ? ereg_replace("^skip[[:space:]]*(.+)\$", "\\1", $output) : FALSE;
- $this->showstatus($section_text['TEST'], 'SKIPPED', $reason);
- return 'SKIPPED';
- }
- if (eregi("^info", $output)) {
- $reason = (ereg("^info[[:space:]]*(.+)\$", $output)) ? ereg_replace("^info[[:space:]]*(.+)\$", "\\1", $output) : FALSE;
- if ($reason) {
- $tested .= " (info: $reason)";
- }
- }
- }
- return NULL;
- }
-
- //
- // Run an individual test case.
- //
- function run_test($file)
- {
- if ($this->conf['TEST_PHP_DETAILED'])
- $this->writemsg("\n=================\nTEST $file\n");
-
- $section_text = $this->getSectionText($file);
-
- if ($this->iswin32)
- $shortname = str_replace($this->conf['TEST_BASE_PATH'].'\\', '', $file);
- else
- $shortname = str_replace($this->conf['TEST_BASE_PATH'].'/', '', $file);
- $tested = $section_text['TEST']." [$shortname]";
-
- if ($this->conf['TEST_WEB']) {
- $tmp_file = ereg_replace('\.phpt$','.'.$this->conf['TEST_WEB_EXT'],$file);
- $uri = $this->conf['TEST_BASE_SCRIPT_NAME'].str_replace($this->conf['TEST_BASE_PATH'], '', $tmp_file);
- $uri = str_replace('\\', '/', $uri);
- } else {
- $tmp_file = ereg_replace('\.phpt$','.php',$file);
- }
- @unlink($tmp_file);
-
- // unlink old test results
- @unlink(ereg_replace('\.phpt$','.diff',$file));
- @unlink(ereg_replace('\.phpt$','.log',$file));
- @unlink(ereg_replace('\.phpt$','.exp',$file));
- @unlink(ereg_replace('\.phpt$','.out',$file));
-
- if (!$this->conf['TEST_WEB']) {
- // Reset environment from any previous test.
- $env = $this->getENVSettings($section_text,$tmp_file);
- $ini_overwrites = $this->getINIParams($section_text);
- }
-
- // if this is a cgi test, prepare for it
- $query_string = '';
- $havepost = array_key_exists('POST', $section_text) && !empty($section_text['POST']);
- // allow empty query_string requests
- $haveget = array_key_exists('GET', $section_text) && !empty($section_text['GET']);
- $do_cgi = array_key_exists('CGI', $section_text) || $haveget || $havepost;
-
- $skipreason = $this->getSkipReason($file,$section_text,$do_cgi);
- if ($skipreason == 'SKIPPED') {
- return $skipreason;
- }
-
- // We've satisfied the preconditions - run the test!
- save_to_file($tmp_file,$section_text['FILE']);
-
- $post = NULL;
- $args = "";
-
- $headers = array();
- if ($this->conf['TEST_WEB']) {
- $request = $this->getEvalTestSettings(@$section_text['REQUEST'],$tmp_file);
- $headers = $this->getEvalTestSettings(@$section_text['HEADERS'],$tmp_file);
-
- $method = isset($request['method'])?$request['method']:$havepost?'POST':'GET';
- $query_string = $haveget?$section_text['GET']:'';
-
- $options = array();
- $options['method']=$method;
- if (isset($this->conf['timeout'])) $options['timeout'] = $this->conf['timeout'];
- if (isset($this->conf['proxy_host'])) $options['proxy_host'] = $this->conf['proxy_host'];
- if (isset($this->conf['proxy_port'])) $options['proxy_port'] = $this->conf['proxy_port'];
- if (isset($this->conf['proxy_user'])) $options['proxy_user'] = $this->conf['proxy_user'];
- if (isset($this->conf['proxy_pass'])) $options['proxy_pass'] = $this->conf['proxy_pass'];
-
- $post = $havepost?$section_text['POST']:NULL;
- $url = $this->conf['TEST_SERVER_URL'];
- if (isset($request['SCRIPT_NAME']))
- $url .= $request['SCRIPT_NAME'];
- else
- $url .= $uri;
- if (isset($request['PATH_INFO']))
- $url .= $request['PATH_INFO'];
- if (isset($request['FRAGMENT']))
- $url .= '#'.$request['FRAGMENT'];
- if (isset($request['QUERY_STRING']))
- $query_string = $request['QUERY_STRING'];
- if ($query_string)
- $url .= '?'.$query_string;
- if ($this->conf['TEST_PHP_DETAILED'])
- $this->writemsg("\nURL = $url\n");
- } else if ($do_cgi) {
- $query_string = $haveget?$section_text['GET']:'';
-
- if (!array_key_exists('GATEWAY_INTERFACE', $env))
- $env['GATEWAY_INTERFACE']='CGI/1.1';
- if (!array_key_exists('SERVER_SOFTWARE', $env))
- $env['SERVER_SOFTWARE']='PHP Test Harness';
- if (!array_key_exists('SERVER_SOFTWARE', $env))
- $env['SERVER_NAME']='127.0.0.1';
- if (!array_key_exists('REDIRECT_STATUS', $env))
- $env['REDIRECT_STATUS']='200';
- if (!array_key_exists('SERVER_NAME', $env))
- $env['QUERY_STRING']=$query_string;
- if (!array_key_exists('PATH_TRANSLATED', $env) &&
- !array_key_exists('SCRIPT_FILENAME', $env)) {
- $env['PATH_TRANSLATED']=$tmp_file;
- $env['SCRIPT_FILENAME']=$tmp_file;
- }
- if (!array_key_exists('PATH_TRANSLATED', $env))
- $env['PATH_TRANSLATED']='';
- if (!array_key_exists('PATH_INFO', $env))
- $env['PATH_INFO']='';
- if (!array_key_exists('SCRIPT_NAME', $env))
- $env['SCRIPT_NAME']='';
- if (!array_key_exists('SCRIPT_FILENAME', $env))
- $env['SCRIPT_FILENAME']='';
-
- if (array_key_exists('POST', $section_text) && (!$haveget || !empty($section_text['POST']))) {
- $post = $section_text['POST'];
- $content_length = strlen($post);
- if (!array_key_exists('REQUEST_METHOD', $env))
- $env['REQUEST_METHOD']='POST';
- if (!array_key_exists('CONTENT_TYPE', $env))
- $env['CONTENT_TYPE']='application/x-www-form-urlencoded';
- if (!array_key_exists('CONTENT_LENGTH', $env))
- $env['CONTENT_LENGTH']=$content_length;
- } else {
- if (!array_key_exists('REQUEST_METHOD', $env))
- $env['REQUEST_METHOD']='GET';
- if (!array_key_exists('CONTENT_TYPE', $env))
- $env['CONTENT_TYPE']='';
- if (!array_key_exists('CONTENT_LENGTH', $env))
- $env['CONTENT_LENGTH']='';
- }
- if ($this->conf['TEST_PHP_DETAILED'] > 1)
- $this->writemsg("\nCONTENT_LENGTH = " . $env['CONTENT_LENGTH'] .
- "\nCONTENT_TYPE = " . $env['CONTENT_TYPE'] .
- "\nPATH_TRANSLATED = " . $env['PATH_TRANSLATED'] .
- "\nPATH_INFO = " . $env['PATH_INFO'] .
- "\nQUERY_STRING = " . $env['QUERY_STRING'] .
- "\nREDIRECT_STATUS = " . $env['REDIRECT_STATUS'] .
- "\nREQUEST_METHOD = " . $env['REQUEST_METHOD'] .
- "\nSCRIPT_NAME = " . $env['SCRIPT_NAME'] .
- "\nSCRIPT_FILENAME = " . $env['SCRIPT_FILENAME'] . "\n");
- /* not cgi spec to put query string on command line,
- but used by a couple tests to catch a security hole
- in older php versions. At least IIS can be configured
- to do this. */
- $args = $env['QUERY_STRING'];
- } else {
- $args = $section_text['ARGS'] ? $section_text['ARGS'] : '';
- $args = "$ini_overwrites $tmp_file $args 2>&1";
- }
-
- if ($this->conf['TEST_WEB']) {
- // we want headers also, so fopen
- $r = new HTTPRequest($url,$headers,$options,$post);
- //$out = preg_replace("/\r\n/","\n",$r->response);
- $out = $r->response;
- $headers = $r->response_headers;
- //print $r->outgoing_payload."\n";
- //print $r->incoming_payload."\n";
- } else {
- $out = execute($this->conf['TEST_PHP_EXECUTABLE'],$args,$post,$this->cwd,$env);
- // if this is a cgi, remove the headers first
- if ($this->test_executable_iscgi
- && preg_match("/^(.*?)\r?\n\r?\n(.*)/s", $out, $match)) {
- $out = $match[2];
- $rh = preg_split("/[\n\r]+/",$match[1]);
- $headers = array();
- foreach ($rh as $line) {
- if (strpos($line, ':')!==false) {
- $line = explode(":", $line, 2);
- $headers[trim($line[0])] = trim($line[1]);
- }
- }
- }
- }
-
- if ($this->conf['TEST_PHP_DETAILED'] > 2) {
- echo "HEADERS: ";
- print_r($headers);
- echo "OUTPUT: \n$out\n";
-
- }
-
- // Does the output match what is expected?
- $output = trim($out);
- $output = preg_replace('/\r\n/',"\n",$output);
-
- $failed = FALSE;
-
- if (isset($section_text['EXPECTF']) || isset($section_text['EXPECTREGEX'])) {
- if (isset($section_text['EXPECTF'])) {
- $wanted = $section_text['EXPECTF'];
- } else {
- $wanted = $section_text['EXPECTREGEX'];
- }
- $wanted_re = preg_replace('/\r\n/',"\n",$wanted);
- if (isset($section_text['EXPECTF'])) {
- $wanted_re = preg_quote($wanted_re, '/');
- // Stick to basics
- $wanted_re = str_replace("%s", ".+?", $wanted_re); //not greedy
- $wanted_re = str_replace("%i", "[+\-]?[0-9]+", $wanted_re);
- $wanted_re = str_replace("%d", "[0-9]+", $wanted_re);
- $wanted_re = str_replace("%x", "[0-9a-fA-F]+", $wanted_re);
- $wanted_re = str_replace("%f", "[+\-]?\.?[0-9]+\.?[0-9]*(E-?[0-9]+)?", $wanted_re);
- $wanted_re = str_replace("%c", ".", $wanted_re);
- // %f allows two points "-.0.0" but that is the best *simple* expression
- }
- /* DEBUG YOUR REGEX HERE
- var_dump($wanted_re);
- print(str_repeat('=', 80) . "\n");
- var_dump($output);
- */
- $failed = !preg_match("/^$wanted_re\$/s", $output);
- }
-
- $skipexpect = false;
- if (!$failed && $this->conf['TEST_WEB'] && isset($section_text['EXPECTHEADERS'])) {
- $want = array();
- $lines = preg_split("/[\n\r]+/",$section_text['EXPECTHEADERS']);
- $wanted='';
- foreach ($lines as $line) {
- if (strpos($line, ':')!==false) {
- $line = explode(":", $line, 2);
- $want[trim($line[0])] = trim($line[1]);
- $wanted .= trim($line[0]).': '.trim($line[1])."\n";
- }
- }
- $output='';
- foreach ($want as $k=>$v) {
- $output .= "$k: {$headers[$k]}\n";
- if (!isset($headers[$k]) || $headers[$k] != $v) {
- $failed = TRUE;
- }
- }
-
- // different servers may do different things on non-200 results
- // for instance, IIS will deliver it's own error pages, so we
- // cannot expect to match up the EXPECT section. We may however,
- // want to match EXPECT on more than 200 results, so this may
- // need to change later.
- $skipexpect = isset($headers['Status']) && $headers['Status'] != 200;
- }
-
- if (!$failed && !$skipexpect && isset($section_text['EXPECT'])) {
- $wanted = $section_text['EXPECT'];
- $wanted = preg_replace('/\r\n/',"\n",$wanted);
- $failed = (0 != strcmp($output,$wanted));
- }
-
- if (!$failed) {
- @unlink($tmp_file);
- $this->showstatus($tested, 'PASSED');
- return 'PASSED';
- }
-
- // Test failed so we need to report details.
- $this->showstatus($tested, 'FAILED');
-
- $this->failed_tests[] = array(
- 'name' => $file,
- 'test_name' => $tested,
- 'output' => ereg_replace('\.phpt$','.log', $file),
- 'diff' => ereg_replace('\.phpt$','.diff', $file)
- );
-
- if ($this->conf['TEST_PHP_DETAILED'])
- $this->writemsg(generate_diff($wanted,$output)."\n");
-
- // write .exp
- if (strpos($this->conf['TEST_PHP_LOG_FORMAT'],'E') !== FALSE) {
- $logname = ereg_replace('\.phpt$','.exp',$file);
- save_to_file($logname,$wanted);
- }
-
- // write .out
- if (strpos($this->conf['TEST_PHP_LOG_FORMAT'],'O') !== FALSE) {
- $logname = ereg_replace('\.phpt$','.out',$file);
- save_to_file($logname,$output);
- }
-
- // write .diff
- if (strpos($this->conf['TEST_PHP_LOG_FORMAT'],'D') !== FALSE) {
- $logname = ereg_replace('\.phpt$','.diff',$file);
- save_to_file($logname,generate_diff($wanted,$output));
- }
-
- // write .log
- if (strpos($this->conf['TEST_PHP_LOG_FORMAT'],'L') !== FALSE) {
- $logname = ereg_replace('\.phpt$','.log',$file);
- save_to_file($logname,
- "\n---- EXPECTED OUTPUT\n$wanted\n".
- "---- ACTUAL OUTPUT\n$output\n".
- "---- FAILED\n");
- // display emacs/msvc error output
- if (strpos($this->conf['TEST_PHP_LOG_FORMAT'],'C') !== FALSE) {
- $this->error_report($file,$logname,$tested);
- }
- }
- return 'FAILED';
- }
-
- //
- // Write an error in a format recognizable to Emacs or MSVC.
- //
- function error_report($testname,$logname,$tested)
- {
- $testname = realpath($testname);
- $logname = realpath($logname);
- switch ($this->conf['TEST_PHP_ERROR_STYLE']) {
- default:
- case 'MSVC':
- $this->writemsg($testname . "(1) : $tested\n");
- $this->writemsg($logname . "(1) : $tested\n");
- break;
- case 'EMACS':
- $this->writemsg($testname . ":1: $tested\n");
- $this->writemsg($logname . ":1: $tested\n");
- break;
- }
- }
-
- function error($message)
- {
- $this->writemsg("ERROR: {$message}\n");
- exit(1);
- }
-}
-
-$test = new testHarness();
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- * vim600: fdm=marker
- * vim: noet sw=4 ts=4
- */
-?>
diff --git a/sapi/aolserver/CREDITS b/sapi/aolserver/CREDITS
deleted file mode 100644
index 8f9a4af950..0000000000
--- a/sapi/aolserver/CREDITS
+++ /dev/null
@@ -1,2 +0,0 @@
-AOLserver
-Sascha Schumann
diff --git a/sapi/aolserver/README b/sapi/aolserver/README
deleted file mode 100644
index 80c186ea5d..0000000000
--- a/sapi/aolserver/README
+++ /dev/null
@@ -1,69 +0,0 @@
-AOLserver README ($Id$)
-
-To compile PHP 4.0 as a module for AOLserver, you need:
-
-- installed AOLserver 3.1 or later
- (see the note below for AOLserver 3.0)
-
-NOTE: You should not use this module in production. PHP is not 100% stable
- yet in threaded mode. To increase reliability enable the Global Lock
- by removing #define NO_GLOBAL_LOCK in main/main.c. Also don't use
- php_value as it will lead to races in a sub-system (use an ini file
- instead).
-
-
-1.) Configuring AOLserver
-
-Read doc/install.txt in the source distribution
-
-It usually boils down to changing the INST/PREFIX variable in
-include/Makefile.global and running make all install.
-
-2.) Configuring PHP
-
-$ ./configure \
- --with-aolserver=/path/to/installed/aolserver \
- <other options>
-
-NOTE: If you are still using AOLserver 3.0, you need to retain the
- AOLserver source code and pass another option to PHP:
-
- --with-aolserver-src=/path/to/source/distribution
-
-3.) Compiling and Installing PHP
-
-$ make install
-
-4.) Changing nsd.tcl
-
-a) New section
-
-Add a new section to pass options to PHP (required):
-
-ns_section "ns/server/${servername}/module/php"
-
-You can use the following commands in this section:
-
-The 'map' command will cause AOLserver to pass all requests to *.php to
-the PHP module (can be specified multiple times). Example:
-
-ns_param map *.php
-
-The 'php_value "name val"' command assigns the configuration option name
-the value val (can be used multiple times). Example:
-
-ns_param php_value "session.auto_start 1"
-
-b) Enabling PHP
-
-Then enable the PHP module:
-
-ns_section "ns/server/${servername}/modules"
-...
-ns_param php ${bindir}/libphp5.so
-
-
-=============================================================================
-This has been tested with AOLserver release 3.0.
-
-AOLserver support has been written by Sascha Schumann <sascha@schumann.cx>.
diff --git a/sapi/aolserver/aolserver.c b/sapi/aolserver/aolserver.c
deleted file mode 100644
index 6f685ad9d4..0000000000
--- a/sapi/aolserver/aolserver.c
+++ /dev/null
@@ -1,616 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Sascha Schumann <sascha@schumann.cx> |
- +----------------------------------------------------------------------+
- */
-
-/*
- * TODO:
- * - write documentation
- * - CGI/1.1 conformance
- */
-
-/* $Id$ */
-
-/* conflict between PHP and AOLserver headers */
-#define Debug php_Debug
-#include "php.h"
-#undef Debug
-
-#ifdef HAVE_AOLSERVER
-
-#ifndef ZTS
-#error AOLserver module is only useable in thread-safe mode
-#endif
-
-#include "ext/standard/info.h"
-#define SECTION(name) PUTS("<h2>" name "</h2>\n")
-
-#define NS_BUF_SIZE 511
-
-#include "php_ini.h"
-#include "php_globals.h"
-#include "SAPI.h"
-#include "php_main.h"
-#include "php_variables.h"
-
-#include "ns.h"
-
-#include "php_version.h"
-
-/* This symbol is used by AOLserver to tell the API version we expect */
-
-int Ns_ModuleVersion = 1;
-
-#define NSG(v) TSRMG(ns_globals_id, ns_globals_struct *, v)
-
-/* php_ns_context is per-server (thus only once at all) */
-
-typedef struct {
- sapi_module_struct *sapi_module;
- char *ns_server;
- char *ns_module;
-} php_ns_context;
-
-/* ns_globals_struct is per-thread */
-
-typedef struct {
- Ns_Conn *conn;
- size_t data_avail;
-} ns_globals_struct;
-
-/* TSRM id */
-
-static int ns_globals_id;
-
-/* global context */
-
-static php_ns_context *global_context;
-
-static void php_ns_config(php_ns_context *ctx, char global);
-
-/*
- * php_ns_sapi_ub_write() writes data to the client connection.
- */
-
-static int
-php_ns_sapi_ub_write(const char *str, uint str_length TSRMLS_DC)
-{
- int n;
- uint sent = 0;
-
- while (str_length > 0) {
- n = Ns_ConnWrite(NSG(conn), (void *) str, str_length);
-
- if (n == -1)
- php_handle_aborted_connection();
-
- str += n;
- sent += n;
- str_length -= n;
- }
-
- return sent;
-}
-
-/*
- * php_ns_sapi_header_handler() sets a HTTP reply header to be
- * sent to the client.
- */
-
-static int
-php_ns_sapi_header_handler(sapi_header_struct *sapi_header, sapi_headers_struct *sapi_headers TSRMLS_DC)
-{
- char *header_name, *header_content;
- char *p;
-
- header_name = sapi_header->header;
- header_content = p = strchr(header_name, ':');
-
- if (p) {
- *p = '\0';
- do {
- header_content++;
- } while (*header_content == ' ');
-
- if (!strcasecmp(header_name, "Content-type")) {
- Ns_ConnSetTypeHeader(NSG(conn), header_content);
- } else {
- Ns_ConnSetHeaders(NSG(conn), header_name, header_content);
- }
-
- *p = ':';
- }
-
- sapi_free_header(sapi_header);
-
- return 0;
-}
-
-/*
- * php_ns_sapi_send_headers() flushes the headers to the client.
- * Called before real content is sent by PHP.
- */
-
-static int
-php_ns_sapi_send_headers(sapi_headers_struct *sapi_headers TSRMLS_DC)
-{
- if(SG(sapi_headers).send_default_content_type) {
- Ns_ConnSetRequiredHeaders(NSG(conn), "text/html", 0);
- }
-
- Ns_ConnFlushHeaders(NSG(conn), SG(sapi_headers).http_response_code);
-
- return SAPI_HEADER_SENT_SUCCESSFULLY;
-}
-
-/*
- * php_ns_sapi_read_post() reads a specified number of bytes from
- * the client. Used for POST/PUT requests.
- */
-
-static int
-php_ns_sapi_read_post(char *buf, uint count_bytes TSRMLS_DC)
-{
- uint max_read;
- uint total_read = 0;
-
- max_read = MIN(NSG(data_avail), count_bytes);
-
- total_read = Ns_ConnRead(NSG(conn), buf, max_read);
-
- if(total_read == NS_ERROR) {
- total_read = -1;
- } else {
- NSG(data_avail) -= total_read;
- }
-
- return total_read;
-}
-
-/*
- * php_ns_sapi_read_cookies() returns the Cookie header from
- * the HTTP request header
- */
-
-static char *php_ns_sapi_read_cookies(TSRMLS_D)
-{
- int i;
- char *http_cookie = NULL;
-
- i = Ns_SetIFind(NSG(conn->headers), "cookie");
- if(i != -1) {
- http_cookie = Ns_SetValue(NSG(conn->headers), i);
- }
-
- return http_cookie;
-}
-
-static void php_info_aolserver(ZEND_MODULE_INFO_FUNC_ARGS)
-{
- char buf[512];
- int uptime = Ns_InfoUptime();
- int i;
-
- php_info_print_table_start();
- php_info_print_table_row(2, "SAPI module version", "$Id$");
- php_info_print_table_row(2, "Build date", Ns_InfoBuildDate());
- php_info_print_table_row(2, "Config file path", Ns_InfoConfigFile());
- php_info_print_table_row(2, "Error Log path", Ns_InfoErrorLog());
- php_info_print_table_row(2, "Installation path", Ns_InfoHomePath());
- php_info_print_table_row(2, "Hostname of server", Ns_InfoHostname());
- php_info_print_table_row(2, "Source code label", Ns_InfoLabel());
- php_info_print_table_row(2, "Server platform", Ns_InfoPlatform());
- snprintf(buf, 511, "%s/%s", Ns_InfoServerName(), Ns_InfoServerVersion());
- php_info_print_table_row(2, "Server version", buf);
- snprintf(buf, 511, "%d day(s), %02d:%02d:%02d",
- uptime / 86400,
- (uptime / 3600) % 24,
- (uptime / 60) % 60,
- uptime % 60);
- php_info_print_table_row(2, "Server uptime", buf);
- php_info_print_table_end();
-
- SECTION("HTTP Headers Information");
- php_info_print_table_start();
- php_info_print_table_colspan_header(2, "HTTP Request Headers");
- php_info_print_table_row(2, "HTTP Request", NSG(conn)->request->line);
- for (i = 0; i < Ns_SetSize(NSG(conn)->headers); i++) {
- php_info_print_table_row(2, Ns_SetKey(NSG(conn)->headers, i), Ns_SetValue(NSG(conn)->headers, i));
- }
-
- php_info_print_table_colspan_header(2, "HTTP Response Headers");
- for (i = 0; i < Ns_SetSize(NSG(conn)->outputheaders); i++) {
- php_info_print_table_row(2, Ns_SetKey(NSG(conn)->outputheaders, i), Ns_SetValue(NSG(conn)->outputheaders, i));
- }
- php_info_print_table_end();
-}
-
-PHP_FUNCTION(getallheaders);
-
-static function_entry aolserver_functions[] = {
- PHP_FE(getallheaders, NULL)
- {NULL, NULL, NULL}
-};
-
-static zend_module_entry php_aolserver_module = {
- STANDARD_MODULE_HEADER,
- "AOLserver",
- aolserver_functions,
- NULL,
- NULL,
- NULL,
- NULL,
- php_info_aolserver,
- NULL,
- STANDARD_MODULE_PROPERTIES
-};
-
-PHP_FUNCTION(getallheaders)
-{
- int i;
-
- array_init(return_value);
-
- for (i = 0; i < Ns_SetSize(NSG(conn->headers)); i++) {
- char *key = Ns_SetKey(NSG(conn->headers), i);
- char *value = Ns_SetValue(NSG(conn->headers), i);
-
- add_assoc_string(return_value, key, value, 1);
- }
-}
-
-static int
-php_ns_startup(sapi_module_struct *sapi_module)
-{
- if (php_module_startup(sapi_module, &php_aolserver_module, 1) == FAILURE) {
- return FAILURE;
- } else {
- return SUCCESS;
- }
-}
-
-
-/*
- * php_ns_sapi_register_variables() populates the php script environment
- * with a number of variables. HTTP_* variables are created for
- * the HTTP header data, so that a script can access these.
- */
-
-#define ADD_STRINGX(name, buf) \
- php_register_variable(name, buf, track_vars_array TSRMLS_CC)
-
-#define ADD_STRING(name) \
- ADD_STRINGX(name, buf)
-
-static void
-php_ns_sapi_register_variables(zval *track_vars_array TSRMLS_DC)
-{
- int i;
- char buf[NS_BUF_SIZE + 1];
- char *tmp;
-
- for(i = 0; i < Ns_SetSize(NSG(conn->headers)); i++) {
- char *key = Ns_SetKey(NSG(conn->headers), i);
- char *value = Ns_SetValue(NSG(conn->headers), i);
- char *p;
- char c;
-
- snprintf(buf, NS_BUF_SIZE, "HTTP_%s", key);
-
- for(p = buf + 5; (c = *p); p++) {
- c = toupper(c);
- if(c < 'A' || c > 'Z') {
- c = '_';
- }
- *p = c;
- }
-
- ADD_STRINGX(buf, value);
- }
-
- snprintf(buf, NS_BUF_SIZE, "%s/%s", Ns_InfoServerName(), Ns_InfoServerVersion());
- ADD_STRING("SERVER_SOFTWARE");
- snprintf(buf, NS_BUF_SIZE, "HTTP/%1.1f", NSG(conn)->request->version);
- ADD_STRING("SERVER_PROTOCOL");
-
- ADD_STRINGX("REQUEST_METHOD", NSG(conn)->request->method);
-
- if(NSG(conn)->request->query)
- ADD_STRINGX("QUERY_STRING", NSG(conn)->request->query);
-
- ADD_STRINGX("SERVER_BUILDDATE", Ns_InfoBuildDate());
-
- ADD_STRINGX("REMOTE_ADDR", Ns_ConnPeer(NSG(conn)));
-
- snprintf(buf, NS_BUF_SIZE, "%d", Ns_ConnPeerPort(NSG(conn)));
- ADD_STRING("REMOTE_PORT");
-
- snprintf(buf, NS_BUF_SIZE, "%d", Ns_ConnPort(NSG(conn)));
- ADD_STRING("SERVER_PORT");
-
- tmp = Ns_ConnHost(NSG(conn));
- if (tmp)
- ADD_STRINGX("SERVER_NAME", tmp);
-
- ADD_STRINGX("PATH_TRANSLATED", SG(request_info).path_translated);
- ADD_STRINGX("REQUEST_URI", SG(request_info).request_uri);
- ADD_STRINGX("PHP_SELF", SG(request_info).request_uri);
-
- ADD_STRINGX("GATEWAY_INTERFACE", "CGI/1.1");
-
- snprintf(buf, NS_BUF_SIZE, "%d", Ns_InfoBootTime());
- ADD_STRING("SERVER_BOOTTIME");
-}
-
-
-
-/* this structure is static (as in "it does not change") */
-
-static sapi_module_struct aolserver_sapi_module = {
- "aolserver",
- "AOLserver",
-
- php_ns_startup, /* startup */
- php_module_shutdown_wrapper, /* shutdown */
-
- NULL, /* activate */
- NULL, /* deactivate */
-
- php_ns_sapi_ub_write, /* unbuffered write */
- NULL, /* flush */
- NULL, /* get uid */
- NULL, /* getenv */
-
- php_error, /* error handler */
-
- php_ns_sapi_header_handler, /* header handler */
- php_ns_sapi_send_headers, /* send headers handler */
- NULL, /* send header handler */
-
- php_ns_sapi_read_post, /* read POST data */
- php_ns_sapi_read_cookies, /* read Cookies */
-
- php_ns_sapi_register_variables,
- NULL, /* Log message */
-
- STANDARD_SAPI_MODULE_PROPERTIES
-};
-
-/*
- * php_ns_module_main() is called by the per-request handler and
- * "executes" the script
- */
-
-static int
-php_ns_module_main(TSRMLS_D)
-{
- zend_file_handle file_handle;
-
- file_handle.type = ZEND_HANDLE_FILENAME;
- file_handle.filename = SG(request_info).path_translated;
- file_handle.free_filename = 0;
- file_handle.opened_path = NULL;
-
- php_ns_config(global_context, 0);
- if (php_request_startup(TSRMLS_C) == FAILURE) {
- return NS_ERROR;
- }
-
- php_execute_script(&file_handle TSRMLS_CC);
- php_request_shutdown(NULL);
-
- return NS_OK;
-}
-
-/*
- * php_ns_request_ctor() initializes the per-request data structure
- * and fills it with data provided by the web server
- */
-
-static void
-php_ns_request_ctor(TSRMLS_D)
-{
- char *server;
- Ns_DString ds;
- char *root;
- int index;
- char *tmp;
-
- server = Ns_ConnServer(NSG(conn));
-
-#define safe_strdup(x) ((x)?strdup((x)):NULL)
- SG(request_info).query_string = safe_strdup(NSG(conn->request->query));
-
- Ns_DStringInit(&ds);
- Ns_UrlToFile(&ds, server, NSG(conn->request->url));
-
- /* path_translated is the absolute path to the file */
- SG(request_info).path_translated = safe_strdup(Ns_DStringValue(&ds));
- Ns_DStringFree(&ds);
- root = Ns_PageRoot(server);
- SG(request_info).request_uri = strdup(SG(request_info).path_translated + strlen(root));
- SG(request_info).request_method = NSG(conn)->request->method;
- SG(request_info).content_length = Ns_ConnContentLength(NSG(conn));
- index = Ns_SetIFind(NSG(conn)->headers, "content-type");
- SG(request_info).content_type = index == -1 ? NULL :
- Ns_SetValue(NSG(conn)->headers, index);
- SG(sapi_headers).http_response_code = 200;
-
- tmp = Ns_ConnAuthUser(NSG(conn));
- if (tmp)
- tmp = estrdup(tmp);
- SG(request_info).auth_user = tmp;
-
- tmp = Ns_ConnAuthPasswd(NSG(conn));
- if (tmp)
- tmp = estrdup(tmp);
- SG(request_info).auth_password = tmp;
-
- NSG(data_avail) = SG(request_info).content_length;
-}
-
-/*
- * php_ns_request_dtor() destroys all data associated with
- * the per-request structure
- */
-
-static void
-php_ns_request_dtor(TSRMLS_D)
-{
- free(SG(request_info).path_translated);
- if (SG(request_info).query_string)
- free(SG(request_info).query_string);
- free(SG(request_info).request_uri);
-}
-
-/*
- * The php_ns_request_handler() is called per request and handles
- * everything for one request.
- */
-
-static int
-php_ns_request_handler(void *context, Ns_Conn *conn)
-{
- int status = NS_OK;
- TSRMLS_FETCH();
-
- NSG(conn) = conn;
-
- SG(server_context) = global_context;
-
- php_ns_request_ctor(TSRMLS_C);
-
- status = php_ns_module_main(TSRMLS_C);
-
- php_ns_request_dtor(TSRMLS_C);
-
- return status;
-}
-
-/*
- * php_ns_config() fetches the configuration data.
- *
- * It understands the "map" and "php_value" command.
- */
-
-static void
-php_ns_config(php_ns_context *ctx, char global)
-{
- int i;
- char *path;
- Ns_Set *set;
-
- path = Ns_ConfigGetPath(ctx->ns_server, ctx->ns_module, NULL);
- set = Ns_ConfigGetSection(path);
-
- for (i = 0; set && i < Ns_SetSize(set); i++) {
- char *key = Ns_SetKey(set, i);
- char *value = Ns_SetValue(set, i);
-
- if (global && !strcasecmp(key, "map")) {
- Ns_Log(Notice, "Registering PHP for \"%s\"", value);
- Ns_RegisterRequest(ctx->ns_server, "GET", value, php_ns_request_handler, NULL, ctx, 0);
- Ns_RegisterRequest(ctx->ns_server, "POST", value, php_ns_request_handler, NULL, ctx, 0);
- Ns_RegisterRequest(ctx->ns_server, "HEAD", value, php_ns_request_handler, NULL, ctx, 0);
-
- /*
- * Deactivated for now. The ini system will cause random crashes when
- * accessed from here (since there are no locks to protect the global
- * known_directives)
- */
-
- } else if (!global && !strcasecmp(key, "php_value")) {
- Ns_Log(Notice, "php_value has been deactivated temporarily. Please use a php.ini file to pass directives to PHP. Thanks.");
-#if 0
- char *val;
-
- val = strchr(value, ' ');
- if (val) {
- char *new_key;
-
- new_key = estrndup(value, val - value);
-
- do {
- val++;
- } while(*val == ' ');
-
- Ns_Log(Debug, "PHP configuration option '%s=%s'", new_key, val);
- zend_alter_ini_entry(new_key, strlen(new_key) + 1, val,
- strlen(val) + 1, PHP_INI_SYSTEM, PHP_INI_STAGE_RUNTIME);
-
- efree(new_key);
- }
-#endif
- }
-
- }
-}
-
-/*
- * php_ns_server_shutdown() performs the last steps before the
- * server exits. Shutdowns basic services and frees memory
- */
-
-static void
-php_ns_server_shutdown(void *context)
-{
- php_ns_context *ctx = (php_ns_context *) context;
-
- ctx->sapi_module->shutdown(ctx->sapi_module);
- sapi_shutdown();
- tsrm_shutdown();
-
- free(ctx->ns_module);
- free(ctx->ns_server);
- free(ctx);
-}
-
-/*
- * Ns_ModuleInit() is called by AOLserver once at startup
- *
- * This functions allocates basic structures and initializes
- * basic services.
- */
-
-int Ns_ModuleInit(char *server, char *module)
-{
- php_ns_context *ctx;
-
- tsrm_startup(1, 1, 0, NULL);
- sapi_startup(&aolserver_sapi_module);
- sapi_module.startup(&aolserver_sapi_module);
-
- /* TSRM is used to allocate a per-thread structure */
- ts_allocate_id(&ns_globals_id, sizeof(ns_globals_struct), NULL, NULL);
-
- /* the context contains data valid for all threads */
- ctx = malloc(sizeof *ctx);
- ctx->sapi_module = &aolserver_sapi_module;
- ctx->ns_server = strdup(server);
- ctx->ns_module = strdup(module);
-
- /* read the configuration */
- php_ns_config(ctx, 1);
-
- global_context = ctx;
-
- /* register shutdown handler */
- Ns_RegisterServerShutdown(server, php_ns_server_shutdown, ctx);
-
- return NS_OK;
-}
-
-#endif
diff --git a/sapi/aolserver/config.m4 b/sapi/aolserver/config.m4
deleted file mode 100644
index 2c905af2cc..0000000000
--- a/sapi/aolserver/config.m4
+++ /dev/null
@@ -1,33 +0,0 @@
-dnl
-dnl $Id$
-dnl
-
-AC_MSG_CHECKING(for AOLserver support)
-AC_ARG_WITH(aolserver,
-[ --with-aolserver=DIR Specify path to the installed AOLserver],[
- PHP_AOLSERVER=$withval
-],[
- PHP_AOLSERVER=no
-])
-AC_MSG_RESULT($PHP_AOLSERVER)
-
-if test "$PHP_AOLSERVER" != "no"; then
- if test -d "$PHP_AOLSERVER/include"; then
- PHP_AOLSERVER_SRC=$PHP_AOLSERVER
- fi
- if test -z "$PHP_AOLSERVER_SRC" || test ! -d $PHP_AOLSERVER_SRC/include; then
- AC_MSG_ERROR(Please specify the path to the source distribution of AOLserver using --with-aolserver-src=DIR)
- fi
- if test ! -d $PHP_AOLSERVER/bin ; then
- AC_MSG_ERROR(Please specify the path to the root of AOLserver using --with-aolserver=DIR)
- fi
- PHP_BUILD_THREAD_SAFE
- PHP_ADD_INCLUDE($PHP_AOLSERVER_SRC/include)
- AC_DEFINE(HAVE_AOLSERVER,1,[Whether you have AOLserver])
- PHP_SELECT_SAPI(aolserver, shared, aolserver.c)
- INSTALL_IT="\$(INSTALL) -m 0755 $SAPI_SHARED \$(INSTALL_ROOT)$PHP_AOLSERVER/bin/"
-fi
-
-dnl ## Local Variables:
-dnl ## tab-width: 4
-dnl ## End:
diff --git a/sapi/aolserver/config.w32 b/sapi/aolserver/config.w32
deleted file mode 100644
index 75b4361efc..0000000000
--- a/sapi/aolserver/config.w32
+++ /dev/null
@@ -1,16 +0,0 @@
-// vim:ft=javascript
-// $Id$
-
-ARG_WITH('aolserver', 'Build AOLserver support', 'no');
-
-if (PHP_AOLSERVER != "no") {
- if (PHP_ZTS == "no") {
- WARNING("AOLSERVER module requires an --enable-zts build of PHP");
- } else {
- if (CHECK_HEADER_ADD_INCLUDE("ns.h", "CFLAGS_AOLSERVER", PHP_AOLSERVER) && CHECK_LIB("nsd.lib", "aolserver", PHP_AOLSERVER)) {
- SAPI('aolserver', 'aolserver.c', 'php' + PHP_VERSION + 'aolserver.so', '/D XP_WIN32 ');
- } else {
- WARNING("sapi/aolserver not enabled: Could not find libraries/headers");
- }
- }
-}
diff --git a/sapi/aolserver/php.sym b/sapi/aolserver/php.sym
deleted file mode 100644
index b401ffd2b3..0000000000
--- a/sapi/aolserver/php.sym
+++ /dev/null
@@ -1,2 +0,0 @@
-Ns_ModuleVersion
-Ns_ModuleInit
diff --git a/sapi/aolserver/php5aolserver.dsp b/sapi/aolserver/php5aolserver.dsp
deleted file mode 100644
index dd6ad71c53..0000000000
--- a/sapi/aolserver/php5aolserver.dsp
+++ /dev/null
@@ -1,135 +0,0 @@
-# Microsoft Developer Studio Project File - Name="php5aolserver" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=php5aolserver - Win32 Debug_TS
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "php5aolserver.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "php5aolserver.mak" CFG="php5aolserver - Win32 Debug_TS"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "php5aolserver - Win32 Release_TS" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "php5aolserver - Win32 Release_TS_inline" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "php5aolserver - Win32 Debug_TS" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "php5aolserver - Win32 Release_TS"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release_TS"
-# PROP BASE Intermediate_Dir "Release_TS"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "..\..\Release_TS"
-# PROP Intermediate_Dir "Release_TS"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "PHP5AOLSERVER_EXPORTS" /YX /FD /c
-# ADD CPP /nologo /MD /W3 /GX /O2 /I "." /I "..\..\..\php_build\nsapi30\include\\" /I "..\..\include" /I "..\..\win32" /I "..\..\Zend" /I "..\.." /I "..\..\..\bindlib_w32" /I "..\..\main" /I "..\..\tsrm" /D ZEND_DEBUG=0 /D "NDEBUG" /D "PHP5AOLSERVER_EXPORTS" /D "PHP_WIN32" /D "ZTS" /D "ZEND_WIN32" /D "_WINDOWS" /D "_USRDLL" /D "WIN32" /D "_MBCS" /D "HAVE_AOLSERVER" /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386
-# ADD LINK32 nsd.lib php5ts.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /base:"0x62000000" /version:4.0 /dll /machine:I386 /out:"../../Release_TS/php5aolserver.so" /libpath:"..\..\..\php_build\nsapi30\lib\\" /libpath:"..\..\Release_TS" /libpath:"..\..\TSRM\Release_TS" /libpath:"..\..\Zend\Release_TS"
-
-!ELSEIF "$(CFG)" == "php5aolserver - Win32 Release_TS_inline"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release_TS_inline"
-# PROP BASE Intermediate_Dir "Release_TS_inline"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "..\..\Release_TS_inline"
-# PROP Intermediate_Dir "Release_TS_inline"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "PHP5AOLSERVER_EXPORTS" /YX /FD /c
-# ADD CPP /nologo /MD /W3 /GX /O2 /I "." /I "..\..\..\php_build\nsapi30\include\\" /I "..\..\include" /I "..\..\win32" /I "..\..\Zend" /I "..\.." /I "..\..\..\bindlib_w32" /I "..\..\main" /I "..\..\tsrm" /D ZEND_DEBUG=0 /D "ZEND_WIN32_FORCE_INLINE" /D "NDEBUG" /D "PHPAOLSERVER_EXPORTS" /D "PHP_WIN32" /D "ZTS" /D "ZEND_WIN32" /D "_WINDOWS" /D "_USRDLL" /D "WIN32" /D "_MBCS" /D "HAVE_AOLSERVER" /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386
-# ADD LINK32 nsd.lib php5ts.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /base:"0x62000000" /version:4.0 /dll /machine:I386 /out:"../../Release_TS_inline/php5aolserver.so" /libpath:"..\..\..\php_build\nsapi30\lib\\" /libpath:"..\..\Release_TS_inline" /libpath:"..\..\TSRM\Release_TS_inline" /libpath:"..\..\Zend\Release_TS_inline"
-
-!ELSEIF "$(CFG)" == "php5aolserver - Win32 Debug_TS"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug_TS"
-# PROP BASE Intermediate_Dir "Debug_TS"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "..\..\Debug_TS"
-# PROP Intermediate_Dir "Debug_TS"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "PHP5AOLSERVER_EXPORTS" /YX /FD /GZ /c
-# ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "." /I "..\..\..\php_build\nsapi30\include\\" /I "..\..\include" /I "..\..\win32" /I "..\..\Zend" /I "..\.." /I "..\..\..\bindlib_w32" /I "..\..\main" /I "..\..\tsrm" /D "_DEBUG" /D ZEND_DEBUG=1 /D "PHP5AOLSERVER_EXPORTS" /D "PHP_WIN32" /D "ZTS" /D "ZEND_WIN32" /D "_WINDOWS" /D "_USRDLL" /D "WIN32" /D "_MBCS" /D "HAVE_AOLSERVER" /FR /YX /FD /GZ /c
-# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 nsd.lib php5ts_debug.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /base:"0x62000000" /version:4.0 /dll /debug /machine:I386 /out:"..\..\Debug_TS/php5aolserver.so" /pdbtype:sept /libpath:"..\..\..\php_build\nsapi30\lib\\" /libpath:"..\..\Debug_TS" /libpath:"..\..\TSRM\Debug_TS" /libpath:"..\..\Zend\Debug_TS"
-
-!ENDIF
-
-# Begin Target
-
-# Name "php5aolserver - Win32 Release_TS"
-# Name "php5aolserver - Win32 Release_TS_inline"
-# Name "php5aolserver - Win32 Debug_TS"
-# Begin Group "Source Files"
-
-# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
-# Begin Source File
-
-SOURCE=.\aolserver.c
-# End Source File
-# End Group
-# Begin Group "Header Files"
-
-# PROP Default_Filter "h;hpp;hxx;hm;inl"
-# End Group
-# Begin Group "Resource Files"
-
-# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
-# End Group
-# End Target
-# End Project
diff --git a/sapi/apache/CREDITS b/sapi/apache/CREDITS
deleted file mode 100644
index 991deb5633..0000000000
--- a/sapi/apache/CREDITS
+++ /dev/null
@@ -1,3 +0,0 @@
-Apache 1.3
-Rasmus Lerdorf, Zeev Suraski, Stig Bakken, David Sklar
-
diff --git a/sapi/apache/apMakefile.libdir b/sapi/apache/apMakefile.libdir
deleted file mode 100644
index 7b5254013a..0000000000
--- a/sapi/apache/apMakefile.libdir
+++ /dev/null
@@ -1,4 +0,0 @@
-This is a place-holder which indicates to Configure that it shouldn't
-provide the default targets when building the Makefile in this directory.
-Instead it'll just prepend all the important variable definitions, and
-copy the Makefile.tmpl onto the end.
diff --git a/sapi/apache/apMakefile.tmpl b/sapi/apache/apMakefile.tmpl
deleted file mode 100644
index 5f77d9c9c9..0000000000
--- a/sapi/apache/apMakefile.tmpl
+++ /dev/null
@@ -1,77 +0,0 @@
-##
-## Apache 1.3 Makefile template for PHP 5.0 Module
-## [src/modules/php5/Makefile.tmpl]
-##
-
-# the parametrized target
-LIB=libphp5.$(LIBEXT)
-
-# objects for building the static library
-OBJS=mod_php5.o
-OBJS_LIB=libmodphp5.a
-
-# objects for building the shared object library
-SHLIB_OBJS=mod_php5.so-o
-SHLIB_OBJS_LIB=libmodphp5.a
-
-# the general targets
-all: lib
-lib: $(LIB)
-
-# build the static library by merging the object files
-libphp5.a: $(OBJS) $(OBJS_LIB)
- cp $(OBJS_LIB) $@
- ar r $@ $(OBJS)
- $(RANLIB) $@
-
-# ugly hack to support older Apache-1.3 betas that don't set $LIBEXT
-libphp5.: $(OBJS) $(OBJS_LIB)
- cp $(OBJS_LIB) $@
- ar r $@ $(OBJS)
- $(RANLIB) $@
- cp libphp5. libphp5.a
-
-# build the shared object library by linking the object files
-libphp5.so: $(SHLIB_OBJS) $(SHLIB_OBJS_LIB)
- rm -f $@
- $(LD_SHLIB) $(LDFLAGS_SHLIB) -o $@ $(SHLIB_OBJS) $(SHLIB_OBJS_LIB) $(LIBS) $(PHP_LIBS)
-
-# 1. extension .o for shared objects cannot be used here because
-# first these files aren't still shared objects and second we
-# have to use a different name to trigger the different
-# implicit Make rule
-# 2. extension -so.o (as used elsewhere) cannot be used because
-# the suffix feature of Make really wants just .x, so we use
-# extension .so-o
-.SUFFIXES: .o .so-o
-.c.o:
- $(CC) -c $(INCLUDES) $(CFLAGS) $(PHP_CFLAGS) $(CPPFLAGS) $(SPACER) $<
-.c.so-o:
- $(CC) -c $(INCLUDES) $(CFLAGS) $(CFLAGS_SHLIB) $(PHP_CFLAGS) $(CPPFLAGS) $(SPACER) $< && mv $*.o $*.so-o
-
-# cleanup
-clean:
- -rm -f $(OBJS) $(SHLIB_OBJS) $(LIB)
-
-# We really don't expect end users to use this rule. It works only with
-# gcc, and rebuilds Makefile.tmpl. You have to re-run Configure after
-# using it.
-depend:
- cp Makefile.tmpl Makefile.tmpl.bak \
- && sed -ne '1,/^# DO NOT REMOVE/p' Makefile.tmpl > Makefile.new \
- && gcc -MM $(INCLUDES) $(CFLAGS) $(PHP_CFLAGS) $(CPPFLAGS) *.c >> Makefile.new \
- && sed -e '1,$$s: $(INCDIR)/: $$(INCDIR)/:g' Makefile.new \
- > Makefile.tmpl \
- && rm Makefile.new
-
-#Dependencies
-
-$(OBJS): Makefile
-
-# DO NOT REMOVE
-mod_php5.o: mod_php5.c $(INCDIR)/httpd.h $(INCDIR)/conf.h \
- $(INCDIR)/buff.h \
- $(INCDIR)/http_config.h \
- $(INCDIR)/http_core.h $(INCDIR)/http_main.h \
- $(INCDIR)/http_protocol.h $(INCDIR)/http_request.h \
- $(INCDIR)/http_log.h $(INCDIR)/util_script.h mod_php5.h
diff --git a/sapi/apache/config.m4 b/sapi/apache/config.m4
deleted file mode 100644
index 7becbbd519..0000000000
--- a/sapi/apache/config.m4
+++ /dev/null
@@ -1,272 +0,0 @@
-dnl
-dnl $Id$
-dnl
-
-AC_MSG_CHECKING(for Apache 1.x module support via DSO through APXS)
-AC_ARG_WITH(apxs,
-[ --with-apxs[=FILE] Build shared Apache 1.x module. FILE is the optional
- pathname to the Apache apxs tool; defaults to "apxs".],[
- if test "$withval" = "yes"; then
- APXS=apxs
- $APXS -q CFLAGS >/dev/null 2>&1
- if test "$?" != "0" && test -x /usr/sbin/apxs; then #SUSE 6.x
- APXS=/usr/sbin/apxs
- fi
- else
- PHP_EXPAND_PATH($withval, APXS)
- fi
-
- $APXS -q CFLAGS >/dev/null 2>&1
- if test "$?" != "0"; then
- AC_MSG_RESULT()
- AC_MSG_RESULT()
- AC_MSG_RESULT([Sorry, I was not able to successfully run APXS. Possible reasons:])
- AC_MSG_RESULT()
- AC_MSG_RESULT([1. Perl is not installed;])
- AC_MSG_RESULT([2. Apache was not compiled with DSO support (--enable-module=so);])
- AC_MSG_RESULT([3. 'apxs' is not in your path. Try to use --with-apxs=/path/to/apxs])
- AC_MSG_RESULT([The output of $APXS follows])
- $APXS -q CFLAGS
- AC_MSG_ERROR([Aborting])
- fi
-
- APXS_LDFLAGS="@SYBASE_LFLAGS@ @SYBASE_LIBS@ @SYBASE_CT_LFLAGS@ @SYBASE_CT_LIBS@"
- APXS_INCLUDEDIR=`$APXS -q INCLUDEDIR`
- APXS_CFLAGS=`$APXS -q CFLAGS`
- APXS_HTTPD=`$APXS -q SBINDIR`/`$APXS -q TARGET`
- APACHE_INCLUDE=-I$APXS_INCLUDEDIR
-
- # Test that we're trying to configure with apache 1.x
- PHP_AP_EXTRACT_VERSION($APXS_HTTPD)
- if test "$APACHE_VERSION" -ge 2000000; then
- AC_MSG_ERROR([You have enabled Apache 1.3 support while your server is Apache 2. Please use the appropiate switch --with-apxs2])
- fi
-
- for flag in $APXS_CFLAGS; do
- case $flag in
- -D*) APACHE_CPPFLAGS="$APACHE_CPPFLAGS $flag";;
- esac
- done
-
- case $host_alias in
- *aix*)
- APXS_LIBEXECDIR=`$APXS -q LIBEXECDIR`
- EXTRA_LDFLAGS="$EXTRA_LDFLAGS -Wl,-brtl -Wl,-bI:$APXS_LIBEXECDIR/httpd.exp"
- PHP_AIX_LDFLAGS="-Wl,-brtl"
- build_type=shared
- ;;
- *darwin*)
- MH_BUNDLE_FLAGS="-dynamic -twolevel_namespace -bundle -bundle_loader $APXS_HTTPD"
- PHP_SUBST(MH_BUNDLE_FLAGS)
- SAPI_SHARED=libs/libphp5.so
- build_type=bundle
- ;;
- *)
- build_type=shared
- ;;
- esac
-
- PHP_SELECT_SAPI(apache, $build_type, sapi_apache.c mod_php5.c php_apache.c, $APACHE_CPPFLAGS -I$APXS_INCLUDEDIR)
-
- # Test whether apxs support -S option
- $APXS -q -S CFLAGS="$APXS_CFLAGS" CFLAGS >/dev/null 2>&1
-
- if test "$?" != "0"; then
- APACHE_INSTALL="$APXS -i -a -n php5 $SAPI_SHARED" # Old apxs does not have -S option
- else
- APXS_LIBEXECDIR='$(INSTALL_ROOT)'`$APXS -q LIBEXECDIR`
- if test -z `$APXS -q SYSCONFDIR`; then
- APACHE_INSTALL="\$(mkinstalldirs) '$APXS_LIBEXECDIR' && \
- $APXS -S LIBEXECDIR='$APXS_LIBEXECDIR' \
- -i -n php5 $SAPI_SHARED"
- else
- APXS_SYSCONFDIR='$(INSTALL_ROOT)'`$APXS -q SYSCONFDIR`
- APACHE_INSTALL="\$(mkinstalldirs) '$APXS_LIBEXECDIR' && \
- \$(mkinstalldirs) '$APXS_SYSCONFDIR' && \
- $APXS -S LIBEXECDIR='$APXS_LIBEXECDIR' \
- -S SYSCONFDIR='$APXS_SYSCONFDIR' \
- -i -a -n php5 $SAPI_SHARED"
- fi
- fi
-
- if test -z "`$APXS -q LD_SHLIB`" || test "`$APXS -q LIBEXECDIR`" = "modules"; then
- PHP_APXS_BROKEN=yes
- fi
- STRONGHOLD=
- AC_DEFINE(HAVE_AP_CONFIG_H,1,[ ])
- AC_DEFINE(HAVE_AP_COMPAT_H,1,[ ])
- AC_DEFINE(HAVE_APACHE,1,[ ])
- AC_MSG_RESULT(yes)
-],[
- AC_MSG_RESULT(no)
-])
-
-if test "$PHP_SAPI" != "apache"; then
-AC_MSG_CHECKING(for Apache 1.x module support)
-AC_ARG_WITH(apache,
-[ --with-apache[=DIR] Build Apache 1.x module. DIR is the top-level Apache
- build directory, defaults to /usr/local/apache.],[
-
- APACHE_INSTALL_FILES="\$(srcdir)/sapi/apache/mod_php5.* sapi/apache/libphp5.module"
-
- if test "$withval" = "yes"; then
- # Apache's default directory
- withval=/usr/local/apache
- fi
- if test "$withval" != "no"; then
- AC_DEFINE(HAVE_APACHE,1,[ ])
- APACHE_MODULE=yes
- PHP_EXPAND_PATH($withval, withval)
- # For Apache 1.2.x
- if test -f $withval/src/httpd.h; then
- APACHE_INCLUDE=-I$withval/src
- APACHE_TARGET=$withval/src
- PHP_SELECT_SAPI(apache, static, sapi_apache.c mod_php5.c php_apache.c, $APACHE_INCLUDE)
- APACHE_INSTALL="mkdir -p $APACHE_TARGET; cp $SAPI_STATIC $APACHE_INSTALL_FILES $APACHE_TARGET"
- PHP_LIBS="-L. -lphp3"
- AC_MSG_RESULT(yes - Apache 1.2.x)
- STRONGHOLD=
- if test -f $withval/src/ap_config.h; then
- AC_DEFINE(HAVE_AP_CONFIG_H,1,[ ])
- fi
- # For Apache 2.0.x
- elif test -f $withval/include/httpd.h &&
- test -f $withval/srclib/apr/include/apr_general.h ; then
- AC_MSG_ERROR([Use --with-apache2 with Apache 2.x!])
- # For Apache 1.3.x
- elif test -f $withval/src/main/httpd.h; then
- APACHE_HAS_REGEX=1
- APACHE_INCLUDE="-I$withval/src/main -I$withval/src/os/unix -I$withval/src/ap"
- APACHE_TARGET=$withval/src/modules/php5
- if test ! -d $APACHE_TARGET; then
- mkdir $APACHE_TARGET
- fi
- PHP_SELECT_SAPI(apache, static, sapi_apache.c mod_php5.c php_apache.c, $APACHE_INCLUDE)
- APACHE_INSTALL="mkdir -p $APACHE_TARGET; cp $SAPI_STATIC $APACHE_TARGET/libmodphp5.a; cp $APACHE_INSTALL_FILES $APACHE_TARGET; cp $srcdir/sapi/apache/apMakefile.tmpl $APACHE_TARGET/Makefile.tmpl; cp $srcdir/sapi/apache/apMakefile.libdir $APACHE_TARGET/Makefile.libdir"
- PHP_LIBS="-Lmodules/php5 -L../modules/php5 -L../../modules/php5 -lmodphp5"
- AC_MSG_RESULT(yes - Apache 1.3.x)
- STRONGHOLD=
- if test -f $withval/src/include/ap_config.h; then
- AC_DEFINE(HAVE_AP_CONFIG_H,1,[ ])
- fi
- if test -f $withval/src/include/ap_compat.h; then
- AC_DEFINE(HAVE_AP_COMPAT_H,1,[ ])
- if test ! -f $withval/src/include/ap_config_auto.h; then
- AC_MSG_ERROR(Please run Apache\'s configure or src/Configure program once and try again)
- fi
- else
- if test -f $withval/src/include/compat.h; then
- AC_DEFINE(HAVE_OLD_COMPAT_H,1,[ ])
- fi
- fi
- # Also for Apache 1.3.x
- elif test -f $withval/src/include/httpd.h; then
- APACHE_HAS_REGEX=1
- APACHE_INCLUDE="-I$withval/src/include -I$withval/src/os/unix"
- APACHE_TARGET=$withval/src/modules/php5
- if test ! -d $APACHE_TARGET; then
- mkdir $APACHE_TARGET
- fi
- PHP_SELECT_SAPI(apache, static, sapi_apache.c mod_php5.c php_apache.c, $APACHE_INCLUDE)
- PHP_LIBS="-Lmodules/php5 -L../modules/php5 -L../../modules/php5 -lmodphp5"
- APACHE_INSTALL="mkdir -p $APACHE_TARGET; cp $SAPI_STATIC $APACHE_TARGET/libmodphp5.a; cp $APACHE_INSTALL_FILES $APACHE_TARGET; cp $srcdir/sapi/apache/apMakefile.tmpl $APACHE_TARGET/Makefile.tmpl; cp $srcdir/sapi/apache/apMakefile.libdir $APACHE_TARGET/Makefile.libdir"
- AC_MSG_RESULT(yes - Apache 1.3.x)
- STRONGHOLD=
- if test -f $withval/src/include/ap_config.h; then
- AC_DEFINE(HAVE_AP_CONFIG_H,1,[ ])
- fi
- if test -f $withval/src/include/ap_compat.h; then
- AC_DEFINE(HAVE_AP_COMPAT_H,1,[ ])
- if test ! -f $withval/src/include/ap_config_auto.h; then
- AC_MSG_ERROR(Please run Apache\'s configure or src/Configure program once and try again)
- fi
- else
- if test -f $withval/src/include/compat.h; then
- AC_DEFINE(HAVE_OLD_COMPAT_H,1,[ ])
- fi
- fi
- # For StrongHold 2.2
- elif test -f $withval/apache/httpd.h; then
- APACHE_INCLUDE="-I$withval/apache -I$withval/ssl/include"
- APACHE_TARGET=$withval/apache
- PHP_SELECT_SAPI(apache, static, sapi_apache.c mod_php5.c php_apache.c, $APACHE_INCLUDE)
- PHP_LIBS="-Lmodules/php5 -L../modules/php5 -L../../modules/php5 -lmodphp5"
- APACHE_INSTALL="mkdir -p $APACHE_TARGET; cp $SAPI_STATIC $APACHE_TARGET/libmodphp5.a; cp $APACHE_INSTALL_FILES $APACHE_TARGET"
- STRONGHOLD=-DSTRONGHOLD=1
- AC_MSG_RESULT(yes - StrongHold)
- if test -f $withval/apache/ap_config.h; then
- AC_DEFINE(HAVE_AP_CONFIG_H,1,[ ])
- fi
- if test -f $withval/src/ap_compat.h; then
- AC_DEFINE(HAVE_AP_COMPAT_H,1,[ ])
- if test ! -f $withval/src/include/ap_config_auto.h; then
- AC_MSG_ERROR(Please run Apache\'s configure or src/Configure program once and try again)
- fi
- else
- if test -f $withval/src/compat.h; then
- AC_DEFINE(HAVE_OLD_COMPAT_H,1,[ ])
- fi
- fi
- else
- AC_MSG_RESULT(no)
- AC_MSG_ERROR(Invalid Apache directory - unable to find httpd.h under $withval)
- fi
- else
- AC_MSG_RESULT(no)
- fi
-],[
- AC_MSG_RESULT(no)
-])
-
-fi
-
-if test "x$APXS" != "x" -a "`uname -sv`" = "AIX 4" -a "$GCC" != "yes"; then
- APXS_EXP=-bE:sapi/apache/mod_php5.exp
-fi
-
-PHP_SUBST(APXS_EXP)
-PHP_SUBST(APACHE_INCLUDE)
-PHP_SUBST(APACHE_TARGET)
-PHP_SUBST(APXS)
-PHP_SUBST(APXS_LDFLAGS)
-PHP_SUBST(APACHE_INSTALL)
-PHP_SUBST(STRONGHOLD)
-
-AC_CACHE_CHECK([for member fd in BUFF *],ac_cv_php_fd_in_buff,[
- save=$CPPFLAGS
- if test -n "$APXS_INCLUDEDIR"; then
- CPPFLAGS="$CPPFLAGS -I$APXS_INCLUDEDIR"
- else
- CPPFLAGS="$CPPFLAGS $APACHE_INCLUDE"
- fi
- AC_TRY_COMPILE([#include <httpd.h>],[conn_rec *c; int fd = c->client->fd;],[
- ac_cv_php_fd_in_buff=yes],[ac_cv_php_fd_in_buff=no],[ac_cv_php_fd_in_buff=no])
- CPPFLAGS=$save
-])
-if test "$ac_cv_php_fd_in_buff" = "yes"; then
- AC_DEFINE(PHP_APACHE_HAVE_CLIENT_FD,1,[ ])
-fi
-
-AC_MSG_CHECKING(for mod_charset compatibility option)
-AC_ARG_WITH(mod_charset,
-[ --with-mod_charset Enable transfer tables for mod_charset (Rus Apache).],
-[
- AC_MSG_RESULT(yes)
- AC_DEFINE(USE_TRANSFER_TABLES,1,[ ])
-],[
- AC_MSG_RESULT(no)
-])
-
-if test -n "$APACHE_MODULE"; then
- PHP_TARGET_RDYNAMIC
- $php_shtool mkdir -p sapi/apache
- PHP_OUTPUT(sapi/apache/libphp5.module)
-fi
-
-if test -n "$APACHE_INSTALL"; then
- INSTALL_IT=$APACHE_INSTALL
-fi
-
-dnl ## Local Variables:
-dnl ## tab-width: 4
-dnl ## End:
diff --git a/sapi/apache/config.w32 b/sapi/apache/config.w32
deleted file mode 100644
index 83ceb1a4db..0000000000
--- a/sapi/apache/config.w32
+++ /dev/null
@@ -1,24 +0,0 @@
-// vim:ft=javascript
-// $Id$
-
-ARG_ENABLE('apache', 'Build Apache 1.3.x version of PHP', 'no');
-
-ARG_WITH('apache-includes', 'Where to find Apache 1.3 headers', null);
-ARG_WITH('apache-libs', 'Where to find Apache 1.3 libraries', null);
-
-if (PHP_APACHE != "no") {
- if (CHECK_HEADER_ADD_INCLUDE("httpd.h", "CFLAGS_APACHE", php_usual_include_suspects +
- ";" + PROGRAM_FILES + "\\Apache Group\\Apache\\include" +
- ";..\\php_build\\apache\\src\\include") &&
- CHECK_LIB("ApacheCore.lib", "apache", php_usual_lib_suspects +
- ';' + PROGRAM_FILES + '\\Apache Group\\Apache\\libexec' +
- ';..\\php_build\\apache\\src\\corer')) {
- // We need to play tricks to get our readdir.h used by apache
- // headers
- SAPI('apache', 'mod_php5.c sapi_apache.c php_apache.c',
- 'php' + PHP_VERSION + 'apache.dll',
- '/D APACHEPHP5_EXPORTS /D APACHE_READDIR_H /I win32');
- } else {
- WARNING("Could not find apache libraries/headers");
- }
-}
diff --git a/sapi/apache/libphp5.module.in b/sapi/apache/libphp5.module.in
deleted file mode 100644
index 00d9c49f40..0000000000
--- a/sapi/apache/libphp5.module.in
+++ /dev/null
@@ -1,11 +0,0 @@
-Name: php5_module
-ConfigStart
- RULE_WANTHSREGEX=no
- RULE_HIDE=yes
- PHP_LIBS="@NATIVE_RPATHS@ @PHP_LDFLAGS@ @PHP_LIBS@ @EXTRA_LDFLAGS@ @EXTRA_LIBS@ $LIBS"
- PHP_CFLAGS="$CFLAGS @OPENSSL_INCDIR_OPT@ -I@php_abs_top_builddir@/main -I@php_abs_top_builddir@/Zend -I@php_abs_top_builddir@/TSRM -I@php_abs_top_srcdir@ -I@php_abs_top_srcdir@/sapi/apache -I@php_abs_top_srcdir@/main -I@php_abs_top_srcdir@/Zend -I@php_abs_top_srcdir@/TSRM"
- my_outfile="Makefile.config"
- echo "PHP_CFLAGS=$PHP_CFLAGS" >>$my_outfile
- echo "PHP_LIBS=$PHP_LIBS" >>$my_outfile
- LIBS=$PHP_LIBS
-ConfigEnd
diff --git a/sapi/apache/libpre.c b/sapi/apache/libpre.c
deleted file mode 100644
index 24ef063eab..0000000000
--- a/sapi/apache/libpre.c
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifdef NETWARE
-
-/* ------------------------------------------------------------------
- * These functions are to be called when the shared NLM starts and
- * stops. By using these functions instead of defining a main()
- * and calling ExitThread(TSR_THREAD, 0), the load time of the
- * shared NLM is faster and memory size reduced.
- *
- * You may also want to override these in your own Apache module
- * to do any cleanup other than the mechanism Apache modules provide.
- * ------------------------------------------------------------------
- */
-
-
-#ifdef __GNUC__
-#include <string.h> /* memset */
-extern char _edata, _end ; /* end of DATA (start of BSS), end of BSS */
-#endif
-
-int _lib_start()
-{
-/* printf("Inside _lib_start\n");*/
-#ifdef __GNUC__
- memset (&_edata, 0, &_end - &_edata);
-#endif
- return 0;
-}
-
-int _lib_stop()
-{
-/* printf("Inside _lib_stop\n");*/
- return 0;
-}
-
-#endif /* NETWARE */
diff --git a/sapi/apache/mod_php5.c b/sapi/apache/mod_php5.c
deleted file mode 100644
index ad2f3b3520..0000000000
--- a/sapi/apache/mod_php5.c
+++ /dev/null
@@ -1,982 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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. |
- +----------------------------------------------------------------------+
- | Authors: Rasmus Lerdorf <rasmus@php.net> |
- | (with helpful hints from Dean Gaudet <dgaudet@arctic.org> |
- | PHP 4.0 patches by Zeev Suraski <zeev@zend.com> |
- +----------------------------------------------------------------------+
- */
-/* $Id$ */
-
-#include "php_apache_http.h"
-#include "http_conf_globals.h"
-
-#ifdef NETWARE
-#define SIGPIPE SIGINT
-#endif
-
-#if defined(ZEND_MULTIBYTE) && defined(HAVE_MBSTRING)
-#include "ext/mbstring/mbstring.h"
-#endif /* defined(ZEND_MULTIBYTE) && defined(HAVE_MBSTRING) */
-
-#undef shutdown
-
-/* {{{ Prototypes
- */
-int apache_php_module_main(request_rec *r, int display_source_mode TSRMLS_DC);
-static void php_save_umask(void);
-static void php_restore_umask(void);
-static int sapi_apache_read_post(char *buffer, uint count_bytes TSRMLS_DC);
-static char *sapi_apache_read_cookies(TSRMLS_D);
-static int sapi_apache_header_handler(sapi_header_struct *sapi_header, sapi_headers_struct *sapi_headers TSRMLS_DC);
-static int sapi_apache_send_headers(sapi_headers_struct *sapi_headers TSRMLS_DC);
-static int send_php(request_rec *r, int display_source_mode, char *filename);
-static int send_parsed_php(request_rec * r);
-static int send_parsed_php_source(request_rec * r);
-static int php_xbithack_handler(request_rec * r);
-static void php_init_handler(server_rec *s, pool *p);
-/* }}} */
-
-#if MODULE_MAGIC_NUMBER >= 19970728
-static void php_child_exit_handler(server_rec *s, pool *p);
-#endif
-
-#if MODULE_MAGIC_NUMBER > 19961007
-#define CONST_PREFIX const
-#else
-#define CONST_PREFIX
-#endif
-static CONST_PREFIX char *php_apache_value_handler_ex(cmd_parms *cmd, HashTable *conf, char *arg1, char *arg2, int mode);
-static CONST_PREFIX char *php_apache_value_handler(cmd_parms *cmd, HashTable *conf, char *arg1, char *arg2);
-static CONST_PREFIX char *php_apache_admin_value_handler(cmd_parms *cmd, HashTable *conf, char *arg1, char *arg2);
-static CONST_PREFIX char *php_apache_flag_handler(cmd_parms *cmd, HashTable *conf, char *arg1, char *arg2);
-static CONST_PREFIX char *php_apache_flag_handler_ex(cmd_parms *cmd, HashTable *conf, char *arg1, char *arg2, int mode);
-static CONST_PREFIX char *php_apache_admin_flag_handler(cmd_parms *cmd, HashTable *conf, char *arg1, char *arg2);
-
-/* ### these should be defined in mod_php5.h or somewhere else */
-#define USE_PATH 1
-#define IGNORE_URL 2
-
-module MODULE_VAR_EXPORT php5_module;
-
-int saved_umask;
-static unsigned char apache_php_initialized;
-
-typedef struct _php_per_dir_entry {
- char *key;
- char *value;
- uint key_length;
- uint value_length;
- int type;
-} php_per_dir_entry;
-
-/* some systems are missing these from their header files */
-
-/* {{{ php_save_umask
- */
-static void php_save_umask(void)
-{
- saved_umask = umask(077);
- umask(saved_umask);
-}
-/* }}} */
-
-/* {{{ sapi_apache_ub_write
- */
-static int sapi_apache_ub_write(const char *str, uint str_length TSRMLS_DC)
-{
- int ret=0;
-
- if (SG(server_context)) {
- ret = rwrite(str, str_length, (request_rec *) SG(server_context));
- }
- if (ret != str_length) {
- php_handle_aborted_connection();
- }
- return ret;
-}
-/* }}} */
-
-/* {{{ sapi_apache_flush
- */
-static void sapi_apache_flush(void *server_context)
-{
- if (server_context) {
-#if MODULE_MAGIC_NUMBER > 19970110
- rflush((request_rec *) server_context);
-#else
- bflush((request_rec *) server_context->connection->client);
-#endif
- }
-}
-/* }}} */
-
-/* {{{ sapi_apache_read_post
- */
-static int sapi_apache_read_post(char *buffer, uint count_bytes TSRMLS_DC)
-{
- uint total_read_bytes=0, read_bytes;
- request_rec *r = (request_rec *) SG(server_context);
- void (*handler)(int);
-
- /*
- * This handles the situation where the browser sends a Expect: 100-continue header
- * and needs to recieve confirmation from the server on whether or not it can send
- * the rest of the request. RFC 2616
- *
- */
- if (!SG(read_post_bytes) && !ap_should_client_block(r)) {
- return total_read_bytes;
- }
-
- handler = signal(SIGPIPE, SIG_IGN);
- while (total_read_bytes<count_bytes) {
- hard_timeout("Read POST information", r); /* start timeout timer */
- read_bytes = get_client_block(r, buffer+total_read_bytes, count_bytes-total_read_bytes);
- reset_timeout(r);
- if (read_bytes<=0) {
- break;
- }
- total_read_bytes += read_bytes;
- }
- signal(SIGPIPE, handler);
- return total_read_bytes;
-}
-/* }}} */
-
-/* {{{ sapi_apache_read_cookies
- */
-static char *sapi_apache_read_cookies(TSRMLS_D)
-{
- return (char *) table_get(((request_rec *) SG(server_context))->subprocess_env, "HTTP_COOKIE");
-}
-/* }}} */
-
-/* {{{ sapi_apache_header_handler
- */
-static int sapi_apache_header_handler(sapi_header_struct *sapi_header, sapi_headers_struct *sapi_headers TSRMLS_DC)
-{
- char *header_name, *header_content, *p;
- request_rec *r = (request_rec *) SG(server_context);
- if(!r) {
- efree(sapi_header->header);
- return 0;
- }
-
- header_name = sapi_header->header;
-
- header_content = p = strchr(header_name, ':');
- if (!p) {
- efree(sapi_header->header);
- return 0;
- }
-
- *p = 0;
- do {
- header_content++;
- } while (*header_content==' ');
-
- if (!strcasecmp(header_name, "Content-Type")) {
- r->content_type = pstrdup(r->pool, header_content);
- } else if (!strcasecmp(header_name, "Set-Cookie")) {
- table_add(r->headers_out, header_name, header_content);
- } else if (sapi_header->replace) {
- table_set(r->headers_out, header_name, header_content);
- } else {
- table_add(r->headers_out, header_name, header_content);
- }
-
- *p = ':'; /* a well behaved header handler shouldn't change its original arguments */
-
- efree(sapi_header->header);
-
- return 0; /* don't use the default SAPI mechanism, Apache duplicates this functionality */
-}
-/* }}} */
-
-/* {{{ sapi_apache_send_headers
- */
-static int sapi_apache_send_headers(sapi_headers_struct *sapi_headers TSRMLS_DC)
-{
- if(SG(server_context) == NULL) { /* server_context is not here anymore */
- return SAPI_HEADER_SEND_FAILED;
- }
-
- ((request_rec *) SG(server_context))->status = SG(sapi_headers).http_response_code;
- send_http_header((request_rec *) SG(server_context));
- return SAPI_HEADER_SENT_SUCCESSFULLY;
-}
-/* }}} */
-
-/* {{{ sapi_apache_register_server_variables
- */
-static void sapi_apache_register_server_variables(zval *track_vars_array TSRMLS_DC)
-{
- register int i;
- array_header *arr = table_elts(((request_rec *) SG(server_context))->subprocess_env);
- table_entry *elts = (table_entry *) arr->elts;
- zval **path_translated;
- HashTable *symbol_table;
-
- for (i = 0; i < arr->nelts; i++) {
- char *val;
-
- if (elts[i].val) {
- val = elts[i].val;
- } else {
- val = "";
- }
- php_register_variable(elts[i].key, val, track_vars_array TSRMLS_CC);
- }
-
- /* If PATH_TRANSLATED doesn't exist, copy it from SCRIPT_FILENAME */
- if (track_vars_array) {
- symbol_table = track_vars_array->value.ht;
- } else if (PG(register_globals)) {
- /* should never happen nowadays */
- symbol_table = EG(active_symbol_table);
- } else {
- symbol_table = NULL;
- }
- if (symbol_table
- && !zend_hash_exists(symbol_table, "PATH_TRANSLATED", sizeof("PATH_TRANSLATED"))
- && zend_hash_find(symbol_table, "SCRIPT_FILENAME", sizeof("SCRIPT_FILENAME"), (void **) &path_translated)==SUCCESS) {
- php_register_variable("PATH_TRANSLATED", Z_STRVAL_PP(path_translated), track_vars_array TSRMLS_CC);
- }
-
- php_register_variable("PHP_SELF", ((request_rec *) SG(server_context))->uri, track_vars_array TSRMLS_CC);
-}
-/* }}} */
-
-/* {{{ php_apache_startup
- */
-static int php_apache_startup(sapi_module_struct *sapi_module)
-{
- if (php_module_startup(sapi_module, &apache_module_entry, 1) == FAILURE) {
- return FAILURE;
- } else {
- return SUCCESS;
- }
-}
-/* }}} */
-
-/* {{{ php_apache_log_message
- */
-static void php_apache_log_message(char *message)
-{
- TSRMLS_FETCH();
-
- if (SG(server_context)) {
-#if MODULE_MAGIC_NUMBER >= 19970831
- aplog_error(NULL, 0, APLOG_ERR | APLOG_NOERRNO, ((request_rec *) SG(server_context))->server, "%s", message);
-#else
- log_error(message, ((request_rec *) SG(server_context))->server);
-#endif
- } else {
- fprintf(stderr, "%s", message);
- fprintf(stderr, "\n");
- }
-}
-/* }}} */
-
-/* {{{ php_apache_request_shutdown
- */
-static void php_apache_request_shutdown(void *dummy)
-{
- TSRMLS_FETCH();
-
- php_output_set_status(0 TSRMLS_CC);
- if (AP(in_request)) {
- AP(in_request) = 0;
- php_request_shutdown(dummy);
- }
- SG(server_context) = NULL;
- /*
- * The server context (request) is NOT invalid by the time
- * run_cleanups() is called
- */
-}
-/* }}} */
-
-/* {{{ php_apache_sapi_activate
- */
-static int php_apache_sapi_activate(TSRMLS_D)
-{
- request_rec *r = (request_rec *) SG(server_context);
-
- /*
- * For the Apache module version, this bit of code registers a cleanup
- * function that gets triggered when our request pool is destroyed.
- * We need this because at any point in our code we can be interrupted
- * and that may happen before we have had time to free our memory.
- * The php_request_shutdown function needs to free all outstanding allocated
- * memory.
- */
- block_alarms();
- register_cleanup(r->pool, NULL, php_apache_request_shutdown, php_request_shutdown_for_exec);
- AP(in_request)=1;
- unblock_alarms();
-
- /* Override the default headers_only value - sometimes "GET" requests should actually only
- * send headers.
- */
- SG(request_info).headers_only = r->header_only;
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ php_apache_get_stat
- */
-static struct stat *php_apache_get_stat(TSRMLS_D)
-{
- return &((request_rec *) SG(server_context))->finfo;
-}
-/* }}} */
-
-/* {{{ php_apache_getenv
- */
-static char *php_apache_getenv(char *name, size_t name_len TSRMLS_DC)
-{
- return (char *) table_get(((request_rec *) SG(server_context))->subprocess_env, name);
-}
-/* }}} */
-
-/* {{{ sapi_apache_get_fd
- */
-static int sapi_apache_get_fd(int *nfd TSRMLS_DC)
-{
-#if PHP_APACHE_HAVE_CLIENT_FD
- request_rec *r = SG(server_context);
- int fd;
-
- fd = r->connection->client->fd;
-
- if (fd >= 0) {
- if (nfd) *nfd = fd;
- return SUCCESS;
- }
-#endif
- return FAILURE;
-}
-/* }}} */
-
-/* {{{ sapi_apache_force_http_10
- */
-static int sapi_apache_force_http_10(TSRMLS_D)
-{
- request_rec *r = SG(server_context);
-
- r->proto_num = HTTP_VERSION(1,0);
-
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ sapi_apache_get_target_uid
- */
-static int sapi_apache_get_target_uid(uid_t *obj TSRMLS_DC)
-{
- *obj = ap_user_id;
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ sapi_apache_get_target_gid
- */
-static int sapi_apache_get_target_gid(gid_t *obj TSRMLS_DC)
-{
- *obj = ap_group_id;
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ php_apache_get_request_time
- */
-static time_t php_apache_get_request_time(TSRMLS_D)
-{
- return ((request_rec *)SG(server_context))->request_time;
-}
-/* }}} */
-
-/* {{{ sapi_module_struct apache_sapi_module
- */
-static sapi_module_struct apache_sapi_module = {
- "apache", /* name */
- "Apache", /* pretty name */
-
- php_apache_startup, /* startup */
- php_module_shutdown_wrapper, /* shutdown */
-
- php_apache_sapi_activate, /* activate */
- NULL, /* deactivate */
-
- sapi_apache_ub_write, /* unbuffered write */
- sapi_apache_flush, /* flush */
- php_apache_get_stat, /* get uid */
- php_apache_getenv, /* getenv */
-
- php_error, /* error handler */
-
- sapi_apache_header_handler, /* header handler */
- sapi_apache_send_headers, /* send headers handler */
- NULL, /* send header handler */
-
- sapi_apache_read_post, /* read POST data */
- sapi_apache_read_cookies, /* read Cookies */
-
- sapi_apache_register_server_variables, /* register server variables */
- php_apache_log_message, /* Log message */
- php_apache_get_request_time, /* Get request time */
-
- NULL, /* php.ini path override */
-
-#ifdef PHP_WIN32
- NULL,
- NULL,
-#else
- block_alarms, /* Block interruptions */
- unblock_alarms, /* Unblock interruptions */
-#endif
-
- NULL, /* default post reader */
- NULL, /* treat data */
- NULL, /* exe location */
- 0, /* ini ignore */
- sapi_apache_get_fd,
- sapi_apache_force_http_10,
- sapi_apache_get_target_uid,
- sapi_apache_get_target_gid
-};
-/* }}} */
-
-/* {{{ php_restore_umask
- */
-static void php_restore_umask(void)
-{
- umask(saved_umask);
-}
-/* }}} */
-
-/* {{{ init_request_info
- */
-static void init_request_info(TSRMLS_D)
-{
- request_rec *r = ((request_rec *) SG(server_context));
- char *content_length = (char *) table_get(r->subprocess_env, "CONTENT_LENGTH");
- const char *authorization=NULL;
- char *tmp, *tmp_user;
-
- SG(request_info).query_string = r->args;
- SG(request_info).path_translated = r->filename;
- SG(request_info).request_uri = r->uri;
- SG(request_info).request_method = (char *)r->method;
- SG(request_info).content_type = (char *) table_get(r->subprocess_env, "CONTENT_TYPE");
- SG(request_info).content_length = (content_length ? atoi(content_length) : 0);
- SG(sapi_headers).http_response_code = r->status;
-
- if (r->headers_in) {
- authorization = table_get(r->headers_in, "Authorization");
- }
- if (authorization
- && (!PG(safe_mode) || (PG(safe_mode) && !auth_type(r)))
- && !strcasecmp(getword(r->pool, &authorization, ' '), "Basic")) {
- tmp = uudecode(r->pool, authorization);
- SG(request_info).auth_user = NULL;
- tmp_user = getword_nulls_nc(r->pool, &tmp, ':');
- if (tmp_user) {
- r->connection->user = pstrdup(r->connection->pool, tmp_user);
- r->connection->ap_auth_type = "Basic";
- SG(request_info).auth_user = estrdup(tmp_user);
- }
- SG(request_info).auth_password = NULL;
- if (tmp) {
- SG(request_info).auth_password = estrdup(tmp);
- }
- } else {
- SG(request_info).auth_user = NULL;
- SG(request_info).auth_password = NULL;
- }
-}
-/* }}} */
-
-/* {{{ php_apache_alter_ini_entries
- */
-static int php_apache_alter_ini_entries(php_per_dir_entry *per_dir_entry TSRMLS_DC)
-{
- zend_alter_ini_entry(per_dir_entry->key, per_dir_entry->key_length+1, per_dir_entry->value, per_dir_entry->value_length, per_dir_entry->type, PHP_INI_STAGE_ACTIVATE);
- return 0;
-}
-/* }}} */
-
-/* {{{ php_apache_get_default_mimetype
- */
-static char *php_apache_get_default_mimetype(request_rec *r TSRMLS_DC)
-{
-
- char *mimetype;
- if (SG(default_mimetype) || SG(default_charset)) {
- /* Assume output will be of the default MIME type. Individual
- scripts may change this later. */
- char *tmpmimetype;
- tmpmimetype = sapi_get_default_content_type(TSRMLS_C);
- mimetype = pstrdup(r->pool, tmpmimetype);
- efree(tmpmimetype);
- } else {
- mimetype = SAPI_DEFAULT_MIMETYPE "; charset=" SAPI_DEFAULT_CHARSET;
- }
- return mimetype;
-}
-/* }}} */
-
-/* {{{ send_php
- */
-static int send_php(request_rec *r, int display_source_mode, char *filename)
-{
- int retval;
- HashTable *per_dir_conf;
- TSRMLS_FETCH();
-
- if (AP(in_request)) {
- zend_file_handle fh;
-
- fh.filename = r->filename;
- fh.opened_path = NULL;
- fh.free_filename = 0;
- fh.type = ZEND_HANDLE_FILENAME;
-
-#if defined(ZEND_MULTIBYTE) && defined(HAVE_MBSTRING)
- php_mb_set_zend_encoding(TSRMLS_C);
-#endif /* defined(ZEND_MULTIBYTE) && defined(HAVE_MBSTRING) */
-
- zend_execute_scripts(ZEND_INCLUDE TSRMLS_CC, NULL, 1, &fh);
- return OK;
- }
-
- zend_first_try {
-
- /* Make sure file exists */
- if (filename == NULL && r->finfo.st_mode == 0) {
- return DECLINED;
- }
-
- per_dir_conf = (HashTable *) get_module_config(r->per_dir_config, &php5_module);
- if (per_dir_conf) {
- zend_hash_apply((HashTable *) per_dir_conf, (apply_func_t) php_apache_alter_ini_entries TSRMLS_CC);
- }
-
- /* If PHP parser engine has been turned off with an "engine off"
- * directive, then decline to handle this request
- */
- if (!AP(engine)) {
- r->content_type = php_apache_get_default_mimetype(r TSRMLS_CC);
- r->allowed |= (1 << METHODS) - 1;
- zend_try {
- zend_ini_deactivate(TSRMLS_C);
- } zend_end_try();
- return DECLINED;
- }
- if (filename == NULL) {
- filename = r->filename;
- }
-
- /* Apache 1.2 has a more complex mechanism for reading POST data */
-#if MODULE_MAGIC_NUMBER > 19961007
- if ((retval = setup_client_block(r, REQUEST_CHUNKED_ERROR))) {
- zend_try {
- zend_ini_deactivate(TSRMLS_C);
- } zend_end_try();
- return retval;
- }
-#endif
-
- if (AP(last_modified)) {
-#if MODULE_MAGIC_NUMBER < 19970912
- if ((retval = set_last_modified(r, r->finfo.st_mtime))) {
- zend_try {
- zend_ini_deactivate(TSRMLS_C);
- } zend_end_try();
- return retval;
- }
-#else
- update_mtime (r, r->finfo.st_mtime);
- set_last_modified(r);
- set_etag(r);
-#endif
- }
- /* Assume output will be of the default MIME type. Individual
- scripts may change this later in the request. */
- r->content_type = php_apache_get_default_mimetype(r TSRMLS_CC);
-
- /* Init timeout */
- hard_timeout("send", r);
-
- SG(server_context) = r;
-
- php_save_umask();
- add_common_vars(r);
- add_cgi_vars(r);
-
- init_request_info(TSRMLS_C);
- apache_php_module_main(r, display_source_mode TSRMLS_CC);
-
- /* Done, restore umask, turn off timeout, close file and return */
- php_restore_umask();
- kill_timeout(r);
- } zend_end_try();
-
- return OK;
-}
-/* }}} */
-
-/* {{{ send_parsed_php
- */
-static int send_parsed_php(request_rec * r)
-{
- int result = send_php(r, 0, NULL);
-
-#if MEMORY_LIMIT
- {
- char *mem_usage;
- TSRMLS_FETCH();
-
- mem_usage = ap_psprintf(r->pool, "%u", AG(allocated_memory_peak));
- AG(allocated_memory_peak) = 0;
- ap_table_setn(r->notes, "mod_php_memory_usage", mem_usage);
- }
-#endif
-
- return result;
-}
-/* }}} */
-
-/* {{{ send_parsed_php_source
- */
-static int send_parsed_php_source(request_rec * r)
-{
- return send_php(r, 1, NULL);
-}
-/* }}} */
-
-/* {{{ destroy_per_dir_entry
- */
-static void destroy_per_dir_entry(php_per_dir_entry *per_dir_entry)
-{
- free(per_dir_entry->key);
- free(per_dir_entry->value);
-}
-/* }}} */
-
-/* {{{ copy_per_dir_entry
- */
-static void copy_per_dir_entry(php_per_dir_entry *per_dir_entry)
-{
- php_per_dir_entry tmp = *per_dir_entry;
-
- per_dir_entry->key = (char *) malloc(tmp.key_length+1);
- memcpy(per_dir_entry->key, tmp.key, tmp.key_length);
- per_dir_entry->key[per_dir_entry->key_length] = 0;
-
- per_dir_entry->value = (char *) malloc(tmp.value_length+1);
- memcpy(per_dir_entry->value, tmp.value, tmp.value_length);
- per_dir_entry->value[per_dir_entry->value_length] = 0;
-}
-/* }}} */
-
-/* {{{ should_overwrite_per_dir_entry
- */
-static zend_bool should_overwrite_per_dir_entry(HashTable *target_ht, php_per_dir_entry *orig_per_dir_entry, zend_hash_key *hash_key, void *pData)
-{
- php_per_dir_entry *new_per_dir_entry;
-
- if (zend_hash_find(target_ht, hash_key->arKey, hash_key->nKeyLength, (void **) &new_per_dir_entry)==FAILURE) {
- return 1; /* does not exist in dest, copy from source */
- }
-
- if (new_per_dir_entry->type==PHP_INI_SYSTEM
- && orig_per_dir_entry->type!=PHP_INI_SYSTEM) {
- return 1;
- } else {
- return 0;
- }
-}
-/* }}} */
-
-/* {{{ php_destroy_per_dir_info
- */
-static void php_destroy_per_dir_info(HashTable *per_dir_info)
-{
- zend_hash_destroy(per_dir_info);
- free(per_dir_info);
-}
-/* }}} */
-
-/* {{{ php_create_dir
- */
-static void *php_create_dir(pool *p, char *dummy)
-{
- HashTable *per_dir_info;
-
- per_dir_info = (HashTable *) malloc(sizeof(HashTable));
- zend_hash_init_ex(per_dir_info, 5, NULL, (void (*)(void *)) destroy_per_dir_entry, 1, 0);
- register_cleanup(p, (void *) per_dir_info, (void (*)(void *)) php_destroy_per_dir_info, (void (*)(void *)) zend_hash_destroy);
-
- return per_dir_info;
-}
-/* }}} */
-
-/* {{{ php_merge_dir
- */
-static void *php_merge_dir(pool *p, void *basev, void *addv)
-{
- /* This function *must* return addv, and not modify basev */
- zend_hash_merge_ex((HashTable *) addv, (HashTable *) basev, (copy_ctor_func_t) copy_per_dir_entry, sizeof(php_per_dir_entry), (merge_checker_func_t) should_overwrite_per_dir_entry, NULL);
- return addv;
-}
-/* }}} */
-
-/* {{{ php_apache_value_handler_ex
- */
-static CONST_PREFIX char *php_apache_value_handler_ex(cmd_parms *cmd, HashTable *conf, char *arg1, char *arg2, int mode)
-{
- php_per_dir_entry per_dir_entry;
-
- if (!apache_php_initialized) {
- apache_php_initialized = 1;
-#ifdef ZTS
- tsrm_startup(1, 1, 0, NULL);
-#endif
- sapi_startup(&apache_sapi_module);
- php_apache_startup(&apache_sapi_module);
- }
- per_dir_entry.type = mode;
-
- if (strcasecmp(arg2, "none") == 0) {
- arg2 = "";
- }
-
- per_dir_entry.key_length = strlen(arg1);
- per_dir_entry.value_length = strlen(arg2);
-
- per_dir_entry.key = (char *) malloc(per_dir_entry.key_length+1);
- memcpy(per_dir_entry.key, arg1, per_dir_entry.key_length);
- per_dir_entry.key[per_dir_entry.key_length] = 0;
-
- per_dir_entry.value = (char *) malloc(per_dir_entry.value_length+1);
- memcpy(per_dir_entry.value, arg2, per_dir_entry.value_length);
- per_dir_entry.value[per_dir_entry.value_length] = 0;
-
- zend_hash_update(conf, per_dir_entry.key, per_dir_entry.key_length, &per_dir_entry, sizeof(php_per_dir_entry), NULL);
- return NULL;
-}
-/* }}} */
-
-/* {{{ php_apache_value_handler
- */
-static CONST_PREFIX char *php_apache_value_handler(cmd_parms *cmd, HashTable *conf, char *arg1, char *arg2)
-{
- return php_apache_value_handler_ex(cmd, conf, arg1, arg2, PHP_INI_PERDIR);
-}
-/* }}} */
-
-/* {{{ php_apache_admin_value_handler
- */
-static CONST_PREFIX char *php_apache_admin_value_handler(cmd_parms *cmd, HashTable *conf, char *arg1, char *arg2)
-{
- return php_apache_value_handler_ex(cmd, conf, arg1, arg2, PHP_INI_SYSTEM);
-}
-/* }}} */
-
-/* {{{ php_apache_flag_handler_ex
- */
-static CONST_PREFIX char *php_apache_flag_handler_ex(cmd_parms *cmd, HashTable *conf, char *arg1, char *arg2, int mode)
-{
- char bool_val[2];
-
- if (!strcasecmp(arg2, "On") || (arg2[0] == '1' && arg2[1] == '\0')) {
- bool_val[0] = '1';
- } else {
- bool_val[0] = '0';
- }
- bool_val[1] = 0;
-
- return php_apache_value_handler_ex(cmd, conf, arg1, bool_val, mode);
-}
-/* }}} */
-
-/* {{{ php_apache_flag_handler
- */
-static CONST_PREFIX char *php_apache_flag_handler(cmd_parms *cmd, HashTable *conf, char *arg1, char *arg2)
-{
- return php_apache_flag_handler_ex(cmd, conf, arg1, arg2, PHP_INI_PERDIR);
-}
-/* }}} */
-
-/* {{{ php_apache_admin_flag_handler
- */
-static CONST_PREFIX char *php_apache_admin_flag_handler(cmd_parms *cmd, HashTable *conf, char *arg1, char *arg2)
-{
- return php_apache_flag_handler_ex(cmd, conf, arg1, arg2, PHP_INI_SYSTEM);
-}
-/* }}} */
-
-/* {{{ int php_xbithack_handler(request_rec * r)
- */
-static int php_xbithack_handler(request_rec * r)
-{
- HashTable *per_dir_conf;
- TSRMLS_FETCH();
-
- if (!(r->finfo.st_mode & S_IXUSR)) {
- r->allowed |= (1 << METHODS) - 1;
- return DECLINED;
- }
- per_dir_conf = (HashTable *) get_module_config(r->per_dir_config, &php5_module);
- if (per_dir_conf) {
- zend_hash_apply((HashTable *) per_dir_conf, (apply_func_t) php_apache_alter_ini_entries TSRMLS_CC);
- }
- if(!AP(xbithack)) {
- r->allowed |= (1 << METHODS) - 1;
- zend_try {
- zend_ini_deactivate(TSRMLS_C);
- } zend_end_try();
- return DECLINED;
- }
- return send_parsed_php(r);
-}
-/* }}} */
-
-/* {{{ apache_php_module_shutdown_wrapper
- */
-static void apache_php_module_shutdown_wrapper(void)
-{
- apache_php_initialized = 0;
- apache_sapi_module.shutdown(&apache_sapi_module);
-
-#if MODULE_MAGIC_NUMBER >= 19970728
- /* This function is only called on server exit if the apache API
- * child_exit handler exists, so shutdown globally
- */
- sapi_shutdown();
-#endif
-
-#ifdef ZTS
- tsrm_shutdown();
-#endif
-}
-/* }}} */
-
-#if MODULE_MAGIC_NUMBER >= 19970728
-/* {{{ php_child_exit_handler
- */
-static void php_child_exit_handler(server_rec *s, pool *p)
-{
-/* apache_php_initialized = 0; */
- apache_sapi_module.shutdown(&apache_sapi_module);
-
-#ifdef ZTS
- tsrm_shutdown();
-#endif
-}
-/* }}} */
-#endif
-
-/* {{{ void php_init_handler(server_rec *s, pool *p)
- */
-static void php_init_handler(server_rec *s, pool *p)
-{
- register_cleanup(p, NULL, (void (*)(void *))apache_php_module_shutdown_wrapper, (void (*)(void *))php_module_shutdown_for_exec);
- if (!apache_php_initialized) {
- apache_php_initialized = 1;
-#ifdef ZTS
- tsrm_startup(1, 1, 0, NULL);
-#endif
- sapi_startup(&apache_sapi_module);
- php_apache_startup(&apache_sapi_module);
- }
-#if MODULE_MAGIC_NUMBER >= 19980527
- {
- TSRMLS_FETCH();
- if (PG(expose_php)) {
- ap_add_version_component("PHP/" PHP_VERSION);
- }
- }
-#endif
-}
-/* }}} */
-
-/* {{{ handler_rec php_handlers[]
- */
-handler_rec php_handlers[] =
-{
- {"application/x-httpd-php", send_parsed_php},
- {"application/x-httpd-php-source", send_parsed_php_source},
- {"text/html", php_xbithack_handler},
- {NULL}
-};
-/* }}} */
-
-/* {{{ command_rec php_commands[]
- */
-command_rec php_commands[] =
-{
- {"php_value", php_apache_value_handler, NULL, OR_OPTIONS, TAKE2, "PHP Value Modifier"},
- {"php_flag", php_apache_flag_handler, NULL, OR_OPTIONS, TAKE2, "PHP Flag Modifier"},
- {"php_admin_value", php_apache_admin_value_handler, NULL, ACCESS_CONF|RSRC_CONF, TAKE2, "PHP Value Modifier (Admin)"},
- {"php_admin_flag", php_apache_admin_flag_handler, NULL, ACCESS_CONF|RSRC_CONF, TAKE2, "PHP Flag Modifier (Admin)"},
- {NULL}
-};
-/* }}} */
-
-/* {{{ odule MODULE_VAR_EXPORT php5_module
- */
-module MODULE_VAR_EXPORT php5_module =
-{
- STANDARD_MODULE_STUFF,
- php_init_handler, /* initializer */
- php_create_dir, /* per-directory config creator */
- php_merge_dir, /* dir merger */
- NULL, /* per-server config creator */
- NULL, /* merge server config */
- php_commands, /* command table */
- php_handlers, /* handlers */
- NULL, /* filename translation */
- NULL, /* check_user_id */
- NULL, /* check auth */
- NULL, /* check access */
- NULL, /* type_checker */
- NULL, /* fixups */
- NULL /* logger */
-#if MODULE_MAGIC_NUMBER >= 19970103
- , NULL /* header parser */
-#endif
-#if MODULE_MAGIC_NUMBER >= 19970719
- , NULL /* child_init */
-#endif
-#if MODULE_MAGIC_NUMBER >= 19970728
- , php_child_exit_handler /* child_exit */
-#endif
-#if MODULE_MAGIC_NUMBER >= 19970902
- , NULL /* post read-request */
-#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/sapi/apache/mod_php5.exp b/sapi/apache/mod_php5.exp
deleted file mode 100644
index 9ad0f0a0ad..0000000000
--- a/sapi/apache/mod_php5.exp
+++ /dev/null
@@ -1 +0,0 @@
-php5_module
diff --git a/sapi/apache/mod_php5.h b/sapi/apache/mod_php5.h
deleted file mode 100644
index 703e70ec63..0000000000
--- a/sapi/apache/mod_php5.h
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Rasmus Lerdorf <rasmus@php.net> |
- +----------------------------------------------------------------------+
- */
-/* $Id$ */
-
-#ifndef MOD_PHP5_H
-#define MOD_PHP5_H
-
-#if !defined(WIN32) && !defined(WINNT)
-#ifndef MODULE_VAR_EXPORT
-#define MODULE_VAR_EXPORT
-#endif
-#endif
-
-typedef struct {
- long engine;
- long last_modified;
- long xbithack;
- long terminate_child;
- zend_bool in_request;
-} php_apache_info_struct;
-
-extern zend_module_entry apache_module_entry;
-
-#ifdef ZTS
-extern int php_apache_info_id;
-#define AP(v) TSRMG(php_apache_info_id, php_apache_info_struct *, v)
-#else
-extern php_apache_info_struct php_apache_info;
-#define AP(v) (php_apache_info.v)
-#endif
-
-#endif /* MOD_PHP5_H */
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- */
diff --git a/sapi/apache/php.sym b/sapi/apache/php.sym
deleted file mode 100644
index 9ad0f0a0ad..0000000000
--- a/sapi/apache/php.sym
+++ /dev/null
@@ -1 +0,0 @@
-php5_module
diff --git a/sapi/apache/php5apache.dsp b/sapi/apache/php5apache.dsp
deleted file mode 100644
index fbdb7612b8..0000000000
--- a/sapi/apache/php5apache.dsp
+++ /dev/null
@@ -1,151 +0,0 @@
-# Microsoft Developer Studio Project File - Name="php5apache" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=php5apache - Win32 Release_TS
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "php5apache.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "php5apache.mak" CFG="php5apache - Win32 Release_TS"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "php5apache - Win32 Release_TS" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "php5apache - Win32 Debug_TS" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "php5apache - Win32 Release_TS_inline" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "php5apache - Win32 Release_TS"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release_TS"
-# PROP BASE Intermediate_Dir "Release_TS"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "..\..\Release_TS"
-# PROP Intermediate_Dir "Release_TS"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "APACHEPHP5_EXPORTS" /YX /FD /c
-# ADD CPP /nologo /MD /W3 /GX /O2 /I "...\..\include" /I "..\..\win32" /I "..\..\Zend" /I "..\.." /I "..\..\..\bindlib_w32" /I "..\..\..\php_build\includes" /I "..\..\main" /I "..\..\TSRM" /I "..\..\regex" /I "C:\Program Files\Apache Group\Apache\include" /D ZEND_DEBUG=0 /D "NDEBUG" /D "ZTS" /D "ZEND_WIN32" /D "PHP_WIN32" /D "_WINDOWS" /D "_USRDLL" /D "APACHEPHP5_EXPORTS" /D "WIN32" /D "_MBCS" /D "APACHE_READDIR_H" /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386
-# ADD LINK32 php5ts.lib ApacheCore.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /base:"0x60000000" /version:4.0 /dll /machine:I386 /libpath:"..\..\..\php_build\release" /libpath:"..\..\Release_TS" /libpath:"..\..\TSRM\Release_TS" /libpath:"..\..\Zend\Release_TS" /libpath:"C:\Program Files\Apache Group\Apache\libexec"
-
-!ELSEIF "$(CFG)" == "php5apache - Win32 Debug_TS"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Debug_TS"
-# PROP BASE Intermediate_Dir "Debug_TS"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "..\..\Debug_TS"
-# PROP Intermediate_Dir "Debug_TS"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "APACHEPHP5_EXPORTS" /YX /FD /c
-# ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "...\..\include" /I "..\..\win32" /I "..\..\Zend" /I "..\.." /I "..\..\..\bindlib_w32" /I "..\..\..\php_build\includes" /I "..\..\main" /I "..\..\TSRM" /I "..\..\regex" /I "C:\Program Files\Apache Group\Apache\include" /D "_DEBUG" /D ZEND_DEBUG=1 /D "ZTS" /D "ZEND_WIN32" /D "PHP_WIN32" /D "_WINDOWS" /D "_USRDLL" /D "APACHEPHP5_EXPORTS" /D "WIN32" /D "_MBCS" /D "APACHE_READDIR_H" /FR /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386
-# ADD LINK32 php5ts_debug.lib ApacheCore.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /base:"0x60000000" /version:4.0 /dll /incremental:yes /debug /machine:I386 /pdbtype:sept /libpath:"..\..\..\php_build\release" /libpath:"..\..\Debug_TS" /libpath:"..\..\TSRM\Debug_TS" /libpath:"..\..\Zend\Debug_TS" /libpath:"C:\Program Files\Apache Group\Apache\libexec"
-
-!ELSEIF "$(CFG)" == "php5apache - Win32 Release_TS_inline"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release_TS_inline"
-# PROP BASE Intermediate_Dir "Release_TS_inline"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "..\..\Release_TS_inline"
-# PROP Intermediate_Dir "Release_TS_inline"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "APACHEPHP5_EXPORTS" /YX /FD /c
-# ADD CPP /nologo /MD /W3 /GX /O2 /I "...\..\include" /I "..\..\win32" /I "..\..\Zend" /I "..\.." /I "..\..\..\bindlib_w32" /I "..\..\..\php_build\includes" /I "..\..\main" /I "..\..\TSRM" /I "..\..\regex" /I "C:\Program Files\Apache Group\Apache\include" /D ZEND_DEBUG=0 /D "ZEND_WIN32_FORCE_INLINE" /D "NDEBUG" /D "ZTS" /D "ZEND_WIN32" /D "PHP_WIN32" /D "_WINDOWS" /D "_USRDLL" /D "APACHEPHP5_EXPORTS" /D "WIN32" /D "_MBCS" /D "APACHE_READDIR_H" /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386
-# ADD LINK32 php5ts.lib ApacheCore.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /version:4.0 /dll /machine:I386 /libpath:"..\..\..\php_build\release" /libpath:"..\..\Release_TS_inline" /libpath:"..\..\TSRM\Release_TS_inline" /libpath:"..\..\Zend\Release_TS_inline" /libpath:"C:\Program Files\Apache Group\Apache\libexec"
-
-!ENDIF
-
-# Begin Target
-
-# Name "php5apache - Win32 Release_TS"
-# Name "php5apache - Win32 Debug_TS"
-# Name "php5apache - Win32 Release_TS_inline"
-# Begin Group "Source Files"
-
-# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
-# Begin Source File
-
-SOURCE=.\mod_php5.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\php_apache.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\sapi_apache.c
-# End Source File
-# End Group
-# Begin Group "Header Files"
-
-# PROP Default_Filter "h;hpp;hxx;hm;inl"
-# Begin Source File
-
-SOURCE=.\mod_php5.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\php_apache_http.h
-# End Source File
-# End Group
-# Begin Group "Resource Files"
-
-# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
-# End Group
-# End Target
-# End Project
diff --git a/sapi/apache/php_apache.c b/sapi/apache/php_apache.c
deleted file mode 100644
index a52e95d19b..0000000000
--- a/sapi/apache/php_apache.c
+++ /dev/null
@@ -1,546 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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. |
- +----------------------------------------------------------------------+
- | Authors: Rasmus Lerdorf <rasmus@lerdorf.on.ca> |
- | Stig Sæther Bakken <ssb@php.net> |
- | David Sklar <sklar@student.net> |
- +----------------------------------------------------------------------+
- */
-/* $Id$ */
-
-#include "php_apache_http.h"
-
-#if defined(PHP_WIN32) || defined(NETWARE)
-#include "zend.h"
-#include "ap_compat.h"
-#endif
-
-#ifdef ZTS
-int php_apache_info_id;
-#else
-php_apache_info_struct php_apache_info;
-#endif
-
-#define SECTION(name) PUTS("<h2>" name "</h2>\n")
-
-extern module *top_module;
-extern module **ap_loaded_modules;
-
-PHP_FUNCTION(virtual);
-PHP_FUNCTION(apache_request_headers);
-PHP_FUNCTION(apache_response_headers);
-PHP_FUNCTION(apachelog);
-PHP_FUNCTION(apache_note);
-PHP_FUNCTION(apache_lookup_uri);
-PHP_FUNCTION(apache_child_terminate);
-PHP_FUNCTION(apache_setenv);
-PHP_FUNCTION(apache_get_version);
-PHP_FUNCTION(apache_get_modules);
-
-PHP_MINFO_FUNCTION(apache);
-
-function_entry apache_functions[] = {
- PHP_FE(virtual, NULL)
- PHP_FE(apache_request_headers, NULL)
- PHP_FE(apache_note, NULL)
- PHP_FE(apache_lookup_uri, NULL)
- PHP_FE(apache_child_terminate, NULL)
- PHP_FE(apache_setenv, NULL)
- PHP_FE(apache_response_headers, NULL)
- PHP_FE(apache_get_version, NULL)
- PHP_FE(apache_get_modules, NULL)
- PHP_FALIAS(getallheaders, apache_request_headers, NULL)
- {NULL, NULL, NULL}
-};
-
-
-PHP_INI_BEGIN()
- STD_PHP_INI_ENTRY("xbithack", "0", PHP_INI_ALL, OnUpdateLong, xbithack, php_apache_info_struct, php_apache_info)
- STD_PHP_INI_ENTRY("engine", "1", PHP_INI_ALL, OnUpdateLong, engine, php_apache_info_struct, php_apache_info)
- STD_PHP_INI_ENTRY("last_modified", "0", PHP_INI_ALL, OnUpdateLong, last_modified, php_apache_info_struct, php_apache_info)
- STD_PHP_INI_ENTRY("child_terminate", "0", PHP_INI_ALL, OnUpdateLong, terminate_child, php_apache_info_struct, php_apache_info)
-PHP_INI_END()
-
-
-
-static void php_apache_globals_ctor(php_apache_info_struct *apache_globals TSRMLS_DC)
-{
- apache_globals->in_request = 0;
-}
-
-
-static PHP_MINIT_FUNCTION(apache)
-{
-#ifdef ZTS
- ts_allocate_id(&php_apache_info_id, sizeof(php_apache_info_struct), (ts_allocate_ctor) php_apache_globals_ctor, NULL);
-#else
- php_apache_globals_ctor(&php_apache_info TSRMLS_CC);
-#endif
- REGISTER_INI_ENTRIES();
- return SUCCESS;
-}
-
-
-static PHP_MSHUTDOWN_FUNCTION(apache)
-{
- UNREGISTER_INI_ENTRIES();
- return SUCCESS;
-}
-
-zend_module_entry apache_module_entry = {
- STANDARD_MODULE_HEADER,
- "apache",
- apache_functions,
- PHP_MINIT(apache),
- PHP_MSHUTDOWN(apache),
- NULL,
- NULL,
- PHP_MINFO(apache),
- NO_VERSION_YET,
- STANDARD_MODULE_PROPERTIES
-};
-
-/* {{{ proto bool apache_child_terminate(void)
- Terminate apache process after this request */
-PHP_FUNCTION(apache_child_terminate)
-{
-#ifndef MULTITHREAD
- if (AP(terminate_child)) {
- ap_child_terminate( ((request_rec *)SG(server_context)) );
- RETURN_TRUE;
- } else { /* tell them to get lost! */
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "This function is disabled");
- RETURN_FALSE;
- }
-#else
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "This function is not supported in this build");
- RETURN_FALSE;
-#endif
-}
-/* }}} */
-
-/* {{{ proto string apache_note(string note_name [, string note_value])
- Get and set Apache request notes */
-PHP_FUNCTION(apache_note)
-{
- pval **arg_name, **arg_val;
- char *note_val;
- int arg_count = ZEND_NUM_ARGS();
-
- if (arg_count<1 || arg_count>2 ||
- zend_get_parameters_ex(arg_count, &arg_name, &arg_val) ==FAILURE ) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_string_ex(arg_name);
- note_val = (char *) table_get(((request_rec *)SG(server_context))->notes, (*arg_name)->value.str.val);
-
- if (arg_count == 2) {
- convert_to_string_ex(arg_val);
- table_set(((request_rec *)SG(server_context))->notes, (*arg_name)->value.str.val, (*arg_val)->value.str.val);
- }
-
- if (note_val) {
- RETURN_STRING(note_val, 1);
- } else {
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-/* {{{ PHP_MINFO_FUNCTION
- */
-PHP_MINFO_FUNCTION(apache)
-{
- char *apv = (char *) ap_get_server_version();
- module *modp = NULL;
- char output_buf[128];
-#if !defined(WIN32) && !defined(WINNT)
- char name[64];
- char modulenames[1024];
- char *p;
-#endif
- server_rec *serv;
- extern char server_root[MAX_STRING_LEN];
- extern uid_t user_id;
- extern char *user_name;
- extern gid_t group_id;
- extern int max_requests_per_child;
-
- serv = ((request_rec *) SG(server_context))->server;
-
-
- php_info_print_table_start();
-
-#ifdef PHP_WIN32
- php_info_print_table_row(1, "Apache for Windows 95/NT");
- php_info_print_table_end();
- php_info_print_table_start();
-#elif defined(NETWARE)
- php_info_print_table_row(1, "Apache for NetWare");
- php_info_print_table_end();
- php_info_print_table_start();
-#else
- php_info_print_table_row(2, "APACHE_INCLUDE", PHP_APACHE_INCLUDE);
- php_info_print_table_row(2, "APACHE_TARGET", PHP_APACHE_TARGET);
-#endif
-
- if (apv && *apv) {
- php_info_print_table_row(2, "Apache Version", apv);
- }
-
-#ifdef APACHE_RELEASE
- sprintf(output_buf, "%d", APACHE_RELEASE);
- php_info_print_table_row(2, "Apache Release", output_buf);
-#endif
- sprintf(output_buf, "%d", MODULE_MAGIC_NUMBER);
- php_info_print_table_row(2, "Apache API Version", output_buf);
- sprintf(output_buf, "%s:%u", serv->server_hostname, serv->port);
- php_info_print_table_row(2, "Hostname:Port", output_buf);
-#if !defined(WIN32) && !defined(WINNT)
- sprintf(output_buf, "%s(%d)/%d", user_name, (int)user_id, (int)group_id);
- php_info_print_table_row(2, "User/Group", output_buf);
- sprintf(output_buf, "Per Child: %d - Keep Alive: %s - Max Per Connection: %d", max_requests_per_child, serv->keep_alive ? "on":"off", serv->keep_alive_max);
- php_info_print_table_row(2, "Max Requests", output_buf);
-#endif
- sprintf(output_buf, "Connection: %d - Keep-Alive: %d", serv->timeout, serv->keep_alive_timeout);
- php_info_print_table_row(2, "Timeouts", output_buf);
-#if !defined(WIN32) && !defined(WINNT)
-/*
- This block seems to be working on NetWare; But it seems to be showing
- all modules instead of just the loaded ones
-*/
- php_info_print_table_row(2, "Server Root", server_root);
-
- strcpy(modulenames, "");
- for(modp = top_module; modp; modp = modp->next) {
- strlcpy(name, modp->name, sizeof(name));
- if ((p = strrchr(name, '.'))) {
- *p='\0'; /* Cut off ugly .c extensions on module names */
- }
- strcat(modulenames, name);
- if (modp->next) {
- strcat(modulenames, ", ");
- }
- }
- php_info_print_table_row(2, "Loaded Modules", modulenames);
-#endif
-
- php_info_print_table_end();
-
- DISPLAY_INI_ENTRIES();
-
- {
- register int i;
- array_header *arr;
- table_entry *elts;
- request_rec *r;
-
- r = ((request_rec *) SG(server_context));
- arr = table_elts(r->subprocess_env);
- elts = (table_entry *)arr->elts;
-
- SECTION("Apache Environment");
- php_info_print_table_start();
- php_info_print_table_header(2, "Variable", "Value");
- for (i=0; i < arr->nelts; i++) {
- php_info_print_table_row(2, elts[i].key, elts[i].val);
- }
- php_info_print_table_end();
- }
-
- {
- array_header *env_arr;
- table_entry *env;
- int i;
- request_rec *r;
-
- r = ((request_rec *) SG(server_context));
- SECTION("HTTP Headers Information");
- php_info_print_table_start();
- php_info_print_table_colspan_header(2, "HTTP Request Headers");
- php_info_print_table_row(2, "HTTP Request", r->the_request);
- env_arr = table_elts(r->headers_in);
- env = (table_entry *)env_arr->elts;
- for (i = 0; i < env_arr->nelts; ++i) {
- if (env[i].key && (!PG(safe_mode) || (PG(safe_mode) && strncasecmp(env[i].key, "authorization", 13)))) {
- php_info_print_table_row(2, env[i].key, env[i].val);
- }
- }
- php_info_print_table_colspan_header(2, "HTTP Response Headers");
- env_arr = table_elts(r->headers_out);
- env = (table_entry *)env_arr->elts;
- for(i = 0; i < env_arr->nelts; ++i) {
- if (env[i].key) {
- php_info_print_table_row(2, env[i].key, env[i].val);
- }
- }
- php_info_print_table_end();
- }
-}
-/* }}} */
-
-/* {{{ proto bool virtual(string filename)
- Perform an Apache sub-request */
-/* This function is equivalent to <!--#include virtual...-->
- * in mod_include. It does an Apache sub-request. It is useful
- * for including CGI scripts or .shtml files, or anything else
- * that you'd parse through Apache (for .phtml files, you'd probably
- * want to use <?Include>. This only works when PHP is compiled
- * as an Apache module, since it uses the Apache API for doing
- * sub requests.
- */
-PHP_FUNCTION(virtual)
-{
- pval **filename;
- request_rec *rr = NULL;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &filename) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex(filename);
-
- if (!(rr = sub_req_lookup_uri ((*filename)->value.str.val, ((request_rec *) SG(server_context))))) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to include '%s' - URI lookup failed", (*filename)->value.str.val);
- if (rr) destroy_sub_req (rr);
- RETURN_FALSE;
- }
-
- if (rr->status != 200) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to include '%s' - error finding URI", (*filename)->value.str.val);
- if (rr) destroy_sub_req (rr);
- RETURN_FALSE;
- }
-
- php_end_ob_buffers(1 TSRMLS_CC);
- php_header(TSRMLS_C);
-
- if (run_sub_req(rr)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to include '%s' - request execution failed", (*filename)->value.str.val);
- if (rr) destroy_sub_req (rr);
- RETURN_FALSE;
- } else {
- if (rr) destroy_sub_req (rr);
- RETURN_TRUE;
- }
-}
-/* }}} */
-
-/* {{{ proto array getallheaders(void)
- Alias for apache_request_headers() */
-/* }}} */
-/* {{{ proto array apache_request_headers(void)
- Fetch all HTTP request headers */
-PHP_FUNCTION(apache_request_headers)
-{
- array_header *env_arr;
- table_entry *tenv;
- int i;
-
- array_init(return_value);
- env_arr = table_elts(((request_rec *) SG(server_context))->headers_in);
- tenv = (table_entry *)env_arr->elts;
- for (i = 0; i < env_arr->nelts; ++i) {
- if (!tenv[i].key ||
- (PG(safe_mode) &&
- !strncasecmp(tenv[i].key, "authorization", 13))) {
- continue;
- }
- if (add_assoc_string(return_value, tenv[i].key, (tenv[i].val==NULL) ? "" : tenv[i].val, 1)==FAILURE) {
- RETURN_FALSE;
- }
- }
-}
-/* }}} */
-
-/* {{{ proto array apache_response_headers(void)
- Fetch all HTTP response headers */
-PHP_FUNCTION(apache_response_headers)
-{
- array_header *env_arr;
- table_entry *tenv;
- int i;
-
- array_init(return_value);
- env_arr = table_elts(((request_rec *) SG(server_context))->headers_out);
- tenv = (table_entry *)env_arr->elts;
- for (i = 0; i < env_arr->nelts; ++i) {
- if (!tenv[i].key) continue;
- if (add_assoc_string(return_value, tenv[i].key, (tenv[i].val==NULL) ? "" : tenv[i].val, 1)==FAILURE) {
- RETURN_FALSE;
- }
- }
-}
-/* }}} */
-
-/* {{{ proto bool apache_setenv(string variable, string value [, bool walk_to_top])
- Set an Apache subprocess_env variable */
-PHP_FUNCTION(apache_setenv)
-{
- int var_len, val_len, top=0;
- char *var = NULL, *val = NULL;
- request_rec *r = (request_rec *) SG(server_context);
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ss|b", &var, &var_len, &val, &val_len, &top) == FAILURE) {
- RETURN_FALSE;
- }
-
- while(top) {
- if(r->prev) r = r->prev;
- else break;
- }
-
- ap_table_setn(r->subprocess_env, ap_pstrndup(r->pool, var, var_len), ap_pstrndup(r->pool, val, val_len));
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto object apache_lookup_uri(string URI)
- Perform a partial request of the given URI to obtain information about it */
-PHP_FUNCTION(apache_lookup_uri)
-{
- pval **filename;
- request_rec *rr=NULL;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &filename) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex(filename);
-
- if(!(rr = sub_req_lookup_uri((*filename)->value.str.val, ((request_rec *) SG(server_context))))) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "URI lookup failed '%s'", (*filename)->value.str.val);
- RETURN_FALSE;
- }
- object_init(return_value);
- add_property_long(return_value,"status", rr->status);
- if (rr->the_request) {
- add_property_string(return_value,"the_request", rr->the_request, 1);
- }
- if (rr->status_line) {
- add_property_string(return_value,"status_line", (char *)rr->status_line, 1);
- }
- if (rr->method) {
- add_property_string(return_value,"method", (char *)rr->method, 1);
- }
- if (rr->content_type) {
- add_property_string(return_value,"content_type", (char *)rr->content_type, 1);
- }
- if (rr->handler) {
- add_property_string(return_value,"handler", (char *)rr->handler, 1);
- }
- if (rr->uri) {
- add_property_string(return_value,"uri", rr->uri, 1);
- }
- if (rr->filename) {
- add_property_string(return_value,"filename", rr->filename, 1);
- }
- if (rr->path_info) {
- add_property_string(return_value,"path_info", rr->path_info, 1);
- }
- if (rr->args) {
- add_property_string(return_value,"args", rr->args, 1);
- }
- if (rr->boundary) {
- add_property_string(return_value,"boundary", rr->boundary, 1);
- }
- add_property_long(return_value,"no_cache", rr->no_cache);
- add_property_long(return_value,"no_local_copy", rr->no_local_copy);
- add_property_long(return_value,"allowed", rr->allowed);
- add_property_long(return_value,"sent_bodyct", rr->sent_bodyct);
- add_property_long(return_value,"bytes_sent", rr->bytes_sent);
- add_property_long(return_value,"byterange", rr->byterange);
- add_property_long(return_value,"clength", rr->clength);
-
-#if MODULE_MAGIC_NUMBER >= 19980324
- if (rr->unparsed_uri) {
- add_property_string(return_value,"unparsed_uri", rr->unparsed_uri, 1);
- }
- if(rr->mtime) {
- add_property_long(return_value,"mtime", rr->mtime);
- }
-#endif
- if(rr->request_time) {
- add_property_long(return_value,"request_time", rr->request_time);
- }
-
- destroy_sub_req(rr);
-}
-/* }}} */
-
-
-#if 0
-This function is most likely a bad idea. Just playing with it for now.
-
-PHP_FUNCTION(apache_exec_uri)
-{
- pval **filename;
- request_rec *rr=NULL;
- TSRMLS_FETCH();
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &filename) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex(filename);
-
- if(!(rr = ap_sub_req_lookup_uri((*filename)->value.str.val, ((request_rec *) SG(server_context))))) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "URI lookup failed", (*filename)->value.str.val);
- RETURN_FALSE;
- }
- RETVAL_LONG(ap_run_sub_req(rr));
- ap_destroy_sub_req(rr);
-}
-#endif
-
-/* {{{ proto string apache_get_version(void)
- Fetch Apache version */
-PHP_FUNCTION(apache_get_version)
-{
- char *apv = (char *) ap_get_server_version();
-
- if (apv && *apv) {
- RETURN_STRING(apv, 1);
- } else {
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-/* {{{ proto array apache_get_modules(void)
- Get a list of loaded Apache modules */
-PHP_FUNCTION(apache_get_modules)
-{
- int n;
- char *p;
-
- array_init(return_value);
-
- for (n = 0; ap_loaded_modules[n]; ++n) {
- char *s = (char *) ap_loaded_modules[n]->name;
- if ((p = strchr(s, '.'))) {
- add_next_index_stringl(return_value, s, (p - s), 1);
- } else {
- add_next_index_string(return_value, s, 1);
- }
- }
-}
-/* }}} */
-
-/*
- * 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/sapi/apache/php_apache_http.h b/sapi/apache/php_apache_http.h
deleted file mode 100644
index fa0596e8f3..0000000000
--- a/sapi/apache/php_apache_http.h
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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. |
- +----------------------------------------------------------------------+
- | Authors: Rasmus Lerdorf <rasmus@lerdorf.on.ca> |
- | Stig Sæther Bakken <ssb@php.net> |
- | David Sklar <sklar@student.net> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#define NO_REGEX_EXTRA_H
-
-#ifdef WIN32
-#include <stddef.h>
-#endif
-
-#ifdef NETWARE
-#include <netinet/in.h>
-#endif
-
-#include "zend.h"
-#include "php_regex.h"
-#include "php_compat.h"
-
-#ifdef HAVE_OPENSSL_EXT
-/* zlib typedefs free_func which causes problems if the SSL includes happen
- * after zlib.h is included */
-# include <openssl/ssl.h>
-#endif
-
-#ifdef regex_t
-#undef regex_t
-#endif
-
-#include "httpd.h"
-#include "http_config.h"
-
-#if MODULE_MAGIC_NUMBER > 19980712
-# include "ap_compat.h"
-#else
-# if MODULE_MAGIC_NUMBER > 19980324
-# include "compat.h"
-# endif
-#endif
-
-#include "http_core.h"
-#include "http_main.h"
-#include "http_protocol.h"
-#include "http_request.h"
-#include "http_log.h"
-#include "util_script.h"
-
-#include "php_variables.h"
-#include "php_main.h"
-#include "php_ini.h"
-#include "ext/standard/php_standard.h"
-
-#include "mod_php5.h"
diff --git a/sapi/apache/sapi_apache.c b/sapi/apache/sapi_apache.c
deleted file mode 100644
index 2298d5db95..0000000000
--- a/sapi/apache/sapi_apache.c
+++ /dev/null
@@ -1,74 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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. |
- +----------------------------------------------------------------------+
- | Authors: Rasmus Lerdorf <rasmus@php.net> |
- | (with helpful hints from Dean Gaudet <dgaudet@arctic.org> |
- | PHP 4.0 patches by: |
- | Zeev Suraski <zeev@zend.com> |
- | Stig Bakken <ssb@php.net> |
- +----------------------------------------------------------------------+
- */
-/* $Id$ */
-
-#include "php_apache_http.h"
-
-/* {{{ apache_php_module_main
- */
-int apache_php_module_main(request_rec *r, int display_source_mode TSRMLS_DC)
-{
- int retval = OK;
- zend_file_handle file_handle;
-
- if (php_request_startup(TSRMLS_C) == FAILURE) {
- return FAILURE;
- }
- /* sending a file handle to another dll is not working
- // so let zend open it.
- */
-
- if (display_source_mode) {
- zend_syntax_highlighter_ini syntax_highlighter_ini;
-
- php_get_highlight_struct(&syntax_highlighter_ini);
- if (highlight_file(SG(request_info).path_translated, &syntax_highlighter_ini TSRMLS_CC) != SUCCESS) {
- retval = NOT_FOUND;
- }
- } else {
- file_handle.type = ZEND_HANDLE_FILENAME;
- file_handle.handle.fd = 0;
- file_handle.filename = SG(request_info).path_translated;
- file_handle.opened_path = NULL;
- file_handle.free_filename = 0;
-
- (void) php_execute_script(&file_handle TSRMLS_CC);
- }
-
- AP(in_request) = 0;
-
- zend_try {
- php_request_shutdown(NULL);
- } zend_end_try();
-
- return retval;
-}
-/* }}} */
-
-/*
- * 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/sapi/apache2filter/CREDITS b/sapi/apache2filter/CREDITS
deleted file mode 100644
index c298a9bf6a..0000000000
--- a/sapi/apache2filter/CREDITS
+++ /dev/null
@@ -1,2 +0,0 @@
-Apache 2.0 Filter
-Sascha Schumann, Aaron Bannert
diff --git a/sapi/apache2filter/EXPERIMENTAL b/sapi/apache2filter/EXPERIMENTAL
deleted file mode 100644
index 293159a693..0000000000
--- a/sapi/apache2filter/EXPERIMENTAL
+++ /dev/null
@@ -1,5 +0,0 @@
-this module 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/sapi/apache2filter/README b/sapi/apache2filter/README
deleted file mode 100644
index 3054e208d3..0000000000
--- a/sapi/apache2filter/README
+++ /dev/null
@@ -1,71 +0,0 @@
-WHAT IS THIS?
-
- This module exploits the layered I/O support in Apache 2.0.
-
-HOW DOES IT WORK?
-
- In Apache 2.0, you have handlers which generate content (like
- reading a script from disk). The content goes then through
- a chain of filters. PHP can be such a filter, so that it processes
- your script and hands the output to the next filter (which will
- usually cause a write to the network).
-
-DOES IT WORK?
-
- It is experimental as interfaces in Apache 2.0 might change in the
- future.
-
-HOW TO INSTALL
-
- This SAPI module is known to work with Apache 2.0.40.
-
- $ cd apache-2.x
- $ cd src
- $ ./configure --enable-so
- $ make install
-
- For testing purposes, you might want to use --with-mpm=prefork.
- (Albeit PHP also works with threaded MPMs.)
-
- Configure PHP 4:
-
- $ cd php-4.x
- $ ./configure --with-apxs2=/path/to/apache-2.0/bin/apxs
- $ make install
-
- At the end of conf/httpd.conf, add:
-
- AddType application/x-httpd-php .php
-
- If you would like to enable source code highlighting functionality add:
-
- AddType application/x-httpd-php-source .phps
-
- That's it. Now start bin/httpd.
-
-HOW TO CONFIGURE
-
- The Apache 2.0 PHP module supports a new configuration directive that
- allows an admin to override the php.ini search path. For example,
- place your php.ini file in Apache's ServerRoot/conf directory and
- add this to your httpd.conf file:
-
- PHPINIDir "conf"
-
-DEBUGGING APACHE AND PHP
-
- To debug Apache, we recommened:
-
- 1. Use the Prefork MPM (Apache 1.3-like process model) by
- configuring Apache with '--with-mpm=prefork'.
- 2. Start httpd using -DONE_PROCESS (e.g. (gdb) r -DONE_PROCESS).
-
- If you want to debug a part of the PHP startup procedure, set a
- breakpoint on 'load_module'. Step through it until apr_dso_load() is
- done. Then you can set a breakpoint on any PHP-related symbol.
-
-TODO
-
- PHP functions like apache_sub_req (see php_functions.c)
- Protocol handlers
- Passing script data to engine without temporary file
diff --git a/sapi/apache2filter/apache_config.c b/sapi/apache2filter/apache_config.c
deleted file mode 100644
index 61d565a230..0000000000
--- a/sapi/apache2filter/apache_config.c
+++ /dev/null
@@ -1,230 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Sascha Schumann <sascha@schumann.cx> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-#define ZEND_INCLUDE_FULL_WINDOWS_HEADERS
-
-#include "php.h"
-#include "php_ini.h"
-#include "php_apache.h"
-
-#include "apr_strings.h"
-#include "ap_config.h"
-#include "util_filter.h"
-#include "httpd.h"
-#include "http_config.h"
-#include "http_request.h"
-#include "http_core.h"
-#include "http_protocol.h"
-#include "http_log.h"
-#include "http_main.h"
-#include "util_script.h"
-#include "http_core.h"
-
-#ifdef PHP_AP_DEBUG
-#define phpapdebug(a) fprintf a
-#else
-#define phpapdebug(a)
-#endif
-
-typedef struct {
- HashTable config;
-} php_conf_rec;
-
-typedef struct {
- char *value;
- size_t value_len;
- char status;
-} php_dir_entry;
-
-static const char *real_value_hnd(cmd_parms *cmd, void *dummy,
- const char *name, const char *value, int status)
-{
- php_conf_rec *d = dummy;
- php_dir_entry e;
-
- phpapdebug((stderr, "Getting %s=%s for %p (%d)\n", name, value, dummy,
- zend_hash_num_elements(&d->config)));
-
- if (!strncasecmp(value, "none", sizeof("none"))) {
- value = "";
- }
-
- e.value = apr_pstrdup(cmd->pool, value);
- e.value_len = strlen(value);
- e.status = status;
-
- zend_hash_update(&d->config, (char *) name, strlen(name) + 1, &e,
- sizeof(e), NULL);
- return NULL;
-}
-
-static const char *php_apache_value_handler(cmd_parms *cmd, void *dummy,
- const char *name, const char *value)
-{
- return real_value_hnd(cmd, dummy, name, value, PHP_INI_PERDIR);
-}
-
-static const char *php_apache_admin_value_handler(cmd_parms *cmd, void *dummy,
- const char *name, const char *value)
-{
- return real_value_hnd(cmd, dummy, name, value, PHP_INI_SYSTEM);
-}
-
-static const char *real_flag_hnd(cmd_parms *cmd, void *dummy, const char *arg1,
- const char *arg2, int status)
-{
- char bool_val[2];
-
- if (!strcasecmp(arg2, "On") || (arg2[0] == '1' && arg2[1] == '\0')) {
- bool_val[0] = '1';
- } else {
- bool_val[0] = '0';
- }
- bool_val[1] = 0;
-
- return real_value_hnd(cmd, dummy, arg1, bool_val, status);
-}
-
-static const char *php_apache_flag_handler(cmd_parms *cmd, void *dummy,
- const char *name, const char *value)
-{
- return real_flag_hnd(cmd, dummy, name, value, PHP_INI_PERDIR);
-}
-
-static const char *php_apache_admin_flag_handler(cmd_parms *cmd, void *dummy,
- const char *name, const char *value)
-{
- return real_flag_hnd(cmd, dummy, name, value, PHP_INI_SYSTEM);
-}
-
-static const char *php_apache_phpini_set(cmd_parms *cmd, void *mconfig,
- const char *arg)
-{
- if (apache2_php_ini_path_override) {
- return "Only first PHPINIDir directive honored per configuration tree "
- "- subsequent ones ignored";
- }
- apache2_php_ini_path_override = ap_server_root_relative(cmd->pool, arg);
- return NULL;
-}
-
-
-void *merge_php_config(apr_pool_t *p, void *base_conf, void *new_conf)
-{
- php_conf_rec *d = base_conf, *e = new_conf;
- php_dir_entry *pe;
- php_dir_entry *data;
- char *str;
- uint str_len;
- ulong num_index;
-
- phpapdebug((stderr, "Merge dir (%p) (%p)\n", base_conf, new_conf));
- for (zend_hash_internal_pointer_reset(&d->config);
- zend_hash_get_current_key_ex(&d->config, &str, &str_len,
- &num_index, 0, NULL) == HASH_KEY_IS_STRING;
- zend_hash_move_forward(&d->config)) {
- pe = NULL;
- zend_hash_get_current_data(&d->config, (void **) &data);
- if (zend_hash_find(&e->config, str, str_len, (void **) &pe) == SUCCESS) {
- if (pe->status >= data->status) continue;
- }
- zend_hash_update(&e->config, str, str_len, data, sizeof(*data), NULL);
- phpapdebug((stderr, "ADDING/OVERWRITING %s (%d vs. %d)\n", str,
- data->status, pe?pe->status:-1));
- }
- return new_conf;
-}
-
-char *get_php_config(void *conf, char *name, size_t name_len)
-{
- php_conf_rec *d = conf;
- php_dir_entry *pe;
-
- if (zend_hash_find(&d->config, name, name_len, (void **) &pe) == SUCCESS) {
- return pe->value;
- }
-
- return "";
-}
-
-void apply_config(void *dummy)
-{
- php_conf_rec *d = dummy;
- char *str;
- uint str_len;
- php_dir_entry *data;
-
- for (zend_hash_internal_pointer_reset(&d->config);
- zend_hash_get_current_key_ex(&d->config, &str, &str_len, NULL, 0,
- NULL) == HASH_KEY_IS_STRING;
- zend_hash_move_forward(&d->config)) {
- zend_hash_get_current_data(&d->config, (void **) &data);
- phpapdebug((stderr, "APPLYING (%s)(%s)\n", str, data->value));
- if (zend_alter_ini_entry(str, str_len, data->value, data->value_len,
- data->status, PHP_INI_STAGE_RUNTIME) == FAILURE) {
- phpapdebug((stderr, "..FAILED\n"));
- }
- }
-}
-
-const command_rec php_dir_cmds[] =
-{
- AP_INIT_TAKE2("php_value", php_apache_value_handler, NULL, OR_OPTIONS,
- "PHP Value Modifier"),
- AP_INIT_TAKE2("php_flag", php_apache_flag_handler, NULL, OR_OPTIONS,
- "PHP Flag Modifier"),
- AP_INIT_TAKE2("php_admin_value", php_apache_admin_value_handler, NULL,
- ACCESS_CONF|RSRC_CONF, "PHP Value Modifier (Admin)"),
- AP_INIT_TAKE2("php_admin_flag", php_apache_admin_flag_handler, NULL,
- ACCESS_CONF|RSRC_CONF, "PHP Flag Modifier (Admin)"),
- AP_INIT_TAKE1("PHPINIDir", php_apache_phpini_set, NULL, RSRC_CONF,
- "Directory containing the php.ini file"),
- {NULL}
-};
-
-static apr_status_t destroy_php_config(void *data)
-{
- php_conf_rec *d = data;
-
- phpapdebug((stderr, "Destroying config %p\n", data));
- zend_hash_destroy(&d->config);
-
- return APR_SUCCESS;
-}
-
-void *create_php_config(apr_pool_t *p, char *dummy)
-{
- php_conf_rec *newx =
- (php_conf_rec *) apr_pcalloc(p, sizeof(*newx));
-
- phpapdebug((stderr, "Creating new config (%p) for %s\n", newx, dummy));
- zend_hash_init(&newx->config, 0, NULL, NULL, 1);
- apr_pool_cleanup_register(p, newx, destroy_php_config, apr_pool_cleanup_null);
- return (void *) newx;
-}
-
-/*
- * 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/sapi/apache2filter/config.m4 b/sapi/apache2filter/config.m4
deleted file mode 100644
index decdd803cf..0000000000
--- a/sapi/apache2filter/config.m4
+++ /dev/null
@@ -1,130 +0,0 @@
-dnl
-dnl $Id$
-dnl
-
-AC_MSG_CHECKING(for Apache 2.0 filter-module support via DSO through APXS)
-AC_ARG_WITH(apxs2filter,
-[ --with-apxs2filter[=FILE]
- EXPERIMENTAL: Build shared Apache 2.0 module. FILE is the optional
- pathname to the Apache apxs tool; defaults to "apxs".],[
- if test "$withval" = "yes"; then
- APXS=apxs
- $APXS -q CFLAGS >/dev/null 2>&1
- if test "$?" != "0" && test -x /usr/sbin/apxs; then
- APXS=/usr/sbin/apxs
- fi
- else
- PHP_EXPAND_PATH($withval, APXS)
- fi
-
- $APXS -q CFLAGS >/dev/null 2>&1
- if test "$?" != "0"; then
- AC_MSG_RESULT()
- AC_MSG_RESULT()
- AC_MSG_RESULT([Sorry, I cannot run apxs. Possible reasons follow:])
- AC_MSG_RESULT()
- AC_MSG_RESULT([1. Perl is not installed])
- AC_MSG_RESULT([2. apxs was not found. Try to pass the path using --with-apxs2filter=/path/to/apxs])
- AC_MSG_RESULT([3. Apache was not built using --enable-so (the apxs usage page is displayed)])
- AC_MSG_RESULT()
- AC_MSG_RESULT([The output of $APXS follows:])
- $APXS -q CFLAGS
- AC_MSG_ERROR([Aborting])
- fi
-
- APXS_INCLUDEDIR=`$APXS -q INCLUDEDIR`
- APXS_BINDIR=`$APXS -q BINDIR`
- APXS_HTTPD=`$APXS -q SBINDIR`/`$APXS -q TARGET`
- APXS_CFLAGS=`$APXS -q CFLAGS`
- APXS_MPM=`$APXS -q MPM_NAME`
- APU_BINDIR=`$APXS -q APU_BINDIR`
- APR_BINDIR=`$APXS -q APR_BINDIR`
-
- # Pick up ap[ru]-N-config if using httpd >=2.1
- APR_CONFIG=`$APXS -q APR_CONFIG 2>/dev/null ||
- echo $APR_BINDIR/apr-config`
- APU_CONFIG=`$APXS -q APU_CONFIG 2>/dev/null ||
- echo $APU_BINDIR/apu-config`
-
- APR_CFLAGS="`$APR_CONFIG --cppflags --includes`"
- APU_CFLAGS="`$APU_CONFIG --includes`"
-
- for flag in $APXS_CFLAGS; do
- case $flag in
- -D*) APACHE_CPPFLAGS="$APACHE_CPPFLAGS $flag";;
- esac
- done
-
- APACHE_CFLAGS="$APACHE_CPPFLAGS -I$APXS_INCLUDEDIR $APR_CFLAGS $APU_CFLAGS"
-
- # Test that we're trying to configure with apache 2.x
- PHP_AP_EXTRACT_VERSION($APXS_HTTPD)
- if test "$APACHE_VERSION" -le 2000000; then
- AC_MSG_ERROR([You have enabled Apache 2 support while your server is Apache 1.3. Please use the appropiate switch --with-apxs (without the 2)])
- elif test "$APACHE_VERSION" -lt 2000040; then
- AC_MSG_ERROR([Please note that Apache version >= 2.0.40 is required.])
- fi
-
- APXS_LIBEXECDIR='$(INSTALL_ROOT)'`$APXS -q LIBEXECDIR`
- if test -z `$APXS -q SYSCONFDIR`; then
- INSTALL_IT="\$(mkinstalldirs) '$APXS_LIBEXECDIR' && \
- $APXS -S LIBEXECDIR='$APXS_LIBEXECDIR' \
- -i -n php5"
- else
- APXS_SYSCONFDIR='$(INSTALL_ROOT)'`$APXS -q SYSCONFDIR`
- INSTALL_IT="\$(mkinstalldirs) '$APXS_LIBEXECDIR' && \
- \$(mkinstalldirs) '$APXS_SYSCONFDIR' && \
- $APXS -S LIBEXECDIR='$APXS_LIBEXECDIR' \
- -S SYSCONFDIR='$APXS_SYSCONFDIR' \
- -i -a -n php5"
- fi
-
- case $host_alias in
- *aix*)
- EXTRA_LDFLAGS="$EXTRA_LDFLAGS -Wl,-brtl -Wl,-bI:$APXS_LIBEXECDIR/httpd.exp"
- PHP_SELECT_SAPI(apache2filter, shared, sapi_apache2.c apache_config.c php_functions.c, $APACHE_CFLAGS)
- INSTALL_IT="$INSTALL_IT $SAPI_LIBTOOL"
- ;;
- *darwin*)
- dnl When using bundles on Darwin, we must resolve all symbols. However,
- dnl the linker does not recursively look at the bundle loader and
- dnl pull in its dependencies. Therefore, we must pull in the APR
- dnl and APR-util libraries.
- if test -x "$APR_BINDIR/apr-config"; then
- MH_BUNDLE_FLAGS="`$APR_BINDIR/apr-config --ldflags --link-ld --libs`"
- fi
- if test -x "$APU_BINDIR/apu-config"; then
- MH_BUNDLE_FLAGS="`$APU_BINDIR/apu-config --ldflags --link-ld --libs` $MH_BUNDLE_FLAGS"
- fi
- MH_BUNDLE_FLAGS="-bundle -bundle_loader $APXS_HTTPD $MH_BUNDLE_FLAGS"
- PHP_SUBST(MH_BUNDLE_FLAGS)
- PHP_SELECT_SAPI(apache2filter, bundle, sapi_apache2.c apache_config.c php_functions.c, $APACHE_CFLAGS)
- SAPI_SHARED=libs/libphp5.so
- INSTALL_IT="$INSTALL_IT $SAPI_SHARED"
- ;;
- *beos*)
- if test -f _APP_; then `rm _APP_`; fi
- `ln -s $APXS_BINDIR/httpd _APP_`
- EXTRA_LIBS="$EXTRA_LIBS _APP_"
- PHP_SELECT_SAPI(apache2filter, shared, sapi_apache2.c apache_config.c php_functions.c, $APACHE_CFLAGS)
- INSTALL_IT="$INSTALL_IT $SAPI_LIBTOOL"
- ;;
- *)
- PHP_SELECT_SAPI(apache2filter, shared, sapi_apache2.c apache_config.c php_functions.c, $APACHE_CFLAGS)
- INSTALL_IT="$INSTALL_IT $SAPI_LIBTOOL"
- ;;
- esac
-
- if test "$APXS_MPM" != "prefork"; then
- PHP_BUILD_THREAD_SAFE
- fi
- AC_MSG_RESULT(yes)
-
- PHP_SUBST(APXS)
-],[
- AC_MSG_RESULT(no)
-])
-
-dnl ## Local Variables:
-dnl ## tab-width: 4
-dnl ## End:
diff --git a/sapi/apache2filter/php.sym b/sapi/apache2filter/php.sym
deleted file mode 100644
index 9ad0f0a0ad..0000000000
--- a/sapi/apache2filter/php.sym
+++ /dev/null
@@ -1 +0,0 @@
-php5_module
diff --git a/sapi/apache2filter/php_apache.h b/sapi/apache2filter/php_apache.h
deleted file mode 100644
index a127a4b782..0000000000
--- a/sapi/apache2filter/php_apache.h
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Sascha Schumann <sascha@schumann.cx> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-#ifndef PHP_APACHE_H
-#define PHP_APACHE_H
-
-#include "httpd.h"
-#include "http_config.h"
-#include "http_core.h"
-
-/* Declare this so we can get to it from outside the sapi_apache2.c file */
-extern module AP_MODULE_DECLARE_DATA php5_module;
-
-/* A way to specify the location of the php.ini dir in an apache directive */
-extern char *apache2_php_ini_path_override;
-
-/* The server_context used by PHP */
-typedef struct php_struct {
- int state;
- request_rec *r;
- ap_filter_t *f; /* downstream output filters after the PHP filter. */
- /* Length of post_data buffer */
- int post_len;
- /* Index for reading from buffer */
- int post_idx;
- /* stat structure of the current file */
-#if defined(NETWARE) && defined(CLIB_STAT_PATCH)
- struct stat_libc finfo;
-#else
- struct stat finfo;
-#endif
- /* Buffer for request body filter */
- char *post_data;
- /* Whether or not we've processed PHP in the output filters yet. */
- int request_processed;
-} php_struct;
-
-void *merge_php_config(apr_pool_t *p, void *base_conf, void *new_conf);
-void *create_php_config(apr_pool_t *p, char *dummy);
-char *get_php_config(void *conf, char *name, size_t name_len);
-void apply_config(void *);
-extern const command_rec php_dir_cmds[];
-
-#define APR_ARRAY_FOREACH_OPEN(arr, key, val) \
-{ \
- apr_table_entry_t *elts; \
- int i; \
- elts = (apr_table_entry_t *) arr->elts; \
- for (i = 0; i < arr->nelts; i++) { \
- key = elts[i].key; \
- val = elts[i].val;
-
-#define APR_ARRAY_FOREACH_CLOSE() }}
-
-#endif /* PHP_APACHE_H */
diff --git a/sapi/apache2filter/php_functions.c b/sapi/apache2filter/php_functions.c
deleted file mode 100644
index b3ac9c2c09..0000000000
--- a/sapi/apache2filter/php_functions.c
+++ /dev/null
@@ -1,393 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Sascha Schumann <sascha@schumann.cx> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-
-#define ZEND_INCLUDE_FULL_WINDOWS_HEADERS
-
-#include "php.h"
-#include "ext/standard/php_smart_str.h"
-#include "ext/standard/info.h"
-#include "SAPI.h"
-
-#define CORE_PRIVATE
-#include "apr_strings.h"
-#include "apr_time.h"
-#include "ap_config.h"
-#include "util_filter.h"
-#include "httpd.h"
-#include "http_config.h"
-#include "http_request.h"
-#include "http_core.h"
-#include "http_protocol.h"
-#include "http_log.h"
-#include "http_main.h"
-#include "util_script.h"
-#include "http_core.h"
-
-#include "php_apache.h"
-
-static request_rec *php_apache_lookup_uri(char *filename TSRMLS_DC)
-{
- php_struct *ctx;
-
- if (!filename) {
- return NULL;
- }
-
- ctx = SG(server_context);
- return ap_sub_req_lookup_uri(filename, ctx->f->r, ctx->f->next);
-}
-
-/* {{{ proto bool virtual(string uri)
- Perform an apache sub-request */
-PHP_FUNCTION(virtual)
-{
- zval **filename;
- request_rec *rr;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &filename) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_string_ex(filename);
-
- if (!(rr = php_apache_lookup_uri(Z_STRVAL_PP(filename) TSRMLS_CC))) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to include '%s' - URI lookup failed", Z_STRVAL_PP(filename));
- RETURN_FALSE;
- }
-
- if (rr->status == HTTP_OK) {
- if (ap_run_sub_req(rr)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to include '%s' - request execution failed", Z_STRVAL_PP(filename));
- ap_destroy_sub_req(rr);
- RETURN_FALSE;
- }
- ap_destroy_sub_req(rr);
- RETURN_TRUE;
- }
-
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to include '%s' - error finding URI", Z_STRVAL_PP(filename));
- ap_destroy_sub_req(rr);
- RETURN_FALSE;
-}
-/* }}} */
-
-#define ADD_LONG(name) \
- add_property_long(return_value, #name, rr->name)
-#define ADD_TIME(name) \
- add_property_long(return_value, #name, rr->name / APR_USEC_PER_SEC);
-#define ADD_STRING(name) \
- if (rr->name) add_property_string(return_value, #name, (char *) rr->name, 1)
-
-PHP_FUNCTION(apache_lookup_uri)
-{
- request_rec *rr;
- zval **filename;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &filename) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_string_ex(filename);
-
- if (!(rr = php_apache_lookup_uri(Z_STRVAL_PP(filename) TSRMLS_CC))) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to include '%s' - URI lookup failed", Z_STRVAL_PP(filename));
- RETURN_FALSE;
- }
-
- if (rr->status == HTTP_OK) {
- object_init(return_value);
-
- ADD_LONG(status);
- ADD_STRING(the_request);
- ADD_STRING(status_line);
- ADD_STRING(method);
- ADD_TIME(mtime);
- ADD_LONG(clength);
-#if MODULE_MAGIC_NUMBER < 20020506
- ADD_STRING(boundary);
-#endif
- ADD_STRING(range);
- ADD_LONG(chunked);
- ADD_STRING(content_type);
- ADD_STRING(handler);
- ADD_LONG(no_cache);
- ADD_LONG(no_local_copy);
- ADD_STRING(unparsed_uri);
- ADD_STRING(uri);
- ADD_STRING(filename);
- ADD_STRING(path_info);
- ADD_STRING(args);
- ADD_LONG(allowed);
- ADD_LONG(sent_bodyct);
- ADD_LONG(bytes_sent);
- ADD_LONG(request_time);
- ADD_LONG(mtime);
- ADD_TIME(request_time);
-
- ap_destroy_sub_req(rr);
- return;
- }
-
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to include '%s' - error finding URI", Z_STRVAL_PP(filename));
- ap_destroy_sub_req(rr);
- RETURN_FALSE;
-}
-
-/* {{{ proto array getallheaders(void)
- Fetch all HTTP request headers */
-PHP_FUNCTION(apache_request_headers)
-{
- php_struct *ctx;
- const apr_array_header_t *arr;
- char *key, *val;
-
- array_init(return_value);
-
- ctx = SG(server_context);
- arr = apr_table_elts(ctx->f->r->headers_in);
-
- APR_ARRAY_FOREACH_OPEN(arr, key, val)
- if (!val) val = "";
- add_assoc_string(return_value, key, val, 1);
- APR_ARRAY_FOREACH_CLOSE()
-}
-/* }}} */
-
-/* {{{ proto array apache_response_headers(void)
- Fetch all HTTP response headers */
-PHP_FUNCTION(apache_response_headers)
-{
- php_struct *ctx;
- const apr_array_header_t *arr;
- char *key, *val;
-
- array_init(return_value);
-
- ctx = SG(server_context);
- arr = apr_table_elts(ctx->f->r->headers_out);
-
- APR_ARRAY_FOREACH_OPEN(arr, key, val)
- if (!val) val = "";
- add_assoc_string(return_value, key, val, 1);
- APR_ARRAY_FOREACH_CLOSE()
-}
-/* }}} */
-
-/* {{{ proto string apache_note(string note_name [, string note_value])
- Get and set Apache request notes */
-PHP_FUNCTION(apache_note)
-{
- php_struct *ctx;
- zval **note_name, **note_val;
- char *old_note_val=NULL;
- int arg_count = ZEND_NUM_ARGS();
-
- if (arg_count<1 || arg_count>2 ||
- zend_get_parameters_ex(arg_count, &note_name, &note_val) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ctx = SG(server_context);
-
- convert_to_string_ex(note_name);
-
- old_note_val = (char *) apr_table_get(ctx->r->notes, Z_STRVAL_PP(note_name));
-
- if (arg_count == 2) {
- convert_to_string_ex(note_val);
- apr_table_set(ctx->r->notes, Z_STRVAL_PP(note_name), Z_STRVAL_PP(note_val));
- }
-
- if (old_note_val) {
- RETURN_STRING(old_note_val, 1);
- } else {
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-
-/* {{{ proto bool apache_setenv(string variable, string value [, bool walk_to_top])
- Set an Apache subprocess_env variable */
-PHP_FUNCTION(apache_setenv)
-{
- php_struct *ctx;
- zval **variable=NULL, **string_val=NULL, **walk_to_top=NULL;
- int arg_count = ZEND_NUM_ARGS();
-
- if (arg_count<1 || arg_count>3 ||
- zend_get_parameters_ex(arg_count, &variable, &string_val, &walk_to_top) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ctx = SG(server_context);
-
- if (arg_count == 3 && Z_STRVAL_PP(walk_to_top)) {
- while(ctx->f->r->prev) {
- ctx->f->r = ctx->f->r->prev;
- }
- }
-
- convert_to_string_ex(variable);
- convert_to_string_ex(string_val);
-
- apr_table_set(ctx->r->subprocess_env, Z_STRVAL_PP(variable), Z_STRVAL_PP(string_val));
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto bool apache_getenv(string variable [, bool walk_to_top])
- Get an Apache subprocess_env variable */
-PHP_FUNCTION(apache_getenv)
-{
- php_struct *ctx;
- zval **variable=NULL, **walk_to_top=NULL;
- int arg_count = ZEND_NUM_ARGS();
- char *env_val=NULL;
-
- if (arg_count<1 || arg_count>2 ||
- zend_get_parameters_ex(arg_count, &variable, &walk_to_top) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ctx = SG(server_context);
-
- if (arg_count == 2 && Z_STRVAL_PP(walk_to_top)) {
- while(ctx->f->r->prev) {
- ctx->f->r = ctx->f->r->prev;
- }
- }
-
- convert_to_string_ex(variable);
-
- env_val = (char*) apr_table_get(ctx->r->subprocess_env, Z_STRVAL_PP(variable));
- if (env_val != NULL) {
- RETURN_STRING(env_val, 1);
- } else {
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-static char *php_apache_get_version()
-{
- return (char *) ap_get_server_version();
-}
-
-/* {{{ proto string apache_get_version(void)
- Fetch Apache version */
-PHP_FUNCTION(apache_get_version)
-{
- char *apv = php_apache_get_version();
-
- if (apv && *apv) {
- RETURN_STRING(apv, 1);
- } else {
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-/* {{{ proto array apache_get_modules(void)
- Get a list of loaded Apache modules */
-PHP_FUNCTION(apache_get_modules)
-{
- int n;
- char *p;
-
- array_init(return_value);
-
- for (n = 0; ap_loaded_modules[n]; ++n) {
- char *s = (char *) ap_loaded_modules[n]->name;
- if ((p = strchr(s, '.'))) {
- add_next_index_stringl(return_value, s, (p - s), 1);
- } else {
- add_next_index_string(return_value, s, 1);
- }
- }
-}
-/* }}} */
-
-PHP_MINFO_FUNCTION(apache)
-{
- char *apv = php_apache_get_version();
- smart_str tmp1 = {0};
- int n;
- char *p;
-
- for (n = 0; ap_loaded_modules[n]; ++n) {
- char *s = (char *) ap_loaded_modules[n]->name;
- if ((p = strchr(s, '.'))) {
- smart_str_appendl(&tmp1, s, (p - s));
- } else {
- smart_str_appends(&tmp1, s);
- }
- smart_str_appendc(&tmp1, ' ');
- }
- if ((tmp1.len - 1) >= 0) {
- tmp1.c[tmp1.len - 1] = '\0';
- }
-
- php_info_print_table_start();
- if (apv && *apv) {
- php_info_print_table_row(2, "Apache Version", apv);
- }
- php_info_print_table_row(2, "Loaded Modules", tmp1.c);
- smart_str_free(&tmp1);
- php_info_print_table_end();
-}
-
-static function_entry apache_functions[] = {
- PHP_FE(apache_lookup_uri, NULL)
- PHP_FE(virtual, NULL)
- PHP_FE(apache_request_headers, NULL)
- PHP_FE(apache_response_headers, NULL)
- PHP_FE(apache_setenv, NULL)
- PHP_FE(apache_getenv, NULL)
- PHP_FE(apache_note, NULL)
- PHP_FE(apache_get_version, NULL)
- PHP_FE(apache_get_modules, NULL)
- PHP_FALIAS(getallheaders, apache_request_headers, NULL)
- {NULL, NULL, NULL}
-};
-
-zend_module_entry php_apache_module = {
- STANDARD_MODULE_HEADER,
- "apache2filter",
- apache_functions,
- NULL,
- NULL,
- NULL,
- NULL,
- PHP_MINFO(apache),
- NULL,
- STANDARD_MODULE_PROPERTIES
-};
-
-/*
- * 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/sapi/apache2filter/sapi_apache2.c b/sapi/apache2filter/sapi_apache2.c
deleted file mode 100644
index cb4ed06586..0000000000
--- a/sapi/apache2filter/sapi_apache2.c
+++ /dev/null
@@ -1,730 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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. |
- +----------------------------------------------------------------------+
- | Authors: Sascha Schumann <sascha@schumann.cx> |
- | Parts based on Apache 1.3 SAPI module by |
- | Rasmus Lerdorf and Zeev Suraski |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-#include <fcntl.h>
-
-#define ZEND_INCLUDE_FULL_WINDOWS_HEADERS
-
-#include "php.h"
-#include "php_main.h"
-#include "php_ini.h"
-#include "php_variables.h"
-#include "SAPI.h"
-
-#include "ext/standard/php_smart_str.h"
-#ifndef NETWARE
-#include "ext/standard/php_standard.h"
-#else
-#include "ext/standard/basic_functions.h"
-#endif
-
-#include "apr_strings.h"
-#include "ap_config.h"
-#include "util_filter.h"
-#include "httpd.h"
-#include "http_config.h"
-#include "http_request.h"
-#include "http_core.h"
-#include "http_protocol.h"
-#include "http_log.h"
-#include "http_main.h"
-#include "util_script.h"
-#include "http_core.h"
-#include "ap_mpm.h"
-
-#include "php_apache.h"
-
-/* UnixWare and Netware define shutdown to _shutdown, which causes problems later
- * on when using a structure member named shutdown. Since this source
- * file does not use the system call shutdown, it is safe to #undef it.
- */
-#undef shutdown
-
-/* A way to specify the location of the php.ini dir in an apache directive */
-char *apache2_php_ini_path_override = NULL;
-
-static int
-php_apache_sapi_ub_write(const char *str, uint str_length TSRMLS_DC)
-{
- apr_bucket *b;
- apr_bucket_brigade *bb;
- apr_bucket_alloc_t *ba;
- ap_filter_t *f; /* remaining output filters */
- php_struct *ctx;
-
- ctx = SG(server_context);
- f = ctx->f;
-
- if (str_length == 0) return 0;
-
- ba = f->c->bucket_alloc;
- bb = apr_brigade_create(ctx->r->pool, ba);
-
- b = apr_bucket_transient_create(str, str_length, ba);
- APR_BRIGADE_INSERT_TAIL(bb, b);
-
-#if 0
- /* Add a Flush bucket to the end of this brigade, so that
- * the transient buckets above are more likely to make it out
- * the end of the filter instead of having to be copied into
- * someone's setaside. */
- b = apr_bucket_flush_create(ba);
- APR_BRIGADE_INSERT_TAIL(bb, b);
-#endif
-
- if (ap_pass_brigade(f->next, bb) != APR_SUCCESS || ctx->r->connection->aborted) {
- php_handle_aborted_connection();
- }
-
- return str_length; /* we always consume all the data passed to us. */
-}
-
-static int
-php_apache_sapi_header_handler(sapi_header_struct *sapi_header, sapi_headers_struct *sapi_headers TSRMLS_DC)
-{
- php_struct *ctx;
- ap_filter_t *f;
- char *val;
-
- ctx = SG(server_context);
- f = ctx->r->output_filters;
-
- val = strchr(sapi_header->header, ':');
-
- if (!val) {
- sapi_free_header(sapi_header);
- return 0;
- }
-
- *val = '\0';
-
- do {
- val++;
- } while (*val == ' ');
-
- if (!strcasecmp(sapi_header->header, "content-type"))
- ctx->r->content_type = apr_pstrdup(ctx->r->pool, val);
- else if (sapi_header->replace)
- apr_table_set(ctx->r->headers_out, sapi_header->header, val);
- else
- apr_table_add(ctx->r->headers_out, sapi_header->header, val);
-
- sapi_free_header(sapi_header);
-
- return 0;
-}
-
-static int
-php_apache_sapi_send_headers(sapi_headers_struct *sapi_headers TSRMLS_DC)
-{
- php_struct *ctx = SG(server_context);
-
- ctx->r->status = SG(sapi_headers).http_response_code;
-
- return SAPI_HEADER_SENT_SUCCESSFULLY;
-}
-
-static int
-php_apache_sapi_read_post(char *buf, uint count_bytes TSRMLS_DC)
-{
- int n;
- int to_read;
- php_struct *ctx = SG(server_context);
-
- to_read = ctx->post_len - ctx->post_idx;
- n = MIN(to_read, count_bytes);
-
- if (n > 0) {
- memcpy(buf, ctx->post_data + ctx->post_idx, n);
- ctx->post_idx += n;
- } else {
- if (ctx->post_data) free(ctx->post_data);
- ctx->post_data = NULL;
- }
-
- return n;
-}
-
-static struct stat*
-php_apache_sapi_get_stat(TSRMLS_D)
-{
- php_struct *ctx = SG(server_context);
-
- ctx->finfo.st_uid = ctx->r->finfo.user;
- ctx->finfo.st_gid = ctx->r->finfo.group;
- ctx->finfo.st_dev = ctx->r->finfo.device;
- ctx->finfo.st_ino = ctx->r->finfo.inode;
-#if defined(NETWARE) && defined(CLIB_STAT_PATCH)
- ctx->finfo.st_atime.tv_sec = ctx->r->finfo.atime/1000000;
- ctx->finfo.st_mtime.tv_sec = ctx->r->finfo.mtime/1000000;
- ctx->finfo.st_ctime.tv_sec = ctx->r->finfo.ctime/1000000;
-#else
- ctx->finfo.st_atime = ctx->r->finfo.atime/1000000;
- ctx->finfo.st_mtime = ctx->r->finfo.mtime/1000000;
- ctx->finfo.st_ctime = ctx->r->finfo.ctime/1000000;
-#endif
-
- ctx->finfo.st_size = ctx->r->finfo.size;
- ctx->finfo.st_nlink = ctx->r->finfo.nlink;
-
- return &ctx->finfo;
-}
-
-static char *
-php_apache_sapi_read_cookies(TSRMLS_D)
-{
- php_struct *ctx = SG(server_context);
- const char *http_cookie;
-
- http_cookie = apr_table_get(ctx->r->headers_in, "cookie");
-
- /* The SAPI interface should use 'const char *' */
- return (char *) http_cookie;
-}
-
-static char *
-php_apache_sapi_getenv(char *name, size_t name_len TSRMLS_DC)
-{
- php_struct *ctx = SG(server_context);
- const char *env_var;
-
- env_var = apr_table_get(ctx->r->subprocess_env, name);
-
- return (char *) env_var;
-}
-
-static void
-php_apache_sapi_register_variables(zval *track_vars_array TSRMLS_DC)
-{
- php_struct *ctx = SG(server_context);
- const apr_array_header_t *arr = apr_table_elts(ctx->r->subprocess_env);
- char *key, *val;
-
- APR_ARRAY_FOREACH_OPEN(arr, key, val)
- if (!val) val = "";
- php_register_variable(key, val, track_vars_array TSRMLS_CC);
- APR_ARRAY_FOREACH_CLOSE()
-
- php_register_variable("PHP_SELF", ctx->r->uri, track_vars_array TSRMLS_CC);
-}
-
-static void
-php_apache_sapi_flush(void *server_context)
-{
- php_struct *ctx;
- apr_bucket_brigade *bb;
- apr_bucket_alloc_t *ba;
- apr_bucket *b;
- ap_filter_t *f; /* output filters */
- TSRMLS_FETCH();
-
- ctx = server_context;
-
- /* If we haven't registered a server_context yet,
- * then don't bother flushing. */
- if (!server_context)
- return;
-
- sapi_send_headers(TSRMLS_C);
-
- ctx->r->status = SG(sapi_headers).http_response_code;
- SG(headers_sent) = 1;
-
- f = ctx->f;
-
- /* Send a flush bucket down the filter chain. The current default
- * handler seems to act on the first flush bucket, but ignores
- * all further flush buckets.
- */
-
- ba = ctx->r->connection->bucket_alloc;
- bb = apr_brigade_create(ctx->r->pool, ba);
- b = apr_bucket_flush_create(ba);
- APR_BRIGADE_INSERT_TAIL(bb, b);
- if (ap_pass_brigade(f->next, bb) != APR_SUCCESS || ctx->r->connection->aborted) {
- php_handle_aborted_connection();
- }
-}
-
-static void php_apache_sapi_log_message(char *msg)
-{
- php_struct *ctx;
- TSRMLS_FETCH();
-
- ctx = SG(server_context);
-
- /* We use APLOG_STARTUP because it keeps us from printing the
- * data and time information at the beginning of the error log
- * line. Not sure if this is correct, but it mirrors what happens
- * with Apache 1.3 -- rbb
- */
- if (ctx == NULL) { /* we haven't initialized our ctx yet, oh well */
- ap_log_error(APLOG_MARK, APLOG_ERR | APLOG_NOERRNO | APLOG_STARTUP,
- 0, NULL, "%s", msg);
- }
- else {
- ap_log_error(APLOG_MARK, APLOG_ERR | APLOG_NOERRNO | APLOG_STARTUP,
- 0, ctx->r->server, "%s", msg);
- }
-}
-
-static int
-php_apache_disable_caching(ap_filter_t *f)
-{
- /* Identify PHP scripts as non-cacheable, thus preventing
- * Apache from sending a 304 status when the browser sends
- * If-Modified-Since header.
- */
- f->r->no_local_copy = 1;
-
- return OK;
-}
-
-static time_t
-php_apache_sapi_get_request_time(void)
-{
- php_struct *ctx = SG(server_context);
- TSRMLS_FETCH();
-
- return ctx->r->request_time;
-}
-
-extern zend_module_entry php_apache_module;
-
-static int php_apache2_startup(sapi_module_struct *sapi_module)
-{
- if (php_module_startup(sapi_module, &php_apache_module, 1)==FAILURE) {
- return FAILURE;
- }
- return SUCCESS;
-}
-
-static sapi_module_struct apache2_sapi_module = {
- "apache2filter",
- "Apache 2.0 Filter",
-
- php_apache2_startup, /* startup */
- php_module_shutdown_wrapper, /* shutdown */
-
- NULL, /* activate */
- NULL, /* deactivate */
-
- php_apache_sapi_ub_write, /* unbuffered write */
- php_apache_sapi_flush, /* flush */
- php_apache_sapi_get_stat, /* get uid */
- php_apache_sapi_getenv, /* getenv */
-
- php_error, /* error handler */
-
- php_apache_sapi_header_handler, /* header handler */
- php_apache_sapi_send_headers, /* send headers handler */
- NULL, /* send header handler */
-
- php_apache_sapi_read_post, /* read POST data */
- php_apache_sapi_read_cookies, /* read Cookies */
-
- php_apache_sapi_register_variables,
- php_apache_sapi_log_message, /* Log message */
- php_apache_sapi_get_request_time, /* Get Request Time */
-
- STANDARD_SAPI_MODULE_PROPERTIES
-};
-
-static int php_input_filter(ap_filter_t *f, apr_bucket_brigade *bb,
- ap_input_mode_t mode, apr_read_type_e block, apr_off_t readbytes)
-{
- php_struct *ctx;
- long old_index;
- apr_bucket *b;
- const char *str;
- apr_size_t n;
- apr_status_t rv;
- TSRMLS_FETCH();
-
- if (f->r->proxyreq) {
- return ap_get_brigade(f->next, bb, mode, block, readbytes);
- }
-
- ctx = SG(server_context);
- if (ctx == NULL) {
- ap_log_rerror(APLOG_MARK, APLOG_ERR|APLOG_NOERRNO, 0, f->r,
- "php failed to get server context");
- return HTTP_INTERNAL_SERVER_ERROR;
- }
-
- if ((rv = ap_get_brigade(f->next, bb, mode, block, readbytes)) != APR_SUCCESS) {
- return rv;
- }
-
- for (b = APR_BRIGADE_FIRST(bb); b != APR_BRIGADE_SENTINEL(bb); b = APR_BUCKET_NEXT(b)) {
- apr_bucket_read(b, &str, &n, 1);
- if (n > 0) {
- old_index = ctx->post_len;
- ctx->post_len += n;
- ctx->post_data = realloc(ctx->post_data, ctx->post_len + 1);
- memcpy(ctx->post_data + old_index, str, n);
- }
- }
- return APR_SUCCESS;
-}
-
-static void php_apache_request_ctor(ap_filter_t *f, php_struct *ctx TSRMLS_DC)
-{
- char *content_type;
- char *content_length;
- const char *auth;
-
- PG(during_request_startup) = 0;
- SG(sapi_headers).http_response_code = !f->r->status ? HTTP_OK : f->r->status;
- SG(request_info).content_type = apr_table_get(f->r->headers_in, "Content-Type");
-#undef safe_strdup
-#define safe_strdup(x) ((x)?strdup((x)):NULL)
- SG(request_info).query_string = safe_strdup(f->r->args);
- SG(request_info).request_method = f->r->method;
- SG(request_info).request_uri = safe_strdup(f->r->uri);
- SG(request_info).path_translated = safe_strdup(f->r->filename);
- f->r->no_local_copy = 1;
- content_type = sapi_get_default_content_type(TSRMLS_C);
- f->r->content_type = apr_pstrdup(f->r->pool, content_type);
- SG(request_info).post_data = ctx->post_data;
- SG(request_info).post_data_length = ctx->post_len;
-
- efree(content_type);
-
- content_length = (char *) apr_table_get(f->r->headers_in, "Content-Length");
- SG(request_info).content_length = (content_length ? atoi(content_length) : 0);
-
- apr_table_unset(f->r->headers_out, "Content-Length");
- apr_table_unset(f->r->headers_out, "Last-Modified");
- apr_table_unset(f->r->headers_out, "Expires");
- apr_table_unset(f->r->headers_out, "ETag");
- if (!PG(safe_mode) || (PG(safe_mode) && !ap_auth_type(f->r))) {
- auth = apr_table_get(f->r->headers_in, "Authorization");
- php_handle_auth_data(auth TSRMLS_CC);
- } else {
- SG(request_info).auth_user = NULL;
- SG(request_info).auth_password = NULL;
- }
- php_request_startup(TSRMLS_C);
-}
-
-static void php_apache_request_dtor(ap_filter_t *f TSRMLS_DC)
-{
- php_request_shutdown(NULL);
-
- if (SG(request_info).query_string) {
- free(SG(request_info).query_string);
- }
- if (SG(request_info).request_uri) {
- free(SG(request_info).request_uri);
- }
-}
-
-static int php_output_filter(ap_filter_t *f, apr_bucket_brigade *bb)
-{
- php_struct *ctx;
- apr_bucket *b;
- void *conf = ap_get_module_config(f->r->per_dir_config, &php5_module);
- char *p = get_php_config(conf, "engine", sizeof("engine"));
- TSRMLS_FETCH();
-
- if (f->r->proxyreq) {
- zend_try {
- zend_ini_deactivate(TSRMLS_C);
- } zend_end_try();
- return ap_pass_brigade(f->next, bb);
- }
-
- /* handle situations where user turns the engine off */
- if (*p == '0') {
- zend_try {
- zend_ini_deactivate(TSRMLS_C);
- } zend_end_try();
- return ap_pass_brigade(f->next, bb);
- }
-
- /* Setup the CGI variables if this is the main request.. */
- if (f->r->main == NULL ||
- /* .. or if the sub-request envinronment differs from the main-request. */
- f->r->subprocess_env != f->r->main->subprocess_env
- ) {
- /* setup standard CGI variables */
- ap_add_common_vars(f->r);
- ap_add_cgi_vars(f->r);
- }
-
- ctx = SG(server_context);
- if (ctx == NULL) {
- ap_log_rerror(APLOG_MARK, APLOG_ERR|APLOG_NOERRNO, 0, f->r,
- "php failed to get server context");
- zend_try {
- zend_ini_deactivate(TSRMLS_C);
- } zend_end_try();
- return HTTP_INTERNAL_SERVER_ERROR;
- }
- ctx->f = f; /* save whatever filters are after us in the chain. */
-
- if (ctx->request_processed) {
- zend_try {
- zend_ini_deactivate(TSRMLS_C);
- } zend_end_try();
- return ap_pass_brigade(f->next, bb);
- }
-
- for (b = APR_BRIGADE_FIRST(bb); b != APR_BRIGADE_SENTINEL(bb); b = APR_BUCKET_NEXT(b)) {
- zend_file_handle zfd;
-
- if (!ctx->request_processed && APR_BUCKET_IS_FILE(b)) {
- const char *path;
- apr_bucket_brigade *prebb = bb;
-
- /* Split the brigade into two brigades before and after
- * the file bucket. Leave the "after the FILE" brigade
- * in the original bb, so it gets passed outside of this
- * loop. */
- bb = apr_brigade_split(prebb, b);
-
- /* Pass the "before the FILE" brigade here
- * (if it's non-empty). */
- if (!APR_BRIGADE_EMPTY(prebb)) {
- apr_status_t rv;
- rv = ap_pass_brigade(f->next, prebb);
- /* XXX: destroy the prebb, since we know we're
- * done with it? */
- if (rv != APR_SUCCESS || ctx->r->connection->aborted) {
- php_handle_aborted_connection();
- }
- }
-
- apply_config(conf);
- php_apache_request_ctor(f, ctx TSRMLS_CC);
-
- apr_file_name_get(&path, ((apr_bucket_file *) b->data)->fd);
-
- /* Determine if we need to parse the file or show the source */
- if (strncmp(ctx->r->handler, "application/x-httpd-php-source", sizeof("application/x-httpd-php-source"))) {
- zfd.type = ZEND_HANDLE_FILENAME;
- zfd.filename = (char *) path;
- zfd.free_filename = 0;
- zfd.opened_path = NULL;
-
- php_execute_script(&zfd TSRMLS_CC);
-#if MEMORY_LIMIT
- {
- char *mem_usage;
-
- mem_usage = apr_psprintf(ctx->r->pool, "%u", AG(allocated_memory_peak));
- AG(allocated_memory_peak) = 0;
- apr_table_set(ctx->r->notes, "mod_php_memory_usage", mem_usage);
- }
-#endif
- } else {
- zend_syntax_highlighter_ini syntax_highlighter_ini;
-
- php_get_highlight_struct(&syntax_highlighter_ini);
-
- highlight_file((char *)path, &syntax_highlighter_ini TSRMLS_CC);
- }
-
- php_apache_request_dtor(f TSRMLS_CC);
-
- if (!f->r->main) {
- ctx->request_processed = 1;
- }
-
- /* Delete the FILE bucket from the brigade. */
- apr_bucket_delete(b);
-
- /* We won't handle any more buckets in this brigade, so
- * it's ok to break out now. */
- break;
- }
- }
-
- /* Pass whatever is left on the brigade. */
- return ap_pass_brigade(f->next, bb);
-}
-
-static apr_status_t
-php_apache_server_shutdown(void *tmp)
-{
- apache2_sapi_module.shutdown(&apache2_sapi_module);
- sapi_shutdown();
-#ifdef ZTS
- tsrm_shutdown();
-#endif
- return APR_SUCCESS;
-}
-
-static void php_apache_add_version(apr_pool_t *p)
-{
- TSRMLS_FETCH();
- if (PG(expose_php)) {
- ap_add_version_component(p, "PHP/" PHP_VERSION);
- }
-}
-
-static int php_pre_config(apr_pool_t *pconf, apr_pool_t *plog, apr_pool_t *ptemp)
-{
-#ifndef ZTS
- int threaded_mpm;
-
- ap_mpm_query(AP_MPMQ_IS_THREADED, &threaded_mpm);
- if(threaded_mpm) {
- ap_log_error(APLOG_MARK, APLOG_CRIT, 0, 0, "Apache is running a threaded MPM, but your PHP Module is not compiled to be threadsafe. You need to recompile PHP.");
- return DONE;
- }
-#endif
- /* When this is NULL, apache won't override the hard-coded default
- * php.ini path setting. */
- apache2_php_ini_path_override = NULL;
- return OK;
-}
-
-static int
-php_apache_server_startup(apr_pool_t *pconf, apr_pool_t *plog,
- apr_pool_t *ptemp, server_rec *s)
-{
- void *data = NULL;
- const char *userdata_key = "apache2filter_post_config";
-
- /* Apache will load, unload and then reload a DSO module. This
- * prevents us from starting PHP until the second load. */
- apr_pool_userdata_get(&data, userdata_key, s->process->pool);
- if (data == NULL) {
- /* We must use set() here and *not* setn(), otherwise the
- * static string pointed to by userdata_key will be mapped
- * to a different location when the DSO is reloaded and the
- * pointers won't match, causing get() to return NULL when
- * we expected it to return non-NULL. */
- apr_pool_userdata_set((const void *)1, userdata_key,
- apr_pool_cleanup_null, s->process->pool);
- return OK;
- }
-
- /* Set up our overridden path. */
- if (apache2_php_ini_path_override) {
- apache2_sapi_module.php_ini_path_override = apache2_php_ini_path_override;
- }
-#ifdef ZTS
- tsrm_startup(1, 1, 0, NULL);
-#endif
- sapi_startup(&apache2_sapi_module);
- apache2_sapi_module.startup(&apache2_sapi_module);
- apr_pool_cleanup_register(pconf, NULL, php_apache_server_shutdown, apr_pool_cleanup_null);
- php_apache_add_version(pconf);
-
- return OK;
-}
-
-static void php_add_filter(request_rec *r, ap_filter_t *f)
-{
- int output = (f == r->output_filters);
-
- /* for those who still have Set*Filter PHP configured */
- while (f) {
- if (strcmp(f->frec->name, "PHP") == 0) {
- ap_log_error(APLOG_MARK, APLOG_WARNING | APLOG_NOERRNO,
- 0, r->server,
- "\"Set%sFilter PHP\" already configured for %s",
- output ? "Output" : "Input", r->uri);
- return;
- }
- f = f->next;
- }
-
- if (output) {
- ap_add_output_filter("PHP", NULL, r, r->connection);
- } else {
- ap_add_input_filter("PHP", NULL, r, r->connection);
- }
-}
-
-static void php_insert_filter(request_rec *r)
-{
- int content_type_len = strlen("application/x-httpd-php");
-
- if (r->content_type && !strncmp(r->content_type, "application/x-httpd-php", content_type_len-1)) {
- if (r->content_type[content_type_len] == '\0' || !strncmp(r->content_type+content_type_len, "-source", sizeof("-source"))) {
- php_add_filter(r, r->output_filters);
- php_add_filter(r, r->input_filters);
- }
- }
-}
-
-static apr_status_t php_server_context_cleanup(void *data_)
-{
- void **data = data_;
- *data = NULL;
- return APR_SUCCESS;
-}
-
-static int php_post_read_request(request_rec *r)
-{
- php_struct *ctx;
- TSRMLS_FETCH();
-
- /* Initialize filter context */
- SG(server_context) = ctx = apr_pcalloc(r->pool, sizeof(*ctx));
-
- /* register a cleanup so we clear out the SG(server_context)
- * after each request. Note: We pass in the pointer to the
- * server_context in case this is handled by a different thread. */
- apr_pool_cleanup_register(r->pool, (void *)&SG(server_context),
- php_server_context_cleanup,
- apr_pool_cleanup_null);
-
- /* Save the entire request, so we can get the input or output
- * filters if we need them. */
- ctx->r = r;
-
- return OK;
-}
-
-static void php_register_hook(apr_pool_t *p)
-{
- ap_hook_pre_config(php_pre_config, NULL, NULL, APR_HOOK_MIDDLE);
- ap_hook_post_config(php_apache_server_startup, NULL, NULL, APR_HOOK_MIDDLE);
- ap_hook_insert_filter(php_insert_filter, NULL, NULL, APR_HOOK_MIDDLE);
- ap_hook_post_read_request(php_post_read_request, NULL, NULL, APR_HOOK_MIDDLE);
- ap_register_output_filter("PHP", php_output_filter, php_apache_disable_caching, AP_FTYPE_RESOURCE);
- ap_register_input_filter("PHP", php_input_filter, php_apache_disable_caching, AP_FTYPE_RESOURCE);
-}
-
-AP_MODULE_DECLARE_DATA module php5_module = {
- STANDARD20_MODULE_STUFF,
- create_php_config, /* create per-directory config structure */
- merge_php_config, /* merge per-directory config structures */
- NULL, /* create per-server config structure */
- NULL, /* merge per-server config structures */
- php_dir_cmds, /* command apr_table_t */
- php_register_hook /* register hooks */
-};
-
-/*
- * 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/sapi/apache2handler/CREDITS b/sapi/apache2handler/CREDITS
deleted file mode 100644
index 4a7848053c..0000000000
--- a/sapi/apache2handler/CREDITS
+++ /dev/null
@@ -1,2 +0,0 @@
-Apache 2.0 Handler
-Ian Holsman, Justin Erenkrantz (based on Apache 2.0 Filter code)
diff --git a/sapi/apache2handler/EXPERIMENTAL b/sapi/apache2handler/EXPERIMENTAL
deleted file mode 100644
index 293159a693..0000000000
--- a/sapi/apache2handler/EXPERIMENTAL
+++ /dev/null
@@ -1,5 +0,0 @@
-this module 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/sapi/apache2handler/README b/sapi/apache2handler/README
deleted file mode 100644
index 5cbd1b95dd..0000000000
--- a/sapi/apache2handler/README
+++ /dev/null
@@ -1,76 +0,0 @@
-WHAT IS THIS?
-
- This module exploits the layered I/O support in Apache 2.0.
-
-HOW DOES IT WORK?
-
- In Apache 2.0, you have handlers which generate content (like
- reading a script from disk). The content goes then through
- a chain of filters. PHP can be such a filter, so that it processes
- your script and hands the output to the next filter (which will
- usually cause a write to the network).
-
-DOES IT WORK?
-
- Currently the issues with the module are:
- * Thread safety of external PHP modules
- * The lack of re-entrancy of PHP. due to this I have disabled the 'virtual'
- function, and tried to stop any method where a php script can run another php
- script while it is being run.
-
-
-HOW TO INSTALL
-
- This SAPI module is known to work with Apache 2.0.44.
-
- $ cd apache-2.x
- $ cd src
- $ ./configure --enable-so
- $ make install
-
- For testing purposes, you might want to use --with-mpm=prefork.
- (Albeit PHP also works with threaded MPMs. See Thread Safety note above)
-
- Configure PHP 4:
-
- $ cd php-4.x
- $ ./configure --with-apxs2=/path/to/apache-2.0/bin/apxs
- $ make install
-
- At the end of conf/httpd.conf, add:
-
- AddType application/x-httpd-php .php
-
- If you would like to enable source code highlighting functionality add:
-
- AddType application/x-httpd-php-source .phps
-
- That's it. Now start bin/httpd.
-
-HOW TO CONFIGURE
-
- The Apache 2.0 PHP module supports a new configuration directive that
- allows an admin to override the php.ini search path. For example,
- place your php.ini file in Apache's ServerRoot/conf directory and
- add this to your httpd.conf file:
-
- PHPINIDir "conf"
-
-DEBUGGING APACHE AND PHP
-
- To debug Apache, we recommened:
-
- 1. Use the Prefork MPM (Apache 1.3-like process model) by
- configuring Apache with '--with-mpm=prefork'.
- 2. Start httpd using -DONE_PROCESS (e.g. (gdb) r -DONE_PROCESS).
-
- If you want to debug a part of the PHP startup procedure, set a
- breakpoint on 'load_module'. Step through it until apr_dso_load() is
- done. Then you can set a breakpoint on any PHP-related symbol.
-
-TODO
-
- PHP functions like apache_sub_req (see php_functions.c)
- Source Code Highlighting
- Protocol handlers
-
diff --git a/sapi/apache2handler/apache_config.c b/sapi/apache2handler/apache_config.c
deleted file mode 100644
index bf0b2e0cc3..0000000000
--- a/sapi/apache2handler/apache_config.c
+++ /dev/null
@@ -1,212 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Sascha Schumann <sascha@schumann.cx> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-#define ZEND_INCLUDE_FULL_WINDOWS_HEADERS
-
-#include "php.h"
-#include "php_ini.h"
-#include "php_apache.h"
-
-#include "apr_strings.h"
-#include "ap_config.h"
-#include "util_filter.h"
-#include "httpd.h"
-#include "http_config.h"
-#include "http_request.h"
-#include "http_core.h"
-#include "http_protocol.h"
-#include "http_log.h"
-#include "http_main.h"
-#include "util_script.h"
-#include "http_core.h"
-
-#ifdef PHP_AP_DEBUG
-#define phpapdebug(a) fprintf a
-#else
-#define phpapdebug(a)
-#endif
-
-typedef struct {
- HashTable config;
-} php_conf_rec;
-
-typedef struct {
- char *value;
- size_t value_len;
- char status;
-} php_dir_entry;
-
-static const char *real_value_hnd(cmd_parms *cmd, void *dummy, const char *name, const char *value, int status)
-{
- php_conf_rec *d = dummy;
- php_dir_entry e;
-
- phpapdebug((stderr, "Getting %s=%s for %p (%d)\n", name, value, dummy, zend_hash_num_elements(&d->config)));
-
- if (!strncasecmp(value, "none", sizeof("none"))) {
- value = "";
- }
-
- e.value = apr_pstrdup(cmd->pool, value);
- e.value_len = strlen(value);
- e.status = status;
-
- zend_hash_update(&d->config, (char *) name, strlen(name) + 1, &e, sizeof(e), NULL);
- return NULL;
-}
-
-static const char *php_apache_value_handler(cmd_parms *cmd, void *dummy, const char *name, const char *value)
-{
- return real_value_hnd(cmd, dummy, name, value, PHP_INI_PERDIR);
-}
-
-static const char *php_apache_admin_value_handler(cmd_parms *cmd, void *dummy, const char *name, const char *value)
-{
- return real_value_hnd(cmd, dummy, name, value, PHP_INI_SYSTEM);
-}
-
-static const char *real_flag_hnd(cmd_parms *cmd, void *dummy, const char *arg1, const char *arg2, int status)
-{
- char bool_val[2];
-
- if (!strcasecmp(arg2, "On") || (arg2[0] == '1' && arg2[1] == '\0')) {
- bool_val[0] = '1';
- } else {
- bool_val[0] = '0';
- }
- bool_val[1] = 0;
-
- return real_value_hnd(cmd, dummy, arg1, bool_val, status);
-}
-
-static const char *php_apache_flag_handler(cmd_parms *cmd, void *dummy, const char *name, const char *value)
-{
- return real_flag_hnd(cmd, dummy, name, value, PHP_INI_PERDIR);
-}
-
-static const char *php_apache_admin_flag_handler(cmd_parms *cmd, void *dummy, const char *name, const char *value)
-{
- return real_flag_hnd(cmd, dummy, name, value, PHP_INI_SYSTEM);
-}
-
-static const char *php_apache_phpini_set(cmd_parms *cmd, void *mconfig, const char *arg)
-{
- if (apache2_php_ini_path_override) {
- return "Only first PHPINIDir directive honored per configuration tree - subsequent ones ignored";
- }
- apache2_php_ini_path_override = ap_server_root_relative(cmd->pool, arg);
- return NULL;
-}
-
-
-void *merge_php_config(apr_pool_t *p, void *base_conf, void *new_conf)
-{
- php_conf_rec *d = base_conf, *e = new_conf;
- php_dir_entry *pe;
- php_dir_entry *data;
- char *str;
- uint str_len;
- ulong num_index;
-
- phpapdebug((stderr, "Merge dir (%p) (%p)\n", base_conf, new_conf));
- for (zend_hash_internal_pointer_reset(&d->config);
- zend_hash_get_current_key_ex(&d->config, &str, &str_len,
- &num_index, 0, NULL) == HASH_KEY_IS_STRING;
- zend_hash_move_forward(&d->config)) {
- pe = NULL;
- zend_hash_get_current_data(&d->config, (void **) &data);
- if (zend_hash_find(&e->config, str, str_len, (void **) &pe) == SUCCESS) {
- if (pe->status >= data->status) continue;
- }
- zend_hash_update(&e->config, str, str_len, data, sizeof(*data), NULL);
- phpapdebug((stderr, "ADDING/OVERWRITING %s (%d vs. %d)\n", str, data->status, pe?pe->status:-1));
- }
- return new_conf;
-}
-
-char *get_php_config(void *conf, char *name, size_t name_len)
-{
- php_conf_rec *d = conf;
- php_dir_entry *pe;
-
- if (zend_hash_find(&d->config, name, name_len, (void **) &pe) == SUCCESS) {
- return pe->value;
- }
-
- return "";
-}
-
-void apply_config(void *dummy)
-{
- php_conf_rec *d = dummy;
- char *str;
- uint str_len;
- php_dir_entry *data;
-
- for (zend_hash_internal_pointer_reset(&d->config);
- zend_hash_get_current_key_ex(&d->config, &str, &str_len, NULL, 0,
- NULL) == HASH_KEY_IS_STRING;
- zend_hash_move_forward(&d->config)) {
- zend_hash_get_current_data(&d->config, (void **) &data);
- phpapdebug((stderr, "APPLYING (%s)(%s)\n", str, data->value));
- if (zend_alter_ini_entry(str, str_len, data->value, data->value_len, data->status, PHP_INI_STAGE_RUNTIME) == FAILURE) {
- phpapdebug((stderr, "..FAILED\n"));
- }
- }
-}
-
-const command_rec php_dir_cmds[] =
-{
- AP_INIT_TAKE2("php_value", php_apache_value_handler, NULL, OR_OPTIONS, "PHP Value Modifier"),
- AP_INIT_TAKE2("php_flag", php_apache_flag_handler, NULL, OR_OPTIONS, "PHP Flag Modifier"),
- AP_INIT_TAKE2("php_admin_value", php_apache_admin_value_handler, NULL, ACCESS_CONF|RSRC_CONF, "PHP Value Modifier (Admin)"),
- AP_INIT_TAKE2("php_admin_flag", php_apache_admin_flag_handler, NULL, ACCESS_CONF|RSRC_CONF, "PHP Flag Modifier (Admin)"),
- AP_INIT_TAKE1("PHPINIDir", php_apache_phpini_set, NULL, RSRC_CONF, "Directory containing the php.ini file"),
- {NULL}
-};
-
-static apr_status_t destroy_php_config(void *data)
-{
- php_conf_rec *d = data;
-
- phpapdebug((stderr, "Destroying config %p\n", data));
- zend_hash_destroy(&d->config);
-
- return APR_SUCCESS;
-}
-
-void *create_php_config(apr_pool_t *p, char *dummy)
-{
- php_conf_rec *newx = (php_conf_rec *) apr_pcalloc(p, sizeof(*newx));
-
- phpapdebug((stderr, "Creating new config (%p) for %s\n", newx, dummy));
- zend_hash_init(&newx->config, 0, NULL, NULL, 1);
- apr_pool_cleanup_register(p, newx, destroy_php_config, apr_pool_cleanup_null);
- return (void *) newx;
-}
-
-/*
- * 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/sapi/apache2handler/config.m4 b/sapi/apache2handler/config.m4
deleted file mode 100644
index b370aa99ab..0000000000
--- a/sapi/apache2handler/config.m4
+++ /dev/null
@@ -1,129 +0,0 @@
-dnl
-dnl $Id$
-dnl
-
-AC_MSG_CHECKING(for Apache 2.0 handler-module support via DSO through APXS)
-AC_ARG_WITH(apxs2,
-[ --with-apxs2[=FILE] EXPERIMENTAL: Build shared Apache 2.0 module. FILE is the optional
- pathname to the Apache apxs tool; defaults to "apxs".],[
- if test "$withval" = "yes"; then
- APXS=apxs
- $APXS -q CFLAGS >/dev/null 2>&1
- if test "$?" != "0" && test -x /usr/sbin/apxs; then
- APXS=/usr/sbin/apxs
- fi
- else
- PHP_EXPAND_PATH($withval, APXS)
- fi
-
- $APXS -q CFLAGS >/dev/null 2>&1
- if test "$?" != "0"; then
- AC_MSG_RESULT()
- AC_MSG_RESULT()
- AC_MSG_RESULT([Sorry, I cannot run apxs. Possible reasons follow:])
- AC_MSG_RESULT()
- AC_MSG_RESULT([1. Perl is not installed])
- AC_MSG_RESULT([2. apxs was not found. Try to pass the path using --with-apxs2=/path/to/apxs])
- AC_MSG_RESULT([3. Apache was not built using --enable-so (the apxs usage page is displayed)])
- AC_MSG_RESULT()
- AC_MSG_RESULT([The output of $APXS follows:])
- $APXS -q CFLAGS
- AC_MSG_ERROR([Aborting])
- fi
-
- APXS_INCLUDEDIR=`$APXS -q INCLUDEDIR`
- APXS_BINDIR=`$APXS -q BINDIR`
- APXS_HTTPD=`$APXS -q SBINDIR`/`$APXS -q TARGET`
- APXS_CFLAGS=`$APXS -q CFLAGS`
- APXS_MPM=`$APXS -q MPM_NAME`
- APU_BINDIR=`$APXS -q APU_BINDIR`
- APR_BINDIR=`$APXS -q APR_BINDIR`
-
- # Pick up ap[ru]-N-config if using httpd >=2.1
- APR_CONFIG=`$APXS -q APR_CONFIG 2>/dev/null ||
- echo $APR_BINDIR/apr-config`
- APU_CONFIG=`$APXS -q APU_CONFIG 2>/dev/null ||
- echo $APU_BINDIR/apu-config`
-
- APR_CFLAGS="`$APR_CONFIG --cppflags --includes`"
- APU_CFLAGS="`$APU_CONFIG --includes`"
-
- for flag in $APXS_CFLAGS; do
- case $flag in
- -D*) APACHE_CPPFLAGS="$APACHE_CPPFLAGS $flag";;
- esac
- done
-
- APACHE_CFLAGS="$APACHE_CPPFLAGS -I$APXS_INCLUDEDIR $APR_CFLAGS $APU_CFLAGS"
-
- # Test that we're trying to configure with apache 2.x
- PHP_AP_EXTRACT_VERSION($APXS_HTTPD)
- if test "$APACHE_VERSION" -le 2000000; then
- AC_MSG_ERROR([You have enabled Apache 2 support while your server is Apache 1.3. Please use the appropiate switch --with-apxs (without the 2)])
- elif test "$APACHE_VERSION" -lt 2000044; then
- AC_MSG_ERROR([Please note that Apache version >= 2.0.44 is required.])
- fi
-
- APXS_LIBEXECDIR='$(INSTALL_ROOT)'`$APXS -q LIBEXECDIR`
- if test -z `$APXS -q SYSCONFDIR`; then
- INSTALL_IT="\$(mkinstalldirs) '$APXS_LIBEXECDIR' && \
- $APXS -S LIBEXECDIR='$APXS_LIBEXECDIR' \
- -i -n php5"
- else
- APXS_SYSCONFDIR='$(INSTALL_ROOT)'`$APXS -q SYSCONFDIR`
- INSTALL_IT="\$(mkinstalldirs) '$APXS_LIBEXECDIR' && \
- \$(mkinstalldirs) '$APXS_SYSCONFDIR' && \
- $APXS -S LIBEXECDIR='$APXS_LIBEXECDIR' \
- -S SYSCONFDIR='$APXS_SYSCONFDIR' \
- -i -a -n php5"
- fi
-
- case $host_alias in
- *aix*)
- EXTRA_LDFLAGS="$EXTRA_LDFLAGS -Wl,-brtl -Wl,-bI:$APXS_LIBEXECDIR/httpd.exp"
- PHP_SELECT_SAPI(apache2handler, shared, mod_php5.c sapi_apache2.c apache_config.c php_functions.c, $APACHE_CFLAGS)
- INSTALL_IT="$INSTALL_IT $SAPI_LIBTOOL"
- ;;
- *darwin*)
- dnl When using bundles on Darwin, we must resolve all symbols. However,
- dnl the linker does not recursively look at the bundle loader and
- dnl pull in its dependencies. Therefore, we must pull in the APR
- dnl and APR-util libraries.
- if test -x "$APR_BINDIR/apr-config"; then
- MH_BUNDLE_FLAGS="`$APR_BINDIR/apr-config --ldflags --link-ld --libs`"
- fi
- if test -x "$APU_BINDIR/apu-config"; then
- MH_BUNDLE_FLAGS="`$APU_BINDIR/apu-config --ldflags --link-ld --libs` $MH_BUNDLE_FLAGS"
- fi
- MH_BUNDLE_FLAGS="-bundle -bundle_loader $APXS_HTTPD $MH_BUNDLE_FLAGS"
- PHP_SUBST(MH_BUNDLE_FLAGS)
- PHP_SELECT_SAPI(apache2handler, bundle, mod_php5.c sapi_apache2.c apache_config.c php_functions.c, $APACHE_CFLAGS)
- SAPI_SHARED=libs/libphp5.so
- INSTALL_IT="$INSTALL_IT $SAPI_SHARED"
- ;;
- *beos*)
- if test -f _APP_; then `rm _APP_`; fi
- `ln -s $APXS_BINDIR/httpd _APP_`
- EXTRA_LIBS="$EXTRA_LIBS _APP_"
- PHP_SELECT_SAPI(apache2handler, shared, mod_php5.c sapi_apache2.c apache_config.c php_functions.c, $APACHE_CFLAGS)
- INSTALL_IT="$INSTALL_IT $SAPI_LIBTOOL"
- ;;
- *)
- PHP_SELECT_SAPI(apache2handler, shared, mod_php5.c sapi_apache2.c apache_config.c php_functions.c, $APACHE_CFLAGS)
- INSTALL_IT="$INSTALL_IT $SAPI_LIBTOOL"
- ;;
- esac
-
- if test "$APXS_MPM" != "prefork"; then
- PHP_BUILD_THREAD_SAFE
- fi
- AC_MSG_RESULT(yes)
-
- PHP_SUBST(APXS)
-],[
- AC_MSG_RESULT(no)
-])
-
-dnl ## Local Variables:
-dnl ## tab-width: 4
-dnl ## End:
diff --git a/sapi/apache2handler/config.w32 b/sapi/apache2handler/config.w32
deleted file mode 100644
index a409841070..0000000000
--- a/sapi/apache2handler/config.w32
+++ /dev/null
@@ -1,18 +0,0 @@
-// vim:ft=javascript
-// $Id$
-
-ARG_ENABLE('apache2handler', 'Build Apache 2.x handler', 'no');
-
-if (PHP_APACHE2HANDLER != "no") {
- if (CHECK_HEADER_ADD_INCLUDE("httpd.h", "CFLAGS_APACHE2HANDLER", PHP_PHP_BUILD + "\\apache2\\include") &&
- CHECK_LIB("libhttpd.lib", "apache2handler", PHP_PHP_BUILD + "\\apache2\\lib") &&
- CHECK_LIB("libapr.lib", "apache2handler", PHP_PHP_BUILD + "\\apache2\\lib") &&
- CHECK_LIB("libaprutil.lib", "apache2handler", PHP_PHP_BUILD + "\\apache2\\lib")
- ) {
- SAPI('apache2handler', 'mod_php5.c sapi_apache2.c apache_config.c php_functions.c',
- 'php' + PHP_VERSION + 'apache2.dll',
- '/D PHP_APACHE2_EXPORTS /I win32');
- } else {
- WARNING("Could not find apache2 libraries/headers");
- }
-}
diff --git a/sapi/apache2handler/mod_php5.c b/sapi/apache2handler/mod_php5.c
deleted file mode 100644
index 503d523c7d..0000000000
--- a/sapi/apache2handler/mod_php5.c
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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. |
- +----------------------------------------------------------------------+
- | Authors: Sascha Schumann <sascha@schumann.cx> |
- | Parts based on Apache 1.3 SAPI module by |
- | Rasmus Lerdorf and Zeev Suraski |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-#define ZEND_INCLUDE_FULL_WINDOWS_HEADERS
-
-#include "php.h"
-#include "php_apache.h"
-
-AP_MODULE_DECLARE_DATA module php5_module = {
- STANDARD20_MODULE_STUFF,
- create_php_config, /* create per-directory config structure */
- merge_php_config, /* merge per-directory config structures */
- NULL, /* create per-server config structure */
- NULL, /* merge per-server config structures */
- php_dir_cmds, /* command apr_table_t */
- php_ap2_register_hook /* register hooks */
-};
-
-/*
- * 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/sapi/apache2handler/php.sym b/sapi/apache2handler/php.sym
deleted file mode 100644
index 9ad0f0a0ad..0000000000
--- a/sapi/apache2handler/php.sym
+++ /dev/null
@@ -1 +0,0 @@
-php5_module
diff --git a/sapi/apache2handler/php5apache2.dsp b/sapi/apache2handler/php5apache2.dsp
deleted file mode 100644
index 40cd58cb92..0000000000
--- a/sapi/apache2handler/php5apache2.dsp
+++ /dev/null
@@ -1,146 +0,0 @@
-# Microsoft Developer Studio Project File - Name="php5apache2" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=php5apache2 - Win32 Debug_TS
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "php5apache2.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "php5apache2.mak" CFG="php5apache2 - Win32 Debug_TS"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "php5apache2 - Win32 Release_TS" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "php5apache2 - Win32 Release_TS_inline" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "php5apache2 - Win32 Debug_TS" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "php5apache2 - Win32 Release_TS"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release_TS"
-# PROP BASE Intermediate_Dir "Release_TS"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "..\..\Release_TS"
-# PROP Intermediate_Dir "Release_TS"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "PHP_APACHE2_EXPORTS" /YX /FD /c
-# ADD CPP /nologo /MD /W3 /GX /O2 /I "...\..\include" /I "..\..\win32" /I "..\..\Zend" /I "..\.." /I "..\..\..\bindlib_w32" /I "..\..\main" /I "..\..\TSRM" /D ZEND_DEBUG=0 /D "NDEBUG" /D "ZTS" /D "ZEND_WIN32" /D "PHP_WIN32" /D "_WINDOWS" /D "_USRDLL" /D "WIN32" /D "_MBCS" /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x407 /d "NDEBUG"
-# ADD RSC /l 0x407 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386
-# ADD LINK32 php5ts.lib libhttpd.lib libapr.lib libaprutil.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 /libpath:"..\..\Release_TS" /libpath:"..\..\TSRM\Release_TS" /libpath:"..\..\Zend\Release_TS"
-
-!ELSEIF "$(CFG)" == "php5apache2 - Win32 Release_TS_inline"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release_TS_inline"
-# PROP BASE Intermediate_Dir "Release_TS_inline"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "..\..\Release_TS_inline"
-# PROP Intermediate_Dir "Release_TS_inline"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "PHP_APACHE2_EXPORTS" /YX /FD /c
-# ADD CPP /nologo /MD /W3 /GX /O2 /I "...\..\include" /I "..\..\win32" /I "..\..\Zend" /I "..\.." /I "..\..\..\bindlib_w32" /I "..\..\main" /I "..\..\TSRM" /D ZEND_DEBUG=0 /D "ZEND_WIN32_FORCE_INLINE" /D "NDEBUG" /D "ZTS" /D "ZEND_WIN32" /D "PHP_WIN32" /D "_WINDOWS" /D "_USRDLL" /D "WIN32" /D "_MBCS" /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x407 /d "NDEBUG"
-# ADD RSC /l 0x407 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386
-# ADD LINK32 php5ts.lib libhttpd.lib libapr.lib libaprutil.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 /out:"..\..\Release_TS_inline/php5apache2.dll" /libpath:"..\..\Release_TS_inline" /libpath:"..\..\TSRM\Release_TS_inline" /libpath:"..\..\Zend\Release_TS_inline"
-
-!ELSEIF "$(CFG)" == "php5apache2 - Win32 Debug_TS"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug_TS"
-# PROP BASE Intermediate_Dir "Debug_TS"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "..\..\Debug_TS"
-# PROP Intermediate_Dir "Debug_TS"
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "PHP_APACHE2_EXPORTS" /YX /FD /GZ /c
-# ADD CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /I "...\..\include" /I "..\..\win32" /I "..\..\Zend" /I "..\.." /I "..\..\..\bindlib_w32" /I "..\..\main" /I "..\..\TSRM" /D "_DEBUG" /D ZEND_DEBUG=1 /D "ZTS" /D "ZEND_WIN32" /D "PHP_WIN32" /D "_WINDOWS" /D "_USRDLL" /D "WIN32" /D "_MBCS" /YX /FD /GZ /c
-# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x407 /d "_DEBUG"
-# ADD RSC /l 0x407 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 php5ts_debug.lib libhttpd.lib libapr.lib libaprutil.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept /libpath:"..\..\Debug_TS" /libpath:"..\..\TSRM\Debug_TS" /libpath:"..\..\Zend\Debug_TS"
-
-!ENDIF
-
-# Begin Target
-
-# Name "php5apache2 - Win32 Release_TS"
-# Name "php5apache2 - Win32 Release_TS_inline"
-# Name "php5apache2 - Win32 Debug_TS"
-# Begin Group "Source Files"
-
-# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
-# Begin Source File
-
-SOURCE=.\apache_config.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\mod_php5.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\php_functions.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\sapi_apache2.c
-# End Source File
-# End Group
-# Begin Group "Header Files"
-
-# PROP Default_Filter "h;hpp;hxx;hm;inl"
-# Begin Source File
-
-SOURCE=.\php_apache.h
-# End Source File
-# End Group
-# End Target
-# End Project
diff --git a/sapi/apache2handler/php_apache.h b/sapi/apache2handler/php_apache.h
deleted file mode 100644
index 33fe24957a..0000000000
--- a/sapi/apache2handler/php_apache.h
+++ /dev/null
@@ -1,84 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Sascha Schumann <sascha@schumann.cx> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-#ifndef PHP_APACHE_H
-#define PHP_APACHE_H
-
-#include "httpd.h"
-#include "http_config.h"
-#include "http_core.h"
-
-/* Declare this so we can get to it from outside the sapi_apache2.c file */
-extern module AP_MODULE_DECLARE_DATA php5_module;
-
-/* A way to specify the location of the php.ini dir in an apache directive */
-extern char *apache2_php_ini_path_override;
-
-/* The server_context used by PHP */
-typedef struct php_struct {
- int state;
- request_rec *r;
- apr_bucket_brigade *brigade;
- /* stat structure of the current file */
-#if defined(NETWARE) && defined(CLIB_STAT_PATCH)
- struct stat_libc finfo;
-#else
- struct stat finfo;
-#endif
- /* Whether or not we've processed PHP in the output filters yet. */
- int request_processed;
-} php_struct;
-
-void *merge_php_config(apr_pool_t *p, void *base_conf, void *new_conf);
-void *create_php_config(apr_pool_t *p, char *dummy);
-char *get_php_config(void *conf, char *name, size_t name_len);
-void apply_config(void *);
-extern const command_rec php_dir_cmds[];
-void php_ap2_register_hook(apr_pool_t *p);
-
-#define APR_ARRAY_FOREACH_OPEN(arr, key, val) \
-{ \
- apr_table_entry_t *elts; \
- int i; \
- elts = (apr_table_entry_t *) arr->elts; \
- for (i = 0; i < arr->nelts; i++) { \
- key = elts[i].key; \
- val = elts[i].val;
-
-#define APR_ARRAY_FOREACH_CLOSE() }}
-
-typedef struct {
- long engine;
- long xbithack;
- long last_modified;
-} php_apache2_info_struct;
-
-extern zend_module_entry apache2_module_entry;
-
-#ifdef ZTS
-extern int php_apache2_info_id;
-#define AP2(v) TSRMG(php_apache2_info_id, php_apache2_info_struct *, v)
-#else
-extern php_apache2_info_struct php_apache2_info;
-#define AP2(v) (php_apache2_info.v)
-#endif
-
-
-#endif /* PHP_APACHE_H */
diff --git a/sapi/apache2handler/php_functions.c b/sapi/apache2handler/php_functions.c
deleted file mode 100644
index fca55d9c33..0000000000
--- a/sapi/apache2handler/php_functions.c
+++ /dev/null
@@ -1,514 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Sascha Schumann <sascha@schumann.cx> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-#define ZEND_INCLUDE_FULL_WINDOWS_HEADERS
-
-#include "php.h"
-#include "ext/standard/php_smart_str.h"
-#include "ext/standard/info.h"
-#include "ext/standard/head.h"
-#include "php_ini.h"
-#include "SAPI.h"
-
-#define CORE_PRIVATE
-#include "apr_strings.h"
-#include "apr_time.h"
-#include "ap_config.h"
-#include "util_filter.h"
-#include "httpd.h"
-#include "http_config.h"
-#include "http_request.h"
-#include "http_core.h"
-#include "http_protocol.h"
-#include "http_log.h"
-#include "http_main.h"
-#include "util_script.h"
-#include "http_core.h"
-#include "ap_mpm.h"
-#if !defined(WIN32) && !defined(WINNT)
-#include "unixd.h"
-#endif
-
-#include "php_apache.h"
-
-#ifdef ZTS
-int php_apache2_info_id;
-#else
-php_apache2_info_struct php_apache2_info;
-#endif
-
-#define SECTION(name) PUTS("<h2>" name "</h2>\n")
-
-static request_rec *php_apache_lookup_uri(char *filename TSRMLS_DC)
-{
- php_struct *ctx;
-
- if (!filename) {
- return NULL;
- }
-
- ctx = SG(server_context);
- return ap_sub_req_lookup_uri(filename, ctx->r, ctx->r->output_filters);
-}
-
-/* {{{ proto bool virtual(string uri)
- Perform an apache sub-request */
-PHP_FUNCTION(virtual)
-{
- zval **filename;
- request_rec *rr;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &filename) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_string_ex(filename);
-
-
- if (!(rr = php_apache_lookup_uri(Z_STRVAL_PP(filename) TSRMLS_CC))) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to include '%s' - URI lookup failed", Z_STRVAL_PP(filename));
- RETURN_FALSE;
- }
-
- if (rr->status != HTTP_OK) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to include '%s' - error finding URI", Z_STRVAL_PP(filename));
- ap_destroy_sub_req(rr);
- RETURN_FALSE;
- }
-
- /* Flush everything. */
- php_end_ob_buffers(1 TSRMLS_CC);
- php_header(TSRMLS_C);
-
- if (ap_run_sub_req(rr)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to include '%s' - request execution failed", Z_STRVAL_PP(filename));
- ap_destroy_sub_req(rr);
- RETURN_FALSE;
- }
- ap_destroy_sub_req(rr);
- RETURN_TRUE;
-}
-/* }}} */
-
-#define ADD_LONG(name) \
- add_property_long(return_value, #name, rr->name)
-#define ADD_TIME(name) \
- add_property_long(return_value, #name, rr->name / APR_USEC_PER_SEC);
-#define ADD_STRING(name) \
- if (rr->name) add_property_string(return_value, #name, (char *) rr->name, 1)
-
-PHP_FUNCTION(apache_lookup_uri)
-{
- request_rec *rr;
- zval **filename;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &filename) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_string_ex(filename);
-
- if (!(rr = php_apache_lookup_uri(Z_STRVAL_PP(filename) TSRMLS_CC))) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to include '%s' - URI lookup failed", Z_STRVAL_PP(filename));
- RETURN_FALSE;
- }
-
- if (rr->status == HTTP_OK) {
- object_init(return_value);
-
- ADD_LONG(status);
- ADD_STRING(the_request);
- ADD_STRING(status_line);
- ADD_STRING(method);
- ADD_TIME(mtime);
- ADD_LONG(clength);
-#if MODULE_MAGIC_NUMBER < 20020506
- ADD_STRING(boundary);
-#endif
- ADD_STRING(range);
- ADD_LONG(chunked);
- ADD_STRING(content_type);
- ADD_STRING(handler);
- ADD_LONG(no_cache);
- ADD_LONG(no_local_copy);
- ADD_STRING(unparsed_uri);
- ADD_STRING(uri);
- ADD_STRING(filename);
- ADD_STRING(path_info);
- ADD_STRING(args);
- ADD_LONG(allowed);
- ADD_LONG(sent_bodyct);
- ADD_LONG(bytes_sent);
- ADD_LONG(request_time);
- ADD_LONG(mtime);
- ADD_TIME(request_time);
-
- ap_destroy_sub_req(rr);
- return;
- }
-
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to include '%s' - error finding URI", Z_STRVAL_PP(filename));
- ap_destroy_sub_req(rr);
- RETURN_FALSE;
-}
-
-/* {{{ proto array getallheaders(void)
- Fetch all HTTP request headers */
-PHP_FUNCTION(apache_request_headers)
-{
- php_struct *ctx;
- const apr_array_header_t *arr;
- char *key, *val;
-
- array_init(return_value);
-
- ctx = SG(server_context);
- arr = apr_table_elts(ctx->r->headers_in);
-
- APR_ARRAY_FOREACH_OPEN(arr, key, val)
- if (!val) val = "";
- add_assoc_string(return_value, key, val, 1);
- APR_ARRAY_FOREACH_CLOSE()
-}
-/* }}} */
-
-/* {{{ proto array apache_response_headers(void)
- Fetch all HTTP response headers */
-PHP_FUNCTION(apache_response_headers)
-{
- php_struct *ctx;
- const apr_array_header_t *arr;
- char *key, *val;
-
- array_init(return_value);
-
- ctx = SG(server_context);
- arr = apr_table_elts(ctx->r->headers_out);
-
- APR_ARRAY_FOREACH_OPEN(arr, key, val)
- if (!val) val = "";
- add_assoc_string(return_value, key, val, 1);
- APR_ARRAY_FOREACH_CLOSE()
-}
-/* }}} */
-
-/* {{{ proto string apache_note(string note_name [, string note_value])
- Get and set Apache request notes */
-PHP_FUNCTION(apache_note)
-{
- php_struct *ctx;
- zval **note_name, **note_val;
- char *old_note_val=NULL;
- int arg_count = ZEND_NUM_ARGS();
-
- if (arg_count<1 || arg_count>2 ||
- zend_get_parameters_ex(arg_count, &note_name, &note_val) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ctx = SG(server_context);
-
- convert_to_string_ex(note_name);
-
- old_note_val = (char *) apr_table_get(ctx->r->notes, Z_STRVAL_PP(note_name));
-
- if (arg_count == 2) {
- convert_to_string_ex(note_val);
- apr_table_set(ctx->r->notes, Z_STRVAL_PP(note_name), Z_STRVAL_PP(note_val));
- }
-
- if (old_note_val) {
- RETURN_STRING(old_note_val, 1);
- } else {
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-
-/* {{{ proto bool apache_setenv(string variable, string value [, bool walk_to_top])
- Set an Apache subprocess_env variable */
-/*
- * XXX this doesn't look right. shouldn't it be the parent ?*/
-PHP_FUNCTION(apache_setenv)
-{
- php_struct *ctx;
- zval **variable=NULL, **string_val=NULL, **walk_to_top=NULL;
- int arg_count = ZEND_NUM_ARGS();
- request_rec *r;
-
- if (arg_count<1 || arg_count>3 ||
- zend_get_parameters_ex(arg_count, &variable, &string_val, &walk_to_top) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ctx = SG(server_context);
-
- r = ctx->r;
- if (arg_count == 3 && Z_STRVAL_PP(walk_to_top)) {
- while(r->prev) {
- r = r->prev;
- }
- }
-
- convert_to_string_ex(variable);
- convert_to_string_ex(string_val);
-
- apr_table_set(r->subprocess_env, Z_STRVAL_PP(variable), Z_STRVAL_PP(string_val));
-
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto bool apache_getenv(string variable [, bool walk_to_top])
- Get an Apache subprocess_env variable */
-/*
- * XXX: shouldn't this be the parent not the 'prev'
- */
-PHP_FUNCTION(apache_getenv)
-{
- php_struct *ctx;
- zval **variable=NULL, **walk_to_top=NULL;
- int arg_count = ZEND_NUM_ARGS();
- char *env_val=NULL;
- request_rec *r;
-
- if (arg_count<1 || arg_count>2 ||
- zend_get_parameters_ex(arg_count, &variable, &walk_to_top) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ctx = SG(server_context);
-
- r = ctx->r;
- if (arg_count == 2 && Z_STRVAL_PP(walk_to_top)) {
- while(r->prev) {
- r = r->prev;
- }
- }
-
- convert_to_string_ex(variable);
-
- env_val = (char*) apr_table_get(r->subprocess_env, Z_STRVAL_PP(variable));
- if (env_val != NULL) {
- RETURN_STRING(env_val, 1);
- } else {
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-static char *php_apache_get_version()
-{
- return (char *) ap_get_server_version();
-}
-
-/* {{{ proto string apache_get_version(void)
- Fetch Apache version */
-PHP_FUNCTION(apache_get_version)
-{
- char *apv = php_apache_get_version();
-
- if (apv && *apv) {
- RETURN_STRING(apv, 1);
- } else {
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-/* {{{ proto array apache_get_modules(void)
- Get a list of loaded Apache modules */
-PHP_FUNCTION(apache_get_modules)
-{
- int n;
- char *p;
-
- array_init(return_value);
-
- for (n = 0; ap_loaded_modules[n]; ++n) {
- char *s = (char *) ap_loaded_modules[n]->name;
- if ((p = strchr(s, '.'))) {
- add_next_index_stringl(return_value, s, (p - s), 1);
- } else {
- add_next_index_string(return_value, s, 1);
- }
- }
-}
-/* }}} */
-
-PHP_MINFO_FUNCTION(apache)
-{
- char *apv = php_apache_get_version();
- smart_str tmp1 = {0};
- char tmp[1024];
- int n, max_requests;
- char *p;
- server_rec *serv = ((php_struct *) SG(server_context))->r->server;
-#if !defined(WIN32) && !defined(WINNT)
- AP_DECLARE_DATA extern unixd_config_rec unixd_config;
-#endif
-
- for (n = 0; ap_loaded_modules[n]; ++n) {
- char *s = (char *) ap_loaded_modules[n]->name;
- if ((p = strchr(s, '.'))) {
- smart_str_appendl(&tmp1, s, (p - s));
- } else {
- smart_str_appends(&tmp1, s);
- }
- smart_str_appendc(&tmp1, ' ');
- }
- if ((tmp1.len - 1) >= 0) {
- tmp1.c[tmp1.len - 1] = '\0';
- }
-
- php_info_print_table_start();
- if (apv && *apv) {
- php_info_print_table_row(2, "Apache Version", apv);
- }
- sprintf(tmp, "%d", MODULE_MAGIC_NUMBER);
- php_info_print_table_row(2, "Apache API Version", tmp);
-
- if (serv->server_admin && *(serv->server_admin)) {
- php_info_print_table_row(2, "Server Administrator", serv->server_admin);
- }
-
- sprintf(tmp, "%s:%u", serv->server_hostname, serv->port);
- php_info_print_table_row(2, "Hostname:Port", tmp);
-
-#if !defined(WIN32) && !defined(WINNT)
- sprintf(tmp, "%s(%d)/%d", unixd_config.user_name, unixd_config.user_id, unixd_config.group_id);
- php_info_print_table_row(2, "User/Group", tmp);
-#endif
-
- ap_mpm_query(AP_MPMQ_MAX_REQUESTS_DAEMON, &max_requests);
- sprintf(tmp, "Per Child: %d - Keep Alive: %s - Max Per Connection: %d", max_requests, (serv->keep_alive ? "on":"off"), serv->keep_alive_max);
- php_info_print_table_row(2, "Max Requests", tmp);
-
- sprintf(tmp, "Connection: %lld - Keep-Alive: %lld", (serv->timeout / 1000000), (serv->keep_alive_timeout / 1000000));
- php_info_print_table_row(2, "Timeouts", tmp);
-
- php_info_print_table_row(2, "Virtual Server", (serv->is_virtual ? "Yes" : "No"));
- php_info_print_table_row(2, "Server Root", ap_server_root);
- php_info_print_table_row(2, "Loaded Modules", tmp1.c);
-
- smart_str_free(&tmp1);
- php_info_print_table_end();
-
- DISPLAY_INI_ENTRIES();
-
- {
- const apr_array_header_t *arr = apr_table_elts(((php_struct *) SG(server_context))->r->subprocess_env);
- char *key, *val;
-
- SECTION("Apache Environment");
- php_info_print_table_start();
- php_info_print_table_header(2, "Variable", "Value");
- APR_ARRAY_FOREACH_OPEN(arr, key, val)
- if (!val) {
- val = "";
- }
- php_info_print_table_row(2, key, val);
- APR_ARRAY_FOREACH_CLOSE()
-
- php_info_print_table_end();
-
- SECTION("HTTP Headers Information");
- php_info_print_table_start();
- php_info_print_table_colspan_header(2, "HTTP Request Headers");
- php_info_print_table_row(2, "HTTP Request", ((php_struct *) SG(server_context))->r->the_request);
-
- arr = apr_table_elts(((php_struct *) SG(server_context))->r->headers_in);
- APR_ARRAY_FOREACH_OPEN(arr, key, val)
- if (!val) {
- val = "";
- }
- php_info_print_table_row(2, key, val);
- APR_ARRAY_FOREACH_CLOSE()
-
- php_info_print_table_colspan_header(2, "HTTP Response Headers");
- arr = apr_table_elts(((php_struct *) SG(server_context))->r->headers_out);
- APR_ARRAY_FOREACH_OPEN(arr, key, val)
- if (!val) {
- val = "";
- }
- php_info_print_table_row(2, key, val);
- APR_ARRAY_FOREACH_CLOSE()
-
- php_info_print_table_end();
- }
-}
-
-static function_entry apache_functions[] = {
- PHP_FE(apache_lookup_uri, NULL)
- PHP_FE(virtual, NULL)
- PHP_FE(apache_request_headers, NULL)
- PHP_FE(apache_response_headers, NULL)
- PHP_FE(apache_setenv, NULL)
- PHP_FE(apache_getenv, NULL)
- PHP_FE(apache_note, NULL)
- PHP_FE(apache_get_version, NULL)
- PHP_FE(apache_get_modules, NULL)
- PHP_FALIAS(getallheaders, apache_request_headers, NULL)
- {NULL, NULL, NULL}
-};
-
-PHP_INI_BEGIN()
- STD_PHP_INI_ENTRY("xbithack", "0", PHP_INI_ALL, OnUpdateLong, xbithack, php_apache2_info_struct, php_apache2_info)
- STD_PHP_INI_ENTRY("engine", "1", PHP_INI_ALL, OnUpdateLong, engine, php_apache2_info_struct, php_apache2_info)
- STD_PHP_INI_ENTRY("last_modified", "0", PHP_INI_ALL, OnUpdateLong, last_modified, php_apache2_info_struct, php_apache2_info)
-PHP_INI_END()
-
-static PHP_MINIT_FUNCTION(apache)
-{
-#ifdef ZTS
- ts_allocate_id(&php_apache2_info_id, sizeof(php_apache2_info_struct), (ts_allocate_ctor) NULL, NULL);
-#endif
- REGISTER_INI_ENTRIES();
- return SUCCESS;
-}
-
-static PHP_MSHUTDOWN_FUNCTION(apache)
-{
- UNREGISTER_INI_ENTRIES();
- return SUCCESS;
-}
-
-zend_module_entry php_apache_module = {
- STANDARD_MODULE_HEADER,
- "apache2handler",
- apache_functions,
- PHP_MINIT(apache),
- PHP_MSHUTDOWN(apache),
- NULL,
- NULL,
- PHP_MINFO(apache),
- NULL,
- STANDARD_MODULE_PROPERTIES
-};
-
-/*
- * 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/sapi/apache2handler/sapi_apache2.c b/sapi/apache2handler/sapi_apache2.c
deleted file mode 100644
index b2cde707ab..0000000000
--- a/sapi/apache2handler/sapi_apache2.c
+++ /dev/null
@@ -1,594 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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. |
- +----------------------------------------------------------------------+
- | Authors: Sascha Schumann <sascha@schumann.cx> |
- | Parts based on Apache 1.3 SAPI module by |
- | Rasmus Lerdorf and Zeev Suraski |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-#define ZEND_INCLUDE_FULL_WINDOWS_HEADERS
-
-#include "php.h"
-#include "php_main.h"
-#include "php_ini.h"
-#include "php_variables.h"
-#include "SAPI.h"
-
-#include <fcntl.h>
-
-#include "ext/standard/php_smart_str.h"
-#ifndef NETWARE
-#include "ext/standard/php_standard.h"
-#else
-#include "ext/standard/basic_functions.h"
-#endif
-
-#include "apr_strings.h"
-#include "ap_config.h"
-#include "util_filter.h"
-#include "httpd.h"
-#include "http_config.h"
-#include "http_request.h"
-#include "http_core.h"
-#include "http_protocol.h"
-#include "http_log.h"
-#include "http_main.h"
-#include "util_script.h"
-#include "http_core.h"
-#include "ap_mpm.h"
-
-#include "php_apache.h"
-
-/* UnixWare and Netware define shutdown to _shutdown, which causes problems later
- * on when using a structure member named shutdown. Since this source
- * file does not use the system call shutdown, it is safe to #undef it.K
- */
-#undef shutdown
-
-#define PHP_MAGIC_TYPE "application/x-httpd-php"
-#define PHP_SOURCE_MAGIC_TYPE "application/x-httpd-php-source"
-#define PHP_SCRIPT "php5-script"
-
-/* A way to specify the location of the php.ini dir in an apache directive */
-char *apache2_php_ini_path_override = NULL;
-
-static int
-php_apache_sapi_ub_write(const char *str, uint str_length TSRMLS_DC)
-{
- request_rec *r;
- php_struct *ctx;
-
- ctx = SG(server_context);
- r = ctx->r;
-
- if (ap_rwrite(str, str_length, r) < 0) {
- php_handle_aborted_connection();
- }
-
- return str_length; /* we always consume all the data passed to us. */
-}
-
-static int
-php_apache_sapi_header_handler(sapi_header_struct *sapi_header,sapi_headers_struct *sapi_headers TSRMLS_DC)
-{
- php_struct *ctx;
- char *val;
-
- ctx = SG(server_context);
-
- val = strchr(sapi_header->header, ':');
-
- if (!val) {
- sapi_free_header(sapi_header);
- return 0;
- }
-
- *val = '\0';
-
- do {
- val++;
- } while (*val == ' ');
-
- if (!strcasecmp(sapi_header->header, "content-type")) {
- val = apr_pstrdup(ctx->r->pool, val);
- ap_set_content_type(ctx->r, val);
- } else if (sapi_header->replace) {
- apr_table_set(ctx->r->headers_out, sapi_header->header, val);
- } else {
- apr_table_add(ctx->r->headers_out, sapi_header->header, val);
- }
-
- sapi_free_header(sapi_header);
-
- return 0;
-}
-
-static int
-php_apache_sapi_send_headers(sapi_headers_struct *sapi_headers TSRMLS_DC)
-{
- php_struct *ctx = SG(server_context);
-
- ctx->r->status = SG(sapi_headers).http_response_code;
-
- return SAPI_HEADER_SENT_SUCCESSFULLY;
-}
-
-static int
-php_apache_sapi_read_post(char *buf, uint count_bytes TSRMLS_DC)
-{
- apr_size_t len, tlen=0;
- php_struct *ctx = SG(server_context);
- request_rec *r;
- apr_bucket_brigade *brigade;
-
- r = ctx->r;
- brigade = ctx->brigade;
- len = count_bytes;
-
- /*
- * This loop is needed because ap_get_brigade() can return us partial data
- * which would cause premature termination of request read. Therefor we
- * need to make sure that if data is avaliable we fill the buffer completely.
- */
-
- while (ap_get_brigade(r->input_filters, brigade, AP_MODE_READBYTES, APR_BLOCK_READ, len) == APR_SUCCESS) {
- apr_brigade_flatten(brigade, buf, &len);
- apr_brigade_cleanup(brigade);
- tlen += len;
- if (tlen == count_bytes || !len) {
- break;
- }
- buf += len;
- len = count_bytes - tlen;
- }
-
- return tlen;
-}
-
-static struct stat*
-php_apache_sapi_get_stat(TSRMLS_D)
-{
- php_struct *ctx = SG(server_context);
-
- ctx->finfo.st_uid = ctx->r->finfo.user;
- ctx->finfo.st_gid = ctx->r->finfo.group;
- ctx->finfo.st_dev = ctx->r->finfo.device;
- ctx->finfo.st_ino = ctx->r->finfo.inode;
-#if defined(NETWARE) && defined(CLIB_STAT_PATCH)
- ctx->finfo.st_atime.tv_sec = ctx->r->finfo.atime/1000000;
- ctx->finfo.st_mtime.tv_sec = ctx->r->finfo.mtime/1000000;
- ctx->finfo.st_ctime.tv_sec = ctx->r->finfo.ctime/1000000;
-#else
- ctx->finfo.st_atime = ctx->r->finfo.atime/1000000;
- ctx->finfo.st_mtime = ctx->r->finfo.mtime/1000000;
- ctx->finfo.st_ctime = ctx->r->finfo.ctime/1000000;
-#endif
-
- ctx->finfo.st_size = ctx->r->finfo.size;
- ctx->finfo.st_nlink = ctx->r->finfo.nlink;
-
- return &ctx->finfo;
-}
-
-static char *
-php_apache_sapi_read_cookies(TSRMLS_D)
-{
- php_struct *ctx = SG(server_context);
- const char *http_cookie;
-
- http_cookie = apr_table_get(ctx->r->headers_in, "cookie");
-
- /* The SAPI interface should use 'const char *' */
- return (char *) http_cookie;
-}
-
-static char *
-php_apache_sapi_getenv(char *name, size_t name_len TSRMLS_DC)
-{
- php_struct *ctx = SG(server_context);
- const char *env_var;
-
- env_var = apr_table_get(ctx->r->subprocess_env, name);
-
- return (char *) env_var;
-}
-
-static void
-php_apache_sapi_register_variables(zval *track_vars_array TSRMLS_DC)
-{
- php_struct *ctx = SG(server_context);
- const apr_array_header_t *arr = apr_table_elts(ctx->r->subprocess_env);
- char *key, *val;
-
- APR_ARRAY_FOREACH_OPEN(arr, key, val)
- if (!val) val = "";
- php_register_variable(key, val, track_vars_array TSRMLS_CC);
- APR_ARRAY_FOREACH_CLOSE()
-
- php_register_variable("PHP_SELF", ctx->r->uri, track_vars_array TSRMLS_CC);
-}
-
-static void
-php_apache_sapi_flush(void *server_context)
-{
- php_struct *ctx;
- request_rec *r;
- TSRMLS_FETCH();
-
- ctx = server_context;
-
- /* If we haven't registered a server_context yet,
- * then don't bother flushing. */
- if (!server_context) {
- return;
- }
-
- r = ctx->r;
-
- sapi_send_headers(TSRMLS_C);
-
- r->status = SG(sapi_headers).http_response_code;
- SG(headers_sent) = 1;
-
- if (ap_rflush(r) < 0 || r->connection->aborted) {
- php_handle_aborted_connection();
- }
-}
-
-static void php_apache_sapi_log_message(char *msg)
-{
- php_struct *ctx;
- TSRMLS_FETCH();
-
- ctx = SG(server_context);
-
- /* We use APLOG_STARTUP because it keeps us from printing the
- * data and time information at the beginning of the error log
- * line. Not sure if this is correct, but it mirrors what happens
- * with Apache 1.3 -- rbb
- */
- if (ctx == NULL) { /* we haven't initialized our ctx yet, oh well */
- ap_log_error(APLOG_MARK, APLOG_ERR | APLOG_STARTUP, 0, NULL, "%s", msg);
- } else {
- ap_log_rerror(APLOG_MARK, APLOG_ERR | APLOG_STARTUP, 0, ctx->r, "%s", msg);
- }
-}
-
-static void php_apache_sapi_log_message_ex(char *msg, request_rec *r)
-{
- if (r) {
- ap_log_rerror(APLOG_MARK, APLOG_ERR | APLOG_STARTUP, 0, r, msg, r->filename);
- } else {
- php_apache_sapi_log_message(msg);
- }
-}
-
-static time_t php_apache_sapi_get_request_time(void) {
- php_struct *ctx;
- TSRMLS_FETCH();
-
- ctx = SG(server_context);
-
- return ctx->r->request_time;
-}
-
-extern zend_module_entry php_apache_module;
-
-static int php_apache2_startup(sapi_module_struct *sapi_module)
-{
- if (php_module_startup(sapi_module, &php_apache_module, 1)==FAILURE) {
- return FAILURE;
- }
- return SUCCESS;
-}
-
-static sapi_module_struct apache2_sapi_module = {
- "apache2handler",
- "Apache 2.0 Handler",
-
- php_apache2_startup, /* startup */
- php_module_shutdown_wrapper, /* shutdown */
-
- NULL, /* activate */
- NULL, /* deactivate */
-
- php_apache_sapi_ub_write, /* unbuffered write */
- php_apache_sapi_flush, /* flush */
- php_apache_sapi_get_stat, /* get uid */
- php_apache_sapi_getenv, /* getenv */
-
- php_error, /* error handler */
-
- php_apache_sapi_header_handler, /* header handler */
- php_apache_sapi_send_headers, /* send headers handler */
- NULL, /* send header handler */
-
- php_apache_sapi_read_post, /* read POST data */
- php_apache_sapi_read_cookies, /* read Cookies */
-
- php_apache_sapi_register_variables,
- php_apache_sapi_log_message, /* Log message */
- php_apache_sapi_get_request_time, /* Request Time */
-
- STANDARD_SAPI_MODULE_PROPERTIES
-};
-
-static apr_status_t
-php_apache_server_shutdown(void *tmp)
-{
- apache2_sapi_module.shutdown(&apache2_sapi_module);
- sapi_shutdown();
-#ifdef ZTS
- tsrm_shutdown();
-#endif
- return APR_SUCCESS;
-}
-
-static void php_apache_add_version(apr_pool_t *p)
-{
- TSRMLS_FETCH();
- if (PG(expose_php)) {
- ap_add_version_component(p, "PHP/" PHP_VERSION);
- }
-}
-
-static int php_pre_config(apr_pool_t *pconf, apr_pool_t *plog, apr_pool_t *ptemp)
-{
-#ifndef ZTS
- int threaded_mpm;
-
- ap_mpm_query(AP_MPMQ_IS_THREADED, &threaded_mpm);
- if(threaded_mpm) {
- ap_log_error(APLOG_MARK, APLOG_CRIT, 0, 0, "Apache is running a threaded MPM, but your PHP Module is not compiled to be threadsafe. You need to recompile PHP.");
- return DONE;
- }
-#endif
- /* When this is NULL, apache won't override the hard-coded default
- * php.ini path setting. */
- apache2_php_ini_path_override = NULL;
- return OK;
-}
-
-static int
-php_apache_server_startup(apr_pool_t *pconf, apr_pool_t *plog, apr_pool_t *ptemp, server_rec *s)
-{
- void *data = NULL;
- const char *userdata_key = "apache2hook_post_config";
-
- /* Apache will load, unload and then reload a DSO module. This
- * prevents us from starting PHP until the second load. */
- apr_pool_userdata_get(&data, userdata_key, s->process->pool);
- if (data == NULL) {
- /* We must use set() here and *not* setn(), otherwise the
- * static string pointed to by userdata_key will be mapped
- * to a different location when the DSO is reloaded and the
- * pointers won't match, causing get() to return NULL when
- * we expected it to return non-NULL. */
- apr_pool_userdata_set((const void *)1, userdata_key, apr_pool_cleanup_null, s->process->pool);
- return OK;
- }
-
- /* Set up our overridden path. */
- if (apache2_php_ini_path_override) {
- apache2_sapi_module.php_ini_path_override = apache2_php_ini_path_override;
- }
-#ifdef ZTS
- tsrm_startup(1, 1, 0, NULL);
-#endif
- sapi_startup(&apache2_sapi_module);
- apache2_sapi_module.startup(&apache2_sapi_module);
- apr_pool_cleanup_register(pconf, NULL, php_apache_server_shutdown, apr_pool_cleanup_null);
- php_apache_add_version(pconf);
-
- return OK;
-}
-
-static apr_status_t php_server_context_cleanup(void *data_)
-{
- void **data = data_;
- *data = NULL;
- return APR_SUCCESS;
-}
-
-static void php_apache_request_ctor(request_rec *r, php_struct *ctx TSRMLS_DC)
-{
- char *content_type;
- char *content_length;
- const char *auth;
-
- SG(sapi_headers).http_response_code = !r->status ? HTTP_OK : r->status;
- SG(request_info).content_type = apr_table_get(r->headers_in, "Content-Type");
- SG(request_info).query_string = apr_pstrdup(r->pool, r->args);
- SG(request_info).request_method = r->method;
- SG(request_info).request_uri = apr_pstrdup(r->pool, r->uri);
- SG(request_info).path_translated = apr_pstrdup(r->pool, r->filename);
- r->no_local_copy = 1;
-
- content_type = sapi_get_default_content_type(TSRMLS_C);
- ap_set_content_type(r, apr_pstrdup(r->pool, content_type));
- efree(content_type);
-
- content_length = (char *) apr_table_get(r->headers_in, "Content-Length");
- SG(request_info).content_length = (content_length ? atoi(content_length) : 0);
-
- apr_table_unset(r->headers_out, "Content-Length");
- apr_table_unset(r->headers_out, "Last-Modified");
- apr_table_unset(r->headers_out, "Expires");
- apr_table_unset(r->headers_out, "ETag");
- if (!PG(safe_mode) || (PG(safe_mode) && !ap_auth_type(r))) {
- auth = apr_table_get(r->headers_in, "Authorization");
- php_handle_auth_data(auth TSRMLS_CC);
- ctx->r->user = apr_pstrdup(ctx->r->pool, SG(request_info).auth_user);
- } else {
- SG(request_info).auth_user = NULL;
- SG(request_info).auth_password = NULL;
- }
- php_request_startup(TSRMLS_C);
-}
-
-static void php_apache_request_dtor(request_rec *r TSRMLS_DC)
-{
- php_request_shutdown(NULL);
-}
-
-static int php_handler(request_rec *r)
-{
- php_struct *ctx;
- void *conf;
- apr_bucket_brigade *brigade;
- apr_bucket *bucket;
- apr_status_t rv;
- request_rec *parent_req = NULL;
- TSRMLS_FETCH();
-
- conf = ap_get_module_config(r->per_dir_config, &php5_module);
- apply_config(conf);
-
- if (strcmp(r->handler, PHP_MAGIC_TYPE) && strcmp(r->handler, PHP_SOURCE_MAGIC_TYPE) && strcmp(r->handler, PHP_SCRIPT)) {
- /* Check for xbithack in this case. */
- if (!AP2(xbithack) || strcmp(r->handler, "text/html") || !(r->finfo.protection & APR_UEXECUTE)) {
- zend_try {
- zend_ini_deactivate(TSRMLS_C);
- } zend_end_try();
- return DECLINED;
- }
- }
-
- /* handle situations where user turns the engine off */
- if (!AP2(engine)) {
- zend_try {
- zend_ini_deactivate(TSRMLS_C);
- } zend_end_try();
- return DECLINED;
- }
-
- if (r->finfo.filetype == 0) {
- php_apache_sapi_log_message_ex("script '%s' not found or unable to stat", r);
- zend_try {
- zend_ini_deactivate(TSRMLS_C);
- } zend_end_try();
- return HTTP_NOT_FOUND;
- }
- if (r->finfo.filetype == APR_DIR) {
- php_apache_sapi_log_message_ex("attempt to invoke directory '%s' as script", r);
- zend_try {
- zend_ini_deactivate(TSRMLS_C);
- } zend_end_try();
- return HTTP_FORBIDDEN;
- }
-
- /* Setup the CGI variables if this is the main request */
- if (r->main == NULL ||
- /* .. or if the sub-request envinronment differs from the main-request. */
- r->subprocess_env != r->main->subprocess_env
- ) {
- /* setup standard CGI variables */
- ap_add_common_vars(r);
- ap_add_cgi_vars(r);
- }
-
-zend_first_try {
-
- ctx = SG(server_context);
- if (ctx == NULL) {
- ctx = SG(server_context) = apr_pcalloc(r->pool, sizeof(*ctx));
- /* register a cleanup so we clear out the SG(server_context)
- * after each request. Note: We pass in the pointer to the
- * server_context in case this is handled by a different thread.
- */
- apr_pool_cleanup_register(r->pool, (void *)&SG(server_context), php_server_context_cleanup, apr_pool_cleanup_null);
-
- ctx->r = r;
- brigade = apr_brigade_create(r->pool, r->connection->bucket_alloc);
- ctx->brigade = brigade;
-
- php_apache_request_ctor(r, ctx TSRMLS_CC);
- } else {
- parent_req = ctx->r;
- ctx->r = r;
- brigade = ctx->brigade;
- }
-
- if (AP2(last_modified)) {
- ap_update_mtime(r, r->finfo.mtime);
- ap_set_last_modified(r);
- }
-
- /* Determine if we need to parse the file or show the source */
- if (strncmp(r->handler, PHP_SOURCE_MAGIC_TYPE, sizeof(PHP_SOURCE_MAGIC_TYPE) - 1) == 0) {
- zend_syntax_highlighter_ini syntax_highlighter_ini;
- php_get_highlight_struct(&syntax_highlighter_ini);
- highlight_file((char *)r->filename, &syntax_highlighter_ini TSRMLS_CC);
- } else {
- zend_file_handle zfd;
-
- zfd.type = ZEND_HANDLE_FILENAME;
- zfd.filename = (char *) r->filename;
- zfd.free_filename = 0;
- zfd.opened_path = NULL;
-
- if (!parent_req) {
- php_execute_script(&zfd TSRMLS_CC);
- } else {
- zend_execute_scripts(ZEND_INCLUDE TSRMLS_CC, NULL, 1, &zfd);
- }
-#if MEMORY_LIMIT
- {
- char *mem_usage;
-
- mem_usage = apr_psprintf(ctx->r->pool, "%u", AG(allocated_memory_peak));
- AG(allocated_memory_peak) = 0;
- apr_table_set(r->notes, "mod_php_memory_usage", mem_usage);
- }
-#endif
- }
-
-} zend_end_try();
-
- if (!parent_req) {
- php_apache_request_dtor(r TSRMLS_CC);
- ctx->request_processed = 1;
- bucket = apr_bucket_eos_create(r->connection->bucket_alloc);
- APR_BRIGADE_INSERT_TAIL(brigade, bucket);
-
- rv = ap_pass_brigade(r->output_filters, brigade);
- if (rv != APR_SUCCESS || r->connection->aborted) {
- php_handle_aborted_connection();
- }
- apr_brigade_cleanup(brigade);
- } else {
- ctx->r = parent_req;
- }
-
- return OK;
-}
-
-void php_ap2_register_hook(apr_pool_t *p)
-{
- ap_hook_pre_config(php_pre_config, NULL, NULL, APR_HOOK_MIDDLE);
- ap_hook_post_config(php_apache_server_startup, NULL, NULL, APR_HOOK_MIDDLE);
- ap_hook_handler(php_handler, NULL, NULL, APR_HOOK_MIDDLE);
-}
-
-/*
- * 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/sapi/apache_hooks/CREDITS b/sapi/apache_hooks/CREDITS
deleted file mode 100644
index 86ac27d0b7..0000000000
--- a/sapi/apache_hooks/CREDITS
+++ /dev/null
@@ -1,2 +0,0 @@
-Apache 1.3 (apache_hooks)
-Rasmus Lerdorf, Zeev Suraski, Stig Bakken, David Sklar, George Schlossnagle, Lukas Schroeder
diff --git a/sapi/apache_hooks/README b/sapi/apache_hooks/README
deleted file mode 100644
index 9a5a3e2b64..0000000000
--- a/sapi/apache_hooks/README
+++ /dev/null
@@ -1,206 +0,0 @@
-This is very beta documentation. Clearly better stuff can and will follow.
-
-INTRO:
-
-apache_hooks is a full super-set enhancement of the apache 1.3 sapi that allows for
-php code to be run on the apache request object at every stage of the apache
-request. It supports all of the apache 1.3 sapi commands and configurations, and
-additionally supports the following httpd.conf directives:
-
-
-HTTPD.CONF DIRECTIEVS:
-
-phpRequire /path/to/file = requires a file at the beginning of an
-initial apache request
-
-phpUriHandler /path/to/file = registers a hook that will run the
-specified file at the uri translation stage of the apache request
-phpUriHandler Class::Method = registers a hook to run Class::Method at
-the uri translation stage of the apache request
-
-phpPostReadHandler /path/to/file = hook for post-read phase
-phpPostReadHandlerMethod Class::Method
-
-phpHeaderHandler = hook for header parsing phase
-phpHeaderHandlerMethod
-
-phpAuthHandler = hook for authentication phase
-phpAuthHandlerMethod
-
-phpAccessHandler = hook for access control phase
-phpAccessHandlerMethod
-
-phpTypeHandler = hook for Type Checking phase
-phpTypeHandlerMethod
-
-phpFixupHandler = hook for 'fixup' phase
-phpFixupHandlerMethod
-
-phpLoggerHandler = hook for logging phase
-phpLoggerHandlerMethod
-
-AddHandler php-script = set's up a special type handler
-phpResponseHandler /path/to/file = sets file to be called to handle
-response phase
-phpResponseHandlerMethod Class::Method
-
-
-All handlers may be stacked, i.e. you can list multiple handler directives
-in a single scope and they will be run in order.
-
-
-EXAMPLES:
-
-So, to set up a 'hello world' location handler (so that any request to
-/hello/* returns hello world) you can:
-
-phpRequire /tmp/setup.php
-<Location /hello>
-AddHandler php-script
-phpResponseHandlerMethod Hello::World
-</Location>
-
-with
-#/tmp/setup.php
-<?
-class Hello {
- function World() {
- global $request;
- $request->send_http_header();
- echo "Hello World";
- }
-}
-?>
-
-$request is the apache request. It is instantiated at all stages
-automatically. The methods of that class are:
-
-getallheaders
-args
-boundary
-content_encoding
-content_type
-filename
-handler
-hostname
-method
-path_info
-protocol
-status_line
-the_request
-unparsed_uri
-uri
-allowed
-bytes_sent
-chunked
-content_length
-header_only
-method_number
-mtime
-no_cache
-no_local_copy
-proto_num
-proxyreq
-read_body
-remaining
-request_time
-status
-headers_in
-headers_out
-err_headers_out
-auth_name
-auth_type
-basic_auth_pw
-discard_request_body
-is_initial_req
-meets_conditions
-remote_host
-satisfies
-server_port
-set_etag
-set_last_modified
-some_auth_required
-update_mtime
-send_http_header
-basic_http_header
-send_header_field
-send_http_trace
-send_http_options
-send_error_response
-set_content_length
-set_keepalive
-rputs
-log_error
-lookup_uri
-lookup_file
-method_uri
-run
-internal_redirect
-
-
-These all wrap the ap_* apache EXPORT_API functions using the same
-semantics (and are also the same as the Apache::Request methods in
-mod_perl if you are familiar with that)
-
-So, a uri handler to redirect all non-local traffic to /404.php (an
-error page) would be
-
-phpUriHandler /tmp/uri.php
-
-#/tmp/uri.php
-<?
- if($REMOTE_ADDR != '127.0.0.1') {
- $request->uri('/404.php');
- }
- return OK;
-?>
-
-It's important to note that since this is called from the uri
-translations phase, this validation is performed for every request to
-the server, not just for php pages.
-
-Also, scope is shared between all the hooks. So in the above, we could
-merge the two and do something like:
-
-#/tmp/uri.php
-<?
- if($REMOTE_ADDR != '127.0.0.1') {
- $whoami = 'Stranger';
- }
- else {
- $whoami = 'Friend';
- }
- return DECLINED; # because we're not redirecting, just messing around
-?>
-
-and then:
-
-#/tmp/setup.php
-<?
-class Hello {
- function World() {
- global $request;
- global $whoami;
- $request->send_http_header();
- echo "Hello $whoami";
- }
-}
-?>
-
-These variables are also in the same scope as a script if your script is
-being handled by the standard application/x-httpd-php handler.
-
-This allows you to make decisions and pass data between your handlers
-and scripts at all stages.
-
-The above are clearly trite examples, but hopefully give you a starting
-point.
-
-One note: all handlers can be validly re-entered 'in sub-requests'.
-For this reason you should not define functions/classes here without
-anti-redefinition guards (I would just recommend putting them in an
-include and using include_one). This is not true for phpRequire, which
-is only entered once, at the main request, and so it is safe to make
-function/class declarations there (in fact that's what it's for).
-
-Hope that helps!
diff --git a/sapi/apache_hooks/apMakefile.libdir b/sapi/apache_hooks/apMakefile.libdir
deleted file mode 100644
index 7b5254013a..0000000000
--- a/sapi/apache_hooks/apMakefile.libdir
+++ /dev/null
@@ -1,4 +0,0 @@
-This is a place-holder which indicates to Configure that it shouldn't
-provide the default targets when building the Makefile in this directory.
-Instead it'll just prepend all the important variable definitions, and
-copy the Makefile.tmpl onto the end.
diff --git a/sapi/apache_hooks/apMakefile.tmpl b/sapi/apache_hooks/apMakefile.tmpl
deleted file mode 100644
index 4054e8e119..0000000000
--- a/sapi/apache_hooks/apMakefile.tmpl
+++ /dev/null
@@ -1,77 +0,0 @@
-##
-## Apache 1.3 Makefile template for PHP 4.0 Module
-## [src/modules/php5/Makefile.tmpl]
-##
-
-# the parametrized target
-LIB=libphp5.$(LIBEXT)
-
-# objects for building the static library
-OBJS=mod_php5.o
-OBJS_LIB=libmodphp5.a
-
-# objects for building the shared object library
-SHLIB_OBJS=mod_php5.so-o
-SHLIB_OBJS_LIB=libmodphp5.a
-
-# the general targets
-all: lib
-lib: $(LIB)
-
-# build the static library by merging the object files
-libphp5.a: $(OBJS) $(OBJS_LIB)
- cp $(OBJS_LIB) $@
- ar r $@ $(OBJS)
- $(RANLIB) $@
-
-# ugly hack to support older Apache-1.3 betas that don't set $LIBEXT
-libphp5.: $(OBJS) $(OBJS_LIB)
- cp $(OBJS_LIB) $@
- ar r $@ $(OBJS)
- $(RANLIB) $@
- cp libphp5. libphp5.a
-
-# build the shared object library by linking the object files
-libphp5.so: $(SHLIB_OBJS) $(SHLIB_OBJS_LIB)
- rm -f $@
- $(LD_SHLIB) $(LDFLAGS_SHLIB) -o $@ $(SHLIB_OBJS) $(SHLIB_OBJS_LIB) $(LIBS) $(PHP_LIBS)
-
-# 1. extension .o for shared objects cannot be used here because
-# first these files aren't still shared objects and second we
-# have to use a different name to trigger the different
-# implicit Make rule
-# 2. extension -so.o (as used elsewhere) cannot be used because
-# the suffix feature of Make really wants just .x, so we use
-# extension .so-o
-.SUFFIXES: .o .so-o
-.c.o:
- $(CC) -c $(INCLUDES) $(CFLAGS) $(PHP_CFLAGS) $(CPPFLAGS) $(SPACER) $<
-.c.so-o:
- $(CC) -c $(INCLUDES) $(CFLAGS) $(CFLAGS_SHLIB) $(PHP_CFLAGS) $(CPPFLAGS) $(SPACER) $< && mv $*.o $*.so-o
-
-# cleanup
-clean:
- -rm -f $(OBJS) $(SHLIB_OBJS) $(LIB)
-
-# We really don't expect end users to use this rule. It works only with
-# gcc, and rebuilds Makefile.tmpl. You have to re-run Configure after
-# using it.
-depend:
- cp Makefile.tmpl Makefile.tmpl.bak \
- && sed -ne '1,/^# DO NOT REMOVE/p' Makefile.tmpl > Makefile.new \
- && gcc -MM $(INCLUDES) $(CFLAGS) $(PHP_CFLAGS) $(CPPFLAGS) *.c >> Makefile.new \
- && sed -e '1,$$s: $(INCDIR)/: $$(INCDIR)/:g' Makefile.new \
- > Makefile.tmpl \
- && rm Makefile.new
-
-#Dependencies
-
-$(OBJS): Makefile
-
-# DO NOT REMOVE
-mod_php5.o: mod_php5.c $(INCDIR)/httpd.h $(INCDIR)/conf.h \
- $(INCDIR)/buff.h \
- $(INCDIR)/http_config.h \
- $(INCDIR)/http_core.h $(INCDIR)/http_main.h \
- $(INCDIR)/http_protocol.h $(INCDIR)/http_request.h \
- $(INCDIR)/http_log.h $(INCDIR)/util_script.h mod_php5.h
diff --git a/sapi/apache_hooks/config.m4 b/sapi/apache_hooks/config.m4
deleted file mode 100644
index 51702c5c2f..0000000000
--- a/sapi/apache_hooks/config.m4
+++ /dev/null
@@ -1,242 +0,0 @@
-dnl
-dnl $Id$
-dnl
-
-AC_MSG_CHECKING(for Apache 1.x (hooks) module support via DSO through APXS)
-AC_ARG_WITH(apache-hooks,
-[ --with-apache-hooks[=FILE]
- EXPERIMENTAL: Build shared Apache 1.x module. FILE is the optional
- pathname to the Apache apxs tool; defaults to "apxs".],[
- if test "$withval" = "yes"; then
- APXS=apxs
- AC_DEFINE(APACHE_HOOKS,1,[ ])
- $APXS -q CFLAGS >/dev/null 2>&1
- if test "$?" != "0" && test -x /usr/sbin/apxs; then #SUSE 6.x
- APXS=/usr/sbin/apxs
- fi
- else
- AC_DEFINE(APACHE_HOOKS,1,[ ])
- PHP_EXPAND_PATH($withval, APXS)
- fi
-
- $APXS -q CFLAGS >/dev/null 2>&1
- if test "$?" != "0"; then
- AC_MSG_RESULT()
- AC_MSG_RESULT()
- AC_MSG_RESULT([Sorry, I was not able to successfully run APXS. Possible reasons:])
- AC_MSG_RESULT()
- AC_MSG_RESULT([1. Perl is not installed;])
- AC_MSG_RESULT([2. Apache was not compiled with DSO support (--enable-module=so);])
- AC_MSG_RESULT([3. 'apxs' is not in your path. Try to use --with-apxs=/path/to/apxs])
- AC_MSG_RESULT([The output of $APXS follows])
- $APXS
- AC_MSG_ERROR([Aborting])
- fi
-
- APXS_LDFLAGS="@SYBASE_LFLAGS@ @SYBASE_LIBS@ @SYBASE_CT_LFLAGS@ @SYBASE_CT_LIBS@"
- APXS_INCLUDEDIR=`$APXS -q INCLUDEDIR`
- APXS_CFLAGS=`$APXS -q CFLAGS`
- APXS_HTTPD=`$APXS -q SBINDIR`/`$APXS -q TARGET`
-
- # Test that we're trying to configure with apache 1.x
- PHP_AP_EXTRACT_VERSION($APXS_HTTPD)
- if test "$APACHE_VERSION" -ge 2000000; then
- AC_MSG_ERROR([You have enabled Apache 1.3 support while your server is Apache 2. Please use the appropiate switch --with-apxs2])
- fi
-
- for flag in $APXS_CFLAGS; do
- case $flag in
- -D*) CPPFLAGS="$CPPFLAGS $flag";;
- esac
- done
- case $host_alias in
- *aix*)
- APXS_LIBEXECDIR=`$APXS -q LIBEXECDIR`
- EXTRA_LDFLAGS="$EXTRA_LDFLAGS -Wl,-bI:$APXS_LIBEXECDIR/httpd.exp"
- PHP_SELECT_SAPI(apache_hooks, shared, sapi_apache.c mod_php5.c php_apache.c, -I$APXS_INCLUDEDIR)
- ;;
- *darwin*)
- MH_BUNDLE_FLAGS="-dynamic -twolevel_namespace -bundle -bundle_loader $APXS_HTTPD"
- PHP_SUBST(MH_BUNDLE_FLAGS)
- SAPI_SHARED=libs/libphp5.so
- PHP_SELECT_SAPI(apache_hooks, bundle, sapi_apache.c mod_php5.c php_apache.c, -I$APXS_INCLUDEDIR)
- ;;
- *)
- PHP_SELECT_SAPI(apache_hooks, shared, sapi_apache.c mod_php5.c php_apache.c, -I$APXS_INCLUDEDIR)
- ;;
- esac
-
- # Test whether apxs support -S option
- $APXS -q -S CFLAGS="$APXS_CFLAGS" CFLAGS >/dev/null 2>&1
-
- if test "$?" != "0"; then
- APACHE_INSTALL="$APXS -i -a -n php5 $SAPI_SHARED" # Old apxs does not have -S option
- else
- APACHE_INSTALL="\$(mkinstalldirs) \"\$(INSTALL_ROOT)`$APXS -q LIBEXECDIR`\" && $APXS -S LIBEXECDIR=\"\$(INSTALL_ROOT)`$APXS -q LIBEXECDIR`\" -i -a -n php5 $SAPI_SHARED"
- fi
-
- if test -z "`$APXS -q LD_SHLIB`" || test "`$APXS -q LIBEXECDIR`" = "modules"; then
- PHP_APXS_BROKEN=yes
- fi
- STRONGHOLD=
- AC_DEFINE(HAVE_AP_CONFIG_H,1,[ ])
- AC_DEFINE(HAVE_AP_COMPAT_H,1,[ ])
- AC_MSG_RESULT(yes)
-],[
- AC_MSG_RESULT(no)
-])
-
-APACHE_INSTALL_FILES="\$(srcdir)/sapi/apache_hooks/mod_php5.* sapi/apache_hooks/libphp5.module"
-
-if test "$PHP_SAPI" != "apache_hooks"; then
-AC_MSG_CHECKING(for Apache 1.x (hooks) module support)
-AC_ARG_WITH(apache-hooks-static,
-[ --with-apache-hooks-static[=DIR]
- EXPERIMENTAL: Build Apache 1.x module. DIR is the top-level Apache
- build directory, defaults to /usr/local/apache.],[
- AC_DEFINE(APACHE_HOOKS,1,[ ])
- if test "$withval" = "yes"; then
- # Apache's default directory
- withval=/usr/local/apache
- fi
- if test "$withval" != "no"; then
- APACHE_MODULE=yes
- PHP_EXPAND_PATH($withval, withval)
- # For Apache 1.2.x
- if test -f $withval/src/httpd.h; then
- APACHE_INCLUDE=-I$withval/src
- APACHE_TARGET=$withval/src
- PHP_SELECT_SAPI(apache_hooks, static, sapi_apache.c mod_php5.c php_apache.c, $APACHE_INCLUDE)
- APACHE_INSTALL="mkdir -p $APACHE_TARGET; cp $SAPI_STATIC $APACHE_INSTALL_FILES $APACHE_TARGET"
- PHP_LIBS="-L. -lphp3"
- AC_MSG_RESULT(yes - Apache 1.2.x)
- STRONGHOLD=
- if test -f $withval/src/ap_config.h; then
- AC_DEFINE(HAVE_AP_CONFIG_H,1,[ ])
- fi
- # For Apache 2.0.x
- elif test -f $withval/include/httpd.h &&
- test -f $withval/srclib/apr/include/apr_general.h ; then
- AC_MSG_ERROR([Use --with-apache2 with Apache 2.x!])
- # For Apache 1.3.x
- elif test -f $withval/src/main/httpd.h; then
- APACHE_HAS_REGEX=1
- APACHE_INCLUDE="-I$withval/src/main -I$withval/src/os/unix -I$withval/src/ap"
- APACHE_TARGET=$withval/src/modules/php5
- if test ! -d $APACHE_TARGET; then
- mkdir $APACHE_TARGET
- fi
- PHP_SELECT_SAPI(apache_hooks, static, sapi_apache.c mod_php5.c php_apache.c, $APACHE_INCLUDE)
- APACHE_INSTALL="mkdir -p $APACHE_TARGET; cp $SAPI_STATIC $APACHE_TARGET/libmodphp5.a; cp $APACHE_INSTALL_FILES $APACHE_TARGET; cp $srcdir/sapi/apache_hooks/apMakefile.tmpl $APACHE_TARGET/Makefile.tmpl; cp $srcdir/sapi/apache_hooks/apMakefile.libdir $APACHE_TARGET/Makefile.libdir"
- PHP_LIBS="-Lmodules/php5 -L../modules/php5 -L../../modules/php5 -lmodphp5"
- AC_MSG_RESULT(yes - Apache 1.3.x)
- STRONGHOLD=
- if test -f $withval/src/include/ap_config.h; then
- AC_DEFINE(HAVE_AP_CONFIG_H,1,[ ])
- fi
- if test -f $withval/src/include/ap_compat.h; then
- AC_DEFINE(HAVE_AP_COMPAT_H,1,[ ])
- if test ! -f $withval/src/include/ap_config_auto.h; then
- AC_MSG_ERROR(Please run Apache\'s configure or src/Configure program once and try again)
- fi
- else
- if test -f $withval/src/include/compat.h; then
- AC_DEFINE(HAVE_OLD_COMPAT_H,1,[ ])
- fi
- fi
- # Also for Apache 1.3.x
- elif test -f $withval/src/include/httpd.h; then
- APACHE_HAS_REGEX=1
- APACHE_INCLUDE="-I$withval/src/include -I$withval/src/os/unix"
- APACHE_TARGET=$withval/src/modules/php5
- if test ! -d $APACHE_TARGET; then
- mkdir $APACHE_TARGET
- fi
- PHP_SELECT_SAPI(apache_hooks, static, sapi_apache.c mod_php5.c php_apache.c, $APACHE_INCLUDE)
- PHP_LIBS="-Lmodules/php5 -L../modules/php5 -L../../modules/php5 -lmodphp5"
- APACHE_INSTALL="mkdir -p $APACHE_TARGET; cp $SAPI_STATIC $APACHE_TARGET/libmodphp5.a; cp $APACHE_INSTALL_FILES $APACHE_TARGET; cp $srcdir/sapi/apache_hooks/apMakefile.tmpl $APACHE_TARGET/Makefile.tmpl; cp $srcdir/sapi/apache_hooks/apMakefile.libdir $APACHE_TARGET/Makefile.libdir"
- AC_MSG_RESULT(yes - Apache 1.3.x)
- STRONGHOLD=
- if test -f $withval/src/include/ap_config.h; then
- AC_DEFINE(HAVE_AP_CONFIG_H,1,[ ])
- fi
- if test -f $withval/src/include/ap_compat.h; then
- AC_DEFINE(HAVE_AP_COMPAT_H,1,[ ])
- if test ! -f $withval/src/include/ap_config_auto.h; then
- AC_MSG_ERROR(Please run Apache\'s configure or src/Configure program once and try again)
- fi
- else
- if test -f $withval/src/include/compat.h; then
- AC_DEFINE(HAVE_OLD_COMPAT_H,1,[ ])
- fi
- fi
- # For StrongHold 2.2
- elif test -f $withval/apache/httpd.h; then
- APACHE_INCLUDE=-"I$withval/apache -I$withval/ssl/include"
- APACHE_TARGET=$withval/apache
- PHP_SELECT_SAPI(apache_hooks, static, sapi_apache.c mod_php5.c php_apache.c, $APACHE_INCLUDE)
- PHP_LIBS="-Lmodules/php5 -L../modules/php5 -L../../modules/php5 -lmodphp5"
- APACHE_INSTALL="mkdir -p $APACHE_TARGET; cp $SAPI_STATIC $APACHE_TARGET/libmodphp5.a; cp $APACHE_INSTALL_FILES $APACHE_TARGET"
- STRONGHOLD=-DSTRONGHOLD=1
- AC_MSG_RESULT(yes - StrongHold)
- if test -f $withval/apache/ap_config.h; then
- AC_DEFINE(HAVE_AP_CONFIG_H,1,[ ])
- fi
- if test -f $withval/src/ap_compat.h; then
- AC_DEFINE(HAVE_AP_COMPAT_H,1,[ ])
- if test ! -f $withval/src/include/ap_config_auto.h; then
- AC_MSG_ERROR(Please run Apache\'s configure or src/Configure program once and try again)
- fi
- else
- if test -f $withval/src/compat.h; then
- AC_DEFINE(HAVE_OLD_COMPAT_H,1,[ ])
- fi
- fi
- else
- AC_MSG_RESULT(no)
- AC_MSG_ERROR(Invalid Apache directory - unable to find httpd.h under $withval)
- fi
- else
- AC_MSG_RESULT(no)
- fi
-],[
- AC_MSG_RESULT(no)
-])
-
-fi
-
-if test "x$APXS" != "x" -a "`uname -sv`" = "AIX 4" -a "$GCC" != "yes"; then
- APXS_EXP=-bE:sapi/apache_hooks/mod_php5.exp
-fi
-
-PHP_SUBST(APXS_EXP)
-PHP_SUBST(APACHE_INCLUDE)
-PHP_SUBST(APACHE_TARGET)
-PHP_SUBST(APXS)
-PHP_SUBST(APXS_LDFLAGS)
-PHP_SUBST(APACHE_INSTALL)
-PHP_SUBST(STRONGHOLD)
-
-AC_MSG_CHECKING(for mod_charset compatibility option)
-AC_ARG_WITH(mod_charset,
-[ --with-mod_charset Enable transfer tables for mod_charset (Rus Apache).],
-[
- AC_MSG_RESULT(yes)
- AC_DEFINE(USE_TRANSFER_TABLES,1,[ ])
-],[
- AC_MSG_RESULT(no)
-])
-
-if test -n "$APACHE_MODULE"; then
- PHP_TARGET_RDYNAMIC
- $php_shtool mkdir -p sapi/apache_hooks
- PHP_OUTPUT(sapi/apache_hooks/libphp5.module)
-fi
-
-if test -n "$APACHE_INSTALL"; then
- INSTALL_IT=$APACHE_INSTALL
-fi
-
-dnl ## Local Variables:
-dnl ## tab-width: 4
-dnl ## End:
diff --git a/sapi/apache_hooks/config.w32 b/sapi/apache_hooks/config.w32
deleted file mode 100644
index 9a4d12508c..0000000000
--- a/sapi/apache_hooks/config.w32
+++ /dev/null
@@ -1,21 +0,0 @@
-// vim:ft=javascript
-// $Id$
-
-ARG_WITH('apache-hooks', 'Build Apache 1.3.x (hooks) version of PHP', 'no');
-
-if (PHP_APACHE_HOOKS != "no") {
- if (CHECK_HEADER_ADD_INCLUDE("httpd.h", "CFLAGS_APACHE_HOOKS", php_usual_include_suspects +
- ";" + PROGRAM_FILES + "\\Apache Group\\Apache\\include" +
- ";..\\php_build\\apache\\src\\include") &&
- CHECK_LIB("ApacheCore.lib", "apache_hooks", php_usual_lib_suspects +
- ';' + PROGRAM_FILES + '\\Apache Group\\Apache\\libexec' +
- ';..\\php_build\\apache\\src\\corer')) {
- // We need to play tricks to get our readdir.h used by apache
- // headers
- SAPI('apache_hooks', 'mod_php5.c sapi_apache.c php_apache.c',
- 'php' + PHP_VERSION + 'apache_hooks.dll',
- '/D APACHEPHP5_EXPORTS /D APACHE_READDIR_H /I win32');
- } else {
- WARNING("Could not find apache libraries/headers");
- }
-}
diff --git a/sapi/apache_hooks/libphp5.module.in b/sapi/apache_hooks/libphp5.module.in
deleted file mode 100644
index 8488181897..0000000000
--- a/sapi/apache_hooks/libphp5.module.in
+++ /dev/null
@@ -1,11 +0,0 @@
-Name: php5_module
-ConfigStart
- RULE_WANTHSREGEX=no
- RULE_HIDE=yes
- PHP_LIBS="@NATIVE_RPATHS@ @PHP_LDFLAGS@ @PHP_LIBS@ @EXTRA_LIBS@ $LIBS"
- PHP_CFLAGS="$CFLAGS @OPENSSL_INCDIR_OPT@ -I@php_abs_top_builddir@/main -I@php_abs_top_builddir@/Zend -I@php_abs_top_builddir@/TSRM -I@php_abs_top_srcdir@ -I@php_abs_top_srcdir@/sapi/apache -I@php_abs_top_srcdir@/main -I@php_abs_top_srcdir@/Zend -I@php_abs_top_srcdir@/TSRM"
- my_outfile="Makefile.config"
- echo "PHP_CFLAGS=$PHP_CFLAGS" >>$my_outfile
- echo "PHP_LIBS=$PHP_LIBS" >>$my_outfile
- LIBS=$PHP_LIBS
-ConfigEnd
diff --git a/sapi/apache_hooks/mod_php5.c b/sapi/apache_hooks/mod_php5.c
deleted file mode 100644
index 53beeb0943..0000000000
--- a/sapi/apache_hooks/mod_php5.c
+++ /dev/null
@@ -1,1478 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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 at through the world-wide-web at |
- | 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. |
- +----------------------------------------------------------------------+
- | Authors: Rasmus Lerdorf <rasmus@php.net> |
- | (with helpful hints from Dean Gaudet <dgaudet@arctic.org> |
- | PHP 4.0 patches by Zeev Suraski <zeev@zend.com> |
- +----------------------------------------------------------------------+
- */
-/* $Id$ */
-
-#include "php_apache_http.h"
-
-#ifdef NETWARE
-#define SIGPIPE SIGINT
-#endif
-
-#if defined(ZEND_MULTIBYTE) && defined(HAVE_MBSTRING)
-#include "ext/mbstring/mbstring.h"
-#endif /* defined(ZEND_MULTIBYTE) && defined(HAVE_MBSTRING) */
-
-#undef shutdown
-
-/* {{{ Prototypes
- */
-int apache_php_module_main(request_rec *r, int display_source_mode TSRMLS_DC);
-static void php_save_umask(void);
-static void php_restore_umask(void);
-static int sapi_apache_read_post(char *buffer, uint count_bytes TSRMLS_DC);
-static char *sapi_apache_read_cookies(TSRMLS_D);
-static int sapi_apache_header_handler(sapi_header_struct *sapi_header, sapi_headers_struct *sapi_headers TSRMLS_DC);
-static int sapi_apache_send_headers(sapi_headers_struct *sapi_headers TSRMLS_DC);
-static int send_php(request_rec *r, int display_source_mode, char *filename);
-static int send_parsed_php(request_rec * r);
-static int send_parsed_php_source(request_rec * r);
-static int php_xbithack_handler(request_rec * r);
-static void php_init_handler(server_rec *s, pool *p);
-/* }}} */
-
-#if MODULE_MAGIC_NUMBER >= 19970728
-static void php_child_exit_handler(server_rec *s, pool *p);
-#endif
-
-#if MODULE_MAGIC_NUMBER > 19961007
-#define CONST_PREFIX const
-#else
-#define CONST_PREFIX
-#endif
-
-
-typedef struct _sapi_stack {
- int top, max, persistent;
- void **elements;
-} sapi_stack;
-
-typedef struct _php_per_dir_config {
- HashTable *ini_settings;
- sapi_stack headers_handlers;
- sapi_stack auth_handlers;
- sapi_stack access_handlers;
- sapi_stack type_handlers;
- sapi_stack fixup_handlers;
- sapi_stack logger_handlers;
- sapi_stack post_read_handlers;
- sapi_stack response_handlers;
-} php_per_dir_config;
-
-typedef struct _php_per_server_config {
- sapi_stack uri_handlers;
- sapi_stack requires;
-} php_per_server_config;
-
-
-static CONST_PREFIX char *php_apache_value_handler_ex(cmd_parms *cmd, HashTable *conf, char *arg1, char *arg2, int mode);
-static CONST_PREFIX char *php_apache_value_handler(cmd_parms *cmd, php_per_dir_config *conf, char *arg1, char *arg2);
-static CONST_PREFIX char *php_apache_admin_value_handler(cmd_parms *cmd, php_per_dir_config *conf, char *arg1, char *arg2);
-static CONST_PREFIX char *php_apache_flag_handler(cmd_parms *cmd, php_per_dir_config *conf, char *arg1, char *arg2);
-static CONST_PREFIX char *php_apache_flag_handler_ex(cmd_parms *cmd, HashTable *conf, char *arg1, char *arg2, int mode);
-static CONST_PREFIX char *php_apache_admin_flag_handler(cmd_parms *cmd, php_per_dir_config *conf, char *arg1, char *arg2);
-
-/* ### these should be defined in mod_php5.h or somewhere else */
-#define USE_PATH 1
-#define IGNORE_URL 2
-
-module MODULE_VAR_EXPORT php5_module;
-
-int saved_umask;
-//static int setup_env = 0;
-static unsigned char apache_php_initialized;
-
-typedef struct _php_per_dir_entry {
- char *key;
- char *value;
- uint key_length;
- uint value_length;
- int type;
-} php_per_dir_entry;
-
-/* some systems are missing these from their header files */
-
-/* {{{ zend stack utility functions
- */
-
-/* This code is ripped part and parcel from zend_stack.[ch]. Assuming that the
- patch supporting zend_stack_init_ex is applied, all but the bottom two
- module-specific iterators will be removed
- */
-
-int sapi_stack_init_ex(sapi_stack *stack, int persistent)
-{
- stack->top = 0;
- stack->persistent = persistent;
- stack->elements = (void **) pemalloc(sizeof(void **) * STACK_BLOCK_SIZE, persistent);
- if (!stack->elements) {
- return FAILURE;
- } else {
- stack->max = STACK_BLOCK_SIZE;
- return SUCCESS;
- }
-}
-int sapi_stack_push(sapi_stack *stack, void *element)
-{
- if (stack->top >= stack->max) { /* we need to allocate more memory */
- stack->elements = (void **) perealloc(stack->elements,
- (sizeof(void **) * (stack->max += STACK_BLOCK_SIZE)), stack->persistent);
- if (!stack->elements) {
- return FAILURE;
- }
- }
- stack->elements[stack->top] = (void *) element;
- return stack->top++;
-}
-void* sapi_stack_pop(sapi_stack *stack) {
- if(stack->top == 0) {
- return NULL;
- }
- else {
- return stack->elements[--stack->top];
- }
-}
-
-int sapi_stack_destroy(sapi_stack *stack)
-{
- return SUCCESS;
-}
-
-int sapi_stack_apply_with_argument_all(sapi_stack *stack, int type, int (*apply_function)(void *element, void *arg), void *arg)
-{
- int i, retval;
-
- switch (type) {
- case ZEND_STACK_APPLY_TOPDOWN:
- for (i=stack->top-1; i>=0; i--) {
- retval = apply_function(stack->elements[i], arg);
- }
- break;
- case ZEND_STACK_APPLY_BOTTOMUP:
- for (i=0; i<stack->top; i++) {
- retval = apply_function(stack->elements[i], arg);
- }
- break;
- }
- return retval;
-}
-
-
-int sapi_stack_apply_with_argument_stop_if_equals(sapi_stack *stack, int type, int (*apply_function)(void *element, void *arg), void *arg, int stopval)
-{
- int i;
- int ret = DECLINED;
- switch (type) {
- case ZEND_STACK_APPLY_TOPDOWN:
- for (i=stack->top-1; i>=0; i--) {
- if ((ret = apply_function(stack->elements[i], arg)) == stopval) {
- break;
- }
- }
- break;
- case ZEND_STACK_APPLY_BOTTOMUP:
- for (i=0; i<stack->top; i++) {
- if ((ret = apply_function(stack->elements[i], arg)) == stopval) {
- break;
- }
- }
- break;
- }
- return ret;
-}
-
-int sapi_stack_apply_with_argument_stop_if_http_error(sapi_stack *stack, int type, int (*apply_function)(void *element, void *arg), void *arg)
-{
- int i;
- int ret = DECLINED;
- switch (type) {
- case ZEND_STACK_APPLY_TOPDOWN:
- for (i=stack->top-1; i>=0; i--) {
- if ((ret = apply_function(stack->elements[i], arg)) > 0) {
- break;
- }
- }
- break;
- case ZEND_STACK_APPLY_BOTTOMUP:
- for (i=0; i<stack->top; i++) {
- if ((ret = apply_function(stack->elements[i], arg)) > 0) {
- break;
- }
- }
- break;
- }
- return ret;
-}
-
-void php_handler_stack_destroy(sapi_stack *stack)
-{
- php_handler *ph;
- while((ph = (php_handler *)sapi_stack_pop(stack)) != NULL) {
- free(ph->name);
- free(ph);
- }
-}
-/* }}} */
-
-/* {{{ php_save_umask
- */
-static void php_save_umask(void)
-{
- saved_umask = umask(077);
- umask(saved_umask);
-}
-/* }}} */
-
-/* {{{ sapi_apache_ub_write
- */
-static int sapi_apache_ub_write(const char *str, uint str_length TSRMLS_DC)
-{
- int ret=0;
-
- if (SG(server_context)) {
- ret = rwrite(str, str_length, (request_rec *) SG(server_context));
- }
- if (ret != str_length) {
- php_handle_aborted_connection();
- }
- return ret;
-}
-/* }}} */
-
-/* {{{ sapi_apache_flush
- */
-static void sapi_apache_flush(void *server_context)
-{
- if (server_context) {
-#if MODULE_MAGIC_NUMBER > 19970110
- rflush((request_rec *) server_context);
-#else
- bflush((request_rec *) server_context->connection->client);
-#endif
- }
-}
-/* }}} */
-
-/* {{{ sapi_apache_read_post
- */
-static int sapi_apache_read_post(char *buffer, uint count_bytes TSRMLS_DC)
-{
- uint total_read_bytes=0, read_bytes;
- request_rec *r = (request_rec *) SG(server_context);
- void (*handler)(int);
-
- /*
- * This handles the situation where the browser sends a Expect: 100-continue header
- * and needs to recieve confirmation from the server on whether or not it can send
- * the rest of the request. RFC 2616
- *
- */
- if (!SG(read_post_bytes) && !ap_should_client_block(r)) {
- return total_read_bytes;
- }
-
- handler = signal(SIGPIPE, SIG_IGN);
- while (total_read_bytes<count_bytes) {
- hard_timeout("Read POST information", r); /* start timeout timer */
- read_bytes = get_client_block(r, buffer+total_read_bytes, count_bytes-total_read_bytes);
- reset_timeout(r);
- if (read_bytes<=0) {
- break;
- }
- total_read_bytes += read_bytes;
- }
- signal(SIGPIPE, handler);
- return total_read_bytes;
-}
-/* }}} */
-
-/* {{{ sapi_apache_read_cookies
- */
-static char *sapi_apache_read_cookies(TSRMLS_D)
-{
- return (char *) table_get(((request_rec *) SG(server_context))->subprocess_env, "HTTP_COOKIE");
-}
-/* }}} */
-
-/* {{{ sapi_apache_header_handler
- */
-static int sapi_apache_header_handler(sapi_header_struct *sapi_header, sapi_headers_struct *sapi_headers TSRMLS_DC)
-{
- char *header_name, *header_content, *p;
- request_rec *r = (request_rec *) SG(server_context);
-
- header_name = sapi_header->header;
-
- header_content = p = strchr(header_name, ':');
- if (!p) {
- efree(sapi_header->header);
- return 0;
- }
-
- *p = 0;
- do {
- header_content++;
- } while (*header_content==' ');
-
- if (!strcasecmp(header_name, "Content-Type")) {
- r->content_type = pstrdup(r->pool, header_content);
- } else if (!strcasecmp(header_name, "Set-Cookie")) {
- table_add(r->headers_out, header_name, header_content);
- } else {
- table_set(r->headers_out, header_name, header_content);
- }
-
- *p = ':'; /* a well behaved header handler shouldn't change its original arguments */
-
- efree(sapi_header->header);
-
- return 0; /* don't use the default SAPI mechanism, Apache duplicates this functionality */
-}
-/* }}} */
-
-/* {{{ sapi_apache_send_headers
- */
-static int sapi_apache_send_headers(sapi_headers_struct *sapi_headers TSRMLS_DC)
-{
- if(SG(server_context) == NULL) { /* server_context is not here anymore */
- return SAPI_HEADER_SEND_FAILED;
- }
-
- ((request_rec *) SG(server_context))->status = SG(sapi_headers).http_response_code;
- /* check that we haven't sent headers already, we use our own
- * headers_sent since we may send headers at anytime
- */
- if(!AP(headers_sent)) {
- send_http_header((request_rec *) SG(server_context));
- AP(headers_sent) = 1;
- }
- return SAPI_HEADER_SENT_SUCCESSFULLY;
-}
-/* }}} */
-
-/* {{{ sapi_apache_register_server_variables
- */
-static void sapi_apache_register_server_variables(zval *track_vars_array TSRMLS_DC)
-{
- register int i;
- array_header *arr = table_elts(((request_rec *) SG(server_context))->subprocess_env);
- table_entry *elts = (table_entry *) arr->elts;
- zval **path_translated;
- HashTable *symbol_table;
-
- for (i = 0; i < arr->nelts; i++) {
- char *val;
-
- if (elts[i].val) {
- val = elts[i].val;
- } else {
- val = "";
- }
- php_register_variable(elts[i].key, val, track_vars_array TSRMLS_CC);
- }
-
- /* If PATH_TRANSLATED doesn't exist, copy it from SCRIPT_FILENAME */
- if (track_vars_array) {
- symbol_table = track_vars_array->value.ht;
- } else if (PG(register_globals)) {
- /* should never happen nowadays */
- symbol_table = EG(active_symbol_table);
- } else {
- symbol_table = NULL;
- }
- if (symbol_table
- && !zend_hash_exists(symbol_table, "PATH_TRANSLATED", sizeof("PATH_TRANSLATED"))
- && zend_hash_find(symbol_table, "SCRIPT_FILENAME", sizeof("SCRIPT_FILENAME"), (void **) &path_translated)==SUCCESS) {
- php_register_variable("PATH_TRANSLATED", Z_STRVAL_PP(path_translated), track_vars_array TSRMLS_CC);
- }
-
- php_register_variable("PHP_SELF", ((request_rec *) SG(server_context))->uri, track_vars_array TSRMLS_CC);
-}
-/* }}} */
-
-/* {{{ php_apache_startup
- */
-static int php_apache_startup(sapi_module_struct *sapi_module)
-{
- if (php_module_startup(sapi_module, &apache_module_entry, 1) == FAILURE) {
- return FAILURE;
- } else {
- return SUCCESS;
- }
-}
-/* }}} */
-
-/* {{{ php_apache_log_message
- */
-static void php_apache_log_message(char *message)
-{
- TSRMLS_FETCH();
-
- if (SG(server_context)) {
-#if MODULE_MAGIC_NUMBER >= 19970831
- aplog_error(NULL, 0, APLOG_ERR | APLOG_NOERRNO, ((request_rec *) SG(server_context))->server, "%s", message);
-#else
- log_error(message, ((request_rec *) SG(server_context))->server);
-#endif
- } else {
- fprintf(stderr, "%s", message);
- fprintf(stderr, "\n");
- }
-}
-/* }}} */
-
-/* {{{ php_apache_request_shutdown
- */
-static void php_apache_request_shutdown(void *dummy)
-{
- TSRMLS_FETCH();
- AP(current_hook) = AP_CLEANUP;
- php_output_set_status(0 TSRMLS_CC);
- SG(server_context) = NULL; /* The server context (request) is invalid by the time run_cleanups() is called */
- if(SG(sapi_started)) {
- php_request_shutdown(dummy);
- SG(sapi_started) = 0;
- }
- AP(in_request) = 0;
- if(AP(setup_env)) {
- AP(setup_env) = 0;
- }
- AP(current_hook) = AP_WAITING_FOR_REQUEST;
- AP(headers_sent) = 0;
-}
-/* }}} */
-
-/* {{{ php_apache_sapi_activate
- */
-static int php_apache_sapi_activate(TSRMLS_D)
-{
- request_rec *r = (request_rec *) SG(server_context);
-
- /*
- * For the Apache module version, this bit of code registers a cleanup
- * function that gets triggered when our request pool is destroyed.
- * We need this because at any point in our code we can be interrupted
- * and that may happen before we have had time to free our memory.
- * The php_request_shutdown function needs to free all outstanding allocated
- * memory.
- */
- block_alarms();
- register_cleanup(r->pool, NULL, php_apache_request_shutdown, php_request_shutdown_for_exec);
- AP(in_request)=1;
- unblock_alarms();
-
- /* Override the default headers_only value - sometimes "GET" requests should actually only
- * send headers.
- */
- SG(request_info).headers_only = r->header_only;
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ php_apache_get_stat
- */
-static struct stat *php_apache_get_stat(TSRMLS_D)
-{
- return &((request_rec *) SG(server_context))->finfo;
-}
-/* }}} */
-
-/* {{{ php_apache_getenv
- */
-static char *php_apache_getenv(char *name, size_t name_len TSRMLS_DC)
-{
- return (char *) table_get(((request_rec *) SG(server_context))->subprocess_env, name);
-}
-/* }}} */
-
-/* {{{ sapi_module_struct apache_sapi_module
- */
-static sapi_module_struct apache_sapi_module = {
- "apache", /* name */
- "Apache", /* pretty name */
-
- php_apache_startup, /* startup */
- php_module_shutdown_wrapper, /* shutdown */
-
- php_apache_sapi_activate, /* activate */
- NULL, /* deactivate */
-
- sapi_apache_ub_write, /* unbuffered write */
- sapi_apache_flush, /* flush */
- php_apache_get_stat, /* get uid */
- php_apache_getenv, /* getenv */
-
- php_error, /* error handler */
-
- sapi_apache_header_handler, /* header handler */
- sapi_apache_send_headers, /* send headers handler */
- NULL, /* send header handler */
-
- sapi_apache_read_post, /* read POST data */
- sapi_apache_read_cookies, /* read Cookies */
-
- sapi_apache_register_server_variables, /* register server variables */
- php_apache_log_message, /* Log message */
-
- NULL, /* php.ini path override */
-
-#ifdef PHP_WIN32
- NULL,
- NULL,
-#else
- block_alarms, /* Block interruptions */
- unblock_alarms, /* Unblock interruptions */
-#endif
-
- NULL, /* default post reader */
- NULL, /* treat data */
- NULL, /* exe location */
- 0, /* ini ignore */
- NULL
-
-};
-/* }}} */
-
-/* {{{ php_restore_umask
- */
-static void php_restore_umask(void)
-{
- umask(saved_umask);
-}
-/* }}} */
-
-/* {{{ init_request_info
- */
-static void init_request_info(TSRMLS_D)
-{
- request_rec *r = ((request_rec *) SG(server_context));
- char *content_length = (char *) table_get(r->subprocess_env, "CONTENT_LENGTH");
- const char *authorization=NULL;
- char *tmp, *tmp_user;
-
- SG(request_info).query_string = r->args;
- SG(request_info).path_translated = r->filename;
- SG(request_info).request_uri = r->uri;
- SG(request_info).request_method = (char *)r->method;
- SG(request_info).content_type = (char *) table_get(r->subprocess_env, "CONTENT_TYPE");
- SG(request_info).content_length = (content_length ? atoi(content_length) : 0);
- SG(sapi_headers).http_response_code = r->status;
-
- if (r->headers_in) {
- authorization = table_get(r->headers_in, "Authorization");
- }
- if (authorization
- && !auth_type(r)
- && !strcasecmp(getword(r->pool, &authorization, ' '), "Basic")) {
- tmp = uudecode(r->pool, authorization);
- SG(request_info).auth_user = NULL;
- tmp_user = getword_nulls_nc(r->pool, &tmp, ':');
- if (tmp_user) {
- r->connection->user = pstrdup(r->connection->pool, tmp_user);
- r->connection->ap_auth_type = "Basic";
- SG(request_info).auth_user = estrdup(tmp_user);
- }
- SG(request_info).auth_password = NULL;
- if (tmp) {
- SG(request_info).auth_password = estrdup(tmp);
- }
- } else {
- SG(request_info).auth_user = NULL;
- SG(request_info).auth_password = NULL;
- }
-}
-/* }}} */
-
-/* {{{ php_apache_alter_ini_entries
- */
-static int php_apache_alter_ini_entries(php_per_dir_entry *per_dir_entry TSRMLS_DC)
-{
- zend_alter_ini_entry(per_dir_entry->key, per_dir_entry->key_length+1, per_dir_entry->value, per_dir_entry->value_length, per_dir_entry->type, PHP_INI_STAGE_ACTIVATE);
- return 0;
-}
-/* }}} */
-
-/* {{{ php_apache_get_default_mimetype
- */
-static char *php_apache_get_default_mimetype(request_rec *r TSRMLS_DC)
-{
-
- char *mimetype;
- if (SG(default_mimetype) || SG(default_charset)) {
- /* Assume output will be of the default MIME type. Individual
- scripts may change this later. */
- char *tmpmimetype;
- tmpmimetype = sapi_get_default_content_type(TSRMLS_C);
- mimetype = pstrdup(r->pool, tmpmimetype);
- efree(tmpmimetype);
- } else {
- mimetype = SAPI_DEFAULT_MIMETYPE "; charset=" SAPI_DEFAULT_CHARSET;
- }
- return mimetype;
-}
-/* }}} */
-
-/* {{{ send_php
- */
-static int send_php(request_rec *r, int display_source_mode, char *filename)
-{
- int retval;
- php_per_dir_config *per_dir_conf;
- TSRMLS_FETCH();
- if (AP(in_request)) {
- zend_file_handle fh;
-
- fh.filename = r->filename;
- fh.opened_path = NULL;
- fh.free_filename = 0;
- fh.type = ZEND_HANDLE_FILENAME;
-
-#if defined(ZEND_MULTIBYTE) && defined(HAVE_MBSTRING)
- php_mbstring_set_zend_encoding(TSRMLS_C);
-#endif /* defined(ZEND_MULTIBYTE) && defined(HAVE_MBSTRING) */
-
- zend_execute_scripts(ZEND_INCLUDE TSRMLS_CC, NULL, 1, &fh);
- return OK;
- }
-
- zend_first_try {
-
- /* Make sure file exists */
- if (filename == NULL && r->finfo.st_mode == 0) {
- return DECLINED;
- }
-
- per_dir_conf = (php_per_dir_config *) get_module_config(r->per_dir_config, &php5_module);
- if (per_dir_conf) {
- zend_hash_apply((HashTable *) per_dir_conf->ini_settings, (apply_func_t) php_apache_alter_ini_entries TSRMLS_CC);
- }
-
- /* If PHP parser engine has been turned off with an "engine off"
- * directive, then decline to handle this request
- */
- if (!AP(engine)) {
- r->content_type = php_apache_get_default_mimetype(r TSRMLS_CC);
- r->allowed |= (1 << METHODS) - 1;
- zend_try {
- zend_ini_deactivate(TSRMLS_C);
- } zend_end_try();
- return DECLINED;
- }
- if (filename == NULL) {
- filename = r->filename;
- }
-
- /* Apache 1.2 has a more complex mechanism for reading POST data */
-#if MODULE_MAGIC_NUMBER > 19961007
- if ((retval = setup_client_block(r, REQUEST_CHUNKED_ERROR))) {
- zend_try {
- zend_ini_deactivate(TSRMLS_C);
- } zend_end_try();
- return retval;
- }
-#endif
-
- if (AP(last_modified)) {
-#if MODULE_MAGIC_NUMBER < 19970912
- if ((retval = set_last_modified(r, r->finfo.st_mtime))) {
- zend_try {
- zend_ini_deactivate(TSRMLS_C);
- } zend_end_try();
- return retval;
- }
-#else
- update_mtime (r, r->finfo.st_mtime);
- set_last_modified(r);
- set_etag(r);
-#endif
- }
- /* Assume output will be of the default MIME type. Individual
- scripts may change this later in the request. */
- r->content_type = php_apache_get_default_mimetype(r TSRMLS_CC);
-
- /* Init timeout */
- hard_timeout("send", r);
-
- SG(server_context) = r;
-
- php_save_umask();
- if(!AP(setup_env)) {
- AP(setup_env) = 1;
- add_common_vars(r);
- add_cgi_vars(r);
- }
- init_request_info(TSRMLS_C);
- apache_php_module_main(r, display_source_mode TSRMLS_CC);
-
- /* Done, restore umask, turn off timeout, close file and return */
- php_restore_umask();
- kill_timeout(r);
- } zend_end_try();
-
- return OK;
-}
-/* }}} */
-
-/* {{{ send_parsed_php
- */
-static int send_parsed_php(request_rec * r)
-{
- int result = send_php(r, 0, NULL);
-
-#if MEMORY_LIMIT
- {
- char *mem_usage;
- TSRMLS_FETCH();
-
- mem_usage = ap_psprintf(r->pool, "%u", AG(allocated_memory_peak));
- AG(allocated_memory_peak) = 0;
- ap_table_setn(r->notes, "mod_php_memory_usage", mem_usage);
- }
-#endif
-
- return result;
-}
-/* }}} */
-
-/* {{{ send_parsed_php_source
- */
-static int send_parsed_php_source(request_rec * r)
-{
- return send_php(r, 1, NULL);
-}
-/* }}} */
-
-
-/* {{{ destroy_per_dir_entry
- */
-static void destroy_per_dir_entry(php_per_dir_entry *per_dir_entry)
-{
- free(per_dir_entry->key);
- free(per_dir_entry->value);
-}
-/* }}} */
-
-/* {{{ copy_per_dir_entry
- */
-static void copy_per_dir_entry(php_per_dir_entry *per_dir_entry)
-{
- php_per_dir_entry tmp = *per_dir_entry;
-
- per_dir_entry->key = (char *) malloc(tmp.key_length+1);
- memcpy(per_dir_entry->key, tmp.key, tmp.key_length);
- per_dir_entry->key[per_dir_entry->key_length] = 0;
-
- per_dir_entry->value = (char *) malloc(tmp.value_length+1);
- memcpy(per_dir_entry->value, tmp.value, tmp.value_length);
- per_dir_entry->value[per_dir_entry->value_length] = 0;
-}
-/* }}} */
-
-/* {{{ should_overwrite_per_dir_entry;
-
- */
-static zend_bool should_overwrite_per_dir_entry(HashTable *target_ht, php_per_dir_entry *orig_per_dir_entry, zend_hash_key *hash_key, void *pData)
-{
- php_per_dir_entry *new_per_dir_entry;
-
- if (zend_hash_find(target_ht, hash_key->arKey, hash_key->nKeyLength, (void **) &new_per_dir_entry)==FAILURE) {
- return 1; /* does not exist in dest, copy from source */
- }
-
- if (new_per_dir_entry->type==PHP_INI_SYSTEM
- && orig_per_dir_entry->type!=PHP_INI_SYSTEM) {
- return 1;
- } else {
- return 0;
- }
-}
-/* }}} */
-/* {{{ php_destroy_per_server_info
- */
-static void php_destroy_per_server_info(php_per_server_config *conf)
-{
- php_handler_stack_destroy(&conf->requires);
- php_handler_stack_destroy(&conf->uri_handlers);
-}
-/* }}} */
-
-/* {{{ php_destroy_per_dir_info
- */
-static void php_destroy_per_dir_info(php_per_dir_config *conf)
-{
- zend_hash_destroy(conf->ini_settings);
- php_handler_stack_destroy(&conf->response_handlers);
- php_handler_stack_destroy(&conf->auth_handlers);
- php_handler_stack_destroy(&conf->access_handlers);
- php_handler_stack_destroy(&conf->type_handlers);
- php_handler_stack_destroy(&conf->fixup_handlers);
- php_handler_stack_destroy(&conf->logger_handlers);
- php_handler_stack_destroy(&conf->post_read_handlers);
- php_handler_stack_destroy(&conf->headers_handlers);
- free(conf->ini_settings);
-}
-/* }}} */
-
-/* {{{ php_create_server
- */
-static void *php_create_server(pool *p, char *dummy)
-{
- php_per_server_config *conf;
- conf = (php_per_server_config *) malloc(sizeof(php_per_server_config));
- register_cleanup(p, (void *) conf, (void (*)(void *)) php_destroy_per_server_info, (void (*)(void *)) php_destroy_per_server_info);
-
- sapi_stack_init_ex(&conf->requires, 1);
- sapi_stack_init_ex(&conf->uri_handlers, 1);
- return conf;
-}
-
-/* }}} */
-
-
-/* {{{ php_create_dir
- */
-static void *php_create_dir(pool *p, char *dummy)
-{
- php_per_dir_config *conf;
- conf = (php_per_dir_config *) malloc(sizeof(php_per_dir_config));
- conf->ini_settings = (HashTable *) malloc(sizeof(HashTable));
- zend_hash_init_ex(conf->ini_settings, 5, NULL, (void (*)(void *)) destroy_per_dir_entry, 1, 0);
- sapi_stack_init_ex(&conf->response_handlers, 1);
- sapi_stack_init_ex(&conf->headers_handlers, 1);
- sapi_stack_init_ex(&conf->auth_handlers, 1);
- sapi_stack_init_ex(&conf->access_handlers, 1);
- sapi_stack_init_ex(&conf->type_handlers, 1);
- sapi_stack_init_ex(&conf->fixup_handlers, 1);
- sapi_stack_init_ex(&conf->logger_handlers, 1);
- sapi_stack_init_ex(&conf->post_read_handlers, 1);
- register_cleanup(p, (void *) conf, (void (*)(void *)) php_destroy_per_dir_info, (void (*)(void *)) php_destroy_per_dir_info);
-
- return conf;
-}
-
-/* }}} */
-
-/* {{{ php_merge_dir
- */
-static void *php_merge_dir(pool *p, void *basev, void *addv)
-{
- php_per_dir_config *a = (php_per_dir_config *) addv;
- php_per_dir_config *b = (php_per_dir_config *) basev;
- /* This function *must* return addv, and not modify basev */
- zend_hash_merge_ex((HashTable *) a->ini_settings, (HashTable *) b->ini_settings, (copy_ctor_func_t) copy_per_dir_entry, sizeof(php_per_dir_entry), (merge_checker_func_t) should_overwrite_per_dir_entry, NULL);
- a->headers_handlers = (a->headers_handlers.top)?a->headers_handlers:b->headers_handlers;
- a->auth_handlers = (a->auth_handlers.top)?a->auth_handlers:b->auth_handlers;
- a->access_handlers = (a->access_handlers.top)?a->access_handlers:b->access_handlers;
- a->type_handlers = (a->type_handlers.top)?a->type_handlers:b->type_handlers;
- a->fixup_handlers = (a->fixup_handlers.top)?a->fixup_handlers:b->fixup_handlers;
- a->logger_handlers = (a->logger_handlers.top)?a->logger_handlers:b->logger_handlers;
- a->post_read_handlers = (a->post_read_handlers.top)?a->post_read_handlers:b->post_read_handlers;
- a->response_handlers = (a->response_handlers.top)?a->response_handlers:b->response_handlers;
- return a;
-}
-/* }}} */
-
-/* {{{ php_apache_value_handler_ex
- */
-static CONST_PREFIX char *php_apache_value_handler_ex(cmd_parms *cmd, HashTable *conf, char *arg1, char *arg2, int mode)
-{
- php_per_dir_entry per_dir_entry;
-
- if (!apache_php_initialized) {
- apache_php_initialized = 1;
-#ifdef ZTS
- tsrm_startup(1, 1, 0, NULL);
-#endif
- sapi_startup(&apache_sapi_module);
- php_apache_startup(&apache_sapi_module);
- }
- per_dir_entry.type = mode;
-
- if (strcasecmp(arg2, "none") == 0) {
- arg2 = "";
- }
-
- per_dir_entry.key_length = strlen(arg1);
- per_dir_entry.value_length = strlen(arg2);
-
- per_dir_entry.key = (char *) malloc(per_dir_entry.key_length+1);
- memcpy(per_dir_entry.key, arg1, per_dir_entry.key_length);
- per_dir_entry.key[per_dir_entry.key_length] = 0;
-
- per_dir_entry.value = (char *) malloc(per_dir_entry.value_length+1);
- memcpy(per_dir_entry.value, arg2, per_dir_entry.value_length);
- per_dir_entry.value[per_dir_entry.value_length] = 0;
-
- zend_hash_update(conf, per_dir_entry.key, per_dir_entry.key_length, &per_dir_entry, sizeof(php_per_dir_entry), NULL);
- return NULL;
-}
-/* }}} */
-
-static CONST_PREFIX char *php_set_server_handler(server_rec *s, char *arg1, long handler_stage, long handler_type)
-{
- php_per_server_config *conf;
- php_handler *handler;
- handler = (php_handler *) malloc(sizeof(php_handler));
- handler->type = handler_type;
- handler->stage = handler_stage;
- handler->name = strdup(arg1);
- conf = get_module_config(s->module_config, &php5_module);
- switch(handler_stage) {
- case AP_URI_TRANS:
- sapi_stack_push(&conf->uri_handlers, handler);
- break;
- default:
- sapi_stack_push(&conf->requires, handler);
- break;
- }
- return NULL;
-}
-
-static CONST_PREFIX char *php_set_dir_handler(php_per_dir_config *conf, char *arg1, long handler_stage, long handler_type)
-{
- php_handler *handler;
- handler = (php_handler *) malloc(sizeof(php_handler));
- handler->type = handler_type;
- handler->stage = handler_stage;
- handler->name = strdup(arg1);
- switch(handler_stage) {
- case AP_POST_READ:
- sapi_stack_push(&conf->post_read_handlers, handler);
- break;
- case AP_HEADER_PARSE:
- sapi_stack_push(&conf->headers_handlers, handler);
- break;
- case AP_ACCESS_CONTROL:
- sapi_stack_push(&conf->access_handlers, handler);
- break;
- case AP_AUTHENTICATION:
- sapi_stack_push(&conf->auth_handlers, handler);
- break;
- case AP_AUTHORIZATION:
- break;
- case AP_TYPE_CHECKING:
- sapi_stack_push(&conf->type_handlers, handler);
- break;
- case AP_FIXUP:
- sapi_stack_push(&conf->fixup_handlers, handler);
- break;
- case AP_RESPONSE:
- sapi_stack_push(&conf->response_handlers, handler);
- break;
- case AP_LOGGING:
- sapi_stack_push(&conf->logger_handlers, handler);
- break;
- default:
- break;
- }
- return NULL;
-}
-
-/* {{{ php_set_uri_handler
- */
-static CONST_PREFIX char *php_set_uri_handler(cmd_parms *cmd, void *dummy, char *arg1)
-{
- return php_set_server_handler(cmd->server, arg1, AP_URI_TRANS, AP_HANDLER_TYPE_FILE);
-}
-/* }}} */
-
-/* {{{ php_set_uri_handler_code */
-static CONST_PREFIX char *php_set_uri_handler_code(cmd_parms *cmd, void *dummy, char *arg1)
-{
- return php_set_server_handler(cmd->server, arg1, AP_URI_TRANS, AP_HANDLER_TYPE_METHOD);
-}
-/* }}} */
-
-/* {{{ php_set_header_handler
- */
-static CONST_PREFIX char *php_set_header_handler(cmd_parms *cmd, php_per_dir_config *conf, char *arg1)
-{
- return php_set_dir_handler(conf, arg1, AP_HEADER_PARSE, AP_HANDLER_TYPE_FILE);
-}
-static CONST_PREFIX char *php_set_header_handler_code(cmd_parms *cmd, php_per_dir_config *conf, char *arg1)
-{
- return php_set_dir_handler(conf, arg1, AP_HEADER_PARSE, AP_HANDLER_TYPE_METHOD);
-}
-/* }}} */
-
-/* {{{ php_set_auth_handler
- */
-static CONST_PREFIX char *php_set_auth_handler(cmd_parms *cmd, php_per_dir_config *conf, char *arg1)
-{
- return php_set_dir_handler(conf, arg1, AP_AUTHENTICATION, AP_HANDLER_TYPE_FILE);
-}
-static CONST_PREFIX char *php_set_auth_handler_code(cmd_parms *cmd, php_per_dir_config *conf, char *arg1)
-{
- return php_set_dir_handler(conf, arg1, AP_AUTHENTICATION, AP_HANDLER_TYPE_METHOD);
-}
-
-/* }}} */
-
-/* {{{ php_set_access_handler
- */
-static CONST_PREFIX char *php_set_access_handler(cmd_parms *cmd, php_per_dir_config *conf, char *arg1)
-{
- return php_set_dir_handler(conf, arg1, AP_ACCESS_CONTROL, AP_HANDLER_TYPE_FILE);
-}
-static CONST_PREFIX char *php_set_access_handler_code(cmd_parms *cmd, php_per_dir_config *conf, char *arg1)
-{
- return php_set_dir_handler(conf, arg1, AP_ACCESS_CONTROL, AP_HANDLER_TYPE_METHOD);
-}
-
-/* }}} */
-
-/* {{{ php_set_type_handler
- */
-static CONST_PREFIX char *php_set_type_handler(cmd_parms *cmd, php_per_dir_config *conf, char *arg1)
-{
- return php_set_dir_handler(conf, arg1, AP_TYPE_CHECKING, AP_HANDLER_TYPE_FILE);
-}
-static CONST_PREFIX char *php_set_type_handler_code(cmd_parms *cmd, php_per_dir_config *conf, char *arg1)
-{
- return php_set_dir_handler(conf, arg1, AP_TYPE_CHECKING, AP_HANDLER_TYPE_METHOD);
-}
-
-/* }}} */
-
-/* {{{ php_set_fixup_handler
- */
-static CONST_PREFIX char *php_set_fixup_handler(cmd_parms *cmd, php_per_dir_config *conf, char *arg1)
-{
- return php_set_dir_handler(conf, arg1, AP_FIXUP, AP_HANDLER_TYPE_FILE);
-}
-static CONST_PREFIX char *php_set_fixup_handler_code(cmd_parms *cmd, php_per_dir_config *conf, char *arg1)
-{
- return php_set_dir_handler(conf, arg1, AP_FIXUP, AP_HANDLER_TYPE_METHOD);
-}
-/* }}} */
-
-/* {{{ php_set_logger_handler
- */
-static CONST_PREFIX char *php_set_logger_handler(cmd_parms *cmd, php_per_dir_config *conf, char *arg1)
-{
- return php_set_dir_handler(conf, arg1, AP_LOGGING, AP_HANDLER_TYPE_FILE);
-}
-static CONST_PREFIX char *php_set_logger_handler_code(cmd_parms *cmd, php_per_dir_config *conf, char *arg1)
-{
- return php_set_dir_handler(conf, arg1, AP_LOGGING, AP_HANDLER_TYPE_METHOD);
-}
-
-/* }}} */
-
-/* {{{ php_set_post_read_handler
- */
-static CONST_PREFIX char *php_set_post_read_handler(cmd_parms *cmd, php_per_dir_config *conf, char *arg1)
-{
- return php_set_dir_handler(conf, arg1, AP_POST_READ, AP_HANDLER_TYPE_FILE);
-}
-static CONST_PREFIX char *php_set_post_read_handler_code(cmd_parms *cmd, php_per_dir_config *conf, char *arg1)
-{
- return php_set_dir_handler(conf, arg1, AP_POST_READ, AP_HANDLER_TYPE_METHOD);
-}
-
-
-/* }}} */
-
-/* {{{ php_set_require
- */
-
-static CONST_PREFIX char *php_set_require(cmd_parms *cmd, void *dummy, char *arg1)
-{
- return php_set_server_handler(cmd->server, arg1, 0, AP_HANDLER_TYPE_FILE);
-}
-/* }}} */
-
-/* {{{ php_set_response_handler
- */
-static CONST_PREFIX char *php_set_response_handler(cmd_parms *cmd, php_per_dir_config *conf, char *arg1)
-{
- return php_set_dir_handler(conf, arg1, AP_RESPONSE, AP_HANDLER_TYPE_FILE);
-}
-static CONST_PREFIX char *php_set_response_handler_code(cmd_parms *cmd, php_per_dir_config *conf, char *arg1)
-{
- return php_set_dir_handler(conf, arg1, AP_RESPONSE, AP_HANDLER_TYPE_METHOD);
-}
-/* }}} */
-
-/* {{{ php_apache_value_handler
- */
-static CONST_PREFIX char *php_apache_value_handler(cmd_parms *cmd, php_per_dir_config *conf, char *arg1, char *arg2)
-{
- return php_apache_value_handler_ex(cmd, conf->ini_settings, arg1, arg2, PHP_INI_PERDIR);
-}
-/* }}} */
-
-/* {{{ php_apache_admin_value_handler
- */
-static CONST_PREFIX char *php_apache_admin_value_handler(cmd_parms *cmd, php_per_dir_config *conf, char *arg1, char *arg2)
-{
- return php_apache_value_handler_ex(cmd, conf->ini_settings, arg1, arg2, PHP_INI_SYSTEM);
-}
-/* }}} */
-
-/* {{{ php_apache_flag_handler_ex
- */
-static CONST_PREFIX char *php_apache_flag_handler_ex(cmd_parms *cmd, HashTable *conf, char *arg1, char *arg2, int mode)
-{
- char bool_val[2];
-
- if (!strcasecmp(arg2, "On")) {
- bool_val[0] = '1';
- } else {
- bool_val[0] = '0';
- }
- bool_val[1] = 0;
-
- return php_apache_value_handler_ex(cmd, conf, arg1, bool_val, mode);
-}
-/* }}} */
-
-/* {{{ php_apache_flag_handler
- */
-static CONST_PREFIX char *php_apache_flag_handler(cmd_parms *cmd, php_per_dir_config *conf, char *arg1, char *arg2)
-{
- return php_apache_flag_handler_ex(cmd, conf->ini_settings, arg1, arg2, PHP_INI_PERDIR);
-}
-/* }}} */
-
-/* {{{ php_apache_admin_flag_handler
- */
-static CONST_PREFIX char *php_apache_admin_flag_handler(cmd_parms *cmd, php_per_dir_config *conf, char *arg1, char *arg2)
-{
- return php_apache_flag_handler_ex(cmd, conf->ini_settings, arg1, arg2, PHP_INI_SYSTEM);
-}
-/* }}} */
-
-/* {{{ int php_xbithack_handler(request_rec * r)
- */
-static int php_xbithack_handler(request_rec * r)
-{
- php_per_dir_config *conf;
- TSRMLS_FETCH();
-
- if (!(r->finfo.st_mode & S_IXUSR)) {
- r->allowed |= (1 << METHODS) - 1;
- return DECLINED;
- }
- conf = (php_per_dir_config *) get_module_config(r->per_dir_config, &php5_module);
- if (conf) {
- zend_hash_apply((HashTable *) conf->ini_settings, (apply_func_t) php_apache_alter_ini_entries TSRMLS_CC);
- }
- if(!AP(xbithack)) {
- r->allowed |= (1 << METHODS) - 1;
- zend_try {
- zend_ini_deactivate(TSRMLS_C);
- } zend_end_try();
- return DECLINED;
- }
- return send_parsed_php(r);
-}
-/* }}} */
-
-/* {{{ apache_php_module_shutdown_wrapper
- */
-static void apache_php_module_shutdown_wrapper(void)
-{
- apache_php_initialized = 0;
- apache_sapi_module.shutdown(&apache_sapi_module);
-
-#if MODULE_MAGIC_NUMBER >= 19970728
- /* This function is only called on server exit if the apache API
- * child_exit handler exists, so shutdown globally
- */
- sapi_shutdown();
-#endif
-
-#ifdef ZTS
- tsrm_shutdown();
-#endif
-}
-/* }}} */
-
-#if MODULE_MAGIC_NUMBER >= 19970728
-/* {{{ php_child_exit_handler
- */
-static void php_child_exit_handler(server_rec *s, pool *p)
-{
-/* apache_php_initialized = 0; */
- apache_sapi_module.shutdown(&apache_sapi_module);
-
-#ifdef ZTS
- tsrm_shutdown();
-#endif
-}
-/* }}} */
-#endif
-
-/* {{{ void php_init_handler(server_rec *s, pool *p)
- */
-static void php_init_handler(server_rec *s, pool *p)
-{
- register_cleanup(p, NULL, (void (*)(void *))apache_php_module_shutdown_wrapper, (void (*)(void *))php_module_shutdown_for_exec);
- if (!apache_php_initialized) {
- apache_php_initialized = 1;
-#ifdef ZTS
- tsrm_startup(1, 1, 0, NULL);
-#endif
- sapi_startup(&apache_sapi_module);
- php_apache_startup(&apache_sapi_module);
- }
-#if MODULE_MAGIC_NUMBER >= 19980527
- {
- TSRMLS_FETCH();
- if (PG(expose_php)) {
- ap_add_version_component("PHP/" PHP_VERSION);
- }
- }
-#endif
-}
-/* }}} */
-
-static int php_run_hook(php_handler *handler, request_rec *r)
-{
- zval *ret = NULL;
- php_per_dir_config *conf;
-
- TSRMLS_FETCH();
-
- if(!AP(apache_config_loaded)) {
- conf = (php_per_dir_config *) get_module_config(r->per_dir_config, &php5_module);
- if (conf)
- zend_hash_apply((HashTable *)conf->ini_settings, (apply_func_t) php_apache_alter_ini_entries TSRMLS_CC);
- AP(apache_config_loaded) = 1;
- }
- if (!handler->name) {
- return DECLINED;
- }
- php_save_umask();
- if (!AP(setup_env)) {
- AP(setup_env) = 1;
- add_common_vars(r);
- add_cgi_vars(r);
- }
- SG(server_context) = r;
- init_request_info(TSRMLS_C);
- apache_php_module_hook(r, handler, &ret TSRMLS_CC);
- php_restore_umask();
- kill_timeout(r);
- if (ret) {
- convert_to_long(ret);
- return Z_LVAL_P(ret);
- }
- return HTTP_INTERNAL_SERVER_ERROR;
-}
-
-
-static int php_uri_translation(request_rec *r)
-{
- php_per_server_config *conf;
- TSRMLS_FETCH();
- AP(current_hook) = AP_URI_TRANS;
- conf = (php_per_server_config *) get_module_config(r->server->module_config, &php5_module);
- return sapi_stack_apply_with_argument_stop_if_equals(&conf->uri_handlers,
- ZEND_STACK_APPLY_BOTTOMUP,
- (int (*)(void *element, void *)) php_run_hook, r, OK);
-}
-
-static int php_header_hook(request_rec *r)
-{
- php_per_dir_config *conf;
- TSRMLS_FETCH();
- AP(current_hook) = AP_HEADER_PARSE;
- conf = (php_per_dir_config *) get_module_config(r->per_dir_config, &php5_module);
- return sapi_stack_apply_with_argument_stop_if_http_error(&conf->headers_handlers,
- ZEND_STACK_APPLY_BOTTOMUP,
- (int (*)(void *element, void *)) php_run_hook, r);
-}
-
-static int php_auth_hook(request_rec *r)
-{
- php_per_dir_config *conf;
- TSRMLS_FETCH();
- AP(current_hook) = AP_AUTHENTICATION;
- conf = (php_per_dir_config *) get_module_config(r->per_dir_config, &php5_module);
- return sapi_stack_apply_with_argument_stop_if_equals(&conf->auth_handlers,
- ZEND_STACK_APPLY_BOTTOMUP,
- (int (*)(void *element, void *)) php_run_hook, r, OK);
-}
-
-static int php_access_hook(request_rec *r)
-{
- php_per_dir_config *conf;
- int status = DECLINED;
- TSRMLS_FETCH();
- AP(current_hook) = AP_ACCESS_CONTROL;
- conf = (php_per_dir_config *) get_module_config(r->per_dir_config, &php5_module);
- status = sapi_stack_apply_with_argument_stop_if_http_error(&conf->access_handlers,
- ZEND_STACK_APPLY_BOTTOMUP,
- (int (*)(void *element, void *)) php_run_hook, r);
- return status;
-
-}
-
-static int php_type_hook(request_rec *r)
-{
- php_per_dir_config *conf;
- TSRMLS_FETCH();
- AP(current_hook) = AP_TYPE_CHECKING;
- conf = (php_per_dir_config *) get_module_config(r->per_dir_config, &php5_module);
- return sapi_stack_apply_with_argument_stop_if_equals(&conf->type_handlers,
- ZEND_STACK_APPLY_BOTTOMUP,
- (int (*)(void *element, void *)) php_run_hook,
- r, OK);
-}
-
-static int php_fixup_hook(request_rec *r)
-{
- php_per_dir_config *conf;
- TSRMLS_FETCH();
- AP(current_hook) = AP_FIXUP;
- conf = (php_per_dir_config *) get_module_config(r->per_dir_config, &php5_module);
- return sapi_stack_apply_with_argument_stop_if_http_error(&conf->fixup_handlers,
- ZEND_STACK_APPLY_BOTTOMUP,
- (int (*)(void *element, void *)) php_run_hook,
- r);
-}
-
-static int php_logger_hook(request_rec *r)
-{
- php_per_dir_config *conf;
- TSRMLS_FETCH();
- AP(current_hook) = AP_LOGGING;
- conf = (php_per_dir_config *) get_module_config(r->per_dir_config, &php5_module);
- return sapi_stack_apply_with_argument_stop_if_http_error(&conf->logger_handlers,
- ZEND_STACK_APPLY_BOTTOMUP,
- (int (*)(void *element, void *)) php_run_hook,
- r);
-}
-
-static int php_post_read_hook(request_rec *r)
-{
- php_per_dir_config *conf;
- php_per_server_config *svr;
- TSRMLS_FETCH();
- AP(current_hook) = AP_POST_READ;
- svr = get_module_config(r->server->module_config, &php5_module);
- if(ap_is_initial_req(r)) {
- sapi_stack_apply_with_argument_all(&svr->requires, ZEND_STACK_APPLY_BOTTOMUP, (int (*)(void *element, void *)) php_run_hook, r);
- }
- conf = (php_per_dir_config *) get_module_config(r->per_dir_config, &php5_module);
- return sapi_stack_apply_with_argument_stop_if_http_error(&conf->post_read_handlers,
- ZEND_STACK_APPLY_BOTTOMUP,
- (int (*)(void *element, void *)) php_run_hook, r);
-}
-
-static int php_response_handler(request_rec *r)
-{
- php_per_dir_config *conf;
- TSRMLS_FETCH();
- AP(current_hook) = AP_RESPONSE;
- conf = (php_per_dir_config *) get_module_config(r->per_dir_config, &php5_module);
- return sapi_stack_apply_with_argument_all(&conf->response_handlers, ZEND_STACK_APPLY_BOTTOMUP, (int (*)(void *element, void *)) php_run_hook, r);
-}
-
-/* {{{ handler_rec php_handlers[]
- */
-handler_rec php_handlers[] =
-{
- {"application/x-httpd-php", send_parsed_php},
- {"application/x-httpd-php-source", send_parsed_php_source},
- {"text/html", php_xbithack_handler},
- {"php-script", php_response_handler},
- {NULL}
-};
-/* }}} */
-
-/* {{{ command_rec php_commands[]
- */
-command_rec php_commands[] =
-{
- {"php_value", php_apache_value_handler, NULL, OR_OPTIONS, TAKE2, "PHP Value Modifier"},
- {"phpUriHandler", php_set_uri_handler, NULL, RSRC_CONF, TAKE1, "PHP Value Modifier"},
- {"phpUriHandlerMethod", php_set_uri_handler_code, NULL, RSRC_CONF, TAKE1, "PHP Value Modifier"},
-#if MODULE_MAGIC_NUMBER >= 19970103
- {"phpHeaderHandler", php_set_header_handler, NULL, OR_OPTIONS, TAKE1, "PHP Value Modifier"},
- {"phpHeaderHandlerMethod", php_set_header_handler_code, NULL, OR_OPTIONS, TAKE1, "PHP Value Modifier"},
-#endif
- {"phpAuthHandler", php_set_auth_handler, NULL, OR_OPTIONS, TAKE1, "PHP Value Modifier"},
- {"phpAuthHandlerMethod", php_set_auth_handler_code, NULL, OR_OPTIONS, TAKE1, "PHP Value Modifier"},
- {"phpAccessHandler", php_set_access_handler, NULL, OR_OPTIONS, TAKE1, "PHP Value Modifier"},
- {"phpAccessHandlerMethod", php_set_access_handler_code, NULL, OR_OPTIONS, TAKE1, "PHP Value Modifier"},
- {"phpTypeHandler", php_set_type_handler, NULL, OR_OPTIONS, TAKE1, "PHP Value Modifier"},
- {"phpTypeHandlerMethod", php_set_type_handler_code, NULL, OR_OPTIONS, TAKE1, "PHP Value Modifier"},
- {"phpFixupHandler", php_set_fixup_handler, NULL, OR_OPTIONS, TAKE1, "PHP Value Modifier"},
- {"phpFixupHandlerMethod", php_set_fixup_handler_code, NULL, OR_OPTIONS, TAKE1, "PHP Value Modifier"},
- {"phpLoggerHandler", php_set_logger_handler, NULL, OR_OPTIONS, TAKE1, "PHP Value Modifier"},
- {"phpLoggerHandlerMethod", php_set_logger_handler_code, NULL, OR_OPTIONS, TAKE1, "PHP Value Modifier"},
-#if MODULE_MAGIC_NUMBER >= 19970902
- {"phpPostReadHandler", php_set_post_read_handler, NULL, OR_OPTIONS, TAKE1, "PHP Value Modifier"},
- {"phpPostReadHandlerMethod", php_set_post_read_handler_code, NULL, OR_OPTIONS, TAKE1, "PHP Value Modifier"},
- {"phpRequire", php_set_require, NULL, OR_OPTIONS, TAKE1, "PHP Value Modifier"},
- {"phpResponseHandler", php_set_response_handler, NULL, OR_OPTIONS, TAKE1, "PHP Value Modifier"},
- {"phpResponseHandlerMethod", php_set_response_handler_code, NULL, OR_OPTIONS, TAKE1, "PHP Value Modifier"},
-#endif
- {"php_flag", php_apache_flag_handler, NULL, OR_OPTIONS, TAKE2, "PHP Flag Modifier"},
- {"php_admin_value", php_apache_admin_value_handler, NULL, ACCESS_CONF|RSRC_CONF, TAKE2, "PHP Value Modifier (Admin)"},
- {"php_admin_flag", php_apache_admin_flag_handler, NULL, ACCESS_CONF|RSRC_CONF, TAKE2, "PHP Flag Modifier (Admin)"},
- {NULL}
-};
-/* }}} */
-
-/* {{{ module MODULE_VAR_EXPORT php5_module
- */
-module MODULE_VAR_EXPORT php5_module =
-{
- STANDARD_MODULE_STUFF,
- php_init_handler, /* initializer */
- php_create_dir, /* per-directory config creator */
- php_merge_dir, /* dir merger */
- php_create_server, /* per-server config creator */
- NULL, /* merge server config */
- php_commands, /* command table */
- php_handlers, /* handlers */
- php_uri_translation, /* filename translation */
- NULL, /* check_user_id */
- php_auth_hook, /* check auth */
- php_access_hook, /* check access */
- php_type_hook, /* type_checker */
- php_fixup_hook, /* fixups */
- php_logger_hook /* logger */
-#if MODULE_MAGIC_NUMBER >= 19970103
- , php_header_hook /* header parser */
-#endif
-#if MODULE_MAGIC_NUMBER >= 19970719
- , NULL /* child_init */
-#endif
-#if MODULE_MAGIC_NUMBER >= 19970728
- , php_child_exit_handler /* child_exit */
-#endif
-#if MODULE_MAGIC_NUMBER >= 19970902
- , php_post_read_hook /* post read-request */
-#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/sapi/apache_hooks/mod_php5.exp b/sapi/apache_hooks/mod_php5.exp
deleted file mode 100644
index 9ad0f0a0ad..0000000000
--- a/sapi/apache_hooks/mod_php5.exp
+++ /dev/null
@@ -1 +0,0 @@
-php5_module
diff --git a/sapi/apache_hooks/mod_php5.h b/sapi/apache_hooks/mod_php5.h
deleted file mode 100644
index 8e62ccdff8..0000000000
--- a/sapi/apache_hooks/mod_php5.h
+++ /dev/null
@@ -1,81 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Rasmus Lerdorf <rasmus@php.net> |
- +----------------------------------------------------------------------+
- */
-/* $Id$ */
-
-#ifndef MOD_PHP5_H
-#define MOD_PHP5_H
-
-#if !defined(WIN32) && !defined(WINNT)
-#ifndef MODULE_VAR_EXPORT
-#define MODULE_VAR_EXPORT
-#endif
-#endif
-
-typedef struct {
- long engine;
- long last_modified;
- long xbithack;
- long terminate_child;
- long setup_env;
- long current_hook;
- zend_bool in_request;
- zend_bool apache_config_loaded;
- zend_bool headers_sent;
-} php_apache_info_struct;
-
-typedef struct _php_handler {
- long type;
- long stage;
- char *name;
-} php_handler;
-
-#define AP_HANDLER_TYPE_FILE 0
-#define AP_HANDLER_TYPE_METHOD 1
-
-extern zend_module_entry apache_module_entry;
-
-#ifdef ZTS
-extern int php_apache_info_id;
-#define AP(v) TSRMG(php_apache_info_id, php_apache_info_struct *, v)
-#else
-extern php_apache_info_struct php_apache_info;
-#define AP(v) (php_apache_info.v)
-#endif
-
-/* defines for the various stages of the apache request */
-#define AP_WAITING_FOR_REQUEST 0
-#define AP_POST_READ 1
-#define AP_URI_TRANS 2
-#define AP_HEADER_PARSE 3
-#define AP_ACCESS_CONTROL 4
-#define AP_AUTHENTICATION 5
-#define AP_AUTHORIZATION 6
-#define AP_TYPE_CHECKING 7
-#define AP_FIXUP 8
-#define AP_RESPONSE 9
-#define AP_LOGGING 10
-#define AP_CLEANUP 11
-
-#endif /* MOD_PHP5_H */
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- */
diff --git a/sapi/apache_hooks/php.sym b/sapi/apache_hooks/php.sym
deleted file mode 100644
index 9ad0f0a0ad..0000000000
--- a/sapi/apache_hooks/php.sym
+++ /dev/null
@@ -1 +0,0 @@
-php5_module
diff --git a/sapi/apache_hooks/php5apache_hooks.dsp b/sapi/apache_hooks/php5apache_hooks.dsp
deleted file mode 100755
index cc60f4b3b1..0000000000
--- a/sapi/apache_hooks/php5apache_hooks.dsp
+++ /dev/null
@@ -1,151 +0,0 @@
-# Microsoft Developer Studio Project File - Name="php5apache_hooks" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=php5apache_hooks - Win32 Release_TS
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "php5apache_hooks.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "php5apache_hooks.mak" CFG="php5apache_hooks - Win32 Release_TS"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "php5apache_hooks - Win32 Release_TS" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "php5apache_hooks - Win32 Debug_TS" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "php5apache_hooks - Win32 Release_TS_inline" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "php5apache_hooks - Win32 Release_TS"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release_TS"
-# PROP BASE Intermediate_Dir "Release_TS"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "..\..\Release_TS"
-# PROP Intermediate_Dir "Release_TS"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "APACHEPHP5_EXPORTS" /YX /FD /c
-# ADD CPP /nologo /MD /W3 /GX /O2 /I "...\..\include" /I "..\..\win32" /I "..\..\Zend" /I "..\..\regex" /I "..\.." /I "..\..\..\bindlib_w32" /I "..\..\..\php_build\apache\src\include" /I "..\..\main" /I "..\..\TSRM" /D ZEND_DEBUG=0 /D "NDEBUG" /D "ZTS" /D "ZEND_WIN32" /D "PHP_WIN32" /D "_WINDOWS" /D "_USRDLL" /D "APACHEPHP5_EXPORTS" /D "WIN32" /D "_MBCS" /D "APACHE_READDIR_H" /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386
-# ADD LINK32 php5ts.lib ApacheCore.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /base:"0x60000000" /version:4.0 /dll /machine:I386 /libpath:"..\..\..\php_build\apache\src\corer" /libpath:"..\..\Release_TS" /libpath:"..\..\TSRM\Release_TS" /libpath:"..\..\Zend\Release_TS"
-
-!ELSEIF "$(CFG)" == "php5apache_hooks - Win32 Debug_TS"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Debug_TS"
-# PROP BASE Intermediate_Dir "Debug_TS"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "..\..\Debug_TS"
-# PROP Intermediate_Dir "Debug_TS"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "APACHEPHP5_EXPORTS" /YX /FD /c
-# ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "...\..\include" /I "..\..\win32" /I "..\..\Zend" /I "..\..\regex" /I "..\.." /I "..\..\..\bindlib_w32" /I "..\..\..\php_build\apache\src\include" /I "..\..\main" /I "..\..\TSRM" /D "_DEBUG" /D ZEND_DEBUG=1 /D "ZTS" /D "ZEND_WIN32" /D "PHP_WIN32" /D "_WINDOWS" /D "_USRDLL" /D "APACHEPHP5_EXPORTS" /D "WIN32" /D "_MBCS" /D "APACHE_READDIR_H" /FR /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386
-# ADD LINK32 php5ts_debug.lib ApacheCore.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /base:"0x60000000" /version:4.0 /dll /incremental:yes /debug /machine:I386 /out:"..\..\Debug_TS/php5apache_hooks.dll" /pdbtype:sept /libpath:"..\..\..\php_build\apache\src\cored" /libpath:"..\..\Debug_TS" /libpath:"..\..\TSRM\Debug_TS" /libpath:"..\..\Zend\Debug_TS"
-
-!ELSEIF "$(CFG)" == "php5apache_hooks - Win32 Release_TS_inline"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release_TS_inline"
-# PROP BASE Intermediate_Dir "Release_TS_inline"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "..\..\Release_TS_inline"
-# PROP Intermediate_Dir "Release_TS_inline"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "APACHEPHP5_EXPORTS" /YX /FD /c
-# ADD CPP /nologo /MD /W3 /GX /O2 /I "...\..\include" /I "..\..\win32" /I "..\..\Zend" /I "..\..\regex" /I "..\.." /I "..\..\..\bindlib_w32" /I "..\..\..\php_build\apache\src\include" /I "..\..\main" /I "..\..\TSRM" /D ZEND_DEBUG=0 /D "ZEND_WIN32_FORCE_INLINE" /D "NDEBUG" /D "ZTS" /D "ZEND_WIN32" /D "PHP_WIN32" /D "_WINDOWS" /D "_USRDLL" /D "APACHEPHP5_EXPORTS" /D "WIN32" /D "_MBCS" /D "APACHE_READDIR_H" /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386
-# ADD LINK32 php5ts.lib ApacheCore.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /version:4.0 /dll /machine:I386 /libpath:"\apache\src\corer" /libpath:"..\..\Release_TS_inline" /libpath:"..\..\TSRM\Release_TS_inline" /libpath:"..\..\Zend\Release_TS_inline"
-
-!ENDIF
-
-# Begin Target
-
-# Name "php5apache_hooks - Win32 Release_TS"
-# Name "php5apache_hooks - Win32 Debug_TS"
-# Name "php5apache_hooks - Win32 Release_TS_inline"
-# Begin Group "Source Files"
-
-# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
-# Begin Source File
-
-SOURCE=.\mod_php5.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\php_apache.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\sapi_apache.c
-# End Source File
-# End Group
-# Begin Group "Header Files"
-
-# PROP Default_Filter "h;hpp;hxx;hm;inl"
-# Begin Source File
-
-SOURCE=.\mod_php5.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\php_apache_http.h
-# End Source File
-# End Group
-# Begin Group "Resource Files"
-
-# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
-# End Group
-# End Target
-# End Project
diff --git a/sapi/apache_hooks/php_apache.c b/sapi/apache_hooks/php_apache.c
deleted file mode 100644
index acbbee6e5d..0000000000
--- a/sapi/apache_hooks/php_apache.c
+++ /dev/null
@@ -1,1954 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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. |
- +----------------------------------------------------------------------+
- | Authors: Rasmus Lerdorf <rasmus@lerdorf.on.ca> |
- | Stig Sæther Bakken <ssb@php.net> |
- | David Sklar <sklar@student.net> |
- +----------------------------------------------------------------------+
- */
-/* $Id$ */
-
-#include "php_apache_http.h"
-
-#if defined(PHP_WIN32) || defined(NETWARE)
-#include "zend.h"
-#include "ap_compat.h"
-#else
-#include "build-defs.h"
-#endif
-
-#ifdef ZTS
-int php_apache_info_id;
-#else
-php_apache_info_struct php_apache_info;
-#endif
-
-#define SECTION(name) PUTS("<H2 align=\"center\">" name "</H2>\n")
-
-#undef offsetof
-#define offsetof(s_type,field) ((size_t)&(((s_type*)0)->field))
-
-extern module *top_module;
-extern module **ap_loaded_modules;
-static int le_apachereq;
-static zend_class_entry *apacherequest_class_entry;
-
-static void apache_table_to_zval(table *, int safe_mode, zval *return_value);
-
-PHP_FUNCTION(virtual);
-PHP_FUNCTION(apache_request_headers);
-PHP_FUNCTION(apache_response_headers);
-PHP_FUNCTION(apachelog);
-PHP_FUNCTION(apache_note);
-PHP_FUNCTION(apache_lookup_uri);
-PHP_FUNCTION(apache_child_terminate);
-PHP_FUNCTION(apache_setenv);
-PHP_FUNCTION(apache_get_version);
-PHP_FUNCTION(apache_get_modules);
-
-PHP_MINFO_FUNCTION(apache);
-
-
-function_entry apache_functions[] = {
- PHP_FE(virtual, NULL)
- PHP_FE(apache_request_headers, NULL)
- PHP_FE(apache_note, NULL)
- PHP_FE(apache_lookup_uri, NULL)
- PHP_FE(apache_child_terminate, NULL)
- PHP_FE(apache_setenv, NULL)
- PHP_FE(apache_response_headers, NULL)
- PHP_FE(apache_get_version, NULL)
- PHP_FE(apache_get_modules, NULL)
- PHP_FALIAS(getallheaders, apache_request_headers, NULL)
- {NULL, NULL, NULL}
-};
-
-/* {{{ php_apache ini entries
- */
-PHP_INI_BEGIN()
- STD_PHP_INI_ENTRY("xbithack", "0", PHP_INI_ALL, OnUpdateLong, xbithack, php_apache_info_struct, php_apache_info)
- STD_PHP_INI_ENTRY("engine", "1", PHP_INI_ALL, OnUpdateLong, engine, php_apache_info_struct, php_apache_info)
- STD_PHP_INI_ENTRY("last_modified", "0", PHP_INI_ALL, OnUpdateLong, last_modified, php_apache_info_struct, php_apache_info)
- STD_PHP_INI_ENTRY("child_terminate", "0", PHP_INI_ALL, OnUpdateLong, terminate_child, php_apache_info_struct, php_apache_info)
-PHP_INI_END()
-/* }}} */
-
-static void php_apache_globals_ctor(php_apache_info_struct *apache_globals TSRMLS_DC)
-{
- apache_globals->in_request = 0;
-}
-
-
-#define APREQ_GET_THIS(ZVAL) if (NULL == (ZVAL = getThis())) { \
- php_error(E_WARNING, "%s(): underlying ApacheRequest object missing", \
- get_active_function_name(TSRMLS_C)); \
- RETURN_FALSE; \
- }
-#define APREQ_GET_REQUEST(ZVAL, R) APREQ_GET_THIS(ZVAL); \
- R = get_apache_request(ZVAL TSRMLS_CC)
-
-static void php_apache_request_free(zend_rsrc_list_entry *rsrc TSRMLS_DC)
-{
- zval *z = (zval *)rsrc->ptr;
-/* fprintf(stderr, "%s() %p\n", __FUNCTION__, z); */
- zval_ptr_dtor(&z);
-}
-
-static request_rec *get_apache_request(pval *z TSRMLS_DC)
-{
- request_rec *r;
- zval **addr;
-
- if (NULL == z) {
- php_error(E_WARNING, "get_apache_request() invalid wrapper passed");
- return NULL;
- }
-
- if (Z_TYPE_P(z) != IS_OBJECT) {
- php_error(E_WARNING, "%s(): wrapper is not an object", get_active_function_name(TSRMLS_C));
- return NULL;
- }
-
- if (zend_hash_index_find(Z_OBJPROP_P(z), 0, (void **)&addr) == FAILURE) {
- php_error(E_WARNING, "%s(): underlying object missing", get_active_function_name(TSRMLS_C));
- return NULL;
- }
-
- r = (request_rec *)Z_LVAL_PP(addr);
- if (!r) {
- php_error(E_WARNING, "%s(): request_rec invalid", get_active_function_name(TSRMLS_C));
- return NULL;
- }
-
- return r;
-}
-
-/* {{{ php_apache_request_new(request_rec *r)
- * create a new zval-instance for ApacheRequest that wraps request_rec
- */
-zval *php_apache_request_new(request_rec *r)
-{
- zval *req;
- zval *addr;
-
- TSRMLS_FETCH();
-
- MAKE_STD_ZVAL(addr);
- Z_TYPE_P(addr) = IS_LONG;
- Z_LVAL_P(addr) = (int) r;
-
- MAKE_STD_ZVAL(req);
- object_init_ex(req, apacherequest_class_entry);
- zend_hash_index_update(Z_OBJPROP_P(req), 0, &addr, sizeof(zval *), NULL);
-
- return req;
-}
-/* }}} */
-
-/* {{{ apache_request_read_string_slot()
- */
-static void apache_request_read_string_slot(int offset, INTERNAL_FUNCTION_PARAMETERS)
-{
- zval *id;
- request_rec *r;
- char *s;
-
- if (ZEND_NUM_ARGS() > 0) {
- WRONG_PARAM_COUNT;
- }
-
- APREQ_GET_REQUEST(id, r);
-
- s = *(char **)((char*)r + offset);
-
- if (s)
- RETURN_STRING(s, 1);
-
- RETURN_EMPTY_STRING();
-}
-/* }}} */
-
-
-/* {{{ apache_request_string_slot()
- */
-static void apache_request_string_slot(int offset, INTERNAL_FUNCTION_PARAMETERS)
-{
- zval *id, **new_value;
- request_rec *r;
- char *old_value;
- char **target;
-
- APREQ_GET_REQUEST(id, r);
-
- target = (char **)((char*)r + offset);
- old_value = *target;
-
- switch (ZEND_NUM_ARGS()) {
- case 0:
- break;
- case 1:
- if (zend_get_parameters_ex(1, &new_value) == FAILURE) {
- RETURN_FALSE;
- }
- convert_to_string_ex(new_value);
- *target = ap_pstrdup(r->pool, Z_STRVAL_PP(new_value));
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
-
- if (old_value)
- RETURN_STRING(old_value, 1);
-
- RETURN_EMPTY_STRING();
-}
-/* }}} */
-
-/* {{{ apache_request_read_int_slot()
- */
-static void apache_request_read_int_slot(int offset, INTERNAL_FUNCTION_PARAMETERS)
-{
- zval *id;
- request_rec *r;
- long l;
-
- if (ZEND_NUM_ARGS() > 0) {
- WRONG_PARAM_COUNT;
- }
-
- APREQ_GET_REQUEST(id, r);
-
- l = *(long *)((char*)r + offset);
-
- RETURN_LONG(l);
-}
-/* }}} */
-
-/* {{{ apache_request_int_slot()
- */
-static void apache_request_int_slot(int offset, INTERNAL_FUNCTION_PARAMETERS)
-{
- zval *id, **new_value;
- request_rec *r;
- long old_value;
- long *target;
-
- APREQ_GET_REQUEST(id, r);
-
- target = (long *)((char*)r + offset);
- old_value = *target;
-
- switch (ZEND_NUM_ARGS()) {
- case 0:
- break;
- case 1:
- if (zend_get_parameters_ex(1, &new_value) == FAILURE) {
- RETURN_FALSE;
- }
- convert_to_long_ex(new_value);
- *target = Z_LVAL_PP(new_value);
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
-
- RETURN_LONG(old_value);
-}
-/* }}} */
-
-
-/* {{{ access string slots of request rec
- */
-
-/* {{{ proto string ApacheRequest::filename([string new_filename])
- */
-PHP_FUNCTION(apache_request_filename)
-{
- apache_request_string_slot(offsetof(request_rec, filename), INTERNAL_FUNCTION_PARAM_PASSTHRU);
-}
-/* }}} */
-
-/* {{{ proto string ApacheRequest::uri([string new_uri])
- */
-PHP_FUNCTION(apache_request_uri)
-{
- apache_request_string_slot(offsetof(request_rec, uri), INTERNAL_FUNCTION_PARAM_PASSTHRU);
-}
-/* }}} */
-
-/* {{{ proto string ApacheRequest::unparsed_uri([string new_unparsed_uri])
- */
-PHP_FUNCTION(apache_request_unparsed_uri)
-{
- apache_request_string_slot(offsetof(request_rec, unparsed_uri), INTERNAL_FUNCTION_PARAM_PASSTHRU);
-}
-/* }}} */
-
-/* {{{ proto string ApacheRequest::path_info([string new_path_info])
- */
-PHP_FUNCTION(apache_request_path_info)
-{
- apache_request_string_slot(offsetof(request_rec, path_info), INTERNAL_FUNCTION_PARAM_PASSTHRU);
-}
-/* }}} */
-
-/* {{{ proto string ApacheRequest::args([string new_args])
- */
-PHP_FUNCTION(apache_request_args)
-{
- apache_request_string_slot(offsetof(request_rec, args), INTERNAL_FUNCTION_PARAM_PASSTHRU);
-}
-/* }}} */
-
-/* {{{ proto string ApacheRequest::boundary()
- */
-PHP_FUNCTION(apache_request_boundary)
-{
- apache_request_read_string_slot(offsetof(request_rec, boundary), INTERNAL_FUNCTION_PARAM_PASSTHRU);
-}
-/* }}} */
-
-
-/* {{{ proto string ApacheRequest::content_type([string new_type])
- */
-PHP_FUNCTION(apache_request_content_type)
-{
- apache_request_string_slot(offsetof(request_rec, content_type), INTERNAL_FUNCTION_PARAM_PASSTHRU);
-}
-/* }}} */
-
-/* {{{ proto string ApacheRequest::content_encoding([string new_encoding])
- */
-PHP_FUNCTION(apache_request_content_encoding)
-{
- apache_request_string_slot(offsetof(request_rec, content_encoding), INTERNAL_FUNCTION_PARAM_PASSTHRU);
-}
-/* }}} */
-
-/* {{{ proto string ApacheRequest::handler([string new_handler])
- */
-PHP_FUNCTION(apache_request_handler)
-{
- apache_request_string_slot(offsetof(request_rec, handler), INTERNAL_FUNCTION_PARAM_PASSTHRU);
-}
-/* }}} */
-
-/* {{{ proto string ApacheRequest::the_request()
- */
-PHP_FUNCTION(apache_request_the_request)
-{
- apache_request_read_string_slot(offsetof(request_rec, the_request), INTERNAL_FUNCTION_PARAM_PASSTHRU);
-}
-/* }}} */
-
-/* {{{ proto string ApacheRequest::protocol()
- */
-PHP_FUNCTION(apache_request_protocol)
-{
- apache_request_read_string_slot(offsetof(request_rec, protocol), INTERNAL_FUNCTION_PARAM_PASSTHRU);
-}
-/* }}} */
-
-/* {{{ proto string ApacheRequest::hostname()
- */
-PHP_FUNCTION(apache_request_hostname)
-{
- apache_request_read_string_slot(offsetof(request_rec, hostname), INTERNAL_FUNCTION_PARAM_PASSTHRU);
-}
-/* }}} */
-
-/* {{{ proto string ApacheRequest::status_line([string new_status_line])
- */
-PHP_FUNCTION(apache_request_status_line)
-{
- apache_request_string_slot(offsetof(request_rec, status_line), INTERNAL_FUNCTION_PARAM_PASSTHRU);
-}
-/* }}} */
-
-/* {{{ proto string ApacheRequest::method()
- */
-PHP_FUNCTION(apache_request_method)
-{
- apache_request_read_string_slot(offsetof(request_rec, method), INTERNAL_FUNCTION_PARAM_PASSTHRU);
-}
-/* }}} */
-
-/* }}} access string slots of request rec */
-
-/* {{{ access int slots of request_rec
- */
-
-/* {{{ proto int ApacheRequest::proto_num()
- */
-PHP_FUNCTION(apache_request_proto_num)
-{
- apache_request_read_int_slot(offsetof(request_rec, proto_num), INTERNAL_FUNCTION_PARAM_PASSTHRU);
-}
-/* }}} */
-
-/* {{{ proto int ApacheRequest::assbackwards()
- */
-PHP_FUNCTION(apache_request_assbackwards)
-{
- apache_request_read_int_slot(offsetof(request_rec, assbackwards), INTERNAL_FUNCTION_PARAM_PASSTHRU);
-}
-/* }}} */
-
-
-/* {{{ proto int ApacheRequest::proxyreq([int new_proxyreq])
- */
-PHP_FUNCTION(apache_request_proxyreq)
-{
- apache_request_int_slot(offsetof(request_rec, proxyreq), INTERNAL_FUNCTION_PARAM_PASSTHRU);
-}
-/* }}} */
-
-/* {{{ proto int ApacheRequest::chunked()
- */
-PHP_FUNCTION(apache_request_chunked)
-{
- apache_request_read_int_slot(offsetof(request_rec, chunked), INTERNAL_FUNCTION_PARAM_PASSTHRU);
-}
-/* }}} */
-
-
-/* {{{ proto int ApacheRequest::header_only()
- */
-PHP_FUNCTION(apache_request_header_only)
-{
- apache_request_read_int_slot(offsetof(request_rec, header_only), INTERNAL_FUNCTION_PARAM_PASSTHRU);
-}
-/* }}} */
-
-/* {{{ proto int ApacheRequest::request_time()
- */
-PHP_FUNCTION(apache_request_request_time)
-{
- apache_request_read_int_slot(offsetof(request_rec, request_time), INTERNAL_FUNCTION_PARAM_PASSTHRU);
-}
-/* }}} */
-
-/* {{{ proto int ApacheRequest::status([int new_status])
- */
-PHP_FUNCTION(apache_request_status)
-{
- apache_request_int_slot(offsetof(request_rec, status), INTERNAL_FUNCTION_PARAM_PASSTHRU);
-}
-/* }}} */
-
-/* {{{ proto int ApacheRequest::method_number([int method_number])
- */
-PHP_FUNCTION(apache_request_method_number)
-{
- apache_request_read_int_slot(offsetof(request_rec, method_number), INTERNAL_FUNCTION_PARAM_PASSTHRU);
-}
-/* }}} */
-
-/* {{{ proto int ApacheRequest::allowed([int allowed])
- */
-PHP_FUNCTION(apache_request_allowed)
-{
- apache_request_int_slot(offsetof(request_rec, allowed), INTERNAL_FUNCTION_PARAM_PASSTHRU);
-}
-/* }}} */
-
-/* {{{ proto int ApacheRequest::bytes_sent()
- */
-PHP_FUNCTION(apache_request_bytes_sent)
-{
- apache_request_read_int_slot(offsetof(request_rec, bytes_sent), INTERNAL_FUNCTION_PARAM_PASSTHRU);
-}
-/* }}} */
-
-/* {{{ proto int ApacheRequest::mtime()
- */
-PHP_FUNCTION(apache_request_mtime)
-{
- apache_request_read_int_slot(offsetof(request_rec, mtime), INTERNAL_FUNCTION_PARAM_PASSTHRU);
-}
-/* }}} */
-
-/* {{{ proto int ApacheRequest::content_length([int new_content_length])
- */
-PHP_FUNCTION(apache_request_content_length)
-{
- zval *id, **zlen;
- request_rec *r;
-
- if (ZEND_NUM_ARGS() == 0) {
- apache_request_read_int_slot(offsetof(request_rec, clength), INTERNAL_FUNCTION_PARAM_PASSTHRU);
- }
- else if (ZEND_NUM_ARGS() > 1) {
- WRONG_PARAM_COUNT;
- }
- else {
- if (zend_get_parameters_ex(1, &zlen) == FAILURE) {
- RETURN_FALSE;
- }
-
- APREQ_GET_REQUEST(id, r);
-
- convert_to_long_ex(zlen);
- (void)ap_set_content_length(r, Z_LVAL_PP(zlen));
- RETURN_TRUE;
- }
-}
-/* }}} */
-
-/* {{{ proto int ApacheRequest::remaining()
- */
-PHP_FUNCTION(apache_request_remaining)
-{
- apache_request_read_int_slot(offsetof(request_rec, remaining), INTERNAL_FUNCTION_PARAM_PASSTHRU);
-}
-/* }}} */
-
-/* {{{ proto int ApacheRequest::no_cache()
- */
-PHP_FUNCTION(apache_request_no_cache)
-{
- apache_request_int_slot(offsetof(request_rec, no_cache), INTERNAL_FUNCTION_PARAM_PASSTHRU);
-}
-/* }}} */
-
-/* {{{ proto int ApacheRequest::no_local_copy()
- */
-PHP_FUNCTION(apache_request_no_local_copy)
-{
- apache_request_int_slot(offsetof(request_rec, no_local_copy), INTERNAL_FUNCTION_PARAM_PASSTHRU);
-}
-/* }}} */
-
-/* {{{ proto int ApacheRequest::read_body()
- */
-PHP_FUNCTION(apache_request_read_body)
-{
- apache_request_int_slot(offsetof(request_rec, read_body), INTERNAL_FUNCTION_PARAM_PASSTHRU);
-}
-/* }}} */
-
-
-/* }}} access int slots of request_rec */
-
-
-/* {{{ proto array apache_request_headers_in()
- * fetch all incoming request headers
- */
-PHP_FUNCTION(apache_request_headers_in)
-{
- zval *id;
- request_rec *r;
-
- APREQ_GET_REQUEST(id, r);
-
- apache_table_to_zval(r->headers_in, 0, return_value);
-}
-/* }}} */
-
-
-/* {{{ add_header_to_table
-*/
-static void add_header_to_table(table *t, INTERNAL_FUNCTION_PARAMETERS)
-{
- zval *first = NULL;
- zval *second = NULL;
- zval **entry, **value;
- char *string_key;
- uint string_key_len;
- ulong num_key;
-
- zend_bool replace = 0;
- HashPosition pos;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z|zb", &first, &second, &replace) == FAILURE)
- RETURN_FALSE;
-
- if (Z_TYPE_P(first) == IS_ARRAY) {
- switch(ZEND_NUM_ARGS()) {
- case 1:
- case 3:
- zend_hash_internal_pointer_reset_ex(Z_ARRVAL_P(first), &pos);
- while (zend_hash_get_current_data_ex(Z_ARRVAL_P(first), (void **)&entry, &pos) == SUCCESS) {
- switch(zend_hash_get_current_key_ex(Z_ARRVAL_P(first), &string_key, &string_key_len, &num_key, 0, &pos)) {
- case HASH_KEY_IS_STRING:
- if (zend_hash_find(Z_ARRVAL_P(first), string_key, string_key_len, (void **)&value) == FAILURE) {
- zend_hash_move_forward_ex(Z_ARRVAL_P(first), &pos);
- continue;
- }
- if (!value) {
- zend_hash_move_forward_ex(Z_ARRVAL_P(first), &pos);
- continue;
- }
-
- convert_to_string_ex(value);
- if (replace)
- ap_table_set(t, string_key, Z_STRVAL_PP(value));
- else
- ap_table_merge(t, string_key, Z_STRVAL_PP(value));
-
- break;
- case HASH_KEY_IS_LONG:
- default:
- php_error(E_WARNING, "%s(): Can only add STRING keys to headers!", get_active_function_name(TSRMLS_C));
- break;
- }
-
- zend_hash_move_forward_ex(Z_ARRVAL_P(first), &pos);
- }
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
- }
- else if (Z_TYPE_P(first) == IS_STRING) {
- switch(ZEND_NUM_ARGS()) {
- case 2:
- case 3:
- convert_to_string_ex(&second);
- if (replace)
- ap_table_set(t, Z_STRVAL_P(first), Z_STRVAL_P(second));
- else
- ap_table_merge(t, Z_STRVAL_P(first), Z_STRVAL_P(second));
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
- }
- else {
- RETURN_FALSE;
- }
-}
-
-/* }}} */
-
-
-/* {{{ proto array apache_request_headers_out([{string name|array list} [, string value [, bool replace = false]]])
- * fetch all outgoing request headers
- */
-PHP_FUNCTION(apache_request_headers_out)
-{
- zval *id;
- request_rec *r;
-
- APREQ_GET_REQUEST(id, r);
-
- if (ZEND_NUM_ARGS() > 0)
- add_header_to_table(r->headers_out, INTERNAL_FUNCTION_PARAM_PASSTHRU);
-
- apache_table_to_zval(r->headers_out, 0, return_value);
-}
-/* }}} */
-
-
-/* {{{ proto array apache_request_err_headers_out([{string name|array list} [, string value [, bool replace = false]]])
- * fetch all headers that go out in case of an error or a subrequest
- */
-PHP_FUNCTION(apache_request_err_headers_out)
-{
- zval *id;
- request_rec *r;
-
- APREQ_GET_REQUEST(id, r);
-
- if (ZEND_NUM_ARGS() > 0)
- add_header_to_table(r->err_headers_out, INTERNAL_FUNCTION_PARAM_PASSTHRU);
-
- apache_table_to_zval(r->err_headers_out, 0, return_value);
-}
-/* }}} */
-
-
-/* {{{ proxy functions for the ap_* functions family
- */
-
-/* {{{ proto int apache_request_server_port()
- */
-PHP_FUNCTION(apache_request_server_port)
-{
- zval *id;
- request_rec *r;
-
- if (ZEND_NUM_ARGS() > 0) {
- WRONG_PARAM_COUNT;
- }
-
- APREQ_GET_REQUEST(id, r);
-
- RETURN_LONG(ap_get_server_port(r));
-}
-/* }}} */
-
-/* {{{ proto int apache_request_remote_host([int type])
- */
-PHP_FUNCTION(apache_request_remote_host)
-{
- zval *id, **ztype;
- request_rec *r;
- char *res;
- int type = REMOTE_NAME;
-
- switch (ZEND_NUM_ARGS()) {
- case 0:
- break;
- case 1:
- if (zend_get_parameters_ex(1, &ztype) == FAILURE) {
- RETURN_FALSE;
- }
- convert_to_long_ex(ztype);
- type = Z_LVAL_PP(ztype);
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
-
-
- APREQ_GET_REQUEST(id, r);
-
- res = (char *)ap_get_remote_host(r->connection, r->per_dir_config, type);
- if (res)
- RETURN_STRING(res, 1);
-
- RETURN_EMPTY_STRING();
-}
-/* }}} */
-
-/* {{{ proto long apache_request_update_mtime([int dependency_mtime])
- */
-PHP_FUNCTION(apache_request_update_mtime)
-{
- zval *id, **zmtime;
- request_rec *r;
- int mtime = 0;
-
- switch (ZEND_NUM_ARGS()) {
- case 0:
- break;
- case 1:
- if (zend_get_parameters_ex(1, &zmtime) == FAILURE) {
- RETURN_FALSE;
- }
- convert_to_long_ex(zmtime);
- mtime = Z_LVAL_PP(zmtime);
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
-
-
- APREQ_GET_REQUEST(id, r);
-
- RETURN_LONG(ap_update_mtime(r, mtime));
-}
-/* }}} */
-
-
-/* {{{ proto void apache_request_set_etag()
- */
-PHP_FUNCTION(apache_request_set_etag)
-{
- zval *id;
- request_rec *r;
-
- if (ZEND_NUM_ARGS() > 0) {
- WRONG_PARAM_COUNT;
- }
-
- APREQ_GET_REQUEST(id, r);
-
- ap_set_etag(r);
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto void apache_request_set_last_modified()
- */
-PHP_FUNCTION(apache_request_set_last_modified)
-{
- zval *id;
- request_rec *r;
-
- if (ZEND_NUM_ARGS() > 0) {
- WRONG_PARAM_COUNT;
- }
-
- APREQ_GET_REQUEST(id, r);
-
- ap_set_last_modified(r);
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto long apache_request_meets_conditions()
- */
-PHP_FUNCTION(apache_request_meets_conditions)
-{
- zval *id;
- request_rec *r;
-
- if (ZEND_NUM_ARGS() > 0) {
- WRONG_PARAM_COUNT;
- }
-
- APREQ_GET_REQUEST(id, r);
-
- RETURN_LONG(ap_meets_conditions(r));
-}
-/* }}} */
-
-/* {{{ proto long apache_request_discard_request_body()
- */
-PHP_FUNCTION(apache_request_discard_request_body)
-{
- zval *id;
- request_rec *r;
-
- if (ZEND_NUM_ARGS() > 0) {
- WRONG_PARAM_COUNT;
- }
-
- APREQ_GET_REQUEST(id, r);
-
- RETURN_LONG(ap_discard_request_body(r));
-}
-/* }}} */
-
-/* {{{ proto long apache_request_satisfies()
- */
-PHP_FUNCTION(apache_request_satisfies)
-{
- zval *id;
- request_rec *r;
-
- if (ZEND_NUM_ARGS() > 0) {
- WRONG_PARAM_COUNT;
- }
-
- APREQ_GET_REQUEST(id, r);
-
- RETURN_LONG(ap_satisfies(r));
-}
-/* }}} */
-
-
-/* {{{ proto bool apache_request_is_initial_req()
- */
-PHP_FUNCTION(apache_request_is_initial_req)
-{
- zval *id;
- request_rec *r;
-
- if (ZEND_NUM_ARGS() > 0) {
- WRONG_PARAM_COUNT;
- }
-
- APREQ_GET_REQUEST(id, r);
-
- RETURN_BOOL(ap_is_initial_req(r));
-}
-/* }}} */
-
-/* {{{ proto bool apache_request_some_auth_required()
- */
-PHP_FUNCTION(apache_request_some_auth_required)
-{
- zval *id;
- request_rec *r;
-
- if (ZEND_NUM_ARGS() > 0) {
- WRONG_PARAM_COUNT;
- }
-
- APREQ_GET_REQUEST(id, r);
-
- RETURN_BOOL(ap_some_auth_required(r));
-}
-/* }}} */
-
-/* {{{ proto string apache_request_auth_type()
- */
-PHP_FUNCTION(apache_request_auth_type)
-{
- zval *id;
- request_rec *r;
- char *t;
-
- if (ZEND_NUM_ARGS() > 0) {
- WRONG_PARAM_COUNT;
- }
-
- APREQ_GET_REQUEST(id, r);
-
- t = (char *)ap_auth_type(r);
- if (!t)
- RETURN_NULL();
-
- RETURN_STRING(t, 1);
-}
-/* }}} */
-
-/* {{{ proto string apache_request_auth_name()
- */
-PHP_FUNCTION(apache_request_auth_name)
-{
- zval *id;
- request_rec *r;
- char *t;
-
- if (ZEND_NUM_ARGS() > 0) {
- WRONG_PARAM_COUNT;
- }
-
- APREQ_GET_REQUEST(id, r);
-
- t = (char *)ap_auth_name(r);
- if (!t)
- RETURN_NULL();
-
- RETURN_STRING(t, 1);
-}
-/* }}} */
-
-/* {{{ proto apache_request_basic_auth_pw()
- */
-PHP_FUNCTION(apache_request_basic_auth_pw)
-{
- zval *id, *zpw;
- request_rec *r;
- const char *pw;
- long status;
-
- if (ZEND_NUM_ARGS() != 1) {
- WRONG_PARAM_COUNT;
- }
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z", &zpw) == FAILURE) {
- RETURN_NULL();
- }
-
- if (!PZVAL_IS_REF(zpw)) {
- zend_error(E_WARNING, "Parameter wasn't passed by reference");
- RETURN_NULL();
- }
-
-
- APREQ_GET_REQUEST(id, r);
-
- pw = NULL;
- status = ap_get_basic_auth_pw(r, &pw);
- if (status == OK && pw) {
- ZVAL_STRING(zpw, (char *)pw, 1);
- }
- else
- ZVAL_NULL(zpw);
- RETURN_LONG(status);
-}
-/* }}} */
-
-
-/* http_protocol.h */
-
-PHP_FUNCTION(apache_request_send_http_header)
-{
- zval *id;
- request_rec *r;
- char *type = NULL;
- int typelen;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|s", &type, &typelen) == FAILURE)
- return;
- APREQ_GET_REQUEST(id, r);
- if(type) {
- r->content_type = pstrdup(r->pool, type);
- }
- ap_send_http_header(r);
- SG(headers_sent) = 1;
- AP(headers_sent) = 1;
- RETURN_TRUE;
-}
-
-PHP_FUNCTION(apache_request_basic_http_header)
-{
- zval *id;
- request_rec *r;
-
- APREQ_GET_REQUEST(id, r);
-
- ap_basic_http_header((request_rec *)SG(server_context));
- SG(headers_sent) = 1;
- AP(headers_sent) = 1;
- RETURN_TRUE;
-}
-
-PHP_FUNCTION(apache_request_send_http_trace)
-{
- zval *id;
- request_rec *r;
-
- APREQ_GET_REQUEST(id, r);
-
- ap_send_http_trace((request_rec *)SG(server_context));
- SG(headers_sent) = 1;
- AP(headers_sent) = 1;
- RETURN_TRUE;
-}
-
-PHP_FUNCTION(apache_request_send_http_options)
-{
- zval *id;
- request_rec *r;
-
- APREQ_GET_REQUEST(id, r);
-
- ap_send_http_options((request_rec *)SG(server_context));
- SG(headers_sent) = 1;
- AP(headers_sent) = 1;
- RETURN_TRUE;
-}
-
-PHP_FUNCTION(apache_request_send_error_response)
-{
- zval **recursive;
- zval *id;
- request_rec *r;
- int rec;
-
- switch(ZEND_NUM_ARGS()) {
- case 0:
- rec = 0;
- break;
- case 1:
- if(zend_get_parameters_ex(1, &recursive) == FAILURE) {
- RETURN_FALSE;
- }
- convert_to_long_ex(recursive);
- rec = Z_LVAL_PP(recursive);
- break;
- default:
- WRONG_PARAM_COUNT;
- }
- APREQ_GET_REQUEST(id, r);
- ap_send_error_response(r, rec);
- RETURN_TRUE;
-}
-
-PHP_FUNCTION(apache_request_set_content_length)
-{
- zval **length;
- zval *id;
- request_rec *r;
-
- if(ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &length) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- APREQ_GET_REQUEST(id, r);
-
- convert_to_long_ex(length);
- ap_set_content_length(r, Z_LVAL_PP(length));
- RETURN_TRUE;
-}
-
-PHP_FUNCTION(apache_request_set_keepalive)
-{
- zval *id;
- request_rec *r;
- APREQ_GET_REQUEST(id, r);
- ap_set_keepalive(r);
- RETURN_TRUE;
-}
-
-/* This stuff should use streams or however this is implemented now
-
-PHP_FUNCTION(apache_request_send_fd)
-{
-}
-
-PHP_FUNCTION(apache_request_send_fd_length)
-{
-}
-*/
-
-/* These are for overriding default output behaviour */
-PHP_FUNCTION(apache_request_rputs)
-{
- zval **buffer;
- zval *id;
- request_rec *r;
-
- if(ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &buffer) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- APREQ_GET_REQUEST(id, r);
- convert_to_string_ex(buffer);
- ap_rwrite(Z_STRVAL_PP(buffer), Z_STRLEN_PP(buffer), (request_rec*)SG(server_context));
-}
-
-/* This stuff would be useful for custom POST handlers,
- which should be supported. Probably by not using
- sapi_activate at all inside a phpResponseHandler
- and instead using a builtin composed of the below
- calls as a apache_read_request_body() and allow
- people to custom craft their own.
-
-PHP_FUNCTION(apache_request_setup_client_block)
-{
-}
-
-PHP_FUNCTION(apache_request_should_client_block)
-{
-}
-
-PHP_FUNCTION(apache_request_get_client_block)
-{
-}
-
-PHP_FUNCTION(apache_request_discard_request_body)
-{
-}
-*/
-
-/* http_log.h */
-
-/* {{{ proto boolean apache_request_log_error(string message, [long facility])
- */
-PHP_FUNCTION(apache_request_log_error)
-{
- zval *id;
- zval **z_errstr, **z_facility;
- request_rec *r;
- int facility = APLOG_ERR;
-
- switch(ZEND_NUM_ARGS()) {
- case 1:
- if(zend_get_parameters_ex(1, &z_errstr) == FAILURE) {
- RETURN_FALSE;
- }
- break;
- case 2:
- if(zend_get_parameters_ex(1, &z_errstr, &z_facility) == FAILURE) {
- RETURN_FALSE;
- }
- convert_to_long_ex(z_facility);
- facility = Z_LVAL_PP(z_facility);
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
- }
- APREQ_GET_REQUEST(id, r);
- convert_to_string_ex(z_errstr);
- ap_log_error(APLOG_MARK, facility, r->server, "%s", Z_STRVAL_PP(z_errstr));
- RETURN_TRUE;
-}
-/* }}} */
-/* http_main.h */
-
-/* {{{ proto object apache_request_sub_req_lookup_uri(string uri)
- Returns sub-request for the specified uri. You would
- need to run it yourself with run()
-*/
-PHP_FUNCTION(apache_request_sub_req_lookup_uri)
-{
- zval *id;
- zval **file;
- request_rec *r, *sub_r;
- if(ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &file) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- APREQ_GET_REQUEST(id, r);
- convert_to_string_ex(file);
- sub_r = ap_sub_req_lookup_uri(Z_STRVAL_PP(file), r);
- if(!sub_r) {
- RETURN_FALSE;
- }
- return_value = php_apache_request_new(sub_r);
-}
-/* }}} */
-
-/* {{{ proto object apache_request_sub_req_lookup_file(string file)
- Returns sub-request for the specified file. You would
- need to run it yourself with run().
-*/
-PHP_FUNCTION(apache_request_sub_req_lookup_file)
-{
- zval *id;
- zval **file;
- request_rec *r, *sub_r;
-
- if(ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &file) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- APREQ_GET_REQUEST(id, r);
- convert_to_string_ex(file);
- sub_r = ap_sub_req_lookup_file(Z_STRVAL_PP(file), r);
- if(!sub_r) {
- RETURN_FALSE;
- }
- return_value = php_apache_request_new(sub_r);
-}
-/* }}} */
-
-/* {{{ proto object apache_request_sub_req_method_uri(string method, string uri)
- Returns sub-request for the specified file. You would
- need to run it yourself with run().
-*/
-PHP_FUNCTION(apache_request_sub_req_method_uri)
-{
- zval *id;
- zval **file, **method;
- request_rec *r, *sub_r;
-
- if(ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &method, &file) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- APREQ_GET_REQUEST(id, r);
- convert_to_string_ex(method);
- convert_to_string_ex(file);
- sub_r = ap_sub_req_method_uri(Z_STRVAL_PP(method),Z_STRVAL_PP(file), r);
- if(!sub_r) {
- RETURN_FALSE;
- }
- return_value = php_apache_request_new(sub_r);
-}
-/* }}} */
-
-/* {{{ proto long apache_request_run()
- This is a wrapper for ap_sub_run_req and ap_destory_sub_req. It takes
- sub_request, runs it, destroys it, and returns it's status.
-*/
-PHP_FUNCTION(apache_request_run)
-{
- zval *id;
- request_rec *r;
- int status;
-
- APREQ_GET_REQUEST(id, r);
- if(!r || ap_is_initial_req(r))
- RETURN_FALSE;
- status = ap_run_sub_req(r);
- ap_destroy_sub_req(r);
- RETURN_LONG(status);
-}
-/* }}} */
-
-PHP_FUNCTION(apache_request_internal_redirect)
-{
- zval *id;
- zval **new_uri;
- request_rec *r;
-
- if(ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &new_uri) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- APREQ_GET_REQUEST(id, r);
- convert_to_string_ex(new_uri);
- ap_internal_redirect(Z_STRVAL_PP(new_uri), r);
-}
-
-PHP_FUNCTION(apache_request_send_header_field)
-{
- zval **fieldname;
- zval **fieldval;
- zval *id;
- request_rec *r;
-
- if(ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &fieldname, &fieldval) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex(fieldname);
- convert_to_string_ex(fieldval);
- APREQ_GET_REQUEST(id, r);
-
- ap_send_header_field(r, Z_STRVAL_PP(fieldname), Z_STRVAL_PP(fieldval));
- SG(headers_sent) = 1;
- AP(headers_sent) = 1;
-}
-
-
-
-/* }}} */
-
-/* {{{ php_apache_request_class_functions
- */
-static function_entry php_apache_request_class_functions[] = {
- /* string slots */
- PHP_FALIAS(args, apache_request_args, NULL)
- PHP_FALIAS(boundary, apache_request_boundary, NULL)
- PHP_FALIAS(content_encoding, apache_request_content_encoding, NULL)
- PHP_FALIAS(content_type, apache_request_content_type, NULL)
- PHP_FALIAS(filename, apache_request_filename, NULL)
- PHP_FALIAS(handler, apache_request_handler, NULL)
- PHP_FALIAS(hostname, apache_request_hostname, NULL)
- PHP_FALIAS(method, apache_request_method, NULL)
- PHP_FALIAS(path_info, apache_request_path_info, NULL)
- PHP_FALIAS(protocol, apache_request_protocol, NULL)
- PHP_FALIAS(status_line, apache_request_status_line, NULL)
- PHP_FALIAS(the_request, apache_request_the_request, NULL)
- PHP_FALIAS(unparsed_uri, apache_request_unparsed_uri, NULL)
- PHP_FALIAS(uri, apache_request_uri, NULL)
-
- /* int slots */
- PHP_FALIAS(allowed, apache_request_allowed, NULL)
- PHP_FALIAS(bytes_sent, apache_request_bytes_sent, NULL)
- PHP_FALIAS(chunked, apache_request_chunked, NULL)
- PHP_FALIAS(content_length, apache_request_content_length, NULL)
- PHP_FALIAS(header_only, apache_request_header_only, NULL)
- PHP_FALIAS(method_number, apache_request_method_number, NULL)
- PHP_FALIAS(mtime, apache_request_mtime, NULL)
- PHP_FALIAS(no_cache, apache_request_no_cache, NULL)
- PHP_FALIAS(no_local_copy, apache_request_no_local_copy, NULL)
- PHP_FALIAS(proto_num, apache_request_proto_num, NULL)
- PHP_FALIAS(proxyreq, apache_request_proxyreq, NULL)
- PHP_FALIAS(read_body, apache_request_read_body, NULL)
- PHP_FALIAS(remaining, apache_request_remaining, NULL)
- PHP_FALIAS(request_time, apache_request_request_time, NULL)
- PHP_FALIAS(status, apache_request_status, NULL)
-
- /* tables & arrays */
- PHP_FALIAS(headers_in, apache_request_headers_in, NULL)
- PHP_FALIAS(headers_out, apache_request_headers_out, NULL)
- PHP_FALIAS(err_headers_out, apache_request_err_headers_out, NULL)
-
-
- /* proxy functions for the ap_* functions family */
-#undef auth_name
-#undef auth_type
-#undef discard_request_body
-#undef is_initial_req
-#undef meets_conditions
-#undef satisfies
-#undef set_etag
-#undef set_last_modified
-#undef some_auth_required
-#undef update_mtime
-#undef send_http_header
-#undef send_header_field
-#undef basic_http_header
-#undef send_http_trace
-#undef send_http_options
-#undef send_error_response
-#undef set_content_length
-#undef set_keepalive
-#undef rputs
-#undef log_error
-#undef lookup_uri
-#undef lookup_file
-#undef method_uri
-#undef run
-#undef internal_redirect
- PHP_FALIAS(auth_name, apache_request_auth_name, NULL)
- PHP_FALIAS(auth_type, apache_request_auth_type, NULL)
- PHP_FALIAS(basic_auth_pw, apache_request_basic_auth_pw, NULL)
- PHP_FALIAS(discard_request_body, apache_request_discard_request_body, NULL)
- PHP_FALIAS(is_initial_req, apache_request_is_initial_req, NULL)
- PHP_FALIAS(meets_conditions, apache_request_meets_conditions, NULL)
- PHP_FALIAS(remote_host, apache_request_remote_host, NULL)
- PHP_FALIAS(satisfies, apache_request_satisfies, NULL)
- PHP_FALIAS(server_port, apache_request_server_port, NULL)
- PHP_FALIAS(set_etag, apache_request_set_etag, NULL)
- PHP_FALIAS(set_last_modified, apache_request_set_last_modified, NULL)
- PHP_FALIAS(some_auth_required, apache_request_some_auth_required, NULL)
- PHP_FALIAS(update_mtime, apache_request_update_mtime, NULL)
- PHP_FALIAS(send_http_header, apache_request_send_http_header, NULL)
- PHP_FALIAS(basic_http_header, apache_request_basic_http_header, NULL)
- PHP_FALIAS(send_header_field, apache_request_send_header_field, NULL)
- PHP_FALIAS(send_http_trace, apache_request_send_http_trace, NULL)
- PHP_FALIAS(send_http_options, apache_request_send_http_trace, NULL)
- PHP_FALIAS(send_error_response, apache_request_send_error_response, NULL)
- PHP_FALIAS(set_content_length, apache_request_set_content_length, NULL)
- PHP_FALIAS(set_keepalive, apache_request_set_keepalive, NULL)
- PHP_FALIAS(rputs, apache_request_rputs, NULL)
- PHP_FALIAS(log_error, apache_request_log_error, NULL)
- PHP_FALIAS(lookup_uri, apache_request_sub_req_lookup_uri, NULL)
- PHP_FALIAS(lookup_file, apache_request_sub_req_lookup_file, NULL)
- PHP_FALIAS(method_uri, apache_request_sub_req_method_uri, NULL)
- PHP_FALIAS(run, apache_request_run, NULL)
- PHP_FALIAS(internal_redirect, apache_request_internal_redirect, NULL)
- { NULL, NULL, NULL }
-};
-/* }}} */
-
-
-static PHP_MINIT_FUNCTION(apache)
-{
- zend_class_entry ce;
-
-#ifdef ZTS
- ts_allocate_id(&php_apache_info_id, sizeof(php_apache_info_struct), (ts_allocate_ctor) php_apache_globals_ctor, NULL);
-#else
- php_apache_globals_ctor(&php_apache_info TSRMLS_CC);
-#endif
- REGISTER_INI_ENTRIES();
-
-
- le_apachereq = zend_register_list_destructors_ex(php_apache_request_free, NULL, "ApacheRequest", module_number);
- INIT_OVERLOADED_CLASS_ENTRY(ce, "ApacheRequest", php_apache_request_class_functions, NULL, NULL, NULL);
- apacherequest_class_entry = zend_register_internal_class_ex(&ce, NULL, NULL TSRMLS_CC);
-
- REGISTER_LONG_CONSTANT("OK", OK, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("DECLINED", DECLINED, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("FORBIDDEN", FORBIDDEN, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("AUTH_REQUIRED", AUTH_REQUIRED, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("DONE", DONE, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("SERVER_ERROR", SERVER_ERROR, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("REDIRECT", REDIRECT, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("BAD_REQUEST", BAD_REQUEST, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("NOT_FOUND", NOT_FOUND, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("HTTP_CONTINUE", HTTP_CONTINUE, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("HTTP_SWITCHING_PROTOCOLS", HTTP_SWITCHING_PROTOCOLS, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("HTTP_PROCESSING", HTTP_PROCESSING, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("HTTP_OK", HTTP_OK, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("HTTP_CREATED", HTTP_CREATED, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("HTTP_ACCEPTED", HTTP_ACCEPTED, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("HTTP_NON_AUTHORITATIVE", HTTP_NON_AUTHORITATIVE, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("HTTP_NO_CONTENT", HTTP_NO_CONTENT, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("HTTP_RESET_CONTENT", HTTP_RESET_CONTENT, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("HTTP_PARTIAL_CONTENT", HTTP_PARTIAL_CONTENT, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("HTTP_MULTI_STATUS", HTTP_MULTI_STATUS, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("HTTP_MULTIPLE_CHOICES", HTTP_MULTIPLE_CHOICES, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("HTTP_MOVED_PERMANENTLY", HTTP_MOVED_PERMANENTLY, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("HTTP_MOVED_TEMPORARILY", HTTP_MOVED_TEMPORARILY, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("HTTP_SEE_OTHER", HTTP_SEE_OTHER, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("HTTP_NOT_MODIFIED", HTTP_NOT_MODIFIED, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("HTTP_USE_PROXY", HTTP_USE_PROXY, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("HTTP_TEMPORARY_REDIRECT", HTTP_TEMPORARY_REDIRECT, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("HTTP_BAD_REQUEST", HTTP_BAD_REQUEST, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("HTTP_UNAUTHORIZED", HTTP_UNAUTHORIZED, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("HTTP_PAYMENT_REQUIRED", HTTP_PAYMENT_REQUIRED, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("HTTP_FORBIDDEN", HTTP_FORBIDDEN, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("HTTP_NOT_FOUND", HTTP_NOT_FOUND, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("HTTP_METHOD_NOT_ALLOWED", HTTP_METHOD_NOT_ALLOWED, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("HTTP_NOT_ACCEPTABLE", HTTP_NOT_ACCEPTABLE, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("HTTP_PROXY_AUTHENTICATION_REQUIRED", HTTP_PROXY_AUTHENTICATION_REQUIRED, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("HTTP_REQUEST_TIME_OUT", HTTP_REQUEST_TIME_OUT, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("HTTP_CONFLICT", HTTP_CONFLICT, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("HTTP_GONE", HTTP_GONE, CONST_CS | CONST_PERSISTENT);REGISTER_LONG_CONSTANT("HTTP_LENGTH_REQUIRED", HTTP_LENGTH_REQUIRED, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("HTTP_PRECONDITION_FAILED", HTTP_PRECONDITION_FAILED, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("HTTP_REQUEST_ENTITY_TOO_LARGE", HTTP_REQUEST_ENTITY_TOO_LARGE, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("HTTP_REQUEST_URI_TOO_LARGE", HTTP_REQUEST_URI_TOO_LARGE, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("HTTP_UNSUPPORTED_MEDIA_TYPE", HTTP_UNSUPPORTED_MEDIA_TYPE, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("HTTP_RANGE_NOT_SATISFIABLE", HTTP_RANGE_NOT_SATISFIABLE, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("HTTP_EXPECTATION_FAILED", HTTP_EXPECTATION_FAILED, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("HTTP_UNPROCESSABLE_ENTITY", HTTP_UNPROCESSABLE_ENTITY, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("HTTP_LOCKED", HTTP_LOCKED, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("HTTP_FAILED_DEPENDENCY", HTTP_FAILED_DEPENDENCY, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("HTTP_INTERNAL_SERVER_ERROR", HTTP_INTERNAL_SERVER_ERROR, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("HTTP_NOT_IMPLEMENTED", HTTP_NOT_IMPLEMENTED, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("HTTP_BAD_GATEWAY", HTTP_BAD_GATEWAY, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("HTTP_SERVICE_UNAVAILABLE", HTTP_SERVICE_UNAVAILABLE, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("HTTP_GATEWAY_TIME_OUT", HTTP_GATEWAY_TIME_OUT, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("HTTP_VERSION_NOT_SUPPORTED", HTTP_VERSION_NOT_SUPPORTED, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("HTTP_VARIANT_ALSO_VARIES", HTTP_VARIANT_ALSO_VARIES, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("HTTP_INSUFFICIENT_STORAGE", HTTP_INSUFFICIENT_STORAGE, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("HTTP_NOT_EXTENDED", HTTP_NOT_EXTENDED, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("APLOG_EMERG", APLOG_EMERG, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("APLOG_ALERT", APLOG_ALERT, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("APLOG_CRIT", APLOG_CRIT, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("APLOG_ERR", APLOG_ERR, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("APLOG_WARNING", APLOG_WARNING, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("APLOG_NOTICE", APLOG_NOTICE, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("APLOG_INFO", APLOG_INFO, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("APLOG_DEBUG", APLOG_DEBUG, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("M_GET", M_GET, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("M_PUT", M_PUT, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("M_POST", M_POST, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("M_DELETE", M_DELETE, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("M_CONNECT", M_CONNECT, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("M_OPTIONS", M_OPTIONS, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("M_TRACE", M_TRACE, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("M_PATCH", M_PATCH, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("M_PROPFIND", M_PROPFIND, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("M_PROPPATCH", M_PROPPATCH, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("M_MKCOL", M_MKCOL, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("M_COPY", M_COPY, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("M_MOVE", M_MOVE, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("M_LOCK", M_LOCK, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("M_UNLOCK", M_UNLOCK, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("M_INVALID", M_INVALID, CONST_CS | CONST_PERSISTENT);
-
- /* Possible values for request_rec.read_body (set by handling module):
- * REQUEST_NO_BODY Send 413 error if message has any body
- * REQUEST_CHUNKED_ERROR Send 411 error if body without Content-Length
- * REQUEST_CHUNKED_DECHUNK If chunked, remove the chunks for me.
- * REQUEST_CHUNKED_PASS Pass the chunks to me without removal.
- */
- REGISTER_LONG_CONSTANT("REQUEST_NO_BODY", REQUEST_NO_BODY, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("REQUEST_CHUNKED_ERROR", REQUEST_CHUNKED_ERROR, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("REQUEST_CHUNKED_DECHUNK", REQUEST_CHUNKED_DECHUNK, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("REQUEST_CHUNKED_PASS", REQUEST_CHUNKED_PASS, CONST_CS | CONST_PERSISTENT);
-
- /* resolve types for remote_host() */
- REGISTER_LONG_CONSTANT("REMOTE_HOST", REMOTE_HOST, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("REMOTE_NAME", REMOTE_NAME, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("REMOTE_NOLOOKUP", REMOTE_NOLOOKUP, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("REMOTE_DOUBLE_REV", REMOTE_DOUBLE_REV, CONST_CS | CONST_PERSISTENT);
-
- return SUCCESS;
-}
-
-
-static PHP_MSHUTDOWN_FUNCTION(apache)
-{
- UNREGISTER_INI_ENTRIES();
- return SUCCESS;
-}
-
-zend_module_entry apache_module_entry = {
- STANDARD_MODULE_HEADER,
- "apache",
- apache_functions,
- PHP_MINIT(apache),
- PHP_MSHUTDOWN(apache),
- NULL,
- NULL,
- PHP_MINFO(apache),
- NO_VERSION_YET,
- STANDARD_MODULE_PROPERTIES
-};
-
-/* {{{ proto bool apache_child_terminate(void)
- Terminate apache process after this request */
-PHP_FUNCTION(apache_child_terminate)
-{
-#ifndef MULTITHREAD
- if (AP(terminate_child)) {
- ap_child_terminate( ((request_rec *)SG(server_context)) );
- RETURN_TRUE;
- } else { /* tell them to get lost! */
- php_error(E_WARNING, "apache.child_terminate is disabled");
- RETURN_FALSE;
- }
-#else
- php_error(E_WARNING, "apache_child_terminate() is not supported in this build");
- RETURN_FALSE;
-#endif
-}
-/* }}} */
-
-/* {{{ proto string apache_note(string note_name [, string note_value])
- Get and set Apache request notes */
-PHP_FUNCTION(apache_note)
-{
- zval **arg_name, **arg_val;
- char *note_val;
- int arg_count = ZEND_NUM_ARGS();
-
- if (arg_count<1 || arg_count>2 ||
- zend_get_parameters_ex(arg_count, &arg_name, &arg_val) ==FAILURE ) {
- WRONG_PARAM_COUNT;
- }
-
- convert_to_string_ex(arg_name);
- note_val = (char *) table_get(((request_rec *)SG(server_context))->notes, (*arg_name)->value.str.val);
-
- if (arg_count == 2) {
- convert_to_string_ex(arg_val);
- table_set(((request_rec *)SG(server_context))->notes, (*arg_name)->value.str.val, (*arg_val)->value.str.val);
- }
-
- if (note_val) {
- RETURN_STRING(note_val, 1);
- } else {
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-/* {{{ PHP_MINFO_FUNCTION
- */
-PHP_MINFO_FUNCTION(apache)
-{
- module *modp = NULL;
- char output_buf[128];
-#if !defined(WIN32) && !defined(WINNT)
- char name[64];
- char modulenames[1024];
- char *p;
-#endif
- server_rec *serv;
- extern char server_root[MAX_STRING_LEN];
- extern uid_t user_id;
- extern char *user_name;
- extern gid_t group_id;
- extern int max_requests_per_child;
-
- serv = ((request_rec *) SG(server_context))->server;
-
-
- php_info_print_table_start();
-
-#ifdef PHP_WIN32
- php_info_print_table_row(1, "Apache for Windows 95/NT");
- php_info_print_table_end();
- php_info_print_table_start();
-#elif defined(NETWARE)
- php_info_print_table_row(1, "Apache for NetWare");
- php_info_print_table_end();
- php_info_print_table_start();
-#else
- php_info_print_table_row(2, "APACHE_INCLUDE", PHP_APACHE_INCLUDE);
- php_info_print_table_row(2, "APACHE_TARGET", PHP_APACHE_TARGET);
-#endif
-
- php_info_print_table_row(2, "Apache Version", SERVER_VERSION);
-
-#ifdef APACHE_RELEASE
- sprintf(output_buf, "%d", APACHE_RELEASE);
- php_info_print_table_row(2, "Apache Release", output_buf);
-#endif
- sprintf(output_buf, "%d", MODULE_MAGIC_NUMBER);
- php_info_print_table_row(2, "Apache API Version", output_buf);
- sprintf(output_buf, "%s:%u", serv->server_hostname, serv->port);
- php_info_print_table_row(2, "Hostname:Port", output_buf);
-#if !defined(WIN32) && !defined(WINNT)
- sprintf(output_buf, "%s(%d)/%d", user_name, (int)user_id, (int)group_id);
- php_info_print_table_row(2, "User/Group", output_buf);
- sprintf(output_buf, "Per Child: %d - Keep Alive: %s - Max Per Connection: %d", max_requests_per_child, serv->keep_alive ? "on":"off", serv->keep_alive_max);
- php_info_print_table_row(2, "Max Requests", output_buf);
-#endif
- sprintf(output_buf, "Connection: %d - Keep-Alive: %d", serv->timeout, serv->keep_alive_timeout);
- php_info_print_table_row(2, "Timeouts", output_buf);
-#if !defined(WIN32) && !defined(WINNT)
-/*
- This block seems to be working on NetWare; But it seems to be showing
- all modules instead of just the loaded ones
-*/
- php_info_print_table_row(2, "Server Root", server_root);
-
- strcpy(modulenames, "");
- for(modp = top_module; modp; modp = modp->next) {
- strlcpy(name, modp->name, sizeof(name));
- if ((p = strrchr(name, '.'))) {
- *p='\0'; /* Cut off ugly .c extensions on module names */
- }
- strcat(modulenames, name);
- if (modp->next) {
- strcat(modulenames, ", ");
- }
- }
- php_info_print_table_row(2, "Loaded Modules", modulenames);
-#endif
-
- php_info_print_table_end();
-
- DISPLAY_INI_ENTRIES();
-
- {
- register int i;
- array_header *arr;
- table_entry *elts;
- request_rec *r;
-
- r = ((request_rec *) SG(server_context));
- arr = table_elts(r->subprocess_env);
- elts = (table_entry *)arr->elts;
-
- SECTION("Apache Environment");
- php_info_print_table_start();
- php_info_print_table_header(2, "Variable", "Value");
- for (i=0; i < arr->nelts; i++) {
- php_info_print_table_row(2, elts[i].key, elts[i].val);
- }
- php_info_print_table_end();
- }
-
- {
- array_header *env_arr;
- table_entry *env;
- int i;
- request_rec *r;
-
- r = ((request_rec *) SG(server_context));
- SECTION("HTTP Headers Information");
- php_info_print_table_start();
- php_info_print_table_colspan_header(2, "HTTP Request Headers");
- php_info_print_table_row(2, "HTTP Request", r->the_request);
- env_arr = table_elts(r->headers_in);
- env = (table_entry *)env_arr->elts;
- for (i = 0; i < env_arr->nelts; ++i) {
- if (env[i].key && (!PG(safe_mode) || (PG(safe_mode) && strncasecmp(env[i].key, "authorization", 13)))) {
- php_info_print_table_row(2, env[i].key, env[i].val);
- }
- }
- php_info_print_table_colspan_header(2, "HTTP Response Headers");
- env_arr = table_elts(r->headers_out);
- env = (table_entry *)env_arr->elts;
- for(i = 0; i < env_arr->nelts; ++i) {
- if (env[i].key) {
- php_info_print_table_row(2, env[i].key, env[i].val);
- }
- }
- php_info_print_table_end();
- }
-}
-/* }}} */
-
-/* {{{ proto bool virtual(string filename)
- Perform an Apache sub-request */
-/* This function is equivalent to <!--#include virtual...-->
- * in mod_include. It does an Apache sub-request. It is useful
- * for including CGI scripts or .shtml files, or anything else
- * that you'd parse through Apache (for .phtml files, you'd probably
- * want to use <?Include>. This only works when PHP is compiled
- * as an Apache module, since it uses the Apache API for doing
- * sub requests.
- */
-PHP_FUNCTION(virtual)
-{
- pval **filename;
- request_rec *rr = NULL;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &filename) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex(filename);
-
- if (!(rr = sub_req_lookup_uri ((*filename)->value.str.val, ((request_rec *) SG(server_context))))) {
- php_error(E_WARNING, "Unable to include '%s' - URI lookup failed", (*filename)->value.str.val);
- if (rr) destroy_sub_req (rr);
- RETURN_FALSE;
- }
-
- if (rr->status != 200) {
- php_error(E_WARNING, "Unable to include '%s' - error finding URI", (*filename)->value.str.val);
- if (rr) destroy_sub_req (rr);
- RETURN_FALSE;
- }
-
- php_end_ob_buffers(1 TSRMLS_CC);
- php_header(TSRMLS_C);
-
- if (run_sub_req(rr)) {
- php_error(E_WARNING, "Unable to include '%s' - request execution failed", (*filename)->value.str.val);
- if (rr) destroy_sub_req (rr);
- RETURN_FALSE;
- } else {
- if (rr) destroy_sub_req (rr);
- RETURN_TRUE;
- }
-}
-/* }}} */
-
-
-/* {{{ apache_table_to_zval(table *, int safe_mode, zval *return_value)
- Fetch all HTTP request headers */
-static void apache_table_to_zval(table *t, int safe_mode, zval *return_value)
-{
- array_header *env_arr;
- table_entry *tenv;
- int i;
-
- array_init(return_value);
- env_arr = table_elts(t);
- tenv = (table_entry *)env_arr->elts;
- for (i = 0; i < env_arr->nelts; ++i) {
- if (!tenv[i].key ||
- (safe_mode && !strncasecmp(tenv[i].key, "authorization", 13))) {
- continue;
- }
- if (add_assoc_string(return_value, tenv[i].key, (tenv[i].val==NULL) ? "" : tenv[i].val, 1)==FAILURE) {
- RETURN_FALSE;
- }
- }
-
-}
-/* }}} */
-
-
-/* {{{ proto array getallheaders(void)
-*/
-/* Alias for apache_request_headers() */
-/* }}} */
-
-/* {{{ proto array apache_request_headers(void)
- Fetch all HTTP request headers */
-PHP_FUNCTION(apache_request_headers)
-{
- apache_table_to_zval(((request_rec *)SG(server_context))->headers_in, PG(safe_mode), return_value);
-}
-/* }}} */
-
-/* {{{ proto array apache_response_headers(void)
- Fetch all HTTP response headers */
-PHP_FUNCTION(apache_response_headers)
-{
- apache_table_to_zval(((request_rec *) SG(server_context))->headers_out, 0, return_value);
-}
-/* }}} */
-
-/* {{{ proto bool apache_setenv(string variable, string value [, bool walk_to_top])
- Set an Apache subprocess_env variable */
-PHP_FUNCTION(apache_setenv)
-{
- int var_len, val_len, top=0;
- char *var = NULL, *val = NULL;
- request_rec *r = (request_rec *) SG(server_context);
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ss|b", &var, &var_len, &val, &val_len, &top) == FAILURE) {
- RETURN_FALSE;
- }
-
- while(top) {
- if(r->prev) r = r->prev;
- else break;
- }
-
- ap_table_setn(r->subprocess_env, ap_pstrndup(r->pool, var, var_len), ap_pstrndup(r->pool, val, val_len));
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto object apache_lookup_uri(string URI)
- Perform a partial request of the given URI to obtain information about it */
-PHP_FUNCTION(apache_lookup_uri)
-{
- pval **filename;
- request_rec *rr=NULL;
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &filename) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex(filename);
-
- if(!(rr = sub_req_lookup_uri((*filename)->value.str.val, ((request_rec *) SG(server_context))))) {
- php_error(E_WARNING, "URI lookup failed", (*filename)->value.str.val);
- RETURN_FALSE;
- }
- object_init(return_value);
- add_property_long(return_value,"status", rr->status);
- if (rr->the_request) {
- add_property_string(return_value,"the_request", rr->the_request, 1);
- }
- if (rr->status_line) {
- add_property_string(return_value,"status_line", (char *)rr->status_line, 1);
- }
- if (rr->method) {
- add_property_string(return_value,"method", (char *)rr->method, 1);
- }
- if (rr->content_type) {
- add_property_string(return_value,"content_type", (char *)rr->content_type, 1);
- }
- if (rr->handler) {
- add_property_string(return_value,"handler", (char *)rr->handler, 1);
- }
- if (rr->uri) {
- add_property_string(return_value,"uri", rr->uri, 1);
- }
- if (rr->filename) {
- add_property_string(return_value,"filename", rr->filename, 1);
- }
- if (rr->path_info) {
- add_property_string(return_value,"path_info", rr->path_info, 1);
- }
- if (rr->args) {
- add_property_string(return_value,"args", rr->args, 1);
- }
- if (rr->boundary) {
- add_property_string(return_value,"boundary", rr->boundary, 1);
- }
- add_property_long(return_value,"no_cache", rr->no_cache);
- add_property_long(return_value,"no_local_copy", rr->no_local_copy);
- add_property_long(return_value,"allowed", rr->allowed);
- add_property_long(return_value,"sent_bodyct", rr->sent_bodyct);
- add_property_long(return_value,"bytes_sent", rr->bytes_sent);
- add_property_long(return_value,"byterange", rr->byterange);
- add_property_long(return_value,"clength", rr->clength);
-
-#if MODULE_MAGIC_NUMBER >= 19980324
- if (rr->unparsed_uri) {
- add_property_string(return_value,"unparsed_uri", rr->unparsed_uri, 1);
- }
- if(rr->mtime) {
- add_property_long(return_value,"mtime", rr->mtime);
- }
-#endif
- if(rr->request_time) {
- add_property_long(return_value,"request_time", rr->request_time);
- }
-
- destroy_sub_req(rr);
-}
-/* }}} */
-
-
-#if 0
-This function is most likely a bad idea. Just playing with it for now.
-
-PHP_FUNCTION(apache_exec_uri)
-{
- pval **filename;
- request_rec *rr=NULL;
- TSRMLS_FETCH();
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &filename) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex(filename);
-
- if(!(rr = ap_sub_req_lookup_uri((*filename)->value.str.val, ((request_rec *) SG(server_context))))) {
- php_error(E_WARNING, "URI lookup failed", (*filename)->value.str.val);
- RETURN_FALSE;
- }
- RETVAL_LONG(ap_run_sub_req(rr));
- ap_destroy_sub_req(rr);
-}
-#endif
-
-/* {{{ proto string apache_get_version(void)
- Fetch Apache version */
-PHP_FUNCTION(apache_get_version)
-{
- char *apv = (char *) ap_get_server_version();
-
- if (apv && *apv) {
- RETURN_STRING(apv, 1);
- } else {
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-/* {{{ proto array apache_get_modules(void)
- Get a list of loaded Apache modules */
-PHP_FUNCTION(apache_get_modules)
-{
- int n;
- char *p;
-
- array_init(return_value);
-
- for (n = 0; ap_loaded_modules[n]; ++n) {
- char *s = (char *) ap_loaded_modules[n]->name;
- if ((p = strchr(s, '.'))) {
- add_next_index_stringl(return_value, s, (p - s), 1);
- } else {
- add_next_index_string(return_value, s, 1);
- }
- }
-}
-/* }}} */
-
-/*
- * 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/sapi/apache_hooks/php_apache_http.h b/sapi/apache_hooks/php_apache_http.h
deleted file mode 100644
index 2a030482f6..0000000000
--- a/sapi/apache_hooks/php_apache_http.h
+++ /dev/null
@@ -1,44 +0,0 @@
-#define NO_REGEX_EXTRA_H
-
-#ifdef WIN32
-#include <winsock2.h>
-#include <stddef.h>
-#endif
-
-#ifdef NETWARE
-#include <netinet/in.h>
-#endif
-
-#include "zend.h"
-#include "zend_stack.h"
-#include "php_regex.h"
-
-#include "httpd.h"
-#include "http_config.h"
-
-#if MODULE_MAGIC_NUMBER > 19980712
-# include "ap_compat.h"
-#else
-# if MODULE_MAGIC_NUMBER > 19980324
-# include "compat.h"
-# endif
-#endif
-
-#include "http_core.h"
-#include "http_main.h"
-#include "http_protocol.h"
-#include "http_request.h"
-#include "http_log.h"
-#include "util_script.h"
-
-#include "php_variables.h"
-#include "php_main.h"
-#include "php_ini.h"
-#include "ext/standard/php_standard.h"
-
-#include "mod_php5.h"
-
-
-zval *php_apache_request_new(request_rec *r);
-
-int apache_php_module_hook(request_rec *r, php_handler *handler, zval **ret TSRMLS_DC);
diff --git a/sapi/apache_hooks/sapi_apache.c b/sapi/apache_hooks/sapi_apache.c
deleted file mode 100644
index 1b6c9599ac..0000000000
--- a/sapi/apache_hooks/sapi_apache.c
+++ /dev/null
@@ -1,136 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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. |
- +----------------------------------------------------------------------+
- | Authors: Rasmus Lerdorf <rasmus@php.net> |
- | (with helpful hints from Dean Gaudet <dgaudet@arctic.org> |
- | PHP 4.0 patches by: |
- | Zeev Suraski <zeev@zend.com> |
- | Stig Bakken <ssb@php.net> |
- +----------------------------------------------------------------------+
- */
-/* $Id$ */
-
-#include "php_apache_http.h"
-
-/* {{{ apache_php_module_main
- */
-int apache_php_module_main(request_rec *r, int display_source_mode TSRMLS_DC)
-{
- zend_file_handle file_handle;
-
- if (php_request_startup(TSRMLS_C) == FAILURE) {
- return FAILURE;
- }
- /* sending a file handle to another dll is not working
- // so let zend open it.
- */
-
- if (display_source_mode) {
- zend_syntax_highlighter_ini syntax_highlighter_ini;
-
- php_get_highlight_struct(&syntax_highlighter_ini);
- if (highlight_file(SG(request_info).path_translated, &syntax_highlighter_ini TSRMLS_CC)){
- return OK;
- } else {
- return NOT_FOUND;
- }
- } else {
- file_handle.type = ZEND_HANDLE_FILENAME;
- file_handle.handle.fd = 0;
- file_handle.filename = SG(request_info).path_translated;
- file_handle.opened_path = NULL;
- file_handle.free_filename = 0;
- (void) php_execute_script(&file_handle TSRMLS_CC);
- }
- AP(in_request) = 0;
-
- return (OK);
-}
-/* }}} */
-
-/* {{{ apache_php_module_hook
- */
-int apache_php_module_hook(request_rec *r, php_handler *handler, zval **ret TSRMLS_DC)
-{
- zend_file_handle file_handle;
- zval *req;
- char *tmp;
-
-#if PHP_SIGCHILD
- signal(SIGCHLD, sigchld_handler);
-#endif
- if(AP(current_hook) == AP_RESPONSE) {
- if (php_request_startup_for_hook(TSRMLS_C) == FAILURE)
- return FAILURE;
- }
- else {
- if (php_request_startup_for_hook(TSRMLS_C) == FAILURE)
- return FAILURE;
- }
-
- req = php_apache_request_new(r);
- if(PG(register_globals)) {
- php_register_variable_ex("request", req, NULL TSRMLS_CC);
- }
- else {
- php_register_variable_ex("request", req, PG(http_globals)[TRACK_VARS_SERVER] TSRMLS_CC);
- }
- switch(handler->type) {
- case AP_HANDLER_TYPE_FILE:
- php_register_variable("PHP_SELF_HOOK", handler->name, PG(http_globals)[TRACK_VARS_SERVER] TSRMLS_CC);
- memset(&file_handle, 0, sizeof(file_handle));
- file_handle.type = ZEND_HANDLE_FILENAME;
- file_handle.filename = handler->name;
- (void) php_execute_simple_script(&file_handle, ret TSRMLS_CC);
- break;
- case AP_HANDLER_TYPE_METHOD:
- if( (tmp = strstr(handler->name, "::")) != NULL && *(tmp+2) != '\0' ) {
- zval *class;
- zval *method;
- *tmp = '\0';
- ALLOC_ZVAL(class);
- ZVAL_STRING(class, handler->name, 1);
- ALLOC_ZVAL(method);
- ZVAL_STRING(method, tmp +2, 1);
- *tmp = ':';
- call_user_function_ex(EG(function_table), &class, method, ret, 0, NULL, 0, NULL TSRMLS_CC);
- zval_dtor(class);
- zval_dtor(method);
- }
- else {
- php_error(E_ERROR, "Unable to call %s - not a Class::Method\n", handler->name);
- /* not a class::method */
- }
- break;
- default:
- /* not a valid type */
- assert(0);
- break;
- }
- zval_dtor(req);
- AP(in_request) = 0;
-
- return OK;
-}
-
-/* }}} */
-
-/*
- * 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/sapi/caudium/CREDITS b/sapi/caudium/CREDITS
deleted file mode 100644
index 45789dbdfe..0000000000
--- a/sapi/caudium/CREDITS
+++ /dev/null
@@ -1,2 +0,0 @@
-Caudium / Roxen
-David Hedbor
diff --git a/sapi/caudium/README b/sapi/caudium/README
deleted file mode 100644
index 86ef65655d..0000000000
--- a/sapi/caudium/README
+++ /dev/null
@@ -1,16 +0,0 @@
-Embedded Caudium PHP support. It seems to work but isn't tested
-much. Due to a design choice it requires _Pike_ threads and a
-thread-safe PHP. It doesn't however require _Caudium_ to run in
-threaded mode. Due to the design, utilization of multiple processors
-should be pretty good.
-
-It requires a new Pike 7.0 and Caudium. It will not work with
-Roxen. Also, with the help of the VIRTUAL_DIR code in PHP, PHP
-execution should be very similar to that of mod_php or the cgi
-script.
-
-If you have any questions, please contact me, David Hedbor
-(neotron@php.net or neotron@caudium.net). For more information on
-Caudium, see http://caudium.net/ and http://caudium.org/.
-
-
diff --git a/sapi/caudium/TODO b/sapi/caudium/TODO
deleted file mode 100644
index b8217c5934..0000000000
--- a/sapi/caudium/TODO
+++ /dev/null
@@ -1,30 +0,0 @@
-TODO:
-
-- per-virtual-server configuration
-- configurable limit of number of concurrent PHP executions
-- fix setting of auth info.
-
-FIXED:
-+ => fixed
-- => not fixed and no fix planned
-? => Maybe fixed, maybe not.
-
-+ Allow multiple headers
- This is now fixed.
-+ fix backtraces
- Uses th_farm, thus problem is fixed
-+ exit in PHP exits Caudium
- Name conflict with do_exit in Pike and PHP. Reported to both teams.
-+ POST newline added?
- Was a Caudium bug.
-+ use th_farm
- Yeppers. Works great.
-- change cwd in single threaded mode
- There will be no single threaded mode support. The Caudium module
- will requite PHP ZTS and Pike threads to run. Single threaded PHP
- is rather uninteresting anyway.
-? Recursive mutex lock problem:
- Dunno if this is fixed. Major rewrite so it would have to be
- retested.
-
-
diff --git a/sapi/caudium/caudium.c b/sapi/caudium/caudium.c
deleted file mode 100644
index 68ba73b60e..0000000000
--- a/sapi/caudium/caudium.c
+++ /dev/null
@@ -1,791 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: David Hedbor <neotron@php.net> |
- | Based on aolserver SAPI by Sascha Schumann <sascha@schumann.cx> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-#include "php.h"
-#ifdef HAVE_CAUDIUM
-
-#include "php_ini.h"
-#include "php_globals.h"
-#include "SAPI.h"
-#include "php_main.h"
-#include "ext/standard/info.h"
-
-#include "php_version.h"
-
-/* Pike Include Files
- *
- * conflicts with pike avoided by only using long names. Requires a new
- * Pike 0.7 since it was implemented for this interface only.
- *
- */
-#define NO_PIKE_SHORTHAND
-
-/* Ok, we are now using Pike level threads to handle PHP5 since
- * the nice th_farm threads aren't working on Linux with glibc 2.2
- * (why this is I don't know).
- */
-#define USE_PIKE_LEVEL_THREADS
-
-#include <fdlib.h>
-#include <program.h>
-#include <pike_types.h>
-#include <interpret.h>
-#include <module_support.h>
-#include <array.h>
-#include <backend.h>
-#include <stralloc.h>
-#include <mapping.h>
-#include <object.h>
-#include <threads.h>
-#include <builtin_functions.h>
-#include <operators.h>
-#include <version.h>
-
-#if (PIKE_MAJOR_VERSION == 7 && PIKE_MINOR_VERSION == 1 && PIKE_BUILD_VERSION >= 12) || PIKE_MAJOR_VERSION > 7 || (PIKE_MAJOR_VERSION == 7 && PIKE_MINOR_VERSION > 1)
-# include "pike_error.h"
-#else
-# include "error.h"
-# ifndef Pike_error
-# define Pike_error error
-# endif
-#endif
-
-/* Pike 7.x and newer */
-#define MY_MAPPING_LOOP(md, COUNT, KEY) \
- for(COUNT=0;COUNT < md->data->hashsize; COUNT++ ) \
- for(KEY=md->data->hash[COUNT];KEY;KEY=KEY->next)
-
-#ifndef ZTS
-/* Need thread safety */
-#error You need to compile PHP with threads.
-#endif
-
-#ifndef PIKE_THREADS
-#error The PHP5 module requires that your Pike has thread support.
-#endif
-
-#undef HIDE_GLOBAL_VARIABLES
-#undef REVEAL_GLOBAL_VARIABLES
-#define HIDE_GLOBAL_VARIABLES()
-#define REVEAL_GLOBAL_VARIABLES()
-
-/* php_caudium_request is per-request object storage */
-
-typedef struct
-{
- struct mapping *request_data;
- struct object *my_fd_obj;
- struct svalue done_cb;
- struct pike_string *filename;
- int my_fd;
- int written;
- TSRMLS_D;
-} php_caudium_request;
-
-
-void pike_module_init(void);
-void pike_module_exit(void);
-static void free_struct(TSRMLS_D);
-void f_php_caudium_request_handler(INT32 args);
-
-/* Defines to get to the data supplied when the script is started. */
-
-/* Per thread storage area id... */
-static int caudium_globals_id;
-
-#define GET_THIS() php_caudium_request *_request = ts_resource(caudium_globals_id)
-#define THIS _request
-#define PTHIS ((php_caudium_request *)(Pike_fp->current_storage))
-/* File descriptor integer. Used to write directly to the FD without
- * passing Pike
- */
-#define MY_FD (THIS->my_fd)
-
-/* FD object. Really a PHPScript object from Pike which implements a couple
- * of functions to handle headers, writing and buffering.
- */
-#define MY_FD_OBJ ((struct object *)(THIS->my_fd_obj))
-
-/* Mapping with data supplied from the calling Caudium module. Contains
- * a mapping with headers, an FD object etc.
- */
-#define REQUEST_DATA ((struct mapping *)(THIS->request_data))
-
-extern int fd_from_object(struct object *o);
-static unsigned char caudium_php_initialized;
-
-#ifndef mt_lock_interpreter
-#define mt_lock_interpreter() mt_lock(&interpreter_lock);
-#define mt_unlock_interpreter() mt_unlock(&interpreter_lock);
-#endif
-
-
-/* This allows calling of pike functions from the PHP callbacks,
- * which requires the Pike interpreter to be locked.
- */
-#define THREAD_SAFE_RUN(COMMAND, what) do {\
- struct thread_state *state;\
- if((state = thread_state_for_id(th_self()))!=NULL) {\
- if(!state->swapped) {\
- COMMAND;\
- } else {\
- mt_lock_interpreter();\
- SWAP_IN_THREAD(state);\
- COMMAND;\
- SWAP_OUT_THREAD(state);\
- mt_unlock_interpreter();\
- }\
- }\
-} while(0)
-
-
-
-/* Low level header lookup. Basically looks for the named header in the mapping
- * headers in the supplied options mapping.
- */
-
-INLINE static struct svalue *lookup_header(char *headername)
-{
- struct svalue *headers, *value;
- struct pike_string *sind;
- GET_THIS();
- sind = make_shared_string("env");
- headers = low_mapping_string_lookup(REQUEST_DATA, sind);
- free_string(sind);
- if(!headers || headers->type != PIKE_T_MAPPING) return NULL;
- sind = make_shared_string(headername);
- value = low_mapping_string_lookup(headers->u.mapping, sind);
- free_string(sind);
- if(!value) return NULL;
- return value;
-}
-
-/* Lookup a header in the mapping and return the value as a string, or
- * return the default if it's missing
- */
-INLINE static char *lookup_string_header(char *headername, char *default_value)
-{
- struct svalue *head = NULL;
- THREAD_SAFE_RUN(head = lookup_header(headername), "header lookup");
- if(!head || head->type != PIKE_T_STRING)
- return default_value;
- return head->u.string->str;
-}
-
-/* Lookup a header in the mapping and return the value as if it's an integer
- * and otherwise return the default.
- */
-INLINE static int lookup_integer_header(char *headername, int default_value)
-{
- struct svalue *head = NULL;
- THREAD_SAFE_RUN(head = lookup_header(headername), "header lookup");
- if(!head || head->type != PIKE_T_INT)
- return default_value;
- return head->u.integer;
-}
-
-/*
- * php_caudium_low_ub_write() writes data to the client connection. Might be
- * rewritten to do more direct IO to save CPU and the need to lock the
- * interpreter for better threading.
- */
-
-INLINE static int
-php_caudium_low_ub_write(const char *str, uint str_length TSRMLS_DC) {
- int sent_bytes = 0;
- struct pike_string *to_write = NULL;
- GET_THIS();
- if(!MY_FD_OBJ->prog) {
- PG(connection_status) = PHP_CONNECTION_ABORTED;
- zend_bailout();
- return -1;
- }
- to_write = make_shared_binary_string(str, str_length);
- push_string(to_write);
- safe_apply(MY_FD_OBJ, "write", 1);
- if(Pike_sp[-1].type == PIKE_T_INT)
- sent_bytes = Pike_sp[-1].u.integer;
- pop_stack();
- if(sent_bytes != str_length) {
- /* This means the connection is closed. Dead. Gone. *sniff* */
- PG(connection_status) = PHP_CONNECTION_ABORTED;
- zend_bailout();
- }
- return sent_bytes;
-}
-
-/*
- * php_caudium_sapi_ub_write() calls php_caudium_low_ub_write in a Pike thread
- * safe manner or writes directly to the output FD if RXML post-parsing is
- * disabled.
- */
-
-static int
-php_caudium_sapi_ub_write(const char *str, uint str_length TSRMLS_DC)
-{
- GET_THIS();
- int sent_bytes = 0, fd = MY_FD;
- if(fd)
- {
- for(sent_bytes=0;sent_bytes < str_length;)
- {
- int written;
- written = fd_write(fd, str + sent_bytes, str_length - sent_bytes);
- if(written < 0)
- {
- switch(errno)
- {
- default:
- /* This means the connection is closed. Dead. Gone. *sniff* */
- PG(connection_status) = PHP_CONNECTION_ABORTED;
- zend_bailout();
- THIS->written += sent_bytes;
- return sent_bytes;
- case EINTR:
- case EWOULDBLOCK:
- continue;
- }
- } else {
- sent_bytes += written;
- }
- }
- THIS->written += sent_bytes;
- } else {
- THREAD_SAFE_RUN(sent_bytes = php_caudium_low_ub_write(str, str_length TSRMLS_CC),
- "write");
- }
- return sent_bytes;
-}
-
-/* php_caudium_set_header() sets a header in the header mapping. Called in a
- * thread safe manner from php_caudium_sapi_header_handler.
- */
-INLINE static void
-php_caudium_set_header(char *header_name, char *value, char *p)
-{
- struct svalue hsval;
- struct pike_string *hval, *ind, *hind;
- struct mapping *headermap;
- struct svalue *s_headermap, *soldval;
- int vallen;
- GET_THIS();
- // hval = make_shared_string(value);
- ind = make_shared_string(" _headers");
- hind = make_shared_binary_string(header_name,
- (int)(p - header_name));
-
- s_headermap = low_mapping_string_lookup(REQUEST_DATA, ind);
- if(!s_headermap || s_headermap->type != PIKE_T_MAPPING)
- {
- struct svalue mappie;
- mappie.type = PIKE_T_MAPPING;
- headermap = allocate_mapping(1);
- mappie.u.mapping = headermap;
- mapping_string_insert(REQUEST_DATA, ind, &mappie);
- free_mapping(headermap);
- hval = make_shared_string(value);
- } else {
- headermap = s_headermap->u.mapping;
- soldval = low_mapping_string_lookup(headermap, hind);
- vallen = strlen(value);
- if(soldval != NULL &&
- soldval->type == PIKE_T_STRING &&
- soldval->u.string->size_shift == 0) {
- /* Existing, valid header. Prepend.*/
- hval = begin_shared_string(soldval->u.string->len + 1 + vallen);
- MEMCPY(hval->str, soldval->u.string->str, soldval->u.string->len);
- STR0(hval)[soldval->u.string->len] = '\0';
- MEMCPY(hval->str+soldval->u.string->len+1, value, vallen);
- hval = end_shared_string(hval);
- } else {
- hval = make_shared_string(value);
- }
- }
- hsval.type = PIKE_T_STRING;
- hsval.u.string = hval;
-
- mapping_string_insert(headermap, hind, &hsval);
-
- free_string(hval);
- free_string(ind);
- free_string(hind);
-}
-
-/*
- * php_caudium_sapi_header_handler() sets a HTTP reply header to be
- * sent to the client.
- */
-static int
-php_caudium_sapi_header_handler(sapi_header_struct *sapi_header,
- sapi_headers_struct *sapi_headers TSRMLS_DC)
-{
- char *header_name, *header_content, *p;
- header_name = sapi_header->header;
- header_content = p = strchr(header_name, ':');
-
- if(p) {
- do {
- header_content++;
- } while(*header_content == ' ');
- THREAD_SAFE_RUN(php_caudium_set_header(header_name, header_content, p), "header handler");
- }
- sapi_free_header(sapi_header);
- return 0;
-}
-
-/*
- * php_caudium_sapi_send_headers() flushes the headers to the client.
- * Called before real content is sent by PHP.
- */
-
-INLINE static int
-php_caudium_low_send_headers(sapi_headers_struct *sapi_headers TSRMLS_DC)
-{
- struct pike_string *ind;
- struct svalue *s_headermap;
- GET_THIS();
- if(!MY_FD_OBJ->prog) {
- PG(connection_status) = PHP_CONNECTION_ABORTED;
- zend_bailout();
- return SAPI_HEADER_SEND_FAILED;
- }
- ind = make_shared_string(" _headers");
- s_headermap = low_mapping_string_lookup(REQUEST_DATA, ind);
- free_string(ind);
-
- push_int(SG(sapi_headers).http_response_code);
- if(s_headermap && s_headermap->type == PIKE_T_MAPPING)
- ref_push_mapping(s_headermap->u.mapping);
- else
- push_int(0);
- safe_apply(MY_FD_OBJ, "send_headers", 2);
- pop_stack();
-
- return SAPI_HEADER_SENT_SUCCESSFULLY;
-}
-
-static int
-php_caudium_sapi_send_headers(sapi_headers_struct *sapi_headers TSRMLS_DC)
-{
- int res = 0;
- THREAD_SAFE_RUN(res = php_caudium_low_send_headers(sapi_headers TSRMLS_CC), "send headers");
- return res;
-}
-
-/*
- * php_caudium_sapi_read_post() reads a specified number of bytes from
- * the client. Used for POST/PUT requests.
- */
-
-INLINE static int php_caudium_low_read_post(char *buf, uint count_bytes)
-{
- uint total_read = 0;
- GET_THIS();
- TSRMLS_FETCH();
-
- if(!MY_FD_OBJ->prog)
- {
- PG(connection_status) = PHP_CONNECTION_ABORTED;
- zend_bailout();
- return -1;
- }
- push_int(count_bytes);
- safe_apply(MY_FD_OBJ, "read_post", 1);
- if(Pike_sp[-1].type == PIKE_T_STRING) {
- MEMCPY(buf, Pike_sp[-1].u.string->str,
- (total_read = Pike_sp[-1].u.string->len));
- buf[total_read] = '\0';
- } else
- total_read = 0;
- pop_stack();
- return total_read;
-}
-
-static int
-php_caudium_sapi_read_post(char *buf, uint count_bytes TSRMLS_DC)
-{
- uint total_read = 0;
- THREAD_SAFE_RUN(total_read = php_caudium_low_read_post(buf, count_bytes), "read post");
- return total_read;
-}
-
-/*
- * php_caudium_sapi_read_cookies() returns the Cookie header from
- * the HTTP request header
- */
-
-static char *
-php_caudium_sapi_read_cookies(TSRMLS_D)
-{
- char *cookies;
- cookies = lookup_string_header("HTTP_COOKIE", NULL);
- return cookies;
-}
-
-static void php_info_caudium(ZEND_MODULE_INFO_FUNC_ARGS)
-{
- /* char buf[512]; */
- php_info_print_table_start();
- php_info_print_table_row(2, "SAPI module version", "$Id$");
- /* php_info_print_table_row(2, "Build date", Ns_InfoBuildDate());
- php_info_print_table_row(2, "Config file path", Ns_InfoConfigFile());
- php_info_print_table_row(2, "Error Log path", Ns_InfoErrorLog());
- php_info_print_table_row(2, "Installation path", Ns_InfoHomePath());
- php_info_print_table_row(2, "Hostname of server", Ns_InfoHostname());
- php_info_print_table_row(2, "Source code label", Ns_InfoLabel());
- php_info_print_table_row(2, "Server platform", Ns_InfoPlatform());
- snprintf(buf, 511, "%s/%s", Ns_InfoServerName(), Ns_InfoServerVersion());
- php_info_print_table_row(2, "Server version", buf);
- snprintf(buf, 511, "%d day(s), %02d:%02d:%02d",
- uptime / 86400,
- (uptime / 3600) % 24,
- (uptime / 60) % 60,
- uptime % 60);
- php_info_print_table_row(2, "Server uptime", buf);
- */
- php_info_print_table_end();
-}
-
-static zend_module_entry php_caudium_module = {
- STANDARD_MODULE_HEADER,
- "Caudium",
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- php_info_caudium,
- NULL,
- STANDARD_MODULE_PROPERTIES
-};
-
-
-INLINE static void low_sapi_caudium_register_variables(zval *track_vars_array TSRMLS_DC)
-{
- int i;
- struct keypair *k;
- struct svalue *headers;
- struct pike_string *sind;
- struct svalue *ind;
- struct svalue *val;
- GET_THIS();
- php_register_variable("PHP_SELF", SG(request_info).request_uri,
- track_vars_array TSRMLS_CC);
- php_register_variable("GATEWAY_INTERFACE", "CGI/1.1",
- track_vars_array TSRMLS_CC);
- php_register_variable("REQUEST_METHOD",
- (char *) SG(request_info).request_method,
- track_vars_array TSRMLS_CC);
- php_register_variable("REQUEST_URI", SG(request_info).request_uri,
- track_vars_array TSRMLS_CC);
- php_register_variable("PATH_TRANSLATED", SG(request_info).path_translated,
- track_vars_array TSRMLS_CC);
-
- sind = make_shared_string("env");
- headers = low_mapping_string_lookup(REQUEST_DATA, sind);
- free_string(sind);
- if(headers && headers->type == PIKE_T_MAPPING) {
- MY_MAPPING_LOOP(headers->u.mapping, i, k) {
- ind = &k->ind;
- val = &k->val;
- if(ind && ind->type == PIKE_T_STRING &&
- val && val->type == PIKE_T_STRING) {
- php_register_variable(ind->u.string->str, val->u.string->str,
- track_vars_array TSRMLS_CC );
- }
- }
- }
-}
-
-static void sapi_caudium_register_variables(zval *track_vars_array TSRMLS_DC)
-{
- THREAD_SAFE_RUN(low_sapi_caudium_register_variables(track_vars_array TSRMLS_CC), "register_variables");
-}
-
-
-static int php_caudium_startup(sapi_module_struct *sapi_module)
-{
- if (php_module_startup(sapi_module, &php_caudium_module, 1)==FAILURE) {
- return FAILURE;
- }
- return SUCCESS;
-}
-
-
-/* this structure is static (as in "it does not change") */
-static sapi_module_struct caudium_sapi_module = {
- "caudium",
- "Caudium",
- php_caudium_startup, /* startup */
- php_module_shutdown_wrapper, /* shutdown */
- NULL, /* activate */
- NULL, /* deactivate */
- php_caudium_sapi_ub_write, /* unbuffered write */
- NULL, /* flush */
- NULL, /* get uid */
- NULL, /* getenv */
- php_error, /* error handler */
- php_caudium_sapi_header_handler, /* header handler */
- php_caudium_sapi_send_headers, /* send headers handler */
- NULL, /* send header handler */
- php_caudium_sapi_read_post, /* read POST data */
- php_caudium_sapi_read_cookies, /* read cookies */
- sapi_caudium_register_variables, /* register server variables */
- NULL, /* Log message */
-
- STANDARD_SAPI_MODULE_PROPERTIES
-};
-
-/*
- * php_caudium_module_main() is called by the per-request handler and
- * "executes" the script
- */
-
-static void php_caudium_module_main(php_caudium_request *ureq)
-{
- int res;
- zend_file_handle file_handle;
-#ifndef USE_PIKE_LEVEL_THREADS
- struct thread_state *state;
- extern struct program *thread_id_prog;
-#endif
- TSRMLS_FETCH();
- GET_THIS();
- THIS->filename = ureq->filename;
- THIS->done_cb = ureq->done_cb;
- THIS->my_fd_obj = ureq->my_fd_obj;
- THIS->my_fd = ureq->my_fd;
- THIS->request_data = ureq->request_data;
- free(ureq);
-
-#ifndef USE_PIKE_LEVEL_THREADS
- mt_lock_interpreter();
- init_interpreter();
-#if PIKE_MAJOR_VERSION == 7 && PIKE_MINOR_VERSION < 1
- thread_id = low_clone(thread_id_prog);
- state = OBJ2THREAD(thread_id);
- Pike_stack_top=((char *)&state)+ (thread_stack_size-16384) * STACK_DIRECTION;
- recoveries = NULL;
- call_c_initializers(thread_id);
- OBJ2THREAD(thread_id)->id=th_self();
- num_threads++;
- thread_table_insert(thread_id);
- state->status=THREAD_RUNNING;
-#else
- Pike_interpreter.thread_id = low_clone(thread_id_prog);
- state = OBJ2THREAD(Pike_interpreter.thread_id);
- Pike_interpreter.stack_top=((char *)&state)+ (thread_stack_size-16384) * STACK_DIRECTION;
- Pike_interpreter.recoveries = NULL;
- call_c_initializers(Pike_interpreter.thread_id);
- state->id=th_self();
- // SWAP_OUT_THREAD(OBJ2THREAD(Pike_interpreter.thread_id));
- num_threads++;
- thread_table_insert(Pike_interpreter.thread_id);
- state->status=THREAD_RUNNING;
-#endif
- state->swapped = 0;
-#endif
- SG(request_info).query_string = lookup_string_header("QUERY_STRING", 0);
- SG(server_context) = (void *)1; /* avoid server_context == NULL */
-
- /* path_translated is apparently the absolute path to the file, not
- the translated PATH_INFO
- */
- SG(request_info).path_translated =
- lookup_string_header("SCRIPT_FILENAME", NULL);
- SG(request_info).request_uri = lookup_string_header("DOCUMENT_URI", NULL);
- if(!SG(request_info).request_uri)
- SG(request_info).request_uri = lookup_string_header("SCRIPT_NAME", NULL);
- SG(request_info).request_method = lookup_string_header("REQUEST_METHOD", "GET");
- SG(request_info).content_length = lookup_integer_header("HTTP_CONTENT_LENGTH", 0);
- SG(request_info).content_type = lookup_string_header("HTTP_CONTENT_TYPE", NULL);
- SG(sapi_headers).http_response_code = 200;
- if (!strcmp(SG(request_info).request_method, "HEAD")) {
- SG(request_info).headers_only = 1;
- } else {
- SG(request_info).headers_only = 0;
- }
-
- /* Let PHP5 handle the deconding of the AUTH */
- php_handle_auth_data(lookup_string_header("HTTP_AUTHORIZATION", NULL), TSRMLS_C);
- /* Swap out this thread and release the interpreter lock to allow
- * Pike threads to run. We wait since the above would otherwise require
- * a lot of unlock/lock.
- */
-#ifndef USE_PIKE_LEVEL_THREADS
- SWAP_OUT_THREAD(state);
- mt_unlock_interpreter();
-#else
- THREADS_ALLOW();
-#endif
-
-#ifdef VIRTUAL_DIR
- /* Change virtual directory, if the feature is enabled, which is
- * (almost) a requirement for PHP in Caudium. Might want to fail if it
- * isn't. Not a problem though, since it's on by default when using ZTS
- * which we require.
- */
- VCWD_CHDIR_FILE(THIS->filename->str);
-#endif
-
- file_handle.type = ZEND_HANDLE_FILENAME;
- file_handle.filename = THIS->filename->str;
- file_handle.opened_path = NULL;
- file_handle.free_filename = 0;
-
- THIS->written = 0;
- res = php_request_startup(TSRMLS_C);
-
- if(res == FAILURE) {
- THREAD_SAFE_RUN({
- apply_svalue(&THIS->done_cb, 0);
- pop_stack();
- free_struct(TSRMLS_C);
- }, "Negative run response");
- } else {
- php_execute_script(&file_handle TSRMLS_CC);
- php_request_shutdown(NULL);
- THREAD_SAFE_RUN({
- push_int(THIS->written);
- apply_svalue(&THIS->done_cb, 1);
- pop_stack();
- free_struct(TSRMLS_C);
- }, "positive run response");
- }
-
-#ifndef USE_PIKE_LEVEL_THREADS
- mt_lock_interpreter();
- SWAP_IN_THREAD(state);
-#if PIKE_MAJOR_VERSION == 7 && PIKE_MINOR_VERSION < 1
- state->status=THREAD_EXITED;
- co_signal(& state->status_change);
- thread_table_delete(thread_id);
- free_object(thread_id);
- thread_id=NULL;
-#else
- state->status=THREAD_EXITED;
- co_signal(& state->status_change);
- thread_table_delete(Pike_interpreter.thread_id);
- free_object(Pike_interpreter.thread_id);
- Pike_interpreter.thread_id=NULL;
-#endif
- cleanup_interpret();
- num_threads--;
- mt_unlock_interpreter();
-#else
- THREADS_DISALLOW();
-#endif
-}
-
-/*
- * The php_caudium_request_handler() is called per request and handles
- * everything for one request.
- */
-
-void f_php_caudium_request_handler(INT32 args)
-{
- struct object *my_fd_obj;
- struct mapping *request_data;
- struct svalue *done_callback;
- struct pike_string *script;
- struct svalue *raw_fd;
- struct pike_string *ind;
- php_caudium_request *_request;
- THIS = malloc(sizeof(php_caudium_request));
- if(THIS == NULL)
- Pike_error("Out of memory.");
-
- get_all_args("PHP5.Interpreter->run", args, "%S%m%O%*", &script,
- &request_data, &my_fd_obj, &done_callback);
- if(done_callback->type != PIKE_T_FUNCTION)
- Pike_error("PHP5.Interpreter->run: Bad argument 4, expected function.\n");
- add_ref(request_data);
- add_ref(my_fd_obj);
- add_ref(script);
-
- THIS->request_data = request_data;
- THIS->my_fd_obj = my_fd_obj;
- THIS->filename = script;
- assign_svalue_no_free(&THIS->done_cb, done_callback);
-
- ind = make_shared_binary_string("my_fd", 5);
- raw_fd = low_mapping_string_lookup(THIS->request_data, ind);
- if(raw_fd && raw_fd->type == PIKE_T_OBJECT)
- {
- int fd = fd_from_object(raw_fd->u.object);
- if(fd == -1)
- THIS->my_fd = 0; /* Don't send directly to this FD... */
- else
- THIS->my_fd = fd;
- } else
- THIS->my_fd = 0;
-#ifdef USE_PIKE_LEVEL_THREADS
- php_caudium_module_main(THIS);
-#else
- th_farm((void (*)(void *))php_caudium_module_main, THIS);
-#endif
- pop_n_elems(args);
-}
-
-static void free_struct(TSRMLS_D)
-{
- GET_THIS();
- if(THIS->request_data) free_mapping(THIS->request_data);
- if(THIS->my_fd_obj) free_object(THIS->my_fd_obj);
- free_svalue(&THIS->done_cb);
- if(THIS->filename) free_string(THIS->filename);
- MEMSET(THIS, 0, sizeof(php_caudium_request));
-}
-
-
-/*
- * pike_module_init() is called by Pike once at startup
- *
- * This functions allocates basic structures
- */
-
-void pike_module_init( void )
-{
- if (!caudium_php_initialized) {
- caudium_php_initialized = 1;
- tsrm_startup(1, 1, 0, NULL);
- ts_allocate_id(&caudium_globals_id, sizeof(php_caudium_request), NULL, NULL);
- sapi_startup(&caudium_sapi_module);
- sapi_module.startup(&caudium_sapi_module);
- }
- start_new_program(); /* Text */
- pike_add_function("run", f_php_caudium_request_handler,
- "function(string, mapping, object, function:void)", 0);
- end_class("Interpreter", 0);
-}
-
-/*
- * pike_module_exit() performs the last steps before the
- * server exists. Shutdowns basic services and frees memory
- */
-
-void pike_module_exit(void)
-{
- caudium_php_initialized = 0;
- sapi_module.shutdown(&caudium_sapi_module);
- tsrm_shutdown();
-}
-#endif
diff --git a/sapi/caudium/config.m4 b/sapi/caudium/config.m4
deleted file mode 100644
index ef36a5ea6e..0000000000
--- a/sapi/caudium/config.m4
+++ /dev/null
@@ -1,99 +0,0 @@
-dnl
-dnl $Id$
-dnl
-
-RESULT=no
-AC_MSG_CHECKING(for Caudium support)
-AC_ARG_WITH(caudium,
-[ --with-caudium[=DIR] Build PHP as a Pike module for use with Caudium
- DIR is the Caudium server dir, with the default value
- /usr/local/caudium/server.],
-[
- if test "$prefix" = "NONE"; then CPREF=/usr/local/; fi
- if test ! -d $withval ; then
- if test "$prefix" = "NONE"; then
- withval=/usr/local/caudium/server/
- else
- withval=$prefix/caudium/server/
- fi
- fi
- if test -f $withval/bin/caudium; then
- PIKE=$withval/bin/caudium
- elif test -f $withval/bin/pike; then
- PIKE=$withval/bin/pike
- else
- AC_MSG_ERROR(Couldn't find a pike in $withval/bin/)
- fi
- if $PIKE -e 'float v; int rel;sscanf(version(), "Pike v%f release %d", v, rel);v += rel/10000.0; if(v < 7.0268) exit(1); exit(0);'; then
- PIKE_MODULE_DIR=`$PIKE --show-paths 2>&1| grep '^Module' | sed -e 's/.*: //'`
- PIKE_INCLUDE_DIR=`echo $PIKE_MODULE_DIR | sed -e 's,lib/pike/modules,include/pike,' -e 's,lib/modules,include/pike,' `
- if test -z "$PIKE_INCLUDE_DIR" -o -z "$PIKE_MODULE_DIR"; then
- AC_MSG_ERROR(Failed to figure out Pike module and include directories)
- fi
- AC_MSG_RESULT(yes)
- PIKE=`echo $PIKE | pike -e 'int tries=100;
- string orig,pike=Stdio.File("stdin")->read()-"\n";
- orig=pike;
- if(search(orig, "/"))
- orig = combine_path(getcwd(), orig);
- while(!catch(pike=readlink(pike)) && tries--)
- ;
- write(combine_path(dirname(orig), pike)); '`
- PHP_ADD_INCLUDE($PIKE_INCLUDE_DIR)
- if test "$prefix" != "NONE"; then
- PIKE_C_INCLUDE=$prefix/include/`basename $PIKE`
- else
- PIKE_C_INCLUDE=/usr/local/include/`basename $PIKE`
- fi
- AC_MSG_CHECKING(for C includes in $PIKE_C_INCLUDE)
- if test -f $PIKE_C_INCLUDE/version.h; then
- PIKE_TEST_VER=`$PIKE -e 'string v; int rel;sscanf(version(), "Pike v%s release %d", v, rel); write(v+"."+rel);'`
- ###### VERSION MATCH CHECK #######
- PMAJOR="^#define PIKE_MAJOR_VERSION"
- PMINOR="^#define PIKE_MINOR_VERSION"
- PBUILD="^#define PIKE_BUILD_VERSION"
-
- PIKE_CMAJOR_VERSION=0
- PIKE_CMINOR_VERSION=0
- PIKE_CBUILD_VERSION=0
-
- PIKE_CMAJOR_VERSION=`grep "$PMAJOR" $PIKE_C_INCLUDE/version.h | sed -e 's/\(#define.*N \)\(.*\)/\2/'`
- if test -z "$PIKE_CMAJOR_VERSION"; then
- if test -n "`grep f_version $PIKE_C_INCLUDE/version.h`"; then
- PIKE_CMAJOR_VERSION=6
- fi
- else
- PIKE_CMINOR_VERSION=`grep "$PMINOR" $PIKE_C_INCLUDE/version.h | sed -e 's/\(#define.*N \)\(.*\)/\2/'`
- PIKE_CBUILD_VERSION=`grep "$PBUILD" $PIKE_C_INCLUDE/version.h | sed -e 's/\(#define.*N \)\(.*\)/\2/'`
- fi
-
- if test "$PIKE_TEST_VER" = "${PIKE_CMAJOR_VERSION}.${PIKE_CMINOR_VERSION}.${PIKE_CBUILD_VERSION}"; then
- PHP_ADD_INCLUDE($PIKE_C_INCLUDE)
- PIKE_INCLUDE_DIR="$PIKE_INCLUDE_DIR, $PIKE_C_INCLUDE"
- AC_MSG_RESULT(found)
- else
- AC_MSG_RESULT(version mismatch)
- fi
- else
- AC_MSG_RESULT(not found)
- fi
- else
- AC_MSG_ERROR(Caudium PHP5 requires Pike 7.0 or newer)
- fi
- PIKE_VERSION=`$PIKE -e 'string v; int rel;sscanf(version(), "Pike v%s release %d", v, rel); write(v+"."+rel);'`
- AC_DEFINE(HAVE_CAUDIUM,1,[Whether to compile with Caudium support])
- PHP_SELECT_SAPI(caudium, shared, caudium.c)
- INSTALL_IT="\$(INSTALL) -m 0755 $SAPI_SHARED $withval/lib/$PIKE_VERSION/PHP5.so"
- RESULT=" *** Pike binary used: $PIKE
- *** Pike include dir(s) used: $PIKE_INCLUDE_DIR
- *** Pike version: $PIKE_VERSION"
- dnl Always use threads since thread-free support really blows.
- PHP_BUILD_THREAD_SAFE
-
-])
-AC_MSG_RESULT($RESULT)
-
-dnl ## Local Variables:
-dnl ## tab-width: 4
-dnl ## End:
-
diff --git a/sapi/cgi/CREDITS b/sapi/cgi/CREDITS
deleted file mode 100644
index a1c6a0be59..0000000000
--- a/sapi/cgi/CREDITS
+++ /dev/null
@@ -1,2 +0,0 @@
-CGI / FastCGI
-Rasmus Lerdorf, Stig Bakken, Shane Caraveo
diff --git a/sapi/cgi/Makefile.frag b/sapi/cgi/Makefile.frag
deleted file mode 100644
index 57a3b2937c..0000000000
--- a/sapi/cgi/Makefile.frag
+++ /dev/null
@@ -1,2 +0,0 @@
-$(SAPI_CGI_PATH): $(PHP_GLOBAL_OBJS) $(PHP_SAPI_OBJS)
- $(BUILD_CGI)
diff --git a/sapi/cgi/README.FastCGI b/sapi/cgi/README.FastCGI
deleted file mode 100644
index f51ae5686b..0000000000
--- a/sapi/cgi/README.FastCGI
+++ /dev/null
@@ -1,146 +0,0 @@
-Credits:
-Ben Mansell, Stephen Landamore, Daniel Silverstone, Shane Caraveo
-
-Building PHP
-------------
-
-You must add '--enable-fastcgi' to the configure command on Linux or
-OSX based systems to get fastcgi support in the php-cgi binary. You
-also must not use '--enable-discard-path'.
-
-Running the FastCGI PHP module
-------------------------------
-
-There are two ways to run the resulting 'php' binary after the fastcgi
-version has been built:
-
-1) Configure your web server to run the PHP binary itself.
-
-This is the simplest method, obviously you will have to configure your
-web server appropriately. Some web servers may also not support this method,
-or may not be as efficient.
-
-2) Run PHP separately from the web server.
-
-In this setup, PHP is started as a separate process entirely from the web
-server. It will listen on a socket for new FastCGI requests, and deliver
-PHP pages as appropriate. This is the recommended way of running PHP-FastCGI.
-To run this way, you must start the PHP binary running by giving it an IP
-and a port number to listen to on the command line, e.g.:
-
- ./php -b 127.0.0.1:8002
-
-The above line is the recommended way of running FastCGI. You usually
-want the FastCGI server to provide services to the localhost, not
-everyone on the Internet.
-
-If your web server sits on a remote host, you can make FastCGI listen
-on all interfaces:
-
- ./php -b :8002
- ./php -b "*:8002"
-
-Note that hostnames are not supported.
-
-You must also configure your web server to connect to the appropriate port
-in order to talk to the PHP FastCGI process.
-
-The advantage of running PHP in this way is that it entirely separates the
-web server and PHP process, so that one cannot disrupt the other. It also
-allows PHP to be on an entirely separate machine from the web server if need
-be, you could even have several web servers utilising the same running PHP
-process if required!
-
-
-Using FastCGI PHP with Apache
-=============================
-
-First of all, you may well ask 'Why?'. After all, Apache already has mod_php.
-However, there are advantages to running PHP with FastCGI. Separating the
-PHP code from the web server removes 'bloat' from the main server, and should
-improve the performance of non-PHP requests. Secondly, having one permanent
-PHP process as opposed to one per apache process means that shared resources
-like persistent database connections are used more efficiently.
-
-First of all, make sure that the FastCGI module is enabled. You should have
-a line in your config like:
-
- LoadModule fastcgi_module /usr/lib/apache/2.0/mod_fastcgi.so
-
-Don't load mod_php, by the way. Make sure it is commented out!
-
- #LoadModule php5_module /usr/lib/apache/2.0/libphp5.so
-
-Now, we'll create a fcgi-bin directory, just like you would do with normal
-CGI scripts. You'll need to create a directory somewhere to store your
-FastCGI binaries. We'll use /space/fcgi-bin/ for this example. Remember to
-copy the FastCGI-PHP binary in there. (named 'php-cgi') This sets up
-php to run under mod_fastcgi as a dynamic server.
-
- ScriptAlias /fcgi-bin/ /space/fcgi-bin/
- <Location /fcgi-bin/>
- Options ExecCGI
- SetHandler fastcgi-script
- </Location>
-
-To setup a specific static configuration for php, you have to use
-the FastCgiServer configuration for mod_fastcgi. For this, do not
-use the above configuration, but rather the following.
-(see mod_fastcgi docs for more configuration information):
-
- Alias /fcgi-bin/ /space/fcgi-bin/
- FastCgiServer /path/to/php-cgi -processes 5
-
-For either of the above configurations, we need to tell Apache to
-use the FastCGI binary /fcgi-bin/php to deliver PHP pages.
-All that is needed is:
-
- AddType application/x-httpd-fastphp .php
- Action application/x-httpd-fastphp /fcgi-bin/php-cgi
-
-Now, if you restart Apache, php pages should now be delivered!
-
-Using FastCGI PHP with IIS or iPlanet
-=====================================
-
-FastCGI server plugins are available at www.caraveo.com/fastcgi/
-Documentation on these are sparse. iPlanet is not very tested,
-and no makefile exists yet for unix based iPlanet servers.
-
-
-Security
---------
-
-Be sure to run the php binary as an appropriate userid. Also, firewall out
-the port that PHP is listening on. In addition, you can set the environment
-variable FCGI_WEB_SERVER_ADDRS to control who can connect to the FastCGI.
-Set it to a comma separated list of IP addresses, e.g.:
-
-export FCGI_WEB_SERVER_ADDRS=199.170.183.28,199.170.183.71
-
-
-Tuning
-------
-
-There are a few tuning parameters that can be tweaked to control the
-performance of FastCGI PHP. The following are environment variables that can
-be set before running the PHP binary:
-
-PHP_FCGI_CHILDREN (default value: 8)
-
-This controls how many child processes the PHP process spawns. When the
-fastcgi starts, it creates a number of child processes which handle one
-page request at a time. So by default, you will be able to handle 8
-concurrent PHP page requests. Further requests will be queued.
-Increasing this number will allow for better concurrency, especially if you
-have pages that take a significant time to create, or supply a lot of data
-(e.g. downloading huge files via PHP). On the other hand, having more
-processes running will use more RAM, and letting too many PHP pages be
-generated concurrently will mean that each request will be slow.
-
-PHP_FCGI_MAX_REQUESTS (default value: 500)
-
-This controls how many requests each child process will handle before
-exitting. When one process exits, another will be created. This tuning is
-necessary because several PHP functions are known to have memory leaks. If the
-PHP processes were left around forever, they would be become very inefficient.
diff --git a/sapi/cgi/cgi_main.c b/sapi/cgi/cgi_main.c
deleted file mode 100644
index e2028d36ca..0000000000
--- a/sapi/cgi/cgi_main.c
+++ /dev/null
@@ -1,1683 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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. |
- +----------------------------------------------------------------------+
- | Authors: Rasmus Lerdorf <rasmus@lerdorf.on.ca> |
- | Stig Bakken <ssb@php.net> |
- | Zeev Suraski <zeev@zend.com> |
- | FastCGI: Ben Mansell <php@slimyhorror.com> |
- | Shane Caraveo <shane@caraveo.com> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#include "php.h"
-#include "php_globals.h"
-#include "php_variables.h"
-#include "zend_modules.h"
-
-#include "SAPI.h"
-
-#include <stdio.h>
-#include "php.h"
-#ifdef PHP_WIN32
-#include "win32/time.h"
-#include "win32/signal.h"
-#include <process.h>
-#endif
-#if HAVE_SYS_TIME_H
-#include <sys/time.h>
-#endif
-#if HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-#if HAVE_SIGNAL_H
-#include <signal.h>
-#endif
-#if HAVE_SETLOCALE
-#include <locale.h>
-#endif
-#if HAVE_SYS_TYPES_H
-#include <sys/types.h>
-#endif
-#if HAVE_SYS_WAIT_H
-#include <sys/wait.h>
-#endif
-#include "zend.h"
-#include "zend_extensions.h"
-#include "php_ini.h"
-#include "php_globals.h"
-#include "php_main.h"
-#include "fopen_wrappers.h"
-#include "ext/standard/php_standard.h"
-#ifdef PHP_WIN32
-#include <io.h>
-#include <fcntl.h>
-#include "win32/php_registry.h"
-#endif
-
-#ifdef __riscos__
-#include <unixlib/local.h>
-#endif
-
-#include "zend_compile.h"
-#include "zend_execute.h"
-#include "zend_highlight.h"
-#include "zend_indent.h"
-
-
-#include "php_getopt.h"
-
-#if PHP_FASTCGI
-#include "fcgi_config.h"
-#include "fcgiapp.h"
-/* don't want to include fcgios.h, causes conflicts */
-#ifdef PHP_WIN32
-extern int OS_SetImpersonate(void);
-#else
-/* XXX this will need to change later when threaded fastcgi is
- implemented. shane */
-struct sigaction act, old_term, old_quit, old_int;
-#endif
-
-static void (*php_php_import_environment_variables)(zval *array_ptr TSRMLS_DC);
-
-#ifndef PHP_WIN32
-/* these globals used for forking children on unix systems */
-/**
- * Number of child processes that will get created to service requests
- */
-static int children = 0;
-
-/**
- * Set to non-zero if we are the parent process
- */
-static int parent = 1;
-
-/**
- * Process group
- */
-static pid_t pgroup;
-#endif
-
-#endif
-
-#define PHP_MODE_STANDARD 1
-#define PHP_MODE_HIGHLIGHT 2
-#define PHP_MODE_INDENT 3
-#define PHP_MODE_LINT 4
-#define PHP_MODE_STRIP 5
-
-static char *php_optarg = NULL;
-static int php_optind = 1;
-
-static const opt_struct OPTIONS[] = {
- {'a', 0, "interactive"},
-#ifndef PHP_WIN32
- {'b', 1, "bindpath"},
-#endif
- {'C', 0, "no-chdir"},
- {'c', 1, "php-ini"},
- {'d', 1, "define"},
- {'e', 0, "profile-info"},
- {'f', 1, "file"},
- {'g', 1, "global"},
- {'h', 0, "help"},
- {'i', 0, "info"},
- {'l', 0, "syntax-check"},
- {'m', 0, "modules"},
- {'n', 0, "no-php-ini"},
- {'q', 0, "no-header"},
- {'s', 0, "syntax-highlight"},
- {'s', 0, "syntax-highlighting"},
- {'w', 0, "strip"},
- {'?', 0, "usage"},/* help alias (both '?' and 'usage') */
- {'v', 0, "version"},
- {'z', 1, "zend-extension"},
- {'-', 0, NULL} /* end of args */
-};
-
-#if ENABLE_PATHINFO_CHECK
-/* true global. this is retreived once only, even for fastcgi */
-long fix_pathinfo=1;
-#endif
-
-#ifdef PHP_WIN32
-#define TRANSLATE_SLASHES(path) \
- { \
- char *tmp = path; \
- while (*tmp) { \
- if (*tmp == '\\') *tmp = '/'; \
- tmp++; \
- } \
- }
-#else
-#define TRANSLATE_SLASHES(path)
-#endif
-
-static int print_module_info(zend_module_entry *module, void *arg TSRMLS_DC)
-{
- php_printf("%s\n", module->name);
- return 0;
-}
-
-static int module_name_cmp(const void *a, const void *b TSRMLS_DC)
-{
- Bucket *f = *((Bucket **) a);
- Bucket *s = *((Bucket **) b);
-
- return strcasecmp(((zend_module_entry *)f->pData)->name,
- ((zend_module_entry *)s->pData)->name);
-}
-
-static void print_modules(TSRMLS_D)
-{
- HashTable sorted_registry;
- zend_module_entry tmp;
-
- zend_hash_init(&sorted_registry, 50, NULL, NULL, 1);
- zend_hash_copy(&sorted_registry, &module_registry, NULL, &tmp, sizeof(zend_module_entry));
- zend_hash_sort(&sorted_registry, zend_qsort, module_name_cmp, 0 TSRMLS_CC);
- zend_hash_apply_with_argument(&sorted_registry, (apply_func_arg_t) print_module_info, NULL TSRMLS_CC);
- zend_hash_destroy(&sorted_registry);
-}
-
-static int print_extension_info(zend_extension *ext, void *arg TSRMLS_DC)
-{
- php_printf("%s\n", ext->name);
- return 0;
-}
-
-static int extension_name_cmp(const zend_llist_element **f,
- const zend_llist_element **s TSRMLS_DC)
-{
- return strcmp(((zend_extension *)(*f)->data)->name,
- ((zend_extension *)(*s)->data)->name);
-}
-
-static void print_extensions(TSRMLS_D)
-{
- zend_llist sorted_exts;
-
- zend_llist_copy(&sorted_exts, &zend_extensions);
- zend_llist_sort(&sorted_exts, extension_name_cmp TSRMLS_CC);
- zend_llist_apply_with_argument(&sorted_exts, (llist_apply_with_arg_func_t) print_extension_info, NULL TSRMLS_CC);
- zend_llist_destroy(&sorted_exts);
-}
-
-#ifndef STDOUT_FILENO
-#define STDOUT_FILENO 1
-#endif
-
-static inline size_t sapi_cgibin_single_write(const char *str, uint str_length TSRMLS_DC)
-{
-#ifdef PHP_WRITE_STDOUT
- long ret;
-#else
- size_t ret;
-#endif
-
-#if PHP_FASTCGI
- if (!FCGX_IsCGI()) {
- FCGX_Request *request = (FCGX_Request *)SG(server_context);
- long ret = FCGX_PutStr( str, str_length, request->out );
- if (ret <= 0) {
- return 0;
- }
- return ret;
- }
-#endif
-#ifdef PHP_WRITE_STDOUT
- ret = write(STDOUT_FILENO, str, str_length);
- if (ret <= 0) return 0;
- return ret;
-#else
- ret = fwrite(str, 1, MIN(str_length, 16384), stdout);
- return ret;
-#endif
-}
-
-static int sapi_cgibin_ub_write(const char *str, uint str_length TSRMLS_DC)
-{
- const char *ptr = str;
- uint remaining = str_length;
- size_t ret;
-
- while (remaining > 0) {
- ret = sapi_cgibin_single_write(ptr, remaining TSRMLS_CC);
- if (!ret) {
- php_handle_aborted_connection();
- return str_length - remaining;
- }
- ptr += ret;
- remaining -= ret;
- }
-
- return str_length;
-}
-
-
-static void sapi_cgibin_flush(void *server_context)
-{
-#if PHP_FASTCGI
- if (!FCGX_IsCGI()) {
- FCGX_Request *request = (FCGX_Request *)server_context;
- if (
-#ifndef PHP_WIN32
- !parent &&
-#endif
- (!request || FCGX_FFlush(request->out) == -1)) {
- php_handle_aborted_connection();
- }
- return;
- }
-#endif
- if (fflush(stdout)==EOF) {
- php_handle_aborted_connection();
- }
-}
-
-#define SAPI_CGI_MAX_HEADER_LENGTH 1024
-
-static int sapi_cgi_send_headers(sapi_headers_struct *sapi_headers TSRMLS_DC)
-{
- char buf[SAPI_CGI_MAX_HEADER_LENGTH];
- sapi_header_struct *h;
- zend_llist_position pos;
- long rfc2616_headers = 0, nph = 0;
-
- if(SG(request_info).no_headers == 1) {
- return SAPI_HEADER_SENT_SUCCESSFULLY;
- }
- /* Check wheater to send RFC2616 style headers compatible with
- * PHP versions 4.2.3 and earlier compatible with web servers
- * such as IIS. Default is informal CGI RFC header compatible
- * with Apache.
- */
- if (cfg_get_long("cgi.rfc2616_headers", &rfc2616_headers) == FAILURE) {
- rfc2616_headers = 0;
- }
-
- if (cfg_get_long("cgi.nph", &nph) == FAILURE) {
- nph = 0;
- }
-
- if (nph || SG(sapi_headers).http_response_code != 200) {
- int len;
-
- if (rfc2616_headers && SG(sapi_headers).http_status_line) {
- len = snprintf(buf, SAPI_CGI_MAX_HEADER_LENGTH,
- "%s\r\n", SG(sapi_headers).http_status_line);
-
- if (len > SAPI_CGI_MAX_HEADER_LENGTH) {
- len = SAPI_CGI_MAX_HEADER_LENGTH;
- }
-
- } else {
- len = sprintf(buf, "Status: %d\r\n", SG(sapi_headers).http_response_code);
- }
-
- PHPWRITE_H(buf, len);
- }
-
- if (SG(sapi_headers).send_default_content_type) {
- char *hd;
-
- hd = sapi_get_default_content_type(TSRMLS_C);
- PHPWRITE_H("Content-type: ", sizeof("Content-type: ")-1);
- PHPWRITE_H(hd, strlen(hd));
- PHPWRITE_H("\r\n", 2);
- efree(hd);
- }
-
- h = zend_llist_get_first_ex(&sapi_headers->headers, &pos);
- while (h) {
- PHPWRITE_H(h->header, h->header_len);
- PHPWRITE_H("\r\n", 2);
- h = zend_llist_get_next_ex(&sapi_headers->headers, &pos);
- }
- PHPWRITE_H("\r\n", 2);
-
- return SAPI_HEADER_SENT_SUCCESSFULLY;
-}
-
-
-static int sapi_cgi_read_post(char *buffer, uint count_bytes TSRMLS_DC)
-{
- uint read_bytes=0, tmp_read_bytes;
-#if PHP_FASTCGI
- char *pos = buffer;
-#endif
-
- count_bytes = MIN(count_bytes, (uint)SG(request_info).content_length-SG(read_post_bytes));
- while (read_bytes < count_bytes) {
-#if PHP_FASTCGI
- if (!FCGX_IsCGI()) {
- FCGX_Request *request = (FCGX_Request *)SG(server_context);
- tmp_read_bytes = FCGX_GetStr( pos, count_bytes-read_bytes, request->in );
- pos += tmp_read_bytes;
- } else {
- tmp_read_bytes = read(0, buffer+read_bytes, count_bytes-read_bytes);
- }
-#else
- tmp_read_bytes = read(0, buffer+read_bytes, count_bytes-read_bytes);
-#endif
-
- if (tmp_read_bytes<=0) {
- break;
- }
- read_bytes += tmp_read_bytes;
- }
- return read_bytes;
-}
-
-static char *sapi_cgibin_getenv(char *name, size_t name_len TSRMLS_DC)
-{
-#if PHP_FASTCGI
- /* when php is started by mod_fastcgi, no regular environment
- is provided to PHP. It is always sent to PHP at the start
- of a request. So we have to do our own lookup to get env
- vars. This could probably be faster somehow. */
- if (!FCGX_IsCGI()) {
- FCGX_Request *request = (FCGX_Request *)SG(server_context);
- return FCGX_GetParam(name,request->envp);
- }
-#endif
- /* if cgi, or fastcgi and not found in fcgi env
- check the regular environment */
- return getenv(name);
-}
-
-static char *_sapi_cgibin_putenv(char *name, char *value TSRMLS_DC)
-{
- int len=0;
- char *buf = NULL;
- if (!name) {
- return NULL;
- }
- len = strlen(name) + (value?strlen(value):0) + sizeof("=") + 2;
- buf = (char *)malloc(len);
- if (buf == NULL) {
- return getenv(name);
- }
- if (value) {
- snprintf(buf,len-1,"%s=%s", name, value);
- } else {
- snprintf(buf,len-1,"%s=", name);
- }
-#if PHP_FASTCGI
- /* when php is started by mod_fastcgi, no regular environment
- is provided to PHP. It is always sent to PHP at the start
- of a request. So we have to do our own lookup to get env
- vars. This could probably be faster somehow. */
- if (!FCGX_IsCGI()) {
- FCGX_Request *request = (FCGX_Request *)SG(server_context);
- FCGX_PutEnv(request,buf);
- free(buf);
- return sapi_cgibin_getenv(name,0 TSRMLS_CC);
- }
-#endif
- /* if cgi, or fastcgi and not found in fcgi env
- check the regular environment
- this leaks, but it's only cgi anyway, we'll fix
- it for 5.0
- */
- putenv(buf);
- return getenv(name);
-}
-
-static char *sapi_cgi_read_cookies(TSRMLS_D)
-{
- return sapi_cgibin_getenv((char *)"HTTP_COOKIE",0 TSRMLS_CC);
-}
-
-#if PHP_FASTCGI
-void cgi_php_import_environment_variables(zval *array_ptr TSRMLS_DC)
-{
- if (!FCGX_IsCGI()) {
- FCGX_Request *request = (FCGX_Request *)SG(server_context);
- char **env, *p, *t;
- /* turn off magic_quotes while importing environment variables */
- int magic_quotes_gpc = PG(magic_quotes_gpc);
- PG(magic_quotes_gpc) = 0;
-
- for (env = request->envp; env != NULL && *env != NULL; env++) {
- p = strchr(*env, '=');
- if (!p) { /* malformed entry? */
- continue;
- }
- t = estrndup(*env, p - *env);
- php_register_variable(t, p+1, array_ptr TSRMLS_CC);
- efree(t);
- }
- PG(magic_quotes_gpc) = magic_quotes_gpc;
- }
- /* call php's original import as a catch-all */
- php_php_import_environment_variables(array_ptr TSRMLS_CC);
-}
-#endif
-
-static void sapi_cgi_register_variables(zval *track_vars_array TSRMLS_DC)
-{
- /* In CGI mode, we consider the environment to be a part of the server
- * variables
- */
- php_import_environment_variables(track_vars_array TSRMLS_CC);
- /* Build the special-case PHP_SELF variable for the CGI version */
- php_register_variable("PHP_SELF", (SG(request_info).request_uri ? SG(request_info).request_uri:""), track_vars_array TSRMLS_CC);
-}
-
-
-static void sapi_cgi_log_message(char *message)
-{
- fprintf(stderr, "%s\n", message);
-}
-
-static int sapi_cgi_deactivate(TSRMLS_D)
-{
- /* flush only when SAPI was started. The reasons are:
- 1. SAPI Deactivate is called from two places: module init and request shutdown
- 2. When the first call occurs and the request is not set up, flush fails on
- FastCGI.
- */
- if(SG(sapi_started)) {
- sapi_cgibin_flush(SG(server_context));
- }
- return SUCCESS;
-}
-
-static int php_cgi_startup(sapi_module_struct *sapi_module)
-{
- if (php_module_startup(sapi_module, NULL, 0) == FAILURE) {
- return FAILURE;
- }
- return SUCCESS;
-}
-
-
-/* {{{ sapi_module_struct cgi_sapi_module
- */
-static sapi_module_struct cgi_sapi_module = {
-#if PHP_FASTCGI
- "cgi-fcgi", /* name */
- "CGI/FastCGI", /* pretty name */
-#else
- "cgi", /* name */
- "CGI", /* pretty name */
-#endif
-
- php_cgi_startup, /* startup */
- php_module_shutdown_wrapper, /* shutdown */
-
- NULL, /* activate */
- sapi_cgi_deactivate, /* deactivate */
-
- sapi_cgibin_ub_write, /* unbuffered write */
- sapi_cgibin_flush, /* flush */
- NULL, /* get uid */
- sapi_cgibin_getenv, /* getenv */
-
- php_error, /* error handler */
-
- NULL, /* header handler */
- sapi_cgi_send_headers, /* send headers handler */
- NULL, /* send header handler */
-
- sapi_cgi_read_post, /* read POST data */
- sapi_cgi_read_cookies, /* read Cookies */
-
- sapi_cgi_register_variables, /* register server variables */
- sapi_cgi_log_message, /* Log message */
-
- STANDARD_SAPI_MODULE_PROPERTIES
-};
-/* }}} */
-
-/* {{{ php_cgi_usage
- */
-static void php_cgi_usage(char *argv0)
-{
- char *prog;
-
- prog = strrchr(argv0, '/');
- if (prog) {
- prog++;
- } else {
- prog = "php";
- }
-
- php_printf("Usage: %s [-q] [-h] [-s] [-v] [-i] [-f <file>]\n"
- " %s <file> [args...]\n"
- " -a Run interactively\n"
-#if PHP_FASTCGI && !defined(PHP_WIN32)
- " -b <address:port>|<port> Bind Path for external FASTCGI Server mode\n"
-#endif
- " -C Do not chdir to the script's directory\n"
- " -c <path>|<file> Look for php.ini file in this directory\n"
- " -n No php.ini file will be used\n"
- " -d foo[=bar] Define INI entry foo with value 'bar'\n"
- " -e Generate extended information for debugger/profiler\n"
- " -f <file> Parse <file>. Implies `-q'\n"
- " -h This help\n"
- " -i PHP information\n"
- " -l Syntax check only (lint)\n"
- " -m Show compiled in modules\n"
- " -q Quiet-mode. Suppress HTTP Header output.\n"
- " -s Display colour syntax highlighted source.\n"
- " -v Version number\n"
- " -w Display source with stripped comments and whitespace.\n"
- " -z <file> Load Zend extension <file>.\n",
- prog, prog);
-}
-/* }}} */
-
-/* {{{ init_request_info
-
- initializes request_info structure
-
- specificly in this section we handle proper translations
- for:
-
- PATH_INFO
- derived from the portion of the URI path following
- the script name but preceding any query data
- may be empty
-
- PATH_TRANSLATED
- derived by taking any path-info component of the
- request URI and performing any virtual-to-physical
- translation appropriate to map it onto the server's
- document repository structure
-
- empty if PATH_INFO is empty
-
- The env var PATH_TRANSLATED **IS DIFFERENT** than the
- request_info.path_translated variable, the latter should
- match SCRIPT_FILENAME instead.
-
- SCRIPT_NAME
- set to a URL path that could identify the CGI script
- rather than the interpreter. PHP_SELF is set to this.
-
- REQUEST_URI
- uri section following the domain:port part of a URI
-
- SCRIPT_FILENAME
- The virtual-to-physical translation of SCRIPT_NAME (as per
- PATH_TRANSLATED)
-
- These settings are documented at
- http://cgi-spec.golux.com/
-
-
- Based on the following URL request:
-
- http://localhost/info.php/test?a=b
-
- should produce, which btw is the same as if
- we were running under mod_cgi on apache (ie. not
- using ScriptAlias directives):
-
- PATH_INFO=/test
- PATH_TRANSLATED=/docroot/test
- SCRIPT_NAME=/info.php
- REQUEST_URI=/info.php/test?a=b
- SCRIPT_FILENAME=/docroot/info.php
- QUERY_STRING=a=b
-
- but what we get is (cgi/mod_fastcgi under apache):
-
- PATH_INFO=/info.php/test
- PATH_TRANSLATED=/docroot/info.php/test
- SCRIPT_NAME=/php/php-cgi (from the Action setting I suppose)
- REQUEST_URI=/info.php/test?a=b
- SCRIPT_FILENAME=/path/to/php/bin/php-cgi (Action setting translated)
- QUERY_STRING=a=b
-
- Comments in the code below refer to using the above URL in a request
-
- */
-static void init_request_info(TSRMLS_D)
-{
- char *env_script_filename = sapi_cgibin_getenv("SCRIPT_FILENAME",0 TSRMLS_CC);
- char *env_path_translated = sapi_cgibin_getenv("PATH_TRANSLATED",0 TSRMLS_CC);
- char *script_path_translated = env_script_filename;
-
-#if !DISCARD_PATH
- /* some broken servers do not have script_filename or argv0
- an example, IIS configured in some ways. then they do more
- broken stuff and set path_translated to the cgi script location */
- if (!script_path_translated && env_path_translated) {
- script_path_translated = env_path_translated;
- }
-#endif
-
- /* initialize the defaults */
- SG(request_info).path_translated = NULL;
- SG(request_info).request_method = NULL;
- SG(request_info).query_string = NULL;
- SG(request_info).request_uri = NULL;
- SG(request_info).content_type = NULL;
- SG(request_info).content_length = 0;
- SG(sapi_headers).http_response_code = 200;
-
- /* script_path_translated being set is a good indication that
- we are running in a cgi environment, since it is always
- null otherwise. otherwise, the filename
- of the script will be retreived later via argc/argv */
- if (script_path_translated) {
- const char *auth;
- char *content_length = sapi_cgibin_getenv("CONTENT_LENGTH",0 TSRMLS_CC);
- char *content_type = sapi_cgibin_getenv("CONTENT_TYPE",0 TSRMLS_CC);
- char *env_path_info = sapi_cgibin_getenv("PATH_INFO",0 TSRMLS_CC);
- char *env_script_name = sapi_cgibin_getenv("SCRIPT_NAME",0 TSRMLS_CC);
-#if ENABLE_PATHINFO_CHECK
- struct stat st;
- char *env_redirect_url = sapi_cgibin_getenv("REDIRECT_URL",0 TSRMLS_CC);
- char *env_document_root = sapi_cgibin_getenv("DOCUMENT_ROOT",0 TSRMLS_CC);
-
- if (fix_pathinfo) {
-
- /* save the originals first for anything we change later */
- if (env_path_translated) {
- _sapi_cgibin_putenv("ORIG_PATH_TRANSLATED",env_path_translated TSRMLS_CC);
- }
- if (env_path_info) {
- _sapi_cgibin_putenv("ORIG_PATH_INFO",env_path_info TSRMLS_CC);
- }
- if (env_script_name) {
- _sapi_cgibin_putenv("ORIG_SCRIPT_NAME",env_script_name TSRMLS_CC);
- }
- if (env_script_filename) {
- _sapi_cgibin_putenv("ORIG_SCRIPT_FILENAME",env_script_filename TSRMLS_CC);
- }
- if (!env_document_root) {
- /* ini version of document root */
- if (!env_document_root) {
- env_document_root = PG(doc_root);
- }
- /* set the document root, this makes a more
- consistent env for php scripts */
- if (env_document_root) {
- env_document_root = _sapi_cgibin_putenv("DOCUMENT_ROOT",env_document_root TSRMLS_CC);
- /* fix docroot */
- TRANSLATE_SLASHES(env_document_root);
- }
- }
-
- if (env_path_translated != NULL && env_redirect_url != NULL) {
- /*
- pretty much apache specific. If we have a redirect_url
- then our script_filename and script_name point to the
- php executable
- */
- script_path_translated = env_path_translated;
- /* we correct SCRIPT_NAME now in case we don't have PATH_INFO */
- env_script_name = _sapi_cgibin_putenv("SCRIPT_NAME",env_redirect_url TSRMLS_CC);
- }
-
-#ifdef __riscos__
- /* Convert path to unix format*/
- __riscosify_control|=__RISCOSIFY_DONT_CHECK_DIR;
- script_path_translated=__unixify(script_path_translated,0,NULL,1,0);
-#endif
-
- /*
- * if the file doesn't exist, try to extract PATH_INFO out
- * of it by stat'ing back through the '/'
- * this fixes url's like /info.php/test
- */
- if (script_path_translated && stat( script_path_translated, &st ) == -1 ) {
- char *pt = estrdup(script_path_translated);
- int len = strlen(pt);
- char *ptr;
-
- while( (ptr = strrchr(pt,'/')) || (ptr = strrchr(pt,'\\')) ) {
- *ptr = 0;
- if ( stat(pt, &st) == 0 && S_ISREG(st.st_mode) ) {
- /*
- * okay, we found the base script!
- * work out how many chars we had to strip off;
- * then we can modify PATH_INFO
- * accordingly
- *
- * we now have the makings of
- * PATH_INFO=/test
- * SCRIPT_FILENAME=/docroot/info.php
- *
- * we now need to figure out what docroot is.
- * if DOCUMENT_ROOT is set, this is easy, otherwise,
- * we have to play the game of hide and seek to figure
- * out what SCRIPT_NAME should be
- */
- int slen = len - strlen(pt);
- int pilen = strlen( env_path_info );
- char *path_info = env_path_info + pilen - slen;
-
- env_path_info = _sapi_cgibin_putenv("PATH_INFO",path_info TSRMLS_CC);
- script_path_translated = _sapi_cgibin_putenv("SCRIPT_FILENAME",pt TSRMLS_CC);
- TRANSLATE_SLASHES(pt);
-
- /* figure out docroot
- SCRIPT_FILENAME minus SCRIPT_NAME
- */
-
- if (env_document_root) {
- int l = strlen(env_document_root);
- int path_translated_len = 0;
- char *path_translated = NULL;
- if (env_document_root[l-1]=='/') {
- --l;
- }
-
- /* we have docroot, so we should have:
- * DOCUMENT_ROOT=/docroot
- * SCRIPT_FILENAME=/docroot/info.php
- *
- * SCRIPT_NAME is the portion of the path beyond docroot
- */
- env_script_name = _sapi_cgibin_putenv("SCRIPT_NAME",pt+l TSRMLS_CC);
-
- /*
- * PATH_TRANSATED = DOCUMENT_ROOT + PATH_INFO
- */
- path_translated_len = l + strlen(env_path_info) + 2;
- path_translated = (char *)emalloc(path_translated_len);
- *path_translated = 0;
- strncat(path_translated,env_document_root,l);
- strcat(path_translated,env_path_info);
- env_path_translated = _sapi_cgibin_putenv("PATH_TRANSLATED",path_translated TSRMLS_CC);
- efree(path_translated);
- } else if (env_script_name &&
- strstr(pt,env_script_name)) {
- /*
- * PATH_TRANSATED = PATH_TRANSATED - SCRIPT_NAME + PATH_INFO
- */
- int ptlen = strlen(pt)-strlen(env_script_name);
- int path_translated_len = ptlen + strlen(env_path_info) + 2;
- char *path_translated = NULL;
- path_translated = (char *)emalloc(path_translated_len);
- *path_translated = 0;
- strncat(path_translated,pt,ptlen);
- strcat(path_translated,env_path_info);
- env_path_translated = _sapi_cgibin_putenv("PATH_TRANSLATED",path_translated TSRMLS_CC);
- efree(path_translated);
- }
- break;
- }
- }
- if (!ptr) {
- /*
- * if we stripped out all the '/' and still didn't find
- * a valid path... we will fail, badly. of course we would
- * have failed anyway... we output 'no input file' now.
- */
- script_path_translated = _sapi_cgibin_putenv("SCRIPT_FILENAME",NULL TSRMLS_CC);
- SG(sapi_headers).http_response_code = 404;
- }
- if (pt) {
- efree(pt);
- }
- } else {
- /* make sure path_info/translated are empty */
- script_path_translated = _sapi_cgibin_putenv("SCRIPT_FILENAME",script_path_translated TSRMLS_CC);
- _sapi_cgibin_putenv("PATH_INFO", NULL TSRMLS_CC);
- _sapi_cgibin_putenv("PATH_TRANSLATED", NULL TSRMLS_CC);
- }
- SG(request_info).request_uri = sapi_cgibin_getenv("SCRIPT_NAME",0 TSRMLS_CC);
- } else {
-#endif
- /* pre 4.3 behaviour, shouldn't be used but provides BC */
- if (env_path_info) {
- SG(request_info).request_uri = env_path_info;
- } else {
- SG(request_info).request_uri = env_script_name;
- }
-#if !DISCARD_PATH
- if (env_path_translated)
- script_path_translated = env_path_translated;
-#endif
-#if ENABLE_PATHINFO_CHECK
- }
-#endif
- SG(request_info).request_method = sapi_cgibin_getenv("REQUEST_METHOD",0 TSRMLS_CC);
- SG(request_info).query_string = sapi_cgibin_getenv("QUERY_STRING",0 TSRMLS_CC);
- /* some server configurations allow '..' to slip through in the
- translated path. We'll just refuse to handle such a path. */
- if (script_path_translated && !strstr(script_path_translated, "..")) {
- SG(request_info).path_translated = estrdup(script_path_translated);
- }
- SG(request_info).content_type = (content_type ? content_type : "" );
- SG(request_info).content_length = (content_length?atoi(content_length):0);
-
- /* The CGI RFC allows servers to pass on unvalidated Authorization data */
- auth = sapi_cgibin_getenv("HTTP_AUTHORIZATION",0 TSRMLS_CC);
- php_handle_auth_data(auth TSRMLS_CC);
- }
-}
-/* }}} */
-
-static void define_command_line_ini_entry(char *arg)
-{
- char *name, *value;
-
- name = arg;
- value = strchr(arg, '=');
- if (value) {
- *value = 0;
- value++;
- } else {
- value = "1";
- }
- zend_alter_ini_entry(name, strlen(name)+1, value, strlen(value), PHP_INI_SYSTEM, PHP_INI_STAGE_ACTIVATE);
-}
-
-
-static void php_register_command_line_global_vars(char **arg TSRMLS_DC)
-{
- char *var, *val;
-
- var = *arg;
- val = strchr(var, '=');
- if (!val) {
- printf("No value specified for variable '%s'\n", var);
- } else {
- *val++ = '\0';
- php_register_variable(var, val, NULL TSRMLS_CC);
- }
- efree(*arg);
-}
-
-#if PHP_FASTCGI
-/**
- * Clean up child processes upon exit
- */
-void fastcgi_cleanup(int signal)
-{
-
-#ifdef DEBUG_FASTCGI
- fprintf( stderr, "FastCGI shutdown, pid %d\n", getpid() );
-#endif
-
-#ifndef PHP_WIN32
- sigaction( SIGTERM, &old_term, 0 );
-
- /* Kill all the processes in our process group */
- kill( -pgroup, SIGTERM );
-#endif
-
- /* We should exit at this point, but MacOSX doesn't seem to */
- exit( 0 );
-}
-#endif
-
-/* {{{ main
- */
-int main(int argc, char *argv[])
-{
- int exit_status = SUCCESS;
- int cgi = 0, c, i, len;
- zend_file_handle file_handle;
- int retval = FAILURE;
- char *s;
-/* temporary locals */
- int behavior=PHP_MODE_STANDARD;
- int no_headers=0;
- int orig_optind=php_optind;
- char *orig_optarg=php_optarg;
- char *script_file=NULL;
- zend_llist global_vars;
-#if FORCE_CGI_REDIRECT
- long force_redirect = 1;
- char *redirect_status_env = NULL;
-#endif
-
-/* end of temporary locals */
-#ifdef ZTS
- zend_compiler_globals *compiler_globals;
- zend_executor_globals *executor_globals;
- php_core_globals *core_globals;
- sapi_globals_struct *sapi_globals;
- void ***tsrm_ls;
-#endif
-
-#if PHP_FASTCGI
- int max_requests = 500;
- int requests = 0;
- int fastcgi = !FCGX_IsCGI();
-#ifndef PHP_WIN32
- char *bindpath = NULL;
-#endif
- int fcgi_fd = 0;
- FCGX_Request request;
-#ifdef PHP_WIN32
- int impersonate = 0;
-#else
- int status = 0;
-#endif
-#endif /* PHP_FASTCGI */
-
-#if 0 && defined(PHP_DEBUG)
- /* IIS is always making things more difficult. This allows
- us to stop PHP and attach a debugger before much gets started */
- {
- char szMessage [256];
- wsprintf (szMessage, "Please attach a debugger to the process 0x%X [%d] (%s) and click OK",
- GetCurrentProcessId(),GetCurrentProcessId(), argv[0]);
- MessageBox(NULL, szMessage, "CGI Debug Time!",
- MB_OK|MB_SERVICE_NOTIFICATION);
- }
-#endif
-
-#ifdef HAVE_SIGNAL_H
-#if defined(SIGPIPE) && defined(SIG_IGN)
- signal(SIGPIPE, SIG_IGN); /* ignore SIGPIPE in standalone mode so
- that sockets created via fsockopen()
- don't kill PHP if the remote site
- closes it. in apache|apxs mode apache
- does that for us! thies@thieso.net
- 20000419 */
-#endif
-#endif
-
-#ifdef ZTS
- tsrm_startup(1, 1, 0, NULL);
-#endif
-
- sapi_startup(&cgi_sapi_module);
-
-#ifdef PHP_WIN32
- _fmode = _O_BINARY; /*sets default for file streams to binary */
- setmode(_fileno(stdin), O_BINARY); /* make the stdio mode be binary */
- setmode(_fileno(stdout), O_BINARY); /* make the stdio mode be binary */
- setmode(_fileno(stderr), O_BINARY); /* make the stdio mode be binary */
-#endif
-
-#if PHP_FASTCGI
- if (!fastcgi) {
-#endif
- /* Make sure we detect we are a cgi - a bit redundancy here,
- but the default case is that we have to check only the first one. */
- if (getenv("SERVER_SOFTWARE")
- || getenv("SERVER_NAME")
- || getenv("GATEWAY_INTERFACE")
- || getenv("REQUEST_METHOD")) {
- cgi = 1;
- }
-#if PHP_FASTCGI
- }
-#endif
-
- while ((c=php_getopt(argc, argv, OPTIONS, &php_optarg, &php_optind, 0))!=-1) {
- switch (c) {
- case 'c':
- cgi_sapi_module.php_ini_path_override = strdup(php_optarg);
- break;
- case 'n':
- cgi_sapi_module.php_ini_ignore = 1;
- break;
-#if PHP_FASTCGI
-#ifndef PHP_WIN32
- /* if we're started on command line, check to see if
- we are being started as an 'external' fastcgi
- server by accepting a bindpath parameter. */
- case 'b':
- if (!fastcgi) {
- bindpath = strdup(php_optarg);
- }
- break;
-#endif
-#endif
- }
-
- }
- php_optind = orig_optind;
- php_optarg = orig_optarg;
-
-#ifdef ZTS
- compiler_globals = ts_resource(compiler_globals_id);
- executor_globals = ts_resource(executor_globals_id);
- core_globals = ts_resource(core_globals_id);
- sapi_globals = ts_resource(sapi_globals_id);
- tsrm_ls = ts_resource(0);
- SG(request_info).path_translated = NULL;
-#endif
-
- cgi_sapi_module.executable_location = argv[0];
-
- /* startup after we get the above ini override se we get things right */
- if (php_module_startup(&cgi_sapi_module, NULL, 0) == FAILURE) {
-#ifdef ZTS
- tsrm_shutdown();
-#endif
- return FAILURE;
- }
-
-#if FORCE_CGI_REDIRECT
- /* check force_cgi after startup, so we have proper output */
- if (cfg_get_long("cgi.force_redirect", &force_redirect) == FAILURE) {
- force_redirect = 1;
- }
- if (cgi && force_redirect) {
- if (cfg_get_string("cgi.redirect_status_env", &redirect_status_env) == FAILURE) {
- redirect_status_env = NULL;
- }
- /* Apache will generate REDIRECT_STATUS,
- * Netscape and redirect.so will generate HTTP_REDIRECT_STATUS.
- * redirect.so and installation instructions available from
- * http://www.koehntopp.de/php.
- * -- kk@netuse.de
- */
- if (!getenv("REDIRECT_STATUS")
- && !getenv ("HTTP_REDIRECT_STATUS")
- /* this is to allow a different env var to be configured
- in case some server does something different than above */
- && (!redirect_status_env || !getenv(redirect_status_env))
- ) {
- SG(sapi_headers).http_response_code = 400;
- PUTS("<b>Security Alert!</b> The PHP CGI cannot be accessed directly.\n\n\
-<p>This PHP CGI binary was compiled with force-cgi-redirect enabled. This\n\
-means that a page will only be served up if the REDIRECT_STATUS CGI variable is\n\
-set, e.g. via an Apache Action directive.</p>\n\
-<p>For more information as to <i>why</i> this behaviour exists, see the <a href=\"http://php.net/security.cgi-bin\">\
-manual page for CGI security</a>.</p>\n\
-<p>For more information about changing this behaviour or re-enabling this webserver,\n\
-consult the installation file that came with this distribution, or visit \n\
-<a href=\"http://php.net/install.windows\">the manual page</a>.</p>\n");
-
-#if defined(ZTS) && !defined(PHP_DEBUG)
- /* XXX we're crashing here in msvc6 debug builds at
- php_message_handler_for_zend:839 because
- SG(request_info).path_translated is an invalid pointer.
- It still happens even though I set it to null, so something
- weird is going on.
- */
- tsrm_shutdown();
-#endif
-
- return FAILURE;
- }
- }
-#endif /* FORCE_CGI_REDIRECT */
-
-#if ENABLE_PATHINFO_CHECK
- if (cfg_get_long("cgi.fix_pathinfo", &fix_pathinfo) == FAILURE) {
- fix_pathinfo = 1;
- }
-#endif
-
-#if PHP_FASTCGI
-#ifndef PHP_WIN32
- /* for windows, socket listening is broken in the fastcgi library itself
- so dissabling this feature on windows till time is available to fix it */
- if (bindpath) {
- /* this must be done to make FCGX_OpenSocket work correctly
- bug 23664 */
- close(0);
- /* Pass on the arg to the FastCGI library, with one exception.
- * If just a port is specified, then we prepend a ':' onto the
- * path (it's what the fastcgi library expects)
- */
-
- if (strchr(bindpath, ':') == NULL) {
- char *tmp;
-
- tmp = malloc(strlen(bindpath) + 2);
- tmp[0] = ':';
- memcpy(tmp + 1, bindpath, strlen(bindpath) + 1);
-
- fcgi_fd = FCGX_OpenSocket(tmp, 128);
- free(tmp);
- } else {
- fcgi_fd = FCGX_OpenSocket(bindpath, 128);
- }
- if( fcgi_fd < 0 ) {
- fprintf(stderr, "Couldn't create FastCGI listen socket on port %s\n", bindpath);
-#ifdef ZTS
- tsrm_shutdown();
-#endif
- return FAILURE;
- }
- fastcgi = !FCGX_IsCGI();
- }
-#endif
- if (fastcgi) {
- /* How many times to run PHP scripts before dying */
- if( getenv( "PHP_FCGI_MAX_REQUESTS" )) {
- max_requests = atoi( getenv( "PHP_FCGI_MAX_REQUESTS" ));
- if( !max_requests ) {
- fprintf( stderr,
- "PHP_FCGI_MAX_REQUESTS is not valid\n" );
- return FAILURE;
- }
- }
-
- /* make php call us to get _ENV vars */
- php_php_import_environment_variables = php_import_environment_variables;
- php_import_environment_variables = cgi_php_import_environment_variables;
-
- /* library is already initialized, now init our request */
- FCGX_Init();
- FCGX_InitRequest( &request, fcgi_fd, 0 );
-
-#ifndef PHP_WIN32
- /* Pre-fork, if required */
- if( getenv( "PHP_FCGI_CHILDREN" )) {
- children = atoi( getenv( "PHP_FCGI_CHILDREN" ));
- if( !children ) {
- fprintf( stderr,
- "PHP_FCGI_CHILDREN is not valid\n" );
- return FAILURE;
- }
- }
-
- if( children ) {
- int running = 0;
- pid_t pid;
-
- /* Create a process group for ourself & children */
- setsid();
- pgroup = getpgrp();
-#ifdef DEBUG_FASTCGI
- fprintf( stderr, "Process group %d\n", pgroup );
-#endif
-
- /* Set up handler to kill children upon exit */
- act.sa_flags = 0;
- act.sa_handler = fastcgi_cleanup;
- if( sigaction( SIGTERM, &act, &old_term ) ||
- sigaction( SIGINT, &act, &old_int ) ||
- sigaction( SIGQUIT, &act, &old_quit )) {
- perror( "Can't set signals" );
- exit( 1 );
- }
-
- while( parent ) {
- do {
-#ifdef DEBUG_FASTCGI
- fprintf( stderr, "Forking, %d running\n",
- running );
-#endif
- pid = fork();
- switch( pid ) {
- case 0:
- /* One of the children.
- * Make sure we don't go round the
- * fork loop any more
- */
- parent = 0;
-
- /* don't catch our signals */
- sigaction( SIGTERM, &old_term, 0 );
- sigaction( SIGQUIT, &old_quit, 0 );
- sigaction( SIGINT, &old_int, 0 );
- break;
- case -1:
- perror( "php (pre-forking)" );
- exit( 1 );
- break;
- default:
- /* Fine */
- running++;
- break;
- }
- } while( parent && ( running < children ));
-
- if( parent ) {
-#ifdef DEBUG_FASTCGI
- fprintf( stderr, "Wait for kids, pid %d\n",
- getpid() );
-#endif
- wait( &status );
- running--;
- }
- }
- }
-
-#endif /* WIN32 */
- }
-#endif /* FASTCGI */
-
- zend_first_try {
- while ((c=php_getopt(argc, argv, OPTIONS, &php_optarg, &php_optind, 1))!=-1) {
- switch (c) {
- case 'h':
- case '?':
- no_headers = 1;
- php_output_startup();
- php_output_activate(TSRMLS_C);
- SG(headers_sent) = 1;
- php_cgi_usage(argv[0]);
- php_end_ob_buffers(1 TSRMLS_CC);
- exit(1);
- break;
- }
- }
- php_optind = orig_optind;
- php_optarg = orig_optarg;
-
-#if PHP_FASTCGI
- /* start of FAST CGI loop */
- /* Initialise FastCGI request structure */
-
-#ifdef PHP_WIN32
- /* attempt to set security impersonation for fastcgi
- will only happen on NT based OS, others will ignore it. */
- if (fastcgi) {
- if (cfg_get_long("fastcgi.impersonate", &impersonate) == FAILURE) {
- impersonate = 0;
- }
- if (impersonate) OS_SetImpersonate();
- }
-#endif
-
- while (!fastcgi
- || FCGX_Accept_r( &request ) >= 0) {
-#endif
-
-#if PHP_FASTCGI
- SG(server_context) = (void *) &request;
-#else
- SG(server_context) = (void *) 1; /* avoid server_context==NULL checks */
-#endif
-
- init_request_info(TSRMLS_C);
-
- zend_llist_init(&global_vars, sizeof(char *), NULL, 0);
-
- CG(interactive) = 0;
-
- if (!cgi
-#if PHP_FASTCGI
- && !fastcgi
-#endif
- ) {
-
- if (cgi_sapi_module.php_ini_path_override && cgi_sapi_module.php_ini_ignore) {
- no_headers = 1;
- php_output_startup();
- php_output_activate(TSRMLS_C);
- SG(headers_sent) = 1;
- php_printf("You cannot use both -n and -c switch. Use -h for help.\n");
- php_end_ob_buffers(1 TSRMLS_CC);
- exit(1);
- }
-
- while ((c = php_getopt(argc, argv, OPTIONS, &php_optarg, &php_optind, 0)) != -1) {
- switch (c) {
-
- case 'a': /* interactive mode */
- printf("Interactive mode enabled\n\n");
- CG(interactive) = 1;
- break;
-
- case 'C': /* don't chdir to the script directory */
- SG(options) |= SAPI_OPTION_NO_CHDIR;
- break;
- case 'd': /* define ini entries on command line */
- define_command_line_ini_entry(php_optarg);
- break;
-
- case 'e': /* enable extended info output */
- CG(extended_info) = 1;
- break;
-
- case 'f': /* parse file */
- script_file = estrdup(php_optarg);
- no_headers = 1;
- /* arguments after the file are considered script args */
- SG(request_info).argc = argc - (php_optind-1);
- SG(request_info).argv = &argv[php_optind-1];
- break;
-
- case 'g': /* define global variables on command line */
- {
- char *arg = estrdup(php_optarg);
-
- zend_llist_add_element(&global_vars, &arg);
- }
- break;
-
- case 'i': /* php info & quit */
- if (php_request_startup(TSRMLS_C) == FAILURE) {
- php_module_shutdown(TSRMLS_C);
- return FAILURE;
- }
- if (no_headers) {
- SG(headers_sent) = 1;
- SG(request_info).no_headers = 1;
- }
- php_print_info(0xFFFFFFFF TSRMLS_CC);
- php_end_ob_buffers(1 TSRMLS_CC);
- exit(1);
- break;
-
- case 'l': /* syntax check mode */
- no_headers = 1;
- behavior=PHP_MODE_LINT;
- break;
-
- case 'm': /* list compiled in modules */
- php_output_startup();
- php_output_activate(TSRMLS_C);
- SG(headers_sent) = 1;
- php_printf("[PHP Modules]\n");
- print_modules(TSRMLS_C);
- php_printf("\n[Zend Modules]\n");
- print_extensions(TSRMLS_C);
- php_printf("\n");
- php_end_ob_buffers(1 TSRMLS_CC);
- exit(1);
- break;
-
-#if 0 /* not yet operational, see also below ... */
- case '': /* generate indented source mode*/
- behavior=PHP_MODE_INDENT;
- break;
-#endif
-
- case 'q': /* do not generate HTTP headers */
- no_headers = 1;
- break;
-
- case 's': /* generate highlighted HTML from source */
- behavior=PHP_MODE_HIGHLIGHT;
- break;
-
- case 'v': /* show php version & quit */
- no_headers = 1;
- if (php_request_startup(TSRMLS_C) == FAILURE) {
- php_module_shutdown(TSRMLS_C);
- return FAILURE;
- }
- if (no_headers) {
- SG(headers_sent) = 1;
- SG(request_info).no_headers = 1;
- }
-#if ZEND_DEBUG
- php_printf("PHP %s (%s) (built: %s %s) (DEBUG)\nCopyright (c) 1997-2004 The PHP Group\n%s", PHP_VERSION, sapi_module.name, __DATE__, __TIME__, get_zend_version());
-#else
- php_printf("PHP %s (%s) (built: %s %s)\nCopyright (c) 1997-2004 The PHP Group\n%s", PHP_VERSION, sapi_module.name, __DATE__, __TIME__, get_zend_version());
-#endif
- php_end_ob_buffers(1 TSRMLS_CC);
- exit(1);
- break;
-
- case 'w':
- behavior=PHP_MODE_STRIP;
- break;
-
- case 'z': /* load extension file */
- zend_load_extension(php_optarg);
- break;
-
- default:
- break;
- }
- }
-
- if (script_file) {
- /* override path_translated if -f on command line */
- SG(request_info).path_translated = script_file;
- }
-
- if (no_headers) {
- SG(headers_sent) = 1;
- SG(request_info).no_headers = 1;
- }
-
- if (!SG(request_info).path_translated && argc > php_optind) {
- /* arguments after the file are considered script args */
- SG(request_info).argc = argc - php_optind;
- SG(request_info).argv = &argv[php_optind];
- /* file is on command line, but not in -f opt */
- SG(request_info).path_translated = estrdup(argv[php_optind++]);
- }
-
- /* all remaining arguments are part of the query string
- this section of code concatenates all remaining arguments
- into a single string, seperating args with a &
- this allows command lines like:
-
- test.php v1=test v2=hello+world!
- test.php "v1=test&v2=hello world!"
- test.php v1=test "v2=hello world!"
- */
- if (!SG(request_info).query_string && argc > php_optind) {
- len = 0;
- for (i = php_optind; i < argc; i++) {
- len += strlen(argv[i]) + 1;
- }
-
- s = malloc(len + 1); /* leak - but only for command line version, so ok */
- *s = '\0'; /* we are pretending it came from the environment */
- for (i = php_optind, len = 0; i < argc; i++) {
- strcat(s, argv[i]);
- if (i < (argc - 1)) {
- strcat(s, PG(arg_separator).input);
- }
- }
- SG(request_info).query_string = s;
- }
- } /* end !cgi && !fastcgi */
-
- /*
- we never take stdin if we're (f)cgi, always
- rely on the web server giving us the info
- we need in the environment.
- */
- if (SG(request_info).path_translated || cgi
-#if PHP_FASTCGI
- || fastcgi
-#endif
- )
- {
- file_handle.type = ZEND_HANDLE_FILENAME;
- file_handle.filename = SG(request_info).path_translated;
- file_handle.handle.fp = NULL;
- } else {
- file_handle.filename = "-";
- file_handle.type = ZEND_HANDLE_FP;
- file_handle.handle.fp = stdin;
- }
-
- file_handle.opened_path = NULL;
- file_handle.free_filename = 0;
-
- /* request startup only after we've done all we can to
- get path_translated */
- if (php_request_startup(TSRMLS_C)==FAILURE) {
-#if PHP_FASTCGI
- if (fastcgi) {
- FCGX_Finish_r(&request);
- }
-#endif
- php_module_shutdown(TSRMLS_C);
- return FAILURE;
- }
- if (no_headers) {
- SG(headers_sent) = 1;
- SG(request_info).no_headers = 1;
- }
-
- /* This actually destructs the elements of the list - ugly hack */
- zend_llist_apply(&global_vars, (llist_apply_func_t) php_register_command_line_global_vars TSRMLS_CC);
- zend_llist_destroy(&global_vars);
-
- /*
- at this point path_translated will be set if:
- 1. we are running from shell and got filename was there
- 2. we are running as cgi or fastcgi
- */
- if (cgi || SG(request_info).path_translated) {
- retval = php_fopen_primary_script(&file_handle TSRMLS_CC);
- }
- /*
- if we are unable to open path_translated and we are not
- running from shell (so fp == NULL), then fail.
- */
- if (retval == FAILURE && file_handle.handle.fp == NULL) {
- SG(sapi_headers).http_response_code = 404;
- PUTS("No input file specified.\n");
-#if PHP_FASTCGI
- /* we want to serve more requests if this is fastcgi
- so cleanup and continue, request shutdown is
- handled later */
- if (fastcgi) {
- goto fastcgi_request_done;
- }
-#endif
- php_request_shutdown((void *) 0);
- php_module_shutdown(TSRMLS_C);
- return FAILURE;
- }
-
- if (file_handle.handle.fp && (file_handle.handle.fp != stdin)) {
- /* #!php support */
- c = fgetc(file_handle.handle.fp);
- if (c == '#') {
- while (c != 10 && c != 13) {
- c = fgetc(file_handle.handle.fp); /* skip to end of line */
- }
- /* handle situations where line is terminated by \r\n */
- if (c == 13) {
- if (fgetc(file_handle.handle.fp) != 10) {
- long pos = ftell(file_handle.handle.fp);
- fseek(file_handle.handle.fp, pos - 1, SEEK_SET);
- }
- }
- CG(start_lineno) = 2;
- } else {
- rewind(file_handle.handle.fp);
- }
- }
-
- switch (behavior) {
- case PHP_MODE_STANDARD:
- php_execute_script(&file_handle TSRMLS_CC);
- break;
- case PHP_MODE_LINT:
- PG(during_request_startup) = 0;
- exit_status = php_lint_script(&file_handle TSRMLS_CC);
- if (exit_status == SUCCESS) {
- zend_printf("No syntax errors detected in %s\n", file_handle.filename);
- } else {
- zend_printf("Errors parsing %s\n", file_handle.filename);
- }
- break;
- case PHP_MODE_STRIP:
- if (open_file_for_scanning(&file_handle TSRMLS_CC) == SUCCESS) {
- zend_strip(TSRMLS_C);
- fclose(file_handle.handle.fp);
- php_end_ob_buffers(1 TSRMLS_CC);
- }
- return SUCCESS;
- break;
- case PHP_MODE_HIGHLIGHT:
- {
- zend_syntax_highlighter_ini syntax_highlighter_ini;
-
- if (open_file_for_scanning(&file_handle TSRMLS_CC) == SUCCESS) {
- php_get_highlight_struct(&syntax_highlighter_ini);
- zend_highlight(&syntax_highlighter_ini TSRMLS_CC);
- fclose(file_handle.handle.fp);
- php_end_ob_buffers(1 TSRMLS_CC);
- }
- return SUCCESS;
- }
- break;
-#if 0
- /* Zeev might want to do something with this one day */
- case PHP_MODE_INDENT:
- open_file_for_scanning(&file_handle TSRMLS_CC);
- zend_indent();
- fclose(file_handle.handle.fp);
- return SUCCESS;
- break;
-#endif
- }
-
-#if PHP_FASTCGI
-fastcgi_request_done:
-#endif
- {
- char *path_translated;
-
- /* Go through this trouble so that the memory manager doesn't warn
- * about SG(request_info).path_translated leaking
- */
- if (SG(request_info).path_translated) {
- path_translated = strdup(SG(request_info).path_translated);
- STR_FREE(SG(request_info).path_translated);
- SG(request_info).path_translated = path_translated;
- }
-
- php_request_shutdown((void *) 0);
- if (exit_status == 0) {
- exit_status = EG(exit_status);
- }
-
- if (SG(request_info).path_translated) {
- free(SG(request_info).path_translated);
- SG(request_info).path_translated = NULL;
- }
- }
-
-#if PHP_FASTCGI
- if (!fastcgi) break;
- /* only fastcgi will get here */
- requests++;
- if(max_requests && (requests == max_requests)) {
- FCGX_Finish_r(&request);
-#ifndef PHP_WIN32
- if (bindpath) {
- free(bindpath);
- }
-#endif
- break;
- }
- /* end of fastcgi loop */
- }
-#endif
-
- if (cgi_sapi_module.php_ini_path_override) {
- free(cgi_sapi_module.php_ini_path_override);
- }
- } zend_catch {
- exit_status = 255;
- } zend_end_try();
-
- php_module_shutdown(TSRMLS_C);
- sapi_shutdown();
-
-#ifdef ZTS
- /*tsrm_shutdown();*/
-#endif
-
-#if PHP_WIN32 && ZEND_DEBUG && 0
- _CrtDumpMemoryLeaks( );
-#endif
-
- return exit_status;
-}
-/* }}} */
-
-/*
- * 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/sapi/cgi/config.w32 b/sapi/cgi/config.w32
deleted file mode 100644
index 5ef51ccd29..0000000000
--- a/sapi/cgi/config.w32
+++ /dev/null
@@ -1,25 +0,0 @@
-// vim:ft=javascript
-// $Id$
-
-ARG_ENABLE('cgi', 'Build CGI version of PHP', 'yes');
-ARG_ENABLE('fastcgi', 'Build FastCGI support into CGI binary', 'yes');
-ARG_ENABLE('path-info-check',
- 'If this is disabled, paths such as /info.php/test?a=b will fail to work', 'yes');
-
-ARG_ENABLE("force-cgi-redirect", "Enable the security check for internal \
-server redirects. You should use this if you are running the CGI \
-version with Apache.", "yes");
-
-AC_DEFINE("FORCE_CGI_REDIRECT", PHP_FORCE_CGI_REDIRECT == "yes" ? 1 : 0, "CGI redirect mode");
-AC_DEFINE("ENABLE_PATHINFO_CHECK", PHP_PATH_INFO_CHECK == "yes" ? 1 : 0, "Pathinfo check");
-
-if (PHP_CGI == "yes") {
- AC_DEFINE('PHP_FASTCGI', PHP_FASTCGI == "yes" ? 1 : 0);
- if (PHP_FASTCGI == "yes") {
- SAPI('cgi', 'cgi_main.c getopt.c', 'php-cgi.exe', '/I sapi/cgi/libfcgi/include /D FCGI_STATIC');
- ADD_SOURCES('sapi/cgi/libfcgi', 'fcgi_stdio.c fcgiapp.c os_win32.c', 'cgi');
- ADD_FLAG('LIBS_CGI', 'ws2_32.lib kernel32.lib advapi32.lib');
- } else {
- SAPI('cgi', 'cgi_main.c getopt.c', 'php-cgi.exe');
- }
-}
diff --git a/sapi/cgi/config9.m4 b/sapi/cgi/config9.m4
deleted file mode 100644
index 402cb0b90c..0000000000
--- a/sapi/cgi/config9.m4
+++ /dev/null
@@ -1,172 +0,0 @@
-dnl
-dnl $Id$
-dnl
-
-AC_ARG_ENABLE(cgi,
-[ --disable-cgi Disable building CGI version of PHP],
-[
- PHP_SAPI_CGI=$enableval
-],[
- PHP_SAPI_CGI=yes
-])
-
-AC_ARG_ENABLE(force-cgi-redirect,
-[ --enable-force-cgi-redirect
- Enable the security check for internal server
- redirects. You should use this if you are
- running the CGI version with Apache.],
-[
- PHP_FORCE_CGI_REDIRECT=$enableval
-],[
- PHP_FORCE_CGI_REDIRECT=no
-])
-
-AC_ARG_ENABLE(discard-path,
-[ --enable-discard-path If this is enabled, the PHP CGI binary
- can safely be placed outside of the
- web tree and people will not be able
- to circumvent .htaccess security.],
-[
- PHP_DISCARD_PATH=$enableval
-],[
- PHP_DISCARD_PATH=no
-])
-
-AC_ARG_ENABLE(fastcgi,
-[ --enable-fastcgi If this is enabled, the cgi module will
- be built with support for fastcgi also.],
-[
- PHP_ENABLE_FASTCGI=$enableval
-],[
- PHP_ENABLE_FASTCGI=no
-])
-
-AC_ARG_ENABLE(path-info-check,
-[ --disable-path-info-check
- If this is disabled, paths such as
- /info.php/test?a=b will fail to work.],
-[
- PHP_ENABLE_PATHINFO_CHECK=$enableval
-],[
- PHP_ENABLE_PATHINFO_CHECK=yes
-])
-
-AC_DEFUN(PHP_TEST_WRITE_STDOUT,[
- AC_CACHE_CHECK(whether writing to stdout works,ac_cv_write_stdout,[
- AC_TRY_RUN([
-#ifdef HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-
-#define TEXT "This is the test message -- "
-
-main()
-{
- int n;
-
- n = write(1, TEXT, sizeof(TEXT)-1);
- return (!(n == sizeof(TEXT)-1));
-}
- ],[
- ac_cv_write_stdout=yes
- ],[
- ac_cv_write_stdout=no
- ],[
- ac_cv_write_stdout=no
- ])
- ])
- if test "$ac_cv_write_stdout" = "yes"; then
- AC_DEFINE(PHP_WRITE_STDOUT, 1, [whether write(2) works])
- fi
-])
-
-
-if test "$PHP_SAPI" = "default"; then
- AC_MSG_CHECKING(for CGI build)
- if test "$PHP_SAPI_CGI" != "no"; then
- AC_MSG_RESULT(yes)
-
- PHP_ADD_MAKEFILE_FRAGMENT($abs_srcdir/sapi/cgi/Makefile.frag)
- case $host_alias in
- *cygwin* )
- SAPI_CGI_PATH=sapi/cgi/php.exe
- ;;
- * )
- SAPI_CGI_PATH=sapi/cgi/php
- ;;
- esac
- PHP_SUBST(SAPI_CGI_PATH)
-
- PHP_TEST_WRITE_STDOUT
-
- AC_MSG_CHECKING(whether to force Apache CGI redirect)
- if test "$PHP_FORCE_CGI_REDIRECT" = "yes"; then
- REDIRECT=1
- else
- REDIRECT=0
- fi
- AC_DEFINE_UNQUOTED(FORCE_CGI_REDIRECT,$REDIRECT,[ ])
- AC_MSG_RESULT($PHP_FORCE_CGI_REDIRECT)
-
-
- AC_MSG_CHECKING(whether to discard path_info + path_translated)
- if test "$PHP_DISCARD_PATH" = "yes"; then
- DISCARD_PATH=1
- else
- DISCARD_PATH=0
- fi
- AC_DEFINE_UNQUOTED(DISCARD_PATH, $DISCARD_PATH, [ ])
- AC_MSG_RESULT($PHP_DISCARD_PATH)
-
- AC_MSG_CHECKING(whether to enable path info checking)
- if test "$PHP_ENABLE_PATHINFO_CHECK" = "yes"; then
- ENABLE_PATHINFO_CHECK=1
- else
- ENABLE_PATHINFO_CHECK=0
- fi
- AC_DEFINE_UNQUOTED(ENABLE_PATHINFO_CHECK, $ENABLE_PATHINFO_CHECK, [ ])
- AC_MSG_RESULT($PHP_ENABLE_PATHINFO_CHECK)
-
- AC_MSG_CHECKING(whether to enable fastcgi support)
- PHP_LIBFCGI_DIR="$abs_srcdir/sapi/cgi/libfcgi"
- if test -z $PHP_LIBFCGI_DIR; then
- echo "$PHP_LIBFCGI_DIR does not exist"
- exit 1
- fi
- if test "$PHP_ENABLE_FASTCGI" = "yes"; then
- PHP_FASTCGI=1
- PHP_FCGI_FILES="libfcgi/fcgi_stdio.c libfcgi/fcgiapp.c libfcgi/os_unix.c"
- PHP_FCGI_INCLUDE="-I$PHP_LIBFCGI_DIR/include"
- PHP_FCGI_STATIC=1
- else
- PHP_FASTCGI=0
- PHP_FCGI_FILES=""
- PHP_FCGI_INCLUDE=""
- PHP_FCGI_STATIC=0
- fi
- AC_DEFINE_UNQUOTED(PHP_FASTCGI, $PHP_FASTCGI, [ ])
- AC_DEFINE_UNQUOTED(PHP_FCGI_STATIC, $PHP_FCGI_STATIC, [ ])
- AC_MSG_RESULT($PHP_ENABLE_FASTCGI)
-
- INSTALL_IT="@echo \"Installing PHP CGI into: \$(INSTALL_ROOT)\$(bindir)/\"; \$(INSTALL) -m 0755 \$(SAPI_CGI_PATH) \$(INSTALL_ROOT)\$(bindir)/\$(program_prefix)php\$(program_suffix)"
- PHP_SELECT_SAPI(cgi, program, $PHP_FCGI_FILES cgi_main.c getopt.c, $PHP_FCGI_INCLUDE, '$(SAPI_CGI_PATH)')
-
- case $host_alias in
- *darwin*)
- BUILD_CGI="\$(CC) \$(CFLAGS_CLEAN) \$(EXTRA_CFLAGS) \$(EXTRA_LDFLAGS_PROGRAM) \$(LDFLAGS) \$(NATIVE_RPATHS) \$(PHP_GLOBAL_OBJS:.lo=.o) \$(PHP_SAPI_OBJS:.lo=.o) \$(PHP_FRAMEWORKS) \$(EXTRA_LIBS) \$(ZEND_EXTRA_LIBS) -o \$(SAPI_CGI_PATH)"
- ;;
- *)
- BUILD_CGI="\$(LIBTOOL) --mode=link \$(CC) -export-dynamic \$(CFLAGS_CLEAN) \$(EXTRA_CFLAGS) \$(EXTRA_LDFLAGS_PROGRAM) \$(LDFLAGS) \$(PHP_RPATHS) \$(PHP_GLOBAL_OBJS) \$(PHP_SAPI_OBJS) \$(EXTRA_LIBS) \$(ZEND_EXTRA_LIBS) -o \$(SAPI_CGI_PATH)"
- ;;
- esac
-
- PHP_SUBST(BUILD_CGI)
-
- elif test "$PHP_SAPI_CLI" != "no"; then
- AC_MSG_RESULT(no)
- OVERALL_TARGET=
- PHP_SAPI=cli
- else
- AC_MSG_ERROR([No SAPIs selected.])
- fi
-fi
diff --git a/sapi/cgi/getopt.c b/sapi/cgi/getopt.c
deleted file mode 100644
index fb9091a6cc..0000000000
--- a/sapi/cgi/getopt.c
+++ /dev/null
@@ -1,154 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Marcus Boerger <helly@php.net> |
- +----------------------------------------------------------------------+
-*/
-
-#include <stdio.h>
-#include <string.h>
-#include <assert.h>
-#include <stdlib.h>
-#include "php_getopt.h"
-#define OPTERRCOLON (1)
-#define OPTERRNF (2)
-#define OPTERRARG (3)
-
-
-static int php_opt_error(int argc, char * const *argv, int oint, int optchr, int err, int show_err)
-{
- if (show_err)
- {
- fprintf(stderr, "Error in argument %d, char %d: ", oint, optchr+1);
- switch(err)
- {
- case OPTERRCOLON:
- fprintf(stderr, ": in flags\n");
- break;
- case OPTERRNF:
- fprintf(stderr, "option not found %c\n", argv[oint][optchr]);
- break;
- case OPTERRARG:
- fprintf(stderr, "no argument for option %c\n", argv[oint][optchr]);
- break;
- default:
- fprintf(stderr, "unknown\n");
- break;
- }
- }
- return('?');
-}
-
-int php_getopt(int argc, char* const *argv, const opt_struct opts[], char **optarg, int *optind, int show_err)
-{
- static int optchr = 0;
- static int dash = 0; /* have already seen the - */
- int arg_start = 2;
-
- int opts_idx = -1;
-
- if (*optind >= argc) {
- return(EOF);
- }
- if (!dash) {
- if ((argv[*optind][0] != '-')) {
- return(EOF);
- } else {
- if (!argv[*optind][1])
- {
- /*
- * use to specify stdin. Need to let pgm process this and
- * the following args
- */
- return(EOF);
- }
- }
- }
- if ((argv[*optind][0] == '-') && (argv[*optind][1] == '-')) {
- /* '--' indicates end of args if not followed by a known long option name */
- while (1) {
- opts_idx++;
- if (opts[opts_idx].opt_char == '-') {
- (*optind)++;
- return(EOF);
- } else if (opts[opts_idx].opt_name && !strcmp(&argv[*optind][2], opts[opts_idx].opt_name)) {
- break;
- }
- }
- optchr = 0;
- dash = 1;
- arg_start = 2 + strlen(opts[opts_idx].opt_name);
- }
- if (!dash) {
- dash = 1;
- optchr = 1;
- }
-
- /* Check if the guy tries to do a -: kind of flag */
- if (argv[*optind][optchr] == ':') {
- dash = 0;
- (*optind)++;
- return (php_opt_error(argc, argv, *optind-1, optchr, OPTERRCOLON, show_err));
- }
- if (opts_idx < 0) {
- while (1) {
- opts_idx++;
- if (opts[opts_idx].opt_char == '-') {
- int errind = *optind;
- int errchr = optchr;
-
- if (!argv[*optind][optchr+1]) {
- dash = 0;
- (*optind)++;
- } else {
- optchr++;
- }
- return(php_opt_error(argc, argv, errind, errchr, OPTERRNF, show_err));
- } else if (argv[*optind][optchr] == opts[opts_idx].opt_char) {
- break;
- }
- }
- }
- if (opts[opts_idx].need_param) {
- /* Check for cases where the value of the argument
- is in the form -<arg> <val> or in the form -<arg><val> */
- dash = 0;
- if(!argv[*optind][arg_start]) {
- (*optind)++;
- if (*optind == argc) {
- return(php_opt_error(argc, argv, *optind-1, optchr, OPTERRARG, show_err));
- }
- *optarg = argv[(*optind)++];
- } else {
- *optarg = &argv[*optind][arg_start];
- (*optind)++;
- }
- return opts[opts_idx].opt_char;
- } else {
- if (arg_start == 2) {
- if (!argv[*optind][optchr+1])
- {
- dash = 0;
- (*optind)++;
- } else {
- optchr++;
- }
- } else {
- (*optind)++;
- }
- return opts[opts_idx].opt_char;
- }
- assert(0);
- return(0); /* never reached */
-}
diff --git a/sapi/cgi/libfcgi/LICENSE.TERMS b/sapi/cgi/libfcgi/LICENSE.TERMS
deleted file mode 100644
index 7e6bdfded7..0000000000
--- a/sapi/cgi/libfcgi/LICENSE.TERMS
+++ /dev/null
@@ -1,28 +0,0 @@
-This FastCGI application library source and object code (the
-"Software") and its documentation (the "Documentation") are
-copyrighted by Open Market, Inc ("Open Market"). The following terms
-apply to all files associated with the Software and Documentation
-unless explicitly disclaimed in individual files.
-
-Open Market permits you to use, copy, modify, distribute, and license
-this Software and the Documentation for any purpose, provided that
-existing copyright notices are retained in all copies and that this
-notice is included verbatim in any distributions. No written
-agreement, license, or royalty fee is required for any of the
-authorized uses. Modifications to this Software and Documentation may
-be copyrighted by their authors and need not follow the licensing
-terms described here. If modifications to this Software and
-Documentation have new licensing terms, the new terms must be clearly
-indicated on the first page of each file where they apply.
-
-OPEN MARKET MAKES NO EXPRESS OR IMPLIED WARRANTY WITH RESPECT TO THE
-SOFTWARE OR THE DOCUMENTATION, INCLUDING WITHOUT LIMITATION ANY
-WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. IN
-NO EVENT SHALL OPEN MARKET BE LIABLE TO YOU OR ANY THIRD PARTY FOR ANY
-DAMAGES ARISING FROM OR RELATING TO THIS SOFTWARE OR THE
-DOCUMENTATION, INCLUDING, WITHOUT LIMITATION, ANY INDIRECT, SPECIAL OR
-CONSEQUENTIAL DAMAGES OR SIMILAR DAMAGES, INCLUDING LOST PROFITS OR
-LOST DATA, EVEN IF OPEN MARKET HAS BEEN ADVISED OF THE POSSIBILITY OF
-SUCH DAMAGES. THE SOFTWARE AND DOCUMENTATION ARE PROVIDED "AS IS".
-OPEN MARKET HAS NO LIABILITY IN CONTRACT, TORT, NEGLIGENCE OR
-OTHERWISE ARISING OUT OF THIS SOFTWARE OR THE DOCUMENTATION.
diff --git a/sapi/cgi/libfcgi/acinclude.m4 b/sapi/cgi/libfcgi/acinclude.m4
deleted file mode 100644
index 20f02d8339..0000000000
--- a/sapi/cgi/libfcgi/acinclude.m4
+++ /dev/null
@@ -1,389 +0,0 @@
-dnl $Id$
-
-AC_DEFUN(FCGI_COMMON_CHECKS, [
- AC_MSG_CHECKING([for sun_len in sys/un.h])
- AC_EGREP_HEADER([sun_len], [sys/un.h],
- [AC_MSG_RESULT([yes])
- AC_DEFINE([HAVE_SOCKADDR_UN_SUN_LEN], [1],
- [Define if sockaddr_un in sys/un.h contains a sun_len component])],
- AC_MSG_RESULT([no]))
-
- AC_MSG_CHECKING([for fpos_t in stdio.h])
- AC_EGREP_HEADER([fpos_t], [stdio.h],
- [AC_MSG_RESULT([yes])
- AC_DEFINE([HAVE_FPOS], [1],
- [Define if the fpos_t typedef is in stdio.h])],
- AC_MSG_RESULT([no]))
-
- AC_CHECK_HEADERS([sys/socket.h netdb.h netinet/in.h arpa/inet.h])
- AC_CHECK_HEADERS([sys/time.h limits.h sys/param.h unistd.h])
-
- AC_MSG_CHECKING([for a fileno() prototype in stdio.h])
- AC_EGREP_HEADER([fileno], [stdio.h],
- [AC_MSG_RESULT([yes])
- AC_DEFINE([HAVE_FILENO_PROTO], [1],
- [Define if there's a fileno() prototype in stdio.h])],
- AC_MSG_RESULT([no]))
-
- if test "$HAVE_SYS_SOCKET_H"; then
- AC_MSG_CHECKING([for socklen_t in sys/socket.h])
- AC_EGREP_HEADER([socklen_t], [sys/socket.h],
- [AC_MSG_RESULT([yes])
- AC_DEFINE([HAVE_SOCKLEN], [1],
- [Define if the socklen_t typedef is in sys/socket.h])],
- AC_MSG_RESULT([no]))
- fi
-
- #--------------------------------------------------------------------
- # Do we need cross-process locking on this platform?
- #--------------------------------------------------------------------
- AC_MSG_CHECKING([whether cross-process locking is required by accept()])
- case "`uname -sr`" in
- IRIX\ 5.* | SunOS\ 5.* | UNIX_System_V\ 4.0)
- AC_MSG_RESULT([yes])
- AC_DEFINE([USE_LOCKING], [1],
- [Define if cross-process locking is required by accept()])
- ;;
- *)
- AC_MSG_RESULT([no])
- ;;
- esac
-
- #--------------------------------------------------------------------
- # Does va_arg(arg, long double) crash the compiler?
- # hpux 9.04 compiler does and so does Stratus FTX (uses HP's compiler)
- #--------------------------------------------------------------------
- AC_MSG_CHECKING([whether va_arg(arg, long double) crashes the compiler])
- AC_TRY_COMPILE([#include <stdarg.h>],
- [long double lDblArg; va_list arg; lDblArg = va_arg(arg, long double);],
- AC_MSG_RESULT([no]),
- [AC_MSG_RESULT([yes])
- AC_DEFINE([HAVE_VA_ARG_LONG_DOUBLE_BUG], [1],
- [Define if va_arg(arg, long double) crashes the compiler])])
-
- AC_C_CONST
-])
-
-
-dnl @synopsis ACX_PTHREAD([ACTION-IF-FOUND[, ACTION-IF-NOT-FOUND]])
-dnl
-dnl This macro figures out how to build C programs using POSIX
-dnl threads. It sets the PTHREAD_LIBS output variable to the threads
-dnl library and linker flags, and the PTHREAD_CFLAGS output variable
-dnl to any special C compiler flags that are needed. (The user can also
-dnl force certain compiler flags/libs to be tested by setting these
-dnl environment variables.)
-dnl
-dnl Also sets PTHREAD_CC to any special C compiler that is needed for
-dnl multi-threaded programs (defaults to the value of CC otherwise).
-dnl (This is necessary on AIX to use the special cc_r compiler alias.)
-dnl
-dnl If you are only building threads programs, you may wish to
-dnl use these variables in your default LIBS, CFLAGS, and CC:
-dnl
-dnl LIBS="$PTHREAD_LIBS $LIBS"
-dnl CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
-dnl CC="$PTHREAD_CC"
-dnl
-dnl In addition, if the PTHREAD_CREATE_JOINABLE thread-attribute
-dnl constant has a nonstandard name, defines PTHREAD_CREATE_JOINABLE
-dnl to that name (e.g. PTHREAD_CREATE_UNDETACHED on AIX).
-dnl
-dnl ACTION-IF-FOUND is a list of shell commands to run if a threads
-dnl library is found, and ACTION-IF-NOT-FOUND is a list of commands
-dnl to run it if it is not found. If ACTION-IF-FOUND is not specified,
-dnl the default action will define HAVE_PTHREAD.
-dnl
-dnl Please let the authors know if this macro fails on any platform,
-dnl or if you have any other suggestions or comments. This macro was
-dnl based on work by SGJ on autoconf scripts for FFTW (www.fftw.org)
-dnl (with help from M. Frigo), as well as ac_pthread and hb_pthread
-dnl macros posted by AFC to the autoconf macro repository. We are also
-dnl grateful for the helpful feedback of numerous users.
-dnl
-dnl @version $Id$
-dnl @author Steven G. Johnson <stevenj@alum.mit.edu> and Alejandro Forero Cuervo <bachue@bachue.com>
-
-AC_DEFUN([ACX_PTHREAD], [
-AC_REQUIRE([AC_CANONICAL_HOST])
-acx_pthread_ok=no
-
-# First, check if the POSIX threads header, pthread.h, is available.
-# If it isn't, don't bother looking for the threads libraries.
-AC_CHECK_HEADER(pthread.h, , acx_pthread_ok=noheader)
-
-# We must check for the threads library under a number of different
-# names; the ordering is very important because some systems
-# (e.g. DEC) have both -lpthread and -lpthreads, where one of the
-# libraries is broken (non-POSIX).
-
-# First of all, check if the user has set any of the PTHREAD_LIBS,
-# etcetera environment variables, and if threads linking works using
-# them:
-if test x"$PTHREAD_LIBS$PTHREAD_CFLAGS" != x; then
- save_CFLAGS="$CFLAGS"
- CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
- save_LIBS="$LIBS"
- LIBS="$PTHREAD_LIBS $LIBS"
- AC_MSG_CHECKING([for pthread_join in LIBS=$PTHREAD_LIBS with CFLAGS=$PTHREAD_CFLAGS])
- AC_TRY_LINK_FUNC(pthread_join, acx_pthread_ok=yes)
- AC_MSG_RESULT($acx_pthread_ok)
- if test x"$acx_pthread_ok" = xno; then
- PTHREAD_LIBS=""
- PTHREAD_CFLAGS=""
- fi
- LIBS="$save_LIBS"
- CFLAGS="$save_CFLAGS"
-fi
-
-# Create a list of thread flags to try. Items starting with a "-" are
-# C compiler flags, and other items are library names, except for "none"
-# which indicates that we try without any flags at all.
-
-acx_pthread_flags="pthreads none -Kthread -kthread lthread -pthread -pthreads -mthreads pthread --thread-safe -mt"
-
-# The ordering *is* (sometimes) important. Some notes on the
-# individual items follow:
-
-# pthreads: AIX (must check this before -lpthread)
-# none: in case threads are in libc; should be tried before -Kthread and
-# other compiler flags to prevent continual compiler warnings
-# -Kthread: Sequent (threads in libc, but -Kthread needed for pthread.h)
-# -kthread: FreeBSD kernel threads (preferred to -pthread since SMP-able)
-# lthread: LinuxThreads port on FreeBSD (also preferred to -pthread)
-# -pthread: Linux/gcc (kernel threads), BSD/gcc (userland threads)
-# -pthreads: Solaris/gcc
-# -mthreads: Mingw32/gcc, Lynx/gcc
-# -mt: Sun Workshop C (may only link SunOS threads [-lthread], but it
-# doesn't hurt to check since this sometimes defines pthreads too;
-# also defines -D_REENTRANT)
-# pthread: Linux, etcetera
-# --thread-safe: KAI C++
-
-case "${host_cpu}-${host_os}" in
- *solaris*)
-
- # On Solaris (at least, for some versions), libc contains stubbed
- # (non-functional) versions of the pthreads routines, so link-based
- # tests will erroneously succeed. (We need to link with -pthread or
- # -lpthread.) (The stubs are missing pthread_cleanup_push, or rather
- # a function called by this macro, so we could check for that, but
- # who knows whether they'll stub that too in a future libc.) So,
- # we'll just look for -pthreads and -lpthread first:
-
- acx_pthread_flags="-pthread -pthreads pthread -mt $acx_pthread_flags"
- ;;
-esac
-
-if test x"$acx_pthread_ok" = xno; then
-for flag in $acx_pthread_flags; do
-
- case $flag in
- none)
- AC_MSG_CHECKING([whether pthreads work without any flags])
- ;;
-
- -*)
- AC_MSG_CHECKING([whether pthreads work with $flag])
- PTHREAD_CFLAGS="$flag"
- ;;
-
- *)
- AC_MSG_CHECKING([for the pthreads library -l$flag])
- PTHREAD_LIBS="-l$flag"
- ;;
- esac
-
- save_LIBS="$LIBS"
- save_CFLAGS="$CFLAGS"
- LIBS="$PTHREAD_LIBS $LIBS"
- CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
-
- # Check for various functions. We must include pthread.h,
- # since some functions may be macros. (On the Sequent, we
- # need a special flag -Kthread to make this header compile.)
- # We check for pthread_join because it is in -lpthread on IRIX
- # while pthread_create is in libc. We check for pthread_attr_init
- # due to DEC craziness with -lpthreads. We check for
- # pthread_cleanup_push because it is one of the few pthread
- # functions on Solaris that doesn't have a non-functional libc stub.
- # We try pthread_create on general principles.
- AC_TRY_LINK([#include <pthread.h>],
- [pthread_t th; pthread_join(th, 0);
- pthread_attr_init(0); pthread_cleanup_push(0, 0);
- pthread_create(0,0,0,0); pthread_cleanup_pop(0); ],
- [acx_pthread_ok=yes])
-
- LIBS="$save_LIBS"
- CFLAGS="$save_CFLAGS"
-
- AC_MSG_RESULT($acx_pthread_ok)
- if test "x$acx_pthread_ok" = xyes; then
- break;
- fi
-
- PTHREAD_LIBS=""
- PTHREAD_CFLAGS=""
-done
-fi
-
-# Various other checks:
-if test "x$acx_pthread_ok" = xyes; then
- save_LIBS="$LIBS"
- LIBS="$PTHREAD_LIBS $LIBS"
- save_CFLAGS="$CFLAGS"
- CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
-
- # Detect AIX lossage: threads are created detached by default
- # and the JOINABLE attribute has a nonstandard name (UNDETACHED).
- AC_MSG_CHECKING([for joinable pthread attribute])
- AC_TRY_LINK([#include <pthread.h>],
- [int attr=PTHREAD_CREATE_JOINABLE;],
- ok=PTHREAD_CREATE_JOINABLE, ok=unknown)
- if test x"$ok" = xunknown; then
- AC_TRY_LINK([#include <pthread.h>],
- [int attr=PTHREAD_CREATE_UNDETACHED;],
- ok=PTHREAD_CREATE_UNDETACHED, ok=unknown)
- fi
- if test x"$ok" != xPTHREAD_CREATE_JOINABLE; then
- AC_DEFINE(PTHREAD_CREATE_JOINABLE, $ok,
- [Define to the necessary symbol if this constant
- uses a non-standard name on your system.])
- fi
- AC_MSG_RESULT(${ok})
- if test x"$ok" = xunknown; then
- AC_MSG_WARN([we do not know how to create joinable pthreads])
- fi
-
- AC_MSG_CHECKING([if more special flags are required for pthreads])
- flag=no
- case "${host_cpu}-${host_os}" in
- *-aix* | *-freebsd*) flag="-D_THREAD_SAFE";;
- *solaris* | alpha*-osf*) flag="-D_REENTRANT";;
- esac
- AC_MSG_RESULT(${flag})
- if test "x$flag" != xno; then
- PTHREAD_CFLAGS="$flag $PTHREAD_CFLAGS"
- fi
-
- LIBS="$save_LIBS"
- CFLAGS="$save_CFLAGS"
-
- # More AIX lossage: must compile with cc_r
- AC_CHECK_PROG(PTHREAD_CC, cc_r, cc_r, ${CC})
-else
- PTHREAD_CC="$CC"
-fi
-
-AC_SUBST(PTHREAD_LIBS)
-AC_SUBST(PTHREAD_CFLAGS)
-AC_SUBST(PTHREAD_CC)
-
-# Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND:
-if test x"$acx_pthread_ok" = xyes; then
- ifelse([$1],,AC_DEFINE(HAVE_PTHREAD,1,[Define if you have POSIX threads libraries and header files.]),[$1])
- :
-else
- acx_pthread_ok=no
- $2
-fi
-
-])dnl ACX_PTHREAD
-
-
-
-dnl @synopsis AC_PROG_CC_WARNINGS([ANSI])
-dnl
-dnl Enables a reasonable set of warnings for the C compiler. Optionally,
-dnl if the first argument is nonempty, turns on flags which enforce and/or
-dnl enable proper ANSI C if such flags are known to the compiler used.
-dnl
-dnl Currently this macro knows about GCC, Solaris C compiler,
-dnl Digital Unix C compiler, C for AIX Compiler, HP-UX C compiler,
-dnl and IRIX C compiler.
-dnl
-dnl @version $Id$
-dnl @author Ville Laurikari <vl@iki.fi>
-dnl
-AC_DEFUN([AC_PROG_CC_WARNINGS], [
- ansi=$1
- if test -z "$ansi"; then
- msg="for C compiler warning flags"
- else
- msg="for C compiler warning and ANSI conformance flags"
- fi
- AC_CACHE_CHECK($msg, ac_cv_prog_cc_warnings, [
- if test -n "$CC"; then
- cat > conftest.c <<EOF
-int main(int argc, char **argv) { return 0; }
-EOF
-
- dnl GCC
- if test "$GCC" = "yes"; then
- if test -z "$ansi"; then
- ac_cv_prog_cc_warnings="-Wall"
- else
- ac_cv_prog_cc_warnings="-Wall -ansi -pedantic"
- fi
-
- dnl Solaris C compiler
- elif $CC -flags 2>&1 | grep "Xc.*strict ANSI C" > /dev/null 2>&1 &&
- $CC -c -v -Xc conftest.c > /dev/null 2>&1 &&
- test -f conftest.o; then
- if test -z "$ansi"; then
- ac_cv_prog_cc_warnings="-v"
- else
- ac_cv_prog_cc_warnings="-v -Xc"
- fi
-
- dnl HP-UX C compiler
- elif $CC > /dev/null 2>&1 &&
- $CC -c -Aa +w1 conftest.c > /dev/null 2>&1 &&
- test -f conftest.o; then
- if test -z "$ansi"; then
- ac_cv_prog_cc_warnings="+w1"
- else
- ac_cv_prog_cc_warnings="+w1 -Aa"
- fi
-
- dnl Digital Unix C compiler
- elif ! $CC > /dev/null 2>&1 &&
- $CC -c -verbose -w0 -warnprotos -std1 conftest.c > /dev/null 2>&1 &&
- test -f conftest.o; then
- if test -z "$ansi"; then
- ac_cv_prog_cc_warnings="-verbose -w0 -warnprotos"
- else
- ac_cv_prog_cc_warnings="-verbose -w0 -warnprotos -std1"
- fi
-
- dnl C for AIX Compiler
- elif $CC > /dev/null 2>&1 | grep AIX > /dev/null 2>&1 &&
- $CC -c -qlanglvl=ansi -qinfo=all conftest.c > /dev/null 2>&1 &&
- test -f conftest.o; then
- if test -z "$ansi"; then
- ac_cv_prog_cc_warnings="-qsrcmsg -qinfo=all:noppt:noppc:noobs:nocnd"
- else
- ac_cv_prog_cc_warnings="-qsrcmsg -qinfo=all:noppt:noppc:noobs:nocnd -qlanglvl=ansi"
- fi
-
- dnl IRIX C compiler
- elif $CC -fullwarn -ansi -ansiE > /dev/null 2>&1 &&
- test -f conftest.o; then
- if test -z "$ansi"; then
- ac_cv_prog_cc_warnings="-fullwarn"
- else
- ac_cv_prog_cc_warnings="-fullwarn -ansi -ansiE"
- fi
-
- fi
- rm -f conftest.*
- fi
- if test -n "$ac_cv_prog_cc_warnings"; then
- CFLAGS="$CFLAGS $ac_cv_prog_cc_warnings"
- else
- ac_cv_prog_cc_warnings="unknown"
- fi
- ])
-])
-
-
diff --git a/sapi/cgi/libfcgi/fcgi_stdio.c b/sapi/cgi/libfcgi/fcgi_stdio.c
deleted file mode 100644
index 39a56315fd..0000000000
--- a/sapi/cgi/libfcgi/fcgi_stdio.c
+++ /dev/null
@@ -1,801 +0,0 @@
-/*
- * fcgi_stdio.c --
- *
- * FastCGI-stdio compatibility package
- *
- *
- * Copyright (c) 1996 Open Market, Inc.
- *
- * See the file "LICENSE.TERMS" for information on usage and redistribution
- * of this file, and for a DISCLAIMER OF ALL WARRANTIES.
- *
- */
-
-#ifndef lint
-static const char rcsid[] = "$Id$";
-#endif /* not lint */
-
-#include <errno.h> /* for errno */
-#include <stdarg.h> /* for va_arg */
-#include <stdlib.h> /* for malloc */
-#include <string.h> /* for strerror */
-
-#include "fcgi_config.h"
-
-#ifdef HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-
-#ifdef _WIN32
-#define DLLAPI __declspec(dllexport)
-#endif
-
-#include "fcgiapp.h"
-#include "fcgios.h"
-#include "fcgimisc.h"
-
-#define NO_FCGI_DEFINES
-#include "fcgi_stdio.h"
-#undef NO_FCGI_DEFINES
-
-#ifndef _WIN32
-
-extern char **environ;
-
-#ifdef HAVE_FILENO_PROTO
-#include <stdio.h>
-#else
-extern int fileno(FILE *stream);
-#endif
-
-extern FILE *fdopen(int fildes, const char *type);
-extern FILE *popen(const char *command, const char *type);
-extern int pclose(FILE *stream);
-
-#else /* _WIN32 */
-
-#define popen _popen
-#define pclose _pclose
-
-#endif /* _WIN32 */
-
-FCGI_FILE _fcgi_sF[3];
-
-
-/*
- *----------------------------------------------------------------------
- *
- * FCGI_Accept --
- *
- * Accepts a new request from the HTTP server and creates
- * a conventional execution environment for the request.
- *
- * If the application was invoked as a FastCGI server,
- * the first call to FCGI_Accept indicates that the application
- * has completed its initialization and is ready to accept
- * a request. Subsequent calls to FCGI_Accept indicate that
- * the application has completed its processing of the
- * current request and is ready to accept a new request.
- *
- * If the application was invoked as a CGI program, the first
- * call to FCGI_Accept is essentially a no-op and the second
- * call returns EOF (-1).
- *
- * Results:
- * 0 for successful call, -1 for error (application should exit).
- *
- * Side effects:
- * If the application was invoked as a FastCGI server,
- * and this is not the first call to this procedure,
- * FCGI_Accept first performs the equivalent of FCGI_Finish.
- *
- * On every call, FCGI_Accept accepts the new request and
- * reads the FCGI_PARAMS stream into an environment array,
- * i.e. a NULL-terminated array of strings of the form
- * ``name=value''. It assigns a pointer to this array
- * to the global variable environ, used by the standard
- * library function getenv. It creates new FCGI_FILE *s
- * representing input from the HTTP server, output to the HTTP
- * server, and error output to the HTTP server, and assigns these
- * new files to stdin, stdout, and stderr respectively.
- *
- * DO NOT mutate or retain pointers to environ or any values
- * contained in it (e.g. to the result of calling getenv(3)),
- * since these are freed by the next call to FCGI_Finish or
- * FCGI_Accept. In particular do not use setenv(3) or putenv(3)
- * in conjunction with FCGI_Accept.
- *
- *----------------------------------------------------------------------
- */
-static int acceptCalled = FALSE;
-static int isCGI = FALSE;
-
-int FCGI_Accept(void)
-{
- if(!acceptCalled) {
- /*
- * First call to FCGI_Accept. Is application running
- * as FastCGI or as CGI?
- */
- isCGI = FCGX_IsCGI();
- acceptCalled = TRUE;
- atexit(&FCGI_Finish);
- } else if(isCGI) {
- /*
- * Not first call to FCGI_Accept and running as CGI means
- * application is done.
- */
- return(EOF);
- }
- if(isCGI) {
- FCGI_stdin->stdio_stream = stdin;
- FCGI_stdin->fcgx_stream = NULL;
- FCGI_stdout->stdio_stream = stdout;
- FCGI_stdout->fcgx_stream = NULL;
- FCGI_stderr->stdio_stream = stderr;
- FCGI_stderr->fcgx_stream = NULL;
- } else {
- FCGX_Stream *in, *out, *error;
- FCGX_ParamArray envp;
- int acceptResult = FCGX_Accept(&in, &out, &error, &envp);
- if(acceptResult < 0) {
- return acceptResult;
- }
- FCGI_stdin->stdio_stream = NULL;
- FCGI_stdin->fcgx_stream = in;
- FCGI_stdout->stdio_stream = NULL;
- FCGI_stdout->fcgx_stream = out;
- FCGI_stderr->stdio_stream = NULL;
- FCGI_stderr->fcgx_stream = error;
- environ = envp;
- }
- return 0;
-}
-
-/*
- *----------------------------------------------------------------------
- *
- * FCGI_Finish --
- *
- * Finishes the current request from the HTTP server.
- *
- * Side effects:
- *
- * Flushes any buffered output to the HTTP server. Then frees
- * all storage allocated by the previous call, including all
- * storage reachable from the value of environ set by the previous
- * call to FCGI_Accept.
- *
- * DO NOT use stdin, stdout, stderr, or environ between calling
- * FCGI_Finish and calling FCGI_Accept.
- *
- * DO NOT mutate or retain pointers to environ or any values
- * contained in it (e.g. to the result of calling getenv(3)),
- * since these are freed by the next call to FCGI_Finish or
- * FCGI_Accept. In particular do not use setenv(3) or putenv(3)
- * in conjunction with FCGI_Accept.
- *
- *----------------------------------------------------------------------
- */
-void FCGI_Finish(void)
-{
- if(!acceptCalled || isCGI) {
- return;
- }
- FCGX_Finish();
- FCGI_stdin->fcgx_stream = NULL;
- FCGI_stdout->fcgx_stream = NULL;
- FCGI_stderr->fcgx_stream = NULL;
- environ = NULL;
-}
-
-/*
- *----------------------------------------------------------------------
- *
- * FCGI_StartFilterData --
- *
- *
- * The current request is for the filter role, and stdin is
- * positioned at EOF of FCGI_STDIN. The call repositions
- * stdin to the start of FCGI_DATA.
- * If the preconditions are not met (e.g. FCGI_STDIN has not
- * been read to EOF), the call sets the stream error code to
- * FCGX_CALL_SEQ_ERROR.
- *
- * Results:
- * 0 for a normal return, < 0 for error
- *
- *----------------------------------------------------------------------
- */
-int FCGI_StartFilterData(void)
-{
- if(FCGI_stdin->stdio_stream) {
- return -1;
- } else {
- return FCGX_StartFilterData(FCGI_stdin->fcgx_stream);
- }
-}
-
-/*
- *----------------------------------------------------------------------
- *
- * FCGI_SetExitStatus --
- *
- * Sets the exit status for the current request. The exit status
- * is the status code the request would have exited with, had
- * the request been run as a CGI program. You can call
- * FCGI_SetExitStatus several times during a request; the last call
- * before the request ends (by calling FCGI_Accept) determines the
- * value.
- *
- *----------------------------------------------------------------------
- */
-void FCGI_SetExitStatus(int status)
-{
- if(FCGI_stdin->fcgx_stream) {
- FCGX_SetExitStatus(status, FCGI_stdin->fcgx_stream);
- }
-}
-
-/*
- *----------------------------------------------------------------------
- *
- * FCGI_perror --
- *
- * Wrapper for function defined in H&S Section 11.2
- *
- *----------------------------------------------------------------------
- */
-void FCGI_perror(const char *str)
-{
- FCGI_fputs(str, FCGI_stderr);
- FCGI_fputs(": ", FCGI_stderr);
- FCGI_fputs(strerror(OS_Errno), FCGI_stderr);
- return;
-}
-
-/*
- *----------------------------------------------------------------------
- *
- * FCGI_OpenFromFILE --
- *
- * Constructs a new FCGI_FILE * from the FILE *stream.
- *
- * Results:
- * NULL if stream == NULL or storage could not be allocated,
- * otherwise the new FCGI_FILE *.
- *
- *----------------------------------------------------------------------
- */
-static FCGI_FILE *FCGI_OpenFromFILE(FILE *stream)
-{
- FCGI_FILE *fp;
-
- if (stream == NULL)
- return NULL;
-
- fp = (FCGI_FILE *) malloc(sizeof(FCGI_FILE));
- if (fp != NULL)
- {
- fp->stdio_stream = stream;
- fp->fcgx_stream = NULL;
- }
-
- return fp;
-}
-
-/*
- *----------------------------------------------------------------------
- *
- * FCGI_fopen, FCGI_fclose, FCGI_fflush, FCGI_freopen --
- *
- * Wrappers for functions defined in H&S Section 15.2
- *
- *----------------------------------------------------------------------
- */
-FCGI_FILE *FCGI_fopen(const char *path, const char *mode)
-{
- FILE * file = fopen(path, mode);
- FCGI_FILE * fcgi_file = FCGI_OpenFromFILE(file);
-
- if (file && !fcgi_file)
- fclose(file);
-
- return fcgi_file;
-}
-
-int FCGI_fclose(FCGI_FILE *fp)
-{
- int n = EOF;
- if(fp->stdio_stream) {
- n = fclose(fp->stdio_stream);
- fp->stdio_stream = NULL;
- } else if(fp->fcgx_stream) {
- n = FCGX_FClose(fp->fcgx_stream);
- fp->fcgx_stream = NULL;
- }
- if((fp != FCGI_stdin) && (fp != FCGI_stdout) && (fp != FCGI_stderr)) {
- free(fp);
- }
- return n;
-}
-
-int FCGI_fflush(FCGI_FILE *fp)
-{
- if(fp == NULL)
- return fflush(NULL);
- if(fp->stdio_stream)
- return fflush(fp->stdio_stream);
- else if(fp->fcgx_stream)
- return FCGX_FFlush(fp->fcgx_stream);
- return EOF;
-}
-
-FCGI_FILE *FCGI_freopen(const char *path, const char *mode,
- FCGI_FILE *fp)
-{
- if(fp->stdio_stream) {
- if(freopen(path, mode, fp->stdio_stream) == NULL)
- return NULL;
- else
- return fp;
- } else if(fp->fcgx_stream) {
- (void) FCGX_FClose(fp->fcgx_stream);
- fp->stdio_stream = fopen(path, mode);
- if(fp->stdio_stream == NULL)
- return NULL;
- else {
- fp->fcgx_stream = NULL;
- return fp;
- }
- }
- return NULL;
-}
-
-/*
- *----------------------------------------------------------------------
- *
- * FCGI_setvbuf, FCGI_setbuf --
- *
- * Wrappers for functions defined in H&S Section 15.3
- *
- *----------------------------------------------------------------------
- */
-int FCGI_setvbuf(FCGI_FILE *fp, char *buf, int bufmode, size_t size)
-{
- if(fp->stdio_stream)
- return setvbuf(fp->stdio_stream, buf, bufmode, size);
- else {
- return -1;
- }
-}
-
-void FCGI_setbuf(FCGI_FILE *fp, char *buf)
-{
- if(fp->stdio_stream)
- setbuf(fp->stdio_stream, buf);
-}
-
-/*
- *----------------------------------------------------------------------
- *
- * FCGI_fseek, FCGI_ftell, FCGI_rewind, FCGI_fgetpos, FCGI_fsetpos --
- *
- * Wrappers for functions defined in H&S Section 15.5
- *
- *----------------------------------------------------------------------
- */
-int FCGI_fseek(FCGI_FILE *fp, long offset, int whence)
-{
- if(fp->stdio_stream)
- return fseek(fp->stdio_stream, offset, whence);
- else {
- OS_SetErrno(ESPIPE);
- return -1;
- }
-}
-
-int FCGI_ftell(FCGI_FILE *fp)
-{
- if(fp->stdio_stream)
- return ftell(fp->stdio_stream);
- else {
- OS_SetErrno(ESPIPE);
- return -1;
- }
-}
-
-void FCGI_rewind(FCGI_FILE *fp)
-{
- if(fp->stdio_stream)
- rewind(fp->stdio_stream);
- else
- OS_SetErrno(ESPIPE);
-}
-
-#ifdef HAVE_FPOS
-int FCGI_fgetpos(FCGI_FILE *fp, fpos_t *pos)
-{
- if(fp->stdio_stream)
- return fgetpos(fp->stdio_stream, pos);
- else {
- OS_SetErrno(ESPIPE);
- return -1;
- }
-}
-
-int FCGI_fsetpos(FCGI_FILE *fp, const fpos_t *pos)
-{
- if(fp->stdio_stream)
- return fsetpos(fp->stdio_stream, pos);
- else {
- OS_SetErrno(ESPIPE);
- return -1;
- }
-}
-#endif
-
-/*
- *----------------------------------------------------------------------
- *
- * FCGI_fgetc, FCGI_getchar, FCGI_ungetc --
- *
- * Wrappers for functions defined in H&S Section 15.6
- *
- * XXX: getc and getchar are generally defined as macros
- * for performance reasons
- *
- *----------------------------------------------------------------------
- */
-int FCGI_fgetc(FCGI_FILE *fp)
-{
- if(fp->stdio_stream)
- return fgetc(fp->stdio_stream);
- else if(fp->fcgx_stream)
- return FCGX_GetChar(fp->fcgx_stream);
- return EOF;
-}
-
-int FCGI_getchar(void)
-{
- return FCGI_fgetc(FCGI_stdin);
-}
-
-int FCGI_ungetc(int c, FCGI_FILE *fp)
-{
- if(fp->stdio_stream)
- return ungetc(c, fp->stdio_stream);
- else if(fp->fcgx_stream)
- return FCGX_UnGetChar(c, fp->fcgx_stream);
- return EOF;
-}
-
-/*
- *----------------------------------------------------------------------
- *
- * FCGI_fgets, FCGI_gets --
- *
- * Wrappers for functions defined in H&S Section 15.7
- *
- *----------------------------------------------------------------------
- */
-char *FCGI_fgets(char *str, int size, FCGI_FILE *fp)
-{
- if(fp->stdio_stream)
- return fgets(str, size, fp->stdio_stream);
- else if(fp->fcgx_stream)
- return FCGX_GetLine(str, size, fp->fcgx_stream);
- return NULL;
-}
-
-/*
- * The gets() function reads characters from the standard input stream
- * into the array pointed to by str until a newline character is read
- * or an end-of-file condition is encountered. The newline character
- * is discarded and the string is terminated with a null character.
- */
-char *FCGI_gets(char *str)
-{
- char *s;
- int c;
-
- for (s = str; ((c = FCGI_getchar()) != '\n');) {
- if(c == EOF) {
- if(s == str)
- return NULL;
- else
- break;
- } else
- *s++ = (char) c;
- }
- *s = 0;
- return str;
-}
-
-/*
- *----------------------------------------------------------------------
- *
- * Wrappers for functions defined in H&S Section 15.8
- *
- * XXX: missing: fscanf, scanf
- *
- *----------------------------------------------------------------------
- */
-
-/*
- *----------------------------------------------------------------------
- *
- * FCGI_fputc, FCGI_putchar --
- *
- * Wrappers for functions defined in H&S Section 15.9
- *
- * XXX: putc and putchar are generally defined as macros
- * for performance reasons
- *
- *----------------------------------------------------------------------
- */
-int FCGI_fputc(int c, FCGI_FILE *fp)
-{
- if(fp->stdio_stream)
- return fputc(c, fp->stdio_stream);
- else if(fp->fcgx_stream)
- return FCGX_PutChar(c, fp->fcgx_stream);
- else return EOF;
-}
-
-int FCGI_putchar(int c)
-{
- return FCGI_fputc(c, FCGI_stdout);
-}
-
-/*
- *----------------------------------------------------------------------
- *
- * FCGI_fputs, FCGI_puts
- *
- * Wrappers for functions defined in H&S Section 15.10
- *
- *----------------------------------------------------------------------
- */
-int FCGI_fputs(const char *str, FCGI_FILE *fp)
-{
- if(fp->stdio_stream)
- return fputs(str, fp->stdio_stream);
- else if(fp->fcgx_stream)
- return FCGX_PutS(str, fp->fcgx_stream);
- return EOF;
-}
-
-int FCGI_puts(const char *str)
-{
- int n;
- if(FCGI_stdout->stdio_stream) {
- n = fputs(str, FCGI_stdout->stdio_stream);
- if(n < 0)
- return n;
- else
- return fputc('\n', FCGI_stdout->stdio_stream);
- } else if(FCGI_stdout->fcgx_stream) {
- n = FCGX_PutS(str, FCGI_stdout->fcgx_stream);
- if(n < 0)
- return n;
- else
- return FCGX_PutChar('\n', FCGI_stdout->fcgx_stream);
- }
- return EOF;
-}
-
-/*
- *----------------------------------------------------------------------
- *
- * FCGI_fprintf, FCGI_printf --
- *
- * Wrappers for functions defined in H&S Section 15.11
- *
- *----------------------------------------------------------------------
- */
-int FCGI_fprintf(FCGI_FILE *fp, const char *format, ...)
-{
- va_list ap;
- int n = 0;
- va_start(ap, format);
- if(fp->stdio_stream)
- n = vfprintf(fp->stdio_stream, format, ap);
- else if(fp->fcgx_stream)
- n = FCGX_VFPrintF(fp->fcgx_stream, format, ap);
- va_end(ap);
- return n;
-}
-
-int FCGI_printf(const char *format, ...)
-{
- va_list ap;
- int n;
- va_start(ap, format);
- n = FCGI_vfprintf(FCGI_stdout, format, ap);
- va_end(ap);
- return n;
-}
-
-/*
- *----------------------------------------------------------------------
- *
- * FCGI_vfprintf, FCGI_vprintf --
- *
- * Wrappers for functions defined in H&S Section 15.12
- *
- *----------------------------------------------------------------------
- */
-int FCGI_vfprintf(FCGI_FILE *fp, const char *format, va_list ap)
-{
- if(fp->stdio_stream)
- return vfprintf(fp->stdio_stream, format, ap);
- else if(fp->fcgx_stream)
- return FCGX_VFPrintF(fp->fcgx_stream, format, ap);
- return EOF;
-}
-
-int FCGI_vprintf(const char *format, va_list ap)
-{
- if(FCGI_stdout->stdio_stream)
- return vfprintf(FCGI_stdout->stdio_stream, format, ap);
- else if(FCGI_stdout->fcgx_stream)
- return FCGX_VFPrintF(FCGI_stdout->fcgx_stream, format, ap);
- return EOF;
-}
-
-/*
- *----------------------------------------------------------------------
- *
- * FCGI_fread, FCGI_fwrite --
- *
- * Wrappers for functions defined in H&S Section 15.13
- *
- *----------------------------------------------------------------------
- */
-size_t FCGI_fread(void *ptr, size_t size, size_t nmemb, FCGI_FILE *fp)
-{
- int n;
- if(fp->stdio_stream)
- return fread(ptr, size, nmemb, fp->stdio_stream);
- else if(fp->fcgx_stream) {
- if((size * nmemb) == 0) {
- return 0;
- }
- n = FCGX_GetStr((char *) ptr, size * nmemb, fp->fcgx_stream);
- return (n/size);
- }
- return (size_t)EOF;
-}
-
-size_t FCGI_fwrite(void *ptr, size_t size, size_t nmemb, FCGI_FILE *fp)
-{
- int n;
- if(fp->stdio_stream)
- return fwrite(ptr, size, nmemb, fp->stdio_stream);
- else if(fp->fcgx_stream) {
- if((size * nmemb) == 0) {
- return 0;
- }
- n = FCGX_PutStr((char *) ptr, size * nmemb, fp->fcgx_stream);
- return (n/size);
- }
- return (size_t)EOF;
-}
-
-/*
- *----------------------------------------------------------------------
- *
- * FCGI_feof, FCGI_ferror, FCGI_clearerr --
- *
- * Wrappers for functions defined in H&S Section 15.14
- *
- *----------------------------------------------------------------------
- */
-int FCGI_feof(FCGI_FILE *fp)
-{
- if(fp->stdio_stream) {
- return feof(fp->stdio_stream);
- } else if (fp->fcgx_stream){
- return FCGX_HasSeenEOF(fp->fcgx_stream);
- }
- return -1;
-
-}
-
-int FCGI_ferror(FCGI_FILE *fp)
-{
- if(fp->stdio_stream) {
- return ferror(fp->stdio_stream);
- } else if(fp->fcgx_stream) {
- return FCGX_GetError(fp->fcgx_stream);
- }
- return -1;
-}
-
-void FCGI_clearerr(FCGI_FILE *fp)
-{
- if(fp->stdio_stream) {
- clearerr(fp->stdio_stream);
- } else if(fp->fcgx_stream) {
- FCGX_ClearError(fp->fcgx_stream);
- }
- return;
-}
-
-/*
- *----------------------------------------------------------------------
- *
- * FCGI_tmpfile --
- *
- * Wrappers for function defined in H&S Section 15.16
- *
- *----------------------------------------------------------------------
- */
-FCGI_FILE *FCGI_tmpfile(void)
-{
- FILE * file = tmpfile();
- FCGI_FILE * fcgi_file = FCGI_OpenFromFILE(file);
-
- if (file && !fcgi_file)
- fclose(file);
-
- return fcgi_file;
-}
-
-/*
- *----------------------------------------------------------------------
- *
- * FCGI_fileno, FCGI_fdopen, FCGI_popen, FCGI_pclose --
- *
- * Wrappers for POSIX, X/OPEN functions not in ISO C
- *
- *----------------------------------------------------------------------
- */
-int FCGI_fileno(FCGI_FILE *fp)
-{
- if(fp->stdio_stream)
- return fileno(fp->stdio_stream);
- else
- return -1;
-}
-
-FCGI_FILE *FCGI_fdopen(int fd, const char *mode)
-{
- FILE * file = fdopen(fd, mode);
- FCGI_FILE * fcgi_file = FCGI_OpenFromFILE(file);
-
- if (file && !fcgi_file)
- fclose(file);
-
- return fcgi_file;
-}
-
-FCGI_FILE *FCGI_popen(const char *cmd, const char *type)
-{
- FILE * file = popen(cmd, type);
- FCGI_FILE * fcgi_file = FCGI_OpenFromFILE(file);
-
- if (file && !fcgi_file)
- pclose(file);
-
- return fcgi_file;
-}
-
-int FCGI_pclose(FCGI_FILE *fp)
-{
- int n = EOF;
- if (fp->stdio_stream) {
- n = pclose(fp->stdio_stream);
- fp->stdio_stream = NULL;
- } else if(fp->fcgx_stream) {
- /*
- * The caller is deeply confused; don't free the storage.
- */
- return EOF;
- }
- if((fp != FCGI_stdin) && (fp != FCGI_stdout) && (fp != FCGI_stderr)) {
- free(fp);
- }
- return n;
-}
diff --git a/sapi/cgi/libfcgi/fcgiapp.c b/sapi/cgi/libfcgi/fcgiapp.c
deleted file mode 100644
index cc57c93c7e..0000000000
--- a/sapi/cgi/libfcgi/fcgiapp.c
+++ /dev/null
@@ -1,2323 +0,0 @@
-/*
- * fcgiapp.c --
- *
- * FastCGI application library: request-at-a-time
- *
- *
- * Copyright (c) 1996 Open Market, Inc.
- *
- * See the file "LICENSE.TERMS" for information on usage and redistribution
- * of this file, and for a DISCLAIMER OF ALL WARRANTIES.
- *
- */
-#ifndef lint
-static const char rcsid[] = "$Id$";
-#endif /* not lint */
-
-#include <assert.h>
-#include <errno.h>
-#include <fcntl.h> /* for fcntl */
-#include <math.h>
-#include <memory.h> /* for memchr() */
-#include <stdarg.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <sys/types.h>
-
-#include "fcgi_config.h"
-
-#ifdef HAVE_SYS_SOCKET_H
-#include <sys/socket.h> /* for getpeername */
-#endif
-
-#ifdef HAVE_SYS_TIME_H
-#include <sys/time.h>
-#endif
-
-#ifdef HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-
-#ifdef HAVE_LIMITS_H
-#include <limits.h>
-#endif
-
-#ifdef _WIN32
-#define DLLAPI __declspec(dllexport)
-#endif
-
-#include "fcgimisc.h"
-#include "fastcgi.h"
-#include "fcgios.h"
-#include "fcgiapp.h"
-
-/*
- * This is a workaround for one version of the HP C compiler
- * (c89 on HP-UX 9.04, also Stratus FTX), which will dump core
- * if given 'long double' for varargs.
- */
-#ifdef HAVE_VA_ARG_LONG_DOUBLE_BUG
-#define LONG_DOUBLE double
-#else
-#define LONG_DOUBLE long double
-#endif
-
-/*
- * Globals
- */
-static int libInitialized = 0;
-static int isFastCGI = -1;
-static char *webServerAddressList = NULL;
-static FCGX_Request the_request;
-void _FCGX_FreeStream(FCGX_Stream **streamPtr, int freeData);
-
-void FCGX_ShutdownPending(void)
-{
- OS_ShutdownPending();
-}
-
-static void *Malloc(size_t size)
-{
- void *result = malloc(size);
- ASSERT(size == 0 || result != NULL);
- return result;
-}
-
-static char *StringCopy(char *str)
-{
- int strLen = strlen(str);
- char *newString = (char *)Malloc(strLen + 1);
- memcpy(newString, str, strLen);
- newString[strLen] = '\000';
- return newString;
-}
-
-
-/*
- *----------------------------------------------------------------------
- *
- * FCGX_GetChar --
- *
- * Reads a byte from the input stream and returns it.
- *
- * Results:
- * The byte, or EOF (-1) if the end of input has been reached.
- *
- *----------------------------------------------------------------------
- */
-int FCGX_GetChar(FCGX_Stream *stream)
-{
- if(stream->rdNext != stream->stop)
- return *stream->rdNext++;
- if(stream->isClosed || !stream->isReader)
- return EOF;
- stream->fillBuffProc(stream);
- stream->stopUnget = stream->rdNext;
- if(stream->rdNext != stream->stop)
- return *stream->rdNext++;
- ASSERT(stream->isClosed); /* bug in fillBufProc if not */
- return EOF;
-}
-
-/*
- *----------------------------------------------------------------------
- *
- * FCGX_GetStr --
- *
- * Reads up to n consecutive bytes from the input stream
- * into the character array str. Performs no interpretation
- * of the input bytes.
- *
- * Results:
- * Number of bytes read. If result is smaller than n,
- * the end of input has been reached.
- *
- *----------------------------------------------------------------------
- */
-int FCGX_GetStr(char *str, int n, FCGX_Stream *stream)
-{
- int m, bytesMoved;
-
- if(n <= 0) {
- return 0;
- }
- /*
- * Fast path: n bytes are already available
- */
- if(n <= (stream->stop - stream->rdNext)) {
- memcpy(str, stream->rdNext, n);
- stream->rdNext += n;
- return n;
- }
- /*
- * General case: stream is closed or buffer fill procedure
- * needs to be called
- */
- bytesMoved = 0;
- for (;;) {
- if(stream->rdNext != stream->stop) {
- m = min(n - bytesMoved, stream->stop - stream->rdNext);
- memcpy(str, stream->rdNext, m);
- bytesMoved += m;
- stream->rdNext += m;
- if(bytesMoved == n)
- return bytesMoved;
- str += m;
- }
- if(stream->isClosed || !stream->isReader)
- return bytesMoved;
- stream->fillBuffProc(stream);
- stream->stopUnget = stream->rdNext;
- }
-}
-
-/*
- *----------------------------------------------------------------------
- *
- * FCGX_GetLine --
- *
- * Reads up to n-1 consecutive bytes from the input stream
- * into the character array str. Stops before n-1 bytes
- * have been read if '\n' or EOF is read. The terminating '\n'
- * is copied to str. After copying the last byte into str,
- * stores a '\0' terminator.
- *
- * Results:
- * NULL if EOF is the first thing read from the input stream,
- * str otherwise.
- *
- *----------------------------------------------------------------------
- */
-char *FCGX_GetLine(char *str, int n, FCGX_Stream *stream)
-{
- int c;
- char *p = str;
-
- n--;
- while (n > 0) {
- c = FCGX_GetChar(stream);
- if(c == EOF) {
- if(p == str)
- return NULL;
- else
- break;
- }
- *p++ = (char) c;
- n--;
- if(c == '\n')
- break;
- }
- *p = '\0';
- return str;
-}
-
-/*
- *----------------------------------------------------------------------
- *
- * FCGX_UnGetChar --
- *
- * Pushes back the character c onto the input stream. One
- * character of pushback is guaranteed once a character
- * has been read. No pushback is possible for EOF.
- *
- * Results:
- * Returns c if the pushback succeeded, EOF if not.
- *
- *----------------------------------------------------------------------
- */
-int FCGX_UnGetChar(int c, FCGX_Stream *stream) {
- if(c == EOF
- || stream->isClosed
- || !stream->isReader
- || stream->rdNext == stream->stopUnget)
- return EOF;
- --(stream->rdNext);
- *stream->rdNext = (unsigned char) c;
- return c;
-}
-
-/*
- *----------------------------------------------------------------------
- *
- * FCGX_HasSeenEOF --
- *
- * Returns EOF if end-of-file has been detected while reading
- * from stream; otherwise returns 0.
- *
- * Note that FCGX_HasSeenEOF(s) may return 0, yet an immediately
- * following FCGX_GetChar(s) may return EOF. This function, like
- * the standard C stdio function feof, does not provide the
- * ability to peek ahead.
- *
- * Results:
- * EOF if end-of-file has been detected, 0 if not.
- *
- *----------------------------------------------------------------------
- */
-int FCGX_HasSeenEOF(FCGX_Stream *stream) {
- return (stream->isClosed) ? EOF : 0;
-}
-
-/*
- *----------------------------------------------------------------------
- *
- * FCGX_PutChar --
- *
- * Writes a byte to the output stream.
- *
- * Results:
- * The byte, or EOF (-1) if an error occurred.
- *
- *----------------------------------------------------------------------
- */
-int FCGX_PutChar(int c, FCGX_Stream *stream)
-{
- if(stream->wrNext != stream->stop)
- return (*stream->wrNext++ = (unsigned char) c);
- if(stream->isClosed || stream->isReader)
- return EOF;
- stream->emptyBuffProc(stream, FALSE);
- if(stream->wrNext != stream->stop)
- return (*stream->wrNext++ = (unsigned char) c);
- ASSERT(stream->isClosed); /* bug in emptyBuffProc if not */
- return EOF;
-}
-
-/*
- *----------------------------------------------------------------------
- *
- * FCGX_PutStr --
- *
- * Writes n consecutive bytes from the character array str
- * into the output stream. Performs no interpretation
- * of the output bytes.
- *
- * Results:
- * Number of bytes written (n) for normal return,
- * EOF (-1) if an error occurred.
- *
- *----------------------------------------------------------------------
- */
-int FCGX_PutStr(const char *str, int n, FCGX_Stream *stream)
-{
- int m, bytesMoved;
-
- /*
- * Fast path: room for n bytes in the buffer
- */
- if(n <= (stream->stop - stream->wrNext)) {
- memcpy(stream->wrNext, str, n);
- stream->wrNext += n;
- return n;
- }
- /*
- * General case: stream is closed or buffer empty procedure
- * needs to be called
- */
- bytesMoved = 0;
- for (;;) {
- if(stream->wrNext != stream->stop) {
- m = min(n - bytesMoved, stream->stop - stream->wrNext);
- memcpy(stream->wrNext, str, m);
- bytesMoved += m;
- stream->wrNext += m;
- if(bytesMoved == n)
- return bytesMoved;
- str += m;
- }
- if(stream->isClosed || stream->isReader)
- return -1;
- stream->emptyBuffProc(stream, FALSE);
- }
-}
-
-/*
- *----------------------------------------------------------------------
- *
- * FCGX_PutS --
- *
- * Writes a character string to the output stream.
- *
- * Results:
- * number of bytes written for normal return,
- * EOF (-1) if an error occurred.
- *
- *----------------------------------------------------------------------
- */
-int FCGX_PutS(const char *str, FCGX_Stream *stream)
-{
- return FCGX_PutStr(str, strlen(str), stream);
-}
-
-/*
- *----------------------------------------------------------------------
- *
- * FCGX_FPrintF --
- *
- * Performs output formatting and writes the results
- * to the output stream.
- *
- * Results:
- * number of bytes written for normal return,
- * EOF (-1) if an error occurred.
- *
- *----------------------------------------------------------------------
- */
-int FCGX_FPrintF(FCGX_Stream *stream, const char *format, ...)
-{
- int result;
- va_list ap;
- va_start(ap, format);
- result = FCGX_VFPrintF(stream, format, ap);
- va_end(ap);
- return result;
-}
-
-/*
- *----------------------------------------------------------------------
- *
- * FCGX_VFPrintF --
- *
- * Performs output formatting and writes the results
- * to the output stream.
- *
- * Results:
- * number of bytes written for normal return,
- * EOF (-1) if an error occurred.
- *
- *----------------------------------------------------------------------
- */
-
-#define PRINTF_BUFFLEN 100
- /*
- * More than sufficient space for all unmodified conversions
- * except %s and %f.
- */
-#define FMT_BUFFLEN 25
- /*
- * Max size of a format specifier is 1 + 5 + 7 + 7 + 2 + 1 + slop
- */
-static void CopyAndAdvance(char **destPtr, char **srcPtr, int n);
-
-int FCGX_VFPrintF(FCGX_Stream *stream, const char *format, va_list arg)
-{
- char *f, *fStop, *percentPtr, *p, *fmtBuffPtr, *buffPtr;
- int op, performedOp, sizeModifier, buffCount = 0, buffLen, specifierLength;
- int fastPath, n, auxBuffLen = 0, buffReqd, minWidth, precision, exp;
- char *auxBuffPtr = NULL;
- int streamCount = 0;
- char fmtBuff[FMT_BUFFLEN];
- char buff[PRINTF_BUFFLEN];
-
- int intArg;
- short shortArg;
- long longArg;
- unsigned unsignedArg;
- unsigned long uLongArg;
- unsigned short uShortArg;
- char *charPtrArg = NULL;
- void *voidPtrArg;
- int *intPtrArg;
- long *longPtrArg;
- short *shortPtrArg;
- double doubleArg = 0.0;
- LONG_DOUBLE lDoubleArg = 0.0L;
-
- fmtBuff[0] = '%';
- f = (char *) format;
- fStop = f + strlen(f);
- while (f != fStop) {
- percentPtr = (char *)memchr(f, '%', fStop - f);
- if(percentPtr == NULL) percentPtr = fStop;
- if(percentPtr != f) {
- if(FCGX_PutStr(f, percentPtr - f, stream) < 0)
- goto ErrorReturn;
- streamCount += percentPtr - f;
- f = percentPtr;
- if(f == fStop) break;
- }
- fastPath = TRUE;
- /*
- * The following loop always executes either once or twice.
- */
- for (;;) {
- if(fastPath) {
- /*
- * Fast path: Scan optimistically, hoping that no flags,
- * minimum field width, or precision are specified.
- * Use the preallocated buffer, which is large enough
- * for all fast path cases. If the conversion specifier
- * is really more complex, run the loop a second time
- * using the slow path.
- * Note that fast path execution of %s bypasses the buffer
- * and %f is not attempted on the fast path due to
- * its large buffering requirements.
- */
- op = *(percentPtr + 1);
- switch(op) {
- case 'l':
- case 'L':
- case 'h':
- sizeModifier = op;
- op = *(percentPtr + 2);
- fmtBuff[1] = (char) sizeModifier;
- fmtBuff[2] = (char) op;
- fmtBuff[3] = '\0';
- specifierLength = 3;
- break;
- default:
- sizeModifier = ' ';
- fmtBuff[1] = (char) op;
- fmtBuff[2] = '\0';
- specifierLength = 2;
- break;
- }
- buffPtr = buff;
- buffLen = PRINTF_BUFFLEN;
- } else {
- /*
- * Slow path: Scan the conversion specifier and construct
- * a new format string, compute an upper bound on the
- * amount of buffering that sprintf will require,
- * and allocate a larger buffer if necessary.
- */
- p = percentPtr + 1;
- fmtBuffPtr = &fmtBuff[1];
- /*
- * Scan flags
- */
- n = strspn(p, "-0+ #");
- if(n > 5)
- goto ErrorReturn;
- CopyAndAdvance(&fmtBuffPtr, &p, n);
- /*
- * Scan minimum field width
- */
- n = strspn(p, "0123456789");
- if(n == 0) {
- if(*p == '*') {
- minWidth = va_arg(arg, int);
- if(abs(minWidth) > 999999)
- goto ErrorReturn;
- /*
- * The following use of strlen rather than the
- * value returned from sprintf is because SUNOS4
- * returns a char * instead of an int count.
- */
- sprintf(fmtBuffPtr, "%d", minWidth);
- fmtBuffPtr += strlen(fmtBuffPtr);
- p++;
- } else {
- minWidth = 0;
- }
- } else if(n <= 6) {
- minWidth = strtol(p, NULL, 10);
- CopyAndAdvance(&fmtBuffPtr, &p, n);
- } else {
- goto ErrorReturn;
- }
- /*
- * Scan precision
- */
- if(*p == '.') {
- CopyAndAdvance(&fmtBuffPtr, &p, 1);
- n = strspn(p, "0123456789");
- if(n == 0) {
- if(*p == '*') {
- precision = va_arg(arg, int);
- if(precision < 0) precision = 0;
- if(precision > 999999)
- goto ErrorReturn;
- /*
- * The following use of strlen rather than the
- * value returned from sprintf is because SUNOS4
- * returns a char * instead of an int count.
- */
- sprintf(fmtBuffPtr, "%d", precision);
- fmtBuffPtr += strlen(fmtBuffPtr);
- p++;
- } else {
- precision = 0;
- }
- } else if(n <= 6) {
- precision = strtol(p, NULL, 10);
- CopyAndAdvance(&fmtBuffPtr, &p, n);
- } else {
- goto ErrorReturn;
- }
- } else {
- precision = -1;
- }
- /*
- * Scan size modifier and conversion operation
- */
- switch(*p) {
- case 'l':
- case 'L':
- case 'h':
- sizeModifier = *p;
- CopyAndAdvance(&fmtBuffPtr, &p, 1);
- break;
- default:
- sizeModifier = ' ';
- break;
- }
- op = *p;
- CopyAndAdvance(&fmtBuffPtr, &p, 1);
- ASSERT(fmtBuffPtr - fmtBuff < FMT_BUFFLEN);
- *fmtBuffPtr = '\0';
- specifierLength = p - percentPtr;
- /*
- * Bound the required buffer size. For s and f
- * conversions this requires examining the argument.
- */
- switch(op) {
- case 'd':
- case 'i':
- case 'u':
- case 'o':
- case 'x':
- case 'X':
- case 'c':
- case 'p':
- buffReqd = max(precision, 46);
- break;
- case 's':
- charPtrArg = va_arg(arg, char *);
- if (!charPtrArg) charPtrArg = "(null)";
- if(precision == -1) {
- buffReqd = strlen(charPtrArg);
- } else {
- p = (char *)memchr(charPtrArg, '\0', precision);
- buffReqd =
- (p == NULL) ? precision : p - charPtrArg;
- }
- break;
- case 'f':
- switch(sizeModifier) {
- case ' ':
- doubleArg = va_arg(arg, double);
- frexp(doubleArg, &exp);
- break;
- case 'L':
- lDoubleArg = va_arg(arg, LONG_DOUBLE);
- /* XXX Need to check for the presence of
- * frexpl() and use it if available */
- frexp((double) lDoubleArg, &exp);
- break;
- default:
- goto ErrorReturn;
- }
- if(precision == -1) precision = 6;
- buffReqd = precision + 3 + ((exp > 0) ? exp/3 : 0);
- break;
- case 'e':
- case 'E':
- case 'g':
- case 'G':
- if(precision == -1) precision = 6;
- buffReqd = precision + 8;
- break;
- case 'n':
- case '%':
- default:
- goto ErrorReturn;
- break;
- }
- buffReqd = max(buffReqd + 10, minWidth);
- /*
- * Allocate the buffer
- */
- if(buffReqd <= PRINTF_BUFFLEN) {
- buffPtr = buff;
- buffLen = PRINTF_BUFFLEN;
- } else {
- if(auxBuffPtr == NULL || buffReqd > auxBuffLen) {
- if(auxBuffPtr != NULL) free(auxBuffPtr);
- auxBuffPtr = (char *)Malloc(buffReqd);
- auxBuffLen = buffReqd;
- if(auxBuffPtr == NULL)
- goto ErrorReturn;
- }
- buffPtr = auxBuffPtr;
- buffLen = auxBuffLen;
- }
- }
- /*
- * This giant switch statement requires the following variables
- * to be set up: op, sizeModifier, arg, buffPtr, fmtBuff.
- * When fastPath == FALSE and op == 's' or 'f', the argument
- * has been read into charPtrArg, doubleArg, or lDoubleArg.
- * The statement produces the boolean performedOp, TRUE iff
- * the op/sizeModifier were executed and argument consumed;
- * if performedOp, the characters written into buffPtr[]
- * and the character count buffCount (== EOF meaning error).
- *
- * The switch cases are arranged in the same order as in the
- * description of fprintf in section 15.11 of Harbison and Steele.
- */
- performedOp = TRUE;
- switch(op) {
- case 'd':
- case 'i':
- switch(sizeModifier) {
- case ' ':
- intArg = va_arg(arg, int);
- sprintf(buffPtr, fmtBuff, intArg);
- buffCount = strlen(buffPtr);
- break;
- case 'l':
- longArg = va_arg(arg, long);
- sprintf(buffPtr, fmtBuff, longArg);
- buffCount = strlen(buffPtr);
- break;
- case 'h':
- shortArg = (short) va_arg(arg, int);
- sprintf(buffPtr, fmtBuff, shortArg);
- buffCount = strlen(buffPtr);
- break;
- default:
- goto ErrorReturn;
- }
- break;
- case 'u':
- case 'o':
- case 'x':
- case 'X':
- switch(sizeModifier) {
- case ' ':
- unsignedArg = va_arg(arg, unsigned);
- sprintf(buffPtr, fmtBuff, unsignedArg);
- buffCount = strlen(buffPtr);
- break;
- case 'l':
- uLongArg = va_arg(arg, unsigned long);
- sprintf(buffPtr, fmtBuff, uLongArg);
- buffCount = strlen(buffPtr);
- break;
- case 'h':
- uShortArg = (unsigned short) va_arg(arg, int);
- sprintf(buffPtr, fmtBuff, uShortArg);
- buffCount = strlen(buffPtr);
- break;
- default:
- goto ErrorReturn;
- }
- break;
- case 'c':
- switch(sizeModifier) {
- case ' ':
- intArg = va_arg(arg, int);
- sprintf(buffPtr, fmtBuff, intArg);
- buffCount = strlen(buffPtr);
- break;
- case 'l':
- /*
- * XXX: Allowed by ISO C Amendment 1, but
- * many platforms don't yet support wint_t
- */
- goto ErrorReturn;
- default:
- goto ErrorReturn;
- }
- break;
- case 's':
- switch(sizeModifier) {
- case ' ':
- if(fastPath) {
- buffPtr = va_arg(arg, char *);
- buffCount = strlen(buffPtr);
- buffLen = buffCount + 1;
- } else {
- sprintf(buffPtr, fmtBuff, charPtrArg);
- buffCount = strlen(buffPtr);
- }
- break;
- case 'l':
- /*
- * XXX: Don't know how to convert a sequence
- * of wide characters into a byte stream, or
- * even how to predict the buffering required.
- */
- goto ErrorReturn;
- default:
- goto ErrorReturn;
- }
- break;
- case 'p':
- if(sizeModifier != ' ')
- goto ErrorReturn;
- voidPtrArg = va_arg(arg, void *);
- sprintf(buffPtr, fmtBuff, voidPtrArg);
- buffCount = strlen(buffPtr);
- break;
- case 'n':
- switch(sizeModifier) {
- case ' ':
- intPtrArg = va_arg(arg, int *);
- *intPtrArg = streamCount;
- break;
- case 'l':
- longPtrArg = va_arg(arg, long *);
- *longPtrArg = streamCount;
- break;
- case 'h':
- shortPtrArg = (short *) va_arg(arg, short *);
- *shortPtrArg = (short) streamCount;
- break;
- default:
- goto ErrorReturn;
- }
- buffCount = 0;
- break;
- case 'f':
- if(fastPath) {
- performedOp = FALSE;
- break;
- }
- switch(sizeModifier) {
- case ' ':
- sprintf(buffPtr, fmtBuff, doubleArg);
- buffCount = strlen(buffPtr);
- break;
- case 'L':
- sprintf(buffPtr, fmtBuff, lDoubleArg);
- buffCount = strlen(buffPtr);
- break;
- default:
- goto ErrorReturn;
- }
- break;
- case 'e':
- case 'E':
- case 'g':
- case 'G':
- switch(sizeModifier) {
- case ' ':
- doubleArg = va_arg(arg, double);
- sprintf(buffPtr, fmtBuff, doubleArg);
- buffCount = strlen(buffPtr);
- break;
- case 'L':
- lDoubleArg = va_arg(arg, LONG_DOUBLE);
- sprintf(buffPtr, fmtBuff, lDoubleArg);
- buffCount = strlen(buffPtr);
- break;
- default:
- goto ErrorReturn;
- }
- break;
- case '%':
- if(sizeModifier != ' ')
- goto ErrorReturn;
- buff[0] = '%';
- buffCount = 1;
- break;
- case '\0':
- goto ErrorReturn;
- default:
- performedOp = FALSE;
- break;
- } /* switch(op) */
- if(performedOp) break;
- if(!fastPath)
- goto ErrorReturn;
- fastPath = FALSE;
- } /* for (;;) */
- ASSERT(buffCount < buffLen);
- if(buffCount > 0) {
- if(FCGX_PutStr(buffPtr, buffCount, stream) < 0)
- goto ErrorReturn;
- streamCount += buffCount;
- } else if(buffCount < 0) {
- goto ErrorReturn;
- }
- f += specifierLength;
- } /* while(f != fStop) */
- goto NormalReturn;
- ErrorReturn:
- streamCount = -1;
- NormalReturn:
- if(auxBuffPtr != NULL) free(auxBuffPtr);
- return streamCount;
-}
-
-/*
- * Copy n characters from *srcPtr to *destPtr, then increment
- * both *srcPtr and *destPtr by n.
- */
-static void CopyAndAdvance(char **destPtr, char **srcPtr, int n)
-{
- char *dest = *destPtr;
- char *src = *srcPtr;
- int i;
- for (i = 0; i < n; i++)
- *dest++ = *src++;
- *destPtr = dest;
- *srcPtr = src;
-}
-
-/*
- *----------------------------------------------------------------------
- *
- * FCGX_FFlush --
- *
- * Flushes any buffered output.
- *
- * Server-push is a legitimate application of FCGX_FFlush.
- * Otherwise, FCGX_FFlush is not very useful, since FCGX_Accept
- * does it implicitly. FCGX_FFlush may reduce performance
- * by increasing the total number of operating system calls
- * the application makes.
- *
- * Results:
- * EOF (-1) if an error occurred.
- *
- *----------------------------------------------------------------------
- */
-int FCGX_FFlush(FCGX_Stream *stream)
-{
- if(!stream || stream->isClosed || stream->isReader)
- return 0;
- stream->emptyBuffProc(stream, FALSE);
- return (stream->isClosed) ? -1 : 0;
-}
-
-/*
- *----------------------------------------------------------------------
- *
- * FCGX_FClose --
- *
- * Performs FCGX_FFlush and closes the stream.
- *
- * This is not a very useful operation, since FCGX_Accept
- * does it implicitly. Closing the out stream before the
- * err stream results in an extra write if there's nothing
- * in the err stream, and therefore reduces performance.
- *
- * Results:
- * EOF (-1) if an error occurred.
- *
- *----------------------------------------------------------------------
- */
-int FCGX_FClose(FCGX_Stream *stream)
-{
- if (stream == NULL) return 0;
-
- if(!stream->wasFCloseCalled) {
- if(!stream->isReader) {
- stream->emptyBuffProc(stream, TRUE);
- }
- stream->wasFCloseCalled = TRUE;
- stream->isClosed = TRUE;
- if(stream->isReader) {
- stream->wrNext = stream->stop = stream->rdNext;
- } else {
- stream->rdNext = stream->stop = stream->wrNext;
- }
- }
- return (stream->FCGI_errno == 0) ? 0 : EOF;
-}
-
-/*
- *----------------------------------------------------------------------
- *
- * SetError --
- *
- * An error has occurred; save the error code in the stream
- * for diagnostic purposes and set the stream state so that
- * reads return EOF and writes have no effect.
- *
- *----------------------------------------------------------------------
- */
-static void SetError(FCGX_Stream *stream, int FCGI_errno)
-{
- /*
- * Preserve only the first error.
- */
- if(stream->FCGI_errno == 0) {
- stream->FCGI_errno = FCGI_errno;
- stream->isClosed = TRUE;
- }
-}
-
-/*
- *----------------------------------------------------------------------
- *
- * FCGX_GetError --
- *
- * Return the stream error code. 0 means no error, > 0
- * is an errno(2) error, < 0 is an FCGX_errno error.
- *
- *----------------------------------------------------------------------
- */
-int FCGX_GetError(FCGX_Stream *stream) {
- return stream->FCGI_errno;
-}
-
-/*
- *----------------------------------------------------------------------
- *
- * FCGX_ClearError --
- *
- * Clear the stream error code and end-of-file indication.
- *
- *----------------------------------------------------------------------
- */
-void FCGX_ClearError(FCGX_Stream *stream) {
- stream->FCGI_errno = 0;
- /*
- * stream->isClosed = FALSE;
- * XXX: should clear isClosed but work is needed to make it safe
- * to do so. For example, if an application calls FClose, gets
- * an I/O error on the write, calls ClearError and retries
- * the FClose, FClose (really EmptyBuffProc) will write a second
- * EOF record. If an application calls PutChar instead of FClose
- * after the ClearError, the application will write more data.
- * The stream's state must discriminate between various states
- * of the stream that are now all lumped under isClosed.
- */
-}
-
-
-
-/*
- *----------------------------------------------------------------------
- *
- * NewParams --
- *
- * Creates a new Params structure.
- *
- * Results:
- * Pointer to the new structure.
- *
- *----------------------------------------------------------------------
- */
-static ParamsPtr NewParams(int length)
-{
- ParamsPtr result;
- result = (Params *)Malloc(sizeof(Params));
- result->vec = (char **)Malloc(length * sizeof(char *));
- result->length = length;
- result->cur = result->vec;
- *result->cur = NULL;
- return result;
-}
-
-/*
- *----------------------------------------------------------------------
- *
- * FreeParams --
- *
- * Frees a Params structure and all the parameters it contains.
- *
- * Side effects:
- * env becomes invalid.
- *
- *----------------------------------------------------------------------
- */
-static void FreeParams(ParamsPtr *paramsPtrPtr)
-{
- ParamsPtr paramsPtr = *paramsPtrPtr;
- char **p;
- if(paramsPtr == NULL) {
- return;
- }
- for (p = paramsPtr->vec; p < paramsPtr->cur; p++) {
- free(*p);
- }
- free(paramsPtr->vec);
- free(paramsPtr);
- *paramsPtrPtr = NULL;
-}
-
-/*
- *----------------------------------------------------------------------
- *
- * PutParam --
- *
- * Add a name/value pair to a Params structure.
- *
- * Results:
- * None.
- *
- * Side effects:
- * Parameters structure updated.
- *
- *----------------------------------------------------------------------
- */
-static void PutParam(ParamsPtr paramsPtr, char *nameValue)
-{
- int size;
-
- *paramsPtr->cur++ = nameValue;
- size = paramsPtr->cur - paramsPtr->vec;
- if(size >= paramsPtr->length) {
- paramsPtr->length *= 2;
- paramsPtr->vec = (FCGX_ParamArray)realloc(paramsPtr->vec, paramsPtr->length * sizeof(char *));
- paramsPtr->cur = paramsPtr->vec + size;
- }
- *paramsPtr->cur = NULL;
-}
-
-
-void FCGX_PutEnv(FCGX_Request *request, char *var)
-{
- char *nameValue;
- char *e, **p;
- int len;
-
- if (!strchr(var,'=')) {
- return;
- }
- nameValue = StringCopy(var);
- e = strchr(nameValue,'=');
- *e = 0;
-
- /* find the name and replace it */
- len = strlen(nameValue);
-
- for (p = request->envp; p && *p; ++p) {
- if((strncmp(nameValue, *p, len) == 0) && ((*p)[len] == '=')) {
- free(*p);
- *e = '=';
- *p = nameValue;
- return;
- }
- }
- *e = '=';
- /* this is a new var, add it to the environment */
- PutParam(request->paramsPtr,nameValue);
- request->envp = request->paramsPtr->vec;
-}
-
-
-/*
- *----------------------------------------------------------------------
- *
- * FCGX_GetParam -- obtain value of FCGI parameter in environment
- *
- *
- * Results:
- * Value bound to name, NULL if name not present in the
- * environment envp. Caller must not mutate the result
- * or retain it past the end of this request.
- *
- *----------------------------------------------------------------------
- */
-char *FCGX_GetParam(const char *name, FCGX_ParamArray envp)
-{
- int len;
- char **p;
-
- if (name == NULL || envp == NULL) return NULL;
-
- len = strlen(name);
-
- for (p = envp; p && *p; ++p) {
- if((strncmp(name, *p, len) == 0) && ((*p)[len] == '=')) {
- return *p+len+1;
- }
- }
- return NULL;
-}
-
-/*
- *----------------------------------------------------------------------
- *
- * Start of FastCGI-specific code
- *
- *----------------------------------------------------------------------
- */
-
-/*
- *----------------------------------------------------------------------
- *
- * ReadParams --
- *
- * Reads FastCGI name-value pairs from stream until EOF. Converts
- * each pair to name=value format and adds it to Params structure.
- *
- *----------------------------------------------------------------------
- */
-static int ReadParams(Params *paramsPtr, FCGX_Stream *stream)
-{
- int nameLen, valueLen;
- unsigned char lenBuff[3];
- char *nameValue;
-
- while((nameLen = FCGX_GetChar(stream)) != EOF) {
- /*
- * Read name length (one or four bytes) and value length
- * (one or four bytes) from stream.
- */
- if((nameLen & 0x80) != 0) {
- if(FCGX_GetStr((char *) &lenBuff[0], 3, stream) != 3) {
- SetError(stream, FCGX_PARAMS_ERROR);
- return -1;
- }
- nameLen = ((nameLen & 0x7f) << 24) + (lenBuff[0] << 16)
- + (lenBuff[1] << 8) + lenBuff[2];
- }
- if((valueLen = FCGX_GetChar(stream)) == EOF) {
- SetError(stream, FCGX_PARAMS_ERROR);
- return -1;
- }
- if((valueLen & 0x80) != 0) {
- if(FCGX_GetStr((char *) &lenBuff[0], 3, stream) != 3) {
- SetError(stream, FCGX_PARAMS_ERROR);
- return -1;
- }
- valueLen = ((valueLen & 0x7f) << 24) + (lenBuff[0] << 16)
- + (lenBuff[1] << 8) + lenBuff[2];
- }
- /*
- * nameLen and valueLen are now valid; read the name and value
- * from stream and construct a standard environment entry.
- */
- nameValue = (char *)Malloc(nameLen + valueLen + 2);
- if(FCGX_GetStr(nameValue, nameLen, stream) != nameLen) {
- SetError(stream, FCGX_PARAMS_ERROR);
- free(nameValue);
- return -1;
- }
- *(nameValue + nameLen) = '=';
- if(FCGX_GetStr(nameValue + nameLen + 1, valueLen, stream)
- != valueLen) {
- SetError(stream, FCGX_PARAMS_ERROR);
- free(nameValue);
- return -1;
- }
- *(nameValue + nameLen + valueLen + 1) = '\0';
- PutParam(paramsPtr, nameValue);
- }
- return 0;
-}
-
-/*
- *----------------------------------------------------------------------
- *
- * MakeHeader --
- *
- * Constructs an FCGI_Header struct.
- *
- *----------------------------------------------------------------------
- */
-static FCGI_Header MakeHeader(
- int type,
- int requestId,
- int contentLength,
- int paddingLength)
-{
- FCGI_Header header;
- ASSERT(contentLength >= 0 && contentLength <= FCGI_MAX_LENGTH);
- ASSERT(paddingLength >= 0 && paddingLength <= 0xff);
- header.version = FCGI_VERSION_1;
- header.type = (unsigned char) type;
- header.requestIdB1 = (unsigned char) ((requestId >> 8) & 0xff);
- header.requestIdB0 = (unsigned char) ((requestId ) & 0xff);
- header.contentLengthB1 = (unsigned char) ((contentLength >> 8) & 0xff);
- header.contentLengthB0 = (unsigned char) ((contentLength ) & 0xff);
- header.paddingLength = (unsigned char) paddingLength;
- header.reserved = 0;
- return header;
-}
-
-/*
- *----------------------------------------------------------------------
- *
- * MakeEndRequestBody --
- *
- * Constructs an FCGI_EndRequestBody struct.
- *
- *----------------------------------------------------------------------
- */
-static FCGI_EndRequestBody MakeEndRequestBody(
- int appStatus,
- int protocolStatus)
-{
- FCGI_EndRequestBody body;
- body.appStatusB3 = (unsigned char) ((appStatus >> 24) & 0xff);
- body.appStatusB2 = (unsigned char) ((appStatus >> 16) & 0xff);
- body.appStatusB1 = (unsigned char) ((appStatus >> 8) & 0xff);
- body.appStatusB0 = (unsigned char) ((appStatus ) & 0xff);
- body.protocolStatus = (unsigned char) protocolStatus;
- memset(body.reserved, 0, sizeof(body.reserved));
- return body;
-}
-
-/*
- *----------------------------------------------------------------------
- *
- * MakeUnknownTypeBody --
- *
- * Constructs an FCGI_MakeUnknownTypeBody struct.
- *
- *----------------------------------------------------------------------
- */
-static FCGI_UnknownTypeBody MakeUnknownTypeBody(
- int type)
-{
- FCGI_UnknownTypeBody body;
- body.type = (unsigned char) type;
- memset(body.reserved, 0, sizeof(body.reserved));
- return body;
-}
-
-/*
- *----------------------------------------------------------------------
- *
- * AlignInt8 --
- *
- * Returns the smallest integer greater than or equal to n
- * that's a multiple of 8.
- *
- *----------------------------------------------------------------------
- */
-static int AlignInt8(unsigned n) {
- return (n + 7) & (UINT_MAX - 7);
-}
-
-/*
- *----------------------------------------------------------------------
- *
- * AlignPtr8 --
- *
- * Returns the smallest pointer greater than or equal to p
- * that's a multiple of 8.
- *
- *----------------------------------------------------------------------
- */
-static unsigned char *AlignPtr8(unsigned char *p) {
- unsigned long u = (unsigned long) p;
- u = ((u + 7) & (ULONG_MAX - 7)) - u;
- return p + u;
-}
-
-
-/*
- * State associated with a stream
- */
-typedef struct FCGX_Stream_Data {
- unsigned char *buff; /* buffer after alignment */
- int bufflen; /* number of bytes buff can store */
- unsigned char *mBuff; /* buffer as returned by Malloc */
- unsigned char *buffStop; /* reader: last valid byte + 1 of entire buffer.
- * stop generally differs from buffStop for
- * readers because of record structure.
- * writer: buff + bufflen */
- int type; /* reader: FCGI_PARAMS or FCGI_STDIN
- * writer: FCGI_STDOUT or FCGI_STDERR */
- int eorStop; /* reader: stop stream at end-of-record */
- int skip; /* reader: don't deliver content bytes */
- int contentLen; /* reader: bytes of unread content */
- int paddingLen; /* reader: bytes of unread padding */
- int isAnythingWritten; /* writer: data has been written to ipcFd */
- int rawWrite; /* writer: write data without stream headers */
- FCGX_Request *reqDataPtr; /* request data not specific to one stream */
-} FCGX_Stream_Data;
-
-/*
- *----------------------------------------------------------------------
- *
- * WriteCloseRecords --
- *
- * Writes an EOF record for the stream content if necessary.
- * If this is the last writer to close, writes an FCGI_END_REQUEST
- * record.
- *
- *----------------------------------------------------------------------
- */
-static void WriteCloseRecords(struct FCGX_Stream *stream)
-{
- FCGX_Stream_Data *data = (FCGX_Stream_Data *)stream->data;
- /*
- * Enter rawWrite mode so final records won't be encapsulated as
- * stream data.
- */
- data->rawWrite = TRUE;
- /*
- * Generate EOF for stream content if needed.
- */
- if(!(data->type == FCGI_STDERR
- && stream->wrNext == data->buff
- && !data->isAnythingWritten)) {
- FCGI_Header header;
- header = MakeHeader(data->type, data->reqDataPtr->requestId, 0, 0);
- FCGX_PutStr((char *) &header, sizeof(header), stream);
- };
- /*
- * Generate FCGI_END_REQUEST record if needed.
- */
- if(data->reqDataPtr->nWriters == 1) {
- FCGI_EndRequestRecord endRequestRecord;
- endRequestRecord.header = MakeHeader(FCGI_END_REQUEST,
- data->reqDataPtr->requestId,
- sizeof(endRequestRecord.body), 0);
- endRequestRecord.body = MakeEndRequestBody(
- data->reqDataPtr->appStatus, FCGI_REQUEST_COMPLETE);
- FCGX_PutStr((char *) &endRequestRecord,
- sizeof(endRequestRecord), stream);
- }
- data->reqDataPtr->nWriters--;
-}
-
-
-
-static int write_it_all(int fd, char *buf, int len)
-{
- int wrote;
-
- while (len) {
- wrote = OS_Write(fd, buf, len);
- if (wrote < 0)
- return wrote;
- len -= wrote;
- buf += wrote;
- }
- return len;
-}
-
-/*
- *----------------------------------------------------------------------
- *
- * EmptyBuffProc --
- *
- * Encapsulates any buffered stream content in a FastCGI
- * record. Writes the data, making the buffer empty.
- *
- *----------------------------------------------------------------------
- */
-static void EmptyBuffProc(struct FCGX_Stream *stream, int doClose)
-{
- FCGX_Stream_Data *data = (FCGX_Stream_Data *)stream->data;
- int cLen, eLen;
- /*
- * If the buffer contains stream data, fill in the header.
- * Pad the record to a multiple of 8 bytes in length. Padding
- * can't overflow the buffer because the buffer is a multiple
- * of 8 bytes in length. If the buffer contains no stream
- * data, reclaim the space reserved for the header.
- */
- if(!data->rawWrite) {
- cLen = stream->wrNext - data->buff - sizeof(FCGI_Header);
- if(cLen > 0) {
- eLen = AlignInt8(cLen);
- /*
- * Giving the padding a well-defined value keeps Purify happy.
- */
- memset(stream->wrNext, 0, eLen - cLen);
- stream->wrNext += eLen - cLen;
- *((FCGI_Header *) data->buff)
- = MakeHeader(data->type,
- data->reqDataPtr->requestId, cLen, eLen - cLen);
- } else {
- stream->wrNext = data->buff;
- }
- }
- if(doClose) {
- WriteCloseRecords(stream);
- };
- if (stream->wrNext != data->buff) {
- data->isAnythingWritten = TRUE;
- if (write_it_all(data->reqDataPtr->ipcFd, (char *)data->buff, stream->wrNext - data->buff) < 0) {
- SetError(stream, OS_Errno);
- return;
- }
- stream->wrNext = data->buff;
- }
- /*
- * The buffer is empty.
- */
- if(!data->rawWrite) {
- stream->wrNext += sizeof(FCGI_Header);
- }
-}
-
-/*
- * Return codes for Process* functions
- */
-#define STREAM_RECORD 0
-#define SKIP 1
-#define BEGIN_RECORD 2
-#define MGMT_RECORD 3
-
-/*
- *----------------------------------------------------------------------
- *
- * ProcessManagementRecord --
- *
- * Reads and responds to a management record. The only type of
- * management record this library understands is FCGI_GET_VALUES.
- * The only variables that this library's FCGI_GET_VALUES
- * understands are FCGI_MAX_CONNS, FCGI_MAX_REQS, and FCGI_MPXS_CONNS.
- * Ignore other FCGI_GET_VALUES variables; respond to other
- * management records with a FCGI_UNKNOWN_TYPE record.
- *
- *----------------------------------------------------------------------
- */
-static int ProcessManagementRecord(int type, FCGX_Stream *stream)
-{
- FCGX_Stream_Data *data = (FCGX_Stream_Data *)stream->data;
- ParamsPtr paramsPtr = NewParams(3);
- char **pPtr;
- char response[64]; /* 64 = 8 + 3*(1+1+14+1)* + padding */
- char *responseP = &response[FCGI_HEADER_LEN];
- char *name, value = '\0';
- int len, paddedLen;
- if(type == FCGI_GET_VALUES) {
- ReadParams(paramsPtr, stream);
- if((FCGX_GetError(stream) != 0) || (data->contentLen != 0)) {
- FreeParams(&paramsPtr);
- return FCGX_PROTOCOL_ERROR;
- }
- for (pPtr = paramsPtr->vec; pPtr < paramsPtr->cur; pPtr++) {
- name = *pPtr;
- *(strchr(name, '=')) = '\0';
- if(strcmp(name, FCGI_MAX_CONNS) == 0) {
- value = '1';
- } else if(strcmp(name, FCGI_MAX_REQS) == 0) {
- value = '1';
- } else if(strcmp(name, FCGI_MPXS_CONNS) == 0) {
- value = '0';
- } else {
- name = NULL;
- }
- if(name != NULL) {
- len = strlen(name);
- sprintf(responseP, "%c%c%s%c", len, 1, name, value);
- responseP += len + 3;
- }
- }
- len = responseP - &response[FCGI_HEADER_LEN];
- paddedLen = AlignInt8(len);
- *((FCGI_Header *) response)
- = MakeHeader(FCGI_GET_VALUES_RESULT, FCGI_NULL_REQUEST_ID,
- len, paddedLen - len);
- FreeParams(&paramsPtr);
- } else {
- paddedLen = len = sizeof(FCGI_UnknownTypeBody);
- ((FCGI_UnknownTypeRecord *) response)->header
- = MakeHeader(FCGI_UNKNOWN_TYPE, FCGI_NULL_REQUEST_ID,
- len, 0);
- ((FCGI_UnknownTypeRecord *) response)->body
- = MakeUnknownTypeBody(type);
- }
- if (write_it_all(data->reqDataPtr->ipcFd, response, FCGI_HEADER_LEN + paddedLen) < 0) {
- SetError(stream, OS_Errno);
- return -1;
- }
-
- return MGMT_RECORD;
-}
-
-/*
- *----------------------------------------------------------------------
- *
- * ProcessBeginRecord --
- *
- * Reads an FCGI_BEGIN_REQUEST record.
- *
- * Results:
- * BEGIN_RECORD for normal return. FCGX_PROTOCOL_ERROR for
- * protocol error. SKIP for attempt to multiplex
- * connection. -1 for error from write (errno in stream).
- *
- * Side effects:
- * In case of BEGIN_RECORD return, stores requestId, role,
- * keepConnection values, and sets isBeginProcessed = TRUE.
- *
- *----------------------------------------------------------------------
- */
-static int ProcessBeginRecord(int requestId, FCGX_Stream *stream)
-{
- FCGX_Stream_Data *data = (FCGX_Stream_Data *)stream->data;
- FCGI_BeginRequestBody body;
- if(requestId == 0 || data->contentLen != sizeof(body)) {
- return FCGX_PROTOCOL_ERROR;
- }
- if(data->reqDataPtr->isBeginProcessed) {
- /*
- * The Web server is multiplexing the connection. This library
- * doesn't know how to handle multiplexing, so respond with
- * FCGI_END_REQUEST{protocolStatus = FCGI_CANT_MPX_CONN}
- */
- FCGI_EndRequestRecord endRequestRecord;
- endRequestRecord.header = MakeHeader(FCGI_END_REQUEST,
- requestId, sizeof(endRequestRecord.body), 0);
- endRequestRecord.body
- = MakeEndRequestBody(0, FCGI_CANT_MPX_CONN);
- if (write_it_all(data->reqDataPtr->ipcFd, (char *)&endRequestRecord, sizeof(endRequestRecord)) < 0) {
- SetError(stream, OS_Errno);
- return -1;
- }
-
- return SKIP;
- }
- /*
- * Accept this new request. Read the record body.
- */
- data->reqDataPtr->requestId = requestId;
- if(FCGX_GetStr((char *) &body, sizeof(body), stream)
- != sizeof(body)) {
- return FCGX_PROTOCOL_ERROR;
- }
- data->reqDataPtr->keepConnection = (body.flags & FCGI_KEEP_CONN);
- data->reqDataPtr->role = (body.roleB1 << 8) + body.roleB0;
- data->reqDataPtr->isBeginProcessed = TRUE;
- return BEGIN_RECORD;
-}
-
-/*
- *----------------------------------------------------------------------
- *
- * ProcessHeader --
- *
- * Interprets FCGI_Header. Processes FCGI_BEGIN_REQUEST and
- * management records here; extracts information from stream
- * records (FCGI_PARAMS, FCGI_STDIN) into stream.
- *
- * Results:
- * >= 0 for a normal return, < 0 for error
- *
- * Side effects:
- * XXX: Many (more than there used to be).
- * If !stream->isRequestIdSet, ProcessHeader initializes
- * stream->requestId from header and sets stream->isRequestIdSet
- * to TRUE. ProcessHeader also sets stream->contentLen to header's
- * contentLength, and sets stream->paddingLen to the header's
- * paddingLength.
- *
- *----------------------------------------------------------------------
- */
-static int ProcessHeader(FCGI_Header header, FCGX_Stream *stream)
-{
- FCGX_Stream_Data *data = (FCGX_Stream_Data *)stream->data;
- int requestId;
- if(header.version != FCGI_VERSION_1) {
- return FCGX_UNSUPPORTED_VERSION;
- }
- requestId = (header.requestIdB1 << 8)
- + header.requestIdB0;
- data->contentLen = (header.contentLengthB1 << 8)
- + header.contentLengthB0;
- data->paddingLen = header.paddingLength;
- if(header.type == FCGI_BEGIN_REQUEST) {
- return ProcessBeginRecord(requestId, stream);
- }
- if(requestId == FCGI_NULL_REQUEST_ID) {
- return ProcessManagementRecord(header.type, stream);
- }
- if(requestId != data->reqDataPtr->requestId) {
- return SKIP;
- }
- if(header.type != data->type) {
- return FCGX_PROTOCOL_ERROR;
- }
- return STREAM_RECORD;
-}
-
-/*
- *----------------------------------------------------------------------
- *
- * FillBuffProc --
- *
- * Reads bytes from the ipcFd, supplies bytes to a stream client.
- *
- *----------------------------------------------------------------------
- */
-static void FillBuffProc(FCGX_Stream *stream)
-{
- FCGX_Stream_Data *data = (FCGX_Stream_Data *)stream->data;
- FCGI_Header header;
- int headerLen = 0;
- int status, count;
-
- for (;;) {
- /*
- * If data->buff is empty, do a read.
- */
- if(stream->rdNext == data->buffStop) {
- count = OS_Read(data->reqDataPtr->ipcFd, (char *)data->buff,
- data->bufflen);
- if(count <= 0) {
- SetError(stream, (count == 0 ? FCGX_PROTOCOL_ERROR : OS_Errno));
- return;
- }
- stream->rdNext = data->buff;
- data->buffStop = data->buff + count;
- }
- /*
- * Now data->buff is not empty. If the current record contains
- * more content bytes, deliver all that are present in data->buff.
- */
- if(data->contentLen > 0) {
- count = min(data->contentLen, data->buffStop - stream->rdNext);
- data->contentLen -= count;
- if(!data->skip) {
- stream->wrNext = stream->stop = stream->rdNext + count;
- return;
- } else {
- stream->rdNext += count;
- if(data->contentLen > 0) {
- continue;
- } else {
- data->skip = FALSE;
- }
- }
- }
- /*
- * If the current record (whose content has been fully consumed by
- * the client) was padded, skip over the padding bytes.
- */
- if(data->paddingLen > 0) {
- count = min(data->paddingLen, data->buffStop - stream->rdNext);
- data->paddingLen -= count;
- stream->rdNext += count;
- if(data->paddingLen > 0) {
- continue;
- }
- }
- /*
- * All done with the current record, including the padding.
- * If we're in a recursive call from ProcessHeader, deliver EOF.
- */
- if(data->eorStop) {
- stream->stop = stream->rdNext;
- stream->isClosed = TRUE;
- return;
- }
- /*
- * Fill header with bytes from the input buffer.
- */
- count = min((int)sizeof(header) - headerLen,
- data->buffStop - stream->rdNext);
- memcpy(((char *)(&header)) + headerLen, stream->rdNext, count);
- headerLen += count;
- stream->rdNext += count;
- if(headerLen < sizeof(header)) {
- continue;
- };
- headerLen = 0;
- /*
- * Interpret header. eorStop prevents ProcessHeader from reading
- * past the end-of-record when using stream to read content.
- */
- data->eorStop = TRUE;
- stream->stop = stream->rdNext;
- status = ProcessHeader(header, stream);
- data->eorStop = FALSE;
- stream->isClosed = FALSE;
- switch(status) {
- case STREAM_RECORD:
- /*
- * If this stream record header marked the end of stream
- * data deliver EOF to the stream client, otherwise loop
- * and deliver data.
- *
- * XXX: If this is final stream and
- * stream->rdNext != data->buffStop, buffered
- * data is next request (server pipelining)?
- */
- if(data->contentLen == 0) {
- stream->wrNext = stream->stop = stream->rdNext;
- stream->isClosed = TRUE;
- return;
- }
- break;
- case SKIP:
- data->skip = TRUE;
- break;
- case BEGIN_RECORD:
- /*
- * If this header marked the beginning of a new
- * request, return role information to caller.
- */
- return;
- break;
- case MGMT_RECORD:
- break;
- default:
- ASSERT(status < 0);
- SetError(stream, status);
- return;
- break;
- }
- }
-}
-
-/*
- *----------------------------------------------------------------------
- *
- * NewStream --
- *
- * Creates a stream to read or write from an open ipcFd.
- * The stream performs reads/writes of up to bufflen bytes.
- *
- *----------------------------------------------------------------------
- */
-static FCGX_Stream *NewStream(
- FCGX_Request *reqDataPtr, int bufflen, int isReader, int streamType)
-{
- /*
- * XXX: It would be a lot cleaner to have a NewStream that only
- * knows about the type FCGX_Stream, with all other
- * necessary data passed in. It appears that not just
- * data and the two procs are needed for initializing stream,
- * but also data->buff and data->buffStop. This has implications
- * for procs that want to swap buffers, too.
- */
- FCGX_Stream *stream = (FCGX_Stream *)Malloc(sizeof(FCGX_Stream));
- FCGX_Stream_Data *data = (FCGX_Stream_Data *)Malloc(sizeof(FCGX_Stream_Data));
- data->reqDataPtr = reqDataPtr;
- bufflen = AlignInt8(min(max(bufflen, 32), FCGI_MAX_LENGTH + 1));
- data->bufflen = bufflen;
- data->mBuff = (unsigned char *)Malloc(bufflen);
- data->buff = AlignPtr8(data->mBuff);
- if(data->buff != data->mBuff) {
- data->bufflen -= 8;
- }
- if(isReader) {
- data->buffStop = data->buff;
- } else {
- data->buffStop = data->buff + data->bufflen;
- }
- data->type = streamType;
- data->eorStop = FALSE;
- data->skip = FALSE;
- data->contentLen = 0;
- data->paddingLen = 0;
- data->isAnythingWritten = FALSE;
- data->rawWrite = FALSE;
-
- stream->data = data;
- stream->isReader = isReader;
- stream->isClosed = FALSE;
- stream->wasFCloseCalled = FALSE;
- stream->FCGI_errno = 0;
- if(isReader) {
- stream->fillBuffProc = FillBuffProc;
- stream->emptyBuffProc = NULL;
- stream->rdNext = data->buff;
- stream->stop = stream->rdNext;
- stream->stopUnget = data->buff;
- stream->wrNext = stream->stop;
- } else {
- stream->fillBuffProc = NULL;
- stream->emptyBuffProc = EmptyBuffProc;
- stream->wrNext = data->buff + sizeof(FCGI_Header);
- stream->stop = data->buffStop;
- stream->stopUnget = NULL;
- stream->rdNext = stream->stop;
- }
- return stream;
-}
-
-/*
- *----------------------------------------------------------------------
- *
- * FCGX_FreeStream --
- *
- * Frees all storage allocated when *streamPtr was created,
- * and nulls out *streamPtr.
- *
- *----------------------------------------------------------------------
- */
-void FCGX_FreeStream(FCGX_Stream **streamPtr)
-{
- _FCGX_FreeStream(streamPtr, TRUE);
-}
-
-void _FCGX_FreeStream(FCGX_Stream **streamPtr, int freeData)
-{
- FCGX_Stream *stream = *streamPtr;
- FCGX_Stream_Data *data;
- if(stream == NULL) {
- return;
- }
- data = (FCGX_Stream_Data *)stream->data;
- if (freeData && data->reqDataPtr) free(data->reqDataPtr);
- data->reqDataPtr = NULL;
- free(data->mBuff);
- free(data);
- free(stream);
- *streamPtr = NULL;
-}
-
-/*
- *----------------------------------------------------------------------
- *
- * SetReaderType --
- *
- * Re-initializes the stream to read data of the specified type.
- *
- *----------------------------------------------------------------------
- */
-static FCGX_Stream *SetReaderType(FCGX_Stream *stream, int streamType)
-{
- FCGX_Stream_Data *data = (FCGX_Stream_Data *)stream->data;
- ASSERT(stream->isReader);
- data->type = streamType;
- data->eorStop = FALSE;
- data->skip = FALSE;
- data->contentLen = 0;
- data->paddingLen = 0;
- stream->wrNext = stream->stop = stream->rdNext;
- stream->isClosed = FALSE;
- return stream;
-}
-
-/*
- *----------------------------------------------------------------------
- *
- * NewReader --
- *
- * Creates a stream to read streamType records for the given
- * request. The stream performs OS reads of up to bufflen bytes.
- *
- *----------------------------------------------------------------------
- */
-static FCGX_Stream *NewReader(FCGX_Request *reqDataPtr, int bufflen, int streamType)
-{
- return NewStream(reqDataPtr, bufflen, TRUE, streamType);
-}
-
-/*
- *----------------------------------------------------------------------
- *
- * NewWriter --
- *
- * Creates a stream to write streamType FastCGI records, using
- * the ipcFd and RequestId contained in *reqDataPtr.
- * The stream performs OS writes of up to bufflen bytes.
- *
- *----------------------------------------------------------------------
- */
-static FCGX_Stream *NewWriter(FCGX_Request *reqDataPtr, int bufflen, int streamType)
-{
- return NewStream(reqDataPtr, bufflen, FALSE, streamType);
-}
-
-/*
- *----------------------------------------------------------------------
- *
- * FCGX_CreateWriter --
- *
- * Creates a stream to write streamType FastCGI records, using
- * the given ipcFd and request Id. This function is provided
- * for use by cgi-fcgi. In order to be defensive against misuse,
- * this function leaks a little storage; cgi-fcgi doesn't care.
- *
- *----------------------------------------------------------------------
- */
-FCGX_Stream *FCGX_CreateWriter(
- int ipcFd,
- int requestId,
- int bufflen,
- int streamType)
-{
- FCGX_Request *reqDataPtr = (FCGX_Request *)Malloc(sizeof(FCGX_Request));
- reqDataPtr->ipcFd = ipcFd;
- reqDataPtr->requestId = requestId;
- /*
- * Suppress writing an FCGI_END_REQUEST record.
- */
- reqDataPtr->nWriters = 2;
- return NewWriter(reqDataPtr, bufflen, streamType);
-}
-
-/*
- *======================================================================
- * Control
- *======================================================================
- */
-
-/*
- *----------------------------------------------------------------------
- *
- * FCGX_IsCGI --
- *
- * This routine determines if the process is running as a CGI or
- * FastCGI process. The distinction is made by determining whether
- * FCGI_LISTENSOCK_FILENO is a listener ipcFd or the end of a
- * pipe (ie. standard in).
- *
- * Results:
- * TRUE if the process is a CGI process, FALSE if FastCGI.
- *
- *----------------------------------------------------------------------
- */
-int FCGX_IsCGI(void)
-{
- if (isFastCGI != -1) {
- return !isFastCGI;
- }
-
- if (!libInitialized) {
- int rc = FCGX_Init();
- if (rc) {
- /* exit() isn't great, but hey */
- /* exit((rc < 0) ? rc : -rc); */
- return 0;
- }
- }
-
- isFastCGI = OS_IsFcgi(FCGI_LISTENSOCK_FILENO);
-
- return !isFastCGI;
-}
-
-/*
- *----------------------------------------------------------------------
- *
- * FCGX_Finish --
- *
- * Finishes the current request from the HTTP server.
- *
- * Side effects:
- *
- * Finishes the request accepted by (and frees any
- * storage allocated by) the previous call to FCGX_Accept.
- *
- * DO NOT retain pointers to the envp array or any strings
- * contained in it (e.g. to the result of calling FCGX_GetParam),
- * since these will be freed by the next call to FCGX_Finish
- * or FCGX_Accept.
- *
- *----------------------------------------------------------------------
- */
-
-void FCGX_Finish(void)
-{
- FCGX_Finish_r(&the_request);
-}
-
-/*
- *----------------------------------------------------------------------
- *
- * FCGX_Finish_r --
- *
- * Finishes the current request from the HTTP server.
- *
- * Side effects:
- *
- * Finishes the request accepted by (and frees any
- * storage allocated by) the previous call to FCGX_Accept.
- *
- * DO NOT retain pointers to the envp array or any strings
- * contained in it (e.g. to the result of calling FCGX_GetParam),
- * since these will be freed by the next call to FCGX_Finish
- * or FCGX_Accept.
- *
- *----------------------------------------------------------------------
- */
-void FCGX_Finish_r(FCGX_Request *reqDataPtr)
-{
- int close;
-
- if (reqDataPtr == NULL) {
- return;
- }
-
- close = !reqDataPtr->keepConnection;
-
- /* This should probably use a 'status' member instead of 'in' */
- if (reqDataPtr->in) {
- close |= FCGX_FClose(reqDataPtr->err);
- close |= FCGX_FClose(reqDataPtr->out);
-
- close |= FCGX_GetError(reqDataPtr->in);
- }
-
- FCGX_Free(reqDataPtr, close);
-}
-
-void FCGX_Free(FCGX_Request * request, int close)
-{
- if (request == NULL)
- return;
-
- _FCGX_FreeStream(&request->in, FALSE);
- _FCGX_FreeStream(&request->out, FALSE);
- _FCGX_FreeStream(&request->err, FALSE);
- FreeParams(&request->paramsPtr);
- request->envp = NULL;
-
- if (close) {
- OS_IpcClose(request->ipcFd);
- request->ipcFd = -1;
- }
-}
-
-int FCGX_OpenSocket(const char *path, int backlog)
-{
- int rc = OS_CreateLocalIpcFd(path, backlog, 1);
- if (rc == FCGI_LISTENSOCK_FILENO && isFastCGI == 0) {
- /* XXX probably need to call OS_LibInit() again for Win */
- isFastCGI = 1;
- }
- return rc;
-}
-
-int FCGX_InitRequest(FCGX_Request *request, int sock, int flags)
-{
- memset(request, 0, sizeof(FCGX_Request));
-
- /* @@@ Should check that sock is open and listening */
- request->listen_sock = sock;
-
- /* @@@ Should validate against "known" flags */
- request->flags = flags;
-
- request->ipcFd = -1;
-
- return 0;
-}
-
-/*
- *----------------------------------------------------------------------
- *
- * FCGX_Init --
- *
- * Initilize the FCGX library. This is called by FCGX_Accept()
- * but must be called by the user when using FCGX_Accept_r().
- *
- * Results:
- * 0 for successful call.
- *
- *----------------------------------------------------------------------
- */
-int FCGX_Init(void)
-{
- char *p;
-
- if (libInitialized) {
- return 0;
- }
-
- FCGX_InitRequest(&the_request, FCGI_LISTENSOCK_FILENO, 0);
-
- if (OS_LibInit(NULL) == -1) {
- return OS_Errno ? OS_Errno : -9997;
- }
-
- p = getenv("FCGI_WEB_SERVER_ADDRS");
- webServerAddressList = p ? StringCopy(p) : NULL;
-
- libInitialized = 1;
- return 0;
-}
-
-/*
- *----------------------------------------------------------------------
- *
- * FCGX_Accept --
- *
- * Accepts a new request from the HTTP server.
- *
- * Results:
- * 0 for successful call, -1 for error.
- *
- * Side effects:
- *
- * Finishes the request accepted by (and frees any
- * storage allocated by) the previous call to FCGX_Accept.
- * Creates input, output, and error streams and
- * assigns them to *in, *out, and *err respectively.
- * Creates a parameters data structure to be accessed
- * via getenv(3) (if assigned to environ) or by FCGX_GetParam
- * and assigns it to *envp.
- *
- * DO NOT retain pointers to the envp array or any strings
- * contained in it (e.g. to the result of calling FCGX_GetParam),
- * since these will be freed by the next call to FCGX_Finish
- * or FCGX_Accept.
- *
- *----------------------------------------------------------------------
- */
-
-int FCGX_Accept(
- FCGX_Stream **in,
- FCGX_Stream **out,
- FCGX_Stream **err,
- FCGX_ParamArray *envp)
-{
- int rc;
-
- if (! libInitialized) {
- rc = FCGX_Init();
- if (rc) {
- return rc;
- }
- }
-
- rc = FCGX_Accept_r(&the_request);
-
- *in = the_request.in;
- *out = the_request.out;
- *err = the_request.err;
- *envp = the_request.envp;
-
- return rc;
-}
-
-/*
- *----------------------------------------------------------------------
- *
- * FCGX_Accept_r --
- *
- * Accepts a new request from the HTTP server.
- *
- * Results:
- * 0 for successful call, -1 for error.
- *
- * Side effects:
- *
- * Finishes the request accepted by (and frees any
- * storage allocated by) the previous call to FCGX_Accept.
- * Creates input, output, and error streams and
- * assigns them to *in, *out, and *err respectively.
- * Creates a parameters data structure to be accessed
- * via getenv(3) (if assigned to environ) or by FCGX_GetParam
- * and assigns it to *envp.
- *
- * DO NOT retain pointers to the envp array or any strings
- * contained in it (e.g. to the result of calling FCGX_GetParam),
- * since these will be freed by the next call to FCGX_Finish
- * or FCGX_Accept.
- *
- *----------------------------------------------------------------------
- */
-int FCGX_Accept_r(FCGX_Request *reqDataPtr)
-{
- if (!libInitialized) {
- return -9998;
- }
-
- /* Finish the current request, if any. */
- FCGX_Finish_r(reqDataPtr);
-
- for (;;) {
- /*
- * If a connection isn't open, accept a new connection (blocking).
- * If an OS error occurs in accepting the connection,
- * return -1 to the caller, who should exit.
- */
- if (reqDataPtr->ipcFd < 0) {
- int fail_on_intr = reqDataPtr->flags & FCGI_FAIL_ACCEPT_ON_INTR;
-
- reqDataPtr->ipcFd = OS_Accept(reqDataPtr->listen_sock, fail_on_intr, webServerAddressList);
- if (reqDataPtr->ipcFd < 0) {
- return (errno > 0) ? (0 - errno) : -9999;
- }
- }
- /*
- * A connection is open. Read from the connection in order to
- * get the request's role and environment. If protocol or other
- * errors occur, close the connection and try again.
- */
- reqDataPtr->isBeginProcessed = FALSE;
- reqDataPtr->in = NewReader(reqDataPtr, 8192, 0);
- FillBuffProc(reqDataPtr->in);
- if(!reqDataPtr->isBeginProcessed) {
- goto TryAgain;
- }
- {
- char *roleStr;
- switch(reqDataPtr->role) {
- case FCGI_RESPONDER:
- roleStr = "FCGI_ROLE=RESPONDER";
- break;
- case FCGI_AUTHORIZER:
- roleStr = "FCGI_ROLE=AUTHORIZER";
- break;
- case FCGI_FILTER:
- roleStr = "FCGI_ROLE=FILTER";
- break;
- default:
- goto TryAgain;
- }
- reqDataPtr->paramsPtr = NewParams(30);
- PutParam(reqDataPtr->paramsPtr, StringCopy(roleStr));
- }
- SetReaderType(reqDataPtr->in, FCGI_PARAMS);
- if(ReadParams(reqDataPtr->paramsPtr, reqDataPtr->in) >= 0) {
- /*
- * Finished reading the environment. No errors occurred, so
- * leave the connection-retry loop.
- */
- break;
- }
-
- /*
- * Close the connection and try again.
- */
-TryAgain:
- FCGX_Free(reqDataPtr, 1);
-
- } /* for (;;) */
- /*
- * Build the remaining data structures representing the new
- * request and return successfully to the caller.
- */
- SetReaderType(reqDataPtr->in, FCGI_STDIN);
- reqDataPtr->out = NewWriter(reqDataPtr, 8192, FCGI_STDOUT);
- reqDataPtr->err = NewWriter(reqDataPtr, 512, FCGI_STDERR);
- reqDataPtr->nWriters = 2;
- reqDataPtr->envp = reqDataPtr->paramsPtr->vec;
- return 0;
-}
-
-/*
- *----------------------------------------------------------------------
- *
- * FCGX_StartFilterData --
- *
- * stream is an input stream for a FCGI_FILTER request.
- * stream is positioned at EOF on FCGI_STDIN.
- * Repositions stream to the start of FCGI_DATA.
- * If the preconditions are not met (e.g. FCGI_STDIN has not
- * been read to EOF) sets the stream error code to
- * FCGX_CALL_SEQ_ERROR.
- *
- * Results:
- * 0 for a normal return, < 0 for error
- *
- *----------------------------------------------------------------------
- */
-
-int FCGX_StartFilterData(FCGX_Stream *stream)
-{
- FCGX_Stream_Data *data = (FCGX_Stream_Data *)stream->data;
- if(data->reqDataPtr->role != FCGI_FILTER
- || !stream->isReader
- || !stream->isClosed
- || data->type != FCGI_STDIN) {
- SetError(stream, FCGX_CALL_SEQ_ERROR);
- return -1;
- }
- SetReaderType(stream, FCGI_DATA);
- return 0;
-}
-
-/*
- *----------------------------------------------------------------------
- *
- * FCGX_SetExitStatus --
- *
- * Sets the exit status for stream's request. The exit status
- * is the status code the request would have exited with, had
- * the request been run as a CGI program. You can call
- * SetExitStatus several times during a request; the last call
- * before the request ends determines the value.
- *
- *----------------------------------------------------------------------
- */
-
-void FCGX_SetExitStatus(int status, FCGX_Stream *stream)
-{
- FCGX_Stream_Data *data = (FCGX_Stream_Data *)stream->data;
- data->reqDataPtr->appStatus = status;
-}
-
diff --git a/sapi/cgi/libfcgi/include/fastcgi.h b/sapi/cgi/libfcgi/include/fastcgi.h
deleted file mode 100644
index 36b4725ba1..0000000000
--- a/sapi/cgi/libfcgi/include/fastcgi.h
+++ /dev/null
@@ -1,136 +0,0 @@
-/*
- * fastcgi.h --
- *
- * Defines for the FastCGI protocol.
- *
- *
- * Copyright (c) 1995-1996 Open Market, Inc.
- *
- * See the file "LICENSE.TERMS" for information on usage and redistribution
- * of this file, and for a DISCLAIMER OF ALL WARRANTIES.
- *
- * $Id$
- */
-
-#ifndef _FASTCGI_H
-#define _FASTCGI_H
-
-/*
- * Listening socket file number
- */
-#define FCGI_LISTENSOCK_FILENO 0
-
-typedef struct {
- unsigned char version;
- unsigned char type;
- unsigned char requestIdB1;
- unsigned char requestIdB0;
- unsigned char contentLengthB1;
- unsigned char contentLengthB0;
- unsigned char paddingLength;
- unsigned char reserved;
-} FCGI_Header;
-
-#define FCGI_MAX_LENGTH 0xffff
-
-/*
- * Number of bytes in a FCGI_Header. Future versions of the protocol
- * will not reduce this number.
- */
-#define FCGI_HEADER_LEN 8
-
-/*
- * Value for version component of FCGI_Header
- */
-#define FCGI_VERSION_1 1
-
-/*
- * Values for type component of FCGI_Header
- */
-#define FCGI_BEGIN_REQUEST 1
-#define FCGI_ABORT_REQUEST 2
-#define FCGI_END_REQUEST 3
-#define FCGI_PARAMS 4
-#define FCGI_STDIN 5
-#define FCGI_STDOUT 6
-#define FCGI_STDERR 7
-#define FCGI_DATA 8
-#define FCGI_GET_VALUES 9
-#define FCGI_GET_VALUES_RESULT 10
-#define FCGI_UNKNOWN_TYPE 11
-#define FCGI_MAXTYPE (FCGI_UNKNOWN_TYPE)
-
-/*
- * Value for requestId component of FCGI_Header
- */
-#define FCGI_NULL_REQUEST_ID 0
-
-
-typedef struct {
- unsigned char roleB1;
- unsigned char roleB0;
- unsigned char flags;
- unsigned char reserved[5];
-} FCGI_BeginRequestBody;
-
-typedef struct {
- FCGI_Header header;
- FCGI_BeginRequestBody body;
-} FCGI_BeginRequestRecord;
-
-/*
- * Mask for flags component of FCGI_BeginRequestBody
- */
-#define FCGI_KEEP_CONN 1
-
-/*
- * Values for role component of FCGI_BeginRequestBody
- */
-#define FCGI_RESPONDER 1
-#define FCGI_AUTHORIZER 2
-#define FCGI_FILTER 3
-
-
-typedef struct {
- unsigned char appStatusB3;
- unsigned char appStatusB2;
- unsigned char appStatusB1;
- unsigned char appStatusB0;
- unsigned char protocolStatus;
- unsigned char reserved[3];
-} FCGI_EndRequestBody;
-
-typedef struct {
- FCGI_Header header;
- FCGI_EndRequestBody body;
-} FCGI_EndRequestRecord;
-
-/*
- * Values for protocolStatus component of FCGI_EndRequestBody
- */
-#define FCGI_REQUEST_COMPLETE 0
-#define FCGI_CANT_MPX_CONN 1
-#define FCGI_OVERLOADED 2
-#define FCGI_UNKNOWN_ROLE 3
-
-
-/*
- * Variable names for FCGI_GET_VALUES / FCGI_GET_VALUES_RESULT records
- */
-#define FCGI_MAX_CONNS "FCGI_MAX_CONNS"
-#define FCGI_MAX_REQS "FCGI_MAX_REQS"
-#define FCGI_MPXS_CONNS "FCGI_MPXS_CONNS"
-
-
-typedef struct {
- unsigned char type;
- unsigned char reserved[7];
-} FCGI_UnknownTypeBody;
-
-typedef struct {
- FCGI_Header header;
- FCGI_UnknownTypeBody body;
-} FCGI_UnknownTypeRecord;
-
-#endif /* _FASTCGI_H */
-
diff --git a/sapi/cgi/libfcgi/include/fcgi_config.h b/sapi/cgi/libfcgi/include/fcgi_config.h
deleted file mode 100644
index bb031a0bb7..0000000000
--- a/sapi/cgi/libfcgi/include/fcgi_config.h
+++ /dev/null
@@ -1,7 +0,0 @@
-/* hack workaround for libfcgi configure */
-#ifdef _WIN32
-#include "fcgi_config_win32.h"
-#else
-#include "php_config.h"
-#endif
-
diff --git a/sapi/cgi/libfcgi/include/fcgi_config_win32.h b/sapi/cgi/libfcgi/include/fcgi_config_win32.h
deleted file mode 100644
index a9ec224deb..0000000000
--- a/sapi/cgi/libfcgi/include/fcgi_config_win32.h
+++ /dev/null
@@ -1,108 +0,0 @@
-/* fcgi_config.h. Generated automatically by configure. */
-/* fcgi_config.h.in. Generated automatically from configure.in by autoheader. */
-
-/* Define if you have the <arpa/inet.h> header file. */
-#define HAVE_ARPA_INET_H 1
-
-/* Define if you have the <dlfcn.h> header file. */
-#define HAVE_DLFCN_H 1
-
-/* Define if there's a fileno() prototype in stdio.h */
-#define HAVE_FILENO_PROTO 1
-
-/* Define if the fpos_t typedef is in stdio.h */
-#define HAVE_FPOS 1
-
-/* Define if you have the <inttypes.h> header file. */
-#define HAVE_INTTYPES_H 1
-
-/* Define if you have the `dnet_stub' library (-ldnet_stub). */
-/* #undef HAVE_LIBDNET_STUB */
-
-/* Define if you have the `ieee' library (-lieee). */
-/* #undef HAVE_LIBIEEE */
-
-/* Define if you have the `nsl' library (-lnsl). */
-#define HAVE_LIBNSL 1
-
-/* Define if you have the pthread library */
-#define HAVE_LIBPTHREAD 1
-
-/* Define if you have the `resolv' library (-lresolv). */
-#define HAVE_LIBRESOLV 1
-
-/* Define if you have the `socket' library (-lsocket). */
-#define HAVE_LIBSOCKET 1
-
-/* Define if you have the <limits.h> header file. */
-#define HAVE_LIMITS_H 1
-
-/* Define if you have the <memory.h> header file. */
-#define HAVE_MEMORY_H 1
-
-/* Define if you have the <netdb.h> header file. */
-/* #define HAVE_NETDB_H 1 */
-
-/* Define if you have the <netinet/in.h> header file. */
-#define HAVE_NETINET_IN_H 1
-
-/* Define if sockaddr_un in sys/un.h contains a sun_len component */
-/* #undef HAVE_SOCKADDR_UN_SUN_LEN */
-
-/* Define if the socklen_t typedef is in sys/socket.h */
-/* #undef HAVE_SOCKLEN */
-
-/* Define if you have the <stdint.h> header file. */
-/* #undef HAVE_STDINT_H */
-
-/* Define if you have the <stdlib.h> header file. */
-#define HAVE_STDLIB_H 1
-
-/* Define if you have the `strerror' function. */
-#define HAVE_STRERROR 1
-
-/* Define if you have the <strings.h> header file. */
-#define HAVE_STRINGS_H 1
-
-/* Define if you have the <string.h> header file. */
-#define HAVE_STRING_H 1
-
-/* Define if you have the <sys/param.h> header file. */
-/* #define HAVE_SYS_PARAM_H 1 */
-
-/* Define if you have the <sys/socket.h> header file. */
-/*#define HAVE_SYS_SOCKET_H 1*/
-
-/* Define if you have the <sys/stat.h> header file. */
-#define HAVE_SYS_STAT_H 1
-
-/* Define if you have the <sys/time.h> header file. */
-/*#define HAVE_SYS_TIME_H 1*/
-
-/* Define if you have the <sys/types.h> header file. */
-#define HAVE_SYS_TYPES_H 1
-
-/* Define if you have the <unistd.h> header file. */
-/*#define HAVE_UNISTD_H 1*/
-
-/* Define if va_arg(arg, long double) crashes the compiler */
-/* #undef HAVE_VA_ARG_LONG_DOUBLE_BUG */
-
-/* Name of package */
-#define PACKAGE "fcgi"
-
-/* Define if you have the ANSI C header files. */
-#define STDC_HEADERS 1
-
-/* Define if cross-process locking is required by accept() */
-#define USE_LOCKING 1
-
-/* Version number of package */
-#define VERSION "2.2.2"
-
-/* Define to empty if `const' does not conform to ANSI C. */
-/* #undef const */
-
-/* Define as `__inline' if that's what the C compiler calls it, or to nothing
- if it is not supported. */
-/* #undef inline */
diff --git a/sapi/cgi/libfcgi/include/fcgi_config_x86.h b/sapi/cgi/libfcgi/include/fcgi_config_x86.h
deleted file mode 100644
index f56b3af75d..0000000000
--- a/sapi/cgi/libfcgi/include/fcgi_config_x86.h
+++ /dev/null
@@ -1,103 +0,0 @@
-/*
- * Default fcgi_config.h when building on WinNT (configure is not run).
- */
-
-/* Define if you have the <arpa/inet.h> header file. */
-#undef HAVE_ARPA_INET_H
-
-/* Define if there's a fileno() prototype in stdio.h */
-#undef HAVE_FILENO_PROTO
-
-/* Define if you have the <inttypes.h> header file. */
-#undef HAVE_INTTYPES_H
-
-/* Define if we have f{set,get}pos functions */
-#define HAVE_FPOS 1
-
-/* Define if you have the `dnet_stub' library (-ldnet_stub). */
-#undef HAVE_LIBDNET_STUB
-
-/* Define if you have the `ieee' library (-lieee). */
-#undef HAVE_LIBIEEE
-
-/* Define if you have the `nsl' library (-lnsl). */
-#undef HAVE_LIBNSL
-
-/* Define if you have the pthread library */
-#undef HAVE_LIBPTHREAD
-
-/* Define if you have the `resolv' library (-lresolv). */
-#undef HAVE_LIBRESOLV
-
-/* Define if you have the `socket' library (-lsocket). */
-#undef HAVE_LIBSOCKET
-
-/* Define if you have the <limits.h> header file. */
-#define HAVE_LIMITS_H 1
-
-/* Define if we need cross-process locking */
-#undef USE_LOCKING
-
-/* Define if you have the <memory.h> header file. */
-#undef HAVE_MEMORY_H
-
-/* Define if you have the <netdb.h> header file. */
-#undef HAVE_NETDB_H
-
-/* Define if you have the <netinet/in.h> header file. */
-#undef HAVE_NETINET_IN_H
-
-/* Define if sockaddr_un in sys/un.h contains a sun_len component */
-#undef HAVE_SOCKADDR_UN_SUN_LEN
-
-/* Define if the socklen_t typedef is in sys/socket.h */
-#undef HAVE_SOCKLEN
-
-/* Define if you have the <stdint.h> header file. */
-#undef HAVE_STDINT_H
-
-/* Define if you have the <stdlib.h> header file. */
-#undef HAVE_STDLIB_H
-
-/* Define if you have the `strerror' function. */
-#define HAVE_STRERROR 1
-
-/* Define if you have the <strings.h> header file. */
-#undef HAVE_STRINGS_H
-
-/* Define if you have the <string.h> header file. */
-#undef HAVE_STRING_H
-
-/* Define if you have the <sys/param.h> header file. */
-#undef HAVE_SYS_PARAM_H
-
-/* Define if you have the <sys/socket.h> header file. */
-#undef HAVE_SYS_SOCKET_H
-
-/* Define if you have the <sys/stat.h> header file. */
-#undef HAVE_SYS_STAT_H
-
-/* Define if you have the <sys/time.h> header file. */
-#undef HAVE_SYS_TIME_H
-
-/* Define if you have the <sys/types.h> header file. */
-#undef HAVE_SYS_TYPES_H
-
-/* Define if you have the <unistd.h> header file. */
-#undef HAVE_UNISTD_H
-
-/* Define if va_arg(arg, long double) crashes the compiler */
-#undef HAVE_VA_ARG_LONG_DOUBLE_BUG
-
-/* Define if you have the ANSI C header files. */
-#undef STDC_HEADERS
-
-/* Define to empty if `const' does not conform to ANSI C. */
-#undef const
-
-/* Define as `__inline' if that's what the C compiler calls it, or to nothing
- if it is not supported. */
-#undef inline
-
-/* Define to `int' if <sys/types.h> does not define. */
-#undef ssize_t
diff --git a/sapi/cgi/libfcgi/include/fcgi_stdio.h b/sapi/cgi/libfcgi/include/fcgi_stdio.h
deleted file mode 100644
index 518462b591..0000000000
--- a/sapi/cgi/libfcgi/include/fcgi_stdio.h
+++ /dev/null
@@ -1,249 +0,0 @@
-/*
- * fcgi_stdio.h --
- *
- * FastCGI-stdio compatibility package
- *
- *
- * Copyright (c) 1996 Open Market, Inc.
- *
- * See the file "LICENSE.TERMS" for information on usage and redistribution
- * of this file, and for a DISCLAIMER OF ALL WARRANTIES.
- *
- * $Id$
- */
-
-#ifndef _FCGI_STDIO
-#define _FCGI_STDIO 1
-
-#include <stdio.h>
-#include <sys/types.h>
-#include "fcgiapp.h"
-
-#if defined (c_plusplus) || defined (__cplusplus)
-extern "C" {
-#endif
-
-#ifndef DLLAPI
-#ifdef _WIN32
-#if defined(_LIB) || defined(FCGI_STATIC)
-#define DLLAPI
-#else
-#define DLLAPI __declspec(dllimport)
-#endif
-#else
-#define DLLAPI
-#endif
-#endif
-
-/*
- * Wrapper type for FILE
- */
-
-typedef struct {
- FILE *stdio_stream;
- FCGX_Stream *fcgx_stream;
-} FCGI_FILE;
-
-/*
- * The four new functions and two new macros
- */
-
-DLLAPI int FCGI_Accept(void);
-DLLAPI void FCGI_Finish(void);
-DLLAPI int FCGI_StartFilterData(void);
-DLLAPI void FCGI_SetExitStatus(int status);
-
-#define FCGI_ToFILE(fcgi_file) (fcgi_file->stdio_stream)
-#define FCGI_ToFcgiStream(fcgi_file) (fcgi_file->fcgx_stream)
-
-/*
- * Wrapper stdin, stdout, and stderr variables, set up by FCGI_Accept()
- */
-
-DLLAPI extern FCGI_FILE _fcgi_sF[];
-#define FCGI_stdin (&_fcgi_sF[0])
-#define FCGI_stdout (&_fcgi_sF[1])
-#define FCGI_stderr (&_fcgi_sF[2])
-
-/*
- * Wrapper function prototypes, grouped according to sections
- * of Harbison & Steele, "C: A Reference Manual," fourth edition,
- * Prentice-Hall, 1995.
- */
-
-DLLAPI void FCGI_perror(const char *str);
-
-DLLAPI FCGI_FILE *FCGI_fopen(const char *path, const char *mode);
-DLLAPI int FCGI_fclose(FCGI_FILE *fp);
-DLLAPI int FCGI_fflush(FCGI_FILE *fp);
-DLLAPI FCGI_FILE *FCGI_freopen(const char *path, const char *mode, FCGI_FILE *fp);
-
-DLLAPI int FCGI_setvbuf(FCGI_FILE *fp, char *buf, int bufmode, size_t size);
-DLLAPI void FCGI_setbuf(FCGI_FILE *fp, char *buf);
-
-DLLAPI int FCGI_fseek(FCGI_FILE *fp, long offset, int whence);
-DLLAPI int FCGI_ftell(FCGI_FILE *fp);
-DLLAPI void FCGI_rewind(FCGI_FILE *fp);
-#ifdef HAVE_FPOS
-DLLAPI int FCGI_fgetpos(FCGI_FILE *fp, fpos_t *pos);
-DLLAPI int FCGI_fsetpos(FCGI_FILE *fp, const fpos_t *pos);
-#endif
-DLLAPI int FCGI_fgetc(FCGI_FILE *fp);
-DLLAPI int FCGI_getchar(void);
-DLLAPI int FCGI_ungetc(int c, FCGI_FILE *fp);
-
-DLLAPI char *FCGI_fgets(char *str, int size, FCGI_FILE *fp);
-DLLAPI char *FCGI_gets(char *str);
-
-/*
- * Not yet implemented
- *
- * int FCGI_fscanf(FCGI_FILE *fp, const char *format, ...);
- * int FCGI_scanf(const char *format, ...);
- *
- */
-
-DLLAPI int FCGI_fputc(int c, FCGI_FILE *fp);
-DLLAPI int FCGI_putchar(int c);
-
-DLLAPI int FCGI_fputs(const char *str, FCGI_FILE *fp);
-DLLAPI int FCGI_puts(const char *str);
-
-DLLAPI int FCGI_fprintf(FCGI_FILE *fp, const char *format, ...);
-DLLAPI int FCGI_printf(const char *format, ...);
-
-DLLAPI int FCGI_vfprintf(FCGI_FILE *fp, const char *format, va_list ap);
-DLLAPI int FCGI_vprintf(const char *format, va_list ap);
-
-DLLAPI size_t FCGI_fread(void *ptr, size_t size, size_t nmemb, FCGI_FILE *fp);
-DLLAPI size_t FCGI_fwrite(void *ptr, size_t size, size_t nmemb, FCGI_FILE *fp);
-
-DLLAPI int FCGI_feof(FCGI_FILE *fp);
-DLLAPI int FCGI_ferror(FCGI_FILE *fp);
-DLLAPI void FCGI_clearerr(FCGI_FILE *fp);
-
-DLLAPI FCGI_FILE *FCGI_tmpfile(void);
-
-DLLAPI int FCGI_fileno(FCGI_FILE *fp);
-DLLAPI FCGI_FILE *FCGI_fdopen(int fd, const char *mode);
-DLLAPI FCGI_FILE *FCGI_popen(const char *cmd, const char *type);
-DLLAPI int FCGI_pclose(FCGI_FILE *);
-
-/*
- * The remaining definitions are for application programs,
- * not for fcgi_stdio.c
- */
-
-#ifndef NO_FCGI_DEFINES
-
-/*
- * Replace standard types, variables, and functions with FastCGI wrappers.
- * Use undef in case a macro is already defined.
- */
-
-#undef FILE
-#define FILE FCGI_FILE
-
-#undef stdin
-#define stdin FCGI_stdin
-#undef stdout
-#define stdout FCGI_stdout
-#undef stderr
-#define stderr FCGI_stderr
-
-#undef perror
-#define perror FCGI_perror
-
-#undef fopen
-#define fopen FCGI_fopen
-#undef fclose
-#define fclose FCGI_fclose
-#undef fflush
-#define fflush FCGI_fflush
-#undef freopen
-#define freopen FCGI_freopen
-
-#undef setvbuf
-#define setvbuf FCGI_setvbuf
-#undef setbuf
-#define setbuf FCGI_setbuf
-
-#undef fseek
-#define fseek FCGI_fseek
-#undef ftell
-#define ftell FCGI_ftell
-#undef rewind
-#define rewind FCGI_rewind
-#undef fgetpos
-#define fgetpos FCGI_fgetpos
-#undef fsetpos
-#define fsetpos FCGI_fsetpos
-
-#undef fgetc
-#define fgetc FCGI_fgetc
-#undef getc
-#define getc FCGI_fgetc
-#undef getchar
-#define getchar FCGI_getchar
-#undef ungetc
-#define ungetc FCGI_ungetc
-
-#undef fgets
-#define fgets FCGI_fgets
-#undef gets
-#define gets FCGI_gets
-
-#undef fputc
-#define fputc FCGI_fputc
-#undef putc
-#define putc FCGI_fputc
-#undef putchar
-#define putchar FCGI_putchar
-
-#undef fputs
-#define fputs FCGI_fputs
-#undef puts
-#define puts FCGI_puts
-
-#undef fprintf
-#define fprintf FCGI_fprintf
-#undef printf
-#define printf FCGI_printf
-
-#undef vfprintf
-#define vfprintf FCGI_vfprintf
-#undef vprintf
-#define vprintf FCGI_vprintf
-
-#undef fread
-#define fread FCGI_fread
-#undef fwrite
-#define fwrite FCGI_fwrite
-
-#undef feof
-#define feof FCGI_feof
-#undef ferror
-#define ferror FCGI_ferror
-#undef clearerr
-#define clearerr FCGI_clearerr
-
-#undef tmpfile
-#define tmpfile FCGI_tmpfile
-
-#undef fileno
-#define fileno FCGI_fileno
-#undef fdopen
-#define fdopen FCGI_fdopen
-#undef popen
-#define popen FCGI_popen
-#undef pclose
-#define pclose FCGI_pclose
-
-#endif /* NO_FCGI_DEFINES */
-
-#if defined (__cplusplus) || defined (c_plusplus)
-} /* terminate extern "C" { */
-#endif
-
-#endif /* _FCGI_STDIO */
-
diff --git a/sapi/cgi/libfcgi/include/fcgiapp.h b/sapi/cgi/libfcgi/include/fcgiapp.h
deleted file mode 100644
index 8e35e0776c..0000000000
--- a/sapi/cgi/libfcgi/include/fcgiapp.h
+++ /dev/null
@@ -1,640 +0,0 @@
-/*
- * fcgiapp.h --
- *
- * Definitions for FastCGI application server programs
- *
- *
- * Copyright (c) 1996 Open Market, Inc.
- *
- * See the file "LICENSE.TERMS" for information on usage and redistribution
- * of this file, and for a DISCLAIMER OF ALL WARRANTIES.
- *
- * $Id$
- */
-
-#ifndef _FCGIAPP_H
-#define _FCGIAPP_H
-
-/* Hack to see if we are building TCL - TCL needs varargs not stdarg */
-#ifndef TCL_LIBRARY
-#include <stdarg.h>
-#else
-#include <varargs.h>
-#endif
-
-#ifndef DLLAPI
-#ifdef _WIN32
-#if defined(_LIB) || defined(FCGI_STATIC)
-#define DLLAPI
-#else
-#define DLLAPI __declspec(dllimport)
-#endif
-#else
-#define DLLAPI
-#endif
-#endif
-
-#if defined (c_plusplus) || defined (__cplusplus)
-extern "C" {
-#endif
-
-/*
- * Error codes. Assigned to avoid conflict with EOF and errno(2).
- */
-#define FCGX_UNSUPPORTED_VERSION -2
-#define FCGX_PROTOCOL_ERROR -3
-#define FCGX_PARAMS_ERROR -4
-#define FCGX_CALL_SEQ_ERROR -5
-
-/*
- * This structure defines the state of a FastCGI stream.
- * Streams are modeled after the FILE type defined in stdio.h.
- * (We wouldn't need our own if platform vendors provided a
- * standard way to subclass theirs.)
- * The state of a stream is private and should only be accessed
- * by the procedures defined below.
- */
-typedef struct FCGX_Stream {
- unsigned char *rdNext; /* reader: first valid byte
- * writer: equals stop */
- unsigned char *wrNext; /* writer: first free byte
- * reader: equals stop */
- unsigned char *stop; /* reader: last valid byte + 1
- * writer: last free byte + 1 */
- unsigned char *stopUnget; /* reader: first byte of current buffer
- * fragment, for ungetc
- * writer: undefined */
- int isReader;
- int isClosed;
- int wasFCloseCalled;
- int FCGI_errno; /* error status */
- void (*fillBuffProc) (struct FCGX_Stream *stream);
- void (*emptyBuffProc) (struct FCGX_Stream *stream, int doClose);
- void *data;
-} FCGX_Stream;
-
-/*
- * An environment (as defined by environ(7)): A NULL-terminated array
- * of strings, each string having the form name=value.
- */
-typedef char **FCGX_ParamArray;
-
-/*
- * A vector of pointers representing the parameters received
- * by a FastCGI application server, with the vector's length
- * and last valid element so adding new parameters is efficient.
- */
-
-typedef struct Params {
- FCGX_ParamArray vec; /* vector of strings */
- int length; /* number of string vec can hold */
- char **cur; /* current item in vec; *cur == NULL */
-} Params;
-typedef Params *ParamsPtr;
-
-/*
- * FCGX_Request Flags
- *
- * Setting FCGI_FAIL_ACCEPT_ON_INTR prevents FCGX_Accept() from
- * restarting upon being interrupted.
- */
-#define FCGI_FAIL_ACCEPT_ON_INTR 1
-
-/*
- * FCGX_Request -- State associated with a request.
- *
- * Its exposed for API simplicity, I expect parts of it to change!
- */
-typedef struct FCGX_Request {
- int requestId; /* valid if isBeginProcessed */
- int role;
- FCGX_Stream *in;
- FCGX_Stream *out;
- FCGX_Stream *err;
- FCGX_ParamArray envp;
-
- /* Don't use anything below here */
-
- ParamsPtr paramsPtr;
- int ipcFd; /* < 0 means no connection */
- int isBeginProcessed; /* FCGI_BEGIN_REQUEST seen */
- int keepConnection; /* don't close ipcFd at end of request */
- int appStatus;
- int nWriters; /* number of open writers (0..2) */
- int flags;
- int listen_sock;
-} FCGX_Request;
-
-
-/*
- *======================================================================
- * Control
- *======================================================================
- */
-
-/*
- *----------------------------------------------------------------------
- *
- * FCGX_IsCGI --
- *
- * Returns TRUE iff this process appears to be a CGI process
- * rather than a FastCGI process.
- *
- *----------------------------------------------------------------------
- */
-DLLAPI int FCGX_IsCGI(void);
-
-/*
- *----------------------------------------------------------------------
- *
- * FCGX_Init --
- *
- * Initialize the FCGX library. Call in multi-threaded apps
- * before calling FCGX_Accept_r().
- *
- * Returns 0 upon success.
- *
- *----------------------------------------------------------------------
- */
-DLLAPI int FCGX_Init(void);
-
-/*
- *----------------------------------------------------------------------
- *
- * FCGX_OpenSocket --
- *
- * Create a FastCGI listen socket.
- *
- * path is the Unix domain socket (named pipe for WinNT), or a colon
- * followed by a port number. e.g. "/tmp/fastcgi/mysocket", ":5000"
- *
- * backlog is the listen queue depth used in the listen() call.
- *
- * Returns the socket's file descriptor or -1 on error.
- *
- *----------------------------------------------------------------------
- */
-DLLAPI int FCGX_OpenSocket(const char *path, int backlog);
-
-/*
- *----------------------------------------------------------------------
- *
- * FCGX_InitRequest --
- *
- * Initialize a FCGX_Request for use with FCGX_Accept_r().
- *
- * sock is a file descriptor returned by FCGX_OpenSocket() or 0 (default).
- * The only supported flag at this time is FCGI_FAIL_ON_INTR.
- *
- * Returns 0 upon success.
- *----------------------------------------------------------------------
- */
-DLLAPI int FCGX_InitRequest(FCGX_Request *request, int sock, int flags);
-
-/*
- *----------------------------------------------------------------------
- *
- * FCGX_Accept_r --
- *
- * Accept a new request (multi-thread safe). Be sure to call
- * FCGX_Init() first.
- *
- * Results:
- * 0 for successful call, -1 for error.
- *
- * Side effects:
- *
- * Finishes the request accepted by (and frees any
- * storage allocated by) the previous call to FCGX_Accept.
- * Creates input, output, and error streams and
- * assigns them to *in, *out, and *err respectively.
- * Creates a parameters data structure to be accessed
- * via getenv(3) (if assigned to environ) or by FCGX_GetParam
- * and assigns it to *envp.
- *
- * DO NOT retain pointers to the envp array or any strings
- * contained in it (e.g. to the result of calling FCGX_GetParam),
- * since these will be freed by the next call to FCGX_Finish
- * or FCGX_Accept.
- *
- * DON'T use the FCGX_Request, its structure WILL change.
- *
- *----------------------------------------------------------------------
- */
-DLLAPI int FCGX_Accept_r(FCGX_Request *request);
-
-/*
- *----------------------------------------------------------------------
- *
- * FCGX_Finish_r --
- *
- * Finish the request (multi-thread safe).
- *
- * Side effects:
- *
- * Finishes the request accepted by (and frees any
- * storage allocated by) the previous call to FCGX_Accept.
- *
- * DO NOT retain pointers to the envp array or any strings
- * contained in it (e.g. to the result of calling FCGX_GetParam),
- * since these will be freed by the next call to FCGX_Finish
- * or FCGX_Accept.
- *
- *----------------------------------------------------------------------
- */
-DLLAPI void FCGX_Finish_r(FCGX_Request *request);
-
-/*
- *----------------------------------------------------------------------
- *
- * FCGX_Free --
- *
- * Free the memory and, if close is true,
- * IPC FD associated with the request (multi-thread safe).
- *
- *----------------------------------------------------------------------
- */
-DLLAPI void FCGX_Free(FCGX_Request * request, int close);
-
-/*
- *----------------------------------------------------------------------
- *
- * FCGX_Accept --
- *
- * Accept a new request (NOT multi-thread safe).
- *
- * Results:
- * 0 for successful call, -1 for error.
- *
- * Side effects:
- *
- * Finishes the request accepted by (and frees any
- * storage allocated by) the previous call to FCGX_Accept.
- * Creates input, output, and error streams and
- * assigns them to *in, *out, and *err respectively.
- * Creates a parameters data structure to be accessed
- * via getenv(3) (if assigned to environ) or by FCGX_GetParam
- * and assigns it to *envp.
- *
- * DO NOT retain pointers to the envp array or any strings
- * contained in it (e.g. to the result of calling FCGX_GetParam),
- * since these will be freed by the next call to FCGX_Finish
- * or FCGX_Accept.
- *
- *----------------------------------------------------------------------
- */
-DLLAPI int FCGX_Accept(
- FCGX_Stream **in,
- FCGX_Stream **out,
- FCGX_Stream **err,
- FCGX_ParamArray *envp);
-
-/*
- *----------------------------------------------------------------------
- *
- * FCGX_Finish --
- *
- * Finish the current request (NOT multi-thread safe).
- *
- * Side effects:
- *
- * Finishes the request accepted by (and frees any
- * storage allocated by) the previous call to FCGX_Accept.
- *
- * DO NOT retain pointers to the envp array or any strings
- * contained in it (e.g. to the result of calling FCGX_GetParam),
- * since these will be freed by the next call to FCGX_Finish
- * or FCGX_Accept.
- *
- *----------------------------------------------------------------------
- */
-DLLAPI void FCGX_Finish(void);
-
-/*
- *----------------------------------------------------------------------
- *
- * FCGX_StartFilterData --
- *
- * stream is an input stream for a FCGI_FILTER request.
- * stream is positioned at EOF on FCGI_STDIN.
- * Repositions stream to the start of FCGI_DATA.
- * If the preconditions are not met (e.g. FCGI_STDIN has not
- * been read to EOF) sets the stream error code to
- * FCGX_CALL_SEQ_ERROR.
- *
- * Results:
- * 0 for a normal return, < 0 for error
- *
- *----------------------------------------------------------------------
- */
-DLLAPI int FCGX_StartFilterData(FCGX_Stream *stream);
-
-/*
- *----------------------------------------------------------------------
- *
- * FCGX_SetExitStatus --
- *
- * Sets the exit status for stream's request. The exit status
- * is the status code the request would have exited with, had
- * the request been run as a CGI program. You can call
- * SetExitStatus several times during a request; the last call
- * before the request ends determines the value.
- *
- *----------------------------------------------------------------------
- */
-DLLAPI void FCGX_SetExitStatus(int status, FCGX_Stream *stream);
-
-/*
- *======================================================================
- * Parameters
- *======================================================================
- */
-
-/*
- *----------------------------------------------------------------------
- *
- * FCGX_GetParam -- obtain value of FCGI parameter in environment
- *
- *
- * Results:
- * Value bound to name, NULL if name not present in the
- * environment envp. Caller must not mutate the result
- * or retain it past the end of this request.
- *
- *----------------------------------------------------------------------
- */
-DLLAPI char *FCGX_GetParam(const char *name, FCGX_ParamArray envp);
-DLLAPI void FCGX_PutEnv(FCGX_Request *request, char *nameValue);
-
-/*
- *======================================================================
- * Readers
- *======================================================================
- */
-
-/*
- *----------------------------------------------------------------------
- *
- * FCGX_GetChar --
- *
- * Reads a byte from the input stream and returns it.
- *
- * Results:
- * The byte, or EOF (-1) if the end of input has been reached.
- *
- *----------------------------------------------------------------------
- */
-DLLAPI int FCGX_GetChar(FCGX_Stream *stream);
-
-/*
- *----------------------------------------------------------------------
- *
- * FCGX_UnGetChar --
- *
- * Pushes back the character c onto the input stream. One
- * character of pushback is guaranteed once a character
- * has been read. No pushback is possible for EOF.
- *
- * Results:
- * Returns c if the pushback succeeded, EOF if not.
- *
- *----------------------------------------------------------------------
- */
-DLLAPI int FCGX_UnGetChar(int c, FCGX_Stream *stream);
-
-/*
- *----------------------------------------------------------------------
- *
- * FCGX_GetStr --
- *
- * Reads up to n consecutive bytes from the input stream
- * into the character array str. Performs no interpretation
- * of the input bytes.
- *
- * Results:
- * Number of bytes read. If result is smaller than n,
- * the end of input has been reached.
- *
- *----------------------------------------------------------------------
- */
-DLLAPI int FCGX_GetStr(char *str, int n, FCGX_Stream *stream);
-
-/*
- *----------------------------------------------------------------------
- *
- * FCGX_GetLine --
- *
- * Reads up to n-1 consecutive bytes from the input stream
- * into the character array str. Stops before n-1 bytes
- * have been read if '\n' or EOF is read. The terminating '\n'
- * is copied to str. After copying the last byte into str,
- * stores a '\0' terminator.
- *
- * Results:
- * NULL if EOF is the first thing read from the input stream,
- * str otherwise.
- *
- *----------------------------------------------------------------------
- */
-DLLAPI char *FCGX_GetLine(char *str, int n, FCGX_Stream *stream);
-
-/*
- *----------------------------------------------------------------------
- *
- * FCGX_HasSeenEOF --
- *
- * Returns EOF if end-of-file has been detected while reading
- * from stream; otherwise returns 0.
- *
- * Note that FCGX_HasSeenEOF(s) may return 0, yet an immediately
- * following FCGX_GetChar(s) may return EOF. This function, like
- * the standard C stdio function feof, does not provide the
- * ability to peek ahead.
- *
- * Results:
- * EOF if end-of-file has been detected, 0 if not.
- *
- *----------------------------------------------------------------------
- */
-
-DLLAPI int FCGX_HasSeenEOF(FCGX_Stream *stream);
-
-/*
- *======================================================================
- * Writers
- *======================================================================
- */
-
-/*
- *----------------------------------------------------------------------
- *
- * FCGX_PutChar --
- *
- * Writes a byte to the output stream.
- *
- * Results:
- * The byte, or EOF (-1) if an error occurred.
- *
- *----------------------------------------------------------------------
- */
-DLLAPI int FCGX_PutChar(int c, FCGX_Stream *stream);
-
-/*
- *----------------------------------------------------------------------
- *
- * FCGX_PutStr --
- *
- * Writes n consecutive bytes from the character array str
- * into the output stream. Performs no interpretation
- * of the output bytes.
- *
- * Results:
- * Number of bytes written (n) for normal return,
- * EOF (-1) if an error occurred.
- *
- *----------------------------------------------------------------------
- */
-DLLAPI int FCGX_PutStr(const char *str, int n, FCGX_Stream *stream);
-
-/*
- *----------------------------------------------------------------------
- *
- * FCGX_PutS --
- *
- * Writes a null-terminated character string to the output stream.
- *
- * Results:
- * number of bytes written for normal return,
- * EOF (-1) if an error occurred.
- *
- *----------------------------------------------------------------------
- */
-DLLAPI int FCGX_PutS(const char *str, FCGX_Stream *stream);
-
-/*
- *----------------------------------------------------------------------
- *
- * FCGX_FPrintF, FCGX_VFPrintF --
- *
- * Performs printf-style output formatting and writes the results
- * to the output stream.
- *
- * Results:
- * number of bytes written for normal return,
- * EOF (-1) if an error occurred.
- *
- *----------------------------------------------------------------------
- */
-DLLAPI int FCGX_FPrintF(FCGX_Stream *stream, const char *format, ...);
-
-DLLAPI int FCGX_VFPrintF(FCGX_Stream *stream, const char *format, va_list arg);
-
-/*
- *----------------------------------------------------------------------
- *
- * FCGX_FFlush --
- *
- * Flushes any buffered output.
- *
- * Server-push is a legitimate application of FCGX_FFlush.
- * Otherwise, FCGX_FFlush is not very useful, since FCGX_Accept
- * does it implicitly. Calling FCGX_FFlush in non-push applications
- * results in extra writes and therefore reduces performance.
- *
- * Results:
- * EOF (-1) if an error occurred.
- *
- *----------------------------------------------------------------------
- */
-DLLAPI int FCGX_FFlush(FCGX_Stream *stream);
-
-/*
- *======================================================================
- * Both Readers and Writers
- *======================================================================
- */
-
-/*
- *----------------------------------------------------------------------
- *
- * FCGX_FClose --
- *
- * Closes the stream. For writers, flushes any buffered
- * output.
- *
- * Close is not a very useful operation since FCGX_Accept
- * does it implicitly. Closing the out stream before the
- * err stream results in an extra write if there's nothing
- * in the err stream, and therefore reduces performance.
- *
- * Results:
- * EOF (-1) if an error occurred.
- *
- *----------------------------------------------------------------------
- */
-DLLAPI int FCGX_FClose(FCGX_Stream *stream);
-
-/*
- *----------------------------------------------------------------------
- *
- * FCGX_GetError --
- *
- * Return the stream error code. 0 means no error, > 0
- * is an errno(2) error, < 0 is an FastCGI error.
- *
- *----------------------------------------------------------------------
- */
-DLLAPI int FCGX_GetError(FCGX_Stream *stream);
-
-/*
- *----------------------------------------------------------------------
- *
- * FCGX_ClearError --
- *
- * Clear the stream error code and end-of-file indication.
- *
- *----------------------------------------------------------------------
- */
-DLLAPI void FCGX_ClearError(FCGX_Stream *stream);
-
-/*
- *----------------------------------------------------------------------
- *
- * FCGX_CreateWriter --
- *
- * Create a FCGX_Stream (used by cgi-fcgi). This shouldn't
- * be needed by a FastCGI applictaion.
- *
- *----------------------------------------------------------------------
- */
-DLLAPI FCGX_Stream *FCGX_CreateWriter(
- int socket,
- int requestId,
- int bufflen,
- int streamType);
-
-/*
- *----------------------------------------------------------------------
- *
- * FCGX_FreeStream --
- *
- * Free a FCGX_Stream (used by cgi-fcgi). This shouldn't
- * be needed by a FastCGI applictaion.
- *
- *----------------------------------------------------------------------
- */
-DLLAPI void FCGX_FreeStream(FCGX_Stream **stream);
-
-/* ----------------------------------------------------------------------
- *
- * Prevent the lib from accepting any new requests. Signal handler safe.
- *
- * ----------------------------------------------------------------------
- */
-DLLAPI void FCGX_ShutdownPending(void);
-
-#if defined (__cplusplus) || defined (c_plusplus)
-} /* terminate extern "C" { */
-#endif
-
-#endif /* _FCGIAPP_H */
diff --git a/sapi/cgi/libfcgi/include/fcgiappmisc.h b/sapi/cgi/libfcgi/include/fcgiappmisc.h
deleted file mode 100644
index db8651a44b..0000000000
--- a/sapi/cgi/libfcgi/include/fcgiappmisc.h
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * fcgiappmisc.h --
- *
- * Functions implemented by fcgiapp.h that aren't needed
- * by normal applications, but may be useful to special
- * applications.
- *
- *
- * Copyright (c) 1996 Open Market, Inc.
- *
- * See the file "LICENSE.TERMS" for information on usage and redistribution
- * of this file, and for a DISCLAIMER OF ALL WARRANTIES.
- *
- * $Id$
- */
-
-#ifndef _FCGIAPPMISC_H
-#define _FCGIAPPMISC_H
-
-#include "fcgiapp.h" /* for FCGX_Stream */
-
-#if defined (c_plusplus) || defined (__cplusplus)
-extern "C" {
-#endif
-
-#ifdef _WIN32
-#ifndef DLLAPI
-#ifdef FCGI_STATIC
-#define DLLAPI
-#else
-#define DLLAPI __declspec(dllimport)
-#endif
-#endif
-#else
-#define DLLAPI
-#endif
-
-DLLAPI FCGX_Stream *CreateWriter(
- int socket,
- int requestId,
- int bufflen,
- int streamType);
-
-DLLAPI void FreeStream(FCGX_Stream **stream);
-
-#if defined (__cplusplus) || defined (c_plusplus)
-} /* terminate extern "C" { */
-#endif
-
-#endif /* _FCGIAPPMISC_H */
diff --git a/sapi/cgi/libfcgi/include/fcgimisc.h b/sapi/cgi/libfcgi/include/fcgimisc.h
deleted file mode 100644
index 20ee4a0cf0..0000000000
--- a/sapi/cgi/libfcgi/include/fcgimisc.h
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * fcgimisc.h --
- *
- * Miscellaneous definitions
- *
- *
- * Copyright (c) 1996 Open Market, Inc.
- *
- * See the file "LICENSE.TERMS" for information on usage and redistribution
- * of this file, and for a DISCLAIMER OF ALL WARRANTIES.
- *
- * $Id$
- */
-
-#ifndef _FCGIMISC_H
-#define _FCGIMISC_H
-
-#ifndef FALSE
-#define FALSE (0)
-#endif
-
-#ifndef TRUE
-#define TRUE (1)
-#endif
-
-#ifndef min
-#define min(a,b) ((a) < (b) ? (a) : (b))
-#endif
-
-#ifndef max
-#define max(a,b) ((a) > (b) ? (a) : (b))
-#endif
-
-#ifndef ASSERT
-#define ASSERT(assertion) assert(assertion)
-#endif
-
-#endif /* _FCGIMISC_H */
diff --git a/sapi/cgi/libfcgi/include/fcgio.h b/sapi/cgi/libfcgi/include/fcgio.h
deleted file mode 100644
index 865bff385b..0000000000
--- a/sapi/cgi/libfcgi/include/fcgio.h
+++ /dev/null
@@ -1,147 +0,0 @@
-//
-// Provides support for FastCGI via C++ iostreams.
-//
-// $Id$
-//
-// This work is based on routines written by George Feinberg. They
-// have been mostly re-written and extensively changed by
-// Michael Richards.
-//
-// Rewritten again with bug fixes and numerous enhancements by
-// Michael Shell.
-//
-// And rewritten again by Rob Saccoccio.
-//
-// Special Thanks to Dietmar Kuehl for his help and the numerous custom
-// streambuf examples on his web site.
-//
-// Copyright (c) 2000 Tux the Linux Penguin
-// Copyright (c) 2001 Rob Saccoccio and Chelsea Networks
-//
-// You are free to use this software without charge or royalty
-// as long as this notice is not removed or altered, and recognition
-// is given to the author(s)
-//
-// This code is offered as-is without any warranty either expressed or
-// implied; without even the implied warranty of MERCHANTABILITY or
-// FITNESS FOR A PARTICULAR PURPOSE. If it breaks, you get to keep
-// both halves.
-
-#ifndef FCGIO_H
-#define FCGIO_H
-
-#include <iostream.h>
-
-#include "fcgiapp.h"
-
-#ifndef DLLAPI
-#ifdef _WIN32
-#define DLLAPI __declspec(dllimport)
-#else
-#define DLLAPI
-#endif
-#endif
-
-/*
- * fcgi_streambuf
- */
-class fcgi_streambuf : public streambuf
-{
-public:
-
- // Note that if no buf is assigned (the default), iostream methods
- // such as peek(), unget() and putback() will fail. If a buf is
- // assigned, I/O is a bit less effecient and output streams will
- // have to be flushed (or the streambuf destroyed) before the next
- // call to "accept".
- DLLAPI fcgi_streambuf(FCGX_Stream * fcgx, char * buf, int len);
-
- DLLAPI fcgi_streambuf(char * buf, int len);
-
- DLLAPI fcgi_streambuf(FCGX_Stream * fcgx = NULL);
-
- DLLAPI ~fcgi_streambuf(void);
-
- DLLAPI int attach(FCGX_Stream * fcgx);
-
-protected:
-
- // Consume the put area (if buffered) and c (if c is not EOF).
- DLLAPI virtual int overflow(int);
-
- // Flush the put area (if buffered) and the FCGX buffer to the client.
- DLLAPI virtual int sync();
-
- // Remove and return the current character.
- DLLAPI virtual int uflow();
-
- // Fill the get area (if buffered) and return the current character.
- DLLAPI virtual int underflow();
-
- // Use a buffer. The only reasons that a buffer would be useful is
- // to support the use of the unget()/putback() or seek() methods. Using
- // a buffer will result in less efficient I/O. Note: the underlying
- // FastCGI library (FCGX) maintains its own input and output buffers.
- DLLAPI virtual streambuf * setbuf(char * buf, int len);
-
- DLLAPI virtual int xsgetn(char * s, int n);
- DLLAPI virtual int xsputn(const char * s, int n);
-
-private:
-
- FCGX_Stream * fcgx;
-
- // buf is just handy to have around
- char * buf;
-
- // this isn't kept by the base class
- int bufsize;
-
- void init(FCGX_Stream * fcgx, char * buf, int bufsize);
-
- void reset(void);
-};
-
-/*
- * fcgi_istream - deprecated
- */
-class fcgi_istream : public istream
-{
-public:
-
- // deprecated
- DLLAPI fcgi_istream(FCGX_Stream * fcgx = NULL);
-
- // deprecated
- DLLAPI ~fcgi_istream(void) {}
-
- // deprecated
- DLLAPI virtual void attach(FCGX_Stream * fcgx);
-
-private:
-
- fcgi_streambuf fcgi_strmbuf;
-};
-
-/*
- * fcgi_ostream - deprecated
- */
-class fcgi_ostream : public ostream
-{
-public:
-
- // deprecated
- DLLAPI fcgi_ostream(FCGX_Stream * fcgx = NULL);
-
- // deprecated
- DLLAPI ~fcgi_ostream(void) {}
-
- // deprecated
- DLLAPI virtual void attach(FCGX_Stream *fcgx);
-
-private:
-
- fcgi_streambuf fcgi_strmbuf;
-};
-
-#endif /* FCGIO_H */
diff --git a/sapi/cgi/libfcgi/include/fcgios.h b/sapi/cgi/libfcgi/include/fcgios.h
deleted file mode 100644
index e0f8373fb7..0000000000
--- a/sapi/cgi/libfcgi/include/fcgios.h
+++ /dev/null
@@ -1,140 +0,0 @@
-/*
- * fcgios.h --
- *
- * Description of file.
- *
- *
- * Copyright (c) 1996 Open Market, Inc.
- * All rights reserved.
- *
- * This file contains proprietary and confidential information and
- * remains the unpublished property of Open Market, Inc. Use,
- * disclosure, or reproduction is prohibited except as permitted by
- * express written license agreement with Open Market, Inc.
- *
- * Bill Snapper
- * snapper@openmarket.com
- */
-#ifndef _FCGIOS_H
-#define _FCGIOS_H
-
-#ifdef _WIN32
-#define WIN32_LEAN_AND_MEAN
-#include <windows.h>
-#include <winsock2.h>
-#endif
-
-#include "fcgi_config.h"
-
-#ifdef HAVE_SYS_TIME_H
-#include <sys/time.h>
-#endif
-
-#if defined (c_plusplus) || defined (__cplusplus)
-extern "C" {
-#endif
-
-#ifdef _WIN32
-#define OS_Errno GetLastError()
-#define OS_SetErrno(err) SetLastError(err)
-#ifndef O_NONBLOCK
-#define O_NONBLOCK 0x0004 /* no delay */
-#endif
-#else /* !_WIN32 */
-#define OS_Errno errno
-#define OS_SetErrno(err) errno = (err)
-#endif /* !_WIN32 */
-
-#ifndef DLLAPI
-#ifdef _WIN32
-#if defined(_LIB) || defined(FCGI_STATIC)
-#define DLLAPI
-#else
-#define DLLAPI __declspec(dllimport)
-#endif
-#else
-#define DLLAPI
-#endif
-#endif
-
-
-/* This is the initializer for a "struct timeval" used in a select() call
- * right after a new request is accept()ed to determine readablity. Its
- * a drop-dead timer. Its only used for AF_UNIX sockets (not TCP sockets).
- * Its a workaround for a kernel bug in Linux 2.0.x and SCO Unixware.
- * Making this as small as possible, yet remain reliable would be best.
- * 2 seconds is very conservative. 0,0 is not reliable. The shorter the
- * timeout, the faster request processing will recover. The longer the
- * timeout, the more likely this application being "busy" will cause other
- * requests to abort and cause more dead sockets that need this timeout. */
-#define READABLE_UNIX_FD_DROP_DEAD_TIMEVAL 2,0
-
-#ifndef STDIN_FILENO
-#define STDIN_FILENO 0
-#endif
-
-#ifndef STDOUT_FILENO
-#define STDOUT_FILENO 1
-#endif
-
-#ifndef STDERR_FILENO
-#define STDERR_FILENO 2
-#endif
-
-#ifndef MAXPATHLEN
-#define MAXPATHLEN 1024
-#endif
-
-#ifndef X_OK
-#define X_OK 0x01
-#endif
-
-#ifndef _CLIENTDATA
-# if defined(__STDC__) || defined(__cplusplus)
- typedef void *ClientData;
-# else
- typedef int *ClientData;
-# endif /* __STDC__ */
-#define _CLIENTDATA
-#endif
-#define MUTEX_VARNAME "_FCGI_MUTEX_"
-#define SHUTDOWN_EVENT_NAME "_FCGI_SHUTDOWN_EVENT_"
-
-typedef void (*OS_AsyncProc) (ClientData clientData, int len);
-
-DLLAPI int OS_LibInit(int stdioFds[3]);
-DLLAPI void OS_LibShutdown(void);
-DLLAPI int OS_CreateLocalIpcFd(const char *bindPath, int backlog, int bCreateMutex);
-DLLAPI int OS_FcgiConnect(char *bindPath);
-DLLAPI int OS_Read(int fd, char * buf, size_t len);
-DLLAPI int OS_Write(int fd, char * buf, size_t len);
-#ifdef _WIN32
-DLLAPI int OS_SpawnChild(char *execPath, int listenFd, PROCESS_INFORMATION *pInfo, char *env);
-#else
-DLLAPI int OS_SpawnChild(char *execPath, int listenfd);
-#endif
-DLLAPI int OS_AsyncReadStdin(void *buf, int len, OS_AsyncProc procPtr,
- ClientData clientData);
-DLLAPI int OS_AsyncRead(int fd, int offset, void *buf, int len,
- OS_AsyncProc procPtr, ClientData clientData);
-DLLAPI int OS_AsyncWrite(int fd, int offset, void *buf, int len,
- OS_AsyncProc procPtr, ClientData clientData);
-DLLAPI int OS_Close(int fd);
-DLLAPI int OS_CloseRead(int fd);
-DLLAPI int OS_DoIo(struct timeval *tmo);
-DLLAPI int OS_Accept(int listen_sock, int fail_on_intr, const char *webServerAddrs);
-DLLAPI int OS_IpcClose(int ipcFd);
-DLLAPI int OS_IsFcgi(int sock);
-DLLAPI void OS_SetFlags(int fd, int flags);
-
-DLLAPI void OS_ShutdownPending(void);
-
-#ifdef _WIN32
-DLLAPI int OS_SetImpersonate(void);
-#endif
-
-#if defined (__cplusplus) || defined (c_plusplus)
-} /* terminate extern "C" { */
-#endif
-
-#endif /* _FCGIOS_H */
diff --git a/sapi/cgi/libfcgi/libfcgi.m4 b/sapi/cgi/libfcgi/libfcgi.m4
deleted file mode 100644
index 28e73d46a0..0000000000
--- a/sapi/cgi/libfcgi/libfcgi.m4
+++ /dev/null
@@ -1,77 +0,0 @@
-dnl $Id$
-dnl
-dnl This file is an input file used by the GNU "autoconf" program to
-dnl generate the file "configure", which is run during the build
-dnl to configure the system for the local environment.
-
-#AC_INIT
-#AM_INIT_AUTOMAKE(fcgi, 2.2.3-SNAP-0203171857)
-
-#AM_CONFIG_HEADER(include/fcgi_config.h)
-
-#AC_PROG_CC
-#AC_PROG_CPP
-#AC_PROG_INSTALL
-#AC_PROG_LIBTOOL
-
-#AC_PROG_CXX
-
-#AC_LANG([C++])
-
-#dnl autoconf defaults CXX to 'g++', so its unclear whether it exists/works
-#AC_MSG_CHECKING([whether $CXX works])
-#AC_TRY_COMPILE([#include <iostream>],
-# [std::cout << "ok";],
-# [AC_MSG_RESULT(yes)
-# LIBFCGIXX=libfcgi++.la
-# ECHO_CPP=echo-cpp${EXEEXT}
-# AC_MSG_CHECKING([whether cin has a streambuf assignment operator])
-# AC_TRY_COMPILE([#include <iostream>],
-# [cin = static_cast<streambuf *>(0);],
-# [AC_MSG_RESULT(yes)
-# AC_DEFINE([HAVE_IOSTREAM_WITHASSIGN_STREAMBUF], [1],
-# [Define if cin/cout/cerr has a streambuf assignment operator])],
-# [AC_MSG_RESULT(no)])
-# AC_MSG_CHECKING([whether char_type is defined in the context of streambuf])
-# AC_TRY_COMPILE([#include <iostream>],
-# [class fcgi_streambuf : public std::streambuf { char_type ct; }],
-# [AC_MSG_RESULT(yes)
-# AC_DEFINE([HAVE_STREAMBUF_CHAR_TYPE], [1],
-# [Define if char_type is defined in the context of streambuf])],
-# [AC_MSG_RESULT(no)])],
-# [AC_MSG_RESULT(no)])
-#AC_SUBST(LIBFCGIXX)
-#AC_SUBST(ECHO_CPP)
-
-#AC_LANG([C])
-
-AC_CHECK_LIB([nsl], [gethostbyname])
-AC_CHECK_LIB([socket], [socket])
-
-ACX_PTHREAD([THREADED=threaded${EXEEXT}])
-AC_SUBST([THREADED])
-
-FCGI_COMMON_CHECKS
-
-AC_REPLACE_FUNCS([strerror])
-
-#AC_C_INLINE
-
-#--------------------------------------------------------------------
-# This is a little hokie in that it avoids including config.guess
-# and config.sub in the distribution, but its been working so far.
-# Windows builds don't run configure so we should be safe fixing
-# this to 'unix' (at least for now).
-#--------------------------------------------------------------------
-#SYSTEM=unix
-#AC_SUBST([SYSTEM])
-
-#AC_PROG_CC_WARNINGS
-
-#AC_CONFIG_FILES([Makefile
-# cgi-fcgi/Makefile
-# include/Makefile
-# libfcgi/Makefile
-# examples/Makefile])
-
-#AC_OUTPUT
diff --git a/sapi/cgi/libfcgi/os_unix.c b/sapi/cgi/libfcgi/os_unix.c
deleted file mode 100644
index bbaf112621..0000000000
--- a/sapi/cgi/libfcgi/os_unix.c
+++ /dev/null
@@ -1,1273 +0,0 @@
-/*
- * os_unix.c --
- *
- * Description of file.
- *
- *
- * Copyright (c) 1995 Open Market, Inc.
- * All rights reserved.
- *
- * This file contains proprietary and confidential information and
- * remains the unpublished property of Open Market, Inc. Use,
- * disclosure, or reproduction is prohibited except as permitted by
- * express written license agreement with Open Market, Inc.
- *
- * Bill Snapper
- * snapper@openmarket.com
- */
-
-#ifndef lint
-static const char rcsid[] = "$Id$";
-#endif /* not lint */
-
-#include "fcgi_config.h"
-
-#include <sys/types.h>
-
-#ifdef HAVE_NETINET_IN_H
-#include <netinet/in.h>
-#endif
-
-#include <arpa/inet.h>
-#include <assert.h>
-#include <errno.h>
-#include <fcntl.h> /* for fcntl */
-#include <math.h>
-#include <memory.h> /* for memchr() */
-#include <netinet/tcp.h>
-#include <stdarg.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <sys/time.h>
-#include <sys/un.h>
-#include <signal.h>
-
-#ifdef HAVE_NETDB_H
-#include <netdb.h>
-#endif
-
-#ifdef HAVE_SYS_SOCKET_H
-#include <sys/socket.h> /* for getpeername */
-#endif
-
-#ifdef HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-
-#include "fastcgi.h"
-#include "fcgimisc.h"
-#include "fcgios.h"
-
-#ifndef INADDR_NONE
-#define INADDR_NONE ((unsigned long) -1)
-#endif
-
-/*
- * This structure holds an entry for each oustanding async I/O operation.
- */
-typedef struct {
- OS_AsyncProc procPtr; /* callout completion procedure */
- ClientData clientData; /* caller private data */
- int fd;
- int len;
- int offset;
- void *buf;
- int inUse;
-} AioInfo;
-
-/*
- * Entries in the async I/O table are allocated 2 per file descriptor.
- *
- * Read Entry Index = fd * 2
- * Write Entry Index = (fd * 2) + 1
- */
-#define AIO_RD_IX(fd) (fd * 2)
-#define AIO_WR_IX(fd) ((fd * 2) + 1)
-
-static int asyncIoInUse = FALSE;
-static int asyncIoTableSize = 16;
-static AioInfo *asyncIoTable = NULL;
-
-static int libInitialized = FALSE;
-
-static fd_set readFdSet;
-static fd_set writeFdSet;
-
-static fd_set readFdSetPost;
-static int numRdPosted = 0;
-static fd_set writeFdSetPost;
-static int numWrPosted = 0;
-static int volatile maxFd = -1;
-
-static int shutdownPending = FALSE;
-static int shutdownNow = FALSE;
-
-#ifndef HAVE_STRLCPY
-#define strlcpy php_strlcpy
-#endif
-size_t strlcpy(char *dst, const char *src, size_t siz);
-
-void OS_ShutdownPending()
-{
- shutdownPending = TRUE;
-}
-
-static void OS_Sigusr1Handler(int signo)
-{
- OS_ShutdownPending();
-}
-
-static void OS_SigpipeHandler(int signo)
-{
- ;
-}
-
-static void installSignalHandler(int signo, const struct sigaction * act, int force)
-{
- struct sigaction sa;
-
- sigaction(signo, NULL, &sa);
-
- if (force || sa.sa_handler == SIG_DFL)
- {
- sigaction(signo, act, NULL);
- }
-}
-
-static void OS_InstallSignalHandlers(int force)
-{
- struct sigaction sa;
-
- sigemptyset(&sa.sa_mask);
- sa.sa_flags = 0;
-
- sa.sa_handler = OS_SigpipeHandler;
- installSignalHandler(SIGPIPE, &sa, force);
-
- sa.sa_handler = OS_Sigusr1Handler;
- installSignalHandler(SIGUSR1, &sa, force);
-}
-
-/*
- *--------------------------------------------------------------
- *
- * OS_LibInit --
- *
- * Set up the OS library for use.
- *
- * NOTE: This function is really only needed for application
- * asynchronous I/O. It will most likely change in the
- * future to setup the multi-threaded environment.
- *
- * Results:
- * Returns 0 if success, -1 if not.
- *
- * Side effects:
- * Async I/O table allocated and initialized.
- *
- *--------------------------------------------------------------
- */
-int OS_LibInit(int stdioFds[3])
-{
- if(libInitialized)
- return 0;
-
- asyncIoTable = (AioInfo *)malloc(asyncIoTableSize * sizeof(AioInfo));
- if(asyncIoTable == NULL) {
- errno = ENOMEM;
- return -1;
- }
- memset((char *) asyncIoTable, 0,
- asyncIoTableSize * sizeof(AioInfo));
-
- FD_ZERO(&readFdSet);
- FD_ZERO(&writeFdSet);
- FD_ZERO(&readFdSetPost);
- FD_ZERO(&writeFdSetPost);
-
- OS_InstallSignalHandlers(FALSE);
-
- libInitialized = TRUE;
-
- return 0;
-}
-
-/*
- *--------------------------------------------------------------
- *
- * OS_LibShutdown --
- *
- * Shutdown the OS library.
- *
- * Results:
- * None.
- *
- * Side effects:
- * Memory freed, fds closed.
- *
- *--------------------------------------------------------------
- */
-void OS_LibShutdown()
-{
- if(!libInitialized)
- return;
-
- free(asyncIoTable);
- asyncIoTable = NULL;
- libInitialized = FALSE;
- return;
-}
-
-/*
- *----------------------------------------------------------------------
- *
- * OS_BuildSockAddrUn --
- *
- * Using the pathname bindPath, fill in the sockaddr_un structure
- * *servAddrPtr and the length of this structure *servAddrLen.
- *
- * The format of the sockaddr_un structure changed incompatibly in
- * 4.3BSD Reno. Digital UNIX supports both formats, other systems
- * support one or the other.
- *
- * Results:
- * 0 for normal return, -1 for failure (bindPath too long).
- *
- *----------------------------------------------------------------------
- */
-
-static int OS_BuildSockAddrUn(const char *bindPath,
- struct sockaddr_un *servAddrPtr,
- int *servAddrLen)
-{
- int bindPathLen = strlen(bindPath);
-
-#ifdef HAVE_SOCKADDR_UN_SUN_LEN /* 4.3BSD Reno and later: BSDI, DEC */
- if(bindPathLen >= sizeof(servAddrPtr->sun_path)) {
- return -1;
- }
-#else /* 4.3 BSD Tahoe: Solaris, HPUX, DEC, ... */
- if(bindPathLen > sizeof(servAddrPtr->sun_path)) {
- return -1;
- }
-#endif
- memset((char *) servAddrPtr, 0, sizeof(*servAddrPtr));
- servAddrPtr->sun_family = AF_UNIX;
- memcpy(servAddrPtr->sun_path, bindPath, bindPathLen);
-#ifdef HAVE_SOCKADDR_UN_SUN_LEN /* 4.3BSD Reno and later: BSDI, DEC */
- *servAddrLen = sizeof(servAddrPtr->sun_len)
- + sizeof(servAddrPtr->sun_family)
- + bindPathLen + 1;
- servAddrPtr->sun_len = *servAddrLen;
-#else /* 4.3 BSD Tahoe: Solaris, HPUX, DEC, ... */
- *servAddrLen = sizeof(servAddrPtr->sun_family) + bindPathLen;
-#endif
- return 0;
-}
-union SockAddrUnion {
- struct sockaddr_un unixVariant;
- struct sockaddr_in inetVariant;
-};
-
-/*
- * OS_CreateLocalIpcFd --
- *
- * This procedure is responsible for creating the listener socket
- * on Unix for local process communication. It will create a
- * domain socket or a TCP/IP socket bound to "localhost" and return
- * a file descriptor to it to the caller.
- * bCreateMutex is ignored for unix
- *
- * Results:
- * Listener socket created. This call returns either a valid
- * file descriptor or -1 on error.
- *
- * Side effects:
- * None.
- *
- *----------------------------------------------------------------------
- */
-int OS_CreateLocalIpcFd(const char *bindPath, int backlog, int bCreateMutex)
-{
- int listenSock, servLen;
- union SockAddrUnion sa;
- int tcp = FALSE;
- unsigned long tcp_ia = 0;
- char *tp;
- short port = 0;
- char host[MAXPATHLEN];
-
- strlcpy(host, bindPath, MAXPATHLEN-1);
- if((tp = strchr(host, ':')) != 0) {
- *tp++ = 0;
- if((port = atoi(tp)) == 0) {
- *--tp = ':';
- } else {
- tcp = TRUE;
- }
- }
- if(tcp) {
- if (!*host || !strcmp(host,"*")) {
- tcp_ia = htonl(INADDR_ANY);
- } else {
- tcp_ia = inet_addr(host);
- if (tcp_ia == INADDR_NONE) {
- struct hostent * hep;
- hep = gethostbyname(host);
- if ((!hep) || (hep->h_addrtype != AF_INET || !hep->h_addr_list[0])) {
- fprintf(stderr, "Cannot resolve host name %s -- exiting!\n", host);
- return -1;
- }
- if (hep->h_addr_list[1]) {
- fprintf(stderr, "Host %s has multiple addresses ---\n", host);
- fprintf(stderr, "you must choose one explicitly!!!\n");
- return -1;
- }
- tcp_ia = ((struct in_addr *) (hep->h_addr))->s_addr;
- }
- }
- }
-
- if(tcp) {
- listenSock = socket(AF_INET, SOCK_STREAM, 0);
- if(listenSock >= 0) {
- int flag = 1;
- if(setsockopt(listenSock, SOL_SOCKET, SO_REUSEADDR,
- (char *) &flag, sizeof(flag)) < 0) {
- fprintf(stderr, "Can't set SO_REUSEADDR.\n");
- return -1;
- }
- }
- } else {
- listenSock = socket(AF_UNIX, SOCK_STREAM, 0);
- }
- if(listenSock < 0) {
- return -1;
- }
-
- /*
- * Bind the listening socket.
- */
- if(tcp) {
- memset((char *) &sa.inetVariant, 0, sizeof(sa.inetVariant));
- sa.inetVariant.sin_family = AF_INET;
- sa.inetVariant.sin_addr.s_addr = tcp_ia;
- sa.inetVariant.sin_port = htons(port);
- servLen = sizeof(sa.inetVariant);
- } else {
- unlink(bindPath);
- if(OS_BuildSockAddrUn(bindPath, &sa.unixVariant, &servLen)) {
- fprintf(stderr, "Listening socket's path name is too long.\n");
- return -1;
- }
- }
- if(bind(listenSock, (struct sockaddr *) &sa.unixVariant, servLen) < 0
- || listen(listenSock, backlog) < 0) {
- perror("bind/listen");
- return -1;
- }
-
- return listenSock;
-}
-
-/*
- *----------------------------------------------------------------------
- *
- * OS_FcgiConnect --
- *
- * Create the socket and connect to the remote application if
- * possible.
- *
- * This was lifted from the cgi-fcgi application and was abstracted
- * out because Windows NT does not have a domain socket and must
- * use a named pipe which has a different API altogether.
- *
- * Results:
- * -1 if fail or a valid file descriptor if connection succeeds.
- *
- * Side effects:
- * Remote connection established.
- *
- *----------------------------------------------------------------------
- */
-int OS_FcgiConnect(char *bindPath)
-{
- union SockAddrUnion sa;
- int servLen, resultSock;
- int connectStatus;
- char *tp;
- char host[MAXPATHLEN];
- short port = 0;
- int tcp = FALSE;
-
- strlcpy(host, bindPath, MAXPATHLEN-1);
- if((tp = strchr(host, ':')) != 0) {
- *tp++ = 0;
- if((port = atoi(tp)) == 0) {
- *--tp = ':';
- } else {
- tcp = TRUE;
- }
- }
- if(tcp == TRUE) {
- struct hostent *hp;
- if((hp = gethostbyname((*host ? host : "localhost"))) == NULL) {
- fprintf(stderr, "Unknown host: %s\n", bindPath);
- return -1;
- }
- sa.inetVariant.sin_family = AF_INET;
- memcpy(&sa.inetVariant.sin_addr, hp->h_addr, hp->h_length);
- sa.inetVariant.sin_port = htons(port);
- servLen = sizeof(sa.inetVariant);
- resultSock = socket(AF_INET, SOCK_STREAM, 0);
- } else {
- if(OS_BuildSockAddrUn(bindPath, &sa.unixVariant, &servLen)) {
- fprintf(stderr, "Listening socket's path name is too long.\n");
- return -1;
- }
- resultSock = socket(AF_UNIX, SOCK_STREAM, 0);
- }
-
- ASSERT(resultSock >= 0);
- connectStatus = connect(resultSock, (struct sockaddr *) &sa.unixVariant,
- servLen);
- if(connectStatus >= 0) {
- return resultSock;
- } else {
- /*
- * Most likely (errno == ENOENT || errno == ECONNREFUSED)
- * and no FCGI application server is running.
- */
- close(resultSock);
- return -1;
- }
-}
-
-/*
- *--------------------------------------------------------------
- *
- * OS_Read --
- *
- * Pass through to the unix read function.
- *
- * Results:
- * Returns number of byes read, 0, or -1 failure: errno
- * contains actual error.
- *
- * Side effects:
- * None.
- *
- *--------------------------------------------------------------
- */
-int OS_Read(int fd, char * buf, size_t len)
-{
- if (shutdownNow) return -1;
- return(read(fd, buf, len));
-}
-
-/*
- *--------------------------------------------------------------
- *
- * OS_Write --
- *
- * Pass through to unix write function.
- *
- * Results:
- * Returns number of byes read, 0, or -1 failure: errno
- * contains actual error.
- *
- * Side effects:
- * none.
- *
- *--------------------------------------------------------------
- */
-int OS_Write(int fd, char * buf, size_t len)
-{
- if (shutdownNow) return -1;
- return(write(fd, buf, len));
-}
-
-/*
- *----------------------------------------------------------------------
- *
- * OS_SpawnChild --
- *
- * Spawns a new FastCGI listener process.
- *
- * Results:
- * 0 if success, -1 if error.
- *
- * Side effects:
- * Child process spawned.
- *
- *----------------------------------------------------------------------
- */
-int OS_SpawnChild(char *appPath, int listenFd)
-{
- int forkResult;
-
- forkResult = fork();
- if(forkResult < 0) {
- return -1;
- }
-
- if(forkResult == 0) {
- /*
- * Close STDIN unconditionally. It's used by the parent
- * process for CGI communication. The FastCGI applciation
- * will be replacing this with the FastCGI listenFd IF
- * STDIN_FILENO is the same as FCGI_LISTENSOCK_FILENO
- * (which it is on Unix). Regardless, STDIN, STDOUT, and
- * STDERR will be closed as the FastCGI process uses a
- * multiplexed socket in their place.
- */
- close(STDIN_FILENO);
-
- /*
- * If the listenFd is already the value of FCGI_LISTENSOCK_FILENO
- * we're set. If not, change it so the child knows where to
- * get the listen socket from.
- */
- if(listenFd != FCGI_LISTENSOCK_FILENO) {
- dup2(listenFd, FCGI_LISTENSOCK_FILENO);
- close(listenFd);
- }
-
- close(STDOUT_FILENO);
- close(STDERR_FILENO);
-
- /*
- * We're a child. Exec the application.
- *
- * XXX: entire environment passes through
- */
- execl(appPath, appPath, NULL);
- /*
- * XXX: Can't do this as we've already closed STDERR!!!
- *
- * perror("exec");
- */
- return -1;
- }
- return 0;
-}
-
-/*
- *--------------------------------------------------------------
- *
- * OS_AsyncReadStdin --
- *
- * This initiates an asynchronous read on the standard
- * input handle.
- *
- * The abstraction is necessary because Windows NT does not
- * have a clean way of "select"ing a file descriptor for
- * I/O.
- *
- * Results:
- * -1 if error, 0 otherwise.
- *
- * Side effects:
- * Asynchronous bit is set in the readfd variable and
- * request is enqueued.
- *
- *--------------------------------------------------------------
- */
-int OS_AsyncReadStdin(void *buf, int len, OS_AsyncProc procPtr,
- ClientData clientData)
-{
- int index = AIO_RD_IX(STDIN_FILENO);
-
- asyncIoInUse = TRUE;
- ASSERT(asyncIoTable[index].inUse == 0);
- asyncIoTable[index].procPtr = procPtr;
- asyncIoTable[index].clientData = clientData;
- asyncIoTable[index].fd = STDIN_FILENO;
- asyncIoTable[index].len = len;
- asyncIoTable[index].offset = 0;
- asyncIoTable[index].buf = buf;
- asyncIoTable[index].inUse = 1;
- FD_SET(STDIN_FILENO, &readFdSet);
- if(STDIN_FILENO > maxFd)
- maxFd = STDIN_FILENO;
- return 0;
-}
-
-static void GrowAsyncTable(void)
-{
- int oldTableSize = asyncIoTableSize;
-
- asyncIoTableSize = asyncIoTableSize * 2;
- asyncIoTable = (AioInfo *)realloc(asyncIoTable, asyncIoTableSize * sizeof(AioInfo));
- if(asyncIoTable == NULL) {
- errno = ENOMEM;
- exit(errno);
- }
- memset((char *) &asyncIoTable[oldTableSize], 0,
- oldTableSize * sizeof(AioInfo));
-
-}
-
-/*
- *--------------------------------------------------------------
- *
- * OS_AsyncRead --
- *
- * This initiates an asynchronous read on the file
- * handle which may be a socket or named pipe.
- *
- * We also must save the ProcPtr and ClientData, so later
- * when the io completes, we know who to call.
- *
- * We don't look at any results here (the ReadFile may
- * return data if it is cached) but do all completion
- * processing in OS_Select when we get the io completion
- * port done notifications. Then we call the callback.
- *
- * Results:
- * -1 if error, 0 otherwise.
- *
- * Side effects:
- * Asynchronous I/O operation is queued for completion.
- *
- *--------------------------------------------------------------
- */
-int OS_AsyncRead(int fd, int offset, void *buf, int len,
- OS_AsyncProc procPtr, ClientData clientData)
-{
- int index = AIO_RD_IX(fd);
-
- ASSERT(asyncIoTable != NULL);
- asyncIoInUse = TRUE;
-
- if(fd > maxFd)
- maxFd = fd;
-
- if(index >= asyncIoTableSize) {
- GrowAsyncTable();
- }
-
- ASSERT(asyncIoTable[index].inUse == 0);
- asyncIoTable[index].procPtr = procPtr;
- asyncIoTable[index].clientData = clientData;
- asyncIoTable[index].fd = fd;
- asyncIoTable[index].len = len;
- asyncIoTable[index].offset = offset;
- asyncIoTable[index].buf = buf;
- asyncIoTable[index].inUse = 1;
- FD_SET(fd, &readFdSet);
- return 0;
-}
-
-/*
- *--------------------------------------------------------------
- *
- * OS_AsyncWrite --
- *
- * This initiates an asynchronous write on the "fake" file
- * descriptor (which may be a file, socket, or named pipe).
- * We also must save the ProcPtr and ClientData, so later
- * when the io completes, we know who to call.
- *
- * We don't look at any results here (the WriteFile generally
- * completes immediately) but do all completion processing
- * in OS_DoIo when we get the io completion port done
- * notifications. Then we call the callback.
- *
- * Results:
- * -1 if error, 0 otherwise.
- *
- * Side effects:
- * Asynchronous I/O operation is queued for completion.
- *
- *--------------------------------------------------------------
- */
-int OS_AsyncWrite(int fd, int offset, void *buf, int len,
- OS_AsyncProc procPtr, ClientData clientData)
-{
- int index = AIO_WR_IX(fd);
-
- asyncIoInUse = TRUE;
-
- if(fd > maxFd)
- maxFd = fd;
-
- if(index >= asyncIoTableSize) {
- GrowAsyncTable();
- }
-
- ASSERT(asyncIoTable[index].inUse == 0);
- asyncIoTable[index].procPtr = procPtr;
- asyncIoTable[index].clientData = clientData;
- asyncIoTable[index].fd = fd;
- asyncIoTable[index].len = len;
- asyncIoTable[index].offset = offset;
- asyncIoTable[index].buf = buf;
- asyncIoTable[index].inUse = 1;
- FD_SET(fd, &writeFdSet);
- return 0;
-}
-
-/*
- *--------------------------------------------------------------
- *
- * OS_Close --
- *
- * Closes the descriptor. This is a pass through to the
- * Unix close.
- *
- * Results:
- * 0 for success, -1 on failure
- *
- * Side effects:
- * None.
- *
- *--------------------------------------------------------------
- */
-int OS_Close(int fd)
-{
- if (fd == -1)
- return 0;
-
- if (asyncIoInUse) {
- int index = AIO_RD_IX(fd);
-
- FD_CLR(fd, &readFdSet);
- FD_CLR(fd, &readFdSetPost);
- if (asyncIoTable[index].inUse != 0) {
- asyncIoTable[index].inUse = 0;
- }
-
- FD_CLR(fd, &writeFdSet);
- FD_CLR(fd, &writeFdSetPost);
- index = AIO_WR_IX(fd);
- if (asyncIoTable[index].inUse != 0) {
- asyncIoTable[index].inUse = 0;
- }
-
- if (maxFd == fd) {
- maxFd--;
- }
- }
- return close(fd);
-}
-
-/*
- *--------------------------------------------------------------
- *
- * OS_CloseRead --
- *
- * Cancel outstanding asynchronous reads and prevent subsequent
- * reads from completing.
- *
- * Results:
- * Socket or file is shutdown. Return values mimic Unix shutdown:
- * 0 success, -1 failure
- *
- *--------------------------------------------------------------
- */
-int OS_CloseRead(int fd)
-{
- if(asyncIoTable[AIO_RD_IX(fd)].inUse != 0) {
- asyncIoTable[AIO_RD_IX(fd)].inUse = 0;
- FD_CLR(fd, &readFdSet);
- }
-
- return shutdown(fd, 0);
-}
-
-/*
- *--------------------------------------------------------------
- *
- * OS_DoIo --
- *
- * This function was formerly OS_Select. It's purpose is
- * to pull I/O completion events off the queue and dispatch
- * them to the appropriate place.
- *
- * Results:
- * Returns 0.
- *
- * Side effects:
- * Handlers are called.
- *
- *--------------------------------------------------------------
- */
-int OS_DoIo(struct timeval *tmo)
-{
- int fd, len, selectStatus;
- OS_AsyncProc procPtr;
- ClientData clientData;
- AioInfo *aioPtr;
- fd_set readFdSetCpy;
- fd_set writeFdSetCpy;
-
- asyncIoInUse = TRUE;
- FD_ZERO(&readFdSetCpy);
- FD_ZERO(&writeFdSetCpy);
-
- for(fd = 0; fd <= maxFd; fd++) {
- if(FD_ISSET(fd, &readFdSet)) {
- FD_SET(fd, &readFdSetCpy);
- }
- if(FD_ISSET(fd, &writeFdSet)) {
- FD_SET(fd, &writeFdSetCpy);
- }
- }
-
- /*
- * If there were no completed events from a prior call, see if there's
- * any work to do.
- */
- if(numRdPosted == 0 && numWrPosted == 0) {
- selectStatus = select((maxFd+1), &readFdSetCpy, &writeFdSetCpy,
- NULL, tmo);
- if(selectStatus < 0) {
- /*exit(errno);*/
- /* not sure what's best to do here */
- return -1;
- }
-
- for(fd = 0; fd <= maxFd; fd++) {
- /*
- * Build up a list of completed events. We'll work off of
- * this list as opposed to looping through the read and write
- * fd sets since they can be affected by a callbacl routine.
- */
- if(FD_ISSET(fd, &readFdSetCpy)) {
- numRdPosted++;
- FD_SET(fd, &readFdSetPost);
- FD_CLR(fd, &readFdSet);
- }
-
- if(FD_ISSET(fd, &writeFdSetCpy)) {
- numWrPosted++;
- FD_SET(fd, &writeFdSetPost);
- FD_CLR(fd, &writeFdSet);
- }
- }
- }
-
- if(numRdPosted == 0 && numWrPosted == 0)
- return 0;
-
- for(fd = 0; fd <= maxFd; fd++) {
- /*
- * Do reads and dispatch callback.
- */
- if(FD_ISSET(fd, &readFdSetPost)
- && asyncIoTable[AIO_RD_IX(fd)].inUse) {
-
- numRdPosted--;
- FD_CLR(fd, &readFdSetPost);
- aioPtr = &asyncIoTable[AIO_RD_IX(fd)];
-
- len = read(aioPtr->fd, aioPtr->buf, aioPtr->len);
-
- procPtr = aioPtr->procPtr;
- aioPtr->procPtr = NULL;
- clientData = aioPtr->clientData;
- aioPtr->inUse = 0;
-
- (*procPtr)(clientData, len);
- }
-
- /*
- * Do writes and dispatch callback.
- */
- if(FD_ISSET(fd, &writeFdSetPost) &&
- asyncIoTable[AIO_WR_IX(fd)].inUse) {
-
- numWrPosted--;
- FD_CLR(fd, &writeFdSetPost);
- aioPtr = &asyncIoTable[AIO_WR_IX(fd)];
-
- len = write(aioPtr->fd, aioPtr->buf, aioPtr->len);
-
- procPtr = aioPtr->procPtr;
- aioPtr->procPtr = NULL;
- clientData = aioPtr->clientData;
- aioPtr->inUse = 0;
- (*procPtr)(clientData, len);
- }
- }
- return 0;
-}
-
-/*
- * Not all systems have strdup().
- * @@@ autoconf should determine whether or not this is needed, but for now..
- */
-static char * str_dup(const char * str)
-{
- char * sdup = (char *) malloc(strlen(str) + 1);
-
- if (sdup)
- strcpy(sdup, str);
-
- return sdup;
-}
-
-/*
- *----------------------------------------------------------------------
- *
- * ClientAddrOK --
- *
- * Checks if a client address is in a list of allowed addresses
- *
- * Results:
- * TRUE if address list is empty or client address is present
- * in the list, FALSE otherwise.
- *
- *----------------------------------------------------------------------
- */
-static int ClientAddrOK(struct sockaddr_in *saPtr, const char *clientList)
-{
- int result = FALSE;
- char *clientListCopy, *cur, *next;
-
- if (clientList == NULL || *clientList == '\0') {
- return TRUE;
- }
-
- clientListCopy = str_dup(clientList);
-
- for (cur = clientListCopy; cur != NULL; cur = next) {
- next = strchr(cur, ',');
- if (next != NULL) {
- *next++ = '\0';
- }
- if (inet_addr(cur) == saPtr->sin_addr.s_addr) {
- result = TRUE;
- break;
- }
- }
-
- free(clientListCopy);
- return result;
-}
-
-/*
- *----------------------------------------------------------------------
- *
- * AcquireLock --
- *
- * On platforms that implement concurrent calls to accept
- * on a shared listening ipcFd, returns 0. On other platforms,
- * acquires an exclusive lock across all processes sharing a
- * listening ipcFd, blocking until the lock has been acquired.
- *
- * Results:
- * 0 for successful call, -1 in case of system error (fatal).
- *
- * Side effects:
- * This process now has the exclusive lock.
- *
- *----------------------------------------------------------------------
- */
-static int AcquireLock(int sock, int fail_on_intr)
-{
-#ifdef USE_LOCKING
- do {
- struct flock lock;
- lock.l_type = F_WRLCK;
- lock.l_start = 0;
- lock.l_whence = SEEK_SET;
- lock.l_len = 0;
-
- if (fcntl(sock, F_SETLKW, &lock) != -1)
- return 0;
- } while (errno == EINTR
- && ! fail_on_intr
- && ! shutdownPending);
-
- return -1;
-
-#else
- return 0;
-#endif
-}
-
-/*
- *----------------------------------------------------------------------
- *
- * ReleaseLock --
- *
- * On platforms that implement concurrent calls to accept
- * on a shared listening ipcFd, does nothing. On other platforms,
- * releases an exclusive lock acquired by AcquireLock.
- *
- * Results:
- * 0 for successful call, -1 in case of system error (fatal).
- *
- * Side effects:
- * This process no longer holds the lock.
- *
- *----------------------------------------------------------------------
- */
-static int ReleaseLock(int sock)
-{
-#ifdef USE_LOCKING
- do {
- struct flock lock;
- lock.l_type = F_UNLCK;
- lock.l_start = 0;
- lock.l_whence = SEEK_SET;
- lock.l_len = 0;
-
- if (fcntl(sock, F_SETLK, &lock) != -1)
- return 0;
- } while (errno == EINTR);
-
- return -1;
-
-#else
- return 0;
-#endif
-}
-
-/**********************************************************************
- * Determine if the errno resulting from a failed accept() warrants a
- * retry or exit(). Based on Apache's http_main.c accept() handling
- * and Stevens' Unix Network Programming Vol 1, 2nd Ed, para. 15.6.
- */
-static int is_reasonable_accept_errno (const int error)
-{
- switch (error) {
-#ifdef EPROTO
- /* EPROTO on certain older kernels really means ECONNABORTED, so
- * we need to ignore it for them. See discussion in new-httpd
- * archives nh.9701 search for EPROTO. Also see nh.9603, search
- * for EPROTO: There is potentially a bug in Solaris 2.x x<6, and
- * other boxes that implement tcp sockets in userland (i.e. on top of
- * STREAMS). On these systems, EPROTO can actually result in a fatal
- * loop. See PR#981 for example. It's hard to handle both uses of
- * EPROTO. */
- case EPROTO:
-#endif
-#ifdef ECONNABORTED
- case ECONNABORTED:
-#endif
- /* Linux generates the rest of these, other tcp stacks (i.e.
- * bsd) tend to hide them behind getsockopt() interfaces. They
- * occur when the net goes sour or the client disconnects after the
- * three-way handshake has been done in the kernel but before
- * userland has picked up the socket. */
-#ifdef ECONNRESET
- case ECONNRESET:
-#endif
-#ifdef ETIMEDOUT
- case ETIMEDOUT:
-#endif
-#ifdef EHOSTUNREACH
- case EHOSTUNREACH:
-#endif
-#ifdef ENETUNREACH
- case ENETUNREACH:
-#endif
- return 1;
-
- default:
- return 0;
- }
-}
-
-/**********************************************************************
- * This works around a problem on Linux 2.0.x and SCO Unixware (maybe
- * others?). When a connect() is made to a Unix Domain socket, but its
- * not accept()ed before the web server gets impatient and close()s, an
- * accept() results in a valid file descriptor, but no data to read.
- * This causes a block on the first read() - which never returns!
- *
- * Another approach to this is to write() to the socket to provoke a
- * SIGPIPE, but this is a pain because of the FastCGI protocol, the fact
- * that whatever is written has to be universally ignored by all FastCGI
- * web servers, and a SIGPIPE handler has to be installed which returns
- * (or SIGPIPE is ignored).
- *
- * READABLE_UNIX_FD_DROP_DEAD_TIMEVAL = 2,0 by default.
- *
- * Making it shorter is probably safe, but I'll leave that to you. Making
- * it 0,0 doesn't work reliably. The shorter you can reliably make it,
- * the faster your application will be able to recover (waiting 2 seconds
- * may _cause_ the problem when there is a very high demand). At any rate,
- * this is better than perma-blocking.
- */
-static int is_af_unix_keeper(const int fd)
-{
- struct timeval tval = { READABLE_UNIX_FD_DROP_DEAD_TIMEVAL };
- fd_set read_fds;
-
- FD_ZERO(&read_fds);
- FD_SET(fd, &read_fds);
-
- return select(fd + 1, &read_fds, NULL, NULL, &tval) >= 0 && FD_ISSET(fd, &read_fds);
-}
-
-/*
- *----------------------------------------------------------------------
- *
- * OS_Accept --
- *
- * Accepts a new FastCGI connection. This routine knows whether
- * we're dealing with TCP based sockets or NT Named Pipes for IPC.
- *
- * Results:
- * -1 if the operation fails, otherwise this is a valid IPC fd.
- *
- * Side effects:
- * New IPC connection is accepted.
- *
- *----------------------------------------------------------------------
- */
-int OS_Accept(int listen_sock, int fail_on_intr, const char *webServerAddrs)
-{
- int socket = -1;
- union {
- struct sockaddr_un un;
- struct sockaddr_in in;
- } sa;
-
- for (;;) {
- if (AcquireLock(listen_sock, fail_on_intr))
- return -1;
-
- for (;;) {
- do {
-#ifdef HAVE_SOCKLEN
- socklen_t len = sizeof(sa);
-#else
- int len = sizeof(sa);
-#endif
- if (shutdownPending) break;
- /* There's a window here */
-
- socket = accept(listen_sock, (struct sockaddr *)&sa, &len);
- } while (socket < 0
- && errno == EINTR
- && ! fail_on_intr
- && ! shutdownPending);
-
- if (socket < 0) {
- if (shutdownPending || ! is_reasonable_accept_errno(errno)) {
- int errnoSave = errno;
-
- ReleaseLock(listen_sock);
-
- if (! shutdownPending) {
- errno = errnoSave;
- }
-
- return (-1);
- }
- errno = 0;
- }
- else { /* socket >= 0 */
- int set = 1;
-
- if (sa.in.sin_family != AF_INET)
- break;
-
-#ifdef TCP_NODELAY
- /* No replies to outgoing data, so disable Nagle */
- setsockopt(socket, IPPROTO_TCP, TCP_NODELAY, (char *)&set, sizeof(set));
-#endif
-
- /* Check that the client IP address is approved */
- if (ClientAddrOK(&sa.in, webServerAddrs))
- break;
-
- close(socket);
- } /* socket >= 0 */
- } /* for(;;) */
-
- if (ReleaseLock(listen_sock))
- return (-1);
-
- if (sa.in.sin_family != AF_UNIX || is_af_unix_keeper(socket))
- break;
-
- close(socket);
- } /* while(1) - lock */
-
- return (socket);
-}
-
-/*
- *----------------------------------------------------------------------
- *
- * OS_IpcClose
- *
- * OS IPC routine to close an IPC connection.
- *
- * Results:
- *
- *
- * Side effects:
- * IPC connection is closed.
- *
- *----------------------------------------------------------------------
- */
-int OS_IpcClose(int ipcFd)
-{
- return OS_Close(ipcFd);
-}
-
-/*
- *----------------------------------------------------------------------
- *
- * OS_IsFcgi --
- *
- * Determines whether this process is a FastCGI process or not.
- *
- * Results:
- * Returns 1 if FastCGI, 0 if not.
- *
- * Side effects:
- * None.
- *
- *----------------------------------------------------------------------
- */
-int OS_IsFcgi(int sock)
-{
- union {
- struct sockaddr_in in;
- struct sockaddr_un un;
- } sa;
-#ifdef HAVE_SOCKLEN
- socklen_t len = sizeof(sa);
-#else
- int len = sizeof(sa);
-#endif
-
- errno = 0;
-
- if (getpeername(sock, (struct sockaddr *)&sa, &len) != 0 && errno == ENOTCONN) {
- return TRUE;
- }
- else {
- return FALSE;
- }
-}
-
-/*
- *----------------------------------------------------------------------
- *
- * OS_SetFlags --
- *
- * Sets selected flag bits in an open file descriptor.
- *
- *----------------------------------------------------------------------
- */
-void OS_SetFlags(int fd, int flags)
-{
- int val;
- if((val = fcntl(fd, F_GETFL, 0)) < 0) {
- return;
- }
- val |= flags;
- if(fcntl(fd, F_SETFL, val) < 0) {
- return;
- }
-}
diff --git a/sapi/cgi/libfcgi/os_win32.c b/sapi/cgi/libfcgi/os_win32.c
deleted file mode 100644
index 723ef81060..0000000000
--- a/sapi/cgi/libfcgi/os_win32.c
+++ /dev/null
@@ -1,2067 +0,0 @@
-/*
- * os_win32.c --
- *
- *
- * Copyright (c) 1995 Open Market, Inc.
- * All rights reserved.
- *
- * This file contains proprietary and confidential information and
- * remains the unpublished property of Open Market, Inc. Use,
- * disclosure, or reproduction is prohibited except as permitted by
- * express written license agreement with Open Market, Inc.
- *
- * Bill Snapper
- * snapper@openmarket.com
- *
- * (Special thanks to Karen and Bill. They made my job much easier and
- * significantly more enjoyable.)
- */
-#ifndef lint
-static const char rcsid[] = "$Id$";
-#endif /* not lint */
-
-#define WIN32_LEAN_AND_MEAN
-#include <windows.h>
-#include <winsock2.h>
-#include <stdlib.h>
-#include <assert.h>
-#include <stdio.h>
-#include <sys/timeb.h>
-
-#define DLLAPI __declspec(dllexport)
-
-#include "fcgimisc.h"
-#include "fcgios.h"
-
-#define WIN32_OPEN_MAX 128 /* XXX: Small hack */
-
-/*
- * millisecs to wait for a client connection before checking the
- * shutdown flag (then go back to waiting for a connection, etc).
- */
-#define ACCEPT_TIMEOUT 1000
-
-#define LOCALHOST "localhost"
-
-static HANDLE hIoCompPort = INVALID_HANDLE_VALUE;
-static HANDLE hStdinCompPort = INVALID_HANDLE_VALUE;
-static HANDLE hStdinThread = INVALID_HANDLE_VALUE;
-
-static HANDLE stdioHandles[3] = {INVALID_HANDLE_VALUE, INVALID_HANDLE_VALUE,
- INVALID_HANDLE_VALUE};
-
-static HANDLE acceptMutex = INVALID_HANDLE_VALUE;
-
-static BOOLEAN shutdownPending = FALSE;
-static BOOLEAN shutdownNow = FALSE;
-
-static BOOLEAN bImpersonate = FALSE;
-/*
- * An enumeration of the file types
- * supported by the FD_TABLE structure.
- *
- * XXX: Not all currently supported. This allows for future
- * functionality.
- */
-typedef enum {
- FD_UNUSED,
- FD_FILE_SYNC,
- FD_FILE_ASYNC,
- FD_SOCKET_SYNC,
- FD_SOCKET_ASYNC,
- FD_PIPE_SYNC,
- FD_PIPE_ASYNC
-} FILE_TYPE;
-
-typedef union {
- HANDLE fileHandle;
- SOCKET sock;
- unsigned int value;
-} DESCRIPTOR;
-
-/*
- * Structure used to map file handle and socket handle
- * values into values that can be used to create unix-like
- * select bitmaps, read/write for both sockets/files.
- */
-struct FD_TABLE {
- DESCRIPTOR fid;
- FILE_TYPE type;
- char *path;
- DWORD Errno;
- unsigned long instance;
- int status;
- int offset; /* only valid for async file writes */
- LPDWORD offsetHighPtr; /* pointers to offset high and low words */
- LPDWORD offsetLowPtr; /* only valid for async file writes (logs) */
- HANDLE hMapMutex; /* mutex handle for multi-proc offset update */
- LPVOID ovList; /* List of associated OVERLAPPED_REQUESTs */
-};
-
-/*
- * XXX Note there is no dyanmic sizing of this table, so if the
- * number of open file descriptors exceeds WIN32_OPEN_MAX the
- * app will blow up.
- */
-static struct FD_TABLE fdTable[WIN32_OPEN_MAX];
-
-static CRITICAL_SECTION fdTableCritical;
-
-struct OVERLAPPED_REQUEST {
- OVERLAPPED overlapped;
- unsigned long instance; /* file instance (won't match after a close) */
- OS_AsyncProc procPtr; /* callback routine */
- ClientData clientData; /* callback argument */
- ClientData clientData1; /* additional clientData */
-};
-typedef struct OVERLAPPED_REQUEST *POVERLAPPED_REQUEST;
-
-static const char *bindPathPrefix = "\\\\.\\pipe\\FastCGI\\";
-
-static FILE_TYPE listenType = FD_UNUSED;
-
-// XXX This should be a DESCRIPTOR
-static HANDLE hListen = INVALID_HANDLE_VALUE;
-
-static OVERLAPPED listenOverlapped;
-static BOOLEAN libInitialized = FALSE;
-
-/*
- *--------------------------------------------------------------
- *
- * Win32NewDescriptor --
- *
- * Set up for I/O descriptor masquerading.
- *
- * Results:
- * Returns "fake id" which masquerades as a UNIX-style "small
- * non-negative integer" file/socket descriptor.
- * Win32_* routine below will "do the right thing" based on the
- * descriptor's actual type. -1 indicates failure.
- *
- * Side effects:
- * Entry in fdTable is reserved to represent the socket/file.
- *
- *--------------------------------------------------------------
- */
-static int Win32NewDescriptor(FILE_TYPE type, int fd, int desiredFd)
-{
- int index = -1;
-
- EnterCriticalSection(&fdTableCritical);
-
- /*
- * If desiredFd is set, try to get this entry (this is used for
- * mapping stdio handles). Otherwise try to get the fd entry.
- * If this is not available, find a the first empty slot. .
- */
- if (desiredFd >= 0 && desiredFd < WIN32_OPEN_MAX)
- {
- if (fdTable[desiredFd].type == FD_UNUSED)
- {
- index = desiredFd;
- }
- }
- else if (fd > 0)
- {
- if (fd < WIN32_OPEN_MAX && fdTable[fd].type == FD_UNUSED)
- {
- index = fd;
- }
- else
- {
- int i;
-
- for (i = 1; i < WIN32_OPEN_MAX; ++i)
- {
- if (fdTable[i].type == FD_UNUSED)
- {
- index = i;
- break;
- }
- }
- }
- }
-
- if (index != -1)
- {
- fdTable[index].fid.value = fd;
- fdTable[index].type = type;
- fdTable[index].path = NULL;
- fdTable[index].Errno = NO_ERROR;
- fdTable[index].status = 0;
- fdTable[index].offset = -1;
- fdTable[index].offsetHighPtr = fdTable[index].offsetLowPtr = NULL;
- fdTable[index].hMapMutex = NULL;
- fdTable[index].ovList = NULL;
- }
-
- LeaveCriticalSection(&fdTableCritical);
- return index;
-}
-
-/*
- *--------------------------------------------------------------
- *
- * StdinThread--
- *
- * This thread performs I/O on stadard input. It is needed
- * because you can't guarantee that all applications will
- * create standard input with sufficient access to perform
- * asynchronous I/O. Since we don't want to block the app
- * reading from stdin we make it look like it's using I/O
- * completion ports to perform async I/O.
- *
- * Results:
- * Data is read from stdin and posted to the io completion
- * port.
- *
- * Side effects:
- * None.
- *
- *--------------------------------------------------------------
- */
-static void StdinThread(LPDWORD startup){
-
- int doIo = TRUE;
- unsigned long fd;
- unsigned long bytesRead;
- POVERLAPPED_REQUEST pOv;
-
- // Touch the arg to prevent warning
- startup = NULL;
-
- while(doIo) {
- /*
- * Block until a request to read from stdin comes in or a
- * request to terminate the thread arrives (fd = -1).
- */
- if (!GetQueuedCompletionStatus(hStdinCompPort, &bytesRead, &fd,
- (LPOVERLAPPED *)&pOv, (DWORD)-1) && !pOv) {
- doIo = 0;
- break;
- }
-
- ASSERT((fd == STDIN_FILENO) || (fd == -1));
- if(fd == -1) {
- doIo = 0;
- break;
- }
- ASSERT(pOv->clientData1 != NULL);
-
- if(ReadFile(stdioHandles[STDIN_FILENO], pOv->clientData1, bytesRead,
- &bytesRead, NULL)) {
- PostQueuedCompletionStatus(hIoCompPort, bytesRead,
- STDIN_FILENO, (LPOVERLAPPED)pOv);
- } else {
- doIo = 0;
- break;
- }
- }
-
- ExitThread(0);
-}
-
-void OS_ShutdownPending(void)
-{
- shutdownPending = TRUE;
-}
-
-/* XXX Need a shutdown now event */
-static DWORD WINAPI ShutdownRequestThread(LPVOID arg)
-{
- HANDLE shutdownEvent = (HANDLE) arg;
- WaitForSingleObject(shutdownEvent, INFINITE);
- shutdownPending = TRUE;
- // Before an accept() is entered the shutdownPending flag is checked.
- // If set, OS_Accept() will return -1. If not, it waits
- // on a connection request for one second, checks the flag, & repeats.
- // Only one process/thread is allowed to do this at time by
- // wrapping the accept() with mutex.
- return 0;
-}
-
-int OS_SetImpersonate(void)
-{
- char *os_name = NULL;
- os_name = getenv("OS");
- if (os_name && stricmp(os_name, "Windows_NT") == 0) {
- bImpersonate = TRUE;
- return 1;
- }
- return 0;
-}
-
-/*
- *--------------------------------------------------------------
- *
- * OS_LibInit --
- *
- * Set up the OS library for use.
- *
- * Results:
- * Returns 0 if success, -1 if not.
- *
- * Side effects:
- * Sockets initialized, pseudo file descriptors setup, etc.
- *
- *--------------------------------------------------------------
- */
-int OS_LibInit(int stdioFds[3])
-{
- WORD wVersion;
- WSADATA wsaData;
- int err;
- int fakeFd;
- DWORD threadId;
- char *cLenPtr = NULL;
- char *val = NULL;
-
- if(libInitialized)
- return 0;
-
- InitializeCriticalSection(&fdTableCritical);
-
- /*
- * Initialize windows sockets library.
- */
- wVersion = MAKEWORD(2,0);
- err = WSAStartup( wVersion, &wsaData );
- if (err) {
- fprintf(stderr, "Error starting Windows Sockets. Error: %d",
- WSAGetLastError());
- //exit(111);
- return -1;
- }
-
- /*
- * Create the I/O completion port to be used for our I/O queue.
- */
- if (hIoCompPort == INVALID_HANDLE_VALUE) {
- hIoCompPort = CreateIoCompletionPort (INVALID_HANDLE_VALUE, NULL,
- 0, 1);
- if(hIoCompPort == INVALID_HANDLE_VALUE) {
- printf("<H2>OS_LibInit Failed CreateIoCompletionPort! ERROR: %d</H2>\r\n\r\n",
- GetLastError());
- return -1;
- }
- }
-
- /*
- * If a shutdown event is in the env, save it (I don't see any to
- * remove it from the environment out from under the application).
- * Spawn a thread to wait on the shutdown request.
- */
- val = getenv(SHUTDOWN_EVENT_NAME);
- if (val != NULL)
- {
- HANDLE shutdownEvent = (HANDLE) atoi(val);
-
- if (! CreateThread(NULL, 0, ShutdownRequestThread,
- shutdownEvent, 0, NULL))
- {
- return -1;
- }
- }
-
- /*
- * If an accept mutex is in the env, save it and remove it.
- */
- val = getenv(MUTEX_VARNAME);
- if (val != NULL)
- {
- acceptMutex = (HANDLE) atoi(val);
- }
-
-
- /*
- * Determine if this library is being used to listen for FastCGI
- * connections. This is communicated by STDIN containing a
- * valid handle to a listener object. In this case, both the
- * "stdout" and "stderr" handles will be INVALID (ie. closed) by
- * the starting process.
- *
- * The trick is determining if this is a pipe or a socket...
- *
- * XXX: Add the async accept test to determine socket or handle to a
- * pipe!!!
- */
- if((GetStdHandle(STD_OUTPUT_HANDLE) == INVALID_HANDLE_VALUE) &&
- (GetStdHandle(STD_ERROR_HANDLE) == INVALID_HANDLE_VALUE) &&
- (GetStdHandle(STD_INPUT_HANDLE) != INVALID_HANDLE_VALUE) )
- {
- DWORD pipeMode = PIPE_READMODE_BYTE | PIPE_WAIT;
- HANDLE oldStdIn = GetStdHandle(STD_INPUT_HANDLE);
-
- // Move the handle to a "low" number
- if (! DuplicateHandle(GetCurrentProcess(), oldStdIn,
- GetCurrentProcess(), &hListen,
- 0, TRUE, DUPLICATE_SAME_ACCESS))
- {
- return -1;
- }
-
- if (! SetStdHandle(STD_INPUT_HANDLE, hListen))
- {
- return -1;
- }
-
- CloseHandle(oldStdIn);
-
- /*
- * Set the pipe handle state so that it operates in wait mode.
- *
- * NOTE: The listenFd is not mapped to a pseudo file descriptor
- * as all work done on it is contained to the OS library.
- *
- * XXX: Initial assumption is that SetNamedPipeHandleState will
- * fail if this is an IP socket...
- */
- if (SetNamedPipeHandleState(hListen, &pipeMode, NULL, NULL))
- {
- listenType = FD_PIPE_SYNC;
- listenOverlapped.hEvent = CreateEvent(NULL, TRUE, FALSE, NULL);
- }
- else
- {
- listenType = FD_SOCKET_SYNC;
- }
- }
-
- /*
- * If there are no stdioFds passed in, we're done.
- */
- if(stdioFds == NULL) {
- libInitialized = 1;
- return 0;
- }
-
- /*
- * Setup standard input asynchronous I/O. There is actually a separate
- * thread spawned for this purpose. The reason for this is that some
- * web servers use anonymous pipes for the connection between itself
- * and a CGI application. Anonymous pipes can't perform asynchronous
- * I/O or use I/O completion ports. Therefore in order to present a
- * consistent I/O dispatch model to an application we emulate I/O
- * completion port behavior by having the standard input thread posting
- * messages to the hIoCompPort which look like a complete overlapped
- * I/O structure. This keeps the event dispatching simple from the
- * application perspective.
- */
- stdioHandles[STDIN_FILENO] = GetStdHandle(STD_INPUT_HANDLE);
-
- if(!SetHandleInformation(stdioHandles[STDIN_FILENO],
- HANDLE_FLAG_INHERIT, 0)) {
-/*
- * XXX: Causes error when run from command line. Check KB
- err = GetLastError();
- DebugBreak();
- exit(99);
- */
- return -1;
- }
-
- if ((fakeFd = Win32NewDescriptor(FD_PIPE_SYNC,
- (int)stdioHandles[STDIN_FILENO],
- STDIN_FILENO)) == -1) {
- return -1;
- } else {
- /*
- * Set stdin equal to our pseudo FD and create the I/O completion
- * port to be used for async I/O.
- */
- stdioFds[STDIN_FILENO] = fakeFd;
- }
-
- /*
- * Create the I/O completion port to be used for communicating with
- * the thread doing I/O on standard in. This port will carry read
- * and possibly thread termination requests to the StdinThread.
- */
- if (hStdinCompPort == INVALID_HANDLE_VALUE) {
- hStdinCompPort = CreateIoCompletionPort (INVALID_HANDLE_VALUE, NULL,
- 0, 1);
- if(hStdinCompPort == INVALID_HANDLE_VALUE) {
- printf("<H2>OS_LibInit Failed CreateIoCompletionPort: STDIN! ERROR: %d</H2>\r\n\r\n",
- GetLastError());
- return -1;
- }
- }
-
- /*
- * Create the thread that will read stdin if the CONTENT_LENGTH
- * is non-zero.
- */
- if((cLenPtr = getenv("CONTENT_LENGTH")) != NULL &&
- atoi(cLenPtr) > 0) {
- hStdinThread = CreateThread(NULL, 8192,
- (LPTHREAD_START_ROUTINE)&StdinThread,
- NULL, 0, &threadId);
- if (hStdinThread == NULL) {
- printf("<H2>OS_LibInit Failed to create STDIN thread! ERROR: %d</H2>\r\n\r\n",
- GetLastError());
- return -1;
- }
- }
-
- /*
- * STDOUT will be used synchronously.
- *
- * XXX: May want to convert this so that it could be used for OVERLAPPED
- * I/O later. If so, model it after the Stdin I/O as stdout is
- * also incapable of async I/O on some servers.
- */
- stdioHandles[STDOUT_FILENO] = GetStdHandle(STD_OUTPUT_HANDLE);
- if(!SetHandleInformation(stdioHandles[STDOUT_FILENO],
- HANDLE_FLAG_INHERIT, FALSE)) {
- //exit(99);
- return -1;
- }
-
- if ((fakeFd = Win32NewDescriptor(FD_PIPE_SYNC,
- (int)stdioHandles[STDOUT_FILENO],
- STDOUT_FILENO)) == -1) {
- return -1;
- } else {
- /*
- * Set stdout equal to our pseudo FD
- */
- stdioFds[STDOUT_FILENO] = fakeFd;
- }
-
- stdioHandles[STDERR_FILENO] = GetStdHandle(STD_ERROR_HANDLE);
- if(!SetHandleInformation(stdioHandles[STDERR_FILENO],
- HANDLE_FLAG_INHERIT, FALSE)) {
- //exit(99);
- return -1;
- }
- if ((fakeFd = Win32NewDescriptor(FD_PIPE_SYNC,
- (int)stdioHandles[STDERR_FILENO],
- STDERR_FILENO)) == -1) {
- return -1;
- } else {
- /*
- * Set stderr equal to our pseudo FD
- */
- stdioFds[STDERR_FILENO] = fakeFd;
- }
-
- return 0;
-}
-
-/*
- *--------------------------------------------------------------
- *
- * OS_LibShutdown --
- *
- * Shutdown the OS library.
- *
- * Results:
- * None.
- *
- * Side effects:
- * Memory freed, handles closed.
- *
- *--------------------------------------------------------------
- */
-void OS_LibShutdown()
-{
-
- if (hIoCompPort != INVALID_HANDLE_VALUE)
- {
- CloseHandle(hIoCompPort);
- hIoCompPort = INVALID_HANDLE_VALUE;
- }
-
- if (hStdinCompPort != INVALID_HANDLE_VALUE)
- {
- CloseHandle(hStdinCompPort);
- hStdinCompPort = INVALID_HANDLE_VALUE;
- }
-
- if (acceptMutex != INVALID_HANDLE_VALUE)
- {
- ReleaseMutex(acceptMutex);
- CloseHandle(acceptMutex);
- }
-
- /* we only want to do this if we're not a web server */
- if (stdioHandles[0] != INVALID_HANDLE_VALUE) {
- DisconnectNamedPipe(hListen);
- CancelIo(hListen);
- if (bImpersonate) RevertToSelf();
- }
-
- DeleteCriticalSection(&fdTableCritical);
- WSACleanup();
-}
-
-/*
- *--------------------------------------------------------------
- *
- * Win32FreeDescriptor --
- *
- * Free I/O descriptor entry in fdTable.
- *
- * Results:
- * Frees I/O descriptor entry in fdTable.
- *
- * Side effects:
- * None.
- *
- *--------------------------------------------------------------
- */
-static void Win32FreeDescriptor(int fd)
-{
- /* Catch it if fd is a bogus value */
- ASSERT((fd >= 0) && (fd < WIN32_OPEN_MAX));
-
- EnterCriticalSection(&fdTableCritical);
-
- if (fdTable[fd].type != FD_UNUSED)
- {
- switch (fdTable[fd].type)
- {
- case FD_FILE_SYNC:
- case FD_FILE_ASYNC:
-
- /* Free file path string */
- ASSERT(fdTable[fd].path != NULL);
-
- free(fdTable[fd].path);
- fdTable[fd].path = NULL;
- break;
- case FD_PIPE_ASYNC:
- break;
- default:
- break;
- }
-
- ASSERT(fdTable[fd].path == NULL);
-
- fdTable[fd].type = FD_UNUSED;
- fdTable[fd].path = NULL;
- fdTable[fd].Errno = NO_ERROR;
- fdTable[fd].offsetHighPtr = fdTable[fd].offsetLowPtr = NULL;
-
- if (fdTable[fd].hMapMutex != NULL)
- {
- CloseHandle(fdTable[fd].hMapMutex);
- fdTable[fd].hMapMutex = NULL;
- }
- }
-
- LeaveCriticalSection(&fdTableCritical);
-
- return;
-}
-
-static short getPort(const char * bindPath)
-{
- short port = 0;
- char * p = strchr(bindPath, ':');
-
- if (p && *++p)
- {
- char buf[6];
-
- strncpy(buf, p, 6);
- buf[5] = '\0';
-
- port = (short) atoi(buf);
- }
-
- return port;
-}
-
-/**
-This function builds a Dacl which grants the creator of the objects
-FILE_ALL_ACCESS and Everyone FILE_GENERIC_READ and FILE_GENERIC_WRITE
-access to the object.
-
-This Dacl allows for higher security than a NULL Dacl, which is common for
-named-pipes, as this only grants the creator/owner write access to the
-security descriptor, and grants Everyone the ability to "use" the named-pipe.
-This scenario prevents a malevolent user from disrupting service by preventing
-arbitrary access manipulation.
-**/
-BOOL
-BuildNamedPipeAcl(
- PACL pAcl,
- PDWORD cbAclSize
- )
-{
- DWORD dwAclSize;
-
- SID_IDENTIFIER_AUTHORITY siaWorld = SECURITY_WORLD_SID_AUTHORITY;
- SID_IDENTIFIER_AUTHORITY siaCreator = SECURITY_CREATOR_SID_AUTHORITY;
-
- BYTE BufEveryoneSid[32];
- BYTE BufOwnerSid[32];
-
- PSID pEveryoneSid = (PSID)BufEveryoneSid;
- PSID pOwnerSid = (PSID)BufOwnerSid;
-
- //
- // compute size of acl
- //
- dwAclSize = sizeof(ACL) +
- 2 * ( sizeof(ACCESS_ALLOWED_ACE) - sizeof(DWORD) ) +
- GetSidLengthRequired( 1 ) + // well-known Everyone Sid
- GetSidLengthRequired( 1 ) ; // well-known Creator Owner Sid
-
- if(*cbAclSize < dwAclSize) {
- *cbAclSize = dwAclSize;
- return FALSE;
- }
-
- *cbAclSize = dwAclSize;
-
- //
- // intialize well known sids
- //
-
- if(!InitializeSid(pEveryoneSid, &siaWorld, 1)) return FALSE;
- *GetSidSubAuthority(pEveryoneSid, 0) = SECURITY_WORLD_RID;
-
- if(!InitializeSid(pOwnerSid, &siaCreator, 1)) return FALSE;
- *GetSidSubAuthority(pOwnerSid, 0) = SECURITY_CREATOR_OWNER_RID;
-
- if(!InitializeAcl(pAcl, dwAclSize, ACL_REVISION))
- return FALSE;
-
- //
- //
- if(!AddAccessAllowedAce(
- pAcl,
- ACL_REVISION,
- FILE_GENERIC_READ | FILE_GENERIC_WRITE,
- pEveryoneSid
- ))
- return FALSE;
-
- //
- //
- return AddAccessAllowedAce(
- pAcl,
- ACL_REVISION,
- FILE_ALL_ACCESS,
- pOwnerSid
- );
-}
-
-
-/*
- * OS_CreateLocalIpcFd --
- *
- * This procedure is responsible for creating the listener pipe
- * on Windows NT for local process communication. It will create a
- * named pipe and return a file descriptor to it to the caller.
- *
- * Results:
- * Listener pipe created. This call returns either a valid
- * pseudo file descriptor or -1 on error.
- *
- * Side effects:
- * Listener pipe and IPC address are stored in the FCGI info
- * structure.
- * 'errno' will set on errors (-1 is returned).
- *
- *----------------------------------------------------------------------
- */
-int OS_CreateLocalIpcFd(const char *bindPath, int backlog, int bCreateMutex)
-{
- int pseudoFd = -1;
- short port = getPort(bindPath);
- HANDLE mutex = INVALID_HANDLE_VALUE;
- char mutexEnvString[100];
-
- if (bCreateMutex) {
- mutex = CreateMutex(NULL, FALSE, NULL);
- if (! SetHandleInformation(mutex, HANDLE_FLAG_INHERIT, TRUE))
- {
- CloseHandle(mutex);
- return -3;
- }
- // This is a nail for listening to more than one port..
- // This should really be handled by the caller.
- _snprintf(mutexEnvString, sizeof(mutexEnvString)-1, MUTEX_VARNAME "=%d", (int) mutex);
- putenv(mutexEnvString);
- }
-
- // There's nothing to be gained (at the moment) by a shutdown Event
-
- if (port && *bindPath != ':' && strncmp(bindPath, LOCALHOST, strlen(LOCALHOST)))
- {
- fprintf(stderr, "To start a service on a TCP port can not "
- "specify a host name.\n"
- "You should either use \"localhost:<port>\" or "
- " just use \":<port>.\"\n");
- //exit(1);
- if (bCreateMutex) CloseHandle(mutexEnvString);
- return -1;
- }
-
- listenType = (port) ? FD_SOCKET_SYNC : FD_PIPE_ASYNC;
-
- if (port)
- {
- SOCKET listenSock;
- struct sockaddr_in sockAddr;
- int sockLen = sizeof(sockAddr);
-
- memset(&sockAddr, 0, sizeof(sockAddr));
- sockAddr.sin_family = AF_INET;
- sockAddr.sin_addr.s_addr = htonl(INADDR_ANY);
- sockAddr.sin_port = htons(port);
-
- listenSock = socket(AF_INET, SOCK_STREAM, 0);
- if (listenSock == INVALID_SOCKET)
- {
- if (bCreateMutex)CloseHandle(mutexEnvString);
- return -4;
- }
-
- if (bind(listenSock, (struct sockaddr *) &sockAddr, sockLen) )
- {
- if (bCreateMutex)CloseHandle(mutexEnvString);
- return -12;
- }
-
- if (listen(listenSock, backlog))
- {
- if (bCreateMutex)CloseHandle(mutexEnvString);
- return -5;
- }
-
- pseudoFd = Win32NewDescriptor(listenType, listenSock, -1);
-
- if (pseudoFd == -1)
- {
- if (bCreateMutex)CloseHandle(mutexEnvString);
- closesocket(listenSock);
- return -6;
- }
-
- hListen = (HANDLE) listenSock;
- }
- else
- {
- SECURITY_ATTRIBUTES sa;
- SECURITY_DESCRIPTOR sd;
- BYTE AclBuf[ 64 ];
- DWORD cbAclSize = 64;
- PACL pAcl = (PACL)AclBuf;
-
- HANDLE hListenPipe = INVALID_HANDLE_VALUE;
- char *pipePath = malloc(strlen(bindPathPrefix) + strlen(bindPath) + 1);
-
- if (! pipePath)
- {
- if (bCreateMutex)CloseHandle(mutexEnvString);
- return -7;
- }
-
- strcpy(pipePath, bindPathPrefix);
- strcat(pipePath, bindPath);
-
- if (bImpersonate) {
- // get the security attributes for Everybody to connect
- // we do this so that multithreaded servers that run
- // threads under secured users can access pipes created
- // by a system level thread (for instance, IIS)
- //
- // suppress errors regarding startup directory, etc
- //
- SetErrorMode(SEM_FAILCRITICALERRORS);
-
- if(!BuildNamedPipeAcl(pAcl, &cbAclSize)) {
- fprintf(stderr, "BuildNamedPipeAcl");
- return -100;
- }
-
- if(!InitializeSecurityDescriptor(&sd, SECURITY_DESCRIPTOR_REVISION)) {
- fprintf(stderr, "InitializeSecurityDescriptor");
- return -100;
- }
-
- if(!SetSecurityDescriptorDacl(&sd, TRUE, pAcl, FALSE)) {
- fprintf(stderr, "SetSecurityDescriptorDacl");
- return -100;
- }
-
- sa.nLength = sizeof(SECURITY_ATTRIBUTES);
- sa.lpSecurityDescriptor = &sd; // default Dacl of caller
- sa.bInheritHandle = TRUE;
-
- }
-
- hListenPipe = CreateNamedPipe(pipePath,
- PIPE_ACCESS_DUPLEX | FILE_FLAG_OVERLAPPED,
- PIPE_TYPE_BYTE | PIPE_WAIT | PIPE_READMODE_BYTE,
- PIPE_UNLIMITED_INSTANCES,
- 4096, 4096, 0, bImpersonate?&sa:NULL);
-
- free(pipePath);
-
- if (hListenPipe == INVALID_HANDLE_VALUE)
- {
- if (bCreateMutex)CloseHandle(mutexEnvString);
- return -8;
- }
-
- if (! SetHandleInformation(hListenPipe, HANDLE_FLAG_INHERIT, TRUE))
- {
- if (bCreateMutex)CloseHandle(mutexEnvString);
- return -9;
- }
-
- pseudoFd = Win32NewDescriptor(listenType, (int) hListenPipe, -1);
-
- if (pseudoFd == -1)
- {
- if (bCreateMutex)CloseHandle(mutexEnvString);
- CloseHandle(hListenPipe);
- return -10;
- }
-
- hListen = (HANDLE) hListenPipe;
- }
-
- return pseudoFd;
-}
-
-/*
- *----------------------------------------------------------------------
- *
- * OS_FcgiConnect --
- *
- * Create the pipe pathname connect to the remote application if
- * possible.
- *
- * Results:
- * -1 if fail or a valid handle if connection succeeds.
- *
- * Side effects:
- * Remote connection established.
- *
- *----------------------------------------------------------------------
- */
-int OS_FcgiConnect(char *bindPath)
-{
- short port = getPort(bindPath);
- int pseudoFd = -1;
- unsigned int flags = FILE_FLAG_OVERLAPPED;
- if (port)
- {
- struct hostent *hp;
- char *host = NULL;
- struct sockaddr_in sockAddr;
- int sockLen = sizeof(sockAddr);
- SOCKET sock;
-
- if (*bindPath != ':')
- {
- char * p = strchr(bindPath, ':');
- if (p) {
- int len = p - bindPath + 1;
-
- host = (char *)malloc(len);
- if (!host) {
- fprintf(stderr, "Unable to allocate memory\n");
- return -1;
- }
- strncpy(host, bindPath, len);
- host[len-1] = '\0';
- }
- }
-
- hp = gethostbyname(host ? host : LOCALHOST);
-
- if (host)
- {
- free(host);
- }
-
- if (hp == NULL)
- {
- fprintf(stderr, "Unknown host: %s\n", bindPath);
- return -1;
- }
-
- memset(&sockAddr, 0, sizeof(sockAddr));
- sockAddr.sin_family = AF_INET;
- memcpy(&sockAddr.sin_addr, hp->h_addr, hp->h_length);
- sockAddr.sin_port = htons(port);
-
- sock = socket(AF_INET, SOCK_STREAM, 0);
- if (sock == INVALID_SOCKET)
- {
- return -1;
- }
-
- if (connect(sock, (struct sockaddr *) &sockAddr, sockLen) == SOCKET_ERROR)
- {
- closesocket(sock);
- return -1;
- }
-
- pseudoFd = Win32NewDescriptor(FD_SOCKET_SYNC, sock, -1);
- if (pseudoFd == -1)
- {
- closesocket(sock);
- return -1;
- }
- }
- else
- {
- char *pipePath = malloc(strlen(bindPathPrefix) + strlen(bindPath) + 1);
- HANDLE hPipe;
-
- if (! pipePath)
- {
- return -1;
- }
-
- strcpy(pipePath, bindPathPrefix);
- strcat(pipePath, bindPath);
-
- if (bImpersonate) {
- flags |= SECURITY_SQOS_PRESENT | SECURITY_IMPERSONATION;
- }
-
- hPipe = CreateFile(pipePath,
- GENERIC_WRITE | GENERIC_READ,
- FILE_SHARE_READ | FILE_SHARE_WRITE,
- NULL,
- OPEN_EXISTING,
- flags,
- NULL);
-
- free(pipePath);
-
- if( hPipe == INVALID_HANDLE_VALUE || hPipe == 0)
- {
- return -1;
- }
-
- pseudoFd = Win32NewDescriptor(FD_PIPE_ASYNC, (int) hPipe, -1);
-
- if (pseudoFd == -1)
- {
- CloseHandle(hPipe);
- return -1;
- }
-
- /*
- * Set stdin equal to our pseudo FD and create the I/O completion
- * port to be used for async I/O.
- */
- if (! CreateIoCompletionPort(hPipe, hIoCompPort, pseudoFd, 1))
- {
- Win32FreeDescriptor(pseudoFd);
- CloseHandle(hPipe);
- return -1;
- }
- }
-
- return pseudoFd;
-}
-
-/*
- *--------------------------------------------------------------
- *
- * OS_Read --
- *
- * Pass through to the appropriate NT read function.
- *
- * Results:
- * Returns number of byes read. Mimics unix read:.
- * n bytes read, 0 or -1 failure: errno contains actual error
- *
- * Side effects:
- * None.
- *
- *--------------------------------------------------------------
- */
-int OS_Read(int fd, char * buf, size_t len)
-{
- DWORD bytesRead;
- int ret = -1;
-
- ASSERT((fd >= 0) && (fd < WIN32_OPEN_MAX));
-
- if (shutdownNow) return -1;
-
- switch (fdTable[fd].type)
- {
- case FD_FILE_SYNC:
- case FD_FILE_ASYNC:
- case FD_PIPE_SYNC:
- case FD_PIPE_ASYNC:
-
- if (ReadFile(fdTable[fd].fid.fileHandle, buf, len, &bytesRead, NULL))
- {
- ret = bytesRead;
- }
- else
- {
- fdTable[fd].Errno = GetLastError();
- ret = -1;
- }
-
- break;
-
- case FD_SOCKET_SYNC:
- case FD_SOCKET_ASYNC:
-
- ret = recv(fdTable[fd].fid.sock, buf, len, 0);
- if (ret == SOCKET_ERROR)
- {
- fdTable[fd].Errno = WSAGetLastError();
- ret = -1;
- }
-
- break;
-
- default:
-
- ASSERT(0);
- }
-
- return ret;
-}
-
-/*
- *--------------------------------------------------------------
- *
- * OS_Write --
- *
- * Perform a synchronous OS write.
- *
- * Results:
- * Returns number of bytes written. Mimics unix write:
- * n bytes written, 0 or -1 failure (??? couldn't find man page).
- *
- * Side effects:
- * none.
- *
- *--------------------------------------------------------------
- */
-int OS_Write(int fd, char * buf, size_t len)
-{
- DWORD bytesWritten;
- int ret = -1;
-
- ASSERT(fd >= 0 && fd < WIN32_OPEN_MAX);
-
- if (shutdownNow) return -1;
-
- switch (fdTable[fd].type)
- {
- case FD_FILE_SYNC:
- case FD_FILE_ASYNC:
- case FD_PIPE_SYNC:
- case FD_PIPE_ASYNC:
-
- if (WriteFile(fdTable[fd].fid.fileHandle, buf, len, &bytesWritten, NULL))
- {
- ret = bytesWritten;
- }
- else
- {
- fdTable[fd].Errno = GetLastError();
- }
-
- break;
-
- case FD_SOCKET_SYNC:
- case FD_SOCKET_ASYNC:
-
- ret = send(fdTable[fd].fid.sock, buf, len, 0);
- if (ret == SOCKET_ERROR)
- {
- fdTable[fd].Errno = WSAGetLastError();
- ret = -1;
- }
-
- break;
-
- default:
-
- ASSERT(0);
- }
-
- return ret;
-}
-
-/*
- *----------------------------------------------------------------------
- *
- * OS_SpawnChild --
- *
- * Spawns a new server listener process, and stores the information
- * relating to the child in the supplied record. A wait handler is
- * registered on the child's completion. This involves creating
- * a process on NT and preparing a command line with the required
- * state (currently a -childproc flag and the server socket to use
- * for accepting connections).
- *
- * Results:
- * 0 if success, -1 if error.
- *
- * Side effects:
- * Child process spawned.
- *
- *----------------------------------------------------------------------
- */
-int OS_SpawnChild(char *execPath, int listenFd, PROCESS_INFORMATION *pInfo, char *env)
-{
- STARTUPINFO StartupInfo;
- BOOL success;
-
- memset((void *)&StartupInfo, 0, sizeof(STARTUPINFO));
- StartupInfo.cb = sizeof (STARTUPINFO);
- StartupInfo.lpReserved = NULL;
- StartupInfo.lpReserved2 = NULL;
- StartupInfo.cbReserved2 = 0;
- StartupInfo.lpDesktop = NULL;
- StartupInfo.wShowWindow = SW_HIDE;
- /*
- * FastCGI on NT will set the listener pipe HANDLE in the stdin of
- * the new process. The fact that there is a stdin and NULL handles
- * for stdout and stderr tells the FastCGI process that this is a
- * FastCGI process and not a CGI process.
- */
- StartupInfo.dwFlags = STARTF_USESTDHANDLES|STARTF_USESHOWWINDOW;
- /*
- * XXX: Do I have to dup the handle before spawning the process or is
- * it sufficient to use the handle as it's reference counted
- * by NT anyway?
- */
- StartupInfo.hStdInput = fdTable[listenFd].fid.fileHandle;
- StartupInfo.hStdOutput = INVALID_HANDLE_VALUE;
- StartupInfo.hStdError = INVALID_HANDLE_VALUE;
-
- /*
- * Make the listener socket inheritable.
- */
- success = SetHandleInformation(StartupInfo.hStdInput, HANDLE_FLAG_INHERIT,
- TRUE);
- if(!success) {
- //exit(99);
- return -1;
- }
-
- /*
- * XXX: Might want to apply some specific security attributes to the
- * processes.
- */
- success = CreateProcess(execPath, /* LPCSTR address of module name */
- NULL, /* LPCSTR address of command line */
- NULL, /* Process security attributes */
- NULL, /* Thread security attributes */
- TRUE, /* Inheritable Handes inherited. */
- 0, /* DWORD creation flags */
- env, /* Use parent environment block */
- NULL, /* Address of current directory name */
- &StartupInfo, /* Address of STARTUPINFO */
- pInfo); /* Address of PROCESS_INFORMATION */
- if(success) {
- return 0;
- } else {
- return -1;
- }
-}
-
-/*
- *--------------------------------------------------------------
- *
- * OS_AsyncReadStdin --
- *
- * This initiates an asynchronous read on the standard
- * input handle. This handle is not guaranteed to be
- * capable of performing asynchronous I/O so we send a
- * message to the StdinThread to do the synchronous read.
- *
- * Results:
- * -1 if error, 0 otherwise.
- *
- * Side effects:
- * Asynchronous message is queued to the StdinThread and an
- * overlapped structure is allocated/initialized.
- *
- *--------------------------------------------------------------
- */
-int OS_AsyncReadStdin(void *buf, int len, OS_AsyncProc procPtr,
- ClientData clientData)
-{
- POVERLAPPED_REQUEST pOv;
-
- ASSERT(fdTable[STDIN_FILENO].type != FD_UNUSED);
-
- pOv = (POVERLAPPED_REQUEST)malloc(sizeof(struct OVERLAPPED_REQUEST));
- ASSERT(pOv);
- memset((void *)pOv, 0, sizeof(struct OVERLAPPED_REQUEST));
- pOv->clientData1 = (ClientData)buf;
- pOv->instance = fdTable[STDIN_FILENO].instance;
- pOv->procPtr = procPtr;
- pOv->clientData = clientData;
-
- PostQueuedCompletionStatus(hStdinCompPort, len, STDIN_FILENO,
- (LPOVERLAPPED)pOv);
- return 0;
-}
-
-/*
- *--------------------------------------------------------------
- *
- * OS_AsyncRead --
- *
- * This initiates an asynchronous read on the file
- * handle which may be a socket or named pipe.
- *
- * We also must save the ProcPtr and ClientData, so later
- * when the io completes, we know who to call.
- *
- * We don't look at any results here (the ReadFile may
- * return data if it is cached) but do all completion
- * processing in OS_Select when we get the io completion
- * port done notifications. Then we call the callback.
- *
- * Results:
- * -1 if error, 0 otherwise.
- *
- * Side effects:
- * Asynchronous I/O operation is queued for completion.
- *
- *--------------------------------------------------------------
- */
-int OS_AsyncRead(int fd, int offset, void *buf, int len,
- OS_AsyncProc procPtr, ClientData clientData)
-{
- DWORD bytesRead;
- POVERLAPPED_REQUEST pOv;
-
- /*
- * Catch any bogus fd values
- */
- ASSERT((fd >= 0) && (fd < WIN32_OPEN_MAX));
- /*
- * Confirm that this is an async fd
- */
- ASSERT(fdTable[fd].type != FD_UNUSED);
- ASSERT(fdTable[fd].type != FD_FILE_SYNC);
- ASSERT(fdTable[fd].type != FD_PIPE_SYNC);
- ASSERT(fdTable[fd].type != FD_SOCKET_SYNC);
-
- pOv = (POVERLAPPED_REQUEST)malloc(sizeof(struct OVERLAPPED_REQUEST));
- ASSERT(pOv);
- memset((void *)pOv, 0, sizeof(struct OVERLAPPED_REQUEST));
- /*
- * Only file offsets should be non-zero, but make sure.
- */
- if (fdTable[fd].type == FD_FILE_ASYNC)
- if (fdTable[fd].offset >= 0)
- pOv->overlapped.Offset = fdTable[fd].offset;
- else
- pOv->overlapped.Offset = offset;
- pOv->instance = fdTable[fd].instance;
- pOv->procPtr = procPtr;
- pOv->clientData = clientData;
- bytesRead = fd;
- /*
- * ReadFile returns: TRUE success, FALSE failure
- */
- if (!ReadFile(fdTable[fd].fid.fileHandle, buf, len, &bytesRead,
- (LPOVERLAPPED)pOv)) {
- fdTable[fd].Errno = GetLastError();
- if(fdTable[fd].Errno == ERROR_NO_DATA ||
- fdTable[fd].Errno == ERROR_PIPE_NOT_CONNECTED) {
- PostQueuedCompletionStatus(hIoCompPort, 0, fd, (LPOVERLAPPED)pOv);
- return 0;
- }
- if(fdTable[fd].Errno != ERROR_IO_PENDING) {
- PostQueuedCompletionStatus(hIoCompPort, 0, fd, (LPOVERLAPPED)pOv);
- return -1;
- }
- fdTable[fd].Errno = 0;
- }
- return 0;
-}
-
-/*
- *--------------------------------------------------------------
- *
- * OS_AsyncWrite --
- *
- * This initiates an asynchronous write on the "fake" file
- * descriptor (which may be a file, socket, or named pipe).
- * We also must save the ProcPtr and ClientData, so later
- * when the io completes, we know who to call.
- *
- * We don't look at any results here (the WriteFile generally
- * completes immediately) but do all completion processing
- * in OS_DoIo when we get the io completion port done
- * notifications. Then we call the callback.
- *
- * Results:
- * -1 if error, 0 otherwise.
- *
- * Side effects:
- * Asynchronous I/O operation is queued for completion.
- *
- *--------------------------------------------------------------
- */
-int OS_AsyncWrite(int fd, int offset, void *buf, int len,
- OS_AsyncProc procPtr, ClientData clientData)
-{
- DWORD bytesWritten;
- POVERLAPPED_REQUEST pOv;
-
- /*
- * Catch any bogus fd values
- */
- ASSERT((fd >= 0) && (fd < WIN32_OPEN_MAX));
- /*
- * Confirm that this is an async fd
- */
- ASSERT(fdTable[fd].type != FD_UNUSED);
- ASSERT(fdTable[fd].type != FD_FILE_SYNC);
- ASSERT(fdTable[fd].type != FD_PIPE_SYNC);
- ASSERT(fdTable[fd].type != FD_SOCKET_SYNC);
-
- pOv = (POVERLAPPED_REQUEST)malloc(sizeof(struct OVERLAPPED_REQUEST));
- ASSERT(pOv);
- memset((void *)pOv, 0, sizeof(struct OVERLAPPED_REQUEST));
- /*
- * Only file offsets should be non-zero, but make sure.
- */
- if (fdTable[fd].type == FD_FILE_ASYNC)
- /*
- * Only file opened via OS_AsyncWrite with
- * O_APPEND will have an offset != -1.
- */
- if (fdTable[fd].offset >= 0)
- /*
- * If the descriptor has a memory mapped file
- * handle, take the offsets from there.
- */
- if (fdTable[fd].hMapMutex != NULL) {
- /*
- * Wait infinitely; this *should* not cause problems.
- */
- WaitForSingleObject(fdTable[fd].hMapMutex, INFINITE);
-
- /*
- * Retrieve the shared offset values.
- */
- pOv->overlapped.OffsetHigh = *(fdTable[fd].offsetHighPtr);
- pOv->overlapped.Offset = *(fdTable[fd].offsetLowPtr);
-
- /*
- * Update the shared offset values for the next write
- */
- *(fdTable[fd].offsetHighPtr) += 0; /* XXX How do I handle overflow */
- *(fdTable[fd].offsetLowPtr) += len;
-
- ReleaseMutex(fdTable[fd].hMapMutex);
- } else
- pOv->overlapped.Offset = fdTable[fd].offset;
- else
- pOv->overlapped.Offset = offset;
- pOv->instance = fdTable[fd].instance;
- pOv->procPtr = procPtr;
- pOv->clientData = clientData;
- bytesWritten = fd;
- /*
- * WriteFile returns: TRUE success, FALSE failure
- */
- if (!WriteFile(fdTable[fd].fid.fileHandle, buf, len, &bytesWritten,
- (LPOVERLAPPED)pOv)) {
- fdTable[fd].Errno = GetLastError();
- if(fdTable[fd].Errno != ERROR_IO_PENDING) {
- PostQueuedCompletionStatus(hIoCompPort, 0, fd, (LPOVERLAPPED)pOv);
- return -1;
- }
- fdTable[fd].Errno = 0;
- }
- if (fdTable[fd].offset >= 0)
- fdTable[fd].offset += len;
- return 0;
-}
-
-/*
- *--------------------------------------------------------------
- *
- * OS_Close --
- *
- * Closes the descriptor with routine appropriate for
- * descriptor's type.
- *
- * Results:
- * Socket or file is closed. Return values mimic Unix close:
- * 0 success, -1 failure
- *
- * Side effects:
- * Entry in fdTable is marked as free.
- *
- *--------------------------------------------------------------
- */
-int OS_Close(int fd)
-{
- int ret = 0;
-
- /*
- * Catch it if fd is a bogus value
- */
- ASSERT((fd >= 0) && (fd < WIN32_OPEN_MAX));
- ASSERT(fdTable[fd].type != FD_UNUSED);
-
- switch (fdTable[fd].type) {
- case FD_PIPE_SYNC:
- case FD_PIPE_ASYNC:
- case FD_FILE_SYNC:
- case FD_FILE_ASYNC:
- /*
- * CloseHandle returns: TRUE success, 0 failure
- */
- /*
- XXX don't close here, fcgi apps fail if we do so
- need to examine resource leaks if any might exist
- if (CloseHandle(fdTable[fd].fid.fileHandle) == FALSE)
- ret = -1;
- */
- break;
- case FD_SOCKET_SYNC:
- case FD_SOCKET_ASYNC:
- /*
- * Closing a socket that has an async read outstanding causes a
- * tcp reset and possible data loss. The shutdown call seems to
- * prevent this.
- */
-
- /* shutdown(fdTable[fd].fid.sock, SD_BOTH); */
-
- {
- char buf[16];
- int r;
-
- shutdown(fdTable[fd].fid.sock,SD_SEND);
-
- do
- {
- r = recv(fdTable[fd].fid.sock,buf,16,0);
- } while (r > 0);
- }
- /*
- * closesocket returns: 0 success, SOCKET_ERROR failure
- */
- if (closesocket(fdTable[fd].fid.sock) == SOCKET_ERROR)
- ret = -1;
- break;
- default:
- return -1; /* fake failure */
- }
-
- Win32FreeDescriptor(fd);
- return ret;
-}
-
-/*
- *--------------------------------------------------------------
- *
- * OS_CloseRead --
- *
- * Cancel outstanding asynchronous reads and prevent subsequent
- * reads from completing.
- *
- * Results:
- * Socket or file is shutdown. Return values mimic Unix shutdown:
- * 0 success, -1 failure
- *
- *--------------------------------------------------------------
- */
-int OS_CloseRead(int fd)
-{
- int ret = 0;
-
- /*
- * Catch it if fd is a bogus value
- */
- ASSERT((fd >= 0) && (fd < WIN32_OPEN_MAX));
- ASSERT(fdTable[fd].type == FD_SOCKET_ASYNC
- || fdTable[fd].type == FD_SOCKET_SYNC);
-
- if (shutdown(fdTable[fd].fid.sock,SD_RECEIVE) == SOCKET_ERROR)
- ret = -1;
- return ret;
-}
-
-/*
- *--------------------------------------------------------------
- *
- * OS_DoIo --
- *
- * This function was formerly OS_Select. It's purpose is
- * to pull I/O completion events off the queue and dispatch
- * them to the appropriate place.
- *
- * Results:
- * Returns 0.
- *
- * Side effects:
- * Handlers are called.
- *
- *--------------------------------------------------------------
- */
-int OS_DoIo(struct timeval *tmo)
-{
- unsigned long fd;
- unsigned long bytes;
- POVERLAPPED_REQUEST pOv;
- struct timeb tb;
- int ms;
- int ms_last;
- int err;
-
- /* XXX
- * We can loop in here, but not too long, as wait handlers
- * must run.
- * For cgi stdin, apparently select returns when io completion
- * ports don't, so don't wait the full timeout.
- */
- if(tmo)
- ms = (tmo->tv_sec*1000 + tmo->tv_usec/1000) / 2;
- else
- ms = 1000;
- ftime(&tb);
- ms_last = tb.time*1000 + tb.millitm;
- while (ms >= 0) {
- if(tmo && (ms = tmo->tv_sec*1000 + tmo->tv_usec/1000)> 100)
- ms = 100;
- if (!GetQueuedCompletionStatus(hIoCompPort, &bytes, &fd,
- (LPOVERLAPPED *)&pOv, ms) && !pOv) {
- err = WSAGetLastError();
- return 0; /* timeout */
- }
-
- ASSERT((fd >= 0) && (fd < WIN32_OPEN_MAX));
- /* call callback if descriptor still valid */
- ASSERT(pOv);
- if(pOv->instance == fdTable[fd].instance)
- (*pOv->procPtr)(pOv->clientData, bytes);
- free(pOv);
-
- ftime(&tb);
- ms -= (tb.time*1000 + tb.millitm - ms_last);
- ms_last = tb.time*1000 + tb.millitm;
- }
- return 0;
-}
-
-static int isAddrOK(struct sockaddr_in * inet_sockaddr, const char * okAddrs)
-{
- static const char *token = " ,;:\t";
- char *ipaddr;
- char *p;
-
- if (okAddrs == NULL) return TRUE;
-
- ipaddr = inet_ntoa(inet_sockaddr->sin_addr);
- p = strstr(okAddrs, ipaddr);
-
- if (p == NULL) return FALSE;
-
- if (p == okAddrs)
- {
- p += strlen(ipaddr);
- return (strchr(token, *p) != NULL);
- }
-
- if (strchr(token, *--p) != NULL)
- {
- p += strlen(ipaddr) + 1;
- return (strchr(token, *p) != NULL);
- }
-
- return FALSE;
-}
-
-#ifndef NO_WSAACEPT
-static int CALLBACK isAddrOKCallback(LPWSABUF lpCallerId,
- LPWSABUF dc0,
- LPQOS dc1,
- LPQOS dc2,
- LPWSABUF dc3,
- LPWSABUF dc4,
- GROUP *dc5,
- DWORD data)
-{
- struct sockaddr_in *sockaddr = (struct sockaddr_in *) lpCallerId->buf;
-
- // Touch the args to avoid warnings
- dc0 = NULL; dc1 = NULL; dc2 = NULL; dc3 = NULL; dc4 = NULL; dc5 = NULL;
-
- if ((void *) data == NULL) return CF_ACCEPT;
-
- if (sockaddr->sin_family != AF_INET) return CF_ACCEPT;
-
- return isAddrOK(sockaddr, (const char *) data) ? CF_ACCEPT : CF_REJECT;
-}
-#endif
-
-static printLastError(const char * text)
-{
- LPVOID buf;
-
- FormatMessage(
- FORMAT_MESSAGE_ALLOCATE_BUFFER |
- FORMAT_MESSAGE_FROM_SYSTEM |
- FORMAT_MESSAGE_IGNORE_INSERTS,
- NULL,
- GetLastError(),
- 0,
- (LPTSTR) &buf,
- 0,
- NULL
- );
-
- fprintf(stderr, "%s: %s\n", text, (LPCTSTR) buf);
- LocalFree(buf);
-}
-
-static int acceptNamedPipe()
-{
- int ipcFd = -1;
-
- if (! ConnectNamedPipe(hListen, &listenOverlapped))
- {
- switch (GetLastError())
- {
- case ERROR_PIPE_CONNECTED:
-
- // A client connected after CreateNamedPipe but
- // before ConnectNamedPipe. Its a good connection.
-
- break;
-
- case ERROR_IO_PENDING:
-
- // Wait for a connection to complete.
-
- while (WaitForSingleObject(listenOverlapped.hEvent,
- ACCEPT_TIMEOUT) == WAIT_TIMEOUT)
- {
- if (shutdownPending)
- {
- OS_LibShutdown();
- return -1;
- }
- }
-
- break;
-
- case ERROR_PIPE_LISTENING:
-
- // The pipe handle is in nonblocking mode.
-
- case ERROR_NO_DATA:
-
- // The previous client closed its handle (and we failed
- // to call DisconnectNamedPipe)
-
- default:
-
- printLastError("unexpected ConnectNamedPipe() error");
- }
- }
-
- //
- // impersonate the client
- //
- if(bImpersonate && !ImpersonateNamedPipeClient(hListen)) {
- DisconnectNamedPipe(hListen);
- } else {
- ipcFd = Win32NewDescriptor(FD_PIPE_SYNC, (int) hListen, -1);
- if (ipcFd == -1)
- {
- DisconnectNamedPipe(hListen);
- if (bImpersonate) RevertToSelf();
- }
- }
-
- return ipcFd;
-}
-
-static int acceptSocket(const char *webServerAddrs)
-{
- SOCKET hSock;
- int ipcFd = -1;
-
- for (;;)
- {
- struct sockaddr sockaddr;
- int sockaddrLen = sizeof(sockaddr);
-
- for (;;)
- {
- const struct timeval timeout = {1, 0};
- fd_set readfds;
-
- FD_ZERO(&readfds);
- FD_SET((unsigned int) hListen, &readfds);
-
- if (select(0, &readfds, NULL, NULL, &timeout) == 0)
- {
- if (shutdownPending)
- {
- OS_LibShutdown();
- return -1;
- }
- }
- else
- {
- break;
- }
- }
-
-#if NO_WSAACEPT
- hSock = accept((SOCKET) hListen, &sockaddr, &sockaddrLen);
-
- if (hSock == INVALID_SOCKET)
- {
- break;
- }
-
- if (isAddrOK((struct sockaddr_in *) &sockaddr, webServerAddrs))
- {
- break;
- }
-
- closesocket(hSock);
-#else
- hSock = WSAAccept((unsigned int) hListen,
- &sockaddr,
- &sockaddrLen,
- isAddrOKCallback,
- (DWORD) webServerAddrs);
-
- if (hSock != INVALID_SOCKET)
- {
- break;
- }
-
- if (WSAGetLastError() != WSAECONNREFUSED)
- {
- break;
- }
-#endif
- }
-
- if (hSock == INVALID_SOCKET)
- {
- /* Use FormatMessage() */
- fprintf(stderr, "accept()/WSAAccept() failed: %d", WSAGetLastError());
- return -1;
- }
-
- ipcFd = Win32NewDescriptor(FD_SOCKET_SYNC, hSock, -1);
- if (ipcFd == -1)
- {
- closesocket(hSock);
- }
-
- return ipcFd;
-}
-
-/*
- *----------------------------------------------------------------------
- *
- * OS_Accept --
- *
- * Accepts a new FastCGI connection. This routine knows whether
- * we're dealing with TCP based sockets or NT Named Pipes for IPC.
- *
- * fail_on_intr is ignored in the Win lib.
- *
- * Results:
- * -1 if the operation fails, otherwise this is a valid IPC fd.
- *
- *----------------------------------------------------------------------
- */
-int OS_Accept(int listen_sock, int fail_on_intr, const char *webServerAddrs)
-{
- int ipcFd = -1;
-
- // Touch args to prevent warnings
- listen_sock = 0; fail_on_intr = 0;
-
- // @todo Muliple listen sockets and sockets other than 0 are not
- // supported due to the use of globals.
-
- if (shutdownPending)
- {
- OS_LibShutdown();
- return -1;
- }
-
- // The mutex is to keep other processes (and threads, when supported)
- // from going into the accept cycle. The accept cycle needs to
- // periodically break out to check the state of the shutdown flag
- // and there's no point to having more than one thread do that.
-
- if (acceptMutex != INVALID_HANDLE_VALUE)
- {
- DWORD ret;
- while ((ret = WaitForSingleObject(acceptMutex, ACCEPT_TIMEOUT)) == WAIT_TIMEOUT)
- {
- if (shutdownPending) break;
- }
- if (ret == WAIT_FAILED) {
- printLastError("WaitForSingleObject() failed");
- return -1;
- }
- }
-
- if (shutdownPending)
- {
- OS_LibShutdown();
- }
- else if (listenType == FD_PIPE_SYNC)
- {
- ipcFd = acceptNamedPipe();
- }
- else if (listenType == FD_SOCKET_SYNC)
- {
- ipcFd = acceptSocket(webServerAddrs);
- }
- else
- {
- fprintf(stderr, "unknown listenType (%d)\n", listenType);
- }
-
- if (acceptMutex != INVALID_HANDLE_VALUE)
- {
- ReleaseMutex(acceptMutex);
- }
-
- return ipcFd;
-}
-
-/*
- *----------------------------------------------------------------------
- *
- * OS_IpcClose
- *
- * OS IPC routine to close an IPC connection.
- *
- * Results:
- *
- *
- * Side effects:
- * IPC connection is closed.
- *
- *----------------------------------------------------------------------
- */
-int OS_IpcClose(int ipcFd)
-{
- if (ipcFd == -1)
- return 0;
-
- /*
- * Catch it if fd is a bogus value
- */
- ASSERT((ipcFd >= 0) && (ipcFd < WIN32_OPEN_MAX));
- ASSERT(fdTable[ipcFd].type != FD_UNUSED);
-
- switch(listenType) {
-
- case FD_PIPE_SYNC:
- /*
- * Make sure that the client (ie. a Web Server in this case) has
- * read all data from the pipe before we disconnect.
- */
- if(!FlushFileBuffers(fdTable[ipcFd].fid.fileHandle))
- return -1;
- if(DisconnectNamedPipe(fdTable[ipcFd].fid.fileHandle)) {
- OS_Close(ipcFd);
- if (bImpersonate) RevertToSelf();
- return 0;
- } else {
- return -1;
- }
- break;
-
- case FD_SOCKET_SYNC:
- OS_Close(ipcFd);
- return 0;
- break;
-
- case FD_UNUSED:
- default:
- //exit(106);
- return -1;
- break;
- }
- return -1;
-}
-
-/*
- *----------------------------------------------------------------------
- *
- * OS_IsFcgi --
- *
- * Determines whether this process is a FastCGI process or not.
- *
- * Results:
- * Returns 1 if FastCGI, 0 if not.
- *
- * Side effects:
- * None.
- *
- *----------------------------------------------------------------------
- */
-int OS_IsFcgi(int sock)
-{
- // Touch args to prevent warnings
- sock = 0;
-
- /* XXX This is broken for sock */
-
- return (listenType != FD_UNUSED);
-}
-
-/*
- *----------------------------------------------------------------------
- *
- * OS_SetFlags --
- *
- * Sets selected flag bits in an open file descriptor. Currently
- * this is only to put a SOCKET into non-blocking mode.
- *
- *----------------------------------------------------------------------
- */
-void OS_SetFlags(int fd, int flags)
-{
- unsigned long pLong = 1L;
-
- if (fdTable[fd].type == FD_SOCKET_SYNC && flags == O_NONBLOCK) {
- if (ioctlsocket(fdTable[fd].fid.sock, FIONBIO, &pLong) ==
- SOCKET_ERROR) {
- //exit(WSAGetLastError());
- SetLastError(WSAGetLastError());
- return;
- }
- if (!CreateIoCompletionPort((HANDLE)fdTable[fd].fid.sock,
- hIoCompPort, fd, 1)) {
- //err = GetLastError();
- //exit(err);
- return;
- }
-
- fdTable[fd].type = FD_SOCKET_ASYNC;
- }
- return;
-}
-
diff --git a/sapi/cgi/libfcgi/strerror.c b/sapi/cgi/libfcgi/strerror.c
deleted file mode 100644
index fac7c8eda2..0000000000
--- a/sapi/cgi/libfcgi/strerror.c
+++ /dev/null
@@ -1,91 +0,0 @@
-/*
- * The terms in the file "LICENSE.TERMS" do not apply to this file.
- * See terms below.
- *
- * Copyright (c) 1988 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. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement:
- * This product includes software developed by the University of
- * California, Berkeley and its contributors.
- * 4. 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.
- */
-
-#if defined(LIBC_SCCS) && !defined(lint)
-/*static char *sccsid = "from: @(#)strerror.c 5.6 (Berkeley) 5/4/91";*/
-static char *rcsid = "$Id$";
-#endif /* LIBC_SCCS and not lint */
-
-#include "fcgi_config.h"
-
-#if ! defined (HAVE_STRERROR)
-#include <string.h>
-
-/*
- * Since perror() is not allowed to change the contents of strerror()'s
- * static buffer, both functions supply their own buffers to the
- * internal function __strerror().
- */
-
-char *
-__strerror(int num, char *buf)
-{
-#define UPREFIX "Unknown error: "
- extern char *sys_errlist[];
- extern int sys_nerr;
- register unsigned int errnum;
- register char *p, *t;
- char tmp[40];
-
- errnum = num; /* convert to unsigned */
- if (errnum < sys_nerr)
- return(sys_errlist[errnum]);
-
- /* Do this by hand, so we don't include stdio(3). */
- t = tmp;
- do {
- *t++ = "0123456789"[errnum % 10];
- } while (errnum /= 10);
-
- strcpy (buf, UPREFIX);
- for (p = buf + sizeof(UPREFIX) -1;;) {
- *p++ = *--t;
- if (t <= tmp)
- break;
- }
-
- return buf;
-}
-
-
-char *
-strerror(int num)
-{
- static char buf[40]; /* 64-bit number + slop */
- return __strerror(num, buf);
-}
-
-#endif
diff --git a/sapi/cgi/php.sym b/sapi/cgi/php.sym
deleted file mode 100644
index e69de29bb2..0000000000
--- a/sapi/cgi/php.sym
+++ /dev/null
diff --git a/sapi/cgi/php_getopt.h b/sapi/cgi/php_getopt.h
deleted file mode 100644
index 042fb014e5..0000000000
--- a/sapi/cgi/php_getopt.h
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Marcus Boerger <helly@php.net> |
- +----------------------------------------------------------------------+
-*/
-
-#include "php.h"
-
-/* Define structure for one recognized option (both single char and long name).
- * If short_open is '-' this is the last option.
- */
-typedef struct _opt_struct {
- const char opt_char;
- const int need_param;
- const char * opt_name;
-} opt_struct;
-
-int php_getopt(int argc, char* const *argv, const opt_struct opts[], char **optarg, int *optind, int show_err);
diff --git a/sapi/cli/CREDITS b/sapi/cli/CREDITS
deleted file mode 100644
index fac101d747..0000000000
--- a/sapi/cli/CREDITS
+++ /dev/null
@@ -1,2 +0,0 @@
-CLI
-Edin Kadribasic, Marcus Boerger
diff --git a/sapi/cli/Makefile.frag b/sapi/cli/Makefile.frag
deleted file mode 100644
index 5db4c68baf..0000000000
--- a/sapi/cli/Makefile.frag
+++ /dev/null
@@ -1,11 +0,0 @@
-cli: $(SAPI_CLI_PATH)
-
-$(SAPI_CLI_PATH): $(PHP_GLOBAL_OBJS) $(PHP_CLI_OBJS)
- $(BUILD_CLI)
-
-install-cli: $(SAPI_CLI_PATH)
- @echo "Installing PHP CLI binary: $(INSTALL_ROOT)$(bindir)/"
- @$(INSTALL_CLI)
- @echo "Installing PHP CLI man page: $(INSTALL_ROOT)$(mandir)/man1/"
- @$(mkinstalldirs) $(INSTALL_ROOT)$(mandir)/man1
- @$(INSTALL_DATA) $(builddir)/php.1 $(INSTALL_ROOT)$(mandir)/man1/php.1
diff --git a/sapi/cli/README b/sapi/cli/README
deleted file mode 100644
index 9e519e9bd0..0000000000
--- a/sapi/cli/README
+++ /dev/null
@@ -1,20 +0,0 @@
-The CLI (command line interface) SAPI has been introduced
-with a goal of making PHP better at supporting the creation of
-stand alone applications.
-
-It is based on CGI SAPI with all CGI specific things removed.
-
-The main differences between the two:
-
-* CLI is started up in quiet mode by default.
- (-q switch kept for compatibility)
-* It does not change the working directory to that of the script.
- (-C switch kept for compatibility)
-* Plain text error message
-* $argc and $argv registered irrespective of register_globals
- and register_argc_argv php.ini settings.
-* implicit_flush always on
-* -r option which allows execution of PHP code directly from
- the command line (e.g. php -r 'echo md5("test");' )
-* Other more sophisticated command line switches (see: man php)
-* max_execution_time is set to unlimited, overriding php.ini setting.
diff --git a/sapi/cli/TODO b/sapi/cli/TODO
deleted file mode 100644
index 22e6689001..0000000000
--- a/sapi/cli/TODO
+++ /dev/null
@@ -1,2 +0,0 @@
-TODO:
-
diff --git a/sapi/cli/cli_win32.c b/sapi/cli/cli_win32.c
deleted file mode 100644
index 4407fd088f..0000000000
--- a/sapi/cli/cli_win32.c
+++ /dev/null
@@ -1,2 +0,0 @@
-#define PHP_CLI_WIN32_NO_CONSOLE 1
-#include "php_cli.c"
diff --git a/sapi/cli/config.m4 b/sapi/cli/config.m4
deleted file mode 100644
index ffc3222515..0000000000
--- a/sapi/cli/config.m4
+++ /dev/null
@@ -1,40 +0,0 @@
-dnl
-dnl $Id$
-dnl
-
-AC_MSG_CHECKING(for CLI build)
-
-AC_ARG_ENABLE(cli,
-[ --disable-cli Disable building CLI version of PHP
- (this forces --without-pear).],
-[
- PHP_SAPI_CLI=$enableval
-],[
- PHP_SAPI_CLI=yes
-])
-
-if test "$PHP_SAPI_CLI" != "no"; then
- PHP_ADD_MAKEFILE_FRAGMENT($abs_srcdir/sapi/cli/Makefile.frag,$abs_srcdir/sapi/cli,sapi/cli)
- SAPI_CLI_PATH=sapi/cli/php
- PHP_SUBST(SAPI_CLI_PATH)
-
- case $host_alias in
- *darwin*)
- BUILD_CLI="\$(CC) \$(CFLAGS_CLEAN) \$(EXTRA_CFLAGS) \$(EXTRA_LDFLAGS_PROGRAM) \$(LDFLAGS) \$(NATIVE_RPATHS) \$(PHP_GLOBAL_OBJS:.lo=.o) \$(PHP_CLI_OBJS:.lo=.o) \$(PHP_FRAMEWORKS) \$(EXTRA_LIBS) \$(ZEND_EXTRA_LIBS) -o \$(SAPI_CLI_PATH)"
- ;;
- *cygwin*)
- SAPI_CLI_PATH=sapi/cli/php.exe
- BUILD_CLI="\$(LIBTOOL) --mode=link \$(CC) -export-dynamic \$(CFLAGS_CLEAN) \$(EXTRA_CFLAGS) \$(EXTRA_LDFLAGS_PROGRAM) \$(LDFLAGS) \$(PHP_RPATHS) \$(PHP_GLOBAL_OBJS) \$(PHP_CLI_OBJS) \$(EXTRA_LIBS) \$(ZEND_EXTRA_LIBS) -o \$(SAPI_CLI_PATH)"
- ;;
- *)
- BUILD_CLI="\$(LIBTOOL) --mode=link \$(CC) -export-dynamic \$(CFLAGS_CLEAN) \$(EXTRA_CFLAGS) \$(EXTRA_LDFLAGS_PROGRAM) \$(LDFLAGS) \$(PHP_RPATHS) \$(PHP_GLOBAL_OBJS) \$(PHP_CLI_OBJS) \$(EXTRA_LIBS) \$(ZEND_EXTRA_LIBS) -o \$(SAPI_CLI_PATH)"
- ;;
- esac
- INSTALL_CLI="\$(mkinstalldirs) \$(INSTALL_ROOT)\$(bindir); \$(INSTALL) -m 0755 \$(SAPI_CLI_PATH) \$(INSTALL_ROOT)\$(bindir)/\$(program_prefix)php\$(program_suffix)"
-
- PHP_SUBST(BUILD_CLI)
- PHP_SUBST(INSTALL_CLI)
- PHP_OUTPUT(sapi/cli/php.1)
-fi
-
-AC_MSG_RESULT($PHP_SAPI_CLI)
diff --git a/sapi/cli/config.w32 b/sapi/cli/config.w32
deleted file mode 100644
index 4f6ac8cc02..0000000000
--- a/sapi/cli/config.w32
+++ /dev/null
@@ -1,18 +0,0 @@
-// vim:ft=javascript
-// $Id$
-
-ARG_ENABLE('cli', 'Build CLI version of PHP', 'yes');
-ARG_ENABLE('crt-debug', 'Extra CRT debugging', 'no');
-ARG_ENABLE('cli-win32', 'Build console-less CLI version of PHP', 'no');
-
-if (PHP_CLI == "yes") {
- SAPI('cli', 'getopt.c php_cli.c', 'php.exe');
- if (PHP_CRT_DEBUG == "yes") {
- ADD_FLAG("CFLAGS_CLI", "/D PHP_WIN32_DEBUG_HEAP");
- }
-}
-
-if (PHP_CLI_WIN32 == "yes") {
- SAPI('cli_win32', 'getopt.c cli_win32.c', 'php-win.exe');
-}
-
diff --git a/sapi/cli/getopt.c b/sapi/cli/getopt.c
deleted file mode 100644
index 3f201b567d..0000000000
--- a/sapi/cli/getopt.c
+++ /dev/null
@@ -1,156 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Marcus Boerger <helly@php.net> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#include <stdio.h>
-#include <string.h>
-#include <assert.h>
-#include <stdlib.h>
-#include "php_getopt.h"
-#define OPTERRCOLON (1)
-#define OPTERRNF (2)
-#define OPTERRARG (3)
-
-
-static int php_opt_error(int argc, char * const *argv, int oint, int optchr, int err, int show_err)
-{
- if (show_err)
- {
- fprintf(stderr, "Error in argument %d, char %d: ", oint, optchr+1);
- switch(err)
- {
- case OPTERRCOLON:
- fprintf(stderr, ": in flags\n");
- break;
- case OPTERRNF:
- fprintf(stderr, "option not found %c\n", argv[oint][optchr]);
- break;
- case OPTERRARG:
- fprintf(stderr, "no argument for option %c\n", argv[oint][optchr]);
- break;
- default:
- fprintf(stderr, "unknown\n");
- break;
- }
- }
- return('?');
-}
-
-int php_getopt(int argc, char* const *argv, const opt_struct opts[], char **optarg, int *optind, int show_err)
-{
- static int optchr = 0;
- static int dash = 0; /* have already seen the - */
- int arg_start = 2;
-
- int opts_idx = -1;
-
- if (*optind >= argc) {
- return(EOF);
- }
- if (!dash) {
- if ((argv[*optind][0] != '-')) {
- return(EOF);
- } else {
- if (!argv[*optind][1])
- {
- /*
- * use to specify stdin. Need to let pgm process this and
- * the following args
- */
- return(EOF);
- }
- }
- }
- if ((argv[*optind][0] == '-') && (argv[*optind][1] == '-')) {
- /* '--' indicates end of args if not followed by a known long option name */
- while (1) {
- opts_idx++;
- if (opts[opts_idx].opt_char == '-') {
- (*optind)++;
- return(EOF);
- } else if (opts[opts_idx].opt_name && !strcmp(&argv[*optind][2], opts[opts_idx].opt_name)) {
- break;
- }
- }
- optchr = 0;
- dash = 1;
- arg_start = 2 + strlen(opts[opts_idx].opt_name);
- }
- if (!dash) {
- dash = 1;
- optchr = 1;
- }
-
- /* Check if the guy tries to do a -: kind of flag */
- if (argv[*optind][optchr] == ':') {
- dash = 0;
- (*optind)++;
- return (php_opt_error(argc, argv, *optind-1, optchr, OPTERRCOLON, show_err));
- }
- if (opts_idx < 0) {
- while (1) {
- opts_idx++;
- if (opts[opts_idx].opt_char == '-') {
- int errind = *optind;
- int errchr = optchr;
-
- if (!argv[*optind][optchr+1]) {
- dash = 0;
- (*optind)++;
- } else {
- optchr++;
- }
- return(php_opt_error(argc, argv, errind, errchr, OPTERRNF, show_err));
- } else if (argv[*optind][optchr] == opts[opts_idx].opt_char) {
- break;
- }
- }
- }
- if (opts[opts_idx].need_param) {
- /* Check for cases where the value of the argument
- is in the form -<arg> <val> or in the form -<arg><val> */
- dash = 0;
- if(!argv[*optind][arg_start]) {
- (*optind)++;
- if (*optind == argc) {
- return(php_opt_error(argc, argv, *optind-1, optchr, OPTERRARG, show_err));
- }
- *optarg = argv[(*optind)++];
- } else {
- *optarg = &argv[*optind][arg_start];
- (*optind)++;
- }
- return opts[opts_idx].opt_char;
- } else {
- if (arg_start == 2) {
- if (!argv[*optind][optchr+1])
- {
- dash = 0;
- (*optind)++;
- } else {
- optchr++;
- }
- } else {
- (*optind)++;
- }
- return opts[opts_idx].opt_char;
- }
- assert(0);
- return(0); /* never reached */
-}
diff --git a/sapi/cli/php.1.in b/sapi/cli/php.1.in
deleted file mode 100644
index 6e0bfdfe8f..0000000000
--- a/sapi/cli/php.1.in
+++ /dev/null
@@ -1,392 +0,0 @@
-./" +----------------------------------------------------------------------+
-./" | PHP Version 5 |
-./" +----------------------------------------------------------------------+
-./" | Copyright (c) 1997-2004 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: Marcus Boerger <helly@php.net> |
-./" +----------------------------------------------------------------------+
-./"
-./" $Id$
-./"
-.TH PHP 1 "Feb 2003" "The PHP Group" "Scripting Language"
-.SH NAME
-.TP 15
-.B php
-PHP Command Line Interface 'CLI'
-.SH SYNOPSIS
-.B php
-[options] [
-.B \-f ]
-.IR file
-[[\-\-]
-.IR args.\|.\|. ]
-.LP
-.B php
-[options]
-.B \-r
-.IR code
-[[\-\-]
-.IR args.\|.\|. ]
-.LP
-.B php
-[options] [\-B
-.IR code ]
-.B \-R
-.IR code
-[\-E
-.IR code ]
-[[\-\-]
-.IR args.\|.\|. ]
-.LP
-.B php
-[options] [\-B
-.IR code ]
-.B \-F
-.IR file
-[\-E
-.IR code ]
-[[\-\-]
-.IR args.\|.\|. ]
-.LP
-.B php
-[options] \-\- [
-.IR args.\|.\|. ]
-.LP
-.SH DESCRIPTION
-.B PHP
-is a widely\-used general\-purpose scripting language that is especially suited for
-Web development and can be embedded into HTML. This is the command line interface
-that enables you to the following:
-.P
-You can parse and execute files by using parameter \-f followed by the name of the
-.IR file
-to be executed.
-.LP
-Using parameter \-r you can directly execute PHP
-.IR code
-simply as you would do inside a
-.B \.php
-file when using the
-.B eval()
-function.
-.LP
-It is also possible to process the standard input line by line using either
-the parameter \-R or \-F. In this mode each separate input line causes the
-.IR code
-specified by \-R or the
-.IR file
-specified by \-F to be executed.
-You can access the input line by \fB$argn\fP. While processing the input lines
-.B $argi
-contains the number of the actual line being processed. Further more
-the paramters \-B and \-E can be used to execute
-.IR code
-(see \-r) before and
-after all input lines have been processed respectively. Notice that the
-input is read from
-.B STDIN
-and therefore reading from
-.B STDIN
-explicitly changes the next input line or skips input lines.
-.LP
-If none of \-r \-f \-B \-R \-F or \-E is present but a single parameter is given
-then this parameter is taken as the filename to parse and execute (same as
-with \-f). If no parameter is present then the standard input is read and
-executed.
-.SH OPTIONS
-.TP 15
-.PD 0
-.B \-\-interactive
-.TP
-.PD 1
-.B \-a
-Run interactively
-.TP
-.PD 0
-.B \-\-php\-ini \fIpath\fP|\fIfile\fP
-.TP
-.PD 1
-.B \-c \fIpath\fP|\fIfile\fP
-Look for
-.B php.ini
-file in the directory
-.IR path
-or use the specified
-.IR file
-.TP
-.PD 0
-.B \-\-no\-php\-ini
-.TP
-.PD 1
-.B \-n
-No
-.B php.ini
-file will be used
-.TP
-.PD 0
-.B \-\-define \fIfoo\fP[=\fIbar\fP]
-.TP
-.PD 1
-.B \-d \fIfoo\fP[=\fIbar\fP]
-Define INI entry
-.IR foo
-with value
-.IR bar
-.TP
-.B \-e
-Generate extended information for debugger/profiler
-.TP
-.PD 0
-.B \-\-file \fIfile\fP
-.TP
-.PD 1
-.B \-f \fIfile\fP
-Parse and execute
-.IR file
-.TP
-.PD 0
-.B \-\-global \fIname\fP
-.TP
-.PD 1
-.B \-g \fIname\fP
-Make variable
-.IR name
-global in script.
-.TP
-.PD 0
-.B \-\-help
-.TP
-.PD 1
-.B \-h
-This help
-.TP
-.PD 0
-.B \-\-hide\-args
-.TP
-.PD 1
-.B \-H
-Hide script name (\fIfile\fP) and parameters (\fIargs\.\.\.\fP) from external
-tools. For example you may want to use this when a php script is started as
-a daemon and the command line contains sensitive data such as passwords.
-.TP
-.PD 0
-.B \-\-info
-.TP
-.PD 1
-.B \-i
-PHP information and configuration
-.TP
-.PD 0
-.B \-\-syntax\-check
-.TP
-.PD 1
-.B \-l
-Syntax check only (lint)
-.TP
-.PD 0
-.B \-\-modules
-.TP
-.PD 1
-.B \-m
-Show compiled in modules
-.TP
-.PD 0
-.B \-\-run \fIcode\fP
-.TP
-.PD 1
-.B \-r \fIcode\fP
-Run PHP
-.IR code
-without using script tags
-.B '<?..?>'
-.TP
-.PD 0
-.B \-\-process\-begin \fIcode\fP
-.TP
-.PD 1
-.B \-B \fIcode\fP
-Run PHP
-.IR code
-before processing input lines
-.TP
-.PD 0
-.B \-\-process\-code \fIcode\fP
-.TP
-.PD 1
-.B \-R \fIcode\fP
-Run PHP
-.IR code
-for every input line
-.TP
-.PD 0
-.B \-\-process\-file \fIfile\fP
-.TP
-.PD 1
-.B \-F \fIfile\fP
-Parse and execute
-.IR file
-for every input line
-.TP
-.PD 0
-.B \-\-process\-end \fIcode\fP
-.TP
-.PD 1
-.B \-E \fIcode\fP
-Run PHP
-.IR code
-after processing all input lines
-.TP
-.PD 0
-.B \-\-syntax\-highlight
-.TP
-.PD 1
-.B \-s
-Display colour syntax highlighted source
-.TP
-.PD 0
-.B \-\-version
-.TP
-.PD 1
-.B \-v
-Version number
-.TP
-.PD 0
-.B \-\-stripped
-.TP
-.PD 1
-.B \-w
-Display source with stripped comments and whitespace
-.TP
-.PD 0
-.B \-\-zend\-extension \fIfile\fP
-.TP
-.PD 1
-.B \-z \fIfile\fP
-Load Zend extension
-.IR file
-.TP
-.IR args.\|.\|.
-Arguments passed to script. Use
-.B '\-\-'
-.IR args
-when first argument starts with
-.B '\-'
-or script is read from stdin
-.SH FILES
-.TP 15
-.B php\-cli.ini
-The configuration file for the CLI version of PHP.
-.TP
-.B php.ini
-The standard configuration file will only be used when
-.B php\-cli.ini
-cannot be found.
-.SH EXAMPLES
-.TP 5
-\fIphp -r 'echo "Hello World\\n";'\fP
-This command simply writes the text "Hello World" to standard out.
-.TP
-\fIphp \-r 'print_r(gd_info());'\fP
-This shows the configuration of your gd extension. You can use this
-to easily check which image formats you can use. If you have any
-dynamic modules you may want to use the same ini file that php uses
-when executed from your webserver. There are more extensions which
-have such a function. For dba use:
-.RS
-\fIphp \-r 'print_r(dba_handlers(1));'\fP
-.RE
-.TP
-\fIphp \-R 'echo strip_tags($argn)."\\n";'\fP
-This PHP command strips off the HTML tags line by line and outputs the
-result. To see how it works you can first look at the following PHP command
-\'\fIphp \-d html_errors=1 \-i\fP\' which uses PHP to output HTML formatted
-configuration information. If you then combine those two
-\'\fIphp \.\.\.|php \.\.\.\fP\' you'll see what happens.
-.TP
-\fIphp \-E 'echo "Lines: $argi\\n";'\fP
-Using this PHP command you can count the lines being input.
-.TP
-\fIphp \-R '@$l+=count(file($argn));' \-E 'echo "Lines:$l\\n";'\fP
-In this example PHP expects each input line beeing a file. It counts all lines
-of the files specified by each input line and shows the summarized result.
-You may combine this with tools like find and change the php scriptlet.
-.TP
-\fIphp \-R 'echo "$argn\\n"; fgets(STDIN);'\fP
-Since you have access to STDIN from within \-B \-R \-F and \-E you can skip
-certain input lines with your code. But note that in such cases $argi only
-counts the lines being processed by php itself. Having read this you will
-guess what the above program does: skipping every second input line.
-.SH TIPS
-You can use a shebang line to automatically invoke php
-from scripts. Only the CLI version of PHP will ignore
-such a first line as shown below:
-.P
-.PD 0
-.RS
-#!/bin/php
-.P
-<?php
-.P
- // your script
-.P
-?>
-.RE
-.PD 1
-.P
-.SH SEE ALSO
-For a more or less complete description of PHP look here:
-.PD 0
-.P
-.B http://www.php.net/manual/
-.PD 1
-.P
-A nice introduction to PHP by Stig Sæther Bakken can be found here:
-.PD 0
-.P
-.B http://www.zend.com/zend/art/intro.php
-.PD 1
-.SH BUGS
-You can view the list of known bugs or add any new bug you
-found here:
-.PD 0
-.P
-.B http://bugs.php.net
-.PD 1
-.SH AUTHORS
-The PHP Group: Thies C. Arntzen, Stig Bakken, Andi Gutmans, Rasmus Lerdorf, Sam Ruby, Sascha Schumann, Zeev Suraski, Jim Winstead, Andrei Zmievski.
-.P
-Additional work for the CLI sapi was done by Edin Kadribasic and Marcus Boerger.
-.P
-A List of active developers can be found here:
-.PD 0
-.P
-.B http://www.php.net/credits.php
-.PD 1
-.P
-And last but not least PHP was developed with the help of a huge amount of
-contributors all around the world.
-.SH VERSION INFORMATION
-This manpage describes \fBphp\fP, version @PHP_VERSION@.
-.SH COPYRIGHT
-Copyright \(co 1997\-2004 The PHP Group
-.LP
-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 at through the world-wide-web at
-.PD 0
-.P
-.B http://www.php.net/license/3_0.txt
-.PD 1
-.P
-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
-.B license@php.net
-so we can mail you a copy immediately.
diff --git a/sapi/cli/php_cli.c b/sapi/cli/php_cli.c
deleted file mode 100644
index 2af1cb7ce3..0000000000
--- a/sapi/cli/php_cli.c
+++ /dev/null
@@ -1,1075 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Edin Kadribasic <edink@php.net> |
- | Marcus Boerger <helly@php.net> |
- | Parts based on CGI SAPI Module by |
- | Rasmus Lerdorf, Stig Bakken and Zeev Suraski |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#include "php.h"
-#include "php_globals.h"
-#include "php_variables.h"
-#include "zend_hash.h"
-#include "zend_modules.h"
-
-#include "SAPI.h"
-
-#include <stdio.h>
-#include "php.h"
-#ifdef PHP_WIN32
-#include "win32/time.h"
-#include "win32/signal.h"
-#include <process.h>
-#endif
-#if HAVE_SYS_TIME_H
-#include <sys/time.h>
-#endif
-#if HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-#if HAVE_SIGNAL_H
-#include <signal.h>
-#endif
-#if HAVE_SETLOCALE
-#include <locale.h>
-#endif
-#include "zend.h"
-#include "zend_extensions.h"
-#include "php_ini.h"
-#include "php_globals.h"
-#include "php_main.h"
-#include "fopen_wrappers.h"
-#include "ext/standard/php_standard.h"
-#ifdef PHP_WIN32
-#include <io.h>
-#include <fcntl.h>
-#include "win32/php_registry.h"
-#endif
-
-#if HAVE_SIGNAL_H
-#include <signal.h>
-#endif
-
-#ifdef __riscos__
-#include <unixlib/local.h>
-#endif
-
-#include "zend_compile.h"
-#include "zend_execute.h"
-#include "zend_highlight.h"
-#include "zend_indent.h"
-
-
-#include "php_getopt.h"
-
-#ifndef O_BINARY
-#define O_BINARY 0
-#endif
-
-#define PHP_MODE_STANDARD 1
-#define PHP_MODE_HIGHLIGHT 2
-#define PHP_MODE_INDENT 3
-#define PHP_MODE_LINT 4
-#define PHP_MODE_STRIP 5
-#define PHP_MODE_CLI_DIRECT 6
-#define PHP_MODE_PROCESS_STDIN 7
-
-static char *php_optarg = NULL;
-static int php_optind = 1;
-
-static const opt_struct OPTIONS[] = {
- {'a', 0, "interactive"},
- {'B', 1, "process-begin"},
- {'C', 0, "no-chdir"}, /* for compatibility with CGI (do not chdir to script directory) */
- {'c', 1, "php-ini"},
- {'d', 1, "define"},
- {'E', 1, "process-end"},
- {'e', 0, "profile-info"},
- {'F', 1, "process-file"},
- {'f', 1, "file"},
- {'g', 1, "global"},
- {'h', 0, "help"},
- {'i', 0, "info"},
- {'l', 0, "syntax-check"},
- {'m', 0, "modules"},
- {'n', 0, "no-php-ini"},
- {'q', 0, "no-header"}, /* for compatibility with CGI (do not generate HTTP headers) */
- {'R', 1, "process-code"},
- {'H', 0, "hide-args"},
- {'r', 1, "run"},
- {'s', 0, "syntax-highlight"},
- {'s', 0, "syntax-highlighting"},
- {'w', 0, "strip"},
- {'?', 0, "usage"},/* help alias (both '?' and 'usage') */
- {'v', 0, "version"},
- {'z', 1, "zend-extension"},
- {'-', 0, NULL} /* end of args */
-};
-
-static int print_module_info(zend_module_entry *module, void *arg TSRMLS_DC)
-{
- php_printf("%s\n", module->name);
- return 0;
-}
-
-static int module_name_cmp(const void *a, const void *b TSRMLS_DC)
-{
- Bucket *f = *((Bucket **) a);
- Bucket *s = *((Bucket **) b);
-
- return strcasecmp(((zend_module_entry *)f->pData)->name,
- ((zend_module_entry *)s->pData)->name);
-}
-
-static void print_modules(TSRMLS_D)
-{
- HashTable sorted_registry;
- zend_module_entry tmp;
-
- zend_hash_init(&sorted_registry, 50, NULL, NULL, 1);
- zend_hash_copy(&sorted_registry, &module_registry, NULL, &tmp, sizeof(zend_module_entry));
- zend_hash_sort(&sorted_registry, zend_qsort, module_name_cmp, 0 TSRMLS_CC);
- zend_hash_apply_with_argument(&sorted_registry, (apply_func_arg_t) print_module_info, NULL TSRMLS_CC);
- zend_hash_destroy(&sorted_registry);
-}
-
-static int print_extension_info(zend_extension *ext, void *arg TSRMLS_DC)
-{
- php_printf("%s\n", ext->name);
- return 0;
-}
-
-static int extension_name_cmp(const zend_llist_element **f,
- const zend_llist_element **s TSRMLS_DC)
-{
- return strcmp(((zend_extension *)(*f)->data)->name,
- ((zend_extension *)(*s)->data)->name);
-}
-
-static void print_extensions(TSRMLS_D)
-{
- zend_llist sorted_exts;
-
- zend_llist_copy(&sorted_exts, &zend_extensions);
- sorted_exts.dtor = NULL;
- zend_llist_sort(&sorted_exts, extension_name_cmp TSRMLS_CC);
- zend_llist_apply_with_argument(&sorted_exts, (llist_apply_with_arg_func_t) print_extension_info, NULL TSRMLS_CC);
- zend_llist_destroy(&sorted_exts);
-}
-
-#ifndef STDOUT_FILENO
-#define STDOUT_FILENO 1
-#endif
-
-static inline size_t sapi_cli_single_write(const char *str, uint str_length)
-{
-#ifdef PHP_WRITE_STDOUT
- long ret;
-
- ret = write(STDOUT_FILENO, str, str_length);
- if (ret <= 0) {
- return 0;
- }
- return ret;
-#else
- size_t ret;
-
- ret = fwrite(str, 1, MIN(str_length, 16384), stdout);
- return ret;
-#endif
-}
-
-static int sapi_cli_ub_write(const char *str, uint str_length TSRMLS_DC)
-{
- const char *ptr = str;
- uint remaining = str_length;
- size_t ret;
-
- while (remaining > 0)
- {
- ret = sapi_cli_single_write(ptr, remaining);
- if (!ret) {
-#ifdef PHP_CLI_WIN32_NO_CONSOLE
- break;
-#else
- php_handle_aborted_connection();
-#endif
- }
- ptr += ret;
- remaining -= ret;
- }
-
- return str_length;
-}
-
-
-static void sapi_cli_flush(void *server_context)
-{
- if (fflush(stdout)==EOF) {
-#ifndef PHP_CLI_WIN32_NO_CONSOLE
- php_handle_aborted_connection();
-#endif
- }
-}
-
-static char *php_self = "";
-static char *script_filename = "";
-
-static void sapi_cli_register_variables(zval *track_vars_array TSRMLS_DC)
-{
- /* In CGI mode, we consider the environment to be a part of the server
- * variables
- */
- php_import_environment_variables(track_vars_array TSRMLS_CC);
-
- /* Build the special-case PHP_SELF variable for the CLI version */
- php_register_variable("PHP_SELF", php_self, track_vars_array TSRMLS_CC);
- php_register_variable("SCRIPT_NAME", php_self, track_vars_array TSRMLS_CC);
- /* filenames are empty for stdin */
- php_register_variable("SCRIPT_FILENAME", script_filename, track_vars_array TSRMLS_CC);
- php_register_variable("PATH_TRANSLATED", script_filename, track_vars_array TSRMLS_CC);
- /* just make it available */
- php_register_variable("DOCUMENT_ROOT", "", track_vars_array TSRMLS_CC);
-}
-
-
-static void sapi_cli_log_message(char *message)
-{
- fprintf(stderr, "%s\n", message);
-}
-
-static int sapi_cli_deactivate(TSRMLS_D)
-{
- fflush(stdout);
- if(SG(request_info).argv0) {
- free(SG(request_info).argv0);
- SG(request_info).argv0 = NULL;
- }
- return SUCCESS;
-}
-
-static char* sapi_cli_read_cookies(TSRMLS_D)
-{
- return NULL;
-}
-
-static int sapi_cli_send_headers(sapi_headers_struct *sapi_headers TSRMLS_DC)
-{
- /* We do nothing here, this function is needed to prevent that the fallback
- * header handling is called. */
- return SAPI_HEADER_SENT_SUCCESSFULLY;
-}
-
-static void sapi_cli_send_header(sapi_header_struct *sapi_header, void *server_context TSRMLS_DC)
-{
-}
-
-
-static int php_cli_startup(sapi_module_struct *sapi_module)
-{
- if (php_module_startup(sapi_module, NULL, 0)==FAILURE) {
- return FAILURE;
- }
- return SUCCESS;
-}
-
-
-/* {{{ sapi_cli_ini_defaults */
-
-/* overwriteable ini defaults must be set in sapi_cli_ini_defaults() */
-#define INI_DEFAULT(name,value)\
- ZVAL_STRING(tmp, value, 0);\
- zend_hash_update(configuration_hash, name, sizeof(name), tmp, sizeof(zval), (void**)&entry);\
- Z_STRVAL_P(entry) = zend_strndup(Z_STRVAL_P(entry), Z_STRLEN_P(entry))
-
-/* hard coded ini settings must be set in main() */
-#define INI_HARDCODED(name,value)\
- zend_alter_ini_entry(name, sizeof(name), value, strlen(value), PHP_INI_SYSTEM, PHP_INI_STAGE_ACTIVATE);
-
-static void sapi_cli_ini_defaults(HashTable *configuration_hash)
-{
- zval *tmp, *entry;
-
- MAKE_STD_ZVAL(tmp);
-
- INI_DEFAULT("report_zend_debug", "0");
- INI_DEFAULT("display_errors", "1");
-
- FREE_ZVAL(tmp);
-}
-/* }}} */
-
-/* {{{ sapi_module_struct cli_sapi_module
- */
-static sapi_module_struct cli_sapi_module = {
- "cli", /* name */
- "Command Line Interface", /* pretty name */
-
- php_cli_startup, /* startup */
- php_module_shutdown_wrapper, /* shutdown */
-
- NULL, /* activate */
- sapi_cli_deactivate, /* deactivate */
-
- sapi_cli_ub_write, /* unbuffered write */
- sapi_cli_flush, /* flush */
- NULL, /* get uid */
- NULL, /* getenv */
-
- php_error, /* error handler */
-
- NULL, /* header handler */
- sapi_cli_send_headers, /* send headers handler */
- sapi_cli_send_header, /* send header handler */
-
- NULL, /* read POST data */
- sapi_cli_read_cookies, /* read Cookies */
-
- sapi_cli_register_variables, /* register server variables */
- sapi_cli_log_message, /* Log message */
-
- STANDARD_SAPI_MODULE_PROPERTIES
-};
-/* }}} */
-
-/* {{{ php_cli_usage
- */
-static void php_cli_usage(char *argv0)
-{
- char *prog;
-
- prog = strrchr(argv0, '/');
- if (prog) {
- prog++;
- } else {
- prog = "php";
- }
-
- php_printf( "Usage: %s [options] [-f] <file> [--] [args...]\n"
- " %s [options] -r <code> [--] [args...]\n"
- " %s [options] [-B <begin_code>] -R <code> [-E <end_code>] [--] [args...]\n"
- " %s [options] [-B <begin_code>] -F <file> [-E <end_code>] [--] [args...]\n"
- " %s [options] -- [args...]\n"
- "\n"
- " -a Run interactively\n"
- " -c <path>|<file> Look for php.ini file in this directory\n"
- " -n No php.ini file will be used\n"
- " -d foo[=bar] Define INI entry foo with value 'bar'\n"
- " -e Generate extended information for debugger/profiler\n"
- " -f <file> Parse <file>.\n"
- " -h This help\n"
- " -i PHP information\n"
- " -l Syntax check only (lint)\n"
- " -m Show compiled in modules\n"
- " -r <code> Run PHP <code> without using script tags <?..?>\n"
- " -B <begin_code> Run PHP <begin_code> before processing input lines\n"
- " -R <code> Run PHP <code> for every input line\n"
- " -F <file> Parse and execute <file> for every input line\n"
- " -E <end_code> Run PHP <end_code> after processing all input lines\n"
- " -H Hide any passed arguments from external tools.\n"
- " -s Display colour syntax highlighted source.\n"
- " -v Version number\n"
- " -w Display source with stripped comments and whitespace.\n"
- " -z <file> Load Zend extension <file>.\n"
- "\n"
- " args... Arguments passed to script. Use -- args when first argument\n"
- " starts with - or script is read from stdin\n"
- "\n"
- , prog, prog, prog, prog, prog);
-}
-/* }}} */
-
-static void define_command_line_ini_entry(char *arg)
-{
- char *name, *value;
-
- name = arg;
- value = strchr(arg, '=');
- if (value) {
- *value = 0;
- value++;
- } else {
- value = "1";
- }
- zend_alter_ini_entry(name, strlen(name)+1, value, strlen(value), PHP_INI_SYSTEM, PHP_INI_STAGE_ACTIVATE);
-}
-
-
-static void php_register_command_line_global_vars(char **arg TSRMLS_DC)
-{
- char *var, *val;
-
- var = *arg;
- val = strchr(var, '=');
- if (!val) {
- printf("No value specified for variable '%s'\n", var);
- } else {
- *val++ = '\0';
- php_register_variable(var, val, NULL TSRMLS_CC);
- }
- efree(*arg);
-}
-
-static php_stream *s_in_process = NULL;
-
-static void cli_register_file_handles(TSRMLS_D)
-{
- zval *zin, *zout, *zerr;
- php_stream *s_in, *s_out, *s_err;
- php_stream_context *sc_in=NULL, *sc_out=NULL, *sc_err=NULL;
- zend_constant ic, oc, ec;
-
- MAKE_STD_ZVAL(zin);
- MAKE_STD_ZVAL(zout);
- MAKE_STD_ZVAL(zerr);
-
- s_in = php_stream_open_wrapper_ex("php://stdin", "rb", 0, NULL, sc_in);
- s_out = php_stream_open_wrapper_ex("php://stdout", "wb", 0, NULL, sc_out);
- s_err = php_stream_open_wrapper_ex("php://stderr", "wb", 0, NULL, sc_err);
-
- if (s_in==NULL || s_out==NULL || s_err==NULL) {
- return;
- }
-
- s_in_process = s_in;
-
- php_stream_to_zval(s_in, zin);
- php_stream_to_zval(s_out, zout);
- php_stream_to_zval(s_err, zerr);
-
- ic.value = *zin;
- ic.flags = CONST_CS;
- ic.name = zend_strndup(ZEND_STRS("STDIN"));
- ic.name_len = sizeof("STDIN");
- ic.module_number = 0;
- zend_register_constant(&ic TSRMLS_CC);
-
- oc.value = *zout;
- oc.flags = CONST_CS;
- oc.name = zend_strndup(ZEND_STRS("STDOUT"));
- oc.name_len = sizeof("STDOUT");
- oc.module_number = 0;
- zend_register_constant(&oc TSRMLS_CC);
-
- ec.value = *zerr;
- ec.flags = CONST_CS;
- ec.name = zend_strndup(ZEND_STRS("STDERR"));
- ec.name_len = sizeof("STDERR");
- ec.module_number = 0;
- zend_register_constant(&ec TSRMLS_CC);
-
- FREE_ZVAL(zin);
- FREE_ZVAL(zout);
- FREE_ZVAL(zerr);
-}
-
-static const char *param_mode_conflict = "Either execute direct code, process stdin or use a file.\n";
-
-/* {{{ cli_seek_file_begin
- */
-static int cli_seek_file_begin(zend_file_handle *file_handle, char *script_file, int *lineno TSRMLS_DC)
-{
- int c;
-
- *lineno = 1;
-
- if (!(file_handle->handle.fp = VCWD_FOPEN(script_file, "rb"))) {
- php_printf("Could not open input file: %s.\n", script_file);
- return FAILURE;
- }
- file_handle->filename = script_file;
- /* #!php support */
- c = fgetc(file_handle->handle.fp);
- if (c == '#') {
- while (c != 10 && c != 13) {
- c = fgetc(file_handle->handle.fp); /* skip to end of line */
- }
- /* handle situations where line is terminated by \r\n */
- if (c == 13) {
- if (fgetc(file_handle->handle.fp) != 10) {
- long pos = ftell(file_handle->handle.fp);
- fseek(file_handle->handle.fp, pos - 1, SEEK_SET);
- }
- }
- *lineno = 2;
- } else {
- rewind(file_handle->handle.fp);
- }
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ main
- */
-#ifdef PHP_CLI_WIN32_NO_CONSOLE
-int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd)
-#else
-int main(int argc, char *argv[])
-#endif
-{
- int exit_status = SUCCESS;
- int c;
- zend_file_handle file_handle;
-/* temporary locals */
- int behavior=PHP_MODE_STANDARD;
- int orig_optind=php_optind;
- char *orig_optarg=php_optarg;
- char *arg_free=NULL, **arg_excp=&arg_free;
- char *script_file=NULL;
- zend_llist global_vars;
- int interactive=0;
- int module_started = 0;
- int lineno = 0;
- char *exec_direct=NULL, *exec_run=NULL, *exec_begin=NULL, *exec_end=NULL;
- const char *param_error=NULL;
- int hide_argv = 0;
-/* end of temporary locals */
-#ifdef ZTS
- zend_compiler_globals *compiler_globals;
- zend_executor_globals *executor_globals;
- php_core_globals *core_globals;
- sapi_globals_struct *sapi_globals;
- void ***tsrm_ls;
-#endif
-#ifdef PHP_CLI_WIN32_NO_CONSOLE
- int argc = __argc;
- char **argv = __argv;
-#endif
-
-#if defined(PHP_WIN32) && defined(_DEBUG) && defined(PHP_WIN32_DEBUG_HEAP)
- {
- int tmp_flag;
-
- _CrtSetReportMode(_CRT_ERROR, _CRTDBG_MODE_FILE);
- _CrtSetReportFile(_CRT_ERROR, _CRTDBG_FILE_STDERR);
-
- tmp_flag = _CrtSetDbgFlag(_CRTDBG_REPORT_FLAG);
- tmp_flag |= _CRTDBG_DELAY_FREE_MEM_DF;
- tmp_flag |= _CRTDBG_LEAK_CHECK_DF;
-
- _CrtSetDbgFlag(tmp_flag);
- }
-#endif
-
-#ifdef HAVE_SIGNAL_H
-#if defined(SIGPIPE) && defined(SIG_IGN)
- signal(SIGPIPE, SIG_IGN); /* ignore SIGPIPE in standalone mode so
- that sockets created via fsockopen()
- don't kill PHP if the remote site
- closes it. in apache|apxs mode apache
- does that for us! thies@thieso.net
- 20000419 */
-#endif
-#endif
-
-
-#ifdef ZTS
- tsrm_startup(1, 1, 0, NULL);
-#endif
-
- cli_sapi_module.ini_defaults = sapi_cli_ini_defaults;
- cli_sapi_module.phpinfo_as_text = 1;
- sapi_startup(&cli_sapi_module);
-
-#ifdef PHP_WIN32
- _fmode = _O_BINARY; /*sets default for file streams to binary */
- setmode(_fileno(stdin), O_BINARY); /* make the stdio mode be binary */
- setmode(_fileno(stdout), O_BINARY); /* make the stdio mode be binary */
- setmode(_fileno(stderr), O_BINARY); /* make the stdio mode be binary */
-#endif
-
-
- while ((c = php_getopt(argc, argv, OPTIONS, &php_optarg, &php_optind, 0))!=-1) {
- switch (c) {
- case 'c':
- cli_sapi_module.php_ini_path_override = strdup(php_optarg);
- break;
- case 'n':
- cli_sapi_module.php_ini_ignore = 1;
- break;
- }
- }
- php_optind = orig_optind;
- php_optarg = orig_optarg;
-
- cli_sapi_module.executable_location = argv[0];
-
-#ifdef ZTS
- compiler_globals = ts_resource(compiler_globals_id);
- executor_globals = ts_resource(executor_globals_id);
- core_globals = ts_resource(core_globals_id);
- sapi_globals = ts_resource(sapi_globals_id);
- tsrm_ls = ts_resource(0);
-#endif
-
- /* startup after we get the above ini override se we get things right */
- if (php_module_startup(&cli_sapi_module, NULL, 0)==FAILURE) {
- /* there is no way to see if we must call zend_ini_deactivate()
- * since we cannot check if EG(ini_directives) has been initialised
- * because the executor's constructor does not set initialize it.
- * Apart from that there seems no need for zend_ini_deactivate() yet.
- * So we goto out_err.*/
- exit_status = 1;
- goto out_err;
- }
- module_started = 1;
-
- zend_first_try {
- zend_llist_init(&global_vars, sizeof(char *), NULL, 0);
-
- zend_uv.html_errors = 0; /* tell the engine we're in non-html mode */
- CG(in_compilation) = 0; /* not initialized but needed for several options */
- EG(uninitialized_zval_ptr) = NULL;
-
- if (cli_sapi_module.php_ini_path_override && cli_sapi_module.php_ini_ignore) {
- PUTS("You cannot use both -n and -c switch. Use -h for help.\n");
- exit_status=1;
- goto out_err;
- }
-
- /* here is the place for hard coded defaults which cannot be overwritten in the ini file */
- INI_HARDCODED("register_argc_argv", "1");
- INI_HARDCODED("html_errors", "0");
- INI_HARDCODED("implicit_flush", "1");
- INI_HARDCODED("output_buffering", "0");
- INI_HARDCODED("max_execution_time", "0");
-
- while ((c = php_getopt(argc, argv, OPTIONS, &php_optarg, &php_optind, 0)) != -1) {
- switch (c) {
-
- case 'd': /* define ini entries on command line */
- define_command_line_ini_entry(php_optarg);
- break;
-
- case 'h': /* help & quit */
- case '?':
- php_output_startup();
- php_output_activate(TSRMLS_C);
- php_cli_usage(argv[0]);
- php_end_ob_buffers(1 TSRMLS_CC);
- exit_status=1;
- goto err;
-
-
- case 'i': /* php info & quit */
- if (php_request_startup(TSRMLS_C)==FAILURE) {
- goto err;
- }
- php_print_info(0xFFFFFFFF TSRMLS_CC);
- php_end_ob_buffers(1 TSRMLS_CC);
- exit_status=1;
- goto out;
-
- case 'm': /* list compiled in modules */
- php_output_startup();
- php_output_activate(TSRMLS_C);
- php_printf("[PHP Modules]\n");
- print_modules(TSRMLS_C);
- php_printf("\n[Zend Modules]\n");
- print_extensions(TSRMLS_C);
- php_printf("\n");
- php_end_ob_buffers(1 TSRMLS_CC);
- exit_status=1;
- goto err;
-
- case 'v': /* show php version & quit */
- if (php_request_startup(TSRMLS_C)==FAILURE) {
- goto err;
- }
-#if ZEND_DEBUG
- php_printf("PHP %s (%s) (built: %s %s) (DEBUG)\nCopyright (c) 1997-2004 The PHP Group\n%s", PHP_VERSION, sapi_module.name, __DATE__, __TIME__, get_zend_version());
-#else
- php_printf("PHP %s (%s) (built: %s %s)\nCopyright (c) 1997-2004 The PHP Group\n%s", PHP_VERSION, sapi_module.name, __DATE__, __TIME__, get_zend_version());
-#endif
- php_end_ob_buffers(1 TSRMLS_CC);
- exit_status=1;
- goto out;
-
- default:
- break;
- }
- }
-
- /* Set some CLI defaults */
- SG(options) |= SAPI_OPTION_NO_CHDIR;
-
- php_optind = orig_optind;
- php_optarg = orig_optarg;
- while ((c = php_getopt(argc, argv, OPTIONS, &php_optarg, &php_optind, 0)) != -1) {
- switch (c) {
-
- case 'a': /* interactive mode */
- if (!interactive) {
- printf("Interactive mode enabled\n\n");
- fflush(stdout);
- interactive=1;
- }
- break;
-
- case 'C': /* don't chdir to the script directory */
- /* This is default so NOP */
- break;
-
- case 'e': /* enable extended info output */
- CG(extended_info) = 1;
- break;
-
- case 'F':
- if (behavior == PHP_MODE_PROCESS_STDIN) {
- if (exec_run || script_file) {
- param_error = "You can use -R or -F only once.\n";
- break;
- }
- } else if (behavior != PHP_MODE_STANDARD) {
- param_error = param_mode_conflict;
- break;
- }
- behavior=PHP_MODE_PROCESS_STDIN;
- script_file = php_optarg;
- break;
-
- case 'f': /* parse file */
- if (behavior == PHP_MODE_CLI_DIRECT || behavior == PHP_MODE_PROCESS_STDIN) {
- param_error = param_mode_conflict;
- break;
- } else if (script_file) {
- param_error = "You can use -f only once.\n";
- break;
- }
- script_file = php_optarg;
- break;
-
- case 'g': /* define global variables on command line */
- {
- char *arg = estrdup(php_optarg);
-
- zend_llist_add_element(&global_vars, &arg);
- }
- break;
-
- case 'l': /* syntax check mode */
- if (behavior != PHP_MODE_STANDARD) {
- break;
- }
- behavior=PHP_MODE_LINT;
- break;
-
-#if 0 /* not yet operational, see also below ... */
- case '': /* generate indented source mode*/
- if (behavior == PHP_MODE_CLI_DIRECT || behavior == PHP_MODE_PROCESS_STDIN) {
- param_error = "Source indenting only works for files.\n";
- break;
- }
- behavior=PHP_MODE_INDENT;
- break;
-#endif
-
- case 'q': /* do not generate HTTP headers */
- /* This is default so NOP */
- break;
-
- case 'r': /* run code from command line */
- if (behavior == PHP_MODE_CLI_DIRECT) {
- if (exec_direct || script_file) {
- param_error = "You can use -r only once.\n";
- break;
- }
- } else if (behavior != PHP_MODE_STANDARD) {
- param_error = param_mode_conflict;
- break;
- }
- behavior=PHP_MODE_CLI_DIRECT;
- exec_direct=php_optarg;
- break;
-
- case 'R':
- if (behavior == PHP_MODE_PROCESS_STDIN) {
- if (exec_run || script_file) {
- param_error = "You can use -R or -F only once.\n";
- break;
- }
- } else if (behavior != PHP_MODE_STANDARD) {
- param_error = param_mode_conflict;
- break;
- }
- behavior=PHP_MODE_PROCESS_STDIN;
- exec_run=php_optarg;
- break;
-
- case 'B':
- if (behavior == PHP_MODE_PROCESS_STDIN) {
- if (exec_begin) {
- param_error = "You can use -B only once.\n";
- break;
- }
- } else if (behavior != PHP_MODE_STANDARD) {
- param_error = param_mode_conflict;
- break;
- }
- behavior=PHP_MODE_PROCESS_STDIN;
- exec_begin=php_optarg;
- break;
-
- case 'E':
- if (behavior == PHP_MODE_PROCESS_STDIN) {
- if (exec_end) {
- param_error = "You can use -E only once.\n";
- break;
- }
- } else if (behavior != PHP_MODE_STANDARD) {
- param_error = param_mode_conflict;
- break;
- }
- behavior=PHP_MODE_PROCESS_STDIN;
- exec_end=php_optarg;
- break;
-
- case 's': /* generate highlighted HTML from source */
- if (behavior == PHP_MODE_CLI_DIRECT || behavior == PHP_MODE_PROCESS_STDIN) {
- param_error = "Source highlighting only works for files.\n";
- break;
- }
- behavior=PHP_MODE_HIGHLIGHT;
- break;
-
- case 'w':
- if (behavior == PHP_MODE_CLI_DIRECT || behavior == PHP_MODE_PROCESS_STDIN) {
- param_error = "Source stripping only works for files.\n";
- break;
- }
- behavior=PHP_MODE_STRIP;
- break;
-
- case 'z': /* load extension file */
- zend_load_extension(php_optarg);
- break;
- case 'H':
- hide_argv = 1;
- break;
-
- default:
- break;
- }
- }
-
- if (param_error) {
- PUTS(param_error);
- exit_status=1;
- goto out_err;
- }
-
- CG(interactive) = interactive;
-
- /* only set script_file if not set already and not in direct mode and not at end of parameter list */
- if (argc > php_optind
- && !script_file
- && behavior!=PHP_MODE_CLI_DIRECT
- && behavior!=PHP_MODE_PROCESS_STDIN
- && strcmp(argv[php_optind-1],"--"))
- {
- script_file=argv[php_optind];
- php_optind++;
- }
- if (script_file) {
- if (cli_seek_file_begin(&file_handle, script_file, &lineno TSRMLS_CC) != SUCCESS) {
- goto err;
- }
- script_filename = script_file;
- } else {
- /* We could handle PHP_MODE_PROCESS_STDIN in a different manner */
- /* here but this would make things only more complicated. And it */
- /* is consitent with the way -R works where the stdin file handle*/
- /* is also accessible. */
- file_handle.filename = "-";
- file_handle.handle.fp = stdin;
- }
- file_handle.type = ZEND_HANDLE_FP;
- file_handle.opened_path = NULL;
- file_handle.free_filename = 0;
- php_self = file_handle.filename;
-
- /* before registering argv to module exchange the *new* argv[0] */
- /* we can achieve this without allocating more memory */
- SG(request_info).argc=argc-php_optind+1;
- arg_excp = argv+php_optind-1;
- arg_free = argv[php_optind-1];
- SG(request_info).path_translated = file_handle.filename;
- argv[php_optind-1] = file_handle.filename;
- SG(request_info).argv=argv+php_optind-1;
-
- if (php_request_startup(TSRMLS_C)==FAILURE) {
- *arg_excp = arg_free;
- fclose(file_handle.handle.fp);
- php_request_shutdown((void *) 0);
- PUTS("Could not startup.\n");
- goto err;
- }
- CG(start_lineno) = lineno;
- *arg_excp = arg_free; /* reconstuct argv */
-
- if (hide_argv) {
- int i;
- for (i = 1; i < argc; i++) {
- memset(argv[i], 0, strlen(argv[i]));
- }
- }
-
- /* This actually destructs the elements of the list - ugly hack */
- zend_is_auto_global("_SERVER", sizeof("_SERVER")-1 TSRMLS_CC);
- zend_llist_apply(&global_vars, (llist_apply_func_t) php_register_command_line_global_vars TSRMLS_CC);
- zend_llist_destroy(&global_vars);
-
- PG(during_request_startup) = 0;
- switch (behavior) {
- case PHP_MODE_STANDARD:
- if (strcmp(file_handle.filename, "-")) {
- cli_register_file_handles(TSRMLS_C);
- }
- php_execute_script(&file_handle TSRMLS_CC);
- exit_status = EG(exit_status);
- break;
- case PHP_MODE_LINT:
- exit_status = php_lint_script(&file_handle TSRMLS_CC);
- if (exit_status==SUCCESS) {
- zend_printf("No syntax errors detected in %s\n", file_handle.filename);
- } else {
- zend_printf("Errors parsing %s\n", file_handle.filename);
- }
- break;
- case PHP_MODE_STRIP:
- if (open_file_for_scanning(&file_handle TSRMLS_CC)==SUCCESS) {
- zend_strip(TSRMLS_C);
- }
- goto out;
- break;
- case PHP_MODE_HIGHLIGHT:
- {
- zend_syntax_highlighter_ini syntax_highlighter_ini;
-
- if (open_file_for_scanning(&file_handle TSRMLS_CC)==SUCCESS) {
- php_get_highlight_struct(&syntax_highlighter_ini);
- zend_highlight(&syntax_highlighter_ini TSRMLS_CC);
- }
- goto out;
- }
- break;
-#if 0
- /* Zeev might want to do something with this one day */
- case PHP_MODE_INDENT:
- open_file_for_scanning(&file_handle TSRMLS_CC);
- zend_indent();
- fclose(file_handle.handle.fp);
- goto out;
- break;
-#endif
- case PHP_MODE_CLI_DIRECT:
- cli_register_file_handles(TSRMLS_C);
- if (zend_eval_string_ex(exec_direct, NULL, "Command line code", 1 TSRMLS_CC) == FAILURE) {
- exit_status=254;
- }
- break;
-
- case PHP_MODE_PROCESS_STDIN:
- {
- char *input;
- size_t len, index = 0;
- pval *argn, *argi;
-
- cli_register_file_handles(TSRMLS_C);
-
- if (exec_begin && zend_eval_string_ex(exec_begin, NULL, "Command line begin code", 1 TSRMLS_CC) == FAILURE) {
- exit_status=254;
- }
- ALLOC_ZVAL(argi);
- Z_TYPE_P(argi) = IS_LONG;
- Z_LVAL_P(argi) = index;
- INIT_PZVAL(argi);
- zend_hash_update(&EG(symbol_table), "argi", sizeof("argi"), &argi, sizeof(pval *), NULL);
- while (exit_status == SUCCESS && (input=php_stream_gets(s_in_process, NULL, 0)) != NULL) {
- len = strlen(input);
- while (len-- && (input[len]=='\n' || input[len]=='\r')) {
- input[len] = '\0';
- }
- ALLOC_ZVAL(argn);
- Z_TYPE_P(argn) = IS_STRING;
- Z_STRLEN_P(argn) = ++len;
- Z_STRVAL_P(argn) = estrndup(input, len);
- INIT_PZVAL(argn);
- zend_hash_update(&EG(symbol_table), "argn", sizeof("argn"), &argn, sizeof(pval *), NULL);
- Z_LVAL_P(argi) = ++index;
- if (exec_run) {
- if (zend_eval_string_ex(exec_run, NULL, "Command line run code", 1 TSRMLS_CC) == FAILURE) {
- exit_status=254;
- }
- } else {
- if (script_file) {
- if (cli_seek_file_begin(&file_handle, script_file, &lineno TSRMLS_CC) != SUCCESS) {
- exit_status = 1;
- } else {
- CG(start_lineno) = lineno;
- php_execute_script(&file_handle TSRMLS_CC);
- exit_status = EG(exit_status);
- }
- }
- }
- efree(input);
- }
- if (exec_end && zend_eval_string_ex(exec_end, NULL, "Command line end code", 1 TSRMLS_CC) == FAILURE) {
- exit_status=254;
- }
-
- break;
- }
- }
-
- if (cli_sapi_module.php_ini_path_override) {
- free(cli_sapi_module.php_ini_path_override);
- }
- } zend_end_try();
-
-out:
- php_request_shutdown((void *) 0);
- if (exit_status == 0) {
- exit_status = EG(exit_status);
- }
-out_err:
- if (module_started) {
- php_module_shutdown(TSRMLS_C);
- }
- sapi_shutdown();
-#ifdef ZTS
- tsrm_shutdown();
-#endif
-
- exit(exit_status);
-
-err:
- zend_ini_deactivate(TSRMLS_C);
- exit_status = 1;
- goto out_err;
-}
-/* }}} */
-
-/*
- * 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/sapi/cli/php_getopt.h b/sapi/cli/php_getopt.h
deleted file mode 100644
index 6ce87edf78..0000000000
--- a/sapi/cli/php_getopt.h
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Marcus Boerger <helly@php.net> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#include "php.h"
-
-/* Define structure for one recognized option (both single char and long name).
- * If short_open is '-' this is the last option.
- */
-typedef struct _opt_struct {
- const char opt_char;
- const int need_param;
- const char * opt_name;
-} opt_struct;
-
-int php_getopt(int argc, char* const *argv, const opt_struct opts[], char **optarg, int *optind, int show_err);
diff --git a/sapi/continuity/CREDITS b/sapi/continuity/CREDITS
deleted file mode 100644
index 35335e9266..0000000000
--- a/sapi/continuity/CREDITS
+++ /dev/null
@@ -1,2 +0,0 @@
-Continuity
-Alex Leigh (based on nsapi code)
diff --git a/sapi/continuity/capi.c b/sapi/continuity/capi.c
deleted file mode 100644
index 24b446fae5..0000000000
--- a/sapi/continuity/capi.c
+++ /dev/null
@@ -1,507 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Alex Leigh <php (at) postfin (dot) com> |
- +----------------------------------------------------------------------+
-*/
-
-/* For more information on Continuity: http://www.ashpool.com/ */
-
-/*
- * This code is based on the PHP5 SAPI module for NSAPI by Jayakumar
- * Muthukumarasamy
- */
-
-/* PHP includes */
-#define CONTINUITY 1
-#define CAPI_DEBUG
-
-/* Define for CDP specific extensions */
-#undef CONTINUITY_CDPEXT
-
-#include "php.h"
-#include "php_variables.h"
-#include "ext/standard/info.h"
-#include "php_ini.h"
-#include "php_globals.h"
-#include "SAPI.h"
-#include "php_main.h"
-#include "php_version.h"
-#include "TSRM.h"
-#include "ext/standard/php_standard.h"
-
-/*
- * CAPI includes
- */
-#include <continuity.h>
-#include <http.h>
-
-#define NSLS_D struct capi_request_context *request_context
-#define NSLS_DC , NSLS_D
-#define NSLS_C request_context
-#define NSLS_CC , NSLS_C
-#define NSG(v) (request_context->v)
-
-/*
- * ZTS needs to be defined for CAPI to work
- */
-#if !defined(ZTS)
-#error "CAPI module needs ZTS to be defined"
-#endif
-
-/*
- * Structure to encapsulate the CAPI request in SAPI
- */
-typedef struct capi_request_context {
- httpTtrans *t;
- int read_post_bytes;
-} capi_request_context;
-
-/**************/
-
-PHP_MINIT_FUNCTION(continuity);
-PHP_MSHUTDOWN_FUNCTION(continuity);
-PHP_RINIT_FUNCTION(continuity);
-PHP_RSHUTDOWN_FUNCTION(continuity);
-PHP_MINFO_FUNCTION(continuity);
-
-PHP_FUNCTION(continuity_virtual);
-PHP_FUNCTION(continuity_request_headers);
-PHP_FUNCTION(continuity_response_headers);
-
-function_entry continuity_functions[] = {
- {NULL, NULL, NULL}
-};
-
-zend_module_entry continuity_module_entry = {
- STANDARD_MODULE_HEADER,
- "continuity",
- continuity_functions,
- PHP_MINIT(continuity),
- PHP_MSHUTDOWN(continuity),
- NULL,
- NULL,
- PHP_MINFO(continuity),
- NO_VERSION_YET,
- STANDARD_MODULE_PROPERTIES
-};
-
-PHP_MINIT_FUNCTION(continuity)
-{
- return SUCCESS;
-}
-
-PHP_MSHUTDOWN_FUNCTION(continuity)
-{
- return SUCCESS;
-}
-
-PHP_MINFO_FUNCTION(continuity)
-{
- php_info_print_table_start();
- php_info_print_table_row(2, "Continuity Module Revision", "$Revision$");
- php_info_print_table_row(2, "Server Version", conFget_build());
-#ifdef CONTINUITY_CDPEXT
- php_info_print_table_row(2,"CDP Extensions", "enabled");
-#else
- php_info_print_table_row(2,"CDP Extensions", "disabled");
-#endif
- php_info_print_table_end();
-
-/* DISPLAY_INI_ENTRIES(); */
-}
-
-/**************/
-
-/*
- * sapi_capi_ub_write: Write len bytes to the connection output.
- */
-static int sapi_capi_ub_write(const char *str, unsigned int str_length TSRMLS_DC)
-{
- int retval;
- capi_request_context *rc;
-
- rc = (capi_request_context *) SG(server_context);
- retval = httpFwrite(rc->t, (char *) str, str_length);
- if (retval == -1 || retval == 0)
- php_handle_aborted_connection();
- return retval;
-}
-
-/*
- * sapi_capi_header_handler: Add/update response headers with those provided
- * by the PHP engine.
- */
-static int sapi_capi_header_handler(sapi_header_struct * sapi_header, sapi_headers_struct * sapi_headers TSRMLS_DC)
-{
- char *header_name, *header_content, *p;
- capi_request_context *rc = (capi_request_context *) SG(server_context);
-
- lstFset_delete_key(rc->t->res_hdrs, "Content-Type");
-
- header_name = sapi_header->header;
- header_content = p = strchr(header_name, ':');
- if (p == NULL) {
- return 0;
- }
- *p = 0;
- do {
- header_content++;
- } while (*header_content == ' ');
-
- lstFset_add(rc->t->res_hdrs, header_name, header_content);
-
- *p = ':'; /* restore '*p' */
-
- efree(sapi_header->header);
-
- return 0; /* don't use the default SAPI mechanism, CAPI
- * duplicates this functionality */
-}
-
-/*
- * sapi_capi_send_headers: Transmit the headers to the client. This has the
- * effect of starting the response under Continuity.
- */
-static int sapi_capi_send_headers(sapi_headers_struct * sapi_headers TSRMLS_DC)
-{
- int retval;
- capi_request_context *rc = (capi_request_context *) SG(server_context);
-
- /*
- * We could probably just do this in the header_handler. But, I don't know
- * what the implication of doing it there is.
- */
-
- if (SG(sapi_headers).send_default_content_type) {
- /* lstFset_delete_key(rc->t->res_hdrs, "Content-Type"); */
- lstFset_update(rc->t->res_hdrs, "Content-Type", "text/html");
- }
- httpFset_status(rc->t, SG(sapi_headers).http_response_code, NULL);
- httpFstart_response(rc->t);
-
- return SAPI_HEADER_SENT_SUCCESSFULLY;
-
-}
-
-static int sapi_capi_read_post(char *buffer, uint count_bytes TSRMLS_DC)
-{
- unsigned int max_read, total_read = 0;
- capi_request_context *rc = (capi_request_context *) SG(server_context);
-
- if (rc->read_post_bytes == -1) {
- max_read = MIN(count_bytes, SG(request_info).content_length);
- } else {
- if (rc->read_post_bytes == 0)
- return 0;
- max_read = MIN(count_bytes, (SG(request_info).content_length - rc->read_post_bytes));
- }
-
- total_read = httpFread(rc->t, buffer, max_read);
-
- if (total_read < 0)
- total_read = -1;
- else
- rc->read_post_bytes = total_read;
-
- return total_read;
-}
-
-/*
- * sapi_capi_read_cookies: Return cookie information into PHP.
- */
-static char *sapi_capi_read_cookies(TSRMLS_D)
-{
- char *cookie_string;
- capi_request_context *rc = (capi_request_context *) SG(server_context);
-
- cookie_string = lstFset_get(rc->t->req_hdrs, "cookie");
- return cookie_string;
-}
-
-static void sapi_capi_register_server_variables(zval * track_vars_array TSRMLS_DC)
-{
- capi_request_context *rc = (capi_request_context *) SG(server_context);
- size_t i;
- char *value;
- char buf[128];
-
- /* PHP_SELF and REQUEST_URI */
- value = lstFset_get(rc->t->vars, "uri");
- if (value != NULL) {
- php_register_variable("PHP_SELF", value, track_vars_array TSRMLS_CC);
- php_register_variable("REQUEST_URI", value, track_vars_array TSRMLS_CC);
- }
-
- /* COUNTRY CODE */
- value = lstFset_get(rc->t->vars, "ccode");
- if(value!=NULL)
- php_register_variable("COUNTRY_CODE", value, track_vars_array TSRMLS_CC);
-
- /* argv */
- value = lstFset_get(rc->t->vars, "query");
- if (value != NULL)
- php_register_variable("argv", value, track_vars_array TSRMLS_CC);
-
- /* GATEWAY_INTERFACE */
- php_register_variable("GATEWAY_INTERFACE", "CGI/1.1", track_vars_array TSRMLS_CC);
-
- /* SERVER_NAME and HTTP_HOST */
- value = lstFset_get(rc->t->req_hdrs, "host");
- if (value != NULL) {
- php_register_variable("HTTP_HOST", value, track_vars_array TSRMLS_CC);
- /* TODO: This should probably scrub the port value if one is present. */
- php_register_variable("SERVER_NAME", value, track_vars_array TSRMLS_CC);
- }
- /* SERVER_SOFTWARE */
- value = lstFset_get(rc->t->res_hdrs, "Server");
- if (value != NULL)
- php_register_variable("SERVER_SOFTWARE", value, track_vars_array TSRMLS_CC);
-
- /* SERVER_PROTOCOL */
- value = lstFset_get(rc->t->vars, "protocol");
- if (value != NULL)
- php_register_variable("SERVER_PROTOCOL", value, track_vars_array TSRMLS_CC);
-
- /* REQUEST_METHOD */
- value = lstFset_get(rc->t->vars, "method");
- if (value != NULL)
- php_register_variable("REQUEST_METHOD", value, track_vars_array TSRMLS_CC);
-
- /* QUERY_STRING */
- value = lstFset_get(rc->t->vars, "query");
- if (value != NULL)
- php_register_variable("QUERY_STRING", value, track_vars_array TSRMLS_CC);
-
- /* DOCUMENT_ROOT */
- value = lstFset_get(rc->t->vars, "docroot");
- if (value != NULL)
- php_register_variable("DOCUMENT_ROOT", value, track_vars_array TSRMLS_CC);
-
- /* HTTP_ACCEPT */
- value = lstFset_get(rc->t->req_hdrs, "accept");
- if (value != NULL)
- php_register_variable("HTTP_ACCEPT", value, track_vars_array TSRMLS_CC);
-
- /* HTTP_ACCEPT_CHARSET */
- value = lstFset_get(rc->t->req_hdrs, "accept-charset");
- if (value != NULL)
- php_register_variable("HTTP_ACCEPT_CHARSET", value, track_vars_array TSRMLS_CC);
-
- /* HTTP_ACCEPT_ENCODING */
- value = lstFset_get(rc->t->req_hdrs, "accept-encoding");
- if (value != NULL)
- php_register_variable("HTTP_ACCEPT_ENCODING", value, track_vars_array TSRMLS_CC);
-
- /* HTTP_ACCEPT_LANGUAGE */
- value = lstFset_get(rc->t->req_hdrs, "accept-language");
- if (value != NULL)
- php_register_variable("HTTP_ACCEPT_LANGUAGE", value, track_vars_array TSRMLS_CC);
-
- /* HTTP_CONNECTION */
- value = lstFset_get(rc->t->req_hdrs, "connection");
- if (value != NULL)
- php_register_variable("HTTP_CONNECTION", value, track_vars_array TSRMLS_CC);
-
- /* HTTP_REFERER */
- value = lstFset_get(rc->t->req_hdrs, "referer");
- if (value != NULL)
- php_register_variable("HTTP_REFERER", value, track_vars_array TSRMLS_CC);
-
- /* HTTP_USER_AGENT */
- value = lstFset_get(rc->t->req_hdrs, "user-agent");
- if (value != NULL)
- php_register_variable("HTTP_USER_AGENT", value, track_vars_array TSRMLS_CC);
-
- /* REMOTE_ADDR */
- utlFip_to_str(rc->t->cli_ipv4_addr, buf, sizeof(buf));
- php_register_variable("REMOTE_ADDR", buf, track_vars_array TSRMLS_CC);
-
- /* REMOTE_PORT */
-
- /* SCRIPT_FILENAME and PATH_TRANSLATED */
- value = lstFset_get(rc->t->vars, "path");
- if (value != NULL) {
- php_register_variable("SCRIPT_FILENAME", value, track_vars_array TSRMLS_CC);
- php_register_variable("PATH_TRANSLATED", value, track_vars_array TSRMLS_CC);
- }
- /* SERVER_ADMIN */
- /* Not applicable */
-
- /* SERVER_PORT */
-
-}
-
-static void capi_log_message(char *message)
-{
- TSRMLS_FETCH();
- capi_request_context *rc = (capi_request_context *) SG(server_context);
- logFmsg(0, "mod/php: %s", message);
-}
-
-static int php_capi_startup(sapi_module_struct *sapi_module);
-
-sapi_module_struct capi_sapi_module = {
- "Continuity", /* name */
- "Continuity Server Enterprise Edition", /* pretty name */
-
- php_capi_startup, /* startup */
- php_module_shutdown_wrapper, /* shutdown */
-
- NULL, /* activate */
- NULL, /* deactivate */
-
- sapi_capi_ub_write, /* unbuffered write */
- NULL, /* flush */
- NULL, /* get uid */
- NULL, /* getenv */
-
- php_error, /* error handler */
-
- sapi_capi_header_handler, /* header handler */
- sapi_capi_send_headers, /* send headers handler */
- NULL, /* send header handler */
-
- sapi_capi_read_post, /* read POST data */
- sapi_capi_read_cookies, /* read Cookies */
-
- sapi_capi_register_server_variables, /* register server variables */
- capi_log_message, /* Log message */
-
- NULL, /* Block interruptions */
- NULL, /* Unblock interruptions */
-
- STANDARD_SAPI_MODULE_PROPERTIES
-};
-
-static int php_capi_startup(sapi_module_struct *sapi_module) {
- if(php_module_startup(sapi_module,&continuity_module_entry,1)==FAILURE) {
- return FAILURE;
- }
- return SUCCESS;
-}
-
-
-static char *
- capi_strdup(char *str)
-{
- if (str != NULL)
- return strFcopy(str);
- return NULL;
-}
-
-static void capi_free(void *addr)
-{
- if (addr != NULL)
- free(addr);
-}
-
-static void capi_request_ctor(NSLS_D TSRMLS_DC)
-{
- char *query_string = lstFset_get(NSG(t->vars), "query");
- char *uri = lstFset_get(NSG(t->vars), "uri");
- char *path_info = lstFset_get(NSG(t->vars), "path-info");
- char *path_translated = lstFset_get(NSG(t->vars), "path");
- char *request_method = lstFset_get(NSG(t->vars), "method");
- char *content_type = lstFset_get(NSG(t->req_hdrs), "content-type");
- char *content_length = lstFset_get(NSG(t->req_hdrs), "content-length");
-
- SG(request_info).query_string = capi_strdup(query_string);
- SG(request_info).request_uri = capi_strdup(uri);
- SG(request_info).request_method = capi_strdup(request_method);
- SG(request_info).path_translated = capi_strdup(path_translated);
- SG(request_info).content_type = capi_strdup(content_type);
- SG(request_info).content_length = (content_length == NULL) ? 0 : strtoul(content_length, 0, 0);
- SG(sapi_headers).http_response_code = 200;
-}
-
-static void capi_request_dtor(NSLS_D TSRMLS_DC)
-{
- capi_free(SG(request_info).query_string);
- capi_free(SG(request_info).request_uri);
- capi_free(SG(request_info).request_method);
- capi_free(SG(request_info).path_translated);
- capi_free(SG(request_info).content_type);
-}
-
-int capi_module_main(NSLS_D TSRMLS_DC)
-{
- zend_file_handle file_handle;
-
- if (php_request_startup(TSRMLS_C) == FAILURE) {
- return FAILURE;
- }
- file_handle.type = ZEND_HANDLE_FILENAME;
- file_handle.filename = SG(request_info).path_translated;
- file_handle.free_filename = 0;
- file_handle.opened_path = NULL;
-
- php_execute_script(&file_handle TSRMLS_CC);
- php_request_shutdown(NULL);
-
- return SUCCESS;
-}
-
-int phpFinit(lstTset * opt)
-{
- php_core_globals *core_globals;
-
- tsrm_startup(128, 1, 0, NULL);
- core_globals = ts_resource(core_globals_id);
-
- logFmsg(0, "mod/php: PHP Interface v3 (module)");
- logFmsg(0, "mod/php: Copyright (c) 1999, 2000 The PHP Group. All rights reserved.");
-
- sapi_startup(&capi_sapi_module);
- capi_sapi_module.startup(&capi_sapi_module);
-
- return STATUS_PROCEED;
-}
-
-int phpFservice(httpTtrans * t, lstTset * opts)
-{
- int retval;
- capi_request_context *request_context;
-
- TSRMLS_FETCH();
-
- request_context = (capi_request_context *) malloc(sizeof(capi_request_context));
- request_context->t = t;
- request_context->read_post_bytes = -1;
-
- SG(server_context) = request_context;
-
- capi_request_ctor(NSLS_C TSRMLS_CC);
- retval = capi_module_main(NSLS_C TSRMLS_CC);
- capi_request_dtor(NSLS_C TSRMLS_CC);
-
- free(request_context);
-
- /*
- * This call is ostensibly provided to free the memory from PHP/TSRM when
- * the thread terminated, but, it leaks a structure in some hash list
- * according to the developers. Not calling this will leak the entire
- * interpreter, around 100k, but calling it and then terminating the
- * thread will leak the struct (around a k). The only answer with the
- * current TSRM implementation is to reuse the threads that allocate TSRM
- * resources.
- */
- /* ts_free_thread(); */
-
- if (retval == SUCCESS) {
- return STATUS_EXIT;
- } else {
- return STATUS_ERROR;
- }
-}
diff --git a/sapi/continuity/config.m4 b/sapi/continuity/config.m4
deleted file mode 100644
index e95f2b4b22..0000000000
--- a/sapi/continuity/config.m4
+++ /dev/null
@@ -1,35 +0,0 @@
-dnl ## $Id$ -*- sh -*-
-
-AC_MSG_CHECKING(for Continuity support)
-AC_ARG_WITH(continuity,
-[ --with-continuity=DIR Specify path to the installed Continuity Server],[
- PHP_CONTINUITY=$withval
-],[
- PHP_CONTINUITY=no
-])
-AC_MSG_RESULT($PHP_CONTINUITY)
-
-if test "$PHP_CONTINUITY" != "no"; then
-
- if test ! -d $PHP_CONTINUITY; then
- AC_MSG_ERROR(Please specify the path to the root of your Continuity server using --with-continuity=DIR)
- fi
- AC_MSG_CHECKING(for Continuity include files)
- if test -d $PHP_CONTINUITY/include ; then
- CAPI_INCLUDE=$PHP_CONTINUITY/include
- AC_MSG_RESULT(Continuity Binary Distribution)
- else
- AC_MSG_ERROR(Cannot find your CAPI include files in either DIR/src or DIR/include)
- fi
-
- PHP_SELECT_SAPI(continuity,shared,capi.c)
- PHP_ADD_INCLUDE($CAPI_INCLUDE)
- PHP_BUILD_THREAD_SAFE
- AC_DEFINE(HAVE_CONTINUITY,1,[Whether you have a Continuity Server])
- INSTALL_IT="\$(INSTALL) -m 0755 $SAPI_SHARED \$(INSTALL_ROOT)$PHP_CONTINUITY/lib/"
-fi
-
-
-dnl ## Local Variables:
-dnl ## tab-width: 4
-dnl ## End:
diff --git a/sapi/embed/CREDITS b/sapi/embed/CREDITS
deleted file mode 100644
index a5227b4ea9..0000000000
--- a/sapi/embed/CREDITS
+++ /dev/null
@@ -1,2 +0,0 @@
-Embed
-Edin Kadribasic
diff --git a/sapi/embed/EXPERIMENTAL b/sapi/embed/EXPERIMENTAL
deleted file mode 100644
index 293159a693..0000000000
--- a/sapi/embed/EXPERIMENTAL
+++ /dev/null
@@ -1,5 +0,0 @@
-this module 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/sapi/embed/config.m4 b/sapi/embed/config.m4
deleted file mode 100644
index 80fed48d00..0000000000
--- a/sapi/embed/config.m4
+++ /dev/null
@@ -1,32 +0,0 @@
-dnl
-dnl $Id$
-dnl
-
-AC_MSG_CHECKING(for embedded SAPI library support)
-
-AC_ARG_ENABLE(embed,
-[ --enable-embed[=TYPE] EXPERIMENTAL: Enable building of embedded SAPI library
- TYPE is either 'shared' or 'static'. [TYPE=shared]],
-[
- case $enableval in
- yes|shared)
- PHP_EMBED_TYPE=shared
- INSTALL_IT="\$(mkinstalldirs) \$(INSTALL_ROOT)\$(prefix)/lib; \$(INSTALL) -m 0755 $SAPI_SHARED \$(INSTALL_ROOT)\$(prefix)/lib"
- ;;
- static)
- PHP_EMBED_TYPE=static
- INSTALL_IT="\$(mkinstalldirs) \$(INSTALL_ROOT)\$(prefix)/lib; \$(INSTALL) -m 0644 $SAPI_STATIC \$(INSTALL_ROOT)\$(prefix)/lib"
- ;;
- *)
- PHP_EMBED_TYPE=no
- ;;
- esac
-],[
- PHP_EMBED_TYPE=no
-])
-
-AC_MSG_RESULT($PHP_EMBED_TYPE)
-
-if test "$PHP_EMBED_TYPE" != "no"; then
- PHP_SELECT_SAPI(embed, $PHP_EMBED_TYPE, php_embed.c)
-fi
diff --git a/sapi/embed/config.w32 b/sapi/embed/config.w32
deleted file mode 100644
index 8ea0781ed3..0000000000
--- a/sapi/embed/config.w32
+++ /dev/null
@@ -1,8 +0,0 @@
-// vim:ft=javascript
-// $Id$
-
-ARG_ENABLE('embed', 'Embedded SAPI library', 'no');
-
-if (PHP_EMBED != "no") {
- SAPI('embed', 'php_embed.c', 'php' + PHP_VERSION + 'embed.lib');
-}
diff --git a/sapi/embed/php5embed.dsp b/sapi/embed/php5embed.dsp
deleted file mode 100644
index 8564b11797..0000000000
--- a/sapi/embed/php5embed.dsp
+++ /dev/null
@@ -1,100 +0,0 @@
-# Microsoft Developer Studio Project File - Name="php5embed" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Static Library" 0x0104
-
-CFG=php5embed - Win32 Debug_TS
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "php5embed.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "php5embed.mak" CFG="php5embed - Win32 Debug_TS"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "php5embed - Win32 Debug_TS" (based on "Win32 (x86) Static Library")
-!MESSAGE "php5embed - Win32 Release_TS" (based on "Win32 (x86) Static Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "php5embed - Win32 Debug_TS"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug_TS"
-# PROP BASE Intermediate_Dir "Debug_TS"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug_TS"
-# PROP Intermediate_Dir "Debug_TS"
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c
-# ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "..\.." /I "..\..\main" /I "..\..\Zend" /I "..\..\TSRM" /D "_DEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /D "ZTS" /D "ZEND_WIN32" /D "PHP_WIN32" /D ZEND_DEBUG=1 /YX /FD /GZ /c
-# ADD BASE RSC /l 0x406 /d "_DEBUG"
-# ADD RSC /l 0x406 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo
-# ADD LIB32 /nologo /out:"..\..\Debug_TS\php5embed.lib"
-
-!ELSEIF "$(CFG)" == "php5embed - Win32 Release_TS"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release_TS"
-# PROP BASE Intermediate_Dir "Release_TS"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release_TS"
-# PROP Intermediate_Dir "Release_TS"
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c
-# ADD CPP /nologo /MD /W3 /GX /O2 /I "..\.." /I "..\..\main" /I "..\..\Zend" /I "..\..\TSRM" /D "NDEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /D "ZTS" /D "ZEND_WIN32" /D "PHP_WIN32" /D ZEND_DEBUG=0 /YX /FD /c
-# ADD BASE RSC /l 0x406 /d "NDEBUG"
-# ADD RSC /l 0x406 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo
-# ADD LIB32 /nologo /out:"..\..\Release_TS\php5embed.lib"
-
-!ENDIF
-
-# Begin Target
-
-# Name "php5embed - Win32 Debug_TS"
-# Name "php5embed - Win32 Release_TS"
-# Begin Group "Source Files"
-
-# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
-# Begin Source File
-
-SOURCE=php_embed.c
-# End Source File
-# End Group
-# Begin Group "Header Files"
-
-# PROP Default_Filter "h;hpp;hxx;hm;inl"
-# Begin Source File
-
-SOURCE=php_embed.h
-# End Source File
-# End Group
-# End Target
-# End Project
diff --git a/sapi/embed/php_embed.c b/sapi/embed/php_embed.c
deleted file mode 100644
index 1d72ef9df9..0000000000
--- a/sapi/embed/php_embed.c
+++ /dev/null
@@ -1,225 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Edin Kadribasic <edink@php.net> |
- +----------------------------------------------------------------------+
-*/
-/* $Id$ */
-
-#include "php_embed.h"
-
-#ifdef PHP_WIN32
-#include <io.h>
-#include <fcntl.h>
-#endif
-
-static char* php_embed_read_cookies(TSRMLS_D)
-{
- return NULL;
-}
-
-static int php_embed_deactivate(TSRMLS_D)
-{
- fflush(stdout);
- return SUCCESS;
-}
-
-static inline size_t php_embed_single_write(const char *str, uint str_length)
-{
-#ifdef PHP_WRITE_STDOUT
- long ret;
-
- ret = write(STDOUT_FILENO, str, str_length);
- if (ret <= 0) return 0;
- return ret;
-#else
- size_t ret;
-
- ret = fwrite(str, 1, MIN(str_length, 16384), stdout);
- return ret;
-#endif
-}
-
-
-static int php_embed_ub_write(const char *str, uint str_length TSRMLS_DC)
-{
- const char *ptr = str;
- uint remaining = str_length;
- size_t ret;
-
- while (remaining > 0) {
- ret = php_embed_single_write(ptr, remaining);
- if (!ret) {
- php_handle_aborted_connection();
- }
- ptr += ret;
- remaining -= ret;
- }
-
- return str_length;
-}
-
-static void php_embed_flush(void *server_context)
-{
- if (fflush(stdout)==EOF) {
- php_handle_aborted_connection();
- }
-}
-
-static void php_embed_send_header(sapi_header_struct *sapi_header, void *server_context TSRMLS_DC)
-{
-}
-
-static void php_embed_log_message(char *message)
-{
- fprintf (stderr, "%s\n", message);
-}
-
-static void php_embed_register_variables(zval *track_vars_array TSRMLS_DC)
-{
- php_import_environment_variables(track_vars_array TSRMLS_CC);
-}
-
-static int php_embed_startup(sapi_module_struct *sapi_module)
-{
- if (php_module_startup(sapi_module, NULL, 0)==FAILURE) {
- return FAILURE;
- }
- return SUCCESS;
-}
-
-sapi_module_struct php_embed_module = {
- "embed", /* name */
- "PHP Embedded Library", /* pretty name */
-
- php_embed_startup, /* startup */
- php_module_shutdown_wrapper, /* shutdown */
-
- NULL, /* activate */
- php_embed_deactivate, /* deactivate */
-
- php_embed_ub_write, /* unbuffered write */
- php_embed_flush, /* flush */
- NULL, /* get uid */
- NULL, /* getenv */
-
- php_error, /* error handler */
-
- NULL, /* header handler */
- NULL, /* send headers handler */
- php_embed_send_header, /* send header handler */
-
- NULL, /* read POST data */
- php_embed_read_cookies, /* read Cookies */
-
- php_embed_register_variables, /* register server variables */
- php_embed_log_message, /* Log message */
-
- STANDARD_SAPI_MODULE_PROPERTIES
-};
-/* }}} */
-
-int php_embed_init(int argc, char **argv PTSRMLS_DC)
-{
- zend_llist global_vars;
-#ifdef ZTS
- zend_compiler_globals *compiler_globals;
- zend_executor_globals *executor_globals;
- php_core_globals *core_globals;
- sapi_globals_struct *sapi_globals;
- void ***tsrm_ls;
-#endif
-
-#ifdef HAVE_SIGNAL_H
-#if defined(SIGPIPE) && defined(SIG_IGN)
- signal(SIGPIPE, SIG_IGN); /* ignore SIGPIPE in standalone mode so
- that sockets created via fsockopen()
- don't kill PHP if the remote site
- closes it. in apache|apxs mode apache
- does that for us! thies@thieso.net
- 20000419 */
-#endif
-#endif
-
-#ifdef PHP_WIN32
- _fmode = _O_BINARY; /*sets default for file streams to binary */
- setmode(_fileno(stdin), O_BINARY); /* make the stdio mode be binary */
- setmode(_fileno(stdout), O_BINARY); /* make the stdio mode be binary */
- setmode(_fileno(stderr), O_BINARY); /* make the stdio mode be binary */
-#endif
-
-#ifdef ZTS
- tsrm_startup(1, 1, 0, NULL);
-#endif
-
-#ifdef ZTS
- compiler_globals = ts_resource(compiler_globals_id);
- executor_globals = ts_resource(executor_globals_id);
- core_globals = ts_resource(core_globals_id);
- sapi_globals = ts_resource(sapi_globals_id);
- tsrm_ls = ts_resource(0);
- *ptsrm_ls = tsrm_ls;
-#endif
-
- sapi_startup(&php_embed_module);
-
- if (php_embed_module.startup(&php_embed_module)==FAILURE) {
- return FAILURE;
- }
-
- if (argv) {
- php_embed_module.executable_location = argv[0];
- }
-
- zend_llist_init(&global_vars, sizeof(char *), NULL, 0);
-
- /* Set some Embedded PHP defaults */
- SG(options) |= SAPI_OPTION_NO_CHDIR;
- zend_alter_ini_entry("register_argc_argv", 19, "1", 1, PHP_INI_SYSTEM, PHP_INI_STAGE_ACTIVATE);
- zend_alter_ini_entry("html_errors", 12, "0", 1, PHP_INI_SYSTEM, PHP_INI_STAGE_ACTIVATE);
- zend_alter_ini_entry("implicit_flush", 15, "1", 1, PHP_INI_SYSTEM, PHP_INI_STAGE_ACTIVATE);
- zend_alter_ini_entry("max_execution_time", 19, "0", 1, PHP_INI_SYSTEM, PHP_INI_STAGE_ACTIVATE);
-
- SG(request_info).argc=argc;
- SG(request_info).argv=argv;
-
- if (php_request_startup(TSRMLS_C)==FAILURE) {
- php_module_shutdown(TSRMLS_C);
- return FAILURE;
- }
-
- SG(headers_sent) = 1;
- SG(request_info).no_headers = 1;
- php_register_variable("PHP_SELF", "-", NULL TSRMLS_CC);
-
- return SUCCESS;
-}
-
-void php_embed_shutdown(TSRMLS_D)
-{
- php_request_shutdown((void *) 0);
- php_module_shutdown(TSRMLS_C);
-#ifdef ZTS
- tsrm_shutdown();
-#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/sapi/embed/php_embed.h b/sapi/embed/php_embed.h
deleted file mode 100644
index d1c0b327b7..0000000000
--- a/sapi/embed/php_embed.h
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Edin Kadribasic <edink@php.net> |
- +----------------------------------------------------------------------+
-*/
-/* $Id$ */
-
-#ifndef _PHP_EMBED_H_
-#define _PHP_EMBED_H_
-
-#include <main/php.h>
-#include <main/SAPI.h>
-#include <main/php_main.h>
-#include <main/php_variables.h>
-#include <main/php_ini.h>
-#include <zend_ini.h>
-
-#ifdef ZTS
-#define PTSRMLS_D void ****ptsrm_ls
-#define PTSRMLS_DC , PTSRMLS_D
-#define PTSRMLS_C &tsrm_ls
-#define PTSRMLS_CC , PTSRMLS_C
-#else
-#define PTSRMLS_D
-#define PTSRMLS_DC
-#define PTSRMLS_C
-#define PTSRMLS_CC
-#endif
-
-#define PHP_EMBED_START_BLOCK(x,y) { \
- void ***tsrm_ls; \
- php_embed_init(x, y PTSRMLS_CC); \
- zend_first_try {
-
-#define PHP_EMBED_END_BLOCK() \
- } zend_catch { \
- /* int exit_status = EG(exit_status); */ \
- } zend_end_try(); \
- php_embed_shutdown(TSRMLS_C); \
-}
-
-BEGIN_EXTERN_C()
-int php_embed_init(int argc, char **argv PTSRMLS_DC);
-void php_embed_shutdown(TSRMLS_D);
-extern sapi_module_struct php_embed_module;
-END_EXTERN_C()
-
-
-#endif /* _PHP_EMBED_H_ */
diff --git a/sapi/isapi/CREDITS b/sapi/isapi/CREDITS
deleted file mode 100644
index 11c6fdc73c..0000000000
--- a/sapi/isapi/CREDITS
+++ /dev/null
@@ -1,2 +0,0 @@
-ISAPI
-Andi Gutmans, Zeev Suraski
diff --git a/sapi/isapi/config.m4 b/sapi/isapi/config.m4
deleted file mode 100644
index dbb80ee810..0000000000
--- a/sapi/isapi/config.m4
+++ /dev/null
@@ -1,27 +0,0 @@
-dnl
-dnl $Id$
-dnl
-
-RESULT=no
-AC_MSG_CHECKING(for Zeus ISAPI support)
-AC_ARG_WITH(isapi,
-[ --with-isapi[=DIR] Build PHP as an ISAPI module for use with Zeus.],
-[
- if test "$withval" = "yes"; then
- ZEUSPATH=/usr/local/zeus # the default
- else
- ZEUSPATH=$withval
- fi
- test -f "$ZEUSPATH/web/include/httpext.h" || AC_MSG_ERROR(Unable to find httpext.h in $ZEUSPATH/web/include)
- PHP_BUILD_THREAD_SAFE
- AC_DEFINE(WITH_ZEUS,1,[ ])
- PHP_ADD_INCLUDE($ZEUSPATH/web/include)
- PHP_SELECT_SAPI(isapi, shared, php5isapi.c)
- INSTALL_IT="\$(SHELL) \$(srcdir)/install-sh -m 0755 $SAPI_SHARED \$(INSTALL_ROOT)$ZEUSPATH/web/bin/"
- RESULT=yes
-])
-AC_MSG_RESULT($RESULT)
-
-dnl ## Local Variables:
-dnl ## tab-width: 4
-dnl ## End:
diff --git a/sapi/isapi/config.w32 b/sapi/isapi/config.w32
deleted file mode 100644
index 13d0e016eb..0000000000
--- a/sapi/isapi/config.w32
+++ /dev/null
@@ -1,13 +0,0 @@
-// vim:ft=javascript
-// $Id$
-
-ARG_ENABLE('isapi', 'Build ISAPI version of PHP', 'no');
-
-if (PHP_ISAPI == "yes") {
- if (PHP_ZTS == "no") {
- ERROR("ISAPI module requires an --enable-zts build of PHP");
- }
-
- SAPI('isapi', 'php5isapi.c', 'php' + PHP_VERSION + 'isapi.dll', '/D PHP5ISAPI_EXPORTS');
- ADD_FLAG('LDFLAGS_ISAPI', '/DEF:sapi\\isapi\\php5isapi.def');
-}
diff --git a/sapi/isapi/php.sym b/sapi/isapi/php.sym
deleted file mode 100644
index 34b50b851c..0000000000
--- a/sapi/isapi/php.sym
+++ /dev/null
@@ -1,5 +0,0 @@
-GetFilterVersion
-HttpFilterProc
-GetExtensionVersion
-HttpExtensionProc
-ZSLMain
diff --git a/sapi/isapi/php5isapi.c b/sapi/isapi/php5isapi.c
deleted file mode 100644
index 30b314dd74..0000000000
--- a/sapi/isapi/php5isapi.c
+++ /dev/null
@@ -1,952 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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. |
- +----------------------------------------------------------------------+
- | Authors: Zeev Suraski <zeev@zend.com> |
- | Ben Mansell <ben@zeus.com> (Zeus Support) |
- +----------------------------------------------------------------------+
- */
-
-#include "php.h"
-#include <httpext.h>
-#include <httpfilt.h>
-#include <httpext.h>
-#include "php_main.h"
-#include "SAPI.h"
-#include "php_globals.h"
-#include "ext/standard/info.h"
-#include "php_variables.h"
-#include "php_ini.h"
-
-#ifdef PHP_WIN32
-# include <process.h>
-#else
-# define __try
-# define __except(val)
-# define __declspec(foo)
-#endif
-
-
-#ifdef WITH_ZEUS
-# include "httpext.h"
-# include <errno.h>
-# define GetLastError() errno
-#endif
-
-#ifdef PHP_WIN32
-#define PHP_ENABLE_SEH
-#endif
-
-/*
-uncomment the following lines to turn off
-exception trapping when running under a debugger
-
-#ifdef _DEBUG
-#undef PHP_ENABLE_SEH
-#endif
-*/
-
-#define MAX_STATUS_LENGTH sizeof("xxxx LONGEST STATUS DESCRIPTION")
-#define ISAPI_SERVER_VAR_BUF_SIZE 1024
-#define ISAPI_POST_DATA_BUF 1024
-
-static zend_bool bFilterLoaded=0;
-static zend_bool bTerminateThreadsOnError=0;
-
-static char *isapi_special_server_variable_names[] = {
- "ALL_HTTP",
- "HTTPS",
-#ifndef WITH_ZEUS
- "SCRIPT_NAME",
-#endif
- NULL
-};
-
-#define NUM_SPECIAL_VARS (sizeof(isapi_special_server_variable_names)/sizeof(char *))
-#define SPECIAL_VAR_ALL_HTTP 0
-#define SPECIAL_VAR_HTTPS 1
-#define SPECIAL_VAR_PHP_SELF 2
-
-static char *isapi_server_variable_names[] = {
- "AUTH_PASSWORD",
- "AUTH_TYPE",
- "AUTH_USER",
- "CONTENT_LENGTH",
- "CONTENT_TYPE",
- "PATH_TRANSLATED",
- "QUERY_STRING",
- "REMOTE_ADDR",
- "REMOTE_HOST",
- "REMOTE_USER",
- "REQUEST_METHOD",
- "SERVER_NAME",
- "SERVER_PORT",
- "SERVER_PROTOCOL",
- "SERVER_SOFTWARE",
-#ifndef WITH_ZEUS
- "APPL_MD_PATH",
- "APPL_PHYSICAL_PATH",
- "INSTANCE_ID",
- "INSTANCE_META_PATH",
- "LOGON_USER",
- "REQUEST_URI",
- "URL",
-#else
- "DOCUMENT_ROOT",
-#endif
- NULL
-};
-
-
-static char *isapi_secure_server_variable_names[] = {
- "CERT_COOKIE",
- "CERT_FLAGS",
- "CERT_ISSUER",
- "CERT_KEYSIZE",
- "CERT_SECRETKEYSIZE",
- "CERT_SERIALNUMBER",
- "CERT_SERVER_ISSUER",
- "CERT_SERVER_SUBJECT",
- "CERT_SUBJECT",
- "HTTPS_KEYSIZE",
- "HTTPS_SECRETKEYSIZE",
- "HTTPS_SERVER_ISSUER",
- "HTTPS_SERVER_SUBJECT",
- "SERVER_PORT_SECURE",
-#ifdef WITH_ZEUS
- "SSL_CLIENT_CN",
- "SSL_CLIENT_EMAIL",
- "SSL_CLIENT_OU",
- "SSL_CLIENT_O",
- "SSL_CLIENT_L",
- "SSL_CLIENT_ST",
- "SSL_CLIENT_C",
- "SSL_CLIENT_I_CN",
- "SSL_CLIENT_I_EMAIL",
- "SSL_CLIENT_I_OU",
- "SSL_CLIENT_I_O",
- "SSL_CLIENT_I_L",
- "SSL_CLIENT_I_ST",
- "SSL_CLIENT_I_C",
-#endif
- NULL
-};
-
-
-static void php_info_isapi(ZEND_MODULE_INFO_FUNC_ARGS)
-{
- char **p;
- char variable_buf[ISAPI_SERVER_VAR_BUF_SIZE];
- DWORD variable_len;
- char **all_variables[] = {
- isapi_server_variable_names,
- isapi_special_server_variable_names,
- isapi_secure_server_variable_names,
- NULL
- };
- char ***server_variable_names;
- LPEXTENSION_CONTROL_BLOCK lpECB;
-
- lpECB = (LPEXTENSION_CONTROL_BLOCK) SG(server_context);
-
- php_info_print_table_start();
- php_info_print_table_header(2, "Server Variable", "Value");
- server_variable_names = all_variables;
- while (*server_variable_names) {
- p = *server_variable_names;
- while (*p) {
- variable_len = ISAPI_SERVER_VAR_BUF_SIZE;
- if (lpECB->GetServerVariable(lpECB->ConnID, *p, variable_buf, &variable_len)
- && variable_buf[0]) {
- php_info_print_table_row(2, *p, variable_buf);
- } else if (GetLastError() == ERROR_INSUFFICIENT_BUFFER) {
- char *tmp_variable_buf;
-
- tmp_variable_buf = (char *) emalloc(variable_len);
- if (lpECB->GetServerVariable(lpECB->ConnID, *p, tmp_variable_buf, &variable_len)
- && variable_buf[0]) {
- php_info_print_table_row(2, *p, tmp_variable_buf);
- }
- efree(tmp_variable_buf);
- }
- p++;
- }
- server_variable_names++;
- }
- php_info_print_table_end();
-}
-
-
-static zend_module_entry php_isapi_module = {
- STANDARD_MODULE_HEADER,
- "ISAPI",
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- php_info_isapi,
- NULL,
- STANDARD_MODULE_PROPERTIES
-};
-
-
-static int sapi_isapi_ub_write(const char *str, uint str_length TSRMLS_DC)
-{
- DWORD num_bytes = str_length;
- LPEXTENSION_CONTROL_BLOCK ecb;
-
- ecb = (LPEXTENSION_CONTROL_BLOCK) SG(server_context);
- if (ecb->WriteClient(ecb->ConnID, (char *) str, &num_bytes, HSE_IO_SYNC) == FALSE) {
- php_handle_aborted_connection();
- }
- return num_bytes;
-}
-
-
-static int sapi_isapi_header_handler(sapi_header_struct *sapi_header, sapi_headers_struct *sapi_headers TSRMLS_DC)
-{
- return SAPI_HEADER_ADD;
-}
-
-
-
-static void accumulate_header_length(sapi_header_struct *sapi_header, uint *total_length TSRMLS_DC)
-{
- *total_length += sapi_header->header_len+2;
-}
-
-
-static void concat_header(sapi_header_struct *sapi_header, char **combined_headers_ptr TSRMLS_DC)
-{
- memcpy(*combined_headers_ptr, sapi_header->header, sapi_header->header_len);
- *combined_headers_ptr += sapi_header->header_len;
- **combined_headers_ptr = '\r';
- (*combined_headers_ptr)++;
- **combined_headers_ptr = '\n';
- (*combined_headers_ptr)++;
-}
-
-
-static int sapi_isapi_send_headers(sapi_headers_struct *sapi_headers TSRMLS_DC)
-{
- uint total_length = 2; /* account for the trailing \r\n */
- char *combined_headers, *combined_headers_ptr;
- LPEXTENSION_CONTROL_BLOCK lpECB = (LPEXTENSION_CONTROL_BLOCK) SG(server_context);
- HSE_SEND_HEADER_EX_INFO header_info;
- char status_buf[MAX_STATUS_LENGTH];
- sapi_header_struct default_content_type;
-
- /* Obtain headers length */
- if (SG(sapi_headers).send_default_content_type) {
- sapi_get_default_content_type_header(&default_content_type TSRMLS_CC);
- accumulate_header_length(&default_content_type, (void *) &total_length TSRMLS_CC);
- }
- zend_llist_apply_with_argument(&SG(sapi_headers).headers, (llist_apply_with_arg_func_t) accumulate_header_length, (void *) &total_length TSRMLS_CC);
-
- /* Generate headers */
- combined_headers = (char *) emalloc(total_length+1);
- combined_headers_ptr = combined_headers;
- if (SG(sapi_headers).send_default_content_type) {
- concat_header(&default_content_type, (void *) &combined_headers_ptr TSRMLS_CC);
- sapi_free_header(&default_content_type); /* we no longer need it */
- }
- zend_llist_apply_with_argument(&SG(sapi_headers).headers, (llist_apply_with_arg_func_t) concat_header, (void *) &combined_headers_ptr TSRMLS_CC);
- *combined_headers_ptr++ = '\r';
- *combined_headers_ptr++ = '\n';
- *combined_headers_ptr = 0;
-
- switch (SG(sapi_headers).http_response_code) {
- case 200:
- header_info.pszStatus = "200 OK";
- break;
- case 302:
- header_info.pszStatus = "302 Moved Temporarily";
- break;
- case 401:
- header_info.pszStatus = "401 Authorization Required";
- break;
- default:
- snprintf(status_buf, MAX_STATUS_LENGTH, "%d Undescribed", SG(sapi_headers).http_response_code);
- header_info.pszStatus = status_buf;
- break;
- }
- header_info.cchStatus = strlen(header_info.pszStatus);
- header_info.pszHeader = combined_headers;
- header_info.cchHeader = total_length;
- header_info.fKeepConn = FALSE;
- lpECB->dwHttpStatusCode = SG(sapi_headers).http_response_code;
-
- lpECB->ServerSupportFunction(lpECB->ConnID, HSE_REQ_SEND_RESPONSE_HEADER_EX, &header_info, NULL, NULL);
-
- efree(combined_headers);
- return SAPI_HEADER_SENT_SUCCESSFULLY;
-}
-
-
-static int php_isapi_startup(sapi_module_struct *sapi_module)
-{
- if (php_module_startup(sapi_module, &php_isapi_module, 1)==FAILURE) {
- return FAILURE;
- } else {
- bTerminateThreadsOnError = (zend_bool) INI_INT("isapi.terminate_threads_on_error");
- return SUCCESS;
- }
-}
-
-
-
-static int sapi_isapi_read_post(char *buffer, uint count_bytes TSRMLS_DC)
-{
- LPEXTENSION_CONTROL_BLOCK lpECB = (LPEXTENSION_CONTROL_BLOCK) SG(server_context);
- DWORD read_from_buf=0;
- DWORD read_from_input=0;
- DWORD total_read=0;
-
- if ((DWORD) SG(read_post_bytes) < lpECB->cbAvailable) {
- read_from_buf = MIN(lpECB->cbAvailable-SG(read_post_bytes), count_bytes);
- memcpy(buffer, lpECB->lpbData+SG(read_post_bytes), read_from_buf);
- total_read += read_from_buf;
- }
- if (read_from_buf<count_bytes
- && (SG(read_post_bytes)+read_from_buf) < lpECB->cbTotalBytes) {
- DWORD cbRead=0, cbSize;
-
- read_from_input = MIN(count_bytes-read_from_buf, lpECB->cbTotalBytes-SG(read_post_bytes)-read_from_buf);
- while (cbRead < read_from_input) {
- cbSize = read_from_input - cbRead;
- if (!lpECB->ReadClient(lpECB->ConnID, buffer+read_from_buf+cbRead, &cbSize) || cbSize==0) {
- break;
- }
- cbRead += cbSize;
- }
- total_read += cbRead;
- }
- return total_read;
-}
-
-
-static char *sapi_isapi_read_cookies(TSRMLS_D)
-{
- LPEXTENSION_CONTROL_BLOCK lpECB = (LPEXTENSION_CONTROL_BLOCK) SG(server_context);
- char variable_buf[ISAPI_SERVER_VAR_BUF_SIZE];
- DWORD variable_len = ISAPI_SERVER_VAR_BUF_SIZE;
-
- if (lpECB->GetServerVariable(lpECB->ConnID, "HTTP_COOKIE", variable_buf, &variable_len)) {
- return estrndup(variable_buf, variable_len);
- } else if (GetLastError()==ERROR_INSUFFICIENT_BUFFER) {
- char *tmp_variable_buf = (char *) emalloc(variable_len+1);
-
- if (lpECB->GetServerVariable(lpECB->ConnID, "HTTP_COOKIE", tmp_variable_buf, &variable_len)) {
- tmp_variable_buf[variable_len] = 0;
- return tmp_variable_buf;
- } else {
- efree(tmp_variable_buf);
- }
- }
- return STR_EMPTY_ALLOC();
-}
-
-
-#ifdef WITH_ZEUS
-
-static void sapi_isapi_register_zeus_ssl_variables(LPEXTENSION_CONTROL_BLOCK lpECB, zval *track_vars_array TSRMLS_DC)
-{
- char static_variable_buf[ISAPI_SERVER_VAR_BUF_SIZE];
- DWORD variable_len = ISAPI_SERVER_VAR_BUF_SIZE;
- char static_cons_buf[ISAPI_SERVER_VAR_BUF_SIZE];
- /*
- * We need to construct the /C=.../ST=...
- * DN's for SSL_CLIENT_DN and SSL_CLIENT_I_DN
- */
- strcpy( static_cons_buf, "/C=" );
- if( lpECB->GetServerVariable( lpECB->ConnID, "SSL_CLIENT_C", static_variable_buf, &variable_len ) && static_variable_buf[0] ) {
- strcat( static_cons_buf, static_variable_buf );
- }
- strcat( static_cons_buf, "/ST=" );
- variable_len = ISAPI_SERVER_VAR_BUF_SIZE;
- if( lpECB->GetServerVariable( lpECB->ConnID, "SSL_CLIENT_ST", static_variable_buf, &variable_len ) && static_variable_buf[0] ) {
- strcat( static_cons_buf, static_variable_buf );
- }
- php_register_variable( "SSL_CLIENT_DN", static_cons_buf, track_vars_array TSRMLS_CC );
-
- strcpy( static_cons_buf, "/C=" );
- variable_len = ISAPI_SERVER_VAR_BUF_SIZE;
- if( lpECB->GetServerVariable( lpECB->ConnID, "SSL_CLIENT_I_C", static_variable_buf, &variable_len ) && static_variable_buf[0] ) {
- strcat( static_cons_buf, static_variable_buf );
- }
- strcat( static_cons_buf, "/ST=" );
- variable_len = ISAPI_SERVER_VAR_BUF_SIZE;
- if( lpECB->GetServerVariable( lpECB->ConnID, "SSL_CLIENT_I_ST", static_variable_buf, &variable_len ) && static_variable_buf[0] ) {
- strcat( static_cons_buf, static_variable_buf );
- }
- php_register_variable( "SSL_CLIENT_I_DN", static_cons_buf, track_vars_array TSRMLS_CC );
-}
-
-static void sapi_isapi_register_zeus_variables(LPEXTENSION_CONTROL_BLOCK lpECB, zval *track_vars_array TSRMLS_DC)
-{
- char static_variable_buf[ISAPI_SERVER_VAR_BUF_SIZE];
- DWORD variable_len = ISAPI_SERVER_VAR_BUF_SIZE;
- DWORD scriptname_len = ISAPI_SERVER_VAR_BUF_SIZE;
- DWORD pathinfo_len = 0;
- char *strtok_buf = NULL;
-
- /* Get SCRIPT_NAME, we use this to work out which bit of the URL
- * belongs in PHP's version of PATH_INFO
- */
- lpECB->GetServerVariable(lpECB->ConnID, "SCRIPT_NAME", static_variable_buf, &scriptname_len);
-
- /* Adjust Zeus' version of PATH_INFO, set PHP_SELF,
- * and generate REQUEST_URI
- */
- if ( lpECB->GetServerVariable(lpECB->ConnID, "PATH_INFO", static_variable_buf, &variable_len) && static_variable_buf[0] ) {
-
- /* PHP_SELF is just PATH_INFO */
- php_register_variable( "PHP_SELF", static_variable_buf, track_vars_array TSRMLS_CC );
-
- /* Chop off filename to get just the 'real' PATH_INFO' */
- pathinfo_len = variable_len - scriptname_len;
- php_register_variable( "PATH_INFO", static_variable_buf + scriptname_len - 1, track_vars_array TSRMLS_CC );
- /* append query string to give url... extra byte for '?' */
- if ( strlen(lpECB->lpszQueryString) + variable_len + 1 < ISAPI_SERVER_VAR_BUF_SIZE ) {
- /* append query string only if it is present... */
- if ( strlen(lpECB->lpszQueryString) ) {
- static_variable_buf[ variable_len - 1 ] = '?';
- strcpy( static_variable_buf + variable_len, lpECB->lpszQueryString );
- }
- php_register_variable( "URL", static_variable_buf, track_vars_array TSRMLS_CC );
- php_register_variable( "REQUEST_URI", static_variable_buf, track_vars_array TSRMLS_CC );
- }
- }
-
- /* Get and adjust PATH_TRANSLATED to what PHP wants */
- variable_len = ISAPI_SERVER_VAR_BUF_SIZE;
- if ( lpECB->GetServerVariable(lpECB->ConnID, "PATH_TRANSLATED", static_variable_buf, &variable_len) && static_variable_buf[0] ) {
- static_variable_buf[ variable_len - pathinfo_len - 1 ] = '\0';
- php_register_variable( "PATH_TRANSLATED", static_variable_buf, track_vars_array TSRMLS_CC );
- }
-
- /* Bring in the AUTHENTICATION stuff as needed */
- variable_len = ISAPI_SERVER_VAR_BUF_SIZE;
- if ( lpECB->GetServerVariable(lpECB->ConnID, "AUTH_USER", static_variable_buf, &variable_len) && static_variable_buf[0] ) {
- php_register_variable( "PHP_AUTH_USER", static_variable_buf, track_vars_array TSRMLS_CC );
- }
- variable_len = ISAPI_SERVER_VAR_BUF_SIZE;
- if ( lpECB->GetServerVariable(lpECB->ConnID, "AUTH_PASSWORD", static_variable_buf, &variable_len) && static_variable_buf[0] ) {
- php_register_variable( "PHP_AUTH_PW", static_variable_buf, track_vars_array TSRMLS_CC );
- }
- variable_len = ISAPI_SERVER_VAR_BUF_SIZE;
- if ( lpECB->GetServerVariable(lpECB->ConnID, "AUTH_TYPE", static_variable_buf, &variable_len) && static_variable_buf[0] ) {
- php_register_variable( "AUTH_TYPE", static_variable_buf, track_vars_array TSRMLS_CC );
- }
-
- /* And now, for the SSL variables (if applicable) */
- variable_len = ISAPI_SERVER_VAR_BUF_SIZE;
- if ( lpECB->GetServerVariable(lpECB->ConnID, "CERT_COOKIE", static_variable_buf, &variable_len) && static_variable_buf[0] ) {
- sapi_isapi_register_zeus_ssl_variables( lpECB, track_vars_array TSRMLS_CC );
- }
- /* Copy some of the variables we need to meet Apache specs */
- variable_len = ISAPI_SERVER_VAR_BUF_SIZE;
- if ( lpECB->GetServerVariable(lpECB->ConnID, "SERVER_SOFTWARE", static_variable_buf, &variable_len) && static_variable_buf[0] ) {
- php_register_variable( "SERVER_SIGNATURE", static_variable_buf, track_vars_array TSRMLS_CC );
- }
-}
-#else
-
-static void sapi_isapi_register_iis_variables(LPEXTENSION_CONTROL_BLOCK lpECB, zval *track_vars_array TSRMLS_DC)
-{
- char static_variable_buf[ISAPI_SERVER_VAR_BUF_SIZE];
- char path_info_buf[ISAPI_SERVER_VAR_BUF_SIZE];
- DWORD variable_len = ISAPI_SERVER_VAR_BUF_SIZE;
- DWORD scriptname_len = ISAPI_SERVER_VAR_BUF_SIZE;
- DWORD pathinfo_len = 0;
- HSE_URL_MAPEX_INFO humi;
-
- /* Get SCRIPT_NAME, we use this to work out which bit of the URL
- * belongs in PHP's version of PATH_INFO. SCRIPT_NAME also becomes PHP_SELF.
- */
- lpECB->GetServerVariable(lpECB->ConnID, "SCRIPT_NAME", static_variable_buf, &scriptname_len);
- php_register_variable("SCRIPT_FILENAME", SG(request_info).path_translated, track_vars_array TSRMLS_CC);
-
- /* Adjust IIS' version of PATH_INFO, set PHP_SELF,
- * and generate REQUEST_URI
- * Get and adjust PATH_TRANSLATED to what PHP wants
- */
- if ( lpECB->GetServerVariable(lpECB->ConnID, "PATH_INFO", static_variable_buf, &variable_len) && static_variable_buf[0] ) {
-
- /* Chop off filename to get just the 'real' PATH_INFO' */
- php_register_variable( "ORIG_PATH_INFO", static_variable_buf, track_vars_array TSRMLS_CC );
- pathinfo_len = variable_len - scriptname_len;
- strncpy(path_info_buf, static_variable_buf + scriptname_len - 1, sizeof(path_info_buf)-1);
- php_register_variable( "PATH_INFO", path_info_buf, track_vars_array TSRMLS_CC );
- /* append query string to give url... extra byte for '?' */
- if ( strlen(lpECB->lpszQueryString) + variable_len + 1 < ISAPI_SERVER_VAR_BUF_SIZE ) {
- /* append query string only if it is present... */
- if ( strlen(lpECB->lpszQueryString) ) {
- static_variable_buf[ variable_len - 1 ] = '?';
- strcpy( static_variable_buf + variable_len, lpECB->lpszQueryString );
- }
- php_register_variable( "URL", static_variable_buf, track_vars_array TSRMLS_CC );
- php_register_variable( "REQUEST_URI", static_variable_buf, track_vars_array TSRMLS_CC );
- }
- variable_len = ISAPI_SERVER_VAR_BUF_SIZE;
- if ( lpECB->GetServerVariable(lpECB->ConnID, "PATH_TRANSLATED", static_variable_buf, &variable_len) && static_variable_buf[0] ) {
- php_register_variable( "ORIG_PATH_TRANSLATED", static_variable_buf, track_vars_array TSRMLS_CC );
- }
- if (lpECB->ServerSupportFunction(lpECB->ConnID, HSE_REQ_MAP_URL_TO_PATH_EX, path_info_buf, &pathinfo_len, (LPDWORD) &humi)) {
- /* Remove trailing \ */
- if (humi.lpszPath[variable_len-2] == '\\') {
- humi.lpszPath[variable_len-2] = 0;
- }
- php_register_variable("PATH_TRANSLATED", humi.lpszPath, track_vars_array TSRMLS_CC);
- }
- }
-
- static_variable_buf[0] = '/';
- static_variable_buf[1] = 0;
- variable_len = 2;
- if (lpECB->ServerSupportFunction(lpECB->ConnID, HSE_REQ_MAP_URL_TO_PATH_EX, static_variable_buf, &variable_len, (LPDWORD) &humi)) {
- /* Remove trailing \ */
- if (humi.lpszPath[variable_len-2] == '\\') {
- humi.lpszPath[variable_len-2] = 0;
- }
- php_register_variable("DOCUMENT_ROOT", humi.lpszPath, track_vars_array TSRMLS_CC);
- }
-
- if (!SG(request_info).auth_user || !SG(request_info).auth_password ||
- !SG(request_info).auth_user[0] || !SG(request_info).auth_password[0]) {
- variable_len = ISAPI_SERVER_VAR_BUF_SIZE;
- if (lpECB->GetServerVariable(lpECB->ConnID, "HTTP_AUTHORIZATION", static_variable_buf, &variable_len)
- && static_variable_buf[0]) {
- php_handle_auth_data(static_variable_buf TSRMLS_CC);
- }
- }
-
- if (SG(request_info).auth_user) {
- php_register_variable("PHP_AUTH_USER", SG(request_info).auth_user, track_vars_array TSRMLS_CC );
- }
- if (SG(request_info).auth_password) {
- php_register_variable("PHP_AUTH_PW", SG(request_info).auth_password, track_vars_array TSRMLS_CC );
- }
-}
-#endif
-
-static void sapi_isapi_register_server_variables2(char **server_variables, LPEXTENSION_CONTROL_BLOCK lpECB, zval *track_vars_array, char **recorded_values TSRMLS_DC)
-{
- char **p=server_variables;
- DWORD variable_len;
- char static_variable_buf[ISAPI_SERVER_VAR_BUF_SIZE];
- char *variable_buf;
-
- while (*p) {
- variable_len = ISAPI_SERVER_VAR_BUF_SIZE;
- if (lpECB->GetServerVariable(lpECB->ConnID, *p, static_variable_buf, &variable_len)
- && static_variable_buf[0]) {
- php_register_variable(*p, static_variable_buf, track_vars_array TSRMLS_CC);
- if (recorded_values) {
- recorded_values[p-server_variables] = estrndup(static_variable_buf, variable_len);
- }
- } else if (GetLastError() == ERROR_INSUFFICIENT_BUFFER) {
- variable_buf = (char *) emalloc(variable_len+1);
- if (lpECB->GetServerVariable(lpECB->ConnID, *p, variable_buf, &variable_len)
- && variable_buf[0]) {
- php_register_variable(*p, variable_buf, track_vars_array TSRMLS_CC);
- }
- if (recorded_values) {
- recorded_values[p-server_variables] = variable_buf;
- } else {
- efree(variable_buf);
- }
- } else { /* for compatibility with Apache SAPIs */
- php_register_variable(*p, "", track_vars_array TSRMLS_CC);
- }
- p++;
- }
-}
-
-
-static void sapi_isapi_register_server_variables(zval *track_vars_array TSRMLS_DC)
-{
- DWORD variable_len = ISAPI_SERVER_VAR_BUF_SIZE;
- char *variable;
- char *strtok_buf = NULL;
- char *isapi_special_server_variables[NUM_SPECIAL_VARS];
- LPEXTENSION_CONTROL_BLOCK lpECB;
-
- lpECB = (LPEXTENSION_CONTROL_BLOCK) SG(server_context);
-
- /* Register the special ISAPI variables */
- memset(isapi_special_server_variables, 0, sizeof(isapi_special_server_variables));
- sapi_isapi_register_server_variables2(isapi_special_server_variable_names, lpECB, track_vars_array, isapi_special_server_variables TSRMLS_CC);
- if (SG(request_info).cookie_data) {
- php_register_variable("HTTP_COOKIE", SG(request_info).cookie_data, track_vars_array TSRMLS_CC);
- }
-
- /* Register the standard ISAPI variables */
- sapi_isapi_register_server_variables2(isapi_server_variable_names, lpECB, track_vars_array, NULL TSRMLS_CC);
-
- if (isapi_special_server_variables[SPECIAL_VAR_HTTPS]
- && (atoi(isapi_special_server_variables[SPECIAL_VAR_HTTPS])
- || !strcasecmp(isapi_special_server_variables[SPECIAL_VAR_HTTPS], "on"))
- ) {
- /* Register SSL ISAPI variables */
- sapi_isapi_register_server_variables2(isapi_secure_server_variable_names, lpECB, track_vars_array, NULL TSRMLS_CC);
- }
-
- if (isapi_special_server_variables[SPECIAL_VAR_HTTPS]) {
- efree(isapi_special_server_variables[SPECIAL_VAR_HTTPS]);
- }
-
-
-#ifdef WITH_ZEUS
- sapi_isapi_register_zeus_variables(lpECB, track_vars_array TSRMLS_CC);
-#else
- sapi_isapi_register_iis_variables(lpECB, track_vars_array TSRMLS_CC);
-#endif
-
- /* PHP_SELF support */
- if (isapi_special_server_variables[SPECIAL_VAR_PHP_SELF]) {
- php_register_variable("PHP_SELF", isapi_special_server_variables[SPECIAL_VAR_PHP_SELF], track_vars_array TSRMLS_CC);
- efree(isapi_special_server_variables[SPECIAL_VAR_PHP_SELF]);
- }
-
- if (isapi_special_server_variables[SPECIAL_VAR_ALL_HTTP]) {
- /* Register the internal bits of ALL_HTTP */
- variable = php_strtok_r(isapi_special_server_variables[SPECIAL_VAR_ALL_HTTP], "\r\n", &strtok_buf);
- while (variable) {
- char *colon = strchr(variable, ':');
-
- if (colon) {
- char *value = colon+1;
-
- while (*value==' ') {
- value++;
- }
- *colon = 0;
- php_register_variable(variable, value, track_vars_array TSRMLS_CC);
- *colon = ':';
- }
- variable = php_strtok_r(NULL, "\r\n", &strtok_buf);
- }
- efree(isapi_special_server_variables[SPECIAL_VAR_ALL_HTTP]);
- }
-}
-
-
-static sapi_module_struct isapi_sapi_module = {
- "isapi", /* name */
- "ISAPI", /* pretty name */
-
- php_isapi_startup, /* startup */
- php_module_shutdown_wrapper, /* shutdown */
-
- NULL, /* activate */
- NULL, /* deactivate */
-
- sapi_isapi_ub_write, /* unbuffered write */
- NULL, /* flush */
- NULL, /* get uid */
- NULL, /* getenv */
-
- php_error, /* error handler */
-
- sapi_isapi_header_handler, /* header handler */
- sapi_isapi_send_headers, /* send headers handler */
- NULL, /* send header handler */
-
- sapi_isapi_read_post, /* read POST data */
- sapi_isapi_read_cookies, /* read Cookies */
-
- sapi_isapi_register_server_variables, /* register server variables */
- NULL, /* Log message */
-
- STANDARD_SAPI_MODULE_PROPERTIES
-};
-
-
-BOOL WINAPI GetFilterVersion(PHTTP_FILTER_VERSION pFilterVersion)
-{
- bFilterLoaded = 1;
- pFilterVersion->dwFilterVersion = HTTP_FILTER_REVISION;
- strcpy(pFilterVersion->lpszFilterDesc, isapi_sapi_module.pretty_name);
- pFilterVersion->dwFlags= (SF_NOTIFY_AUTHENTICATION | SF_NOTIFY_PREPROC_HEADERS);
- return TRUE;
-}
-
-
-DWORD WINAPI HttpFilterProc(PHTTP_FILTER_CONTEXT pfc, DWORD notificationType, LPVOID pvNotification)
-{
- TSRMLS_FETCH();
-
- switch (notificationType) {
- case SF_NOTIFY_PREPROC_HEADERS:
- SG(request_info).auth_user = NULL;
- SG(request_info).auth_password = NULL;
- break;
- case SF_NOTIFY_AUTHENTICATION: {
- char *auth_user = ((HTTP_FILTER_AUTHENT *) pvNotification)->pszUser;
- char *auth_password = ((HTTP_FILTER_AUTHENT *) pvNotification)->pszPassword;
-
- if (auth_user && auth_user[0]) {
- SG(request_info).auth_user = estrdup(auth_user);
- }
- if (auth_password && auth_password[0]) {
- SG(request_info).auth_password = estrdup(auth_password);
- }
- return SF_STATUS_REQ_HANDLED_NOTIFICATION;
- }
- break;
- }
- return SF_STATUS_REQ_NEXT_NOTIFICATION;
-}
-
-
-static void init_request_info(LPEXTENSION_CONTROL_BLOCK lpECB TSRMLS_DC)
-{
- DWORD variable_len = ISAPI_SERVER_VAR_BUF_SIZE;
- char static_variable_buf[ISAPI_SERVER_VAR_BUF_SIZE];
-#ifndef WITH_ZEUS
- HSE_URL_MAPEX_INFO humi;
-#endif
-
- SG(request_info).request_method = lpECB->lpszMethod;
- SG(request_info).query_string = lpECB->lpszQueryString;
- SG(request_info).request_uri = lpECB->lpszPathInfo;
- SG(request_info).content_type = lpECB->lpszContentType;
- SG(request_info).content_length = lpECB->cbTotalBytes;
- SG(sapi_headers).http_response_code = 200; /* I think dwHttpStatusCode is invalid at this stage -RL */
- if (!bFilterLoaded) { /* we don't have valid ISAPI Filter information */
- SG(request_info).auth_user = SG(request_info).auth_password = NULL;
- }
-
-#ifdef WITH_ZEUS
- /* PATH_TRANSLATED can contain extra PATH_INFO stuff after the
- * file being loaded, so we must use SCRIPT_FILENAME instead
- */
- if(lpECB->GetServerVariable(lpECB->ConnID, "SCRIPT_FILENAME", static_variable_buf, &variable_len)) {
- SG(request_info).path_translated = estrdup(static_variable_buf);
- } else
-#else
- /* happily, IIS gives us SCRIPT_NAME which is correct (without PATH_INFO stuff)
- so we can just map that to the physical path and we have our filename */
-
- lpECB->GetServerVariable(lpECB->ConnID, "SCRIPT_NAME", static_variable_buf, &variable_len);
- if (lpECB->ServerSupportFunction(lpECB->ConnID, HSE_REQ_MAP_URL_TO_PATH_EX, static_variable_buf, &variable_len, (LPDWORD) &humi)) {
- SG(request_info).path_translated = estrdup(humi.lpszPath);
- } else
-#endif
- /* if mapping fails, default to what the server tells us */
- SG(request_info).path_translated = estrdup(lpECB->lpszPathTranslated);
-
- /* some server configurations allow '..' to slip through in the
- translated path. We'll just refuse to handle such a path. */
- if (strstr(SG(request_info).path_translated,"..")) {
- SG(sapi_headers).http_response_code = 404;
- efree(SG(request_info).path_translated);
- SG(request_info).path_translated = NULL;
- }
-}
-
-
-static void php_isapi_report_exception(char *message, int message_len TSRMLS_DC)
-{
- if (!SG(headers_sent)) {
- HSE_SEND_HEADER_EX_INFO header_info;
- LPEXTENSION_CONTROL_BLOCK lpECB = (LPEXTENSION_CONTROL_BLOCK) SG(server_context);
-
- header_info.pszStatus = "500 Internal Server Error";
- header_info.cchStatus = strlen(header_info.pszStatus);
- header_info.pszHeader = "Content-Type: text/html\r\n\r\n";
- header_info.cchHeader = strlen(header_info.pszHeader);
-
- lpECB->dwHttpStatusCode = 500;
- lpECB->ServerSupportFunction(lpECB->ConnID, HSE_REQ_SEND_RESPONSE_HEADER_EX, &header_info, NULL, NULL);
- SG(headers_sent)=1;
- }
- sapi_isapi_ub_write(message, message_len TSRMLS_CC);
-}
-
-
-BOOL WINAPI GetExtensionVersion(HSE_VERSION_INFO *pVer)
-{
- pVer->dwExtensionVersion = HSE_VERSION;
-#ifdef WITH_ZEUS
- strncpy( pVer->lpszExtensionDesc, isapi_sapi_module.name, HSE_MAX_EXT_DLL_NAME_LEN);
-#else
- lstrcpyn(pVer->lpszExtensionDesc, isapi_sapi_module.name, HSE_MAX_EXT_DLL_NAME_LEN);
-#endif
- return TRUE;
-}
-
-
-static void my_endthread()
-{
-#ifdef PHP_WIN32
- if (bTerminateThreadsOnError) {
- _endthread();
- }
-#endif
-}
-
-#ifdef PHP_WIN32
-/* ep is accessible only in the context of the __except expression,
- * so we have to call this function to obtain it.
- */
-BOOL exceptionhandler(LPEXCEPTION_POINTERS *e, LPEXCEPTION_POINTERS ep)
-{
- *e=ep;
- return TRUE;
-}
-#endif
-
-DWORD WINAPI HttpExtensionProc(LPEXTENSION_CONTROL_BLOCK lpECB)
-{
- zend_file_handle file_handle;
- zend_bool stack_overflown=0;
- int retval = FAILURE;
-#ifdef PHP_ENABLE_SEH
- LPEXCEPTION_POINTERS e;
-#endif
- TSRMLS_FETCH();
-
- zend_first_try {
-#ifdef PHP_ENABLE_SEH
- __try {
-#endif
- init_request_info(lpECB TSRMLS_CC);
- SG(server_context) = lpECB;
-
- php_request_startup(TSRMLS_C);
-
- file_handle.filename = SG(request_info).path_translated;
- file_handle.free_filename = 0;
- file_handle.type = ZEND_HANDLE_FILENAME;
- file_handle.opened_path = NULL;
-
- /* open the script here so we can 404 if it fails */
- if (file_handle.filename)
- retval = php_fopen_primary_script(&file_handle TSRMLS_CC);
-
- if (!file_handle.filename || retval == FAILURE) {
- SG(sapi_headers).http_response_code = 404;
- PUTS("No input file specified.\n");
- } else {
- php_execute_script(&file_handle TSRMLS_CC);
- }
-
- if (SG(request_info).cookie_data) {
- efree(SG(request_info).cookie_data);
- }
- if (SG(request_info).path_translated)
- efree(SG(request_info).path_translated);
-#ifdef PHP_ENABLE_SEH
- } __except(exceptionhandler(&e, GetExceptionInformation())) {
- char buf[1024];
- if (_exception_code()==EXCEPTION_STACK_OVERFLOW) {
- LPBYTE lpPage;
- static SYSTEM_INFO si;
- static MEMORY_BASIC_INFORMATION mi;
- static DWORD dwOldProtect;
-
- GetSystemInfo(&si);
-
- /* Get page ESP is pointing to */
- _asm mov lpPage, esp;
-
- /* Get stack allocation base */
- VirtualQuery(lpPage, &mi, sizeof(mi));
-
- /* Go to the page below the current page */
- lpPage = (LPBYTE) (mi.BaseAddress) - si.dwPageSize;
-
- /* Free pages below current page */
- if (!VirtualFree(mi.AllocationBase, (LPBYTE)lpPage - (LPBYTE) mi.AllocationBase, MEM_DECOMMIT)) {
- _endthread();
- }
-
- /* Restore the guard page */
- if (!VirtualProtect(lpPage, si.dwPageSize, PAGE_GUARD | PAGE_READWRITE, &dwOldProtect)) {
- _endthread();
- }
-
- CG(unclean_shutdown)=1;
- _snprintf(buf, sizeof(buf)-1,"PHP has encountered a Stack overflow");
- php_isapi_report_exception(buf, strlen(buf) TSRMLS_CC);
- } else if (_exception_code()==EXCEPTION_ACCESS_VIOLATION) {
- _snprintf(buf, sizeof(buf)-1,"PHP has encountered an Access Violation at %p", e->ExceptionRecord->ExceptionAddress);
- php_isapi_report_exception(buf, strlen(buf) TSRMLS_CC);
- my_endthread();
- } else {
- _snprintf(buf, sizeof(buf)-1,"PHP has encountered an Unhandled Exception Code %d at %p", e->ExceptionRecord->ExceptionCode , e->ExceptionRecord->ExceptionAddress);
- php_isapi_report_exception(buf, strlen(buf) TSRMLS_CC);
- my_endthread();
- }
- }
-#endif
-#ifdef PHP_ENABLE_SEH
- __try {
- php_request_shutdown(NULL);
- } __except(EXCEPTION_EXECUTE_HANDLER) {
- my_endthread();
- }
-#else
- php_request_shutdown(NULL);
-#endif
- } zend_catch {
- zend_try {
- php_request_shutdown(NULL);
- } zend_end_try();
- return HSE_STATUS_ERROR;
- } zend_end_try();
-
- return HSE_STATUS_SUCCESS;
-}
-
-
-
-__declspec(dllexport) BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
-{
- switch (fdwReason) {
- case DLL_PROCESS_ATTACH:
-#ifdef WITH_ZEUS
- tsrm_startup(128, 1, TSRM_ERROR_LEVEL_CORE, "TSRM.log");
-#else
- tsrm_startup(128, 1, TSRM_ERROR_LEVEL_CORE, "C:\\TSRM.log");
-#endif
- sapi_startup(&isapi_sapi_module);
- if (isapi_sapi_module.startup) {
- isapi_sapi_module.startup(&sapi_module);
- }
- break;
- case DLL_THREAD_ATTACH:
- break;
- case DLL_THREAD_DETACH:
- ts_free_thread();
- break;
- case DLL_PROCESS_DETACH:
- if (isapi_sapi_module.shutdown) {
- isapi_sapi_module.shutdown(&sapi_module);
- }
- sapi_shutdown();
- tsrm_shutdown();
- break;
- }
- return TRUE;
-}
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- */
diff --git a/sapi/isapi/php5isapi.def b/sapi/isapi/php5isapi.def
deleted file mode 100644
index 596023ef55..0000000000
--- a/sapi/isapi/php5isapi.def
+++ /dev/null
@@ -1,5 +0,0 @@
-EXPORTS
-HttpFilterProc
-GetFilterVersion
-HttpExtensionProc
-GetExtensionVersion
diff --git a/sapi/isapi/php5isapi.dsp b/sapi/isapi/php5isapi.dsp
deleted file mode 100644
index 3dbab11eff..0000000000
--- a/sapi/isapi/php5isapi.dsp
+++ /dev/null
@@ -1,165 +0,0 @@
-# Microsoft Developer Studio Project File - Name="php5isapi" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=php5isapi - Win32 Debug_TS
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "php5isapi.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "php5isapi.mak" CFG="php5isapi - Win32 Debug_TS"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "php5isapi - Win32 Debug_TS" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "php5isapi - Win32 Release_TS" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "php5isapi - Win32 Release_TS_inline" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "php5isapi - Win32 Release_TSDbg" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "php5isapi - Win32 Debug_TS"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug_TS"
-# PROP BASE Intermediate_Dir "Debug_TS"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "..\..\Debug_TS"
-# PROP Intermediate_Dir "Debug_TS"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "PHP5ISAPI_EXPORTS" /YX /FD /GZ /c
-# ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "..\..\win32" /I "..\..\Zend" /I "..\.." /I "..\..\main" /I "..\..\TSRM" /D "_DEBUG" /D "COMPILE_LIBZEND" /D ZEND_DEBUG=1 /D "_WINDOWS" /D "_USRDLL" /D "PHP5ISAPI_EXPORTS" /D "MSVC5" /D "ZTS" /D "ZEND_WIN32" /D "PHP_WIN32" /D "WIN32" /D "_MBCS" /FR /YX /FD /GZ /c
-# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x40d /d "_DEBUG"
-# ADD RSC /l 0x40d /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 wsock32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib php5ts_debug.lib /nologo /version:4.0 /dll /debug /machine:I386 /nodefaultlib:"libcmt" /pdbtype:sept /libpath:"..\..\Debug_TS"
-
-!ELSEIF "$(CFG)" == "php5isapi - Win32 Release_TS"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release_TS"
-# PROP BASE Intermediate_Dir "Release_TS"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "..\..\Release_TS"
-# PROP Intermediate_Dir "Release_TS"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "PHP5ISAPI_EXPORTS" /YX /FD /c
-# ADD CPP /nologo /MD /W3 /GX /O2 /I "...\..\include" /I "..\..\win32" /I "..\..\Zend" /I "..\.." /I "..\..\main" /I "..\..\TSRM" /D "NDEBUG" /D ZEND_DEBUG=0 /D "_WINDOWS" /D "_USRDLL" /D "PHP5ISAPI_EXPORTS" /D "MSVC5" /D "ZTS" /D "ZEND_WIN32" /D "PHP_WIN32" /D "WIN32" /D "_MBCS" /FR /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x40d /d "NDEBUG"
-# ADD RSC /l 0x40d /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386
-# ADD LINK32 kernel32.lib user32.lib gdi32.lib wsock32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib php5ts.lib /nologo /version:4.0 /dll /machine:I386 /libpath:"..\..\Release_TS"
-
-!ELSEIF "$(CFG)" == "php5isapi - Win32 Release_TS_inline"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "php5isapi___Win32_Release_TS_inline"
-# PROP BASE Intermediate_Dir "php5isapi___Win32_Release_TS_inline"
-# PROP BASE Ignore_Export_Lib 0
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "..\..\Release_TS_inline"
-# PROP Intermediate_Dir "Release_TS_inline"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MD /W3 /GX /O2 /I "...\..\include" /I "..\..\win32" /I "..\..\Zend" /I "..\.." /D "NDEBUG" /D "_WINDOWS" /D "_USRDLL" /D "PHP5ISAPI_EXPORTS" /D "MSVC5" /D "ZTS" /D "WIN32" /D "_MBCS" /D ZEND_DEBUG=0 /FR /YX /FD /c
-# ADD CPP /nologo /MD /W3 /GX /O2 /I "...\..\include" /I "..\..\win32" /I "..\..\Zend" /I "..\.." /I "..\..\main" /I "..\..\TSRM" /D "NDEBUG" /D ZEND_DEBUG=0 /D "ZEND_WIN32_FORCE_INLINE" /D "_WINDOWS" /D "_USRDLL" /D "PHP5ISAPI_EXPORTS" /D "MSVC5" /D "ZTS" /D "ZEND_WIN32" /D "PHP_WIN32" /D "WIN32" /D "_MBCS" /FR /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x40d /d "NDEBUG"
-# ADD RSC /l 0x40d /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib wsock32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib php5ts.lib /nologo /dll /machine:I386 /libpath:"..\..\Release_TS"
-# ADD LINK32 kernel32.lib user32.lib gdi32.lib wsock32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib php5ts.lib /nologo /version:4.0 /dll /machine:I386 /libpath:"..\..\Release_TS_inline"
-
-!ELSEIF "$(CFG)" == "php5isapi - Win32 Release_TSDbg"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "php5isapi___Win32_Release_TSDbg"
-# PROP BASE Intermediate_Dir "php5isapi___Win32_Release_TSDbg"
-# PROP BASE Ignore_Export_Lib 0
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "..\..\Release_TSDbg"
-# PROP Intermediate_Dir "Release_TSDbg"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MD /W3 /GX /O2 /I "...\..\include" /I "..\..\win32" /I "..\..\Zend" /I "..\.." /I "..\..\main" /I "..\..\TSRM" /D "NDEBUG" /D ZEND_DEBUG=0 /D "_WINDOWS" /D "_USRDLL" /D "PHP5ISAPI_EXPORTS" /D "MSVC5" /D "ZTS" /D "ZEND_WIN32" /D "PHP_WIN32" /D "WIN32" /D "_MBCS" /FR /YX /FD /c
-# ADD CPP /nologo /MD /W3 /GX /Zi /Od /I "...\..\include" /I "..\..\win32" /I "..\..\Zend" /I "..\.." /I "..\..\main" /I "..\..\TSRM" /D "NDEBUG" /D ZEND_DEBUG=0 /D "_WINDOWS" /D "_USRDLL" /D "PHP5ISAPI_EXPORTS" /D "MSVC5" /D "ZTS" /D "ZEND_WIN32" /D "PHP_WIN32" /D "WIN32" /D "_MBCS" /FR /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x40d /d "NDEBUG"
-# ADD RSC /l 0x40d /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib wsock32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib php5ts.lib /nologo /version:4.0 /dll /machine:I386 /libpath:"..\..\Release_TS"
-# ADD LINK32 kernel32.lib user32.lib gdi32.lib wsock32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib php5ts.lib /nologo /version:4.0 /dll /debug /machine:I386 /libpath:"..\..\Release_TSDbg"
-
-!ENDIF
-
-# Begin Target
-
-# Name "php5isapi - Win32 Debug_TS"
-# Name "php5isapi - Win32 Release_TS"
-# Name "php5isapi - Win32 Release_TS_inline"
-# Name "php5isapi - Win32 Release_TSDbg"
-# Begin Group "Source Files"
-
-# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
-# Begin Source File
-
-SOURCE=.\php5isapi.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\php5isapi.def
-# End Source File
-# End Group
-# Begin Group "Header Files"
-
-# PROP Default_Filter "h;hpp;hxx;hm;inl"
-# End Group
-# End Target
-# End Project
diff --git a/sapi/isapi/stresstest/getopt.c b/sapi/isapi/stresstest/getopt.c
deleted file mode 100644
index 57faa0f890..0000000000
--- a/sapi/isapi/stresstest/getopt.c
+++ /dev/null
@@ -1,175 +0,0 @@
-/* Borrowed from Apache NT Port */
-
-#include <stdio.h>
-#include <string.h>
-#include <assert.h>
-#include <stdlib.h>
-#include "getopt.h"
-#define OPTERRCOLON (1)
-#define OPTERRNF (2)
-#define OPTERRARG (3)
-
-
-char *ap_optarg;
-int ap_optind = 1;
-static int ap_opterr = 1;
-static int ap_optopt;
-
-static int
-ap_optiserr(int argc, char * const *argv, int oint, const char *optstr,
- int optchr, int err)
-{
- if (ap_opterr)
- {
- fprintf(stderr, "Error in argument %d, char %d: ", oint, optchr+1);
- switch(err)
- {
- case OPTERRCOLON:
- fprintf(stderr, ": in flags\n");
- break;
- case OPTERRNF:
- fprintf(stderr, "option not found %c\n", argv[oint][optchr]);
- break;
- case OPTERRARG:
- fprintf(stderr, "no argument for option %c\n", argv[oint][optchr]);
- break;
- default:
- fprintf(stderr, "unknown\n");
- break;
- }
- }
- ap_optopt = argv[oint][optchr];
- return('?');
-}
-
-int ap_getopt(int argc, char* const *argv, const char *optstr)
-{
- static int optchr = 0;
- static int dash = 0; /* have already seen the - */
-
- char *cp;
-
- if (ap_optind >= argc)
- return(EOF);
- if (!dash && (argv[ap_optind][0] != '-'))
- return(EOF);
- if (!dash && (argv[ap_optind][0] == '-') && !argv[ap_optind][1])
- {
- /*
- * use to specify stdin. Need to let pgm process this and
- * the following args
- */
- return(EOF);
- }
- if ((argv[ap_optind][0] == '-') && (argv[ap_optind][1] == '-'))
- {
- /* -- indicates end of args */
- ap_optind++;
- return(EOF);
- }
- if (!dash)
- {
- assert((argv[ap_optind][0] == '-') && argv[ap_optind][1]);
- dash = 1;
- optchr = 1;
- }
-
- /* Check if the guy tries to do a -: kind of flag */
- assert(dash);
- if (argv[ap_optind][optchr] == ':')
- {
- dash = 0;
- ap_optind++;
- return(ap_optiserr(argc, argv, ap_optind-1, optstr, optchr, OPTERRCOLON));
- }
- if (!(cp = strchr(optstr, argv[ap_optind][optchr])))
- {
- int errind = ap_optind;
- int errchr = optchr;
-
- if (!argv[ap_optind][optchr+1])
- {
- dash = 0;
- ap_optind++;
- }
- else
- optchr++;
- return(ap_optiserr(argc, argv, errind, optstr, errchr, OPTERRNF));
- }
- if (cp[1] == ':')
- {
- /* Check for cases where the value of the argument
- is in the form -<arg> <val> or in the form -<arg><val> */
- dash = 0;
- if(!argv[ap_optind][2]) {
- ap_optind++;
- if (ap_optind == argc)
- return(ap_optiserr(argc, argv, ap_optind-1, optstr, optchr, OPTERRARG));
- ap_optarg = argv[ap_optind++];
- }
- else
- {
- ap_optarg = &argv[ap_optind][2];
- ap_optind++;
- }
- return(*cp);
- }
- else
- {
- if (!argv[ap_optind][optchr+1])
- {
- dash = 0;
- ap_optind++;
- }
- else
- optchr++;
- return(*cp);
- }
- assert(0);
- return(0);
-}
-
-#ifdef TESTGETOPT
-int
- main (int argc, char **argv)
- {
- int c;
- extern char *ap_optarg;
- extern int ap_optind;
- int aflg = 0;
- int bflg = 0;
- int errflg = 0;
- char *ofile = NULL;
-
- while ((c = ap_getopt(argc, argv, "abo:")) != EOF)
- switch (c) {
- case 'a':
- if (bflg)
- errflg++;
- else
- aflg++;
- break;
- case 'b':
- if (aflg)
- errflg++;
- else
- bflg++;
- break;
- case 'o':
- ofile = ap_optarg;
- (void)printf("ofile = %s\n", ofile);
- break;
- case '?':
- errflg++;
- }
- if (errflg) {
- (void)fprintf(stderr,
- "usage: cmd [-a|-b] [-o <filename>] files...\n");
- exit (2);
- }
- for ( ; ap_optind < argc; ap_optind++)
- (void)printf("%s\n", argv[ap_optind]);
- return 0;
- }
-
-#endif /* TESTGETOPT */
diff --git a/sapi/isapi/stresstest/getopt.h b/sapi/isapi/stresstest/getopt.h
deleted file mode 100644
index a3e278e3a6..0000000000
--- a/sapi/isapi/stresstest/getopt.h
+++ /dev/null
@@ -1,12 +0,0 @@
-/* Borrowed from Apache NT Port */
-#ifdef __cplusplus
-extern "C" {
-#endif
-extern char *ap_optarg;
-extern int ap_optind;
-
-int ap_getopt(int argc, char* const *argv, const char *optstr);
-
-#ifdef __cplusplus
-}
-#endif \ No newline at end of file
diff --git a/sapi/isapi/stresstest/notes.txt b/sapi/isapi/stresstest/notes.txt
deleted file mode 100644
index f58ab3c0e9..0000000000
--- a/sapi/isapi/stresstest/notes.txt
+++ /dev/null
@@ -1,56 +0,0 @@
-This stress test program is for debugging threading issues with the ISAPI
-module.
-
-2 ways to use it:
-
-1: test any php script file on multiple threads
-2: run the php test scripts bundled with the source code
-
-
-
-GLOBAL SETTINGS
-===============
-
-If you need to set special environement variables, in addition to your
-regular environment, create a file that contains them, one setting per line:
-
-MY_ENV_VAR=XXXXXXXX
-
-This can be used to simulate ISAPI environment variables if need be.
-
-By default, stress test uses 10 threads. To change this, change the define
-NUM_THREADS in stresstest.cpp.
-
-
-
-1: Test any php script file on multiple threads
-===============================================
-
-Create a file that contains a list of php script files, one per line. If
-you need to provide input, place the GET data, or Query String, after the
-filename. File contents would look like:
-
-e:\inetpub\pages\index.php
-e:\inetpub\pages\info.php
-e:\inetpub\pages\test.php a=1&b=2
-
-Run: stresstest L files.txt
-
-
-
-2: Run the php test scripts bundled with the source code
-========================================================
-
-supply the path to the parent of the "tests" directory (expect a couple
-long pauses for a couple of the larger tests)
-
-Run: stresstest T c:\php5-source
-
-
-
-TODO:
-
-* Make more options configurable: number of threads, iterations, etc.
-* Improve stdout output to make it more useful
-* Implement support for SKIPIF
-* Improve speed of CompareFile function (too slow on big files).
diff --git a/sapi/isapi/stresstest/stresstest.cpp b/sapi/isapi/stresstest/stresstest.cpp
deleted file mode 100644
index c7e634c152..0000000000
--- a/sapi/isapi/stresstest/stresstest.cpp
+++ /dev/null
@@ -1,936 +0,0 @@
-/*
- * ======================================================================= *
- * File: stress .c *
- * stress tester for isapi dll's *
- * based on cgiwrap *
- * ======================================================================= *
- *
-*/
-#define WIN32_LEAN_AND_MEAN
-#include <afx.h>
-#include <afxtempl.h>
-#include <winbase.h>
-#include <winerror.h>
-#include <httpext.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include "getopt.h"
-
-// These are things that go out in the Response Header
-//
-#define HTTP_VER "HTTP/1.0"
-#define SERVER_VERSION "Http-Srv-Beta2/1.0"
-
-//
-// Simple wrappers for the heap APIS
-//
-#define xmalloc(s) HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, (s))
-#define xfree(s) HeapFree(GetProcessHeap(), 0, (s))
-
-//
-// The mandatory exports from the ISAPI DLL
-//
-DWORD numThreads = 1;
-DWORD iterations = 1;
-
-HANDLE StartNow;
-// quick and dirty environment
-typedef CMapStringToString TEnvironment;
-TEnvironment IsapiEnvironment;
-
-typedef struct _TResults {
- LONG ok;
- LONG bad;
-} TResults;
-
-CStringArray IsapiFileList; // list of filenames
-CStringArray TestNames; // --TEST--
-CStringArray IsapiGetData; // --GET--
-CStringArray IsapiPostData; // --POST--
-CStringArray IsapiMatchData; // --EXPECT--
-CArray<TResults, TResults> Results;
-
-typedef struct _TIsapiContext {
- HANDLE in;
- HANDLE out;
- DWORD tid;
- TEnvironment env;
- HANDLE waitEvent;
-} TIsapiContext;
-
-//
-// Prototypes of the functions this sample implements
-//
-extern "C" {
-HINSTANCE hDll;
-typedef BOOL (WINAPI *VersionProc)(HSE_VERSION_INFO *) ;
-typedef DWORD (WINAPI *HttpExtProc)(EXTENSION_CONTROL_BLOCK *);
-typedef BOOL (WINAPI *TerminateProc) (DWORD);
-BOOL WINAPI FillExtensionControlBlock(EXTENSION_CONTROL_BLOCK *, TIsapiContext *) ;
-BOOL WINAPI GetServerVariable(HCONN, LPSTR, LPVOID, LPDWORD );
-BOOL WINAPI ReadClient(HCONN, LPVOID, LPDWORD);
-BOOL WINAPI WriteClient(HCONN, LPVOID, LPDWORD, DWORD);
-BOOL WINAPI ServerSupportFunction(HCONN, DWORD, LPVOID, LPDWORD, LPDWORD);
-VersionProc IsapiGetExtensionVersion;
-HttpExtProc IsapiHttpExtensionProc;
-TerminateProc TerminateExtensionProc;
-HSE_VERSION_INFO version_info;
-}
-
-char * MakeDateStr(VOID);
-char * GetEnv(char *);
-
-
-
-
-DWORD CALLBACK IsapiThread(void *);
-int stress_main(const char *filename,
- const char *arg,
- const char *postfile,
- const char *matchdata);
-
-
-
-BOOL bUseTestFiles = FALSE;
-char temppath[MAX_PATH];
-
-void stripcrlf(char *line)
-{
- DWORD l = strlen(line)-1;
- if (line[l]==10 || line[l]==13) line[l]=0;
- l = strlen(line)-1;
- if (line[l]==10 || line[l]==13) line[l]=0;
-}
-
-#define COMPARE_BUF_SIZE 1024
-
-BOOL CompareFiles(const char*f1, const char*f2)
-{
- FILE *fp1, *fp2;
- bool retval;
- char buf1[COMPARE_BUF_SIZE], buf2[COMPARE_BUF_SIZE];
- int length1, length2;
-
- if ((fp1=fopen(f1, "r"))==NULL) {
- return FALSE;
- }
-
- if ((fp2=fopen(f2, "r"))==NULL) {
- fclose(fp1);
- return FALSE;
- }
-
- retval = TRUE; // success oriented
- while (true) {
- length1 = fread(buf1, 1, sizeof(buf1), fp1);
- length2 = fread(buf2, 1, sizeof(buf2), fp2);
-
- // check for end of file
- if (feof(fp1)) {
- if (!feof(fp2)) {
- retval = FALSE;
- }
- break;
- } else if (feof(fp2)) {
- if (!feof(fp1)) {
- retval = FALSE;
- }
- break;
- }
-
- // compare data
- if (length1!=length2
- || memcmp(buf1, buf2, length1)!=0) {
- retval = FALSE;
- break;
- }
- }
- fclose(fp1);
- fclose(fp2);
-
- return retval;
-}
-
-
-BOOL CompareStringWithFile(const char *filename, const char *str, unsigned int str_length)
-{
- FILE *fp;
- bool retval;
- char buf[COMPARE_BUF_SIZE];
- unsigned int offset=0, readbytes;
- fprintf(stderr, "test %s\n",filename);
- if ((fp=fopen(filename, "rb"))==NULL) {
- fprintf(stderr, "Error opening %s\n",filename);
- return FALSE;
- }
-
- retval = TRUE; // success oriented
- while (true) {
- readbytes = fread(buf, 1, sizeof(buf), fp);
-
- // check for end of file
-
- if (offset+readbytes > str_length
- || memcmp(buf, str+offset, readbytes)!=NULL) {
- fprintf(stderr, "File missmatch %s\n",filename);
- retval = FALSE;
- break;
- }
- if (feof(fp)) {
- if (!retval) fprintf(stderr, "File zero length %s\n",filename);
- break;
- }
- }
- fclose(fp);
-
- return retval;
-}
-
-
-BOOL ReadGlobalEnvironment(const char *environment)
-{
- if (environment) {
- FILE *fp = fopen(environment, "r");
- DWORD i=0;
- if (fp) {
- char line[2048];
- while (fgets(line, sizeof(line)-1, fp)) {
- // file.php arg1 arg2 etc.
- char *p = strchr(line, '=');
- if (p) {
- *p=0;
- IsapiEnvironment[line]=p+1;
- }
- }
- fclose(fp);
- return IsapiEnvironment.GetCount() > 0;
- }
- }
- return FALSE;
-}
-
-BOOL ReadFileList(const char *filelist)
-{
- FILE *fp = fopen(filelist, "r");
- if (!fp) {
- printf("Unable to open %s\r\n", filelist);
- }
- char line[2048];
- int i=0;
- while (fgets(line, sizeof(line)-1, fp)) {
- // file.php arg1 arg2 etc.
- stripcrlf(line);
- if (strlen(line)>3) {
- char *p = strchr(line, ' ');
- if (p) {
- *p = 0;
- // get file
-
- IsapiFileList.Add(line);
- IsapiGetData.Add(p+1);
- } else {
- // just a filename is all
- IsapiFileList.Add(line);
- IsapiGetData.Add("");
- }
- }
-
- // future use
- IsapiPostData.Add("");
- IsapiMatchData.Add("");
- TestNames.Add("");
-
- i++;
- }
- Results.SetSize(TestNames.GetSize());
-
- fclose(fp);
- return IsapiFileList.GetSize() > 0;
-}
-
-void DoThreads() {
-
- if (IsapiFileList.GetSize() == 0) {
- printf("No Files to test\n");
- return;
- }
-
- printf("Starting Threads...\n");
- // loop creating threads
- DWORD tid;
- HANDLE *threads = new HANDLE[numThreads];
- DWORD i;
- for (i=0; i< numThreads; i++) {
- threads[i]=CreateThread(NULL, 0, IsapiThread, NULL, CREATE_SUSPENDED, &tid);
- }
- for (i=0; i< numThreads; i++) {
- if (threads[i]) ResumeThread(threads[i]);
- }
- // wait for threads to finish
- WaitForMultipleObjects(numThreads, threads, TRUE, INFINITE);
- for (i=0; i< numThreads; i++) {
- CloseHandle(threads[i]);
- }
- delete threads;
-}
-
-void DoFileList(const char *filelist, const char *environment)
-{
- // read config files
-
- if (!ReadFileList(filelist)) {
- printf("No Files to test!\r\n");
- return;
- }
-
- ReadGlobalEnvironment(environment);
-
- DoThreads();
-}
-
-
-/**
- * ParseTestFile
- * parse a single phpt file and add it to the arrays
- */
-BOOL ParseTestFile(const char *path, const char *fn)
-{
- // parse the test file
- char filename[MAX_PATH];
- _snprintf(filename, sizeof(filename)-1, "%s\\%s", path, fn);
- char line[1024];
- memset(line, 0, sizeof(line));
- CString cTest, cSkipIf, cPost, cGet, cFile, cExpect;
- printf("Reading %s\r\n", filename);
-
- enum state {none, test, skipif, post, get, file, expect} parsestate = none;
-
- FILE *fp = fopen(filename, "rb");
- char *tn = _tempnam(temppath,"pht.");
- char *en = _tempnam(temppath,"exp.");
- FILE *ft = fopen(tn, "wb+");
- FILE *fe = fopen(en, "wb+");
- if (fp && ft && fe) {
- while (fgets(line, sizeof(line)-1, fp)) {
- if (line[0]=='-') {
- if (_strnicmp(line, "--TEST--", 8)==0) {
- parsestate = test;
- continue;
- } else if (_strnicmp(line, "--SKIPIF--", 10)==0) {
- parsestate = skipif;
- continue;
- } else if (_strnicmp(line, "--POST--", 8)==0) {
- parsestate = post;
- continue;
- } else if (_strnicmp(line, "--GET--", 7)==0) {
- parsestate = get;
- continue;
- } else if (_strnicmp(line, "--FILE--", 8)==0) {
- parsestate = file;
- continue;
- } else if (_strnicmp(line, "--EXPECT--", 10)==0) {
- parsestate = expect;
- continue;
- }
- }
- switch (parsestate) {
- case test:
- stripcrlf(line);
- cTest = line;
- break;
- case skipif:
- cSkipIf += line;
- break;
- case post:
- cPost += line;
- break;
- case get:
- cGet += line;
- break;
- case file:
- fputs(line, ft);
- break;
- case expect:
- fputs(line, fe);
- break;
- }
- }
-
- fclose(fp);
- fclose(ft);
- fclose(fe);
-
- if (!cTest.IsEmpty()) {
- IsapiFileList.Add(tn);
- TestNames.Add(cTest);
- IsapiGetData.Add(cGet);
- IsapiPostData.Add(cPost);
- IsapiMatchData.Add(en);
- free(tn);
- free(en);
- return TRUE;
- }
- }
- free(tn);
- free(en);
- return FALSE;
-}
-
-
-/**
- * GetTestFiles
- * Recurse through the path and subdirectories, parse each phpt file
- */
-BOOL GetTestFiles(const char *path)
-{
- // find all files .phpt under testpath\tests
- char FindPath[MAX_PATH];
- WIN32_FIND_DATA fd;
- memset(&fd, 0, sizeof(WIN32_FIND_DATA));
-
- _snprintf(FindPath, sizeof(FindPath)-1, "%s\\*.*", path);
- HANDLE fh = FindFirstFile(FindPath, &fd);
- if (fh != INVALID_HANDLE_VALUE) {
- do {
- if ((fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) &&
- !strchr(fd.cFileName, '.')) {
- // subdirectory, recurse into it
- char NewFindPath[MAX_PATH];
- _snprintf(NewFindPath, sizeof(NewFindPath)-1, "%s\\%s", path, fd.cFileName);
- GetTestFiles(NewFindPath);
- } else if (strstr(fd.cFileName, ".phpt")) {
- // got test file, parse it now
- if (ParseTestFile(path, fd.cFileName)) {
- printf("Test File Added: %s\\%s\r\n", path, fd.cFileName);
- }
- }
- memset(&fd, 0, sizeof(WIN32_FIND_DATA));
- } while (FindNextFile(fh, &fd) != 0);
- FindClose(fh);
- }
- return IsapiFileList.GetSize() > 0;
-}
-
-void DeleteTempFiles(const char *mask)
-{
- char FindPath[MAX_PATH];
- WIN32_FIND_DATA fd;
- memset(&fd, 0, sizeof(WIN32_FIND_DATA));
-
- _snprintf(FindPath, sizeof(FindPath)-1, "%s\\%s", temppath, mask);
- HANDLE fh = FindFirstFile(FindPath, &fd);
- if (fh != INVALID_HANDLE_VALUE) {
- do {
- char NewFindPath[MAX_PATH];
- _snprintf(NewFindPath, sizeof(NewFindPath)-1, "%s\\%s", temppath, fd.cFileName);
- DeleteFile(NewFindPath);
- memset(&fd, 0, sizeof(WIN32_FIND_DATA));
- } while (FindNextFile(fh, &fd) != 0);
- FindClose(fh);
- }
-}
-
-void DoTestFiles(const char *filelist, const char *environment)
-{
- if (!GetTestFiles(filelist)) {
- printf("No Files to test!\r\n");
- return;
- }
-
- Results.SetSize(IsapiFileList.GetSize());
-
- ReadGlobalEnvironment(environment);
-
- DoThreads();
-
- printf("\r\nRESULTS:\r\n");
- // show results:
- DWORD r = Results.GetSize();
- for (DWORD i=0; i< r; i++) {
- TResults result = Results.GetAt(i);
- printf("%s\r\nOK: %d FAILED: %d\r\n", TestNames.GetAt(i), result.ok, result.bad);
- }
-
- // delete temp files
- printf("Deleting Temp Files\r\n");
- DeleteTempFiles("exp.*");
- DeleteTempFiles("pht.*");
- printf("Done\r\n");
-}
-
-#define OPTSTRING "m:f:d:h:t:i:"
-static void _usage(char *argv0)
-{
- char *prog;
-
- prog = strrchr(argv0, '/');
- if (prog) {
- prog++;
- } else {
- prog = "stresstest";
- }
-
- printf("Usage: %s -m <isapi.dll> -d|-l <file> [-t <numthreads>] [-i <numiterations>]\n"
- " -m path to isapi dll\n"
- " -d <directory> php directory (to run php test files).\n"
- " -f <file> file containing list of files to run\n"
- " -t number of threads to use (default=1)\n"
- " -i number of iterations per thread (default=1)\n"
- " -h This help\n", prog);
-}
-int main(int argc, char* argv[])
-{
- LPVOID lpMsgBuf;
- char *filelist=NULL, *environment=NULL, *module=NULL;
- int c = NULL;
- while ((c=ap_getopt(argc, argv, OPTSTRING))!=-1) {
- switch (c) {
- case 'd':
- bUseTestFiles = TRUE;
- filelist = strdup(ap_optarg);
- break;
- case 'f':
- bUseTestFiles = FALSE;
- filelist = strdup(ap_optarg);
- break;
- case 'e':
- environment = strdup(ap_optarg);
- break;
- case 't':
- numThreads = atoi(ap_optarg);
- break;
- case 'i':
- iterations = atoi(ap_optarg);
- break;
- case 'm':
- module = strdup(ap_optarg);
- break;
- case 'h':
- _usage(argv[0]);
- exit(0);
- break;
- }
- }
- if (!module || !filelist) {
- _usage(argv[0]);
- exit(0);
- }
-
- GetTempPath(sizeof(temppath), temppath);
- hDll = LoadLibrary(module); // Load our DLL
-
- if (!hDll) {
- FormatMessage(
- FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,
- NULL,
- GetLastError(),
- MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language
- (LPTSTR) &lpMsgBuf,
- 0,
- NULL
- );
- fprintf(stderr,"Error: Dll 'php5isapi.dll' not found -%d\n%s\n", GetLastError(), lpMsgBuf);
- free (module);
- free(filelist);
- LocalFree( lpMsgBuf );
- return -1;
- }
-
- //
- // Find the exported functions
-
- IsapiGetExtensionVersion = (VersionProc)GetProcAddress(hDll,"GetExtensionVersion");
- if (!IsapiGetExtensionVersion) {
- fprintf(stderr,"Can't Get Extension Version %d\n", GetLastError());
- free (module);
- free(filelist);
- return -1;
- }
- IsapiHttpExtensionProc = (HttpExtProc)GetProcAddress(hDll,"HttpExtensionProc");
- if (!IsapiHttpExtensionProc) {
- fprintf(stderr,"Can't Get Extension proc %d\n", GetLastError());
- free (module);
- free(filelist);
- return -1;
- }
- TerminateExtensionProc = (TerminateProc) GetProcAddress(hDll,
- "TerminateExtension");
-
- // This should really check if the version information matches what we
- // expect.
- //
- if (!IsapiGetExtensionVersion(&version_info) ) {
- fprintf(stderr,"Fatal: GetExtensionVersion failed\n");
- free (module);
- free(filelist);
- return -1;
- }
-
- if (bUseTestFiles) {
- char TestPath[MAX_PATH];
- if (filelist != NULL)
- _snprintf(TestPath, sizeof(TestPath)-1, "%s\\tests", filelist);
- else strcpy(TestPath, "tests");
- DoTestFiles(TestPath, environment);
- } else {
- DoFileList(filelist, environment);
- }
-
- // cleanup
- if (TerminateExtensionProc) TerminateExtensionProc(0);
-
- // We should really free memory (e.g., from GetEnv), but we'll be dead
- // soon enough
-
- FreeLibrary(hDll);
- free (module);
- free(filelist);
- return 0;
-}
-
-
-DWORD CALLBACK IsapiThread(void *p)
-{
- DWORD filecount = IsapiFileList.GetSize();
-
- for (DWORD j=0; j<iterations; j++) {
- for (DWORD i=0; i<filecount; i++) {
- // execute each file
- CString testname = TestNames.GetAt(i);
- BOOL ok = FALSE;
- if (stress_main(IsapiFileList.GetAt(i),
- IsapiGetData.GetAt(i),
- IsapiPostData.GetAt(i),
- IsapiMatchData.GetAt(i))) {
- InterlockedIncrement(&Results[i].ok);
- ok = TRUE;
- } else {
- InterlockedIncrement(&Results[i].bad);
- ok = FALSE;
- }
-
- if (testname.IsEmpty()) {
- printf("Thread %d File %s\n", GetCurrentThreadId(), IsapiFileList.GetAt(i));
- } else {
- printf("tid %d: %s %s\n", GetCurrentThreadId(), testname, ok?"OK":"FAIL");
- }
- Sleep(10);
- }
- }
- printf("Thread ending...\n");
- return 0;
-}
-
-/*
- * ======================================================================= *
- * In the startup of this program, we look at our executable name and *
- * replace the ".EXE" with ".DLL" to find the ISAPI DLL we need to load. *
- * This means that the executable need only be given the same "name" as *
- * the DLL to load. There is no recompilation required. *
- * ======================================================================= *
-*/
-BOOL stress_main(const char *filename,
- const char *arg,
- const char *postdata,
- const char *matchdata)
-{
-
- EXTENSION_CONTROL_BLOCK ECB;
- DWORD rc;
- TIsapiContext context;
-
- // open output and input files
- context.tid = GetCurrentThreadId();
- CString fname;
- fname.Format("%08X.out", context.tid);
-
- context.out = CreateFile(fname, GENERIC_WRITE, FILE_SHARE_READ, NULL, CREATE_ALWAYS, FILE_FLAG_WRITE_THROUGH, NULL);
- if (context.out==INVALID_HANDLE_VALUE) {
- printf("failed to open output file %s\n", fname);
- return 0;
- }
-
- // not using post files
- context.in = INVALID_HANDLE_VALUE;
-
- //
- // Fill the ECB with the necessary information
- //
- if (!FillExtensionControlBlock(&ECB, &context) ) {
- fprintf(stderr,"Fill Ext Block Failed\n");
- return -1;
- }
-
- // check for command line argument,
- // first arg = filename
- // this is added for testing php from command line
-
- context.env.RemoveAll();
- context.env["PATH_TRANSLATED"]= filename;
- context.env["SCRIPT_MAP"]= filename;
- context.env["CONTENT_TYPE"]= "";
- context.env["CONTENT_LENGTH"]= "";
- context.env["QUERY_STRING"]= arg;
- context.env["METHOD"]="GET";
- context.env["PATH_INFO"] = "";
- context.waitEvent = CreateEvent(NULL, FALSE, FALSE, NULL);
- char buf[MAX_PATH];
- if (postdata && *postdata !=0) {
- ECB.cbAvailable = strlen(postdata);
- ECB.cbTotalBytes = ECB.cbAvailable;
- ECB.lpbData = (unsigned char *)postdata;
- context.env["METHOD"]="POST";
-
- _snprintf(buf, sizeof(buf)-1, "%d", ECB.cbTotalBytes);
- context.env["CONTENT_LENGTH"]=buf;
-
- context.env["CONTENT_TYPE"]="application/x-www-form-urlencoded";
- }
- ECB.lpszMethod = strdup(context.env["METHOD"]);
- ECB.lpszPathTranslated = strdup(filename);
- ECB.lpszQueryString = strdup(arg);
- ECB.lpszPathInfo = strdup(context.env["PATH_INFO"]);
-
-
- // Call the DLL
- //
- rc = IsapiHttpExtensionProc(&ECB);
- if (rc == HSE_STATUS_PENDING) {
- // We will exit in ServerSupportFunction
- WaitForSingleObject(context.waitEvent, INFINITE);
- }
- CloseHandle(context.waitEvent);
- //Sleep(75);
- free(ECB.lpszPathTranslated);
- free(ECB.lpszQueryString);
- free(ECB.lpszMethod);
- free(ECB.lpszPathInfo);
-
- BOOL ok = TRUE;
-
- if (context.out != INVALID_HANDLE_VALUE) CloseHandle(context.out);
-
- // compare the output with the EXPECT section
- if (matchdata && *matchdata != 0) {
- ok = CompareFiles(fname, matchdata);
- }
-
- DeleteFile(fname);
-
- return ok;
-
-}
-//
-// GetServerVariable() is how the DLL calls the main program to figure out
-// the environment variables it needs. This is a required function.
-//
-BOOL WINAPI GetServerVariable(HCONN hConn, LPSTR lpszVariableName,
- LPVOID lpBuffer, LPDWORD lpdwSize){
-
- DWORD rc;
- CString value;
- TIsapiContext *c = (TIsapiContext *)hConn;
- if (!c) return FALSE;
-
- if (IsapiEnvironment.Lookup(lpszVariableName, value)) {
- rc = value.GetLength();
- strncpy((char *)lpBuffer, value, *lpdwSize-1);
- } else if (c->env.Lookup(lpszVariableName, value)) {
- rc = value.GetLength();
- strncpy((char *)lpBuffer, value, *lpdwSize-1);
- } else
- rc = GetEnvironmentVariable(lpszVariableName, (char *)lpBuffer, *lpdwSize) ;
-
- if (!rc) { // return of 0 indicates the variable was not found
- SetLastError(ERROR_NO_DATA);
- return FALSE;
- }
-
- if (rc > *lpdwSize) {
- SetLastError(ERROR_INSUFFICIENT_BUFFER);
- return FALSE;
- }
-
- *lpdwSize =rc + 1 ; // GetEnvironmentVariable does not count the NULL
-
- return TRUE;
-
-}
-//
-// Again, we don't have an HCONN, so we simply wrap ReadClient() to
-// ReadFile on stdin. The semantics of the two functions are the same
-//
-BOOL WINAPI ReadClient(HCONN hConn, LPVOID lpBuffer, LPDWORD lpdwSize) {
- TIsapiContext *c = (TIsapiContext *)hConn;
- if (!c) return FALSE;
-
- if (c->in != INVALID_HANDLE_VALUE)
- return ReadFile(c->in, lpBuffer, (*lpdwSize), lpdwSize, NULL);
-
- return FALSE;
-}
-//
-// ditto for WriteClient()
-//
-BOOL WINAPI WriteClient(HCONN hConn, LPVOID lpBuffer, LPDWORD lpdwSize,
- DWORD dwReserved) {
- TIsapiContext *c = (TIsapiContext *)hConn;
- if (!c) return FALSE;
-
- if (c->out != INVALID_HANDLE_VALUE)
- return WriteFile(c->out, lpBuffer, *lpdwSize, lpdwSize, NULL);
- return FALSE;
-}
-//
-// This is a special callback function used by the DLL for certain extra
-// functionality. Look at the API help for details.
-//
-BOOL WINAPI ServerSupportFunction(HCONN hConn, DWORD dwHSERequest,
- LPVOID lpvBuffer, LPDWORD lpdwSize, LPDWORD lpdwDataType){
-
- TIsapiContext *c = (TIsapiContext *)hConn;
- char *lpszRespBuf;
- char * temp = NULL;
- DWORD dwBytes;
- BOOL bRet = TRUE;
-
- switch(dwHSERequest) {
- case (HSE_REQ_SEND_RESPONSE_HEADER) :
- lpszRespBuf = (char *)xmalloc(*lpdwSize);//+ 80);//accomodate our header
- if (!lpszRespBuf)
- return FALSE;
- wsprintf(lpszRespBuf,"%s",
- //HTTP_VER,
-
- /* Default response is 200 Ok */
-
- //lpvBuffer?lpvBuffer:"200 Ok",
-
- /* Create a string for the time. */
- //temp=MakeDateStr(),
-
- //SERVER_VERSION,
-
- /* If this exists, it is a pointer to a data buffer to
- be sent. */
- lpdwDataType?(char *)lpdwDataType:NULL);
-
- if (temp) xfree(temp);
-
- dwBytes = strlen(lpszRespBuf);
- bRet = WriteClient(0, lpszRespBuf, &dwBytes, 0);
- xfree(lpszRespBuf);
-
- break;
- //
- // A real server would do cleanup here
- case (HSE_REQ_DONE_WITH_SESSION):
- SetEvent(c->waitEvent);
- //ExitThread(0);
- break;
-
- //
- // This sends a redirect (temporary) to the client.
- // The header construction is similar to RESPONSE_HEADER above.
- //
- case (HSE_REQ_SEND_URL_REDIRECT_RESP):
- lpszRespBuf = (char *)xmalloc(*lpdwSize +80) ;
- if (!lpszRespBuf)
- return FALSE;
- wsprintf(lpszRespBuf,"%s %s %s\r\n",
- HTTP_VER,
- "302 Moved Temporarily",
- (lpdwSize > 0)?lpvBuffer:0);
- xfree(temp);
- dwBytes = strlen(lpszRespBuf);
- bRet = WriteClient(0, lpszRespBuf, &dwBytes, 0);
- xfree(lpszRespBuf);
- break;
- default:
- return FALSE;
- break;
- }
- return bRet;
-
-}
-//
-// Makes a string of the date and time from GetSystemTime().
-// This is in UTC, as required by the HTTP spec.`
-//
-char * MakeDateStr(void){
- SYSTEMTIME systime;
- char *szDate= (char *)xmalloc(64);
-
- char * DaysofWeek[] = {"Sun","Mon","Tue","Wed","Thurs","Fri","Sat"};
- char * Months[] = {"NULL","Jan","Feb","Mar","Apr","May","Jun","Jul","Aug",
- "Sep","Oct","Nov","Dec"};
-
- GetSystemTime(&systime);
-
- wsprintf(szDate,"%s, %d %s %d %d:%d.%d", DaysofWeek[systime.wDayOfWeek],
- systime.wDay,
- Months[systime.wMonth],
- systime.wYear,
- systime.wHour, systime.wMinute,
- systime.wSecond );
-
- return szDate;
-}
-//
-// Fill the ECB up
-//
-BOOL WINAPI FillExtensionControlBlock(EXTENSION_CONTROL_BLOCK *ECB, TIsapiContext *context) {
-
- char * temp;
- ECB->cbSize = sizeof(EXTENSION_CONTROL_BLOCK);
- ECB->dwVersion = MAKELONG(HSE_VERSION_MINOR, HSE_VERSION_MAJOR);
- ECB->ConnID = (void *)context;
- //
- // Pointers to the functions the DLL will call.
- //
- ECB->GetServerVariable = GetServerVariable;
- ECB->ReadClient = ReadClient;
- ECB->WriteClient = WriteClient;
- ECB->ServerSupportFunction = ServerSupportFunction;
-
- //
- // Fill in the standard CGI environment variables
- //
- ECB->lpszMethod = GetEnv("REQUEST_METHOD");
- if (!ECB->lpszMethod) ECB->lpszMethod = "GET";
-
- ECB->lpszQueryString = GetEnv("QUERY_STRING");
- ECB->lpszPathInfo = GetEnv("PATH_INFO");
- ECB->lpszPathTranslated = GetEnv("PATH_TRANSLATED");
- ECB->cbTotalBytes=( (temp=GetEnv("CONTENT_LENGTH")) ? (atoi(temp)): 0);
- ECB->cbAvailable = 0;
- ECB->lpbData = (unsigned char *)"";
- ECB->lpszContentType = GetEnv("CONTENT_TYPE");
- return TRUE;
-
-}
-
-//
-// Works like _getenv(), but uses win32 functions instead.
-//
-char *GetEnv(LPSTR lpszEnvVar)
-{
-
- char *var, dummy;
- DWORD dwLen;
-
- if (!lpszEnvVar)
- return "";
-
- dwLen =GetEnvironmentVariable(lpszEnvVar, &dummy, 1);
-
- if (dwLen == 0)
- return "";
-
- var = (char *)xmalloc(dwLen);
- if (!var)
- return "";
- (void)GetEnvironmentVariable(lpszEnvVar, var, dwLen);
-
- return var;
-}
diff --git a/sapi/isapi/stresstest/stresstest.dsp b/sapi/isapi/stresstest/stresstest.dsp
deleted file mode 100644
index fb82303e3d..0000000000
--- a/sapi/isapi/stresstest/stresstest.dsp
+++ /dev/null
@@ -1,108 +0,0 @@
-# Microsoft Developer Studio Project File - Name="stresstest" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Console Application" 0x0103
-
-CFG=stresstest - Win32 Debug
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "stresstest.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "stresstest.mak" CFG="stresstest - Win32 Debug"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "stresstest - Win32 Release" (based on "Win32 (x86) Console Application")
-!MESSAGE "stresstest - Win32 Debug" (based on "Win32 (x86) Console Application")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "stresstest - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 2
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release"
-# PROP Intermediate_Dir "Release"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /Yu"stdafx.h" /FD /c
-# ADD CPP /nologo /MD /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /D "_AFXDLL" /FD /c
-# SUBTRACT CPP /YX /Yc /Yu
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG" /d "_AFXDLL"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
-# ADD LINK32 /nologo /subsystem:console /machine:I386
-
-!ELSEIF "$(CFG)" == "stresstest - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 2
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "c:\php-fcgi"
-# PROP Intermediate_Dir "Debug"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /Yu"stdafx.h" /FD /GZ /c
-# ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /D "_AFXDLL" /FD /GZ /c
-# SUBTRACT CPP /YX /Yc /Yu
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG" /d "_AFXDLL"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
-
-!ENDIF
-
-# Begin Target
-
-# Name "stresstest - Win32 Release"
-# Name "stresstest - Win32 Debug"
-# Begin Group "Source Files"
-
-# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
-# Begin Source File
-
-SOURCE=.\getopt.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\getopt.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\stresstest.cpp
-# End Source File
-# End Group
-# Begin Source File
-
-SOURCE=.\notes.txt
-# End Source File
-# End Target
-# End Project
diff --git a/sapi/milter/CREDITS b/sapi/milter/CREDITS
deleted file mode 100644
index cd00d6774b..0000000000
--- a/sapi/milter/CREDITS
+++ /dev/null
@@ -1,2 +0,0 @@
-Sendmail Milter
-Harald Radi
diff --git a/sapi/milter/EXPERIMENTAL b/sapi/milter/EXPERIMENTAL
deleted file mode 100644
index 293159a693..0000000000
--- a/sapi/milter/EXPERIMENTAL
+++ /dev/null
@@ -1,5 +0,0 @@
-this module 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/sapi/milter/Makefile.frag b/sapi/milter/Makefile.frag
deleted file mode 100644
index 8dbdf7a8fd..0000000000
--- a/sapi/milter/Makefile.frag
+++ /dev/null
@@ -1,2 +0,0 @@
-$(SAPI_MILTER_PATH): $(PHP_GLOBAL_OBJS) $(PHP_SAPI_OBJS)
- $(BUILD_MILTER)
diff --git a/sapi/milter/TODO b/sapi/milter/TODO
deleted file mode 100644
index 4a427ea131..0000000000
--- a/sapi/milter/TODO
+++ /dev/null
@@ -1,5 +0,0 @@
-threaded version still leaks mem, don't know why
-extensions aren't loaded
-stdout to syslog
-testing
-documentation \ No newline at end of file
diff --git a/sapi/milter/config.m4 b/sapi/milter/config.m4
deleted file mode 100644
index 37269d0b58..0000000000
--- a/sapi/milter/config.m4
+++ /dev/null
@@ -1,39 +0,0 @@
-dnl
-dnl $Id$
-dnl
-
-AC_MSG_CHECKING(for Milter support)
-AC_ARG_WITH(milter,
-[ --with-milter[=DIR] Build PHP as Milter application],[
- if test "$withval" = "yes"; then
- if test -f /usr/lib/libmilter.a ; then
- MILTERPATH=/usr/lib
- else
- if test -f /usr/lib/libmilter/libmilter.a ; then
- MILTERPATH=/usr/lib/libmilter
- else
- AC_MSG_ERROR(Unable to find libmilter.a)
- fi
- fi
- else
- MILTERPATH=$withval
- fi
-
- SAPI_MILTER_PATH=sapi/milter/php-milter
- PHP_SUBST(SAPI_MILTER_PATH)
- PHP_BUILD_THREAD_SAFE
- PHP_ADD_MAKEFILE_FRAGMENT($abs_srcdir/sapi/milter/Makefile.frag)
-
- PHP_SELECT_SAPI(milter, program, php_milter.c getopt.c,,'$(SAPI_MILTER_PATH)')
- PHP_ADD_LIBRARY_WITH_PATH(milter, $MILTERPATH,)
-
- BUILD_MILTER="\$(LIBTOOL) --mode=link \$(CC) -export-dynamic \$(CFLAGS_CLEAN) \$(EXTRA_CFLAGS) \$(EXTRA_LDFLAGS) \$(LDFLAGS) \$(PHP_RPATHS) \$(PHP_GLOBAL_OBJS) \$(PHP_SAPI_OBJS) \$(EXTRA_LIBS) \$(ZEND_EXTRA_LIBS) -o \$(SAPI_MILTER_PATH)"
-
- INSTALL_IT="\$(INSTALL) -m 0755 \$(SAPI_MILTER_PATH) \$(bindir)/php-milter"
- RESULT=yes
-
- PHP_SUBST(BUILD_MILTER)
-],[
- RESULT=no
-])
-AC_MSG_RESULT($RESULT)
diff --git a/sapi/milter/getopt.c b/sapi/milter/getopt.c
deleted file mode 100644
index f5874d577e..0000000000
--- a/sapi/milter/getopt.c
+++ /dev/null
@@ -1,173 +0,0 @@
-/* Borrowed from Apache NT Port */
-
-#include <stdio.h>
-#include <string.h>
-#include <assert.h>
-#include <stdlib.h>
-#include "php_getopt.h"
-#define OPTERRCOLON (1)
-#define OPTERRNF (2)
-#define OPTERRARG (3)
-
-
-char *ap_php_optarg;
-int ap_php_optind = 1;
-static int ap_php_opterr = 1;
-
-static int
-ap_php_optiserr(int argc, char * const *argv, int oint, const char *optstr,
- int optchr, int err)
-{
- if (ap_php_opterr)
- {
- fprintf(stderr, "Error in argument %d, char %d: ", oint, optchr+1);
- switch(err)
- {
- case OPTERRCOLON:
- fprintf(stderr, ": in flags\n");
- break;
- case OPTERRNF:
- fprintf(stderr, "option not found %c\n", argv[oint][optchr]);
- break;
- case OPTERRARG:
- fprintf(stderr, "no argument for option %c\n", argv[oint][optchr]);
- break;
- default:
- fprintf(stderr, "unknown\n");
- break;
- }
- }
- return('?');
-}
-
-int ap_php_getopt(int argc, char* const *argv, const char *optstr)
-{
- static int optchr = 0;
- static int dash = 0; /* have already seen the - */
-
- char *cp;
-
- if (ap_php_optind >= argc)
- return(EOF);
- if (!dash && (argv[ap_php_optind][0] != '-'))
- return(EOF);
- if (!dash && (argv[ap_php_optind][0] == '-') && !argv[ap_php_optind][1])
- {
- /*
- * use to specify stdin. Need to let pgm process this and
- * the following args
- */
- return(EOF);
- }
- if ((argv[ap_php_optind][0] == '-') && (argv[ap_php_optind][1] == '-'))
- {
- /* -- indicates end of args */
- ap_php_optind++;
- return(EOF);
- }
- if (!dash)
- {
- assert((argv[ap_php_optind][0] == '-') && argv[ap_php_optind][1]);
- dash = 1;
- optchr = 1;
- }
-
- /* Check if the guy tries to do a -: kind of flag */
- assert(dash);
- if (argv[ap_php_optind][optchr] == ':')
- {
- dash = 0;
- ap_php_optind++;
- return(ap_php_optiserr(argc, argv, ap_php_optind-1, optstr, optchr, OPTERRCOLON));
- }
- if (!(cp = strchr(optstr, argv[ap_php_optind][optchr])))
- {
- int errind = ap_php_optind;
- int errchr = optchr;
-
- if (!argv[ap_php_optind][optchr+1])
- {
- dash = 0;
- ap_php_optind++;
- }
- else
- optchr++;
- return(ap_php_optiserr(argc, argv, errind, optstr, errchr, OPTERRNF));
- }
- if (cp[1] == ':')
- {
- /* Check for cases where the value of the argument
- is in the form -<arg> <val> or in the form -<arg><val> */
- dash = 0;
- if(!argv[ap_php_optind][2]) {
- ap_php_optind++;
- if (ap_php_optind == argc)
- return(ap_php_optiserr(argc, argv, ap_php_optind-1, optstr, optchr, OPTERRARG));
- ap_php_optarg = argv[ap_php_optind++];
- }
- else
- {
- ap_php_optarg = &argv[ap_php_optind][2];
- ap_php_optind++;
- }
- return(*cp);
- }
- else
- {
- if (!argv[ap_php_optind][optchr+1])
- {
- dash = 0;
- ap_php_optind++;
- }
- else
- optchr++;
- return(*cp);
- }
- assert(0);
- return(0); /* never reached */
-}
-
-#ifdef TESTGETOPT
-int
- main (int argc, char **argv)
- {
- int c;
- extern char *ap_php_optarg;
- extern int ap_php_optind;
- int aflg = 0;
- int bflg = 0;
- int errflg = 0;
- char *ofile = NULL;
-
- while ((c = ap_php_getopt(argc, argv, "abo:")) != EOF)
- switch (c) {
- case 'a':
- if (bflg)
- errflg++;
- else
- aflg++;
- break;
- case 'b':
- if (aflg)
- errflg++;
- else
- bflg++;
- break;
- case 'o':
- ofile = ap_php_optarg;
- (void)printf("ofile = %s\n", ofile);
- break;
- case '?':
- errflg++;
- }
- if (errflg) {
- (void)fprintf(stderr,
- "usage: cmd [-a|-b] [-o <filename>] files...\n");
- exit (2);
- }
- for ( ; ap_php_optind < argc; ap_php_optind++)
- (void)printf("%s\n", argv[ap_php_optind]);
- return 0;
- }
-
-#endif /* TESTGETOPT */
diff --git a/sapi/milter/milter.php b/sapi/milter/milter.php
deleted file mode 100644
index 0878f2a4d9..0000000000
--- a/sapi/milter/milter.php
+++ /dev/null
@@ -1,132 +0,0 @@
-<?php
-/**
- * example milter script
- *
- * run: php-milter -D -p /path/to/sock milter.php
- *
- * for details on how to set up sendmail and configure the milter see
- * http://www.sendmail.com/partner/resources/development/milter_api/
- *
- * for api details see
- * http://www.sendmail.com/partner/resources/development/milter_api/api.html
- *
- * below is a list of all callbacks, that are available through the milter sapi,
- * if you leave one or more out they simply won't get called (e.g. if you secify an
- * empty php file, the milter would do nothing :)
- */
-
-/**
- * this function is called once on sapi startup,
- * here you can specify the actions the filter may take
- *
- * see http://www.sendmail.com/partner/resources/development/milter_api/smfi_register.html#flags
- */
-
-function milter_log($msg)
-{
- $GLOBALS['log'] = fopen("/tmp/milter.log", "a");
- fwrite($GLOBALS['log'], date("[H:i:s d.m.Y]") . "\t{$msg}\n");
- fclose($GLOBALS['log']);
-}
-
-function milter_init() {
- milter_log("-- startup --");
- milter_log("milter_init()");
- smfi_setflags(SMFIF_ADDHDRS);
-}
-
-/**
- * is called once, at the start of each SMTP connection
- */
-function milter_connect($connect)
-{
- milter_log("milter_connect('$connect')");
-}
-
-/**
- * is called whenever the client sends a HELO/EHLO command.
- * It may therefore be called between zero and three times.
- */
-function milter_helo($helo)
-{
- milter_log("milter_helo('$helo')");
-}
-
-/**
- * is called once at the beginning of each message,
- * before milter_envrcpt.
- */
-function milter_envfrom($args)
-{
- milter_log("milter_envfrom(args[])");
- foreach ($args as $ix => $arg) {
- milter_log("\targs[$ix] = $arg");
- }
-}
-
-/**
- * is called once per recipient, hence one or more times per message,
- * immediately after milter_envfrom
- */
-function milter_envrcpt($args)
-{
- milter_log("milter_envrcpt(args[])");
- foreach ($args as $ix => $arg) {
- milter_log("\targs[$ix] = $arg");
- }
-}
-
-/**
- * is called zero or more times between milter_envrcpt and milter_eoh,
- * once per message header
- */
-function milter_header($header, $value)
-{
- milter_log("milter_header('$header', '$value')");
-}
-
-/**
- * is called once after all headers have been sent and processed.
- */
-function milter_eoh()
-{
- milter_log("milter_eoh()");
-}
-
-/**
- * is called zero or more times between milter_eoh and milter_eom.
- */
-function milter_body($bodypart)
-{
- milter_log("milter_body('$bodypart')");
-}
-
-/**
- * is called once after all calls to milter_body for a given message.
- * most of the api functions, that alter the message can only be called
- * within this callback.
- */
-function milter_eom()
-{
- milter_log("milter_eom()");
- /* add PHP header to the message */
- smfi_addheader("X-PHP", phpversion());
-}
-
-/**
- * may be called at any time during message processing
- * (i.e. between some message-oriented routine and milter_eom).
- */
-function milter_abort()
-{
- milter_log("milter_abort()");
-}
-
-/**
- * is always called once at the end of each connection.
- */
-function milter_close()
-{
- milter_log("milter_close()");
-}
-?>
diff --git a/sapi/milter/php_getopt.h b/sapi/milter/php_getopt.h
deleted file mode 100644
index 40da432b59..0000000000
--- a/sapi/milter/php_getopt.h
+++ /dev/null
@@ -1,7 +0,0 @@
-/* Borrowed from Apache NT Port */
-#include "php.h"
-
-extern char *ap_php_optarg;
-extern int ap_php_optind;
-
-int ap_php_getopt(int argc, char* const *argv, const char *optstr);
diff --git a/sapi/milter/php_milter.c b/sapi/milter/php_milter.c
deleted file mode 100644
index b46347ce0d..0000000000
--- a/sapi/milter/php_milter.c
+++ /dev/null
@@ -1,1139 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Harald Radi <phanto@php.net> |
- | Parts based on CGI SAPI Module by |
- | Rasmus Lerdorf, Stig Bakken and Zeev Suraski |
- +----------------------------------------------------------------------+
-*/
-
-
-#include "php.h"
-#include "php_globals.h"
-#include "php_variables.h"
-#include "zend_modules.h"
-
-#ifndef ZTS
-#error SRM sapi module is only useable in thread-safe mode
-#endif
-
-#include "SAPI.h"
-
-#include <stdio.h>
-#include "php.h"
-#if HAVE_SYS_TIME_H
-#include <sys/time.h>
-#endif
-#if HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-#if HAVE_SIGNAL_H
-#include <signal.h>
-#endif
-#if HAVE_SETLOCALE
-#include <locale.h>
-#endif
-#include "zend.h"
-#include "zend_extensions.h"
-#include "php_ini.h"
-#include "php_globals.h"
-#include "php_main.h"
-#include "fopen_wrappers.h"
-#include "ext/standard/php_standard.h"
-
-#ifdef __riscos__
-#include <unixlib/local.h>
-#endif
-
-#include "zend_compile.h"
-#include "zend_execute.h"
-#include "zend_highlight.h"
-#include "zend_indent.h"
-
-#include "libmilter/mfapi.h"
-
-#define OPTSTRING "ac:d:Def:hnp:vVz:?"
-#define MG(v) TSRMG(milter_globals_id, zend_milter_globals *, v)
-
-#define IS_NONE "%s(): This function must not be called outside of a milter callback function's scope"
-#define NOT_EOM "%s(): This function can only be used inside the milter_eom callback's scope"
-#define NOT_INIT "%s(): This function can only be used inside the milter_init callback's scope"
-
-#define MLFI_NONE 0
-#define MLFI_CONNECT 1
-#define MLFI_HELO 2
-#define MLFI_ENVFROM 3
-#define MLFI_ENVRCPT 4
-#define MLFI_HEADER 5
-#define MLFI_EOH 6
-#define MLFI_BODY 7
-#define MLFI_EOM 8
-#define MLFI_ABORT 9
-#define MLFI_CLOSE 10
-#define MLFI_INIT 11
-
-/* {{{ globals
- */
-extern char *ap_php_optarg;
-extern int ap_php_optind;
-
-static int flag_debug=0;
-static char *filename;
-
-/* per thread */
-ZEND_BEGIN_MODULE_GLOBALS(milter)
- SMFICTX *ctx;
- int state;
- int initialized;
-ZEND_END_MODULE_GLOBALS(milter)
-
-ZEND_DECLARE_MODULE_GLOBALS(milter)
-/* }}} */
-
-/* this method is called only once when the milter starts */
-/* {{{ Init Milter
-*/
-static int mlfi_init()
-{
- int ret = 0;
- zend_file_handle file_handle;
- zval function_name, retval;
- TSRMLS_FETCH();
-
- /* request startup */
- if (php_request_startup(TSRMLS_C)==FAILURE) {
- SG(headers_sent) = 1;
- SG(request_info).no_headers = 1;
- php_request_shutdown((void *) 0);
-
- return -1;
- }
-
- /* disable headers */
- SG(headers_sent) = 1;
- SG(request_info).no_headers = 1;
-
- file_handle.type = ZEND_HANDLE_FILENAME;
- file_handle.filename = filename;
- file_handle.free_filename = 0;
- file_handle.opened_path = NULL;
-
- php_execute_script(&file_handle TSRMLS_CC);
-
- /* call userland */
- INIT_ZVAL(function_name);
-
- ZVAL_STRING(&function_name, "milter_init", 0);
-
- /* set the milter context for possible use in API functions */
- MG(state) = MLFI_INIT;
-
- call_user_function(CG(function_table), NULL, &function_name, &retval, 0, NULL TSRMLS_CC);
-
- MG(state) = MLFI_NONE;
- MG(initialized) = 1;
-
- if (Z_TYPE(retval) == IS_LONG) {
- ret = Z_LVAL(retval);
- }
-
- php_request_shutdown((void *) 0);
-
- return ret;
-}
-/* }}} */
-
-/* {{{ Milter callback functions
- */
-
-/* connection info filter, is called whenever sendmail connects to the milter */
-/* {{{ mlfi_connect()
-*/
-static sfsistat mlfi_connect(SMFICTX *ctx, char *hostname, _SOCK_ADDR *hostaddr)
-{
- zend_file_handle file_handle;
- zval function_name, retval, *param[1];
- TSRMLS_FETCH();
-
- /* request startup */
- if (php_request_startup(TSRMLS_C)==FAILURE) {
- SG(headers_sent) = 1;
- SG(request_info).no_headers = 1;
- php_request_shutdown((void *) 0);
-
- return SMFIS_TEMPFAIL;
- }
-
- /* disable headers */
- SG(headers_sent) = 1;
- SG(request_info).no_headers = 1;
-
- file_handle.type = ZEND_HANDLE_FILENAME;
- file_handle.filename = filename;
- file_handle.free_filename = 0;
- file_handle.opened_path = NULL;
-
- php_execute_script(&file_handle TSRMLS_CC);
-
- /* call userland */
- INIT_ZVAL(function_name);
-
- ALLOC_ZVAL(param[0]);
- INIT_PZVAL(param[0]);
-
- ZVAL_STRING(&function_name, "milter_connect", 0);
- ZVAL_STRING(param[0], hostname, 1);
-
- /* set the milter context for possible use in API functions */
- MG(ctx) = ctx;
- MG(state) = MLFI_CONNECT;
-
- call_user_function(CG(function_table), NULL, &function_name, &retval, 1, param TSRMLS_CC);
-
- MG(state) = MLFI_NONE;
-
- if (Z_TYPE(retval) == IS_LONG) {
- return Z_LVAL(retval);
- }
-
- return SMFIS_CONTINUE;
-}
-/* }}} */
-
-/* SMTP HELO command filter */
-/* {{{ mlfi_helo()
-*/
-static sfsistat mlfi_helo(SMFICTX *ctx, char *helohost)
-{
- zval function_name, retval, *param[1];
- TSRMLS_FETCH();
-
- /* call userland */
- INIT_ZVAL(function_name);
-
- ALLOC_ZVAL(param[0]);
- INIT_PZVAL(param[0]);
-
- ZVAL_STRING(&function_name, "milter_helo", 0);
- ZVAL_STRING(param[0], helohost, 1);
-
- /* set the milter context for possible use in API functions */
- MG(ctx) = ctx;
- MG(state) = MLFI_HELO;
-
- call_user_function(CG(function_table), NULL, &function_name, &retval, 1, param TSRMLS_CC);
-
- MG(state) = MLFI_NONE;
-
- FREE_ZVAL(param[0]);
-
- if (Z_TYPE(retval) == IS_LONG) {
- return Z_LVAL(retval);
- }
-
- return SMFIS_CONTINUE;
-}
-/* }}} */
-
-/* envelope sender filter */
-/* {{{ mlfi_envform()
-*/
-static sfsistat mlfi_envfrom(SMFICTX *ctx, char **argv)
-{
- zval function_name, retval, *param[1];
- TSRMLS_FETCH();
-
- /* call userland */
- INIT_ZVAL(function_name);
-
- ALLOC_ZVAL(param[0]);
- INIT_PZVAL(param[0]);
-
- ZVAL_STRING(&function_name, "milter_envfrom", 0);
- array_init(param[0]);
-
- while (*argv) {
- add_next_index_string(param[0], *argv, 1);
- argv++;
- }
-
- /* set the milter context for possible use in API functions */
- MG(ctx) = ctx;
- MG(state) = MLFI_ENVFROM;
-
- call_user_function(CG(function_table), NULL, &function_name, &retval, 1, param TSRMLS_CC);
-
- MG(state) = MLFI_NONE;
-
- FREE_ZVAL(param[0]);
-
- if (Z_TYPE(retval) == IS_LONG) {
- return Z_LVAL(retval);
- }
-
- return SMFIS_CONTINUE;
-}
-/* }}} */
-
-/* envelope recipient filter */
-/* {{{ mlfi_envrcpt()
-*/
-static sfsistat mlfi_envrcpt(SMFICTX *ctx, char **argv)
-{
- zval function_name, retval, *param[1];
- TSRMLS_FETCH();
-
- /* call userland */
- INIT_ZVAL(function_name);
-
- ALLOC_ZVAL(param[0]);
- INIT_PZVAL(param[0]);
-
- ZVAL_STRING(&function_name, "milter_envrcpt", 0);
- array_init(param[0]);
-
- while (*argv) {
- add_next_index_string(param[0], *argv, 1);
- argv++;
- }
-
- /* set the milter context for possible use in API functions */
- MG(ctx) = ctx;
- MG(state) = MLFI_ENVRCPT;
-
- call_user_function(CG(function_table), NULL, &function_name, &retval, 1, param TSRMLS_CC);
-
- MG(state) = MLFI_NONE;
-
- FREE_ZVAL(param[0]);
-
- if (Z_TYPE(retval) == IS_LONG) {
- return Z_LVAL(retval);
- }
-
- return SMFIS_CONTINUE;
-}
-/* }}} */
-
-/* header filter */
-/* {{{ mlfi_header()
-*/
-static sfsistat mlfi_header(SMFICTX *ctx, char *headerf, char *headerv)
-{
- zval function_name, retval, *param[2];
- TSRMLS_FETCH();
-
- /* call userland */
- INIT_ZVAL(function_name);
-
- ALLOC_ZVAL(param[0]);
- ALLOC_ZVAL(param[1]);
- INIT_PZVAL(param[0]);
- INIT_PZVAL(param[1]);
-
- ZVAL_STRING(&function_name, "milter_header", 0);
- ZVAL_STRING(param[0], headerf, 1);
- ZVAL_STRING(param[1], headerv, 1);
-
- /* set the milter context for possible use in API functions */
- MG(ctx) = ctx;
- MG(state) = MLFI_HEADER;
-
- call_user_function(CG(function_table), NULL, &function_name, &retval, 2, param TSRMLS_CC);
-
- MG(state) = MLFI_NONE;
-
- FREE_ZVAL(param[0]);
- FREE_ZVAL(param[1]);
-
- if (Z_TYPE(retval) == IS_LONG) {
- return Z_LVAL(retval);
- }
-
- return SMFIS_CONTINUE;
-}
-/* }}} */
-
-/* end of header */
-/* {{{ mlfi_eoh()
-*/
-static sfsistat mlfi_eoh(SMFICTX *ctx)
-{
- zval function_name, retval;
- TSRMLS_FETCH();
-
- /* call userland */
- INIT_ZVAL(function_name);
- ZVAL_STRING(&function_name, "milter_eoh", 0);
-
- /* set the milter context for possible use in API functions */
- MG(ctx) = ctx;
- MG(state) = MLFI_EOH;
-
- call_user_function(CG(function_table), NULL, &function_name, &retval, 0, NULL TSRMLS_CC);
-
- MG(state) = MLFI_NONE;
-
- if (Z_TYPE(retval) == IS_LONG) {
- return Z_LVAL(retval);
- }
-
- return SMFIS_CONTINUE;
-}
-/* }}} */
-
-/* body block */
-/* {{{ mlfi_body()
-*/
-static sfsistat mlfi_body(SMFICTX *ctx, u_char *bodyp, size_t len)
-{
- zval function_name, retval, *param[1];
- TSRMLS_FETCH();
-
- /* call userland */
- INIT_ZVAL(function_name);
-
- ALLOC_ZVAL(param[0]);
- INIT_PZVAL(param[0]);
-
- ZVAL_STRING(&function_name, "milter_body", 0);
- ZVAL_STRINGL(param[0], bodyp, len, 1);
-
- /* set the milter context for possible use in API functions */
- MG(ctx) = ctx;
- MG(state) = MLFI_BODY;
-
- call_user_function(CG(function_table), NULL, &function_name, &retval, 1, param TSRMLS_CC);
-
- MG(state) = MLFI_NONE;
-
- FREE_ZVAL(param[0]);
-
- if (Z_TYPE(retval) == IS_LONG) {
- return Z_LVAL(retval);
- }
-
- return SMFIS_CONTINUE;
-}
-/* }}} */
-
-/* end of message */
-/* {{{ mlfi_eom()
-*/
-static sfsistat mlfi_eom(SMFICTX *ctx)
-{
- zval function_name, retval;
- TSRMLS_FETCH();
-
- /* call userland */
- INIT_ZVAL(function_name);
- ZVAL_STRING(&function_name, "milter_eom", 0);
-
- /* set the milter context for possible use in API functions */
- MG(ctx) = ctx;
- MG(state) = MLFI_EOM;
-
- call_user_function(CG(function_table), NULL, &function_name, &retval, 0, NULL TSRMLS_CC);
-
- MG(state) = MLFI_NONE;
-
- if (Z_TYPE(retval) == IS_LONG) {
- return Z_LVAL(retval);
- }
-
- return SMFIS_CONTINUE;
-}
-/* }}} */
-
-/* message aborted */
-/* {{{ mlfi_abort()
-*/
-static sfsistat mlfi_abort(SMFICTX *ctx)
-{
- zval function_name, retval;
- TSRMLS_FETCH();
-
- /* call userland */
- INIT_ZVAL(function_name);
- ZVAL_STRING(&function_name, "milter_abort", 0);
-
- /* set the milter context for possible use in API functions */
- MG(ctx) = ctx;
- MG(state) = MLFI_ABORT;
-
- call_user_function(CG(function_table), NULL, &function_name, &retval, 0, NULL TSRMLS_CC);
-
- MG(state) = MLFI_NONE;
-
- if (Z_TYPE(retval) == IS_LONG) {
- return Z_LVAL(retval);
- }
-
- return SMFIS_CONTINUE;
-}
-/* }}} */
-
-/* connection cleanup */
-/* {{{ mlfi_close()
-*/
-static sfsistat mlfi_close(SMFICTX *ctx)
-{
- int ret = SMFIS_CONTINUE;
- zval function_name, retval;
- TSRMLS_FETCH();
-
- /* call userland */
- INIT_ZVAL(function_name);
- ZVAL_STRING(&function_name, "milter_close", 0);
-
- /* set the milter context for possible use in API functions */
- MG(ctx) = ctx;
- MG(state) = MLFI_CLOSE;
-
- call_user_function(CG(function_table), NULL, &function_name, &retval, 0, NULL TSRMLS_CC);
-
- MG(state) = MLFI_NONE;
-
- if (Z_TYPE(retval) == IS_LONG) {
- ret = Z_LVAL(retval);
- }
-
- php_request_shutdown((void *) 0);
-
- return ret;
-}
-/* }}} */
-/* }}} */
-
-/* {{{ Milter entry struct
- */
-struct smfiDesc smfilter = {
- "php-milter", /* filter name */
- SMFI_VERSION, /* version code -- leave untouched */
- 0, /* flags */
- mlfi_connect, /* info filter callback */
- mlfi_helo, /* HELO filter callback */
- mlfi_envfrom, /* envelope filter callback */
- mlfi_envrcpt, /* envelope recipient filter callback */
- mlfi_header, /* header filter callback */
- mlfi_eoh, /* end of header callback */
- mlfi_body, /* body filter callback */
- mlfi_eom, /* end of message callback */
- mlfi_abort, /* message aborted callback */
- mlfi_close, /* connection cleanup callback */
-};
-/* }}} */
-
-/* {{{ PHP Milter API
- */
-
-/* {{{ proto string smfi_setflags(long flags)
- Sets the flags describing the actions the filter may take. */
-PHP_FUNCTION(smfi_setflags)
-{
- long flags;
-
- /* valid only in the init callback */
- if (MG(state) != MLFI_INIT) {
- php_error(E_WARNING, NOT_INIT, get_active_function_name(TSRMLS_C));
- } else if (zend_parse_parameters(1 TSRMLS_CC, "l", &flags) == SUCCESS) {
- flags = flags & SMFIF_ADDHDRS|SMFIF_CHGHDRS|SMFIF_CHGBODY|SMFIF_ADDRCPT|SMFIF_DELRCPT;
- smfilter.xxfi_flags = flags;
- }
-}
-/* }}} */
-
-/* {{{ proto string smfi_settimeout(long timeout)
- Sets the number of seconds libmilter will wait for an MTA connection before timing out a socket. */
-PHP_FUNCTION(smfi_settimeout)
-{
- long timeout;
-
- /* valid only in the init callback */
- if (MG(state) != MLFI_INIT) {
- php_error(E_WARNING, NOT_INIT, get_active_function_name(TSRMLS_C));
- } else if (zend_parse_parameters(1 TSRMLS_CC, "l", &timeout) == SUCCESS) {
- smfi_settimeout(timeout);
- }
-}
-/* }}} */
-
-/* {{{ proto string smfi_getsymval(string macro)
- Returns the value of the given macro or NULL if the macro is not defined. */
-PHP_FUNCTION(smfi_getsymval)
-{
- char *symname, *ret;
- int len;
-
- /* valid in any callback */
- if (MG(state) == MLFI_NONE) {
- php_error(E_WARNING, IS_NONE, get_active_function_name(TSRMLS_C));
- } else if (zend_parse_parameters(1 TSRMLS_CC, "s", &symname, &len) == SUCCESS) {
- if ((ret = smfi_getsymval(MG(ctx), symname)) != NULL) {
- RETVAL_STRING(ret, 1);
- }
- }
-
- RETVAL_NULL();
-}
-/* }}} */
-
-/* {{{ proto string smfi_setreply(string rcode, string xcode, string message)
- Directly set the SMTP error reply code for this connection.
- This code will be used on subsequent error replies resulting from actions taken by this filter. */
-PHP_FUNCTION(smfi_setreply)
-{
- char *rcode, *xcode, *message;
- int len;
-
- /* valid in any callback */
- if (MG(state) == MLFI_NONE) {
- php_error(E_WARNING, IS_NONE, get_active_function_name(TSRMLS_C));
- } else if (zend_parse_parameters(3 TSRMLS_CC, "sss", &rcode, &len, &xcode, &len, &message, &len) == SUCCESS) {
- if (smfi_setreply(MG(ctx), rcode, xcode, message) == MI_SUCCESS) {
- RETVAL_TRUE;
- }
- }
-
- RETVAL_FALSE;
-}
-/* }}} */
-
-/* {{{ proto string smfi_addheader(string headerf, string headerv)
- Adds a header to the current message. */
-PHP_FUNCTION(smfi_addheader)
-{
- char *f, *v;
- int len;
-
- /* valid only in milter_eom */
- if (MG(state) != MLFI_EOM) {
- php_error(E_WARNING, NOT_EOM, get_active_function_name(TSRMLS_C));
- } else if (zend_parse_parameters(2 TSRMLS_CC, "ss", &f, &len, &v, &len) == SUCCESS) {
- if (smfi_addheader(MG(ctx), f, v) == MI_SUCCESS) {
- RETVAL_TRUE;
- }
- }
-
- RETVAL_FALSE;
-}
-/* }}} */
-
-/* {{{ proto string smfi_chgheader(string headerf, string headerv)
- Changes a header's value for the current message. */
-PHP_FUNCTION(smfi_chgheader)
-{
- char *f, *v;
- long idx;
- int len;
-
- /* valid only in milter_eom */
- if (MG(state) != MLFI_EOM) {
- php_error(E_WARNING, NOT_EOM, get_active_function_name(TSRMLS_C));
- } else if (zend_parse_parameters(3 TSRMLS_CC, "sls", &f, &len, &idx, &v, &len) == SUCCESS) {
- if (smfi_chgheader(MG(ctx), f, idx, v) == MI_SUCCESS) {
- RETVAL_TRUE;
- }
- }
-
- RETVAL_FALSE;
-}
-/* }}} */
-
-/* {{{ proto string smfi_addrcpt(string rcpt)
- Add a recipient to the message envelope. */
-PHP_FUNCTION(smfi_addrcpt)
-{
- char *rcpt;
- int len;
-
- /* valid only in milter_eom */
- if (MG(state) != MLFI_EOM) {
- php_error(E_WARNING, NOT_EOM, get_active_function_name(TSRMLS_C));
- } else if (zend_parse_parameters(1 TSRMLS_CC, "s", &rcpt, &len) == SUCCESS) {
- if (smfi_addrcpt(MG(ctx), rcpt) == MI_SUCCESS) {
- RETVAL_TRUE;
- }
- }
-
- RETVAL_FALSE;
-}
-/* }}} */
-
-/* {{{ proto string smfi_delrcpt(string rcpt)
- Removes the named recipient from the current message's envelope. */
-PHP_FUNCTION(smfi_delrcpt)
-{
- char *rcpt;
- int len;
-
- /* valid only in milter_eom */
- if (MG(state) != MLFI_EOM) {
- php_error(E_WARNING, NOT_EOM, get_active_function_name(TSRMLS_C));
- } else if (zend_parse_parameters(1 TSRMLS_CC, "s", &rcpt, &len) == SUCCESS) {
- if (smfi_delrcpt(MG(ctx), rcpt) == MI_SUCCESS) {
- RETVAL_TRUE;
- }
- }
-
- RETVAL_FALSE;
-}
-/* }}} */
-
-/* {{{ proto string smfi_replacebody(string body)
- Replaces the body of the current message. If called more than once,
- subsequent calls result in data being appended to the new body. */
-PHP_FUNCTION(smfi_replacebody)
-{
- char *body;
- int len;
-
- /* valid only in milter_eom */
- if (MG(state) != MLFI_EOM) {
- php_error(E_WARNING, NOT_EOM, get_active_function_name(TSRMLS_C));
- } else if (zend_parse_parameters(1 TSRMLS_CC, "s", &body, &len) == SUCCESS) {
- if (smfi_replacebody(MG(ctx), body, len) == MI_SUCCESS) {
- RETVAL_TRUE;
- }
- }
-
- RETVAL_FALSE;
-}
-/* }}} */
-
-/* {{{ PHP_MINIT_FUNCTION
- */
-PHP_MINIT_FUNCTION(milter)
-{
- REGISTER_LONG_CONSTANT("SMFIS_CONTINUE", SMFIS_CONTINUE, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("SMFIS_REJECT", SMFIS_REJECT, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("SMFIS_DISCARD", SMFIS_DISCARD, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("SMFIS_ACCEPT", SMFIS_ACCEPT, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("SMFIS_TEMPFAIL", SMFIS_TEMPFAIL, CONST_CS | CONST_PERSISTENT);
-
- REGISTER_LONG_CONSTANT("SMFIF_ADDHDRS", SMFIF_ADDHDRS, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("SMFIF_CHGHDRS", SMFIF_CHGHDRS, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("SMFIF_CHGBODY", SMFIF_CHGBODY, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("SMFIF_ADDRCPT", SMFIF_ADDRCPT, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("SMFIF_DELRCPT", SMFIF_DELRCPT, CONST_CS | CONST_PERSISTENT);
-
- ZEND_INIT_MODULE_GLOBALS(milter, NULL, NULL);
-
- MG(state) = MLFI_NONE;
- MG(initialized) = 0;
-}
-/* }}} */
-
-/* {{{ PHP_MINFO_FUNCTION
- */
-PHP_MINFO_FUNCTION(milter)
-{
- php_info_print_table_start();
- php_info_print_table_header(2, "Milter support", "enabled");
- php_info_print_table_end();
-}
-/* }}} */
-/* }}} */
-
-/* {{{ milter_functions[]
-*/
-static function_entry milter_functions[] = {
- PHP_FE(smfi_setflags, NULL)
- PHP_FE(smfi_settimeout, NULL)
- PHP_FE(smfi_getsymval, NULL)
- PHP_FE(smfi_setreply, NULL)
- PHP_FE(smfi_addheader, NULL)
- PHP_FE(smfi_chgheader, NULL)
- PHP_FE(smfi_addrcpt, NULL)
- PHP_FE(smfi_delrcpt, NULL)
- PHP_FE(smfi_replacebody, NULL)
- { NULL, NULL, NULL }
-};
-/* }}} */
-
-/* {{{ Zend module entry
-*/
-static zend_module_entry php_milter_module = {
- STANDARD_MODULE_HEADER,
- "Milter",
- milter_functions,
- PHP_MINIT(milter),
- NULL,
- NULL,
- NULL,
- PHP_MINFO(milter),
- "0.1.0",
- STANDARD_MODULE_PROPERTIES
-};
-/* }}} */
-
-/* {{{ Milter SAPI
-*/
-static int sapi_milter_ub_write(const char *str, uint str_length TSRMLS_DC)
-{
- return str_length;
-}
-
-static void sapi_milter_flush(void *server_context)
-{
-}
-
-static void sapi_milter_register_variables(zval *track_vars_array TSRMLS_DC)
-{
- php_register_variable ("SERVER_SOFTWARE", "Sendmail Milter", track_vars_array TSRMLS_CC);
-}
-
-static int sapi_milter_post_read(char *buf, uint count_bytes TSRMLS_DC)
-{
- return 0;
-}
-
-static char* sapi_milter_read_cookies(TSRMLS_D)
-{
- return NULL;
-}
-
-static int sapi_milter_send_headers(sapi_headers_struct *sapi_headers TSRMLS_DC)
-{
- return SAPI_HEADER_SENT_SUCCESSFULLY;
-}
-
-static int php_milter_startup(sapi_module_struct *sapi_module)
-{
- if (php_module_startup(sapi_module, &php_milter_module, 1) == FAILURE) {
- return FAILURE;
- }
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ sapi_module_struct milter_sapi_module
-*/
-static sapi_module_struct milter_sapi_module = {
- "milter", /* name */
- "Sendmail Milter SAPI", /* pretty name */
-
- php_milter_startup, /* startup */
- php_module_shutdown_wrapper, /* shutdown */
-
- NULL, /* activate */
- NULL, /* deactivate */
-
- sapi_milter_ub_write, /* unbuffered write */
- sapi_milter_flush, /* flush */
- NULL, /* get uid */
- NULL, /* getenv */
-
- php_error, /* error handler */
-
- NULL, /* header handler */
- sapi_milter_send_headers, /* send headers handler */
- NULL, /* send header handler */
-
- sapi_milter_post_read, /* read POST data */
- sapi_milter_read_cookies, /* read Cookies */
-
- sapi_milter_register_variables, /* register server variables */
- NULL, /* Log message */
-
- NULL, /* Block interruptions */
- NULL, /* Unblock interruptions */
-
- STANDARD_SAPI_MODULE_PROPERTIES
-};
-/* }}} */
-
-/****
-* ripped from cli, has to be cleaned up !
-*/
-
-/* {{{ php_milter_usage
-*/
-static void php_milter_usage(char *argv0)
-{
- char *prog;
-
- prog = strrchr(argv0, '/');
- if (prog) {
- prog++;
- } else {
- prog = "php-milter";
- }
-
- printf( "Usage: %s [options] [-f] <file> [args...]\n"
- " %s [options] -r <code> [args...]\n"
- " %s [options] [-- args...]\n"
- " -a Run interactively\n"
- " -c <path>|<file> Look for php.ini file in this directory\n"
- " -n No php.ini file will be used\n"
- " -d foo[=bar] Define INI entry foo with value 'bar'\n"
- " -D run as daemon\n"
- " -e Generate extended information for debugger/profiler\n"
- " -f <file> Parse <file>.\n"
- " -h This help\n"
- " -p <socket> path to create socket\n"
- " -v Version number\n"
- " -V <n> set debug level to n (1 or 2).\n"
- " -z <file> Load Zend extension <file>.\n"
- " args... Arguments passed to script. Use -- args when first argument \n"
- " starts with - or script is read from stdin\n"
- , prog, prog, prog);
-}
-/* }}} */
-
-static void define_command_line_ini_entry(char *arg)
-{
- char *name, *value;
-
- name = arg;
- value = strchr(arg, '=');
- if (value) {
- *value = 0;
- value++;
- } else {
- value = "1";
- }
- zend_alter_ini_entry(name, strlen(name)+1, value, strlen(value), PHP_INI_SYSTEM, PHP_INI_STAGE_ACTIVATE);
-}
-
-/* {{{ main
-*/
-int main(int argc, char *argv[])
-{
- char *sock = NULL;
- int dofork = 0;
-
- int exit_status = SUCCESS;
- int c;
-/* temporary locals */
- int orig_optind=ap_php_optind;
- char *orig_optarg=ap_php_optarg;
- char *arg_free=NULL, **arg_excp=&arg_free;
- int interactive=0;
- char *exec_direct=NULL;
- char *param_error=NULL;
-/* end of temporary locals */
-
- void ***tsrm_ls;
-
-#ifdef HAVE_SIGNAL_H
-#if defined(SIGPIPE) && defined(SIG_IGN)
- signal(SIGPIPE, SIG_IGN); /* ignore SIGPIPE in standalone mode so
- that sockets created via fsockopen()
- don't kill PHP if the remote site
- closes it. in apache|apxs mode apache
- does that for us! thies@thieso.net
- 20000419 */
-#endif
-#endif
-
-
- tsrm_startup(1, 1, 0, NULL);
- sapi_startup(&milter_sapi_module);
-
- while ((c=ap_php_getopt(argc, argv, OPTSTRING))!=-1) {
- switch (c) {
- case 'c':
- milter_sapi_module.php_ini_path_override = strdup(ap_php_optarg);
- break;
- case 'n':
- milter_sapi_module.php_ini_ignore = 1;
- break;
- }
- }
- ap_php_optind = orig_optind;
- ap_php_optarg = orig_optarg;
-
- milter_sapi_module.executable_location = argv[0];
-
- tsrm_ls = ts_resource(0);
-
- sapi_module.startup(&milter_sapi_module);
-
- zend_first_try {
- while ((c=ap_php_getopt(argc, argv, OPTSTRING))!=-1) {
- switch (c) {
- case '?':
- php_output_startup();
- php_output_activate(TSRMLS_C);
- SG(headers_sent) = 1;
- php_milter_usage(argv[0]);
- php_end_ob_buffers(1 TSRMLS_CC);
- exit(1);
- break;
- }
- }
- ap_php_optind = orig_optind;
- ap_php_optarg = orig_optarg;
-
- /* Set some CLI defaults */
- SG(options) |= SAPI_OPTION_NO_CHDIR;
- zend_alter_ini_entry("html_errors", 12, "0", 1, PHP_INI_SYSTEM, PHP_INI_STAGE_ACTIVATE);
- zend_alter_ini_entry("max_execution_time", 19, "0", 1, PHP_INI_SYSTEM, PHP_INI_STAGE_ACTIVATE);
-
- zend_uv.html_errors = 0; /* tell the engine we're in non-html mode */
-
- if (milter_sapi_module.php_ini_path_override && milter_sapi_module.php_ini_ignore) {
- SG(headers_sent) = 1;
- SG(request_info).no_headers = 1;
- PUTS("You cannot use both -n and -c switch. Use -h for help.\n");
- exit(1);
- }
-
- while ((c = ap_php_getopt(argc, argv, OPTSTRING)) != -1) {
- switch (c) {
-
- case 'a': /* interactive mode */
- printf("Interactive mode enabled\n\n");
- interactive=1;
- break;
-
- case 'C': /* don't chdir to the script directory */
- /* This is default so NOP */
- break;
- case 'd': /* define ini entries on command line */
- define_command_line_ini_entry(ap_php_optarg);
- break;
-
- case 'D': /* daemon */
- dofork = 1;
- break;
-
- case 'e': /* enable extended info output */
- CG(extended_info) = 1;
- break;
-
- case 'f': /* parse file */
- filename = ap_php_optarg;
- break;
-
- case 'h': /* help & quit */
- case '?':
- php_output_startup();
- php_output_activate(TSRMLS_C);
- SG(headers_sent) = 1;
- php_milter_usage(argv[0]);
- php_end_ob_buffers(1 TSRMLS_CC);
- exit(1);
- break;
-
- case 'p': /* socket */
- sock = strdup(ap_php_optarg);
- break;
-
- case 'v': /* show php version & quit */
- if (php_request_startup(TSRMLS_C)==FAILURE) {
- zend_ini_deactivate(TSRMLS_C);
- php_module_shutdown(TSRMLS_C);
- sapi_shutdown();
- tsrm_shutdown();
-
- exit(1);
- }
- SG(headers_sent) = 1;
- SG(request_info).no_headers = 1;
- php_printf("PHP %s (%s) (built: %s %s)\nCopyright (c) 1997-2004 The PHP Group\n%s", PHP_VERSION, sapi_module.name, __DATE__, __TIME__, get_zend_version());
- php_end_ob_buffers(1 TSRMLS_CC);
- exit(1);
- break;
-
- case 'V': /* verbose */
- flag_debug = atoi(ap_php_optarg);
- break;
-
- case 'z': /* load extension file */
- zend_load_extension(ap_php_optarg);
- break;
-
- default:
- break;
- }
- }
-
- if (param_error) {
- SG(headers_sent) = 1;
- SG(request_info).no_headers = 1;
- PUTS(param_error);
- exit(1);
- }
-
- CG(interactive) = interactive;
-
- /* only set script_file if not set already and not in direct mode and not at end of parameter list */
- if (argc > ap_php_optind && !filename) {
- filename=argv[ap_php_optind];
- ap_php_optind++;
- }
-
- /* check if file exists, exit else */
-
- if (dofork) {
- switch(fork()) {
- case -1: /* Uh-oh, we have a problem forking. */
- fprintf(stderr, "Uh-oh, couldn't fork!\n");
- exit(errno);
- break;
- case 0: /* Child */
- break;
- default: /* Parent */
- exit(0);
- }
- }
-
- {
- struct stat junk;
- if (stat(sock,&junk) == 0) unlink(sock);
- }
-
- openlog("php-milter", LOG_PID, LOG_MAIL);
-
- if (exit_status = mlfi_init()) {
- syslog(1, "mlfi_init failed.");
- exit(exit_status);
- }
-
- smfi_setconn(sock);
- if (smfi_register(smfilter) == MI_FAILURE) {
- syslog(1, "smfi_register failed.");
- fprintf(stderr, "smfi_register failed\n");
- } else {
- exit_status = smfi_main();
- }
-
- closelog();
-
- if (milter_sapi_module.php_ini_path_override) {
- free(milter_sapi_module.php_ini_path_override);
- }
-
- } zend_catch {
- exit_status = EG(exit_status);
- } zend_end_try();
-
- php_module_shutdown(TSRMLS_C);
- sapi_shutdown();
- tsrm_shutdown();
-
- exit(exit_status);
-}
-/* }}} */
-
-/*
- * 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/sapi/milter/php_milter.h b/sapi/milter/php_milter.h
deleted file mode 100644
index 72d7ac51ee..0000000000
--- a/sapi/milter/php_milter.h
+++ /dev/null
@@ -1,31 +0,0 @@
-#ifndef PHP_MILTER_H
-#define PHP_MILTER_H
-
-#include "libmilter/mfapi.h"
-
-#define MLFI_NONE 0
-#define MLFI_CONNECT 1
-#define MLFI_HELO 2
-#define MLFI_ENVFROM 3
-#define MLFI_ENVRCPT 4
-#define MLFI_HEADER 5
-#define MLFI_EOH 6
-#define MLFI_BODY 7
-#define MLFI_EOM 8
-#define MLFI_ABORT 9
-#define MLFI_CLOSE 10
-#define MLFI_INIT 11
-
-#define MG(v) TSRMG(milter_globals_id, zend_milter_globals *, v)
-
-typedef struct {
- pthread_t thread;
- MUTEX_T receiver;
- MUTEX_T sender;
- SMFICTX *ctx;
- sfsistat retval;
- int message;
- void **args;
-} worker_thread;
-
-#endif
diff --git a/sapi/nsapi/CREDITS b/sapi/nsapi/CREDITS
deleted file mode 100644
index 2a05919862..0000000000
--- a/sapi/nsapi/CREDITS
+++ /dev/null
@@ -1,2 +0,0 @@
-NSAPI
-Jayakumar Muthukumarasamy, Uwe Schindler
diff --git a/sapi/nsapi/config.m4 b/sapi/nsapi/config.m4
deleted file mode 100644
index d23060b029..0000000000
--- a/sapi/nsapi/config.m4
+++ /dev/null
@@ -1,45 +0,0 @@
-dnl
-dnl $Id$
-dnl
-
-AC_MSG_CHECKING(for NSAPI support)
-AC_ARG_WITH(nsapi,
-[ --with-nsapi=DIR Build PHP as NSAPI module for Netscape/iPlanet/SunONE],[
- PHP_NSAPI=$withval
-],[
- PHP_NSAPI=no
-])
-AC_MSG_RESULT($PHP_NSAPI)
-
-if test "$PHP_NSAPI" != "no"; then
- if test ! -d $PHP_NSAPI/bin ; then
- AC_MSG_ERROR(Please specify the path to the root of your Netscape/iPlanet/SunONE server using --with-nsapi=DIR)
- fi
- AC_MSG_CHECKING(for NSAPI include files)
- if test -d $PHP_NSAPI/include ; then
- NSAPI_INCLUDE=$PHP_NSAPI/include
- AC_MSG_RESULT(Netscape-Enterprise 3.x style)
- AC_CHECK_HEADERS([$NSAPI_INCLUDE/nsapi.h])
- fi
- if test -d $PHP_NSAPI/plugins/include ; then
- test -n "$NSAPI_INCLUDE" && NSAPI_INC_DIR="-I$NSAPI_INCLUDE"
- NSAPI_INCLUDE="$PHP_NSAPI/plugins/include"
- AC_MSG_RESULT(iPlanet 4.x / SunONE 6.x style)
- AC_CHECK_HEADERS([$NSAPI_INCLUDE/nsapi.h])
- NSAPI_INCLUDE="$NSAPI_INC_DIR -I$NSAPI_INCLUDE"
- fi
- if test "$NSAPI_INCLUDE" = ""; then
- AC_MSG_ERROR(Please check you have nsapi.h in either $PHP_NSAPI/include or $PHP_NSAPI/plugins/include)
- fi
-
- PHP_EVAL_INCLINE($NSAPI_INCLUDE)
- PHP_BUILD_THREAD_SAFE
- AC_DEFINE(HAVE_NSAPI,1,[Whether you have a Netscape/iPlanet/SunONE Server])
- PHP_SELECT_SAPI(nsapi, shared, nsapi.c)
- INSTALL_IT="\$(INSTALL) -m 0755 $SAPI_SHARED \$(INSTALL_ROOT)$PHP_NSAPI/bin/"
-fi
-
-
-dnl ## Local Variables:
-dnl ## tab-width: 4
-dnl ## End:
diff --git a/sapi/nsapi/config.w32 b/sapi/nsapi/config.w32
deleted file mode 100644
index 3522eb7d56..0000000000
--- a/sapi/nsapi/config.w32
+++ /dev/null
@@ -1,19 +0,0 @@
-// vim:ft=javascript
-// $Id$
-
-ARG_ENABLE('nsapi', 'Build NSAPI for Netscape/iPlanet/SunONE webservers', 'no');
-
-ARG_WITH('nsapi-includes', 'Where to find NSAPI headers', null);
-ARG_WITH('nsapi-libs', 'Where to find NSAPI libraries', null);
-
-if (PHP_NSAPI != "no") {
- if (PHP_ZTS == "no") {
- WARNING("NSAPI module requires an --enable-zts build of PHP");
- } else if (CHECK_HEADER_ADD_INCLUDE("nsapi.h", "CFLAGS_NSAPI",
- PHP_NSAPI + ';' + PHP_NSAPI_INCLUDES) &&
- CHECK_LIB("ns-httpd*.lib", "nsapi", PHP_NSAPI + ";" + PHP_NSAPI_LIBS)) {
- SAPI('nsapi', 'nsapi.c', 'php' + PHP_VERSION + 'nsapi.dll', '/D XP_WIN32 ');
- } else {
- WARNING("Could not find NSAPI headers/libraries");
- }
-}
diff --git a/sapi/nsapi/nsapi-readme.txt b/sapi/nsapi/nsapi-readme.txt
deleted file mode 100644
index 0b7ecde219..0000000000
--- a/sapi/nsapi/nsapi-readme.txt
+++ /dev/null
@@ -1,154 +0,0 @@
-Configuration of your Netscape/SunONE/iPlanet Web Server for PHP5
------------------------------------------------------------------
-
-These instructions are targetted at Netscape Enterprise Web Server and
-SUN/Netscape Alliance iPlanet Web Server/SunONE Webserver.
-On other web servers your milage may vary.
-
-Firstly you may need to add some paths to the LD_LIBRARY_PATH
-environment for Netscape to find all the shared libs. This is best done
-in the start script for your Netscape server. Windows users can
-probably skip this step. The start script is located in:
-
- <path-to-netscape-server>/https-servername/start
-
-
-Netscape/iPlanet/SunONE config files are located in:
-
- <path-to-server>/https-servername/config
-
-
-Add the following line to mime.types (you can do that by the administration server):
-
- type=magnus-internal/x-httpd-php exts=php
-
-
-Place the following two lines after mime.types init in
-<path-to-server>/https-servername/config/obj.conf (for servers < 6) or
-for iPlanet/SunONE Web Server 6.0 and above however at the end of the
-<path-to-server>/https-servername/config/magnus.conf file:
-
- Init fn="load-modules" funcs="php5_init,php5_execute,php5_auth_trans" shlib="/path/to/phplibrary"
- Init fn=php5_init errorString="Failed to initialize PHP!" [php_ini="/path/to/php.ini"]
-
-The "shlib" will vary depending on your OS:
-
- Unix: "<path-to-server>/bin/libphp5.so".
- Windows: "c:/path/to/php5/php5nsapi.dll"
-
-
-In obj.conf (for virtual server classes [SunONE 6.0+] in their vserver.obj.conf):
-
- <Object name="default">
- .
- .
- .
- # NOTE this next line should happen after all 'ObjectType' and before
- # all 'AddLog' lines
- # You can modify some entries in php.ini request specific by adding it to the Service
- # directive, e.g. doc_root="/path"
- # For boolean ini-keys please use 0/1 as value, NOT "On","Off",... (this will not work
- # correctly), e.g. zlib.output_compression=1 instead of zlib.output_compression="On"
-
- Service fn="php5_execute" type="magnus-internal/x-httpd-php" [inikey=value ...]
- .
- .
- .
- </Object>
-
-This is only needed if you want to configure a directory that only consists of
-PHP scripts (same like a cgi-bin directory):
-
- <Object name="x-httpd-php">
- ObjectType fn="force-type" type="magnus-internal/x-httpd-php"
- Service fn="php5_execute" [inikey=value ...]
- </Object>
-
-After that you can configure a directory in the Administration server and assign it
-the style "x-httpd-php". All files in it will get executed as PHP. This is nice to
-hide PHP usage by renaming files to .html
-
-Note: The stacksize that PHP uses depends on the configuration of the webserver. If you get
-crashes with very large PHP scripts, it is recommended to raise it with the Admin Server
-(in the section "MAGNUS EDITOR").
-
-
-Authentication configuration
-----------------------------
-
-PHP authentication cannot be used with any other authentication. ALL
-AUTHENTICATION IS PASSED TO YOUR PHP SCRIPT. To configure PHP
-Authentication for the entire server, add the following line:
-
- <Object name="default">
- AuthTrans fn=php5_auth_trans
- .
- .
- .
- .
- </Object>
-
-
-To use PHP Authentication on a single directory, add the following:
-
- <Object ppath="d:\path\to\authenticated\dir\*">
- AuthTrans fn=php5_auth_trans
- </Object>
-
-
-Special use for error pages or self-made directory listings
------------------------------------------------------------
-
-You can use PHP to generate the error pages for "404 Not Found"
-or similar. Add the following line to the object in obj.conf for
-every error page you want to overwrite:
-
- Error fn="php5_execute" code=XXX script="/path/to/script.php" [inikey=value inikey=value...]
-
-where XXX ist the HTTP error code. Please delete any other Error
-directives which could interfere with yours.
-If you want to place a page for all errors that could exist, leave
-the "code" parameter out. Your script can get the HTTP status code
-with $_SERVER['ERROR_TYPE'].
-
-Another posibility is to generate self-made directory listings.
-Just generate a PHP script which displays a directory listing and
-replace the corresponding default Service line for
-type="magnus-internal/directory" in obj.conf with the following:
-
- Service fn="php5_execute" type="magnus-internal/directory" script="/path/to/script.php" [inikey=value inikey=value...]
-
-For both error and directory listing pages the original URI and
-translated URI are in the variables $_SERVER['PATH_INFO'] and
-$_SERVER['PATH_TRANSLATED'].
-
-
-Note about nsapi_virtual() and subrequests
-------------------------------------------
-
-The NSAPI module now supports the nsapi_virtual() function (alias: virtual())
-to make subrequests on the webserver and insert the result in the webpage.
-The problem is, that this function uses some undocumented features from
-the NSAPI library.
-
-Under Unix this is not a problem, because the module automatically looks
-for the needed functions and uses them if available. If not, nsapi_virtual()
-is disabled.
-
-Under Windows limitations in the DLL handling need the use of a automatic
-detection of the most recent ns-httpdXX.dll file. This is tested for servers
-till version 6.1. If a newer version of the SunONE server is used, the detection
-fails and nsapi_virtual() is disabled.
-
-If this is the case, try the following:
-Add the following parameter to php5_init in magnus.conf:
-
- Init fn=php5_init ... server_lib="ns-httpdXX.dll"
-
-where XX is the correct DLL version number. To get it, look in the server-root
-for the correct DLL name. The DLL with the biggest filesize is the right one.
-
-But be warned: SUPPORT FOR nsapi_virtual() IS EXPERIMENTAL !!!
-
-
-$Id$
diff --git a/sapi/nsapi/nsapi.c b/sapi/nsapi/nsapi.c
deleted file mode 100644
index 84a3c1bfaa..0000000000
--- a/sapi/nsapi/nsapi.c
+++ /dev/null
@@ -1,1013 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Jayakumar Muthukumarasamy <jk@kasenna.com> |
- | Uwe Schindler <uwe@thetaphi.de> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-/*
- * PHP includes
- */
-#define NSAPI 1
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "php.h"
-#include "php_variables.h"
-#include "ext/standard/info.h"
-#include "php_ini.h"
-#include "php_globals.h"
-#include "SAPI.h"
-#include "php_main.h"
-#include "php_version.h"
-#include "TSRM.h"
-#include "ext/standard/php_standard.h"
-#include <sys/types.h>
-#include <sys/stat.h>
-
-#ifndef RTLD_DEFAULT
-#define RTLD_DEFAULT NULL
-#endif
-
-/*
- * If neither XP_UNIX not XP_WIN32 is defined use PHP_WIN32
- */
-#if !defined(XP_UNIX) && !defined(XP_WIN32)
-#ifdef PHP_WIN32
-#define XP_WIN32
-#else
-#define XP_UNIX
-#endif
-#endif
-
-/*
- * NSAPI includes
- */
-#include "nsapi.h"
-#include "base/pblock.h"
-#include "base/session.h"
-#include "frame/req.h"
-#include "frame/protocol.h" /* protocol_start_response */
-#include "base/util.h" /* is_mozilla, getline */
-#include "frame/log.h" /* log_error */
-
-#define NSLS_D struct nsapi_request_context *request_context
-#define NSLS_DC , NSLS_D
-#define NSLS_C request_context
-#define NSLS_CC , NSLS_C
-#define NSG(v) (request_context->v)
-
-#define NS_BUF_SIZE 2048
-
-/*
- * ZTS needs to be defined for NSAPI to work
- */
-#if !defined(ZTS)
-#error "NSAPI module needs ZTS to be defined"
-#endif
-
-/*
- * Structure to encapsulate the NSAPI request in SAPI
- */
-typedef struct nsapi_request_context {
- pblock *pb;
- Session *sn;
- Request *rq;
- int read_post_bytes;
- char *path_info;
- int fixed_script; /* 0 if script is from URI, 1 if script is from "script" parameter */
- short http_error; /* 0 in normal mode; for errors the HTTP error code */
-} nsapi_request_context;
-
-/*
- * Mappings between NSAPI names and environment variables. This
- * mapping was obtained from the sample programs at the iplanet
- * website.
- */
-typedef struct nsapi_equiv {
- const char *env_var;
- const char *nsapi_eq;
-} nsapi_equiv;
-
-static nsapi_equiv nsapi_reqpb[] = {
- { "QUERY_STRING", "query" },
- { "REQUEST_LINE", "clf-request" },
- { "REQUEST_METHOD", "method" },
- { "PHP_SELF", "uri" },
- { "SERVER_PROTOCOL", "protocol" }
-};
-static size_t nsapi_reqpb_size = sizeof(nsapi_reqpb)/sizeof(nsapi_reqpb[0]);
-
-static nsapi_equiv nsapi_vars[] = {
- { "AUTH_TYPE", "auth-type" },
- { "CLIENT_CERT", "auth-cert" },
- { "REMOTE_USER", "auth-user" }
-};
-static size_t nsapi_vars_size = sizeof(nsapi_vars)/sizeof(nsapi_vars[0]);
-
-static nsapi_equiv nsapi_client[] = {
- { "HTTPS_KEYSIZE", "keysize" },
- { "HTTPS_SECRETSIZE", "secret-keysize" },
- { "REMOTE_ADDR", "ip" },
- { "REMOTE_HOST", "ip" }
-};
-static size_t nsapi_client_size = sizeof(nsapi_client)/sizeof(nsapi_client[0]);
-
-/* this parameters to "Service"/"Error" are NSAPI ones which should not be php.ini keys and are excluded */
-static char *nsapi_exclude_from_ini_entries[] = { "fn", "type", "method", "directive", "code", "reason", "script", "bucket", NULL };
-
-static char *nsapi_strdup(char *str)
-{
- if (str != NULL) {
- return STRDUP(str);
- }
- return NULL;
-}
-
-static void nsapi_free(void *addr)
-{
- if (addr != NULL) {
- FREE(addr);
- }
-}
-
-
-/*******************/
-/* PHP module part */
-/*******************/
-
-PHP_MINIT_FUNCTION(nsapi);
-PHP_MSHUTDOWN_FUNCTION(nsapi);
-PHP_RINIT_FUNCTION(nsapi);
-PHP_RSHUTDOWN_FUNCTION(nsapi);
-PHP_MINFO_FUNCTION(nsapi);
-
-PHP_FUNCTION(nsapi_virtual);
-PHP_FUNCTION(nsapi_request_headers);
-PHP_FUNCTION(nsapi_response_headers);
-
-ZEND_BEGIN_MODULE_GLOBALS(nsapi)
- long read_timeout;
-ZEND_END_MODULE_GLOBALS(nsapi)
-
-ZEND_DECLARE_MODULE_GLOBALS(nsapi)
-
-#define NSAPI_G(v) TSRMG(nsapi_globals_id, zend_nsapi_globals *, v)
-
-/* {{{ nsapi_functions[]
- *
- * Every user visible function must have an entry in nsapi_functions[].
- */
-function_entry nsapi_functions[] = {
- PHP_FE(nsapi_virtual, NULL) /* Make subrequest */
- PHP_FALIAS(virtual, nsapi_virtual, NULL) /* compatibility */
- PHP_FE(nsapi_request_headers, NULL) /* get request headers */
- PHP_FALIAS(getallheaders, nsapi_request_headers, NULL) /* compatibility */
- PHP_FALIAS(apache_request_headers, nsapi_request_headers, NULL) /* compatibility */
- PHP_FE(nsapi_response_headers, NULL) /* get response headers */
- PHP_FALIAS(apache_response_headers, nsapi_response_headers, NULL) /* compatibility */
- {NULL, NULL, NULL}
-};
-/* }}} */
-
-/* {{{ nsapi_module_entry
- */
-zend_module_entry nsapi_module_entry = {
- STANDARD_MODULE_HEADER,
- "nsapi",
- nsapi_functions,
- PHP_MINIT(nsapi),
- PHP_MSHUTDOWN(nsapi),
- NULL,
- NULL,
- PHP_MINFO(nsapi),
- NO_VERSION_YET,
- STANDARD_MODULE_PROPERTIES
-};
-/* }}} */
-
-/* {{{ PHP_INI
- */
-PHP_INI_BEGIN()
- STD_PHP_INI_ENTRY("nsapi.read_timeout", "60", PHP_INI_ALL, OnUpdateLong, read_timeout, zend_nsapi_globals, nsapi_globals)
-PHP_INI_END()
-/* }}} */
-
-/* newer servers hide this functions from the programmer so redefine the functions dynamically
- thanks to Chris Elving from Sun for the function declarations */
-typedef int (*nsapi_servact_prototype)(Session *sn, Request *rq);
-nsapi_servact_prototype nsapi_servact_uri2path = NULL;
-nsapi_servact_prototype nsapi_servact_pathchecks = NULL;
-nsapi_servact_prototype nsapi_servact_fileinfo = NULL;
-nsapi_servact_prototype nsapi_servact_service = NULL;
-
-#ifdef PHP_WIN32
-/* The following dll-names for nsapi are in use at this time. The undocumented
- * servact_* functions are always in the newest one, older ones are supported by
- * the server only by wrapping the function table nothing else. So choose
- * the newest one found in process space for dynamic linking */
-static char *nsapi_dlls[] = { "ns-httpd40.dll", "ns-httpd36.dll", "ns-httpd35.dll", "ns-httpd30.dll", NULL };
-/* if user specifies an other dll name by server_lib parameter
- * it is placed in the following variable and only this DLL is
- * checked for the servact_* functions */
-char *nsapi_dll = NULL;
-#endif
-
-/* {{{ php_nsapi_init_dynamic_symbols
- */
-static void php_nsapi_init_dynamic_symbols(void)
-{
-#if defined(servact_uri2path) && defined(servact_pathchecks) && defined(servact_fileinfo) && defined(servact_service)
- /* use functions from nsapi.h if available */
- nsapi_servact_uri2path = &servact_uri2path;
- nsapi_servact_pathchecks = &servact_pathchecks;
- nsapi_servact_fileinfo = &servact_fileinfo;
- nsapi_servact_service = &servact_service;
-#else
- /* find address of internal NSAPI functions */
-#ifdef PHP_WIN32
- register int i;
- DL_HANDLE module = NULL;
- if (nsapi_dll) {
- /* try user specified server_lib */
- module = GetModuleHandle(nsapi_dll);
- if (!module) {
- log_error(LOG_WARN, "php5_init", NULL, NULL, "Cannot find DLL specified by server_lib parameter: %s", nsapi_dll);
- }
- } else {
- /* find a LOADED dll module from nsapi_dlls */
- for (i=0; nsapi_dlls[i]; i++) {
- if (module = GetModuleHandle(nsapi_dlls[i])) {
- break;
- }
- }
- }
- if (!module) return;
-#else
- DL_HANDLE module = RTLD_DEFAULT;
-#endif
- nsapi_servact_uri2path = (nsapi_servact_prototype)DL_FETCH_SYMBOL(module, "INTservact_uri2path");
- nsapi_servact_pathchecks = (nsapi_servact_prototype)DL_FETCH_SYMBOL(module, "INTservact_pathchecks");
- nsapi_servact_fileinfo = (nsapi_servact_prototype)DL_FETCH_SYMBOL(module, "INTservact_fileinfo");
- nsapi_servact_service = (nsapi_servact_prototype)DL_FETCH_SYMBOL(module, "INTservact_service");
- if (!(nsapi_servact_uri2path && nsapi_servact_pathchecks && nsapi_servact_fileinfo && nsapi_servact_service)) {
- /* not found - could be cause they are undocumented */
- nsapi_servact_uri2path = NULL;
- nsapi_servact_pathchecks = NULL;
- nsapi_servact_fileinfo = NULL;
- nsapi_servact_service = NULL;
- }
-#endif
-}
-/* }}} */
-
-/* {{{ php_nsapi_init_globals
- */
-static void php_nsapi_init_globals(zend_nsapi_globals *nsapi_globals)
-{
- nsapi_globals->read_timeout = 60;
-}
-/* }}} */
-
-/* {{{ PHP_MINIT_FUNCTION
- */
-PHP_MINIT_FUNCTION(nsapi)
-{
- php_nsapi_init_dynamic_symbols();
- ZEND_INIT_MODULE_GLOBALS(nsapi, php_nsapi_init_globals, NULL);
- REGISTER_INI_ENTRIES();
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ PHP_MSHUTDOWN_FUNCTION
- */
-PHP_MSHUTDOWN_FUNCTION(nsapi)
-{
- UNREGISTER_INI_ENTRIES();
- return SUCCESS;
-}
-/* }}} */
-
-/* {{{ PHP_MINFO_FUNCTION
- */
-PHP_MINFO_FUNCTION(nsapi)
-{
- php_info_print_table_start();
- php_info_print_table_row(2, "NSAPI Module Revision", "$Revision$");
- php_info_print_table_row(2, "Server Software", system_version());
- php_info_print_table_row(2, "Sub-requests with nsapi_virtual()",
- (nsapi_servact_service)?((zend_ini_long("zlib.output_compression", sizeof("zlib.output_compression"), 0))?"not supported with zlib.output_compression":"enabled"):"not supported on this platform" );
- php_info_print_table_end();
-
- DISPLAY_INI_ENTRIES();
-}
-/* }}} */
-
-/* {{{ proto bool nsapi_virtual(string uri)
- Perform an NSAPI sub-request */
-/* This function is equivalent to <!--#include virtual...-->
- * in SSI. It does an NSAPI sub-request. It is useful
- * for including CGI scripts or .shtml files, or anything else
- * that you'd parse through webserver.
- */
-PHP_FUNCTION(nsapi_virtual)
-{
- pval **uri;
- int rv;
- char *value;
- Request *rq;
- nsapi_request_context *rc = (nsapi_request_context *)SG(server_context);
-
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &uri) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex(uri);
-
- if (!nsapi_servact_service) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to include uri '%s' - Sub-requests not supported on this platform", (*uri)->value.str.val);
- RETURN_FALSE;
- } else if (zend_ini_long("zlib.output_compression", sizeof("zlib.output_compression"), 0)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to include uri '%s' - Sub-requests do not work with zlib.output_compression", (*uri)->value.str.val);
- RETURN_FALSE;
- } else {
- php_end_ob_buffers(1 TSRMLS_CC);
- php_header(TSRMLS_C);
-
- /* do the sub-request */
- /* thanks to Chris Elving from Sun for this code sniplet */
- if ((rq = request_restart_internal((*uri)->value.str.val, NULL)) == NULL) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to include uri '%s' - Internal request creation failed", (*uri)->value.str.val);
- RETURN_FALSE;
- }
-
- /* insert host of current request to get page from same vhost */
- param_free(pblock_remove("host", rq->headers));
- if (value = pblock_findval("host", rc->rq->headers)) {
- pblock_nvinsert("host", value, rq->headers);
- }
-
- /* go through the normal request stages as given in obj.conf,
- but leave out the logging/error section */
- do {
- rv = (*nsapi_servact_uri2path)(rc->sn, rq);
- if (rv != REQ_PROCEED) {
- continue;
- }
-
- rv = (*nsapi_servact_pathchecks)(rc->sn, rq);
- if (rv != REQ_PROCEED) {
- continue;
- }
-
- rv = (*nsapi_servact_fileinfo)(rc->sn, rq);
- if (rv != REQ_PROCEED) {
- continue;
- }
-
- rv = (*nsapi_servact_service)(rc->sn, rq);
- } while (rv == REQ_RESTART);
-
- if (rq->status_num != 200) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to include uri '%s' - HTTP status code %d during subrequest", (*uri)->value.str.val, rq->status_num);
- request_free(rq);
- RETURN_FALSE;
- }
-
- request_free(rq);
-
- RETURN_TRUE;
- }
-}
-/* }}} */
-
-/* {{{ proto array nsapi_request_headers(void)
- Get all headers from the request */
-PHP_FUNCTION(nsapi_request_headers)
-{
- register int i;
- struct pb_entry *entry;
- nsapi_request_context *rc = (nsapi_request_context *)SG(server_context);
-
- array_init(return_value);
-
- for (i=0; i < rc->rq->headers->hsize; i++) {
- entry=rc->rq->headers->ht[i];
- while (entry) {
- if (!PG(safe_mode) || strncasecmp(entry->param->name, "authorization", 13)) {
- add_assoc_string(return_value, entry->param->name, entry->param->value, 1);
- }
- entry=entry->next;
- }
- }
-}
-/* }}} */
-
-/* {{{ proto array nsapi_response_headers(void)
- Get all headers from the response */
-PHP_FUNCTION(nsapi_response_headers)
-{
- register int i;
- struct pb_entry *entry;
- nsapi_request_context *rc = (nsapi_request_context *)SG(server_context);
-
- array_init(return_value);
-
- php_header(TSRMLS_C);
-
- for (i=0; i < rc->rq->srvhdrs->hsize; i++) {
- entry=rc->rq->srvhdrs->ht[i];
- while (entry) {
- add_assoc_string(return_value, entry->param->name, entry->param->value, 1);
- entry=entry->next;
- }
- }
-}
-/* }}} */
-
-
-/*************/
-/* SAPI part */
-/*************/
-
-static int sapi_nsapi_ub_write(const char *str, unsigned int str_length TSRMLS_DC)
-{
- int retval;
- nsapi_request_context *rc;
-
- rc = (nsapi_request_context *)SG(server_context);
- retval = net_write(rc->sn->csd, (char *)str, str_length);
- if (retval == IO_ERROR /* -1 */ || retval == IO_EOF /* 0 */) {
- php_handle_aborted_connection();
- }
- return retval;
-}
-
-static int sapi_nsapi_header_handler(sapi_header_struct *sapi_header, sapi_headers_struct *sapi_headers TSRMLS_DC)
-{
- char *header_name, *header_content, *p;
- nsapi_request_context *rc = (nsapi_request_context *)SG(server_context);
-
- header_name = sapi_header->header;
- header_content = p = strchr(header_name, ':');
- if (p == NULL) {
- efree(sapi_header->header);
- return 0;
- }
-
- *p = 0;
- do {
- header_content++;
- } while (*header_content == ' ');
-
- if (!strcasecmp(header_name, "Content-Type")) {
- param_free(pblock_remove("content-type", rc->rq->srvhdrs));
- pblock_nvinsert("content-type", header_content, rc->rq->srvhdrs);
- } else {
- /* to lower case because NSAPI reformats the headers and wants lowercase */
- for (p=header_name; *p; p++) {
- *p=tolower(*p);
- }
- if (sapi_header->replace) param_free(pblock_remove(header_name, rc->rq->srvhdrs));
- pblock_nvinsert(header_name, header_content, rc->rq->srvhdrs);
- }
-
- sapi_free_header(sapi_header);
-
- return 0; /* don't use the default SAPI mechanism, NSAPI duplicates this functionality */
-}
-
-static int sapi_nsapi_send_headers(sapi_headers_struct *sapi_headers TSRMLS_DC)
-{
- int retval;
- nsapi_request_context *rc = (nsapi_request_context *)SG(server_context);
-
- if (SG(sapi_headers).send_default_content_type) {
- char *hd;
- param_free(pblock_remove("content-type", rc->rq->srvhdrs));
- hd = sapi_get_default_content_type(TSRMLS_C);
- pblock_nvinsert("content-type", hd, rc->rq->srvhdrs);
- efree(hd);
- }
-
- protocol_status(rc->sn, rc->rq, SG(sapi_headers).http_response_code, NULL);
- retval = protocol_start_response(rc->sn, rc->rq);
-
- if (retval == REQ_PROCEED || retval == REQ_NOACTION) {
- return SAPI_HEADER_SENT_SUCCESSFULLY;
- } else {
- return SAPI_HEADER_SEND_FAILED;
- }
-}
-
-static int sapi_nsapi_read_post(char *buffer, uint count_bytes TSRMLS_DC)
-{
- nsapi_request_context *rc = (nsapi_request_context *)SG(server_context);
- char *read_ptr = buffer, *content_length_str = NULL;
- uint bytes_read = 0;
- int length, content_length = 0;
- netbuf *nbuf = rc->sn->inbuf;
-
- /*
- * Yesss!
- */
- count_bytes = MIN(count_bytes, SG(request_info).content_length-rc->read_post_bytes);
- content_length = SG(request_info).content_length;
-
- if (content_length <= 0) {
- return 0;
- }
-
- /*
- * Gobble any pending data in the netbuf.
- */
- length = nbuf->cursize - nbuf->pos;
- length = MIN(count_bytes, length);
- if (length > 0) {
- memcpy(read_ptr, nbuf->inbuf + nbuf->pos, length);
- bytes_read += length;
- read_ptr += length;
- content_length -= length;
- nbuf->pos += length;
- }
-
- /*
- * Read the remaining from the socket.
- */
- while (content_length > 0 && bytes_read < count_bytes) {
- int bytes_to_read = count_bytes - bytes_read;
-
- if (content_length < bytes_to_read) {
- bytes_to_read = content_length;
- }
-
- length = net_read(rc->sn->csd, read_ptr, bytes_to_read, NSAPI_G(read_timeout));
-
- if (length == IO_ERROR || length == IO_EOF) {
- break;
- }
-
- bytes_read += length;
- read_ptr += length;
- content_length -= length;
- }
-
- if ( bytes_read > 0 ) {
- rc->read_post_bytes += bytes_read;
- }
- return bytes_read;
-}
-
-static char *sapi_nsapi_read_cookies(TSRMLS_D)
-{
- char *cookie_string;
- nsapi_request_context *rc = (nsapi_request_context *)SG(server_context);
-
- cookie_string = pblock_findval("cookie", rc->rq->headers);
- return cookie_string;
-}
-
-static void sapi_nsapi_register_server_variables(zval *track_vars_array TSRMLS_DC)
-{
- nsapi_request_context *rc = (nsapi_request_context *)SG(server_context);
- register size_t i;
- int pos;
- char *value,*p;
- char buf[NS_BUF_SIZE + 1];
- struct pb_entry *entry;
-
- for (i = 0; i < nsapi_reqpb_size; i++) {
- value = pblock_findval(nsapi_reqpb[i].nsapi_eq, rc->rq->reqpb);
- if (value) {
- php_register_variable((char *)nsapi_reqpb[i].env_var, value, track_vars_array TSRMLS_CC);
- }
- }
-
- for (i=0; i < rc->rq->headers->hsize; i++) {
- entry=rc->rq->headers->ht[i];
- while (entry) {
- if (!PG(safe_mode) || strncasecmp(entry->param->name, "authorization", 13)) {
- if (strcasecmp(entry->param->name, "content-length")==0 || strcasecmp(entry->param->name, "content-type")==0) {
- strlcpy(buf, entry->param->name, NS_BUF_SIZE);
- pos = 0;
- } else {
- snprintf(buf, NS_BUF_SIZE, "HTTP_%s", entry->param->name);
- pos = 5;
- }
- buf[NS_BUF_SIZE]='\0';
- for(p = buf + pos; *p; p++) {
- *p = toupper(*p);
- if (*p < 'A' || *p > 'Z') {
- *p = '_';
- }
- }
- php_register_variable(buf, entry->param->value, track_vars_array TSRMLS_CC);
- }
- entry=entry->next;
- }
- }
-
- for (i = 0; i < nsapi_vars_size; i++) {
- value = pblock_findval(nsapi_vars[i].nsapi_eq, rc->rq->vars);
- if (value) {
- php_register_variable((char *)nsapi_vars[i].env_var, value, track_vars_array TSRMLS_CC);
- }
- }
-
- for (i = 0; i < nsapi_client_size; i++) {
- value = pblock_findval(nsapi_client[i].nsapi_eq, rc->sn->client);
- if (value) {
- php_register_variable((char *)nsapi_client[i].env_var, value, track_vars_array TSRMLS_CC);
- }
- }
-
- if (value = session_dns(rc->sn)) {
- php_register_variable("REMOTE_HOST", value, track_vars_array TSRMLS_CC);
- nsapi_free(value);
- }
-
- sprintf(buf, "%d", conf_getglobals()->Vport);
- php_register_variable("SERVER_PORT", buf, track_vars_array TSRMLS_CC);
- php_register_variable("SERVER_NAME", conf_getglobals()->Vserver_hostname, track_vars_array TSRMLS_CC);
-
- value = http_uri2url_dynamic("", "", rc->sn, rc->rq);
- php_register_variable("SERVER_URL", value, track_vars_array TSRMLS_CC);
- nsapi_free(value);
-
- php_register_variable("SERVER_SOFTWARE", system_version(), track_vars_array TSRMLS_CC);
- php_register_variable("HTTPS", (security_active ? "ON" : "OFF"), track_vars_array TSRMLS_CC);
- php_register_variable("GATEWAY_INTERFACE", "CGI/1.1", track_vars_array TSRMLS_CC);
-
- /* DOCUMENT_ROOT */
- if (value = request_translate_uri("/", rc->sn)) {
- value[strlen(value) - 1] = '\0';
- php_register_variable("DOCUMENT_ROOT", value, track_vars_array TSRMLS_CC);
- nsapi_free(value);
- }
-
- /* PATH_INFO / PATH_TRANSLATED */
- if (rc->path_info) {
- if (value = request_translate_uri(rc->path_info, rc->sn)) {
- php_register_variable("PATH_TRANSLATED", value, track_vars_array TSRMLS_CC);
- nsapi_free(value);
- }
- php_register_variable("PATH_INFO", rc->path_info, track_vars_array TSRMLS_CC);
- }
-
- /* Create full Request-URI & Script-Name */
- if (SG(request_info).request_uri) {
- strlcpy(buf, SG(request_info).request_uri, NS_BUF_SIZE);
- if (SG(request_info).query_string) {
- p = strchr(buf, 0);
- snprintf(p, NS_BUF_SIZE-(p-buf), "?%s", SG(request_info).query_string);
- buf[NS_BUF_SIZE]='\0';
- }
- php_register_variable("REQUEST_URI", buf, track_vars_array TSRMLS_CC);
-
- strlcpy(buf, SG(request_info).request_uri, NS_BUF_SIZE);
- if (rc->path_info) {
- pos = strlen(SG(request_info).request_uri) - strlen(rc->path_info);
- if (pos>=0 && pos<=NS_BUF_SIZE && rc->path_info) {
- buf[pos] = '\0';
- } else {
- buf[0]='\0';
- }
- }
- php_register_variable("SCRIPT_NAME", buf, track_vars_array TSRMLS_CC);
- }
- php_register_variable("SCRIPT_FILENAME", SG(request_info).path_translated, track_vars_array TSRMLS_CC);
-
- /* special variables in error mode */
- if (rc->http_error) {
- sprintf(buf, "%d", rc->http_error);
- php_register_variable("ERROR_TYPE", buf, track_vars_array TSRMLS_CC);
- }
-}
-
-static void nsapi_log_message(char *message)
-{
- TSRMLS_FETCH();
- nsapi_request_context *rc = (nsapi_request_context *)SG(server_context);
-
- log_error(LOG_INFORM, pblock_findval("fn", rc->pb), rc->sn, rc->rq, "%s", message);
-}
-
-static int php_nsapi_startup(sapi_module_struct *sapi_module)
-{
- if (php_module_startup(sapi_module, &nsapi_module_entry, 1)==FAILURE) {
- return FAILURE;
- }
- return SUCCESS;
-}
-
-
-static sapi_module_struct nsapi_sapi_module = {
- "nsapi", /* name */
- "NSAPI", /* pretty name */
-
- php_nsapi_startup, /* startup */
- php_module_shutdown_wrapper, /* shutdown */
-
- NULL, /* activate */
- NULL, /* deactivate */
-
- sapi_nsapi_ub_write, /* unbuffered write */
- NULL, /* flush */
- NULL, /* get uid */
- NULL, /* getenv */
-
- php_error, /* error handler */
-
- sapi_nsapi_header_handler, /* header handler */
- sapi_nsapi_send_headers, /* send headers handler */
- NULL, /* send header handler */
-
- sapi_nsapi_read_post, /* read POST data */
- sapi_nsapi_read_cookies, /* read Cookies */
-
- sapi_nsapi_register_server_variables, /* register server variables */
- nsapi_log_message, /* Log message */
-
- NULL, /* Block interruptions */
- NULL, /* Unblock interruptions */
-
- STANDARD_SAPI_MODULE_PROPERTIES
-};
-
-static void nsapi_php_ini_entries(NSLS_D TSRMLS_DC)
-{
- struct pb_entry *entry;
- register int i,j,ok;
-
- for (i=0; i < NSG(pb)->hsize; i++) {
- entry=NSG(pb)->ht[i];
- while (entry) {
- /* exclude standard entries given to "Service" which should not go into ini entries */
- ok=1;
- for (j=0; nsapi_exclude_from_ini_entries[j]; j++) {
- ok&=(strcasecmp(entry->param->name, nsapi_exclude_from_ini_entries[j])!=0);
- }
-
- if (ok) {
- /* change the ini entry */
- if (zend_alter_ini_entry(entry->param->name, strlen(entry->param->name)+1,
- entry->param->value, strlen(entry->param->value),
- PHP_INI_SYSTEM, PHP_INI_STAGE_RUNTIME)==FAILURE) {
- log_error(LOG_WARN, pblock_findval("fn", NSG(pb)), NSG(sn), NSG(rq), "Cannot change php.ini key \"%s\" to \"%s\"", entry->param->name, entry->param->value);
- }
- }
- entry=entry->next;
- }
- }
-}
-
-void NSAPI_PUBLIC php5_close(void *vparam)
-{
- if (nsapi_sapi_module.shutdown) {
- nsapi_sapi_module.shutdown(&nsapi_sapi_module);
- }
-
- if (nsapi_sapi_module.php_ini_path_override) {
- free(nsapi_sapi_module.php_ini_path_override);
- }
-
-#ifdef PHP_WIN32
- if (nsapi_dll) {
- free(nsapi_dll);
- nsapi_dll = NULL;
- }
-#endif
-
- tsrm_shutdown();
-
- log_error(LOG_INFORM, "php5_close", NULL, NULL, "Shutdown PHP Module");
-}
-
-/*********************************************************
-/ init SAF
-/
-/ Init fn="php5_init" [php_ini="/path/to/php.ini"] [server_lib="ns-httpdXX.dll"]
-/ Initialize the NSAPI module in magnus.conf
-/
-/ php_ini: gives path to php.ini file
-/ server_lib: (only Win32) gives name of DLL (without path) to look for
-/ servact_* functions
-/
-/*********************************************************/
-int NSAPI_PUBLIC php5_init(pblock *pb, Session *sn, Request *rq)
-{
- php_core_globals *core_globals;
- char *strval;
- int threads=128; /* default for server */
-
- /* fetch max threads from NSAPI and initialize TSRM with it */
-#if defined(pool_maxthreads)
- threads=pool_maxthreads;
- if (threads<1) {
- threads=128; /* default for server */
- }
-#endif
- tsrm_startup(threads, 1, 0, NULL);
-
- core_globals = ts_resource(core_globals_id);
-
- /* look if php_ini parameter is given to php5_init */
- if (strval = pblock_findval("php_ini", pb)) {
- nsapi_sapi_module.php_ini_path_override = strdup(strval);
- }
-
-#ifdef PHP_WIN32
- /* look if server_lib parameter is given to php5_init
- * (this disables the automatic search for the newest ns-httpdXX.dll) */
- if (strval = pblock_findval("server_lib", pb)) {
- nsapi_dll = strdup(strval);
- }
-#endif
-
- /* start SAPI */
- sapi_startup(&nsapi_sapi_module);
- nsapi_sapi_module.startup(&nsapi_sapi_module);
-
- daemon_atrestart(&php5_close, NULL);
-
- log_error(LOG_INFORM, pblock_findval("fn", pb), sn, rq, "Initialized PHP Module (%d threads exspected)", threads);
- return REQ_PROCEED;
-}
-
-/*********************************************************
-/ normal use in Service directive:
-/
-/ Service fn="php5_execute" type=... method=... [inikey=inivalue inikey=inivalue...]
-/
-/ use in Service for a directory to supply a php-made directory listing instead of server default:
-/
-/ Service fn="php5_execute" type="magnus-internal/directory" script="/path/to/script.php" [inikey=inivalue inikey=inivalue...]
-/
-/ use in Error SAF to display php script as error page:
-/
-/ Error fn="php5_execute" code=XXX script="/path/to/script.php" [inikey=inivalue inikey=inivalue...]
-/ Error fn="php5_execute" reason="Reason" script="/path/to/script.php" [inikey=inivalue inikey=inivalue...]
-/
-/*********************************************************/
-int NSAPI_PUBLIC php5_execute(pblock *pb, Session *sn, Request *rq)
-{
- int retval;
- nsapi_request_context *request_context;
- zend_file_handle file_handle = {0};
- struct stat fst;
-
- char *path_info;
- char *query_string = pblock_findval("query", rq->reqpb);
- char *uri = pblock_findval("uri", rq->reqpb);
- char *request_method = pblock_findval("method", rq->reqpb);
- char *content_type = pblock_findval("content-type", rq->headers);
- char *content_length = pblock_findval("content-length", rq->headers);
- char *directive = pblock_findval("Directive", pb);
- int error_directive = (directive && !strcasecmp(directive, "error"));
- int fixed_script = 1;
-
- /* try to use script parameter -> Error or Service for directory listing */
- char *path_translated = pblock_findval("script", pb);
-
- TSRMLS_FETCH();
-
- /* if script parameter is missing: normal use as Service SAF */
- if (!path_translated) {
- path_translated = pblock_findval("path", rq->vars);
- path_info = pblock_findval("path-info", rq->vars);
- fixed_script = 0;
- if (error_directive) {
- /* go to next error directive if script parameter is missing */
- log_error(LOG_WARN, pblock_findval("fn", pb), sn, rq, "Missing 'script' parameter");
- return REQ_NOACTION;
- }
- } else {
- /* in error the path_info is the uri to the requested page */
- path_info = pblock_findval("uri", rq->reqpb);
- }
-
- /* check if this uri was included in an other PHP script with nsapi_virtual()
- by looking for a request context in the current thread */
- if (SG(server_context)) {
- /* send 500 internal server error */
- log_error(LOG_WARN, pblock_findval("fn", pb), sn, rq, "Cannot make nesting PHP requests with nsapi_virtual()");
- if (error_directive) {
- return REQ_NOACTION;
- } else {
- protocol_status(sn, rq, 500, NULL);
- return REQ_ABORTED;
- }
- }
-
- request_context = (nsapi_request_context *)MALLOC(sizeof(nsapi_request_context));
- request_context->pb = pb;
- request_context->sn = sn;
- request_context->rq = rq;
- request_context->read_post_bytes = 0;
- request_context->fixed_script = fixed_script;
- request_context->http_error = (error_directive) ? rq->status_num : 0;
- request_context->path_info = nsapi_strdup(path_info);
-
- SG(server_context) = request_context;
- SG(request_info).query_string = nsapi_strdup(query_string);
- SG(request_info).request_uri = nsapi_strdup(uri);
- SG(request_info).request_method = nsapi_strdup(request_method);
- SG(request_info).path_translated = nsapi_strdup(path_translated);
- SG(request_info).content_type = nsapi_strdup(content_type);
- SG(request_info).content_length = (content_length == NULL) ? 0 : strtoul(content_length, 0, 0);
- SG(sapi_headers).http_response_code = (error_directive) ? rq->status_num : 200;
-
- nsapi_php_ini_entries(NSLS_C TSRMLS_CC);
-
- file_handle.type = ZEND_HANDLE_FILENAME;
- file_handle.filename = SG(request_info).path_translated;
- file_handle.free_filename = 0;
- file_handle.opened_path = NULL;
-
- if (stat(SG(request_info).path_translated, &fst)==0 && S_ISREG(fst.st_mode)) {
- if (php_request_startup(TSRMLS_C) == SUCCESS) {
- php_execute_script(&file_handle TSRMLS_CC);
- php_request_shutdown(NULL);
- retval=REQ_PROCEED;
- } else {
- /* send 500 internal server error */
- log_error(LOG_WARN, pblock_findval("fn", pb), sn, rq, "Cannot prepare PHP engine!");
- if (error_directive) {
- retval=REQ_NOACTION;
- } else {
- protocol_status(sn, rq, 500, NULL);
- retval=REQ_ABORTED;
- }
- }
- } else {
- /* send 404 because file not found */
- log_error(LOG_WARN, pblock_findval("fn", pb), sn, rq, "Cannot execute PHP script: %s (File not found)", SG(request_info).path_translated);
- if (error_directive) {
- retval=REQ_NOACTION;
- } else {
- protocol_status(sn, rq, 404, NULL);
- retval=REQ_ABORTED;
- }
- }
-
- nsapi_free(request_context->path_info);
- nsapi_free(SG(request_info).query_string);
- nsapi_free(SG(request_info).request_uri);
- nsapi_free((void*)(SG(request_info).request_method));
- nsapi_free(SG(request_info).path_translated);
- nsapi_free((void*)(SG(request_info).content_type));
-
- FREE(request_context);
- SG(server_context) = NULL;
-
- return retval;
-}
-
-/*********************************************************
-/ authentication
-/
-/ we have to make a 'fake' authenticator for netscape so it
-/ will pass authentication through to php, and allow us to
-/ check authentication with our scripts.
-/
-/ php5_auth_trans
-/ main function called from netscape server to authenticate
-/ a line in obj.conf:
-/ funcs=php5_auth_trans shlib="path/to/this/phpnsapi.dll"
-/ and:
-/ <Object ppath="path/to/be/authenticated/by/php/*">
-/ AuthTrans fn="php5_auth_trans"
-/*********************************************************/
-int NSAPI_PUBLIC php5_auth_trans(pblock * pb, Session * sn, Request * rq)
-{
- /* This is a DO NOTHING function that allows authentication
- * information
- * to be passed through to PHP scripts.
- */
- return REQ_PROCEED;
-}
-
-/*
- * 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/sapi/nsapi/php5nsapi.dsp b/sapi/nsapi/php5nsapi.dsp
deleted file mode 100644
index 6cd0079b43..0000000000
--- a/sapi/nsapi/php5nsapi.dsp
+++ /dev/null
@@ -1,135 +0,0 @@
-# Microsoft Developer Studio Project File - Name="php5nsapi" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=php5nsapi - Win32 Debug_TS
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "php5nsapi.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "php5nsapi.mak" CFG="php5nsapi - Win32 Debug_TS"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "php5nsapi - Win32 Release_TS" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "php5nsapi - Win32 Release_TS_inline" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "php5nsapi - Win32 Debug_TS" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "php5nsapi - Win32 Release_TS"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "php5nsapi___Win32_Release_TS"
-# PROP BASE Intermediate_Dir "php5nsapi___Win32_Release_TS"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "..\..\Release_TS"
-# PROP Intermediate_Dir "Release_TS"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "php5nsapi_EXPORTS" /YX /FD /c
-# ADD CPP /nologo /MD /W3 /GX /O2 /I "." /I "..\..\..\php_build\nsapi30\include\\" /I "..\..\include" /I "..\..\win32" /I "..\..\Zend" /I "..\.." /I "..\..\..\bindlib_w32" /I "..\..\main" /I "..\..\tsrm" /D ZEND_DEBUG=0 /D "NDEBUG" /D "XP_WIN32" /D "ZTS" /D "ZEND_WIN32" /D "PHP_WIN32" /D "_WINDOWS" /D "_USRDLL" /D "php5nsapi_EXPORTS" /D "WIN32" /D "_MBCS" /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386
-# ADD LINK32 ns-httpd30.lib php5ts.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /base:"0x62000000" /version:4.0 /dll /machine:I386 /libpath:"..\..\..\php_build\nsapi30\lib\\" /libpath:"..\..\Release_TS" /libpath:"..\..\TSRM\Release_TS" /libpath:"..\..\Zend\Release_TS"
-
-!ELSEIF "$(CFG)" == "php5nsapi - Win32 Release_TS_inline"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "php5nsapi___Win32_Release_TS_inline"
-# PROP BASE Intermediate_Dir "php5nsapi___Win32_Release_TS_inline"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "..\..\Release_TS_inline"
-# PROP Intermediate_Dir "Release_TS_inline"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "php5nsapi_EXPORTS" /YX /FD /c
-# ADD CPP /nologo /MD /W3 /GX /O2 /I "." /I "..\..\..\php_build\nsapi30\include\\" /I "..\..\include" /I "..\..\win32" /I "..\..\Zend" /I "..\.." /I "..\..\..\bindlib_w32" /I "..\..\main" /I "..\..\tsrm" /D ZEND_DEBUG=0 /D "ZEND_WIN32_FORCE_INLINE" /D "NDEBUG" /D "XP_WIN32" /D "ZTS" /D "ZEND_WIN32" /D "PHP_WIN32" /D "_WINDOWS" /D "_USRDLL" /D "php5nsapi_EXPORTS" /D "WIN32" /D "_MBCS" /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386
-# ADD LINK32 ns-httpd30.lib php5ts.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /base:"0x62000000" /version:4.0 /dll /machine:I386 /libpath:"..\..\..\php_build\nsapi30\lib\\" /libpath:"..\..\Release_TS_inline" /libpath:"..\..\TSRM\Release_TS_inline" /libpath:"..\..\Zend\Release_TS_inline"
-
-!ELSEIF "$(CFG)" == "php5nsapi - Win32 Debug_TS"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "php5nsapi___Win32_Debug_TS"
-# PROP BASE Intermediate_Dir "php5nsapi___Win32_Debug_TS"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "..\..\Debug_TS"
-# PROP Intermediate_Dir "Debug_TS"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "php5nsapi_EXPORTS" /YX /FD /GZ /c
-# ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "." /I "..\..\..\php_build\nsapi30\include\\" /I "..\..\include" /I "..\..\win32" /I "..\..\Zend" /I "..\.." /I "..\..\..\bindlib_w32" /I "..\..\main" /I "..\..\tsrm" /D "_Debug_TS" /D ZEND_DEBUG=1 /D "_DEBUG" /D "XP_WIN32" /D "ZTS" /D "ZEND_WIN32" /D "PHP_WIN32" /D "_WINDOWS" /D "_USRDLL" /D "php5nsapi_EXPORTS" /D "WIN32" /D "_MBCS" /FR /YX /FD /GZ /c
-# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 ns-httpd30.lib php5ts_debug.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /base:"0x62000000" /version:4.0 /dll /debug /machine:I386 /pdbtype:sept /libpath:"..\..\..\php_build\nsapi30\lib\\" /libpath:"..\..\Debug_TS" /libpath:"..\..\TSRM\Debug_TS" /libpath:"..\..\Zend\Debug_TS"
-
-!ENDIF
-
-# Begin Target
-
-# Name "php5nsapi - Win32 Release_TS"
-# Name "php5nsapi - Win32 Release_TS_inline"
-# Name "php5nsapi - Win32 Debug_TS"
-# Begin Group "Source Files"
-
-# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
-# Begin Source File
-
-SOURCE=.\nsapi.c
-# End Source File
-# End Group
-# Begin Group "Header Files"
-
-# PROP Default_Filter "h;hpp;hxx;hm;inl"
-# End Group
-# Begin Group "Resource Files"
-
-# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
-# End Group
-# End Target
-# End Project
diff --git a/sapi/phttpd/CREDITS b/sapi/phttpd/CREDITS
deleted file mode 100644
index 134cc54825..0000000000
--- a/sapi/phttpd/CREDITS
+++ /dev/null
@@ -1,2 +0,0 @@
-phttpd
-Thies C. Arntzen
diff --git a/sapi/phttpd/README b/sapi/phttpd/README
deleted file mode 100644
index cdb6f7c381..0000000000
--- a/sapi/phttpd/README
+++ /dev/null
@@ -1,5 +0,0 @@
-phttpd sapi module.
-
-THIS IS BY NO MEANS COMPLETE NOR USABLE RIGHT NOW!
-
-thies@thieso.net 03.01.2000
diff --git a/sapi/phttpd/config.m4 b/sapi/phttpd/config.m4
deleted file mode 100644
index 75c6d66891..0000000000
--- a/sapi/phttpd/config.m4
+++ /dev/null
@@ -1,25 +0,0 @@
-dnl
-dnl $Id$
-dnl
-
-RESULT=no
-AC_MSG_CHECKING(for PHTTPD support)
-AC_ARG_WITH(phttpd,
-[ --with-phttpd=DIR Build PHP as phttpd module],
-[
- if test ! -d $withval ; then
- AC_MSG_ERROR(You did not specify a directory)
- fi
- PHP_BUILD_THREAD_SAFE
- PHTTPD_DIR=$withval
- PHP_ADD_INCLUDE($PHTTPD_DIR/include)
- AC_DEFINE(HAVE_PHTTPD,1,[Whether you have phttpd])
- PHP_SELECT_SAPI(phttpd, shared, phttpd.c)
- INSTALL_IT="\$(INSTALL) -m 0755 $SAPI_SHARED \$(INSTALL_ROOT)$PHTTPD_DIR/modules/"
- RESULT=yes
-])
-AC_MSG_RESULT($RESULT)
-
-dnl ## Local Variables:
-dnl ## tab-width: 4
-dnl ## End:
diff --git a/sapi/phttpd/php.sym b/sapi/phttpd/php.sym
deleted file mode 100644
index f10b883a99..0000000000
--- a/sapi/phttpd/php.sym
+++ /dev/null
@@ -1,4 +0,0 @@
-pm_init
-pm_exit
-pm_request
-
diff --git a/sapi/phttpd/php_phttpd.h b/sapi/phttpd/php_phttpd.h
deleted file mode 100644
index 8ae73cde4c..0000000000
--- a/sapi/phttpd/php_phttpd.h
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Thies C. Arntzen <thies@thieso.net> |
- +----------------------------------------------------------------------+
-*/
-
-#ifndef PHP_PHTTPD_H
-#define PHP_PHTTPD_H
-
-#include <phttpd.h>
-
-#endif
diff --git a/sapi/phttpd/phttpd.c b/sapi/phttpd/phttpd.c
deleted file mode 100644
index 5627be7129..0000000000
--- a/sapi/phttpd/phttpd.c
+++ /dev/null
@@ -1,305 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Thies C. Arntzen <thies@thieso.net> |
- | Based on aolserver SAPI by Sascha Schumann <sascha@schumann.cx> |
- +----------------------------------------------------------------------+
-*/
-
-#include "php.h"
-#include "SAPI.h"
-#include "php_main.h"
-
-#ifdef HAVE_PHTTPD
-
-#include "ext/standard/info.h"
-
-#ifndef ZTS
-#error PHTTPD module is only useable in thread-safe mode
-#endif
-
-#include "php_phttpd.h"
-
-typedef struct {
- struct connectioninfo *cip;
- struct stat sb;
-} phttpd_globals_struct;
-
-static int ph_globals_id;
-
-#define PHG(v) TSRMG(ph_globals_id, phttpd_globals_struct *, v)
-
-static int
-php_phttpd_startup(sapi_module_struct *sapi_module)
-{
- fprintf(stderr,"***php_phttpd_startup\n");
-
- if (php_module_startup(sapi_module, NULL, 0)) {
- return FAILURE;
- } else {
- return SUCCESS;
- }
-}
-
-static int
-php_phttpd_sapi_ub_write(const char *str, uint str_length TSRMLS_DC)
-{
- int sent_bytes;
-
- sent_bytes = fd_write(PHG(cip)->fd, str, str_length);
-
- if (sent_bytes == -1) {
- php_handle_aborted_connection();
- }
-
- return sent_bytes;
-}
-
-static int
-php_phttpd_sapi_header_handler(sapi_header_struct *sapi_header, sapi_headers_struct *sapi_headers TSRMLS_DC)
-{
- char *header_name, *header_content;
- char *p;
- TSRMLS_FETCH();
-
- http_sendheaders(PHG(cip)->fd, PHG(cip), SG(sapi_headers).http_response_code, NULL);
-
- header_name = sapi_header->header;
- header_content = p = strchr(header_name, ':');
-
- if (p) {
- *p = '\0';
- do {
- header_content++;
- } while (*header_content == ' ');
-
- fd_printf(PHG(cip)->fd,"%s: %s\n", header_name, header_content);
-
- *p = ':';
- }
-
- sapi_free_header(sapi_header);
-
- return 0;
-}
-
-static int
-php_phttpd_sapi_send_headers(sapi_headers_struct *sapi_headers TSRMLS_DC)
-{
- TSRMLS_FETCH();
-
- if (SG(sapi_headers).send_default_content_type) {
- fd_printf(PHG(cip)->fd,"Content-Type: text/html\n");
- }
-
- fd_putc('\n', PHG(cip)->fd);
-
- return SAPI_HEADER_SENT_SUCCESSFULLY;
-}
-
-static char *
-php_phttpd_sapi_read_cookies(TSRMLS_D)
-{
-
-/*
- int i;
- char *http_cookie = NULL;
- NTSRMLS_FETCH();
-
- i = Ns_SetIFind(NSG(conn->headers), "cookie");
- if(i != -1) {
- http_cookie = Ns_SetValue(NSG(conn->headers), i);
- }
-
- return http_cookie;
-*/
- fprintf(stderr,"***php_phttpd_sapi_read_cookies\n");
-
- return 0;
-}
-
-static int
-php_phttpd_sapi_read_post(char *buf, uint count_bytes TSRMLS_DC)
-{
-/*
- uint max_read;
- uint total_read = 0;
- NTSRMLS_FETCH();
-
- max_read = MIN(NSG(data_avail), count_bytes);
-
- total_read = Ns_ConnRead(NSG(conn), buf, max_read);
-
- if(total_read == NS_ERROR) {
- total_read = -1;
- } else {
- NSG(data_avail) -= total_read;
- }
-
- return total_read;
-*/
- fprintf(stderr,"***php_phttpd_sapi_read_post\n");
- return 0;
-}
-
-static sapi_module_struct phttpd_sapi_module = {
- "phttpd",
- "PHTTPD",
-
- php_phttpd_startup, /* startup */
- php_module_shutdown_wrapper, /* shutdown */
-
- NULL, /* activate */
- NULL, /* deactivate */
-
- php_phttpd_sapi_ub_write, /* unbuffered write */
- NULL, /* flush */
- NULL, /* get uid */
- NULL, /* getenv */
-
- php_error, /* error handler */
-
- php_phttpd_sapi_header_handler, /* header handler */
- php_phttpd_sapi_send_headers, /* send headers handler */
- NULL, /* send header handler */
-
- php_phttpd_sapi_read_post, /* read POST data */
- php_phttpd_sapi_read_cookies, /* read Cookies */
-
- NULL, /* register server variables */
- NULL, /* Log message */
-
- STANDARD_SAPI_MODULE_PROPERTIES
-};
-
-static void
-php_phttpd_request_ctor(TSRMLS_D TSRMLS_DC)
-{
- memset(&SG(request_info), 0, sizeof(sapi_globals_struct)); /* pfusch! */
-
- SG(request_info).query_string = PHG(cip)->hip->request;
- SG(request_info).request_method = PHG(cip)->hip->method;
- SG(request_info).path_translated = malloc(MAXPATHLEN);
- SG(sapi_headers).http_response_code = 200;
- if (url_expand(PHG(cip)->hip->url, SG(request_info).path_translated, MAXPATHLEN, &PHG(sb), NULL, NULL) == NULL) {
- /* handle error */
- }
-
-#if 0
- char *server;
- Ns_DString ds;
- char *root;
- int index;
- char *tmp;
-
- server = Ns_ConnServer(NSG(conn));
-
- Ns_DStringInit(&ds);
- Ns_UrlToFile(&ds, server, NSG(conn->request->url));
-
- /* path_translated is the absolute path to the file */
- SG(request_info).path_translated = strdup(Ns_DStringValue(&ds));
- Ns_DStringFree(&ds);
- root = Ns_PageRoot(server);
- SG(request_info).request_uri = SG(request_info).path_translated + strlen(root);
- SG(request_info).content_length = Ns_ConnContentLength(NSG(conn));
- index = Ns_SetIFind(NSG(conn)->headers, "content-type");
- SG(request_info).content_type = index == -1 ? NULL :
- Ns_SetValue(NSG(conn)->headers, index);
-
- tmp = Ns_ConnAuthUser(NSG(conn));
- if(tmp) {
- tmp = estrdup(tmp);
- }
- SG(request_info).auth_user = tmp;
-
- tmp = Ns_ConnAuthPasswd(NSG(conn));
- if(tmp) {
- tmp = estrdup(tmp);
- }
- SG(request_info).auth_password = tmp;
-
- NSG(data_avail) = SG(request_info).content_length;
-#endif
-}
-
-static void
-php_phttpd_request_dtor(TSRMLS_D TSRMLS_DC)
-{
- free(SG(request_info).path_translated);
-}
-
-
-int php_doit(TSRMLS_D TSRMLS_DC)
-{
- struct stat sb;
- zend_file_handle file_handle;
- struct httpinfo *hip = PHG(cip)->hip;
- TSRMLS_FETCH();
-
- if (php_request_startup(TSRMLS_C) == FAILURE) {
- return -1;
- }
-
- file_handle.type = ZEND_HANDLE_FILENAME;
- file_handle.filename = SG(request_info).path_translated;
- file_handle.free_filename = 0;
-
-/*
- php_phttpd_hash_environment(TSRMLS_C);
-*/
- php_execute_script(&file_handle TSRMLS_CC);
- php_request_shutdown(NULL);
-
- return SG(sapi_headers).http_response_code;
-}
-
-int pm_init(const char **argv)
-{
- tsrm_startup(1, 1, 0, NULL);
- sapi_startup(&phttpd_sapi_module);
- phttpd_sapi_module.startup(&phttpd_sapi_module);
-
- ts_allocate_id(&ph_globals_id, sizeof(phttpd_globals_struct), NULL, NULL);
-
- return 0;
-}
-
-void pm_exit(void)
-{
- fprintf(stderr,"***pm_exit\n");
-}
-
-int pm_request(struct connectioninfo *cip)
-{
- struct httpinfo *hip = cip->hip;
- int status;
- TSRMLS_FETCH();
-
- if (strcasecmp(hip->method, "GET") == 0 ||
- strcasecmp(hip->method, "HEAD") == 0 ||
- strcasecmp(hip->method, "POST") == 0) {
- PHG(cip) = cip;
-
- php_phttpd_request_ctor(TSRMLS_C);
- status = php_doit(TSRMLS_C);
- php_phttpd_request_dtor(TSRMLS_C);
-
- return status;
- } else {
- return -2;
- }
-}
-
-#endif
diff --git a/sapi/pi3web/CREDITS b/sapi/pi3web/CREDITS
deleted file mode 100644
index c4541f89da..0000000000
--- a/sapi/pi3web/CREDITS
+++ /dev/null
@@ -1,2 +0,0 @@
-pi3web
-Holger Zimmermann
diff --git a/sapi/pi3web/README b/sapi/pi3web/README
deleted file mode 100644
index e3e523e940..0000000000
--- a/sapi/pi3web/README
+++ /dev/null
@@ -1,50 +0,0 @@
-PHP5 Module
-==========
-This module requires PHP5 as thread safe shared library. Have a look
-into the INSTALL file which accompanies that distribution.
-
-If you distribute this software bundled with the PHP software in source
-or binary form, then you must adhere to the PHP copyright conditions -
-the terms are reasonable.
-
-You should have checked out and built the PHP5 source package from the
-PHP CVS tree into the Pi3Web source directory called 'PHP5' first. Then
-build PHP5 as Pi3Web module and after that build the Pi3Web PHP5 wrapper:
-
-1. Checkout PHP5
-================
-cvs -d :pserver:cvsread@cvs.php.net:/repository login
-The required password is phpfi
-
-cvs -z3 -d :pserver:cvsread@cvs.php.net:/repository co php5
-
-You must also checkout the TSRM and the ZEND module from the ZEND cvs tree
-into the PHP5 root directory
-
-cvs -d :pserver:cvsread@cvs.zend.com:/repository login
-The required password is zend
-
-cvs -z3 -d :pserver:cvsread@cvs.zend.com:/repository co Zend TSRM
-
-2. Build PHP5
-=============
-2.1 POSIX
----------
-cd ./php5
-./buildconf
-./configure --with-pi3web
-make
-
-2.2 Win32
----------
-other required downloads from the php website
- - bison 1.25
- - bindlib32
- - number4.tar.gz
-nmake php5dllts.mak
-
-3. Build Pi3Web PHP5 wrapper
-============================
-Run make in the Pi3Web /Source/PHP5 directory.
-
-For further information refer to http://www.php.net/version4/
diff --git a/sapi/pi3web/config.m4 b/sapi/pi3web/config.m4
deleted file mode 100644
index ba6a166c16..0000000000
--- a/sapi/pi3web/config.m4
+++ /dev/null
@@ -1,35 +0,0 @@
-dnl
-dnl $Id$
-dnl
-
-RESULT=no
-AC_MSG_CHECKING(for Pi3Web support)
-
-AC_ARG_WITH(pi3web,
-[ --with-pi3web[=DIR] Build PHP as Pi3Web module],
-[
-if test "$withval" != "no"; then
- if test "$withval" = "yes"; then
- PI3PATH=../.. # the default
- else
- PI3PATH=$withval
- fi
- test -f "$PI3PATH/PiAPI/PiAPI.h" || AC_MSG_ERROR(Unable to find PiAPI.h in $PI3PATH/PiAPI)
- PHP_BUILD_THREAD_SAFE
- AC_DEFINE(WITH_PI3WEB,1,[whether you want Pi3Web support])
- PHP_ADD_INCLUDE($PI3PATH/PiAPI)
- PHP_ADD_INCLUDE($PI3PATH/Pi2API)
- PHP_ADD_INCLUDE($PI3PATH/Pi3API)
- PHP_ADD_INCLUDE($PI3PATH/PHP5)
- PHP_SELECT_SAPI(pi3web, shared, pi3web_sapi.c)
- INSTALL_IT="\$(SHELL) \$(srcdir)/install-sh -m 0755 $SAPI_SHARED \$(INSTALL_ROOT)$PI3PATH/bin/"
- RESULT=yes
-else
- RESULT=no
-fi
-])
-AC_MSG_RESULT($RESULT)
-
-dnl ## Local Variables:
-dnl ## tab-width: 4
-dnl ## End:
diff --git a/sapi/pi3web/config.w32 b/sapi/pi3web/config.w32
deleted file mode 100644
index a5393e621b..0000000000
--- a/sapi/pi3web/config.w32
+++ /dev/null
@@ -1,16 +0,0 @@
-// vim:ft=javascript
-// $Id$
-
-ARG_WITH('pi3web', 'Pi3Web', 'no');
-
-if (PHP_PI3WEB != "no") {
- if (CHECK_HEADER_ADD_INCLUDE('PiAPI.h', 'CFLAGS_PI3WEB', PHP_PHP_BUILD + "\\Pi3Web\\include;" + PHP_PI3WEB) &&
- CHECK_LIB('piapi.lib', 'pi3web', PHP_PHP_BUILD + "\\Pi3Web\\lib;" + PHP_PI3WEB) &&
- CHECK_LIB('pi2api.lib', 'pi3web', PHP_PHP_BUILD + "\\Pi3Web\\lib;" + PHP_PI3WEB) &&
- CHECK_LIB('pi3api.lib', 'pi3web', PHP_PHP_BUILD + "\\Pi3Web\\lib;" + PHP_PI3WEB)) {
- SAPI('pi3web', 'pi3web_sapi.c', 'php' + PHP_VERSION + 'pi3web.dll', '/D PHP5PI3WEB_EXPORTS');
- AC_DEFINE('WITH_PI3WEB', 1);
- } else {
- WARNING('Pi3Web not enabled; headers/libraries not found');
- }
-}
diff --git a/sapi/pi3web/php.sym b/sapi/pi3web/php.sym
deleted file mode 100644
index e69de29bb2..0000000000
--- a/sapi/pi3web/php.sym
+++ /dev/null
diff --git a/sapi/pi3web/php5pi3web.dsp b/sapi/pi3web/php5pi3web.dsp
deleted file mode 100644
index 3ba5224272..0000000000
--- a/sapi/pi3web/php5pi3web.dsp
+++ /dev/null
@@ -1,136 +0,0 @@
-# Microsoft Developer Studio Project File - Name="php5pi3web" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=php5pi3web - Win32 Debug_TS
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "php5pi3web.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "php5pi3web.mak" CFG="php5pi3web - Win32 Debug_TS"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "php5pi3web - Win32 Debug_TS" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "php5pi3web - Win32 Release_TS" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "php5pi3web - Win32 Release_TS_inline" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "php5pi3web - Win32 Debug_TS"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug_TS"
-# PROP BASE Intermediate_Dir "Debug_TS"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "..\..\Debug_TS"
-# PROP Intermediate_Dir "Debug_TS"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MTd /W3 /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "php5pi3web_EXPORTS" /YX /FD /GZ /c
-# ADD CPP /nologo /MDd /W3 /GX /ZI /Od /I "...\..\include" /I "..\..\win32" /I "..\..\Zend" /I "..\.." /I "..\..\main" /I "..\..\TSRM" /D "_DEBUG" /D ZEND_DEBUG=1 /D "_WINDOWS" /D "_USRDLL" /D "ZTS" /D "ZEND_WIN32" /D "PHP_WIN32" /D "WIN32" /D "_MBCS" /D "PHP5PI3WEB_EXPORTS" /FR /YX /FD /GZ /c
-# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x40d /d "_DEBUG"
-# ADD RSC /l 0x40d /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 php5ts_debug.lib kernel32.lib user32.lib gdi32.lib wsock32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib PiAPI.lib Pi2API.lib Pi3API.lib /nologo /version:4.0 /dll /debug /machine:I386 /nodefaultlib:"libcmt" /nodefaultlib:"libc" /pdbtype:sept /libpath:"..\..\Debug_TS"
-
-!ELSEIF "$(CFG)" == "php5pi3web - Win32 Release_TS"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release_TS"
-# PROP BASE Intermediate_Dir "Release_TS"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "..\..\Release_TS"
-# PROP Intermediate_Dir "Release_TS"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "php5pi3web_EXPORTS" /YX /FD /c
-# ADD CPP /nologo /MD /W3 /GX /O2 /I "...\..\include" /I "..\..\win32" /I "..\..\Zend" /I "..\.." /I "..\..\main" /I "..\..\TSRM" /D "NDEBUG" /D ZEND_DEBUG=0 /D "_WINDOWS" /D "_USRDLL" /D "ZTS" /D "ZEND_WIN32" /D "PHP_WIN32" /D "WIN32" /D "_MBCS" /D "PHP5PI3WEB_EXPORTS" /FR /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x40d /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386
-# ADD LINK32 php5ts.lib kernel32.lib user32.lib gdi32.lib wsock32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib PiAPI.lib Pi2API.lib Pi3API.lib /nologo /version:4.0 /dll /machine:I386 /nodefaultlib:"libc.lib" /nodefaultlib:"libcmt.lib" /libpath:"..\..\Release_TS"
-
-!ELSEIF "$(CFG)" == "php5pi3web - Win32 Release_TS_inline"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "php5pi3web___Win32_Release_TS_inline"
-# PROP BASE Intermediate_Dir "php5pi3web___Win32_Release_TS_inline"
-# PROP BASE Ignore_Export_Lib 0
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "..\..\Release_TS_inline"
-# PROP Intermediate_Dir "Release_TS_inline"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MD /W3 /GX /O2 /I ".." /I "..\main" /I "..\regex" /I "..\..\bindlib_w32" /I "..\Zend" /I "..\TSRM" /I "..\ext\mysql\libmysql" /I "..\..\..\PiAPI" /I "..\..\..\Pi2API" /I "..\..\..\Pi3API" /D "NDEBUG" /D ZEND_DEBUG=0 /D "_WINDOWS" /D "_USRDLL" /D "PHP5DLLTS_EXPORTS" /D "PHP_EXPORTS" /D "LIBZEND_EXPORTS" /D "TSRM_EXPORTS" /D "SAPI_EXPORTS" /D "MSVC5" /D "ZTS" /D "ZEND_WIN32" /D "PHP_WIN32" /D "WIN32" /D "_MBCS" /FR /YX /FD /c
-# ADD CPP /nologo /MD /W3 /GX /O2 /I "...\..\include" /I "..\..\win32" /I "..\..\Zend" /I "..\.." /I "..\..\main" /I "..\..\TSRM" /D "NDEBUG" /D ZEND_DEBUG=0 /D "ZEND_WIN32_FORCE_INLINE" /D "_WINDOWS" /D "_USRDLL" /D "ZTS" /D "ZEND_WIN32" /D "PHP_WIN32" /D "WIN32" /D "_MBCS" /D "PHP5PI3WEB_EXPORTS" /FR /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib wsock32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ZendTS.lib TSRM.lib resolv.lib libmysql.lib PiAPI.lib Pi2API.lib Pi3API.lib /nologo /version:4.0 /dll /machine:I386 /nodefaultlib:"libc.lib" /nodefaultlib:"libcmt.lib" /out:"..\Release_TS\php5ts.dll" /libpath:"..\TSRM\Release_TS" /libpath:"..\Zend\Release_TS" /libpath:"..\..\bindlib_w32\Release" /libpath:"..\ext\mysql\libmysql\Release_TS" /libpath:"Release_TS" /libpath:"..\..\..\PiAPI" /libpath:"..\..\..\Pi2API" /libpath:"..\..\..\Pi3API"
-# ADD LINK32 php5ts.lib kernel32.lib user32.lib gdi32.lib wsock32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib PiAPI.lib Pi2API.lib Pi3API.lib /nologo /version:4.0 /dll /machine:I386 /nodefaultlib:"libc.lib" /nodefaultlib:"libcmt.lib" /libpath:"..\..\Release_TS_inline"
-
-!ENDIF
-
-# Begin Target
-
-# Name "php5pi3web - Win32 Debug_TS"
-# Name "php5pi3web - Win32 Release_TS"
-# Name "php5pi3web - Win32 Release_TS_inline"
-# Begin Group "Source Files"
-
-# PROP Default_Filter ".c"
-# Begin Source File
-
-SOURCE=.\pi3web_sapi.c
-# End Source File
-# End Group
-# Begin Group "Header Files"
-
-# PROP Default_Filter ".h"
-# Begin Source File
-
-SOURCE=.\pi3web_sapi.h
-# End Source File
-# End Group
-# End Target
-# End Project
diff --git a/sapi/pi3web/pi3web_sapi.c b/sapi/pi3web/pi3web_sapi.c
deleted file mode 100644
index 1a6d36fdc7..0000000000
--- a/sapi/pi3web/pi3web_sapi.c
+++ /dev/null
@@ -1,483 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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. |
- +----------------------------------------------------------------------+
- | Pi3Web version 2.0 |
- +----------------------------------------------------------------------+
- | This file is committed by the Pi3 development group. |
- | (pi3web.sourceforge.net) |
- | |
- | Author: Holger Zimmermann (zimpel@users.sourceforge.net) |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-#define ZEND_INCLUDE_FULL_WINDOWS_HEADERS
-
-#include "php.h"
-#include "php_main.h"
-#include "php_variables.h"
-#include "SAPI.h"
-#include "php_globals.h"
-#include "ext/standard/info.h"
-#include "zend_highlight.h"
-#include "zend_indent.h"
-#include "zend_alloc.h"
-#include "ext/standard/basic_functions.h"
-#include "TSRM/TSRM.h"
-#include "PiAPI.h"
-#include "Pi3API.h"
-
-#include "pi3web_sapi.h"
-
-#define PI3WEB_SERVER_VAR_BUF_SIZE 1024
-
-int IWasLoaded=0;
-
-static char *pi3web_server_variables[] = {
- "ALL_HTTP",
- "AUTH_TYPE",
- "CONTENT_LENGTH",
- "CONTENT_TYPE",
- "GATEWAY_INTERFACE",
- "PATH_INFO",
- "PATH_TRANSLATED",
- "QUERY_STRING",
- "REQUEST_METHOD",
- "REMOTE_ADDR",
- "REMOTE_HOST",
- "REMOTE_USER",
- "SCRIPT_NAME",
- "SERVER_NAME",
- "SERVER_PORT",
- "SERVER_PROTOCOL",
- "SERVER_SOFTWARE",
- NULL
-};
-
-
-static void php_info_pi3web(ZEND_MODULE_INFO_FUNC_ARGS)
-{
- char **p = pi3web_server_variables;
- char variable_buf[PI3WEB_SERVER_VAR_BUF_SIZE];
- DWORD variable_len;
- LPCONTROL_BLOCK lpCB;
-
- lpCB = (LPCONTROL_BLOCK) SG(server_context);
-
- PUTS("<table border=0 cellpadding=3 cellspacing=1 width=600 align=center>\n");
- PUTS("<tr><th colspan=2 bgcolor=\"" PHP_HEADER_COLOR "\">Pi3Web Server Information</th></tr>\n");
- php_info_print_table_header(2, "Information Field", "Value");
- php_info_print_table_row(2, "Pi3Web SAPI module version", "$Id$");
- php_info_print_table_row(2, "Server Name Stamp", HTTPCore_getServerStamp());
- snprintf(variable_buf, 511, "%d", HTTPCore_debugEnabled());
- php_info_print_table_row(2, "Debug Enabled", variable_buf);
- PIPlatform_getCurrentDirectory( variable_buf, PI3WEB_SERVER_VAR_BUF_SIZE);
- php_info_print_table_row(2, "Current Path", variable_buf);
- if (lpCB->GetServerVariable(lpCB->ConnID, "SERVER_NAME", variable_buf, &variable_len)
- && variable_buf[0]) {
- php_info_print_table_row(2, "Main Virtual Hostname", variable_buf);
- };
- snprintf(variable_buf, 511, "%d", PIPlatform_getProcessId());
- php_info_print_table_row(2, "Server PID", variable_buf);
- php_info_print_table_row(2, "Server Platform", PIPlatform_getDescription());
-
- PUTS("</table><br />");
-
- PUTS("<table border=0 cellpadding=3 cellspacing=1 width=600 align=center>\n");
- PUTS("<tr><th colspan=2 bgcolor=\"" PHP_HEADER_COLOR "\">HTTP Request Information</th></tr>\n");
- php_info_print_table_row(2, "HTTP Request Line", lpCB->lpszReq);
- PUTS("<tr><th colspan=2 bgcolor=\"" PHP_HEADER_COLOR "\">HTTP Headers</th></tr>\n");
- php_info_print_table_header(2, "Server Variable", "Value");
- while (*p) {
- variable_len = PI3WEB_SERVER_VAR_BUF_SIZE;
- if (lpCB->GetServerVariable(lpCB->ConnID, *p, variable_buf, &variable_len)
- && variable_buf[0]) {
- php_info_print_table_row(2, *p, variable_buf);
- } else if (PIPlatform_getLastError() == PIAPI_EINVAL) {
- char *tmp_variable_buf;
-
- tmp_variable_buf = (char *) emalloc(variable_len);
- if (lpCB->GetServerVariable(lpCB->ConnID, *p, tmp_variable_buf, &variable_len)
- && variable_buf[0]) {
- php_info_print_table_row(2, *p, tmp_variable_buf);
- }
- efree(tmp_variable_buf);
- }
- p++;
- }
-
- PUTS("</table>");
-}
-
-
-static zend_module_entry php_pi3web_module = {
- STANDARD_MODULE_HEADER,
- "PI3WEB",
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- php_info_pi3web,
- NULL,
- STANDARD_MODULE_PROPERTIES
-};
-
-
-static int zend_pi3web_ub_write(const char *str, uint str_length TSRMLS_DC)
-{
- DWORD num_bytes = str_length;
- LPCONTROL_BLOCK cb;
-
- cb = (LPCONTROL_BLOCK) SG(server_context);
-
- if ( !IWasLoaded ) return 0;
- cb->WriteClient(cb->ConnID, (char *) str, &num_bytes, 0 );
-
- if (num_bytes != str_length)
- php_handle_aborted_connection();
- return num_bytes;
-}
-
-
-static int sapi_pi3web_header_handler(sapi_header_struct *sapi_header, sapi_headers_struct *sapi_headers TSRMLS_DC)
-{
- return SAPI_HEADER_ADD;
-}
-
-
-static void accumulate_header_length(sapi_header_struct *sapi_header, uint *total_length TSRMLS_DC)
-{
- *total_length += sapi_header->header_len+2;
-}
-
-
-static void concat_header(sapi_header_struct *sapi_header, char **combined_headers_ptr TSRMLS_DC)
-{
- memcpy(*combined_headers_ptr, sapi_header->header, sapi_header->header_len);
- *combined_headers_ptr += sapi_header->header_len;
- **combined_headers_ptr = '\r';
- (*combined_headers_ptr)++;
- **combined_headers_ptr = '\n';
- (*combined_headers_ptr)++;
-}
-
-
-static int sapi_pi3web_send_headers(sapi_headers_struct *sapi_headers TSRMLS_DC)
-{
- uint total_length = 2; /* account for the trailing \r\n */
- char *combined_headers, *combined_headers_ptr;
- LPCONTROL_BLOCK lpCB = (LPCONTROL_BLOCK) SG(server_context);
- sapi_header_struct default_content_type;
-
- if ( !IWasLoaded ) return SAPI_HEADER_SENT_SUCCESSFULLY;
-
-
- if (SG(sapi_headers).send_default_content_type) {
- sapi_get_default_content_type_header(&default_content_type TSRMLS_CC);
- accumulate_header_length(&default_content_type, (void *) &total_length TSRMLS_CC);
- }
- zend_llist_apply_with_argument(&SG(sapi_headers).headers, (llist_apply_with_arg_func_t) accumulate_header_length, (void *) &total_length TSRMLS_CC);
-
- /* Generate headers */
- combined_headers = (char *) emalloc(total_length+1);
- combined_headers_ptr = combined_headers;
- if (SG(sapi_headers).send_default_content_type) {
- concat_header(&default_content_type, (void *) &combined_headers_ptr TSRMLS_CC);
- sapi_free_header(&default_content_type); /* we no longer need it */
- }
- zend_llist_apply_with_argument(&SG(sapi_headers).headers, (llist_apply_with_arg_func_t) concat_header, (void *) &combined_headers_ptr TSRMLS_CC);
- *combined_headers_ptr++ = '\r';
- *combined_headers_ptr++ = '\n';
- *combined_headers_ptr = 0;
-
- lpCB->dwHttpStatusCode = SG(sapi_headers).http_response_code;
- lpCB->SendHeaderFunction(lpCB->ConnID, &total_length, (LPDWORD) combined_headers);
-
- efree(combined_headers);
- if (SG(sapi_headers).http_status_line) {
- efree(SG(sapi_headers).http_status_line);
- SG(sapi_headers).http_status_line = 0;
- }
- return SAPI_HEADER_SENT_SUCCESSFULLY;
-}
-
-
-static int php_pi3web_startup(sapi_module_struct *sapi_module)
-{
- if (php_module_startup(sapi_module, &php_pi3web_module, 1)==FAILURE) {
- return FAILURE;
- } else {
- return SUCCESS;
- }
-}
-
-
-static int sapi_pi3web_read_post(char *buffer, uint count_bytes TSRMLS_DC)
-{
- LPCONTROL_BLOCK lpCB = (LPCONTROL_BLOCK) SG(server_context);
- DWORD read_from_buf=0;
- DWORD read_from_input=0;
- DWORD total_read=0;
-
- if ((DWORD)SG(read_post_bytes) < lpCB->cbAvailable) {
- read_from_buf = MIN(lpCB->cbAvailable-SG(read_post_bytes), count_bytes);
- memcpy(buffer, lpCB->lpbData+SG(read_post_bytes), read_from_buf);
- total_read += read_from_buf;
- }
- if (read_from_buf<count_bytes
- && (SG(read_post_bytes)+read_from_buf) < lpCB->cbTotalBytes) {
- DWORD cbRead=0, cbSize;
-
- read_from_input = MIN(count_bytes-read_from_buf, lpCB->cbTotalBytes-SG(read_post_bytes)-read_from_buf);
- while (cbRead < read_from_input) {
- cbSize = read_from_input - cbRead;
- if (!lpCB->ReadClient(lpCB->ConnID, buffer+read_from_buf+cbRead, &cbSize) || cbSize==0) {
- break;
- }
- cbRead += cbSize;
- }
- total_read += cbRead;
- }
-
- /* removed after re-testing POST with Pi3Web 2.0.2 */
- /* SG(read_post_bytes) += total_read; */
- return total_read;
-}
-
-
-static char *sapi_pi3web_read_cookies(TSRMLS_D)
-{
- LPCONTROL_BLOCK lpCB = (LPCONTROL_BLOCK) SG(server_context);
- char variable_buf[PI3WEB_SERVER_VAR_BUF_SIZE];
- DWORD variable_len = PI3WEB_SERVER_VAR_BUF_SIZE;
-
- if (lpCB->GetServerVariable(lpCB->ConnID, "HTTP_COOKIE", variable_buf, &variable_len)) {
- return estrndup(variable_buf, variable_len);
- } else if (PIPlatform_getLastError()==PIAPI_EINVAL) {
- char *tmp_variable_buf = (char *) emalloc(variable_len+1);
-
- if (lpCB->GetServerVariable(lpCB->ConnID, "HTTP_COOKIE", tmp_variable_buf, &variable_len)) {
- tmp_variable_buf[variable_len] = 0;
- return tmp_variable_buf;
- } else {
- efree(tmp_variable_buf);
- }
- }
- return NULL;
-}
-
-static void init_request_info(LPCONTROL_BLOCK lpCB TSRMLS_DC)
-{
- SG(server_context) = lpCB;
- SG(request_info).request_method = lpCB->lpszMethod;
- SG(request_info).query_string = lpCB->lpszQueryString;
- SG(request_info).path_translated = lpCB->lpszPathTranslated;
- SG(request_info).request_uri = lpCB->lpszUri;
- SG(request_info).content_type = lpCB->lpszContentType;
- SG(request_info).content_length = lpCB->cbTotalBytes;
- SG(request_info).auth_user = (lpCB->lpszUser) ? (char *)estrdup((const char *)(lpCB->lpszUser)) : 0;
- SG(request_info).auth_password = (lpCB->lpszPassword) ? (char *)estrdup((const char *)(lpCB->lpszPassword)) : 0;
- SG(sapi_headers).http_response_code = 200;
-}
-
-static void sapi_pi3web_register_variables(zval *track_vars_array TSRMLS_DC)
-{
- char static_variable_buf[PI3WEB_SERVER_VAR_BUF_SIZE];
- char *variable_buf;
- DWORD variable_len = PI3WEB_SERVER_VAR_BUF_SIZE;
- char *variable;
- char *strtok_buf = NULL;
- LPCONTROL_BLOCK lpCB = (LPCONTROL_BLOCK) SG(server_context);
- char **p = pi3web_server_variables;
- p++; // Jump over ALL_HTTP;
-
- /* Register the standard server variables */
- while (*p) {
- variable_len = PI3WEB_SERVER_VAR_BUF_SIZE;
- if (lpCB->GetServerVariable(lpCB->ConnID, *p, static_variable_buf, &variable_len)
- && (variable_len > 1)) {
- php_register_variable(*p, static_variable_buf, track_vars_array TSRMLS_CC);
- } else if (PIPlatform_getLastError()==PIAPI_EINVAL) {
- variable_buf = (char *) emalloc(variable_len);
- if (lpCB->GetServerVariable(lpCB->ConnID, *p, variable_buf, &variable_len)) {
- php_register_variable(*p, variable_buf, track_vars_array TSRMLS_CC);
- }
- efree(variable_buf);
- }
- p++;
- }
-
- /* PHP_SELF support */
- variable_len = PI3WEB_SERVER_VAR_BUF_SIZE;
- if (lpCB->GetServerVariable(lpCB->ConnID, "SCRIPT_NAME", static_variable_buf, &variable_len)
- && (variable_len > 1)) {
- php_register_variable("PHP_SELF", static_variable_buf, track_vars_array TSRMLS_CC);
- }
-
- variable_len = PI3WEB_SERVER_VAR_BUF_SIZE;
- if (lpCB->GetServerVariable(lpCB->ConnID, "ALL_HTTP", static_variable_buf, &variable_len)
- && (variable_len > 1)) {
- variable_buf = static_variable_buf;
- } else {
- if (PIPlatform_getLastError()==PIAPI_EINVAL) {
- variable_buf = (char *) emalloc(variable_len);
- if (!lpCB->GetServerVariable(lpCB->ConnID, "ALL_HTTP", variable_buf, &variable_len)) {
- efree(variable_buf);
- return;
- }
- } else {
- return;
- }
- }
- variable = php_strtok_r(variable_buf, "\r\n", &strtok_buf);
- while (variable) {
- char *colon = strchr(variable, ':');
-
- if (colon) {
- char *value = colon+1;
- while (*value==' ') {
- value++;
- }
- *colon = 0;
- php_register_variable(variable, value, track_vars_array TSRMLS_CC);
- *colon = ':';
- }
- variable = php_strtok_r(NULL, "\r\n", &strtok_buf);
- }
- if (variable_buf!=static_variable_buf) {
- efree(variable_buf);
- }
-}
-
-static sapi_module_struct pi3web_sapi_module = {
- "pi3web", /* name */
- "PI3WEB", /* pretty name */
-
- php_pi3web_startup, /* startup */
- php_module_shutdown_wrapper, /* shutdown */
- NULL, /* activate */
- NULL, /* deactivate */
- zend_pi3web_ub_write, /* unbuffered write */
- NULL, /* flush */
- NULL, /* get uid */
- NULL, /* getenv */
- php_error, /* error handler */
- sapi_pi3web_header_handler, /* header handler */
- sapi_pi3web_send_headers, /* send headers handler */
- NULL, /* send header handler */
- sapi_pi3web_read_post, /* read POST data */
- sapi_pi3web_read_cookies, /* read Cookies */
- sapi_pi3web_register_variables, /* register server variables */
- NULL, /* Log message */
-
- STANDARD_SAPI_MODULE_PROPERTIES
-};
-
-MODULE_API DWORD PHP5_wrapper(LPCONTROL_BLOCK lpCB)
-{
- zend_file_handle file_handle;
- int iRet = PIAPI_COMPLETED;
- TSRMLS_FETCH();
-
- zend_first_try {
- file_handle.filename = lpCB->lpszFileName;
- file_handle.free_filename = 0;
- file_handle.type = ZEND_HANDLE_FILENAME;
- file_handle.opened_path = NULL;
-
- init_request_info(lpCB TSRMLS_CC);
- php_request_startup(TSRMLS_C);
-
- switch ( lpCB->dwBehavior ) {
- case PHP_MODE_STANDARD:
- iRet = ( php_execute_script( &file_handle TSRMLS_CC ) ) ?
- PIAPI_COMPLETED : PIAPI_ERROR;
- break;
- case PHP_MODE_HIGHLIGHT: {
- zend_syntax_highlighter_ini syntax_highlighter_ini;
- if ( open_file_for_scanning( &file_handle TSRMLS_CC ) == SUCCESS )
- {
- php_get_highlight_struct( &syntax_highlighter_ini );
- zend_highlight( &syntax_highlighter_ini TSRMLS_CC );
- }
- else
- {
- iRet = PIAPI_ERROR;
- };
- };
- break;
- case PHP_MODE_INDENT: {
- sapi_header_line ctr = {0};
-
- ctr.line = "Content-Type: text/plain";
- ctr.line_len = strlen(ctr.line);
-
- sapi_header_op(SAPI_HEADER_REPLACE, &ctr TSRMLS_CC);
- }
- if ( open_file_for_scanning( &file_handle TSRMLS_CC ) == SUCCESS )
- {
- zend_indent();
- }
- else
- {
- iRet = PIAPI_ERROR;
- };
- break;
- case PHP_MODE_LINT:
- iRet = (php_lint_script(&file_handle TSRMLS_CC) == SUCCESS) ?
- PIAPI_COMPLETED : PIAPI_ERROR;
- break;
- default:
- iRet = PIAPI_ERROR;;
- }
-
- if (SG(request_info).cookie_data) {
- efree(SG(request_info).cookie_data);
- };
-
- php_request_shutdown(NULL);
- } zend_catch {
- iRet = PIAPI_ERROR;
- } zend_end_try();
- return iRet;
-}
-
-MODULE_API BOOL PHP5_startup() {
- tsrm_startup(1, 1, 0, NULL);
- sapi_startup(&pi3web_sapi_module);
- if (pi3web_sapi_module.startup) {
- pi3web_sapi_module.startup(&pi3web_sapi_module);
- };
- IWasLoaded = 1;
- return IWasLoaded;
-};
-
-MODULE_API BOOL PHP5_shutdown() {
- if (pi3web_sapi_module.shutdown) {
- pi3web_sapi_module.shutdown(&pi3web_sapi_module);
- };
- sapi_shutdown();
- tsrm_shutdown();
- IWasLoaded = 0;
- return !IWasLoaded;
-};
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- */
diff --git a/sapi/pi3web/pi3web_sapi.h b/sapi/pi3web/pi3web_sapi.h
deleted file mode 100644
index c358518362..0000000000
--- a/sapi/pi3web/pi3web_sapi.h
+++ /dev/null
@@ -1,95 +0,0 @@
-#ifndef _PI3WEB_SAPI_H_
-#define _PI3WEB_SAPI_H_
-
-#ifdef PHP_WIN32
-# include <windows.h>
-# include <httpext.h>
-# ifdef PHP5PI3WEB_EXPORTS
-# define MODULE_API __declspec(dllexport)
-# else
-# define MODULE_API __declspec(dllimport)
-# endif
-#else
-# define far
-# define MODULE_API
-
- typedef int BOOL;
- typedef void far *LPVOID;
- typedef LPVOID HCONN;
- typedef unsigned long DWORD;
- typedef DWORD far *LPDWORD;
- typedef char CHAR;
- typedef CHAR *LPSTR;
- typedef unsigned char BYTE;
- typedef BYTE far *LPBYTE;
-#endif
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#define PHP_MODE_STANDARD 1
-#define PHP_MODE_HIGHLIGHT 2
-#define PHP_MODE_INDENT 3
-#define PHP_MODE_LINT 4
-
-//
-// passed to the procedure on a new request
-//
-typedef struct _CONTROL_BLOCK {
- DWORD cbSize; // size of this struct.
- HCONN ConnID; // Context number not to be modified!
- DWORD dwHttpStatusCode; // HTTP Status code
- CHAR lpszLogData[80]; // null terminated log info
-
- LPSTR lpszMethod; // REQUEST_METHOD
- LPSTR lpszQueryString; // QUERY_STRING
- LPSTR lpszPathInfo; // PATH_INFO
- LPSTR lpszPathTranslated; // PATH_TRANSLATED
- LPSTR lpszFileName; // FileName to PHP3 physical file
- LPSTR lpszUri; // The request URI
- LPSTR lpszReq; // The whole HTTP request line
- LPSTR lpszUser; // The authenticated user
- LPSTR lpszPassword; // The authenticated password
-
- DWORD cbTotalBytes; // Total bytes indicated from client
- DWORD cbAvailable; // Available number of bytes
- LPBYTE lpbData; // pointer to cbAvailable bytes
-
- LPSTR lpszContentType; // Content type of client data
- DWORD dwBehavior; // PHP behavior (standard, highlight, intend
-
- BOOL (* GetServerVariable) ( HCONN hConn,
- LPSTR lpszVariableName,
- LPVOID lpvBuffer,
- LPDWORD lpdwSize );
-
- BOOL (* WriteClient) ( HCONN ConnID,
- LPVOID Buffer,
- LPDWORD lpdwBytes,
- DWORD dwReserved );
-
- BOOL (* ReadClient) ( HCONN ConnID,
- LPVOID lpvBuffer,
- LPDWORD lpdwSize );
-
- BOOL (* SendHeaderFunction)( HCONN hConn,
- LPDWORD lpdwSize,
- LPDWORD lpdwDataType );
-
-} CONTROL_BLOCK, *LPCONTROL_BLOCK;
-
-MODULE_API DWORD PHP5_wrapper(LPCONTROL_BLOCK lpCB);
-MODULE_API BOOL PHP5_startup();
-MODULE_API BOOL PHP5_shutdown();
-
-// the following type declaration is for the server side
-typedef DWORD ( * PFN_WRAPPERFUNC )( CONTROL_BLOCK *pCB );
-
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif // end definition _PI3WEB_SAPI_H_
diff --git a/sapi/roxen/README b/sapi/roxen/README
deleted file mode 100644
index d834a0000e..0000000000
--- a/sapi/roxen/README
+++ /dev/null
@@ -1,18 +0,0 @@
-Roxen PHP support. Early version. Don't expect to be able to get it to
-work. Requires Pike 0.7.79 and Roxen 1.4. Anything less won't work.
-
-The module is now thread safe, in a couple of different modes. First
-mode, the default, uses a process global PHP lock in the Roxen
-module. This means that all PHP-requests are serialized (ie only one
-script is executed at any one time). The second option is using ZTS
-(Zend Thread Safe mode). Unless --enable-roxen-zts is specified, this
-won't be used.
-
-This solution now works fine and is recommended. Multiple PHP5
-requests will be run in parallell. The maximum number of parallell
-PHP5-execution is limited to the number of handle threads Roxen is
-started with.
-
-Support for this module is lacking. Please contact Roxen Internet
-Software for support and help. See http://www.roxen.com/company/contact/
-for contact information.
diff --git a/sapi/roxen/TODO b/sapi/roxen/TODO
deleted file mode 100644
index 248f36f52e..0000000000
--- a/sapi/roxen/TODO
+++ /dev/null
@@ -1,33 +0,0 @@
-BUGS:
-
-- fix backtraces
-- exit in PHP exits Roxen
-- POST newline added?
-- Rewriting header handling so that more than one header with the same
- name can be set (most importantly, cookies).
-- Recursive mutex lock problem:
-
- And another error (when trying to include a class)
-
- Recursive mutex locks!
- /Usr/local/pike/7.0.54/lib/modules/PHP5.so.Interpreter:
- run("/home/www/www.tx.pl/news/test.php",mapping[3],modules/scripting/php5.pike.PHPScript(),modules/scripting/php5.pike.PHPScript.done)
- modules/scripting/php5.pike:169: run()
- base_server/roxen.pike:569: handler_thread(3).
-
- And after this every access to any php script (on other virtual sites
- also) ends (of course there is no proper output) with this error:
-
- Php4.Interpreter->run: Tried to run a PHP-script from a PHP
- callback!/usr/local/pike/7.0.54/lib/modules/PHP5.so.Interpreter:
- run("/home/www/biall.com.pl/index.php3",mapping[2],modules/scripting/php5.pike.PHPScript(),modules/scripting/php5.pike.PHPScript.done)
- modules/scripting/php5.pike:169: run()
- base_server/roxen.pike:569: handler_thread(3).
-
-
-ADDITIONS:
-
-- use th_farm
-- change cwd in single threaded mode
-- per-virtual-server configuration
-
diff --git a/sapi/roxen/config.m4 b/sapi/roxen/config.m4
deleted file mode 100644
index 6634964e94..0000000000
--- a/sapi/roxen/config.m4
+++ /dev/null
@@ -1,60 +0,0 @@
-dnl
-dnl $Id$
-dnl
-
-RESULT=no
-AC_MSG_CHECKING(for Roxen/Pike support)
-AC_ARG_WITH(roxen,
-[ --with-roxen=DIR Build PHP as a Pike module. DIR is the base Roxen
- directory, normally /usr/local/roxen/server.],
-[
- if test ! -d $withval ; then
- AC_MSG_ERROR(You did not specify a directory)
- fi
- if test -f $withval/bin/roxen; then
- PIKE=$withval/bin/roxen
- elif test -f $withval/bin/pike; then
- PIKE=$withval/bin/pike
- else
- AC_MSG_ERROR(Couldn't find a pike in $withval/bin/)
- fi
- if $PIKE -e 'float v; catch(v = __VERSION__ + (__BUILD__/10000.0)); if(v < 0.7079) exit(1); exit(0);'; then
- PIKE_MODULE_DIR=`$PIKE --show-paths 2>&1| grep '^Module' | sed -e 's/.*: //'`
- PIKE_INCLUDE_DIR=`echo $PIKE_MODULE_DIR | sed -e 's,lib/pike/modules,include/pike,' -e 's,lib/modules,include/pike,'`
- if test -z "$PIKE_INCLUDE_DIR" -o -z "$PIKE_MODULE_DIR"; then
- AC_MSG_ERROR(Failed to figure out Pike module and include directories)
- fi
- else
- AC_MSG_ERROR(Roxen/PHP requires Pike 0.7.79 or newer)
- fi
-
- PHP_ADD_INCLUDE($PIKE_INCLUDE_DIR)
- AC_DEFINE(HAVE_ROXEN,1,[Whether you use Roxen])
- PHP_SELECT_SAPI(roxen, shared, roxen.c)
- INSTALL_IT="\$(INSTALL) -m 0755 $SAPI_SHARED $PIKE_MODULE_DIR/PHP5.so"
- RESULT="yes
- Pike binary used: $PIKE
- Pike include dir: $PIKE_INCLUDE_DIR
- Pike module directory: $PIKE_MODULE_DIR"
- PIKE_INCLUDE_DIR=" -I$PIKE_INCLUDE_DIR "
-])
-AC_MSG_RESULT($RESULT)
-
-if test "$RESULT" != "no" ; then
- RESULT=no
- AC_MSG_CHECKING(if Roxen should use ZTS)
- AC_ARG_ENABLE(roxen-zts,
- [ --enable-roxen-zts Build the Roxen module using Zend Thread Safety.],
- [
- PHP_BUILD_THREAD_SAFE
- AC_DEFINE(ROXEN_USE_ZTS,1,[Whether to use Roxen in ZTS mode])
- RESULT=yes
-
- ])
- AC_MSG_RESULT($RESULT)
-fi
-
-dnl ## Local Variables:
-dnl ## tab-width: 4
-dnl ## End:
-
diff --git a/sapi/roxen/roxen.c b/sapi/roxen/roxen.c
deleted file mode 100644
index c0ec83f2ba..0000000000
--- a/sapi/roxen/roxen.c
+++ /dev/null
@@ -1,725 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: David Hedbor <neotron@php.net> |
- | Based on aolserver SAPI by Sascha Schumann <sascha@schumann.cx> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-#include "php.h"
-#ifdef HAVE_ROXEN
-
-#include "php_ini.h"
-#include "php_globals.h"
-#include "SAPI.h"
-#include "php_main.h"
-#include "ext/standard/info.h"
-
-#include "php_version.h"
-
-#ifndef ZTS
-/* Only valid if thread safety is enabled. */
-#undef ROXEN_USE_ZTS
-#endif
-
-
-/* Pike Include Files
- *
- * conflicts with pike avoided by only using long names. Requires a new
- * Pike 0.7 since it was implemented for this interface only.
- *
- */
-#define NO_PIKE_SHORTHAND
-
-#include <fdlib.h>
-#include <program.h>
-#include <pike_types.h>
-#include <interpret.h>
-#include <module_support.h>
-#include <error.h>
-#include <array.h>
-#include <backend.h>
-#include <stralloc.h>
-#include <mapping.h>
-#include <object.h>
-#include <threads.h>
-#include <builtin_functions.h>
-#include <operators.h>
-
-#undef HIDE_GLOBAL_VARIABLES
-#undef REVEAL_GLOBAL_VARIABLES
-#define HIDE_GLOBAL_VARIABLES()
-#define REVEAL_GLOBAL_VARIABLES()
-
-/* php_roxen_request is per-request object storage */
-
-typedef struct
-{
- struct mapping *request_data;
- struct object *my_fd_obj;
- int my_fd;
- char *filename;
-} php_roxen_request;
-
-
-/* Defines to get to the data supplied when the script is started. */
-
-#ifdef ROXEN_USE_ZTS
-
-/* ZTS does work now, but it seems like it's faster using the "serialization"
- * method I previously used. Thus it's not used unless ROXEN_USE_ZTS is defined.
- */
-
-/* Per thread storage area id... */
-static int roxen_globals_id;
-
-# define GET_THIS() php_roxen_request *_request = ts_resource(roxen_globals_id)
-# define THIS _request
-#else
-static php_roxen_request *current_request = NULL;
-
-# define GET_THIS() current_request = ((php_roxen_request *)Pike_fp->current_storage)
-# define THIS current_request
-#endif
-
-/* File descriptor integer. Used to write directly to the FD without
- * passing Pike
- */
-#define MY_FD (THIS->my_fd)
-
-/* FD object. Really a PHPScript object from Pike which implements a couple
- * of functions to handle headers, writing and buffering.
- */
-#define MY_FD_OBJ ((struct object *)(THIS->my_fd_obj))
-
-/* Mapping with data supplied from the calling Roxen module. Contains
- * a mapping with headers, an FD object etc.
- */
-#define REQUEST_DATA ((struct mapping *)(THIS->request_data))
-
-
-#if defined(_REENTRANT) && !defined(ROXEN_USE_ZTS)
-/* Lock used to serialize the PHP execution. If ROXEN_USE_ZTS is defined, we
- * are using the PHP thread safe mechanism instead.
- */
-static PIKE_MUTEX_T roxen_php_execution_lock;
-# define PHP_INIT_LOCK() mt_init(&roxen_php_execution_lock)
-# define PHP_LOCK(X) THREADS_ALLOW();mt_lock(&roxen_php_execution_lock);THREADS_DISALLOW()
-# define PHP_UNLOCK(X) mt_unlock(&roxen_php_execution_lock);
-# define PHP_DESTROY() mt_destroy(&roxen_php_execution_lock)
-#else /* !_REENTRANT */
-# define PHP_INIT_LOCK()
-# define PHP_LOCK(X)
-# define PHP_UNLOCK(X)
-# define PHP_DESTROY()
-#endif /* _REENTRANT */
-
-extern int fd_from_object(struct object *o);
-static unsigned char roxen_php_initialized;
-
-/* This allows calling of pike functions from the PHP callbacks,
- * which requires the Pike interpreter to be locked.
- */
-#define THREAD_SAFE_RUN(COMMAND, what) do {\
- struct thread_state *state;\
- if((state = thread_state_for_id(th_self()))!=NULL) {\
- if(!state->swapped) {\
- COMMAND;\
- } else {\
- mt_lock(&interpreter_lock);\
- SWAP_IN_THREAD(state);\
- COMMAND;\
- SWAP_OUT_THREAD(state);\
- mt_unlock(&interpreter_lock);\
- }\
- }\
-} while(0)
-
-struct program *php_program;
-
-
-/* To avoid executing a PHP script from a PHP callback, which would
- * create a deadlock, a global thread id is used. If the thread calling the
- * php-script is the same as the current thread, it fails.
- */
-static int current_thread = -1;
-
-
-/* Low level header lookup. Basically looks for the named header in the mapping
- * headers in the supplied options mapping.
- */
-
-static INLINE struct svalue *lookup_header(char *headername)
-{
- struct svalue *headers, *value;
- struct pike_string *sind;
-#ifdef ROXEN_USE_ZTS
- GET_THIS();
-#endif
- sind = make_shared_string("env");
- headers = low_mapping_string_lookup(REQUEST_DATA, sind);
- free_string(sind);
- if(!headers || headers->type != PIKE_T_MAPPING) return NULL;
- sind = make_shared_string(headername);
- value = low_mapping_string_lookup(headers->u.mapping, sind);
- free_string(sind);
- if(!value) return NULL;
- return value;
-}
-
-/* Lookup a header in the mapping and return the value as a string, or
- * return the default if it's missing
- */
-INLINE static char *lookup_string_header(char *headername, char *default_value)
-{
- struct svalue *head = NULL;
- THREAD_SAFE_RUN(head = lookup_header(headername), "header lookup");
- if(!head || head->type != PIKE_T_STRING)
- return default_value;
- return head->u.string->str;
-}
-
-/* Lookup a header in the mapping and return the value as if it's an integer
- * and otherwise return the default.
- */
-INLINE static int lookup_integer_header(char *headername, int default_value)
-{
- struct svalue *head = NULL;
- THREAD_SAFE_RUN(head = lookup_header(headername), "header lookup");
- if(!head || head->type != PIKE_T_INT)
- return default_value;
- return head->u.integer;
-}
-
-/*
- * php_roxen_low_ub_write() writes data to the client connection. Might be
- * rewritten to do more direct IO to save CPU and the need to lock the *
- * interpreter for better threading.
- */
-
-static int
-php_roxen_low_ub_write(const char *str, uint str_length TSRMLS_DC) {
- int sent_bytes = 0;
- struct pike_string *to_write = NULL;
-#ifdef ROXEN_USE_ZTS
- GET_THIS();
-#endif
-
- if(!MY_FD_OBJ->prog) {
- PG(connection_status) = PHP_CONNECTION_ABORTED;
- zend_bailout();
- return -1;
- }
- to_write = make_shared_binary_string(str, str_length);
- push_string(to_write);
- safe_apply(MY_FD_OBJ, "write", 1);
- if(Pike_sp[-1].type == PIKE_T_INT)
- sent_bytes = Pike_sp[-1].u.integer;
- pop_stack();
- if(sent_bytes != str_length) {
- /* This means the connection is closed. Dead. Gone. *sniff* */
- php_handle_aborted_connection();
- }
- return sent_bytes;
-}
-
-/*
- * php_roxen_sapi_ub_write() calls php_roxen_low_ub_write in a Pike thread
- * safe manner.
- */
-
-static int
-php_roxen_sapi_ub_write(const char *str, uint str_length TSRMLS_DC)
-{
-#ifdef ROXEN_USE_ZTS
- GET_THIS();
-#endif
-
- int sent_bytes = 0, fd = MY_FD;
- if(fd)
- {
- for(sent_bytes=0;sent_bytes < str_length;)
- {
- int written;
- written = fd_write(fd, str + sent_bytes, str_length - sent_bytes);
- if(written < 0)
- {
- switch(errno)
- {
- default:
- /* This means the connection is closed. Dead. Gone. *sniff* */
- PG(connection_status) = PHP_CONNECTION_ABORTED;
- zend_bailout();
- return sent_bytes;
- case EINTR:
- case EWOULDBLOCK:
- continue;
- }
-
- } else {
- sent_bytes += written;
- }
- }
- } else {
- THREAD_SAFE_RUN(sent_bytes = php_roxen_low_ub_write(str, str_length TSRMLS_CC),
- "write");
- }
- return sent_bytes;
-}
-
-/* php_roxen_set_header() sets a header in the header mapping. Called in a
- * thread safe manner from php_roxen_sapi_header_handler.
- */
-static void php_roxen_set_header(char *header_name, char *value, char *p)
-{
- struct svalue hsval;
- struct pike_string *hval, *ind, *hind;
- struct mapping *headermap;
- struct svalue *s_headermap;
-#ifdef ROXEN_USE_ZTS
- GET_THIS();
-#endif
- hval = make_shared_string(value);
- ind = make_shared_string(" _headers");
- hind = make_shared_binary_string(header_name,
- (int)(p - header_name));
-
- s_headermap = low_mapping_string_lookup(REQUEST_DATA, ind);
- if(!s_headermap)
- {
- struct svalue mappie;
- mappie.type = PIKE_T_MAPPING;
- headermap = allocate_mapping(1);
- mappie.u.mapping = headermap;
- mapping_string_insert(REQUEST_DATA, ind, &mappie);
- free_mapping(headermap);
- } else
- headermap = s_headermap->u.mapping;
-
- hsval.type = PIKE_T_STRING;
- hsval.u.string = hval;
- mapping_string_insert(headermap, hind, &hsval);
-
- free_string(hval);
- free_string(ind);
- free_string(hind);
-}
-
-/*
- * php_roxen_sapi_header_handler() sets a HTTP reply header to be
- * sent to the client.
- */
-static int
-php_roxen_sapi_header_handler(sapi_header_struct *sapi_header,
- sapi_headers_struct *sapi_headers TSRMLS_DC)
-{
- char *header_name, *header_content, *p;
- header_name = sapi_header->header;
- header_content = p = strchr(header_name, ':');
-
- if(p) {
- do {
- header_content++;
- } while(*header_content == ' ');
- THREAD_SAFE_RUN(php_roxen_set_header(header_name, header_content, p), "header handler");
- }
- sapi_free_header(sapi_header);
- return 0;
-}
-
-/*
- * php_roxen_sapi_send_headers() flushes the headers to the client.
- * Called before real content is sent by PHP.
- */
-
-static int
-php_roxen_low_send_headers(sapi_headers_struct *sapi_headers TSRMLS_DC)
-{
- struct pike_string *ind;
- struct svalue *s_headermap;
-#ifdef ROXEN_USE_ZTS
- GET_THIS();
-#endif
-
- if(!MY_FD_OBJ->prog) {
- PG(connection_status) = PHP_CONNECTION_ABORTED;
- zend_bailout();
- return SAPI_HEADER_SEND_FAILED;
- }
- ind = make_shared_string(" _headers");
- s_headermap = low_mapping_string_lookup(REQUEST_DATA, ind);
- free_string(ind);
-
- push_int(SG(sapi_headers).http_response_code);
- if(s_headermap && s_headermap->type == PIKE_T_MAPPING)
- ref_push_mapping(s_headermap->u.mapping);
- else
- push_int(0);
- safe_apply(MY_FD_OBJ, "send_headers", 2);
- pop_stack();
-
- return SAPI_HEADER_SENT_SUCCESSFULLY;
-}
-
-static int
-php_roxen_sapi_send_headers(sapi_headers_struct *sapi_headers TSRMLS_DC)
-{
- int res = 0;
- THREAD_SAFE_RUN(res = php_roxen_low_send_headers(sapi_headers TSRMLS_CC), "send headers");
- return res;
-}
-
-/*
- * php_roxen_sapi_read_post() reads a specified number of bytes from
- * the client. Used for POST/PUT requests.
- */
-
-INLINE static int php_roxen_low_read_post(char *buf, uint count_bytes)
-{
- uint total_read = 0;
-#ifdef ROXEN_USE_ZTS
- GET_THIS();
-#endif
- TSRMLS_FETCH();
-
- if(!MY_FD_OBJ->prog)
- {
- PG(connection_status) = PHP_CONNECTION_ABORTED;
- zend_bailout();
- return -1;
- }
- push_int(count_bytes);
- safe_apply(MY_FD_OBJ, "read_post", 1);
- if(Pike_sp[-1].type == PIKE_T_STRING) {
- MEMCPY(buf, Pike_sp[-1].u.string->str,
- (total_read = Pike_sp[-1].u.string->len));
- buf[total_read] = '\0';
- } else
- total_read = 0;
- pop_stack();
- return total_read;
-}
-
-static int
-php_roxen_sapi_read_post(char *buf, uint count_bytes TSRMLS_DC)
-{
- uint total_read = 0;
- THREAD_SAFE_RUN(total_read = php_roxen_low_read_post(buf, count_bytes), "read post");
- return total_read;
-}
-
-/*
- * php_roxen_sapi_read_cookies() returns the Cookie header from
- * the HTTP request header
- */
-
-static char *
-php_roxen_sapi_read_cookies(TSRMLS_D)
-{
- char *cookies;
- cookies = lookup_string_header("HTTP_COOKIE", NULL);
- return cookies;
-}
-
-static void php_info_roxen(ZEND_MODULE_INFO_FUNC_ARGS)
-{
- /* char buf[512]; */
- php_info_print_table_start();
- php_info_print_table_row(2, "SAPI module version", "$Id$");
- /* php_info_print_table_row(2, "Build date", Ns_InfoBuildDate());
- php_info_print_table_row(2, "Config file path", Ns_InfoConfigFile());
- php_info_print_table_row(2, "Error Log path", Ns_InfoErrorLog());
- php_info_print_table_row(2, "Installation path", Ns_InfoHomePath());
- php_info_print_table_row(2, "Hostname of server", Ns_InfoHostname());
- php_info_print_table_row(2, "Source code label", Ns_InfoLabel());
- php_info_print_table_row(2, "Server platform", Ns_InfoPlatform());
- snprintf(buf, 511, "%s/%s", Ns_InfoServerName(), Ns_InfoServerVersion());
- php_info_print_table_row(2, "Server version", buf);
- snprintf(buf, 511, "%d day(s), %02d:%02d:%02d",
- uptime / 86400,
- (uptime / 3600) % 24,
- (uptime / 60) % 60,
- uptime % 60);
- php_info_print_table_row(2, "Server uptime", buf);
- */
- php_info_print_table_end();
-}
-
-static zend_module_entry php_roxen_module = {
- STANDARD_MODULE_HEADER,
- "Roxen",
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- php_info_roxen,
- NULL,
- STANDARD_MODULE_PROPERTIES
-};
-
-static int php_roxen_startup(sapi_module_struct *sapi_module)
-{
- if(php_module_startup(sapi_module, &php_roxen_module, 1) == FAILURE) {
- return FAILURE;
- } else {
- return SUCCESS;
- }
-}
-
-/* this structure is static (as in "it does not change") */
-
-static sapi_module_struct roxen_sapi_module = {
- "roxen",
- "Roxen",
- php_roxen_startup, /* startup */
- php_module_shutdown_wrapper, /* shutdown */
- NULL, /* activate */
- NULL, /* deactivate */
- php_roxen_sapi_ub_write, /* unbuffered write */
- NULL, /* flush */
- NULL, /* get uid */
- NULL, /* getenv */
- php_error, /* error handler */
- php_roxen_sapi_header_handler, /* header handler */
- php_roxen_sapi_send_headers, /* send headers handler */
- NULL, /* send header handler */
- php_roxen_sapi_read_post, /* read POST data */
- php_roxen_sapi_read_cookies, /* read Cookies */
- NULL, /* register server variables */
- NULL, /* Log message */
-
- STANDARD_SAPI_MODULE_PROPERTIES
-};
-
-/*
- * php_roxen_hash_environment() populates the php script environment
- * with a number of variables. HTTP_* variables are created for
- * the HTTP header data, so that a script can access these.
- */
-#define ADD_STRING(name) \
- MAKE_STD_ZVAL(pval); \
- pval->type = IS_STRING; \
- pval->value.str.len = strlen(buf); \
- pval->value.str.val = estrndup(buf, pval->value.str.len); \
- zend_hash_update(&EG(symbol_table), name, sizeof(name), \
- &pval, sizeof(zval *), NULL)
-
-static void
-php_roxen_hash_environment(TSRMLS_D)
-{
- int i;
- char buf[512];
- zval *pval;
- struct svalue *headers;
- struct pike_string *sind;
- struct array *indices;
- struct svalue *ind, *val;
-#ifdef ROXEN_USE_ZTS
- GET_THIS();
-#endif
- sind = make_shared_string("env");
- headers = low_mapping_string_lookup(REQUEST_DATA, sind);
- free_string(sind);
- if(headers && headers->type == PIKE_T_MAPPING) {
- indices = mapping_indices(headers->u.mapping);
- for(i = 0; i < indices->size; i++) {
- ind = &indices->item[i];
- val = low_mapping_lookup(headers->u.mapping, ind);
- if(ind && ind->type == PIKE_T_STRING &&
- val && val->type == PIKE_T_STRING) {
- int buf_len;
- buf_len = MIN(511, ind->u.string->len);
- strncpy(buf, ind->u.string->str, buf_len);
- buf[buf_len] = '\0'; /* Terminate correctly */
- MAKE_STD_ZVAL(pval);
- pval->type = IS_STRING;
- pval->value.str.len = val->u.string->len;
- pval->value.str.val = estrndup(val->u.string->str, pval->value.str.len);
-
- zend_hash_update(&EG(symbol_table), buf, buf_len + 1, &pval, sizeof(zval *), NULL);
- }
- }
- free_array(indices);
- }
-
- /*
- MAKE_STD_ZVAL(pval);
- pval->type = IS_LONG;
- pval->value.lval = Ns_InfoBootTime();
- zend_hash_update(&EG(symbol_table), "SERVER_BOOTTIME", sizeof("SERVER_BOOTTIME"), &pval, sizeof(zval *), NULL);
- */
-}
-
-/*
- * php_roxen_module_main() is called by the per-request handler and
- * "executes" the script
- */
-
-static int php_roxen_module_main(TSRMLS_D)
-{
- int res, len;
- char *dir;
- zend_file_handle file_handle;
-#ifdef ROXEN_USE_ZTS
- GET_THIS();
-#endif
-
- file_handle.type = ZEND_HANDLE_FILENAME;
- file_handle.filename = THIS->filename;
- file_handle.free_filename = 0;
- file_handle.opened_path = NULL;
-
- THREADS_ALLOW();
- res = php_request_startup(TSRMLS_C);
- THREADS_DISALLOW();
- if(res == FAILURE) {
- return 0;
- }
- php_roxen_hash_environment(TSRMLS_C);
- THREADS_ALLOW();
- php_execute_script(&file_handle TSRMLS_CC);
- php_request_shutdown(NULL);
- THREADS_DISALLOW();
- return 1;
-}
-
-/*
- * The php_roxen_request_handler() is called per request and handles
- * everything for one request.
- */
-
-void f_php_roxen_request_handler(INT32 args)
-{
- struct object *my_fd_obj;
- struct mapping *request_data;
- struct svalue *done_callback, *raw_fd;
- struct pike_string *script, *ind;
- int status = 1;
-#ifdef ROXEN_USE_ZTS
- GET_THIS();
-#endif
- TSRMLS_FETCH();
-
- if(current_thread == th_self())
- php_error(E_WARNING, "PHP5.Interpreter->run: Tried to run a PHP-script from a PHP "
- "callback!");
- get_all_args("PHP5.Interpreter->run", args, "%S%m%O%*", &script,
- &request_data, &my_fd_obj, &done_callback);
- if(done_callback->type != PIKE_T_FUNCTION)
- php_error(E_WARNING, "PHP5.Interpreter->run: Bad argument 4, expected function.\n");
- PHP_LOCK(THIS); /* Need to lock here or reusing the same object might cause
- * problems in changing stuff in that object */
-#ifndef ROXEN_USE_ZTS
- GET_THIS();
-#endif
- THIS->request_data = request_data;
- THIS->my_fd_obj = my_fd_obj;
- THIS->filename = script->str;
- current_thread = th_self();
- SG(request_info).query_string = lookup_string_header("QUERY_STRING", 0);
- SG(server_context) = (void *)1; /* avoid server_context == NULL */
-
- /* path_translated is apparently the absolute path to the file, not
- the translated PATH_INFO
- */
- SG(request_info).path_translated =
- lookup_string_header("SCRIPT_FILENAME", NULL);
- SG(request_info).request_uri = lookup_string_header("DOCUMENT_URI", NULL);
- if(!SG(request_info).request_uri)
- SG(request_info).request_uri = lookup_string_header("SCRIPT_NAME", NULL);
- SG(request_info).request_method = lookup_string_header("REQUEST_METHOD", "GET");
- SG(request_info).content_length = lookup_integer_header("HTTP_CONTENT_LENGTH", 0);
- SG(request_info).content_type = lookup_string_header("HTTP_CONTENT_TYPE", NULL);
- SG(sapi_headers).http_response_code = 200;
-
- /* FIXME: Check for auth stuff needs to be fixed... */
- SG(request_info).auth_user = NULL;
- SG(request_info).auth_password = NULL;
-
- ind = make_shared_binary_string("my_fd", 5);
- raw_fd = low_mapping_string_lookup(THIS->request_data, ind);
- if(raw_fd && raw_fd->type == PIKE_T_OBJECT)
- {
- int fd = fd_from_object(raw_fd->u.object);
- if(fd == -1)
- php_error(E_WARNING, "PHP5.Interpreter->run: my_fd object not open or not an FD.\n");
- THIS->my_fd = fd;
- } else
- THIS->my_fd = 0;
-
- status = php_roxen_module_main(TSRMLS_C);
- current_thread = -1;
-
- apply_svalue(done_callback, 0);
- pop_stack();
- pop_n_elems(args);
- push_int(status);
- PHP_UNLOCK(THIS);
-}
-
-
-/* Clear the object global struct */
-static void clear_struct(struct object *o)
-{
- MEMSET(Pike_fp->current_storage, 0, sizeof(php_roxen_request));
-}
-
-
-/*
- * pike_module_init() is called by Pike once at startup
- *
- * This functions allocates basic structures
- */
-
-void pike_module_init( void )
-{
- if (!roxen_php_initialized) {
-#ifdef ZTS
- tsrm_startup(1, 1, 0, NULL);
-#ifdef ROXEN_USE_ZTS
- ts_allocate_id(&roxen_globals_id, sizeof(php_roxen_request), NULL, NULL);
-#endif
-#endif
- sapi_startup(&roxen_sapi_module);
- /*php_roxen_startup(&roxen_sapi_module); removed - should be called from SAPI activation*/
- roxen_php_initialized = 1;
- PHP_INIT_LOCK();
- }
- start_new_program(); /* Text */
- ADD_STORAGE(php_roxen_request);
- set_init_callback(clear_struct);
- pike_add_function("run", f_php_roxen_request_handler,
- "function(string, mapping, object, function:int)", 0);
- add_program_constant("Interpreter", (php_program = end_program()), 0);
-}
-
-/*
- * pike_module_exit() performs the last steps before the
- * server exists. Shutdowns basic services and frees memory
- */
-
-void pike_module_exit(void)
-{
- roxen_php_initialized = 0;
- roxen_sapi_module.shutdown(&roxen_sapi_module);
- if(php_program) free_program(php_program);
-#ifdef ZTS
- tsrm_shutdown();
-#endif
- PHP_DESTROY();
-}
-#endif
diff --git a/sapi/tests/test001.phpt b/sapi/tests/test001.phpt
deleted file mode 100644
index a964393fd9..0000000000
--- a/sapi/tests/test001.phpt
+++ /dev/null
@@ -1,16 +0,0 @@
---TEST--
-IIS style CGI missing SCRIPT_FILENAME
---DESCRIPTION--
-This would be similar to what IIS produces for a simple query.
---ENV--
-return <<<END
-PATH_TRANSLATED=$filename
-PATH_INFO=$scriptname
-SCRIPT_NAME=$scriptname
-END;
---FILE--
-<?php
- echo "HELLO";
-?>
---EXPECT--
-HELLO \ No newline at end of file
diff --git a/sapi/tests/test002.phpt b/sapi/tests/test002.phpt
deleted file mode 100644
index 42ade3d96b..0000000000
--- a/sapi/tests/test002.phpt
+++ /dev/null
@@ -1,22 +0,0 @@
---TEST--
-Apache style CGI
---DESCRIPTION--
-Apache likes to set SCRIPT_FILENAME to the php executable
-if you use ScriptAlias configurations, and the proper
-path is in PATH_TRANSLATED. SCRIPT_NAME in this is faked,
-but that is ok, Apache sets SCRIPT_NAME to the ScriptAlias
-of the executable.
---ENV--
-return <<<END
-REDIRECT_URL=$scriptname
-PATH_TRANSLATED=$filename
-PATH_INFO=$scriptname
-SCRIPT_NAME=/scriptalias/php
-SCRIPT_FILENAME=$this->conf['TEST_PHP_EXECUTABLE']
-END;
---FILE--
-<?php
- echo "HELLO";
-?>
---EXPECT--
-HELLO \ No newline at end of file
diff --git a/sapi/tests/test003.phpt b/sapi/tests/test003.phpt
deleted file mode 100644
index 522d78db41..0000000000
--- a/sapi/tests/test003.phpt
+++ /dev/null
@@ -1,21 +0,0 @@
---TEST--
-IIS style CGI missing SCRIPT_FILENAME, has PATH_INFO
---DESCRIPTION--
-This would be similar to what IIS produces for a simple query
-that also has PATH_INFO.
---REQUEST--
-return <<<END
-PATH_INFO=/path/info
-END;
---ENV--
-return <<<END
-PATH_TRANSLATED=$filename/path/info
-PATH_INFO=$scriptname/path/info
-SCRIPT_NAME=$scriptname
-END;
---FILE--
-<?php
- echo $_SERVER['PATH_INFO'];
-?>
---EXPECT--
-/path/info \ No newline at end of file
diff --git a/sapi/tests/test004.phpt b/sapi/tests/test004.phpt
deleted file mode 100644
index dad0dd0eec..0000000000
--- a/sapi/tests/test004.phpt
+++ /dev/null
@@ -1,26 +0,0 @@
---TEST--
-Apache style CGI with PATH_INFO
---DESCRIPTION--
-Apache likes to set SCRIPT_FILENAME to the php executable
-if you use ScriptAlias configurations, and the proper
-path is in PATH_TRANSLATED. SCRIPT_NAME in this is faked,
-but that is ok, Apache sets SCRIPT_NAME to the ScriptAlias
-of the executable.
---REQUEST--
-return <<<END
-PATH_INFO=/path/info
-END;
---ENV--
-return <<<END
-REDIRECT_URL=$scriptname
-PATH_TRANSLATED=$filename/path/info
-PATH_INFO=$scriptname/path/info
-SCRIPT_NAME=/scriptalias/php
-SCRIPT_FILENAME=$this->conf['TEST_PHP_EXECUTABLE']
-END;
---FILE--
-<?php
- echo $_SERVER['PATH_INFO'];
-?>
---EXPECT--
-/path/info \ No newline at end of file
diff --git a/sapi/tests/test005.phpt b/sapi/tests/test005.phpt
deleted file mode 100644
index 7415b66a0a..0000000000
--- a/sapi/tests/test005.phpt
+++ /dev/null
@@ -1,27 +0,0 @@
---TEST--
-QUERY_STRING Security Bug
---DESCRIPTION--
-This bug was present in PHP 4.3.0 only.
-A failure should print HELLO.
---REQUEST--
-return <<<END
-SCRIPT_NAME=/nothing.php
-QUERY_STRING=$filename
-END;
---ENV--
-return <<<END
-REDIRECT_URL=$scriptname
-PATH_TRANSLATED=c:\apache\1.3.27\htdocs\nothing.php
-QUERY_STRING=$filename
-PATH_INFO=/nothing.php
-SCRIPT_NAME=/phpexe/php.exe/nothing.php
-SCRIPT_FILENAME=c:\apache\1.3.27\htdocs\nothing.php
-END;
---FILE--
-<?php
- echo "HELLO";
-?>
---EXPECTHEADERS--
-Status: 404
---EXPECT--
-No input file specified. \ No newline at end of file
diff --git a/sapi/tests/test006.phpt b/sapi/tests/test006.phpt
deleted file mode 100644
index 45e37811ef..0000000000
--- a/sapi/tests/test006.phpt
+++ /dev/null
@@ -1,73 +0,0 @@
---TEST--
-Multipart Form POST Data
---HEADERS--
-return <<<END
-Content-Type=multipart/form-data; boundary=---------------------------240723202011929
-Content-Length=862
-END;
---ENV--
-return <<<END
-CONTENT_TYPE=multipart/form-data; boundary=---------------------------240723202011929
-CONTENT_LENGTH=862
-END;
---POST--
------------------------------240723202011929
-Content-Disposition: form-data; name="entry"
-
-entry box
------------------------------240723202011929
-Content-Disposition: form-data; name="password"
-
-password box
------------------------------240723202011929
-Content-Disposition: form-data; name="radio1"
-
-test 1
------------------------------240723202011929
-Content-Disposition: form-data; name="checkbox1"
-
-test 1
------------------------------240723202011929
-Content-Disposition: form-data; name="choices"
-
-Choice 1
------------------------------240723202011929
-Content-Disposition: form-data; name="choices"
-
-Choice 2
------------------------------240723202011929
-Content-Disposition: form-data; name="file"; filename="info.php"
-Content-Type: application/octet-stream
-
-<?php
-phpinfo();
-?>
------------------------------240723202011929--
-
---FILE--
-<?php
-error_reporting(0);
-print_r($_POST);
-print_r($_FILES);
-?>
---EXPECTF--
-Array
-(
- [entry] => entry box
- [password] => password box
- [radio1] => test 1
- [checkbox1] => test 1
- [choices] => Choice 2
-)
-Array
-(
- [file] => Array
- (
- [name] => info.php
- [type] => application/octet-stream
- [tmp_name] => %s
- [error] => 0
- [size] => 21
- )
-
-)
diff --git a/sapi/tests/test007.phpt b/sapi/tests/test007.phpt
deleted file mode 100644
index 8c50e4b80f..0000000000
--- a/sapi/tests/test007.phpt
+++ /dev/null
@@ -1,46 +0,0 @@
---TEST--
-Multipart Form POST Data, incorrect content length
---HEADERS--
-return <<<END
-Content-Type=multipart/form-data; boundary=---------------------------240723202011929
-Content-Length=100
-END;
---POST--
------------------------------240723202011929
-Content-Disposition: form-data; name="entry"
-
-entry box
------------------------------240723202011929
-Content-Disposition: form-data; name="password"
-
-password box
------------------------------240723202011929
-Content-Disposition: form-data; name="radio1"
-
-test 1
------------------------------240723202011929
-Content-Disposition: form-data; name="checkbox1"
-
-test 1
------------------------------240723202011929
-Content-Disposition: form-data; name="choices"
-
-Choice 1
------------------------------240723202011929
-Content-Disposition: form-data; name="choices"
-
-Choice 2
------------------------------240723202011929
-Content-Disposition: form-data; name="file"; filename="info.php"
-Content-Type: application/octet-stream
-
-<?php
-phpinfo();
-?>
------------------------------240723202011929--
-
---FILE--
-<?php
-print @$_POST['choices'];
-?>
---EXPECT--
diff --git a/sapi/thttpd/CREDITS b/sapi/thttpd/CREDITS
deleted file mode 100644
index 8f02f36f4f..0000000000
--- a/sapi/thttpd/CREDITS
+++ /dev/null
@@ -1,2 +0,0 @@
-thttpd
-Sascha Schumann
diff --git a/sapi/thttpd/README b/sapi/thttpd/README
deleted file mode 100644
index 1e80a01956..0000000000
--- a/sapi/thttpd/README
+++ /dev/null
@@ -1,85 +0,0 @@
-README FOR THTTPD MODULE (by Sascha Schumann)
-($Date$)
-
- This is a SAPI module for PHP 4.x supporting thttpd, the tiny,
- turbo, throttling HTTP server by Jef Poskanzer.
-
- NOTE: All HTTP requests will be serialized. That means, one long running
- script will block all other requests. Choose another web server,
- if you want to execute arbitrarily long running scripts.
-
- The module contains a patch against version 2.21b of thttpd. The patch
- fixes a number of bugs and adds some functionality:
-
- - HTTP/1.1 Persistent Connection/Pipeline Support
- - PHP Scripting (**.php by default)
- - Highlighting PHP Scripts (**.phps by default)
- - Fast Accept Loop (unique to PHP)
- - Periodic Connection Expiring (unique to PHP)
- - Log to stdout (logfile=-)
- - Fixes the Host: header vulnerability (affects vhosts only)
- - Asynchronous request body handling (e.g. for POSTs)
- - Accept filter for Linux
- - Fix for non-blocking sending of thttpd-generated responses
-
- You can configure the filename extensions by creating a config file for
- thttpd and setting these entries:
-
- phppat=PATTERN
- phpspat=PATTERN
-
- The PATTERN has the same format as defined here:
-
- http://acme.com/software/thttpd/options.html#CGI_PATTERN
-
- "**.php" means: match any file ending in .php in any directory.
- Setting the pattern from the command line is not supported.
-
- NOTE: This version supports *only* thttpd 2.21b, no prior or later
- version.
-
- This is a functional and stable module (it runs a large application
- like IMP 2.2.0 without any problems). Its original intention was to
- demonstrate the ability of PHP to work in every web server environment.
-
-REQUIRED DOWNLOADS
-
- 1. thttpd 2.21b (2.20 or +2.22beta will _not_ work)
-
- Full Distribution:
- http://www.acme.com/software/thttpd/thttpd-2.21b.tar.gz
-
- 2. PHP 4.x
-
- Download:
- http://www.php.net/
-
- Snapshots from CVS:
- http://snaps.php.net/
-
-
-BUILD INSTRUCTIONS
-
- 1. Extract software packages
-
- $ gunzip -c thttpd-2.xx.tar.gz | tar xf -
- $ gunzip -c php-*.tar.gz | tar xf -
-
- 2. Prepare PHP
-
- $ cd php-*
- $ ./configure \
- --with-thttpd=../thttpd-2.xx \
- <further PHP options>
- $ make install
- $ cd ..
-
- You can see the list of valid PHP options by executing
-
- $ ./configure --help
-
- 3. Configure, compile, install thttpd
-
- Now follow the thttpd instructions. The Makefile template of
- thttpd was changed to automatically use the components
- required by PHP.
diff --git a/sapi/thttpd/config.m4 b/sapi/thttpd/config.m4
deleted file mode 100644
index ac5a2bfca2..0000000000
--- a/sapi/thttpd/config.m4
+++ /dev/null
@@ -1,39 +0,0 @@
-dnl
-dnl $Id$
-dnl
-
-AC_ARG_WITH(thttpd,
-[ --with-thttpd=SRCDIR Build PHP as thttpd module],[
- if test ! -d $withval; then
- AC_MSG_RESULT(thttpd directory does not exist ($withval))
- fi
-
- PHP_EXPAND_PATH($withval, THTTPD)
-
- if grep thttpd.2.21b $withval/version.h >/dev/null; then
- patch="test -f $THTTPD/php_patched || \
- (cd $THTTPD && patch -p1 < $abs_srcdir/sapi/thttpd/thttpd_patch && touch php_patched)"
-
- elif grep Premium $withval/version.h >/dev/null; then
- patch=
- else
- AC_MSG_ERROR([This version only supports thttpd-2.21b and Premium thttpd])
- fi
- PHP_TARGET_RDYNAMIC
- INSTALL_IT="\
- echo 'PHP_LIBS = -L. -lphp5 \$(PHP_LIBS) \$(EXTRA_LIBS)' > $THTTPD/php_makefile; \
- echo 'PHP_LDFLAGS = \$(NATIVE_RPATHS) \$(PHP_LDFLAGS)' >> $THTTPD/php_makefile; \
- echo 'PHP_CFLAGS = \$(COMMON_FLAGS) \$(CFLAGS_CLEAN) \$(CPPFLAGS) \$(EXTRA_CFLAGS)' >> $THTTPD/php_makefile; \
- rm -f $THTTPD/php_thttpd.c $THTTPD/php_thttpd.h $THTTPD/libphp5.a; \
- \$(LN_S) $abs_srcdir/sapi/thttpd/thttpd.c $THTTPD/php_thttpd.c; \
- \$(LN_S) $abs_srcdir/sapi/thttpd/php_thttpd.h $abs_builddir/$SAPI_STATIC $THTTPD/;\
- $patch"
- PHP_THTTPD="yes, using $THTTPD"
- PHP_ADD_INCLUDE($THTTPD)
- PHP_SELECT_SAPI(thttpd, static)
-],[
- PHP_THTTPD=no
-])
-
-AC_MSG_CHECKING(for thttpd)
-AC_MSG_RESULT($PHP_THTTPD)
diff --git a/sapi/thttpd/php.sym b/sapi/thttpd/php.sym
deleted file mode 100644
index 2214d3964d..0000000000
--- a/sapi/thttpd/php.sym
+++ /dev/null
@@ -1,3 +0,0 @@
-thttpd_php_request
-thttpd_php_init
-thttpd_php_shutdown
diff --git a/sapi/thttpd/php_thttpd.h b/sapi/thttpd/php_thttpd.h
deleted file mode 100644
index f1e30082ac..0000000000
--- a/sapi/thttpd/php_thttpd.h
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Sascha Schumann <sascha@schumann.cx> |
- +----------------------------------------------------------------------+
-*/
-
-#ifndef PHP_THTTPD_H
-#define PHP_THTTPD_H
-
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <libhttpd.h>
-
-void thttpd_php_shutdown(void);
-void thttpd_php_init(void);
-off_t thttpd_php_request(httpd_conn *hc, int show_source);
-
-void thttpd_register_on_close(void (*)(int));
-void thttpd_closed_conn(int fd);
-int thttpd_get_fd(void);
-void thttpd_set_dont_close(void);
-
-#endif
diff --git a/sapi/thttpd/stub.c b/sapi/thttpd/stub.c
deleted file mode 100644
index e69de29bb2..0000000000
--- a/sapi/thttpd/stub.c
+++ /dev/null
diff --git a/sapi/thttpd/thttpd.c b/sapi/thttpd/thttpd.c
deleted file mode 100644
index 9c62a2c116..0000000000
--- a/sapi/thttpd/thttpd.c
+++ /dev/null
@@ -1,768 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Sascha Schumann <sascha@schumann.cx> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#include "php.h"
-#include "SAPI.h"
-#include "php_main.h"
-#include "php_thttpd.h"
-#include "php_variables.h"
-#include "version.h"
-#include "php_ini.h"
-#include "zend_highlight.h"
-
-#include "ext/standard/php_smart_str.h"
-
-#include <sys/time.h>
-#include <sys/types.h>
-#include <sys/uio.h>
-#include <stdlib.h>
-#include <unistd.h>
-
-#ifdef HAVE_GETNAMEINFO
-#include <sys/socket.h>
-#include <netdb.h>
-#endif
-
-typedef struct {
- httpd_conn *hc;
- void (*on_close)(int);
-
- size_t unconsumed_length;
- smart_str sbuf;
- int seen_cl;
- int seen_cn;
-} php_thttpd_globals;
-
-#define PHP_SYS_CALL(x) do { x } while (n == -1 && errno == EINTR)
-
-#ifdef PREMIUM_THTTPD
-# define do_keep_alive persistent
-#endif
-
-#ifdef ZTS
-static int thttpd_globals_id;
-#define TG(v) TSRMG(thttpd_globals_id, php_thttpd_globals *, v)
-#else
-static php_thttpd_globals thttpd_globals;
-#define TG(v) (thttpd_globals.v)
-#endif
-
-static int sapi_thttpd_ub_write(const char *str, uint str_length TSRMLS_DC)
-{
- int n;
- uint sent = 0;
-
- if (TG(sbuf).c != 0) {
- smart_str_appendl_ex(&TG(sbuf), str, str_length, 1);
- return str_length;
- }
-
- while (str_length > 0) {
- PHP_SYS_CALL(n = send(TG(hc)->conn_fd, str, str_length, 0););
-
- if (n == -1) {
- if (errno == EAGAIN) {
- smart_str_appendl_ex(&TG(sbuf), str, str_length, 1);
-
- return sent + str_length;
- } else
- php_handle_aborted_connection();
- }
-
- TG(hc)->bytes_sent += n;
- str += n;
- sent += n;
- str_length -= n;
- }
-
- return sent;
-}
-
-#define COMBINE_HEADERS 64
-
-#if defined(IOV_MAX)
-# if IOV_MAX - 64 <= 0
-# define SERIALIZE_HEADERS
-# endif
-#endif
-
-static int do_writev(struct iovec *vec, int nvec, int len TSRMLS_DC)
-{
- int n;
-
- assert(nvec <= IOV_MAX);
-
- if (TG(sbuf).c == 0) {
- PHP_SYS_CALL(n = writev(TG(hc)->conn_fd, vec, nvec););
-
- if (n == -1) {
- if (errno == EAGAIN) {
- n = 0;
- } else {
- php_handle_aborted_connection();
- }
- }
-
-
- TG(hc)->bytes_sent += n;
- } else {
- n = 0;
- }
-
- if (n < len) {
- int i;
-
- /* merge all unwritten data into sbuf */
- for (i = 0; i < nvec; vec++, i++) {
- /* has this vector been written completely? */
- if (n >= vec->iov_len) {
- /* yes, proceed */
- n -= vec->iov_len;
- continue;
- }
-
- if (n > 0) {
- /* adjust vector */
- vec->iov_base = (char *) vec->iov_base + n;
- vec->iov_len -= n;
- n = 0;
- }
-
- smart_str_appendl_ex(&TG(sbuf), vec->iov_base, vec->iov_len, 1);
- }
- }
-
- return 0;
-}
-
-#ifdef SERIALIZE_HEADERS
-# define ADD_VEC(str,l) smart_str_appendl(&vec_str, (str), (l))
-# define VEC_BASE() smart_str vec_str = {0}
-# define VEC_FREE() smart_str_free(&vec_str)
-#else
-# define ADD_VEC(str,l) vec[n].iov_base=str;len += (vec[n].iov_len=l); n++
-# define VEC_BASE() struct iovec vec[COMBINE_HEADERS]
-# define VEC_FREE() do {} while (0)
-#endif
-
-#define ADD_VEC_S(str) ADD_VEC((str), sizeof(str)-1)
-
-#define CL_TOKEN "Content-length: "
-#define CN_TOKEN "Connection: "
-#define KA_DO "Connection: keep-alive\r\n"
-#define KA_NO "Connection: close\r\n"
-#define DEF_CT "Content-Type: text/html\r\n"
-
-static int sapi_thttpd_send_headers(sapi_headers_struct *sapi_headers TSRMLS_DC)
-{
- char buf[1024], *p;
- VEC_BASE();
- int n = 0;
- zend_llist_position pos;
- sapi_header_struct *h;
- size_t len = 0;
-
- if (!SG(sapi_headers).http_status_line) {
- ADD_VEC_S("HTTP/1.1 ");
- p = smart_str_print_long(buf+sizeof(buf)-1,
- SG(sapi_headers).http_response_code);
- ADD_VEC(p, strlen(p));
- ADD_VEC_S(" HTTP\r\n");
- } else {
- ADD_VEC(SG(sapi_headers).http_status_line,
- strlen(SG(sapi_headers).http_status_line));
- ADD_VEC("\r\n", 2);
- }
- TG(hc)->status = SG(sapi_headers).http_response_code;
-
- if (SG(sapi_headers).send_default_content_type) {
- ADD_VEC(DEF_CT, strlen(DEF_CT));
- }
-
- h = zend_llist_get_first_ex(&sapi_headers->headers, &pos);
- while (h) {
-
- switch (h->header[0]) {
- case 'c': case 'C':
- if (!TG(seen_cl) && strncasecmp(h->header, CL_TOKEN, sizeof(CL_TOKEN)-1) == 0) {
- TG(seen_cl) = 1;
- } else if (!TG(seen_cn) && strncasecmp(h->header, CN_TOKEN, sizeof(CN_TOKEN)-1) == 0) {
- TG(seen_cn) = 1;
- }
- }
-
- ADD_VEC(h->header, h->header_len);
-#ifndef SERIALIZE_HEADERS
- if (n >= COMBINE_HEADERS - 1) {
- len = do_writev(vec, n, len TSRMLS_CC);
- n = 0;
- }
-#endif
- ADD_VEC("\r\n", 2);
-
- h = zend_llist_get_next_ex(&sapi_headers->headers, &pos);
- }
-
- if (TG(seen_cl) && !TG(seen_cn) && TG(hc)->do_keep_alive) {
- ADD_VEC(KA_DO, sizeof(KA_DO)-1);
- } else {
- TG(hc)->do_keep_alive = 0;
- ADD_VEC(KA_NO, sizeof(KA_NO)-1);
- }
-
- ADD_VEC("\r\n", 2);
-
-#ifdef SERIALIZE_HEADERS
- sapi_thttpd_ub_write(vec_str.c, vec_str.len TSRMLS_CC);
-#else
- do_writev(vec, n, len TSRMLS_CC);
-#endif
-
- VEC_FREE();
-
- return SAPI_HEADER_SENT_SUCCESSFULLY;
-}
-
-/* to understand this, read cgi_interpose_input() in libhttpd.c */
-#define SIZEOF_UNCONSUMED_BYTES() (TG(hc)->read_idx - TG(hc)->checked_idx)
-#define CONSUME_BYTES(n) do { TG(hc)->checked_idx += (n); } while (0)
-
-
-static int sapi_thttpd_read_post(char *buffer, uint count_bytes TSRMLS_DC)
-{
- size_t read_bytes = 0;
-
- if (TG(unconsumed_length) > 0) {
- read_bytes = MIN(TG(unconsumed_length), count_bytes);
- memcpy(buffer, TG(hc)->read_buf + TG(hc)->checked_idx, read_bytes);
- TG(unconsumed_length) -= read_bytes;
- CONSUME_BYTES(read_bytes);
- }
-
- return read_bytes;
-}
-
-static char *sapi_thttpd_read_cookies(TSRMLS_D)
-{
- return TG(hc)->cookie;
-}
-
-#define BUF_SIZE 512
-#define ADD_STRING_EX(name,buf) \
- php_register_variable(name, buf, track_vars_array TSRMLS_CC)
-#define ADD_STRING(name) ADD_STRING_EX((name), buf)
-
-static void sapi_thttpd_register_variables(zval *track_vars_array TSRMLS_DC)
-{
- char buf[BUF_SIZE + 1];
- char *p;
-
- php_register_variable("PHP_SELF", SG(request_info).request_uri, track_vars_array TSRMLS_CC);
- php_register_variable("SERVER_SOFTWARE", SERVER_SOFTWARE, track_vars_array TSRMLS_CC);
- php_register_variable("GATEWAY_INTERFACE", "CGI/1.1", track_vars_array TSRMLS_CC);
- php_register_variable("REQUEST_METHOD", (char *) SG(request_info).request_method, track_vars_array TSRMLS_CC);
- php_register_variable("REQUEST_URI", SG(request_info).request_uri, track_vars_array TSRMLS_CC);
- php_register_variable("PATH_TRANSLATED", SG(request_info).path_translated, track_vars_array TSRMLS_CC);
-
- if (TG(hc)->one_one) {
- php_register_variable("SERVER_PROTOCOL", "HTTP/1.1", track_vars_array TSRMLS_CC);
- } else {
- php_register_variable("SERVER_PROTOCOL", "HTTP/1.0", track_vars_array TSRMLS_CC);
- }
-
- p = httpd_ntoa(&TG(hc)->client_addr);
-
- ADD_STRING_EX("REMOTE_ADDR", p);
- ADD_STRING_EX("REMOTE_HOST", p);
-
- ADD_STRING_EX("SERVER_PORT",
- smart_str_print_long(buf + sizeof(buf) - 1,
- TG(hc)->hs->port));
-
- buf[0] = '/';
- memcpy(buf + 1, TG(hc)->pathinfo, strlen(TG(hc)->pathinfo) + 1);
- ADD_STRING("PATH_INFO");
-
- buf[0] = '/';
- memcpy(buf + 1, TG(hc)->origfilename, strlen(TG(hc)->origfilename) + 1);
- ADD_STRING("SCRIPT_NAME");
-
-#define CONDADD(name, field) \
- if (TG(hc)->field[0]) { \
- php_register_variable(#name, TG(hc)->field, track_vars_array TSRMLS_CC); \
- }
-
- CONDADD(QUERY_STRING, query);
- CONDADD(HTTP_HOST, hdrhost);
- CONDADD(HTTP_REFERER, referer);
- CONDADD(HTTP_USER_AGENT, useragent);
- CONDADD(HTTP_ACCEPT, accept);
- CONDADD(HTTP_ACCEPT_LANGUAGE, acceptl);
- CONDADD(HTTP_ACCEPT_ENCODING, accepte);
- CONDADD(HTTP_COOKIE, cookie);
- CONDADD(CONTENT_TYPE, contenttype);
- CONDADD(REMOTE_USER, remoteuser);
- CONDADD(SERVER_PROTOCOL, protocol);
-
- if (TG(hc)->contentlength != -1) {
- ADD_STRING_EX("CONTENT_LENGTH",
- smart_str_print_long(buf + sizeof(buf) - 1,
- TG(hc)->contentlength));
- }
-
- if (TG(hc)->authorization[0])
- php_register_variable("AUTH_TYPE", "Basic", track_vars_array TSRMLS_CC);
-}
-
-static PHP_MINIT_FUNCTION(thttpd)
-{
- return SUCCESS;
-}
-
-static zend_module_entry php_thttpd_module = {
- STANDARD_MODULE_HEADER,
- "thttpd",
- NULL,
- PHP_MINIT(thttpd),
- NULL,
- NULL,
- NULL,
- NULL, /* info */
- NULL,
- STANDARD_MODULE_PROPERTIES
-};
-
-static int php_thttpd_startup(sapi_module_struct *sapi_module)
-{
-#if PHP_API_VERSION >= 20020918
- if (php_module_startup(sapi_module, &php_thttpd_module, 1) == FAILURE) {
-#else
- if (php_module_startup(sapi_module) == FAILURE
- || zend_startup_module(&php_thttpd_module) == FAILURE) {
-#endif
- return FAILURE;
- }
- return SUCCESS;
-}
-
-static int sapi_thttpd_get_fd(int *nfd TSRMLS_DC)
-{
- if (nfd) *nfd = TG(hc)->conn_fd;
- return SUCCESS;
-}
-
-static sapi_module_struct thttpd_sapi_module = {
- "thttpd",
- "thttpd",
-
- php_thttpd_startup,
- php_module_shutdown_wrapper,
-
- NULL, /* activate */
- NULL, /* deactivate */
-
- sapi_thttpd_ub_write,
- NULL,
- NULL, /* get uid */
- NULL, /* getenv */
-
- php_error,
-
- NULL,
- sapi_thttpd_send_headers,
- NULL,
- sapi_thttpd_read_post,
- sapi_thttpd_read_cookies,
-
- sapi_thttpd_register_variables,
- NULL, /* Log message */
-
- NULL, /* php.ini path override */
- NULL, /* Block interruptions */
- NULL, /* Unblock interruptions */
-
- NULL,
- NULL,
- NULL,
- 0,
- sapi_thttpd_get_fd
-};
-
-static void thttpd_module_main(int show_source TSRMLS_DC)
-{
- zend_file_handle file_handle;
-
- if (php_request_startup(TSRMLS_C) == FAILURE) {
- return;
- }
-
- if (show_source) {
- zend_syntax_highlighter_ini syntax_highlighter_ini;
-
- php_get_highlight_struct(&syntax_highlighter_ini);
- highlight_file(SG(request_info).path_translated, &syntax_highlighter_ini TSRMLS_CC);
- } else {
- file_handle.type = ZEND_HANDLE_FILENAME;
- file_handle.filename = SG(request_info).path_translated;
- file_handle.free_filename = 0;
- file_handle.opened_path = NULL;
-
- php_execute_script(&file_handle TSRMLS_CC);
- }
-
- php_request_shutdown(NULL);
-}
-
-static void thttpd_request_ctor(TSRMLS_D)
-{
- smart_str s = {0};
-
- TG(seen_cl) = 0;
- TG(seen_cn) = 0;
- TG(sbuf).c = 0;
- SG(request_info).query_string = TG(hc)->query?strdup(TG(hc)->query):NULL;
-
- smart_str_appends_ex(&s, TG(hc)->hs->cwd, 1);
- smart_str_appends_ex(&s, TG(hc)->expnfilename, 1);
- smart_str_0(&s);
- SG(request_info).path_translated = s.c;
-
- s.c = NULL;
- smart_str_appendc_ex(&s, '/', 1);
- smart_str_appends_ex(&s, TG(hc)->origfilename, 1);
- smart_str_0(&s);
- SG(request_info).request_uri = s.c;
- SG(request_info).request_method = httpd_method_str(TG(hc)->method);
- SG(sapi_headers).http_response_code = 200;
- if (TG(hc)->contenttype)
- SG(request_info).content_type = strdup(TG(hc)->contenttype);
- SG(request_info).content_length = TG(hc)->contentlength == -1 ? 0
- : TG(hc)->contentlength;
-
- TG(unconsumed_length) = SG(request_info).content_length;
-
- php_handle_auth_data(TG(hc)->authorization TSRMLS_CC);
-}
-
-static void thttpd_request_dtor(TSRMLS_D)
-{
- smart_str_free_ex(&TG(sbuf), 1);
- if (SG(request_info).query_string)
- free(SG(request_info).query_string);
- free(SG(request_info).request_uri);
- free(SG(request_info).path_translated);
- if (SG(request_info).content_type)
- free(SG(request_info).content_type);
-}
-
-#ifdef ZTS
-
-#ifdef TSRM_ST
-#define thread_create_simple_detached(n) st_thread_create(n, NULL, 0, 0)
-#define thread_usleep(n) st_usleep(n)
-#define thread_exit() st_thread_exit(NULL)
-/* No preemption, simple operations are safe */
-#define thread_atomic_inc(n) (++n)
-#define thread_atomic_dec(n) (--n)
-#else
-#error No thread primitives available
-#endif
-
-/* We might want to replace this with a STAILQ */
-typedef struct qreq {
- httpd_conn *hc;
- struct qreq *next;
-} qreq_t;
-
-static MUTEX_T qr_lock;
-static qreq_t *queued_requests;
-static qreq_t *last_qr;
-static int nr_free_threads;
-static int nr_threads;
-static int max_threads = 50;
-
-#define HANDLE_STRINGS() { \
- HANDLE_STR(encodedurl); \
- HANDLE_STR(decodedurl); \
- HANDLE_STR(origfilename); \
- HANDLE_STR(expnfilename); \
- HANDLE_STR(pathinfo); \
- HANDLE_STR(query); \
- HANDLE_STR(referer); \
- HANDLE_STR(useragent); \
- HANDLE_STR(accept); \
- HANDLE_STR(accepte); \
- HANDLE_STR(acceptl); \
- HANDLE_STR(cookie); \
- HANDLE_STR(contenttype); \
- HANDLE_STR(authorization); \
- HANDLE_STR(remoteuser); \
- }
-
-static httpd_conn *duplicate_conn(httpd_conn *hc, httpd_conn *nhc)
-{
- memcpy(nhc, hc, sizeof(*nhc));
-
-#define HANDLE_STR(m) nhc->m = nhc->m ? strdup(nhc->m) : NULL
- HANDLE_STRINGS();
-#undef HANDLE_STR
-
- return nhc;
-}
-
-static void destroy_conn(httpd_conn *hc)
-{
-#define HANDLE_STR(m) if (hc->m) free(hc->m)
- HANDLE_STRINGS();
-#undef HANDLE_STR
-}
-
-static httpd_conn *dequeue_request(void)
-{
- httpd_conn *ret = NULL;
- qreq_t *m;
-
- tsrm_mutex_lock(qr_lock);
- if (queued_requests) {
- m = queued_requests;
- ret = m->hc;
- if (!(queued_requests = m->next))
- last_qr = NULL;
- free(m);
- }
- tsrm_mutex_unlock(qr_lock);
-
- return ret;
-}
-
-static void *worker_thread(void *);
-
-static void queue_request(httpd_conn *hc)
-{
- qreq_t *m;
- httpd_conn *nhc;
-
- /* Mark as long-running request */
- hc->file_address = (char *) 1;
-
- /*
- * We cannot synchronously revoke accesses to hc in the worker
- * thread, so we need to pass a copy of hc to the worker thread.
- */
- nhc = malloc(sizeof *nhc);
- duplicate_conn(hc, nhc);
-
- /* Allocate request queue container */
- m = malloc(sizeof *m);
- m->hc = nhc;
- m->next = NULL;
-
- tsrm_mutex_lock(qr_lock);
- /* Create new threads when reaching a certain threshhold */
- if (nr_threads < max_threads && nr_free_threads < 2) {
- nr_threads++; /* protected by qr_lock */
-
- thread_atomic_inc(nr_free_threads);
- thread_create_simple_detached(worker_thread);
- }
- /* Insert container into request queue */
- if (queued_requests)
- last_qr->next = m;
- else
- queued_requests = m;
- last_qr = m;
- tsrm_mutex_unlock(qr_lock);
-}
-
-static off_t thttpd_real_php_request(httpd_conn *hc, int TSRMLS_DC);
-
-static void *worker_thread(void *dummy)
-{
- int do_work = 50;
- httpd_conn *hc;
-
- while (do_work) {
- hc = dequeue_request();
-
- if (!hc) {
-/* do_work--; */
- thread_usleep(500000);
- continue;
- }
-/* do_work = 50; */
-
- thread_atomic_dec(nr_free_threads);
-
- thttpd_real_php_request(hc, 0 TSRMLS_CC);
- shutdown(hc->conn_fd, 0);
- destroy_conn(hc);
- free(hc);
-
- thread_atomic_inc(nr_free_threads);
- }
- thread_atomic_dec(nr_free_threads);
- thread_atomic_dec(nr_threads);
- thread_exit();
-}
-
-static void remove_dead_conn(int fd)
-{
- qreq_t *m, *prev = NULL;
-
- tsrm_mutex_lock(qr_lock);
- m = queued_requests;
- while (m) {
- if (m->hc->conn_fd == fd) {
- if (prev)
- if (!(prev->next = m->next))
- last_qr = prev;
- else
- if (!(queued_requests = m->next))
- last_qr = NULL;
- destroy_conn(m->hc);
- free(m->hc);
- free(m);
- break;
- }
- prev = m;
- m = m->next;
- }
- tsrm_mutex_unlock(qr_lock);
-}
-
-#endif
-
-static off_t thttpd_real_php_request(httpd_conn *hc, int show_source TSRMLS_DC)
-{
- TG(hc) = hc;
- hc->bytes_sent = 0;
-
- if (hc->contentlength != -1) {
- hc->should_linger = 1;
- hc->do_keep_alive = 0;
- }
-
- if (hc->contentlength != -1
- && SIZEOF_UNCONSUMED_BYTES() < hc->contentlength) {
- hc->read_body_into_mem = 1;
- return 0;
- }
-
- thttpd_request_ctor(TSRMLS_C);
-
- thttpd_module_main(show_source TSRMLS_CC);
-
- /* disable kl, if no content-length was seen or Connection: was set */
- if (TG(seen_cl) == 0 || TG(seen_cn) == 1) {
- TG(hc)->do_keep_alive = 0;
- }
-
- if (TG(sbuf).c != 0) {
- if (TG(hc)->response)
- free(TG(hc)->response);
-
- TG(hc)->response = TG(sbuf).c;
- TG(hc)->responselen = TG(sbuf).len;
- TG(hc)->maxresponse = TG(sbuf).a;
-
- TG(sbuf).c = 0;
- TG(sbuf).len = 0;
- TG(sbuf).a = 0;
- }
-
- thttpd_request_dtor(TSRMLS_C);
-
- return 0;
-}
-
-off_t thttpd_php_request(httpd_conn *hc, int show_source)
-{
-#ifdef ZTS
- queue_request(hc);
-#else
- TSRMLS_FETCH();
- return thttpd_real_php_request(hc, show_source TSRMLS_CC);
-#endif
-}
-
-void thttpd_register_on_close(void (*arg)(int))
-{
- TSRMLS_FETCH();
- TG(on_close) = arg;
-}
-
-void thttpd_closed_conn(int fd)
-{
- TSRMLS_FETCH();
- if (TG(on_close)) TG(on_close)(fd);
-}
-
-int thttpd_get_fd(void)
-{
- TSRMLS_FETCH();
- return TG(hc)->conn_fd;
-}
-
-void thttpd_set_dont_close(void)
-{
- TSRMLS_FETCH();
-#ifndef PREMIUM_THTTPD
- TG(hc)->file_address = (char *) 1;
-#endif
-}
-
-
-void thttpd_php_init(void)
-{
- char *ini;
-
-#ifdef ZTS
- tsrm_startup(1, 1, 0, NULL);
- ts_allocate_id(&thttpd_globals_id, sizeof(php_thttpd_globals), NULL, NULL);
- qr_lock = tsrm_mutex_alloc();
- thttpd_register_on_close(remove_dead_conn);
-#endif
-
- if ((ini = getenv("PHP_INI_PATH"))) {
- thttpd_sapi_module.php_ini_path_override = ini;
- }
-
- sapi_startup(&thttpd_sapi_module);
- thttpd_sapi_module.startup(&thttpd_sapi_module);
-
- {
- TSRMLS_FETCH();
-
- SG(server_context) = (void *) 1;
- }
-}
-
-void thttpd_php_shutdown(void)
-{
- TSRMLS_FETCH();
-
- if (SG(server_context) != NULL) {
- thttpd_sapi_module.shutdown(&thttpd_sapi_module);
- sapi_shutdown();
-#ifdef ZTS
- tsrm_shutdown();
-#endif
- }
-}
diff --git a/sapi/thttpd/thttpd_patch b/sapi/thttpd/thttpd_patch
deleted file mode 100644
index 33de921489..0000000000
--- a/sapi/thttpd/thttpd_patch
+++ /dev/null
@@ -1,2377 +0,0 @@
-diff -ur thttpd-2.21b/Makefile.in thttpd-2.21b-cool/Makefile.in
---- thttpd-2.21b/Makefile.in Thu Mar 29 20:36:21 2001
-+++ thttpd-2.21b-cool/Makefile.in Sat Sep 20 14:43:20 2003
-@@ -46,13 +46,15 @@
-
- # You shouldn't need to edit anything below here.
-
-+include php_makefile
-+
- CC = @CC@
- CCOPT = @V_CCOPT@
- DEFS = @DEFS@
--INCLS = -I.
-+INCLS = -I. $(PHP_CFLAGS)
- CFLAGS = $(CCOPT) $(DEFS) $(INCLS)
--LDFLAGS = @LDFLAGS@
--LIBS = @LIBS@
-+LDFLAGS = @LDFLAGS@ $(PHP_LDFLAGS)
-+LIBS = @LIBS@ $(PHP_LIBS)
- NETLIBS = @V_NETLIBS@
- INSTALL = @INSTALL@
-
-@@ -62,7 +64,7 @@
- @rm -f $@
- $(CC) $(CFLAGS) -c $*.c
-
--SRC = thttpd.c libhttpd.c fdwatch.c mmc.c timers.c match.c tdate_parse.c syslog.c
-+SRC = thttpd.c libhttpd.c fdwatch.c mmc.c timers.c match.c tdate_parse.c syslog.c php_thttpd.c
-
- OBJ = $(SRC:.c=.o) @LIBOBJS@
-
-@@ -77,7 +79,7 @@
- all: this subdirs
- this: $(ALL)
-
--thttpd: $(OBJ)
-+thttpd: $(OBJ) libphp5.a
- @rm -f $@
- $(CC) $(CFLAGS) $(LDFLAGS) -o $@ $(OBJ) $(LIBS) $(NETLIBS)
-
-diff -ur thttpd-2.21b/config.h thttpd-2.21b-cool/config.h
---- thttpd-2.21b/config.h Mon Apr 9 23:57:36 2001
-+++ thttpd-2.21b-cool/config.h Sat Sep 20 14:43:20 2003
-@@ -82,6 +82,11 @@
- */
- #define IDLE_READ_TIMELIMIT 60
-
-+/* CONFIGURE: How many seconds to allow for reading the subsequent requests
-+** on a keep-alive connection. Should be simiar to LINGER_TIME
-+*/
-+#define IDLE_KEEPALIVE_TIMELIMIT 2
-+
- /* CONFIGURE: How many seconds before an idle connection gets closed.
- */
- #define IDLE_SEND_TIMELIMIT 300
-@@ -316,7 +321,7 @@
- /* CONFIGURE: A list of index filenames to check. The files are searched
- ** for in this order.
- */
--#define INDEX_NAMES "index.html", "index.htm", "Default.htm", "index.cgi"
-+#define INDEX_NAMES "index.php", "index.html", "index.htm", "Default.htm", "index.cgi"
-
- /* CONFIGURE: If this is defined then thttpd will automatically generate
- ** index pages for directories that don't have an explicit index file.
-diff -ur thttpd-2.21b/configure thttpd-2.21b-cool/configure
---- thttpd-2.21b/configure Sat Apr 21 02:07:14 2001
-+++ thttpd-2.21b-cool/configure Sat Sep 20 14:43:20 2003
-@@ -1021,7 +1021,7 @@
- fi
- echo "$ac_t""$CPP" 1>&6
-
--for ac_hdr in fcntl.h grp.h memory.h paths.h poll.h sys/poll.h sys/event.h osreldate.h
-+for ac_hdr in fcntl.h grp.h memory.h paths.h poll.h sys/poll.h sys/event.h osreldate.h netinet/tcp.h
- do
- ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
- echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-diff -ur thttpd-2.21b/configure.in thttpd-2.21b-cool/configure.in
---- thttpd-2.21b/configure.in Sat Apr 21 02:06:23 2001
-+++ thttpd-2.21b-cool/configure.in Sat Sep 20 14:43:20 2003
-@@ -64,7 +64,7 @@
- AC_MSG_RESULT(no)
- fi
-
--AC_CHECK_HEADERS(fcntl.h grp.h memory.h paths.h poll.h sys/poll.h sys/event.h osreldate.h)
-+AC_CHECK_HEADERS(fcntl.h grp.h memory.h paths.h poll.h sys/poll.h sys/event.h osreldate.h netinet/tcp.h)
- AC_HEADER_TIME
- AC_HEADER_DIRENT
-
-diff -ur thttpd-2.21b/fdwatch.c thttpd-2.21b-cool/fdwatch.c
---- thttpd-2.21b/fdwatch.c Fri Apr 13 07:36:08 2001
-+++ thttpd-2.21b-cool/fdwatch.c Sat Sep 20 14:43:20 2003
-@@ -419,6 +419,7 @@
- if ( pollfds == (struct pollfd*) 0 || poll_fdidx == (int*) 0 ||
- poll_rfdidx == (int*) 0 )
- return -1;
-+ memset(pollfds, 0, sizeof(struct pollfd) * nfiles);
- return 0;
- }
-
-@@ -460,7 +461,7 @@
-
- ridx = 0;
- for ( i = 0; i < npollfds; ++i )
-- if ( pollfds[i].revents & ( POLLIN | POLLOUT ) )
-+ if ( pollfds[i].revents & ( POLLIN | POLLOUT | POLLERR | POLLHUP | POLLNVAL ) )
- poll_rfdidx[ridx++] = pollfds[i].fd;
-
- return r;
-@@ -472,8 +473,8 @@
- {
- switch ( fd_rw[fd] )
- {
-- case FDW_READ: return pollfds[poll_fdidx[fd]].revents & POLLIN;
-- case FDW_WRITE: return pollfds[poll_fdidx[fd]].revents & POLLOUT;
-+ case FDW_READ: return pollfds[poll_fdidx[fd]].revents & ( POLLIN | POLLERR | POLLHUP | POLLNVAL );
-+ case FDW_WRITE: return pollfds[poll_fdidx[fd]].revents & ( POLLOUT | POLLERR | POLLHUP | POLLNVAL );
- default: return 0;
- }
- }
-diff -ur thttpd-2.21b/libhttpd.c thttpd-2.21b-cool/libhttpd.c
---- thttpd-2.21b/libhttpd.c Tue Apr 24 00:42:40 2001
-+++ thttpd-2.21b-cool/libhttpd.c Sat Sep 20 14:43:29 2003
-@@ -56,6 +56,10 @@
- #include <unistd.h>
- #include <stdarg.h>
-
-+#ifdef HAVE_NETINET_TCP_H
-+#include <netinet/tcp.h>
-+#endif
-+
- #ifdef HAVE_OSRELDATE_H
- #include <osreldate.h>
- #endif /* HAVE_OSRELDATE_H */
-@@ -85,6 +89,12 @@
- #include "match.h"
- #include "tdate_parse.h"
-
-+#include "php_thttpd.h"
-+
-+#ifdef __CYGWIN__
-+# define timezone _timezone
-+#endif
-+
- #ifndef STDIN_FILENO
- #define STDIN_FILENO 0
- #endif
-@@ -111,7 +121,7 @@
- static int initialize_listen_socket( httpd_sockaddr* saP );
- static void unlisten( httpd_server* hs );
- static void add_response( httpd_conn* hc, char* str );
--static void send_mime( httpd_conn* hc, int status, char* title, char* encodings, char* extraheads, char* type, int length, time_t mod );
-+static void send_mime( httpd_conn* hc, int status, char* title, char* encodings, char* extraheads, char* type, int length, time_t mod, const char *, size_t );
- static void send_response( httpd_conn* hc, int status, char* title, char* extraheads, char* form, char* arg );
- static void send_response_tail( httpd_conn* hc );
- static void defang( char* str, char* dfstr, int dfsize );
-@@ -242,6 +252,10 @@
- free( (void*) hs->cwd );
- if ( hs->cgi_pattern != (char*) 0 )
- free( (void*) hs->cgi_pattern );
-+ if ( hs->php_pattern != (char*) 0 )
-+ free( (void*) hs->php_pattern );
-+ if ( hs->phps_pattern != (char*) 0 )
-+ free( (void*) hs->phps_pattern );
- if ( hs->charset != (char*) 0 )
- free( (void*) hs->charset );
- if ( hs->url_pattern != (char*) 0 )
-@@ -249,6 +263,7 @@
- if ( hs->local_pattern != (char*) 0 )
- free( (void*) hs->local_pattern );
- free( (void*) hs );
-+ thttpd_php_shutdown();
- }
-
-
-@@ -257,7 +272,8 @@
- char* hostname, httpd_sockaddr* sa4P, httpd_sockaddr* sa6P, int port,
- char* cgi_pattern, char* charset, char* cwd, int no_log, FILE* logfp,
- int no_symlink, int vhost, int global_passwd, char* url_pattern,
-- char* local_pattern, int no_empty_referers )
-+ char* local_pattern, int no_empty_referers, char* php_pattern,
-+ char* phps_pattern )
- {
- httpd_server* hs;
- static char ghnbuf[256];
-@@ -312,6 +328,8 @@
- }
-
- hs->port = port;
-+ hs->php_pattern = strdup(php_pattern);
-+ hs->phps_pattern = strdup(phps_pattern);
- if ( cgi_pattern == (char*) 0 )
- hs->cgi_pattern = (char*) 0;
- else
-@@ -329,7 +347,7 @@
- while ( ( cp = strstr( hs->cgi_pattern, "|/" ) ) != (char*) 0 )
- (void) strcpy( cp + 1, cp + 2 );
- }
-- hs->charset = strdup( charset );
-+ hs->charset = strdup( charset );
- hs->cwd = strdup( cwd );
- if ( hs->cwd == (char*) 0 )
- {
-@@ -385,6 +403,8 @@
- return (httpd_server*) 0;
- }
-
-+ thttpd_php_init();
-+
- /* Done initializing. */
- if ( hs->binding_hostname == (char*) 0 )
- syslog( LOG_INFO, "%.80s starting on port %d", SERVER_SOFTWARE, hs->port );
-@@ -418,6 +438,11 @@
- }
- (void) fcntl( listen_fd, F_SETFD, 1 );
-
-+#if defined(TCP_DEFER_ACCEPT) && defined(SOL_TCP)
-+ on = 30; /* give clients 30s to send first data packet */
-+ setsockopt(listen_fd, SOL_TCP, TCP_DEFER_ACCEPT, &on, sizeof(on));
-+#endif
-+
- /* Allow reuse of local addresses. */
- on = 1;
- if ( setsockopt(
-@@ -582,6 +607,9 @@
- /* And send it, if necessary. */
- if ( hc->responselen > 0 )
- {
-+/*
-+printf("**RESPONSE [%d]** len = %d\n%*.*s\n", hc->conn_fd, hc->responselen, hc->responselen, hc->responselen, hc->response);
-+*/
- (void) write( hc->conn_fd, hc->response, hc->responselen );
- hc->responselen = 0;
- }
-@@ -619,18 +647,22 @@
- }
- }
-
-+extern time_t httpd_time_now;
-+extern char httpd_now_buf[];
-+
-+#define SMART_STR_USE_REALLOC
-+
-+#include "ext/standard/php_smart_str.h"
-
- static void
--send_mime( httpd_conn* hc, int status, char* title, char* encodings, char* extraheads, char* type, int length, time_t mod )
-+send_mime( httpd_conn* hc, int status, char* title, char* encodings, char* extraheads, char* type, int length, time_t mod, const char *last_modified, size_t last_modified_len)
- {
-- time_t now;
- const char* rfc1123fmt = "%a, %d %b %Y %H:%M:%S GMT";
-- char nowbuf[100];
- char modbuf[100];
-- char fixed_type[500];
-- char buf[1000];
- int partial_content;
--
-+ smart_str s = {0};
-+ int type_len;
-+
- hc->status = status;
- hc->bytes_to_send = length;
- if ( hc->mime_flag )
-@@ -649,41 +681,89 @@
- else
- partial_content = 0;
-
-- now = time( (time_t*) 0 );
- if ( mod == (time_t) 0 )
-- mod = now;
-- (void) strftime( nowbuf, sizeof(nowbuf), rfc1123fmt, gmtime( &now ) );
-- (void) strftime( modbuf, sizeof(modbuf), rfc1123fmt, gmtime( &mod ) );
-- (void) my_snprintf(
-- fixed_type, sizeof(fixed_type), type, hc->hs->charset );
-- (void) my_snprintf( buf, sizeof(buf),
-- "%.20s %d %s\r\nServer: %s\r\nContent-Type: %s\r\nDate: %s\r\nLast-Modified: %s\r\nAccept-Ranges: bytes\r\nConnection: close\r\n",
-- hc->protocol, status, title, EXPOSED_SERVER_SOFTWARE, fixed_type,
-- nowbuf, modbuf );
-- add_response( hc, buf );
-+ mod = httpd_time_now;
-+
-+ if (last_modified == 0) {
-+ (void) strftime( modbuf, sizeof(modbuf), rfc1123fmt, gmtime( &mod ) );
-+ last_modified = modbuf;
-+ last_modified_len = strlen(modbuf);
-+ }
-+
-+ type_len = strlen(type);
-+
-+ if (hc->response) {
-+ s.c = hc->response;
-+ s.len = 0;
-+ s.a = hc->maxresponse;
-+ hc->response = 0;
-+ hc->maxresponse = 0;
-+ }
-+
-+ smart_str_appends(&s, "HTTP/1.1 ");
-+ smart_str_append_long(&s, status);
-+ smart_str_appends(&s, " HTTP\r\nServer: " EXPOSED_SERVER_SOFTWARE "\r\n"
-+ "Content-Type: ");
-+
-+ if (type[type_len-2] == '%' && type[type_len-1] == 's') {
-+ smart_str_appendl(&s, type, type_len - 2);
-+ smart_str_appends(&s, hc->hs->charset);
-+ } else {
-+ smart_str_appendl(&s, type, type_len);
-+ }
-+
-+
-+ smart_str_appends(&s, "\r\nDate: ");
-+ smart_str_appends(&s, httpd_now_buf);
-+ smart_str_appends(&s, "\r\nLast-Modified: ");
-+ smart_str_appendl(&s, last_modified, last_modified_len);
-+ smart_str_appends(&s, "\r\nAccept-Ranges: bytes\r\n");
-+
- if ( encodings[0] != '\0' )
- {
-- (void) my_snprintf( buf, sizeof(buf),
-- "Content-Encoding: %s\r\n", encodings );
-- add_response( hc, buf );
-+ smart_str_appends(&s, "Content-Encoding: ");
-+ smart_str_appends(&s, encodings);
-+ smart_str_appends(&s, "\r\n");
- }
- if ( partial_content )
- {
-- (void) my_snprintf( buf, sizeof(buf),
-- "Content-Range: bytes %ld-%ld/%d\r\nContent-Length: %ld\r\n",
-- (long) hc->init_byte_loc, (long) hc->end_byte_loc, length,
-- (long) ( hc->end_byte_loc - hc->init_byte_loc + 1 ) );
-- add_response( hc, buf );
-+
-+ smart_str_appends(&s, "Content-Range: bytes ");
-+ smart_str_append_long(&s, hc->init_byte_loc);
-+ smart_str_appendc(&s, '-');
-+ smart_str_append_long(&s, hc->end_byte_loc);
-+ smart_str_appendc(&s, '/');
-+ smart_str_append_long(&s, length);
-+ smart_str_appends(&s, "\r\nContent-Length: ");
-+ smart_str_append_long(&s, hc->end_byte_loc - hc->init_byte_loc + 1);
-+ smart_str_appends(&s, "\r\n");
-+
- }
- else if ( length >= 0 )
- {
-- (void) my_snprintf( buf, sizeof(buf),
-- "Content-Length: %d\r\n", length );
-- add_response( hc, buf );
-+ smart_str_appends(&s, "Content-Length: ");
-+ smart_str_append_long(&s, length);
-+ smart_str_appends(&s, "\r\n");
- }
-+ else {
-+ hc->do_keep_alive = 0;
-+ }
- if ( extraheads[0] != '\0' )
-- add_response( hc, extraheads );
-- add_response( hc, "\r\n" );
-+ smart_str_appends(&s, extraheads);
-+ if (hc->do_keep_alive) {
-+ smart_str_appends(&s, "Connection: keep-alive\r\n\r\n" );
-+ } else {
-+ smart_str_appends(&s, "Connection: close\r\n\r\n" );
-+ }
-+ smart_str_0(&s);
-+
-+ if (hc->response) {
-+ free(hc->response);
-+ }
-+ hc->response = s.c;
-+ hc->maxresponse = s.a;
-+ hc->responselen = s.len;
-+
- }
- }
-
-@@ -725,7 +805,7 @@
- {
- char defanged_arg[1000], buf[2000];
-
-- send_mime( hc, status, title, "", extraheads, "text/html", -1, 0 );
-+ send_mime( hc, status, title, "", extraheads, "text/html", -1, 0, 0, 0 );
- (void) my_snprintf( buf, sizeof(buf),
- "<HTML><HEAD><TITLE>%d %s</TITLE></HEAD>\n<BODY BGCOLOR=\"#cc9999\"><H2>%d %s</H2>\n",
- status, title, status, title );
-@@ -764,7 +844,7 @@
- char* cp2;
-
- for ( cp1 = str, cp2 = dfstr;
-- *cp1 != '\0' && cp2 - dfstr < dfsize - 1;
-+ *cp1 != '\0' && cp2 - dfstr < dfsize - 5;
- ++cp1, ++cp2 )
- {
- switch ( *cp1 )
-@@ -834,7 +914,7 @@
- fp = fopen( filename, "r" );
- if ( fp == (FILE*) 0 )
- return 0;
-- send_mime( hc, status, title, "", extraheads, "text/html", -1, 0 );
-+ send_mime( hc, status, title, "", extraheads, "text/html", -1, 0, 0, 0 );
- for (;;)
- {
- r = fread( buf, 1, sizeof(buf) - 1, fp );
-@@ -1336,6 +1416,9 @@
- if ( hc->tildemapped )
- return 1;
-
-+ if ( hc->hostname[0] == '.' || strchr( hc->hostname, '/' ) != (char*) 0 )
-+ return 0;
-+
- /* Figure out the host directory. */
- #ifdef VHOST_DIRLEVELS
- httpd_realloc_str(
-@@ -1436,7 +1519,7 @@
- restlen = strlen( path );
- httpd_realloc_str( &rest, &maxrest, restlen );
- (void) strcpy( rest, path );
-- if ( rest[restlen - 1] == '/' )
-+ if ( restlen > 0 && rest[restlen - 1] == '/' )
- rest[--restlen] = '\0'; /* trim trailing slash */
- if ( ! tildemapped )
- /* Remove any leading slashes. */
-@@ -1603,6 +1686,70 @@
-
-
- int
-+httpd_request_reset(httpd_conn* hc, int preserve_read_buf )
-+{
-+ if (!preserve_read_buf) {
-+ hc->read_idx = 0;
-+ hc->checked_idx = 0;
-+ }
-+
-+ if (hc->read_buf_is_mmap) {
-+ hc->read_buf_is_mmap = 0;
-+ munmap(hc->read_buf, hc->read_size);
-+ hc->read_buf = NULL;
-+ hc->read_size = 0;
-+ httpd_realloc_str( &hc->read_buf, &hc->read_size, 500 );
-+ }
-+ hc->checked_state = CHST_FIRSTWORD;
-+ hc->method = METHOD_UNKNOWN;
-+ hc->status = 0;
-+ hc->bytes_to_send = 0;
-+ hc->bytes_sent = 0;
-+ hc->encodedurl = "";
-+ hc->decodedurl[0] = '\0';
-+ hc->protocol = "UNKNOWN";
-+ hc->origfilename[0] = '\0';
-+ hc->expnfilename[0] = '\0';
-+ hc->encodings[0] = '\0';
-+ hc->pathinfo[0] = '\0';
-+ hc->query[0] = '\0';
-+ hc->referer = "";
-+ hc->useragent = "";
-+ hc->accept[0] = '\0';
-+ hc->accepte[0] = '\0';
-+ hc->acceptl = "";
-+ hc->cookie = "";
-+ hc->contenttype = "";
-+ hc->reqhost[0] = '\0';
-+ hc->hdrhost = "";
-+ hc->hostdir[0] = '\0';
-+ hc->authorization = "";
-+ hc->remoteuser[0] = '\0';
-+ hc->response[0] = '\0';
-+#ifdef TILDE_MAP_2
-+ hc->altdir[0] = '\0';
-+#endif /* TILDE_MAP_2 */
-+ hc->responselen = 0;
-+ hc->if_modified_since = (time_t) -1;
-+ hc->range_if = (time_t) -1;
-+ hc->contentlength = -1;
-+ hc->type = "";
-+ hc->hostname = (char*) 0;
-+ hc->mime_flag = 1;
-+ hc->one_one = 0;
-+ hc->got_range = 0;
-+ hc->tildemapped = 0;
-+ hc->init_byte_loc = 0;
-+ hc->end_byte_loc = -1;
-+ hc->keep_alive = 0;
-+ hc->do_keep_alive = 0;
-+ hc->should_linger = 0;
-+ hc->file_address = (char*) 0;
-+ hc->read_body_into_mem = 0;
-+ return GC_OK;
-+}
-+
-+int
- httpd_get_conn( httpd_server* hs, int listen_fd, httpd_conn* hc )
- {
- httpd_sockaddr sa;
-@@ -1612,6 +1759,7 @@
- {
- hc->read_size = 0;
- httpd_realloc_str( &hc->read_buf, &hc->read_size, 500 );
-+ hc->read_buf_is_mmap = 0;
- hc->maxdecodedurl =
- hc->maxorigfilename = hc->maxexpnfilename = hc->maxencodings =
- hc->maxpathinfo = hc->maxquery = hc->maxaccept =
-@@ -1631,12 +1779,19 @@
- httpd_realloc_str( &hc->reqhost, &hc->maxreqhost, 0 );
- httpd_realloc_str( &hc->hostdir, &hc->maxhostdir, 0 );
- httpd_realloc_str( &hc->remoteuser, &hc->maxremoteuser, 0 );
-- httpd_realloc_str( &hc->response, &hc->maxresponse, 0 );
-+ httpd_realloc_str( &hc->response, &hc->maxresponse, 350 );
- #ifdef TILDE_MAP_2
- httpd_realloc_str( &hc->altdir, &hc->maxaltdir, 0 );
- #endif /* TILDE_MAP_2 */
- hc->initialized = 1;
- }
-+ if (hc->read_buf_is_mmap) {
-+ hc->read_buf_is_mmap = 0;
-+ munmap(hc->read_buf, hc->read_size);
-+ hc->read_buf = NULL;
-+ hc->read_size = 0;
-+ httpd_realloc_str( &hc->read_buf, &hc->read_size, 500 );
-+ }
-
- /* Accept the new connection. */
- sz = sizeof(sa);
-@@ -1657,53 +1812,12 @@
- hc->hs = hs;
- memset( &hc->client_addr, 0, sizeof(hc->client_addr) );
- memcpy( &hc->client_addr, &sa, sockaddr_len( &sa ) );
-- hc->read_idx = 0;
-- hc->checked_idx = 0;
-- hc->checked_state = CHST_FIRSTWORD;
-- hc->method = METHOD_UNKNOWN;
-- hc->status = 0;
-- hc->bytes_to_send = 0;
-- hc->bytes_sent = 0;
-- hc->encodedurl = "";
-- hc->decodedurl[0] = '\0';
-- hc->protocol = "UNKNOWN";
-- hc->origfilename[0] = '\0';
-- hc->expnfilename[0] = '\0';
-- hc->encodings[0] = '\0';
-- hc->pathinfo[0] = '\0';
-- hc->query[0] = '\0';
-- hc->referer = "";
-- hc->useragent = "";
-- hc->accept[0] = '\0';
-- hc->accepte[0] = '\0';
-- hc->acceptl = "";
-- hc->cookie = "";
-- hc->contenttype = "";
-- hc->reqhost[0] = '\0';
-- hc->hdrhost = "";
-- hc->hostdir[0] = '\0';
-- hc->authorization = "";
-- hc->remoteuser[0] = '\0';
-- hc->response[0] = '\0';
--#ifdef TILDE_MAP_2
-- hc->altdir[0] = '\0';
--#endif /* TILDE_MAP_2 */
-- hc->responselen = 0;
-- hc->if_modified_since = (time_t) -1;
-- hc->range_if = (time_t) -1;
-- hc->contentlength = -1;
-- hc->type = "";
-- hc->hostname = (char*) 0;
-- hc->mime_flag = 1;
-- hc->one_one = 0;
-- hc->got_range = 0;
-- hc->tildemapped = 0;
-- hc->init_byte_loc = 0;
-- hc->end_byte_loc = -1;
-- hc->keep_alive = 0;
-- hc->should_linger = 0;
-- hc->file_address = (char*) 0;
-- return GC_OK;
-+
-+/*
-+printf("doing httpd_get_con(%d)\n", hc->conn_fd);
-+*/
-+
-+ return httpd_request_reset(hc, 0);
- }
-
-
-@@ -1720,6 +1834,9 @@
- {
- char c;
-
-+/*
-+printf("**REQUEST [%d]**\n%*.*s\n", hc->conn_fd, hc->read_idx, hc->read_idx, hc->read_buf);
-+*/
- for ( ; hc->checked_idx < hc->read_idx; ++hc->checked_idx )
- {
- c = hc->read_buf[hc->checked_idx];
-@@ -1912,8 +2029,11 @@
- eol = strpbrk( protocol, " \t\n\r" );
- if ( eol != (char*) 0 )
- *eol = '\0';
-- if ( strcasecmp( protocol, "HTTP/1.0" ) != 0 )
-+ if ( strcasecmp( protocol, "HTTP/1.0" ) != 0 ) {
- hc->one_one = 1;
-+ hc->keep_alive = 1;
-+ hc->do_keep_alive = 1;
-+ }
- }
- }
- /* Check for HTTP/1.1 absolute URL. */
-@@ -2129,6 +2249,7 @@
- cp = &buf[11];
- cp += strspn( cp, " \t" );
- if ( strcasecmp( cp, "keep-alive" ) == 0 )
-+ hc->do_keep_alive = 1;
- hc->keep_alive = 1;
- }
- #ifdef LOG_UNKNOWN_HEADERS
-@@ -2168,6 +2289,9 @@
- }
- }
-
-+/*
-+printf("one_one = %d keep_alive = %d\n", hc->one_one, hc->keep_alive);
-+*/
- if ( hc->one_one )
- {
- /* Check that HTTP/1.1 requests specify a host, as required. */
-@@ -2177,14 +2301,14 @@
- return -1;
- }
-
-- /* If the client wants to do keep-alives, it might also be doing
-- ** pipelining. There's no way for us to tell. Since we don't
-- ** implement keep-alives yet, if we close such a connection there
-- ** might be unread pipelined requests waiting. So, we have to
-- ** do a lingering close.
-+ /*
-+ ** Disable keep alive support for bad browsers,
-+ ** list taken from Apache 1.3.19
- */
-- if ( hc->keep_alive )
-- hc->should_linger = 1;
-+ if ( hc->do_keep_alive &&
-+ ( strstr(hc->useragent, "Mozilla/2") != NULL ||
-+ strstr(hc->useragent, "MSIE 4.0b2;") != NULL))
-+ hc->do_keep_alive = 0;
- }
-
- /* Ok, the request has been parsed. Now we resolve stuff that
-@@ -2349,15 +2473,24 @@
-
-
- void
--httpd_close_conn( httpd_conn* hc, struct timeval* nowP )
-- {
-- make_log_entry( hc, nowP );
-+httpd_complete_request( httpd_conn* hc, struct timeval* nowP)
-+{
-+ if (hc->method != METHOD_UNKNOWN)
-+ make_log_entry( hc, nowP );
-
-- if ( hc->file_address != (char*) 0 )
-+ if ( hc->file_address == (char*) 1 )
-+ {
-+ thttpd_closed_conn(hc->conn_fd);
-+ } else if ( hc->file_address != (char*) 0 )
- {
- mmc_unmap( hc->file_address, &(hc->sb), nowP );
- hc->file_address = (char*) 0;
- }
-+ }
-+
-+void
-+httpd_close_conn( httpd_conn* hc, struct timeval* nowP )
-+{
- if ( hc->conn_fd >= 0 )
- {
- (void) close( hc->conn_fd );
-@@ -2370,7 +2503,12 @@
- {
- if ( hc->initialized )
- {
-- free( (void*) hc->read_buf );
-+
-+ if ( hc->read_buf_is_mmap ) {
-+ munmap( hc->read_buf, hc->read_size );
-+ } else {
-+ free( (void*) hc->read_buf );
-+ }
- free( (void*) hc->decodedurl );
- free( (void*) hc->origfilename );
- free( (void*) hc->expnfilename );
-@@ -2556,7 +2694,7 @@
- return -1;
- }
-
-- send_mime( hc, 200, ok200title, "", "", "text/html", -1, hc->sb.st_mtime );
-+ send_mime( hc, 200, ok200title, "", "", "text/html", -1, hc->sb.st_mtime, 0, 0 );
- if ( hc->method == METHOD_HEAD )
- closedir( dirp );
- else if ( hc->method == METHOD_GET )
-@@ -3026,11 +3164,9 @@
- post_post_garbage_hack( httpd_conn* hc )
- {
- char buf[2];
-- int r;
-
-- r = recv( hc->conn_fd, buf, sizeof(buf), MSG_PEEK );
-- if ( r > 0 )
-- (void) read( hc->conn_fd, buf, r );
-+ fcntl(hc->conn_fd, F_SETFL, O_NONBLOCK);
-+ (void) read( hc->conn_fd, buf, 2 );
- }
-
-
-@@ -3313,6 +3449,11 @@
- int r;
- ClientData client_data;
-
-+ /*
-+ ** We are not going to leave the socket open after a CGI... too hard
-+ */
-+ hc->do_keep_alive = 0;
-+
- if ( hc->method == METHOD_GET || hc->method == METHOD_POST )
- {
- httpd_clear_ndelay( hc->conn_fd );
-@@ -3369,6 +3510,7 @@
- int expnlen, indxlen;
- char* cp;
- char* pi;
-+ int nocache = 0;
-
- expnlen = strlen( hc->expnfilename );
-
-@@ -3561,6 +3703,16 @@
- match( hc->hs->cgi_pattern, hc->expnfilename ) )
- return cgi( hc );
-
-+ if ( hc->hs->php_pattern != (char*) 0 &&
-+ match( hc->hs->php_pattern, hc->expnfilename)) {
-+ return thttpd_php_request( hc, 0 );
-+ }
-+
-+ if ( hc->hs->phps_pattern != (char*) 0 &&
-+ match( hc->hs->phps_pattern, hc->expnfilename)) {
-+ return thttpd_php_request( hc, 1 );
-+ }
-+
- /* It's not CGI. If it's executable or there's pathinfo, someone's
- ** trying to either serve or run a non-CGI file as CGI. Either case
- ** is prohibited.
-@@ -3594,32 +3746,46 @@
- hc->end_byte_loc = hc->sb.st_size - 1;
-
- figure_mime( hc );
-+ if ( strncmp(hc->decodedurl, "/nocache/", sizeof("/nocache/") - 1 ) == 0 )
-+ nocache = 1;
-
- if ( hc->method == METHOD_HEAD )
- {
- send_mime(
- hc, 200, ok200title, hc->encodings, "", hc->type, hc->sb.st_size,
-- hc->sb.st_mtime );
-+ hc->sb.st_mtime, 0, 0 );
- }
-- else if ( hc->if_modified_since != (time_t) -1 &&
-+ else if ( !nocache && hc->if_modified_since != (time_t) -1 &&
- hc->if_modified_since >= hc->sb.st_mtime )
- {
-- hc->method = METHOD_HEAD;
- send_mime(
-- hc, 304, err304title, hc->encodings, "", hc->type, hc->sb.st_size,
-- hc->sb.st_mtime );
-+ hc, 304, err304title, hc->encodings, "", hc->type, -1,
-+ hc->sb.st_mtime, 0, 0 );
- }
- else
- {
-- hc->file_address = mmc_map( hc->expnfilename, &(hc->sb), nowP );
-+ char *extraheads = "";
-+ char *lm;
-+ size_t lml;
-+
-+ if ( nocache )
-+ {
-+ extraheads = "Expires: Thu, 19 Nov 1981 08:52:00 GMT\r\n"
-+ "Cache-Control: no-store, no-cache, must-revalidate, "
-+ "post-check=0, pre-check=0\r\n"
-+ "Pragma: no-cache\r\n";
-+ }
-+
-+ hc->file_address = mmc_map( hc->expnfilename, &(hc->sb), nowP, nocache, &lm, &lml );
- if ( hc->file_address == (char*) 0 )
- {
- httpd_send_err( hc, 500, err500title, "", err500form, hc->encodedurl );
- return -1;
- }
-+
- send_mime(
-- hc, 200, ok200title, hc->encodings, "", hc->type, hc->sb.st_size,
-- hc->sb.st_mtime );
-+ hc, 200, ok200title, hc->encodings, extraheads, hc->type, hc->sb.st_size,
-+ hc->sb.st_mtime, lm, lml );
- }
-
- return 0;
-@@ -3638,6 +3804,9 @@
- return r;
- }
-
-+#define smart_str_append_const(a,b) smart_str_appendl(a,b,sizeof(b)-1)
-+
-+static smart_str bentries;
-
- static void
- make_log_entry( httpd_conn* hc, struct timeval* nowP )
-@@ -3648,88 +3817,62 @@
-
- if ( hc->hs->no_log )
- return;
--
-- /* This is straight CERN Combined Log Format - the only tweak
-- ** being that if we're using syslog() we leave out the date, because
-- ** syslogd puts it in. The included syslogtocern script turns the
-- ** results into true CERN format.
-- */
--
- /* Format remote user. */
- if ( hc->remoteuser[0] != '\0' )
-- ru = hc->remoteuser;
-+ ru = hc->remoteuser;
- else
-- ru = "-";
-+ ru = "-";
- /* If we're vhosting, prepend the hostname to the url. This is
- ** a little weird, perhaps writing separate log files for
- ** each vhost would make more sense.
- */
-- if ( hc->hs->vhost && ! hc->tildemapped )
-- (void) my_snprintf( url, sizeof(url),
-- "/%.100s%.200s",
-- hc->hostname == (char*) 0 ? hc->hs->server_hostname : hc->hostname,
-- hc->encodedurl );
-- else
-- (void) my_snprintf( url, sizeof(url),
-- "%.200s", hc->encodedurl );
-- /* Format the bytes. */
-- if ( (long) hc->bytes_sent >= 0 )
-- (void) my_snprintf( bytes, sizeof(bytes),
-- "%ld", (long) hc->bytes_sent );
-- else
-- (void) strcpy( bytes, "-" );
-
- /* Logfile or syslog? */
- if ( hc->hs->logfp != (FILE*) 0 )
-- {
-- time_t now;
-- struct tm* t;
-- const char* cernfmt_nozone = "%d/%b/%Y:%H:%M:%S";
-- char date_nozone[100];
-- int zone;
-- char sign;
-- char date[100];
--
-- /* Get the current time, if necessary. */
-- if ( nowP != (struct timeval*) 0 )
-- now = nowP->tv_sec;
-- else
-- now = time( (time_t*) 0 );
-- /* Format the time, forcing a numeric timezone (some log analyzers
-- ** are stoooopid about this).
-- */
-- t = localtime( &now );
-- (void) strftime( date_nozone, sizeof(date_nozone), cernfmt_nozone, t );
--#ifdef HAVE_TM_GMTOFF
-- zone = t->tm_gmtoff / 60L;
--#else
-- zone = -timezone / 60L;
-- /* Probably have to add something about daylight time here. */
--#endif
-- if ( zone >= 0 )
-- sign = '+';
-- else
-- {
-- sign = '-';
-- zone = -zone;
-- }
-- zone = ( zone / 60 ) * 100 + zone % 60;
-- (void) my_snprintf( date, sizeof(date),
-- "%s %c%04d", date_nozone, sign, zone );
-- /* And write the log entry. */
-- (void) fprintf( hc->hs->logfp,
-- "%.80s - %.80s [%s] \"%.80s %.300s %.80s\" %d %s \"%.200s\" \"%.80s\"\n",
-- httpd_ntoa( &hc->client_addr ), ru, date,
-- httpd_method_str( hc->method ), url, hc->protocol,
-- hc->status, bytes, hc->referer, hc->useragent );
-- (void) fflush( hc->hs->logfp ); /* don't need to flush every time */
-- }
-- else
-- syslog( LOG_INFO,
-- "%.80s - %.80s \"%.80s %.200s %.80s\" %d %s \"%.200s\" \"%.80s\"",
-- httpd_ntoa( &hc->client_addr ), ru,
-- httpd_method_str( hc->method ), url, hc->protocol,
-- hc->status, bytes, hc->referer, hc->useragent );
-+ {
-+ /* XXXXXXX */
-+
-+ smart_str_appends(&bentries, httpd_ntoa(&hc->client_addr));
-+ smart_str_append_const(&bentries, " - ");
-+ smart_str_appends(&bentries, ru);
-+ smart_str_append_const(&bentries, " [");
-+ smart_str_appendl(&bentries, hc->hs->log_date, hc->hs->log_date_len);
-+ smart_str_append_const(&bentries, "] \"");
-+ smart_str_appends(&bentries, httpd_method_str(hc->method));
-+ smart_str_appendc(&bentries, ' ');
-+
-+ if (hc->hs->vhost && ! hc->tildemapped) {
-+ smart_str_appendc(&bentries, '/');
-+ if (hc->hostname)
-+ smart_str_appends(&bentries, hc->hostname);
-+ else
-+ smart_str_appends(&bentries, hc->hs->server_hostname);
-+ }
-+ smart_str_appends(&bentries, hc->encodedurl);
-+
-+ smart_str_appendc(&bentries, ' ');
-+ smart_str_appends(&bentries, hc->protocol);
-+ smart_str_append_const(&bentries, "\" ");
-+ smart_str_append_long(&bentries, hc->status);
-+ if (hc->bytes_sent >= 0) {
-+ smart_str_appendc(&bentries, ' ');
-+ smart_str_append_long(&bentries, hc->bytes_sent);
-+ smart_str_append_const(&bentries, " \"");
-+ } else {
-+ smart_str_append_const(&bentries, " - \"");
-+ }
-+ smart_str_appends(&bentries, hc->referer);
-+ smart_str_append_const(&bentries, "\" \"");
-+ smart_str_appends(&bentries, hc->useragent);
-+ smart_str_append_const(&bentries, "\"\n");
-+
-+ if (bentries.len > 16384) {
-+ int fd = fileno(hc->hs->logfp);
-+ write(fd, bentries.c, bentries.len);
-+ bentries.len = 0;
-+ }
-+ }
-+
- }
-
-
-@@ -3840,7 +3983,24 @@
- {
- #ifdef HAVE_GETNAMEINFO
- static char str[200];
-+ static smart_str httpd_ntoa_buf;
-+
-+ if (saP->sa_in.sin_family == AF_INET) {
-+ unsigned long n = ntohl(saP->sa_in.sin_addr.s_addr);
-
-+ httpd_ntoa_buf.len = 0;
-+ smart_str_append_long(&httpd_ntoa_buf, (n >> 24));
-+ smart_str_appendc(&httpd_ntoa_buf, '.');
-+ smart_str_append_long(&httpd_ntoa_buf, (n >> 16) & 255);
-+ smart_str_appendc(&httpd_ntoa_buf, '.');
-+ smart_str_append_long(&httpd_ntoa_buf, (n >> 8) & 255);
-+ smart_str_appendc(&httpd_ntoa_buf, '.');
-+ smart_str_append_long(&httpd_ntoa_buf, (n >> 0) & 255);
-+ smart_str_0(&httpd_ntoa_buf);
-+
-+ return httpd_ntoa_buf.c;
-+ }
-+
- if ( getnameinfo( &saP->sa, sockaddr_len( saP ), str, sizeof(str), 0, 0, NI_NUMERICHOST ) != 0 )
- {
- str[0] = '?';
-diff -ur thttpd-2.21b/libhttpd.h thttpd-2.21b-cool/libhttpd.h
---- thttpd-2.21b/libhttpd.h Tue Apr 24 00:36:50 2001
-+++ thttpd-2.21b-cool/libhttpd.h Sat Sep 20 14:43:20 2003
-@@ -69,6 +69,8 @@
- char* server_hostname;
- int port;
- char* cgi_pattern;
-+ char* php_pattern;
-+ char* phps_pattern;
- char* charset;
- char* cwd;
- int listen4_fd, listen6_fd;
-@@ -80,6 +82,8 @@
- char* url_pattern;
- char* local_pattern;
- int no_empty_referers;
-+ size_t log_date_len;
-+ char log_date[100];
- } httpd_server;
-
- /* A connection. */
-@@ -88,6 +92,7 @@
- httpd_server* hs;
- httpd_sockaddr client_addr;
- char* read_buf;
-+ char read_buf_is_mmap;
- int read_size, read_idx, checked_idx;
- int checked_state;
- int method;
-@@ -132,11 +137,12 @@
- int got_range;
- int tildemapped; /* this connection got tilde-mapped */
- off_t init_byte_loc, end_byte_loc;
-- int keep_alive;
-+ int keep_alive, do_keep_alive;
- int should_linger;
- struct stat sb;
- int conn_fd;
- char* file_address;
-+ char read_body_into_mem;
- } httpd_conn;
-
- /* Methods. */
-@@ -168,7 +174,8 @@
- char* hostname, httpd_sockaddr* sa4P, httpd_sockaddr* sa6P, int port,
- char* cgi_pattern, char* charset, char* cwd, int no_log, FILE* logfp,
- int no_symlink, int vhost, int global_passwd, char* url_pattern,
-- char* local_pattern, int no_empty_referers );
-+ char* local_pattern, int no_empty_referers, char* php_pattern,
-+ char* phps_pattern );
-
- /* Change the log file. */
- extern void httpd_set_logfp( httpd_server* hs, FILE* logfp );
-@@ -229,6 +236,8 @@
- ** If you don't have a current timeval handy just pass in 0.
- */
- extern void httpd_close_conn( httpd_conn* hc, struct timeval* nowP );
-+void httpd_complete_request( httpd_conn* hc, struct timeval* nowP);
-+int httpd_request_reset(httpd_conn* hc,int );
-
- /* Call this to de-initialize a connection struct and *really* free the
- ** mallocced strings.
-diff -ur thttpd-2.21b/mime_encodings.txt thttpd-2.21b-cool/mime_encodings.txt
---- thttpd-2.21b/mime_encodings.txt Wed May 10 03:22:28 2000
-+++ thttpd-2.21b-cool/mime_encodings.txt Sat Sep 20 14:43:20 2003
-@@ -3,6 +3,6 @@
- # A list of file extensions followed by the corresponding MIME encoding.
- # Extensions not found in the table proceed to the mime_types table.
-
--Z x-compress
--gz x-gzip
-+Z compress
-+gz gzip
- uu x-uuencode
-diff -ur thttpd-2.21b/mime_types.txt thttpd-2.21b-cool/mime_types.txt
---- thttpd-2.21b/mime_types.txt Sat Apr 14 04:53:30 2001
-+++ thttpd-2.21b-cool/mime_types.txt Sat Sep 20 14:43:20 2003
-@@ -1,135 +1,138 @@
--# mime_types.txt
--#
--# A list of file extensions followed by the corresponding MIME type.
--# Extensions not found in the table are returned as text/plain.
--
--html text/html; charset=%s
--htm text/html; charset=%s
--txt text/plain; charset=%s
--rtx text/richtext
--etx text/x-setext
--tsv text/tab-separated-values
--css text/css
--xml text/xml
--dtd text/xml
--
--gif image/gif
--jpg image/jpeg
--jpeg image/jpeg
--jpe image/jpeg
--jfif image/jpeg
--tif image/tiff
--tiff image/tiff
--pbm image/x-portable-bitmap
--pgm image/x-portable-graymap
--ppm image/x-portable-pixmap
--pnm image/x-portable-anymap
--xbm image/x-xbitmap
--xpm image/x-xpixmap
--xwd image/x-xwindowdump
--ief image/ief
--png image/png
--
--au audio/basic
--snd audio/basic
--aif audio/x-aiff
--aiff audio/x-aiff
--aifc audio/x-aiff
--ra audio/x-pn-realaudio
--ram audio/x-pn-realaudio
--rm audio/x-pn-realaudio
--rpm audio/x-pn-realaudio-plugin
--wav audio/wav
--mid audio/midi
--midi audio/midi
--kar audio/midi
--mpga audio/mpeg
--mp2 audio/mpeg
--mp3 audio/mpeg
--
--mpeg video/mpeg
--mpg video/mpeg
--mpe video/mpeg
--qt video/quicktime
--mov video/quicktime
--avi video/x-msvideo
--movie video/x-sgi-movie
--mv video/x-sgi-movie
--vx video/x-rad-screenplay
--
--a application/octet-stream
-+ez application/andrew-inset
-+hqx application/mac-binhex40
-+cpt application/mac-compactpro
-+doc application/msword
- bin application/octet-stream
-+dms application/octet-stream
-+lha application/octet-stream
-+lzh application/octet-stream
- exe application/octet-stream
--dump application/octet-stream
--o application/octet-stream
--class application/java
--js application/x-javascript
-+class application/octet-stream
-+so application/octet-stream
-+dll application/octet-stream
-+oda application/oda
-+pdf application/pdf
- ai application/postscript
- eps application/postscript
- ps application/postscript
--dir application/x-director
-+smi application/smil
-+smil application/smil
-+mif application/vnd.mif
-+xls application/vnd.ms-excel
-+ppt application/vnd.ms-powerpoint
-+wbxml application/vnd.wap.wbxml
-+wmlc application/vnd.wap.wmlc
-+wmlsc application/vnd.wap.wmlscriptc
-+bcpio application/x-bcpio
-+vcd application/x-cdlink
-+pgn application/x-chess-pgn
-+cpio application/x-cpio
-+csh application/x-csh
- dcr application/x-director
-+dir application/x-director
- dxr application/x-director
--fgd application/x-director
--aam application/x-authorware-map
--aas application/x-authorware-seg
--aab application/x-authorware-bin
--fh4 image/x-freehand
--fh7 image/x-freehand
--fh5 image/x-freehand
--fhc image/x-freehand
--fh image/x-freehand
--spl application/futuresplash
--swf application/x-shockwave-flash
- dvi application/x-dvi
-+spl application/x-futuresplash
- gtar application/x-gtar
- hdf application/x-hdf
--hqx application/mac-binhex40
--iv application/x-inventor
-+js application/x-javascript
-+skp application/x-koan
-+skd application/x-koan
-+skt application/x-koan
-+skm application/x-koan
- latex application/x-latex
--man application/x-troff-man
--me application/x-troff-me
--mif application/x-mif
--ms application/x-troff-ms
--oda application/oda
--pdf application/pdf
--rtf application/rtf
--bcpio application/x-bcpio
--cpio application/x-cpio
--sv4cpio application/x-sv4cpio
--sv4crc application/x-sv4crc
--sh application/x-shar
-+nc application/x-netcdf
-+cdf application/x-netcdf
-+sh application/x-sh
- shar application/x-shar
-+swf application/x-shockwave-flash
- sit application/x-stuffit
-+sv4cpio application/x-sv4cpio
-+sv4crc application/x-sv4crc
- tar application/x-tar
-+tcl application/x-tcl
- tex application/x-tex
--texi application/x-texinfo
- texinfo application/x-texinfo
-+texi application/x-texinfo
-+t application/x-troff
- tr application/x-troff
- roff application/x-troff
- man application/x-troff-man
- me application/x-troff-me
- ms application/x-troff-ms
--zip application/x-zip-compressed
--tsp application/dsptype
--wsrc application/x-wais-source
- ustar application/x-ustar
--cdf application/x-netcdf
--nc application/x-netcdf
--doc application/msword
--ppt application/powerpoint
--
--crt application/x-x509-ca-cert
--crl application/x-pkcs7-crl
--
-+src application/x-wais-source
-+xhtml application/xhtml+xml
-+xht application/xhtml+xml
-+zip application/zip
-+au audio/basic
-+snd audio/basic
-+mid audio/midi
-+midi audio/midi
-+kar audio/midi
-+mpga audio/mpeg
-+mp2 audio/mpeg
-+mp3 audio/mpeg
-+aif audio/x-aiff
-+aiff audio/x-aiff
-+aifc audio/x-aiff
-+m3u audio/x-mpegurl
-+ram audio/x-pn-realaudio
-+rm audio/x-pn-realaudio
-+rpm audio/x-pn-realaudio-plugin
-+ra audio/x-realaudio
-+wav audio/x-wav
-+pdb chemical/x-pdb
-+xyz chemical/x-xyz
-+bmp image/bmp
-+gif image/gif
-+ief image/ief
-+jpeg image/jpeg
-+jpg image/jpeg
-+jpe image/jpeg
-+png image/png
-+tiff image/tiff
-+tif image/tiff
-+djvu image/vnd.djvu
-+djv image/vnd.djvu
-+wbmp image/vnd.wap.wbmp
-+ras image/x-cmu-raster
-+pnm image/x-portable-anymap
-+pbm image/x-portable-bitmap
-+pgm image/x-portable-graymap
-+ppm image/x-portable-pixmap
-+rgb image/x-rgb
-+xbm image/x-xbitmap
-+xpm image/x-xpixmap
-+xwd image/x-xwindowdump
-+igs model/iges
-+iges model/iges
-+msh model/mesh
-+mesh model/mesh
-+silo model/mesh
- wrl model/vrml
- vrml model/vrml
--mime message/rfc822
--
--pac application/x-ns-proxy-autoconfig
--
-+css text/css
-+html text/html; charset=%s
-+htm text/html; charset=%s
-+asc text/plain; charset=%s
-+txt text/plain; charset=%s
-+rtx text/richtext
-+rtf text/rtf
-+sgml text/sgml
-+sgm text/sgml
-+tsv text/tab-separated-values
- wml text/vnd.wap.wml
--wmlc application/vnd.wap.wmlc
- wmls text/vnd.wap.wmlscript
--wmlsc application/vnd.wap.wmlscriptc
--wbmp image/vnd.wap.wbmp
-+etx text/x-setext
-+xml text/xml
-+xsl text/xml
-+mpeg video/mpeg
-+mpg video/mpeg
-+mpe video/mpeg
-+qt video/quicktime
-+mov video/quicktime
-+mxu video/vnd.mpegurl
-+avi video/x-msvideo
-+movie video/x-sgi-movie
-+ice x-conference/x-cooltalk
-diff -ur thttpd-2.21b/mmc.c thttpd-2.21b-cool/mmc.c
---- thttpd-2.21b/mmc.c Fri Apr 13 23:02:15 2001
-+++ thttpd-2.21b-cool/mmc.c Sat Sep 20 14:43:20 2003
-@@ -70,6 +70,9 @@
- unsigned int hash;
- int hash_idx;
- struct MapStruct* next;
-+ char nocache;
-+ size_t last_modified_len;
-+ char last_modified[100];
- } Map;
-
-
-@@ -93,12 +96,13 @@
-
-
- void*
--mmc_map( char* filename, struct stat* sbP, struct timeval* nowP )
-+mmc_map( char* filename, struct stat* sbP, struct timeval* nowP, int nocache, char **last_modified, size_t *last_modified_len )
- {
- time_t now;
- struct stat sb;
- Map* m;
- int fd;
-+ const char* rfc1123fmt = "%a, %d %b %Y %H:%M:%S GMT";
-
- /* Stat the file, if necessary. */
- if ( sbP != (struct stat*) 0 )
-@@ -130,7 +134,7 @@
- /* Yep. Just return the existing map */
- ++m->refcount;
- m->reftime = now;
-- return m->addr;
-+ goto done;
- }
-
- /* Open the file. */
-@@ -167,12 +171,13 @@
- m->ctime = sb.st_ctime;
- m->refcount = 1;
- m->reftime = now;
-+ m->nocache = (char) nocache;
-
- /* Avoid doing anything for zero-length files; some systems don't like
- ** to mmap them, other systems dislike mallocing zero bytes.
- */
- if ( m->size == 0 )
-- m->addr = (void*) 1; /* arbitrary non-NULL address */
-+ m->addr = (void*) 5; /* arbitrary non-NULL address */
- else
- {
- #ifdef HAVE_MMAP
-@@ -223,6 +228,13 @@
- maps = m;
- ++map_count;
-
-+ strftime( m->last_modified, sizeof(m->last_modified), rfc1123fmt, gmtime( &sb.st_mtime ) );
-+ m->last_modified_len = strlen(m->last_modified);
-+
-+done:
-+ *last_modified = m->last_modified;
-+ *last_modified_len = m->last_modified_len;
-+
- /* And return the address. */
- return m->addr;
- }
-@@ -231,27 +243,32 @@
- void
- mmc_unmap( void* addr, struct stat* sbP, struct timeval* nowP )
- {
-- Map* m = (Map*) 0;
-+ Map* m = (Map*) 0, **mm = &maps;
-
- /* Find the Map entry for this address. First try a hash. */
- if ( sbP != (struct stat*) 0 )
- {
- m = find_hash( sbP->st_ino, sbP->st_dev, sbP->st_size, sbP->st_ctime );
-- if ( m != (Map*) 0 && m->addr != addr )
-+ if ( m != (Map*) 0 && ( m->addr != addr || m->nocache == 1 ) )
- m = (Map*) 0;
- }
- /* If that didn't work, try a full search. */
- if ( m == (Map*) 0 )
-- for ( m = maps; m != (Map*) 0; m = m->next )
-+ for ( m = maps; m != (Map*) 0; m = m->next ) {
- if ( m->addr == addr )
- break;
-+ mm = &m->next;
-+ }
- if ( m == (Map*) 0 )
- syslog( LOG_ERR, "mmc_unmap failed to find entry!" );
- else if ( m->refcount <= 0 )
- syslog( LOG_ERR, "mmc_unmap found zero or negative refcount!" );
- else
- {
-- --m->refcount;
-+ if ( --m->refcount == 0 && m->nocache == 1 ) {
-+ really_unmap( mm );
-+ return;
-+ }
- if ( nowP != (struct timeval*) 0 )
- m->reftime = nowP->tv_sec;
- else
-diff -ur thttpd-2.21b/mmc.h thttpd-2.21b-cool/mmc.h
---- thttpd-2.21b/mmc.h Fri Apr 13 07:36:54 2001
-+++ thttpd-2.21b-cool/mmc.h Sat Sep 20 14:43:20 2003
-@@ -31,8 +31,9 @@
- /* Returns an mmap()ed area for the given file, or (void*) 0 on errors.
- ** If you have a stat buffer on the file, pass it in, otherwise pass 0.
- ** Same for the current time.
-+** Set nocache to 1, if this entry is supposed to be removed quickly.
- */
--extern void* mmc_map( char* filename, struct stat* sbP, struct timeval* nowP );
-+extern void* mmc_map( char* filename, struct stat* sbP, struct timeval* nowP, int nocache, char **last_modified, size_t *last_modified_len );
-
- /* Done with an mmap()ed area that was returned by mmc_map().
- ** If you have a stat buffer on the file, pass it in, otherwise pass 0.
-diff -ur thttpd-2.21b/thttpd.c thttpd-2.21b-cool/thttpd.c
---- thttpd-2.21b/thttpd.c Tue Apr 24 00:41:57 2001
-+++ thttpd-2.21b-cool/thttpd.c Sat Sep 20 14:43:20 2003
-@@ -53,6 +53,10 @@
- #endif
- #include <unistd.h>
-
-+#include <sys/mman.h>
-+
-+#include <limits.h>
-+
- #include "fdwatch.h"
- #include "libhttpd.h"
- #include "mmc.h"
-@@ -66,6 +70,8 @@
- static char* dir;
- static int do_chroot, no_log, no_symlink, do_vhost, do_global_passwd;
- static char* cgi_pattern;
-+static char* php_pattern;
-+static char* phps_pattern;
- static char* url_pattern;
- static int no_empty_referers;
- static char* local_pattern;
-@@ -95,10 +101,10 @@
- httpd_conn* hc;
- int tnums[MAXTHROTTLENUMS]; /* throttle indexes */
- int numtnums;
-+ int keep_alive;
- long limit;
- time_t started_at;
-- Timer* idle_read_timer;
-- Timer* idle_send_timer;
-+ time_t last_io;
- Timer* wakeup_timer;
- Timer* linger_timer;
- long wouldblock_delay;
-@@ -106,17 +112,22 @@
- off_t bytes_sent;
- off_t bytes_to_send;
- } connecttab;
--static connecttab* connects;
-+static connecttab* connects, **free_connects;
-+static int next_free_connect;
- static int numconnects, maxconnects;
- static int httpd_conn_count;
-
- /* The connection states. */
--#define CNST_FREE 0
--#define CNST_READING 1
--#define CNST_SENDING 2
--#define CNST_PAUSING 3
--#define CNST_LINGERING 4
--
-+enum {
-+ CNST_FREE = 0,
-+ CNST_READING,
-+ CNST_SENDING,
-+ CNST_PAUSING,
-+ CNST_LINGERING,
-+ CNST_SENDING_RESP,
-+ CNST_READING_BODY,
-+ CNST_TOTAL_NR
-+};
-
- static httpd_server* hs = (httpd_server*) 0;
- int terminate = 0;
-@@ -140,23 +151,32 @@
- static int handle_newconnect( struct timeval* tvP, int listen_fd );
- static void handle_read( connecttab* c, struct timeval* tvP );
- static void handle_send( connecttab* c, struct timeval* tvP );
-+static void handle_send_resp( connecttab* c, struct timeval* tvP );
-+static void handle_read_body( connecttab* c, struct timeval* tvP );
- static void handle_linger( connecttab* c, struct timeval* tvP );
- static int check_throttles( connecttab* c );
-+static void timeout_conns( ClientData client_data, struct timeval* nowP );
- static void clear_throttles( connecttab* c, struct timeval* tvP );
- static void update_throttles( ClientData client_data, struct timeval* nowP );
--static void clear_connection( connecttab* c, struct timeval* tvP );
-+static void clear_connection( connecttab* c, struct timeval* tvP, int );
- static void really_clear_connection( connecttab* c, struct timeval* tvP );
--static void idle_read_connection( ClientData client_data, struct timeval* nowP );
--static void idle_send_connection( ClientData client_data, struct timeval* nowP );
- static void wakeup_connection( ClientData client_data, struct timeval* nowP );
- static void linger_clear_connection( ClientData client_data, struct timeval* nowP );
- static void occasional( ClientData client_data, struct timeval* nowP );
-+static void periodic_jobs( ClientData client_data, struct timeval* nowP );
- #ifdef STATS_TIME
- static void show_stats( ClientData client_data, struct timeval* nowP );
- #endif /* STATS_TIME */
- static void logstats( struct timeval* nowP );
- static void thttpd_logstats( long secs );
-+static void boot_request(connecttab *c, struct timeval *tvP);
-+
-+typedef void (*handler_func)(connecttab*, struct timeval *);
-+
-+handler_func handler_array[CNST_TOTAL_NR] =
-+{NULL, handle_read, handle_send, NULL, handle_linger, handle_send_resp, handle_read_body};
-
-+#define RUN_HANDLER(type, c) if (handler_array[type]) handler_array[type](c, &tv)
-
- static void
- handle_term( int sig )
-@@ -177,7 +197,7 @@
- return;
-
- /* Re-open the log file. */
-- if ( logfile != (char*) 0 )
-+ if ( logfile != (char*) 0 && strcmp(logfile, "-") != 0)
- {
- logfp = fopen( logfile, "a" );
- if ( logfp == (FILE*) 0 )
-@@ -198,6 +218,8 @@
- }
-
-
-+time_t httpd_time_now;
-+
- static void
- handle_usr2( int sig )
- {
-@@ -217,7 +239,6 @@
- int num_ready;
- int cnum, ridx;
- connecttab* c;
-- httpd_conn* hc;
- httpd_sockaddr sa4;
- httpd_sockaddr sa6;
- int gotv4, gotv6;
-@@ -270,7 +291,9 @@
- no_log = 1;
- logfp = (FILE*) 0;
- }
-- else
-+ else if (strcmp(logfile, "-") == 0) {
-+ logfp = stdout;
-+ } else
- {
- logfp = fopen( logfile, "a" );
- if ( logfp == (FILE*) 0 )
-@@ -420,7 +443,8 @@
- hostname,
- gotv4 ? &sa4 : (httpd_sockaddr*) 0, gotv6 ? &sa6 : (httpd_sockaddr*) 0,
- port, cgi_pattern, charset, cwd, no_log, logfp, no_symlink, do_vhost,
-- do_global_passwd, url_pattern, local_pattern, no_empty_referers );
-+ do_global_passwd, url_pattern, local_pattern, no_empty_referers,
-+ php_pattern, phps_pattern);
- if ( hs == (httpd_server*) 0 )
- exit( 1 );
-
-@@ -430,6 +454,12 @@
- syslog( LOG_CRIT, "tmr_create(occasional) failed" );
- exit( 1 );
- }
-+
-+ if (tmr_create(0, timeout_conns, JunkClientData, 30 * 1000, 1) == 0) {
-+ syslog(LOG_CRIT, "tmr_create(timeout_conns) failed");
-+ exit(1);
-+ }
-+
- if ( numthrottles > 0 )
- {
- /* Set up the throttles timer. */
-@@ -439,6 +469,12 @@
- exit( 1 );
- }
- }
-+
-+ if (tmr_create(0, periodic_jobs, JunkClientData, 2000, 1) == 0) {
-+ syslog(LOG_CRIT, "tmr_create failed");
-+ exit(1);
-+ }
-+
- #ifdef STATS_TIME
- /* Set up the stats timer. */
- if ( tmr_create( (struct timeval*) 0, show_stats, JunkClientData, STATS_TIME * 1000L, 1 ) == (Timer*) 0 )
-@@ -454,12 +490,14 @@
- /* If we're root, try to become someone else. */
- if ( getuid() == 0 )
- {
-+#ifndef __CYGWIN__
- /* Set aux groups to null. */
- if ( setgroups( 0, (const gid_t*) 0 ) < 0 )
- {
- syslog( LOG_CRIT, "setgroups - %m" );
- exit( 1 );
- }
-+#endif
- /* Set primary group. */
- if ( setgid( gid ) < 0 )
- {
-@@ -495,13 +533,17 @@
- }
- maxconnects -= SPARE_FDS;
- connects = NEW( connecttab, maxconnects );
-+ free_connects = malloc(sizeof(connecttab *) * maxconnects);
-+ next_free_connect = maxconnects;
- if ( connects == (connecttab*) 0 )
- {
- syslog( LOG_CRIT, "out of memory allocating a connecttab" );
- exit( 1 );
- }
-+
- for ( cnum = 0; cnum < maxconnects; ++cnum )
- {
-+ free_connects[cnum] = &connects[maxconnects - cnum - 1];
- connects[cnum].conn_state = CNST_FREE;
- connects[cnum].hc = (httpd_conn*) 0;
- }
-@@ -518,6 +560,9 @@
-
- /* Main loop. */
- (void) gettimeofday( &tv, (struct timezone*) 0 );
-+ httpd_time_now = tv.tv_sec;
-+ periodic_jobs(JunkClientData, &tv);
-+
- while ( ( ! terminate ) || numconnects > 0 )
- {
- /* Do the fd watch. */
-@@ -530,6 +575,7 @@
- exit( 1 );
- }
- (void) gettimeofday( &tv, (struct timezone*) 0 );
-+ httpd_time_now = tv.tv_sec;
- if ( num_ready == 0 )
- {
- /* No fd's are ready - run the timers. */
-@@ -565,16 +611,10 @@
- c = (connecttab*) fdwatch_get_client_data( ridx );
- if ( c == (connecttab*) 0 )
- continue;
-- hc = c->hc;
-- if ( c->conn_state == CNST_READING &&
-- fdwatch_check_fd( hc->conn_fd ) )
-- handle_read( c, &tv );
-- else if ( c->conn_state == CNST_SENDING &&
-- fdwatch_check_fd( hc->conn_fd ) )
-- handle_send( c, &tv );
-- else if ( c->conn_state == CNST_LINGERING &&
-- fdwatch_check_fd( hc->conn_fd ) )
-- handle_linger( c, &tv );
-+#if DO_UNNECESSARY_CHECK_FD
-+ fdwatch_check_fd(c->hc->conn_fd);
-+#endif
-+ RUN_HANDLER(c->conn_state, c);
- }
- tmr_run( &tv );
-
-@@ -627,6 +667,8 @@
- #else /* CGI_PATTERN */
- cgi_pattern = (char*) 0;
- #endif /* CGI_PATTERN */
-+ php_pattern = "**.php";
-+ phps_pattern = "**.phps";
- url_pattern = (char*) 0;
- no_empty_referers = 0;
- local_pattern = (char*) 0;
-@@ -833,6 +875,16 @@
- value_required( name, value );
- cgi_pattern = e_strdup( value );
- }
-+ else if ( strcasecmp( name, "phppat" ) == 0 )
-+ {
-+ value_required( name, value );
-+ php_pattern = e_strdup( value );
-+ }
-+ else if ( strcasecmp( name, "phpspat" ) == 0 )
-+ {
-+ value_required( name, value );
-+ phps_pattern = e_strdup( value );
-+ }
- else if ( strcasecmp( name, "urlpat" ) == 0 )
- {
- value_required( name, value );
-@@ -1196,8 +1248,10 @@
- logstats( &tv );
- for ( cnum = 0; cnum < maxconnects; ++cnum )
- {
-- if ( connects[cnum].conn_state != CNST_FREE )
-+ if ( connects[cnum].conn_state != CNST_FREE ) {
-+ httpd_complete_request( connects[cnum].hc, &tv );
- httpd_close_conn( connects[cnum].hc, &tv );
-+ }
- if ( connects[cnum].hc != (httpd_conn*) 0 )
- {
- httpd_destroy_conn( connects[cnum].hc );
-@@ -1214,6 +1268,7 @@
- }
- mmc_destroy();
- tmr_destroy();
-+ free( (void*) free_connects );
- free( (void*) connects );
- if ( throttles != (throttletab*) 0 )
- free( (void*) throttles );
-@@ -1234,7 +1289,7 @@
- for (;;)
- {
- /* Is there room in the connection table? */
-- if ( numconnects >= maxconnects )
-+ if ( numconnects >= maxconnects || next_free_connect == 0 )
- {
- /* Out of connection slots. Run the timers, then the
- ** existing connections, and maybe we'll free up a slot
-@@ -1245,10 +1300,10 @@
- return 0;
- }
- /* Find a free connection entry. */
-- for ( cnum = 0; cnum < maxconnects; ++cnum )
-- if ( connects[cnum].conn_state == CNST_FREE )
-- break;
-- c = &connects[cnum];
-+
-+ c = free_connects[--next_free_connect];
-+ free_connects[next_free_connect] = NULL;
-+
- /* Make the httpd_conn if necessary. */
- if ( c->hc == (httpd_conn*) 0 )
- {
-@@ -1267,24 +1322,18 @@
- {
- case GC_FAIL:
- case GC_NO_MORE:
-+ free_connects[next_free_connect++] = c;
- return 1;
- }
- c->conn_state = CNST_READING;
- ++numconnects;
- client_data.p = c;
-- c->idle_read_timer = tmr_create(
-- tvP, idle_read_connection, client_data, IDLE_READ_TIMELIMIT * 1000L,
-- 0 );
-- if ( c->idle_read_timer == (Timer*) 0 )
-- {
-- syslog( LOG_CRIT, "tmr_create(idle_read_connection) failed" );
-- exit( 1 );
-- }
-- c->idle_send_timer = (Timer*) 0;
- c->wakeup_timer = (Timer*) 0;
- c->linger_timer = (Timer*) 0;
- c->bytes_sent = 0;
- c->numtnums = 0;
-+ c->keep_alive = 0;
-+ c->last_io = httpd_time_now;
-
- /* Set the connection file descriptor to no-delay mode. */
- httpd_set_ndelay( c->hc->conn_fd );
-@@ -1298,11 +1347,100 @@
- }
-
-
-+#define FIXUP(x) if (hc->x >= oldptr && hc->x < pe) hc->x += d
-+
-+static void
-+realign_hc(httpd_conn *hc, char *oldptr)
-+{
-+ int d = hc->read_buf - oldptr;
-+ char *pe = oldptr + hc->checked_idx;
-+
-+ FIXUP(encodedurl);
-+ FIXUP(protocol);
-+ FIXUP(referer);
-+ FIXUP(useragent);
-+ FIXUP(acceptl);
-+ FIXUP(cookie);
-+ FIXUP(contenttype);
-+ FIXUP(hdrhost);
-+ FIXUP(authorization);
-+}
-+
-+#undef FIXUP
-+
-+static void
-+setup_read_body(connecttab *c, struct timeval *tvP)
-+{
-+ httpd_conn *hc = c->hc;
-+ int already, missing;
-+ char *oldptr = hc->read_buf;
-+
-+ c->conn_state = CNST_READING_BODY;
-+
-+ hc->read_body_into_mem = 0;
-+
-+ already = hc->read_idx - hc->checked_idx;
-+ missing = hc->contentlength - already;
-+
-+ if (missing > 16384) {
-+ char filename[] = "/tmp/thttpd.upload.XXXXXX";
-+ int tmp = mkstemp(filename);
-+
-+ if (tmp >= 0) {
-+ void *p;
-+ size_t sz = hc->contentlength + hc->checked_idx + 10;
-+
-+ unlink(filename);
-+
-+ ftruncate(tmp, sz);
-+ p = mmap(NULL, sz,
-+ PROT_READ|PROT_WRITE, MAP_PRIVATE, tmp, 0);
-+
-+ if (p != MAP_FAILED) {
-+ memcpy(p, hc->read_buf, hc->read_idx);
-+ free(hc->read_buf);
-+ hc->read_size = sz;
-+ hc->read_buf = p;
-+ hc->read_buf_is_mmap = 1;
-+ }
-+ close(tmp);
-+ }
-+
-+ if (!hc->read_buf_is_mmap) {
-+ clear_connection( c, tvP, 0 );
-+ return;
-+ }
-+ } else if (missing > 0) {
-+ httpd_realloc_str(&hc->read_buf, &hc->read_size, hc->checked_idx + hc->contentlength + 10);
-+ }
-+ if (oldptr != hc->read_buf) realign_hc(hc, oldptr);
-+
-+ fdwatch_del_fd( hc->conn_fd );
-+ fdwatch_add_fd( hc->conn_fd, c, FDW_READ );
-+}
-+
-+static void
-+setup_sending(connecttab *c, int state, struct timeval *tvP)
-+{
-+ httpd_conn *hc = c->hc;
-+ ClientData client_data;
-+
-+ c->conn_state = state;
-+ c->started_at = tvP->tv_sec;
-+ c->wouldblock_delay = 0;
-+ client_data.p = c;
-+
-+ fdwatch_del_fd( hc->conn_fd );
-+ fdwatch_add_fd( hc->conn_fd, c, FDW_WRITE );
-+}
-+
-+static void handle_request( connecttab *c, struct timeval *tvP);
-+
-+
- static void
- handle_read( connecttab* c, struct timeval* tvP )
- {
- int sz;
-- ClientData client_data;
- httpd_conn* hc = c->hc;
-
- /* Is there room in our buffer to read more bytes? */
-@@ -1311,7 +1449,7 @@
- if ( hc->read_size > 5000 )
- {
- httpd_send_err( hc, 400, httpd_err400title, "", httpd_err400form, "" );
-- clear_connection( c, tvP );
-+ clear_connection( c, tvP, 0 );
- return;
- }
- httpd_realloc_str(
-@@ -1327,14 +1465,53 @@
- ** EWOULDBLOCK; however, this apparently can happen if a packet gets
- ** garbled.
- */
-- if ( sz == 0 || ( sz < 0 && ( errno != EWOULDBLOCK ) ) )
-- {
-- httpd_send_err( hc, 400, httpd_err400title, "", httpd_err400form, "" );
-- clear_connection( c, tvP );
-+ if ( sz == 0 ) {
-+ if (! c->keep_alive) {
-+ httpd_send_err( hc, 400, httpd_err400title, "", httpd_err400form, "" );
-+ }
-+ clear_connection( c, tvP, 0 );
-+ return;
-+ } else if ( sz < 0 ) {
-+ if (errno != EWOULDBLOCK) {
-+ clear_connection( c, tvP, 0 );
-+ }
- return;
-+ }
-+
-+ /* If this is a persistent PHP connection, we must not receive
-+ ** any further requests on this connection. Some broken HTTP/1.1
-+ ** implementations (e.g. Mozilla 1.0.1) are known to do
-+ ** pipelining on a connection, although a prior response included
-+ ** Connection: close
-+ */
-+ if (c->hc->file_address == (char *) 1) {
-+ return;
-+ }
-+
-+ c->last_io = httpd_time_now;
-+ if (sz > 0) hc->read_idx += sz;
-+
-+ /*
-+ ** if we start getting new data on this socket, "promote" it
-+ ** to read timeout
-+ */
-+ if ( hc->keep_alive ) {
-+ ClientData client_data;
-+
-+
-+ client_data.p = c;
-+
-+ hc->keep_alive = 0;
-+ }
-+ handle_request(c, tvP);
- }
-- hc->read_idx += sz;
-
-+
-+static void
-+handle_request( connecttab *c, struct timeval *tvP)
-+{
-+ httpd_conn* hc = c->hc;
-+
- /* Do we have a complete request yet? */
- switch ( httpd_got_request( hc ) )
- {
-@@ -1342,14 +1519,14 @@
- return;
- case GR_BAD_REQUEST:
- httpd_send_err( hc, 400, httpd_err400title, "", httpd_err400form, "" );
-- clear_connection( c, tvP );
-+ clear_connection( c, tvP, 0 );
- return;
- }
-
- /* Yes. Try parsing and resolving it. */
- if ( httpd_parse_request( hc ) < 0 )
- {
-- clear_connection( c, tvP );
-+ clear_connection( c, tvP, 0 );
- return;
- }
-
-@@ -1358,18 +1535,28 @@
- {
- httpd_send_err(
- hc, 503, httpd_err503title, "", httpd_err503form, hc->encodedurl );
-- clear_connection( c, tvP );
-+ clear_connection( c, tvP, 0 );
- return;
- }
-+ boot_request(c, tvP);
-+}
-
-+static void boot_request(connecttab *c, struct timeval *tvP)
-+{
-+ httpd_conn *hc = c->hc;
- /* Start the connection going. */
- if ( httpd_start_request( hc, tvP ) < 0 )
- {
- /* Something went wrong. Close down the connection. */
-- clear_connection( c, tvP );
-+ clear_connection( c, tvP, 0 );
- return;
- }
-
-+ if ( hc->read_body_into_mem ) {
-+ setup_read_body( c, tvP );
-+ return;
-+ }
-+
- /* Fill in bytes_to_send. */
- if ( hc->got_range )
- {
-@@ -1384,37 +1571,25 @@
- {
- /* No file address means someone else is handling it. */
- c->bytes_sent = hc->bytes_sent;
-- clear_connection( c, tvP );
-+ clear_connection( c, tvP, 1 );
- return;
- }
-+ if (hc->file_address == (char *) 1) {
-+ c->last_io = (time_t) LONG_MAX;
-+ c->wouldblock_delay = 0;
-+ return;
-+ }
- if ( c->bytes_sent >= c->bytes_to_send )
- {
- /* There's nothing to send. */
-- clear_connection( c, tvP );
-+ clear_connection( c, tvP, 1 );
- return;
- }
-
- /* Cool, we have a valid connection and a file to send to it. */
-- c->conn_state = CNST_SENDING;
-- c->started_at = tvP->tv_sec;
-- c->wouldblock_delay = 0;
-- client_data.p = c;
-- tmr_cancel( c->idle_read_timer );
-- c->idle_read_timer = (Timer*) 0;
-- c->idle_send_timer = tmr_create(
-- tvP, idle_send_connection, client_data, IDLE_SEND_TIMELIMIT * 1000L,
-- 0 );
-- if ( c->idle_send_timer == (Timer*) 0 )
-- {
-- syslog( LOG_CRIT, "tmr_create(idle_send_connection) failed" );
-- exit( 1 );
-- }
--
-- fdwatch_del_fd( hc->conn_fd );
-- fdwatch_add_fd( hc->conn_fd, c, FDW_WRITE );
-+ setup_sending(c, CNST_SENDING, tvP);
- }
-
--
- static void
- handle_send( connecttab* c, struct timeval* tvP )
- {
-@@ -1443,6 +1618,9 @@
- iv[1].iov_base = &(hc->file_address[c->bytes_sent]);
- iv[1].iov_len = MIN( c->bytes_to_send - c->bytes_sent, c->limit );
- sz = writev( hc->conn_fd, iv, 2 );
-+/*
-+printf("**RESPONSE2 [%d]** len = %d\n%*.*s\n", hc->conn_fd, hc->responselen, hc->responselen, hc->responselen, hc->response);
-+*/
- }
-
- if ( sz == 0 ||
-@@ -1486,12 +1664,12 @@
- */
- if ( errno != EPIPE && errno != EINVAL && errno != ECONNRESET )
- syslog( LOG_ERR, "write - %m sending %.80s", hc->encodedurl );
-- clear_connection( c, tvP );
-+ clear_connection( c, tvP, 0 );
- return;
- }
-
- /* Ok, we wrote something. */
-- tmr_reset( tvP, c->idle_send_timer );
-+ c->last_io = httpd_time_now;
- /* Was this a headers + file writev()? */
- if ( hc->responselen > 0 )
- {
-@@ -1500,7 +1678,7 @@
- {
- /* Yes; move the unwritten part to the front of the buffer. */
- int newlen = hc->responselen - sz;
-- (void) memcpy( hc->response, &(hc->response[sz]), newlen );
-+ (void) memmove( hc->response, &(hc->response[sz]), newlen );
- hc->responselen = newlen;
- sz = 0;
- }
-@@ -1519,7 +1697,7 @@
- if ( c->bytes_sent >= c->bytes_to_send )
- {
- /* This conection is finished! */
-- clear_connection( c, tvP );
-+ clear_connection( c, tvP, 1 );
- return;
- }
-
-@@ -1560,6 +1738,9 @@
- char buf[1024];
- int r;
-
-+/*
-+printf("*LINGER read\n");
-+*/
- /* In lingering-close mode we just read and ignore bytes. An error
- ** or EOF ends things, otherwise we go until a timeout.
- */
-@@ -1569,6 +1750,63 @@
- }
-
-
-+static void
-+handle_read_body(connecttab *c, struct timeval *tvP)
-+{
-+ httpd_conn *hc = c->hc;
-+ int n;
-+
-+ n = read(hc->conn_fd, hc->read_buf + hc->read_idx,
-+ hc->contentlength - (hc->read_idx - hc->checked_idx));
-+
-+ if (n <= 0) {
-+ if (errno == EAGAIN)
-+ return;
-+ clear_connection(c, tvP, 0);
-+ return;
-+ }
-+
-+ c->last_io = httpd_time_now;
-+
-+ hc->read_idx += n;
-+
-+ if (hc->contentlength == hc->read_idx - hc->checked_idx) {
-+ boot_request(c, tvP);
-+ return;
-+ }
-+}
-+
-+static void
-+handle_send_resp(connecttab *c, struct timeval *tvP)
-+{
-+ httpd_conn* hc = c->hc;
-+ int n = send(hc->conn_fd, hc->response, hc->responselen, 0);
-+ int dokeep = 1;
-+
-+ if (n < 0) {
-+ if (errno == EAGAIN)
-+ return;
-+
-+ dokeep = 0;
-+ goto clear;
-+ }
-+
-+ c->last_io = httpd_time_now;
-+
-+ if (n == hc->responselen) {
-+clear:
-+ hc->response = realloc(hc->response, hc->maxresponse + 1);
-+ hc->responselen = 0;
-+
-+ clear_connection(c, tvP, dokeep);
-+ return;
-+ }
-+
-+ hc->responselen -= n;
-+
-+ memmove(hc->response, hc->response + n, hc->responselen);
-+}
-+
- static int
- check_throttles( connecttab* c )
- {
-@@ -1635,23 +1873,18 @@
-
-
- static void
--clear_connection( connecttab* c, struct timeval* tvP )
-+clear_connection( connecttab* c, struct timeval* tvP, int doKeep )
- {
- ClientData client_data;
-+ int linger;
-
- /* If we haven't actually sent the buffered response yet, do so now. */
-- httpd_write_response( c->hc );
-+ if (c->hc->responselen && c->conn_state != CNST_SENDING_RESP) {
-+ setup_sending(c, CNST_SENDING_RESP, tvP);
-
-- if ( c->idle_read_timer != (Timer*) 0 )
-- {
-- tmr_cancel( c->idle_read_timer );
-- c->idle_read_timer = 0;
-- }
-- if ( c->idle_send_timer != (Timer*) 0 )
-- {
-- tmr_cancel( c->idle_send_timer );
-- c->idle_send_timer = 0;
-+ return;
- }
-+
- if ( c->wakeup_timer != (Timer*) 0 )
- {
- tmr_cancel( c->wakeup_timer );
-@@ -1669,13 +1902,36 @@
- ** circumstances that make a lingering close necessary. If the flag
- ** isn't set we do the real close now.
- */
-- if ( c->hc->should_linger )
-+
-+ if ( c->hc->do_keep_alive && doKeep)
- {
-- c->conn_state = CNST_LINGERING;
-+ httpd_conn *hc = c->hc;
-+ c->conn_state = CNST_READING;
-+
-+ client_data.p = c;
-+ c->bytes_sent = 0;
-+ c->numtnums = 0;
-+ c->keep_alive = 1;
-+
-+ httpd_complete_request( c->hc, tvP );
-+
- fdwatch_del_fd( c->hc->conn_fd );
- fdwatch_add_fd( c->hc->conn_fd, c, FDW_READ );
-+
-+ httpd_request_reset( c->hc, 1 );
-+
-+ hc->read_idx -= hc->checked_idx;
-+ memmove(hc->read_buf, hc->read_buf + hc->checked_idx, hc->read_idx);
-+ hc->checked_idx = 0;
-+
- /* Make sure we are still in no-delay mode. */
- httpd_set_ndelay( c->hc->conn_fd );
-+ handle_request(c, tvP);
-+ }
-+ else if ( c->hc->should_linger )
-+ {
-+ c->conn_state = CNST_LINGERING;
-+
- client_data.p = c;
- c->linger_timer = tmr_create(
- tvP, linger_clear_connection, client_data, LINGER_TIME * 1000L, 0 );
-@@ -1684,9 +1940,19 @@
- syslog( LOG_CRIT, "tmr_create(linger_clear_connection) failed" );
- exit( 1 );
- }
-+
-+ httpd_complete_request( c->hc, tvP );
-+
-+ fdwatch_del_fd( c->hc->conn_fd );
-+ fdwatch_add_fd( c->hc->conn_fd, c, FDW_READ );
-+ /* Make sure we are still in no-delay mode. */
-+ httpd_set_ndelay( c->hc->conn_fd );
- }
-- else
-+ else
-+ {
-+ httpd_complete_request( c->hc, tvP );
- really_clear_connection( c, tvP );
-+ }
- }
-
-
-@@ -1702,45 +1968,12 @@
- tmr_cancel( c->linger_timer );
- c->linger_timer = 0;
- }
-+ free_connects[next_free_connect++] = c;
- c->conn_state = CNST_FREE;
- --numconnects;
- }
-
-
--static void
--idle_read_connection( ClientData client_data, struct timeval* nowP )
-- {
-- connecttab* c;
--
-- c = (connecttab*) client_data.p;
-- c->idle_read_timer = (Timer*) 0;
-- if ( c->conn_state != CNST_FREE )
-- {
-- syslog( LOG_INFO,
-- "%.80s connection timed out reading",
-- httpd_ntoa( &c->hc->client_addr ) );
-- httpd_send_err( c->hc, 408, httpd_err408title, "", httpd_err408form, "" );
-- clear_connection( c, nowP );
-- }
-- }
--
--
--static void
--idle_send_connection( ClientData client_data, struct timeval* nowP )
-- {
-- connecttab* c;
--
-- c = (connecttab*) client_data.p;
-- c->idle_send_timer = (Timer*) 0;
-- if ( c->conn_state != CNST_FREE )
-- {
-- syslog( LOG_INFO,
-- "%.80s connection timed out sending",
-- httpd_ntoa( &c->hc->client_addr ) );
-- clear_connection( c, nowP );
-- }
-- }
--
-
- static void
- wakeup_connection( ClientData client_data, struct timeval* nowP )
-@@ -1783,6 +2016,43 @@
- }
- #endif /* STATS_TIME */
-
-+char httpd_now_buf[100];
-+
-+
-+
-+static void
-+periodic_jobs( ClientData client_data, struct timeval* nowP )
-+{
-+ const char* rfc1123fmt = "%a, %d %b %Y %H:%M:%S GMT";
-+ struct tm *t;
-+ char date_nozone[100];
-+ const char* cernfmt_nozone = "%d/%b/%Y:%H:%M:%S";
-+ char data[100];
-+ int zone;
-+ char sign;
-+
-+ strftime( httpd_now_buf, sizeof(httpd_now_buf), rfc1123fmt, gmtime( &nowP->tv_sec ) );
-+
-+ t = localtime(&nowP->tv_sec);
-+ strftime( date_nozone, sizeof(date_nozone), cernfmt_nozone, t );
-+#ifdef HAVE_TM_GMTOFF
-+ zone = t->tm_gmtoff / 60L;
-+#else
-+ zone = -timezone / 60L;
-+ /* Probably have to add something about daylight time here. */
-+#endif
-+ if ( zone >= 0 )
-+ sign = '+';
-+ else
-+ {
-+ sign = '-';
-+ zone = -zone;
-+ }
-+ zone = ( zone / 60 ) * 100 + zone % 60;
-+ hs->log_date_len = sprintf( hs->log_date, "%s %c%04d", date_nozone, sign,
-+ zone );
-+}
-+
-
- /* Generate debugging statistics syslog messages for all packages. */
- static void
-@@ -1826,3 +2096,42 @@
- stats_connections = stats_bytes = 0L;
- stats_simultaneous = 0;
- }
-+
-+static void
-+timeout_conns(ClientData client_data, struct timeval *nowP)
-+{
-+ connecttab *c = connects, *ce = c + maxconnects;
-+ time_t now = nowP->tv_sec;
-+ int r = 0, w = 0;
-+ int checked = 0;
-+
-+ while (c < ce) {
-+ switch (c->conn_state) {
-+ case CNST_SENDING:
-+ case CNST_SENDING_RESP:
-+ checked++;
-+ if ((now - c->last_io) > IDLE_SEND_TIMELIMIT) {
-+ clear_connection( c, nowP, 0 );
-+ w++;
-+ }
-+ break;
-+ case CNST_READING:
-+ case CNST_READING_BODY:
-+ checked++;
-+ if ((now - c->last_io) > IDLE_READ_TIMELIMIT) {
-+ clear_connection( c, nowP, 0 );
-+ r++;
-+ }
-+ break;
-+ case CNST_FREE: break;
-+ default: checked++; break;
-+ }
-+ c++;
-+ if (checked >= numconnects) break;
-+ }
-+
-+ if (r > 0 || w > 0) {
-+ syslog(LOG_INFO, "Expired %d/%d connections in read/write state", r, w);
-+ }
-+}
-+
-diff -ur thttpd-2.21b/version.h thttpd-2.21b-cool/version.h
---- thttpd-2.21b/version.h Tue Apr 24 04:05:23 2001
-+++ thttpd-2.21b-cool/version.h Sat Sep 20 14:43:20 2003
-@@ -3,7 +3,7 @@
- #ifndef _VERSION_H_
- #define _VERSION_H_
-
--#define SERVER_SOFTWARE "thttpd/2.21b 23apr2001"
-+#define SERVER_SOFTWARE "thttpd/2.21b PHP/20030920"
- #define SERVER_ADDRESS "http://www.acme.com/software/thttpd/"
-
- #endif /* _VERSION_H_ */
diff --git a/sapi/tux/CREDITS b/sapi/tux/CREDITS
deleted file mode 100644
index 3b7aa70c01..0000000000
--- a/sapi/tux/CREDITS
+++ /dev/null
@@ -1,2 +0,0 @@
-tux
-Sascha Schumann
diff --git a/sapi/tux/README b/sapi/tux/README
deleted file mode 100644
index 92c021123f..0000000000
--- a/sapi/tux/README
+++ /dev/null
@@ -1,86 +0,0 @@
-README FOR THE TUX MODULE (by Sascha Schumann)
-($Date$)
-
- This is a SAPI module for the TUX web-server by Ingo Molnar.
-
- The special thing about TUX is that it is integrated into the Linux
- kernel and thus provides high-speed serving of static files.
-
- The web-server provides a user-space API which allows arbitrary
- plug-ins to be made available.
-
- All requests to the PHP userspace module are currently serialized.
-
- This module is of alpha quality. Due to incomplete APIs, HTTP
- authentication and handling of POST requests has not been
- implemented yet.
-
- SECURITY NOTE: PHP will happily run everything under the
- web-root through the parser; so be careful what you put
- there.
-
- Note that requests are served in a chroot'ed environment.
- The initialization of PHP does not take place in the chroot'ed
- environment, so that e.g. /usr/local/lib/php.ini is treated
- as usual.
-
-REQUIRED DOWNLOADS
-
- 1. TUX
-
- http://people.redhat.com/~mingo/TUX-patches/QuickStart-TUX.txt
-
- 2. PHP 4.0.x
-
- Download:
- http://www.php.net/
-
- Snapshots from CVS:
- http://snaps.php.net/
-
-
-BUILD INSTRUCTIONS
-
- 1. Install TUX as outlined in the QuickStart text.
- Create /tux-modules where modules will reside.
-
- 2. Prepare PHP
-
- $ cd php-*
- $ ./configure \
- --with-tux=/tux-modules \
- <further PHP options>
- # make install
-
- You can see the list of valid PHP options by executing
-
- $ ./configure --help
-
- 3. Touch a file in your web-root 'php5.tux'. This will
- cause requests to '/php5.tux' to be redirected to the
- userspace module php5.tux.
-
- 4. Start TUX with something like
-
- # tux -d -t 8 -r /www -m /tux-modules php5.tux
-
- (daemon mode, eight threads, web-root /www, modules in
- /tux-modules, load php5.tux)
-
- BEFORE running this command, the kernel side of TUX has to
- be properly setup.
-
- 5. Try to access
-
- http://yourserver/php5.tux?=PHPB8B5F2A0-3C92-11d3-A3A9-4C7B08C10000
-
- It should display the PHP credits page.
-
- To access a script /foo/bar.php, use
-
- http://yourserver/php5.tux?/foo/bar.php
-
- Parameters can be appended:
-
- http://yourserver/php5.tux?/foo/bar.php&var=value
-
diff --git a/sapi/tux/config.m4 b/sapi/tux/config.m4
deleted file mode 100644
index cc79bea1b9..0000000000
--- a/sapi/tux/config.m4
+++ /dev/null
@@ -1,18 +0,0 @@
-dnl
-dnl $Id$
-dnl
-
-PHP_TUX=no
-
-AC_ARG_WITH(tux,
-[ --with-tux=MODULEDIR Build PHP as a TUX module (Linux only)],[
- INSTALL_IT="\$(INSTALL) -m 0755 $SAPI_SHARED $withval/php5.tux.so"
- AC_CHECK_HEADERS(tuxmodule.h,[:],[AC_MSG_ERROR([Cannot find tuxmodule.h])])
- PHP_SELECT_SAPI(tux, shared, php_tux.c)
- PHP_TUX=yes
-])
-
-AC_MSG_CHECKING(for TUX)
-AC_MSG_RESULT($PHP_TUX)
-
-unset PHP_TUX
diff --git a/sapi/tux/php.sym b/sapi/tux/php.sym
deleted file mode 100644
index b968c5f5a2..0000000000
--- a/sapi/tux/php.sym
+++ /dev/null
@@ -1,2 +0,0 @@
-TUXAPI_handle_events
-TUXAPI_init
diff --git a/sapi/tux/php_tux.c b/sapi/tux/php_tux.c
deleted file mode 100644
index 5d5afd30b1..0000000000
--- a/sapi/tux/php_tux.c
+++ /dev/null
@@ -1,453 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Sascha Schumann <sascha@schumann.cx> |
- +----------------------------------------------------------------------+
-*/
-
-#include "php.h"
-#include "SAPI.h"
-#include "php_main.h"
-#include "php_variables.h"
-
-#include "ext/standard/php_smart_str.h"
-
-#include "tuxmodule.h"
-
-#include <sys/uio.h>
-
-#if 0
-#include <pthread.h>
-#endif
-
-void tux_closed_conn(int fd);
-
-enum {
- PHP_TUX_BACKGROUND_CONN = 1
-};
-
-typedef struct {
- user_req_t *req;
- void (*on_close)(int);
- int tux_action;
- struct iovec *header_vec;
- int number_vec;
-} php_tux_globals;
-
-static php_tux_globals tux_globals;
-
-#define TG(v) (tux_globals.v)
-
-static int sapi_tux_ub_write(const char *str, uint str_length TSRMLS_DC)
-{
- int n;
- int m;
- const char *estr;
-
- /* combine headers and body */
- if (TG(number_vec)) {
- struct iovec *vec = TG(header_vec);
-
- n = TG(number_vec);
- vec[n].iov_base = (void *) str;
- vec[n++].iov_len = str_length;
-
- /* XXX: this might need more complete error handling */
- if ((m = writev(TG(req)->sock, vec, n)) == -1 && errno == EPIPE)
- php_handle_aborted_connection();
-
- if (m > 0)
- TG(req)->bytes_sent += str_length;
-
- TG(number_vec) = 0;
- return str_length;
- }
-
- estr = str + str_length;
-
- while (str < estr) {
- n = send(TG(req)->sock, str, estr - str, 0);
-
- if (n == -1 && errno == EPIPE)
- php_handle_aborted_connection();
- if (n == -1 && errno == EAGAIN)
- continue;
- if (n <= 0)
- return n;
-
- str += n;
- }
-
- n = str_length - (estr - str);
-
- TG(req)->bytes_sent += n;
-
- return n;
-}
-
-static int sapi_tux_send_headers(sapi_headers_struct *sapi_headers)
-{
- char buf[1024];
- struct iovec *vec;
- int n;
- int max_headers;
- zend_llist_position pos;
- sapi_header_struct *h;
- size_t len;
- char *status_line;
- int locate_cl;
- TSRMLS_FETCH();
-
- max_headers = 30;
- n = 1;
-
- vec = malloc(sizeof(struct iovec) * max_headers);
- status_line = malloc(30);
-
- /* safe sprintf use */
- len = sprintf(status_line, "HTTP/1.1 %d NA\r\n", SG(sapi_headers).http_response_code);
-
- vec[0].iov_base = status_line;
- vec[0].iov_len = len;
-
- TG(req)->http_status = SG(sapi_headers).http_response_code;
-
- if (TG(tux_action) == TUX_ACTION_FINISH_CLOSE_REQ && TG(req)->http_version == HTTP_1_1)
- locate_cl = 1;
- else
- locate_cl = 0;
-
- h = zend_llist_get_first_ex(&sapi_headers->headers, &pos);
- while (h) {
- if (locate_cl
- && strncasecmp(h->header, "Content-length:", sizeof("Content-length:")-1) == 0) {
- TG(tux_action) = TUX_ACTION_FINISH_REQ;
- locate_cl = 0;
- }
-
- vec[n].iov_base = h->header;
- vec[n++].iov_len = h->header_len;
- if (n >= max_headers - 3) {
- max_headers *= 2;
- vec = realloc(vec, sizeof(struct iovec) * max_headers);
- }
- vec[n].iov_base = "\r\n";
- vec[n++].iov_len = 2;
-
- h = zend_llist_get_next_ex(&sapi_headers->headers, &pos);
- }
-
- vec[n].iov_base = "\r\n";
- vec[n++].iov_len = 2;
-
- TG(number_vec) = n;
- TG(header_vec) = vec;
-
-
- return SAPI_HEADER_SENT_SUCCESSFULLY;
-}
-
-static int sapi_tux_read_post(char *buffer, uint count_bytes)
-{
-#if 0
- int amount = 0;
- TSRMLS_FETCH();
-
- TG(req)->objectlen = count_bytes;
- TG(req)->object_addr = buffer;
- if (tux(TUX_ACTION_READ_POST_DATA, TG(req)))
- return 0;
-
- TG(read_post_data) = 1;
-
- return TG(req)->objectlen;
-#else
- return 0;
-#endif
-}
-
-static char *sapi_tux_read_cookies(void)
-{
- TSRMLS_FETCH();
-
- return TG(req)->cookies;
-}
-
-#define BUF_SIZE 512
-#define ADD_STRING(name) \
- php_register_variable(name, buf, track_vars_array TSRMLS_CC)
-
-static void sapi_tux_register_variables(zval *track_vars_array TSRMLS_DC)
-{
- char buf[BUF_SIZE + 1];
- char *p;
- sapi_header_line ctr = {0};
-
- ctr.line = buf;
- ctr.line_len = sprintf(buf, "Server: %s", TUXAPI_version);
- sapi_header_op(SAPI_HEADER_REPLACE, &ctr TSRMLS_CC);
-
- php_register_variable("PHP_SELF", SG(request_info).request_uri, track_vars_array TSRMLS_CC);
- php_register_variable("SERVER_SOFTWARE", TUXAPI_version, track_vars_array TSRMLS_CC);
- php_register_variable("GATEWAY_INTERFACE", "CGI/1.1", track_vars_array TSRMLS_CC);
- php_register_variable("REQUEST_METHOD", (char *) SG(request_info).request_method, track_vars_array TSRMLS_CC);
- php_register_variable("DOCUMENT_ROOT", TUXAPI_docroot, track_vars_array TSRMLS_CC);
- php_register_variable("SERVER_NAME", TUXAPI_servername, track_vars_array TSRMLS_CC);
- php_register_variable("REQUEST_URI", SG(request_info).request_uri, track_vars_array TSRMLS_CC);
- php_register_variable("PATH_TRANSLATED", SG(request_info).path_translated, track_vars_array TSRMLS_CC);
-
- p = inet_ntoa(TG(req)->client_host);
- /* string representation of IPs are never larger than 512 bytes */
- if (p) {
- memcpy(buf, p, strlen(p) + 1);
- ADD_STRING("REMOTE_ADDR");
- ADD_STRING("REMOTE_HOST");
- }
-
- sprintf(buf, "%d", CGI_SERVER_PORT(TG(req)));
- ADD_STRING("SERVER_PORT");
-
-#if 0
- snprintf(buf, BUF_SIZE, "/%s", TG(hc)->pathinfo);
- ADD_STRING("PATH_INFO");
-
- snprintf(buf, BUF_SIZE, "/%s", TG(hc)->origfilename);
- ADD_STRING("SCRIPT_NAME");
-#endif
-
-#define CONDADD(name, field) \
- if (TG(req)->field[0]) { \
- php_register_variable(#name, TG(req)->field, track_vars_array TSRMLS_CC); \
- }
-
- CONDADD(HTTP_REFERER, referer);
- CONDADD(HTTP_USER_AGENT, user_agent);
- CONDADD(HTTP_ACCEPT, accept);
- CONDADD(HTTP_ACCEPT_ENCODING, accept_encoding);
- CONDADD(HTTP_ACCEPT_LANGUAGE, accept_language);
- CONDADD(HTTP_COOKIE, cookies);
- CONDADD(CONTENT_TYPE, content_type);
-
-#if 0
- if (TG(hc)->contentlength != -1) {
- sprintf(buf, "%ld", (long) TG(hc)->contentlength);
- ADD_STRING("CONTENT_LENGTH");
- }
-#endif
-
-#if 0
- if (TG(hc)->authorization[0])
- php_register_variable("AUTH_TYPE", "Basic", track_vars_array TSRMLS_CC);
-#endif
-}
-
-
-static int php_tux_startup(sapi_module_struct *sapi_module)
-{
- if (php_module_startup(sapi_module, NULL, 0)==FAILURE) {
- return FAILURE;
- } else {
- return SUCCESS;
- }
-}
-
-static sapi_module_struct tux_sapi_module = {
- "tux",
- "tux",
-
- php_tux_startup,
- php_module_shutdown_wrapper,
-
- NULL, /* activate */
- NULL, /* deactivate */
-
- sapi_tux_ub_write,
- NULL,
- NULL, /* get uid */
- NULL, /* getenv */
-
- php_error,
-
- NULL,
- sapi_tux_send_headers,
- NULL,
- sapi_tux_read_post,
- sapi_tux_read_cookies,
-
- sapi_tux_register_variables,
- NULL, /* Log message */
-
- STANDARD_SAPI_MODULE_PROPERTIES
-};
-
-static void tux_module_main(TSRMLS_D)
-{
- zend_file_handle file_handle;
-
- file_handle.type = ZEND_HANDLE_FILENAME;
- file_handle.filename = SG(request_info).path_translated;
- file_handle.free_filename = 0;
- file_handle.opened_path = NULL;
-
- if (php_request_startup(TSRMLS_C) == FAILURE) {
- return;
- }
-
- php_execute_script(&file_handle TSRMLS_CC);
- php_request_shutdown(NULL);
-}
-
-static void tux_request_ctor(TSRMLS_D)
-{
- char buf[1024];
- int offset;
- size_t filename_len;
- size_t cwd_len;
- smart_str s = {0};
- char *p;
-
- TG(number_vec) = 0;
- TG(header_vec) = NULL;
- SG(request_info).query_string = strdup(TG(req)->query);
-
- smart_str_appends_ex(&s, "/", 1);
- smart_str_appends_ex(&s, TG(req)->query, 1);
- smart_str_0(&s);
- p = strchr(s.c, '&');
- if (p)
- *p = '\0';
- SG(request_info).path_translated = s.c;
-
- s.c = NULL;
- smart_str_appendc_ex(&s, '/', 1);
- smart_str_appends_ex(&s, TG(req)->objectname, 1);
- smart_str_0(&s);
- SG(request_info).request_uri = s.c;
- SG(request_info).request_method = CGI_REQUEST_METHOD(TG(req));
- SG(sapi_headers).http_response_code = 200;
- SG(request_info).content_type = TG(req)->content_type;
- SG(request_info).content_length = 0; /* TG(req)->contentlength; */
-
-#if 0
- php_handle_auth_data(TG(hc)->authorization TSRMLS_CC);
-#endif
-}
-
-static void tux_request_dtor(TSRMLS_D)
-{
- if (TG(header_vec)) {
- /* free status_line */
- free(TG(header_vec)[0].iov_base);
- free(TG(header_vec));
- }
- if (SG(request_info).query_string)
- free(SG(request_info).query_string);
- free(SG(request_info).request_uri);
- free(SG(request_info).path_translated);
-}
-
-#if 0
-static void *separate_thread(void *bla)
-{
- int fd;
- int i = 0;
-
- fd = (int) bla;
-
- while (i++ < 5) {
- send(fd, "test<br />\n", 9, 0);
- sleep(1);
- }
-
- tux(TUX_ACTION_CONTINUE_REQ, (user_req_t *) fd);
- /* We HAVE to trigger some event on the fd. Otherwise
- fast_thread won't wake up, so that the eventloop
- won't be entered -> TUX hangs */
- shutdown(fd, 2);
- pthread_exit(NULL);
-}
-#endif
-
-int TUXAPI_handle_events(user_req_t *req)
-{
- TSRMLS_FETCH();
-
- if (req->event == PHP_TUX_BACKGROUND_CONN) {
- tux_closed_conn(req->sock);
- return tux(TUX_ACTION_FINISH_CLOSE_REQ, req);
- }
-
- TG(req) = req;
- TG(tux_action) = TUX_ACTION_FINISH_CLOSE_REQ;
-
- tux_request_ctor(TSRMLS_C);
-
- tux_module_main(TSRMLS_C);
-
- tux_request_dtor(TSRMLS_C);
-
- return tux(TG(tux_action), req);
-}
-
-void tux_register_on_close(void (*arg)(int))
-{
- TG(on_close) = arg;
-}
-
-void tux_closed_conn(int fd)
-{
- TSRMLS_FETCH();
-
- if (TG(on_close)) TG(on_close)(fd);
-}
-
-int tux_get_fd(void)
-{
- TSRMLS_FETCH();
-
- return TG(req)->sock;
-}
-
-void tux_set_dont_close(void)
-{
- TSRMLS_FETCH();
-
- TG(req)->event = PHP_TUX_BACKGROUND_CONN;
- tux(TUX_ACTION_POSTPONE_REQ, TG(req));
- TG(tux_action) = TUX_ACTION_EVENTLOOP;
-}
-
-void TUXAPI_init(void)
-{
- sapi_startup(&tux_sapi_module);
- tux_sapi_module.startup(&tux_sapi_module);
- SG(server_context) = (void *) 1;
-}
-
-void doesnotmatter_fini(void)
-{
- if (SG(server_context) != NULL) {
- tux_sapi_module.shutdown(&tux_sapi_module);
- sapi_shutdown();
- }
-}
-
-/*
- * 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/sapi/webjames/CREDITS b/sapi/webjames/CREDITS
deleted file mode 100644
index 73a7983e92..0000000000
--- a/sapi/webjames/CREDITS
+++ /dev/null
@@ -1,2 +0,0 @@
-WebJames
-Alex Waugh
diff --git a/sapi/webjames/README b/sapi/webjames/README
deleted file mode 100644
index 746a7762fb..0000000000
--- a/sapi/webjames/README
+++ /dev/null
@@ -1,28 +0,0 @@
-README for WebJames SAPI module
-by Alex Waugh <alex@alexwaugh.com>
-
-This is a SAPI module for the WebJames HTTP server, which runs on the
-RISC OS operating system.
-
-
-DOWNLOADS
-
-A recent (February 2002 or later) version of the GCCSDK cross compiler
-http://www.hard-mofo.dsvr.net/
-
-WebJames 0.35 or later
-http://www.webjames.alexwaugh.com/
-
-
-BUILDING
-
-$ cd php5
-$ ./configure \
- --host=arm-riscos-aof \
- --with-webjames=../webjames/src \
- --with-config-file-path=/Choices: \
- other PHP options
-$ make install
-$ cd ../webjames
-$ ./configure --enable-php
-$ make
diff --git a/sapi/webjames/config.m4 b/sapi/webjames/config.m4
deleted file mode 100644
index 10e0001680..0000000000
--- a/sapi/webjames/config.m4
+++ /dev/null
@@ -1,20 +0,0 @@
-dnl
-dnl $Id$
-dnl
-
-AC_ARG_WITH(webjames,
-[ --with-webjames=SRCDIR Build PHP as a WebJames module (RISC OS only)],[
- PHP_EXPAND_PATH($withval, WEBJAMES)
- INSTALL_IT="\
- echo 'PHP_LIBS = -l$abs_srcdir/$SAPI_STATIC \$(PHP_LIBS) \$(EXTRA_LIBS)' > $WEBJAMES/build/php; \
- echo 'PHP_LDFLAGS = \$(NATIVE_RPATHS) \$(PHP_LDFLAGS)' >> $WEBJAMES/build/php; \
- echo 'PHP_CFLAGS = -DPHP \$(COMMON_FLAGS) \$(EXTRA_CFLAGS) -I$abs_srcdir/sapi/webjames' >> $WEBJAMES/build/php;"
- PHP_WEBJAMES="yes, using $WEBJAMES"
- PHP_ADD_INCLUDE($WEBJAMES)
- PHP_SELECT_SAPI(webjames, static, webjames.c)
-],[
- PHP_WEBJAMES="no"
-])
-
-AC_MSG_CHECKING(for webjames)
-AC_MSG_RESULT($PHP_WEBJAMES)
diff --git a/sapi/webjames/php_webjames.h b/sapi/webjames/php_webjames.h
deleted file mode 100644
index e18f7f8761..0000000000
--- a/sapi/webjames/php_webjames.h
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Alex Waugh <alex@alexwaugh.com> |
- +----------------------------------------------------------------------+
-*/
-
-#ifndef PHP_WEBJAMES_H
-#define PHP_WEBJAMES_H
-
-#include "webjames.h"
-
-void webjames_php_shutdown(void);
-int webjames_php_init(void);
-void webjames_php_request(struct connection *conn);
-
-#endif
diff --git a/sapi/webjames/webjames.c b/sapi/webjames/webjames.c
deleted file mode 100644
index b4cc6224c3..0000000000
--- a/sapi/webjames/webjames.c
+++ /dev/null
@@ -1,305 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Alex Waugh <alex@alexwaugh.com> |
- +----------------------------------------------------------------------+
-*/
-
-
-#include "php.h"
-#include "SAPI.h"
-#include "php_main.h"
-#include "php_variables.h"
-
-#define WEBJAMES_PHP_ONLY
-#include "php_webjames.h"
-
-#include <unixlib/local.h>
-
-#define WEBJAMES_SAPI_VERSION "1.0.0"
-
-typedef struct {
- struct connection *conn; /*structure holding all the details of the current request*/
- int bodyread; /*amount of POST body read*/
- closefn oldclose; /*function to call to close the connection*/
-} php_webjames_globals;
-
-static php_webjames_globals webjames_globals;
-
-#define WG(v) (webjames_globals.v)
-
-static int sapi_webjames_ub_write(const char *str, uint str_length TSRMLS_DC)
-/*unbuffered write - send data straight out to socket*/
-{
- int bytes;
-
- bytes = webjames_writebuffer(WG(conn),str,str_length);
- if (bytes<0) {
- PG(connection_status) = PHP_CONNECTION_ABORTED;
- if (!PG(ignore_user_abort)) {
- zend_bailout();
- }
- }
- return bytes;
-}
-
-static void sapi_webjames_send_header(sapi_header_struct *sapi_header, void *server_context TSRMLS_DC)
-/*send an HTTP header*/
-{
- if (WG(conn)->flags.outputheaders) {
- if (sapi_header)
- webjames_writebuffer(WG(conn), sapi_header->header, sapi_header->header_len);
- webjames_writestring(WG(conn), "\r\n");
- }
-}
-
-static int sapi_webjames_read_post(char *buffer, uint count_bytes TSRMLS_DC)
-/*read some of the post data*/
-{
- if (WG(conn)->body==NULL) return 0;
- if (count_bytes+WG(bodyread)>WG(conn)->bodysize) count_bytes=WG(conn)->bodysize-WG(bodyread);
- memcpy(buffer, WG(conn)->body+WG(bodyread), count_bytes);
- WG(bodyread)+=count_bytes;
- return count_bytes;
-}
-
-static char *sapi_webjames_read_cookies(TSRMLS_D)
-{
- return WG(conn)->cookie;
-}
-
-#define BUF_SIZE 512
-#define ADD_STRING(name,string)\
- php_register_variable(name, string, track_vars_array TSRMLS_CC)
-
-#define ADD_NUM(name,field) {\
- snprintf(buf, BUF_SIZE, "%d", WG(conn)->field);\
- php_register_variable(name, buf, track_vars_array TSRMLS_CC);\
-}
-
-#define ADD_FIELD(name, field) \
- if (WG(conn)->field) { \
- php_register_variable(name, WG(conn)->field, track_vars_array TSRMLS_CC); \
- }
-
-static void sapi_webjames_register_variables(zval *track_vars_array TSRMLS_DC)
-{
- char buf[BUF_SIZE + 1];
-
- buf[BUF_SIZE] = '\0';
-
- ADD_STRING("SERVER_SOFTWARE", configuration.server);
- ADD_STRING("SERVER_NAME", configuration.serverip);
- ADD_FIELD("SERVER_PROTOCOL", protocol);
- ADD_NUM("SERVER_PORT", port);
- ADD_STRING("SERVER_ADMIN",configuration.webmaster);
- ADD_STRING("GATEWAY_INTERFACE", "CGI/1.1");
- ADD_STRING("DOCUMENT_ROOT", configuration.site);
-
- ADD_FIELD("REQUEST_METHOD", methodstr);
- ADD_FIELD("REQUEST_URI", requesturi);
- ADD_STRING("PATH_TRANSLATED", SG(request_info).path_translated);
- ADD_FIELD("SCRIPT_NAME", uri);
- ADD_FIELD("PHP_SELF", uri);
- ADD_FIELD("QUERY_STRING", args);
-
-
- snprintf(buf, BUF_SIZE, "%d.%d.%d.%d", WG(conn)->ipaddr[0], WG(conn)->ipaddr[1], WG(conn)->ipaddr[2], WG(conn)->ipaddr[3]);
- ADD_STRING("REMOTE_ADDR", buf);
- if (WG(conn)->dnsstatus == DNS_OK) ADD_FIELD("REMOTE_HOST", host);
-
- if ((WG(conn)->method == METHOD_POST) || (WG(conn)->method == METHOD_PUT)) {
- ADD_NUM("CONTENT_LENGTH", bodysize);
- ADD_FIELD("CONTENT_TYPE", type);
- }
-
- if ((WG(conn)->method == METHOD_PUT) || (WG(conn)->method == METHOD_DELETE)) ADD_FIELD("ENTITY_PATH", requesturi);
-
- if (WG(conn)->pwd) {
- ADD_STRING("AUTH_TYPE", "basic");
- ADD_FIELD("REMOTE_USER", authorization);
- }
-
- ADD_FIELD("HTTP_COOKIE", cookie);
- ADD_FIELD("HTTP_USER_AGENT", useragent);
- ADD_FIELD("HTTP_REFERER", referer);
- ADD_FIELD("HTTP_ACCEPT", accept);
- ADD_FIELD("HTTP_ACCEPT_LANGUAGE", acceptlanguage);
- ADD_FIELD("HTTP_ACCEPT_CHARSET", acceptcharset);
- ADD_FIELD("HTTP_ACCEPT_ENCODING", acceptencoding);
-}
-
-static void webjames_module_main(TSRMLS_D)
-{
- zend_file_handle file_handle;
- FILE *fp=NULL;
- char *path;
-
- /* Convert filename to Unix format*/
- __riscosify_control|=__RISCOSIFY_DONT_CHECK_DIR;
- path = __unixify(WG(conn)->filename,0,NULL,1024,0);
- if (path) SG(request_info).path_translated = estrdup(path);
-
- SG(request_info).query_string = WG(conn)->args;
- SG(request_info).request_uri = WG(conn)->requesturi;
- SG(request_info).request_method = WG(conn)->methodstr;
- if (WG(conn)->method==METHOD_HEAD) {
- SG(request_info).headers_only = 1;
- } else {
- SG(request_info).headers_only = 0;
- }
- SG(sapi_headers).http_response_code = 200;
- SG(request_info).content_type = WG(conn)->type;
- SG(request_info).content_length = WG(conn)->bodysize;
-
- SG(request_info).auth_user = NULL;
- SG(request_info).auth_password = NULL;
- if (WG(conn)->authorization) {
- char *colon=strchr(WG(conn)->authorization,':');
- if (colon) {
- SG(request_info).auth_user = emalloc(colon-WG(conn)->authorization+1);
- if (SG(request_info).auth_user) {
- memcpy(SG(request_info).auth_user,WG(conn)->authorization,colon-WG(conn)->authorization);
- SG(request_info).auth_user[colon-WG(conn)->authorization]='\0';
- SG(request_info).auth_password = estrdup(colon+1);
- }
- }
- }
-
- /*ensure that syslog calls get logged separately from WebJames' main log */
- openlog("PHP",0,0);
-
- file_handle.type = ZEND_HANDLE_FILENAME;
- file_handle.filename = SG(request_info).path_translated;
- file_handle.free_filename = 0;
- file_handle.opened_path = NULL;
-
- if (php_request_startup(TSRMLS_C) == FAILURE) {
- return;
- }
-
- php_execute_script(&file_handle TSRMLS_CC);
- php_request_shutdown(NULL);
-}
-
-static void webjames_php_close(struct connection *conn, int force)
-/*called by webjames if it wants to close the connection*/
-{
- TSRMLS_FETCH();
-
- php_request_shutdown(NULL);
- WG(oldclose)(conn,force);
-}
-
-void webjames_php_request(struct connection *conn)
-/*called by WebJames to start handler*/
-{
- TSRMLS_FETCH();
-
- WG(conn) = conn;
- WG(bodyread) = 0;
- WG(oldclose) = conn->close;
- conn->close=webjames_php_close;
-
- webjames_module_main(TSRMLS_C);
-
- WG(oldclose)(WG(conn), 0);
-}
-
-static void php_info_webjames(ZEND_MODULE_INFO_FUNC_ARGS)
-{
- php_info_print_table_start();
- php_info_print_table_row(2, "SAPI module version", WEBJAMES_SAPI_VERSION);
- php_info_print_table_row(2, "WebJames version", WEBJAMES_VERSION " (" WEBJAMES_DATE ")");
- php_info_print_table_end();
-}
-
-static zend_module_entry php_webjames_module = {
-#if ZEND_MODULE_API_NO >= 20010901
- STANDARD_MODULE_HEADER,
-#endif
- "WebJames",
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- php_info_webjames,
-#if ZEND_MODULE_API_NO >= 20010901
- WEBJAMES_SAPI_VERSION,
-#endif
- STANDARD_MODULE_PROPERTIES
-};
-
-
-static int php_webjames_startup(sapi_module_struct *sapi_module)
-{
- if(php_module_startup(sapi_module, &php_webjames_module, 1) == FAILURE) {
- return FAILURE;
- } else {
- return SUCCESS;
- }
-}
-
-static sapi_module_struct sapi_module = {
- "webjames", /* name */
- "WebJames", /* pretty name */
-
- php_webjames_startup, /* startup */
- php_module_shutdown_wrapper, /* shutdown */
-
- NULL, /* activate */
- NULL, /* deactivate */
-
- sapi_webjames_ub_write, /* unbuffered write */
- NULL, /* flush */
- NULL, /* get uid */
- NULL, /* getenv */
-
- php_error, /* error handler */
-
- NULL, /* header handler */
- NULL, /* send headers handler */
- sapi_webjames_send_header, /* send header handler */
- sapi_webjames_read_post, /* read POST data */
- sapi_webjames_read_cookies, /* read Cookies */
-
- sapi_webjames_register_variables, /* register server variables */
- NULL, /* Log message */
-
- STANDARD_SAPI_MODULE_PROPERTIES
-};
-
-int webjames_php_init(void)
-/*called when WebJames initialises*/
-{
- TSRMLS_FETCH();
- if (strcmp(configuration.webjames_h_revision,WEBJAMES_H_REVISION)!=0) {
- /*This file was compiled against a different revision of
- webjames.h than webjames was, which could be bad news*/
- webjames_writelog(0,"PHP module is compiled for WebJames (%s) and was linked with a different version (%s)",WEBJAMES_H_REVISION,configuration.webjames_h_revision);
- return 0; /*failed to initialise*/
- }
- sapi_startup(&sapi_module);
- sapi_module.startup(&sapi_module);
- SG(server_context) = (void *) 1;
- return 1; /*initialised correctly*/
-}
-
-void webjames_php_shutdown(void)
-/*called when WebJames is about to quit*/
-{
- sapi_module.shutdown(&sapi_module);
- sapi_shutdown();
-}
diff --git a/scripts/Makefile.frag b/scripts/Makefile.frag
deleted file mode 100644
index 7c40b41b5c..0000000000
--- a/scripts/Makefile.frag
+++ /dev/null
@@ -1,74 +0,0 @@
-
-#
-# Build environment install
-#
-
-phpincludedir = $(includedir)/php
-phpbuilddir = $(prefix)/lib/php/build
-
-BUILD_FILES = \
- scripts/phpize.m4 \
- build/mkdep.awk \
- build/shtool \
- build/scan_makefile_in.awk \
- Makefile.global \
- acinclude.m4
-
-bin_SCRIPTS = phpize php-config
-bin_src_SCRIPTS = phpextdist
-
-install-build:
- @echo "Installing build environment: $(INSTALL_ROOT)$(phpbuilddir)/"
- @$(mkinstalldirs) $(INSTALL_ROOT)$(phpbuilddir) $(INSTALL_ROOT)$(bindir) && \
- (cd $(top_srcdir) && $(INSTALL) $(BUILD_FILES) $(INSTALL_ROOT)$(phpbuilddir))
-
-HEADER_DIRS = \
- / \
- Zend/ \
- TSRM/ \
- main/ \
- main/streams/ \
- regex/ \
- ext/libxml/ \
- ext/standard/ \
- ext/session/ \
- ext/xml/ \
- ext/xml/expat/ \
- ext/mbstring/ \
- ext/sqlite/libsqlite/src/sqlite.h
-
-install-headers:
- -@for i in $(HEADER_DIRS); do \
- i=`$(top_srcdir)/build/shtool path -d $$i`; \
- paths="$$paths $(INSTALL_ROOT)$(phpincludedir)/$$i"; \
- done; \
- $(mkinstalldirs) $$paths && \
- echo "Installing header files: $(INSTALL_ROOT)$(phpincludedir)/" && \
- for i in $(HEADER_DIRS); do \
- if test -f "$(top_srcdir)/$$i"; then \
- $(INSTALL_DATA) $(top_srcdir)/$$i $(INSTALL_ROOT)$(phpincludedir)/$$i; \
- elif test -f "$(top_builddir)/$$i"; then \
- $(INSTALL_DATA) $(top_builddir)/$$i $(INSTALL_ROOT)$(phpincludedir)/$$i; \
- else \
- (cd $(top_srcdir)/$$i && $(INSTALL_DATA) *.h $(INSTALL_ROOT)$(phpincludedir)/$$i; \
- cd $(top_builddir)/$$i && $(INSTALL_DATA) *.h $(INSTALL_ROOT)$(phpincludedir)/$$i) 2>/dev/null || true; \
- fi \
- done; \
- cd $(top_srcdir)/sapi/embed && $(INSTALL_DATA) *.h $(INSTALL_ROOT)$(phpincludedir)/main
-
-install-programs: $(builddir)/phpize $(builddir)/php-config
- @echo "Installing helper programs: $(INSTALL_ROOT)$(bindir)/"
- @for prog in $(bin_SCRIPTS); do \
- echo " program: $(program_prefix)$$prog$(program_suffix)"; \
- $(INSTALL) -m 755 $(builddir)/$$prog $(INSTALL_ROOT)$(bindir)/$(program_prefix)$$prog$(program_suffix); \
- done
- @for prog in $(bin_src_SCRIPTS); do \
- echo " program: $(program_prefix)$$prog$(program_suffix)"; \
- $(INSTALL) -m 755 $(top_srcdir)/scripts/$$prog $(INSTALL_ROOT)$(bindir)/$(program_prefix)$$prog$(program_suffix); \
- done
-
-$(builddir)/phpize: $(srcdir)/phpize.in $(top_builddir)/config.status
- (CONFIG_FILES=$@ CONFIG_HEADERS= $(top_builddir)/config.status)
-
-$(builddir)/php-config: $(srcdir)/php-config.in $(top_builddir)/config.status
- (CONFIG_FILES=$@ CONFIG_HEADERS= $(top_builddir)/config.status)
diff --git a/scripts/apache/apconf-conv.sh b/scripts/apache/apconf-conv.sh
deleted file mode 100755
index 6126bdc27d..0000000000
--- a/scripts/apache/apconf-conv.sh
+++ /dev/null
@@ -1,24 +0,0 @@
-#!/bin/sh
-
-if [ "$1" = "" ]; then
- echo "Usage: $0 /somewhere/httpd.conf"
- exit 1
-fi
-
-if [ ! -w $1 ]; then
- echo "You cannot write to $1"
- exit 1
-fi
-
-TMPFILE=tmpfile.$$
-
-awk -f conffix.awk <$1 >$TMPFILE
-
-if [ "$?" != 0 ]; then
- exit 1
-fi
-
-mv -f $1 $1.orig
-mv -f $TMPFILE $1
-exit 0
-
diff --git a/scripts/apache/aphtaccess-conv.sh b/scripts/apache/aphtaccess-conv.sh
deleted file mode 100755
index 1af59d2843..0000000000
--- a/scripts/apache/aphtaccess-conv.sh
+++ /dev/null
@@ -1,24 +0,0 @@
-#!/bin/sh
-
-if [ "$1" = "" ]; then
- echo "Usage: $0 /somewhere/.htaccess"
- exit 1
-fi
-
-if [ ! -w $1 ]; then
- echo "You cannot write to $1"
- exit 1
-fi
-
-TMPFILE=tmpfile.$$
-
-awk -f htaccessfix.awk <$1 >$TMPFILE
-
-if [ "$?" != 0 ]; then
- exit 1
-fi
-
-mv -f $1 $1.orig
-mv -f $TMPFILE $1
-exit 0
-
diff --git a/scripts/apache/conffix.awk b/scripts/apache/conffix.awk
deleted file mode 100644
index 88be6fade7..0000000000
--- a/scripts/apache/conffix.awk
+++ /dev/null
@@ -1,23 +0,0 @@
-# $Id$
-
-/^[ \t]*php3_*/ {
- phpcommand=substr($1,6)
- phpvalue=tolower($2)
- print "<IfModule mod_php3.c>"
- print $0
- print "</IfModule>"
- print "<IfModule mod_php4.c>"
- if (phpvalue=="on") {
- print "php_admin_flag " phpcommand " on"
- } else if (phpvalue=="off") {
- print "php_admin_flag " phpcommand " off"
- } else {
- print "php_admin_value " phpcommand " " substr($0,index($0,$1)+length($1)+1)
- }
- print "</IfModule>"
-}
-
-! /^[ \t]*php3_*/ {
- print $0
-}
-
diff --git a/scripts/apache/htaccessfix.awk b/scripts/apache/htaccessfix.awk
deleted file mode 100644
index 3c784cd335..0000000000
--- a/scripts/apache/htaccessfix.awk
+++ /dev/null
@@ -1,23 +0,0 @@
-# $Id$
-
-/^[ \t]*php3_*/ {
- phpcommand=substr($1,6)
- phpvalue=tolower($2)
- print "<IfModule mod_php3.c>"
- print $0
- print "</IfModule>"
- print "<IfModule mod_php4.c>"
- if (phpvalue=="on") {
- print "php_flag " phpcommand " on"
- } else if (phpvalue=="off") {
- print "php_flag " phpcommand " off"
- } else {
- print "php_value " phpcommand " " substr($0,index($0,$1)+length($1)+1)
- }
- print "</IfModule>"
-}
-
-! /^[ \t]*php3_*/ {
- print $0
-}
-
diff --git a/scripts/dev/conv_proto b/scripts/dev/conv_proto
deleted file mode 100755
index fad9cfaa83..0000000000
--- a/scripts/dev/conv_proto
+++ /dev/null
@@ -1,30 +0,0 @@
-#! /bin/sh
-#
-# do some automatic conversion of prototypes
-#
-
-if test "$1" = "" ; then
- echo "usage: $0 list-of-files"
- exit 1
-fi
-
-tmpfile=`mktemp -q /tmp/asd.XXXXXX`
-
-if test "$?" != "0" ; then
- echo "$0: cannot create temporary file"
- exit 1
-fi
-
-for file in ${1+"$@"} ; do
- echo "working on $file"
- cat $file | \
- sed -e \
- 's/void php3_\(.*\)(INTERNAL_FUNCTION_PARAMETERS)/PHP_FUNCTION(\1)/' \
- -e 's/^extern void /void /' \
- -e 's/^extern PHP_FUNCTION/PHP_FUNCTION/' > $tmpfile
- cp $tmpfile $file
-done
-
-rm -f $tmpfile
-
-exit 0
diff --git a/scripts/dev/conv_z_macros b/scripts/dev/conv_z_macros
deleted file mode 100755
index b4e3ac98a5..0000000000
--- a/scripts/dev/conv_z_macros
+++ /dev/null
@@ -1,61 +0,0 @@
-#! /bin/sh
-#
-# +----------------------------------------------------------------------+
-# | PHP Version 5 |
-# +----------------------------------------------------------------------+
-# | Copyright (c) 1997-2004 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: Sascha Schumann <sascha@schumann.cx> |
-# +----------------------------------------------------------------------+
-#
-# $Id$
-
-for i in $@; do
- echo -n "Processing $i... "
- sed \
- -e 's/(\*\([^()]\+\))->type/Z_TYPE_PP(\1)/g' \
- -e 's/\([a-z_][]a-z_0-9\[]*\)->type/Z_TYPE_P(\1)/g' \
- -e 's/\([a-z_][]a-z_0-9\[]*\)\.type/Z_TYPE(\1)/g' \
- -e 's/(\*\([^()]\+\))->value\.dval/Z_DVAL_PP(\1)/g' \
- -e 's/\([a-z_][]a-z_0-9\[]*\)->value\.dval/Z_DVAL_P(\1)/g' \
- -e 's/\([a-z_][]a-z_0-9\[]*\)\.value\.dval/Z_DVAL(\1)/g' \
- -e 's/(\*\([^()]\+\))->value\.lval/Z_LVAL_PP(\1)/g' \
- -e 's/\([a-z_][]a-z_0-9\[]*\)->value\.lval/Z_LVAL_P(\1)/g' \
- -e 's/\([a-z_][]a-z_0-9\[]*\)\.value\.lval/Z_LVAL(\1)/g' \
- -e 's/(\*\([^()]\+\))->value\.ht/Z_ARRVAL_PP(\1)/g' \
- -e 's/\([a-z_][]a-z_0-9\[]*\)->value\.ht/Z_ARRVAL_P(\1)/g' \
- -e 's/\([a-z_][]a-z_0-9\[]*\)\.value\.ht/Z_ARRVAL(\1)/g' \
- -e 's/(\*\([^()]\+\))->value\.str\.val/Z_STRVAL_PP(\1)/g' \
- -e 's/\([a-z_][]a-z_0-9\[]*\)->value\.str\.val/Z_STRVAL_P(\1)/g' \
- -e 's/\([a-z_][]a-z_0-9\[]*\)\.value\.str\.val/Z_STRVAL(\1)/g' \
- -e 's/(\*\([^()]\+\))->value\.str\.len/Z_STRLEN_PP(\1)/g' \
- -e 's/\([a-z_][]a-z_0-9\[]*\)->value\.str\.len/Z_STRLEN_P(\1)/g' \
- -e 's/\([a-z_][]a-z_0-9\[]*\)\.value\.str\.len/Z_STRLEN(\1)/g' \
- -e 's/(\*\([^()]\+\))->value\.obj\.properties/Z_OBJPROP_PP(\1)/g' \
- -e 's/\([a-z_][]a-z_0-9\[]*\)->value\.obj\.properties/Z_OBJPROP_P(\1)/g' \
- -e 's/\([a-z_][]a-z_0-9\[]*\)\.value\.obj\.properties/Z_OBJPROP(\1)/g' \
- -e 's/(\*\([^()]\+\))->value\.obj\.ce/Z_OBJCE_PP(\1)/g' \
- -e 's/\([a-z_][]a-z_0-9\[]*\)->value\.obj\.ce/Z_OBJCE_P(\1)/g' \
- -e 's/\([a-z_][]a-z_0-9\[]*\)\.value\.obj\.ce/Z_OBJCE(\1)/g' \
- -e 's/(\*\([^()]\+\))->value\.obj/Z_OBJ_PP(\1)/g' \
- -e 's/\([a-z_][]a-z_0-9\[]*\)->value\.obj/Z_OBJ_P(\1)/g' \
- -e 's/\([a-z_][]a-z_0-9\[]*\)\.value\.obj/Z_OBJ(\1)/g' \
- -e 's/\([a-zA-Z_][a-zA-Z_0-9]*\)->Z_\([A-Z_]\+\)(/Z_\2(\1->/g' \
- -e 's/\([a-zA-Z_][a-zA-Z_0-9]*\)->Z_\([A-Z_]\+\)(/Z_\2(\1->/g' \
- -e 's/\([a-zA-Z_][a-zA-Z_0-9]*\)->Z_\([A-Z_]\+\)(/Z_\2(\1->/g' \
- -e 's/\([a-zA-Z_][a-zA-Z_0-9]*\)\.Z_\([A-Z_]\+\)(/Z_\2(\1./g' \
- -e 's/\([a-zA-Z_][a-zA-Z_0-9]*\)\.Z_\([A-Z_]\+\)(/Z_\2(\1./g' \
- -e 's/\([a-zA-Z_][a-zA-Z_0-9]*\)\.Z_\([A-Z_]\+\)(/Z_\2(\1./g' \
- < $i > tmp && cp tmp $i
- echo "DONE"
-done
-
-rm -f tmp
diff --git a/scripts/dev/credits b/scripts/dev/credits
deleted file mode 100755
index 0ea312d509..0000000000
--- a/scripts/dev/credits
+++ /dev/null
@@ -1,26 +0,0 @@
-#!/bin/sh
-awkprog='
-BEGIN { FS = "\n"; RS = "" }
-{ print "CREDIT_LINE(\""$1"\", \""$2"\");" }'
-
-for what in ext sapi
-do
- file=ext/standard/credits_$what.h
- cat >$file <<END
-/*
- DO NOT EDIT THIS FILE!
-
- it has been automaticaly created by php5/scripts/credits from
- the information found in the various php5/ext/.../CREDITS and
- php5/sapi/.../CREDITS files
-
- if you want to change an entry you have to edit the appropriate
- CREDITS file instead
-
-*/
-
-END
- # Do not process skeleton #
- files=`find "$what" -name CREDITS | grep -v "$what"/skeleton/CREDITS`
- awk "$awkprog" $files | sort -f | uniq >> $file
-done
diff --git a/scripts/dev/extern_c.php b/scripts/dev/extern_c.php
deleted file mode 100644
index 72c7edcd32..0000000000
--- a/scripts/dev/extern_c.php
+++ /dev/null
@@ -1,45 +0,0 @@
-<?php
-
-function scan_dir($dir) {
- if (!is_dir($dir)) return;
-
- foreach (glob("$dir/*") as $file) {
- if (is_dir($file)) {
- if (basename($file) != "CVS") {
- scan_dir($file);
- }
- } else if (fnmatch("*.h", $file)) {
- scan_file($file);
- }
- }
-}
-
-function scan_file($file) {
- $flag = false;
-
- foreach (file($file) as $nr => $line) {
- if (ereg("^[[:space:]]*BEGIN_EXTERN_C", $line)) {
-# echo "$file:".($nr+1)." $line";
- $flag = true;
- } else if (ereg("^[[:space:]]*END_EXTERN_C", $line)) {
-# echo "$file:".($nr+1)." $line";
- $flag = false;
- } else if ( (ereg("^[[:space:]]*PHPAPI[[:space:]]*", $line))
- ||(ereg("^[[:space:]]*ZEND_API[[:space:]]*", $line))) {
- if (strstr($line,"(")) {
- if (!$flag) echo "$file:".($nr+1)." $line";
- }
- }
- }
-}
-
-array_shift($_SERVER["argv"]);
-
-if (count($_SERVER["argv"])) {
- foreach ($_SERVER["argv"] as $dir) {
- scan_dir($dir);
- }
-} else {
- scan_dir(".");
-}
-?> \ No newline at end of file
diff --git a/scripts/dev/search_underscores.php b/scripts/dev/search_underscores.php
deleted file mode 100755
index 038a013b5d..0000000000
--- a/scripts/dev/search_underscores.php
+++ /dev/null
@@ -1,97 +0,0 @@
-#! /usr/local/bin/php -n
-<?php
-
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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. |
- +----------------------------------------------------------------------+
- | Authors: Marcus Boerger <helly@php.net> |
- +----------------------------------------------------------------------+
- */
-
-/* This script lists extension-, class- and method names that contain any
- underscores. It omits magic names (e.g. anything that starts with two
- underscores but no more).
- */
-
-$cnt_modules = 0;
-$cnt_classes = 0;
-$cnt_methods = 0;
-$err = 0;
-
-$classes = array_merge(get_declared_classes(), get_declared_interfaces());
-
-$extensions = array();
-
-foreach(get_loaded_extensions() as $ext) {
- $cnt_modules++;
- if (strpos($ext, "_") !== false) {
- $err++;
- $extensions[$ext] = array();
- }
-}
-
-$cnt_classes = count($classes);
-
-foreach($classes as $c) {
- if (strpos($c, "_") !== false) {
- $err++;
- $ref = new ReflectionClass($c);
- if (!($ext = $ref->getExtensionName())) {;
- $ext = $ref->isInternal() ? "<internal>" : "<user>";
- }
- if (!array_key_exists($ext, $extensions)) {
- $extensions[$ext] = array();
- }
- $extensions[$ext][$c] = array();
- foreach(get_class_methods($c) as $method) {
- $cnt_methods++;
- if (strpos(substr($method, substr($method, 0, 2) != "__" ? 0 : 2), "_") !== false) {
- $err++;
- $extensions[$ext][$c][] = $method;
- }
- }
- }
- else
- {
- $cnt_methods += count(get_class_methods($c));
- }
-}
-
-$cnt = $cnt_modules + $cnt_classes + $cnt_methods;
-
-printf("\n");
-printf("Modules: %5d\n", $cnt_modules);
-printf("Classes: %5d\n", $cnt_classes);
-printf("Methods: %5d\n", $cnt_methods);
-printf("\n");
-printf("Names: %5d\n", $cnt);
-printf("Errors: %5d (%.1f%%)\n", $err, round($err * 100 / $cnt, 1));
-printf("\n");
-
-ksort($extensions);
-foreach($extensions as $ext => &$classes) {
- echo "Extension: $ext\n";
- ksort($classes);
- foreach($classes as $classname => &$methods) {
- echo " Class: $classname\n";
- ksort($methods);
- foreach($methods as $method) {
- echo " Method: $method\n";
- }
- }
-}
-
-printf("\n");
-
-?> \ No newline at end of file
diff --git a/scripts/php-config.in b/scripts/php-config.in
deleted file mode 100644
index abdab2ce0e..0000000000
--- a/scripts/php-config.in
+++ /dev/null
@@ -1,32 +0,0 @@
-#! /bin/sh
-
-prefix="@prefix@"
-version="@PHP_VERSION@"
-includedir="@includedir@/php"
-includes="-I$includedir -I$includedir/main -I$includedir/Zend"
-ldflags="@PHP_LDFLAGS@"
-libs="@EXTRA_LIBS@"
-if test '@TSRM_DIR@' != ''; then
- includes="$includes -I$includedir/TSRM"
-fi
-extension_dir='@EXTENSION_DIR@'
-
-case "$1" in
---prefix)
- echo $prefix;;
---includes)
- echo $includes;;
---ldflags)
- echo $ldflags;;
---libs)
- echo $libs;;
---extension-dir)
- echo $extension_dir;;
---version)
- echo $version;;
-*)
- echo "Usage: $0 [--prefix|--includes|--ldflags|--libs|--extension-dir|--version]"
- exit 1;;
-esac
-
-exit 0
diff --git a/scripts/phpextdist b/scripts/phpextdist
deleted file mode 100755
index 97df70020d..0000000000
--- a/scripts/phpextdist
+++ /dev/null
@@ -1,27 +0,0 @@
-#! /bin/sh
-if test $# -lt 2; then
- echo "usage: phpextdist <extension> <version>";
- exit 1
-fi
-
-phpize=`php-config --prefix`/bin/phpize
-distname="$1-$2"
-
-if test ! -f Makefile.in || test ! -f config.m4; then
- echo "Did not find required files in current directory"
- exit 1
-fi
-
-rm -rf modules *.lo *.o *.la config.status config.cache \
-config.log libtool php_config.h config_vars.mk Makefile
-
-myname=`basename \`pwd\``
-cd ..
-cp -rp $myname $distname
-cd $distname
-$phpize
-cd ..
-tar cf $distname.tar $distname
-rm -rf $distname $distname.tar.*
-gzip --best $distname.tar
-mv $distname.tar.gz $myname
diff --git a/scripts/phpize.in b/scripts/phpize.in
deleted file mode 100644
index bf972ac78d..0000000000
--- a/scripts/phpize.in
+++ /dev/null
@@ -1,157 +0,0 @@
-#!/bin/sh
-
-# Variable declaration
-prefix='@prefix@'
-phpdir="$prefix/lib/php/build"
-includedir="$prefix/include/php"
-builddir="`pwd`"
-
-FILES_BUILD="mkdep.awk scan_makefile_in.awk shtool"
-FILES="acinclude.m4 Makefile.global"
-CLEAN_FILES="$FILES *.lo *.la *.o .deps .libs/ build/ include/ modules/ install-sh \
- mkinstalldirs missing config.nice config.sub config.guess configure configure.in \
- aclocal.m4 config.h config.h.in conftest* ltmain.sh libtool config.cache \
- config.log config.status Makefile Makefile.fragments Makefile.objects confdefs.h"
-
-# function declaration
-phpize_usage()
-{
- echo "Usage: $0 [--clean|--help|--version|-v]"
-}
-
-phpize_no_configm4()
-{
- if test $@ -eq 1; then
- clean=" --clean"
- fi
-
- echo "Cannot find config.m4. "
- echo "Make sure that you run '$0$clean' in the top level source directory of the module"
- echo
-}
-
-phpize_clean()
-{
- echo "Cleaning.."
- for i in $CLEAN_FILES; do
- test -e $i && rm -rf $i
- done
-}
-
-phpize_check_configm4()
-{
- if test ! -r config.m4; then
- phpize_no_configm4 $@
- exit 1
- fi
-
-}
-
-phpize_get_api_numbers()
-{
- # extracting API NOs:
- PHP_API_VERSION=`egrep '#define PHP_API_VERSION' $includedir/main/php.h|sed 's/#define PHP_API_VERSION//'`
- ZEND_MODULE_API_NO=`egrep '#define ZEND_MODULE_API_NO' $includedir/Zend/zend_modules.h|sed 's/#define ZEND_MODULE_API_NO//'`
- ZEND_EXTENSION_API_NO=`egrep '#define ZEND_EXTENSION_API_NO' $includedir/Zend/zend_extensions.h|sed 's/#define ZEND_EXTENSION_API_NO//'`
-}
-
-phpize_print_api_numbers()
-{
- phpize_get_api_numbers
- echo "Configuring for:"
- echo "PHP Api Version: "$PHP_API_VERSION
- echo "Zend Module Api No: "$ZEND_MODULE_API_NO
- echo "Zend Extension Api No: "$ZEND_EXTENSION_API_NO
-}
-
-phpize_no_shtool()
-{
- echo <<EOF
-shtool at '$builddir/build/shtool' not executable.
-Make sure that the file exists and is executable and then rerun this script.
-
-EOF
-}
-
-phpize_check_shtool()
-{
- test -x "$builddir/build/shtool" || chmod +x "$builddir/build/shtool"
-
- if test ! -x "$builddir/build/shtool"; then
- phpize_no_shtool
- exit 1
- fi
-}
-
-
-phpize_copy_files()
-{
- test -d build || mkdir build
-
- (cd "$phpdir" && cp $FILES_BUILD "$builddir"/build)
- (cd "$phpdir" && cp $FILES "$builddir")
-}
-
-phpize_replace_prefix()
-{
- sed \
- -e "s#@prefix@#$prefix#" \
- < "$phpdir/phpize.m4" > configure.in
-}
-
-phpize_autotools()
-{
- aclocal || exit 1
- autoconf || exit 1
- autoheader || exit 1
-}
-
-phpize_libtoolize()
-{
- libtoolize=`$builddir/build/shtool path glibtoolize libtoolize`
- $libtoolize -f -c || exit 1
-}
-
-# Main script
-
-case "$1" in
- # Cleanup
- --clean)
- phpize_check_configm4 1
- phpize_clean
- exit 0
- ;;
-
- # Usage
- --help)
- phpize_usage
- exit 0
- ;;
-
- # Version
- --version|-v)
- phpize_print_api_numbers
- exit 0
- ;;
-
- # Default
- *)
- phpize_check_configm4 0
-
- phpize_print_api_numbers
-
- phpize_copy_files
-
- phpize_replace_prefix
-
- touch install-sh mkinstalldirs missing
-
- phpize_autotools
-
- phpize_check_shtool
-
- phpize_libtoolize
- ;;
-esac
-
-exit 0
diff --git a/scripts/phpize.m4 b/scripts/phpize.m4
deleted file mode 100644
index 8ed89ddf86..0000000000
--- a/scripts/phpize.m4
+++ /dev/null
@@ -1,116 +0,0 @@
-dnl This file becomes configure.in for self-contained extensions.
-
-AC_INIT(config.m4)
-
-AC_CANONICAL_HOST
-
-PHP_INIT_BUILD_SYSTEM
-
-AC_DEFUN(PHP_WITH_PHP_CONFIG,[
- AC_ARG_WITH(php-config,
-[ --with-php-config=PATH],[
- PHP_CONFIG=$withval
-],[
- PHP_CONFIG=php-config
-])
-
- prefix=`$PHP_CONFIG --prefix 2>/dev/null`
- INCLUDES=`$PHP_CONFIG --includes 2>/dev/null`
- EXTENSION_DIR=`$PHP_CONFIG --extension-dir`
-
- if test -z "$prefix"; then
- AC_MSG_ERROR(Cannot find php-config. Please use --with-php-config=PATH)
- fi
- AC_MSG_CHECKING(for PHP prefix)
- AC_MSG_RESULT($prefix)
- AC_MSG_CHECKING(for PHP includes)
- AC_MSG_RESULT($INCLUDES)
- AC_MSG_CHECKING(for PHP extension directory)
- AC_MSG_RESULT($EXTENSION_DIR)
-])
-dnl
-AC_DEFUN(PHP_EXT_BUILDDIR,[.])dnl
-AC_DEFUN(PHP_EXT_DIR,[""])dnl
-AC_DEFUN(PHP_EXT_SRCDIR,[$abs_srcdir])dnl
-AC_DEFUN(PHP_ALWAYS_SHARED,[
- ext_output="yes, shared"
- ext_shared=yes
- test "[$]$1" = "no" && $1=yes
-])dnl
-dnl
-abs_srcdir=`(cd $srcdir && pwd)`
-abs_builddir=`pwd`
-
-PHP_CONFIG_NICE(config.nice)
-
-AC_PROG_CC
-AC_PROG_CC_C_O
-
-PHP_RUNPATH_SWITCH
-PHP_SHLIB_SUFFIX_NAME
-PHP_WITH_PHP_CONFIG
-
-PHP_BUILD_SHARED
-
-AC_PREFIX_DEFAULT()
-
-PHP_PROG_RE2C
-AC_PROG_AWK
-
-sinclude(config.m4)
-
-enable_static=no
-enable_shared=yes
-
-AC_PROG_LIBTOOL
-
-all_targets='$(PHP_MODULES)'
-install_targets=install-modules
-phplibdir="`pwd`/modules"
-CPPFLAGS="$CPPFLAGS -DHAVE_CONFIG_H"
-CFLAGS_CLEAN='$(CFLAGS)'
-
-test "$prefix" = "NONE" && prefix="/usr/local"
-test "$exec_prefix" = "NONE" && exec_prefix='$(prefix)'
-
-PHP_SUBST(PHP_MODULES)
-PHP_SUBST(all_targets)
-PHP_SUBST(install_targets)
-
-PHP_SUBST(prefix)
-PHP_SUBST(exec_prefix)
-PHP_SUBST(libdir)
-PHP_SUBST(prefix)
-PHP_SUBST(phplibdir)
-
-PHP_SUBST(PHP_COMPILE)
-PHP_SUBST(CC)
-PHP_SUBST(CFLAGS)
-PHP_SUBST(CFLAGS_CLEAN)
-PHP_SUBST(CPP)
-PHP_SUBST(CPPFLAGS)
-PHP_SUBST(CXX)
-PHP_SUBST(DEFS)
-PHP_SUBST(EXTENSION_DIR)
-PHP_SUBST(EXTRA_LDFLAGS)
-PHP_SUBST(EXTRA_LIBS)
-PHP_SUBST(INCLUDES)
-PHP_SUBST(LEX)
-PHP_SUBST(LEX_OUTPUT_ROOT)
-PHP_SUBST(LFLAGS)
-PHP_SUBST(LDFLAGS)
-PHP_SUBST(SHARED_LIBTOOL)
-PHP_SUBST(LIBTOOL)
-PHP_SUBST(SHELL)
-PHP_SUBST(AWK)
-PHP_SUBST(RE2C)
-
-PHP_GEN_BUILD_DIRS
-PHP_GEN_GLOBAL_MAKEFILE
-
-test -d modules || mkdir modules
-touch .deps
-
-AC_CONFIG_HEADER(config.h)
-
-AC_OUTPUT()
diff --git a/snapshot b/snapshot
deleted file mode 100755
index f8e13ef9d9..0000000000
--- a/snapshot
+++ /dev/null
@@ -1,7 +0,0 @@
-#! /bin/sh
-
-if test -n "$1"; then
- flags="DISTNAME=$1"
-fi
-
-${MAKE:-make} $flags -f build/build.mk snapshot
diff --git a/stamp-h.in b/stamp-h.in
deleted file mode 100644
index 9788f70238..0000000000
--- a/stamp-h.in
+++ /dev/null
@@ -1 +0,0 @@
-timestamp
diff --git a/stub.c b/stub.c
deleted file mode 100644
index 8b13789179..0000000000
--- a/stub.c
+++ /dev/null
@@ -1 +0,0 @@
-
diff --git a/tests/basic/001.phpt b/tests/basic/001.phpt
deleted file mode 100644
index d0cc1ca082..0000000000
--- a/tests/basic/001.phpt
+++ /dev/null
@@ -1,6 +0,0 @@
---TEST--
-Trivial "Hello World" test
---FILE--
-<?php echo "Hello World"?>
---EXPECT--
-Hello World
diff --git a/tests/basic/002.phpt b/tests/basic/002.phpt
deleted file mode 100644
index e9330c8bf9..0000000000
--- a/tests/basic/002.phpt
+++ /dev/null
@@ -1,11 +0,0 @@
---TEST--
-Simple POST Method test
---SKIPIF--
-<?php if (php_sapi_name()=='cli') echo 'skip'; ?>
---POST--
-a=Hello+World
---FILE--
-<?php
-echo $_POST['a']; ?>
---EXPECT--
-Hello World
diff --git a/tests/basic/003.phpt b/tests/basic/003.phpt
deleted file mode 100644
index ae6603f448..0000000000
--- a/tests/basic/003.phpt
+++ /dev/null
@@ -1,14 +0,0 @@
---TEST--
-GET and POST Method combined
---SKIPIF--
-<?php if (php_sapi_name()=='cli') echo 'skip'; ?>
---POST--
-a=Hello+World
---GET--
-b=Hello+Again+World&c=Hi+Mom
---FILE--
-<?php
-error_reporting(0);
-echo "post-a=({$_POST['a']}) get-b=({$_GET['b']}) get-c=({$_GET['c']})"?>
---EXPECT--
-post-a=(Hello World) get-b=(Hello Again World) get-c=(Hi Mom)
diff --git a/tests/basic/004.phpt b/tests/basic/004.phpt
deleted file mode 100644
index 86bf431860..0000000000
--- a/tests/basic/004.phpt
+++ /dev/null
@@ -1,12 +0,0 @@
---TEST--
-Two variables in POST data
---SKIPIF--
-<?php if (php_sapi_name()=='cli') echo 'skip'; ?>
---POST--
-a=Hello+World&b=Hello+Again+World
---FILE--
-<?php
-error_reporting(0);
-echo "{$_POST['a']} {$_POST['b']}" ?>
---EXPECT--
-Hello World Hello Again World
diff --git a/tests/basic/005.phpt b/tests/basic/005.phpt
deleted file mode 100644
index aa1d199825..0000000000
--- a/tests/basic/005.phpt
+++ /dev/null
@@ -1,12 +0,0 @@
---TEST--
-Three variables in POST data
---SKIPIF--
-<?php if (php_sapi_name()=='cli') echo 'skip'; ?>
---POST--
-a=Hello+World&b=Hello+Again+World&c=1
---FILE--
-<?php
-error_reporting(0);
-echo "{$_POST['a']} {$_POST['b']} {$_POST['c']}"?>
---EXPECT--
-Hello World Hello Again World 1
diff --git a/tests/basic/006.phpt b/tests/basic/006.phpt
deleted file mode 100644
index c614cd9619..0000000000
--- a/tests/basic/006.phpt
+++ /dev/null
@@ -1,6 +0,0 @@
---TEST--
-Add 3 variables together and print result
---FILE--
-<?php $a=1; $b=2; $c=3; $d=$a+$b+$c; echo $d?>
---EXPECT--
-6
diff --git a/tests/basic/007.phpt b/tests/basic/007.phpt
deleted file mode 100644
index dc808b73b6..0000000000
--- a/tests/basic/007.phpt
+++ /dev/null
@@ -1,6 +0,0 @@
---TEST--
-Multiply 3 variables and print result
---FILE--
-<?php $a=2; $b=4; $c=8; $d=$a*$b*$c; echo $d?>
---EXPECT--
-64
diff --git a/tests/basic/008.phpt b/tests/basic/008.phpt
deleted file mode 100644
index 511aef0df4..0000000000
--- a/tests/basic/008.phpt
+++ /dev/null
@@ -1,6 +0,0 @@
---TEST--
-Divide 3 variables and print result
---FILE--
-<?php $a=27; $b=3; $c=3; $d=$a/$b/$c; echo $d?>
---EXPECT--
-3
diff --git a/tests/basic/009.phpt b/tests/basic/009.phpt
deleted file mode 100644
index fefe529af1..0000000000
--- a/tests/basic/009.phpt
+++ /dev/null
@@ -1,6 +0,0 @@
---TEST--
-Subtract 3 variables and print result
---FILE--
-<?php $a=27; $b=7; $c=10; $d=$a-$b-$c; echo $d?>
---EXPECT--
-10
diff --git a/tests/basic/010.phpt b/tests/basic/010.phpt
deleted file mode 100644
index 9cdfece9e1..0000000000
--- a/tests/basic/010.phpt
+++ /dev/null
@@ -1,6 +0,0 @@
---TEST--
-Testing | and & operators
---FILE--
-<?php $a=8; $b=4; $c=8; echo $a|$b&$c?>
---EXPECT--
-8
diff --git a/tests/basic/011.phpt b/tests/basic/011.phpt
deleted file mode 100644
index 34eed7915a..0000000000
--- a/tests/basic/011.phpt
+++ /dev/null
@@ -1,27 +0,0 @@
---TEST--
-Testing $argc and $argv handling (GET)
---SKIPIF--
-<?php if (php_sapi_name()=='cli') echo 'skip'; ?>
---INI--
-register_argc_argv=1
---GET--
-ab+cd+ef+123+test
---FILE--
-<?php
-
-if (!ini_get('register_globals')) {
- $argc = $_SERVER['argc'];
- $argv = $_SERVER['argv'];
-}
-
-for ($i=0; $i<$argc; $i++) {
- echo "$i: ".$argv[$i]."\n";
-}
-
-?>
---EXPECT--
-0: ab
-1: cd
-2: ef
-3: 123
-4: test
diff --git a/tests/basic/012.phpt b/tests/basic/012.phpt
deleted file mode 100644
index 3297853286..0000000000
--- a/tests/basic/012.phpt
+++ /dev/null
@@ -1,28 +0,0 @@
---TEST--
-Testing $argc and $argv handling (cli)
---SKIPIF--
-<?php if(php_sapi_name()!='cli') echo 'skip'; ?>
---INI--
-register_argc_argv=1
-variables_order=GPS
---ARGS--
-ab cd ef 123 test
---FILE--
-<?php
-
-if (!ini_get('register_globals')) {
- $argc = $_SERVER['argc'];
- $argv = $_SERVER['argv'];
-}
-
-for ($i=1; $i<$argc; $i++) {
- echo ($i-1).": ".$argv[$i]."\n";
-}
-
-?>
---EXPECT--
-0: ab
-1: cd
-2: ef
-3: 123
-4: test
diff --git a/tests/basic/bug20539.phpt b/tests/basic/bug20539.phpt
deleted file mode 100644
index 6352960991..0000000000
--- a/tests/basic/bug20539.phpt
+++ /dev/null
@@ -1,10 +0,0 @@
---TEST--
-Bug #20539 (PHP CLI Segmentation Fault)
---INI--
-session.auto_start=1
---FILE--
-<?php
- print "good :)\n";
-?>
---EXPECT--
-good :)
diff --git a/tests/bin-info.inc b/tests/bin-info.inc
deleted file mode 100644
index ad42ea897a..0000000000
--- a/tests/bin-info.inc
+++ /dev/null
@@ -1,21 +0,0 @@
-<?php
-// Used to print php binary info used to run
-// test scripts.
-// Called from run-tests.php
-
-function dowrite($str)
-{
- global $term_bold, $term_norm;
- $str = str_replace("%b", $term_bold, $str);
- $str = str_replace("%B", $term_norm, $str);
- print $str;
-}
-
-function dowriteln($str)
-{
- dowrite("$str\n");
-}
-
-dowriteln("PHP SAPI: ".PHP_SAPI);
-dowriteln("PHP Version: ".PHP_VERSION);
-?> \ No newline at end of file
diff --git a/tests/classes/__call_001.phpt b/tests/classes/__call_001.phpt
deleted file mode 100644
index f9708e04f1..0000000000
--- a/tests/classes/__call_001.phpt
+++ /dev/null
@@ -1,42 +0,0 @@
---TEST--
-ZE2 __call()
---SKIPIF--
-<?php if (version_compare(zend_version(), '2.0.0-dev', '<')) die('skip ZendEngine 2 needed'); ?>
---FILE--
-<?php
-
-class Caller {
- public $x = array(1, 2, 3);
-
- function __call($m, $a) {
- echo "Method $m called:\n";
- var_dump($a);
- return $this->x;
- }
-}
-
-$foo = new Caller();
-$a = $foo->test(1, '2', 3.4, true);
-var_dump($a);
-
-?>
---EXPECT--
-Method test called:
-array(4) {
- [0]=>
- int(1)
- [1]=>
- string(1) "2"
- [2]=>
- float(3.4)
- [3]=>
- bool(true)
-}
-array(3) {
- [0]=>
- int(1)
- [1]=>
- int(2)
- [2]=>
- int(3)
-}
diff --git a/tests/classes/__call_002.phpt b/tests/classes/__call_002.phpt
deleted file mode 100755
index 53a179f787..0000000000
--- a/tests/classes/__call_002.phpt
+++ /dev/null
@@ -1,15 +0,0 @@
---TEST--
-ZE2 __call() signature check
---SKIPIF--
-<?php if (version_compare(zend_version(), '2.0.0-dev', '<')) die('skip ZendEngine 2 needed'); ?>
---FILE--
-<?php
-
-class Test {
- function __call() {
- }
-}
-
-?>
---EXPECTF--
-Fatal error: Method Test::__call() must take exactly 2 arguments in %s__call_002.php on line %d
diff --git a/tests/classes/__set__get_001.phpt b/tests/classes/__set__get_001.phpt
deleted file mode 100644
index beb688c222..0000000000
--- a/tests/classes/__set__get_001.phpt
+++ /dev/null
@@ -1,72 +0,0 @@
---TEST--
-ZE2 __set() and __get()
---SKIPIF--
-<?php if (version_compare(zend_version(), '2.0.0-dev', '<')) die('skip ZendEngine 2 needed'); ?>
---FILE--
-<?php
-class setter {
- public $n;
- public $x = array('a' => 1, 'b' => 2, 'c' => 3);
-
- function __get($nm) {
- echo "Getting [$nm]\n";
-
- if (isset($this->x[$nm])) {
- $r = $this->x[$nm];
- echo "Returning: $r\n";
- return $r;
- }
- else {
- echo "Nothing!\n";
- }
- }
-
- function __set($nm, $val) {
- echo "Setting [$nm] to $val\n";
-
- if (isset($this->x[$nm])) {
- $this->x[$nm] = $val;
- echo "OK!\n";
- }
- else {
- echo "Not OK!\n";
- }
- }
-}
-
-$foo = new Setter();
-
-// this doesn't go through __set()... should it?
-$foo->n = 1;
-
-// the rest are fine...
-$foo->a = 100;
-$foo->a++;
-$foo->z++;
-var_dump($foo);
-
-?>
---EXPECTF--
-Setting [a] to 100
-OK!
-Getting [a]
-Returning: 100
-Setting [a] to 101
-OK!
-Getting [z]
-Nothing!
-Setting [z] to 1
-Not OK!
-object(setter)#%d (2) {
- ["n"]=>
- int(1)
- ["x"]=>
- array(3) {
- ["a"]=>
- int(101)
- ["b"]=>
- int(2)
- ["c"]=>
- int(3)
- }
-}
diff --git a/tests/classes/__set__get_002.phpt b/tests/classes/__set__get_002.phpt
deleted file mode 100755
index 71111ccdf8..0000000000
--- a/tests/classes/__set__get_002.phpt
+++ /dev/null
@@ -1,14 +0,0 @@
---TEST--
-ZE2 __get() signature check
---SKIPIF--
-<?php if (version_compare(zend_version(), '2.0.0-dev', '<')) die('skip ZendEngine 2 needed'); ?>
---FILE--
-<?php
-class Test {
- function __get($x,$y) {
- }
-}
-
-?>
---EXPECTF--
-Fatal error: Method Test::__get() must take exactly 1 argument in %s__set__get_002.php on line %d
diff --git a/tests/classes/__set__get_003.phpt b/tests/classes/__set__get_003.phpt
deleted file mode 100755
index 390d303362..0000000000
--- a/tests/classes/__set__get_003.phpt
+++ /dev/null
@@ -1,14 +0,0 @@
---TEST--
-ZE2 __set() signature check
---SKIPIF--
-<?php if (version_compare(zend_version(), '2.0.0-dev', '<')) die('skip ZendEngine 2 needed'); ?>
---FILE--
-<?php
-class Test {
- function __set() {
- }
-}
-
-?>
---EXPECTF--
-Fatal error: Method Test::__set() must take exactly 2 arguments in %s__set__get_003.php on line %d
diff --git a/tests/classes/__set_data_corrupt.phpt b/tests/classes/__set_data_corrupt.phpt
deleted file mode 100644
index 86c39243d5..0000000000
--- a/tests/classes/__set_data_corrupt.phpt
+++ /dev/null
@@ -1,29 +0,0 @@
---TEST--
-Data corruption in __set
---SKIPIF--
-<?php if (version_compare(zend_version(), '2.0.0-dev', '<')) die('skip ZendEngine 2 is needed'); ?>
---FILE--
-<?php
-$f = 'c="foo"';
-class foo {
- const foobar=1;
- public $pp = array('t'=>null);
-
- function bar() {
- echo $this->t ='f';
- }
- function __get($prop)
- {
- return $this->pp[$prop];
- }
- function __set($prop, $val)
- {
- echo "__set";
- $this->pp[$prop] = '';
- }
-}
-$f = new foo;
-$f->bar();
-?>
---EXPECT--
-__setf
diff --git a/tests/classes/abstract.phpt b/tests/classes/abstract.phpt
deleted file mode 100644
index fbebf4da73..0000000000
--- a/tests/classes/abstract.phpt
+++ /dev/null
@@ -1,30 +0,0 @@
---TEST--
-ZE2 An abstract method may not be called
---SKIPIF--
-<?php if (version_compare(zend_version(), '2.0.0-dev', '<')) die('skip ZendEngine 2 needed'); ?>
---FILE--
-<?php
-
-abstract class fail {
- abstract function show();
-}
-
-class pass extends fail {
- function show() {
- echo "Call to function show()\n";
- }
- function error() {
- parent::show();
- }
-}
-
-$t = new pass();
-$t->show();
-$t->error();
-
-echo "Done\n"; // shouldn't be displayed
-?>
---EXPECTF--
-Call to function show()
-
-Fatal error: Cannot call abstract method fail::show() in %s on line %d
diff --git a/tests/classes/abstract_class.phpt b/tests/classes/abstract_class.phpt
deleted file mode 100644
index 571a9b9581..0000000000
--- a/tests/classes/abstract_class.phpt
+++ /dev/null
@@ -1,29 +0,0 @@
---TEST--
-ZE2 An abstract class cannot be instantiated
---SKIPIF--
-<?php if (version_compare(zend_version(), '2.0.0-dev', '<')) die('skip ZendEngine 2 needed'); ?>
---FILE--
-<?php
-
-abstract class fail {
- abstract function show();
-}
-
-class pass extends fail {
- function show() {
- echo "Call to function show()\n";
- }
-}
-
-$t2 = new pass();
-$t2->show();
-
-$t = new fail();
-$t->show();
-
-echo "Done\n"; // shouldn't be displayed
-?>
---EXPECTF--
-Call to function show()
-
-Fatal error: Cannot instantiate abstract class fail in %s on line %d
diff --git a/tests/classes/abstract_derived.phpt b/tests/classes/abstract_derived.phpt
deleted file mode 100644
index 81cb3341ec..0000000000
--- a/tests/classes/abstract_derived.phpt
+++ /dev/null
@@ -1,20 +0,0 @@
---TEST--
-ZE2 A derived class with an abstract method must be abstract
---SKIPIF--
-<?php if (version_compare(zend_version(), '2.0.0-dev', '<')) die('skip ZendEngine 2 needed'); ?>
---FILE--
-<?php
-
-class base {
-}
-
-class derived extends base {
- abstract function show();
-}
-
-?>
-===DONE===
-<?php exit(0); ?>
---EXPECTF--
-
-Fatal error: Class derived contains 1 abstract methods and must therefore be declared abstract (derived::show) in %sabstract_derived.php on line %d
diff --git a/tests/classes/abstract_final.phpt b/tests/classes/abstract_final.phpt
deleted file mode 100644
index 20c7ae375f..0000000000
--- a/tests/classes/abstract_final.phpt
+++ /dev/null
@@ -1,16 +0,0 @@
---TEST--
-ZE2 A final method cannot be abstract
---SKIPIF--
-<?php if (version_compare(zend_version(), '2.0.0-dev', '<')) die('skip ZendEngine 2 needed'); ?>
---FILE--
-<?php
-
-class fail {
- abstract final function show();
-}
-
-echo "Done\n"; // Shouldn't be displayed
-?>
---EXPECTF--
-
-Fatal error: Cannot use the final modifier on an abstract class member in %s on line %d
diff --git a/tests/classes/abstract_inherit.phpt b/tests/classes/abstract_inherit.phpt
deleted file mode 100644
index 362ccb0b76..0000000000
--- a/tests/classes/abstract_inherit.phpt
+++ /dev/null
@@ -1,22 +0,0 @@
---TEST--
-ZE2 A class that inherits an abstract method is abstract
---SKIPIF--
-<?php if (version_compare(zend_version(), '2.0.0-dev', '<')) die('skip ZendEngine 2 needed'); ?>
---FILE--
-<?php
-
-abstract class pass {
- abstract function show();
-}
-
-abstract class fail extends pass {
-}
-
-$t = new fail();
-$t = new pass();
-
-echo "Done\n"; // Shouldn't be displayed
-?>
---EXPECTF--
-
-Fatal error: Cannot instantiate abstract class fail in %s on line %d
diff --git a/tests/classes/abstract_not_declared.phpt b/tests/classes/abstract_not_declared.phpt
deleted file mode 100644
index 96c98857e3..0000000000
--- a/tests/classes/abstract_not_declared.phpt
+++ /dev/null
@@ -1,15 +0,0 @@
---TEST--
-ZE2 An abstract class must be declared abstract
---SKIPIF--
-<?php if (version_compare(zend_version(), '2.0.0-dev', '<')) die('skip ZendEngine 2 needed'); ?>
---FILE--
-<?php
-
-class fail {
- abstract function show();
-}
-
-echo "Done\n"; // shouldn't be displayed
-?>
---EXPECTF--
-Fatal error: Class fail contains 1 abstract methods and must therefore be declared abstract (fail::show) in %s on line %d
diff --git a/tests/classes/abstract_redeclare.phpt b/tests/classes/abstract_redeclare.phpt
deleted file mode 100644
index 716dd17fd1..0000000000
--- a/tests/classes/abstract_redeclare.phpt
+++ /dev/null
@@ -1,22 +0,0 @@
---TEST--
-ZE2 A method cannot be redeclared abstract
---SKIPIF--
-<?php if (version_compare(zend_version(), '2.0.0-dev', '<')) die('skip ZendEngine 2 needed'); ?>
---FILE--
-<?php
-
-class pass {
- function show() {
- echo "Call to function show()\n";
- }
-}
-
-class fail extends pass {
- abstract function show();
-}
-
-echo "Done\n"; // Shouldn't be displayed
-?>
---EXPECTF--
-
-Fatal error: Class fail contains 1 abstract methods and must therefore be declared abstract (fail::show) in %sabstract_redeclare.php on line %d
diff --git a/tests/classes/abstract_static.phpt b/tests/classes/abstract_static.phpt
deleted file mode 100644
index 2e46e9dc06..0000000000
--- a/tests/classes/abstract_static.phpt
+++ /dev/null
@@ -1,26 +0,0 @@
---TEST--
-ZE2 A static abstrcat method may not be called
---SKIPIF--
-<?php if (version_compare(zend_version(), '2.0.0-dev', '<')) die('skip ZendEngine 2 needed'); ?>
---FILE--
-<?php
-
-abstract class fail {
- abstract static function show();
-}
-
-class pass extends fail {
- static function show() {
- echo "Call to function show()\n";
- }
-}
-
-pass::show();
-fail::show();
-
-echo "Done\n"; // shouldn't be displayed
-?>
---EXPECTF--
-Call to function show()
-
-Fatal error: Cannot call abstract method fail::show() in %s on line %d
diff --git a/tests/classes/array_access_001.phpt b/tests/classes/array_access_001.phpt
deleted file mode 100644
index 8a670c1c24..0000000000
--- a/tests/classes/array_access_001.phpt
+++ /dev/null
@@ -1,198 +0,0 @@
---TEST--
-ZE2 ArrayAccess
---SKIPIF--
-<?php
- if (!class_exists('ArrayAccess')) die('skip ArrayAccess not present');
-?>
---FILE--
-<?php
-class object implements ArrayAccess {
-
- public $a = array('1st', 1, 2=>'3rd', '4th'=>4);
-
- function offsetExists($index) {
- echo __METHOD__ . "($index)\n";
- return array_key_exists($index, $this->a);
- }
- function offsetGet($index) {
- echo __METHOD__ . "($index)\n";
- return $this->a[$index];
- }
- function offsetSet($index, $newval) {
- echo __METHOD__ . "($index,$newval)\n";
- return $this->a[$index] = $newval;
- }
- function offsetUnset($index) {
- echo __METHOD__ . "($index)\n";
- unset($this->a[$index]);
- }
-}
-
-$obj = new Object;
-
-var_dump($obj->a);
-
-echo "===EMPTY===\n";
-var_dump(empty($obj[0]));
-var_dump(empty($obj[1]));
-var_dump(empty($obj[2]));
-var_dump(empty($obj['4th']));
-var_dump(empty($obj['5th']));
-var_dump(empty($obj[6]));
-
-echo "===isset===\n";
-var_dump(isset($obj[0]));
-var_dump(isset($obj[1]));
-var_dump(isset($obj[2]));
-var_dump(isset($obj['4th']));
-var_dump(isset($obj['5th']));
-var_dump(isset($obj[6]));
-
-echo "===offsetGet===\n";
-var_dump($obj[0]);
-var_dump($obj[1]);
-var_dump($obj[2]);
-var_dump($obj['4th']);
-var_dump($obj['5th']);
-var_dump($obj[6]);
-
-echo "===offsetSet===\n";
-echo "WRITE 1\n";
-$obj[1] = 'Changed 1';
-var_dump($obj[1]);
-echo "WRITE 2\n";
-$obj['4th'] = 'Changed 4th';
-var_dump($obj['4th']);
-echo "WRITE 3\n";
-$obj['5th'] = 'Added 5th';
-var_dump($obj['5th']);
-echo "WRITE 4\n";
-$obj[6] = 'Added 6';
-var_dump($obj[6]);
-
-var_dump($obj[0]);
-var_dump($obj[2]);
-
-$x = $obj[6] = 'changed 6';
-var_dump($obj[6]);
-var_dump($x);
-
-echo "===unset===\n";
-var_dump($obj->a);
-unset($obj[2]);
-unset($obj['4th']);
-unset($obj[7]);
-unset($obj['8th']);
-var_dump($obj->a);
-
-?>
-===DONE===
---EXPECTF--
-array(4) {
- [0]=>
- string(3) "1st"
- [1]=>
- int(1)
- [2]=>
- string(3) "3rd"
- ["4th"]=>
- int(4)
-}
-===EMPTY===
-object::offsetExists(0)
-bool(false)
-object::offsetExists(1)
-bool(false)
-object::offsetExists(2)
-bool(false)
-object::offsetExists(4th)
-bool(false)
-object::offsetExists(5th)
-bool(true)
-object::offsetExists(6)
-bool(true)
-===isset===
-object::offsetExists(0)
-bool(true)
-object::offsetExists(1)
-bool(true)
-object::offsetExists(2)
-bool(true)
-object::offsetExists(4th)
-bool(true)
-object::offsetExists(5th)
-bool(false)
-object::offsetExists(6)
-bool(false)
-===offsetGet===
-object::offsetGet(0)
-string(3) "1st"
-object::offsetGet(1)
-int(1)
-object::offsetGet(2)
-string(3) "3rd"
-object::offsetGet(4th)
-int(4)
-object::offsetGet(5th)
-
-Notice: Undefined index: 5th in %sarray_access_001.php on line %d
-NULL
-object::offsetGet(6)
-
-Notice: Undefined offset: 6 in %sarray_access_001.php on line %d
-NULL
-===offsetSet===
-WRITE 1
-object::offsetSet(1,Changed 1)
-object::offsetGet(1)
-string(9) "Changed 1"
-WRITE 2
-object::offsetSet(4th,Changed 4th)
-object::offsetGet(4th)
-string(11) "Changed 4th"
-WRITE 3
-object::offsetSet(5th,Added 5th)
-object::offsetGet(5th)
-string(9) "Added 5th"
-WRITE 4
-object::offsetSet(6,Added 6)
-object::offsetGet(6)
-string(7) "Added 6"
-object::offsetGet(0)
-string(3) "1st"
-object::offsetGet(2)
-string(3) "3rd"
-object::offsetSet(6,changed 6)
-object::offsetGet(6)
-string(9) "changed 6"
-string(9) "changed 6"
-===unset===
-array(6) {
- [0]=>
- string(3) "1st"
- [1]=>
- string(9) "Changed 1"
- [2]=>
- string(3) "3rd"
- ["4th"]=>
- string(11) "Changed 4th"
- ["5th"]=>
- string(9) "Added 5th"
- [6]=>
- string(9) "changed 6"
-}
-object::offsetUnset(2)
-object::offsetUnset(4th)
-object::offsetUnset(7)
-object::offsetUnset(8th)
-array(4) {
- [0]=>
- string(3) "1st"
- [1]=>
- string(9) "Changed 1"
- ["5th"]=>
- string(9) "Added 5th"
- [6]=>
- string(9) "changed 6"
-}
-===DONE===
diff --git a/tests/classes/array_access_002.phpt b/tests/classes/array_access_002.phpt
deleted file mode 100644
index 584227ee89..0000000000
--- a/tests/classes/array_access_002.phpt
+++ /dev/null
@@ -1,198 +0,0 @@
---TEST--
-ZE2 ArrayAccess::offsetSet without return
---SKIPIF--
-<?php
- if (!class_exists('ArrayAccess')) die('skip ArrayAccess not present');
-?>
---FILE--
-<?php
-class object implements ArrayAccess {
-
- public $a = array('1st', 1, 2=>'3rd', '4th'=>4);
-
- function offsetExists($index) {
- echo __METHOD__ . "($index)\n";
- return array_key_exists($index, $this->a);
- }
- function offsetGet($index) {
- echo __METHOD__ . "($index)\n";
- return $this->a[$index];
- }
- function offsetSet($index, $newval) {
- echo __METHOD__ . "($index,$newval)\n";
- /*return*/ $this->a[$index] = $newval;
- }
- function offsetUnset($index) {
- echo __METHOD__ . "($index)\n";
- unset($this->a[$index]);
- }
-}
-
-$obj = new Object;
-
-var_dump($obj->a);
-
-echo "===EMPTY===\n";
-var_dump(empty($obj[0]));
-var_dump(empty($obj[1]));
-var_dump(empty($obj[2]));
-var_dump(empty($obj['4th']));
-var_dump(empty($obj['5th']));
-var_dump(empty($obj[6]));
-
-echo "===isset===\n";
-var_dump(isset($obj[0]));
-var_dump(isset($obj[1]));
-var_dump(isset($obj[2]));
-var_dump(isset($obj['4th']));
-var_dump(isset($obj['5th']));
-var_dump(isset($obj[6]));
-
-echo "===offsetGet===\n";
-var_dump($obj[0]);
-var_dump($obj[1]);
-var_dump($obj[2]);
-var_dump($obj['4th']);
-var_dump($obj['5th']);
-var_dump($obj[6]);
-
-echo "===offsetSet===\n";
-echo "WRITE 1\n";
-$obj[1] = 'Changed 1';
-var_dump($obj[1]);
-echo "WRITE 2\n";
-$obj['4th'] = 'Changed 4th';
-var_dump($obj['4th']);
-echo "WRITE 3\n";
-$obj['5th'] = 'Added 5th';
-var_dump($obj['5th']);
-echo "WRITE 4\n";
-$obj[6] = 'Added 6';
-var_dump($obj[6]);
-
-var_dump($obj[0]);
-var_dump($obj[2]);
-
-$x = $obj[6] = 'changed 6';
-var_dump($obj[6]);
-var_dump($x);
-
-echo "===unset===\n";
-var_dump($obj->a);
-unset($obj[2]);
-unset($obj['4th']);
-unset($obj[7]);
-unset($obj['8th']);
-var_dump($obj->a);
-
-?>
-===DONE===
---EXPECTF--
-array(4) {
- [0]=>
- string(3) "1st"
- [1]=>
- int(1)
- [2]=>
- string(3) "3rd"
- ["4th"]=>
- int(4)
-}
-===EMPTY===
-object::offsetExists(0)
-bool(false)
-object::offsetExists(1)
-bool(false)
-object::offsetExists(2)
-bool(false)
-object::offsetExists(4th)
-bool(false)
-object::offsetExists(5th)
-bool(true)
-object::offsetExists(6)
-bool(true)
-===isset===
-object::offsetExists(0)
-bool(true)
-object::offsetExists(1)
-bool(true)
-object::offsetExists(2)
-bool(true)
-object::offsetExists(4th)
-bool(true)
-object::offsetExists(5th)
-bool(false)
-object::offsetExists(6)
-bool(false)
-===offsetGet===
-object::offsetGet(0)
-string(3) "1st"
-object::offsetGet(1)
-int(1)
-object::offsetGet(2)
-string(3) "3rd"
-object::offsetGet(4th)
-int(4)
-object::offsetGet(5th)
-
-Notice: Undefined index: 5th in %sarray_access_002.php on line %d
-NULL
-object::offsetGet(6)
-
-Notice: Undefined offset: 6 in %sarray_access_002.php on line %d
-NULL
-===offsetSet===
-WRITE 1
-object::offsetSet(1,Changed 1)
-object::offsetGet(1)
-string(9) "Changed 1"
-WRITE 2
-object::offsetSet(4th,Changed 4th)
-object::offsetGet(4th)
-string(11) "Changed 4th"
-WRITE 3
-object::offsetSet(5th,Added 5th)
-object::offsetGet(5th)
-string(9) "Added 5th"
-WRITE 4
-object::offsetSet(6,Added 6)
-object::offsetGet(6)
-string(7) "Added 6"
-object::offsetGet(0)
-string(3) "1st"
-object::offsetGet(2)
-string(3) "3rd"
-object::offsetSet(6,changed 6)
-object::offsetGet(6)
-string(9) "changed 6"
-string(9) "changed 6"
-===unset===
-array(6) {
- [0]=>
- string(3) "1st"
- [1]=>
- string(9) "Changed 1"
- [2]=>
- string(3) "3rd"
- ["4th"]=>
- string(11) "Changed 4th"
- ["5th"]=>
- string(9) "Added 5th"
- [6]=>
- string(9) "changed 6"
-}
-object::offsetUnset(2)
-object::offsetUnset(4th)
-object::offsetUnset(7)
-object::offsetUnset(8th)
-array(4) {
- [0]=>
- string(3) "1st"
- [1]=>
- string(9) "Changed 1"
- ["5th"]=>
- string(9) "Added 5th"
- [6]=>
- string(9) "changed 6"
-}
-===DONE===
diff --git a/tests/classes/array_access_003.phpt b/tests/classes/array_access_003.phpt
deleted file mode 100644
index 538ca07276..0000000000
--- a/tests/classes/array_access_003.phpt
+++ /dev/null
@@ -1,61 +0,0 @@
---TEST--
-ZE2 ArrayAccess::offsetGet ambiguties
---SKIPIF--
-<?php
- if (!class_exists('ArrayAccess')) die('skip ArrayAccess not present');
-?>
---FILE--
-<?php
-class object implements ArrayAccess {
-
- public $a = array('1st', 1, 2=>'3rd', '4th'=>4);
-
- function offsetExists($index) {
- echo __METHOD__ . "($index)\n";
- return array_key_exists($index, $this->a);
- }
- function &offsetGet($index) {
- echo __METHOD__ . "($index)\n";
- switch($index) {
- case 1:
- $a = 'foo';
- return $a . 'Bar';
- case 2:
- static $a=1;
- return $a;
- }
- return $this->a[$index];
- }
- function offsetSet($index, $newval) {
- echo __METHOD__ . "($index,$newval)\n";
- if ($index==3) {
- $this->cnt = $newval;
- }
- return $this->a[$index] = $newval;
- }
- function offsetUnset($index) {
- echo __METHOD__ . "($index)\n";
- unset($this->a[$index]);
- }
-}
-
-$obj = new Object;
-
-var_dump($obj[1]);
-var_dump($obj[2]);
-$obj[2]++;
-var_dump($obj[2]);
-
-?>
-===DONE===
---EXPECTF--
-object::offsetGet(1)
-
-Strict Standards: Only variable references should be returned by reference in %sarray_access_003.php on line %d
-string(6) "fooBar"
-object::offsetGet(2)
-int(1)
-object::offsetGet(2)
-object::offsetGet(2)
-int(2)
-===DONE===
diff --git a/tests/classes/array_access_004.phpt b/tests/classes/array_access_004.phpt
deleted file mode 100644
index eec6c80d30..0000000000
--- a/tests/classes/array_access_004.phpt
+++ /dev/null
@@ -1,58 +0,0 @@
---TEST--
-ZE2 ArrayAccess::offsetGet ambiguties
---SKIPIF--
-<?php
- if (!class_exists('ArrayAccess')) die('skip ArrayAccess not present');
-?>
---FILE--
-<?php
-class object implements ArrayAccess {
-
- public $a = array('1st', 1, 2=>'3rd', '4th'=>4);
-
- function offsetExists($index) {
- echo __METHOD__ . "($index)\n";
- return array_key_exists($index, $this->a);
- }
- function offsetGet($index) {
- echo __METHOD__ . "($index)\n";
- switch($index) {
- case 1:
- $a = 'foo';
- return $a . 'Bar';
- case 2:
- static $a=1;
- return $a;
- }
- return $this->a[$index];
- }
- function offsetSet($index, $newval) {
- echo __METHOD__ . "($index,$newval)\n";
- if ($index==3) {
- $this->cnt = $newval;
- }
- return $this->a[$index] = $newval;
- }
- function offsetUnset($index) {
- echo __METHOD__ . "($index)\n";
- unset($this->a[$index]);
- }
-}
-
-$obj = new Object;
-
-var_dump($obj[1]);
-var_dump($obj[2]);
-$obj[2]++;
-var_dump($obj[2]);
-
-?>
-===DONE===
---EXPECTF--
-object::offsetGet(1)
-string(6) "fooBar"
-object::offsetGet(2)
-int(1)
-object::offsetGet(2)
-
-Fatal error: Objects used as arrays in post/pre increment/decrement must return values by reference in %sarray_access_004.php on line %d
diff --git a/tests/classes/array_access_005.phpt b/tests/classes/array_access_005.phpt
deleted file mode 100755
index 5c6271d257..0000000000
--- a/tests/classes/array_access_005.phpt
+++ /dev/null
@@ -1,58 +0,0 @@
---TEST--
-ZE2 ArrayAccess and sub Arrays
---FILE--
-<?php
-
-class Peoples implements ArrayAccess {
- public $person;
-
- function __construct() {
- $this->person = array(array('name'=>'Joe'));
- }
-
- function offsetExists($index) {
- return array_key_exists($this->person, $index);
- }
-
- function &offsetGet($index) {
- return $this->person[$index];
- }
-
- function offsetSet($index, $value) {
- $this->person[$index] = $value;
- }
-
- function offsetUnset($index) {
- unset($this->person[$index]);
- }
-}
-
-$people = new Peoples;
-
-var_dump($people->person[0]['name']);
-$people->person[0]['name'] = $people->person[0]['name'] . 'Foo';
-var_dump($people->person[0]['name']);
-$people->person[0]['name'] .= 'Bar';
-var_dump($people->person[0]['name']);
-
-echo "---ArrayOverloading---\n";
-
-$people = new Peoples;
-
-var_dump($people[0]['name']);
-$people[0]['name'] = $people->person[0]['name'] . 'Foo';
-var_dump($people[0]['name']);
-$people[0]['name'] .= 'Bar';
-var_dump($people[0]['name']);
-
-echo "---Done---\n";
-?>
---EXPECT--
-string(3) "Joe"
-string(6) "JoeFoo"
-string(9) "JoeFooBar"
----ArrayOverloading---
-string(3) "Joe"
-string(6) "JoeFoo"
-string(9) "JoeFooBar"
----Done---
diff --git a/tests/classes/array_access_006.phpt b/tests/classes/array_access_006.phpt
deleted file mode 100644
index 342a7e5107..0000000000
--- a/tests/classes/array_access_006.phpt
+++ /dev/null
@@ -1,37 +0,0 @@
---TEST--
-ZE2 ArrayAccess and ASSIGN_OP operators (+=)
---FILE--
-<?php
-
-class OverloadedArray implements ArrayAccess {
- public $realArray;
-
- function __construct() {
- $this->realArray = array(1,2,3);
- }
-
- function offsetExists($index) {
- return array_key_exists($this->realArray, $index);
- }
-
- function offsetGet($index) {
- return $this->realArray[$index];
- }
-
- function offsetSet($index, $value) {
- $this->realArray[$index] = $value;
- }
-
- function offsetUnset($index) {
- unset($this->realArray[$index]);
- }
-}
-
-$a = new OverloadedArray;
-$a[1] += 10;
-var_dump($a[1]);
-echo "---Done---\n";
-?>
---EXPECT--
-int(12)
----Done---
diff --git a/tests/classes/array_access_007.phpt b/tests/classes/array_access_007.phpt
deleted file mode 100755
index 42187fe5d5..0000000000
--- a/tests/classes/array_access_007.phpt
+++ /dev/null
@@ -1,57 +0,0 @@
---TEST--
-ZE2 ArrayAccess and [] assignment
---FILE--
-<?php
-
-class OverloadedArray implements ArrayAccess {
- public $realArray;
-
- function __construct() {
- $this->realArray = array();
- }
-
- function offsetExists($index) {
- return array_key_exists($this->realArray, $index);
- }
-
- function offsetGet($index) {
- return $this->realArray[$index];
- }
-
- function offsetSet($index, $value) {
- if (is_null($index)) {
- $this->realArray[] = $value;
- } else {
- $this->realArray[$index] = $value;
- }
- }
-
- function offsetUnset($index) {
- unset($this->realArray[$index]);
- }
-
- function dump() {
- var_dump($this->realArray);
- }
-}
-
-$a = new OverloadedArray;
-$a[] = 1;
-$a[1] = 2;
-$a[2] = 3;
-$a[] = 4;
-$a->dump();
-?>
-===DONE===
---EXPECT--
-array(4) {
- [0]=>
- int(1)
- [1]=>
- int(2)
- [2]=>
- int(3)
- [3]=>
- int(4)
-}
-===DONE===
diff --git a/tests/classes/assign_op_property_001.phpt b/tests/classes/assign_op_property_001.phpt
deleted file mode 100644
index 54e519e8f6..0000000000
--- a/tests/classes/assign_op_property_001.phpt
+++ /dev/null
@@ -1,31 +0,0 @@
---TEST--
-ZE2 assign_op property of overloaded object
---FILE--
-<?php
-
-class Test {
- private $real_a = 2;
-
- function __set($property, $value) {
- if ($property = "a") {
- $this->real_a = $value;
- }
- }
-
- function __get($property) {
- if ($property = "a") {
- return $this->real_a;
- }
- }
-}
-
-$obj = new Test;
-var_dump($obj->a);
-$obj->a += 2;
-var_dump($obj->a);
-echo "---Done---\n";
-?>
---EXPECT--
-int(2)
-int(4)
----Done---
diff --git a/tests/classes/autoload_001.phpt b/tests/classes/autoload_001.phpt
deleted file mode 100755
index 6f325f49bb..0000000000
--- a/tests/classes/autoload_001.phpt
+++ /dev/null
@@ -1,24 +0,0 @@
---TEST--
-ZE2 Autoload and class_exists
---SKIPIF--
-<?php
- if (version_compare(zend_version(), '2.0.0-dev', '<')) die('skip ZendEngine 2 needed');
- if (class_exists('autoload_root', false)) die('skip Autoload test classes exist already');
-?>
---FILE--
-<?php
-
-function __autoload($class_name)
-{
- require_once(dirname(__FILE__) . '/' . $class_name . '.p5c');
- echo __FUNCTION__ . '(' . $class_name . ")\n";
-}
-
-var_dump(class_exists('autoload_root'));
-
-?>
-===DONE===
---EXPECT--
-__autoload(autoload_root)
-bool(true)
-===DONE===
diff --git a/tests/classes/autoload_002.phpt b/tests/classes/autoload_002.phpt
deleted file mode 100755
index 27dea0f9d4..0000000000
--- a/tests/classes/autoload_002.phpt
+++ /dev/null
@@ -1,27 +0,0 @@
---TEST--
-ZE2 Autoload and get_class_methods
---SKIPIF--
-<?php
- if (version_compare(zend_version(), '2.0.0-dev', '<')) die('skip ZendEngine 2 needed');
- if (class_exists('autoload_root', false)) die('skip Autoload test classes exist already');
-?>
---FILE--
-<?php
-
-function __autoload($class_name)
-{
- require_once(dirname(__FILE__) . '/' . $class_name . '.p5c');
- echo __FUNCTION__ . '(' . $class_name . ")\n";
-}
-
-var_dump(get_class_methods('autoload_root'));
-
-?>
-===DONE===
---EXPECT--
-__autoload(autoload_root)
-array(1) {
- [0]=>
- string(12) "testFunction"
-}
-===DONE===
diff --git a/tests/classes/autoload_003.phpt b/tests/classes/autoload_003.phpt
deleted file mode 100755
index 7bdb5da36a..0000000000
--- a/tests/classes/autoload_003.phpt
+++ /dev/null
@@ -1,25 +0,0 @@
---TEST--
-ZE2 Autoload and derived classes
---SKIPIF--
-<?php
- if (version_compare(zend_version(), '2.0.0-dev', '<')) die('skip ZendEngine 2 needed');
- if (class_exists('autoload_root', false)) die('skip Autoload test classes exist already');
-?>
---FILE--
-<?php
-
-function __autoload($class_name)
-{
- require_once(dirname(__FILE__) . '/' . $class_name . '.p5c');
- echo __FUNCTION__ . '(' . $class_name . ")\n";
-}
-
-var_dump(class_exists('autoload_derived'));
-
-?>
-===DONE===
---EXPECT--
-__autoload(autoload_root)
-__autoload(autoload_derived)
-bool(true)
-===DONE===
diff --git a/tests/classes/autoload_004.phpt b/tests/classes/autoload_004.phpt
deleted file mode 100755
index 23aea5d086..0000000000
--- a/tests/classes/autoload_004.phpt
+++ /dev/null
@@ -1,28 +0,0 @@
---TEST--
-ZE2 Autoload and recursion
---SKIPIF--
-<?php
- if (version_compare(zend_version(), '2.0.0-dev', '<')) die('skip ZendEngine 2 needed');
- if (class_exists('autoload_root', false)) die('skip Autoload test classes exist already');
-?>
---FILE--
-<?php
-
-function __autoload($class_name)
-{
- var_dump(class_exists($class_name));
- require_once(dirname(__FILE__) . '/' . $class_name . '.p5c');
- echo __FUNCTION__ . '(' . $class_name . ")\n";
-}
-
-var_dump(class_exists('autoload_derived'));
-
-?>
-===DONE===
---EXPECT--
-bool(false)
-bool(false)
-__autoload(autoload_root)
-__autoload(autoload_derived)
-bool(true)
-===DONE===
diff --git a/tests/classes/autoload_005.phpt b/tests/classes/autoload_005.phpt
deleted file mode 100755
index 36a4e18f0b..0000000000
--- a/tests/classes/autoload_005.phpt
+++ /dev/null
@@ -1,45 +0,0 @@
---TEST--
-ZE2 Autoload from destructor
---SKIPIF--
-<?php
- if (version_compare(zend_version(), '2.0.0-dev', '<')) die('skip ZendEngine 2 needed');
- if (class_exists('autoload_root', false)) die('skip Autoload test classes exist already');
-?>
---FILE--
-<?php
-
-function __autoload($class_name)
-{
- var_dump(class_exists($class_name, false));
- require_once(dirname(__FILE__) . '/' . $class_name . '.p5c');
- echo __FUNCTION__ . '(' . $class_name . ")\n";
-}
-
-var_dump(class_exists('autoload_derived', false));
-var_dump(class_exists('autoload_derived', false));
-
-class Test
-{
- function __destruct() {
- echo __METHOD__ . "\n";
- $o = new autoload_derived;
- var_dump($o);
- }
-}
-
-$o = new Test;
-unset($o);
-
-?>
-===DONE===
---EXPECTF--
-bool(false)
-bool(false)
-Test::__destruct
-bool(false)
-bool(false)
-__autoload(autoload_root)
-__autoload(autoload_derived)
-object(autoload_derived)#%d (0) {
-}
-===DONE===
diff --git a/tests/classes/autoload_derived.p5c b/tests/classes/autoload_derived.p5c
deleted file mode 100755
index 93a4b3579a..0000000000
--- a/tests/classes/autoload_derived.p5c
+++ /dev/null
@@ -1,6 +0,0 @@
-<?php
-
-class autoload_derived extends autoload_root {
-}
-
-?> \ No newline at end of file
diff --git a/tests/classes/autoload_root.p5c b/tests/classes/autoload_root.p5c
deleted file mode 100755
index 9559d36d32..0000000000
--- a/tests/classes/autoload_root.p5c
+++ /dev/null
@@ -1,10 +0,0 @@
-<?php
-
-class autoload_root {
- function testFunction()
- {
- return true;
- }
-}
-
-?> \ No newline at end of file
diff --git a/tests/classes/bug23951.phpt b/tests/classes/bug23951.phpt
deleted file mode 100644
index 2e272b87fe..0000000000
--- a/tests/classes/bug23951.phpt
+++ /dev/null
@@ -1,44 +0,0 @@
---TEST--
-Bug #23951 (Defines not working in inherited classes)
---FILE--
-<?php
-
-define('FOO1', 1);
-define('FOO2', 2);
-
-class A {
-
- public $a_var = array(FOO1=>'foo1_value', FOO2=>'foo2_value');
-
-}
-
-class B extends A {
-
- public $b_var = 'foo';
-
-}
-
-$a = new A;
-$b = new B;
-
-print_r($a);
-print_r($b->a_var);
-print_r($b->b_var);
-
-?>
---EXPECT--
-A Object
-(
- [a_var] => Array
- (
- [1] => foo1_value
- [2] => foo2_value
- )
-
-)
-Array
-(
- [1] => foo1_value
- [2] => foo2_value
-)
-foo
diff --git a/tests/classes/bug24399.phpt b/tests/classes/bug24399.phpt
deleted file mode 100644
index fedf8e5d24..0000000000
--- a/tests/classes/bug24399.phpt
+++ /dev/null
@@ -1,12 +0,0 @@
---TEST--
-Bug #24399 (is_subclass_of() crashes when parent class doesn't exist)
---FILE--
-<?php
-class dooh {
- public $blah;
-}
-$d = new dooh;
-var_dump(is_subclass_of($d, 'dooh'));
-?>
---EXPECT--
-bool(false)
diff --git a/tests/classes/bug24445.phpt b/tests/classes/bug24445.phpt
deleted file mode 100644
index af08307ac4..0000000000
--- a/tests/classes/bug24445.phpt
+++ /dev/null
@@ -1,12 +0,0 @@
---TEST--
-Bug #24445 (get_parent_class() returns the current class when passed an object)
---FILE--
-<?php
-class Test { }
-var_dump(get_parent_class('Test'));
-$t = new Test;
-var_dump(get_parent_class($t));
-?>
---EXPECT--
-bool(false)
-bool(false)
diff --git a/tests/classes/bug26737.phpt b/tests/classes/bug26737.phpt
deleted file mode 100644
index e190318ffd..0000000000
--- a/tests/classes/bug26737.phpt
+++ /dev/null
@@ -1,22 +0,0 @@
---TEST--
-Bug #26737 (Protected and private variables are not saved on serialization when a user defined __sleep is used)
---FILE--
-<?php
-class foo
-{
- private $private = 'private';
- protected $protected = 'protected';
- public $public = 'public';
-
- public function __sleep()
- {
- return array('private', 'protected', 'public', 'no_such');
- }
-}
-$foo = new foo();
-$data = serialize($foo);
-var_dump(str_replace("\0", '\0', $data));
-?>
---EXPECTF--
-Notice: serialize(): "no_such" returned as member variable from __sleep() but does not exist in %s on line %d
-string(130) "O:3:"foo":4:{s:12:"\0foo\0private";s:7:"private";s:12:"\0*\0protected";s:9:"protected";s:6:"public";s:6:"public";s:7:"no_such";N;}"
diff --git a/tests/classes/bug27468.phpt b/tests/classes/bug27468.phpt
deleted file mode 100644
index 971273224d..0000000000
--- a/tests/classes/bug27468.phpt
+++ /dev/null
@@ -1,15 +0,0 @@
---TEST--
-Bug #27468 (foreach in __destruct() causes segfault)
---FILE--
-<?php
-class foo {
- function __destruct() {
- foreach ($this->x as $x);
- }
-}
-new foo();
-echo 'OK';
-?>
---EXPECTF--
-Warning: Invalid argument supplied for foreach() in %sbug27468.php on line 4
-OK
diff --git a/tests/classes/bug27504.phpt b/tests/classes/bug27504.phpt
deleted file mode 100644
index 64d68ba8ae..0000000000
--- a/tests/classes/bug27504.phpt
+++ /dev/null
@@ -1,24 +0,0 @@
---TEST--
-Bug #27504 (call_user_func_array allows calling of private/protected methods)
---FILE--
-<?php
- class foo {
- function __construct () {
- $this->bar('1');
- }
- private function bar ( $param ) {
- echo 'Called function foo:bar('.$param.')'."\n";
- }
- }
-
- $foo = new foo();
-
- call_user_func_array( array( $foo , 'bar' ) , array( '2' ) );
-
- $foo->bar('3');
-?>
---EXPECTF--
-Called function foo:bar(%d)
-
-Fatal error: Call to private method foo::bar() from context '' in %s on line 13
-
diff --git a/tests/classes/class_abstract.phpt b/tests/classes/class_abstract.phpt
deleted file mode 100755
index 880f84930f..0000000000
--- a/tests/classes/class_abstract.phpt
+++ /dev/null
@@ -1,28 +0,0 @@
---TEST--
-ZE2 An abstract class cannot be instanciated
---SKIPIF--
-<?php if (version_compare(zend_version(), '2.0.0-dev', '<')) die('skip ZendEngine 2 needed'); ?>
---FILE--
-<?php
-
-abstract class base {
- function show() {
- echo "base\n";
- }
-}
-
-class derived extends base {
-}
-
-$t = new derived();
-$t->show();
-
-$t = new base();
-$t->show();
-
-echo "Done\n"; // shouldn't be displayed
-?>
---EXPECTF--
-base
-
-Fatal error: Cannot instantiate abstract class base in %s on line %d
diff --git a/tests/classes/class_example.phpt b/tests/classes/class_example.phpt
deleted file mode 100644
index 621958b1bd..0000000000
--- a/tests/classes/class_example.phpt
+++ /dev/null
@@ -1,85 +0,0 @@
---TEST--
-Classes general test
---FILE--
-
-<?php
-
-/* pretty nifty object oriented code! */
-
-class user {
- public $first_name,$family_name,$address,$phone_num;
- function display()
- {
- echo "User information\n";
- echo "----------------\n\n";
- echo "First name:\t ".$this->first_name."\n";
- echo "Family name:\t ".$this->family_name."\n";
- echo "Address:\t ".$this->address."\n";
- echo "Phone:\t\t ".$this->phone_num."\n";
- echo "\n\n";
- }
- function initialize($first_name,$family_name,$address,$phone_num)
- {
- $this->first_name = $first_name;
- $this->family_name = $family_name;
- $this->address = $address;
- $this->phone_num = $phone_num;
- }
-};
-
-
-function test($u)
-{ /* one can pass classes as arguments */
- $u->display();
- $t = $u;
- $t->address = "New address...";
- return $t; /* and also return them as return values */
-}
-
-$user1 = new user;
-$user2 = new user;
-
-$user1->initialize("Zeev","Suraski","Ben Gourion 3, Kiryat Bialik, Israel","+972-4-8713139");
-$user2->initialize("Andi","Gutmans","Haifa, Israel","+972-4-8231621");
-$user1->display();
-$user2->display();
-
-$tmp = test($user2);
-$tmp->display();
-
-?>
---EXPECT--
-User information
-----------------
-
-First name: Zeev
-Family name: Suraski
-Address: Ben Gourion 3, Kiryat Bialik, Israel
-Phone: +972-4-8713139
-
-
-User information
-----------------
-
-First name: Andi
-Family name: Gutmans
-Address: Haifa, Israel
-Phone: +972-4-8231621
-
-
-User information
-----------------
-
-First name: Andi
-Family name: Gutmans
-Address: Haifa, Israel
-Phone: +972-4-8231621
-
-
-User information
-----------------
-
-First name: Andi
-Family name: Gutmans
-Address: New address...
-Phone: +972-4-8231621
diff --git a/tests/classes/class_final.phpt b/tests/classes/class_final.phpt
deleted file mode 100755
index 5c73cb2556..0000000000
--- a/tests/classes/class_final.phpt
+++ /dev/null
@@ -1,22 +0,0 @@
---TEST--
-ZE2 A final class cannot be inherited
---SKIPIF--
-<?php if (version_compare(zend_version(), '2.0.0-dev', '<')) die('skip ZendEngine 2 needed'); ?>
---FILE--
-<?php
-
-final class base {
- function show() {
- echo "base\n";
- }
-}
-
-$t = new base();
-
-class derived extends base {
-}
-
-echo "Done\n"; // shouldn't be displayed
-?>
---EXPECTF--
-Fatal error: Class derived may not inherit from final class (base) in %s on line %d
diff --git a/tests/classes/class_stdclass.phpt b/tests/classes/class_stdclass.phpt
deleted file mode 100755
index 5e3422aeae..0000000000
--- a/tests/classes/class_stdclass.phpt
+++ /dev/null
@@ -1,14 +0,0 @@
---TEST--
-Instantiate stdClass
---FILE--
-<?php
-
-$obj = new stdClass;
-
-echo get_class($obj)."\n";
-
-echo "Done\n";
-?>
---EXPECTF--
-stdClass
-Done
diff --git a/tests/classes/clone_001.phpt b/tests/classes/clone_001.phpt
deleted file mode 100755
index eb06c1f520..0000000000
--- a/tests/classes/clone_001.phpt
+++ /dev/null
@@ -1,43 +0,0 @@
---TEST--
-ZE2 object cloning, 1
---SKIPIF--
-<?php if (version_compare(zend_version(), '2.0.0-dev', '<')) die('skip ZendEngine 2 needed'); ?>
---FILE--
-<?php
-class test {
- public $p1 = 1;
- public $p2 = 2;
- public $p3;
-};
-
-$obj = new test;
-$obj->p2 = 'A';
-$obj->p3 = 'B';
-$copy = clone $obj;
-$copy->p3 = 'C';
-echo "Object\n";
-var_dump($obj);
-echo "Clown\n";
-var_dump($copy);
-echo "Done\n";
-?>
---EXPECT--
-Object
-object(test)#1 (3) {
- ["p1"]=>
- int(1)
- ["p2"]=>
- string(1) "A"
- ["p3"]=>
- string(1) "B"
-}
-Clown
-object(test)#2 (3) {
- ["p1"]=>
- int(1)
- ["p2"]=>
- string(1) "A"
- ["p3"]=>
- string(1) "C"
-}
-Done
diff --git a/tests/classes/clone_002.phpt b/tests/classes/clone_002.phpt
deleted file mode 100755
index 4430a2cab4..0000000000
--- a/tests/classes/clone_002.phpt
+++ /dev/null
@@ -1,45 +0,0 @@
---TEST--
-ZE2 object cloning, 2
---SKIPIF--
-<?php if (version_compare(zend_version(), '2.0.0-dev', '<')) die('skip ZendEngine 2 needed'); ?>
---FILE--
-<?php
-class test {
- public $p1 = 1;
- public $p2 = 2;
- public $p3;
- public function __clone() {
- }
-};
-
-$obj = new test;
-$obj->p2 = 'A';
-$obj->p3 = 'B';
-$copy = clone $obj;
-$copy->p3 = 'C';
-echo "Object\n";
-var_dump($obj);
-echo "Clown\n";
-var_dump($copy);
-echo "Done\n";
-?>
---EXPECT--
-Object
-object(test)#1 (3) {
- ["p1"]=>
- int(1)
- ["p2"]=>
- string(1) "A"
- ["p3"]=>
- string(1) "B"
-}
-Clown
-object(test)#2 (3) {
- ["p1"]=>
- int(1)
- ["p2"]=>
- string(1) "A"
- ["p3"]=>
- string(1) "C"
-}
-Done
diff --git a/tests/classes/clone_003.phpt b/tests/classes/clone_003.phpt
deleted file mode 100755
index 658810825c..0000000000
--- a/tests/classes/clone_003.phpt
+++ /dev/null
@@ -1,58 +0,0 @@
---TEST--
-ZE2 object cloning, 3
---SKIPIF--
-<?php if (version_compare(zend_version(), '2.0.0-dev', '<')) die('skip ZendEngine 2 needed'); ?>
---FILE--
-<?php
-class base {
- protected $p1 = 'base:1';
- public $p2 = 'base:2';
- public $p3 = 'base:3';
- public $p4 = 'base:4';
- public $p5 = 'base:5';
- private $p6 = 'base:6';
- public function __clone() {
- }
-};
-
-class test extends base {
- public $p1 = 'test:1';
- public $p3 = 'test:3';
- public $p4 = 'test:4';
- public $p5 = 'test:5';
- public function __clone() {
- $this->p5 = 'clone:5';
- }
-}
-
-$obj = new test;
-$obj->p4 = 'A';
-$copy = clone $obj;
-echo "Object\n";
-print_r($obj);
-echo "Clown\n";
-print_r($copy);
-echo "Done\n";
-?>
---EXPECT--
-Object
-test Object
-(
- [p1] => test:1
- [p3] => test:3
- [p4] => A
- [p5] => test:5
- [p2] => base:2
- [p6:private] => base:6
-)
-Clown
-test Object
-(
- [p1] => test:1
- [p3] => test:3
- [p4] => A
- [p5] => clone:5
- [p2] => base:2
- [p6:private] => base:6
-)
-Done
diff --git a/tests/classes/clone_004.phpt b/tests/classes/clone_004.phpt
deleted file mode 100755
index 2059103bc5..0000000000
--- a/tests/classes/clone_004.phpt
+++ /dev/null
@@ -1,82 +0,0 @@
---TEST--
-ZE2 object cloning, 4
---FILE--
-<?php
-abstract class base {
- public $a = 'base';
-
- // disallow cloning
- private function __clone() {}
-}
-
-class test extends base {
- public $b = 'test';
-
- // reenable cloning
- public function __clone() {}
-
- public function show() {
- var_dump($this);
- }
-}
-
-echo "Original\n";
-$o1 = new test;
-$o1->a = array(1,2);
-$o1->b = array(3,4);
-$o1->show();
-
-echo "Clone\n";
-$o2 = clone $o1;
-$o2->show();
-
-echo "Modify\n";
-$o2->a = 5;
-$o2->b = 6;
-$o2->show();
-
-echo "Done\n";
-?>
---EXPECT--
-Original
-object(test)#1 (2) {
- ["b"]=>
- array(2) {
- [0]=>
- int(3)
- [1]=>
- int(4)
- }
- ["a"]=>
- array(2) {
- [0]=>
- int(1)
- [1]=>
- int(2)
- }
-}
-Clone
-object(test)#2 (2) {
- ["b"]=>
- array(2) {
- [0]=>
- int(3)
- [1]=>
- int(4)
- }
- ["a"]=>
- array(2) {
- [0]=>
- int(1)
- [1]=>
- int(2)
- }
-}
-Modify
-object(test)#2 (2) {
- ["b"]=>
- int(6)
- ["a"]=>
- int(5)
-}
-Done
diff --git a/tests/classes/clone_005.phpt b/tests/classes/clone_005.phpt
deleted file mode 100755
index bfe4d66d6f..0000000000
--- a/tests/classes/clone_005.phpt
+++ /dev/null
@@ -1,19 +0,0 @@
---TEST--
-ZE2 object cloning, 5
---FILE--
-<?php
-abstract class base {
- public $a = 'base';
-
- // disallow cloning once forever
- final private function __clone() {}
-}
-
-class test extends base {
- // reenabling should fail
- public function __clone() {}
-}
-
-?>
---EXPECTF--
-Fatal error: Cannot override final method base::__clone() in %sclone_005.php on line %d
diff --git a/tests/classes/clone_006.phpt b/tests/classes/clone_006.phpt
deleted file mode 100755
index 346911ad0d..0000000000
--- a/tests/classes/clone_006.phpt
+++ /dev/null
@@ -1,39 +0,0 @@
---TEST--
-ZE2 object cloning, 6
---SKIPIF--
-<?php if (version_compare(zend_version(), '2.0.0-dev', '<')) die('skip ZendEngine 2 needed'); ?>
---FILE--
-<?php
-
-class MyCloneable {
- static $id = 0;
-
- function MyCloneable() {
- $this->id = self::$id++;
- }
-
- function __clone() {
- $this->address = "New York";
- $this->id = self::$id++;
- }
-}
-
-$original = new MyCloneable();
-
-$original->name = "Hello";
-$original->address = "Tel-Aviv";
-
-echo $original->id . "\n";
-
-$clone = clone $original;
-
-echo $clone->id . "\n";
-echo $clone->name . "\n";
-echo $clone->address . "\n";
-
-?>
---EXPECT--
-0
-1
-Hello
-New York
diff --git a/tests/classes/constants_scope_001.phpt b/tests/classes/constants_scope_001.phpt
deleted file mode 100644
index 50066282ea..0000000000
--- a/tests/classes/constants_scope_001.phpt
+++ /dev/null
@@ -1,38 +0,0 @@
---TEST--
-ZE2 class constants and scope
---SKIPIF--
-<?php if (version_compare(zend_version(), '2.0.0-dev', '<')) die('skip ZendEngine 2 needed'); ?>
---FILE--
-<?php
-
-class ErrorCodes {
- const FATAL = "Fatal error\n";
- const WARNING = "Warning\n";
- const INFO = "Informational message\n";
-
- static function print_fatal_error_codes() {
- echo "FATAL = " . FATAL . "\n";
- echo "self::FATAL = " . self::FATAL;
- }
-}
-
-class ErrorCodesDerived extends ErrorCodes {
- const FATAL = "Worst error\n";
- static function print_fatal_error_codes() {
- echo "self::FATAL = " . self::FATAL;
- echo "parent::FATAL = " . parent::FATAL;
- }
-}
-
-/* Call the static function and move into the ErrorCodes scope */
-ErrorCodes::print_fatal_error_codes();
-ErrorCodesDerived::print_fatal_error_codes();
-
-?>
---EXPECTF--
-
-Notice: Use of undefined constant FATAL - assumed 'FATAL' in %sconstants_scope_001.php on line %d
-FATAL = FATAL
-self::FATAL = Fatal error
-self::FATAL = Worst error
-parent::FATAL = Fatal error
diff --git a/tests/classes/ctor_dtor.phpt b/tests/classes/ctor_dtor.phpt
deleted file mode 100644
index ea6813cc96..0000000000
--- a/tests/classes/ctor_dtor.phpt
+++ /dev/null
@@ -1,40 +0,0 @@
---TEST--
-ZE2 The new constructor/destructor is called
---SKIPIF--
-<?php if (version_compare(zend_version(), '2.0.0-dev', '<')) die('skip ZendEngine 2 needed'); ?>
---FILE--
-<?php
-
-class early {
- function early() {
- echo __CLASS__ . "::" . __FUNCTION__ . "\n";
- }
- function __destruct() {
- echo __CLASS__ . "::" . __FUNCTION__ . "\n";
- }
-}
-
-class late {
- function __construct() {
- echo __CLASS__ . "::" . __FUNCTION__ . "\n";
- }
- function __destruct() {
- echo __CLASS__ . "::" . __FUNCTION__ . "\n";
- }
-}
-
-$t = new early();
-$t->early();
-unset($t);
-$t = new late();
-//unset($t); delay to end of script
-
-echo "Done\n";
-?>
---EXPECTF--
-early::early
-early::early
-early::__destruct
-late::__construct
-Done
-late::__destruct
diff --git a/tests/classes/ctor_dtor_inheritance.phpt b/tests/classes/ctor_dtor_inheritance.phpt
deleted file mode 100644
index 8ae2a5dec4..0000000000
--- a/tests/classes/ctor_dtor_inheritance.phpt
+++ /dev/null
@@ -1,99 +0,0 @@
---TEST--
-ZE2 A derived class can use the inherited constructor/destructor
---SKIPIF--
-<?php if (version_compare(zend_version(), '2.0.0-dev', '<')) die('skip ZendEngine 2 needed'); ?>
---FILE--
-<?php
-
-// This test checks for:
-// - inherited constructors/destructors are not called automatically
-// - base classes know about derived properties in constructor/destructor
-// - base class constructors/destructors know the instanciated class name
-
-class base {
- public $name;
-
- function __construct() {
- echo __CLASS__ . "::" . __FUNCTION__ . "\n";
- $this->name = 'base';
- print_r($this);
- }
-
- function __destruct() {
- echo __CLASS__ . "::" . __FUNCTION__ . "\n";
- print_r($this);
- }
-}
-
-class derived extends base {
- public $other;
-
- function __construct() {
- $this->name = 'init';
- $this->other = 'other';
- print_r($this);
- parent::__construct();
- echo __CLASS__ . "::" . __FUNCTION__ . "\n";
- $this->name = 'derived';
- print_r($this);
- }
-
- function __destruct() {
- parent::__destruct();
- echo __CLASS__ . "::" . __FUNCTION__ . "\n";
- print_r($this);
- }
-}
-
-echo "Testing class base\n";
-$t = new base();
-unset($t);
-echo "Testing class derived\n";
-$t = new derived();
-unset($t);
-
-echo "Done\n";
-?>
---EXPECTF--
-Testing class base
-base::__construct
-base Object
-(
- [name] => base
-)
-base::__destruct
-base Object
-(
- [name] => base
-)
-Testing class derived
-derived Object
-(
- [other] => other
- [name] => init
-)
-base::__construct
-derived Object
-(
- [other] => other
- [name] => base
-)
-derived::__construct
-derived Object
-(
- [other] => other
- [name] => derived
-)
-base::__destruct
-derived Object
-(
- [other] => other
- [name] => derived
-)
-derived::__destruct
-derived Object
-(
- [other] => other
- [name] => derived
-)
-Done
diff --git a/tests/classes/ctor_failure.phpt b/tests/classes/ctor_failure.phpt
deleted file mode 100755
index b7d3b64dda..0000000000
--- a/tests/classes/ctor_failure.phpt
+++ /dev/null
@@ -1,33 +0,0 @@
---TEST--
-ZE2 Do not call destructors if constructor fails
---FILE--
-<?php
-
-class Test
-{
- function __construct($msg) {
- echo __METHOD__ . "($msg)\n";
- throw new Exception($msg);
- }
-
- function __destruct() {
- echo __METHOD__ . "\n";
- }
-}
-
-try
-{
- $o = new Test('Hello');
- unset($o);
-}
-catch (Exception $e)
-{
- echo 'Caught ' . get_class($e) . '(' . $e->getMessage() . ")\n";
-}
-
-?>
-===DONE===
---EXPECT--
-Test::__construct(Hello)
-Caught Exception(Hello)
-===DONE===
diff --git a/tests/classes/dereferencing_001.phpt b/tests/classes/dereferencing_001.phpt
deleted file mode 100644
index dd2aba78e5..0000000000
--- a/tests/classes/dereferencing_001.phpt
+++ /dev/null
@@ -1,35 +0,0 @@
---TEST--
-ZE2 dereferencing of objects from methods
---SKIPIF--
-<?php if (version_compare(zend_version(), '2.0.0-dev', '<')) die('skip ZendEngine 2 needed'); ?>
---FILE--
-<?php
-
-class Name {
- function Name($_name) {
- $this->name = $_name;
- }
-
- function display() {
- echo $this->name . "\n";
- }
-}
-
-class Person {
- private $name;
-
- function person($_name, $_address) {
- $this->name = new Name($_name);
- }
-
- function getName() {
- return $this->name;
- }
-}
-
-$person = new Person("John", "New York");
-$person->getName()->display();
-
-?>
---EXPECT--
-John
diff --git a/tests/classes/destructor_and_echo.phpt b/tests/classes/destructor_and_echo.phpt
deleted file mode 100755
index c6c6f23a71..0000000000
--- a/tests/classes/destructor_and_echo.phpt
+++ /dev/null
@@ -1,24 +0,0 @@
---TEST--
-Destructors and echo
---FILE--
-<?php
-
-class Test
-{
- function __construct() {
- echo __METHOD__ . "\n";
- }
-
- function __destruct() {
- echo __METHOD__ . "\n";
- }
-}
-
-$o = new Test;
-
-?>
-===DONE===
---EXPECT--
-Test::__construct
-===DONE===
-Test::__destruct
diff --git a/tests/classes/destructor_and_globals.phpt b/tests/classes/destructor_and_globals.phpt
deleted file mode 100755
index 9caf0f1026..0000000000
--- a/tests/classes/destructor_and_globals.phpt
+++ /dev/null
@@ -1,56 +0,0 @@
---TEST--
-ZE2 accessing globals from destructor in shutdown
---FILE--
-<?php
-$test_cnt = 0;
-$test_num = 0;
-
-function Show() {
- global $test_cnt;
- echo "Count: $test_cnt\n";
-}
-
-class counter {
- protected $id;
-
- public function __construct() {
- global $test_cnt, $test_num;
- $test_cnt++;
- $this->id = $test_num++;
- }
-
- public function Show() {
- echo 'Id: '.$this->id."\n";
- }
-
- // try protected here
- public function __destruct() {
- global $test_cnt;
- $test_cnt--;
- }
-
- static public function destroy(&$obj) {
- $obj = NULL;
- }
-}
-Show();
-$obj1 = new counter;
-$obj1->Show();
-Show();
-$obj2 = new counter;
-$obj2->Show();
-Show();
-counter::destroy($obj1);
-Show();
-// or uncomment this line and it works
-//counter::destroy($obj2);
-echo "Done\n";
-?>
---EXPECT--
-Count: 0
-Id: 0
-Count: 1
-Id: 1
-Count: 2
-Count: 1
-Done
diff --git a/tests/classes/destructor_and_references.phpt b/tests/classes/destructor_and_references.phpt
deleted file mode 100755
index 66e8b41f7d..0000000000
--- a/tests/classes/destructor_and_references.phpt
+++ /dev/null
@@ -1,26 +0,0 @@
---TEST--
-Destructing and references
---FILE--
-<?php
-
-class test1 {public $x;};
-class test2 {public $x;};
-class test3 {public $x;};
-class test4 {public $x;};
-
-$o1 = new test1;
-$o2 = new test2;
-$o3 = new test3;
-$o4 = new test4;
-
-$o3->x = &$o4;
-
-$r1 = &$o1;
-
-class once {}
-
-$o = new once;
-echo "Done\n";
-?>
---EXPECT--
-Done \ No newline at end of file
diff --git a/tests/classes/destructor_inheritance.phpt b/tests/classes/destructor_inheritance.phpt
deleted file mode 100755
index b9a46659b0..0000000000
--- a/tests/classes/destructor_inheritance.phpt
+++ /dev/null
@@ -1,29 +0,0 @@
---TEST--
-ZE2 The inherited destructor is called
---SKIPIF--
-<?php if (version_compare(zend_version(), '2.0.0-dev', '<')) die('skip ZendEngine 2 needed'); ?>
---FILE--
-<?php
-class base {
- function __construct() {
- echo __METHOD__ . "\n";
- }
-
- function __destruct() {
- echo __METHOD__ . "\n";
- }
-}
-
-class derived extends base {
-}
-
-$obj = new derived;
-
-unset($obj);
-
-echo 'Done';
-?>
---EXPECT--
-base::__construct
-base::__destruct
-Done \ No newline at end of file
diff --git a/tests/classes/destructor_visibility_001.phpt b/tests/classes/destructor_visibility_001.phpt
deleted file mode 100755
index 7674c512f6..0000000000
--- a/tests/classes/destructor_visibility_001.phpt
+++ /dev/null
@@ -1,24 +0,0 @@
---TEST--
-ZE2 Ensuring destructor visibility
---SKIPIF--
-<?php if (version_compare(zend_version(), '2.0.0-dev', '<')) die('skip ZendEngine 2 needed'); ?>
---FILE--
-<?php
-
-class Base {
- private function __destruct() {
- echo __METHOD__ . "\n";
- }
-}
-
-class Derived extends Base {
-}
-
-$obj = new Derived;
-
-unset($obj);
-
-?>
-===DONE===
---EXPECTF--
-Fatal error: Call to private Derived::__destruct() from context '' in %sdestructor_visibility_001.php on line %d
diff --git a/tests/classes/destructor_visibility_002.phpt b/tests/classes/destructor_visibility_002.phpt
deleted file mode 100755
index 2cc83334a9..0000000000
--- a/tests/classes/destructor_visibility_002.phpt
+++ /dev/null
@@ -1,24 +0,0 @@
---TEST--
-ZE2 Ensuring destructor visibility
---SKIPIF--
-<?php if (version_compare(zend_version(), '2.0.0-dev', '<')) die('skip ZendEngine 2 needed'); ?>
---FILE--
-<?php
-
-class Base {
- private function __destruct() {
- echo __METHOD__ . "\n";
- }
-}
-
-class Derived extends Base {
-}
-
-$obj = new Derived;
-
-?>
-===DONE===
---EXPECTF--
-===DONE===
-
-Warning: Call to private Derived::__destruct() from context '' during shutdown ignored in Unknown on line %d
diff --git a/tests/classes/destructor_visibility_003.phpt b/tests/classes/destructor_visibility_003.phpt
deleted file mode 100755
index 83e3efe22e..0000000000
--- a/tests/classes/destructor_visibility_003.phpt
+++ /dev/null
@@ -1,28 +0,0 @@
---TEST--
-ZE2 Ensuring destructor visibility
---SKIPIF--
-<?php if (version_compare(zend_version(), '2.0.0-dev', '<')) die('skip ZendEngine 2 needed'); ?>
---FILE--
-<?php
-
-class Base {
- private function __destruct() {
- echo __METHOD__ . "\n";
- }
-}
-
-class Derived extends Base {
- public function __destruct() {
- echo __METHOD__ . "\n";
- }
-}
-
-$obj = new Derived;
-
-unset($obj); // Derived::__destruct is being called not Base::__destruct
-
-?>
-===DONE===
---EXPECTF--
-Derived::__destruct
-===DONE===
diff --git a/tests/classes/factory_001.phpt b/tests/classes/factory_001.phpt
deleted file mode 100644
index 97b69c1b47..0000000000
--- a/tests/classes/factory_001.phpt
+++ /dev/null
@@ -1,35 +0,0 @@
---TEST--
-ZE2 factory objects
---SKIPIF--
-<?php if (version_compare(zend_version(), '2.0.0-dev', '<')) die('skip ZendEngine 2 needed'); ?>
---FILE--
-<?php
-
-class Circle {
- function draw() {
- echo "Circle\n";
- }
-}
-
-class Square {
- function draw() {
- print "Square\n";
- }
-}
-
-function ShapeFactoryMethod($shape) {
- switch ($shape) {
- case "Circle":
- return new Circle();
- case "Square":
- return new Square();
- }
-}
-
-ShapeFactoryMethod("Circle")->draw();
-ShapeFactoryMethod("Square")->draw();
-
-?>
---EXPECT--
-Circle
-Square
diff --git a/tests/classes/factory_and_singleton_001.phpt b/tests/classes/factory_and_singleton_001.phpt
deleted file mode 100755
index 70fa020a49..0000000000
--- a/tests/classes/factory_and_singleton_001.phpt
+++ /dev/null
@@ -1,101 +0,0 @@
---TEST--
-ZE2 factory and singleton, test 1
---SKIPIF--
-<?php if (version_compare(zend_version(), '2.0.0-dev', '<')) die('skip ZendEngine 2 needed'); ?>
---FILE--
-<?php
-class test {
- protected $x;
-
- static private $test = NULL;
- static private $cnt = 0;
-
- static function factory($x) {
- if (test::$test) {
- return test::$test;
- } else {
- test::$test = new test($x);
- return test::$test;
- }
- }
-
- protected function __construct($x) {
- test::$cnt++;
- $this->x = $x;
- }
-
- static function destroy() {
- test::$test = NULL;
- }
-
- protected function __destruct() {
- test::$cnt--;
- }
-
- public function get() {
- return $this->x;
- }
-
- static public function getX() {
- if (test::$test) {
- return test::$test->x;
- } else {
- return NULL;
- }
- }
-
- static public function count() {
- return test::$cnt;
- }
-}
-
-echo "Access static members\n";
-var_dump(test::getX());
-var_dump(test::count());
-
-echo "Create x and y\n";
-$x = test::factory(1);
-$y = test::factory(2);
-var_dump(test::getX());
-var_dump(test::count());
-var_dump($x->get());
-var_dump($y->get());
-
-echo "Destruct x\n";
-$x = NULL;
-var_dump(test::getX());
-var_dump(test::count());
-var_dump($y->get());
-
-echo "Destruct y\n";
-$y = NULL;
-var_dump(test::getX());
-var_dump(test::count());
-
-echo "Destruct static\n";
-test::destroy();
-var_dump(test::getX());
-var_dump(test::count());
-
-echo "Done\n";
-?>
---EXPECT--
-Access static members
-NULL
-int(0)
-Create x and y
-int(1)
-int(1)
-int(1)
-int(1)
-Destruct x
-int(1)
-int(1)
-int(1)
-Destruct y
-int(1)
-int(1)
-Destruct static
-NULL
-int(0)
-Done
diff --git a/tests/classes/factory_and_singleton_002.phpt b/tests/classes/factory_and_singleton_002.phpt
deleted file mode 100755
index 3308a561a5..0000000000
--- a/tests/classes/factory_and_singleton_002.phpt
+++ /dev/null
@@ -1,100 +0,0 @@
---TEST--
-ZE2 factory and singleton, test 2
---SKIPIF--
-<?php if (version_compare(zend_version(), '2.0.0-dev', '<')) die('skip ZendEngine 2 needed'); ?>
---FILE--
-<?php
-class test {
- protected $x;
-
- static private $test = NULL;
- static private $cnt = 0;
-
- static function factory($x) {
- if (test::$test) {
- return test::$test;
- } else {
- test::$test = new test($x);
- return test::$test;
- }
- }
-
- protected function __construct($x) {
- test::$cnt++;
- $this->x = $x;
- }
-
- static function destroy() {
- test::$test = NULL;
- }
-
- protected function __destruct() {
- test::$cnt--;
- }
-
- public function get() {
- return $this->x;
- }
-
- static public function getX() {
- if (test::$test) {
- return test::$test->x;
- } else {
- return NULL;
- }
- }
-
- static public function count() {
- return test::$cnt;
- }
-}
-
-echo "Access static members\n";
-var_dump(test::getX());
-var_dump(test::count());
-
-echo "Create x and y\n";
-$x = test::factory(1);
-$y = test::factory(2);
-var_dump(test::getX());
-var_dump(test::count());
-var_dump($x->get());
-var_dump($y->get());
-
-echo "Destruct x\n";
-$x = NULL;
-var_dump(test::getX());
-var_dump(test::count());
-var_dump($y->get());
-
-echo "Destruct y\n";
-$y = NULL;
-var_dump(test::getX());
-var_dump(test::count());
-
-//echo "Destruct static\n";
-//test::destroy();
-//var_dump(test::getX());
-//var_dump(test::count());
-
-echo "Done\n";
-?>
---EXPECT--
-Access static members
-NULL
-int(0)
-Create x and y
-int(1)
-int(1)
-int(1)
-int(1)
-Destruct x
-int(1)
-int(1)
-int(1)
-Destruct y
-int(1)
-int(1)
-Done
-
-Warning: Call to protected test::__destruct() from context '' during shutdown ignored in Unknown on line 0
diff --git a/tests/classes/factory_and_singleton_003.phpt b/tests/classes/factory_and_singleton_003.phpt
deleted file mode 100755
index d81cc4642c..0000000000
--- a/tests/classes/factory_and_singleton_003.phpt
+++ /dev/null
@@ -1,18 +0,0 @@
---TEST--
-ZE2 factory and singleton, test 3
---SKIPIF--
-<?php if (version_compare(zend_version(), '2.0.0-dev', '<')) die('skip ZendEngine 2 needed'); ?>
---FILE--
-<?php
-class test {
-
- protected function __construct($x) {
- }
-}
-
-$obj = new test;
-
-echo "Done\n";
-?>
---EXPECTF--
-Fatal error: Call to protected test::__construct() from context '' %sfactory_and_singleton_003.php on line %d
diff --git a/tests/classes/factory_and_singleton_004.phpt b/tests/classes/factory_and_singleton_004.phpt
deleted file mode 100755
index 01c53d85a3..0000000000
--- a/tests/classes/factory_and_singleton_004.phpt
+++ /dev/null
@@ -1,18 +0,0 @@
---TEST--
-ZE2 factory and singleton, test 4
---SKIPIF--
-<?php if (version_compare(zend_version(), '2.0.0-dev', '<')) die('skip ZendEngine 2 needed'); ?>
---FILE--
-<?php
-class test {
-
- private function __construct($x) {
- }
-}
-
-$obj = new test;
-
-echo "Done\n";
-?>
---EXPECTF--
-Fatal error: Call to private test::__construct() from context '' %sfactory_and_singleton_004.php on line %d
diff --git a/tests/classes/factory_and_singleton_005.phpt b/tests/classes/factory_and_singleton_005.phpt
deleted file mode 100755
index 2cd7e5cc99..0000000000
--- a/tests/classes/factory_and_singleton_005.phpt
+++ /dev/null
@@ -1,19 +0,0 @@
---TEST--
-ZE2 factory and singleton, test 5
---SKIPIF--
-<?php if (version_compare(zend_version(), '2.0.0-dev', '<')) die('skip ZendEngine 2 needed'); ?>
---FILE--
-<?php
-class test {
-
- protected function __destruct() {
- }
-}
-
-$obj = new test;
-$obj = NULL;
-
-echo "Done\n";
-?>
---EXPECTF--
-Fatal error: Call to protected test::__destruct() from context '' in %sfactory_and_singleton_005.php on line %d
diff --git a/tests/classes/factory_and_singleton_006.phpt b/tests/classes/factory_and_singleton_006.phpt
deleted file mode 100755
index 81cf714888..0000000000
--- a/tests/classes/factory_and_singleton_006.phpt
+++ /dev/null
@@ -1,20 +0,0 @@
---TEST--
-ZE2 factory and singleton, test 6
---SKIPIF--
-<?php if (version_compare(zend_version(), '2.0.0-dev', '<')) die('skip ZendEngine 2 needed'); ?>
---FILE--
-<?php
-class test {
-
- private function __destruct() {
- }
-}
-
-$obj = new test;
-$obj = NULL;
-
-echo "Done\n";
-?>
---EXPECTF--
-Fatal error: Call to private test::__destruct() from context '' in %sfactory_and_singleton_006.php on line %d
-
diff --git a/tests/classes/factory_and_singleton_007.phpt b/tests/classes/factory_and_singleton_007.phpt
deleted file mode 100755
index 4788dbf087..0000000000
--- a/tests/classes/factory_and_singleton_007.phpt
+++ /dev/null
@@ -1,20 +0,0 @@
---TEST--
-ZE2 factory and singleton, test 7
---SKIPIF--
-<?php if (version_compare(zend_version(), '2.0.0-dev', '<')) die('skip ZendEngine 2 needed'); ?>
---FILE--
-<?php
-class test {
-
- protected function __clone() {
- }
-}
-
-$obj = new test;
-$clone = clone $obj;
-$obj = NULL;
-
-echo "Done\n";
-?>
---EXPECTF--
-Fatal error: Call to protected test::__clone() from context '' %sfactory_and_singleton_007.php on line %d
diff --git a/tests/classes/factory_and_singleton_008.phpt b/tests/classes/factory_and_singleton_008.phpt
deleted file mode 100755
index 750b9db340..0000000000
--- a/tests/classes/factory_and_singleton_008.phpt
+++ /dev/null
@@ -1,20 +0,0 @@
---TEST--
-ZE2 factory and singleton, test 8
---SKIPIF--
-<?php if (version_compare(zend_version(), '2.0.0-dev', '<')) die('skip ZendEngine 2 needed'); ?>
---FILE--
-<?php
-class test {
-
- private function __clone() {
- }
-}
-
-$obj = new test;
-$clone = clone $obj;
-$obj = NULL;
-
-echo "Done\n";
-?>
---EXPECTF--
-Fatal error: Call to private test::__clone() from context '' %sfactory_and_singleton_008.php on line %d
diff --git a/tests/classes/factory_and_singleton_009.phpt b/tests/classes/factory_and_singleton_009.phpt
deleted file mode 100755
index acf792c316..0000000000
--- a/tests/classes/factory_and_singleton_009.phpt
+++ /dev/null
@@ -1,21 +0,0 @@
---TEST--
-ZE2 factory and singleton, test 9
---SKIPIF--
-<?php if (version_compare(zend_version(), '2.0.0-dev', '<')) die('skip ZendEngine 2 needed'); ?>
---FILE--
-<?php
-class test {
-
- protected function __destruct() {
- echo __METHOD__ . "\n";
- }
-}
-
-$obj = new test;
-
-?>
-===DONE===
---EXPECTF--
-===DONE===
-
-Warning: Call to protected test::__destruct() from context '' during shutdown ignored in Unknown on line 0
diff --git a/tests/classes/factory_and_singleton_010.phpt b/tests/classes/factory_and_singleton_010.phpt
deleted file mode 100755
index 0f5fb2dc74..0000000000
--- a/tests/classes/factory_and_singleton_010.phpt
+++ /dev/null
@@ -1,21 +0,0 @@
---TEST--
-ZE2 factory and singleton, test 10
---SKIPIF--
-<?php if (version_compare(zend_version(), '2.0.0-dev', '<')) die('skip ZendEngine 2 needed'); ?>
---FILE--
-<?php
-class test {
-
- private function __destruct() {
- echo __METHOD__ . "\n";
- }
-}
-
-$obj = new test;
-
-?>
-===DONE===
---EXPECTF--
-===DONE===
-
-Warning: Call to private test::__destruct() from context '' during shutdown ignored in Unknown on line 0
diff --git a/tests/classes/final.phpt b/tests/classes/final.phpt
deleted file mode 100644
index b4e37a36f6..0000000000
--- a/tests/classes/final.phpt
+++ /dev/null
@@ -1,31 +0,0 @@
---TEST--
-ZE2 A method may be redeclared final
---SKIPIF--
-<?php if (version_compare(zend_version(), '2.0.0-dev', '<')) die('skip ZendEngine 2 needed'); ?>
---FILE--
-<?php
-
-class first {
- function show() {
- echo "Call to function first::show()\n";
- }
-}
-
-$t = new first();
-$t->show();
-
-class second extends first {
- final function show() {
- echo "Call to function second::show()\n";
- }
-}
-
-$t2 = new second();
-$t2->show();
-
-echo "Done\n";
-?>
---EXPECTF--
-Call to function first::show()
-Call to function second::show()
-Done \ No newline at end of file
diff --git a/tests/classes/final_abstract.phpt b/tests/classes/final_abstract.phpt
deleted file mode 100644
index 426c852cfc..0000000000
--- a/tests/classes/final_abstract.phpt
+++ /dev/null
@@ -1,16 +0,0 @@
---TEST--
-ZE2 A final method cannot be abstract
---SKIPIF--
-<?php if (version_compare(zend_version(), '2.0.0-dev', '<')) die('skip ZendEngine 2 needed'); ?>
---FILE--
-<?php
-
-class fail {
- final abstract function show();
-}
-
-echo "Done\n"; // Shouldn't be displayed
-?>
---EXPECTF--
-
-Fatal error: Cannot use the final modifier on an abstract class member in %s
diff --git a/tests/classes/final_redeclare.phpt b/tests/classes/final_redeclare.phpt
deleted file mode 100644
index e8f2e6ff09..0000000000
--- a/tests/classes/final_redeclare.phpt
+++ /dev/null
@@ -1,25 +0,0 @@
---TEST--
-ZE2 A final method may not be overwritten
---SKIPIF--
-<?php if (version_compare(zend_version(), '2.0.0-dev', '<')) die('skip ZendEngine 2 needed'); ?>
---FILE--
-<?php
-
-class pass {
- final function show() {
- echo "Call to function pass::show()\n";
- }
-}
-
-$t = new pass();
-
-class fail extends pass {
- function show() {
- echo "Call to function fail::show()\n";
- }
-}
-
-echo "Done\n"; // Shouldn't be displayed
-?>
---EXPECTF--
-Fatal error: Cannot override final method pass::show() in %s on line %d
diff --git a/tests/classes/incdec_property_001.phpt b/tests/classes/incdec_property_001.phpt
deleted file mode 100644
index 39bf06f65f..0000000000
--- a/tests/classes/incdec_property_001.phpt
+++ /dev/null
@@ -1,31 +0,0 @@
---TEST--
-ZE2 post increment/decrement property of overloaded object
---FILE--
-<?php
-
-class Test {
- private $real_a = 2;
-
- function __set($property, $value) {
- if ($property = "a") {
- $this->real_a = $value;
- }
- }
-
- function __get($property) {
- if ($property = "a") {
- return $this->real_a;
- }
- }
-}
-
-$obj = new Test;
-var_dump($obj->a);
-$obj->a++;
-var_dump($obj->a);
-echo "---Done---\n";
-?>
---EXPECT--
-int(2)
-int(3)
----Done---
diff --git a/tests/classes/incdec_property_002.phpt b/tests/classes/incdec_property_002.phpt
deleted file mode 100644
index fe08625ea8..0000000000
--- a/tests/classes/incdec_property_002.phpt
+++ /dev/null
@@ -1,31 +0,0 @@
---TEST--
-ZE2 post increment/decrement property of overloaded object with assignment
---FILE--
-<?php
-
-class Test {
- private $real_a = 2;
-
- function __set($property, $value) {
- if ($property = "a") {
- $this->real_a = $value;
- }
- }
-
- function __get($property) {
- if ($property = "a") {
- return $this->real_a;
- }
- }
-}
-
-$obj = new Test;
-var_dump($obj->a);
-$t1 = $obj->a++;
-var_dump($obj->a);
-echo "---Done---\n";
-?>
---EXPECT--
-int(2)
-int(3)
----Done---
diff --git a/tests/classes/incdec_property_003.phpt b/tests/classes/incdec_property_003.phpt
deleted file mode 100644
index d26277ab8d..0000000000
--- a/tests/classes/incdec_property_003.phpt
+++ /dev/null
@@ -1,31 +0,0 @@
---TEST--
-ZE2 pre increment/decrement property of overloaded object
---FILE--
-<?php
-
-class Test {
- private $real_a = 2;
-
- function __set($property, $value) {
- if ($property = "a") {
- $this->real_a = $value;
- }
- }
-
- function __get($property) {
- if ($property = "a") {
- return $this->real_a;
- }
- }
-}
-
-$obj = new Test;
-var_dump($obj->a);
-++$obj->a;
-var_dump($obj->a);
-echo "---Done---\n";
-?>
---EXPECT--
-int(2)
-int(3)
----Done---
diff --git a/tests/classes/incdec_property_004.phpt b/tests/classes/incdec_property_004.phpt
deleted file mode 100644
index 5ccad190b8..0000000000
--- a/tests/classes/incdec_property_004.phpt
+++ /dev/null
@@ -1,31 +0,0 @@
---TEST--
-ZE2 pre increment/decrement property of overloaded object with assignment
---FILE--
-<?php
-
-class Test {
- private $real_a = 2;
-
- function __set($property, $value) {
- if ($property = "a") {
- $this->real_a = $value;
- }
- }
-
- function __get($property) {
- if ($property = "a") {
- return $this->real_a;
- }
- }
-}
-
-$obj = new Test;
-var_dump($obj->a);
-$t1 = ++$obj->a;
-var_dump($obj->a);
-echo "---Done---\n";
-?>
---EXPECT--
-int(2)
-int(3)
----Done---
diff --git a/tests/classes/inheritance.phpt b/tests/classes/inheritance.phpt
deleted file mode 100644
index 070ad9147d..0000000000
--- a/tests/classes/inheritance.phpt
+++ /dev/null
@@ -1,56 +0,0 @@
---TEST--
-Classes inheritance test
---FILE--
-<?php
-
-/* Inheritance test. Pretty nifty if I do say so myself! */
-
-class foo {
- public $a;
- public $b;
- function display() {
- echo "This is class foo\n";
- echo "a = ".$this->a."\n";
- echo "b = ".$this->b."\n";
- }
- function mul() {
- return $this->a*$this->b;
- }
-};
-
-class bar extends foo {
- public $c;
- function display() { /* alternative display function for class bar */
- echo "This is class bar\n";
- echo "a = ".$this->a."\n";
- echo "b = ".$this->b."\n";
- echo "c = ".$this->c."\n";
- }
-};
-
-
-$foo1 = new foo;
-$foo1->a = 2;
-$foo1->b = 5;
-$foo1->display();
-echo $foo1->mul()."\n";
-
-echo "-----\n";
-
-$bar1 = new bar;
-$bar1->a = 4;
-$bar1->b = 3;
-$bar1->c = 12;
-$bar1->display();
-echo $bar1->mul()."\n";
---EXPECT--
-This is class foo
-a = 2
-b = 5
-10
------
-This is class bar
-a = 4
-b = 3
-c = 12
-12
diff --git a/tests/classes/inheritance_002.phpt b/tests/classes/inheritance_002.phpt
deleted file mode 100755
index cca528e29c..0000000000
--- a/tests/classes/inheritance_002.phpt
+++ /dev/null
@@ -1,71 +0,0 @@
---TEST--
-ZE2 Constructor precedence
---SKIPIF--
-<?php if (version_compare(zend_version(), '2.0.0-dev', '<')) die('skip ZendEngine 2 needed'); ?>
---FILE--
-<?php
-class Base_php4 {
- function Base_php4() {
- var_dump('Base constructor');
- }
-}
-
-class Child_php4 extends Base_php4 {
- function Child_php4() {
- var_dump('Child constructor');
- parent::Base_php4();
- }
-}
-
-class Base_php5 {
- function __construct() {
- var_dump('Base constructor');
- }
- }
-
-class Child_php5 extends Base_php5 {
- function __construct() {
- var_dump('Child constructor');
- parent::__construct();
- }
- }
-
-class Child_mx1 extends Base_php4 {
- function __construct() {
- var_dump('Child constructor');
- parent::Base_php4();
- }
-}
-
-class Child_mx2 extends Base_php5 {
- function Child_mx2() {
- var_dump('Child constructor');
- parent::__construct();
- }
-}
-
-echo "### PHP 4 style\n";
-$c4= new Child_php4();
-
-echo "### PHP 5 style\n";
-$c5= new Child_php5();
-
-echo "### Mixed style 1\n";
-$cm= new Child_mx1();
-
-echo "### Mixed style 2\n";
-$cm= new Child_mx2();
-?>
---EXPECT--
-### PHP 4 style
-string(17) "Child constructor"
-string(16) "Base constructor"
-### PHP 5 style
-string(17) "Child constructor"
-string(16) "Base constructor"
-### Mixed style 1
-string(17) "Child constructor"
-string(16) "Base constructor"
-### Mixed style 2
-string(17) "Child constructor"
-string(16) "Base constructor"
diff --git a/tests/classes/interface_and_extends.phpt b/tests/classes/interface_and_extends.phpt
deleted file mode 100755
index f9040ae4a9..0000000000
--- a/tests/classes/interface_and_extends.phpt
+++ /dev/null
@@ -1,26 +0,0 @@
---TEST--
-ZE2 a class cannot extend an interface
---SKIPIF--
-<?php if (version_compare(zend_version(), '2.0.0-dev', '<')) die('skip ZendEngine 2 needed'); ?>
---FILE--
-<?php
-
-interface Test
-{
- function show();
-}
-
-class Tester extends Test
-{
- function show() {
- echo __METHOD__ . "\n";
- }
-}
-
-$o = new Tester;
-$o->show();
-
-?>
-===DONE===
---EXPECTF--
-Fatal error: Class Tester cannot extend from interface Test in %sinterface_and_extends.php on line %d
diff --git a/tests/classes/interface_class.phpt b/tests/classes/interface_class.phpt
deleted file mode 100644
index 22520de1f9..0000000000
--- a/tests/classes/interface_class.phpt
+++ /dev/null
@@ -1,14 +0,0 @@
---TEST--
-ZE2 A class can only implement interfaces
---SKIPIF--
-<?php if (version_compare(zend_version(), '2.0.0-dev', '<')) die('skip ZendEngine 2 needed'); ?>
---FILE--
-<?php
-class base {
-}
-
-class derived implements base {
-}
-?>
---EXPECTF--
-Fatal error: derived cannot implement base - it is not an interface in %s on line %d
diff --git a/tests/classes/interface_construct.phpt b/tests/classes/interface_construct.phpt
deleted file mode 100755
index 406462e17a..0000000000
--- a/tests/classes/interface_construct.phpt
+++ /dev/null
@@ -1,24 +0,0 @@
---TEST--
-ZE2 An interface constructor signature must not be inherited
---SKIPIF--
-<?php if (version_compare(zend_version(), '2.0.0-dev', '<')) die('skip ZendEngine 2 needed'); ?>
---FILE--
-<?php
-error_reporting(4095);
-
-interface test {
- public function __construct($foo);
-}
-
-class foo implements test {
- public function __construct() {
- echo "foo\n";
- }
-}
-
-$foo = new foo;
-
-?>
---EXPECT--
-foo
-
diff --git a/tests/classes/interface_doubled.phpt b/tests/classes/interface_doubled.phpt
deleted file mode 100644
index cf3b099740..0000000000
--- a/tests/classes/interface_doubled.phpt
+++ /dev/null
@@ -1,201 +0,0 @@
---TEST--
-ZE2 An interface extends base interfaces
---SKIPIF--
-<?php if (version_compare(zend_version(), '2.0.0-dev', '<')) die('skip ZendEngine 2 needed'); ?>
---FILE--
-<?php
-
-interface if_a {
- abstract function f_a();
-}
-
-interface if_b {
- abstract function f_b();
-}
-
-interface if_c extends if_a, if_b {
- abstract function f_c();
-}
-
-interface if_d extends if_a, if_b {
- abstract function f_d();
-}
-
-interface if_e {
- abstract function f_d();
-}
-
-interface if_f extends /*if_e,*/ if_a, if_b, if_c, if_d /*, if_e*/ {
-}
-
-class base {
- function test($class) {
- echo "is_a(" . get_class($this) . ", $class) ". (($this instanceof $class) ? "yes\n" : "no\n");
- }
-}
-
-echo "class_a\n";
-
-class class_a extends base implements if_a {
- function f_a() {}
- function f_b() {}
- function f_c() {}
- function f_d() {}
- function f_e() {}
-}
-
-$t = new class_a();
-echo $t->test('if_a');
-echo $t->test('if_b');
-echo $t->test('if_c');
-echo $t->test('if_d');
-echo $t->test('if_e');
-
-echo "class_b\n";
-
-class class_b extends base implements if_a, if_b {
- function f_a() {}
- function f_b() {}
- function f_c() {}
- function f_d() {}
- function f_e() {}
-}
-
-$t = new class_b();
-echo $t->test('if_a');
-echo $t->test('if_b');
-echo $t->test('if_c');
-echo $t->test('if_d');
-echo $t->test('if_e');
-
-echo "class_c\n";
-
-class class_c extends base implements if_c {
- function f_a() {}
- function f_b() {}
- function f_c() {}
- function f_d() {}
- function f_e() {}
-}
-
-$t = new class_c();
-echo $t->test('if_a');
-echo $t->test('if_b');
-echo $t->test('if_c');
-echo $t->test('if_d');
-echo $t->test('if_e');
-
-echo "class_d\n";
-
-class class_d extends base implements if_d{
- function f_a() {}
- function f_b() {}
- function f_c() {}
- function f_d() {}
- function f_e() {}
-}
-
-$t = new class_d();
-echo $t->test('if_a');
-echo $t->test('if_b');
-echo $t->test('if_c');
-echo $t->test('if_d');
-echo $t->test('if_e');
-
-echo "class_e\n";
-
-class class_e extends base implements if_a, if_b, if_c, if_d {
- function f_a() {}
- function f_b() {}
- function f_c() {}
- function f_d() {}
- function f_e() {}
-}
-
-$t = new class_e();
-echo $t->test('if_a');
-echo $t->test('if_b');
-echo $t->test('if_c');
-echo $t->test('if_d');
-echo $t->test('if_e');
-
-echo "class_f\n";
-
-class class_f extends base implements if_e {
- function f_a() {}
- function f_b() {}
- function f_c() {}
- function f_d() {}
- function f_e() {}
-}
-
-$t = new class_f();
-echo $t->test('if_a');
-echo $t->test('if_b');
-echo $t->test('if_c');
-echo $t->test('if_d');
-echo $t->test('if_e');
-
-echo "class_g\n";
-
-class class_g extends base implements if_f {
- function f_a() {}
- function f_b() {}
- function f_c() {}
- function f_d() {}
- function f_e() {}
-}
-
-$t = new class_g();
-echo $t->test('if_a');
-echo $t->test('if_b');
-echo $t->test('if_c');
-echo $t->test('if_d');
-echo $t->test('if_e');
-
-?>
-===DONE===
---EXPECTF--
-class_a
-is_a(class_a, if_a) yes
-is_a(class_a, if_b) no
-is_a(class_a, if_c) no
-is_a(class_a, if_d) no
-is_a(class_a, if_e) no
-class_b
-is_a(class_b, if_a) yes
-is_a(class_b, if_b) yes
-is_a(class_b, if_c) no
-is_a(class_b, if_d) no
-is_a(class_b, if_e) no
-class_c
-is_a(class_c, if_a) yes
-is_a(class_c, if_b) yes
-is_a(class_c, if_c) yes
-is_a(class_c, if_d) no
-is_a(class_c, if_e) no
-class_d
-is_a(class_d, if_a) yes
-is_a(class_d, if_b) yes
-is_a(class_d, if_c) no
-is_a(class_d, if_d) yes
-is_a(class_d, if_e) no
-class_e
-is_a(class_e, if_a) yes
-is_a(class_e, if_b) yes
-is_a(class_e, if_c) yes
-is_a(class_e, if_d) yes
-is_a(class_e, if_e) no
-class_f
-is_a(class_f, if_a) no
-is_a(class_f, if_b) no
-is_a(class_f, if_c) no
-is_a(class_f, if_d) no
-is_a(class_f, if_e) yes
-class_g
-is_a(class_g, if_a) yes
-is_a(class_g, if_b) yes
-is_a(class_g, if_c) yes
-is_a(class_g, if_d) yes
-is_a(class_g, if_e) no
-===DONE===
diff --git a/tests/classes/interface_implemented.phpt b/tests/classes/interface_implemented.phpt
deleted file mode 100644
index 0f5e5cbe7b..0000000000
--- a/tests/classes/interface_implemented.phpt
+++ /dev/null
@@ -1,103 +0,0 @@
---TEST--
-ZE2 An interface is inherited
---SKIPIF--
-<?php if (version_compare(zend_version(), '2.0.0-dev', '<')) die('skip ZendEngine 2 needed'); ?>
---FILE--
-<?php
-
-interface if_a {
- abstract function f_a();
-}
-
-interface if_b extends if_a {
- abstract function f_b();
-}
-
-class base {
- function _is_a($sub) {
- echo 'is_a('.get_class($this).', '.$sub.') = '.(($this instanceof $sub) ? 'yes' : 'no')."\n";
- }
- function test() {
- echo $this->_is_a('base');
- echo $this->_is_a('derived_a');
- echo $this->_is_a('derived_b');
- echo $this->_is_a('derived_c');
- echo $this->_is_a('derived_d');
- echo $this->_is_a('if_a');
- echo $this->_is_a('if_b');
- echo "\n";
- }
-}
-
-class derived_a extends base implements if_a {
- function f_a() {}
-}
-
-class derived_b extends base implements if_a, if_b {
- function f_a() {}
- function f_b() {}
-}
-
-class derived_c extends derived_a implements if_b {
- function f_b() {}
-}
-
-class derived_d extends derived_c {
-}
-
-$t = new base();
-$t->test();
-
-$t = new derived_a();
-$t->test();
-
-$t = new derived_b();
-$t->test();
-
-$t = new derived_c();
-$t->test();
-
-$t = new derived_d();
-$t->test();
-
-?>
---EXPECTF--
-is_a(base, base) = yes
-is_a(base, derived_a) = no
-is_a(base, derived_b) = no
-is_a(base, derived_c) = no
-is_a(base, derived_d) = no
-is_a(base, if_a) = no
-is_a(base, if_b) = no
-
-is_a(derived_a, base) = yes
-is_a(derived_a, derived_a) = yes
-is_a(derived_a, derived_b) = no
-is_a(derived_a, derived_c) = no
-is_a(derived_a, derived_d) = no
-is_a(derived_a, if_a) = yes
-is_a(derived_a, if_b) = no
-
-is_a(derived_b, base) = yes
-is_a(derived_b, derived_a) = no
-is_a(derived_b, derived_b) = yes
-is_a(derived_b, derived_c) = no
-is_a(derived_b, derived_d) = no
-is_a(derived_b, if_a) = yes
-is_a(derived_b, if_b) = yes
-
-is_a(derived_c, base) = yes
-is_a(derived_c, derived_a) = yes
-is_a(derived_c, derived_b) = no
-is_a(derived_c, derived_c) = yes
-is_a(derived_c, derived_d) = no
-is_a(derived_c, if_a) = yes
-is_a(derived_c, if_b) = yes
-
-is_a(derived_d, base) = yes
-is_a(derived_d, derived_a) = yes
-is_a(derived_d, derived_b) = no
-is_a(derived_d, derived_c) = yes
-is_a(derived_d, derived_d) = yes
-is_a(derived_d, if_a) = yes
-is_a(derived_d, if_b) = yes
diff --git a/tests/classes/interface_instantiate.phpt b/tests/classes/interface_instantiate.phpt
deleted file mode 100644
index d13bb9a6a0..0000000000
--- a/tests/classes/interface_instantiate.phpt
+++ /dev/null
@@ -1,16 +0,0 @@
---TEST--
-ZE2 An interface cannot be instantiated
---SKIPIF--
-<?php if (version_compare(zend_version(), '2.0.0-dev', '<')) die('skip ZendEngine 2 needed'); ?>
---FILE--
-<?php
-
-interface if_a {
- abstract function f_a();
-}
-
-$t = new if_a();
-
-?>
---EXPECTF--
-Fatal error: Cannot instantiate interface if_a in %s on line %d
diff --git a/tests/classes/interface_member.phpt b/tests/classes/interface_member.phpt
deleted file mode 100644
index 329c0728b5..0000000000
--- a/tests/classes/interface_member.phpt
+++ /dev/null
@@ -1,13 +0,0 @@
---TEST--
-ZE2 An interface cannot have properties
---SKIPIF--
-<?php if (version_compare(zend_version(), '2.0.0-dev', '<')) die('skip ZendEngine 2 needed'); ?>
---FILE--
-<?php
-
-interface if_a {
- public $member;
-}
-?>
---EXPECTF--
-Fatal error: Interfaces may not include member variables in %s on line %d
diff --git a/tests/classes/interface_method.phpt b/tests/classes/interface_method.phpt
deleted file mode 100644
index 3570b35928..0000000000
--- a/tests/classes/interface_method.phpt
+++ /dev/null
@@ -1,15 +0,0 @@
---TEST--
-ZE2 An interface method must be abstract
---SKIPIF--
-<?php if (version_compare(zend_version(), '2.0.0-dev', '<')) die('skip ZendEngine 2 needed'); ?>
---FILE--
-<?php
-
-interface if_a {
- function err() {};
-}
-
-?>
---EXPECTF--
-
-Fatal error: Interface function if_a::err() cannot contain body %s on line %d
diff --git a/tests/classes/interface_method_final.phpt b/tests/classes/interface_method_final.phpt
deleted file mode 100644
index 01e599c5b9..0000000000
--- a/tests/classes/interface_method_final.phpt
+++ /dev/null
@@ -1,15 +0,0 @@
---TEST--
-ZE2 An interface method cannot be final
---SKIPIF--
-<?php if (version_compare(zend_version(), '2.0.0-dev', '<')) die('skip ZendEngine 2 needed'); ?>
---FILE--
-<?php
-
-class if_a {
- abstract final function err();
-}
-
-?>
---EXPECTF--
-
-Fatal error: Cannot use the final modifier on an abstract class member in %s on line %d
diff --git a/tests/classes/interface_method_private.phpt b/tests/classes/interface_method_private.phpt
deleted file mode 100644
index f0f671b524..0000000000
--- a/tests/classes/interface_method_private.phpt
+++ /dev/null
@@ -1,15 +0,0 @@
---TEST--
-ZE2 An interface method cannot be private
---SKIPIF--
-<?php if (version_compare(zend_version(), '2.0.0-dev', '<')) die('skip ZendEngine 2 needed'); ?>
---FILE--
-<?php
-
-interface if_a {
- abstract private function err();
-}
-
-?>
---EXPECTF--
-
-Fatal error: Access type for interface method if_a::err() must be omitted or declared public in %s on line %d
diff --git a/tests/classes/interface_must_be_implemented.phpt b/tests/classes/interface_must_be_implemented.phpt
deleted file mode 100644
index 82ddf24df8..0000000000
--- a/tests/classes/interface_must_be_implemented.phpt
+++ /dev/null
@@ -1,17 +0,0 @@
---TEST--
-ZE2 An interface must be implemented
---SKIPIF--
-<?php if (version_compare(zend_version(), '2.0.0-dev', '<')) die('skip ZendEngine 2 needed'); ?>
---FILE--
-<?php
-
-interface if_a {
- abstract function f_a();
-}
-
-class derived_a implements if_a {
-}
-
-?>
---EXPECTF--
-Fatal error: Class derived_a contains 1 abstract methods and must therefore be declared abstract (if_a::f_a) in %s on line %d
diff --git a/tests/classes/interface_optional_arg.phpt b/tests/classes/interface_optional_arg.phpt
deleted file mode 100755
index 05f2fc41df..0000000000
--- a/tests/classes/interface_optional_arg.phpt
+++ /dev/null
@@ -1,27 +0,0 @@
---TEST--
-ZE2 An interface method allows additional default arguments
---SKIPIF--
-<?php if (version_compare(zend_version(), '2.0.0-dev', '<')) die('skip ZendEngine 2 needed'); ?>
---FILE--
-<?php
-
-error_reporting(4095);
-
-interface test {
- public function bar();
-}
-
-class foo implements test {
-
- public function bar($foo = NULL) {
- echo "foo\n";
- }
-}
-
-$foo = new foo;
-$foo->bar();
-
-?>
---EXPECT--
-foo
-
diff --git a/tests/classes/interfaces_001.phpt b/tests/classes/interfaces_001.phpt
deleted file mode 100644
index 41e1f6776d..0000000000
--- a/tests/classes/interfaces_001.phpt
+++ /dev/null
@@ -1,26 +0,0 @@
---TEST--
-ZE2 interfaces
---SKIPIF--
-<?php if (version_compare(zend_version(), '2.0.0-dev', '<')) die('skip ZendEngine 2 needed'); ?>
---FILE--
-<?php
-
-interface Throwable {
- public function getMessage();
-}
-
-class Exception_foo implements Throwable {
- public $foo = "foo";
-
- public function getMessage() {
- return $this->foo;
- }
-}
-
-$foo = new Exception_foo;
-echo $foo->getMessage() . "\n";
-
-?>
---EXPECT--
-foo
-
diff --git a/tests/classes/interfaces_002.phpt b/tests/classes/interfaces_002.phpt
deleted file mode 100644
index 66d46f5d36..0000000000
--- a/tests/classes/interfaces_002.phpt
+++ /dev/null
@@ -1,29 +0,0 @@
---TEST--
-ZE2 interface with an unimplemented method
---SKIPIF--
-<?php if (version_compare(zend_version(), '2.0.0-dev', '<')) die('skip ZendEngine 2 needed'); ?>
---FILE--
-<?php
-
-interface Throwable {
- public function getMessage();
- public function getErrno();
-}
-
-class Exception_foo implements Throwable {
- public $foo = "foo";
-
- public function getMessage() {
- return $this->foo;
- }
-}
-
-// this should die -- Exception class must be abstract...
-$foo = new Exception_foo;
-echo $foo->getMessage() . "\n";
-
-?>
---EXPECTF--
-
-Fatal error: Class Exception_foo contains 1 abstract methods and must therefore be declared abstract (Throwable::getErrno) in %s on line %d
-
diff --git a/tests/classes/iterators_001.phpt b/tests/classes/iterators_001.phpt
deleted file mode 100755
index 83d635c5df..0000000000
--- a/tests/classes/iterators_001.phpt
+++ /dev/null
@@ -1,201 +0,0 @@
---TEST--
-ZE2 iterators and foreach
---SKIPIF--
-<?php if (version_compare(zend_version(), '2.0.0-dev', '<')) die('skip ZendEngine 2 needed'); ?>
-<?php if (!class_exists('Iterator')) print "skip interface iterator doesn't exist"; ?>
---FILE--
-<?php
-class c_iter implements Iterator {
-
- private $obj;
- private $num = 0;
-
- function __construct($obj) {
- echo __METHOD__ . "\n";
- $this->num = 0;
- $this->obj = $obj;
- }
- function rewind() {
- }
- function valid() {
- $more = $this->num < $this->obj->max;
- echo __METHOD__ . ' = ' .($more ? 'true' : 'false') . "\n";
- return $more;
- }
- function current() {
- echo __METHOD__ . "\n";
- return $this->num;
- }
- function next() {
- echo __METHOD__ . "\n";
- $this->num++;
- }
- function key() {
- echo __METHOD__ . "\n";
- switch($this->num) {
- case 0: return "1st";
- case 1: return "2nd";
- case 2: return "3rd";
- default: return "???";
- }
- }
-}
-
-class c implements IteratorAggregate {
-
- public $max = 3;
-
- function getIterator() {
- echo __METHOD__ . "\n";
- return new c_iter($this);
- }
-}
-
-echo "===Array===\n";
-
-$a = array(0,1,2);
-foreach($a as $v) {
- echo "array:$v\n";
-}
-
-echo "===Manual===\n";
-$t = new c();
-for ($iter = $t->getIterator(); $iter->valid(); $iter->next()) {
- echo $iter->current() . "\n";
-}
-
-echo "===foreach/std===\n";
-foreach($t as $v) {
- echo "object:$v\n";
-}
-
-echo "===foreach/rec===\n";
-foreach($t as $v) {
- foreach($t as $w) {
- echo "double:$v:$w\n";
- }
-}
-
-echo "===foreach/key===\n";
-foreach($t as $i => $v) {
- echo "object:$i=>$v\n";
-}
-
-print "Done\n";
-exit(0);
-?>
---EXPECT--
-===Array===
-array:0
-array:1
-array:2
-===Manual===
-c::getIterator
-c_iter::__construct
-c_iter::valid = true
-c_iter::current
-0
-c_iter::next
-c_iter::valid = true
-c_iter::current
-1
-c_iter::next
-c_iter::valid = true
-c_iter::current
-2
-c_iter::next
-c_iter::valid = false
-===foreach/std===
-c::getIterator
-c_iter::__construct
-c_iter::valid = true
-c_iter::current
-object:0
-c_iter::next
-c_iter::valid = true
-c_iter::current
-object:1
-c_iter::next
-c_iter::valid = true
-c_iter::current
-object:2
-c_iter::next
-c_iter::valid = false
-===foreach/rec===
-c::getIterator
-c_iter::__construct
-c_iter::valid = true
-c_iter::current
-c::getIterator
-c_iter::__construct
-c_iter::valid = true
-c_iter::current
-double:0:0
-c_iter::next
-c_iter::valid = true
-c_iter::current
-double:0:1
-c_iter::next
-c_iter::valid = true
-c_iter::current
-double:0:2
-c_iter::next
-c_iter::valid = false
-c_iter::next
-c_iter::valid = true
-c_iter::current
-c::getIterator
-c_iter::__construct
-c_iter::valid = true
-c_iter::current
-double:1:0
-c_iter::next
-c_iter::valid = true
-c_iter::current
-double:1:1
-c_iter::next
-c_iter::valid = true
-c_iter::current
-double:1:2
-c_iter::next
-c_iter::valid = false
-c_iter::next
-c_iter::valid = true
-c_iter::current
-c::getIterator
-c_iter::__construct
-c_iter::valid = true
-c_iter::current
-double:2:0
-c_iter::next
-c_iter::valid = true
-c_iter::current
-double:2:1
-c_iter::next
-c_iter::valid = true
-c_iter::current
-double:2:2
-c_iter::next
-c_iter::valid = false
-c_iter::next
-c_iter::valid = false
-===foreach/key===
-c::getIterator
-c_iter::__construct
-c_iter::valid = true
-c_iter::current
-c_iter::key
-object:1st=>0
-c_iter::next
-c_iter::valid = true
-c_iter::current
-c_iter::key
-object:2nd=>1
-c_iter::next
-c_iter::valid = true
-c_iter::current
-c_iter::key
-object:3rd=>2
-c_iter::next
-c_iter::valid = false
-Done
diff --git a/tests/classes/iterators_002.phpt b/tests/classes/iterators_002.phpt
deleted file mode 100755
index 39fb5eabeb..0000000000
--- a/tests/classes/iterators_002.phpt
+++ /dev/null
@@ -1,114 +0,0 @@
---TEST--
-ZE2 iterators and break
---SKIPIF--
-<?php if (version_compare(zend_version(), '2.0.0-dev', '<')) die('skip ZendEngine 2 needed'); ?>
-<?php if (!class_exists('Iterator')) print "skip interface iterator doesn't exist"; ?>
---FILE--
-<?php
-class c_iter implements Iterator {
-
- private $obj;
- private $num = 0;
-
- function __construct($obj) {
- echo __METHOD__ . "\n";
- $this->obj = $obj;
- }
- function rewind() {
- echo __METHOD__ . "\n";
- $this->num = 0;
- }
- function valid() {
- $more = $this->num < $this->obj->max;
- echo __METHOD__ . ' = ' .($more ? 'true' : 'false') . "\n";
- return $more;
- }
- function current() {
- echo __METHOD__ . "\n";
- return $this->num;
- }
- function next() {
- echo __METHOD__ . "\n";
- $this->num++;
- }
- function key() {
- echo __METHOD__ . "\n";
- switch($this->num) {
- case 0: return "1st";
- case 1: return "2nd";
- case 2: return "3rd";
- default: return "???";
- }
- }
- function __destruct() {
- echo __METHOD__ . "\n";
- }
-}
-
-class c implements IteratorAggregate {
-
- public $max = 3;
-
- function getIterator() {
- echo __METHOD__ . "\n";
- return new c_iter($this);
- }
- function __destruct() {
- echo __METHOD__ . "\n";
- }
-}
-
-$t = new c();
-
-foreach($t as $k => $v) {
- foreach($t as $w) {
- echo "double:$v:$w\n";
- break;
- }
-}
-
-unset($t);
-
-print "Done\n";
-?>
---EXPECT--
-c::getIterator
-c_iter::__construct
-c_iter::rewind
-c_iter::valid = true
-c_iter::current
-c_iter::key
-c::getIterator
-c_iter::__construct
-c_iter::rewind
-c_iter::valid = true
-c_iter::current
-double:0:0
-c_iter::__destruct
-c_iter::next
-c_iter::valid = true
-c_iter::current
-c_iter::key
-c::getIterator
-c_iter::__construct
-c_iter::rewind
-c_iter::valid = true
-c_iter::current
-double:1:0
-c_iter::__destruct
-c_iter::next
-c_iter::valid = true
-c_iter::current
-c_iter::key
-c::getIterator
-c_iter::__construct
-c_iter::rewind
-c_iter::valid = true
-c_iter::current
-double:2:0
-c_iter::__destruct
-c_iter::next
-c_iter::valid = false
-c_iter::__destruct
-c::__destruct
-Done
diff --git a/tests/classes/iterators_003.phpt b/tests/classes/iterators_003.phpt
deleted file mode 100755
index d794782632..0000000000
--- a/tests/classes/iterators_003.phpt
+++ /dev/null
@@ -1,116 +0,0 @@
---TEST--
-ZE2 iterators and break
---SKIPIF--
-<?php if (version_compare(zend_version(), '2.0.0-dev', '<')) die('skip ZendEngine 2 needed'); ?>
-<?php if (!class_exists('Iterator')) print "skip interface iterator doesn't exist"; ?>
---FILE--
-<?php
-class c_iter implements Iterator {
-
- private $obj;
- private $num = 0;
-
- function __construct($obj) {
- echo __METHOD__ . "\n";
- $this->obj = $obj;
- }
- function rewind() {
- echo __METHOD__ . "\n";
- }
- function valid() {
- $more = $this->num < $this->obj->max;
- echo __METHOD__ . ' = ' .($more ? 'true' : 'false') . "\n";
- return $more;
- }
- function current() {
- echo __METHOD__ . "\n";
- return $this->num;
- }
- function next() {
- echo __METHOD__ . "\n";
- $this->num++;
- }
- function key() {
- return $this->num;
- }
-}
-
-class c implements IteratorAggregate {
-
- public $max = 4;
-
- function getIterator() {
- echo __METHOD__ . "\n";
- return new c_iter($this);
- }
-}
-
-$t = new c();
-
-foreach($t as $v) {
- if ($v == 0) {
- echo "continue outer\n";
- continue;
- }
- foreach($t as $w) {
- if ($w == 1) {
- echo "continue inner\n";
- continue;
- }
- if ($w == 2) {
- echo "break inner\n";
- break;
- }
- echo "double:$v:$w\n";
- }
- if ($v == 2) {
- echo "break outer\n";
- break;
- }
-}
-
-print "Done\n";
-?>
---EXPECT--
-c::getIterator
-c_iter::__construct
-c_iter::rewind
-c_iter::valid = true
-c_iter::current
-continue outer
-c_iter::next
-c_iter::valid = true
-c_iter::current
-c::getIterator
-c_iter::__construct
-c_iter::rewind
-c_iter::valid = true
-c_iter::current
-double:1:0
-c_iter::next
-c_iter::valid = true
-c_iter::current
-continue inner
-c_iter::next
-c_iter::valid = true
-c_iter::current
-break inner
-c_iter::next
-c_iter::valid = true
-c_iter::current
-c::getIterator
-c_iter::__construct
-c_iter::rewind
-c_iter::valid = true
-c_iter::current
-double:2:0
-c_iter::next
-c_iter::valid = true
-c_iter::current
-continue inner
-c_iter::next
-c_iter::valid = true
-c_iter::current
-break inner
-break outer
-Done
diff --git a/tests/classes/iterators_004.phpt b/tests/classes/iterators_004.phpt
deleted file mode 100755
index 6555a656ab..0000000000
--- a/tests/classes/iterators_004.phpt
+++ /dev/null
@@ -1,62 +0,0 @@
---TEST--
-ZE2 iterators must be implemented
---SKIPIF--
-<?php if (version_compare(zend_version(), '2.0.0-dev', '<')) die('skip ZendEngine 2 needed'); ?>
-<?php if (!class_exists('iterator')) print "skip interface iterator doesn't exist"; ?>
---FILE--
-<?php
-
-echo "1st try\n";
-
-class c1 {}
-
-$obj = new c1();
-
-foreach($obj as $w) {
- echo "object:$w\n";
-}
-
-echo "2nd try\n";
-
-class c2 {
-
- public $max = 3;
- public $num = 0;
-
- function current() {
- echo __METHOD__ . "\n";
- return $this->num;
- }
- function next() {
- echo __METHOD__ . "\n";
- $this->num++;
- }
- function valid() {
- echo __METHOD__ . "\n";
- return $this->num < $this->max;
- }
- function key() {
- echo __METHOD__ . "\n";
- switch($this->num) {
- case 0: return "1st";
- case 1: return "2nd";
- case 2: return "3rd";
- default: return "???";
- }
- }
-}
-
-$obj = new c2();
-
-foreach($obj as $v => $w) {
- echo "object:$v=>$w\n";
-}
-
-print "Done\n";
-?>
---EXPECTF--
-1st try
-2nd try
-object:max=>3
-object:num=>0
-Done
diff --git a/tests/classes/iterators_005.phpt b/tests/classes/iterators_005.phpt
deleted file mode 100755
index 6c1dadcc1a..0000000000
--- a/tests/classes/iterators_005.phpt
+++ /dev/null
@@ -1,20 +0,0 @@
---TEST--
-ZE2 iterators cannot implement Traversable alone
---SKIPIF--
-<?php if (version_compare(zend_version(), '2.0.0-dev', '<')) die('skip ZendEngine 2 needed'); ?>
-<?php if (!class_exists('iterator')) print "skip interface iterator doesn't exist"; ?>
---FILE--
-<?php
-
-class test implements Traversable {
-}
-
-$obj = new test;
-
-foreach($obj as $v);
-
-print "Done\n";
-/* the error doesn't show the filename but 'Unknown' */
-?>
---EXPECTF--
-Fatal error: Class test must implement interface Traversable as part of either Iterator or IteratorAggregate in %s on line %d
diff --git a/tests/classes/iterators_006.phpt b/tests/classes/iterators_006.phpt
deleted file mode 100644
index 47fa69087a..0000000000
--- a/tests/classes/iterators_006.phpt
+++ /dev/null
@@ -1,87 +0,0 @@
---TEST--
-ZE2 iterators and array wrapping
---SKIPIF--
-<?php if (version_compare(zend_version(), '2.0.0-dev', '<')) die('skip ZendEngine 2 is needed'); ?>
---FILE--
-<?php
-
-class ai implements Iterator {
-
- private $array;
-
- function __construct() {
- $this->array = array('foo', 'bar', 'baz');
- }
-
- function rewind() {
- reset($this->array);
- $this->next();
- }
-
- function valid() {
- return $this->key !== NULL;
- }
-
- function key() {
- return $this->key;
- }
-
- function current() {
- return $this->current;
- }
-
- function next() {
- list($this->key, $this->current) = each($this->array);
-// list($key, $current) = each($this->array);
-// $this->key = $key;
-// $this->current = $current;
- }
-}
-
-class a implements IteratorAggregate {
-
- public function getIterator() {
- return new ai();
- }
-}
-
-$array = new a();
-
-foreach ($array as $property => $value) {
- print "$property: $value\n";
-}
-
-#$array = $array->getIterator();
-#$array->rewind();
-#$array->valid();
-#var_dump($array->key());
-#var_dump($array->current());
-echo "===2nd===\n";
-
-$array = new ai();
-
-foreach ($array as $property => $value) {
- print "$property: $value\n";
-}
-
-echo "===3rd===\n";
-
-foreach ($array as $property => $value) {
- print "$property: $value\n";
-}
-
-?>
-===DONE===
---EXPECT--
-0: foo
-1: bar
-2: baz
-===2nd===
-0: foo
-1: bar
-2: baz
-===3rd===
-0: foo
-1: bar
-2: baz
-===DONE=== \ No newline at end of file
diff --git a/tests/classes/object_reference_001.phpt b/tests/classes/object_reference_001.phpt
deleted file mode 100644
index 74acb5de13..0000000000
--- a/tests/classes/object_reference_001.phpt
+++ /dev/null
@@ -1,27 +0,0 @@
---TEST--
-ZE2 object references
---SKIPIF--
-<?php if (version_compare(zend_version(), '2.0.0-dev', '<')) die('skip ZendEngine 2 needed'); ?>
---FILE--
-<?php
-
-class Foo {
- public $name;
-
- function Foo() {
- $this->name = "I'm Foo!\n";
- }
-}
-
-$foo = new Foo;
-echo $foo->name;
-$bar = $foo;
-$bar->name = "I'm Bar!\n";
-
-// In ZE1, we would expect "I'm Foo!"
-echo $foo->name;
-
-?>
---EXPECT--
-I'm Foo!
-I'm Bar!
diff --git a/tests/classes/private_001.phpt b/tests/classes/private_001.phpt
deleted file mode 100644
index 310b9c6434..0000000000
--- a/tests/classes/private_001.phpt
+++ /dev/null
@@ -1,26 +0,0 @@
---TEST--
-ZE2 A private method can only be called inside the class
---SKIPIF--
-<?php if (version_compare(zend_version(), '2.0.0-dev', '<')) die('skip ZendEngine 2 needed'); ?>
---FILE--
-<?php
-
-class pass {
- private static function show() {
- echo "Call show()\n";
- }
-
- public static function do_show() {
- pass::show();
- }
-}
-
-pass::do_show();
-pass::show();
-
-echo "Done\n"; // shouldn't be displayed
-?>
---EXPECTF--
-Call show()
-
-Fatal error: Call to private method pass::show() from context '' in %s on line %d
diff --git a/tests/classes/private_002.phpt b/tests/classes/private_002.phpt
deleted file mode 100644
index 258fd3a17d..0000000000
--- a/tests/classes/private_002.phpt
+++ /dev/null
@@ -1,35 +0,0 @@
---TEST--
-ZE2 A private method cannot be called in another class
---SKIPIF--
-<?php if (version_compare(zend_version(), '2.0.0-dev', '<')) die('skip ZendEngine 2 needed'); ?>
---FILE--
-<?php
-
-class pass {
- private static function show() {
- echo "Call pass::show()\n";
- }
-
- public static function do_show() {
- pass::show();
- }
-}
-
-pass::do_show();
-
-class fail {
- public static function show() {
- echo "Call fail::show()\n";
- pass::show();
- }
-}
-
-fail::show();
-
-echo "Done\n"; // shouldn't be displayed
-?>
---EXPECTF--
-Call pass::show()
-Call fail::show()
-
-Fatal error: Call to private method pass::show() from context 'fail' in %s on line %d
diff --git a/tests/classes/private_003.phpt b/tests/classes/private_003.phpt
deleted file mode 100644
index 716efbc8c7..0000000000
--- a/tests/classes/private_003.phpt
+++ /dev/null
@@ -1,36 +0,0 @@
---TEST--
-ZE2 A private method cannot be called in a derived class
---SKIPIF--
-<?php if (version_compare(zend_version(), '2.0.0-dev', '<')) die('skip ZendEngine 2 needed'); ?>
---FILE--
-<?php
-ini_set("error_reporting",2039);
-class pass {
- private static function show() {
- echo "Call show()\n";
- }
-
- protected static function good() {
- pass::show();
- }
-}
-
-class fail extends pass {
- static function ok() {
- pass::good();
- }
-
- static function not_ok() {
- pass::show();
- }
-}
-
-fail::ok();
-fail::not_ok(); // calling a private function
-
-echo "Done\n"; // shouldn't be displayed
-?>
---EXPECTF--
-Call show()
-
-Fatal error: Call to private method pass::show() from context 'fail' in %s on line %d
diff --git a/tests/classes/private_003b.phpt b/tests/classes/private_003b.phpt
deleted file mode 100644
index 780b2e6b4c..0000000000
--- a/tests/classes/private_003b.phpt
+++ /dev/null
@@ -1,37 +0,0 @@
---TEST--
-ZE2 A private method cannot be called in a derived class
---SKIPIF--
-<?php if (version_compare(zend_version(), '2.0.0-dev', '<')) die('skip ZendEngine 2 needed'); ?>
---FILE--
-<?php
-
-class pass {
- private function show() {
- echo "Call show()\n";
- }
-
- protected function good() {
- $this->show();
- }
-}
-
-class fail extends pass {
- public function ok() {
- $this->good();
- }
-
- public function not_ok() {
- $this->show();
- }
-}
-
-$t = new fail();
-$t->ok();
-$t->not_ok(); // calling a private function
-
-echo "Done\n"; // shouldn't be displayed
-?>
---EXPECTF--
-Call show()
-
-Fatal error: Call to private method pass::show() from context 'fail' in %s on line %d
diff --git a/tests/classes/private_004.phpt b/tests/classes/private_004.phpt
deleted file mode 100644
index 027434ab87..0000000000
--- a/tests/classes/private_004.phpt
+++ /dev/null
@@ -1,32 +0,0 @@
---TEST--
-ZE2 A private method cannot be called in a derived class
---SKIPIF--
-<?php if (version_compare(zend_version(), '2.0.0-dev', '<')) die('skip ZendEngine 2 needed'); ?>
---FILE--
-<?php
-
-class pass {
- private static function show() {
- echo "Call show()\n";
- }
-
- public static function do_show() {
- pass::show();
- }
-}
-
-class fail extends pass {
- static function do_show() {
- fail::show();
- }
-}
-
-pass::do_show();
-fail::do_show();
-
-echo "Done\n"; // shouldn't be displayed
-?>
---EXPECTF--
-Call show()
-
-Fatal error: Call to private method pass::show() from context 'fail' in %s on line %d
diff --git a/tests/classes/private_004b.phpt b/tests/classes/private_004b.phpt
deleted file mode 100644
index ea3fe610d3..0000000000
--- a/tests/classes/private_004b.phpt
+++ /dev/null
@@ -1,35 +0,0 @@
---TEST--
-ZE2 A private method cannot be called in a derived class
---SKIPIF--
-<?php if (version_compare(zend_version(), '2.0.0-dev', '<')) die('skip ZendEngine 2 needed'); ?>
---FILE--
-<?php
-
-class pass {
- private function show() {
- echo "Call show()\n";
- }
-
- public function do_show() {
- $this->show();
- }
-}
-
-class fail extends pass {
- function do_show() {
- $this->show();
- }
-}
-
-$t = new pass();
-$t->do_show();
-
-$t2 = new fail();
-$t2->do_show();
-
-echo "Done\n"; // shouldn't be displayed
-?>
---EXPECTF--
-Call show()
-
-Fatal error: Call to private method pass::show() from context 'fail' in %s on line %d \ No newline at end of file
diff --git a/tests/classes/private_005.phpt b/tests/classes/private_005.phpt
deleted file mode 100644
index 49b2bee3ba..0000000000
--- a/tests/classes/private_005.phpt
+++ /dev/null
@@ -1,32 +0,0 @@
---TEST--
-ZE2 A private method cannot be called in a derived class
---SKIPIF--
-<?php if (version_compare(zend_version(), '2.0.0-dev', '<')) die('skip ZendEngine 2 needed'); ?>
---FILE--
-<?php
-
-class pass {
- private static function show() {
- echo "Call show()\n";
- }
-
- public static function do_show() {
- pass::show();
- }
-}
-
-class fail extends pass {
- static function do_show() {
- pass::show();
- }
-}
-
-pass::do_show();
-fail::do_show();
-
-echo "Done\n"; // shouldn't be displayed
-?>
---EXPECTF--
-Call show()
-
-Fatal error: Call to private method pass::show() from context 'fail' in %s on line %d
diff --git a/tests/classes/private_005b.phpt b/tests/classes/private_005b.phpt
deleted file mode 100644
index ea3fe610d3..0000000000
--- a/tests/classes/private_005b.phpt
+++ /dev/null
@@ -1,35 +0,0 @@
---TEST--
-ZE2 A private method cannot be called in a derived class
---SKIPIF--
-<?php if (version_compare(zend_version(), '2.0.0-dev', '<')) die('skip ZendEngine 2 needed'); ?>
---FILE--
-<?php
-
-class pass {
- private function show() {
- echo "Call show()\n";
- }
-
- public function do_show() {
- $this->show();
- }
-}
-
-class fail extends pass {
- function do_show() {
- $this->show();
- }
-}
-
-$t = new pass();
-$t->do_show();
-
-$t2 = new fail();
-$t2->do_show();
-
-echo "Done\n"; // shouldn't be displayed
-?>
---EXPECTF--
-Call show()
-
-Fatal error: Call to private method pass::show() from context 'fail' in %s on line %d \ No newline at end of file
diff --git a/tests/classes/private_006.phpt b/tests/classes/private_006.phpt
deleted file mode 100644
index 0bb2b3fe4b..0000000000
--- a/tests/classes/private_006.phpt
+++ /dev/null
@@ -1,41 +0,0 @@
---TEST--
-ZE2 A private method can be overwritten in a second derived class
---SKIPIF--
-<?php if (version_compare(zend_version(), '2.0.0-dev', '<')) die('skip ZendEngine 2 needed'); ?>
---FILE--
-<?php
-class first {
- private static function show() {
- echo "Call show()\n";
- }
-
- public static function do_show() {
- first::show();
- }
-}
-
-first::do_show();
-
-class second extends first {
-}
-
-second::do_show();
-
-class third extends second {
-}
-
-third::do_show();
-
-class fail extends third {
- static function show() { // cannot be redeclared
- echo "Call show()\n";
- }
-}
-
-echo "Done\n";
-?>
---EXPECTF--
-Call show()
-Call show()
-Call show()
-Done
diff --git a/tests/classes/private_006b.phpt b/tests/classes/private_006b.phpt
deleted file mode 100644
index 950f16a3c4..0000000000
--- a/tests/classes/private_006b.phpt
+++ /dev/null
@@ -1,41 +0,0 @@
---TEST--
-ZE2 A private method can be overwritten in a second derived class
---SKIPIF--
-<?php if (version_compare(zend_version(), '2.0.0-dev', '<')) die('skip ZendEngine 2 needed'); ?>
---FILE--
-<?php
-
-class first {
- private function show() {
- echo "Call show()\n";
- }
-
- public function do_show() {
- $this->show();
- }
-}
-
-$t1 = new first();
-$t1->do_show();
-
-class second extends first {
-}
-
-//$t2 = new second();
-//$t2->do_show();
-
-class third extends second {
- private function show() {
- echo "Call show()\n";
- }
-}
-
-$t3 = new third();
-$t3->do_show();
-
-echo "Done\n";
-?>
---EXPECTF--
-Call show()
-Call show()
-Done \ No newline at end of file
diff --git a/tests/classes/private_007.phpt b/tests/classes/private_007.phpt
deleted file mode 100644
index 73a38c4562..0000000000
--- a/tests/classes/private_007.phpt
+++ /dev/null
@@ -1,30 +0,0 @@
---TEST--
-ZE2 A derived class does not know about privates of ancestors
---SKIPIF--
-<?php if (version_compare(zend_version(), '2.0.0-dev', '<')) die('skip ZendEngine 2 needed'); ?>
---FILE--
-<?php
-
-class Bar {
- public static function pub() {
- Bar::priv();
- }
- private static function priv() {
- echo "Bar::priv()\n";
- }
-}
-class Foo extends Bar {
- public static function priv() {
- echo "Foo::priv()\n";
- }
-}
-
-Foo::pub();
-Foo::priv();
-
-echo "Done\n";
-?>
---EXPECTF--
-Bar::priv()
-Foo::priv()
-Done
diff --git a/tests/classes/private_007b.phpt b/tests/classes/private_007b.phpt
deleted file mode 100644
index 02ddc25dec..0000000000
--- a/tests/classes/private_007b.phpt
+++ /dev/null
@@ -1,31 +0,0 @@
---TEST--
-ZE2 A derived class does not know about privates of ancestors
---SKIPIF--
-<?php if (version_compare(zend_version(), '2.0.0-dev', '<')) die('skip ZendEngine 2 needed'); ?>
---FILE--
-<?php
-
-class Bar {
- public function pub() {
- $this->priv();
- }
- private function priv() {
- echo "Bar::priv()\n";
- }
-}
-class Foo extends Bar {
- public function priv() {
- echo "Foo::priv()\n";
- }
-}
-
-$obj = new Foo();
-$obj->pub();
-$obj->priv();
-
-echo "Done\n";
-?>
---EXPECTF--
-Bar::priv()
-Foo::priv()
-Done
diff --git a/tests/classes/private_members.phpt b/tests/classes/private_members.phpt
deleted file mode 100755
index 1832ea0c43..0000000000
--- a/tests/classes/private_members.phpt
+++ /dev/null
@@ -1,103 +0,0 @@
---TEST--
-ZE2 A private member is
---SKIPIF--
-<?php if (version_compare(zend_version(), '2.0.0-dev', '<')) die('skip ZendEngine 2 needed'); ?>
---FILE--
-<?php
-
-class base
-{
- private $member;
-
- function __construct()
- {
- echo __METHOD__ . "(begin)\n";
- $this->member = 'base::member';
- $this->test();
- echo __METHOD__ . "(end)\n";
- }
-
- function test()
- {
- echo __METHOD__ . "\n";
- print_r($this);
- }
-}
-
-class derived extends base
-{
- public $member = 'derived::member (default)';
-
- function __construct()
- {
- echo __METHOD__ . "(begin)\n";
- parent::__construct();
- parent::test();
- $this->test();
- $this->member = 'derived::member';
- echo __METHOD__ . "(end)\n";
- }
-
- function test()
- {
- parent::test();
- echo __METHOD__ . "\n";
- print_r($this);
- }
-}
-
-$t = new derived;
-$t->test();
-unset($t);
-
-echo "Done\n";
-
-?>
---EXPECTF--
-derived::__construct(begin)
-base::__construct(begin)
-base::test
-derived Object
-(
- [member] => derived::member (default)
- [member:private] => base::member
-)
-derived::test
-derived Object
-(
- [member] => derived::member (default)
- [member:private] => base::member
-)
-base::__construct(end)
-base::test
-derived Object
-(
- [member] => derived::member (default)
- [member:private] => base::member
-)
-base::test
-derived Object
-(
- [member] => derived::member (default)
- [member:private] => base::member
-)
-derived::test
-derived Object
-(
- [member] => derived::member (default)
- [member:private] => base::member
-)
-derived::__construct(end)
-base::test
-derived Object
-(
- [member] => derived::member
- [member:private] => base::member
-)
-derived::test
-derived Object
-(
- [member] => derived::member
- [member:private] => base::member
-)
-Done
diff --git a/tests/classes/private_redeclare.phpt b/tests/classes/private_redeclare.phpt
deleted file mode 100755
index e3061f1136..0000000000
--- a/tests/classes/private_redeclare.phpt
+++ /dev/null
@@ -1,38 +0,0 @@
---TEST--
-ZE2 A derived class does not know anything about inherited private methods
---FILE--
-<?php
-class base {
- private function show() {
- echo "base\n";
- }
- function test() {
- $this->show();
- }
-}
-
-$t = new base();
-$t->test();
-
-class derived extends base {
- function show() {
- echo "derived\n";
- }
- function test() {
- echo "test\n";
- $this->show();
- parent::test();
- parent::show();
- }
-}
-
-$t = new derived();
-$t->test();
-?>
---EXPECTF--
-base
-test
-derived
-base
-
-Fatal error: Call to private method base::show() from context 'derived' in %s on line %d
diff --git a/tests/classes/protected_001.phpt b/tests/classes/protected_001.phpt
deleted file mode 100644
index 19872c6f16..0000000000
--- a/tests/classes/protected_001.phpt
+++ /dev/null
@@ -1,26 +0,0 @@
---TEST--
-ZE2 A protected method can only be called inside the class
---SKIPIF--
-<?php if (version_compare(zend_version(), '2.0.0-dev', '<')) die('skip ZendEngine 2 needed'); ?>
---FILE--
-<?php
-
-class pass {
- protected static function fail() {
- echo "Call fail()\n";
- }
-
- public static function good() {
- pass::fail();
- }
-}
-
-pass::good();
-pass::fail();// must fail because we are calling from outside of class pass
-
-echo "Done\n"; // shouldn't be displayed
-?>
---EXPECTF--
-Call fail()
-
-Fatal error: Call to protected method pass::fail() from context '' in %s on line %d
diff --git a/tests/classes/protected_001b.phpt b/tests/classes/protected_001b.phpt
deleted file mode 100644
index 4d24a926ea..0000000000
--- a/tests/classes/protected_001b.phpt
+++ /dev/null
@@ -1,27 +0,0 @@
---TEST--
-ZE2 A protected method can only be called inside the class
---SKIPIF--
-<?php if (version_compare(zend_version(), '2.0.0-dev', '<')) die('skip ZendEngine 2 needed'); ?>
---FILE--
-<?php
-
-class pass {
- protected function fail() {
- echo "Call fail()\n";
- }
-
- public function good() {
- $this->fail();
- }
-}
-
-$t = new pass();
-$t->good();
-$t->fail();// must fail because we are calling from outside of class pass
-
-echo "Done\n"; // shouldn't be displayed
-?>
---EXPECTF--
-Call fail()
-
-Fatal error: Call to protected method pass::fail() from context '' in %s on line %d
diff --git a/tests/classes/protected_002.phpt b/tests/classes/protected_002.phpt
deleted file mode 100644
index f26ef9c495..0000000000
--- a/tests/classes/protected_002.phpt
+++ /dev/null
@@ -1,35 +0,0 @@
---TEST--
-ZE2 A protected method cannot be called in another class
---SKIPIF--
-<?php if (version_compare(zend_version(), '2.0.0-dev', '<')) die('skip ZendEngine 2 needed'); ?>
---FILE--
-<?php
-
-class pass {
- protected static function show() {
- echo "Call pass::show()\n";
- }
-
- public static function do_show() {
- pass::show();
- }
-}
-
-pass::do_show();
-
-class fail {
- public static function show() {
- echo "Call fail::show()\n";
- pass::show();
- }
-}
-
-fail::show();
-
-echo "Done\n"; // shouldn't be displayed
-?>
---EXPECTF--
-Call pass::show()
-Call fail::show()
-
-Fatal error: Call to protected method pass::show() from context 'fail' in %s on line %d
diff --git a/tests/classes/singleton_001.phpt b/tests/classes/singleton_001.phpt
deleted file mode 100644
index ee729b980c..0000000000
--- a/tests/classes/singleton_001.phpt
+++ /dev/null
@@ -1,37 +0,0 @@
---TEST--
-ZE2 singleton
---SKIPIF--
-<?php if (version_compare(zend_version(), '2.0.0-dev', '<')) die('skip ZendEngine 2 needed'); ?>
---FILE--
-<?php
-
-class Counter {
- private $counter = 0;
-
- function increment_and_print() {
- echo ++$this->counter;
- echo "\n";
- }
-}
-
-
-class SingletonCounter {
- private static $m_instance = NULL;
-
- static function Instance() {
- if (self::$m_instance == NULL) {
- self::$m_instance = new Counter();
- }
- return self::$m_instance;
- }
-}
-
-SingletonCounter::Instance()->increment_and_print();
-SingletonCounter::Instance()->increment_and_print();
-SingletonCounter::Instance()->increment_and_print();
-
-?>
---EXPECT--
-1
-2
-3
diff --git a/tests/classes/static_mix_1.phpt b/tests/classes/static_mix_1.phpt
deleted file mode 100644
index ecc9c01a28..0000000000
--- a/tests/classes/static_mix_1.phpt
+++ /dev/null
@@ -1,26 +0,0 @@
---TEST--
-ZE2 You cannot overload a static method with a non static method
---SKIPIF--
-<?php if (version_compare(zend_version(), '2.0.0-dev', '<')) die('skip ZendEngine 2 needed'); ?>
---FILE--
-<?php
-
-class pass {
- static function show() {
- echo "Call to function pass::show()\n";
- }
-}
-
-class fail extends pass {
- function show() {
- echo "Call to function fail::show()\n";
- }
-}
-
-pass::show();
-fail::show();
-
-echo "Done\n"; // shouldn't be displayed
-?>
---EXPECTF--
-Fatal error: Cannot make static method pass::show() non static in class fail in %s on line %d \ No newline at end of file
diff --git a/tests/classes/static_mix_2.phpt b/tests/classes/static_mix_2.phpt
deleted file mode 100644
index bbdaedf50a..0000000000
--- a/tests/classes/static_mix_2.phpt
+++ /dev/null
@@ -1,27 +0,0 @@
---TEST--
-ZE2 You cannot overload a non static method with a static method
---SKIPIF--
-<?php if (version_compare(zend_version(), '2.0.0-dev', '<')) die('skip ZendEngine 2 needed'); ?>
---FILE--
-<?php
-
-class pass {
- function show() {
- echo "Call to function pass::show()\n";
- }
-}
-
-class fail extends pass {
- static function show() {
- echo "Call to function fail::show()\n";
- }
-}
-
-$t = new pass();
-$t->show();
-fail::show();
-
-echo "Done\n"; // shouldn't be displayed
-?>
---EXPECTF--
-Fatal error: Cannot make non static method pass::show() static in class fail in %s on line %d \ No newline at end of file
diff --git a/tests/classes/static_properties_001.phpt b/tests/classes/static_properties_001.phpt
deleted file mode 100755
index 1c34f68fc5..0000000000
--- a/tests/classes/static_properties_001.phpt
+++ /dev/null
@@ -1,27 +0,0 @@
---TEST--
-ZE2 Initializing static properties to arrays
---SKIPIF--
-<?php if (version_compare(zend_version(), '2.0.0-dev', '<')) die('skip ZendEngine 2 needed'); ?>
---FILE--
-<?php
-
-class test {
- static public $ar = array();
-}
-
-var_dump(test::$ar);
-
-test::$ar[] = 1;
-
-var_dump(test::$ar);
-
-echo "Done\n";
-?>
---EXPECTF--
-array(0) {
-}
-array(1) {
- [0]=>
- int(1)
-}
-Done
diff --git a/tests/classes/this.phpt b/tests/classes/this.phpt
deleted file mode 100755
index 1d9c6236e4..0000000000
--- a/tests/classes/this.phpt
+++ /dev/null
@@ -1,54 +0,0 @@
---TEST--
-ZE2 $this cannot be exchanged
---SKIPIF--
-<?php if (version_compare(zend_version(), '2.0.0-dev', '<')) die('skip ZendEngine 2 needed'); ?>
---FILE--
-<?php
-
-/* please don't shorten this test. It shows what would happen if
- * the fatal error would have been a warning.
- */
-class Foo
-{
- function replace($other)
- {
- echo __METHOD__ . "\n";
- $this = $other;
- print $this->prop;
- print $other->prop;
- }
-
- function indirect($other)
- {
- echo __METHOD__ . "\n";
- $this = $other;
- $result = $this = $other;
- print $result->prop;
- print $this->prop;
- }
-
- function retrieve(&$other)
- {
- echo __METHOD__ . "\n";
- $other = $this;
- }
-}
-
-$object = new Foo;
-$object->prop = "Hello\n";
-
-$other = new Foo;
-$other->prop = "World\n";
-
-$object->replace($other);
-$object->indirect($other);
-
-print $object->prop; // still shows 'Hello'
-
-$object->retrieve($other);
-print $other->prop; // shows 'Hello'
-
-?>
-===DONE===
---EXPECTF--
-Fatal error: Cannot re-assign $this in %sthis.php on line %d
diff --git a/tests/classes/tostring.phpt b/tests/classes/tostring.phpt
deleted file mode 100644
index 7253cd4c7b..0000000000
--- a/tests/classes/tostring.phpt
+++ /dev/null
@@ -1,86 +0,0 @@
---TEST--
-ZE2 __toString()
---SKIPIF--
-<?php if (version_compare(zend_version(), '2.0.0-dev', '<')) die('skip ZendEngine 2 needed'); ?>
---FILE--
-<?php
-
-class test1 {
-}
-
-class test2 {
- function __toString() {
- echo __METHOD__ . "()\n";
- return "Converted\n";
- }
-}
-
-echo "====test1====\n";
-$o = new test1;
-print_r($o);
-var_dump((string)$o);
-var_dump($o);
-
-echo "====test2====\n";
-$o = new test2;
-print_r($o);
-print $o;
-var_dump($o);
-echo "====test3====\n";
-echo $o;
-
-echo "====test4====\n";
-echo "string:".$o;
-
-echo "====test5====\n";
-echo 1 . $o;
-
-echo "====test6====\n";
-echo $o.$o;
-
-echo "====test7====\n";
-$ar = array();
-$ar[$o->__toString()] = "ERROR";
-echo $ar[$o];
-
-echo "====test8====\n";
-var_dump(trim($o));
-var_dump(trim((string)$o));
-
-echo "====test9====\n";
-echo sprintf("%s", $o);
-?>
-====DONE!====
---EXPECTF--
-====test1====
-test1 Object
-(
-)
-string(1%d) "Object id #%d"
-object(test1)#%d (%d) {
-}
-====test2====
-test2 Object
-(
-)
-test2::__toString()
-Converted
-object(test2)#%d (%d) {
-}
-====test3====
-test2::__toString()
-Converted
-====test4====
-string:Object id #%d====test5====
-1Object id #%d====test6====
-Object id #%dObject id #2====test7====
-test2::__toString()
-
-Warning: Illegal offset type in %stostring.php on line %d
-====test8====
-
-Notice: Object of class test2 to string conversion in %stostring.php on line %d
-string(6) "Object"
-string(1%d) "Object id #%d"
-====test9====
-Object id #%d====DONE!====
diff --git a/tests/classes/type_hinting_001.phpt b/tests/classes/type_hinting_001.phpt
deleted file mode 100644
index d4042a496d..0000000000
--- a/tests/classes/type_hinting_001.phpt
+++ /dev/null
@@ -1,38 +0,0 @@
---TEST--
-ZE2 class type hinting
---SKIPIF--
-<?php if (version_compare(zend_version(), '2.0.0-dev', '<')) die('skip ZendEngine 2 needed'); ?>
---FILE--
-<?php
-
-interface Foo {
- function a(Foo $foo);
-}
-
-interface Bar {
- function b(Bar $bar);
-}
-
-class FooBar implements Foo, Bar {
- function a(Foo $foo) {
- // ...
- }
-
- function b(Bar $bar) {
- // ...
- }
-}
-
-class Blort {
-}
-
-$a = new FooBar;
-$b = new Blort;
-
-$a->a($b);
-$a->b($b);
-
-?>
---EXPECTF--
-
-Fatal error: Argument 1 must implement interface Foo in %s on line %d
diff --git a/tests/classes/type_hinting_002.phpt b/tests/classes/type_hinting_002.phpt
deleted file mode 100755
index 4cb75b1b8f..0000000000
--- a/tests/classes/type_hinting_002.phpt
+++ /dev/null
@@ -1,17 +0,0 @@
---TEST--
-ZE2 class type hinting non existing class
---SKIPIF--
-<?php if (version_compare(zend_version(), '2.0.0-dev', '<')) die('skip ZendEngine 2 needed'); ?>
---FILE--
-<?php
-
-class Foo {
- function a(NonExisting $foo) {}
-}
-
-$o = new Foo;
-$o->a($o);
-?>
---EXPECTF--
-
-Fatal error: Class 'NonExisting' not found in %stype_hinting_002.php on line %d
diff --git a/tests/classes/visibility_000a.phpt b/tests/classes/visibility_000a.phpt
deleted file mode 100644
index 2524494ff8..0000000000
--- a/tests/classes/visibility_000a.phpt
+++ /dev/null
@@ -1,33 +0,0 @@
---TEST--
-ZE2 A redeclared method must have the same or higher visibility
---SKIPIF--
-<?php if (version_compare(zend_version(), '2.0.0-dev', '<')) die('skip ZendEngine 2 needed'); ?>
---FILE--
-<?php
-
-class father {
- function f0() {}
- function f1() {}
- public function f2() {}
- protected function f3() {}
- private function f4() {}
-}
-
-class same extends father {
-
- // overload fn with same visibility
- function f0() {}
- public function f1() {}
- public function f2() {}
- protected function f3() {}
- private function f4() {}
-}
-
-class fail extends same {
- protected function f0() {}
-}
-
-echo "Done\n"; // shouldn't be displayed
-?>
---EXPECTF--
-Fatal error: Access level to fail::f0() must be public (as in class same) in %s on line %d
diff --git a/tests/classes/visibility_000b.phpt b/tests/classes/visibility_000b.phpt
deleted file mode 100644
index 9305467323..0000000000
--- a/tests/classes/visibility_000b.phpt
+++ /dev/null
@@ -1,33 +0,0 @@
---TEST--
-ZE2 A redeclared method must have the same or higher visibility
---SKIPIF--
-<?php if (version_compare(zend_version(), '2.0.0-dev', '<')) die('skip ZendEngine 2 needed'); ?>
---FILE--
-<?php
-
-class father {
- function f0() {}
- function f1() {}
- public function f2() {}
- protected function f3() {}
- private function f4() {}
-}
-
-class same extends father {
-
- // overload fn with same visibility
- function f0() {}
- public function f1() {}
- public function f2() {}
- protected function f3() {}
- private function f4() {}
-}
-
-class fail extends same {
- private function f0() {}
-}
-
-echo "Done\n"; // shouldn't be displayed
-?>
---EXPECTF--
-Fatal error: Access level to fail::f0() must be public (as in class same) in %s on line %d
diff --git a/tests/classes/visibility_000c.phpt b/tests/classes/visibility_000c.phpt
deleted file mode 100644
index 064106e979..0000000000
--- a/tests/classes/visibility_000c.phpt
+++ /dev/null
@@ -1,33 +0,0 @@
---TEST--
-ZE2 A redeclared method must have the same or higher visibility
---SKIPIF--
-<?php if (version_compare(zend_version(), '2.0.0-dev', '<')) die('skip ZendEngine 2 needed'); ?>
---FILE--
-<?php
-
-class father {
- function f0() {}
- function f1() {}
- public function f2() {}
- protected function f3() {}
- private function f4() {}
-}
-
-class same extends father {
-
- // overload fn with same visibility
- function f0() {}
- public function f1() {}
- public function f2() {}
- protected function f3() {}
- private function f4() {}
-}
-
-class fail extends same {
- function f0() {}
-}
-
-echo "Done\n"; // shouldn't be displayed
-?>
---EXPECTF--
-Done
diff --git a/tests/classes/visibility_001a.phpt b/tests/classes/visibility_001a.phpt
deleted file mode 100644
index ebd1cc34de..0000000000
--- a/tests/classes/visibility_001a.phpt
+++ /dev/null
@@ -1,33 +0,0 @@
---TEST--
-ZE2 A redeclared method must have the same or higher visibility
---SKIPIF--
-<?php if (version_compare(zend_version(), '2.0.0-dev', '<')) die('skip ZendEngine 2 needed'); ?>
---FILE--
-<?php
-
-class father {
- function f0() {}
- function f1() {}
- public function f2() {}
- protected function f3() {}
- private function f4() {}
-}
-
-class same extends father {
-
- // overload fn with same visibility
- function f0() {}
- public function f1() {}
- public function f2() {}
- protected function f3() {}
- private function f4() {}
-}
-
-class fail extends same {
- protected function f1() {}
-}
-
-echo "Done\n"; // shouldn't be displayed
-?>
---EXPECTF--
-Fatal error: Access level to fail::f1() must be public (as in class same) in %s on line %d
diff --git a/tests/classes/visibility_001b.phpt b/tests/classes/visibility_001b.phpt
deleted file mode 100644
index e61078ede5..0000000000
--- a/tests/classes/visibility_001b.phpt
+++ /dev/null
@@ -1,33 +0,0 @@
---TEST--
-ZE2 A redeclared method must have the same or higher visibility
---SKIPIF--
-<?php if (version_compare(zend_version(), '2.0.0-dev', '<')) die('skip ZendEngine 2 needed'); ?>
---FILE--
-<?php
-
-class father {
- function f0() {}
- function f1() {}
- public function f2() {}
- protected function f3() {}
- private function f4() {}
-}
-
-class same extends father {
-
- // overload fn with same visibility
- function f0() {}
- public function f1() {}
- public function f2() {}
- protected function f3() {}
- private function f4() {}
-}
-
-class fail extends same {
- private function f1() {}
-}
-
-echo "Done\n"; // shouldn't be displayed
-?>
---EXPECTF--
-Fatal error: Access level to fail::f1() must be public (as in class same) in %s on line %d
diff --git a/tests/classes/visibility_001c.phpt b/tests/classes/visibility_001c.phpt
deleted file mode 100644
index bb1075aaed..0000000000
--- a/tests/classes/visibility_001c.phpt
+++ /dev/null
@@ -1,33 +0,0 @@
---TEST--
-ZE2 A redeclared method must have the same or higher visibility
---SKIPIF--
-<?php if (version_compare(zend_version(), '2.0.0-dev', '<')) die('skip ZendEngine 2 needed'); ?>
---FILE--
-<?php
-
-class father {
- function f0() {}
- function f1() {}
- public function f2() {}
- protected function f3() {}
- private function f4() {}
-}
-
-class same extends father {
-
- // overload fn with same visibility
- function f0() {}
- public function f1() {}
- public function f2() {}
- protected function f3() {}
- private function f4() {}
-}
-
-class fail extends same {
- function f1() {}
-}
-
-echo "Done\n"; // shouldn't be displayed
-?>
---EXPECTF--
-Done
diff --git a/tests/classes/visibility_002a.phpt b/tests/classes/visibility_002a.phpt
deleted file mode 100644
index 6c88d204d2..0000000000
--- a/tests/classes/visibility_002a.phpt
+++ /dev/null
@@ -1,33 +0,0 @@
---TEST--
-ZE2 A redeclared method must have the same or higher visibility
---SKIPIF--
-<?php if (version_compare(zend_version(), '2.0.0-dev', '<')) die('skip ZendEngine 2 needed'); ?>
---FILE--
-<?php
-
-class father {
- function f0() {}
- function f1() {}
- public function f2() {}
- protected function f3() {}
- private function f4() {}
-}
-
-class same extends father {
-
- // overload fn with same visibility
- function f0() {}
- public function f1() {}
- public function f2() {}
- protected function f3() {}
- private function f4() {}
-}
-
-class fail extends same {
- protected function f2() {}
-}
-
-echo "Done\n"; // shouldn't be displayed
-?>
---EXPECTF--
-Fatal error: Access level to fail::f2() must be public (as in class same) in %s on line %d
diff --git a/tests/classes/visibility_002b.phpt b/tests/classes/visibility_002b.phpt
deleted file mode 100644
index 71f47c3954..0000000000
--- a/tests/classes/visibility_002b.phpt
+++ /dev/null
@@ -1,33 +0,0 @@
---TEST--
-ZE2 A redeclared method must have the same or higher visibility
---SKIPIF--
-<?php if (version_compare(zend_version(), '2.0.0-dev', '<')) die('skip ZendEngine 2 needed'); ?>
---FILE--
-<?php
-
-class father {
- function f0() {}
- function f1() {}
- public function f2() {}
- protected function f3() {}
- private function f4() {}
-}
-
-class same extends father {
-
- // overload fn with same visibility
- function f0() {}
- public function f1() {}
- public function f2() {}
- protected function f3() {}
- private function f4() {}
-}
-
-class fail extends same {
- private function f2() {}
-}
-
-echo "Done\n"; // shouldn't be displayed
-?>
---EXPECTF--
-Fatal error: Access level to fail::f2() must be public (as in class same) in %s on line %d
diff --git a/tests/classes/visibility_002c.phpt b/tests/classes/visibility_002c.phpt
deleted file mode 100644
index 5edae1d068..0000000000
--- a/tests/classes/visibility_002c.phpt
+++ /dev/null
@@ -1,33 +0,0 @@
---TEST--
-ZE2 A redeclared method must have the same or higher visibility
---SKIPIF--
-<?php if (version_compare(zend_version(), '2.0.0-dev', '<')) die('skip ZendEngine 2 needed'); ?>
---FILE--
-<?php
-
-class father {
- function f0() {}
- function f1() {}
- public function f2() {}
- protected function f3() {}
- private function f4() {}
-}
-
-class same extends father {
-
- // overload fn with same visibility
- function f0() {}
- public function f1() {}
- public function f2() {}
- protected function f3() {}
- private function f4() {}
-}
-
-class fail extends same {
- function f2() {}
-}
-
-echo "Done\n"; // shouldn't be displayed
-?>
---EXPECTF--
-Done
diff --git a/tests/classes/visibility_003a.phpt b/tests/classes/visibility_003a.phpt
deleted file mode 100644
index 1693386f81..0000000000
--- a/tests/classes/visibility_003a.phpt
+++ /dev/null
@@ -1,33 +0,0 @@
---TEST--
-ZE2 A redeclared method must have the same or higher visibility
---SKIPIF--
-<?php if (version_compare(zend_version(), '2.0.0-dev', '<')) die('skip ZendEngine 2 needed'); ?>
---FILE--
-<?php
-
-class father {
- function f0() {}
- function f1() {}
- public function f2() {}
- protected function f3() {}
- private function f4() {}
-}
-
-class same extends father {
-
- // overload fn with same visibility
- function f0() {}
- public function f1() {}
- public function f2() {}
- protected function f3() {}
- private function f4() {}
-}
-
-class fail extends same {
- public function f3() {}
-}
-
-echo "Done\n";
-?>
---EXPECTF--
-Done
diff --git a/tests/classes/visibility_003b.phpt b/tests/classes/visibility_003b.phpt
deleted file mode 100644
index fcfdbe3c55..0000000000
--- a/tests/classes/visibility_003b.phpt
+++ /dev/null
@@ -1,33 +0,0 @@
---TEST--
-ZE2 A redeclared method must have the same or higher visibility
---SKIPIF--
-<?php if (version_compare(zend_version(), '2.0.0-dev', '<')) die('skip ZendEngine 2 needed'); ?>
---FILE--
-<?php
-
-class father {
- function f0() {}
- function f1() {}
- public function f2() {}
- protected function f3() {}
- private function f4() {}
-}
-
-class same extends father {
-
- // overload fn with same visibility
- function f0() {}
- public function f1() {}
- public function f2() {}
- protected function f3() {}
- private function f4() {}
-}
-
-class fail extends same {
- private function f3() {}
-}
-
-echo "Done\n"; // shouldn't be displayed
-?>
---EXPECTF--
-Fatal error: Access level to fail::f3() must be protected (as in class same) or weaker in %s on line %d
diff --git a/tests/classes/visibility_003c.phpt b/tests/classes/visibility_003c.phpt
deleted file mode 100644
index d94a9c116b..0000000000
--- a/tests/classes/visibility_003c.phpt
+++ /dev/null
@@ -1,33 +0,0 @@
---TEST--
-ZE2 A redeclared method must have the same or higher visibility
---SKIPIF--
-<?php if (version_compare(zend_version(), '2.0.0-dev', '<')) die('skip ZendEngine 2 needed'); ?>
---FILE--
-<?php
-
-class father {
- function f0() {}
- function f1() {}
- public function f2() {}
- protected function f3() {}
- private function f4() {}
-}
-
-class same extends father {
-
- // overload fn with same visibility
- function f0() {}
- public function f1() {}
- public function f2() {}
- protected function f3() {}
- private function f4() {}
-}
-
-class fail extends same {
- function f3() {}
-}
-
-echo "Done\n";
-?>
---EXPECTF--
-Done
diff --git a/tests/classes/visibility_004a.phpt b/tests/classes/visibility_004a.phpt
deleted file mode 100644
index 6f16a09edd..0000000000
--- a/tests/classes/visibility_004a.phpt
+++ /dev/null
@@ -1,33 +0,0 @@
---TEST--
-ZE2 A redeclared method must have the same or higher visibility
---SKIPIF--
-<?php if (version_compare(zend_version(), '2.0.0-dev', '<')) die('skip ZendEngine 2 needed'); ?>
---FILE--
-<?php
-
-class father {
- function f0() {}
- function f1() {}
- public function f2() {}
- protected function f3() {}
- private function f4() {}
-}
-
-class same extends father {
-
- // overload fn with same visibility
- function f0() {}
- public function f1() {}
- public function f2() {}
- protected function f3() {}
- private function f4() {}
-}
-
-class fail extends same {
- public function f4() {}
-}
-
-echo "Done\n";
-?>
---EXPECTF--
-Done
diff --git a/tests/classes/visibility_004b.phpt b/tests/classes/visibility_004b.phpt
deleted file mode 100644
index 74a83185ee..0000000000
--- a/tests/classes/visibility_004b.phpt
+++ /dev/null
@@ -1,33 +0,0 @@
---TEST--
-ZE2 A redeclared method must have the same or higher visibility
---SKIPIF--
-<?php if (version_compare(zend_version(), '2.0.0-dev', '<')) die('skip ZendEngine 2 needed'); ?>
---FILE--
-<?php
-
-class father {
- function f0() {}
- function f1() {}
- public function f2() {}
- protected function f3() {}
- private function f4() {}
-}
-
-class same extends father {
-
- // overload fn with same visibility
- function f0() {}
- public function f1() {}
- public function f2() {}
- protected function f3() {}
- private function f4() {}
-}
-
-class fail extends same {
- protected function f4() {}
-}
-
-echo "Done\n"; // shouldn't be displayed
-?>
---EXPECTF--
-Done
diff --git a/tests/classes/visibility_004c.phpt b/tests/classes/visibility_004c.phpt
deleted file mode 100644
index 92a770374e..0000000000
--- a/tests/classes/visibility_004c.phpt
+++ /dev/null
@@ -1,33 +0,0 @@
---TEST--
-ZE2 A redeclared method must have the same or higher visibility
---SKIPIF--
-<?php if (version_compare(zend_version(), '2.0.0-dev', '<')) die('skip ZendEngine 2 needed'); ?>
---FILE--
-<?php
-
-class father {
- function f0() {}
- function f1() {}
- public function f2() {}
- protected function f3() {}
- private function f4() {}
-}
-
-class same extends father {
-
- // overload fn with same visibility
- function f0() {}
- public function f1() {}
- public function f2() {}
- protected function f3() {}
- private function f4() {}
-}
-
-class fail extends same {
- function f4() {}
-}
-
-echo "Done\n";
-?>
---EXPECTF--
-Done
diff --git a/tests/classes/visibility_005.phpt b/tests/classes/visibility_005.phpt
deleted file mode 100755
index 1b15fb5e5b..0000000000
--- a/tests/classes/visibility_005.phpt
+++ /dev/null
@@ -1,58 +0,0 @@
---TEST--
-ZE2 foreach and property visibility
---FILE--
-<?php
-
-class base
-{
- public $a=1;
- protected $b=2;
- private $c=3;
-
- function f()
- {
- foreach($this as $k=>$v) {
- echo "$k=>$v\n";
- }
- }
-}
-
-class derived extends base
-{
-}
-
-$o = new base;
-$o->d = 4;
-echo "===base::function===\n";
-$o->f();
-echo "===base,foreach===\n";
-foreach($o as $k=>$v) {
- echo "$k=>$v\n";
-}
-
-$o = new derived;
-$o->d = 4;
-echo "===derived::function===\n";
-$o->f();
-echo "===derived,foreach===\n";
-foreach($o as $k=>$v) {
- echo "$k=>$v\n";
-}
-
-?>
---EXPECT--
-===base::function===
-a=>1
-b=>2
-c=>3
-d=>4
-===base,foreach===
-a=>1
-d=>4
-===derived::function===
-a=>1
-b=>2
-d=>4
-===derived,foreach===
-a=>1
-d=>4
diff --git a/tests/foo b/tests/foo
deleted file mode 100644
index 125c655b0f..0000000000
--- a/tests/foo
+++ /dev/null
@@ -1,5 +0,0 @@
-a
-b
-@c@
-d
-e
diff --git a/tests/foo2 b/tests/foo2
deleted file mode 100644
index 4cdd41e3dc..0000000000
--- a/tests/foo2
+++ /dev/null
@@ -1,3 +0,0 @@
-<?
-
-print $a->b(12,13)."\n";
diff --git a/tests/foo3 b/tests/foo3
deleted file mode 100644
index 08681b98c2..0000000000
--- a/tests/foo3
+++ /dev/null
@@ -1,43 +0,0 @@
-<?
-
-class foo {
- function foo() {
- print "foo()\n";
- }
- function bar(&$blah, $foobar=7) {
- $foobar += 19;
- }
-
- function hello_world() {
- return "Hello, World!";
- }
-
- function print_string($str) {
- print "$str\n";
- return 666;
- }
- var $foo;
- var $bar="this is a test...";
-};
-
-class bar {
- function foo($a,$b) {
- $a *= 3;
- return $a+$b;
- }
- function bar(&$blah, $foobar=7) {
- $foobar += 19;
- }
-
- var $foo;
- var $bar="this is a test...";
-};
-
-
-$b = new foo;
-$a = $b;
-print $a->print_string($a->hello_world())."\n";
-print $b->print_string($b->hello_world())."\n";
-$a->foo = 5;
-print $a->foo;
-print $a->foo();
diff --git a/tests/foo4 b/tests/foo4
deleted file mode 100644
index 29df84d0e2..0000000000
--- a/tests/foo4
+++ /dev/null
@@ -1,41 +0,0 @@
-<?
-
-class foo {
- function foo($a,$b) {
- $a *= 3;
- return $a+$b;
- }
- function bar(&$blah, $foobar=7) {
- $foobar += 19;
- }
-
- function hello_world() {
- return "Hello, World!";
- }
-
- function print_string($str) {
- print "$str\n";
- return 666;
- }
- var $foo;
- var $bar="this is a test....";
-};
-
-class bar {
- function foo($a,$b) {
- $a *= 3;
- return $a+$b;
- }
- function bar(&$blah, $foobar=7) {
- $foobar += 19;
- }
-
- var $foo;
- var $bar="this is a test...";
-};
-
-
-$b = new foo;
-$a = &$b;
-$b->asd = 5;
-print $b->asd;
diff --git a/tests/func/001.phpt b/tests/func/001.phpt
deleted file mode 100644
index d08040679b..0000000000
--- a/tests/func/001.phpt
+++ /dev/null
@@ -1,6 +0,0 @@
---TEST--
-Strlen() function test
---FILE--
-<?php echo strlen("abcdef")?>
---EXPECT--
-6
diff --git a/tests/func/002.phpt b/tests/func/002.phpt
deleted file mode 100644
index cb35f92043..0000000000
--- a/tests/func/002.phpt
+++ /dev/null
@@ -1,21 +0,0 @@
---TEST--
-Static variables in functions
---FILE--
-<?php
-function blah()
-{
- static $hey=0,$yo=0;
-
- echo "hey=".$hey++.", ",$yo--."\n";
-}
-
-blah();
-blah();
-blah();
-if (isset($hey) || isset($yo)) {
- echo "Local variables became global :(\n";
-}
---EXPECT--
-hey=0, 0
-hey=1, -1
-hey=2, -2
diff --git a/tests/func/003.phpt b/tests/func/003.phpt
deleted file mode 100644
index d603784076..0000000000
--- a/tests/func/003.phpt
+++ /dev/null
@@ -1,291 +0,0 @@
---TEST--
-General function test
---FILE--
-<?php
-
-function a()
-{
- echo "hey\n";
-}
-
-function b($i)
-{
- echo "$i\n";
-}
-
-
-function c($i,$j)
-{
- echo "Counting from $i to $j\n";
- for ($k=$i; $k<=$j; $k++) {
- echo "$k\n";
- }
-}
-
-
-
-a();
-b("blah");
-a();
-b("blah","blah");
-c(7,14);
-
-a();
-
-
-function factorial($n)
-{
- if ($n==0 || $n==1) {
- return 1;
- } else {
- return factorial($n-1)*$n;
- }
-}
-
-
-function factorial2($start, $n)
-{
- if ($n<=$start) {
- return $start;
- } else {
- return factorial2($start,$n-1)*$n;
- }
-}
-
-
-for ($k=0; $k<10; $k++) {
- for ($i=0; $i<=10; $i++) {
- $n=factorial($i);
- echo "factorial($i) = $n\n";
- }
-}
-
-
-echo "and now, from a function...\n";
-
-function call_fact()
-{
- echo "(it should break at 5...)\n";
- for ($i=0; $i<=10; $i++) {
- if ($i == 5) break;
- $n=factorial($i);
- echo "factorial($i) = $n\n";
- }
-}
-
-function return4() { return 4; }
-function return7() { return 7; }
-
-for ($k=0; $k<10; $k++) {
- call_fact();
-}
-
-echo "------\n";
-$result = factorial(factorial(3));
-echo "$result\n";
-
-$result=factorial2(return4(),return7());
-echo "$result\n";
-
-function andi($i, $j)
-{
- for ($k=$i ; $k<=$j ; $k++) {
- if ($k >5) continue;
- echo "$k\n";
- }
-}
-
-andi (3,10);
---EXPECT--
-hey
-blah
-hey
-blah
-Counting from 7 to 14
-7
-8
-9
-10
-11
-12
-13
-14
-hey
-factorial(0) = 1
-factorial(1) = 1
-factorial(2) = 2
-factorial(3) = 6
-factorial(4) = 24
-factorial(5) = 120
-factorial(6) = 720
-factorial(7) = 5040
-factorial(8) = 40320
-factorial(9) = 362880
-factorial(10) = 3628800
-factorial(0) = 1
-factorial(1) = 1
-factorial(2) = 2
-factorial(3) = 6
-factorial(4) = 24
-factorial(5) = 120
-factorial(6) = 720
-factorial(7) = 5040
-factorial(8) = 40320
-factorial(9) = 362880
-factorial(10) = 3628800
-factorial(0) = 1
-factorial(1) = 1
-factorial(2) = 2
-factorial(3) = 6
-factorial(4) = 24
-factorial(5) = 120
-factorial(6) = 720
-factorial(7) = 5040
-factorial(8) = 40320
-factorial(9) = 362880
-factorial(10) = 3628800
-factorial(0) = 1
-factorial(1) = 1
-factorial(2) = 2
-factorial(3) = 6
-factorial(4) = 24
-factorial(5) = 120
-factorial(6) = 720
-factorial(7) = 5040
-factorial(8) = 40320
-factorial(9) = 362880
-factorial(10) = 3628800
-factorial(0) = 1
-factorial(1) = 1
-factorial(2) = 2
-factorial(3) = 6
-factorial(4) = 24
-factorial(5) = 120
-factorial(6) = 720
-factorial(7) = 5040
-factorial(8) = 40320
-factorial(9) = 362880
-factorial(10) = 3628800
-factorial(0) = 1
-factorial(1) = 1
-factorial(2) = 2
-factorial(3) = 6
-factorial(4) = 24
-factorial(5) = 120
-factorial(6) = 720
-factorial(7) = 5040
-factorial(8) = 40320
-factorial(9) = 362880
-factorial(10) = 3628800
-factorial(0) = 1
-factorial(1) = 1
-factorial(2) = 2
-factorial(3) = 6
-factorial(4) = 24
-factorial(5) = 120
-factorial(6) = 720
-factorial(7) = 5040
-factorial(8) = 40320
-factorial(9) = 362880
-factorial(10) = 3628800
-factorial(0) = 1
-factorial(1) = 1
-factorial(2) = 2
-factorial(3) = 6
-factorial(4) = 24
-factorial(5) = 120
-factorial(6) = 720
-factorial(7) = 5040
-factorial(8) = 40320
-factorial(9) = 362880
-factorial(10) = 3628800
-factorial(0) = 1
-factorial(1) = 1
-factorial(2) = 2
-factorial(3) = 6
-factorial(4) = 24
-factorial(5) = 120
-factorial(6) = 720
-factorial(7) = 5040
-factorial(8) = 40320
-factorial(9) = 362880
-factorial(10) = 3628800
-factorial(0) = 1
-factorial(1) = 1
-factorial(2) = 2
-factorial(3) = 6
-factorial(4) = 24
-factorial(5) = 120
-factorial(6) = 720
-factorial(7) = 5040
-factorial(8) = 40320
-factorial(9) = 362880
-factorial(10) = 3628800
-and now, from a function...
-(it should break at 5...)
-factorial(0) = 1
-factorial(1) = 1
-factorial(2) = 2
-factorial(3) = 6
-factorial(4) = 24
-(it should break at 5...)
-factorial(0) = 1
-factorial(1) = 1
-factorial(2) = 2
-factorial(3) = 6
-factorial(4) = 24
-(it should break at 5...)
-factorial(0) = 1
-factorial(1) = 1
-factorial(2) = 2
-factorial(3) = 6
-factorial(4) = 24
-(it should break at 5...)
-factorial(0) = 1
-factorial(1) = 1
-factorial(2) = 2
-factorial(3) = 6
-factorial(4) = 24
-(it should break at 5...)
-factorial(0) = 1
-factorial(1) = 1
-factorial(2) = 2
-factorial(3) = 6
-factorial(4) = 24
-(it should break at 5...)
-factorial(0) = 1
-factorial(1) = 1
-factorial(2) = 2
-factorial(3) = 6
-factorial(4) = 24
-(it should break at 5...)
-factorial(0) = 1
-factorial(1) = 1
-factorial(2) = 2
-factorial(3) = 6
-factorial(4) = 24
-(it should break at 5...)
-factorial(0) = 1
-factorial(1) = 1
-factorial(2) = 2
-factorial(3) = 6
-factorial(4) = 24
-(it should break at 5...)
-factorial(0) = 1
-factorial(1) = 1
-factorial(2) = 2
-factorial(3) = 6
-factorial(4) = 24
-(it should break at 5...)
-factorial(0) = 1
-factorial(1) = 1
-factorial(2) = 2
-factorial(3) = 6
-factorial(4) = 24
-------
-720
-840
-3
-4
-5
-
diff --git a/tests/func/004.phpt b/tests/func/004.phpt
deleted file mode 100644
index 1434297b0d..0000000000
--- a/tests/func/004.phpt
+++ /dev/null
@@ -1,65 +0,0 @@
---TEST--
-General function test
---FILE--
-<?php
-
-echo "Before function declaration...\n";
-
-function print_something_multiple_times($something,$times)
-{
- echo "----\nIn function, printing the string \"$something\" $times times\n";
- for ($i=0; $i<$times; $i++) {
- echo "$i) $something\n";
- }
- echo "Done with function...\n-----\n";
-}
-
-function some_other_function()
-{
- echo "This is some other function, to ensure more than just one function works fine...\n";
-}
-
-
-echo "After function declaration...\n";
-
-echo "Calling function for the first time...\n";
-print_something_multiple_times("This works!",10);
-echo "Returned from function call...\n";
-
-echo "Calling the function for the second time...\n";
-print_something_multiple_times("This like, really works and stuff...",3);
-echo "Returned from function call...\n";
-
-some_other_function();
-
-?>
---EXPECT--
-
-Before function declaration...
-After function declaration...
-Calling function for the first time...
-----
-In function, printing the string "This works!" 10 times
-0) This works!
-1) This works!
-2) This works!
-3) This works!
-4) This works!
-5) This works!
-6) This works!
-7) This works!
-8) This works!
-9) This works!
-Done with function...
------
-Returned from function call...
-Calling the function for the second time...
-----
-In function, printing the string "This like, really works and stuff..." 3 times
-0) This like, really works and stuff...
-1) This like, really works and stuff...
-2) This like, really works and stuff...
-Done with function...
------
-Returned from function call...
-This is some other function, to ensure more than just one function works fine...
diff --git a/tests/func/005.phpt b/tests/func/005.phpt
deleted file mode 100644
index c4215feb49..0000000000
--- a/tests/func/005.phpt
+++ /dev/null
@@ -1,19 +0,0 @@
---TEST--
-Testing register_shutdown_function()
---FILE--
-<?php
-
-function foo()
-{
- print "foo";
-}
-
-register_shutdown_function("foo");
-
-print "foo() will be called on shutdown...\n";
-
-?>
---EXPECT--
-foo() will be called on shutdown...
-foo
-
diff --git a/tests/func/005a.phpt b/tests/func/005a.phpt
deleted file mode 100644
index f7843e10a3..0000000000
--- a/tests/func/005a.phpt
+++ /dev/null
@@ -1,28 +0,0 @@
---TEST--
-Testing register_shutdown_function() with timeout. (Bug: #21513)
---FILE--
-<?php
-
-ini_set('display_errors', 0);
-
-echo "Start\n";
-
-function boo()
-{
- echo "Shutdown\n";
-}
-
-register_shutdown_function("boo");
-
-/* not necessary, just to show the error sooner */
-set_time_limit(1);
-
-/* infinite loop to simulate long processing */
-for (;;) {}
-
-echo "End\n";
-
-?>
---EXPECT--
-Start
-Shutdown
diff --git a/tests/func/006.phpt b/tests/func/006.phpt
deleted file mode 100644
index 077b6f873c..0000000000
--- a/tests/func/006.phpt
+++ /dev/null
@@ -1,26 +0,0 @@
---TEST--
-Output buffering tests
---INI--
-output_buffering=0
-output_handler=
-zlib.output_compression=0
-zlib.output_handler=
---FILE--
-<?php
-ob_start();
-echo ob_get_level();
-echo 'A';
- ob_start();
- echo ob_get_level();
- echo 'B';
- $b = ob_get_contents();
- ob_end_clean();
-$a = ob_get_contents();
-ob_end_clean();
-
-var_dump( $b ); // 2B
-var_dump( $a ); // 1A
-?>
---EXPECT--
-string(2) "2B"
-string(2) "1A"
diff --git a/tests/func/007.phpt b/tests/func/007.phpt
deleted file mode 100644
index 73aae2e649..0000000000
--- a/tests/func/007.phpt
+++ /dev/null
@@ -1,22 +0,0 @@
---TEST--
-INI functions test
---FILE--
-<?php
-
-$ini1 = ini_get('include_path');
-ini_set('include_path','ini_set_works');
-echo ini_get('include_path')."\n";
-ini_restore('include_path');
-$ini2 = ini_get('include_path');
-
-if ($ini1 !== $ini2) {
- echo "ini_restore() does not work.\n";
-}
-else {
- echo "ini_restore_works\n";
-}
-
-?>
---EXPECT--
-ini_set_works
-ini_restore_works
diff --git a/tests/func/008.phpt b/tests/func/008.phpt
deleted file mode 100644
index 48098e1330..0000000000
--- a/tests/func/008.phpt
+++ /dev/null
@@ -1,16 +0,0 @@
---TEST--
-Test for buffering in core functions with implicit flush off
---INI--
-implicit_flush=0
---FILE--
-<?php
-$res = var_export("foo1");
-echo "\n";
-$res = var_export("foo2", TRUE);
-echo "\n";
-echo $res."\n";
-?>
---EXPECT--
-'foo1'
-
-'foo2'
diff --git a/tests/func/009.phpt b/tests/func/009.phpt
deleted file mode 100644
index 05b40e8e67..0000000000
--- a/tests/func/009.phpt
+++ /dev/null
@@ -1,16 +0,0 @@
---TEST--
-Test for buffering in core functions with implicit flush on
---INI--
-implicit_flush=1
---FILE--
-<?php
-$res = var_export("foo1");
-echo "\n";
-$res = var_export("foo2", TRUE);
-echo "\n";
-echo $res."\n";
-?>
---EXPECT--
-'foo1'
-
-'foo2'
diff --git a/tests/lang/001.phpt b/tests/lang/001.phpt
deleted file mode 100644
index 71df318478..0000000000
--- a/tests/lang/001.phpt
+++ /dev/null
@@ -1,6 +0,0 @@
---TEST--
-Simple If condition test
---FILE--
-<?php $a=1; if($a>0) { echo "Yes"; } ?>
---EXPECT--
-Yes
diff --git a/tests/lang/002.phpt b/tests/lang/002.phpt
deleted file mode 100644
index ec14d01c3f..0000000000
--- a/tests/lang/002.phpt
+++ /dev/null
@@ -1,12 +0,0 @@
---TEST--
-Simple While Loop Test
---FILE--
-<?php
-$a=1;
-while ($a<10) {
- echo $a;
- $a++;
-}
-?>
---EXPECT--
-123456789
diff --git a/tests/lang/003.phpt b/tests/lang/003.phpt
deleted file mode 100644
index 7049db9047..0000000000
--- a/tests/lang/003.phpt
+++ /dev/null
@@ -1,19 +0,0 @@
---TEST--
-Simple Switch Test
---FILE--
-<?php
-$a=1;
-switch($a) {
- case 0:
- echo "bad";
- break;
- case 1:
- echo "good";
- break;
- default:
- echo "bad";
- break;
-}
-?>
---EXPECT--
-good
diff --git a/tests/lang/004.phpt b/tests/lang/004.phpt
deleted file mode 100644
index be8ebf4155..0000000000
--- a/tests/lang/004.phpt
+++ /dev/null
@@ -1,13 +0,0 @@
---TEST--
-Simple If/Else Test
---FILE--
-<?php
-$a=1;
-if($a==0) {
- echo "bad";
-} else {
- echo "good";
-}
-?>
---EXPECT--
-good
diff --git a/tests/lang/005.phpt b/tests/lang/005.phpt
deleted file mode 100644
index 404a7cbbf6..0000000000
--- a/tests/lang/005.phpt
+++ /dev/null
@@ -1,16 +0,0 @@
---TEST--
-Simple If/ElseIf/Else Test
---FILE--
-<?php
-$a=1;
-
-if($a==0) {
- echo "bad";
-} elseif($a==3) {
- echo "bad";
-} else {
- echo "good";
-}
-?>
---EXPECT--
-good
diff --git a/tests/lang/006.phpt b/tests/lang/006.phpt
deleted file mode 100644
index 2a2db013ab..0000000000
--- a/tests/lang/006.phpt
+++ /dev/null
@@ -1,23 +0,0 @@
---TEST--
-Nested If/ElseIf/Else Test
---FILE--
-<?php
-$a=1;
-$b=2;
-
-if($a==0) {
- echo "bad";
-} elseif($a==3) {
- echo "bad";
-} else {
- if($b==1) {
- echo "bad";
- } elseif($b==2) {
- echo "good";
- } else {
- echo "bad";
- }
-}
-?>
---EXPECT--
-good
diff --git a/tests/lang/007.phpt b/tests/lang/007.phpt
deleted file mode 100644
index 4576d4efa5..0000000000
--- a/tests/lang/007.phpt
+++ /dev/null
@@ -1,27 +0,0 @@
---TEST--
-Function call with global and static variables
---FILE--
-<?php
-error_reporting(0);
-$a = 10;
-
-function Test()
-{
- static $a=1;
- global $b;
- $c = 1;
- $b = 5;
- echo "$a $b ";
- $a++;
- $c++;
- echo "$a $c ";
-}
-
-Test();
-echo "$a $b $c ";
-Test();
-echo "$a $b $c ";
-Test();
-?>
---EXPECT--
-1 5 2 2 10 5 2 5 3 2 10 5 3 5 4 2
diff --git a/tests/lang/008.phpt b/tests/lang/008.phpt
deleted file mode 100644
index d335e6f135..0000000000
--- a/tests/lang/008.phpt
+++ /dev/null
@@ -1,18 +0,0 @@
---TEST--
-Testing recursive function
---FILE--
-<?php
-
-function Test()
-{
- static $a=1;
- echo "$a ";
- $a++;
- if($a<10): Test(); endif;
-}
-
-Test();
-
-?>
---EXPECT--
-1 2 3 4 5 6 7 8 9
diff --git a/tests/lang/009.phpt b/tests/lang/009.phpt
deleted file mode 100644
index ea2aa9294d..0000000000
--- a/tests/lang/009.phpt
+++ /dev/null
@@ -1,11 +0,0 @@
---TEST--
-Testing function parameter passing
---FILE--
-<?php
-function test ($a,$b) {
- echo $a+$b;
-}
-test(1,2);
-?>
---EXPECT--
-3
diff --git a/tests/lang/010.phpt b/tests/lang/010.phpt
deleted file mode 100644
index 603abe34d5..0000000000
--- a/tests/lang/010.phpt
+++ /dev/null
@@ -1,13 +0,0 @@
---TEST--
-Testing function parameter passing with a return value
---FILE--
-<?php
-function test ($b) {
- $b++;
- return($b);
-}
-$a = test(1);
-echo $a;
-?>
---EXPECT--
-2
diff --git a/tests/lang/011.phpt b/tests/lang/011.phpt
deleted file mode 100644
index 771ef7c129..0000000000
--- a/tests/lang/011.phpt
+++ /dev/null
@@ -1,23 +0,0 @@
---TEST--
-Testing nested functions
---FILE--
-<?php
-function F()
-{
- $a = "Hello ";
- return($a);
-}
-
-function G()
-{
- static $myvar = 4;
-
- echo "$myvar ";
- echo F();
- echo "$myvar";
-}
-
-G();
-?>
---EXPECT--
-4 Hello 4
diff --git a/tests/lang/012.phpt b/tests/lang/012.phpt
deleted file mode 100644
index 117137a29b..0000000000
--- a/tests/lang/012.phpt
+++ /dev/null
@@ -1,18 +0,0 @@
---TEST--
-Testing stack after early function return
---FILE--
-<?php
-function F () {
- if(1) {
- return("Hello");
- }
-}
-
-$i=0;
-while ($i<2) {
- echo F();
- $i++;
-}
-?>
---EXPECT--
-HelloHello
diff --git a/tests/lang/013.phpt b/tests/lang/013.phpt
deleted file mode 100644
index be84cdcb8f..0000000000
--- a/tests/lang/013.phpt
+++ /dev/null
@@ -1,10 +0,0 @@
---TEST--
-Testing eval function
---FILE--
-<?php
-error_reporting(0);
-$a="echo \"Hello\";";
-eval($a);
-?>
---EXPECT--
-Hello
diff --git a/tests/lang/014.phpt b/tests/lang/014.phpt
deleted file mode 100644
index f0033b2f77..0000000000
--- a/tests/lang/014.phpt
+++ /dev/null
@@ -1,13 +0,0 @@
---TEST--
-Testing eval function inside user-defined function
---FILE--
-<?php
-function F ($a) {
- eval($a);
-}
-
-error_reporting(0);
-F("echo \"Hello\";");
-?>
---EXPECT--
-Hello
diff --git a/tests/lang/015.inc b/tests/lang/015.inc
deleted file mode 100755
index d436a7bb14..0000000000
--- a/tests/lang/015.inc
+++ /dev/null
@@ -1,3 +0,0 @@
-<?php
- echo "Hello";
-?>
diff --git a/tests/lang/015.phpt b/tests/lang/015.phpt
deleted file mode 100644
index 952e7f19d7..0000000000
--- a/tests/lang/015.phpt
+++ /dev/null
@@ -1,8 +0,0 @@
---TEST--
-Testing include
---FILE--
-<?php
-include "015.inc";
-?>
---EXPECT--
-Hello
diff --git a/tests/lang/016.inc b/tests/lang/016.inc
deleted file mode 100755
index b73333f7b0..0000000000
--- a/tests/lang/016.inc
+++ /dev/null
@@ -1,5 +0,0 @@
-<?php
-function MyFunc ($a) {
- echo $a;
-}
-?>
diff --git a/tests/lang/016.phpt b/tests/lang/016.phpt
deleted file mode 100644
index dbaa908b81..0000000000
--- a/tests/lang/016.phpt
+++ /dev/null
@@ -1,9 +0,0 @@
---TEST--
-Testing user-defined function in included file
---FILE--
-<?php
-include "016.inc";
-MyFunc("Hello");
-?>
---EXPECT--
-Hello
diff --git a/tests/lang/017.phpt b/tests/lang/017.phpt
deleted file mode 100644
index fb90964820..0000000000
--- a/tests/lang/017.phpt
+++ /dev/null
@@ -1,18 +0,0 @@
---TEST--
-Testing user-defined function falling out of an If into another
---FILE--
-<?php
-$a = 1;
-function Test ($a) {
- if ($a<3) {
- return(3);
- }
-}
-
-if ($a < Test($a)) {
- echo "$a\n";
- $a++;
-}
-?>
---EXPECT--
-1
diff --git a/tests/lang/018.phpt b/tests/lang/018.phpt
deleted file mode 100644
index 638b131c2d..0000000000
--- a/tests/lang/018.phpt
+++ /dev/null
@@ -1,34 +0,0 @@
---TEST--
-eval() test
---FILE--
-<?php
-
-error_reporting(0);
-
-$message = "echo \"hey\n\";";
-
-for ($i=0; $i<10; $i++) {
- eval($message);
- echo $i."\n";
-}
---EXPECT--
-hey
-0
-hey
-1
-hey
-2
-hey
-3
-hey
-4
-hey
-5
-hey
-6
-hey
-7
-hey
-8
-hey
-9
diff --git a/tests/lang/019.phpt b/tests/lang/019.phpt
deleted file mode 100644
index 6c0a1cab62..0000000000
--- a/tests/lang/019.phpt
+++ /dev/null
@@ -1,36 +0,0 @@
---TEST--
-eval() test
---FILE--
-<?php
-
-error_reporting(0);
-
-eval("function test() { echo \"hey, this is a function inside an eval()!\\n\"; }");
-
-$i=0;
-while ($i<10) {
- eval("echo \"hey, this is a regular echo'd eval()\\n\";");
- test();
- $i++;
-}
---EXPECT--
-hey, this is a regular echo'd eval()
-hey, this is a function inside an eval()!
-hey, this is a regular echo'd eval()
-hey, this is a function inside an eval()!
-hey, this is a regular echo'd eval()
-hey, this is a function inside an eval()!
-hey, this is a regular echo'd eval()
-hey, this is a function inside an eval()!
-hey, this is a regular echo'd eval()
-hey, this is a function inside an eval()!
-hey, this is a regular echo'd eval()
-hey, this is a function inside an eval()!
-hey, this is a regular echo'd eval()
-hey, this is a function inside an eval()!
-hey, this is a regular echo'd eval()
-hey, this is a function inside an eval()!
-hey, this is a regular echo'd eval()
-hey, this is a function inside an eval()!
-hey, this is a regular echo'd eval()
-hey, this is a function inside an eval()!
diff --git a/tests/lang/020.phpt b/tests/lang/020.phpt
deleted file mode 100644
index 46a2a2c1c0..0000000000
--- a/tests/lang/020.phpt
+++ /dev/null
@@ -1,76 +0,0 @@
---TEST--
-Switch test 1
---FILE--
-<?php
-
-$i="abc";
-
-for ($j=0; $j<10; $j++) {
-switch (1) {
- case 1:
- echo "In branch 1\n";
- switch ($i) {
- case "ab":
- echo "This doesn't work... :(\n";
- break;
- case "abcd":
- echo "This works!\n";
- break;
- case "blah":
- echo "Hmmm, no worki\n";
- break;
- default:
- echo "Inner default...\n";
- }
- for ($blah=0; $blah<200; $blah++) {
- if ($blah==100) {
- echo "blah=$blah\n";
- }
- }
- break;
- case 2:
- echo "In branch 2\n";
- break;
- case $i:
- echo "In branch \$i\n";
- break;
- case 4:
- echo "In branch 4\n";
- break;
- default:
- echo "Hi, I'm default\n";
- break;
- }
-}
-?>
---EXPECT--
-In branch 1
-Inner default...
-blah=100
-In branch 1
-Inner default...
-blah=100
-In branch 1
-Inner default...
-blah=100
-In branch 1
-Inner default...
-blah=100
-In branch 1
-Inner default...
-blah=100
-In branch 1
-Inner default...
-blah=100
-In branch 1
-Inner default...
-blah=100
-In branch 1
-Inner default...
-blah=100
-In branch 1
-Inner default...
-blah=100
-In branch 1
-Inner default...
-blah=100
diff --git a/tests/lang/021.phpt b/tests/lang/021.phpt
deleted file mode 100644
index aff45b6be3..0000000000
--- a/tests/lang/021.phpt
+++ /dev/null
@@ -1,42 +0,0 @@
---TEST--
-Switch test 2
---FILE--
-<?php
-
-for ($i=0; $i<=5; $i++)
-{
- echo "i=$i\n";
-
- switch($i) {
- case 0:
- echo "In branch 0\n";
- break;
- case 1:
- echo "In branch 1\n";
- break;
- case 2:
- echo "In branch 2\n";
- break;
- case 3:
- echo "In branch 3\n";
- break 2;
- case 4:
- echo "In branch 4\n";
- break;
- default:
- echo "In default\n";
- break;
- }
-}
-echo "hi\n";
-?>
---EXPECT--
-i=0
-In branch 0
-i=1
-In branch 1
-i=2
-In branch 2
-i=3
-In branch 3
-hi
diff --git a/tests/lang/022.phpt b/tests/lang/022.phpt
deleted file mode 100644
index dddc6c2955..0000000000
--- a/tests/lang/022.phpt
+++ /dev/null
@@ -1,63 +0,0 @@
---TEST--
-Switch test 3
---FILE--
-<?php
-
-function switchtest ($i, $j)
-{
- switch ($i) {
- case 0:
- switch($j) {
- case 0:
- echo "zero";
- break;
- case 1:
- echo "one";
- break;
- default:
- echo $j;
- break;
- }
- echo "\n";
- break;
- default:
- echo "Default taken\n";
- }
-}
-for ($i=0; $i<3; $i++) {
- for ($k=0; $k<10; $k++) {
- switchtest (0,$k);
- }
-}
-?>
---EXPECT--
-zero
-one
-2
-3
-4
-5
-6
-7
-8
-9
-zero
-one
-2
-3
-4
-5
-6
-7
-8
-9
-zero
-one
-2
-3
-4
-5
-6
-7
-8
-9
diff --git a/tests/lang/023-1.inc b/tests/lang/023-1.inc
deleted file mode 100755
index 8d52e844c9..0000000000
--- a/tests/lang/023-1.inc
+++ /dev/null
@@ -1,356 +0,0 @@
-<html>
-<head>
-<?php
-/* the point of this file is to intensively test various aspects of
- * the parser. right now, each test focuses in one aspect only
- * (e.g. variable aliasing, arithemtic operator, various control
- * structures), while trying to combine code from other parts of the
- * parser as well.
- */
-?>
-
-*** Testing assignments and variable aliasing: ***<br>
-<?php
- /* This test tests assignments to variables using other variables as variable-names */
- $a = "b";
- $$a = "test";
- $$$a = "blah";
- ${$$$a}["associative arrays work too"] = "this is nifty";
-?>
-This should read "blah": <?php echo "$test<br>\n"; ?>
-This should read "this is nifty": <?php echo $blah[$test="associative arrays work too"]."<br>\n"; ?>
-*************************************************<br>
-
-*** Testing integer operators ***<br>
-<?php
- /* test just about any operator possible on $i and $j (ints) */
- $i = 5;
- $j = 3;
-?>
-Correct result - 8: <?php echo $i+$j; ?><br>
-Correct result - 8: <?php echo $i+$j; ?><br>
-Correct result - 2: <?php echo $i-$j; ?><br>
-Correct result - -2: <?php echo $j-$i; ?><br>
-Correct result - 15: <?php echo $i*$j; ?><br>
-Correct result - 15: <?php echo $j*$i; ?><br>
-Correct result - 2: <?php echo $i%$j; ?><br>
-Correct result - 3: <?php echo $j%$i; ?><br>
-*********************************<br>
-
-*** Testing real operators ***<br>
-<?php
- /* test just about any operator possible on $i and $j (floats) */
- $i = 5.0;
- $j = 3.0;
-?>
-Correct result - 8: <?php echo $i+$j; ?><br>
-Correct result - 8: <?php echo $i+$j; ?><br>
-Correct result - 2: <?php echo $i-$j; ?><br>
-Correct result - -2: <?php echo $j-$i; ?><br>
-Correct result - 15: <?php echo $i*$j; ?><br>
-Correct result - 15: <?php echo $j*$i; ?><br>
-Correct result - 2: <?php echo $i%$j; ?><br>
-Correct result - 3: <?php echo $j%$i; ?><br>
-*********************************<br>
-
-*** Testing if/elseif/else control ***<br>
-
-<?php
-/* sick if/elseif/else test by Andi :) */
-$a = 5;
-if ($a == "4") {
- echo "This "." does "." not "." work<br>\n";
-} elseif ($a == "5") {
- echo "This "." works<br>\n";
- $a = 6;
- if ("andi" == ($test = "andi")) {
- echo "this_still_works<br>\n";
- } elseif (1) {
- echo "should_not_print<br>\n";
- } else {
- echo "should_not_print<br>\n";
- }
- if (44 == 43) {
- echo "should_not_print<br>\n";
- } else {
- echo "should_print<br>\n";
- }
-} elseif ($a == 6) {
- echo "this "."broken<br>\n";
- if (0) {
- echo "this_should_not_print<br>\n";
- } else {
- echo "TestingDanglingElse_This_Should_not_print<br>\n";
- }
-} else {
- echo "This "."does "." not"." work<br>\n";
-}
-?>
-
-
-*** Seriously nested if's test ***<br>
-** spelling correction by kluzz **
-<?php
-/* yet another sick if/elseif/else test by Zeev */
-$i=$j=0;
-echo "Only two lines of text should follow:<br>\n";
-if (0) { /* this code is not supposed to be executed */
- echo "hmm, this shouldn't be displayed #1<br>\n";
- $j++;
- if (1) {
- $i
-+=
- $j;
- if (0) {
- $j = ++$i;
- if (1) {
- $j *= $i;
- echo "damn, this shouldn't be displayed<br>\n";
- } else {
- $j /= $i;
- ++$j;
- echo "this shouldn't be displayed either<br>\n";
- }
- } elseif (1) {
- $i++; $j++;
- echo "this isn't supposed to be displayed<br>\n";
- }
- } elseif (0) {
- $i++;
- echo "this definitely shouldn't be displayed<br>\n";
- } else {
- --$j;
- echo "and this too shouldn't be displayed<br>\n";
- while ($j>0) {
- $j--;
- }
- }
-} elseif (2-2) { /* as long as 2-2==0, this isn't supposed to be executed either */
- $i = ++$j;
- echo "hmm, this shouldn't be displayed #2<br>\n";
- if (1) {
- $j = ++$i;
- if (0) {
- $j = $i*2+$j*($i++);
- if (1) {
- $i++;
- echo "damn, this shouldn't be displayed<br>\n";
- } else {
- $j++;
- echo "this shouldn't be displayed either<br>\n";
- }
- } else if (1) {
- ++$j;
- echo "this isn't supposed to be displayed<br>\n";
- }
- } elseif (0) {
- $j++;
- echo "this definitely shouldn't be displayed<br>\n";
- } else {
- $i++;
- echo "and this too shouldn't be displayed<br>\n";
- }
-} else {
- $j=$i++; /* this should set $i to 1, but shouldn't change $j (it's assigned $i's previous values, zero) */
- echo "this should be displayed. should be: \$i=1, \$j=0. is: \$i=$i, \$j=$j<br>\n";
- if (1) {
- $j += ++$i; /* ++$i --> $i==2, $j += 2 --> $j==2 */
- if (0) {
- $j += 40;
- if (1) {
- $i += 50;
- echo "damn, this shouldn't be displayed<br>\n";
- } else {
- $j += 20;
- echo "this shouldn't be displayed either<br>\n";
- }
- } else if (1) {
- $j *= $i; /* $j *= 2 --> $j == 4 */
- echo "this is supposed to be displayed. should be: \$i=2, \$j=4. is: \$i=$i, \$j=$j<br>\n";
- echo "3 loop iterations should follow:<br>\n";
- while ($i<=$j) {
- echo $i++." $j<br>\n";
- }
- }
- } elseif (0) {
- echo "this definitely shouldn't be displayed<br>\n";
- } else {
- echo "and this too shouldn't be displayed<br>\n";
- }
- echo "**********************************<br>\n";
-}
-?>
-
-*** C-style else-if's ***<br>
-<?php
- /* looks like without we even tried, C-style else-if structure works fine! */
- if ($a=0) {
- echo "This shouldn't be displayed<br>\n";
- } else if ($a++) {
- echo "This shouldn't be displayed either<br>\n";
- } else if (--$a) {
- echo "No, this neither<br>\n";
- } else if (++$a) {
- echo "This should be displayed<br>\n";
- } else {
- echo "This shouldn't be displayed at all<br>\n";
- }
-?>
-*************************<br>
-
-*** WHILE tests ***<br>
-<?php
-$i=0;
-$j=20;
-while ($i<(2*$j)) {
- if ($i>$j) {
- echo "$i is greater than $j<br>\n";
- } else if ($i==$j) {
- echo "$i equals $j<br>\n";
- } else {
- echo "$i is smaller than $j<br>\n";
- }
- $i++;
-}
-?>
-*******************<br>
-
-
-*** Nested WHILEs ***<br>
-<?php
-$arr_len=3;
-
-$i=0;
-while ($i<$arr_len) {
- $j=0;
- while ($j<$arr_len) {
- $k=0;
- while ($k<$arr_len) {
- ${"test$i$j"}[$k] = $i+$j+$k;
- $k++;
- }
- $j++;
- }
- $i++;
-}
-
-echo "Each array variable should be equal to the sum of its indices:<br>\n";
-
-$i=0;
-while ($i<$arr_len) {
- $j=0;
- while ($j<$arr_len) {
- $k=0;
- while ($k<$arr_len) {
- echo "\${test$i$j}[$k] = ".${"test$i$j"}[$k]."<br>\n";
- $k++;
- }
- $j++;
- }
- $i++;
-}
-?>
-*********************<br>
-
-*** hash test... ***<br>
-<?php
-/*
-$i=0;
-
-while ($i<10000) {
- $arr[$i]=$i;
- $i++;
-}
-
-$i=0;
-while ($i<10000) {
- echo $arr[$i++]."<br>\n";
-}
-*/
-echo "commented out...";
-?>
-
-**************************<br>
-
-*** Hash resizing test ***<br>
-<?php
-$i = 10;
-$a = 'b';
-while ($i > 0) {
- $a = $a . 'a';
- echo "$a<br>\n";
- $resize[$a] = $i;
- $i--;
-}
-$i = 10;
-$a = 'b';
-while ($i > 0) {
- $a = $a . 'a';
- echo "$a<br>\n";
- echo $resize[$a]."<br>\n";
- $i--;
-}
-?>
-**************************<br>
-
-
-*** break/continue test ***<br>
-<?php
-$i=0;
-
-echo "\$i should go from 0 to 2<br>\n";
-while ($i<5) {
- if ($i>2) {
- break;
- }
- $j=0;
- echo "\$j should go from 3 to 4, and \$q should go from 3 to 4<br>\n";
- while ($j<5) {
- if ($j<=2) {
- $j++;
- continue;
- }
- echo " \$j=$j<br>\n";
- for ($q=0; $q<=10; $q++) {
- if ($q<3) {
- continue;
- }
- if ($q>4) {
- break;
- }
- echo " \$q=$q<br>\n";
- }
- $j++;
- }
- $j=0;
- echo "\$j should go from 0 to 2<br>\n";
- while ($j<5) {
- if ($j>2) {
- $k=0;
- echo "\$k should go from 0 to 2<br>\n";
- while ($k<5) {
- if ($k>2) {
- break 2;
- }
- echo " \$k=$k<br>\n";
- $k++;
- }
- }
- echo " \$j=$j<br>\n";
- $j++;
- }
- echo "\$i=$i<br>\n";
- $i++;
-}
-?>
-***********************<br>
-
-*** Nested file include test ***<br>
-<?php include("023-2.inc"); ?>
-********************************<br>
-
-<?php
-{
- echo "Tests completed.<br>\n"; # testing some PHP style comment...
-}
-?>
diff --git a/tests/lang/023-2.inc b/tests/lang/023-2.inc
deleted file mode 100755
index 6dd1e730f1..0000000000
--- a/tests/lang/023-2.inc
+++ /dev/null
@@ -1,6 +0,0 @@
-<html>
-This is Finish.phtml. This file is supposed to be included
-from regression_test.phtml. This is normal HTML.
-<?php echo "and this is PHP code, 2+2=".(2+2).""; ?>
-
-</html>
diff --git a/tests/lang/023.phpt b/tests/lang/023.phpt
deleted file mode 100644
index af9874410a..0000000000
--- a/tests/lang/023.phpt
+++ /dev/null
@@ -1,254 +0,0 @@
---TEST--
-Regression test
---FILE--
-PHP Regression Test
-
-<?php
-
-include("023-1.inc");
-
-$wedding_timestamp = mktime(20,0,0,8,31,1997);
-$time_left=$wedding_timestamp-time();
-
-if ($time_left>0) {
- $days = $time_left/(24*3600);
- $time_left -= $days*24*3600;
- $hours = $time_left/3600;
- $time_left -= $hours*3600;
- $minutes = $time_left/60;
- echo "Limor Ullmann is getting married on ".($wedding_date=date("l, F dS, Y",$wedding_timestamp)).",\nwhich is $days days, $hours hours and $minutes minutes from now.\n";
- echo "Her hashed wedding date is $wedding_date.\n";
-} else {
- echo "Limor Ullmann is now Limor Baruch :I\n";
-}
-?>
---EXPECT--
-PHP Regression Test
-
-<html>
-<head>
-
-*** Testing assignments and variable aliasing: ***<br>
-This should read "blah": blah<br>
-This should read "this is nifty": this is nifty<br>
-*************************************************<br>
-
-*** Testing integer operators ***<br>
-Correct result - 8: 8<br>
-Correct result - 8: 8<br>
-Correct result - 2: 2<br>
-Correct result - -2: -2<br>
-Correct result - 15: 15<br>
-Correct result - 15: 15<br>
-Correct result - 2: 2<br>
-Correct result - 3: 3<br>
-*********************************<br>
-
-*** Testing real operators ***<br>
-Correct result - 8: 8<br>
-Correct result - 8: 8<br>
-Correct result - 2: 2<br>
-Correct result - -2: -2<br>
-Correct result - 15: 15<br>
-Correct result - 15: 15<br>
-Correct result - 2: 2<br>
-Correct result - 3: 3<br>
-*********************************<br>
-
-*** Testing if/elseif/else control ***<br>
-
-This works<br>
-this_still_works<br>
-should_print<br>
-
-
-*** Seriously nested if's test ***<br>
-** spelling correction by kluzz **
-Only two lines of text should follow:<br>
-this should be displayed. should be: $i=1, $j=0. is: $i=1, $j=0<br>
-this is supposed to be displayed. should be: $i=2, $j=4. is: $i=2, $j=4<br>
-3 loop iterations should follow:<br>
-2 4<br>
-3 4<br>
-4 4<br>
-**********************************<br>
-
-*** C-style else-if's ***<br>
-This should be displayed<br>
-*************************<br>
-
-*** WHILE tests ***<br>
-0 is smaller than 20<br>
-1 is smaller than 20<br>
-2 is smaller than 20<br>
-3 is smaller than 20<br>
-4 is smaller than 20<br>
-5 is smaller than 20<br>
-6 is smaller than 20<br>
-7 is smaller than 20<br>
-8 is smaller than 20<br>
-9 is smaller than 20<br>
-10 is smaller than 20<br>
-11 is smaller than 20<br>
-12 is smaller than 20<br>
-13 is smaller than 20<br>
-14 is smaller than 20<br>
-15 is smaller than 20<br>
-16 is smaller than 20<br>
-17 is smaller than 20<br>
-18 is smaller than 20<br>
-19 is smaller than 20<br>
-20 equals 20<br>
-21 is greater than 20<br>
-22 is greater than 20<br>
-23 is greater than 20<br>
-24 is greater than 20<br>
-25 is greater than 20<br>
-26 is greater than 20<br>
-27 is greater than 20<br>
-28 is greater than 20<br>
-29 is greater than 20<br>
-30 is greater than 20<br>
-31 is greater than 20<br>
-32 is greater than 20<br>
-33 is greater than 20<br>
-34 is greater than 20<br>
-35 is greater than 20<br>
-36 is greater than 20<br>
-37 is greater than 20<br>
-38 is greater than 20<br>
-39 is greater than 20<br>
-*******************<br>
-
-
-*** Nested WHILEs ***<br>
-Each array variable should be equal to the sum of its indices:<br>
-${test00}[0] = 0<br>
-${test00}[1] = 1<br>
-${test00}[2] = 2<br>
-${test01}[0] = 1<br>
-${test01}[1] = 2<br>
-${test01}[2] = 3<br>
-${test02}[0] = 2<br>
-${test02}[1] = 3<br>
-${test02}[2] = 4<br>
-${test10}[0] = 1<br>
-${test10}[1] = 2<br>
-${test10}[2] = 3<br>
-${test11}[0] = 2<br>
-${test11}[1] = 3<br>
-${test11}[2] = 4<br>
-${test12}[0] = 3<br>
-${test12}[1] = 4<br>
-${test12}[2] = 5<br>
-${test20}[0] = 2<br>
-${test20}[1] = 3<br>
-${test20}[2] = 4<br>
-${test21}[0] = 3<br>
-${test21}[1] = 4<br>
-${test21}[2] = 5<br>
-${test22}[0] = 4<br>
-${test22}[1] = 5<br>
-${test22}[2] = 6<br>
-*********************<br>
-
-*** hash test... ***<br>
-commented out...
-**************************<br>
-
-*** Hash resizing test ***<br>
-ba<br>
-baa<br>
-baaa<br>
-baaaa<br>
-baaaaa<br>
-baaaaaa<br>
-baaaaaaa<br>
-baaaaaaaa<br>
-baaaaaaaaa<br>
-baaaaaaaaaa<br>
-ba<br>
-10<br>
-baa<br>
-9<br>
-baaa<br>
-8<br>
-baaaa<br>
-7<br>
-baaaaa<br>
-6<br>
-baaaaaa<br>
-5<br>
-baaaaaaa<br>
-4<br>
-baaaaaaaa<br>
-3<br>
-baaaaaaaaa<br>
-2<br>
-baaaaaaaaaa<br>
-1<br>
-**************************<br>
-
-
-*** break/continue test ***<br>
-$i should go from 0 to 2<br>
-$j should go from 3 to 4, and $q should go from 3 to 4<br>
- $j=3<br>
- $q=3<br>
- $q=4<br>
- $j=4<br>
- $q=3<br>
- $q=4<br>
-$j should go from 0 to 2<br>
- $j=0<br>
- $j=1<br>
- $j=2<br>
-$k should go from 0 to 2<br>
- $k=0<br>
- $k=1<br>
- $k=2<br>
-$i=0<br>
-$j should go from 3 to 4, and $q should go from 3 to 4<br>
- $j=3<br>
- $q=3<br>
- $q=4<br>
- $j=4<br>
- $q=3<br>
- $q=4<br>
-$j should go from 0 to 2<br>
- $j=0<br>
- $j=1<br>
- $j=2<br>
-$k should go from 0 to 2<br>
- $k=0<br>
- $k=1<br>
- $k=2<br>
-$i=1<br>
-$j should go from 3 to 4, and $q should go from 3 to 4<br>
- $j=3<br>
- $q=3<br>
- $q=4<br>
- $j=4<br>
- $q=3<br>
- $q=4<br>
-$j should go from 0 to 2<br>
- $j=0<br>
- $j=1<br>
- $j=2<br>
-$k should go from 0 to 2<br>
- $k=0<br>
- $k=1<br>
- $k=2<br>
-$i=2<br>
-***********************<br>
-
-*** Nested file include test ***<br>
-<html>
-This is Finish.phtml. This file is supposed to be included
-from regression_test.phtml. This is normal HTML.
-and this is PHP code, 2+2=4
-</html>
-********************************<br>
-
-Tests completed.<br>
-Limor Ullmann is now Limor Baruch :I
diff --git a/tests/lang/024.phpt b/tests/lang/024.phpt
deleted file mode 100644
index 954b58fa05..0000000000
--- a/tests/lang/024.phpt
+++ /dev/null
@@ -1,11623 +0,0 @@
---TEST--
-Looped regression test (may take a while)
---FILE--
-<?php
-for ($jdk=0; $jdk<50; $jdk++) {
-?><html>
-<head>
-<?php /* the point of this file is to intensively test various aspects of the parser.
- * right now, each test focuses in one aspect only (e.g. variable aliasing, arithemtic operator,
- * various control structures), while trying to combine code from other parts of the parser as well.
- */
-?>
-*** Testing assignments and variable aliasing: ***
-<?php
- /* This test tests assignments to variables using other variables as variable-names */
- $a = "b";
- $$a = "test";
- $$$a = "blah";
- ${$$$a}["associative arrays work too"] = "this is nifty";
-?>
-This should read "blah": <?php echo "$test\n"; ?>
-This should read "this is nifty": <?php echo $blah[$test="associative arrays work too"]."\n"; ?>
-*************************************************
-
-*** Testing integer operators ***
-<?php
- /* test just about any operator possible on $i and $j (ints) */
- $i = 5;
- $j = 3;
-?>
-Correct result - 8: <?php echo $i+$j; ?>
-
-Correct result - 8: <?php echo $i+$j; ?>
-
-Correct result - 2: <?php echo $i-$j; ?>
-
-Correct result - -2: <?php echo $j-$i; ?>
-
-Correct result - 15: <?php echo $i*$j; ?>
-
-Correct result - 15: <?php echo $j*$i; ?>
-
-Correct result - 2: <?php echo $i%$j; ?>
-
-Correct result - 3: <?php echo $j%$i; ?>
-
-*********************************
-
-*** Testing real operators ***
-<?php
- /* test just about any operator possible on $i and $j (floats) */
- $i = 5.0;
- $j = 3.0;
-?>
-Correct result - 8: <?php echo $i+$j; ?>
-
-Correct result - 8: <?php echo $i+$j; ?>
-
-Correct result - 2: <?php echo $i-$j; ?>
-
-Correct result - -2: <?php echo $j-$i; ?>
-
-Correct result - 15: <?php echo $i*$j; ?>
-
-Correct result - 15: <?php echo $j*$i; ?>
-
-Correct result - 2: <?php echo $i%$j; ?>
-
-Correct result - 3: <?php echo $j%$i; ?>
-
-*********************************
-
-*** Testing if/elseif/else control ***
-
-<?php
-/* sick if/elseif/else test by Andi :) */
-$a = 5;
-if ($a == "4") {
- echo "This "." does "." not "." work\n";
-} elseif ($a == "5") {
- echo "This "." works\n";
- $a = 6;
- if ("andi" == ($test = "andi")) {
- echo "this_still_works\n";
- } elseif (1) {
- echo "should_not_print\n";
- } else {
- echo "should_not_print\n";
- }
- if (44 == 43) {
- echo "should_not_print\n";
- } else {
- echo "should_print\n";
- }
-} elseif ($a == 6) {
- echo "this "."broken\n";
- if (0) {
- echo "this_should_not_print\n";
- } else {
- echo "TestingDanglingElse_This_Should_not_print\n";
- }
-} else {
- echo "This "."does "." not"." work\n";
-}
-?>
-
-
-*** Seriously nested if's test ***
-** spelling correction by kluzz **
-<?php
-/* yet another sick if/elseif/else test by Zeev */
-$i=$j=0;
-echo "Only two lines of text should follow:\n";
-if (0) { /* this code is not supposed to be executed */
- echo "hmm, this shouldn't be displayed #1\n";
- $j++;
- if (1) {
- $i += $j;
- if (0) {
- $j = ++$i;
- if (1) {
- $j *= $i;
- echo "damn, this shouldn't be displayed\n";
- } else {
- $j /= $i;
- ++$j;
- echo "this shouldn't be displayed either\n";
- }
- } elseif (1) {
- $i++; $j++;
- echo "this isn't supposed to be displayed\n";
- }
- } elseif (0) {
- $i++;
- echo "this definitely shouldn't be displayed\n";
- } else {
- --$j;
- echo "and this too shouldn't be displayed\n";
- while ($j>0) {
- $j--;
- }
- }
-} elseif (2-2) { /* as long as 2-2==0, this isn't supposed to be executed either */
- $i = ++$j;
- echo "hmm, this shouldn't be displayed #2\n";
- if (1) {
- $j = ++$i;
- if (0) {
- $j = $i*2+$j*($i++);
- if (1) {
- $i++;
- echo "damn, this shouldn't be displayed\n";
- } else {
- $j++;
- echo "this shouldn't be displayed either\n";
- }
- } else if (1) {
- ++$j;
- echo "this isn't supposed to be displayed\n";
- }
- } elseif (0) {
- $j++;
- echo "this definitely shouldn't be displayed\n";
- } else {
- $i++;
- echo "and this too shouldn't be displayed\n";
- }
-} else {
- $j=$i++; /* this should set $i to 1, but shouldn't change $j (it's assigned $i's previous values, zero) */
- echo "this should be displayed. should be: \$i=1, \$j=0. is: \$i=$i, \$j=$j\n";
- if (1) {
- $j += ++$i; /* ++$i --> $i==2, $j += 2 --> $j==2 */
- if (0) {
- $j += 40;
- if (1) {
- $i += 50;
- echo "damn, this shouldn't be displayed\n";
- } else {
- $j += 20;
- echo "this shouldn't be displayed either\n";
- }
- } else if (1) {
- $j *= $i; /* $j *= 2 --> $j == 4 */
- echo "this is supposed to be displayed. should be: \$i=2, \$j=4. is: \$i=$i, \$j=$j\n";
- echo "3 loop iterations should follow:\n";
- while ($i<=$j) {
- echo $i++." $j\n";
- }
- }
- } elseif (0) {
- echo "this definitely shouldn't be displayed\n";
- } else {
- echo "and this too shouldn't be displayed\n";
- }
- echo "**********************************\n";
-}
-?>
-
-*** C-style else-if's ***
-<?php
- /* looks like without we even tried, C-style else-if structure works fine! */
- if ($a=0) {
- echo "This shouldn't be displayed\n";
- } else if ($a++) {
- echo "This shouldn't be displayed either\n";
- } else if (--$a) {
- echo "No, this neither\n";
- } else if (++$a) {
- echo "This should be displayed\n";
- } else {
- echo "This shouldn't be displayed at all\n";
- }
-?>
-*************************
-
-*** WHILE tests ***
-<?php
-$i=0;
-$j=20;
-while ($i<(2*$j)) {
- if ($i>$j) {
- echo "$i is greater than $j\n";
- } else if ($i==$j) {
- echo "$i equals $j\n";
- } else {
- echo "$i is smaller than $j\n";
- }
- $i++;
-}
-?>
-*******************
-
-
-*** Nested WHILEs ***
-<?php
-$arr_len=3;
-
-$i=0;
-while ($i<$arr_len) {
- $j=0;
- while ($j<$arr_len) {
- $k=0;
- while ($k<$arr_len) {
- ${"test$i$j"}[$k] = $i+$j+$k;
- $k++;
- }
- $j++;
- }
- $i++;
-}
-
-echo "Each array variable should be equal to the sum of its indices:\n";
-
-$i=0;
-while ($i<$arr_len) {
- $j=0;
- while ($j<$arr_len) {
- $k=0;
- while ($k<$arr_len) {
- echo "\${test$i$j}[$k] = ".${"test$i$j"}[$k]."\n";
- $k++;
- }
- $j++;
- }
- $i++;
-}
-?>
-*********************
-
-*** hash test... ***
-<?php
-/*
-$i=0;
-
-while ($i<10000) {
- $arr[$i]=$i;
- $i++;
-}
-
-$i=0;
-while ($i<10000) {
- echo $arr[$i++]."\n";
-}
-*/
-echo "commented out...";
-?>
-
-**************************
-
-*** Hash resizing test ***
-<?php
-$i = 10;
-$a = "b";
-while ($i > 0) {
- $a = $a . "a";
- echo "$a\n";
- $resize[$a] = $i;
- $i--;
-}
-$i = 10;
-$a = "b";
-while ($i > 0) {
- $a = $a . "a";
- echo "$a\n";
- echo $resize[$a]."\n";
- $i--;
-}
-?>
-**************************
-
-
-*** break/continue test ***
-<?php
-$i=0;
-
-echo "\$i should go from 0 to 2\n";
-while ($i<5) {
- if ($i>2) {
- break;
- }
- $j=0;
- echo "\$j should go from 3 to 4, and \$q should go from 3 to 4\n";
- while ($j<5) {
- if ($j<=2) {
- $j++;
- continue;
- }
- echo " \$j=$j\n";
- for ($q=0; $q<=10; $q++) {
- if ($q<3) {
- continue;
- }
- if ($q>4) {
- break;
- }
- echo " \$q=$q\n";
- }
- $j++;
- }
- $j=0;
- echo "\$j should go from 0 to 2\n";
- while ($j<5) {
- if ($j>2) {
- $k=0;
- echo "\$k should go from 0 to 2\n";
- while ($k<5) {
- if ($k>2) {
- break 2;
- }
- echo " \$k=$k\n";
- $k++;
- }
- }
- echo " \$j=$j\n";
- $j++;
- }
- echo "\$i=$i\n";
- $i++;
-}
-?>
-***********************
-
-*** Nested file include test ***
-<?php include("023-2.inc"); ?>
-********************************
-
-<?php
-{
- echo "Tests completed.\n"; # testing some PHP style comment...
-}
-
-} ?>
---EXPECT--
-<html>
-<head>
-*** Testing assignments and variable aliasing: ***
-This should read "blah": blah
-This should read "this is nifty": this is nifty
-*************************************************
-
-*** Testing integer operators ***
-Correct result - 8: 8
-Correct result - 8: 8
-Correct result - 2: 2
-Correct result - -2: -2
-Correct result - 15: 15
-Correct result - 15: 15
-Correct result - 2: 2
-Correct result - 3: 3
-*********************************
-
-*** Testing real operators ***
-Correct result - 8: 8
-Correct result - 8: 8
-Correct result - 2: 2
-Correct result - -2: -2
-Correct result - 15: 15
-Correct result - 15: 15
-Correct result - 2: 2
-Correct result - 3: 3
-*********************************
-
-*** Testing if/elseif/else control ***
-
-This works
-this_still_works
-should_print
-
-
-*** Seriously nested if's test ***
-** spelling correction by kluzz **
-Only two lines of text should follow:
-this should be displayed. should be: $i=1, $j=0. is: $i=1, $j=0
-this is supposed to be displayed. should be: $i=2, $j=4. is: $i=2, $j=4
-3 loop iterations should follow:
-2 4
-3 4
-4 4
-**********************************
-
-*** C-style else-if's ***
-This should be displayed
-*************************
-
-*** WHILE tests ***
-0 is smaller than 20
-1 is smaller than 20
-2 is smaller than 20
-3 is smaller than 20
-4 is smaller than 20
-5 is smaller than 20
-6 is smaller than 20
-7 is smaller than 20
-8 is smaller than 20
-9 is smaller than 20
-10 is smaller than 20
-11 is smaller than 20
-12 is smaller than 20
-13 is smaller than 20
-14 is smaller than 20
-15 is smaller than 20
-16 is smaller than 20
-17 is smaller than 20
-18 is smaller than 20
-19 is smaller than 20
-20 equals 20
-21 is greater than 20
-22 is greater than 20
-23 is greater than 20
-24 is greater than 20
-25 is greater than 20
-26 is greater than 20
-27 is greater than 20
-28 is greater than 20
-29 is greater than 20
-30 is greater than 20
-31 is greater than 20
-32 is greater than 20
-33 is greater than 20
-34 is greater than 20
-35 is greater than 20
-36 is greater than 20
-37 is greater than 20
-38 is greater than 20
-39 is greater than 20
-*******************
-
-
-*** Nested WHILEs ***
-Each array variable should be equal to the sum of its indices:
-${test00}[0] = 0
-${test00}[1] = 1
-${test00}[2] = 2
-${test01}[0] = 1
-${test01}[1] = 2
-${test01}[2] = 3
-${test02}[0] = 2
-${test02}[1] = 3
-${test02}[2] = 4
-${test10}[0] = 1
-${test10}[1] = 2
-${test10}[2] = 3
-${test11}[0] = 2
-${test11}[1] = 3
-${test11}[2] = 4
-${test12}[0] = 3
-${test12}[1] = 4
-${test12}[2] = 5
-${test20}[0] = 2
-${test20}[1] = 3
-${test20}[2] = 4
-${test21}[0] = 3
-${test21}[1] = 4
-${test21}[2] = 5
-${test22}[0] = 4
-${test22}[1] = 5
-${test22}[2] = 6
-*********************
-
-*** hash test... ***
-commented out...
-**************************
-
-*** Hash resizing test ***
-ba
-baa
-baaa
-baaaa
-baaaaa
-baaaaaa
-baaaaaaa
-baaaaaaaa
-baaaaaaaaa
-baaaaaaaaaa
-ba
-10
-baa
-9
-baaa
-8
-baaaa
-7
-baaaaa
-6
-baaaaaa
-5
-baaaaaaa
-4
-baaaaaaaa
-3
-baaaaaaaaa
-2
-baaaaaaaaaa
-1
-**************************
-
-
-*** break/continue test ***
-$i should go from 0 to 2
-$j should go from 3 to 4, and $q should go from 3 to 4
- $j=3
- $q=3
- $q=4
- $j=4
- $q=3
- $q=4
-$j should go from 0 to 2
- $j=0
- $j=1
- $j=2
-$k should go from 0 to 2
- $k=0
- $k=1
- $k=2
-$i=0
-$j should go from 3 to 4, and $q should go from 3 to 4
- $j=3
- $q=3
- $q=4
- $j=4
- $q=3
- $q=4
-$j should go from 0 to 2
- $j=0
- $j=1
- $j=2
-$k should go from 0 to 2
- $k=0
- $k=1
- $k=2
-$i=1
-$j should go from 3 to 4, and $q should go from 3 to 4
- $j=3
- $q=3
- $q=4
- $j=4
- $q=3
- $q=4
-$j should go from 0 to 2
- $j=0
- $j=1
- $j=2
-$k should go from 0 to 2
- $k=0
- $k=1
- $k=2
-$i=2
-***********************
-
-*** Nested file include test ***
-<html>
-This is Finish.phtml. This file is supposed to be included
-from regression_test.phtml. This is normal HTML.
-and this is PHP code, 2+2=4
-</html>
-********************************
-
-Tests completed.
-<html>
-<head>
-*** Testing assignments and variable aliasing: ***
-This should read "blah": blah
-This should read "this is nifty": this is nifty
-*************************************************
-
-*** Testing integer operators ***
-Correct result - 8: 8
-Correct result - 8: 8
-Correct result - 2: 2
-Correct result - -2: -2
-Correct result - 15: 15
-Correct result - 15: 15
-Correct result - 2: 2
-Correct result - 3: 3
-*********************************
-
-*** Testing real operators ***
-Correct result - 8: 8
-Correct result - 8: 8
-Correct result - 2: 2
-Correct result - -2: -2
-Correct result - 15: 15
-Correct result - 15: 15
-Correct result - 2: 2
-Correct result - 3: 3
-*********************************
-
-*** Testing if/elseif/else control ***
-
-This works
-this_still_works
-should_print
-
-
-*** Seriously nested if's test ***
-** spelling correction by kluzz **
-Only two lines of text should follow:
-this should be displayed. should be: $i=1, $j=0. is: $i=1, $j=0
-this is supposed to be displayed. should be: $i=2, $j=4. is: $i=2, $j=4
-3 loop iterations should follow:
-2 4
-3 4
-4 4
-**********************************
-
-*** C-style else-if's ***
-This should be displayed
-*************************
-
-*** WHILE tests ***
-0 is smaller than 20
-1 is smaller than 20
-2 is smaller than 20
-3 is smaller than 20
-4 is smaller than 20
-5 is smaller than 20
-6 is smaller than 20
-7 is smaller than 20
-8 is smaller than 20
-9 is smaller than 20
-10 is smaller than 20
-11 is smaller than 20
-12 is smaller than 20
-13 is smaller than 20
-14 is smaller than 20
-15 is smaller than 20
-16 is smaller than 20
-17 is smaller than 20
-18 is smaller than 20
-19 is smaller than 20
-20 equals 20
-21 is greater than 20
-22 is greater than 20
-23 is greater than 20
-24 is greater than 20
-25 is greater than 20
-26 is greater than 20
-27 is greater than 20
-28 is greater than 20
-29 is greater than 20
-30 is greater than 20
-31 is greater than 20
-32 is greater than 20
-33 is greater than 20
-34 is greater than 20
-35 is greater than 20
-36 is greater than 20
-37 is greater than 20
-38 is greater than 20
-39 is greater than 20
-*******************
-
-
-*** Nested WHILEs ***
-Each array variable should be equal to the sum of its indices:
-${test00}[0] = 0
-${test00}[1] = 1
-${test00}[2] = 2
-${test01}[0] = 1
-${test01}[1] = 2
-${test01}[2] = 3
-${test02}[0] = 2
-${test02}[1] = 3
-${test02}[2] = 4
-${test10}[0] = 1
-${test10}[1] = 2
-${test10}[2] = 3
-${test11}[0] = 2
-${test11}[1] = 3
-${test11}[2] = 4
-${test12}[0] = 3
-${test12}[1] = 4
-${test12}[2] = 5
-${test20}[0] = 2
-${test20}[1] = 3
-${test20}[2] = 4
-${test21}[0] = 3
-${test21}[1] = 4
-${test21}[2] = 5
-${test22}[0] = 4
-${test22}[1] = 5
-${test22}[2] = 6
-*********************
-
-*** hash test... ***
-commented out...
-**************************
-
-*** Hash resizing test ***
-ba
-baa
-baaa
-baaaa
-baaaaa
-baaaaaa
-baaaaaaa
-baaaaaaaa
-baaaaaaaaa
-baaaaaaaaaa
-ba
-10
-baa
-9
-baaa
-8
-baaaa
-7
-baaaaa
-6
-baaaaaa
-5
-baaaaaaa
-4
-baaaaaaaa
-3
-baaaaaaaaa
-2
-baaaaaaaaaa
-1
-**************************
-
-
-*** break/continue test ***
-$i should go from 0 to 2
-$j should go from 3 to 4, and $q should go from 3 to 4
- $j=3
- $q=3
- $q=4
- $j=4
- $q=3
- $q=4
-$j should go from 0 to 2
- $j=0
- $j=1
- $j=2
-$k should go from 0 to 2
- $k=0
- $k=1
- $k=2
-$i=0
-$j should go from 3 to 4, and $q should go from 3 to 4
- $j=3
- $q=3
- $q=4
- $j=4
- $q=3
- $q=4
-$j should go from 0 to 2
- $j=0
- $j=1
- $j=2
-$k should go from 0 to 2
- $k=0
- $k=1
- $k=2
-$i=1
-$j should go from 3 to 4, and $q should go from 3 to 4
- $j=3
- $q=3
- $q=4
- $j=4
- $q=3
- $q=4
-$j should go from 0 to 2
- $j=0
- $j=1
- $j=2
-$k should go from 0 to 2
- $k=0
- $k=1
- $k=2
-$i=2
-***********************
-
-*** Nested file include test ***
-<html>
-This is Finish.phtml. This file is supposed to be included
-from regression_test.phtml. This is normal HTML.
-and this is PHP code, 2+2=4
-</html>
-********************************
-
-Tests completed.
-<html>
-<head>
-*** Testing assignments and variable aliasing: ***
-This should read "blah": blah
-This should read "this is nifty": this is nifty
-*************************************************
-
-*** Testing integer operators ***
-Correct result - 8: 8
-Correct result - 8: 8
-Correct result - 2: 2
-Correct result - -2: -2
-Correct result - 15: 15
-Correct result - 15: 15
-Correct result - 2: 2
-Correct result - 3: 3
-*********************************
-
-*** Testing real operators ***
-Correct result - 8: 8
-Correct result - 8: 8
-Correct result - 2: 2
-Correct result - -2: -2
-Correct result - 15: 15
-Correct result - 15: 15
-Correct result - 2: 2
-Correct result - 3: 3
-*********************************
-
-*** Testing if/elseif/else control ***
-
-This works
-this_still_works
-should_print
-
-
-*** Seriously nested if's test ***
-** spelling correction by kluzz **
-Only two lines of text should follow:
-this should be displayed. should be: $i=1, $j=0. is: $i=1, $j=0
-this is supposed to be displayed. should be: $i=2, $j=4. is: $i=2, $j=4
-3 loop iterations should follow:
-2 4
-3 4
-4 4
-**********************************
-
-*** C-style else-if's ***
-This should be displayed
-*************************
-
-*** WHILE tests ***
-0 is smaller than 20
-1 is smaller than 20
-2 is smaller than 20
-3 is smaller than 20
-4 is smaller than 20
-5 is smaller than 20
-6 is smaller than 20
-7 is smaller than 20
-8 is smaller than 20
-9 is smaller than 20
-10 is smaller than 20
-11 is smaller than 20
-12 is smaller than 20
-13 is smaller than 20
-14 is smaller than 20
-15 is smaller than 20
-16 is smaller than 20
-17 is smaller than 20
-18 is smaller than 20
-19 is smaller than 20
-20 equals 20
-21 is greater than 20
-22 is greater than 20
-23 is greater than 20
-24 is greater than 20
-25 is greater than 20
-26 is greater than 20
-27 is greater than 20
-28 is greater than 20
-29 is greater than 20
-30 is greater than 20
-31 is greater than 20
-32 is greater than 20
-33 is greater than 20
-34 is greater than 20
-35 is greater than 20
-36 is greater than 20
-37 is greater than 20
-38 is greater than 20
-39 is greater than 20
-*******************
-
-
-*** Nested WHILEs ***
-Each array variable should be equal to the sum of its indices:
-${test00}[0] = 0
-${test00}[1] = 1
-${test00}[2] = 2
-${test01}[0] = 1
-${test01}[1] = 2
-${test01}[2] = 3
-${test02}[0] = 2
-${test02}[1] = 3
-${test02}[2] = 4
-${test10}[0] = 1
-${test10}[1] = 2
-${test10}[2] = 3
-${test11}[0] = 2
-${test11}[1] = 3
-${test11}[2] = 4
-${test12}[0] = 3
-${test12}[1] = 4
-${test12}[2] = 5
-${test20}[0] = 2
-${test20}[1] = 3
-${test20}[2] = 4
-${test21}[0] = 3
-${test21}[1] = 4
-${test21}[2] = 5
-${test22}[0] = 4
-${test22}[1] = 5
-${test22}[2] = 6
-*********************
-
-*** hash test... ***
-commented out...
-**************************
-
-*** Hash resizing test ***
-ba
-baa
-baaa
-baaaa
-baaaaa
-baaaaaa
-baaaaaaa
-baaaaaaaa
-baaaaaaaaa
-baaaaaaaaaa
-ba
-10
-baa
-9
-baaa
-8
-baaaa
-7
-baaaaa
-6
-baaaaaa
-5
-baaaaaaa
-4
-baaaaaaaa
-3
-baaaaaaaaa
-2
-baaaaaaaaaa
-1
-**************************
-
-
-*** break/continue test ***
-$i should go from 0 to 2
-$j should go from 3 to 4, and $q should go from 3 to 4
- $j=3
- $q=3
- $q=4
- $j=4
- $q=3
- $q=4
-$j should go from 0 to 2
- $j=0
- $j=1
- $j=2
-$k should go from 0 to 2
- $k=0
- $k=1
- $k=2
-$i=0
-$j should go from 3 to 4, and $q should go from 3 to 4
- $j=3
- $q=3
- $q=4
- $j=4
- $q=3
- $q=4
-$j should go from 0 to 2
- $j=0
- $j=1
- $j=2
-$k should go from 0 to 2
- $k=0
- $k=1
- $k=2
-$i=1
-$j should go from 3 to 4, and $q should go from 3 to 4
- $j=3
- $q=3
- $q=4
- $j=4
- $q=3
- $q=4
-$j should go from 0 to 2
- $j=0
- $j=1
- $j=2
-$k should go from 0 to 2
- $k=0
- $k=1
- $k=2
-$i=2
-***********************
-
-*** Nested file include test ***
-<html>
-This is Finish.phtml. This file is supposed to be included
-from regression_test.phtml. This is normal HTML.
-and this is PHP code, 2+2=4
-</html>
-********************************
-
-Tests completed.
-<html>
-<head>
-*** Testing assignments and variable aliasing: ***
-This should read "blah": blah
-This should read "this is nifty": this is nifty
-*************************************************
-
-*** Testing integer operators ***
-Correct result - 8: 8
-Correct result - 8: 8
-Correct result - 2: 2
-Correct result - -2: -2
-Correct result - 15: 15
-Correct result - 15: 15
-Correct result - 2: 2
-Correct result - 3: 3
-*********************************
-
-*** Testing real operators ***
-Correct result - 8: 8
-Correct result - 8: 8
-Correct result - 2: 2
-Correct result - -2: -2
-Correct result - 15: 15
-Correct result - 15: 15
-Correct result - 2: 2
-Correct result - 3: 3
-*********************************
-
-*** Testing if/elseif/else control ***
-
-This works
-this_still_works
-should_print
-
-
-*** Seriously nested if's test ***
-** spelling correction by kluzz **
-Only two lines of text should follow:
-this should be displayed. should be: $i=1, $j=0. is: $i=1, $j=0
-this is supposed to be displayed. should be: $i=2, $j=4. is: $i=2, $j=4
-3 loop iterations should follow:
-2 4
-3 4
-4 4
-**********************************
-
-*** C-style else-if's ***
-This should be displayed
-*************************
-
-*** WHILE tests ***
-0 is smaller than 20
-1 is smaller than 20
-2 is smaller than 20
-3 is smaller than 20
-4 is smaller than 20
-5 is smaller than 20
-6 is smaller than 20
-7 is smaller than 20
-8 is smaller than 20
-9 is smaller than 20
-10 is smaller than 20
-11 is smaller than 20
-12 is smaller than 20
-13 is smaller than 20
-14 is smaller than 20
-15 is smaller than 20
-16 is smaller than 20
-17 is smaller than 20
-18 is smaller than 20
-19 is smaller than 20
-20 equals 20
-21 is greater than 20
-22 is greater than 20
-23 is greater than 20
-24 is greater than 20
-25 is greater than 20
-26 is greater than 20
-27 is greater than 20
-28 is greater than 20
-29 is greater than 20
-30 is greater than 20
-31 is greater than 20
-32 is greater than 20
-33 is greater than 20
-34 is greater than 20
-35 is greater than 20
-36 is greater than 20
-37 is greater than 20
-38 is greater than 20
-39 is greater than 20
-*******************
-
-
-*** Nested WHILEs ***
-Each array variable should be equal to the sum of its indices:
-${test00}[0] = 0
-${test00}[1] = 1
-${test00}[2] = 2
-${test01}[0] = 1
-${test01}[1] = 2
-${test01}[2] = 3
-${test02}[0] = 2
-${test02}[1] = 3
-${test02}[2] = 4
-${test10}[0] = 1
-${test10}[1] = 2
-${test10}[2] = 3
-${test11}[0] = 2
-${test11}[1] = 3
-${test11}[2] = 4
-${test12}[0] = 3
-${test12}[1] = 4
-${test12}[2] = 5
-${test20}[0] = 2
-${test20}[1] = 3
-${test20}[2] = 4
-${test21}[0] = 3
-${test21}[1] = 4
-${test21}[2] = 5
-${test22}[0] = 4
-${test22}[1] = 5
-${test22}[2] = 6
-*********************
-
-*** hash test... ***
-commented out...
-**************************
-
-*** Hash resizing test ***
-ba
-baa
-baaa
-baaaa
-baaaaa
-baaaaaa
-baaaaaaa
-baaaaaaaa
-baaaaaaaaa
-baaaaaaaaaa
-ba
-10
-baa
-9
-baaa
-8
-baaaa
-7
-baaaaa
-6
-baaaaaa
-5
-baaaaaaa
-4
-baaaaaaaa
-3
-baaaaaaaaa
-2
-baaaaaaaaaa
-1
-**************************
-
-
-*** break/continue test ***
-$i should go from 0 to 2
-$j should go from 3 to 4, and $q should go from 3 to 4
- $j=3
- $q=3
- $q=4
- $j=4
- $q=3
- $q=4
-$j should go from 0 to 2
- $j=0
- $j=1
- $j=2
-$k should go from 0 to 2
- $k=0
- $k=1
- $k=2
-$i=0
-$j should go from 3 to 4, and $q should go from 3 to 4
- $j=3
- $q=3
- $q=4
- $j=4
- $q=3
- $q=4
-$j should go from 0 to 2
- $j=0
- $j=1
- $j=2
-$k should go from 0 to 2
- $k=0
- $k=1
- $k=2
-$i=1
-$j should go from 3 to 4, and $q should go from 3 to 4
- $j=3
- $q=3
- $q=4
- $j=4
- $q=3
- $q=4
-$j should go from 0 to 2
- $j=0
- $j=1
- $j=2
-$k should go from 0 to 2
- $k=0
- $k=1
- $k=2
-$i=2
-***********************
-
-*** Nested file include test ***
-<html>
-This is Finish.phtml. This file is supposed to be included
-from regression_test.phtml. This is normal HTML.
-and this is PHP code, 2+2=4
-</html>
-********************************
-
-Tests completed.
-<html>
-<head>
-*** Testing assignments and variable aliasing: ***
-This should read "blah": blah
-This should read "this is nifty": this is nifty
-*************************************************
-
-*** Testing integer operators ***
-Correct result - 8: 8
-Correct result - 8: 8
-Correct result - 2: 2
-Correct result - -2: -2
-Correct result - 15: 15
-Correct result - 15: 15
-Correct result - 2: 2
-Correct result - 3: 3
-*********************************
-
-*** Testing real operators ***
-Correct result - 8: 8
-Correct result - 8: 8
-Correct result - 2: 2
-Correct result - -2: -2
-Correct result - 15: 15
-Correct result - 15: 15
-Correct result - 2: 2
-Correct result - 3: 3
-*********************************
-
-*** Testing if/elseif/else control ***
-
-This works
-this_still_works
-should_print
-
-
-*** Seriously nested if's test ***
-** spelling correction by kluzz **
-Only two lines of text should follow:
-this should be displayed. should be: $i=1, $j=0. is: $i=1, $j=0
-this is supposed to be displayed. should be: $i=2, $j=4. is: $i=2, $j=4
-3 loop iterations should follow:
-2 4
-3 4
-4 4
-**********************************
-
-*** C-style else-if's ***
-This should be displayed
-*************************
-
-*** WHILE tests ***
-0 is smaller than 20
-1 is smaller than 20
-2 is smaller than 20
-3 is smaller than 20
-4 is smaller than 20
-5 is smaller than 20
-6 is smaller than 20
-7 is smaller than 20
-8 is smaller than 20
-9 is smaller than 20
-10 is smaller than 20
-11 is smaller than 20
-12 is smaller than 20
-13 is smaller than 20
-14 is smaller than 20
-15 is smaller than 20
-16 is smaller than 20
-17 is smaller than 20
-18 is smaller than 20
-19 is smaller than 20
-20 equals 20
-21 is greater than 20
-22 is greater than 20
-23 is greater than 20
-24 is greater than 20
-25 is greater than 20
-26 is greater than 20
-27 is greater than 20
-28 is greater than 20
-29 is greater than 20
-30 is greater than 20
-31 is greater than 20
-32 is greater than 20
-33 is greater than 20
-34 is greater than 20
-35 is greater than 20
-36 is greater than 20
-37 is greater than 20
-38 is greater than 20
-39 is greater than 20
-*******************
-
-
-*** Nested WHILEs ***
-Each array variable should be equal to the sum of its indices:
-${test00}[0] = 0
-${test00}[1] = 1
-${test00}[2] = 2
-${test01}[0] = 1
-${test01}[1] = 2
-${test01}[2] = 3
-${test02}[0] = 2
-${test02}[1] = 3
-${test02}[2] = 4
-${test10}[0] = 1
-${test10}[1] = 2
-${test10}[2] = 3
-${test11}[0] = 2
-${test11}[1] = 3
-${test11}[2] = 4
-${test12}[0] = 3
-${test12}[1] = 4
-${test12}[2] = 5
-${test20}[0] = 2
-${test20}[1] = 3
-${test20}[2] = 4
-${test21}[0] = 3
-${test21}[1] = 4
-${test21}[2] = 5
-${test22}[0] = 4
-${test22}[1] = 5
-${test22}[2] = 6
-*********************
-
-*** hash test... ***
-commented out...
-**************************
-
-*** Hash resizing test ***
-ba
-baa
-baaa
-baaaa
-baaaaa
-baaaaaa
-baaaaaaa
-baaaaaaaa
-baaaaaaaaa
-baaaaaaaaaa
-ba
-10
-baa
-9
-baaa
-8
-baaaa
-7
-baaaaa
-6
-baaaaaa
-5
-baaaaaaa
-4
-baaaaaaaa
-3
-baaaaaaaaa
-2
-baaaaaaaaaa
-1
-**************************
-
-
-*** break/continue test ***
-$i should go from 0 to 2
-$j should go from 3 to 4, and $q should go from 3 to 4
- $j=3
- $q=3
- $q=4
- $j=4
- $q=3
- $q=4
-$j should go from 0 to 2
- $j=0
- $j=1
- $j=2
-$k should go from 0 to 2
- $k=0
- $k=1
- $k=2
-$i=0
-$j should go from 3 to 4, and $q should go from 3 to 4
- $j=3
- $q=3
- $q=4
- $j=4
- $q=3
- $q=4
-$j should go from 0 to 2
- $j=0
- $j=1
- $j=2
-$k should go from 0 to 2
- $k=0
- $k=1
- $k=2
-$i=1
-$j should go from 3 to 4, and $q should go from 3 to 4
- $j=3
- $q=3
- $q=4
- $j=4
- $q=3
- $q=4
-$j should go from 0 to 2
- $j=0
- $j=1
- $j=2
-$k should go from 0 to 2
- $k=0
- $k=1
- $k=2
-$i=2
-***********************
-
-*** Nested file include test ***
-<html>
-This is Finish.phtml. This file is supposed to be included
-from regression_test.phtml. This is normal HTML.
-and this is PHP code, 2+2=4
-</html>
-********************************
-
-Tests completed.
-<html>
-<head>
-*** Testing assignments and variable aliasing: ***
-This should read "blah": blah
-This should read "this is nifty": this is nifty
-*************************************************
-
-*** Testing integer operators ***
-Correct result - 8: 8
-Correct result - 8: 8
-Correct result - 2: 2
-Correct result - -2: -2
-Correct result - 15: 15
-Correct result - 15: 15
-Correct result - 2: 2
-Correct result - 3: 3
-*********************************
-
-*** Testing real operators ***
-Correct result - 8: 8
-Correct result - 8: 8
-Correct result - 2: 2
-Correct result - -2: -2
-Correct result - 15: 15
-Correct result - 15: 15
-Correct result - 2: 2
-Correct result - 3: 3
-*********************************
-
-*** Testing if/elseif/else control ***
-
-This works
-this_still_works
-should_print
-
-
-*** Seriously nested if's test ***
-** spelling correction by kluzz **
-Only two lines of text should follow:
-this should be displayed. should be: $i=1, $j=0. is: $i=1, $j=0
-this is supposed to be displayed. should be: $i=2, $j=4. is: $i=2, $j=4
-3 loop iterations should follow:
-2 4
-3 4
-4 4
-**********************************
-
-*** C-style else-if's ***
-This should be displayed
-*************************
-
-*** WHILE tests ***
-0 is smaller than 20
-1 is smaller than 20
-2 is smaller than 20
-3 is smaller than 20
-4 is smaller than 20
-5 is smaller than 20
-6 is smaller than 20
-7 is smaller than 20
-8 is smaller than 20
-9 is smaller than 20
-10 is smaller than 20
-11 is smaller than 20
-12 is smaller than 20
-13 is smaller than 20
-14 is smaller than 20
-15 is smaller than 20
-16 is smaller than 20
-17 is smaller than 20
-18 is smaller than 20
-19 is smaller than 20
-20 equals 20
-21 is greater than 20
-22 is greater than 20
-23 is greater than 20
-24 is greater than 20
-25 is greater than 20
-26 is greater than 20
-27 is greater than 20
-28 is greater than 20
-29 is greater than 20
-30 is greater than 20
-31 is greater than 20
-32 is greater than 20
-33 is greater than 20
-34 is greater than 20
-35 is greater than 20
-36 is greater than 20
-37 is greater than 20
-38 is greater than 20
-39 is greater than 20
-*******************
-
-
-*** Nested WHILEs ***
-Each array variable should be equal to the sum of its indices:
-${test00}[0] = 0
-${test00}[1] = 1
-${test00}[2] = 2
-${test01}[0] = 1
-${test01}[1] = 2
-${test01}[2] = 3
-${test02}[0] = 2
-${test02}[1] = 3
-${test02}[2] = 4
-${test10}[0] = 1
-${test10}[1] = 2
-${test10}[2] = 3
-${test11}[0] = 2
-${test11}[1] = 3
-${test11}[2] = 4
-${test12}[0] = 3
-${test12}[1] = 4
-${test12}[2] = 5
-${test20}[0] = 2
-${test20}[1] = 3
-${test20}[2] = 4
-${test21}[0] = 3
-${test21}[1] = 4
-${test21}[2] = 5
-${test22}[0] = 4
-${test22}[1] = 5
-${test22}[2] = 6
-*********************
-
-*** hash test... ***
-commented out...
-**************************
-
-*** Hash resizing test ***
-ba
-baa
-baaa
-baaaa
-baaaaa
-baaaaaa
-baaaaaaa
-baaaaaaaa
-baaaaaaaaa
-baaaaaaaaaa
-ba
-10
-baa
-9
-baaa
-8
-baaaa
-7
-baaaaa
-6
-baaaaaa
-5
-baaaaaaa
-4
-baaaaaaaa
-3
-baaaaaaaaa
-2
-baaaaaaaaaa
-1
-**************************
-
-
-*** break/continue test ***
-$i should go from 0 to 2
-$j should go from 3 to 4, and $q should go from 3 to 4
- $j=3
- $q=3
- $q=4
- $j=4
- $q=3
- $q=4
-$j should go from 0 to 2
- $j=0
- $j=1
- $j=2
-$k should go from 0 to 2
- $k=0
- $k=1
- $k=2
-$i=0
-$j should go from 3 to 4, and $q should go from 3 to 4
- $j=3
- $q=3
- $q=4
- $j=4
- $q=3
- $q=4
-$j should go from 0 to 2
- $j=0
- $j=1
- $j=2
-$k should go from 0 to 2
- $k=0
- $k=1
- $k=2
-$i=1
-$j should go from 3 to 4, and $q should go from 3 to 4
- $j=3
- $q=3
- $q=4
- $j=4
- $q=3
- $q=4
-$j should go from 0 to 2
- $j=0
- $j=1
- $j=2
-$k should go from 0 to 2
- $k=0
- $k=1
- $k=2
-$i=2
-***********************
-
-*** Nested file include test ***
-<html>
-This is Finish.phtml. This file is supposed to be included
-from regression_test.phtml. This is normal HTML.
-and this is PHP code, 2+2=4
-</html>
-********************************
-
-Tests completed.
-<html>
-<head>
-*** Testing assignments and variable aliasing: ***
-This should read "blah": blah
-This should read "this is nifty": this is nifty
-*************************************************
-
-*** Testing integer operators ***
-Correct result - 8: 8
-Correct result - 8: 8
-Correct result - 2: 2
-Correct result - -2: -2
-Correct result - 15: 15
-Correct result - 15: 15
-Correct result - 2: 2
-Correct result - 3: 3
-*********************************
-
-*** Testing real operators ***
-Correct result - 8: 8
-Correct result - 8: 8
-Correct result - 2: 2
-Correct result - -2: -2
-Correct result - 15: 15
-Correct result - 15: 15
-Correct result - 2: 2
-Correct result - 3: 3
-*********************************
-
-*** Testing if/elseif/else control ***
-
-This works
-this_still_works
-should_print
-
-
-*** Seriously nested if's test ***
-** spelling correction by kluzz **
-Only two lines of text should follow:
-this should be displayed. should be: $i=1, $j=0. is: $i=1, $j=0
-this is supposed to be displayed. should be: $i=2, $j=4. is: $i=2, $j=4
-3 loop iterations should follow:
-2 4
-3 4
-4 4
-**********************************
-
-*** C-style else-if's ***
-This should be displayed
-*************************
-
-*** WHILE tests ***
-0 is smaller than 20
-1 is smaller than 20
-2 is smaller than 20
-3 is smaller than 20
-4 is smaller than 20
-5 is smaller than 20
-6 is smaller than 20
-7 is smaller than 20
-8 is smaller than 20
-9 is smaller than 20
-10 is smaller than 20
-11 is smaller than 20
-12 is smaller than 20
-13 is smaller than 20
-14 is smaller than 20
-15 is smaller than 20
-16 is smaller than 20
-17 is smaller than 20
-18 is smaller than 20
-19 is smaller than 20
-20 equals 20
-21 is greater than 20
-22 is greater than 20
-23 is greater than 20
-24 is greater than 20
-25 is greater than 20
-26 is greater than 20
-27 is greater than 20
-28 is greater than 20
-29 is greater than 20
-30 is greater than 20
-31 is greater than 20
-32 is greater than 20
-33 is greater than 20
-34 is greater than 20
-35 is greater than 20
-36 is greater than 20
-37 is greater than 20
-38 is greater than 20
-39 is greater than 20
-*******************
-
-
-*** Nested WHILEs ***
-Each array variable should be equal to the sum of its indices:
-${test00}[0] = 0
-${test00}[1] = 1
-${test00}[2] = 2
-${test01}[0] = 1
-${test01}[1] = 2
-${test01}[2] = 3
-${test02}[0] = 2
-${test02}[1] = 3
-${test02}[2] = 4
-${test10}[0] = 1
-${test10}[1] = 2
-${test10}[2] = 3
-${test11}[0] = 2
-${test11}[1] = 3
-${test11}[2] = 4
-${test12}[0] = 3
-${test12}[1] = 4
-${test12}[2] = 5
-${test20}[0] = 2
-${test20}[1] = 3
-${test20}[2] = 4
-${test21}[0] = 3
-${test21}[1] = 4
-${test21}[2] = 5
-${test22}[0] = 4
-${test22}[1] = 5
-${test22}[2] = 6
-*********************
-
-*** hash test... ***
-commented out...
-**************************
-
-*** Hash resizing test ***
-ba
-baa
-baaa
-baaaa
-baaaaa
-baaaaaa
-baaaaaaa
-baaaaaaaa
-baaaaaaaaa
-baaaaaaaaaa
-ba
-10
-baa
-9
-baaa
-8
-baaaa
-7
-baaaaa
-6
-baaaaaa
-5
-baaaaaaa
-4
-baaaaaaaa
-3
-baaaaaaaaa
-2
-baaaaaaaaaa
-1
-**************************
-
-
-*** break/continue test ***
-$i should go from 0 to 2
-$j should go from 3 to 4, and $q should go from 3 to 4
- $j=3
- $q=3
- $q=4
- $j=4
- $q=3
- $q=4
-$j should go from 0 to 2
- $j=0
- $j=1
- $j=2
-$k should go from 0 to 2
- $k=0
- $k=1
- $k=2
-$i=0
-$j should go from 3 to 4, and $q should go from 3 to 4
- $j=3
- $q=3
- $q=4
- $j=4
- $q=3
- $q=4
-$j should go from 0 to 2
- $j=0
- $j=1
- $j=2
-$k should go from 0 to 2
- $k=0
- $k=1
- $k=2
-$i=1
-$j should go from 3 to 4, and $q should go from 3 to 4
- $j=3
- $q=3
- $q=4
- $j=4
- $q=3
- $q=4
-$j should go from 0 to 2
- $j=0
- $j=1
- $j=2
-$k should go from 0 to 2
- $k=0
- $k=1
- $k=2
-$i=2
-***********************
-
-*** Nested file include test ***
-<html>
-This is Finish.phtml. This file is supposed to be included
-from regression_test.phtml. This is normal HTML.
-and this is PHP code, 2+2=4
-</html>
-********************************
-
-Tests completed.
-<html>
-<head>
-*** Testing assignments and variable aliasing: ***
-This should read "blah": blah
-This should read "this is nifty": this is nifty
-*************************************************
-
-*** Testing integer operators ***
-Correct result - 8: 8
-Correct result - 8: 8
-Correct result - 2: 2
-Correct result - -2: -2
-Correct result - 15: 15
-Correct result - 15: 15
-Correct result - 2: 2
-Correct result - 3: 3
-*********************************
-
-*** Testing real operators ***
-Correct result - 8: 8
-Correct result - 8: 8
-Correct result - 2: 2
-Correct result - -2: -2
-Correct result - 15: 15
-Correct result - 15: 15
-Correct result - 2: 2
-Correct result - 3: 3
-*********************************
-
-*** Testing if/elseif/else control ***
-
-This works
-this_still_works
-should_print
-
-
-*** Seriously nested if's test ***
-** spelling correction by kluzz **
-Only two lines of text should follow:
-this should be displayed. should be: $i=1, $j=0. is: $i=1, $j=0
-this is supposed to be displayed. should be: $i=2, $j=4. is: $i=2, $j=4
-3 loop iterations should follow:
-2 4
-3 4
-4 4
-**********************************
-
-*** C-style else-if's ***
-This should be displayed
-*************************
-
-*** WHILE tests ***
-0 is smaller than 20
-1 is smaller than 20
-2 is smaller than 20
-3 is smaller than 20
-4 is smaller than 20
-5 is smaller than 20
-6 is smaller than 20
-7 is smaller than 20
-8 is smaller than 20
-9 is smaller than 20
-10 is smaller than 20
-11 is smaller than 20
-12 is smaller than 20
-13 is smaller than 20
-14 is smaller than 20
-15 is smaller than 20
-16 is smaller than 20
-17 is smaller than 20
-18 is smaller than 20
-19 is smaller than 20
-20 equals 20
-21 is greater than 20
-22 is greater than 20
-23 is greater than 20
-24 is greater than 20
-25 is greater than 20
-26 is greater than 20
-27 is greater than 20
-28 is greater than 20
-29 is greater than 20
-30 is greater than 20
-31 is greater than 20
-32 is greater than 20
-33 is greater than 20
-34 is greater than 20
-35 is greater than 20
-36 is greater than 20
-37 is greater than 20
-38 is greater than 20
-39 is greater than 20
-*******************
-
-
-*** Nested WHILEs ***
-Each array variable should be equal to the sum of its indices:
-${test00}[0] = 0
-${test00}[1] = 1
-${test00}[2] = 2
-${test01}[0] = 1
-${test01}[1] = 2
-${test01}[2] = 3
-${test02}[0] = 2
-${test02}[1] = 3
-${test02}[2] = 4
-${test10}[0] = 1
-${test10}[1] = 2
-${test10}[2] = 3
-${test11}[0] = 2
-${test11}[1] = 3
-${test11}[2] = 4
-${test12}[0] = 3
-${test12}[1] = 4
-${test12}[2] = 5
-${test20}[0] = 2
-${test20}[1] = 3
-${test20}[2] = 4
-${test21}[0] = 3
-${test21}[1] = 4
-${test21}[2] = 5
-${test22}[0] = 4
-${test22}[1] = 5
-${test22}[2] = 6
-*********************
-
-*** hash test... ***
-commented out...
-**************************
-
-*** Hash resizing test ***
-ba
-baa
-baaa
-baaaa
-baaaaa
-baaaaaa
-baaaaaaa
-baaaaaaaa
-baaaaaaaaa
-baaaaaaaaaa
-ba
-10
-baa
-9
-baaa
-8
-baaaa
-7
-baaaaa
-6
-baaaaaa
-5
-baaaaaaa
-4
-baaaaaaaa
-3
-baaaaaaaaa
-2
-baaaaaaaaaa
-1
-**************************
-
-
-*** break/continue test ***
-$i should go from 0 to 2
-$j should go from 3 to 4, and $q should go from 3 to 4
- $j=3
- $q=3
- $q=4
- $j=4
- $q=3
- $q=4
-$j should go from 0 to 2
- $j=0
- $j=1
- $j=2
-$k should go from 0 to 2
- $k=0
- $k=1
- $k=2
-$i=0
-$j should go from 3 to 4, and $q should go from 3 to 4
- $j=3
- $q=3
- $q=4
- $j=4
- $q=3
- $q=4
-$j should go from 0 to 2
- $j=0
- $j=1
- $j=2
-$k should go from 0 to 2
- $k=0
- $k=1
- $k=2
-$i=1
-$j should go from 3 to 4, and $q should go from 3 to 4
- $j=3
- $q=3
- $q=4
- $j=4
- $q=3
- $q=4
-$j should go from 0 to 2
- $j=0
- $j=1
- $j=2
-$k should go from 0 to 2
- $k=0
- $k=1
- $k=2
-$i=2
-***********************
-
-*** Nested file include test ***
-<html>
-This is Finish.phtml. This file is supposed to be included
-from regression_test.phtml. This is normal HTML.
-and this is PHP code, 2+2=4
-</html>
-********************************
-
-Tests completed.
-<html>
-<head>
-*** Testing assignments and variable aliasing: ***
-This should read "blah": blah
-This should read "this is nifty": this is nifty
-*************************************************
-
-*** Testing integer operators ***
-Correct result - 8: 8
-Correct result - 8: 8
-Correct result - 2: 2
-Correct result - -2: -2
-Correct result - 15: 15
-Correct result - 15: 15
-Correct result - 2: 2
-Correct result - 3: 3
-*********************************
-
-*** Testing real operators ***
-Correct result - 8: 8
-Correct result - 8: 8
-Correct result - 2: 2
-Correct result - -2: -2
-Correct result - 15: 15
-Correct result - 15: 15
-Correct result - 2: 2
-Correct result - 3: 3
-*********************************
-
-*** Testing if/elseif/else control ***
-
-This works
-this_still_works
-should_print
-
-
-*** Seriously nested if's test ***
-** spelling correction by kluzz **
-Only two lines of text should follow:
-this should be displayed. should be: $i=1, $j=0. is: $i=1, $j=0
-this is supposed to be displayed. should be: $i=2, $j=4. is: $i=2, $j=4
-3 loop iterations should follow:
-2 4
-3 4
-4 4
-**********************************
-
-*** C-style else-if's ***
-This should be displayed
-*************************
-
-*** WHILE tests ***
-0 is smaller than 20
-1 is smaller than 20
-2 is smaller than 20
-3 is smaller than 20
-4 is smaller than 20
-5 is smaller than 20
-6 is smaller than 20
-7 is smaller than 20
-8 is smaller than 20
-9 is smaller than 20
-10 is smaller than 20
-11 is smaller than 20
-12 is smaller than 20
-13 is smaller than 20
-14 is smaller than 20
-15 is smaller than 20
-16 is smaller than 20
-17 is smaller than 20
-18 is smaller than 20
-19 is smaller than 20
-20 equals 20
-21 is greater than 20
-22 is greater than 20
-23 is greater than 20
-24 is greater than 20
-25 is greater than 20
-26 is greater than 20
-27 is greater than 20
-28 is greater than 20
-29 is greater than 20
-30 is greater than 20
-31 is greater than 20
-32 is greater than 20
-33 is greater than 20
-34 is greater than 20
-35 is greater than 20
-36 is greater than 20
-37 is greater than 20
-38 is greater than 20
-39 is greater than 20
-*******************
-
-
-*** Nested WHILEs ***
-Each array variable should be equal to the sum of its indices:
-${test00}[0] = 0
-${test00}[1] = 1
-${test00}[2] = 2
-${test01}[0] = 1
-${test01}[1] = 2
-${test01}[2] = 3
-${test02}[0] = 2
-${test02}[1] = 3
-${test02}[2] = 4
-${test10}[0] = 1
-${test10}[1] = 2
-${test10}[2] = 3
-${test11}[0] = 2
-${test11}[1] = 3
-${test11}[2] = 4
-${test12}[0] = 3
-${test12}[1] = 4
-${test12}[2] = 5
-${test20}[0] = 2
-${test20}[1] = 3
-${test20}[2] = 4
-${test21}[0] = 3
-${test21}[1] = 4
-${test21}[2] = 5
-${test22}[0] = 4
-${test22}[1] = 5
-${test22}[2] = 6
-*********************
-
-*** hash test... ***
-commented out...
-**************************
-
-*** Hash resizing test ***
-ba
-baa
-baaa
-baaaa
-baaaaa
-baaaaaa
-baaaaaaa
-baaaaaaaa
-baaaaaaaaa
-baaaaaaaaaa
-ba
-10
-baa
-9
-baaa
-8
-baaaa
-7
-baaaaa
-6
-baaaaaa
-5
-baaaaaaa
-4
-baaaaaaaa
-3
-baaaaaaaaa
-2
-baaaaaaaaaa
-1
-**************************
-
-
-*** break/continue test ***
-$i should go from 0 to 2
-$j should go from 3 to 4, and $q should go from 3 to 4
- $j=3
- $q=3
- $q=4
- $j=4
- $q=3
- $q=4
-$j should go from 0 to 2
- $j=0
- $j=1
- $j=2
-$k should go from 0 to 2
- $k=0
- $k=1
- $k=2
-$i=0
-$j should go from 3 to 4, and $q should go from 3 to 4
- $j=3
- $q=3
- $q=4
- $j=4
- $q=3
- $q=4
-$j should go from 0 to 2
- $j=0
- $j=1
- $j=2
-$k should go from 0 to 2
- $k=0
- $k=1
- $k=2
-$i=1
-$j should go from 3 to 4, and $q should go from 3 to 4
- $j=3
- $q=3
- $q=4
- $j=4
- $q=3
- $q=4
-$j should go from 0 to 2
- $j=0
- $j=1
- $j=2
-$k should go from 0 to 2
- $k=0
- $k=1
- $k=2
-$i=2
-***********************
-
-*** Nested file include test ***
-<html>
-This is Finish.phtml. This file is supposed to be included
-from regression_test.phtml. This is normal HTML.
-and this is PHP code, 2+2=4
-</html>
-********************************
-
-Tests completed.
-<html>
-<head>
-*** Testing assignments and variable aliasing: ***
-This should read "blah": blah
-This should read "this is nifty": this is nifty
-*************************************************
-
-*** Testing integer operators ***
-Correct result - 8: 8
-Correct result - 8: 8
-Correct result - 2: 2
-Correct result - -2: -2
-Correct result - 15: 15
-Correct result - 15: 15
-Correct result - 2: 2
-Correct result - 3: 3
-*********************************
-
-*** Testing real operators ***
-Correct result - 8: 8
-Correct result - 8: 8
-Correct result - 2: 2
-Correct result - -2: -2
-Correct result - 15: 15
-Correct result - 15: 15
-Correct result - 2: 2
-Correct result - 3: 3
-*********************************
-
-*** Testing if/elseif/else control ***
-
-This works
-this_still_works
-should_print
-
-
-*** Seriously nested if's test ***
-** spelling correction by kluzz **
-Only two lines of text should follow:
-this should be displayed. should be: $i=1, $j=0. is: $i=1, $j=0
-this is supposed to be displayed. should be: $i=2, $j=4. is: $i=2, $j=4
-3 loop iterations should follow:
-2 4
-3 4
-4 4
-**********************************
-
-*** C-style else-if's ***
-This should be displayed
-*************************
-
-*** WHILE tests ***
-0 is smaller than 20
-1 is smaller than 20
-2 is smaller than 20
-3 is smaller than 20
-4 is smaller than 20
-5 is smaller than 20
-6 is smaller than 20
-7 is smaller than 20
-8 is smaller than 20
-9 is smaller than 20
-10 is smaller than 20
-11 is smaller than 20
-12 is smaller than 20
-13 is smaller than 20
-14 is smaller than 20
-15 is smaller than 20
-16 is smaller than 20
-17 is smaller than 20
-18 is smaller than 20
-19 is smaller than 20
-20 equals 20
-21 is greater than 20
-22 is greater than 20
-23 is greater than 20
-24 is greater than 20
-25 is greater than 20
-26 is greater than 20
-27 is greater than 20
-28 is greater than 20
-29 is greater than 20
-30 is greater than 20
-31 is greater than 20
-32 is greater than 20
-33 is greater than 20
-34 is greater than 20
-35 is greater than 20
-36 is greater than 20
-37 is greater than 20
-38 is greater than 20
-39 is greater than 20
-*******************
-
-
-*** Nested WHILEs ***
-Each array variable should be equal to the sum of its indices:
-${test00}[0] = 0
-${test00}[1] = 1
-${test00}[2] = 2
-${test01}[0] = 1
-${test01}[1] = 2
-${test01}[2] = 3
-${test02}[0] = 2
-${test02}[1] = 3
-${test02}[2] = 4
-${test10}[0] = 1
-${test10}[1] = 2
-${test10}[2] = 3
-${test11}[0] = 2
-${test11}[1] = 3
-${test11}[2] = 4
-${test12}[0] = 3
-${test12}[1] = 4
-${test12}[2] = 5
-${test20}[0] = 2
-${test20}[1] = 3
-${test20}[2] = 4
-${test21}[0] = 3
-${test21}[1] = 4
-${test21}[2] = 5
-${test22}[0] = 4
-${test22}[1] = 5
-${test22}[2] = 6
-*********************
-
-*** hash test... ***
-commented out...
-**************************
-
-*** Hash resizing test ***
-ba
-baa
-baaa
-baaaa
-baaaaa
-baaaaaa
-baaaaaaa
-baaaaaaaa
-baaaaaaaaa
-baaaaaaaaaa
-ba
-10
-baa
-9
-baaa
-8
-baaaa
-7
-baaaaa
-6
-baaaaaa
-5
-baaaaaaa
-4
-baaaaaaaa
-3
-baaaaaaaaa
-2
-baaaaaaaaaa
-1
-**************************
-
-
-*** break/continue test ***
-$i should go from 0 to 2
-$j should go from 3 to 4, and $q should go from 3 to 4
- $j=3
- $q=3
- $q=4
- $j=4
- $q=3
- $q=4
-$j should go from 0 to 2
- $j=0
- $j=1
- $j=2
-$k should go from 0 to 2
- $k=0
- $k=1
- $k=2
-$i=0
-$j should go from 3 to 4, and $q should go from 3 to 4
- $j=3
- $q=3
- $q=4
- $j=4
- $q=3
- $q=4
-$j should go from 0 to 2
- $j=0
- $j=1
- $j=2
-$k should go from 0 to 2
- $k=0
- $k=1
- $k=2
-$i=1
-$j should go from 3 to 4, and $q should go from 3 to 4
- $j=3
- $q=3
- $q=4
- $j=4
- $q=3
- $q=4
-$j should go from 0 to 2
- $j=0
- $j=1
- $j=2
-$k should go from 0 to 2
- $k=0
- $k=1
- $k=2
-$i=2
-***********************
-
-*** Nested file include test ***
-<html>
-This is Finish.phtml. This file is supposed to be included
-from regression_test.phtml. This is normal HTML.
-and this is PHP code, 2+2=4
-</html>
-********************************
-
-Tests completed.
-<html>
-<head>
-*** Testing assignments and variable aliasing: ***
-This should read "blah": blah
-This should read "this is nifty": this is nifty
-*************************************************
-
-*** Testing integer operators ***
-Correct result - 8: 8
-Correct result - 8: 8
-Correct result - 2: 2
-Correct result - -2: -2
-Correct result - 15: 15
-Correct result - 15: 15
-Correct result - 2: 2
-Correct result - 3: 3
-*********************************
-
-*** Testing real operators ***
-Correct result - 8: 8
-Correct result - 8: 8
-Correct result - 2: 2
-Correct result - -2: -2
-Correct result - 15: 15
-Correct result - 15: 15
-Correct result - 2: 2
-Correct result - 3: 3
-*********************************
-
-*** Testing if/elseif/else control ***
-
-This works
-this_still_works
-should_print
-
-
-*** Seriously nested if's test ***
-** spelling correction by kluzz **
-Only two lines of text should follow:
-this should be displayed. should be: $i=1, $j=0. is: $i=1, $j=0
-this is supposed to be displayed. should be: $i=2, $j=4. is: $i=2, $j=4
-3 loop iterations should follow:
-2 4
-3 4
-4 4
-**********************************
-
-*** C-style else-if's ***
-This should be displayed
-*************************
-
-*** WHILE tests ***
-0 is smaller than 20
-1 is smaller than 20
-2 is smaller than 20
-3 is smaller than 20
-4 is smaller than 20
-5 is smaller than 20
-6 is smaller than 20
-7 is smaller than 20
-8 is smaller than 20
-9 is smaller than 20
-10 is smaller than 20
-11 is smaller than 20
-12 is smaller than 20
-13 is smaller than 20
-14 is smaller than 20
-15 is smaller than 20
-16 is smaller than 20
-17 is smaller than 20
-18 is smaller than 20
-19 is smaller than 20
-20 equals 20
-21 is greater than 20
-22 is greater than 20
-23 is greater than 20
-24 is greater than 20
-25 is greater than 20
-26 is greater than 20
-27 is greater than 20
-28 is greater than 20
-29 is greater than 20
-30 is greater than 20
-31 is greater than 20
-32 is greater than 20
-33 is greater than 20
-34 is greater than 20
-35 is greater than 20
-36 is greater than 20
-37 is greater than 20
-38 is greater than 20
-39 is greater than 20
-*******************
-
-
-*** Nested WHILEs ***
-Each array variable should be equal to the sum of its indices:
-${test00}[0] = 0
-${test00}[1] = 1
-${test00}[2] = 2
-${test01}[0] = 1
-${test01}[1] = 2
-${test01}[2] = 3
-${test02}[0] = 2
-${test02}[1] = 3
-${test02}[2] = 4
-${test10}[0] = 1
-${test10}[1] = 2
-${test10}[2] = 3
-${test11}[0] = 2
-${test11}[1] = 3
-${test11}[2] = 4
-${test12}[0] = 3
-${test12}[1] = 4
-${test12}[2] = 5
-${test20}[0] = 2
-${test20}[1] = 3
-${test20}[2] = 4
-${test21}[0] = 3
-${test21}[1] = 4
-${test21}[2] = 5
-${test22}[0] = 4
-${test22}[1] = 5
-${test22}[2] = 6
-*********************
-
-*** hash test... ***
-commented out...
-**************************
-
-*** Hash resizing test ***
-ba
-baa
-baaa
-baaaa
-baaaaa
-baaaaaa
-baaaaaaa
-baaaaaaaa
-baaaaaaaaa
-baaaaaaaaaa
-ba
-10
-baa
-9
-baaa
-8
-baaaa
-7
-baaaaa
-6
-baaaaaa
-5
-baaaaaaa
-4
-baaaaaaaa
-3
-baaaaaaaaa
-2
-baaaaaaaaaa
-1
-**************************
-
-
-*** break/continue test ***
-$i should go from 0 to 2
-$j should go from 3 to 4, and $q should go from 3 to 4
- $j=3
- $q=3
- $q=4
- $j=4
- $q=3
- $q=4
-$j should go from 0 to 2
- $j=0
- $j=1
- $j=2
-$k should go from 0 to 2
- $k=0
- $k=1
- $k=2
-$i=0
-$j should go from 3 to 4, and $q should go from 3 to 4
- $j=3
- $q=3
- $q=4
- $j=4
- $q=3
- $q=4
-$j should go from 0 to 2
- $j=0
- $j=1
- $j=2
-$k should go from 0 to 2
- $k=0
- $k=1
- $k=2
-$i=1
-$j should go from 3 to 4, and $q should go from 3 to 4
- $j=3
- $q=3
- $q=4
- $j=4
- $q=3
- $q=4
-$j should go from 0 to 2
- $j=0
- $j=1
- $j=2
-$k should go from 0 to 2
- $k=0
- $k=1
- $k=2
-$i=2
-***********************
-
-*** Nested file include test ***
-<html>
-This is Finish.phtml. This file is supposed to be included
-from regression_test.phtml. This is normal HTML.
-and this is PHP code, 2+2=4
-</html>
-********************************
-
-Tests completed.
-<html>
-<head>
-*** Testing assignments and variable aliasing: ***
-This should read "blah": blah
-This should read "this is nifty": this is nifty
-*************************************************
-
-*** Testing integer operators ***
-Correct result - 8: 8
-Correct result - 8: 8
-Correct result - 2: 2
-Correct result - -2: -2
-Correct result - 15: 15
-Correct result - 15: 15
-Correct result - 2: 2
-Correct result - 3: 3
-*********************************
-
-*** Testing real operators ***
-Correct result - 8: 8
-Correct result - 8: 8
-Correct result - 2: 2
-Correct result - -2: -2
-Correct result - 15: 15
-Correct result - 15: 15
-Correct result - 2: 2
-Correct result - 3: 3
-*********************************
-
-*** Testing if/elseif/else control ***
-
-This works
-this_still_works
-should_print
-
-
-*** Seriously nested if's test ***
-** spelling correction by kluzz **
-Only two lines of text should follow:
-this should be displayed. should be: $i=1, $j=0. is: $i=1, $j=0
-this is supposed to be displayed. should be: $i=2, $j=4. is: $i=2, $j=4
-3 loop iterations should follow:
-2 4
-3 4
-4 4
-**********************************
-
-*** C-style else-if's ***
-This should be displayed
-*************************
-
-*** WHILE tests ***
-0 is smaller than 20
-1 is smaller than 20
-2 is smaller than 20
-3 is smaller than 20
-4 is smaller than 20
-5 is smaller than 20
-6 is smaller than 20
-7 is smaller than 20
-8 is smaller than 20
-9 is smaller than 20
-10 is smaller than 20
-11 is smaller than 20
-12 is smaller than 20
-13 is smaller than 20
-14 is smaller than 20
-15 is smaller than 20
-16 is smaller than 20
-17 is smaller than 20
-18 is smaller than 20
-19 is smaller than 20
-20 equals 20
-21 is greater than 20
-22 is greater than 20
-23 is greater than 20
-24 is greater than 20
-25 is greater than 20
-26 is greater than 20
-27 is greater than 20
-28 is greater than 20
-29 is greater than 20
-30 is greater than 20
-31 is greater than 20
-32 is greater than 20
-33 is greater than 20
-34 is greater than 20
-35 is greater than 20
-36 is greater than 20
-37 is greater than 20
-38 is greater than 20
-39 is greater than 20
-*******************
-
-
-*** Nested WHILEs ***
-Each array variable should be equal to the sum of its indices:
-${test00}[0] = 0
-${test00}[1] = 1
-${test00}[2] = 2
-${test01}[0] = 1
-${test01}[1] = 2
-${test01}[2] = 3
-${test02}[0] = 2
-${test02}[1] = 3
-${test02}[2] = 4
-${test10}[0] = 1
-${test10}[1] = 2
-${test10}[2] = 3
-${test11}[0] = 2
-${test11}[1] = 3
-${test11}[2] = 4
-${test12}[0] = 3
-${test12}[1] = 4
-${test12}[2] = 5
-${test20}[0] = 2
-${test20}[1] = 3
-${test20}[2] = 4
-${test21}[0] = 3
-${test21}[1] = 4
-${test21}[2] = 5
-${test22}[0] = 4
-${test22}[1] = 5
-${test22}[2] = 6
-*********************
-
-*** hash test... ***
-commented out...
-**************************
-
-*** Hash resizing test ***
-ba
-baa
-baaa
-baaaa
-baaaaa
-baaaaaa
-baaaaaaa
-baaaaaaaa
-baaaaaaaaa
-baaaaaaaaaa
-ba
-10
-baa
-9
-baaa
-8
-baaaa
-7
-baaaaa
-6
-baaaaaa
-5
-baaaaaaa
-4
-baaaaaaaa
-3
-baaaaaaaaa
-2
-baaaaaaaaaa
-1
-**************************
-
-
-*** break/continue test ***
-$i should go from 0 to 2
-$j should go from 3 to 4, and $q should go from 3 to 4
- $j=3
- $q=3
- $q=4
- $j=4
- $q=3
- $q=4
-$j should go from 0 to 2
- $j=0
- $j=1
- $j=2
-$k should go from 0 to 2
- $k=0
- $k=1
- $k=2
-$i=0
-$j should go from 3 to 4, and $q should go from 3 to 4
- $j=3
- $q=3
- $q=4
- $j=4
- $q=3
- $q=4
-$j should go from 0 to 2
- $j=0
- $j=1
- $j=2
-$k should go from 0 to 2
- $k=0
- $k=1
- $k=2
-$i=1
-$j should go from 3 to 4, and $q should go from 3 to 4
- $j=3
- $q=3
- $q=4
- $j=4
- $q=3
- $q=4
-$j should go from 0 to 2
- $j=0
- $j=1
- $j=2
-$k should go from 0 to 2
- $k=0
- $k=1
- $k=2
-$i=2
-***********************
-
-*** Nested file include test ***
-<html>
-This is Finish.phtml. This file is supposed to be included
-from regression_test.phtml. This is normal HTML.
-and this is PHP code, 2+2=4
-</html>
-********************************
-
-Tests completed.
-<html>
-<head>
-*** Testing assignments and variable aliasing: ***
-This should read "blah": blah
-This should read "this is nifty": this is nifty
-*************************************************
-
-*** Testing integer operators ***
-Correct result - 8: 8
-Correct result - 8: 8
-Correct result - 2: 2
-Correct result - -2: -2
-Correct result - 15: 15
-Correct result - 15: 15
-Correct result - 2: 2
-Correct result - 3: 3
-*********************************
-
-*** Testing real operators ***
-Correct result - 8: 8
-Correct result - 8: 8
-Correct result - 2: 2
-Correct result - -2: -2
-Correct result - 15: 15
-Correct result - 15: 15
-Correct result - 2: 2
-Correct result - 3: 3
-*********************************
-
-*** Testing if/elseif/else control ***
-
-This works
-this_still_works
-should_print
-
-
-*** Seriously nested if's test ***
-** spelling correction by kluzz **
-Only two lines of text should follow:
-this should be displayed. should be: $i=1, $j=0. is: $i=1, $j=0
-this is supposed to be displayed. should be: $i=2, $j=4. is: $i=2, $j=4
-3 loop iterations should follow:
-2 4
-3 4
-4 4
-**********************************
-
-*** C-style else-if's ***
-This should be displayed
-*************************
-
-*** WHILE tests ***
-0 is smaller than 20
-1 is smaller than 20
-2 is smaller than 20
-3 is smaller than 20
-4 is smaller than 20
-5 is smaller than 20
-6 is smaller than 20
-7 is smaller than 20
-8 is smaller than 20
-9 is smaller than 20
-10 is smaller than 20
-11 is smaller than 20
-12 is smaller than 20
-13 is smaller than 20
-14 is smaller than 20
-15 is smaller than 20
-16 is smaller than 20
-17 is smaller than 20
-18 is smaller than 20
-19 is smaller than 20
-20 equals 20
-21 is greater than 20
-22 is greater than 20
-23 is greater than 20
-24 is greater than 20
-25 is greater than 20
-26 is greater than 20
-27 is greater than 20
-28 is greater than 20
-29 is greater than 20
-30 is greater than 20
-31 is greater than 20
-32 is greater than 20
-33 is greater than 20
-34 is greater than 20
-35 is greater than 20
-36 is greater than 20
-37 is greater than 20
-38 is greater than 20
-39 is greater than 20
-*******************
-
-
-*** Nested WHILEs ***
-Each array variable should be equal to the sum of its indices:
-${test00}[0] = 0
-${test00}[1] = 1
-${test00}[2] = 2
-${test01}[0] = 1
-${test01}[1] = 2
-${test01}[2] = 3
-${test02}[0] = 2
-${test02}[1] = 3
-${test02}[2] = 4
-${test10}[0] = 1
-${test10}[1] = 2
-${test10}[2] = 3
-${test11}[0] = 2
-${test11}[1] = 3
-${test11}[2] = 4
-${test12}[0] = 3
-${test12}[1] = 4
-${test12}[2] = 5
-${test20}[0] = 2
-${test20}[1] = 3
-${test20}[2] = 4
-${test21}[0] = 3
-${test21}[1] = 4
-${test21}[2] = 5
-${test22}[0] = 4
-${test22}[1] = 5
-${test22}[2] = 6
-*********************
-
-*** hash test... ***
-commented out...
-**************************
-
-*** Hash resizing test ***
-ba
-baa
-baaa
-baaaa
-baaaaa
-baaaaaa
-baaaaaaa
-baaaaaaaa
-baaaaaaaaa
-baaaaaaaaaa
-ba
-10
-baa
-9
-baaa
-8
-baaaa
-7
-baaaaa
-6
-baaaaaa
-5
-baaaaaaa
-4
-baaaaaaaa
-3
-baaaaaaaaa
-2
-baaaaaaaaaa
-1
-**************************
-
-
-*** break/continue test ***
-$i should go from 0 to 2
-$j should go from 3 to 4, and $q should go from 3 to 4
- $j=3
- $q=3
- $q=4
- $j=4
- $q=3
- $q=4
-$j should go from 0 to 2
- $j=0
- $j=1
- $j=2
-$k should go from 0 to 2
- $k=0
- $k=1
- $k=2
-$i=0
-$j should go from 3 to 4, and $q should go from 3 to 4
- $j=3
- $q=3
- $q=4
- $j=4
- $q=3
- $q=4
-$j should go from 0 to 2
- $j=0
- $j=1
- $j=2
-$k should go from 0 to 2
- $k=0
- $k=1
- $k=2
-$i=1
-$j should go from 3 to 4, and $q should go from 3 to 4
- $j=3
- $q=3
- $q=4
- $j=4
- $q=3
- $q=4
-$j should go from 0 to 2
- $j=0
- $j=1
- $j=2
-$k should go from 0 to 2
- $k=0
- $k=1
- $k=2
-$i=2
-***********************
-
-*** Nested file include test ***
-<html>
-This is Finish.phtml. This file is supposed to be included
-from regression_test.phtml. This is normal HTML.
-and this is PHP code, 2+2=4
-</html>
-********************************
-
-Tests completed.
-<html>
-<head>
-*** Testing assignments and variable aliasing: ***
-This should read "blah": blah
-This should read "this is nifty": this is nifty
-*************************************************
-
-*** Testing integer operators ***
-Correct result - 8: 8
-Correct result - 8: 8
-Correct result - 2: 2
-Correct result - -2: -2
-Correct result - 15: 15
-Correct result - 15: 15
-Correct result - 2: 2
-Correct result - 3: 3
-*********************************
-
-*** Testing real operators ***
-Correct result - 8: 8
-Correct result - 8: 8
-Correct result - 2: 2
-Correct result - -2: -2
-Correct result - 15: 15
-Correct result - 15: 15
-Correct result - 2: 2
-Correct result - 3: 3
-*********************************
-
-*** Testing if/elseif/else control ***
-
-This works
-this_still_works
-should_print
-
-
-*** Seriously nested if's test ***
-** spelling correction by kluzz **
-Only two lines of text should follow:
-this should be displayed. should be: $i=1, $j=0. is: $i=1, $j=0
-this is supposed to be displayed. should be: $i=2, $j=4. is: $i=2, $j=4
-3 loop iterations should follow:
-2 4
-3 4
-4 4
-**********************************
-
-*** C-style else-if's ***
-This should be displayed
-*************************
-
-*** WHILE tests ***
-0 is smaller than 20
-1 is smaller than 20
-2 is smaller than 20
-3 is smaller than 20
-4 is smaller than 20
-5 is smaller than 20
-6 is smaller than 20
-7 is smaller than 20
-8 is smaller than 20
-9 is smaller than 20
-10 is smaller than 20
-11 is smaller than 20
-12 is smaller than 20
-13 is smaller than 20
-14 is smaller than 20
-15 is smaller than 20
-16 is smaller than 20
-17 is smaller than 20
-18 is smaller than 20
-19 is smaller than 20
-20 equals 20
-21 is greater than 20
-22 is greater than 20
-23 is greater than 20
-24 is greater than 20
-25 is greater than 20
-26 is greater than 20
-27 is greater than 20
-28 is greater than 20
-29 is greater than 20
-30 is greater than 20
-31 is greater than 20
-32 is greater than 20
-33 is greater than 20
-34 is greater than 20
-35 is greater than 20
-36 is greater than 20
-37 is greater than 20
-38 is greater than 20
-39 is greater than 20
-*******************
-
-
-*** Nested WHILEs ***
-Each array variable should be equal to the sum of its indices:
-${test00}[0] = 0
-${test00}[1] = 1
-${test00}[2] = 2
-${test01}[0] = 1
-${test01}[1] = 2
-${test01}[2] = 3
-${test02}[0] = 2
-${test02}[1] = 3
-${test02}[2] = 4
-${test10}[0] = 1
-${test10}[1] = 2
-${test10}[2] = 3
-${test11}[0] = 2
-${test11}[1] = 3
-${test11}[2] = 4
-${test12}[0] = 3
-${test12}[1] = 4
-${test12}[2] = 5
-${test20}[0] = 2
-${test20}[1] = 3
-${test20}[2] = 4
-${test21}[0] = 3
-${test21}[1] = 4
-${test21}[2] = 5
-${test22}[0] = 4
-${test22}[1] = 5
-${test22}[2] = 6
-*********************
-
-*** hash test... ***
-commented out...
-**************************
-
-*** Hash resizing test ***
-ba
-baa
-baaa
-baaaa
-baaaaa
-baaaaaa
-baaaaaaa
-baaaaaaaa
-baaaaaaaaa
-baaaaaaaaaa
-ba
-10
-baa
-9
-baaa
-8
-baaaa
-7
-baaaaa
-6
-baaaaaa
-5
-baaaaaaa
-4
-baaaaaaaa
-3
-baaaaaaaaa
-2
-baaaaaaaaaa
-1
-**************************
-
-
-*** break/continue test ***
-$i should go from 0 to 2
-$j should go from 3 to 4, and $q should go from 3 to 4
- $j=3
- $q=3
- $q=4
- $j=4
- $q=3
- $q=4
-$j should go from 0 to 2
- $j=0
- $j=1
- $j=2
-$k should go from 0 to 2
- $k=0
- $k=1
- $k=2
-$i=0
-$j should go from 3 to 4, and $q should go from 3 to 4
- $j=3
- $q=3
- $q=4
- $j=4
- $q=3
- $q=4
-$j should go from 0 to 2
- $j=0
- $j=1
- $j=2
-$k should go from 0 to 2
- $k=0
- $k=1
- $k=2
-$i=1
-$j should go from 3 to 4, and $q should go from 3 to 4
- $j=3
- $q=3
- $q=4
- $j=4
- $q=3
- $q=4
-$j should go from 0 to 2
- $j=0
- $j=1
- $j=2
-$k should go from 0 to 2
- $k=0
- $k=1
- $k=2
-$i=2
-***********************
-
-*** Nested file include test ***
-<html>
-This is Finish.phtml. This file is supposed to be included
-from regression_test.phtml. This is normal HTML.
-and this is PHP code, 2+2=4
-</html>
-********************************
-
-Tests completed.
-<html>
-<head>
-*** Testing assignments and variable aliasing: ***
-This should read "blah": blah
-This should read "this is nifty": this is nifty
-*************************************************
-
-*** Testing integer operators ***
-Correct result - 8: 8
-Correct result - 8: 8
-Correct result - 2: 2
-Correct result - -2: -2
-Correct result - 15: 15
-Correct result - 15: 15
-Correct result - 2: 2
-Correct result - 3: 3
-*********************************
-
-*** Testing real operators ***
-Correct result - 8: 8
-Correct result - 8: 8
-Correct result - 2: 2
-Correct result - -2: -2
-Correct result - 15: 15
-Correct result - 15: 15
-Correct result - 2: 2
-Correct result - 3: 3
-*********************************
-
-*** Testing if/elseif/else control ***
-
-This works
-this_still_works
-should_print
-
-
-*** Seriously nested if's test ***
-** spelling correction by kluzz **
-Only two lines of text should follow:
-this should be displayed. should be: $i=1, $j=0. is: $i=1, $j=0
-this is supposed to be displayed. should be: $i=2, $j=4. is: $i=2, $j=4
-3 loop iterations should follow:
-2 4
-3 4
-4 4
-**********************************
-
-*** C-style else-if's ***
-This should be displayed
-*************************
-
-*** WHILE tests ***
-0 is smaller than 20
-1 is smaller than 20
-2 is smaller than 20
-3 is smaller than 20
-4 is smaller than 20
-5 is smaller than 20
-6 is smaller than 20
-7 is smaller than 20
-8 is smaller than 20
-9 is smaller than 20
-10 is smaller than 20
-11 is smaller than 20
-12 is smaller than 20
-13 is smaller than 20
-14 is smaller than 20
-15 is smaller than 20
-16 is smaller than 20
-17 is smaller than 20
-18 is smaller than 20
-19 is smaller than 20
-20 equals 20
-21 is greater than 20
-22 is greater than 20
-23 is greater than 20
-24 is greater than 20
-25 is greater than 20
-26 is greater than 20
-27 is greater than 20
-28 is greater than 20
-29 is greater than 20
-30 is greater than 20
-31 is greater than 20
-32 is greater than 20
-33 is greater than 20
-34 is greater than 20
-35 is greater than 20
-36 is greater than 20
-37 is greater than 20
-38 is greater than 20
-39 is greater than 20
-*******************
-
-
-*** Nested WHILEs ***
-Each array variable should be equal to the sum of its indices:
-${test00}[0] = 0
-${test00}[1] = 1
-${test00}[2] = 2
-${test01}[0] = 1
-${test01}[1] = 2
-${test01}[2] = 3
-${test02}[0] = 2
-${test02}[1] = 3
-${test02}[2] = 4
-${test10}[0] = 1
-${test10}[1] = 2
-${test10}[2] = 3
-${test11}[0] = 2
-${test11}[1] = 3
-${test11}[2] = 4
-${test12}[0] = 3
-${test12}[1] = 4
-${test12}[2] = 5
-${test20}[0] = 2
-${test20}[1] = 3
-${test20}[2] = 4
-${test21}[0] = 3
-${test21}[1] = 4
-${test21}[2] = 5
-${test22}[0] = 4
-${test22}[1] = 5
-${test22}[2] = 6
-*********************
-
-*** hash test... ***
-commented out...
-**************************
-
-*** Hash resizing test ***
-ba
-baa
-baaa
-baaaa
-baaaaa
-baaaaaa
-baaaaaaa
-baaaaaaaa
-baaaaaaaaa
-baaaaaaaaaa
-ba
-10
-baa
-9
-baaa
-8
-baaaa
-7
-baaaaa
-6
-baaaaaa
-5
-baaaaaaa
-4
-baaaaaaaa
-3
-baaaaaaaaa
-2
-baaaaaaaaaa
-1
-**************************
-
-
-*** break/continue test ***
-$i should go from 0 to 2
-$j should go from 3 to 4, and $q should go from 3 to 4
- $j=3
- $q=3
- $q=4
- $j=4
- $q=3
- $q=4
-$j should go from 0 to 2
- $j=0
- $j=1
- $j=2
-$k should go from 0 to 2
- $k=0
- $k=1
- $k=2
-$i=0
-$j should go from 3 to 4, and $q should go from 3 to 4
- $j=3
- $q=3
- $q=4
- $j=4
- $q=3
- $q=4
-$j should go from 0 to 2
- $j=0
- $j=1
- $j=2
-$k should go from 0 to 2
- $k=0
- $k=1
- $k=2
-$i=1
-$j should go from 3 to 4, and $q should go from 3 to 4
- $j=3
- $q=3
- $q=4
- $j=4
- $q=3
- $q=4
-$j should go from 0 to 2
- $j=0
- $j=1
- $j=2
-$k should go from 0 to 2
- $k=0
- $k=1
- $k=2
-$i=2
-***********************
-
-*** Nested file include test ***
-<html>
-This is Finish.phtml. This file is supposed to be included
-from regression_test.phtml. This is normal HTML.
-and this is PHP code, 2+2=4
-</html>
-********************************
-
-Tests completed.
-<html>
-<head>
-*** Testing assignments and variable aliasing: ***
-This should read "blah": blah
-This should read "this is nifty": this is nifty
-*************************************************
-
-*** Testing integer operators ***
-Correct result - 8: 8
-Correct result - 8: 8
-Correct result - 2: 2
-Correct result - -2: -2
-Correct result - 15: 15
-Correct result - 15: 15
-Correct result - 2: 2
-Correct result - 3: 3
-*********************************
-
-*** Testing real operators ***
-Correct result - 8: 8
-Correct result - 8: 8
-Correct result - 2: 2
-Correct result - -2: -2
-Correct result - 15: 15
-Correct result - 15: 15
-Correct result - 2: 2
-Correct result - 3: 3
-*********************************
-
-*** Testing if/elseif/else control ***
-
-This works
-this_still_works
-should_print
-
-
-*** Seriously nested if's test ***
-** spelling correction by kluzz **
-Only two lines of text should follow:
-this should be displayed. should be: $i=1, $j=0. is: $i=1, $j=0
-this is supposed to be displayed. should be: $i=2, $j=4. is: $i=2, $j=4
-3 loop iterations should follow:
-2 4
-3 4
-4 4
-**********************************
-
-*** C-style else-if's ***
-This should be displayed
-*************************
-
-*** WHILE tests ***
-0 is smaller than 20
-1 is smaller than 20
-2 is smaller than 20
-3 is smaller than 20
-4 is smaller than 20
-5 is smaller than 20
-6 is smaller than 20
-7 is smaller than 20
-8 is smaller than 20
-9 is smaller than 20
-10 is smaller than 20
-11 is smaller than 20
-12 is smaller than 20
-13 is smaller than 20
-14 is smaller than 20
-15 is smaller than 20
-16 is smaller than 20
-17 is smaller than 20
-18 is smaller than 20
-19 is smaller than 20
-20 equals 20
-21 is greater than 20
-22 is greater than 20
-23 is greater than 20
-24 is greater than 20
-25 is greater than 20
-26 is greater than 20
-27 is greater than 20
-28 is greater than 20
-29 is greater than 20
-30 is greater than 20
-31 is greater than 20
-32 is greater than 20
-33 is greater than 20
-34 is greater than 20
-35 is greater than 20
-36 is greater than 20
-37 is greater than 20
-38 is greater than 20
-39 is greater than 20
-*******************
-
-
-*** Nested WHILEs ***
-Each array variable should be equal to the sum of its indices:
-${test00}[0] = 0
-${test00}[1] = 1
-${test00}[2] = 2
-${test01}[0] = 1
-${test01}[1] = 2
-${test01}[2] = 3
-${test02}[0] = 2
-${test02}[1] = 3
-${test02}[2] = 4
-${test10}[0] = 1
-${test10}[1] = 2
-${test10}[2] = 3
-${test11}[0] = 2
-${test11}[1] = 3
-${test11}[2] = 4
-${test12}[0] = 3
-${test12}[1] = 4
-${test12}[2] = 5
-${test20}[0] = 2
-${test20}[1] = 3
-${test20}[2] = 4
-${test21}[0] = 3
-${test21}[1] = 4
-${test21}[2] = 5
-${test22}[0] = 4
-${test22}[1] = 5
-${test22}[2] = 6
-*********************
-
-*** hash test... ***
-commented out...
-**************************
-
-*** Hash resizing test ***
-ba
-baa
-baaa
-baaaa
-baaaaa
-baaaaaa
-baaaaaaa
-baaaaaaaa
-baaaaaaaaa
-baaaaaaaaaa
-ba
-10
-baa
-9
-baaa
-8
-baaaa
-7
-baaaaa
-6
-baaaaaa
-5
-baaaaaaa
-4
-baaaaaaaa
-3
-baaaaaaaaa
-2
-baaaaaaaaaa
-1
-**************************
-
-
-*** break/continue test ***
-$i should go from 0 to 2
-$j should go from 3 to 4, and $q should go from 3 to 4
- $j=3
- $q=3
- $q=4
- $j=4
- $q=3
- $q=4
-$j should go from 0 to 2
- $j=0
- $j=1
- $j=2
-$k should go from 0 to 2
- $k=0
- $k=1
- $k=2
-$i=0
-$j should go from 3 to 4, and $q should go from 3 to 4
- $j=3
- $q=3
- $q=4
- $j=4
- $q=3
- $q=4
-$j should go from 0 to 2
- $j=0
- $j=1
- $j=2
-$k should go from 0 to 2
- $k=0
- $k=1
- $k=2
-$i=1
-$j should go from 3 to 4, and $q should go from 3 to 4
- $j=3
- $q=3
- $q=4
- $j=4
- $q=3
- $q=4
-$j should go from 0 to 2
- $j=0
- $j=1
- $j=2
-$k should go from 0 to 2
- $k=0
- $k=1
- $k=2
-$i=2
-***********************
-
-*** Nested file include test ***
-<html>
-This is Finish.phtml. This file is supposed to be included
-from regression_test.phtml. This is normal HTML.
-and this is PHP code, 2+2=4
-</html>
-********************************
-
-Tests completed.
-<html>
-<head>
-*** Testing assignments and variable aliasing: ***
-This should read "blah": blah
-This should read "this is nifty": this is nifty
-*************************************************
-
-*** Testing integer operators ***
-Correct result - 8: 8
-Correct result - 8: 8
-Correct result - 2: 2
-Correct result - -2: -2
-Correct result - 15: 15
-Correct result - 15: 15
-Correct result - 2: 2
-Correct result - 3: 3
-*********************************
-
-*** Testing real operators ***
-Correct result - 8: 8
-Correct result - 8: 8
-Correct result - 2: 2
-Correct result - -2: -2
-Correct result - 15: 15
-Correct result - 15: 15
-Correct result - 2: 2
-Correct result - 3: 3
-*********************************
-
-*** Testing if/elseif/else control ***
-
-This works
-this_still_works
-should_print
-
-
-*** Seriously nested if's test ***
-** spelling correction by kluzz **
-Only two lines of text should follow:
-this should be displayed. should be: $i=1, $j=0. is: $i=1, $j=0
-this is supposed to be displayed. should be: $i=2, $j=4. is: $i=2, $j=4
-3 loop iterations should follow:
-2 4
-3 4
-4 4
-**********************************
-
-*** C-style else-if's ***
-This should be displayed
-*************************
-
-*** WHILE tests ***
-0 is smaller than 20
-1 is smaller than 20
-2 is smaller than 20
-3 is smaller than 20
-4 is smaller than 20
-5 is smaller than 20
-6 is smaller than 20
-7 is smaller than 20
-8 is smaller than 20
-9 is smaller than 20
-10 is smaller than 20
-11 is smaller than 20
-12 is smaller than 20
-13 is smaller than 20
-14 is smaller than 20
-15 is smaller than 20
-16 is smaller than 20
-17 is smaller than 20
-18 is smaller than 20
-19 is smaller than 20
-20 equals 20
-21 is greater than 20
-22 is greater than 20
-23 is greater than 20
-24 is greater than 20
-25 is greater than 20
-26 is greater than 20
-27 is greater than 20
-28 is greater than 20
-29 is greater than 20
-30 is greater than 20
-31 is greater than 20
-32 is greater than 20
-33 is greater than 20
-34 is greater than 20
-35 is greater than 20
-36 is greater than 20
-37 is greater than 20
-38 is greater than 20
-39 is greater than 20
-*******************
-
-
-*** Nested WHILEs ***
-Each array variable should be equal to the sum of its indices:
-${test00}[0] = 0
-${test00}[1] = 1
-${test00}[2] = 2
-${test01}[0] = 1
-${test01}[1] = 2
-${test01}[2] = 3
-${test02}[0] = 2
-${test02}[1] = 3
-${test02}[2] = 4
-${test10}[0] = 1
-${test10}[1] = 2
-${test10}[2] = 3
-${test11}[0] = 2
-${test11}[1] = 3
-${test11}[2] = 4
-${test12}[0] = 3
-${test12}[1] = 4
-${test12}[2] = 5
-${test20}[0] = 2
-${test20}[1] = 3
-${test20}[2] = 4
-${test21}[0] = 3
-${test21}[1] = 4
-${test21}[2] = 5
-${test22}[0] = 4
-${test22}[1] = 5
-${test22}[2] = 6
-*********************
-
-*** hash test... ***
-commented out...
-**************************
-
-*** Hash resizing test ***
-ba
-baa
-baaa
-baaaa
-baaaaa
-baaaaaa
-baaaaaaa
-baaaaaaaa
-baaaaaaaaa
-baaaaaaaaaa
-ba
-10
-baa
-9
-baaa
-8
-baaaa
-7
-baaaaa
-6
-baaaaaa
-5
-baaaaaaa
-4
-baaaaaaaa
-3
-baaaaaaaaa
-2
-baaaaaaaaaa
-1
-**************************
-
-
-*** break/continue test ***
-$i should go from 0 to 2
-$j should go from 3 to 4, and $q should go from 3 to 4
- $j=3
- $q=3
- $q=4
- $j=4
- $q=3
- $q=4
-$j should go from 0 to 2
- $j=0
- $j=1
- $j=2
-$k should go from 0 to 2
- $k=0
- $k=1
- $k=2
-$i=0
-$j should go from 3 to 4, and $q should go from 3 to 4
- $j=3
- $q=3
- $q=4
- $j=4
- $q=3
- $q=4
-$j should go from 0 to 2
- $j=0
- $j=1
- $j=2
-$k should go from 0 to 2
- $k=0
- $k=1
- $k=2
-$i=1
-$j should go from 3 to 4, and $q should go from 3 to 4
- $j=3
- $q=3
- $q=4
- $j=4
- $q=3
- $q=4
-$j should go from 0 to 2
- $j=0
- $j=1
- $j=2
-$k should go from 0 to 2
- $k=0
- $k=1
- $k=2
-$i=2
-***********************
-
-*** Nested file include test ***
-<html>
-This is Finish.phtml. This file is supposed to be included
-from regression_test.phtml. This is normal HTML.
-and this is PHP code, 2+2=4
-</html>
-********************************
-
-Tests completed.
-<html>
-<head>
-*** Testing assignments and variable aliasing: ***
-This should read "blah": blah
-This should read "this is nifty": this is nifty
-*************************************************
-
-*** Testing integer operators ***
-Correct result - 8: 8
-Correct result - 8: 8
-Correct result - 2: 2
-Correct result - -2: -2
-Correct result - 15: 15
-Correct result - 15: 15
-Correct result - 2: 2
-Correct result - 3: 3
-*********************************
-
-*** Testing real operators ***
-Correct result - 8: 8
-Correct result - 8: 8
-Correct result - 2: 2
-Correct result - -2: -2
-Correct result - 15: 15
-Correct result - 15: 15
-Correct result - 2: 2
-Correct result - 3: 3
-*********************************
-
-*** Testing if/elseif/else control ***
-
-This works
-this_still_works
-should_print
-
-
-*** Seriously nested if's test ***
-** spelling correction by kluzz **
-Only two lines of text should follow:
-this should be displayed. should be: $i=1, $j=0. is: $i=1, $j=0
-this is supposed to be displayed. should be: $i=2, $j=4. is: $i=2, $j=4
-3 loop iterations should follow:
-2 4
-3 4
-4 4
-**********************************
-
-*** C-style else-if's ***
-This should be displayed
-*************************
-
-*** WHILE tests ***
-0 is smaller than 20
-1 is smaller than 20
-2 is smaller than 20
-3 is smaller than 20
-4 is smaller than 20
-5 is smaller than 20
-6 is smaller than 20
-7 is smaller than 20
-8 is smaller than 20
-9 is smaller than 20
-10 is smaller than 20
-11 is smaller than 20
-12 is smaller than 20
-13 is smaller than 20
-14 is smaller than 20
-15 is smaller than 20
-16 is smaller than 20
-17 is smaller than 20
-18 is smaller than 20
-19 is smaller than 20
-20 equals 20
-21 is greater than 20
-22 is greater than 20
-23 is greater than 20
-24 is greater than 20
-25 is greater than 20
-26 is greater than 20
-27 is greater than 20
-28 is greater than 20
-29 is greater than 20
-30 is greater than 20
-31 is greater than 20
-32 is greater than 20
-33 is greater than 20
-34 is greater than 20
-35 is greater than 20
-36 is greater than 20
-37 is greater than 20
-38 is greater than 20
-39 is greater than 20
-*******************
-
-
-*** Nested WHILEs ***
-Each array variable should be equal to the sum of its indices:
-${test00}[0] = 0
-${test00}[1] = 1
-${test00}[2] = 2
-${test01}[0] = 1
-${test01}[1] = 2
-${test01}[2] = 3
-${test02}[0] = 2
-${test02}[1] = 3
-${test02}[2] = 4
-${test10}[0] = 1
-${test10}[1] = 2
-${test10}[2] = 3
-${test11}[0] = 2
-${test11}[1] = 3
-${test11}[2] = 4
-${test12}[0] = 3
-${test12}[1] = 4
-${test12}[2] = 5
-${test20}[0] = 2
-${test20}[1] = 3
-${test20}[2] = 4
-${test21}[0] = 3
-${test21}[1] = 4
-${test21}[2] = 5
-${test22}[0] = 4
-${test22}[1] = 5
-${test22}[2] = 6
-*********************
-
-*** hash test... ***
-commented out...
-**************************
-
-*** Hash resizing test ***
-ba
-baa
-baaa
-baaaa
-baaaaa
-baaaaaa
-baaaaaaa
-baaaaaaaa
-baaaaaaaaa
-baaaaaaaaaa
-ba
-10
-baa
-9
-baaa
-8
-baaaa
-7
-baaaaa
-6
-baaaaaa
-5
-baaaaaaa
-4
-baaaaaaaa
-3
-baaaaaaaaa
-2
-baaaaaaaaaa
-1
-**************************
-
-
-*** break/continue test ***
-$i should go from 0 to 2
-$j should go from 3 to 4, and $q should go from 3 to 4
- $j=3
- $q=3
- $q=4
- $j=4
- $q=3
- $q=4
-$j should go from 0 to 2
- $j=0
- $j=1
- $j=2
-$k should go from 0 to 2
- $k=0
- $k=1
- $k=2
-$i=0
-$j should go from 3 to 4, and $q should go from 3 to 4
- $j=3
- $q=3
- $q=4
- $j=4
- $q=3
- $q=4
-$j should go from 0 to 2
- $j=0
- $j=1
- $j=2
-$k should go from 0 to 2
- $k=0
- $k=1
- $k=2
-$i=1
-$j should go from 3 to 4, and $q should go from 3 to 4
- $j=3
- $q=3
- $q=4
- $j=4
- $q=3
- $q=4
-$j should go from 0 to 2
- $j=0
- $j=1
- $j=2
-$k should go from 0 to 2
- $k=0
- $k=1
- $k=2
-$i=2
-***********************
-
-*** Nested file include test ***
-<html>
-This is Finish.phtml. This file is supposed to be included
-from regression_test.phtml. This is normal HTML.
-and this is PHP code, 2+2=4
-</html>
-********************************
-
-Tests completed.
-<html>
-<head>
-*** Testing assignments and variable aliasing: ***
-This should read "blah": blah
-This should read "this is nifty": this is nifty
-*************************************************
-
-*** Testing integer operators ***
-Correct result - 8: 8
-Correct result - 8: 8
-Correct result - 2: 2
-Correct result - -2: -2
-Correct result - 15: 15
-Correct result - 15: 15
-Correct result - 2: 2
-Correct result - 3: 3
-*********************************
-
-*** Testing real operators ***
-Correct result - 8: 8
-Correct result - 8: 8
-Correct result - 2: 2
-Correct result - -2: -2
-Correct result - 15: 15
-Correct result - 15: 15
-Correct result - 2: 2
-Correct result - 3: 3
-*********************************
-
-*** Testing if/elseif/else control ***
-
-This works
-this_still_works
-should_print
-
-
-*** Seriously nested if's test ***
-** spelling correction by kluzz **
-Only two lines of text should follow:
-this should be displayed. should be: $i=1, $j=0. is: $i=1, $j=0
-this is supposed to be displayed. should be: $i=2, $j=4. is: $i=2, $j=4
-3 loop iterations should follow:
-2 4
-3 4
-4 4
-**********************************
-
-*** C-style else-if's ***
-This should be displayed
-*************************
-
-*** WHILE tests ***
-0 is smaller than 20
-1 is smaller than 20
-2 is smaller than 20
-3 is smaller than 20
-4 is smaller than 20
-5 is smaller than 20
-6 is smaller than 20
-7 is smaller than 20
-8 is smaller than 20
-9 is smaller than 20
-10 is smaller than 20
-11 is smaller than 20
-12 is smaller than 20
-13 is smaller than 20
-14 is smaller than 20
-15 is smaller than 20
-16 is smaller than 20
-17 is smaller than 20
-18 is smaller than 20
-19 is smaller than 20
-20 equals 20
-21 is greater than 20
-22 is greater than 20
-23 is greater than 20
-24 is greater than 20
-25 is greater than 20
-26 is greater than 20
-27 is greater than 20
-28 is greater than 20
-29 is greater than 20
-30 is greater than 20
-31 is greater than 20
-32 is greater than 20
-33 is greater than 20
-34 is greater than 20
-35 is greater than 20
-36 is greater than 20
-37 is greater than 20
-38 is greater than 20
-39 is greater than 20
-*******************
-
-
-*** Nested WHILEs ***
-Each array variable should be equal to the sum of its indices:
-${test00}[0] = 0
-${test00}[1] = 1
-${test00}[2] = 2
-${test01}[0] = 1
-${test01}[1] = 2
-${test01}[2] = 3
-${test02}[0] = 2
-${test02}[1] = 3
-${test02}[2] = 4
-${test10}[0] = 1
-${test10}[1] = 2
-${test10}[2] = 3
-${test11}[0] = 2
-${test11}[1] = 3
-${test11}[2] = 4
-${test12}[0] = 3
-${test12}[1] = 4
-${test12}[2] = 5
-${test20}[0] = 2
-${test20}[1] = 3
-${test20}[2] = 4
-${test21}[0] = 3
-${test21}[1] = 4
-${test21}[2] = 5
-${test22}[0] = 4
-${test22}[1] = 5
-${test22}[2] = 6
-*********************
-
-*** hash test... ***
-commented out...
-**************************
-
-*** Hash resizing test ***
-ba
-baa
-baaa
-baaaa
-baaaaa
-baaaaaa
-baaaaaaa
-baaaaaaaa
-baaaaaaaaa
-baaaaaaaaaa
-ba
-10
-baa
-9
-baaa
-8
-baaaa
-7
-baaaaa
-6
-baaaaaa
-5
-baaaaaaa
-4
-baaaaaaaa
-3
-baaaaaaaaa
-2
-baaaaaaaaaa
-1
-**************************
-
-
-*** break/continue test ***
-$i should go from 0 to 2
-$j should go from 3 to 4, and $q should go from 3 to 4
- $j=3
- $q=3
- $q=4
- $j=4
- $q=3
- $q=4
-$j should go from 0 to 2
- $j=0
- $j=1
- $j=2
-$k should go from 0 to 2
- $k=0
- $k=1
- $k=2
-$i=0
-$j should go from 3 to 4, and $q should go from 3 to 4
- $j=3
- $q=3
- $q=4
- $j=4
- $q=3
- $q=4
-$j should go from 0 to 2
- $j=0
- $j=1
- $j=2
-$k should go from 0 to 2
- $k=0
- $k=1
- $k=2
-$i=1
-$j should go from 3 to 4, and $q should go from 3 to 4
- $j=3
- $q=3
- $q=4
- $j=4
- $q=3
- $q=4
-$j should go from 0 to 2
- $j=0
- $j=1
- $j=2
-$k should go from 0 to 2
- $k=0
- $k=1
- $k=2
-$i=2
-***********************
-
-*** Nested file include test ***
-<html>
-This is Finish.phtml. This file is supposed to be included
-from regression_test.phtml. This is normal HTML.
-and this is PHP code, 2+2=4
-</html>
-********************************
-
-Tests completed.
-<html>
-<head>
-*** Testing assignments and variable aliasing: ***
-This should read "blah": blah
-This should read "this is nifty": this is nifty
-*************************************************
-
-*** Testing integer operators ***
-Correct result - 8: 8
-Correct result - 8: 8
-Correct result - 2: 2
-Correct result - -2: -2
-Correct result - 15: 15
-Correct result - 15: 15
-Correct result - 2: 2
-Correct result - 3: 3
-*********************************
-
-*** Testing real operators ***
-Correct result - 8: 8
-Correct result - 8: 8
-Correct result - 2: 2
-Correct result - -2: -2
-Correct result - 15: 15
-Correct result - 15: 15
-Correct result - 2: 2
-Correct result - 3: 3
-*********************************
-
-*** Testing if/elseif/else control ***
-
-This works
-this_still_works
-should_print
-
-
-*** Seriously nested if's test ***
-** spelling correction by kluzz **
-Only two lines of text should follow:
-this should be displayed. should be: $i=1, $j=0. is: $i=1, $j=0
-this is supposed to be displayed. should be: $i=2, $j=4. is: $i=2, $j=4
-3 loop iterations should follow:
-2 4
-3 4
-4 4
-**********************************
-
-*** C-style else-if's ***
-This should be displayed
-*************************
-
-*** WHILE tests ***
-0 is smaller than 20
-1 is smaller than 20
-2 is smaller than 20
-3 is smaller than 20
-4 is smaller than 20
-5 is smaller than 20
-6 is smaller than 20
-7 is smaller than 20
-8 is smaller than 20
-9 is smaller than 20
-10 is smaller than 20
-11 is smaller than 20
-12 is smaller than 20
-13 is smaller than 20
-14 is smaller than 20
-15 is smaller than 20
-16 is smaller than 20
-17 is smaller than 20
-18 is smaller than 20
-19 is smaller than 20
-20 equals 20
-21 is greater than 20
-22 is greater than 20
-23 is greater than 20
-24 is greater than 20
-25 is greater than 20
-26 is greater than 20
-27 is greater than 20
-28 is greater than 20
-29 is greater than 20
-30 is greater than 20
-31 is greater than 20
-32 is greater than 20
-33 is greater than 20
-34 is greater than 20
-35 is greater than 20
-36 is greater than 20
-37 is greater than 20
-38 is greater than 20
-39 is greater than 20
-*******************
-
-
-*** Nested WHILEs ***
-Each array variable should be equal to the sum of its indices:
-${test00}[0] = 0
-${test00}[1] = 1
-${test00}[2] = 2
-${test01}[0] = 1
-${test01}[1] = 2
-${test01}[2] = 3
-${test02}[0] = 2
-${test02}[1] = 3
-${test02}[2] = 4
-${test10}[0] = 1
-${test10}[1] = 2
-${test10}[2] = 3
-${test11}[0] = 2
-${test11}[1] = 3
-${test11}[2] = 4
-${test12}[0] = 3
-${test12}[1] = 4
-${test12}[2] = 5
-${test20}[0] = 2
-${test20}[1] = 3
-${test20}[2] = 4
-${test21}[0] = 3
-${test21}[1] = 4
-${test21}[2] = 5
-${test22}[0] = 4
-${test22}[1] = 5
-${test22}[2] = 6
-*********************
-
-*** hash test... ***
-commented out...
-**************************
-
-*** Hash resizing test ***
-ba
-baa
-baaa
-baaaa
-baaaaa
-baaaaaa
-baaaaaaa
-baaaaaaaa
-baaaaaaaaa
-baaaaaaaaaa
-ba
-10
-baa
-9
-baaa
-8
-baaaa
-7
-baaaaa
-6
-baaaaaa
-5
-baaaaaaa
-4
-baaaaaaaa
-3
-baaaaaaaaa
-2
-baaaaaaaaaa
-1
-**************************
-
-
-*** break/continue test ***
-$i should go from 0 to 2
-$j should go from 3 to 4, and $q should go from 3 to 4
- $j=3
- $q=3
- $q=4
- $j=4
- $q=3
- $q=4
-$j should go from 0 to 2
- $j=0
- $j=1
- $j=2
-$k should go from 0 to 2
- $k=0
- $k=1
- $k=2
-$i=0
-$j should go from 3 to 4, and $q should go from 3 to 4
- $j=3
- $q=3
- $q=4
- $j=4
- $q=3
- $q=4
-$j should go from 0 to 2
- $j=0
- $j=1
- $j=2
-$k should go from 0 to 2
- $k=0
- $k=1
- $k=2
-$i=1
-$j should go from 3 to 4, and $q should go from 3 to 4
- $j=3
- $q=3
- $q=4
- $j=4
- $q=3
- $q=4
-$j should go from 0 to 2
- $j=0
- $j=1
- $j=2
-$k should go from 0 to 2
- $k=0
- $k=1
- $k=2
-$i=2
-***********************
-
-*** Nested file include test ***
-<html>
-This is Finish.phtml. This file is supposed to be included
-from regression_test.phtml. This is normal HTML.
-and this is PHP code, 2+2=4
-</html>
-********************************
-
-Tests completed.
-<html>
-<head>
-*** Testing assignments and variable aliasing: ***
-This should read "blah": blah
-This should read "this is nifty": this is nifty
-*************************************************
-
-*** Testing integer operators ***
-Correct result - 8: 8
-Correct result - 8: 8
-Correct result - 2: 2
-Correct result - -2: -2
-Correct result - 15: 15
-Correct result - 15: 15
-Correct result - 2: 2
-Correct result - 3: 3
-*********************************
-
-*** Testing real operators ***
-Correct result - 8: 8
-Correct result - 8: 8
-Correct result - 2: 2
-Correct result - -2: -2
-Correct result - 15: 15
-Correct result - 15: 15
-Correct result - 2: 2
-Correct result - 3: 3
-*********************************
-
-*** Testing if/elseif/else control ***
-
-This works
-this_still_works
-should_print
-
-
-*** Seriously nested if's test ***
-** spelling correction by kluzz **
-Only two lines of text should follow:
-this should be displayed. should be: $i=1, $j=0. is: $i=1, $j=0
-this is supposed to be displayed. should be: $i=2, $j=4. is: $i=2, $j=4
-3 loop iterations should follow:
-2 4
-3 4
-4 4
-**********************************
-
-*** C-style else-if's ***
-This should be displayed
-*************************
-
-*** WHILE tests ***
-0 is smaller than 20
-1 is smaller than 20
-2 is smaller than 20
-3 is smaller than 20
-4 is smaller than 20
-5 is smaller than 20
-6 is smaller than 20
-7 is smaller than 20
-8 is smaller than 20
-9 is smaller than 20
-10 is smaller than 20
-11 is smaller than 20
-12 is smaller than 20
-13 is smaller than 20
-14 is smaller than 20
-15 is smaller than 20
-16 is smaller than 20
-17 is smaller than 20
-18 is smaller than 20
-19 is smaller than 20
-20 equals 20
-21 is greater than 20
-22 is greater than 20
-23 is greater than 20
-24 is greater than 20
-25 is greater than 20
-26 is greater than 20
-27 is greater than 20
-28 is greater than 20
-29 is greater than 20
-30 is greater than 20
-31 is greater than 20
-32 is greater than 20
-33 is greater than 20
-34 is greater than 20
-35 is greater than 20
-36 is greater than 20
-37 is greater than 20
-38 is greater than 20
-39 is greater than 20
-*******************
-
-
-*** Nested WHILEs ***
-Each array variable should be equal to the sum of its indices:
-${test00}[0] = 0
-${test00}[1] = 1
-${test00}[2] = 2
-${test01}[0] = 1
-${test01}[1] = 2
-${test01}[2] = 3
-${test02}[0] = 2
-${test02}[1] = 3
-${test02}[2] = 4
-${test10}[0] = 1
-${test10}[1] = 2
-${test10}[2] = 3
-${test11}[0] = 2
-${test11}[1] = 3
-${test11}[2] = 4
-${test12}[0] = 3
-${test12}[1] = 4
-${test12}[2] = 5
-${test20}[0] = 2
-${test20}[1] = 3
-${test20}[2] = 4
-${test21}[0] = 3
-${test21}[1] = 4
-${test21}[2] = 5
-${test22}[0] = 4
-${test22}[1] = 5
-${test22}[2] = 6
-*********************
-
-*** hash test... ***
-commented out...
-**************************
-
-*** Hash resizing test ***
-ba
-baa
-baaa
-baaaa
-baaaaa
-baaaaaa
-baaaaaaa
-baaaaaaaa
-baaaaaaaaa
-baaaaaaaaaa
-ba
-10
-baa
-9
-baaa
-8
-baaaa
-7
-baaaaa
-6
-baaaaaa
-5
-baaaaaaa
-4
-baaaaaaaa
-3
-baaaaaaaaa
-2
-baaaaaaaaaa
-1
-**************************
-
-
-*** break/continue test ***
-$i should go from 0 to 2
-$j should go from 3 to 4, and $q should go from 3 to 4
- $j=3
- $q=3
- $q=4
- $j=4
- $q=3
- $q=4
-$j should go from 0 to 2
- $j=0
- $j=1
- $j=2
-$k should go from 0 to 2
- $k=0
- $k=1
- $k=2
-$i=0
-$j should go from 3 to 4, and $q should go from 3 to 4
- $j=3
- $q=3
- $q=4
- $j=4
- $q=3
- $q=4
-$j should go from 0 to 2
- $j=0
- $j=1
- $j=2
-$k should go from 0 to 2
- $k=0
- $k=1
- $k=2
-$i=1
-$j should go from 3 to 4, and $q should go from 3 to 4
- $j=3
- $q=3
- $q=4
- $j=4
- $q=3
- $q=4
-$j should go from 0 to 2
- $j=0
- $j=1
- $j=2
-$k should go from 0 to 2
- $k=0
- $k=1
- $k=2
-$i=2
-***********************
-
-*** Nested file include test ***
-<html>
-This is Finish.phtml. This file is supposed to be included
-from regression_test.phtml. This is normal HTML.
-and this is PHP code, 2+2=4
-</html>
-********************************
-
-Tests completed.
-<html>
-<head>
-*** Testing assignments and variable aliasing: ***
-This should read "blah": blah
-This should read "this is nifty": this is nifty
-*************************************************
-
-*** Testing integer operators ***
-Correct result - 8: 8
-Correct result - 8: 8
-Correct result - 2: 2
-Correct result - -2: -2
-Correct result - 15: 15
-Correct result - 15: 15
-Correct result - 2: 2
-Correct result - 3: 3
-*********************************
-
-*** Testing real operators ***
-Correct result - 8: 8
-Correct result - 8: 8
-Correct result - 2: 2
-Correct result - -2: -2
-Correct result - 15: 15
-Correct result - 15: 15
-Correct result - 2: 2
-Correct result - 3: 3
-*********************************
-
-*** Testing if/elseif/else control ***
-
-This works
-this_still_works
-should_print
-
-
-*** Seriously nested if's test ***
-** spelling correction by kluzz **
-Only two lines of text should follow:
-this should be displayed. should be: $i=1, $j=0. is: $i=1, $j=0
-this is supposed to be displayed. should be: $i=2, $j=4. is: $i=2, $j=4
-3 loop iterations should follow:
-2 4
-3 4
-4 4
-**********************************
-
-*** C-style else-if's ***
-This should be displayed
-*************************
-
-*** WHILE tests ***
-0 is smaller than 20
-1 is smaller than 20
-2 is smaller than 20
-3 is smaller than 20
-4 is smaller than 20
-5 is smaller than 20
-6 is smaller than 20
-7 is smaller than 20
-8 is smaller than 20
-9 is smaller than 20
-10 is smaller than 20
-11 is smaller than 20
-12 is smaller than 20
-13 is smaller than 20
-14 is smaller than 20
-15 is smaller than 20
-16 is smaller than 20
-17 is smaller than 20
-18 is smaller than 20
-19 is smaller than 20
-20 equals 20
-21 is greater than 20
-22 is greater than 20
-23 is greater than 20
-24 is greater than 20
-25 is greater than 20
-26 is greater than 20
-27 is greater than 20
-28 is greater than 20
-29 is greater than 20
-30 is greater than 20
-31 is greater than 20
-32 is greater than 20
-33 is greater than 20
-34 is greater than 20
-35 is greater than 20
-36 is greater than 20
-37 is greater than 20
-38 is greater than 20
-39 is greater than 20
-*******************
-
-
-*** Nested WHILEs ***
-Each array variable should be equal to the sum of its indices:
-${test00}[0] = 0
-${test00}[1] = 1
-${test00}[2] = 2
-${test01}[0] = 1
-${test01}[1] = 2
-${test01}[2] = 3
-${test02}[0] = 2
-${test02}[1] = 3
-${test02}[2] = 4
-${test10}[0] = 1
-${test10}[1] = 2
-${test10}[2] = 3
-${test11}[0] = 2
-${test11}[1] = 3
-${test11}[2] = 4
-${test12}[0] = 3
-${test12}[1] = 4
-${test12}[2] = 5
-${test20}[0] = 2
-${test20}[1] = 3
-${test20}[2] = 4
-${test21}[0] = 3
-${test21}[1] = 4
-${test21}[2] = 5
-${test22}[0] = 4
-${test22}[1] = 5
-${test22}[2] = 6
-*********************
-
-*** hash test... ***
-commented out...
-**************************
-
-*** Hash resizing test ***
-ba
-baa
-baaa
-baaaa
-baaaaa
-baaaaaa
-baaaaaaa
-baaaaaaaa
-baaaaaaaaa
-baaaaaaaaaa
-ba
-10
-baa
-9
-baaa
-8
-baaaa
-7
-baaaaa
-6
-baaaaaa
-5
-baaaaaaa
-4
-baaaaaaaa
-3
-baaaaaaaaa
-2
-baaaaaaaaaa
-1
-**************************
-
-
-*** break/continue test ***
-$i should go from 0 to 2
-$j should go from 3 to 4, and $q should go from 3 to 4
- $j=3
- $q=3
- $q=4
- $j=4
- $q=3
- $q=4
-$j should go from 0 to 2
- $j=0
- $j=1
- $j=2
-$k should go from 0 to 2
- $k=0
- $k=1
- $k=2
-$i=0
-$j should go from 3 to 4, and $q should go from 3 to 4
- $j=3
- $q=3
- $q=4
- $j=4
- $q=3
- $q=4
-$j should go from 0 to 2
- $j=0
- $j=1
- $j=2
-$k should go from 0 to 2
- $k=0
- $k=1
- $k=2
-$i=1
-$j should go from 3 to 4, and $q should go from 3 to 4
- $j=3
- $q=3
- $q=4
- $j=4
- $q=3
- $q=4
-$j should go from 0 to 2
- $j=0
- $j=1
- $j=2
-$k should go from 0 to 2
- $k=0
- $k=1
- $k=2
-$i=2
-***********************
-
-*** Nested file include test ***
-<html>
-This is Finish.phtml. This file is supposed to be included
-from regression_test.phtml. This is normal HTML.
-and this is PHP code, 2+2=4
-</html>
-********************************
-
-Tests completed.
-<html>
-<head>
-*** Testing assignments and variable aliasing: ***
-This should read "blah": blah
-This should read "this is nifty": this is nifty
-*************************************************
-
-*** Testing integer operators ***
-Correct result - 8: 8
-Correct result - 8: 8
-Correct result - 2: 2
-Correct result - -2: -2
-Correct result - 15: 15
-Correct result - 15: 15
-Correct result - 2: 2
-Correct result - 3: 3
-*********************************
-
-*** Testing real operators ***
-Correct result - 8: 8
-Correct result - 8: 8
-Correct result - 2: 2
-Correct result - -2: -2
-Correct result - 15: 15
-Correct result - 15: 15
-Correct result - 2: 2
-Correct result - 3: 3
-*********************************
-
-*** Testing if/elseif/else control ***
-
-This works
-this_still_works
-should_print
-
-
-*** Seriously nested if's test ***
-** spelling correction by kluzz **
-Only two lines of text should follow:
-this should be displayed. should be: $i=1, $j=0. is: $i=1, $j=0
-this is supposed to be displayed. should be: $i=2, $j=4. is: $i=2, $j=4
-3 loop iterations should follow:
-2 4
-3 4
-4 4
-**********************************
-
-*** C-style else-if's ***
-This should be displayed
-*************************
-
-*** WHILE tests ***
-0 is smaller than 20
-1 is smaller than 20
-2 is smaller than 20
-3 is smaller than 20
-4 is smaller than 20
-5 is smaller than 20
-6 is smaller than 20
-7 is smaller than 20
-8 is smaller than 20
-9 is smaller than 20
-10 is smaller than 20
-11 is smaller than 20
-12 is smaller than 20
-13 is smaller than 20
-14 is smaller than 20
-15 is smaller than 20
-16 is smaller than 20
-17 is smaller than 20
-18 is smaller than 20
-19 is smaller than 20
-20 equals 20
-21 is greater than 20
-22 is greater than 20
-23 is greater than 20
-24 is greater than 20
-25 is greater than 20
-26 is greater than 20
-27 is greater than 20
-28 is greater than 20
-29 is greater than 20
-30 is greater than 20
-31 is greater than 20
-32 is greater than 20
-33 is greater than 20
-34 is greater than 20
-35 is greater than 20
-36 is greater than 20
-37 is greater than 20
-38 is greater than 20
-39 is greater than 20
-*******************
-
-
-*** Nested WHILEs ***
-Each array variable should be equal to the sum of its indices:
-${test00}[0] = 0
-${test00}[1] = 1
-${test00}[2] = 2
-${test01}[0] = 1
-${test01}[1] = 2
-${test01}[2] = 3
-${test02}[0] = 2
-${test02}[1] = 3
-${test02}[2] = 4
-${test10}[0] = 1
-${test10}[1] = 2
-${test10}[2] = 3
-${test11}[0] = 2
-${test11}[1] = 3
-${test11}[2] = 4
-${test12}[0] = 3
-${test12}[1] = 4
-${test12}[2] = 5
-${test20}[0] = 2
-${test20}[1] = 3
-${test20}[2] = 4
-${test21}[0] = 3
-${test21}[1] = 4
-${test21}[2] = 5
-${test22}[0] = 4
-${test22}[1] = 5
-${test22}[2] = 6
-*********************
-
-*** hash test... ***
-commented out...
-**************************
-
-*** Hash resizing test ***
-ba
-baa
-baaa
-baaaa
-baaaaa
-baaaaaa
-baaaaaaa
-baaaaaaaa
-baaaaaaaaa
-baaaaaaaaaa
-ba
-10
-baa
-9
-baaa
-8
-baaaa
-7
-baaaaa
-6
-baaaaaa
-5
-baaaaaaa
-4
-baaaaaaaa
-3
-baaaaaaaaa
-2
-baaaaaaaaaa
-1
-**************************
-
-
-*** break/continue test ***
-$i should go from 0 to 2
-$j should go from 3 to 4, and $q should go from 3 to 4
- $j=3
- $q=3
- $q=4
- $j=4
- $q=3
- $q=4
-$j should go from 0 to 2
- $j=0
- $j=1
- $j=2
-$k should go from 0 to 2
- $k=0
- $k=1
- $k=2
-$i=0
-$j should go from 3 to 4, and $q should go from 3 to 4
- $j=3
- $q=3
- $q=4
- $j=4
- $q=3
- $q=4
-$j should go from 0 to 2
- $j=0
- $j=1
- $j=2
-$k should go from 0 to 2
- $k=0
- $k=1
- $k=2
-$i=1
-$j should go from 3 to 4, and $q should go from 3 to 4
- $j=3
- $q=3
- $q=4
- $j=4
- $q=3
- $q=4
-$j should go from 0 to 2
- $j=0
- $j=1
- $j=2
-$k should go from 0 to 2
- $k=0
- $k=1
- $k=2
-$i=2
-***********************
-
-*** Nested file include test ***
-<html>
-This is Finish.phtml. This file is supposed to be included
-from regression_test.phtml. This is normal HTML.
-and this is PHP code, 2+2=4
-</html>
-********************************
-
-Tests completed.
-<html>
-<head>
-*** Testing assignments and variable aliasing: ***
-This should read "blah": blah
-This should read "this is nifty": this is nifty
-*************************************************
-
-*** Testing integer operators ***
-Correct result - 8: 8
-Correct result - 8: 8
-Correct result - 2: 2
-Correct result - -2: -2
-Correct result - 15: 15
-Correct result - 15: 15
-Correct result - 2: 2
-Correct result - 3: 3
-*********************************
-
-*** Testing real operators ***
-Correct result - 8: 8
-Correct result - 8: 8
-Correct result - 2: 2
-Correct result - -2: -2
-Correct result - 15: 15
-Correct result - 15: 15
-Correct result - 2: 2
-Correct result - 3: 3
-*********************************
-
-*** Testing if/elseif/else control ***
-
-This works
-this_still_works
-should_print
-
-
-*** Seriously nested if's test ***
-** spelling correction by kluzz **
-Only two lines of text should follow:
-this should be displayed. should be: $i=1, $j=0. is: $i=1, $j=0
-this is supposed to be displayed. should be: $i=2, $j=4. is: $i=2, $j=4
-3 loop iterations should follow:
-2 4
-3 4
-4 4
-**********************************
-
-*** C-style else-if's ***
-This should be displayed
-*************************
-
-*** WHILE tests ***
-0 is smaller than 20
-1 is smaller than 20
-2 is smaller than 20
-3 is smaller than 20
-4 is smaller than 20
-5 is smaller than 20
-6 is smaller than 20
-7 is smaller than 20
-8 is smaller than 20
-9 is smaller than 20
-10 is smaller than 20
-11 is smaller than 20
-12 is smaller than 20
-13 is smaller than 20
-14 is smaller than 20
-15 is smaller than 20
-16 is smaller than 20
-17 is smaller than 20
-18 is smaller than 20
-19 is smaller than 20
-20 equals 20
-21 is greater than 20
-22 is greater than 20
-23 is greater than 20
-24 is greater than 20
-25 is greater than 20
-26 is greater than 20
-27 is greater than 20
-28 is greater than 20
-29 is greater than 20
-30 is greater than 20
-31 is greater than 20
-32 is greater than 20
-33 is greater than 20
-34 is greater than 20
-35 is greater than 20
-36 is greater than 20
-37 is greater than 20
-38 is greater than 20
-39 is greater than 20
-*******************
-
-
-*** Nested WHILEs ***
-Each array variable should be equal to the sum of its indices:
-${test00}[0] = 0
-${test00}[1] = 1
-${test00}[2] = 2
-${test01}[0] = 1
-${test01}[1] = 2
-${test01}[2] = 3
-${test02}[0] = 2
-${test02}[1] = 3
-${test02}[2] = 4
-${test10}[0] = 1
-${test10}[1] = 2
-${test10}[2] = 3
-${test11}[0] = 2
-${test11}[1] = 3
-${test11}[2] = 4
-${test12}[0] = 3
-${test12}[1] = 4
-${test12}[2] = 5
-${test20}[0] = 2
-${test20}[1] = 3
-${test20}[2] = 4
-${test21}[0] = 3
-${test21}[1] = 4
-${test21}[2] = 5
-${test22}[0] = 4
-${test22}[1] = 5
-${test22}[2] = 6
-*********************
-
-*** hash test... ***
-commented out...
-**************************
-
-*** Hash resizing test ***
-ba
-baa
-baaa
-baaaa
-baaaaa
-baaaaaa
-baaaaaaa
-baaaaaaaa
-baaaaaaaaa
-baaaaaaaaaa
-ba
-10
-baa
-9
-baaa
-8
-baaaa
-7
-baaaaa
-6
-baaaaaa
-5
-baaaaaaa
-4
-baaaaaaaa
-3
-baaaaaaaaa
-2
-baaaaaaaaaa
-1
-**************************
-
-
-*** break/continue test ***
-$i should go from 0 to 2
-$j should go from 3 to 4, and $q should go from 3 to 4
- $j=3
- $q=3
- $q=4
- $j=4
- $q=3
- $q=4
-$j should go from 0 to 2
- $j=0
- $j=1
- $j=2
-$k should go from 0 to 2
- $k=0
- $k=1
- $k=2
-$i=0
-$j should go from 3 to 4, and $q should go from 3 to 4
- $j=3
- $q=3
- $q=4
- $j=4
- $q=3
- $q=4
-$j should go from 0 to 2
- $j=0
- $j=1
- $j=2
-$k should go from 0 to 2
- $k=0
- $k=1
- $k=2
-$i=1
-$j should go from 3 to 4, and $q should go from 3 to 4
- $j=3
- $q=3
- $q=4
- $j=4
- $q=3
- $q=4
-$j should go from 0 to 2
- $j=0
- $j=1
- $j=2
-$k should go from 0 to 2
- $k=0
- $k=1
- $k=2
-$i=2
-***********************
-
-*** Nested file include test ***
-<html>
-This is Finish.phtml. This file is supposed to be included
-from regression_test.phtml. This is normal HTML.
-and this is PHP code, 2+2=4
-</html>
-********************************
-
-Tests completed.
-<html>
-<head>
-*** Testing assignments and variable aliasing: ***
-This should read "blah": blah
-This should read "this is nifty": this is nifty
-*************************************************
-
-*** Testing integer operators ***
-Correct result - 8: 8
-Correct result - 8: 8
-Correct result - 2: 2
-Correct result - -2: -2
-Correct result - 15: 15
-Correct result - 15: 15
-Correct result - 2: 2
-Correct result - 3: 3
-*********************************
-
-*** Testing real operators ***
-Correct result - 8: 8
-Correct result - 8: 8
-Correct result - 2: 2
-Correct result - -2: -2
-Correct result - 15: 15
-Correct result - 15: 15
-Correct result - 2: 2
-Correct result - 3: 3
-*********************************
-
-*** Testing if/elseif/else control ***
-
-This works
-this_still_works
-should_print
-
-
-*** Seriously nested if's test ***
-** spelling correction by kluzz **
-Only two lines of text should follow:
-this should be displayed. should be: $i=1, $j=0. is: $i=1, $j=0
-this is supposed to be displayed. should be: $i=2, $j=4. is: $i=2, $j=4
-3 loop iterations should follow:
-2 4
-3 4
-4 4
-**********************************
-
-*** C-style else-if's ***
-This should be displayed
-*************************
-
-*** WHILE tests ***
-0 is smaller than 20
-1 is smaller than 20
-2 is smaller than 20
-3 is smaller than 20
-4 is smaller than 20
-5 is smaller than 20
-6 is smaller than 20
-7 is smaller than 20
-8 is smaller than 20
-9 is smaller than 20
-10 is smaller than 20
-11 is smaller than 20
-12 is smaller than 20
-13 is smaller than 20
-14 is smaller than 20
-15 is smaller than 20
-16 is smaller than 20
-17 is smaller than 20
-18 is smaller than 20
-19 is smaller than 20
-20 equals 20
-21 is greater than 20
-22 is greater than 20
-23 is greater than 20
-24 is greater than 20
-25 is greater than 20
-26 is greater than 20
-27 is greater than 20
-28 is greater than 20
-29 is greater than 20
-30 is greater than 20
-31 is greater than 20
-32 is greater than 20
-33 is greater than 20
-34 is greater than 20
-35 is greater than 20
-36 is greater than 20
-37 is greater than 20
-38 is greater than 20
-39 is greater than 20
-*******************
-
-
-*** Nested WHILEs ***
-Each array variable should be equal to the sum of its indices:
-${test00}[0] = 0
-${test00}[1] = 1
-${test00}[2] = 2
-${test01}[0] = 1
-${test01}[1] = 2
-${test01}[2] = 3
-${test02}[0] = 2
-${test02}[1] = 3
-${test02}[2] = 4
-${test10}[0] = 1
-${test10}[1] = 2
-${test10}[2] = 3
-${test11}[0] = 2
-${test11}[1] = 3
-${test11}[2] = 4
-${test12}[0] = 3
-${test12}[1] = 4
-${test12}[2] = 5
-${test20}[0] = 2
-${test20}[1] = 3
-${test20}[2] = 4
-${test21}[0] = 3
-${test21}[1] = 4
-${test21}[2] = 5
-${test22}[0] = 4
-${test22}[1] = 5
-${test22}[2] = 6
-*********************
-
-*** hash test... ***
-commented out...
-**************************
-
-*** Hash resizing test ***
-ba
-baa
-baaa
-baaaa
-baaaaa
-baaaaaa
-baaaaaaa
-baaaaaaaa
-baaaaaaaaa
-baaaaaaaaaa
-ba
-10
-baa
-9
-baaa
-8
-baaaa
-7
-baaaaa
-6
-baaaaaa
-5
-baaaaaaa
-4
-baaaaaaaa
-3
-baaaaaaaaa
-2
-baaaaaaaaaa
-1
-**************************
-
-
-*** break/continue test ***
-$i should go from 0 to 2
-$j should go from 3 to 4, and $q should go from 3 to 4
- $j=3
- $q=3
- $q=4
- $j=4
- $q=3
- $q=4
-$j should go from 0 to 2
- $j=0
- $j=1
- $j=2
-$k should go from 0 to 2
- $k=0
- $k=1
- $k=2
-$i=0
-$j should go from 3 to 4, and $q should go from 3 to 4
- $j=3
- $q=3
- $q=4
- $j=4
- $q=3
- $q=4
-$j should go from 0 to 2
- $j=0
- $j=1
- $j=2
-$k should go from 0 to 2
- $k=0
- $k=1
- $k=2
-$i=1
-$j should go from 3 to 4, and $q should go from 3 to 4
- $j=3
- $q=3
- $q=4
- $j=4
- $q=3
- $q=4
-$j should go from 0 to 2
- $j=0
- $j=1
- $j=2
-$k should go from 0 to 2
- $k=0
- $k=1
- $k=2
-$i=2
-***********************
-
-*** Nested file include test ***
-<html>
-This is Finish.phtml. This file is supposed to be included
-from regression_test.phtml. This is normal HTML.
-and this is PHP code, 2+2=4
-</html>
-********************************
-
-Tests completed.
-<html>
-<head>
-*** Testing assignments and variable aliasing: ***
-This should read "blah": blah
-This should read "this is nifty": this is nifty
-*************************************************
-
-*** Testing integer operators ***
-Correct result - 8: 8
-Correct result - 8: 8
-Correct result - 2: 2
-Correct result - -2: -2
-Correct result - 15: 15
-Correct result - 15: 15
-Correct result - 2: 2
-Correct result - 3: 3
-*********************************
-
-*** Testing real operators ***
-Correct result - 8: 8
-Correct result - 8: 8
-Correct result - 2: 2
-Correct result - -2: -2
-Correct result - 15: 15
-Correct result - 15: 15
-Correct result - 2: 2
-Correct result - 3: 3
-*********************************
-
-*** Testing if/elseif/else control ***
-
-This works
-this_still_works
-should_print
-
-
-*** Seriously nested if's test ***
-** spelling correction by kluzz **
-Only two lines of text should follow:
-this should be displayed. should be: $i=1, $j=0. is: $i=1, $j=0
-this is supposed to be displayed. should be: $i=2, $j=4. is: $i=2, $j=4
-3 loop iterations should follow:
-2 4
-3 4
-4 4
-**********************************
-
-*** C-style else-if's ***
-This should be displayed
-*************************
-
-*** WHILE tests ***
-0 is smaller than 20
-1 is smaller than 20
-2 is smaller than 20
-3 is smaller than 20
-4 is smaller than 20
-5 is smaller than 20
-6 is smaller than 20
-7 is smaller than 20
-8 is smaller than 20
-9 is smaller than 20
-10 is smaller than 20
-11 is smaller than 20
-12 is smaller than 20
-13 is smaller than 20
-14 is smaller than 20
-15 is smaller than 20
-16 is smaller than 20
-17 is smaller than 20
-18 is smaller than 20
-19 is smaller than 20
-20 equals 20
-21 is greater than 20
-22 is greater than 20
-23 is greater than 20
-24 is greater than 20
-25 is greater than 20
-26 is greater than 20
-27 is greater than 20
-28 is greater than 20
-29 is greater than 20
-30 is greater than 20
-31 is greater than 20
-32 is greater than 20
-33 is greater than 20
-34 is greater than 20
-35 is greater than 20
-36 is greater than 20
-37 is greater than 20
-38 is greater than 20
-39 is greater than 20
-*******************
-
-
-*** Nested WHILEs ***
-Each array variable should be equal to the sum of its indices:
-${test00}[0] = 0
-${test00}[1] = 1
-${test00}[2] = 2
-${test01}[0] = 1
-${test01}[1] = 2
-${test01}[2] = 3
-${test02}[0] = 2
-${test02}[1] = 3
-${test02}[2] = 4
-${test10}[0] = 1
-${test10}[1] = 2
-${test10}[2] = 3
-${test11}[0] = 2
-${test11}[1] = 3
-${test11}[2] = 4
-${test12}[0] = 3
-${test12}[1] = 4
-${test12}[2] = 5
-${test20}[0] = 2
-${test20}[1] = 3
-${test20}[2] = 4
-${test21}[0] = 3
-${test21}[1] = 4
-${test21}[2] = 5
-${test22}[0] = 4
-${test22}[1] = 5
-${test22}[2] = 6
-*********************
-
-*** hash test... ***
-commented out...
-**************************
-
-*** Hash resizing test ***
-ba
-baa
-baaa
-baaaa
-baaaaa
-baaaaaa
-baaaaaaa
-baaaaaaaa
-baaaaaaaaa
-baaaaaaaaaa
-ba
-10
-baa
-9
-baaa
-8
-baaaa
-7
-baaaaa
-6
-baaaaaa
-5
-baaaaaaa
-4
-baaaaaaaa
-3
-baaaaaaaaa
-2
-baaaaaaaaaa
-1
-**************************
-
-
-*** break/continue test ***
-$i should go from 0 to 2
-$j should go from 3 to 4, and $q should go from 3 to 4
- $j=3
- $q=3
- $q=4
- $j=4
- $q=3
- $q=4
-$j should go from 0 to 2
- $j=0
- $j=1
- $j=2
-$k should go from 0 to 2
- $k=0
- $k=1
- $k=2
-$i=0
-$j should go from 3 to 4, and $q should go from 3 to 4
- $j=3
- $q=3
- $q=4
- $j=4
- $q=3
- $q=4
-$j should go from 0 to 2
- $j=0
- $j=1
- $j=2
-$k should go from 0 to 2
- $k=0
- $k=1
- $k=2
-$i=1
-$j should go from 3 to 4, and $q should go from 3 to 4
- $j=3
- $q=3
- $q=4
- $j=4
- $q=3
- $q=4
-$j should go from 0 to 2
- $j=0
- $j=1
- $j=2
-$k should go from 0 to 2
- $k=0
- $k=1
- $k=2
-$i=2
-***********************
-
-*** Nested file include test ***
-<html>
-This is Finish.phtml. This file is supposed to be included
-from regression_test.phtml. This is normal HTML.
-and this is PHP code, 2+2=4
-</html>
-********************************
-
-Tests completed.
-<html>
-<head>
-*** Testing assignments and variable aliasing: ***
-This should read "blah": blah
-This should read "this is nifty": this is nifty
-*************************************************
-
-*** Testing integer operators ***
-Correct result - 8: 8
-Correct result - 8: 8
-Correct result - 2: 2
-Correct result - -2: -2
-Correct result - 15: 15
-Correct result - 15: 15
-Correct result - 2: 2
-Correct result - 3: 3
-*********************************
-
-*** Testing real operators ***
-Correct result - 8: 8
-Correct result - 8: 8
-Correct result - 2: 2
-Correct result - -2: -2
-Correct result - 15: 15
-Correct result - 15: 15
-Correct result - 2: 2
-Correct result - 3: 3
-*********************************
-
-*** Testing if/elseif/else control ***
-
-This works
-this_still_works
-should_print
-
-
-*** Seriously nested if's test ***
-** spelling correction by kluzz **
-Only two lines of text should follow:
-this should be displayed. should be: $i=1, $j=0. is: $i=1, $j=0
-this is supposed to be displayed. should be: $i=2, $j=4. is: $i=2, $j=4
-3 loop iterations should follow:
-2 4
-3 4
-4 4
-**********************************
-
-*** C-style else-if's ***
-This should be displayed
-*************************
-
-*** WHILE tests ***
-0 is smaller than 20
-1 is smaller than 20
-2 is smaller than 20
-3 is smaller than 20
-4 is smaller than 20
-5 is smaller than 20
-6 is smaller than 20
-7 is smaller than 20
-8 is smaller than 20
-9 is smaller than 20
-10 is smaller than 20
-11 is smaller than 20
-12 is smaller than 20
-13 is smaller than 20
-14 is smaller than 20
-15 is smaller than 20
-16 is smaller than 20
-17 is smaller than 20
-18 is smaller than 20
-19 is smaller than 20
-20 equals 20
-21 is greater than 20
-22 is greater than 20
-23 is greater than 20
-24 is greater than 20
-25 is greater than 20
-26 is greater than 20
-27 is greater than 20
-28 is greater than 20
-29 is greater than 20
-30 is greater than 20
-31 is greater than 20
-32 is greater than 20
-33 is greater than 20
-34 is greater than 20
-35 is greater than 20
-36 is greater than 20
-37 is greater than 20
-38 is greater than 20
-39 is greater than 20
-*******************
-
-
-*** Nested WHILEs ***
-Each array variable should be equal to the sum of its indices:
-${test00}[0] = 0
-${test00}[1] = 1
-${test00}[2] = 2
-${test01}[0] = 1
-${test01}[1] = 2
-${test01}[2] = 3
-${test02}[0] = 2
-${test02}[1] = 3
-${test02}[2] = 4
-${test10}[0] = 1
-${test10}[1] = 2
-${test10}[2] = 3
-${test11}[0] = 2
-${test11}[1] = 3
-${test11}[2] = 4
-${test12}[0] = 3
-${test12}[1] = 4
-${test12}[2] = 5
-${test20}[0] = 2
-${test20}[1] = 3
-${test20}[2] = 4
-${test21}[0] = 3
-${test21}[1] = 4
-${test21}[2] = 5
-${test22}[0] = 4
-${test22}[1] = 5
-${test22}[2] = 6
-*********************
-
-*** hash test... ***
-commented out...
-**************************
-
-*** Hash resizing test ***
-ba
-baa
-baaa
-baaaa
-baaaaa
-baaaaaa
-baaaaaaa
-baaaaaaaa
-baaaaaaaaa
-baaaaaaaaaa
-ba
-10
-baa
-9
-baaa
-8
-baaaa
-7
-baaaaa
-6
-baaaaaa
-5
-baaaaaaa
-4
-baaaaaaaa
-3
-baaaaaaaaa
-2
-baaaaaaaaaa
-1
-**************************
-
-
-*** break/continue test ***
-$i should go from 0 to 2
-$j should go from 3 to 4, and $q should go from 3 to 4
- $j=3
- $q=3
- $q=4
- $j=4
- $q=3
- $q=4
-$j should go from 0 to 2
- $j=0
- $j=1
- $j=2
-$k should go from 0 to 2
- $k=0
- $k=1
- $k=2
-$i=0
-$j should go from 3 to 4, and $q should go from 3 to 4
- $j=3
- $q=3
- $q=4
- $j=4
- $q=3
- $q=4
-$j should go from 0 to 2
- $j=0
- $j=1
- $j=2
-$k should go from 0 to 2
- $k=0
- $k=1
- $k=2
-$i=1
-$j should go from 3 to 4, and $q should go from 3 to 4
- $j=3
- $q=3
- $q=4
- $j=4
- $q=3
- $q=4
-$j should go from 0 to 2
- $j=0
- $j=1
- $j=2
-$k should go from 0 to 2
- $k=0
- $k=1
- $k=2
-$i=2
-***********************
-
-*** Nested file include test ***
-<html>
-This is Finish.phtml. This file is supposed to be included
-from regression_test.phtml. This is normal HTML.
-and this is PHP code, 2+2=4
-</html>
-********************************
-
-Tests completed.
-<html>
-<head>
-*** Testing assignments and variable aliasing: ***
-This should read "blah": blah
-This should read "this is nifty": this is nifty
-*************************************************
-
-*** Testing integer operators ***
-Correct result - 8: 8
-Correct result - 8: 8
-Correct result - 2: 2
-Correct result - -2: -2
-Correct result - 15: 15
-Correct result - 15: 15
-Correct result - 2: 2
-Correct result - 3: 3
-*********************************
-
-*** Testing real operators ***
-Correct result - 8: 8
-Correct result - 8: 8
-Correct result - 2: 2
-Correct result - -2: -2
-Correct result - 15: 15
-Correct result - 15: 15
-Correct result - 2: 2
-Correct result - 3: 3
-*********************************
-
-*** Testing if/elseif/else control ***
-
-This works
-this_still_works
-should_print
-
-
-*** Seriously nested if's test ***
-** spelling correction by kluzz **
-Only two lines of text should follow:
-this should be displayed. should be: $i=1, $j=0. is: $i=1, $j=0
-this is supposed to be displayed. should be: $i=2, $j=4. is: $i=2, $j=4
-3 loop iterations should follow:
-2 4
-3 4
-4 4
-**********************************
-
-*** C-style else-if's ***
-This should be displayed
-*************************
-
-*** WHILE tests ***
-0 is smaller than 20
-1 is smaller than 20
-2 is smaller than 20
-3 is smaller than 20
-4 is smaller than 20
-5 is smaller than 20
-6 is smaller than 20
-7 is smaller than 20
-8 is smaller than 20
-9 is smaller than 20
-10 is smaller than 20
-11 is smaller than 20
-12 is smaller than 20
-13 is smaller than 20
-14 is smaller than 20
-15 is smaller than 20
-16 is smaller than 20
-17 is smaller than 20
-18 is smaller than 20
-19 is smaller than 20
-20 equals 20
-21 is greater than 20
-22 is greater than 20
-23 is greater than 20
-24 is greater than 20
-25 is greater than 20
-26 is greater than 20
-27 is greater than 20
-28 is greater than 20
-29 is greater than 20
-30 is greater than 20
-31 is greater than 20
-32 is greater than 20
-33 is greater than 20
-34 is greater than 20
-35 is greater than 20
-36 is greater than 20
-37 is greater than 20
-38 is greater than 20
-39 is greater than 20
-*******************
-
-
-*** Nested WHILEs ***
-Each array variable should be equal to the sum of its indices:
-${test00}[0] = 0
-${test00}[1] = 1
-${test00}[2] = 2
-${test01}[0] = 1
-${test01}[1] = 2
-${test01}[2] = 3
-${test02}[0] = 2
-${test02}[1] = 3
-${test02}[2] = 4
-${test10}[0] = 1
-${test10}[1] = 2
-${test10}[2] = 3
-${test11}[0] = 2
-${test11}[1] = 3
-${test11}[2] = 4
-${test12}[0] = 3
-${test12}[1] = 4
-${test12}[2] = 5
-${test20}[0] = 2
-${test20}[1] = 3
-${test20}[2] = 4
-${test21}[0] = 3
-${test21}[1] = 4
-${test21}[2] = 5
-${test22}[0] = 4
-${test22}[1] = 5
-${test22}[2] = 6
-*********************
-
-*** hash test... ***
-commented out...
-**************************
-
-*** Hash resizing test ***
-ba
-baa
-baaa
-baaaa
-baaaaa
-baaaaaa
-baaaaaaa
-baaaaaaaa
-baaaaaaaaa
-baaaaaaaaaa
-ba
-10
-baa
-9
-baaa
-8
-baaaa
-7
-baaaaa
-6
-baaaaaa
-5
-baaaaaaa
-4
-baaaaaaaa
-3
-baaaaaaaaa
-2
-baaaaaaaaaa
-1
-**************************
-
-
-*** break/continue test ***
-$i should go from 0 to 2
-$j should go from 3 to 4, and $q should go from 3 to 4
- $j=3
- $q=3
- $q=4
- $j=4
- $q=3
- $q=4
-$j should go from 0 to 2
- $j=0
- $j=1
- $j=2
-$k should go from 0 to 2
- $k=0
- $k=1
- $k=2
-$i=0
-$j should go from 3 to 4, and $q should go from 3 to 4
- $j=3
- $q=3
- $q=4
- $j=4
- $q=3
- $q=4
-$j should go from 0 to 2
- $j=0
- $j=1
- $j=2
-$k should go from 0 to 2
- $k=0
- $k=1
- $k=2
-$i=1
-$j should go from 3 to 4, and $q should go from 3 to 4
- $j=3
- $q=3
- $q=4
- $j=4
- $q=3
- $q=4
-$j should go from 0 to 2
- $j=0
- $j=1
- $j=2
-$k should go from 0 to 2
- $k=0
- $k=1
- $k=2
-$i=2
-***********************
-
-*** Nested file include test ***
-<html>
-This is Finish.phtml. This file is supposed to be included
-from regression_test.phtml. This is normal HTML.
-and this is PHP code, 2+2=4
-</html>
-********************************
-
-Tests completed.
-<html>
-<head>
-*** Testing assignments and variable aliasing: ***
-This should read "blah": blah
-This should read "this is nifty": this is nifty
-*************************************************
-
-*** Testing integer operators ***
-Correct result - 8: 8
-Correct result - 8: 8
-Correct result - 2: 2
-Correct result - -2: -2
-Correct result - 15: 15
-Correct result - 15: 15
-Correct result - 2: 2
-Correct result - 3: 3
-*********************************
-
-*** Testing real operators ***
-Correct result - 8: 8
-Correct result - 8: 8
-Correct result - 2: 2
-Correct result - -2: -2
-Correct result - 15: 15
-Correct result - 15: 15
-Correct result - 2: 2
-Correct result - 3: 3
-*********************************
-
-*** Testing if/elseif/else control ***
-
-This works
-this_still_works
-should_print
-
-
-*** Seriously nested if's test ***
-** spelling correction by kluzz **
-Only two lines of text should follow:
-this should be displayed. should be: $i=1, $j=0. is: $i=1, $j=0
-this is supposed to be displayed. should be: $i=2, $j=4. is: $i=2, $j=4
-3 loop iterations should follow:
-2 4
-3 4
-4 4
-**********************************
-
-*** C-style else-if's ***
-This should be displayed
-*************************
-
-*** WHILE tests ***
-0 is smaller than 20
-1 is smaller than 20
-2 is smaller than 20
-3 is smaller than 20
-4 is smaller than 20
-5 is smaller than 20
-6 is smaller than 20
-7 is smaller than 20
-8 is smaller than 20
-9 is smaller than 20
-10 is smaller than 20
-11 is smaller than 20
-12 is smaller than 20
-13 is smaller than 20
-14 is smaller than 20
-15 is smaller than 20
-16 is smaller than 20
-17 is smaller than 20
-18 is smaller than 20
-19 is smaller than 20
-20 equals 20
-21 is greater than 20
-22 is greater than 20
-23 is greater than 20
-24 is greater than 20
-25 is greater than 20
-26 is greater than 20
-27 is greater than 20
-28 is greater than 20
-29 is greater than 20
-30 is greater than 20
-31 is greater than 20
-32 is greater than 20
-33 is greater than 20
-34 is greater than 20
-35 is greater than 20
-36 is greater than 20
-37 is greater than 20
-38 is greater than 20
-39 is greater than 20
-*******************
-
-
-*** Nested WHILEs ***
-Each array variable should be equal to the sum of its indices:
-${test00}[0] = 0
-${test00}[1] = 1
-${test00}[2] = 2
-${test01}[0] = 1
-${test01}[1] = 2
-${test01}[2] = 3
-${test02}[0] = 2
-${test02}[1] = 3
-${test02}[2] = 4
-${test10}[0] = 1
-${test10}[1] = 2
-${test10}[2] = 3
-${test11}[0] = 2
-${test11}[1] = 3
-${test11}[2] = 4
-${test12}[0] = 3
-${test12}[1] = 4
-${test12}[2] = 5
-${test20}[0] = 2
-${test20}[1] = 3
-${test20}[2] = 4
-${test21}[0] = 3
-${test21}[1] = 4
-${test21}[2] = 5
-${test22}[0] = 4
-${test22}[1] = 5
-${test22}[2] = 6
-*********************
-
-*** hash test... ***
-commented out...
-**************************
-
-*** Hash resizing test ***
-ba
-baa
-baaa
-baaaa
-baaaaa
-baaaaaa
-baaaaaaa
-baaaaaaaa
-baaaaaaaaa
-baaaaaaaaaa
-ba
-10
-baa
-9
-baaa
-8
-baaaa
-7
-baaaaa
-6
-baaaaaa
-5
-baaaaaaa
-4
-baaaaaaaa
-3
-baaaaaaaaa
-2
-baaaaaaaaaa
-1
-**************************
-
-
-*** break/continue test ***
-$i should go from 0 to 2
-$j should go from 3 to 4, and $q should go from 3 to 4
- $j=3
- $q=3
- $q=4
- $j=4
- $q=3
- $q=4
-$j should go from 0 to 2
- $j=0
- $j=1
- $j=2
-$k should go from 0 to 2
- $k=0
- $k=1
- $k=2
-$i=0
-$j should go from 3 to 4, and $q should go from 3 to 4
- $j=3
- $q=3
- $q=4
- $j=4
- $q=3
- $q=4
-$j should go from 0 to 2
- $j=0
- $j=1
- $j=2
-$k should go from 0 to 2
- $k=0
- $k=1
- $k=2
-$i=1
-$j should go from 3 to 4, and $q should go from 3 to 4
- $j=3
- $q=3
- $q=4
- $j=4
- $q=3
- $q=4
-$j should go from 0 to 2
- $j=0
- $j=1
- $j=2
-$k should go from 0 to 2
- $k=0
- $k=1
- $k=2
-$i=2
-***********************
-
-*** Nested file include test ***
-<html>
-This is Finish.phtml. This file is supposed to be included
-from regression_test.phtml. This is normal HTML.
-and this is PHP code, 2+2=4
-</html>
-********************************
-
-Tests completed.
-<html>
-<head>
-*** Testing assignments and variable aliasing: ***
-This should read "blah": blah
-This should read "this is nifty": this is nifty
-*************************************************
-
-*** Testing integer operators ***
-Correct result - 8: 8
-Correct result - 8: 8
-Correct result - 2: 2
-Correct result - -2: -2
-Correct result - 15: 15
-Correct result - 15: 15
-Correct result - 2: 2
-Correct result - 3: 3
-*********************************
-
-*** Testing real operators ***
-Correct result - 8: 8
-Correct result - 8: 8
-Correct result - 2: 2
-Correct result - -2: -2
-Correct result - 15: 15
-Correct result - 15: 15
-Correct result - 2: 2
-Correct result - 3: 3
-*********************************
-
-*** Testing if/elseif/else control ***
-
-This works
-this_still_works
-should_print
-
-
-*** Seriously nested if's test ***
-** spelling correction by kluzz **
-Only two lines of text should follow:
-this should be displayed. should be: $i=1, $j=0. is: $i=1, $j=0
-this is supposed to be displayed. should be: $i=2, $j=4. is: $i=2, $j=4
-3 loop iterations should follow:
-2 4
-3 4
-4 4
-**********************************
-
-*** C-style else-if's ***
-This should be displayed
-*************************
-
-*** WHILE tests ***
-0 is smaller than 20
-1 is smaller than 20
-2 is smaller than 20
-3 is smaller than 20
-4 is smaller than 20
-5 is smaller than 20
-6 is smaller than 20
-7 is smaller than 20
-8 is smaller than 20
-9 is smaller than 20
-10 is smaller than 20
-11 is smaller than 20
-12 is smaller than 20
-13 is smaller than 20
-14 is smaller than 20
-15 is smaller than 20
-16 is smaller than 20
-17 is smaller than 20
-18 is smaller than 20
-19 is smaller than 20
-20 equals 20
-21 is greater than 20
-22 is greater than 20
-23 is greater than 20
-24 is greater than 20
-25 is greater than 20
-26 is greater than 20
-27 is greater than 20
-28 is greater than 20
-29 is greater than 20
-30 is greater than 20
-31 is greater than 20
-32 is greater than 20
-33 is greater than 20
-34 is greater than 20
-35 is greater than 20
-36 is greater than 20
-37 is greater than 20
-38 is greater than 20
-39 is greater than 20
-*******************
-
-
-*** Nested WHILEs ***
-Each array variable should be equal to the sum of its indices:
-${test00}[0] = 0
-${test00}[1] = 1
-${test00}[2] = 2
-${test01}[0] = 1
-${test01}[1] = 2
-${test01}[2] = 3
-${test02}[0] = 2
-${test02}[1] = 3
-${test02}[2] = 4
-${test10}[0] = 1
-${test10}[1] = 2
-${test10}[2] = 3
-${test11}[0] = 2
-${test11}[1] = 3
-${test11}[2] = 4
-${test12}[0] = 3
-${test12}[1] = 4
-${test12}[2] = 5
-${test20}[0] = 2
-${test20}[1] = 3
-${test20}[2] = 4
-${test21}[0] = 3
-${test21}[1] = 4
-${test21}[2] = 5
-${test22}[0] = 4
-${test22}[1] = 5
-${test22}[2] = 6
-*********************
-
-*** hash test... ***
-commented out...
-**************************
-
-*** Hash resizing test ***
-ba
-baa
-baaa
-baaaa
-baaaaa
-baaaaaa
-baaaaaaa
-baaaaaaaa
-baaaaaaaaa
-baaaaaaaaaa
-ba
-10
-baa
-9
-baaa
-8
-baaaa
-7
-baaaaa
-6
-baaaaaa
-5
-baaaaaaa
-4
-baaaaaaaa
-3
-baaaaaaaaa
-2
-baaaaaaaaaa
-1
-**************************
-
-
-*** break/continue test ***
-$i should go from 0 to 2
-$j should go from 3 to 4, and $q should go from 3 to 4
- $j=3
- $q=3
- $q=4
- $j=4
- $q=3
- $q=4
-$j should go from 0 to 2
- $j=0
- $j=1
- $j=2
-$k should go from 0 to 2
- $k=0
- $k=1
- $k=2
-$i=0
-$j should go from 3 to 4, and $q should go from 3 to 4
- $j=3
- $q=3
- $q=4
- $j=4
- $q=3
- $q=4
-$j should go from 0 to 2
- $j=0
- $j=1
- $j=2
-$k should go from 0 to 2
- $k=0
- $k=1
- $k=2
-$i=1
-$j should go from 3 to 4, and $q should go from 3 to 4
- $j=3
- $q=3
- $q=4
- $j=4
- $q=3
- $q=4
-$j should go from 0 to 2
- $j=0
- $j=1
- $j=2
-$k should go from 0 to 2
- $k=0
- $k=1
- $k=2
-$i=2
-***********************
-
-*** Nested file include test ***
-<html>
-This is Finish.phtml. This file is supposed to be included
-from regression_test.phtml. This is normal HTML.
-and this is PHP code, 2+2=4
-</html>
-********************************
-
-Tests completed.
-<html>
-<head>
-*** Testing assignments and variable aliasing: ***
-This should read "blah": blah
-This should read "this is nifty": this is nifty
-*************************************************
-
-*** Testing integer operators ***
-Correct result - 8: 8
-Correct result - 8: 8
-Correct result - 2: 2
-Correct result - -2: -2
-Correct result - 15: 15
-Correct result - 15: 15
-Correct result - 2: 2
-Correct result - 3: 3
-*********************************
-
-*** Testing real operators ***
-Correct result - 8: 8
-Correct result - 8: 8
-Correct result - 2: 2
-Correct result - -2: -2
-Correct result - 15: 15
-Correct result - 15: 15
-Correct result - 2: 2
-Correct result - 3: 3
-*********************************
-
-*** Testing if/elseif/else control ***
-
-This works
-this_still_works
-should_print
-
-
-*** Seriously nested if's test ***
-** spelling correction by kluzz **
-Only two lines of text should follow:
-this should be displayed. should be: $i=1, $j=0. is: $i=1, $j=0
-this is supposed to be displayed. should be: $i=2, $j=4. is: $i=2, $j=4
-3 loop iterations should follow:
-2 4
-3 4
-4 4
-**********************************
-
-*** C-style else-if's ***
-This should be displayed
-*************************
-
-*** WHILE tests ***
-0 is smaller than 20
-1 is smaller than 20
-2 is smaller than 20
-3 is smaller than 20
-4 is smaller than 20
-5 is smaller than 20
-6 is smaller than 20
-7 is smaller than 20
-8 is smaller than 20
-9 is smaller than 20
-10 is smaller than 20
-11 is smaller than 20
-12 is smaller than 20
-13 is smaller than 20
-14 is smaller than 20
-15 is smaller than 20
-16 is smaller than 20
-17 is smaller than 20
-18 is smaller than 20
-19 is smaller than 20
-20 equals 20
-21 is greater than 20
-22 is greater than 20
-23 is greater than 20
-24 is greater than 20
-25 is greater than 20
-26 is greater than 20
-27 is greater than 20
-28 is greater than 20
-29 is greater than 20
-30 is greater than 20
-31 is greater than 20
-32 is greater than 20
-33 is greater than 20
-34 is greater than 20
-35 is greater than 20
-36 is greater than 20
-37 is greater than 20
-38 is greater than 20
-39 is greater than 20
-*******************
-
-
-*** Nested WHILEs ***
-Each array variable should be equal to the sum of its indices:
-${test00}[0] = 0
-${test00}[1] = 1
-${test00}[2] = 2
-${test01}[0] = 1
-${test01}[1] = 2
-${test01}[2] = 3
-${test02}[0] = 2
-${test02}[1] = 3
-${test02}[2] = 4
-${test10}[0] = 1
-${test10}[1] = 2
-${test10}[2] = 3
-${test11}[0] = 2
-${test11}[1] = 3
-${test11}[2] = 4
-${test12}[0] = 3
-${test12}[1] = 4
-${test12}[2] = 5
-${test20}[0] = 2
-${test20}[1] = 3
-${test20}[2] = 4
-${test21}[0] = 3
-${test21}[1] = 4
-${test21}[2] = 5
-${test22}[0] = 4
-${test22}[1] = 5
-${test22}[2] = 6
-*********************
-
-*** hash test... ***
-commented out...
-**************************
-
-*** Hash resizing test ***
-ba
-baa
-baaa
-baaaa
-baaaaa
-baaaaaa
-baaaaaaa
-baaaaaaaa
-baaaaaaaaa
-baaaaaaaaaa
-ba
-10
-baa
-9
-baaa
-8
-baaaa
-7
-baaaaa
-6
-baaaaaa
-5
-baaaaaaa
-4
-baaaaaaaa
-3
-baaaaaaaaa
-2
-baaaaaaaaaa
-1
-**************************
-
-
-*** break/continue test ***
-$i should go from 0 to 2
-$j should go from 3 to 4, and $q should go from 3 to 4
- $j=3
- $q=3
- $q=4
- $j=4
- $q=3
- $q=4
-$j should go from 0 to 2
- $j=0
- $j=1
- $j=2
-$k should go from 0 to 2
- $k=0
- $k=1
- $k=2
-$i=0
-$j should go from 3 to 4, and $q should go from 3 to 4
- $j=3
- $q=3
- $q=4
- $j=4
- $q=3
- $q=4
-$j should go from 0 to 2
- $j=0
- $j=1
- $j=2
-$k should go from 0 to 2
- $k=0
- $k=1
- $k=2
-$i=1
-$j should go from 3 to 4, and $q should go from 3 to 4
- $j=3
- $q=3
- $q=4
- $j=4
- $q=3
- $q=4
-$j should go from 0 to 2
- $j=0
- $j=1
- $j=2
-$k should go from 0 to 2
- $k=0
- $k=1
- $k=2
-$i=2
-***********************
-
-*** Nested file include test ***
-<html>
-This is Finish.phtml. This file is supposed to be included
-from regression_test.phtml. This is normal HTML.
-and this is PHP code, 2+2=4
-</html>
-********************************
-
-Tests completed.
-<html>
-<head>
-*** Testing assignments and variable aliasing: ***
-This should read "blah": blah
-This should read "this is nifty": this is nifty
-*************************************************
-
-*** Testing integer operators ***
-Correct result - 8: 8
-Correct result - 8: 8
-Correct result - 2: 2
-Correct result - -2: -2
-Correct result - 15: 15
-Correct result - 15: 15
-Correct result - 2: 2
-Correct result - 3: 3
-*********************************
-
-*** Testing real operators ***
-Correct result - 8: 8
-Correct result - 8: 8
-Correct result - 2: 2
-Correct result - -2: -2
-Correct result - 15: 15
-Correct result - 15: 15
-Correct result - 2: 2
-Correct result - 3: 3
-*********************************
-
-*** Testing if/elseif/else control ***
-
-This works
-this_still_works
-should_print
-
-
-*** Seriously nested if's test ***
-** spelling correction by kluzz **
-Only two lines of text should follow:
-this should be displayed. should be: $i=1, $j=0. is: $i=1, $j=0
-this is supposed to be displayed. should be: $i=2, $j=4. is: $i=2, $j=4
-3 loop iterations should follow:
-2 4
-3 4
-4 4
-**********************************
-
-*** C-style else-if's ***
-This should be displayed
-*************************
-
-*** WHILE tests ***
-0 is smaller than 20
-1 is smaller than 20
-2 is smaller than 20
-3 is smaller than 20
-4 is smaller than 20
-5 is smaller than 20
-6 is smaller than 20
-7 is smaller than 20
-8 is smaller than 20
-9 is smaller than 20
-10 is smaller than 20
-11 is smaller than 20
-12 is smaller than 20
-13 is smaller than 20
-14 is smaller than 20
-15 is smaller than 20
-16 is smaller than 20
-17 is smaller than 20
-18 is smaller than 20
-19 is smaller than 20
-20 equals 20
-21 is greater than 20
-22 is greater than 20
-23 is greater than 20
-24 is greater than 20
-25 is greater than 20
-26 is greater than 20
-27 is greater than 20
-28 is greater than 20
-29 is greater than 20
-30 is greater than 20
-31 is greater than 20
-32 is greater than 20
-33 is greater than 20
-34 is greater than 20
-35 is greater than 20
-36 is greater than 20
-37 is greater than 20
-38 is greater than 20
-39 is greater than 20
-*******************
-
-
-*** Nested WHILEs ***
-Each array variable should be equal to the sum of its indices:
-${test00}[0] = 0
-${test00}[1] = 1
-${test00}[2] = 2
-${test01}[0] = 1
-${test01}[1] = 2
-${test01}[2] = 3
-${test02}[0] = 2
-${test02}[1] = 3
-${test02}[2] = 4
-${test10}[0] = 1
-${test10}[1] = 2
-${test10}[2] = 3
-${test11}[0] = 2
-${test11}[1] = 3
-${test11}[2] = 4
-${test12}[0] = 3
-${test12}[1] = 4
-${test12}[2] = 5
-${test20}[0] = 2
-${test20}[1] = 3
-${test20}[2] = 4
-${test21}[0] = 3
-${test21}[1] = 4
-${test21}[2] = 5
-${test22}[0] = 4
-${test22}[1] = 5
-${test22}[2] = 6
-*********************
-
-*** hash test... ***
-commented out...
-**************************
-
-*** Hash resizing test ***
-ba
-baa
-baaa
-baaaa
-baaaaa
-baaaaaa
-baaaaaaa
-baaaaaaaa
-baaaaaaaaa
-baaaaaaaaaa
-ba
-10
-baa
-9
-baaa
-8
-baaaa
-7
-baaaaa
-6
-baaaaaa
-5
-baaaaaaa
-4
-baaaaaaaa
-3
-baaaaaaaaa
-2
-baaaaaaaaaa
-1
-**************************
-
-
-*** break/continue test ***
-$i should go from 0 to 2
-$j should go from 3 to 4, and $q should go from 3 to 4
- $j=3
- $q=3
- $q=4
- $j=4
- $q=3
- $q=4
-$j should go from 0 to 2
- $j=0
- $j=1
- $j=2
-$k should go from 0 to 2
- $k=0
- $k=1
- $k=2
-$i=0
-$j should go from 3 to 4, and $q should go from 3 to 4
- $j=3
- $q=3
- $q=4
- $j=4
- $q=3
- $q=4
-$j should go from 0 to 2
- $j=0
- $j=1
- $j=2
-$k should go from 0 to 2
- $k=0
- $k=1
- $k=2
-$i=1
-$j should go from 3 to 4, and $q should go from 3 to 4
- $j=3
- $q=3
- $q=4
- $j=4
- $q=3
- $q=4
-$j should go from 0 to 2
- $j=0
- $j=1
- $j=2
-$k should go from 0 to 2
- $k=0
- $k=1
- $k=2
-$i=2
-***********************
-
-*** Nested file include test ***
-<html>
-This is Finish.phtml. This file is supposed to be included
-from regression_test.phtml. This is normal HTML.
-and this is PHP code, 2+2=4
-</html>
-********************************
-
-Tests completed.
-<html>
-<head>
-*** Testing assignments and variable aliasing: ***
-This should read "blah": blah
-This should read "this is nifty": this is nifty
-*************************************************
-
-*** Testing integer operators ***
-Correct result - 8: 8
-Correct result - 8: 8
-Correct result - 2: 2
-Correct result - -2: -2
-Correct result - 15: 15
-Correct result - 15: 15
-Correct result - 2: 2
-Correct result - 3: 3
-*********************************
-
-*** Testing real operators ***
-Correct result - 8: 8
-Correct result - 8: 8
-Correct result - 2: 2
-Correct result - -2: -2
-Correct result - 15: 15
-Correct result - 15: 15
-Correct result - 2: 2
-Correct result - 3: 3
-*********************************
-
-*** Testing if/elseif/else control ***
-
-This works
-this_still_works
-should_print
-
-
-*** Seriously nested if's test ***
-** spelling correction by kluzz **
-Only two lines of text should follow:
-this should be displayed. should be: $i=1, $j=0. is: $i=1, $j=0
-this is supposed to be displayed. should be: $i=2, $j=4. is: $i=2, $j=4
-3 loop iterations should follow:
-2 4
-3 4
-4 4
-**********************************
-
-*** C-style else-if's ***
-This should be displayed
-*************************
-
-*** WHILE tests ***
-0 is smaller than 20
-1 is smaller than 20
-2 is smaller than 20
-3 is smaller than 20
-4 is smaller than 20
-5 is smaller than 20
-6 is smaller than 20
-7 is smaller than 20
-8 is smaller than 20
-9 is smaller than 20
-10 is smaller than 20
-11 is smaller than 20
-12 is smaller than 20
-13 is smaller than 20
-14 is smaller than 20
-15 is smaller than 20
-16 is smaller than 20
-17 is smaller than 20
-18 is smaller than 20
-19 is smaller than 20
-20 equals 20
-21 is greater than 20
-22 is greater than 20
-23 is greater than 20
-24 is greater than 20
-25 is greater than 20
-26 is greater than 20
-27 is greater than 20
-28 is greater than 20
-29 is greater than 20
-30 is greater than 20
-31 is greater than 20
-32 is greater than 20
-33 is greater than 20
-34 is greater than 20
-35 is greater than 20
-36 is greater than 20
-37 is greater than 20
-38 is greater than 20
-39 is greater than 20
-*******************
-
-
-*** Nested WHILEs ***
-Each array variable should be equal to the sum of its indices:
-${test00}[0] = 0
-${test00}[1] = 1
-${test00}[2] = 2
-${test01}[0] = 1
-${test01}[1] = 2
-${test01}[2] = 3
-${test02}[0] = 2
-${test02}[1] = 3
-${test02}[2] = 4
-${test10}[0] = 1
-${test10}[1] = 2
-${test10}[2] = 3
-${test11}[0] = 2
-${test11}[1] = 3
-${test11}[2] = 4
-${test12}[0] = 3
-${test12}[1] = 4
-${test12}[2] = 5
-${test20}[0] = 2
-${test20}[1] = 3
-${test20}[2] = 4
-${test21}[0] = 3
-${test21}[1] = 4
-${test21}[2] = 5
-${test22}[0] = 4
-${test22}[1] = 5
-${test22}[2] = 6
-*********************
-
-*** hash test... ***
-commented out...
-**************************
-
-*** Hash resizing test ***
-ba
-baa
-baaa
-baaaa
-baaaaa
-baaaaaa
-baaaaaaa
-baaaaaaaa
-baaaaaaaaa
-baaaaaaaaaa
-ba
-10
-baa
-9
-baaa
-8
-baaaa
-7
-baaaaa
-6
-baaaaaa
-5
-baaaaaaa
-4
-baaaaaaaa
-3
-baaaaaaaaa
-2
-baaaaaaaaaa
-1
-**************************
-
-
-*** break/continue test ***
-$i should go from 0 to 2
-$j should go from 3 to 4, and $q should go from 3 to 4
- $j=3
- $q=3
- $q=4
- $j=4
- $q=3
- $q=4
-$j should go from 0 to 2
- $j=0
- $j=1
- $j=2
-$k should go from 0 to 2
- $k=0
- $k=1
- $k=2
-$i=0
-$j should go from 3 to 4, and $q should go from 3 to 4
- $j=3
- $q=3
- $q=4
- $j=4
- $q=3
- $q=4
-$j should go from 0 to 2
- $j=0
- $j=1
- $j=2
-$k should go from 0 to 2
- $k=0
- $k=1
- $k=2
-$i=1
-$j should go from 3 to 4, and $q should go from 3 to 4
- $j=3
- $q=3
- $q=4
- $j=4
- $q=3
- $q=4
-$j should go from 0 to 2
- $j=0
- $j=1
- $j=2
-$k should go from 0 to 2
- $k=0
- $k=1
- $k=2
-$i=2
-***********************
-
-*** Nested file include test ***
-<html>
-This is Finish.phtml. This file is supposed to be included
-from regression_test.phtml. This is normal HTML.
-and this is PHP code, 2+2=4
-</html>
-********************************
-
-Tests completed.
-<html>
-<head>
-*** Testing assignments and variable aliasing: ***
-This should read "blah": blah
-This should read "this is nifty": this is nifty
-*************************************************
-
-*** Testing integer operators ***
-Correct result - 8: 8
-Correct result - 8: 8
-Correct result - 2: 2
-Correct result - -2: -2
-Correct result - 15: 15
-Correct result - 15: 15
-Correct result - 2: 2
-Correct result - 3: 3
-*********************************
-
-*** Testing real operators ***
-Correct result - 8: 8
-Correct result - 8: 8
-Correct result - 2: 2
-Correct result - -2: -2
-Correct result - 15: 15
-Correct result - 15: 15
-Correct result - 2: 2
-Correct result - 3: 3
-*********************************
-
-*** Testing if/elseif/else control ***
-
-This works
-this_still_works
-should_print
-
-
-*** Seriously nested if's test ***
-** spelling correction by kluzz **
-Only two lines of text should follow:
-this should be displayed. should be: $i=1, $j=0. is: $i=1, $j=0
-this is supposed to be displayed. should be: $i=2, $j=4. is: $i=2, $j=4
-3 loop iterations should follow:
-2 4
-3 4
-4 4
-**********************************
-
-*** C-style else-if's ***
-This should be displayed
-*************************
-
-*** WHILE tests ***
-0 is smaller than 20
-1 is smaller than 20
-2 is smaller than 20
-3 is smaller than 20
-4 is smaller than 20
-5 is smaller than 20
-6 is smaller than 20
-7 is smaller than 20
-8 is smaller than 20
-9 is smaller than 20
-10 is smaller than 20
-11 is smaller than 20
-12 is smaller than 20
-13 is smaller than 20
-14 is smaller than 20
-15 is smaller than 20
-16 is smaller than 20
-17 is smaller than 20
-18 is smaller than 20
-19 is smaller than 20
-20 equals 20
-21 is greater than 20
-22 is greater than 20
-23 is greater than 20
-24 is greater than 20
-25 is greater than 20
-26 is greater than 20
-27 is greater than 20
-28 is greater than 20
-29 is greater than 20
-30 is greater than 20
-31 is greater than 20
-32 is greater than 20
-33 is greater than 20
-34 is greater than 20
-35 is greater than 20
-36 is greater than 20
-37 is greater than 20
-38 is greater than 20
-39 is greater than 20
-*******************
-
-
-*** Nested WHILEs ***
-Each array variable should be equal to the sum of its indices:
-${test00}[0] = 0
-${test00}[1] = 1
-${test00}[2] = 2
-${test01}[0] = 1
-${test01}[1] = 2
-${test01}[2] = 3
-${test02}[0] = 2
-${test02}[1] = 3
-${test02}[2] = 4
-${test10}[0] = 1
-${test10}[1] = 2
-${test10}[2] = 3
-${test11}[0] = 2
-${test11}[1] = 3
-${test11}[2] = 4
-${test12}[0] = 3
-${test12}[1] = 4
-${test12}[2] = 5
-${test20}[0] = 2
-${test20}[1] = 3
-${test20}[2] = 4
-${test21}[0] = 3
-${test21}[1] = 4
-${test21}[2] = 5
-${test22}[0] = 4
-${test22}[1] = 5
-${test22}[2] = 6
-*********************
-
-*** hash test... ***
-commented out...
-**************************
-
-*** Hash resizing test ***
-ba
-baa
-baaa
-baaaa
-baaaaa
-baaaaaa
-baaaaaaa
-baaaaaaaa
-baaaaaaaaa
-baaaaaaaaaa
-ba
-10
-baa
-9
-baaa
-8
-baaaa
-7
-baaaaa
-6
-baaaaaa
-5
-baaaaaaa
-4
-baaaaaaaa
-3
-baaaaaaaaa
-2
-baaaaaaaaaa
-1
-**************************
-
-
-*** break/continue test ***
-$i should go from 0 to 2
-$j should go from 3 to 4, and $q should go from 3 to 4
- $j=3
- $q=3
- $q=4
- $j=4
- $q=3
- $q=4
-$j should go from 0 to 2
- $j=0
- $j=1
- $j=2
-$k should go from 0 to 2
- $k=0
- $k=1
- $k=2
-$i=0
-$j should go from 3 to 4, and $q should go from 3 to 4
- $j=3
- $q=3
- $q=4
- $j=4
- $q=3
- $q=4
-$j should go from 0 to 2
- $j=0
- $j=1
- $j=2
-$k should go from 0 to 2
- $k=0
- $k=1
- $k=2
-$i=1
-$j should go from 3 to 4, and $q should go from 3 to 4
- $j=3
- $q=3
- $q=4
- $j=4
- $q=3
- $q=4
-$j should go from 0 to 2
- $j=0
- $j=1
- $j=2
-$k should go from 0 to 2
- $k=0
- $k=1
- $k=2
-$i=2
-***********************
-
-*** Nested file include test ***
-<html>
-This is Finish.phtml. This file is supposed to be included
-from regression_test.phtml. This is normal HTML.
-and this is PHP code, 2+2=4
-</html>
-********************************
-
-Tests completed.
-<html>
-<head>
-*** Testing assignments and variable aliasing: ***
-This should read "blah": blah
-This should read "this is nifty": this is nifty
-*************************************************
-
-*** Testing integer operators ***
-Correct result - 8: 8
-Correct result - 8: 8
-Correct result - 2: 2
-Correct result - -2: -2
-Correct result - 15: 15
-Correct result - 15: 15
-Correct result - 2: 2
-Correct result - 3: 3
-*********************************
-
-*** Testing real operators ***
-Correct result - 8: 8
-Correct result - 8: 8
-Correct result - 2: 2
-Correct result - -2: -2
-Correct result - 15: 15
-Correct result - 15: 15
-Correct result - 2: 2
-Correct result - 3: 3
-*********************************
-
-*** Testing if/elseif/else control ***
-
-This works
-this_still_works
-should_print
-
-
-*** Seriously nested if's test ***
-** spelling correction by kluzz **
-Only two lines of text should follow:
-this should be displayed. should be: $i=1, $j=0. is: $i=1, $j=0
-this is supposed to be displayed. should be: $i=2, $j=4. is: $i=2, $j=4
-3 loop iterations should follow:
-2 4
-3 4
-4 4
-**********************************
-
-*** C-style else-if's ***
-This should be displayed
-*************************
-
-*** WHILE tests ***
-0 is smaller than 20
-1 is smaller than 20
-2 is smaller than 20
-3 is smaller than 20
-4 is smaller than 20
-5 is smaller than 20
-6 is smaller than 20
-7 is smaller than 20
-8 is smaller than 20
-9 is smaller than 20
-10 is smaller than 20
-11 is smaller than 20
-12 is smaller than 20
-13 is smaller than 20
-14 is smaller than 20
-15 is smaller than 20
-16 is smaller than 20
-17 is smaller than 20
-18 is smaller than 20
-19 is smaller than 20
-20 equals 20
-21 is greater than 20
-22 is greater than 20
-23 is greater than 20
-24 is greater than 20
-25 is greater than 20
-26 is greater than 20
-27 is greater than 20
-28 is greater than 20
-29 is greater than 20
-30 is greater than 20
-31 is greater than 20
-32 is greater than 20
-33 is greater than 20
-34 is greater than 20
-35 is greater than 20
-36 is greater than 20
-37 is greater than 20
-38 is greater than 20
-39 is greater than 20
-*******************
-
-
-*** Nested WHILEs ***
-Each array variable should be equal to the sum of its indices:
-${test00}[0] = 0
-${test00}[1] = 1
-${test00}[2] = 2
-${test01}[0] = 1
-${test01}[1] = 2
-${test01}[2] = 3
-${test02}[0] = 2
-${test02}[1] = 3
-${test02}[2] = 4
-${test10}[0] = 1
-${test10}[1] = 2
-${test10}[2] = 3
-${test11}[0] = 2
-${test11}[1] = 3
-${test11}[2] = 4
-${test12}[0] = 3
-${test12}[1] = 4
-${test12}[2] = 5
-${test20}[0] = 2
-${test20}[1] = 3
-${test20}[2] = 4
-${test21}[0] = 3
-${test21}[1] = 4
-${test21}[2] = 5
-${test22}[0] = 4
-${test22}[1] = 5
-${test22}[2] = 6
-*********************
-
-*** hash test... ***
-commented out...
-**************************
-
-*** Hash resizing test ***
-ba
-baa
-baaa
-baaaa
-baaaaa
-baaaaaa
-baaaaaaa
-baaaaaaaa
-baaaaaaaaa
-baaaaaaaaaa
-ba
-10
-baa
-9
-baaa
-8
-baaaa
-7
-baaaaa
-6
-baaaaaa
-5
-baaaaaaa
-4
-baaaaaaaa
-3
-baaaaaaaaa
-2
-baaaaaaaaaa
-1
-**************************
-
-
-*** break/continue test ***
-$i should go from 0 to 2
-$j should go from 3 to 4, and $q should go from 3 to 4
- $j=3
- $q=3
- $q=4
- $j=4
- $q=3
- $q=4
-$j should go from 0 to 2
- $j=0
- $j=1
- $j=2
-$k should go from 0 to 2
- $k=0
- $k=1
- $k=2
-$i=0
-$j should go from 3 to 4, and $q should go from 3 to 4
- $j=3
- $q=3
- $q=4
- $j=4
- $q=3
- $q=4
-$j should go from 0 to 2
- $j=0
- $j=1
- $j=2
-$k should go from 0 to 2
- $k=0
- $k=1
- $k=2
-$i=1
-$j should go from 3 to 4, and $q should go from 3 to 4
- $j=3
- $q=3
- $q=4
- $j=4
- $q=3
- $q=4
-$j should go from 0 to 2
- $j=0
- $j=1
- $j=2
-$k should go from 0 to 2
- $k=0
- $k=1
- $k=2
-$i=2
-***********************
-
-*** Nested file include test ***
-<html>
-This is Finish.phtml. This file is supposed to be included
-from regression_test.phtml. This is normal HTML.
-and this is PHP code, 2+2=4
-</html>
-********************************
-
-Tests completed.
-<html>
-<head>
-*** Testing assignments and variable aliasing: ***
-This should read "blah": blah
-This should read "this is nifty": this is nifty
-*************************************************
-
-*** Testing integer operators ***
-Correct result - 8: 8
-Correct result - 8: 8
-Correct result - 2: 2
-Correct result - -2: -2
-Correct result - 15: 15
-Correct result - 15: 15
-Correct result - 2: 2
-Correct result - 3: 3
-*********************************
-
-*** Testing real operators ***
-Correct result - 8: 8
-Correct result - 8: 8
-Correct result - 2: 2
-Correct result - -2: -2
-Correct result - 15: 15
-Correct result - 15: 15
-Correct result - 2: 2
-Correct result - 3: 3
-*********************************
-
-*** Testing if/elseif/else control ***
-
-This works
-this_still_works
-should_print
-
-
-*** Seriously nested if's test ***
-** spelling correction by kluzz **
-Only two lines of text should follow:
-this should be displayed. should be: $i=1, $j=0. is: $i=1, $j=0
-this is supposed to be displayed. should be: $i=2, $j=4. is: $i=2, $j=4
-3 loop iterations should follow:
-2 4
-3 4
-4 4
-**********************************
-
-*** C-style else-if's ***
-This should be displayed
-*************************
-
-*** WHILE tests ***
-0 is smaller than 20
-1 is smaller than 20
-2 is smaller than 20
-3 is smaller than 20
-4 is smaller than 20
-5 is smaller than 20
-6 is smaller than 20
-7 is smaller than 20
-8 is smaller than 20
-9 is smaller than 20
-10 is smaller than 20
-11 is smaller than 20
-12 is smaller than 20
-13 is smaller than 20
-14 is smaller than 20
-15 is smaller than 20
-16 is smaller than 20
-17 is smaller than 20
-18 is smaller than 20
-19 is smaller than 20
-20 equals 20
-21 is greater than 20
-22 is greater than 20
-23 is greater than 20
-24 is greater than 20
-25 is greater than 20
-26 is greater than 20
-27 is greater than 20
-28 is greater than 20
-29 is greater than 20
-30 is greater than 20
-31 is greater than 20
-32 is greater than 20
-33 is greater than 20
-34 is greater than 20
-35 is greater than 20
-36 is greater than 20
-37 is greater than 20
-38 is greater than 20
-39 is greater than 20
-*******************
-
-
-*** Nested WHILEs ***
-Each array variable should be equal to the sum of its indices:
-${test00}[0] = 0
-${test00}[1] = 1
-${test00}[2] = 2
-${test01}[0] = 1
-${test01}[1] = 2
-${test01}[2] = 3
-${test02}[0] = 2
-${test02}[1] = 3
-${test02}[2] = 4
-${test10}[0] = 1
-${test10}[1] = 2
-${test10}[2] = 3
-${test11}[0] = 2
-${test11}[1] = 3
-${test11}[2] = 4
-${test12}[0] = 3
-${test12}[1] = 4
-${test12}[2] = 5
-${test20}[0] = 2
-${test20}[1] = 3
-${test20}[2] = 4
-${test21}[0] = 3
-${test21}[1] = 4
-${test21}[2] = 5
-${test22}[0] = 4
-${test22}[1] = 5
-${test22}[2] = 6
-*********************
-
-*** hash test... ***
-commented out...
-**************************
-
-*** Hash resizing test ***
-ba
-baa
-baaa
-baaaa
-baaaaa
-baaaaaa
-baaaaaaa
-baaaaaaaa
-baaaaaaaaa
-baaaaaaaaaa
-ba
-10
-baa
-9
-baaa
-8
-baaaa
-7
-baaaaa
-6
-baaaaaa
-5
-baaaaaaa
-4
-baaaaaaaa
-3
-baaaaaaaaa
-2
-baaaaaaaaaa
-1
-**************************
-
-
-*** break/continue test ***
-$i should go from 0 to 2
-$j should go from 3 to 4, and $q should go from 3 to 4
- $j=3
- $q=3
- $q=4
- $j=4
- $q=3
- $q=4
-$j should go from 0 to 2
- $j=0
- $j=1
- $j=2
-$k should go from 0 to 2
- $k=0
- $k=1
- $k=2
-$i=0
-$j should go from 3 to 4, and $q should go from 3 to 4
- $j=3
- $q=3
- $q=4
- $j=4
- $q=3
- $q=4
-$j should go from 0 to 2
- $j=0
- $j=1
- $j=2
-$k should go from 0 to 2
- $k=0
- $k=1
- $k=2
-$i=1
-$j should go from 3 to 4, and $q should go from 3 to 4
- $j=3
- $q=3
- $q=4
- $j=4
- $q=3
- $q=4
-$j should go from 0 to 2
- $j=0
- $j=1
- $j=2
-$k should go from 0 to 2
- $k=0
- $k=1
- $k=2
-$i=2
-***********************
-
-*** Nested file include test ***
-<html>
-This is Finish.phtml. This file is supposed to be included
-from regression_test.phtml. This is normal HTML.
-and this is PHP code, 2+2=4
-</html>
-********************************
-
-Tests completed.
-<html>
-<head>
-*** Testing assignments and variable aliasing: ***
-This should read "blah": blah
-This should read "this is nifty": this is nifty
-*************************************************
-
-*** Testing integer operators ***
-Correct result - 8: 8
-Correct result - 8: 8
-Correct result - 2: 2
-Correct result - -2: -2
-Correct result - 15: 15
-Correct result - 15: 15
-Correct result - 2: 2
-Correct result - 3: 3
-*********************************
-
-*** Testing real operators ***
-Correct result - 8: 8
-Correct result - 8: 8
-Correct result - 2: 2
-Correct result - -2: -2
-Correct result - 15: 15
-Correct result - 15: 15
-Correct result - 2: 2
-Correct result - 3: 3
-*********************************
-
-*** Testing if/elseif/else control ***
-
-This works
-this_still_works
-should_print
-
-
-*** Seriously nested if's test ***
-** spelling correction by kluzz **
-Only two lines of text should follow:
-this should be displayed. should be: $i=1, $j=0. is: $i=1, $j=0
-this is supposed to be displayed. should be: $i=2, $j=4. is: $i=2, $j=4
-3 loop iterations should follow:
-2 4
-3 4
-4 4
-**********************************
-
-*** C-style else-if's ***
-This should be displayed
-*************************
-
-*** WHILE tests ***
-0 is smaller than 20
-1 is smaller than 20
-2 is smaller than 20
-3 is smaller than 20
-4 is smaller than 20
-5 is smaller than 20
-6 is smaller than 20
-7 is smaller than 20
-8 is smaller than 20
-9 is smaller than 20
-10 is smaller than 20
-11 is smaller than 20
-12 is smaller than 20
-13 is smaller than 20
-14 is smaller than 20
-15 is smaller than 20
-16 is smaller than 20
-17 is smaller than 20
-18 is smaller than 20
-19 is smaller than 20
-20 equals 20
-21 is greater than 20
-22 is greater than 20
-23 is greater than 20
-24 is greater than 20
-25 is greater than 20
-26 is greater than 20
-27 is greater than 20
-28 is greater than 20
-29 is greater than 20
-30 is greater than 20
-31 is greater than 20
-32 is greater than 20
-33 is greater than 20
-34 is greater than 20
-35 is greater than 20
-36 is greater than 20
-37 is greater than 20
-38 is greater than 20
-39 is greater than 20
-*******************
-
-
-*** Nested WHILEs ***
-Each array variable should be equal to the sum of its indices:
-${test00}[0] = 0
-${test00}[1] = 1
-${test00}[2] = 2
-${test01}[0] = 1
-${test01}[1] = 2
-${test01}[2] = 3
-${test02}[0] = 2
-${test02}[1] = 3
-${test02}[2] = 4
-${test10}[0] = 1
-${test10}[1] = 2
-${test10}[2] = 3
-${test11}[0] = 2
-${test11}[1] = 3
-${test11}[2] = 4
-${test12}[0] = 3
-${test12}[1] = 4
-${test12}[2] = 5
-${test20}[0] = 2
-${test20}[1] = 3
-${test20}[2] = 4
-${test21}[0] = 3
-${test21}[1] = 4
-${test21}[2] = 5
-${test22}[0] = 4
-${test22}[1] = 5
-${test22}[2] = 6
-*********************
-
-*** hash test... ***
-commented out...
-**************************
-
-*** Hash resizing test ***
-ba
-baa
-baaa
-baaaa
-baaaaa
-baaaaaa
-baaaaaaa
-baaaaaaaa
-baaaaaaaaa
-baaaaaaaaaa
-ba
-10
-baa
-9
-baaa
-8
-baaaa
-7
-baaaaa
-6
-baaaaaa
-5
-baaaaaaa
-4
-baaaaaaaa
-3
-baaaaaaaaa
-2
-baaaaaaaaaa
-1
-**************************
-
-
-*** break/continue test ***
-$i should go from 0 to 2
-$j should go from 3 to 4, and $q should go from 3 to 4
- $j=3
- $q=3
- $q=4
- $j=4
- $q=3
- $q=4
-$j should go from 0 to 2
- $j=0
- $j=1
- $j=2
-$k should go from 0 to 2
- $k=0
- $k=1
- $k=2
-$i=0
-$j should go from 3 to 4, and $q should go from 3 to 4
- $j=3
- $q=3
- $q=4
- $j=4
- $q=3
- $q=4
-$j should go from 0 to 2
- $j=0
- $j=1
- $j=2
-$k should go from 0 to 2
- $k=0
- $k=1
- $k=2
-$i=1
-$j should go from 3 to 4, and $q should go from 3 to 4
- $j=3
- $q=3
- $q=4
- $j=4
- $q=3
- $q=4
-$j should go from 0 to 2
- $j=0
- $j=1
- $j=2
-$k should go from 0 to 2
- $k=0
- $k=1
- $k=2
-$i=2
-***********************
-
-*** Nested file include test ***
-<html>
-This is Finish.phtml. This file is supposed to be included
-from regression_test.phtml. This is normal HTML.
-and this is PHP code, 2+2=4
-</html>
-********************************
-
-Tests completed.
-<html>
-<head>
-*** Testing assignments and variable aliasing: ***
-This should read "blah": blah
-This should read "this is nifty": this is nifty
-*************************************************
-
-*** Testing integer operators ***
-Correct result - 8: 8
-Correct result - 8: 8
-Correct result - 2: 2
-Correct result - -2: -2
-Correct result - 15: 15
-Correct result - 15: 15
-Correct result - 2: 2
-Correct result - 3: 3
-*********************************
-
-*** Testing real operators ***
-Correct result - 8: 8
-Correct result - 8: 8
-Correct result - 2: 2
-Correct result - -2: -2
-Correct result - 15: 15
-Correct result - 15: 15
-Correct result - 2: 2
-Correct result - 3: 3
-*********************************
-
-*** Testing if/elseif/else control ***
-
-This works
-this_still_works
-should_print
-
-
-*** Seriously nested if's test ***
-** spelling correction by kluzz **
-Only two lines of text should follow:
-this should be displayed. should be: $i=1, $j=0. is: $i=1, $j=0
-this is supposed to be displayed. should be: $i=2, $j=4. is: $i=2, $j=4
-3 loop iterations should follow:
-2 4
-3 4
-4 4
-**********************************
-
-*** C-style else-if's ***
-This should be displayed
-*************************
-
-*** WHILE tests ***
-0 is smaller than 20
-1 is smaller than 20
-2 is smaller than 20
-3 is smaller than 20
-4 is smaller than 20
-5 is smaller than 20
-6 is smaller than 20
-7 is smaller than 20
-8 is smaller than 20
-9 is smaller than 20
-10 is smaller than 20
-11 is smaller than 20
-12 is smaller than 20
-13 is smaller than 20
-14 is smaller than 20
-15 is smaller than 20
-16 is smaller than 20
-17 is smaller than 20
-18 is smaller than 20
-19 is smaller than 20
-20 equals 20
-21 is greater than 20
-22 is greater than 20
-23 is greater than 20
-24 is greater than 20
-25 is greater than 20
-26 is greater than 20
-27 is greater than 20
-28 is greater than 20
-29 is greater than 20
-30 is greater than 20
-31 is greater than 20
-32 is greater than 20
-33 is greater than 20
-34 is greater than 20
-35 is greater than 20
-36 is greater than 20
-37 is greater than 20
-38 is greater than 20
-39 is greater than 20
-*******************
-
-
-*** Nested WHILEs ***
-Each array variable should be equal to the sum of its indices:
-${test00}[0] = 0
-${test00}[1] = 1
-${test00}[2] = 2
-${test01}[0] = 1
-${test01}[1] = 2
-${test01}[2] = 3
-${test02}[0] = 2
-${test02}[1] = 3
-${test02}[2] = 4
-${test10}[0] = 1
-${test10}[1] = 2
-${test10}[2] = 3
-${test11}[0] = 2
-${test11}[1] = 3
-${test11}[2] = 4
-${test12}[0] = 3
-${test12}[1] = 4
-${test12}[2] = 5
-${test20}[0] = 2
-${test20}[1] = 3
-${test20}[2] = 4
-${test21}[0] = 3
-${test21}[1] = 4
-${test21}[2] = 5
-${test22}[0] = 4
-${test22}[1] = 5
-${test22}[2] = 6
-*********************
-
-*** hash test... ***
-commented out...
-**************************
-
-*** Hash resizing test ***
-ba
-baa
-baaa
-baaaa
-baaaaa
-baaaaaa
-baaaaaaa
-baaaaaaaa
-baaaaaaaaa
-baaaaaaaaaa
-ba
-10
-baa
-9
-baaa
-8
-baaaa
-7
-baaaaa
-6
-baaaaaa
-5
-baaaaaaa
-4
-baaaaaaaa
-3
-baaaaaaaaa
-2
-baaaaaaaaaa
-1
-**************************
-
-
-*** break/continue test ***
-$i should go from 0 to 2
-$j should go from 3 to 4, and $q should go from 3 to 4
- $j=3
- $q=3
- $q=4
- $j=4
- $q=3
- $q=4
-$j should go from 0 to 2
- $j=0
- $j=1
- $j=2
-$k should go from 0 to 2
- $k=0
- $k=1
- $k=2
-$i=0
-$j should go from 3 to 4, and $q should go from 3 to 4
- $j=3
- $q=3
- $q=4
- $j=4
- $q=3
- $q=4
-$j should go from 0 to 2
- $j=0
- $j=1
- $j=2
-$k should go from 0 to 2
- $k=0
- $k=1
- $k=2
-$i=1
-$j should go from 3 to 4, and $q should go from 3 to 4
- $j=3
- $q=3
- $q=4
- $j=4
- $q=3
- $q=4
-$j should go from 0 to 2
- $j=0
- $j=1
- $j=2
-$k should go from 0 to 2
- $k=0
- $k=1
- $k=2
-$i=2
-***********************
-
-*** Nested file include test ***
-<html>
-This is Finish.phtml. This file is supposed to be included
-from regression_test.phtml. This is normal HTML.
-and this is PHP code, 2+2=4
-</html>
-********************************
-
-Tests completed.
-<html>
-<head>
-*** Testing assignments and variable aliasing: ***
-This should read "blah": blah
-This should read "this is nifty": this is nifty
-*************************************************
-
-*** Testing integer operators ***
-Correct result - 8: 8
-Correct result - 8: 8
-Correct result - 2: 2
-Correct result - -2: -2
-Correct result - 15: 15
-Correct result - 15: 15
-Correct result - 2: 2
-Correct result - 3: 3
-*********************************
-
-*** Testing real operators ***
-Correct result - 8: 8
-Correct result - 8: 8
-Correct result - 2: 2
-Correct result - -2: -2
-Correct result - 15: 15
-Correct result - 15: 15
-Correct result - 2: 2
-Correct result - 3: 3
-*********************************
-
-*** Testing if/elseif/else control ***
-
-This works
-this_still_works
-should_print
-
-
-*** Seriously nested if's test ***
-** spelling correction by kluzz **
-Only two lines of text should follow:
-this should be displayed. should be: $i=1, $j=0. is: $i=1, $j=0
-this is supposed to be displayed. should be: $i=2, $j=4. is: $i=2, $j=4
-3 loop iterations should follow:
-2 4
-3 4
-4 4
-**********************************
-
-*** C-style else-if's ***
-This should be displayed
-*************************
-
-*** WHILE tests ***
-0 is smaller than 20
-1 is smaller than 20
-2 is smaller than 20
-3 is smaller than 20
-4 is smaller than 20
-5 is smaller than 20
-6 is smaller than 20
-7 is smaller than 20
-8 is smaller than 20
-9 is smaller than 20
-10 is smaller than 20
-11 is smaller than 20
-12 is smaller than 20
-13 is smaller than 20
-14 is smaller than 20
-15 is smaller than 20
-16 is smaller than 20
-17 is smaller than 20
-18 is smaller than 20
-19 is smaller than 20
-20 equals 20
-21 is greater than 20
-22 is greater than 20
-23 is greater than 20
-24 is greater than 20
-25 is greater than 20
-26 is greater than 20
-27 is greater than 20
-28 is greater than 20
-29 is greater than 20
-30 is greater than 20
-31 is greater than 20
-32 is greater than 20
-33 is greater than 20
-34 is greater than 20
-35 is greater than 20
-36 is greater than 20
-37 is greater than 20
-38 is greater than 20
-39 is greater than 20
-*******************
-
-
-*** Nested WHILEs ***
-Each array variable should be equal to the sum of its indices:
-${test00}[0] = 0
-${test00}[1] = 1
-${test00}[2] = 2
-${test01}[0] = 1
-${test01}[1] = 2
-${test01}[2] = 3
-${test02}[0] = 2
-${test02}[1] = 3
-${test02}[2] = 4
-${test10}[0] = 1
-${test10}[1] = 2
-${test10}[2] = 3
-${test11}[0] = 2
-${test11}[1] = 3
-${test11}[2] = 4
-${test12}[0] = 3
-${test12}[1] = 4
-${test12}[2] = 5
-${test20}[0] = 2
-${test20}[1] = 3
-${test20}[2] = 4
-${test21}[0] = 3
-${test21}[1] = 4
-${test21}[2] = 5
-${test22}[0] = 4
-${test22}[1] = 5
-${test22}[2] = 6
-*********************
-
-*** hash test... ***
-commented out...
-**************************
-
-*** Hash resizing test ***
-ba
-baa
-baaa
-baaaa
-baaaaa
-baaaaaa
-baaaaaaa
-baaaaaaaa
-baaaaaaaaa
-baaaaaaaaaa
-ba
-10
-baa
-9
-baaa
-8
-baaaa
-7
-baaaaa
-6
-baaaaaa
-5
-baaaaaaa
-4
-baaaaaaaa
-3
-baaaaaaaaa
-2
-baaaaaaaaaa
-1
-**************************
-
-
-*** break/continue test ***
-$i should go from 0 to 2
-$j should go from 3 to 4, and $q should go from 3 to 4
- $j=3
- $q=3
- $q=4
- $j=4
- $q=3
- $q=4
-$j should go from 0 to 2
- $j=0
- $j=1
- $j=2
-$k should go from 0 to 2
- $k=0
- $k=1
- $k=2
-$i=0
-$j should go from 3 to 4, and $q should go from 3 to 4
- $j=3
- $q=3
- $q=4
- $j=4
- $q=3
- $q=4
-$j should go from 0 to 2
- $j=0
- $j=1
- $j=2
-$k should go from 0 to 2
- $k=0
- $k=1
- $k=2
-$i=1
-$j should go from 3 to 4, and $q should go from 3 to 4
- $j=3
- $q=3
- $q=4
- $j=4
- $q=3
- $q=4
-$j should go from 0 to 2
- $j=0
- $j=1
- $j=2
-$k should go from 0 to 2
- $k=0
- $k=1
- $k=2
-$i=2
-***********************
-
-*** Nested file include test ***
-<html>
-This is Finish.phtml. This file is supposed to be included
-from regression_test.phtml. This is normal HTML.
-and this is PHP code, 2+2=4
-</html>
-********************************
-
-Tests completed.
-<html>
-<head>
-*** Testing assignments and variable aliasing: ***
-This should read "blah": blah
-This should read "this is nifty": this is nifty
-*************************************************
-
-*** Testing integer operators ***
-Correct result - 8: 8
-Correct result - 8: 8
-Correct result - 2: 2
-Correct result - -2: -2
-Correct result - 15: 15
-Correct result - 15: 15
-Correct result - 2: 2
-Correct result - 3: 3
-*********************************
-
-*** Testing real operators ***
-Correct result - 8: 8
-Correct result - 8: 8
-Correct result - 2: 2
-Correct result - -2: -2
-Correct result - 15: 15
-Correct result - 15: 15
-Correct result - 2: 2
-Correct result - 3: 3
-*********************************
-
-*** Testing if/elseif/else control ***
-
-This works
-this_still_works
-should_print
-
-
-*** Seriously nested if's test ***
-** spelling correction by kluzz **
-Only two lines of text should follow:
-this should be displayed. should be: $i=1, $j=0. is: $i=1, $j=0
-this is supposed to be displayed. should be: $i=2, $j=4. is: $i=2, $j=4
-3 loop iterations should follow:
-2 4
-3 4
-4 4
-**********************************
-
-*** C-style else-if's ***
-This should be displayed
-*************************
-
-*** WHILE tests ***
-0 is smaller than 20
-1 is smaller than 20
-2 is smaller than 20
-3 is smaller than 20
-4 is smaller than 20
-5 is smaller than 20
-6 is smaller than 20
-7 is smaller than 20
-8 is smaller than 20
-9 is smaller than 20
-10 is smaller than 20
-11 is smaller than 20
-12 is smaller than 20
-13 is smaller than 20
-14 is smaller than 20
-15 is smaller than 20
-16 is smaller than 20
-17 is smaller than 20
-18 is smaller than 20
-19 is smaller than 20
-20 equals 20
-21 is greater than 20
-22 is greater than 20
-23 is greater than 20
-24 is greater than 20
-25 is greater than 20
-26 is greater than 20
-27 is greater than 20
-28 is greater than 20
-29 is greater than 20
-30 is greater than 20
-31 is greater than 20
-32 is greater than 20
-33 is greater than 20
-34 is greater than 20
-35 is greater than 20
-36 is greater than 20
-37 is greater than 20
-38 is greater than 20
-39 is greater than 20
-*******************
-
-
-*** Nested WHILEs ***
-Each array variable should be equal to the sum of its indices:
-${test00}[0] = 0
-${test00}[1] = 1
-${test00}[2] = 2
-${test01}[0] = 1
-${test01}[1] = 2
-${test01}[2] = 3
-${test02}[0] = 2
-${test02}[1] = 3
-${test02}[2] = 4
-${test10}[0] = 1
-${test10}[1] = 2
-${test10}[2] = 3
-${test11}[0] = 2
-${test11}[1] = 3
-${test11}[2] = 4
-${test12}[0] = 3
-${test12}[1] = 4
-${test12}[2] = 5
-${test20}[0] = 2
-${test20}[1] = 3
-${test20}[2] = 4
-${test21}[0] = 3
-${test21}[1] = 4
-${test21}[2] = 5
-${test22}[0] = 4
-${test22}[1] = 5
-${test22}[2] = 6
-*********************
-
-*** hash test... ***
-commented out...
-**************************
-
-*** Hash resizing test ***
-ba
-baa
-baaa
-baaaa
-baaaaa
-baaaaaa
-baaaaaaa
-baaaaaaaa
-baaaaaaaaa
-baaaaaaaaaa
-ba
-10
-baa
-9
-baaa
-8
-baaaa
-7
-baaaaa
-6
-baaaaaa
-5
-baaaaaaa
-4
-baaaaaaaa
-3
-baaaaaaaaa
-2
-baaaaaaaaaa
-1
-**************************
-
-
-*** break/continue test ***
-$i should go from 0 to 2
-$j should go from 3 to 4, and $q should go from 3 to 4
- $j=3
- $q=3
- $q=4
- $j=4
- $q=3
- $q=4
-$j should go from 0 to 2
- $j=0
- $j=1
- $j=2
-$k should go from 0 to 2
- $k=0
- $k=1
- $k=2
-$i=0
-$j should go from 3 to 4, and $q should go from 3 to 4
- $j=3
- $q=3
- $q=4
- $j=4
- $q=3
- $q=4
-$j should go from 0 to 2
- $j=0
- $j=1
- $j=2
-$k should go from 0 to 2
- $k=0
- $k=1
- $k=2
-$i=1
-$j should go from 3 to 4, and $q should go from 3 to 4
- $j=3
- $q=3
- $q=4
- $j=4
- $q=3
- $q=4
-$j should go from 0 to 2
- $j=0
- $j=1
- $j=2
-$k should go from 0 to 2
- $k=0
- $k=1
- $k=2
-$i=2
-***********************
-
-*** Nested file include test ***
-<html>
-This is Finish.phtml. This file is supposed to be included
-from regression_test.phtml. This is normal HTML.
-and this is PHP code, 2+2=4
-</html>
-********************************
-
-Tests completed.
-<html>
-<head>
-*** Testing assignments and variable aliasing: ***
-This should read "blah": blah
-This should read "this is nifty": this is nifty
-*************************************************
-
-*** Testing integer operators ***
-Correct result - 8: 8
-Correct result - 8: 8
-Correct result - 2: 2
-Correct result - -2: -2
-Correct result - 15: 15
-Correct result - 15: 15
-Correct result - 2: 2
-Correct result - 3: 3
-*********************************
-
-*** Testing real operators ***
-Correct result - 8: 8
-Correct result - 8: 8
-Correct result - 2: 2
-Correct result - -2: -2
-Correct result - 15: 15
-Correct result - 15: 15
-Correct result - 2: 2
-Correct result - 3: 3
-*********************************
-
-*** Testing if/elseif/else control ***
-
-This works
-this_still_works
-should_print
-
-
-*** Seriously nested if's test ***
-** spelling correction by kluzz **
-Only two lines of text should follow:
-this should be displayed. should be: $i=1, $j=0. is: $i=1, $j=0
-this is supposed to be displayed. should be: $i=2, $j=4. is: $i=2, $j=4
-3 loop iterations should follow:
-2 4
-3 4
-4 4
-**********************************
-
-*** C-style else-if's ***
-This should be displayed
-*************************
-
-*** WHILE tests ***
-0 is smaller than 20
-1 is smaller than 20
-2 is smaller than 20
-3 is smaller than 20
-4 is smaller than 20
-5 is smaller than 20
-6 is smaller than 20
-7 is smaller than 20
-8 is smaller than 20
-9 is smaller than 20
-10 is smaller than 20
-11 is smaller than 20
-12 is smaller than 20
-13 is smaller than 20
-14 is smaller than 20
-15 is smaller than 20
-16 is smaller than 20
-17 is smaller than 20
-18 is smaller than 20
-19 is smaller than 20
-20 equals 20
-21 is greater than 20
-22 is greater than 20
-23 is greater than 20
-24 is greater than 20
-25 is greater than 20
-26 is greater than 20
-27 is greater than 20
-28 is greater than 20
-29 is greater than 20
-30 is greater than 20
-31 is greater than 20
-32 is greater than 20
-33 is greater than 20
-34 is greater than 20
-35 is greater than 20
-36 is greater than 20
-37 is greater than 20
-38 is greater than 20
-39 is greater than 20
-*******************
-
-
-*** Nested WHILEs ***
-Each array variable should be equal to the sum of its indices:
-${test00}[0] = 0
-${test00}[1] = 1
-${test00}[2] = 2
-${test01}[0] = 1
-${test01}[1] = 2
-${test01}[2] = 3
-${test02}[0] = 2
-${test02}[1] = 3
-${test02}[2] = 4
-${test10}[0] = 1
-${test10}[1] = 2
-${test10}[2] = 3
-${test11}[0] = 2
-${test11}[1] = 3
-${test11}[2] = 4
-${test12}[0] = 3
-${test12}[1] = 4
-${test12}[2] = 5
-${test20}[0] = 2
-${test20}[1] = 3
-${test20}[2] = 4
-${test21}[0] = 3
-${test21}[1] = 4
-${test21}[2] = 5
-${test22}[0] = 4
-${test22}[1] = 5
-${test22}[2] = 6
-*********************
-
-*** hash test... ***
-commented out...
-**************************
-
-*** Hash resizing test ***
-ba
-baa
-baaa
-baaaa
-baaaaa
-baaaaaa
-baaaaaaa
-baaaaaaaa
-baaaaaaaaa
-baaaaaaaaaa
-ba
-10
-baa
-9
-baaa
-8
-baaaa
-7
-baaaaa
-6
-baaaaaa
-5
-baaaaaaa
-4
-baaaaaaaa
-3
-baaaaaaaaa
-2
-baaaaaaaaaa
-1
-**************************
-
-
-*** break/continue test ***
-$i should go from 0 to 2
-$j should go from 3 to 4, and $q should go from 3 to 4
- $j=3
- $q=3
- $q=4
- $j=4
- $q=3
- $q=4
-$j should go from 0 to 2
- $j=0
- $j=1
- $j=2
-$k should go from 0 to 2
- $k=0
- $k=1
- $k=2
-$i=0
-$j should go from 3 to 4, and $q should go from 3 to 4
- $j=3
- $q=3
- $q=4
- $j=4
- $q=3
- $q=4
-$j should go from 0 to 2
- $j=0
- $j=1
- $j=2
-$k should go from 0 to 2
- $k=0
- $k=1
- $k=2
-$i=1
-$j should go from 3 to 4, and $q should go from 3 to 4
- $j=3
- $q=3
- $q=4
- $j=4
- $q=3
- $q=4
-$j should go from 0 to 2
- $j=0
- $j=1
- $j=2
-$k should go from 0 to 2
- $k=0
- $k=1
- $k=2
-$i=2
-***********************
-
-*** Nested file include test ***
-<html>
-This is Finish.phtml. This file is supposed to be included
-from regression_test.phtml. This is normal HTML.
-and this is PHP code, 2+2=4
-</html>
-********************************
-
-Tests completed.
-<html>
-<head>
-*** Testing assignments and variable aliasing: ***
-This should read "blah": blah
-This should read "this is nifty": this is nifty
-*************************************************
-
-*** Testing integer operators ***
-Correct result - 8: 8
-Correct result - 8: 8
-Correct result - 2: 2
-Correct result - -2: -2
-Correct result - 15: 15
-Correct result - 15: 15
-Correct result - 2: 2
-Correct result - 3: 3
-*********************************
-
-*** Testing real operators ***
-Correct result - 8: 8
-Correct result - 8: 8
-Correct result - 2: 2
-Correct result - -2: -2
-Correct result - 15: 15
-Correct result - 15: 15
-Correct result - 2: 2
-Correct result - 3: 3
-*********************************
-
-*** Testing if/elseif/else control ***
-
-This works
-this_still_works
-should_print
-
-
-*** Seriously nested if's test ***
-** spelling correction by kluzz **
-Only two lines of text should follow:
-this should be displayed. should be: $i=1, $j=0. is: $i=1, $j=0
-this is supposed to be displayed. should be: $i=2, $j=4. is: $i=2, $j=4
-3 loop iterations should follow:
-2 4
-3 4
-4 4
-**********************************
-
-*** C-style else-if's ***
-This should be displayed
-*************************
-
-*** WHILE tests ***
-0 is smaller than 20
-1 is smaller than 20
-2 is smaller than 20
-3 is smaller than 20
-4 is smaller than 20
-5 is smaller than 20
-6 is smaller than 20
-7 is smaller than 20
-8 is smaller than 20
-9 is smaller than 20
-10 is smaller than 20
-11 is smaller than 20
-12 is smaller than 20
-13 is smaller than 20
-14 is smaller than 20
-15 is smaller than 20
-16 is smaller than 20
-17 is smaller than 20
-18 is smaller than 20
-19 is smaller than 20
-20 equals 20
-21 is greater than 20
-22 is greater than 20
-23 is greater than 20
-24 is greater than 20
-25 is greater than 20
-26 is greater than 20
-27 is greater than 20
-28 is greater than 20
-29 is greater than 20
-30 is greater than 20
-31 is greater than 20
-32 is greater than 20
-33 is greater than 20
-34 is greater than 20
-35 is greater than 20
-36 is greater than 20
-37 is greater than 20
-38 is greater than 20
-39 is greater than 20
-*******************
-
-
-*** Nested WHILEs ***
-Each array variable should be equal to the sum of its indices:
-${test00}[0] = 0
-${test00}[1] = 1
-${test00}[2] = 2
-${test01}[0] = 1
-${test01}[1] = 2
-${test01}[2] = 3
-${test02}[0] = 2
-${test02}[1] = 3
-${test02}[2] = 4
-${test10}[0] = 1
-${test10}[1] = 2
-${test10}[2] = 3
-${test11}[0] = 2
-${test11}[1] = 3
-${test11}[2] = 4
-${test12}[0] = 3
-${test12}[1] = 4
-${test12}[2] = 5
-${test20}[0] = 2
-${test20}[1] = 3
-${test20}[2] = 4
-${test21}[0] = 3
-${test21}[1] = 4
-${test21}[2] = 5
-${test22}[0] = 4
-${test22}[1] = 5
-${test22}[2] = 6
-*********************
-
-*** hash test... ***
-commented out...
-**************************
-
-*** Hash resizing test ***
-ba
-baa
-baaa
-baaaa
-baaaaa
-baaaaaa
-baaaaaaa
-baaaaaaaa
-baaaaaaaaa
-baaaaaaaaaa
-ba
-10
-baa
-9
-baaa
-8
-baaaa
-7
-baaaaa
-6
-baaaaaa
-5
-baaaaaaa
-4
-baaaaaaaa
-3
-baaaaaaaaa
-2
-baaaaaaaaaa
-1
-**************************
-
-
-*** break/continue test ***
-$i should go from 0 to 2
-$j should go from 3 to 4, and $q should go from 3 to 4
- $j=3
- $q=3
- $q=4
- $j=4
- $q=3
- $q=4
-$j should go from 0 to 2
- $j=0
- $j=1
- $j=2
-$k should go from 0 to 2
- $k=0
- $k=1
- $k=2
-$i=0
-$j should go from 3 to 4, and $q should go from 3 to 4
- $j=3
- $q=3
- $q=4
- $j=4
- $q=3
- $q=4
-$j should go from 0 to 2
- $j=0
- $j=1
- $j=2
-$k should go from 0 to 2
- $k=0
- $k=1
- $k=2
-$i=1
-$j should go from 3 to 4, and $q should go from 3 to 4
- $j=3
- $q=3
- $q=4
- $j=4
- $q=3
- $q=4
-$j should go from 0 to 2
- $j=0
- $j=1
- $j=2
-$k should go from 0 to 2
- $k=0
- $k=1
- $k=2
-$i=2
-***********************
-
-*** Nested file include test ***
-<html>
-This is Finish.phtml. This file is supposed to be included
-from regression_test.phtml. This is normal HTML.
-and this is PHP code, 2+2=4
-</html>
-********************************
-
-Tests completed.
-<html>
-<head>
-*** Testing assignments and variable aliasing: ***
-This should read "blah": blah
-This should read "this is nifty": this is nifty
-*************************************************
-
-*** Testing integer operators ***
-Correct result - 8: 8
-Correct result - 8: 8
-Correct result - 2: 2
-Correct result - -2: -2
-Correct result - 15: 15
-Correct result - 15: 15
-Correct result - 2: 2
-Correct result - 3: 3
-*********************************
-
-*** Testing real operators ***
-Correct result - 8: 8
-Correct result - 8: 8
-Correct result - 2: 2
-Correct result - -2: -2
-Correct result - 15: 15
-Correct result - 15: 15
-Correct result - 2: 2
-Correct result - 3: 3
-*********************************
-
-*** Testing if/elseif/else control ***
-
-This works
-this_still_works
-should_print
-
-
-*** Seriously nested if's test ***
-** spelling correction by kluzz **
-Only two lines of text should follow:
-this should be displayed. should be: $i=1, $j=0. is: $i=1, $j=0
-this is supposed to be displayed. should be: $i=2, $j=4. is: $i=2, $j=4
-3 loop iterations should follow:
-2 4
-3 4
-4 4
-**********************************
-
-*** C-style else-if's ***
-This should be displayed
-*************************
-
-*** WHILE tests ***
-0 is smaller than 20
-1 is smaller than 20
-2 is smaller than 20
-3 is smaller than 20
-4 is smaller than 20
-5 is smaller than 20
-6 is smaller than 20
-7 is smaller than 20
-8 is smaller than 20
-9 is smaller than 20
-10 is smaller than 20
-11 is smaller than 20
-12 is smaller than 20
-13 is smaller than 20
-14 is smaller than 20
-15 is smaller than 20
-16 is smaller than 20
-17 is smaller than 20
-18 is smaller than 20
-19 is smaller than 20
-20 equals 20
-21 is greater than 20
-22 is greater than 20
-23 is greater than 20
-24 is greater than 20
-25 is greater than 20
-26 is greater than 20
-27 is greater than 20
-28 is greater than 20
-29 is greater than 20
-30 is greater than 20
-31 is greater than 20
-32 is greater than 20
-33 is greater than 20
-34 is greater than 20
-35 is greater than 20
-36 is greater than 20
-37 is greater than 20
-38 is greater than 20
-39 is greater than 20
-*******************
-
-
-*** Nested WHILEs ***
-Each array variable should be equal to the sum of its indices:
-${test00}[0] = 0
-${test00}[1] = 1
-${test00}[2] = 2
-${test01}[0] = 1
-${test01}[1] = 2
-${test01}[2] = 3
-${test02}[0] = 2
-${test02}[1] = 3
-${test02}[2] = 4
-${test10}[0] = 1
-${test10}[1] = 2
-${test10}[2] = 3
-${test11}[0] = 2
-${test11}[1] = 3
-${test11}[2] = 4
-${test12}[0] = 3
-${test12}[1] = 4
-${test12}[2] = 5
-${test20}[0] = 2
-${test20}[1] = 3
-${test20}[2] = 4
-${test21}[0] = 3
-${test21}[1] = 4
-${test21}[2] = 5
-${test22}[0] = 4
-${test22}[1] = 5
-${test22}[2] = 6
-*********************
-
-*** hash test... ***
-commented out...
-**************************
-
-*** Hash resizing test ***
-ba
-baa
-baaa
-baaaa
-baaaaa
-baaaaaa
-baaaaaaa
-baaaaaaaa
-baaaaaaaaa
-baaaaaaaaaa
-ba
-10
-baa
-9
-baaa
-8
-baaaa
-7
-baaaaa
-6
-baaaaaa
-5
-baaaaaaa
-4
-baaaaaaaa
-3
-baaaaaaaaa
-2
-baaaaaaaaaa
-1
-**************************
-
-
-*** break/continue test ***
-$i should go from 0 to 2
-$j should go from 3 to 4, and $q should go from 3 to 4
- $j=3
- $q=3
- $q=4
- $j=4
- $q=3
- $q=4
-$j should go from 0 to 2
- $j=0
- $j=1
- $j=2
-$k should go from 0 to 2
- $k=0
- $k=1
- $k=2
-$i=0
-$j should go from 3 to 4, and $q should go from 3 to 4
- $j=3
- $q=3
- $q=4
- $j=4
- $q=3
- $q=4
-$j should go from 0 to 2
- $j=0
- $j=1
- $j=2
-$k should go from 0 to 2
- $k=0
- $k=1
- $k=2
-$i=1
-$j should go from 3 to 4, and $q should go from 3 to 4
- $j=3
- $q=3
- $q=4
- $j=4
- $q=3
- $q=4
-$j should go from 0 to 2
- $j=0
- $j=1
- $j=2
-$k should go from 0 to 2
- $k=0
- $k=1
- $k=2
-$i=2
-***********************
-
-*** Nested file include test ***
-<html>
-This is Finish.phtml. This file is supposed to be included
-from regression_test.phtml. This is normal HTML.
-and this is PHP code, 2+2=4
-</html>
-********************************
-
-Tests completed.
-<html>
-<head>
-*** Testing assignments and variable aliasing: ***
-This should read "blah": blah
-This should read "this is nifty": this is nifty
-*************************************************
-
-*** Testing integer operators ***
-Correct result - 8: 8
-Correct result - 8: 8
-Correct result - 2: 2
-Correct result - -2: -2
-Correct result - 15: 15
-Correct result - 15: 15
-Correct result - 2: 2
-Correct result - 3: 3
-*********************************
-
-*** Testing real operators ***
-Correct result - 8: 8
-Correct result - 8: 8
-Correct result - 2: 2
-Correct result - -2: -2
-Correct result - 15: 15
-Correct result - 15: 15
-Correct result - 2: 2
-Correct result - 3: 3
-*********************************
-
-*** Testing if/elseif/else control ***
-
-This works
-this_still_works
-should_print
-
-
-*** Seriously nested if's test ***
-** spelling correction by kluzz **
-Only two lines of text should follow:
-this should be displayed. should be: $i=1, $j=0. is: $i=1, $j=0
-this is supposed to be displayed. should be: $i=2, $j=4. is: $i=2, $j=4
-3 loop iterations should follow:
-2 4
-3 4
-4 4
-**********************************
-
-*** C-style else-if's ***
-This should be displayed
-*************************
-
-*** WHILE tests ***
-0 is smaller than 20
-1 is smaller than 20
-2 is smaller than 20
-3 is smaller than 20
-4 is smaller than 20
-5 is smaller than 20
-6 is smaller than 20
-7 is smaller than 20
-8 is smaller than 20
-9 is smaller than 20
-10 is smaller than 20
-11 is smaller than 20
-12 is smaller than 20
-13 is smaller than 20
-14 is smaller than 20
-15 is smaller than 20
-16 is smaller than 20
-17 is smaller than 20
-18 is smaller than 20
-19 is smaller than 20
-20 equals 20
-21 is greater than 20
-22 is greater than 20
-23 is greater than 20
-24 is greater than 20
-25 is greater than 20
-26 is greater than 20
-27 is greater than 20
-28 is greater than 20
-29 is greater than 20
-30 is greater than 20
-31 is greater than 20
-32 is greater than 20
-33 is greater than 20
-34 is greater than 20
-35 is greater than 20
-36 is greater than 20
-37 is greater than 20
-38 is greater than 20
-39 is greater than 20
-*******************
-
-
-*** Nested WHILEs ***
-Each array variable should be equal to the sum of its indices:
-${test00}[0] = 0
-${test00}[1] = 1
-${test00}[2] = 2
-${test01}[0] = 1
-${test01}[1] = 2
-${test01}[2] = 3
-${test02}[0] = 2
-${test02}[1] = 3
-${test02}[2] = 4
-${test10}[0] = 1
-${test10}[1] = 2
-${test10}[2] = 3
-${test11}[0] = 2
-${test11}[1] = 3
-${test11}[2] = 4
-${test12}[0] = 3
-${test12}[1] = 4
-${test12}[2] = 5
-${test20}[0] = 2
-${test20}[1] = 3
-${test20}[2] = 4
-${test21}[0] = 3
-${test21}[1] = 4
-${test21}[2] = 5
-${test22}[0] = 4
-${test22}[1] = 5
-${test22}[2] = 6
-*********************
-
-*** hash test... ***
-commented out...
-**************************
-
-*** Hash resizing test ***
-ba
-baa
-baaa
-baaaa
-baaaaa
-baaaaaa
-baaaaaaa
-baaaaaaaa
-baaaaaaaaa
-baaaaaaaaaa
-ba
-10
-baa
-9
-baaa
-8
-baaaa
-7
-baaaaa
-6
-baaaaaa
-5
-baaaaaaa
-4
-baaaaaaaa
-3
-baaaaaaaaa
-2
-baaaaaaaaaa
-1
-**************************
-
-
-*** break/continue test ***
-$i should go from 0 to 2
-$j should go from 3 to 4, and $q should go from 3 to 4
- $j=3
- $q=3
- $q=4
- $j=4
- $q=3
- $q=4
-$j should go from 0 to 2
- $j=0
- $j=1
- $j=2
-$k should go from 0 to 2
- $k=0
- $k=1
- $k=2
-$i=0
-$j should go from 3 to 4, and $q should go from 3 to 4
- $j=3
- $q=3
- $q=4
- $j=4
- $q=3
- $q=4
-$j should go from 0 to 2
- $j=0
- $j=1
- $j=2
-$k should go from 0 to 2
- $k=0
- $k=1
- $k=2
-$i=1
-$j should go from 3 to 4, and $q should go from 3 to 4
- $j=3
- $q=3
- $q=4
- $j=4
- $q=3
- $q=4
-$j should go from 0 to 2
- $j=0
- $j=1
- $j=2
-$k should go from 0 to 2
- $k=0
- $k=1
- $k=2
-$i=2
-***********************
-
-*** Nested file include test ***
-<html>
-This is Finish.phtml. This file is supposed to be included
-from regression_test.phtml. This is normal HTML.
-and this is PHP code, 2+2=4
-</html>
-********************************
-
-Tests completed.
-<html>
-<head>
-*** Testing assignments and variable aliasing: ***
-This should read "blah": blah
-This should read "this is nifty": this is nifty
-*************************************************
-
-*** Testing integer operators ***
-Correct result - 8: 8
-Correct result - 8: 8
-Correct result - 2: 2
-Correct result - -2: -2
-Correct result - 15: 15
-Correct result - 15: 15
-Correct result - 2: 2
-Correct result - 3: 3
-*********************************
-
-*** Testing real operators ***
-Correct result - 8: 8
-Correct result - 8: 8
-Correct result - 2: 2
-Correct result - -2: -2
-Correct result - 15: 15
-Correct result - 15: 15
-Correct result - 2: 2
-Correct result - 3: 3
-*********************************
-
-*** Testing if/elseif/else control ***
-
-This works
-this_still_works
-should_print
-
-
-*** Seriously nested if's test ***
-** spelling correction by kluzz **
-Only two lines of text should follow:
-this should be displayed. should be: $i=1, $j=0. is: $i=1, $j=0
-this is supposed to be displayed. should be: $i=2, $j=4. is: $i=2, $j=4
-3 loop iterations should follow:
-2 4
-3 4
-4 4
-**********************************
-
-*** C-style else-if's ***
-This should be displayed
-*************************
-
-*** WHILE tests ***
-0 is smaller than 20
-1 is smaller than 20
-2 is smaller than 20
-3 is smaller than 20
-4 is smaller than 20
-5 is smaller than 20
-6 is smaller than 20
-7 is smaller than 20
-8 is smaller than 20
-9 is smaller than 20
-10 is smaller than 20
-11 is smaller than 20
-12 is smaller than 20
-13 is smaller than 20
-14 is smaller than 20
-15 is smaller than 20
-16 is smaller than 20
-17 is smaller than 20
-18 is smaller than 20
-19 is smaller than 20
-20 equals 20
-21 is greater than 20
-22 is greater than 20
-23 is greater than 20
-24 is greater than 20
-25 is greater than 20
-26 is greater than 20
-27 is greater than 20
-28 is greater than 20
-29 is greater than 20
-30 is greater than 20
-31 is greater than 20
-32 is greater than 20
-33 is greater than 20
-34 is greater than 20
-35 is greater than 20
-36 is greater than 20
-37 is greater than 20
-38 is greater than 20
-39 is greater than 20
-*******************
-
-
-*** Nested WHILEs ***
-Each array variable should be equal to the sum of its indices:
-${test00}[0] = 0
-${test00}[1] = 1
-${test00}[2] = 2
-${test01}[0] = 1
-${test01}[1] = 2
-${test01}[2] = 3
-${test02}[0] = 2
-${test02}[1] = 3
-${test02}[2] = 4
-${test10}[0] = 1
-${test10}[1] = 2
-${test10}[2] = 3
-${test11}[0] = 2
-${test11}[1] = 3
-${test11}[2] = 4
-${test12}[0] = 3
-${test12}[1] = 4
-${test12}[2] = 5
-${test20}[0] = 2
-${test20}[1] = 3
-${test20}[2] = 4
-${test21}[0] = 3
-${test21}[1] = 4
-${test21}[2] = 5
-${test22}[0] = 4
-${test22}[1] = 5
-${test22}[2] = 6
-*********************
-
-*** hash test... ***
-commented out...
-**************************
-
-*** Hash resizing test ***
-ba
-baa
-baaa
-baaaa
-baaaaa
-baaaaaa
-baaaaaaa
-baaaaaaaa
-baaaaaaaaa
-baaaaaaaaaa
-ba
-10
-baa
-9
-baaa
-8
-baaaa
-7
-baaaaa
-6
-baaaaaa
-5
-baaaaaaa
-4
-baaaaaaaa
-3
-baaaaaaaaa
-2
-baaaaaaaaaa
-1
-**************************
-
-
-*** break/continue test ***
-$i should go from 0 to 2
-$j should go from 3 to 4, and $q should go from 3 to 4
- $j=3
- $q=3
- $q=4
- $j=4
- $q=3
- $q=4
-$j should go from 0 to 2
- $j=0
- $j=1
- $j=2
-$k should go from 0 to 2
- $k=0
- $k=1
- $k=2
-$i=0
-$j should go from 3 to 4, and $q should go from 3 to 4
- $j=3
- $q=3
- $q=4
- $j=4
- $q=3
- $q=4
-$j should go from 0 to 2
- $j=0
- $j=1
- $j=2
-$k should go from 0 to 2
- $k=0
- $k=1
- $k=2
-$i=1
-$j should go from 3 to 4, and $q should go from 3 to 4
- $j=3
- $q=3
- $q=4
- $j=4
- $q=3
- $q=4
-$j should go from 0 to 2
- $j=0
- $j=1
- $j=2
-$k should go from 0 to 2
- $k=0
- $k=1
- $k=2
-$i=2
-***********************
-
-*** Nested file include test ***
-<html>
-This is Finish.phtml. This file is supposed to be included
-from regression_test.phtml. This is normal HTML.
-and this is PHP code, 2+2=4
-</html>
-********************************
-
-Tests completed.
-<html>
-<head>
-*** Testing assignments and variable aliasing: ***
-This should read "blah": blah
-This should read "this is nifty": this is nifty
-*************************************************
-
-*** Testing integer operators ***
-Correct result - 8: 8
-Correct result - 8: 8
-Correct result - 2: 2
-Correct result - -2: -2
-Correct result - 15: 15
-Correct result - 15: 15
-Correct result - 2: 2
-Correct result - 3: 3
-*********************************
-
-*** Testing real operators ***
-Correct result - 8: 8
-Correct result - 8: 8
-Correct result - 2: 2
-Correct result - -2: -2
-Correct result - 15: 15
-Correct result - 15: 15
-Correct result - 2: 2
-Correct result - 3: 3
-*********************************
-
-*** Testing if/elseif/else control ***
-
-This works
-this_still_works
-should_print
-
-
-*** Seriously nested if's test ***
-** spelling correction by kluzz **
-Only two lines of text should follow:
-this should be displayed. should be: $i=1, $j=0. is: $i=1, $j=0
-this is supposed to be displayed. should be: $i=2, $j=4. is: $i=2, $j=4
-3 loop iterations should follow:
-2 4
-3 4
-4 4
-**********************************
-
-*** C-style else-if's ***
-This should be displayed
-*************************
-
-*** WHILE tests ***
-0 is smaller than 20
-1 is smaller than 20
-2 is smaller than 20
-3 is smaller than 20
-4 is smaller than 20
-5 is smaller than 20
-6 is smaller than 20
-7 is smaller than 20
-8 is smaller than 20
-9 is smaller than 20
-10 is smaller than 20
-11 is smaller than 20
-12 is smaller than 20
-13 is smaller than 20
-14 is smaller than 20
-15 is smaller than 20
-16 is smaller than 20
-17 is smaller than 20
-18 is smaller than 20
-19 is smaller than 20
-20 equals 20
-21 is greater than 20
-22 is greater than 20
-23 is greater than 20
-24 is greater than 20
-25 is greater than 20
-26 is greater than 20
-27 is greater than 20
-28 is greater than 20
-29 is greater than 20
-30 is greater than 20
-31 is greater than 20
-32 is greater than 20
-33 is greater than 20
-34 is greater than 20
-35 is greater than 20
-36 is greater than 20
-37 is greater than 20
-38 is greater than 20
-39 is greater than 20
-*******************
-
-
-*** Nested WHILEs ***
-Each array variable should be equal to the sum of its indices:
-${test00}[0] = 0
-${test00}[1] = 1
-${test00}[2] = 2
-${test01}[0] = 1
-${test01}[1] = 2
-${test01}[2] = 3
-${test02}[0] = 2
-${test02}[1] = 3
-${test02}[2] = 4
-${test10}[0] = 1
-${test10}[1] = 2
-${test10}[2] = 3
-${test11}[0] = 2
-${test11}[1] = 3
-${test11}[2] = 4
-${test12}[0] = 3
-${test12}[1] = 4
-${test12}[2] = 5
-${test20}[0] = 2
-${test20}[1] = 3
-${test20}[2] = 4
-${test21}[0] = 3
-${test21}[1] = 4
-${test21}[2] = 5
-${test22}[0] = 4
-${test22}[1] = 5
-${test22}[2] = 6
-*********************
-
-*** hash test... ***
-commented out...
-**************************
-
-*** Hash resizing test ***
-ba
-baa
-baaa
-baaaa
-baaaaa
-baaaaaa
-baaaaaaa
-baaaaaaaa
-baaaaaaaaa
-baaaaaaaaaa
-ba
-10
-baa
-9
-baaa
-8
-baaaa
-7
-baaaaa
-6
-baaaaaa
-5
-baaaaaaa
-4
-baaaaaaaa
-3
-baaaaaaaaa
-2
-baaaaaaaaaa
-1
-**************************
-
-
-*** break/continue test ***
-$i should go from 0 to 2
-$j should go from 3 to 4, and $q should go from 3 to 4
- $j=3
- $q=3
- $q=4
- $j=4
- $q=3
- $q=4
-$j should go from 0 to 2
- $j=0
- $j=1
- $j=2
-$k should go from 0 to 2
- $k=0
- $k=1
- $k=2
-$i=0
-$j should go from 3 to 4, and $q should go from 3 to 4
- $j=3
- $q=3
- $q=4
- $j=4
- $q=3
- $q=4
-$j should go from 0 to 2
- $j=0
- $j=1
- $j=2
-$k should go from 0 to 2
- $k=0
- $k=1
- $k=2
-$i=1
-$j should go from 3 to 4, and $q should go from 3 to 4
- $j=3
- $q=3
- $q=4
- $j=4
- $q=3
- $q=4
-$j should go from 0 to 2
- $j=0
- $j=1
- $j=2
-$k should go from 0 to 2
- $k=0
- $k=1
- $k=2
-$i=2
-***********************
-
-*** Nested file include test ***
-<html>
-This is Finish.phtml. This file is supposed to be included
-from regression_test.phtml. This is normal HTML.
-and this is PHP code, 2+2=4
-</html>
-********************************
-
-Tests completed.
-<html>
-<head>
-*** Testing assignments and variable aliasing: ***
-This should read "blah": blah
-This should read "this is nifty": this is nifty
-*************************************************
-
-*** Testing integer operators ***
-Correct result - 8: 8
-Correct result - 8: 8
-Correct result - 2: 2
-Correct result - -2: -2
-Correct result - 15: 15
-Correct result - 15: 15
-Correct result - 2: 2
-Correct result - 3: 3
-*********************************
-
-*** Testing real operators ***
-Correct result - 8: 8
-Correct result - 8: 8
-Correct result - 2: 2
-Correct result - -2: -2
-Correct result - 15: 15
-Correct result - 15: 15
-Correct result - 2: 2
-Correct result - 3: 3
-*********************************
-
-*** Testing if/elseif/else control ***
-
-This works
-this_still_works
-should_print
-
-
-*** Seriously nested if's test ***
-** spelling correction by kluzz **
-Only two lines of text should follow:
-this should be displayed. should be: $i=1, $j=0. is: $i=1, $j=0
-this is supposed to be displayed. should be: $i=2, $j=4. is: $i=2, $j=4
-3 loop iterations should follow:
-2 4
-3 4
-4 4
-**********************************
-
-*** C-style else-if's ***
-This should be displayed
-*************************
-
-*** WHILE tests ***
-0 is smaller than 20
-1 is smaller than 20
-2 is smaller than 20
-3 is smaller than 20
-4 is smaller than 20
-5 is smaller than 20
-6 is smaller than 20
-7 is smaller than 20
-8 is smaller than 20
-9 is smaller than 20
-10 is smaller than 20
-11 is smaller than 20
-12 is smaller than 20
-13 is smaller than 20
-14 is smaller than 20
-15 is smaller than 20
-16 is smaller than 20
-17 is smaller than 20
-18 is smaller than 20
-19 is smaller than 20
-20 equals 20
-21 is greater than 20
-22 is greater than 20
-23 is greater than 20
-24 is greater than 20
-25 is greater than 20
-26 is greater than 20
-27 is greater than 20
-28 is greater than 20
-29 is greater than 20
-30 is greater than 20
-31 is greater than 20
-32 is greater than 20
-33 is greater than 20
-34 is greater than 20
-35 is greater than 20
-36 is greater than 20
-37 is greater than 20
-38 is greater than 20
-39 is greater than 20
-*******************
-
-
-*** Nested WHILEs ***
-Each array variable should be equal to the sum of its indices:
-${test00}[0] = 0
-${test00}[1] = 1
-${test00}[2] = 2
-${test01}[0] = 1
-${test01}[1] = 2
-${test01}[2] = 3
-${test02}[0] = 2
-${test02}[1] = 3
-${test02}[2] = 4
-${test10}[0] = 1
-${test10}[1] = 2
-${test10}[2] = 3
-${test11}[0] = 2
-${test11}[1] = 3
-${test11}[2] = 4
-${test12}[0] = 3
-${test12}[1] = 4
-${test12}[2] = 5
-${test20}[0] = 2
-${test20}[1] = 3
-${test20}[2] = 4
-${test21}[0] = 3
-${test21}[1] = 4
-${test21}[2] = 5
-${test22}[0] = 4
-${test22}[1] = 5
-${test22}[2] = 6
-*********************
-
-*** hash test... ***
-commented out...
-**************************
-
-*** Hash resizing test ***
-ba
-baa
-baaa
-baaaa
-baaaaa
-baaaaaa
-baaaaaaa
-baaaaaaaa
-baaaaaaaaa
-baaaaaaaaaa
-ba
-10
-baa
-9
-baaa
-8
-baaaa
-7
-baaaaa
-6
-baaaaaa
-5
-baaaaaaa
-4
-baaaaaaaa
-3
-baaaaaaaaa
-2
-baaaaaaaaaa
-1
-**************************
-
-
-*** break/continue test ***
-$i should go from 0 to 2
-$j should go from 3 to 4, and $q should go from 3 to 4
- $j=3
- $q=3
- $q=4
- $j=4
- $q=3
- $q=4
-$j should go from 0 to 2
- $j=0
- $j=1
- $j=2
-$k should go from 0 to 2
- $k=0
- $k=1
- $k=2
-$i=0
-$j should go from 3 to 4, and $q should go from 3 to 4
- $j=3
- $q=3
- $q=4
- $j=4
- $q=3
- $q=4
-$j should go from 0 to 2
- $j=0
- $j=1
- $j=2
-$k should go from 0 to 2
- $k=0
- $k=1
- $k=2
-$i=1
-$j should go from 3 to 4, and $q should go from 3 to 4
- $j=3
- $q=3
- $q=4
- $j=4
- $q=3
- $q=4
-$j should go from 0 to 2
- $j=0
- $j=1
- $j=2
-$k should go from 0 to 2
- $k=0
- $k=1
- $k=2
-$i=2
-***********************
-
-*** Nested file include test ***
-<html>
-This is Finish.phtml. This file is supposed to be included
-from regression_test.phtml. This is normal HTML.
-and this is PHP code, 2+2=4
-</html>
-********************************
-
-Tests completed.
-<html>
-<head>
-*** Testing assignments and variable aliasing: ***
-This should read "blah": blah
-This should read "this is nifty": this is nifty
-*************************************************
-
-*** Testing integer operators ***
-Correct result - 8: 8
-Correct result - 8: 8
-Correct result - 2: 2
-Correct result - -2: -2
-Correct result - 15: 15
-Correct result - 15: 15
-Correct result - 2: 2
-Correct result - 3: 3
-*********************************
-
-*** Testing real operators ***
-Correct result - 8: 8
-Correct result - 8: 8
-Correct result - 2: 2
-Correct result - -2: -2
-Correct result - 15: 15
-Correct result - 15: 15
-Correct result - 2: 2
-Correct result - 3: 3
-*********************************
-
-*** Testing if/elseif/else control ***
-
-This works
-this_still_works
-should_print
-
-
-*** Seriously nested if's test ***
-** spelling correction by kluzz **
-Only two lines of text should follow:
-this should be displayed. should be: $i=1, $j=0. is: $i=1, $j=0
-this is supposed to be displayed. should be: $i=2, $j=4. is: $i=2, $j=4
-3 loop iterations should follow:
-2 4
-3 4
-4 4
-**********************************
-
-*** C-style else-if's ***
-This should be displayed
-*************************
-
-*** WHILE tests ***
-0 is smaller than 20
-1 is smaller than 20
-2 is smaller than 20
-3 is smaller than 20
-4 is smaller than 20
-5 is smaller than 20
-6 is smaller than 20
-7 is smaller than 20
-8 is smaller than 20
-9 is smaller than 20
-10 is smaller than 20
-11 is smaller than 20
-12 is smaller than 20
-13 is smaller than 20
-14 is smaller than 20
-15 is smaller than 20
-16 is smaller than 20
-17 is smaller than 20
-18 is smaller than 20
-19 is smaller than 20
-20 equals 20
-21 is greater than 20
-22 is greater than 20
-23 is greater than 20
-24 is greater than 20
-25 is greater than 20
-26 is greater than 20
-27 is greater than 20
-28 is greater than 20
-29 is greater than 20
-30 is greater than 20
-31 is greater than 20
-32 is greater than 20
-33 is greater than 20
-34 is greater than 20
-35 is greater than 20
-36 is greater than 20
-37 is greater than 20
-38 is greater than 20
-39 is greater than 20
-*******************
-
-
-*** Nested WHILEs ***
-Each array variable should be equal to the sum of its indices:
-${test00}[0] = 0
-${test00}[1] = 1
-${test00}[2] = 2
-${test01}[0] = 1
-${test01}[1] = 2
-${test01}[2] = 3
-${test02}[0] = 2
-${test02}[1] = 3
-${test02}[2] = 4
-${test10}[0] = 1
-${test10}[1] = 2
-${test10}[2] = 3
-${test11}[0] = 2
-${test11}[1] = 3
-${test11}[2] = 4
-${test12}[0] = 3
-${test12}[1] = 4
-${test12}[2] = 5
-${test20}[0] = 2
-${test20}[1] = 3
-${test20}[2] = 4
-${test21}[0] = 3
-${test21}[1] = 4
-${test21}[2] = 5
-${test22}[0] = 4
-${test22}[1] = 5
-${test22}[2] = 6
-*********************
-
-*** hash test... ***
-commented out...
-**************************
-
-*** Hash resizing test ***
-ba
-baa
-baaa
-baaaa
-baaaaa
-baaaaaa
-baaaaaaa
-baaaaaaaa
-baaaaaaaaa
-baaaaaaaaaa
-ba
-10
-baa
-9
-baaa
-8
-baaaa
-7
-baaaaa
-6
-baaaaaa
-5
-baaaaaaa
-4
-baaaaaaaa
-3
-baaaaaaaaa
-2
-baaaaaaaaaa
-1
-**************************
-
-
-*** break/continue test ***
-$i should go from 0 to 2
-$j should go from 3 to 4, and $q should go from 3 to 4
- $j=3
- $q=3
- $q=4
- $j=4
- $q=3
- $q=4
-$j should go from 0 to 2
- $j=0
- $j=1
- $j=2
-$k should go from 0 to 2
- $k=0
- $k=1
- $k=2
-$i=0
-$j should go from 3 to 4, and $q should go from 3 to 4
- $j=3
- $q=3
- $q=4
- $j=4
- $q=3
- $q=4
-$j should go from 0 to 2
- $j=0
- $j=1
- $j=2
-$k should go from 0 to 2
- $k=0
- $k=1
- $k=2
-$i=1
-$j should go from 3 to 4, and $q should go from 3 to 4
- $j=3
- $q=3
- $q=4
- $j=4
- $q=3
- $q=4
-$j should go from 0 to 2
- $j=0
- $j=1
- $j=2
-$k should go from 0 to 2
- $k=0
- $k=1
- $k=2
-$i=2
-***********************
-
-*** Nested file include test ***
-<html>
-This is Finish.phtml. This file is supposed to be included
-from regression_test.phtml. This is normal HTML.
-and this is PHP code, 2+2=4
-</html>
-********************************
-
-Tests completed.
-<html>
-<head>
-*** Testing assignments and variable aliasing: ***
-This should read "blah": blah
-This should read "this is nifty": this is nifty
-*************************************************
-
-*** Testing integer operators ***
-Correct result - 8: 8
-Correct result - 8: 8
-Correct result - 2: 2
-Correct result - -2: -2
-Correct result - 15: 15
-Correct result - 15: 15
-Correct result - 2: 2
-Correct result - 3: 3
-*********************************
-
-*** Testing real operators ***
-Correct result - 8: 8
-Correct result - 8: 8
-Correct result - 2: 2
-Correct result - -2: -2
-Correct result - 15: 15
-Correct result - 15: 15
-Correct result - 2: 2
-Correct result - 3: 3
-*********************************
-
-*** Testing if/elseif/else control ***
-
-This works
-this_still_works
-should_print
-
-
-*** Seriously nested if's test ***
-** spelling correction by kluzz **
-Only two lines of text should follow:
-this should be displayed. should be: $i=1, $j=0. is: $i=1, $j=0
-this is supposed to be displayed. should be: $i=2, $j=4. is: $i=2, $j=4
-3 loop iterations should follow:
-2 4
-3 4
-4 4
-**********************************
-
-*** C-style else-if's ***
-This should be displayed
-*************************
-
-*** WHILE tests ***
-0 is smaller than 20
-1 is smaller than 20
-2 is smaller than 20
-3 is smaller than 20
-4 is smaller than 20
-5 is smaller than 20
-6 is smaller than 20
-7 is smaller than 20
-8 is smaller than 20
-9 is smaller than 20
-10 is smaller than 20
-11 is smaller than 20
-12 is smaller than 20
-13 is smaller than 20
-14 is smaller than 20
-15 is smaller than 20
-16 is smaller than 20
-17 is smaller than 20
-18 is smaller than 20
-19 is smaller than 20
-20 equals 20
-21 is greater than 20
-22 is greater than 20
-23 is greater than 20
-24 is greater than 20
-25 is greater than 20
-26 is greater than 20
-27 is greater than 20
-28 is greater than 20
-29 is greater than 20
-30 is greater than 20
-31 is greater than 20
-32 is greater than 20
-33 is greater than 20
-34 is greater than 20
-35 is greater than 20
-36 is greater than 20
-37 is greater than 20
-38 is greater than 20
-39 is greater than 20
-*******************
-
-
-*** Nested WHILEs ***
-Each array variable should be equal to the sum of its indices:
-${test00}[0] = 0
-${test00}[1] = 1
-${test00}[2] = 2
-${test01}[0] = 1
-${test01}[1] = 2
-${test01}[2] = 3
-${test02}[0] = 2
-${test02}[1] = 3
-${test02}[2] = 4
-${test10}[0] = 1
-${test10}[1] = 2
-${test10}[2] = 3
-${test11}[0] = 2
-${test11}[1] = 3
-${test11}[2] = 4
-${test12}[0] = 3
-${test12}[1] = 4
-${test12}[2] = 5
-${test20}[0] = 2
-${test20}[1] = 3
-${test20}[2] = 4
-${test21}[0] = 3
-${test21}[1] = 4
-${test21}[2] = 5
-${test22}[0] = 4
-${test22}[1] = 5
-${test22}[2] = 6
-*********************
-
-*** hash test... ***
-commented out...
-**************************
-
-*** Hash resizing test ***
-ba
-baa
-baaa
-baaaa
-baaaaa
-baaaaaa
-baaaaaaa
-baaaaaaaa
-baaaaaaaaa
-baaaaaaaaaa
-ba
-10
-baa
-9
-baaa
-8
-baaaa
-7
-baaaaa
-6
-baaaaaa
-5
-baaaaaaa
-4
-baaaaaaaa
-3
-baaaaaaaaa
-2
-baaaaaaaaaa
-1
-**************************
-
-
-*** break/continue test ***
-$i should go from 0 to 2
-$j should go from 3 to 4, and $q should go from 3 to 4
- $j=3
- $q=3
- $q=4
- $j=4
- $q=3
- $q=4
-$j should go from 0 to 2
- $j=0
- $j=1
- $j=2
-$k should go from 0 to 2
- $k=0
- $k=1
- $k=2
-$i=0
-$j should go from 3 to 4, and $q should go from 3 to 4
- $j=3
- $q=3
- $q=4
- $j=4
- $q=3
- $q=4
-$j should go from 0 to 2
- $j=0
- $j=1
- $j=2
-$k should go from 0 to 2
- $k=0
- $k=1
- $k=2
-$i=1
-$j should go from 3 to 4, and $q should go from 3 to 4
- $j=3
- $q=3
- $q=4
- $j=4
- $q=3
- $q=4
-$j should go from 0 to 2
- $j=0
- $j=1
- $j=2
-$k should go from 0 to 2
- $k=0
- $k=1
- $k=2
-$i=2
-***********************
-
-*** Nested file include test ***
-<html>
-This is Finish.phtml. This file is supposed to be included
-from regression_test.phtml. This is normal HTML.
-and this is PHP code, 2+2=4
-</html>
-********************************
-
-Tests completed.
-<html>
-<head>
-*** Testing assignments and variable aliasing: ***
-This should read "blah": blah
-This should read "this is nifty": this is nifty
-*************************************************
-
-*** Testing integer operators ***
-Correct result - 8: 8
-Correct result - 8: 8
-Correct result - 2: 2
-Correct result - -2: -2
-Correct result - 15: 15
-Correct result - 15: 15
-Correct result - 2: 2
-Correct result - 3: 3
-*********************************
-
-*** Testing real operators ***
-Correct result - 8: 8
-Correct result - 8: 8
-Correct result - 2: 2
-Correct result - -2: -2
-Correct result - 15: 15
-Correct result - 15: 15
-Correct result - 2: 2
-Correct result - 3: 3
-*********************************
-
-*** Testing if/elseif/else control ***
-
-This works
-this_still_works
-should_print
-
-
-*** Seriously nested if's test ***
-** spelling correction by kluzz **
-Only two lines of text should follow:
-this should be displayed. should be: $i=1, $j=0. is: $i=1, $j=0
-this is supposed to be displayed. should be: $i=2, $j=4. is: $i=2, $j=4
-3 loop iterations should follow:
-2 4
-3 4
-4 4
-**********************************
-
-*** C-style else-if's ***
-This should be displayed
-*************************
-
-*** WHILE tests ***
-0 is smaller than 20
-1 is smaller than 20
-2 is smaller than 20
-3 is smaller than 20
-4 is smaller than 20
-5 is smaller than 20
-6 is smaller than 20
-7 is smaller than 20
-8 is smaller than 20
-9 is smaller than 20
-10 is smaller than 20
-11 is smaller than 20
-12 is smaller than 20
-13 is smaller than 20
-14 is smaller than 20
-15 is smaller than 20
-16 is smaller than 20
-17 is smaller than 20
-18 is smaller than 20
-19 is smaller than 20
-20 equals 20
-21 is greater than 20
-22 is greater than 20
-23 is greater than 20
-24 is greater than 20
-25 is greater than 20
-26 is greater than 20
-27 is greater than 20
-28 is greater than 20
-29 is greater than 20
-30 is greater than 20
-31 is greater than 20
-32 is greater than 20
-33 is greater than 20
-34 is greater than 20
-35 is greater than 20
-36 is greater than 20
-37 is greater than 20
-38 is greater than 20
-39 is greater than 20
-*******************
-
-
-*** Nested WHILEs ***
-Each array variable should be equal to the sum of its indices:
-${test00}[0] = 0
-${test00}[1] = 1
-${test00}[2] = 2
-${test01}[0] = 1
-${test01}[1] = 2
-${test01}[2] = 3
-${test02}[0] = 2
-${test02}[1] = 3
-${test02}[2] = 4
-${test10}[0] = 1
-${test10}[1] = 2
-${test10}[2] = 3
-${test11}[0] = 2
-${test11}[1] = 3
-${test11}[2] = 4
-${test12}[0] = 3
-${test12}[1] = 4
-${test12}[2] = 5
-${test20}[0] = 2
-${test20}[1] = 3
-${test20}[2] = 4
-${test21}[0] = 3
-${test21}[1] = 4
-${test21}[2] = 5
-${test22}[0] = 4
-${test22}[1] = 5
-${test22}[2] = 6
-*********************
-
-*** hash test... ***
-commented out...
-**************************
-
-*** Hash resizing test ***
-ba
-baa
-baaa
-baaaa
-baaaaa
-baaaaaa
-baaaaaaa
-baaaaaaaa
-baaaaaaaaa
-baaaaaaaaaa
-ba
-10
-baa
-9
-baaa
-8
-baaaa
-7
-baaaaa
-6
-baaaaaa
-5
-baaaaaaa
-4
-baaaaaaaa
-3
-baaaaaaaaa
-2
-baaaaaaaaaa
-1
-**************************
-
-
-*** break/continue test ***
-$i should go from 0 to 2
-$j should go from 3 to 4, and $q should go from 3 to 4
- $j=3
- $q=3
- $q=4
- $j=4
- $q=3
- $q=4
-$j should go from 0 to 2
- $j=0
- $j=1
- $j=2
-$k should go from 0 to 2
- $k=0
- $k=1
- $k=2
-$i=0
-$j should go from 3 to 4, and $q should go from 3 to 4
- $j=3
- $q=3
- $q=4
- $j=4
- $q=3
- $q=4
-$j should go from 0 to 2
- $j=0
- $j=1
- $j=2
-$k should go from 0 to 2
- $k=0
- $k=1
- $k=2
-$i=1
-$j should go from 3 to 4, and $q should go from 3 to 4
- $j=3
- $q=3
- $q=4
- $j=4
- $q=3
- $q=4
-$j should go from 0 to 2
- $j=0
- $j=1
- $j=2
-$k should go from 0 to 2
- $k=0
- $k=1
- $k=2
-$i=2
-***********************
-
-*** Nested file include test ***
-<html>
-This is Finish.phtml. This file is supposed to be included
-from regression_test.phtml. This is normal HTML.
-and this is PHP code, 2+2=4
-</html>
-********************************
-
-Tests completed.
diff --git a/tests/lang/025.phpt b/tests/lang/025.phpt
deleted file mode 100644
index 382960f628..0000000000
--- a/tests/lang/025.phpt
+++ /dev/null
@@ -1,531 +0,0 @@
---TEST--
-Mean recursion test
---FILE--
-<?php
-function RekTest ($nr) {
- echo " $nr ";
- $j=$nr+1;
- while ($j < 10) {
- echo " a ";
- RekTest($j);
- $j++;
- echo " b $j ";
- }
- echo "\n";
-}
-
-RekTest(0);
-?>
---EXPECT--
- 0 a 1 a 2 a 3 a 4 a 5 a 6 a 7 a 8 a 9
- b 10
- b 9 a 9
- b 10
- b 8 a 8 a 9
- b 10
- b 9 a 9
- b 10
- b 7 a 7 a 8 a 9
- b 10
- b 9 a 9
- b 10
- b 8 a 8 a 9
- b 10
- b 9 a 9
- b 10
- b 6 a 6 a 7 a 8 a 9
- b 10
- b 9 a 9
- b 10
- b 8 a 8 a 9
- b 10
- b 9 a 9
- b 10
- b 7 a 7 a 8 a 9
- b 10
- b 9 a 9
- b 10
- b 8 a 8 a 9
- b 10
- b 9 a 9
- b 10
- b 5 a 5 a 6 a 7 a 8 a 9
- b 10
- b 9 a 9
- b 10
- b 8 a 8 a 9
- b 10
- b 9 a 9
- b 10
- b 7 a 7 a 8 a 9
- b 10
- b 9 a 9
- b 10
- b 8 a 8 a 9
- b 10
- b 9 a 9
- b 10
- b 6 a 6 a 7 a 8 a 9
- b 10
- b 9 a 9
- b 10
- b 8 a 8 a 9
- b 10
- b 9 a 9
- b 10
- b 7 a 7 a 8 a 9
- b 10
- b 9 a 9
- b 10
- b 8 a 8 a 9
- b 10
- b 9 a 9
- b 10
- b 4 a 4 a 5 a 6 a 7 a 8 a 9
- b 10
- b 9 a 9
- b 10
- b 8 a 8 a 9
- b 10
- b 9 a 9
- b 10
- b 7 a 7 a 8 a 9
- b 10
- b 9 a 9
- b 10
- b 8 a 8 a 9
- b 10
- b 9 a 9
- b 10
- b 6 a 6 a 7 a 8 a 9
- b 10
- b 9 a 9
- b 10
- b 8 a 8 a 9
- b 10
- b 9 a 9
- b 10
- b 7 a 7 a 8 a 9
- b 10
- b 9 a 9
- b 10
- b 8 a 8 a 9
- b 10
- b 9 a 9
- b 10
- b 5 a 5 a 6 a 7 a 8 a 9
- b 10
- b 9 a 9
- b 10
- b 8 a 8 a 9
- b 10
- b 9 a 9
- b 10
- b 7 a 7 a 8 a 9
- b 10
- b 9 a 9
- b 10
- b 8 a 8 a 9
- b 10
- b 9 a 9
- b 10
- b 6 a 6 a 7 a 8 a 9
- b 10
- b 9 a 9
- b 10
- b 8 a 8 a 9
- b 10
- b 9 a 9
- b 10
- b 7 a 7 a 8 a 9
- b 10
- b 9 a 9
- b 10
- b 8 a 8 a 9
- b 10
- b 9 a 9
- b 10
- b 3 a 3 a 4 a 5 a 6 a 7 a 8 a 9
- b 10
- b 9 a 9
- b 10
- b 8 a 8 a 9
- b 10
- b 9 a 9
- b 10
- b 7 a 7 a 8 a 9
- b 10
- b 9 a 9
- b 10
- b 8 a 8 a 9
- b 10
- b 9 a 9
- b 10
- b 6 a 6 a 7 a 8 a 9
- b 10
- b 9 a 9
- b 10
- b 8 a 8 a 9
- b 10
- b 9 a 9
- b 10
- b 7 a 7 a 8 a 9
- b 10
- b 9 a 9
- b 10
- b 8 a 8 a 9
- b 10
- b 9 a 9
- b 10
- b 5 a 5 a 6 a 7 a 8 a 9
- b 10
- b 9 a 9
- b 10
- b 8 a 8 a 9
- b 10
- b 9 a 9
- b 10
- b 7 a 7 a 8 a 9
- b 10
- b 9 a 9
- b 10
- b 8 a 8 a 9
- b 10
- b 9 a 9
- b 10
- b 6 a 6 a 7 a 8 a 9
- b 10
- b 9 a 9
- b 10
- b 8 a 8 a 9
- b 10
- b 9 a 9
- b 10
- b 7 a 7 a 8 a 9
- b 10
- b 9 a 9
- b 10
- b 8 a 8 a 9
- b 10
- b 9 a 9
- b 10
- b 4 a 4 a 5 a 6 a 7 a 8 a 9
- b 10
- b 9 a 9
- b 10
- b 8 a 8 a 9
- b 10
- b 9 a 9
- b 10
- b 7 a 7 a 8 a 9
- b 10
- b 9 a 9
- b 10
- b 8 a 8 a 9
- b 10
- b 9 a 9
- b 10
- b 6 a 6 a 7 a 8 a 9
- b 10
- b 9 a 9
- b 10
- b 8 a 8 a 9
- b 10
- b 9 a 9
- b 10
- b 7 a 7 a 8 a 9
- b 10
- b 9 a 9
- b 10
- b 8 a 8 a 9
- b 10
- b 9 a 9
- b 10
- b 5 a 5 a 6 a 7 a 8 a 9
- b 10
- b 9 a 9
- b 10
- b 8 a 8 a 9
- b 10
- b 9 a 9
- b 10
- b 7 a 7 a 8 a 9
- b 10
- b 9 a 9
- b 10
- b 8 a 8 a 9
- b 10
- b 9 a 9
- b 10
- b 6 a 6 a 7 a 8 a 9
- b 10
- b 9 a 9
- b 10
- b 8 a 8 a 9
- b 10
- b 9 a 9
- b 10
- b 7 a 7 a 8 a 9
- b 10
- b 9 a 9
- b 10
- b 8 a 8 a 9
- b 10
- b 9 a 9
- b 10
- b 2 a 2 a 3 a 4 a 5 a 6 a 7 a 8 a 9
- b 10
- b 9 a 9
- b 10
- b 8 a 8 a 9
- b 10
- b 9 a 9
- b 10
- b 7 a 7 a 8 a 9
- b 10
- b 9 a 9
- b 10
- b 8 a 8 a 9
- b 10
- b 9 a 9
- b 10
- b 6 a 6 a 7 a 8 a 9
- b 10
- b 9 a 9
- b 10
- b 8 a 8 a 9
- b 10
- b 9 a 9
- b 10
- b 7 a 7 a 8 a 9
- b 10
- b 9 a 9
- b 10
- b 8 a 8 a 9
- b 10
- b 9 a 9
- b 10
- b 5 a 5 a 6 a 7 a 8 a 9
- b 10
- b 9 a 9
- b 10
- b 8 a 8 a 9
- b 10
- b 9 a 9
- b 10
- b 7 a 7 a 8 a 9
- b 10
- b 9 a 9
- b 10
- b 8 a 8 a 9
- b 10
- b 9 a 9
- b 10
- b 6 a 6 a 7 a 8 a 9
- b 10
- b 9 a 9
- b 10
- b 8 a 8 a 9
- b 10
- b 9 a 9
- b 10
- b 7 a 7 a 8 a 9
- b 10
- b 9 a 9
- b 10
- b 8 a 8 a 9
- b 10
- b 9 a 9
- b 10
- b 4 a 4 a 5 a 6 a 7 a 8 a 9
- b 10
- b 9 a 9
- b 10
- b 8 a 8 a 9
- b 10
- b 9 a 9
- b 10
- b 7 a 7 a 8 a 9
- b 10
- b 9 a 9
- b 10
- b 8 a 8 a 9
- b 10
- b 9 a 9
- b 10
- b 6 a 6 a 7 a 8 a 9
- b 10
- b 9 a 9
- b 10
- b 8 a 8 a 9
- b 10
- b 9 a 9
- b 10
- b 7 a 7 a 8 a 9
- b 10
- b 9 a 9
- b 10
- b 8 a 8 a 9
- b 10
- b 9 a 9
- b 10
- b 5 a 5 a 6 a 7 a 8 a 9
- b 10
- b 9 a 9
- b 10
- b 8 a 8 a 9
- b 10
- b 9 a 9
- b 10
- b 7 a 7 a 8 a 9
- b 10
- b 9 a 9
- b 10
- b 8 a 8 a 9
- b 10
- b 9 a 9
- b 10
- b 6 a 6 a 7 a 8 a 9
- b 10
- b 9 a 9
- b 10
- b 8 a 8 a 9
- b 10
- b 9 a 9
- b 10
- b 7 a 7 a 8 a 9
- b 10
- b 9 a 9
- b 10
- b 8 a 8 a 9
- b 10
- b 9 a 9
- b 10
- b 3 a 3 a 4 a 5 a 6 a 7 a 8 a 9
- b 10
- b 9 a 9
- b 10
- b 8 a 8 a 9
- b 10
- b 9 a 9
- b 10
- b 7 a 7 a 8 a 9
- b 10
- b 9 a 9
- b 10
- b 8 a 8 a 9
- b 10
- b 9 a 9
- b 10
- b 6 a 6 a 7 a 8 a 9
- b 10
- b 9 a 9
- b 10
- b 8 a 8 a 9
- b 10
- b 9 a 9
- b 10
- b 7 a 7 a 8 a 9
- b 10
- b 9 a 9
- b 10
- b 8 a 8 a 9
- b 10
- b 9 a 9
- b 10
- b 5 a 5 a 6 a 7 a 8 a 9
- b 10
- b 9 a 9
- b 10
- b 8 a 8 a 9
- b 10
- b 9 a 9
- b 10
- b 7 a 7 a 8 a 9
- b 10
- b 9 a 9
- b 10
- b 8 a 8 a 9
- b 10
- b 9 a 9
- b 10
- b 6 a 6 a 7 a 8 a 9
- b 10
- b 9 a 9
- b 10
- b 8 a 8 a 9
- b 10
- b 9 a 9
- b 10
- b 7 a 7 a 8 a 9
- b 10
- b 9 a 9
- b 10
- b 8 a 8 a 9
- b 10
- b 9 a 9
- b 10
- b 4 a 4 a 5 a 6 a 7 a 8 a 9
- b 10
- b 9 a 9
- b 10
- b 8 a 8 a 9
- b 10
- b 9 a 9
- b 10
- b 7 a 7 a 8 a 9
- b 10
- b 9 a 9
- b 10
- b 8 a 8 a 9
- b 10
- b 9 a 9
- b 10
- b 6 a 6 a 7 a 8 a 9
- b 10
- b 9 a 9
- b 10
- b 8 a 8 a 9
- b 10
- b 9 a 9
- b 10
- b 7 a 7 a 8 a 9
- b 10
- b 9 a 9
- b 10
- b 8 a 8 a 9
- b 10
- b 9 a 9
- b 10
- b 5 a 5 a 6 a 7 a 8 a 9
- b 10
- b 9 a 9
- b 10
- b 8 a 8 a 9
- b 10
- b 9 a 9
- b 10
- b 7 a 7 a 8 a 9
- b 10
- b 9 a 9
- b 10
- b 8 a 8 a 9
- b 10
- b 9 a 9
- b 10
- b 6 a 6 a 7 a 8 a 9
- b 10
- b 9 a 9
- b 10
- b 8 a 8 a 9
- b 10
- b 9 a 9
- b 10
- b 7 a 7 a 8 a 9
- b 10
- b 9 a 9
- b 10
- b 8 a 8 a 9
- b 10
- b 9 a 9
- b 10
diff --git a/tests/lang/026.phpt b/tests/lang/026.phpt
deleted file mode 100644
index eb2d6214de..0000000000
--- a/tests/lang/026.phpt
+++ /dev/null
@@ -1,6 +0,0 @@
---TEST--
-Testing string scanner confirmance
---FILE--
-<?php echo "\"\t\\'" . '\n\\\'a\\\b\\' ?>
---EXPECT--
-" \'\n\'a\\b\
diff --git a/tests/lang/027.phpt b/tests/lang/027.phpt
deleted file mode 100644
index d3eb74b22f..0000000000
--- a/tests/lang/027.phpt
+++ /dev/null
@@ -1,12 +0,0 @@
---TEST--
-Testing do-while loop
---FILE--
-<?php
-$i=3;
-do {
- echo $i;
- $i--;
-} while($i>0);
-?>
---EXPECT--
-321
diff --git a/tests/lang/028.phpt b/tests/lang/028.phpt
deleted file mode 100644
index bd4525ee60..0000000000
--- a/tests/lang/028.phpt
+++ /dev/null
@@ -1,1058 +0,0 @@
---TEST--
-Testing calling user-level functions from C
---FILE--
-<?php
-
-error_reporting(1023);
-
-function print_stuff($stuff)
-{
- print $stuff;
-}
-
-
-function still_working()
-{
- return "I'm still alive";
-}
-
-function dafna()
-{
- static $foo = 0;
-
- print "Dafna!\n";
- print call_user_func("still_working")."\n";
- $foo++;
- return (string) $foo;
-}
-
-
-class dafna_class {
- function dafna_class() {
- $this->myname = "Dafna";
- }
- function GetMyName() {
- return $this->myname;
- }
- function SetMyName($name) {
- $this->myname = $name;
- }
-};
-
-for ($i=0; $i<200; $i++):
- print "$i\n";
- call_user_func("dafna");
- call_user_func("print_stuff","Hey there!!\n");
- print "$i\n";
-endfor;
-
-
-$dafna = new dafna_class();
-
-print $name=call_user_func(array(&$dafna,"GetMyName"));
-print "\n";
-
-?>
---EXPECT--
-0
-Dafna!
-I'm still alive
-Hey there!!
-0
-1
-Dafna!
-I'm still alive
-Hey there!!
-1
-2
-Dafna!
-I'm still alive
-Hey there!!
-2
-3
-Dafna!
-I'm still alive
-Hey there!!
-3
-4
-Dafna!
-I'm still alive
-Hey there!!
-4
-5
-Dafna!
-I'm still alive
-Hey there!!
-5
-6
-Dafna!
-I'm still alive
-Hey there!!
-6
-7
-Dafna!
-I'm still alive
-Hey there!!
-7
-8
-Dafna!
-I'm still alive
-Hey there!!
-8
-9
-Dafna!
-I'm still alive
-Hey there!!
-9
-10
-Dafna!
-I'm still alive
-Hey there!!
-10
-11
-Dafna!
-I'm still alive
-Hey there!!
-11
-12
-Dafna!
-I'm still alive
-Hey there!!
-12
-13
-Dafna!
-I'm still alive
-Hey there!!
-13
-14
-Dafna!
-I'm still alive
-Hey there!!
-14
-15
-Dafna!
-I'm still alive
-Hey there!!
-15
-16
-Dafna!
-I'm still alive
-Hey there!!
-16
-17
-Dafna!
-I'm still alive
-Hey there!!
-17
-18
-Dafna!
-I'm still alive
-Hey there!!
-18
-19
-Dafna!
-I'm still alive
-Hey there!!
-19
-20
-Dafna!
-I'm still alive
-Hey there!!
-20
-21
-Dafna!
-I'm still alive
-Hey there!!
-21
-22
-Dafna!
-I'm still alive
-Hey there!!
-22
-23
-Dafna!
-I'm still alive
-Hey there!!
-23
-24
-Dafna!
-I'm still alive
-Hey there!!
-24
-25
-Dafna!
-I'm still alive
-Hey there!!
-25
-26
-Dafna!
-I'm still alive
-Hey there!!
-26
-27
-Dafna!
-I'm still alive
-Hey there!!
-27
-28
-Dafna!
-I'm still alive
-Hey there!!
-28
-29
-Dafna!
-I'm still alive
-Hey there!!
-29
-30
-Dafna!
-I'm still alive
-Hey there!!
-30
-31
-Dafna!
-I'm still alive
-Hey there!!
-31
-32
-Dafna!
-I'm still alive
-Hey there!!
-32
-33
-Dafna!
-I'm still alive
-Hey there!!
-33
-34
-Dafna!
-I'm still alive
-Hey there!!
-34
-35
-Dafna!
-I'm still alive
-Hey there!!
-35
-36
-Dafna!
-I'm still alive
-Hey there!!
-36
-37
-Dafna!
-I'm still alive
-Hey there!!
-37
-38
-Dafna!
-I'm still alive
-Hey there!!
-38
-39
-Dafna!
-I'm still alive
-Hey there!!
-39
-40
-Dafna!
-I'm still alive
-Hey there!!
-40
-41
-Dafna!
-I'm still alive
-Hey there!!
-41
-42
-Dafna!
-I'm still alive
-Hey there!!
-42
-43
-Dafna!
-I'm still alive
-Hey there!!
-43
-44
-Dafna!
-I'm still alive
-Hey there!!
-44
-45
-Dafna!
-I'm still alive
-Hey there!!
-45
-46
-Dafna!
-I'm still alive
-Hey there!!
-46
-47
-Dafna!
-I'm still alive
-Hey there!!
-47
-48
-Dafna!
-I'm still alive
-Hey there!!
-48
-49
-Dafna!
-I'm still alive
-Hey there!!
-49
-50
-Dafna!
-I'm still alive
-Hey there!!
-50
-51
-Dafna!
-I'm still alive
-Hey there!!
-51
-52
-Dafna!
-I'm still alive
-Hey there!!
-52
-53
-Dafna!
-I'm still alive
-Hey there!!
-53
-54
-Dafna!
-I'm still alive
-Hey there!!
-54
-55
-Dafna!
-I'm still alive
-Hey there!!
-55
-56
-Dafna!
-I'm still alive
-Hey there!!
-56
-57
-Dafna!
-I'm still alive
-Hey there!!
-57
-58
-Dafna!
-I'm still alive
-Hey there!!
-58
-59
-Dafna!
-I'm still alive
-Hey there!!
-59
-60
-Dafna!
-I'm still alive
-Hey there!!
-60
-61
-Dafna!
-I'm still alive
-Hey there!!
-61
-62
-Dafna!
-I'm still alive
-Hey there!!
-62
-63
-Dafna!
-I'm still alive
-Hey there!!
-63
-64
-Dafna!
-I'm still alive
-Hey there!!
-64
-65
-Dafna!
-I'm still alive
-Hey there!!
-65
-66
-Dafna!
-I'm still alive
-Hey there!!
-66
-67
-Dafna!
-I'm still alive
-Hey there!!
-67
-68
-Dafna!
-I'm still alive
-Hey there!!
-68
-69
-Dafna!
-I'm still alive
-Hey there!!
-69
-70
-Dafna!
-I'm still alive
-Hey there!!
-70
-71
-Dafna!
-I'm still alive
-Hey there!!
-71
-72
-Dafna!
-I'm still alive
-Hey there!!
-72
-73
-Dafna!
-I'm still alive
-Hey there!!
-73
-74
-Dafna!
-I'm still alive
-Hey there!!
-74
-75
-Dafna!
-I'm still alive
-Hey there!!
-75
-76
-Dafna!
-I'm still alive
-Hey there!!
-76
-77
-Dafna!
-I'm still alive
-Hey there!!
-77
-78
-Dafna!
-I'm still alive
-Hey there!!
-78
-79
-Dafna!
-I'm still alive
-Hey there!!
-79
-80
-Dafna!
-I'm still alive
-Hey there!!
-80
-81
-Dafna!
-I'm still alive
-Hey there!!
-81
-82
-Dafna!
-I'm still alive
-Hey there!!
-82
-83
-Dafna!
-I'm still alive
-Hey there!!
-83
-84
-Dafna!
-I'm still alive
-Hey there!!
-84
-85
-Dafna!
-I'm still alive
-Hey there!!
-85
-86
-Dafna!
-I'm still alive
-Hey there!!
-86
-87
-Dafna!
-I'm still alive
-Hey there!!
-87
-88
-Dafna!
-I'm still alive
-Hey there!!
-88
-89
-Dafna!
-I'm still alive
-Hey there!!
-89
-90
-Dafna!
-I'm still alive
-Hey there!!
-90
-91
-Dafna!
-I'm still alive
-Hey there!!
-91
-92
-Dafna!
-I'm still alive
-Hey there!!
-92
-93
-Dafna!
-I'm still alive
-Hey there!!
-93
-94
-Dafna!
-I'm still alive
-Hey there!!
-94
-95
-Dafna!
-I'm still alive
-Hey there!!
-95
-96
-Dafna!
-I'm still alive
-Hey there!!
-96
-97
-Dafna!
-I'm still alive
-Hey there!!
-97
-98
-Dafna!
-I'm still alive
-Hey there!!
-98
-99
-Dafna!
-I'm still alive
-Hey there!!
-99
-100
-Dafna!
-I'm still alive
-Hey there!!
-100
-101
-Dafna!
-I'm still alive
-Hey there!!
-101
-102
-Dafna!
-I'm still alive
-Hey there!!
-102
-103
-Dafna!
-I'm still alive
-Hey there!!
-103
-104
-Dafna!
-I'm still alive
-Hey there!!
-104
-105
-Dafna!
-I'm still alive
-Hey there!!
-105
-106
-Dafna!
-I'm still alive
-Hey there!!
-106
-107
-Dafna!
-I'm still alive
-Hey there!!
-107
-108
-Dafna!
-I'm still alive
-Hey there!!
-108
-109
-Dafna!
-I'm still alive
-Hey there!!
-109
-110
-Dafna!
-I'm still alive
-Hey there!!
-110
-111
-Dafna!
-I'm still alive
-Hey there!!
-111
-112
-Dafna!
-I'm still alive
-Hey there!!
-112
-113
-Dafna!
-I'm still alive
-Hey there!!
-113
-114
-Dafna!
-I'm still alive
-Hey there!!
-114
-115
-Dafna!
-I'm still alive
-Hey there!!
-115
-116
-Dafna!
-I'm still alive
-Hey there!!
-116
-117
-Dafna!
-I'm still alive
-Hey there!!
-117
-118
-Dafna!
-I'm still alive
-Hey there!!
-118
-119
-Dafna!
-I'm still alive
-Hey there!!
-119
-120
-Dafna!
-I'm still alive
-Hey there!!
-120
-121
-Dafna!
-I'm still alive
-Hey there!!
-121
-122
-Dafna!
-I'm still alive
-Hey there!!
-122
-123
-Dafna!
-I'm still alive
-Hey there!!
-123
-124
-Dafna!
-I'm still alive
-Hey there!!
-124
-125
-Dafna!
-I'm still alive
-Hey there!!
-125
-126
-Dafna!
-I'm still alive
-Hey there!!
-126
-127
-Dafna!
-I'm still alive
-Hey there!!
-127
-128
-Dafna!
-I'm still alive
-Hey there!!
-128
-129
-Dafna!
-I'm still alive
-Hey there!!
-129
-130
-Dafna!
-I'm still alive
-Hey there!!
-130
-131
-Dafna!
-I'm still alive
-Hey there!!
-131
-132
-Dafna!
-I'm still alive
-Hey there!!
-132
-133
-Dafna!
-I'm still alive
-Hey there!!
-133
-134
-Dafna!
-I'm still alive
-Hey there!!
-134
-135
-Dafna!
-I'm still alive
-Hey there!!
-135
-136
-Dafna!
-I'm still alive
-Hey there!!
-136
-137
-Dafna!
-I'm still alive
-Hey there!!
-137
-138
-Dafna!
-I'm still alive
-Hey there!!
-138
-139
-Dafna!
-I'm still alive
-Hey there!!
-139
-140
-Dafna!
-I'm still alive
-Hey there!!
-140
-141
-Dafna!
-I'm still alive
-Hey there!!
-141
-142
-Dafna!
-I'm still alive
-Hey there!!
-142
-143
-Dafna!
-I'm still alive
-Hey there!!
-143
-144
-Dafna!
-I'm still alive
-Hey there!!
-144
-145
-Dafna!
-I'm still alive
-Hey there!!
-145
-146
-Dafna!
-I'm still alive
-Hey there!!
-146
-147
-Dafna!
-I'm still alive
-Hey there!!
-147
-148
-Dafna!
-I'm still alive
-Hey there!!
-148
-149
-Dafna!
-I'm still alive
-Hey there!!
-149
-150
-Dafna!
-I'm still alive
-Hey there!!
-150
-151
-Dafna!
-I'm still alive
-Hey there!!
-151
-152
-Dafna!
-I'm still alive
-Hey there!!
-152
-153
-Dafna!
-I'm still alive
-Hey there!!
-153
-154
-Dafna!
-I'm still alive
-Hey there!!
-154
-155
-Dafna!
-I'm still alive
-Hey there!!
-155
-156
-Dafna!
-I'm still alive
-Hey there!!
-156
-157
-Dafna!
-I'm still alive
-Hey there!!
-157
-158
-Dafna!
-I'm still alive
-Hey there!!
-158
-159
-Dafna!
-I'm still alive
-Hey there!!
-159
-160
-Dafna!
-I'm still alive
-Hey there!!
-160
-161
-Dafna!
-I'm still alive
-Hey there!!
-161
-162
-Dafna!
-I'm still alive
-Hey there!!
-162
-163
-Dafna!
-I'm still alive
-Hey there!!
-163
-164
-Dafna!
-I'm still alive
-Hey there!!
-164
-165
-Dafna!
-I'm still alive
-Hey there!!
-165
-166
-Dafna!
-I'm still alive
-Hey there!!
-166
-167
-Dafna!
-I'm still alive
-Hey there!!
-167
-168
-Dafna!
-I'm still alive
-Hey there!!
-168
-169
-Dafna!
-I'm still alive
-Hey there!!
-169
-170
-Dafna!
-I'm still alive
-Hey there!!
-170
-171
-Dafna!
-I'm still alive
-Hey there!!
-171
-172
-Dafna!
-I'm still alive
-Hey there!!
-172
-173
-Dafna!
-I'm still alive
-Hey there!!
-173
-174
-Dafna!
-I'm still alive
-Hey there!!
-174
-175
-Dafna!
-I'm still alive
-Hey there!!
-175
-176
-Dafna!
-I'm still alive
-Hey there!!
-176
-177
-Dafna!
-I'm still alive
-Hey there!!
-177
-178
-Dafna!
-I'm still alive
-Hey there!!
-178
-179
-Dafna!
-I'm still alive
-Hey there!!
-179
-180
-Dafna!
-I'm still alive
-Hey there!!
-180
-181
-Dafna!
-I'm still alive
-Hey there!!
-181
-182
-Dafna!
-I'm still alive
-Hey there!!
-182
-183
-Dafna!
-I'm still alive
-Hey there!!
-183
-184
-Dafna!
-I'm still alive
-Hey there!!
-184
-185
-Dafna!
-I'm still alive
-Hey there!!
-185
-186
-Dafna!
-I'm still alive
-Hey there!!
-186
-187
-Dafna!
-I'm still alive
-Hey there!!
-187
-188
-Dafna!
-I'm still alive
-Hey there!!
-188
-189
-Dafna!
-I'm still alive
-Hey there!!
-189
-190
-Dafna!
-I'm still alive
-Hey there!!
-190
-191
-Dafna!
-I'm still alive
-Hey there!!
-191
-192
-Dafna!
-I'm still alive
-Hey there!!
-192
-193
-Dafna!
-I'm still alive
-Hey there!!
-193
-194
-Dafna!
-I'm still alive
-Hey there!!
-194
-195
-Dafna!
-I'm still alive
-Hey there!!
-195
-196
-Dafna!
-I'm still alive
-Hey there!!
-196
-197
-Dafna!
-I'm still alive
-Hey there!!
-197
-198
-Dafna!
-I'm still alive
-Hey there!!
-198
-199
-Dafna!
-I'm still alive
-Hey there!!
-199
-Dafna
-
diff --git a/tests/lang/030.phpt b/tests/lang/030.phpt
deleted file mode 100644
index 758369bf08..0000000000
--- a/tests/lang/030.phpt
+++ /dev/null
@@ -1,36 +0,0 @@
---TEST--
-$this in constructor test
---FILE--
-<?php
-class foo {
- function foo($name) {
- $GLOBALS['List']= &$this;
- $this->Name = $name;
- $GLOBALS['List']->echoName();
- }
-
- function echoName() {
- $GLOBALS['names'][]=$this->Name;
- }
-}
-
-function &foo2(&$foo) {
- return $foo;
-}
-
-
-$bar1 =new foo('constructor');
-$bar1->Name = 'outside';
-$bar1->echoName();
-$List->echoName();
-
-$bar1 =& foo2(new foo('constructor'));
-$bar1->Name = 'outside';
-$bar1->echoName();
-
-$List->echoName();
-
-print ($names==array('constructor','outside','outside','constructor','outside','outside')) ? 'success':'failure';
-?>
---EXPECT--
-success
diff --git a/tests/lang/031.phpt b/tests/lang/031.phpt
deleted file mode 100644
index 695098abbd..0000000000
--- a/tests/lang/031.phpt
+++ /dev/null
@@ -1,70 +0,0 @@
---TEST--
-Internal hash position bug on assignment (Bug #16227)
---FILE--
-<?php
-// reported by php.net@alienbill.com
-$arrayOuter = array("key1","key2");
-$arrayInner = array("0","1");
-
-print "Correct - with inner loop reset.\n";
-
-while(list(,$o) = each($arrayOuter)){
- reset($arrayInner);
- while(list(,$i) = each($arrayInner)){
- print "inloop $i for $o\n";
- }
-}
-reset($arrayOuter);
-reset($arrayInner);
-
-print "What happens without inner loop reset.\n";
-
-while(list(,$o) = each($arrayOuter)){
- while(list(,$i) = each($arrayInner)){
- print "inloop $i for $o\n";
- }
-}
-reset($arrayOuter);
-reset($arrayInner);
-
-print "What happens without inner loop reset but copy.\n";
-
-while(list(,$o) = each($arrayOuter)){
- $placeholder = $arrayInner;
- while(list(,$i) = each($arrayInner)){
- print "inloop $i for $o\n";
- }
-}
-reset($arrayOuter);
-reset($arrayInner);
-
-print "What happens with inner loop reset over copy.\n";
-
-while(list(,$o) = each($arrayOuter)){
- $placeholder = $arrayInner;
- while(list(,$i) = each($placeholder)){
- print "inloop $i for $o\n";
- }
-}
-reset($arrayOuter);
-reset($arrayInner);
-?>
---EXPECT--
-Correct - with inner loop reset.
-inloop 0 for key1
-inloop 1 for key1
-inloop 0 for key2
-inloop 1 for key2
-What happens without inner loop reset.
-inloop 0 for key1
-inloop 1 for key1
-What happens without inner loop reset but copy.
-inloop 0 for key1
-inloop 1 for key1
-inloop 0 for key2
-inloop 1 for key2
-What happens with inner loop reset over copy.
-inloop 0 for key1
-inloop 1 for key1
-inloop 0 for key2
-inloop 1 for key2
diff --git a/tests/lang/032.phpt b/tests/lang/032.phpt
deleted file mode 100644
index caa4c7e430..0000000000
--- a/tests/lang/032.phpt
+++ /dev/null
@@ -1,36 +0,0 @@
---TEST--
-Class method registration
---FILE--
-<?php
-class A {
- function foo() {}
-}
-
-class B extends A {
- function foo() {}
-}
-
-class C extends B {
- function foo() {}
-}
-
-class D extends A {
-}
-
-class F extends D {
- function foo() {}
-}
-
-// Following class definition should fail, but cannot test
-/*
-class X {
- function foo() {}
- function foo() {}
-}
-*/
-
-echo "OK\n";
-?>
---EXPECT--
-OK
-
diff --git a/tests/lang/033.phpt b/tests/lang/033.phpt
deleted file mode 100644
index 724c67b225..0000000000
--- a/tests/lang/033.phpt
+++ /dev/null
@@ -1,53 +0,0 @@
---TEST--
-Alternative syntaxes test
---SKIPIF--
-<?php if(version_compare(zend_version(), "2.0.0-dev", '>=')) echo "skip removed in Zend Engine 2\n"; ?>
---FILE--
-<?php
-$a = 1;
-
-echo "If: ";
-if ($a) echo 1; else echo 0;
-if ($a):
- echo 1;
-else:
- echo 0;
-endif;
-
-echo "\nWhile: ";
-while ($a<5) echo $a++;
-while ($a<9):
- echo ++$a;
-endwhile;
-
-echo "\nFor: ";
-for($a=0;$a<5;$a++) echo $a;
-for($a=0;$a<5;$a++):
- echo $a;
-endfor;
-
-echo "\nSwitch: ";
-switch ($a):
- case 0;
- echo 0;
- break;
- case 5:
- echo 1;
- break;
- default;
- echo 0;
- break;
-endswitch;
-
-echo "\nold_function: ";
-old_function foo $bar, $baz (
- return sprintf("foo(%s, %s);\n", $bar, $baz);
-);
-echo foo(1,2);
-?>
---EXPECT--
-If: 11
-While: 12346789
-For: 0123401234
-Switch: 1
-old_function: foo(1, 2);
diff --git a/tests/lang/034.phpt b/tests/lang/034.phpt
deleted file mode 100644
index 475a0b7568..0000000000
--- a/tests/lang/034.phpt
+++ /dev/null
@@ -1,18 +0,0 @@
---TEST--
-Locale settings affecting float parsing
---SKIPIF--
-<?php # try to activate a german locale
-if (setlocale(LC_NUMERIC, "de_DE", "de", "german", "ge") === FALSE) {
- print "skip";
-}
-?>
---FILE--
-<?php
-# activate the german locale
-setlocale(LC_NUMERIC, "de_DE", "de", "german", "ge");
-
-echo (float)"3.14", "\n";
-
-?>
---EXPECT--
-3,14
diff --git a/tests/lang/035.phpt b/tests/lang/035.phpt
deleted file mode 100644
index 9472999f47..0000000000
--- a/tests/lang/035.phpt
+++ /dev/null
@@ -1,38 +0,0 @@
---TEST--
-ZE2: set_exception_handler()
---SKIPIF--
-<?php if (version_compare(zend_version(), "2.0.0-dev", "<")) print "skip Zend engine 2 required"; ?>
---FILE--
-<?php
-class MyException extends Exception {
- function MyException($_error) {
- $this->error = $_error;
- }
-
- function getException()
- {
- return $this->error;
- }
-}
-
-function ThrowException()
-{
- throw new MyException("'This is an exception!'");
-}
-
-
-try {
-} catch (MyException $exception) {
- print "There shouldn't be an exception: " . $exception->getException();
- print "\n";
-}
-
-try {
- ThrowException();
-} catch (MyException $exception) {
- print "There was an exception: " . $exception->getException();
- print "\n";
-}
-?>
---EXPECT--
-There was an exception: 'This is an exception!'
diff --git a/tests/lang/036.phpt b/tests/lang/036.phpt
deleted file mode 100755
index 474316e363..0000000000
--- a/tests/lang/036.phpt
+++ /dev/null
@@ -1,27 +0,0 @@
---TEST--
-Child public element should not override parent private element in parent methods
---FILE--
-<?php
-class par {
- private $id = "foo";
-
- function displayMe()
- {
- print $this->id;
- }
-};
-
-class chld extends par {
- public $id = "bar";
- function displayHim()
- {
- parent::displayMe();
- }
-};
-
-
-$obj = new chld();
-$obj->displayHim();
-?>
---EXPECT--
-foo
diff --git a/tests/lang/037.phpt b/tests/lang/037.phpt
deleted file mode 100755
index c2a1ee312f..0000000000
--- a/tests/lang/037.phpt
+++ /dev/null
@@ -1,30 +0,0 @@
---TEST--
-'Static' binding for private variables
---FILE--
-<?php
-
-class par {
- private $id="foo";
-
- function displayMe()
- {
- $this->displayChild();
- }
-};
-
-class chld extends par {
- private $id = "bar";
-
- function displayChild()
- {
- print $this->id;
- }
-};
-
-
-$obj = new chld();
-$obj->displayMe();
-
-?>
---EXPECT--
-bar
diff --git a/tests/lang/038.phpt b/tests/lang/038.phpt
deleted file mode 100755
index 195050b2fb..0000000000
--- a/tests/lang/038.phpt
+++ /dev/null
@@ -1,41 +0,0 @@
---TEST--
-Convert warnings to exceptions
---FILE--
-<?php
-
-class MyException extends Exception
-{
- function __construct($errstr, $errno=0, $errfile='', $errline='')
- {
- parent::__construct($errstr, $errno);
- $this->file = $errfile;
- $this->line = $errline;
- }
-}
-
-function Error2Exception($errno, $errstr, $errfile, $errline)
-{
- throw new MyException($errstr, $errno);//, $errfile, $errline);
-}
-
-$err_msg = 'no exception';
-set_error_handler('Error2Exception');
-
-try
-{
- $con = fopen("/tmp/a_file_that_does_not_exist",'r');
-}
-catch (Exception $e)
-{
- $trace = $e->getTrace();
- var_dump($trace[0]['function']);
- var_dump($trace[1]['function']);
-}
-
-?>
-===DONE===
-<?php exit(0); ?>
---EXPECTF--
-string(15) "Error2Exception"
-string(5) "fopen"
-===DONE===
diff --git a/tests/lang/039.phpt b/tests/lang/039.phpt
deleted file mode 100755
index aa4b591649..0000000000
--- a/tests/lang/039.phpt
+++ /dev/null
@@ -1,45 +0,0 @@
---TEST--
-Catch Interfaces
---FILE--
-<?php
-
-interface Catchable
-{
-}
-
-class MyException extends Exception implements Catchable
-{
- function __construct($errstr, $errno, $errfile, $errline)
- {
- parent::__construct($errstr, $errno);
- $this->file = $errfile;
- $this->line = $errline;
- }
-}
-
-function Error2Exception($errno, $errstr, $errfile, $errline)
-{
- throw new MyException($errstr, $errno, $errfile, $errline);
-}
-
-$err_msg = 'no exception';
-set_error_handler('Error2Exception');
-
-try
-{
- $con = fopen('/tmp/a_file_that_does_not_exist','r');
-}
-catch (Catchable $e)
-{
- echo "Catchable\n";
-}
-catch (Exception $e)
-{
- echo "Exception\n";
-}
-
-?>
-===DONE===
---EXPECTF--
-Catchable
-===DONE===
diff --git a/tests/lang/bison1.phpt b/tests/lang/bison1.phpt
deleted file mode 100644
index 3571576fb8..0000000000
--- a/tests/lang/bison1.phpt
+++ /dev/null
@@ -1,9 +0,0 @@
---TEST--
-Bison weirdness
---FILE--
-<?php
-error_reporting(E_ALL & ~E_NOTICE);
-echo "blah-$foo\n";
-?>
---EXPECT--
-blah-
diff --git a/tests/lang/bug17115.phpt b/tests/lang/bug17115.phpt
deleted file mode 100644
index 0cb3bf44d2..0000000000
--- a/tests/lang/bug17115.phpt
+++ /dev/null
@@ -1,16 +0,0 @@
---TEST--
-Bug #17115 (lambda functions produce segfault with static vars)
---FILE--
-<?php
-$func = create_function('','
- static $foo = 0;
- return $foo++;
-');
-var_dump($func());
-var_dump($func());
-var_dump($func());
-?>
---EXPECT--
-int(0)
-int(1)
-int(2)
diff --git a/tests/lang/bug18872.phpt b/tests/lang/bug18872.phpt
deleted file mode 100644
index 2e3dc22c58..0000000000
--- a/tests/lang/bug18872.phpt
+++ /dev/null
@@ -1,18 +0,0 @@
---TEST--
-Bug #18872 (class constant used as default parameter)
---FILE--
-<?php
-class FooBar {
- const BIFF = 3;
-}
-
-function foo($biff = FooBar::BIFF) {
- echo $biff . "\n";
-}
-
-foo();
-foo();
-?>
---EXPECT--
-3
-3
diff --git a/tests/lang/bug19566.phpt b/tests/lang/bug19566.phpt
deleted file mode 100644
index 45c3bc588e..0000000000
--- a/tests/lang/bug19566.phpt
+++ /dev/null
@@ -1,10 +0,0 @@
---TEST--
-Bug #19566 (get_declared_classes() segfaults)
---FILE--
-<?php
-class foo {}
-$result = get_declared_classes();
-var_dump(array_search('foo', $result));
-?>
---EXPECTF--
-int(%d)
diff --git a/tests/lang/bug19943.phpt b/tests/lang/bug19943.phpt
deleted file mode 100644
index 3be703fb1d..0000000000
--- a/tests/lang/bug19943.phpt
+++ /dev/null
@@ -1,29 +0,0 @@
---TEST--
-Bug #19943 (memleaks)
---FILE--
-<?php
- $ar = array();
- for ($count = 0; $count < 10; $count++) {
- $ar[$count] = "$count";
- $ar[$count]['idx'] = "$count";
- }
-
- for ($count = 0; $count < 10; $count++) {
- echo $ar[$count]." -- ".$ar[$count]['idx']."\n";
- }
- $a = "0123456789";
- $a[9] = $a{0};
- var_dump($a);
-?>
---EXPECT--
-0 -- 0
-1 -- 1
-2 -- 2
-3 -- 3
-4 -- 4
-5 -- 5
-6 -- 6
-7 -- 7
-8 -- 8
-9 -- 9
-string(10) "0123456780"
diff --git a/tests/lang/bug20175.phpt b/tests/lang/bug20175.phpt
deleted file mode 100644
index 55ff7d82b8..0000000000
--- a/tests/lang/bug20175.phpt
+++ /dev/null
@@ -1,165 +0,0 @@
---TEST--
-Bug #20175 (Static vars can't store ref to new instance)
---SKIPIF--
-<?php if (version_compare(zend_version(),'2.0.0-dev','<')) die('skip ZE1 does not have static class members'); ?>
---FILE--
-<?php
-print zend_version()."\n";
-
-/* Part 1:
- * Storing the result of a function in a static variable.
- * foo_global() increments global variable $foo_count whenever it is executed.
- * When foo_static() is called it checks for the static variable $foo_value
- * being initialised. In case initialisation is necessary foo_global() will be
- * called. Since that must happen only once the return value should be equal.
- */
-$foo_count = 0;
-
-function foo_global() {
- global $foo_count;
- echo "foo_global()\n";
- return 'foo:' . ++$foo_count;
-}
-
-function foo_static() {
- static $foo_value;
- echo "foo_static()\n";
- if (!isset($foo_value)) {
- $foo_value = foo_global();
- }
- return $foo_value;
-}
-
-/* Part 2:
- * Storing a reference to the result of a function in a static variable.
- * Same as Part 1 but:
- * The return statment transports a copy of the value to return. In other
- * words the return value of bar_global() is a temporary variable only valid
- * after the function call bar_global() is done in current local scope.
- */
-$bar_count = 0;
-
-function bar_global() {
- global $bar_count;
- echo "bar_global()\n";
- return 'bar:' . ++$bar_count;
-}
-
-function bar_static() {
- static $bar_value;
- echo "bar_static()\n";
- if (!isset($bar_value)) {
- $bar_value = &bar_global();
- }
- return $bar_value;
-}
-
-/* Part 3: TO BE DISCUSSED
- *
- * Storing a reference to the result of a function in a static variable.
- * Same as Part 2 but wow_global() returns a reference so $wow_value
- * should store a reference to $wow_global. Therefor $wow_value is already
- * initialised in second call to wow_static() and hence shouldn't call
- * wow_global() again.
- */ /*
-$wow_count = 0;
-$wow_name = '';
-
-function &wow_global() {
- global $wow_count, $wow_name;
- echo "wow_global()\n";
- $wow_name = 'wow:' . ++$wow_count;
- return $wow_name;
-}
-
-function wow_static() {
- static $wow_value;
- echo "wow_static()\n";
- if (!isset($wow_value)) {
- $wow_value = &wow_global();
- }
- return $wow_value;
-}*/
-
-/* Part 4:
- * Storing a reference to a new instance (that's where the name of the test
- * comes from). First there is the global counter $oop_global again which
- * counts the calls to the constructor of oop_class and hence counts the
- * creation of oop_class instances.
- * The class oop_test uses a static reference to a oop_class instance.
- * When another oop_test instance is created it must reuse the statically
- * stored reference oop_value. This way oop_class gets some singleton behavior
- * since it will be created only once for all insatnces of oop_test.
- */
-$oop_global = 0;
-class oop_class {
- var $oop_name;
-
- function oop_class() {
- global $oop_global;
- echo "oop_class()\n";
- $this->oop_name = 'oop:' . ++$oop_global;
- }
-}
-
-class oop_test {
- static $oop_value;
-
- function oop_test() {
- echo "oop_test()\n";
- }
-
- function oop_static() {
- echo "oop_static()\n";
- if (!isset(self::$oop_value)) {
- self::$oop_value = & new oop_class;
- }
- echo self::$oop_value->oop_name;
- }
-}
-
-print foo_static()."\n";
-print foo_static()."\n";
-print bar_static()."\n";
-print bar_static()."\n";
-//print wow_static()."\n";
-//print wow_static()."\n";
-echo "wow_static()
-wow_global()
-wow:1
-wow_static()
-wow:1
-";
-$oop_tester = new oop_test;
-print $oop_tester->oop_static()."\n";
-print $oop_tester->oop_static()."\n";
-$oop_tester = new oop_test; // repeated.
-print $oop_tester->oop_static()."\n";
-?>
---EXPECTF--
-%s
-foo_static()
-foo_global()
-foo:1
-foo_static()
-foo:1
-bar_static()
-bar_global()
-bar:1
-bar_static()
-bar_global()
-bar:2
-wow_static()
-wow_global()
-wow:1
-wow_static()
-wow:1
-oop_test()
-oop_static()
-oop_class()
-oop:1
-oop_static()
-oop:1
-oop_test()
-oop_static()
-oop:1
diff --git a/tests/lang/bug21094.phpt b/tests/lang/bug21094.phpt
deleted file mode 100644
index 266a1d6c8f..0000000000
--- a/tests/lang/bug21094.phpt
+++ /dev/null
@@ -1,17 +0,0 @@
---TEST--
-Bug #21094 (set_error_handler not accepting methods)
---FILE--
-<?php
-class test {
- function hdlr($errno, $errstr, $errfile, $errline) {
- printf("[%d] errstr: %s, errfile: %s, errline: %d\n", $errno, $errstr, $errfile, $errline, $errstr);
- }
-}
-
-set_error_handler(array(new test(), "hdlr"));
-
-trigger_error("test");
-?>
---EXPECTF--
-[1024] errstr: test, errfile: %s, errline: %d
-
diff --git a/tests/lang/bug21600.phpt b/tests/lang/bug21600.phpt
deleted file mode 100644
index c3f832b9ea..0000000000
--- a/tests/lang/bug21600.phpt
+++ /dev/null
@@ -1,34 +0,0 @@
---TEST--
-Bug #21600 (assign by reference function call changes variable contents)
---FILE--
-<?php
-$tmp = array();
-$tmp['foo'] = "test";
-$tmp['foo'] = &bar($tmp['foo']);
-var_dump($tmp);
-
-unset($tmp);
-
-$tmp = array();
-$tmp['foo'] = "test";
-$tmp['foo'] = &fubar($tmp['foo']);
-var_dump($tmp);
-
-function bar($text){
- return $text;
-}
-
-function fubar($text){
- $text = &$text;
- return $text;
-}
-?>
---EXPECT--
-array(1) {
- ["foo"]=>
- &string(4) "test"
-}
-array(1) {
- ["foo"]=>
- string(4) "test"
-}
diff --git a/tests/lang/bug21669.phpt b/tests/lang/bug21669.phpt
deleted file mode 100644
index 643b0695ee..0000000000
--- a/tests/lang/bug21669.phpt
+++ /dev/null
@@ -1,23 +0,0 @@
---TEST--
-Bug #21669 ("$obj = new $this->var;" doesn't work)
---FILE--
-<?php
-class Test {
- function say_hello() {
- echo "Hello world";
- }
-}
-
-class Factory {
- public $name = "Test";
- function create() {
- $obj = new $this->name; /* Parse error */
- return $obj;
- }
-}
-$factory = new Factory;
-$test = $factory->create();
-$test->say_hello();
-?>
---EXPECT--
-Hello world
diff --git a/tests/lang/bug21800.phpt b/tests/lang/bug21800.phpt
deleted file mode 100644
index 72755e29a5..0000000000
--- a/tests/lang/bug21800.phpt
+++ /dev/null
@@ -1,19 +0,0 @@
---TEST--
-Bug #21800 (Segfault under interactive mode)
---SKIPIF--
-<?php (PHP_SAPI != 'cli') and print "SKIP PHP binary is not cli"; ?>
---FILE--
-<?php
-$exe = getenv('TEST_PHP_EXECUTABLE');
-$fh = popen("$exe -a", 'w');
-if ($fh !== false) {
- fwrite($fh, "<?php echo ':test:'; ?>\n\n");
- fclose($fh);
-} else {
- echo "failure\n";
-}
-?>
---EXPECT--
-Interactive mode enabled
-
-:test:
diff --git a/tests/lang/bug21820.phpt b/tests/lang/bug21820.phpt
deleted file mode 100644
index 0ca233ea84..0000000000
--- a/tests/lang/bug21820.phpt
+++ /dev/null
@@ -1,13 +0,0 @@
---TEST--
-Bug #21820 ("$arr['foo']" generates bogus E_NOTICE, should be E_PARSE)
---FILE--
-<?php
-
-error_reporting(E_ALL);
-
-$arr = array('foo' => 'bar');
-echo "$arr['foo']";
-
-?>
---EXPECTREGEX--
-Parse error: (parse|syntax) error, .*expecting `?T_STRING'? or `?T_VARIABLE'? or `?T_NUM_STRING'? in .*bug21820.php on line .*
diff --git a/tests/lang/bug21849.phpt b/tests/lang/bug21849.phpt
deleted file mode 100644
index 30b311320b..0000000000
--- a/tests/lang/bug21849.phpt
+++ /dev/null
@@ -1,16 +0,0 @@
---TEST--
-Bug #21849 (self::constant doesn't work as method's default parameter)
---FILE--
-<?php
-class foo {
- const bar = "fubar\n";
-
- function foo($arg = self::bar) {
- echo $arg;
- }
-}
-
-new foo();
-?>
---EXPECT--
-fubar
diff --git a/tests/lang/bug21961.phpt b/tests/lang/bug21961.phpt
deleted file mode 100644
index 24581d663e..0000000000
--- a/tests/lang/bug21961.phpt
+++ /dev/null
@@ -1,58 +0,0 @@
---TEST--
-Bug #21961 (get_parent_class() segfault)
---SKIPIF--
-<?php if (version_compare(zend_version(),'2.0.0-dev','<')) die('skip prepared for ZE2'); ?>
---FILE--
-<?php
-
-class man
-{
- public $name, $bars;
- function man()
- {
- $this->name = 'Mr. X';
- $this->bars = array();
- }
-
- function getdrunk($where)
- {
- $this->bars[] = new bar($where);
- }
-
- function getName()
- {
- return $this->name;
- }
-}
-
-class bar extends man
-{
- public $name;
-
- function bar($w)
- {
- $this->name = $w;
- }
-
- function getName()
- {
- return $this->name;
- }
-
- function whosdrunk()
- {
- $who = get_parent_class($this);
- if($who == NULL)
- {
- return 'nobody';
- }
- return eval("return ".$who.'::getName();');
- }
-}
-
-$x = new man;
-$x->getdrunk('The old Tavern');
-var_dump($x->bars[0]->whosdrunk());
-?>
---EXPECT--
-string(14) "The old Tavern"
diff --git a/tests/lang/bug22231.phpt b/tests/lang/bug22231.phpt
deleted file mode 100644
index e0297adac8..0000000000
--- a/tests/lang/bug22231.phpt
+++ /dev/null
@@ -1,40 +0,0 @@
---TEST--
-Bug #22231 (segfault when returning a global variable by reference)
---FILE--
-<?php
-class foo {
- public $fubar = 'fubar';
-}
-
-function &foo(){
- $GLOBALS['foo'] = &new foo();
- return $GLOBALS['foo'];
-}
-$bar = &foo();
-var_dump($bar);
-var_dump($bar->fubar);
-unset($bar);
-$bar = &foo();
-var_dump($bar->fubar);
-
-$foo = &foo();
-var_dump($foo);
-var_dump($foo->fubar);
-unset($foo);
-$foo = &foo();
-var_dump($foo->fubar);
-?>
---EXPECTF--
-Strict Standards: Assigning the return value of new by reference is deprecated in %s on line %d
-object(foo)#%d (1) {
- ["fubar"]=>
- string(5) "fubar"
-}
-string(5) "fubar"
-string(5) "fubar"
-object(foo)#%d (1) {
- ["fubar"]=>
- string(5) "fubar"
-}
-string(5) "fubar"
-string(5) "fubar"
diff --git a/tests/lang/bug22367.phpt b/tests/lang/bug22367.phpt
deleted file mode 100644
index 7387043f32..0000000000
--- a/tests/lang/bug22367.phpt
+++ /dev/null
@@ -1,130 +0,0 @@
---TEST--
-Bug #22367 (weird zval allocation problem)
---INI--
-zend.ze1_compatibility_mode=1
---FILE--
-<?php
-
-class foo
-{
- public $test = array(0, 1, 2, 3, 4);
-
- function a($arg) {
- var_dump(array_key_exists($arg, $this->test));
- return $this->test[$arg];
- }
-
- function b() {
- @$this->c();
-
- $zero = $this->test[0];
- $one = $this->test[1];
- $two = $this->test[2];
- $three = $this->test[3];
- $four = $this->test[4];
- return array($zero, $one, $two, $three, $four);
- }
-
- function c() {
- return $this->a($this->d());
- }
-
- function d() {}
-}
-
-class bar extends foo
-{
- public $i = 0;
- public $idx;
-
- function bar($idx) {
- $this->idx = $idx;
- }
-
- function &a($arg){
- return parent::a($arg);
- }
- function d(){
- return $this->idx;
- }
-}
-
-$a = new bar(5);
-var_dump($a->idx);
-$a->c();
-$b = $a->b();
-var_dump($b);
-var_dump($a->test);
-
-$a = new bar(2);
-var_dump($a->idx);
-@$a->c();
-$b = $a->b();
-var_dump($b);
-var_dump($a->test);
-
-?>
---EXPECTF--
-Strict Standards: Declaration of bar::a() should be compatible with that of foo::a() in %sbug22367.php on line %d
-
-Strict Standards: Implicit cloning object of class 'bar' because of 'zend.ze1_compatibility_mode' in %sbug22367.php on line %d
-int(5)
-bool(false)
-
-Notice: Undefined offset: 5 in %sbug22367.php on line %d
-
-Strict Standards: Only variable references should be returned by reference in %sbug22367.php on line %d
-bool(false)
-array(5) {
- [0]=>
- int(0)
- [1]=>
- int(1)
- [2]=>
- int(2)
- [3]=>
- int(3)
- [4]=>
- int(4)
-}
-array(5) {
- [0]=>
- int(0)
- [1]=>
- int(1)
- [2]=>
- int(2)
- [3]=>
- int(3)
- [4]=>
- int(4)
-}
-
-Strict Standards: Implicit cloning object of class 'bar' because of 'zend.ze1_compatibility_mode' in %sbug22367.php on line %d
-int(2)
-bool(true)
-bool(true)
-array(5) {
- [0]=>
- int(0)
- [1]=>
- int(1)
- [2]=>
- int(2)
- [3]=>
- int(3)
- [4]=>
- int(4)
-}
-array(5) {
- [0]=>
- int(0)
- [1]=>
- int(1)
- [2]=>
- int(2)
- [3]=>
- int(3)
- [4]=>
- int(4)
-}
diff --git a/tests/lang/bug22510.phpt b/tests/lang/bug22510.phpt
deleted file mode 100644
index ab133b8785..0000000000
--- a/tests/lang/bug22510.phpt
+++ /dev/null
@@ -1,124 +0,0 @@
---TEST--
-Bug #22510 (segfault among complex references)
---FILE--
-<?php
-class foo
-{
- public $list = array();
-
- function finalize() {
- print __CLASS__."::".__FUNCTION__."\n";
- $cl = &$this->list;
- }
-
- function &method1() {
- print __CLASS__."::".__FUNCTION__."\n";
- return @$this->foo;
- }
-
- function &method2() {
- print __CLASS__."::".__FUNCTION__."\n";
- return $this->foo;
- }
-
- function method3() {
- print __CLASS__."::".__FUNCTION__."\n";
- return @$this->foo;
- }
-}
-
-class bar
-{
- function run1() {
- print __CLASS__."::".__FUNCTION__."\n";
- $this->instance = new foo();
- $this->instance->method1($this);
- $this->instance->method1($this);
- }
-
- function run2() {
- print __CLASS__."::".__FUNCTION__."\n";
- $this->instance = new foo();
- $this->instance->method2($this);
- $this->instance->method2($this);
- }
-
- function run3() {
- print __CLASS__."::".__FUNCTION__."\n";
- $this->instance = new foo();
- $this->instance->method3($this);
- $this->instance->method3($this);
- }
-}
-
-function ouch(&$bar) {
- print __FUNCTION__."\n";
- @$a = $a;
- $bar->run1();
-}
-
-function ok1(&$bar) {
- print __FUNCTION__."\n";
- $bar->run1();
-}
-
-function ok2(&$bar) {
- print __FUNCTION__."\n";
- @$a = $a;
- $bar->run2();
-}
-
-function ok3(&$bar) {
- print __FUNCTION__."\n";
- @$a = $a;
- $bar->run3();
-}
-
-$bar = &new bar();
-ok1($bar);
-$bar->instance->finalize();
-print "done!\n";
-ok2($bar);
-$bar->instance->finalize();
-print "done!\n";
-ok3($bar);
-$bar->instance->finalize();
-print "done!\n";
-ouch($bar);
-$bar->instance->finalize();
-print "I'm alive!\n";
-?>
---EXPECTF--
-Strict Standards: Assigning the return value of new by reference is deprecated in %s on line %d
-ok1
-bar::run1
-foo::method1
-
-Strict Standards: Only variable references should be returned by reference in %s on line %d
-foo::method1
-
-Strict Standards: Only variable references should be returned by reference in %s on line %d
-foo::finalize
-done!
-ok2
-bar::run2
-foo::method2
-foo::method2
-foo::finalize
-done!
-ok3
-bar::run3
-foo::method3
-foo::method3
-foo::finalize
-done!
-ouch
-bar::run1
-foo::method1
-
-Strict Standards: Only variable references should be returned by reference in %s on line %d
-foo::method1
-
-Strict Standards: Only variable references should be returned by reference in %s on line %d
-foo::finalize
-I'm alive!
diff --git a/tests/lang/bug22592.phpt b/tests/lang/bug22592.phpt
deleted file mode 100644
index e4e68b1184..0000000000
--- a/tests/lang/bug22592.phpt
+++ /dev/null
@@ -1,53 +0,0 @@
---TEST--
-Bug #22592 (cascading assignments to strings with curly braces broken)
---FILE--
-<?php
-function error_hdlr($errno, $errstr) {
- echo "[$errstr]\n";
-}
-
-set_error_handler('error_hdlr');
-
-$i = 4;
-$s = "string";
-
-$result = "* *-*";
-var_dump($result);
-$result{6} = '*';
-var_dump($result);
-$result{1} = $i;
-var_dump($result);
-$result{3} = $s;
-var_dump($result);
-$result{7} = 0;
-var_dump($result);
-$a = $result{1} = $result{3} = '-';
-var_dump($result);
-$b = $result{3} = $result{5} = $s;
-var_dump($result);
-$c = $result{0} = $result{2} = $result{4} = $i;
-var_dump($result);
-$d = $result{6} = $result{8} = 5;
-var_dump($result);
-$e = $result{1} = $result{6};
-var_dump($result);
-var_dump($a, $b, $c, $d, $e);
-$result{-1} = 'a';
-?>
---EXPECT--
-string(5) "* *-*"
-string(7) "* *-* *"
-string(7) "*4*-* *"
-string(7) "*4*s* *"
-string(8) "*4*s* *0"
-string(8) "*-*-* *0"
-string(8) "*-*s*s*0"
-string(8) "4-4s4s*0"
-string(9) "4-4s4s505"
-string(9) "454s4s505"
-string(1) "-"
-string(6) "string"
-int(4)
-int(5)
-string(1) "5"
-[Illegal string offset: -1]
diff --git a/tests/lang/bug22690.phpt b/tests/lang/bug22690.phpt
deleted file mode 100644
index 6aed5be6e9..0000000000
--- a/tests/lang/bug22690.phpt
+++ /dev/null
@@ -1,12 +0,0 @@
---TEST--
-Bug #22690 (ob_start() is broken with create_function() callbacks)
---FILE--
-<?php
- $foo = create_function('$s', 'return strtoupper($s);');
- ob_start($foo);
- echo $foo("bar\n");
-?>
-bar
---EXPECT--
-BAR
-BAR
diff --git a/tests/lang/bug23279.phpt b/tests/lang/bug23279.phpt
deleted file mode 100644
index 78d7850ff4..0000000000
--- a/tests/lang/bug23279.phpt
+++ /dev/null
@@ -1,16 +0,0 @@
---TEST--
-Bug #23279 (exception handler stops after first function call)
---FILE--
-<?php
-ob_start();
-set_exception_handler('redirect_on_error');
-echo "Hello World\n";
-throw new Exception;
-
-function redirect_on_error($e) {
- ob_end_clean();
- echo "Goodbye Cruel World\n";
-}
-?>
---EXPECT--
-Goodbye Cruel World
diff --git a/tests/lang/bug23384.phpt b/tests/lang/bug23384.phpt
deleted file mode 100644
index 382bdfe90f..0000000000
--- a/tests/lang/bug23384.phpt
+++ /dev/null
@@ -1,33 +0,0 @@
---TEST--
-Bug #23384 (use of class constants in statics)
---INI--
-error_reporting=4095
---FILE--
-<?php
-define('TEN', 10);
-class Foo {
- const HUN = 100;
- function test($x = Foo::HUN) {
- static $arr2 = array(TEN => 'ten');
- static $arr = array(Foo::HUN => 'ten');
-
- print_r($arr);
- print_r($arr2);
- print_r($x);
- }
-}
-
-Foo::test();
-echo Foo::HUN."\n";
-?>
---EXPECTF--
-Strict Standards: Non-static method Foo::test() should not be called statically in %sbug23384.php on line %d
-Array
-(
- [100] => ten
-)
-Array
-(
- [10] => ten
-)
-100100
diff --git a/tests/lang/bug23489.phpt b/tests/lang/bug23489.phpt
deleted file mode 100644
index 645bb1b7df..0000000000
--- a/tests/lang/bug23489.phpt
+++ /dev/null
@@ -1,23 +0,0 @@
---TEST--
-Bug #23489 (ob_start() is broken with method callbacks)
---FILE--
-<?php
-class Test {
- function Test() {
- ob_start(
- array(
- $this, 'transform'
- )
- );
- }
-
- function transform($buffer) {
- return 'success';
- }
-}
-
-$t = new Test;
-?>
-failure
---EXPECT--
-success
diff --git a/tests/lang/bug23524.phpt b/tests/lang/bug23524.phpt
deleted file mode 100755
index 18ffc33a48..0000000000
--- a/tests/lang/bug23524.phpt
+++ /dev/null
@@ -1,29 +0,0 @@
---TEST--
-Bug #23524 Improper handling of constants in array indeces
---FILE--
-<?php
- echo "Begin\n";
- define("THE_CONST",123);
- function f($a=array(THE_CONST=>THE_CONST)) {
- print_r($a);
- }
- f();
- f();
- f();
- echo "Done";
-?>
---EXPECT--
-Begin
-Array
-(
- [123] => 123
-)
-Array
-(
- [123] => 123
-)
-Array
-(
- [123] => 123
-)
-Done
diff --git a/tests/lang/bug23584.phpt b/tests/lang/bug23584.phpt
deleted file mode 100644
index 417cfb0856..0000000000
--- a/tests/lang/bug23584.phpt
+++ /dev/null
@@ -1,13 +0,0 @@
---TEST--
-Bug #23584 (error line numbers off by one when using #!php)
---FILE--
-#!php
-<?php
-
-error_reporting(E_ALL);
-
-echo $foo;
-
-?>
---EXPECTREGEX--
-Notice: Undefined variable:.*foo in .* on line 6
diff --git a/tests/lang/bug23624.phpt b/tests/lang/bug23624.phpt
deleted file mode 100644
index 4ddb82e8c6..0000000000
--- a/tests/lang/bug23624.phpt
+++ /dev/null
@@ -1,12 +0,0 @@
---TEST--
-Bug #23624 (foreach leaves current array key as null)
---FILE--
-<?php
- $arr = array ('one', 'two', 'three');
- var_dump(current($arr));
- foreach($arr as $key => $value);
- var_dump(current($arr));
-?>
---EXPECT--
-string(3) "one"
-bool(false)
diff --git a/tests/lang/bug23922.phpt b/tests/lang/bug23922.phpt
deleted file mode 100644
index 1fc6e548ff..0000000000
--- a/tests/lang/bug23922.phpt
+++ /dev/null
@@ -1,20 +0,0 @@
---TEST--
-Bug #23922 (scope doesn't properly propagate into internal functions)
---FILE--
-<?php
- class foo
- {
- public $foo = 1;
-
- function as_string()
- { assert('$this->foo == 1'); }
-
- function as_expr()
- { assert($this->foo == 1); }
- }
-
- $foo = new foo();
- $foo->as_expr();
- $foo->as_string();
-?>
---EXPECT--
diff --git a/tests/lang/bug24054.phpt b/tests/lang/bug24054.phpt
deleted file mode 100644
index fc51c83d77..0000000000
--- a/tests/lang/bug24054.phpt
+++ /dev/null
@@ -1,24 +0,0 @@
---TEST--
-Bug #24054 (Assignment operator *= broken)
---FILE--
-<?php // $Id$
-
-define('LONG_MAX', is_int(5000000000)? 9223372036854775807 : 0x7FFFFFFF);
-define('LONG_MIN', -LONG_MAX - 1);
-printf("%d,%d,%d,%d\n",is_int(LONG_MIN ),is_int(LONG_MAX ),
- is_int(LONG_MIN-1),is_int(LONG_MAX+1));
-
- $i = LONG_MAX;
-
- $j = $i * 1001;
- $i *= 1001;
-
-$tests = <<<TESTS
-$i === $j
-TESTS;
-
-include(dirname(__FILE__) . '/../quicktester.inc');
-
---EXPECT--
-1,1,0,0
-OK
diff --git a/tests/lang/bug24396.phpt b/tests/lang/bug24396.phpt
deleted file mode 100644
index b78e4b8757..0000000000
--- a/tests/lang/bug24396.phpt
+++ /dev/null
@@ -1,19 +0,0 @@
---TEST--
-Bug #24396 (global $$variable broken)
---FILE--
-<?php
-
-$arr = array('a' => 1, 'b' => 2, 'c' => 3);
-
-foreach($arr as $k=>$v) {
- global $$k; // comment this out and it works in PHP 5 too..
-
- echo "($k => $v)\n";
-
- $$k = $v;
-}
-?>
---EXPECT--
-(a => 1)
-(b => 2)
-(c => 3)
diff --git a/tests/lang/bug24403.phpt b/tests/lang/bug24403.phpt
deleted file mode 100644
index fe99257d3d..0000000000
--- a/tests/lang/bug24403.phpt
+++ /dev/null
@@ -1,20 +0,0 @@
---TEST--
-Bug #24403 (scope doesn't properly propagate into internal functions)
---FILE--
-<?php
-class a
-{
- public $a = array();
-
- function a()
- {
- $output = preg_replace(
- '!\{\s*([a-z0-9_]+)\s*\}!sie',
- "(in_array('\\1',\$this->a) ? '\'.\$p[\'\\1\'].\'' :
-'\'.\$r[\'\\1\'].\'')",
- "{a} b {c}");
- }
-}
-new a();
-?>
---EXPECT--
diff --git a/tests/lang/bug24436.phpt b/tests/lang/bug24436.phpt
deleted file mode 100644
index b0cfbe0931..0000000000
--- a/tests/lang/bug24436.phpt
+++ /dev/null
@@ -1,15 +0,0 @@
---TEST--
-Bug #24436 (isset() and empty() produce errors with non-existent variables in objects)
---FILE--
-<?php
-class test {
- function __construct() {
- if (empty($this->test[0][0])) { print "test1";}
- if (!isset($this->test[0][0])) { print "test2";}
- }
-}
-
-$test1 = new test();
-?>
---EXPECT--
-test1test2
diff --git a/tests/lang/bug24499.phpt b/tests/lang/bug24499.phpt
deleted file mode 100755
index 6ce56dbad7..0000000000
--- a/tests/lang/bug24499.phpt
+++ /dev/null
@@ -1,24 +0,0 @@
---TEST--
-Bug #24499 (bogus handling of a public property as a private one)
---FILE--
-<?php
-class Id {
- private $id="priv";
-
- public function tester($obj)
- {
- $obj->id = "bar";
- }
-}
-
-$id = new Id();
-@$obj->foo = "bar";
-$id->tester($obj);
-print_r($obj);
-?>
---EXPECT--
-stdClass Object
-(
- [foo] => bar
- [id] => bar
-)
diff --git a/tests/lang/bug24573.phpt b/tests/lang/bug24573.phpt
deleted file mode 100644
index e087d1fb2c..0000000000
--- a/tests/lang/bug24573.phpt
+++ /dev/null
@@ -1,24 +0,0 @@
---TEST--
-Bug #24573 (debug_backtrace() crashes if $this is set to null)
---FILE--
-<?php
-
-class Foo {
- function Bar() {
- $__this = $this;
- $this = null;
- debug_backtrace();
- $this = $__this;
- }
-}
-
-$f = new Foo;
-
-$f->Bar();
-
-echo "OK\n";
-
-?>
---EXPECTF--
-
-Fatal error: Cannot re-assign $this in %s on line %d \ No newline at end of file
diff --git a/tests/lang/bug24640.phpt b/tests/lang/bug24640.phpt
deleted file mode 100755
index 3cd3c4a595..0000000000
--- a/tests/lang/bug24640.phpt
+++ /dev/null
@@ -1,63 +0,0 @@
---TEST--
-Bug #24640 (var_export and var_dump can't output large float)
---FILE--
-<?php
-function test($v)
-{
- echo var_export($v, true) . "\n";
- var_dump($v);
- echo "$v\n";
- print_r($v);
- echo "\n------\n";
-}
-
-test(1.7e+300);
-test(1.7e-300);
-test(1.7e+79);
-test(1.7e-79);
-test(1.7e+80);
-test(1.7e-80);
-test(1.7e+81);
-test(1.7e-81);
-?>
---EXPECT--
-1.7E+300
-float(1.7E+300)
-1.7E+300
-1.7E+300
-------
-1.7E-300
-float(1.7E-300)
-1.7E-300
-1.7E-300
-------
-1.7E+79
-float(1.7E+79)
-1.7E+79
-1.7E+79
-------
-1.7E-79
-float(1.7E-79)
-1.7E-79
-1.7E-79
-------
-1.7E+80
-float(1.7E+80)
-1.7E+80
-1.7E+80
-------
-1.7E-80
-float(1.7E-80)
-1.7E-80
-1.7E-80
-------
-1.7E+81
-float(1.7E+81)
-1.7E+81
-1.7E+81
-------
-1.7E-81
-float(1.7E-81)
-1.7E-81
-1.7E-81
-------
diff --git a/tests/lang/bug24652.phpt b/tests/lang/bug24652.phpt
deleted file mode 100755
index 3bcea0e1d2..0000000000
--- a/tests/lang/bug24652.phpt
+++ /dev/null
@@ -1,31 +0,0 @@
---TEST--
-Bug #24652 (broken array_flip())
---FILE--
-<?php
- /* This works */
- $f = array('7' => 0);
- var_dump($f);
- var_dump(array_key_exists(7, $f));
- var_dump(array_key_exists('7', $f));
-
- print "----------\n";
- /* This doesn't */
- $f = array_flip(array('7'));
- var_dump($f);
- var_dump(array_key_exists(7, $f));
- var_dump(array_key_exists('7', $f));
-?>
---EXPECT--
-array(1) {
- [7]=>
- int(0)
-}
-bool(true)
-bool(true)
-----------
-array(1) {
- [7]=>
- int(0)
-}
-bool(true)
-bool(true)
diff --git a/tests/lang/bug24658.phpt b/tests/lang/bug24658.phpt
deleted file mode 100644
index 399fd32cac..0000000000
--- a/tests/lang/bug24658.phpt
+++ /dev/null
@@ -1,56 +0,0 @@
---TEST--
-Bug #24658 (combo of typehint / reference causes crash)
---FILE--
-<?php
-class foo {}
-function no_typehint($a) {
- var_dump($a);
-}
-function typehint(foo $a) {
- var_dump($a);
-}
-function no_typehint_ref(&$a) {
- var_dump($a);
-}
-function typehint_ref(foo &$a) {
- var_dump($a);
-}
-$v = new foo();
-$a = array(new foo(), 1, 2);
-no_typehint($v);
-typehint($v);
-no_typehint_ref($v);
-typehint_ref($v);
-echo "===no_typehint===\n";
-array_walk($a, 'no_typehint');
-echo "===no_typehint_ref===\n";
-array_walk($a, 'no_typehint_ref');
-echo "===typehint===\n";
-array_walk($a, 'typehint');
-echo "===typehint_ref===\n";
-array_walk($a, 'typehint_ref');
-?>
---EXPECTF--
-object(foo)#%d (0) {
-}
-object(foo)#%d (0) {
-}
-object(foo)#%d (0) {
-}
-object(foo)#%d (0) {
-}
-===no_typehint===
-object(foo)#%d (0) {
-}
-int(1)
-int(2)
-===no_typehint_ref===
-object(foo)#%d (0) {
-}
-int(1)
-int(2)
-===typehint===
-object(foo)#%d (0) {
-}
-
-Fatal error: Argument 1 must be an object of class foo in %s on line %d
diff --git a/tests/lang/bug24783.phpt b/tests/lang/bug24783.phpt
deleted file mode 100644
index 8c8cd6ee01..0000000000
--- a/tests/lang/bug24783.phpt
+++ /dev/null
@@ -1,13 +0,0 @@
---TEST--
-Bug #24783 ($key not binary safe in "foreach($arr as $key => $val)")
---FILE--
-<?php
-error_reporting(E_ALL);
- $arr = array ("foo\0bar" => "foo\0bar");
- foreach ($arr as $key => $val) {
- echo strlen($key), ': ';
- echo urlencode($key), ' => ', urlencode($val), "\n";
- }
-?>
---EXPECT--
-7: foo%00bar => foo%00bar
diff --git a/tests/lang/bug24908.phpt b/tests/lang/bug24908.phpt
deleted file mode 100755
index 30056abf3c..0000000000
--- a/tests/lang/bug24908.phpt
+++ /dev/null
@@ -1,18 +0,0 @@
---TEST--
-Bug #24908 (super-globals can not be used in __destruct())
---INI--
-variables_order=GPS
---FILE--
-<?php
-class test {
- function __construct() {
- if (count($_SERVER)) echo "O";
- }
- function __destruct() {
- if (count($_SERVER)) echo "K\n";
- }
-}
-$test = new test();
-?>
---EXPECT--
-OK
diff --git a/tests/lang/bug24926.phpt b/tests/lang/bug24926.phpt
deleted file mode 100644
index 3d2cc7008b..0000000000
--- a/tests/lang/bug24926.phpt
+++ /dev/null
@@ -1,28 +0,0 @@
---TEST--
-Bug #24926 (lambda function (create_function()) cannot be stored in a class property)
---FILE--
-<?php
-
-error_reporting (E_ALL);
-
-class foo {
-
- public $functions = array();
-
- function foo()
- {
- $function = create_function('', 'return "FOO\n";');
- print($function());
-
- $this->functions['test'] = $function;
- print($this->functions['test']()); // werkt al niet meer
-
- }
-}
-
-$a = new foo ();
-
-?>
---EXPECT--
-FOO
-FOO
diff --git a/tests/lang/bug24951.phpt b/tests/lang/bug24951.phpt
deleted file mode 100644
index aa48ab2936..0000000000
--- a/tests/lang/bug24951.phpt
+++ /dev/null
@@ -1,42 +0,0 @@
---TEST--
-Bug #24951 (ob_flush() destroys output handler)
---FILE--
-<?php
-function test($s, $mode)
-{
- return (($mode & PHP_OUTPUT_HANDLER_START)?"[":"") . $s . (($mode & PHP_OUTPUT_HANDLER_END)?"]\n":"");
-}
-function t1()
-{
- ob_start("test");
- echo "Hello from t1 1 ";
- echo "Hello from t1 2 ";
- ob_end_flush();
-}
-function t2()
-{
- ob_start("test");
- echo "Hello from t2 1 ";
- ob_flush();
- echo "Hello from t2 2 ";
- ob_end_flush();
-}
-function t3()
-{
- ob_start("test");
- echo "Hello from t3 1 ";
- ob_clean();
- echo "Hello from t3 2 ";
- ob_end_flush();
-}
-
-t1(); echo "\n";
-t2(); echo "\n";
-t3(); echo "\n";
-?>
---EXPECT--
-[Hello from t1 1 Hello from t1 2 ]
-
-[Hello from t2 1 Hello from t2 2 ]
-
-Hello from t3 2 ]
diff --git a/tests/lang/bug25145.phpt b/tests/lang/bug25145.phpt
deleted file mode 100755
index e33580ab0d..0000000000
--- a/tests/lang/bug25145.phpt
+++ /dev/null
@@ -1,22 +0,0 @@
---TEST--
-Bug #25145 (SEGV on recpt of form input with name like "123[]")
---SKIPIF--
-<?php if (php_sapi_name() == 'cli') echo 'skip'; ?>
---GET--
-123[]=SEGV
---FILE--
-<?php
-
-var_dump($_REQUEST);
-echo "Done\n";
-
-?>
---EXPECT--
-array(1) {
- [123]=>
- array(1) {
- [0]=>
- string(4) "SEGV"
- }
-}
-Done
diff --git a/tests/lang/bug25547.phpt b/tests/lang/bug25547.phpt
deleted file mode 100755
index cce556ceb9..0000000000
--- a/tests/lang/bug25547.phpt
+++ /dev/null
@@ -1,30 +0,0 @@
---TEST--
-Bug #25547 (error_handler and array index with function call)
---FILE--
-<?php
-
-function handler($errno, $errstr, $errfile, $errline, $context)
-{
- echo __FUNCTION__ . "($errstr)\n";
-}
-
-set_error_handler('handler');
-
-function foo($x) {
- return "foo";
-}
-
-$output = array();
-++$output[foo("bar")];
-
-print_r($output);
-
-echo "Done";
-?>
---EXPECT--
-handler(Undefined index: foo)
-Array
-(
- [foo] => 1
-)
-Done
diff --git a/tests/lang/bug25652.phpt b/tests/lang/bug25652.phpt
deleted file mode 100755
index 09cfc18197..0000000000
--- a/tests/lang/bug25652.phpt
+++ /dev/null
@@ -1,22 +0,0 @@
---TEST--
-Bug #25652 (Calling Global functions dynamically fails from Class scope)
---FILE--
-<?php
-
- function testfunc ($var) {
- echo "testfunc $var\n";
- }
-
- class foo {
- public $arr = array('testfunc');
- function bar () {
- $this->arr[0]('testvalue');
- }
- }
-
- $a = new foo ();
- $a->bar ();
-
-?>
---EXPECT--
-testfunc testvalue
diff --git a/tests/lang/bug25922.phpt b/tests/lang/bug25922.phpt
deleted file mode 100755
index 0588eef949..0000000000
--- a/tests/lang/bug25922.phpt
+++ /dev/null
@@ -1,21 +0,0 @@
---TEST--
-Bug #25922 (SEGV in error_handler when context is destroyed)
---INI--
-error_reporting=2047
---FILE--
-<?php
-function my_error_handler($error, $errmsg='', $errfile='', $errline=0, $errcontext='')
-{
- $errcontext = '';
-}
-
-set_error_handler('my_error_handler');
-
-function test()
-{
- echo "Undefined index here: '{$data['HTTP_HEADER']}'\n";
-}
-test();
-?>
---EXPECT--
-Undefined index here: ''
diff --git a/tests/lang/bug26182.phpt b/tests/lang/bug26182.phpt
deleted file mode 100644
index 7417293928..0000000000
--- a/tests/lang/bug26182.phpt
+++ /dev/null
@@ -1,25 +0,0 @@
---TEST--
-Bug #26182 (Object properties created redundantly)
---INI--
-error_reporting=4095
---FILE--
-<?php
-
-class A {
- function NotAConstructor ()
- {
- if (isset($this->x)) {
- //just for demo
- }
- }
-}
-
-$t = new A ();
-
-print_r($t);
-
-?>
---EXPECT--
-A Object
-(
-)
diff --git a/tests/lang/bug26696.phpt b/tests/lang/bug26696.phpt
deleted file mode 100644
index e51978b3d2..0000000000
--- a/tests/lang/bug26696.phpt
+++ /dev/null
@@ -1,28 +0,0 @@
---TEST--
-Bug #26696 (string index in a switch() crashes with multiple matches)
---FILE--
-<?php
-
-$str = 'asdd/?';
-$len = strlen($str);
-for ($i = 0; $i < $len; $i++) {
- switch ($str{$i}) {
- case '?':
- echo "OK\n";
- break;
- }
-}
-
-$str = '*';
-switch ($str{0}) {
- case '*';
- echo "OK\n";
- break;
- default:
- echo 'Default RAN!';
-}
-
-?>
---EXPECT--
-OK
-OK
diff --git a/tests/lang/bug26866.phpt b/tests/lang/bug26866.phpt
deleted file mode 100644
index abb99c34fd..0000000000
--- a/tests/lang/bug26866.phpt
+++ /dev/null
@@ -1,25 +0,0 @@
---TEST--
-Bug #26866 (segfault when exception raised in __get)
---FILE--
-<?php
-class bar {
- function get_name() {
- return 'bar';
- }
-}
-class foo {
- function __get($sName) {
- throw new Exception('Exception!');
- return new bar();
- }
-}
-$foo = new foo();
-try {
- echo $foo->bar->get_name();
-}
-catch (Exception $E) {
- echo "Exception raised!\n";
-}
-?>
---EXPECT--
-Exception raised!
diff --git a/tests/lang/bug26869.phpt b/tests/lang/bug26869.phpt
deleted file mode 100644
index 77dd2592ed..0000000000
--- a/tests/lang/bug26869.phpt
+++ /dev/null
@@ -1,15 +0,0 @@
---TEST--
-Bug #26869 (constant as the key of static array)
---FILE--
-<?php
- define("A", "1");
- static $a=array(A => 1);
- var_dump($a);
- var_dump(isset($a[A]));
-?>
---EXPECT--
-array(1) {
- [1]=>
- int(1)
-}
-bool(true)
diff --git a/tests/lang/bug27354.phpt b/tests/lang/bug27354.phpt
deleted file mode 100644
index e10ad9c924..0000000000
--- a/tests/lang/bug27354.phpt
+++ /dev/null
@@ -1,14 +0,0 @@
---TEST--
-Bug #27354 (Modulus operator crashes PHP)
---FILE--
-<?php
- var_dump(-2147483647 % -1);
- var_dump(-2147483649 % -1);
- var_dump(-2147483648 % -1);
- var_dump(-2147483648 % -2);
-?>
---EXPECTF--
-int(%i)
-int(%i)
-int(%i)
-int(%i)
diff --git a/tests/lang/bug27439.phpt b/tests/lang/bug27439.phpt
deleted file mode 100755
index 81ff934069..0000000000
--- a/tests/lang/bug27439.phpt
+++ /dev/null
@@ -1,74 +0,0 @@
---TEST--
-Bug #27439 (foreach() with $this segfaults)
---FILE--
-<?php
-
-class test_props {
- public $a = 1;
- public $b = 2;
- public $c = 3;
-}
-
-class test {
- public $array = array(1,2,3);
- public $string = "string";
-
- public function __construct() {
- $this->object = new test_props;
- }
-
- public function getArray() {
- return $this->array;
- }
-
- public function getString() {
- return $this->string;
- }
-
- public function case1() {
- foreach ($this->array as $foo) {
- echo $foo;
- }
- }
-
- public function case2() {
- foreach ($this->foobar as $foo);
- }
-
- public function case3() {
- foreach ($this->string as $foo);
- }
-
- public function case4() {
- foreach ($this->getArray() as $foo);
- }
-
- public function case5() {
- foreach ($this->getString() as $foo);
- }
-
- public function case6() {
- foreach ($this->object as $foo) {
- echo $foo;
- }
- }
-}
-$test = new test();
-$test->case1();
-$test->case2();
-$test->case3();
-$test->case4();
-$test->case5();
-$test->case6();
-echo "\n";
-echo "===DONE===";
-?>
---EXPECTF--
-123
-Warning: Invalid argument supplied for foreach() in %s on line %d
-
-Warning: Invalid argument supplied for foreach() in %s on line %d
-
-Warning: Invalid argument supplied for foreach() in %s on line %d
-123
-===DONE===
diff --git a/tests/lang/bug27443.phpt b/tests/lang/bug27443.phpt
deleted file mode 100644
index 409794331b..0000000000
--- a/tests/lang/bug27443.phpt
+++ /dev/null
@@ -1,8 +0,0 @@
---TEST--
-Bug #27443 (defined() returns wrong type)
---FILE--
-<?php
-echo gettype(defined('test'));
-?>
---EXPECT--
-boolean
diff --git a/tests/lang/bug27535.phpt b/tests/lang/bug27535.phpt
deleted file mode 100644
index a6ceae7463..0000000000
--- a/tests/lang/bug27535.phpt
+++ /dev/null
@@ -1,28 +0,0 @@
---TEST--
-Bug #27535 (Objects pointing to each other cause Apache to crash)
---FILE--
-<?php
-
-class Class1
-{
- public $_Class2_obj;
-}
-
-class Class2
-{
- public $storage = '';
-
- function Class2()
- {
- $this->storage = new Class1();
-
- $this->storage->_Class2_obj = $this;
- }
-}
-
-$foo = new Class2();
-
-?>
-Alive!
---EXPECT--
-Alive!
diff --git a/tests/lang/bug28213.phpt b/tests/lang/bug28213.phpt
deleted file mode 100644
index 3677d4c6f3..0000000000
--- a/tests/lang/bug28213.phpt
+++ /dev/null
@@ -1,10 +0,0 @@
---TEST--
-Bug #28213 (crash in debug_print_backtrace in static methods)
---FILE--
-<?php
-class FooBar { static function error() { debug_print_backtrace(); } }
-set_error_handler(array('FooBar', 'error'));
-include('foobar.php');
-?>
---EXPECTREGEX--
-.*#1\s*include.*
diff --git a/tests/lang/bug28800.phpt b/tests/lang/bug28800.phpt
deleted file mode 100644
index f81ad7fec9..0000000000
--- a/tests/lang/bug28800.phpt
+++ /dev/null
@@ -1,17 +0,0 @@
---TEST--
-Bug #28800 (Incorrect string to number conversion for strings starting with 'inf')
---FILE--
-<?php
- $strings = array('into', 'info', 'inf', 'infinity', 'infin', 'inflammable');
- foreach ($strings as $v) {
- echo ($v+0)."\n";
- }
-?>
---EXPECT--
-0
-0
-0
-0
-0
-0
-
diff --git a/tests/lang/bug29566.phpt b/tests/lang/bug29566.phpt
deleted file mode 100755
index 5f292bd759..0000000000
--- a/tests/lang/bug29566.phpt
+++ /dev/null
@@ -1,16 +0,0 @@
---TEST--
-Bug #29566 (foreach/string handling strangeness)
---FILE--
-<?php
-$var="This is a string";
-
-$dummy="";
-unset($dummy);
-
-foreach($var['nosuchkey'] as $v) {
-}
-?>
-===DONE===
---EXPECTF--
-Warning: Invalid argument supplied for foreach() in %sbug29566.php on line %d
-===DONE===
diff --git a/tests/lang/bug29893.phpt b/tests/lang/bug29893.phpt
deleted file mode 100755
index d320de0ee7..0000000000
--- a/tests/lang/bug29893.phpt
+++ /dev/null
@@ -1,11 +0,0 @@
---TEST--
-Bug #29893 (segfault when using array as index)
---FILE--
-<?php
-$base = 50;
-$base[$base] -= 0;
-?>
-===DONE===
---EXPECTF--
-Warning: Cannot use a scalar value as an array in %sbug29893.php on line %d
-===DONE===
diff --git a/tests/lang/bug29944.phpt b/tests/lang/bug29944.phpt
deleted file mode 100755
index 7882936f08..0000000000
--- a/tests/lang/bug29944.phpt
+++ /dev/null
@@ -1,20 +0,0 @@
---TEST--
-Bug #29944 (function defined in switch crashes PHP)
---FILE--
-<?PHP
-$a = 1;
-$b = "1";
-switch ($a) {
- case 1:
- function foo($bar) {
- if (preg_match('/\d/', $bar)) return true;
- return false;
- }
- echo foo($b);
-}
-?>
-
-===DONE===
---EXPECT--
-1
-===DONE===
diff --git a/tests/lang/bug7515.phpt b/tests/lang/bug7515.phpt
deleted file mode 100644
index b33ae24c89..0000000000
--- a/tests/lang/bug7515.phpt
+++ /dev/null
@@ -1,36 +0,0 @@
---TEST--
-Bug #7515 (weird & invisible referencing of objects)
---SKIPIF--
-<?php if(version_compare(zend_version(), "2.0.0-dev", '<')) echo "skip Zend Engine 2 needed\n"; ?>
---INI--
-error_reporting=2039
---FILE--
-<?php
-class obj {
- function method() {}
-}
-
-$o->root=new obj();
-
-ob_start();
-var_dump($o);
-$x=ob_get_contents();
-ob_end_clean();
-
-$o->root->method();
-
-ob_start();
-var_dump($o);
-$y=ob_get_contents();
-ob_end_clean();
-if ($x == $y) {
- print "success";
-} else {
- print "failure
-x=$x
-y=$y
-";
-}
-?>
---EXPECT--
-success
diff --git a/tests/lang/each_binary_safety.phpt b/tests/lang/each_binary_safety.phpt
deleted file mode 100644
index bb13534546..0000000000
--- a/tests/lang/each_binary_safety.phpt
+++ /dev/null
@@ -1,13 +0,0 @@
---TEST--
-Binary safety of each() for both keys and values
---FILE--
-<?php
-error_reporting(E_ALL);
-$arr = array ("foo\0bar" => "foo\0bar");
-while (list($key, $val) = each($arr)) {
- echo strlen($key), ': ';
- echo urlencode($key), ' => ', urlencode($val), "\n";
-}
-?>
---EXPECT--
-7: foo%00bar => foo%00bar
diff --git a/tests/lang/error_2_exception_001.phpt b/tests/lang/error_2_exception_001.phpt
deleted file mode 100644
index 61f45d47d5..0000000000
--- a/tests/lang/error_2_exception_001.phpt
+++ /dev/null
@@ -1,45 +0,0 @@
---TEST--
-ZE2 errors caught as exceptions
---SKIPIF--
-<?php if (version_compare(zend_version(), '2.0.0-dev', '<')) die('skip ZendEngine 2 needed'); ?>
---FILE--
-<?php
-
-class MyException extends Exception {
- function MyException($_errno, $_errmsg) {
- $this->errno = $_errno;
- $this->errmsg = $_errmsg;
- }
-
- function getErrno() {
- return $this->errno;
- }
-
- function getErrmsg() {
- return $this->errmsg;
- }
-}
-
-function ErrorsToExceptions($errno, $errmsg) {
- throw new MyException($errno, $errmsg);
-}
-
-set_error_handler("ErrorsToExceptions");
-
-// make sure it isn't catching exceptions that weren't
-// thrown...
-
-try {
-} catch (MyException $exception) {
- echo "There was an exception: " . $exception->getErrno() . ", '" . $exception->getErrmsg() . "'\n";
-}
-
-try {
- trigger_error("I will become an exception", E_USER_ERROR);
-} catch (MyException $exception) {
- echo "There was an exception: " . $exception->getErrno() . ", '" . $exception->getErrmsg() . "'\n";
-}
-
-?>
---EXPECT--
-There was an exception: 256, 'I will become an exception'
diff --git a/tests/lang/foreach_with_object_001.phpt b/tests/lang/foreach_with_object_001.phpt
deleted file mode 100755
index 598b844fb7..0000000000
--- a/tests/lang/foreach_with_object_001.phpt
+++ /dev/null
@@ -1,25 +0,0 @@
---TEST--
-foreach() with foreach($o->mthd()->arr)
---FILE--
-<?php
-class Test {
- public $a = array(1,2,3,4,5); // removed, crash too
- function c() {
- return new Test();
- }
-
-}
-$obj = new Test();
-foreach ($obj->c()->a as $value) {
- print "$value\n";
-}
-
-?>
-===DONE===
---EXPECT--
-1
-2
-3
-4
-5
-===DONE===
diff --git a/tests/lang/foreach_with_references_001.phpt b/tests/lang/foreach_with_references_001.phpt
deleted file mode 100644
index eb52bb8c10..0000000000
--- a/tests/lang/foreach_with_references_001.phpt
+++ /dev/null
@@ -1,32 +0,0 @@
---TEST--
-foreach() with references
---FILE--
-<?php
-
-$arr = array(1 => "one", 2 => "two", 3 => "three");
-
-foreach($arr as $key => $val) {
- $val = $key;
-}
-
-print_r($arr);
-
-foreach($arr as $key => &$val) {
- $val = $key;
-}
-
-print_r($arr);
-
---EXPECT--
-Array
-(
- [1] => one
- [2] => two
- [3] => three
-)
-Array
-(
- [1] => 1
- [2] => 2
- [3] => 3
-)
diff --git a/tests/lang/type_hints_001.phpt b/tests/lang/type_hints_001.phpt
deleted file mode 100644
index 99b7fac0eb..0000000000
--- a/tests/lang/type_hints_001.phpt
+++ /dev/null
@@ -1,26 +0,0 @@
---TEST--
-ZE2 type hinting
---SKIPIF--
-<?php if (version_compare(zend_version(), '2.0.0-dev', '<')) die('skip ZendEngine 2 needed'); ?>
---FILE--
-<?php
-
-class Foo {
-}
-
-class Bar {
-}
-
-function type_hint_foo(Foo $a) {
-}
-
-$foo = new Foo;
-$bar = new Bar;
-
-type_hint_foo($foo);
-type_hint_foo($bar);
-
-?>
---EXPECTF--
-
-Fatal error: Argument 1 must be an instance of Foo in %s on line %d
diff --git a/tests/odbc-display.php b/tests/odbc-display.php
deleted file mode 100644
index f79a854aea..0000000000
--- a/tests/odbc-display.php
+++ /dev/null
@@ -1,19 +0,0 @@
-<?php
- if(($conn = odbc_connect($dsn, $dbuser, $dbpwd))){
- if(($res = odbc_do($conn, "select gif from php_test where id='$id'"))){
- odbc_binmode($res, 0);
- odbc_longreadlen($res, 0);
- if(odbc_fetch_row($res)){
- header("content-type: image/gif");
- odbc_result($res, 1);
- exit;
- }else{
- echo "Error in odbc_fetch_row";
- }
- } else {
- echo "Error in odbc_do";
- }
- } else {
- echo "Error in odbc_connect";
- }
-?>
diff --git a/tests/odbc-t1.php b/tests/odbc-t1.php
deleted file mode 100644
index 90cb97910f..0000000000
--- a/tests/odbc-t1.php
+++ /dev/null
@@ -1,38 +0,0 @@
-<HTML>
-<HEAD>
-<TITLE>Quick &amp; dirty ODBC test</TITLE>
-</HEAD>
-<BODY>
-<H1>ODBC Test 1 - Connection</H1>
-<?php
- if(isset($dbuser)){
- echo "Connecting to $dsn as $dbuser\n<P>";
- $conn = odbc_connect($dsn,$dbuser,$dbpwd);
- if(!$conn){
-?>
-<H2>Error connecting to database! Check DSN, username and password</H2>
-<?php
- }else{
-?>
-<H2>Connection successful</H2>
-<A HREF="odbc-t2.php<?php echo "?dbuser=$dbuser&dsn=$dsn&dbpwd=$dbpwd" ?>">Proceed to next test</A>
-| <A HREF="<?php echo $PHP_SELF ?>">Change login information</A>
-<?php
- }
-} else {
-?>
-<EM>You will need permisson to create tables for the following tests!</EM>
-<form action=odbc-t1.php method=post>
-<table border=0>
-<tr><td>Database (DSN): </td><td><input type=text name=dsn></td></tr>
-<tr><td>User: </td><td><input type=text name=dbuser></td></tr>
-<tr><td>Password: </td><td><input type=password name=dbpwd></td></tr>
-</table>
-<br>
-<input type=submit value=connect>
-
-</form>
-<?php
-} ?>
-</BODY>
-</HTML>
diff --git a/tests/odbc-t2.php b/tests/odbc-t2.php
deleted file mode 100644
index a500b09e8b..0000000000
--- a/tests/odbc-t2.php
+++ /dev/null
@@ -1,82 +0,0 @@
-<HTML>
-<HEAD>
-<TITLE>Quick &amp; dirty ODBC test #2</TITLE>
-</HEAD>
-<BODY>
-<H1>ODBC Test 2 - Create table</H1>
-<?php
- if(isset($dbuser)){
- echo "Connecting to $dsn as $dbuser\n";
- $conn = odbc_connect($dsn,$dbuser,$dbpwd);
- if(!$conn){
-?>
-<H2>Error connecting to database! Check DSN, username and password</H2>
-<?php
- }else{
-?>
-- OK<p>
-Dropping table "php3_test"
-<?php
- Error_Reporting(0);
- $res = odbc_exec($conn,"drop table php_test");
- if($res){
- odbc_free_result($res);
- }
-?>
-- OK<p>
-Create table "php_test"
-<?php
- error_reporting(1);
- $res = odbc_exec($conn, 'create table php_test (a char(16), b integer, c float, d varchar(128))');
- if($res){
- odbc_free_result($res);
-?>
- - OK<p>
-Table Info:<br>
-<table>
- <tr>
- <th>Name</th>
- <th>Type</th>
- <th>Length</th>
- </tr>
-<?php
- $info = odbc_exec($conn,"select * from php_test");
- $numfields = odbc_num_fields($info);
-
- for($i=1; $i<=$numfields; $i++){
-?>
- <tr>
- <td><?php echo odbc_field_name($info, $i) ?></td>
- <td><?php echo odbc_field_type($info, $i) ?></td>
- <td><?php echo odbc_field_len($info,$i) ?></td>
- </tr>
-<?php
- }
-?>
-</table>
-<P>
-<HR width=50%">
-<P>
-<A HREF="odbc-t3.php<?php echo "?dbuser=$dbuser&dsn=$dsn&dbpwd=$dbpwd" ?>">Proceed to next test</A>
-| <A HREF="<?php echo $PHP_SELF; ?>">Change login information</A>
-
-<?php
- }
- }
- } else {
-?>
-
-<form action="odbc-t3.php" method=post>
-<table border=0>
-<tr><td>Database (DSN): </td><td><input type=text name=dsn></td></tr>
-<tr><td>User: </td><td><input type=text name=dbuser></td></tr>
-<tr><td>Password: </td><td><input type=password name=dbpwd></td></tr>
-</table>
-<input type=submit value="Continue">
-</form>
-
-<?php
- }
-?>
-</BODY>
-</HTML>
diff --git a/tests/odbc-t3.php b/tests/odbc-t3.php
deleted file mode 100644
index edfdc658f8..0000000000
--- a/tests/odbc-t3.php
+++ /dev/null
@@ -1,95 +0,0 @@
-<HTML>
-<HEAD>
-<TITLE>Database test #3</TITLE>
-</HEAD>
-<BODY>
-<H1>ODBC Test 3 - Insert records</H1>
-<?php
- if(isset($dbuser)){
- echo "Connecting to $dsn as $dbuser\n";
- $conn = odbc_connect($dsn,$dbuser,$dbpwd);
- if(!$conn){
-?>
-<H2>Error connecting to database! Check DSN, username and password</H2>
-<?php
- }else{
-?>
- - OK<p>
-Clearing table "php_test"
-<?php
- error_reporting(0);
- $res=odbc_exec($conn,"delete from php_test");
- odbc_free_result($res);
- error_reporting(1);
-?>
- - OK<p>
-Inserting into table "php_test"
-<?php
- $sqlfloat = '00.0';
- $sqlint = 1000;
- $stmt = odbc_prepare($conn, "insert into php_test values(?,?,?,?)");
- for($i=1; $i<=5; $i++){
- $values[0] = "test-$i";
- $values[1] = $sqlint + $i;
- $values[2] = $i . $sqlfloat . $i;
- $values[3] = "php - values $i";
- $ret = odbc_execute($stmt, &$values);
- }
- odbc_free_result($stmt);
- $res = odbc_exec($conn, "select count(*) from php_test");
- if($res && (odbc_result($res, 1) == 5)){
- odbc_free_result($res);
-?>
- - OK<p>
-<H3>The table "php_test" should now contain the following values:</H3>
-<table>
- <tr>
- <th>A</th><th>B</th><th>C</th><th>D</th>
- </tr>
- <tr>
- <td>test-1</td><td>1001</td><td>100.01</td><td>php - values 1</td>
- </tr>
- <tr>
- <td>test-2</td><td>1002</td><td>200.02</td><td>php - values 2</td>
- </tr>
- <tr>
- <td>test-3</td><td>1003</td><td>300.03</td><td>php - values 3</td>
- </tr>
- <tr>
- <td>test-4</td><td>1004</td><td>400.04</td><td>php - values 4</td>
- </tr>
- <tr>
- <td>test-5</td><td>1005</td><td>500.05</td><td>php - values 5</td>
- </tr>
-</table>
-
-<H3>Actual contents of table "php_test":</H3>
-<?php
- $res = odbc_exec($conn, "select * from php_test");
- odbc_result_all($res);
- }
-?>
-<p>
- <HR width="50%">
-<p>
-<A HREF="odbc-t4.php?dbuser=<?php echo "$dbuser&dsn=$dsn&dbpwd=$dbpwd" ?>">Proceed to next test</A>
-| <A HREF="<?php echo $PHP_SELF ?>">Change login information</A>
-<?php
- }
- } else {
-?>
-<form action=odbc-t3.php method=post>
-<table border=0>
- <tr><td>Database: </td><td><input type=text name=dsn></td></tr>
- <tr><td>User: </td><td><input type=text name=dbuser></td></tr>
- <tr><td>Password: </td><td><input type=password name=dbpwd></td></tr>
-</table>
-<input type=submit value=connect>
-
-</form>
-<?php
- }
-?>
-</BODY>
-</HTML>
-
diff --git a/tests/odbc-t4.php b/tests/odbc-t4.php
deleted file mode 100644
index 10e8f4b2d9..0000000000
--- a/tests/odbc-t4.php
+++ /dev/null
@@ -1,91 +0,0 @@
-<HTML>
-<HEAD>
-<TITLE>Database test #4</TITLE>
-</HEAD>
-<BODY>
-<H1>ODBC Test 4 - Cursors</H1>
-<em>The following test requires your ODBC driver to support positioned updates</em><p>
-<?php
- if(isset($dbuser)){
- echo "Connecting to $dsn as $dbuser\n";
- $conn = odbc_connect($dsn,$dbuser,$dbpwd);
- if(!$conn){
-?>
-<H2>Error connecting to database! Check DSN, username and password</H2>
-<?php
- }else{
-?>
- - OK<p>
-Updating table "php_test"
-<?php
- odbc_autocommit($conn, 0);
- if(($result = odbc_do($conn, 'select * from php_test where b>1002 for update'))){
- $cursor = odbc_cursor($result);
- if(($upd = odbc_prepare($conn,"update php_test set a=?, b=? where current of $cursor"))){
- while(odbc_fetch_row($result)) {
- $params[0] = odbc_result($result, 1) . "(*)";
- $params[1] = odbc_result($result, 2) + 2000;
- odbc_execute($upd, $params);
- }
- odbc_commit($conn);
- }
- }
- if($result && $upd){
-?>
- - OK<p>
-<H3>The table "php_test" should now contain the following values:</H3>
-<table>
- <tr>
- <th>A</th><th>B</th><th>C</th><th>D</th>
- </tr>
- <tr>
- <td>test-1</td><td>1001</td><td>100.01</td><td>php3 - values 1</td>
- </tr>
- <tr>
- <td>test-2</td><td>1002</td><td>200.02</td><td>php - values 2</td>
- </tr>
- <tr>
- <td>test-3(*)</td><td>3003</td><td>300.03</td><td>php - values 3</td>
- </tr>
- <tr>
- <td>test-4(*)</td><td>3004</td><td>400.04</td><td>php - values 4</td>
- </tr>
- <tr>
- <td>test-5(*)</td><td>3005</td><td>500.05</td><td>php - values 5</td>
- </tr>
- <tr>
- <td colspan=4>
- <small><em><strong>Note:</strong> If you reload this testpage,<br>
- the three last rows will contain different<br>values in columns A and B</em></small>
- </td>
- </tr>
-</table>
-
-<H3>Actual contents of table "php_test":</H3>
-<?php
- $res = odbc_exec($conn,"select * from php_test");
- odbc_result_all($res);
- }else{
- echo "Your driver obviously doesn't support positioned updates\n<p>";
- }
-?>
-<p><HR width="50%"><p>
-<A HREF="odbc-t5.php?dbuser=<?php echo "$dbuser&dsn=$dsn&dbpwd=$dbpwd"; ?>">Proceed to next test</A>
-<?php
- }
-} else {
-?>
-<form action=odbc-t4.php method=post>
-<table border=0>
-<tr><td>Database: </td><td><input type=text name=dsn></td></tr>
-<tr><td>User: </td><td><input type=text name=dbuser></td></tr>
-<tr><td>Password: </td><td><input type=password name=dbpwd></td></tr>
-</table>
-<input type=submit value=connect>
-
-</form>
-<?php
- }
-?>
-</BODY>
-</HTML>
diff --git a/tests/odbc-t5.php b/tests/odbc-t5.php
deleted file mode 100644
index 13af52d222..0000000000
--- a/tests/odbc-t5.php
+++ /dev/null
@@ -1,137 +0,0 @@
-<HTML>
-<HEAD>
-<TITLE>Database test #5</TITLE>
-</HEAD>
-<BODY>
-<H1>ODBC Test 5 - Blobs</H1>
-<?php
- if(!isset($gif1file) && !isset($display) ||
- ($gif1file == "none" && $gif2file == "none"
- && $gif3file == "none")){
-?>
-<H2>Please select the images (gif) you want to put into the database</H2>
-<FORM METHOD="POST" ACTION="<?php echo $PHP_SELF ?>" ENCTYPE="multipart/form-data">
-Image 1: <INPUT TYPE="file" NAME="gif1file" VALUE="" SIZE="48"><P>
-Image 2: <INPUT TYPE="file" NAME="gif2file" VALUE="" SIZE="48"><P>
-Image 3: <INPUT TYPE="file" NAME="gif3file" VALUE="" SIZE="48"><P>
-Blob database type name: <INPUT TYPE="text" NAME="datatype" VALUE="LONG BYTE" SIZE="32">
-<P>
-<INPUT TYPE="hidden" name="dsn" value="<?php echo $dsn ?>">
-<INPUT TYPE="hidden" name="dbuser" value="<?php echo $dbuser ?>">
-<INPUT TYPE="hidden" name="dbpwd" value="<?php echo $dbpwd ?>">
-<INPUT TYPE="submit" VALUE="Send File(s)">
-| <INPUT TYPE="reset" VALUE="reset">
-</FORM>
-</BODY>
-</HTML>
-<?php
- exit;
- }
-
- if(isset($dbuser)){
- echo "Connecting to $dsn as $dbuser\n";
- $conn = odbc_connect($dsn, $dbuser, $dbpwd);
- if(!$conn){
-?>
-<H2>Error connecting to database! Check DSN, username and password</H2>
-<?php
- }else{
-?>
- - OK<p>
-<?php
- if(isset($display)){
- if(($res = odbc_exec($conn, 'select id from php_test'))){
- echo "<H3>Images in database</H3>";
- while(odbc_fetch_into($res, &$imgs)){
- echo "$imgs[0] : <IMG SRC=\"odbc-display.php?id=$imgs[0]&dbuser=$dbuser&dsn=$dsn&dbpwd=$dbpwd\">\n<P>";
- }
- }else{
- echo "Couldn't execute query";
- }
- echo "\n</BODY>\n</HTML>";
- exit;
- }
-?>
-Dropping table "php_test"
-<?php
- Error_Reporting(0);
- $res = odbc_exec($conn, "drop table php_test");
- if($res){
- odbc_free_result($res);
- }
-?>
- - OK<p>
-Creating table "php_test":
-<?php
- $res = odbc_exec($conn, "create table php_test (id char(32), gif $datatype)");
- if($res){
- odbc_free_result($res);
-?>
- - OK<p>
-Table Info:<br>
-<table>
- <tr>
- <th>Name</th>
- <th>Type</th>
- <th>Length</th>
- </tr>
-<?php
- $info = odbc_exec($conn,"select * from php_test");
- $numfields = odbc_num_fields($info);
-
- for($i=1; $i<=$numfields; $i++){
-?>
- <tr>
- <td><?php echo odbc_field_name($info, $i) ?></td>
- <td><?php echo odbc_field_type($info, $i) ?></td>
- <td><?php echo odbc_field_len($info,$i) ?></td>
- </tr>
-<?php
- }
- odbc_free_result($info);
-?>
-</table>
-
-Inserting data:
-<?php
- echo "$gif1file - $gif2file - $gif3file";
-
- odbc_free_result($res);
- $res = odbc_prepare($conn, "insert into php_test values(?,?)");
- if($gif1file != "none"){
- $params[0] = "image1";
- $params[1] = "'$gif1file'";
- odbc_execute($res, $params);
- }
- if($gif2file != "none"){
- $params[0] = "image2";
- $params[1] = "'$gif2file'";
- odbc_execute($res, $params);
- }
- if($gif3file != "none"){
- $params[0] = "image3";
- $params[1] = "'$gif3file'";
- odbc_execute($res, $params);
- }
-?>
- - OK<P>
-<A HREF="<?php echo "$PHP_SELF?display=y&dbuser=$dbuser&dsn=$dsn&dbpwd=$dbpwd" ?>">Display Images</A>
-<?php
- }
- }
- } else {
-?>
-<form action=odbc-t5.php method=post>
-<table border=0>
-<tr><td>Database: </td><td><input type=text name=dsn></td></tr>
-<tr><td>User: </td><td><input type=text name=dbuser></td></tr>
-<tr><td>Password: </td><td><input type=password name=dbpwd></td></tr>
-</table>
-<input type=submit value=connect>
-
-</form>
-<?php
- }
-?>
-</BODY>
-</HTML>
diff --git a/tests/quicktester.inc b/tests/quicktester.inc
deleted file mode 100644
index 48ed6b549f..0000000000
--- a/tests/quicktester.inc
+++ /dev/null
@@ -1,75 +0,0 @@
-<?php
- /*
- Helper for simple tests to check return-value. Usage:
-
- $tests = <<<TESTS
- expected_return_value === expression
- 2 === 1+1
- 4 === 2*2
- FALSE === @ fopen('non_existent_file')
-TESTS;
- include( 'tests/quicktester.inc' );
-
- Expect: OK
-
- Remember to NOT put a trailing ; after a line!
-
- */
-error_reporting(E_ALL);
-$tests = explode("\n",$tests);
-$success = TRUE;
-foreach ($tests as $n=>$test)
-{
- // ignore empty lines
- if (!$test) continue;
-
- // warn for trailing ;
- if (substr(trim($test), -1, 1) === ';') {
- echo "WARNING: trailing ';' found in test ".($n+1)."\n";
- exit;
- }
-
- // try for operators
- $operators = array('===', '~==');
- $operator = NULL;
- foreach ($operators as $a_operator) {
- if (strpos($test, $a_operator)!== FALSE) {
- $operator = $a_operator;
- list($left,$right) = explode($operator, $test);
- break;
- }
- }
- if (!$operator) {
- echo "WARNING: unknown operator in '$test' (1)\n";
- exit;
- }
-
- $left = eval("return ($left );");
- $right = eval("return ($right);");
- switch (@$operator) {
- case '===': // exact match
- $result = $left === $right;
- break;
- case '~==': // may differ after 12th significant number
- if ( !is_float($left ) && !is_int($left )
- || !is_float($right) && !is_int($right)) {
- $result = FALSE;
- break;
- }
- $result = abs(($left-$right) / $left) < 1e-12;
- break;
- default:
- echo "WARNING: unknown operator in '$test' (2)\n";
- exit;
- }
-
- $success = $success && $result;
- if (!$result) {
- echo "\nAssert failed:\n";
- echo "$test\n";
- echo "Left: ";var_dump($left );
- echo "Right: ";var_dump($right);
- }
-}
-if ($success) echo "OK";
-
diff --git a/tests/recurse b/tests/recurse
deleted file mode 100644
index 5b8c646f6b..0000000000
--- a/tests/recurse
+++ /dev/null
@@ -1,21 +0,0 @@
-<?
-
-function factorial($n)
-{
- if ($n==0 || $n==1) {
- return 1;
- } else {
- return $n*factorial($n-1);
- }
-}
-
-
-for ($k=0; $k<10; $k++):
-for ($i=0,$sum=0; $i<50; $i++) {
- $sum = $sum+factorial($i);
-}
-endfor;
-
-print "\$sum=$sum\n";
-
-
diff --git a/tests/run-test/test001.phpt b/tests/run-test/test001.phpt
deleted file mode 100644
index 370d09c953..0000000000
--- a/tests/run-test/test001.phpt
+++ /dev/null
@@ -1,6 +0,0 @@
---TEST--
-EXPECT
---FILE--
-abc
---EXPECT--
-abc \ No newline at end of file
diff --git a/tests/run-test/test002.phpt b/tests/run-test/test002.phpt
deleted file mode 100644
index 7b91f35c8d..0000000000
--- a/tests/run-test/test002.phpt
+++ /dev/null
@@ -1,18 +0,0 @@
---TEST--
-EXPECTF
---FILE--
-123
--123
-+123
-+1.1
-abc
-0abc
-x
---EXPECTF--
-%d
-%i
-%i
-%f
-%s
-%x
-%c \ No newline at end of file
diff --git a/tests/run-test/test003.phpt b/tests/run-test/test003.phpt
deleted file mode 100644
index c1afad15f7..0000000000
--- a/tests/run-test/test003.phpt
+++ /dev/null
@@ -1,6 +0,0 @@
---TEST--
-EXPECTREGEX
---FILE--
-abcde12314235xyz34264768286abcde
---EXPECTREGEX--
-[abcde]+[0-5]*xyz[2-8]+abcde \ No newline at end of file
diff --git a/tests/run-test/test004.phpt b/tests/run-test/test004.phpt
deleted file mode 100644
index 19dbdede8c..0000000000
--- a/tests/run-test/test004.phpt
+++ /dev/null
@@ -1,10 +0,0 @@
---TEST--
-INI section allows '='
---INI--
-arg_separator.input==
---FILE--
-<?php
-var_dump(ini_get('arg_separator.input'));
-?>
---EXPECT--
-string(1) "=" \ No newline at end of file
diff --git a/tests/run-test/test005.phpt b/tests/run-test/test005.phpt
deleted file mode 100644
index b54cbc50e6..0000000000
--- a/tests/run-test/test005.phpt
+++ /dev/null
@@ -1,32 +0,0 @@
---TEST--
-Error message handling (without ZendOptimizer)
---SKIPIF--
-<?php
-!extension_loaded("Zend Optimizer") or die("skip Zend Optimizer is loaded");
-?>
---FILE--
-<?php
-// If this test fails ask the developers of run-test.php
-//
-// We check the general ini settings which affect error handling
-// and than verify if a message is given by a division by zero.
-// EXPECTF is used here since the error format may change but ut
-// should always contain 'Division by zero'.
-var_dump(ini_get('display_errors'));
-var_dump(ini_get('error_reporting'));
-var_dump(ini_get('log_errors'));
-var_dump(ini_get('track_errors'));
-ini_set('display_errors', 0);
-var_dump(ini_get('display_errors'));
-var_dump($php_errormsg);
-$error = 1 / 0;
-var_dump($php_errormsg);
-?>
---EXPECTF--
-string(1) "1"
-string(4) "4095"
-string(1) "0"
-string(1) "1"
-string(1) "0"
-NULL
-string(%d) "%sivision by zer%s"
diff --git a/tests/run-test/test006.phpt b/tests/run-test/test006.phpt
deleted file mode 100644
index 4dca66a4f7..0000000000
--- a/tests/run-test/test006.phpt
+++ /dev/null
@@ -1,9 +0,0 @@
---TEST--
-Error messages are shown
---FILE--
-<?php
-// If this test fails ask the developers of run-test.php
-$error = 1 / 0;
-?>
---EXPECTREGEX--
-.*Division by zero.*
diff --git a/tests/run-test/test007.phpt b/tests/run-test/test007.phpt
deleted file mode 100644
index f5f934f72e..0000000000
--- a/tests/run-test/test007.phpt
+++ /dev/null
Binary files differ
diff --git a/tests/run-test/test008.phpt b/tests/run-test/test008.phpt
deleted file mode 100644
index 14fff59bd8..0000000000
--- a/tests/run-test/test008.phpt
+++ /dev/null
@@ -1,33 +0,0 @@
---TEST--
-Error message handling (with ZendOptimizer)
---SKIPIF--
-<?php
-extension_loaded("Zend Optimizer") or die("skip Zend Optimizer is not loaded");
-?>
---FILE--
-<?php
-// If this test fails ask the developers of run-test.php
-//
-// We check the general ini settings which affect error handling
-// and than verify if a message is given by a division by zero.
-// EXPECTF is used here since the error format may change but ut
-// should always contain 'Division by zero'.
-var_dump(ini_get('display_errors'));
-var_dump(ini_get('error_reporting'));
-var_dump(ini_get('log_errors'));
-var_dump(ini_get('track_errors'));
-ini_set('display_errors', 0);
-var_dump(ini_get('display_errors'));
-var_dump($php_errormsg);
-$error = 1 / 0;
-var_dump($php_errormsg);
-?>
---EXPECTF--
-%s: %sivision by zero in %s on line %d
-string(1) "1"
-string(4) "4095"
-string(1) "0"
-string(1) "1"
-string(1) "0"
-string(%d) "%sivision by zer%s"
-string(%d) "%sivision by zer%s"
diff --git a/tests/run-test/test008a.phpt b/tests/run-test/test008a.phpt
deleted file mode 100644
index 7916ff2352..0000000000
--- a/tests/run-test/test008a.phpt
+++ /dev/null
@@ -1,32 +0,0 @@
---TEST--
-Error message handling (without ZendOptimizer)
---SKIPIF--
-<?php
-if (extension_loaded("Zend Optimizer")) die("skip Zend Optimizer is loaded");
-?>
---FILE--
-<?php
-// If this test fails ask the developers of run-test.php
-//
-// We check the general ini settings which affect error handling
-// and than verify if a message is given by a division by zero.
-// EXPECTF is used here since the error format may change but ut
-// should always contain 'Division by zero'.
-var_dump(ini_get('display_errors'));
-var_dump(ini_get('error_reporting'));
-var_dump(ini_get('log_errors'));
-var_dump(ini_get('track_errors'));
-ini_set('display_errors', 0);
-var_dump(ini_get('display_errors'));
-var_dump($php_errormsg);
-$error = 1 / 0;
-var_dump($php_errormsg);
-?>
---EXPECTF--
-string(1) "1"
-string(4) "4095"
-string(1) "0"
-string(1) "1"
-string(1) "0"
-NULL
-string(%d) "%sivision by zer%s"
diff --git a/tests/run-test/test009.phpt b/tests/run-test/test009.phpt
deleted file mode 100644
index 650686f690..0000000000
--- a/tests/run-test/test009.phpt
+++ /dev/null
@@ -1,12 +0,0 @@
---TEST--
-print_r(Object)
---FILE--
-<?php
-class Foo {}
-$foo = new Foo;
-print_r($foo);
-?>
---EXPECTF--
-Foo Object
-(
-)
diff --git a/tests/run.html b/tests/run.html
deleted file mode 100644
index 281e9e57c8..0000000000
--- a/tests/run.html
+++ /dev/null
@@ -1,11 +0,0 @@
-<html>
-<body>
-<form action="run.php" method="POST">
-
-<textarea name="code" cols=50 rows=20>
-</textarea><br>
-<input type="submit" value="Go!">
-</form>
-
-</body>
-</html>
diff --git a/tests/run.php b/tests/run.php
deleted file mode 100644
index a6792b5af7..0000000000
--- a/tests/run.php
+++ /dev/null
@@ -1,17 +0,0 @@
-<?
-if (!isset($code)) {
- exit("No code submitted.");
-}
-?>
-<html>
-<body>
-Executing:<br>
-<?
-highlight_string("<?php \n$code\n?>");
-?>
-<hr width="40%">
-<?
-eval($code);
-?>
-</body>
-</html> \ No newline at end of file
diff --git a/tests/scan_cases b/tests/scan_cases
deleted file mode 100644
index d562230fde..0000000000
--- a/tests/scan_cases
+++ /dev/null
@@ -1,28 +0,0 @@
-# Test file used by testscanf.php. Feel free to add additional cases
-# sscanf test cases. formatted to be slurped and split by explode
-%d|48| valid decimal (positive)
-%d|-98| valid signed decimal (negative)
-%d|56a| integer scan : decimal digit followed by alpha
-%4d|558071|decimal integer with width specification
-%i|-5489|valid signed integer (negative)
-%s| the rain in spain | plain ole string matched with %s
-%10s|jabberwocky| string with width specifier
-%f|289.071| valid float (%f)
-%f|-0.403| valid negative (%f)
-%3f|76.4|Float with width specifier ending at decimal point
-%3f"|789.4|Float with width specifier
-%o|0321|octal with leading 0
-%o|327| valid octal digits
-%o|380| octal scan with octal digit followed by non-octal
-%x|fe| valid hex|
-%x|0xfe| "c" style hex with leading 0x|
-%x|455| hex with all single digits < f
-%x|-98| hex (negative signed int)
-%c|y| single char
-%4c|tulips|Character with width specification (4)
-%e|10e-9| signed floating point with negative exponent
-%e|10e+9| signed floating point with explicit positive exponent
-%e|10e9| signed floating point with positive exponent (no + sign)
-# next we test multiple cases
- %d %i %o %u %x %s %c %e %f %g | 19 84 0666 2000 0xface your x 31e+9 0.912 2.4 |multiple specifiers
-
diff --git a/tests/strings/001.phpt b/tests/strings/001.phpt
deleted file mode 100644
index ceca4351b6..0000000000
--- a/tests/strings/001.phpt
+++ /dev/null
@@ -1,207 +0,0 @@
---TEST--
-String functions
---FILE--
-<?php
-
-error_reporting(0);
-
-echo "Testing strtok: ";
-
-$str = "testing 1/2\\3";
-$tok1 = strtok($str, " ");
-$tok2 = strtok("/");
-$tok3 = strtok("\\");
-$tok4 = strtok(".");
-if ($tok1 != "testing") {
- echo("failed 1\n");
-} elseif ($tok2 != "1") {
- echo("failed 2\n");
-} elseif ($tok3 != "2") {
- echo("failed 3\n");
-} elseif ($tok4 != "3") {
- echo("failed 4\n");
-} else {
- echo("passed\n");
-}
-
-echo "Testing strstr: ";
-$test = "This is a test";
-$found1 = strstr($test, 32);
-$found2 = strstr($test, "a ");
-if ($found1 != " is a test") {
- echo("failed 1\n");
-} elseif ($found2 != "a test") {
- echo("failed 2\n");
-} else {
- echo("passed\n");
-}
-
-echo "Testing strrchr: ";
-$test = "fola fola blakken";
-$found1 = strrchr($test, "b");
-$found2 = strrchr($test, 102);
-if ($found1 != "blakken") {
- echo("failed 1\n");
-} elseif ($found2 != "fola blakken") {
- echo("failed 2\n");
-}
-else {
- echo("passed\n");
-}
-
-echo "Testing strtoupper: ";
-$test = "abCdEfg";
-$upper = strtoupper($test);
-if ($upper == "ABCDEFG") {
- echo("passed\n");
-} else {
- echo("failed!\n");
-}
-
-echo "Testing strtolower: ";
-$test = "ABcDeFG";
-$lower = strtolower($test);
-if ($lower == "abcdefg") {
- echo("passed\n");
-} else {
- echo("failed!\n");
-}
-
-echo "Testing substr: ";
-$tests = $ok = 0;
-$string = "string12345";
-$tests++; if (substr($string, 2, 10) == "ring12345") { $ok++; }
-$tests++; if (substr($string, 4, 7) == "ng12345") { $ok++; }
-$tests++; if (substr($string, 4) == "ng12345") { $ok++; }
-$tests++; if (substr($string, 10, 2) == "5") { $ok++; }
-$tests++; if (substr($string, 6, 0) == "") { $ok++; }
-$tests++; if (substr($string, -2, 2) == "45") { $ok++; }
-$tests++; if (substr($string, 1, -1) == "tring1234") { $ok++; }
-$tests++; if (substr($string, -1, -2) == "") { $ok++; }
-$tests++; if (substr($string, -3, -2) == "3") { $ok++; }
-
-if ($tests == $ok) {
- echo("passed\n");
-} else {
- echo("failed!\n");
-}
-
-$raw = ' !"#$%&\'()*+,-./0123456789:;<=>?'
- . '@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_'
- . '`abcdefghijklmnopqrstuvwxyz{|}~'
- . "\0";
-
-echo "Testing rawurlencode: ";
-$encoded = rawurlencode($raw);
-$correct = '%20%21%22%23%24%25%26%27%28%29%2A%2B%2C-.%2F0123456789%3A%3B%3C%3D%3E%3F'
- . '%40ABCDEFGHIJKLMNOPQRSTUVWXYZ%5B%5C%5D%5E_'
- . '%60abcdefghijklmnopqrstuvwxyz%7B%7C%7D%7E'
- . '%00';
-if ($encoded == $correct) {
- echo("passed\n");
-} else {
- echo("failed!\n");
-}
-
-echo "Testing rawurldecode: ";
-$decoded = rawurldecode($correct);
-if ($decoded == $raw) {
- echo("passed\n");
-} else {
- echo("failed!\n");
-}
-
-echo "Testing urlencode: ";
-$encoded = urlencode($raw);
-$correct = '+%21%22%23%24%25%26%27%28%29%2A%2B%2C-.%2F0123456789%3A%3B%3C%3D%3E%3F'
- . '%40ABCDEFGHIJKLMNOPQRSTUVWXYZ%5B%5C%5D%5E_'
- . '%60abcdefghijklmnopqrstuvwxyz%7B%7C%7D%7E'
- . '%00';
-if ($encoded == $correct) {
- echo("passed\n");
-} else {
- echo("failed!\n");
-}
-
-echo "Testing urldecode: ";
-$decoded = urldecode($correct);
-if ($decoded == $raw) {
- echo("passed\n");
-} else {
- echo("failed!\n");
-}
-
-echo "Testing quotemeta: ";
-$raw = "a.\\+*?" . chr(91) . "^" . chr(93) . "b\$c";
-$quoted = quotemeta($raw);
-if ($quoted == "a\\.\\\\\\+\\*\\?\\[\\^\\]b\\\$c") {
- echo("passed\n");
-} else {
- echo("failed!\n");
-}
-
-echo "Testing ufirst: ";
-$str = "fahrvergnuegen";
-$uc = ucfirst($str);
-if ($uc == "Fahrvergnuegen") {
- echo("passed\n");
-} else {
- echo("failed!\n");
-}
-
-echo "Testing strtr: ";
-$str = "test abcdefgh";
-$tr = strtr($str, "def", "456");
-if ($tr == "t5st abc456gh") {
- echo("passed\n");
-} else {
- echo("failed!\n");
-}
-
-echo "Testing addslashes: ";
-$str = "\"\\'";
-$as = addslashes($str);
-if ($as == "\\\"\\\\\\'") {
- echo("passed\n");
-} else {
- echo("failed!\n");
-}
-
-echo "Testing stripslashes: ";
-$str = "\$\\'";
-$ss = stripslashes($str);
-if ($ss == "\$'") {
- echo("passed\n");
-} else {
- echo("failed!\n");
-}
-
-
-echo "Testing uniqid: ";
-$str = "prefix";
-$ui1 = uniqid($str);
-$ui2 = uniqid($str);
-if (strlen($ui1) == strlen($ui2) && strlen($ui1) == 19 && $ui1 != $ui2) {
- echo("passed\n");
-} else {
- echo("failed!\n");
-}
-
-?>
---EXPECT--
-Testing strtok: passed
-Testing strstr: passed
-Testing strrchr: passed
-Testing strtoupper: passed
-Testing strtolower: passed
-Testing substr: passed
-Testing rawurlencode: passed
-Testing rawurldecode: passed
-Testing urlencode: passed
-Testing urldecode: passed
-Testing quotemeta: passed
-Testing ufirst: passed
-Testing strtr: passed
-Testing addslashes: passed
-Testing stripslashes: passed
-Testing uniqid: passed
diff --git a/tests/strings/002.phpt b/tests/strings/002.phpt
deleted file mode 100644
index 7b95a25645..0000000000
--- a/tests/strings/002.phpt
+++ /dev/null
@@ -1,83 +0,0 @@
---TEST--
-Formatted print functions
---FILE--
-<?php
-error_reporting(0);
-
-$fp = fopen("php://stdout", "w") or die("Arrggsgg!!");
-$x = fprintf($fp, "fprintf test 1:%.5s", "abcdefghij");
-echo "\n";
-var_dump($x);
-
-printf("printf test 1:%s\n", "simple string");
-printf("printf test 2:%d\n", 42);
-printf("printf test 3:%f\n", 10.0/3);
-printf("printf test 4:%.10f\n", 10.0/3);
-printf("printf test 5:%-10.2f\n", 2.5);
-printf("printf test 6:%-010.2f\n", 2.5);
-printf("printf test 7:%010.2f\n", 2.5);
-printf("printf test 8:<%20s>\n", "foo");
-printf("printf test 9:<%-20s>\n", "bar");
-printf("printf test 10: 123456789012345\n");
-printf("printf test 10:<%15s>\n", "høyesterettsjustitiarius");
-printf("printf test 11: 123456789012345678901234567890\n");
-printf("printf test 11:<%30s>\n", "høyesterettsjustitiarius");
-printf("printf test 12:%5.2f\n", -12.34);
-printf("printf test 13:%5d\n", -12);
-printf("printf test 14:%c\n", 64);
-printf("printf test 15:%b\n", 170);
-printf("printf test 16:%x\n", 170);
-printf("printf test 17:%X\n", 170);
-printf("printf test 18:%16b\n", 170);
-printf("printf test 19:%16x\n", 170);
-printf("printf test 20:%16X\n", 170);
-printf("printf test 21:%016b\n", 170);
-printf("printf test 22:%016x\n", 170);
-printf("printf test 23:%016X\n", 170);
-printf("printf test 24:%.5s\n", "abcdefghij");
-printf("printf test 25:%-2s\n", "gazonk");
-printf("printf test 26:%2\$d %1\$d\n", 1, 2);
-printf("printf test 27:%3\$d %d %d\n", 1, 2, 3);
-printf("printf test 28:%2\$02d %1\$2d\n", 1, 2);
-printf("printf test 29:%2\$-2d %1\$2d\n", 1, 2);
-print("printf test 30:"); printf("%0\$s", 1); print("x\n");
-vprintf("vprintf test 1:%2\$-2d %1\$2d\n", array(1, 2));
-
-
-?>
---EXPECT--
-fprintf test 1:abcde
-int(20)
-printf test 1:simple string
-printf test 2:42
-printf test 3:3.333333
-printf test 4:3.3333333333
-printf test 5:2.50
-printf test 6:2.50000000
-printf test 7:0000002.50
-printf test 8:< foo>
-printf test 9:<bar >
-printf test 10: 123456789012345
-printf test 10:<høyesterettsjustitiarius>
-printf test 11: 123456789012345678901234567890
-printf test 11:< høyesterettsjustitiarius>
-printf test 12:-12.34
-printf test 13: -12
-printf test 14:@
-printf test 15:10101010
-printf test 16:aa
-printf test 17:AA
-printf test 18: 10101010
-printf test 19: aa
-printf test 20: AA
-printf test 21:0000000010101010
-printf test 22:00000000000000aa
-printf test 23:00000000000000AA
-printf test 24:abcde
-printf test 25:gazonk
-printf test 26:2 1
-printf test 27:3 1 2
-printf test 28:02 1
-printf test 29:2 1
-printf test 30:x
-vprintf test 1:2 1
diff --git a/tests/strings/004.phpt b/tests/strings/004.phpt
deleted file mode 100644
index ac5e2ce43d..0000000000
--- a/tests/strings/004.phpt
+++ /dev/null
@@ -1,22 +0,0 @@
---TEST--
-highlight_string() buffering
---INI--
-highlight.string=#DD0000
-highlight.comment=#FF9900
-highlight.keyword=#007700
-highlight.bg=#FFFFFF
-highlight.default=#0000BB
-highlight.html=#000000
---FILE--
-<?php
-$var = highlight_string("<br /><?php echo \"foo\"; ?><br />");
-$var = highlight_string("<br /><?php echo \"bar\"; ?><br />", TRUE);
-echo "\n[$var]\n";
-?>
---EXPECT--
-<code><span style="color: #000000">
-&lt;br /&gt;<span style="color: #0000BB">&lt;?php </span><span style="color: #007700">echo </span><span style="color: #DD0000">"foo"</span><span style="color: #007700">; </span><span style="color: #0000BB">?&gt;</span>&lt;br /&gt;</span>
-</code>
-[<code><span style="color: #000000">
-&lt;br /&gt;<span style="color: #0000BB">&lt;?php </span><span style="color: #007700">echo </span><span style="color: #DD0000">"bar"</span><span style="color: #007700">; </span><span style="color: #0000BB">?&gt;</span>&lt;br /&gt;</span>
-</code>]
diff --git a/tests/strings/bug22592.phpt b/tests/strings/bug22592.phpt
deleted file mode 100755
index 0c13e50164..0000000000
--- a/tests/strings/bug22592.phpt
+++ /dev/null
@@ -1,27 +0,0 @@
---TEST--
-Bug #22592 (Cascading assignments to strings with curly braces broken)
---FILE--
-<?php
-$wrong = $correct = 'abcdef';
-
-$t = $x[] = 'x';
-
-var_dump($correct);
-var_dump($wrong);
-
-$correct{1} = '*';
-$correct{3} = '*';
-$correct{5} = '*';
-
-// This produces the
-$wrong{1} = $wrong{3} = $wrong{5} = '*';
-
-var_dump($correct);
-var_dump($wrong);
-
-?>
---EXPECT--
-string(6) "abcdef"
-string(6) "abcdef"
-string(6) "a*c*e*"
-string(6) "a*c*e*"
diff --git a/tests/strings/bug26703.phpt b/tests/strings/bug26703.phpt
deleted file mode 100644
index c9a7790c01..0000000000
--- a/tests/strings/bug26703.phpt
+++ /dev/null
@@ -1,18 +0,0 @@
---TEST--
-Bug #26703 (Certain characters inside strings incorrectly treated as keywords)
---INI--
-highlight.string=#DD0000
-highlight.comment=#FF9900
-highlight.keyword=#007700
-highlight.bg=#FFFFFF
-highlight.default=#0000BB
-highlight.html=#000000
---FILE--
-<?php
- highlight_string('<?php echo "foo[] $a \n"; ?>');
-?>
---EXPECT--
-<code><span style="color: #000000">
-<span style="color: #0000BB">&lt;?php </span><span style="color: #007700">echo </span><span style="color: #DD0000">"foo[] $a \n"</span><span style="color: #007700">; </span><span style="color: #0000BB">?&gt;</span>
-</span>
-</code>
diff --git a/tests/test.pl b/tests/test.pl
deleted file mode 100644
index 2502cb1298..0000000000
--- a/tests/test.pl
+++ /dev/null
@@ -1,34 +0,0 @@
-<?
-
-$i = 0;
-$j = 1;
-
-for ($k=0; $k<1000000; $k = $k+1) {
- while ($i<10000000) {
- if (($i%"4")<1) {
- $i = $i+"1";
- if ($j%"2") {
- $i = $i * "2";
- }
- } elseif (($i%"4")<2) {
- $i = $i+"2";
- if ($j%"2") {
- $i = $i * "2";
- }
- } elseif (($i%"4")<3) {
- $i = $i+3;
- if ($j%"2") {
- $i = $i * "2";
- }
- } else {
- $i = $i+"4";
- if ($j%"2") {
- $i = $i * "2";
- }
- }
- $j = $j+1;
- }
-}
-print $i;
-print "\n";
-
diff --git a/tests/test_class_inheritance b/tests/test_class_inheritance
deleted file mode 100644
index 3f903e62d1..0000000000
--- a/tests/test_class_inheritance
+++ /dev/null
@@ -1,29 +0,0 @@
-<?
-
-class BaseClass {
- var $class_name = "BaseClass";
-
- function BaseClass($value) {
- print "value is '$value'\n";
- }
- function MyClassName() {
- return $this->class_name;
- }
-};
-
-
-class ChildClass {
- var $class_name = "ChildClass";
-
- function ChildClass($value, $new_value) {
- BaseClass::BaseClass($value);
- print "new value is '$new_value'\n";
- }
- function MyClassName($a_value) {
- return BaseClass::MyClassName()." and the value is '$a_value'";
- }
-};
-
-
-$obj = new ChildClass("Test", "Another test");
-print $obj->MyClassName("not interesting"); \ No newline at end of file
diff --git a/tests/testarray b/tests/testarray
deleted file mode 100644
index bee5cca546..0000000000
--- a/tests/testarray
+++ /dev/null
@@ -1,21 +0,0 @@
-This is a small test....
-<?
-
-/*
- * this is a multiline comment...
- */
-
-for ($j=0; $j<=20; $j++) {
- for ($i[0][0]=0; $i[0][0]<10000; $i[0][0]++) {
- $i[1] += $i[0][0]; // this is a single line comment
- }
-}
-
-/* this is another multi
-line
- comment...******
-/
-*/
-
-print $i[1]."\n";
-
diff --git a/tests/testarray.pl b/tests/testarray.pl
deleted file mode 100644
index 9ec83e184c..0000000000
--- a/tests/testarray.pl
+++ /dev/null
@@ -1,5 +0,0 @@
-for ($i[0][0]=0; $i[0][0]<1000000; $i[0][0]++) {
- $i[1] += $i[0][0];
-}
-
-print $i[1];
diff --git a/tests/testarray2 b/tests/testarray2
deleted file mode 100644
index 91926beaff..0000000000
--- a/tests/testarray2
+++ /dev/null
@@ -1,5 +0,0 @@
-
-<?
-for ($i="aaa"; $i<"bbb\nbbb"; $i++) {
- print $i;
-}
diff --git a/tests/testarray2.pl b/tests/testarray2.pl
deleted file mode 100644
index e72c526d4f..0000000000
--- a/tests/testarray2.pl
+++ /dev/null
@@ -1,3 +0,0 @@
-for ($i="aaa"; $i lt "bbb"; $i++) {
- print "$i\n";
-}
diff --git a/tests/testclassfunc b/tests/testclassfunc
deleted file mode 100644
index 007bf3bd37..0000000000
--- a/tests/testclassfunc
+++ /dev/null
@@ -1,9 +0,0 @@
-<?
-class foo {
- function bar() {
- print "Hey there!\n";
- }
-};
-
-foo::bar();
-
diff --git a/tests/testcom b/tests/testcom
deleted file mode 100644
index 0feb50d1ff..0000000000
--- a/tests/testcom
+++ /dev/null
@@ -1,11 +0,0 @@
-<?
-$word = new COM("word.application") or die("Unable to instanciate Word");
-print "Loaded Word, version {$word->Version}\n";
-$word->Visible = 1;
-$word->Documents->Add();
-$word->Selection->TypeText("This is a test...");
-$word->Quit();
-/*
-$word->Documents[1]->SaveAs("Useless test.doc");
-*/
-?> \ No newline at end of file
diff --git a/tests/testcpdf b/tests/testcpdf
deleted file mode 100644
index a74087d18e..0000000000
--- a/tests/testcpdf
+++ /dev/null
@@ -1,97 +0,0 @@
-<?php
- function draw_text($cpdf, $fontname, $size, $x, $y, $text="") {
- cpdf_begin_text($cpdf);
- cpdf_set_font($cpdf, $fontname, $size, 4);
- if($text == "")
- cpdf_text($cpdf, $fontname." ".$size." Point", $x, $y, 1);
- else
- cpdf_text($cpdf, $text, $x, $y, 1);
- cpdf_end_text($cpdf);
- }
-
- $cpdf = cpdf_open(0);
- cpdf_set_Creator($cpdf, "Creator");
- cpdf_set_Title($cpdf, "Title");
- cpdf_set_Subject($cpdf, "Subject");
- cpdf_set_Keywords($cpdf, "Keyword1, Keyword2");
- cpdf_set_viewer_preferences($cpdf, 1);
-
- cpdf_page_init($cpdf, 1, 0, 600, 400, 1);
- $level1 = cpdf_add_outline($cpdf, 0, 0, 1, 1, "Examples");
- $level2a = cpdf_add_outline($cpdf, $level1, 1, 0, 1, "Text");
- draw_text($cpdf, "Helvetica", 18.0, 50, 330);
- draw_text($cpdf, "Helvetica-Bold", 18.0, 50, 310);
- draw_text($cpdf, "Helvetica-Oblique", 18.0, 50, 290);
- draw_text($cpdf, "Helvetica-BoldOblique", 18.0, 50, 270);
- draw_text($cpdf, "Times-Roman", 18.0, 50, 250);
- draw_text($cpdf, "Times-Bold", 18.0, 50, 230);
- draw_text($cpdf, "Times-Italic", 18.0, 50, 210);
- draw_text($cpdf, "Times-BoldItalic", 18.0, 50, 190);
- draw_text($cpdf, "Courier", 18.0, 50, 170);
- draw_text($cpdf, "Courier-Bold", 18.0, 50, 150);
- draw_text($cpdf, "Courier-Oblique", 18.0, 50, 130);
- draw_text($cpdf, "Courier-BoldOblique", 18.0, 50, 110);
- draw_text($cpdf, "Symbol", 18.0, 50, 90);
- draw_text($cpdf, "ZapfDingbats", 18.0, 50, 70);
-
- cpdf_page_init($cpdf, 2, 0, 400, 400, 1);
- $level2b = cpdf_add_outline($cpdf, $level2a, 0, 0, 2, "Annotations, Hyperlinks");
- cpdf_add_annotation($cpdf, 100, 100, 300, 200, "Annotation", "Text of Annotation");
- draw_text($cpdf, "Helvetica", 12.0, 102, 116, "Click here to go to");
- draw_text($cpdf, "Helvetica", 12.0, 102, 103, "http://localhost");
- cpdf_set_action_url($cpdf, 100, 100, 202, 130, "http://localhost");
-
- cpdf_page_init($cpdf, 3, 0, 400, 600, 1);
- $level2c = cpdf_add_outline($cpdf, $level2b, 0, 0, 3, "Drawing");
- cpdf_rect($cpdf, 100, 100, 90, 90, 1);
- cpdf_stroke($cpdf);
- cpdf_rect($cpdf, 200, 100, 90, 90, 1);
- cpdf_fill_stroke($cpdf);
-
- cpdf_setgray_fill($cpdf, 0.5);
- cpdf_circle($cpdf, 140, 250, 35, 1);
- cpdf_stroke($cpdf);
- cpdf_circle($cpdf, 240, 250, 35, 1);
- cpdf_fill_stroke($cpdf);
-
- cpdf_moveto($cpdf, 300, 100, 1);
- cpdf_lineto($cpdf, 350, 100, 1);
- cpdf_curveto($cpdf, 350, 100, 325, 300, 300, 100, 1);
- cpdf_stroke($cpdf);
-
- cpdf_moveto($cpdf, 400, 100, 1);
- cpdf_lineto($cpdf, 450, 100, 1);
- cpdf_curveto($cpdf, 450, 100, 425, 400, 400, 100, 1);
- cpdf_fill_stroke($cpdf);
-
- cpdf_page_init($cpdf, 4, 0, 400, 600, 1);
- $level2d = cpdf_add_outline($cpdf, $level2c, 0, 0, 4, "Images, Clipping");
- cpdf_import_jpeg($cpdf, "figure.jpg", 50, 50, -10.0, 0.0, 300.0, 0.0, 0.0, 1, 1);
- cpdf_save($cpdf);
- cpdf_newpath($cpdf);
- cpdf_moveto($cpdf, 300, 50);
- cpdf_lineto($cpdf, 450, 50, 1);
- cpdf_curveto($cpdf, 450, 100, 375, 300, 300, 100, 1);
- cpdf_closepath($cpdf);
- cpdf_rect($cpdf, 350, 215, 100, 30);
- cpdf_clip($cpdf);
- cpdf_newpath($cpdf); /* needed because clip doesn't consume path */
- draw_text($cpdf, "Helvetica", 18.0, 250, 130);
- cpdf_import_jpeg($cpdf, "figure.jpg", 300, 50, 0.0, 0.0, 300.0, 0.0, 0.0, 0, 1); /* watch for the second last parameter. It is 0 to disable extra gsave/grestore */
- cpdf_restore($cpdf);
-
- cpdf_page_init($cpdf, 5, 0, 400, 400, 1);
- $level2e = cpdf_add_outline($cpdf, $level2d, 0, 0, 5, "GD Image");
-
- $gdimage = imagecreate(100, 100);
- $color = imagecolorallocate($gdimage, 100, 190, 0);
- $black = imagecolorallocate($gdimage, 0, 0, 0);
- imageline($gdimage, 2, 2, 90, 90, $black);
-
- cpdf_place_inline_image($cpdf, $gdimage, 50, 50, 10.0, 150, 50.0, 1, 1);
- imagedestroy($gdimage);
-
- cpdf_finalize($cpdf);
- cpdf_output_buffer($cpdf);
- cpdf_close($cpdf);
-?>
diff --git a/tests/testcpdfclock b/tests/testcpdfclock
deleted file mode 100644
index c885cc8e09..0000000000
--- a/tests/testcpdfclock
+++ /dev/null
@@ -1,87 +0,0 @@
-<?php
-$pdffilename = "clock.pdf";
-$radius = 200;
-$margin = 20;
-$pagecount = 99;
-
-$pdf = cpdf_open(0);
-cpdf_set_creator($pdf, "pdf_clock.php3");
-cpdf_set_title($pdf, "Analog Clock");
-
-while($pagecount-- > 0) {
- cpdf_page_init($pdf, $pagecount+1, 0, 2 * ($radius + $margin), 2 * ($radius + $margin), 1.0);
-
- cpdf_set_page_animation($pdf, 4, 0.5, 0, 0, 0); /* wipe */
-
- cpdf_translate($pdf, $radius + $margin, $radius + $margin);
- cpdf_save($pdf);
- cpdf_setrgbcolor($pdf, 0.0, 0.0, 1.0);
-
- /* minute strokes */
- cpdf_setlinewidth($pdf, 2.0);
- for ($alpha = 0; $alpha < 360; $alpha += 6)
- {
- cpdf_rotate($pdf, 6.0);
- cpdf_moveto($pdf, $radius, 0.0);
- cpdf_lineto($pdf, $radius-$margin/3, 0.0);
- cpdf_stroke($pdf);
- }
-
- cpdf_restore($pdf);
- cpdf_save($pdf);
-
- /* 5 minute strokes */
- cpdf_setlinewidth($pdf, 3.0);
- for ($alpha = 0; $alpha < 360; $alpha += 30)
- {
- cpdf_rotate($pdf, 30.0);
- cpdf_moveto($pdf, $radius, 0.0);
- cpdf_lineto($pdf, $radius-$margin, 0.0);
- cpdf_stroke($pdf);
- }
-
- $ltime = getdate();
-
- /* draw hour hand */
- cpdf_save($pdf);
- cpdf_rotate($pdf, -(($ltime['minutes']/60.0) + $ltime['hours'] - 3.0) * 30.0);
- cpdf_moveto($pdf, -$radius/10, -$radius/20);
- cpdf_lineto($pdf, $radius/2, 0.0);
- cpdf_lineto($pdf, -$radius/10, $radius/20);
- cpdf_closepath($pdf);
- cpdf_fill($pdf);
- cpdf_restore($pdf);
-
- /* draw minute hand */
- cpdf_save($pdf);
- cpdf_rotate($pdf, -(($ltime['seconds']/60.0) + $ltime['minutes'] - 15.0) * 6.0);
- cpdf_moveto($pdf, -$radius/10, -$radius/20);
- cpdf_lineto($pdf, $radius * 0.8, 0.0);
- cpdf_lineto($pdf, -$radius/10, $radius/20);
- cpdf_closepath($pdf);
- cpdf_fill($pdf);
- cpdf_restore($pdf);
-
- /* draw second hand */
- cpdf_setrgbcolor($pdf, 1.0, 0.0, 0.0);
- cpdf_setlinewidth($pdf, 2);
- cpdf_save($pdf);
- cpdf_rotate($pdf, -(($ltime['seconds'] - 15.0) * 6.0));
- cpdf_moveto($pdf, -$radius/5, 0.0);
- cpdf_lineto($pdf, $radius, 0.0);
- cpdf_stroke($pdf);
- cpdf_restore($pdf);
-
- /* draw little circle at center */
- cpdf_circle($pdf, 0, 0, $radius/30);
- cpdf_fill($pdf);
-
- cpdf_restore($pdf);
-
- cpdf_finalize_page($pdf, $pagecount+1);
-}
-
-cpdf_finalize($pdf);
-cpdf_save_to_file($pdf, $pdffilename);
-$pdf = cpdf_close($pdf);
-?>
diff --git a/tests/testdom b/tests/testdom
deleted file mode 100644
index c7012e0e3c..0000000000
--- a/tests/testdom
+++ /dev/null
@@ -1,73 +0,0 @@
-<?php
-$xmlstr = "<?xml version='1.0' standalone='yes'?>
-<!DOCTYPE chapter SYSTEM '/share/sgml/Norman_Walsh/db3xml10/db3xml10.dtd'
-[ <!ENTITY sp \"spanish\">
-]>
-<!-- lsfj -->
-<chapter language='en'><title language='en'>Title</title>
-<para language='ge'>
-&sp;
-<!-- comment -->
-<informaltable language='&sp;kkk'>
-<tgroup cols='3'>
-<tbody>
-<row><entry>a1</entry><entry morerows='1'>b1</entry><entry>c1</entry></row>
-<row><entry>a2</entry><entry>c2</entry></row>
-<row><entry>a3</entry><entry>b3</entry><entry>c3</entry></row>
-</tbody>
-</tgroup>
-</informaltable>
-</para>
-</chapter> ";
-
-echo "Test 1: accessing single nodes from php\n";
-$dom = xmldoc($xmlstr);
-if(!$dom) {
- echo "Error while parsing the document\n";
- exit;
-}
-
-$children = $dom->childNodes();
-print_r($children);
-
-echo "--------- root\n";
-$rootnode = $dom->documentElement();
-print_r($rootnode);
-
-echo "--------- children of root\n";
-$children = $rootnode->childNodes();
-print_r($children);
-
-// The last node should be identical with the last entry in the children array
-echo "--------- last\n";
-$last = $rootnode->lastChild();
-print_r($last);
-
-// The parent of this last node is the root again
-echo "--------- parent\n";
-$parent = $last->parent();
-print_r($parent);
-
-// The children of this parent are the same children as one above
-echo "--------- children of parent\n";
-$children = $parent->childNodes();
-print_r($children);
-
-echo "--------- creating a new attribute\n";
-$attr = $dom->createAttribute("src", "picture.gif");
-print_r($attr);
-
-$rootnode->setAttributeNode($attr); /* Not implemented */
-$attr = $rootnode->setAttribute("src", "picture.gif");
-$attr = $rootnode->getAttribute("src");
-print_r($attr);
-
-echo "--------- attribute of rootnode\n";
-$attrs = $rootnode->attributes();
-print_r($attrs);
-
-echo "--------- children of an attribute\n";
-$children = $attrs[0]->childNodes();
-print_r($children);
-
-?>
diff --git a/tests/testfe b/tests/testfe
deleted file mode 100644
index ea62760635..0000000000
--- a/tests/testfe
+++ /dev/null
@@ -1,18 +0,0 @@
-<?
-$foo = array(7,"foo",3,array(1,2),4);
-
-for ($i=0; $i<3; $i++):
-
-foreach($a, $foo ) {
- if (gettype($a)=="array") {
- print "Array:\n";
- foreach($b, $a) {
- print "\t$b\n";
- }
- print "End of array.\n";
- } else {
- print "$a\n";
- }
-// print "$a\n";
-}
-endfor;
diff --git a/tests/testfunc b/tests/testfunc
deleted file mode 100644
index fa64be2e6f..0000000000
--- a/tests/testfunc
+++ /dev/null
@@ -1,33 +0,0 @@
-<?
-function foo()
-{
- $i=0;
-
- if ($i) {
- $a = "zeev";
- } else {
- $b = "andi";
- }
-}
-
-function bar()
-{
- foo();
-}
-
-for ($i=0; $i<10; $i++) {
- bar();
-}
-
-
-for ($i=0; $i<10; $i++) {
- bar();
-}
-
-print "Got here.....
-
-";
-
-$a = 7;
-$a = 5;
-print "Got here....\n\n";
diff --git a/tests/testfunc.pl b/tests/testfunc.pl
deleted file mode 100644
index 87864866ff..0000000000
--- a/tests/testfunc.pl
+++ /dev/null
@@ -1,20 +0,0 @@
-sub foo()
-{
- my $i=0;
-
- if ($i) {
- my $a = "zeev";
- } else {
- my $b = "andi";
- }
-}
-
-
-sub bar()
-{
- foo();
-}
-
-for ($i=0; $i<1000000; $i++) {
- bar();
-}
diff --git a/tests/testfunc2 b/tests/testfunc2
deleted file mode 100644
index 42f91f2bae..0000000000
--- a/tests/testfunc2
+++ /dev/null
@@ -1,19 +0,0 @@
-<?
-function foo($i)
-{
- if ($i) {
- $a = "zeev";
- } else {
- $b = "andi";
- }
-}
-
-
-function bar($a)
-{
- foo($a);
-}
-
-for ($i=0; $i<10000; $i=$i+1) {
- bar($i);
-}
diff --git a/tests/testfunc2.pl b/tests/testfunc2.pl
deleted file mode 100644
index 7eeaf92ffb..0000000000
--- a/tests/testfunc2.pl
+++ /dev/null
@@ -1,22 +0,0 @@
-sub foo
-{
- my $i = shift(@_);
-
- if ($i) {
- my $a = "zeev";
- } else {
- my $b = "andi";
- }
-}
-
-
-sub bar
-{
- my $i = shift(@_);
-
- foo($i);
-}
-
-for ($i=0; $i<1000000; $i=$i+1) {
- bar($i);
-}
diff --git a/tests/testfuncref b/tests/testfuncref
deleted file mode 100644
index 217e4d14e0..0000000000
--- a/tests/testfuncref
+++ /dev/null
@@ -1,10 +0,0 @@
-<?
-
-function foobar()
-{
- print "foobar\n";
-}
-
-$foobar = "foobar";
-
-$a = ${"foo"."bar"}();
diff --git a/tests/testhyperwave b/tests/testhyperwave
deleted file mode 100644
index 28bc19d2f9..0000000000
--- a/tests/testhyperwave
+++ /dev/null
@@ -1,235 +0,0 @@
-<?
- $id = 188178; // A plain/text document
- $collid = 169828; // A collection
- $query = "Name=m*"; // Search query for test_9
- $host = "gehtnix";
- $username = "annonymous";
- $password = "";
-
- $connect = hw_connect($host, 418, $username, $password);
- if(hw_error($connect)) {
- echo "ERROR: ".hw_errormsg($connect)."\n";
- exit;
- }
-
- // Set all test to 'yes' if they shall be executed
- $test_1 = "no"; // Get the text document with id $id and output it
- $test_2 = "no"; // Check if id $id is in $collid
- $test_3 = "no"; // Convert object record to object array and back
- $test_4 = "no"; // Get object record of object with id $id
- $test_5 = "no"; // List children of $collid
- $test_6 = "no"; // List parents of $id
- $test_7 = "no"; // Insert a new text document
- $test_8 = "no"; // Remove the just inserted text document
- $test_9 = "no"; // Searching for objects with Name $query
- $test_10= "no"; // Listing all anchors of a document
- $test_11= "no"; // Creates document from file and outputs it.
- $test_12= "yes"; // Creates document from file and outputs it.
-
- /* Lists an object array
- */
- function list_attr($attributes) {
-// var_dump($attributes);
-// return;
- for($i=0; $i<count($attributes); $i++) {
- $key = key($attributes);
- switch($key) {
- case "Title":
- case "Description":
- $title_arr = $attributes[$key];
- $cj = count($title_arr);
- printf("%s = ", $key);
- for($j=0; $j<$cj; $j++) {
- $tkey = key($title_arr);
- switch($tkey) {
- case "en":
- $flagfile = "english.gif";
- break;
- case "ge":
- $flagfile = "german.gif";
- break;
- case "du":
- $flagfile = "dutch.gif";
- break;
- default:
- $flagfile = "europe.gif";
- }
- printf("%s:%s; ", $tkey, $title_arr[$tkey]);
-
- next($title_arr);
- }
- printf("\n");
- break;
- default:
- if(is_array($attributes[$key])) {
- $group_arr = $attributes[$key];
- $cj = count($group_arr);
- for($j=0; $j<$cj; $j++) {
- printf("%s = %s\n", $key, $group_arr[$j]);
- next($group_arr);
- }
- } else {
- printf("%s = %s\n", $key, $attributes[$key]);
- }
-
- }
- next($attributes);
- }
- echo "\n";
- }
-
- // Here come the tests
- if($test_1 == "yes") {
- echo "TEST 1 ----------------------------------------------\n";
- echo "Get the text document with id 0x".dechex($id)."\n";
- $doc = hw_gettext($connect, $id);
- if(hw_error($connect)) {
- echo "ERROR: ".hw_errormsg($connect)."\n";
- exit;
- }
- hw_output_document($doc);
- echo "\n";
- }
-
- if($test_2 == "yes") {
- echo "TEST 2 ----------------------------------------------\n";
- echo "Checking if '$id' (0x".dechex($id).") is in collection '$collid (0x".dechex($collid).")'\n";
- $incoll = hw_incollections($connect, array($id), array($collid), 0);
- if(hw_error($connect)) {
- echo "ERROR: ".hw_errormsg($connect)."\n";
- exit;
- }
- for($i=0; $i<count($incoll); $i++)
- echo $incoll[$i]."\n";
- }
-
- if($test_3 == "yes") {
- echo "TEST 3 ----------------------------------------------\n";
- echo "Convert an object array into an object record\n";
- $objrec = hw_array2objrec(array("Title"=>"ge:Hier der Titel", "Author"=>"Hier der Autor"));
- echo $objrec."\n";
- $objrec .= "\nTitle=en:Here the title";
- echo "Add another title and convert it back to an object array\n";
- $objarr = hw_objrec2array($objrec);
- list_attr($objarr);
- }
-
- if($test_4 == "yes") {
- echo "TEST 4 ----------------------------------------------\n";
- echo "Get the object array of document with id 0x".dechex($id)."\n";
- $objrec = hw_getobject($connect, $id);
- if(hw_error($connect)) {
- echo "ERROR: ".hw_errormsg($connect)."\n";
- exit;
- }
- $objarr = hw_objrec2array($objrec);
- list_attr($objarr);
- }
-
- if($test_5 == "yes") {
- echo "TEST 5 ----------------------------------------------\n";
- echo "List the children of collection 0x".dechex($collid)."\n";
- $children = hw_childrenobj($connect, $collid);
- if(hw_error($connect)) {
- echo "ERROR: ".hw_errormsg($connect)."\n";
- exit;
- }
- $c_children = count($children) - 1;
- for($i=0; $i<$c_children; $i++) {
- $objarr = hw_objrec2array($children[$i]);
- list_attr($objarr);
- }
- list_attr($children[$c_children]);
- }
-
- if($test_6 == "yes") {
- echo "TEST 6 ----------------------------------------------\n";
- echo "List the parents of object 0x".dechex($id)."\n";
- $parents = hw_getparentsobj($connect, $collid);
- if(hw_error($connect)) {
- echo "ERROR: ".hw_errormsg($connect)."\n";
- exit;
- }
- $c_parents = count($parents) - 1;
- for($i=0; $i<$c_parents; $i++) {
- $objarr = hw_objrec2array($parents[$i]);
- list_attr($objarr);
- }
- list_attr($parents[$c_parents]);
- }
-
- if($test_7 == "yes") {
- echo "TEST 7 ----------------------------------------------\n";
- echo "Inserting a new text document into 0x".dechex($collid)."\n";
- $objrec = "Type=Document\nDocumentType=text\nName=HWTest\nTitle=en:Component\nMimeType=text/plain\nAuthor=".$username;
- $contents = "Ein bischen Text";
- $doc = hw_new_document($objrec, $contents, strlen($contents)+1);
- $objid = hw_insertdocument($connect, $collid, $doc);
- if(hw_error($connect)) {
- echo "ERROR: ".hw_errormsg($connect)."\n";
- exit;
- }
- $objrec = hw_getobject($connect, $objid);
- if(hw_error($connect)) {
- echo "ERROR: ".hw_errormsg($connect)."\n";
- exit;
- }
- $objarr = hw_objrec2array($objrec);
- list_attr($objarr);
- }
-
- if($test_8 == "yes") {
- echo "TEST 8 ----------------------------------------------\n";
- echo "Removing text document just inserted\n";
- $kk[0] = (int) $objid;
- hw_mv($connect, $kk, $collid, 0);
- if(hw_error($connect)) {
- echo "ERROR: ".hw_errormsg($connect)."\n";
- exit;
- }
- echo "If the document was really deleted you should see an error now\n";
- $objrec = hw_getobject($connect, $objid);
- if(hw_error($connect)) {
- echo "ERROR: ".hw_errormsg($connect)."\n";
- } else {
- $objarr = hw_objrec2array($objrec);
- list_attr($objarr);
- }
- }
-
- if($test_9 == "yes") {
- echo "TEST 9 ----------------------------------------------\n";
- echo "Searching for objects with $query\n";
- $objrecs = hw_getobjectbyqueryobj($connect, $query, -1);
- $c_objrecs = count($objrecs) - 1;
- echo "$c_objrecs found\n";
- for($i=0; $i<$c_objrecs; $i++) {
- $objarr = hw_objrec2array($objrecs[$i]);
- list_attr($objarr);
- }
- list_attr($objrecs[$c_objrecs]);
- }
-
- if($test_10 == "yes") {
- $anchors = hw_getanchorsobj($connect, $id);
- $countanchors = count($anchors) - 1;
- echo "$countanchors Anchors of Object $id\n";
- for($i=0; $i<$countanchors; $i++) {
- $arr = hw_objrec2array($anchors[$i]);
- list_attr($arr);
- }
- }
-
- if($test_11 == "yes") {
- $doc = hw_new_document_from_file("ObjectRecord", "hw_document.txt");
- hw_output_document($doc);
- }
-
- if($test_12 == "yes") {
- $doc = hw_new_document_from_file("ObjectRecord", "hw_document.txt");
- hw_insertanchors($doc, array("Position=0x2 0x7\nObjectID=0x3\nTAnchor=Src\nDest=0x5"), array("ObjectID=0x5\nName=DestDoc"));
- hw_output_document($doc);
- }
-
- hw_close($connect);
-?>
diff --git a/tests/testinclude b/tests/testinclude
deleted file mode 100644
index 1e9854370d..0000000000
--- a/tests/testinclude
+++ /dev/null
@@ -1,5 +0,0 @@
-<?
-print "Before include....\n";
-$retval = include("testarray");
-print "After include, include returned $retval\n";
-?>
diff --git a/tests/testobj b/tests/testobj
deleted file mode 100644
index 66b003ce9c..0000000000
--- a/tests/testobj
+++ /dev/null
@@ -1,29 +0,0 @@
-<?
-define("endl","\n");
-
-class foobar {
- function foobar() {
- $this->initialized = 1;
- }
-};
-
-class barbara extends foobar {
-
-};
-
-$name = "foobar";
-$foo = new $name; // or die("Unable to construct foobar\n");
-//print $foo->initialized;
-
-$boo = new barbara;
-print get_class($foo).endl;
-print get_parent_class($foo).endl;
-print get_class($boo).endl;
-print get_parent_class($boo).endl;
-print method_exists($foo,"foobar").endl;
-print method_exists($boo,"foobar").endl;
-print method_exists($boo,"barbara").endl;
-//$word = new COm("word.application");
-//$word->visible = true;
-//sleep(5);
-//$word->quit();
diff --git a/tests/testpfpro.php b/tests/testpfpro.php
deleted file mode 100644
index ffb1784bdc..0000000000
--- a/tests/testpfpro.php
+++ /dev/null
@@ -1,39 +0,0 @@
-<?
-
-if (!extension_loaded('pfpro')) {
- die("pfpro module is not compiled in PHP\n");
-}
-
-echo "<pre>\n\n";
-
-echo "Payflow Pro library is version ".pfpro_version()."\n";
-
-pfpro_init();
-
-$transaction = array(USER => 'mylogin',
- PWD => 'mypassword',
- TRXTYPE => 'S',
- TENDER => 'C',
- AMT => 1.50,
- ACCT => '4111111111111111',
- EXPDATE => '0900'
- );
-
-$response = pfpro_process($transaction);
-
-if (!$response) {
- die("Couldn't establish link to signio software.\n");
-}
-
-echo "Signio response code was ".$response[RESULT];
-echo ", which means: ".$response[RESPMSG]."\n";
-
-echo "\nDump of the transaction request ";
-print_r($transaction);
-
-echo "\nDump of the response ";
-print_r($response);
-
-pfpro_cleanup();
-
-?>
diff --git a/tests/tests.dsp b/tests/tests.dsp
deleted file mode 100644
index fc19dcfe43..0000000000
--- a/tests/tests.dsp
+++ /dev/null
@@ -1,61 +0,0 @@
-# Microsoft Developer Studio Project File - Name="tests" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) External Target" 0x0106
-
-CFG=tests - Win32 Debug
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "tests.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "tests.mak" CFG="tests - Win32 Debug"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "tests - Win32 Debug" (based on "Win32 (x86) External Target")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "."
-# PROP BASE Intermediate_Dir "."
-# PROP BASE Cmd_Line "NMAKE /f tests.mak"
-# PROP BASE Rebuild_Opt "/a"
-# PROP BASE Target_File "tests.exe"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "."
-# PROP Intermediate_Dir "."
-# PROP Cmd_Line "nmake /nologo /f tests.mak"
-# PROP Rebuild_Opt "/a"
-# PROP Target_File "__test_run_complete__"
-# PROP Bsc_Name ""
-# PROP Target_Dir ""
-# Begin Target
-
-# Name "tests - Win32 Debug"
-
-!IF "$(CFG)" == "tests - Win32 Debug"
-
-!ENDIF
-
-# Begin Source File
-
-SOURCE="..\run-tests.php"
-# End Source File
-# Begin Source File
-
-SOURCE=.\tests.mak
-# End Source File
-# End Target
-# End Project
diff --git a/tests/tests.mak b/tests/tests.mak
deleted file mode 100644
index 8b47143544..0000000000
--- a/tests/tests.mak
+++ /dev/null
@@ -1,27 +0,0 @@
-#
-# Win32 Makefile to run the PHP unit tests.
-#
-# TEST_PHP_EXECUTABLE
-# Required - must point to the PHP executable to test.
-#
-# TEST_PHP_ERROR_STYLE
-# Optional - specifies error format to output so IDE can jump to test source and log.
-# Values: MSVC (Microsoft Visual C++), Emacs
-#
-# TEST_PHP_DETAILED
-# Optional - generates a more complete and detailed log if set.
-# Values: 0 or unset - no details; 1 - detailed.
-#
-
-all : run-tests
-
-BIN=Debug_TS
-
-# Specific test(s) to run (all if not specified).
-TESTS=
-
-run-tests :
- set TEST_PHP_EXECUTABLE=$(BIN)\php-cgi.exe
- set TEST_PHP_ERROR_STYLE=MSVC
- set TEST_PHP_DETAILED=0
- cd .. && $(BIN)\php-cgi.exe -c tests -f run-tests.php $(TESTS) | tee tests.log
diff --git a/tests/testscanf.php b/tests/testscanf.php
deleted file mode 100644
index ad530978c5..0000000000
--- a/tests/testscanf.php
+++ /dev/null
@@ -1,113 +0,0 @@
-<?php
-
-
-function print_value($val,$postfix="<br>") {
- if (is_array($val)) {
- for ($i = 0;$i< count($val);$i++) {
- echo $val[$i] . $postfix;
- }
- } else {
- echo $val . $postfix;
- }
-}
-
-function do_sscanf($string, $format) {
- $s = "sscanf(\"" . $string . ",\"" . $format ."\").";
- echo "$s<br>";
- $s = str_repeat("-", strlen($s));
- echo "$s<br>";
- $output = sscanf($string,$format);
- echo "Result : ";
- print_value( $output );
- echo "$s<br><br>";
-}
-
-
-function run_sscanf_test_cases($filename="scan_cases")
-{
-
- echo "<h3><em><br>Running Test Cases from $filename<br></em></h3>";
- $arr = file($filename);
- for ($i=0;$i < count($arr);$i++) {
- $line_arr = explode("|",$arr[$i]);
-
- $format = $line_arr[0];
- $string = $line_arr[1];
- if (count($arr) > 2) {
- $comment = $line_arr[2];
- } else {
- $comment = "";
- }
- if ( empty($format) || empty($string) ) {
- continue;
- }
- print("<h4>** Case : $comment ******************************</h4>");
- do_sscanf($string,$format);
- }
-}
-
-function simple_tests() {
- echo "Testing sscanf with standard ANSI syntax (values returned by
-reference)-<br>";
- $decimal = -1;
- $string = "";
- $hex = 0;
- $float = 0.0;
- $octal = 0.0;
- $int = -1;
-
- echo "<h3><em><br>Simple Test<br></em></h3>";
- echo "sscanf('10','%d',&\$decimal) <br>";
- echo "<br>BEFORE : <br> decimal = $decimal.";
- $foo = sscanf("10","%d",&$decimal);
- echo "<br>AFTER : <br> decimal = $decimal <br>";
-
-
- echo "<h3><em><br>Simple Test 2<br></em></h3>";
- echo "sscanf(\"ghost 0xface\",\"%s %x\",&\$string, &\$int)<br>";
- echo "<br>BEFORE : <br> string = $string, int = $int<br>";
- $foo = sscanf("ghost 0xface","%s %x",&$string, &$int);
- echo "<br>AFTER : <br> string = $string, int = $int<br>";
- echo " sscan reports : ";
- print_value( $foo,"");
- echo " conversions <br>";
-
- echo "<h3><em><br>Multiple specifiers<br></em></h3>";
- echo "sscanf(\"jabberwocky 1024 0xFF 1.024 644 10\",
- \"%s %d %x %f %o %i\",
- &\$string,&\$decimal,&\$hex,&\$float,&\$octal,&\$int);<br>";
- echo "<br>BEFORE : <br>";
- echo "Decimal = $decimal, String = $string, Hex = $hex<br>";
- echo "Octal = $octal , Float = $float, Int = $int<br>";
- $foo = sscanf( "jabberwocky 1024 0xFF 1.024 644 10",
- "%s %d %x %f %o %i",
- &$string,&$decimal,&$hex,&$float,&$octal,&$int);
- echo "<br>AFTER :<br>";
- echo "decimal = $decimal, string = $string, hex = $hex<br>";
- echo "octal = $octal , float = $float, int = $int<br>";
-
- echo " sscan reports : ";
- print_value( $foo,"");
- echo " conversions <br>";
- echo "----------------------------------------<br>";
-}
-
-
-
-?>
-<html>
- <head>
- <title>Test of sscanf()</title>
- </head>
- <body>
- <strong><h1>Testing sscanf() support in PHP</h1></strong><br>
- <?php
- if (!function_exists('sscanf')) {
- echo "<strong>I'm sorry but sscanf() does not exist !i</strong><br>";
- } else {
- simple_tests();
- run_sscanf_test_cases();
- }
- ?>
- </body>
-</html>
diff --git a/tests/testswf b/tests/testswf
deleted file mode 100644
index e26733237d..0000000000
--- a/tests/testswf
+++ /dev/null
@@ -1,120 +0,0 @@
-<?php
-
-$LINEID=1;
-$LINEDEPTH=50;
-$LINESTEPS=30;
-
-$CIRCLEID=2;
-$CIRCLEDEPT=100;
-
-/* stop playing */
-function stop()
-{
- swf_startdoaction();
- swf_actionStop();
- swf_enddoaction();
-}
-
-/* play stoping */
-function play()
-{
- swf_startdoaction();
- swf_actionPlay();
- swf_enddoaction();
-}
-
-/*
- * demonstrates:
- * defining and placing an object.
- *
- */
-function flipline()
-{
- global $LINESTEPS, $LINEID, $LINEDEPTH;
-
- swf_ortho2(-100.0,100.0,-100.0,100.0);
- swf_defineline($LINEID,-60.0,0.0,60.0,0.0,1.2);
- swf_mulcolor(1.0,1.0,1.0,1.0);
- swf_addcolor(0.0,0.0,0.0,0.0);
- for($i=0; $i<$LINESTEPS; $i++) {
- $p = $i/($LINESTEPS-1.0);
- swf_pushmatrix();
- swf_rotate(60.0*$p,'z');
- swf_translate(20.0+20.0*$p,0.0,0.0);
- swf_rotate(120.0*$p,'z');
- swf_placeobject($LINEID, $LINEDEPTH);
- swf_popmatrix();
- swf_showframe();
- }
- for($i=0; $i<$LINESTEPS; $i++) {
- swf_removeobject($LINEDEPTH);
- if(($i%4) == 0)
- swf_showframe();
- }
- swf_showframe();
-}
-
-/* growblobs follows */
-
-$NBLOBS=8;
-$BLOBSTEPS=20;
-
-/*
- * demonstrates:
- * shape definition
- * placing, and modifying objects.
- *
- */
-function growblobs()
-{
- global $NBLOBS, $BLOBSTEPS, $CIRCLEDEPT, $CIRCLEID;
-
- swf_ortho2(-200.0,200.0,-200.0,200.0);
-
- swf_startshape($CIRCLEID);
- swf_shapefillsolid(0.0,0.0,0.0,1.0);
- swf_shapearc(0.0,0.0,300.0,0.0,360.0);
- swf_endshape();
-
- swf_mulcolor(1.0,1.0,1.0,1.0);
- $startframe = swf_getframe();
- for($j=0; $j<$NBLOBS; $j++) {
- swf_setframe($startframe+2*$j);
- for($i=0; $i<$BLOBSTEPS; $i++) {
- $p = $i/($BLOBSTEPS-1.0);
- swf_pushmatrix();
- swf_scale($p,$p,$p);
- swf_addcolor($p,$p,$p,0.0);
- if($i== 0)
- swf_placeobject($CIRCLEID,$CIRCLEDEPTH+$j);
- else
- swf_modifyobject($CIRCLEDEPTH+$j,MOD_COLOR|MOD_MATRIX);
- swf_popmatrix();
- swf_showframe();
- }
- swf_removeobject($CIRCLEDEPTH+$j);
- }
- swf_showframe();
-}
-
-swf_openfile("test.swf",400.0,400.0,20.0,1.0,1.0,1.0);
-flipline();
-growblobs();
-
-// trytext();
-// makebuttons();
-// stop();
-swf_showframe();
-swf_closefile();
-
-// swf_openfile("images.swf",400.0,400.0,20.0,1.0,1.0,1.0);
-// showimages();
-// brushstrokes();
-// symboltest();
-// stop();
-// swf_showframe();
-// swf_closefile();
-// fprintf(stderr,"wrote images.swf\n");
- exit(0);
-
-?>
diff --git a/win32/EngineSelect.bat b/win32/EngineSelect.bat
deleted file mode 100755
index 0785bd12fc..0000000000
--- a/win32/EngineSelect.bat
+++ /dev/null
@@ -1,5 +0,0 @@
-@if exist ..\ZendEngine2\OBJECTS2_HOWTO (
-move ..\Zend ..\ZendEngine1
-move ..\ZendEngine2 ..\Zend
-echo "PLEASE RESTART VISUAL C++ TO RELOAD THE ZEND PROJECT."
-exit 1 )
diff --git a/win32/EngineSelect.dsp b/win32/EngineSelect.dsp
deleted file mode 100644
index 4aee213c29..0000000000
--- a/win32/EngineSelect.dsp
+++ /dev/null
@@ -1,85 +0,0 @@
-# Microsoft Developer Studio Project File - Name="EngineSelect" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) External Target" 0x0106
-
-CFG=EngineSelect - Win32 Release
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "EngineSelect.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "EngineSelect.mak" CFG="EngineSelect - Win32 Release"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "EngineSelect - Win32 Release" (based on "Win32 (x86) External Target")
-!MESSAGE "EngineSelect - Win32 Debug" (based on "Win32 (x86) External Target")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-
-!IF "$(CFG)" == "EngineSelect - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Cmd_Line "NMAKE /f EngineSelect.mak"
-# PROP BASE Rebuild_Opt "/a"
-# PROP BASE Target_File "EngineSelect.exe"
-# PROP BASE Bsc_Name "EngineSelect.bsc"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release"
-# PROP Intermediate_Dir "Release"
-# PROP Cmd_Line "EngineSelect.bat"
-# PROP Rebuild_Opt "/a"
-# PROP Target_File "EngineSelect.exe"
-# PROP Bsc_Name ""
-# PROP Target_Dir ""
-
-!ELSEIF "$(CFG)" == "EngineSelect - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Cmd_Line "NMAKE /f EngineSelect.mak"
-# PROP BASE Rebuild_Opt "/a"
-# PROP BASE Target_File "EngineSelect.exe"
-# PROP BASE Bsc_Name "EngineSelect.bsc"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug"
-# PROP Intermediate_Dir "Debug"
-# PROP Cmd_Line "EngineSelect.bat"
-# PROP Rebuild_Opt "/a"
-# PROP Target_File "EngineSelect.exe"
-# PROP Bsc_Name ""
-# PROP Target_Dir ""
-
-!ENDIF
-
-# Begin Target
-
-# Name "EngineSelect - Win32 Release"
-# Name "EngineSelect - Win32 Debug"
-
-!IF "$(CFG)" == "EngineSelect - Win32 Release"
-
-!ELSEIF "$(CFG)" == "EngineSelect - Win32 Debug"
-
-!ENDIF
-
-# End Target
-# End Project
diff --git a/win32/build/Makefile b/win32/build/Makefile
deleted file mode 100644
index 203d304c0f..0000000000
--- a/win32/build/Makefile
+++ /dev/null
@@ -1,136 +0,0 @@
-# +----------------------------------------------------------------------+
-# | PHP Version 5 |
-# +----------------------------------------------------------------------+
-# | Copyright (c) 1997-2004 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@thebrainroom.com> |
-# +----------------------------------------------------------------------+
-#
-# $Id$
-# This is the makefile template for the win32 build
-
-CC="$(CL)"
-LD="$(LINK)"
-MC="$(MC)"
-
-MCFILE=$(BUILD_DIR)\wsyslog.rc
-
-all: generated_files $(EXT_TARGETS) $(PECL_TARGETS) $(SAPI_TARGETS)
-
-build_dirs: $(BUILD_DIR) $(BUILD_DIRS_SUB)
-
-generated_files: build_dirs Zend\zend_ini_parser.c \
- Zend\zend_language_parser.c Zend\zend_ini_scanner.c \
- Zend\zend_language_scanner.c \
- ext\standard\parsedate.c \
- $(PHPDEF) $(MCFILE)
-
-$(BUILD_DIR)\$(PHPDLL).def: $(PHP_DLL_DEF_SOURCES)
- type $(PHP_DLL_DEF_SOURCES) > $(BUILD_DIR)\$(PHPDLL).def
-
-Zend\zend_ini_parser.c Zend\zend_ini_parser.h: Zend\zend_ini_parser.y
- $(BISON) --output=Zend/zend_ini_parser.c -v -d -p ini_ Zend/zend_ini_parser.y
-
-Zend\zend_language_parser.c Zend\zend_language_parser.h: Zend\zend_language_parser.y
- $(BISON) --output=Zend/zend_language_parser.c -v -d -p zend Zend/zend_language_parser.y
-
-Zend\zend_ini_scanner.c: Zend\flex.skl Zend\zend_ini_scanner.l
- $(FLEX) -B -i -SZend/flex.skl -Pini_ -oZend/zend_ini_scanner.c Zend/zend_ini_scanner.l
-
-Zend\zend_language_scanner.c: Zend\flex.skl Zend\zend_language_scanner.l
- $(FLEX) -i -SZend/flex.skl -Pzend -oZend/zend_language_scanner.c Zend/zend_language_scanner.l
-
-ext\standard\parsedate.c ext\standard\parsedate.h: ext\standard\parsedate.y
- $(BISON) --output=ext/standard/parsedate.c -v -d ext/standard/parsedate.y
-
-PHPDLL_RES=$(BUILD_DIR)\$(PHPDLL).res
-
-$(MCFILE): win32\build\wsyslog.mc
- $(MC) -h win32\ -r $(BUILD_DIR)\ -x $(BUILD_DIR)\ win32\build\wsyslog.mc
-
-# $(RC) /fo $(MCFILE) $(BUILD_DIR)\wsyslog.rc
-
-$(PHPDLL_RES): win32\build\template.rc
- $(RC) /fo $(PHPDLL_RES) /d FILE_DESCRIPTION="\"PHP Script Interpreter\"" \
- /d FILE_NAME="\"$(PHPDLL)\"" /d PRODUCT_NAME="\"PHP Script Interpreter\"" \
- /I$(BUILD_DIR) /d MC_INCLUDE="\"$(MCFILE)\"" \
- win32\build\template.rc
-
-$(BUILD_DIR)\$(PHPDLL): $(PHPDEF) $(PHP_GLOBAL_OBJS) $(STATIC_EXT_OBJS) $(PHPDLL_RES) $(MCFILE)
- $(LD) /out:$(BUILD_DIR)\$(PHPDLL) $(PHP_LDFLAGS) $(LDFLAGS) $(STATIC_EXT_LDFLAGS) $(PHP_GLOBAL_OBJS) $(STATIC_EXT_OBJS) $(STATIC_EXT_LIBS) $(LIBS) $(PHPDLL_RES)
-
-$(BUILD_DIR)\$(PHPLIB): $(BUILD_DIR)\$(PHPDLL)
-
-$(BUILD_DIR) $(BUILD_DIRS_SUB):
- @echo Recreating build dirs
- @if not exist $(BUILD_DIR) mkdir $(BUILD_DIR)
- @for %D in ($(BUILD_DIRS_SUB)) do @if not exist %D @mkdir %D > NUL
-
-clean-sapi:
- @echo Cleaning SAPI
- @for %D in (_x $(EXT_TARGETS)) do @if exist $(BUILD_DIR)\%D @del /F /Q $(BUILD_DIR)\%D > NUL
- @for %D in (_x $(PECL_TARGETS)) do @if exist $(BUILD_DIR)\%D @del /F /Q $(BUILD_DIR)\%D > NUL
- @for %D in (_x $(SAPI_TARGETS)) do @if exist $(BUILD_DIR)\%D @del /F /Q $(BUILD_DIR)\%D > NUL
- -@del /F /Q $(BUILD_DIR)\$(PHPDLL)
-
-clean: clean-sapi
- @echo Cleaning build dirs
- @for %D in (_x $(BUILD_DIRS_SUB)) do @if exist %D @del /F /Q %D\*.* > NUL
- -@del /F /Q $(BUILD_DIR)\*.res $(BUILD_DIR)\*.lib $(BUILD_DIR)\*.ilk $(BUILD_DIR)\*.pdb $(BUILD_DIR)\*.exp $(PHPDEF) $(BUILD_DIR)\php-$(PHP_VERSION_STRING).zip > NUL
- -rmdir /s /q $(BUILD_DIR)\php-$(PHP_VERSION_STRING)
-
-clean-pecl:
- @echo Cleaning PECL targets only
- -rmdir /s /q $(BUILD_DIR)\pecl
-
-test:
- <<test_suite_uses_lame_env_vars.bat
-set TEST_PHP_EXECUTABLE=$(BUILD_DIR)\php.exe
-$(BUILD_DIR)\php.exe -d open_basedir= -d safe_mode=0 -d output_buffering=0 run-tests.php $(TESTS)
-<<NOKEEP
-
-build-snap: generated_files
- @$(MAKE) "$(BUILD_DIR)\$(PHPDLL)"
- -for %T in ($(SAPI_TARGETS)) do $(MAKE) /I /nologo "%T"
- -for %T in ($(EXT_TARGETS)) do $(MAKE) /I /nologo "%T"
- -for %T in ($(PECL_TARGETS)) do $(MAKE) /I /nologo "%T"
-
-build-dist: $(BUILD_DIR)\deplister.exe
- -rmdir /s /q $(BUILD_DIR)\php-$(PHP_VERSION_STRING)
- -rmdir /s /q $(BUILD_DIR)\pecl-$(PHP_VERSION_STRING)
- -del /f /q $(BUILD_DIR)\php-$(PHP_VERSION_STRING).zip
- $(BUILD_DIR)\php.exe -n win32/build/mkdist.php "$(BUILD_DIR)" "$(PHPDLL)" "$(SAPI_TARGETS)" "$(EXT_TARGETS)" "$(PECL_TARGETS)" "$(SNAPSHOT_TEMPLATE)"
- cd $(BUILD_DIR)\php-$(PHP_VERSION_STRING)
- -$(ZIP) -9 -r ..\php-$(PHP_VERSION_STRING).zip .
- cd ..\..
- cd $(BUILD_DIR)\pecl-$(PHP_VERSION_STRING)
- -$(ZIP) -9 -r ..\pecl-$(PHP_VERSION_STRING).zip .
- cd ..\..
-
-dist: all build-dist
-snap: build-snap build-dist
-
-$(BUILD_DIR)\deplister.exe: win32\build\deplister.c
- $(CL) /Fo$(BUILD_DIR)\ /Fd$(BUILD_DIR)\ /Fp$(BUILD_DIR)\ /FR$(BUILD_DIR) -o$(BUILD_DIR)\deplister.exe win32\build\deplister.c imagehlp.lib
-
-msi-installer: dist
- $(BUILD_DIR)\php.exe ..\php-installer\build-installer.php "$(BUILD_DIR)" "$(PHPDLL)" "$(SAPI_TARGETS)" "$(EXT_TARGETS)" "$(PECL_TARGETS)"
-
-# need to redirect, since INSTALL is a file in the root...
-install: really-install
-
-really-install:
- @if not exist $(PHP_PREFIX) mkdir $(PHP_PREFIX)
- @copy $(BUILD_DIR)\*.exe $(PHP_PREFIX) /y >nul
- @copy $(BUILD_DIR)\*.dll $(PHP_PREFIX) /y >nul
- $(PHP_PREFIX)\php.exe -n -dextension_dir=$(PHP_PREFIX) win32/build/registersyslog.php $(PHP_PREFIX)\$(PHPDLL)
-
-
diff --git a/win32/build/buildconf.js b/win32/build/buildconf.js
deleted file mode 100644
index b0d20170aa..0000000000
--- a/win32/build/buildconf.js
+++ /dev/null
@@ -1,231 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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@thebrainroom.com> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id: buildconf.js,v 1.12 2004-08-03 01:23:35 wez Exp $ */
-// This generates a configure script for win32 build
-
-WScript.StdOut.WriteLine("Rebuilding configure.js");
-var FSO = WScript.CreateObject("Scripting.FileSystemObject");
-var C = FSO.CreateTextFile("configure.js", true);
-
-var modules = "";
-var MODULES = WScript.CreateObject("Scripting.Dictionary");
-
-function file_get_contents(filename)
-{
- var F = FSO.OpenTextFile(filename, 1);
- var t = F.ReadAll();
- F.Close();
- return t;
-}
-
-function Module_Item(module_name, config_path, dir_line, deps, content)
-{
- this.module_name = module_name;
- this.config_path = config_path;
- this.dir_line = dir_line;
- this.deps = deps;
- this.content = content;
-}
-
-function find_config_w32(dirname)
-{
- if (!FSO.FolderExists(dirname)) {
- return;
- }
-
- var f = FSO.GetFolder(dirname);
- var fc = new Enumerator(f.SubFolders);
- var c, i, ok, n;
- var item = null;
- var re_dep_line = new RegExp("ADD_EXTENSION_DEP\\([^,]*\\s*,\\s*['\"]([^'\"]+)['\"].*\\);", "gm");
-
- for (; !fc.atEnd(); fc.moveNext())
- {
- ok = true;
- /* check if we already picked up a module with the same dirname;
- * if we have, don't include it here */
- n = FSO.GetFileName(fc.item());
-
- if (n == 'CVS' || n == 'tests')
- continue;
-
- // WScript.StdOut.WriteLine("checking " + dirname + "/" + n);
- if (MODULES.Exists(n)) {
- WScript.StdOut.WriteLine("Skipping " + dirname + "/" + n + " -- already have a module with that name");
- continue;
- }
-
-
- c = FSO.BuildPath(fc.item(), "config.w32");
- if (FSO.FileExists(c)) {
-// WScript.StdOut.WriteLine(c);
-
- var dir_line = "configure_module_dirname = condense_path(FSO.GetParentFolderName('"
- + c.replace(new RegExp('(["\\\\])', "g"), '\\$1') + "'));\r\n";
- var contents = file_get_contents(c);
- var deps = new Array();
-
- // parse out any deps from the file
- var calls = contents.match(re_dep_line);
- if (calls != null) {
- for (i = 0; i < calls.length; i++) {
- // now we need the extension name out of this thing
- if (calls[i].match(re_dep_line)) {
-// WScript.StdOut.WriteLine("n depends on " + RegExp.$1);
- deps[deps.length] = RegExp.$1;
- }
- }
- }
-
- item = new Module_Item(n, c, dir_line, deps, contents);
- MODULES.Add(n, item);
- }
- }
-}
-
-// Emit core modules array. This is used by a snapshot
-// build to override a default "yes" value so that external
-// modules don't break the build by becoming statically compiled
-function emit_core_module_list()
-{
- var module_names = (new VBArray(MODULES.Keys())).toArray();
- var i, mod_name, j;
- var item;
- var output = "";
-
- C.WriteLine("core_module_list = new Array(");
-
- // first, look for modules with empty deps; emit those first
- for (i in module_names) {
- mod_name = module_names[i];
- C.WriteLine("\"" + mod_name.replace(/_/g, "-") + "\",");
- }
-
- C.WriteLine("false // dummy");
-
- C.WriteLine(");");
-}
-
-
-function emit_module(item)
-{
- return item.dir_line + item.content;
-}
-
-function emit_dep_modules(module_names)
-{
- var i, mod_name, j;
- var output = "";
- var item = null;
-
- for (i in module_names) {
- mod_name = module_names[i];
-
- if (MODULES.Exists(mod_name)) {
- item = MODULES.Item(mod_name);
- MODULES.Remove(mod_name);
- if (item.deps.length) {
- output += emit_dep_modules(item.deps);
- }
- output += emit_module(item);
- }
- }
-
- return output;
-}
-
-function gen_modules()
-{
- var module_names = (new VBArray(MODULES.Keys())).toArray();
- var i, mod_name, j;
- var item;
- var output = "";
-
- // first, look for modules with empty deps; emit those first
- for (i in module_names) {
- mod_name = module_names[i];
- item = MODULES.Item(mod_name);
- if (item.deps.length == 0) {
- MODULES.Remove(mod_name);
- output += emit_module(item);
- }
- }
-
- // now we are left with modules that have dependencies on other modules
- module_names = (new VBArray(MODULES.Keys())).toArray();
- output += emit_dep_modules(module_names);
-
- return output;
-}
-
-if (FSO.FileExists("ZendEngine2\\OBJECTS2_HOWTO")) {
- if (FSO.FolderExists("Zend")) {
- FSO.MoveFolder("Zend", "ZendEngine1");
- }
- FSO.MoveFolder("ZendEngine2", "Zend");
-}
-
-// Write the head of the configure script
-C.WriteLine("/* This file automatically generated from win32/build/confutils.js */");
-C.Write(file_get_contents("win32/build/confutils.js"));
-
-// Pull in code from sapi and extensions
-modules = file_get_contents("win32/build/config.w32");
-
-// Pick up confs from TSRM and Zend if present
-find_config_w32(".");
-find_config_w32("sapi");
-find_config_w32("ext");
-emit_core_module_list();
-
-find_config_w32("pecl");
-find_config_w32("..\\pecl");
-find_config_w32("pecl\\rpc");
-find_config_w32("..\\pecl\\rpc");
-
-
-// Now generate contents of module based on MODULES, chasing dependencies
-// to ensure that dependent modules are emitted first
-modules += gen_modules();
-
-// Look for ARG_ENABLE or ARG_WITH calls
-re = new RegExp("(ARG_(ENABLE|WITH)\([^;]+\);)", "gm");
-calls = modules.match(re);
-for (i = 0; i < calls.length; i++) {
- item = calls[i];
- C.WriteLine("try {");
- C.WriteLine(item);
- C.WriteLine("} catch (e) {");
- C.WriteLine('\tSTDOUT.WriteLine("problem: " + e);');
- C.WriteLine("}");
-}
-
-C.WriteBlankLines(1);
-C.WriteLine("conf_process_args();");
-C.WriteBlankLines(1);
-
-// Comment out the calls from their original positions
-modules = modules.replace(re, "/* $1 */");
-C.Write(modules);
-
-C.WriteBlankLines(1);
-C.Write(file_get_contents("win32/build/configure.tail"));
-
-WScript.StdOut.WriteLine("Now run 'cscript /nologo configure.js --help'");
-
diff --git a/win32/build/config.w32 b/win32/build/config.w32
deleted file mode 100644
index 015e121c18..0000000000
--- a/win32/build/config.w32
+++ /dev/null
@@ -1,235 +0,0 @@
-// vim:ft=javascript
-// $Id$
-// "Master" config file; think of it as a configure.in
-// equivalent.
-
-ARG_WITH('cygwin', 'Path to cygwin utilities on your system', '\\cygwin');
-
-PATH_PROG('cl');
-PATH_PROG('link');
-PATH_PROG('nmake');
-// we don't want to define LIB, as that will override the default library path
-// that is set in that env var
-PATH_PROG('lib', null, 'MAKE_LIB');
-PATH_PROG('bison');
-PATH_PROG('flex');
-PATH_PROG('re2c');
-PATH_PROG('zip');
-PATH_PROG('lemon');
-PATH_PROG('mc', WshShell.Environment("Process").Item("PATH"));
-
-ARG_ENABLE('debug', 'Compile with debugging symbols', "no");
-ARG_ENABLE('zts', 'Thread safety', 'yes');
-
-// Configures the hard-coded installation dir
-ARG_ENABLE('prefix', 'where PHP will be installed', '');
-if (PHP_PREFIX == '') {
- PHP_PREFIX = "C:\\php" + PHP_VERSION;
- if (PHP_DEBUG == "yes")
- PHP_PREFIX += "\\debug";
-}
-DEFINE('PHP_PREFIX', PHP_PREFIX);
-
-DEFINE("BASE_INCLUDES", "/I . /I main /I regex /I Zend /I TSRM ");
-
-// CFLAGS for building the PHP dll
-DEFINE("CFLAGS_PHP", "/D _USRDLL /D PHP5DLLTS_EXPORTS /D PHP_EXPORTS \
-/D LIBZEND_EXPORTS /D TSRM_EXPORTS /D SAPI_EXPORTS /D WINVER=0x400");
-
-DEFINE('CFLAGS_PHP_OBJ', '$(CFLAGS_PHP) $(STATIC_EXT_CFLAGS)');
-
-// General CFLAGS for building objects
-DEFINE("CFLAGS", "/nologo /YX /FD $(BASE_INCLUDES) /D _WINDOWS \
-/D ZEND_WIN32=1 /D PHP_WIN32=1 /D WIN32 /D _MBCS");
-
-// General link flags
-DEFINE("LDFLAGS", "/nologo /version:" +
- PHP_VERSION + "." + PHP_MINOR_VERSION + "." + PHP_RELEASE_VERSION);
-
-// General DLL link flags
-DEFINE("DLL_LDFLAGS", "/dll ");
-
-// PHP DLL link flags
-DEFINE("PHP_LDFLAGS", "$(DLL_LDFLAGS)");
-
-// General libs
-// urlmon.lib ole32.lib oleaut32.lib uuid.lib gdi32.lib winspool.lib comdlg32.lib
-DEFINE("LIBS", "kernel32.lib ole32.lib user32.lib advapi32.lib shell32.lib ws2_32.lib");
-
-// Set some debug/release specific options
-if (PHP_DEBUG == "yes") {
- ADD_FLAG("CFLAGS", "/LDd /MDd /Gm /ZI /Od /GZ /D _DEBUG /D ZEND_DEBUG=1");
- ADD_FLAG("LDFLAGS", "/debug");
- // Avoid problems when linking to release libraries that use the release
- // version of the libc
- ADD_FLAG("PHP_LDFLAGS", "/nodefaultlib:msvcrt");
-} else {
- // Equivalent to Release_TSInline build -> best optimization
- ADD_FLAG("CFLAGS", "/LD /MD /W3 /Ox /D NDebug /D NDEBUG \
-/D ZEND_WIN32_FORCE_INLINE /GB /GF /D ZEND_DEBUG=0");
- // if you have VS.Net /GS hardens the binary against buffer overruns
- // ADD_FLAG("CFLAGS", "/GS");
-}
-
-if (PHP_ZTS == "yes") {
- ADD_FLAG("CFLAGS", "/D ZTS=1");
-}
-
-// we want msvcrt in the PHP DLL
-ADD_FLAG("PHP_LDFLAGS", "/nodefaultlib:libcmt");
-
-// set up the build dir and DLL name
-if (PHP_DEBUG == "yes" && PHP_ZTS == "yes") {
- DEFINE("BUILD_DIR", "Debug_TS");
- DEFINE("PHPDLL", "php5ts_debug.dll");
- DEFINE("PHPLIB", "php5ts_debug.lib");
-} else if (PHP_DEBUG == "yes" && PHP_ZTS == "no") {
- DEFINE("BUILD_DIR", "Debug");
- DEFINE("PHPDLL", "php5_debug.dll");
- DEFINE("PHPLIB", "php5_debug.lib");
-} else if (PHP_DEBUG == "no" && PHP_ZTS == "yes") {
- DEFINE("BUILD_DIR", "Release_TS");
- DEFINE("PHPDLL", "php5ts.dll");
- DEFINE("PHPLIB", "php5ts.lib");
-} else if (PHP_DEBUG == "no" && PHP_ZTS == "no") {
- DEFINE("BUILD_DIR", "Release");
- DEFINE("PHPDLL", "php5.dll");
- DEFINE("PHPLIB", "php5.lib");
-}
-
-// Find the php_build dir - it contains headers and libraries
-// that we need
-ARG_WITH('php-build', 'Path to where you extracted http://www.php.net/extra/win32build.zip. Assumes that it is a sibling of this source dir (..\\php_build) if not specified', 'no');
-
-if (PHP_PHP_BUILD == 'no') {
- if (FSO.FolderExists("..\\php_build")) {
- PHP_PHP_BUILD = "..\\php_build";
- } else if (FSO.FolderExists("..\\win32build")) {
- PHP_PHP_BUILD = "..\\win32build";
- } else if (FSO.FolderExists("..\\php-win32-dev\\php_build")) {
- PHP_PHP_BUILD = "..\\php-win32-dev\\php_build";
- }
-}
-
-ARG_WITH('extra-includes', 'Extra include path to use when building everything', '');
-ARG_WITH('extra-libs', 'Extra library path to use when linking everything', '');
-
-var php_usual_include_suspects = "..\\php_build\\include;..\\win32build\\include;..\\bindlib_w32";
-var php_usual_lib_suspects = "..\\php_build\\lib;..\\win32build\\lib;..\\bindlib_w32";
-
-// Poke around for some headers
-function probe_basic_headers()
-{
- var p;
-
- if (PHP_PHP_BUILD != "no") {
- php_usual_include_suspects += ";" + PHP_PHP_BUILD + "\\include";
- php_usual_lib_suspects += ";" + PHP_PHP_BUILD + "\\lib";
- }
-
- p = CHECK_HEADER_ADD_INCLUDE("arpa\\nameser.h", "CFLAGS", php_usual_include_suspects);
-
- // hack to catch common location of libs
- if (typeof(p) == "string") {
- p = p.replace(new RegExp("include$"), "lib");
- ADD_FLAG("LDFLAGS", '/libpath:"' + p + '" ');
- php_usual_lib_suspects += ";" + p;
- } else if (!p) {
- ERROR("We really need that arpa\\nameser.h file - it is part of the win32build package");
- }
-}
-
-function add_extra_dirs()
-{
- var path, i, f;
-
- if (PHP_EXTRA_INCLUDES.length) {
- path = PHP_EXTRA_INCLUDES.split(';');
- for (i = 0; i < path.length; i++) {
- f = FSO.GetAbsolutePathName(path[i]);
- if (FSO.FolderExists(f)) {
- ADD_FLAG("CFLAGS", '/I "' + f + '" ');
- }
- }
- }
- if (PHP_EXTRA_LIBS.length) {
- path = PHP_EXTRA_LIBS.split(';');
- for (i = 0; i < path.length; i++) {
- f = FSO.GetAbsolutePathName(path[i]);
- if (FSO.FolderExists(f)) {
- ADD_FLAG("LDFLAGS", '/libpath:"' + f + '" ');
- }
- }
- }
-
-}
-
-probe_basic_headers();
-add_extra_dirs();
-CHECK_LIB("resolv.lib");
-
-//DEFINE("PHP_BUILD", PHP_PHP_BUILD);
-
-STDOUT.WriteBlankLines(1);
-STDOUT.WriteLine("Build dir: " + get_define('BUILD_DIR'));
-STDOUT.WriteLine("PHP Core: " + get_define('PHPDLL') + " and " + get_define('PHPLIB'));
-
-ADD_SOURCES("Zend", "zend_language_parser.c zend_language_scanner.c \
- zend_ini_parser.c zend_ini_scanner.c zend_alloc.c zend_compile.c \
- zend_constants.c zend_dynamic_array.c zend_exceptions.c \
- zend_execute_API.c zend_highlight.c \
- zend_llist.c zend_opcode.c zend_operators.c zend_ptr_stack.c \
- zend_stack.c zend_variables.c zend.c zend_API.c zend_extensions.c \
- zend_hash.c zend_list.c zend_indent.c zend_builtin_functions.c \
- zend_sprintf.c zend_ini.c zend_qsort.c zend_multibyte.c zend_ts_hash.c \
- zend_stream.c zend_iterators.c zend_interfaces.c zend_objects.c \
- zend_object_handlers.c zend_objects_API.c \
- zend_mm.c zend_default_classes.c zend_reflection_api.c zend_execute.c");
-
-ADD_SOURCES("main", "main.c snprintf.c spprintf.c safe_mode.c fopen_wrappers.c \
- php_scandir.c php_ini.c SAPI.c rfc1867.c php_content_types.c strlcpy.c \
- strlcat.c mergesort.c reentrancy.c php_variables.c php_ticks.c network.c \
- php_open_temporary_file.c php_logos.c output.c internal_functions.c");
-
-ADD_SOURCES("main/streams", "streams.c cast.c memory.c filter.c plain_wrapper.c \
- userspace.c transports.c xp_socket.c mmap.c");
-
-ADD_SOURCES("win32", "crypt_win32.c flock.c glob.c md5crypt.c pwd.c readdir.c \
- registry.c select.c sendmail.c time.c wfile.c winutil.c wsyslog.c globals.c");
-
-ADD_SOURCES("regex", "regcomp.c regerror.c regexec.c regfree.c");
-
-STDOUT.WriteBlankLines(1);
-
-/* Can we build with IPv6 support? */
-ARG_ENABLE("ipv6", "Disable IPv6 support (default is turn it on if available)", "yes");
-
-var main_network_has_ipv6 = 0;
-if (PHP_IPV6 == "yes") {
- main_network_has_ipv6 = CHECK_HEADER_ADD_INCLUDE("wspiapi.h", "CFLAGS") ? 1 : 0;
-}
-if (main_network_has_ipv6) {
- STDOUT.WriteLine("Enabling IPv6 support");
-}
-AC_DEFINE('HAVE_GETADDRINFO', main_network_has_ipv6);
-AC_DEFINE('HAVE_GAI_STRERROR', main_network_has_ipv6);
-AC_DEFINE('HAVE_IPV6', main_network_has_ipv6);
-
-ARG_ENABLE("memory-limit", "Enable memory limit checking code", "no");
-
-AC_DEFINE('MEMORY_LIMIT', PHP_MEMORY_LIMIT == "yes" ? 1 : 0);
-
-AC_DEFINE('HAVE_USLEEP', 1);
-
-/* For snapshot builders, where can we find the additional
- * files that make up the snapshot template? */
-ARG_WITH("snapshot-template", "Path to snapshot builder template dir", "no");
-
-if (PHP_SNAPSHOT_TEMPLATE == "no") {
- /* default is as a sibling of the php_build dir */
- if (FSO.FolderExists(PHP_PHP_BUILD + "\\..\\template")) {
- PHP_SNAPSHOT_TEMPLATE = FSO.GetAbsolutePathName(PHP_PHP_BUILD + "\\..\\template");
- }
-}
-
-DEFINE('SNAPSHOT_TEMPLATE', PHP_SNAPSHOT_TEMPLATE);
diff --git a/win32/build/config.w32.h.in b/win32/build/config.w32.h.in
deleted file mode 100644
index 89c16a9a1a..0000000000
--- a/win32/build/config.w32.h.in
+++ /dev/null
@@ -1,144 +0,0 @@
-/*
- Build Configuration Template for Win32.
- $Id$
-*/
-
-/* Default PHP / PEAR directories */
-#define PHP_CONFIG_FILE_PATH (getenv("SystemRoot"))?getenv("SystemRoot"):""
-#define CONFIGURATION_FILE_PATH "php.ini"
-#define PEAR_INSTALLDIR "@PREFIX@\\pear"
-#define PHP_BINDIR "@PREFIX@"
-#define PHP_DATADIR "@PREFIX@"
-#define PHP_EXTENSION_DIR "@PREFIX@"
-#define PHP_INCLUDE_PATH ".;@PREFIX@\\pear"
-#define PHP_LIBDIR "@PREFIX@"
-#define PHP_LOCALSTATEDIR "@PREFIX@"
-#define PHP_PREFIX "@PREFIX@"
-#define PHP_SYSCONFDIR "@PREFIX@"
-
-/* Enable / Disable crypt() function (default: enabled) */
-#define HAVE_CRYPT 1
-#define PHP_STD_DES_CRYPT 1
-#define PHP_EXT_DES_CRYPT 0
-#define PHP_MD5_CRYPT 1
-#define PHP_BLOWFISH_CRYPT 0
-
-/* PHP Runtime Configuration */
-#define PHP_URL_FOPEN 1
-#define PHP_SAFE_MODE 0
-#define MAGIC_QUOTES 0
-#define USE_CONFIG_FILE 1
-#define DEFAULT_SHORT_OPEN_TAG "1"
-
-/* Platform-Specific Configuration. Should not be changed. */
-#define PHP_SIGCHILD 0
-#define HAVE_LIBBIND 1
-#define HAVE_GETSERVBYNAME 1
-#define HAVE_GETSERVBYPORT 1
-#define HAVE_GETPROTOBYNAME 1
-#define HAVE_GETPROTOBYNUMBER 1
-#define STDIN_FILENO 0
-#define STDOUT_FILENO 1
-#define STDERR_FILENO 2
-#define HAVE_ERRMSG_H 0
-#undef HAVE_ADABAS
-#undef HAVE_SOLID
-#undef HAVE_LINK
-#undef HAVE_SYMLINK
-
-/* its in win32/time.c */
-#define HAVE_USLEEP 1
-
-#define HAVE_GETCWD 1
-#define HAVE_POSIX_READDIR_R 1
-#define NEED_ISBLANK 1
-#define DISCARD_PATH 0
-#undef HAVE_SETITIMER
-#undef HAVE_IODBC
-#define HAVE_LIBDL 1
-#define HAVE_SENDMAIL 1
-#define HAVE_GETTIMEOFDAY 1
-#define HAVE_PUTENV 1
-#define HAVE_LIMITS_H 1
-#define HAVE_TZSET 1
-#define HAVE_TZNAME 1
-#undef HAVE_FLOCK
-#define HAVE_ALLOCA 1
-#undef HAVE_SYS_TIME_H
-#define HAVE_SIGNAL_H 1
-#undef HAVE_ST_BLKSIZE
-#undef HAVE_ST_BLOCKS
-#define HAVE_ST_RDEV 1
-#define HAVE_UTIME_NULL 1
-#define HAVE_VPRINTF 1
-#define STDC_HEADERS 1
-#define REGEX 1
-#define HSREGEX 1
-#define HAVE_GCVT 1
-#define HAVE_GETLOGIN 1
-#define HAVE_GETTIMEOFDAY 1
-#define HAVE_MEMCPY 1
-#define HAVE_MEMMOVE 1
-#define HAVE_PUTENV 1
-#define HAVE_REGCOMP 1
-#define HAVE_SETLOCALE 1
-#define HAVE_LOCALECONV 1
-#define HAVE_LOCALE_H 1
-#ifndef HAVE_LIBBIND
-# define HAVE_SETVBUF 1
-#endif
-#define HAVE_SHUTDOWN 1
-#define HAVE_SNPRINTF 1
-#define HAVE_VSNPRINTF 1
-#define HAVE_STRCASECMP 1
-#define HAVE_STRDUP 1
-#define HAVE_STRERROR 1
-#define HAVE_STRSTR 1
-#define HAVE_TEMPNAM 1
-#define HAVE_UTIME 1
-#undef HAVE_DIRENT_H
-#define HAVE_ASSERT_H 1
-#define HAVE_FCNTL_H 1
-#define HAVE_GRP_H 0
-#define HAVE_PWD_H 1
-#define HAVE_STRING_H 1
-#undef HAVE_SYS_FILE_H
-#undef HAVE_SYS_SOCKET_H
-#undef HAVE_SYS_WAIT_H
-#define HAVE_SYSLOG_H 1
-#undef HAVE_UNISTD_H
-#define HAVE_LIBDL 1
-#define HAVE_LIBM 1
-#define HAVE_CUSERID 0
-#undef HAVE_RINT
-#define HAVE_STRFTIME 1
-/* int and long are stll 32bit in 64bit compiles */
-#define SIZEOF_INT 4
-#define SIZEOF_LONG 4
-/* MSVC.6/NET don't allow 'long long' or know 'intmax_t' */
-#define SIZEOF_LONG_LONG_INT 0
-#define SIZEOF_LONG_LONG 0
-#define SIZEOF_INTMAX_T 0
-#define ssize_t SSIZE_T
-#ifdef _WIN64
-# define SIZEOF_SIZE_T 8
-# define SIZEOF_PTRDIFF_T 8
-#else
-# define SIZEOF_SIZE_T 4
-# define SIZEOF_PTRDIFF_T 4
-#endif
-#define HAVE_GLOB
-#define PHP_SHLIB_SUFFIX "dll"
-#define HAVE_SQLDATASOURCES
-
-/* Win32 supports strcoll */
-#define HAVE_STRCOLL 1
-
-/* Win32 support proc_open */
-#define PHP_CAN_SUPPORT_PROC_OPEN 1
-
-#define HAVE_MBLEN
-
-#undef HAVE_ATOF_ACCEPTS_NAN
-#undef HAVE_ATOF_ACCEPTS_INF
-#define HAVE_HUGE_VAL_NAN 1
diff --git a/win32/build/configure.tail b/win32/build/configure.tail
deleted file mode 100644
index e74287d2aa..0000000000
--- a/win32/build/configure.tail
+++ /dev/null
@@ -1,6 +0,0 @@
-// vim:ft=javascript
-// $Id$
-// tail end of configure
-
-generate_files();
-
diff --git a/win32/build/confutils.js b/win32/build/confutils.js
deleted file mode 100644
index 4e8caef03d..0000000000
--- a/win32/build/confutils.js
+++ /dev/null
@@ -1,1496 +0,0 @@
-// Utils for configure script
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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@thebrainroom.com> |
- +----------------------------------------------------------------------+
-*/
-
-// $Id: confutils.js,v 1.46 2004-08-03 00:58:29 wez Exp $
-
-var STDOUT = WScript.StdOut;
-var STDERR = WScript.StdErr;
-var WshShell = WScript.CreateObject("WScript.Shell");
-var FSO = WScript.CreateObject("Scripting.FileSystemObject");
-var MFO = null;
-var SYSTEM_DRIVE = WshShell.Environment("Process").Item("SystemDrive");
-var PROGRAM_FILES = WshShell.Environment("Process").Item("ProgramFiles");
-
-if (PROGRAM_FILES == null) {
- PROGRAM_FILES = "C:\\Program Files";
-}
-
-if (!FSO.FileExists("README.CVS-RULES")) {
- STDERR.WriteLine("Must be run from the root of the php source");
- WScript.Quit(10);
-}
-
-var CWD = WshShell.CurrentDirectory;
-
-if (typeof(CWD) == "undefined") {
- CWD = FSO.GetParentFolderName(FSO.GetAbsolutePathName("README.CVS-RULES"));
-}
-
-/* defaults; we pick up the precise versions from configure.in */
-var PHP_VERSION = 5;
-var PHP_MINOR_VERSION = 0;
-var PHP_RELEASE_VERSION = 0;
-var PHP_EXTRA_VERSION = "";
-var PHP_VERSION_STRING = "5.0.0";
-
-function get_version_numbers()
-{
- var cin = file_get_contents("configure.in");
-
- if (cin.match(new RegExp("MAJOR_VERSION=(\\d+)"))) {
- PHP_VERSION = RegExp.$1;
- }
- if (cin.match(new RegExp("MINOR_VERSION=(\\d+)"))) {
- PHP_MINOR_VERSION = RegExp.$1;
- }
- if (cin.match(new RegExp("RELEASE_VERSION=(\\d+)"))) {
- PHP_RELEASE_VERSION = RegExp.$1;
- }
- PHP_VERSION_STRING = PHP_VERSION + "." + PHP_MINOR_VERSION + "." + PHP_RELEASE_VERSION;
-
- if (cin.match(new RegExp("EXTRA_VERSION=\"([^\"]+)\""))) {
- PHP_EXTRA_VERSION = RegExp.$1;
- if (PHP_EXTRA_VERSION.length) {
- PHP_VERSION_STRING += PHP_EXTRA_VERSION;
- }
- }
- DEFINE('PHP_VERSION_STRING', PHP_VERSION_STRING);
-}
-
-configure_args = new Array();
-configure_subst = WScript.CreateObject("Scripting.Dictionary");
-
-configure_hdr = WScript.CreateObject("Scripting.Dictionary");
-build_dirs = new Array();
-
-extension_include_code = "";
-extension_module_ptrs = "";
-
-get_version_numbers();
-
-/* execute a command and return the output as a string */
-function execute(command_line)
-{
- var e = WshShell.Exec(command_line);
- var ret = "";
-
- ret = e.StdOut.ReadAll();
-
-//STDOUT.WriteLine("command " + command_line);
-//STDOUT.WriteLine(ret);
-
- return ret;
-}
-
-function condense_path(path)
-{
- path = FSO.GetAbsolutePathName(path);
-
- if (path.substr(0, CWD.length).toLowerCase()
- == CWD.toLowerCase() &&
- (path.charCodeAt(CWD.length) == 92 || path.charCodeAt(CWD.length) == 47)) {
- return path.substr(CWD.length + 1);
- }
-
- var a = CWD.split("\\");
- var b = path.split("\\");
- var i, j;
-
- for (i = 0; i < b.length; i++) {
- if (a[i].toLowerCase() == b[i].toLowerCase())
- continue;
- if (i > 0) {
- /* first difference found */
- path = "";
- for (j = 0; j < a.length - i; j++) {
- path += "..\\";
- }
- for (j = i; j < b.length; j++) {
- path += b[j];
- if (j < b.length - 1)
- path += "\\";
- }
- return path;
- }
- /* on a different drive */
- break;
- }
-
- return path;
-}
-
-function ConfigureArg(type, optname, helptext, defval)
-{
- var opptype = type == "enable" ? "disable" : "without";
-
- if (defval == "yes" || defval == "yes,shared") {
- this.arg = "--" + opptype + "-" + optname;
- this.imparg = "--" + type + "-" + optname;
- } else {
- this.arg = "--" + type + "-" + optname;
- this.imparg = "--" + opptype + "-" + optname;
- }
-
- this.optname = optname;
- this.helptext = helptext;
- this.defval = defval;
- this.symval = optname.toUpperCase().replace(new RegExp("-", "g"), "_");
- this.seen = false;
- this.argval = defval;
-}
-
-function ARG_WITH(optname, helptext, defval)
-{
- configure_args[configure_args.length] = new ConfigureArg("with", optname, helptext, defval);
-}
-
-function ARG_ENABLE(optname, helptext, defval)
-{
- configure_args[configure_args.length] = new ConfigureArg("enable", optname, helptext, defval);
-}
-
-function analyze_arg(argval)
-{
- var ret = new Array();
- var shared = false;
-
- if (argval == "shared") {
- shared = true;
- argval = "yes";
- } else if (argval == null) {
- /* nothing */
- } else if (arg_match = argval.match(new RegExp("^shared,(.*)"))) {
- shared = true;
- argval = arg_match[1];
- } else if (arg_match = argval.match(new RegExp("^(.*),shared$"))) {
- shared = true;
- argval = arg_match[1];
- }
-
- ret[0] = shared;
- ret[1] = argval;
- return ret;
-}
-
-function word_wrap_and_indent(indent, text, line_suffix, indent_char)
-{
- if (text == null) {
- return "";
- }
-
- var words = text.split(new RegExp("\\s+", "g"));
- var i = 0;
- var ret_text = "";
- var this_line = "";
- var t;
- var space = "";
- var lines = 0;
-
- if (line_suffix == null) {
- line_suffix = "";
- }
-
- if (indent_char == null) {
- indent_char = " ";
- }
-
- for (i = 0; i < indent; i++) {
- space += indent_char;
- }
-
- for (i = 0; i < words.length; i++) {
- if (this_line.length) {
- t = this_line + " " + words[i];
- } else {
- t = words[i];
- }
-
- if (t.length + indent > 78) {
- if (lines++) {
- ret_text += space;
- }
- ret_text += this_line + line_suffix + "\r\n";
- this_line = "";
- }
-
- if (this_line.length) {
- this_line += " " + words[i];
- } else {
- this_line = words[i];
- }
- }
-
- if (this_line.length) {
- if (lines)
- ret_text += space;
- ret_text += this_line;
- }
-
- return ret_text;
-}
-
-function conf_process_args()
-{
- var i, j;
- var configure_help_mode = false;
- var analyzed = false;
- var nice = "cscript /nologo configure.js ";
- var disable_all = false;
-
- args = WScript.Arguments;
- for (i = 0; i < args.length; i++) {
- arg = args(i);
- nice += ' "' + arg + '"';
- if (arg == "--help") {
- configure_help_mode = true;
- break;
- }
- if (arg == "--disable-all") {
- disable_all = true;
- continue;
- }
-
- // If it is --foo=bar, split on the equals sign
- arg = arg.split("=", 2);
- argname = arg[0];
- if (arg.length > 1) {
- argval = arg[1];
- } else {
- argval = null;
- }
-
- // Find the arg
- found = false;
- for (j = 0; j < configure_args.length; j++) {
- if (argname == configure_args[j].imparg || argname == configure_args[j].arg) {
- found = true;
-
- arg = configure_args[j];
- arg.seen = true;
-
- analyzed = analyze_arg(argval);
- shared = analyzed[0];
- argval = analyzed[1];
-
- if (argname == arg.imparg) {
- /* we matched the implicit, or default arg */
- if (argval == null) {
- argval = arg.defval;
- }
- } else {
- /* we matched the non-default arg */
- if (argval == null) {
- argval = arg.defval == "no" ? "yes" : "no";
- }
- }
-
- arg.argval = argval;
- eval("PHP_" + arg.symval + " = argval;");
- eval("PHP_" + arg.symval + "_SHARED = shared;");
- break;
- }
- }
- if (!found) {
- STDERR.WriteLine("Unknown option " + argname + "; please try configure.js --help for a list of valid options");
- WScript.Quit(2);
- }
- }
-
- if (configure_help_mode) {
- STDOUT.WriteLine(word_wrap_and_indent(0,
-"Options that enable extensions and SAPI will accept \
-'yes' or 'no' as a parameter. They also accept 'shared' \
-as a synonym for 'yes' and request a shared build of that \
-module. Not all modules can be built as shared modules; \
-configure will display [shared] after the module name if \
-can be built that way. \
-"
- ));
- STDOUT.WriteBlankLines(1);
-
- // Measure width to pretty-print the output
- max_width = 0;
- for (i = 0; i < configure_args.length; i++) {
- arg = configure_args[i];
- if (arg.arg.length > max_width)
- max_width = arg.arg.length;
- }
-
- for (i = 0; i < configure_args.length; i++) {
- arg = configure_args[i];
-
- n = max_width - arg.arg.length;
- pad = " ";
- for (j = 0; j < n; j++) {
- pad += " ";
- }
- STDOUT.WriteLine(" " + arg.arg + pad + word_wrap_and_indent(max_width + 5, arg.helptext));
- }
- WScript.Quit(1);
- }
-
- var snapshot_build_exclusions = new Array(
- 'debug', 'crt-debug', 'lzf-better-compression',
- 'php-build', 'snapshot-template',
- 'pcre-regex', 'fastcgi', 'force-cgi-redirect',
- 'path-info-check', 'zts', 'ipv6', 'memory-limit'
- );
- var force;
-
- // Now set any defaults we might have missed out earlier
- for (i = 0; i < configure_args.length; i++) {
- arg = configure_args[i];
- if (arg.seen)
- continue;
- analyzed = analyze_arg(arg.defval);
- shared = analyzed[0];
- argval = analyzed[1];
-
- // Don't trust a default "yes" answer for a non-core module
- // in a snapshot build
- if (PHP_SNAPSHOT_BUILD != "no" && argval == "yes" && !shared) {
-
- force = true;
- for (j = 0; j < snapshot_build_exclusions.length; j++) {
- if (snapshot_build_exclusions[j] == arg.optname) {
- force = false;
- break;
- }
- }
-
- if (force) {
- /* now check if it is a core module */
- force = false;
- for (j = 0; j < core_module_list.length; j++) {
- if (core_module_list[j] == arg.optname) {
- force = true;
- break;
- }
- }
-
- if (!force) {
- STDOUT.WriteLine("snapshot: forcing " + arg.arg + " shared");
- shared = true;
- }
- }
- }
-
- if (PHP_SNAPSHOT_BUILD != "no" && argval == "no") {
- force = true;
- for (j = 0; j < snapshot_build_exclusions.length; j++) {
- if (snapshot_build_exclusions[j] == arg.optname) {
- force = false;
- break;
- }
- }
- if (force) {
- STDOUT.WriteLine("snapshot: forcing " + arg.optname + " on");
- argval = "yes";
- shared = true;
- }
- }
-
- if (disable_all) {
- force = true;
- for (j = 0; j < snapshot_build_exclusions.length; j++) {
- if (snapshot_build_exclusions[j] == arg.optname) {
- force = false;
- break;
- }
- }
- if (force) {
- argval = "no";
- shared = false;
- }
- }
-
- eval("PHP_" + arg.symval + " = argval;");
- eval("PHP_" + arg.symval + "_SHARED = shared;");
- }
-
- MFO = FSO.CreateTextFile("Makefile.objects", true);
-
- STDOUT.WriteLine("Saving configure options to config.nice.bat");
- var nicefile = FSO.CreateTextFile("config.nice.bat", true);
- nicefile.WriteLine(nice);
- nicefile.Close();
-
- AC_DEFINE('CONFIGURE_COMMAND', nice);
-}
-
-function DEFINE(name, value)
-{
- if (configure_subst.Exists(name)) {
- configure_subst.Remove(name);
- }
- configure_subst.Add(name, value);
-}
-
-// Searches a set of paths for a file;
-// returns the dir in which the file was found,
-// true if it was found in the default env path,
-// or false if it was not found at all.
-// env_name is the optional name of an env var
-// specifying the default path to search
-function search_paths(thing_to_find, explicit_path, env_name)
-{
- var i, found = false, place = false, file, env;
-
- STDOUT.Write("Checking for " + thing_to_find + " ... ");
-
- thing_to_find = thing_to_find.replace(new RegExp("/", "g"), "\\");
-
- if (explicit_path != null) {
- if (typeof(explicit_path) == "string") {
- explicit_path = explicit_path.split(";");
- }
-
- for (i = 0; i < explicit_path.length; i++) {
- file = glob(explicit_path[i] + "\\" + thing_to_find);
- if (file) {
- found = true;
- place = file[0];
- place = place.substr(0, place.length - thing_to_find.length - 1);
- break;
- }
- }
- }
-
- if (!found && env_name != null) {
- env = WshShell.Environment("Process").Item(env_name);
- env = env.split(";");
- for (i = 0; i < env.length; i++) {
- file = glob(env[i] + "\\" + thing_to_find);
- if (file) {
- found = true;
- place = true;
- break;
- }
- }
- }
-
- if (found && place == true) {
- STDOUT.WriteLine(" <in default path>");
- } else if (found) {
- STDOUT.WriteLine(" " + place);
- } else {
- STDOUT.WriteLine(" <not found>");
- }
- return place;
-}
-
-function PATH_PROG(progname, additional_paths, symbol)
-{
- var exe;
- var place;
- var cyg_path = PHP_CYGWIN + "\\bin;" + PHP_CYGWIN + "\\usr\\local\\bin";
-
- exe = progname + ".exe";
-
- if (additional_paths == null) {
- additional_paths = cyg_path;
- } else {
- additional_paths += ";" + cyg_path;
- }
-
- place = search_paths(exe, additional_paths, "PATH");
-
- if (place == true) {
- place = exe;
- } else if (place != false) {
- place = place + "\\" + exe;
- }
-
- if (place) {
- if (symbol == null) {
- symbol = progname.toUpperCase();
- }
- DEFINE(symbol, place);
- }
- return place;
-}
-
-function find_pattern_in_path(pattern, path)
-{
- if (path == null) {
- return false;
- }
-
- var dirs = path.split(';');
- var i;
- var items;
-
- for (i = 0; i < dirs.length; i++) {
- items = glob(dirs[i] + "\\" + pattern);
- if (items) {
- return condense_path(items[0]);
- }
- }
- return false;
-}
-
-function CHECK_LIB(libnames, target, path_to_check, common_name)
-{
- STDOUT.Write("Checking for library " + libnames + " ... ");
-
- if (common_name == null && target != null) {
- common_name = target;
- }
-
- if (path_to_check == null) {
- path_to_check = "";
- }
-
- // if they specified a common name for the package that contains
- // the library, tag some useful defaults on to the end of the
- // path to be searched
- if (common_name != null) {
- path_to_check += ";" + PHP_PHP_BUILD + "\\" + common_name + "*";
- path_to_check += ";" + PHP_PHP_BUILD + "\\lib\\" + common_name + "*";
- path_to_check += ";..\\" + common_name + "*";
- }
-
- // Determine target for build flags
- if (target == null) {
- target = "";
- } else {
- target = "_" + target.toUpperCase();
- }
-
- // Expand path to include general dirs
- path_to_check += ";" + php_usual_lib_suspects;
-
- // It is common practice to put libs under one of these dir names
- var subdirs = new Array(PHP_DEBUG == "yes" ? "Debug" : "Release", "lib", "libs", "libexec");
-
- // libnames can be ; separated list of accepted library names
- libnames = libnames.split(';');
-
- var i, j, k, libname;
- var location = false;
- var path = path_to_check.split(';');
-
- for (i = 0; i < libnames.length; i++) {
- libname = libnames[i];
-
- for (k = 0; k < path.length; k++) {
- location = glob(path[k] + "\\" + libname);
- if (location) {
- location = location[0];
- break;
- }
- for (j = 0; j < subdirs.length; j++) {
- location = glob(path[k] + "\\" + subdirs[j] + "\\" + libname);
- if (location) {
- location = location[0];
- break;
- }
- }
- if (location)
- break;
- }
-
- if (location) {
- location = condense_path(location);
- var libdir = FSO.GetParentFolderName(location);
- libname = FSO.GetFileName(location);
- ADD_FLAG("LDFLAGS" + target, '/libpath:"' + libdir + '" ');
- ADD_FLAG("LIBS" + target, libname);
-
- STDOUT.WriteLine(location);
-
- return location;
- }
-
- // Check in their standard lib path
- location = find_pattern_in_path(libname, WshShell.Environment("Process").Item("LIB"));
-
- if (location) {
- location = condense_path(location);
- libname = FSO.GetFileName(location);
- ADD_FLAG("LIBS" + target, libname);
-
- STDOUT.WriteLine("<in LIB path> " + libname);
- return location;
- }
-
- // Check in their general extra libs path
- location = find_pattern_in_path(libname, PHP_EXTRA_LIBS);
- if (location) {
- location = condense_path(location);
- libname = FSO.GetFileName(location);
- ADD_FLAG("LIBS" + target, libname);
- STDOUT.WriteLine("<in extra libs path>");
- return location;
- }
- }
-
- STDOUT.WriteLine("<not found>");
-
- return false;
-}
-
-function OLD_CHECK_LIB(libnames, target, path_to_check)
-{
- if (target == null) {
- target = "";
- } else {
- target = "_" + target.toUpperCase();
- }
-
- if (path_to_check == null) {
- path_to_check = php_usual_lib_suspects;
- } else {
- path_to_check += ";" + php_usual_lib_suspects;
- }
- var have = 0;
- var p;
- var i;
- var libname;
-
- var subdir = PHP_DEBUG == "yes" ? "Debug" : "Release";
-
- libnames = libnames.split(';');
- for (i = 0; i < libnames.length; i++) {
- libname = libnames[i];
- p = search_paths(libname, path_to_check, "LIB");
-
- if (!p) {
- p = search_paths(subdir + "\\" + libname, path_to_check, "LIB");
- if (p) {
- p += "\\" + subdir;
- }
- }
-
- if (typeof(p) == "string") {
- ADD_FLAG("LDFLAGS" + target, '/libpath:"' + p + '" ');
- ADD_FLAG("LIBS" + target, libname);
- have = 1;
- } else if (p == true) {
- ADD_FLAG("LIBS" + target, libname);
- have = 1;
- } else {
- /* not found in the defaults or the explicit paths,
- * so check the general extra libs; if we find
- * it here, no need to add another /libpath: for it as we
- * already have it covered, but we need to add the lib
- * to LIBS_XXX */
- if (false != search_paths(libname, PHP_EXTRA_LIBS, null)) {
- ADD_FLAG("LIBS" + target, libname);
- have = 1;
- }
- }
-
- if (have) {
- break;
- }
- }
-
-// AC_DEFINE("HAVE_" + header_name.toUpperCase().replace(new RegExp("/\\\\-\.", "g"), "_"), have);
-
- return have;
-
-}
-
-function CHECK_FUNC_IN_HEADER(header_name, func_name, path_to_check)
-{
- var c = false;
- var sym;
-
- STDOUT.Write("Checking for " + func_name + " in " + header_name + " ... ");
-
- c = GREP_HEADER(header_name, func_name, path_to_check);
-
- sym = func_name.toUpperCase();
- sym = sym.replace(new RegExp("[\\\\/\.-]", "g"), "_");
-
- AC_DEFINE("HAVE_" + sym, c ? 1 : 0);
-
- if (c) {
- STDOUT.WriteLine("OK");
- return c;
- }
- STDOUT.WriteLine("No");
- return false;
-}
-
-function GREP_HEADER(header_name, regex, path_to_check)
-{
- var c = false;
-
- if (FSO.FileExists(path_to_check + "\\" + header_name)) {
- c = file_get_contents(path_to_check + "\\" + header_name);
- }
-
- if (!c) {
- /* look in the include path */
-
- var p = search_paths(header_name, path_to_check, "INCLUDE");
- if (typeof(p) == "string") {
- c = file_get_contents(p);
- } else if (p == false) {
- p = search_paths(header_name, PHP_EXTRA_INCLUDES, null);
- if (typeof(p) == "string") {
- c = file_get_contents(p);
- }
- }
- if (!c) {
- return false;
- }
- }
-
- if (typeof(regex) == "string") {
- regex = new RegExp(regex);
- }
-
- if (c.match(regex)) {
- /* caller can now use RegExp.$1 etc. to get at patterns */
- return true;
- }
- return false;
-}
-
-function CHECK_HEADER_ADD_INCLUDE(header_name, flag_name, path_to_check, use_env, add_dir_part)
-{
- var dir_part_to_add = "";
-
- if (use_env == null) {
- use_env = true;
- }
-
- // if true, add the dir part of the header_name to the include path
- if (add_dir_part == null) {
- add_dir_part = false;
- } else if (add_dir_part) {
- var basename = FSO.GetFileName(header_name);
- dir_part_to_add = "\\" + header_name.substr(0, header_name.length - basename.length - 1);
- }
-
- if (path_to_check == null) {
- path_to_check = php_usual_include_suspects;
- } else {
- path_to_check += ";" + php_usual_include_suspects;
- }
-
- var p = search_paths(header_name, path_to_check, use_env ? "INCLUDE" : null);
- var have = 0;
- var sym;
-
- if (typeof(p) == "string") {
- ADD_FLAG(flag_name, '/I "' + p + dir_part_to_add + '" ');
- } else if (p == false) {
- /* not found in the defaults or the explicit paths,
- * so check the general extra includes; if we find
- * it here, no need to add another /I for it as we
- * already have it covered, unless we are adding
- * the dir part.... */
- p = search_paths(header_name, PHP_EXTRA_INCLUDES, null);
- if (typeof(p) == "string" && add_dir_part) {
- ADD_FLAG(flag_name, '/I "' + p + dir_part_to_add + '" ');
- }
- }
- have = p ? 1 : 0
-
- sym = header_name.toUpperCase();
- sym = sym.replace(new RegExp("[\\\\/\.-]", "g"), "_");
-
- AC_DEFINE("HAVE_" + sym, have);
-
- return p;
-}
-
-/* emits rule to generate version info for a SAPI
- * or extension. Returns the name of the .res file
- * that will be generated */
-function generate_version_info_resource(makefiletarget, creditspath)
-{
- var resname = makefiletarget + ".res";
- var res_desc = "PHP " + makefiletarget;
- var res_prod_name = res_desc;
- var credits;
- var thanks = "";
- var logo = "";
-
- if (FSO.FileExists(creditspath + '/CREDITS')) {
- credits = FSO.OpenTextFile(creditspath + '/CREDITS', 1);
- res_desc = credits.ReadLine();
- try {
- thanks = credits.ReadLine();
- } catch (e) {
- thanks = null;
- }
- if (thanks == null) {
- thanks = "";
- } else {
- thanks = "Thanks to " + thanks;
- }
- credits.Close();
- }
-
- if (makefiletarget.match(new RegExp("\\.exe$"))) {
- logo = " /D WANT_LOGO ";
- }
-
- MFO.WriteLine("$(BUILD_DIR)\\" + resname + ": win32\\build\\template.rc");
- MFO.WriteLine("\t$(RC) /fo $(BUILD_DIR)\\" + resname + logo +
- ' /d FILE_DESCRIPTION="\\"' + res_desc + '\\"" /d FILE_NAME="\\"' + makefiletarget +
- '\\"" /d PRODUCT_NAME="\\"' + res_prod_name + '\\"" /d THANKS_GUYS="\\"' +
- thanks + '\\"" win32\\build\\template.rc');
- MFO.WriteBlankLines(1);
-
- return resname;
-}
-
-function SAPI(sapiname, file_list, makefiletarget, cflags)
-{
- var SAPI = sapiname.toUpperCase();
- var ldflags;
- var resname;
- var ld = "$(LD)";
-
- STDOUT.WriteLine("Enabling SAPI " + configure_module_dirname);
-
- MFO.WriteBlankLines(1);
- MFO.WriteLine("# objects for SAPI " + sapiname);
- MFO.WriteBlankLines(1);
-
- if (cflags) {
- ADD_FLAG('CFLAGS_' + SAPI, cflags);
- }
-
- ADD_SOURCES(configure_module_dirname, file_list, sapiname);
- MFO.WriteBlankLines(1);
- MFO.WriteLine("# SAPI " + sapiname);
- MFO.WriteBlankLines(1);
-
- /* generate a .res file containing version information */
- resname = generate_version_info_resource(makefiletarget, configure_module_dirname);
-
- MFO.WriteLine(makefiletarget + ": $(BUILD_DIR)\\" + makefiletarget);
- MFO.WriteLine("\t@echo SAPI " + configure_module_dirname + " build complete");
- MFO.WriteLine("$(BUILD_DIR)\\" + makefiletarget + ": $(DEPS_" + SAPI + ") $(" + SAPI + "_GLOBAL_OBJS) $(BUILD_DIR)\\$(PHPLIB) $(BUILD_DIR)\\" + resname);
-
- if (makefiletarget.match(new RegExp("\\.dll$"))) {
- ldflags = "/dll $(LDFLAGS)";
- } else if (makefiletarget.match(new RegExp("\\.lib$"))) {
- ldflags = "$(LDFLAGS)";
- ld = "$(MAKE_LIB)";
- } else {
- ldflags = "$(LDFLAGS)";
- }
-
- MFO.WriteLine("\t" + ld + " /nologo /out:$(BUILD_DIR)\\" + makefiletarget + " " + ldflags + " $(" + SAPI + "_GLOBAL_OBJS) $(BUILD_DIR)\\$(PHPLIB) $(LDFLAGS_" + SAPI + ") $(LIBS_" + SAPI + ") $(BUILD_DIR)\\" + resname);
-
- DEFINE('CFLAGS_' + SAPI + '_OBJ', '$(CFLAGS_' + SAPI + ')');
-
- if (configure_module_dirname.match("pecl")) {
- ADD_FLAG("PECL_TARGETS", makefiletarget);
- } else {
- ADD_FLAG("SAPI_TARGETS", makefiletarget);
- }
-
- MFO.WriteBlankLines(1);
-}
-
-function file_get_contents(filename)
-{
- var f, c;
- try {
- f = FSO.OpenTextFile(filename, 1);
- c = f.ReadAll();
- f.Close();
- return c;
- } catch (e) {
- STDOUT.WriteLine("Problem reading " + filename);
- return false;
- }
-}
-
-// Add a dependency on another extension, so that
-// the dependencies are built before extname
-function ADD_EXTENSION_DEP(extname, dependson, optional)
-{
- var EXT = extname.toUpperCase();
- var DEP = dependson.toUpperCase();
- var dep_present = false;
- var dep_shared = false;
-
- try {
- dep_present = eval("PHP_" + DEP);
- dep_shared = eval("PHP_" + DEP + "_SHARED");
- } catch (e) {
- dep_present = "no";
- dep_shared = false;
- }
-
- if (optional) {
- if (dep_present == "no")
- return;
- }
-
- var ext_shared = eval("PHP_" + EXT + "_SHARED");
-
- if (dep_shared) {
- if (!ext_shared) {
- if (optional) {
- return;
- }
- ERROR("static " + extname + " cannot depend on shared " + dependson);
- }
- ADD_FLAG("LDFLAGS_" + EXT, "/libpath:$(BUILD_DIR)");
- ADD_FLAG("LIBS_" + EXT, "php_" + dependson + ".lib");
- ADD_FLAG("DEPS_" + EXT, "$(BUILD_DIR)\\php_" + dependson + ".lib");
- }
-}
-
-function EXTENSION(extname, file_list, shared, cflags, dllname)
-{
- var objs = null;
- var EXT = extname.toUpperCase();
-
- if (shared == null) {
- eval("shared = PHP_" + EXT + "_SHARED;");
- }
- if (cflags == null) {
- cflags = "";
- }
-
- if (shared) {
- STDOUT.WriteLine("Enabling extension " + configure_module_dirname + " [shared]");
- cflags = "/D COMPILE_DL_" + EXT + " /D " + EXT + "_EXPORTS=1 " + cflags;
- ADD_FLAG("CFLAGS_PHP", "/D COMPILE_DL_" + EXT);
- } else {
- STDOUT.WriteLine("Enabling extension " + configure_module_dirname);
- }
-
- MFO.WriteBlankLines(1);
- MFO.WriteLine("# objects for EXT " + extname);
- MFO.WriteBlankLines(1);
-
-
- ADD_SOURCES(configure_module_dirname, file_list, extname);
-
- MFO.WriteBlankLines(1);
-
- if (shared) {
- if (dllname == null) {
- dllname = "php_" + extname + ".dll";
- }
- var libname = dllname.substring(0, dllname.length-4) + ".lib";
-
- var resname = generate_version_info_resource(dllname, configure_module_dirname);
- var ld = "$(LD)";
-
- MFO.WriteLine("$(BUILD_DIR)\\" + dllname + " $(BUILD_DIR)\\" + libname + ": $(DEPS_" + EXT + ") $(" + EXT + "_GLOBAL_OBJS) $(BUILD_DIR)\\$(PHPLIB) $(BUILD_DIR)\\" + resname);
- MFO.WriteLine("\t" + ld + " /out:$(BUILD_DIR)\\" + dllname + " $(DLL_LDFLAGS) $(LDFLAGS) $(LDFLAGS_" + EXT + ") $(" + EXT + "_GLOBAL_OBJS) $(BUILD_DIR)\\$(PHPLIB) $(LIBS_" + EXT + ") $(LIBS) $(BUILD_DIR)\\" + resname);
- MFO.WriteBlankLines(1);
-
- if (configure_module_dirname.match("pecl")) {
- ADD_FLAG("PECL_TARGETS", dllname);
- } else {
- ADD_FLAG("EXT_TARGETS", dllname);
- }
- MFO.WriteLine(dllname + ": $(BUILD_DIR)\\" + dllname);
- MFO.WriteLine("\t@echo EXT " + extname + " build complete");
- MFO.WriteBlankLines(1);
-
- DEFINE('CFLAGS_' + EXT + '_OBJ', '$(CFLAGS_' + EXT + ')');
- } else {
- ADD_FLAG("STATIC_EXT_OBJS", "$(" + EXT + "_GLOBAL_OBJS)");
- ADD_FLAG("STATIC_EXT_LIBS", "$(LIBS_" + EXT + ")");
- ADD_FLAG("STATIC_EXT_LDFLAGS", "$(LDFLAGS_" + EXT + ")");
- ADD_FLAG("STATIC_EXT_CFLAGS", "$(CFLAGS_" + EXT + ")");
-
- /* find the header that declares the module pointer,
- * so we can include it in internal_functions.c */
- var ext_dir = FSO.GetFolder(configure_module_dirname);
- var fc = new Enumerator(ext_dir.Files);
- var re = /\.h$/;
- var s, c;
- for (; !fc.atEnd(); fc.moveNext()) {
- s = fc.item() + "";
- if (s.match(re)) {
- c = file_get_contents(s);
- if (c.match("phpext_")) {
- extension_include_code += '#include "' + configure_module_dirname + '/' + FSO.GetFileName(s) + '"\r\n';
- }
- }
- }
-
- extension_module_ptrs += '\tphpext_' + extname + '_ptr,\r\n';
-
- DEFINE('CFLAGS_' + EXT + '_OBJ', '$(CFLAGS_PHP) $(CFLAGS_' + EXT + ')');
- }
- ADD_FLAG("CFLAGS_" + EXT, cflags);
-}
-
-function ADD_SOURCES(dir, file_list, target)
-{
- var i;
- var tv;
- var src, obj, sym, flags;
-
- if (target == null) {
- target = "php";
- }
-
- sym = target.toUpperCase() + "_GLOBAL_OBJS";
- flags = "CFLAGS_" + target.toUpperCase() + '_OBJ';
-
- if (configure_subst.Exists(sym)) {
- tv = configure_subst.Item(sym);
- } else {
- tv = "";
- }
-
- file_list = file_list.split(new RegExp("\\s+"));
- file_list.sort();
-
- var re = new RegExp("\.[a-z0-9A-Z]+$");
-
- dir = dir.replace(new RegExp("/", "g"), "\\");
- var objs_line = "";
- var srcs_line = "";
-
- var sub_build = "$(BUILD_DIR)\\";
-
- /* if module dir is not a child of the main source dir,
- * we need to tweak it; we should have detected such a
- * case in condense_path and rewritten the path to
- * be relative.
- * This probably breaks for non-sibling dirs, but that
- * is not a problem as buildconf only checks for pecl
- * as either a child or a sibling */
- var build_dir = dir.replace(new RegExp("^..\\\\"), "");
-
- var mangle_dir = build_dir.replace(new RegExp("[\\\\/.]", "g"), "_");
- var bd_flags_name = "CFLAGS_BD_" + mangle_dir.toUpperCase();
-
- var dirs = build_dir.split("\\");
- var i, d = "";
- for (i = 0; i < dirs.length; i++) {
- d += dirs[i];
- build_dirs[build_dirs.length] = d;
- d += "\\";
- }
- sub_build += d;
-
-
- DEFINE(bd_flags_name, "/Fo" + sub_build + " /Fd" + sub_build + " /Fp" + sub_build + " /FR" + sub_build + " ");
-
- for (i in file_list) {
- src = file_list[i];
- obj = src.replace(re, ".obj");
- tv += " " + sub_build + obj;
-
- if (PHP_ONE_SHOT == "yes") {
- if (i > 0) {
- objs_line += " " + sub_build + obj;
- srcs_line += " " + dir + "\\" + src;
- } else {
- objs_line = sub_build + obj;
- srcs_line = dir + "\\" + src;
- }
- } else {
- MFO.WriteLine(sub_build + obj + ": " + dir + "\\" + src);
- MFO.WriteLine("\t$(CC) $(" + flags + ") $(CFLAGS) $(" + bd_flags_name + ") -c " + dir + "\\" + src + " -o " + sub_build + obj);
- }
- }
-
- if (PHP_ONE_SHOT == "yes") {
- MFO.WriteLine(objs_line + ": " + srcs_line);
- MFO.WriteLine("\t$(CC) $(" + flags + ") $(CFLAGS) $(" + bd_flags_name + ") -c " + srcs_line);
- }
-
- DEFINE(sym, tv);
-}
-
-function generate_internal_functions()
-{
- var infile, outfile;
- var indata;
-
- STDOUT.WriteLine("Generating main/internal_functions.c");
-
- infile = FSO.OpenTextFile("main/internal_functions.c.in", 1);
- indata = infile.ReadAll();
- infile.Close();
-
- indata = indata.replace("@EXT_INCLUDE_CODE@", extension_include_code);
- indata = indata.replace("@EXT_MODULE_PTRS@", extension_module_ptrs);
-
- if (FSO.FileExists("main/internal_functions.c")) {
- var origdata = file_get_contents("main/internal_functions.c");
-
- if (origdata == indata) {
- STDOUT.WriteLine("\t[content unchanged; skipping]");
- return;
- }
- }
-
- outfile = FSO.CreateTextFile("main/internal_functions.c", true);
- outfile.Write(indata);
- outfile.Close();
-}
-
-function generate_files()
-{
- var i, dir, bd, last;
-
- STDOUT.WriteBlankLines(1);
- STDOUT.WriteLine("Creating build dirs...");
- dir = get_define("BUILD_DIR");
- build_dirs.sort();
- last = null;
-
- if (!FSO.FolderExists(dir)) {
- FSO.CreateFolder(dir);
- }
-
- for (i = 0; i < build_dirs.length; i++) {
- bd = FSO.BuildPath(dir, build_dirs[i]);
- if (bd == last) {
- continue;
- }
- last = bd;
- ADD_FLAG("BUILD_DIRS_SUB", bd);
- if (!FSO.FolderExists(bd)) {
- FSO.CreateFolder(bd);
- }
- }
-
- STDOUT.WriteLine("Generating files...");
- generate_makefile();
- generate_internal_functions();
- generate_config_h();
-
-
- STDOUT.WriteLine("Done.");
- STDOUT.WriteBlankLines(1);
- if (PHP_SNAPSHOT_BUILD != "no") {
- STDOUT.WriteLine("Type 'nmake snap' to build a PHP snapshot");
- } else {
- STDOUT.WriteLine("Type 'nmake' to build PHP");
- }
-}
-
-function generate_config_h()
-{
- var infile, outfile;
- var indata;
- var prefix;
-
- prefix = PHP_PREFIX.replace(new RegExp("\\\\", "g"), "\\\\");
-
- STDOUT.WriteLine("Generating main/config.w32.h");
-
- infile = FSO.OpenTextFile("win32/build/config.w32.h.in", 1);
- indata = infile.ReadAll();
- infile.Close();
-
- outfile = FSO.CreateTextFile("main/config.w32.h", true);
-
- indata = indata.replace(new RegExp("@PREFIX@", "g"), prefix);
- outfile.Write(indata);
-
- var keys = (new VBArray(configure_hdr.Keys())).toArray();
- var i, j;
- var item;
- var pieces, stuff_to_crack, chunk;
-
- outfile.WriteBlankLines(1);
- outfile.WriteLine("/* values determined by configure.js */");
-
- for (i in keys) {
- item = configure_hdr.Item(keys[i]);
- outfile.WriteBlankLines(1);
- outfile.WriteLine("/* " + item[1] + " */");
- pieces = item[0];
-
- if (typeof(pieces) == "string" && pieces.charCodeAt(0) == 34) {
- /* quoted string have a maximal length of 2k under vc.
- * solution is to crack them and let the compiler concat
- * them implicitly */
- stuff_to_crack = pieces;
- pieces = "";
-
- while (stuff_to_crack.length) {
- j = 65;
- while (stuff_to_crack.charCodeAt(j) != 32 && j < stuff_to_crack.length)
- j++;
-
- chunk = stuff_to_crack.substr(0, j);
- pieces += chunk;
- stuff_to_crack = stuff_to_crack.substr(chunk.length);
- if (stuff_to_crack.length)
- pieces += '" "';
- }
- }
-
- outfile.WriteLine("#define " + keys[i] + " " + pieces);
- }
-
- outfile.Close();
-}
-
-function generate_makefile()
-{
- STDOUT.WriteLine("Generating Makefile");
- var MF = FSO.CreateTextFile("Makefile", true);
-
- MF.WriteLine("# Generated by configure.js");
-
- /* spit out variable definitions */
- var keys = (new VBArray(configure_subst.Keys())).toArray();
- var i;
-
- for (i in keys) {
- // The trailing space is needed to prevent the trailing backslash
- // that is part of the build dir flags (CFLAGS_BD_XXX) from being
- // seen as a line continuation character
- MF.WriteLine(keys[i] + "=" +
- //word_wrap_and_indent(1, configure_subst.Item(keys[i]), ' \\', '\t') + " "
- configure_subst.Item(keys[i]) + " "
- );
- MF.WriteBlankLines(1);
- }
-
- MF.WriteBlankLines(1);
-
- var TF = FSO.OpenTextFile("win32/build/Makefile", 1);
- MF.Write(TF.ReadAll());
- TF.Close();
-
- MF.WriteBlankLines(2);
-
- MFO.Close();
- TF = FSO.OpenTextFile("Makefile.objects", 1);
- MF.Write(TF.ReadAll());
- TF.Close();
-
- MF.Close();
-}
-
-function ADD_FLAG(name, flags, target)
-{
- if (target != null) {
- name = target.toUpperCase() + "_" + name;
- }
- if (configure_subst.Exists(name)) {
- var curr_flags = configure_subst.Item(name);
-
- if (curr_flags.indexOf(flags) >= 0) {
- return;
- }
-
- flags = curr_flags + " " + flags;
- configure_subst.Remove(name);
- }
- configure_subst.Add(name, flags);
-}
-
-function get_define(name)
-{
- return configure_subst.Item(name);
-}
-
-// Add a .def to the core to export symbols
-function ADD_DEF_FILE(name)
-{
- if (!configure_subst.Exists("PHPDEF")) {
- DEFINE("PHPDEF", "$(BUILD_DIR)\\$(PHPDLL).def");
- ADD_FLAG("PHP_LDFLAGS", "/def:$(PHPDEF)");
- }
- ADD_FLAG("PHP_DLL_DEF_SOURCES", name);
-}
-
-function AC_DEFINE(name, value, comment, quote)
-{
- if (quote == null) {
- quote = true;
- }
- if (quote && typeof(value) == "string") {
- value = '"' + value.replace(new RegExp('(["\\\\])', "g"), '\\$1') + '"';
- } else if (value.length == 0) {
- value = '""';
- }
- var item = new Array(value, comment);
- if (configure_hdr.Exists(name)) {
- var orig_item = configure_hdr.Item(name);
- STDOUT.WriteLine("AC_DEFINE[" + name + "]=" + value + ": is already defined to " + item[0]);
- } else {
- configure_hdr.Add(name, item);
- }
-}
-
-function ERROR(msg)
-{
- STDERR.WriteLine("ERROR: " + msg);
- WScript.Quit(3);
-}
-
-function WARNING(msg)
-{
- STDERR.WriteLine("WARNING: " + msg);
- STDERR.WriteBlankLines(1);
-}
-
-function copy_and_subst(srcname, destname, subst_array)
-{
- if (!FSO.FileExists(srcname)) {
- srcname = configure_module_dirname + "\\" + srcname;
- destname = configure_module_dirname + "\\" + destname;
- }
-
- var content = file_get_contents(srcname);
- var i;
-
- for (i = 0; i < subst_array.length; i+=2) {
- var re = subst_array[i];
- var rep = subst_array[i+1];
-
- content = content.replace(re, rep);
- }
-
- var f = FSO.CreateTextFile(destname, true);
- f.Write(content);
- f.Close();
-}
-
-// glob using simple filename wildcards
-// returns an array of matches that are found
-// in the filesystem
-function glob(path_pattern)
-{
- var path_parts = path_pattern.replace(new RegExp("/", "g"), "\\").split("\\");
- var p;
- var base = "";
- var is_pat_re = /\*/;
-
-//STDOUT.WriteLine("glob: " + path_pattern);
-
- if (FSO.FileExists(path_pattern)) {
- return new Array(path_pattern);
- }
-
- // first, build as much as possible that doesn't have a pattern
- for (p = 0; p < path_parts.length; p++) {
- if (path_parts[p].match(is_pat_re))
- break;
- if (p)
- base += "\\";
- base += path_parts[p];
- }
-
- return _inner_glob(base, p, path_parts);
-}
-
-function _inner_glob(base, p, parts)
-{
- var pat = parts[p];
- var full_name = base + "\\" + pat;
- var re = null;
- var items = null;
-
- if (p == parts.length) {
- return false;
- }
-
-//STDOUT.WriteLine("inner: base=" + base + " p=" + p + " pat=" + pat);
-
- if (FSO.FileExists(full_name)) {
- if (p < parts.length - 1) {
- // we didn't reach the full extent of the pattern
- return false;
- }
- return new Array(full_name);
- }
-
- if (FSO.FolderExists(full_name) && p == parts.length - 1) {
- // we have reached the end of the pattern; no need to recurse
- return new Array(full_name);
- }
-
- // Convert the pattern into a regexp
- re = new RegExp("^" + pat.replace(/\./g, '\\.').replace(/\*/g, '.*').replace(/\?/g, '.') + "$", "i");
-
- items = new Array();
-
- if (!FSO.FolderExists(base)) {
- return false;
- }
-
- var folder = FSO.GetFolder(base);
- var fc = null;
- var subitems = null;
- var item_name = null;
- var j;
-
- fc = new Enumerator(folder.SubFolders);
- for (; !fc.atEnd(); fc.moveNext()) {
- item_name = FSO.GetFileName(fc.item());
-
- if (item_name.match(re)) {
- // got a match; if we are at the end of the pattern, just add these
- // things to the items array
- if (p == parts.length - 1) {
- items[items.length] = fc.item();
- } else {
- // we should recurse and do more matches
- subitems = _inner_glob(base + "\\" + item_name, p + 1, parts);
- if (subitems) {
- for (j = 0; j < subitems.length; j++) {
- items[items.length] = subitems[j];
- }
- }
- }
- }
- }
-
- // if we are at the end of the pattern, we should match
- // files too
- if (p == parts.length - 1) {
- fc = new Enumerator(folder.Files);
- for (; !fc.atEnd(); fc.moveNext()) {
- item_name = FSO.GetFileName(fc.item());
- if (item_name.match(re)) {
- items[items.length] = fc.item();
- }
- }
- }
-
- if (items.length == 0)
- return false;
-
- return items;
-}
-
-
-// for snapshot builders, this option will attempt to enable everything
-// and you can then build everything, ignoring fatal errors within a module
-// by running "nmake snap"
-PHP_SNAPSHOT_BUILD = "no";
-ARG_ENABLE('snapshot-build', 'Build a snapshot; turns on everything it can and ignores build errors', 'no');
-
-// one-shot build optimizes build by asking compiler to build
-// several objects at once, reducing overhead of starting new
-// compiler processes.
-ARG_ENABLE('one-shot', 'Optimize for fast build - best for release and snapshot builders, not so hot for edit-and-rebuild hacking', 'no');
-
-
diff --git a/win32/build/cvsclean.js b/win32/build/cvsclean.js
deleted file mode 100644
index 6d74e435b6..0000000000
--- a/win32/build/cvsclean.js
+++ /dev/null
@@ -1,120 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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@thebrainroom.com> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id: cvsclean.js,v 1.4 2004-04-08 19:08:37 fmk Exp $ */
-// Cleans up files that do not belong in CVS
-
-var FSO = WScript.CreateObject("Scripting.FileSystemObject");
-
-function find_cvsignore(dirname)
-{
- if (!FSO.FolderExists(dirname))
- return;
-
- var f = FSO.GetFolder(dirname);
- var fc = new Enumerator(f.SubFolders);
-
- for (; !fc.atEnd(); fc.moveNext()) {
- find_cvsignore(fc.item());
- }
-
- if (FSO.FileExists(dirname + "\\.cvsignore")) {
- kill_from_cvsignore(dirname + "\\.cvsignore");
- }
-}
-
-/* recursive remove using cvsignore style wildcard matching;
- * note that FSO.DeleteFolder and FSO.DeleteFile methods both
- * accept wildcards, but that they are dangerous to use eg:
- * "*.php" will match "*.phpt" */
-function rm_r(filename)
-{
- if (FSO.FolderExists(filename)) {
- var fc = new Enumerator(FSO.GetFolder(filename).SubFolders);
-
- for (; !fc.atEnd(); fc.moveNext()) {
- rm_r(fc.item());
- }
-
- fc = new Enumerator(FSO.GetFolder(filename).Files);
-
- for (; !fc.atEnd(); fc.moveNext()) {
- FSO.DeleteFile(fc.item(), true);
- }
-
- FSO.DeleteFolder(filename, true);
- } else if (FSO.FileExists(filename)) {
- FSO.DeleteFile(filename, true);
- } else {
- /* we need to handle wildcards here */
- var foldername = FSO.GetParentFolderName(filename);
-
- if (foldername == "")
- foldername = ".";
-
- var filename = FSO.GetFileName(filename);
-
- var retext = filename.replace(/\./g, '\\.');
- retext = '^' + retext.replace(/\*/g, '.*') + "$";
- var re = new RegExp(retext);
-
- var folder = FSO.GetFolder(foldername);
- var fc = new Enumerator(folder.SubFolders);
- for (; !fc.atEnd(); fc.moveNext()) {
-
- var item = FSO.GetFileName(fc.item());
-
- if (item.match(re)) {
- rm_r(fc.item());
- }
- }
- var fc = new Enumerator(folder.Files);
- for (; !fc.atEnd(); fc.moveNext()) {
- item = FSO.GetFileName(fc.item());
-
- if (item.match(re)) {
- FSO.DeleteFile(fc.item(), true);
- }
- }
- }
-}
-
-function kill_from_cvsignore(igfile)
-{
- var dir = FSO.GetParentFolderName(igfile) + "\\";
- var t = FSO.OpenTextFile(igfile, 1);
- var l;
-
- if (dir == ".\\") {
- dir = "";
- }
-
- while (!t.atEndOfStream) {
- l = t.ReadLine();
- // don't kill their config.nice file(s)
- if (l.match("config\.nice.*") ||
- l.match("") ||
- l.match("*"))
- continue;
- rm_r(dir + l);
- }
-
-}
-
-find_cvsignore(".");
-
diff --git a/win32/build/deplister.c b/win32/build/deplister.c
deleted file mode 100644
index ddff277151..0000000000
--- a/win32/build/deplister.c
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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@thebrainroom.com> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-/* This little application will list the DLL dependencies for a PE
- * module to it's stdout for use by distro/installer building tools */
-
-#include <windows.h>
-#include <imagehlp.h>
-
-BOOL CALLBACK StatusRoutine(IMAGEHLP_STATUS_REASON reason,
- PSTR image_name, PSTR dll_name,
- ULONG va, ULONG param)
-{
- switch (reason) {
- case BindImportModuleFailed:
- printf("%s,NOTFOUND\n", dll_name);
- return TRUE;
-
- case BindImportModule:
- printf("%s,OK\n", dll_name);
- return TRUE;
- }
- return TRUE;
-}
-
-/* usage:
- * deplister.exe path\to\module.exe path\to\symbols\root
- * */
-
-int main(int argc, char *argv[])
-{
- return BindImageEx(BIND_NO_BOUND_IMPORTS | BIND_NO_UPDATE | BIND_ALL_IMAGES,
- argv[1], NULL, argv[2], StatusRoutine);
-}
-
-/*
- * 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/win32/build/mkdist.php b/win32/build/mkdist.php
deleted file mode 100644
index 33d273f474..0000000000
--- a/win32/build/mkdist.php
+++ /dev/null
@@ -1,407 +0,0 @@
-<?php # $Id$
-/* piece together a windows binary distro */
-
-$build_dir = $argv[1];
-$phpdll = $argv[2];
-$sapi_targets = explode(" ", $argv[3]);
-$ext_targets = explode(" ", $argv[4]);
-$pecl_targets = explode(" ", $argv[5]);
-$snapshot_template = $argv[6];
-
-$is_debug = preg_match("/^debug/i", $build_dir);
-
-echo "Making dist for $build_dir\n";
-
-$dist_dir = $build_dir . "/php-" . phpversion();
-$pecl_dir = $build_dir . "/pecl-" . phpversion();
-
-@mkdir($dist_dir);
-@mkdir("$dist_dir/ext");
-@mkdir("$dist_dir/dev");
-@mkdir("$dist_dir/extras");
-@mkdir($pecl_dir);
-
-/* figure out additional DLL's that are required */
-$extra_dll_deps = array();
-$per_module_deps = array();
-$pecl_dll_deps = array();
-
-function get_depends($module)
-{
- static $no_dist = array(
- /* windows system dlls that should not be bundled */
- 'advapi32.dll', 'comdlg32.dll', 'gdi32.dll', 'kernel32.dll', 'ntdll.dll',
- 'odbc32.dll', 'ole32.dll', 'oleaut32.dll', 'rpcrt4.dll',
- 'shell32.dll', 'shlwapi.dll', 'user32.dll', 'ws2_32.dll', 'ws2help.dll',
- 'comctl32.dll', 'winmm.dll', 'wsock32.dll', 'winspool.drv', 'msasn1.dll',
- 'secur32.dll', 'netapi32.dll',
-
- /* apache */
- 'apachecore.dll',
-
- /* apache 2 */
- 'libhttpd.dll', 'libapr.dll', 'libaprutil.dll',
-
- /* pi3web */
- 'piapi.dll', 'pi3api.dll',
-
- /* nsapi */
- 'ns-httpd30.dll', 'ns-httpd35.dll', 'ns-httpd36.dll', 'ns-httpd40.dll',
-
- /* oracle */
- 'oci.dll', 'ociw32.dll',
-
- /* sybase */
- 'libcs.dll', 'libct.dll',
-
- /* visual C++; mscvrt.dll is present on everyones system,
- * but the debug version (msvcrtd.dll) and those from visual studio.net
- * (msvcrt7x.dll) are not */
- 'msvcrt.dll',
-
- );
- global $build_dir, $extra_dll_deps, $ext_targets, $sapi_targets, $pecl_targets, $phpdll, $per_module_deps, $pecl_dll_deps;
-
- $bd = strtolower(realpath($build_dir));
-
- $is_pecl = in_array($module, $pecl_targets);
-
- $cmd = "$GLOBALS[build_dir]\\deplister.exe \"$module\" \"$GLOBALS[build_dir]\"";
- $proc = proc_open($cmd,
- array(1 => array("pipe", "w")),
- $pipes);
-
- $n = 0;
- while (($line = fgetcsv($pipes[1]))) {
- $n++;
-
- $dep = strtolower($line[0]);
- $depbase = basename($dep);
- /* ignore stuff in our build dir, but only if it is
- * one of our targets */
- if (((in_array($depbase, $sapi_targets) ||
- in_array($depbase, $ext_targets) || in_array($depbase, $pecl_targets)) ||
- $depbase == $phpdll) && file_exists($GLOBALS['build_dir'] . "/$depbase")) {
- continue;
- }
- /* ignore some well-known system dlls */
- if (in_array(basename($dep), $no_dist)) {
- continue;
- }
-
- if ($is_pecl) {
- if (!in_array($dep, $pecl_dll_deps)) {
- $pecl_dll_deps[] = $dep;
- }
- } else {
- if (!in_array($dep, $extra_dll_deps)) {
- $extra_dll_deps[] = $dep;
- }
- }
-
- $per_module_deps[basename($module)][] = $dep;
- }
- fclose($pipes[1]);
- proc_close($proc);
-//echo "Module $module [$n lines]\n";
-}
-
-function copy_file_list($source_dir, $dest_dir, $list)
-{
- global $is_debug, $dist_dir;
-
- foreach ($list as $item) {
- echo "Copying $item from $source_dir to $dest_dir\n";
- copy($source_dir . DIRECTORY_SEPARATOR . $item, $dest_dir . DIRECTORY_SEPARATOR . $item);
- if ($is_debug) {
- $itemdb = preg_replace("/\.(exe|dll|lib)$/i", ".pdb", $item);
- if (file_exists("$source_dir/$itemdb")) {
- copy("$source_dir/$itemdb", "$dist_dir/dev/$itemdb");
- }
- }
- if (preg_match("/\.(exe|dll)$/i", $item)) {
- get_depends($source_dir . '/' . $item);
- }
- }
-}
-
-function copy_text_file($source, $dest)
-{
- $text = file_get_contents($source);
- $text = preg_replace("/(\r\n?)|\n/", "\r\n", $text);
- $fp = fopen($dest, "w");
- fwrite($fp, $text);
- fclose($fp);
-}
-
-/* very light-weight function to extract a single named file from
- * a gzipped tarball. This makes assumptions about the files
- * based on the PEAR info set in $packages. */
-function extract_file_from_tarball($pkg, $filename, $dest_dir) /* {{{ */
-{
- global $packages;
-
- $name = $pkg . '-' . $packages[$pkg];
- $tarball = $dest_dir . "/" . $name . '.tgz';
- $filename = $name . '/' . $filename;
- $destfilename = $dest_dir . "/" . basename($filename);
-
- $fp = gzopen($tarball, 'rb');
-
- $done = false;
- do {
- /* read the header */
- $hdr_data = gzread($fp, 512);
- if (strlen($hdr_data) == 0)
- break;
- $checksum = 0;
- for ($i = 0; $i < 148; $i++)
- $checksum += ord($hdr_data{$i});
- for ($i = 148; $i < 156; $i++)
- $checksum += 32;
- for ($i = 156; $i < 512; $i++)
- $checksum += ord($hdr_data{$i});
-
- $hdr = unpack("a100filename/a8mode/a8uid/a8gid/a12size/a12mtime/a8checksum/a1typeflag/a100link/a6magic/a2version/a32uname/a32gname/a8devmajor/a8devminor", $hdr_data);
-
- $hdr['checksum'] = octdec(trim($hdr['checksum']));
-
- if ($hdr['checksum'] != $checksum) {
- echo "Checksum for $tarball $hdr[filename] is invalid\n";
- print_r($hdr);
- return;
- }
-
- $hdr['size'] = octdec(trim($hdr['size']));
- echo "File: $hdr[filename] $hdr[size]\n";
-
- if ($filename == $hdr['filename']) {
- echo "Found the file we want\n";
- $dest = fopen($destfilename, 'wb');
- $x = stream_copy_to_stream($fp, $dest, $hdr['size']);
- fclose($dest);
- echo "Wrote $x bytes into $destfilename\n";
- break;
- }
-
- /* skip body of the file */
- $size = 512 * ceil((int)$hdr['size'] / 512);
- echo "Skipping $size bytes\n";
- gzseek($fp, gztell($fp) + $size);
-
- } while (!$done);
-
-} /* }}} */
-
-
-/* the core dll */
-copy("$build_dir/php.exe", "$dist_dir/php.exe");
-copy("$build_dir/$phpdll", "$dist_dir/$phpdll");
-
-/* and the .lib goes into dev */
-$phplib = str_replace(".dll", ".lib", $phpdll);
-copy("$build_dir/$phplib", "$dist_dir/dev/$phplib");
-/* debug builds; copy the symbols too */
-if ($is_debug) {
- $phppdb = str_replace(".dll", ".pdb", $phpdll);
- copy("$build_dir/$phppdb", "$dist_dir/dev/$phppdb");
-}
-/* copy the sapi */
-copy_file_list($build_dir, "$dist_dir", $sapi_targets);
-
-/* copy the extensions */
-copy_file_list($build_dir, "$dist_dir/ext", $ext_targets);
-
-/* pecl sapi and extensions */
-copy_file_list($build_dir, $pecl_dir, $pecl_targets);
-
-/* populate reading material */
-$text_files = array(
- "LICENSE" => "license.txt",
- "NEWS" => "news.txt",
- "php.ini-dist" => "php.ini-dist",
- "php.ini-recommended" => "php.ini-recommended",
- "win32/install.txt" => "install.txt",
-);
-
-foreach ($text_files as $src => $dest) {
- copy_text_file($src, $dist_dir . '/' . $dest);
-}
-
-/* general other files */
-$general_files = array(
- "php.gif" => "php.gif",
-);
-
-foreach ($general_files as $src => $dest) {
- copy($src, $dist_dir . '/' . $dest);
-}
-
-/* include a snapshot identifier */
-$branch = "HEAD"; // TODO - determine this from CVS/Entries
-$fp = fopen("$dist_dir/snapshot.txt", "w");
-$now = date("r");
-$version = phpversion();
-fwrite($fp, <<<EOT
-This snapshot was automatically generated on
-$now
-
-Version: $version
-Branch: $branch
-Build: $build_dir
-
-EOT
-);
-/* list build-in extensions */
-$exts = get_loaded_extensions();
-fprintf($fp, "\r\nBuilt-in Extensions\r\n");
-fwrite($fp, "===========================\r\n");
-foreach ($exts as $ext) {
- fprintf($fp, "%s\r\n", $ext);
-}
-fwrite($fp, "\r\n\r\n");
-
-/* list dependencies */
-fprintf($fp, "Dependency information:\r\n");
-foreach ($per_module_deps as $modulename => $deps) {
- if (in_array($modulename, $pecl_targets))
- continue;
-
- fprintf($fp, "Module: %s\r\n", $modulename);
- fwrite($fp, "===========================\r\n");
- foreach ($deps as $dll) {
- fprintf($fp, "\t%s\r\n", basename($dll));
- }
- fwrite($fp, "\r\n");
-}
-fclose($fp);
-
-/* Now add those dependencies */
-foreach ($extra_dll_deps as $dll) {
- if (!file_exists($dll)) {
- /* try template dir */
- $tdll = $snapshot_template . "/dlls/" . basename($dll);
- if (!file_exists($tdll)) {
- echo "WARNING: distro depends on $dll, but could not find it on your system\n";
- continue;
- }
- $dll = $tdll;
- }
- copy($dll, "$dist_dir/" . basename($dll));
-}
-/* and those for pecl */
-foreach ($pecl_dll_deps as $dll) {
- if (in_array($dll, $extra_dll_deps)) {
- /* already in main distro */
- continue;
- }
- if (!file_exists($dll)) {
- /* try template dir */
- $tdll = $snapshot_template . "/dlls/" . basename($dll);
- if (!file_exists($tdll)) {
- echo "WARNING: distro depends on $dll, but could not find it on your system\n";
- continue;
- }
- $dll = $tdll;
- }
- copy($dll, "$pecl_dir/" . basename($dll));
-}
-
-function copy_dir($source, $dest)
-{
- if (!is_dir($dest)) {
- if (!mkdir($dest)) {
- return false;
- }
- }
-
- $d = opendir($source);
- while (($f = readdir($d)) !== false) {
- if ($f == '.' || $f == '..' || $f == 'CVS') {
- continue;
- }
- $fs = $source . '/' . $f;
- $fd = $dest . '/' . $f;
- if (is_dir($fs)) {
- copy_dir($fs, $fd);
- } else {
- copy($fs, $fd);
- }
- }
- closedir($d);
-}
-
-/* change this next line to true to use good-old
- * hand-assembled go-pear-bundle from the snapshot template */
-$use_pear_template = false;
-
-if (!$use_pear_template) {
- /* Let's do a PEAR-less pear setup */
- mkdir("$dist_dir/PEAR");
- mkdir("$dist_dir/PEAR/go-pear-bundle");
-
- /* grab the bootstrap script */
- echo "Downloading go-pear\n";
- copy("http://go-pear.org/", "$dist_dir/PEAR/go-pear.php");
-
- /* import the package list -- sets $packages variable */
- include "pear/go-pear-list.php";
-
- /* download the packages into the destination */
- echo "Fetching packages\n";
-
- foreach ($packages as $name => $version) {
- $filename = "$name-$version.tgz";
- $destfilename = "$dist_dir/PEAR/go-pear-bundle/$filename";
- if (file_exists($destfilename))
- continue;
- $url = "http://pear.php.net/get/$filename";
- echo "Downloading $name from $url\n";
- flush();
- copy($url, $destfilename);
- }
-
- echo "Download complete. Extracting bootstrap files\n";
-
- /* Now, we want PEAR.php, Getopt.php (Console_Getopt) and Tar.php (Archive_Tar)
- * broken out of the tarballs */
- extract_file_from_tarball('PEAR', 'PEAR.php', "$dist_dir/PEAR/go-pear-bundle");
- extract_file_from_tarball('Archive_Tar', 'Archive/Tar.php', "$dist_dir/PEAR/go-pear-bundle");
- extract_file_from_tarball('Console_Getopt', 'Console/Getopt.php', "$dist_dir/PEAR/go-pear-bundle");
-}
-
-/* add extras from the template dir */
-if (file_exists($snapshot_template)) {
- $items = glob("$snapshot_template/*");
- print_r($items);
-
- foreach ($items as $item) {
- $bi = basename($item);
- if (is_dir($item)) {
- if ($bi == 'dlls' || $bi == 'symbols') {
- continue;
- } else if ($bi == 'PEAR') {
- if ($use_pear_template) {
- /* copy to top level */
- copy_dir($item, "$dist_dir/$bi");
- }
- } else {
- /* copy that dir into extras */
- copy_dir($item, "$dist_dir/extras/$bi");
- }
- } else {
- if ($bi == 'go-pear.bat') {
- /* copy to top level */
- copy($item, "$dist_dir/$bi");
- } else {
- /* copy to extras */
- copy($item, "$dist_dir/extras/$bi");
- }
- }
- }
-} else {
- echo "WARNING: you don't have a snapshot template\n";
- echo " your dist will not be complete\n";
-}
-
-?>
diff --git a/win32/build/php.ico b/win32/build/php.ico
deleted file mode 100644
index 43bf0027de..0000000000
--- a/win32/build/php.ico
+++ /dev/null
Binary files differ
diff --git a/win32/build/registersyslog.php b/win32/build/registersyslog.php
deleted file mode 100755
index db5f459f73..0000000000
--- a/win32/build/registersyslog.php
+++ /dev/null
@@ -1,45 +0,0 @@
-<?php
-
-/* This script sets up an event source for use by the php syslog() function. */
-
-if (!extension_loaded("win32std")) {
- dl("php_win32std.dll");
-}
-
-$PATH = "SYSTEM\\CurrentControlSet\\Services\\Eventlog\\Application\\PHP-" . phpversion();
-
-$dll = $argv[1];
-
-if (extension_loaded("win32std")) {
- $key = @reg_create_key(HKEY_LOCAL_MACHINE, $PATH, KEY_ALL_ACCESS);
-
- if (!$key)
- $key = reg_open_key(HKEY_LOCAL_MACHINE, $PATH, KEY_ALL_ACCESS);
-
- if ($key) {
- reg_set_value($key, "TypesSupported", REG_DWORD, 7) or die("Types");
- reg_set_value($key, "EventMessageFile", REG_SZ, $dll) or die("EventMessageFile");
-
- define_syslog_variables();
- syslog(LOG_NOTICE, "Registered PHP Event source");
- } else {
- echo "Could not register event source\n";
- }
-}
-
-/* let's also generate/update the bundled .reg file */
-
-$dll = addslashes($dll);
-
-file_put_contents("win32/syslog.reg", <<<REG
-REGEDIT4
-
-[HKEY_LOCAL_MACHINE\\$PATH]
-"TypesSupported"=dword:00000007
-"EventMessageFile"="$dll"
-
-REG
-);
-
-
-?>
diff --git a/win32/build/template.rc b/win32/build/template.rc
deleted file mode 100644
index 3bb57a7147..0000000000
--- a/win32/build/template.rc
+++ /dev/null
@@ -1,69 +0,0 @@
-/* This is a template RC file.
- * $Id$
- * Do not edit with MSVC */
-#ifdef APSTUDIO_INVOKED
-# error dont edit with MSVC
-#endif
-
-#include "winres.h"
-#include "main/php_version.h"
-
-LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
-#pragma code_page(1252)
-
-#ifndef THANKS_GUYS
-# define THANKS_GUYS ""
-#endif
-
-#ifdef WANT_LOGO
-0 ICON win32\build\php.ico
-#endif
-
-#define XSTRVER4(maj, min, rel, build) #maj "." #min "." #rel "." #build
-#define XSTRVER3(maj, min, rel) #maj "." #min "." #rel
-#define STRVER4(maj, min, rel, build) XSTRVER4(maj, min, rel, build)
-#define STRVER3(maj, min, rel) XSTRVER3(maj, min, rel)
-
-//Version
-VS_VERSION_INFO VERSIONINFO
- FILEVERSION PHP_MAJOR_VERSION,PHP_MINOR_VERSION,PHP_RELEASE_VERSION,PHP_RELEASE_VERSION
- PRODUCTVERSION PHP_MAJOR_VERSION,PHP_MINOR_VERSION,PHP_RELEASE_VERSION,0
- FILEFLAGSMASK 0x3fL
-#ifdef _DEBUG
- FILEFLAGS VS_FF_DEBUG
-#else
- FILEFLAGS 0x0L
-#endif
- FILEOS VOS__WINDOWS32
- FILETYPE VFT_DLL
- FILESUBTYPE VFT2_UNKNOWN
-BEGIN
- BLOCK "StringFileInfo"
- BEGIN
- BLOCK "040904b0"
- BEGIN
- VALUE "Comments", THANKS_GUYS "\0"
- VALUE "CompanyName", "The PHP Group\0"
- VALUE "FileDescription", FILE_DESCRIPTION "\0"
- VALUE "FileVersion", STRVER4(PHP_MAJOR_VERSION, PHP_MINOR_VERSION, PHP_RELEASE_VERSION, PHP_RELEASE_VERSION)
- VALUE "InternalName", FILE_NAME "\0"
- VALUE "LegalCopyright", "Copyright © 1997-2004 The PHP Group\0"
- VALUE "LegalTrademarks", "PHP\0"
- VALUE "OriginalFilename", FILE_NAME "\0"
- VALUE "PrivateBuild", "\0"
- VALUE "ProductName", PRODUCT_NAME "\0"
- VALUE "ProductVersion", STRVER3(PHP_MAJOR_VERSION, PHP_MINOR_VERSION, PHP_RELEASE_VERSION)
- VALUE "SpecialBuild", PHP_EXTRA_VERSION "\0"
- VALUE "URL", "http://www.php.net"
- END
- END
- BLOCK "VarFileInfo"
- BEGIN
- VALUE "Translation", 0x409, 1200
- END
-END
-
-#ifdef MC_INCLUDE
-#include MC_INCLUDE
-#endif
-
diff --git a/win32/build/wsyslog.mc b/win32/build/wsyslog.mc
deleted file mode 100755
index 01d4d3a86b..0000000000
--- a/win32/build/wsyslog.mc
+++ /dev/null
@@ -1,28 +0,0 @@
-MessageId=1
-Severity=Success
-SymbolicName=PHP_SYSLOG_SUCCESS_TYPE
-Language=English
-%1 %2
-.
-
-MessageId=2
-Severity=Informational
-SymbolicName=PHP_SYSLOG_INFO_TYPE
-Language=English
-%1 %2
-.
-
-MessageId=3
-Severity=Warning
-SymbolicName=PHP_SYSLOG_WARNING_TYPE
-Language=English
-%1 %2
-.
-
-MessageId=4
-Severity=Error
-SymbolicName=PHP_SYSLOG_ERROR_TYPE
-Language=English
-%1 %2
-.
-
diff --git a/win32/builddef.bat b/win32/builddef.bat
deleted file mode 100644
index f204812ace..0000000000
--- a/win32/builddef.bat
+++ /dev/null
@@ -1,7 +0,0 @@
-@echo off
-rem Generate phpts.def file, which exports symbols from our dll that
-rem are present in some of the libraries which are compiled statically
-rem into PHP
-rem $Id: builddef.bat,v 1.4 2003-12-08 12:56:47 rrichards Exp $
-type ..\ext\sqlite\php_sqlite.def
-type ..\ext\libxml\php_libxml2.def
diff --git a/win32/crypt_win32.c b/win32/crypt_win32.c
deleted file mode 100644
index d158ac51ff..0000000000
--- a/win32/crypt_win32.c
+++ /dev/null
@@ -1,355 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-/* This code is distributed under the PHP license with permission from
- the author Jochen Obalek <jochen.obalek@bigfoot.de> */
-
-/* encrypt.c - providing 56 bit DES encryption
- Copyright (C) 1991 Jochen Obalek
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2, or (at your option)
- any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
-
-#include <time.h>
-#include <string.h>
-#include <stdlib.h>
-#include "md5crypt.h"
-
-#define BS 64
-#define BS2 32
-#define KS 48
-#define KS2 24
-#define IS 56
-#define IS2 28
-
-static char schluessel[16][KS];
-
-
-static char PC1[] =
-{
- 56, 48, 40, 32, 24, 16, 8, 0,
- 57, 49, 41, 33, 25, 17, 9, 1,
- 58, 50, 42, 34, 26, 18, 10, 2,
- 59, 51, 43, 35,
- 62, 54, 46, 38, 30, 22, 14, 6,
- 61, 53, 45, 37, 29, 21, 13, 5,
- 60, 52, 44, 36, 28, 20, 12, 4,
- 27, 19, 11, 3
-};
-
-
-static char PC2[] =
-{
- 13, 16, 10, 23, 0, 4, 2, 27,
- 14, 5, 20, 9, 22, 18, 11, 3,
- 25, 7, 15, 6, 26, 19, 12, 1,
- 40, 51, 30, 36, 46, 54, 29, 39,
- 50, 44, 32, 47, 43, 48, 38, 55,
- 33, 52, 45, 41, 49, 35, 28, 31
-};
-
-
-static char IP[] =
-{
- 57, 49, 41, 33, 25, 17, 9, 1,
- 59, 51, 43, 35, 27, 19, 11, 3,
- 61, 53, 45, 37, 29, 21, 13, 5,
- 63, 55, 47, 39, 31, 23, 15, 7,
- 56, 48, 40, 32, 24, 16, 8, 0,
- 58, 50, 42, 34, 26, 18, 10, 2,
- 60, 52, 44, 36, 28, 20, 12, 4,
- 62, 54, 46, 38, 30, 22, 14, 6
-};
-
-
-static char EP[] =
-{
- 7, 39, 15, 47, 23, 55, 31, 63,
- 6, 38, 14, 46, 22, 54, 30, 62,
- 5, 37, 13, 45, 21, 53, 29, 61,
- 4, 36, 12, 44, 20, 52, 28, 60,
- 3, 35, 11, 43, 19, 51, 27, 59,
- 2, 34, 10, 42, 18, 50, 26, 58,
- 1, 33, 9, 41, 17, 49, 25, 57,
- 0, 32, 8, 40, 16, 48, 24, 56
-};
-
-
-static char E0[] =
-{
- 31, 0, 1, 2, 3, 4, 3, 4,
- 5, 6, 7, 8, 7, 8, 9, 10,
- 11, 12, 11, 12, 13, 14, 15, 16,
- 15, 16, 17, 18, 19, 20, 19, 20,
- 21, 22, 23, 24, 23, 24, 25, 26,
- 27, 28, 27, 28, 29, 30, 31, 0
-};
-
-
-static char E[KS];
-
-
-static char PERM[] =
-{
- 15, 6, 19, 20, 28, 11, 27, 16,
- 0, 14, 22, 25, 4, 17, 30, 9,
- 1, 7, 23, 13, 31, 26, 2, 8,
- 18, 12, 29, 5, 21, 10, 3, 24
-};
-
-
-static char S_BOX[][64] =
-{
- {
- 14, 0, 4, 15, 13, 7, 1, 4, 2, 14, 15, 2, 11, 13, 8, 1,
- 3, 10, 10, 6, 6, 12, 12, 11, 5, 9, 9, 5, 0, 3, 7, 8,
- 4, 15, 1, 12, 14, 8, 8, 2, 13, 4, 6, 9, 2, 1, 11, 7,
- 15, 5, 12, 11, 9, 3, 7, 14, 3, 10, 10, 0, 5, 6, 0, 13
- },
- {
- 15, 3, 1, 13, 8, 4, 14, 7, 6, 15, 11, 2, 3, 8, 4, 14,
- 9, 12, 7, 0, 2, 1, 13, 10, 12, 6, 0, 9, 5, 11, 10, 5,
- 0, 13, 14, 8, 7, 10, 11, 1, 10, 3, 4, 15, 13, 4, 1, 2,
- 5, 11, 8, 6, 12, 7, 6, 12, 9, 0, 3, 5, 2, 14, 15, 9
- },
- {
- 10, 13, 0, 7, 9, 0, 14, 9, 6, 3, 3, 4, 15, 6, 5, 10,
- 1, 2, 13, 8, 12, 5, 7, 14, 11, 12, 4, 11, 2, 15, 8, 1,
- 13, 1, 6, 10, 4, 13, 9, 0, 8, 6, 15, 9, 3, 8, 0, 7,
- 11, 4, 1, 15, 2, 14, 12, 3, 5, 11, 10, 5, 14, 2, 7, 12
- },
- {
- 7, 13, 13, 8, 14, 11, 3, 5, 0, 6, 6, 15, 9, 0, 10, 3,
- 1, 4, 2, 7, 8, 2, 5, 12, 11, 1, 12, 10, 4, 14, 15, 9,
- 10, 3, 6, 15, 9, 0, 0, 6, 12, 10, 11, 1, 7, 13, 13, 8,
- 15, 9, 1, 4, 3, 5, 14, 11, 5, 12, 2, 7, 8, 2, 4, 14
- },
- {
- 2, 14, 12, 11, 4, 2, 1, 12, 7, 4, 10, 7, 11, 13, 6, 1,
- 8, 5, 5, 0, 3, 15, 15, 10, 13, 3, 0, 9, 14, 8, 9, 6,
- 4, 11, 2, 8, 1, 12, 11, 7, 10, 1, 13, 14, 7, 2, 8, 13,
- 15, 6, 9, 15, 12, 0, 5, 9, 6, 10, 3, 4, 0, 5, 14, 3
- },
- {
- 12, 10, 1, 15, 10, 4, 15, 2, 9, 7, 2, 12, 6, 9, 8, 5,
- 0, 6, 13, 1, 3, 13, 4, 14, 14, 0, 7, 11, 5, 3, 11, 8,
- 9, 4, 14, 3, 15, 2, 5, 12, 2, 9, 8, 5, 12, 15, 3, 10,
- 7, 11, 0, 14, 4, 1, 10, 7, 1, 6, 13, 0, 11, 8, 6, 13
- },
- {
- 4, 13, 11, 0, 2, 11, 14, 7, 15, 4, 0, 9, 8, 1, 13, 10,
- 3, 14, 12, 3, 9, 5, 7, 12, 5, 2, 10, 15, 6, 8, 1, 6,
- 1, 6, 4, 11, 11, 13, 13, 8, 12, 1, 3, 4, 7, 10, 14, 7,
- 10, 9, 15, 5, 6, 0, 8, 15, 0, 14, 5, 2, 9, 3, 2, 12
- },
- {
- 13, 1, 2, 15, 8, 13, 4, 8, 6, 10, 15, 3, 11, 7, 1, 4,
- 10, 12, 9, 5, 3, 6, 14, 11, 5, 0, 0, 14, 12, 9, 7, 2,
- 7, 2, 11, 1, 4, 14, 1, 7, 9, 4, 12, 10, 14, 8, 2, 13,
- 0, 15, 6, 12, 10, 9, 13, 0, 15, 3, 3, 5, 5, 6, 8, 11
- }
-};
-
-static void
-perm (a, e, pc, n)
- register char *a, *e;
- register char *pc;
- int n;
-{
- for (; n--; pc++, a++)
- *a = e[*pc];
-}
-
-static void
-crypt_main (nachr_l, nachr_r, schl)
- register char *nachr_l, *nachr_r;
- register char *schl;
-{
- char tmp[KS];
- register int sbval;
- register char *tp = tmp;
- register char *e = E;
- register int i, j;
-
- for (i = 0; i < 8; i++)
- {
- for (j = 0, sbval = 0; j < 6; j++)
- sbval = (sbval << 1) | (nachr_r[*e++] ^ *schl++);
- sbval = S_BOX[i][sbval];
- for (tp += 4, j = 4; j--; sbval >>= 1)
- *--tp = sbval & 1;
- tp += 4;
- }
-
- e = PERM;
- for (i = 0; i < BS2; i++)
- *nachr_l++ ^= tmp[*e++];
-}
-
-void
-encrypt (char *nachr, int decr)
-{
- char (*schl)[KS] = decr ? schluessel + 15 : schluessel;
- char tmp[BS];
- int i;
-
- perm (tmp, nachr, IP, BS);
-
- for (i = 8; i--;)
- {
- crypt_main (tmp, tmp + BS2, *schl);
- if (decr)
- schl--;
- else
- schl++;
- crypt_main (tmp + BS2, tmp, *schl);
- if (decr)
- schl--;
- else
- schl++;
- }
-
- perm (nachr, tmp, EP, BS);
-}
-
-void
-setkey (char *schl)
-{
- char tmp1[IS];
- register unsigned int ls = 0x7efc;
- register int i, j, k;
- register int shval = 0;
- register char *akt_schl;
-
- memcpy (E, E0, KS);
- perm (tmp1, schl, PC1, IS);
-
- for (i = 0; i < 16; i++)
- {
- shval += 1 + (ls & 1);
- akt_schl = schluessel[i];
- for (j = 0; j < KS; j++)
- {
- if ((k = PC2[j]) >= IS2)
- {
- if ((k += shval) >= IS)
- k = (k - IS2) % IS2 + IS2;
- }
- else if ((k += shval) >= IS2)
- k %= IS2;
- *akt_schl++ = tmp1[k];
- }
- ls >>= 1;
- }
-}
-
-char *
-des_crypt (const char *wort, const char *salt)
-{
- static char retkey[14];
- char key[BS + 2];
- char *k;
- int tmp, keybyte;
- int i, j;
-
- memset (key, 0, BS + 2);
-
- for (k = key, i = 0; i < BS; i++)
- {
- if (!(keybyte = *wort++))
- break;
- k += 7;
- for (j = 0; j < 7; j++, i++)
- {
- *--k = keybyte & 1;
- keybyte >>= 1;
- }
- k += 8;
- }
-
- setkey (key);
- memset (key, 0, BS + 2);
-
- for (k = E, i = 0; i < 2; i++)
- {
- retkey[i] = keybyte = *salt++;
- if (keybyte > 'Z')
- keybyte -= 'a' - 'Z' - 1;
- if (keybyte > '9')
- keybyte -= 'A' - '9' - 1;
- keybyte -= '.';
-
- for (j = 0; j < 6; j++, keybyte >>= 1, k++)
- {
- if (!(keybyte & 1))
- continue;
- tmp = *k;
- *k = k[24];
- k[24] = tmp;
- }
- }
-
- for (i = 0; i < 25; i++)
- encrypt (key, 0);
-
- for (k = key, i = 0; i < 11; i++)
- {
- for (j = keybyte = 0; j < 6; j++)
- {
- keybyte <<= 1;
- keybyte |= *k++;
- }
-
- keybyte += '.';
- if (keybyte > '9')
- keybyte += 'A' - '9' - 1;
- if (keybyte > 'Z')
- keybyte += 'a' - 'Z' - 1;
- retkey[i + 2] = keybyte;
- }
-
- retkey[i + 2] = 0;
-
- if (!retkey[1])
- retkey[1] = *retkey;
-
- return retkey;
-}
-
-char *
-crypt (const char *pw, const char *salt)
-{
- if (strlen(salt)>MD5_MAGIC_LEN && strncmp(salt, MD5_MAGIC, MD5_MAGIC_LEN)==0) {
- return md5_crypt(pw, salt);
- } else {
- return des_crypt(pw, salt);
- }
-}
diff --git a/win32/crypt_win32.h b/win32/crypt_win32.h
deleted file mode 100644
index 6930f8a410..0000000000
--- a/win32/crypt_win32.h
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-/* This code is distributed under the PHP license with permission from
- the author Jochen Obalek <jochen.obalek@bigfoot.de> */
-
-/* encrypt.h - API to 56 bit DES encryption via calls
- encrypt(3), setkey(3) and crypt(3)
- Copyright (C) 1991 Jochen Obalek
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2, or (at your option)
- any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
-
-#ifndef _ENCRYPT_H_
-#define _ENCRYPT_H_
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
-#include <_ansi.h>
-
-void _EXFUN(encrypt, (char *block, int edflag));
-void _EXFUN(setkey, (char *key));
-char * _EXFUN(crypt, (const char *key, const char *salt));
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _ENCRYPT_H_ */
diff --git a/win32/flock.c b/win32/flock.c
deleted file mode 100644
index e659de6597..0000000000
--- a/win32/flock.c
+++ /dev/null
@@ -1,84 +0,0 @@
-/*
- * Program: Unix compatibility routines
- *
- * Author: Mark Crispin
- * Networks and Distributed Computing
- * Computing & Communications
- * University of Washington
- * Administration Building, AG-44
- * Seattle, WA 98195
- * Internet: MRC@CAC.Washington.EDU
- *
- * Date: 14 September 1996
- * Last Edited: 14 August 1997
- *
- * Copyright 1997 by the University of Washington
- *
- * Permission to use, copy, modify, and distribute this software and its
- * documentation for any purpose and without fee is hereby granted, provided
- * that the above copyright notice appears in all copies and that both the
- * above copyright notice and this permission notice appear in supporting
- * documentation, and that the name of the University of Washington not be
- * used in advertising or publicity pertaining to distribution of the software
- * without specific, written prior permission. This software is made available
- * "as is", and
- * THE UNIVERSITY OF WASHINGTON DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED,
- * WITH REGARD TO THIS SOFTWARE, INCLUDING WITHOUT LIMITATION ALL IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, AND IN
- * NO EVENT SHALL THE UNIVERSITY OF WASHINGTON BE LIABLE FOR ANY SPECIAL,
- * INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
- * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, TORT
- * (INCLUDING NEGLIGENCE) OR STRICT LIABILITY, ARISING OUT OF OR IN CONNECTION
- * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- *
- */
-
-
-/* DEDICATION
-
- * This file is dedicated to my dog, Unix, also known as Yun-chan and
- * Unix J. Terwilliker Jehosophat Aloysius Monstrosity Animal Beast. Unix
- * passed away at the age of 11 1/2 on September 14, 1996, 12:18 PM PDT, after
- * a two-month bout with cirrhosis of the liver.
- *
- * He was a dear friend, and I miss him terribly.
- *
- * Lift a leg, Yunie. Luv ya forever!!!!
- */
-
-#include "php.h"
-#include <windows.h>
-#include <io.h>
-#include <errno.h>
-#include "flock.h"
-
-PHPAPI int flock(int fd, int op)
-{
- HANDLE hdl = (HANDLE) _get_osfhandle(fd);
- DWORD low = 1, high = 0;
- OVERLAPPED offset =
- {0, 0, 0, 0, NULL};
- if (hdl < 0)
- return -1; /* error in file descriptor */
- /* bug for bug compatible with Unix */
- UnlockFileEx(hdl, 0, low, high, &offset);
- switch (op & ~LOCK_NB) { /* translate to LockFileEx() op */
- case LOCK_EX: /* exclusive */
- if (LockFileEx(hdl, LOCKFILE_EXCLUSIVE_LOCK +
- ((op & LOCK_NB) ? LOCKFILE_FAIL_IMMEDIATELY : 0),
- 0, low, high, &offset))
- return 0;
- break;
- case LOCK_SH: /* shared */
- if (LockFileEx(hdl, ((op & LOCK_NB) ? LOCKFILE_FAIL_IMMEDIATELY : 0),
- 0, low, high, &offset))
- return 0;
- break;
- case LOCK_UN: /* unlock */
- return 0; /* always succeeds */
- default: /* default */
- break;
- }
- errno = EINVAL; /* bad call */
- return -1;
-}
diff --git a/win32/flock.h b/win32/flock.h
deleted file mode 100644
index d228e855dc..0000000000
--- a/win32/flock.h
+++ /dev/null
@@ -1,11 +0,0 @@
-#define fsync _commit
-#define ftruncate chsize
-
-/* For flock() emulation */
-
-#define LOCK_SH 1
-#define LOCK_EX 2
-#define LOCK_NB 4
-#define LOCK_UN 8
-
-PHPAPI int flock(int fd, int op);
diff --git a/win32/glob.c b/win32/glob.c
deleted file mode 100644
index a8c2cd83e2..0000000000
--- a/win32/glob.c
+++ /dev/null
@@ -1,922 +0,0 @@
-/*
- * Copyright (c) 1989, 1993
- * The Regents of the University of California. All rights reserved.
- *
- * This code is derived from software contributed to Berkeley by
- * Guido van Rossum.
- *
- * 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. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement:
- * This product includes software developed by the University of
- * California, Berkeley and its contributors.
- * 4. 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.
- */
-
-/* $Id$ */
-
-/*
- * glob(3) -- a superset of the one defined in POSIX 1003.2.
- *
- * The [!...] convention to negate a range is supported (SysV, Posix, ksh).
- *
- * Optional extra services, controlled by flags not defined by POSIX:
- *
- * GLOB_QUOTE:
- * Escaping convention: \ inhibits any special meaning the following
- * character might have (except \ at end of string is retained).
- * GLOB_MAGCHAR:
- * Set in gl_flags if pattern contained a globbing character.
- * GLOB_NOMAGIC:
- * Same as GLOB_NOCHECK, but it will only append pattern if it did
- * not contain any magic characters. [Used in csh style globbing]
- * GLOB_ALTDIRFUNC:
- * Use alternately specified directory access functions.
- * GLOB_TILDE:
- * expand ~user/foo to the /home/dir/of/user/foo
- * GLOB_BRACE:
- * expand {1,2}{a,b} to 1a 1b 2a 2b
- * gl_matchc:
- * Number of matches in the current invocation of glob.
- */
-#ifdef PHP_WIN32
-#define _POSIX_
-#include <limits.h>
-#undef _POSIX_
-#ifndef S_ISDIR
-#define S_ISDIR(m) (((m) & _S_IFDIR) == _S_IFDIR)
-#endif
-#ifndef S_ISLNK
-#define S_ISLNK(m) (0)
-#endif
-#endif
-
-#include "php.h"
-#include <sys/stat.h>
-
-#include <ctype.h>
-#ifndef PHP_WIN32
-#include <sys/param.h>
-#include <dirent.h>
-#include <pwd.h>
-#include <unistd.h>
-#else
-#include "win32/pwd.h"
-#endif
-#include <errno.h>
-#include "glob.h"
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#define DOLLAR '$'
-#define DOT '.'
-#define EOS '\0'
-#define LBRACKET '['
-#define NOT '!'
-#define QUESTION '?'
-#define QUOTE '\\'
-#define RANGE '-'
-#define RBRACKET ']'
-#define SEP DEFAULT_SLASH
-#define STAR '*'
-#define TILDE '~'
-#define UNDERSCORE '_'
-#define LBRACE '{'
-#define RBRACE '}'
-#define SLASH '/'
-#define COMMA ','
-
-#ifndef DEBUG
-
-#define M_QUOTE 0x8000
-#define M_PROTECT 0x4000
-#define M_MASK 0xffff
-#define M_ASCII 0x00ff
-
-typedef u_short Char;
-
-#else
-
-#define M_QUOTE 0x80
-#define M_PROTECT 0x40
-#define M_MASK 0xff
-#define M_ASCII 0x7f
-
-typedef char Char;
-
-#endif
-
-
-#define CHAR(c) ((Char)((c)&M_ASCII))
-#define META(c) ((Char)((c)|M_QUOTE))
-#define M_ALL META('*')
-#define M_END META(']')
-#define M_NOT META('!')
-#define M_ONE META('?')
-#define M_RNG META('-')
-#define M_SET META('[')
-#define ismeta(c) (((c)&M_QUOTE) != 0)
-
-static int compare(const void *, const void *);
-static int g_Ctoc(const Char *, char *, u_int);
-static int g_lstat(Char *, struct stat *, glob_t *);
-static DIR *g_opendir(Char *, glob_t *);
-static Char *g_strchr(Char *, int);
-static int g_stat(Char *, struct stat *, glob_t *);
-static int glob0(const Char *, glob_t *);
-static int glob1(Char *, Char *, glob_t *, size_t *);
-static int glob2(Char *, Char *, Char *, Char *, Char *, Char *,
- glob_t *, size_t *);
-static int glob3(Char *, Char *, Char *, Char *, Char *, Char *,
- Char *, Char *, glob_t *, size_t *);
-static int globextend(const Char *, glob_t *, size_t *);
-static const Char *
- globtilde(const Char *, Char *, size_t, glob_t *);
-static int globexp1(const Char *, glob_t *);
-static int globexp2(const Char *, const Char *, glob_t *, int *);
-static int match(Char *, Char *, Char *);
-#ifdef DEBUG
-static void qprintf(const char *, Char *);
-#endif
-
-int
-glob(pattern, flags, errfunc, pglob)
- const char *pattern;
- int flags, (*errfunc)(const char *, int);
- glob_t *pglob;
-{
- const u_char *patnext;
- int c;
- Char *bufnext, *bufend, patbuf[MAXPATHLEN];
-
-#ifdef PHP_WIN32
- /* Force skipping escape sequences on windows
- * due to the ambiguity with path backslashes
- */
- flags |= GLOB_NOESCAPE;
-#endif
-
- patnext = (u_char *) pattern;
- if (!(flags & GLOB_APPEND)) {
- pglob->gl_pathc = 0;
- pglob->gl_pathv = NULL;
- if (!(flags & GLOB_DOOFFS))
- pglob->gl_offs = 0;
- }
- pglob->gl_flags = flags & ~GLOB_MAGCHAR;
- pglob->gl_errfunc = errfunc;
- pglob->gl_matchc = 0;
-
- bufnext = patbuf;
- bufend = bufnext + MAXPATHLEN - 1;
- if (flags & GLOB_NOESCAPE)
- while (bufnext < bufend && (c = *patnext++) != EOS)
- *bufnext++ = c;
- else {
- /* Protect the quoted characters. */
- while (bufnext < bufend && (c = *patnext++) != EOS)
- if (c == QUOTE) {
- if ((c = *patnext++) == EOS) {
- c = QUOTE;
- --patnext;
- }
- *bufnext++ = c | M_PROTECT;
- } else
- *bufnext++ = c;
- }
- *bufnext = EOS;
-
- if (flags & GLOB_BRACE)
- return globexp1(patbuf, pglob);
- else
- return glob0(patbuf, pglob);
-}
-
-/*
- * Expand recursively a glob {} pattern. When there is no more expansion
- * invoke the standard globbing routine to glob the rest of the magic
- * characters
- */
-static int
-globexp1(pattern, pglob)
- const Char *pattern;
- glob_t *pglob;
-{
- const Char* ptr = pattern;
- int rv;
-
- /* Protect a single {}, for find(1), like csh */
- if (pattern[0] == LBRACE && pattern[1] == RBRACE && pattern[2] == EOS)
- return glob0(pattern, pglob);
-
- while ((ptr = (const Char *) g_strchr((Char *) ptr, LBRACE)) != NULL)
- if (!globexp2(ptr, pattern, pglob, &rv))
- return rv;
-
- return glob0(pattern, pglob);
-}
-
-
-/*
- * Recursive brace globbing helper. Tries to expand a single brace.
- * If it succeeds then it invokes globexp1 with the new pattern.
- * If it fails then it tries to glob the rest of the pattern and returns.
- */
-static int
-globexp2(ptr, pattern, pglob, rv)
- const Char *ptr, *pattern;
- glob_t *pglob;
- int *rv;
-{
- int i;
- Char *lm, *ls;
- const Char *pe, *pm, *pl;
- Char patbuf[MAXPATHLEN];
-
- /* copy part up to the brace */
- for (lm = patbuf, pm = pattern; pm != ptr; *lm++ = *pm++)
- ;
- *lm = EOS;
- ls = lm;
-
- /* Find the balanced brace */
- for (i = 0, pe = ++ptr; *pe; pe++)
- if (*pe == LBRACKET) {
- /* Ignore everything between [] */
- for (pm = pe++; *pe != RBRACKET && *pe != EOS; pe++)
- ;
- if (*pe == EOS) {
- /*
- * We could not find a matching RBRACKET.
- * Ignore and just look for RBRACE
- */
- pe = pm;
- }
- } else if (*pe == LBRACE)
- i++;
- else if (*pe == RBRACE) {
- if (i == 0)
- break;
- i--;
- }
-
- /* Non matching braces; just glob the pattern */
- if (i != 0 || *pe == EOS) {
- *rv = glob0(patbuf, pglob);
- return 0;
- }
-
- for (i = 0, pl = pm = ptr; pm <= pe; pm++) {
- switch (*pm) {
- case LBRACKET:
- /* Ignore everything between [] */
- for (pl = pm++; *pm != RBRACKET && *pm != EOS; pm++)
- ;
- if (*pm == EOS) {
- /*
- * We could not find a matching RBRACKET.
- * Ignore and just look for RBRACE
- */
- pm = pl;
- }
- break;
-
- case LBRACE:
- i++;
- break;
-
- case RBRACE:
- if (i) {
- i--;
- break;
- }
- /* FALLTHROUGH */
- case COMMA:
- if (i && *pm == COMMA)
- break;
- else {
- /* Append the current string */
- for (lm = ls; (pl < pm); *lm++ = *pl++)
- ;
-
- /*
- * Append the rest of the pattern after the
- * closing brace
- */
- for (pl = pe + 1; (*lm++ = *pl++) != EOS; )
- ;
-
- /* Expand the current pattern */
-#ifdef DEBUG
- qprintf("globexp2:", patbuf);
-#endif
- *rv = globexp1(patbuf, pglob);
-
- /* move after the comma, to the next string */
- pl = pm + 1;
- }
- break;
-
- default:
- break;
- }
- }
- *rv = 0;
- return 0;
-}
-
-
-
-/*
- * expand tilde from the passwd file.
- */
-static const Char *
-globtilde(pattern, patbuf, patbuf_len, pglob)
- const Char *pattern;
- Char *patbuf;
- size_t patbuf_len;
- glob_t *pglob;
-{
- struct passwd *pwd;
- char *h;
- const Char *p;
- Char *b, *eb;
-
- if (*pattern != TILDE || !(pglob->gl_flags & GLOB_TILDE))
- return pattern;
-
- /* Copy up to the end of the string or / */
- eb = &patbuf[patbuf_len - 1];
- for (p = pattern + 1, h = (char *) patbuf;
- h < (char *)eb && *p && *p != SLASH; *h++ = (char) *p++)
- ;
-
- *h = EOS;
-
-#if 0
- if (h == (char *)eb)
- return what;
-#endif
-
- if (((char *) patbuf)[0] == EOS) {
- /*
- * handle a plain ~ or ~/ by expanding $HOME
- * first and then trying the password file
- */
- if ((h = getenv("HOME")) == NULL) {
-#ifndef PHP_WIN32
- if ((pwd = getpwuid(getuid())) == NULL)
- return pattern;
- else
- h = pwd->pw_dir;
-#else
- return pattern;
-#endif
- }
- } else {
- /*
- * Expand a ~user
- */
- if ((pwd = getpwnam((char*) patbuf)) == NULL)
- return pattern;
- else
- h = pwd->pw_dir;
- }
-
- /* Copy the home directory */
- for (b = patbuf; b < eb && *h; *b++ = *h++)
- ;
-
- /* Append the rest of the pattern */
- while (b < eb && (*b++ = *p++) != EOS)
- ;
- *b = EOS;
-
- return patbuf;
-}
-
-
-/*
- * The main glob() routine: compiles the pattern (optionally processing
- * quotes), calls glob1() to do the real pattern matching, and finally
- * sorts the list (unless unsorted operation is requested). Returns 0
- * if things went well, nonzero if errors occurred. It is not an error
- * to find no matches.
- */
-static int
-glob0(pattern, pglob)
- const Char *pattern;
- glob_t *pglob;
-{
- const Char *qpatnext;
- int c, err, oldpathc;
- Char *bufnext, patbuf[MAXPATHLEN];
- size_t limit = 0;
-
- qpatnext = globtilde(pattern, patbuf, MAXPATHLEN, pglob);
- oldpathc = pglob->gl_pathc;
- bufnext = patbuf;
-
- /* We don't need to check for buffer overflow any more. */
- while ((c = *qpatnext++) != EOS) {
- switch (c) {
- case LBRACKET:
- c = *qpatnext;
- if (c == NOT)
- ++qpatnext;
- if (*qpatnext == EOS ||
- g_strchr((Char *) qpatnext+1, RBRACKET) == NULL) {
- *bufnext++ = LBRACKET;
- if (c == NOT)
- --qpatnext;
- break;
- }
- *bufnext++ = M_SET;
- if (c == NOT)
- *bufnext++ = M_NOT;
- c = *qpatnext++;
- do {
- *bufnext++ = CHAR(c);
- if (*qpatnext == RANGE &&
- (c = qpatnext[1]) != RBRACKET) {
- *bufnext++ = M_RNG;
- *bufnext++ = CHAR(c);
- qpatnext += 2;
- }
- } while ((c = *qpatnext++) != RBRACKET);
- pglob->gl_flags |= GLOB_MAGCHAR;
- *bufnext++ = M_END;
- break;
- case QUESTION:
- pglob->gl_flags |= GLOB_MAGCHAR;
- *bufnext++ = M_ONE;
- break;
- case STAR:
- pglob->gl_flags |= GLOB_MAGCHAR;
- /* collapse adjacent stars to one,
- * to avoid exponential behavior
- */
- if (bufnext == patbuf || bufnext[-1] != M_ALL)
- *bufnext++ = M_ALL;
- break;
- default:
- *bufnext++ = CHAR(c);
- break;
- }
- }
- *bufnext = EOS;
-#ifdef DEBUG
- qprintf("glob0:", patbuf);
-#endif
-
- if ((err = glob1(patbuf, patbuf+MAXPATHLEN-1, pglob, &limit)) != 0)
- return(err);
-
- /*
- * If there was no match we are going to append the pattern
- * if GLOB_NOCHECK was specified or if GLOB_NOMAGIC was specified
- * and the pattern did not contain any magic characters
- * GLOB_NOMAGIC is there just for compatibility with csh.
- */
- if (pglob->gl_pathc == oldpathc) {
- if ((pglob->gl_flags & GLOB_NOCHECK) ||
- ((pglob->gl_flags & GLOB_NOMAGIC) &&
- !(pglob->gl_flags & GLOB_MAGCHAR)))
- return(globextend(pattern, pglob, &limit));
- else
- return(GLOB_NOMATCH);
- }
- if (!(pglob->gl_flags & GLOB_NOSORT))
- qsort(pglob->gl_pathv + pglob->gl_offs + oldpathc,
- pglob->gl_pathc - oldpathc, sizeof(char *), (const void *) compare);
- return(0);
-}
-
-static int
-compare(p, q)
- const void *p, *q;
-{
- return(strcmp(*(char **)p, *(char **)q));
-}
-
-static int
-glob1(pattern, pattern_last, pglob, limitp)
- Char *pattern, *pattern_last;
- glob_t *pglob;
- size_t *limitp;
-{
- Char pathbuf[MAXPATHLEN];
-
- /* A null pathname is invalid -- POSIX 1003.1 sect. 2.4. */
- if (*pattern == EOS)
- return(0);
- return(glob2(pathbuf, pathbuf+MAXPATHLEN-1,
- pathbuf, pathbuf+MAXPATHLEN-1,
- pattern, pattern_last, pglob, limitp));
-}
-
-/*
- * The functions glob2 and glob3 are mutually recursive; there is one level
- * of recursion for each segment in the pattern that contains one or more
- * meta characters.
- */
-static int
-glob2(pathbuf, pathbuf_last, pathend, pathend_last, pattern,
- pattern_last, pglob, limitp)
- Char *pathbuf, *pathbuf_last, *pathend, *pathend_last;
- Char *pattern, *pattern_last;
- glob_t *pglob;
- size_t *limitp;
-{
- struct stat sb;
- Char *p, *q;
- int anymeta;
-
- /*
- * Loop over pattern segments until end of pattern or until
- * segment with meta character found.
- */
- for (anymeta = 0;;) {
- if (*pattern == EOS) { /* End of pattern? */
- *pathend = EOS;
- if (g_lstat(pathbuf, &sb, pglob))
- return(0);
-
- if (((pglob->gl_flags & GLOB_MARK) &&
- !IS_SLASH(pathend[-1])) && (S_ISDIR(sb.st_mode) ||
- (S_ISLNK(sb.st_mode) &&
- (g_stat(pathbuf, &sb, pglob) == 0) &&
- S_ISDIR(sb.st_mode)))) {
- if (pathend+1 > pathend_last)
- return (1);
- *pathend++ = SEP;
- *pathend = EOS;
- }
- ++pglob->gl_matchc;
- return(globextend(pathbuf, pglob, limitp));
- }
-
- /* Find end of next segment, copy tentatively to pathend. */
- q = pathend;
- p = pattern;
- while (*p != EOS && !IS_SLASH(*p)) {
- if (ismeta(*p))
- anymeta = 1;
- if (q+1 > pathend_last)
- return (1);
- *q++ = *p++;
- }
-
- if (!anymeta) { /* No expansion, do next segment. */
- pathend = q;
- pattern = p;
- while (IS_SLASH(*pattern)) {
- if (pathend+1 > pathend_last)
- return (1);
- *pathend++ = *pattern++;
- }
- } else
- /* Need expansion, recurse. */
- return(glob3(pathbuf, pathbuf_last, pathend,
- pathend_last, pattern, pattern_last,
- p, pattern_last, pglob, limitp));
- }
- /* NOTREACHED */
-}
-
-static int
-glob3(pathbuf, pathbuf_last, pathend, pathend_last, pattern, pattern_last,
- restpattern, restpattern_last, pglob, limitp)
- Char *pathbuf, *pathbuf_last, *pathend, *pathend_last;
- Char *pattern, *pattern_last, *restpattern, *restpattern_last;
- glob_t *pglob;
- size_t *limitp;
-{
- register struct dirent *dp;
- DIR *dirp;
- int err;
- char buf[MAXPATHLEN];
-
- /*
- * The readdirfunc declaration can't be prototyped, because it is
- * assigned, below, to two functions which are prototyped in glob.h
- * and dirent.h as taking pointers to differently typed opaque
- * structures.
- */
- struct dirent *(*readdirfunc)();
-
- if (pathend > pathend_last)
- return (1);
- *pathend = EOS;
- errno = 0;
-
- if ((dirp = g_opendir(pathbuf, pglob)) == NULL) {
- /* TODO: don't call for ENOENT or ENOTDIR? */
- if (pglob->gl_errfunc) {
- if (g_Ctoc(pathbuf, buf, sizeof(buf)))
- return(GLOB_ABORTED);
- if (pglob->gl_errfunc(buf, errno) ||
- pglob->gl_flags & GLOB_ERR)
- return(GLOB_ABORTED);
- }
- return(0);
- }
-
- err = 0;
-
- /* Search directory for matching names. */
- if (pglob->gl_flags & GLOB_ALTDIRFUNC)
- readdirfunc = pglob->gl_readdir;
- else
- readdirfunc = readdir;
- while ((dp = (*readdirfunc)(dirp))) {
- register u_char *sc;
- register Char *dc;
-
- /* Initial DOT must be matched literally. */
- if (dp->d_name[0] == DOT && *pattern != DOT)
- continue;
- dc = pathend;
- sc = (u_char *) dp->d_name;
- while (dc < pathend_last && (*dc++ = *sc++) != EOS)
- ;
- if (dc >= pathend_last) {
- *dc = EOS;
- err = 1;
- break;
- }
-
- if (!match(pathend, pattern, restpattern)) {
- *pathend = EOS;
- continue;
- }
- err = glob2(pathbuf, pathbuf_last, --dc, pathend_last,
- restpattern, restpattern_last, pglob, limitp);
- if (err)
- break;
- }
-
- if (pglob->gl_flags & GLOB_ALTDIRFUNC)
- (*pglob->gl_closedir)(dirp);
- else
- closedir(dirp);
- return(err);
-}
-
-
-/*
- * Extend the gl_pathv member of a glob_t structure to accomodate a new item,
- * add the new item, and update gl_pathc.
- *
- * This assumes the BSD realloc, which only copies the block when its size
- * crosses a power-of-two boundary; for v7 realloc, this would cause quadratic
- * behavior.
- *
- * Return 0 if new item added, error code if memory couldn't be allocated.
- *
- * Invariant of the glob_t structure:
- * Either gl_pathc is zero and gl_pathv is NULL; or gl_pathc > 0 and
- * gl_pathv points to (gl_offs + gl_pathc + 1) items.
- */
-static int
-globextend(path, pglob, limitp)
- const Char *path;
- glob_t *pglob;
- size_t *limitp;
-{
- register char **pathv;
- register int i;
- u_int newsize, len;
- char *copy;
- const Char *p;
-
- newsize = sizeof(*pathv) * (2 + pglob->gl_pathc + pglob->gl_offs);
- pathv = pglob->gl_pathv ? realloc((char *)pglob->gl_pathv, newsize) :
- malloc(newsize);
- if (pathv == NULL) {
- if (pglob->gl_pathv) {
- free(pglob->gl_pathv);
- pglob->gl_pathv = NULL;
- }
- return(GLOB_NOSPACE);
- }
-
- if (pglob->gl_pathv == NULL && pglob->gl_offs > 0) {
- /* first time around -- clear initial gl_offs items */
- pathv += pglob->gl_offs;
- for (i = pglob->gl_offs; --i >= 0; )
- *--pathv = NULL;
- }
- pglob->gl_pathv = pathv;
-
- for (p = path; *p++;)
- ;
- len = (size_t)(p - path);
- *limitp += len;
- if ((copy = malloc(len)) != NULL) {
- if (g_Ctoc(path, copy, len)) {
- free(copy);
- return(GLOB_NOSPACE);
- }
- pathv[pglob->gl_offs + pglob->gl_pathc++] = copy;
- }
- pathv[pglob->gl_offs + pglob->gl_pathc] = NULL;
-
- if ((pglob->gl_flags & GLOB_LIMIT) &&
- newsize + *limitp >= ARG_MAX) {
- errno = 0;
- return(GLOB_NOSPACE);
- }
-
- return(copy == NULL ? GLOB_NOSPACE : 0);
-}
-
-
-/*
- * pattern matching function for filenames. Each occurrence of the *
- * pattern causes a recursion level.
- */
-static int
-match(name, pat, patend)
- register Char *name, *pat, *patend;
-{
- int ok, negate_range;
- Char c, k;
-
- while (pat < patend) {
- c = *pat++;
- switch (c & M_MASK) {
- case M_ALL:
- if (pat == patend)
- return(1);
- do
- if (match(name, pat, patend))
- return(1);
- while (*name++ != EOS)
- ;
- return(0);
- case M_ONE:
- if (*name++ == EOS)
- return(0);
- break;
- case M_SET:
- ok = 0;
- if ((k = *name++) == EOS)
- return(0);
- if ((negate_range = ((*pat & M_MASK) == M_NOT)) != EOS)
- ++pat;
- while (((c = *pat++) & M_MASK) != M_END)
- if ((*pat & M_MASK) == M_RNG) {
- if (c <= k && k <= pat[1])
- ok = 1;
- pat += 2;
- } else if (c == k)
- ok = 1;
- if (ok == negate_range)
- return(0);
- break;
- default:
- if (*name++ != c)
- return(0);
- break;
- }
- }
- return(*name == EOS);
-}
-
-/* Free allocated data belonging to a glob_t structure. */
-void
-globfree(pglob)
- glob_t *pglob;
-{
- register int i;
- register char **pp;
-
- if (pglob->gl_pathv != NULL) {
- pp = pglob->gl_pathv + pglob->gl_offs;
- for (i = pglob->gl_pathc; i--; ++pp)
- if (*pp)
- free(*pp);
- free(pglob->gl_pathv);
- pglob->gl_pathv = NULL;
- }
-}
-
-static DIR *
-g_opendir(str, pglob)
- register Char *str;
- glob_t *pglob;
-{
- char buf[MAXPATHLEN];
-
- if (!*str)
- strlcpy(buf, ".", sizeof buf);
- else {
- if (g_Ctoc(str, buf, sizeof(buf)))
- return(NULL);
- }
-
- if (pglob->gl_flags & GLOB_ALTDIRFUNC)
- return((*pglob->gl_opendir)(buf));
-
- return(opendir(buf));
-}
-
-static int
-g_lstat(fn, sb, pglob)
- register Char *fn;
- struct stat *sb;
- glob_t *pglob;
-{
- char buf[MAXPATHLEN];
-
- if (g_Ctoc(fn, buf, sizeof(buf)))
- return(-1);
- if (pglob->gl_flags & GLOB_ALTDIRFUNC)
- return((*pglob->gl_lstat)(buf, sb));
- return(lstat(buf, sb));
-}
-
-static int
-g_stat(fn, sb, pglob)
- register Char *fn;
- struct stat *sb;
- glob_t *pglob;
-{
- char buf[MAXPATHLEN];
-
- if (g_Ctoc(fn, buf, sizeof(buf)))
- return(-1);
- if (pglob->gl_flags & GLOB_ALTDIRFUNC)
- return((*pglob->gl_stat)(buf, sb));
- return(stat(buf, sb));
-}
-
-static Char *
-g_strchr(str, ch)
- Char *str;
- int ch;
-{
- do {
- if (*str == ch)
- return (str);
- } while (*str++);
- return (NULL);
-}
-
-static int
-g_Ctoc(str, buf, len)
- register const Char *str;
- char *buf;
- u_int len;
-{
-
- while (len--) {
- if ((*buf++ = (char) *str++) == EOS)
- return (0);
- }
- return (1);
-}
-
-#ifdef DEBUG
-static void
-qprintf(str, s)
- const char *str;
- register Char *s;
-{
- register Char *p;
-
- (void)printf("%s:\n", str);
- for (p = s; *p; p++)
- (void)printf("%c", CHAR(*p));
- (void)printf("\n");
- for (p = s; *p; p++)
- (void)printf("%c", *p & M_PROTECT ? '"' : ' ');
- (void)printf("\n");
- for (p = s; *p; p++)
- (void)printf("%c", ismeta(*p) ? '_' : ' ');
- (void)printf("\n");
-}
-#endif
diff --git a/win32/glob.h b/win32/glob.h
deleted file mode 100644
index 4e842a5cee..0000000000
--- a/win32/glob.h
+++ /dev/null
@@ -1,101 +0,0 @@
-/* $Id$ */
-/* OpenBSD: glob.h,v 1.7 2002/02/17 19:42:21 millert Exp */
-/* NetBSD: glob.h,v 1.5 1994/10/26 00:55:56 cgd Exp */
-
-/*
- * Copyright (c) 1989, 1993
- * The Regents of the University of California. All rights reserved.
- *
- * This code is derived from software contributed to Berkeley by
- * Guido van Rossum.
- *
- * 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. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement:
- * This product includes software developed by the University of
- * California, Berkeley and its contributors.
- * 4. 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.
- *
- * @(#)glob.h 8.1 (Berkeley) 6/2/93
- */
-
-#ifndef _GLOB_H_
-#define _GLOB_H_
-
-#include <sys/cdefs.h>
-
-struct stat;
-typedef struct {
- int gl_pathc; /* Count of total paths so far. */
- int gl_matchc; /* Count of paths matching pattern. */
- int gl_offs; /* Reserved at beginning of gl_pathv. */
- int gl_flags; /* Copy of flags parameter to glob. */
- char **gl_pathv; /* List of paths matching pattern. */
- /* Copy of errfunc parameter to glob. */
- int (*gl_errfunc)(const char *, int);
-
- /*
- * Alternate filesystem access methods for glob; replacement
- * versions of closedir(3), readdir(3), opendir(3), stat(2)
- * and lstat(2).
- */
- void (*gl_closedir)(void *);
- struct dirent *(*gl_readdir)(void *);
- void *(*gl_opendir)(const char *);
- int (*gl_lstat)(const char *, struct stat *);
- int (*gl_stat)(const char *, struct stat *);
-} glob_t;
-
-/* Flags */
-#define GLOB_APPEND 0x0001 /* Append to output from previous call. */
-#define GLOB_DOOFFS 0x0002 /* Use gl_offs. */
-#define GLOB_ERR 0x0004 /* Return on error. */
-#define GLOB_MARK 0x0008 /* Append / to matching directories. */
-#define GLOB_NOCHECK 0x0010 /* Return pattern itself if nothing matches. */
-#define GLOB_NOSORT 0x0020 /* Don't sort. */
-
-#ifndef _POSIX_SOURCE
-#define GLOB_ALTDIRFUNC 0x0040 /* Use alternately specified directory funcs. */
-#define GLOB_BRACE 0x0080 /* Expand braces ala csh. */
-#define GLOB_MAGCHAR 0x0100 /* Pattern had globbing characters. */
-#define GLOB_NOMAGIC 0x0200 /* GLOB_NOCHECK without magic chars (csh). */
-#define GLOB_QUOTE 0x0400 /* Quote special chars with \. */
-#define GLOB_TILDE 0x0800 /* Expand tilde names from the passwd file. */
-#define GLOB_NOESCAPE 0x1000 /* Disable backslash escaping. */
-#define GLOB_LIMIT 0x2000 /* Limit pattern match output to ARG_MAX */
-#endif
-
-/* Error values returned by glob(3) */
-#define GLOB_NOSPACE (-1) /* Malloc call failed. */
-#define GLOB_ABORTED (-2) /* Unignored error. */
-#define GLOB_NOMATCH (-3) /* No match and GLOB_NOCHECK not set. */
-#define GLOB_NOSYS (-4) /* Function not supported. */
-#define GLOB_ABEND GLOB_ABORTED
-
-__BEGIN_DECLS
-int glob(const char *, int, int (*)(const char *, int), glob_t *);
-void globfree(glob_t *);
-__END_DECLS
-
-#endif /* !_GLOB_H_ */
diff --git a/win32/globals.c b/win32/globals.c
deleted file mode 100755
index c66823955d..0000000000
--- a/win32/globals.c
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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$ */
-
-#include "php.h"
-#include "php_win32_globals.h"
-
-#ifdef ZTS
-PHPAPI int php_win32_core_globals_id;
-#else
-php_win32_core_globals the_php_win32_core_globals;
-#endif
-
-void php_win32_core_globals_ctor(void *vg TSRMLS_DC)
-{
- php_win32_core_globals *wg = (php_win32_core_globals*)vg;
- memset(wg, 0, sizeof(*wg));
-}
-
-PHP_RSHUTDOWN_FUNCTION(win32_core_globals)
-{
- php_win32_core_globals *wg =
-#ifdef ZTS
- ts_resource(php_win32_core_globals_id)
-#else
- &the_php_win32_core_globals
-#endif
- ;
-
- STR_FREE(wg->login_name);
-
- memset(wg, 0, sizeof(*wg));
- return SUCCESS;
-}
-
diff --git a/win32/grp.h b/win32/grp.h
deleted file mode 100644
index c39aced6cc..0000000000
--- a/win32/grp.h
+++ /dev/null
@@ -1,26 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Sterling Hughes <sterling@php.net> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-struct group {
- char *gr_name;
- char *gr_passwd;
- int gr_gid;
- char **gr_mem;
-};
diff --git a/win32/install.txt b/win32/install.txt
deleted file mode 100644
index 152044a781..0000000000
--- a/win32/install.txt
+++ /dev/null
@@ -1,1441 +0,0 @@
-
-Installing PHP
- _________________________________________________________________
-
- Table of Contents
- 1. General Installation Considerations
- 2. Installation on Windows systems
-
- Windows Installer
- Manual Installation Steps
- ActiveScript
- Microsoft IIS / PWS
- Apache 1.3.x on Microsft Windows
- Apache 2.0.x on Microsoft Windows
- Sun, iPlanet and Netscape servers on Microsoft Windows
- OmniHTTPd Server
- Sambar Server on Microsoft Windows
- Xitami on Microsoft Windows
- Installation of extensions on Windows
-
- 3. Problems?
-
- Read the FAQ
- Other problems
- Bug reports
-
- 4. Runtime Configuration
-
- The configuration file
- How to change configuration settings
- _________________________________________________________________
-
-Chapter 1. General Installation Considerations
-
- Before starting the installation, first you need to know what do you
- want to use PHP for. There are three main fields you can use PHP, as
- described in the What can PHP do? section:
-
- * Server-side scripting
- * Command line scripting
- * Client-side GUI applications
-
- For the first and most common form, you need three things: PHP itself,
- a web server and a web browser. You probably already have a web
- browser, and depending on your operating system setup, you may also
- have a web server (e.g. Apache on Linux and MacOS X; IIS on Windows).
- You may also rent webspace at a company. This way, you don't need to
- set up anything on your own, only write your PHP scripts, upload it to
- the server you rent, and see the results in your browser.
-
- While setting up the server and PHP on your own, you have two choices
- for the method of connecting PHP to the server. For many servers PHP
- has a direct module interface (also called SAPI). These servers
- include Apache, Microsoft Internet Information Server, Netscape and
- iPlanet servers. Many other servers have support for ISAPI, the
- Microsoft module interface (OmniHTTPd for example). If PHP has no
- module support for your web server, you can always use it as a CGI or
- FastCGI processor. This means you set up your server to use the CGI
- executable of PHP to process all PHP file requests on the server.
-
- If you are also interested to use PHP for command line scripting (e.g.
- write scripts autogenerating some images for you offline, or
- processing text files depending on some arguments you pass to them),
- you always need the command line executable. For more information,
- read the section about writing command line PHP applications. In this
- case, you need no server and no browser.
-
- With PHP you can also write desktop GUI applications using the PHP-GTK
- extension. This is a completely different approach than writing web
- pages, as you do not output any HTML, but manage windows and objects
- within them. For more information about PHP-GTK, please visit the site
- dedicated to this extension. PHP-GTK is not included in the official
- PHP distribution.
-
- From now on, this section deals with setting up PHP for web servers on
- Unix and Windows with server module interfaces and CGI executables.
- You will also find information on the command line executable in the
- following sections.
-
- PHP source code and binary distributions for Windows can be found at
- http://www.php.net/downloads.php. We recommend you to choose a mirror
- nearest to you for downloading the distributions.
- _________________________________________________________________
-
-Chapter 2. Installation on Windows systems
-
- This section applies to Windows 98/Me and Windows NT/2000/XP/2003. PHP
- will not work on 16 bit platforms such as Windows 3.1 and sometimes we
- refer to the supported Windows platforms as Win32. Windows 95 is no
- longer supported as of PHP 4.3.0.
-
- There are two main ways to install PHP for Windows: either manually or
- by using the installer.
-
- If you have Microsoft Visual Studio, you can also build PHP from the
- original source code.
-
- Once you have PHP installed on your Windows system, you may also want
- to load various extensions for added functionality.
-
- Warning
-
- There are several all-in-one installers over the Internet, but none of
- those are endorsed by PHP.net, as we believe that the manual
- installation is the best choice to have your system secure and
- optimised.
- _________________________________________________________________
-
-Windows Installer
-
- The Windows PHP installer is available from the downloads page at
- http://www.php.net/downloads.php. This installs the CGI version of PHP
- and for IIS, PWS, and Xitami, it configures the web server as well.
- The installer does not include any extra external PHP extensions
- (php_*.dll) as you'll only find those in the Windows Zip Package and
- PECL downloads.
-
- Note: While the Windows installer is an easy way to make PHP work,
- it is restricted in many aspects as, for example, the automatic
- setup of extensions is not supported. Use of the installer isn't
- the preferred method for installing PHP.
-
- First, install your selected HTTP (web) server on your system, and
- make sure that it works.
-
- Run the executable installer and follow the instructions provided by
- the installation wizard. Two types of installation are supported -
- standard, which provides sensible defaults for all the settings it
- can, and advanced, which asks questions as it goes along.
-
- The installation wizard gathers enough information to set up the
- php.ini file, and configure certain web servers to use PHP. With IIS
- or PWS on a NT Workstation, a list of all the nodes on the server with
- script map settings is displayed, and you can choose those nodes to
- which you wish to add the PHP script mappings. One of the web servers
- the PHP installer does not configure for is Apache, so you'll need to
- configure it manually.
-
- Once the installation has completed, the installer will inform you if
- you need to restart your system, restart the server, or just start
- using PHP.
-
- Warning
-
- Be aware, that this setup of PHP is not secure. If you would like to
- have a secure PHP setup, you'd better go on the manual way, and set
- every option carefully. This automatically working setup gives you an
- instantly working PHP installation, but it is not meant to be used on
- online servers.
- _________________________________________________________________
-
-Manual Installation Steps
-
- This install guide will help you manually install and configure PHP
- with a web server on Microsoft Windows. To get started you'll need to
- download the zip binary distribution from the downloads page at
- http://www.php.net/downloads.php.
-
- Although there are many all-in-one installation kits, and we also
- distribute a PHP installer for Microsoft Windows, we recommend you
- take the time to setup PHP yourself as this will provide you with a
- better understanding of the system, and enables you to install PHP
- extensions easily when needed.
-
- Upgrading from a previous PHP version: Previous editions of the
- manual suggest moving various ini and DLL files into your SYSTEM
- (i.e. C:\WINDOWS) folder and while this simplifies the installation
- procedure it makes upgrading difficult. We advise you remove all of
- these files (like php.ini and PHP related DLLs from the Windows
- SYSTEM folder) before moving on with a new PHP installation. Be
- sure to backup these files as you might break the entire system.
- The old php.ini might be useful in setting up the new PHP as well.
- And as you'll soon learn, the preferred method for installing PHP
- is to keep all PHP related files in one directory and have this
- directory available to your systems PATH.
-
- MDAC requirements: If you use Microsoft Windows 98/NT4 download the
- latest version of the Microsoft Data Access Components (MDAC) for
- your platform. MDAC is available at
- http://msdn.microsoft.com/data/. This requirement exists because
- ODBC is built into the distributed Windows binaries.
-
- The following steps should be completed on all installations before
- any server specific instructions are performed:
-
- Extract the distribution file into a directory of your choice. If you
- are installing PHP 4, extract to C:\, as the zip file expands to a
- foldername like php-4.3.7-Win32. If you are installing PHP 5, extract
- to C:\php as the zip file doesn't expand as in PHP 4. You may choose a
- different location but do not have spaces in the path (like C:\Program
- Files\PHP) as some web servers will crash if you do.
-
- The directory structure extracted from the zip is different for PHP
- versions 4 and 5 and look like as follows:
-
- Example 2-1. PHP 4 package structure
-c:\php
- |
- +--cli
- | |
- | |-php.exe -- CLI executable - ONLY for commandline scripting
- |
- +--dlls -- support DLLs required by some extensions
- | |
- | |-expat.dll
- | |
- | |-fdftk.dll
- | |
- | |-...
- |
- +--extensions -- extension DLLs for PHP
- | |
- | |-php_bz2.dll
- | |
- | |-php_cpdf.dll
- | |
- | |-..
- |
- +--mibs -- support files for SNMP
- |
- +--openssl -- support files for Openssl
- |
- +--pdf-related -- support files for PDF
- |
- +--sapi -- SAPI (server module support) DLLs
- | |
- | |-php4activescript.dll
- | |
- | |-php4apache.dll
- | |
- | |-php4apache2.dll
- | |
- | |-..
- |
- +--PEAR -- initial copy of PEAR
- |
- |
- |-go-pear.bat -- PEAR setup script
- |
- |-..
- |
- |-php.exe -- CGI executable
- |
- |-..
- |
- |-php.ini-dist -- default php.ini settings
- |
- |-php.ini-recommended -- recommended php.ini settings
- |
- |-php4ts.dll -- core PHP DLL
- |
- |-...
-
- Or:
-
- Example 2-2. PHP 5 package structure
-c:\php
- |
- +--dev
- | |
- | |-php5ts.lib
- |
- +--ext -- extension DLLs for PHP
- | |
- | |-php_bz2.dll
- | |
- | |-php_cpdf.dll
- | |
- | |-..
- |
- +--extras
- | |
- | +--mibs -- support files for SNMP
- | |
- | +--openssl -- support files for Openssl
- | |
- | +--pdf-related -- support files for PDF
- | |
- | |-mime.magic
- |
- +--pear -- initial copy of PEAR
- |
- |
- |-go-pear.bat -- PEAR setup script
- |
- |-fdftk.dll
- |
- |-..
- |
- |-php-cgi.exe -- CGI executable
- |
- |-php-win.exe -- executes scripts without an opened command prompt
- |
- |-php.exe -- CLI executable - ONLY for command line scripting
- |
- |-..
- |
- |-php.ini-dist -- default php.ini settings
- |
- |-php.ini-recommended -- recommended php.ini settings
- |
- |-php5activescript.dll
- |
- |-php5apache.dll
- |
- |-php5apache2.dll
- |
- |-..
- |
- |-php5ts.dll -- core PHP DLL
- |
- |-...
-
- Notice the differences and similarities. Both PHP 4 and PHP 5 have a
- CGI executable, a CLI executable, and server modules, but they are
- located in different folders and/or have different names. While PHP 4
- packages have the server modules in the sapi folder, PHP 5
- distributions have no such directory and instead they're in the PHP
- folder root. The supporting DLLs for the PHP 5 extensions are also not
- in a seperate directory.
-
- Note: In PHP 4, you should move all files located in the dll and
- sapi folders to the main folder (e.g. C:\php).
-
- Here is a list of server modules shipped with PHP 4 and PHP 5:
-
- * sapi/php4activescript.dll (php5activescript.dll) - ActiveScript
- engine, allowing you to embed PHP in your Windows applications.
- * sapi/php4apache.dll (php5apache.dll) - Apache 1.3.x module.
- * sapi/php4apache2.dll (php5apache2.dll) - Apache 2.0.x module.
- * sapi/php4isapi.dll (php5isapi.dll) - ISAPI Module for ISAPI
- compliant web servers like IIS 4.0/PWS 4.0 or newer.
- * sapi/php4nsapi.dll (php5nsapi.dll) - Sun/iPlanet/Netscape server
- module.
- * sapi/php4pi3web.dll (no equivalent in PHP 5) - Pi3Web server
- module.
-
- Server modules provide significantly better performance and additional
- functionality compared to the CGI binary. The CLI version is designed
- to let you use PHP for command line scripting. More information about
- CLI is available in the chapter about using PHP from the command line.
-
- Warning
-
- The SAPI modules have been significantly improved as of the 4.1
- release, however, in older systems you may encounter server errors or
- other server modules failing, such as ASP.
-
- The CGI and CLI binaries, and the web server modules all require the
- php4ts.dll (php5ts.dll) file to be available to them. You have to make
- sure that this file can be found by your PHP installation. The search
- order for this DLL is as follows:
-
- * The same directory from where php.exe is called, or in case you
- use a SAPI module, the web server's directory (e.g. C:\Program
- Files\Apache Group\Apache2\bin).
- * Any directory in your Windows PATH environment variable.
-
- To make php4ts.dll / php5ts.dll available you have three options: copy
- the file to the Windows system directory, copy the file to the web
- server's directory, or add your PHP directory, C:\php to the PATH. For
- better maintenance, we advise you to follow the last option, add
- C:\php to the PATH, because it will be simpler to upgrade PHP in the
- future. Read more about how to add your PHP directory to PATH in the
- corresponding FAQ entry.
-
- The next step is to set up a valid configuration file for PHP,
- php.ini. There are two ini files distributed in the zip file,
- php.ini-dist and php.ini-recommended. We advise you to use
- php.ini-recommended, because we optimized the default settings in this
- file for performance, and security. Read this well documented file
- carefully because it has changes from php.ini-dist that will
- drastically affect your setup. Some examples are display_errors being
- off and magic_quotes_gpc being off. In addition to reading these,
- study the ini settings and set every element manually yourself. If you
- would like to achieve the best security, then this is the way for you,
- although PHP works fine with these default ini files. Copy your chosen
- ini-file to a directory that PHP is able to find and rename it to
- php.ini. PHP searches for php.ini in the following locations (in
- order):
-
- * PHPIniDir directive (Apache 2 module only)
- * HKEY_LOCAL_MACHINE\SOFTWARE\PHP\IniFilePath
- * The PHPRC environment variable
- * Directory of PHP (for CLI), or the web server's directory (for
- SAPI modules)
- * Windows directory (C:\windows or C:\winnt)
-
- If you are running Apache 2, the simpler option is to use the
- PHPIniDir directive (read the installation on Apache 2 page),
- otherwise your best option is to set the PHPRC environment variable.
- This process is explained in the following FAQ entry.
-
- Note: If you're using NTFS on Windows NT, 2000, XP or 2003, make
- sure that the user running the web server has read permissions to
- your php.ini (e.g. make it readable by Everyone).
-
- The following steps are optional:
-
- * Edit your new php.ini file. If you plan to use OmniHTTPd, do not
- follow the next step. Set the doc_root to point to your web
- servers document_root. For example:
-
-doc_root = c:\inetpub // for IIS/PWS
-
-doc_root = c:\apache\htdocs // for Apache
-
- * Choose the extensions you would like to load when PHP starts. See
- the section about Windows extensions, about how to set up one, and
- what is already built in. Note that on a new installation it is
- advisable to first get PHP working and tested without any
- extensions before enabling them in php.ini.
- * On PWS and IIS, you can set the browscap configuration setting to
- point to: c:\windows\system\inetsrv\browscap.ini on Windows 9x/Me,
- c:\winnt\system32\inetsrv\browscap.ini on NT/2000, and
- c:\windows\system32\inetsrv\browscap.ini on XP. For an up-to-date
- browscap.ini, read the following FAQ.
-
- PHP is now setup on your system. The next step is to choose a web
- server, and enable it to run PHP. Choose a webserver from the table of
- contents.
- _________________________________________________________________
-
-ActiveScript
-
- This section contains notes specific to the ActiveScript installation.
-
- ActiveScript is a windows only SAPI that enables you to use PHP script
- in any ActiveScript compliant host, like Windows Script Host,
- ASP/ASP.NET, Windows Script Components or Microsoft Scriptlet control.
-
- As of PHP 5.0.1, ActiveScript has been moved to the PECL repository.
- You may download this PECL extensions DLL from the PHP Downloads page
- or at http://snaps.php.net/.
-
- Note: You should read the manual installation steps first!
-
- After installing PHP, you should download the ActiveScript DLL
- (php5activescript.dll) and place it in the main PHP folder (e.g.
- C:\php).
-
- After having all the files needed, you must register the DLL on your
- system. To achieve this, open a Command Prompt window (located in the
- Start Menu). Then go to your PHP directory by typing something like cd
- C:\php. To register the DLL just type regsvr32 php5activescript.dll.
-
- To test if ActiveScript is working, create a new file, named test.wsf
- (the extension is very important) and type:
-<job id="test">
-
- <script language="PHPScript">
- $WScript->Echo("Hello World!");
- </script>
-
-</job>
-
- Save and double-click on the file. If you receive a little window
- saying "Hello World!" you're done.
-
- Note: ActiveScript doesn't use the default php.ini file. Instead,
- it will look only in the same directory as the .exe that caused it
- to load. You should create php-activescript.ini and place it in
- that folder, if you wish to load extensions, etc.
- _________________________________________________________________
-
-Microsoft IIS / PWS
-
- This section contains notes and hints specific to IIS (Microsoft
- Internet Information Server). We have included installation
- instructions for PWS/IIS 3, PWS 4 or newer and IIS 4 or newer
- versions.
-
- Important for CGI users: Read the faq on cgi.force_redirect for
- important details. This directive needs to be set to 0.
-
- Warning
-
- By using the CGI setup, your server is open to several possible
- attacks. Please read our CGI security section to learn how to defend
- yourself from those attacks.
- _________________________________________________________________
-
-Windows and PWS/IIS 3
-
- The recommended method for configuring these servers is to use the REG
- file included with the distribution (pws-php4cgi.reg in the SAPI
- folder for PHP 4, or pws-php5cgi.reg in the main folder for PHP 5).
- You may want to edit this file and make sure the extensions and PHP
- install directories match your configuration. Or you can follow the
- steps below to do it manually.
-
- Warning
-
- These steps involve working directly with the Windows registry. One
- error here can leave your system in an unstable state. We highly
- recommend that you back up your registry first. The PHP Development
- team will not be held responsible if you damage your registry.
-
- * Run Regedit.
- * Navigate to: HKEY_LOCAL_MACHINE /System /CurrentControlSet
- /Services /W3Svc /Parameters /ScriptMap.
- * On the edit menu select: New->String Value.
- * Type in the extension you wish to use for your php scripts. For
- example .php
- * Double click on the new string value and enter the path to php.exe
- in the value data field. ex: C:\php\php.exe for PHP 4, or
- C:\php\php-cgi.exe for PHP 5.
- * Repeat these steps for each extension you wish to associate with
- PHP scripts.
-
- The following steps do not affect the web server installation and only
- apply if you want your PHP scripts to be executed when they are run
- from the command line (ex. run C:\myscripts\test.php) or by double
- clicking on them in a directory viewer window. You may wish to skip
- these steps as you might prefer the PHP files to load into a text
- editor when you double click on them.
-
- * Navigate to: HKEY_CLASSES_ROOT
- * On the edit menu select: New->Key.
- * Name the key to the extension you setup in the previous section.
- ex: .php
- * Highlight the new key and in the right side pane, double click the
- "default value" and enter phpfile.
- * Repeat the last step for each extension you set up in the previous
- section.
- * Now create another New->Key under HKEY_CLASSES_ROOT and name it
- phpfile.
- * Highlight the new key phpfile and in the right side pane, double
- click the "default value" and enter PHP Script.
- * Right click on the phpfile key and select New->Key, name it Shell.
- * Right click on the Shell key and select New->Key, name it open.
- * Right click on the open key and select New->Key, name it command.
- * Highlight the new key command and in the right side pane, double
- click the "default value" and enter the path to php.exe. ex:
- c:\php\php.exe -q %1. (don't forget the %1).
- * Exit Regedit.
- * If using PWS on Windows, reboot to reload the registry.
-
- PWS and IIS 3 users now have a fully operational system. IIS 3 users
- can use a nifty tool from Steven Genusa to configure their script
- maps.
- _________________________________________________________________
-
-Windows and PWS 4 or newer
-
- When installing PHP on Windows with PWS 4 or newer version, you have
- two options. One to set up the PHP CGI binary, the other is to use the
- ISAPI module DLL.
-
- If you choose the CGI binary, do the following:
-
- * Edit the enclosed pws-php4cgi.reg / pws-php5cgi.reg file (look
- into the SAPI folder for PHP 4, or in the main folder for PHP 5)
- to reflect the location of your php.exe / php-cgi.exe. Backslashes
- should be escaped, for example:
- [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\w3svc\parame
- ters\Script Map] ".php"="C:\\php\\php.exe" (change to
- C:\\php\\php-cgi.exe if you are using PHP 5) Now merge this
- registery file into your system; you may do this by
- double-clicking it.
- * In the PWS Manager, right click on a given directory you want to
- add PHP support to, and select Properties. Check the 'Execute'
- checkbox, and confirm.
-
- If you choose the ISAPI module, do the following:
-
- * Edit the enclosed pws-php4isapi.reg / pws-php5isapi.reg file (look
- into the SAPI folder for PHP 4, or in the main folder for PHP 5)
- to reflect the location of your php4isapi.dll / php5isapi.dll.
- Backslashes should be escaped, for example:
- [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\w3svc\parame
- ters\Script Map] ".php"="C:\\php\\sapi\\php4isapi.dll" (or
- C:\\php\\php5isapi.dll for PHP 5) Now merge this registery file
- into your system; you may do this by double-clicking it.
- * In the PWS Manager, right click on a given directory you want to
- add PHP support to, and select Properties. Check the 'Execute'
- checkbox, and confirm.
- _________________________________________________________________
-
-Windows NT/2000/XP and IIS 4 or newer
-
- To install PHP on an NT/2000/XP Server running IIS 4 or newer, follow
- these instructions. You have two options to set up PHP, using the CGI
- binary (php.exe in PHP 4, or php-cgi.exe in PHP 5) or with the ISAPI
- module.
-
- In either case, you need to start the Microsoft Management Console
- (may appear as 'Internet Services Manager', either in your Windows NT
- 4.0 Option Pack branch or the Control Panel=>Administrative Tools
- under Windows 2000/XP). Then right click on your Web server node (this
- will most probably appear as 'Default Web Server'), and select
- 'Properties'.
-
- If you want to use the CGI binary, do the following:
-
- * Under 'Home Directory', 'Virtual Directory', or 'Directory', click
- on the 'Configuration' button, and then enter the App Mappings
- tab.
- * Click Add, and in the Executable box, type: C:\php\php.exe for PHP
- 4 or C:\php\php-cgi.exe for PHP 5 (assuming that you have unziped
- PHP in c:\php\).
- * In the Extension box, type the file name extension you want
- associated with PHP scripts. Leave 'Method exclusions' blank, and
- check the 'Script engine' checkbox. You may also like to check the
- 'check that file exists' box - for a small performance penalty,
- IIS (or PWS) will check that the script file exists and sort out
- authentication before firing up PHP. This means that you will get
- sensible 404 style error messages instead of CGI errors
- complaining that PHP did not output any data.
- You must start over from the previous step for each extension you
- want associated with PHP scripts. .php and .phtml are common,
- although .php3 may be required for legacy applications.
- * Set up the appropriate security. (This is done in Internet Service
- Manager), and if your NT Server uses NTFS file system, add execute
- rights for I_USR_ to the directory that contains php.exe /
- php-cgi.exe.
-
- To use the ISAPI module, do the following:
-
- * If you don't want to perform HTTP Authentication using PHP, you
- can (and should) skip this step. Under ISAPI Filters, add a new
- ISAPI filter. Use PHP as the filter name, and supply a path to the
- php4isapi.dll / php5isapi.dll.
- * Under 'Home Directory', click on the 'Configuration' button. Add a
- new entry to the Application Mappings. Use the path to the
- php4isapi.dll / php5isapi.dll as the Executable, supply .php as
- the extension, leave 'Method exclusions' blank, and check the
- 'Script engine' checkbox.
- * Stop IIS completely (NET STOP iisadmin)
- * Start IIS again (NET START w3svc)
- _________________________________________________________________
-
-Apache 1.3.x on Microsft Windows
-
- This section contains notes and hints specific to Apache 1.3.x
- installs of PHP on Microsoft Windows systems. We also have
- instructions and notes for Apache 2 on a separate page.
-
- Note: You should read the manual installation steps first!
-
- There are two ways to set up PHP to work with Apache 1.3.x on Windows.
- One is to use the CGI binary (php.exe for PHP 4 and php-cgi.exe for
- PHP 5), the other is to use the Apache module DLL. In either case you
- need to edit your httpd.conf to configure Apache to work with PHP, and
- then restart the server.
-
- It is worth noting here that now the SAPI module has been made more
- stable under Windows, we recommend it's use above the CGI binary,
- since it is more transparent and secure.
-
- Although there can be a few variations of configuring PHP under
- Apache, these are simple enough to be used by the newcomer. Please
- consult the Apache Documentation for further configuration directives.
-
- After changing the configuration file, remember to restart the server,
- for example, NET STOP APACHE followed by NET START APACHE, if you run
- Apache as a Windows Service, or use your regular shortcuts.
-
- Note: Remember that when adding path values in the Apache
- configuration files on Windows, all backslashes such as
- c:\directory\file.ext must be converted to forward slashes, as
- c:/directory/file.ext.
- _________________________________________________________________
-
-Installing as a CGI binary
-
- If you unziped the PHP package to C:\php\ as described in the Manual
- Installation Steps section, you need to insert these lines to your
- Apache configuration file to set up the CGI binary:
-
- Example 2-3. PHP and Apache 1.3.x as CGI
-ScriptAlias /php/ "c:/php/"
-AddType application/x-httpd-php .php
-
-# For PHP 4
-Action application/x-httpd-php "/php/php.exe"
-
-# For PHP 5
-Action application/x-httpd-php "/php/php-cgi.exe"
-
-# specify the directory where php.ini is
-SetEnv PHPRC C:/php
-
- Note that the second line in the list above can be found in the actual
- versions of httpd.conf, but it is commented out. Remember also to
- substitute the c:/php/ for your actual path to PHP.
-
- Warning
-
- By using the CGI setup, your server is open to several possible
- attacks. Please read our CGI security section to learn how to defend
- yourself from those attacks.
-
- If you would like to present PHP source files syntax highlighted,
- there is no such convinient option as with the module version of PHP.
- If you chose to configure Apache to use PHP as a CGI binary, you will
- need to use the show_source() function. To do this simply create a PHP
- script file and add this code: <?php
- show_source("original_php_script.php"); ?>. Substitute
- original_php_script.php with the name of the file you wish to show the
- source of.
- _________________________________________________________________
-
-Installing as an Apache module
-
- You should add the following lines to your Apache httpd.conf file:
-
- Example 2-4. PHP as an Apache 1.3.x module
-AddType application/x-httpd-php .php
-
-# For PHP 4
-LoadModule php4_module "c:/php/sapi/php4apache.dll"
-
-# For PHP 5
-LoadModule php5_module "c:/php/php5apache.dll"
-
-# specify the directory where php.ini is
-SetEnv PHPRC C:/php
-
- You may find after using the Windows installer for Apache that you
- need to define the AddModule directive for mod_php4.c. This is
- especially important if the ClearModuleList directive is defined,
- which you will find by scrolling down a few lines. You will see a list
- of AddModule entries, add the following line at the end of the list:
- AddModule mod_php4.c. For PHP 5, instead use AddModule mod_php5.c
-
- If you would like to use the source code highlighting feature, you
- need to add the following line to your httpd.conf: AddType
- application/x-httpd-php-source .phps. This should be inserted at the
- same place where you inserted AddType application/x-httpd-php .php
- above). With this setup, all files served with the .phps extension
- will be syntax highlighted for the browser.
- _________________________________________________________________
-
-Apache 2.0.x on Microsoft Windows
-
- This section contains notes and hints specific to Apache 2.0.x
- installs of PHP on Microsoft Windows systems. We also have
- instructions and notes for Apache 1.3.x users on a separate page.
-
- Note: You should read the manual installation steps first!
-
- Warning
-
- Do not use Apache 2.0.x and PHP in a production environment neither on
- Unix nor on Windows. For information on why, read the following FAQ
- entry
-
- You are highly encouraged to take a look at the Apache Documentation
- to get a basic understanding of the Apache 2.0.x Server. Also consider
- to read the Windows specific notes for Apache 2.0.x before reading on
- here.
-
- PHP and Apache 2.0.x compatibility notes: The following versions of
- PHP are known to work with the most recent version of Apache 2.0.x:
-
- * PHP 4.3.0 or later available at http://www.php.net/downloads.php.
- * the latest stable development version. Get the source code
- http://snaps.php.net/php4-latest.tar.gz or download binaries for
- Windows http://snaps.php.net/win32/php4-win32-latest.zip.
- * a prerelease version downloadable from http://qa.php.net/.
- * you have always the option to obtain PHP through anonymous CVS.
-
- These versions of PHP are compatible to Apache 2.0.40 and later.
-
- Apache 2.0 SAPI-support started with PHP 4.2.0. PHP 4.2.3 works
- with Apache 2.0.39, don't use any other version of Apache with PHP
- 4.2.3. However, the recommended setup is to use PHP 4.3.0 or later
- with the most recent version of Apache2.
-
- All mentioned versions of PHP will work still with Apache 1.3.x.
-
- Warning
-
- Apache 2.0.x is designed to run on Windows NT 4.0, Windows 2000 or
- Windows XP. At this time, support for Windows 9x is incomplete. Apache
- 2.0.x is not expected to work on those platforms at this time.
-
- Download the most recent version of Apache 2.0.x and a fitting PHP
- version. Follow the Manual Installation Steps and come back to go on
- with the integration of PHP and Apache.
-
- There are two ways to set up PHP to work with Apache 2.0.x on Windows.
- One is to use the CGI binary the other is to use the Apache module
- DLL. In either case you need to edit your httpd.conf to configure
- Apache to work with PHP and then restart the server.
-
- Note: Remember that when adding path values in the Apache
- configuration files on Windows, all backslashes such as
- c:\directory\file.ext must be converted to forward slashes, as
- c:/directory/file.ext.
- _________________________________________________________________
-
-Installing as a CGI binary
-
- You need to insert these three lines to your Apache httpd.conf
- configuration file to set up the CGI binary:
-
- Example 2-5. PHP and Apache 2.0 as CGI
-ScriptAlias /php/ "c:/php/"
-AddType application/x-httpd-php .php
-
-# For PHP 4
-Action application/x-httpd-php "/php/php.exe"
-
-# For PHP 5
-Action application/x-httpd-php "/php/php-cgi.exe"
-
- Warning
-
- By using the CGI setup, your server is open to several possible
- attacks. Please read our CGI security section to learn how to defend
- yourself from those attacks.
- _________________________________________________________________
-
-Installing as an Apache module
-
- You need to insert these two lines to your Apache httpd.conf
- configuration file to set up the PHP module for Apache 2.0:
-
- Example 2-6. PHP and Apache 2.0 as Module
-# For PHP 4 do something like this:
-LoadModule php4_module "c:/php/sapi/php4apache2.dll"
-AddType application/x-httpd-php .php
-
-# For PHP 5 do something like this:
-LoadModule php5_module "c:/php/php5apache2.dll"
-AddType application/x-httpd-php .php
-
-# configure the path to php.ini
-PHPIniDir "C:/php"
-
- Note: Remember to substitute the c:/php/ for your actual path to
- PHP in the above examples. Take care to use either php4apache2.dll
- or php5apache2.dll in your LoadModule directive and not
- php4apache.dll or php5apache.dll as the latter ones are designed to
- run with Apache 1.3.x.
-
- Warning
-
- Don't mix up your installation with DLL files from different PHP
- versions. You have the only choice to use the DLL's and extensions
- that ship with your downloaded PHP version.
- _________________________________________________________________
-
-Sun, iPlanet and Netscape servers on Microsoft Windows
-
- This section contains notes and hints specific to Sun Java System Web
- Server, Sun ONE Web Server, iPlanet and Netscape server installs of
- PHP on Windows.
-
- From PHP 4.3.3 on you can use PHP scripts with the NSAPI module to
- generate custom directory listings and error pages. Additional
- functions for Apache compatibility are also available. For support in
- current webservers read the note about subrequests.
- _________________________________________________________________
-
-CGI setup on Sun, iPlanet and Netscape servers
-
- To install PHP as a CGI handler, do the following:
-
- * Copy php4ts.dll to your systemroot (the directory where you
- installed Windows)
- * Make a file association from the command line. Type the following
- two lines:
-
-assoc .php=PHPScript
-ftype PHPScript=c:\php\php.exe %1 %*
-
- * In the Netscape Enterprise Administration Server create a dummy
- shellcgi directory and remove it just after (this step creates 5
- important lines in obj.conf and allow the web server to handle
- shellcgi scripts).
- * In the Netscape Enterprise Administration Server create a new mime
- type (Category: type, Content-Type: magnus-internal/shellcgi, File
- Suffix:php).
- * Do it for each web server instance you want PHP to run
-
- More details about setting up PHP as a CGI executable can be found
- here: http://benoit.noss.free.fr/php/install-php.html
- _________________________________________________________________
-
-NSAPI setup on Sun, iPlanet and Netscape servers
-
- To install PHP with NSAPI, do the following:
-
- * Copy php4ts.dll to your systemroot (the directory where you
- installed Windows)
- * Make a file association from the command line. Type the following
- two lines:
-
-assoc .php=PHPScript
-ftype PHPScript=c:\php\php.exe %1 %*
-
- * In the Netscape Enterprise Administration Server create a new mime
- type (Category: type, Content-Type: magnus-internal/x-httpd-php,
- File Suffix: php).
- * Edit magnus.conf (for servers >= 6) or obj.conf (for servers < 6)
- and add the following: You should place the lines after mime types
- init.
-
-Init fn="load-modules" funcs="php4_init,php4_execute,php4_auth_trans" shlib="c:
-/php/sapi/php4nsapi.dll"
-Init fn="php4_init" LateInit="yes" errorString="Failed to initialise PHP!" [php
-_ini="c:/path/to/php.ini"]
-
- (PHP >= 4.3.3) The php_ini parameter is optional but with it you
- can place your php.ini in your webserver config directory.
- * Configure the default object in obj.conf (for virtual server
- classes [Sun Web Server 6.0+] in their vserver.obj.conf): In the
- <Object name="default"> section, place this line necessarily after
- all 'ObjectType' and before all 'AddLog' lines:
-
-Service fn="php4_execute" type="magnus-internal/x-httpd-php" [inikey=value inik
-ey=value ...]
-
- (PHP >= 4.3.3) As additional parameters you can add some special
- php.ini-values, for example you can set a
- docroot="/path/to/docroot" specific to the context php4_execute is
- called. For boolean ini-keys please use 0/1 as value, not
- "On","Off",... (this will not work correctly), e.g.
- zlib.output_compression=1 instead of zlib.output_compression="On"
- * This is only needed if you want to configure a directory that only
- consists of PHP scripts (same like a cgi-bin directory):
-
-<Object name="x-httpd-php">
-ObjectType fn="force-type" type="magnus-internal/x-httpd-php"
-Service fn=php4_execute [inikey=value inikey=value ...]
-</Object>
-
- After that you can configure a directory in the Administration
- server and assign it the style x-httpd-php. All files in it will
- get executed as PHP. This is nice to hide PHP usage by renaming
- files to .html.
- * Restart your web service and apply changes
- * Do it for each web server instance you want PHP to run
-
- Note: More details about setting up PHP as an NSAPI filter can be
- found here: http://benoit.noss.free.fr/php/install-php4.html
-
- Note: The stacksize that PHP uses depends on the configuration of
- the webserver. If you get crashes with very large PHP scripts, it
- is recommended to raise it with the Admin Server (in the section
- "MAGNUS EDITOR").
- _________________________________________________________________
-
-CGI environment and recommended modifications in php.ini
-
- Important when writing PHP scripts is the fact that Sun JSWS/Sun ONE
- WS/iPlanet/Netscape is a multithreaded web server. Because of that all
- requests are running in the same process space (the space of the
- webserver itself) and this space has only one environment. If you want
- to get CGI variables like PATH_INFO, HTTP_HOST etc. it is not the
- correct way to try this in the old PHP 3.x way with getenv() or a
- similar way (register globals to environment, $_ENV). You would only
- get the environment of the running webserver without any valid CGI
- variables!
-
- Note: Why are there (invalid) CGI variables in the environment?
-
- Answer: This is because you started the webserver process from the
- admin server which runs the startup script of the webserver, you
- wanted to start, as a CGI script (a CGI script inside of the admin
- server!). This is why the environment of the started webserver has
- some CGI environment variables in it. You can test this by starting
- the webserver not from the administration server. Use the command
- line as root user and start it manually - you will see there are no
- CGI-like environment variables.
-
- Simply change your scripts to get CGI variables in the correct way for
- PHP 4.x by using the superglobal $_SERVER. If you have older scripts
- which use $HTTP_HOST, etc., you should turn on register_globals in
- php.ini and change the variable order too (important: remove "E" from
- it, because you do not need the environment here):
-variables_order = "GPCS"
-register_globals = On
- _________________________________________________________________
-
-Special use for error pages or self-made directory listings (PHP >= 4.3.3)
-
- You can use PHP to generate the error pages for "404 Not Found" or
- similar. Add the following line to the object in obj.conf for every
- error page you want to overwrite:
-Error fn="php4_execute" code=XXX script="/path/to/script.php" [inikey=value ini
-key=value...]
-
- where XXX is the HTTP error code. Please delete any other Error
- directives which could interfere with yours. If you want to place a
- page for all errors that could exist, leave the code parameter out.
- Your script can get the HTTP status code with $_SERVER['ERROR_TYPE'].
-
- Another possibility is to generate self-made directory listings. Just
- create a PHP script which displays a directory listing and replace the
- corresponding default Service line for
- type="magnus-internal/directory" in obj.conf with the following:
-Service fn="php4_execute" type="magnus-internal/directory" script="/path/to/scr
-ipt.php" [inikey=value inikey=value...]
-
- For both error and directory listing pages the original URI and
- translated URI are in the variables $_SERVER['PATH_INFO'] and
- $_SERVER['PATH_TRANSLATED'].
- _________________________________________________________________
-
-Note about nsapi_virtual() and subrequests (PHP >= 4.3.3)
-
- The NSAPI module now supports the nsapi_virtual() function (alias:
- virtual()) to make subrequests on the webserver and insert the result
- in the webpage. The problem is, that this function uses some
- undocumented features from the NSAPI library.
-
- Under Unix this is not a problem, because the module automatically
- looks for the needed functions and uses them if available. If not,
- nsapi_virtual() is disabled.
-
- Under Windows limitations in the DLL handling need the use of a
- automatic detection of the most recent ns-httpdXX.dll file. This is
- tested for servers till version 6.1. If a newer version of the Sun
- server is used, the detection fails and nsapi_virtual() is disabled.
-
- If this is the case, try the following: Add the following parameter to
- php4_init in magnus.conf/obj.conf:
- Init fn=php4_init ... server_lib="ns-httpdXX.dll"
-
- where XX is the correct DLL version number. To get it, look in the
- server-root for the correct DLL name. The DLL with the biggest
- filesize is the right one.
-
- You can check the status by using the phpinfo() function.
-
- Note: But be warned: Support for nsapi_virtual() is EXPERIMENTAL!!!
- _________________________________________________________________
-
-OmniHTTPd Server
-
- This section contains notes and hints specific to OmniHTTPd on
- Windows.
-
- Note: You should read the manual installation steps first!
-
- Warning
-
- By using the CGI setup, your server is open to several possible
- attacks. Please read our CGI security section to learn how to defend
- yourself from those attacks.
-
- You need to complete the following steps to make PHP work with
- OmniHTTPd. This is a CGI executable setup. SAPI is supported by
- OmniHTTPd, but some tests have shown that it is not so stable to use
- PHP as an ISAPI module.
-
- Important for CGI users: Read the faq on cgi.force_redirect for
- important details. This directive needs to be set to 0.
-
- 1. Install OmniHTTPd server.
- 2. Right click on the blue OmniHTTPd icon in the system tray and
- select Properties
- 3. Click on Web Server Global Settings
- 4. On the 'External' tab, enter: virtual = .php | actual =
- c:\php\php.exe (use php-cgi.exe if installing PHP 5), and use the
- Add button.
- 5. On the Mime tab, enter: virtual = wwwserver/stdcgi | actual =
- .php, and use the Add button.
- 6. Click OK
-
- Repeat steps 2 - 6 for each extension you want to associate with PHP.
-
- Note: Some OmniHTTPd packages come with built in PHP support. You
- can choose at setup time to do a custom setup, and uncheck the PHP
- component. We recommend you to use the latest PHP binaries. Some
- OmniHTTPd servers come with PHP 4 beta distributions, so you should
- choose not to set up the built in support, but install your own. If
- the server is already on your machine, use the Replace button in
- Step 4 and 5 to set the new, correct information.
- _________________________________________________________________
-
-Sambar Server on Microsoft Windows
-
- This section contains notes and hints specific to the Sambar Server
- for Windows.
-
- Note: You should read the manual installation steps first!
-
- This list describes how to set up the ISAPI module to work with the
- Sambar server on Windows.
-
- * Find the file called mappings.ini (in the config directory) in the
- Sambar install directory.
- * Open mappings.ini and add the following line under [ISAPI]:
-
- Example 2-7. ISAPI configuration of Sambar
-#for PHP 4
-*.php = c:\php\php4isapi.dll
-
-#for PHP 5
-*.php = c:\php\php5isapi.dll
-
- (This line assumes that PHP was installed in c:\php.)
- * Now restart the Sambar server for the changes to take effect.
- _________________________________________________________________
-
-Xitami on Microsoft Windows
-
- This section contains notes and hints specific to Xitami on Windows.
-
- Note: You should read the manual installation steps first!
-
- This list describes how to set up the PHP CGI binary to work with
- Xitami on Windows.
-
- Important for CGI users: Read the faq on cgi.force_redirect for
- important details. This directive needs to be set to 0. If you want
- to use $_SERVER['PHP_SELF'] you have to enable the cgi.fix_pathinfo
- directive.
-
- Warning
-
- By using the CGI setup, your server is open to several possible
- attacks. Please read our CGI security section to learn how to defend
- yourself from those attacks.
-
- * Make sure the webserver is running, and point your browser to
- xitamis admin console (usually http://127.0.0.1/admin), and click
- on Configuration.
- * Navigate to the Filters, and put the extension which PHP should
- parse (i.e. .php) into the field File extensions (.xxx).
- * In Filter command or script put the path and name of your PHP CGI
- executable i.e. C:\php\php.exe for PHP 4, or C:\php\php-cgi.exe
- for PHP 5.
- * Press the 'Save' icon.
- * Restart the server to reflect changes.
- _________________________________________________________________
-
-Installation of extensions on Windows
-
- After installing PHP and a webserver on Windows, you will probably
- want to install some extensions for added functionality. You can
- choose which extensions you would like to load when PHP starts by
- modifying your php.ini. You can also load a module dynamically in your
- script using dl().
-
- The DLLs for PHP extensions are prefixed with php_.
-
- Note: In PHP 4.3.1 BCMath, Calendar, COM, Ctype, FTP, MySQL, ODBC,
- Overload, PCRE, Session, Tokenizer, WDDX, XML and Zlib support is
- built in. You don't need to load any additional extensions in order
- to use these functions. See your distributions README.txt or
- install.txt or this table for a list of built in modules.
-
- The default location PHP searches for extensions is c:\php4\extensions
- in PHP 4 and c:\php5 in PHP 5. To change this setting to reflect your
- setup of PHP edit your php.ini file:
-
- * You will need to change the extension_dir setting to point to the
- directory where your extensions lives, or where you have placed
- your php_*.dll files. Please do not forget the last backslash. For
- example:
-
-extension_dir = c:/php/extensions/
-
- * Enable the extension(s) in php.ini you want to use by uncommenting
- the extension=php_*.dll lines in php.ini. This is done by deleting
- the leading ; form the extension you want to load.
-
- Example 2-8. Enable Bzip2 extension for PHP-Windows
-// change the following line from ...
-;extension=php_bz2.dll
-
-// ... to
-extension=php_bz2.dll
-
- * Some of the extensions need extra DLLs to work. Couple of them can
- be found in the distribution package, in the C:\php\dlls\ folder
- in PHP 4 or in the main folder in PHP 5, but some, for example
- Oracle (php_oci8.dll) require DLLs which are not bundled with the
- distribution package. If you are installing PHP 4, copy the
- bundled DLLs from C:\php\dlls folder to the main C:\php folder.
- Don't forget to include C:\php in the system PATH (this process is
- explained in a separate FAQ entry).
-
- Note: If you are running a server module version of PHP remember to
- restart your webserver to reflect your changes to php.ini.
-
- The following table describes some of the extensions available and
- required additional dlls.
-
- Table 2-1. PHP Extensions
- Extension Description Notes
- php_bz2.dll bzip2 compression functions None
- php_calendar.dll Calendar conversion functions Built in since PHP
- 4.0.3
- php_cpdf.dll ClibPDF functions None
- php_crack.dll Crack functions None
- php_ctype.dll ctype family functions Built in since PHP 4.3.0
- php_curl.dll CURL, Client URL library functions Requires:
- libeay32.dll, ssleay32.dll (bundled)
- php_cybercash.dll Cybercash payment functions PHP <= 4.2.0
- php_db.dll DBM functions Deprecated. Use DBA instead (php_dba.dll)
- php_dba.dll DBA: DataBase (dbm-style) Abstraction layer functions None
- php_dbase.dll dBase functions None
- php_dbx.dll dbx functions
- php_domxml.dll DOM XML functions PHP <= 4.2.0 requires: libxml2.dll
- (bundled) PHP >= 4.3.0 requires: iconv.dll (bundled)
- php_dotnet.dll .NET functions PHP <= 4.1.1
- php_exif.dll Read EXIF headers from JPEG None
- php_fbsql.dll FrontBase functions PHP <= 4.2.0
- php_fdf.dll FDF: Forms Data Format functions. Requires: fdftk.dll
- (bundled)
- php_filepro.dll filePro functions Read-only access
- php_ftp.dll FTP functions Built-in since PHP 4.0.3
- php_gd.dll GD library image functions Removed in PHP 4.3.2. Also note
- that truecolor functions are not available in GD1, instead, use
- php_gd2.dll.
- php_gd2.dll GD library image functions GD2
- php_gettext.dll Gettext functions PHP <= 4.2.0 requires
- gnu_gettext.dll (bundled), PHP >= 4.2.3 requires libintl-1.dll,
- iconv.dll (bundled).
- php_hyperwave.dll HyperWave functions None
- php_iconv.dll ICONV characterset conversion Requires: iconv-1.3.dll
- (bundled), PHP >=4.2.1 iconv.dll
- php_ifx.dll Informix functions Requires: Informix libraries
- php_iisfunc.dll IIS management functions None
- php_imap.dll IMAP POP3 and NNTP functions None
- php_ingres.dll Ingres II functions Requires: Ingres II libraries
- php_interbase.dll InterBase functions Requires: gds32.dll (bundled)
- php_java.dll Java functions PHP <= 4.0.6 requires: jvm.dll (bundled)
- php_ldap.dll LDAP functions PHP <= 4.2.0 requires libsasl.dll
- (bundled), PHP >= 4.3.0 requires libeay32.dll, ssleay32.dll (bundled)
- php_mbstring.dll Multi-Byte String functions None
- php_mcrypt.dll Mcrypt Encryption functions Requires: libmcrypt.dll
- php_mhash.dll Mhash functions PHP >= 4.3.0 requires: libmhash.dll
- (bundled)
- php_mime_magic.dll Mimetype functions Requires: magic.mime (bundled)
- php_ming.dll Ming functions for Flash None
- php_msql.dll mSQL functions Requires: msql.dll (bundled)
- php_mssql.dll MSSQL functions Requires: ntwdblib.dll (bundled)
- php_mysql.dll MySQL functions PHP >= 5.0.0, requires libmysql.dll
- (bundled)
- php_mysqli.dll MySQLi functions PHP >= 5.0.0, requires libmysqli.dll
- (bundled)
- php_oci8.dll Oracle 8 functions Requires: Oracle 8.1+ client libraries
- php_openssl.dll OpenSSL functions Requires: libeay32.dll (bundled)
- php_oracle.dll Oracle functions Requires: Oracle 7 client libraries
- php_overload.dll Object overloading functions Built in since PHP 4.3.0
- php_pdf.dll PDF functions None
- php_pgsql.dll PostgreSQL functions None
- php_printer.dll Printer functions None
- php_shmop.dll Shared Memory functions None
- php_snmp.dll SNMP get and walk functions NT only!
- php_soap.dll SOAP functions PHP >= 5.0.0
- php_sockets.dll Socket functions None
- php_sybase_ct.dll Sybase functions Requires: Sybase client libraries
- php_tidy.dll Tidy functions PHP >= 5.0.0
- php_tokenizer.dll Tokenizer functions Built in since PHP 4.3.0
- php_w32api.dll W32api functions None
- php_xmlrpc.dll XML-RPC functions PHP >= 4.2.1 requires: iconv.dll
- (bundled)
- php_xslt.dll XSLT functions PHP <= 4.2.0 requires sablot.dll,
- expat.dll (bundled). PHP >= 4.2.1 requires sablot.dll, expat.dll,
- iconv.dll (bundled).
- php_yaz.dll YAZ functions Requires: yaz.dll (bundled)
- php_zip.dll Zip File functions Read only access
- php_zlib.dll ZLib compression functions Built in since PHP 4.3.0
- _________________________________________________________________
-
-Chapter 3. Problems?
-
-Read the FAQ
-
- Some problems are more common than others. The most common ones are
- listed in the PHP FAQ, part of this manual.
- _________________________________________________________________
-
-Other problems
-
- If you are still stuck, someone on the PHP installation mailing list
- may be able to help you. You should check out the archive first, in
- case someone already answered someone else who had the same problem as
- you. The archives are available from the support page on
- http://www.php.net/support.php. To subscribe to the PHP installation
- mailing list, send an empty mail to
- php-install-subscribe@lists.php.net. The mailing list address is
- php-install@lists.php.net.
-
- If you want to get help on the mailing list, please try to be precise
- and give the necessary details about your environment (which operating
- system, what PHP version, what web server, if you are running PHP as
- CGI or a server module, safe mode, etc...), and preferably enough code
- to make others able to reproduce and test your problem.
- _________________________________________________________________
-
-Bug reports
-
- If you think you have found a bug in PHP, please report it. The PHP
- developers probably don't know about it, and unless you report it,
- chances are it won't be fixed. You can report bugs using the
- bug-tracking system at http://bugs.php.net/. Please do not send bug
- reports in mailing list or personal letters. The bug system is also
- suitable to submit feature requests.
-
- Read the How to report a bug document before submitting any bug
- reports!
- _________________________________________________________________
-
-Chapter 4. Runtime Configuration
-
-The configuration file
-
- The configuration file (called php3.ini in PHP 3, and simply php.ini
- as of PHP 4) is read when PHP starts up. For the server module
- versions of PHP, this happens only once when the web server is
- started. For the CGI and CLI version, it happens on every invocation.
-
- The default location of php.ini is a compile time option (see the FAQ
- entry), but can be changed for the CGI and CLI version with the -c
- command line switch, see the chapter about using PHP from the command
- line. You can also use the environment variable PHPRC for an
- additional path to search for a php.ini file.
-
- If php-SAPI.ini exists (where SAPI is used SAPI, so the filename is
- e.g. php-cli.ini or php-apache.ini), it's used instead of php.ini.
-
- Note: The Apache web server changes the directory to root at
- startup causing PHP to attempt to read php.ini from the root
- filesystem if it exists.
-
- The php.ini directives handled by extensions are documented
- respectively on the pages of the extensions themselfs. The list of the
- core directives is available in the appendix. Probably not all the PHP
- directives are documented in the manual though. For a completel list
- of directives available in your PHP version, please read your well
- commented php.ini file. Alternatively, you may find the the latest
- php.ini from CVS helpful too.
-
- Example 4-1. php.ini example
-; any text on a line after an unquoted semicolon (;) is ignored
-[php] ; section markers (text within square brackets) are also ignored
-; Boolean values can be set to either:
-; true, on, yes
-; or false, off, no, none
-register_globals = off
-track_errors = yes
-
-; you can enclose strings in double-quotes
-include_path = ".:/usr/local/lib/php"
-
-; backslashes are treated the same as any other character
-include_path = ".;c:\php\lib"
- _________________________________________________________________
-
-How to change configuration settings
-
-Running PHP as an Apache module
-
- When using PHP as an Apache module, you can also change the
- configuration settings using directives in Apache configuration files
- (e.g. httpd.conf) and .htaccess files. You will need "AllowOverride
- Options" or "AllowOverride All" privileges to do so.
-
- With PHP 4 and PHP 5, there are several Apache directives that allow
- you to change the PHP configuration from within the Apache
- configuration files. For a listing of which directives are
- PHP_INI_ALL, PHP_INI_PERDIR, or PHP_INI_SYSTEM, have a look at the
- table found within the ini_set() documentation.
-
- Note: With PHP 3, there are Apache directives that correspond to
- each configuration setting in the php3.ini name, except the name is
- prefixed by "php3_".
-
- php_value name value
- Sets the value of the specified directive. Can be used only
- with PHP_INI_ALL and PHP_INI_PERDIR type directives. To clear a
- previously set value use none as the value.
-
- Note: Don't use php_value to set boolean values. php_flag (see
- below) should be used instead.
-
- php_flag name on|off
- Used to set a boolean configuration directive. Can be used only
- with PHP_INI_ALL and PHP_INI_PERDIR type directives.
-
- php_admin_value name value
- Sets the value of the specified directive. This can not be used
- in .htaccess files. Any directive type set with php_admin_value
- can not be overridden by .htaccess or virtualhost directives.
- To clear a previously set value use none as the value.
-
- php_admin_flag name on|off
- Used to set a boolean configuration directive. This can not be
- used in .htaccess files. Any directive type set with
- php_admin_flag can not be overridden by .htaccess or
- virtualhost directives.
-
- Example 4-2. Apache configuration example
-<IfModule mod_php5.c>
- php_value include_path ".:/usr/local/lib/php"
- php_admin_flag safe_mode on
-</IfModule>
-<IfModule mod_php4.c>
- php_value include_path ".:/usr/local/lib/php"
- php_admin_flag safe_mode on
-</IfModule>
-<IfModule mod_php3.c>
- php3_include_path ".:/usr/local/lib/php"
- php3_safe_mode on
-</IfModule>
-
- Caution
-
- PHP constants do not exist outside of PHP. For example, in httpd.conf
- you can not use PHP constants such as E_ALL or E_NOTICE to set the
- error_reporting directive as they will have no meaning and will
- evaluate to 0. Use the associated bitmask values instead. These
- constants can be used in php.ini
- _________________________________________________________________
-
-Changing PHP configuration via the Windows registry
-
- When running PHP on Windows, the configuration values can be modified
- on a per-directory basis using the Windows registry. The configuration
- values are stored in the registry key HKLM\SOFTWARE\PHP\Per Directory
- Values, in the sub-keys corresponding to the path names. For example,
- configuration values for the directory c:\inetpub\wwwroot would be
- stored in the key HKLM\SOFTWARE\PHP\Per Directory
- Values\c\inetpub\wwwroot. The settings for the directory would be
- active for any script running from this directory or any subdirectory
- of it. The values under the key should have the name of the PHP
- configuration directive and the string value. PHP constants in the
- values are not parsed.
- _________________________________________________________________
-
-Other interfaces to PHP
-
- Regardless of how you run PHP, you can change certain values at
- runtime of your scripts through ini_set(). See the documentation on
- the ini_set() page for more information.
-
- If you are interested in a complete list of configuration settings on
- your system with their current values, you can execute the phpinfo()
- function, and review the resulting page. You can also access the
- values of individual configuration directives at runtime using
- ini_get() or get_cfg_var().
diff --git a/win32/installer/README b/win32/installer/README
deleted file mode 100644
index 0879497db5..0000000000
--- a/win32/installer/README
+++ /dev/null
@@ -1,93 +0,0 @@
-PHP Installer for Win32, by Wez Furlong <wez@thebrainroom.com>
-==============================================================
-$Id$
-
-Here are the supporting scripts for building the win32 PHP installer.
-
-Requirements:
-
- MSI-2-XML from http://msi2xml.sourceforge.net/#Installation
-
-
-Installer Layout:
-
-We have the following features:
-
- o PHP Core - Always installed.
- Includes php5ts.dll, php.ini + common dlls
- and config files
-
- o SAPI
- Contains a node for each stable SAPI
-
- o Extensions
- Contains a node for each stable extension
-
- o Experimental
- o SAPI Experimental SAPIs
- o Extensions Experimental Extensions
-
-
-
-
-
-
-
-
-You need to have the Super-Pimp Installer from Nullsoft (Open Source).
-It is available here:
- http://nsis.sourceforge.net/
-
-To build an installer, you need:
-
- o A Source Tree
- o A win32 snapshot (extracted from the .zip)
-
- (The source tree and snapshot should have matching versions!)
-
-A Script/Batch file.
-I'm using this (in a .bat file):
-
-----------------------------------------------------------------
-cd <snapshot_root>
-cli\php <source_root>\win32\installer\gen-nsis.php > php.nsi
-"C:\Program Files\NSIS\makensis" /pause /nocd php.nsi
-----------------------------------------------------------------
-
- ** It is a good idea to examine the php.nsi file for WARNING
- ** comments. These indicate inconsistencies about your source
- ** tree structure.
-
-This will generate InstallPHP<Version>.exe, where <Version> is the version of
-the php in the snapshot. The Installer will be placed in the snapshot root.
-
-Installer Concept
-=================
-
-Maintaining installers is a real chore, so we use PHP to generate as much as
-possible.
-
-The gen-nsis.php script will examine the extensions dir from the snapshot and
-then attempt to extract information about the extensions from the source code.
-The sapi dir is subjected to similar treatment.
-
-Throughout the installation, values for php.ini settings are decided; these are
-appended to a temporary file. After everything has been installed, the
-iniset.php script is run and merges the values from the temporary file into the
-"official" php.ini.
-
-These scripts take advantage of features found in PHP 4.3.0 and later, so you
-can't build a PHP 4.2.x distro with it.
-
-Hacking
-=======
-
-While hacking, it's a good idea to comment out the SetCompressor line; it will
-speed up your installer builds...
-Also, switch the logic for the $SYSDIR define at the top to install vital DLLs
-to a fake system dir.
-
-
-
-vim:et:tw=78
-
diff --git a/win32/installer/gen-nsis.php b/win32/installer/gen-nsis.php
deleted file mode 100644
index da94264c9e..0000000000
--- a/win32/installer/gen-nsis.php
+++ /dev/null
@@ -1,446 +0,0 @@
-; PHP Installer for NSIS
-; Based on Welcome/Finish Page Example Script (Written by Joost Verburg)
-; Author: Wez Furlong <wez@thebrainroom.com>
-; $Id$
-<?php
-
-define('PHPVERSION', phpversion());
-define('SOURCEDIR', dirname(__FILE__) . "\\..\\..\\");
-define('DISTDIR', getcwd());
-
-/* for testing, install system files in a safe dir */
-
-if (false) {
- $SYSDIR = "\$INSTDIR\\system";
-} else {
- $SYSDIR = "\$SYSDIR";
-}
-
-$sections = array(
- "core" => array(
- "label" => "-PHP Core (Required)",
- "files" => array(
- "$SYSDIR" => array(
- "dlls\\*.dll",
- "php5ts.dll",
- ),
- "\$INSTDIR" => array(
- "*.txt",
- "php.gif",
- "php.ini-*",
- ),
- ),
- "extras" => "Call CopyPHPIni\nWriteUninstaller \"\$INSTDIR\\Uninstall.exe\""
- ),
-
- "cgi" => array(
- "group" => "SAPI",
- "label" => "CGI",
- "description" => "CGI Interface - should work with most web servers",
- "files" => array(
- "\$INSTDIR" => array(
- "php.exe"
- ),
- "\$INSTDIR\\sapi" => array(
- "sapi\\pws-php5cgi.reg"
- ),
- ),
- ),
-
- /* CLI is required by the installer */
- "cli" => array(
- "group" => "SAPI",
- "label" => "-CLI",
- "description" => "Command Line Interface for running PHP scripts as batch files",
- "files" => array(
- "\$INSTDIR\\cli" => array(
- "cli\\php.exe"
- ),
- ),
- ),
-
- "embed" => array(
- "group" => "SAPI",
- "label" => "Embed",
- "description" => "Libraries for embedding PHP into your own projects",
- "files" => array(
- "\$INSTDIR" => array(
- "*.lib"
- ),
- ),
- ),
-
- "mibs" => array(
- "group" => "Extras",
- "label" => "MIBS for SNMP",
- "description" => "MIB information for the SNMP extension",
- "files" => array(
- "\$INSTDIR\\mibs" => array(
- "mibs\\*"
- ),
- ),
- ),
-
- "pdfstuff" => array(
- "group" => "Extras",
- "label" => "PDF support files",
- "description" => "Fonts and codepage data files for the PDF extensions",
- "files" => array(
- "\$INSTDIR\\pdf-related" => array(
- "pdf-related\\*"
- ),
- ),
- ),
-
- "mimemagic" => array(
- "group" => "Extras",
- "label" => "Mime Magic",
- "description" => "The magic information file for the mimemagic extension",
- "files" => array(
- "\$INSTDIR" => array(
- "magic.mime"
- ),
- ),
- ),
-
- "openssl" => array(
- "group" => "Extras",
- "label" => "OpenSSL",
- "description" => "OpenSSL configuration information which you must read if you plan to use PHP as a Certificate Authority",
- "files" => array(
- "\$INSTDIR\\openssl" => array(
- "openssl\\*"
- ),
- ),
- ),
-
-
-
-);
-
-$groups = array(
- 'SAPI' => array("SAPI", "Select which Server API's to install."),
- 'EXT' => array("Extensions", "Select which extensions to install."),
- 'XSAPI' => array("Experimental SAPI", "Experimental Server API's - use at your own risk!"),
- 'XEXT' => array("Experimental Extensions", "Experimental Extensions - use at your own risk!"),
- 'Extras' => array("Extras", "Supplemental Files"),
- );
-
-function xglob($pattern)
-{
- if (strpos($pattern, '*') === false) {
- return array($pattern);
- }
- $dir = dirname($pattern);
- $pattern = basename($pattern);
-
- $pattern = str_replace(array('*', '.'), array('.*', '\.'), $pattern);
-
- $files = array();
-
- $d = opendir($dir);
- while ($f = readdir($d)) {
- if ($f == '.' || $f == '..' || preg_match('/^\..*\.swp$/', $f))
- continue;
- if (preg_match('@' . $pattern . '@i', $f)) {
- $files[] = $dir . '\\' . $f;
- }
- }
-
- return $files;
-}
-
-/* Look for extensions and determine their info based on the source tree.
- * We can determine the name and author from the CREDITS file.
- * We can determine experimental status from the EXPERIMENTAL file.
- * It would be nice to have a standard description line in the CREDITS too.
- */
-$extension_abbreviations = array(
- 'ifx' => 'informix',
- 'gd2' => 'gd',
- );
-
-$sapi_abbreviations = array(
- 'apache2' => 'apache2filter',
- 'srvlt' => 'servlet',
-);
-
-function add_sections($pattern, $groupname, $abbrev, &$sections, $sourcedirs, $instdir)
-{
- $avail = xglob($pattern);
-
- foreach ($avail as $extname) {
- /* mangle name */
- if (preg_match('/(php_|php5|php)([^_].*)\.dll/', basename($extname), $matches)) {
- $ext = $matches[2];
- } else {
- $ext = basename($extname);
- }
-
- if (isset($abbrev[$ext])) {
- $ext = $abbrev[$ext];
- }
-
- $extdir = null;
-
- foreach ($sourcedirs as $sourcedir) {
- // Allow absolute path for separate PECL checkout
- if ($sourcedir{0} == '\\' || $sourcedir{1} == ':')
- $extdir = $sourcedir;
- else
- $extdir = SOURCEDIR . $sourcedir . '/' . $ext . '/';
-
- if (is_dir($extdir))
- break;
-
- $extdir = null;
- }
-
- if ($extdir === null || !is_dir($extdir)) {
- echo "; WARNING: could not find source dir for extension $extname -> $extdir ($ext)\n";
- }
-
- $exp = file_exists($extdir . 'EXPERIMENTAL');
- if (file_exists($extdir . 'CREDITS')) {
- list($title, $authors, $description) = file($extdir . 'CREDITS');
- $title = trim($title);
- $authors = trim($authors);
- $description = trim($description);
-
- if (strlen($title) == 0)
- $title = $ext;
-
- } else {
- $title = $ext;
- $authors = "Unknown, or uncredited";
- $description = "";
- }
-
- /* build list of support files.
- * in theory, only needed for the srvlt sapi, but useful to keep this
- * generic */
- $filepat = preg_replace('/\.[^\.]+$/', '.*', $extname);
-
- if ($groupname == 'EXT') {
- }
-
- $sections['ext_' . $ext] = array(
- 'group' => ($exp ? 'X' : '') . $groupname,
- 'label' => $title,
- 'description' => $title . ".\$\\nAuthors: $authors",
- 'files' => array(
- "\$INSTDIR\\" . $instdir => array(
- $filepat
- ),
- ),
-/* 'extras' => $groupname == 'EXT' ? "Push \"extension=" . basename($extname) . "\"\nCall AddIniSetting\n\n" : "" */
- );
-
- }
-
-
-}
-
-add_sections('extensions\\*.dll', 'EXT', $extension_abbreviations, $sections, array('ext'), 'extensions');
-add_sections('sapi\\*.dll', 'SAPI', $sapi_abbreviations, $sections, array('sapi'), 'sapi');
-
-
-
-
-
-$SECTIONS = "";
-$sections_stage1 = array();
-
-/* list of files to uninstall */
-$uninstall = array();
-$rmdirs = array();
-/* description texts */
-$descriptions = array();
-
-$dirs_no_delete = array("\$SYSDIR", "\$INSTDIR");
-
-foreach ($sections as $sectionid => $sectiondata) {
- $descriptions[] = "\t!insertmacro MUI_DESCRIPTION_TEXT \${Sec$sectionid} \"" . $sectiondata['description'] . "\"";
-
- if (isset($sectiondata['group'])) {
- $sub = "Sub";
- $group = $sectiondata['group'];
- } else {
- $sub = "";
- $group = '_top_';
- }
-
- $body = "Section \"" . $sectiondata['label'] . "\" Sec$sectionid\n";
-
- foreach ($sectiondata['files'] as $outputdir => $filelist) {
- $body .= "\tSetOutPath \"$outputdir\"\n";
- foreach ($filelist as $pattern) {
- $files = xglob($pattern);
- foreach ($files as $filename) {
- $uninstall[] = "\tDelete \"$outputdir\\" . basename($filename) . "\"";
-
- $body .= "\tFile \"$filename\"\n";
- }
- }
- if (!in_array($outputdir, $dirs_no_delete) && !isset($rmdirs[$outputdir])) {
- $rmdirs[$outputdir] = "\tRMDir \"$outputdir\"";
- }
- }
-
- $body .= $sectiondata['extras'];
-
- $body .= "\nSectionEnd\n";
-
- $sections_stage1[$group] .= $body . "\n\n";
-}
-
-foreach ($sections_stage1 as $group => $data)
-{
- if ($group == '_top_') {
- $SECTIONS .= $data . "\n";
- } else {
- $descriptions[] = "\t!insertmacro MUI_DESCRIPTION_TEXT \${SecGroup$group} \"" . $groups[$group][1] . "\"";
- $SECTIONS .= "SubSection /e \"" . $groups[$group][0] . "\" SecGroup$group\n$data\nSubSectionEnd\n\n";
- }
-}
-
-/* Now build descriptions */
-$DESCRIPTIONS = implode("\n", $descriptions) . "\n";
-
-/* And the uninstallation section */
-$UNINSTALL = implode("\n", $uninstall) . "\n" . implode("\n", $rmdirs) . "\n";
-
-?>
-
-!define MUI_PRODUCT "PHP - Hypertext Preprocessor"
-!define MUI_VERSION "<?= PHPVERSION ?>"
-; The second UI has a wider area for the component names
-!define MUI_UI "${NSISDIR}\Contrib\UIs\modern2.exe"
-
-!include "${NSISDIR}\Contrib\Modern UI\System.nsh"
-
-;--------------------------------
-;Configuration
-
-!define MUI_WELCOMEPAGE
-!define MUI_LICENSEPAGE
-!define MUI_COMPONENTSPAGE
-!define MUI_DIRECTORYPAGE
-
-!define MUI_FINISHPAGE
-;!define MUI_FINISHPAGE_RUN "$INSTDIR\modern.exe"
-
-!define MUI_ABORTWARNING
-
-!define MUI_UNINSTALLER
-!define MUI_UNCONFIRMPAGE
-
-;Language
-!insertmacro MUI_LANGUAGE "English"
-
-;General
-OutFile "InstallPHP<?= PHPVERSION ?>.exe"
-
-SetCompressor bzip2
-ShowInstDetails show
-;License page
-LicenseData "license.txt"
-
-;Folder-selection page
-InstallDir "C:\PHP-<?= PHPVERSION ?>"
-;define NSIS_CONFIG_LOG "install.log"
-;LogSet on
-
-!cd <?= SOURCEDIR ?>win32\installer
-
-;Things that need to be extracted on startup (keep these lines before any File command!)
-;Only useful for BZIP2 compression
-;Use ReserveFile for your own Install Options ini files too!
-!insertmacro MUI_RESERVEFILE_INSTALLOPTIONS
-!insertmacro MUI_RESERVEFILE_SPECIALINI
-!insertmacro MUI_RESERVEFILE_SPECIALBITMAP
-
-!cd <?= DISTDIR ?>
-
-!insertmacro MUI_SYSTEM
-
-
-;--------------------------------
-;Installer Sections
-
-Function AddIniSetting
- Pop $R0
-
- FileOpen $R2 "$INSTDIR\.ini-add" "a"
- FileSeek $R2 0 END
- FileWrite $R2 "$R0$\n"
- FileClose $R2
-
-FunctionEnd
-
-Function CopyPHPIni
- ; Ensure that we have a working php.ini to reflect the
- ; installation options.
- ; Extensions will call a function to activate their entry
- ; in the ini file as they are installed.
-
- Rename "$WINDIR\php.ini" "$WINDIR\php.ini.old"
- CopyFiles "$INSTDIR\php.ini-dist" "$WINDIR\php.ini"
-
-; These files will be deleted during post-installation
- CopyFiles "<?= $SYSDIR ?>\php5ts.dll" "$INSTDIR\php5ts.dll"
- File "<?= dirname(__FILE__) ?>\setini.php"
-
-; Set the extension_dir setting in the php.ini
- Push "extension_dir=$\"$INSTDIR\extensions$\""
- Call AddIniSetting
-
-FunctionEnd
-
-; Generated Section Info
-<?= $SECTIONS ?>
-; ---------
-
-; Perform final actions after everything has been installed
-Section -post
- ; Merge ini settings
-
- Sleep 1000
-
- ExecWait "$\"$INSTDIR\cli\php.exe$\" $\"-n$\" $\"$INSTDIR\setini.php$\" $\"$WINDIR\php.ini$\" $\"$INSTDIR\.ini-add$\""
-
- Delete "$INSTDIR\.ini-add" ; Created by the AddIniSetting function
- Delete "$INSTDIR\setini.php"
- Delete "$INSTDIR\php5ts.dll"
-
- ; Add to Add/Remove programs list
- WriteRegStr HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\PHP-<?= PHPVERSION ?>" "UninstallString" "$INSTDIR\Uninstall.exe"
- WriteRegStr HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\PHP-<?= PHPVERSION ?>" "DisplayName" "PHP-<?= PHPVERSION ?> (Uninstall only)"
-
-
-SectionEnd
-
-;--------------------------------
-;Descriptions
-
-!insertmacro MUI_FUNCTIONS_DESCRIPTION_BEGIN
-<?= $DESCRIPTIONS ?>
-!insertmacro MUI_FUNCTIONS_DESCRIPTION_END
-
-;--------------------------------
-;Uninstaller Section
-
-Section "Uninstall"
-<?= $UNINSTALL ?>
-
- Delete "$INSTDIR\Uninstall.exe"
- Delete "$WINDIR\php.ini"
- RMDir "$INSTDIR"
- ; Remove from Add/Remove programs list
- DeleteRegKey /ifempty HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\PHP-<?= PHPVERSION ?>"
-
- !insertmacro MUI_UNFINISHHEADER
-
-SectionEnd
-; vim:sw=4:ts=4:
-; vim600:sw=4:ts=4:noet:fdm=marker
diff --git a/win32/installer/setini.php b/win32/installer/setini.php
deleted file mode 100644
index cdcb65fc07..0000000000
--- a/win32/installer/setini.php
+++ /dev/null
@@ -1,87 +0,0 @@
-<?php
-/* $Id$
- * Wez Furlong <wez@thebrainroom.com>
- *
- * Set options in a php.ini file.
- * This is a support script for the installer.
- *
- * $argv[1] is the path to the ini file
- * $argv[2] is the path to the option file
- */
-
-echo "Running post-installation script to configure php.ini\n";
-
-function fatal($msg)
-{
- echo $msg;
- sleep(5);
- exit(1);
-}
-
-$ini_name = $argv[1];
-$option_file = $argv[2];
-
-if (!file_exists($option_file)) {
- fatal("Option file $option_file does not exist");
-}
-
-if (!file_exists($ini_name)) {
- fatal("inifile $ini_name does not exist");
-}
-
-$options = explode("\n", file_get_contents($option_file));
-$opts = array();
-
-/* Parse the options */
-foreach ($options as $line) {
- if (strlen(trim($line)) == 0)
- continue;
-
- list($name, $value) = explode("=", $line);
-
- if ($name == "extension") {
- $pat = "/^;?extension\s*=\s*" . preg_quote($value, '/') . "/i";
- } else {
- $pat = "/^;?" . preg_quote($name, '/') . "\s*=\s*/i";
- }
-
- $opts[] = array('pat' => $pat, 'name' => $name, 'value' => $value);
-}
-
-$new_name = $ini_name . "~";
-$dest = fopen($new_name, "w");
-
-if (!$dest) {
- echo "Could not create temporary file! $new_name\n";
- flush();
- sleep(10);
- die("Cannot create temporary file!");
-}
-
-$lines = file($ini_name);
-
-foreach ($lines as $line) {
-
- foreach ($opts as $k => $optdata) {
- extract($optdata);
-
- if (preg_match($pat, $line)) {
- echo "Found $pat ; setting $name to $value\n";
- $line = "$name=$value\r\n";
- // No need to match again
- unset($opts[$k]);
- break;
- }
- }
-
- fwrite($dest, $line);
-}
-
-fclose($dest);
-
-unlink($ini_name);
-rename($new_name, $ini_name);
-
-echo "All done!\n";
-sleep(1);
-?>
diff --git a/win32/md5crypt.c b/win32/md5crypt.c
deleted file mode 100644
index 04838ee186..0000000000
--- a/win32/md5crypt.c
+++ /dev/null
@@ -1,163 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Edin Kadribasic |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-/*
- * ----------------------------------------------------------------------------
- * "THE BEER-WARE LICENSE" (Revision 42):
- * <phk@login.dknet.dk> wrote this file. As long as you retain this notice you
- * can do whatever you want with this stuff. If we meet some day, and you think
- * this stuff is worth it, you can buy me a beer in return. Poul-Henning Kamp
- * ----------------------------------------------------------------------------
- *
- * from FreeBSD: crypt.c,v 1.5 1996/10/14 08:34:02 phk Exp
- * via OpenBSD: md5crypt.c,v 1.9 1997/07/23 20:58:27 kstailey Exp
- * via NetBSD: md5crypt.c,v 1.4.2.1 2002/01/22 19:31:59 he Exp
- *
- */
-
-#include "php.h"
-#include "ext/standard/md5.h"
-#include "md5crypt.h"
-
-static unsigned char itoa64[] = /* 0 ... 63 => ascii - 64 */
- "./0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
-
-static void to64(char *, php_uint32, int);
-
-static void
-to64(char *s, php_uint32 v, int n)
-{
-
- while (--n >= 0) {
- *s++ = itoa64[v & 0x3f];
- v >>= 6;
- }
-}
-
-/*
- * MD5 password encryption.
- */
-char *
-md5_crypt(const char *pw, const char *salt)
-{
- static char passwd[120], *p;
- const char *sp, *ep;
- unsigned char final[16];
- unsigned int i, sl, pwl;
- PHP_MD5_CTX ctx, ctx1;
- php_uint32 l;
- int pl;
-
- pwl = strlen(pw);
-
- /* Refine the salt first */
- sp = salt;
-
- /* If it starts with the magic string, then skip that */
- if (strncmp(sp, MD5_MAGIC, MD5_MAGIC_LEN) == 0)
- sp += MD5_MAGIC_LEN;
-
- /* It stops at the first '$', max 8 chars */
- for (ep = sp; *ep != '\0' && *ep != '$' && ep < (sp + 8); ep++)
- continue;
-
- /* get the length of the true salt */
- sl = ep - sp;
-
- PHP_MD5Init(&ctx);
-
- /* The password first, since that is what is most unknown */
- PHP_MD5Update(&ctx, (const unsigned char *)pw, pwl);
-
- /* Then our magic string */
- PHP_MD5Update(&ctx, (const unsigned char *)MD5_MAGIC, MD5_MAGIC_LEN);
-
- /* Then the raw salt */
- PHP_MD5Update(&ctx, (const unsigned char *)sp, sl);
-
- /* Then just as many characters of the MD5(pw,salt,pw) */
- PHP_MD5Init(&ctx1);
- PHP_MD5Update(&ctx1, (const unsigned char *)pw, pwl);
- PHP_MD5Update(&ctx1, (const unsigned char *)sp, sl);
- PHP_MD5Update(&ctx1, (const unsigned char *)pw, pwl);
- PHP_MD5Final(final, &ctx1);
-
- for (pl = pwl; pl > 0; pl -= 16)
- PHP_MD5Update(&ctx, final, (unsigned int)(pl > 16 ? 16 : pl));
-
- /* Don't leave anything around in vm they could use. */
- memset(final, 0, sizeof(final));
-
- /* Then something really weird... */
- for (i = pwl; i != 0; i >>= 1)
- if ((i & 1) != 0)
- PHP_MD5Update(&ctx, final, 1);
- else
- PHP_MD5Update(&ctx, (const unsigned char *)pw, 1);
-
- /* Now make the output string */
- memcpy(passwd, MD5_MAGIC, MD5_MAGIC_LEN);
- strlcpy(passwd + MD5_MAGIC_LEN, sp, sl + 1);
- strcat(passwd, "$");
-
- PHP_MD5Final(final, &ctx);
-
- /*
- * And now, just to make sure things don't run too fast. On a 60 MHz
- * Pentium this takes 34 msec, so you would need 30 seconds to build
- * a 1000 entry dictionary...
- */
- for (i = 0; i < 1000; i++) {
- PHP_MD5Init(&ctx1);
-
- if ((i & 1) != 0)
- PHP_MD5Update(&ctx1, (const unsigned char *)pw, pwl);
- else
- PHP_MD5Update(&ctx1, final, 16);
-
- if ((i % 3) != 0)
- PHP_MD5Update(&ctx1, (const unsigned char *)sp, sl);
-
- if ((i % 7) != 0)
- PHP_MD5Update(&ctx1, (const unsigned char *)pw, pwl);
-
- if ((i & 1) != 0)
- PHP_MD5Update(&ctx1, final, 16);
- else
- PHP_MD5Update(&ctx1, (const unsigned char *)pw, pwl);
-
- PHP_MD5Final(final, &ctx1);
- }
-
- p = passwd + sl + MD5_MAGIC_LEN + 1;
-
- l = (final[ 0]<<16) | (final[ 6]<<8) | final[12]; to64(p,l,4); p += 4;
- l = (final[ 1]<<16) | (final[ 7]<<8) | final[13]; to64(p,l,4); p += 4;
- l = (final[ 2]<<16) | (final[ 8]<<8) | final[14]; to64(p,l,4); p += 4;
- l = (final[ 3]<<16) | (final[ 9]<<8) | final[15]; to64(p,l,4); p += 4;
- l = (final[ 4]<<16) | (final[10]<<8) | final[ 5]; to64(p,l,4); p += 4;
- l = final[11] ; to64(p,l,2); p += 2;
- *p = '\0';
-
- /* Don't leave anything around in vm they could use. */
- memset(final, 0, sizeof(final));
- return (passwd);
-}
-
diff --git a/win32/md5crypt.h b/win32/md5crypt.h
deleted file mode 100644
index 18fd3878b1..0000000000
--- a/win32/md5crypt.h
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Edin Kadribasic |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-#ifndef _MD5CRYPT_H_
-#define _MD5CRYPT_H_
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
-#define MD5_MAGIC "$1$"
-#define MD5_MAGIC_LEN 3
-
-char *md5_crypt(const char *pw, const char *salt);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _MD5CRYPT_H_ */ \ No newline at end of file
diff --git a/win32/param.h b/win32/param.h
deleted file mode 100644
index 3d0da1e8d3..0000000000
--- a/win32/param.h
+++ /dev/null
@@ -1,16 +0,0 @@
-
-/*****************************************************************************
- * *
- * sys/param.c *
- * *
- * Freely redistributable and modifiable. Use at your own risk. *
- * *
- * Copyright 1994 The Downhill Project *
- * *
- *****************************************************************************/
-#ifndef MAXPATHLEN
-#define MAXPATHLEN _MAX_PATH
-#endif
-#define MAXHOSTNAMELEN 64
-#define howmany(x,y) (((x)+((y)-1))/(y))
-#define roundup(x,y) ((((x)+((y)-1))/(y))*(y))
diff --git a/win32/php5.dsp b/win32/php5.dsp
deleted file mode 100644
index 0b5b9a6d6b..0000000000
--- a/win32/php5.dsp
+++ /dev/null
@@ -1,134 +0,0 @@
-# Microsoft Developer Studio Project File - Name="php5" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Console Application" 0x0103
-
-CFG=php5 - Win32 Debug
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "php5.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "php5.mak" CFG="php5 - Win32 Debug"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "php5 - Win32 Release" (based on "Win32 (x86) Console Application")
-!MESSAGE "php5 - Win32 Debug" (based on "Win32 (x86) Console Application")
-!MESSAGE "php5 - Win32 Release_inline" (based on "Win32 (x86) Console Application")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "php5 - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "..\Release"
-# PROP Intermediate_Dir "..\Release"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
-# ADD CPP /nologo /MD /W3 /GX /O2 /I ".." /I "..\main" /I "..\Zend" /I "..\regex\\" /I "..\..\bindlib_w32" /I "..\TSRM" /D "NDEBUG" /D "_CONSOLE" /D ZEND_DEBUG=0 /D "MSVC5" /D "WIN32" /D "_MBCS" /D "ZEND_WIN32" /D "PHP_WIN32" /Fr /FD /c
-# SUBTRACT CPP /YX /Yc /Yu
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
-# ADD LINK32 php5nts.lib winmm.lib wsock32.lib netapi32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /version:3.0 /subsystem:console /machine:I386 /nodefaultlib:"libc.lib" /out:"..\Release\php.exe" /libpath:"..\Release"
-
-!ELSEIF "$(CFG)" == "php5 - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "c:\php-fcgi"
-# PROP Intermediate_Dir "..\Debug"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
-# ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I ".." /I "..\main" /I "..\Zend" /I "..\regex\\" /I "..\..\bindlib_w32" /I "..\TSRM" /D "DEBUG" /D "_DEBUG" /D "_CONSOLE" /D "MSVC5" /D "PHP_WIN32" /D ZEND_DEBUG=1 /D "ZEND_WIN32" /D "WIN32" /D "_MBCS" /FR /FD /c
-# SUBTRACT CPP /YX
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /i "c:\include" /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 winmm.lib wsock32.lib netapi32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib php5nts_debug.lib /nologo /version:4.0 /subsystem:console /debug /machine:I386 /nodefaultlib:"libcd" /nodefaultlib:"libcmt" /out:"c:\php-fcgi\php.exe" /pdbtype:sept /libpath:"..\Debug"
-# SUBTRACT LINK32 /pdb:none
-
-!ELSEIF "$(CFG)" == "php5 - Win32 Release_inline"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "php5___Win32_Release_inline"
-# PROP BASE Intermediate_Dir "php5___Win32_Release_inline"
-# PROP BASE Ignore_Export_Lib 0
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "..\Release_inline"
-# PROP Intermediate_Dir "..\Release_inline"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MD /W3 /GX /O2 /I "Zend" /I "." /I "regex\\" /I "..\bindlib_w32" /D "NDEBUG" /D "MSVC5" /D "_CONSOLE" /D "WIN32" /D "_MBCS" /D ZEND_DEBUG=0 /Fr /FD /c
-# SUBTRACT BASE CPP /YX /Yc /Yu
-# ADD CPP /nologo /MD /W3 /GX /O2 /I ".." /I "..\main" /I "..\Zend" /I "..\regex\\" /I "..\..\bindlib_w32" /I "..\TSRM" /D "NDEBUG" /D "_CONSOLE" /D ZEND_DEBUG=0 /D "ZEND_WIN32_FORCE_INLINE" /D "MSVC5" /D "WIN32" /D "_MBCS" /D "ZEND_WIN32" /D "PHP_WIN32" /Fr /FD /c
-# SUBTRACT CPP /YX /Yc /Yu
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 php5nts.lib winmm.lib wsock32.lib netapi32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /version:3.0 /subsystem:console /machine:I386 /nodefaultlib:"libc.lib" /out:"Release\php.exe" /libpath:"Release"
-# ADD LINK32 php5nts.lib winmm.lib wsock32.lib netapi32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /version:3.0 /subsystem:console /machine:I386 /nodefaultlib:"libc.lib" /out:"..\Release\php.exe" /libpath:"..\Release_inline"
-
-!ENDIF
-
-# Begin Target
-
-# Name "php5 - Win32 Release"
-# Name "php5 - Win32 Debug"
-# Name "php5 - Win32 Release_inline"
-# Begin Group "Source Files"
-
-# PROP Default_Filter ".c"
-# Begin Source File
-
-SOURCE=..\sapi\cgi\cgi_main.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\sapi\cgi\getopt.c
-# End Source File
-# End Group
-# Begin Group "Header Files"
-
-# PROP Default_Filter ".h"
-# End Group
-# End Target
-# End Project
diff --git a/win32/php5.dsw b/win32/php5.dsw
deleted file mode 100644
index d6efc98ee2..0000000000
--- a/win32/php5.dsw
+++ /dev/null
@@ -1,107 +0,0 @@
-Microsoft Developer Studio Workspace File, Format Version 6.00
-# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE!
-
-###############################################################################
-
-Project: "TSRM"=..\TSRM\TSRM.dsp - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-}}}
-
-###############################################################################
-
-Project: "Zend"=..\Zend\Zend.dsp - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
- Begin Project Dependency
- Project_Dep_Name TSRM
- End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "fastcgi"=..\sapi\fastcgi\fastcgi.dsp - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
- Begin Project Dependency
- Project_Dep_Name php5dll
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name TSRM
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name Zend
- End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "php5"=.\php5.dsp - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
- Begin Project Dependency
- Project_Dep_Name php5dll
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name Zend
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name TSRM
- End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "php5dll"=.\php5dll.dsp - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
- Begin Project Dependency
- Project_Dep_Name Zend
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name libmysql
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name TSRM
- End Project Dependency
-}}}
-
-###############################################################################
-
-Global:
-
-Package=<5>
-{{{
-}}}
-
-Package=<3>
-{{{
-}}}
-
-###############################################################################
-
diff --git a/win32/php5dll.dsp b/win32/php5dll.dsp
deleted file mode 100644
index 542ce057f8..0000000000
--- a/win32/php5dll.dsp
+++ /dev/null
@@ -1,1731 +0,0 @@
-# Microsoft Developer Studio Project File - Name="php5dll" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=php5dll - Win32 Debug
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "php5dll.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "php5dll.mak" CFG="php5dll - Win32 Debug"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "php5dll - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "php5dll - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "php5dll - Win32 Release_inline" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "php5dll - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "c:\php-fcgi\"
-# PROP Intermediate_Dir "..\Debug"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "PHP5DLLTS_EXPORTS" /YX /FD /GZ /c
-# ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I ".." /I "..\main" /I "..\regex" /I "..\..\bindlib_w32" /I "..\Zend" /I "..\TSRM" /D "_DEBUG" /D "_WINDOWS" /D "_USRDLL" /D "PHP5DLLTS_EXPORTS" /D "PHP_EXPORTS" /D "LIBZEND_EXPORTS" /D "SAPI_EXPORTS" /D "TSRM_EXPORTS" /D "MSVC5" /D "PHP_WIN32" /D ZEND_DEBUG=1 /D "ZEND_WIN32" /D "WIN32" /D "_MBCS" /FR /YX /FD /GZ /c
-# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x40d /d "_DEBUG"
-# ADD RSC /l 0x40d /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 kernel32.lib user32.lib gdi32.lib wsock32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib Zend.lib resolv.lib TSRM.lib /nologo /dll /debug /machine:I386 /nodefaultlib:"libcmt" /nodefaultlib:"libc" /nodefaultlib:"libcmtd" /out:"c:\php-fcgi\php5nts_debug.dll" /pdbtype:sept /libpath:"..\TSRM\Debug" /libpath:"..\Zend\Debug" /libpath:"..\..\bindlib_w32\Debug"
-
-!ELSEIF "$(CFG)" == "php5dll - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "..\Release"
-# PROP Intermediate_Dir "..\Release"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "PHP5DLLTS_EXPORTS" /YX /FD /c
-# ADD CPP /nologo /MD /W3 /GX /O2 /I ".." /I "..\main" /I "..\Zend" /I "..\regex" /I "..\..\bindlib_w32" /I "..\TSRM" /D "NDEBUG" /D "_WINDOWS" /D "_USRDLL" /D "PHP5DLL_EXPORTS" /D "PHP_EXPORTS" /D "SAPI_EXPORTS" /D "LIBZEND_EXPORTS" /D ZEND_DEBUG=0 /D "MSVC5" /D "WIN32" /D "_MBCS" /D "ZEND_WIN32" /D "PHP_WIN32" /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x40d /d "NDEBUG"
-# ADD RSC /l 0x40d /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386
-# ADD LINK32 kernel32.lib user32.lib gdi32.lib wsock32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib Zend.lib resolv.lib tsrm.lib /nologo /dll /machine:I386 /nodefaultlib:"libc.lib" /out:"..\Release\php5nts.dll" /libpath:"..\Zend\Release" /libpath:"..\TSRM\Release_TS" /libpath:"..\..\bindlib_w32\Release"
-
-!ELSEIF "$(CFG)" == "php5dll - Win32 Release_inline"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "php5dll___Win32_Release_inline"
-# PROP BASE Intermediate_Dir "php5dll___Win32_Release_inline"
-# PROP BASE Ignore_Export_Lib 0
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "..\Release_inline"
-# PROP Intermediate_Dir "..\Release_inline"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MD /W3 /GX /O2 /I "Zend" /I "." /I "regex" /I "..\bindlib_w32" /D "NDEBUG" /D "_WINDOWS" /D "_USRDLL" /D "PHP5DLLTS_EXPORTS" /D "MSVC5" /D "PHP_EXPORTS" /D "LIBZEND_EXPORTS" /D "SAPI_EXPORTS" /D ZEND_DEBUG=0 /D "TSRM_EXPORTS" /D "WIN32" /D "_MBCS" /YX /FD /c
-# ADD CPP /nologo /MD /W3 /GX /O2 /I ".." /I "..\main" /I "..\regex" /I "..\..\bindlib_w32" /I "..\Zend" /I "..\TSRM" /D "NDEBUG" /D "_WINDOWS" /D "_USRDLL" /D "PHP5DLLTS_EXPORTS" /D "PHP_EXPORTS" /D "LIBZEND_EXPORTS" /D "SAPI_EXPORTS" /D "TSRM_EXPORTS" /D ZEND_DEBUG=0 /D "ZEND_WIN32_FORCE_INLINE" /D "MSVC5" /D "WIN32" /D "_MBCS" /D "ZEND_WIN32" /D "PHP_WIN32" /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x40d /d "NDEBUG"
-# ADD RSC /l 0x40d /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib wsock32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib Zend.lib resolv.lib /nologo /dll /machine:I386 /nodefaultlib:"libc.lib" /out:"Release/php5nts.dll" /libpath:"TSRM\Release" /libpath:"Zend\Release" /libpath:"..\bindlib_w32\Release"
-# ADD LINK32 kernel32.lib user32.lib gdi32.lib wsock32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib Zend.lib tsrm.lib resolv.lib /nologo /dll /machine:I386 /nodefaultlib:"libc.lib" /out:"..\Release\php5nts.dll" /libpath:"..\Zend\Release_inline" /libpath:"..\TSRM\Release_TS_inline" /libpath:"..\..\bindlib_w32\Release"
-
-!ENDIF
-
-# Begin Target
-
-# Name "php5dll - Win32 Debug"
-# Name "php5dll - Win32 Release"
-# Name "php5dll - Win32 Release_inline"
-# Begin Group "Core"
-
-# PROP Default_Filter ""
-# Begin Group "Source Files"
-
-# PROP Default_Filter ""
-# Begin Source File
-
-SOURCE=..\ext\standard\css.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\standard\cyr_convert.c
-# End Source File
-# Begin Source File
-
-SOURCE="..\main\fopen_wrappers.c"
-# End Source File
-# Begin Source File
-
-SOURCE=..\main\internal_functions_win32.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\main\main.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\main\mergesort.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\main\network.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\main\output.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\main\php_content_types.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\main\php_ini.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\main\php_logos.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\main\php_open_temporary_file.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\main\php_ticks.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\main\php_variables.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\standard\proc_open.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\standard\quot_print.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\main\reentrancy.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\main\rfc1867.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\main\safe_mode.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\main\SAPI.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\main\snprintf.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\main\spprintf.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\main\streams.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\main\memory_streams.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\main\user_streams.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\standard\filters.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\standard\user_filters.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\main\strlcat.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\main\strlcpy.c
-# End Source File
-# End Group
-# Begin Group "Header Files"
-
-# PROP Default_Filter ""
-# Begin Source File
-
-SOURCE=..\ext\standard\config.w32.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\standard\css.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\standard\cyr_convert.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\main\getopt.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\main\internal_functions_registry.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\main\logos.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\main\main.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\main\output.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\main\php.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\main\php3_compat.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\main\php_content_types.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\main\php_globals.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\main\php_ini.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\main\php_logos.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\main\php_open_temporary_file.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\main\php_realpath.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\main\php_ticks.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\main\php_variables.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\standard\quot_print.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\main\rfc1867.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\main\safe_mode.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\main\SAPI.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\main\snprintf.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\main\spprintf.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\main\win95nt.h
-# End Source File
-# End Group
-# End Group
-# Begin Group "Function Modules"
-
-# PROP Default_Filter ""
-# Begin Group "Source Files No. 1"
-
-# PROP Default_Filter ""
-# Begin Source File
-
-SOURCE=..\ext\standard\array.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\standard\assert.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\standard\base64.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\standard\basic_functions.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\bcmath\bcmath.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\standard\browscap.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\standard\crc32.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\standard\credits.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\standard\datetime.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\standard\dir.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\standard\dl.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\standard\dns.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\standard\exec.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\standard\file.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\standard\filestat.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\standard\flock_compat.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\standard\formatted_print.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\standard\fsock.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\standard\ftp_fopen_wrapper.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\standard\head.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\standard\html.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\standard\http_fopen_wrapper.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\standard\image.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\standard\incomplete_class.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\standard\info.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\standard\iptc.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\standard\lcg.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\standard\levenshtein.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\standard\link.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\standard\mail.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\standard\math.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\standard\md5.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\standard\metaphone.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\standard\microtime.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\session\mod_files.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\session\mod_user.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\standard\pack.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\standard\pageinfo.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\standard\parsedate.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\standard\php_fopen_wrapper.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\odbc\php_odbc.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\pcre\php_pcre.c
-
-!IF "$(CFG)" == "php5dll - Win32 Debug"
-
-# ADD CPP /D "STATIC"
-
-!ELSEIF "$(CFG)" == "php5dll - Win32 Release"
-
-!ELSEIF "$(CFG)" == "php5dll - Win32 Release_inline"
-
-!ENDIF
-
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\standard\rand.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\standard\reg.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\standard\scanf.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\session\session.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\standard\soundex.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\standard\string.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\standard\strnatcmp.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\standard\syslog.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\standard\type.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\standard\uniqid.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\standard\url.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\standard\url_scanner.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\standard\url_scanner_ex.c
-# ADD CPP /W2
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\standard\var.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\standard\var_unserializer.c
-# ADD CPP /W2
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\standard\versioning.c
-# End Source File
-# End Group
-# Begin Group "Header Files No. 1"
-
-# PROP Default_Filter ""
-# Begin Source File
-
-SOURCE=..\ext\standard\base64.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\standard\basic_functions.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\standard\datetime.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\standard\dl.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\standard\dns.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\standard\exec.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\standard\file.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\standard\flock_compat.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\standard\fsock.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\functions\global.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\standard\head.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\standard\html.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\standard\md5.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\standard\mime.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\session\mod_user.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\standard\pageinfo.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\bcmath\php_bcmath.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\standard\php_dir.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\standard\php_filestat.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\standard\php_fopen_wrappers.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\ldap\php_ldap.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\standard\php_mail.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\standard\php_metaphone.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\odbc\php_odbc.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\pcre\php_pcre.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\standard\php_string.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\standard\php_syslog.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\functions\phpdir.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\functions\phpmath.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\standard\reg.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\standard\scanf.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\standard\type.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\standard\uniqid.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\standard\url.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\standard\url_scanner.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\standard\url_scanner_ex.h
-# End Source File
-# End Group
-# Begin Group "Regular Expressions"
-
-# PROP Default_Filter ""
-# Begin Source File
-
-SOURCE=..\regex\regcomp.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\regex\regerror.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\regex\regexec.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\regex\regfree.c
-# End Source File
-# End Group
-# Begin Group "PCRE"
-
-# PROP Default_Filter ""
-# Begin Group "Source Files No. 3"
-
-# PROP Default_Filter ".c"
-# Begin Source File
-
-SOURCE=..\ext\pcre\pcrelib\chartables.c
-
-!IF "$(CFG)" == "php5dll - Win32 Debug"
-
-# ADD CPP /D "STATIC"
-
-!ELSEIF "$(CFG)" == "php5dll - Win32 Release"
-
-!ELSEIF "$(CFG)" == "php5dll - Win32 Release_inline"
-
-!ENDIF
-
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\pcre\pcrelib\get.c
-
-!IF "$(CFG)" == "php5dll - Win32 Debug"
-
-# ADD CPP /D "STATIC"
-
-!ELSEIF "$(CFG)" == "php5dll - Win32 Release"
-
-!ELSEIF "$(CFG)" == "php5dll - Win32 Release_inline"
-
-!ENDIF
-
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\pcre\pcrelib\maketables.c
-
-!IF "$(CFG)" == "php5dll - Win32 Debug"
-
-# ADD CPP /D "STATIC"
-
-!ELSEIF "$(CFG)" == "php5dll - Win32 Release"
-
-!ELSEIF "$(CFG)" == "php5dll - Win32 Release_inline"
-
-!ENDIF
-
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\pcre\pcrelib\pcre.c
-
-!IF "$(CFG)" == "php5dll - Win32 Debug"
-
-# ADD CPP /D "STATIC"
-
-!ELSEIF "$(CFG)" == "php5dll - Win32 Release"
-
-!ELSEIF "$(CFG)" == "php5dll - Win32 Release_inline"
-
-!ENDIF
-
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\pcre\pcrelib\study.c
-
-!IF "$(CFG)" == "php5dll - Win32 Debug"
-
-# ADD CPP /D "STATIC"
-
-!ELSEIF "$(CFG)" == "php5dll - Win32 Release"
-
-!ELSEIF "$(CFG)" == "php5dll - Win32 Release_inline"
-
-!ENDIF
-
-# End Source File
-# End Group
-# Begin Group "Header Files No. 3"
-
-# PROP Default_Filter ".h"
-# Begin Source File
-
-SOURCE=..\ext\pcre\pcrelib\internal.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\pcre\pcrelib\pcre.h
-# End Source File
-# End Group
-# End Group
-# Begin Group "XML"
-
-# PROP Default_Filter ""
-# Begin Group "Source Files No. 4"
-
-# PROP Default_Filter ".c"
-# Begin Source File
-
-SOURCE=..\ext\ctype\ctype.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\overload\overload.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\tokenizer\tokenizer.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\wddx\wddx.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\xml\compat.c
-
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\xml\xml.c
-# End Source File
-# End Group
-# Begin Group "Header Files No. 4"
-
-# PROP Default_Filter ".h"
-# Begin Source File
-
-SOURCE=..\ext\xml\php_xml.h
-# End Source File
-# End Group
-# End Group
-# Begin Group "FTP"
-
-# PROP Default_Filter ""
-# Begin Group "Source Files No. 6"
-
-# PROP Default_Filter ".c"
-# Begin Source File
-
-SOURCE=..\ext\ftp\ftp.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\ftp\php_ftp.c
-# End Source File
-# End Group
-# Begin Group "Header Files No. 6"
-
-# PROP Default_Filter ".h"
-# Begin Source File
-
-SOURCE=..\ext\ftp\ftp.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\ftp\php_ftp.h
-# End Source File
-# End Group
-# End Group
-# Begin Group "Calendar"
-
-# PROP Default_Filter ""
-# Begin Group "Source Files No. 7"
-
-# PROP Default_Filter ".c"
-# Begin Source File
-
-SOURCE=..\ext\calendar\cal_unix.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\calendar\calendar.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\calendar\dow.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\calendar\easter.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\calendar\french.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\calendar\gregor.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\calendar\jewish.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\calendar\julian.c
-# End Source File
-# End Group
-# Begin Group "Header Files No. 7"
-
-# PROP Default_Filter ".h"
-# Begin Source File
-
-SOURCE=..\ext\calendar\php_calendar.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\calendar\sdncal.h
-# End Source File
-# End Group
-# End Group
-# Begin Group "bcmath"
-
-# PROP Default_Filter ""
-# Begin Group "Source Files No. 8"
-
-# PROP Default_Filter ".c"
-# Begin Source File
-
-SOURCE=..\ext\bcmath\libbcmath\src\add.c
-
-!IF "$(CFG)" == "php5dll - Win32 Debug"
-
-# PROP Intermediate_Dir "ext\bcmath\libbcmath\Debug"
-# ADD CPP /I "..\ext\bcmath\libbcmath\src"
-
-!ELSEIF "$(CFG)" == "php5dll - Win32 Release"
-
-# PROP Intermediate_Dir "ext\bcmath\libbcmath\Release"
-# ADD CPP /I "..\ext\bcmath\libbcmath\src"
-
-!ELSEIF "$(CFG)" == "php5dll - Win32 Release_inline"
-
-# PROP Intermediate_Dir "..\Release_inline_bcmath"
-# ADD CPP /I "..\ext\bcmath\libbcmath\src"
-
-!ENDIF
-
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\bcmath\libbcmath\src\compare.c
-
-!IF "$(CFG)" == "php5dll - Win32 Debug"
-
-# PROP Intermediate_Dir "ext\bcmath\libbcmath\Debug"
-# ADD CPP /I "..\ext\bcmath\libbcmath\src"
-
-!ELSEIF "$(CFG)" == "php5dll - Win32 Release"
-
-# PROP Intermediate_Dir "ext\bcmath\libbcmath\Release"
-# ADD CPP /I "..\ext\bcmath\libbcmath\src"
-
-!ELSEIF "$(CFG)" == "php5dll - Win32 Release_inline"
-
-# PROP Intermediate_Dir "..\Release_inline_bcmath"
-# ADD CPP /I "..\ext\bcmath\libbcmath\src"
-
-!ENDIF
-
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\bcmath\libbcmath\src\debug.c
-
-!IF "$(CFG)" == "php5dll - Win32 Debug"
-
-# PROP Intermediate_Dir "ext\bcmath\libbcmath\Debug"
-# ADD CPP /I "..\ext\bcmath\libbcmath\src"
-
-!ELSEIF "$(CFG)" == "php5dll - Win32 Release"
-
-# PROP Intermediate_Dir "ext\bcmath\libbcmath\Release"
-# ADD CPP /I "..\ext\bcmath\libbcmath\src"
-
-!ELSEIF "$(CFG)" == "php5dll - Win32 Release_inline"
-
-# PROP Intermediate_Dir "..\Release_inline_bcmath"
-# ADD CPP /I "..\ext\bcmath\libbcmath\src"
-
-!ENDIF
-
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\bcmath\libbcmath\src\div.c
-
-!IF "$(CFG)" == "php5dll - Win32 Debug"
-
-# PROP Intermediate_Dir "ext\bcmath\libbcmath\Debug"
-# ADD CPP /I "..\ext\bcmath\libbcmath\src"
-
-!ELSEIF "$(CFG)" == "php5dll - Win32 Release"
-
-# PROP Intermediate_Dir "ext\bcmath\libbcmath\Release"
-# ADD CPP /I "..\ext\bcmath\libbcmath\src"
-
-!ELSEIF "$(CFG)" == "php5dll - Win32 Release_inline"
-
-# PROP Intermediate_Dir "..\Release_inline_bcmath"
-# ADD CPP /I "..\ext\bcmath\libbcmath\src"
-
-!ENDIF
-
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\bcmath\libbcmath\src\divmod.c
-
-!IF "$(CFG)" == "php5dll - Win32 Debug"
-
-# PROP Intermediate_Dir "ext\bcmath\libbcmath\Debug"
-# ADD CPP /I "..\ext\bcmath\libbcmath\src"
-
-!ELSEIF "$(CFG)" == "php5dll - Win32 Release"
-
-# PROP Intermediate_Dir "ext\bcmath\libbcmath\Release"
-# ADD CPP /I "..\ext\bcmath\libbcmath\src"
-
-!ELSEIF "$(CFG)" == "php5dll - Win32 Release_inline"
-
-# PROP Intermediate_Dir "..\Release_inline_bcmath"
-# ADD CPP /I "..\ext\bcmath\libbcmath\src"
-
-!ENDIF
-
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\bcmath\libbcmath\src\doaddsub.c
-
-!IF "$(CFG)" == "php5dll - Win32 Debug"
-
-# PROP Intermediate_Dir "ext\bcmath\libbcmath\Debug"
-# ADD CPP /I "..\ext\bcmath\libbcmath\src"
-
-!ELSEIF "$(CFG)" == "php5dll - Win32 Release"
-
-# PROP Intermediate_Dir "ext\bcmath\libbcmath\Release"
-# ADD CPP /I "..\ext\bcmath\libbcmath\src"
-
-!ELSEIF "$(CFG)" == "php5dll - Win32 Release_inline"
-
-# PROP Intermediate_Dir "..\Release_inline_bcmath"
-# ADD CPP /I "..\ext\bcmath\libbcmath\src"
-
-!ENDIF
-
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\bcmath\libbcmath\src\init.c
-
-!IF "$(CFG)" == "php5dll - Win32 Debug"
-
-# PROP Intermediate_Dir "ext\bcmath\libbcmath\Debug"
-# ADD CPP /I "..\ext\bcmath\libbcmath\src"
-
-!ELSEIF "$(CFG)" == "php5dll - Win32 Release"
-
-# PROP Intermediate_Dir "ext\bcmath\libbcmath\Release"
-# ADD CPP /I "..\ext\bcmath\libbcmath\src"
-
-!ELSEIF "$(CFG)" == "php5dll - Win32 Release_inline"
-
-# PROP Intermediate_Dir "..\Release_inline_bcmath"
-# ADD CPP /I "..\ext\bcmath\libbcmath\src"
-
-!ENDIF
-
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\bcmath\libbcmath\src\int2num.c
-
-!IF "$(CFG)" == "php5dll - Win32 Debug"
-
-# PROP Intermediate_Dir "ext\bcmath\libbcmath\Debug"
-# ADD CPP /I "..\ext\bcmath\libbcmath\src"
-
-!ELSEIF "$(CFG)" == "php5dll - Win32 Release"
-
-# PROP Intermediate_Dir "ext\bcmath\libbcmath\Release"
-# ADD CPP /I "..\ext\bcmath\libbcmath\src"
-
-!ELSEIF "$(CFG)" == "php5dll - Win32 Release_inline"
-
-# PROP Intermediate_Dir "..\Release_inline_bcmath"
-# ADD CPP /I "..\ext\bcmath\libbcmath\src"
-
-!ENDIF
-
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\bcmath\libbcmath\src\nearzero.c
-
-!IF "$(CFG)" == "php5dll - Win32 Debug"
-
-# PROP Intermediate_Dir "ext\bcmath\libbcmath\Debug"
-# ADD CPP /I "..\ext\bcmath\libbcmath\src"
-
-!ELSEIF "$(CFG)" == "php5dll - Win32 Release"
-
-# PROP Intermediate_Dir "ext\bcmath\libbcmath\Release"
-# ADD CPP /I "..\ext\bcmath\libbcmath\src"
-
-!ELSEIF "$(CFG)" == "php5dll - Win32 Release_inline"
-
-# PROP Intermediate_Dir "..\Release_inline_bcmath"
-# ADD CPP /I "..\ext\bcmath\libbcmath\src"
-
-!ENDIF
-
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\bcmath\libbcmath\src\neg.c
-
-!IF "$(CFG)" == "php5dll - Win32 Debug"
-
-# PROP Intermediate_Dir "ext\bcmath\libbcmath\Debug"
-# ADD CPP /I "..\ext\bcmath\libbcmath\src"
-
-!ELSEIF "$(CFG)" == "php5dll - Win32 Release"
-
-# PROP Intermediate_Dir "ext\bcmath\libbcmath\Release"
-# ADD CPP /I "..\ext\bcmath\libbcmath\src"
-
-!ELSEIF "$(CFG)" == "php5dll - Win32 Release_inline"
-
-# PROP Intermediate_Dir "..\Release_inline_bcmath"
-# ADD CPP /I "..\ext\bcmath\libbcmath\src"
-
-!ENDIF
-
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\bcmath\libbcmath\src\num2long.c
-
-!IF "$(CFG)" == "php5dll - Win32 Debug"
-
-# PROP Intermediate_Dir "ext\bcmath\libbcmath\Debug"
-# ADD CPP /I "..\ext\bcmath\libbcmath\src"
-
-!ELSEIF "$(CFG)" == "php5dll - Win32 Release"
-
-# PROP Intermediate_Dir "ext\bcmath\libbcmath\Release"
-# ADD CPP /I "..\ext\bcmath\libbcmath\src"
-
-!ELSEIF "$(CFG)" == "php5dll - Win32 Release_inline"
-
-# PROP Intermediate_Dir "..\Release_inline_bcmath"
-# ADD CPP /I "..\ext\bcmath\libbcmath\src"
-
-!ENDIF
-
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\bcmath\libbcmath\src\num2str.c
-
-!IF "$(CFG)" == "php5dll - Win32 Debug"
-
-# PROP Intermediate_Dir "ext\bcmath\libbcmath\Debug"
-# ADD CPP /I "..\ext\bcmath\libbcmath\src"
-
-!ELSEIF "$(CFG)" == "php5dll - Win32 Release"
-
-# PROP Intermediate_Dir "ext\bcmath\libbcmath\Release"
-# ADD CPP /I "..\ext\bcmath\libbcmath\src"
-
-!ELSEIF "$(CFG)" == "php5dll - Win32 Release_inline"
-
-# PROP Intermediate_Dir "..\Release_inline_bcmath"
-# ADD CPP /I "..\ext\bcmath\libbcmath\src"
-
-!ENDIF
-
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\bcmath\libbcmath\src\outofmem.c
-
-!IF "$(CFG)" == "php5dll - Win32 Debug"
-
-# PROP Intermediate_Dir "ext\bcmath\libbcmath\Debug"
-# ADD CPP /I "..\ext\bcmath\libbcmath\src"
-
-!ELSEIF "$(CFG)" == "php5dll - Win32 Release"
-
-# PROP Intermediate_Dir "ext\bcmath\libbcmath\Release"
-# ADD CPP /I "..\ext\bcmath\libbcmath\src"
-
-!ELSEIF "$(CFG)" == "php5dll - Win32 Release_inline"
-
-# PROP Intermediate_Dir "..\Release_inline_bcmath"
-# ADD CPP /I "..\ext\bcmath\libbcmath\src"
-
-!ENDIF
-
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\bcmath\libbcmath\src\output.c
-
-!IF "$(CFG)" == "php5dll - Win32 Debug"
-
-# PROP Intermediate_Dir "ext\bcmath\libbcmath\Debug"
-# ADD CPP /I "..\ext\bcmath\libbcmath\src"
-
-!ELSEIF "$(CFG)" == "php5dll - Win32 Release"
-
-# PROP Intermediate_Dir "ext\bcmath\libbcmath\Release"
-# ADD CPP /I "..\ext\bcmath\libbcmath\src"
-
-!ELSEIF "$(CFG)" == "php5dll - Win32 Release_inline"
-
-# PROP Intermediate_Dir "..\Release_inline_bcmath"
-# ADD CPP /I "..\ext\bcmath\libbcmath\src"
-
-!ENDIF
-
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\bcmath\libbcmath\src\raise.c
-
-!IF "$(CFG)" == "php5dll - Win32 Debug"
-
-# PROP Intermediate_Dir "ext\bcmath\libbcmath\Debug"
-# ADD CPP /I "..\ext\bcmath\libbcmath\src"
-
-!ELSEIF "$(CFG)" == "php5dll - Win32 Release"
-
-# PROP Intermediate_Dir "ext\bcmath\libbcmath\Release"
-# ADD CPP /I "..\ext\bcmath\libbcmath\src"
-
-!ELSEIF "$(CFG)" == "php5dll - Win32 Release_inline"
-
-# PROP Intermediate_Dir "..\Release_inline_bcmath"
-# ADD CPP /I "..\ext\bcmath\libbcmath\src"
-
-!ENDIF
-
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\bcmath\libbcmath\src\raisemod.c
-
-!IF "$(CFG)" == "php5dll - Win32 Debug"
-
-# PROP Intermediate_Dir "ext\bcmath\libbcmath\Debug"
-# ADD CPP /I "..\ext\bcmath\libbcmath\src"
-
-!ELSEIF "$(CFG)" == "php5dll - Win32 Release"
-
-# PROP Intermediate_Dir "ext\bcmath\libbcmath\Release"
-# ADD CPP /I "..\ext\bcmath\libbcmath\src"
-
-!ELSEIF "$(CFG)" == "php5dll - Win32 Release_inline"
-
-# PROP Intermediate_Dir "..\Release_inline_bcmath"
-# ADD CPP /I "..\ext\bcmath\libbcmath\src"
-
-!ENDIF
-
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\bcmath\libbcmath\src\recmul.c
-
-!IF "$(CFG)" == "php5dll - Win32 Debug"
-
-# PROP Intermediate_Dir "ext\bcmath\libbcmath\Debug"
-# ADD CPP /I "..\ext\bcmath\libbcmath\src"
-
-!ELSEIF "$(CFG)" == "php5dll - Win32 Release"
-
-# PROP Intermediate_Dir "ext\bcmath\libbcmath\Release"
-# ADD CPP /I "..\ext\bcmath\libbcmath\src"
-
-!ELSEIF "$(CFG)" == "php5dll - Win32 Release_inline"
-
-# PROP Intermediate_Dir "..\Release_inline_bcmath"
-# ADD CPP /I "..\ext\bcmath\libbcmath\src"
-
-!ENDIF
-
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\bcmath\libbcmath\src\rmzero.c
-
-!IF "$(CFG)" == "php5dll - Win32 Debug"
-
-# PROP Intermediate_Dir "ext\bcmath\libbcmath\Debug"
-# ADD CPP /I "..\ext\bcmath\libbcmath\src"
-
-!ELSEIF "$(CFG)" == "php5dll - Win32 Release"
-
-# PROP Intermediate_Dir "ext\bcmath\libbcmath\Release"
-# ADD CPP /I "..\ext\bcmath\libbcmath\src"
-
-!ELSEIF "$(CFG)" == "php5dll - Win32 Release_inline"
-
-# PROP Intermediate_Dir "..\Release_inline_bcmath"
-# ADD CPP /I "..\ext\bcmath\libbcmath\src"
-
-!ENDIF
-
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\bcmath\libbcmath\src\rt.c
-
-!IF "$(CFG)" == "php5dll - Win32 Debug"
-
-# PROP Intermediate_Dir "ext\bcmath\libbcmath\Debug"
-# ADD CPP /I "..\ext\bcmath\libbcmath\src"
-
-!ELSEIF "$(CFG)" == "php5dll - Win32 Release"
-
-# PROP Intermediate_Dir "ext\bcmath\libbcmath\Release"
-# ADD CPP /I "..\ext\bcmath\libbcmath\src"
-
-!ELSEIF "$(CFG)" == "php5dll - Win32 Release_inline"
-
-# PROP Intermediate_Dir "..\Release_inline_bcmath"
-# ADD CPP /I "..\ext\bcmath\libbcmath\src"
-
-!ENDIF
-
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\bcmath\libbcmath\src\sqrt.c
-
-!IF "$(CFG)" == "php5dll - Win32 Debug"
-
-# PROP Intermediate_Dir "ext\bcmath\libbcmath\Debug"
-# ADD CPP /I "..\ext\bcmath\libbcmath\src"
-
-!ELSEIF "$(CFG)" == "php5dll - Win32 Release"
-
-# PROP Intermediate_Dir "ext\bcmath\libbcmath\Release"
-# ADD CPP /I "..\ext\bcmath\libbcmath\src"
-
-!ELSEIF "$(CFG)" == "php5dll - Win32 Release_inline"
-
-# PROP Intermediate_Dir "..\Release_inline_bcmath"
-# ADD CPP /I "..\ext\bcmath\libbcmath\src"
-
-!ENDIF
-
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\bcmath\libbcmath\src\str2num.c
-
-!IF "$(CFG)" == "php5dll - Win32 Debug"
-
-# PROP Intermediate_Dir "ext\bcmath\libbcmath\Debug"
-# ADD CPP /I "..\ext\bcmath\libbcmath\src"
-
-!ELSEIF "$(CFG)" == "php5dll - Win32 Release"
-
-# PROP Intermediate_Dir "ext\bcmath\libbcmath\Release"
-# ADD CPP /I "..\ext\bcmath\libbcmath\src"
-
-!ELSEIF "$(CFG)" == "php5dll - Win32 Release_inline"
-
-# PROP Intermediate_Dir "..\Release_inline_bcmath"
-# ADD CPP /I "..\ext\bcmath\libbcmath\src"
-
-!ENDIF
-
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\bcmath\libbcmath\src\sub.c
-
-!IF "$(CFG)" == "php5dll - Win32 Debug"
-
-# PROP Intermediate_Dir "ext\bcmath\libbcmath\Debug"
-# ADD CPP /I "..\ext\bcmath\libbcmath\src"
-
-!ELSEIF "$(CFG)" == "php5dll - Win32 Release"
-
-# PROP Intermediate_Dir "ext\bcmath\libbcmath\Release"
-# ADD CPP /I "..\ext\bcmath\libbcmath\src"
-
-!ELSEIF "$(CFG)" == "php5dll - Win32 Release_inline"
-
-# PROP Intermediate_Dir "..\Release_inline_bcmath"
-# ADD CPP /I "..\ext\bcmath\libbcmath\src"
-
-!ENDIF
-
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\bcmath\libbcmath\src\zero.c
-
-!IF "$(CFG)" == "php5dll - Win32 Debug"
-
-# PROP Intermediate_Dir "ext\bcmath\libbcmath\Debug"
-# ADD CPP /I "..\ext\bcmath\libbcmath\src"
-
-!ELSEIF "$(CFG)" == "php5dll - Win32 Release"
-
-# PROP Intermediate_Dir "ext\bcmath\libbcmath\Release"
-# ADD CPP /I "..\ext\bcmath\libbcmath\src"
-
-!ELSEIF "$(CFG)" == "php5dll - Win32 Release_inline"
-
-# PROP Intermediate_Dir "..\Release_inline_bcmath"
-# ADD CPP /I "..\ext\bcmath\libbcmath\src"
-
-!ENDIF
-
-# End Source File
-# End Group
-# Begin Group "Header Files No. 8"
-
-# PROP Default_Filter ".h"
-# Begin Source File
-
-SOURCE=..\ext\bcmath\libbcmath\src\bcmath.h
-
-!IF "$(CFG)" == "php5dll - Win32 Debug"
-
-!ELSEIF "$(CFG)" == "php5dll - Win32 Release"
-
-!ELSEIF "$(CFG)" == "php5dll - Win32 Release_inline"
-
-# PROP Intermediate_Dir "..\Release_inline_bcmath"
-
-!ENDIF
-
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\bcmath\libbcmath\src\config.h
-
-!IF "$(CFG)" == "php5dll - Win32 Debug"
-
-!ELSEIF "$(CFG)" == "php5dll - Win32 Release"
-
-!ELSEIF "$(CFG)" == "php5dll - Win32 Release_inline"
-
-# PROP Intermediate_Dir "..\Release_inline_bcmath"
-
-!ENDIF
-
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\bcmath\libbcmath\src\private.h
-
-!IF "$(CFG)" == "php5dll - Win32 Debug"
-
-!ELSEIF "$(CFG)" == "php5dll - Win32 Release"
-
-!ELSEIF "$(CFG)" == "php5dll - Win32 Release_inline"
-
-# PROP Intermediate_Dir "..\Release_inline_bcmath"
-
-!ENDIF
-
-# End Source File
-# End Group
-# End Group
-# End Group
-# Begin Group "Win32"
-
-# PROP Default_Filter ""
-# Begin Group "Source Files No. 2"
-
-# PROP Default_Filter ""
-# Begin Source File
-
-SOURCE=..\ext\com\COM.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\com\conversion.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\win32\pwd.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\win32\readdir.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\win32\registry.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\win32\sendmail.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\win32\time.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\com\VARIANT.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\win32\wfile.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\snmp\winsnmp.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\win32\winutil.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\win32\wsyslog.c
-# End Source File
-# End Group
-# Begin Group "Header Files No. 2"
-
-# PROP Default_Filter ""
-# Begin Source File
-
-SOURCE=..\ext\com\com.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\com\conversion.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\win32\grp.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\win32\param.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\com\php_COM.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\win32\php_registry.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\com\php_VARIANT.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\com\php_versioning.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\win32\pwd.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\win32\readdir.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\win32\sendmail.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\win32\syslog.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\win32\time.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\win32\unistd.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\com\variant.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\win32\wfile.h
-# End Source File
-# End Group
-# End Group
-# Begin Group "Parsers"
-
-# PROP Default_Filter ""
-# Begin Source File
-
-SOURCE=..\ext\standard\parsedate.y
-
-!IF "$(CFG)" == "php5dll - Win32 Debug"
-
-# Begin Custom Build - Generating ext/standard/parsedate.c
-InputPath=..\ext\standard\parsedate.y
-
-"..\ext\standard\parsedate.c" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- cd ..\ext\standard
- bison --output=parsedate.c -v -d parsedate.y
-
-# End Custom Build
-
-!ELSEIF "$(CFG)" == "php5dll - Win32 Release"
-
-# Begin Custom Build - Generating ext/standard/parsedate.c
-InputPath=..\ext\standard\parsedate.y
-
-"..\ext\standard\parsedate.c" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- cd ..\ext\standard
- bison --output=parsedate.c -v -d parsedate.y
-
-# End Custom Build
-
-!ELSEIF "$(CFG)" == "php5dll - Win32 Release_inline"
-
-# Begin Custom Build - Generating ext/standard/parsedate.c
-InputPath=..\ext\standard\parsedate.y
-
-"..\ext\standard\parsedate.c" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- cd ..\ext\standard
- bison --output=parsedate.c -v -d parsedate.y
-
-# End Custom Build
-
-!ENDIF
-
-# End Source File
-# End Group
-# Begin Group "Text Files"
-
-# PROP Default_Filter ""
-# Begin Source File
-
-SOURCE=..\ChangeLog
-# End Source File
-# Begin Source File
-
-SOURCE=..\LICENSE
-# End Source File
-# End Group
-# Begin Group "Support"
-
-# PROP Default_Filter ""
-# End Target
-# End Project
diff --git a/win32/php5dllts.dsp b/win32/php5dllts.dsp
deleted file mode 100644
index 2595b454a0..0000000000
--- a/win32/php5dllts.dsp
+++ /dev/null
@@ -1,2446 +0,0 @@
-# Microsoft Developer Studio Project File - Name="php5dllts" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=php5dllts - Win32 Debug_TS
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "php5dllts.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "php5dllts.mak" CFG="php5dllts - Win32 Debug_TS"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "php5dllts - Win32 Debug_TS" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "php5dllts - Win32 Release_TS" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "php5dllts - Win32 Release_TS_inline" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "php5dllts - Win32 Release_TSDbg" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "php5dllts - Win32 Debug_TS"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug_TS"
-# PROP BASE Intermediate_Dir "Debug_TS"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "..\Debug_TS"
-# PROP Intermediate_Dir "Debug_TS"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "PHP5DLLTS_EXPORTS" /YX /FD /GZ /c
-# ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I ".." /I "..\main" /I "..\regex" /I "..\..\bindlib_w32" /I "..\..\zlib" /I "..\Zend" /I "..\TSRM" /I "..\..\libxml\include" /I "..\ext\sqlite\libsqlite\src" /D "_DEBUG" /D ZEND_DEBUG=1 /D "_WINDOWS" /D "_USRDLL" /D "PHP5DLLTS_EXPORTS" /D "PHP_EXPORTS" /D "LIBZEND_EXPORTS" /D "TSRM_EXPORTS" /D "SAPI_EXPORTS" /D "MSVC5" /D "ZTS" /D "ZEND_WIN32" /D "PHP_WIN32" /D "WIN32" /D "_MBCS" /D "LIBXML_THREAD_ENABLED" /D "LIBXML_STATIC" /FR /YX /FD /GZ /c
-# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x40d /d "_DEBUG"
-# ADD RSC /l 0x40d /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 kernel32.lib user32.lib gdi32.lib ws2_32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ZendTS.lib TSRM.lib resolv.lib zlib.lib libxml2_a.lib Urlmon.lib libsqlite.lib iconv_a.lib /nologo /version:4.0 /dll /debug /machine:I386 /nodefaultlib:"libcmt" /nodefaultlib:"msvcrt" /out:"..\Debug_TS\php5ts_debug.dll" /pdbtype:sept /libpath:"..\TSRM\Debug_TS" /libpath:"..\Zend\Debug_TS" /libpath:"..\..\bindlib_w32\Debug" /libpath:"Debug_TS" /libpath:"..\..\zlib\Debug" /libpath:"..\..\libxml\lib\Debug" /libpath:"..\ext\sqlite\Debug_TS" /libpath:"..\..\libiconv\lib"
-
-!ELSEIF "$(CFG)" == "php5dllts - Win32 Release_TS"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release_TS"
-# PROP BASE Intermediate_Dir "Release_TS"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "..\Release_TS"
-# PROP Intermediate_Dir "Release_TS"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "PHP5DLLTS_EXPORTS" /YX /FD /c
-# ADD CPP /nologo /MD /W3 /GX /O2 /I ".." /I "..\main" /I "..\regex" /I "..\..\bindlib_w32" /I "..\..\zlib" /I "..\Zend" /I "..\TSRM" /I "..\..\libxml\include" /I "..\ext\sqlite\libsqlite\src" /D "NDEBUG" /D ZEND_DEBUG=0 /D "_WINDOWS" /D "_USRDLL" /D "PHP5DLLTS_EXPORTS" /D "PHP_EXPORTS" /D "LIBZEND_EXPORTS" /D "TSRM_EXPORTS" /D "SAPI_EXPORTS" /D "MSVC5" /D "ZTS" /D "ZEND_WIN32" /D "PHP_WIN32" /D "WIN32" /D "_MBCS" /D "LIBXML_STATIC" /FR /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x40d /d "NDEBUG"
-# ADD RSC /l 0x40d /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386
-# ADD LINK32 kernel32.lib user32.lib gdi32.lib ws2_32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ZendTS.lib TSRM.lib resolv.lib zlib.lib libxml2_a.lib Urlmon.lib libsqlite.lib iconv_a.lib /nologo /version:4.0 /dll /machine:I386 /nodefaultlib:"libcmt" /out:"..\Release_TS\php5ts.dll" /libpath:"..\TSRM\Release_TS" /libpath:"..\Zend\Release_TS" /libpath:"Release_TS" /libpath:"..\ext\sqlite\Release_TS" /libpath:"..\..\bindlib_w32\Release" /libpath:"..\..\zlib\Release" /libpath:"..\..\libxml\lib\Release" /libpath:"..\..\libiconv\lib"
-
-!ELSEIF "$(CFG)" == "php5dllts - Win32 Release_TS_inline"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "php5dllts___Win32_Release_TS_inline"
-# PROP BASE Intermediate_Dir "php5dllts___Win32_Release_TS_inline"
-# PROP BASE Ignore_Export_Lib 0
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "..\Release_TS_inline"
-# PROP Intermediate_Dir "Release_TS_inline"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MD /W3 /GX /O2 /I "." /I "regex" /I "..\bindlib_w32" /I "Zend" /I "tsrm" /D "NDEBUG" /D "_WINDOWS" /D "_USRDLL" /D "PHP5DLLTS_EXPORTS" /D "MSVC5" /D "PHP_EXPORTS" /D "LIBZEND_EXPORTS" /D "TSRM_EXPORTS" /D "SAPI_EXPORTS" /D "ZTS" /D "WIN32" /D "_MBCS" /D ZEND_DEBUG=0 /FR /YX /FD /c
-# ADD CPP /nologo /MD /W3 /GX /O2 /I ".." /I "..\main" /I "..\regex" /I "..\..\bindlib_w32" /I "..\..\zlib" /I "..\Zend" /I "..\TSRM" /I "..\..\libxml\include" /I "..\ext\sqlite\libsqlite\src" /D "NDEBUG" /D ZEND_DEBUG=0 /D "ZEND_WIN32_FORCE_INLINE" /D "_WINDOWS" /D "_USRDLL" /D "PHP5DLLTS_EXPORTS" /D "PHP_EXPORTS" /D "LIBZEND_EXPORTS" /D "TSRM_EXPORTS" /D "SAPI_EXPORTS" /D "MSVC5" /D "ZTS" /D "ZEND_WIN32" /D "PHP_WIN32" /D "WIN32" /D "_MBCS" /D "LIBXML_THREAD_ENABLED" /D "LIBXML_STATIC" /FR /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x40d /d "NDEBUG"
-# ADD RSC /l 0x40d /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib wsock32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ZendTS.lib TSRM.lib resolv.lib /nologo /dll /machine:I386 /nodefaultlib:"libc.lib" /nodefaultlib:"libcmt.lib" /out:"Release_TS/php5ts.dll" /libpath:"TSRM\Release_TS" /libpath:"Zend\Release_TS" /libpath:"..\bindlib_w32\Release"
-# ADD LINK32 kernel32.lib user32.lib gdi32.lib ws2_32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ZendTS.lib TSRM.lib resolv.lib zlib.lib libxml2_a.lib Urlmon.lib libsqlite.lib iconv_a.lib /nologo /version:4.0 /dll /machine:I386 /nodefaultlib:"libcmt" /out:"..\Release_TS_inline\php5ts.dll" /libpath:"..\TSRM\Release_TS_inline" /libpath:"..\Zend\Release_TS_inline" /libpath:"Release_TS_Inline" /libpath:"..\..\bindlib_w32\Release" /libpath:"..\..\zlib\Release" /libpath:"..\..\libxml\lib\Release" /libpath:"..\..\libiconv\lib" /libpath:"..\ext\sqlite\Release_TS"
-
-!ELSEIF "$(CFG)" == "php5dllts - Win32 Release_TSDbg"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "php5dllts___Win32_Release_TSDbg"
-# PROP BASE Intermediate_Dir "php5dllts___Win32_Release_TSDbg"
-# PROP BASE Ignore_Export_Lib 0
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "..\Release_TSDbg"
-# PROP Intermediate_Dir "Release_TSDbg"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MD /W3 /GX /O2 /I ".." /I "..\main" /I "..\regex" /I "..\..\bindlib_w32" /I "..\Zend" /I "..\TSRM" /D "NDEBUG" /D ZEND_DEBUG=0 /D "_WINDOWS" /D "_USRDLL" /D "PHP5DLLTS_EXPORTS" /D "PHP_EXPORTS" /D "LIBZEND_EXPORTS" /D "TSRM_EXPORTS" /D "SAPI_EXPORTS" /D "MSVC5" /D "ZTS" /D "ZEND_WIN32" /D "PHP_WIN32" /D "WIN32" /D "_MBCS" /FR /YX /FD /c
-# ADD CPP /nologo /MD /W3 /GX /Zi /Od /I ".." /I "..\main" /I "..\regex" /I "..\..\bindlib_w32" /I "..\..\zlib" /I "..\Zend" /I "..\TSRM" /I "..\..\libxml\include" /I "..\ext\sqlite\libsqlite\src" /D "NDEBUG" /D ZEND_DEBUG=0 /D "_WINDOWS" /D "_USRDLL" /D "PHP5DLLTS_EXPORTS" /D "PHP_EXPORTS" /D "LIBZEND_EXPORTS" /D "TSRM_EXPORTS" /D "SAPI_EXPORTS" /D "MSVC5" /D "ZTS" /D "ZEND_WIN32" /D "PHP_WIN32" /D "WIN32" /D "_MBCS" /D "LIBXML_THREAD_ENABLED" /D "LIBXML_STATIC" /FR /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x40d /d "NDEBUG"
-# ADD RSC /l 0x40d /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib wsock32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ZendTS.lib TSRM.lib resolv.lib /nologo /version:4.0 /dll /machine:I386 /nodefaultlib:"libc.lib" /nodefaultlib:"libcmt.lib" /out:"..\Release_TS\php5ts.dll" /libpath:"..\TSRM\Release_TS" /libpath:"..\Zend\Release_TS" /libpath:"..\..\bindlib_w32\Release" /libpath:"Release_TS"
-# ADD LINK32 kernel32.lib user32.lib gdi32.lib ws2_32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ZendTS.lib TSRM.lib resolv.lib zlib.lib libxml2_a.lib Urlmon.lib libsqlite.lib iconv_a.lib /nologo /version:4.0 /dll /debug /machine:I386 /nodefaultlib:"libcmt" /out:"..\Release_TSDbg\php5ts.dll" /libpath:"..\TSRM\Release_TSDbg" /libpath:"..\Zend\Release_TSDbg" /libpath:"Release_TSDbg" /libpath:"..\ext\sqlite\Release_TSDbg" /libpath:"..\..\bindlib_w32\Release" /libpath:"..\..\zlib\Release" /libpath:"..\..\libxml\lib\Release" /libpath:"..\..\libiconv\lib"
-
-!ENDIF
-
-# Begin Target
-
-# Name "php5dllts - Win32 Debug_TS"
-# Name "php5dllts - Win32 Release_TS"
-# Name "php5dllts - Win32 Release_TS_inline"
-# Name "php5dllts - Win32 Release_TSDbg"
-# Begin Group "Core"
-
-# PROP Default_Filter ""
-# Begin Group "Source Files"
-
-# PROP Default_Filter ""
-# Begin Source File
-
-SOURCE=..\ext\standard\css.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\standard\cyr_convert.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\standard\filters.c
-# End Source File
-# Begin Source File
-
-SOURCE="..\main\fopen_wrappers.c"
-# End Source File
-# Begin Source File
-
-SOURCE=.\globals.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\main\internal_functions_win32.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\main\main.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\main\mergesort.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\main\network.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\main\output.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\main\php_content_types.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\main\php_ini.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\main\php_logos.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\main\php_open_temporary_file.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\main\php_scandir.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\main\php_ticks.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\main\php_variables.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\standard\proc_open.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\standard\quot_print.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\main\reentrancy.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\main\rfc1867.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\main\safe_mode.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\main\SAPI.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\main\snprintf.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\main\spprintf.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\main\strlcat.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\main\strlcpy.c
-# End Source File
-# End Group
-# Begin Group "Header Files"
-
-# PROP Default_Filter ""
-# Begin Source File
-
-SOURCE=..\main\config.w32.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\standard\css.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\standard\cyr_convert.h
-# End Source File
-# Begin Source File
-
-SOURCE="..\main\fopen_wrappers.h"
-# End Source File
-# Begin Source File
-
-SOURCE=..\main\getopt.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\main\internal_functions_registry.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\main\logos.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\main\output.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\main\php.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\main\php3_compat.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\main\php_compat.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\main\php_content_types.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\main\php_globals.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\main\php_ini.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\main\php_logos.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\main\php_main.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\main\php_open_temporary_file.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\main\php_output.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\main\php_regex.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\main\php_scandir.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\main\php_streams.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\main\php_variables.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\standard\quot_print.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\main\rfc1867.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\main\safe_mode.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\main\SAPI.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\main\snprintf.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\main\spprintf.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\main\win95nt.h
-# End Source File
-# End Group
-# End Group
-# Begin Group "Function Modules"
-
-# PROP Default_Filter ""
-# Begin Group "PCRE"
-
-# PROP Default_Filter ""
-# Begin Group "Source Files No. 3"
-
-# PROP Default_Filter ".c"
-# Begin Source File
-
-SOURCE=..\ext\pcre\pcrelib\chartables.c
-# ADD CPP /D "STATIC" /D "SUPPORT_UTF8"
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\pcre\pcrelib\get.c
-# ADD CPP /D "STATIC" /D "SUPPORT_UTF8" /D LINK_SIZE=2
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\pcre\pcrelib\maketables.c
-# ADD CPP /D "STATIC" /D "SUPPORT_UTF8" /D LINK_SIZE=2
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\pcre\pcrelib\pcre.c
-# ADD CPP /D "STATIC" /D "SUPPORT_UTF8" /D LINK_SIZE=2
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\pcre\pcrelib\study.c
-# ADD CPP /D "STATIC" /D "SUPPORT_UTF8" /D LINK_SIZE=2
-# End Source File
-# End Group
-# Begin Group "Header Files No. 3"
-
-# PROP Default_Filter ".h"
-# Begin Source File
-
-SOURCE=..\ext\pcre\pcrelib\internal.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\pcre\pcrelib\pcre.h
-# End Source File
-# End Group
-# End Group
-# Begin Group "DOM"
-
-# PROP Default_Filter ""
-# Begin Group "DOM Source Files"
-
-# PROP Default_Filter ".c"
-# Begin Source File
-
-SOURCE=..\ext\dom\attr.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\dom\cdatasection.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\dom\characterdata.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\dom\comment.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\dom\document.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\dom\documentfragment.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\dom\documenttype.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\dom\dom_iterators.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\dom\domconfiguration.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\dom\domerror.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\dom\domerrorhandler.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\dom\domexception.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\dom\domimplementation.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\dom\domimplementationlist.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\dom\domimplementationsource.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\dom\domlocator.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\dom\domstringlist.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\dom\element.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\dom\entity.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\dom\entityreference.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\dom\namednodemap.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\dom\namelist.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\dom\node.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\dom\nodelist.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\dom\notation.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\dom\php_dom.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\dom\processinginstruction.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\dom\string_extend.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\dom\text.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\dom\typeinfo.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\dom\userdatahandler.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\dom\xpath.c
-# End Source File
-# End Group
-# Begin Group "DOM Header Files"
-
-# PROP Default_Filter ".h"
-# Begin Source File
-
-SOURCE=..\ext\dom\dom_ce.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\dom\dom_fe.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\dom\dom_properties.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\dom\php_dom.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\dom\xml_common.h
-# End Source File
-# End Group
-# Begin Group "Resource Files"
-
-# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
-# End Group
-# End Group
-# Begin Group "SimpleXML"
-
-# PROP Default_Filter ""
-# Begin Group "SimpleXML Source Files"
-
-# PROP Default_Filter ".c"
-# Begin Source File
-
-SOURCE=..\ext\simplexml\simplexml.c
-# End Source File
-# End Group
-# Begin Group "SimpleXML Header Files"
-
-# PROP Default_Filter ".h"
-# Begin Source File
-
-SOURCE=..\ext\simplexml\php_simplexml.h
-# End Source File
-# End Group
-# Begin Group "Resource Files No. 1"
-
-# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
-# End Group
-# End Group
-# Begin Group "Regular Expressions"
-
-# PROP Default_Filter ""
-# Begin Source File
-
-SOURCE=..\regex\regcomp.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\regex\regerror.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\regex\regexec.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\regex\regfree.c
-# End Source File
-# End Group
-# Begin Group "XML"
-
-# PROP Default_Filter ""
-# Begin Group "Source Files No. 4"
-
-# PROP Default_Filter ".c"
-# Begin Source File
-
-SOURCE=..\ext\xml\compat.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\ctype\ctype.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\tokenizer\tokenizer.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\wddx\wddx.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\xml\xml.c
-# End Source File
-# End Group
-# Begin Group "Header Files No. 4"
-
-# PROP Default_Filter ".h"
-# Begin Source File
-
-SOURCE=..\ext\wddx\php_wddx.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\wddx\php_wddx_api.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\xml\php_xml.h
-# End Source File
-# End Group
-# End Group
-# Begin Group "FTP"
-
-# PROP Default_Filter ""
-# Begin Group "Source Files No. 6"
-
-# PROP Default_Filter ".c"
-# Begin Source File
-
-SOURCE=..\ext\ftp\ftp.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\ftp\php_ftp.c
-# End Source File
-# End Group
-# Begin Group "Header Files No. 6"
-
-# PROP Default_Filter ".h"
-# Begin Source File
-
-SOURCE=..\ext\ftp\ftp.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\ftp\php_ftp.h
-# End Source File
-# End Group
-# End Group
-# Begin Group "Calendar"
-
-# PROP Default_Filter ""
-# Begin Group "Source Files No. 7"
-
-# PROP Default_Filter ".c"
-# Begin Source File
-
-SOURCE=..\ext\calendar\cal_unix.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\calendar\calendar.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\calendar\dow.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\calendar\easter.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\calendar\french.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\calendar\gregor.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\calendar\jewish.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\calendar\julian.c
-# End Source File
-# End Group
-# Begin Group "Header Files No. 7"
-
-# PROP Default_Filter ".h"
-# Begin Source File
-
-SOURCE=..\ext\calendar\php_calendar.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\calendar\sdncal.h
-# End Source File
-# End Group
-# End Group
-# Begin Group "bcmath"
-
-# PROP Default_Filter ""
-# Begin Group "Source Files No. 8"
-
-# PROP Default_Filter ".c"
-# Begin Source File
-
-SOURCE=..\ext\bcmath\libbcmath\src\add.c
-
-!IF "$(CFG)" == "php5dllts - Win32 Debug_TS"
-
-# PROP Intermediate_Dir "ext\bcmath\libbcmath\Debug_TS"
-# ADD CPP /I "..\ext\bcmath\libbcmath\src"
-
-!ELSEIF "$(CFG)" == "php5dllts - Win32 Release_TS"
-
-# PROP Intermediate_Dir "ext\bcmath\libbcmath\Release_TS"
-# ADD CPP /I "..\ext\bcmath\libbcmath\src"
-
-!ELSEIF "$(CFG)" == "php5dllts - Win32 Release_TS_inline"
-
-# PROP Intermediate_Dir "ext\bcmath\libbcmath\Release_TS_inline"
-# ADD CPP /I "..\ext\bcmath\libbcmath\src"
-
-!ELSEIF "$(CFG)" == "php5dllts - Win32 Release_TSDbg"
-
-# PROP BASE Intermediate_Dir "ext\bcmath\libbcmath\Release_TS"
-# PROP Intermediate_Dir "ext\bcmath\libbcmath\Release_TS"
-# ADD BASE CPP /I "..\ext\bcmath\libbcmath\src"
-# ADD CPP /I "..\ext\bcmath\libbcmath\src"
-
-!ENDIF
-
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\bcmath\libbcmath\src\compare.c
-
-!IF "$(CFG)" == "php5dllts - Win32 Debug_TS"
-
-# PROP Intermediate_Dir "ext\bcmath\libbcmath\Debug_TS"
-# ADD CPP /I "..\ext\bcmath\libbcmath\src"
-
-!ELSEIF "$(CFG)" == "php5dllts - Win32 Release_TS"
-
-# PROP Intermediate_Dir "ext\bcmath\libbcmath\Release_TS"
-# ADD CPP /I "..\ext\bcmath\libbcmath\src"
-
-!ELSEIF "$(CFG)" == "php5dllts - Win32 Release_TS_inline"
-
-# PROP Intermediate_Dir "ext\bcmath\libbcmath\Release_TS_inline"
-# ADD CPP /I "..\ext\bcmath\libbcmath\src"
-
-!ELSEIF "$(CFG)" == "php5dllts - Win32 Release_TSDbg"
-
-# PROP BASE Intermediate_Dir "ext\bcmath\libbcmath\Release_TS"
-# PROP Intermediate_Dir "ext\bcmath\libbcmath\Release_TS"
-# ADD BASE CPP /I "..\ext\bcmath\libbcmath\src"
-# ADD CPP /I "..\ext\bcmath\libbcmath\src"
-
-!ENDIF
-
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\bcmath\libbcmath\src\debug.c
-
-!IF "$(CFG)" == "php5dllts - Win32 Debug_TS"
-
-# PROP Intermediate_Dir "ext\bcmath\libbcmath\Debug_TS"
-# ADD CPP /I "..\ext\bcmath\libbcmath\src"
-
-!ELSEIF "$(CFG)" == "php5dllts - Win32 Release_TS"
-
-# PROP Intermediate_Dir "ext\bcmath\libbcmath\Release_TS"
-# ADD CPP /I "..\ext\bcmath\libbcmath\src"
-
-!ELSEIF "$(CFG)" == "php5dllts - Win32 Release_TS_inline"
-
-# PROP Intermediate_Dir "ext\bcmath\libbcmath\Release_TS_inline"
-# ADD CPP /I "..\ext\bcmath\libbcmath\src"
-
-!ELSEIF "$(CFG)" == "php5dllts - Win32 Release_TSDbg"
-
-# PROP BASE Intermediate_Dir "ext\bcmath\libbcmath\Release_TS"
-# PROP Intermediate_Dir "ext\bcmath\libbcmath\Release_TS"
-# ADD BASE CPP /I "..\ext\bcmath\libbcmath\src"
-# ADD CPP /I "..\ext\bcmath\libbcmath\src"
-
-!ENDIF
-
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\bcmath\libbcmath\src\div.c
-
-!IF "$(CFG)" == "php5dllts - Win32 Debug_TS"
-
-# PROP Intermediate_Dir "ext\bcmath\libbcmath\Debug_TS"
-# ADD CPP /I "..\ext\bcmath\libbcmath\src"
-
-!ELSEIF "$(CFG)" == "php5dllts - Win32 Release_TS"
-
-# PROP Intermediate_Dir "ext\bcmath\libbcmath\Release_TS"
-# ADD CPP /I "..\ext\bcmath\libbcmath\src"
-
-!ELSEIF "$(CFG)" == "php5dllts - Win32 Release_TS_inline"
-
-# PROP Intermediate_Dir "ext\bcmath\libbcmath\Release_TS_inline"
-# ADD CPP /I "..\ext\bcmath\libbcmath\src"
-
-!ELSEIF "$(CFG)" == "php5dllts - Win32 Release_TSDbg"
-
-# PROP BASE Intermediate_Dir "ext\bcmath\libbcmath\Release_TS"
-# PROP Intermediate_Dir "ext\bcmath\libbcmath\Release_TS"
-# ADD BASE CPP /I "..\ext\bcmath\libbcmath\src"
-# ADD CPP /I "..\ext\bcmath\libbcmath\src"
-
-!ENDIF
-
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\bcmath\libbcmath\src\divmod.c
-
-!IF "$(CFG)" == "php5dllts - Win32 Debug_TS"
-
-# PROP Intermediate_Dir "ext\bcmath\libbcmath\Debug_TS"
-# ADD CPP /I "..\ext\bcmath\libbcmath\src"
-
-!ELSEIF "$(CFG)" == "php5dllts - Win32 Release_TS"
-
-# PROP Intermediate_Dir "ext\bcmath\libbcmath\Release_TS"
-# ADD CPP /I "..\ext\bcmath\libbcmath\src"
-
-!ELSEIF "$(CFG)" == "php5dllts - Win32 Release_TS_inline"
-
-# PROP Intermediate_Dir "ext\bcmath\libbcmath\Release_TS_inline"
-# ADD CPP /I "..\ext\bcmath\libbcmath\src"
-
-!ELSEIF "$(CFG)" == "php5dllts - Win32 Release_TSDbg"
-
-# PROP BASE Intermediate_Dir "ext\bcmath\libbcmath\Release_TS"
-# PROP Intermediate_Dir "ext\bcmath\libbcmath\Release_TS"
-# ADD BASE CPP /I "..\ext\bcmath\libbcmath\src"
-# ADD CPP /I "..\ext\bcmath\libbcmath\src"
-
-!ENDIF
-
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\bcmath\libbcmath\src\doaddsub.c
-
-!IF "$(CFG)" == "php5dllts - Win32 Debug_TS"
-
-# PROP Intermediate_Dir "ext\bcmath\libbcmath\Debug_TS"
-# ADD CPP /I "..\ext\bcmath\libbcmath\src"
-
-!ELSEIF "$(CFG)" == "php5dllts - Win32 Release_TS"
-
-# PROP Intermediate_Dir "ext\bcmath\libbcmath\Release_TS"
-# ADD CPP /I "..\ext\bcmath\libbcmath\src"
-
-!ELSEIF "$(CFG)" == "php5dllts - Win32 Release_TS_inline"
-
-# PROP Intermediate_Dir "ext\bcmath\libbcmath\Release_TS_inline"
-# ADD CPP /I "..\ext\bcmath\libbcmath\src"
-
-!ELSEIF "$(CFG)" == "php5dllts - Win32 Release_TSDbg"
-
-# PROP BASE Intermediate_Dir "ext\bcmath\libbcmath\Release_TS"
-# PROP Intermediate_Dir "ext\bcmath\libbcmath\Release_TS"
-# ADD BASE CPP /I "..\ext\bcmath\libbcmath\src"
-# ADD CPP /I "..\ext\bcmath\libbcmath\src"
-
-!ENDIF
-
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\bcmath\libbcmath\src\init.c
-
-!IF "$(CFG)" == "php5dllts - Win32 Debug_TS"
-
-# PROP Intermediate_Dir "ext\bcmath\libbcmath\Debug_TS"
-# ADD CPP /I "..\ext\bcmath\libbcmath\src"
-
-!ELSEIF "$(CFG)" == "php5dllts - Win32 Release_TS"
-
-# PROP Intermediate_Dir "ext\bcmath\libbcmath\Release_TS"
-# ADD CPP /I "..\ext\bcmath\libbcmath\src"
-
-!ELSEIF "$(CFG)" == "php5dllts - Win32 Release_TS_inline"
-
-# PROP Intermediate_Dir "ext\bcmath\libbcmath\Release_TS_inline"
-# ADD CPP /I "..\ext\bcmath\libbcmath\src"
-
-!ELSEIF "$(CFG)" == "php5dllts - Win32 Release_TSDbg"
-
-# PROP BASE Intermediate_Dir "ext\bcmath\libbcmath\Release_TS"
-# PROP Intermediate_Dir "ext\bcmath\libbcmath\Release_TS"
-# ADD BASE CPP /I "..\ext\bcmath\libbcmath\src"
-# ADD CPP /I "..\ext\bcmath\libbcmath\src"
-
-!ENDIF
-
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\bcmath\libbcmath\src\int2num.c
-
-!IF "$(CFG)" == "php5dllts - Win32 Debug_TS"
-
-# PROP Intermediate_Dir "ext\bcmath\libbcmath\Debug_TS"
-# ADD CPP /I "..\ext\bcmath\libbcmath\src"
-
-!ELSEIF "$(CFG)" == "php5dllts - Win32 Release_TS"
-
-# PROP Intermediate_Dir "ext\bcmath\libbcmath\Release_TS"
-# ADD CPP /I "..\ext\bcmath\libbcmath\src"
-
-!ELSEIF "$(CFG)" == "php5dllts - Win32 Release_TS_inline"
-
-# PROP Intermediate_Dir "ext\bcmath\libbcmath\Release_TS_inline"
-# ADD CPP /I "..\ext\bcmath\libbcmath\src"
-
-!ELSEIF "$(CFG)" == "php5dllts - Win32 Release_TSDbg"
-
-# PROP BASE Intermediate_Dir "ext\bcmath\libbcmath\Release_TS"
-# PROP Intermediate_Dir "ext\bcmath\libbcmath\Release_TS"
-# ADD BASE CPP /I "..\ext\bcmath\libbcmath\src"
-# ADD CPP /I "..\ext\bcmath\libbcmath\src"
-
-!ENDIF
-
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\bcmath\libbcmath\src\nearzero.c
-
-!IF "$(CFG)" == "php5dllts - Win32 Debug_TS"
-
-# PROP Intermediate_Dir "ext\bcmath\libbcmath\Debug_TS"
-# ADD CPP /I "..\ext\bcmath\libbcmath\src"
-
-!ELSEIF "$(CFG)" == "php5dllts - Win32 Release_TS"
-
-# PROP Intermediate_Dir "ext\bcmath\libbcmath\Release_TS"
-# ADD CPP /I "..\ext\bcmath\libbcmath\src"
-
-!ELSEIF "$(CFG)" == "php5dllts - Win32 Release_TS_inline"
-
-# PROP Intermediate_Dir "ext\bcmath\libbcmath\Release_TS_inline"
-# ADD CPP /I "..\ext\bcmath\libbcmath\src"
-
-!ELSEIF "$(CFG)" == "php5dllts - Win32 Release_TSDbg"
-
-# PROP BASE Intermediate_Dir "ext\bcmath\libbcmath\Release_TS"
-# PROP Intermediate_Dir "ext\bcmath\libbcmath\Release_TS"
-# ADD BASE CPP /I "..\ext\bcmath\libbcmath\src"
-# ADD CPP /I "..\ext\bcmath\libbcmath\src"
-
-!ENDIF
-
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\bcmath\libbcmath\src\neg.c
-
-!IF "$(CFG)" == "php5dllts - Win32 Debug_TS"
-
-# PROP Intermediate_Dir "ext\bcmath\libbcmath\Debug_TS"
-# ADD CPP /I "..\ext\bcmath\libbcmath\src"
-
-!ELSEIF "$(CFG)" == "php5dllts - Win32 Release_TS"
-
-# PROP Intermediate_Dir "ext\bcmath\libbcmath\Release_TS"
-# ADD CPP /I "..\ext\bcmath\libbcmath\src"
-
-!ELSEIF "$(CFG)" == "php5dllts - Win32 Release_TS_inline"
-
-# PROP Intermediate_Dir "ext\bcmath\libbcmath\Release_TS_inline"
-# ADD CPP /I "..\ext\bcmath\libbcmath\src"
-
-!ELSEIF "$(CFG)" == "php5dllts - Win32 Release_TSDbg"
-
-# PROP BASE Intermediate_Dir "ext\bcmath\libbcmath\Release_TS"
-# PROP Intermediate_Dir "ext\bcmath\libbcmath\Release_TS"
-# ADD BASE CPP /I "..\ext\bcmath\libbcmath\src"
-# ADD CPP /I "..\ext\bcmath\libbcmath\src"
-
-!ENDIF
-
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\bcmath\libbcmath\src\num2long.c
-
-!IF "$(CFG)" == "php5dllts - Win32 Debug_TS"
-
-# PROP Intermediate_Dir "ext\bcmath\libbcmath\Debug_TS"
-# ADD CPP /I "..\ext\bcmath\libbcmath\src"
-
-!ELSEIF "$(CFG)" == "php5dllts - Win32 Release_TS"
-
-# PROP Intermediate_Dir "ext\bcmath\libbcmath\Release_TS"
-# ADD CPP /I "..\ext\bcmath\libbcmath\src"
-
-!ELSEIF "$(CFG)" == "php5dllts - Win32 Release_TS_inline"
-
-# PROP Intermediate_Dir "ext\bcmath\libbcmath\Release_TS_inline"
-# ADD CPP /I "..\ext\bcmath\libbcmath\src"
-
-!ELSEIF "$(CFG)" == "php5dllts - Win32 Release_TSDbg"
-
-# PROP BASE Intermediate_Dir "ext\bcmath\libbcmath\Release_TS"
-# PROP Intermediate_Dir "ext\bcmath\libbcmath\Release_TS"
-# ADD BASE CPP /I "..\ext\bcmath\libbcmath\src"
-# ADD CPP /I "..\ext\bcmath\libbcmath\src"
-
-!ENDIF
-
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\bcmath\libbcmath\src\num2str.c
-
-!IF "$(CFG)" == "php5dllts - Win32 Debug_TS"
-
-# PROP Intermediate_Dir "ext\bcmath\libbcmath\Debug_TS"
-# ADD CPP /I "..\ext\bcmath\libbcmath\src"
-
-!ELSEIF "$(CFG)" == "php5dllts - Win32 Release_TS"
-
-# PROP Intermediate_Dir "ext\bcmath\libbcmath\Release_TS"
-# ADD CPP /I "..\ext\bcmath\libbcmath\src"
-
-!ELSEIF "$(CFG)" == "php5dllts - Win32 Release_TS_inline"
-
-# PROP Intermediate_Dir "ext\bcmath\libbcmath\Release_TS_inline"
-# ADD CPP /I "..\ext\bcmath\libbcmath\src"
-
-!ELSEIF "$(CFG)" == "php5dllts - Win32 Release_TSDbg"
-
-# PROP BASE Intermediate_Dir "ext\bcmath\libbcmath\Release_TS"
-# PROP Intermediate_Dir "ext\bcmath\libbcmath\Release_TS"
-# ADD BASE CPP /I "..\ext\bcmath\libbcmath\src"
-# ADD CPP /I "..\ext\bcmath\libbcmath\src"
-
-!ENDIF
-
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\bcmath\libbcmath\src\outofmem.c
-
-!IF "$(CFG)" == "php5dllts - Win32 Debug_TS"
-
-# PROP Intermediate_Dir "ext\bcmath\libbcmath\Debug_TS"
-# ADD CPP /I "..\ext\bcmath\libbcmath\src"
-
-!ELSEIF "$(CFG)" == "php5dllts - Win32 Release_TS"
-
-# PROP Intermediate_Dir "ext\bcmath\libbcmath\Release_TS"
-# ADD CPP /I "..\ext\bcmath\libbcmath\src"
-
-!ELSEIF "$(CFG)" == "php5dllts - Win32 Release_TS_inline"
-
-# PROP Intermediate_Dir "ext\bcmath\libbcmath\Release_TS_inline"
-# ADD CPP /I "..\ext\bcmath\libbcmath\src"
-
-!ELSEIF "$(CFG)" == "php5dllts - Win32 Release_TSDbg"
-
-# PROP BASE Intermediate_Dir "ext\bcmath\libbcmath\Release_TS"
-# PROP Intermediate_Dir "ext\bcmath\libbcmath\Release_TS"
-# ADD BASE CPP /I "..\ext\bcmath\libbcmath\src"
-# ADD CPP /I "..\ext\bcmath\libbcmath\src"
-
-!ENDIF
-
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\bcmath\libbcmath\src\output.c
-
-!IF "$(CFG)" == "php5dllts - Win32 Debug_TS"
-
-# PROP Intermediate_Dir "ext\bcmath\libbcmath\Debug_TS"
-# ADD CPP /I "..\ext\bcmath\libbcmath\src"
-
-!ELSEIF "$(CFG)" == "php5dllts - Win32 Release_TS"
-
-# PROP Intermediate_Dir "ext\bcmath\libbcmath\Release_TS"
-# ADD CPP /I "..\ext\bcmath\libbcmath\src"
-
-!ELSEIF "$(CFG)" == "php5dllts - Win32 Release_TS_inline"
-
-# PROP Intermediate_Dir "ext\bcmath\libbcmath\Release_TS_inline"
-# ADD CPP /I "..\ext\bcmath\libbcmath\src"
-
-!ELSEIF "$(CFG)" == "php5dllts - Win32 Release_TSDbg"
-
-# PROP BASE Intermediate_Dir "ext\bcmath\libbcmath\Release_TS"
-# PROP Intermediate_Dir "ext\bcmath\libbcmath\Release_TS"
-# ADD BASE CPP /I "..\ext\bcmath\libbcmath\src"
-# ADD CPP /I "..\ext\bcmath\libbcmath\src"
-
-!ENDIF
-
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\bcmath\libbcmath\src\raise.c
-
-!IF "$(CFG)" == "php5dllts - Win32 Debug_TS"
-
-# PROP Intermediate_Dir "ext\bcmath\libbcmath\Debug_TS"
-# ADD CPP /I "..\ext\bcmath\libbcmath\src"
-
-!ELSEIF "$(CFG)" == "php5dllts - Win32 Release_TS"
-
-# PROP Intermediate_Dir "ext\bcmath\libbcmath\Release_TS"
-# ADD CPP /I "..\ext\bcmath\libbcmath\src"
-
-!ELSEIF "$(CFG)" == "php5dllts - Win32 Release_TS_inline"
-
-# PROP Intermediate_Dir "ext\bcmath\libbcmath\Release_TS_inline"
-# ADD CPP /I "..\ext\bcmath\libbcmath\src"
-
-!ELSEIF "$(CFG)" == "php5dllts - Win32 Release_TSDbg"
-
-# PROP BASE Intermediate_Dir "ext\bcmath\libbcmath\Release_TS"
-# PROP Intermediate_Dir "ext\bcmath\libbcmath\Release_TS"
-# ADD BASE CPP /I "..\ext\bcmath\libbcmath\src"
-# ADD CPP /I "..\ext\bcmath\libbcmath\src"
-
-!ENDIF
-
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\bcmath\libbcmath\src\raisemod.c
-
-!IF "$(CFG)" == "php5dllts - Win32 Debug_TS"
-
-# PROP Intermediate_Dir "ext\bcmath\libbcmath\Debug_TS"
-# ADD CPP /I "..\ext\bcmath\libbcmath\src"
-
-!ELSEIF "$(CFG)" == "php5dllts - Win32 Release_TS"
-
-# PROP Intermediate_Dir "ext\bcmath\libbcmath\Release_TS"
-# ADD CPP /I "..\ext\bcmath\libbcmath\src"
-
-!ELSEIF "$(CFG)" == "php5dllts - Win32 Release_TS_inline"
-
-# PROP Intermediate_Dir "ext\bcmath\libbcmath\Release_TS_inline"
-# ADD CPP /I "..\ext\bcmath\libbcmath\src"
-
-!ELSEIF "$(CFG)" == "php5dllts - Win32 Release_TSDbg"
-
-# PROP BASE Intermediate_Dir "ext\bcmath\libbcmath\Release_TS"
-# PROP Intermediate_Dir "ext\bcmath\libbcmath\Release_TS"
-# ADD BASE CPP /I "..\ext\bcmath\libbcmath\src"
-# ADD CPP /I "..\ext\bcmath\libbcmath\src"
-
-!ENDIF
-
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\bcmath\libbcmath\src\recmul.c
-
-!IF "$(CFG)" == "php5dllts - Win32 Debug_TS"
-
-# PROP Intermediate_Dir "ext\bcmath\libbcmath\Debug_TS"
-# ADD CPP /I "..\ext\bcmath\libbcmath\src"
-
-!ELSEIF "$(CFG)" == "php5dllts - Win32 Release_TS"
-
-# PROP Intermediate_Dir "ext\bcmath\libbcmath\Release_TS"
-# ADD CPP /I "..\ext\bcmath\libbcmath\src"
-
-!ELSEIF "$(CFG)" == "php5dllts - Win32 Release_TS_inline"
-
-# PROP Intermediate_Dir "ext\bcmath\libbcmath\Release_TS_inline"
-# ADD CPP /I "..\ext\bcmath\libbcmath\src"
-
-!ELSEIF "$(CFG)" == "php5dllts - Win32 Release_TSDbg"
-
-# PROP BASE Intermediate_Dir "ext\bcmath\libbcmath\Release_TS"
-# PROP Intermediate_Dir "ext\bcmath\libbcmath\Release_TS"
-# ADD BASE CPP /I "..\ext\bcmath\libbcmath\src"
-# ADD CPP /I "..\ext\bcmath\libbcmath\src"
-
-!ENDIF
-
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\bcmath\libbcmath\src\rmzero.c
-
-!IF "$(CFG)" == "php5dllts - Win32 Debug_TS"
-
-# PROP Intermediate_Dir "ext\bcmath\libbcmath\Debug_TS"
-# ADD CPP /I "..\ext\bcmath\libbcmath\src"
-
-!ELSEIF "$(CFG)" == "php5dllts - Win32 Release_TS"
-
-# PROP Intermediate_Dir "ext\bcmath\libbcmath\Release_TS"
-# ADD CPP /I "..\ext\bcmath\libbcmath\src"
-
-!ELSEIF "$(CFG)" == "php5dllts - Win32 Release_TS_inline"
-
-# PROP Intermediate_Dir "ext\bcmath\libbcmath\Release_TS_inline"
-# ADD CPP /I "..\ext\bcmath\libbcmath\src"
-
-!ELSEIF "$(CFG)" == "php5dllts - Win32 Release_TSDbg"
-
-# PROP BASE Intermediate_Dir "ext\bcmath\libbcmath\Release_TS"
-# PROP Intermediate_Dir "ext\bcmath\libbcmath\Release_TS"
-# ADD BASE CPP /I "..\ext\bcmath\libbcmath\src"
-# ADD CPP /I "..\ext\bcmath\libbcmath\src"
-
-!ENDIF
-
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\bcmath\libbcmath\src\rt.c
-
-!IF "$(CFG)" == "php5dllts - Win32 Debug_TS"
-
-# PROP Intermediate_Dir "ext\bcmath\libbcmath\Debug_TS"
-# ADD CPP /I "..\ext\bcmath\libbcmath\src"
-
-!ELSEIF "$(CFG)" == "php5dllts - Win32 Release_TS"
-
-# PROP Intermediate_Dir "ext\bcmath\libbcmath\Release_TS"
-# ADD CPP /I "..\ext\bcmath\libbcmath\src"
-
-!ELSEIF "$(CFG)" == "php5dllts - Win32 Release_TS_inline"
-
-# PROP Intermediate_Dir "ext\bcmath\libbcmath\Release_TS_inline"
-# ADD CPP /I "..\ext\bcmath\libbcmath\src"
-
-!ELSEIF "$(CFG)" == "php5dllts - Win32 Release_TSDbg"
-
-# PROP BASE Intermediate_Dir "ext\bcmath\libbcmath\Release_TS"
-# PROP Intermediate_Dir "ext\bcmath\libbcmath\Release_TS"
-# ADD BASE CPP /I "..\ext\bcmath\libbcmath\src"
-# ADD CPP /I "..\ext\bcmath\libbcmath\src"
-
-!ENDIF
-
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\bcmath\libbcmath\src\sqrt.c
-
-!IF "$(CFG)" == "php5dllts - Win32 Debug_TS"
-
-# PROP Intermediate_Dir "ext\bcmath\libbcmath\Debug_TS"
-# ADD CPP /I "..\ext\bcmath\libbcmath\src"
-
-!ELSEIF "$(CFG)" == "php5dllts - Win32 Release_TS"
-
-# PROP Intermediate_Dir "ext\bcmath\libbcmath\Release_TS"
-# ADD CPP /I "..\ext\bcmath\libbcmath\src"
-
-!ELSEIF "$(CFG)" == "php5dllts - Win32 Release_TS_inline"
-
-# PROP Intermediate_Dir "ext\bcmath\libbcmath\Release_TS_inline"
-# ADD CPP /I "..\ext\bcmath\libbcmath\src"
-
-!ELSEIF "$(CFG)" == "php5dllts - Win32 Release_TSDbg"
-
-# PROP BASE Intermediate_Dir "ext\bcmath\libbcmath\Release_TS"
-# PROP Intermediate_Dir "ext\bcmath\libbcmath\Release_TS"
-# ADD BASE CPP /I "..\ext\bcmath\libbcmath\src"
-# ADD CPP /I "..\ext\bcmath\libbcmath\src"
-
-!ENDIF
-
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\bcmath\libbcmath\src\str2num.c
-
-!IF "$(CFG)" == "php5dllts - Win32 Debug_TS"
-
-# PROP Intermediate_Dir "ext\bcmath\libbcmath\Debug_TS"
-# ADD CPP /I "..\ext\bcmath\libbcmath\src"
-
-!ELSEIF "$(CFG)" == "php5dllts - Win32 Release_TS"
-
-# PROP Intermediate_Dir "ext\bcmath\libbcmath\Release_TS"
-# ADD CPP /I "..\ext\bcmath\libbcmath\src"
-
-!ELSEIF "$(CFG)" == "php5dllts - Win32 Release_TS_inline"
-
-# PROP Intermediate_Dir "ext\bcmath\libbcmath\Release_TS_inline"
-# ADD CPP /I "..\ext\bcmath\libbcmath\src"
-
-!ELSEIF "$(CFG)" == "php5dllts - Win32 Release_TSDbg"
-
-# PROP BASE Intermediate_Dir "ext\bcmath\libbcmath\Release_TS"
-# PROP Intermediate_Dir "ext\bcmath\libbcmath\Release_TS"
-# ADD BASE CPP /I "..\ext\bcmath\libbcmath\src"
-# ADD CPP /I "..\ext\bcmath\libbcmath\src"
-
-!ENDIF
-
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\bcmath\libbcmath\src\sub.c
-
-!IF "$(CFG)" == "php5dllts - Win32 Debug_TS"
-
-# PROP Intermediate_Dir "ext\bcmath\libbcmath\Debug_TS"
-# ADD CPP /I "..\ext\bcmath\libbcmath\src"
-
-!ELSEIF "$(CFG)" == "php5dllts - Win32 Release_TS"
-
-# PROP Intermediate_Dir "ext\bcmath\libbcmath\Release_TS"
-# ADD CPP /I "..\ext\bcmath\libbcmath\src"
-
-!ELSEIF "$(CFG)" == "php5dllts - Win32 Release_TS_inline"
-
-# PROP Intermediate_Dir "ext\bcmath\libbcmath\Release_TS_inline"
-# ADD CPP /I "..\ext\bcmath\libbcmath\src"
-
-!ELSEIF "$(CFG)" == "php5dllts - Win32 Release_TSDbg"
-
-# PROP BASE Intermediate_Dir "ext\bcmath\libbcmath\Release_TS"
-# PROP Intermediate_Dir "ext\bcmath\libbcmath\Release_TS"
-# ADD BASE CPP /I "..\ext\bcmath\libbcmath\src"
-# ADD CPP /I "..\ext\bcmath\libbcmath\src"
-
-!ENDIF
-
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\bcmath\libbcmath\src\zero.c
-
-!IF "$(CFG)" == "php5dllts - Win32 Debug_TS"
-
-# PROP Intermediate_Dir "ext\bcmath\libbcmath\Debug_TS"
-# ADD CPP /I "..\ext\bcmath\libbcmath\src"
-
-!ELSEIF "$(CFG)" == "php5dllts - Win32 Release_TS"
-
-# PROP Intermediate_Dir "ext\bcmath\libbcmath\Release_TS"
-# ADD CPP /I "..\ext\bcmath\libbcmath\src"
-
-!ELSEIF "$(CFG)" == "php5dllts - Win32 Release_TS_inline"
-
-# PROP Intermediate_Dir "ext\bcmath\libbcmath\Release_TS_inline"
-# ADD CPP /I "..\ext\bcmath\libbcmath\src"
-
-!ELSEIF "$(CFG)" == "php5dllts - Win32 Release_TSDbg"
-
-# PROP BASE Intermediate_Dir "ext\bcmath\libbcmath\Release_TS"
-# PROP Intermediate_Dir "ext\bcmath\libbcmath\Release_TS"
-# ADD BASE CPP /I "..\ext\bcmath\libbcmath\src"
-# ADD CPP /I "..\ext\bcmath\libbcmath\src"
-
-!ENDIF
-
-# End Source File
-# End Group
-# Begin Group "Header Files No. 8"
-
-# PROP Default_Filter ".h"
-# Begin Source File
-
-SOURCE=..\ext\bcmath\libbcmath\src\bcmath.h
-
-!IF "$(CFG)" == "php5dllts - Win32 Debug_TS"
-
-# PROP Intermediate_Dir "ext\bcmath\libbcmath\Debug_TS"
-
-!ELSEIF "$(CFG)" == "php5dllts - Win32 Release_TS"
-
-# PROP Intermediate_Dir "ext\bcmath\libbcmath\Release_TS"
-
-!ELSEIF "$(CFG)" == "php5dllts - Win32 Release_TS_inline"
-
-# PROP Intermediate_Dir "ext\bcmath\libbcmath\Release_TS_inline"
-
-!ELSEIF "$(CFG)" == "php5dllts - Win32 Release_TSDbg"
-
-# PROP BASE Intermediate_Dir "ext\bcmath\libbcmath\Release_TS"
-# PROP Intermediate_Dir "ext\bcmath\libbcmath\Release_TS"
-
-!ENDIF
-
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\bcmath\libbcmath\src\config.h
-
-!IF "$(CFG)" == "php5dllts - Win32 Debug_TS"
-
-# PROP Intermediate_Dir "ext\bcmath\libbcmath\Debug_TS"
-
-!ELSEIF "$(CFG)" == "php5dllts - Win32 Release_TS"
-
-# PROP Intermediate_Dir "ext\bcmath\libbcmath\Release_TS"
-
-!ELSEIF "$(CFG)" == "php5dllts - Win32 Release_TS_inline"
-
-# PROP Intermediate_Dir "ext\bcmath\libbcmath\Release_TS_inline"
-
-!ELSEIF "$(CFG)" == "php5dllts - Win32 Release_TSDbg"
-
-# PROP BASE Intermediate_Dir "ext\bcmath\libbcmath\Release_TS"
-# PROP Intermediate_Dir "ext\bcmath\libbcmath\Release_TS"
-
-!ENDIF
-
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\bcmath\libbcmath\src\private.h
-
-!IF "$(CFG)" == "php5dllts - Win32 Debug_TS"
-
-# PROP Intermediate_Dir "ext\bcmath\libbcmath\Debug_TS"
-
-!ELSEIF "$(CFG)" == "php5dllts - Win32 Release_TS"
-
-# PROP Intermediate_Dir "ext\bcmath\libbcmath\Release_TS"
-
-!ELSEIF "$(CFG)" == "php5dllts - Win32 Release_TS_inline"
-
-# PROP Intermediate_Dir "ext\bcmath\libbcmath\Release_TS_inline"
-
-!ELSEIF "$(CFG)" == "php5dllts - Win32 Release_TSDbg"
-
-# PROP BASE Intermediate_Dir "ext\bcmath\libbcmath\Release_TS"
-# PROP Intermediate_Dir "ext\bcmath\libbcmath\Release_TS"
-
-!ENDIF
-
-# End Source File
-# End Group
-# End Group
-# Begin Group "zlib"
-
-# PROP Default_Filter ""
-# Begin Group "Source Files No. 10 Nr. 1"
-
-# PROP Default_Filter ""
-# Begin Source File
-
-SOURCE=..\ext\zlib\zlib.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\zlib\zlib_filter.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\zlib\zlib_fopen_wrapper.c
-# End Source File
-# End Group
-# Begin Group "Header Files No. 10 Nr. 1"
-
-# PROP Default_Filter ""
-# Begin Source File
-
-SOURCE=..\ext\zlib\php_zlib.h
-# End Source File
-# End Group
-# End Group
-# Begin Group "Standard"
-
-# PROP Default_Filter ""
-# Begin Group "Source Files No. 1"
-
-# PROP Default_Filter ""
-# Begin Source File
-
-SOURCE=..\ext\standard\array.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\standard\assert.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\standard\base64.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\standard\basic_functions.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\bcmath\bcmath.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\standard\browscap.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\standard\crc32.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\standard\credits.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\standard\crypt.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\standard\datetime.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\standard\dir.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\standard\dl.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\standard\dns.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\standard\exec.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\standard\file.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\standard\filestat.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\standard\flock_compat.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\standard\formatted_print.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\standard\fsock.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\standard\ftp_fopen_wrapper.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\standard\head.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\standard\html.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\standard\http.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\standard\http_fopen_wrapper.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\standard\image.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\standard\incomplete_class.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\standard\info.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\standard\iptc.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\standard\lcg.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\standard\levenshtein.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\standard\link.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\standard\mail.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\standard\math.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\standard\md5.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\standard\metaphone.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\standard\microtime.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\session\mod_files.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\session\mod_user.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\standard\pack.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\standard\pageinfo.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\standard\parsedate.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\standard\php_fopen_wrapper.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\odbc\php_odbc.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\pcre\php_pcre.c
-# ADD CPP /D "STATIC"
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\standard\rand.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\standard\reg.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\standard\scanf.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\session\session.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\standard\sha1.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\standard\soundex.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\standard\streamsfuncs.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\standard\string.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\standard\strnatcmp.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\standard\sunfuncs.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\standard\syslog.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\standard\type.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\standard\uniqid.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\standard\url.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\standard\url_scanner.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\standard\url_scanner_ex.c
-# ADD CPP /W2
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\standard\uuencode.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\standard\var.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\standard\var_unserializer.c
-# ADD CPP /W2
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\standard\versioning.c
-# End Source File
-# End Group
-# Begin Group "Header Files No. 1"
-
-# PROP Default_Filter ""
-# Begin Source File
-
-SOURCE=..\ext\standard\base64.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\standard\basic_functions.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\standard\datetime.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\standard\dl.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\standard\dns.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\standard\exec.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\standard\file.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\standard\flock_compat.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\standard\fsock.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\functions\global.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\standard\head.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\standard\html.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\standard\info.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\standard\md5.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\session\mod_user.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\standard\pageinfo.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\standard\php_array.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\bcmath\php_bcmath.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\standard\php_crypt.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\standard\php_dir.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\standard\php_filestat.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\standard\php_fopen_wrappers.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\standard\php_http.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\standard\php_lcg.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\ldap\php_ldap.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\standard\php_mail.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\odbc\php_odbc.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\odbc\php_odbc_includes.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\pcre\php_pcre.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\standard\php_rand.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\session\php_session.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\standard\php_string.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\standard\php_sunfuncs.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\standard\php_syslog.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\functions\phpdir.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\functions\phpmath.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\standard\reg.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\standard\scanf.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\standard\sha1.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\standard\type.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\standard\uniqid.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\standard\url.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\standard\url_scanner.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\standard\url_scanner_ex.h
-# End Source File
-# End Group
-# End Group
-# Begin Group "SQLite"
-
-# PROP Default_Filter ""
-# Begin Group "Header Files No. 5"
-
-# PROP Default_Filter ""
-# Begin Source File
-
-SOURCE=..\ext\sqlite\php_sqlite.h
-# End Source File
-# End Group
-# Begin Group "Source Files No. 5"
-
-# PROP Default_Filter ""
-# Begin Source File
-
-SOURCE=..\ext\sqlite\sess_sqlite.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\sqlite\sqlite.c
-# End Source File
-# End Group
-# End Group
-# Begin Group "LIBXML"
-
-# PROP Default_Filter ""
-# Begin Group "Header Files No. 10"
-
-# PROP Default_Filter ""
-# Begin Source File
-
-SOURCE=..\ext\libxml\php_libxml.h
-# End Source File
-# End Group
-# Begin Group "Source Files No. 9"
-
-# PROP Default_Filter ""
-# Begin Source File
-
-SOURCE=..\ext\libxml\libxml.c
-# End Source File
-# End Group
-# End Group
-# End Group
-# Begin Group "Win32"
-
-# PROP Default_Filter ""
-# Begin Group "Source Files No. 2"
-
-# PROP Default_Filter ""
-# Begin Source File
-
-SOURCE=.\crypt_win32.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\glob.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\md5crypt.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\win32\pwd.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\win32\readdir.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\win32\registry.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\select.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\win32\sendmail.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\win32\time.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\win32\wfile.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\snmp\winsnmp.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\win32\winutil.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\win32\wsyslog.c
-# End Source File
-# End Group
-# Begin Group "Header Files No. 2"
-
-# PROP Default_Filter ""
-# Begin Source File
-
-SOURCE=.\crypt_win32.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\glob.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\win32\grp.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\win32\param.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\win32\php_registry.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\win32\pwd.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\win32\readdir.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\select.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\win32\sendmail.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\win32\syslog.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\win32\time.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\win32\unistd.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\win32\wfile.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\winutil.h
-# End Source File
-# End Group
-# End Group
-# Begin Group "Parsers"
-
-# PROP Default_Filter ""
-# Begin Source File
-
-SOURCE=..\ext\standard\parsedate.y
-
-!IF "$(CFG)" == "php5dllts - Win32 Debug_TS"
-
-# Begin Custom Build - Generating ext/standard/parsedate.c
-InputPath=..\ext\standard\parsedate.y
-
-"..\ext\standard\parsedate.c" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- cd ..\ext\standard
- bison --output=parsedate.c -v -d parsedate.y
-
-# End Custom Build
-
-!ELSEIF "$(CFG)" == "php5dllts - Win32 Release_TS"
-
-# Begin Custom Build - Generating ext/standard/parsedate.c
-InputPath=..\ext\standard\parsedate.y
-
-"..\ext\standard\parsedate.c" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- cd ..\ext\standard
- bison --output=parsedate.c -v -d parsedate.y
-
-# End Custom Build
-
-!ELSEIF "$(CFG)" == "php5dllts - Win32 Release_TS_inline"
-
-# Begin Custom Build - Generating ext/standard/parsedate.c
-InputPath=..\ext\standard\parsedate.y
-
-"..\ext\standard\parsedate.c" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- cd ..\ext\standard
- bison --output=parsedate.c -v -d parsedate.y
-
-# End Custom Build
-
-!ELSEIF "$(CFG)" == "php5dllts - Win32 Release_TSDbg"
-
-# Begin Custom Build - Generating ext/standard/parsedate.c
-InputPath=..\ext\standard\parsedate.y
-
-"..\ext\standard\parsedate.c" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- cd ..\ext\standard
- bison --output=parsedate.c -v -d parsedate.y
-
-# End Custom Build
-
-!ENDIF
-
-# End Source File
-# End Group
-# Begin Group "Text Files"
-
-# PROP Default_Filter ""
-# Begin Source File
-
-SOURCE=..\ChangeLog
-# End Source File
-# Begin Source File
-
-SOURCE=..\LICENSE
-# End Source File
-# Begin Source File
-
-SOURCE=..\NEWS
-# End Source File
-# Begin Source File
-
-SOURCE="..\php.ini-dist"
-# End Source File
-# Begin Source File
-
-SOURCE="..\php.ini-recommended"
-# End Source File
-# Begin Source File
-
-SOURCE="..\README.CVS-RULES"
-# End Source File
-# Begin Source File
-
-SOURCE=..\TODO
-# End Source File
-# End Group
-# Begin Group "Support"
-
-# PROP Default_Filter ""
-# End Group
-# Begin Group "Streams"
-
-# PROP Default_Filter ""
-# Begin Group "streams headers"
-
-# PROP Default_Filter ""
-# Begin Source File
-
-SOURCE=..\main\streams\php_stream_context.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\main\streams\php_stream_filter_api.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\main\streams\php_stream_mmap.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\main\streams\php_stream_plain_wrapper.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\main\streams\php_stream_transport.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\main\streams\php_stream_userspace.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\main\streams\php_streams_int.h
-# End Source File
-# End Group
-# Begin Source File
-
-SOURCE=..\main\streams\cast.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\main\streams\filter.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\main\streams\memory.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\main\streams\mmap.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\main\streams\plain_wrapper.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\main\streams\streams.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\main\streams\transports.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\standard\user_filters.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\main\streams\userspace.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\main\streams\xp_socket.c
-# End Source File
-# End Group
-# Begin Group "COM and DotNet"
-
-# PROP Default_Filter ""
-# Begin Group "Header Files No. 9"
-
-# PROP Default_Filter ""
-# Begin Source File
-
-SOURCE=..\ext\com_dotnet\com_saproxy.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\com_dotnet\com_wrapper.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\com_dotnet\php_com_dotnet.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\com_dotnet\php_com_dotnet_internal.h
-# End Source File
-# End Group
-# Begin Source File
-
-SOURCE=..\ext\com_dotnet\com_com.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\com_dotnet\com_dotnet.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\com_dotnet\com_extension.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\com_dotnet\com_handlers.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\com_dotnet\com_iterator.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\com_dotnet\com_misc.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\com_dotnet\com_olechar.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\com_dotnet\com_persist.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\com_dotnet\com_typeinfo.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\ext\com_dotnet\com_variant.c
-# End Source File
-# End Group
-# Begin Source File
-
-SOURCE=.\php5dllts.rc
-# End Source File
-# Begin Source File
-
-SOURCE=.\php5dllts.rc2
-# End Source File
-# Begin Source File
-
-SOURCE=.\phpts.def
-
-!IF "$(CFG)" == "php5dllts - Win32 Debug_TS"
-
-USERDEP__PHPTS="..\ext\sqlite\php_sqlite.def"
-# Begin Custom Build - Generating $(InputPath)
-InputPath=.\phpts.def
-
-"phpts.def" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- builddef.bat > phpts.def
-
-# End Custom Build
-
-!ELSEIF "$(CFG)" == "php5dllts - Win32 Release_TS"
-
-USERDEP__PHPTS="..\ext\sqlite\php_sqlite.def"
-# Begin Custom Build - Generating $(InputPath)
-InputPath=.\phpts.def
-
-"phpts.def" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- builddef.bat > phpts.def
-
-# End Custom Build
-
-!ELSEIF "$(CFG)" == "php5dllts - Win32 Release_TS_inline"
-
-USERDEP__PHPTS="..\ext\sqlite\php_sqlite.def"
-# Begin Custom Build - Generating $(InputPath)
-InputPath=.\phpts.def
-
-"phpts.def" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- builddef.bat > phpts.def
-
-# End Custom Build
-
-!ELSEIF "$(CFG)" == "php5dllts - Win32 Release_TSDbg"
-
-USERDEP__PHPTS="..\ext\sqlite\php_sqlite.def"
-# Begin Custom Build - Generating $(InputPath)
-InputPath=.\phpts.def
-
-"phpts.def" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- builddef.bat > phpts.def
-
-# End Custom Build
-
-!ENDIF
-
-# End Source File
-# End Target
-# End Project
diff --git a/win32/php5dllts.rc b/win32/php5dllts.rc
deleted file mode 100644
index 2e01037eee..0000000000
--- a/win32/php5dllts.rc
+++ /dev/null
@@ -1,126 +0,0 @@
-//Microsoft Developer Studio generated resource script.
-
-//
-
-#include "resource.h"
-
-
-
-#define APSTUDIO_READONLY_SYMBOLS
-
-/////////////////////////////////////////////////////////////////////////////
-
-//
-
-// Generated from the TEXTINCLUDE 2 resource.
-
-//
-
-#include "winres.h"
-
-
-
-/////////////////////////////////////////////////////////////////////////////
-
-#undef APSTUDIO_READONLY_SYMBOLS
-
-
-
-/////////////////////////////////////////////////////////////////////////////
-
-// English (U.S.) resources
-
-
-
-#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
-
-#ifdef _WIN32
-
-LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
-
-#pragma code_page(1252)
-
-#endif //_WIN32
-
-
-
-#ifdef APSTUDIO_INVOKED
-
-/////////////////////////////////////////////////////////////////////////////
-
-//
-
-// TEXTINCLUDE
-
-//
-
-
-
-1 TEXTINCLUDE DISCARDABLE
-
-BEGIN
-
- "resource.h\0"
-
-END
-
-
-
-2 TEXTINCLUDE DISCARDABLE
-
-BEGIN
-
- "#include ""php5dllts.rc2""\r\n"
-
- "\0"
-
-END
-
-
-
-3 TEXTINCLUDE DISCARDABLE
-
-BEGIN
-
- "\r\n"
-
- "\0"
-
-END
-
-
-
-#endif // APSTUDIO_INVOKED
-
-
-
-#endif // English (U.S.) resources
-
-/////////////////////////////////////////////////////////////////////////////
-
-
-
-
-
-
-
-#ifndef APSTUDIO_INVOKED
-
-/////////////////////////////////////////////////////////////////////////////
-
-//
-
-// Generated from the TEXTINCLUDE 3 resource.
-
-//
-
-#include "php5dllts.rc2"
-
-
-
-/////////////////////////////////////////////////////////////////////////////
-
-#endif // not APSTUDIO_INVOKED
-
-
-
diff --git a/win32/php5dllts.rc2 b/win32/php5dllts.rc2
deleted file mode 100644
index 7ae69e4a8c..0000000000
--- a/win32/php5dllts.rc2
+++ /dev/null
@@ -1,61 +0,0 @@
-//
-// php5dllts.RC2 - resources Microsoft Visual C++ does not edit directly
-//
-
-#ifdef APSTUDIO_INVOKED
- #error this file is not editable by Microsoft Visual C++
-#endif //APSTUDIO_INVOKED
-
-
-/////////////////////////////////////////////////////////////////////////////
-// Add manually edited resources here...
-#include "../main/php_version.h"
-
-#define XSTRVER4(maj, min, rel, build) #maj "." #min "." #rel "." #build
-#define XSTRVER3(maj, min, rel) #maj "." #min "." #rel
-#define STRVER4(maj, min, rel, build) XSTRVER4(maj, min, rel, build)
-#define STRVER3(maj, min, rel) XSTRVER3(maj, min, rel)
-
-#ifndef _MAC
-//Version
-VS_VERSION_INFO VERSIONINFO
- FILEVERSION PHP_MAJOR_VERSION,PHP_MINOR_VERSION,PHP_RELEASE_VERSION,PHP_RELEASE_VERSION
- PRODUCTVERSION PHP_MAJOR_VERSION,PHP_MINOR_VERSION,PHP_RELEASE_VERSION,0
- FILEFLAGSMASK 0x3fL
-#ifdef _DEBUG
- FILEFLAGS VS_FF_DEBUG
-#else
- FILEFLAGS 0x0L
-#endif
- FILEOS VOS__WINDOWS32
- FILETYPE VFT_DLL
- FILESUBTYPE VFT2_UNKNOWN
-BEGIN
- BLOCK "StringFileInfo"
- BEGIN
- BLOCK "040904b0"
- BEGIN
- VALUE "Comments", "\0"
- VALUE "CompanyName", "The PHP Group\0"
- VALUE "FileDescription", "PHP Script Interpreter\0"
- VALUE "FileVersion", STRVER4(PHP_MAJOR_VERSION, PHP_MINOR_VERSION, PHP_RELEASE_VERSION, PHP_RELEASE_VERSION)
- VALUE "InternalName", "php\0"
- VALUE "LegalCopyright", "Copyright © 1997-2004 The PHP Group\0"
- VALUE "LegalTrademarks", "php\0"
- VALUE "OriginalFilename", "php5ts.dll\0"
- VALUE "PrivateBuild", "\0"
- VALUE "ProductName", "PHP Thread Safe\0"
- VALUE "ProductVersion", STRVER3(PHP_MAJOR_VERSION, PHP_MINOR_VERSION, PHP_RELEASE_VERSION)
- VALUE "SpecialBuild", PHP_EXTRA_VERSION "\0"
- VALUE "URL", "http://www.php.net"
- END
- END
- BLOCK "VarFileInfo"
- BEGIN
- VALUE "Translation", 0x409, 1200
- END
-END
-
-#endif // !_MAC
-
-/////////////////////////////////////////////////////////////////////////////
diff --git a/win32/php5ts.dsp b/win32/php5ts.dsp
deleted file mode 100644
index 3922904e6d..0000000000
--- a/win32/php5ts.dsp
+++ /dev/null
@@ -1,187 +0,0 @@
-# Microsoft Developer Studio Project File - Name="php5ts" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Console Application" 0x0103
-
-CFG=php5ts - Win32 Debug_TS
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "php5ts.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "php5ts.mak" CFG="php5ts - Win32 Debug_TS"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "php5ts - Win32 Release_TS" (based on "Win32 (x86) Console Application")
-!MESSAGE "php5ts - Win32 Debug_TS" (based on "Win32 (x86) Console Application")
-!MESSAGE "php5ts - Win32 Release_TS_inline" (based on "Win32 (x86) Console Application")
-!MESSAGE "php5ts - Win32 Release_TSDbg" (based on "Win32 (x86) Console Application")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "php5ts - Win32 Release_TS"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release_TS"
-# PROP BASE Intermediate_Dir "Release_TS"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "..\Release_TS"
-# PROP Intermediate_Dir "Release_TS"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
-# ADD CPP /nologo /MD /W3 /GX /O2 /I ".." /I "..\main" /I "..\regex" /I "..\..\bindlib_w32" /I "..\Zend" /I "..\TSRM" /I "..\sapi\cgi\libfcgi\include" /D FCGI_STATIC=1 /D PHP_FASTCGI=1 /D "NDEBUG" /D ZEND_DEBUG=0 /D "_CONSOLE" /D "MSVC5" /D "ZTS" /D "ZEND_WIN32" /D "PHP_WIN32" /D "WIN32" /D "_MBCS" /Fr /FD /c
-# SUBTRACT CPP /YX /Yc /Yu
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
-# ADD LINK32 php5ts.lib winmm.lib ws2_32.lib netapi32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /version:4.0 /subsystem:console /machine:I386 /nodefaultlib:"libc.lib" /out:"..\Release_TS\php.exe" /libpath:"..\Release_TS"
-
-!ELSEIF "$(CFG)" == "php5ts - Win32 Debug_TS"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug_TS"
-# PROP BASE Intermediate_Dir "Debug_TS"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug_TS"
-# PROP Intermediate_Dir "Debug_TS"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
-# ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I ".." /I "..\main" /I "..\regex" /I "..\..\bindlib_w32" /I "..\Zend" /I "..\TSRM" /I "..\sapi\cgi\libfcgi\include" /D FCGI_STATIC=1 /D PHP_FASTCGI=1 /D "DEBUG" /D "_DEBUG" /D ZEND_DEBUG=1 /D "_CONSOLE" /D "MSVC5" /D "ZTS" /D "ZEND_WIN32" /D "PHP_WIN32" /D "WIN32" /D "_MBCS" /FR /FD /c
-# SUBTRACT CPP /YX
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /i "c:\include" /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 winmm.lib netapi32.lib ws2_32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib php5ts_debug.lib /nologo /version:4.0 /subsystem:console /debug /machine:I386 /nodefaultlib:"libcd" /nodefaultlib:"libcmt" /out:"..\Debug_TS/php.exe" /pdbtype:sept /libpath:"..\Debug_TS"
-# SUBTRACT LINK32 /pdb:none
-
-!ELSEIF "$(CFG)" == "php5ts - Win32 Release_TS_inline"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "php5ts___Win32_Release_TS_inline"
-# PROP BASE Intermediate_Dir "php5ts___Win32_Release_TS_inline"
-# PROP BASE Ignore_Export_Lib 0
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "..\Release_TS_inline"
-# PROP Intermediate_Dir "Release_TS_inline"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MD /W3 /GX /O2 /I "." /I "regex" /I "..\bindlib_w32" /I "Zend" /I "tsrm" /D "NDEBUG" /D "MSVC5" /D "_CONSOLE" /D "ZTS" /D "WIN32" /D "_MBCS" /D ZEND_DEBUG=0 /Fr /FD /c
-# SUBTRACT BASE CPP /YX /Yc /Yu
-# ADD CPP /nologo /MD /W3 /GX /O2 /I ".." /I "..\main" /I "..\regex" /I "..\..\bindlib_w32" /I "..\Zend" /I "..\TSRM" /I "..\sapi\cgi\libfcgi\include" /D FCGI_STATIC=1 /D PHP_FASTCGI=1 /D "NDEBUG" /D ZEND_DEBUG=0 /D "ZEND_WIN32_FORCE_INLINE" /D "_CONSOLE" /D "MSVC5" /D "ZTS" /D "ZEND_WIN32" /D "PHP_WIN32" /D "WIN32" /D "_MBCS" /Fr /FD /c
-# SUBTRACT CPP /YX /Yc /Yu
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 php5ts.lib winmm.lib wsock32.lib netapi32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /version:3.0 /subsystem:console /machine:I386 /nodefaultlib:"libc.lib" /out:"Release_TS\php.exe" /libpath:"Release_TS"
-# ADD LINK32 php5ts.lib winmm.lib ws2_32.lib netapi32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /version:4.0 /subsystem:console /machine:I386 /nodefaultlib:"libc.lib" /out:"..\Release_TS_inline\php.exe" /libpath:"..\Release_TS_inline"
-
-!ELSEIF "$(CFG)" == "php5ts - Win32 Release_TSDbg"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "php5ts___Win32_Release_TSDbg"
-# PROP BASE Intermediate_Dir "php5ts___Win32_Release_TSDbg"
-# PROP BASE Ignore_Export_Lib 0
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "..\Release_TSDbg"
-# PROP Intermediate_Dir "Release_TSDbg"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MD /W3 /GX /O2 /I ".." /I "..\main" /I "..\regex" /I "..\..\bindlib_w32" /I "..\Zend" /I "..\TSRM" /D "NDEBUG" /D ZEND_DEBUG=0 /D "_CONSOLE" /D "MSVC5" /D "ZTS" /D "ZEND_WIN32" /D "PHP_WIN32" /D "WIN32" /D "_MBCS" /Fr /FD /c
-# SUBTRACT BASE CPP /YX /Yc /Yu
-# ADD CPP /nologo /MD /W3 /GX /Zi /Od /I ".." /I "..\main" /I "..\regex" /I "..\..\bindlib_w32" /I "..\Zend" /I "..\TSRM" /I "..\sapi\cgi\libfcgi\include" /D FCGI_STATIC=1 /D PHP_FASTCGI=1 /D "NDEBUG" /D ZEND_DEBUG=0 /D "_CONSOLE" /D "MSVC5" /D "ZTS" /D "ZEND_WIN32" /D "PHP_WIN32" /D "WIN32" /D "_MBCS" /Fr /FD /c
-# SUBTRACT CPP /YX /Yc /Yu
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 php5ts.lib winmm.lib wsock32.lib netapi32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /version:4.0 /subsystem:console /machine:I386 /nodefaultlib:"libc.lib" /out:"..\Release_TS\php.exe" /libpath:"..\Release_TS"
-# ADD LINK32 php5ts.lib winmm.lib wsock32.lib netapi32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib Ws2_32.lib /nologo /version:4.0 /subsystem:console /debug /machine:I386 /nodefaultlib:"libc.lib" /out:"..\Release_TSDbg\php.exe" /libpath:"..\Release_TSDbg"
-
-!ENDIF
-
-# Begin Target
-
-# Name "php5ts - Win32 Release_TS"
-# Name "php5ts - Win32 Debug_TS"
-# Name "php5ts - Win32 Release_TS_inline"
-# Name "php5ts - Win32 Release_TSDbg"
-# Begin Group "Source Files"
-
-# PROP Default_Filter ".c"
-# Begin Source File
-
-SOURCE=..\sapi\cgi\cgi_main.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\sapi\cgi\getopt.c
-# End Source File
-# End Group
-# Begin Group "Header Files"
-
-# PROP Default_Filter ".h"
-# Begin Source File
-
-SOURCE=..\sapi\cgi\php_getopt.h
-# End Source File
-# End Group
-# Begin Group "libfcgi"
-
-# PROP Default_Filter ""
-# Begin Source File
-
-SOURCE=..\sapi\cgi\libfcgi\fcgiapp.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\sapi\cgi\libfcgi\os_win32.c
-# End Source File
-# End Group
-# Begin Source File
-
-SOURCE=.\php5ts.rc
-# End Source File
-# Begin Source File
-
-SOURCE=.\php5ts.rc2
-# End Source File
-# End Target
-# End Project
diff --git a/win32/php5ts.dsw b/win32/php5ts.dsw
deleted file mode 100644
index 029923a11e..0000000000
--- a/win32/php5ts.dsw
+++ /dev/null
@@ -1,242 +0,0 @@
-Microsoft Developer Studio Workspace File, Format Version 6.00
-# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE!
-
-###############################################################################
-
-Project: "EngineSelect"=.\EngineSelect.dsp - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-}}}
-
-###############################################################################
-
-Project: "TSRM"=..\TSRM\TSRM.dsp - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-}}}
-
-###############################################################################
-
-Project: "ZendTS"=..\Zend\ZendTS.dsp - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
- Begin Project Dependency
- Project_Dep_Name TSRM
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name EngineSelect
- End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "libsqlite"=..\ext\sqlite\libsqlite\src\libsqlite.dsp - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-}}}
-
-###############################################################################
-
-Project: "php5activescript"=..\SAPI\activescript\php5activescript.dsp - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
- Begin Project Dependency
- Project_Dep_Name php5dllts
- End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "php5aolserver"=..\sapi\aolserver\php5aolserver.dsp - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
- Begin Project Dependency
- Project_Dep_Name php5dllts
- End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "php5apache"=..\sapi\apache\php5apache.dsp - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
- Begin Project Dependency
- Project_Dep_Name php5dllts
- End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "php5apache2"=..\SAPI\APACHE2HANDLER\php5apache2.dsp - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
- Begin Project Dependency
- Project_Dep_Name php5dllts
- End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "php5dllts"=.\php5dllts.dsp - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
- Begin Project Dependency
- Project_Dep_Name ZendTS
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name TSRM
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name libsqlite
- End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "php5isapi"=..\sapi\isapi\php5isapi.dsp - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
- Begin Project Dependency
- Project_Dep_Name php5dllts
- End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "php5nsapi"=..\sapi\nsapi\php5nsapi.dsp - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
- Begin Project Dependency
- Project_Dep_Name php5dllts
- End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "php5pi3web"=..\sapi\pi3web\php5pi3web.dsp - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
- Begin Project Dependency
- Project_Dep_Name php5dllts
- End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "php5ts"=.\php5ts.dsp - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
- Begin Project Dependency
- Project_Dep_Name php5dllts
- End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "php5ts_cli"=.\php5ts_cli.dsp - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
- Begin Project Dependency
- Project_Dep_Name php5dllts
- End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "testsuite"=.\testsuite.dsp - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
- Begin Project Dependency
- Project_Dep_Name php5ts
- End Project Dependency
-}}}
-
-###############################################################################
-
-Global:
-
-Package=<5>
-{{{
-}}}
-
-Package=<3>
-{{{
-}}}
-
-###############################################################################
-
diff --git a/win32/php5ts.rc b/win32/php5ts.rc
deleted file mode 100644
index d9a4aa541b..0000000000
--- a/win32/php5ts.rc
+++ /dev/null
@@ -1,126 +0,0 @@
-//Microsoft Developer Studio generated resource script.
-
-//
-
-#include "resource.h"
-
-
-
-#define APSTUDIO_READONLY_SYMBOLS
-
-/////////////////////////////////////////////////////////////////////////////
-
-//
-
-// Generated from the TEXTINCLUDE 2 resource.
-
-//
-
-#include "winres.h"
-
-
-
-/////////////////////////////////////////////////////////////////////////////
-
-#undef APSTUDIO_READONLY_SYMBOLS
-
-
-
-/////////////////////////////////////////////////////////////////////////////
-
-// English (U.S.) resources
-
-
-
-#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
-
-#ifdef _WIN32
-
-LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
-
-#pragma code_page(1252)
-
-#endif //_WIN32
-
-
-
-#ifdef APSTUDIO_INVOKED
-
-/////////////////////////////////////////////////////////////////////////////
-
-//
-
-// TEXTINCLUDE
-
-//
-
-
-
-1 TEXTINCLUDE DISCARDABLE
-
-BEGIN
-
- "resource.h\0"
-
-END
-
-
-
-2 TEXTINCLUDE DISCARDABLE
-
-BEGIN
-
- "#include ""php5ts.rc2""\r\n"
-
- "\0"
-
-END
-
-
-
-3 TEXTINCLUDE DISCARDABLE
-
-BEGIN
-
- "\r\n"
-
- "\0"
-
-END
-
-
-
-#endif // APSTUDIO_INVOKED
-
-
-
-#endif // English (U.S.) resources
-
-/////////////////////////////////////////////////////////////////////////////
-
-
-
-
-
-
-
-#ifndef APSTUDIO_INVOKED
-
-/////////////////////////////////////////////////////////////////////////////
-
-//
-
-// Generated from the TEXTINCLUDE 3 resource.
-
-//
-
-#include "php5ts.rc2"
-
-
-
-/////////////////////////////////////////////////////////////////////////////
-
-#endif // not APSTUDIO_INVOKED
-
-
-
diff --git a/win32/php5ts.rc2 b/win32/php5ts.rc2
deleted file mode 100644
index a708ac5ea5..0000000000
--- a/win32/php5ts.rc2
+++ /dev/null
@@ -1,61 +0,0 @@
-//
-// php5dllts.RC2 - resources Microsoft Visual C++ does not edit directly
-//
-
-#ifdef APSTUDIO_INVOKED
- #error this file is not editable by Microsoft Visual C++
-#endif //APSTUDIO_INVOKED
-
-
-/////////////////////////////////////////////////////////////////////////////
-// Add manually edited resources here...
-#include "../main/php_version.h"
-
-#define XSTRVER4(maj, min, rel, build) #maj "." #min "." #rel "." #build
-#define XSTRVER3(maj, min, rel) #maj "." #min "." #rel
-#define STRVER4(maj, min, rel, build) XSTRVER4(maj, min, rel, build)
-#define STRVER3(maj, min, rel) XSTRVER3(maj, min, rel)
-
-#ifndef _MAC
-//Version
-VS_VERSION_INFO VERSIONINFO
- FILEVERSION PHP_MAJOR_VERSION,PHP_MINOR_VERSION,PHP_RELEASE_VERSION,PHP_RELEASE_VERSION
- PRODUCTVERSION PHP_MAJOR_VERSION,PHP_MINOR_VERSION,PHP_RELEASE_VERSION,0
- FILEFLAGSMASK 0x3fL
-#ifdef _DEBUG
- FILEFLAGS VS_FF_DEBUG
-#else
- FILEFLAGS 0x0L
-#endif
- FILEOS VOS__WINDOWS32
- FILETYPE VFT_APP
- FILESUBTYPE VFT2_UNKNOWN
-BEGIN
- BLOCK "StringFileInfo"
- BEGIN
- BLOCK "040904b0"
- BEGIN
- VALUE "Comments", "\0"
- VALUE "CompanyName", "The PHP Group\0"
- VALUE "FileDescription", "PHP Script Interpreter\0"
- VALUE "FileVersion", STRVER4(PHP_MAJOR_VERSION, PHP_MINOR_VERSION, PHP_RELEASE_VERSION, PHP_RELEASE_VERSION)
- VALUE "InternalName", "php-cgi\0"
- VALUE "LegalCopyright", "Copyright © 1997-2004 The PHP Group\0"
- VALUE "LegalTrademarks", "php\0"
- VALUE "OriginalFilename", "php.exe\0"
- VALUE "PrivateBuild", "\0"
- VALUE "ProductName", "PHP Thread Safe CGI\0"
- VALUE "ProductVersion", STRVER3(PHP_MAJOR_VERSION, PHP_MINOR_VERSION, PHP_RELEASE_VERSION)
- VALUE "SpecialBuild", PHP_EXTRA_VERSION "\0"
- VALUE "URL", "http://www.php.net"
- END
- END
- BLOCK "VarFileInfo"
- BEGIN
- VALUE "Translation", 0x409, 1200
- END
-END
-
-#endif // !_MAC
-
-/////////////////////////////////////////////////////////////////////////////
diff --git a/win32/php5ts_cli.dsp b/win32/php5ts_cli.dsp
deleted file mode 100644
index 37a4113ad4..0000000000
--- a/win32/php5ts_cli.dsp
+++ /dev/null
@@ -1,175 +0,0 @@
-# Microsoft Developer Studio Project File - Name="php5ts_cli" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Console Application" 0x0103
-
-CFG=php5ts_cli - Win32 Debug_TS
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "php5ts_cli.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "php5ts_cli.mak" CFG="php5ts_cli - Win32 Debug_TS"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "php5ts_cli - Win32 Release_TS" (based on "Win32 (x86) Console Application")
-!MESSAGE "php5ts_cli - Win32 Debug_TS" (based on "Win32 (x86) Console Application")
-!MESSAGE "php5ts_cli - Win32 Release_TS_inline" (based on "Win32 (x86) Console Application")
-!MESSAGE "php5ts_cli - Win32 Release_TSDbg" (based on "Win32 (x86) Console Application")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "php5ts_cli - Win32 Release_TS"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release_TS"
-# PROP BASE Intermediate_Dir "Release_TS"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "..\Release_TS"
-# PROP Intermediate_Dir "Release_TS"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
-# ADD CPP /nologo /MD /W3 /GX /O2 /I ".." /I "..\main" /I "..\regex" /I "..\..\bindlib_w32" /I "..\Zend" /I "..\TSRM" /D "NDEBUG" /D ZEND_DEBUG=0 /D "_CONSOLE" /D "MSVC5" /D "ZTS" /D "ZEND_WIN32" /D "PHP_WIN32" /D "WIN32" /D "_MBCS" /Fr /FD /c
-# SUBTRACT CPP /YX /Yc /Yu
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
-# ADD LINK32 php5ts.lib winmm.lib wsock32.lib netapi32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /version:4.0 /subsystem:console /machine:I386 /nodefaultlib:"libc.lib" /out:"..\Release_TS\cli\php.exe" /libpath:"..\Release_TS"
-
-!ELSEIF "$(CFG)" == "php5ts_cli - Win32 Debug_TS"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug_TS"
-# PROP BASE Intermediate_Dir "Debug_TS"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "..\Debug_TS"
-# PROP Intermediate_Dir "Debug_TS"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
-# ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I ".." /I "..\main" /I "..\regex" /I "..\..\bindlib_w32" /I "..\Zend" /I "..\TSRM" /D "DEBUG" /D "_DEBUG" /D ZEND_DEBUG=1 /D "_CONSOLE" /D "MSVC5" /D "ZTS" /D "ZEND_WIN32" /D "PHP_WIN32" /D "WIN32" /D "_MBCS" /FR /FD /c
-# SUBTRACT CPP /YX
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /i "c:\include" /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 winmm.lib netapi32.lib wsock32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib php5ts_debug.lib /nologo /version:4.0 /subsystem:console /debug /machine:I386 /nodefaultlib:"libcd" /nodefaultlib:"libcmt" /out:"..\Debug_TS\cli\php.exe" /pdbtype:sept /libpath:"..\Debug_TS"
-# SUBTRACT LINK32 /pdb:none
-
-!ELSEIF "$(CFG)" == "php5ts_cli - Win32 Release_TS_inline"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "php5ts___Win32_Release_TS_inline"
-# PROP BASE Intermediate_Dir "php5ts___Win32_Release_TS_inline"
-# PROP BASE Ignore_Export_Lib 0
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "..\Release_TS_inline"
-# PROP Intermediate_Dir "Release_TS_inline"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MD /W3 /GX /O2 /I "." /I "regex" /I "..\bindlib_w32" /I "Zend" /I "tsrm" /D "NDEBUG" /D "MSVC5" /D "_CONSOLE" /D "ZTS" /D "WIN32" /D "_MBCS" /D ZEND_DEBUG=0 /Fr /FD /c
-# SUBTRACT BASE CPP /YX /Yc /Yu
-# ADD CPP /nologo /MD /W3 /GX /O2 /I ".." /I "..\main" /I "..\regex" /I "..\..\bindlib_w32" /I "..\Zend" /I "..\TSRM" /D "NDEBUG" /D ZEND_DEBUG=0 /D "ZEND_WIN32_FORCE_INLINE" /D "_CONSOLE" /D "MSVC5" /D "ZTS" /D "ZEND_WIN32" /D "PHP_WIN32" /D "WIN32" /D "_MBCS" /Fr /FD /c
-# SUBTRACT CPP /YX /Yc /Yu
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 php5ts.lib winmm.lib wsock32.lib netapi32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /version:3.0 /subsystem:console /machine:I386 /nodefaultlib:"libc.lib" /out:"Release_TS\php.exe" /libpath:"Release_TS"
-# ADD LINK32 php5ts.lib winmm.lib wsock32.lib netapi32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /version:4.0 /subsystem:console /machine:I386 /nodefaultlib:"libc.lib" /out:"..\Release_TS_inline\cli\php.exe" /libpath:"..\Release_TS_inline"
-
-!ELSEIF "$(CFG)" == "php5ts_cli - Win32 Release_TSDbg"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "php5ts___Win32_Release_TSDbg"
-# PROP BASE Intermediate_Dir "php5ts___Win32_Release_TSDbg"
-# PROP BASE Ignore_Export_Lib 0
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "..\Release_TSDbg"
-# PROP Intermediate_Dir "Release_TSDbg"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MD /W3 /GX /O2 /I ".." /I "..\main" /I "..\regex" /I "..\..\bindlib_w32" /I "..\Zend" /I "..\TSRM" /D "NDEBUG" /D ZEND_DEBUG=0 /D "_CONSOLE" /D "MSVC5" /D "ZTS" /D "ZEND_WIN32" /D "PHP_WIN32" /D "WIN32" /D "_MBCS" /Fr /FD /c
-# SUBTRACT BASE CPP /YX /Yc /Yu
-# ADD CPP /nologo /MD /W3 /GX /Zi /Od /I ".." /I "..\main" /I "..\regex" /I "..\..\bindlib_w32" /I "..\Zend" /I "..\TSRM" /D "NDEBUG" /D ZEND_DEBUG=0 /D "_CONSOLE" /D "MSVC5" /D "ZTS" /D "ZEND_WIN32" /D "PHP_WIN32" /D "WIN32" /D "_MBCS" /Fr /FD /c
-# SUBTRACT CPP /YX /Yc /Yu
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 php5ts.lib winmm.lib wsock32.lib netapi32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /version:4.0 /subsystem:console /machine:I386 /nodefaultlib:"libc.lib" /out:"..\Release_TS\php.exe" /libpath:"..\Release_TS"
-# ADD LINK32 php5ts.lib winmm.lib wsock32.lib netapi32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /version:4.0 /subsystem:console /debug /machine:I386 /nodefaultlib:"libc.lib" /out:"..\Release_TSDbg\php.exe" /libpath:"..\Release_TSDbg"
-
-!ENDIF
-
-# Begin Target
-
-# Name "php5ts_cli - Win32 Release_TS"
-# Name "php5ts_cli - Win32 Debug_TS"
-# Name "php5ts_cli - Win32 Release_TS_inline"
-# Name "php5ts_cli - Win32 Release_TSDbg"
-# Begin Group "Source Files"
-
-# PROP Default_Filter ".c"
-# Begin Source File
-
-SOURCE=..\sapi\cli\getopt.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\sapi\cli\php_cli.c
-# End Source File
-# End Group
-# Begin Group "Header Files"
-
-# PROP Default_Filter ".h"
-# Begin Source File
-
-SOURCE=..\sapi\cli\php_getopt.h
-# End Source File
-# End Group
-# Begin Source File
-
-SOURCE=.\php5ts_cli.rc
-# End Source File
-# Begin Source File
-
-SOURCE=.\php5ts_cli.rc2
-# End Source File
-# End Target
-# End Project
diff --git a/win32/php5ts_cli.rc b/win32/php5ts_cli.rc
deleted file mode 100644
index 0053e0c7f2..0000000000
--- a/win32/php5ts_cli.rc
+++ /dev/null
@@ -1,126 +0,0 @@
-//Microsoft Developer Studio generated resource script.
-
-//
-
-#include "resource.h"
-
-
-
-#define APSTUDIO_READONLY_SYMBOLS
-
-/////////////////////////////////////////////////////////////////////////////
-
-//
-
-// Generated from the TEXTINCLUDE 2 resource.
-
-//
-
-#include "winres.h"
-
-
-
-/////////////////////////////////////////////////////////////////////////////
-
-#undef APSTUDIO_READONLY_SYMBOLS
-
-
-
-/////////////////////////////////////////////////////////////////////////////
-
-// English (U.S.) resources
-
-
-
-#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
-
-#ifdef _WIN32
-
-LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
-
-#pragma code_page(1252)
-
-#endif //_WIN32
-
-
-
-#ifdef APSTUDIO_INVOKED
-
-/////////////////////////////////////////////////////////////////////////////
-
-//
-
-// TEXTINCLUDE
-
-//
-
-
-
-1 TEXTINCLUDE DISCARDABLE
-
-BEGIN
-
- "resource.h\0"
-
-END
-
-
-
-2 TEXTINCLUDE DISCARDABLE
-
-BEGIN
-
- "#include ""php5ts_cli.rc2""\r\n"
-
- "\0"
-
-END
-
-
-
-3 TEXTINCLUDE DISCARDABLE
-
-BEGIN
-
- "\r\n"
-
- "\0"
-
-END
-
-
-
-#endif // APSTUDIO_INVOKED
-
-
-
-#endif // English (U.S.) resources
-
-/////////////////////////////////////////////////////////////////////////////
-
-
-
-
-
-
-
-#ifndef APSTUDIO_INVOKED
-
-/////////////////////////////////////////////////////////////////////////////
-
-//
-
-// Generated from the TEXTINCLUDE 3 resource.
-
-//
-
-#include "php5ts_cli.rc2"
-
-
-
-/////////////////////////////////////////////////////////////////////////////
-
-#endif // not APSTUDIO_INVOKED
-
-
-
diff --git a/win32/php5ts_cli.rc2 b/win32/php5ts_cli.rc2
deleted file mode 100644
index 21517ca0ba..0000000000
--- a/win32/php5ts_cli.rc2
+++ /dev/null
@@ -1,61 +0,0 @@
-//
-// php5dllts.RC2 - resources Microsoft Visual C++ does not edit directly
-//
-
-#ifdef APSTUDIO_INVOKED
- #error this file is not editable by Microsoft Visual C++
-#endif //APSTUDIO_INVOKED
-
-
-/////////////////////////////////////////////////////////////////////////////
-// Add manually edited resources here...
-#include "../main/php_version.h"
-
-#define XSTRVER4(maj, min, rel, build) #maj "." #min "." #rel "." #build
-#define XSTRVER3(maj, min, rel) #maj "." #min "." #rel
-#define STRVER4(maj, min, rel, build) XSTRVER4(maj, min, rel, build)
-#define STRVER3(maj, min, rel) XSTRVER3(maj, min, rel)
-
-#ifndef _MAC
-//Version
-VS_VERSION_INFO VERSIONINFO
- FILEVERSION PHP_MAJOR_VERSION,PHP_MINOR_VERSION,PHP_RELEASE_VERSION,PHP_RELEASE_VERSION
- PRODUCTVERSION PHP_MAJOR_VERSION,PHP_MINOR_VERSION,PHP_RELEASE_VERSION,0
- FILEFLAGSMASK 0x3fL
-#ifdef _DEBUG
- FILEFLAGS VS_FF_DEBUG
-#else
- FILEFLAGS 0x0L
-#endif
- FILEOS VOS__WINDOWS32
- FILETYPE VFT_APP
- FILESUBTYPE VFT2_UNKNOWN
-BEGIN
- BLOCK "StringFileInfo"
- BEGIN
- BLOCK "040904b0"
- BEGIN
- VALUE "Comments", "\0"
- VALUE "CompanyName", "The PHP Group\0"
- VALUE "FileDescription", "PHP Script Interpreter\0"
- VALUE "FileVersion", STRVER4(PHP_MAJOR_VERSION, PHP_MINOR_VERSION, PHP_RELEASE_VERSION, PHP_RELEASE_VERSION)
- VALUE "InternalName", "php-cli\0"
- VALUE "LegalCopyright", "Copyright © 1997-2004 The PHP Group\0"
- VALUE "LegalTrademarks", "php\0"
- VALUE "OriginalFilename", "php.exe\0"
- VALUE "PrivateBuild", "\0"
- VALUE "ProductName", "PHP Thread Safe Command Line Interface\0"
- VALUE "ProductVersion", STRVER3(PHP_MAJOR_VERSION, PHP_MINOR_VERSION, PHP_RELEASE_VERSION)
- VALUE "SpecialBuild", PHP_EXTRA_VERSION "\0"
- VALUE "URL", "http://www.php.net"
- END
- END
- BLOCK "VarFileInfo"
- BEGIN
- VALUE "Translation", 0x409, 1200
- END
-END
-
-#endif // !_MAC
-
-/////////////////////////////////////////////////////////////////////////////
diff --git a/win32/php_modules.dsw b/win32/php_modules.dsw
deleted file mode 100644
index 37b0af64e9..0000000000
--- a/win32/php_modules.dsw
+++ /dev/null
@@ -1,521 +0,0 @@
-Microsoft Developer Studio Workspace File, Format Version 6.00
-# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE!
-
-###############################################################################
-
-Project: "bz2"=..\ext\bz2\bz2.dsp - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-}}}
-
-###############################################################################
-
-Project: "cpdf"=..\ext\cpdf\cpdf.dsp - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-}}}
-
-###############################################################################
-
-Project: "ctype"=..\ext\ctype\ctype.dsp - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-}}}
-
-###############################################################################
-
-Project: "curl"=..\ext\curl\curl.dsp - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-}}}
-
-###############################################################################
-
-Project: "dba"=..\ext\dba\dba.dsp - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-}}}
-
-###############################################################################
-
-Project: "dbase"=..\ext\dbase\dbase.dsp - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-}}}
-
-###############################################################################
-
-Project: "dbx"=..\ext\dbx\dbx.dsp - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-}}}
-
-###############################################################################
-
-Project: "exif"=..\ext\exif\exif.dsp - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-}}}
-
-###############################################################################
-
-Project: "fbsql"=..\ext\fbsql\fbsql.dsp - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-}}}
-
-###############################################################################
-
-Project: "fdf"=..\ext\fdf\fdf.dsp - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-}}}
-
-###############################################################################
-
-Project: "filepro"=..\ext\filepro\filepro.dsp - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-}}}
-
-###############################################################################
-
-Project: "gd"=..\ext\gd\gd.dsp - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-}}}
-
-###############################################################################
-
-Project: "gettext"=..\ext\gettext\gettext.dsp - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-}}}
-
-###############################################################################
-
-Project: "iconv"=..\ext\iconv\iconv.dsp - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-}}}
-
-###############################################################################
-
-Project: "ifx"=..\ext\informix\ifx.dsp - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-}}}
-
-###############################################################################
-
-Project: "imap"=..\ext\imap\imap.dsp - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-}}}
-
-###############################################################################
-
-Project: "ingres"=..\ext\ingres_ii\ingres.dsp - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-}}}
-
-###############################################################################
-
-Project: "interbase"=..\ext\interbase\interbase.dsp - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-}}}
-
-###############################################################################
-
-Project: "ldap"=..\ext\ldap\ldap.dsp - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-}}}
-
-###############################################################################
-
-Project: "mbstring"=..\ext\mbstring\mbstring.dsp - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-}}}
-
-###############################################################################
-
-Project: "mcrypt"=..\ext\mcrypt\mcrypt.dsp - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-}}}
-
-###############################################################################
-
-Project: "mcve"=..\ext\mcve\mcve.dsp - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-}}}
-
-###############################################################################
-
-Project: "mhash"=..\ext\mhash\mhash.dsp - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-}}}
-
-###############################################################################
-
-Project: "mime_magic"=..\ext\mime_magic\mime_magic.dsp - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-}}}
-
-###############################################################################
-
-Project: "ming"=..\ext\ming\ming.dsp - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-}}}
-
-###############################################################################
-
-Project: "msql"=..\ext\msql\msql.dsp - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-}}}
-
-###############################################################################
-
-Project: "mssql"=..\ext\mssql\mssql.dsp - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-}}}
-
-###############################################################################
-
-Project: "mysql"=..\ext\mysql\mysql.dsp - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-}}}
-
-###############################################################################
-
-Project: "oci8"=..\ext\oci8\oci8.dsp - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-}}}
-
-###############################################################################
-
-Project: "openssl"=..\ext\openssl\openssl.dsp - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-}}}
-
-###############################################################################
-
-Project: "oracle"=..\ext\oracle\oracle.dsp - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-}}}
-
-###############################################################################
-
-Project: "pdf"=..\ext\pdf\pdf.dsp - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-}}}
-
-###############################################################################
-
-Project: "pgsql"=..\ext\pgsql\pgsql.dsp - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-}}}
-
-###############################################################################
-
-Project: "shmop"=..\ext\shmop\shmop.dsp - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-}}}
-
-###############################################################################
-
-Project: "snmp"=..\ext\snmp\snmp.dsp - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-}}}
-
-###############################################################################
-
-Project: "sockets"=..\ext\sockets\sockets.dsp - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-}}}
-
-###############################################################################
-
-Project: "sybase_ct"=..\ext\sybase_ct\sybase_ct.dsp - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-}}}
-
-###############################################################################
-
-Project: "tokenizer"=..\ext\tokenizer\tokenizer.dsp - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-}}}
-
-###############################################################################
-
-Project: "w32api"=..\ext\w32api\w32api.dsp - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-}}}
-
-###############################################################################
-
-Project: "xmlrpc"=..\ext\xmlrpc\xmlrpc.dsp - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-}}}
-
-###############################################################################
-
-Project: "xsl"=..\ext\xsl\xsl.dsp - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-}}}
-
-###############################################################################
-
-Project: "yaz"=..\ext\yaz\yaz.dsp - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-}}}
-
-###############################################################################
-
-Global:
-
-Package=<5>
-{{{
-}}}
-
-Package=<3>
-{{{
-}}}
-
-###############################################################################
-
diff --git a/win32/php_registry.h b/win32/php_registry.h
deleted file mode 100644
index 2b111dbb8b..0000000000
--- a/win32/php_registry.h
+++ /dev/null
@@ -1,8 +0,0 @@
-#ifndef PHP_REGISTRY_H
-#define PHP_REGISTRY_H
-
-
-void UpdateIniFromRegistry(char *path TSRMLS_DC);
-char *GetIniPathFromRegistry();
-
-#endif /* PHP_REGISTRY_H */
diff --git a/win32/php_win32_globals.h b/win32/php_win32_globals.h
deleted file mode 100755
index 113a7122a7..0000000000
--- a/win32/php_win32_globals.h
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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$ */
-
-#ifndef PHP_WIN32_GLOBALS_H
-#define PHP_WIN32_GLOBALS_H
-
-/* misc globals for thread-safety under win32 */
-
-#include "pwd.h"
-
-typedef struct _php_win32_core_globals php_win32_core_globals;
-
-#ifdef ZTS
-# define PW32G(v) TSRMG(php_win32_core_globals_id, php_win32_core_globals*, v)
-extern PHPAPI int php_win32_core_globals_id;
-#else
-# define PW32G(v) (the_php_win32_core_globals.v)
-extern PHPAPI struct _php_win32_core_globals the_php_win32_core_globals;
-#endif
-
-struct _php_win32_core_globals {
- /* syslog */
- char *log_header;
- HANDLE log_source;
-
- /* getpwuid */
- struct passwd pwd;
-
- /* getlogin */
- char *login_name;
-
- /* time */
- struct timeval starttime;
- __int64 lasttime, freq;
-};
-
-void php_win32_core_globals_ctor(void *vg TSRMLS_DC);
-PHP_RSHUTDOWN_FUNCTION(win32_core_globals);
-
-#endif
-
diff --git a/win32/pwd.c b/win32/pwd.c
deleted file mode 100644
index 311e2c6380..0000000000
--- a/win32/pwd.c
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Sterling Hughes <sterling@php.net> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#include "php.h" /*php specific */
-#include <lmaccess.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <lmapibuf.h>
-#include "pwd.h"
-#include "grp.h"
-#include "php_win32_globals.h"
-
-static char *home_dir = ".";
-static char *login_shell = "not command.com!";
-
-struct passwd *
-getpwnam(char *name)
-{
- return (struct passwd *) 0;
-}
-
-
-char *
-getlogin()
-{
- char name[256];
- DWORD max_len = 256;
- TSRMLS_FETCH();
-
- STR_FREE(PW32G(login_name));
- GetUserName(name, &max_len);
- name[max_len] = '\0';
- PW32G(login_name) = strdup(name);
- return PW32G(login_name);
-}
-
-struct passwd *
-getpwuid(int user_id)
-{
- TSRMLS_FETCH();
- PW32G(pwd).pw_name = getlogin();
- PW32G(pwd).pw_dir = home_dir;
- PW32G(pwd).pw_shell = login_shell;
- PW32G(pwd).pw_uid = 0;
-
- return &PW32G(pwd);
-}
-
diff --git a/win32/pwd.h b/win32/pwd.h
deleted file mode 100644
index e9eeae3495..0000000000
--- a/win32/pwd.h
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Sterling Hughes <sterling@php.net> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifndef PWD_H
-#define PWD_H
-
-struct passwd {
- char *pw_name;
- char *pw_passwd;
- int pw_uid;
- int pw_gid;
- char *pw_comment;
- char *pw_gecos;
- char *pw_dir;
- char *pw_shell;
-};
-
-extern struct passwd *getpwuid(int);
-extern struct passwd *getpwnam(char *name);
-extern char *getlogin(void);
-#endif
diff --git a/win32/pws-php5cgi.reg b/win32/pws-php5cgi.reg
deleted file mode 100644
index 46edc77386..0000000000
--- a/win32/pws-php5cgi.reg
+++ /dev/null
@@ -1,6 +0,0 @@
-REGEDIT4
-
-[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\w3svc\parameters\Script Map]
-".php"="[PUT PATH HERE]\\php.exe"
-
-
diff --git a/win32/pws-php5isapi.reg b/win32/pws-php5isapi.reg
deleted file mode 100644
index 393604d28d..0000000000
--- a/win32/pws-php5isapi.reg
+++ /dev/null
@@ -1,5 +0,0 @@
-REGEDIT4
-
-[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\w3svc\parameters\Script Map]
-".php"="[PUT PATH HERE]\\php5isapi.dll"
-
diff --git a/win32/readdir.c b/win32/readdir.c
deleted file mode 100644
index 6aaafced44..0000000000
--- a/win32/readdir.c
+++ /dev/null
@@ -1,146 +0,0 @@
-#include <malloc.h>
-#include <string.h>
-#include <errno.h>
-
-#include "readdir.h"
-#include "php.h"
-
-/**********************************************************************
- * Implement dirent-style opendir/readdir/rewinddir/closedir on Win32
- *
- * Functions defined are opendir(), readdir(), rewinddir() and
- * closedir() with the same prototypes as the normal dirent.h
- * implementation.
- *
- * Does not implement telldir(), seekdir(), or scandir(). The dirent
- * struct is compatible with Unix, except that d_ino is always 1 and
- * d_off is made up as we go along.
- *
- * The DIR typedef is not compatible with Unix.
- **********************************************************************/
-
-DIR *opendir(const char *dir)
-{
- DIR *dp;
- char *filespec;
- long handle;
- int index;
-
- filespec = malloc(strlen(dir) + 2 + 1);
- strcpy(filespec, dir);
- index = strlen(filespec) - 1;
- if (index >= 0 && (filespec[index] == '/' ||
- (filespec[index] == '\\' && !IsDBCSLeadByte(filespec[index-1]))))
- filespec[index] = '\0';
- strcat(filespec, "/*");
-
- dp = (DIR *) malloc(sizeof(DIR));
- dp->offset = 0;
- dp->finished = 0;
-
- if ((handle = _findfirst(filespec, &(dp->fileinfo))) < 0) {
- if (errno == ENOENT) {
- dp->finished = 1;
- } else {
- free(dp);
- free(filespec);
- return NULL;
- }
- }
- dp->dir = strdup(dir);
- dp->handle = handle;
- free(filespec);
-
- return dp;
-}
-
-struct dirent *readdir(DIR *dp)
-{
- if (!dp || dp->finished)
- return NULL;
-
- if (dp->offset != 0) {
- if (_findnext(dp->handle, &(dp->fileinfo)) < 0) {
- dp->finished = 1;
- return NULL;
- }
- }
- dp->offset++;
-
- strlcpy(dp->dent.d_name, dp->fileinfo.name, _MAX_FNAME+1);
- dp->dent.d_ino = 1;
- dp->dent.d_reclen = strlen(dp->dent.d_name);
- dp->dent.d_off = dp->offset;
-
- return &(dp->dent);
-}
-
-int readdir_r(DIR *dp, struct dirent *entry, struct dirent **result)
-{
- if (!dp || dp->finished) {
- *result = NULL;
- return 0;
- }
-
- if (dp->offset != 0) {
- if (_findnext(dp->handle, &(dp->fileinfo)) < 0) {
- dp->finished = 1;
- *result = NULL;
- return 0;
- }
- }
- dp->offset++;
-
- strlcpy(dp->dent.d_name, dp->fileinfo.name, _MAX_FNAME+1);
- dp->dent.d_ino = 1;
- dp->dent.d_reclen = strlen(dp->dent.d_name);
- dp->dent.d_off = dp->offset;
-
- memcpy(entry, &dp->dent, sizeof(*entry));
-
- *result = &dp->dent;
-
- return 0;
-}
-
-int closedir(DIR *dp)
-{
- if (!dp)
- return 0;
- _findclose(dp->handle);
- if (dp->dir)
- free(dp->dir);
- if (dp)
- free(dp);
-
- return 0;
-}
-
-int rewinddir(DIR *dp)
-{
- /* Re-set to the beginning */
- char *filespec;
- long handle;
- int index;
-
- _findclose(dp->handle);
-
- dp->offset = 0;
- dp->finished = 0;
-
- filespec = malloc(strlen(dp->dir) + 2 + 1);
- strcpy(filespec, dp->dir);
- index = strlen(filespec) - 1;
- if (index >= 0 && (filespec[index] == '/' || filespec[index] == '\\'))
- filespec[index] = '\0';
- strcat(filespec, "/*");
-
- if ((handle = _findfirst(filespec, &(dp->fileinfo))) < 0) {
- if (errno == ENOENT)
- dp->finished = 1;
- }
- dp->handle = handle;
- free(filespec);
-
-return 0;
-}
diff --git a/win32/readdir.h b/win32/readdir.h
deleted file mode 100644
index 419dc95c24..0000000000
--- a/win32/readdir.h
+++ /dev/null
@@ -1,43 +0,0 @@
-#ifndef READDIR_H
-#define READDIR_H
-
-
-/*
- * Structures and types used to implement opendir/readdir/closedir
- * on Windows 95/NT.
- */
-
-#include <io.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <sys/types.h>
-
-
-/* struct dirent - same as Unix */
-
-struct dirent {
- long d_ino; /* inode (always 1 in WIN32) */
- off_t d_off; /* offset to this dirent */
- unsigned short d_reclen; /* length of d_name */
- char d_name[_MAX_FNAME + 1]; /* filename (null terminated) */
-};
-
-
-/* typedef DIR - not the same as Unix */
-typedef struct {
- long handle; /* _findfirst/_findnext handle */
- short offset; /* offset into directory */
- short finished; /* 1 if there are not more files */
- struct _finddata_t fileinfo; /* from _findfirst/_findnext */
- char *dir; /* the dir we are reading */
- struct dirent dent; /* the dirent to return */
-} DIR;
-
-/* Function prototypes */
-DIR *opendir(const char *);
-struct dirent *readdir(DIR *);
-int readdir_r(DIR *, struct dirent *, struct dirent **);
-int closedir(DIR *);
-int rewinddir(DIR *);
-
-#endif /* READDIR_H */
diff --git a/win32/registry.c b/win32/registry.c
deleted file mode 100644
index 6eda0f9fff..0000000000
--- a/win32/registry.c
+++ /dev/null
@@ -1,111 +0,0 @@
-#include "php.h"
-#include "php_ini.h"
-
-#define PHP_REGISTRY_KEY "SOFTWARE\\PHP"
-
-void UpdateIniFromRegistry(char *path TSRMLS_DC)
-{
- char *p, *orig_path;
- HKEY MainKey;
- char *strtok_buf = NULL;
-
- if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, PHP_REGISTRY_KEY "\\Per Directory Values", 0, KEY_READ, &MainKey)!=ERROR_SUCCESS) {
- return;
- }
-
- orig_path = path = estrdup(path);
-
- /* Get rid of C:, if exists */
- p = strchr(path, ':');
- if (p) {
- *p = path[0]; /* replace the colon with the drive letter */
- path = p; /* make path point to the drive letter */
- } else {
- if (path[0] != '\\' && path[0] != '/') {
- char tmp_buf[MAXPATHLEN], *cwd;
- char drive_letter;
-
- /* get current working directory and prepend it to the path */
- if (!VCWD_GETCWD(tmp_buf, MAXPATHLEN)) {
- efree(orig_path);
- return;
- }
- cwd = strchr(tmp_buf, ':');
- if (!cwd) {
- drive_letter = 'C';
- cwd = tmp_buf;
- } else {
- drive_letter = tmp_buf[0];
- cwd++;
- }
- path = (char *) emalloc(2+strlen(cwd)+1+strlen(orig_path)+1);
- sprintf(path, "%c\\%s\\%s", drive_letter, cwd, orig_path);
- efree(orig_path);
- orig_path = path;
- }
- }
-
-
- path = p = php_strtok_r(path, "\\/", &strtok_buf);
-
- while (p) {
- HKEY hKey;
- DWORD lType;
- DWORD values = 0, max_name = 0, max_value = 0, i = 0;
-
- if (p>path) {
- *(p-1) = '\\'; /* restore the slash */
- }
-
- if (RegOpenKeyEx(MainKey, path, 0, KEY_READ, &hKey)!=ERROR_SUCCESS) {
- break;
- }
-
- if(RegQueryInfoKey(hKey, NULL, NULL, NULL, NULL, NULL, NULL, &values, &max_name, &max_value, NULL, NULL) == ERROR_SUCCESS) {
- LPTSTR namebuf = (LPTSTR)emalloc(max_name + 1);
- PBYTE valuebuf = (PBYTE)emalloc(max_value);
-
- while (i < values) {
- DWORD namebuf_len = max_name + 1;
- DWORD valuebuf_len = max_value;
-
- RegEnumValue(hKey, i, namebuf, &namebuf_len, NULL, &lType, valuebuf, &valuebuf_len);
-
- if ((lType == REG_SZ) || (lType == REG_EXPAND_SZ)) {
- /* valuebuf_len includes trailing 0 */
- zend_alter_ini_entry(namebuf, namebuf_len + 1, valuebuf, valuebuf_len?valuebuf_len-1:0, PHP_INI_SYSTEM, PHP_INI_STAGE_ACTIVATE);
- }
-
- i++;
- }
-
- efree(namebuf);
- efree(valuebuf);
- }
-
- RegCloseKey(hKey);
- p = php_strtok_r(NULL, "\\/", &strtok_buf);
- }
- RegCloseKey(MainKey);
- efree(orig_path);
-}
-
-#define PHPRC_REGISTRY_NAME "IniFilePath"
-
-char *GetIniPathFromRegistry()
-{
- char *reg_location = NULL;
- HKEY hKey;
-
- if(RegOpenKeyEx(HKEY_LOCAL_MACHINE, PHP_REGISTRY_KEY, 0, KEY_READ, &hKey) == ERROR_SUCCESS) {
- DWORD buflen = MAXPATHLEN;
- reg_location = emalloc(MAXPATHLEN+1);
- if(RegQueryValueEx(hKey, PHPRC_REGISTRY_NAME, 0, NULL, reg_location, &buflen) != ERROR_SUCCESS) {
- efree(reg_location);
- reg_location = NULL;
- return reg_location;
- }
- RegCloseKey(hKey);
- }
- return reg_location;
-}
diff --git a/win32/resource.h b/win32/resource.h
deleted file mode 100644
index 3e7e4c0ed1..0000000000
--- a/win32/resource.h
+++ /dev/null
@@ -1,15 +0,0 @@
-//{{NO_DEPENDENCIES}}
-// Microsoft Developer Studio generated include file.
-// Used by php5dllts.rc
-//
-
-// Next default values for new objects
-//
-#ifdef APSTUDIO_INVOKED
-#ifndef APSTUDIO_READONLY_SYMBOLS
-#define _APS_NEXT_RESOURCE_VALUE 101
-#define _APS_NEXT_COMMAND_VALUE 40001
-#define _APS_NEXT_CONTROL_VALUE 1000
-#define _APS_NEXT_SYMED_VALUE 101
-#endif
-#endif
diff --git a/win32/select.c b/win32/select.c
deleted file mode 100644
index a9ff6e62cd..0000000000
--- a/win32/select.c
+++ /dev/null
@@ -1,176 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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@thebrainroom.com> |
- +----------------------------------------------------------------------+
-*/
-
-#include "php.h"
-#include "php_network.h"
-
-#ifdef PHP_WIN32
-
-/* $Id$ */
-
-/* Win32 select() will only work with sockets, so we roll our own implementation here.
- * - If you supply only sockets, this simply passes through to winsock select().
- * - If you supply file handles, there is no way to distinguish between
- * ready for read/write or OOB, so any set in which the handle is found will
- * be marked as ready.
- * - If you supply a mixture of handles and sockets, the system will interleave
- * calls between select() and WaitForMultipleObjects(). The time slicing may
- * cause this function call to take up to 100 ms longer than you specified.
- * - Calling this with NULL sets as a portable way to sleep with sub-second
- * accuracy is not supported.
- * */
-PHPAPI int php_select(int max_fd, fd_set *rfds, fd_set *wfds, fd_set *efds, struct timeval *tv)
-{
- DWORD ms_total, limit;
- HANDLE handles[MAXIMUM_WAIT_OBJECTS];
- int handle_slot_to_fd[MAXIMUM_WAIT_OBJECTS];
- int n_handles = 0, i;
- fd_set sock_read, sock_write, sock_except;
- fd_set aread, awrite, aexcept;
- int sock_max_fd = -1;
- struct timeval tvslice;
- int retcode;
-
-#define SAFE_FD_ISSET(fd, set) (set != NULL && FD_ISSET(fd, set))
-
- /* calculate how long we need to wait in milliseconds */
- if (tv == NULL) {
- ms_total = INFINITE;
- } else {
- ms_total = tv->tv_sec * 1000;
- ms_total += tv->tv_usec / 1000;
- }
-
- FD_ZERO(&sock_read);
- FD_ZERO(&sock_write);
- FD_ZERO(&sock_except);
-
- /* build an array of handles for non-sockets */
- for (i = 0; i < max_fd; i++) {
- if (SAFE_FD_ISSET(i, rfds) || SAFE_FD_ISSET(i, wfds) || SAFE_FD_ISSET(i, efds)) {
- handles[n_handles] = (HANDLE)_get_osfhandle(i);
- if ((DWORD)handles[n_handles] == 0xffffffff) {
- /* socket */
- if (SAFE_FD_ISSET(i, rfds)) {
- FD_SET(i, &sock_read);
- }
- if (SAFE_FD_ISSET(i, wfds)) {
- FD_SET(i, &sock_write);
- }
- if (SAFE_FD_ISSET(i, efds)) {
- FD_SET(i, &sock_except);
- }
- if (i > sock_max_fd) {
- sock_max_fd = i;
- }
- } else {
- handle_slot_to_fd[n_handles] = i;
- n_handles++;
- }
- }
- }
-
- if (n_handles == 0) {
- /* plain sockets only - let winsock handle the whole thing */
- return select(max_fd, rfds, wfds, efds, tv);
- }
-
- /* mixture of handles and sockets; lets multiplex between
- * winsock and waiting on the handles */
-
- FD_ZERO(&aread);
- FD_ZERO(&awrite);
- FD_ZERO(&aexcept);
-
- limit = GetTickCount() + ms_total;
- do {
- retcode = 0;
-
- if (sock_max_fd >= 0) {
- /* overwrite the zero'd sets here; the select call
- * will clear those that are not active */
- aread = sock_read;
- awrite = sock_write;
- aexcept = sock_except;
-
- tvslice.tv_sec = 0;
- tvslice.tv_usec = 100000;
-
- retcode = select(sock_max_fd+1, &aread, &awrite, &aexcept, &tvslice);
- }
- if (n_handles > 0) {
- /* check handles */
- DWORD wret;
-
- wret = MsgWaitForMultipleObjects(n_handles, handles, FALSE, retcode > 0 ? 0 : 100, QS_ALLEVENTS);
-
- if (wret == WAIT_TIMEOUT) {
- /* set retcode to 0; this is the default.
- * select() may have set it to something else,
- * in which case we leave it alone, so this branch
- * does nothing */
- ;
- } else if (wret == WAIT_FAILED) {
- if (retcode == 0) {
- retcode = -1;
- }
- } else {
- if (retcode < 0) {
- retcode = 0;
- }
- for (i = 0; i < n_handles; i++) {
- if (WAIT_OBJECT_0 == WaitForSingleObject(handles[i], 0)) {
- if (SAFE_FD_ISSET(handle_slot_to_fd[i], rfds)) {
- FD_SET(handle_slot_to_fd[i], &aread);
- }
- if (SAFE_FD_ISSET(handle_slot_to_fd[i], wfds)) {
- FD_SET(handle_slot_to_fd[i], &awrite);
- }
- if (SAFE_FD_ISSET(handle_slot_to_fd[i], efds)) {
- FD_SET(handle_slot_to_fd[i], &aexcept);
- }
- retcode++;
- }
- }
- }
- }
- } while (retcode == 0 && (ms_total == INFINITE || GetTickCount() < limit));
-
- if (rfds) {
- *rfds = aread;
- }
- if (wfds) {
- *wfds = awrite;
- }
- if (efds) {
- *efds = aexcept;
- }
-
- return retcode;
-}
-
-#endif
-
-/*
- * 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/win32/select.h b/win32/select.h
deleted file mode 100644
index 39e4c39235..0000000000
--- a/win32/select.h
+++ /dev/null
@@ -1,22 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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@thebrainroom.com> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-PHPAPI int php_select(int max_fd, fd_set *rfds, fd_set *wfds, fd_set *efds, struct timeval *tv);
-
diff --git a/win32/sendmail.c b/win32/sendmail.c
deleted file mode 100644
index 98659d4db4..0000000000
--- a/win32/sendmail.c
+++ /dev/null
@@ -1,953 +0,0 @@
-/*
- * PHP Sendmail for Windows.
- *
- * This file is rewriten specificly for PHPFI. Some functionality
- * has been removed (MIME and file attachments). This code was
- * modified from code based on code writen by Jarle Aase.
- *
- * This class is based on the original code by Jarle Aase, see bellow:
- * wSendmail.cpp It has been striped of some functionality to match
- * the requirements of phpfi.
- *
- * Very simple SMTP Send-mail program for sending command-line level
- * emails and CGI-BIN form response for the Windows platform.
- *
- * The complete wSendmail package with source code can be located
- * from http://www.jgaa.com
- *
- */
-
-/* $Id$ */
-
-#include "php.h" /*php specific */
-#include <stdio.h>
-#include <stdlib.h>
-#ifndef NETWARE
-#include <winsock2.h>
-#else /* NETWARE */
-#include <netware\sendmail_nw.h>
-#endif /* NETWARE */
-#include "time.h"
-#include <string.h>
-#include <math.h>
-#ifndef NETWARE
-#include <malloc.h>
-#include <memory.h>
-#include <winbase.h>
-#endif /* NETWARE */
-#include "sendmail.h"
-#include "php_ini.h"
-
-#if HAVE_PCRE || HAVE_BUNDLED_PCRE
-#include "ext/pcre/php_pcre.h"
-#endif
-
-#include "ext/standard/php_string.h"
-
-/*
- extern int _daylight;
- extern long _timezone;
- */
-/*enum
- {
- DO_CONNECT = WM_USER +1
- };
- */
-
-static char *days[] =
-{"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"};
-static char *months[] =
-{"Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"};
-
-/* '*error_message' has to be passed around from php_mail() */
-#define SMTP_ERROR_RESPONSE_SPEC "SMTP server response: %s"
-/* Convinient way to handle error messages from the SMTP server.
- response is ecalloc()d in Ack() itself and efree()d here
- because the content is in *error_message now */
-#define SMTP_ERROR_RESPONSE(response) { \
- if (response && error_message) { \
- if (NULL != (*error_message = ecalloc(1, sizeof(SMTP_ERROR_RESPONSE_SPEC) + strlen(response)))) { \
- snprintf(*error_message, sizeof(SMTP_ERROR_RESPONSE_SPEC) + strlen(response), SMTP_ERROR_RESPONSE_SPEC, response); \
- } \
- efree(response); \
- } \
- }
-#define SMTP_SKIP_SPACE(str) { while (isspace(*str)) { str++; } }
-
-
-#ifndef THREAD_SAFE
-char Buffer[MAIL_BUFFER_SIZE];
-
-/* socket related data */
-SOCKET sc;
-#ifndef NETWARE
-WSADATA Data;
-struct hostent *adr;
-#endif /* NETWARE */
-SOCKADDR_IN sock_in;
-#ifndef NETWARE
-int WinsockStarted;
-/* values set by the constructor */
-char *AppName;
-#endif /* NETWARE */
-char MailHost[HOST_NAME_LEN];
-char LocalHost[HOST_NAME_LEN];
-#endif
-char seps[] = " ,\t\n";
-#ifndef NETWARE
-char *php_mailer = "PHP 4 WIN32";
-#else
-char *php_mailer = "PHP 4 NetWare";
-#endif /* NETWARE */
-
-char *get_header(char *h, char *headers);
-
-/* Error messages */
-static char *ErrorMessages[] =
-{
- {"Success"}, /* 0 */
- {"Bad arguments from form"}, /* 1 */
- {"Unable to open temporary mailfile for read"},
- {"Failed to Start Sockets"},
- {"Failed to Resolve Host"},
- {"Failed to obtain socket handle"}, /* 5 */
- {"Failed to connect to mailserver, verify your \"SMTP\" setting in php.ini"},
- {"Failed to Send"},
- {"Failed to Receive"},
- {"Server Error"},
- {"Failed to resolve the host IP name"}, /* 10 */
- {"Out of memory"},
- {"Unknown error"},
- {"Bad Message Contents"},
- {"Bad Message Subject"},
- {"Bad Message destination"}, /* 15 */
- {"Bad Message Return Path"},
- {"Bad Mail Host"},
- {"Bad Message File"},
- {"\"sendmail_from\" not set in php.ini or custom \"From:\" header missing"},
- {"Mailserver rejected our \"sendmail_from\" setting"}, /* 20 */
- {"Error while trimming mail header with PCRE, please file a bug report at http://bugs.php.net/"} /* 21 */
-};
-
-/* This pattern converts all single occurences of \n (Unix)
- * withour a leading \r to \r\n and all occurences of \r (Mac)
- * without a trailing \n to \r\n
- * Thx to Nibbler from ircnet/#linuxger
- */
-#define PHP_WIN32_MAIL_UNIFY_PATTERN "/(\r\n?)|\n/"
-#define PHP_WIN32_MAIL_UNIFY_REPLACE "\r\n"
-
-/* This pattern removes \r\n from the start of the string,
- * \r\n from the end of the string and also makes sure every line
- * is only wrapped with a single \r\n (thus reduces multiple
- * occurences of \r\n between lines to a single \r\n) */
-#define PHP_WIN32_MAIL_RMVDBL_PATTERN "/^\r\n|(\r\n)+$/m"
-#define PHP_WIN32_MAIL_RMVDBL_REPLACE ""
-
-/* This pattern escapes \n. inside the message body. It prevents
- * premature end of message if \n.\n or \r\n.\r\n is encountered
- * and ensures that \n. sequences are properly displayed in the
- * message body. */
-#define PHP_WIN32_MAIL_DOT_PATTERN "\n."
-#define PHP_WIN32_MAIL_DOT_REPLACE "\n.."
-
-/* This function is meant to unify the headers passed to to mail()
- * This means, use PCRE to transform single occurences of \n or \r in \r\n
- * As a second step we also eleminate all \r\n occurences which are:
- * 1) At the start of the header
- * 2) At the end of the header
- * 3) Two or more occurences in the header are removed so only one is left
- *
- * Returns NULL on error, or the new char* buffer on success.
- * You have to take care and efree() the buffer on your own.
- */
-static char *php_win32_mail_trim_header(char *header TSRMLS_DC)
-{
-
-#if HAVE_PCRE || HAVE_BUNDLED_PCRE
-
- char *result, *result2;
- int result_len;
- zval *replace;
-
- if (!header) {
- return NULL;
- }
-
- MAKE_STD_ZVAL(replace);
- ZVAL_STRING(replace, PHP_WIN32_MAIL_UNIFY_REPLACE, 0);
-
- result = php_pcre_replace(PHP_WIN32_MAIL_UNIFY_PATTERN, sizeof(PHP_WIN32_MAIL_UNIFY_PATTERN)-1,
- header, strlen(header),
- replace,
- 0,
- &result_len,
- -1 TSRMLS_CC);
- if (NULL == result) {
- FREE_ZVAL(replace);
- return NULL;
- }
-
- ZVAL_STRING(replace, PHP_WIN32_MAIL_RMVDBL_REPLACE, 0);
-
- result2 = php_pcre_replace(PHP_WIN32_MAIL_RMVDBL_PATTERN, sizeof(PHP_WIN32_MAIL_RMVDBL_PATTERN)-1,
- result, result_len,
- replace,
- 0,
- &result_len,
- -1 TSRMLS_CC);
- efree(result);
- FREE_ZVAL(replace);
- return result2;
-#else
- /* In case we don't have PCRE support (for whatever reason...) simply do nothing and return the unmodified header */
- return estrdup(header);
-#endif
-}
-
-/*********************************************************************
-// Name: TSendMail
-// Input: 1) host: Name of the mail host where the SMTP server resides
-// max accepted length of name = 256
-// 2) appname: Name of the application to use in the X-mailer
-// field of the message. if NULL is given the application
-// name is used as given by the GetCommandLine() function
-// max accespted length of name = 100
-// Output: 1) error: Returns the error code if something went wrong or
-// SUCCESS otherwise.
-//
-// See SendText() for additional args!
-//********************************************************************/
-PHPAPI int TSendMail(char *host, int *error, char **error_message,
- char *headers, char *Subject, char *mailTo, char *data,
- char *mailCc, char *mailBcc, char *mailRPath)
-{
- int ret;
- char *RPath = NULL;
- char *headers_lc = NULL; /* headers_lc is only created if we've a header at all */
- TSRMLS_FETCH();
-
-#ifndef NETWARE
- WinsockStarted = FALSE;
-#endif
-
- if (host == NULL) {
- *error = BAD_MAIL_HOST;
- return FAILURE;
- } else if (strlen(host) >= HOST_NAME_LEN) {
- *error = BAD_MAIL_HOST;
- return FAILURE;
- } else {
- strcpy(MailHost, host);
- }
-
- if (headers) {
- char *pos = NULL;
- size_t i;
-
- /* Use PCRE to trim the header into the right format */
- if (NULL == (headers = php_win32_mail_trim_header(headers TSRMLS_CC))) {
- *error = W32_SM_PCRE_ERROR;
- return FAILURE;
- }
-
- /* Create a lowercased header for all the searches so we're finally case
- * insensitive when searching for a pattern. */
- if (NULL == (headers_lc = estrdup(headers))) {
- efree(headers);
- *error = OUT_OF_MEMORY;
- return FAILURE;
- }
- for (i = 0; i < strlen(headers_lc); i++) {
- headers_lc[i] = tolower(headers_lc[i]);
- }
- }
-
- /* Fall back to sendmail_from php.ini setting */
- if (mailRPath && *mailRPath) {
- RPath = estrdup(mailRPath);
- }
- else if (INI_STR("sendmail_from")) {
- RPath = estrdup(INI_STR("sendmail_from"));
- } else {
- if (headers) {
- efree(headers);
- efree(headers_lc);
- }
- *error = W32_SM_SENDMAIL_FROM_NOT_SET;
- return FAILURE;
- }
-
- /* attempt to connect with mail host */
- *error = MailConnect();
- if (*error != 0) {
- if (RPath) {
- efree(RPath);
- }
- if (headers) {
- efree(headers);
- efree(headers_lc);
- }
- /* 128 is safe here, the specifier in snprintf isn't longer than that */
- if (NULL == (*error_message = ecalloc(1, HOST_NAME_LEN + 128))) {
- return FAILURE;
- }
- snprintf(*error_message, HOST_NAME_LEN + 128,
- "Failed to connect to mailserver at \"%s\" port %d, verify your \"SMTP\" "
- "and \"smtp_port\" setting in php.ini or use ini_set()",
- MailHost, !INI_INT("smtp_port") ? 25 : INI_INT("smtp_port"));
- return FAILURE;
- } else {
- ret = SendText(RPath, Subject, mailTo, mailCc, mailBcc, data, headers, headers_lc, error_message);
- TSMClose();
- if (RPath) {
- efree(RPath);
- }
- if (headers) {
- efree(headers);
- efree(headers_lc);
- }
- if (ret != SUCCESS) {
- *error = ret;
- return FAILURE;
- }
- return SUCCESS;
- }
-}
-
-//********************************************************************
-// Name: TSendMail::~TSendMail
-// Input:
-// Output:
-// Description: DESTRUCTOR
-// Author/Date: jcar 20/9/96
-// History:
-//********************************************************************/
-PHPAPI void TSMClose()
-{
- Post("QUIT\r\n");
- Ack(NULL);
- /* to guarantee that the cleanup is not made twice and
- compomise the rest of the application if sockets are used
- elesewhere
- */
-
- shutdown(sc, 0);
-#ifndef NETWARE
- closesocket(sc);
-#else
- /* closesocket commented out since it was giving undefined symbol linker error
- * close added in its place
- */
- close(sc);
-#endif /* NETWARE */
-}
-
-
-/*********************************************************************
-// Name: char *GetSMErrorText
-// Input: Error index returned by the menber functions
-// Output: pointer to a string containing the error description
-// Description:
-// Author/Date: jcar 20/9/96
-// History:
-//*******************************************************************/
-PHPAPI char *GetSMErrorText(int index)
-{
- if (MIN_ERROR_INDEX <= index && index < MAX_ERROR_INDEX) {
- return (ErrorMessages[index]);
-
- } else {
- return (ErrorMessages[UNKNOWN_ERROR]);
-
- }
-}
-
-
-/*********************************************************************
-// Name: TSendText
-// Input: 1) RPath: return path of the message
-// Is used to fill the "Return-Path" and the
-// "X-Sender" fields of the message.
-// 2) Subject: Subject field of the message. If NULL is given
-// the subject is set to "No Subject"
-// 3) mailTo: Destination address
-// 4) data: Null terminated string containing the data to be send.
-// 5,6) headers of the message. Note that the second
-// parameter, headers_lc, is actually a lowercased version of
-// headers. The should match exactly (in terms of length),
-// only differ in case
-// Output: Error code or SUCCESS
-// Description:
-// Author/Date: jcar 20/9/96
-// History:
-//*******************************************************************/
-int SendText(char *RPath, char *Subject, char *mailTo, char *mailCc, char *mailBcc, char *data,
- char *headers, char *headers_lc, char **error_message)
-{
- int res;
- char *p;
- char *tempMailTo, *token, *pos1, *pos2;
- char *server_response = NULL;
- char *stripped_header = NULL;
- char *data_cln;
- int data_cln_len;
-
- /* check for NULL parameters */
- if (data == NULL)
- return (BAD_MSG_CONTENTS);
- if (mailTo == NULL)
- return (BAD_MSG_DESTINATION);
- if (RPath == NULL)
- return (BAD_MSG_RPATH);
-
- /* simple checks for the mailto address */
- /* have ampersand ? */
- /* mfischer, 20020514: I commented this out because it really
- seems bogus. Only a username for example may still be a
- valid address at the destination system.
- if (strchr(mailTo, '@') == NULL)
- return (BAD_MSG_DESTINATION);
- */
-
- sprintf(Buffer, "HELO %s\r\n", LocalHost);
-
- /* in the beggining of the dialog */
- /* attempt reconnect if the first Post fail */
- if ((res = Post(Buffer)) != SUCCESS) {
- MailConnect();
- if ((res = Post(Buffer)) != SUCCESS)
- return (res);
- }
- if ((res = Ack(&server_response)) != SUCCESS) {
- SMTP_ERROR_RESPONSE(server_response);
- return (res);
- }
-
- snprintf(Buffer, MAIL_BUFFER_SIZE, "MAIL FROM:<%s>\r\n", RPath);
- if ((res = Post(Buffer)) != SUCCESS)
- return (res);
- if ((res = Ack(&server_response)) != SUCCESS) {
- SMTP_ERROR_RESPONSE(server_response);
- return W32_SM_SENDMAIL_FROM_MALFORMED;
- }
-
- tempMailTo = estrdup(mailTo);
- /* Send mail to all rcpt's */
- token = strtok(tempMailTo, ",");
- while(token != NULL)
- {
- snprintf(Buffer, MAIL_BUFFER_SIZE, "RCPT TO:<%s>\r\n", token);
- if ((res = Post(Buffer)) != SUCCESS) {
- efree(tempMailTo);
- return (res);
- }
- if ((res = Ack(&server_response)) != SUCCESS) {
- SMTP_ERROR_RESPONSE(server_response);
- efree(tempMailTo);
- return (res);
- }
- token = strtok(NULL, ",");
- }
- efree(tempMailTo);
-
- if (mailCc && *mailCc) {
- tempMailTo = estrdup(mailCc);
- /* Send mail to all rcpt's */
- token = strtok(tempMailTo, ",");
- while(token != NULL)
- {
- snprintf(Buffer, MAIL_BUFFER_SIZE, "RCPT TO:<%s>\r\n", token);
- if ((res = Post(Buffer)) != SUCCESS) {
- efree(tempMailTo);
- return (res);
- }
- if ((res = Ack(&server_response)) != SUCCESS) {
- SMTP_ERROR_RESPONSE(server_response);
- efree(tempMailTo);
- return (res);
- }
- token = strtok(NULL, ",");
- }
- efree(tempMailTo);
- }
- /* Send mail to all Cc rcpt's */
- else if (headers && (pos1 = strstr(headers_lc, "cc:")) && ((pos1 == headers_lc) || iscntrl(*(pos1-1)))) {
- /* Real offset is memaddress from the original headers + difference of
- * string found in the lowercase headrs + 3 characters to jump over
- * the cc: */
- pos1 = headers + (pos1 - headers_lc) + 3;
- if (NULL == (pos2 = strstr(pos1, "\r\n"))) {
-
- tempMailTo = estrndup(pos1, strlen(pos1));
-
- } else {
- tempMailTo = estrndup(pos1, pos2-pos1);
-
- }
-
- token = strtok(tempMailTo, ",");
- while(token != NULL)
- {
- SMTP_SKIP_SPACE(token);
- sprintf(Buffer, "RCPT TO:<%s>\r\n", token);
- if ((res = Post(Buffer)) != SUCCESS)
- return (res);
- if ((res = Ack(&server_response)) != SUCCESS) {
- SMTP_ERROR_RESPONSE(server_response);
- return (res);
- }
- token = strtok(NULL, ",");
- }
- efree(tempMailTo);
- }
-
- /* Send mail to all Bcc rcpt's
- This is basically a rip of the Cc code above.
- Just don't forget to remove the Bcc: from the header afterwards. */
- if (mailBcc && *mailBcc) {
- tempMailTo = estrdup(mailBcc);
- /* Send mail to all rcpt's */
- token = strtok(tempMailTo, ",");
- while(token != NULL)
- {
- SMTP_SKIP_SPACE(token);
- snprintf(Buffer, MAIL_BUFFER_SIZE, "RCPT TO:<%s>\r\n", token);
- if ((res = Post(Buffer)) != SUCCESS) {
- efree(tempMailTo);
- return (res);
- }
- if ((res = Ack(&server_response)) != SUCCESS) {
- SMTP_ERROR_RESPONSE(server_response);
- efree(tempMailTo);
- return (res);
- }
- token = strtok(NULL, ",");
- }
- efree(tempMailTo);
- }
- else if (headers) {
- if (pos1 = strstr(headers_lc, "bcc:")) {
- /* Real offset is memaddress from the original headers + difference of
- * string found in the lowercase headrs + 4 characters to jump over
- * the bcc: */
- pos1 = headers + (pos1 - headers_lc) + 4;
- if (NULL == (pos2 = strstr(pos1, "\r\n"))) {
- int foo = strlen(pos1);
- tempMailTo = estrndup(pos1, strlen(pos1));
- /* Later, when we remove the Bcc: out of the
- header we know it was the last thing. */
- pos2 = pos1;
- } else {
- tempMailTo = estrndup(pos1, pos2 - pos1);
- }
-
- token = strtok(tempMailTo, ",");
- while(token != NULL)
- {
- SMTP_SKIP_SPACE(token);
- sprintf(Buffer, "RCPT TO:<%s>\r\n", token);
- if ((res = Post(Buffer)) != SUCCESS) {
- return (res);
- }
- if ((res = Ack(&server_response)) != SUCCESS) {
- SMTP_ERROR_RESPONSE(server_response);
- return (res);
- }
- token = strtok(NULL, ",");
- }
- efree(tempMailTo);
-
- /* Now that we've identified that we've a Bcc list,
- remove it from the current header. */
- if (NULL == (stripped_header = ecalloc(1, strlen(headers)))) {
- return OUT_OF_MEMORY;
- }
- /* headers = point to string start of header
- pos1 = pointer IN headers where the Bcc starts
- '4' = Length of the characters 'bcc:'
- Because we've added +4 above for parsing the Emails
- we've to substract them here. */
- memcpy(stripped_header, headers, pos1 - headers - 4);
- if (pos1 != pos2) {
- /* if pos1 != pos2 , pos2 points to the rest of the headers.
- Since pos1 != pos2 if "\r\n" was found, we know those characters
- are there and so we jump over them (else we would generate a new header
- which would look like "\r\n\r\n". */
- memcpy(stripped_header + (pos1 - headers - 4), pos2 + 2, strlen(pos2) - 2);
- }
- }
- }
-
- /* Simplify the code that we create a copy of stripped_header no matter if
- we actually strip something or not. So we've a single efree() later. */
- if (headers && !stripped_header) {
- if (NULL == (stripped_header = estrndup(headers, strlen(headers)))) {
- return OUT_OF_MEMORY;
- }
- }
-
- if ((res = Post("DATA\r\n")) != SUCCESS) {
- if (stripped_header) {
- efree(stripped_header);
- }
- return (res);
- }
- if ((res = Ack(&server_response)) != SUCCESS) {
- SMTP_ERROR_RESPONSE(server_response);
- if (stripped_header) {
- efree(stripped_header);
- }
- return (res);
- }
-
- /* send message header */
- if (Subject == NULL) {
- res = PostHeader(RPath, "No Subject", mailTo, stripped_header);
- } else {
- res = PostHeader(RPath, Subject, mailTo, stripped_header);
- }
- if (stripped_header) {
- efree(stripped_header);
- }
- if (res != SUCCESS) {
- return (res);
- }
-
- /* Escape \n. sequences
- * We use php_str_to_str() and not php_str_replace_in_subject(), since the latter
- * uses ZVAL as it's parameters */
- data_cln = php_str_to_str(data, strlen(data), PHP_WIN32_MAIL_DOT_PATTERN, sizeof(PHP_WIN32_MAIL_DOT_PATTERN) - 1,
- PHP_WIN32_MAIL_DOT_REPLACE, sizeof(PHP_WIN32_MAIL_DOT_REPLACE) - 1, &data_cln_len);
- if (!data_cln) {
- data_cln = estrdup("");
- data_cln_len = 1;
- }
-
- /* send message contents in 1024 chunks */
- {
- char c, *e2, *e = data_cln + data_cln_len;
- p = data_cln;
-
- while (e - p > 1024) {
- e2 = p + 1024;
- c = *e2;
- *e2 = '\0';
- if ((res = Post(p)) != SUCCESS) {
- efree(data_cln);
- return(res);
- }
- *e2 = c;
- p = e2;
- }
- if ((res = Post(p)) != SUCCESS) {
- efree(data_cln);
- return(res);
- }
- }
-
- efree(data_cln);
-
- /*send termination dot */
- if ((res = Post("\r\n.\r\n")) != SUCCESS)
- return (res);
- if ((res = Ack(&server_response)) != SUCCESS) {
- SMTP_ERROR_RESPONSE(server_response);
- return (res);
- }
-
- return (SUCCESS);
-}
-
-int addToHeader(char **header_buffer, const char *specifier, char *string) {
- if (NULL == (*header_buffer = erealloc(*header_buffer, strlen(*header_buffer) + strlen(specifier) + strlen(string) + 1))) {
- return 0;
- }
- sprintf(*header_buffer + strlen(*header_buffer), specifier, string);
- return 1;
-}
-
-/*********************************************************************
-// Name: PostHeader
-// Input: 1) return path
-// 2) Subject
-// 3) destination address
-// 4) headers
-// Output: Error code or Success
-// Description:
-// Author/Date: jcar 20/9/96
-// History:
-//********************************************************************/
-int PostHeader(char *RPath, char *Subject, char *mailTo, char *xheaders)
-{
-
- /* Print message header according to RFC 822 */
- /* Return-path, Received, Date, From, Subject, Sender, To, cc */
-
- time_t tNow = time(NULL);
- struct tm *tm = localtime(&tNow);
- int zoneh = abs(_timezone);
- int zonem, res;
- char *header_buffer;
- char *headers_lc = NULL;
- size_t i;
-
- if (xheaders) {
- if (NULL == (headers_lc = estrdup(xheaders))) {
- return OUT_OF_MEMORY;
- }
- for (i = 0; i < strlen(headers_lc); i++) {
- headers_lc[i] = tolower(headers_lc[i]);
- }
- }
-
- if (NULL == (header_buffer = ecalloc(1, MAIL_BUFFER_SIZE))) {
- efree(headers_lc);
- return OUT_OF_MEMORY;
- }
- zoneh /= (60 * 60);
- zonem = (abs(_timezone) / 60) - (zoneh * 60);
-
- if(!xheaders || !strstr(headers_lc, "date:")){
- sprintf(header_buffer, "Date: %s, %02d %s %04d %02d:%02d:%02d %s%02d%02d\r\n",
- days[tm->tm_wday],
- tm->tm_mday,
- months[tm->tm_mon],
- tm->tm_year + 1900,
- tm->tm_hour,
- tm->tm_min,
- tm->tm_sec,
- (_timezone <= 0) ? "+" : (_timezone > 0) ? "-" : "",
- zoneh,
- zonem);
- }
-
- if (!headers_lc || !strstr(headers_lc, "from:")) {
- if (!addToHeader(&header_buffer, "From: %s\r\n", RPath)) {
- goto PostHeader_outofmem;
- }
- }
- if (!addToHeader(&header_buffer, "Subject: %s\r\n", Subject)) {
- goto PostHeader_outofmem;
- }
-
- /* Only add the To: field from the $to parameter if isn't in the custom headers */
- if ((headers_lc && (!strstr(headers_lc, "\r\nto:") && (strncmp(headers_lc, "to:", 3) != 0))) || !headers_lc) {
- if (!addToHeader(&header_buffer, "To: %s\r\n", mailTo)) {
- goto PostHeader_outofmem;
- }
- }
- if(xheaders){
- if (!addToHeader(&header_buffer, "%s\r\n", xheaders)) {
- goto PostHeader_outofmem;
- }
- }
-
- if (headers_lc) {
- efree(headers_lc);
- }
- if ((res = Post(header_buffer)) != SUCCESS) {
- efree(header_buffer);
- return (res);
- }
- efree(header_buffer);
-
- if ((res = Post("\r\n")) != SUCCESS) {
- return (res);
- }
-
- return (SUCCESS);
-
-PostHeader_outofmem:
- if (headers_lc) {
- efree(headers_lc);
- }
- return OUT_OF_MEMORY;
-}
-
-
-
-/*********************************************************************
-// Name: MailConnect
-// Input: None
-// Output: None
-// Description: Connect to the mail host and receive the welcome message.
-// Author/Date: jcar 20/9/96
-// History:
-//********************************************************************/
-int MailConnect()
-{
-
- int res;
- short portnum;
-
- /* Create Socket */
- if ((sc = socket(PF_INET, SOCK_STREAM, 0)) == INVALID_SOCKET)
- return (FAILED_TO_OBTAIN_SOCKET_HANDLE);
-
- /* Get our own host name */
- if (gethostname(LocalHost, HOST_NAME_LEN))
- return (FAILED_TO_GET_HOSTNAME);
-
- /* Resolve the servers IP */
- /*
- if (!isdigit(MailHost[0])||!gethostbyname(MailHost))
- {
- return (FAILED_TO_RESOLVE_HOST);
- }
- */
-
- portnum = (short) INI_INT("smtp_port");
- if (!portnum) {
- portnum = 25;
- }
-
- /* Connect to server */
- sock_in.sin_family = AF_INET;
- sock_in.sin_port = htons(portnum);
- sock_in.sin_addr.S_un.S_addr = GetAddr(MailHost);
-
- if (connect(sc, (LPSOCKADDR) & sock_in, sizeof(sock_in)))
- return (FAILED_TO_CONNECT);
-
- /* receive Server welcome message */
- res = Ack(NULL);
- return (res);
-}
-
-
-
-
-
-
-/*********************************************************************
-// Name: Post
-// Input:
-// Output:
-// Description:
-// Author/Date: jcar 20/9/96
-// History:
-//********************************************************************/
-#ifndef NETWARE
-int Post(LPCSTR msg)
-#else
-int Post(char *msg)
-#endif
-{
- int len = strlen(msg);
- int slen;
- int index = 0;
-
- while (len > 0) {
- if ((slen = send(sc, msg + index, len, 0)) < 1)
- return (FAILED_TO_SEND);
- len -= slen;
- index += slen;
- }
- return (SUCCESS);
-}
-
-
-
-/*********************************************************************
-// Name: Ack
-// Input:
-// Output:
-// Description:
-// Get the response from the server. We only want to know if the
-// last command was successful.
-// Author/Date: jcar 20/9/96
-// History:
-//********************************************************************/
-int Ack(char **server_response)
-{
- static char buf[MAIL_BUFFER_SIZE];
- int rlen;
- int Index = 0;
- int Received = 0;
-
- again:
-
- if ((rlen = recv(sc, buf + Index, ((MAIL_BUFFER_SIZE) - 1) - Received, 0)) < 1)
- return (FAILED_TO_RECEIVE);
-
- Received += rlen;
- buf[Received] = 0;
- /*err_msg fprintf(stderr,"Received: (%d bytes) %s", rlen, buf + Index); */
-
- /* Check for newline */
- Index += rlen;
-
- /* SMPT RFC says \r\n is the only valid line ending, who are we to argue ;)
- * The response code must contain at least 5 characters ex. 220\r\n */
- if (Received < 5 || buf[Received - 1] != '\n' || buf[Received - 2] != '\r') {
- goto again;
- }
-
- if (buf[0] > '3') {
- /* If we've a valid pointer, return the SMTP server response so the error message contains more information */
- if (server_response) {
- int dec = 0;
- /* See if we have something like \r, \n, \r\n or \n\r at the end of the message and chop it off */
- if (Received > 2) {
- if (buf[Received-1] == '\n' || buf[Received-1] == '\r') {
- dec++;
- if (buf[Received-2] == '\r' || buf[Received-2] == '\n') {
- dec++;
- }
- }
-
- }
- *server_response = estrndup(buf, Received - dec);
- }
- return (SMTP_SERVER_ERROR);
- }
-
- return (SUCCESS);
-}
-
-
-/*********************************************************************
-// Name: unsigned long GetAddr (LPSTR szHost)
-// Input:
-// Output:
-// Description: Given a string, it will return an IP address.
-// - first it tries to convert the string directly
-// - if that fails, it tries o resolve it as a hostname
-//
-// WARNING: gethostbyname() is a blocking function
-// Author/Date: jcar 20/9/96
-// History:
-//********************************************************************/
-#ifndef NETWARE
-unsigned long GetAddr(LPSTR szHost)
-#else
-unsigned long GetAddr(char * szHost)
-#endif
-{
- LPHOSTENT lpstHost;
- u_long lAddr = INADDR_ANY;
-
- /* check that we have a string */
- if (*szHost) {
-
- /* check for a dotted-IP address string */
- lAddr = inet_addr(szHost);
-
- /* If not an address, then try to resolve it as a hostname */
- if ((lAddr == INADDR_NONE) && (strcmp(szHost, "255.255.255.255"))) {
-
- lpstHost = gethostbyname(szHost);
- if (lpstHost) { /* success */
-#ifndef NETWARE
- lAddr = *((u_long FAR *) (lpstHost->h_addr));
-#else
- lAddr = *((u_long *) (lpstHost->h_addr));
-#endif /* NETWARE */
- } else {
- lAddr = INADDR_ANY; /* failure */
- }
- }
- }
- return (lAddr);
-} /* end GetAddr() */
diff --git a/win32/sendmail.h b/win32/sendmail.h
deleted file mode 100644
index 3f3539e24c..0000000000
--- a/win32/sendmail.h
+++ /dev/null
@@ -1,61 +0,0 @@
-#if !defined(sendmail_h) /* Sentry, use file only if it's not already included. */
-#define sendmail_h
-#ifndef NETWARE
-#include <windows.h>
-#endif
-
-#define HOST_NAME_LEN 256
-#define MAX_APPNAME_LENGHT 100
-#define MAIL_BUFFER_SIZE (1024*4) /* 4k buffer */
-/* Return values */
-#define MIN_ERROR_INDEX 0 /* Always 0 like SUCCESS */
-#define SUCCESS 0
-#define FAILED_TO_PARSE_ARGUMENTS 1
-#define FAILED_TO_OPEN_MAILFILE 2
-#define FAILED_TO_START_SOCKETS 3
-#define FAILED_TO_RESOLVE_HOST 4
-#define FAILED_TO_OBTAIN_SOCKET_HANDLE 5
-#define FAILED_TO_CONNECT 6
-#define FAILED_TO_SEND 7
-#define FAILED_TO_RECEIVE 8
-#define SMTP_SERVER_ERROR 9
-#define FAILED_TO_GET_HOSTNAME 10
-#define OUT_OF_MEMORY 11
-#define UNKNOWN_ERROR 12
-#define BAD_MSG_CONTENTS 13
-#define BAD_MSG_SUBJECT 14
-#define BAD_MSG_DESTINATION 15
-#define BAD_MSG_RPATH 16
-#define BAD_MAIL_HOST 17
-#define BAD_MSG_FILE 18
-#define W32_SM_SENDMAIL_FROM_NOT_SET 19
-#define W32_SM_SENDMAIL_FROM_MALFORMED 20
-#define W32_SM_PCRE_ERROR 21
-#define MAX_ERROR_INDEX 22 /* Always last error message + 1 */
-
-
-PHPAPI int TSendMail(char *smtpaddr, int *returnerror, char **error_message,
- char *RPath, char *Subject, char *mailTo, char *data,
- char *mailCc, char *mailBcc, char *mailRPath);
-PHPAPI void TSMClose(void);
-int SendText(char *RPath, char *Subject, char *mailTo, char *mailCc, char *mailBcc, char *data,
- char *headers, char *headers_lc, char **error_message);
-PHPAPI char *GetSMErrorText(int index);
-
-int MailConnect();
-int PostHeader(char *, char *, char *, char *);
-#ifndef NETWARE
-int Post(LPCSTR msg);
-#else
-int Post(char *msg);
-#endif
-int Ack(char **server_response);
-#ifndef NETWARE
-unsigned long GetAddr(LPSTR szHost);
-#else
-unsigned long GetAddr(char * szHost);
-#endif
-
-
-
-#endif /* sendmail_h */
diff --git a/win32/signal.h b/win32/signal.h
deleted file mode 100644
index de43f98e80..0000000000
--- a/win32/signal.h
+++ /dev/null
@@ -1,16 +0,0 @@
-/*
-** Change here: if you plan to use your own version of <signal.h>
-** the original "#include <signal.h>" produces an infinite reinclusion
-** of this file, instead of including the standard include-file.
-** Under MS Visual Studio, there are occurences in the source where
-** <signal.h> gets included throughout the PHP sources, and this should
-** include THIS file, not the standard one which does not have the
-** additional signals defined below.
-** One way to remove the infinite reinclusion of this file (which is located
-** in ../win32), is to specify the parent directory in which the standard
-** include file is located.
-*/
-#include <../include/signal.h>
-#define SIGALRM 13
-#define SIGVTALRM 26 /* virtual time alarm */
-#define SIGPROF 27 /* profiling time alarm */
diff --git a/win32/syslog.h b/win32/syslog.h
deleted file mode 100644
index 135bc0b74c..0000000000
--- a/win32/syslog.h
+++ /dev/null
@@ -1,78 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: Sterling Hughes <sterling@php.net> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifndef SYSLOG_H
-#define SYSLOG_H
-#define WIN32_LEAN_AND_MEAN
-#include <windows.h>
-
-#define LOG_EMERG 1
-#define LOG_ALERT 1
-#define LOG_CRIT 1
-#define LOG_ERR 4
-#define LOG_WARNING 5
-#define LOG_NOTICE 6
-#define LOG_INFO 6
-#define LOG_DEBUG 6
-
-#define LOG_PRIMASK 0x07
-
-#define LOG_PRI(p) ((p) & LOG_PRIMASK)
-#define LOG_MAKEPRI(fac, pri) (((fac) << 3) | (pri))
-
-#define LOG_KERN (0<<3)
-#define LOG_USER (1<<3)
-#define LOG_MAIL (2<<3)
-#define LOG_DAEMON (3<<3)
-#define LOG_AUTH (4<<3)
-#define LOG_SYSLOG (5<<3)
-#define LOG_LPR (6<<3)
-#define LOG_NEWS (7<<3)
-#define LOG_UUCP (8<<3)
-#define LOG_CRON (9<<3)
-#define LOG_AUTHPRIV (10<<3)
-
-#define LOG_NFACILITIES 10
-#define LOG_FACMASK 0x03f8
-#define LOG_FAC(p) (((p) & LOG_FACMASK) >> 3)
-
-#define LOG_MASK(pri) (1 << (pri))
-#define LOG_UPTO(pri) ((1 << ((pri)+1)) - 1)
-
-/*
- * Option flags for openlog.
- *
- * LOG_ODELAY no longer does anything.
- * LOG_NDELAY is the inverse of what it used to be.
- */
-#define LOG_PID 0x01 /* log the pid with each message */
-#define LOG_CONS 0x02 /* log on the console if errors in sending */
-#define LOG_ODELAY 0x04 /* delay open until first syslog() (default) */
-#define LOG_NDELAY 0x08 /* don't delay open */
-#define LOG_NOWAIT 0x10 /* don't wait for console forks: DEPRECATED */
-#define LOG_PERROR 0x20 /* log to stderr as well */
-
-
-extern void closelog(void);
-extern void openlog(const char *, int, int);
-extern void syslog(int, const char *, ...);
-
-
-#endif /* SYSLOG_H */
diff --git a/win32/syslog.reg b/win32/syslog.reg
deleted file mode 100644
index 2baa88e366..0000000000
--- a/win32/syslog.reg
+++ /dev/null
@@ -1,5 +0,0 @@
-REGEDIT4
-
-[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Eventlog\Application\PHP-5.1.0-dev]
-"TypesSupported"=dword:00000007
-"EventMessageFile"="C:\\php5\\php5ts.dll"
diff --git a/win32/testsuite.dsp b/win32/testsuite.dsp
deleted file mode 100644
index 5cd65622f5..0000000000
--- a/win32/testsuite.dsp
+++ /dev/null
@@ -1,150 +0,0 @@
-# Microsoft Developer Studio Project File - Name="testsuite" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Generic Project" 0x010a
-
-CFG=testsuite - Win32 Debug_TS
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "testsuite.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "testsuite.mak" CFG="testsuite - Win32 Debug_TS"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "testsuite - Win32 Release_TS_Inline" (based on "Win32 (x86) Generic Project")
-!MESSAGE "testsuite - Win32 Release_TS" (based on "Win32 (x86) Generic Project")
-!MESSAGE "testsuite - Win32 Release_TSDbg" (based on "Win32 (x86) Generic Project")
-!MESSAGE "testsuite - Win32 Debug_TS" (based on "Win32 (x86) Generic Project")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-MTL=midl.exe
-
-!IF "$(CFG)" == "testsuite - Win32 Release_TS_Inline"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release_TS_Inline"
-# PROP BASE Intermediate_Dir "Release_TS_Inline"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "..\..\Release_TS_Inline"
-# PROP Intermediate_Dir "..\..\"
-# PROP Target_Dir ""
-
-!ELSEIF "$(CFG)" == "testsuite - Win32 Release_TS"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release_TS"
-# PROP BASE Intermediate_Dir "Release_TS"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "..\..\Release_TS"
-# PROP Intermediate_Dir "..\..\"
-# PROP Target_Dir ""
-
-!ELSEIF "$(CFG)" == "testsuite - Win32 Release_TSDbg"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release_TSDbg"
-# PROP BASE Intermediate_Dir "Release_TSDbg"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "..\..\Release_TSDbg"
-# PROP Intermediate_Dir "..\..\"
-# PROP Target_Dir ""
-
-!ELSEIF "$(CFG)" == "testsuite - Win32 Debug_TS"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug_TS"
-# PROP BASE Intermediate_Dir "Debug_TS"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "..\..\Debug_TS"
-# PROP Intermediate_Dir "..\..\"
-# PROP Target_Dir ""
-
-!ENDIF
-
-# Begin Target
-
-# Name "testsuite - Win32 Release_TS_Inline"
-# Name "testsuite - Win32 Release_TS"
-# Name "testsuite - Win32 Release_TSDbg"
-# Name "testsuite - Win32 Debug_TS"
-# Begin Source File
-
-SOURCE=..\results.txt
-
-!IF "$(CFG)" == "testsuite - Win32 Release_TS_Inline"
-
-# PROP Intermediate_Dir "..\Release_TS_Inline"
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Running Testsuite, please wait...
-IntDir=.\..\Release_TS_Inline
-InputPath=..\results.txt
-
-"..\..\results.txt" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- set TOP_BUILDDIR=Release_TS_inline
- set TEST_DIR=tests
- $(IntDir)\php.exe -q ..\run-tests.php > ..\results.txt
-
-# End Custom Build
-
-!ELSEIF "$(CFG)" == "testsuite - Win32 Release_TS"
-
-# PROP Intermediate_Dir "..\Release_TS"
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Running Testsuite, please wait...
-IntDir=.\..\Release_TS
-InputPath=..\results.txt
-
-"..\..\results.txt" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- set TOP_BUILDDIR=Release_TS
- set TEST_DIR=tests
- $(IntDir)\php.exe -q ..\run-tests.php > ..\results.txt
-
-# End Custom Build
-
-!ELSEIF "$(CFG)" == "testsuite - Win32 Release_TSDbg"
-
-# PROP Intermediate_Dir "..\Release_TSDbg"
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Running Testsuite, please wait...
-IntDir=.\..\Release_TSDbg
-InputPath=..\results.txt
-
-"..\..\results.txt" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- set TOP_BUILDDIR=Release_TSDbg
- set TEST_DIR=tests
- $(IntDir)\php.exe -q ..\run-tests.php > ..\results.txt
-
-# End Custom Build
-
-!ELSEIF "$(CFG)" == "testsuite - Win32 Debug_TS"
-
-# PROP Intermediate_Dir "..\Debug_TS"
-# PROP Exclude_From_Build 1
-
-!ENDIF
-
-# End Source File
-# End Target
-# End Project
diff --git a/win32/time.c b/win32/time.c
deleted file mode 100644
index 693f074185..0000000000
--- a/win32/time.c
+++ /dev/null
@@ -1,228 +0,0 @@
-
-/*****************************************************************************
- * *
- * DH_TIME.C *
- * *
- * Freely redistributable and modifiable. Use at your own risk. *
- * *
- * Copyright 1994 The Downhill Project *
- *
- * Modified by Shane Caraveo for use with PHP
- *
- *****************************************************************************/
-
-/* $Id$ */
-
- /**
- *
- * 04-Feb-2001
- * - Added patch by "Vanhanen, Reijo" <Reijo.Vanhanen@helsoft.fi>
- * Improves accuracy of msec
- */
-
-/* Include stuff ************************************************************ */
-
-/* this allows the use of the WaitableTimer functions.
- * For win98 and later */
-#define _WIN32_WINNT 0x400
-
-#include "time.h"
-#include "unistd.h"
-#include "signal.h"
-#include <windows.h>
-#include <winbase.h>
-#include <mmsystem.h>
-#include <errno.h>
-#include "php_win32_globals.h"
-
-int getfilesystemtime(struct timeval *time_Info)
-{
-FILETIME ft;
-__int64 ff;
-
- GetSystemTimeAsFileTime(&ft); /* 100 ns blocks since 01-Jan-1641 */
- /* resolution seems to be 0.01 sec */
- ff = *(__int64*)(&ft);
- time_Info->tv_sec = (int)(ff/(__int64)10000000-(__int64)11644473600);
- time_Info->tv_usec = (int)(ff % 10000000)/10;
- return 0;
-}
-
-
-
-PHPAPI int gettimeofday(struct timeval *time_Info, struct timezone *timezone_Info)
-{
- __int64 timer;
- LARGE_INTEGER li;
- BOOL b;
- double dt;
- TSRMLS_FETCH();
-
- /* Get the time, if they want it */
- if (time_Info != NULL) {
- if (PW32G(starttime).tv_sec == 0) {
- b = QueryPerformanceFrequency(&li);
- if (!b) {
- PW32G(starttime).tv_sec = -1;
- }
- else {
- PW32G(freq) = li.QuadPart;
- b = QueryPerformanceCounter(&li);
- if (!b) {
- PW32G(starttime).tv_sec = -1;
- }
- else {
- getfilesystemtime(&PW32G(starttime));
- timer = li.QuadPart;
- dt = (double)timer/PW32G(freq);
- PW32G(starttime).tv_usec -= (int)((dt-(int)dt)*1000000);
- if (PW32G(starttime).tv_usec < 0) {
- PW32G(starttime).tv_usec += 1000000;
- --PW32G(starttime).tv_sec;
- }
- PW32G(starttime).tv_sec -= (int)dt;
- }
- }
- }
- if (PW32G(starttime).tv_sec > 0) {
- b = QueryPerformanceCounter(&li);
- if (!b) {
- PW32G(starttime).tv_sec = -1;
- }
- else {
- timer = li.QuadPart;
- if (timer < PW32G(lasttime)) {
- getfilesystemtime(time_Info);
- dt = (double)timer/PW32G(freq);
- PW32G(starttime) = *time_Info;
- PW32G(starttime).tv_usec -= (int)((dt-(int)dt)*1000000);
- if (PW32G(starttime).tv_usec < 0) {
- PW32G(starttime).tv_usec += 1000000;
- --PW32G(starttime).tv_sec;
- }
- PW32G(starttime).tv_sec -= (int)dt;
- }
- else {
- PW32G(lasttime) = timer;
- dt = (double)timer/PW32G(freq);
- time_Info->tv_sec = PW32G(starttime).tv_sec + (int)dt;
- time_Info->tv_usec = PW32G(starttime).tv_usec + (int)((dt-(int)dt)*1000000);
- if (time_Info->tv_usec > 1000000) {
- time_Info->tv_usec -= 1000000;
- ++time_Info->tv_sec;
- }
- }
- }
- }
- if (PW32G(starttime).tv_sec < 0) {
- getfilesystemtime(time_Info);
- }
-
- }
- /* Get the timezone, if they want it */
- if (timezone_Info != NULL) {
- _tzset();
- timezone_Info->tz_minuteswest = _timezone;
- timezone_Info->tz_dsttime = _daylight;
- }
- /* And return */
- return 0;
-}
-
-void usleep(unsigned int useconds)
-{
- HANDLE timer;
- LARGE_INTEGER due;
-
- due.QuadPart = -(10 * (__int64)useconds);
-
- timer = CreateWaitableTimer(NULL, TRUE, NULL);
- SetWaitableTimer(timer, &due, 0, NULL, NULL, 0);
- WaitForSingleObject(timer, INFINITE);
- CloseHandle(timer);
-}
-
-#if 0 /* looks pretty ropey in here */
-#ifdef HAVE_SETITIMER
-
-
-#ifndef THREAD_SAFE
-unsigned int proftimer, virttimer, realtimer;
-extern LPMSG phpmsg;
-#endif
-
-struct timer_msg {
- int signal;
- unsigned int threadid;
-};
-
-
-LPTIMECALLBACK setitimer_timeout(UINT uTimerID, UINT info, DWORD dwUser, DWORD dw1, DWORD dw2)
-{
- struct timer_msg *msg = (struct timer_msg *) info;
-
- if (msg) {
- raise((int) msg->signal);
- PostThreadMessage(msg->threadid,
- WM_NOTIFY, msg->signal, 0);
- free(msg);
- }
- return 0;
-}
-
-PHPAPI int setitimer(int which, const struct itimerval *value, struct itimerval *ovalue)
-{
- int timeout = value->it_value.tv_sec * 1000 + value->it_value.tv_usec;
- int repeat = TIME_ONESHOT;
-
- /*make sure the message queue is initialized */
- PeekMessage(phpmsg, NULL, WM_USER, WM_USER, PM_NOREMOVE);
- if (timeout > 0) {
- struct timer_msg *msg = malloc(sizeof(struct timer_msg));
- msg->threadid = GetCurrentThreadId();
- if (!ovalue) {
- repeat = TIME_PERIODIC;
- }
- switch (which) {
- case ITIMER_REAL:
- msg->signal = SIGALRM;
- realtimer = timeSetEvent(timeout, 100, (LPTIMECALLBACK) setitimer_timeout, (UINT) msg, repeat);
- break;
- case ITIMER_VIRT:
- msg->signal = SIGVTALRM;
- virttimer = timeSetEvent(timeout, 100, (LPTIMECALLBACK) setitimer_timeout, (UINT) msg, repeat);
- break;
- case ITIMER_PROF:
- msg->signal = SIGPROF;
- proftimer = timeSetEvent(timeout, 100, (LPTIMECALLBACK) setitimer_timeout, (UINT) msg, repeat);
- break;
- default:
- errno = EINVAL;
- return -1;
- break;
- }
- } else {
- switch (which) {
- case ITIMER_REAL:
- timeKillEvent(realtimer);
- break;
- case ITIMER_VIRT:
- timeKillEvent(virttimer);
- break;
- case ITIMER_PROF:
- timeKillEvent(proftimer);
- break;
- default:
- errno = EINVAL;
- return -1;
- break;
- }
- }
-
-
- return 0;
-}
-
-#endif
-#endif
-
diff --git a/win32/time.h b/win32/time.h
deleted file mode 100644
index 5c52e7837e..0000000000
--- a/win32/time.h
+++ /dev/null
@@ -1,43 +0,0 @@
-/*****************************************************************************
- * *
- * sys/time.h *
- * *
- * Freely redistributable and modifiable. Use at your own risk. *
- * *
- * Copyright 1994 The Downhill Project *
- *
- * Modified by Shane Caraveo for PHP
- *
- *****************************************************************************/
-#ifndef TIME_H
-#define TIME_H
-
-/* Include stuff ************************************************************ */
-#include <time.h>
-#include "php.h"
-
-/* Struct stuff ************************************************************* */
-struct timezone {
- int tz_minuteswest;
- int tz_dsttime;
-};
-
-
-struct itimerval {
- struct timeval it_interval; /* next value */
- struct timeval it_value; /* current value */
-};
-
-#define ITIMER_REAL 0 /*generates sigalrm */
-#define ITIMER_VIRTUAL 1 /*generates sigvtalrm */
-#define ITIMER_VIRT 1 /*generates sigvtalrm */
-#define ITIMER_PROF 2 /*generates sigprof */
-
-/* Prototype stuff ********************************************************** */
-PHPAPI extern int gettimeofday(struct timeval *time_Info, struct timezone *timezone_Info);
-
-/* setitimer operates at 100 millisecond resolution */
-PHPAPI extern int setitimer(int which, const struct itimerval *value,
- struct itimerval *ovalue);
-
-#endif
diff --git a/win32/unistd.h b/win32/unistd.h
deleted file mode 100644
index 96e0aedc13..0000000000
--- a/win32/unistd.h
+++ /dev/null
@@ -1,4 +0,0 @@
-#ifndef _PHP_WIN32_UNISTD_H
-#define _PHP_WIN32_UNISTD_H
-void usleep(unsigned int useconds);
-#endif
diff --git a/win32/wfile.c b/win32/wfile.c
deleted file mode 100644
index 1407d6a32b..0000000000
--- a/win32/wfile.c
+++ /dev/null
@@ -1,17 +0,0 @@
-
-/* Function borrowed from the Downhill Project */
-#include "wfile.h"
-#include "direct.h"
-
-int readlink(char *file_Name, char *buf_Mem, int buf_Size)
-{
- /* See if the file exists */
- if (access(file_Name, X_OK) == -1) {
- errno = ENOENT;
- } else {
- errno = EINVAL;
- }
-
- /* Either way, it's not a link */
- return -1;
-}
diff --git a/win32/wfile.h b/win32/wfile.h
deleted file mode 100644
index 2e79406478..0000000000
--- a/win32/wfile.h
+++ /dev/null
@@ -1,16 +0,0 @@
-#include <io.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <errno.h>
-
-#define access _access
-#define X_OK 0
-#ifndef ENOENT
-#define ENOENT 136
-#endif
-#ifndef EINVAL
-#define EINVAL 131
-#endif
-
-int readlink(char *, char *, int);
-int checkroot(char *path);
diff --git a/win32/winutil.c b/win32/winutil.c
deleted file mode 100644
index 6236cab8ad..0000000000
--- a/win32/winutil.c
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-#include "php.h"
-
-PHPAPI char *php_win_err(int error)
-{
- char *buf = NULL;
-
- FormatMessage(
- FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS,
- NULL, error, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPTSTR)&buf, 0, NULL
- );
-
- return (buf ? (char *) buf : "");
-}
diff --git a/win32/winutil.h b/win32/winutil.h
deleted file mode 100644
index 8fb1ce3d43..0000000000
--- a/win32/winutil.h
+++ /dev/null
@@ -1,21 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 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: |
- +----------------------------------------------------------------------+
- */
-
-PHPAPI char *php_win_err(int error);
-
-#define php_win_err() php_win_err(GetLastError())
diff --git a/win32/wsyslog.c b/win32/wsyslog.c
deleted file mode 100644
index 294b3976c4..0000000000
--- a/win32/wsyslog.c
+++ /dev/null
@@ -1,131 +0,0 @@
-/*
- * This file modified from sources for imap4 for use
- * in PHP 3
- */
-/*
- * Program: Unix compatibility routines
- *
- * Author: Mark Crispin
- * Networks and Distributed Computing
- * Computing & Communications
- * University of Washington
- * Administration Building, AG-44
- * Seattle, WA 98195
- * Internet: MRC@CAC.Washington.EDU
- *
- * Date: 14 September 1996
- * Last Edited: 22 October 1996
- *
- * Copyright 1996 by the University of Washington
- *
- * Permission to use, copy, modify, and distribute this software and its
- * documentation for any purpose and without fee is hereby granted, provided
- * that the above copyright notice appears in all copies and that both the
- * above copyright notice and this permission notice appear in supporting
- * documentation, and that the name of the University of Washington not be
- * used in advertising or publicity pertaining to distribution of the software
- * without specific, written prior permission. This software is made available
- * "as is", and
- * THE UNIVERSITY OF WASHINGTON DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED,
- * WITH REGARD TO THIS SOFTWARE, INCLUDING WITHOUT LIMITATION ALL IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, AND IN
- * NO EVENT SHALL THE UNIVERSITY OF WASHINGTON BE LIABLE FOR ANY SPECIAL,
- * INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
- * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, TORT
- * (INCLUDING NEGLIGENCE) OR STRICT LIABILITY, ARISING OUT OF OR IN CONNECTION
- * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- *
- */
-
-
-/* DEDICATION
-
- * This file is dedicated to my dog, Unix, also known as Yun-chan and
- * Unix J. Terwilliker Jehosophat Aloysius Monstrosity Animal Beast. Unix
- * passed away at the age of 11 1/2 on September 14, 1996, 12:18 PM PDT, after
- * a two-month bout with cirrhosis of the liver.
- *
- * He was a dear friend, and I miss him terribly.
- *
- * Lift a leg, Yunie. Luv ya forever!!!!
- */
-
-#include "php.h" /*php specific */
-#include "syslog.h"
-#include <stdio.h>
-#include <fcntl.h>
-#include <process.h>
-
-#include "php_win32_globals.h"
-#include "wsyslog.h"
-
-void closelog(void)
-{
- TSRMLS_FETCH();
- DeregisterEventSource(PW32G(log_source));
- STR_FREE(PW32G(log_header));
- PW32G(log_header) = NULL;
-}
-
-/* Emulator for BSD syslog() routine
- * Accepts: priority
- * message
- * parameters
- */
-
-void syslog(int priority, const char *message, ...)
-{
- va_list args;
- LPTSTR strs[2];
- unsigned short etype;
- char *tmp = NULL;
- DWORD evid;
- TSRMLS_FETCH();
-
- /* default event source */
- if (!PW32G(log_source))
- openlog("php", LOG_PID, LOG_SYSLOG);
-
- switch (priority) { /* translate UNIX type into NT type */
- case LOG_ALERT:
- etype = EVENTLOG_ERROR_TYPE;
- evid = PHP_SYSLOG_ERROR_TYPE;
- break;
- case LOG_INFO:
- etype = EVENTLOG_INFORMATION_TYPE;
- evid = PHP_SYSLOG_INFO_TYPE;
- break;
- default:
- etype = EVENTLOG_WARNING_TYPE;
- evid = PHP_SYSLOG_WARNING_TYPE;
- }
- va_start(args, message); /* initialize vararg mechanism */
- vspprintf(&tmp, 0, message, args); /* build message */
- strs[0] = PW32G(log_header); /* write header */
- strs[1] = tmp; /* then the message */
- /* report the event */
- ReportEvent(PW32G(log_source), etype, (unsigned short) priority, evid, NULL, 2, 0, strs, NULL);
- va_end(args);
- efree(tmp);
-}
-
-
-/* Emulator for BSD openlog() routine
- * Accepts: identity
- * options
- * facility
- */
-
-void openlog(const char *ident, int logopt, int facility)
-{
- TSRMLS_FETCH();
-
- if (PW32G(log_source)) {
- closelog();
- }
-
- STR_FREE(PW32G(log_header));
-
- PW32G(log_source) = RegisterEventSource(NULL, "PHP-" PHP_VERSION);
- spprintf(&PW32G(log_header), 0, (logopt & LOG_PID) ? "%s[%d]" : "%s", ident, getpid());
-}